ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDFhNDFiZjQuLjcyYjQ4NzggMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMjgwMCw3ICsyODAwLDcgQEAKIFM6IGFzayBwZXIgbWFpbCBmb3IgY3VycmVudCBhZGRyZXNzCiAKIE46IE5pY29sYXMgUGl0cmUKLUU6IG5pY29AY2FtLm9yZworRTogbmljb0BmbHV4bmljLm5ldAogRDogU3Ryb25nQVJNIFNBMTEwMCBzdXBwb3J0IGludGVncmF0b3IgJiBoYWNrZXIKIEQ6IFhzY2FsZSBQWEEgYXJjaGl0ZWN0dXJlCiBEOiB1bmlmaWVkIFNNQyA5MUM5eC85MUMxMXggZXRoZXJuZXQgZHJpdmVyIChzbWM5MXgpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWAppbmRleCBkMDU3MzdhLi4wNmI5ODJhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKQEAgLTgyLDYgKzgyLDggQEAKIAktIGluZm8gb24gdGhlIEJsb2NrIEkvTyAoQklPKSBsYXllci4KIGJsb2NrZGV2LwogCS0gaW5mbyBvbiBibG9jayBkZXZpY2VzICYgZHJpdmVycworYnRtcnZsLnR4dAorCS0gaW5mbyBvbiBNYXJ2ZWxsIEJsdWV0b290aCBkcml2ZXIgdXNhZ2UuCiBjYWNoZXRsYi50eHQKIAktIGRlc2NyaWJlcyB0aGUgY2FjaGUvVExCIGZsdXNoaW5nIGludGVyZmFjZXMgTGludXggdXNlcy4KIGNkcm9tLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dAppbmRleCA5ZjcxMWQyLi5kMmI4NTIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9SVEZQLnR4dApAQCAtNzQzLDMgKzc0Myw4MCBAQAogCVJDVSwgcmVhbHRpbWUgUkNVLCBzbGVlcGFibGUgUkNVLCBwZXJmb3JtYW5jZS4KICIKIH0KKworQGFydGljbGV7UGF1bEVNY0tlbm5leTIwMDhSQ1VPU1IKKyxhdXRob3I9IlBhdWwgRS4gTWNLZW5uZXkgYW5kIEpvbmF0aGFuIFdhbHBvbGUiCissdGl0bGU9IkludHJvZHVjaW5nIHRlY2hub2xvZ3kgaW50byB0aGUge0xpbnV4fSBrZXJuZWw6IGEgY2FzZSBzdHVkeSIKKyxZZWFyPSIyMDA4IgorLGpvdXJuYWw9IlNJR09QUyBPcGVyLiBTeXN0LiBSZXYuIgorLHZvbHVtZT0iNDIiCissbnVtYmVyPSI1IgorLHBhZ2VzPSI0LS0xNyIKKyxpc3NuPSIwMTYzLTU5ODAiCissZG9pPXtodHRwOi8vZG9pLmFjbS5vcmcvMTAuMTE0NS8xNDAwMDk3LjE0MDAwOTl9CisscHVibGlzaGVyPSJBQ00iCissYWRkcmVzcz0iTmV3IFlvcmssIE5ZLCBVU0EiCissYW5ub3RhdGlvbj17CisJTGludXggY2hhbmdlZCBSQ1UgdG8gYSBmYXIgZ3JlYXRlciBkZWdyZWUgdGhhbiBSQ1UgaGFzIGNoYW5nZWQgTGludXguCit9Cit9CisKK0B1bnB1Ymxpc2hlZHtQYXVsRU1jS2VubmV5MjAwOEhpZXJhcmNoaWNhbFJDVQorLEF1dGhvcj0iUGF1bCBFLiBNY0tlbm5leSIKKyxUaXRsZT0iSGllcmFyY2hpY2FsIHtSQ1V9IgorLG1vbnRoPSJOb3ZlbWJlciIKKyxkYXk9IjMiCisseWVhcj0iMjAwOCIKKyxub3RlPSJBdmFpbGFibGU6CitcdXJse2h0dHA6Ly9sd24ubmV0L0FydGljbGVzLzMwNTc4Mi99CitbVmlld2VkIE5vdmVtYmVyIDYsIDIwMDhdIgorLGFubm90YXRpb249IgorCVJDVSB3aXRoIGNvbWJpbmluZy10cmVlLWJhc2VkIGdyYWNlLXBlcmlvZCBkZXRlY3Rpb24sCisJcGVybWl0dGluZyBpdCB0byBoYW5kbGUgdGhvdXNhbmRzIG9mIENQVXMuCisiCit9CisKK0Bjb25mZXJlbmNle1BhdWxFTWNLZW5uZXkyMDA5TWFsaWNpb3VzVVJDVQorLEF1dGhvcj0iUGF1bCBFLiBNY0tlbm5leSIKKyxUaXRsZT0iVXNpbmcgYSBNYWxpY2lvdXMgVXNlci1MZXZlbCB7UkNVfSB0byBUb3J0dXJlIHtSQ1V9LUJhc2VkIEFsZ29yaXRobXMiCissQm9va3RpdGxlPSJsaW51eC5jb25mLmF1IDIwMDkiCissbW9udGg9IkphbnVhcnkiCisseWVhcj0iMjAwOSIKKyxhZGRyZXNzPSJIb2JhcnQsIEF1c3RyYWxpYSIKKyxub3RlPSJBdmFpbGFibGU6CitcdXJse2h0dHA6Ly93d3cucmRyb3AuY29tL3VzZXJzL3BhdWxtY2svUkNVL3VyY3V0b3J0dXJlLjIwMDkuMDEuMjJhLnBkZn0KK1tWaWV3ZWQgRmVicnVhcnkgMiwgMjAwOV0iCissYW5ub3RhdGlvbj0iCisJUmVhbHRpbWUgUkNVIGFuZCB0b3J0dXJlLXRlc3RpbmcgUkNVIHVzZXMuCisiCit9CisKK0B1bnB1Ymxpc2hlZHtNYXRoaWV1RGVzbm95ZXJzMjAwOVVSQ1UKKyxBdXRob3I9Ik1hdGhpZXUgRGVzbm95ZXJzIgorLFRpdGxlPSJbe1JGQ30gZ2l0IHRyZWVdIFVzZXJzcGFjZSB7UkNVfSAodXJjdSkgZm9yIHtMaW51eH0iCissbW9udGg9IkZlYnJ1YXJ5IgorLGRheT0iNSIKKyx5ZWFyPSIyMDA5IgorLG5vdGU9IkF2YWlsYWJsZToKK1x1cmx7aHR0cDovL2xrbWwub3JnL2xrbWwvMjAwOS8yLzUvNTcyfQorXHVybHtnaXQ6Ly9sdHRuZy5vcmcvdXNlcnNwYWNlLXJjdS5naXR9CitbVmlld2VkIEZlYnJ1YXJ5IDIwLCAyMDA5XSIKKyxhbm5vdGF0aW9uPSIKKwlNYXRoaWV1IERlc25veWVycydzIHVzZXItc3BhY2UgUkNVIGltcGxlbWVudGF0aW9uLgorCWdpdDovL2x0dG5nLm9yZy91c2Vyc3BhY2UtcmN1LmdpdAorIgorfQorCitAdW5wdWJsaXNoZWR7UGF1bEVNY0tlbm5leTIwMDlCbG9hdFdhdGNoUkNVCissQXV0aG9yPSJQYXVsIEUuIE1jS2VubmV5IgorLFRpdGxlPSJ7UkNVfTogVGhlIHtCbG9hdHdhdGNofSBFZGl0aW9uIgorLG1vbnRoPSJNYXJjaCIKKyxkYXk9IjE3IgorLHllYXI9IjIwMDkiCissbm90ZT0iQXZhaWxhYmxlOgorXHVybHtodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8zMjM5MjkvfQorW1ZpZXdlZCBNYXJjaCAyMCwgMjAwOV0iCissYW5ub3RhdGlvbj0iCisJVW5pcHJvY2Vzc29yIGFzc3VtcHRpb25zIGFsbG93IHNpbXBsaWZpZWQgUkNVIGltcGxlbWVudGF0aW9uLgorIgorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvVVAudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvVVAudHh0CmluZGV4IGFhYjRhOWUuLjkwZWM1MzQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL1VQLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9VUC50eHQKQEAgLTIsMTQgKzIsMTMgQEAKIAogCiBBIGNvbW1vbiBtaXNjb25jZXB0aW9uIGlzIHRoYXQsIG9uIFVQIHN5c3RlbXMsIHRoZSBjYWxsX3JjdSgpIHByaW1pdGl2ZQotbWF5IGltbWVkaWF0ZWx5IGludm9rZSBpdHMgZnVuY3Rpb24sIGFuZCB0aGF0IHRoZSBzeW5jaHJvbml6ZV9yY3UoKQotcHJpbWl0aXZlIG1heSByZXR1cm4gaW1tZWRpYXRlbHkuICBUaGUgYmFzaXMgb2YgdGhpcyBtaXNjb25jZXB0aW9uCittYXkgaW1tZWRpYXRlbHkgaW52b2tlIGl0cyBmdW5jdGlvbi4gIFRoZSBiYXNpcyBvZiB0aGlzIG1pc2NvbmNlcHRpb24KIGlzIHRoYXQgc2luY2UgdGhlcmUgaXMgb25seSBvbmUgQ1BVLCBpdCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSB0bwogd2FpdCBmb3IgYW55dGhpbmcgZWxzZSB0byBnZXQgZG9uZSwgc2luY2UgdGhlcmUgYXJlIG5vIG90aGVyIENQVXMgZm9yCiBhbnl0aGluZyBlbHNlIHRvIGJlIGhhcHBlbmluZyBvbi4gIEFsdGhvdWdoIHRoaXMgYXBwcm9hY2ggd2lsbCAtc29ydC0gLW9mLQogd29yayBhIHN1cnByaXNpbmcgYW1vdW50IG9mIHRoZSB0aW1lLCBpdCBpcyBhIHZlcnkgYmFkIGlkZWEgaW4gZ2VuZXJhbC4KLVRoaXMgZG9jdW1lbnQgcHJlc2VudHMgdGhyZWUgZXhhbXBsZXMgdGhhdCBkZW1vbnN0cmF0ZSBleGFjdGx5IGhvdyBiYWQgYW4KLWlkZWEgdGhpcyBpcy4KK1RoaXMgZG9jdW1lbnQgcHJlc2VudHMgdGhyZWUgZXhhbXBsZXMgdGhhdCBkZW1vbnN0cmF0ZSBleGFjdGx5IGhvdyBiYWQKK2FuIGlkZWEgdGhpcyBpcy4KIAogCiBFeGFtcGxlIDE6IHNvZnRpcnEgU3VpY2lkZQpAQCAtODIsMTEgKzgxLDE4IEBACiAKIFN1bW1hcnkKIAotUGVybWl0dGluZyBjYWxsX3JjdSgpIHRvIGltbWVkaWF0ZWx5IGludm9rZSBpdHMgYXJndW1lbnRzIG9yIHBlcm1pdHRpbmcKLXN5bmNocm9uaXplX3JjdSgpIHRvIGltbWVkaWF0ZWx5IHJldHVybiBicmVha3MgUkNVLCBldmVuIG9uIGEgVVAgc3lzdGVtLgotU28gZG8gbm90IGRvIGl0ISAgRXZlbiBvbiBhIFVQIHN5c3RlbSwgdGhlIFJDVSBpbmZyYXN0cnVjdHVyZSAtbXVzdC0KLXJlc3BlY3QgZ3JhY2UgcGVyaW9kcywgYW5kIC1tdXN0LSBpbnZva2UgY2FsbGJhY2tzIGZyb20gYSBrbm93biBlbnZpcm9ubWVudAotaW4gd2hpY2ggbm8gbG9ja3MgYXJlIGhlbGQuCitQZXJtaXR0aW5nIGNhbGxfcmN1KCkgdG8gaW1tZWRpYXRlbHkgaW52b2tlIGl0cyBhcmd1bWVudHMgYnJlYWtzIFJDVSwKK2V2ZW4gb24gYSBVUCBzeXN0ZW0uICBTbyBkbyBub3QgZG8gaXQhICBFdmVuIG9uIGEgVVAgc3lzdGVtLCB0aGUgUkNVCitpbmZyYXN0cnVjdHVyZSAtbXVzdC0gcmVzcGVjdCBncmFjZSBwZXJpb2RzLCBhbmQgLW11c3QtIGludm9rZSBjYWxsYmFja3MKK2Zyb20gYSBrbm93biBlbnZpcm9ubWVudCBpbiB3aGljaCBubyBsb2NrcyBhcmUgaGVsZC4KKworSXQgLWlzLSBzYWZlIGZvciBzeW5jaHJvbml6ZV9zY2hlZCgpIGFuZCBzeW5jaHJvbml6ZV9yY3VfYmgoKSB0byByZXR1cm4KK2ltbWVkaWF0ZWx5IG9uIGFuIFVQIHN5c3RlbS4gIEl0IGlzIGFsc28gc2FmZSBmb3Igc3luY2hyb25pemVfcmN1KCkKK3RvIHJldHVybiBpbW1lZGlhdGVseSBvbiBVUCBzeXN0ZW1zLCBleGNlcHQgd2hlbiBydW5uaW5nIHByZWVtcHRhYmxlCitSQ1UuCisKK1F1aWNrIFF1aXogIzM6IFdoeSBjYW4ndCBzeW5jaHJvbml6ZV9yY3UoKSByZXR1cm4gaW1tZWRpYXRlbHkgb24KKwlVUCBzeXN0ZW1zIHJ1bm5pbmcgcHJlZW1wdGFibGUgUkNVPwogCiAKIEFuc3dlciB0byBRdWljayBRdWl6ICMxOgpAQCAtMTE3LDMgKzEyMywxMyBAQAogCWNhbGxiYWNrcyBhY3F1aXJlIGxvY2tzIGRpcmVjdGx5LiAgSG93ZXZlciwgYSBncmVhdCBtYW55IFJDVQogCWNhbGxiYWNrcyBkbyBhY3F1aXJlIGxvY2tzIC1pbmRpcmVjdGx5LSwgZm9yIGV4YW1wbGUsIHZpYQogCXRoZSBrZnJlZSgpIHByaW1pdGl2ZS4KKworQW5zd2VyIHRvIFF1aWNrIFF1aXogIzM6CisJV2h5IGNhbid0IHN5bmNocm9uaXplX3JjdSgpIHJldHVybiBpbW1lZGlhdGVseSBvbiBVUCBzeXN0ZW1zCisJcnVubmluZyBwcmVlbXB0YWJsZSBSQ1U/CisKKwlCZWNhdXNlIHNvbWUgb3RoZXIgdGFzayBtaWdodCBoYXZlIGJlZW4gcHJlZW1wdGVkIGluIHRoZSBtaWRkbGUKKwlvZiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJZiBzeW5jaHJvbml6ZV9yY3UoKQorCXNpbXBseSBpbW1lZGlhdGVseSByZXR1cm5lZCwgaXQgd291bGQgcHJlbWF0dXJlbHkgc2lnbmFsIHRoZQorCWVuZCBvZiB0aGUgZ3JhY2UgcGVyaW9kLCB3aGljaCB3b3VsZCBjb21lIGFzIGEgbmFzdHkgc2hvY2sgdG8KKwl0aGF0IG90aGVyIHRocmVhZCB3aGVuIGl0IHN0YXJ0ZWQgcnVubmluZyBhZ2Fpbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0CmluZGV4IGFjY2ZlMmYuLjUxNTI1YTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dApAQCAtMTEsNyArMTEsMTAgQEAKIAlzdHJ1Y3R1cmUgaXMgdXBkYXRlZCBtb3JlIHRoYW4gYWJvdXQgMTAlIG9mIHRoZSB0aW1lLCB0aGVuCiAJeW91IHNob3VsZCBzdHJvbmdseSBjb25zaWRlciBzb21lIG90aGVyIGFwcHJvYWNoLCB1bmxlc3MKIAlkZXRhaWxlZCBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMgc2hvdyB0aGF0IFJDVSBpcyBub25ldGhlbGVzcwotCXRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLgorCXRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLiAgWWVzLCB5b3UgbWlnaHQgdGhpbmsgb2YgUkNVCisJYXMgc2ltcGx5IGN1dHRpbmcgb3ZlcmhlYWQgb2ZmIG9mIHRoZSByZWFkZXJzIGFuZCBpbXBvc2luZyBpdAorCW9uIHRoZSB3cml0ZXJzLiAgVGhhdCBpcyBleGFjdGx5IHdoeSBub3JtYWwgdXNlcyBvZiBSQ1Ugd2lsbAorCWRvIG11Y2ggbW9yZSByZWFkaW5nIHRoYW4gdXBkYXRpbmcuCiAKIAlBbm90aGVyIGV4Y2VwdGlvbiBpcyB3aGVyZSBwZXJmb3JtYW5jZSBpcyBub3QgYW4gaXNzdWUsIGFuZCBSQ1UKIAlwcm92aWRlcyBhIHNpbXBsZXIgaW1wbGVtZW50YXRpb24uICBBbiBleGFtcGxlIG9mIHRoaXMgc2l0dWF0aW9uCkBAIC0yNDAsMTAgKzI0MywxMSBAQAogCWluc3RlYWQgbmVlZCB0byB1c2Ugc3luY2hyb25pemVfaXJxKCkgb3Igc3luY2hyb25pemVfc2NoZWQoKS4KIAogMTIuCUFueSBsb2NrIGFjcXVpcmVkIGJ5IGFuIFJDVSBjYWxsYmFjayBtdXN0IGJlIGFjcXVpcmVkIGVsc2V3aGVyZQotCXdpdGggaXJxIGRpc2FibGVkLCBlLmcuLCB2aWEgc3Bpbl9sb2NrX2lycXNhdmUoKS4gIEZhaWxpbmcgdG8KLQlkaXNhYmxlIGlycSBvbiBhIGdpdmVuIGFjcXVpc2l0aW9uIG9mIHRoYXQgbG9jayB3aWxsIHJlc3VsdCBpbgotCWRlYWRsb2NrIGFzIHNvb24gYXMgdGhlIFJDVSBjYWxsYmFjayBoYXBwZW5zIHRvIGludGVycnVwdCB0aGF0Ci0JYWNxdWlzaXRpb24ncyBjcml0aWNhbCBzZWN0aW9uLgorCXdpdGggc29mdGlycSBkaXNhYmxlZCwgZS5nLiwgdmlhIHNwaW5fbG9ja19pcnFzYXZlKCksCisJc3Bpbl9sb2NrX2JoKCksIGV0Yy4gIEZhaWxpbmcgdG8gZGlzYWJsZSBpcnEgb24gYSBnaXZlbgorCWFjcXVpc2l0aW9uIG9mIHRoYXQgbG9jayB3aWxsIHJlc3VsdCBpbiBkZWFkbG9jayBhcyBzb29uIGFzIHRoZQorCVJDVSBjYWxsYmFjayBoYXBwZW5zIHRvIGludGVycnVwdCB0aGF0IGFjcXVpc2l0aW9uJ3MgY3JpdGljYWwKKwlzZWN0aW9uLgogCiAxMy4JUkNVIGNhbGxiYWNrcyBjYW4gYmUgYW5kIGFyZSBleGVjdXRlZCBpbiBwYXJhbGxlbC4gIEluIG1hbnkgY2FzZXMsCiAJdGhlIGNhbGxiYWNrIGNvZGUgc2ltcGx5IHdyYXBwZXJzIGFyb3VuZCBrZnJlZSgpLCBzbyB0aGF0IHRoaXMKQEAgLTMxMCwzICszMTQsOSBAQAogCUJlY2F1c2UgdGhlc2UgcHJpbWl0aXZlcyBvbmx5IHdhaXQgZm9yIHByZS1leGlzdGluZyByZWFkZXJzLAogCWl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgc2FmZXR5IHRvCiAJYW55IHN1YnNlcXVlbnQgcmVhZGVycy4KKworMTYuCVRoZSB2YXJpb3VzIFJDVSByZWFkLXNpZGUgcHJpbWl0aXZlcyBkbyAtbm90LSBjb250YWluIG1lbW9yeQorCWJhcnJpZXJzLiAgVGhlIENQVSAoYW5kIGluIHNvbWUgY2FzZXMsIHRoZSBjb21waWxlcikgaXMgZnJlZQorCXRvIHJlb3JkZXIgY29kZSBpbnRvIGFuZCBvdXQgb2YgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4KKwlJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIFJDVSB1cGRhdGUtc2lkZSBwcmltaXRpdmVzIHRvCisJZGVhbCB3aXRoIHRoaXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dAppbmRleCA3YWEyMDAyLi4yYTIzNTIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKQEAgLTM2LDcgKzM2LDcgQEAKIAlleGVjdXRlZCBpbiB1c2VyIG1vZGUsIG9yIGV4ZWN1dGVkIGluIHRoZSBpZGxlIGxvb3AsIHdlIGNhbgogCXNhZmVseSBmcmVlIHVwIHRoYXQgaXRlbS4KIAotCVByZWVtcHRpYmxlIHZhcmlhbnRzIG9mIFJDVSAoQ09ORklHX1BSRUVNUFRfUkNVKSBnZXQgdGhlCisJUHJlZW1wdGlibGUgdmFyaWFudHMgb2YgUkNVIChDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSkgZ2V0IHRoZQogCXNhbWUgZWZmZWN0LCBidXQgcmVxdWlyZSB0aGF0IHRoZSByZWFkZXJzIG1hbmlwdWxhdGUgQ1BVLWxvY2FsCiAJY291bnRlcnMuICBUaGVzZSBjb3VudGVycyBhbGxvdyBsaW1pdGVkIHR5cGVzIG9mIGJsb2NraW5nCiAJd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuICBTUkNVIGFsc28gdXNlcwpAQCAtNzksMTAgKzc5LDEwIEBACiBvCUkgaGVhciB0aGF0IFJDVSBuZWVkcyB3b3JrIGluIG9yZGVyIHRvIHN1cHBvcnQgcmVhbHRpbWUga2VybmVscz8KIAogCVRoaXMgd29yayBpcyBsYXJnZWx5IGNvbXBsZXRlZC4gIFJlYWx0aW1lLWZyaWVuZGx5IFJDVSBjYW4gYmUKLQllbmFibGVkIHZpYSB0aGUgQ09ORklHX1BSRUVNUFRfUkNVIGtlcm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4KLQlIb3dldmVyLCB3b3JrIGlzIGluIHByb2dyZXNzIGZvciBlbmFibGluZyBwcmlvcml0eSBib29zdGluZyBvZgotCXByZWVtcHRlZCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLiAgVGhpcyBpcyBuZWVkZWQgaWYgeW91Ci0JaGF2ZSBDUFUtYm91bmQgcmVhbHRpbWUgdGhyZWFkcy4KKwllbmFibGVkIHZpYSB0aGUgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1Uga2VybmVsIGNvbmZpZ3VyYXRpb24KKwlwYXJhbWV0ZXIuICBIb3dldmVyLCB3b3JrIGlzIGluIHByb2dyZXNzIGZvciBlbmFibGluZyBwcmlvcml0eQorCWJvb3N0aW5nIG9mIHByZWVtcHRlZCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLglUaGlzIGlzCisJbmVlZGVkIGlmIHlvdSBoYXZlIENQVS1ib3VuZCByZWFsdGltZSB0aHJlYWRzLgogCiBvCVdoZXJlIGNhbiBJIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBSQ1U/CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3JjdWJhcnJpZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1YmFycmllci50eHQKaW5kZXggOTA5NjAyZC4uZTQzOWEwZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1YmFycmllci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1YmFycmllci50eHQKQEAgLTE3MCw2ICsxNzAsMTMgQEAKIHRoZSB0aW1lcnMsIGFuZCBvbmx5IHRoZW4gaW52b2tlIHJjdV9iYXJyaWVyKCkgdG8gd2FpdCBmb3IgYW55IHJlbWFpbmluZwogUkNVIGNhbGxiYWNrcyB0byBjb21wbGV0ZS4KIAorT2YgY291cnNlLCBpZiB5b3UgbW9kdWxlIHVzZXMgY2FsbF9yY3VfYmgoKSwgeW91IHdpbGwgbmVlZCB0byBpbnZva2UKK3JjdV9iYXJyaWVyX2JoKCkgYmVmb3JlIHVubG9hZGluZy4gIFNpbWlsYXJseSwgaWYgeW91ciBtb2R1bGUgdXNlcworY2FsbF9yY3Vfc2NoZWQoKSwgeW91IHdpbGwgbmVlZCB0byBpbnZva2UgcmN1X2JhcnJpZXJfc2NoZWQoKSBiZWZvcmUKK3VubG9hZGluZy4gIElmIHlvdXIgbW9kdWxlIHVzZXMgY2FsbF9yY3UoKSwgY2FsbF9yY3VfYmgoKSwgLWFuZC0KK2NhbGxfcmN1X3NjaGVkKCksIHRoZW4geW91IHdpbGwgbmVlZCB0byBpbnZva2UgZWFjaCBvZiByY3VfYmFycmllcigpLAorcmN1X2JhcnJpZXJfYmgoKSwgYW5kIHJjdV9iYXJyaWVyX3NjaGVkKCkuCisKIAogSW1wbGVtZW50aW5nIHJjdV9iYXJyaWVyKCkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvdG9ydHVyZS50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS90b3J0dXJlLnR4dAppbmRleCBhMzQyYjZlLi45ZGJhM2JiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS90b3J0dXJlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS90b3J0dXJlLnR4dApAQCAtNzYsOCArNzYsMTAgQEAKIAkJInJjdV9zeW5jIiBmb3IgcmN1X3JlYWRfbG9jaygpIHdpdGggc3luY2hyb25vdXMgcmVjbGFtYXRpb24sCiAJCSJyY3VfYmgiIGZvciB0aGUgcmN1X3JlYWRfbG9ja19iaCgpIEFQSSwgInJjdV9iaF9zeW5jIiBmb3IKIAkJcmN1X3JlYWRfbG9ja19iaCgpIHdpdGggc3luY2hyb25vdXMgcmVjbGFtYXRpb24sICJzcmN1IiBmb3IKLQkJdGhlICJzcmN1X3JlYWRfbG9jaygpIiBBUEksIGFuZCAic2NoZWQiIGZvciB0aGUgdXNlIG9mCi0JCXByZWVtcHRfZGlzYWJsZSgpIHRvZ2V0aGVyIHdpdGggc3luY2hyb25pemVfc2NoZWQoKS4KKwkJdGhlICJzcmN1X3JlYWRfbG9jaygpIiBBUEksICJzY2hlZCIgZm9yIHRoZSB1c2Ugb2YKKwkJcHJlZW1wdF9kaXNhYmxlKCkgdG9nZXRoZXIgd2l0aCBzeW5jaHJvbml6ZV9zY2hlZCgpLAorCQlhbmQgInNjaGVkX2V4cGVkaXRlZCIgZm9yIHRoZSB1c2Ugb2YgcHJlZW1wdF9kaXNhYmxlKCkKKwkJd2l0aCBzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQoKS4KIAogdmVyYm9zZQkJRW5hYmxlIGRlYnVnIHByaW50aygpcy4gIERlZmF1bHQgaXMgZGlzYWJsZWQuCiAKQEAgLTE2Miw2ICsxNjQsMjMgQEAKICJpZHgiIHZhbHVlIG1hcHMgdGhlICJvbGQiIGFuZCAiY3VycmVudCIgdmFsdWVzIHRvIHRoZSB1bmRlcmx5aW5nIGFycmF5LAogYW5kIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLgogCitTaW1pbGFybHksIHNjaGVkX2V4cGVkaXRlZCBSQ1UgcHJvdmlkZXMgdGhlIGZvbGxvd2luZzoKKworCXNjaGVkX2V4cGVkaXRlZC10b3J0dXJlOiBydGM6IGQwMDAwMDAwMDE2YzE4ODAgdmVyOiAxMDkwNzk2IHRmbGU6IDAgcnRhOiAxMDkwNzk2IHJ0YWY6IDAgcnRmOiAxMDkwNzg3IHJ0bWJlOiAwIG50OiAyNzcxMzMxOQorCXNjaGVkX2V4cGVkaXRlZC10b3J0dXJlOiBSZWFkZXIgUGlwZTogIDEyNjYwMzIwMjAxIDk1ODc1IDAgMCAwIDAgMCAwIDAgMCAwCisJc2NoZWRfZXhwZWRpdGVkLXRvcnR1cmU6IFJlYWRlciBCYXRjaDogIDEyNjYwNDI0ODg1IDAgMCAwIDAgMCAwIDAgMCAwIDAKKwlzY2hlZF9leHBlZGl0ZWQtdG9ydHVyZTogRnJlZS1CbG9jayBDaXJjdWxhdGlvbjogIDEwOTA3OTUgMTA5MDc5NSAxMDkwNzk0IDEwOTA3OTMgMTA5MDc5MiAxMDkwNzkxIDEwOTA3OTAgMTA5MDc4OSAxMDkwNzg4IDEwOTA3ODcgMAorCXN0YXRlOiAtMSAvIDA6MCAzOjAgNDowCisKK0FzIGJlZm9yZSwgdGhlIGZpcnN0IGZvdXIgbGluZXMgYXJlIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFJDVS4KK1RoZSBsYXN0IGxpbmUgc2hvd3MgdGhlIHRhc2stbWlncmF0aW9uIHN0YXRlLiAgVGhlIGZpcnN0IG51bWJlciBpcworLTEgaWYgc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKCkgaXMgaWRsZSwgLTIgaWYgaW4gdGhlIHByb2Nlc3Mgb2YKK3Bvc3Rpbmcgd2FrZXVwcyB0byB0aGUgbWlncmF0aW9uIGt0aHJlYWRzLCBhbmQgTiB3aGVuIHdhaXRpbmcgb24gQ1BVIE4uCitFYWNoIG9mIHRoZSBjb2xvbi1zZXBhcmF0ZWQgZmllbGRzIGZvbGxvd2luZyB0aGUgIi8iIGlzIGEgQ1BVOnN0YXRlIHBhaXIuCitWYWxpZCBzdGF0ZXMgYXJlICIwIiBmb3IgaWRsZSwgIjEiIGZvciB3YWl0aW5nIGZvciBxdWllc2NlbnQgc3RhdGUsCisiMiIgZm9yIHBhc3NlZCB0aHJvdWdoIHF1aWVzY2VudCBzdGF0ZSwgYW5kICIzIiB3aGVuIGEgcmFjZSB3aXRoIGEKK0NQVS1ob3RwbHVnIGV2ZW50IGZvcmNlcyB1c2Ugb2YgdGhlIHN5bmNocm9uaXplX3NjaGVkKCkgcHJpbWl0aXZlLgorCiAKIFVTQUdFCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dAppbmRleCAwMmNjZWQxLi4xODdiYmYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS90cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvdHJhY2UudHh0CkBAIC0xOTEsOCArMTkxLDcgQEAKIAogVGhlIG91dHB1dCBvZiAiY2F0IHJjdS9yY3VkYXRhIiBsb29rcyBhcyBmb2xsb3dzOgogCi1yY3U6Ci1yY3U6CityY3Vfc2NoZWQ6CiAgIDAgYz0xNzgyOSBnPTE3ODI5IHBxPTEgcHFjPTE3ODI5IHFwPTAgZHQ9MTA5NTEvMSBkbj0wIGRmPTExMDEgb2Y9MCByaT0zNiBxbD0wIGI9MTAKICAgMSBjPTE3ODI5IGc9MTc4MjkgcHE9MSBwcWM9MTc4MjkgcXA9MCBkdD0xNjExNy8xIGRuPTAgZGY9MTAxNSBvZj0wIHJpPTAgcWw9MCBiPTEwCiAgIDIgYz0xNzgyOSBnPTE3ODI5IHBxPTEgcHFjPTE3ODI5IHFwPTAgZHQ9MTQ0NS8xIGRuPTAgZGY9MTgzOSBvZj0wIHJpPTAgcWw9MCBiPTEwCkBAIC0zMDYsNyArMzA1LDcgQEAKIAogVGhlIG91dHB1dCBvZiAiY2F0IHJjdS9yY3VncCIgbG9va3MgYXMgZm9sbG93czoKIAotcmN1OiBjb21wbGV0ZWQ9MzMwNjIgIGdwbnVtPTMzMDYzCityY3Vfc2NoZWQ6IGNvbXBsZXRlZD0zMzA2MiAgZ3BudW09MzMwNjMKIHJjdV9iaDogY29tcGxldGVkPTQ2NCAgZ3BudW09NDY0CiAKIEFnYWluLCB0aGlzIG91dHB1dCBpcyBmb3IgYm90aCAicmN1IiBhbmQgInJjdV9iaCIuICBUaGUgZmllbGRzIGFyZQpAQCAtNDEzLDcgKzQxMiw3IEBACiAKIFRoZSBvdXRwdXQgb2YgImNhdCByY3UvcmN1X3BlbmRpbmciIGxvb2tzIGFzIGZvbGxvd3M6CiAKLXJjdToKK3JjdV9zY2hlZDoKICAgMCBucD0yNTU4OTIgcXNwPTUzOTM2IGNicj0wIGNuZz0xNDQxNyBncGM9MTAwMzMgZ3BzPTI0MzIwIG5mPTY0NDUgbm49MTQ2NzQxCiAgIDEgbnA9MjYxMjI0IHFzcD01NDYzOCBjYnI9MCBjbmc9MjU3MjMgZ3BjPTE2MzEwIGdwcz0yODQ5IG5mPTU5MTIgbm49MTU1NzkyCiAgIDIgbnA9MjM3NDk2IHFzcD00OTY2NCBjYnI9MCBjbmc9Mjc2MiBncGM9NDU0NzggZ3BzPTE3NjIgbmY9MTIwMSBubj0xMzY2MjkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0CmluZGV4IDk2MTcwODIuLmU0MWE3ZmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dApAQCAtMTM2LDEwICsxMzYsMTAgQEAKIAlVc2VkIGJ5IGEgcmVhZGVyIHRvIGluZm9ybSB0aGUgcmVjbGFpbWVyIHRoYXQgdGhlIHJlYWRlciBpcwogCWVudGVyaW5nIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIEl0IGlzIGlsbGVnYWwKIAl0byBibG9jayB3aGlsZSBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIHRob3VnaAotCWtlcm5lbHMgYnVpbHQgd2l0aCBDT05GSUdfUFJFRU1QVF9SQ1UgY2FuIHByZWVtcHQgUkNVIHJlYWQtc2lkZQotCWNyaXRpY2FsIHNlY3Rpb25zLiAgQW55IFJDVS1wcm90ZWN0ZWQgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzZWQKLQlkdXJpbmcgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gcmVtYWluCi0JdW5yZWNsYWltZWQgZm9yIHRoZSBmdWxsIGR1cmF0aW9uIG9mIHRoYXQgY3JpdGljYWwgc2VjdGlvbi4KKwlrZXJuZWxzIGJ1aWx0IHdpdGggQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgY2FuIHByZWVtcHQgUkNVCisJcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLiAgQW55IFJDVS1wcm90ZWN0ZWQgZGF0YSBzdHJ1Y3R1cmUKKwlhY2Nlc3NlZCBkdXJpbmcgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGlzIGd1YXJhbnRlZWQgdG8KKwlyZW1haW4gdW5yZWNsYWltZWQgZm9yIHRoZSBmdWxsIGR1cmF0aW9uIG9mIHRoYXQgY3JpdGljYWwgc2VjdGlvbi4KIAlSZWZlcmVuY2UgY291bnRzIG1heSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggUkNVIHRvIG1haW50YWluCiAJbG9uZ2VyLXRlcm0gcmVmZXJlbmNlcyB0byBkYXRhIHN0cnVjdHVyZXMuCiAKQEAgLTc4NSw2ICs3ODUsNyBAQAogCXJjdV9kZXJlZmVyZW5jZQogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1CisJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1CiAKIAlsaXN0X2Zvcl9lYWNoX2NvbnRpbnVlX3JjdQkodG8gYmUgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBuZXcKIAkJCQkJIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KQpAQCAtODA3LDE5ICs4MDgsMjMgQEAKIAogCXJjdV9yZWFkX2xvY2sJCXN5bmNocm9uaXplX25ldAkJcmN1X2JhcnJpZXIKIAlyY3VfcmVhZF91bmxvY2sJCXN5bmNocm9uaXplX3JjdQorCQkJCXN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQKIAkJCQljYWxsX3JjdQogCiAKIGJoOglDcml0aWNhbCBzZWN0aW9ucwlHcmFjZSBwZXJpb2QJCUJhcnJpZXIKIAogCXJjdV9yZWFkX2xvY2tfYmgJY2FsbF9yY3VfYmgJCXJjdV9iYXJyaWVyX2JoCi0JcmN1X3JlYWRfdW5sb2NrX2JoCisJcmN1X3JlYWRfdW5sb2NrX2JoCXN5bmNocm9uaXplX3JjdV9iaAorCQkJCXN5bmNocm9uaXplX3JjdV9iaF9leHBlZGl0ZWQKIAogCiBzY2hlZDoJQ3JpdGljYWwgc2VjdGlvbnMJR3JhY2UgcGVyaW9kCQlCYXJyaWVyCiAKLQlbcHJlZW1wdF9kaXNhYmxlXQlzeW5jaHJvbml6ZV9zY2hlZAlyY3VfYmFycmllcl9zY2hlZAotCVthbmQgZnJpZW5kc10JCWNhbGxfcmN1X3NjaGVkCisJcmN1X3JlYWRfbG9ja19zY2hlZAlzeW5jaHJvbml6ZV9zY2hlZAlyY3VfYmFycmllcl9zY2hlZAorCXJjdV9yZWFkX3VubG9ja19zY2hlZAljYWxsX3JjdV9zY2hlZAorCVtwcmVlbXB0X2Rpc2FibGVdCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZAorCVthbmQgZnJpZW5kc10KIAogCiBTUkNVOglDcml0aWNhbCBzZWN0aW9ucwlHcmFjZSBwZXJpb2QJCUJhcnJpZXIKQEAgLTgyNyw2ICs4MzIsOSBAQAogCXNyY3VfcmVhZF9sb2NrCQlzeW5jaHJvbml6ZV9zcmN1CU4vQQogCXNyY3VfcmVhZF91bmxvY2sKIAorU1JDVToJSW5pdGlhbGl6YXRpb24vY2xlYW51cAorCWluaXRfc3JjdV9zdHJ1Y3QKKwljbGVhbnVwX3NyY3Vfc3RydWN0CiAKIFNlZSB0aGUgY29tbWVudCBoZWFkZXJzIGluIHRoZSBzb3VyY2UgY29kZSAob3IgdGhlIGRvY2Jvb2sgZ2VuZXJhdGVkCiBmcm9tIHRoZW0pIGZvciBtb3JlIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0FEU0JpdHN5IGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0FEU0JpdHN5CmluZGV4IGFiNDdjMzguLjcxOTdhOWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9BRFNCaXRzeQorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQURTQml0c3kKQEAgLTQwLDQgKzQwLDQgQEAKICAgbW9kZSwgdGhlIHRpbWluZyBpcyBvZmYgc28gdGhlIGltYWdlIGlzIGNvcnJ1cHRlZC4gIFRoaXMgd2lsbCBiZQogICBmaXhlZCBzb29uLgogCi1BbnkgY29udHJpYnV0aW9uIGNhbiBiZSBzZW50IHRvIG5pY29AY2FtLm9yZyBhbmQgd2lsbCBiZSBncmVhdGx5IHdlbGNvbWUhCitBbnkgY29udHJpYnV0aW9uIGNhbiBiZSBzZW50IHRvIG5pY29AZmx1eG5pYy5uZXQgYW5kIHdpbGwgYmUgZ3JlYXRseSB3ZWxjb21lIQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0Fzc2FiZXQgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQXNzYWJldAppbmRleCA3OGJjMWMxLi45MWY3Y2U3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQXNzYWJldAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQXNzYWJldApAQCAtMjQwLDcgKzI0MCw3IEBACiAKIAogTmljb2xhcyBQaXRyZQotbmljb0BjYW0ub3JnCituaWNvQGZsdXhuaWMubmV0CiBKdW5lIDEyLCAyMDAxCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0JydXR1cyBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9CcnV0dXMKaW5kZXggMjI1NGM4Zi4uYjFjZmQ0MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0JydXR1cworKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvQnJ1dHVzCkBAIC02MCw3ICs2MCw3IEBACiAKIEFueSBjb250cmlidXRpb24gaXMgd2VsY29tZS4KIAotUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byBuaWNvQGNhbS5vcmcKK1BsZWFzZSBzZW5kIHBhdGNoZXMgdG8gbmljb0BmbHV4bmljLm5ldAogCiBIYXZlIEZ1biAhCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9HcmFwaGljc0NsaWVudCBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9HcmFwaGljc0NsaWVudAppbmRleCA4ZmE3ZTgwLi42YzljNGY1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvR3JhcGhpY3NDbGllbnQKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0dyYXBoaWNzQ2xpZW50CkBAIC00LDcgKzQsNyBAQAogaHR0cDovL3d3dy5hcHBsaWVkZGF0YS5uZXQvcHJvZHVjdHMuaHRtbAogCiBUaGUgb3JpZ2luYWwgTGludXggc3VwcG9ydCBmb3IgdGhpcyBwcm9kdWN0IGhhcyBiZWVuIHByb3ZpZGVkIGJ5IAotTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPi4gQ29udGludWVkIGRldmVsb3BtZW50IHdvcmsgYnkKK05pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+LiBDb250aW51ZWQgZGV2ZWxvcG1lbnQgd29yayBieQogV29vanVuZyBIdWggPHdodWhAYXBwbGllZGRhdGEubmV0PgogCiBJdCdzIGN1cnJlbnRseSBwb3NzaWJsZSB0byBtb3VudCBhIHJvb3QgZmlsZXN5c3RlbSB2aWEgTkZTIHByb3ZpZGluZyBhCkBAIC05NCw1ICs5NCw1IEBACiAgIG1vZGUsIHRoZSB0aW1pbmcgaXMgb2ZmIHNvIHRoZSBpbWFnZSBpcyBjb3JydXB0ZWQuICBUaGlzIHdpbGwgYmUKICAgZml4ZWQgc29vbi4KIAotQW55IGNvbnRyaWJ1dGlvbiBjYW4gYmUgc2VudCB0byBuaWNvQGNhbS5vcmcgYW5kIHdpbGwgYmUgZ3JlYXRseSB3ZWxjb21lIQorQW55IGNvbnRyaWJ1dGlvbiBjYW4gYmUgc2VudCB0byBuaWNvQGZsdXhuaWMubmV0IGFuZCB3aWxsIGJlIGdyZWF0bHkgd2VsY29tZSEKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0dyYXBoaWNzTWFzdGVyIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL0dyYXBoaWNzTWFzdGVyCmluZGV4IGRkMjg3NDUuLmVlN2M2NTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9HcmFwaGljc01hc3RlcgorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvR3JhcGhpY3NNYXN0ZXIKQEAgLTQsNyArNCw3IEBACiBodHRwOi8vd3d3LmFwcGxpZWRkYXRhLm5ldC9wcm9kdWN0cy5odG1sCiAKIFRoZSBvcmlnaW5hbCBMaW51eCBzdXBwb3J0IGZvciB0aGlzIHByb2R1Y3QgaGFzIGJlZW4gcHJvdmlkZWQgYnkKLU5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4uIENvbnRpbnVlZCBkZXZlbG9wbWVudCB3b3JrIGJ5CitOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0Pi4gQ29udGludWVkIGRldmVsb3BtZW50IHdvcmsgYnkKIFdvb2p1bmcgSHVoIDx3aHVoQGFwcGxpZWRkYXRhLm5ldD4KIAogVXNlICdtYWtlIGdyYXBoaWNzbWFzdGVyX2NvbmZpZycgYmVmb3JlIGFueSAnbWFrZSBjb25maWcnLgpAQCAtNTAsNCArNTAsNCBAQAogICBtb2RlLCB0aGUgdGltaW5nIGlzIG9mZiBzbyB0aGUgaW1hZ2UgaXMgY29ycnVwdGVkLiAgVGhpcyB3aWxsIGJlCiAgIGZpeGVkIHNvb24uCiAKLUFueSBjb250cmlidXRpb24gY2FuIGJlIHNlbnQgdG8gbmljb0BjYW0ub3JnIGFuZCB3aWxsIGJlIGdyZWF0bHkgd2VsY29tZSEKK0FueSBjb250cmlidXRpb24gY2FuIGJlIHNlbnQgdG8gbmljb0BmbHV4bmljLm5ldCBhbmQgd2lsbCBiZSBncmVhdGx5IHdlbGNvbWUhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvVmljdG9yIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0ExMTAwL1ZpY3RvcgppbmRleCAwMWU4MWZjLi5mOTM4YTI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9TQTExMDAvVmljdG9yCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NBMTEwMC9WaWN0b3IKQEAgLTksNyArOSw3IEBACiBUaGUgVmljdG9yIGltcGxlbWVudGF0aW9uIGZvciBMaW51eCBpcyBtYWludGFpbmVkIGJ5IE5pY29sYXMgUGl0cmU6CiAKIAluaWNvQHZpc3VhaWRlLmNvbQotCW5pY29AY2FtLm9yZworCW5pY29AZmx1eG5pYy5uZXQKIAogRm9yIGFueSBjb21tZW50cywgcGxlYXNlIGZlZWwgZnJlZSB0byBjb250YWN0IG1lIHRocm91Z2ggdGhlIGFib3ZlCiBhZGRyZXNzZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvQ1BVZnJlcS50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvQ1BVZnJlcS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZiM2ExMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9DUFVmcmVxLnR4dApAQCAtMCwwICsxLDc1IEBACisJCVMzQzI0WFggQ1BVZnJlcSBzdXBwb3J0CisJCT09PT09PT09PT09PT09PT09PT09PT09CisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKKyBUaGUgUzNDMjRYWCBzZXJpZXMgc3VwcG9ydCBhIG51bWJlciBvZiBwb3dlciBzYXZpbmcgc3lzdGVtcywgc3VjaCBhcworIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgY29yZSwgbWVtb3J5IGFuZCBwZXJpcGhlcmFsIG9wZXJhdGluZworIGZyZXF1ZW5jaWVzLiBUaGUgY29yZSBjb250cm9sIGlzIGV4cG9ydGVkIHZpYSB0aGUgQ1BVRnJlcSBkcml2ZXIKKyB3aGljaCBoYXMgYSBudW1iZXIgb2YgZGlmZmVyZW50IG1hbnVhbCBvciBhdXRvbWF0aWMgY29udHJvbHMgb3ZlciB0aGUKKyByYXRlIHRoZSBjb3JlIGlzIHJ1bm5pbmcgYXQuCisKKyBUaGVyZSBhcmUgdHdvIGZvcm1zIG9mIHRoZSBkcml2ZXIgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBDUFUgYW5kCisgaG93IHRoZSBjbG9ja3MgYXJlIGFycmFuZ2VkLiBUaGUgZmlyc3QgaW1wbGVtZW50YXRpb24gdXNlZCBhcyBzaW5nbGUKKyBQTEwgdG8gZmVlZCB0aGUgQVJNLCBtZW1vcnkgYW5kIHBlcmlwaGVyYWxzIHZpYSBhIHNlcmllcyBvZiBkaXZpZGVycworIGFuZCBtdXhlcyBhbmQgdGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBkb2N1bWVudGVkIGhlcmUuIEEKKyBuZXdlciB2ZXJzaW9uIHdoZXJlIHRoZXJlIGlzIGEgc2VwZXJhdGUgUExMIGFuZCBjbG9jayBkaXZpZGVyIGZvciB0aGUKKyBBUk0gY29yZSBpcyBhdmFpbGFibGUgYXMgYSBzZXBlcmF0ZSBkcml2ZXIuCisKKworTGF5b3V0CistLS0tLS0KKworIFRoZSBjb2RlIGNvcmUgbWFuYWdlcyB0aGUgQ1BVIHNwZWNpZmljIGRyaXZlcnMsIGFueSBkYXRhIHRoYXQgdGhleQorIG5lZWQgdG8gcmVnaXN0ZXIgYW5kIHRoZSBpbnRlcmZhY2UgdG8gdGhlIGdlbmVyaWMgZHJpdmVycy9jcHVmcmVxCisgc3lzdGVtLiBFYWNoIENQVSByZWdpc3RlcnMgYSBkcml2ZXIgdG8gY29udHJvbCB0aGUgUExMLCBjbG9jayBkaXZpZGVycworIGFuZCBhbnl0aGluZyBlbHNlIGFzc29jaWF0ZWQgd2l0aCBpdC4gQW55IGJvYXJkIHRoYXQgd2FudHMgdG8gdXNlIHRoaXMKKyBmcmFtZXdvcmsgbmVlZHMgdG8gc3VwcGx5IGF0IGxlYXN0IGJhc2ljIGRldGFpbHMgb2Ygd2hhdCBpcyByZXF1aXJlZC4KKworIFRoZSBjb3JlIHJlZ2lzdGVycyB3aXRoIGRyaXZlcnMvY3B1ZnJlcSBhdCBpbml0IHRpbWUgaWYgYWxsIHRoZSBkYXRhCisgbmVjZXNzYXJ5IGhhcyBiZWVuIHN1cHBsaWVkLgorCisKK0NQVSBzdXBwb3J0CistLS0tLS0tLS0tLQorCisgVGhlIHN1cHBvcnQgZm9yIGVhY2ggQ1BVIGRlcGVuZHMgb24gdGhlIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlCisgU29DIGFuZCB0aGUgZHJpdmVyIGFzIGVhY2ggZGV2aWNlIGhhcyBkaWZmZXJlbnQgUExMIGFuZCBjbG9jayBjaGFpbnMKKyBhc3NvY2lhdGVkIHdpdGggaXQuCisKKworU2xvdyBNb2RlCistLS0tLS0tLS0KKworIFRoZSBTTE9XIG1vZGUgd2hlcmUgdGhlIFBMTCBpcyB0dXJuZWQgb2ZmIGFsdG9nZXRoZXIgYW5kIHRoZQorIHN5c3RlbSBpcyBmZWQgYnkgdGhlIGV4dGVybmFsIGNyeXN0YWwgaW5wdXQgaXMgY3VycmVudGx5IG5vdAorIHN1cHBvcnRlZC4KKworCitzeXNmcworLS0tLS0KKworIFRoZSBjb3JlIGNvZGUgZXhwb3J0cyBleHRyYSBpbmZvcm1hdGlvbiB2aWEgc3lzZnMgaW4gdGhlIGRpcmVjdG9yeQorIGRldmljZXMvc3lzdGVtL2NwdS9jcHUwL2FyY2gtZnJlcS4KKworCitCb2FyZCBTdXBwb3J0CistLS0tLS0tLS0tLS0tCisKKyBFYWNoIGJvYXJkIHRoYXQgd2FudHMgdG8gdXNlIHRoZSBjcHVmcmVxIGNvZGUgbXVzdCByZWdpc3RlciBzb21lIGJhc2ljCisgaW5mb3JtYXRpb24gd2l0aCB0aGUgY29yZSBkcml2ZXIgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoZQorIGJvYXJkIHJlcXVpcmVzIGFuZCBhbnkgcmVzdHJpY3Rpb25zIGJlaW5nIHBsYWNlZCBvbiBpdC4KKworIFRoZSBib2FyZCBuZWVkcyB0byBzdXBwbHkgaW5mb3JtYXRpb24gYWJvdXQgd2hldGhlciBpdCBuZWVkcyB0aGUgSU8gYmFuaworIHRpbWluZ3MgY2hhbmdpbmcsIGFueSBtYXhpbXVtIGZyZXF1ZW5jeSBsaW1pdHMgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZQorIFNEUkFNIHJlZnJlc2ggcmF0ZS4KKworCisKKworRG9jdW1lbnQgQXV0aG9yCistLS0tLS0tLS0tLS0tLS0KKworQmVuIERvb2tzLCBDb3B5cmlnaHQgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKK0xpY2Vuc2VkIHVuZGVyIEdQTHYyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2J0bXJ2bC50eHQgYi9Eb2N1bWVudGF0aW9uL2J0bXJ2bC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ5MTZhNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYnRtcnZsLnR4dApAQCAtMCwwICsxLDExOSBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJUkVBRE1FIGZvciBidG1ydmwgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0FsbCBjb21tYW5kcyBhcmUgdXNlZCB2aWEgZGVidWdmcyBpbnRlcmZhY2UuCisKKz09PT09PT09PT09PT09PT09PT09PQorU2V0L2dldCBkcml2ZXIgY29uZmlndXJhdGlvbnM6CisKK1BhdGg6CS9kZWJ1Zy9idG1ydmwvY29uZmlnLworCitncGlvZ2FwPVtuXQoraHNjZmdjbWQKKwlUaGVzZSBjb21tYW5kcyBhcmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGhvc3Qgc2xlZXAgcGFyYW1ldGVycy4KKwliaXQgODowICAtLSBHYXAKKwliaXQgMTY6OCAtLSBHUElPCisKKwl3aGVyZSBHUElPIGlzIHRoZSBwaW4gbnVtYmVyIG9mIEdQSU8gdXNlZCB0byB3YWtlIHVwIHRoZSBob3N0LgorCUl0IGNvdWxkIGJlIGFueSB2YWxpZCBHUElPIHBpbiMgKGUuZy4gMC03KSBvciAweGZmIChTRElPIGludGVyZmFjZQorCXdha2V1cCB3aWxsIGJlIHVzZWQgaW5zdGVhZCkuCisKKwl3aGVyZSBHYXAgaXMgdGhlIGdhcCBpbiBtaWxsaSBzZWNvbmRzIGJldHdlZW4gd2FrZXVwIHNpZ25hbCBhbmQKKwl3YWtldXAgZXZlbnQsIG9yIDB4ZmYgZm9yIHNwZWNpYWwgaG9zdCBzbGVlcCBzZXR0aW5nLgorCisJVXNhZ2U6CisJCSMgVXNlIFNESU8gaW50ZXJmYWNlIHRvIHdha2UgdXAgdGhlIGhvc3QgYW5kIHNldCBHQVAgdG8gMHg4MDoKKwkJZWNobyAweGZmODAgPiAvZGVidWcvYnRtcnZsL2NvbmZpZy9ncGlvZ2FwCisJCWVjaG8gMSA+IC9kZWJ1Zy9idG1ydmwvY29uZmlnL2hzY2ZnY21kCisKKwkJIyBVc2UgR1BJTyBwaW4gIzMgdG8gd2FrZSB1cCB0aGUgaG9zdCBhbmQgc2V0IEdBUCB0byAweGZmOgorCQllY2hvIDB4MDNmZiA+ICAvZGVidWcvYnRtcnZsL2NvbmZpZy9ncGlvZ2FwCisJCWVjaG8gMSA+IC9kZWJ1Zy9idG1ydmwvY29uZmlnL2hzY2ZnY21kCisKK3BzbW9kZT1bbl0KK3BzY21kCisJVGhlc2UgY29tbWFuZHMgYXJlIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgYXV0byBzbGVlcCBtb2RlCisKKwl3aGVyZSB0aGUgb3B0aW9uIGlzOgorCQkJMSAJLS0gRW5hYmxlIGF1dG8gc2xlZXAgbW9kZQorCQkJMCAJLS0gRGlzYWJsZSBhdXRvIHNsZWVwIG1vZGUKKworCVVzYWdlOgorCQkjIEVuYWJsZSBhdXRvIHNsZWVwIG1vZGUKKwkJZWNobyAxID4gL2RlYnVnL2J0bXJ2bC9jb25maWcvcHNtb2RlCisJCWVjaG8gMSA+IC9kZWJ1Zy9idG1ydmwvY29uZmlnL3BzY21kCisKKwkJIyBEaXNhYmxlIGF1dG8gc2xlZXAgbW9kZQorCQllY2hvIDAgPiAvZGVidWcvYnRtcnZsL2NvbmZpZy9wc21vZGUKKwkJZWNobyAxID4gL2RlYnVnL2J0bXJ2bC9jb25maWcvcHNjbWQKKworCitoc21vZGU9W25dCitoc2NtZAorCVRoZXNlIGNvbW1hbmRzIGFyZSB1c2VkIHRvIGVuYWJsZSBob3N0IHNsZWVwIG9yIHdha2UgdXAgZmlybXdhcmUKKworCXdoZXJlIHRoZSBvcHRpb24gaXM6CisJCQkxCS0tIEVuYWJsZSBob3N0IHNsZWVwCisJCQkwCS0tIFdha2UgdXAgZmlybXdhcmUKKworCVVzYWdlOgorCQkjIEVuYWJsZSBob3N0IHNsZWVwCisJCWVjaG8gMSA+IC9kZWJ1Zy9idG1ydmwvY29uZmlnL2hzbW9kZQorCQllY2hvIDEgPiAvZGVidWcvYnRtcnZsL2NvbmZpZy9oc2NtZAorCisJCSMgV2FrZSB1cCBmaXJtd2FyZQorCQllY2hvIDAgPiAvZGVidWcvYnRtcnZsL2NvbmZpZy9oc21vZGUKKwkJZWNobyAxID4gL2RlYnVnL2J0bXJ2bC9jb25maWcvaHNjbWQKKworCis9PT09PT09PT09PT09PT09PT09PT09CitHZXQgZHJpdmVyIHN0YXR1czoKKworUGF0aDoJL2RlYnVnL2J0bXJ2bC9zdGF0dXMvCisKK1VzYWdlOgorCWNhdCAvZGVidWcvYnRtcnZsL3N0YXR1cy88YXJncz4KKword2hlcmUgdGhlIGFyZ3MgYXJlOgorCitjdXJwc21vZGUKKwlUaGlzIGNvbW1hbmQgZGlzcGxheXMgY3VycmVudCBhdXRvIHNsZWVwIHN0YXR1cy4KKworcHNzdGF0ZQorCVRoaXMgY29tbWFuZCBkaXNwbGF5IHRoZSBwb3dlciBzYXZlIHN0YXRlLgorCitoc3N0YXRlCisJVGhpcyBjb21tYW5kIGRpc3BsYXkgdGhlIGhvc3Qgc2xlZXAgc3RhdGUuCisKK3R4ZG5sZHJkeQorCVRoaXMgY29tbWFuZCBkaXNwbGF5cyB0aGUgdmFsdWUgb2YgVHggZG93bmxvYWQgcmVhZHkgZmxhZy4KKworCis9PT09PT09PT09PT09PT09PT09PT0KKworVXNlIGhjaXRvb2wgdG8gaXNzdWUgcmF3IGhjaSBjb21tYW5kLCByZWZlciB0byBoY2l0b29sIG1hbnVhbAorCisJVXNhZ2U6IEhjaXRvb2wgY21kIDxvZ2Y+IDxvY2Y+IFtQYXJhbWV0ZXJzXQorCisJSW50ZXJmYWNlIENvbnRyb2wgQ29tbWFuZAorCWhjaXRvb2wgY21kIDB4M2YgMHg1YiAweGY1IDB4MDEgMHgwMCAgICAtLUVuYWJsZSBBbGwgaW50ZXJmYWNlCisJaGNpdG9vbCBjbWQgMHgzZiAweDViIDB4ZjUgMHgwMSAweDAxICAgIC0tRW5hYmxlIFdsYW4gaW50ZXJmYWNlCisJaGNpdG9vbCBjbWQgMHgzZiAweDViIDB4ZjUgMHgwMSAweDAyICAgIC0tRW5hYmxlIEJUIGludGVyZmFjZQorCWhjaXRvb2wgY21kIDB4M2YgMHg1YiAweGY1IDB4MDAgMHgwMCAgICAtLURpc2FibGUgQWxsIGludGVyZmFjZQorCWhjaXRvb2wgY21kIDB4M2YgMHg1YiAweGY1IDB4MDAgMHgwMSAgICAtLURpc2FibGUgV2xhbiBpbnRlcmZhY2UKKwloY2l0b29sIGNtZCAweDNmIDB4NWIgMHhmNSAweDAwIDB4MDIgICAgLS1EaXNhYmxlIEJUIGludGVyZmFjZQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK1NEODY4OCBmaXJtd2FyZToKKworL2xpYi9maXJtd2FyZS9zZDg2ODhfaGVscGVyLmJpbgorL2xpYi9maXJtd2FyZS9zZDg2ODguYmluCisKKworVGhlIGltYWdlcyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tOgorCitnaXQuaW5mcmFkZWFkLm9yZy91c2Vycy9kd213Mi9saW51eC1maXJtd2FyZS5naXQvbGliZXJ0YXMvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL01ha2VmaWxlCmluZGV4IDhkZjFhNzIuLmQ5OGU0ZGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL01ha2VmaWxlCkBAIC05LDMgKzksOCBAQAogYWx3YXlzIDo9ICQoaG9zdHByb2dzLXkpCiAKIEhPU1RDRkxBR1NfdWNvbi5vICs9IC1JJChvYmp0cmVlKS91c3IvaW5jbHVkZQorCithbGw6IG1vZHVsZXMKKworbW9kdWxlcyBjbGVhbjoKKwkkKE1BS0UpIC1DIC4uLy4uIFNVQkRJUlM9JChQV0QpICRACmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci9jbl90ZXN0LmMgYi9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci9jbl90ZXN0LmMKaW5kZXggNmE1YmU1ZC4uMTcxMWFkYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvY25fdGVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL2NuX3Rlc3QuYwpAQCAtMTksNiArMTksOCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgImNuX3Rlc3Q6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtMjcsMTggKzI5LDE3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KIAotc3RhdGljIHN0cnVjdCBjYl9pZCBjbl90ZXN0X2lkID0geyAweDEyMywgMHg0NTYgfTsKK3N0YXRpYyBzdHJ1Y3QgY2JfaWQgY25fdGVzdF9pZCA9IHsgQ05fTkVUTElOS19VU0VSUyArIDMsIDB4NDU2IH07CiBzdGF0aWMgY2hhciBjbl90ZXN0X25hbWVbXSA9ICJjbl90ZXN0IjsKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbmxzOwogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGNuX3Rlc3RfdGltZXI7CiAKLXZvaWQgY25fdGVzdF9jYWxsYmFjayh2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgY25fdGVzdF9jYWxsYmFjayhzdHJ1Y3QgY25fbXNnICptc2cpCiB7Ci0Jc3RydWN0IGNuX21zZyAqbXNnID0gKHN0cnVjdCBjbl9tc2cgKilkYXRhOwotCi0JcHJpbnRrKCIlczogJWx1OiBpZHg9JXgsIHZhbD0leCwgc2VxPSV1LCBhY2s9JXUsIGxlbj0lZDogJXMuXG4iLAotCSAgICAgICBfX2Z1bmNfXywgamlmZmllcywgbXNnLT5pZC5pZHgsIG1zZy0+aWQudmFsLAotCSAgICAgICBtc2ctPnNlcSwgbXNnLT5hY2ssIG1zZy0+bGVuLCAoY2hhciAqKW1zZy0+ZGF0YSk7CisJcHJfaW5mbygiJXM6ICVsdTogaWR4PSV4LCB2YWw9JXgsIHNlcT0ldSwgYWNrPSV1LCBsZW49JWQ6ICVzLlxuIiwKKwkgICAgICAgIF9fZnVuY19fLCBqaWZmaWVzLCBtc2ctPmlkLmlkeCwgbXNnLT5pZC52YWwsCisJICAgICAgICBtc2ctPnNlcSwgbXNnLT5hY2ssIG1zZy0+bGVuLAorCSAgICAgICAgbXNnLT5sZW4gPyAoY2hhciAqKW1zZy0+ZGF0YSA6ICIiKTsKIH0KIAogLyoKQEAgLTYzLDkgKzY0LDcgQEAKIAogCXNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgc2tiIHdpdGggc2l6ZT0ldS5cbiIsCi0JCSAgICAgICBzaXplKTsKLQorCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgc2tiIHdpdGggc2l6ZT0ldVxuIiwgc2l6ZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTE0LDEyICsxMTMsMTIgQEAKIAkvL25ldGxpbmtfYnJvYWRjYXN0KG5scywgc2tiLCAwLCBjdGwtPmdyb3VwLCBHRlBfQVRPTUlDKTsKIAluZXRsaW5rX3VuaWNhc3QobmxzLCBza2IsIDAsIDApOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUmVxdWVzdCB3YXMgc2VudC4gR3JvdXA9MHgleC5cbiIsIGN0bC0+Z3JvdXApOworCXByX2luZm8oInJlcXVlc3Qgd2FzIHNlbnQ6IGdyb3VwPTB4JXhcbiIsIGN0bC0+Z3JvdXApOwogCiAJcmV0dXJuIDA7CiAKIG5sbXNnX2ZhaWx1cmU6Ci0JcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2VuZCAldS4ldVxuIiwgbXNnLT5zZXEsIG1zZy0+YWNrKTsKKwlwcl9lcnIoImZhaWxlZCB0byBzZW5kICV1LiV1XG4iLCBtc2ctPnNlcSwgbXNnLT5hY2spOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMTMxLDYgKzEzMCw4IEBACiAJc3RydWN0IGNuX21zZyAqbTsKIAljaGFyIGRhdGFbMzJdOwogCisJcHJfZGVidWcoIiVzOiB0aW1lciBmaXJlZCB3aXRoIGRhdGEgJWx1XG4iLCBfX2Z1bmNfXywgX19kYXRhKTsKKwogCW0gPSBremFsbG9jKHNpemVvZigqbSkgKyBzaXplb2YoZGF0YSksIEdGUF9BVE9NSUMpOwogCWlmIChtKSB7CiAKQEAgLTE1MCw3ICsxNTEsNyBAQAogCiAJY25fdGVzdF90aW1lcl9jb3VudGVyKys7CiAKLQltb2RfdGltZXIoJmNuX3Rlc3RfdGltZXIsIGppZmZpZXMgKyBIWik7CisJbW9kX3RpbWVyKCZjbl90ZXN0X3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CiB9CiAKIHN0YXRpYyBpbnQgY25fdGVzdF9pbml0KHZvaWQpCkBAIC0xNjgsOCArMTY5LDEwIEBACiAJfQogCiAJc2V0dXBfdGltZXIoJmNuX3Rlc3RfdGltZXIsIGNuX3Rlc3RfdGltZXJfZnVuYywgMCk7Ci0JY25fdGVzdF90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOwotCWFkZF90aW1lcigmY25fdGVzdF90aW1lcik7CisJbW9kX3RpbWVyKCZjbl90ZXN0X3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CisKKwlwcl9pbmZvKCJpbml0aWFsaXplZCB3aXRoIGlkPXsldS4ldX1cbiIsCisJCWNuX3Rlc3RfaWQuaWR4LCBjbl90ZXN0X2lkLnZhbCk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvY29ubmVjdG9yLnR4dCBiL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL2Nvbm5lY3Rvci50eHQKaW5kZXggYWQ2ZTBiYS4uODFlNmJmNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvY29ubmVjdG9yLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci9jb25uZWN0b3IudHh0CkBAIC01LDEwICs1LDEwIEBACiBLZXJuZWwgY29ubmVjdG9yIC0gbmV3IG5ldGxpbmsgYmFzZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWwgc3BhY2UgZWFzeQogdG8gdXNlIGNvbW11bmljYXRpb24gbW9kdWxlLgogCi1Db25uZWN0b3IgZHJpdmVyIGFkZHMgcG9zc2liaWxpdHkgdG8gY29ubmVjdCB2YXJpb3VzIGFnZW50cyB1c2luZwotbmV0bGluayBiYXNlZCBuZXR3b3JrLiAgT25lIG11c3QgcmVnaXN0ZXIgY2FsbGJhY2sgYW5kCi1pZGVudGlmaWVyLiBXaGVuIGRyaXZlciByZWNlaXZlcyBzcGVjaWFsIG5ldGxpbmsgbWVzc2FnZSB3aXRoCi1hcHByb3ByaWF0ZSBpZGVudGlmaWVyLCBhcHByb3ByaWF0ZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4KK1RoZSBDb25uZWN0b3IgZHJpdmVyIG1ha2VzIGl0IGVhc3kgdG8gY29ubmVjdCB2YXJpb3VzIGFnZW50cyB1c2luZyBhCituZXRsaW5rIGJhc2VkIG5ldHdvcmsuICBPbmUgbXVzdCByZWdpc3RlciBhIGNhbGxiYWNrIGFuZCBhbiBpZGVudGlmaWVyLgorV2hlbiB0aGUgZHJpdmVyIHJlY2VpdmVzIGEgc3BlY2lhbCBuZXRsaW5rIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUKK2lkZW50aWZpZXIsIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4KIAogRnJvbSB0aGUgdXNlcnNwYWNlIHBvaW50IG9mIHZpZXcgaXQncyBxdWl0ZSBzdHJhaWdodGZvcndhcmQ6CiAKQEAgLTE3LDEwICsxNywxMCBAQAogCXNlbmQoKTsKIAlyZWN2KCk7CiAKLUJ1dCBpZiBrZXJuZWxzcGFjZSB3YW50IHRvIHVzZSBmdWxsIHBvd2VyIG9mIHN1Y2ggY29ubmVjdGlvbnMsIGRyaXZlcgotd3JpdGVyIG11c3QgY3JlYXRlIHNwZWNpYWwgc29ja2V0cywgbXVzdCBrbm93IGFib3V0IHN0cnVjdCBza19idWZmCi1oYW5kbGluZy4uLiAgQ29ubmVjdG9yIGFsbG93cyBhbnkga2VybmVsc3BhY2UgYWdlbnRzIHRvIHVzZSBuZXRsaW5rCi1iYXNlZCBuZXR3b3JraW5nIGZvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gaW4gYSBzaWduaWZpY2FudGx5CitCdXQgaWYga2VybmVsc3BhY2Ugd2FudHMgdG8gdXNlIHRoZSBmdWxsIHBvd2VyIG9mIHN1Y2ggY29ubmVjdGlvbnMsIHRoZQorZHJpdmVyIHdyaXRlciBtdXN0IGNyZWF0ZSBzcGVjaWFsIHNvY2tldHMsIG11c3Qga25vdyBhYm91dCBzdHJ1Y3Qgc2tfYnVmZgoraGFuZGxpbmcsIGV0Yy4uLiAgVGhlIENvbm5lY3RvciBkcml2ZXIgYWxsb3dzIGFueSBrZXJuZWxzcGFjZSBhZ2VudHMgdG8gdXNlCituZXRsaW5rIGJhc2VkIG5ldHdvcmtpbmcgZm9yIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiBpbiBhIHNpZ25pZmljYW50bHkKIGVhc2llciB3YXk6CiAKIGludCBjbl9hZGRfY2FsbGJhY2soc3RydWN0IGNiX2lkICppZCwgY2hhciAqbmFtZSwgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqKSk7CkBAIC0zMiwxNSArMzIsMTUgQEAKIAlfX3UzMgkJCXZhbDsKIH07CiAKLWlkeCBhbmQgdmFsIGFyZSB1bmlxdWUgaWRlbnRpZmllcnMgd2hpY2ggbXVzdCBiZSByZWdpc3RlcmVkIGluCi1jb25uZWN0b3IuaCBmb3IgaW4ta2VybmVsIHVzYWdlLiAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqKSAtIGlzIGEKLWNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gbWVzc2FnZSB3aXRoIGFib3ZlIGlkeC52YWwKLXdpbGwgYmUgcmVjZWl2ZWQgYnkgY29ubmVjdG9yIGNvcmUuICBBcmd1bWVudCBmb3IgdGhhdCBmdW5jdGlvbiBtdXN0CitpZHggYW5kIHZhbCBhcmUgdW5pcXVlIGlkZW50aWZpZXJzIHdoaWNoIG11c3QgYmUgcmVnaXN0ZXJlZCBpbiB0aGUKK2Nvbm5lY3Rvci5oIGhlYWRlciBmb3IgaW4ta2VybmVsIHVzYWdlLiAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqKSBpcyBhCitjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgbWVzc2FnZSB3aXRoIGFib3ZlIGlkeC52YWwKK2lzIHJlY2VpdmVkIGJ5IHRoZSBjb25uZWN0b3IgY29yZS4gIFRoZSBhcmd1bWVudCBmb3IgdGhhdCBmdW5jdGlvbiBtdXN0CiBiZSBkZXJlZmVyZW5jZWQgdG8gc3RydWN0IGNuX21zZyAqLgogCiBzdHJ1Y3QgY25fbXNnCiB7Ci0Jc3RydWN0IGNiX2lkIAkJaWQ7CisJc3RydWN0IGNiX2lkCQlpZDsKIAogCV9fdTMyCQkJc2VxOwogCV9fdTMyCQkJYWNrOwpAQCAtNTUsOTIgKzU1LDk1IEBACiAKIGludCBjbl9hZGRfY2FsbGJhY2soc3RydWN0IGNiX2lkICppZCwgY2hhciAqbmFtZSwgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqKSk7CiAKLVJlZ2lzdGVycyBuZXcgY2FsbGJhY2sgd2l0aCBjb25uZWN0b3IgY29yZS4KKyBSZWdpc3RlcnMgbmV3IGNhbGxiYWNrIHdpdGggY29ubmVjdG9yIGNvcmUuCiAKLXN0cnVjdCBjYl9pZCAqaWQgCQktIHVuaXF1ZSBjb25uZWN0b3IncyB1c2VyIGlkZW50aWZpZXIuCi0JCQkgIAkgIEl0IG11c3QgYmUgcmVnaXN0ZXJlZCBpbiBjb25uZWN0b3IuaCBmb3IgbGVnYWwgaW4ta2VybmVsIHVzZXJzLgotY2hhciAqbmFtZSAJCQktIGNvbm5lY3RvcidzIGNhbGxiYWNrIHN5bWJvbGljIG5hbWUuCi12b2lkICgqY2FsbGJhY2spICh2b2lkICopCS0gY29ubmVjdG9yJ3MgY2FsbGJhY2suCisgc3RydWN0IGNiX2lkICppZAkJLSB1bmlxdWUgY29ubmVjdG9yJ3MgdXNlciBpZGVudGlmaWVyLgorCQkJCSAgSXQgbXVzdCBiZSByZWdpc3RlcmVkIGluIGNvbm5lY3Rvci5oIGZvciBsZWdhbCBpbi1rZXJuZWwgdXNlcnMuCisgY2hhciAqbmFtZQkJCS0gY29ubmVjdG9yJ3MgY2FsbGJhY2sgc3ltYm9saWMgbmFtZS4KKyB2b2lkICgqY2FsbGJhY2spICh2b2lkICopCS0gY29ubmVjdG9yJ3MgY2FsbGJhY2suCiAJCQkJICBBcmd1bWVudCBtdXN0IGJlIGRlcmVmZXJlbmNlZCB0byBzdHJ1Y3QgY25fbXNnICouCiAKKwogdm9pZCBjbl9kZWxfY2FsbGJhY2soc3RydWN0IGNiX2lkICppZCk7CiAKLVVucmVnaXN0ZXJzIG5ldyBjYWxsYmFjayB3aXRoIGNvbm5lY3RvciBjb3JlLgorIFVucmVnaXN0ZXJzIG5ldyBjYWxsYmFjayB3aXRoIGNvbm5lY3RvciBjb3JlLgogCi1zdHJ1Y3QgY2JfaWQgKmlkIAkJLSB1bmlxdWUgY29ubmVjdG9yJ3MgdXNlciBpZGVudGlmaWVyLgorIHN0cnVjdCBjYl9pZCAqaWQJCS0gdW5pcXVlIGNvbm5lY3RvcidzIHVzZXIgaWRlbnRpZmllci4KKwogCiBpbnQgY25fbmV0bGlua19zZW5kKHN0cnVjdCBjbl9tc2cgKm1zZywgdTMyIF9fZ3JvdXBzLCBpbnQgZ2ZwX21hc2spOwogCi1TZW5kcyBtZXNzYWdlIHRvIHRoZSBzcGVjaWZpZWQgZ3JvdXBzLiAgSXQgY2FuIGJlIHNhZmVseSBjYWxsZWQgZnJvbQotc29mdGlycSBjb250ZXh0LCBidXQgbWF5IHNpbGVudGx5IGZhaWwgdW5kZXIgc3Ryb25nIG1lbW9yeSBwcmVzc3VyZS4KLUlmIHRoZXJlIGFyZSBubyBsaXN0ZW5lcnMgZm9yIGdpdmVuIGdyb3VwIC1FU1JDSCBjYW4gYmUgcmV0dXJuZWQuCisgU2VuZHMgbWVzc2FnZSB0byB0aGUgc3BlY2lmaWVkIGdyb3Vwcy4gIEl0IGNhbiBiZSBzYWZlbHkgY2FsbGVkIGZyb20KKyBzb2Z0aXJxIGNvbnRleHQsIGJ1dCBtYXkgc2lsZW50bHkgZmFpbCB1bmRlciBzdHJvbmcgbWVtb3J5IHByZXNzdXJlLgorIElmIHRoZXJlIGFyZSBubyBsaXN0ZW5lcnMgZm9yIGdpdmVuIGdyb3VwIC1FU1JDSCBjYW4gYmUgcmV0dXJuZWQuCiAKLXN0cnVjdCBjbl9tc2cgKgkJCS0gbWVzc2FnZSBoZWFkZXIod2l0aCBhdHRhY2hlZCBkYXRhKS4KLXUzMiBfX2dyb3VwCQkJLSBkZXN0aW5hdGlvbiBncm91cC4KKyBzdHJ1Y3QgY25fbXNnICoJCS0gbWVzc2FnZSBoZWFkZXIod2l0aCBhdHRhY2hlZCBkYXRhKS4KKyB1MzIgX19ncm91cAkJCS0gZGVzdGluYXRpb24gZ3JvdXAuCiAJCQkJICBJZiBfX2dyb3VwIGlzIHplcm8sIHRoZW4gYXBwcm9wcmlhdGUgZ3JvdXAgd2lsbAogCQkJCSAgYmUgc2VhcmNoZWQgdGhyb3VnaCBhbGwgcmVnaXN0ZXJlZCBjb25uZWN0b3IgdXNlcnMsCiAJCQkJICBhbmQgbWVzc2FnZSB3aWxsIGJlIGRlbGl2ZXJlZCB0byB0aGUgZ3JvdXAgd2hpY2ggd2FzCiAJCQkJICBjcmVhdGVkIGZvciB1c2VyIHdpdGggdGhlIHNhbWUgSUQgYXMgaW4gbXNnLgogCQkJCSAgSWYgX19ncm91cCBpcyBub3QgemVybywgdGhlbiBtZXNzYWdlIHdpbGwgYmUgZGVsaXZlcmVkCiAJCQkJICB0byB0aGUgc3BlY2lmaWVkIGdyb3VwLgotaW50IGdmcF9tYXNrCQkJLSBHRlAgbWFzay4KKyBpbnQgZ2ZwX21hc2sJCQktIEdGUCBtYXNrLgogCi1Ob3RlOiBXaGVuIHJlZ2lzdGVyaW5nIG5ldyBjYWxsYmFjayB1c2VyLCBjb25uZWN0b3IgY29yZSBhc3NpZ25zCi1uZXRsaW5rIGdyb3VwIHRvIHRoZSB1c2VyIHdoaWNoIGlzIGVxdWFsIHRvIGl0J3MgaWQuaWR4LgorIE5vdGU6IFdoZW4gcmVnaXN0ZXJpbmcgbmV3IGNhbGxiYWNrIHVzZXIsIGNvbm5lY3RvciBjb3JlIGFzc2lnbnMKKyBuZXRsaW5rIGdyb3VwIHRvIHRoZSB1c2VyIHdoaWNoIGlzIGVxdWFsIHRvIGl0J3MgaWQuaWR4LgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBQcm90b2NvbCBkZXNjcmlwdGlvbi4KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotQ3VycmVudCBvZmZlcnMgdHJhbnNwb3J0IGxheWVyIHdpdGggZml4ZWQgaGVhZGVyLiAgUmVjb21tZW5kZWQKLXByb3RvY29sIHdoaWNoIHVzZXMgc3VjaCBoZWFkZXIgaXMgZm9sbG93aW5nOgorVGhlIGN1cnJlbnQgZnJhbWV3b3JrIG9mZmVycyBhIHRyYW5zcG9ydCBsYXllciB3aXRoIGZpeGVkIGhlYWRlcnMuICBUaGUKK3JlY29tbWVuZGVkIHByb3RvY29sIHdoaWNoIHVzZXMgc3VjaCBhIGhlYWRlciBpcyBhcyBmb2xsb3dpbmc6CiAKIG1zZy0+c2VxIGFuZCBtc2ctPmFjayBhcmUgdXNlZCB0byBkZXRlcm1pbmUgbWVzc2FnZSBnZW5lYWxvZ3kuICBXaGVuCi1zb21lb25lIHNlbmRzIG1lc3NhZ2UgaXQgcHV0cyB0aGVyZSBsb2NhbGx5IHVuaXF1ZSBzZXF1ZW5jZSBhbmQgcmFuZG9tCi1hY2tub3dsZWRnZSBudW1iZXJzLiAgU2VxdWVuY2UgbnVtYmVyIG1heSBiZSBjb3BpZWQgaW50bworc29tZW9uZSBzZW5kcyBhIG1lc3NhZ2UsIHRoZXkgdXNlIGEgbG9jYWxseSB1bmlxdWUgc2VxdWVuY2UgYW5kIHJhbmRvbQorYWNrbm93bGVkZ2UgbnVtYmVyLiAgVGhlIHNlcXVlbmNlIG51bWJlciBtYXkgYmUgY29waWVkIGludG8KIG5sbXNnaGRyLT5ubG1zZ19zZXEgdG9vLgogCi1TZXF1ZW5jZSBudW1iZXIgaXMgaW5jcmVtZW50ZWQgd2l0aCBlYWNoIG1lc3NhZ2UgdG8gYmUgc2VudC4KK1RoZSBzZXF1ZW5jZSBudW1iZXIgaXMgaW5jcmVtZW50ZWQgd2l0aCBlYWNoIG1lc3NhZ2Ugc2VudC4KIAotSWYgd2UgZXhwZWN0IHJlcGx5IHRvIG91ciBtZXNzYWdlLCB0aGVuIHNlcXVlbmNlIG51bWJlciBpbiByZWNlaXZlZAotbWVzc2FnZSBNVVNUIGJlIHRoZSBzYW1lIGFzIGluIG9yaWdpbmFsIG1lc3NhZ2UsIGFuZCBhY2tub3dsZWRnZQotbnVtYmVyIE1VU1QgYmUgdGhlIHNhbWUgKyAxLgorSWYgeW91IGV4cGVjdCBhIHJlcGx5IHRvIHRoZSBtZXNzYWdlLCB0aGVuIHRoZSBzZXF1ZW5jZSBudW1iZXIgaW4gdGhlCityZWNlaXZlZCBtZXNzYWdlIE1VU1QgYmUgdGhlIHNhbWUgYXMgaW4gdGhlIG9yaWdpbmFsIG1lc3NhZ2UsIGFuZCB0aGUKK2Fja25vd2xlZGdlIG51bWJlciBNVVNUIGJlIHRoZSBzYW1lICsgMS4KIAotSWYgd2UgcmVjZWl2ZSBtZXNzYWdlIGFuZCBpdCdzIHNlcXVlbmNlIG51bWJlciBpcyBub3QgZXF1YWwgdG8gb25lIHdlCi1hcmUgZXhwZWN0aW5nLCB0aGVuIGl0IGlzIG5ldyBtZXNzYWdlLiAgSWYgd2UgcmVjZWl2ZSBtZXNzYWdlIGFuZCBpdCdzCi1zZXF1ZW5jZSBudW1iZXIgaXMgdGhlIHNhbWUgYXMgb25lIHdlIGFyZSBleHBlY3RpbmcsIGJ1dCBpdCdzCi1hY2tub3dsZWRnZSBpcyBub3QgZXF1YWwgYWNrbm93bGVkZ2UgbnVtYmVyIGluIG9yaWdpbmFsIG1lc3NhZ2UgKyAxLAotdGhlbiBpdCBpcyBuZXcgbWVzc2FnZS4KK0lmIHdlIHJlY2VpdmUgYSBtZXNzYWdlIGFuZCBpdHMgc2VxdWVuY2UgbnVtYmVyIGlzIG5vdCBlcXVhbCB0byBvbmUgd2UKK2FyZSBleHBlY3RpbmcsIHRoZW4gaXQgaXMgYSBuZXcgbWVzc2FnZS4gIElmIHdlIHJlY2VpdmUgYSBtZXNzYWdlIGFuZAoraXRzIHNlcXVlbmNlIG51bWJlciBpcyB0aGUgc2FtZSBhcyBvbmUgd2UgYXJlIGV4cGVjdGluZywgYnV0IGl0cworYWNrbm93bGVkZ2UgaXMgbm90IGVxdWFsIHRvIHRoZSBhY2tub3dsZWRnZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsCittZXNzYWdlICsgMSwgdGhlbiBpdCBpcyBhIG5ldyBtZXNzYWdlLgogCi1PYnZpb3VzbHksIHByb3RvY29sIGhlYWRlciBjb250YWlucyBhYm92ZSBpZC4KK09idmlvdXNseSwgdGhlIHByb3RvY29sIGhlYWRlciBjb250YWlucyB0aGUgYWJvdmUgaWQuCiAKLWNvbm5lY3RvciBhbGxvd3MgZXZlbnQgbm90aWZpY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgZm9ybToga2VybmVsCitUaGUgY29ubmVjdG9yIGFsbG93cyBldmVudCBub3RpZmljYXRpb24gaW4gdGhlIGZvbGxvd2luZyBmb3JtOiBrZXJuZWwKIGRyaXZlciBvciB1c2Vyc3BhY2UgcHJvY2VzcyBjYW4gYXNrIGNvbm5lY3RvciB0byBub3RpZnkgaXQgd2hlbgotc2VsZWN0ZWQgaWQncyB3aWxsIGJlIHR1cm5lZCBvbiBvciBvZmYocmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQgaXQncwotY2FsbGJhY2spLiBJdCBpcyBkb25lIGJ5IHNlbmRpbmcgc3BlY2lhbCBjb21tYW5kIHRvIGNvbm5lY3RvcgotZHJpdmVyKGl0IGFsc28gcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIGlkPXstMSwgLTF9KS4KK3NlbGVjdGVkIGlkcyB3aWxsIGJlIHR1cm5lZCBvbiBvciBvZmYgKHJlZ2lzdGVyZWQgb3IgdW5yZWdpc3RlcmVkIGl0cworY2FsbGJhY2spLiAgSXQgaXMgZG9uZSBieSBzZW5kaW5nIGEgc3BlY2lhbCBjb21tYW5kIHRvIHRoZSBjb25uZWN0b3IKK2RyaXZlciAoaXQgYWxzbyByZWdpc3RlcnMgaXRzZWxmIHdpdGggaWQ9ey0xLCAtMX0pLgogCi1BcyBleGFtcGxlIG9mIHVzYWdlIERvY3VtZW50YXRpb24vY29ubmVjdG9yIG5vdyBjb250YWlucyBjbl90ZXN0LmMgLQotdGVzdGluZyBtb2R1bGUgd2hpY2ggdXNlcyBjb25uZWN0b3IgdG8gcmVxdWVzdCBub3RpZmljYXRpb24gYW5kIHRvCi1zZW5kIG1lc3NhZ2VzLgorQXMgZXhhbXBsZSBvZiB0aGlzIHVzYWdlIGNhbiBiZSBmb3VuZCBpbiB0aGUgY25fdGVzdC5jIG1vZHVsZSB3aGljaAordXNlcyB0aGUgY29ubmVjdG9yIHRvIHJlcXVlc3Qgbm90aWZpY2F0aW9uIGFuZCB0byBzZW5kIG1lc3NhZ2VzLgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBSZWxpYWJpbGl0eS4KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotTmV0bGluayBpdHNlbGYgaXMgbm90IHJlbGlhYmxlIHByb3RvY29sLCB0aGF0IG1lYW5zIHRoYXQgbWVzc2FnZXMgY2FuCitOZXRsaW5rIGl0c2VsZiBpcyBub3QgYSByZWxpYWJsZSBwcm90b2NvbC4gIFRoYXQgbWVhbnMgdGhhdCBtZXNzYWdlcyBjYW4KIGJlIGxvc3QgZHVlIHRvIG1lbW9yeSBwcmVzc3VyZSBvciBwcm9jZXNzJyByZWNlaXZpbmcgcXVldWUgb3ZlcmZsb3dlZCwKLXNvIGNhbGxlciBpcyB3YXJuZWQgbXVzdCBiZSBwcmVwYXJlZC4gVGhhdCBpcyB3aHkgc3RydWN0IGNuX21zZyBbbWFpbgotY29ubmVjdG9yJ3MgbWVzc2FnZSBoZWFkZXJdIGNvbnRhaW5zIHUzMiBzZXEgYW5kIHUzMiBhY2sgZmllbGRzLgorc28gY2FsbGVyIGlzIHdhcm5lZCB0aGF0IGl0IG11c3QgYmUgcHJlcGFyZWQuICBUaGF0IGlzIHdoeSB0aGUgc3RydWN0Citjbl9tc2cgW21haW4gY29ubmVjdG9yJ3MgbWVzc2FnZSBoZWFkZXJdIGNvbnRhaW5zIHUzMiBzZXEgYW5kIHUzMiBhY2sKK2ZpZWxkcy4KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogVXNlcnNwYWNlIHVzYWdlLgogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiAyLjYuMTQgaGFzIGEgbmV3IG5ldGxpbmsgc29ja2V0IGltcGxlbWVudGF0aW9uLCB3aGljaCBieSBkZWZhdWx0IGRvZXMgbm90Ci1hbGxvdyB0byBzZW5kIGRhdGEgdG8gbmV0bGluayBncm91cHMgb3RoZXIgdGhhbiAxLgotU28sIGlmIHRvIHVzZSBuZXRsaW5rIHNvY2tldCAoZm9yIGV4YW1wbGUgdXNpbmcgY29ubmVjdG9yKSAKLXdpdGggZGlmZmVyZW50IGdyb3VwIG51bWJlciB1c2Vyc3BhY2UgYXBwbGljYXRpb24gbXVzdCBzdWJzY3JpYmUgdG8gCi10aGF0IGdyb3VwLiBJdCBjYW4gYmUgYWNoaWV2ZWQgYnkgZm9sbG93aW5nIHBzZXVkb2NvZGU6CithbGxvdyBwZW9wbGUgdG8gc2VuZCBkYXRhIHRvIG5ldGxpbmsgZ3JvdXBzIG90aGVyIHRoYW4gMS4KK1NvLCBpZiB5b3Ugd2lzaCB0byB1c2UgYSBuZXRsaW5rIHNvY2tldCAoZm9yIGV4YW1wbGUgdXNpbmcgY29ubmVjdG9yKQord2l0aCBhIGRpZmZlcmVudCBncm91cCBudW1iZXIsIHRoZSB1c2Vyc3BhY2UgYXBwbGljYXRpb24gbXVzdCBzdWJzY3JpYmUgdG8KK3RoYXQgZ3JvdXAgZmlyc3QuICBJdCBjYW4gYmUgYWNoaWV2ZWQgYnkgdGhlIGZvbGxvd2luZyBwc2V1ZG9jb2RlOgogCiBzID0gc29ja2V0KFBGX05FVExJTkssIFNPQ0tfREdSQU0sIE5FVExJTktfQ09OTkVDVE9SKTsKIApAQCAtMTYwLDggKzE2Myw4IEBACiB9CiAKIFdoZXJlIDI3MCBhYm92ZSBpcyBTT0xfTkVUTElOSywgYW5kIDEgaXMgYSBORVRMSU5LX0FERF9NRU1CRVJTSElQIHNvY2tldAotb3B0aW9uLiBUbyBkcm9wIG11bHRpY2FzdCBzdWJzY3JpcHRpb24gb25lIHNob3VsZCBjYWxsIGFib3ZlIHNvY2tldCBvcHRpb24KLXdpdGggTkVUTElOS19EUk9QX01FTUJFUlNISVAgcGFyYW1ldGVyIHdoaWNoIGlzIGRlZmluZWQgYXMgMC4KK29wdGlvbi4gIFRvIGRyb3AgYSBtdWx0aWNhc3Qgc3Vic2NyaXB0aW9uLCBvbmUgc2hvdWxkIGNhbGwgdGhlIGFib3ZlIHNvY2tldAorb3B0aW9uIHdpdGggdGhlIE5FVExJTktfRFJPUF9NRU1CRVJTSElQIHBhcmFtZXRlciB3aGljaCBpcyBkZWZpbmVkIGFzIDAuCiAKIDIuNi4xNCBuZXRsaW5rIGNvZGUgb25seSBhbGxvd3MgdG8gc2VsZWN0IGEgZ3JvdXAgd2hpY2ggaXMgbGVzcyBvciBlcXVhbCB0bwogdGhlIG1heGltdW0gZ3JvdXAgbnVtYmVyLCB3aGljaCBpcyB1c2VkIGF0IG5ldGxpbmtfa2VybmVsX2NyZWF0ZSgpIHRpbWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci91Y29uLmMgYi9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci91Y29uLmMKaW5kZXggYzUwOTJhZC4uNDg0OGRiOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvdWNvbi5jCisrKyBiL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL3Vjb24uYwpAQCAtMzAsMTggKzMwLDI0IEBACiAKICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KIAorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgogCiAjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CiAKICNkZWZpbmUgREVCVUcKICNkZWZpbmUgTkVUTElOS19DT05ORUNUT1IgCTExCiAKKy8qIEhvcGVmdWxseSB5b3VyIHVzZXJzcGFjZSBjb25uZWN0b3IuaCBtYXRjaGVzIHRoaXMga2VybmVsICovCisjZGVmaW5lIENOX1RFU1RfSURYCQlDTl9ORVRMSU5LX1VTRVJTICsgMworI2RlZmluZSBDTl9URVNUX1ZBTAkJMHg0NTYKKwogI2lmZGVmIERFQlVHCiAjZGVmaW5lIHVsb2coZiwgYS4uLikgZnByaW50ZihzdGRvdXQsIGYsICMjYSkKICNlbHNlCkBAIC04Myw2ICs4OSwyNSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJcHJpbnRmKAorCQkiVXNhZ2U6IHVjb24gW29wdGlvbnNdIFtvdXRwdXQgZmlsZV1cbiIKKwkJIlxuIgorCQkiXHQtaFx0dGhpcyBoZWxwIHNjcmVlblxuIgorCQkiXHQtc1x0c2VuZCBidWZmZXJzIHRvIHRoZSB0ZXN0IG1vZHVsZVxuIgorCQkiXG4iCisJCSJUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiB1Y29uIGlzIHRvIHN1YnNjcmliZSB0byB0aGUgdGVzdCBtb2R1bGVcbiIKKwkJImFuZCB3YWl0IGZvciBzdGF0ZSBtZXNzYWdlcy4gIEFueSBvbmVzIHJlY2VpdmVkIGFyZSBkdW1wZWQgdG8gdGhlXG4iCisJCSJzcGVjaWZpZWQgb3V0cHV0IGZpbGUgKG9yIHN0ZG91dCkuICBUaGUgdGVzdCBtb2R1bGUgaXMgYXNzdW1lZCB0b1xuIgorCQkiaGF2ZSBhbiBpZCBvZiB7JXUuJXV9XG4iCisJCSJcbiIKKwkJIklmIHlvdSBnZXQgbm8gb3V0cHV0LCB0aGVuIHZlcmlmeSB0aGUgY25fdGVzdCBtb2R1bGUgaWQgbWF0Y2hlc1xuIgorCQkidGhlIGV4cGVjdGVkIGlkIGFib3ZlLlxuIgorCQksIENOX1RFU1RfSURYLCBDTl9URVNUX1ZBTAorCSk7Cit9CisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJaW50IHM7CkBAIC05NCwxNyArMTE5LDM0IEBACiAJRklMRSAqb3V0OwogCXRpbWVfdCB0bTsKIAlzdHJ1Y3QgcG9sbGZkIHBmZDsKKwlib29sIHNlbmRfbXNncyA9IGZhbHNlOwogCi0JaWYgKGFyZ2MgPCAyKQotCQlvdXQgPSBzdGRvdXQ7Ci0JZWxzZSB7Ci0JCW91dCA9IGZvcGVuKGFyZ3ZbMV0sICJhKyIpOworCXdoaWxlICgocyA9IGdldG9wdChhcmdjLCBhcmd2LCAiaHMiKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChzKSB7CisJCWNhc2UgJ3MnOgorCQkJc2VuZF9tc2dzID0gdHJ1ZTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2gnOgorCQkJdXNhZ2UoKTsKKwkJCXJldHVybiAwOworCisJCWRlZmF1bHQ6CisJCQkvKiBnZXRvcHQoKSBvdXRwdXRzIGFuIGVycm9yIGZvciB1cyAqLworCQkJdXNhZ2UoKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJaWYgKGFyZ2MgIT0gb3B0aW5kKSB7CisJCW91dCA9IGZvcGVuKGFyZ3Zbb3B0aW5kXSwgImErIik7CiAJCWlmICghb3V0KSB7CiAJCQl1bG9nKCJVbmFibGUgdG8gb3BlbiAlcyBmb3Igd3JpdGluZzogJXNcbiIsCiAJCQkJYXJndlsxXSwgc3RyZXJyb3IoZXJybm8pKTsKIAkJCW91dCA9IHN0ZG91dDsKIAkJfQotCX0KKwl9IGVsc2UKKwkJb3V0ID0gc3Rkb3V0OwogCiAJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwogCkBAIC0xMTUsOSArMTU3LDExIEBACiAJfQogCiAJbF9sb2NhbC5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LOwotCWxfbG9jYWwubmxfZ3JvdXBzID0gMHgxMjM7IC8qIGJpdG1hc2sgb2YgcmVxdWVzdGVkIGdyb3VwcyAqLworCWxfbG9jYWwubmxfZ3JvdXBzID0gLTE7IC8qIGJpdG1hc2sgb2YgcmVxdWVzdGVkIGdyb3VwcyAqLwogCWxfbG9jYWwubmxfcGlkID0gMDsKIAorCXVsb2coInN1YnNjcmliaW5nIHRvICV1LiV1XG4iLCBDTl9URVNUX0lEWCwgQ05fVEVTVF9WQUwpOworCiAJaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSZsX2xvY2FsLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX25sKSkgPT0gLTEpIHsKIAkJcGVycm9yKCJiaW5kIik7CiAJCWNsb3NlKHMpOwpAQCAtMTMwLDE1ICsxNzQsMTUgQEAKIAkJc2V0c29ja29wdChzLCBTT0xfTkVUTElOSywgTkVUTElOS19BRERfTUVNQkVSU0hJUCwgJm9uLCBzaXplb2Yob24pKTsKIAl9CiAjZW5kaWYKLQlpZiAoMCkgeworCWlmIChzZW5kX21zZ3MpIHsKIAkJaW50IGksIGo7CiAKIAkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwogCiAJCWRhdGEgPSAoc3RydWN0IGNuX21zZyAqKWJ1ZjsKIAotCQlkYXRhLT5pZC5pZHggPSAweDEyMzsKLQkJZGF0YS0+aWQudmFsID0gMHg0NTY7CisJCWRhdGEtPmlkLmlkeCA9IENOX1RFU1RfSURYOworCQlkYXRhLT5pZC52YWwgPSBDTl9URVNUX1ZBTDsKIAkJZGF0YS0+c2VxID0gc2VxKys7CiAJCWRhdGEtPmFjayA9IDA7CiAJCWRhdGEtPmxlbiA9IDA7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggMDllMDMxYy4uNTAzZDIxMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtNiw2ICs2LDM1IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OglQUklTTTU0CitXaGVuOgkyLjYuMzQKKworV2h5OglwcmlzbTU0IEZ1bGxNQUMgUENJIC8gQ2FyZGJ1cyBkZXZpY2VzIHVzZWQgdG8gYmUgc3VwcG9ydGVkIG9ubHkgYnkgdGhlCisJcHJpc201NCB3aXJlbGVzcyBkcml2ZXIuIEFmdGVyIEludGVyc2lsIHN0b3BwZWQgc2VsbGluZyB0aGVzZQorCWRldmljZXMgaW4gcHJlZmVyZW5jZSBmb3IgdGhlIG5ld2VyIG1vcmUgZmxleGlibGUgU29mdE1BQyBkZXZpY2VzCisJYSBTb2Z0TUFDIGRldmljZSBkcml2ZXIgd2FzIHJlcXVpcmVkIGFuZCBwcmlzbTU0IGRpZCBub3Qgc3VwcG9ydAorCXRoZW0uIFRoZSBwNTRwY2kgZHJpdmVyIG5vdyBleGlzdHMgYW5kIGhhcyBiZWVuIHByZXNlbnQgaW4gdGhlIGtlcm5lbCBmb3IKKwlhIHdoaWxlLiBUaGlzIGRyaXZlciBzdXBwb3J0cyBib3RoIFNvZnRNQUMgZGV2aWNlcyBhbmQgRnVsbE1BQyBkZXZpY2VzLgorCVRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSBkZXZpY2VzIHdhcyB0aGUgYW1vdW50IG9mIG1lbW9yeSB3aGljaAorCWNvdWxkIGJlIHVzZWQgZm9yIHRoZSBmaXJtd2FyZS4gVGhlIFNvZnRNQUMgZGV2aWNlcyBzdXBwb3J0IGEgc21hbGxlcgorCWFtb3VudCBvZiBtZW1vcnkuIEJlY2F1c2Ugb2YgdGhpcyB0aGUgU29mdE1BQyBmaXJtd2FyZSBmaXRzIGludG8gRnVsbE1BQworCWRldmljZXMncyBtZW1vcnkuIHA1NHBjaSBzdXBwb3J0cyBub3Qgb25seSBQQ0kgLyBDYXJkYnVzIGJ1dCBhbHNvIFVTQgorCWFuZCBTUEkuIFNpbmNlIHA1NHBjaSBzdXBwb3J0cyBhbGwgZGV2aWNlcyBwcmlzbTU0IHN1cHBvcnRzCisJeW91IHdpbGwgaGF2ZSBhIGNvbmZsaWN0LiBJJ20gbm90IHF1aXRlIHN1cmUgaG93IGRpc3RyaWJ1dGlvbnMgYXJlCisJaGFuZGxpbmcgdGhpcyBjb25mbGljdCByaWdodCBub3cuIHByaXNtNTQgd2FzIGtlcHQgYXJvdW5kIGR1ZSB0bworCWNsYWltcyB1c2VycyBtYXkgZXhwZXJpZW5jZSBpc3N1ZXMgd2hlbiB1c2luZyB0aGUgU29mdE1BQyBkcml2ZXIuCisJVGltZSBoYXMgcGFzc2VkIHVzZXJzIGhhdmUgbm90IHJlcG9ydGVkIGlzc3Vlcy4gSWYgeW91IHVzZSBwcmlzbTU0CisJYW5kIGZvciB3aGF0ZXZlciByZWFzb24geW91IGNhbm5vdCB1c2UgcDU0cGNpIHBsZWFzZSBsZXQgdXMga25vdyEKKwlFLW1haWwgdXMgYXQ6IGxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZworCisJRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBwNTQgd2lraSBwYWdlOgorCisJaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9wNTQKKworV2hvOglMdWlzIFIuIFJvZHJpZ3VleiA8bHJvZHJpZ3VlekBhdGhlcm9zLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFdoYXQ6CUlSUUZfU0FNUExFX1JBTkRPTQogQ2hlY2s6CUlSUUZfU0FNUExFX1JBTkRPTQogV2hlbjoJSnVseSAyMDA5CkBAIC0yMDYsMjQgKzIzNSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OiBsaWJhdGEgc3BpbmRvd24gc2tpcHBpbmcgYW5kIHdhcm5pbmcKLVdoZW46IERlYyAyMDA4Ci1XaHk6ICBTb21lIGhhbHQoOCkgaW1wbGVtZW50YXRpb25zIHN5bmNocm9uaXplIGNhY2hlcyBmb3IgYW5kIHNwaW4KLSAgICAgIGRvd24gbGliYXRhIGRpc2tzIGJlY2F1c2UgbGliYXRhIGRpZG4ndCB1c2UgdG8gc3BpbiBkb3duIGRpc2sgb24KLSAgICAgIHN5c3RlbSBoYWx0IChvbmx5IHN5bmNocm9uaXplZCBjYWNoZXMpLgotICAgICAgU3BpbiBkb3duIG9uIHN5c3RlbSBoYWx0IGlzIG5vdyBpbXBsZW1lbnRlZC4gIHN5c2ZzIG5vZGUKLSAgICAgIC9zeXMvY2xhc3Mvc2NzaV9kaXNrL2g6YzppOmwvbWFuYWdlX3N0YXJ0X3N0b3AgaXMgcHJlc2VudCBpZgotICAgICAgc3BpbiBkb3duIHN1cHBvcnQgaXMgYXZhaWxhYmxlLgotICAgICAgQmVjYXVzZSBpc3N1aW5nIHNwaW4gZG93biBjb21tYW5kIHRvIGFuIGFscmVhZHkgc3B1biBkb3duIGRpc2sKLSAgICAgIG1ha2VzIHNvbWUgZGlza3Mgc3BpbiB1cCBqdXN0IHRvIHNwaW4gZG93biBhZ2FpbiwgbGliYXRhIHRyYWNrcwotICAgICAgZGV2aWNlIHNwaW5kb3duIHN0YXR1cyB0byBza2lwIHRoZSBleHRyYSBzcGluZG93biBjb21tYW5kIGFuZAotICAgICAgd2FybiBhYm91dCBpdC4KLSAgICAgIFRoaXMgaXMgdG8gZ2l2ZSB1c2Vyc3BhY2UgdG9vbHMgdGhlIHRpbWUgdG8gZ2V0IHVwZGF0ZWQgYW5kIHdpbGwKLSAgICAgIGJlIHJlbW92ZWQgYWZ0ZXIgdXNlcnNwYWNlIGlzIHJlYXNvbmFibHkgdXBkYXRlZC4KLVdobzogIFRlanVuIEhlbyA8aHRlanVuQGdtYWlsLmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CWkzODYveDg2XzY0IGJ6SW1hZ2Ugc3ltbGlua3MKIFdoZW46CUFwcmlsIDIwMTAKIApAQCAtMjM1LDMxICsyNDYsNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoYXQgKFdoeSk6Ci0JLSBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UT1MuaCBpcHRfdG9zLmggaGVhZGVyIGZpbGVzCi0JICAoc3VwZXJzZWRlZCBieSB4dF9UT1MveHRfdG9zIHRhcmdldCAmIG1hdGNoKQotCi0JLSAiZm9yd2FyZGluZyIgaGVhZGVyIGZpbGVzIGxpa2UgaXB0X21hYy5oIGluCi0JICBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LyBhbmQgaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni8KLQotCS0geHRfQ09OTk1BUksgbWF0Y2ggcmV2aXNpb24gMAotCSAgKHN1cGVyc2VkZWQgYnkgeHRfQ09OTk1BUksgbWF0Y2ggcmV2aXNpb24gMSkKLQotCS0geHRfTUFSSyB0YXJnZXQgcmV2aXNpb25zIDAgYW5kIDEKLQkgIChzdXBlcnNlZGVkIGJ5IHh0X01BUksgbWF0Y2ggcmV2aXNpb24gMikKLQotCS0geHRfY29ubm1hcmsgbWF0Y2ggcmV2aXNpb24gMAotCSAgKHN1cGVyc2VkZWQgYnkgeHRfY29ubm1hcmsgbWF0Y2ggcmV2aXNpb24gMSkKLQotCS0geHRfY29ubnRyYWNrIG1hdGNoIHJldmlzaW9uIDAKLQkgIChzdXBlcnNlZGVkIGJ5IHh0X2Nvbm50cmFjayBtYXRjaCByZXZpc2lvbiAxKQotCi0JLSB4dF9pcHJhbmdlIG1hdGNoIHJldmlzaW9uIDAsCi0JICBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9pcHJhbmdlLmgKLQkgIChzdXBlcnNlZGVkIGJ5IHh0X2lwcmFuZ2UgbWF0Y2ggcmV2aXNpb24gMSkKLQotCS0geHRfbWFyayBtYXRjaCByZXZpc2lvbiAwCi0JICAoc3VwZXJzZWRlZCBieSB4dF9tYXJrIG1hdGNoIHJldmlzaW9uIDEpCi0KIAktIHh0X3JlY2VudDogdGhlIG9sZCBpcHRfcmVjZW50IHByb2MgZGlyCiAJICAoc3VwZXJzZWRlZCBieSAvcHJvYy9uZXQveHRfcmVjZW50KQogCkBAIC0zOTQsMTUgKzM4MCw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CW9ic29sZXRlIGdlbmVyaWMgaXJxIGRlZmluZXMgYW5kIHR5cGVkZWZzCi1XaGVuOgkyLjYuMzAKLVdoeToJVGhlIGRlZmluZXMgYW5kIHR5cGVkZWZzIChod19pbnRlcnJ1cHRfdHlwZSwgbm9faXJxX3R5cGUsIGlycV9kZXNjX3QpCi0JaGF2ZSBiZWVuIGtlcHQgYXJvdW5kIGZvciBtaWdyYXRpb24gcmVhc29ucy4gQWZ0ZXIgbW9yZSB0aGFuIHR3byB5ZWFycwotCWl0J3MgdGltZSB0byByZW1vdmUgdGhlbSBmaW5hbGx5Ci1XaG86CVRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJZmFrZXBocCBhbmQgYXNzb2NpYXRlZCBzeXNmcyBmaWxlcyBpbiAvc3lzL2J1cy9wY2kvc2xvdHMvCiBXaGVuOgkyMDExCiBXaHk6CUluIDIuNi4yNywgdGhlIHNlbWFudGljcyBvZiAvc3lzL2J1cy9wY2kvc2xvdHMgd2FzIHJlZGVmaW5lZCB0bwpAQCAtNDY4LDMgKzQ0NSwyNyBAQAogCWNwdWZyZXEgY29yZSBhbmQgY29udGFpbmVkIGluc2lkZSBjcHVmcmVxLmMuIE90aGVyIGRlcGVuZGVudAogCWRyaXZlcnMgc2hvdWxkIG5vdCB1c2UgaXQgaW4gb3JkZXIgdG8gc2FmZWx5IGF2b2lkIGxvY2tkZXAgaXNzdWVzLgogV2hvOglWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0Oglzb3VuZC1zbG90L3NlcnZpY2UtKiBtb2R1bGUgYWxpYXNlcyBhbmQgcmVsYXRlZCBjbHV0dGVycyBpbgorCXNvdW5kL3NvdW5kX2NvcmUuYworV2hlbjoJQXVndXN0IDIwMTAKK1doeToJT1NTIHNvdW5kX2NvcmUgZ3JhYnMgYWxsIGxlZ2FjeSBtaW5vcnMgKDAtMjU1KSBvZiBTT1VORF9NQUpPUgorCSgxNCkgYW5kIHJlcXVlc3RzIG1vZHVsZXMgdXNpbmcgY3VzdG9tIHNvdW5kLXNsb3Qvc2VydmljZS0qCisJbW9kdWxlIGFsaWFzZXMuICBUaGUgb25seSBiZW5lZml0IG9mIGRvaW5nIHRoaXMgaXMgYWxsb3dpbmcKKwl1c2Ugb2YgY3VzdG9tIG1vZHVsZSBhbGlhc2VzIHdoaWNoIG1pZ2h0IGFzIHdlbGwgYmUgY29uc2lkZXJlZAorCWEgYnVnIGF0IHRoaXMgcG9pbnQuICBUaGlzIHByZWVtcHRpdmUgY2xhaW1pbmcgcHJldmVudHMKKwlhbHRlcm5hdGl2ZSBPU1MgaW1wbGVtZW50YXRpb25zLgorCisJVGlsbCB0aGUgZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUga2VybmVsIHdpbGwgYmUgcmVxdWVzdGluZworCWJvdGggc291bmQtc2xvdC9zZXJ2aWNlLSogYW5kIHRoZSBzdGFuZGFyZCBjaGFyLW1ham9yLSogbW9kdWxlCisJYWxpYXNlcyBhbmQgYWxsb3cgdHVybmluZyBvZmYgdGhlIHByZS1jbGFpbWluZyBzZWxlY3RpdmVseSB2aWEKKwlDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU0gYW5kIHNvdW5kY29yZS5wcmVjbGFpbV9vc3MKKwlrZXJuZWwgcGFyYW1ldGVyLgorCisJQWZ0ZXIgdGhlIHRyYW5zaXRpb24gcGhhc2UgaXMgY29tcGxldGUsIGJvdGggdGhlIGN1c3RvbSBtb2R1bGUKKwlhbGlhc2VzIGFuZCBzd2l0Y2hlcyB0byBkaXNhYmxlIGl0IHdpbGwgZ28gYXdheS4gIFRoaXMgcmVtb3ZhbAorCXdpbGwgYWxzbyBhbGxvdyBtYWtpbmcgQUxTQSBPU1MgZW11bGF0aW9uIGluZGVwZW5kZW50IG9mCisJc291bmRfY29yZS4gIFRoZSBkZXBlbmRlbmN5IHdpbGwgYmUgYnJva2VuIHRoZW4gdG9vLgorV2hvOglUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2dmczItdWV2ZW50cy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2dmczItdWV2ZW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5NjZkYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZ2ZzMi11ZXZlbnRzLnR4dApAQCAtMCwwICsxLDEwMCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWV2ZW50cyBhbmQgR0ZTMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT0KKworRHVyaW5nIHRoZSBsaWZldGltZSBvZiBhIEdGUzIgbW91bnQsIGEgbnVtYmVyIG9mIHVldmVudHMgYXJlIGdlbmVyYXRlZC4KK1RoaXMgZG9jdW1lbnQgZXhwbGFpbnMgd2hhdCB0aGUgZXZlbnRzIGFyZSBhbmQgd2hhdCB0aGV5IGFyZSB1c2VkCitmb3IgKGJ5IGdmc19jb250cm9sZCBpbiBnZnMyLXV0aWxzKS4KKworQSBsaXN0IG9mIEdGUzIgdWV2ZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gQURECisKK1RoZSBBREQgZXZlbnQgb2NjdXJzIGF0IG1vdW50IHRpbWUuIEl0IHdpbGwgYWx3YXlzIGJlIHRoZSBmaXJzdAordWV2ZW50IGdlbmVyYXRlZCBieSB0aGUgbmV3bHkgY3JlYXRlZCBmaWxlc3lzdGVtLiBJZiB0aGUgbW91bnQKK2lzIHN1Y2Nlc3NmdWwsIGFuIE9OTElORSB1ZXZlbnQgd2lsbCBmb2xsb3cuICBJZiBpdCBpcyBub3Qgc3VjY2Vzc2Z1bAordGhlbiBhIFJFTU9WRSB1ZXZlbnQgd2lsbCBmb2xsb3cuCisKK1RoZSBBREQgdWV2ZW50IGhhcyB0d28gZW52aXJvbm1lbnQgdmFyaWFibGVzOiBTUEVDVEFUT1I9WzB8MV0KK2FuZCBSRE9OTFk9WzB8MV0gdGhhdCBzcGVjaWZ5IHRoZSBzcGVjdGF0b3Igc3RhdHVzIChhIHJlYWQtb25seSBtb3VudAord2l0aCBubyBqb3VybmFsIGFzc2lnbmVkKSwgYW5kIHJlYWQtb25seSAod2l0aCBqb3VybmFsIGFzc2lnbmVkKSBzdGF0dXMKK29mIHRoZSBmaWxlc3lzdGVtIHJlc3BlY3RpdmVseS4KKworMi4gT05MSU5FCisKK1RoZSBPTkxJTkUgdWV2ZW50IGlzIGdlbmVyYXRlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgbW91bnQgb3IgcmVtb3VudC4gSXQKK2hhcyB0aGUgc2FtZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXMgdGhlIEFERCB1ZXZlbnQuIFRoZSBPTkxJTkUKK3VldmVudCwgYWxvbmcgd2l0aCB0aGUgdHdvIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3Igc3BlY3RhdG9yIGFuZAorUkRPTkxZIGFyZSBhIHJlbGF0aXZlbHkgcmVjZW50IGFkZGl0aW9uICgyLjYuMzItcmMrKSBhbmQgd2lsbCBub3QKK2JlIGdlbmVyYXRlZCBieSBvbGRlciBrZXJuZWxzLgorCiszLiBDSEFOR0UKKworVGhlIENIQU5HRSB1ZXZlbnQgaXMgdXNlZCBpbiB0d28gcGxhY2VzLiBPbmUgaXMgd2hlbiByZXBvcnRpbmcgdGhlCitzdWNjZXNzZnVsIG1vdW50IG9mIHRoZSBmaWxlc3lzdGVtIGJ5IHRoZSBmaXJzdCBub2RlIChGSVJTVE1PVU5UPURvbmUpLgorVGhpcyBpcyB1c2VkIGFzIGEgc2lnbmFsIGJ5IGdmc19jb250cm9sZCB0aGF0IGl0IGlzIHRoZW4gb2sgZm9yIG90aGVyCitub2RlcyBpbiB0aGUgY2x1c3RlciB0byBtb3VudCB0aGUgZmlsZXN5c3RlbS4KKworVGhlIG90aGVyIENIQU5HRSB1ZXZlbnQgaXMgdXNlZCB0byBpbmZvcm0gb2YgdGhlIGNvbXBsZXRpb24KK29mIGpvdXJuYWwgcmVjb3ZlcnkgZm9yIG9uZSBvZiB0aGUgZmlsZXN5c3RlbXMgam91cm5hbHMuIEl0IGhhcwordHdvIGVudmlyb25tZW50IHZhcmlhYmxlcywgSklEPSB3aGljaCBzcGVjaWZpZXMgdGhlIGpvdXJuYWwgaWQgd2hpY2gKK2hhcyBqdXN0IGJlZW4gcmVjb3ZlcmVkLCBhbmQgUkVDT1ZFUlk9W0RvbmV8RmFpbGVkXSB0byBpbmRpY2F0ZSB0aGUKK3N1Y2Nlc3MgKG9yIG90aGVyd2lzZSkgb2YgdGhlIG9wZXJhdGlvbi4gVGhlc2UgdWV2ZW50cyBhcmUgZ2VuZXJhdGVkCitmb3IgZXZlcnkgam91cm5hbCByZWNvdmVyZWQsIHdoZXRoZXIgaXQgaXMgZHVyaW5nIHRoZSBpbml0aWFsIG1vdW50Citwcm9jZXNzIG9yIGFzIHRoZSByZXN1bHQgb2YgZ2ZzX2NvbnRyb2xkIHJlcXVlc3RpbmcgYSBzcGVjaWZpYyBqb3VybmFsCityZWNvdmVyeSB2aWEgdGhlIC9zeXMvZnMvZ2ZzMi88ZnNuYW1lPi9sb2NrX21vZHVsZS9yZWNvdmVyeSBmaWxlLgorCitCZWNhdXNlIHRoZSBDSEFOR0UgdWV2ZW50IHdhcyB1c2VkIChpbiBlYXJseSB2ZXJzaW9ucyBvZiBnZnNfY29udHJvbGQpCit3aXRob3V0IGNoZWNraW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gZGlzY292ZXIgdGhlIHN0YXRlLCB3ZQorY2Fubm90IGFkZCBhbnkgbW9yZSBmdW5jdGlvbnMgdG8gaXQgd2l0aG91dCBydW5uaW5nIHRoZSByaXNrIG9mCitzb21lb25lIHVzaW5nIGFuIG9sZGVyIHZlcnNpb24gb2YgdGhlIHVzZXIgdG9vbHMgYW5kIGJyZWFraW5nIHRoZWlyCitjbHVzdGVyLiBGb3IgdGhpcyByZWFzb24gdGhlIE9OTElORSB1ZXZlbnQgd2FzIHVzZWQgd2hlbiBhZGRpbmcgYSBuZXcKK3VldmVudCBmb3IgYSBzdWNjZXNzZnVsIG1vdW50IG9yIHJlbW91bnQuCisKKzQuIE9GRkxJTkUKKworVGhlIE9GRkxJTkUgdWV2ZW50IGlzIG9ubHkgZ2VuZXJhdGVkIGR1ZSB0byBmaWxlc3lzdGVtIGVycm9ycyBhbmQgaXMgdXNlZAorYXMgcGFydCBvZiB0aGUgIndpdGhkcmF3IiBtZWNoYW5pc20uIEN1cnJlbnRseSB0aGlzIGRvZXNuJ3QgZ2l2ZSBhbnkKK2luZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIGVycm9yIGlzLCB3aGljaCBpcyBzb21ldGhpbmcgdGhhdCBuZWVkcyB0bworYmUgZml4ZWQuCisKKzUuIFJFTU9WRQorCitUaGUgUkVNT1ZFIHVldmVudCBpcyBnZW5lcmF0ZWQgYXQgdGhlIGVuZCBvZiBhbiB1bnN1Y2Nlc3NmdWwgbW91bnQKK29yIGF0IHRoZSBlbmQgb2YgYSB1bW91bnQgb2YgdGhlIGZpbGVzeXN0ZW0uIEFsbCBSRU1PVkUgdWV2ZW50cyB3aWxsCitoYXZlIGJlZW4gcHJlY2VlZGVkIGJ5IGF0IGxlYXN0IGFuIEFERCB1ZXZlbnQgZm9yIHRoZSBzYW1lIGZpbGV5c3RlbSwKK2FuZCB1bmxpa2UgdGhlIG90aGVyIHVldmVudHMgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGtlcm5lbCdzCitrb2JqZWN0IHN1YnN5c3RlbS4KKworCitJbmZvcm1hdGlvbiBjb21tb24gdG8gYWxsIEdGUzIgdWV2ZW50cyAodWV2ZW50IGVudmlyb25tZW50IHZhcmlhYmxlcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gTE9DS1RBQkxFPQorCitUaGUgTE9DS1RBQkxFIGlzIGEgc3RyaW5nLCBhcyBzdXBwbGllZCBvbiB0aGUgbW91bnQgY29tbWFuZAorbGluZSAobG9ja3RhYmxlPSkgb3IgdmlhIGZzdGFiLiBJdCBpcyB1c2VkIGFzIGEgZmlsZXN5c3RlbSBsYWJlbAorYXMgd2VsbCBhcyBwcm92aWRpbmcgdGhlIGluZm9ybWF0aW9uIGZvciBhIGxvY2tfZGxtIG1vdW50IHRvIGJlCithYmxlIHRvIGpvaW4gdGhlIGNsdXN0ZXIuCisKKzIuIExPQ0tQUk9UTz0KKworVGhlIExPQ0tQUk9UTyBpcyBhIHN0cmluZywgYW5kIGl0cyB2YWx1ZSBkZXBlbmRzIG9uIHdoYXQgaXMgc2V0CitvbiB0aGUgbW91bnQgY29tbWFuZCBsaW5lLCBvciB2aWEgZnN0YWIuIEl0IHdpbGwgYmUgZWl0aGVyCitsb2NrX25vbG9jayBvciBsb2NrX2RsbS4gSW4gdGhlIGZ1dHVyZSBvdGhlciBsb2NrIG1hbmFnZXJzCittYXkgYmUgc3VwcG9ydGVkLgorCiszLiBKT1VSTkFMSUQ9CisKK0lmIGEgam91cm5hbCBpcyBpbiB1c2UgYnkgdGhlIGZpbGVzeXN0ZW0gKGpvdXJuYWxzIGFyZSBub3QKK2Fzc2lnbmVkIGZvciBzcGVjdGF0b3IgbW91bnRzKSB0aGVuIHRoaXMgd2lsbCBnaXZlIHRoZQorbnVtZXJpYyBqb3VybmFsIGlkIGluIGFsbCBHRlMyIHVldmVudHMuCisKKzQuIFVVSUQ9CisKK1dpdGggcmVjZW50IHZlcnNpb25zIG9mIGdmczItdXRpbHMsIG1rZnMuZ2ZzMiB3cml0ZXMgYSBVVUlECitpbnRvIHRoZSBmaWxlc3lzdGVtIHN1cGVyYmxvY2suIElmIGl0IGV4aXN0cywgdGhpcyB3aWxsCitiZSBpbmNsdWRlZCBpbiBldmVyeSB1ZXZlbnQgcmVsYXRpbmcgdG8gdGhlIGZpbGVzeXN0ZW0uCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUwZjI2YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzLnR4dApAQCAtMCwwICsxLDk4IEBACisKK1RoZSBORlMgY2xpZW50Cis9PT09PT09PT09PT09PQorCitUaGUgTkZTIHZlcnNpb24gMiBwcm90b2NvbCB3YXMgZmlyc3QgZG9jdW1lbnRlZCBpbiBSRkMxMDk0IChNYXJjaCAxOTg5KS4KK1NpbmNlIHRoZW4gdHdvIG1vcmUgbWFqb3IgcmVsZWFzZXMgb2YgTkZTIGhhdmUgYmVlbiBwdWJsaXNoZWQsIHdpdGggTkZTdjMKK2JlaW5nIGRvY3VtZW50ZWQgaW4gUkZDMTgxMyAoSnVuZSAxOTk1KSwgYW5kIE5GU3Y0IGluIFJGQzM1MzAgKEFwcmlsCisyMDAzKS4KKworVGhlIExpbnV4IE5GUyBjbGllbnQgY3VycmVudGx5IHN1cHBvcnRzIGFsbCB0aGUgYWJvdmUgcHVibGlzaGVkIHZlcnNpb25zLAorYW5kIHdvcmsgaXMgaW4gcHJvZ3Jlc3Mgb24gYWRkaW5nIHN1cHBvcnQgZm9yIG1pbm9yIHZlcnNpb24gMSBvZiB0aGUgTkZTdjQKK3Byb3RvY29sLgorCitUaGUgcHVycG9zZSBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gb24gc29tZSBvZiB0aGUKK3VwY2FsbCBpbnRlcmZhY2VzIHRoYXQgYXJlIHVzZWQgaW4gb3JkZXIgdG8gcHJvdmlkZSB0aGUgTkZTIGNsaWVudCB3aXRoCitzb21lIG9mIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGl0IHJlcXVpcmVzIGluIG9yZGVyIHRvIGZ1bGx5IGNvbXBseSB3aXRoCit0aGUgTkZTIHNwZWMuCisKK1RoZSBETlMgcmVzb2x2ZXIKKz09PT09PT09PT09PT09PT0KKworTkZTdjQgYWxsb3dzIGZvciBvbmUgc2VydmVyIHRvIHJlZmVyIHRoZSBORlMgY2xpZW50IHRvIGRhdGEgdGhhdCBoYXMgYmVlbgorbWlncmF0ZWQgb250byBhbm90aGVyIHNlcnZlciBieSBtZWFucyBvZiB0aGUgc3BlY2lhbCAiZnNfbG9jYXRpb25zIgorYXR0cmlidXRlLiBTZWUKKwlodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTMwI3NlY3Rpb24tNgorYW5kCisJaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1uZnN2NC1yZWZlcnJhbHMtMDAKKworVGhlIGZzX2xvY2F0aW9ucyBpbmZvcm1hdGlvbiBjYW4gdGFrZSB0aGUgZm9ybSBvZiBlaXRoZXIgYW4gaXAgYWRkcmVzcyBhbmQKK2EgcGF0aCwgb3IgYSBETlMgaG9zdG5hbWUgYW5kIGEgcGF0aC4gVGhlIGxhdHRlciByZXF1aXJlcyB0aGUgTkZTIGNsaWVudCB0bworZG8gYSBETlMgbG9va3VwIGluIG9yZGVyIHRvIG1vdW50IHRoZSBuZXcgdm9sdW1lLCBhbmQgaGVuY2UgdGhlIG5lZWQgZm9yIGFuCit1cGNhbGwgdG8gYWxsb3cgdXNlcmxhbmQgdG8gcHJvdmlkZSB0aGlzIHNlcnZpY2UuCisKK0Fzc3VtaW5nIHRoYXQgdGhlIHVzZXIgaGFzIHRoZSAncnBjX3BpcGVmcycgZmlsZXN5c3RlbSBtb3VudGVkIGluIHRoZSB1c3VhbAorL3Zhci9saWIvbmZzL3JwY19waXBlZnMsIHRoZSB1cGNhbGwgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczoKKworICAgKDEpIFRoZSBwcm9jZXNzIGNoZWNrcyB0aGUgZG5zX3Jlc29sdmUgY2FjaGUgdG8gc2VlIGlmIGl0IGNvbnRhaW5zIGEKKyAgICAgICB2YWxpZCBlbnRyeS4gSWYgc28sIGl0IHJldHVybnMgdGhhdCBlbnRyeSBhbmQgZXhpdHMuCisKKyAgICgyKSBJZiBubyB2YWxpZCBlbnRyeSBleGlzdHMsIHRoZSBoZWxwZXIgc2NyaXB0ICcvc2Jpbi9uZnNfY2FjaGVfZ2V0ZW50JworICAgICAgIChtYXkgYmUgY2hhbmdlZCB1c2luZyB0aGUgJ25mcy5jYWNoZV9nZXRlbnQnIGtlcm5lbCBib290IHBhcmFtZXRlcikKKyAgICAgICBpcyBydW4sIHdpdGggdHdvIGFyZ3VtZW50czoKKwkJLSB0aGUgY2FjaGUgbmFtZSwgImRuc19yZXNvbHZlIgorCQktIHRoZSBob3N0bmFtZSB0byByZXNvbHZlCisKKyAgICgzKSBBZnRlciBsb29raW5nIHVwIHRoZSBjb3JyZXNwb25kaW5nIGlwIGFkZHJlc3MsIHRoZSBoZWxwZXIgc2NyaXB0CisgICAgICAgd3JpdGVzIHRoZSByZXN1bHQgaW50byB0aGUgcnBjX3BpcGVmcyBwc2V1ZG8tZmlsZQorICAgICAgICcvdmFyL2xpYi9uZnMvcnBjX3BpcGVmcy9jYWNoZS9kbnNfcmVzb2x2ZS9jaGFubmVsJworICAgICAgIGluIHRoZSBmb2xsb3dpbmcgKHRleHQpIGZvcm1hdDoKKworCQkiPGlwIGFkZHJlc3M+IDxob3N0bmFtZT4gPHR0bD5cbiIKKworICAgICAgIFdoZXJlIDxpcCBhZGRyZXNzPiBpcyBpbiB0aGUgdXN1YWwgSVB2NCAoMTIzLjQ1Ni43OC45MCkgb3IgSVB2NgorICAgICAgIChmZmVlOmRkY2M6YmJhYTo5OTg4Ojc3NjY6NTU0NDozMzIyOjExMDAsIGZmZWU6OjExMDAsIC4uLikgZm9ybWF0LgorICAgICAgIDxob3N0bmFtZT4gaXMgaWRlbnRpY2FsIHRvIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgdGhlIGhlbHBlcgorICAgICAgIHNjcmlwdCwgYW5kIDx0dGw+IGlzIHRoZSAndGltZSB0byBsaXZlJyBvZiB0aGlzIGNhY2hlIGVudHJ5IChpbgorICAgICAgIHVuaXRzIG9mIHNlY29uZHMpLgorCisgICAgICAgTm90ZTogSWYgPGlwIGFkZHJlc3M+IGlzIGludmFsaWQsIHNheSB0aGUgc3RyaW5nICIwIiwgdGhlbiBhIG5lZ2F0aXZlCisgICAgICAgZW50cnkgaXMgY3JlYXRlZCwgd2hpY2ggd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIHRyZWF0IHRoZSBob3N0bmFtZQorICAgICAgIGFzIGhhdmluZyBubyB2YWxpZCBETlMgdHJhbnNsYXRpb24uCisKKworCisKK0EgYmFzaWMgc2FtcGxlIC9zYmluL25mc19jYWNoZV9nZXRlbnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyEvYmluL2Jhc2gKKyMKK3R0bD02MDAKKyMKK2N1dD0vdXNyL2Jpbi9jdXQKK2dldGVudD0vdXNyL2Jpbi9nZXRlbnQKK3JwY19waXBlZnM9L3Zhci9saWIvbmZzL3JwY19waXBlZnMKKyMKK2RpZSgpCit7CisJZWNobyAiVXNhZ2U6ICQwIGNhY2hlX25hbWUgZW50cnlfbmFtZSIKKwlleGl0IDEKK30KKworWyAkIyAtbHQgMiBdICYmIGRpZQorY2FjaGVuYW1lPSIkMSIKK2NhY2hlX3BhdGg9JHtycGNfcGlwZWZzfS9jYWNoZS8ke2NhY2hlbmFtZX0vY2hhbm5lbAorCitjYXNlICIke2NhY2hlbmFtZX0iIGluCisJZG5zX3Jlc29sdmUpCisJCW5hbWU9IiQyIgorCQlyZXN1bHQ9IiQoJHtnZXRlbnR9IGhvc3RzICR7bmFtZX0gfCAke2N1dH0gLWYxIC1kXCApIgorCQlbIC16ICIke3Jlc3VsdH0iIF0gJiYgcmVzdWx0PSIwIgorCQk7OworCSopCisJCWRpZQorCQk7OworZXNhYworZWNobyAiJHtyZXN1bHR9ICR7bmFtZX0gJHt0dGx9IiA+JHtjYWNoZV9wYXRofQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NlcV9maWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2VxX2ZpbGUudHh0CmluZGV4IGI4NDM3NDMuLjBkMTVlYmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2VxX2ZpbGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2VxX2ZpbGUudHh0CkBAIC00Niw3ICs0Niw3IEBACiBmb2xsb3dpbmc6CiAKICAgICBkZCBpZj0vcHJvYy9zZXF1ZW5jZSBvZj1vdXQxIGNvdW50PTEKLSAgICBkZCBpZj0vcHJvYy9zZXF1ZW5jZSBza2lwPTEgb3V0PW91dDIgY291bnQ9MQorICAgIGRkIGlmPS9wcm9jL3NlcXVlbmNlIHNraXA9MSBvZj1vdXQyIGNvdW50PTEKIAogVGhlbiBjb25jYXRlbmF0ZSB0aGUgb3V0cHV0IGZpbGVzIG91dDEgYW5kIG91dDIgYW5kIGdldCB0aGUgcmlnaHQKIHJlc3VsdC4gWWVzLCBpdCBpcyBhIHRob3JvdWdobHkgdXNlbGVzcyBtb2R1bGUsIGJ1dCB0aGUgcG9pbnQgaXMgdG8gc2hvdwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0IGIvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZWIyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKQEAgLTAsMCArMSw5OSBAQAorVXNpbmcgZmxleGlibGUgYXJyYXlzIGluIHRoZSBrZXJuZWwKK0xhc3QgdXBkYXRlZCBmb3IgMi42LjMxCitKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgorCitMYXJnZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBjYW4gYmUgdW5yZWxpYWJsZSBpbiB0aGUgTGludXgga2VybmVsLgorS2VybmVsIHByb2dyYW1tZXJzIHdpbGwgc29tZXRpbWVzIHJlc3BvbmQgdG8gdGhpcyBwcm9ibGVtIGJ5IGFsbG9jYXRpbmcKK3BhZ2VzIHdpdGggdm1hbGxvYygpLiAgVGhpcyBzb2x1dGlvbiBub3QgaWRlYWwsIHRob3VnaC4gIE9uIDMyLWJpdCBzeXN0ZW1zLAorbWVtb3J5IGZyb20gdm1hbGxvYygpIG11c3QgYmUgbWFwcGVkIGludG8gYSByZWxhdGl2ZWx5IHNtYWxsIGFkZHJlc3Mgc3BhY2U7CitpdCdzIGVhc3kgdG8gcnVuIG91dC4gIE9uIFNNUCBzeXN0ZW1zLCB0aGUgcGFnZSB0YWJsZSBjaGFuZ2VzIHJlcXVpcmVkIGJ5Cit2bWFsbG9jKCkgYWxsb2NhdGlvbnMgY2FuIHJlcXVpcmUgZXhwZW5zaXZlIGNyb3NzLXByb2Nlc3NvciBpbnRlcnJ1cHRzIG9uCithbGwgQ1BVcy4gIEFuZCwgb24gYWxsIHN5c3RlbXMsIHVzZSBvZiBzcGFjZSBpbiB0aGUgdm1hbGxvYygpIHJhbmdlCitpbmNyZWFzZXMgcHJlc3N1cmUgb24gdGhlIHRyYW5zbGF0aW9uIGxvb2thc2lkZSBidWZmZXIgKFRMQiksIHJlZHVjaW5nIHRoZQorcGVyZm9ybWFuY2Ugb2YgdGhlIHN5c3RlbS4KKworSW4gbWFueSBjYXNlcywgdGhlIG5lZWQgZm9yIG1lbW9yeSBmcm9tIHZtYWxsb2MoKSBjYW4gYmUgZWxpbWluYXRlZCBieQorcGllY2luZyB0b2dldGhlciBhbiBhcnJheSBmcm9tIHNtYWxsZXIgcGFydHM7IHRoZSBmbGV4aWJsZSBhcnJheSBsaWJyYXJ5CitleGlzdHMgdG8gbWFrZSB0aGlzIHRhc2sgZWFzaWVyLgorCitBIGZsZXhpYmxlIGFycmF5IGhvbGRzIGFuIGFyYml0cmFyeSAod2l0aGluIGxpbWl0cykgbnVtYmVyIG9mIGZpeGVkLXNpemVkCitvYmplY3RzLCBhY2Nlc3NlZCB2aWEgYW4gaW50ZWdlciBpbmRleC4gIFNwYXJzZSBhcnJheXMgYXJlIGhhbmRsZWQKK3JlYXNvbmFibHkgd2VsbC4gIE9ubHkgc2luZ2xlLXBhZ2UgYWxsb2NhdGlvbnMgYXJlIG1hZGUsIHNvIG1lbW9yeQorYWxsb2NhdGlvbiBmYWlsdXJlcyBzaG91bGQgYmUgcmVsYXRpdmVseSByYXJlLiAgVGhlIGRvd24gc2lkZXMgYXJlIHRoYXQgdGhlCithcnJheXMgY2Fubm90IGJlIGluZGV4ZWQgZGlyZWN0bHksIGluZGl2aWR1YWwgb2JqZWN0IHNpemUgY2Fubm90IGV4Y2VlZCB0aGUKK3N5c3RlbSBwYWdlIHNpemUsIGFuZCBwdXR0aW5nIGRhdGEgaW50byBhIGZsZXhpYmxlIGFycmF5IHJlcXVpcmVzIGEgY29weQorb3BlcmF0aW9uLiAgSXQncyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IGZsZXhpYmxlIGFycmF5cyBkbyBubyBpbnRlcm5hbAorbG9ja2luZyBhdCBhbGw7IGlmIGNvbmN1cnJlbnQgYWNjZXNzIHRvIGFuIGFycmF5IGlzIHBvc3NpYmxlLCB0aGVuIHRoZQorY2FsbGVyIG11c3QgYXJyYW5nZSBmb3IgYXBwcm9wcmlhdGUgbXV0dWFsIGV4Y2x1c2lvbi4KKworVGhlIGNyZWF0aW9uIG9mIGEgZmxleGlibGUgYXJyYXkgaXMgZG9uZSB3aXRoOgorCisgICAgI2luY2x1ZGUgPGxpbnV4L2ZsZXhfYXJyYXkuaD4KKworICAgIHN0cnVjdCBmbGV4X2FycmF5ICpmbGV4X2FycmF5X2FsbG9jKGludCBlbGVtZW50X3NpemUsCisJCQkJCXVuc2lnbmVkIGludCB0b3RhbCwKKwkJCQkJZ2ZwX3QgZmxhZ3MpOworCitUaGUgaW5kaXZpZHVhbCBvYmplY3Qgc2l6ZSBpcyBwcm92aWRlZCBieSBlbGVtZW50X3NpemUsIHdoaWxlIHRvdGFsIGlzIHRoZQorbWF4aW11bSBudW1iZXIgb2Ygb2JqZWN0cyB3aGljaCBjYW4gYmUgc3RvcmVkIGluIHRoZSBhcnJheS4gIFRoZSBmbGFncworYXJndW1lbnQgaXMgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBpbnRlcm5hbCBtZW1vcnkgYWxsb2NhdGlvbiBjYWxscy4gIFdpdGgKK3RoZSBjdXJyZW50IGNvZGUsIHVzaW5nIGZsYWdzIHRvIGFzayBmb3IgaGlnaCBtZW1vcnkgaXMgbGlrZWx5IHRvIGxlYWQgdG8KK25vdGFibHkgdW5wbGVhc2FudCBzaWRlIGVmZmVjdHMuCisKK1N0b3JpbmcgZGF0YSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaXMgYWNjb21wbGlzaGVkIHdpdGggYSBjYWxsIHRvOgorCisgICAgaW50IGZsZXhfYXJyYXlfcHV0KHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIsCisgICAgCQkgICAgICAgdm9pZCAqc3JjLCBnZnBfdCBmbGFncyk7CisKK1RoaXMgY2FsbCB3aWxsIGNvcHkgdGhlIGRhdGEgZnJvbSBzcmMgaW50byB0aGUgYXJyYXksIGluIHRoZSBwb3NpdGlvbgoraW5kaWNhdGVkIGJ5IGVsZW1lbnRfbnIgKHdoaWNoIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBtYXhpbXVtIHNwZWNpZmllZCB3aGVuCit0aGUgYXJyYXkgd2FzIGNyZWF0ZWQpLiAgSWYgYW55IG1lbW9yeSBhbGxvY2F0aW9ucyBtdXN0IGJlIHBlcmZvcm1lZCwgZmxhZ3MKK3dpbGwgYmUgdXNlZC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgemVybyBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKK290aGVyd2lzZS4KKworVGhlcmUgbWlnaHQgcG9zc2libHkgYmUgYSBuZWVkIHRvIHN0b3JlIGRhdGEgaW50byBhIGZsZXhpYmxlIGFycmF5IHdoaWxlCitydW5uaW5nIGluIHNvbWUgc29ydCBvZiBhdG9taWMgY29udGV4dDsgaW4gdGhpcyBzaXR1YXRpb24sIHNsZWVwaW5nIGluIHRoZQorbWVtb3J5IGFsbG9jYXRvciB3b3VsZCBiZSBhIGJhZCB0aGluZy4gIFRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgdXNpbmcKK0dGUF9BVE9NSUMgZm9yIHRoZSBmbGFncyB2YWx1ZSwgYnV0LCBvZnRlbiwgdGhlcmUgaXMgYSBiZXR0ZXIgd2F5LiAgVGhlCit0cmljayBpcyB0byBlbnN1cmUgdGhhdCBhbnkgbmVlZGVkIG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgZG9uZSBiZWZvcmUKK2VudGVyaW5nIGF0b21pYyBjb250ZXh0LCB1c2luZzoKKworICAgIGludCBmbGV4X2FycmF5X3ByZWFsbG9jKHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSwgdW5zaWduZWQgaW50IHN0YXJ0LAorCQkJICAgIHVuc2lnbmVkIGludCBlbmQsIGdmcF90IGZsYWdzKTsKKworVGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IG1lbW9yeSBmb3IgdGhlIGVsZW1lbnRzIGluZGV4ZWQgaW4gdGhlIHJhbmdlCitkZWZpbmVkIGJ5IHN0YXJ0IGFuZCBlbmQgaGFzIGJlZW4gYWxsb2NhdGVkLiAgVGhlcmVhZnRlciwgYQorZmxleF9hcnJheV9wdXQoKSBjYWxsIG9uIGFuIGVsZW1lbnQgaW4gdGhhdCByYW5nZSBpcyBndWFyYW50ZWVkIG5vdCB0bworYmxvY2suCisKK0dldHRpbmcgZGF0YSBiYWNrIG91dCBvZiB0aGUgYXJyYXkgaXMgZG9uZSB3aXRoOgorCisgICAgdm9pZCAqZmxleF9hcnJheV9nZXQoc3RydWN0IGZsZXhfYXJyYXkgKmZhLCB1bnNpZ25lZCBpbnQgZWxlbWVudF9ucik7CisKK1RoZSByZXR1cm4gdmFsdWUgaXMgYSBwb2ludGVyIHRvIHRoZSBkYXRhIGVsZW1lbnQsIG9yIE5VTEwgaWYgdGhhdAorcGFydGljdWxhciBlbGVtZW50IGhhcyBuZXZlciBiZWVuIGFsbG9jYXRlZC4KKworTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGdldCBiYWNrIGEgdmFsaWQgcG9pbnRlciBmb3IgYW4gZWxlbWVudCB3aGljaAoraGFzIG5ldmVyIGJlZW4gc3RvcmVkIGluIHRoZSBhcnJheS4gIE1lbW9yeSBmb3IgYXJyYXkgZWxlbWVudHMgaXMgYWxsb2NhdGVkCitvbmUgcGFnZSBhdCBhIHRpbWU7IGEgc2luZ2xlIGFsbG9jYXRpb24gY291bGQgcHJvdmlkZSBtZW1vcnkgZm9yIHNldmVyYWwKK2FkamFjZW50IGVsZW1lbnRzLiAgVGhlIGZsZXhpYmxlIGFycmF5IGNvZGUgZG9lcyBub3Qga25vdyBpZiBhIHNwZWNpZmljCitlbGVtZW50IGhhcyBiZWVuIHdyaXR0ZW47IGl0IG9ubHkga25vd3MgaWYgdGhlIGFzc29jaWF0ZWQgbWVtb3J5IGlzCitwcmVzZW50LiAgU28gYSBmbGV4X2FycmF5X2dldCgpIGNhbGwgb24gYW4gZWxlbWVudCB3aGljaCB3YXMgbmV2ZXIgc3RvcmVkCitpbiB0aGUgYXJyYXkgaGFzIHRoZSBwb3RlbnRpYWwgdG8gcmV0dXJuIGEgcG9pbnRlciB0byByYW5kb20gZGF0YS4gIElmIHRoZQorY2FsbGVyIGRvZXMgbm90IGhhdmUgYSBzZXBhcmF0ZSB3YXkgdG8ga25vdyB3aGljaCBlbGVtZW50cyB3ZXJlIGFjdHVhbGx5CitzdG9yZWQsIGl0IG1pZ2h0IGJlIHdpc2UsIGF0IGxlYXN0LCB0byBhZGQgR0ZQX1pFUk8gdG8gdGhlIGZsYWdzIGFyZ3VtZW50Cit0byBlbnN1cmUgdGhhdCBhbGwgZWxlbWVudHMgYXJlIHplcm9lZC4KKworVGhlcmUgaXMgbm8gd2F5IHRvIHJlbW92ZSBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIGFycmF5LiAgSXQgaXMgcG9zc2libGUsCit0aG91Z2gsIHRvIHJlbW92ZSBhbGwgZWxlbWVudHMgd2l0aCBhIGNhbGwgdG86CisKKyAgICB2b2lkIGZsZXhfYXJyYXlfZnJlZV9wYXJ0cyhzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXkpOworCitUaGlzIGNhbGwgZnJlZXMgYWxsIGVsZW1lbnRzLCBidXQgbGVhdmVzIHRoZSBhcnJheSBpdHNlbGYgaW4gcGxhY2UuCitGcmVlaW5nIHRoZSBlbnRpcmUgYXJyYXkgaXMgZG9uZSB3aXRoOgorCisgICAgdm9pZCBmbGV4X2FycmF5X2ZyZWUoc3RydWN0IGZsZXhfYXJyYXkgKmFycmF5KTsKKworQXMgb2YgdGhpcyB3cml0aW5nLCB0aGVyZSBhcmUgbm8gdXNlcnMgb2YgZmxleGlibGUgYXJyYXlzIGluIHRoZSBtYWlubGluZQora2VybmVsLiAgVGhlIGZ1bmN0aW9ucyBkZXNjcmliZWQgaGVyZSBhcmUgYWxzbyBub3QgZXhwb3J0ZWQgdG8gbW9kdWxlczsKK3RoYXQgd2lsbCBwcm9iYWJseSBiZSBmaXhlZCB3aGVuIHNvbWVib2R5IGNvbWVzIHVwIHdpdGggYSBuZWVkIGZvciBpdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvc2VudGVsaWMudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9zZW50ZWxpYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcxNjBhMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvc2VudGVsaWMudHh0CkBAIC0wLDAgKzEsNDc1IEBACitDb3B5cmlnaHQgKEMpIDIwMDItMjAwOCBTZW50ZWxpYyBDb3Jwb3JhdGlvbi4KK0xhc3QgdXBkYXRlOiBPY3QtMzEtMjAwOAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogRmluZ2VyIFNlbnNpbmcgUGFkIEludGVsbGltb3VzZSBNb2RlKHNjcm9sbGluZyB3aGVlbCwgNHRoIGFuZCA1dGggYnV0dG9ucykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQSkgTVNJRCA0OiBTY3JvbGxpbmcgd2hlZWwgbW9kZSBwbHVzIEZvcndhcmQgcGFnZSg0dGggYnV0dG9uKSBhbmQgQmFja3dhcmQKKyAgIHBhZ2UgKDV0aCBidXR0b24pCitAMS4gU2V0IHNhbXBsZSByYXRlIHRvIDIwMDsKK0AyLiBTZXQgc2FtcGxlIHJhdGUgdG8gMjAwOworQDMuIFNldCBzYW1wbGUgcmF0ZSB0byA4MDsKK0A0LiBJc3N1aW5nIHRoZSAiR2V0IGRldmljZSBJRCIgY29tbWFuZCAoMHhGMikgYW5kIHdhaXRzIGZvciB0aGUgcmVzcG9uc2U7CitANS4gRlNQIHdpbGwgcmVzcG9uZCAweDA0LgorCitQYWNrZXQgMQorICAgQml0IDcgNiA1IDQgMyAyIDEgMCAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAKK0JZVEUgIHwtLS0tLS0tLS0tLS0tLS18QllURSB8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfAorICAxICAgfFl8WHx5fHh8MXxNfFJ8THwgIDIgIHxYfFh8WHxYfFh8WHxYfFh8ICAzIHxZfFl8WXxZfFl8WXxZfFl8ICA0IHwgfCB8QnxGfFd8V3xXfFd8CisgICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwKKworQnl0ZSAxOiBCaXQ3ID0+IFkgb3ZlcmZsb3cKKyAgICAgICAgQml0NiA9PiBYIG92ZXJmbG93CisgICAgICAgIEJpdDUgPT4gWSBzaWduIGJpdAorICAgICAgICBCaXQ0ID0+IFggc2lnbiBiaXQKKyAgICAgICAgQml0MyA9PiAxCisgICAgICAgIEJpdDIgPT4gTWlkZGxlIEJ1dHRvbiwgMSBpcyBwcmVzc2VkLCAwIGlzIG5vdCBwcmVzc2VkLgorICAgICAgICBCaXQxID0+IFJpZ2h0IEJ1dHRvbiwgMSBpcyBwcmVzc2VkLCAwIGlzIG5vdCBwcmVzc2VkLgorICAgICAgICBCaXQwID0+IExlZnQgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCitCeXRlIDI6IFggTW92ZW1lbnQoOS1iaXQgMidzIGNvbXBsZW1lbnQgaW50ZWdlcnMpCitCeXRlIDM6IFkgTW92ZW1lbnQoOS1iaXQgMidzIGNvbXBsZW1lbnQgaW50ZWdlcnMpCitCeXRlIDQ6IEJpdDN+Qml0MCA9PiB0aGUgc2Nyb2xsaW5nIHdoZWVsJ3MgbW92ZW1lbnQgc2luY2UgdGhlIGxhc3QgZGF0YSByZXBvcnQuCisgICAgICAgICAgICAgICAgICAgICB2YWxpZCB2YWx1ZXMsIC04IH4gKzcKKyAgICAgICAgQml0NCA9PiAxID0gNHRoIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkLCBGb3J3YXJkIG9uZSBwYWdlLgorICAgICAgICAgICAgICAgIDAgPSA0dGggbW91c2UgYnV0dG9uIGlzIG5vdCBwcmVzc2VkLgorICAgICAgICBCaXQ1ID0+IDEgPSA1dGggbW91c2UgYnV0dG9uIGlzIHByZXNzZWQsIEJhY2t3YXJkIG9uZSBwYWdlLgorICAgICAgICAgICAgICAgIDAgPSA1dGggbW91c2UgYnV0dG9uIGlzIG5vdCBwcmVzc2VkLgorCitCKSBNU0lEIDY6IEhvcml6b250YWwgYW5kIFZlcnRpY2FsIHNjcm9sbGluZy4KK0AgU2V0IGJpdCAxIGluIHJlZ2lzdGVyIDB4NDAgdG8gMQorCisjIEZTUCByZXBsYWNlcyBzY3JvbGxpbmcgd2hlZWwncyBtb3ZlbWVudCBhcyA0IGJpdHMgdG8gc2hvdyBob3Jpem9udGFsIGFuZAorICB2ZXJ0aWNhbCBzY3JvbGxpbmcuCisKK1BhY2tldCAxCisgICBCaXQgNyA2IDUgNCAzIDIgMSAwICAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMAorQllURSAgfC0tLS0tLS0tLS0tLS0tLXxCWVRFIHwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18CisgIDEgICB8WXxYfHl8eHwxfE18UnxMfCAgMiAgfFh8WHxYfFh8WHxYfFh8WHwgIDMgfFl8WXxZfFl8WXxZfFl8WXwgIDQgfCB8IHxCfEZ8bHxyfHV8ZHwKKyAgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfAorCitCeXRlIDE6IEJpdDcgPT4gWSBvdmVyZmxvdworICAgICAgICBCaXQ2ID0+IFggb3ZlcmZsb3cKKyAgICAgICAgQml0NSA9PiBZIHNpZ24gYml0CisgICAgICAgIEJpdDQgPT4gWCBzaWduIGJpdAorICAgICAgICBCaXQzID0+IDEKKyAgICAgICAgQml0MiA9PiBNaWRkbGUgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDEgPT4gUmlnaHQgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDAgPT4gTGVmdCBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KK0J5dGUgMjogWCBNb3ZlbWVudCg5LWJpdCAyJ3MgY29tcGxlbWVudCBpbnRlZ2VycykKK0J5dGUgMzogWSBNb3ZlbWVudCg5LWJpdCAyJ3MgY29tcGxlbWVudCBpbnRlZ2VycykKK0J5dGUgNDogQml0MCA9PiB0aGUgVmVydGljYWwgc2Nyb2xsaW5nIG1vdmVtZW50IGRvd253YXJkLgorCUJpdDEgPT4gdGhlIFZlcnRpY2FsIHNjcm9sbGluZyBtb3ZlbWVudCB1cHdhcmQuCisJQml0MiA9PiB0aGUgVmVydGljYWwgc2Nyb2xsaW5nIG1vdmVtZW50IHJpZ2h0d2FyZC4KKwlCaXQzID0+IHRoZSBWZXJ0aWNhbCBzY3JvbGxpbmcgbW92ZW1lbnQgbGVmdHdhcmQuCisgICAgICAgIEJpdDQgPT4gMSA9IDR0aCBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCwgRm9yd2FyZCBvbmUgcGFnZS4KKyAgICAgICAgICAgICAgICAwID0gNHRoIG1vdXNlIGJ1dHRvbiBpcyBub3QgcHJlc3NlZC4KKyAgICAgICAgQml0NSA9PiAxID0gNXRoIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkLCBCYWNrd2FyZCBvbmUgcGFnZS4KKyAgICAgICAgICAgICAgICAwID0gNXRoIG1vdXNlIGJ1dHRvbiBpcyBub3QgcHJlc3NlZC4KKworQykgTVNJRCA3OgorIyBGU1AgdXNlcyAyIHBhY2tldHMoOCBCeXRlcykgZGF0YSB0byByZXByZXNlbnQgQWJzb2x1dGUgUG9zaXRpb24KKyAgc28gd2UgaGF2ZSBQQUNLRVQgTlVNQkVSIHRvIGlkZW50aWZ5IHBhY2tldHMuCisgIElmIFBBQ0tFVCBOVU1CRVIgaXMgMCwgdGhlIHBhY2tldCBpcyBQYWNrZXQgMS4KKyAgSWYgUEFDS0VUIE5VTUJFUiBpcyAxLCB0aGUgcGFja2V0IGlzIFBhY2tldCAyLgorICBQbGVhc2UgY291bnQgdGhpcyBudW1iZXIgaW4gcHJvZ3JhbS4KKworIyBNU0lENiBzcGVjaWFsIHBhY2tldCB3aWxsIGJlIGVuYWJsZSBhdCB0aGUgc2FtZSB0aW1lIHdoZW4gZW5hYmxlIE1TSUQgNy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqIEFic29sdXRlIHBvc2l0aW9uIGZvciBTVEwzODg2LUcwLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitAIFNldCBiaXQgMiBvciAzIGluIHJlZ2lzdGVyIDB4NDAgdG8gMQorQCBTZXQgYml0IDYgaW4gcmVnaXN0ZXIgMHg0MCB0byAxCisKK1BhY2tldCAxIChBQlNPTFVURSBQT1NJVElPTikKKyAgIEJpdCA3IDYgNSA0IDMgMiAxIDAgICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwCitCWVRFICB8LS0tLS0tLS0tLS0tLS0tfEJZVEUgfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXwKKyAgMSAgIHwwfDF8VnwxfDF8TXxSfEx8ICAyICB8WHxYfFh8WHxYfFh8WHxYfCAgMyB8WXxZfFl8WXxZfFl8WXxZfCAgNCB8cnxsfGR8dXxYfFh8WXxZfAorICAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18CisKK0J5dGUgMTogQml0N35CaXQ2ID0+IDAwLCBOb3JtYWwgZGF0YSBwYWNrZXQKKyAgICAgICAgICAgICAgICAgID0+IDAxLCBBYnNvbHV0ZSBjb29yZGluYXRpb24gcGFja2V0CisgICAgICAgICAgICAgICAgICA9PiAxMCwgTm90aWZ5IHBhY2tldAorICAgICAgICBCaXQ1ID0+IHZhbGlkIGJpdAorICAgICAgICBCaXQ0ID0+IDEKKyAgICAgICAgQml0MyA9PiAxCisgICAgICAgIEJpdDIgPT4gTWlkZGxlIEJ1dHRvbiwgMSBpcyBwcmVzc2VkLCAwIGlzIG5vdCBwcmVzc2VkLgorICAgICAgICBCaXQxID0+IFJpZ2h0IEJ1dHRvbiwgMSBpcyBwcmVzc2VkLCAwIGlzIG5vdCBwcmVzc2VkLgorICAgICAgICBCaXQwID0+IExlZnQgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCitCeXRlIDI6IFggY29vcmRpbmF0ZSAoeHBvc1s5OjJdKQorQnl0ZSAzOiBZIGNvb3JkaW5hdGUgKHlwb3NbOToyXSkKK0J5dGUgNDogQml0MX5CaXQwID0+IFkgY29vcmRpbmF0ZSAoeHBvc1sxOjBdKQorICAgICAgICBCaXQzfkJpdDIgPT4gWCBjb29yZGluYXRlICh5cG9zWzE6MF0pCisgICAgICAgIEJpdDQgPT4gc2Nyb2xsIHVwCisgICAgICAgIEJpdDUgPT4gc2Nyb2xsIGRvd24KKyAgICAgICAgQml0NiA9PiBzY3JvbGwgbGVmdAorICAgICAgICBCaXQ3ID0+IHNjcm9sbCByaWdodAorCitOb3RpZnkgUGFja2V0IGZvciBHMAorICAgQml0IDcgNiA1IDQgMyAyIDEgMCAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAKK0JZVEUgIHwtLS0tLS0tLS0tLS0tLS18QllURSB8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfAorICAxICAgfDF8MHwwfDF8MXxNfFJ8THwgIDIgIHxDfEN8Q3xDfEN8Q3xDfEN8ICAzIHxNfE18TXxNfE18TXxNfE18ICA0IHwwfDB8MHwwfDB8MHwwfDB8CisgICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwKKworQnl0ZSAxOiBCaXQ3fkJpdDYgPT4gMDAsIE5vcm1hbCBkYXRhIHBhY2tldAorICAgICAgICAgICAgICAgICAgPT4gMDEsIEFic29sdXRlIGNvb3JkaW5hdGlvbiBwYWNrZXQKKyAgICAgICAgICAgICAgICAgID0+IDEwLCBOb3RpZnkgcGFja2V0CisgICAgICAgIEJpdDUgPT4gMAorICAgICAgICBCaXQ0ID0+IDEKKyAgICAgICAgQml0MyA9PiAxCisgICAgICAgIEJpdDIgPT4gTWlkZGxlIEJ1dHRvbiwgMSBpcyBwcmVzc2VkLCAwIGlzIG5vdCBwcmVzc2VkLgorICAgICAgICBCaXQxID0+IFJpZ2h0IEJ1dHRvbiwgMSBpcyBwcmVzc2VkLCAwIGlzIG5vdCBwcmVzc2VkLgorICAgICAgICBCaXQwID0+IExlZnQgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCitCeXRlIDI6IE1lc3NhZ2UgVHlwZSA9PiAweDVBIChFbmFibGUvRGlzYWJsZSBzdGF0dXMgcGFja2V0KQorICAgICAgICBNb2RlIFR5cGUgPT4gMHhBNSAoTm9ybWFsL0ljb24gbW9kZSBzdGF0dXMpCitCeXRlIDM6IE1lc3NhZ2UgVHlwZSA9PiAweDAwIChEaXNhYmxlZCkKKyAgICAgICAgICAgICAgICAgICAgID0+IDB4MDEgKEVuYWJsZWQpCisgICAgICAgIE1vZGUgVHlwZSAgICA9PiAweDAwIChOb3JtYWwpCisgICAgICAgICAgICAgICAgICAgICA9PiAweDAxIChJY29uKQorQnl0ZSA0OiBCaXQ3fkJpdDAgPT4gRG9uJ3QgQ2FyZQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogQWJzb2x1dGUgcG9zaXRpb24gZm9yIFNUTDM4ODgtQTAuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1BhY2tldCAxIChBQlNPTFVURSBQT1NJVElPTikKKyAgIEJpdCA3IDYgNSA0IDMgMiAxIDAgICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwCitCWVRFICB8LS0tLS0tLS0tLS0tLS0tfEJZVEUgfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXwKKyAgMSAgIHwwfDF8VnxBfDF8THwwfDF8ICAyICB8WHxYfFh8WHxYfFh8WHxYfCAgMyB8WXxZfFl8WXxZfFl8WXxZfCAgNCB8eHx4fHl8eXxYfFh8WXxZfAorICAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18CisKK0J5dGUgMTogQml0N35CaXQ2ID0+IDAwLCBOb3JtYWwgZGF0YSBwYWNrZXQKKyAgICAgICAgICAgICAgICAgID0+IDAxLCBBYnNvbHV0ZSBjb29yZGluYXRpb24gcGFja2V0CisgICAgICAgICAgICAgICAgICA9PiAxMCwgTm90aWZ5IHBhY2tldAorICAgICAgICBCaXQ1ID0+IFZhbGlkIGJpdCwgMCBtZWFucyB0aGF0IHRoZSBjb29yZGluYXRlIGlzIGludmFsaWQgb3IgZmluZ2VyIHVwLgorICAgICAgICAgICAgICAgIFdoZW4gYm90aCBmaW5nZXJzIGFyZSB1cCwgdGhlIGxhc3QgdHdvIHJlcG9ydHMgaGF2ZSB6ZXJvIHZhbGlkCisgICAgICAgICAgICAgICAgYml0LgorICAgICAgICBCaXQ0ID0+IGFyYworICAgICAgICBCaXQzID0+IDEKKyAgICAgICAgQml0MiA9PiBMZWZ0IEJ1dHRvbiwgMSBpcyBwcmVzc2VkLCAwIGlzIHJlbGVhc2VkLgorICAgICAgICBCaXQxID0+IDAKKyAgICAgICAgQml0MCA9PiAxCitCeXRlIDI6IFggY29vcmRpbmF0ZSAoeHBvc1s5OjJdKQorQnl0ZSAzOiBZIGNvb3JkaW5hdGUgKHlwb3NbOToyXSkKK0J5dGUgNDogQml0MX5CaXQwID0+IFkgY29vcmRpbmF0ZSAoeHBvc1sxOjBdKQorICAgICAgICBCaXQzfkJpdDIgPT4gWCBjb29yZGluYXRlICh5cG9zWzE6MF0pCisgICAgICAgIEJpdDV+Qml0NCA9PiB5MV9nCisgICAgICAgIEJpdDd+Qml0NiA9PiB4MV9nCisKK1BhY2tldCAyIChBQlNPTFVURSBQT1NJVElPTikKKyAgIEJpdCA3IDYgNSA0IDMgMiAxIDAgICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwCitCWVRFICB8LS0tLS0tLS0tLS0tLS0tfEJZVEUgfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXwKKyAgMSAgIHwwfDF8VnxBfDF8UnwxfDB8ICAyICB8WHxYfFh8WHxYfFh8WHxYfCAgMyB8WXxZfFl8WXxZfFl8WXxZfCAgNCB8eHx4fHl8eXxYfFh8WXxZfAorICAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18CisKK0J5dGUgMTogQml0N35CaXQ2ID0+IDAwLCBOb3JtYWwgZGF0YSBwYWNrZXQKKyAgICAgICAgICAgICAgICAgID0+IDAxLCBBYnNvbHV0ZSBjb29yZGluYXRlcyBwYWNrZXQKKyAgICAgICAgICAgICAgICAgID0+IDEwLCBOb3RpZnkgcGFja2V0CisgICAgICAgIEJpdDUgPT4gVmFsaWQgYml0LCAwIG1lYW5zIHRoYXQgdGhlIGNvb3JkaW5hdGUgaXMgaW52YWxpZCBvciBmaW5nZXIgdXAuCisgICAgICAgICAgICAgICAgV2hlbiBib3RoIGZpbmdlcnMgYXJlIHVwLCB0aGUgbGFzdCB0d28gcmVwb3J0cyBoYXZlIHplcm8gdmFsaWQKKyAgICAgICAgICAgICAgICBiaXQuCisgICAgICAgIEJpdDQgPT4gYXJjCisgICAgICAgIEJpdDMgPT4gMQorICAgICAgICBCaXQyID0+IFJpZ2h0IEJ1dHRvbiwgMSBpcyBwcmVzc2VkLCAwIGlzIHJlbGVhc2VkLgorICAgICAgICBCaXQxID0+IDEKKyAgICAgICAgQml0MCA9PiAwCitCeXRlIDI6IFggY29vcmRpbmF0ZSAoeHBvc1s5OjJdKQorQnl0ZSAzOiBZIGNvb3JkaW5hdGUgKHlwb3NbOToyXSkKK0J5dGUgNDogQml0MX5CaXQwID0+IFkgY29vcmRpbmF0ZSAoeHBvc1sxOjBdKQorICAgICAgICBCaXQzfkJpdDIgPT4gWCBjb29yZGluYXRlICh5cG9zWzE6MF0pCisgICAgICAgIEJpdDV+Qml0NCA9PiB5Ml9nCisgICAgICAgIEJpdDd+Qml0NiA9PiB4Ml9nCisKK05vdGlmeSBQYWNrZXQgZm9yIFNUTDM4ODgtQTAKKyAgIEJpdCA3IDYgNSA0IDMgMiAxIDAgICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwCitCWVRFICB8LS0tLS0tLS0tLS0tLS0tfEJZVEUgfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXwKKyAgMSAgIHwxfDB8MXxQfDF8TXxSfEx8ICAyICB8Q3xDfEN8Q3xDfEN8Q3xDfCAgMyB8MHwwfEZ8RnwwfDB8MHxpfCAgNCB8cnxsfGR8dXwwfDB8MHwwfAorICAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18CisKK0J5dGUgMTogQml0N35CaXQ2ID0+IDAwLCBOb3JtYWwgZGF0YSBwYWNrZXQKKyAgICAgICAgICAgICAgICAgID0+IDAxLCBBYnNvbHV0ZSBjb29yZGluYXRpb24gcGFja2V0CisgICAgICAgICAgICAgICAgICA9PiAxMCwgTm90aWZ5IHBhY2tldAorICAgICAgICBCaXQ1ID0+IDEKKyAgICAgICAgQml0NCA9PiB3aGVuIGluIGFic29sdXRlIGNvb3JkaW5hdGVzIG1vZGUgKHZhbGlkIHdoZW4gRU5fUEtUX0dPIGlzIDEpOgorICAgICAgICAgICAgICAgIDA6IGxlZnQgYnV0dG9uIGlzIGdlbmVyYXRlZCBieSB0aGUgb24tcGFkIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAxOiBsZWZ0IGJ1dHRvbiBpcyBnZW5lcmF0ZWQgYnkgdGhlIGV4dGVybmFsIGJ1dHRvbgorICAgICAgICBCaXQzID0+IDEKKyAgICAgICAgQml0MiA9PiBNaWRkbGUgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDEgPT4gUmlnaHQgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDAgPT4gTGVmdCBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KK0J5dGUgMjogTWVzc2FnZSBUeXBlID0+IDB4QjcgKE11bHRpIEZpbmdlciwgTXVsdGkgQ29vcmRpbmF0ZSBtb2RlKQorQnl0ZSAzOiBCaXQ3fkJpdDYgPT4gRG9uJ3QgY2FyZQorICAgICAgICBCaXQ1fkJpdDQgPT4gTnVtYmVyIG9mIGZpbmdlcnMKKyAgICAgICAgQml0M35CaXQxID0+IFJlc2VydmVkCisgICAgICAgIEJpdDAgPT4gMTogZW50ZXIgZ2VzdHVyZSBtb2RlOyAwOiBsZWF2aW5nIGdlc3R1cmUgbW9kZQorQnl0ZSA0OiBCaXQ3ID0+IHNjcm9sbCByaWdodCBidXR0b24KKyAgICAgICAgQml0NiA9PiBzY3JvbGwgbGVmdCBidXR0b24KKyAgICAgICAgQml0NSA9PiBzY3JvbGwgZG93biBidXR0b24KKyAgICAgICAgQml0NCA9PiBzY3JvbGwgdXAgYnV0dG9uCisgICAgICAgICAgICAqIE5vdGUgdGhhdCBpZiBnZXN0dXJlIGFuZCBhZGRpdGlvbmFsIGJ1dHRvbiAoQml0NH5CaXQ3KQorCSAgICAgIGhhcHBlbiBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgYnV0dG9uIGluZm9ybWF0aW9uIHdpbGwgbm90CisJICAgICAgYmUgc2VudC4KKyAgICAgICAgQml0M35CaXQwID0+IFJlc2VydmVkCisKK1NhbXBsZSBzZXF1ZW5jZSBvZiBNdWx0aS1maW5nZXIsIE11bHRpLWNvb3JkaW5hdGUgbW9kZToKKworCW5vdGlmeSBwYWNrZXQgKHZhbGlkIGJpdCA9PSAxKSwgYWJzIHBrdCAxLCBhYnMgcGt0IDIsIGFicyBwa3QgMSwKKwlhYnMgcGt0IDIsIC4uLiwgbm90aWZ5IHBhY2tldCh2YWxpZCBiaXQgPT0gMCkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqIEZTUCBFbmFibGUvRGlzYWJsZSBwYWNrZXQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgQml0IDcgNiA1IDQgMyAyIDEgMCAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAKK0JZVEUgIHwtLS0tLS0tLS0tLS0tLS18QllURSB8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfAorICAxICAgfFl8WHwwfDB8MXxNfFJ8THwgIDIgIHwwfDF8MHwxfDF8MHwxfEV8ICAzIHwgfCB8IHwgfCB8IHwgfCB8ICA0IHwgfCB8IHwgfCB8IHwgfCB8CisgICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwKKworRlNQIHdpbGwgc2VuZCBvdXQgZW5hYmxlL2Rpc2FibGUgcGFja2V0IHdoZW4gRlNQIHJlY2VpdmUgUFMvMiBlbmFibGUvZGlzYWJsZQorY29tbWFuZC4gSG9zdCB3aWxsIHJlY2VpdmUgdGhlIHBhY2tldCB3aGljaCBNaWRkbGUsIFJpZ2h0LCBMZWZ0IGJ1dHRvbiB3aWxsCitiZSBzZXQuIFRoZSBwYWNrZXQgb25seSB1c2UgYnl0ZSAwIGFuZCBieXRlIDEgYXMgYSBwYXR0ZXJuIG9mIG9yaWdpbmFsIHBhY2tldC4KK0lnbm9yZSB0aGUgb3RoZXIgYnl0ZXMgb2YgdGhlIHBhY2tldC4KKworQnl0ZSAxOiBCaXQ3ID0+IDAsIFkgb3ZlcmZsb3cKKyAgICAgICAgQml0NiA9PiAwLCBYIG92ZXJmbG93CisJQml0NSA9PiAwLCBZIHNpZ24gYml0CisgICAgICAgIEJpdDQgPT4gMCwgWCBzaWduIGJpdAorCUJpdDMgPT4gMQorCUJpdDIgPT4gMSwgTWlkZGxlIEJ1dHRvbgorICAgICAgICBCaXQxID0+IDEsIFJpZ2h0IEJ1dHRvbgorICAgICAgICBCaXQwID0+IDEsIExlZnQgQnV0dG9uCitCeXRlIDI6IEJpdDd+MSA9PiAoMDEwMTEwMWIpCisgICAgICAgIEJpdDAgPT4gMSA9IEVuYWJsZQorCQkwID0gRGlzYWJsZQorQnl0ZSAzOiBEb24ndCBjYXJlCitCeXRlIDQ6IERvbid0IGNhcmUgKE1PVVNFIElEIDMsIDQpCitCeXRlIDV+ODogRG9uJ3QgY2FyZSAoQWJzb2x1dGUgcGFja2V0KQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogUFMvMiBDb21tYW5kIFNldAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZTUCBzdXBwb3J0cyBiYXNpYyBQUy8yIGNvbW1hbmRpbmcgc2V0IGFuZCBtb2RlcywgcmVmZXIgdG8gZm9sbG93aW5nIFVSTCBmb3IKK2RldGFpbHMgYWJvdXQgUFMvMiBjb21tYW5kczoKKworaHR0cDovL3d3dy5jb21wdXRlci1lbmdpbmVlcmluZy5vcmcvaW5kZXgucGhwP3RpdGxlPVBTLzJfTW91c2VfSW50ZXJmYWNlCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBQcm9ncmFtbWluZyBTZXF1ZW5jZSBmb3IgRGV0ZXJtaW5pbmcgUGFja2V0IFBhcnNpbmcgRmxvdworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBJZGVudGlmeSBGU1AgYnkgcmVhZGluZyBkZXZpY2UgSUQoMHgwMCkgYW5kIHZlcnNpb24oMHgwMSkgcmVnaXN0ZXIKKworMi4gRGV0ZXJtaW5lIG51bWJlciBvZiBidXR0b25zIGJ5IHJlYWRpbmcgc3RhdHVzMiAoMHgwYikgcmVnaXN0ZXIKKworCWJ1dHRvbnMgPSByZWdbMHgwYl0gJiAweDMwCisKKwlpZiBidXR0b25zID09IDB4MzAgb3IgYnV0dG9ucyA9PSAweDIwOgorCQkjIHR3by9mb3VyIGJ1dHRvbnMKKwkJUmVmZXIgdG8gJ0ZpbmdlciBTZW5zaW5nIFBhZCBQUy8yIE1vdXNlIEludGVsbGltb3VzZScKKwkJc2VjdGlvbiBBIGZvciBwYWNrZXQgcGFyc2luZyBkZXRhaWwoaWdub3JlIGJ5dGUgNCwgYml0IH4gNykKKwllbGlmIGJ1dHRvbnMgPT0gMHgxMDoKKwkJIyA2IGJ1dHRvbnMKKwkJUmVmZXIgdG8gJ0ZpbmdlciBTZW5zaW5nIFBhZCBQUy8yIE1vdXNlIEludGVsbGltb3VzZScKKwkJc2VjdGlvbiBCIGZvciBwYWNrZXQgcGFyc2luZyBkZXRhaWwKKwllbGlmIGJ1dHRvbnMgPT0gMHgwMDoKKwkJIyA2IGJ1dHRvbnMKKwkJUmVmZXIgdG8gJ0ZpbmdlciBTZW5zaW5nIFBhZCBQUy8yIE1vdXNlIEludGVsbGltb3VzZScKKwkJc2VjdGlvbiBBIGZvciBwYWNrZXQgcGFyc2luZyBkZXRhaWwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqIFByb2dyYW1taW5nIFNlcXVlbmNlIGZvciBSZWdpc3RlciBSZWFkaW5nL1dyaXRpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWdpc3RlciBpbnZlcnNpb24gcmVxdWlyZW1lbnQ6CisKKyAgRm9sbG93aW5nIHZhbHVlcyBuZWVkZWQgdG8gYmUgaW52ZXJ0ZWQodGhlICd+JyBvcGVyYXRvciBpbiBDKSBiZWZvcmUgYmVpbmcKK3NlbnQgdG8gRlNQOgorCisJMHhlOSwgMHhlZSwgMHhmMiBhbmQgMHhmZi4KKworUmVnaXN0ZXIgc3dhcHBpbmcgcmVxdWlyZW1lbnQ6CisKKyAgRm9sbG93aW5nIHZhbHVlcyBuZWVkZWQgdG8gaGF2ZSB0aGVpciBoaWdoZXIgNCBiaXRzIGFuZCBsb3dlciA0IGJpdHMgYmVpbmcKK3N3YXBwZWQgYmVmb3JlIGJlaW5nIHNlbnQgdG8gRlNQOgorCisJMTAsIDIwLCA0MCwgNjAsIDgwLCAxMDAgYW5kIDIwMC4KKworUmVnaXN0ZXIgcmVhZGluZyBzZXF1ZW5jZToKKworCTEuIHNlbmQgMHhmMyBQUy8yIGNvbW1hbmQgdG8gRlNQOworCisJMi4gc2VuZCAweDY2IFBTLzIgY29tbWFuZCB0byBGU1A7CisKKwkzLiBzZW5kIDB4ODggUFMvMiBjb21tYW5kIHRvIEZTUDsKKworCTQuIHNlbmQgMHhmMyBQUy8yIGNvbW1hbmQgdG8gRlNQOworCisJNS4gaWYgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgYmVpbmcgdG8gcmVhZCBpcyBub3QgcmVxdWlyZWQgdG8gYmUKKwlpbnZlcnRlZChyZWZlciB0byB0aGUgJ1JlZ2lzdGVyIGludmVyc2lvbiByZXF1aXJlbWVudCcgc2VjdGlvbiksCisJZ290byBzdGVwIDYKKworCTVhLiBzZW5kIDB4NjggUFMvMiBjb21tYW5kIHRvIEZTUDsKKworCTViLiBzZW5kIHRoZSBpbnZlcnRlZCByZWdpc3RlciBhZGRyZXNzIHRvIEZTUCBhbmQgZ290byBzdGVwIDg7CisKKwk2LiBpZiB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBiZWluZyB0byByZWFkIGlzIG5vdCByZXF1aXJlZCB0byBiZQorCXN3YXBwZWQocmVmZXIgdG8gdGhlICdSZWdpc3RlciBzd2FwcGluZyByZXF1aXJlbWVudCcgc2VjdGlvbiksCisJZ290byBzdGVwIDcKKworCTZhLiBzZW5kIDB4Y2MgUFMvMiBjb21tYW5kIHRvIEZTUDsKKworCTZiLiBzZW5kIHRoZSBzd2FwcGVkIHJlZ2lzdGVyIGFkZHJlc3MgdG8gRlNQIGFuZCBnb3RvIHN0ZXAgODsKKworCTcuIHNlbmQgMHg2NiBQUy8yIGNvbW1hbmQgdG8gRlNQOworCisJN2EuIHNlbmQgdGhlIG9yaWdpbmFsIHJlZ2lzdGVyIGFkZHJlc3MgdG8gRlNQIGFuZCBnb3RvIHN0ZXAgODsKKworCTguIHNlbmQgMHhlOShzdGF0dXMgcmVxdWVzdCkgUFMvMiBjb21tYW5kIHRvIEZTUDsKKworCTkuIHRoZSByZXNwb25zZSByZWFkIGZyb20gRlNQIHNob3VsZCBiZSB0aGUgcmVxdWVzdGVkIHJlZ2lzdGVyIHZhbHVlLgorCitSZWdpc3RlciB3cml0aW5nIHNlcXVlbmNlOgorCisJMS4gc2VuZCAweGYzIFBTLzIgY29tbWFuZCB0byBGU1A7CisKKwkyLiBpZiB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBiZWluZyB0byB3cml0ZSBpcyBub3QgcmVxdWlyZWQgdG8gYmUKKwlpbnZlcnRlZChyZWZlciB0byB0aGUgJ1JlZ2lzdGVyIGludmVyc2lvbiByZXF1aXJlbWVudCcgc2VjdGlvbiksCisJZ290byBzdGVwIDMKKworCTJhLiBzZW5kIDB4NzQgUFMvMiBjb21tYW5kIHRvIEZTUDsKKworCTJiLiBzZW5kIHRoZSBpbnZlcnRlZCByZWdpc3RlciBhZGRyZXNzIHRvIEZTUCBhbmQgZ290byBzdGVwIDU7CisKKwkzLiBpZiB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBiZWluZyB0byB3cml0ZSBpcyBub3QgcmVxdWlyZWQgdG8gYmUKKwlzd2FwcGVkKHJlZmVyIHRvIHRoZSAnUmVnaXN0ZXIgc3dhcHBpbmcgcmVxdWlyZW1lbnQnIHNlY3Rpb24pLAorCWdvdG8gc3RlcCA0CisKKwkzYS4gc2VuZCAweDc3IFBTLzIgY29tbWFuZCB0byBGU1A7CisKKwkzYi4gc2VuZCB0aGUgc3dhcHBlZCByZWdpc3RlciBhZGRyZXNzIHRvIEZTUCBhbmQgZ290byBzdGVwIDU7CisKKwk0LiBzZW5kIDB4NTUgUFMvMiBjb21tYW5kIHRvIEZTUDsKKworCTRhLiBzZW5kIHRoZSByZWdpc3RlciBhZGRyZXNzIHRvIEZTUCBhbmQgZ290byBzdGVwIDU7CisKKwk1LiBzZW5kIDB4ZjMgUFMvMiBjb21tYW5kIHRvIEZTUDsKKworCTYuIGlmIHRoZSByZWdpc3RlciB2YWx1ZSBiZWluZyB0byB3cml0ZSBpcyBub3QgcmVxdWlyZWQgdG8gYmUKKwlpbnZlcnRlZChyZWZlciB0byB0aGUgJ1JlZ2lzdGVyIGludmVyc2lvbiByZXF1aXJlbWVudCcgc2VjdGlvbiksCisJZ290byBzdGVwIDcKKworCTZhLiBzZW5kIDB4NDcgUFMvMiBjb21tYW5kIHRvIEZTUDsKKworCTZiLiBzZW5kIHRoZSBpbnZlcnRlZCByZWdpc3RlciB2YWx1ZSB0byBGU1AgYW5kIGdvdG8gc3RlcCA5OworCisJNy4gaWYgdGhlIHJlZ2lzdGVyIHZhbHVlIGJlaW5nIHRvIHdyaXRlIGlzIG5vdCByZXF1aXJlZCB0byBiZQorCXN3YXBwZWQocmVmZXIgdG8gdGhlICdSZWdpc3RlciBzd2FwcGluZyByZXF1aXJlbWVudCcgc2VjdGlvbiksCisJZ290byBzdGVwIDgKKworCTdhLiBzZW5kIDB4NDQgUFMvMiBjb21tYW5kIHRvIEZTUDsKKworCTdiLiBzZW5kIHRoZSBzd2FwcGVkIHJlZ2lzdGVyIHZhbHVlIHRvIEZTUCBhbmQgZ290byBzdGVwIDk7CisKKwk4LiBzZW5kIDB4MzMgUFMvMiBjb21tYW5kIHRvIEZTUDsKKworCThhLiBzZW5kIHRoZSByZWdpc3RlciB2YWx1ZSB0byBGU1A7CisKKwk5LiB0aGUgcmVnaXN0ZXIgd3JpdGluZyBzZXF1ZW5jZSBpcyBjb21wbGV0ZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBSZWdpc3RlciBMaXN0aW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworb2Zmc2V0CXdpZHRoCQlkZWZhdWx0CXIvdwluYW1lCisweDAwCWJpdDd+Yml0MAkweDAxCVJPCWRldmljZSBJRAorCisweDAxCWJpdDd+Yml0MAkweGMwCVJXCXZlcnNpb24gSUQKKworMHgwMgliaXQ3fmJpdDAJMHgwMQlSTwl2ZW5kb3IgSUQKKworMHgwMwliaXQ3fmJpdDAJMHgwMQlSTwlwcm9kdWN0IElECisKKzB4MDQJYml0M35iaXQwCTB4MDEJUlcJcmV2aXNpb24gSUQKKworMHgwYgkJCQlSTwl0ZXN0IG1vZGUgc3RhdHVzIDEKKwliaXQzCQkxCVJPCTA6IHJvdGF0ZSAxODAgZGVncmVlLCAxOiBubyByb3RhdGlvbgorCisJYml0NX5iaXQ0CQlSTwludW1iZXIgb2YgYnV0dG9ucworCQkJMTEgPT4gMiwgbGJ0bi9yYnRuCisJCQkxMCA9PiA0LCBsYnRuL3JidG4vc2NydS9zY3JkCisJCQkwMSA9PiA2LCBsYnRuL3JidG4vc2NydS9zY3JkL3Njcmwvc2NycgorCQkJMDAgPT4gNiwgbGJ0bi9yYnRuL3NjcnUvc2NyZC9mYnRuL2JidG4KKworMHgwZgkJCQlSVwlyZWdpc3RlciBmaWxlIHBhZ2UgY29udHJvbAorCWJpdDAJCTAJUlcJMSB0byBlbmFibGUgcGFnZSAxIHJlZ2lzdGVyIGZpbGVzCisKKzB4MTAJCQkJUlcJc3lzdGVtIGNvbnRyb2wgMQorCWJpdDAJCTEJUlcJUmVzZXJ2ZWQsIG11c3QgYmUgMQorCWJpdDEJCTAJUlcJUmVzZXJ2ZWQsIG11c3QgYmUgMAorCWJpdDQJCTEJUlcJUmVzZXJ2ZWQsIG11c3QgYmUgMAorCWJpdDUJCTAJUlcJcmVnaXN0ZXIgY2xvY2sgZ2F0aW5nIGVuYWJsZQorCQkJCQkwOiByZWFkIG9ubHksIDE6IHJlYWQvd3JpdGUgZW5hYmxlCisJKE5vdGUgdGhhdCBmb2xsb3dpbmcgcmVnaXN0ZXJzIGRvZXMgbm90IHJlcXVpcmUgY2xvY2sgZ2F0aW5nIGJlaW5nCisJZW5hYmxlZCBwcmlvciB0byB3cml0ZTogMDUgMDYgMDcgMDggMDkgMGMgMGYgMTAgMTEgMTIgMTYgMTcgMTggMjMgMmUKKwk0MCA0MSA0MiA0My4pCisKKzB4MzEJCQkJUlcJb24tcGFkIGNvbW1hbmQgZGV0ZWN0aW9uCisJYml0NwkJMAlSVwlvbi1wYWQgY29tbWFuZCBsZWZ0IGJ1dHRvbiBkb3duIHRhZworCQkJCQllbmFibGUKKwkJCQkJMDogZGlzYWJsZSwgMTogZW5hYmxlCisKKzB4MzQJCQkJUlcJb24tcGFkIGNvbW1hbmQgY29udHJvbCA1CisJYml0NH5iaXQwCTB4MDUJUlcJWExPIGluIDBzLzQvMSwgc28gMDNoID0gMDAxMC4xYiA9IDIuNQorCShOb3RlIHRoYXQgcG9zaXRpb24gdW5pdCBpcyBpbiAwLjUgc2NhbmxpbmUpCisKKwliaXQ3CQkwCVJXCW9uLXBhZCB0YXAgem9uZSBlbmFibGUKKwkJCQkJMDogZGlzYWJsZSwgMTogZW5hYmxlCisKKzB4MzUJCQkJUlcJb24tcGFkIGNvbW1hbmQgY29udHJvbCA2CisJYml0NH5iaXQwCTB4MWQJUlcJWEhJIGluIDBzLzQvMSwgc28gMTloID0gMTEwMC4xYiA9IDEyLjUKKwkoTm90ZSB0aGF0IHBvc2l0aW9uIHVuaXQgaXMgaW4gMC41IHNjYW5saW5lKQorCisweDM2CQkJCVJXCW9uLXBhZCBjb21tYW5kIGNvbnRyb2wgNworCWJpdDR+Yml0MAkweDA0CVJXCVlMTyBpbiAwcy80LzEsIHNvIDAzaCA9IDAwMTAuMWIgPSAyLjUKKwkoTm90ZSB0aGF0IHBvc2l0aW9uIHVuaXQgaXMgaW4gMC41IHNjYW5saW5lKQorCisweDM3CQkJCVJXCW9uLXBhZCBjb21tYW5kIGNvbnRyb2wgOAorCWJpdDR+Yml0MAkweDEzCVJXCVlISSBpbiAwcy80LzEsIHNvIDExaCA9IDEwMDAuMWIgPSA4LjUKKwkoTm90ZSB0aGF0IHBvc2l0aW9uIHVuaXQgaXMgaW4gMC41IHNjYW5saW5lKQorCisweDQwCQkJCVJXCXN5c3RlbSBjb250cm9sIDUKKwliaXQxCQkwCVJXCUZTUCBJbnRlbGxpbW91c2UgbW9kZSBlbmFibGUKKwkJCQkJMDogZGlzYWJsZSwgMTogZW5hYmxlCisKKwliaXQyCQkwCVJXCW1vdmVtZW50ICsgYWJzLiBjb29yZGluYXRlIG1vZGUgZW5hYmxlCisJCQkJCTA6IGRpc2FibGUsIDE6IGVuYWJsZQorCShOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBoYXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYml0IDEgZXZlbiB3aGVuCisJYml0IDEgaXMgbm90IHNldC4gSG93ZXZlciwgdGhlIGZvcm1hdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGF0IG9mIGJpdCAxLgorCUluIGFkZGl0aW9uLCB3aGVuIGJpdCAxIGFuZCBiaXQgMiBhcmUgc2V0IGF0IHRoZSBzYW1lIHRpbWUsIGJpdCAyIHdpbGwKKwlvdmVycmlkZSBiaXQgMS4pCisKKwliaXQzCQkwCVJXCWFicy4gY29vcmRpbmF0ZSBvbmx5IG1vZGUgZW5hYmxlCisJCQkJCTA6IGRpc2FibGUsIDE6IGVuYWJsZQorCShOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBoYXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYml0IDEgZXZlbiB3aGVuCisJYml0IDEgaXMgbm90IHNldC4gSG93ZXZlciwgdGhlIGZvcm1hdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGF0IG9mIGJpdCAxLgorCUluIGFkZGl0aW9uLCB3aGVuIGJpdCAxLCBiaXQgMiBhbmQgYml0IDMgYXJlIHNldCBhdCB0aGUgc2FtZSB0aW1lLAorCWJpdCAzIHdpbGwgb3ZlcnJpZGUgYml0IDEgYW5kIDIuKQorCisJYml0NQkJMAlSVwlhdXRvIHN3aXRjaCBlbmFibGUKKwkJCQkJMDogZGlzYWJsZSwgMTogZW5hYmxlCisKKwliaXQ2CQkwCVJXCUcwIGFicy4gKyBub3RpZnkgcGFja2V0IGZvcm1hdCBlbmFibGUKKwkJCQkJMDogZGlzYWJsZSwgMTogZW5hYmxlCisJKE5vdGUgdGhhdCB0aGUgYWJzb2x1dGUvcmVsYXRpdmUgY29vcmRpbmF0ZSBvdXRwdXQgc3RpbGwgZGVwZW5kcyBvbgorCWJpdCAyIGFuZCAzLiAgVGhhdCBpcywgaWYgYW55IG9mIHRob3NlIGJpdCBpcyAxLCBob3N0IHdpbGwgcmVjZWl2ZQorCWFic29sdXRlIGNvb3JkaW5hdGVzOyBvdGhlcndpc2UsIGhvc3Qgb25seSByZWNlaXZlcyBwYWNrZXRzIHdpdGgKKwlyZWxhdGl2ZSBjb29yZGluYXRlLikKKworMHg0MwkJCQlSVwlvbi1wYWQgY29udHJvbAorCWJpdDAJCTAJUlcJb24tcGFkIGNvbnRyb2wgZW5hYmxlCisJCQkJCTA6IGRpc2FibGUsIDE6IGVuYWJsZQorCShOb3RlIHRoYXQgaWYgdGhpcyBiaXQgaXMgY2xlYXJlZCwgYml0IDMvNSB3aWxsIGJlIGluZWZmZWN0aXZlKQorCisJYml0MwkJMAlSVwlvbi1wYWQgZml4IHZlcnRpY2FsIHNjcm9sbGluZyBlbmFibGUKKwkJCQkJMDogZGlzYWJsZSwgMTogZW5hYmxlCisKKwliaXQ1CQkwCVJXCW9uLXBhZCBmaXggaG9yaXpvbnRhbCBzY3JvbGxpbmcgZW5hYmxlCisJCQkJCTA6IGRpc2FibGUsIDE6IGVuYWJsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnRlbF90eHQudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnRlbF90eHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MGExZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ludGVsX3R4dC50eHQKQEAgLTAsMCArMSwyMTAgQEAKK0ludGVsKFIpIFRYVCBPdmVydmlldzoKKz09PT09PT09PT09PT09PT09PT09PQorCitJbnRlbCdzIHRlY2hub2xvZ3kgZm9yIHNhZmVyIGNvbXB1dGluZywgSW50ZWwoUikgVHJ1c3RlZCBFeGVjdXRpb24KK1RlY2hub2xvZ3kgKEludGVsKFIpIFRYVCksIGRlZmluZXMgcGxhdGZvcm0tbGV2ZWwgZW5oYW5jZW1lbnRzIHRoYXQKK3Byb3ZpZGUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgY3JlYXRpbmcgdHJ1c3RlZCBwbGF0Zm9ybXMuCisKK0ludGVsIFRYVCB3YXMgZm9ybWVybHkga25vd24gYnkgdGhlIGNvZGUgbmFtZSBMYUdyYW5kZSBUZWNobm9sb2d5IChMVCkuCisKK0ludGVsIFRYVCBpbiBCcmllZjoKK28gIFByb3ZpZGVzIGR5bmFtaWMgcm9vdCBvZiB0cnVzdCBmb3IgbWVhc3VyZW1lbnQgKERSVE0pCitvICBEYXRhIHByb3RlY3Rpb24gaW4gY2FzZSBvZiBpbXByb3BlciBzaHV0ZG93bgorbyAgTWVhc3VyZW1lbnQgYW5kIHZlcmlmaWNhdGlvbiBvZiBsYXVuY2hlZCBlbnZpcm9ubWVudAorCitJbnRlbCBUWFQgaXMgcGFydCBvZiB0aGUgdlBybyhUTSkgYnJhbmQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIHNvbWUKK25vbi12UHJvIHN5c3RlbXMuICBJdCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIGRlc2t0b3Agc3lzdGVtcworYmFzZWQgb24gdGhlIFEzNSwgWDM4LCBRNDUsIGFuZCBRNDMgRXhwcmVzcyBjaGlwc2V0cyAoZS5nLiBEZWxsCitPcHRpcGxleCA3NTUsIEhQIGRjNzgwMCwgZXRjLikgYW5kIG1vYmlsZSBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBHTTQ1LAorUE00NSwgYW5kIEdTNDUgRXhwcmVzcyBjaGlwc2V0cy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3LmludGVsLmNvbS90ZWNobm9sb2d5L3NlY3VyaXR5Ly4KK1RoaXMgc2l0ZSBhbHNvIGhhcyBhIGxpbmsgdG8gdGhlIEludGVsIFRYVCBNTEUgRGV2ZWxvcGVycyBNYW51YWwsCit3aGljaCBoYXMgYmVlbiB1cGRhdGVkIGZvciB0aGUgbmV3IHJlbGVhc2VkIHBsYXRmb3Jtcy4KKworSW50ZWwgVFhUIGhhcyBiZWVuIHByZXNlbnRlZCBhdCB2YXJpb3VzIGV2ZW50cyBvdmVyIHRoZSBwYXN0IGZldworeWVhcnMsIHNvbWUgb2Ygd2hpY2ggYXJlOgorICAgICAgTGludXhUQUcgMjAwODoKKyAgICAgICAgICBodHRwOi8vd3d3LmxpbnV4dGFnLm9yZy8yMDA4L2VuL2NvbmYvZXZlbnRzL3ZwLWRvbm5lcnN0YWcvCisgICAgICAgICAgZGV0YWlscy5odG1sP3RhbGtpZD0xMTAKKyAgICAgIFRSVVNUMjAwODoKKyAgICAgICAgICBodHRwOi8vd3d3LnRydXN0MjAwOC5ldS9kb3dubG9hZHMvS2V5bm90ZS1TcGVha2Vycy8KKyAgICAgICAgICAzX0RhdmlkLUdyYXdyb2NrX1RoZS1Gcm9udC1Eb29yLW9mLVRydXN0ZWQtQ29tcHV0aW5nLnBkZgorICAgICAgSURGIDIwMDgsIFNoYW5naGFpOgorICAgICAgICAgIGh0dHA6Ly9pbnRlbGRldmVsb3BlcmZvcnVtLmNvbS5lZGdlc3VpdGUubmV0L3NoYW5naGFpXzIwMDgvCisgICAgICAgICAgYWVwL1BST1MwMDMvaW5kZXguaHRtbAorICAgICAgSURGcyAyMDA2LCAyMDA3IChJJ20gbm90IHN1cmUgaWYvd2hlcmUgdGhleSBhcmUgb25saW5lKQorCitUcnVzdGVkIEJvb3QgUHJvamVjdCBPdmVydmlldzoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RydXN0ZWQgQm9vdCAodGJvb3QpIGlzIGFuIG9wZW4gc291cmNlLCBwcmUtIGtlcm5lbC9WTU0gbW9kdWxlIHRoYXQKK3VzZXMgSW50ZWwgVFhUIHRvIHBlcmZvcm0gYSBtZWFzdXJlZCBhbmQgdmVyaWZpZWQgbGF1bmNoIG9mIGFuIE9TCitrZXJuZWwvVk1NLgorCitJdCBpcyBob3N0ZWQgb24gU291cmNlRm9yZ2UgYXQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy90Ym9vdC4KK1RoZSBtZXJjdXJpYWwgc291cmNlIHJlcG8gaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYnVnaG9zdC5vcmcvCityZXBvcy5oZy90Ym9vdC5oZy4KKworVGJvb3QgY3VycmVudGx5IHN1cHBvcnRzIGxhdW5jaGluZyBYZW4gKG9wZW4gc291cmNlIFZNTS9oeXBlcnZpc29yCit3LyBUWFQgc3VwcG9ydCBzaW5jZSB2My4yKSwgYW5kIG5vdyBMaW51eCBrZXJuZWxzLgorCisKK1ZhbHVlIFByb3Bvc2l0aW9uIGZvciBMaW51eCBvciAiV2h5IHNob3VsZCB5b3UgY2FyZT8iCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXaGlsZSB0aGVyZSBhcmUgbWFueSBwcm9kdWN0cyBhbmQgdGVjaG5vbG9naWVzIHRoYXQgYXR0ZW1wdCB0bworbWVhc3VyZSBvciBwcm90ZWN0IHRoZSBpbnRlZ3JpdHkgb2YgYSBydW5uaW5nIGtlcm5lbCwgdGhleSBhbGwKK2Fzc3VtZSB0aGUga2VybmVsIGlzICJnb29kIiB0byBiZWdpbiB3aXRoLiAgVGhlIEludGVncml0eQorTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlIChJTUEpIGFuZCBMaW51eCBJbnRlZ3JpdHkgTW9kdWxlIGludGVyZmFjZQorYXJlIGV4YW1wbGVzIG9mIHN1Y2ggc29sdXRpb25zLgorCitUbyBnZXQgdHJ1c3QgaW4gdGhlIGluaXRpYWwga2VybmVsIHdpdGhvdXQgdXNpbmcgSW50ZWwgVFhULCBhCitzdGF0aWMgcm9vdCBvZiB0cnVzdCBtdXN0IGJlIHVzZWQuICBUaGlzIGJhc2VzIHRydXN0IGluIEJJT1MKK3N0YXJ0aW5nIGF0IHN5c3RlbSByZXNldCBhbmQgcmVxdWlyZXMgbWVhc3VyZW1lbnQgb2YgYWxsIGNvZGUKK2V4ZWN1dGVkIGJldHdlZW4gc3lzdGVtIHJlc2V0IHRocm91Z2ggdGhlIGNvbXBsZXRpb24gb2YgdGhlIGtlcm5lbAorYm9vdCBhcyB3ZWxsIGFzIGRhdGEgb2JqZWN0cyB1c2VkIGJ5IHRoYXQgY29kZS4gIEluIHRoZSBjYXNlIG9mIGEKK0xpbnV4IGtlcm5lbCwgdGhpcyBtZWFucyBhbGwgb2YgQklPUywgYW55IG9wdGlvbiBST01zLCB0aGUKK2Jvb3Rsb2FkZXIgYW5kIHRoZSBib290IGNvbmZpZy4gIEluIHByYWN0aWNlLCB0aGlzIGlzIGEgbG90IG9mCitjb2RlL2RhdGEsIG11Y2ggb2Ygd2hpY2ggaXMgc3ViamVjdCB0byBjaGFuZ2UgZnJvbSBib290IHRvIGJvb3QKKyhlLmcuIGNoYW5naW5nIE5JQ3MgbWF5IGNoYW5nZSBvcHRpb24gUk9NcykuICBXaXRob3V0IHJlZmVyZW5jZQoraGFzaGVzLCB0aGVzZSBtZWFzdXJlbWVudCBjaGFuZ2VzIGFyZSBkaWZmaWN1bHQgdG8gYXNzZXNzIG9yCitjb25maXJtIGFzIGJlbmlnbi4gIFRoaXMgcHJvY2VzcyBhbHNvIGRvZXMgbm90IHByb3ZpZGUgRE1BCitwcm90ZWN0aW9uLCBtZW1vcnkgY29uZmlndXJhdGlvbi9hbGlhcyBjaGVja3MgYW5kIGxvY2tzLCBjcmFzaAorcHJvdGVjdGlvbiwgb3IgcG9saWN5IHN1cHBvcnQuCisKK0J5IHVzaW5nIHRoZSBoYXJkd2FyZS1iYXNlZCByb290IG9mIHRydXN0IHRoYXQgSW50ZWwgVFhUIHByb3ZpZGVzLAorbWFueSBvZiB0aGVzZSBpc3N1ZXMgY2FuIGJlIG1pdGlnYXRlZC4gIFNwZWNpZmljYWxseTogbWFueQorcHJlLWxhdW5jaCBjb21wb25lbnRzIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHRydXN0IGNoYWluLCBETUEKK3Byb3RlY3Rpb24gaXMgcHJvdmlkZWQgdG8gYWxsIGxhdW5jaGVkIGNvbXBvbmVudHMsIGEgbGFyZ2UgbnVtYmVyCitvZiBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIGNoZWNrcyBhcmUgcGVyZm9ybWVkIGFuZCB2YWx1ZXMgbG9ja2VkLAorcHJvdGVjdGlvbiBpcyBwcm92aWRlZCBmb3IgYW55IGRhdGEgaW4gdGhlIGV2ZW50IG9mIGFuIGltcHJvcGVyCitzaHV0ZG93biwgYW5kIHRoZXJlIGlzIHN1cHBvcnQgZm9yIHBvbGljeS1iYXNlZCBleGVjdXRpb24vdmVyaWZpY2F0aW9uLgorVGhpcyBwcm92aWRlcyBhIG1vcmUgc3RhYmxlIG1lYXN1cmVtZW50IGFuZCBhIGhpZ2hlciBhc3N1cmFuY2Ugb2YKK3N5c3RlbSBjb25maWd1cmF0aW9uIGFuZCBpbml0aWFsIHN0YXRlIHRoYW4gd291bGQgYmUgb3RoZXJ3aXNlCitwb3NzaWJsZS4gIFNpbmNlIHRoZSB0Ym9vdCBwcm9qZWN0IGlzIG9wZW4gc291cmNlLCBzb3VyY2UgY29kZSBmb3IKK2FsbW9zdCBhbGwgcGFydHMgb2YgdGhlIHRydXN0IGNoYWluIGlzIGF2YWlsYWJsZSAoZXhjZXB0aW5nIFNNTSBhbmQKK0ludGVsLXByb3ZpZGVkIGZpcm13YXJlKS4KKworSG93IERvZXMgaXQgV29yaz8KKz09PT09PT09PT09PT09PT09CisKK28gIFRib290IGlzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBsYXVuY2hlZCBieSB0aGUgYm9vdGxvYWRlciBhcworICAgdGhlICJrZXJuZWwiICh0aGUgYmluYXJ5IHRoZSBib290bG9hZGVyIGV4ZWN1dGVzKS4KK28gIEl0IHBlcmZvcm1zIGFsbCBvZiB0aGUgd29yayBuZWNlc3NhcnkgdG8gZGV0ZXJtaW5lIGlmIHRoZQorICAgcGxhdGZvcm0gc3VwcG9ydHMgSW50ZWwgVFhUIGFuZCwgaWYgc28sIGV4ZWN1dGVzIHRoZSBHRVRTRUNbU0VOVEVSXQorICAgcHJvY2Vzc29yIGluc3RydWN0aW9uIHRoYXQgaW5pdGlhdGVzIHRoZSBkeW5hbWljIHJvb3Qgb2YgdHJ1c3QuCisgICAtICBJZiB0Ym9vdCBkZXRlcm1pbmVzIHRoYXQgdGhlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEludGVsIFRYVAorICAgICAgb3IgaXMgbm90IGNvbmZpZ3VyZWQgY29ycmVjdGx5IChlLmcuIHRoZSBTSU5JVCBBQyBNb2R1bGUgd2FzCisgICAgICBpbmNvcnJlY3QpLCBpdCB3aWxsIGRpcmVjdGx5IGxhdW5jaCB0aGUga2VybmVsIHdpdGggbm8gY2hhbmdlcworICAgICAgdG8gYW55IHN0YXRlLgorICAgLSAgVGJvb3Qgd2lsbCBvdXRwdXQgdmFyaW91cyBpbmZvcm1hdGlvbiBhYm91dCBpdHMgcHJvZ3Jlc3MgdG8gdGhlCisgICAgICB0ZXJtaW5hbCwgc2VyaWFsIHBvcnQsIGFuZC9vciBhbiBpbi1tZW1vcnkgbG9nOyB0aGUgb3V0cHV0CisgICAgICBsb2NhdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBhIGNvbW1hbmQgbGluZSBzd2l0Y2guCitvICBUaGUgR0VUU0VDW1NFTlRFUl0gaW5zdHJ1Y3Rpb24gd2lsbCByZXR1cm4gY29udHJvbCB0byB0Ym9vdCBhbmQKKyAgIHRib290IHRoZW4gdmVyaWZpZXMgY2VydGFpbiBhc3BlY3RzIG9mIHRoZSBlbnZpcm9ubWVudCAoZS5nLiBUUE0gTlYKKyAgIGxvY2ssIGU4MjAgdGFibGUgZG9lcyBub3QgaGF2ZSBpbnZhbGlkIGVudHJpZXMsIGV0Yy4pLgorbyAgSXQgd2lsbCB3YWtlIHRoZSBBUHMgZnJvbSB0aGUgc3BlY2lhbCBzbGVlcCBzdGF0ZSB0aGUgR0VUU0VDW1NFTlRFUl0KKyAgIGluc3RydWN0aW9uIGhhZCBwdXQgdGhlbSBpbiBhbmQgcGxhY2UgdGhlbSBpbnRvIGEgd2FpdC1mb3ItU0lQSQorICAgc3RhdGUuCisgICAtICBCZWNhdXNlIHRoZSBwcm9jZXNzb3JzIHdpbGwgbm90IHJlc3BvbmQgdG8gYW4gSU5JVCBvciBTSVBJIHdoZW4KKyAgICAgIGluIHRoZSBUWFQgZW52aXJvbm1lbnQsIGl0IGlzIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBzbWFsbCBWVC14CisgICAgICBndWVzdCBmb3IgdGhlIEFQcy4gIFdoZW4gdGhleSBydW4gaW4gdGhpcyBndWVzdCwgdGhleSB3aWxsCisgICAgICBzaW1wbHkgd2FpdCBmb3IgdGhlIElOSVQtU0lQSS1TSVBJIHNlcXVlbmNlLCB3aGljaCB3aWxsIGNhdXNlCisgICAgICBWTUVYSVRzLCBhbmQgdGhlbiBkaXNhYmxlIFZUIGFuZCBqdW1wIHRvIHRoZSBTSVBJIHZlY3Rvci4gIFRoaXMKKyAgICAgIGFwcHJvYWNoIHNlZW1lZCBsaWtlIGEgYmV0dGVyIGNob2ljZSB0aGFuIGhhdmluZyB0byBpbnNlcnQKKyAgICAgIHNwZWNpYWwgY29kZSBpbnRvIHRoZSBrZXJuZWwncyBNUCB3YWtldXAgc2VxdWVuY2UuCitvICBUYm9vdCB0aGVuIGFwcGxpZXMgYW4gKG9wdGlvbmFsKSB1c2VyLWRlZmluZWQgbGF1bmNoIHBvbGljeSB0bworICAgdmVyaWZ5IHRoZSBrZXJuZWwgYW5kIGluaXRyZC4KKyAgIC0gIFRoaXMgcG9saWN5IGlzIHJvb3RlZCBpbiBUUE0gTlYgYW5kIGlzIGRlc2NyaWJlZCBpbiB0aGUgdGJvb3QKKyAgICAgIHByb2plY3QuICBUaGUgdGJvb3QgcHJvamVjdCBhbHNvIGNvbnRhaW5zIGNvZGUgZm9yIHRvb2xzIHRvCisgICAgICBjcmVhdGUgYW5kIHByb3Zpc2lvbiB0aGUgcG9saWN5LgorICAgLSAgUG9saWNpZXMgYXJlIGNvbXBsZXRlbHkgdW5kZXIgdXNlciBjb250cm9sIGFuZCBpZiBub3QgcHJlc2VudAorICAgICAgdGhlbiBhbnkga2VybmVsIHdpbGwgYmUgbGF1bmNoZWQuCisgICAtICBQb2xpY3kgYWN0aW9uIGlzIGZsZXhpYmxlIGFuZCBjYW4gaW5jbHVkZSBoYWx0aW5nIG9uIGZhaWx1cmVzCisgICAgICBvciBzaW1wbHkgbG9nZ2luZyB0aGVtIGFuZCBjb250aW51aW5nLgorbyAgVGJvb3QgYWRqdXN0cyB0aGUgZTgyMCB0YWJsZSBwcm92aWRlZCBieSB0aGUgYm9vdGxvYWRlciB0byByZXNlcnZlCisgICBpdHMgb3duIGxvY2F0aW9uIGluIG1lbW9yeSBhcyB3ZWxsIGFzIHRvIHJlc2VydmUgY2VydGFpbiBvdGhlcgorICAgVFhULXJlbGF0ZWQgcmVnaW9ucy4KK28gIEFzIHBhcnQgb2YgaXQncyBsYXVuY2gsIHRib290IERNQSBwcm90ZWN0cyBhbGwgb2YgUkFNICh1c2luZyB0aGUKKyAgIFZULWQgUE1ScykuICBUaHVzLCB0aGUga2VybmVsIG11c3QgYmUgYm9vdGVkIHdpdGggJ2ludGVsX2lvbW11PW9uJworICAgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoaXMgYmxhbmtldCBwcm90ZWN0aW9uIGFuZCB1c2UgVlQtZCdzCisgICBwYWdlLWxldmVsIHByb3RlY3Rpb24uCitvICBUYm9vdCB3aWxsIHBvcHVsYXRlIGEgc2hhcmVkIHBhZ2Ugd2l0aCBzb21lIGRhdGEgYWJvdXQgaXRzZWxmIGFuZAorICAgcGFzcyB0aGlzIHRvIHRoZSBMaW51eCBrZXJuZWwgYXMgaXQgdHJhbnNmZXJzIGNvbnRyb2wuCisgICAtICBUaGUgbG9jYXRpb24gb2YgdGhlIHNoYXJlZCBwYWdlIGlzIHBhc3NlZCB2aWEgdGhlIGJvb3RfcGFyYW1zCisgICAgICBzdHJ1Y3QgYXMgYSBwaHlzaWNhbCBhZGRyZXNzLgorbyAgVGhlIGtlcm5lbCB3aWxsIGxvb2sgZm9yIHRoZSB0Ym9vdCBzaGFyZWQgcGFnZSBhZGRyZXNzIGFuZCwgaWYgaXQKKyAgIGV4aXN0cywgbWFwIGl0LgorbyAgQXMgb25lIG9mIHRoZSBjaGVja3MvcHJvdGVjdGlvbnMgcHJvdmlkZWQgYnkgVFhULCBpdCBtYWtlcyBhIGNvcHkKKyAgIG9mIHRoZSBWVC1kIERNQVJzIGluIGEgRE1BLXByb3RlY3RlZCByZWdpb24gb2YgbWVtb3J5IGFuZCB2ZXJpZmllcworICAgdGhlbSBmb3IgY29ycmVjdG5lc3MuICBUaGUgVlQtZCBjb2RlIHdpbGwgZGV0ZWN0IGlmIHRoZSBrZXJuZWwgd2FzCisgICBsYXVuY2hlZCB3aXRoIHRib290IGFuZCB1c2UgdGhpcyBjb3B5IGluc3RlYWQgb2YgdGhlIG9uZSBpbiB0aGUKKyAgIEFDUEkgdGFibGUuCitvICBBdCB0aGlzIHBvaW50LCB0Ym9vdCBhbmQgVFhUIGFyZSBvdXQgb2YgdGhlIHBpY3R1cmUgdW50aWwgYQorICAgc2h1dGRvd24gKFM8bj4pCitvICBJbiBvcmRlciB0byBwdXQgYSBzeXN0ZW0gaW50byBhbnkgb2YgdGhlIHNsZWVwIHN0YXRlcyBhZnRlciBhIFRYVAorICAgbGF1bmNoLCBUWFQgbXVzdCBmaXJzdCBiZSBleGl0ZWQuICBUaGlzIGlzIHRvIHByZXZlbnQgYXR0YWNrcyB0aGF0CisgICBhdHRlbXB0IHRvIGNyYXNoIHRoZSBzeXN0ZW0gdG8gZ2FpbiBjb250cm9sIG9uIHJlYm9vdCBhbmQgc3RlYWwKKyAgIGRhdGEgbGVmdCBpbiBtZW1vcnkuCisgICAtICBUaGUga2VybmVsIHdpbGwgcGVyZm9ybSBhbGwgb2YgaXRzIHNsZWVwIHByZXBhcmF0aW9uIGFuZAorICAgICAgcG9wdWxhdGUgdGhlIHNoYXJlZCBwYWdlIHdpdGggdGhlIEFDUEkgZGF0YSBuZWVkZWQgdG8gcHV0IHRoZQorICAgICAgcGxhdGZvcm0gaW4gdGhlIGRlc2lyZWQgc2xlZXAgc3RhdGUuCisgICAtICBUaGVuIHRoZSBrZXJuZWwganVtcHMgaW50byB0Ym9vdCB2aWEgdGhlIHZlY3RvciBzcGVjaWZpZWQgaW4gdGhlCisgICAgICBzaGFyZWQgcGFnZS4KKyAgIC0gIFRib290IHdpbGwgY2xlYW4gdXAgdGhlIGVudmlyb25tZW50IGFuZCBkaXNhYmxlIFRYVCwgdGhlbiB1c2UgdGhlCisgICAgICBrZXJuZWwtcHJvdmlkZWQgQUNQSSBpbmZvcm1hdGlvbiB0byBhY3R1YWxseSBwbGFjZSB0aGUgcGxhdGZvcm0KKyAgICAgIGludG8gdGhlIGRlc2lyZWQgc2xlZXAgc3RhdGUuCisgICAtICBJbiB0aGUgY2FzZSBvZiBTMywgdGJvb3Qgd2lsbCBhbHNvIHJlZ2lzdGVyIGl0c2VsZiBhcyB0aGUgcmVzdW1lCisgICAgICB2ZWN0b3IuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGl0IG11c3QgcmUtZXN0YWJsaXNoIHRoZQorICAgICAgbWVhc3VyZWQgZW52aXJvbm1lbnQgdXBvbiByZXN1bWUuICBPbmNlIHRoZSBUWFQgZW52aXJvbm1lbnQKKyAgICAgIGhhcyBiZWVuIHJlc3RvcmVkLCBpdCB3aWxsIHJlc3RvcmUgdGhlIFRQTSBQQ1JzIGFuZCB0aGVuCisgICAgICB0cmFuc2ZlciBjb250cm9sIGJhY2sgdG8gdGhlIGtlcm5lbCdzIFMzIHJlc3VtZSB2ZWN0b3IuCisgICAgICBJbiBvcmRlciB0byBwcmVzZXJ2ZSBzeXN0ZW0gaW50ZWdyaXR5IGFjcm9zcyBTMywgdGhlIGtlcm5lbAorICAgICAgcHJvdmlkZXMgdGJvb3Qgd2l0aCBhIHNldCBvZiBtZW1vcnkgcmFuZ2VzIChrZXJuZWwKKyAgICAgIGNvZGUvZGF0YS9ic3MsIFMzIHJlc3VtZSBjb2RlLCBhbmQgQVAgdHJhbXBvbGluZSkgdGhhdCB0Ym9vdAorICAgICAgd2lsbCBjYWxjdWxhdGUgYSBNQUMgKG1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZSkgb3ZlciBhbmQgdGhlbgorICAgICAgc2VhbCB3aXRoIHRoZSBUUE0uICBPbiByZXN1bWUgYW5kIG9uY2UgdGhlIG1lYXN1cmVkIGVudmlyb25tZW50CisgICAgICBoYXMgYmVlbiByZS1lc3RhYmxpc2hlZCwgdGJvb3Qgd2lsbCByZS1jYWxjdWxhdGUgdGhlIE1BQyBhbmQKKyAgICAgIHZlcmlmeSBpdCBhZ2FpbnN0IHRoZSBzZWFsZWQgdmFsdWUuICBUYm9vdCdzIHBvbGljeSBkZXRlcm1pbmVzCisgICAgICB3aGF0IGhhcHBlbnMgaWYgdGhlIHZlcmlmaWNhdGlvbiBmYWlscy4KKworVGhhdCdzIHByZXR0eSBtdWNoIGl0IGZvciBUWFQgc3VwcG9ydC4KKworCitDb25maWd1cmluZyB0aGUgU3lzdGVtOgorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGNvZGUgd29ya3Mgd2l0aCAzMmJpdCwgMzJiaXQgUEFFLCBhbmQgNjRiaXQgKHg4Nl82NCkga2VybmVscy4KKworSW4gQklPUywgdGhlIHVzZXIgbXVzdCBlbmFibGU6ICBUUE0sIFRYVCwgVlQteCwgVlQtZC4gIE5vdCBhbGwgQklPU2VzCithbGxvdyB0aGVzZSB0byBiZSBpbmRpdmlkdWFsbHkgZW5hYmxlZC9kaXNhYmxlZCBhbmQgdGhlIHNjcmVlbnMgaW4KK3doaWNoIHRvIGZpbmQgdGhlbSBhcmUgQklPUy1zcGVjaWZpYy4KKworZ3J1Yi5jb25mIG5lZWRzIHRvIGJlIG1vZGlmaWVkIGFzIGZvbGxvd3M6CisgICAgICAgIHRpdGxlIExpbnV4IDIuNi4yOS10aXAgdy8gdGJvb3QKKyAgICAgICAgICByb290IChoZDAsMCkKKyAgICAgICAgICAgICAgICBrZXJuZWwgL3Rib290Lmd6IGxvZ2dpbmc9c2VyaWFsLHZnYSxtZW1vcnkKKyAgICAgICAgICAgICAgICBtb2R1bGUgL3ZtbGludXotMi42LjI5LXRpcCBpbnRlbF9pb21tdT1vbiBybworICAgICAgICAgICAgICAgICAgICAgICByb290PUxBQkVMPS8gcmhnYiBjb25zb2xlPXR0eVMwLDExNTIwMCAzCisgICAgICAgICAgICAgICAgbW9kdWxlIC9pbml0cmQtMi42LjI5LXRpcC5pbWcKKyAgICAgICAgICAgICAgICBtb2R1bGUgL1EzNV9TSU5JVF8xNy5CSU4KKworVGhlIGtlcm5lbCBvcHRpb24gZm9yIGVuYWJsaW5nIEludGVsIFRYVCBzdXBwb3J0IGlzIGZvdW5kIHVuZGVyIHRoZQorU2VjdXJpdHkgdG9wLWxldmVsIG1lbnUgYW5kIGlzIGNhbGxlZCAiRW5hYmxlIEludGVsKFIpIFRydXN0ZWQKK0V4ZWN1dGlvbiBUZWNobm9sb2d5IChUWFQpIi4gIEl0IGlzIG1hcmtlZCBhcyBFWFBFUklNRU5UQUwgYW5kCitkZXBlbmRzIG9uIHRoZSBnZW5lcmljIHg4NiBzdXBwb3J0ICh0byBhbGxvdyBtYXhpbXVtIGZsZXhpYmlsaXR5IGluCitrZXJuZWwgYnVpbGQgb3B0aW9ucyksIHNpbmNlIHRoZSB0Ym9vdCBjb2RlIHdpbGwgZGV0ZWN0IHdoZXRoZXIgdGhlCitwbGF0Zm9ybSBhY3R1YWxseSBzdXBwb3J0cyBJbnRlbCBUWFQgYW5kIHRodXMgd2hldGhlciBhbnkgb2YgdGhlCitrZXJuZWwgY29kZSBpcyBleGVjdXRlZC4KKworVGhlIFEzNV9TSU5JVF8xNy5CSU4gZmlsZSBpcyB3aGF0IEludGVsIFRYVCByZWZlcnMgdG8gYXMgYW4KK0F1dGhlbnRpY2F0ZWQgQ29kZSBNb2R1bGUuICBJdCBpcyBzcGVjaWZpYyB0byB0aGUgY2hpcHNldCBpbiB0aGUKK3N5c3RlbSBhbmQgY2FuIGFsc28gYmUgZm91bmQgb24gdGhlIFRydXN0ZWQgQm9vdCBzaXRlLiAgSXQgaXMgYW4KKyh1bmVuY3J5cHRlZCkgbW9kdWxlIHNpZ25lZCBieSBJbnRlbCB0aGF0IGlzIHVzZWQgYXMgcGFydCBvZiB0aGUKK0RSVE0gcHJvY2VzcyB0byB2ZXJpZnkgYW5kIGNvbmZpZ3VyZSB0aGUgc3lzdGVtLiAgSXQgaXMgc2lnbmVkCitiZWNhdXNlIGl0IG9wZXJhdGVzIGF0IGEgaGlnaGVyIHByaXZpbGVnZSBsZXZlbCBpbiB0aGUgc3lzdGVtIHRoYW4KK2FueSBvdGhlciBtYWNyb2NvZGUgYW5kIGl0cyBjb3JyZWN0IG9wZXJhdGlvbiBpcyBjcml0aWNhbCB0byB0aGUKK2VzdGFibGlzaG1lbnQgb2YgdGhlIERSVE0uICBUaGUgcHJvY2VzcyBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QKK1NJTklUIEFDTSBmb3IgYSBzeXN0ZW0gaXMgZG9jdW1lbnRlZCBpbiB0aGUgU0lOSVQtZ3VpZGUudHh0IGZpbGUKK3RoYXQgaXMgb24gdGhlIHRib290IFNvdXJjZUZvcmdlIHNpdGUgdW5kZXIgdGhlIFNJTklUIEFDTSBkb3dubG9hZHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQgYi9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKaW5kZXggZGJlYTRmOS4uYWFmY2EwYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dApAQCAtMTIxLDYgKzEyMSw3IEBACiAnYycJMDAtN0YJbGludXgvY29tc3RhdHMuaAljb25mbGljdCEKICdjJwkwMC03RglsaW51eC9jb2RhLmgJCWNvbmZsaWN0IQogJ2MnCTgwLTlGCWFyY2gvczM5MC9pbmNsdWRlL2FzbS9jaHNjLmgKKydjJwlBMC1BRiAgIGFyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCiAnZCcJMDAtRkYJbGludXgvY2hhci9kcm0vZHJtL2gJY29uZmxpY3QhCiAnZCcJRjAtRkYJbGludXgvZGlnaTEuaAogJ2UnCWFsbAlsaW51eC9kaWdpMS5oCQljb25mbGljdCEKQEAgLTE5Miw3ICsxOTMsNyBAQAogMHhBRAkwMAlOZXRmaWx0ZXIgZGV2aWNlCWluIGRldmVsb3BtZW50OgogCQkJCQk8bWFpbHRvOnJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4JCiAweEFFCWFsbAlsaW51eC9rdm0uaAkJS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZQotCQkJCQk8bWFpbHRvOmt2bS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisJCQkJCTxtYWlsdG86a3ZtQHZnZXIua2VybmVsLm9yZz4KIDB4QjAJYWxsCVJBVElPIGRldmljZXMJCWluIGRldmVsb3BtZW50OgogCQkJCQk8bWFpbHRvOnZnb0ByYXRpby5kZT4KIDB4QjEJMDAtMUYJUFBQb1gJCQk8bWFpbHRvOm1vc3Ryb3dzQHN0eXgudXdhdGVybG9vLmNhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA3OTM2YjgwLi40YzEyYTI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNTcsNiArNTcsNyBAQAogCUlTQVBOUAlJU0EgUG5QIGNvZGUgaXMgZW5hYmxlZC4KIAlJU0ROCUFwcHJvcHJpYXRlIElTRE4gc3VwcG9ydCBpcyBlbmFibGVkLgogCUpPWQlBcHByb3ByaWF0ZSBqb3lzdGljayBzdXBwb3J0IGlzIGVuYWJsZWQuCisJS1ZNCUtlcm5lbCBWaXJ0dWFsIE1hY2hpbmUgc3VwcG9ydCBpcyBlbmFibGVkLgogCUxJQkFUQSAgTGliYXRhIGRyaXZlciBpcyBlbmFibGVkCiAJTFAJUHJpbnRlciBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJTE9PUAlMb29wYmFjayBkZXZpY2Ugc3VwcG9ydCBpcyBlbmFibGVkLgpAQCAtMTA5OCw2ICsxMDk5LDQ0IEBACiAJa3N0YWNrPU4JW1g4Nl0gUHJpbnQgTiB3b3JkcyBmcm9tIHRoZSBrZXJuZWwgc3RhY2sKIAkJCWluIG9vcHMgZHVtcHMuCiAKKwlrdm0uaWdub3JlX21zcnM9W0tWTV0gSWdub3JlIGd1ZXN0IGFjY2Vzc2VzIHRvIHVuaGFuZGxlZCBNU1JzLgorCQkJRGVmYXVsdCBpcyAwIChkb24ndCBpZ25vcmUsIGJ1dCBpbmplY3QgI0dQKQorCisJa3ZtLm9vc19zaGFkb3c9CVtLVk1dIERpc2FibGUgb3V0LW9mLXN5bmMgc2hhZG93IHBhZ2luZy4KKwkJCURlZmF1bHQgaXMgMSAoZW5hYmxlZCkKKworCWt2bS1hbWQubmVzdGVkPQlbS1ZNLEFNRF0gQWxsb3cgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGluIEtWTS9TVk0uCisJCQlEZWZhdWx0IGlzIDAgKG9mZikKKworCWt2bS1hbWQubnB0PQlbS1ZNLEFNRF0gRGlzYWJsZSBuZXN0ZWQgcGFnaW5nICh2aXJ0dWFsaXplZCBNTVUpCisJCQlmb3IgYWxsIGd1ZXN0cy4KKwkJCURlZmF1bHQgaXMgMSAoZW5hYmxlZCkgaWYgaW4gNjRiaXQgb3IgMzJiaXQtUEFFIG1vZGUKKworCWt2bS1pbnRlbC5ieXBhc3NfZ3Vlc3RfcGY9CisJCQlbS1ZNLEludGVsXSBEaXNhYmxlcyBieXBhc3Npbmcgb2YgZ3Vlc3QgcGFnZSBmYXVsdHMKKwkJCW9uIEludGVsIGNoaXBzLiBEZWZhdWx0IGlzIDEgKGVuYWJsZWQpCisKKwlrdm0taW50ZWwuZXB0PQlbS1ZNLEludGVsXSBEaXNhYmxlIGV4dGVuZGVkIHBhZ2UgdGFibGVzCisJCQkodmlydHVhbGl6ZWQgTU1VKSBzdXBwb3J0IG9uIGNhcGFibGUgSW50ZWwgY2hpcHMuCisJCQlEZWZhdWx0IGlzIDEgKGVuYWJsZWQpCisKKwlrdm0taW50ZWwuZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlPQorCQkJW0tWTSxJbnRlbF0gRW5hYmxlIGVtdWxhdGlvbiBvZiBpbnZhbGlkIGd1ZXN0IHN0YXRlcworCQkJRGVmYXVsdCBpcyAwIChkaXNhYmxlZCkKKworCWt2bS1pbnRlbC5mbGV4cHJpb3JpdHk9CisJCQlbS1ZNLEludGVsXSBEaXNhYmxlIEZsZXhQcmlvcml0eSBmZWF0dXJlIChUUFIgc2hhZG93KS4KKwkJCURlZmF1bHQgaXMgMSAoZW5hYmxlZCkKKworCWt2bS1pbnRlbC51bnJlc3RyaWN0ZWRfZ3Vlc3Q9CisJCQlbS1ZNLEludGVsXSBEaXNhYmxlIHVucmVzdHJpY3RlZCBndWVzdCBmZWF0dXJlCisJCQkodmlydHVhbGl6ZWQgcmVhbCBhbmQgdW5wYWdlZCBtb2RlKSBvbiBjYXBhYmxlCisJCQlJbnRlbCBjaGlwcy4gRGVmYXVsdCBpcyAxIChlbmFibGVkKQorCisJa3ZtLWludGVsLnZwaWQ9CVtLVk0sSW50ZWxdIERpc2FibGUgVmlydHVhbCBQcm9jZXNzb3IgSWRlbnRpZmljYXRpb24KKwkJCWZlYXR1cmUgKHRhZ2dlZCBUTEJzKSBvbiBjYXBhYmxlIEludGVsIGNoaXBzLgorCQkJRGVmYXVsdCBpcyAxIChlbmFibGVkKQorCiAJbDJjcj0JCVtQUENdCiAKIAlsM2NyPQkJW1BQQ10KQEAgLTE1MDMsNiArMTU0MiwxNCBAQAogCQkJW05GU10gc2V0IHRoZSBUQ1AgcG9ydCBvbiB3aGljaCB0aGUgTkZTdjQgY2FsbGJhY2sKIAkJCWNoYW5uZWwgc2hvdWxkIGxpc3Rlbi4KIAorCW5mcy5jYWNoZV9nZXRlbnQ9CisJCQlbTkZTXSBzZXRzIHRoZSBwYXRobmFtZSB0byB0aGUgcHJvZ3JhbSB3aGljaCBpcyB1c2VkCisJCQl0byB1cGRhdGUgdGhlIE5GUyBjbGllbnQgY2FjaGUgZW50cmllcy4KKworCW5mcy5jYWNoZV9nZXRlbnRfdGltZW91dD0KKwkJCVtORlNdIHNldHMgdGhlIHRpbWVvdXQgYWZ0ZXIgd2hpY2ggYW4gYXR0ZW1wdCB0bworCQkJdXBkYXRlIGEgY2FjaGUgZW50cnkgaXMgZGVlbWVkIHRvIGhhdmUgZmFpbGVkLgorCiAJbmZzLmlkbWFwX2NhY2hlX3RpbWVvdXQ9CiAJCQlbTkZTXSBzZXQgdGhlIG1heGltdW0gbGlmZXRpbWUgZm9yIGlkbWFwcGVyIGNhY2hlCiAJCQllbnRyaWVzLgpAQCAtMTUzNSw2ICsxNTgyLDExIEBACiAJCQlzeW1ib2xpYyBuYW1lczogbGFwaWMgYW5kIGlvYXBpYwogCQkJRXhhbXBsZTogbm1pX3dhdGNoZG9nPTIgb3Igbm1pX3dhdGNoZG9nPXBhbmljLGxhcGljCiAKKwluZXRwb2xsLmNhcnJpZXJfdGltZW91dD0KKwkJCVtORVRdIFNwZWNpZmllcyBhbW91bnQgb2YgdGltZSAoaW4gc2Vjb25kcykgdGhhdAorCQkJbmV0cG9sbCBzaG91bGQgd2FpdCBmb3IgYSBjYXJyaWVyLiBCeSBkZWZhdWx0IG5ldHBvbGwKKwkJCXdhaXRzIDQgc2Vjb25kcy4KKwogCW5vMzg3CQlbQlVHUz1YODYtMzJdIFRlbGxzIHRoZSBrZXJuZWwgdG8gdXNlIHRoZSAzODcgbWF0aHMKIAkJCWVtdWxhdGlvbiBsaWJyYXJ5IGV2ZW4gaWYgYSAzODcgbWF0aHMgY29wcm9jZXNzb3IKIAkJCWlzIHByZXNlbnQuCkBAIC0xOTE5LDExICsxOTcxLDEyIEBACiAJCQlGb3JtYXQ6IHsgMCB8IDEgfQogCQkJU2VlIGFyY2gvcGFyaXNjL2tlcm5lbC9wZGNfY2hhc3Npcy5jCiAKLQlwZXJjcHVfYWxsb2M9CVtYODZdIFNlbGVjdCB3aGljaCBwZXJjcHUgZmlyc3QgY2h1bmsgYWxsb2NhdG9yIHRvIHVzZS4KLQkJCUFsbG93ZWQgdmFsdWVzIGFyZSBvbmUgb2YgImxwYWdlIiwgImVtYmVkIiBhbmQgIjRrIi4KLQkJCVNlZSBjb21tZW50cyBpbiBhcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMgZm9yCi0JCQlkZXRhaWxzIG9uIGVhY2ggYWxsb2NhdG9yLiAgVGhpcyBwYXJhbWV0ZXIgaXMgcHJpbWFyaWx5Ci0JCQlmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZSBjb21wYXJpc29uLgorCXBlcmNwdV9hbGxvYz0JU2VsZWN0IHdoaWNoIHBlcmNwdSBmaXJzdCBjaHVuayBhbGxvY2F0b3IgdG8gdXNlLgorCQkJQ3VycmVudGx5IHN1cHBvcnRlZCB2YWx1ZXMgYXJlICJlbWJlZCIgYW5kICJwYWdlIi4KKwkJCUFyY2hzIG1heSBzdXBwb3J0IHN1YnNldCBvciBub25lIG9mIHRoZQlzZWxlY3Rpb25zLgorCQkJU2VlIGNvbW1lbnRzIGluIG1tL3BlcmNwdS5jIGZvciBkZXRhaWxzIG9uIGVhY2gKKwkJCWFsbG9jYXRvci4gIFRoaXMgcGFyYW1ldGVyIGlzIHByaW1hcmlseQlmb3IgZGVidWdnaW5nCisJCQlhbmQgcGVyZm9ybWFuY2UgY29tcGFyaXNvbi4KIAogCXBmLgkJW1BBUklERV0KIAkJCVNlZSBEb2N1bWVudGF0aW9uL2Jsb2NrZGV2L3BhcmlkZS50eHQuCkBAIC0yMzk1LDYgKzI0NDgsMTggQEAKIAlzdGlmYj0JCVtIV10KIAkJCUZvcm1hdDogYnBwOjxicHAxPls6PGJwcDI+Wzo8YnBwMz4uLi5dXQogCisJc3VucnBjLm1pbl9yZXN2cG9ydD0KKwlzdW5ycGMubWF4X3Jlc3Zwb3J0PQorCQkJW05GUyxTVU5SUENdCisJCQlTdW5SUEMgc2VydmVycyBvZnRlbiByZXF1aXJlIHRoYXQgY2xpZW50IHJlcXVlc3RzCisJCQlvcmlnaW5hdGUgZnJvbSBhIHByaXZpbGVnZWQgcG9ydCAoaS5lLiBhIHBvcnQgaW4gdGhlCisJCQlyYW5nZSAwIDwgcG9ydG5yIDwgMTAyNCkuCisJCQlBbiBhZG1pbmlzdHJhdG9yIHdobyB3aXNoZXMgdG8gcmVzZXJ2ZSBzb21lIG9mIHRoZXNlCisJCQlwb3J0cyBmb3Igb3RoZXIgdXNlcyBtYXkgYWRqdXN0IHRoZSByYW5nZSB0aGF0IHRoZQorCQkJa2VybmVsJ3Mgc3VucnBjIGNsaWVudCBjb25zaWRlcnMgdG8gYmUgcHJpdmlsZWdlZAorCQkJdXNpbmcgdGhlc2UgdHdvIHBhcmFtZXRlcnMgdG8gc2V0IHRoZSBtaW5pbXVtIGFuZAorCQkJbWF4aW11bSBwb3J0IHZhbHVlcy4KKwogCXN1bnJwYy5wb29sX21vZGU9CiAJCQlbTkZTXQogCQkJQ29udHJvbCBob3cgdGhlIE5GUyBzZXJ2ZXIgY29kZSBhbGxvY2F0ZXMgQ1BVcyB0bwpAQCAtMjQxMSw2ICsyNDc2LDE1IEBACiAJCQlwZXJub2RlCSAgICBvbmUgcG9vbCBmb3IgZWFjaCBOVU1BIG5vZGUgKGVxdWl2YWxlbnQKIAkJCQkgICAgdG8gZ2xvYmFsIG9uIG5vbi1OVU1BIG1hY2hpbmVzKQogCisJc3VucnBjLnRjcF9zbG90X3RhYmxlX2VudHJpZXM9CisJc3VucnBjLnVkcF9zbG90X3RhYmxlX2VudHJpZXM9CisJCQlbTkZTLFNVTlJQQ10KKwkJCVNldHMgdGhlIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzCisJCQlSUEMgY2FsbHMgdGhhdCBjYW4gYmUgc2VudCBmcm9tIHRoZSBjbGllbnQgdG8gYQorCQkJc2VydmVyLiBJbmNyZWFzaW5nIHRoZXNlIHZhbHVlcyBtYXkgYWxsb3cgeW91IHRvCisJCQlpbXByb3ZlIHRocm91Z2hwdXQsIGJ1dCB3aWxsIGFsc28gaW5jcmVhc2UgdGhlCisJCQlhbW91bnQgb2YgbWVtb3J5IHJlc2VydmVkIGZvciB1c2UgYnkgdGhlIGNsaWVudC4KKwogCXN3aW90bGI9CVtJQS02NF0gTnVtYmVyIG9mIEkvTyBUTEIgc2xhYnMKIAogCXN3aXRjaGVzPQlbSFcsTTY4a10KQEAgLTI0ODAsNiArMjU1NCwxMSBAQAogCXRyYWNlX2J1Zl9zaXplPW5uW0tNR10KIAkJCVtGVFJBQ0VdIHdpbGwgc2V0IHRyYWNpbmcgYnVmZmVyIHNpemUuCiAKKwl0cmFjZV9ldmVudD1bZXZlbnQtbGlzdF0KKwkJCVtGVFJBQ0VdIFNldCBhbmQgc3RhcnQgc3BlY2lmaWVkIHRyYWNlIGV2ZW50cyBpbiBvcmRlcgorCQkJdG8gZmFjaWxpdGF0ZSBlYXJseSBib290IGRlYnVnZ2luZy4KKwkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dAorCiAJdHJpeD0JCVtIVyxPU1NdIE1lZGlhVHJpeCBBdWRpb1RyaXggUHJvCiAJCQlGb3JtYXQ6CiAJCQk8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8c2JfaW8+LDxzYl9pcnE+LDxzYl9kbWE+LDxtcHVfaW8+LDxtcHVfaXJxPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXlzLnR4dCBiL0RvY3VtZW50YXRpb24va2V5cy50eHQKaW5kZXggYjU2YWFjYy4uZTRkYmJkYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXlzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tleXMudHh0CkBAIC0yNiw3ICsyNiw3IEBACiAJLSBOb3RlcyBvbiBhY2Nlc3NpbmcgcGF5bG9hZCBjb250ZW50cwogCS0gRGVmaW5pbmcgYSBrZXkgdHlwZQogCS0gUmVxdWVzdC1rZXkgY2FsbGJhY2sgc2VydmljZQotCS0gS2V5IGFjY2VzcyBmaWxlc3lzdGVtCisJLSBHYXJiYWdlIGNvbGxlY3Rpb24KIAogCiA9PT09PT09PT09PT0KQEAgLTExMyw2ICsxMTMsOSBAQAogCiAgICAgICgqKSBEZWFkLiBUaGUga2V5J3MgdHlwZSB3YXMgdW5yZWdpc3RlcmVkLCBhbmQgc28gdGhlIGtleSBpcyBub3cgdXNlbGVzcy4KIAorS2V5cyBpbiB0aGUgbGFzdCB0aHJlZSBzdGF0ZXMgYXJlIHN1YmplY3QgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLiAgU2VlIHRoZQorc2VjdGlvbiBvbiAiR2FyYmFnZSBjb2xsZWN0aW9uIi4KKwogCiA9PT09PT09PT09PT09PT09PT09PQogS0VZIFNFUlZJQ0UgT1ZFUlZJRVcKQEAgLTc1NCw2ICs3NTcsMjYgQEAKICAgICAgc3VjY2Vzc2Z1bC4KIAogCisgKCopIEluc3RhbGwgdGhlIGNhbGxpbmcgcHJvY2VzcydzIHNlc3Npb24ga2V5cmluZyBvbiBpdHMgcGFyZW50LgorCisJbG9uZyBrZXljdGwoS0VZQ1RMX1NFU1NJT05fVE9fUEFSRU5UKTsKKworICAgICBUaGlzIGZ1bmN0aW9ucyBhdHRlbXB0cyB0byBpbnN0YWxsIHRoZSBjYWxsaW5nIHByb2Nlc3MncyBzZXNzaW9uIGtleXJpbmcKKyAgICAgb24gdG8gdGhlIGNhbGxpbmcgcHJvY2VzcydzIHBhcmVudCwgcmVwbGFjaW5nIHRoZSBwYXJlbnQncyBjdXJyZW50IHNlc3Npb24KKyAgICAga2V5cmluZy4KKworICAgICBUaGUgY2FsbGluZyBwcm9jZXNzIG11c3QgaGF2ZSB0aGUgc2FtZSBvd25lcnNoaXAgYXMgaXRzIHBhcmVudCwgdGhlCisgICAgIGtleXJpbmcgbXVzdCBoYXZlIHRoZSBzYW1lIG93bmVyc2hpcCBhcyB0aGUgY2FsbGluZyBwcm9jZXNzLCB0aGUgY2FsbGluZworICAgICBwcm9jZXNzIG11c3QgaGF2ZSBMSU5LIHBlcm1pc3Npb24gb24gdGhlIGtleXJpbmcgYW5kIHRoZSBhY3RpdmUgTFNNIG1vZHVsZQorICAgICBtdXN0bid0IGRlbnkgcGVybWlzc2lvbiwgb3RoZXJ3aXNlIGVycm9yIEVQRVJNIHdpbGwgYmUgcmV0dXJuZWQuCisKKyAgICAgRXJyb3IgRU5PTUVNIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlcmUgd2FzIGluc3VmZmljaWVudCBtZW1vcnkgdG8gY29tcGxldGUKKyAgICAgdGhlIG9wZXJhdGlvbiwgb3RoZXJ3aXNlIDAgd2lsbCBiZSByZXR1cm5lZCB0byBpbmRpY2F0ZSBzdWNjZXNzLgorCisgICAgIFRoZSBrZXlyaW5nIHdpbGwgYmUgcmVwbGFjZWQgbmV4dCB0aW1lIHRoZSBwYXJlbnQgcHJvY2VzcyBsZWF2ZXMgdGhlCisgICAgIGtlcm5lbCBhbmQgcmVzdW1lcyBleGVjdXRpbmcgdXNlcnNwYWNlLgorCisKID09PT09PT09PT09PT09PQogS0VSTkVMIFNFUlZJQ0VTCiA9PT09PT09PT09PT09PT0KQEAgLTEyMzEsMyArMTI1NCwxNyBAQAogCiBJbiB0aGlzIGNhc2UsIHRoZSBwcm9ncmFtIGlzbid0IHJlcXVpcmVkIHRvIGFjdHVhbGx5IGF0dGFjaCB0aGUga2V5IHRvIGEgcmluZzsKIHRoZSByaW5ncyBhcmUgcHJvdmlkZWQgZm9yIHJlZmVyZW5jZS4KKworCis9PT09PT09PT09PT09PT09PT0KK0dBUkJBR0UgQ09MTEVDVElPTgorPT09PT09PT09PT09PT09PT09CisKK0RlYWQga2V5cyAoZm9yIHdoaWNoIHRoZSB0eXBlIGhhcyBiZWVuIHJlbW92ZWQpIHdpbGwgYmUgYXV0b21hdGljYWxseSB1bmxpbmtlZAorZnJvbSB0aG9zZSBrZXlyaW5ncyB0aGF0IHBvaW50IHRvIHRoZW0gYW5kIGRlbGV0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSBieSBhCitiYWNrZ3JvdW5kIGdhcmJhZ2UgY29sbGVjdG9yLgorCitTaW1pbGFybHksIHJldm9rZWQgYW5kIGV4cGlyZWQga2V5cyB3aWxsIGJlIGdhcmJhZ2UgY29sbGVjdGVkLCBidXQgb25seSBhZnRlciBhCitjZXJ0YWluIGFtb3VudCBvZiB0aW1lIGhhcyBwYXNzZWQuICBUaGlzIHRpbWUgaXMgc2V0IGFzIGEgbnVtYmVyIG9mIHNlY29uZHMgaW46CisKKwkvcHJvYy9zeXMva2VybmVsL2tleXMvZ2NfZGVsYXkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va21lbWxlYWsudHh0IGIvRG9jdW1lbnRhdGlvbi9rbWVtbGVhay50eHQKaW5kZXggODkwNjgwMy4uMzRmNjYzOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rbWVtbGVhay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rbWVtbGVhay50eHQKQEAgLTI3LDYgKzI3LDEzIEBACiAKICAgIyBlY2hvIHNjYW4gPiAvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVhawogCitUbyBjbGVhciB0aGUgbGlzdCBvZiBhbGwgY3VycmVudCBwb3NzaWJsZSBtZW1vcnkgbGVha3M6CisKKyAgIyBlY2hvIGNsZWFyID4gL3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWsKKworTmV3IGxlYWtzIHdpbGwgdGhlbiBjb21lIHVwIHVwb24gcmVhZGluZyAvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVhaworYWdhaW4uCisKIE5vdGUgdGhhdCB0aGUgb3JwaGFuIG9iamVjdHMgYXJlIGxpc3RlZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFsbG9jYXRlZAogYW5kIG9uZSBvYmplY3QgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBtYXkgY2F1c2Ugb3RoZXIgc3Vic2VxdWVudAogb2JqZWN0cyB0byBiZSByZXBvcnRlZCBhcyBvcnBoYW4uCkBAIC00Miw2ICs0OSw5IEBACiAgIHNjYW49PHNlY3M+CS0gc2V0IHRoZSBhdXRvbWF0aWMgbWVtb3J5IHNjYW5uaW5nIHBlcmlvZCBpbiBzZWNvbmRzCiAJCSAgKGRlZmF1bHQgNjAwLCAwIHRvIHN0b3AgdGhlIGF1dG9tYXRpYyBzY2FubmluZykKICAgc2NhbgkJLSB0cmlnZ2VyIGEgbWVtb3J5IHNjYW4KKyAgY2xlYXIJCS0gY2xlYXIgbGlzdCBvZiBjdXJyZW50IG1lbW9yeSBsZWFrIHN1c3BlY3RzLCBkb25lIGJ5CisJCSAgbWFya2luZyBhbGwgY3VycmVudCByZXBvcnRlZCB1bnJlZmVyZW5jZWQgb2JqZWN0cyBncmV5CisgIGR1bXA9PGFkZHI+CS0gZHVtcCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGZvdW5kIGF0IDxhZGRyPgogCiBLbWVtbGVhayBjYW4gYWxzbyBiZSBkaXNhYmxlZCBhdCBib290LXRpbWUgYnkgcGFzc2luZyAia21lbWxlYWs9b2ZmIiBvbgogdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCkBAIC04Niw2ICs5NiwyNyBAQAogYWRkcmVzcyBpbnNpZGUgdGhlIGJsb2NrIGFkZHJlc3MgcmFuZ2UgdGhhdCBuZWVkIHRvIGJlIGZvdW5kIHNvIHRoYXQgdGhlCiBibG9jayBpcyBub3QgY29uc2lkZXJlZCBhIGxlYWsuIE9uZSBleGFtcGxlIGlzIF9fdm1hbGxvYygpLgogCitUZXN0aW5nIHNwZWNpZmljIHNlY3Rpb25zIHdpdGgga21lbWxlYWsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVcG9uIGluaXRpYWwgYm9vdHVwIHlvdXIgL3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWsgb3V0cHV0IHBhZ2UgbWF5IGJlCitxdWl0ZSBleHRlbnNpdmUuIFRoaXMgY2FuIGFsc28gYmUgdGhlIGNhc2UgaWYgeW91IGhhdmUgdmVyeSBidWdneSBjb2RlCit3aGVuIGRvaW5nIGRldmVsb3BtZW50LiBUbyB3b3JrIGFyb3VuZCB0aGVzZSBzaXR1YXRpb25zIHlvdSBjYW4gdXNlIHRoZQorJ2NsZWFyJyBjb21tYW5kIHRvIGNsZWFyIGFsbCByZXBvcnRlZCB1bnJlZmVyZW5jZWQgb2JqZWN0cyBmcm9tIHRoZQorL3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWsgb3V0cHV0LiBCeSBpc3N1aW5nIGEgJ3NjYW4nIGFmdGVyIGEgJ2NsZWFyJworeW91IGNhbiBmaW5kIG5ldyB1bnJlZmVyZW5jZWQgb2JqZWN0czsgdGhpcyBzaG91bGQgaGVscCB3aXRoIHRlc3RpbmcKK3NwZWNpZmljIHNlY3Rpb25zIG9mIGNvZGUuCisKK1RvIHRlc3QgYSBjcml0aWNhbCBzZWN0aW9uIG9uIGRlbWFuZCB3aXRoIGEgY2xlYW4ga21lbWxlYWsgZG86CisKKyAgIyBlY2hvIGNsZWFyID4gL3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWsKKyAgLi4uIHRlc3QgeW91ciBrZXJuZWwgb3IgbW9kdWxlcyAuLi4KKyAgIyBlY2hvIHNjYW4gPiAvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVhaworCitUaGVuIGFzIHVzdWFsIHRvIGdldCB5b3VyIHJlcG9ydCB3aXRoOgorCisgICMgY2F0IC9zeXMva2VybmVsL2RlYnVnL2ttZW1sZWFrCisKIEttZW1sZWFrIEFQSQogLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3ZtL2FwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNGJjOGNmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9rdm0vYXBpLnR4dApAQCAtMCwwICsxLDc1OSBAQAorVGhlIERlZmluaXRpdmUgS1ZNIChLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lKSBBUEkgRG9jdW1lbnRhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBHZW5lcmFsIGRlc2NyaXB0aW9uCisKK1RoZSBrdm0gQVBJIGlzIGEgc2V0IG9mIGlvY3RscyB0aGF0IGFyZSBpc3N1ZWQgdG8gY29udHJvbCB2YXJpb3VzIGFzcGVjdHMKK29mIGEgdmlydHVhbCBtYWNoaW5lLiAgVGhlIGlvY3RscyBiZWxvbmcgdG8gdGhyZWUgY2xhc3NlcworCisgLSBTeXN0ZW0gaW9jdGxzOiBUaGVzZSBxdWVyeSBhbmQgc2V0IGdsb2JhbCBhdHRyaWJ1dGVzIHdoaWNoIGFmZmVjdCB0aGUKKyAgIHdob2xlIGt2bSBzdWJzeXN0ZW0uICBJbiBhZGRpdGlvbiBhIHN5c3RlbSBpb2N0bCBpcyB1c2VkIHRvIGNyZWF0ZQorICAgdmlydHVhbCBtYWNoaW5lcworCisgLSBWTSBpb2N0bHM6IFRoZXNlIHF1ZXJ5IGFuZCBzZXQgYXR0cmlidXRlcyB0aGF0IGFmZmVjdCBhbiBlbnRpcmUgdmlydHVhbAorICAgbWFjaGluZSwgZm9yIGV4YW1wbGUgbWVtb3J5IGxheW91dC4gIEluIGFkZGl0aW9uIGEgVk0gaW9jdGwgaXMgdXNlZCB0bworICAgY3JlYXRlIHZpcnR1YWwgY3B1cyAodmNwdXMpLgorCisgICBPbmx5IHJ1biBWTSBpb2N0bHMgZnJvbSB0aGUgc2FtZSBwcm9jZXNzIChhZGRyZXNzIHNwYWNlKSB0aGF0IHdhcyB1c2VkCisgICB0byBjcmVhdGUgdGhlIFZNLgorCisgLSB2Y3B1IGlvY3RsczogVGhlc2UgcXVlcnkgYW5kIHNldCBhdHRyaWJ1dGVzIHRoYXQgY29udHJvbCB0aGUgb3BlcmF0aW9uCisgICBvZiBhIHNpbmdsZSB2aXJ0dWFsIGNwdS4KKworICAgT25seSBydW4gdmNwdSBpb2N0bHMgZnJvbSB0aGUgc2FtZSB0aHJlYWQgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhlCisgICB2Y3B1LgorCisyLiBGaWxlIGRlc2NyaXRwb3JzCisKK1RoZSBrdm0gQVBJIGlzIGNlbnRlcmVkIGFyb3VuZCBmaWxlIGRlc2NyaXB0b3JzLiAgQW4gaW5pdGlhbAorb3BlbigiL2Rldi9rdm0iKSBvYnRhaW5zIGEgaGFuZGxlIHRvIHRoZSBrdm0gc3Vic3lzdGVtOyB0aGlzIGhhbmRsZQorY2FuIGJlIHVzZWQgdG8gaXNzdWUgc3lzdGVtIGlvY3Rscy4gIEEgS1ZNX0NSRUFURV9WTSBpb2N0bCBvbiB0aGlzCitoYW5kbGUgd2lsbCBjcmVhdGUgYSBWTSBmaWxlIGRlc2NyaXByb3Igd2hpY2ggY2FuIGJlIHVzZWQgdG8gaXNzdWUgVk0KK2lvY3Rscy4gIEEgS1ZNX0NSRUFURV9WQ1BVIGlvY3RsIG9uIGEgVk0gZmQgd2lsbCBjcmVhdGUgYSB2aXJ0dWFsIGNwdQorYW5kIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvciBwb2ludGluZyB0byBpdC4gIEZpbmFsbHksIGlvY3RscyBvbiBhIHZjcHUKK2ZkIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHZjcHUsIGluY2x1ZGluZyB0aGUgaW1wb3J0YW50IHRhc2sgb2YKK2FjdHVhbGx5IHJ1bm5pbmcgZ3Vlc3QgY29kZS4KKworSW4gZ2VuZXJhbCBmaWxlIGRlc2NyaXB0b3JzIGNhbiBiZSBtaWdyYXRlZCBhbW9uZyBwcm9jZXNzZXMgYnkgbWVhbnMKK29mIGZvcmsoKSBhbmQgdGhlIFNDTV9SSUdIVFMgZmFjaWxpdHkgb2YgdW5peCBkb21haW4gc29ja2V0LiAgVGhlc2UKK2tpbmRzIG9mIHRyaWNrcyBhcmUgZXhwbGljaXRseSBub3Qgc3VwcG9ydGVkIGJ5IGt2bS4gIFdoaWxlIHRoZXkgd2lsbAorbm90IGNhdXNlIGhhcm0gdG8gdGhlIGhvc3QsIHRoZWlyIGFjdHVhbCBiZWhhdmlvciBpcyBub3QgZ3VhcmFudGVlZCBieQordGhlIEFQSS4gIFRoZSBvbmx5IHN1cHBvcnRlZCB1c2UgaXMgb25lIHZpcnR1YWwgbWFjaGluZSBwZXIgcHJvY2VzcywKK2FuZCBvbmUgdmNwdSBwZXIgdGhyZWFkLgorCiszLiBFeHRlbnNpb25zCisKK0FzIG9mIExpbnV4IDIuNi4yMiwgdGhlIEtWTSBBQkkgaGFzIGJlZW4gc3RhYmlsaXplZDogbm8gYmFja3dhcmQKK2luY29tcGF0aWJsZSBjaGFuZ2UgYXJlIGFsbG93ZWQuICBIb3dldmVyLCB0aGVyZSBpcyBhbiBleHRlbnNpb24KK2ZhY2lsaXR5IHRoYXQgYWxsb3dzIGJhY2t3YXJkLWNvbXBhdGlibGUgZXh0ZW5zaW9ucyB0byB0aGUgQVBJIHRvIGJlCitxdWVyaWVkIGFuZCB1c2VkLgorCitUaGUgZXh0ZW5zaW9uIG1lY2hhbmlzbSBpcyBub3QgYmFzZWQgb24gb24gdGhlIExpbnV4IHZlcnNpb24gbnVtYmVyLgorSW5zdGVhZCwga3ZtIGRlZmluZXMgZXh0ZW5zaW9uIGlkZW50aWZpZXJzIGFuZCBhIGZhY2lsaXR5IHRvIHF1ZXJ5Cit3aGV0aGVyIGEgcGFydGljdWxhciBleHRlbnNpb24gaWRlbnRpZmllciBpcyBhdmFpbGFibGUuICBJZiBpdCBpcywgYQorc2V0IG9mIGlvY3RscyBpcyBhdmFpbGFibGUgZm9yIGFwcGxpY2F0aW9uIHVzZS4KKworNC4gQVBJIGRlc2NyaXB0aW9uCisKK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgaW9jdGxzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29udHJvbCBrdm0gZ3Vlc3RzLgorRm9yIGVhY2ggaW9jdGwsIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgYWxvbmcgd2l0aCBhCitkZXNjcmlwdGlvbjoKKworICBDYXBhYmlsaXR5OiB3aGljaCBLVk0gZXh0ZW5zaW9uIHByb3ZpZGVzIHRoaXMgaW9jdGwuICBDYW4gYmUgJ2Jhc2ljJywKKyAgICAgIHdoaWNoIG1lYW5zIHRoYXQgaXMgd2lsbCBiZSBwcm92aWRlZCBieSBhbnkga2VybmVsIHRoYXQgc3VwcG9ydHMKKyAgICAgIEFQSSB2ZXJzaW9uIDEyIChzZWUgc2VjdGlvbiA0LjEpLCBvciBhIEtWTV9DQVBfeHl6IGNvbnN0YW50LCB3aGljaAorICAgICAgbWVhbnMgYXZhaWxhYmlsaXR5IG5lZWRzIHRvIGJlIGNoZWNrZWQgd2l0aCBLVk1fQ0hFQ0tfRVhURU5TSU9OCisgICAgICAoc2VlIHNlY3Rpb24gNC40KS4KKworICBBcmNoaXRlY3R1cmVzOiB3aGljaCBpbnN0cnVjdGlvbiBzZXQgYXJjaGl0ZWN0dXJlcyBwcm92aWRlIHRoaXMgaW9jdGwuCisgICAgICB4ODYgaW5jbHVkZXMgYm90aCBpMzg2IGFuZCB4ODZfNjQuCisKKyAgVHlwZTogc3lzdGVtLCB2bSwgb3IgdmNwdS4KKworICBQYXJhbWV0ZXJzOiB3aGF0IHBhcmFtZXRlcnMgYXJlIGFjY2VwdGVkIGJ5IHRoZSBpb2N0bC4KKworICBSZXR1cm5zOiB0aGUgcmV0dXJuIHZhbHVlLiAgR2VuZXJhbCBlcnJvciBudW1iZXJzIChFQkFERiwgRU5PTUVNLCBFSU5WQUwpCisgICAgICBhcmUgbm90IGRldGFpbGVkLCBidXQgZXJyb3JzIHdpdGggc3BlY2lmaWMgbWVhbmluZ3MgYXJlLgorCis0LjEgS1ZNX0dFVF9BUElfVkVSU0lPTgorCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogYWxsCitUeXBlOiBzeXN0ZW0gaW9jdGwKK1BhcmFtZXRlcnM6IG5vbmUKK1JldHVybnM6IHRoZSBjb25zdGFudCBLVk1fQVBJX1ZFUlNJT04gKD0xMikKKworVGhpcyBpZGVudGlmaWVzIHRoZSBBUEkgdmVyc2lvbiBhcyB0aGUgc3RhYmxlIGt2bSBBUEkuIEl0IGlzIG5vdAorZXhwZWN0ZWQgdGhhdCB0aGlzIG51bWJlciB3aWxsIGNoYW5nZS4gIEhvd2V2ZXIsIExpbnV4IDIuNi4yMCBhbmQKKzIuNi4yMSByZXBvcnQgZWFybGllciB2ZXJzaW9uczsgdGhlc2UgYXJlIG5vdCBkb2N1bWVudGVkIGFuZCBub3QKK3N1cHBvcnRlZC4gIEFwcGxpY2F0aW9ucyBzaG91bGQgcmVmdXNlIHRvIHJ1biBpZiBLVk1fR0VUX0FQSV9WRVJTSU9OCityZXR1cm5zIGEgdmFsdWUgb3RoZXIgdGhhbiAxMi4gIElmIHRoaXMgY2hlY2sgcGFzc2VzLCBhbGwgaW9jdGxzCitkZXNjcmliZWQgYXMgJ2Jhc2ljJyB3aWxsIGJlIGF2YWlsYWJsZS4KKworNC4yIEtWTV9DUkVBVEVfVk0KKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IGFsbAorVHlwZTogc3lzdGVtIGlvY3RsCitQYXJhbWV0ZXJzOiBub25lCitSZXR1cm5zOiBhIFZNIGZkIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgbmV3IHZpcnR1YWwgbWFjaGluZS4KKworVGhlIG5ldyBWTSBoYXMgbm8gdmlydHVhbCBjcHVzIGFuZCBubyBtZW1vcnkuICBBbiBtbWFwKCkgb2YgYSBWTSBmZAord2lsbCBhY2Nlc3MgdGhlIHZpcnR1YWwgbWFjaGluZSdzIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2U7IG9mZnNldCB6ZXJvCitjb3JyZXNwb25kcyB0byBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIHplcm8uICBVc2Ugb2YgbW1hcCgpIG9uIGEgVk0gZmQKK2lzIGRpc2NvdXJhZ2VkIGlmIHVzZXJzcGFjZSBtZW1vcnkgYWxsb2NhdGlvbiAoS1ZNX0NBUF9VU0VSX01FTU9SWSkgaXMKK2F2YWlsYWJsZS4KKworNC4zIEtWTV9HRVRfTVNSX0lOREVYX0xJU1QKKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IHg4NgorVHlwZTogc3lzdGVtCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21zcl9saXN0IChpbi9vdXQpCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3M7IC0xIG9uIGVycm9yCitFcnJvcnM6CisgIEUyQklHOiAgICAgdGhlIG1zciBpbmRleCBsaXN0IGlzIHRvIGJlIHRvIGZpdCBpbiB0aGUgYXJyYXkgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgdGhlIHVzZXIuCisKK3N0cnVjdCBrdm1fbXNyX2xpc3QgeworCV9fdTMyIG5tc3JzOyAvKiBudW1iZXIgb2YgbXNycyBpbiBlbnRyaWVzICovCisJX191MzIgaW5kaWNlc1swXTsKK307CisKK1RoaXMgaW9jdGwgcmV0dXJucyB0aGUgZ3Vlc3QgbXNycyB0aGF0IGFyZSBzdXBwb3J0ZWQuICBUaGUgbGlzdCB2YXJpZXMKK2J5IGt2bSB2ZXJzaW9uIGFuZCBob3N0IHByb2Nlc3NvciwgYnV0IGRvZXMgbm90IGNoYW5nZSBvdGhlcndpc2UuICBUaGUKK3VzZXIgZmlsbHMgaW4gdGhlIHNpemUgb2YgdGhlIGluZGljZXMgYXJyYXkgaW4gbm1zcnMsIGFuZCBpbiByZXR1cm4KK2t2bSBhZGp1c3RzIG5tc3JzIHRvIHJlZmxlY3QgdGhlIGFjdHVhbCBudW1iZXIgb2YgbXNycyBhbmQgZmlsbHMgaW4KK3RoZSBpbmRpY2VzIGFycmF5IHdpdGggdGhlaXIgbnVtYmVycy4KKworNC40IEtWTV9DSEVDS19FWFRFTlNJT04KKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IGFsbAorVHlwZTogc3lzdGVtIGlvY3RsCitQYXJhbWV0ZXJzOiBleHRlbnNpb24gaWRlbnRpZmllciAoS1ZNX0NBUF8qKQorUmV0dXJuczogMCBpZiB1bnN1cHBvcnRlZDsgMSAob3Igc29tZSBvdGhlciBwb3NpdGl2ZSBpbnRlZ2VyKSBpZiBzdXBwb3J0ZWQKKworVGhlIEFQSSBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIHF1ZXJ5IGFib3V0IGV4dGVuc2lvbnMgdG8gdGhlIGNvcmUKK2t2bSBBUEkuICBVc2Vyc3BhY2UgcGFzc2VzIGFuIGV4dGVuc2lvbiBpZGVudGlmaWVyIChhbiBpbnRlZ2VyKSBhbmQKK3JlY2VpdmVzIGFuIGludGVnZXIgdGhhdCBkZXNjcmliZXMgdGhlIGV4dGVuc2lvbiBhdmFpbGFiaWxpdHkuCitHZW5lcmFsbHkgMCBtZWFucyBubyBhbmQgMSBtZWFucyB5ZXMsIGJ1dCBzb21lIGV4dGVuc2lvbnMgbWF5IHJlcG9ydAorYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0aGUgaW50ZWdlciByZXR1cm4gdmFsdWUuCisKKzQuNSBLVk1fR0VUX1ZDUFVfTU1BUF9TSVpFCisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiBhbGwKK1R5cGU6IHN5c3RlbSBpb2N0bAorUGFyYW1ldGVyczogbm9uZQorUmV0dXJuczogc2l6ZSBvZiB2Y3B1IG1tYXAgYXJlYSwgaW4gYnl0ZXMKKworVGhlIEtWTV9SVU4gaW9jdGwgKGNmLikgY29tbXVuaWNhdGVzIHdpdGggdXNlcnNwYWNlIHZpYSBhIHNoYXJlZAorbWVtb3J5IHJlZ2lvbi4gIFRoaXMgaW9jdGwgcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGF0IHJlZ2lvbi4gIFNlZSB0aGUKK0tWTV9SVU4gZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworNC42IEtWTV9TRVRfTUVNT1JZX1JFR0lPTgorCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogYWxsCitUeXBlOiB2bSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV9tZW1vcnlfcmVnaW9uIChpbikKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworc3RydWN0IGt2bV9tZW1vcnlfcmVnaW9uIHsKKwlfX3UzMiBzbG90OworCV9fdTMyIGZsYWdzOworCV9fdTY0IGd1ZXN0X3BoeXNfYWRkcjsKKwlfX3U2NCBtZW1vcnlfc2l6ZTsgLyogYnl0ZXMgKi8KK307CisKKy8qIGZvciBrdm1fbWVtb3J5X3JlZ2lvbjo6ZmxhZ3MgKi8KKyNkZWZpbmUgS1ZNX01FTV9MT0dfRElSVFlfUEFHRVMgIDFVTAorCitUaGlzIGlvY3RsIGFsbG93cyB0aGUgdXNlciB0byBjcmVhdGUgb3IgbW9kaWZ5IGEgZ3Vlc3QgcGh5c2ljYWwgbWVtb3J5CitzbG90LiAgV2hlbiBjaGFuZ2luZyBhbiBleGlzdGluZyBzbG90LCBpdCBtYXkgYmUgbW92ZWQgaW4gdGhlIGd1ZXN0CitwaHlzaWNhbCBtZW1vcnkgc3BhY2UsIG9yIGl0cyBmbGFncyBtYXkgYmUgbW9kaWZpZWQuICBJdCBtYXkgbm90IGJlCityZXNpemVkLiAgU2xvdHMgbWF5IG5vdCBvdmVybGFwLgorCitUaGUgZmxhZ3MgZmllbGQgc3VwcG9ydHMganVzdCBvbmUgZmxhZywgS1ZNX01FTV9MT0dfRElSVFlfUEFHRVMsIHdoaWNoCitpbnN0cnVjdHMga3ZtIHRvIGtlZXAgdHJhY2sgb2Ygd3JpdGVzIHRvIG1lbW9yeSB3aXRoaW4gdGhlIHNsb3QuICBTZWUKK3RoZSBLVk1fR0VUX0RJUlRZX0xPRyBpb2N0bC4KKworSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiBpb2N0bCBpbnN0ZWFkCitvZiB0aGlzIEFQSSwgaWYgYXZhaWxhYmxlLiAgVGhpcyBuZXdlciBBUEkgYWxsb3dzIHBsYWNpbmcgZ3Vlc3QgbWVtb3J5CithdCBzcGVjaWZpZWQgbG9jYXRpb25zIGluIHRoZSBob3N0IGFkZHJlc3Mgc3BhY2UsIHlpZWxkaW5nIGJldHRlcgorY29udHJvbCBhbmQgZWFzeSBhY2Nlc3MuCisKKzQuNiBLVk1fQ1JFQVRFX1ZDUFUKKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IGFsbAorVHlwZTogdm0gaW9jdGwKK1BhcmFtZXRlcnM6IHZjcHUgaWQgKGFwaWMgaWQgb24geDg2KQorUmV0dXJuczogdmNwdSBmZCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitUaGlzIEFQSSBhZGRzIGEgdmNwdSB0byBhIHZpcnR1YWwgbWFjaGluZS4gIFRoZSB2Y3B1IGlkIGlzIGEgc21hbGwgaW50ZWdlcgoraW4gdGhlIHJhbmdlIFswLCBtYXhfdmNwdXMpLgorCis0LjcgS1ZNX0dFVF9ESVJUWV9MT0cgKHZtIGlvY3RsKQorCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogeDg2CitUeXBlOiB2bSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV9kaXJ0eV9sb2cgKGluL291dCkKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworLyogZm9yIEtWTV9HRVRfRElSVFlfTE9HICovCitzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyB7CisJX191MzIgc2xvdDsKKwlfX3UzMiBwYWRkaW5nOworCXVuaW9uIHsKKwkJdm9pZCBfX3VzZXIgKmRpcnR5X2JpdG1hcDsgLyogb25lIGJpdCBwZXIgcGFnZSAqLworCQlfX3U2NCBwYWRkaW5nOworCX07Cit9OworCitHaXZlbiBhIG1lbW9yeSBzbG90LCByZXR1cm4gYSBiaXRtYXAgY29udGFpbmluZyBhbnkgcGFnZXMgZGlydGllZAorc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGlzIGlvY3RsLiAgQml0IDAgaXMgdGhlIGZpcnN0IHBhZ2UgaW4gdGhlCittZW1vcnkgc2xvdC4gIEVuc3VyZSB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBjbGVhcmVkIHRvIGF2b2lkIHBhZGRpbmcKK2lzc3Vlcy4KKworNC44IEtWTV9TRVRfTUVNT1JZX0FMSUFTCisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiB4ODYKK1R5cGU6IHZtIGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21lbW9yeV9hbGlhcyAoaW4pCitSZXR1cm5zOiAwIChzdWNjZXNzKSwgLTEgKGVycm9yKQorCitzdHJ1Y3Qga3ZtX21lbW9yeV9hbGlhcyB7CisJX191MzIgc2xvdDsgIC8qIHRoaXMgaGFzIGEgZGlmZmVyZW50IG5hbWVzcGFjZSB0aGFuIG1lbW9yeSBzbG90cyAqLworCV9fdTMyIGZsYWdzOworCV9fdTY0IGd1ZXN0X3BoeXNfYWRkcjsKKwlfX3U2NCBtZW1vcnlfc2l6ZTsKKwlfX3U2NCB0YXJnZXRfcGh5c19hZGRyOworfTsKKworRGVmaW5lcyBhIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgcmVnaW9uIGFzIGFuIGFsaWFzIHRvIGFub3RoZXIKK3JlZ2lvbi4gIFVzZWZ1bCBmb3IgYWxpYXNlZCBhZGRyZXNzLCBmb3IgZXhhbXBsZSB0aGUgVkdBIGxvdyBtZW1vcnkKK3dpbmRvdy4gU2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggdXNlcnNwYWNlIG1lbW9yeS4KKworNC45IEtWTV9SVU4KKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IGFsbAorVHlwZTogdmNwdSBpb2N0bAorUGFyYW1ldGVyczogbm9uZQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorRXJyb3JzOgorICBFSU5UUjogICAgIGFuIHVubWFza2VkIHNpZ25hbCBpcyBwZW5kaW5nCisKK1RoaXMgaW9jdGwgaXMgdXNlZCB0byBydW4gYSBndWVzdCB2aXJ0dWFsIGNwdS4gIFdoaWxlIHRoZXJlIGFyZSBubworZXhwbGljaXQgcGFyYW1ldGVycywgdGhlcmUgaXMgYW4gaW1wbGljaXQgcGFyYW1ldGVyIGJsb2NrIHRoYXQgY2FuIGJlCitvYnRhaW5lZCBieSBtbWFwKClpbmcgdGhlIHZjcHUgZmQgYXQgb2Zmc2V0IDAsIHdpdGggdGhlIHNpemUgZ2l2ZW4gYnkKK0tWTV9HRVRfVkNQVV9NTUFQX1NJWkUuICBUaGUgcGFyYW1ldGVyIGJsb2NrIGlzIGZvcm1hdHRlZCBhcyBhICdzdHJ1Y3QKK2t2bV9ydW4nIChzZWUgYmVsb3cpLgorCis0LjEwIEtWTV9HRVRfUkVHUworCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogYWxsCitUeXBlOiB2Y3B1IGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3JlZ3MgKG91dCkKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworUmVhZHMgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgZnJvbSB0aGUgdmNwdS4KKworLyogeDg2ICovCitzdHJ1Y3Qga3ZtX3JlZ3MgeworCS8qIG91dCAoS1ZNX0dFVF9SRUdTKSAvIGluIChLVk1fU0VUX1JFR1MpICovCisJX191NjQgcmF4LCByYngsIHJjeCwgcmR4OworCV9fdTY0IHJzaSwgcmRpLCByc3AsIHJicDsKKwlfX3U2NCByOCwgIHI5LCAgcjEwLCByMTE7CisJX191NjQgcjEyLCByMTMsIHIxNCwgcjE1OworCV9fdTY0IHJpcCwgcmZsYWdzOworfTsKKworNC4xMSBLVk1fU0VUX1JFR1MKKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IGFsbAorVHlwZTogdmNwdSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV9yZWdzIChpbikKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworV3JpdGVzIHRoZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGludG8gdGhlIHZjcHUuCisKK1NlZSBLVk1fR0VUX1JFR1MgZm9yIHRoZSBkYXRhIHN0cnVjdHVyZS4KKworNC4xMiBLVk1fR0VUX1NSRUdTCisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiB4ODYKK1R5cGU6IHZjcHUgaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fc3JlZ3MgKG91dCkKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworUmVhZHMgc3BlY2lhbCByZWdpc3RlcnMgZnJvbSB0aGUgdmNwdS4KKworLyogeDg2ICovCitzdHJ1Y3Qga3ZtX3NyZWdzIHsKKwlzdHJ1Y3Qga3ZtX3NlZ21lbnQgY3MsIGRzLCBlcywgZnMsIGdzLCBzczsKKwlzdHJ1Y3Qga3ZtX3NlZ21lbnQgdHIsIGxkdDsKKwlzdHJ1Y3Qga3ZtX2R0YWJsZSBnZHQsIGlkdDsKKwlfX3U2NCBjcjAsIGNyMiwgY3IzLCBjcjQsIGNyODsKKwlfX3U2NCBlZmVyOworCV9fdTY0IGFwaWNfYmFzZTsKKwlfX3U2NCBpbnRlcnJ1cHRfYml0bWFwWyhLVk1fTlJfSU5URVJSVVBUUyArIDYzKSAvIDY0XTsKK307CisKK2ludGVycnVwdF9iaXRtYXAgaXMgYSBiaXRtYXAgb2YgcGVuZGluZyBleHRlcm5hbCBpbnRlcnJ1cHRzLiAgQXQgbW9zdAorb25lIGJpdCBtYXkgYmUgc2V0LiAgVGhpcyBpbnRlcnJ1cHQgaGFzIGJlZW4gYWNrbm93bGVkZ2VkIGJ5IHRoZSBBUElDCitidXQgbm90IHlldCBpbmplY3RlZCBpbnRvIHRoZSBjcHUgY29yZS4KKworNC4xMyBLVk1fU0VUX1NSRUdTCisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiB4ODYKK1R5cGU6IHZjcHUgaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fc3JlZ3MgKGluKQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitXcml0ZXMgc3BlY2lhbCByZWdpc3RlcnMgaW50byB0aGUgdmNwdS4gIFNlZSBLVk1fR0VUX1NSRUdTIGZvciB0aGUKK2RhdGEgc3RydWN0dXJlcy4KKworNC4xNCBLVk1fVFJBTlNMQVRFCisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiB4ODYKK1R5cGU6IHZjcHUgaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fdHJhbnNsYXRpb24gKGluL291dCkKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworVHJhbnNsYXRlcyBhIHZpcnR1YWwgYWRkcmVzcyBhY2NvcmRpbmcgdG8gdGhlIHZjcHUncyBjdXJyZW50IGFkZHJlc3MKK3RyYW5zbGF0aW9uIG1vZGUuCisKK3N0cnVjdCBrdm1fdHJhbnNsYXRpb24geworCS8qIGluICovCisJX191NjQgbGluZWFyX2FkZHJlc3M7CisKKwkvKiBvdXQgKi8KKwlfX3U2NCBwaHlzaWNhbF9hZGRyZXNzOworCV9fdTggIHZhbGlkOworCV9fdTggIHdyaXRlYWJsZTsKKwlfX3U4ICB1c2VybW9kZTsKKwlfX3U4ICBwYWRbNV07Cit9OworCis0LjE1IEtWTV9JTlRFUlJVUFQKKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IHg4NgorVHlwZTogdmNwdSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV9pbnRlcnJ1cHQgKGluKQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitRdWV1ZXMgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgdmVjdG9yIHRvIGJlIGluamVjdGVkLiAgVGhpcyBpcyBvbmx5Cit1c2VmdWwgaWYgaW4ta2VybmVsIGxvY2FsIEFQSUMgaXMgbm90IHVzZWQuCisKKy8qIGZvciBLVk1fSU5URVJSVVBUICovCitzdHJ1Y3Qga3ZtX2ludGVycnVwdCB7CisJLyogaW4gKi8KKwlfX3UzMiBpcnE7Cit9OworCitOb3RlICdpcnEnIGlzIGFuIGludGVycnVwdCB2ZWN0b3IsIG5vdCBhbiBpbnRlcnJ1cHQgcGluIG9yIGxpbmUuCisKKzQuMTYgS1ZNX0RFQlVHX0dVRVNUCisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiBub25lCitUeXBlOiB2Y3B1IGlvY3RsCitQYXJhbWV0ZXJzOiBub25lKQorUmV0dXJuczogLTEgb24gZXJyb3IKKworU3VwcG9ydCBmb3IgdGhpcyBoYXMgYmVlbiByZW1vdmVkLiAgVXNlIEtWTV9TRVRfR1VFU1RfREVCVUcgaW5zdGVhZC4KKworNC4xNyBLVk1fR0VUX01TUlMKKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IHg4NgorVHlwZTogdmNwdSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV9tc3JzIChpbi9vdXQpCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK1JlYWRzIG1vZGVsLXNwZWNpZmljIHJlZ2lzdGVycyBmcm9tIHRoZSB2Y3B1LiAgU3VwcG9ydGVkIG1zciBpbmRpY2VzIGNhbgorYmUgb2J0YWluZWQgdXNpbmcgS1ZNX0dFVF9NU1JfSU5ERVhfTElTVC4KKworc3RydWN0IGt2bV9tc3JzIHsKKwlfX3UzMiBubXNyczsgLyogbnVtYmVyIG9mIG1zcnMgaW4gZW50cmllcyAqLworCV9fdTMyIHBhZDsKKworCXN0cnVjdCBrdm1fbXNyX2VudHJ5IGVudHJpZXNbMF07Cit9OworCitzdHJ1Y3Qga3ZtX21zcl9lbnRyeSB7CisJX191MzIgaW5kZXg7CisJX191MzIgcmVzZXJ2ZWQ7CisJX191NjQgZGF0YTsKK307CisKK0FwcGxpY2F0aW9uIGNvZGUgc2hvdWxkIHNldCB0aGUgJ25tc3JzJyBtZW1iZXIgKHdoaWNoIGluZGljYXRlcyB0aGUKK3NpemUgb2YgdGhlIGVudHJpZXMgYXJyYXkpIGFuZCB0aGUgJ2luZGV4JyBtZW1iZXIgb2YgZWFjaCBhcnJheSBlbnRyeS4KK2t2bSB3aWxsIGZpbGwgaW4gdGhlICdkYXRhJyBtZW1iZXIuCisKKzQuMTggS1ZNX1NFVF9NU1JTCisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiB4ODYKK1R5cGU6IHZjcHUgaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fbXNycyAoaW4pCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK1dyaXRlcyBtb2RlbC1zcGVjaWZpYyByZWdpc3RlcnMgdG8gdGhlIHZjcHUuICBTZWUgS1ZNX0dFVF9NU1JTIGZvciB0aGUKK2RhdGEgc3RydWN0dXJlcy4KKworQXBwbGljYXRpb24gY29kZSBzaG91bGQgc2V0IHRoZSAnbm1zcnMnIG1lbWJlciAod2hpY2ggaW5kaWNhdGVzIHRoZQorc2l6ZSBvZiB0aGUgZW50cmllcyBhcnJheSksIGFuZCB0aGUgJ2luZGV4JyBhbmQgJ2RhdGEnIG1lbWJlcnMgb2YgZWFjaAorYXJyYXkgZW50cnkuCisKKzQuMTkgS1ZNX1NFVF9DUFVJRAorCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogeDg2CitUeXBlOiB2Y3B1IGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2NwdWlkIChpbikKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworRGVmaW5lcyB0aGUgdmNwdSByZXNwb25zZXMgdG8gdGhlIGNwdWlkIGluc3RydWN0aW9uLiAgQXBwbGljYXRpb25zCitzaG91bGQgdXNlIHRoZSBLVk1fU0VUX0NQVUlEMiBpb2N0bCBpZiBhdmFpbGFibGUuCisKKworc3RydWN0IGt2bV9jcHVpZF9lbnRyeSB7CisJX191MzIgZnVuY3Rpb247CisJX191MzIgZWF4OworCV9fdTMyIGVieDsKKwlfX3UzMiBlY3g7CisJX191MzIgZWR4OworCV9fdTMyIHBhZGRpbmc7Cit9OworCisvKiBmb3IgS1ZNX1NFVF9DUFVJRCAqLworc3RydWN0IGt2bV9jcHVpZCB7CisJX191MzIgbmVudDsKKwlfX3UzMiBwYWRkaW5nOworCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkgZW50cmllc1swXTsKK307CisKKzQuMjAgS1ZNX1NFVF9TSUdOQUxfTUFTSworCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogeDg2CitUeXBlOiB2Y3B1IGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3NpZ25hbF9tYXNrIChpbikKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworRGVmaW5lcyB3aGljaCBzaWduYWxzIGFyZSBibG9ja2VkIGR1cmluZyBleGVjdXRpb24gb2YgS1ZNX1JVTi4gIFRoaXMKK3NpZ25hbCBtYXNrIHRlbXBvcmFyaWx5IG92ZXJyaWRlcyB0aGUgdGhyZWFkcyBzaWduYWwgbWFzay4gIEFueQordW5ibG9ja2VkIHNpZ25hbCByZWNlaXZlZCAoZXhjZXB0IFNJR0tJTEwgYW5kIFNJR1NUT1AsIHdoaWNoIHJldGFpbgordGhlaXIgdHJhZGl0aW9uYWwgYmVoYXZpb3VyKSB3aWxsIGNhdXNlIEtWTV9SVU4gdG8gcmV0dXJuIHdpdGggLUVJTlRSLgorCitOb3RlIHRoZSBzaWduYWwgd2lsbCBvbmx5IGJlIGRlbGl2ZXJlZCBpZiBub3QgYmxvY2tlZCBieSB0aGUgb3JpZ2luYWwKK3NpZ25hbCBtYXNrLgorCisvKiBmb3IgS1ZNX1NFVF9TSUdOQUxfTUFTSyAqLworc3RydWN0IGt2bV9zaWduYWxfbWFzayB7CisJX191MzIgbGVuOworCV9fdTggIHNpZ3NldFswXTsKK307CisKKzQuMjEgS1ZNX0dFVF9GUFUKKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IHg4NgorVHlwZTogdmNwdSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV9mcHUgKG91dCkKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworUmVhZHMgdGhlIGZsb2F0aW5nIHBvaW50IHN0YXRlIGZyb20gdGhlIHZjcHUuCisKKy8qIGZvciBLVk1fR0VUX0ZQVSBhbmQgS1ZNX1NFVF9GUFUgKi8KK3N0cnVjdCBrdm1fZnB1IHsKKwlfX3U4ICBmcHJbOF1bMTZdOworCV9fdTE2IGZjdzsKKwlfX3UxNiBmc3c7CisJX191OCAgZnR3eDsgIC8qIGluIGZ4c2F2ZSBmb3JtYXQgKi8KKwlfX3U4ICBwYWQxOworCV9fdTE2IGxhc3Rfb3Bjb2RlOworCV9fdTY0IGxhc3RfaXA7CisJX191NjQgbGFzdF9kcDsKKwlfX3U4ICB4bW1bMTZdWzE2XTsKKwlfX3UzMiBteGNzcjsKKwlfX3UzMiBwYWQyOworfTsKKworNC4yMiBLVk1fU0VUX0ZQVQorCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogeDg2CitUeXBlOiB2Y3B1IGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2ZwdSAoaW4pCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK1dyaXRlcyB0aGUgZmxvYXRpbmcgcG9pbnQgc3RhdGUgdG8gdGhlIHZjcHUuCisKKy8qIGZvciBLVk1fR0VUX0ZQVSBhbmQgS1ZNX1NFVF9GUFUgKi8KK3N0cnVjdCBrdm1fZnB1IHsKKwlfX3U4ICBmcHJbOF1bMTZdOworCV9fdTE2IGZjdzsKKwlfX3UxNiBmc3c7CisJX191OCAgZnR3eDsgIC8qIGluIGZ4c2F2ZSBmb3JtYXQgKi8KKwlfX3U4ICBwYWQxOworCV9fdTE2IGxhc3Rfb3Bjb2RlOworCV9fdTY0IGxhc3RfaXA7CisJX191NjQgbGFzdF9kcDsKKwlfX3U4ICB4bW1bMTZdWzE2XTsKKwlfX3UzMiBteGNzcjsKKwlfX3UzMiBwYWQyOworfTsKKworNC4yMyBLVk1fQ1JFQVRFX0lSUUNISVAKKworQ2FwYWJpbGl0eTogS1ZNX0NBUF9JUlFDSElQCitBcmNoaXRlY3R1cmVzOiB4ODYsIGlhNjQKK1R5cGU6IHZtIGlvY3RsCitQYXJhbWV0ZXJzOiBub25lCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK0NyZWF0ZXMgYW4gaW50ZXJydXB0IGNvbnRyb2xsZXIgbW9kZWwgaW4gdGhlIGtlcm5lbC4gIE9uIHg4NiwgY3JlYXRlcyBhIHZpcnR1YWwKK2lvYXBpYywgYSB2aXJ0dWFsIFBJQyAodHdvIFBJQ3MsIG5lc3RlZCksIGFuZCBzZXRzIHVwIGZ1dHVyZSB2Y3B1cyB0byBoYXZlIGEKK2xvY2FsIEFQSUMuICBJUlEgcm91dGluZyBmb3IgR1NJcyAwLTE1IGlzIHNldCB0byBib3RoIFBJQyBhbmQgSU9BUElDOyBHU0kgMTYtMjMKK29ubHkgZ28gdG8gdGhlIElPQVBJQy4gIE9uIGlhNjQsIGEgSU9TQVBJQyBpcyBjcmVhdGVkLgorCis0LjI0IEtWTV9JUlFfTElORQorCitDYXBhYmlsaXR5OiBLVk1fQ0FQX0lSUUNISVAKK0FyY2hpdGVjdHVyZXM6IHg4NiwgaWE2NAorVHlwZTogdm0gaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1faXJxX2xldmVsCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK1NldHMgdGhlIGxldmVsIG9mIGEgR1NJIGlucHV0IHRvIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBtb2RlbCBpbiB0aGUga2VybmVsLgorUmVxdWlyZXMgdGhhdCBhbiBpbnRlcnJ1cHQgY29udHJvbGxlciBtb2RlbCBoYXMgYmVlbiBwcmV2aW91c2x5IGNyZWF0ZWQgd2l0aAorS1ZNX0NSRUFURV9JUlFDSElQLiAgTm90ZSB0aGF0IGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgcmVxdWlyZSB0aGUgbGV2ZWwKK3RvIGJlIHNldCB0byAxIGFuZCB0aGVuIGJhY2sgdG8gMC4KKworc3RydWN0IGt2bV9pcnFfbGV2ZWwgeworCXVuaW9uIHsKKwkJX191MzIgaXJxOyAgICAgLyogR1NJICovCisJCV9fczMyIHN0YXR1czsgIC8qIG5vdCB1c2VkIGZvciBLVk1fSVJRX0xFVkVMICovCisJfTsKKwlfX3UzMiBsZXZlbDsgICAgICAgICAgIC8qIDAgb3IgMSAqLworfTsKKworNC4yNSBLVk1fR0VUX0lSUUNISVAKKworQ2FwYWJpbGl0eTogS1ZNX0NBUF9JUlFDSElQCitBcmNoaXRlY3R1cmVzOiB4ODYsIGlhNjQKK1R5cGU6IHZtIGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2lycWNoaXAgKGluL291dCkKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworUmVhZHMgdGhlIHN0YXRlIG9mIGEga2VybmVsIGludGVycnVwdCBjb250cm9sbGVyIGNyZWF0ZWQgd2l0aAorS1ZNX0NSRUFURV9JUlFDSElQIGludG8gYSBidWZmZXIgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4KKworc3RydWN0IGt2bV9pcnFjaGlwIHsKKwlfX3UzMiBjaGlwX2lkOyAgLyogMCA9IFBJQzEsIDEgPSBQSUMyLCAyID0gSU9BUElDICovCisJX191MzIgcGFkOworICAgICAgICB1bmlvbiB7CisJCWNoYXIgZHVtbXlbNTEyXTsgIC8qIHJlc2VydmluZyBzcGFjZSAqLworCQlzdHJ1Y3Qga3ZtX3BpY19zdGF0ZSBwaWM7CisJCXN0cnVjdCBrdm1faW9hcGljX3N0YXRlIGlvYXBpYzsKKwl9IGNoaXA7Cit9OworCis0LjI2IEtWTV9TRVRfSVJRQ0hJUAorCitDYXBhYmlsaXR5OiBLVk1fQ0FQX0lSUUNISVAKK0FyY2hpdGVjdHVyZXM6IHg4NiwgaWE2NAorVHlwZTogdm0gaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1faXJxY2hpcCAoaW4pCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK1NldHMgdGhlIHN0YXRlIG9mIGEga2VybmVsIGludGVycnVwdCBjb250cm9sbGVyIGNyZWF0ZWQgd2l0aAorS1ZNX0NSRUFURV9JUlFDSElQIGZyb20gYSBidWZmZXIgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4KKworc3RydWN0IGt2bV9pcnFjaGlwIHsKKwlfX3UzMiBjaGlwX2lkOyAgLyogMCA9IFBJQzEsIDEgPSBQSUMyLCAyID0gSU9BUElDICovCisJX191MzIgcGFkOworICAgICAgICB1bmlvbiB7CisJCWNoYXIgZHVtbXlbNTEyXTsgIC8qIHJlc2VydmluZyBzcGFjZSAqLworCQlzdHJ1Y3Qga3ZtX3BpY19zdGF0ZSBwaWM7CisJCXN0cnVjdCBrdm1faW9hcGljX3N0YXRlIGlvYXBpYzsKKwl9IGNoaXA7Cit9OworCis1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmUKKworQXBwbGljYXRpb24gY29kZSBvYnRhaW5zIGEgcG9pbnRlciB0byB0aGUga3ZtX3J1biBzdHJ1Y3R1cmUgYnkKK21tYXAoKWluZyBhIHZjcHUgZmQuICBGcm9tIHRoYXQgcG9pbnQsIGFwcGxpY2F0aW9uIGNvZGUgY2FuIGNvbnRyb2wKK2V4ZWN1dGlvbiBieSBjaGFuZ2luZyBmaWVsZHMgaW4ga3ZtX3J1biBwcmlvciB0byBjYWxsaW5nIHRoZSBLVk1fUlVOCitpb2N0bCwgYW5kIG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVhc29uIEtWTV9SVU4gcmV0dXJuZWQgYnkKK2xvb2tpbmcgdXAgc3RydWN0dXJlIG1lbWJlcnMuCisKK3N0cnVjdCBrdm1fcnVuIHsKKwkvKiBpbiAqLworCV9fdTggcmVxdWVzdF9pbnRlcnJ1cHRfd2luZG93OworCitSZXF1ZXN0IHRoYXQgS1ZNX1JVTiByZXR1cm4gd2hlbiBpdCBiZWNvbWVzIHBvc3NpYmxlIHRvIGluamVjdCBleHRlcm5hbAoraW50ZXJydXB0cyBpbnRvIHRoZSBndWVzdC4gIFVzZWZ1bCBpbiBjb25qdW5jdGlvbiB3aXRoIEtWTV9JTlRFUlJVUFQuCisKKwlfX3U4IHBhZGRpbmcxWzddOworCisJLyogb3V0ICovCisJX191MzIgZXhpdF9yZWFzb247CisKK1doZW4gS1ZNX1JVTiBoYXMgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5IChyZXR1cm4gdmFsdWUgMCksIHRoaXMgaW5mb3JtcworYXBwbGljYXRpb24gY29kZSB3aHkgS1ZNX1JVTiBoYXMgcmV0dXJuZWQuICBBbGxvd2FibGUgdmFsdWVzIGZvciB0aGlzCitmaWVsZCBhcmUgZGV0YWlsZWQgYmVsb3cuCisKKwlfX3U4IHJlYWR5X2Zvcl9pbnRlcnJ1cHRfaW5qZWN0aW9uOworCitJZiByZXF1ZXN0X2ludGVycnVwdF93aW5kb3cgaGFzIGJlZW4gc3BlY2lmaWVkLCB0aGlzIGZpZWxkIGluZGljYXRlcworYW4gaW50ZXJydXB0IGNhbiBiZSBpbmplY3RlZCBub3cgd2l0aCBLVk1fSU5URVJSVVBULgorCisJX191OCBpZl9mbGFnOworCitUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgaW50ZXJydXB0IGZsYWcuICBPbmx5IHZhbGlkIGlmIGluLWtlcm5lbAorbG9jYWwgQVBJQyBpcyBub3QgdXNlZC4KKworCV9fdTggcGFkZGluZzJbMl07CisKKwkvKiBpbiAocHJlX2t2bV9ydW4pLCBvdXQgKHBvc3Rfa3ZtX3J1bikgKi8KKwlfX3U2NCBjcjg7CisKK1RoZSB2YWx1ZSBvZiB0aGUgY3I4IHJlZ2lzdGVyLiAgT25seSB2YWxpZCBpZiBpbi1rZXJuZWwgbG9jYWwgQVBJQyBpcworbm90IHVzZWQuICBCb3RoIGlucHV0IGFuZCBvdXRwdXQuCisKKwlfX3U2NCBhcGljX2Jhc2U7CisKK1RoZSB2YWx1ZSBvZiB0aGUgQVBJQyBCQVNFIG1zci4gIE9ubHkgdmFsaWQgaWYgaW4ta2VybmVsIGxvY2FsCitBUElDIGlzIG5vdCB1c2VkLiAgQm90aCBpbnB1dCBhbmQgb3V0cHV0LgorCisJdW5pb24geworCQkvKiBLVk1fRVhJVF9VTktOT1dOICovCisJCXN0cnVjdCB7CisJCQlfX3U2NCBoYXJkd2FyZV9leGl0X3JlYXNvbjsKKwkJfSBodzsKKworSWYgZXhpdF9yZWFzb24gaXMgS1ZNX0VYSVRfVU5LTk9XTiwgdGhlIHZjcHUgaGFzIGV4aXRlZCBkdWUgdG8gdW5rbm93bgorcmVhc29ucy4gIEZ1cnRoZXIgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbgoraGFyZHdhcmVfZXhpdF9yZWFzb24uCisKKwkJLyogS1ZNX0VYSVRfRkFJTF9FTlRSWSAqLworCQlzdHJ1Y3QgeworCQkJX191NjQgaGFyZHdhcmVfZW50cnlfZmFpbHVyZV9yZWFzb247CisJCX0gZmFpbF9lbnRyeTsKKworSWYgZXhpdF9yZWFzb24gaXMgS1ZNX0VYSVRfRkFJTF9FTlRSWSwgdGhlIHZjcHUgY291bGQgbm90IGJlIHJ1biBkdWUKK3RvIHVua25vd24gcmVhc29ucy4gIEZ1cnRoZXIgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGluZm9ybWF0aW9uIGlzCithdmFpbGFibGUgaW4gaGFyZHdhcmVfZW50cnlfZmFpbHVyZV9yZWFzb24uCisKKwkJLyogS1ZNX0VYSVRfRVhDRVBUSU9OICovCisJCXN0cnVjdCB7CisJCQlfX3UzMiBleGNlcHRpb247CisJCQlfX3UzMiBlcnJvcl9jb2RlOworCQl9IGV4OworCitVbnVzZWQuCisKKwkJLyogS1ZNX0VYSVRfSU8gKi8KKwkJc3RydWN0IHsKKyNkZWZpbmUgS1ZNX0VYSVRfSU9fSU4gIDAKKyNkZWZpbmUgS1ZNX0VYSVRfSU9fT1VUIDEKKwkJCV9fdTggZGlyZWN0aW9uOworCQkJX191OCBzaXplOyAvKiBieXRlcyAqLworCQkJX191MTYgcG9ydDsKKwkJCV9fdTMyIGNvdW50OworCQkJX191NjQgZGF0YV9vZmZzZXQ7IC8qIHJlbGF0aXZlIHRvIGt2bV9ydW4gc3RhcnQgKi8KKwkJfSBpbzsKKworSWYgZXhpdF9yZWFzb24gaXMgS1ZNX0VYSVRfSU9fSU4gb3IgS1ZNX0VYSVRfSU9fT1VULCB0aGVuIHRoZSB2Y3B1IGhhcworZXhlY3V0ZWQgYSBwb3J0IEkvTyBpbnN0cnVjdGlvbiB3aGljaCBjb3VsZCBub3QgYmUgc2F0aXNmaWVkIGJ5IGt2bS4KK2RhdGFfb2Zmc2V0IGRlc2NyaWJlcyB3aGVyZSB0aGUgZGF0YSBpcyBsb2NhdGVkIChLVk1fRVhJVF9JT19PVVQpIG9yCit3aGVyZSBrdm0gZXhwZWN0cyBhcHBsaWNhdGlvbiBjb2RlIHRvIHBsYWNlIHRoZSBkYXRhIGZvciB0aGUgbmV4dAorS1ZNX1JVTiBpbnZvY2F0aW9uIChLVk1fRVhJVF9JT19JTikuICBEYXRhIGZvcm1hdCBpcyBhIHBhdGNrZWQgYXJyYXkuCisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIGFyY2g7CisJCX0gZGVidWc7CisKK1VudXNlZC4KKworCQkvKiBLVk1fRVhJVF9NTUlPICovCisJCXN0cnVjdCB7CisJCQlfX3U2NCBwaHlzX2FkZHI7CisJCQlfX3U4ICBkYXRhWzhdOworCQkJX191MzIgbGVuOworCQkJX191OCAgaXNfd3JpdGU7CisJCX0gbW1pbzsKKworSWYgZXhpdF9yZWFzb24gaXMgS1ZNX0VYSVRfTU1JTyBvciBLVk1fRVhJVF9JT19PVVQsIHRoZW4gdGhlIHZjcHUgaGFzCitleGVjdXRlZCBhIG1lbW9yeS1tYXBwZWQgSS9PIGluc3RydWN0aW9uIHdoaWNoIGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQKK2J5IGt2bS4gIFRoZSAnZGF0YScgbWVtYmVyIGNvbnRhaW5zIHRoZSB3cml0dGVuIGRhdGEgaWYgJ2lzX3dyaXRlJyBpcwordHJ1ZSwgYW5kIHNob3VsZCBiZSBmaWxsZWQgYnkgYXBwbGljYXRpb24gY29kZSBvdGhlcndpc2UuCisKKwkJLyogS1ZNX0VYSVRfSFlQRVJDQUxMICovCisJCXN0cnVjdCB7CisJCQlfX3U2NCBucjsKKwkJCV9fdTY0IGFyZ3NbNl07CisJCQlfX3U2NCByZXQ7CisJCQlfX3UzMiBsb25nbW9kZTsKKwkJCV9fdTMyIHBhZDsKKwkJfSBoeXBlcmNhbGw7CisKK1VudXNlZC4KKworCQkvKiBLVk1fRVhJVF9UUFJfQUNDRVNTICovCisJCXN0cnVjdCB7CisJCQlfX3U2NCByaXA7CisJCQlfX3UzMiBpc193cml0ZTsKKwkJCV9fdTMyIHBhZDsKKwkJfSB0cHJfYWNjZXNzOworCitUbyBiZSBkb2N1bWVudGVkIChLVk1fVFBSX0FDQ0VTU19SRVBPUlRJTkcpLgorCisJCS8qIEtWTV9FWElUX1MzOTBfU0lFSUMgKi8KKwkJc3RydWN0IHsKKwkJCV9fdTggaWNwdGNvZGU7CisJCQlfX3U2NCBtYXNrOyAvKiBwc3cgdXBwZXIgaGFsZiAqLworCQkJX191NjQgYWRkcjsgLyogcHN3IGxvd2VyIGhhbGYgKi8KKwkJCV9fdTE2IGlwYTsKKwkJCV9fdTMyIGlwYjsKKwkJfSBzMzkwX3NpZWljOworCitzMzkwIHNwZWNpZmljLgorCisJCS8qIEtWTV9FWElUX1MzOTBfUkVTRVQgKi8KKyNkZWZpbmUgS1ZNX1MzOTBfUkVTRVRfUE9SICAgICAgIDEKKyNkZWZpbmUgS1ZNX1MzOTBfUkVTRVRfQ0xFQVIgICAgIDIKKyNkZWZpbmUgS1ZNX1MzOTBfUkVTRVRfU1VCU1lTVEVNIDQKKyNkZWZpbmUgS1ZNX1MzOTBfUkVTRVRfQ1BVX0lOSVQgIDgKKyNkZWZpbmUgS1ZNX1MzOTBfUkVTRVRfSVBMICAgICAgIDE2CisJCV9fdTY0IHMzOTBfcmVzZXRfZmxhZ3M7CisKK3MzOTAgc3BlY2lmaWMuCisKKwkJLyogS1ZNX0VYSVRfRENSICovCisJCXN0cnVjdCB7CisJCQlfX3UzMiBkY3JuOworCQkJX191MzIgZGF0YTsKKwkJCV9fdTggIGlzX3dyaXRlOworCQl9IGRjcjsKKworcG93ZXJwYyBzcGVjaWZpYy4KKworCQkvKiBGaXggdGhlIHNpemUgb2YgdGhlIHVuaW9uLiAqLworCQljaGFyIHBhZGRpbmdbMjU2XTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWAppbmRleCAxNjM0YzZkYy4uNTAxODliZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWApAQCAtNjAsNiArNjAsOCBAQAogCS0gaW5mbyBvbiB1c2luZyBGcmFtZSBSZWxheS9EYXRhIExpbmsgQ29ubmVjdGlvbiBJZGVudGlmaWVyIChETENJKS4KIGdlbmVyaWNfbmV0bGluay50eHQKIAktIGluZm8gb24gR2VuZXJpYyBOZXRsaW5rCitpZWVlODAyMTU0LnR4dAorCS0gTGludXggSUVFRSA4MDIuMTUuNCBpbXBsZW1lbnRhdGlvbiwgQVBJIGFuZCBkcml2ZXJzCiBpcC1zeXNjdGwudHh0CiAJLSAvcHJvYy9zeXMvbmV0L2lwdjQvKiB2YXJpYWJsZXMKIGlwX2R5bmFkZHIudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWVlZTgwMjE1NC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWVlZTgwMjE1NC50eHQKaW5kZXggYTAyODBhZC4uMjNjOTk1ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2llZWU4MDIxNTQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZWVlODAyMTU0LnR4dApAQCAtMjIsNyArMjIsNyBAQAogLi4uLi4KIAogVGhlIGFkZHJlc3MgZmFtaWx5LCBzb2NrZXQgYWRkcmVzc2VzIGV0Yy4gYXJlIGRlZmluZWQgaW4gdGhlCi1pbmNsdWRlL25ldC9pZWVlODAyMTU0L2FmX2llZWU4MDIxNTQuaCBoZWFkZXIgb3IgaW4gdGhlIHNwZWNpYWwgaGVhZGVyCitpbmNsdWRlL25ldC9hZl9pZWVlODAyMTU0LmggaGVhZGVyIG9yIGluIHRoZSBzcGVjaWFsIGhlYWRlcgogaW4gb3VyIHVzZXJzcGFjZSBwYWNrYWdlIChzZWUgZWl0aGVyIGxpbnV4LXppZ2JlZSBzb3VyY2Vmb3JnZSBkb3dubG9hZCBwYWdlCiBvciBnaXQgdHJlZSBhdCBnaXQ6Ly9saW51eC16aWdiZWUuZ2l0LnNvdXJjZWZvcmdlLm5ldC9naXRyb290L2xpbnV4LXppZ2JlZSkuCiAKQEAgLTMzLDcgKzMzLDcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogTW9zdCBvZiBJRUVFIDgwMi4xNS40IE1MTUUgaW50ZXJmYWNlcyBhcmUgZGlyZWN0bHkgbWFwcGVkIG9uIG5ldGxpbmsgY29tbWFuZHMuCi1TZWUgdGhlIGluY2x1ZGUvbmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuaCBoZWFkZXIuIE91ciB1c2Vyc3BhY2UgdG9vbHMgcGFja2FnZQorU2VlIHRoZSBpbmNsdWRlL25ldC9ubDgwMjE1NC5oIGhlYWRlci4gT3VyIHVzZXJzcGFjZSB0b29scyBwYWNrYWdlCiAoc2VlIGFib3ZlKSBwcm92aWRlcyBDTEkgY29uZmlndXJhdGlvbiB1dGlsaXR5IGZvciByYWRpbyBpbnRlcmZhY2VzIGFuZCBzaW1wbGUKIGNvb3JkaW5hdG9yIGZvciBJRUVFIDgwMi4xNS40IG5ldHdvcmtzIGFzIGFuIGV4YW1wbGUgdXNlcnMgb2YgTUxNRSBwcm90b2NvbC4KIApAQCAtNTQsMTAgKzU0LDE0IEBACiBIYXJkTUFDCiA9PT09PT09CiAKLVNlZSB0aGUgaGVhZGVyIGluY2x1ZGUvbmV0L2llZWU4MDIxNTQvbmV0ZGV2aWNlLmguIFlvdSBoYXZlIHRvIGltcGxlbWVudCBMaW51eAorU2VlIHRoZSBoZWFkZXIgaW5jbHVkZS9uZXQvaWVlZTgwMjE1NF9uZXRkZXYuaC4gWW91IGhhdmUgdG8gaW1wbGVtZW50IExpbnV4CiBuZXRfZGV2aWNlLCB3aXRoIC50eXBlID0gQVJQSFJEX0lFRUU4MDIxNTQuIERhdGEgaXMgZXhjaGFuZ2VkIHdpdGggc29ja2V0IGZhbWlseQotY29kZSB2aWEgcGxhaW4gc2tfYnVmZnMuIFRoZSBjb250cm9sIGJsb2NrIG9mIHNrX2J1ZmZzIHdpbGwgY29udGFpbiBhZGRpdGlvbmFsCi1pbmZvIGFzIGRlc2NyaWJlZCBpbiB0aGUgc3RydWN0IGllZWU4MDIxNTRfbWFjX2NiLgorY29kZSB2aWEgcGxhaW4gc2tfYnVmZnMuIE9uIHNrYiByZWNlcHRpb24gc2tiLT5jYiBtdXN0IGNvbnRhaW4gYWRkaXRpb25hbAoraW5mbyBhcyBkZXNjcmliZWQgaW4gdGhlIHN0cnVjdCBpZWVlODAyMTU0X21hY19jYi4gRHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24KK3RoZSBza2ItPmNiIGlzIHVzZWQgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIGRhdGEgdG8gZGV2aWNlJ3MgaGVhZGVyX29wcy0+Y3JlYXRlCitmdW5jdGlvbi4gQmUgYXdhcmUsIHRoYXQgdGhpcyBkYXRhIGNhbiBiZSBvdmVycmlkZW4gbGF0ZXIgKHdoZW4gc29ja2V0IGNvZGUKK3N1Ym1pdHMgc2tiIHRvIHFkaXNjKSwgc28gaWYgeW91IG5lZWQgc29tZXRoaW5nIGZyb20gdGhhdCBjYiBsYXRlciwgeW91IHNob3VsZAorc3RvcmUgaW5mbyBpbiB0aGUgc2tiLT5kYXRhIG9uIHlvdXIgb3duLgogCiBUbyBob29rIHRoZSBNTE1FIGludGVyZmFjZSB5b3UgaGF2ZSB0byBwb3B1bGF0ZSB0aGUgbWxfcHJpdiBmaWVsZCBvZiB5b3VyCiBuZXRfZGV2aWNlIHdpdGggYSBwb2ludGVyIHRvIHN0cnVjdCBpZWVlODAyMTU0X21sbWVfb3BzIGluc3RhbmNlLiBBbGwgZmllbGRzIGFyZQpAQCAtNjksOCArNzMsOCBAQAogU29mdE1BQwogPT09PT09PQogCi1XZSBhcmUgZ29pbmcgdG8gcHJvdmlkZSBpbnRlcm1lZGlhdGUgbGF5ZXIgaW1wZWxlbWVudGluZyBJRUVFIDgwMi4xNS40IE1BQworV2UgYXJlIGdvaW5nIHRvIHByb3ZpZGUgaW50ZXJtZWRpYXRlIGxheWVyIGltcGxlbWVudGluZyBJRUVFIDgwMi4xNS40IE1BQwogaW4gc29mdHdhcmUuIFRoaXMgaXMgY3VycmVudGx5IFdJUC4KIAotU2VlIGhlYWRlciBpbmNsdWRlL25ldC9pZWVlODAyMTU0L21hYzgwMjE1NC5oIGFuZCBzZXZlcmFsIGRyaXZlcnMgaW4KLWRyaXZlcnMvaWVlZTgwMjE1NC8KK1NlZSBoZWFkZXIgaW5jbHVkZS9uZXQvbWFjODAyMTU0LmggYW5kIHNldmVyYWwgZHJpdmVycyBpbiBkcml2ZXJzL2llZWU4MDIxNTQvLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IDhiZTc2MjMuLmZiZTQyN2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC0zMTEsOSArMzExLDEyIEBACiAJY29ubmVjdGlvbnMuCiAKIHRjcF9vcnBoYW5fcmV0cmllcyAtIElOVEVHRVIKLQlIb3cgbWF5IHRpbWVzIHRvIHJldHJ5IGJlZm9yZSBraWxsaW5nIFRDUCBjb25uZWN0aW9uLCBjbG9zZWQKLQlieSBvdXIgc2lkZS4gRGVmYXVsdCB2YWx1ZSA3IGNvcnJlc3BvbmRzIHRvIH41MHNlYy0xNm1pbgotCWRlcGVuZGluZyBvbiBSVE8uIElmIHlvdSBtYWNoaW5lIGlzIGxvYWRlZCBXRUIgc2VydmVyLAorCVRoaXMgdmFsdWUgaW5mbHVlbmNlcyB0aGUgdGltZW91dCBvZiBhIGxvY2FsbHkgY2xvc2VkIFRDUCBjb25uZWN0aW9uLAorCXdoZW4gUlRPIHJldHJhbnNtaXNzaW9ucyByZW1haW4gdW5hY2tub3dsZWRnZWQuCisJU2VlIHRjcF9yZXRyaWVzMiBmb3IgbW9yZSBkZXRhaWxzLgorCisJVGhlIGRlZmF1bHQgdmFsdWUgaXMgNy4KKwlJZiB5b3VyIG1hY2hpbmUgaXMgYSBsb2FkZWQgV0VCIHNlcnZlciwKIAl5b3Ugc2hvdWxkIHRoaW5rIGFib3V0IGxvd2VyaW5nIHRoaXMgdmFsdWUsIHN1Y2ggc29ja2V0cwogCW1heSBjb25zdW1lIHNpZ25pZmljYW50IHJlc291cmNlcy4gQ2YuIHRjcF9tYXhfb3JwaGFucy4KIApAQCAtMzI3LDE2ICszMzAsMjggQEAKIAljZXJ0YWluIFRDUCBzdGFja3MuCiAKIHRjcF9yZXRyaWVzMSAtIElOVEVHRVIKLQlIb3cgbWFueSB0aW1lcyB0byByZXRyeSBiZWZvcmUgZGVjaWRpbmcgdGhhdCBzb21ldGhpbmcgaXMgd3JvbmcKLQlhbmQgaXQgaXMgbmVjZXNzYXJ5IHRvIHJlcG9ydCB0aGlzIHN1c3BpY2lvbiB0byBuZXR3b3JrIGxheWVyLgotCU1pbmltYWwgUkZDIHZhbHVlIGlzIDMsIGl0IGlzIGRlZmF1bHQsIHdoaWNoIGNvcnJlc3BvbmRzCi0JdG8gfjNzZWMtOG1pbiBkZXBlbmRpbmcgb24gUlRPLgorCVRoaXMgdmFsdWUgaW5mbHVlbmNlcyB0aGUgdGltZSwgYWZ0ZXIgd2hpY2ggVENQIGRlY2lkZXMsIHRoYXQKKwlzb21ldGhpbmcgaXMgd3JvbmcgZHVlIHRvIHVuYWNrbm93bGVkZ2VkIFJUTyByZXRyYW5zbWlzc2lvbnMsCisJYW5kIHJlcG9ydHMgdGhpcyBzdXNwaWNpb24gdG8gdGhlIG5ldHdvcmsgbGF5ZXIuCisJU2VlIHRjcF9yZXRyaWVzMiBmb3IgbW9yZSBkZXRhaWxzLgorCisJUkZDIDExMjIgcmVjb21tZW5kcyBhdCBsZWFzdCAzIHJldHJhbnNtaXNzaW9ucywgd2hpY2ggaXMgdGhlCisJZGVmYXVsdC4KIAogdGNwX3JldHJpZXMyIC0gSU5URUdFUgotCUhvdyBtYXkgdGltZXMgdG8gcmV0cnkgYmVmb3JlIGtpbGxpbmcgYWxpdmUgVENQIGNvbm5lY3Rpb24uCi0JUkZDMTEyMiBzYXlzIHRoYXQgdGhlIGxpbWl0IHNob3VsZCBiZSBsb25nZXIgdGhhbiAxMDAgc2VjLgotCUl0IGlzIHRvbyBzbWFsbCBudW1iZXIuCURlZmF1bHQgdmFsdWUgMTUgY29ycmVzcG9uZHMgdG8gfjEzLTMwbWluCi0JZGVwZW5kaW5nIG9uIFJUTy4KKwlUaGlzIHZhbHVlIGluZmx1ZW5jZXMgdGhlIHRpbWVvdXQgb2YgYW4gYWxpdmUgVENQIGNvbm5lY3Rpb24sCisJd2hlbiBSVE8gcmV0cmFuc21pc3Npb25zIHJlbWFpbiB1bmFja25vd2xlZGdlZC4KKwlHaXZlbiBhIHZhbHVlIG9mIE4sIGEgaHlwb3RoZXRpY2FsIFRDUCBjb25uZWN0aW9uIGZvbGxvd2luZworCWV4cG9uZW50aWFsIGJhY2tvZmYgd2l0aCBhbiBpbml0aWFsIFJUTyBvZiBUQ1BfUlRPX01JTiB3b3VsZAorCXJldHJhbnNtaXQgTiB0aW1lcyBiZWZvcmUga2lsbGluZyB0aGUgY29ubmVjdGlvbiBhdCB0aGUgKE4rMSl0aCBSVE8uCisKKwlUaGUgZGVmYXVsdCB2YWx1ZSBvZiAxNSB5aWVsZHMgYSBoeXBvdGhldGljYWwgdGltZW91dCBvZiA5MjQuNgorCXNlY29uZHMgYW5kIGlzIGEgbG93ZXIgYm91bmQgZm9yIHRoZSBlZmZlY3RpdmUgdGltZW91dC4KKwlUQ1Agd2lsbCBlZmZlY3RpdmVseSB0aW1lIG91dCBhdCB0aGUgZmlyc3QgUlRPIHdoaWNoIGV4Y2VlZHMgdGhlCisJaHlwb3RoZXRpY2FsIHRpbWVvdXQuCisKKwlSRkMgMTEyMiByZWNvbW1lbmRzIGF0IGxlYXN0IDEwMCBzZWNvbmRzIGZvciB0aGUgdGltZW91dCwKKwl3aGljaCBjb3JyZXNwb25kcyB0byBhIHZhbHVlIG9mIGF0IGxlYXN0IDguCiAKIHRjcF9yZmMxMzM3IC0gQk9PTEVBTgogCUlmIHNldCwgdGhlIFRDUCBzdGFjayBiZWhhdmVzIGNvbmZvcm1pbmcgdG8gUkZDMTMzNy4gSWYgdW5zZXQsCkBAIC0xMjgyLDYgKzEyOTcsMTYgQEAKIHNjdHBfd21lbSAgLSB2ZWN0b3Igb2YgMyBJTlRFR0VSczogbWluLCBkZWZhdWx0LCBtYXgKIAlTZWUgdGNwX3dtZW0gZm9yIGEgZGVzY3JpcHRpb24uCiAKK2FkZHJfc2NvcGVfcG9saWN5IC0gSU5URUdFUgorCUNvbnRyb2wgSVB2NCBhZGRyZXNzIHNjb3BpbmcgLSBkcmFmdC1zdGV3YXJ0LXRzdndnLXNjdHAtaXB2NC0wMAorCisJMCAgIC0gRGlzYWJsZSBJUHY0IGFkZHJlc3Mgc2NvcGluZworCTEgICAtIEVuYWJsZSBJUHY0IGFkZHJlc3Mgc2NvcGluZworCTIgICAtIEZvbGxvdyBkcmFmdCBidXQgYWxsb3cgSVB2NCBwcml2YXRlIGFkZHJlc3NlcworCTMgICAtIEZvbGxvdyBkcmFmdCBidXQgYWxsb3cgSVB2NCBsaW5rIGxvY2FsIGFkZHJlc3NlcworCisJRGVmYXVsdDogMQorCiAKIC9wcm9jL3N5cy9uZXQvY29yZS8qCiBkZXZfd2VpZ2h0IC0gSU5URUdFUgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ5YTMzYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS50eHQKQEAgLTAsMCArMSwzNzggQEAKK1J1bi10aW1lIFBvd2VyIE1hbmFnZW1lbnQgRnJhbWV3b3JrIGZvciBJL08gRGV2aWNlcworCisoQykgMjAwOSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBOb3ZlbGwgSW5jLgorCisxLiBJbnRyb2R1Y3Rpb24KKworU3VwcG9ydCBmb3IgcnVuLXRpbWUgcG93ZXIgbWFuYWdlbWVudCAocnVuLXRpbWUgUE0pIG9mIEkvTyBkZXZpY2VzIGlzIHByb3ZpZGVkCithdCB0aGUgcG93ZXIgbWFuYWdlbWVudCBjb3JlIChQTSBjb3JlKSBsZXZlbCBieSBtZWFucyBvZjoKKworKiBUaGUgcG93ZXIgbWFuYWdlbWVudCB3b3JrcXVldWUgcG1fd3EgaW4gd2hpY2ggYnVzIHR5cGVzIGFuZCBkZXZpY2UgZHJpdmVycyBjYW4KKyAgcHV0IHRoZWlyIFBNLXJlbGF0ZWQgd29yayBpdGVtcy4gIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgcG1fd3EgYmUKKyAgdXNlZCBmb3IgcXVldWluZyBhbGwgd29yayBpdGVtcyByZWxhdGVkIHRvIHJ1bi10aW1lIFBNLCBiZWNhdXNlIHRoaXMgYWxsb3dzCisgIHRoZW0gdG8gYmUgc3luY2hyb25pemVkIHdpdGggc3lzdGVtLXdpZGUgcG93ZXIgdHJhbnNpdGlvbnMgKHN1c3BlbmQgdG8gUkFNLAorICBoaWJlcm5hdGlvbiBhbmQgcmVzdW1lIGZyb20gc3lzdGVtIHNsZWVwIHN0YXRlcykuICBwbV93cSBpcyBkZWNsYXJlZCBpbgorICBpbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaCBhbmQgZGVmaW5lZCBpbiBrZXJuZWwvcG93ZXIvbWFpbi5jLgorCisqIEEgbnVtYmVyIG9mIHJ1bi10aW1lIFBNIGZpZWxkcyBpbiB0aGUgJ3Bvd2VyJyBtZW1iZXIgb2YgJ3N0cnVjdCBkZXZpY2UnICh3aGljaAorICBpcyBvZiB0aGUgdHlwZSAnc3RydWN0IGRldl9wbV9pbmZvJywgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L3BtLmgpIHRoYXQgY2FuCisgIGJlIHVzZWQgZm9yIHN5bmNocm9uaXppbmcgcnVuLXRpbWUgUE0gb3BlcmF0aW9ucyB3aXRoIG9uZSBhbm90aGVyLgorCisqIFRocmVlIGRldmljZSBydW4tdGltZSBQTSBjYWxsYmFja3MgaW4gJ3N0cnVjdCBkZXZfcG1fb3BzJyAoZGVmaW5lZCBpbgorICBpbmNsdWRlL2xpbnV4L3BtLmgpLgorCisqIEEgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMgZGVmaW5lZCBpbiBkcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jIHRoYXQgY2FuIGJlCisgIHVzZWQgZm9yIGNhcnJ5aW5nIG91dCBydW4tdGltZSBQTSBvcGVyYXRpb25zIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUKKyAgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlbSBpcyB0YWtlbiBjYXJlIG9mIGJ5IHRoZSBQTSBjb3JlLiAgQnVzIHR5cGVzIGFuZAorICBkZXZpY2UgZHJpdmVycyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgorCitUaGUgcnVuLXRpbWUgUE0gY2FsbGJhY2tzIHByZXNlbnQgaW4gJ3N0cnVjdCBkZXZfcG1fb3BzJywgdGhlIGRldmljZSBydW4tdGltZSBQTQorZmllbGRzIG9mICdzdHJ1Y3QgZGV2X3BtX2luZm8nIGFuZCB0aGUgY29yZSBoZWxwZXIgZnVuY3Rpb25zIHByb3ZpZGVkIGZvcgorcnVuLXRpbWUgUE0gYXJlIGRlc2NyaWJlZCBiZWxvdy4KKworMi4gRGV2aWNlIFJ1bi10aW1lIFBNIENhbGxiYWNrcworCitUaGVyZSBhcmUgdGhyZWUgZGV2aWNlIHJ1bi10aW1lIFBNIGNhbGxiYWNrcyBkZWZpbmVkIGluICdzdHJ1Y3QgZGV2X3BtX29wcyc6CisKK3N0cnVjdCBkZXZfcG1fb3BzIHsKKwkuLi4KKwlpbnQgKCpydW50aW1lX3N1c3BlbmQpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJaW50ICgqcnVudGltZV9yZXN1bWUpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJdm9pZCAoKnJ1bnRpbWVfaWRsZSkoc3RydWN0IGRldmljZSAqZGV2KTsKKwkuLi4KK307CisKK1RoZSAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIGJ5IHRoZSBQTSBjb3JlIGZvciB0aGUgYnVzIHR5cGUgb2YKK3RoZSBkZXZpY2UgYmVpbmcgc3VzcGVuZGVkLiAgVGhlIGJ1cyB0eXBlJ3MgY2FsbGJhY2sgaXMgdGhlbiBfZW50aXJlbHlfCitfcmVzcG9uc2libGVfIGZvciBoYW5kbGluZyB0aGUgZGV2aWNlIGFzIGFwcHJvcHJpYXRlLCB3aGljaCBtYXksIGJ1dCBuZWVkIG5vdAoraW5jbHVkZSBleGVjdXRpbmcgdGhlIGRldmljZSBkcml2ZXIncyBvd24gLT5ydW50aW1lX3N1c3BlbmQoKSBjYWxsYmFjayAoZnJvbSB0aGUKK1BNIGNvcmUncyBwb2ludCBvZiB2aWV3IGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IGEgLT5ydW50aW1lX3N1c3BlbmQoKQorY2FsbGJhY2sgaW4gYSBkZXZpY2UgZHJpdmVyIGFzIGxvbmcgYXMgdGhlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3N1c3BlbmQoKSBrbm93cword2hhdCB0byBkbyB0byBoYW5kbGUgdGhlIGRldmljZSkuCisKKyAgKiBPbmNlIHRoZSBidXMgdHlwZSdzIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKKyAgICBmb3IgZ2l2ZW4gZGV2aWNlLCB0aGUgUE0gY29yZSByZWdhcmRzIHRoZSBkZXZpY2UgYXMgc3VzcGVuZGVkLCB3aGljaCBuZWVkCisgICAgbm90IG1lYW4gdGhhdCB0aGUgZGV2aWNlIGhhcyBiZWVuIHB1dCBpbnRvIGEgbG93IHBvd2VyIHN0YXRlLiAgSXQgaXMKKyAgICBzdXBwb3NlZCB0byBtZWFuLCBob3dldmVyLCB0aGF0IHRoZSBkZXZpY2Ugd2lsbCBub3QgcHJvY2VzcyBkYXRhIGFuZCB3aWxsCisgICAgbm90IGNvbW11bmljYXRlIHdpdGggdGhlIENQVShzKSBhbmQgUkFNIHVudGlsIGl0cyBidXMgdHlwZSdzCisgICAgLT5ydW50aW1lX3Jlc3VtZSgpIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIGZvciBpdC4gIFRoZSBydW4tdGltZSBQTSBzdGF0dXMgb2YKKyAgICBhIGRldmljZSBhZnRlciBzdWNjZXNzZnVsIGV4ZWN1dGlvbiBvZiBpdHMgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpCisgICAgY2FsbGJhY2sgaXMgJ3N1c3BlbmRlZCcuCisKKyAgKiBJZiB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIHJldHVybnMgLUVCVVNZIG9yIC1FQUdBSU4sCisgICAgdGhlIGRldmljZSdzIHJ1bi10aW1lIFBNIHN0YXR1cyBpcyBzdXBwb3NlZCB0byBiZSAnYWN0aXZlJywgd2hpY2ggbWVhbnMgdGhhdAorICAgIHRoZSBkZXZpY2UgX211c3RfIGJlIGZ1bGx5IG9wZXJhdGlvbmFsIGFmdGVyd2FyZHMuCisKKyAgKiBJZiB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3IgY29kZQorICAgIGRpZmZlcmVudCBmcm9tIC1FQlVTWSBvciAtRUFHQUlOLCB0aGUgUE0gY29yZSByZWdhcmRzIHRoaXMgYXMgYSBmYXRhbAorICAgIGVycm9yIGFuZCB3aWxsIHJlZnVzZSB0byBydW4gdGhlIGhlbHBlciBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNAorICAgIGZvciB0aGUgZGV2aWNlLCB1bnRpbCB0aGUgc3RhdHVzIG9mIGl0IGlzIGRpcmVjdGx5IHNldCBlaXRoZXIgdG8gJ2FjdGl2ZScKKyAgICBvciB0byAnc3VzcGVuZGVkJyAodGhlIFBNIGNvcmUgcHJvdmlkZXMgc3BlY2lhbCBoZWxwZXIgZnVuY3Rpb25zIGZvciB0aGlzCisgICAgcHVycG9zZSkuCisKK0luIHBhcnRpY3VsYXIsIGlmIHRoZSBkcml2ZXIgcmVxdWlyZXMgcmVtb3RlIHdha2V1cCBjYXBhYmlsaXR5IGZvciBwcm9wZXIKK2Z1bmN0aW9uaW5nIGFuZCBkZXZpY2VfbWF5X3dha2V1cCgpIHJldHVybnMgJ2ZhbHNlJyBmb3IgdGhlIGRldmljZSwgdGhlbgorLT5ydW50aW1lX3N1c3BlbmQoKSBzaG91bGQgcmV0dXJuIC1FQlVTWS4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZgorZGV2aWNlX21heV93YWtldXAoKSByZXR1cm5zICd0cnVlJyBmb3IgdGhlIGRldmljZSBhbmQgdGhlIGRldmljZSBpcyBwdXQKK2ludG8gYSBsb3cgcG93ZXIgc3RhdGUgZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgaXRzIGJ1cyB0eXBlJ3MKKy0+cnVudGltZV9zdXNwZW5kKCksIGl0IGlzIGV4cGVjdGVkIHRoYXQgcmVtb3RlIHdha2UtdXAgKGkuZS4gaGFyZHdhcmUgbWVjaGFuaXNtCithbGxvd2luZyB0aGUgZGV2aWNlIHRvIHJlcXVlc3QgYSBjaGFuZ2Ugb2YgaXRzIHBvd2VyIHN0YXRlLCBzdWNoIGFzIFBDSSBQTUUpCit3aWxsIGJlIGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UuICBHZW5lcmFsbHksIHJlbW90ZSB3YWtlLXVwIHNob3VsZCBiZSBlbmFibGVkCitmb3IgYWxsIGlucHV0IGRldmljZXMgcHV0IGludG8gYSBsb3cgcG93ZXIgc3RhdGUgYXQgcnVuIHRpbWUuCisKK1RoZSAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgYnkgdGhlIFBNIGNvcmUgZm9yIHRoZSBidXMgdHlwZSBvZgordGhlIGRldmljZSBiZWluZyB3b2tlbiB1cC4gIFRoZSBidXMgdHlwZSdzIGNhbGxiYWNrIGlzIHRoZW4gX2VudGlyZWx5XworX3Jlc3BvbnNpYmxlXyBmb3IgaGFuZGxpbmcgdGhlIGRldmljZSBhcyBhcHByb3ByaWF0ZSwgd2hpY2ggbWF5LCBidXQgbmVlZCBub3QKK2luY2x1ZGUgZXhlY3V0aW5nIHRoZSBkZXZpY2UgZHJpdmVyJ3Mgb3duIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjayAoZnJvbSB0aGUKK1BNIGNvcmUncyBwb2ludCBvZiB2aWV3IGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IGEgLT5ydW50aW1lX3Jlc3VtZSgpCitjYWxsYmFjayBpbiBhIGRldmljZSBkcml2ZXIgYXMgbG9uZyBhcyB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfcmVzdW1lKCkga25vd3MKK3doYXQgdG8gZG8gdG8gaGFuZGxlIHRoZSBkZXZpY2UpLgorCisgICogT25jZSB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksCisgICAgdGhlIFBNIGNvcmUgcmVnYXJkcyB0aGUgZGV2aWNlIGFzIGZ1bGx5IG9wZXJhdGlvbmFsLCB3aGljaCBtZWFucyB0aGF0IHRoZQorICAgIGRldmljZSBfbXVzdF8gYmUgYWJsZSB0byBjb21wbGV0ZSBJL08gb3BlcmF0aW9ucyBhcyBuZWVkZWQuICBUaGUgcnVuLXRpbWUKKyAgICBQTSBzdGF0dXMgb2YgdGhlIGRldmljZSBpcyB0aGVuICdhY3RpdmUnLgorCisgICogSWYgdGhlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3Jlc3VtZSgpIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3IgY29kZSwgdGhlIFBNCisgICAgY29yZSByZWdhcmRzIHRoaXMgYXMgYSBmYXRhbCBlcnJvciBhbmQgd2lsbCByZWZ1c2UgdG8gcnVuIHRoZSBoZWxwZXIKKyAgICBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNCBmb3IgdGhlIGRldmljZSwgdW50aWwgaXRzIHN0YXR1cyBpcworICAgIGRpcmVjdGx5IHNldCBlaXRoZXIgdG8gJ2FjdGl2ZScgb3IgdG8gJ3N1c3BlbmRlZCcgKHRoZSBQTSBjb3JlIHByb3ZpZGVzCisgICAgc3BlY2lhbCBoZWxwZXIgZnVuY3Rpb25zIGZvciB0aGlzIHB1cnBvc2UpLgorCitUaGUgLT5ydW50aW1lX2lkbGUoKSBjYWxsYmFjayBpcyBleGVjdXRlZCBieSB0aGUgUE0gY29yZSBmb3IgdGhlIGJ1cyB0eXBlIG9mCitnaXZlbiBkZXZpY2Ugd2hlbmV2ZXIgdGhlIGRldmljZSBhcHBlYXJzIHRvIGJlIGlkbGUsIHdoaWNoIGlzIGluZGljYXRlZCB0byB0aGUKK1BNIGNvcmUgYnkgdHdvIGNvdW50ZXJzLCB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnRlciBhbmQgdGhlIGNvdW50ZXIgb2YgJ2FjdGl2ZScKK2NoaWxkcmVuIG9mIHRoZSBkZXZpY2UuCisKKyAgKiBJZiBhbnkgb2YgdGhlc2UgY291bnRlcnMgaXMgZGVjcmVhc2VkIHVzaW5nIGEgaGVscGVyIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5CisgICAgdGhlIFBNIGNvcmUgYW5kIGl0IHR1cm5zIG91dCB0byBiZSBlcXVhbCB0byB6ZXJvLCB0aGUgb3RoZXIgY291bnRlciBpcworICAgIGNoZWNrZWQuICBJZiB0aGF0IGNvdW50ZXIgYWxzbyBpcyBlcXVhbCB0byB6ZXJvLCB0aGUgUE0gY29yZSBleGVjdXRlcyB0aGUKKyAgICBkZXZpY2UgYnVzIHR5cGUncyAtPnJ1bnRpbWVfaWRsZSgpIGNhbGxiYWNrICh3aXRoIHRoZSBkZXZpY2UgYXMgYW4KKyAgICBhcmd1bWVudCkuCisKK1RoZSBhY3Rpb24gcGVyZm9ybWVkIGJ5IGEgYnVzIHR5cGUncyAtPnJ1bnRpbWVfaWRsZSgpIGNhbGxiYWNrIGlzIHRvdGFsbHkKK2RlcGVuZGVudCBvbiB0aGUgYnVzIHR5cGUgaW4gcXVlc3Rpb24sIGJ1dCB0aGUgZXhwZWN0ZWQgYW5kIHJlY29tbWVuZGVkIGFjdGlvbgoraXMgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBjYW4gYmUgc3VzcGVuZGVkIChpLmUuIGlmIGFsbCBvZiB0aGUgY29uZGl0aW9ucworbmVjZXNzYXJ5IGZvciBzdXNwZW5kaW5nIHRoZSBkZXZpY2UgYXJlIHNhdGlzZmllZCkgYW5kIHRvIHF1ZXVlIHVwIGEgc3VzcGVuZAorcmVxdWVzdCBmb3IgdGhlIGRldmljZSBpbiB0aGF0IGNhc2UuCisKK1RoZSBoZWxwZXIgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBQTSBjb3JlLCBkZXNjcmliZWQgaW4gU2VjdGlvbiA0LCBndWFyYW50ZWUKK3RoYXQgdGhlIGZvbGxvd2luZyBjb25zdHJhaW50cyBhcmUgbWV0IHdpdGggcmVzcGVjdCB0byB0aGUgYnVzIHR5cGUncyBydW4tdGltZQorUE0gY2FsbGJhY2tzOgorCisoMSkgVGhlIGNhbGxiYWNrcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIChlLmcuIGl0IGlzIGZvcmJpZGRlbiB0byBleGVjdXRlCisgICAgLT5ydW50aW1lX3N1c3BlbmQoKSBpbiBwYXJhbGxlbCB3aXRoIC0+cnVudGltZV9yZXN1bWUoKSBvciB3aXRoIGFub3RoZXIKKyAgICBpbnN0YW5jZSBvZiAtPnJ1bnRpbWVfc3VzcGVuZCgpIGZvciB0aGUgc2FtZSBkZXZpY2UpIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0CisgICAgLT5ydW50aW1lX3N1c3BlbmQoKSBvciAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FuIGJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsIHdpdGgKKyAgICAtPnJ1bnRpbWVfaWRsZSgpIChhbHRob3VnaCAtPnJ1bnRpbWVfaWRsZSgpIHdpbGwgbm90IGJlIHN0YXJ0ZWQgd2hpbGUgYW55CisgICAgb2YgdGhlIG90aGVyIGNhbGxiYWNrcyBpcyBiZWluZyBleGVjdXRlZCBmb3IgdGhlIHNhbWUgZGV2aWNlKS4KKworKDIpIC0+cnVudGltZV9pZGxlKCkgYW5kIC0+cnVudGltZV9zdXNwZW5kKCkgY2FuIG9ubHkgYmUgZXhlY3V0ZWQgZm9yICdhY3RpdmUnCisgICAgZGV2aWNlcyAoaS5lLiB0aGUgUE0gY29yZSB3aWxsIG9ubHkgZXhlY3V0ZSAtPnJ1bnRpbWVfaWRsZSgpIG9yCisgICAgLT5ydW50aW1lX3N1c3BlbmQoKSBmb3IgdGhlIGRldmljZXMgdGhlIHJ1bi10aW1lIFBNIHN0YXR1cyBvZiB3aGljaCBpcworICAgICdhY3RpdmUnKS4KKworKDMpIC0+cnVudGltZV9pZGxlKCkgYW5kIC0+cnVudGltZV9zdXNwZW5kKCkgY2FuIG9ubHkgYmUgZXhlY3V0ZWQgZm9yIGEgZGV2aWNlCisgICAgdGhlIHVzYWdlIGNvdW50ZXIgb2Ygd2hpY2ggaXMgZXF1YWwgdG8gemVybyBfYW5kXyBlaXRoZXIgdGhlIGNvdW50ZXIgb2YKKyAgICAnYWN0aXZlJyBjaGlsZHJlbiBvZiB3aGljaCBpcyBlcXVhbCB0byB6ZXJvLCBvciB0aGUgJ3Bvd2VyLmlnbm9yZV9jaGlsZHJlbicKKyAgICBmbGFnIG9mIHdoaWNoIGlzIHNldC4KKworKDQpIC0+cnVudGltZV9yZXN1bWUoKSBjYW4gb25seSBiZSBleGVjdXRlZCBmb3IgJ3N1c3BlbmRlZCcgZGV2aWNlcyAgKGkuZS4gdGhlCisgICAgUE0gY29yZSB3aWxsIG9ubHkgZXhlY3V0ZSAtPnJ1bnRpbWVfcmVzdW1lKCkgZm9yIHRoZSBkZXZpY2VzIHRoZSBydW4tdGltZQorICAgIFBNIHN0YXR1cyBvZiB3aGljaCBpcyAnc3VzcGVuZGVkJykuCisKK0FkZGl0aW9uYWxseSwgdGhlIGhlbHBlciBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhlIFBNIGNvcmUgb2JleSB0aGUgZm9sbG93aW5nCitydWxlczoKKworICAqIElmIC0+cnVudGltZV9zdXNwZW5kKCkgaXMgYWJvdXQgdG8gYmUgZXhlY3V0ZWQgb3IgdGhlcmUncyBhIHBlbmRpbmcgcmVxdWVzdAorICAgIHRvIGV4ZWN1dGUgaXQsIC0+cnVudGltZV9pZGxlKCkgd2lsbCBub3QgYmUgZXhlY3V0ZWQgZm9yIHRoZSBzYW1lIGRldmljZS4KKworICAqIEEgcmVxdWVzdCB0byBleGVjdXRlIG9yIHRvIHNjaGVkdWxlIHRoZSBleGVjdXRpb24gb2YgLT5ydW50aW1lX3N1c3BlbmQoKQorICAgIHdpbGwgY2FuY2VsIGFueSBwZW5kaW5nIHJlcXVlc3RzIHRvIGV4ZWN1dGUgLT5ydW50aW1lX2lkbGUoKSBmb3IgdGhlIHNhbWUKKyAgICBkZXZpY2UuCisKKyAgKiBJZiAtPnJ1bnRpbWVfcmVzdW1lKCkgaXMgYWJvdXQgdG8gYmUgZXhlY3V0ZWQgb3IgdGhlcmUncyBhIHBlbmRpbmcgcmVxdWVzdAorICAgIHRvIGV4ZWN1dGUgaXQsIHRoZSBvdGhlciBjYWxsYmFja3Mgd2lsbCBub3QgYmUgZXhlY3V0ZWQgZm9yIHRoZSBzYW1lIGRldmljZS4KKworICAqIEEgcmVxdWVzdCB0byBleGVjdXRlIC0+cnVudGltZV9yZXN1bWUoKSB3aWxsIGNhbmNlbCBhbnkgcGVuZGluZyBvcgorICAgIHNjaGVkdWxlZCByZXF1ZXN0cyB0byBleGVjdXRlIHRoZSBvdGhlciBjYWxsYmFja3MgZm9yIHRoZSBzYW1lIGRldmljZS4KKworMy4gUnVuLXRpbWUgUE0gRGV2aWNlIEZpZWxkcworCitUaGUgZm9sbG93aW5nIGRldmljZSBydW4tdGltZSBQTSBmaWVsZHMgYXJlIHByZXNlbnQgaW4gJ3N0cnVjdCBkZXZfcG1faW5mbycsIGFzCitkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvcG0uaDoKKworICBzdHJ1Y3QgdGltZXJfbGlzdCBzdXNwZW5kX3RpbWVyOworICAgIC0gdGltZXIgdXNlZCBmb3Igc2NoZWR1bGluZyAoZGVsYXllZCkgc3VzcGVuZCByZXF1ZXN0CisKKyAgdW5zaWduZWQgbG9uZyB0aW1lcl9leHBpcmVzOworICAgIC0gdGltZXIgZXhwaXJhdGlvbiB0aW1lLCBpbiBqaWZmaWVzIChpZiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHplcm8sIHRoZQorICAgICAgdGltZXIgaXMgcnVubmluZyBhbmQgd2lsbCBleHBpcmUgYXQgdGhhdCB0aW1lLCBvdGhlcndpc2UgdGhlIHRpbWVyIGlzIG5vdAorICAgICAgcnVubmluZykKKworICBzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKyAgICAtIHdvcmsgc3RydWN0dXJlIHVzZWQgZm9yIHF1ZXVpbmcgdXAgcmVxdWVzdHMgKGkuZS4gd29yayBpdGVtcyBpbiBwbV93cSkKKworICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3F1ZXVlOworICAgIC0gd2FpdCBxdWV1ZSB1c2VkIGlmIGFueSBvZiB0aGUgaGVscGVyIGZ1bmN0aW9ucyBuZWVkcyB0byB3YWl0IGZvciBhbm90aGVyCisgICAgICBvbmUgdG8gY29tcGxldGUKKworICBzcGlubG9ja190IGxvY2s7CisgICAgLSBsb2NrIHVzZWQgZm9yIHN5bmNocm9uaXNhdGlvbgorCisgIGF0b21pY190IHVzYWdlX2NvdW50OworICAgIC0gdGhlIHVzYWdlIGNvdW50ZXIgb2YgdGhlIGRldmljZQorCisgIGF0b21pY190IGNoaWxkX2NvdW50OworICAgIC0gdGhlIGNvdW50IG9mICdhY3RpdmUnIGNoaWxkcmVuIG9mIHRoZSBkZXZpY2UKKworICB1bnNpZ25lZCBpbnQgaWdub3JlX2NoaWxkcmVuOworICAgIC0gaWYgc2V0LCB0aGUgdmFsdWUgb2YgY2hpbGRfY291bnQgaXMgaWdub3JlZCAoYnV0IHN0aWxsIHVwZGF0ZWQpCisKKyAgdW5zaWduZWQgaW50IGRpc2FibGVfZGVwdGg7CisgICAgLSB1c2VkIGZvciBkaXNhYmxpbmcgdGhlIGhlbHBlciBmdW5jaW9ucyAodGhleSB3b3JrIG5vcm1hbGx5IGlmIHRoaXMgaXMKKyAgICAgIGVxdWFsIHRvIHplcm8pOyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBpdCBpcyAxIChpLmUuIHJ1bi10aW1lIFBNIGlzCisgICAgICBpbml0aWFsbHkgZGlzYWJsZWQgZm9yIGFsbCBkZXZpY2VzKQorCisgIHVuc2lnbmVkIGludCBydW50aW1lX2Vycm9yOworICAgIC0gaWYgc2V0LCB0aGVyZSB3YXMgYSBmYXRhbCBlcnJvciAob25lIG9mIHRoZSBjYWxsYmFja3MgcmV0dXJuZWQgZXJyb3IgY29kZQorICAgICAgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMiksIHNvIHRoZSBoZWxwZXIgZnVudGlvbnMgd2lsbCBub3Qgd29yayB1bnRpbAorICAgICAgdGhpcyBmbGFnIGlzIGNsZWFyZWQ7IHRoaXMgaXMgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIGZhaWxpbmcKKyAgICAgIGNhbGxiYWNrCisKKyAgdW5zaWduZWQgaW50IGlkbGVfbm90aWZpY2F0aW9uOworICAgIC0gaWYgc2V0LCAtPnJ1bnRpbWVfaWRsZSgpIGlzIGJlaW5nIGV4ZWN1dGVkCisKKyAgdW5zaWduZWQgaW50IHJlcXVlc3RfcGVuZGluZzsKKyAgICAtIGlmIHNldCwgdGhlcmUncyBhIHBlbmRpbmcgcmVxdWVzdCAoaS5lLiBhIHdvcmsgaXRlbSBxdWV1ZWQgdXAgaW50byBwbV93cSkKKworICBlbnVtIHJwbV9yZXF1ZXN0IHJlcXVlc3Q7CisgICAgLSB0eXBlIG9mIHJlcXVlc3QgdGhhdCdzIHBlbmRpbmcgKHZhbGlkIGlmIHJlcXVlc3RfcGVuZGluZyBpcyBzZXQpCisKKyAgdW5zaWduZWQgaW50IGRlZmVycmVkX3Jlc3VtZTsKKyAgICAtIHNldCBpZiAtPnJ1bnRpbWVfcmVzdW1lKCkgaXMgYWJvdXQgdG8gYmUgcnVuIHdoaWxlIC0+cnVudGltZV9zdXNwZW5kKCkgaXMKKyAgICAgIGJlaW5nIGV4ZWN1dGVkIGZvciB0aGF0IGRldmljZSBhbmQgaXQgaXMgbm90IHByYWN0aWNhbCB0byB3YWl0IGZvciB0aGUKKyAgICAgIHN1c3BlbmQgdG8gY29tcGxldGU7IG1lYW5zICJzdGFydCBhIHJlc3VtZSBhcyBzb29uIGFzIHlvdSd2ZSBzdXNwZW5kZWQiCisKKyAgZW51bSBycG1fc3RhdHVzIHJ1bnRpbWVfc3RhdHVzOworICAgIC0gdGhlIHJ1bi10aW1lIFBNIHN0YXR1cyBvZiB0aGUgZGV2aWNlOyB0aGlzIGZpZWxkJ3MgaW5pdGlhbCB2YWx1ZSBpcworICAgICAgUlBNX1NVU1BFTkRFRCwgd2hpY2ggbWVhbnMgdGhhdCBlYWNoIGRldmljZSBpcyBpbml0aWFsbHkgcmVnYXJkZWQgYnkgdGhlCisgICAgICBQTSBjb3JlIGFzICdzdXNwZW5kZWQnLCByZWdhcmRsZXNzIG9mIGl0cyByZWFsIGhhcmR3YXJlIHN0YXR1cworCitBbGwgb2YgdGhlIGFib3ZlIGZpZWxkcyBhcmUgbWVtYmVycyBvZiB0aGUgJ3Bvd2VyJyBtZW1iZXIgb2YgJ3N0cnVjdCBkZXZpY2UnLgorCis0LiBSdW4tdGltZSBQTSBEZXZpY2UgSGVscGVyIEZ1bmN0aW9ucworCitUaGUgZm9sbG93aW5nIHJ1bi10aW1lIFBNIGhlbHBlciBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4KK2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYW5kIGluY2x1ZGUvbGludXgvcG1fcnVudGltZS5oOgorCisgIHZvaWQgcG1fcnVudGltZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBpbml0aWFsaXplIHRoZSBkZXZpY2UgcnVuLXRpbWUgUE0gZmllbGRzIGluICdzdHJ1Y3QgZGV2X3BtX2luZm8nCisKKyAgdm9pZCBwbV9ydW50aW1lX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gbWFrZSBzdXJlIHRoYXQgdGhlIHJ1bi10aW1lIFBNIG9mIHRoZSBkZXZpY2Ugd2lsbCBiZSBkaXNhYmxlZCBhZnRlcgorICAgICAgcmVtb3ZpbmcgdGhlIGRldmljZSBmcm9tIGRldmljZSBoaWVyYXJjaHkKKworICBpbnQgcG1fcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBleGVjdXRlIC0+cnVudGltZV9pZGxlKCkgZm9yIHRoZSBkZXZpY2UncyBidXMgdHlwZTsgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAgICAgIG9yIGVycm9yIGNvZGUgb24gZmFpbHVyZSwgd2hlcmUgLUVJTlBST0dSRVNTIG1lYW5zIHRoYXQgLT5ydW50aW1lX2lkbGUoKQorICAgICAgaXMgYWxyZWFkeSBiZWluZyBleGVjdXRlZAorCisgIGludCBwbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGV4ZWN1dGUgLT5ydW50aW1lX3N1c3BlbmQoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlOyByZXR1cm5zIDAgb24KKyAgICAgIHN1Y2Nlc3MsIDEgaWYgdGhlIGRldmljZSdzIHJ1bi10aW1lIFBNIHN0YXR1cyB3YXMgYWxyZWFkeSAnc3VzcGVuZGVkJywgb3IKKyAgICAgIGVycm9yIGNvZGUgb24gZmFpbHVyZSwgd2hlcmUgLUVBR0FJTiBvciAtRUJVU1kgbWVhbnMgaXQgaXMgc2FmZSB0byBhdHRlbXB0CisgICAgICB0byBzdXNwZW5kIHRoZSBkZXZpY2UgYWdhaW4gaW4gZnV0dXJlCisKKyAgaW50IHBtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBleGVjdXRlIC0+cnVudGltZV9yZXN1bWUoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlOyByZXR1cm5zIDAgb24KKyAgICAgIHN1Y2Nlc3MsIDEgaWYgdGhlIGRldmljZSdzIHJ1bi10aW1lIFBNIHN0YXR1cyB3YXMgYWxyZWFkeSAnYWN0aXZlJyBvcgorICAgICAgZXJyb3IgY29kZSBvbiBmYWlsdXJlLCB3aGVyZSAtRUFHQUlOIG1lYW5zIGl0IG1heSBiZSBzYWZlIHRvIGF0dGVtcHQgdG8KKyAgICAgIHJlc3VtZSB0aGUgZGV2aWNlIGFnYWluIGluIGZ1dHVyZSwgYnV0ICdwb3dlci5ydW50aW1lX2Vycm9yJyBzaG91bGQgYmUKKyAgICAgIGNoZWNrZWQgYWRkaXRpb25hbGx5CisKKyAgaW50IHBtX3JlcXVlc3RfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gc3VibWl0IGEgcmVxdWVzdCB0byBleGVjdXRlIC0+cnVudGltZV9pZGxlKCkgZm9yIHRoZSBkZXZpY2UncyBidXMgdHlwZQorICAgICAgKHRoZSByZXF1ZXN0IGlzIHJlcHJlc2VudGVkIGJ5IGEgd29yayBpdGVtIGluIHBtX3dxKTsgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKKyAgICAgIG9yIGVycm9yIGNvZGUgaWYgdGhlIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHF1ZXVlZCB1cAorCisgIGludCBwbV9zY2hlZHVsZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5KTsKKyAgICAtIHNjaGVkdWxlIHRoZSBleGVjdXRpb24gb2YgLT5ydW50aW1lX3N1c3BlbmQoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlCisgICAgICBpbiBmdXR1cmUsIHdoZXJlICdkZWxheScgaXMgdGhlIHRpbWUgdG8gd2FpdCBiZWZvcmUgcXVldWluZyB1cCBhIHN1c3BlbmQKKyAgICAgIHdvcmsgaXRlbSBpbiBwbV93cSwgaW4gbWlsbGlzZWNvbmRzIChpZiAnZGVsYXknIGlzIHplcm8sIHRoZSB3b3JrIGl0ZW0gaXMKKyAgICAgIHF1ZXVlZCB1cCBpbW1lZGlhdGVseSk7IHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIGlmIHRoZSBkZXZpY2UncyBQTQorICAgICAgcnVuLXRpbWUgc3RhdHVzIHdhcyBhbHJlYWR5ICdzdXNwZW5kZWQnLCBvciBlcnJvciBjb2RlIGlmIHRoZSByZXF1ZXN0CisgICAgICBoYXNuJ3QgYmVlbiBzY2hlZHVsZWQgKG9yIHF1ZXVlZCB1cCBpZiAnZGVsYXknIGlzIDApOyBpZiB0aGUgZXhlY3V0aW9uIG9mCisgICAgICAtPnJ1bnRpbWVfc3VzcGVuZCgpIGlzIGFscmVhZHkgc2NoZWR1bGVkIGFuZCBub3QgeWV0IGV4cGlyZWQsIHRoZSBuZXcKKyAgICAgIHZhbHVlIG9mICdkZWxheScgd2lsbCBiZSB1c2VkIGFzIHRoZSB0aW1lIHRvIHdhaXQKKworICBpbnQgcG1fcmVxdWVzdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIHN1Ym1pdCBhIHJlcXVlc3QgdG8gZXhlY3V0ZSAtPnJ1bnRpbWVfcmVzdW1lKCkgZm9yIHRoZSBkZXZpY2UncyBidXMgdHlwZQorICAgICAgKHRoZSByZXF1ZXN0IGlzIHJlcHJlc2VudGVkIGJ5IGEgd29yayBpdGVtIGluIHBtX3dxKTsgcmV0dXJucyAwIG9uCisgICAgICBzdWNjZXNzLCAxIGlmIHRoZSBkZXZpY2UncyBydW4tdGltZSBQTSBzdGF0dXMgd2FzIGFscmVhZHkgJ2FjdGl2ZScsIG9yCisgICAgICBlcnJvciBjb2RlIGlmIHRoZSByZXF1ZXN0IGhhc24ndCBiZWVuIHF1ZXVlZCB1cAorCisgIHZvaWQgcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGluY3JlbWVudCB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnRlcgorCisgIGludCBwbV9ydW50aW1lX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gaW5jcmVtZW50IHRoZSBkZXZpY2UncyB1c2FnZSBjb3VudGVyLCBydW4gcG1fcmVxdWVzdF9yZXN1bWUoZGV2KSBhbmQKKyAgICAgIHJldHVybiBpdHMgcmVzdWx0CisKKyAgaW50IHBtX3J1bnRpbWVfZ2V0X3N5bmMoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGluY3JlbWVudCB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnRlciwgcnVuIHBtX3J1bnRpbWVfcmVzdW1lKGRldikgYW5kCisgICAgICByZXR1cm4gaXRzIHJlc3VsdAorCisgIHZvaWQgcG1fcnVudGltZV9wdXRfbm9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBkZWNyZW1lbnQgdGhlIGRldmljZSdzIHVzYWdlIGNvdW50ZXIKKworICBpbnQgcG1fcnVudGltZV9wdXQoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGRlY3JlbWVudCB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnRlciwgcnVuIHBtX3JlcXVlc3RfaWRsZShkZXYpIGFuZCByZXR1cm4KKyAgICAgIGl0cyByZXN1bHQKKworICBpbnQgcG1fcnVudGltZV9wdXRfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gZGVjcmVtZW50IHRoZSBkZXZpY2UncyB1c2FnZSBjb3VudGVyLCBydW4gcG1fcnVudGltZV9pZGxlKGRldikgYW5kIHJldHVybgorICAgICAgaXRzIHJlc3VsdAorCisgIHZvaWQgcG1fcnVudGltZV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGVuYWJsZSB0aGUgcnVuLXRpbWUgUE0gaGVscGVyIGZ1bmN0aW9ucyB0byBydW4gdGhlIGRldmljZSBidXMgdHlwZSdzCisgICAgICBydW4tdGltZSBQTSBjYWxsYmFja3MgZGVzY3JpYmVkIGluIFNlY3Rpb24gMgorCisgIGludCBwbV9ydW50aW1lX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIHByZXZlbnQgdGhlIHJ1bi10aW1lIFBNIGhlbHBlciBmdW5jdGlvbnMgZnJvbSBydW5uaW5nIHRoZSBkZXZpY2UgYnVzCisgICAgICB0eXBlJ3MgcnVuLXRpbWUgUE0gY2FsbGJhY2tzLCBtYWtlIHN1cmUgdGhhdCBhbGwgb2YgdGhlIHBlbmRpbmcgcnVuLXRpbWUKKyAgICAgIFBNIG9wZXJhdGlvbnMgb24gdGhlIGRldmljZSBhcmUgZWl0aGVyIGNvbXBsZXRlZCBvciBjYW5jZWxlZDsgcmV0dXJucworICAgICAgMSBpZiB0aGVyZSB3YXMgYSByZXN1bWUgcmVxdWVzdCBwZW5kaW5nIGFuZCBpdCB3YXMgbmVjZXNzYXJ5IHRvIGV4ZWN1dGUKKyAgICAgIC0+cnVudGltZV9yZXN1bWUoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlIHRvIHNhdGlzZnkgdGhhdCByZXF1ZXN0LAorICAgICAgb3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQKKworICB2b2lkIHBtX3N1c3BlbmRfaWdub3JlX2NoaWxkcmVuKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpOworICAgIC0gc2V0L3Vuc2V0IHRoZSBwb3dlci5pZ25vcmVfY2hpbGRyZW4gZmxhZyBvZiB0aGUgZGV2aWNlCisKKyAgaW50IHBtX3J1bnRpbWVfc2V0X2FjdGl2ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gY2xlYXIgdGhlIGRldmljZSdzICdwb3dlci5ydW50aW1lX2Vycm9yJyBmbGFnLCBzZXQgdGhlIGRldmljZSdzIHJ1bi10aW1lCisgICAgICBQTSBzdGF0dXMgdG8gJ2FjdGl2ZScgYW5kIHVwZGF0ZSBpdHMgcGFyZW50J3MgY291bnRlciBvZiAnYWN0aXZlJworICAgICAgY2hpbGRyZW4gYXMgYXBwcm9wcmlhdGUgKGl0IGlzIG9ubHkgdmFsaWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gaWYKKyAgICAgICdwb3dlci5ydW50aW1lX2Vycm9yJyBpcyBzZXQgb3IgJ3Bvd2VyLmRpc2FibGVfZGVwdGgnIGlzIGdyZWF0ZXIgdGhhbgorICAgICAgemVybyk7IGl0IHdpbGwgZmFpbCBhbmQgcmV0dXJuIGVycm9yIGNvZGUgaWYgdGhlIGRldmljZSBoYXMgYSBwYXJlbnQKKyAgICAgIHdoaWNoIGlzIG5vdCBhY3RpdmUgYW5kIHRoZSAncG93ZXIuaWdub3JlX2NoaWxkcmVuJyBmbGFnIG9mIHdoaWNoIGlzIHVuc2V0CisKKyAgdm9pZCBwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGNsZWFyIHRoZSBkZXZpY2UncyAncG93ZXIucnVudGltZV9lcnJvcicgZmxhZywgc2V0IHRoZSBkZXZpY2UncyBydW4tdGltZQorICAgICAgUE0gc3RhdHVzIHRvICdzdXNwZW5kZWQnIGFuZCB1cGRhdGUgaXRzIHBhcmVudCdzIGNvdW50ZXIgb2YgJ2FjdGl2ZScKKyAgICAgIGNoaWxkcmVuIGFzIGFwcHJvcHJpYXRlIChpdCBpcyBvbmx5IHZhbGlkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGlmCisgICAgICAncG93ZXIucnVudGltZV9lcnJvcicgaXMgc2V0IG9yICdwb3dlci5kaXNhYmxlX2RlcHRoJyBpcyBncmVhdGVyIHRoYW4KKyAgICAgIHplcm8pCisKK0l0IGlzIHNhZmUgdG8gZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGhlbHBlciBmdW5jdGlvbnMgZnJvbSBpbnRlcnJ1cHQgY29udGV4dDoKKworcG1fcmVxdWVzdF9pZGxlKCkKK3BtX3NjaGVkdWxlX3N1c3BlbmQoKQorcG1fcmVxdWVzdF9yZXN1bWUoKQorcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoKQorcG1fcnVudGltZV9nZXQoKQorcG1fcnVudGltZV9wdXRfbm9pZGxlKCkKK3BtX3J1bnRpbWVfcHV0KCkKK3BtX3N1c3BlbmRfaWdub3JlX2NoaWxkcmVuKCkKK3BtX3J1bnRpbWVfc2V0X2FjdGl2ZSgpCitwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoKQorcG1fcnVudGltZV9lbmFibGUoKQorCis1LiBSdW4tdGltZSBQTSBJbml0aWFsaXphdGlvbiwgRGV2aWNlIFByb2JpbmcgYW5kIFJlbW92YWwKKworSW5pdGlhbGx5LCB0aGUgcnVuLXRpbWUgUE0gaXMgZGlzYWJsZWQgZm9yIGFsbCBkZXZpY2VzLCB3aGljaCBtZWFucyB0aGF0IHRoZQorbWFqb3JpdHkgb2YgdGhlIHJ1bi10aW1lIFBNIGhlbHBlciBmdW50aW9ucyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0IHdpbGwgcmV0dXJuCistRUFHQUlOIHVudGlsIHBtX3J1bnRpbWVfZW5hYmxlKCkgaXMgY2FsbGVkIGZvciB0aGUgZGV2aWNlLgorCitJbiBhZGRpdGlvbiB0byB0aGF0LCB0aGUgaW5pdGlhbCBydW4tdGltZSBQTSBzdGF0dXMgb2YgYWxsIGRldmljZXMgaXMKKydzdXNwZW5kZWQnLCBidXQgaXQgbmVlZCBub3QgcmVmbGVjdCB0aGUgYWN0dWFsIHBoeXNpY2FsIHN0YXRlIG9mIHRoZSBkZXZpY2UuCitUaHVzLCBpZiB0aGUgZGV2aWNlIGlzIGluaXRpYWxseSBhY3RpdmUgKGkuZS4gaXQgaXMgYWJsZSB0byBwcm9jZXNzIEkvTyksIGl0cworcnVuLXRpbWUgUE0gc3RhdHVzIG11c3QgYmUgY2hhbmdlZCB0byAnYWN0aXZlJywgd2l0aCB0aGUgaGVscCBvZgorcG1fcnVudGltZV9zZXRfYWN0aXZlKCksIGJlZm9yZSBwbV9ydW50aW1lX2VuYWJsZSgpIGlzIGNhbGxlZCBmb3IgdGhlIGRldmljZS4KKworSG93ZXZlciwgaWYgdGhlIGRldmljZSBoYXMgYSBwYXJlbnQgYW5kIHRoZSBwYXJlbnQncyBydW4tdGltZSBQTSBpcyBlbmFibGVkLAorY2FsbGluZyBwbV9ydW50aW1lX3NldF9hY3RpdmUoKSBmb3IgdGhlIGRldmljZSB3aWxsIGFmZmVjdCB0aGUgcGFyZW50LCB1bmxlc3MKK3RoZSBwYXJlbnQncyAncG93ZXIuaWdub3JlX2NoaWxkcmVuJyBmbGFnIGlzIHNldC4gIE5hbWVseSwgaW4gdGhhdCBjYXNlIHRoZQorcGFyZW50IHdvbid0IGJlIGFibGUgdG8gc3VzcGVuZCBhdCBydW4gdGltZSwgdXNpbmcgdGhlIFBNIGNvcmUncyBoZWxwZXIKK2Z1bmN0aW9ucywgYXMgbG9uZyBhcyB0aGUgY2hpbGQncyBzdGF0dXMgaXMgJ2FjdGl2ZScsIGV2ZW4gaWYgdGhlIGNoaWxkJ3MKK3J1bi10aW1lIFBNIGlzIHN0aWxsIGRpc2FibGVkIChpLmUuIHBtX3J1bnRpbWVfZW5hYmxlKCkgaGFzbid0IGJlZW4gY2FsbGVkIGZvcgordGhlIGNoaWxkIHlldCBvciBwbV9ydW50aW1lX2Rpc2FibGUoKSBoYXMgYmVlbiBjYWxsZWQgZm9yIGl0KS4gIEZvciB0aGlzIHJlYXNvbiwKK29uY2UgcG1fcnVudGltZV9zZXRfYWN0aXZlKCkgaGFzIGJlZW4gY2FsbGVkIGZvciB0aGUgZGV2aWNlLCBwbV9ydW50aW1lX2VuYWJsZSgpCitzaG91bGQgYmUgY2FsbGVkIGZvciBpdCB0b28gYXMgc29vbiBhcyByZWFzb25hYmx5IHBvc3NpYmxlIG9yIGl0cyBydW4tdGltZSBQTQorc3RhdHVzIHNob3VsZCBiZSBjaGFuZ2VkIGJhY2sgdG8gJ3N1c3BlbmRlZCcgd2l0aCB0aGUgaGVscCBvZgorcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKCkuCisKK0lmIHRoZSBkZWZhdWx0IGluaXRpYWwgcnVuLXRpbWUgUE0gc3RhdHVzIG9mIHRoZSBkZXZpY2UgKGkuZS4gJ3N1c3BlbmRlZCcpCityZWZsZWN0cyB0aGUgYWN0dWFsIHN0YXRlIG9mIHRoZSBkZXZpY2UsIGl0cyBidXMgdHlwZSdzIG9yIGl0cyBkcml2ZXIncworLT5wcm9iZSgpIGNhbGxiYWNrIHdpbGwgbGlrZWx5IG5lZWQgdG8gd2FrZSBpdCB1cCB1c2luZyBvbmUgb2YgdGhlIFBNIGNvcmUncworaGVscGVyIGZ1bmN0aW9ucyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0LiAgSW4gdGhhdCBjYXNlLCBwbV9ydW50aW1lX3Jlc3VtZSgpCitzaG91bGQgYmUgdXNlZC4gIE9mIGNvdXJzZSwgZm9yIHRoaXMgcHVycG9zZSB0aGUgZGV2aWNlJ3MgcnVuLXRpbWUgUE0gaGFzIHRvIGJlCitlbmFibGVkIGVhcmxpZXIgYnkgY2FsbGluZyBwbV9ydW50aW1lX2VuYWJsZSgpLgorCitJZiB0aGUgZGV2aWNlIGJ1cyB0eXBlJ3Mgb3IgZHJpdmVyJ3MgLT5wcm9iZSgpIG9yIC0+cmVtb3ZlKCkgY2FsbGJhY2sgcnVucworcG1fcnVudGltZV9zdXNwZW5kKCkgb3IgcG1fcnVudGltZV9pZGxlKCkgb3IgdGhlaXIgYXN5bmNocm9ub3VzIGNvdW50ZXJwYXJ0cywKK3RoZXkgd2lsbCBmYWlsIHJldHVybmluZyAtRUFHQUlOLCBiZWNhdXNlIHRoZSBkZXZpY2UncyB1c2FnZSBjb3VudGVyIGlzCitpbmNyZW1lbnRlZCBieSB0aGUgY29yZSBiZWZvcmUgZXhlY3V0aW5nIC0+cHJvYmUoKSBhbmQgLT5yZW1vdmUoKS4gIFN0aWxsLCBpdAorbWF5IGJlIGRlc2lyYWJsZSB0byBzdXNwZW5kIHRoZSBkZXZpY2UgYXMgc29vbiBhcyAtPnByb2JlKCkgb3IgLT5yZW1vdmUoKSBoYXMKK2ZpbmlzaGVkLCBzbyB0aGUgUE0gY29yZSB1c2VzIHBtX3J1bnRpbWVfaWRsZV9zeW5jKCkgdG8gaW52b2tlIHRoZSBkZXZpY2UgYnVzCit0eXBlJ3MgLT5ydW50aW1lX2lkbGUoKSBjYWxsYmFjayBhdCB0aGF0IHRpbWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvczM5MGRiZi50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvczM5MGRiZi50eHQKaW5kZXggMmQxMDA1My4uYWU2NmY5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zMzkwL3MzOTBkYmYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9zMzkwZGJmLnR4dApAQCAtNDk1LDYgKzQ5NSwxMyBAQAogc3RyaW5nIHBsdXMgdHdvIHZhcmFyZ3Mgb25lIHdvdWxkIG5lZWQgdG8gYWxsb2NhdGUgYSAoMyAqIHNpemVvZihsb25nKSkgCiBieXRlIGRhdGEgYXJlYSBpbiB0aGUgZGVidWdfcmVnaXN0ZXIoKSBmdW5jdGlvbi4KIAorSU1QT1JUQU5UOiBVc2luZyAiJXMiIGluIHNwcmludGYgZXZlbnQgZnVuY3Rpb25zIGlzIGRhbmdlcm91cy4gWW91IGNhbiBvbmx5Cit1c2UgIiVzIiBpbiB0aGUgc3ByaW50ZiBldmVudCBmdW5jdGlvbnMsIGlmIHRoZSBtZW1vcnkgZm9yIHRoZSBwYXNzZWQgc3RyaW5nIGlzCithdmFpbGFibGUgYXMgbG9uZyBhcyB0aGUgZGVidWcgZmVhdHVyZSBleGlzdHMuIFRoZSByZWFzb24gYmVoaW5kIHRoaXMgaXMgdGhhdAorZHVlIHRvIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIG9ubHkgYSBwb2ludGVyIHRvIHRoZSBzdHJpbmcgaXMgc3RvcmVkIGluCit0aGUgZGVidWcgZmVhdHVyZS4gSWYgeW91IGxvZyBhIHN0cmluZyB0aGF0IGlzIGZyZWVkIGFmdGVyd2FyZHMsIHlvdSB3aWxsIGdldAorYW4gT09QUyB3aGVuIGluc3BlY3RpbmcgdGhlIGRlYnVnIGZlYXR1cmUsIGJlY2F1c2UgdGhlbiB0aGUgZGVidWcgZmVhdHVyZSB3aWxsCithY2Nlc3MgdGhlIGFscmVhZHkgZnJlZWQgbWVtb3J5LgogCiBOT1RFOiBJZiB1c2luZyB0aGUgc3ByaW50ZiB2aWV3IGRvIE5PVCB1c2Ugb3RoZXIgZXZlbnQvZXhjZXB0aW9uIGZ1bmN0aW9ucwogdGhhbiB0aGUgc3ByaW50Zi1ldmVudCBhbmQgLWV4Y2VwdGlvbiBmdW5jdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CmluZGV4IDQyNTI2OTcuLjFjOGViNDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC02MCw2ICs2MCwxMiBAQAogICAgIHNsb3RzCS0gUmVzZXJ2ZSB0aGUgc2xvdCBpbmRleCBmb3IgdGhlIGdpdmVuIGRyaXZlci4KIAkJICBUaGlzIG9wdGlvbiB0YWtlcyBtdWx0aXBsZSBzdHJpbmdzLgkJCiAJCSAgU2VlICJNb2R1bGUgQXV0b2xvYWRpbmcgU3VwcG9ydCIgc2VjdGlvbiBmb3IgZGV0YWlscy4KKyAgICBkZWJ1ZwktIFNwZWNpZmllcyB0aGUgZGVidWcgbWVzc2FnZSBsZXZlbAorCQkgICgwID0gZGlzYWJsZSBkZWJ1ZyBwcmludHMsIDEgPSBub3JtYWwgZGVidWcgbWVzc2FnZXMsCisJCSAgIDIgPSB2ZXJib3NlIGRlYnVnIG1lc3NhZ2VzKQorCQkgIFRoaXMgb3B0aW9uIGFwcGVhcnMgb25seSB3aGVuIENPTkZJR19TTkRfREVCVUc9eS4KKwkJICBUaGlzIG9wdGlvbiBjYW4gYmUgZHluYW1pY2FsbHkgY2hhbmdlZCB2aWEgc3lzZnMKKwkJICAvc3lzL21vZHVsZXMvc25kL3BhcmFtZXRlcnMvZGVidWcgZmlsZS4KICAgCiAgIE1vZHVsZSBzbmQtcGNtLW9zcwogICAtLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUxMyw2ICs1MTksMjYgQEAKICAgICBvciBpbnB1dCwgYnV0IHlvdSBtYXkgdXNlIHRoaXMgbW9kdWxlIGZvciBhbnkgYXBwbGljYXRpb24gd2hpY2gKICAgICByZXF1aXJlcyBhIHNvdW5kIGNhcmQgKGxpa2UgUmVhbFBsYXllcikuCiAKKyAgICBwY21fZGV2cyAgICAgICAtIE51bWJlciBvZiBQQ00gZGV2aWNlcyBhc3NpZ25lZCB0byBlYWNoIGNhcmQKKyAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gMSwgdXAgdG8gNCkKKyAgICBwY21fc3Vic3RyZWFtcyAtIE51bWJlciBvZiBQQ00gc3Vic3RyZWFtcyBhc3NpZ25lZCB0byBlYWNoIFBDTQorICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgPSA4LCB1cCB0byAxNikKKyAgICBocnRpbWVyICAgICAgICAtIFVzZSBocnRpbWVyICg9MSwgZGVmYXVsdCkgb3Igc3lzdGVtIHRpbWVyICg9MCkKKyAgICBmYWtlX2J1ZmZlciAgICAtIEZha2UgYnVmZmVyIGFsbG9jYXRpb25zIChkZWZhdWx0ID0gMSkKKworICAgIFdoZW4gbXVsdGlwbGUgUENNIGRldmljZXMgYXJlIGNyZWF0ZWQsIHNuZC1kdW1teSBnaXZlcyBkaWZmZXJlbnQKKyAgICBiZWhhdmlvciB0byBlYWNoIFBDTSBkZXZpY2U6CisgICAgICAwID0gaW50ZXJsZWF2ZWQgd2l0aCBtbWFwIHN1cHBvcnQKKyAgICAgIDEgPSBub24taW50ZXJsZWF2ZWQgd2l0aCBtbWFwIHN1cHBvcnQKKyAgICAgIDIgPSBpbnRlcmxlYXZlZCB3aXRob3V0IG1tYXAgCisgICAgICAzID0gbm9uLWludGVybGVhdmVkIHdpdGhvdXQgbW1hcAorCisgICAgQXMgZGVmYXVsdCwgc25kLWR1bW15IGRyaXZlcnMgZG9lc24ndCBhbGxvY2F0ZSB0aGUgcmVhbCBidWZmZXJzCisgICAgYnV0IGVpdGhlciBpZ25vcmVzIHJlYWQvd3JpdGUgb3IgbW1hcCBhIHNpbmdsZSBkdW1teSBwYWdlIHRvIGFsbAorICAgIGJ1ZmZlciBwYWdlcywgaW4gb3JkZXIgdG8gc2F2ZSB0aGUgcmVzb3VjZXMuICBJZiB5b3VyIGFwcHMgbmVlZAorICAgIHRoZSByZWFkLyB3cml0dGVuIGJ1ZmZlciBkYXRhIHRvIGJlIGNvbnNpc3RlbnQsIHBhc3MgZmFrZV9idWZmZXI9MAorICAgIG9wdGlvbi4KKwogICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KIAogICBNb2R1bGUgc25kLWVjaG8zZwpAQCAtNzY4LDYgKzc5NCwxMCBAQAogICAgIGJkbF9wb3NfYWRqCS0gU3BlY2lmaWVzIHRoZSBETUEgSVJRIHRpbWluZyBkZWxheSBpbiBzYW1wbGVzLgogCQlQYXNzaW5nIC0xIHdpbGwgbWFrZSB0aGUgZHJpdmVyIHRvIGNob29zZSB0aGUgYXBwcm9wcmlhdGUKIAkJdmFsdWUgYmFzZWQgb24gdGhlIGNvbnRyb2xsZXIgY2hpcC4KKyAgICBwYXRjaAktIFNwZWNpZmllcyB0aGUgZWFybHkgInBhdGNoIiBmaWxlcyB0byBtb2RpZnkgdGhlIEhELWF1ZGlvCisgICAgCQlzZXR1cCBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBjb2RlY3MuICBUaGlzIG9wdGlvbiBpcworCQlhdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19TTkRfSERBX1BBVENIX0xPQURFUj15IGlzIHNldC4KKwkJU2VlIEhELUF1ZGlvLnR4dCBmb3IgZGV0YWlscy4KICAgICAKICAgICBbU2luZ2xlIChnbG9iYWwpIG9wdGlvbnNdCiAgICAgc2luZ2xlX2NtZCAgLSBVc2Ugc2luZ2xlIGltbWVkaWF0ZSBjb21tYW5kcyB0byBjb21tdW5pY2F0ZSB3aXRoCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IDkzOWEzZGQuLjk3ZWViZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC0xMTQsOCArMTE0LDggQEAKICAgc2Ftc3VuZy1uYzEwCVNhbXN1bmcgTkMxMCBtaW5pIG5vdGVib29rCiAgIGF1dG8JCWF1dG8tY29uZmlnIHJlYWRpbmcgQklPUyAoZGVmYXVsdCkKIAotQUxDODgyLzg4NQotPT09PT09PT09PQorQUxDODgyLzg4My84ODUvODg4Lzg4OQorPT09PT09PT09PT09PT09PT09PT09PQogICAzc3RhY2stZGlnCTMtamFjayB3aXRoIFNQRElGIEkvTwogICA2c3RhY2stZGlnCTYtamFjayBkaWdpdGFsIHdpdGggU1BESUYgSS9PCiAgIGFyaW1hCQlBcmltYSBXODIwRGkxCkBAIC0xMjcsMTIgKzEyNyw4IEBACiAgIG1icDMJCU1hY2Jvb2sgUHJvIHJldjMKICAgaW1hYzI0CWlNYWMgMjQnJyB3aXRoIGphY2sgZGV0ZWN0aW9uCiAgIHcyamMJCUFTVVMgVzJKQwotICBhdXRvCQlhdXRvLWNvbmZpZyByZWFkaW5nIEJJT1MgKGRlZmF1bHQpCi0KLUFMQzg4My84ODgKLT09PT09PT09PT0KLSAgM3N0YWNrLWRpZwkzLWphY2sgd2l0aCBTUERJRiBJL08KLSAgNnN0YWNrLWRpZwk2LWphY2sgZGlnaXRhbCB3aXRoIFNQRElGIEkvTworICAzc3RhY2stMmNoLWRpZwkzLWphY2sgd2l0aCBTUERJRiBJL08gKEFMQzg4MykKKyAgYWxjODgzLTZzdGFjay1kaWcJNi1qYWNrIGRpZ2l0YWwgd2l0aCBTUERJRiBJL08gKEFMQzg4MykKICAgM3N0YWNrLTZjaCAgICAzLWphY2sgNi1jaGFubmVsCiAgIDNzdGFjay02Y2gtZGlnIDMtamFjayA2LWNoYW5uZWwgd2l0aCBTUERJRiBJL08KICAgNnN0YWNrLWRpZy1kZW1vICA2LWphY2sgZGlnaXRhbCBmb3IgSW50ZWwgZGVtbyBib2FyZApAQCAtMTQwLDYgKzEzNiw3IEBACiAgIGFjZXItYXNwaXJlCUFjZXIgQXNwaXJlIDk4MTAKICAgYWNlci1hc3BpcmUtNDkzMGcgQWNlciBBc3BpcmUgNDkzMEcKICAgYWNlci1hc3BpcmUtNjUzMGcgQWNlciBBc3BpcmUgNjUzMEcKKyAgYWNlci1hc3BpcmUtNzczMGcgQWNlciBBc3BpcmUgNzczMEcKICAgYWNlci1hc3BpcmUtODkzMGcgQWNlciBBc3BpcmUgODkzMEcKICAgbWVkaW9uCU1lZGlvbiBMYXB0b3BzCiAgIG1lZGlvbi1tZDIJTWVkaW9uIE1EMgpAQCAtMTU1LDEwICsxNTIsMTMgQEAKICAgM3N0YWNrLWhwCUhQIG1hY2hpbmVzIHdpdGggM3N0YWNrIChMdWNrbm93LCBTYW1iYSBib2FyZHMpCiAgIDZzdGFjay1kZWxsCURlbGwgbWFjaGluZXMgd2l0aCA2c3RhY2sgKEluc3Bpcm9uIDUzMCkKICAgbWl0YWMJCU1pdGFjIDgyNTJECisgIGNsZXZvLW01NDByCUNsZXZvIE01NDBSICg2Y2ggKyBkaWdpdGFsKQogICBjbGV2by1tNzIwCUNsZXZvIE03MjAgbGFwdG9wIHNlcmllcwogICBmdWppdHN1LXBpMjUxNSBGdWppdHN1IEFNSUxPIFBpMjUxNQogICBmdWppdHN1LXhhMzUzMCBGdWppdHN1IEFNSUxPIFhBMzUzMAogICAzc3RhY2stNmNoLWludGVsIEludGVsIERHMzMqIGJvYXJkcworICBpbnRlbC1hbGM4ODlhCUludGVsIEliZXhQZWFrIHdpdGggQUxDODg5QQorICBpbnRlbC14NTgJSW50ZWwgRFg1OCB3aXRoIEFMQzg4OQogICBhc3VzLXA1cQlBU1VTIFA1US1FTSBib2FyZHMKICAgbWIzMQkJTWFjQm9vayAzLDEKICAgc29ueS12YWlvLXR0ICBTb255IFZBSU8gVFQKQEAgLTIyOSw3ICsyMjksNyBAQAogPT09PT09CiAgIGJhc2ljCQlkZWZhdWx0IGNvbmZpZ3VyYXRpb24KICAgdGhpbmtwYWQJTGVub3ZvIFRoaW5rcGFkIFQ2MS9YNjEKLSAgZGVsbAkJRGVsbCBUMzQwMAorICBkZWxsX2Rlc2t0b3AJRGVsbCBUMzQwMAogCiBBRDE5ODZBCiA9PT09PT09CkBAIC0yNTgsNiArMjU4LDcgQEAKICAgbGFwdG9wLW1pY3NlbnNlICAgTGFwdG9wIHdpdGggTWljIHNlbnNlIChvbGQgbW9kZWwgZnVqaXRzdSkKICAgbGFwdG9wLWhwbWljc2Vuc2UgTGFwdG9wIHdpdGggSFAgYW5kIE1pYyBzZW5zZXMKICAgYmVucQkJQmVucSBSNTVFCisgIGxhcHRvcC1ocDUzMAlIUCA1MzAgbGFwdG9wCiAgIHRlc3QJCWZvciB0ZXN0aW5nL2RlYnVnZ2luZyBwdXJwb3NlLCBhbG1vc3QgYWxsIGNvbnRyb2xzCiAJCWNhbiBiZSBhZGp1c3RlZC4gIEFwcGVhcmluZyBvbmx5IHdoZW4gY29tcGlsZWQgd2l0aAogCQkkQ09ORklHX1NORF9ERUJVRz15CkBAIC0yNzgsOSArMjc5LDE2IEBACiAgIGhwLWR2NjczNglIUCBkdjY3MzYKICAgbGVub3ZvLXgyMDAJTGVub3ZvIFgyMDAgbGFwdG9wCiAKK0NvbmV4YW50IDUwNjYKKz09PT09PT09PT09PT0KKyAgbGFwdG9wCUJhc2ljIExhcHRvcCBjb25maWcgKGRlZmF1bHQpCisgIGRlbGwtbGFwdG9wCURlbGwgbGFwdG9wcworICBvbHBjLXhvLTFfNQlPTFBDIFhPIDEuNQorCiBTVEFDOTIwMAogPT09PT09PT0KICAgcmVmCQlSZWZlcmVuY2UgYm9hcmQKKyAgb3FvCQlPUU8gTW9kZWwgMgogICBkZWxsLWQyMQlEZWxsICh1bmtub3duKQogICBkZWxsLWQyMglEZWxsICh1bmtub3duKQogICBkZWxsLWQyMwlEZWxsICh1bmtub3duKQpAQCAtMzY4LDEwICszNzYsMTIgQEAKID09PT09PT09PT09CiAgIHJlZgkJUmVmZXJlbmNlIGJvYXJkCiAgIG5vLWpkCQlCSU9TIHNldHVwIGJ1dCB3aXRob3V0IGphY2stZGV0ZWN0aW9uCisgIGludGVsCQlJbnRlbCBERzQ1KiBtb2JvcwogICBkZWxsLW02LWFtaWMJRGVsbCBkZXNrdG9wcy9sYXB0b3BzIHdpdGggYW5hbG9nIG1pY3MKICAgZGVsbC1tNi1kbWljCURlbGwgZGVza3RvcHMvbGFwdG9wcyB3aXRoIGRpZ2l0YWwgbWljcwogICBkZWxsLW02CURlbGwgZGVza3RvcHMvbGFwdG9wcyB3aXRoIGJvdGggdHlwZSBvZiBtaWNzCiAgIGRlbGwtZXEJRGVsbCBkZXNrdG9wcy9sYXB0b3BzCisgIGFsaWVud2FyZQlBbGllbndhcmUgTTE3eAogICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTJIRDgzKgpAQCAtMzg1LDMgKzM5NSw4IEBACiA9PT09PT09PQogICB2YWlvCQlWQUlPIGxhcHRvcCB3aXRob3V0IFNQRElGCiAgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCisKK0NpcnJ1cyBMb2dpYyBDUzQyMDYvNDIwNworPT09PT09PT09PT09PT09PT09PT09PT09CisgIG1icDU1CQlNYWNCb29rIFBybyA1LDUKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0CmluZGV4IDcxYWM5OTUuLjdiOGE1ZjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dApAQCAtMTM5LDYgKzEzOSwxMCBAQAogdGFibGUgdW50aWwgYW55IG1hdGNoaW5nIGVudHJ5IGlzIGZvdW5kLiAgSWYgeW91IGhhdmUgYSBuZXcgbWFjaGluZSwKIHlvdSBtYXkgc2VlIGEgbWVzc2FnZSBsaWtlIGJlbG93OgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgaGRhX2NvZGVjOiBBTEM4ODA6IEJJT1MgYXV0by1wcm9iaW5nLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNZWFud2hpbGUsIGluIHRoZSBlYXJsaWVyIHZlcnNpb25zLCB5b3Ugd291bGQgc2VlIGEgbWVzc2FnZSBsaWtlOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBBTEM4ODAsIHRyeWluZyBhdXRvLXByb2JlIGZyb20gQklPUy4uLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBFdmVuIGlmIHlvdSBzZWUgc3VjaCBhIG1lc3NhZ2UsIERPTidUIFBBTklDLiAgVGFrZSBhIGRlZXAgYnJlYXRoIGFuZApAQCAtNDAzLDYgKzQwNyw2NiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAorRWFybHkgUGF0Y2hpbmcKK35+fn5+fn5+fn5+fn5+CitXaGVuIENPTkZJR19TTkRfSERBX1BBVENIX0xPQURFUj15IGlzIHNldCwgeW91IGNhbiBwYXNzIGEgInBhdGNoIiBhcyBhCitmaXJtd2FyZSBmaWxlIGZvciBtb2RpZnlpbmcgdGhlIEhELWF1ZGlvIHNldHVwIGJlZm9yZSBpbml0aWFsaXppbmcgdGhlCitjb2RlYy4gIFRoaXMgY2FuIHdvcmsgYmFzaWNhbGx5IGxpa2UgdGhlIHJlY29uZmlndXJhdGlvbiB2aWEgc3lzZnMgaW4KK3RoZSBhYm92ZSwgYnV0IGl0IGRvZXMgaXQgYmVmb3JlIHRoZSBmaXJzdCBjb2RlYyBjb25maWd1cmF0aW9uLgorCitBIHBhdGNoIGZpbGUgaXMgYSBwbGFpbiB0ZXh0IGZpbGUgd2hpY2ggbG9va3MgbGlrZSBiZWxvdzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFtjb2RlY10KKyAgMHgxMjM0NTY3OCAweGFiY2QxMjM0IDIKKworICBbbW9kZWxdCisgIGF1dG8KKworICBbcGluY2ZnXQorICAweDEyIDB4NDExMTExZjAKKworICBbdmVyYl0KKyAgMHgyMCAweDUwMCAweDAzCisgIDB4MjAgMHg0MDAgMHhmZgorCisgIFtoaW50XQorICBocF9kZXRlY3QgPSB5ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZSBuZWVkcyB0byBoYXZlIGEgbGluZSBgW2NvZGVjXWAuICBUaGUgbmV4dCBsaW5lIHNob3VsZCBjb250YWluCit0aHJlZSBudW1iZXJzIGluZGljYXRpbmcgdGhlIGNvZGVjIHZlbmRvci1pZCAoMHgxMjM0NTY3OCBpbiB0aGUKK2V4YW1wbGUpLCB0aGUgY29kZWMgc3Vic3lzdGVtLWlkICgweGFiY2QxMjM0KSBhbmQgdGhlIGFkZHJlc3MgKDIpIG9mCit0aGUgY29kZWMuICBUaGUgcmVzdCBwYXRjaCBlbnRyaWVzIGFyZSBhcHBsaWVkIHRvIHRoaXMgc3BlY2lmaWVkIGNvZGVjCit1bnRpbCBhbm90aGVyIGNvZGVjIGVudHJ5IGlzIGdpdmVuLgorCitUaGUgYFttb2RlbF1gIGxpbmUgYWxsb3dzIHRvIGNoYW5nZSB0aGUgbW9kZWwgbmFtZSBvZiB0aGUgZWFjaCBjb2RlYy4KK0luIHRoZSBleGFtcGxlIGFib3ZlLCBpdCB3aWxsIGJlIGNoYW5nZWQgdG8gbW9kZWw9YXV0by4KK05vdGUgdGhhdCB0aGlzIG92ZXJyaWRlcyB0aGUgbW9kdWxlIG9wdGlvbi4KKworQWZ0ZXIgdGhlIGBbcGluY2ZnXWAgbGluZSwgdGhlIGNvbnRlbnRzIGFyZSBwYXJzZWQgYXMgdGhlIGluaXRpYWwKK2RlZmF1bHQgcGluLWNvbmZpZ3VyYXRpb25zIGp1c3QgbGlrZSBgdXNlcl9waW5fY29uZmlnc2Agc3lzZnMgYWJvdmUuCitUaGUgdmFsdWVzIGNhbiBiZSBzaG93biBpbiB1c2VyX3Bpbl9jb25maWdzIHN5c2ZzIGZpbGUsIHRvby4KKworU2ltaWxhcmx5LCB0aGUgbGluZXMgYWZ0ZXIgYFt2ZXJiXWAgYXJlIHBhcnNlZCBhcyBgaW5pdF92ZXJic2AKK3N5c2ZzIGVudHJpZXMsIGFuZCB0aGUgbGluZXMgYWZ0ZXIgYFtoaW50XWAgYXJlIHBhcnNlZCBhcyBgaGludHNgCitzeXNmcyBlbnRyaWVzLCByZXNwZWN0aXZlbHkuCisKK1RoZSBoZC1hdWRpbyBkcml2ZXIgcmVhZHMgdGhlIGZpbGUgdmlhIHJlcXVlc3RfZmlybXdhcmUoKS4gIFRodXMsCithIHBhdGNoIGZpbGUgaGFzIHRvIGJlIGxvY2F0ZWQgb24gdGhlIGFwcHJvcHJpYXRlIGZpcm13YXJlIHBhdGgsCit0eXBpY2FsbHksIC9saWIvZmlybXdhcmUuICBGb3IgZXhhbXBsZSwgd2hlbiB5b3UgcGFzcyB0aGUgb3B0aW9uCitgcGF0Y2g9aGRhLWluaXQuZndgLCB0aGUgZmlsZSAvbGliL2Zpcm13YXJlL2hkYS1pbml0LWZ3IG11c3QgYmUKK3ByZXNlbnQuCisKK1RoZSBwYXRjaCBtb2R1bGUgb3B0aW9uIGlzIHNwZWNpZmljIHRvIGVhY2ggY2FyZCBpbnN0YW5jZSwgYW5kIHlvdQorbmVlZCB0byBnaXZlIG9uZSBmaWxlIG5hbWUgZm9yIGVhY2ggaW5zdGFuY2UsIHNlcGFyYXRlZCBieSBjb21tYXMuCitGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIGNhcmRzLCBvbmUgZm9yIGFuIG9uLWJvYXJkIGFuYWxvZyBhbmQgb25lIAorZm9yIGFuIEhETUkgdmlkZW8gYm9hcmQsIHlvdSBtYXkgcGFzcyBwYXRjaCBvcHRpb24gbGlrZSBiZWxvdzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG9wdGlvbnMgc25kLWhkYS1pbnRlbCBwYXRjaD1vbi1ib2FyZC1wYXRjaCxoZG1pLXBhdGNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCiBQb3dlci1TYXZpbmcKIH5+fn5+fn5+fn5+fgogVGhlIHBvd2VyLXNhdmluZyBpcyBhIGtpbmQgb2YgYXV0by1zdXNwZW5kIG9mIHRoZSBkZXZpY2UuICBXaGVuIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKaW5kZXggMzIyYTAwYmIuLjJkYmZmNTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dApAQCAtMTksNiArMTksNyBAQAogc2hvdyB1cCBpbiAvcHJvYy9zeXMva2VybmVsOgogLSBhY3BpX3ZpZGVvX2ZsYWdzCiAtIGFjY3QKKy0gY2FsbGhvbWUJCSAgICAgWyBTMzkwIG9ubHkgXQogLSBhdXRvX21zZ21uaQogLSBjb3JlX3BhdHRlcm4KIC0gY29yZV91c2VzX3BpZApAQCAtOTEsNiArOTIsMjEgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorY2FsbGhvbWU6CisKK0NvbnRyb2xzIHRoZSBrZXJuZWwncyBjYWxsaG9tZSBiZWhhdmlvciBpbiBjYXNlIG9mIGEga2VybmVsIHBhbmljLgorCitUaGUgczM5MCBoYXJkd2FyZSBhbGxvd3MgYW4gb3BlcmF0aW5nIHN5c3RlbSB0byBzZW5kIGEgbm90aWZpY2F0aW9uCit0byBhIHNlcnZpY2Ugb3JnYW5pemF0aW9uIChjYWxsaG9tZSkgaW4gY2FzZSBvZiBhbiBvcGVyYXRpbmcgc3lzdGVtIHBhbmljLgorCitXaGVuIHRoZSB2YWx1ZSBpbiB0aGlzIGZpbGUgaXMgMCAod2hpY2ggaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IpCitub3RoaW5nIGhhcHBlbnMgaW4gY2FzZSBvZiBhIGtlcm5lbCBwYW5pYy4gSWYgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gIjEiCit0aGUgY29tcGxldGUga2VybmVsIG9vcHMgbWVzc2FnZSBpcyBzZW5kIHRvIHRoZSBJQk0gY3VzdG9tZXIgc2VydmljZQorb3JnYW5pemF0aW9uIGluIGNhc2UgdGhlIG1haW5mcmFtZSB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbSBpcyBydW5uaW5nCitvbiBoYXMgYSBzZXJ2aWNlIGNvbnRyYWN0IHdpdGggSUJNLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiBjb3JlX3BhdHRlcm46CiAKIGNvcmVfcGF0dGVybiBpcyB1c2VkIHRvIHNwZWNpZnkgYSBjb3JlIGR1bXBmaWxlIHBhdHRlcm4gbmFtZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dAppbmRleCBmMTU3ZDc1Li4yYmNjOGQ0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2V2ZW50cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9ldmVudHMudHh0CkBAIC04Myw2ICs4MywxNSBAQAogIFggLSB0aGVyZSBpcyBhIG1peHR1cmUgb2YgZXZlbnRzIGVuYWJsZWQgYW5kIGRpc2FibGVkCiAgPyAtIHRoaXMgZmlsZSBkb2VzIG5vdCBhZmZlY3QgYW55IGV2ZW50CiAKKzIuMyBCb290IG9wdGlvbgorLS0tLS0tLS0tLS0tLS0tCisKK0luIG9yZGVyIHRvIGZhY2lsaXRhdGUgZWFybHkgYm9vdCBkZWJ1Z2dpbmcsIHVzZSBib290IG9wdGlvbjoKKworCXRyYWNlX2V2ZW50PVtldmVudC1saXN0XQorCitUaGUgZm9ybWF0IG9mIHRoaXMgYm9vdCBvcHRpb24gaXMgdGhlIHNhbWUgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMi4xLgorCiAzLiBEZWZpbmluZyBhbiBldmVudC1lbmFibGVkIHRyYWNlcG9pbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKaW5kZXggYTM5YjNjNy4uMzU1ZDBmMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dApAQCAtODUsMjYgKzg1LDE5IEBACiAJVGhpcyBmaWxlIGhvbGRzIHRoZSBvdXRwdXQgb2YgdGhlIHRyYWNlIGluIGEgaHVtYW4KIAlyZWFkYWJsZSBmb3JtYXQgKGRlc2NyaWJlZCBiZWxvdykuCiAKLSAgbGF0ZW5jeV90cmFjZToKLQotCVRoaXMgZmlsZSBzaG93cyB0aGUgc2FtZSB0cmFjZSBidXQgdGhlIGluZm9ybWF0aW9uCi0JaXMgb3JnYW5pemVkIG1vcmUgdG8gZGlzcGxheSBwb3NzaWJsZSBsYXRlbmNpZXMKLQlpbiB0aGUgc3lzdGVtIChkZXNjcmliZWQgYmVsb3cpLgotCiAgIHRyYWNlX3BpcGU6CiAKIAlUaGUgb3V0cHV0IGlzIHRoZSBzYW1lIGFzIHRoZSAidHJhY2UiIGZpbGUgYnV0IHRoaXMKIAlmaWxlIGlzIG1lYW50IHRvIGJlIHN0cmVhbWVkIHdpdGggbGl2ZSB0cmFjaW5nLgotCVJlYWRzIGZyb20gdGhpcyBmaWxlIHdpbGwgYmxvY2sgdW50aWwgbmV3IGRhdGEKLQlpcyByZXRyaWV2ZWQuIFVubGlrZSB0aGUgInRyYWNlIiBhbmQgImxhdGVuY3lfdHJhY2UiCi0JZmlsZXMsIHRoaXMgZmlsZSBpcyBhIGNvbnN1bWVyLiBUaGlzIG1lYW5zIHJlYWRpbmcKLQlmcm9tIHRoaXMgZmlsZSBjYXVzZXMgc2VxdWVudGlhbCByZWFkcyB0byBkaXNwbGF5Ci0JbW9yZSBjdXJyZW50IGRhdGEuIE9uY2UgZGF0YSBpcyByZWFkIGZyb20gdGhpcwotCWZpbGUsIGl0IGlzIGNvbnN1bWVkLCBhbmQgd2lsbCBub3QgYmUgcmVhZAotCWFnYWluIHdpdGggYSBzZXF1ZW50aWFsIHJlYWQuIFRoZSAidHJhY2UiIGFuZAotCSJsYXRlbmN5X3RyYWNlIiBmaWxlcyBhcmUgc3RhdGljLCBhbmQgaWYgdGhlCi0JdHJhY2VyIGlzIG5vdCBhZGRpbmcgbW9yZSBkYXRhLCB0aGV5IHdpbGwgZGlzcGxheQotCXRoZSBzYW1lIGluZm9ybWF0aW9uIGV2ZXJ5IHRpbWUgdGhleSBhcmUgcmVhZC4KKwlSZWFkcyBmcm9tIHRoaXMgZmlsZSB3aWxsIGJsb2NrIHVudGlsIG5ldyBkYXRhIGlzCisJcmV0cmlldmVkLiAgVW5saWtlIHRoZSAidHJhY2UiIGZpbGUsIHRoaXMgZmlsZSBpcyBhCisJY29uc3VtZXIuIFRoaXMgbWVhbnMgcmVhZGluZyBmcm9tIHRoaXMgZmlsZSBjYXVzZXMKKwlzZXF1ZW50aWFsIHJlYWRzIHRvIGRpc3BsYXkgbW9yZSBjdXJyZW50IGRhdGEuIE9uY2UKKwlkYXRhIGlzIHJlYWQgZnJvbSB0aGlzIGZpbGUsIGl0IGlzIGNvbnN1bWVkLCBhbmQKKwl3aWxsIG5vdCBiZSByZWFkIGFnYWluIHdpdGggYSBzZXF1ZW50aWFsIHJlYWQuIFRoZQorCSJ0cmFjZSIgZmlsZSBpcyBzdGF0aWMsIGFuZCBpZiB0aGUgdHJhY2VyIGlzIG5vdAorCWFkZGluZyBtb3JlIGRhdGEsdGhleSB3aWxsIGRpc3BsYXkgdGhlIHNhbWUKKwlpbmZvcm1hdGlvbiBldmVyeSB0aW1lIHRoZXkgYXJlIHJlYWQuCiAKICAgdHJhY2Vfb3B0aW9uczoKIApAQCAtMTE3LDEwICsxMTAsMTAgQEAKIAlTb21lIG9mIHRoZSB0cmFjZXJzIHJlY29yZCB0aGUgbWF4IGxhdGVuY3kuCiAJRm9yIGV4YW1wbGUsIHRoZSB0aW1lIGludGVycnVwdHMgYXJlIGRpc2FibGVkLgogCVRoaXMgdGltZSBpcyBzYXZlZCBpbiB0aGlzIGZpbGUuIFRoZSBtYXggdHJhY2UKLQl3aWxsIGFsc28gYmUgc3RvcmVkLCBhbmQgZGlzcGxheWVkIGJ5IGVpdGhlcgotCSJ0cmFjZSIgb3IgImxhdGVuY3lfdHJhY2UiLiAgQSBuZXcgbWF4IHRyYWNlIHdpbGwKLQlvbmx5IGJlIHJlY29yZGVkIGlmIHRoZSBsYXRlbmN5IGlzIGdyZWF0ZXIgdGhhbgotCXRoZSB2YWx1ZSBpbiB0aGlzIGZpbGUuIChpbiBtaWNyb3NlY29uZHMpCisJd2lsbCBhbHNvIGJlIHN0b3JlZCwgYW5kIGRpc3BsYXllZCBieSAidHJhY2UiLgorCUEgbmV3IG1heCB0cmFjZSB3aWxsIG9ubHkgYmUgcmVjb3JkZWQgaWYgdGhlCisJbGF0ZW5jeSBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIGluIHRoaXMKKwlmaWxlLiAoaW4gbWljcm9zZWNvbmRzKQogCiAgIGJ1ZmZlcl9zaXplX2tiOgogCkBAIC0yMTAsNyArMjAzLDcgQEAKIAl0aGUgdHJhY2Ugd2l0aCB0aGUgbG9uZ2VzdCBtYXggbGF0ZW5jeS4KIAlTZWUgdHJhY2luZ19tYXhfbGF0ZW5jeS4gV2hlbiBhIG5ldyBtYXggaXMgcmVjb3JkZWQsCiAJaXQgcmVwbGFjZXMgdGhlIG9sZCB0cmFjZS4gSXQgaXMgYmVzdCB0byB2aWV3IHRoaXMKLQl0cmFjZSB2aWEgdGhlIGxhdGVuY3lfdHJhY2UgZmlsZS4KKwl0cmFjZSB3aXRoIHRoZSBsYXRlbmN5LWZvcm1hdCBvcHRpb24gZW5hYmxlZC4KIAogICAicHJlZW1wdG9mZiIKIApAQCAtMzA3LDggKzMwMCw4IEBACiBMYXRlbmN5IHRyYWNlIGZvcm1hdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRm9yIHRyYWNlcyB0aGF0IGRpc3BsYXkgbGF0ZW5jeSB0aW1lcywgdGhlIGxhdGVuY3lfdHJhY2UgZmlsZQotZ2l2ZXMgc29tZXdoYXQgbW9yZSBpbmZvcm1hdGlvbiB0byBzZWUgd2h5IGEgbGF0ZW5jeSBoYXBwZW5lZC4KK1doZW4gdGhlIGxhdGVuY3ktZm9ybWF0IG9wdGlvbiBpcyBlbmFibGVkLCB0aGUgdHJhY2UgZmlsZSBnaXZlcworc29tZXdoYXQgbW9yZSBpbmZvcm1hdGlvbiB0byBzZWUgd2h5IGEgbGF0ZW5jeSBoYXBwZW5lZC4KIEhlcmUgaXMgYSB0eXBpY2FsIHRyYWNlLgogCiAjIHRyYWNlcjogaXJxc29mZgpAQCAtMzgwLDkgKzM3MywxMCBAQAogCiBUaGUgYWJvdmUgaXMgbW9zdGx5IG1lYW5pbmdmdWwgZm9yIGtlcm5lbCBkZXZlbG9wZXJzLgogCi0gIHRpbWU6IFRoaXMgZGlmZmVycyBmcm9tIHRoZSB0cmFjZSBmaWxlIG91dHB1dC4gVGhlIHRyYWNlIGZpbGUgb3V0cHV0Ci0JaW5jbHVkZXMgYW4gYWJzb2x1dGUgdGltZXN0YW1wLiBUaGUgdGltZXN0YW1wIHVzZWQgYnkgdGhlCi0JbGF0ZW5jeV90cmFjZSBmaWxlIGlzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgdHJhY2UuCisgIHRpbWU6IFdoZW4gdGhlIGxhdGVuY3ktZm9ybWF0IG9wdGlvbiBpcyBlbmFibGVkLCB0aGUgdHJhY2UgZmlsZQorCW91dHB1dCBpbmNsdWRlcyBhIHRpbWVzdGFtcCByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlCisJdHJhY2UuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBvdXRwdXQgd2hlbiBsYXRlbmN5LWZvcm1hdAorCWlzIGRpc2FibGVkLCB3aGljaCBpbmNsdWRlcyBhbiBhYnNvbHV0ZSB0aW1lc3RhbXAuCiAKICAgZGVsYXk6IFRoaXMgaXMganVzdCB0byBoZWxwIGNhdGNoIHlvdXIgZXllIGEgYml0IGJldHRlci4gQW5kCiAJIG5lZWRzIHRvIGJlIGZpeGVkIHRvIGJlIG9ubHkgcmVsYXRpdmUgdG8gdGhlIHNhbWUgQ1BVLgpAQCAtNDQwLDcgKzQzNCw4IEBACiAgIHN5bS1hZGRyOgogICAgYmFzaC00MDAwICBbMDFdICAxNDc3LjYwNjY5NDogc2ltcGxlX3N0cnRvdWwgPGMwMzM5MzQ2PgogCi0gIHZlcmJvc2UgLSBUaGlzIGRlYWxzIHdpdGggdGhlIGxhdGVuY3lfdHJhY2UgZmlsZS4KKyAgdmVyYm9zZSAtIFRoaXMgZGVhbHMgd2l0aCB0aGUgdHJhY2UgZmlsZSB3aGVuIHRoZQorICAgICAgICAgICAgbGF0ZW5jeS1mb3JtYXQgb3B0aW9uIGlzIGVuYWJsZWQuCiAKICAgICBiYXNoICA0MDAwIDEgMCAwMDAwMDAwMCAwMDAxMGE5NSBbNTgxMjdkMjZdIDE3MjAuNDE1bXMgXAogICAgICgrMC4wMDBtcyk6IHNpbXBsZV9zdHJ0b3VsIChzdHJpY3Rfc3RydG91bCkKQEAgLTQ3Miw3ICs0NjcsNyBAQAogCQl0aGUgYXBwIGlzIG5vIGxvbmdlciBydW5uaW5nCiAKIAkJVGhlIGxvb2t1cCBpcyBwZXJmb3JtZWQgd2hlbiB5b3UgcmVhZAotCQl0cmFjZSx0cmFjZV9waXBlLGxhdGVuY3lfdHJhY2UuIEV4YW1wbGU6CisJCXRyYWNlLHRyYWNlX3BpcGUuIEV4YW1wbGU6CiAKIAkJYS5vdXQtMTYyMyAgWzAwMF0gNDA4NzQuNDY1MDY4OiAvcm9vdC9hLm91dFsrMHg0ODBdIDwtL3Jvb3QvYS5vdXRbKzAKIHg0OTRdIDwtIC9yb290L2Eub3V0WysweDRhOF0gPC0gL2xpYi9saWJjLTIuNy5zb1srMHgxZTFhNl0KQEAgLTQ4MSw2ICs0NzYsMTEgQEAKIAkgICAgICAgZXZlcnkgc2NoZWR1bGluZyBldmVudC4gV2lsbCBhZGQgb3ZlcmhlYWQgaWYKIAkgICAgICAgdGhlcmUncyBhIGxvdCBvZiB0YXNrcyBydW5uaW5nIGF0IG9uY2UuCiAKKyAgbGF0ZW5jeS1mb3JtYXQgLSBUaGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSB0cmFjZS4gV2hlbgorICAgICAgICAgICAgICAgICAgIGl0IGlzIGVuYWJsZWQsIHRoZSB0cmFjZSBkaXNwbGF5cworICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgbGF0ZW5jaWVzLCBhcyBkZXNjcmliZWQgaW4gIkxhdGVuY3kKKyAgICAgICAgICAgICAgICAgICB0cmFjZSBmb3JtYXQiLgogCiBzY2hlZF9zd2l0Y2gKIC0tLS0tLS0tLS0tLQpAQCAtNTk2LDEyICs1OTYsMTMgQEAKIGFuIGV4YW1wbGU6CiAKICAjIGVjaG8gaXJxc29mZiA+IGN1cnJlbnRfdHJhY2VyCisgIyBlY2hvIGxhdGVuY3ktZm9ybWF0ID4gdHJhY2Vfb3B0aW9ucwogICMgZWNobyAwID4gdHJhY2luZ19tYXhfbGF0ZW5jeQogICMgZWNobyAxID4gdHJhY2luZ19lbmFibGVkCiAgIyBscyAtbHRyCiAgWy4uLl0KICAjIGVjaG8gMCA+IHRyYWNpbmdfZW5hYmxlZAotICMgY2F0IGxhdGVuY3lfdHJhY2UKKyAjIGNhdCB0cmFjZQogIyB0cmFjZXI6IGlycXNvZmYKICMKIGlycXNvZmYgbGF0ZW5jeSB0cmFjZSB2MS4xLjUgb24gMi42LjI2CkBAIC03MDMsMTIgKzcwNCwxMyBAQAogaXMgbXVjaCBsaWtlIHRoZSBpcnFzb2ZmIHRyYWNlci4KIAogICMgZWNobyBwcmVlbXB0b2ZmID4gY3VycmVudF90cmFjZXIKKyAjIGVjaG8gbGF0ZW5jeS1mb3JtYXQgPiB0cmFjZV9vcHRpb25zCiAgIyBlY2hvIDAgPiB0cmFjaW5nX21heF9sYXRlbmN5CiAgIyBlY2hvIDEgPiB0cmFjaW5nX2VuYWJsZWQKICAjIGxzIC1sdHIKICBbLi4uXQogICMgZWNobyAwID4gdHJhY2luZ19lbmFibGVkCi0gIyBjYXQgbGF0ZW5jeV90cmFjZQorICMgY2F0IHRyYWNlCiAjIHRyYWNlcjogcHJlZW1wdG9mZgogIwogcHJlZW1wdG9mZiBsYXRlbmN5IHRyYWNlIHYxLjEuNSBvbiAyLjYuMjYtcmM4CkBAIC04NTAsMTIgKzg1MiwxMyBAQAogdHJhY2Vycy4KIAogICMgZWNobyBwcmVlbXB0aXJxc29mZiA+IGN1cnJlbnRfdHJhY2VyCisgIyBlY2hvIGxhdGVuY3ktZm9ybWF0ID4gdHJhY2Vfb3B0aW9ucwogICMgZWNobyAwID4gdHJhY2luZ19tYXhfbGF0ZW5jeQogICMgZWNobyAxID4gdHJhY2luZ19lbmFibGVkCiAgIyBscyAtbHRyCiAgWy4uLl0KICAjIGVjaG8gMCA+IHRyYWNpbmdfZW5hYmxlZAotICMgY2F0IGxhdGVuY3lfdHJhY2UKKyAjIGNhdCB0cmFjZQogIyB0cmFjZXI6IHByZWVtcHRpcnFzb2ZmCiAjCiBwcmVlbXB0aXJxc29mZiBsYXRlbmN5IHRyYWNlIHYxLjEuNSBvbiAyLjYuMjYtcmM4CkBAIC0xMDEyLDExICsxMDE1LDEyIEBACiAnY2hydCcgd2hpY2ggY2hhbmdlcyB0aGUgcHJpb3JpdHkgb2YgdGhlIHRhc2suCiAKICAjIGVjaG8gd2FrZXVwID4gY3VycmVudF90cmFjZXIKKyAjIGVjaG8gbGF0ZW5jeS1mb3JtYXQgPiB0cmFjZV9vcHRpb25zCiAgIyBlY2hvIDAgPiB0cmFjaW5nX21heF9sYXRlbmN5CiAgIyBlY2hvIDEgPiB0cmFjaW5nX2VuYWJsZWQKICAjIGNocnQgLWYgNSBzbGVlcCAxCiAgIyBlY2hvIDAgPiB0cmFjaW5nX2VuYWJsZWQKLSAjIGNhdCBsYXRlbmN5X3RyYWNlCisgIyBjYXQgdHJhY2UKICMgdHJhY2VyOiB3YWtldXAKICMKIHdha2V1cCBsYXRlbmN5IHRyYWNlIHYxLjEuNSBvbiAyLjYuMjYtcmM4CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z1bmN0aW9uLWdyYXBoLWZvbGQudmltIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdW5jdGlvbi1ncmFwaC1mb2xkLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTQ0YjUwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdW5jdGlvbi1ncmFwaC1mb2xkLnZpbQpAQCAtMCwwICsxLDQyIEBACisiIEVuYWJsZSBmb2xkaW5nIGZvciBmdHJhY2UgZnVuY3Rpb25fZ3JhcGggdHJhY2VzLgorIgorIiBUbyB1c2UsIDpzb3VyY2UgdGhpcyBmaWxlIHdoaWxlIHZpZXdpbmcgYSBmdW5jdGlvbl9ncmFwaCB0cmFjZSwgb3IgdXNlIHZpbSdzCisiIC1TIG9wdGlvbiB0byBsb2FkIGZyb20gdGhlIGNvbW1hbmQtbGluZSB0b2dldGhlciB3aXRoIGEgdHJhY2UuICBZb3UgY2FuIHRoZW4KKyIgdXNlIHRoZSB1c3VhbCB2aW0gZm9sZCBjb21tYW5kcywgc3VjaCBhcyAiemEiLCB0byBvcGVuIGFuZCBjbG9zZSBuZXN0ZWQKKyIgZnVuY3Rpb25zLiAgV2hpbGUgY2xvc2VkLCBhIGZvbGQgd2lsbCBzaG93IHRoZSB0b3RhbCB0aW1lIHRha2VuIGZvciBhIGNhbGwsCisiIGFzIHdvdWxkIG5vcm1hbGx5IGFwcGVhciBvbiB0aGUgbGluZSB3aXRoIHRoZSBjbG9zaW5nIGJyYWNlLiAgRm9sZGVkCisiIGZ1bmN0aW9ucyB3aWxsIG5vdCBpbmNsdWRlIGZpbmlzaF90YXNrX3N3aXRjaCgpLCBzbyBmb2xkaW5nIHNob3VsZCByZW1haW4KKyIgcmVsYXRpdmVseSBzYW5lIGV2ZW4gdGhyb3VnaCBhIGNvbnRleHQgc3dpdGNoLgorIgorIiBOb3RlIHRoYXQgdGhpcyB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgb25seSB3b3JrIHdlbGwgd2l0aCBhCisiIHNpbmdsZS1DUFUgdHJhY2UgKGUuZy4gdHJhY2UtY21kIHJlcG9ydCAtLWNwdSAxKS4KKworZnVuY3Rpb24hIEZ1bmN0aW9uR3JhcGhGb2xkRXhwcihsbnVtKQorICBsZXQgbGluZSA9IGdldGxpbmUoYTpsbnVtKQorICBpZiBsaW5lWy0xOl0gPT0gJ3snCisgICAgaWYgbGluZSA9fiAnZmluaXNoX3Rhc2tfc3dpdGNoKCkgeyQnCisgICAgICByZXR1cm4gJz4xJworICAgIGVuZGlmCisgICAgcmV0dXJuICdhMScKKyAgZWxzZWlmIGxpbmVbLTE6XSA9PSAnfScKKyAgICByZXR1cm4gJ3MxJworICBlbHNlCisgICAgcmV0dXJuICc9JworICBlbmRpZgorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24hIEZ1bmN0aW9uR3JhcGhGb2xkVGV4dCgpCisgIGxldCBzID0gc3BsaXQoZ2V0bGluZSh2OmZvbGRzdGFydCksICd8JywgMSkKKyAgaWYgZ2V0bGluZSh2OmZvbGRlbmQrMSkgPX4gJ2ZpbmlzaF90YXNrX3N3aXRjaCgpIHskJworICAgIGxldCBzWzJdID0gJyB0YXNrIHN3aXRjaCAgJworICBlbHNlCisgICAgbGV0IGUgPSBzcGxpdChnZXRsaW5lKHY6Zm9sZGVuZCksICd8JywgMSkKKyAgICBsZXQgc1syXSA9IGVbMl0KKyAgZW5kaWYKKyAgcmV0dXJuIGpvaW4ocywgJ3wnKQorZW5kZnVuY3Rpb24KKworc2V0bG9jYWwgZm9sZGV4cHI9RnVuY3Rpb25HcmFwaEZvbGRFeHByKHY6bG51bSkKK3NldGxvY2FsIGZvbGR0ZXh0PUZ1bmN0aW9uR3JhcGhGb2xkVGV4dCgpCitzZXRsb2NhbCBmb2xkY29sdW1uPTEyCitzZXRsb2NhbCBmb2xkbWV0aG9kPWV4cHIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2UvcmluZy1idWZmZXItZGVzaWduLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvcmluZy1idWZmZXItZGVzaWduLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjFkMjNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9yaW5nLWJ1ZmZlci1kZXNpZ24udHh0CkBAIC0wLDAgKzEsOTU1IEBACisJCUxvY2tsZXNzIFJpbmcgQnVmZmVyIERlc2lnbgorCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ29weXJpZ2h0IDIwMDkgUmVkIEhhdCBJbmMuCisgICBBdXRob3I6ICAgU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CisgIExpY2Vuc2U6ICAgVGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjIKKyAgICAgICAgICAgICAgIChkdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIpCitSZXZpZXdlcnM6ICAgTWF0aGlldSBEZXNub3llcnMsIEh1YW5nIFlpbmcsIEhpZGV0b3NoaSBTZXRvLAorCSAgICAgYW5kIEZyZWRlcmljIFdlaXNiZWNrZXIuCisKKworV3JpdHRlbiBmb3I6IDIuNi4zMQorCitUZXJtaW5vbG9neSB1c2VkIGluIHRoaXMgRG9jdW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0YWlsIC0gd2hlcmUgbmV3IHdyaXRlcyBoYXBwZW4gaW4gdGhlIHJpbmcgYnVmZmVyLgorCitoZWFkIC0gd2hlcmUgbmV3IHJlYWRzIGhhcHBlbiBpbiB0aGUgcmluZyBidWZmZXIuCisKK3Byb2R1Y2VyIC0gdGhlIHRhc2sgdGhhdCB3cml0ZXMgaW50byB0aGUgcmluZyBidWZmZXIgKHNhbWUgYXMgd3JpdGVyKQorCit3cml0ZXIgLSBzYW1lIGFzIHByb2R1Y2VyCisKK2NvbnN1bWVyIC0gdGhlIHRhc2sgdGhhdCByZWFkcyBmcm9tIHRoZSBidWZmZXIgKHNhbWUgYXMgcmVhZGVyKQorCityZWFkZXIgLSBzYW1lIGFzIGNvbnN1bWVyLgorCityZWFkZXJfcGFnZSAtIEEgcGFnZSBvdXRzaWRlIHRoZSByaW5nIGJ1ZmZlciB1c2VkIHNvbGVseSAoZm9yIHRoZSBtb3N0IHBhcnQpCisgICAgYnkgdGhlIHJlYWRlci4KKworaGVhZF9wYWdlIC0gYSBwb2ludGVyIHRvIHRoZSBwYWdlIHRoYXQgdGhlIHJlYWRlciB3aWxsIHVzZSBuZXh0CisKK3RhaWxfcGFnZSAtIGEgcG9pbnRlciB0byB0aGUgcGFnZSB0aGF0IHdpbGwgYmUgd3JpdHRlbiB0byBuZXh0CisKK2NvbW1pdF9wYWdlIC0gYSBwb2ludGVyIHRvIHRoZSBwYWdlIHdpdGggdGhlIGxhc3QgZmluaXNoZWQgbm9uIG5lc3RlZCB3cml0ZS4KKworY21weGNoZyAtIGhhcmR3YXJlIGFzc2lzdGVkIGF0b21pYyB0cmFuc2FjdGlvbiB0aGF0IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmc6CisKKyAgIEEgPSBCIGlmZiBwcmV2aW91cyBBID09IEMKKworICAgUiA9IGNtcHhjaGcoQSwgQywgQikgaXMgc2F5aW5nIHRoYXQgd2UgcmVwbGFjZSBBIHdpdGggQiBpZiBhbmQgb25seSBpZgorICAgICAgY3VycmVudCBBIGlzIGVxdWFsIHRvIEMsIGFuZCB3ZSBwdXQgdGhlIG9sZCAoY3VycmVudCkgQSBpbnRvIFIKKworICAgUiBnZXRzIHRoZSBwcmV2aW91cyBBIHJlZ2FyZGxlc3MgaWYgQSBpcyB1cGRhdGVkIHdpdGggQiBvciBub3QuCisKKyAgIFRvIHNlZSBpZiB0aGUgdXBkYXRlIHdhcyBzdWNjZXNzZnVsIGEgY29tcGFyZSBvZiBSID09IEMgbWF5IGJlIHVzZWQuCisKK1RoZSBHZW5lcmljIFJpbmcgQnVmZmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcmluZyBidWZmZXIgY2FuIGJlIHVzZWQgaW4gZWl0aGVyIGFuIG92ZXJ3cml0ZSBtb2RlIG9yIGluCitwcm9kdWNlci9jb25zdW1lciBtb2RlLgorCitQcm9kdWNlci9jb25zdW1lciBtb2RlIGlzIHdoZXJlIHRoZSBwcm9kdWNlciB3ZXJlIHRvIGZpbGwgdXAgdGhlCitidWZmZXIgYmVmb3JlIHRoZSBjb25zdW1lciBjb3VsZCBmcmVlIHVwIGFueXRoaW5nLCB0aGUgcHJvZHVjZXIKK3dpbGwgc3RvcCB3cml0aW5nIHRvIHRoZSBidWZmZXIuIFRoaXMgd2lsbCBsb3NlIG1vc3QgcmVjZW50IGV2ZW50cy4KKworT3ZlcndyaXRlIG1vZGUgaXMgd2hlcmUgdGhlIHByb2R1Y2Ugd2VyZSB0byBmaWxsIHVwIHRoZSBidWZmZXIKK2JlZm9yZSB0aGUgY29uc3VtZXIgY291bGQgZnJlZSB1cCBhbnl0aGluZywgdGhlIHByb2R1Y2VyIHdpbGwKK292ZXJ3cml0ZSB0aGUgb2xkZXIgZGF0YS4gVGhpcyB3aWxsIGxvc2UgdGhlIG9sZGVzdCBldmVudHMuCisKK05vIHR3byB3cml0ZXJzIGNhbiB3cml0ZSBhdCB0aGUgc2FtZSB0aW1lIChvbiB0aGUgc2FtZSBwZXIgY3B1IGJ1ZmZlciksCitidXQgYSB3cml0ZXIgbWF5IGludGVycnVwdCBhbm90aGVyIHdyaXRlciwgYnV0IGl0IG11c3QgZmluaXNoIHdyaXRpbmcKK2JlZm9yZSB0aGUgcHJldmlvdXMgd3JpdGVyIG1heSBjb250aW51ZS4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCB0byB0aGUKK2FsZ29yaXRobS4gVGhlIHdyaXRlcnMgYWN0IGxpa2UgYSAic3RhY2siLiBUaGUgd2F5IGludGVycnVwdHMgd29ya3MKK2VuZm9yY2VzIHRoaXMgYmVoYXZpb3IuCisKKworICB3cml0ZXIxIHN0YXJ0CisgICAgIDxwcmVlbXB0ZWQ+IHdyaXRlcjIgc3RhcnQKKyAgICAgICAgIDxwcmVlbXB0ZWQ+IHdyaXRlcjMgc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgIHdyaXRlcjMgZmluaXNoZXMKKyAgICAgICAgICAgICAgICAgd3JpdGVyMiBmaW5pc2hlcworICB3cml0ZXIxIGZpbmlzaGVzCisKK1RoaXMgaXMgdmVyeSBtdWNoIGxpa2UgYSB3cml0ZXIgYmVpbmcgcHJlZW1wdGVkIGJ5IGFuIGludGVycnVwdCBhbmQKK3RoZSBpbnRlcnJ1cHQgZG9pbmcgYSB3cml0ZSBhcyB3ZWxsLgorCitSZWFkZXJzIGNhbiBoYXBwZW4gYXQgYW55IHRpbWUuIEJ1dCBubyB0d28gcmVhZGVycyBtYXkgcnVuIGF0IHRoZQorc2FtZSB0aW1lLCBub3IgY2FuIGEgcmVhZGVyIHByZWVtcHQvaW50ZXJydXB0IGFub3RoZXIgcmVhZGVyLiBBIHJlYWRlcgorY2FuIG5vdCBwcmVlbXB0L2ludGVycnVwdCBhIHdyaXRlciwgYnV0IGl0IG1heSByZWFkL2NvbnN1bWUgZnJvbSB0aGUKK2J1ZmZlciBhdCB0aGUgc2FtZSB0aW1lIGFzIGEgd3JpdGVyIGlzIHdyaXRpbmcsIGJ1dCB0aGUgcmVhZGVyIG11c3QgYmUKK29uIGFub3RoZXIgcHJvY2Vzc29yIHRvIGRvIHNvLiBBIHJlYWRlciBtYXkgcmVhZCBvbiBpdHMgb3duIHByb2Nlc3NvcgorYW5kIGNhbiBiZSBwcmVlbXB0ZWQgYnkgYSB3cml0ZXIuCisKK0Egd3JpdGVyIGNhbiBwcmVlbXB0IGEgcmVhZGVyLCBidXQgYSByZWFkZXIgY2FuIG5vdCBwcmVlbXB0IGEgd3JpdGVyLgorQnV0IGEgcmVhZGVyIGNhbiByZWFkIHRoZSBidWZmZXIgYXQgdGhlIHNhbWUgdGltZSAob24gYW5vdGhlciBwcm9jZXNzb3IpCithcyBhIHdyaXRlci4KKworVGhlIHJpbmcgYnVmZmVyIGlzIG1hZGUgdXAgb2YgYSBsaXN0IG9mIHBhZ2VzIGhlbGQgdG9nZXRoZXIgYnkgYSBsaW5rIGxpc3QuCisKK0F0IGluaXRpYWxpemF0aW9uIGEgcmVhZGVyIHBhZ2UgaXMgYWxsb2NhdGVkIGZvciB0aGUgcmVhZGVyIHRoYXQgaXMgbm90CitwYXJ0IG9mIHRoZSByaW5nIGJ1ZmZlci4KKworVGhlIGhlYWRfcGFnZSwgdGFpbF9wYWdlIGFuZCBjb21taXRfcGFnZSBhcmUgYWxsIGluaXRpYWxpemVkIHRvIHBvaW50Cit0byB0aGUgc2FtZSBwYWdlLgorCitUaGUgcmVhZGVyIHBhZ2UgaXMgaW5pdGlhbGl6ZWQgdG8gaGF2ZSBpdHMgbmV4dCBwb2ludGVyIHBvaW50aW5nIHRvCit0aGUgaGVhZCBwYWdlLCBhbmQgaXRzIHByZXZpb3VzIHBvaW50ZXIgcG9pbnRpbmcgdG8gYSBwYWdlIGJlZm9yZQordGhlIGhlYWQgcGFnZS4KKworVGhlIHJlYWRlciBoYXMgaXRzIG93biBwYWdlIHRvIHVzZS4gQXQgc3RhcnQgdXAgdGltZSwgdGhpcyBwYWdlIGlzCithbGxvY2F0ZWQgYnV0IGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgbGlzdC4gV2hlbiB0aGUgcmVhZGVyIHdhbnRzCit0byByZWFkIGZyb20gdGhlIGJ1ZmZlciwgaWYgaXRzIHBhZ2UgaXMgZW1wdHkgKGxpa2UgaXQgaXMgb24gc3RhcnQgdXApCitpdCB3aWxsIHN3YXAgaXRzIHBhZ2Ugd2l0aCB0aGUgaGVhZF9wYWdlLiBUaGUgb2xkIHJlYWRlciBwYWdlIHdpbGwKK2JlY29tZSBwYXJ0IG9mIHRoZSByaW5nIGJ1ZmZlciBhbmQgdGhlIGhlYWRfcGFnZSB3aWxsIGJlIHJlbW92ZWQuCitUaGUgcGFnZSBhZnRlciB0aGUgaW5zZXJ0ZWQgcGFnZSAob2xkIHJlYWRlcl9wYWdlKSB3aWxsIGJlY29tZSB0aGUKK25ldyBoZWFkIHBhZ2UuCisKK09uY2UgdGhlIG5ldyBwYWdlIGlzIGdpdmVuIHRvIHRoZSByZWFkZXIsIHRoZSByZWFkZXIgY291bGQgZG8gd2hhdAoraXQgd2FudHMgd2l0aCBpdCwgYXMgbG9uZyBhcyBhIHdyaXRlciBoYXMgbGVmdCB0aGF0IHBhZ2UuCisKK0Egc2FtcGxlIG9mIGhvdyB0aGUgcmVhZGVyIHBhZ2UgaXMgc3dhcHBlZDogTm90ZSB0aGlzIGRvZXMgbm90CitzaG93IHRoZSBoZWFkIHBhZ2UgaW4gdGhlIGJ1ZmZlciwgaXQgaXMgZm9yIGRlbW9uc3RyYXRpbmcgYSBzd2FwCitvbmx5LgorCisgICstLS0tLS0rCisgIHxyZWFkZXJ8ICAgICAgICAgIFJJTkcgQlVGRkVSCisgIHxwYWdlICB8CisgICstLS0tLS0rCisgICAgICAgICAgICAgICAgICArLS0tKyAgICstLS0rICAgKy0tLSsKKyAgICAgICAgICAgICAgICAgIHwgICB8LS0+fCAgIHwtLT58ICAgfAorICAgICAgICAgICAgICAgICAgfCAgIHw8LS18ICAgfDwtLXwgICB8CisgICAgICAgICAgICAgICAgICArLS0tKyAgICstLS0rICAgKy0tLSsKKyAgICAgICAgICAgICAgICAgICBeIHwgICAgICAgICAgICAgXiB8CisgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLSsgfAorICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLSsKKworCisgICstLS0tLS0rCisgIHxyZWFkZXJ8ICAgICAgICAgIFJJTkcgQlVGRkVSCisgIHxwYWdlICB8LS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgKy0tLS0tLSsgICAgICAgICAgICAgICAgICAgdgorICAgIHwgICAgICAgICAgICAgKy0tLSsgICArLS0tKyAgICstLS0rCisgICAgfCAgICAgICAgICAgICB8ICAgfC0tPnwgICB8LS0+fCAgIHwKKyAgICB8ICAgICAgICAgICAgIHwgICB8PC0tfCAgIHw8LS18ICAgfDwtKworICAgIHwgICAgICAgICAgICAgKy0tLSsgICArLS0tKyAgICstLS0rICB8CisgICAgfCAgICAgICAgICAgICAgXiB8ICAgICAgICAgICAgIF4gfCAgIHwKKyAgICB8ICAgICAgICAgICAgICB8ICstLS0tLS0tLS0tLS0tKyB8ICAgfAorICAgIHwgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLSsgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICArLS0tLS0tKworICB8cmVhZGVyfCAgICAgICAgICBSSU5HIEJVRkZFUgorICB8cGFnZSAgfC0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICstLS0tLS0rIDwtLS0tLS0tLS0tLS0tLS0rIHYKKyAgICB8ICBeICAgICAgICAgICstLS0rICAgKy0tLSsgICArLS0tKworICAgIHwgIHwgICAgICAgICAgfCAgIHwtLT58ICAgfC0tPnwgICB8CisgICAgfCAgfCAgICAgICAgICB8ICAgfCAgIHwgICB8PC0tfCAgIHw8LSsKKyAgICB8ICB8ICAgICAgICAgICstLS0rICAgKy0tLSsgICArLS0tKyAgfAorICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICBeIHwgICB8CisgICAgfCAgfCAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSsgfCAgIHwKKyAgICB8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgKy0tLS0tLSsKKyAgfGJ1ZmZlcnwgICAgICAgICAgUklORyBCVUZGRVIKKyAgfHBhZ2UgIHwtLS0tLS0tLS0tLS0tLS0tLS0tKworICArLS0tLS0tKyA8LS0tLS0tLS0tLS0tLS0tKyB2CisgICAgfCAgXiAgICAgICAgICArLS0tKyAgICstLS0rICAgKy0tLSsKKyAgICB8ICB8ICAgICAgICAgIHwgICB8ICAgfCAgIHwtLT58ICAgfAorICAgIHwgIHwgIE5ldyAgICAgfCAgIHwgICB8ICAgfDwtLXwgICB8PC0rCisgICAgfCAgfCBSZWFkZXIgICArLS0tKyAgICstLS0rICAgKy0tLSsgIHwKKyAgICB8ICB8ICBwYWdlIC0tLS1eICAgICAgICAgICAgICAgICB8ICAgfAorICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8CisgICAgfCAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKKworSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgcGFnZSBzd2FwcGVkIGlzIHRoZSBjb21taXQgcGFnZSBhbmQgdGhlIHRhaWwgcGFnZSwKK2lmIHdoYXQgaXMgaW4gdGhlIHJpbmcgYnVmZmVyIGlzIGxlc3MgdGhhbiB3aGF0IGlzIGhlbGQgaW4gYSBidWZmZXIgcGFnZS4KKworCisgICAgICAgICAgcmVhZGVyIHBhZ2UgICAgY29tbWl0IHBhZ2UgICB0YWlsIHBhZ2UKKyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAgICAgICAgIHYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfAorICAgICAgICAgICAgICstLS0rICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICB8ICAgfDwtLS0tLS0tLS0tKyAgICAgICAgICAgICB8CisgICAgICAgICAgICAgfCAgIHw8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgIHwgICB8LS0tLS0tKworICAgICAgICAgICAgICstLS0rICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgdgorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCis8LS0tfCAgIHwtLS0+fCAgIHwtLS0+fCAgIHwtLS0+fCAgIHwtLS0+CistLS0+fCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tCisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKworVGhpcyBjYXNlIGlzIHN0aWxsIHZhbGlkIGZvciB0aGlzIGFsZ29yaXRobS4KK1doZW4gdGhlIHdyaXRlciBsZWF2ZXMgdGhlIHBhZ2UsIGl0IHNpbXBseSBnb2VzIGludG8gdGhlIHJpbmcgYnVmZmVyCitzaW5jZSB0aGUgcmVhZGVyIHBhZ2Ugc3RpbGwgcG9pbnRzIHRvIHRoZSBuZXh0IGxvY2F0aW9uIGluIHRoZSByaW5nCitidWZmZXIuCisKKworVGhlIG1haW4gcG9pbnRlcnM6CisKKyAgcmVhZGVyIHBhZ2UgLSBUaGUgcGFnZSB1c2VkIHNvbGVseSBieSB0aGUgcmVhZGVyIGFuZCBpcyBub3QgcGFydAorICAgICAgICAgICAgICAgIG9mIHRoZSByaW5nIGJ1ZmZlciAobWF5IGJlIHN3YXBwZWQgaW4pCisKKyAgaGVhZCBwYWdlIC0gdGhlIG5leHQgcGFnZSBpbiB0aGUgcmluZyBidWZmZXIgdGhhdCB3aWxsIGJlIHN3YXBwZWQKKyAgICAgICAgICAgICAgd2l0aCB0aGUgcmVhZGVyIHBhZ2UuCisKKyAgdGFpbCBwYWdlIC0gdGhlIHBhZ2Ugd2hlcmUgdGhlIG5leHQgd3JpdGUgd2lsbCB0YWtlIHBsYWNlLgorCisgIGNvbW1pdCBwYWdlIC0gdGhlIHBhZ2UgdGhhdCBsYXN0IGZpbmlzaGVkIGEgd3JpdGUuCisKK1RoZSBjb21taXQgcGFnZSBvbmx5IGlzIHVwZGF0ZWQgYnkgdGhlIG91dGVyIG1vc3Qgd3JpdGVyIGluIHRoZQord3JpdGVyIHN0YWNrLiBBIHdyaXRlciB0aGF0IHByZWVtcHRzIGFub3RoZXIgd3JpdGVyIHdpbGwgbm90IG1vdmUgdGhlCitjb21taXQgcGFnZS4KKworV2hlbiBkYXRhIGlzIHdyaXR0ZW4gaW50byB0aGUgcmluZyBidWZmZXIsIGEgcG9zaXRpb24gaXMgcmVzZXJ2ZWQKK2luIHRoZSByaW5nIGJ1ZmZlciBhbmQgcGFzc2VkIGJhY2sgdG8gdGhlIHdyaXRlci4gV2hlbiB0aGUgd3JpdGVyCitpcyBmaW5pc2hlZCB3cml0aW5nIGRhdGEgaW50byB0aGF0IHBvc2l0aW9uLCBpdCBjb21taXRzIHRoZSB3cml0ZS4KKworQW5vdGhlciB3cml0ZSAob3IgYSByZWFkKSBtYXkgdGFrZSBwbGFjZSBhdCBhbnl0aW1lIGR1cmluZyB0aGlzCit0cmFuc2FjdGlvbi4gSWYgYW5vdGhlciB3cml0ZSBoYXBwZW5zIGl0IG11c3QgZmluaXNoIGJlZm9yZSBjb250aW51aW5nCit3aXRoIHRoZSBwcmV2aW91cyB3cml0ZS4KKworCisgICBXcml0ZSByZXNlcnZlOgorCisgICAgICAgQnVmZmVyIHBhZ2UKKyAgICAgICstLS0tLS0tLS0rCisgICAgICB8d3JpdHRlbiAgfAorICAgICAgKy0tLS0tLS0tLSsgIDwtLS0gZ2l2ZW4gYmFjayB0byB3cml0ZXIgKGN1cnJlbnQgY29tbWl0KQorICAgICAgfHJlc2VydmVkIHwKKyAgICAgICstLS0tLS0tLS0rIDwtLS0gdGFpbCBwb2ludGVyCisgICAgICB8IGVtcHR5ICAgfAorICAgICAgKy0tLS0tLS0tLSsKKworICAgV3JpdGUgY29tbWl0OgorCisgICAgICAgQnVmZmVyIHBhZ2UKKyAgICAgICstLS0tLS0tLS0rCisgICAgICB8d3JpdHRlbiAgfAorICAgICAgKy0tLS0tLS0tLSsKKyAgICAgIHx3cml0dGVuICB8CisgICAgICArLS0tLS0tLS0tKyAgPC0tLSBuZXh0IHBvc2l0b24gZm9yIHdyaXRlIChjdXJyZW50IGNvbW1pdCkKKyAgICAgIHwgZW1wdHkgICB8CisgICAgICArLS0tLS0tLS0tKworCisKKyBJZiBhIHdyaXRlIGhhcHBlbnMgYWZ0ZXIgdGhlIGZpcnN0IHJlc2VydmU6CisKKyAgICAgICBCdWZmZXIgcGFnZQorICAgICAgKy0tLS0tLS0tLSsKKyAgICAgIHx3cml0dGVuICB8CisgICAgICArLS0tLS0tLS0tKyAgPC0tIGN1cnJlbnQgY29tbWl0CisgICAgICB8cmVzZXJ2ZWQgfAorICAgICAgKy0tLS0tLS0tLSsgIDwtLS0gZ2l2ZW4gYmFjayB0byBzZWNvbmQgd3JpdGVyCisgICAgICB8cmVzZXJ2ZWQgfAorICAgICAgKy0tLS0tLS0tLSsgPC0tLSB0YWlsIHBvaW50ZXIKKworICBBZnRlciBzZWNvbmQgd3JpdGVyIGNvbW1pdHM6CisKKworICAgICAgIEJ1ZmZlciBwYWdlCisgICAgICArLS0tLS0tLS0tKworICAgICAgfHdyaXR0ZW4gIHwKKyAgICAgICstLS0tLS0tLS0rICA8LS0obGFzdCBmdWxsIGNvbW1pdCkKKyAgICAgIHxyZXNlcnZlZCB8CisgICAgICArLS0tLS0tLS0tKworICAgICAgfHBlbmRpbmcgIHwKKyAgICAgIHxjb21taXQgICB8CisgICAgICArLS0tLS0tLS0tKyA8LS0tIHRhaWwgcG9pbnRlcgorCisgIFdoZW4gdGhlIGZpcnN0IHdyaXRlciBjb21taXRzOgorCisgICAgICAgQnVmZmVyIHBhZ2UKKyAgICAgICstLS0tLS0tLS0rCisgICAgICB8d3JpdHRlbiAgfAorICAgICAgKy0tLS0tLS0tLSsKKyAgICAgIHx3cml0dGVuICB8CisgICAgICArLS0tLS0tLS0tKworICAgICAgfHdyaXR0ZW4gIHwKKyAgICAgICstLS0tLS0tLS0rICA8LS0obGFzdCBmdWxsIGNvbW1pdCBhbmQgdGFpbCBwb2ludGVyKQorCisKK1RoZSBjb21taXQgcG9pbnRlciBwb2ludHMgdG8gdGhlIGxhc3Qgd3JpdGUgbG9jYXRpb24gdGhhdCB3YXMKK2NvbW1pdHRlZCB3aXRob3V0IHByZWVtcHRpbmcgYW5vdGhlciB3cml0ZS4gV2hlbiBhIHdyaXRlIHRoYXQKK3ByZWVtcHRlZCBhbm90aGVyIHdyaXRlIGlzIGNvbW1pdHRlZCwgaXQgb25seSBiZWNvbWVzIGEgcGVuZGluZyBjb21taXQKK2FuZCB3aWxsIG5vdCBiZSBhIGZ1bGwgY29tbWl0IHRpbGwgYWxsIHdyaXRlcyBoYXZlIGJlZW4gY29tbWl0dGVkLgorCitUaGUgY29tbWl0IHBhZ2UgcG9pbnRzIHRvIHRoZSBwYWdlIHRoYXQgaGFzIHRoZSBsYXN0IGZ1bGwgY29tbWl0LgorVGhlIHRhaWwgcGFnZSBwb2ludHMgdG8gdGhlIHBhZ2Ugd2l0aCB0aGUgbGFzdCB3cml0ZSAoYmVmb3JlCitjb21taXR0aW5nKS4KKworVGhlIHRhaWwgcGFnZSBpcyBhbHdheXMgZXF1YWwgdG8gb3IgYWZ0ZXIgdGhlIGNvbW1pdCBwYWdlLiBJdCBtYXkKK2JlIHNldmVyYWwgcGFnZXMgYWhlYWQuIElmIHRoZSB0YWlsIHBhZ2UgY2F0Y2hlcyB1cCB0byB0aGUgY29tbWl0CitwYWdlIHRoZW4gbm8gbW9yZSB3cml0ZXMgbWF5IHRha2UgcGxhY2UgKHJlZ2FyZGxlc3Mgb2YgdGhlIG1vZGUKK29mIHRoZSByaW5nIGJ1ZmZlcjogb3ZlcndyaXRlIGFuZCBwcm9kdWNlL2NvbnN1bWVyKS4KKworVGhlIG9yZGVyIG9mIHBhZ2VzIGFyZToKKworIGhlYWQgcGFnZQorIGNvbW1pdCBwYWdlCisgdGFpbCBwYWdlCisKK1Bvc3NpYmxlIHNjZW5hcmlvOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsIHBhZ2UKKyAgaGVhZCBwYWdlICAgICAgICAgY29tbWl0IHBhZ2UgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgIHwKKyAgICAgIHYgICAgICAgICAgICAgICAgIHYgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LS0tPnwgICB8LS0tPnwgICB8LS0tPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisKK1RoZXJlIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgdGhlIGhlYWQgcGFnZSBpcyBhZnRlciBlaXRoZXIgdGhlIGNvbW1pdCBwYWdlCithbmQgcG9zc2libHkgdGhlIHRhaWwgcGFnZS4gVGhhdCBpcyB3aGVuIHRoZSBjb21taXQgKGFuZCB0YWlsKSBwYWdlIGhhcyBiZWVuCitzd2FwcGVkIHdpdGggdGhlIHJlYWRlciBwYWdlLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGhlYWQgcGFnZSBpcyBhbHdheXMKK3BhcnQgb2YgdGhlIHJpbmcgYnVmZmVyLCBidXQgdGhlIHJlYWRlciBwYWdlIGlzIG5vdC4gV2hlbiBldmVyIHRoZXJlCitoYXMgYmVlbiBsZXNzIHRoYW4gYSBmdWxsIHBhZ2UgdGhhdCBoYXMgYmVlbiBjb21taXR0ZWQgaW5zaWRlIHRoZSByaW5nIGJ1ZmZlciwKK2FuZCBhIHJlYWRlciBzd2FwcyBvdXQgYSBwYWdlLCBpdCB3aWxsIGJlIHN3YXBwaW5nIG91dCB0aGUgY29tbWl0IHBhZ2UuCisKKworICAgICAgICAgIHJlYWRlciBwYWdlICAgIGNvbW1pdCBwYWdlICAgdGFpbCBwYWdlCisgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfAorICAgICAgICAgICAgICB2ICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICArLS0tKyAgICAgICAgICAgfCAgICAgICAgICAgICB8CisgICAgICAgICAgICAgfCAgIHw8LS0tLS0tLS0tLSsgICAgICAgICAgICAgfAorICAgICAgICAgICAgIHwgICB8PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICB8ICAgfC0tLS0tLSsKKyAgICAgICAgICAgICArLS0tKyAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LS0tPnwgICB8LS0tPnwgICB8LS0tPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisgICAgICAgICAgICAgICAgICAgICAgICBeCisgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIGhlYWQgcGFnZQorCisKK0luIHRoaXMgY2FzZSwgdGhlIGhlYWQgcGFnZSB3aWxsIG5vdCBtb3ZlIHdoZW4gdGhlIHRhaWwgYW5kIGNvbW1pdAorbW92ZSBiYWNrIGludG8gdGhlIHJpbmcgYnVmZmVyLgorCitUaGUgcmVhZGVyIGNhbiBub3Qgc3dhcCBhIHBhZ2UgaW50byB0aGUgcmluZyBidWZmZXIgaWYgdGhlIGNvbW1pdCBwYWdlCitpcyBzdGlsbCBvbiB0aGF0IHBhZ2UuIElmIHRoZSByZWFkIG1lZXRzIHRoZSBsYXN0IGNvbW1pdCAocmVhbCBjb21taXQKK25vdCBwZW5kaW5nIG9yIHJlc2VydmVkKSwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIG1vcmUgdG8gcmVhZC4KK1RoZSBidWZmZXIgaXMgY29uc2lkZXJlZCBlbXB0eSB1bnRpbCBhbm90aGVyIGZ1bGwgY29tbWl0IGZpbmlzaGVzLgorCitXaGVuIHRoZSB0YWlsIG1lZXRzIHRoZSBoZWFkIHBhZ2UsIGlmIHRoZSBidWZmZXIgaXMgaW4gb3ZlcndyaXRlIG1vZGUsCit0aGUgaGVhZCBwYWdlIHdpbGwgYmUgcHVzaGVkIGFoZWFkIG9uZS4gSWYgdGhlIGJ1ZmZlciBpcyBpbiBwcm9kdWNlci9jb25zdW1lcgorbW9kZSwgdGhlIHdyaXRlIHdpbGwgZmFpbC4KKworT3ZlcndyaXRlIG1vZGU6CisKKyAgICAgICAgICAgIHRhaWwgcGFnZQorICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgdgorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCis8LS0tfCAgIHwtLS0+fCAgIHwtLS0+fCAgIHwtLS0+fCAgIHwtLS0+CistLS0+fCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tCisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgIF4KKyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgaGVhZCBwYWdlCisKKworICAgICAgICAgICAgdGFpbCBwYWdlCisgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB2CisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKzwtLS18ICAgfC0tLT58ICAgfC0tLT58ICAgfC0tLT58ICAgfC0tLT4KKy0tLT58ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS0KKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkIHBhZ2UKKworCisgICAgICAgICAgICAgICAgICAgIHRhaWwgcGFnZQorICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgdgorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCis8LS0tfCAgIHwtLS0+fCAgIHwtLS0+fCAgIHwtLS0+fCAgIHwtLS0+CistLS0+fCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tCisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCBwYWdlCisKK05vdGUsIHRoZSByZWFkZXIgcGFnZSB3aWxsIHN0aWxsIHBvaW50IHRvIHRoZSBwcmV2aW91cyBoZWFkIHBhZ2UuCitCdXQgd2hlbiBhIHN3YXAgdGFrZXMgcGxhY2UsIGl0IHdpbGwgdXNlIHRoZSBtb3N0IHJlY2VudCBoZWFkIHBhZ2UuCisKKworTWFraW5nIHRoZSBSaW5nIEJ1ZmZlciBMb2NrbGVzczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtYWluIGlkZWEgYmVoaW5kIHRoZSBsb2NrbGVzcyBhbGdvcml0aG0gaXMgdG8gY29tYmluZSB0aGUgbW92aW5nCitvZiB0aGUgaGVhZF9wYWdlIHBvaW50ZXIgd2l0aCB0aGUgc3dhcHBpbmcgb2YgcGFnZXMgd2l0aCB0aGUgcmVhZGVyLgorU3RhdGUgZmxhZ3MgYXJlIHBsYWNlZCBpbnNpZGUgdGhlIHBvaW50ZXIgdG8gdGhlIHBhZ2UuIFRvIGRvIHRoaXMsCitlYWNoIHBhZ2UgbXVzdCBiZSBhbGlnbmVkIGluIG1lbW9yeSBieSA0IGJ5dGVzLiBUaGlzIHdpbGwgYWxsb3cgdGhlIDIKK2xlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIGFkZHJlc3MgdG8gYmUgdXNlZCBhcyBmbGFncy4gU2luY2UKK3RoZXkgd2lsbCBhbHdheXMgYmUgemVybyBmb3IgdGhlIGFkZHJlc3MuIFRvIGdldCB0aGUgYWRkcmVzcywKK3NpbXBseSBtYXNrIG91dCB0aGUgZmxhZ3MuCisKKyAgTUFTSyA9IH4zCisKKyAgYWRkcmVzcyAmIE1BU0sKKworVHdvIGZsYWdzIHdpbGwgYmUga2VwdCBieSB0aGVzZSB0d28gYml0czoKKworICAgSEVBREVSIC0gdGhlIHBhZ2UgYmVpbmcgcG9pbnRlZCB0byBpcyBhIGhlYWQgcGFnZQorCisgICBVUERBVEUgLSB0aGUgcGFnZSBiZWluZyBwb2ludGVkIHRvIGlzIGJlaW5nIHVwZGF0ZWQgYnkgYSB3cml0ZXIKKyAgICAgICAgICBhbmQgd2FzIG9yIGlzIGFib3V0IHRvIGJlIGEgaGVhZCBwYWdlLgorCisKKyAgICAgICAgICByZWFkZXIgcGFnZQorICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgIHYKKyAgICAgICAgICAgICArLS0tKworICAgICAgICAgICAgIHwgICB8LS0tLS0tKworICAgICAgICAgICAgICstLS0rICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgdgorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCis8LS0tfCAgIHwtLS0+fCAgIHwtSC0+fCAgIHwtLS0+fCAgIHwtLS0+CistLS0+fCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tCisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKworCitUaGUgYWJvdmUgcG9pbnRlciAiLUgtPiIgd291bGQgaGF2ZSB0aGUgSEVBREVSIGZsYWcgc2V0LiBUaGF0IGlzCit0aGUgbmV4dCBwYWdlIGlzIHRoZSBuZXh0IHBhZ2UgdG8gYmUgc3dhcHBlZCBvdXQgYnkgdGhlIHJlYWRlci4KK1RoaXMgcG9pbnRlciBtZWFucyB0aGUgbmV4dCBwYWdlIGlzIHRoZSBoZWFkIHBhZ2UuCisKK1doZW4gdGhlIHRhaWwgcGFnZSBtZWV0cyB0aGUgaGVhZCBwb2ludGVyLCBpdCB3aWxsIHVzZSBjbXB4Y2hnIHRvCitjaGFuZ2UgdGhlIHBvaW50ZXIgdG8gdGhlIFVQREFURSBzdGF0ZToKKworCisgICAgICAgICAgICB0YWlsIHBhZ2UKKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LUgtPnwgICB8LS0tPnwgICB8LS0tPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisKKyAgICAgICAgICAgIHRhaWwgcGFnZQorICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgdgorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCis8LS0tfCAgIHwtLS0+fCAgIHwtVS0+fCAgIHwtLS0+fCAgIHwtLS0+CistLS0+fCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tCisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKworIi1VLT4iIHJlcHJlc2VudHMgYSBwb2ludGVyIGluIHRoZSBVUERBVEUgc3RhdGUuCisKK0FueSBhY2Nlc3MgdG8gdGhlIHJlYWRlciB3aWxsIG5lZWQgdG8gdGFrZSBzb21lIHNvcnQgb2YgbG9jayB0byBzZXJpYWxpemUKK3RoZSByZWFkZXJzLiBCdXQgdGhlIHdyaXRlcnMgd2lsbCBuZXZlciB0YWtlIGEgbG9jayB0byB3cml0ZSB0byB0aGUKK3JpbmcgYnVmZmVyLiBUaGlzIG1lYW5zIHdlIG9ubHkgbmVlZCB0byB3b3JyeSBhYm91dCBhIHNpbmdsZSByZWFkZXIsCithbmQgd3JpdGVzIG9ubHkgcHJlZW1wdCBpbiAic3RhY2siIGZvcm1hdGlvbi4KKworV2hlbiB0aGUgcmVhZGVyIHRyaWVzIHRvIHN3YXAgdGhlIHBhZ2Ugd2l0aCB0aGUgcmluZyBidWZmZXIsIGl0Cit3aWxsIGFsc28gdXNlIGNtcHhjaGcuIElmIHRoZSBmbGFnIGJpdCBpbiB0aGUgcG9pbnRlciB0byB0aGUKK2hlYWQgcGFnZSBkb2VzIG5vdCBoYXZlIHRoZSBIRUFERVIgZmxhZyBzZXQsIHRoZSBjb21wYXJlIHdpbGwgZmFpbAorYW5kIHRoZSByZWFkZXIgd2lsbCBuZWVkIHRvIGxvb2sgZm9yIHRoZSBuZXcgaGVhZCBwYWdlIGFuZCB0cnkgYWdhaW4uCitOb3RlLCB0aGUgZmxhZyBVUERBVEUgYW5kIEhFQURFUiBhcmUgbmV2ZXIgc2V0IGF0IHRoZSBzYW1lIHRpbWUuCisKK1RoZSByZWFkZXIgc3dhcHMgdGhlIHJlYWRlciBwYWdlIGFzIGZvbGxvd3M6CisKKyAgKy0tLS0tLSsKKyAgfHJlYWRlcnwgICAgICAgICAgUklORyBCVUZGRVIKKyAgfHBhZ2UgIHwKKyAgKy0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICstLS0rICAgICstLS0rICAgICstLS0rCisgICAgICAgICAgICAgICAgICB8ICAgfC0tLT58ICAgfC0tLT58ICAgfAorICAgICAgICAgICAgICAgICAgfCAgIHw8LS0tfCAgIHw8LS0tfCAgIHwKKyAgICAgICAgICAgICAgICAgICstLS0rICAgICstLS0rICAgICstLS0rCisgICAgICAgICAgICAgICAgICAgXiB8ICAgICAgICAgICAgICAgXiB8CisgICAgICAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tKyB8CisgICAgICAgICAgICAgICAgICAgKy0tLS0tSC0tLS0tLS0tLS0tLS0rCisKK1RoZSByZWFkZXIgc2V0cyB0aGUgcmVhZGVyIHBhZ2UgbmV4dCBwb2ludGVyIGFzIEhFQURFUiB0byB0aGUgcGFnZSBhZnRlcgordGhlIGhlYWQgcGFnZS4KKworCisgICstLS0tLS0rCisgIHxyZWFkZXJ8ICAgICAgICAgIFJJTkcgQlVGRkVSCisgIHxwYWdlICB8LS0tLS0tLUgtLS0tLS0tLS0tLSsKKyAgKy0tLS0tLSsgICAgICAgICAgICAgICAgICAgdgorICAgIHwgICAgICAgICAgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKyAgICB8ICAgICAgICAgICAgIHwgICB8LS0tPnwgICB8LS0tPnwgICB8CisgICAgfCAgICAgICAgICAgICB8ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtKworICAgIHwgICAgICAgICAgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgIHwKKyAgICB8ICAgICAgICAgICAgICBeIHwgICAgICAgICAgICAgICBeIHwgICB8CisgICAgfCAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0tLS0tKyB8ICAgfAorICAgIHwgICAgICAgICAgICAgICstLS0tLUgtLS0tLS0tLS0tLS0tKyAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0l0IGRvZXMgYSBjbXB4Y2hnIHdpdGggdGhlIHBvaW50ZXIgdG8gdGhlIHByZXZpb3VzIGhlYWQgcGFnZSB0byBtYWtlIGl0Citwb2ludCB0byB0aGUgcmVhZGVyIHBhZ2UuIE5vdGUgdGhhdCB0aGUgbmV3IHBvaW50ZXIgZG9lcyBub3QgaGF2ZSB0aGUgSEVBREVSCitmbGFnIHNldC4gIFRoaXMgYWN0aW9uIGF0b21pY2FsbHkgbW92ZXMgdGhlIGhlYWQgcGFnZSBmb3J3YXJkLgorCisgICstLS0tLS0rCisgIHxyZWFkZXJ8ICAgICAgICAgIFJJTkcgQlVGRkVSCisgIHxwYWdlICB8LS0tLS0tLUgtLS0tLS0tLS0tLSsKKyAgKy0tLS0tLSsgICAgICAgICAgICAgICAgICAgdgorICAgIHwgIF4gICAgICAgICAgKy0tLSsgICArLS0tKyAgICstLS0rCisgICAgfCAgfCAgICAgICAgICB8ICAgfC0tPnwgICB8LS0+fCAgIHwKKyAgICB8ICB8ICAgICAgICAgIHwgICB8PC0tfCAgIHw8LS18ICAgfDwtKworICAgIHwgIHwgICAgICAgICAgKy0tLSsgICArLS0tKyAgICstLS0rICB8CisgICAgfCAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgIF4gfCAgIHwKKyAgICB8ICB8ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tKyB8ICAgfAorICAgIHwgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworQWZ0ZXIgdGhlIG5ldyBoZWFkIHBhZ2UgaXMgc2V0LCB0aGUgcHJldmlvdXMgcG9pbnRlciBvZiB0aGUgaGVhZCBwYWdlIGlzCit1cGRhdGVkIHRvIHRoZSByZWFkZXIgcGFnZS4KKworICArLS0tLS0tKworICB8cmVhZGVyfCAgICAgICAgICBSSU5HIEJVRkZFUgorICB8cGFnZSAgfC0tLS0tLS1ILS0tLS0tLS0tLS0rCisgICstLS0tLS0rIDwtLS0tLS0tLS0tLS0tLS0rIHYKKyAgICB8ICBeICAgICAgICAgICstLS0rICAgKy0tLSsgICArLS0tKworICAgIHwgIHwgICAgICAgICAgfCAgIHwtLT58ICAgfC0tPnwgICB8CisgICAgfCAgfCAgICAgICAgICB8ICAgfCAgIHwgICB8PC0tfCAgIHw8LSsKKyAgICB8ICB8ICAgICAgICAgICstLS0rICAgKy0tLSsgICArLS0tKyAgfAorICAgIHwgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgICBeIHwgICB8CisgICAgfCAgfCAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSsgfCAgIHwKKyAgICB8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgKy0tLS0tLSsKKyAgfGJ1ZmZlcnwgICAgICAgICAgUklORyBCVUZGRVIKKyAgfHBhZ2UgIHwtLS0tLS0tSC0tLS0tLS0tLS0tKyAgPC0tLSBOZXcgaGVhZCBwYWdlCisgICstLS0tLS0rIDwtLS0tLS0tLS0tLS0tLS0rIHYKKyAgICB8ICBeICAgICAgICAgICstLS0rICAgKy0tLSsgICArLS0tKworICAgIHwgIHwgICAgICAgICAgfCAgIHwgICB8ICAgfC0tPnwgICB8CisgICAgfCAgfCAgTmV3ICAgICB8ICAgfCAgIHwgICB8PC0tfCAgIHw8LSsKKyAgICB8ICB8IFJlYWRlciAgICstLS0rICAgKy0tLSsgICArLS0tKyAgfAorICAgIHwgIHwgIHBhZ2UgLS0tLV4gICAgICAgICAgICAgICAgIHwgICB8CisgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwKKyAgICB8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0Fub3RoZXIgaW1wb3J0YW50IHBvaW50LiBUaGUgcGFnZSB0aGF0IHRoZSByZWFkZXIgcGFnZSBwb2ludHMgYmFjayB0bworYnkgaXRzIHByZXZpb3VzIHBvaW50ZXIgKHRoZSBvbmUgdGhhdCBub3cgcG9pbnRzIHRvIHRoZSBuZXcgaGVhZCBwYWdlKQorbmV2ZXIgcG9pbnRzIGJhY2sgdG8gdGhlIHJlYWRlciBwYWdlLiBUaGF0IGlzIGJlY2F1c2UgdGhlIHJlYWRlciBwYWdlIGlzCitub3QgcGFydCBvZiB0aGUgcmluZyBidWZmZXIuIFRyYXZlcnNpbmcgdGhlIHJpbmcgYnVmZmVyIHZpYSB0aGUgbmV4dCBwb2ludGVycword2lsbCBhbHdheXMgc3RheSBpbiB0aGUgcmluZyBidWZmZXIuIFRyYXZlcnNpbmcgdGhlIHJpbmcgYnVmZmVyIHZpYSB0aGUKK3ByZXYgcG9pbnRlcnMgbWF5IG5vdC4KKworTm90ZSwgdGhlIHdheSB0byBkZXRlcm1pbmUgYSByZWFkZXIgcGFnZSBpcyBzaW1wbHkgYnkgZXhhbWluaW5nIHRoZSBwcmV2aW91cworcG9pbnRlciBvZiB0aGUgcGFnZS4gSWYgdGhlIG5leHQgcG9pbnRlciBvZiB0aGUgcHJldmlvdXMgcGFnZSBkb2VzIG5vdAorcG9pbnQgYmFjayB0byB0aGUgb3JpZ2luYWwgcGFnZSwgdGhlbiB0aGUgb3JpZ2luYWwgcGFnZSBpcyBhIHJlYWRlciBwYWdlOgorCisKKyAgICAgICAgICAgICArLS0tLS0tLS0rCisgICAgICAgICAgICAgfCByZWFkZXIgfCAgbmV4dCAgICstLS0tKworICAgICAgICAgICAgIHwgIHBhZ2UgIHwtLS0tLS0tLT58ICAgIHw8PT09PT09IChidWZmZXIgcGFnZSkKKyAgICAgICAgICAgICArLS0tLS0tLS0rICAgICAgICAgKy0tLS0rCisgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCBeCisgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgdiB8IG5leHQKKyAgICAgICAgICAgIHByZXYgfCAgICAgICAgICAgICAgKy0tLS0rCisgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tPnwgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLSsKKworVGhlIHdheSB0aGUgaGVhZCBwYWdlIG1vdmVzIGZvcndhcmQ6CisKK1doZW4gdGhlIHRhaWwgcGFnZSBtZWV0cyB0aGUgaGVhZCBwYWdlIGFuZCB0aGUgYnVmZmVyIGlzIGluIG92ZXJ3cml0ZSBtb2RlCithbmQgbW9yZSB3cml0ZXMgdGFrZSBwbGFjZSwgdGhlIGhlYWQgcGFnZSBtdXN0IGJlIG1vdmVkIGZvcndhcmQgYmVmb3JlIHRoZQord3JpdGVyIG1heSBtb3ZlIHRoZSB0YWlsIHBhZ2UuIFRoZSB3YXkgdGhpcyBpcyBkb25lIGlzIHRoYXQgdGhlIHdyaXRlcgorcGVyZm9ybXMgYSBjbXB4Y2hnIHRvIGNvbnZlcnQgdGhlIHBvaW50ZXIgdG8gdGhlIGhlYWQgcGFnZSBmcm9tIHRoZSBIRUFERVIKK2ZsYWcgdG8gaGF2ZSB0aGUgVVBEQVRFIGZsYWcgc2V0LiBPbmNlIHRoaXMgaXMgZG9uZSwgdGhlIHJlYWRlciB3aWxsCitub3QgYmUgYWJsZSB0byBzd2FwIHRoZSBoZWFkIHBhZ2UgZnJvbSB0aGUgYnVmZmVyLCBub3Igd2lsbCBpdCBiZSBhYmxlIHRvCittb3ZlIHRoZSBoZWFkIHBhZ2UsIHVudGlsIHRoZSB3cml0ZXIgaXMgZmluaXNoZWQgd2l0aCB0aGUgbW92ZS4KKworVGhpcyBlbGltaW5hdGVzIGFueSByYWNlcyB0aGF0IHRoZSByZWFkZXIgY2FuIGhhdmUgb24gdGhlIHdyaXRlci4gVGhlIHJlYWRlcgorbXVzdCBzcGluLCBhbmQgdGhpcyBpcyB3aHkgdGhlIHJlYWRlciBjYW4gbm90IHByZWVtcHQgdGhlIHdyaXRlci4KKworICAgICAgICAgICAgdGFpbCBwYWdlCisgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB2CisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKzwtLS18ICAgfC0tLT58ICAgfC1ILT58ICAgfC0tLT58ICAgfC0tLT4KKy0tLT58ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS0KKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworCisgICAgICAgICAgICB0YWlsIHBhZ2UKKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LVUtPnwgICB8LS0tPnwgICB8LS0tPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisKK1RoZSBmb2xsb3dpbmcgcGFnZSB3aWxsIGJlIG1hZGUgaW50byB0aGUgbmV3IGhlYWQgcGFnZS4KKworICAgICAgICAgICB0YWlsIHBhZ2UKKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LVUtPnwgICB8LUgtPnwgICB8LS0tPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisKK0FmdGVyIHRoZSBuZXcgaGVhZCBwYWdlIGhhcyBiZWVuIHNldCwgd2UgY2FuIHNldCB0aGUgb2xkIGhlYWQgcGFnZQorcG9pbnRlciBiYWNrIHRvIE5PUk1BTC4KKworICAgICAgICAgICB0YWlsIHBhZ2UKKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LS0tPnwgICB8LUgtPnwgICB8LS0tPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisKK0FmdGVyIHRoZSBoZWFkIHBhZ2UgaGFzIGJlZW4gbW92ZWQsIHRoZSB0YWlsIHBhZ2UgbWF5IG5vdyBtb3ZlIGZvcndhcmQuCisKKyAgICAgICAgICAgICAgICAgICAgdGFpbCBwYWdlCisgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICB2CisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKzwtLS18ICAgfC0tLT58ICAgfC0tLT58ICAgfC1ILT58ICAgfC0tLT4KKy0tLT58ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS0KKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworCisKK1RoZSBhYm92ZSBhcmUgdGhlIHRyaXZpYWwgdXBkYXRlcy4gTm93IGZvciB0aGUgbW9yZSBjb21wbGV4IHNjZW5hcmlvcy4KKworCitBcyBzdGF0ZWQgYmVmb3JlLCBpZiBlbm91Z2ggd3JpdGVzIHByZWVtcHQgdGhlIGZpcnN0IHdyaXRlLCB0aGUKK3RhaWwgcGFnZSBtYXkgbWFrZSBpdCBhbGwgdGhlIHdheSBhcm91bmQgdGhlIGJ1ZmZlciBhbmQgbWVldCB0aGUgY29tbWl0CitwYWdlLiBBdCB0aGlzIHRpbWUsIHdlIG11c3Qgc3RhcnQgZHJvcHBpbmcgd3JpdGVzICh1c3VhbGx5IHdpdGggc29tZSBraW5kCitvZiB3YXJuaW5nIHRvIHRoZSB1c2VyKS4gQnV0IHdoYXQgaGFwcGVucyBpZiB0aGUgY29tbWl0IHdhcyBzdGlsbCBvbiB0aGUKK3JlYWRlciBwYWdlPyBUaGUgY29tbWl0IHBhZ2UgaXMgbm90IHBhcnQgb2YgdGhlIHJpbmcgYnVmZmVyLiBUaGUgdGFpbCBwYWdlCittdXN0IGFjY291bnQgZm9yIHRoaXMuCisKKworICAgICAgICAgIHJlYWRlciBwYWdlICAgIGNvbW1pdCBwYWdlCisgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgdiAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICstLS0rICAgICAgICAgICB8CisgICAgICAgICAgICAgfCAgIHw8LS0tLS0tLS0tLSsKKyAgICAgICAgICAgICB8ICAgfAorICAgICAgICAgICAgIHwgICB8LS0tLS0tKworICAgICAgICAgICAgICstLS0rICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgdgorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCis8LS0tfCAgIHwtLS0+fCAgIHwtSC0+fCAgIHwtLS0+fCAgIHwtLS0+CistLS0+fCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tCisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKyAgICAgICAgICAgICAgIF4KKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgdGFpbCBwYWdlCisKK0lmIHRoZSB0YWlsIHBhZ2Ugd2VyZSB0byBzaW1wbHkgcHVzaCB0aGUgaGVhZCBwYWdlIGZvcndhcmQsIHRoZSBjb21taXQgd2hlbgorbGVhdmluZyB0aGUgcmVhZGVyIHBhZ2Ugd291bGQgbm90IGJlIHBvaW50aW5nIHRvIHRoZSBjb3JyZWN0IHBhZ2UuCisKK1RoZSBzb2x1dGlvbiB0byB0aGlzIGlzIHRvIHRlc3QgaWYgdGhlIGNvbW1pdCBwYWdlIGlzIG9uIHRoZSByZWFkZXIgcGFnZQorYmVmb3JlIHB1c2hpbmcgdGhlIGhlYWQgcGFnZS4gSWYgaXQgaXMsIHRoZW4gaXQgY2FuIGJlIGFzc3VtZWQgdGhhdCB0aGUKK3RhaWwgcGFnZSB3cmFwcGVkIHRoZSBidWZmZXIsIGFuZCB3ZSBtdXN0IGRyb3AgbmV3IHdyaXRlcy4KKworVGhpcyBpcyBub3QgYSByYWNlIGNvbmRpdGlvbiwgYmVjYXVzZSB0aGUgY29tbWl0IHBhZ2UgY2FuIG9ubHkgYmUgbW92ZWQKK2J5IHRoZSBvdXR0ZXIgbW9zdCB3cml0ZXIgKHRoZSB3cml0ZXIgdGhhdCB3YXMgcHJlZW1wdGVkKS4KK1RoaXMgbWVhbnMgdGhhdCB0aGUgY29tbWl0IHdpbGwgbm90IG1vdmUgd2hpbGUgYSB3cml0ZXIgaXMgbW92aW5nIHRoZQordGFpbCBwYWdlLiBUaGUgcmVhZGVyIGNhbiBub3Qgc3dhcCB0aGUgcmVhZGVyIHBhZ2UgaWYgaXQgaXMgYWxzbyBiZWluZwordXNlZCBhcyB0aGUgY29tbWl0IHBhZ2UuIFRoZSByZWFkZXIgY2FuIHNpbXBseSBjaGVjayB0aGF0IHRoZSBjb21taXQKK2lzIG9mZiB0aGUgcmVhZGVyIHBhZ2UuIE9uY2UgdGhlIGNvbW1pdCBwYWdlIGxlYXZlcyB0aGUgcmVhZGVyIHBhZ2UKK2l0IHdpbGwgbmV2ZXIgZ28gYmFjayBvbiBpdCB1bmxlc3MgYSByZWFkZXIgZG9lcyBhbm90aGVyIHN3YXAgd2l0aCB0aGUKK2J1ZmZlciBwYWdlIHRoYXQgaXMgYWxzbyB0aGUgY29tbWl0IHBhZ2UuCisKKworTmVzdGVkIHdyaXRlcworLS0tLS0tLS0tLS0tLQorCitJbiB0aGUgcHVzaGluZyBmb3J3YXJkIG9mIHRoZSB0YWlsIHBhZ2Ugd2UgbXVzdCBmaXJzdCBwdXNoIGZvcndhcmQKK3RoZSBoZWFkIHBhZ2UgaWYgdGhlIGhlYWQgcGFnZSBpcyB0aGUgbmV4dCBwYWdlLiBJZiB0aGUgaGVhZCBwYWdlCitpcyBub3QgdGhlIG5leHQgcGFnZSwgdGhlIHRhaWwgcGFnZSBpcyBzaW1wbHkgdXBkYXRlZCB3aXRoIGEgY21weGNoZy4KKworT25seSB3cml0ZXJzIG1vdmUgdGhlIHRhaWwgcGFnZS4gVGhpcyBtdXN0IGJlIGRvbmUgYXRvbWljYWxseSB0byBwcm90ZWN0CithZ2FpbnN0IG5lc3RlZCB3cml0ZXJzLgorCisgIHRlbXBfcGFnZSA9IHRhaWxfcGFnZQorICBuZXh0X3BhZ2UgPSB0ZW1wX3BhZ2UtPm5leHQKKyAgY21weGNoZyh0YWlsX3BhZ2UsIHRlbXBfcGFnZSwgbmV4dF9wYWdlKQorCitUaGUgYWJvdmUgd2lsbCB1cGRhdGUgdGhlIHRhaWwgcGFnZSBpZiBpdCBpcyBzdGlsbCBwb2ludGluZyB0byB0aGUgZXhwZWN0ZWQKK3BhZ2UuIElmIHRoaXMgZmFpbHMsIGEgbmVzdGVkIHdyaXRlIHB1c2hlZCBpdCBmb3J3YXJkLCB0aGUgdGhlIGN1cnJlbnQgd3JpdGUKK2RvZXMgbm90IG5lZWQgdG8gcHVzaCBpdC4KKworCisgICAgICAgICAgIHRlbXAgcGFnZQorICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgdgorICAgICAgICAgICAgdGFpbCBwYWdlCisgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB2CisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKzwtLS18ICAgfC0tLT58ICAgfC0tLT58ICAgfC0tLT58ICAgfC0tLT4KKy0tLT58ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS0KKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworCitOZXN0ZWQgd3JpdGUgY29tZXMgaW4gYW5kIG1vdmVzIHRoZSB0YWlsIHBhZ2UgZm9yd2FyZDoKKworICAgICAgICAgICAgICAgICAgICB0YWlsIHBhZ2UgKG1vdmVkIGJ5IG5lc3RlZCB3cml0ZXIpCisgICAgICAgICAgICB0ZW1wIHBhZ2UgICB8CisgICAgICAgICAgICAgICB8ICAgICAgICB8CisgICAgICAgICAgICAgICB2ICAgICAgICB2CisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKzwtLS18ICAgfC0tLT58ICAgfC0tLT58ICAgfC0tLT58ICAgfC0tLT4KKy0tLT58ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS0KKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworCitUaGUgYWJvdmUgd291bGQgZmFpbCB0aGUgY21weGNoZywgYnV0IHNpbmNlIHRoZSB0YWlsIHBhZ2UgaGFzIGFscmVhZHkKK2JlZW4gbW92ZWQgZm9yd2FyZCwgdGhlIHdyaXRlciB3aWxsIGp1c3QgdHJ5IGFnYWluIHRvIHJlc2VydmUgc3RvcmFnZQorb24gdGhlIG5ldyB0YWlsIHBhZ2UuCisKK0J1dCB0aGUgbW92aW5nIG9mIHRoZSBoZWFkIHBhZ2UgaXMgYSBiaXQgbW9yZSBjb21wbGV4LgorCisgICAgICAgICAgICB0YWlsIHBhZ2UKKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LUgtPnwgICB8LS0tPnwgICB8LS0tPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisKK1RoZSB3cml0ZSBjb252ZXJ0cyB0aGUgaGVhZCBwYWdlIHBvaW50ZXIgdG8gVVBEQVRFLgorCisgICAgICAgICAgICB0YWlsIHBhZ2UKKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LVUtPnwgICB8LS0tPnwgICB8LS0tPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisKK0J1dCBpZiBhIG5lc3RlZCB3cml0ZXIgcHJlZW1wdHMgaGVyZS4gSXQgd2lsbCBzZWUgdGhhdCB0aGUgbmV4dAorcGFnZSBpcyBhIGhlYWQgcGFnZSwgYnV0IGl0IGlzIGFsc28gbmVzdGVkLiBJdCB3aWxsIGRldGVjdCB0aGF0CitpdCBpcyBuZXN0ZWQgYW5kIHdpbGwgc2F2ZSB0aGF0IGluZm9ybWF0aW9uLiBUaGUgZGV0ZWN0aW9uIGlzIHRoZQorZmFjdCB0aGF0IGl0IHNlZXMgdGhlIFVQREFURSBmbGFnIGluc3RlYWQgb2YgYSBIRUFERVIgb3IgTk9STUFMCitwb2ludGVyLgorCitUaGUgbmVzdGVkIHdyaXRlciB3aWxsIHNldCB0aGUgbmV3IGhlYWQgcGFnZSBwb2ludGVyLgorCisgICAgICAgICAgIHRhaWwgcGFnZQorICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgdgorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCis8LS0tfCAgIHwtLS0+fCAgIHwtVS0+fCAgIHwtSC0+fCAgIHwtLS0+CistLS0+fCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tCisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKworQnV0IGl0IHdpbGwgbm90IHJlc2V0IHRoZSB1cGRhdGUgYmFjayB0byBub3JtYWwuIE9ubHkgdGhlIHdyaXRlcgordGhhdCBjb252ZXJ0ZWQgYSBwb2ludGVyIGZyb20gSEVBRCB0byBVUERBVEUgd2lsbCBjb252ZXJ0IGl0IGJhY2sKK3RvIE5PUk1BTC4KKworICAgICAgICAgICAgICAgICAgICB0YWlsIHBhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LVUtPnwgICB8LUgtPnwgICB8LS0tPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisKK0FmdGVyIHRoZSBuZXN0ZWQgd3JpdGVyIGZpbmlzaGVzLCB0aGUgb3V0ZXIgbW9zdCB3cml0ZXIgd2lsbCBjb252ZXJ0Cit0aGUgVVBEQVRFIHBvaW50ZXIgdG8gTk9STUFMLgorCisKKyAgICAgICAgICAgICAgICAgICAgdGFpbCBwYWdlCisgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICB2CisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKzwtLS18ICAgfC0tLT58ICAgfC0tLT58ICAgfC1ILT58ICAgfC0tLT4KKy0tLT58ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS0KKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworCisKK0l0IGNhbiBiZSBldmVuIG1vcmUgY29tcGxleCBpZiBzZXZlcmFsIG5lc3RlZCB3cml0ZXMgY2FtZSBpbiBhbmQgbW92ZWQKK3RoZSB0YWlsIHBhZ2UgYWhlYWQgc2V2ZXJhbCBwYWdlczoKKworCisoZmlyc3Qgd3JpdGVyKQorCisgICAgICAgICAgICB0YWlsIHBhZ2UKKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LUgtPnwgICB8LS0tPnwgICB8LS0tPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisKK1RoZSB3cml0ZSBjb252ZXJ0cyB0aGUgaGVhZCBwYWdlIHBvaW50ZXIgdG8gVVBEQVRFLgorCisgICAgICAgICAgICB0YWlsIHBhZ2UKKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LVUtPnwgICB8LS0tPnwgICB8LS0tPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisKK05leHQgd3JpdGVyIGNvbWVzIGluLCBhbmQgc2VlcyB0aGUgdXBkYXRlIGFuZCBzZXRzIHVwIHRoZSBuZXcKK2hlYWQgcGFnZS4KKworKHNlY29uZCB3cml0ZXIpCisKKyAgICAgICAgICAgdGFpbCBwYWdlCisgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB2CisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKzwtLS18ICAgfC0tLT58ICAgfC1VLT58ICAgfC1ILT58ICAgfC0tLT4KKy0tLT58ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS0KKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworCitUaGUgbmVzdGVkIHdyaXRlciBtb3ZlcyB0aGUgdGFpbCBwYWdlIGZvcndhcmQuIEJ1dCBkb2VzIG5vdCBzZXQgdGhlIG9sZAordXBkYXRlIHBhZ2UgdG8gTk9STUFMIGJlY2F1c2UgaXQgaXMgbm90IHRoZSBvdXRlciBtb3N0IHdyaXRlci4KKworICAgICAgICAgICAgICAgICAgICB0YWlsIHBhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LVUtPnwgICB8LUgtPnwgICB8LS0tPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisKK0Fub3RoZXIgd3JpdGVyIHByZWVtcHRzIGFuZCBzZWVzIHRoZSBwYWdlIGFmdGVyIHRoZSB0YWlsIHBhZ2UgaXMgYSBoZWFkIHBhZ2UuCitJdCBjaGFuZ2VzIGl0IGZyb20gSEVBRCB0byBVUERBVEUuCisKKyh0aGlyZCB3cml0ZXIpCisKKyAgICAgICAgICAgICAgICAgICAgdGFpbCBwYWdlCisgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICB2CisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKzwtLS18ICAgfC0tLT58ICAgfC1VLT58ICAgfC1VLT58ICAgfC0tLT4KKy0tLT58ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS0KKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworCitUaGUgd3JpdGVyIHdpbGwgbW92ZSB0aGUgaGVhZCBwYWdlIGZvcndhcmQ6CisKKworKHRoaXJkIHdyaXRlcikKKworICAgICAgICAgICAgICAgICAgICB0YWlsIHBhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LVUtPnwgICB8LVUtPnwgICB8LUgtPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisKK0J1dCBub3cgdGhhdCB0aGUgdGhpcmQgd3JpdGVyIGRpZCBjaGFuZ2UgdGhlIEhFQUQgZmxhZyB0byBVUERBVEUgaXQKK3dpbGwgY29udmVydCBpdCB0byBub3JtYWw6CisKKworKHRoaXJkIHdyaXRlcikKKworICAgICAgICAgICAgICAgICAgICB0YWlsIHBhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworPC0tLXwgICB8LS0tPnwgICB8LVUtPnwgICB8LS0tPnwgICB8LUgtPgorLS0tPnwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLXwgICB8PC0tLQorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCisKKworVGhlbiBpdCB3aWxsIG1vdmUgdGhlIHRhaWwgcGFnZSwgYW5kIHJldHVybiBiYWNrIHRvIHRoZSBzZWNvbmQgd3JpdGVyLgorCisKKyhzZWNvbmQgd3JpdGVyKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWwgcGFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdgorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCis8LS0tfCAgIHwtLS0+fCAgIHwtVS0+fCAgIHwtLS0+fCAgIHwtSC0+CistLS0+fCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tCisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKworCitUaGUgc2Vjb25kIHdyaXRlciB3aWxsIGZhaWwgdG8gbW92ZSB0aGUgdGFpbCBwYWdlIGJlY2F1c2UgaXQgd2FzIGFscmVhZHkKK21vdmVkLCBzbyBpdCB3aWxsIHRyeSBhZ2FpbiBhbmQgYWRkIGl0cyBkYXRhIHRvIHRoZSBuZXcgdGFpbCBwYWdlLgorSXQgd2lsbCByZXR1cm4gdG8gdGhlIGZpcnN0IHdyaXRlci4KKworCisoZmlyc3Qgd3JpdGVyKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWwgcGFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdgorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCis8LS0tfCAgIHwtLS0+fCAgIHwtVS0+fCAgIHwtLS0+fCAgIHwtSC0+CistLS0+fCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tCisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKworVGhlIGZpcnN0IHdyaXRlciBjYW4gbm90IGtub3cgYXRvbWljYWxseSB0ZXN0IGlmIHRoZSB0YWlsIHBhZ2UgbW92ZWQKK3doaWxlIGl0IHVwZGF0ZXMgdGhlIEhFQUQgcGFnZS4gSXQgd2lsbCB0aGVuIHVwZGF0ZSB0aGUgaGVhZCBwYWdlIHRvCit3aGF0IGl0IHRoaW5rcyBpcyB0aGUgbmV3IGhlYWQgcGFnZS4KKworCisoZmlyc3Qgd3JpdGVyKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWwgcGFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdgorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCis8LS0tfCAgIHwtLS0+fCAgIHwtVS0+fCAgIHwtSC0+fCAgIHwtSC0+CistLS0+fCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tCisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKworU2luY2UgdGhlIGNtcHhjaGcgcmV0dXJucyB0aGUgb2xkIHZhbHVlIG9mIHRoZSBwb2ludGVyIHRoZSBmaXJzdCB3cml0ZXIKK3dpbGwgc2VlIGl0IHN1Y2NlZWRlZCBpbiB1cGRhdGluZyB0aGUgcG9pbnRlciBmcm9tIE5PUk1BTCB0byBIRUFELgorQnV0IGFzIHdlIGNhbiBzZWUsIHRoaXMgaXMgbm90IGdvb2QgZW5vdWdoLiBJdCBtdXN0IGFsc28gY2hlY2sgdG8gc2VlCitpZiB0aGUgdGFpbCBwYWdlIGlzIGVpdGhlciB3aGVyZSBpdCB1c2UgdG8gYmUgb3Igb24gdGhlIG5leHQgcGFnZToKKworCisoZmlyc3Qgd3JpdGVyKQorCisgICAgICAgICAgICAgICBBICAgICAgICBCICAgIHRhaWwgcGFnZQorICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgfAorICAgICAgICAgICAgICAgdiAgICAgICAgdiAgICAgICAgdgorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCis8LS0tfCAgIHwtLS0+fCAgIHwtVS0+fCAgIHwtSC0+fCAgIHwtSC0+CistLS0+fCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tCisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKworSWYgdGFpbCBwYWdlICE9IEEgYW5kIHRhaWwgcGFnZSBkb2VzIG5vdCBlcXVhbCBCLCB0aGVuIGl0IG11c3QgcmVzZXQgdGhlCitwb2ludGVyIGJhY2sgdG8gTk9STUFMLiBUaGUgZmFjdCB0aGF0IGl0IG9ubHkgbmVlZHMgdG8gd29ycnkgYWJvdXQKK25lc3RlZCB3cml0ZXJzLCBpdCBvbmx5IG5lZWRzIHRvIGNoZWNrIHRoaXMgYWZ0ZXIgc2V0dGluZyB0aGUgSEVBRCBwYWdlLgorCisKKyhmaXJzdCB3cml0ZXIpCisKKyAgICAgICAgICAgICAgIEEgICAgICAgIEIgICAgdGFpbCBwYWdlCisgICAgICAgICAgICAgICB8ICAgICAgICB8ICAgICAgICB8CisgICAgICAgICAgICAgICB2ICAgICAgICB2ICAgICAgICB2CisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKzwtLS18ICAgfC0tLT58ICAgfC1VLT58ICAgfC0tLT58ICAgfC1ILT4KKy0tLT58ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS18ICAgfDwtLS0KKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKyAgICArLS0tKworCitOb3cgdGhlIHdyaXRlciBjYW4gdXBkYXRlIHRoZSBoZWFkIHBhZ2UuIFRoaXMgaXMgYWxzbyB3aHkgdGhlIGhlYWQgcGFnZSBtdXN0CityZW1haW4gaW4gVVBEQVRFIGFuZCBvbmx5IHJlc2V0IGJ5IHRoZSBvdXRlciBtb3N0IHdyaXRlci4gVGhpcyBwcmV2ZW50cwordGhlIHJlYWRlciBmcm9tIHNlZWluZyB0aGUgaW5jb3JyZWN0IGhlYWQgcGFnZS4KKworCisoZmlyc3Qgd3JpdGVyKQorCisgICAgICAgICAgICAgICBBICAgICAgICBCICAgIHRhaWwgcGFnZQorICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgfAorICAgICAgICAgICAgICAgdiAgICAgICAgdiAgICAgICAgdgorICAgICstLS0rICAgICstLS0rICAgICstLS0rICAgICstLS0rCis8LS0tfCAgIHwtLS0+fCAgIHwtLS0+fCAgIHwtLS0+fCAgIHwtSC0+CistLS0+fCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tfCAgIHw8LS0tCisgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsgICAgKy0tLSsKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CmluZGV4IDQ1MGI4ZjguLjUyNWVkYjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKQEAgLTIxLDMgKzIxLDUgQEAKICAyMCAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTI1NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6MjI1MV0KICAyMSAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTIxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6MjI5MSwwMDcwOjIyOTVdCiAgMjIgLT4gTXlnaWNhIFg4NTA2IERNQi1USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNGYxOjg2NTFdCisgMjMgLT4gTWFnaWMtUHJvIFByb0hEVFYgRXh0cmVtZSAyICAgICAgICAgICAgICAgICAgICAgICAgIFsxNGYxOjg2NTddCisgMjQgLT4gSGF1cHBhdWdlIFdpblRWLUhWUjE4NTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjg1NDFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODggYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKaW5kZXggMDczNjUxOC4uMzM4NWY4YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OApAQCAtODAsMyArODAsNCBAQAogIDc5IC0+IFRlcnJhdGVjIENpbmVyZ3kgSFQgUENJIE1LSUkgICAgICAgICAgICAgICAgICAgICAgICBbMTUzYjoxMTc3XQogIDgwIC0+IEhhdXBwYXVnZSBXaW5UVi1JUiBPbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDo5MjkwXQogIDgxIC0+IExlYWR0ZWsgV2luRmFzdCBEVFYxODAwIEh5YnJpZCAgICAgICAgICAgICAgICAgICAgICBbMTA3ZDo2NjU0XQorIDgyIC0+IFdpbkZhc3QgRFRWMjAwMCBIIHJldi4gSiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTA3ZDo2ZjJiXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHggYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eAppbmRleCBlMzUyZDc1Li5iMTNmY2JkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eApAQCAtNyw3ICs3LDcgQEAKICAgNiAtPiBUZXJyYXRlYyBDaW5lcmd5IDIwMCBVU0IgICAgICAgICAgICAgICAgIChlbTI4MDApCiAgIDcgLT4gTGVhZHRlayBXaW5mYXN0IFVTQiBJSSAgICAgICAgICAgICAgICAgICAoZW0yODAwKSAgICAgICAgWzA0MTM6NjAyM10KICAgOCAtPiBLd29ybGQgVVNCMjgwMCAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4MDApCi0gIDkgLT4gUGlubmFjbGUgRGF6emxlIERWQyA5MC8xMDAvMTAxLzEwNyAvIEthaXNlciBCYWFzIFZpZGVvIHRvIERWRCBtYWtlciAoZW0yODIwL2VtMjg0MCkgWzFiODA6ZTMwMiwyMzA0OjAyMDcsMjMwNDowMjFhXQorICA5IC0+IFBpbm5hY2xlIERhenpsZSBEVkMgOTAvMTAwLzEwMS8xMDcgLyBLYWlzZXIgQmFhcyBWaWRlbyB0byBEVkQgbWFrZXIgIChlbTI4MjAvZW0yODQwKSBbMWI4MDplMzAyLDFiODA6ZTMwNCwyMzA0OjAyMDcsMjMwNDowMjFhXQogIDEwIC0+IEhhdXBwYXVnZSBXaW5UViBIVlIgOTAwICAgICAgICAgICAgICAgICAgKGVtMjg4MCkgICAgICAgIFsyMDQwOjY1MDBdCiAgMTEgLT4gVGVycmF0ZWMgSHlicmlkIFhTICAgICAgICAgICAgICAgICAgICAgICAoZW0yODgwKSAgICAgICAgWzBjY2Q6MDA0Ml0KICAxMiAtPiBLd29ybGQgUFZSIFRWIDI4MDAgUkYgICAgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKQpAQCAtMzMsNyArMzMsNyBAQAogIDM0IC0+IFRlcnJhdGVjIENpbmVyZ3kgQSBIeWJyaWQgWFMgICAgICAgICAgICAgKGVtMjg2MCkgICAgICAgIFswY2NkOjAwNGZdCiAgMzUgLT4gVHlwaG9vbiBEVkQgTWFrZXIgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODYwKQogIDM2IC0+IE5ldEdNQkggQ2FtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg2MCkKLSAzNyAtPiBHYWRtZWkgVVRWMzMwICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4NjApCisgMzcgLT4gR2FkbWVpIFVUVjMzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODYwKSAgICAgICAgW2ViMWE6NTBhNl0KICAzOCAtPiBZYWt1bW8gTW92aWVNaXhlciAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4NjEpCiAgMzkgLT4gS1dvcmxkIFBWUlRWIDMwMFUgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODYxKSAgICAgICAgW2ViMWE6ZTMwMF0KICA0MCAtPiBQbGV4dG9yIENvbnZlcnRYIFBYLVRWMTAwVSAgICAgICAgICAgICAgIChlbTI4NjEpICAgICAgICBbMDkzYjphMDA1XQpAQCAtNjcsMyArNjcsNCBAQAogIDY5IC0+IEtXb3JsZCBBVFNDIDMxNVUgSERUViBUViBCb3ggICAgICAgICAgICAgKGVtMjg4MikgICAgICAgIFtlYjFhOmEzMTNdCiAgNzAgLT4gRXZnYSBpbkR0dWJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODgyKQogIDcxIC0+IFNpbHZlcmNyZXN0IFdlYmNhbSAxLjNtcGl4ICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApCisgNzIgLT4gR2FkbWVpIFVUVjMzMCsgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODYxKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CmluZGV4IGM5MTNlNTYuLjBhYzRkMjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKQEAgLTE2NywzICsxNjcsNyBAQAogMTY2IC0+IEJlaG9sZGVyIEJlaG9sZFRWIDYwNyBSRFMgICAgICAgICAgICAgICAgWzVhY2U6NjA3M10KIDE2NyAtPiBCZWhvbGRlciBCZWhvbGRUViA2MDkgUkRTICAgICAgICAgICAgICAgIFs1YWNlOjYwOTJdCiAxNjggLT4gQmVob2xkZXIgQmVob2xkVFYgNjA5IFJEUyAgICAgICAgICAgICAgICBbNWFjZTo2MDkzXQorMTY5IC0+IENvbXBybyBWaWRlb01hdGUgUzM1MC9TMzAwICAgICAgICAgICAgICAgWzE4NWI6YzkwMF0KKzE3MCAtPiBBdmVyTWVkaWEgQXZlclRWIFN0dWRpbyA1MDUgICAgICAgICAgICAgIFsxNDYxOmExMTVdCisxNzEgLT4gQmVob2xkZXIgQmVob2xkVFYgWDcgICAgICAgICAgICAgICAgICAgICBbNWFjZTo3NTk1XQorMTcyIC0+IFJvdmVyTWVkaWEgVFYgTGluayBQcm8gRk0gICAgICAgICAgICAgICAgWzE5ZDE6MDEzOF0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCmluZGV4IGJlNjc4NDQuLmJhOWZhNjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgpAQCAtNzgsMyArNzgsNCBAQAogdHVuZXI9NzggLSBQaGlsaXBzIEZNRDEyMTZNRVggTUszIEh5YnJpZCBUdW5lcgogdHVuZXI9NzkgLSBQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRk0xMjE2IE1LNSkKIHR1bmVyPTgwIC0gUGhpbGlwcyBGUTEyMTZMTUUgTUszIFBBTC9TRUNBTSB3L2FjdGl2ZSBsb29wdGhyb3VnaAordHVuZXI9ODEgLSBQYXJ0c25pYyAoRGFld29vKSBQVEktNU5GMDUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ1FjYW0udHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DUWNhbS50eHQKaW5kZXggMDQ5ODZlZi4uZDIzMDg3OGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ1FjYW0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ1FjYW0udHh0CkBAIC0xOCw4ICsxOCw4IEBACiAKIDEuMCBJbnRyb2R1Y3Rpb24KIAotICBUaGUgZmlsZSAuLi9kcml2ZXJzL2NoYXIvYy1xY2FtLmMgaXMgYSBkZXZpY2UgZHJpdmVyIGZvciB0aGUKLUxvZ2l0ZWNoIChuZWUgQ29ubmVjdGl4KSBwYXJhbGxlbCBwb3J0IGludGVyZmFjZSBjb2xvciBDQ0QgY2FtZXJhLgorICBUaGUgZmlsZSAuLi8uLi9kcml2ZXJzL21lZGlhL3ZpZGVvL2MtcWNhbS5jIGlzIGEgZGV2aWNlIGRyaXZlciBmb3IKK3RoZSBMb2dpdGVjaCAobmVlIENvbm5lY3RpeCkgcGFyYWxsZWwgcG9ydCBpbnRlcmZhY2UgY29sb3IgQ0NEIGNhbWVyYS4KIFRoaXMgaXMgYSBmYWlybHkgaW5leHBlbnNpdmUgZGV2aWNlIGZvciBjYXB0dXJpbmcgaW1hZ2VzLiAgTG9naXRlY2gKIGRvZXMgbm90IGN1cnJlbnRseSBwcm92aWRlIGluZm9ybWF0aW9uIGZvciBkZXZlbG9wZXJzLCBidXQgbWFueSBwZW9wbGUKIGhhdmUgZW5naW5lZXJlZCBzZXZlcmFsIHNvbHV0aW9ucyBmb3Igbm9uLU1pY3Jvc29mdCB1c2Ugb2YgdGhlIENvbG9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CmluZGV4IDU3M2Y5NWIuLjQ2ODZlODQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CkBAIC0xNDAsNiArMTQwLDcgQEAKIHN1bnBsdXMJCTA0ZmM6ZmZmZglQdXJlIERpZ2l0YWxEYWtvdGEKIHNwY2E1MDEJCTA1MDY6MDBkZgkzQ29tIEhvbWVDb25uZWN0IExpdGUKIHN1bnBsdXMJCTA1MmI6MTUxMwlNZWdhcGl4IFY0CitzdW5wbHVzCQkwNTJiOjE4MDMJTWVnYUltYWdlIFZJCiB0djg1MzIJCTA1NDU6ODA4YglWZW8gU3RpbmdyYXkKIHR2ODUzMgkJMDU0NTo4MzMzCVZlbyBTdGluZ3JheQogc3VucGx1cwkJMDU0NjozMTU1CVBvbGFyb2lkIFBEQzMwNzAKQEAgLTE4Miw2ICsxODMsNyBAQAogb3Y1MzQJCTA2Zjg6MzAwMwlIZXJjdWxlcyBEdWFscGl4IEhEIFdlYmxvZwogc29uaXhqCQkwNmY4OjMwMDQJSGVyY3VsZXMgQ2xhc3NpYyBTaWx2ZXIKIHNvbml4agkJMDZmODozMDA4CUhlcmN1bGVzIERlbHV4ZSBPcHRpY2FsIEdsYXNzCitwYWM3MzExCQkwNmY4OjMwMDkJSGVyY3VsZXMgQ2xhc3NpYyBMaW5rCiBzcGNhNTA4CQkwNzMzOjAxMTAJVmlld1F1ZXN0IFZRMTEwCiBzcGNhNTA4CQkwMTMwOjAxMzAJQ2xvbmUgRGlnaXRhbCBXZWJjYW0gMTEwNDMKIHNwY2E1MDEJCTA3MzM6MDQwMQlJbnRlbCBDcmVhdGUgYW5kIFNoYXJlCkBAIC0yMzUsOCArMjM3LDEwIEBACiBwYWM3MzExCQkwOTNhOjI2MjIJR2VuaXVzIEV5ZSAzMTIKIHBhYzczMTEJCTA5M2E6MjYyNAlQQUM3MzAyCiBwYWM3MzExCQkwOTNhOjI2MjYJTGFidGVjIDIyMDAKK3BhYzczMTEJCTA5M2E6MjYyOQlHZW5pb3VzIGlTbGltIDMwMAogcGFjNzMxMQkJMDkzYToyNjJhCVdlYmNhbSAzMDBrCiBwYWM3MzExCQkwOTNhOjI2MmMJUGhpbGlwcyBTUEMgMjMwIE5DCitqZWlsaW5qCQkwOTc5OjAyODAJU2FrYXIgNTczNzkKIHpjM3h4CQkwYWM4OjAzMDIJWi1zdGFyIFZpbWljcm8gemMwMzAyCiB2YzAzMngJCTBhYzg6MDMyMQlWaW1pY3JvIGdlbmVyaWMgdmMwMzIxCiB2YzAzMngJCTBhYzg6MDMyMwlWaW1pY3JvIFZjMDMyMwpAQCAtMjQ3LDYgKzI1MSw3IEBACiB6YzN4eAkJMGFjODozMDdiCUxkbGMgVkMzMDIrT3Y3NjIwCiB2YzAzMngJCTBhYzg6YzAwMQlTb255IGVtYmVkZGVkIHZpbWljcm8KIHZjMDMyeAkJMGFjODpjMDAyCVNvbnkgZW1iZWRkZWQgdmltaWNybwordmMwMzJ4CQkwYWM4OmMzMDEJU2Ftc3VuZyBRMSBVbHRyYSBQcmVtaXVtCiBzcGNhNTA4CQkwYWY5OjAwMTAJSGFtYSBVU0IgU2lnaHRjYW0gMTAwCiBzcGNhNTA4CQkwYWY5OjAwMTEJSGFtYSBVU0IgU2lnaHRjYW0gMTAwCiBzb25peGIJCTBjNDU6NjAwMQlHZW5pdXMgVmlkZW9DQU0gTkIKQEAgLTI4NCw2ICsyODksNyBAQAogc29uaXhqCQkwYzQ1OjYxM2IJU3VyZmVyIFNOLTIwNgogc29uaXhqCQkwYzQ1OjYxM2MJU29uaXggUGNjYW0xNjgKIHNvbml4agkJMGM0NTo2MTQzCVNvbml4IFBjY2FtMTY4Citzb25peGoJCTBjNDU6NjE0OAlEaWdpdHVzIERBLTcwODExL1pTTUMgVVNCIFBDIENhbWVyYSBaUzIxMS9NaWNyb2RpYQogc245YzIweAkJMGM0NTo2MjQwCVBDIENhbWVyYSAoU045QzIwMSArIE1UOU0wMDEpCiBzbjljMjB4CQkwYzQ1OjYyNDIJUEMgQ2FtZXJhIChTTjlDMjAxICsgTVQ5TTExMSkKIHNuOWMyMHgJCTBjNDU6NjI0OAlQQyBDYW1lcmEgKFNOOUMyMDEgKyBPVjk2NTUpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NpNDcxMy50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NpNDcxMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhYmRiNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2k0NzEzLnR4dApAQCAtMCwwICsxLDE3NiBAQAorRHJpdmVyIGZvciBJMkMgcmFkaW9zIGZvciB0aGUgU2lsaWNvbiBMYWJzIFNpNDcxMyBGTSBSYWRpbyBUcmFuc21pdHRlcnMKKworQ29weXJpZ2h0IChjKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCitDb250YWN0OiBFZHVhcmRvIFZhbGVudGluIDxlZHVhcmRvLnZhbGVudGluQG5va2lhLmNvbT4KKworCitJbmZvcm1hdGlvbiBhYm91dCB0aGUgRGV2aWNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGlzIGNoaXAgaXMgYSBTaWxpY29uIExhYnMgcHJvZHVjdC4gSXQgaXMgYSBJMkMgZGV2aWNlLCBjdXJyZW50bHkgb24gMHg2MyBhZGRyZXNzLgorQmFzaWNhbGx5LCBpdCBoYXMgdHJhbnNtaXNzaW9uIGFuZCBzaWduYWwgbm9pc2UgbGV2ZWwgbWVhc3VyZW1lbnQgZmVhdHVyZXMuCisKK1RoZSBTaTQ3MTMgaW50ZWdyYXRlcyB0cmFuc21pdCBmdW5jdGlvbnMgZm9yIEZNIGJyb2FkY2FzdCBzdGVyZW8gdHJhbnNtaXNzaW9uLgorVGhlIGNoaXAgYWxzbyBhbGxvd3MgaW50ZWdyYXRlZCByZWNlaXZlIHBvd2VyIHNjYW5uaW5nIHRvIGlkZW50aWZ5IGxvdyBzaWduYWwKK3Bvd2VyIEZNIGNoYW5uZWxzLgorCitUaGUgY2hpcCBpcyBwcm9ncmFtbWVkIHVzaW5nIGNvbW1hbmRzIGFuZCByZXNwb25zZXMuIFRoZXJlIGFyZSBhbHNvIHNldmVyYWwKK3Byb3BlcnRpZXMgd2hpY2ggY2FuIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhpcyBjaGlwLgorCitVc2VycyBtdXN0IGNvbXBseSB3aXRoIGxvY2FsIHJlZ3VsYXRpb25zIG9uIHJhZGlvIGZyZXF1ZW5jeSAoUkYpIHRyYW5zbWlzc2lvbi4KKworRGV2aWNlIGRyaXZlciBkZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlcmUgYXJlIHR3byBtb2R1bGVzIHRvIGhhbmRsZSB0aGlzIGRldmljZS4gT25lIGlzIGEgSTJDIGRldmljZSBkcml2ZXIKK2FuZCB0aGUgb3RoZXIgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuCisKK1RoZSBJMkMgZGV2aWNlIGRyaXZlciBleHBvcnRzIGEgdjRsMi1zdWJkZXYgaW50ZXJmYWNlIHRvIHRoZSBrZXJuZWwuCitBbGwgcHJvcGVydGllcyBjYW4gYWxzbyBiZSBhY2Nlc3NlZCBieSB2NGwyIGV4dGVuZGVkIGNvbnRyb2xzIGludGVyZmFjZSwgYnkKK3VzaW5nIHRoZSB2NGwyLXN1YmRldiBjYWxscyAoZ19leHRfY3RybHMsIHNfZXh0X2N0cmxzKS4KKworVGhlIHBsYXRmb3JtIGRldmljZSBkcml2ZXIgZXhwb3J0cyBhIHY0bDIgcmFkaW8gZGV2aWNlIGludGVyZmFjZSB0byB1c2VyIGxhbmQuCitTbywgaXQgdXNlcyB0aGUgSTJDIGRldmljZSBkcml2ZXIgYXMgYSBzdWIgZGV2aWNlIGluIG9yZGVyIHRvIHNlbmQgdGhlIHVzZXIKK2NvbW1hbmRzIHRvIHRoZSBhY3R1YWwgZGV2aWNlLiBCYXNpY2FsbHkgaXQgaXMgYSB3cmFwcGVyIHRvIHRoZSBJMkMgZGV2aWNlIGRyaXZlci4KKworQXBwbGljYXRpb25zIGNhbiB1c2UgdjRsMiByYWRpbyBBUEkgdG8gc3BlY2lmeSBmcmVxdWVuY3kgb2Ygb3BlcmF0aW9uLCBtdXRlIHN0YXRlLAorZXRjLiBCdXQgbW9zdGx5IG9mIGl0cyBwcm9wZXJ0aWVzIHdpbGwgYmUgcHJlc2VudCBpbiB0aGUgZXh0ZW5kZWQgY29udHJvbHMuCisKK1doZW4gdGhlIHY0bDIgbXV0ZSBwcm9wZXJ0eSBpcyBzZXQgdG8gMSAodHJ1ZSksIHRoZSBkcml2ZXIgd2lsbCB0dXJuIHRoZSBjaGlwIG9mZi4KKworUHJvcGVydGllcyBkZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgcHJvcGVydGllcyBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgdjRsMiBleHRlbmRlZCBjb250cm9scy4KK0hlcmUgaXMgYW4gb3V0cHV0IGZyb20gdjRsMi1jdGwgdXRpbDoKKy8gIyB2NGwyLWN0bCAtZCAvZGV2L3JhZGlvMCAtLWFsbCAtTAorRHJpdmVyIEluZm86CisJRHJpdmVyIG5hbWUgICA6IHJhZGlvLXNpNDcxMworCUNhcmQgdHlwZSAgICAgOiBTaWxpY29uIExhYnMgU2k0NzEzIE1vZHVsYXRvcgorCUJ1cyBpbmZvICAgICAgOgorCURyaXZlciB2ZXJzaW9uOiAwCisJQ2FwYWJpbGl0aWVzICA6IDB4MDAwODA4MDAKKwkJUkRTIE91dHB1dAorCQlNb2R1bGF0b3IKK0F1ZGlvIG91dHB1dDogMCAoRk0gTW9kdWxhdG9yIEF1ZGlvIE91dCkKK0ZyZXF1ZW5jeTogMTQwODAwMCAoODguMDAwMDAwIE1IeikKK1ZpZGVvIFN0YW5kYXJkID0gMHgwMDAwMDAwMAorTW9kdWxhdG9yOgorCU5hbWUgICAgICAgICAgICAgICAgIDogRk0gTW9kdWxhdG9yCisJQ2FwYWJpbGl0aWVzICAgICAgICAgOiA2Mi41IEh6IHN0ZXJlbyByZHMKKwlGcmVxdWVuY3kgcmFuZ2UgICAgICA6IDc2LjAgTUh6IC0gMTA4LjAgTUh6CisJU3ViY2hhbm5lbCBtb2R1bGF0aW9uOiBzdGVyZW8rcmRzCisKK1VzZXIgQ29udHJvbHMKKworCQkJICAgbXV0ZSAoYm9vbCkgOiBkZWZhdWx0PTEgdmFsdWU9MAorCitGTSBSYWRpbyBNb2R1bGF0b3IgQ29udHJvbHMKKworCSAgIHJkc19zaWduYWxfZGV2aWF0aW9uIChpbnQpICA6IG1pbj0wIG1heD05MDAwMCBzdGVwPTEwIGRlZmF1bHQ9MjAwIHZhbHVlPTIwMCBmbGFncz1zbGlkZXIKKwkJIHJkc19wcm9ncmFtX2lkIChpbnQpICA6IG1pbj0wIG1heD02NTUzNSBzdGVwPTEgZGVmYXVsdD0wIHZhbHVlPTAKKwkgICAgICAgcmRzX3Byb2dyYW1fdHlwZSAoaW50KSAgOiBtaW49MCBtYXg9MzEgc3RlcD0xIGRlZmF1bHQ9MCB2YWx1ZT0wCisJCSAgICByZHNfcHNfbmFtZSAoc3RyKSAgOiBtaW49MCBtYXg9OTYgc3RlcD04IHZhbHVlPSdzaTQ3MTMgICcKKwkJIHJkc19yYWRpb190ZXh0IChzdHIpICA6IG1pbj0wIG1heD0zODQgc3RlcD0zMiB2YWx1ZT0nJworICBhdWRpb19saW1pdGVyX2ZlYXR1cmVfZW5hYmxlZCAoYm9vbCkgOiBkZWZhdWx0PTEgdmFsdWU9MQorICAgICBhdWRpb19saW1pdGVyX3JlbGVhc2VfdGltZSAoaW50KSAgOiBtaW49MjUwIG1heD0xMDIzOTAgc3RlcD01MCBkZWZhdWx0PTUwMTAgdmFsdWU9NTAxMCBmbGFncz1zbGlkZXIKKwlhdWRpb19saW1pdGVyX2RldmlhdGlvbiAoaW50KSAgOiBtaW49MCBtYXg9OTAwMDAgc3RlcD0xMCBkZWZhdWx0PTY2MjUwIHZhbHVlPTY2MjUwIGZsYWdzPXNsaWRlcgorYXVkaW9fY29tcHJlc3Npb25fZmVhdHVyZV9lbmFibCAoYm9vbCkgOiBkZWZhdWx0PTEgdmFsdWU9MQorCSBhdWRpb19jb21wcmVzc2lvbl9nYWluIChpbnQpICA6IG1pbj0wIG1heD0yMCBzdGVwPTEgZGVmYXVsdD0xNSB2YWx1ZT0xNSBmbGFncz1zbGlkZXIKKyAgICBhdWRpb19jb21wcmVzc2lvbl90aHJlc2hvbGQgKGludCkgIDogbWluPS00MCBtYXg9MCBzdGVwPTEgZGVmYXVsdD0tNDAgdmFsdWU9LTQwIGZsYWdzPXNsaWRlcgorICBhdWRpb19jb21wcmVzc2lvbl9hdHRhY2tfdGltZSAoaW50KSAgOiBtaW49MCBtYXg9NTAwMCBzdGVwPTUwMCBkZWZhdWx0PTAgdmFsdWU9MCBmbGFncz1zbGlkZXIKKyBhdWRpb19jb21wcmVzc2lvbl9yZWxlYXNlX3RpbWUgKGludCkgIDogbWluPTEwMDAwMCBtYXg9MTAwMDAwMCBzdGVwPTEwMDAwMCBkZWZhdWx0PTEwMDAwMDAgdmFsdWU9MTAwMDAwMCBmbGFncz1zbGlkZXIKKyAgICAgcGlsb3RfdG9uZV9mZWF0dXJlX2VuYWJsZWQgKGJvb2wpIDogZGVmYXVsdD0xIHZhbHVlPTEKKwkgICBwaWxvdF90b25lX2RldmlhdGlvbiAoaW50KSAgOiBtaW49MCBtYXg9OTAwMDAgc3RlcD0xMCBkZWZhdWx0PTY3NTAgdmFsdWU9Njc1MCBmbGFncz1zbGlkZXIKKwkgICBwaWxvdF90b25lX2ZyZXF1ZW5jeSAoaW50KSAgOiBtaW49MCBtYXg9MTkwMDAgc3RlcD0xIGRlZmF1bHQ9MTkwMDAgdmFsdWU9MTkwMDAgZmxhZ3M9c2xpZGVyCisJICBwcmVfZW1waGFzaXNfc2V0dGluZ3MgKG1lbnUpIDogbWluPTAgbWF4PTIgZGVmYXVsdD0xIHZhbHVlPTEKKwkgICAgICAgdHVuZV9wb3dlcl9sZXZlbCAoaW50KSAgOiBtaW49MCBtYXg9MTIwIHN0ZXA9MSBkZWZhdWx0PTg4IHZhbHVlPTg4IGZsYWdzPXNsaWRlcgorCSB0dW5lX2FudGVubmFfY2FwYWNpdG9yIChpbnQpICA6IG1pbj0wIG1heD0xOTEgc3RlcD0xIGRlZmF1bHQ9MCB2YWx1ZT0xMTAgZmxhZ3M9c2xpZGVyCisvICMKKworSGVyZSBpcyBhIHN1bW1hcnkgb2YgdGhlbToKKworKiBQaWxvdCBpcyBhbiBhdWRpYmxlIHRvbmUgc2VudCBieSB0aGUgZGV2aWNlLgorCitwaWxvdF9mcmVxdWVuY3kgLSBDb25maWd1cmVzIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHN0ZXJlbyBwaWxvdCB0b25lLgorcGlsb3RfZGV2aWF0aW9uIC0gQ29uZmlndXJlcyBwaWxvdCB0b25lIGZyZXF1ZW5jeSBkZXZpYXRpb24gbGV2ZWwuCitwaWxvdF9lbmFibGVkIC0gRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcGlsb3QgdG9uZSBmZWF0dXJlLgorCisqIFRoZSBzaTQ3MTMgZGV2aWNlIGlzIGNhcGFibGUgb2YgYXBwbHlpbmcgYXVkaW8gY29tcHJlc3Npb24gdG8gdGhlIHRyYW5zbWl0dGVkIHNpZ25hbC4KKworYWNvbXBfZW5hYmxlZCAtIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGF1ZGlvIGR5bmFtaWMgcmFuZ2UgY29udHJvbCBmZWF0dXJlLgorYWNvbXBfZ2FpbiAtIFNldHMgdGhlIGdhaW4gZm9yIGF1ZGlvIGR5bmFtaWMgcmFuZ2UgY29udHJvbC4KK2Fjb21wX3RocmVzaG9sZCAtIFNldHMgdGhlIHRocmVzaG9sZCBsZXZlbCBmb3IgYXVkaW8gZHluYW1pYyByYW5nZSBjb250cm9sLgorYWNvbXBfYXR0YWNrX3RpbWUgLSBTZXRzIHRoZSBhdHRhY2sgdGltZSBmb3IgYXVkaW8gZHluYW1pYyByYW5nZSBjb250cm9sLgorYWNvbXBfcmVsZWFzZV90aW1lIC0gU2V0cyB0aGUgcmVsZWFzZSB0aW1lIGZvciBhdWRpbyBkeW5hbWljIHJhbmdlIGNvbnRyb2wuCisKKyogTGltaXRlciBzZXR1cHMgYXVkaW8gZGV2aWF0aW9uIGxpbWl0ZXIgZmVhdHVyZS4gT25jZSBhIG92ZXIgZGV2aWF0aW9uIG9jY3VycywKK2l0IGlzIHBvc3NpYmxlIHRvIGFkanVzdCB0aGUgZnJvbnQtZW5kIGdhaW4gb2YgdGhlIGF1ZGlvIGlucHV0IGFuZCBhbHdheXMKK3ByZXZlbnQgb3ZlciBkZXZpYXRpb24uCisKK2xpbWl0ZXJfZW5hYmxlZCAtIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGxpbWl0ZXIgZmVhdHVyZS4KK2xpbWl0ZXJfZGV2aWF0aW9uIC0gQ29uZmlndXJlcyBhdWRpbyBmcmVxdWVuY3kgZGV2aWF0aW9uIGxldmVsLgorbGltaXRlcl9yZWxlYXNlX3RpbWUgLSBTZXRzIHRoZSBsaW1pdGVyIHJlbGVhc2UgdGltZS4KKworKiBUdW5pbmcgcG93ZXIKKworcG93ZXJfbGV2ZWwgLSBTZXRzIHRoZSBvdXRwdXQgcG93ZXIgbGV2ZWwgZm9yIHNpZ25hbCB0cmFuc21pc3Npb24uCithbnRlbm5hX2NhcGFjaXRvciAtIFRoaXMgc2VsZWN0cyB0aGUgdmFsdWUgb2YgYW50ZW5uYSB0dW5pbmcgY2FwYWNpdG9yIG1hbnVhbGx5CitvciBhdXRvbWF0aWNhbGx5IGlmIHNldCB0byB6ZXJvLgorCisqIFJEUyByZWxhdGVkCisKK3Jkc19wc19uYW1lIC0gU2V0cyB0aGUgUkRTIHBzIG5hbWUgZmllbGQgZm9yIHRyYW5zbWlzc2lvbi4KK3Jkc19yYWRpb190ZXh0IC0gU2V0cyB0aGUgUkRTIHJhZGlvIHRleHQgZm9yIHRyYW5zbWlzc2lvbi4KK3Jkc19waSAtIFNldHMgdGhlIFJEUyBQSSBmaWVsZCBmb3IgdHJhbnNtaXNzaW9uLgorcmRzX3B0eSAtIFNldHMgdGhlIFJEUyBQVFkgZmllbGQgZm9yIHRyYW5zbWlzc2lvbi4KKworKiBSZWdpb24gcmVsYXRlZAorCitwcmVlbXBoYXNpcyAtIHNldHMgdGhlIHByZWVtcGhhc2lzIHRvIGJlIGFwcGxpZWQgZm9yIHRyYW5zbWlzc2lvbi4KKworUk5MCis9PT0KKworVGhpcyBkZXZpY2UgYWxzbyBoYXMgYW4gaW50ZXJmYWNlIHRvIG1lYXN1cmUgcmVjZWl2ZWQgbm9pc2UgbGV2ZWwuIFRvIGRvIHRoYXQsIHlvdSBzaG91bGQKK2lvY3RsIHRoZSBkZXZpY2Ugbm9kZS4gSGVyZSBpcyBhbiBjb2RlIG9mIGV4YW1wbGU6CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzaTQ3MTNfcm5sIHJubDsKKwlpbnQgZmQgPSBvcGVuKCIvZGV2L3JhZGlvMCIsIE9fUkRXUik7CisJaW50IHJ2YWw7CisKKwlpZiAoYXJnYyA8IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIGZkOworCisJc3NjYW5mKGFyZ3ZbMV0sICIlZCIsICZybmwuZnJlcXVlbmN5KTsKKworCXJ2YWwgPSBpb2N0bChmZCwgU0k0NzEzX0lPQ19NRUFTVVJFX1JOTCwgJnJubCk7CisJaWYgKHJ2YWwgPCAwKQorCQlyZXR1cm4gcnZhbDsKKworCXByaW50ZigicmVjZWl2ZWQgbm9pc2UgbGV2ZWw6ICVkXG4iLCBybmwucm5sKTsKKworCWNsb3NlKGZkKTsKK30KKworVGhlIHN0cnVjdCBzaTQ3MTNfcm5sIGFuZCBTSTQ3MTNfSU9DX01FQVNVUkVfUk5MIGFyZSBkZWZpbmVkIHVuZGVyCitpbmNsdWRlL21lZGlhL3NpNDcxMy5oLgorCitTdGVyZW8vTW9ubyBhbmQgUkRTIHN1YmNoYW5uZWxzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBkZXZpY2UgY2FuIGFsc28gYmUgY29uZmlndXJlZCB1c2luZyB0aGUgYXZhaWxhYmxlIHN1YiBjaGFubmVscyBmb3IKK3RyYW5zbWlzc2lvbi4gVG8gZG8gdGhhdCB1c2UgUy9HX01PRFVMQVRPUiBpb2N0bCBhbmQgY29uZmlndXJlIHR4c3ViY2hhbnMgcHJvcGVybHkuCitSZWZlciB0byB2NGwyLXNwZWMgZm9yIHByb3BlciB1c2Ugb2YgdGhpcyBpb2N0bC4KKworVGVzdGluZworPT09PT09PQorVGVzdGluZyBpcyB1c3VhbGx5IGRvbmUgd2l0aCB2NGwyLWN0bCB1dGlsaXR5IGZvciBtYW5hZ2luZyBGTSB0dW5lciBjYXJkcy4KK1RoZSB0b29sIGNhbiBiZSBmb3VuZCBpbiB2NGwtZHZiIHJlcG9zaXRvcnkgdW5kZXIgdjRsMi1hcHBzL3V0aWwgZGlyZWN0b3J5LgorCitFeGFtcGxlIGZvciBzZXR0aW5nIHJkcyBwcyBuYW1lOgorIyB2NGwyLWN0bCAtZCAvZGV2L3JhZGlvMCAtLXNldC1jdHJsPXJkc19wc19uYW1lPSJEdW1teSIKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9zbHViLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vc2x1Yi50eHQKaW5kZXggYmIxZjVjNi4uNTEwOTE3ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9zbHViLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3NsdWIudHh0CkBAIC00MSw2ICs0MSw4IEBACiAJUAkJUG9pc29uaW5nIChvYmplY3QgYW5kIHBhZGRpbmcpCiAJVQkJVXNlciB0cmFja2luZyAoZnJlZSBhbmQgYWxsb2MpCiAJVAkJVHJhY2UgKHBsZWFzZSBvbmx5IHVzZSBvbiBzaW5nbGUgc2xhYnMpCisJTwkJU3dpdGNoIGRlYnVnZ2luZyBvZmYgZm9yIGNhY2hlcyB0aGF0IHdvdWxkIGhhdmUKKwkJCWNhdXNlZCBoaWdoZXIgbWluaW11bSBzbGFiIG9yZGVycwogCS0JCVN3aXRjaCBhbGwgZGVidWdnaW5nIG9mZiAodXNlZnVsIGlmIHRoZSBrZXJuZWwgaXMKIAkJCWNvbmZpZ3VyZWQgd2l0aCBDT05GSUdfU0xVQl9ERUJVR19PTikKIApAQCAtNTksNiArNjEsMTQgQEAKIAogCXNsdWJfZGVidWc9RixkZW50cnkKIAorRGVidWdnaW5nIG9wdGlvbnMgbWF5IHJlcXVpcmUgdGhlIG1pbmltdW0gcG9zc2libGUgc2xhYiBvcmRlciB0byBpbmNyZWFzZSBhcworYSByZXN1bHQgb2Ygc3RvcmluZyB0aGUgbWV0YWRhdGEgKGZvciBleGFtcGxlLCBjYWNoZXMgd2l0aCBQQUdFX1NJWkUgb2JqZWN0CitzaXplcykuICBUaGlzIGhhcyBhIGhpZ2hlciBsaWtsaWhvb2Qgb2YgcmVzdWx0aW5nIGluIHNsYWIgYWxsb2NhdGlvbiBlcnJvcnMKK2luIGxvdyBtZW1vcnkgc2l0dWF0aW9ucyBvciBpZiB0aGVyZSdzIGhpZ2ggZnJhZ21lbnRhdGlvbiBvZiBtZW1vcnkuICBUbworc3dpdGNoIG9mZiBkZWJ1Z2dpbmcgZm9yIHN1Y2ggY2FjaGVzIGJ5IGRlZmF1bHQsIHVzZQorCisJc2x1Yl9kZWJ1Zz1PCisKIEluIGNhc2UgeW91IGZvcmdvdCB0byBlbmFibGUgZGVidWdnaW5nIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lOiBJdCBpcwogcG9zc2libGUgdG8gZW5hYmxlIGRlYnVnZ2luZyBtYW51YWxseSB3aGVuIHRoZSBrZXJuZWwgaXMgdXAuIExvb2sgYXQgdGhlCiBjb250ZW50cyBvZjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L3plcm8tcGFnZS50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Ni96ZXJvLXBhZ2UudHh0CmluZGV4IDRmOTEzODUuLmZlYjM3ZTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24veDg2L3plcm8tcGFnZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYvemVyby1wYWdlLnR4dApAQCAtMTIsNiArMTIsNyBAQAogMDAwLzA0MAlBTEwJc2NyZWVuX2luZm8JVGV4dCBtb2RlIG9yIGZyYW1lIGJ1ZmZlciBpbmZvcm1hdGlvbgogCQkJCShzdHJ1Y3Qgc2NyZWVuX2luZm8pCiAwNDAvMDE0CUFMTAlhcG1fYmlvc19pbmZvCUFQTSBCSU9TIGluZm9ybWF0aW9uIChzdHJ1Y3QgYXBtX2Jpb3NfaW5mbykKKzA1OC8wMDgJQUxMCXRib290X2FkZHIgICAgICBQaHlzaWNhbCBhZGRyZXNzIG9mIHRib290IHNoYXJlZCBwYWdlCiAwNjAvMDEwCUFMTAlpc3RfaW5mbwlJbnRlbCBTcGVlZFN0ZXAgKElTVCkgQklPUyBzdXBwb3J0IGluZm9ybWF0aW9uCiAJCQkJKHN0cnVjdCBpc3RfaW5mbykKIDA4MC8wMTAJQUxMCWhkMF9pbmZvCWhkMCBkaXNrIHBhcmFtZXRlciwgT0JTT0xFVEUhIQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA4ZGNhOWQ4Li42NGI5ZTQ0IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNDM5LDcgKzQzOSw3IEBACiBBTVNPMTEwMCBSTklDIERSSVZFUgogTToJVG9tIFR1Y2tlciA8dG9tQG9wZW5ncmlkY29tcHV0aW5nLmNvbT4KIE06CVN0ZXZlIFdpc2UgPHN3aXNlQG9wZW5ncmlkY29tcHV0aW5nLmNvbT4KLUw6CWdlbmVyYWxAbGlzdHMub3BlbmZhYnJpY3Mub3JnCitMOglsaW51eC1yZG1hQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwLwogCkBAIC01MzQsMTAgKzUzNCwzMCBAQAogVzoJaHR0cDovL21heGltLm9yZy56YS9hdDkxXzI2Lmh0bWwKIFM6CU1haW50YWluZWQKIAotQVJNL0NJUlJVUyBMT0dJQyBFUDkzWFggQVJNIEFSQ0hJVEVDVFVSRQotTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KK0FSTS9CQ01SSU5HIEFSTSBBUkNISVRFQ1RVUkUKK006CUxlbyBDaGVuIDxsZW9jaGVuQGJyb2FkY29tLmNvbT4KK006CVNjb3R0IEJyYW5kZW4gPHNicmFuZGVuQGJyb2FkY29tLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKIFM6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtYmNtcmluZworCitBUk0vQkNNUklORyBNVEQgTkFORCBEUklWRVIKK006CUxlbyBDaGVuIDxsZW9jaGVuQGJyb2FkY29tLmNvbT4KK006CVNjb3R0IEJyYW5kZW4gPHNicmFuZGVuQGJyb2FkY29tLmNvbT4KK0w6CWxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL210ZC9uYW5kL2JjbV91bWlfbmFuZC5jCitGOglkcml2ZXJzL210ZC9uYW5kL2JjbV91bWlfYmNoLmMKK0Y6CWRyaXZlcnMvbXRkL25hbmQvYmNtX3VtaV9oYW1taW5nLmMKK0Y6CWRyaXZlcnMvbXRkL25hbmQvbmFuZF9iY21fdW1pLmgKKworQVJNL0NJUlJVUyBMT0dJQyBFUDkzWFggQVJNIEFSQ0hJVEVDVFVSRQorTToJSGFydGxleSBTd2VldGVuIDxoc3dlZXRlbkB2aXNpb25lbmdyYXZlcnMuY29tPgorTToJUnlhbiBNYWxsb24gPHJ5YW5AYmx1ZXdhdGVyc3lzLmNvbT4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1M6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtZXA5M3h4LworRjoJYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoLwogCiBBUk0vQ0lSUlVTIExPR0lDIEVEQjkzMTVBIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KQEAgLTY4NSw2ICs3MDUsMTggQEAKIE06CVBoaWxpcHAgWmFiZWwgPHBoaWxpcHAuemFiZWxAZ21haWwuY29tPgogUzoJTWFpbnRhaW5lZAogCitBUk0vTWFydmVsbCBMb2tpL0tpcmt3b29kL01WNzh4eDAvT3Jpb24gU09DIHN1cHBvcnQKK006CUxlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQG1hcnZlbGwuY29tPgorTToJTmljb2xhcyBQaXRyZSA8bmljb0BtYXJ2ZWxsLmNvbT4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1Q6CWdpdCBnaXQ6Ly9naXQubWFydmVsbC5jb20vb3Jpb24KK1M6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtbG9raS8KK0Y6CWFyY2gvYXJtL21hY2gta2lya3dvb2QvCitGOglhcmNoL2FybS9tYWNoLW12Nzh4eDAvCitGOglhcmNoL2FybS9tYWNoLW9yaW9uNXgvCitGOglhcmNoL2FybS9wbGF0LW9yaW9uLworCiBBUk0vTUlPQTcwMSBNQUNISU5FIFNVUFBPUlQKIE06CVJvYmVydCBKYXJ6bWlrIDxyb2JlcnQuamFyem1pa0BmcmVlLmZyPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQpAQCAtODc2LDYgKzkwOCw3IEBACiBNOglCb2IgQ29wZWxhbmQgPG1lQGJvYmNvcGVsYW5kLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwogTDoJYXRoNWstZGV2ZWxAbGlzdHMuYXRoNWsub3JnCitXOglodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2F0aDVrCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvCiAKQEAgLTg4Nyw2ICs5MjAsNyBAQAogTToJU2VudGhpbCBCYWxhc3VicmFtYW5pYW4gPHNlbnRoaWxrdW1hckBhdGhlcm9zLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwogTDoJYXRoOWstZGV2ZWxAbGlzdHMuYXRoOWsub3JnCitXOglodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2F0aDlrCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay8KIApAQCAtMTQ5NCw3ICsxNTI4LDcgQEAKIAogQ1hHQjMgSVdBUlAgUk5JQyBEUklWRVIgKElXX0NYR0IzKQogTToJU3RldmUgV2lzZSA8c3dpc2VAY2hlbHNpby5jb20+Ci1MOglnZW5lcmFsQGxpc3RzLm9wZW5mYWJyaWNzLm9yZworTDoJbGludXgtcmRtYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cub3BlbmZhYnJpY3Mub3JnCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy8KQEAgLTE4NjgsNyArMTkwMiw3IEBACiBFSENBIChJQk0gR1ggYnVzIEluZmluaUJhbmQgYWRhcHRlcikgRFJJVkVSCiBNOglIb2FuZy1OYW0gTmd1eWVuIDxobmd1eWVuQGRlLmlibS5jb20+CiBNOglDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KLUw6CWdlbmVyYWxAbGlzdHMub3BlbmZhYnJpY3Mub3JnCitMOglsaW51eC1yZG1hQHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS8KIApAQCAtMjU1Miw3ICsyNTg2LDcgQEAKIE06CVJvbGFuZCBEcmVpZXIgPHJvbGFuZGRAY2lzY28uY29tPgogTToJU2VhbiBIZWZ0eSA8c2Vhbi5oZWZ0eUBpbnRlbC5jb20+CiBNOglIYWwgUm9zZW5zdG9jayA8aGFsLnJvc2Vuc3RvY2tAZ21haWwuY29tPgotTDoJZ2VuZXJhbEBsaXN0cy5vcGVuZmFicmljcy5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorTDoJbGludXgtcmRtYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cub3BlbmliLm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcm9sYW5kL2luZmluaWJhbmQuZ2l0CiBTOglTdXBwb3J0ZWQKQEAgLTI2NjAsMjUgKzI2OTQsMjEgQEAKIAogSU5URUwgUFJPL1dJUkVMRVNTIDIxMDAgTkVUV09SSyBDT05ORUNUSU9OIFNVUFBPUlQKIE06CVpodSBZaSA8eWkuemh1QGludGVsLmNvbT4KLU06CUphbWVzIEtldHJlbm9zIDxqa2V0cmVub0BsaW51eC5pbnRlbC5jb20+CiBNOglSZWluZXR0ZSBDaGF0cmUgPHJlaW5ldHRlLmNoYXRyZUBpbnRlbC5jb20+CitNOglJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotTDoJaXB3MjEwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLVc6CWh0dHA6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbWFpbG1hbi9saXN0aW5mby9pcHcyMTAwLWRldmVsCiBXOglodHRwOi8vaXB3MjEwMC5zb3VyY2Vmb3JnZS5uZXQKLVM6CVN1cHBvcnRlZAorUzoJT2RkIEZpeGVzCiBGOglEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIxMDAKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC4qCiAKIElOVEVMIFBSTy9XSVJFTEVTUyAyOTE1QUJHIE5FVFdPUksgQ09OTkVDVElPTiBTVVBQT1JUCiBNOglaaHUgWWkgPHlpLnpodUBpbnRlbC5jb20+Ci1NOglKYW1lcyBLZXRyZW5vcyA8amtldHJlbm9AbGludXguaW50ZWwuY29tPgogTToJUmVpbmV0dGUgQ2hhdHJlIDxyZWluZXR0ZS5jaGF0cmVAaW50ZWwuY29tPgorTToJSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKLUw6CWlwdzIxMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Ci1XOglodHRwOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L21haWxtYW4vbGlzdGluZm8vaXB3MjEwMC1kZXZlbAogVzoJaHR0cDovL2lwdzIyMDAuc291cmNlZm9yZ2UubmV0Ci1TOglTdXBwb3J0ZWQKK1M6CU9kZCBGaXhlcwogRjoJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMjAwCiBGOglkcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuKgogCkBAIC0yNjk1LDggKzI3MjUsOCBAQAogSU5URUwgV0lSRUxFU1MgV0lGSSBMSU5LIChpd2x3aWZpKQogTToJWmh1IFlpIDx5aS56aHVAaW50ZWwuY29tPgogTToJUmVpbmV0dGUgQ2hhdHJlIDxyZWluZXR0ZS5jaGF0cmVAaW50ZWwuY29tPgorTToJSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKLUw6CWlwdzM5NDUtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vaW50ZWxsaW51eHdpcmVsZXNzLm9yZwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9pd2x3aWZpL2l3bHdpZmktMi42LmdpdAogUzoJU3VwcG9ydGVkCkBAIC0yNzI5LDcgKzI3NTksNyBAQAogCiBJUEFUSCBEUklWRVIKIE06CVJhbHBoIENhbXBiZWxsIDxpbmZpbmlwYXRoQHFsb2dpYy5jb20+Ci1MOglnZW5lcmFsQGxpc3RzLm9wZW5mYWJyaWNzLm9yZworTDoJbGludXgtcmRtYUB2Z2VyLmtlcm5lbC5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQucWxvZ2ljLmNvbS9pcGF0aC1saW51eC0yLjYKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoLwpAQCAtMjkyOCw2ICsyOTU4LDcgQEAKIAogS0VSTkVMIFZJUlRVQUwgTUFDSElORSAoS1ZNKQogTToJQXZpIEtpdml0eSA8YXZpQHJlZGhhdC5jb20+CitNOglNYXJjZWxvIFRvc2F0dGkgPG10b3NhdHRpQHJlZGhhdC5jb20+CiBMOglrdm1Admdlci5rZXJuZWwub3JnCiBXOglodHRwOi8va3ZtLnF1bXJhbmV0LmNvbQogUzoJU3VwcG9ydGVkCkBAIC0zMjc5LDggKzMzMTAsMTQgQEAKIEY6CWRyaXZlcnMvbmV0L212NjQzeHhfZXRoLioKIEY6CWluY2x1ZGUvbGludXgvbXY2NDN4eC5oCiAKK01BUlZFTEwgTVdMOEsgV0lSRUxFU1MgRFJJVkVSCitNOglMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEBtYXJ2ZWxsLmNvbT4KK0w6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCisKIE1BUlZFTEwgU09DIE1NQy9TRC9TRElPIENPTlRST0xMRVIgRFJJVkVSCi1NOglOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CitNOglOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgogUzoJTWFpbnRhaW5lZAogCiBNQVJWRUxMIFlVS09OIC8gU1lTS09OTkVDVCBEUklWRVIKQEAgLTM0ODUsNyArMzUyMiw3IEBACiBORVRFRkZFQ1QgSVdBUlAgUk5JQyBEUklWRVIgKElXX05FUykKIE06CUZhaXNhbCBMYXRpZiA8ZmFpc2FsLmxhdGlmQGludGVsLmNvbT4KIE06CUNoaWVuIFR1bmcgPGNoaWVuLnRpbi50dW5nQGludGVsLmNvbT4KLUw6CWdlbmVyYWxAbGlzdHMub3BlbmZhYnJpY3Mub3JnCitMOglsaW51eC1yZG1hQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5uZXRlZmZlY3QuY29tCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvCkBAIC0zNTkxLDkgKzM2MjgsMTIgQEAKIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saW52aWxsZS93aXJlbGVzcy0yLjYuZ2l0CiBTOglNYWludGFpbmVkCitGOgluZXQvbWFjODAyMTEvCitGOgluZXQvcmZraWxsLwogRjoJbmV0L3dpcmVsZXNzLwogRjoJaW5jbHVkZS9uZXQvaWVlZTgwMjExKgogRjoJaW5jbHVkZS9saW51eC93aXJlbGVzcy5oCitGOglkcml2ZXJzL25ldC93aXJlbGVzcy8KIAogTkVUV09SS0lORyBEUklWRVJTCiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCkBAIC0zOTY5LDYgKzQwMDksMTQgQEAKIEY6CWRyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCiBGOglpbmNsdWRlL2xpbnV4L3BrdGNkdmQuaAogCitQTUMgU0lFUlJBIE1heFJBSUQgRFJJVkVSCitQOglBbmlsIFJhdmluZHJhbmF0aAorTToJYW5pbF9yYXZpbmRyYW5hdGhAcG1jLXNpZXJyYS5jb20KK0w6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vd3d3LnBtYy1zaWVycmEuY29tLworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL3Njc2kvcG1jcmFpZC4qCisKIFBPU0lYIENMT0NLUyBhbmQgVElNRVJTCiBNOglUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KIFM6CVN1cHBvcnRlZApAQCAtNDI5OSw3ICs0MzQ3LDcgQEAKIFc6CWh0dHA6Ly9saW51eHdpcmVsZXNzLm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGludmlsbGUvd2lyZWxlc3MtdGVzdGluZy5naXQKIFM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOCoKK0Y6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MCoKIAogUlRMODE4NyBXSVJFTEVTUyBEUklWRVIKIE06CUhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+CkBAIC00NDA3LDcgKzQ0NTUsNyBAQAogRjoJaW5jbHVkZS9zY3NpL3NnLmgKIAogU0NTSSBTVUJTWVNURU0KLU06CSJKYW1lcyBFLkouIEJvdHRvbWxleSIgPEphbWVzLkJvdHRvbWxleUBIYW5zZW5QYXJ0bmVyc2hpcC5jb20+CitNOgkiSmFtZXMgRS5KLiBCb3R0b21sZXkiIDxKYW1lcy5Cb3R0b21sZXlAc3VzZS5kZT4KIEw6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2plamIvc2NzaS1taXNjLTIuNi5naXQKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvamVqYi9zY3NpLXJjLWZpeGVzLTIuNi5naXQKQEAgLTQ1MjYsOSArNDU3NCwxMCBAQAogRjoJZHJpdmVycy9uZXQvYmVuZXQvCiAKIFNGQyBORVRXT1JLIERSSVZFUgotUDoJU3RldmUgSG9kZ3NvbgotUDoJQmVuIEh1dGNoaW5ncwotTToJUm9iZXJ0IFN0b25laG91c2UgPGxpbnV4LW5ldC1kcml2ZXJzQHNvbGFyZmxhcmUuY29tPgorTToJU29sYXJmbGFyZSBsaW51eCBtYWludGFpbmVycyA8bGludXgtbmV0LWRyaXZlcnNAc29sYXJmbGFyZS5jb20+CitNOglTdGV2ZSBIb2Rnc29uIDxzaG9kZ3NvbkBzb2xhcmZsYXJlLmNvbT4KK006CUJlbiBIdXRjaGluZ3MgPGJodXRjaGluZ3NAc29sYXJmbGFyZS5jb20+CitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvbmV0L3NmYy8KIApAQCAtNDY0MCw3ICs0Njg5LDcgQEAKIEY6CW1tL3NsP2IuYwogCiBTTUM5MXggRVRIRVJORVQgRFJJVkVSCi1NOglOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CitNOglOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9uZXQvc21jOTF4LioKIApAQCAtNTU3OCw2ICs1NjI3LDI0IEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKIAorV0wxMjUxIFdJUkVMRVNTIERSSVZFUgorUDoJS2FsbGUgVmFsbworTToJa2FsbGUudmFsb0Bub2tpYS5jb20KK0w6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGludmlsbGUvd2lyZWxlc3MtdGVzdGluZy5naXQKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC8qCitYOglkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxKgorCitXTDEyNzEgV0lSRUxFU1MgRFJJVkVSCitNOglMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saW52aWxsZS93aXJlbGVzcy10ZXN0aW5nLmdpdAorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MSoKKwogV0wzNTAxIFdJUkVMRVNTIFBDTUNJQSBDQVJEIERSSVZFUgogTToJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGdob3N0cHJvdG9jb2xzLm5ldD4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA3ZDM0MTVjLi40MzM0OTNhIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgogU1VCTEVWRUwgPSAzMQotRVhUUkFWRVJTSU9OID0gLXJjOQorRVhUUkFWRVJTSU9OID0KIE5BTUUgPSBNYW4tRWF0aW5nIFNlYWxzIG9mIEFudGlxdWl0eQogCiAjICpET0NVTUVOVEFUSU9OKgpAQCAtMzI1LDcgKzMyNSw3IEBACiBNT0RGTEFHUwk9IC1ETU9EVUxFCiBDRkxBR1NfTU9EVUxFICAgPSAkKE1PREZMQUdTKQogQUZMQUdTX01PRFVMRSAgID0gJChNT0RGTEFHUykKLUxERkxBR1NfTU9EVUxFICA9CitMREZMQUdTX01PRFVMRSAgPSAtVCAkKHNyY3RyZWUpL3NjcmlwdHMvbW9kdWxlLWNvbW1vbi5sZHMKIENGTEFHU19LRVJORUwJPQogQUZMQUdTX0tFUk5FTAk9CiBDRkxBR1NfR0NPVgk9IC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZQpkaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9LY29uZmlnCmluZGV4IDk5MTkzYjEuLmJlZWEzY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvS2NvbmZpZworKysgYi9hcmNoL0tjb25maWcKQEAgLTMwLDYgKzMwLDE4IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBPUFJPRklMRV9FVkVOVF9NVUxUSVBMRVgKKwlib29sICJPUHJvZmlsZSBtdWx0aXBsZXhpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIE9QUk9GSUxFICYmIFg4NgorCWhlbHAKKwkgIFRoZSBudW1iZXIgb2YgaGFyZHdhcmUgY291bnRlcnMgaXMgbGltaXRlZC4gVGhlIG11bHRpcGxleGluZworCSAgZmVhdHVyZSBlbmFibGVzIE9Qcm9maWxlIHRvIGdhdGhlciBtb3JlIGV2ZW50cyB0aGFuIGNvdW50ZXJzCisJICBhcmUgcHJvdmlkZWQgYnkgdGhlIGhhcmR3YXJlLiBUaGlzIGlzIHJlYWxpemVkIGJ5IHN3aXRjaGluZworCSAgYmV0d2VlbiBldmVudHMgYXQgYW4gdXNlciBzcGVjaWZpZWQgdGltZSBpbnRlcnZhbC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIEhBVkVfT1BST0ZJTEUKIAlib29sCiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYWdwLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2FncC5oCmluZGV4IDI2YzE3OTEuLmE5NGQ0OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYWdwLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9hZ3AuaApAQCAtOSwxMCArOSw2IEBACiAjZGVmaW5lIHVubWFwX3BhZ2VfZnJvbV9hZ3AocGFnZSkgCiAjZGVmaW5lIGZsdXNoX2FncF9jYWNoZSgpIG1iKCkKIAotLyogQ29udmVydCBhIHBoeXNpY2FsIGFkZHJlc3MgdG8gYW4gYWRkcmVzcyBzdWl0YWJsZSBmb3IgdGhlIEdBUlQuICovCi0jZGVmaW5lIHBoeXNfdG9fZ2FydCh4KSAoeCkKLSNkZWZpbmUgZ2FydF90b19waHlzKHgpICh4KQotCiAvKiBHQVRUIGFsbG9jYXRpb24uIFJldHVybnMvYWNjZXB0cyBHQVRUIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MuICovCiAjZGVmaW5lIGFsbG9jX2dhdHRfcGFnZXMob3JkZXIpCQlcCiAJKChjaGFyICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAob3JkZXIpKSkKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IGI2NjNmMWYuLjJjMTIzNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGVyY3B1LmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtMSwxMDIgKzEsMTggQEAKICNpZm5kZWYgX19BTFBIQV9QRVJDUFVfSAogI2RlZmluZSBfX0FMUEhBX1BFUkNQVV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUtZGVmcy5oPgotCiAvKgotICogRGV0ZXJtaW5lIHRoZSByZWFsIHZhcmlhYmxlIG5hbWUgZnJvbSB0aGUgbmFtZSB2aXNpYmxlIGluIHRoZQotICoga2VybmVsIHNvdXJjZXMuCi0gKi8KLSNkZWZpbmUgcGVyX2NwdV92YXIodmFyKSBwZXJfY3B1X18jI3ZhcgotCi0jaWZkZWYgQ09ORklHX1NNUAotCi0vKgotICogcGVyX2NwdV9vZmZzZXQoKSBpcyB0aGUgb2Zmc2V0IHRoYXQgaGFzIHRvIGJlIGFkZGVkIHRvIGEKLSAqIHBlcmNwdSB2YXJpYWJsZSB0byBnZXQgdG8gdGhlIGluc3RhbmNlIGZvciBhIGNlcnRhaW4gcHJvY2Vzc29yLgotICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfb2Zmc2V0W05SX0NQVVNdOwotCi0jZGVmaW5lIHBlcl9jcHVfb2Zmc2V0KHgpIChfX3Blcl9jcHVfb2Zmc2V0W3hdKQotCi0jZGVmaW5lIF9fbXlfY3B1X29mZnNldCBwZXJfY3B1X29mZnNldChyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKQotI2lmZGVmIENPTkZJR19ERUJVR19QUkVFTVBUCi0jZGVmaW5lIG15X2NwdV9vZmZzZXQgcGVyX2NwdV9vZmZzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKQotI2Vsc2UKLSNkZWZpbmUgbXlfY3B1X29mZnNldCBfX215X2NwdV9vZmZzZXQKLSNlbmRpZgotCi0jaWZuZGVmIE1PRFVMRQotI2RlZmluZSBTSElGVF9QRVJDUFVfUFRSKHZhciwgb2Zmc2V0KSBSRUxPQ19ISURFKCZwZXJfY3B1X3Zhcih2YXIpLCAob2Zmc2V0KSkKLSNkZWZpbmUgUEVSX0NQVV9ERUZfQVRUUklCVVRFUwotI2Vsc2UKLS8qCi0gKiBUbyBjYWxjdWxhdGUgYWRkcmVzc2VzIG9mIGxvY2FsbHkgZGVmaW5lZCB2YXJpYWJsZXMsIEdDQyB1c2VzIDMyLWJpdAotICogZGlzcGxhY2VtZW50IGZyb20gdGhlIEdQLiBXaGljaCBkb2Vzbid0IHdvcmsgZm9yIHBlciBjcHUgdmFyaWFibGVzIGluCi0gKiBtb2R1bGVzLCBhcyBhbiBvZmZzZXQgdG8gdGhlIGtlcm5lbCBwZXIgY3B1IGFyZWEgaXMgd2F5IGFib3ZlIDRHLgorICogVG8gY2FsY3VsYXRlIGFkZHJlc3NlcyBvZiBsb2NhbGx5IGRlZmluZWQgdmFyaWFibGVzLCBHQ0MgdXNlcworICogMzItYml0IGRpc3BsYWNlbWVudCBmcm9tIHRoZSBHUC4gV2hpY2ggZG9lc24ndCB3b3JrIGZvciBwZXIgY3B1CisgKiB2YXJpYWJsZXMgaW4gbW9kdWxlcywgYXMgYW4gb2Zmc2V0IHRvIHRoZSBrZXJuZWwgcGVyIGNwdSBhcmVhIGlzCisgKiB3YXkgYWJvdmUgNEcuCiAgKgotICogVGhpcyBmb3JjZXMgYWxsb2NhdGlvbiBvZiBhIEdPVCBlbnRyeSBmb3IgcGVyIGNwdSB2YXJpYWJsZSB1c2luZwotICogbGRxIGluc3RydWN0aW9uIHdpdGggYSAnbGl0ZXJhbCcgcmVsb2NhdGlvbi4KKyAqIEFsd2F5cyB1c2Ugd2VhayBkZWZpbml0aW9ucyBmb3IgcGVyY3B1IHZhcmlhYmxlcyBpbiBtb2R1bGVzLgogICovCi0jZGVmaW5lIFNISUZUX1BFUkNQVV9QVFIodmFyLCBvZmZzZXQpICh7CQlcCi0JZXh0ZXJuIGludCBzaW1wbGVfaWRlbnRpZmllcl8jI3Zhcih2b2lkKTsJXAotCXVuc2lnbmVkIGxvbmcgX19wdHIsIHRtcF9ncDsJCQlcCi0JYXNtICggICJicgklMSwgMWYJCSAgCSAgICAgIFxuXAotCTE6CWxkZ3AJJTEsIDAoJTEpCSAgICAJICAgICAgXG5cCi0JCWxkcSAlMCwgcGVyX2NwdV9fIiAjdmFyIiglMSlcdCFsaXRlcmFsIgkJXAotCQk6ICI9JnIiKF9fcHRyKSwgIj0mciIodG1wX2dwKSk7CQlcCi0JKHR5cGVvZigmcGVyX2NwdV92YXIodmFyKSkpKF9fcHRyICsgKG9mZnNldCkpOyB9KQotCi0jZGVmaW5lIFBFUl9DUFVfREVGX0FUVFJJQlVURVMJX191c2VkCi0KLSNlbmRpZiAvKiBNT0RVTEUgKi8KLQotLyoKLSAqIEEgcGVyY3B1IHZhcmlhYmxlIG1heSBwb2ludCB0byBhIGRpc2NhcmRlZCByZWdpb25zLiBUaGUgZm9sbG93aW5nIGFyZQotICogZXN0YWJsaXNoZWQgd2F5cyB0byBwcm9kdWNlIGEgdXNhYmxlIHBvaW50ZXIgZnJvbSB0aGUgcGVyY3B1IHZhcmlhYmxlCi0gKiBvZmZzZXQuCi0gKi8KLSNkZWZpbmUgcGVyX2NwdSh2YXIsIGNwdSkgXAotCSgqU0hJRlRfUEVSQ1BVX1BUUih2YXIsIHBlcl9jcHVfb2Zmc2V0KGNwdSkpKQotI2RlZmluZSBfX2dldF9jcHVfdmFyKHZhcikgXAotCSgqU0hJRlRfUEVSQ1BVX1BUUih2YXIsIG15X2NwdV9vZmZzZXQpKQotI2RlZmluZSBfX3Jhd19nZXRfY3B1X3Zhcih2YXIpIFwKLQkoKlNISUZUX1BFUkNQVV9QVFIodmFyLCBfX215X2NwdV9vZmZzZXQpKQotCi0jZWxzZSAvKiAhIFNNUCAqLwotCi0jZGVmaW5lIHBlcl9jcHUodmFyLCBjcHUpCQkoKigodm9pZCkoY3B1KSwgJnBlcl9jcHVfdmFyKHZhcikpKQotI2RlZmluZSBfX2dldF9jcHVfdmFyKHZhcikJCXBlcl9jcHVfdmFyKHZhcikKLSNkZWZpbmUgX19yYXdfZ2V0X2NwdV92YXIodmFyKQkJcGVyX2NwdV92YXIodmFyKQotCi0jZGVmaW5lIFBFUl9DUFVfREVGX0FUVFJJQlVURVMKLQotI2VuZGlmIC8qIFNNUCAqLwotCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBQRVJfQ1BVX0JBU0VfU0VDVElPTiAiLmRhdGEucGVyY3B1IgotI2Vsc2UKLSNkZWZpbmUgUEVSX0NQVV9CQVNFX1NFQ1RJT04gIi5kYXRhIgorI2lmIGRlZmluZWQoTU9EVUxFKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCisjZGVmaW5lIEFSQ0hfTkVFRFNfV0VBS19QRVJfQ1BVCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TTVAKLQotI2lmZGVmIE1PRFVMRQotI2RlZmluZSBQRVJfQ1BVX1NIQVJFRF9BTElHTkVEX1NFQ1RJT04gIiIKLSNlbHNlCi0jZGVmaW5lIFBFUl9DUFVfU0hBUkVEX0FMSUdORURfU0VDVElPTiAiLnNoYXJlZF9hbGlnbmVkIgotI2VuZGlmCi0jZGVmaW5lIFBFUl9DUFVfRklSU1RfU0VDVElPTiAiLmZpcnN0IgotCi0jZWxzZQotCi0jZGVmaW5lIFBFUl9DUFVfU0hBUkVEX0FMSUdORURfU0VDVElPTiAiIgotI2RlZmluZSBQRVJfQ1BVX0ZJUlNUX1NFQ1RJT04gIiIKLQotI2VuZGlmCi0KLSNkZWZpbmUgUEVSX0NQVV9BVFRSSUJVVEVTCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+CiAKICNlbmRpZiAvKiBfX0FMUEhBX1BFUkNQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCAzNjQxZWMxLi4yNjc3M2UzIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTMyLDYgKzMyLDggQEAKICNkZWZpbmUJU09fUkNWVElNRU8JMHgxMDEyCiAjZGVmaW5lCVNPX1NORFRJTUVPCTB4MTAxMwogI2RlZmluZSBTT19BQ0NFUFRDT05OCTB4MTAxNAorI2RlZmluZSBTT19QUk9UT0NPTAkweDEwMjgKKyNkZWZpbmUgU09fRE9NQUlOCTB4MTAyOQogCiAvKiBsaW51eC1zcGVjaWZpYywgbWlnaHQgYXMgd2VsbCBiZSB0aGUgc2FtZSBhcyBvbiBpMzg2ICovCiAjZGVmaW5lIFNPX05PX0NIRUNLCTExCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNjBjODNhYi4uNTA3NmE4OCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtNzUsNiArNzUsNyBAQAogI2RlZmluZSBUSUZfVUFDX1NJR0JVUwkJNwogI2RlZmluZSBUSUZfTUVNRElFCQk4CiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJOQkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCAqLworI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQkxMAkvKiBjYWxsYmFjayBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXIgKi8KICNkZWZpbmUgVElGX0ZSRUVaRQkJMTYJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQpAQCAtODIsMTAgKzgzLDEyIEBACiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQorI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQogI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKIC8qIFdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4uICAqLwotI2RlZmluZSBfVElGX1dPUktfTUFTSwkJKF9USUZfU0lHUEVORElORyB8IF9USUZfTkVFRF9SRVNDSEVEKQorI2RlZmluZSBfVElGX1dPUktfTUFTSwkJKF9USUZfU0lHUEVORElORyB8IF9USUZfTkVFRF9SRVNDSEVEIHwgXAorCQkJCSBfVElGX05PVElGWV9SRVNVTUUpCiAKIC8qIFdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1c2Vyc3BhY2UuICAqLwogI2RlZmluZSBfVElGX0FMTFdPUktfTUFTSwkoX1RJRl9XT1JLX01BU0sJCVwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGxiZmx1c2guaAppbmRleCA5ZDg3YWFhLi5lODllMGMyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfQUxQSEFfVExCRkxVU0hfSAogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZGY2NWVhYS4uMDkzMmRiYiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2lnbmFsLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KQEAgLTY4Myw0ICs2ODQsMTEgQEAKIHsKIAlpZiAodGhyZWFkX2luZm9fZmxhZ3MgJiAoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9SRVNUT1JFX1NJR01BU0spKQogCQlkb19zaWduYWwocmVncywgc3csIHIwLCByMTkpOworCisJaWYgKHRocmVhZF9pbmZvX2ZsYWdzICYgX1RJRl9OT1RJRllfUkVTVU1FKSB7CisJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9OT1RJRllfUkVTVU1FKTsKKwkJdHJhY2Vob29rX25vdGlmeV9yZXN1bWUocmVncyk7CisJCWlmIChjdXJyZW50LT5yZXBsYWNlbWVudF9zZXNzaW9uX2tleXJpbmcpCisJCQlrZXlfcmVwbGFjZV9zZXNzaW9uX2tleXJpbmcoKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hbHBoYS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBiOWQ2NTY4Li42ZGMwM2MzIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEzNCwxMyArMTM0LDYgQEAKIAlfX2Jzc19zdG9wID0gLjsKIAlfZW5kID0gLjsKIAotCS8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLwotCS9ESVNDQVJELyA6IHsKLQkJRVhJVF9URVhUCi0JCUVYSVRfREFUQQotCQkqKC5leGl0Y2FsbC5leGl0KQotCX0KLQogCS5tZGVidWcgMCA6IHsKIAkJKigubWRlYnVnKQogCX0KQEAgLTE1MCw0ICsxNDMsNiBAQAogCiAJU1RBQlNfREVCVUcKIAlEV0FSRl9ERUJVRworCisJRElTQ0FSRFMKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IGFlZjYzYzguLmQ3NzhhNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtNDYsMTAgKzQ2LDYgQEAKIAlkZXBlbmRzIG9uIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlkZWZhdWx0IHkgaWYgU01QICYmICFMT0NBTF9USU1FUlMKIAotY29uZmlnIE1NVQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIE5PX0lPUE9SVAogCWJvb2wKIApAQCAtMTI2LDYgKzEyMiwxMyBAQAogY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAogCWJvb2wKIAorY29uZmlnIEFSQ0hfSEFTX0NQVUZSRVEKKwlib29sCisJaGVscAorCSAgSW50ZXJuYWwgbm9kZSB0byBzaWduaWZ5IHRoYXQgdGhlIEFSQ0ggaGFzIENQVUZSRVEgc3VwcG9ydAorCSAgYW5kIHRoYXQgdGhlIHJlbGV2YW50IG1lbnUgY29uZmlndXJhdGlvbnMgYXJlIGRpc3BsYXllZCBmb3IKKwkgIGl0LgorCiBjb25maWcgR0VORVJJQ19IV0VJR0hUCiAJYm9vbAogCWRlZmF1bHQgeQpAQCAtMTg4LDYgKzE5MSwxMyBAQAogCiBtZW51ICJTeXN0ZW0gVHlwZSIKIAorY29uZmlnIE1NVQorCWJvb2wgIk1NVS1iYXNlZCBQYWdlZCBNZW1vcnkgTWFuYWdlbWVudCBTdXBwb3J0IgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNlbGVjdCBpZiB5b3Ugd2FudCBNTVUtYmFzZWQgdmlydHVhbGlzZWQgYWRkcmVzc2luZyBzcGFjZQorCSAgc3VwcG9ydCBieSBwYWdlZCBtZW1vcnkgbWFuYWdlbWVudC4gSWYgdW5zdXJlLCBzYXkgJ1knLgorCiBjaG9pY2UKIAlwcm9tcHQgIkFSTSBzeXN0ZW0gdHlwZSIKIAlkZWZhdWx0IEFSQ0hfVkVSU0FUSUxFCkBAIC0yMDMsNiArMjEzLDcgQEAKIGNvbmZpZyBBUkNIX0lOVEVHUkFUT1IKIAlib29sICJBUk0gTHRkLiBJbnRlZ3JhdG9yIGZhbWlseSIKIAlzZWxlY3QgQVJNX0FNQkEKKwlzZWxlY3QgQVJDSF9IQVNfQ1BVRlJFUQogCXNlbGVjdCBIQVZFX0NMSwogCXNlbGVjdCBDT01NT05fQ0xLREVWCiAJc2VsZWN0IElDU1Q1MjUKQEAgLTIxNyw2ICsyMjgsNyBAQAogCXNlbGVjdCBJQ1NUMzA3CiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEFSTSBMdGQgUmVhbFZpZXcgYm9hcmRzLgogCkBAIC0yMjksNiArMjQxLDcgQEAKIAlzZWxlY3QgSUNTVDMwNwogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUworCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBBUk0gTHRkIFZlcnNhdGlsZSBib2FyZC4KIApAQCAtMzI3LDYgKzM0MCwyMCBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBIeW5peCBITVM3MjB4CiAKK2NvbmZpZyBBUkNIX05PTUFESUsKKwlib29sICJTVE1pY3JvZWxlY3Ryb25pY3MgTm9tYWRpayIKKwlzZWxlY3QgQVJNX0FNQkEKKwlzZWxlY3QgQVJNX1ZJQworCXNlbGVjdCBDUFVfQVJNOTI2VAorCXNlbGVjdCBIQVZFX0NMSworCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBOb21hZGlrIHBsYXRmb3JtIGJ5IFNULUVyaWNzc29uCisKIGNvbmZpZyBBUkNIX0lPUDEzWFgKIAlib29sICJJT1AxM3h4LWJhc2VkIgogCWRlcGVuZHMgb24gTU1VCkBAIC00OTMsMTAgKzUyMCwxOCBAQAogCXNlbGVjdCBDUFVfQVJNOTI2VAogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgSEFWRV9DTEsKIAlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBHRU5FUklDX1RJTUUKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCWhlbHAKLQkJU3VwcG9ydCBmb3IgTnV2b3RvbiAoV2luYm9uZCBsb2dpYyBkZXB0LikgQVJNOSBwcm9jZXNzb3IsWW91Ci0JCWNhbiBsb2dpbiB3d3cubWN1b3MuY29tIG9yIHd3dy5udXZvdG9uLmNvbSB0byBrbm93IG1vcmUuCisJICBTdXBwb3J0IGZvciBOdXZvdG9uIChXaW5ib25kIGxvZ2ljIGRlcHQuKSBBUk05IHByb2Nlc3NvciwKKwkgIEF0IHByZXNlbnQsIHRoZSB3OTB4OTAwIGhhcyBiZWVuIHJlbmFtZWQgbnVjOTAwLCByZWdhcmRpbmcKKwkgIHRoZSBBUk0gc2VyaWVzIHByb2R1Y3QgbGluZSwgeW91IGNhbiBsb2dpbiB0aGUgZm9sbG93aW5nCisJICBsaW5rIGFkZHJlc3MgdG8ga25vdyBtb3JlLgorCisJICA8aHR0cDovL3d3dy5udXZvdG9uLmNvbS9ocS9lbnUvUHJvZHVjdEFuZFNhbGVzL1Byb2R1Y3RMaW5lcy8KKwkJQ29uc3VtZXJFbGVjdHJvbmljc0lDL0FSTU1pY3JvY29udHJvbGxlci9BUk1NaWNyb2NvbnRyb2xsZXI+CiAKIGNvbmZpZyBBUkNIX1BOWDQwMDgKIAlib29sICJQaGlsaXBzIE5leHBlcmlhIFBOWDQwMDggTW9iaWxlIgpAQCAtNTA5LDYgKzU0NCw3IEBACiAJYm9vbCAiUFhBMnh4L1BYQTN4eC1iYXNlZCIKIAlkZXBlbmRzIG9uIE1NVQogCXNlbGVjdCBBUkNIX01URF9YSVAKKwlzZWxlY3QgQVJDSF9IQVNfQ1BVRlJFUQogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgSEFWRV9DTEsKIAlzZWxlY3QgQ09NTU9OX0NMS0RFVgpAQCAtNTUxLDYgKzU4Nyw3IEBACiAJc2VsZWN0IElTQQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgQVJDSF9NVERfWElQCisJc2VsZWN0IEFSQ0hfSEFTX0NQVUZSRVEKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCkBAIC01NjMsNiArNjAwLDcgQEAKIGNvbmZpZyBBUkNIX1MzQzI0MTAKIAlib29sICJTYW1zdW5nIFMzQzI0MTAsIFMzQzI0MTIsIFMzQzI0MTMsIFMzQzI0NDAsIFMzQzI0NDIsIFMzQzI0NDMiCiAJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCiAJc2VsZWN0IEhBVkVfQ0xLCiAJaGVscAogCSAgU2Ftc3VuZyBTM0MyNDEwWCBDUFUgYmFzZWQgc3lzdGVtcywgc3VjaCBhcyB0aGUgU2ltdGVjIEVsZWN0cm9uaWNzCkBAIC01NzMsOSArNjExLDE4IEBACiAJYm9vbCAiU2Ftc3VuZyBTM0M2NFhYIgogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgQVJDSF9IQVNfQ1BVRlJFUQogCWhlbHAKIAkgIFNhbXN1bmcgUzNDNjRYWCBzZXJpZXMgYmFzZWQgc3lzdGVtcwogCitjb25maWcgQVJDSF9TNVBDMVhYCisJYm9vbCAiU2Ftc3VuZyBTNVBDMVhYIgorCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgQ1BVX1Y3CisJaGVscAorCSAgU2Ftc3VuZyBTNVBDMVhYIHNlcmllcyBiYXNlZCBzeXN0ZW1zCisKIGNvbmZpZyBBUkNIX1NIQVJLCiAJYm9vbCAiU2hhcmsiCiAJc2VsZWN0IENQVV9TQTExMApAQCAtNjMyLDExICs2NzksMjQgQEAKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEhBVkVfQ0xLCiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJc2VsZWN0IEFSQ0hfSEFTX0NQVUZSRVEKIAlzZWxlY3QgR0VORVJJQ19USU1FCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAloZWxwCiAJICBTdXBwb3J0IGZvciBUSSdzIE9NQVAgcGxhdGZvcm0gKE9NQVAxIGFuZCBPTUFQMikuCiAKK2NvbmZpZyBBUkNIX0JDTVJJTkcKKwlib29sICJCcm9hZGNvbSBCQ01SSU5HIgorCWRlcGVuZHMgb24gTU1VCisJc2VsZWN0IENQVV9WNgorCXNlbGVjdCBBUk1fQU1CQQorCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCisJaGVscAorCSAgU3VwcG9ydCBmb3IgQnJvYWRjb20ncyBCQ01SaW5nIHBsYXRmb3JtLgorCiBlbmRjaG9pY2UKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWNscHM3MTF4L0tjb25maWciCkBAIC02ODUsNiArNzQ1LDcgQEAKIHNvdXJjZSAiYXJjaC9hcm0vcGxhdC1zM2MyNHh4L0tjb25maWciCiBzb3VyY2UgImFyY2gvYXJtL3BsYXQtczNjNjR4eC9LY29uZmlnIgogc291cmNlICJhcmNoL2FybS9wbGF0LXMzYy9LY29uZmlnIgorc291cmNlICJhcmNoL2FybS9wbGF0LXM1cGMxeHgvS2NvbmZpZyIKIAogaWYgQVJDSF9TM0MyNDEwCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtczNjMjQwMC9LY29uZmlnIgpAQCAtNzAyLDYgKzc2MywxMCBAQAogCiBzb3VyY2UgImFyY2gvYXJtL3BsYXQtc3RtcDN4eHgvS2NvbmZpZyIKIAoraWYgQVJDSF9TNVBDMVhYCitzb3VyY2UgImFyY2gvYXJtL21hY2gtczVwYzEwMC9LY29uZmlnIgorZW5kaWYKKwogc291cmNlICJhcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWg3MjB4L0tjb25maWciCkBAIC03MTYsNiArNzgxLDggQEAKIAogc291cmNlICJhcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtbm9tYWRpay9LY29uZmlnIgorCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbmV0eC9LY29uZmlnIgogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbnM5eHh4L0tjb25maWciCkBAIC03MzAsNiArNzk3LDggQEAKIAogc291cmNlICJhcmNoL2FybS9tYWNoLXc5MHg5MDAvS2NvbmZpZyIKIAorc291cmNlICJhcmNoL2FybS9tYWNoLWJjbXJpbmcvS2NvbmZpZyIKKwogIyBEZWZpbml0aW9ucyB0byBtYWtlIGxpZmUgZWFzaWVyCiBjb25maWcgQVJDSF9BQ09STgogCWJvb2wKQEAgLTk2MiwxOCArMTAzMSw3IEBACiAJICBhY2NvdW50aW5nIHRvIGJlIHNwcmVhZCBhY3Jvc3MgdGhlIHRpbWVyIGludGVydmFsLCBwcmV2ZW50aW5nIGEKIAkgICJ0aHVuZGVyaW5nIGhlcmQiIGF0IGV2ZXJ5IHRpbWVyIHRpY2suCiAKLWNvbmZpZyBQUkVFTVBUCi0JYm9vbCAiUHJlZW1wdGlibGUgS2VybmVsIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JaGVscAotCSAgVGhpcyBvcHRpb24gcmVkdWNlcyB0aGUgbGF0ZW5jeSBvZiB0aGUga2VybmVsIHdoZW4gcmVhY3RpbmcgdG8KLQkgIHJlYWwtdGltZSBvciBpbnRlcmFjdGl2ZSBldmVudHMgYnkgYWxsb3dpbmcgYSBsb3cgcHJpb3JpdHkgcHJvY2VzcyB0bwotCSAgYmUgcHJlZW1wdGVkIGV2ZW4gaWYgaXQgaXMgaW4ga2VybmVsIG1vZGUgZXhlY3V0aW5nIGEgc3lzdGVtIGNhbGwuCi0JICBUaGlzIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gcnVuIG1vcmUgcmVsaWFibHkgZXZlbiB3aGVuIHRoZSBzeXN0ZW0gaXMKLQkgIHVuZGVyIGxvYWQuCi0KLQkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSBidWlsZGluZyBhIGtlcm5lbCBmb3IgYSBkZXNrdG9wLCBlbWJlZGRlZAotCSAgb3IgcmVhbC10aW1lIHN5c3RlbS4gIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgorc291cmNlIGtlcm5lbC9LY29uZmlnLnByZWVtcHQKIAogY29uZmlnIEhaCiAJaW50CkBAIC05ODMsNiArMTA0MSwyMSBAQAogCWRlZmF1bHQgQVQ5MV9USU1FUl9IWiBpZiBBUkNIX0FUOTEKIAlkZWZhdWx0IDEwMAogCitjb25maWcgVEhVTUIyX0tFUk5FTAorCWJvb2wgIkNvbXBpbGUgdGhlIGtlcm5lbCBpbiBUaHVtYi0yIG1vZGUiCisJZGVwZW5kcyBvbiBDUFVfVjcgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IEFFQUJJCisJc2VsZWN0IEFSTV9BU01fVU5JRklFRAorCWhlbHAKKwkgIEJ5IGVuYWJsaW5nIHRoaXMgb3B0aW9uLCB0aGUga2VybmVsIHdpbGwgYmUgY29tcGlsZWQgaW4KKwkgIFRodW1iLTIgbW9kZS4gQSBjb21waWxlci9hc3NlbWJsZXIgdGhhdCB1bmRlcnN0YW5kIHRoZSB1bmlmaWVkCisJICBBUk0tVGh1bWIgc3ludGF4IGlzIG5lZWRlZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEFSTV9BU01fVU5JRklFRAorCWJvb2wKKwogY29uZmlnIEFFQUJJCiAJYm9vbCAiVXNlIHRoZSBBUk0gRUFCSSB0byBjb21waWxlIHRoZSBrZXJuZWwiCiAJaGVscApAQCAtMTA1NCw2ICsxMTI3LDExIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IG4uCiAKK2NvbmZpZyBISUdIUFRFCisJYm9vbCAiQWxsb2NhdGUgMm5kLWxldmVsIHBhZ2V0YWJsZXMgZnJvbSBoaWdobWVtIgorCWRlcGVuZHMgb24gSElHSE1FTQorCWRlcGVuZHMgb24gIU9VVEVSX0NBQ0hFCisKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogY29uZmlnIExFRFMKQEAgLTEyNDEsNyArMTMxOSw3IEBACiAKIG1lbnUgIkNQVSBQb3dlciBNYW5hZ2VtZW50IgogCi1pZiAoQVJDSF9TQTExMDAgfHwgQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfT01BUCB8fCBBUkNIX1BYQSB8fCBBUkNIX1MzQzY0WFgpCitpZiBBUkNIX0hBU19DUFVGUkVRCiAKIHNvdXJjZSAiZHJpdmVycy9jcHVmcmVxL0tjb25maWciCiAKQEAgLTEyNzYsNiArMTM1NCw1MiBAQAogCWJvb2wgIkNQVWZyZXEgc3VwcG9ydCBmb3IgU2Ftc3VuZyBTM0M2NFhYIENQVXMiCiAJZGVwZW5kcyBvbiBDUFVfRlJFUSAmJiBDUFVfUzNDNjQxMAogCitjb25maWcgQ1BVX0ZSRVFfUzNDCisJYm9vbAorCWhlbHAKKwkgIEludGVybmFsIGNvbmZpZ3VyYXRpb24gbm9kZSBmb3IgY29tbW9uIGNwdWZyZXEgb24gU2Ftc3VuZyBTb0MKKworY29uZmlnIENQVV9GUkVRX1MzQzI0WFgKKwlib29sICJDUFVmcmVxIGRyaXZlciBmb3IgU2Ftc3VuZyBTM0MyNFhYIHNlcmllcyBDUFVzIgorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwICYmIENQVV9GUkVRICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBDUFVfRlJFUV9TM0MKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgdGhlIENQVWZyZXEgZHJpdmVyIGZvciB0aGUgU2Ftc3VuZyBTM0MyNFhYIGZhbWlseQorCSAgb2YgQ1BVcy4KKworCSAgRm9yIGRldGFpbHMsIHRha2UgYSBsb29rIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vY3B1LWZyZXE+LgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4uCisKK2NvbmZpZyBDUFVfRlJFUV9TM0MyNFhYX1BMTAorCWJvb2wgIlN1cHBvcnQgQ1BVZnJlcSBjaGFuZ2luZyBvZiBQTEwgZnJlcXVlbmN5IgorCWRlcGVuZHMgb24gQ1BVX0ZSRVFfUzNDMjRYWCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBDb21waWxlIGluIHN1cHBvcnQgZm9yIGNoYW5naW5nIHRoZSBQTEwgZnJlcXVlbmN5IGZyb20gdGhlCisJICBTM0MyNFhYIHNlcmllcyBDUFVmcmVxIGRyaXZlci4gVGhlIFBMTCB0YWtlcyB0aW1lIHRvIHNldHRsZQorCSAgYWZ0ZXIgYSBmcmVxdWVuY3kgY2hhbmdlLCBzbyBieSBkZWZhdWx0IGl0IGlzIG5vdCBlbmFibGVkLgorCisJICBUaGlzIGFsc28gbWVhbnMgdGhhdCB0aGUgUExMIHRhYmxlcyBmb3IgdGhlIHNlbGVjdGVkIENQVShzKSB3aWxsCisJICBiZSBidWlsdCB3aGljaCBtYXkgaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbCBpbWFnZS4KKworY29uZmlnIENQVV9GUkVRX1MzQzI0WFhfREVCVUcKKwlib29sICJEZWJ1ZyBDUFVmcmVxIFNhbXN1bmcgZHJpdmVyIGNvcmUiCisJZGVwZW5kcyBvbiBDUFVfRlJFUV9TM0MyNFhYCisJaGVscAorCSAgRW5hYmxlIHMzY19mcmVxX2RiZyBmb3IgdGhlIFNhbXN1bmcgUzNDIENQVWZyZXEgY29yZQorCitjb25maWcgQ1BVX0ZSRVFfUzNDMjRYWF9JT0RFQlVHCisJYm9vbCAiRGVidWcgQ1BVZnJlcSBTYW1zdW5nIGRyaXZlciBJTyB0aW1pbmciCisJZGVwZW5kcyBvbiBDUFVfRlJFUV9TM0MyNFhYCisJaGVscAorCSAgRW5hYmxlIHMzY19mcmVxX2lvZGJnIGZvciB0aGUgU2Ftc3VuZyBTM0MgQ1BVZnJlcSBjb3JlCisKK2NvbmZpZyBDUFVfRlJFUV9TM0MyNFhYX0RFQlVHRlMKKwlib29sICJFeHBvcnQgZGVidWdmcyBmb3IgQ1BVRnJlcSIKKwlkZXBlbmRzIG9uIENQVV9GUkVRX1MzQzI0WFggJiYgREVCVUdfRlMKKwloZWxwCisJICBFeHBvcnQgc3RhdHVzIGluZm9ybWF0aW9uIHZpYSBkZWJ1Z2ZzLgorCiBlbmRpZgogCiBzb3VyY2UgImRyaXZlcnMvY3B1aWRsZS9LY29uZmlnIgpAQCAtMTM3NywxMDcgKzE1MDEsNyBAQAogCiBzb3VyY2UgIm5ldC9LY29uZmlnIgogCi1tZW51ICJEZXZpY2UgRHJpdmVycyIKLQotc291cmNlICJkcml2ZXJzL2Jhc2UvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL2Nvbm5lY3Rvci9LY29uZmlnIgotCi1pZiBBTElHTk1FTlRfVFJBUCB8fCAhQ1BVX0NQMTVfTU1VCi1zb3VyY2UgImRyaXZlcnMvbXRkL0tjb25maWciCi1lbmRpZgotCi1zb3VyY2UgImRyaXZlcnMvcGFycG9ydC9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvcG5wL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9ibG9jay9LY29uZmlnIgotCi0jIG1pc2MgYmVmb3JlIGlkZSAtIEJMS19ERVZfU0dJSU9DNCBkZXBlbmRzIG9uIFNHSV9JT0M0Ci0KLXNvdXJjZSAiZHJpdmVycy9taXNjL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9pZGUvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL3Njc2kvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL2F0YS9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvbWQvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL21lc3NhZ2UvZnVzaW9uL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9pZWVlMTM5NC9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvbWVzc2FnZS9pMm8vS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL25ldC9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvaXNkbi9LY29uZmlnIgotCi0jIGlucHV0IGJlZm9yZSBjaGFyIC0gY2hhci9qb3lzdGljayBkZXBlbmRzIG9uIGl0LiBBcyBkb2VzIFVTQi4KLQotc291cmNlICJkcml2ZXJzL2lucHV0L0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9jaGFyL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9pMmMvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL3NwaS9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvZ3Bpby9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvdzEvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL3Bvd2VyL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9od21vbi9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvdGhlcm1hbC9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL3NzYi9LY29uZmlnIgotCi0jc291cmNlICJkcml2ZXJzL2wzL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9tZmQvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL21lZGlhL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy92aWRlby9LY29uZmlnIgotCi1zb3VyY2UgInNvdW5kL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9oaWQvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL3VzYi9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvdXdiL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9tbWMvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL21lbXN0aWNrL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9hY2Nlc3NpYmlsaXR5L0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9sZWRzL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9ydGMvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL2RtYS9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvZGNhL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9hdXhkaXNwbGF5L0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL3Vpby9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9LY29uZmlnIgotCi1lbmRtZW51Citzb3VyY2UgImRyaXZlcnMvS2NvbmZpZyIKIAogc291cmNlICJmcy9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnLmRlYnVnIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwppbmRleCBhODllNDczLi4xYTZmNzBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvYXJtL0tjb25maWcuZGVidWcKQEAgLTgsNiArOCw3IEBACiAjIG4sIGJ1dCB0aGVuIFJNSyB3aWxsIGhhdmUgdG8ga2lsbCB5b3UgOykuCiBjb25maWcgRlJBTUVfUE9JTlRFUgogCWJvb2wKKwlkZXBlbmRzIG9uICFUSFVNQjJfS0VSTkVMCiAJZGVmYXVsdCB5IGlmICFBUk1fVU5XSU5ECiAJaGVscAogCSAgSWYgeW91IHNheSBOIGhlcmUsIHRoZSByZXN1bHRpbmcga2VybmVsIHdpbGwgYmUgc2xpZ2h0bHkgc21hbGxlciBhbmQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggYzg3N2Q2ZC4uNzM1MDU1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTkzLDkgKzkzLDE2IEBACiBDRkxBR1NfQUJJCSs9LWZ1bndpbmQtdGFibGVzCiBlbmRpZgogCitpZmVxICgkKENPTkZJR19USFVNQjJfS0VSTkVMKSx5KQorQUZMQUdTX0FVVE9JVAk6PSQoY2FsbCBhcy1vcHRpb24sLVdhJChjb21tYSktbWltcGxpY2l0LWl0PXRodW1iLC1XYSQoY29tbWEpLW1hdXRvLWl0KQorQUZMQUdTX05PV0FSTgk6PSQoY2FsbCBhcy1vcHRpb24sLVdhJChjb21tYSktbW5vLXdhcm4tZGVwcmVjYXRlZCwtV2EkKGNvbW1hKS1XKQorQ0ZMQUdTX1RIVU1CMgk6PS1tdGh1bWIgJChBRkxBR1NfQVVUT0lUKSAkKEFGTEFHU19OT1dBUk4pCitBRkxBR1NfVEhVTUIyCTo9JChDRkxBR1NfVEhVTUIyKSAtV2EkKGNvbW1hKS1tdGh1bWIKK2VuZGlmCisKICMgTmVlZCAtVWFybSBmb3IgZ2NjIDwgMy54Ci1LQlVJTERfQ0ZMQUdTCSs9JChDRkxBR1NfQUJJKSAkKGFyY2gteSkgJCh0dW5lLXkpICQoY2FsbCBjYy1vcHRpb24sLW1zaG9ydC1sb2FkLWJ5dGVzLCQoY2FsbCBjYy1vcHRpb24sLW1hbGlnbm1lbnQtdHJhcHMsKSkgLW1zb2Z0LWZsb2F0IC1VYXJtCi1LQlVJTERfQUZMQUdTCSs9JChDRkxBR1NfQUJJKSAkKGFyY2gteSkgJCh0dW5lLXkpIC1tc29mdC1mbG9hdAorS0JVSUxEX0NGTEFHUwkrPSQoQ0ZMQUdTX0FCSSkgJChDRkxBR1NfVEhVTUIyKSAkKGFyY2gteSkgJCh0dW5lLXkpICQoY2FsbCBjYy1vcHRpb24sLW1zaG9ydC1sb2FkLWJ5dGVzLCQoY2FsbCBjYy1vcHRpb24sLW1hbGlnbm1lbnQtdHJhcHMsKSkgLW1zb2Z0LWZsb2F0IC1VYXJtCitLQlVJTERfQUZMQUdTCSs9JChDRkxBR1NfQUJJKSAkKEFGTEFHU19USFVNQjIpICQoYXJjaC15KSAkKHR1bmUteSkgLWluY2x1ZGUgYXNtL3VuaWZpZWQuaCAtbXNvZnQtZmxvYXQKIAogQ0hFQ0tGTEFHUwkrPSAtRF9fYXJtX18KIApAQCAtMTEyLDYgKzExOSw3IEBACiAjIGJ5IENPTkZJR18qIG1hY3JvIG5hbWUuCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQUFFQzIwMDApCQk6PSBhYWVjMjAwMAogbWFjaGluZS0kKENPTkZJR19BUkNIX0FUOTEpCQk6PSBhdDkxCittYWNoaW5lLSQoQ09ORklHX0FSQ0hfQkNNUklORykJCTo9IGJjbXJpbmcKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9DTFBTNzExWCkJCTo9IGNscHM3MTF4CiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfREFWSU5DSSkJCTo9IGRhdmluY2kKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9FQlNBMTEwKQkJOj0gZWJzYTExMApAQCAtMTM1LDggKzE0MywxMCBAQAogbWFjaGluZS0kKENPTkZJR19BUkNIX01WNzhYWDApCQk6PSBtdjc4eHgwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVgxKQkJOj0gbXgxCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVgyKQkJOj0gbXgyCittYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVgyNSkJCTo9IG14MjUKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9NWDMpCQk6PSBteDMKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9ORVRYKQkJOj0gbmV0eAorbWFjaGluZS0kKENPTkZJR19BUkNIX05PTUFESUspCQk6PSBub21hZGlrCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTlM5WFhYKQkJOj0gbnM5eHh4CiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfT01BUDEpCQk6PSBvbWFwMQogbWFjaGluZS0kKENPTkZJR19BUkNIX09NQVAyKQkJOj0gb21hcDIKQEAgLTE1MCw2ICsxNjAsNyBAQAogbWFjaGluZS0kKENPTkZJR19BUkNIX1MzQzI0MTApCQk6PSBzM2MyNDEwIHMzYzI0MDAgczNjMjQxMiBzM2MyNDQwIHMzYzI0NDIgczNjMjQ0MwogbWFjaGluZS0kKENPTkZJR19BUkNIX1MzQzI0QTApCQk6PSBzM2MyNGEwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzNDNjRYWCkJCTo9IHMzYzY0MDAgczNjNjQxMAorbWFjaGluZS0kKENPTkZJR19BUkNIX1M1UEMxWFgpCQk6PSBzNXBjMTAwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfU0ExMTAwKQkJOj0gc2ExMTAwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfU0hBUkspCQk6PSBzaGFyawogbWFjaGluZS0kKENPTkZJR19BUkNIX1NUTVAzNzhYKQkJOj0gc3RtcDM3OHgKQEAgLTE1OCw2ICsxNjksNyBAQAogbWFjaGluZS0kKENPTkZJR19BUkNIX1ZFUlNBVElMRSkJOj0gdmVyc2F0aWxlCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVzkwWDkwMCkJCTo9IHc5MHg5MDAKIG1hY2hpbmUtJChDT05GSUdfRk9PVEJSSURHRSkJCTo9IGZvb3RicmlkZ2UKK21hY2hpbmUtJChDT05GSUdfQVJDSF9NWEM5MTIzMSkJCTo9IG14YzkxMjMxCiAKICMgUGxhdGZvcm0gZGlyZWN0b3J5IG5hbWUuICBUaGlzIGxpc3QgaXMgc29ydGVkIGFscGhhbnVtZXJpY2FsbHkKICMgYnkgQ09ORklHXyogbWFjcm8gbmFtZS4KQEAgLTE2OCw2ICsxODAsNyBAQAogcGxhdC0kKENPTkZJR19QTEFUX1BYQSkJCTo9IHB4YQogcGxhdC0kKENPTkZJR19QTEFUX1MzQzI0WFgpCTo9IHMzYzI0eHggczNjCiBwbGF0LSQoQ09ORklHX1BMQVRfUzNDNjRYWCkJOj0gczNjNjR4eCBzM2MKK3BsYXQtJChDT05GSUdfUExBVF9TNVBDMVhYKQk6PSBzNXBjMXh4IHMzYwogcGxhdC0kKENPTkZJR19BUkNIX1NUTVAzWFhYKQk6PSBzdG1wM3h4eAogCiBpZmVxICgkKENPTkZJR19BUkNIX0VCU0ExMTApLHkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9NYWtlZmlsZQppbmRleCBkYTIyNmFiYy4uNGE1OTBmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L01ha2VmaWxlCkBAIC02MSw3ICs2MSw3IEBACiAKIHF1aWV0X2NtZF91aW1hZ2UgPSBVSU1BR0UgICRACiAgICAgICBjbWRfdWltYWdlID0gJChDT05GSUdfU0hFTEwpICQoTUtJTUFHRSkgLUEgYXJtIC1PIGxpbnV4IC1UIGtlcm5lbCBcCi0JCSAgIC1DIG5vbmUgLWEgJChMT0FEQUREUikgLWUgJChMT0FEQUREUikgXAorCQkgICAtQyBub25lIC1hICQoTE9BREFERFIpIC1lICQoU1RBUlRBRERSKSBcCiAJCSAgIC1uICdMaW51eC0kKEtFUk5FTFJFTEVBU0UpJyAtZCAkPCAkQAogCiBpZmVxICgkKENPTkZJR19aQk9PVF9ST00pLHkpCkBAIC03MCw2ICs3MCwxMyBAQAogJChvYmopL3VJbWFnZTogTE9BREFERFI9JChaUkVMQUREUikKIGVuZGlmCiAKK2lmZXEgKCQoQ09ORklHX1RIVU1CMl9LRVJORUwpLHkpCisjIFNldCBiaXQgMCB0byAxIHNvIHRoYXQgIm1vdiBwYywgcngiIHN3aXRjaGVzIHRvIFRodW1iLTIgbW9kZQorJChvYmopL3VJbWFnZTogU1RBUlRBRERSPSQoc2hlbGwgZWNobyAkKExPQURBRERSKSB8IHNlZCAtZSAicy8uJCQvMS8iKQorZWxzZQorJChvYmopL3VJbWFnZTogU1RBUlRBRERSPSQoTE9BREFERFIpCitlbmRpZgorCiAkKG9iaikvdUltYWdlOgkkKG9iaikvekltYWdlIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlKQogCUBlY2hvICcgIEltYWdlICRAIGlzIHJlYWR5JwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2ExMTAwLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1zYTExMDAuUwppbmRleCA0YzhjMGU0Li42MTc5ZDk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1zYTExMDAuUworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1zYTExMDAuUwpAQCAtMSw3ICsxLDcgQEAKIC8qIAogICogbGludXgvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2ExMTAwLlMKICAqIAotICogQ29weXJpZ2h0IChDKSAxOTk5IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgogICogCiAgKiBTQTExMDAgc3BlY2lmaWMgdHdlYWtzLiAgVGhpcyBpcyBtZXJnZWQgaW50byBoZWFkLlMgYnkgdGhlIGxpbmtlci4KICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwppbmRleCA0NTE1NzI4Li5mYTZmYmY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKQEAgLTE0MCw3ICsxNDAsOCBAQAogCQl0c3QJcjIsICMzCQkJQCBub3QgdXNlcj8KIAkJYm5lCW5vdF9hbmdlbAogCQltb3YJcjAsICMweDE3CQlAIGFuZ2VsX1NXSXJlYXNvbl9FbnRlclNWQwotCQlzd2kJMHgxMjM0NTYJCUAgYW5nZWxfU1dJX0FSTQorIEFSTSgJCXN3aQkweDEyMzQ1NgkpCUAgYW5nZWxfU1dJX0FSTQorIFRIVU1CKAkJc3ZjCTB4YWIJCSkJQCBhbmdlbF9TV0lfVEhVTUIKIG5vdF9hbmdlbDoKIAkJbXJzCXIyLCBjcHNyCQlAIHR1cm4gb2ZmIGludGVycnVwdHMgdG8KIAkJb3JyCXIyLCByMiwgIzB4YzAJCUAgcHJldmVudCBhbmdlbCBmcm9tIHJ1bm5pbmcKQEAgLTE2MSw3ICsxNjIsOSBAQAogCiAJCS50ZXh0CiAJCWFkcglyMCwgTEMwCi0JCWxkbWlhCXIwLCB7cjEsIHIyLCByMywgcjQsIHI1LCByNiwgaXAsIHNwfQorIEFSTSgJCWxkbWlhCXIwLCB7cjEsIHIyLCByMywgcjQsIHI1LCByNiwgaXAsIHNwfQkpCisgVEhVTUIoCQlsZG1pYQlyMCwge3IxLCByMiwgcjMsIHI0LCByNSwgcjYsIGlwfQkpCisgVEhVTUIoCQlsZHIJc3AsIFtyMCwgIzI4XQkJCQkpCiAJCXN1YnMJcjAsIHIwLCByMQkJQCBjYWxjdWxhdGUgdGhlIGRlbHRhIG9mZnNldAogCiAJCQkJCQlAIGlmIGRlbHRhIGlzIHplcm8sIHdlIGFyZQpAQCAtMjYzLDIyICsyNjYsMjUgQEAKICAqIHI2ICAgICA9IHByb2Nlc3NvciBJRAogICogcjcgICAgID0gYXJjaGl0ZWN0dXJlIElECiAgKiByOCAgICAgPSBhdGFncyBwb2ludGVyCi0gKiByOS1yMTQgPSBjb3JydXB0ZWQKKyAqIHI5LXIxMixyMTQgPSBjb3JydXB0ZWQKICAqLwogCQlhZGQJcjEsIHI1LCByMAkJQCBlbmQgb2YgZGVjb21wcmVzc2VkIGtlcm5lbAogCQlhZHIJcjIsIHJlbG9jX3N0YXJ0CiAJCWxkcglyMywgTEMxCiAJCWFkZAlyMywgcjIsIHIzCi0xOgkJbGRtaWEJcjIhLCB7cjkgLSByMTR9CQlAIGNvcHkgcmVsb2NhdGlvbiBjb2RlCi0JCXN0bWlhCXIxISwge3I5IC0gcjE0fQotCQlsZG1pYQlyMiEsIHtyOSAtIHIxNH0KLQkJc3RtaWEJcjEhLCB7cjkgLSByMTR9CisxOgkJbGRtaWEJcjIhLCB7cjkgLSByMTIsIHIxNH0JQCBjb3B5IHJlbG9jYXRpb24gY29kZQorCQlzdG1pYQlyMSEsIHtyOSAtIHIxMiwgcjE0fQorCQlsZG1pYQlyMiEsIHtyOSAtIHIxMiwgcjE0fQorCQlzdG1pYQlyMSEsIHtyOSAtIHIxMiwgcjE0fQogCQljbXAJcjIsIHIzCiAJCWJsbwkxYgotCQlhZGQJc3AsIHIxLCAjMTI4CQlAIHJlbG9jYXRlIHRoZSBzdGFjaworCQltb3YJc3AsIHIxCisJCWFkZAlzcCwgc3AsICMxMjgJCUAgcmVsb2NhdGUgdGhlIHN0YWNrCiAKIAkJYmwJY2FjaGVfY2xlYW5fZmx1c2gKLQkJYWRkCXBjLCByNSwgcjAJCUAgY2FsbCByZWxvY2F0aW9uIGNvZGUKKyBBUk0oCQlhZGQJcGMsIHI1LCByMAkJKSBAIGNhbGwgcmVsb2NhdGlvbiBjb2RlCisgVEhVTUIoCQlhZGQJcjEyLCByNSwgcjAJCSkKKyBUSFVNQigJCW1vdglwYywgcjEyCQkJKSBAIGNhbGwgcmVsb2NhdGlvbiBjb2RlCiAKIC8qCiAgKiBXZSdyZSBub3QgaW4gZGFuZ2VyIG9mIG92ZXJ3cml0aW5nIG91cnNlbHZlcy4gIERvIHRoaXMgdGhlIHNpbXBsZSB3YXkuCkBAIC0yOTEsNiArMjk3LDcgQEAKIAkJYmwJZGVjb21wcmVzc19rZXJuZWwKIAkJYgljYWxsX2tlcm5lbAogCisJCS5hbGlnbgkyCiAJCS50eXBlCUxDMCwgI29iamVjdAogTEMwOgkJLndvcmQJTEMwCQkJQCByMQogCQkud29yZAlfX2Jzc19zdGFydAkJQCByMgpAQCAtNDMxLDYgKzQzOCw3IEBACiAKIF9fYXJtdjRfbW11X2NhY2hlX29uOgogCQltb3YJcjEyLCBscgorI2lmZGVmIENPTkZJR19NTVUKIAkJYmwJX19zZXR1cF9tbXUKIAkJbW92CXIwLCAjMAogCQltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAlAIGRyYWluIHdyaXRlIGJ1ZmZlcgpAQCAtNDQ0LDEwICs0NTIsMTIgQEAKIAkJYmwJX19jb21tb25fbW11X2NhY2hlX29uCiAJCW1vdglyMCwgIzAKIAkJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAlAIGZsdXNoIEksRCBUTEJzCisjZW5kaWYKIAkJbW92CXBjLCByMTIKIAogX19hcm12N19tbXVfY2FjaGVfb246CiAJCW1vdglyMTIsIGxyCisjaWZkZWYgQ09ORklHX01NVQogCQltcmMJcDE1LCAwLCByMTEsIGMwLCBjMSwgNAlAIHJlYWQgSURfTU1GUjAKIAkJdHN0CXIxMSwgIzB4ZgkJQCBWTVNBCiAJCWJsbmUJX19zZXR1cF9tbXUKQEAgLTQ1NSw5ICs0NjUsMTEgQEAKIAkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJQCBkcmFpbiB3cml0ZSBidWZmZXIKIAkJdHN0CXIxMSwgIzB4ZgkJQCBWTVNBCiAJCW1jcm5lCXAxNSwgMCwgcjAsIGM4LCBjNywgMAlAIGZsdXNoIEksRCBUTEJzCisjZW5kaWYKIAkJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHJlYWQgY29udHJvbCByZWcKIAkJb3JyCXIwLCByMCwgIzB4NTAwMAkJQCBJLWNhY2hlIGVuYWJsZSwgUlIgY2FjaGUgcmVwbGFjZW1lbnQKIAkJb3JyCXIwLCByMCwgIzB4MDAzYwkJQCB3cml0ZSBidWZmZXIKKyNpZmRlZiBDT05GSUdfTU1VCiAjaWZkZWYgQ09ORklHX0NQVV9FTkRJQU5fQkU4CiAJCW9ycglyMCwgcjAsICMxIDw8IDI1CUAgYmlnLWVuZGlhbiBwYWdlIHRhYmxlcwogI2VuZGlmCkBAIC00NjUsNiArNDc3LDcgQEAKIAkJbW92bmUJcjEsICMtMQogCQltY3JuZQlwMTUsIDAsIHIzLCBjMiwgYzAsIDAJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgogCQltY3JuZQlwMTUsIDAsIHIxLCBjMywgYzAsIDAJQCBsb2FkIGRvbWFpbiBhY2Nlc3MgY29udHJvbAorI2VuZGlmCiAJCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJQCBsb2FkIGNvbnRyb2wgcmVnaXN0ZXIKIAkJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIGFuZCByZWFkIGl0IGJhY2sKIAkJbW92CXIwLCAjMApAQCAtNDk4LDYgKzUxMSw3IEBACiAJCW1vdglwYywgcjEyCiAKIF9fY29tbW9uX21tdV9jYWNoZV9vbjoKKyNpZm5kZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKICNpZm5kZWYgREVCVUcKIAkJb3JyCXIwLCByMCwgIzB4MDAwZAkJQCBXcml0ZSBidWZmZXIsIG1tdQogI2VuZGlmCkBAIC01MDksNiArNTIzLDcgQEAKIDE6CQltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCUAgbG9hZCBjb250cm9sIHJlZ2lzdGVyCiAJCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJQCBhbmQgcmVhZCBpdCBiYWNrIHRvCiAJCXN1YglwYywgbHIsIHIwLCBsc3IgIzMyCUAgcHJvcGVybHkgZmx1c2ggcGlwZWxpbmUKKyNlbmRpZgogCiAvKgogICogQWxsIGNvZGUgZm9sbG93aW5nIHRoaXMgbGluZSBpcyByZWxvY2F0YWJsZS4gIEl0IGlzIHJlbG9jYXRlZCBieQpAQCAtNTIyLDcgKzUzNyw3IEBACiAgKiByNiAgICAgPSBwcm9jZXNzb3IgSUQKICAqIHI3ICAgICA9IGFyY2hpdGVjdHVyZSBJRAogICogcjggICAgID0gYXRhZ3MgcG9pbnRlcgotICogcjktcjE0ID0gY29ycnVwdGVkCisgKiByOS1yMTIscjE0ID0gY29ycnVwdGVkCiAgKi8KIAkJLmFsaWduCTUKIHJlbG9jX3N0YXJ0OglhZGQJcjksIHI1LCByMApAQCAtNTMxLDEzICs1NDYsMTQgQEAKIAkJbW92CXIxLCByNAogMToKIAkJLnJlcHQJNAotCQlsZG1pYQlyNSEsIHtyMCwgcjIsIHIzLCByMTAgLSByMTR9CUAgcmVsb2NhdGUga2VybmVsCi0JCXN0bWlhCXIxISwge3IwLCByMiwgcjMsIHIxMCAtIHIxNH0KKwkJbGRtaWEJcjUhLCB7cjAsIHIyLCByMywgcjEwIC0gcjEyLCByMTR9CUAgcmVsb2NhdGUga2VybmVsCisJCXN0bWlhCXIxISwge3IwLCByMiwgcjMsIHIxMCAtIHIxMiwgcjE0fQogCQkuZW5kcgogCiAJCWNtcAlyNSwgcjkKIAkJYmxvCTFiCi0JCWFkZAlzcCwgcjEsICMxMjgJCUAgcmVsb2NhdGUgdGhlIHN0YWNrCisJCW1vdglzcCwgcjEKKwkJYWRkCXNwLCBzcCwgIzEyOAkJQCByZWxvY2F0ZSB0aGUgc3RhY2sKIAkJZGVidWdfcmVsb2NfZW5kCiAKIGNhbGxfa2VybmVsOglibAljYWNoZV9jbGVhbl9mbHVzaApAQCAtNTcxLDcgKzU4Nyw5IEBACiAJCWxkcglyMiwgW3IxMiwgIzRdCQlAIGdldCBtYXNrCiAJCWVvcglyMSwgcjEsIHI2CQlAIChyZWFsIF4gbWF0Y2gpCiAJCXRzdAlyMSwgcjIJCQlAICAgICAgICYgbWFzawotCQlhZGRlcQlwYywgcjEyLCByMwkJQCBjYWxsIGNhY2hlIGZ1bmN0aW9uCisgQVJNKAkJYWRkZXEJcGMsIHIxMiwgcjMJCSkgQCBjYWxsIGNhY2hlIGZ1bmN0aW9uCisgVEhVTUIoCQlhZGRlcQlyMTIsIHIzCQkJKQorIFRIVU1CKAkJbW92ZXEJcGMsIHIxMgkJCSkgQCBjYWxsIGNhY2hlIGZ1bmN0aW9uCiAJCWFkZAlyMTIsIHIxMiwgIzQqNQogCQliCTFiCiAKQEAgLTU4OSwxMyArNjA3LDE1IEBACiAgKiBtZXRob2RzLiAgV3JpdGViYWNrIGNhY2hlcyBfbXVzdF8gaGF2ZSB0aGUgZmx1c2ggbWV0aG9kCiAgKiBkZWZpbmVkLgogICovCisJCS5hbGlnbgkyCiAJCS50eXBlCXByb2NfdHlwZXMsI29iamVjdAogcHJvY190eXBlczoKIAkJLndvcmQJMHg0MTU2MDYwMAkJQCBBUk02LzYxMAogCQkud29yZAkweGZmZmZmZmUwCi0JCWIJX19hcm02X21tdV9jYWNoZV9vZmYJQCB3b3JrcywgYnV0IHNsb3cKLQkJYglfX2FybTZfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtNl9tbXVfY2FjaGVfb2ZmCUAgd29ya3MsIGJ1dCBzbG93CisJCVcoYikJX19hcm02X21tdV9jYWNoZV9vZmYKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIEAJCWIJX19hcm02X21tdV9jYWNoZV9vbgkJQCB1bnRlc3RlZAogQAkJYglfX2FybTZfbW11X2NhY2hlX29mZgogQAkJYglfX2FybXYzX21tdV9jYWNoZV9mbHVzaApAQCAtNjAzLDc2ICs2MjMsODQgQEAKIAkJLndvcmQJMHgwMDAwMDAwMAkJQCBvbGQgQVJNIElECiAJCS53b3JkCTB4MDAwMGYwMDAKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIAogCQkud29yZAkweDQxMDA3MDAwCQlAIEFSTTcvNzEwCiAJCS53b3JkCTB4ZmZmOGZlMDAKLQkJYglfX2FybTdfbW11X2NhY2hlX29mZgotCQliCV9fYXJtN19tbXVfY2FjaGVfb2ZmCisJCVcoYikJX19hcm03X21tdV9jYWNoZV9vZmYKKwkJVyhiKQlfX2FybTdfbW11X2NhY2hlX29mZgogCQltb3YJcGMsIGxyCisgVEhVTUIoCQlub3AJCQkJKQogCiAJCS53b3JkCTB4NDE4MDcyMDAJCUAgQVJNNzIwVCAod3JpdGV0aHJvdWdoKQogCQkud29yZAkweGZmZmZmZjAwCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb24KLQkJYglfX2FybXY0X21tdV9jYWNoZV9vZmYKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgogCQltb3YJcGMsIGxyCisgVEhVTUIoCQlub3AJCQkJKQogCiAJCS53b3JkCTB4NDEwMDc0MDAJCUAgQVJNNzR4CiAJCS53b3JkCTB4ZmYwMGZmMDAKLQkJYglfX2FybXYzX21wdV9jYWNoZV9vbgotCQliCV9fYXJtdjNfbXB1X2NhY2hlX29mZgotCQliCV9fYXJtdjNfbXB1X2NhY2hlX2ZsdXNoCisJCVcoYikJX19hcm12M19tcHVfY2FjaGVfb24KKwkJVyhiKQlfX2FybXYzX21wdV9jYWNoZV9vZmYKKwkJVyhiKQlfX2FybXYzX21wdV9jYWNoZV9mbHVzaAogCQkKIAkJLndvcmQJMHg0MTAwOTQwMAkJQCBBUk05NHgKIAkJLndvcmQJMHhmZjAwZmYwMAotCQliCV9fYXJtdjRfbXB1X2NhY2hlX29uCi0JCWIJX19hcm12NF9tcHVfY2FjaGVfb2ZmCi0JCWIJX19hcm12NF9tcHVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21wdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbXB1X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjRfbXB1X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHgwMDAwNzAwMAkJQCBBUk03IElEcwogCQkud29yZAkweDAwMDBmMDAwCiAJCW1vdglwYywgbHIKKyBUSFVNQigJCW5vcAkJCQkpCiAJCW1vdglwYywgbHIKKyBUSFVNQigJCW5vcAkJCQkpCiAJCW1vdglwYywgbHIKKyBUSFVNQigJCW5vcAkJCQkpCiAKIAkJQCBFdmVyeXRoaW5nIGZyb20gaGVyZSBvbiB3aWxsIGJlIHRoZSBuZXcgSUQgc3lzdGVtLgogCiAJCS53b3JkCTB4NDQwMWExMDAJCUAgc2ExMTAgLyBzYTExMDAKIAkJLndvcmQJMHhmZmZmZmZlMAotCQliCV9fYXJtdjRfbW11X2NhY2hlX29uCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHg2OTAxYjExMAkJQCBzYTExMTAKIAkJLndvcmQJMHhmZmZmZmZmMAotCQliCV9fYXJtdjRfbW11X2NhY2hlX29uCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHg1NjA1NjkzMAogCQkud29yZAkweGZmMGZmZmYwCQlAIFBYQTkzNQotCQliCV9fYXJtdjRfbW11X2NhY2hlX29uCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHg1NjE1ODAwMAkJQCBQWEExNjgKIAkJLndvcmQJMHhmZmZmZjAwMAotCQliIF9fYXJtdjRfbW11X2NhY2hlX29uCi0JCWIgX19hcm12NF9tbXVfY2FjaGVfb2ZmCi0JCWIgX19hcm12NXRlal9tbXVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjV0ZWpfbW11X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHg1NjA1NjkzMAogCQkud29yZAkweGZmMGZmZmYwCQlAIFBYQTkzNQotCQliCV9fYXJtdjRfbW11X2NhY2hlX29uCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHg1NjA1MDAwMAkJQCBGZXJvY2VvbgogCQkud29yZAkweGZmMGYwMDAwCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb24KLQkJYglfX2FybXY0X21tdV9jYWNoZV9vZmYKLQkJYglfX2FybXY1dGVqX21tdV9jYWNoZV9mbHVzaAorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29uCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfb2ZmCisJCVcoYikJX19hcm12NXRlal9tbXVfY2FjaGVfZmx1c2gKIAogI2lmZGVmIENPTkZJR19DUFVfRkVST0NFT05fT0xEX0lECiAJCS8qIHRoaXMgY29uZmxpY3RzIHdpdGggdGhlIHN0YW5kYXJkIEFSTXY1VEUgZW50cnkgKi8KQEAgLTY4NSw0NyArNzEzLDUwIEBACiAKIAkJLndvcmQJMHg2NjAxNTI2MQkJQCBGQTUyNgogCQkud29yZAkweGZmMDFmZmYxCi0JCWIJX19mYTUyNl9jYWNoZV9vbgotCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgotCQliCV9fZmE1MjZfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2ZhNTI2X2NhY2hlX29uCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfb2ZmCisJCVcoYikJX19mYTUyNl9jYWNoZV9mbHVzaAogCiAJCUAgVGhlc2UgbWF0Y2ggb24gdGhlIGFyY2hpdGVjdHVyZSBJRAogCiAJCS53b3JkCTB4MDAwMjAwMDAJCUAgQVJNdjRUCiAJCS53b3JkCTB4MDAwZjAwMDAKLQkJYglfX2FybXY0X21tdV9jYWNoZV9vbgotCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgotCQliCV9fYXJtdjRfbW11X2NhY2hlX2ZsdXNoCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfb24KKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vZmYKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9mbHVzaAogCiAJCS53b3JkCTB4MDAwNTAwMDAJCUAgQVJNdjVURQogCQkud29yZAkweDAwMGYwMDAwCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb24KLQkJYglfX2FybXY0X21tdV9jYWNoZV9vZmYKLQkJYglfX2FybXY0X21tdV9jYWNoZV9mbHVzaAorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29uCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfb2ZmCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKIAogCQkud29yZAkweDAwMDYwMDAwCQlAIEFSTXY1VEVKCiAJCS53b3JkCTB4MDAwZjAwMDAKLQkJYglfX2FybXY0X21tdV9jYWNoZV9vbgotCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgotCQliCV9fYXJtdjV0ZWpfbW11X2NhY2hlX2ZsdXNoCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfb24KKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vZmYKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9mbHVzaAogCiAJCS53b3JkCTB4MDAwN2IwMDAJCUAgQVJNdjYKIAkJLndvcmQJMHgwMDBmZjAwMAotCQliCV9fYXJtdjRfbW11X2NhY2hlX29uCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCi0JCWIJX19hcm12Nl9tbXVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjZfbW11X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHgwMDBmMDAwMAkJQCBuZXcgQ1BVIElkCiAJCS53b3JkCTB4MDAwZjAwMDAKLQkJYglfX2FybXY3X21tdV9jYWNoZV9vbgotCQliCV9fYXJtdjdfbW11X2NhY2hlX29mZgotCQliCV9fYXJtdjdfbW11X2NhY2hlX2ZsdXNoCisJCVcoYikJX19hcm12N19tbXVfY2FjaGVfb24KKwkJVyhiKQlfX2FybXY3X21tdV9jYWNoZV9vZmYKKwkJVyhiKQlfX2FybXY3X21tdV9jYWNoZV9mbHVzaAogCiAJCS53b3JkCTAJCQlAIHVucmVjb2duaXNlZCB0eXBlCiAJCS53b3JkCTAKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIAogCQkuc2l6ZQlwcm9jX3R5cGVzLCAuIC0gcHJvY190eXBlcwogCkBAIC03NjAsMjIgKzc5MSwzMCBAQAogCQltb3YJcGMsIGxyCiAKIF9fYXJtdjRfbW11X2NhY2hlX29mZjoKKyNpZmRlZiBDT05GSUdfTU1VCiAJCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAKIAkJYmljCXIwLCByMCwgIzB4MDAwZAogCQltY3IJcDE1LCAwLCByMCwgYzEsIGMwCUAgdHVybiBNTVUgYW5kIGNhY2hlIG9mZgogCQltb3YJcjAsICMwCiAJCW1jcglwMTUsIDAsIHIwLCBjNywgYzcJQCBpbnZhbGlkYXRlIHdob2xlIGNhY2hlIHY0CiAJCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcJQCBpbnZhbGlkYXRlIHdob2xlIFRMQiB2NAorI2VuZGlmCiAJCW1vdglwYywgbHIKIAogX19hcm12N19tbXVfY2FjaGVfb2ZmOgogCQltcmMJcDE1LCAwLCByMCwgYzEsIGMwCisjaWZkZWYgQ09ORklHX01NVQogCQliaWMJcjAsIHIwLCAjMHgwMDBkCisjZWxzZQorCQliaWMJcjAsIHIwLCAjMHgwMDBjCisjZW5kaWYKIAkJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMAlAIHR1cm4gTU1VIGFuZCBjYWNoZSBvZmYKIAkJbW92CXIxMiwgbHIKIAkJYmwJX19hcm12N19tbXVfY2FjaGVfZmx1c2gKIAkJbW92CXIwLCAjMAorI2lmZGVmIENPTkZJR19NTVUKIAkJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAlAIGludmFsaWRhdGUgd2hvbGUgVExCCisjZW5kaWYKIAkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNglAIGludmFsaWRhdGUgQlRDCiAJCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CUAgRFNCCiAJCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDQJQCBJU0IKQEAgLTg1Miw3ICs4OTEsNyBAQAogCQliCWlmbHVzaAogaGllcmFyY2hpY2FsOgogCQltY3IJcDE1LCAwLCByMTAsIGM3LCBjMTAsIDUJQCBETUIKLQkJc3RtZmQJc3AhLCB7cjAtcjUsIHI3LCByOSwgcjExfQorCQlzdG1mZAlzcCEsIHtyMC1yNywgcjktcjExfQogCQltcmMJcDE1LCAxLCByMCwgYzAsIGMwLCAxCUAgcmVhZCBjbGlkcgogCQlhbmRzCXIzLCByMCwgIzB4NzAwMDAwMAlAIGV4dHJhY3QgbG9jIGZyb20gY2xpZHIKIAkJbW92CXIzLCByMywgbHNyICMyMwkJQCBsZWZ0IGFsaWduIGxvYyBiaXQgZmllbGQKQEAgLTg3Nyw4ICs5MTYsMTIgQEAKIGxvb3AyOgogCQltb3YJcjksIHI0CQkJQCBjcmVhdGUgd29ya2luZyBjb3B5IG9mIG1heCB3YXkgc2l6ZQogbG9vcDM6Ci0JCW9ycglyMTEsIHIxMCwgcjksIGxzbCByNQlAIGZhY3RvciB3YXkgYW5kIGNhY2hlIG51bWJlciBpbnRvIHIxMQotCQlvcnIJcjExLCByMTEsIHI3LCBsc2wgcjIJQCBmYWN0b3IgaW5kZXggbnVtYmVyIGludG8gcjExCisgQVJNKAkJb3JyCXIxMSwgcjEwLCByOSwgbHNsIHI1CSkgQCBmYWN0b3Igd2F5IGFuZCBjYWNoZSBudW1iZXIgaW50byByMTEKKyBBUk0oCQlvcnIJcjExLCByMTEsIHI3LCBsc2wgcjIJKSBAIGZhY3RvciBpbmRleCBudW1iZXIgaW50byByMTEKKyBUSFVNQigJCWxzbAlyNiwgcjksIHI1CQkpCisgVEhVTUIoCQlvcnIJcjExLCByMTAsIHI2CQkpIEAgZmFjdG9yIHdheSBhbmQgY2FjaGUgbnVtYmVyIGludG8gcjExCisgVEhVTUIoCQlsc2wJcjYsIHI3LCByMgkJKQorIFRIVU1CKAkJb3JyCXIxMSwgcjExLCByNgkJKSBAIGZhY3RvciBpbmRleCBudW1iZXIgaW50byByMTEKIAkJbWNyCXAxNSwgMCwgcjExLCBjNywgYzE0LCAyCUAgY2xlYW4gJiBpbnZhbGlkYXRlIGJ5IHNldC93YXkKIAkJc3VicwlyOSwgcjksICMxCQlAIGRlY3JlbWVudCB0aGUgd2F5CiAJCWJnZQlsb29wMwpAQCAtODg5LDcgKzkzMiw3IEBACiAJCWNtcAlyMywgcjEwCiAJCWJndAlsb29wMQogZmluaXNoZWQ6Ci0JCWxkbWZkCXNwISwge3IwLXI1LCByNywgcjksIHIxMX0KKwkJbGRtZmQJc3AhLCB7cjAtcjcsIHI5LXIxMX0KIAkJbW92CXIxMCwgIzAJCQlAIHN3aXRoIGJhY2sgdG8gY2FjaGUgbGV2ZWwgMAogCQltY3IJcDE1LCAyLCByMTAsIGMwLCBjMCwgMAlAIHNlbGVjdCBjdXJyZW50IGNhY2hlIGxldmVsIGluIGNzc3IKIGlmbHVzaDoKQEAgLTkyMyw5ICs5NjYsMTMgQEAKIAkJbW92CXIxMSwgIzgKIAkJbW92CXIxMSwgcjExLCBsc2wgcjMJQCBjYWNoZSBsaW5lIHNpemUgaW4gYnl0ZXMKIG5vX2NhY2hlX2lkOgotCQliaWMJcjEsIHBjLCAjNjMJCUAgYWxpZ24gdG8gbG9uZ2VzdCBjYWNoZSBsaW5lCisJCW1vdglyMSwgcGMKKwkJYmljCXIxLCByMSwgIzYzCQlAIGFsaWduIHRvIGxvbmdlc3QgY2FjaGUgbGluZQogCQlhZGQJcjIsIHIxLCByMgotMToJCWxkcglyMywgW3IxXSwgcjExCQlAIHMvdyBmbHVzaCBEIGNhY2hlCisxOgorIEFSTSgJCWxkcglyMywgW3IxXSwgcjExCQkpIEAgcy93IGZsdXNoIEQgY2FjaGUKKyBUSFVNQigJCWxkciAgICAgcjMsIFtyMV0JCSkgQCBzL3cgZmx1c2ggRCBjYWNoZQorIFRIVU1CKAkJYWRkICAgICByMSwgcjEsIHIxMQkJKQogCQl0ZXEJcjEsIHIyCiAJCWJuZQkxYgogCkBAIC05NDUsNiArOTkyLDcgQEAKICAqIG1lbW9yeSwgd2hpY2ggYWdhaW4gbXVzdCBiZSByZWxvY2F0YWJsZS4KICAqLwogI2lmZGVmIERFQlVHCisJCS5hbGlnbgkyCiAJCS50eXBlCXBoZXhidWYsI29iamVjdAogcGhleGJ1ZjoJLnNwYWNlCTEyCiAJCS5zaXplCXBoZXhidWYsIC4gLSBwaGV4YnVmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vdmljLmMgYi9hcmNoL2FybS9jb21tb24vdmljLmMKaW5kZXggNmVkODk4My4uOTIwY2VkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi92aWMuYwpAQCAtMjIsMTAgKzIyLDIwIEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS92aWMuaD4KIAorc3RhdGljIHZvaWQgdmljX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCWlycSAmPSAzMTsKKwl3cml0ZWwoMSA8PCBpcnEsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRV9DTEVBUik7CisJLyogbW9yZW92ZXIsIGNsZWFyIHRoZSBzb2Z0LXRyaWdnZXJlZCwgaW4gY2FzZSBpdCB3YXMgdGhlIHJlYXNvbiAqLworCXdyaXRlbCgxIDw8IGlycSwgYmFzZSArIFZJQ19JTlRfU09GVF9DTEVBUik7Cit9CisKIHN0YXRpYyB2b2lkIHZpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXZvaWQgX19pb21lbSAqYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CkBAIC0yNTMsMTIgKzI2MywxNiBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHZpY19jaGlwID0gewogCS5uYW1lCT0gIlZJQyIsCi0JLmFjawk9IHZpY19tYXNrX2lycSwKKwkuYWNrCT0gdmljX2Fja19pcnEsCiAJLm1hc2sJPSB2aWNfbWFza19pcnEsCiAJLnVubWFzawk9IHZpY191bm1hc2tfaXJxLAogCS5zZXRfd2FrZSA9IHZpY19zZXRfd2FrZSwKIH07CiAKKy8qIFRoZSBQTDE5MCBjZWxsIGZyb20gQVJNIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IFNULCBzbyBoYW5kbGUgYm90aCBoZXJlICovCitzdGF0aWMgdm9pZCB2aWtfaW5pdF9zdCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnFfc3RhcnQsCisJCQkgdTMyIHZpY19zb3VyY2VzKTsKKwogLyoqCiAgKiB2aWNfaW5pdCAtIGluaXRpYWxpc2UgYSB2ZWN0b3JlZCBpbnRlcnJ1cHQgY29udHJvbGxlcgogICogQGJhc2U6IGlvbWVtIGJhc2UgYWRkcmVzcwpAQCAtMjcwLDYgKzI4NCwyOCBAQAogCQkgICAgIHUzMiB2aWNfc291cmNlcywgdTMyIHJlc3VtZV9zb3VyY2VzKQogewogCXVuc2lnbmVkIGludCBpOworCXUzMiBjZWxsaWQgPSAwOworCWVudW0gYW1iYV92ZW5kb3IgdmVuZG9yOworCisJLyogSWRlbnRpZnkgd2hpY2ggVklDIGNlbGwgdGhpcyBvbmUgaXMsIGJ5IHJlYWRpbmcgdGhlIElEICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQl1MzIgYWRkciA9ICgodTMyKWJhc2UgJiBQQUdFX01BU0spICsgMHhmZTAgKyAoaSAqIDQpOworCQljZWxsaWQgfD0gKHJlYWRsKGFkZHIpICYgMHhmZikgPDwgKDggKiBpKTsKKwl9CisJdmVuZG9yID0gKGNlbGxpZCA+PiAxMikgJiAweGZmOworCXByaW50ayhLRVJOX0lORk8gIlZJQyBAJXA6IGlkIDB4JTA4eCwgdmVuZG9yIDB4JTAyeFxuIiwKKwkgICAgICAgYmFzZSwgY2VsbGlkLCB2ZW5kb3IpOworCisJc3dpdGNoKHZlbmRvcikgeworCWNhc2UgQU1CQV9WRU5ET1JfU1Q6CisJCXZpa19pbml0X3N0KGJhc2UsIGlycV9zdGFydCwgdmljX3NvdXJjZXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVklDOiB1bmtub3duIHZlbmRvciwgY29udGludWluZyBhbnl3YXlzXG4iKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBBTUJBX1ZFTkRPUl9BUk06CisJCWJyZWFrOworCX0KIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgaW5pdGlhbGx5LiAqLwogCkBAIC0zMDYsMyArMzQyLDYwIEBACiAKIAl2aWNfcG1fcmVnaXN0ZXIoYmFzZSwgaXJxX3N0YXJ0LCByZXN1bWVfc291cmNlcyk7CiB9CisKKy8qCisgKiBUaGUgUEwxOTAgY2VsbCBmcm9tIEFSTSBoYXMgYmVlbiBtb2RpZmllZCBieSBTVCB0byBoYW5kbGUgNjQgaW50ZXJydXB0cy4KKyAqIFRoZSBvcmlnaW5hbCBjZWxsIGhhcyAzMiBpbnRlcnJ1cHRzLCB3aGlsZSB0aGUgbW9kaWZpZWQgb25lIGhhcyA2NCwKKyAqIHJlcGxvY2F0aW5nIHR3byBibG9ja3MgMHgwMC4uMHgxZiBpbiAweDIwLi4weDNmLiBJbiB0aGF0IGNhc2UKKyAqIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBjYWxsZWQgdHdpY2UsIHdpdGggYmFzZSBzZXQgdG8gb2Zmc2V0IDAwMAorICogIGFuZCAwMjAgd2l0aGluIHRoZSBwYWdlLiBXZSBjYWxsIHRoaXMgInNlY29uZCBibG9jayIuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCB2aWtfaW5pdF9zdCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnFfc3RhcnQsCisJCQkJdTMyIHZpY19zb3VyY2VzKQoreworCXVuc2lnbmVkIGludCBpOworCWludCB2aWNfMm5kX2Jsb2NrID0gKCh1bnNpZ25lZCBsb25nKWJhc2UgJiB+UEFHRV9NQVNLKSAhPSAwOworCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBpbml0aWFsbHkuICovCisKKwl3cml0ZWwoMCwgYmFzZSArIFZJQ19JTlRfU0VMRUNUKTsKKwl3cml0ZWwoMCwgYmFzZSArIFZJQ19JTlRfRU5BQkxFKTsKKwl3cml0ZWwofjAsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRV9DTEVBUik7CisJd3JpdGVsKDAsIGJhc2UgKyBWSUNfSVJRX1NUQVRVUyk7CisJd3JpdGVsKDAsIGJhc2UgKyBWSUNfSVRDUik7CisJd3JpdGVsKH4wLCBiYXNlICsgVklDX0lOVF9TT0ZUX0NMRUFSKTsKKworCS8qCisJICogTWFrZSBzdXJlIHdlIGNsZWFyIGFsbCBleGlzdGluZyBpbnRlcnJ1cHRzLiBUaGUgdmVjdG9yIHJlZ2lzdGVycworCSAqIGluIHRoaXMgY2VsbCBhcmUgYWZ0ZXIgdGhlIHNlY29uZCBibG9jayBvZiBnZW5lcmFsIHJlZ2lzdGVycywKKwkgKiBzbyB3ZSBjYW4gYWRkcmVzcyB0aGVtIHVzaW5nIHN0YW5kYXJkIG9mZnNldHMsIGJ1dCBvbmx5IGZyb20KKwkgKiB0aGUgc2Vjb25kIGJhc2UgYWRkcmVzcywgd2hpY2ggaXMgMHgyMCBpbiB0aGUgcGFnZQorCSAqLworCWlmICh2aWNfMm5kX2Jsb2NrKSB7CisJCXdyaXRlbCgwLCBiYXNlICsgVklDX1BMMTkwX1ZFQ1RfQUREUik7CisJCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwkJCXZhbHVlID0gcmVhZGwoYmFzZSArIFZJQ19QTDE5MF9WRUNUX0FERFIpOworCQkJd3JpdGVsKHZhbHVlLCBiYXNlICsgVklDX1BMMTkwX1ZFQ1RfQUREUik7CisJCX0KKwkJLyogU1QgaGFzIDE2IHZlY3RvcnMgYXMgd2VsbCwgYnV0IHdlIGRvbid0IGVuYWJsZSB0aGVtIGJ5IG5vdyAqLworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkJdm9pZCBfX2lvbWVtICpyZWcgPSBiYXNlICsgVklDX1ZFQ1RfQ05UTDAgKyAoaSAqIDQpOworCQkJd3JpdGVsKDAsIHJlZyk7CisJCX0KKworCQl3cml0ZWwoMzIsIGJhc2UgKyBWSUNfUEwxOTBfREVGX1ZFQ1RfQUREUik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJaWYgKHZpY19zb3VyY2VzICYgKDEgPDwgaSkpIHsKKwkJCXVuc2lnbmVkIGludCBpcnEgPSBpcnFfc3RhcnQgKyBpOworCisJCQlzZXRfaXJxX2NoaXAoaXJxLCAmdmljX2NoaXApOworCQkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCBiYXNlKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYmNtcmluZ19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2JjbXJpbmdfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYzBiYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2JjbXJpbmdfZGVmY29uZmlnCkBAIC0wLDAgKzEsNzI1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMzCisjIEZyaSBKdWwgMTcgMTI6MDc6MjggMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKKyMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJR05BTEZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSRkQgaXMgbm90IHNldAorIyBDT05GSUdfRVZFTlRGRCBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0JDTVJJTkc9eQorIyBDT05GSUdfQVJDSF9GUEdBMTExMDcgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQkNNMTExMDc9eQorCisjCisjIEJDTVJJTkcgT3B0aW9ucworIworQ09ORklHX0JDTV9aUkVMQUREUj0weDgwMDAKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1Y2PXkKK0NPTkZJR19DUFVfMzJ2Nks9eQorQ09ORklHX0NQVV8zMnY2PXkKK0NPTkZJR19DUFVfQUJSVF9FVjY9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WNj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQorQ09ORklHX0NQVV9DT1BZX1Y2PXkKK0NPTkZJR19DUFVfVExCX1Y2PXkKK0NPTkZJR19DUFVfSEFTX0FTSUQ9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwIGlzIG5vdCBzZXQKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX0FSTV9BTUJBPXkKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CisjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKK0NPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDBlMDAwMDAwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDBlYTAwMDAwCitDT05GSUdfWkJPT1RfUk9NPXkKK0NPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAorIyBDT05GSUdfVU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CisjIENPTkZJR19NVERfQ0ZJX0kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKK0NPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorQ09ORklHX01URF9OQU5EX0JDTV9VTUk9eQorQ09ORklHX01URF9OQU5EX0JDTV9VTUlfSFdDUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKKyMgQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTE9eQorQ09ORklHX1NFUklBTF9BTUJBX1BMMDExX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD02NAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GSUxFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRlNOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKK0NPTkZJR19KRkZTMl9GU19YQVRUUj15CitDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfSEVBREVSU19DSEVDSz15CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JVSUxEX0RPQ1NSQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19BUk1fVU5XSU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jcHU5MjYwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OTI2MF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxZTdmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OTI2MF9kZWZjb25maWcKQEAgLTAsMCArMSwxMzM4IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMzCisjIFR1ZSBKdWwgMTQgMTQ6NTc6NTUgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKworIworIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCisjCisjIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjA9eQorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05RzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MUNBUDkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxX1BNQ19VTklUPXkKKworIworIyBBVDkxU0FNOTI2MCBWYXJpYW50cworIworIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MF9TQU05WEUgaXMgbm90IHNldAorCisjCisjIEFUOTFTQU05MjYwIC8gQVQ5MVNBTTlYRSBCb2FyZCBUeXBlCisjCisjIENPTkZJR19NQUNIX0FUOTFTQU05MjYwRUsgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DQU02MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NBTTlfTDkyNjAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9BRkVCOTI2MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1VTQl9BOTI2MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1FJTF9BOTI2MCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9DUFU5MjYwPXkKKworIworIyBBVDkxIEJvYXJkIE9wdGlvbnMKKyMKKworIworIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucworIworIyBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxX1RJTUVSX0haPTEwMAorQ09ORklHX0FUOTFfRUFSTFlfREJHVT15CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMCBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMyBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNCBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNSBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjZUPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKyMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CitDT05GSUdfTVREX1JBTT15CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUExBVFJBTT15CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0FUTUVMPXkKK0NPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfSFc9eQorIyBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPXkKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDX1BIWT15CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX01BQ0I9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9eQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9eQorIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfREVGTEFURT15CitDT05GSUdfUFBQX0JTRENPTVA9eQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz15CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0dQSU89eQorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQVRNRUw9eQorQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQVRNRUxfUERDPXkKKyMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTMyCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0dQSU89eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HPXkKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKK0NPTkZJR19VU0JfR0FER0VUX0FUOTE9eQorQ09ORklHX1VTQl9BVDkxPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD15CitDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQVQ5MT15CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19HUElPPXkKK0NPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0dQSU89eQorQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKKyMgQ09ORklHX1JUQ19IQ1RPU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTkgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlM0X0ZTPXkKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKK0NPTkZJR19BUk1fVU5XSU5EPXkKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OWcyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NwdTlnMjBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YjljYmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2NwdTlnMjBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTMyOCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjMworIyBUdWUgSnVsIDE0IDE1OjAzOjQzIDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FUOTE9eQorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisKKyMKKyMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAorIworIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9BVDkxU0FNOUcyMD15CisjIENPTkZJR19BUkNIX0FUOTFDQVA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVg0MCBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MV9QTUNfVU5JVD15CisKKyMKKyMgQVQ5MVNBTTlHMjAgQm9hcmQgVHlwZQorIworIyBDT05GSUdfTUFDSF9BVDkxU0FNOUcyMEVLIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0NQVTlHMjA9eQorCisjCisjIEFUOTEgQm9hcmQgT3B0aW9ucworIworCisjCisjIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgaXMgbm90IHNldAorQ09ORklHX0FUOTFfVElNRVJfSFo9MTAwCitDT05GSUdfQVQ5MV9FQVJMWV9EQkdVPXkKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQ1IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0FSTTkyNlQ9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUSj15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisjIENPTkZJR19WRlAgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKK0NPTkZJR19NVERfUkFNPXkKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorQ09ORklHX01URF9QTEFUUkFNPXkKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfQVRNRUw9eQorIyBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX0hXIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfU09GVD15CisjIENPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorQ09ORklHX1NNU0NfUEhZPXkKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CitDT05GSUdfTUFDQj15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD15CisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz15CisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorQ09ORklHX1BQUF9ERUZMQVRFPXkKK0NPTkZJR19QUFBfQlNEQ09NUD15CisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPXkKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfR1BJTz15CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9BVE1FTD15CitDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQorIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MzIKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfR1BJTz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CitDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0c9eQorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorQ09ORklHX1VTQl9HQURHRVRfQVQ5MT15CitDT05GSUdfVVNCX0FUOTE9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPXkKK0NPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19BVDkxPXkKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX0dQSU89eQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJfR1BJTz15CitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FVVE9GUzRfRlM9eQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorQ09ORklHX0FSTV9VTldJTkQ9eQorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jcHVhdDkxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1YXQ5MV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwMTgyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1YXQ5MV9kZWZjb25maWcKQEAgLTAsMCArMSwxMzE2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMzCisjIFR1ZSBKdWwgMTQgMTQ6NDU6MDEgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKworIworIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCisjCitDT05GSUdfQVJDSF9BVDkxUk05MjAwPXkKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05RzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MUNBUDkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxX1BNQ19VTklUPXkKKworIworIyBBVDkxUk05MjAwIEJvYXJkIFR5cGUKKyMKKyMgQ09ORklHX01BQ0hfT05FQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMERLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQVQ5MVJNOTIwMEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ1NCMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ1NCNjM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ0FSTUVWQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0FURUI5MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfS0I5MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUElDT1RVWDJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0tBRkEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FQ0JBVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfWUw5MjAwIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0NQVUFUOTE9eQorCisjCisjIEFUOTEgQm9hcmQgT3B0aW9ucworIworCisjCisjIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgaXMgbm90IHNldAorQ09ORklHX0FUOTFfVElNRVJfSFo9MTAwCitDT05GSUdfQVQ5MV9FQVJMWV9EQkdVPXkKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQ1IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0FSTTkyMFQ9eQorQ09ORklHX0NQVV8zMnY0VD15CitDT05GSUdfQ1BVX0FCUlRfRVY0VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKyMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0xMDAKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CitDT05GSUdfTVREX1JBTT15CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUExBVFJBTT15CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKK0NPTkZJR19BUk1fQVQ5MV9FVEhFUj15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD15CisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz15CisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorQ09ORklHX1BQUF9ERUZMQVRFPXkKK0NPTkZJR19QUFBfQlNEQ09NUD15CisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPXkKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQVRNRUw9eQorQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQVRNRUxfUERDPXkKKyMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTMyCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0dQSU89eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPRz15CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworCisjCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CitDT05GSUdfVVNCX0dBREdFVF9BVDkxPXkKK0NPTkZJR19VU0JfQVQ5MT15CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9eQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0FUOTE9eQorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz15CitDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKKyMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIworQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CisjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1BDRjg1NjM9eQorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTNF9GUz15CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD15CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZwppbmRleCBmMzA3NGU0Li5kZjliZmJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM2Ci0jIFR1ZSBTZXAgMTYgMTg6NTY6NTggMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNgorIyBGcmkgQXVnIDIxIDE1OjQxOjM5IDIwMDkKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKQEAgLTksNyArOSw2IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTE4LDE2ICsxNywxNCBAQAogQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKIENPTkZJR19aT05FX0RNQT15CiBDT05GSUdfQVJDSF9NVERfWElQPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDQsMTAgKzQxLDE5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtNTYsOSArNjIsMTEgQEAKICMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNjksMTcgKzc3LDIyIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC04NywzMCArMTAwLDI1IEBACiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEyNiw3ICsxMzQsNyBAQAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIFN5c3RlbSBUeXBlCkBAIC0xMzYsMTQgKzE0NCwxNSBAQAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldApAQCAtMTUyLDIzICsxNjEsMjUgQEAKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NBMTEwMD15CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAotQ09ORklHX0RNQUJPVU5DRT15CiAKICMKICMgU0ExMXgwIEltcGxlbWVudGF0aW9ucwpAQCAtMTg5LDE0ICsyMDAsNiBAQAogQ09ORklHX1NBMTEwMF9TU1A9eQogCiAjCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwogIyBQcm9jZXNzb3IgVHlwZQogIwogQ09ORklHX0NQVV8zMj15CkBAIC0yMTUsOCArMjE4LDggQEAKICMKICMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAogQ09ORklHX1NBMTExMT15CitDT05GSUdfRE1BQk9VTkNFPXkKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTkKIAogIwpAQCAtMjQ2LDMwICsyNDksMzYgQEAKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0haPTEwMAogIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX05PREVTX1NISUZUPTIKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKICMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0RJU0NPTlRJR01FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVM9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKK0NPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKICMgQ09ORklHX0xFRFMgaXMgbm90IHNldAogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAogCiAjCiAjIEJvb3Qgb3B0aW9ucwpAQCAtMjgxLDkgKzI5MCwxMCBAQAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogCiAjCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAogIwogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogCiAjCiAjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgpAQCAtMjk0LDEyICszMDQsMTQgQEAKICMKIENPTkZJR19GUEVfTldGUEU9eQogIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLUNPTkZJR19GUEVfRkFTVEZQRT15CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKIENPTkZJR19CSU5GTVRfQU9VVD15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldApAQCAtMzUzLDcgKzM2NSw2IEBACiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKQEAgLTM2NywxMCArMzc4LDEyIEBACiAjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CkBAIC0zNzksNiArMzkyLDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzg4LDcgKzQwMiwxMCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTQzMSwxNCArNDQ4LDE3IEBACiBDT05GSUdfU0ExMTAwX0ZJUj1tCiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwotIyBXaXJlbGVzcworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDY0LDI5ICs0ODQsMzQgQEAKICMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfTkJEPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCiAjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ1M9eQogIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAogQ09ORklHX0lERV9QUk9DX0ZTPXkKIApAQCAtNTEzLDggKzUzOCwzNCBAQAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlJPW0KKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1M4OXgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldApAQCAtNTIzLDE3ICs1NzQsMjcgQEAKICMgV2lyZWxlc3MgTEFOCiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX1BDTUNJQV9SQVlDUyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19BSVJPX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogQ09ORklHX05FVF9QQ01DSUE9eQotQ09ORklHX1BDTUNJQV8zQzU4OT1tCi1DT05GSUdfUENNQ0lBXzNDNTc0PW0KLUNPTkZJR19QQ01DSUFfRk1WSjE4WD1tCi1DT05GSUdfUENNQ0lBX1BDTkVUPW0KLUNPTkZJR19QQ01DSUFfTk1DTEFOPW0KLUNPTkZJR19QQ01DSUFfU01DOTFDOTI9bQotQ09ORklHX1BDTUNJQV9YSVJDMlBTPW0KLUNPTkZJR19QQ01DSUFfQVhORVQ9bQorIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfRk1WSjE4WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfUENORVQgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfU01DOTFDOTIgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0FYTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CkBAIC01NjUsMjAgKzYyNiwyMyBAQAogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfSFA3WFg9eQogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9IUDdYWD15Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKQEAgLTU4Nyw4ICs2NTEsOCBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwpAQCAtNjI0LDExICs2ODgsMTIgQEAKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MzIKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCkBAIC02NTAsNiArNzE1LDEwIEBACiAjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKIAogIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCiAjIEkyQyBHUElPIGV4cGFuZGVyczoKICMKIApAQCAtNjYzLDEyICs3MzIsMTQgQEAKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTY3Niw2ICs3NDcsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CkBAIC02ODcsMjIgKzc1OSw3IEBACiAjIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwogIwogIyBDT05GSUdfTUNQX1NBMTFYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtNzEyLDYgKzc2OSw3IEBACiBDT05GSUdfRkI9eQogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKQEAgLTczMyw3ICs3OTEsMTcgQEAKICMgQ09ORklHX0ZCX1NBMTEwMCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUzFEMTNYWFg9eQogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfTENEX0hQNzAwPXkKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfSFA3MDA9eQogCiAjCiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKQEAgLTc1Nyw2ICs4MjUsOCBAQAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CkBAIC03ODEsMTIgKzg1MSwxNSBAQAogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTc5NCwxNSArODY3LDEwIEBACiAjCiBDT05GSUdfUlRDX0RSVl9TQTExMDA9eQogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCi0jCisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC04MTEsMTIgKzg3OSwxNiBAQAogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtODI2LDYgKzg5OCwxMSBAQAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTg0NiwxNCArOTIzLDEyIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtODYyLDYgKzkzNyw3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtODcwLDYgKzk0Niw3IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiAKICMKQEAgLTkzNSwxMiArMTAxMiwxNiBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTk1OCwxOSArMTAzOSwyMCBAQAogQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTk4NSwxMyArMTA2NywxNiBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKQEAgLTEwNjIsMTUgKzExNDcsMjEgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CkBAIC0xMDc4LDcgKzExNjksNyBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiNDViOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcKQEAgLTAsMCArMSwxMzE2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKKyMgVHVlIEp1biAyMyAyMjo1NzoxNiAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0ZSRUVaRVI9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT01BRElLPXkKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorCisjCisjIE5vbWFkaWsgYm9hcmRzCisjCitDT05GSUdfTUFDSF9OT01BRElLXzg4MTVOSEs9eQorQ09ORklHX05PTUFESUtfODgxNT15CitDT05GSUdfSTJDX0JJVEJBTkdfODgxNU5ISz15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjZUPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorQ09ORklHX09VVEVSX0NBQ0hFPXkKK0NPTkZJR19DQUNIRV9MMlgwPXkKK0NPTkZJR19BUk1fVklDPXkKK0NPTkZJR19BUk1fVklDX05SPTIKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX0FSTV9BTUJBPXkKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9WRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPXkKK0NPTkZJR19ORVRfSVBHUkU9eQorQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQorQ09ORklHX0lQX01ST1VURT15CisjIENPTkZJR19JUF9QSU1TTV9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QSU1TTV9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorQ09ORklHX0JUPW0KK0NPTkZJR19CVF9MMkNBUD1tCitDT05GSUdfQlRfU0NPPW0KK0NPTkZJR19CVF9SRkNPTU09bQorQ09ORklHX0JUX1JGQ09NTV9UVFk9eQorQ09ORklHX0JUX0JORVA9bQorQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKK0NPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CitDT05GSUdfQlRfSElEUD1tCisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfQlRfSENJVUFSVD1tCitDT05GSUdfQlRfSENJVUFSVF9IND15CitDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKKyMgQ09ORklHX0JUX0hDSVVBUlRfTEwgaXMgbm90IHNldAorQ09ORklHX0JUX0hDSVZIQ0k9bQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCitDT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX1RFU1RTPW0KKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9OT01BRElLPXkKK0NPTkZJR19NVERfT05FTkFORD15CitDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFPXkKK0NPTkZJR19NVERfT05FTkFORF9HRU5FUklDPXkKKyMgQ09ORklHX01URF9PTkVOQU5EX09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORF8yWF9QUk9HUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EX1NJTSBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD15CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorQ09ORklHX1NDU0lfTE9HR0lORz15CitDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj15CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfTVBQRT1tCitDT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCitDT05GSUdfTkVUQ09OU09MRT1tCisjIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9BTUJBX1BMMDExPXkKK0NPTkZJR19TRVJJQUxfQU1CQV9QTDAxMV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0dQSU89eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorQ09ORklHX0RFQlVHX0dQSU89eQorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fUEwwNjEgaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfV0FDT00gaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1BMMDMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUEwwMzEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVNFX0ZTPXkKKyMgQ09ORklHX0NVU0UgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0NJRlNfV0VBS19QV19IQVNIPXkKKyMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1VOV0lORD15CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND1tCisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zNXBjMTAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvczVwYzEwMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBkN2QzZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczVwYzEwMF9kZWZjb25maWcKQEAgLTAsMCArMSw4OTIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAorIyBXZWQgSnVsICAxIDE1OjUzOjA3IDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX01NVT15CitDT05GSUdfTk9fSU9QT1JUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CisjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1M1UEMxWFg9eQorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorQ09ORklHX1BMQVRfUzNDPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKKyMgQ09ORklHX1MzQ19CT09UX0VSUk9SX1JFU0VUIGlzIG5vdCBzZXQKK0NPTkZJR19TM0NfQk9PVF9VQVJUX0ZPUkNFX0ZJRk89eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKK0NPTkZJR19TM0NfTE9XTEVWRUxfVUFSVF9QT1JUPTAKK0NPTkZJR19TM0NfR1BJT19TUEFDRT0wCitDT05GSUdfUzNDX0dQSU9fVFJBQ0s9eQorQ09ORklHX1MzQ19HUElPX1BVTExfVVBET1dOPXkKK0NPTkZJR19QTEFUX1M1UEMxWFg9eQorQ09ORklHX0NQVV9TNVBDMTAwX0lOSVQ9eQorQ09ORklHX0NQVV9TNVBDMTAwX0NMT0NLPXkKK0NPTkZJR19TNVBDMTAwX1NFVFVQX0kyQzA9eQorQ09ORklHX0NQVV9TNVBDMTAwPXkKK0NPTkZJR19NQUNIX1NNREtDMTAwPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVXzMydjZLPXkKK0NPTkZJR19DUFVfVjc9eQorQ09ORklHX0NQVV8zMnY3PXkKK0NPTkZJR19DUFVfQUJSVF9FVjc9eQorQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNz15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1RMU19SRUc9eQorIyBDT05GSUdfQVJNX0VSUkFUQV80MzA5NzMgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV80NTg2OTMgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV80NjAwNzUgaXMgbm90IHNldAorQ09ORklHX0FSTV9WSUM9eQorQ09ORklHX0FSTV9WSUNfTlI9MgorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWNyYW1mcyBpbml0PS9saW51eHJjIGNvbnNvbGU9dHR5U0FDMiwxMTUyMDAgbWVtPTEyOE0iCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCitDT05GSUdfRUVQUk9NX0FUMjQ9eQorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0FNU1VORz15CitDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM9MworIyBDT05GSUdfU0VSSUFMX1NBTVNVTkdfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9TQU1TVU5HX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRF9ERUJVRz15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKKyMKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKK0NPTkZJR19NTUM9eQorQ09ORklHX01NQ19ERUJVRz15CitDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUU9eQorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CitDT05GSUdfU0RJT19VQVJUPXkKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19TREhDST15CisjIENPTkZJR19NTUNfU0RIQ0lfUExURk0gaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BQ0w9eQorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQorQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CTE9DSz15CisjIENPTkZJR19ST01GU19CQUNLRURfQllfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CT1RIIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19PTl9CTE9DSz15CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19QSV9MSVNUPXkKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0FSTV9VTldJTkQ9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TM0NfUE9SVD15CitDT05GSUdfREVCVUdfUzNDX1VBUlQ9MAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfREVDT01QUkVTU19CWklQMj15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXNzZW1ibGVyLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hc3NlbWJsZXIuaAppbmRleCAxNWY4YTA5Li4wMGY0NmQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hc3NlbWJsZXIuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hc3NlbWJsZXIuaApAQCAtNzQsMjMgKzc0LDU2IEBACiAgKiBFbmFibGUgYW5kIGRpc2FibGUgaW50ZXJydXB0cwogICovCiAjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDYKLQkubWFjcm8JZGlzYWJsZV9pcnEKKwkubWFjcm8JZGlzYWJsZV9pcnFfbm90cmFjZQogCWNwc2lkCWkKIAkuZW5kbQogCi0JLm1hY3JvCWVuYWJsZV9pcnEKKwkubWFjcm8JZW5hYmxlX2lycV9ub3RyYWNlCiAJY3BzaWUJaQogCS5lbmRtCiAjZWxzZQotCS5tYWNybwlkaXNhYmxlX2lycQorCS5tYWNybwlkaXNhYmxlX2lycV9ub3RyYWNlCiAJbXNyCWNwc3JfYywgI1BTUl9JX0JJVCB8IFNWQ19NT0RFCiAJLmVuZG0KIAotCS5tYWNybwllbmFibGVfaXJxCisJLm1hY3JvCWVuYWJsZV9pcnFfbm90cmFjZQogCW1zcgljcHNyX2MsICNTVkNfTU9ERQogCS5lbmRtCiAjZW5kaWYKIAorCS5tYWNybyBhc21fdHJhY2VfaGFyZGlycXNfb2ZmCisjaWYgZGVmaW5lZChDT05GSUdfVFJBQ0VfSVJRRkxBR1MpCisJc3RtZGIgICBzcCEsIHtyMC1yMywgaXAsIGxyfQorCWJsCXRyYWNlX2hhcmRpcnFzX29mZgorCWxkbWlhCXNwISwge3IwLXIzLCBpcCwgbHJ9CisjZW5kaWYKKwkuZW5kbQorCisJLm1hY3JvIGFzbV90cmFjZV9oYXJkaXJxc19vbl9jb25kLCBjb25kCisjaWYgZGVmaW5lZChDT05GSUdfVFJBQ0VfSVJRRkxBR1MpCisJLyoKKwkgKiBhY3R1YWxseSB0aGUgcmVnaXN0ZXJzIHNob3VsZCBiZSBwdXNoZWQgYW5kIHBvcCdkIGNvbmRpdGlvbmFsbHksIGJ1dAorCSAqIGFmdGVyIGJsIHRoZSBmbGFncyBhcmUgY2VydGFpbmx5IGNsb2JiZXJlZAorCSAqLworCXN0bWRiICAgc3AhLCB7cjAtcjMsIGlwLCBscn0KKwlibFxjb25kCXRyYWNlX2hhcmRpcnFzX29uCisJbGRtaWEJc3AhLCB7cjAtcjMsIGlwLCBscn0KKyNlbmRpZgorCS5lbmRtCisKKwkubWFjcm8gYXNtX3RyYWNlX2hhcmRpcnFzX29uCisJYXNtX3RyYWNlX2hhcmRpcnFzX29uX2NvbmQgYWwKKwkuZW5kbQorCisJLm1hY3JvIGRpc2FibGVfaXJxCisJZGlzYWJsZV9pcnFfbm90cmFjZQorCWFzbV90cmFjZV9oYXJkaXJxc19vZmYKKwkuZW5kbQorCisJLm1hY3JvIGVuYWJsZV9pcnEKKwlhc21fdHJhY2VfaGFyZGlycXNfb24KKwllbmFibGVfaXJxX25vdHJhY2UKKwkuZW5kbQogLyoKICAqIFNhdmUgdGhlIGN1cnJlbnQgSVJRIHN0YXRlIGFuZCBkaXNhYmxlIElSUXMuICBOb3RlIHRoYXQgdGhpcyBtYWNybwogICogYXNzdW1lcyBGSVFzIGFyZSBlbmFibGVkLCBhbmQgdGhhdCB0aGUgcHJvY2Vzc29yIGlzIGluIFNWQyBtb2RlLgpAQCAtMTA0LDEwICsxMzcsMTYgQEAKICAqIFJlc3RvcmUgaW50ZXJydXB0IHN0YXRlIHByZXZpb3VzbHkgc3RvcmVkIGluIGEgcmVnaXN0ZXIuICBXZSBkb24ndAogICogZ3VhcmFudGVlIHRoYXQgdGhpcyB3aWxsIHByZXNlcnZlIHRoZSBmbGFncy4KICAqLwotCS5tYWNybwlyZXN0b3JlX2lycXMsIG9sZGNwc3IKKwkubWFjcm8JcmVzdG9yZV9pcnFzX25vdHJhY2UsIG9sZGNwc3IKIAltc3IJY3Bzcl9jLCBcb2xkY3BzcgogCS5lbmRtCiAKKwkubWFjcm8gcmVzdG9yZV9pcnFzLCBvbGRjcHNyCisJdHN0CVxvbGRjcHNyLCAjUFNSX0lfQklUCisJYXNtX3RyYWNlX2hhcmRpcnFzX29uX2NvbmQgZXEKKwlyZXN0b3JlX2lycXNfbm90cmFjZSBcb2xkY3BzcgorCS5lbmRtCisKICNkZWZpbmUgVVNFUih4Li4uKQkJCQlcCiA5OTk5Ogl4OwkJCQkJXAogCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiOwkJXApAQCAtMTI3LDMgKzE2Niw4NyBAQAogI2VuZGlmCiAjZW5kaWYKIAkuZW5kbQorCisjaWZkZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKKwkubWFjcm8Jc2V0bW9kZSwgbW9kZSwgcmVnCisJbW92CVxyZWcsICNcbW9kZQorCW1zcgljcHNyX2MsIFxyZWcKKwkuZW5kbQorI2Vsc2UKKwkubWFjcm8Jc2V0bW9kZSwgbW9kZSwgcmVnCisJbXNyCWNwc3JfYywgI1xtb2RlCisJLmVuZG0KKyNlbmRpZgorCisvKgorICogU1RSVC9MRFJUIGFjY2VzcyBtYWNyb3Mgd2l0aCBBUk0gYW5kIFRodW1iLTIgdmFyaWFudHMKKyAqLworI2lmZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCisKKwkubWFjcm8JdXNyYWNjb2ZmLCBpbnN0ciwgcmVnLCBwdHIsIGluYywgb2ZmLCBjb25kLCBhYm9ydAorOTk5OToKKwkuaWYJXGluYyA9PSAxCisJXGluc3RyXGNvbmRcKClidCBccmVnLCBbXHB0ciwgI1xvZmZdCisJLmVsc2VpZglcaW5jID09IDQKKwlcaW5zdHJcY29uZFwoKXQgXHJlZywgW1xwdHIsICNcb2ZmXQorCS5lbHNlCisJLmVycm9yCSJVbnN1cHBvcnRlZCBpbmMgbWFjcm8gYXJndW1lbnQiCisJLmVuZGlmCisKKwkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgorCS5hbGlnbgkzCisJLmxvbmcJOTk5OWIsIFxhYm9ydAorCS5wcmV2aW91cworCS5lbmRtCisKKwkubWFjcm8JdXNyYWNjLCBpbnN0ciwgcmVnLCBwdHIsIGluYywgY29uZCwgcmVwdCwgYWJvcnQKKwlAIGV4cGxpY2l0IElUIGluc3RydWN0aW9uIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBsYWJlbAorCUAgaW50cm9kdWNlZCBieSB0aGUgVVNFUiBtYWNybworCS5pZm5jCVxjb25kLGFsCisJLmlmCVxyZXB0ID09IDEKKwlpdHQJXGNvbmQKKwkuZWxzZWlmCVxyZXB0ID09IDIKKwlpdHR0CVxjb25kCisJLmVsc2UKKwkuZXJyb3IJIlVuc3VwcG9ydGVkIHJlcHQgbWFjcm8gYXJndW1lbnQiCisJLmVuZGlmCisJLmVuZGlmCisKKwlAIFNsaWdodGx5IG9wdGltaXNlZCB0byBhdm9pZCBpbmNyZW1lbnRpbmcgdGhlIHBvaW50ZXIgdHdpY2UKKwl1c3JhY2NvZmYgXGluc3RyLCBccmVnLCBccHRyLCBcaW5jLCAwLCBcY29uZCwgXGFib3J0CisJLmlmCVxyZXB0ID09IDIKKwl1c3JhY2NvZmYgXGluc3RyLCBccmVnLCBccHRyLCBcaW5jLCA0LCBcY29uZCwgXGFib3J0CisJLmVuZGlmCisKKwlhZGRcY29uZCBccHRyLCAjXHJlcHQgKiBcaW5jCisJLmVuZG0KKworI2Vsc2UJLyogIUNPTkZJR19USFVNQjJfS0VSTkVMICovCisKKwkubWFjcm8JdXNyYWNjLCBpbnN0ciwgcmVnLCBwdHIsIGluYywgY29uZCwgcmVwdCwgYWJvcnQKKwkucmVwdAlccmVwdAorOTk5OToKKwkuaWYJXGluYyA9PSAxCisJXGluc3RyXGNvbmRcKClidCBccmVnLCBbXHB0cl0sICNcaW5jCisJLmVsc2VpZglcaW5jID09IDQKKwlcaW5zdHJcY29uZFwoKXQgXHJlZywgW1xwdHJdLCAjXGluYworCS5lbHNlCisJLmVycm9yCSJVbnN1cHBvcnRlZCBpbmMgbWFjcm8gYXJndW1lbnQiCisJLmVuZGlmCisKKwkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgorCS5hbGlnbgkzCisJLmxvbmcJOTk5OWIsIFxhYm9ydAorCS5wcmV2aW91cworCS5lbmRyCisJLmVuZG0KKworI2VuZGlmCS8qIENPTkZJR19USFVNQjJfS0VSTkVMICovCisKKwkubWFjcm8Jc3RydXNyLCByZWcsIHB0ciwgaW5jLCBjb25kPWFsLCByZXB0PTEsIGFib3J0PTkwMDFmCisJdXNyYWNjCXN0ciwgXHJlZywgXHB0ciwgXGluYywgXGNvbmQsIFxyZXB0LCBcYWJvcnQKKwkuZW5kbQorCisJLm1hY3JvCWxkcnVzciwgcmVnLCBwdHIsIGluYywgY29uZD1hbCwgcmVwdD0xLCBhYm9ydD05MDAxZgorCXVzcmFjYwlsZHIsIFxyZWcsIFxwdHIsIFxpbmMsIFxjb25kLCBccmVwdCwgXGFib3J0CisJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RldmljZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZGV2aWNlLmgKaW5kZXggYzYxNjQyYi4uOWYzOTBjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZGV2aWNlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZGV2aWNlLmgKQEAgLTEyLDQgKzEyLDcgQEAKICNlbmRpZgogfTsKIAorc3RydWN0IHBkZXZfYXJjaGRhdGEgeworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGMyMDc1MDQuLmMzYjkxMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC01NSw2ICs1NSw5IEBACiAjZGVmaW5lIFJfQVJNX01PVldfQUJTX05DCTQzCiAjZGVmaW5lIFJfQVJNX01PVlRfQUJTCQk0NAogCisjZGVmaW5lIFJfQVJNX1RITV9DQUxMCQkxMAorI2RlZmluZSBSX0FSTV9USE1fSlVNUDI0CTMwCisKIC8qCiAgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCAzOWM4YmMxLi4xMDNmN2VlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9mdHJhY2UuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtNyw4ICs3LDQzIEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiBleHRlcm4gdm9pZCBtY291bnQodm9pZCk7CitleHRlcm4gdm9pZCBfX2dudV9tY291bnRfbmModm9pZCk7CiAjZW5kaWYKIAogI2VuZGlmCiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZiBkZWZpbmVkKENPTkZJR19GUkFNRV9QT0lOVEVSKSAmJiAhZGVmaW5lZChDT05GSUdfQVJNX1VOV0lORCkKKy8qCisgKiByZXR1cm5fYWRkcmVzcyB1c2VzIHdhbGtfc3RhY2tmcmFtZSB0byBkbyBpdCdzIHdvcmsuICBJZiBib3RoCisgKiBDT05GSUdfRlJBTUVfUE9JTlRFUj15IGFuZCBDT05GSUdfQVJNX1VOV0lORD15IHdhbGtfc3RhY2tmcmFtZSB1c2VzIHVud2luZAorICogaW5mb3JtYXRpb24uICBGb3IgdGhpcyB0byB3b3JrIGluIHRoZSBmdW5jdGlvbiB0cmFjZXIgbWFueSBmdW5jdGlvbnMgd291bGQKKyAqIGhhdmUgdG8gYmUgbWFya2VkIHdpdGggX19ub3RyYWNlLiAgU28gZm9yIG5vdyBqdXN0IGRlcGVuZCBvbgorICogIUNPTkZJR19BUk1fVU5XSU5ELgorICovCisKK3ZvaWQgKnJldHVybl9hZGRyZXNzKHVuc2lnbmVkIGludCk7CisKKyNlbHNlCisKK2V4dGVybiBpbmxpbmUgdm9pZCAqcmV0dXJuX2FkZHJlc3ModW5zaWduZWQgaW50IGxldmVsKQoreworCXJldHVybiBOVUxMOworfQorCisjZW5kaWYKKworI2RlZmluZSBIQVZFX0FSQ0hfQ0FMTEVSX0FERFIKKworI2RlZmluZSBDQUxMRVJfQUREUjAgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKKyNkZWZpbmUgQ0FMTEVSX0FERFIxICgodW5zaWduZWQgbG9uZylyZXR1cm5fYWRkcmVzcygxKSkKKyNkZWZpbmUgQ0FMTEVSX0FERFIyICgodW5zaWduZWQgbG9uZylyZXR1cm5fYWRkcmVzcygyKSkKKyNkZWZpbmUgQ0FMTEVSX0FERFIzICgodW5zaWduZWQgbG9uZylyZXR1cm5fYWRkcmVzcygzKSkKKyNkZWZpbmUgQ0FMTEVSX0FERFI0ICgodW5zaWduZWQgbG9uZylyZXR1cm5fYWRkcmVzcyg0KSkKKyNkZWZpbmUgQ0FMTEVSX0FERFI1ICgodW5zaWduZWQgbG9uZylyZXR1cm5fYWRkcmVzcyg1KSkKKyNkZWZpbmUgQ0FMTEVSX0FERFI2ICgodW5zaWduZWQgbG9uZylyZXR1cm5fYWRkcmVzcyg2KSkKKworI2VuZGlmIC8qIGlmbmRlZiBfX0FTU0VNQkxZX18gKi8KKwogI2VuZGlmIC8qIF9BU01fQVJNX0ZUUkFDRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZnV0ZXguaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Z1dGV4LmgKaW5kZXggOWVlNzQzYi4uYmZjYzE1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZnV0ZXguaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9mdXRleC5oCkBAIC05OSw2ICs5OSw3IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIkBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pY1xuIgogCSIxOglsZHJ0CSUwLCBbJTNdXG4iCiAJIgl0ZXEJJTAsICUxXG4iCisJIglpdAllcQlAIGV4cGxpY2l0IElUIG5lZWRlZCBmb3IgdGhlIDJiIGxhYmVsXG4iCiAJIjI6CXN0cmVxdAklMiwgWyUzXVxuIgogCSIzOlxuIgogCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tbWMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbW1jLmgKaW5kZXggNGRhMzMyYi4uYjQ5MGVjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tbWMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL21tYy5oCkBAIC0xMCw2ICsxMCw4IEBACiAJdW5zaWduZWQgaW50IG9jcl9tYXNrOwkJCS8qIGF2YWlsYWJsZSB2b2x0YWdlcyAqLwogCXUzMiAoKnRyYW5zbGF0ZV92ZGQpKHN0cnVjdCBkZXZpY2UgKiwgdW5zaWduZWQgaW50KTsKIAl1bnNpZ25lZCBpbnQgKCpzdGF0dXMpKHN0cnVjdCBkZXZpY2UgKik7CisJaW50CWdwaW9fd3A7CisJaW50CWdwaW9fY2Q7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKaW5kZXggODU3NjNkYi4uY2VmZWRmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKQEAgLTQ0LDcgKzQ0LDEzIEBACiAgKiBUaGUgbW9kdWxlIHNwYWNlIGxpdmVzIGJldHdlZW4gdGhlIGFkZHJlc3NlcyBnaXZlbiBieSBUQVNLX1NJWkUKICAqIGFuZCBQQUdFX09GRlNFVCAtIGl0IG11c3QgYmUgd2l0aGluIDMyTUIgb2YgdGhlIGtlcm5lbCB0ZXh0LgogICovCisjaWZuZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCiAjZGVmaW5lIE1PRFVMRVNfVkFERFIJCShQQUdFX09GRlNFVCAtIDE2KjEwMjQqMTAyNCkKKyNlbHNlCisvKiBzbWFsbGVyIHJhbmdlIGZvciBUaHVtYi0yIHN5bWJvbHMgcmVsb2NhdGlvbiAoMl4yNCkqLworI2RlZmluZSBNT0RVTEVTX1ZBRERSCQkoUEFHRV9PRkZTRVQgLSA4KjEwMjQqMTAyNCkKKyNlbmRpZgorCiAjaWYgVEFTS19TSVpFID4gTU9EVUxFU19WQUREUgogI2Vycm9yIFRvcCBvZiB1c2VyIHNwYWNlIGNsYXNoZXMgd2l0aCBzdGFydCBvZiBtb2R1bGUgc3BhY2UKICNlbmRpZgpAQCAtMjEyLDcgKzIxOCw2IEBACiAgKgogICogIHBhZ2VfdG9fcGZuKHBhZ2UpCWNvbnZlcnQgYSBzdHJ1Y3QgcGFnZSAqIHRvIGEgUEZOIG51bWJlcgogICogIHBmbl90b19wYWdlKHBmbikJY29udmVydCBhIF92YWxpZF8gUEZOIG51bWJlciB0byBzdHJ1Y3QgcGFnZSAqCi0gKiAgcGZuX3ZhbGlkKHBmbikJaW5kaWNhdGVzIHdoZXRoZXIgYSBQRk4gbnVtYmVyIGlzIHZhbGlkCiAgKgogICogIHZpcnRfdG9fcGFnZShrKQljb252ZXJ0IGEgX3ZhbGlkXyB2aXJ0dWFsIGFkZHJlc3MgdG8gc3RydWN0IHBhZ2UgKgogICogIHZpcnRfYWRkcl92YWxpZChrKQlpbmRpY2F0ZXMgd2hldGhlciBhIHZpcnR1YWwgYWRkcmVzcyBpcyB2YWxpZApAQCAtMjIxLDEwICsyMjYsNiBAQAogCiAjZGVmaW5lIEFSQ0hfUEZOX09GRlNFVAkJUEhZU19QRk5fT0ZGU0VUCiAKLSNpZm5kZWYgQ09ORklHX1NQQVJTRU1FTQotI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pID49IFBIWVNfUEZOX09GRlNFVCAmJiAocGZuKSA8IChQSFlTX1BGTl9PRkZTRVQgKyBtYXhfbWFwbnIpKQotI2VuZGlmCi0KICNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQogI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCSgodW5zaWduZWQgbG9uZykoa2FkZHIpID49IFBBR0VfT0ZGU0VUICYmICh1bnNpZ25lZCBsb25nKShrYWRkcikgPCAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSkKIApAQCAtMjQxLDE4ICsyNDIsNiBAQAogI2RlZmluZSBhcmNoX3Bmbl90b19uaWQocGZuKQlQRk5fVE9fTklEKHBmbikKICNkZWZpbmUgYXJjaF9sb2NhbF9wYWdlX29mZnNldChwZm4sIG5pZCkgTE9DQUxfTUFQX05SKChwZm4pIDw8IFBBR0VfU0hJRlQpCiAKLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCQkJCQlcCi0JKHsJCQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgbmlkID0gUEZOX1RPX05JRChwZm4pOwkJXAotCQlpbnQgdmFsaWQgPSBuaWQgPCBNQVhfTlVNTk9ERVM7CQkJXAotCQlpZiAodmFsaWQpIHsJCQkJCVwKLQkJCXBnX2RhdGFfdCAqbm9kZSA9IE5PREVfREFUQShuaWQpOwlcCi0JCQl2YWxpZCA9IChwZm4gLSBub2RlLT5ub2RlX3N0YXJ0X3BmbikgPAlcCi0JCQkJbm9kZS0+bm9kZV9zcGFubmVkX3BhZ2VzOwlcCi0JCX0JCQkJCQlcCi0JCXZhbGlkOwkJCQkJCVwKLQl9KQotCiAjZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJCQkJCVwKIAkoQUREUl9UT19NQVBCQVNFKGthZGRyKSArIExPQ0FMX01BUF9OUihrYWRkcikpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDI2M2ZlZDAuLmJjZGI5MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtNjIsOCArNjIsMTAgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CisjaWZkZWYgQ09ORklHX01NVQogCWlmICh1bmxpa2VseShtbS0+Y29udGV4dC5rdm1fc2VxICE9IGluaXRfbW0uY29udGV4dC5rdm1fc2VxKSkKIAkJX19jaGVja19rdm1fc2VxKG1tKTsKKyNlbmRpZgogfQogCiAjZGVmaW5lIGluaXRfbmV3X2NvbnRleHQodHNrLG1tKQkwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmgKaW5kZXggMzU3NGMwZC4uZDFiMTYyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2Utbm9tbXUuaApAQCAtNDMsNyArNDMsNCBAQAogI2RlZmluZSBfX3BtZCh4KSAgICAgICAgKHgpCiAjZGVmaW5lIF9fcGdwcm90KHgpICAgICAoeCkKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0OwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2VuZDsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggOWM3NDZhZi4uM2EzMmFmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTk0LDYgKzE5NCwxMCBAQAogCiB0eXBlZGVmIHN0cnVjdCBwYWdlICpwZ3RhYmxlX3Q7CiAKKyNpZm5kZWYgQ09ORklHX1NQQVJTRU1FTQorZXh0ZXJuIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyk7CisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCAzZGNkNjRiLi5iMTJjYzk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0zNiw2ICszNiw4IEBACiAjZGVmaW5lIHBnZF9hbGxvYyhtbSkJCQlnZXRfcGdkX3Nsb3cobW0pCiAjZGVmaW5lIHBnZF9mcmVlKG1tLCBwZ2QpCQlmcmVlX3BnZF9zbG93KG1tLCBwZ2QpCiAKKyNkZWZpbmUgUEdBTExPQ19HRlAJKEdGUF9LRVJORUwgfCBfX0dGUF9OT1RSQUNLIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTykKKwogLyoKICAqIEFsbG9jYXRlIG9uZSBQVEUgdGFibGUuCiAgKgpAQCAtNTcsNyArNTksNyBAQAogewogCXB0ZV90ICpwdGU7CiAKLQlwdGUgPSAocHRlX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTyk7CisJcHRlID0gKHB0ZV90ICopX19nZXRfZnJlZV9wYWdlKFBHQUxMT0NfR0ZQKTsKIAlpZiAocHRlKSB7CiAJCWNsZWFuX2RjYWNoZV9hcmVhKHB0ZSwgc2l6ZW9mKHB0ZV90KSAqIFBUUlNfUEVSX1BURSk7CiAJCXB0ZSArPSBQVFJTX1BFUl9QVEU7CkBAIC03MSwxMCArNzMsMTYgQEAKIHsKIAlzdHJ1Y3QgcGFnZSAqcHRlOwogCi0JcHRlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTywgMCk7CisjaWZkZWYgQ09ORklHX0hJR0hQVEUKKwlwdGUgPSBhbGxvY19wYWdlcyhQR0FMTE9DX0dGUCB8IF9fR0ZQX0hJR0hNRU0sIDApOworI2Vsc2UKKwlwdGUgPSBhbGxvY19wYWdlcyhQR0FMTE9DX0dGUCwgMCk7CisjZW5kaWYKIAlpZiAocHRlKSB7Ci0JCXZvaWQgKnBhZ2UgPSBwYWdlX2FkZHJlc3MocHRlKTsKLQkJY2xlYW5fZGNhY2hlX2FyZWEocGFnZSwgc2l6ZW9mKHB0ZV90KSAqIFBUUlNfUEVSX1BURSk7CisJCWlmICghUGFnZUhpZ2hNZW0ocHRlKSkgeworCQkJdm9pZCAqcGFnZSA9IHBhZ2VfYWRkcmVzcyhwdGUpOworCQkJY2xlYW5fZGNhY2hlX2FyZWEocGFnZSwgc2l6ZW9mKHB0ZV90KSAqIFBUUlNfUEVSX1BURSk7CisJCX0KIAkJcGd0YWJsZV9wYWdlX2N0b3IocHRlKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBjNDMzYzZjLi4yMDFjY2FhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xNjIsMTAgKzE2Miw4IEBACiAgKiBlbnRyaWVzIGFyZSBzdG9yZWQgMTAyNCBieXRlcyBiZWxvdy4KICAqLwogI2RlZmluZSBMX1BURV9QUkVTRU5UCQkoMSA8PCAwKQotI2RlZmluZSBMX1BURV9GSUxFCQkoMSA8PCAxKQkvKiBvbmx5IHdoZW4gIVBSRVNFTlQgKi8KICNkZWZpbmUgTF9QVEVfWU9VTkcJCSgxIDw8IDEpCi0jZGVmaW5lIExfUFRFX0JVRkZFUkFCTEUJKDEgPDwgMikJLyogb2Jzb2xldGUsIG1hdGNoZXMgUFRFICovCi0jZGVmaW5lIExfUFRFX0NBQ0hFQUJMRQkJKDEgPDwgMykJLyogb2Jzb2xldGUsIG1hdGNoZXMgUFRFICovCisjZGVmaW5lIExfUFRFX0ZJTEUJCSgxIDw8IDIpCS8qIG9ubHkgd2hlbiAhUFJFU0VOVCAqLwogI2RlZmluZSBMX1BURV9ESVJUWQkJKDEgPDwgNikKICNkZWZpbmUgTF9QVEVfV1JJVEUJCSgxIDw8IDcpCiAjZGVmaW5lIExfUFRFX1VTRVIJCSgxIDw8IDgpCkBAIC0yNjQsMTAgKzI2MiwxOSBAQAogI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGVwKQlzZXRfcHRlX2V4dChwdGVwLCBfX3B0ZSgwKSwgMCkKICNkZWZpbmUgcHRlX3BhZ2UocHRlKQkJKHBmbl90b19wYWdlKHB0ZV9wZm4ocHRlKSkpCiAjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpcixhZGRyKQkocG1kX3BhZ2VfdmFkZHIoKihkaXIpKSArIF9fcHRlX2luZGV4KGFkZHIpKQotI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsYWRkcikJKHBtZF9wYWdlX3ZhZGRyKCooZGlyKSkgKyBfX3B0ZV9pbmRleChhZGRyKSkKLSNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpcixhZGRyKQkocG1kX3BhZ2VfdmFkZHIoKihkaXIpKSArIF9fcHRlX2luZGV4KGFkZHIpKQotI2RlZmluZSBwdGVfdW5tYXAocHRlKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpcixhZGRyKQkoX19wdGVfbWFwKGRpciwgS01fUFRFMCkgKyBfX3B0ZV9pbmRleChhZGRyKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpcixhZGRyKQkoX19wdGVfbWFwKGRpciwgS01fUFRFMSkgKyBfX3B0ZV9pbmRleChhZGRyKSkKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkJCQlfX3B0ZV91bm1hcChwdGUsIEtNX1BURTApCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKQkJX19wdGVfdW5tYXAocHRlLCBLTV9QVEUxKQorCisjaWZuZGVmIENPTkZJR19ISUdIUFRFCisjZGVmaW5lIF9fcHRlX21hcChkaXIsa20pCXBtZF9wYWdlX3ZhZGRyKCooZGlyKSkKKyNkZWZpbmUgX19wdGVfdW5tYXAocHRlLGttKQlkbyB7IH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBfX3B0ZV9tYXAoZGlyLGttKQkoKHB0ZV90ICopa21hcF9hdG9taWMocG1kX3BhZ2UoKihkaXIpKSwga20pICsgUFRSU19QRVJfUFRFKQorI2RlZmluZSBfX3B0ZV91bm1hcChwdGUsa20pCWt1bm1hcF9hdG9taWMoKHB0ZSAtIFBUUlNfUEVSX1BURSksIGttKQorI2VuZGlmCiAKICNkZWZpbmUgc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KSBjcHVfc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KQogCkBAIC0zODEsMTMgKzM4OCwxMyBAQAogICoKICAqICAgMyAzIDIgMiAyIDIgMiAyIDIgMiAyIDIgMSAxIDEgMSAxIDEgMSAxIDEgMQogICogICAxIDAgOSA4IDcgNiA1IDQgMyAyIDEgMCA5IDggNyA2IDUgNCAzIDIgMSAwIDkgOCA3IDYgNSA0IDMgMiAxIDAKLSAqICAgPC0tLS0tLS0tLS0tLS0tLSBvZmZzZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0+IDwtLS0gdHlwZSAtLT4gMCAwCisgKiAgIDwtLS0tLS0tLS0tLS0tLS0gb2Zmc2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tPiA8LSB0eXBlIC0tPiAwIDAgMAogICoKLSAqIFRoaXMgZ2l2ZXMgdXMgdXAgdG8gMTI3IHN3YXAgZmlsZXMgYW5kIDMyR0IgcGVyIHN3YXAgZmlsZS4gIE5vdGUgdGhhdAorICogVGhpcyBnaXZlcyB1cyB1cCB0byA2MyBzd2FwIGZpbGVzIGFuZCAzMkdCIHBlciBzd2FwIGZpbGUuICBOb3RlIHRoYXQKICAqIHRoZSBvZmZzZXQgZmllbGQgaXMgYWx3YXlzIG5vbi16ZXJvLgogICovCi0jZGVmaW5lIF9fU1dQX1RZUEVfU0hJRlQJMgotI2RlZmluZSBfX1NXUF9UWVBFX0JJVFMJCTcKKyNkZWZpbmUgX19TV1BfVFlQRV9TSElGVAkzCisjZGVmaW5lIF9fU1dQX1RZUEVfQklUUwkJNgogI2RlZmluZSBfX1NXUF9UWVBFX01BU0sJCSgoMSA8PCBfX1NXUF9UWVBFX0JJVFMpIC0gMSkKICNkZWZpbmUgX19TV1BfT0ZGU0VUX1NISUZUCShfX1NXUF9UWVBFX0JJVFMgKyBfX1NXUF9UWVBFX1NISUZUKQogCkBAIC00MTEsMTMgKzQxOCwxMyBAQAogICoKICAqICAgMyAzIDIgMiAyIDIgMiAyIDIgMiAyIDIgMSAxIDEgMSAxIDEgMSAxIDEgMQogICogICAxIDAgOSA4IDcgNiA1IDQgMyAyIDEgMCA5IDggNyA2IDUgNCAzIDIgMSAwIDkgOCA3IDYgNSA0IDMgMiAxIDAKLSAqICAgPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBvZmZzZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gMSAwCisgKiAgIDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBvZmZzZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiAxIDAgMAogICovCiAjZGVmaW5lIHB0ZV9maWxlKHB0ZSkJCShwdGVfdmFsKHB0ZSkgJiBMX1BURV9GSUxFKQotI2RlZmluZSBwdGVfdG9fcGdvZmYoeCkJCShwdGVfdmFsKHgpID4+IDIpCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZSh4KQkJX19wdGUoKCh4KSA8PCAyKSB8IExfUFRFX0ZJTEUpCisjZGVmaW5lIHB0ZV90b19wZ29mZih4KQkJKHB0ZV92YWwoeCkgPj4gMykKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKHgpCQlfX3B0ZSgoKHgpIDw8IDMpIHwgTF9QVEVfRklMRSkKIAotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkzMAorI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkyOQogCiAvKiBOZWVkcyB0byBiZSBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBsaW51eC9tbS5oLCBhcyBpdCBpcyBhcmNoIGRlcGVuZGVudCAqLwogLyogRklYTUU6IHRoaXMgaXMgbm90IGNvcnJlY3QgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggNjdiODMzYy4uYmJlY2NjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTgyLDYgKzgyLDE0IEBACiAjZGVmaW5lIFBTUl9FTkRTVEFURQkwCiAjZW5kaWYKIAorLyogCisgKiBUaGVzZSBhcmUgJ21hZ2ljJyB2YWx1ZXMgZm9yIFBUUkFDRV9QRUVLVVNSIHRoYXQgcmV0dXJuIGluZm8gYWJvdXQgd2hlcmUgYQorICogcHJvY2VzcyBpcyBsb2NhdGVkIGluIG1lbW9yeS4KKyAqLworI2RlZmluZSBQVF9URVhUX0FERFIJCTB4MTAwMDAKKyNkZWZpbmUgUFRfREFUQV9BRERSCQkweDEwMDA0CisjZGVmaW5lIFBUX1RFWFRfRU5EX0FERFIJMHgxMDAwOAorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA1MzdkZTRlLi45MmFjNjFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTcsNCArNTcsNyBAQAogI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CiAjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCiAKKyNkZWZpbmUgU09fUFJPVE9DT0wJCTM4CisjZGVmaW5lIFNPX0RPTUFJTgkJMzkKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDczMzk0ZTUuLjJkZmI3ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMTMwLDIzICsxMzAsMjggQEAKICAqICBUSUZfU1lTQ0FMTF9UUkFDRQktIHN5c2NhbGwgdHJhY2UgYWN0aXZlCiAgKiAgVElGX1NJR1BFTkRJTkcJLSBzaWduYWwgcGVuZGluZwogICogIFRJRl9ORUVEX1JFU0NIRUQJLSByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5CisgKiAgVElGX05PVElGWV9SRVNVTUUJLSBjYWxsYmFjayBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXIKICAqICBUSUZfVVNFREZQVQkJLSBGUFUgd2FzIHVzZWQgYnkgdGhpcyB0YXNrIHRoaXMgcXVhbnR1bSAoU01QKQogICogIFRJRl9QT0xMSU5HX05SRkxBRwktIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVECiAgKi8KICNkZWZpbmUgVElGX1NJR1BFTkRJTkcJCTAKICNkZWZpbmUgVElGX05FRURfUkVTQ0hFRAkxCisjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTIJLyogY2FsbGJhY2sgYmVmb3JlIHJldHVybmluZyB0byB1c2VyICovCiAjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFCTgKICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CiAjZGVmaW5lIFRJRl9VU0lOR19JV01NWFQJMTcKICNkZWZpbmUgVElGX01FTURJRQkJMTgKICNkZWZpbmUgVElGX0ZSRUVaRQkJMTkKKyNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwkyMAogCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMSA8PCBUSUZfTk9USUZZX1JFU1VNRSkKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxIDw8IFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxIDw8IFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl9VU0lOR19JV01NWFQJKDEgPDwgVElGX1VTSU5HX0lXTU1YVCkKICNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCisjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxIDw8IFRJRl9SRVNUT1JFX1NJR01BU0spCiAKIC8qCiAgKiBDaGFuZ2UgdGhlc2UgYW5kIHlvdSBicmVhayBBU00gY29kZSBpbiBlbnRyeS1jb21tb24uUwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDBkYTliYzkuLjFkNmJkNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL2RvbWFpbi5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdW5pZmllZC5oPgogCiAjZGVmaW5lIFZFUklGWV9SRUFEIDAKICNkZWZpbmUgVkVSSUZZX1dSSVRFIDEKQEAgLTM2NSw4ICszNjYsMTAgQEAKIAogI2RlZmluZSBfX3B1dF91c2VyX2FzbV9kd29yZCh4LF9fcHVfYWRkcixlcnIpCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAotCSIxOglzdHJ0CSIgX19yZWdfb3BlcjEgIiwgWyUxXSwgIzRcbiIJCVwKLQkiMjoJc3RydAkiIF9fcmVnX29wZXIwICIsIFslMV1cbiIJCVwKKyBBUk0oCSIxOglzdHJ0CSIgX19yZWdfb3BlcjEgIiwgWyUxXSwgIzRcbiIJKQlcCisgQVJNKAkiMjoJc3RydAkiIF9fcmVnX29wZXIwICIsIFslMV1cbiIJKQlcCisgVEhVTUIoCSIxOglzdHJ0CSIgX19yZWdfb3BlcjEgIiwgWyUxXVxuIgkpCVwKKyBUSFVNQigJIjI6CXN0cnQJIiBfX3JlZ19vcGVyMCAiLCBbJTEsICM0XVxuIgkpCVwKIAkiMzpcbiIJCQkJCQkJXAogCSIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJCVwKIAkiCS5hbGlnbgkyXG4iCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlmaWVkLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlmaWVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczZTg1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaWZpZWQuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS91bmlmaWVkLmggLSBVbmlmaWVkIEFzc2VtYmxlciBTeW50YXggaGVscGVyIG1hY3JvcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9VTklGSUVEX0gKKyNkZWZpbmUgX19BU01fVU5JRklFRF9ICisKKyNpZiBkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgZGVmaW5lZChDT05GSUdfQVJNX0FTTV9VTklGSUVEKQorCS5zeW50YXggdW5pZmllZAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorCisjaWYgX19HTlVDX18gPCA0CisjZXJyb3IgVGh1bWItMiBrZXJuZWwgcmVxdWlyZXMgZ2NjID49IDQKKyNlbmRpZgorCisvKiBUaGUgQ1BTUiBiaXQgZGVzY3JpYmluZyB0aGUgaW5zdHJ1Y3Rpb24gc2V0IChUaHVtYikgKi8KKyNkZWZpbmUgUFNSX0lTRVRTVEFURQlQU1JfVF9CSVQKKworI2RlZmluZSBBUk0oeC4uLikKKyNkZWZpbmUgVEhVTUIoeC4uLikJeAorI2RlZmluZSBXKGluc3RyKQlpbnN0ci53CisjZGVmaW5lIEJTWU0oc3ltKQlzeW0gKyAxCisKKyNlbHNlCS8qICFDT05GSUdfVEhVTUIyX0tFUk5FTCAqLworCisvKiBUaGUgQ1BTUiBiaXQgZGVzY3JpYmluZyB0aGUgaW5zdHJ1Y3Rpb24gc2V0IChBUk0pICovCisjZGVmaW5lIFBTUl9JU0VUU1RBVEUJMAorCisjZGVmaW5lIEFSTSh4Li4uKQl4CisjZGVmaW5lIFRIVU1CKHguLi4pCisjZGVmaW5lIFcoaW5zdHIpCWluc3RyCisjZGVmaW5lIEJTWU0oc3ltKQlzeW0KKworI2VuZGlmCS8qIENPTkZJR19USFVNQjJfS0VSTkVMICovCisKKyNpZm5kZWYgQ09ORklHX0FSTV9BU01fVU5JRklFRAorCisvKgorICogSWYgdGhlIHVuaWZpZWQgYXNzZW1ibHkgc3ludGF4IGlzbid0IHVzZWQgKGluIEFSTSBtb2RlKSwgdGhlc2UKKyAqIG1hY3JvcyBleHBhbmQgdG8gYW4gZW1wdHkgc3RyaW5nCisgKi8KKyNpZmRlZiBfX0FTU0VNQkxZX18KKwkubWFjcm8JaXQsIGNvbmQKKwkuZW5kbQorCS5tYWNybwlpdHQsIGNvbmQKKwkuZW5kbQorCS5tYWNybwlpdGUsIGNvbmQKKwkuZW5kbQorCS5tYWNybwlpdHR0LCBjb25kCisJLmVuZG0KKwkubWFjcm8JaXR0ZSwgY29uZAorCS5lbmRtCisJLm1hY3JvCWl0ZXQsIGNvbmQKKwkuZW5kbQorCS5tYWNybwlpdGVlLCBjb25kCisJLmVuZG0KKwkubWFjcm8JaXR0dHQsIGNvbmQKKwkuZW5kbQorCS5tYWNybwlpdHR0ZSwgY29uZAorCS5lbmRtCisJLm1hY3JvCWl0dGV0LCBjb25kCisJLmVuZG0KKwkubWFjcm8JaXR0ZWUsIGNvbmQKKwkuZW5kbQorCS5tYWNybwlpdGV0dCwgY29uZAorCS5lbmRtCisJLm1hY3JvCWl0ZXRlLCBjb25kCisJLmVuZG0KKwkubWFjcm8JaXRlZXQsIGNvbmQKKwkuZW5kbQorCS5tYWNybwlpdGVlZSwgY29uZAorCS5lbmRtCisjZWxzZQkvKiAhX19BU1NFTUJMWV9fICovCitfX2FzbV9fKAorIgkubWFjcm8JaXQsIGNvbmRcbiIKKyIJLmVuZG1cbiIKKyIJLm1hY3JvCWl0dCwgY29uZFxuIgorIgkuZW5kbVxuIgorIgkubWFjcm8JaXRlLCBjb25kXG4iCisiCS5lbmRtXG4iCisiCS5tYWNybwlpdHR0LCBjb25kXG4iCisiCS5lbmRtXG4iCisiCS5tYWNybwlpdHRlLCBjb25kXG4iCisiCS5lbmRtXG4iCisiCS5tYWNybwlpdGV0LCBjb25kXG4iCisiCS5lbmRtXG4iCisiCS5tYWNybwlpdGVlLCBjb25kXG4iCisiCS5lbmRtXG4iCisiCS5tYWNybwlpdHR0dCwgY29uZFxuIgorIgkuZW5kbVxuIgorIgkubWFjcm8JaXR0dGUsIGNvbmRcbiIKKyIJLmVuZG1cbiIKKyIJLm1hY3JvCWl0dGV0LCBjb25kXG4iCisiCS5lbmRtXG4iCisiCS5tYWNybwlpdHRlZSwgY29uZFxuIgorIgkuZW5kbVxuIgorIgkubWFjcm8JaXRldHQsIGNvbmRcbiIKKyIJLmVuZG1cbiIKKyIJLm1hY3JvCWl0ZXRlLCBjb25kXG4iCisiCS5lbmRtXG4iCisiCS5tYWNybwlpdGVldCwgY29uZFxuIgorIgkuZW5kbVxuIgorIgkubWFjcm8JaXRlZWUsIGNvbmRcbiIKKyIJLmVuZG1cbiIpOworI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYJLyogQ09ORklHX0FSTV9BU01fVU5JRklFRCAqLworCisjZW5kaWYJLyogIV9fQVNNX1VOSUZJRURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCAwZTk3YjhjLi45MTIyYzllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzYwLDggKzM2MCw4IEBACiAjZGVmaW5lIF9fTlJfcmVhZGxpbmthdAkJCShfX05SX1NZU0NBTExfQkFTRSszMzIpCiAjZGVmaW5lIF9fTlJfZmNobW9kYXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzMzKQogI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJCShfX05SX1NZU0NBTExfQkFTRSszMzQpCi0JCQkJCS8qIDMzNSBmb3IgcHNlbGVjdDYgKi8KLQkJCQkJLyogMzM2IGZvciBwcG9sbCAqLworI2RlZmluZSBfX05SX3BzZWxlY3Q2CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMzNSkKKyNkZWZpbmUgX19OUl9wcG9sbAkJCShfX05SX1NZU0NBTExfQkFTRSszMzYpCiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJCShfX05SX1NZU0NBTExfQkFTRSszMzcpCiAjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CQkoX19OUl9TWVNDQUxMX0JBU0UrMzM4KQogI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMzOSkKQEAgLTM3Miw3ICszNzIsNyBAQAogI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0MykKICNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0NCkKICNkZWZpbmUgX19OUl9nZXRjcHUJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzQ1KQotCQkJCQkvKiAzNDYgZm9yIGVwb2xsX3B3YWl0ICovCisjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQJCShfX05SX1NZU0NBTExfQkFTRSszNDYpCiAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJCShfX05SX1NZU0NBTExfQkFTRSszNDcpCiAjZGVmaW5lIF9fTlJfdXRpbWVuc2F0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0OCkKICNkZWZpbmUgX19OUl9zaWduYWxmZAkJCShfX05SX1NZU0NBTExfQkFTRSszNDkpCkBAIC00MzIsNiArNDMyLDcgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR1NVU1BFTkQKIAogI2lmICFkZWZpbmVkKENPTkZJR19BRUFCSSkgfHwgZGVmaW5lZChDT05GSUdfT0FCSV9DT01QQVQpCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZmY4OWQwYi4uMzIxM2M5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQpAQCAtOCwxMCArOCwxMiBAQAogQ0ZMQUdTX1JFTU9WRV9mdHJhY2UubyA9IC1wZwogZW5kaWYKIAorQ0ZMQUdTX1JFTU9WRV9yZXR1cm5fYWRkcmVzcy5vID0gLXBnCisKICMgT2JqZWN0IGZpbGUgbGlzdHMuCiAKIG9iai15CQk6PSBjb21wYXQubyBlbGYubyBlbnRyeS1hcm12Lm8gZW50cnktY29tbW9uLm8gaXJxLm8gXAotCQkgICBwcm9jZXNzLm8gcHRyYWNlLm8gc2V0dXAubyBzaWduYWwubyBcCisJCSAgIHByb2Nlc3MubyBwdHJhY2UubyByZXR1cm5fYWRkcmVzcy5vIHNldHVwLm8gc2lnbmFsLm8gXAogCQkgICBzeXNfYXJtLm8gc3RhY2t0cmFjZS5vIHRpbWUubyB0cmFwcy5vCiAKIG9iai0kKENPTkZJR19JU0FfRE1BX0FQSSkJKz0gZG1hLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jIGIvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKaW5kZXggNTMxZTE4Ni4uMGU2Mjc3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2FybWtzeW1zLmMKQEAgLTE4Niw0ICsxODYsNSBAQAogCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogRVhQT1JUX1NZTUJPTChtY291bnQpOworRVhQT1JUX1NZTUJPTChfX2dudV9tY291bnRfbmMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCmluZGV4IGY3NzZlNzIuLmVjZmE5ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TCkBAIC04MSw3ICs4MSw3IEBACiAJCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiB3YXMgc3lzX3NzZXRtYXNrICovCiAvKiA3MCAqLwlDQUxMKHN5c19zZXRyZXVpZDE2KQogCQlDQUxMKHN5c19zZXRyZWdpZDE2KQotCQlDQUxMKHN5c19zaWdzdXNwZW5kX3dyYXBwZXIpCisJCUNBTEwoc3lzX3NpZ3N1c3BlbmQpCiAJCUNBTEwoc3lzX3NpZ3BlbmRpbmcpCiAJCUNBTEwoc3lzX3NldGhvc3RuYW1lKQogLyogNzUgKi8JQ0FMTChzeXNfc2V0cmxpbWl0KQpAQCAtMTg4LDcgKzE4OCw3IEBACiAJCUNBTEwoc3lzX3J0X3NpZ3BlbmRpbmcpCiAJCUNBTEwoc3lzX3J0X3NpZ3RpbWVkd2FpdCkKIAkJQ0FMTChzeXNfcnRfc2lncXVldWVpbmZvKQotCQlDQUxMKHN5c19ydF9zaWdzdXNwZW5kX3dyYXBwZXIpCisJCUNBTEwoc3lzX3J0X3NpZ3N1c3BlbmQpCiAvKiAxODAgKi8JQ0FMTChBQkkoc3lzX3ByZWFkNjQsIHN5c19vYWJpX3ByZWFkNjQpKQogCQlDQUxMKEFCSShzeXNfcHdyaXRlNjQsIHN5c19vYWJpX3B3cml0ZTY0KSkKIAkJQ0FMTChzeXNfY2hvd24xNikKQEAgLTM0NCw4ICszNDQsOCBAQAogCQlDQUxMKHN5c19yZWFkbGlua2F0KQogCQlDQUxMKHN5c19mY2htb2RhdCkKIAkJQ0FMTChzeXNfZmFjY2Vzc2F0KQotLyogMzM1ICovCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiBldmVudHVhbGx5IHBzZWxlY3Q2ICovCi0JCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiBldmVudHVhbGx5IHBwb2xsICovCisvKiAzMzUgKi8JQ0FMTChzeXNfcHNlbGVjdDYpCisJCUNBTEwoc3lzX3Bwb2xsKQogCQlDQUxMKHN5c191bnNoYXJlKQogCQlDQUxMKHN5c19zZXRfcm9idXN0X2xpc3QpCiAJCUNBTEwoc3lzX2dldF9yb2J1c3RfbGlzdCkKQEAgLTM1NSw3ICszNTUsNyBAQAogCQlDQUxMKHN5c192bXNwbGljZSkKIAkJQ0FMTChzeXNfbW92ZV9wYWdlcykKIC8qIDM0NSAqLwlDQUxMKHN5c19nZXRjcHUpCi0JCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiBldmVudHVhbGx5IGVwb2xsX3B3YWl0ICovCisJCUNBTEwoc3lzX2Vwb2xsX3B3YWl0KQogCQlDQUxMKHN5c19rZXhlY19sb2FkKQogCQlDQUxMKHN5c191dGltZW5zYXQpCiAJCUNBTEwoc3lzX3NpZ25hbGZkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2NydW5jaC5jIGIvYXJjaC9hcm0va2VybmVsL2NydW5jaC5jCmluZGV4IDk5OTk1YzIuLjc2OWFiZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9jcnVuY2guYworKysgYi9hcmNoL2FybS9rZXJuZWwvY3J1bmNoLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAogc3RhdGljIGludCBjcnVuY2hfZW5hYmxlZCh1MzIgZGV2Y2ZnKQogewotCXJldHVybiAhIShkZXZjZmcgJiBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUdfQ1JVTkNIX0VOQUJMRSk7CisJcmV0dXJuICEhKGRldmNmZyAmIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0NQRU5BKTsKIH0KIAogc3RhdGljIGludCBjcnVuY2hfZG8oc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqdCkKQEAgLTU2LDExICs1NiwxNiBAQAogCQlicmVhazsKIAogCWNhc2UgVEhSRUFEX05PVElGWV9TV0lUQ0g6Ci0JCWRldmNmZyA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJRyk7CisJCWRldmNmZyA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fREVWQ0ZHKTsKIAkJaWYgKGNydW5jaF9lbmFibGVkKGRldmNmZykgfHwgY3J1bmNoX293bmVyID09IGNydW5jaF9zdGF0ZSkgewotCQkJZGV2Y2ZnIF49IEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJR19DUlVOQ0hfRU5BQkxFOworCQkJLyoKKwkJCSAqIFdlIGRvbid0IHVzZSBlcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKCkgaGVyZQorCQkJICogYmVjYXVzZSB3ZSBhcmUgb24gdGhlIGNvbnRleHQgc3dpdGNoIHBhdGggYW5kCisJCQkgKiBwcmVlbXB0aW9uIGlzIGFscmVhZHkgZGlzYWJsZWQuCisJCQkgKi8KKwkJCWRldmNmZyBePSBFUDkzWFhfU1lTQ09OX0RFVkNGR19DUEVOQTsKIAkJCV9fcmF3X3dyaXRlbCgweGFhLCBFUDkzWFhfU1lTQ09OX1NXTE9DSyk7Ci0JCQlfX3Jhd193cml0ZWwoZGV2Y2ZnLCBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUcpOworCQkJX19yYXdfd3JpdGVsKGRldmNmZywgRVA5M1hYX1NZU0NPTl9ERVZDRkcpOwogCQl9CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCmluZGV4IGZjOGFmNDMuLjNkNzI3YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwpAQCAtMzQsNyArMzQsNyBAQAogCUAKIAlAIHJvdXRpbmUgY2FsbGVkIHdpdGggcjAgPSBpcnEgbnVtYmVyLCByMSA9IHN0cnVjdCBwdF9yZWdzICoKIAlACi0JYWRybmUJbHIsIDFiCisJYWRybmUJbHIsIEJTWU0oMWIpCiAJYm5lCWFzbV9kb19JUlEKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTQ2LDEzICs0NiwxMyBAQAogCSAqLwogCXRlc3RfZm9yX2lwaSByMCwgcjYsIHI1LCBscgogCW1vdm5lCXIwLCBzcAotCWFkcm5lCWxyLCAxYgorCWFkcm5lCWxyLCBCU1lNKDFiKQogCWJuZQlkb19JUEkKIAogI2lmZGVmIENPTkZJR19MT0NBTF9USU1FUlMKIAl0ZXN0X2Zvcl9sdGlycSByMCwgcjYsIHI1LCBscgogCW1vdm5lCXIwLCBzcAotCWFkcm5lCWxyLCAxYgorCWFkcm5lCWxyLCBCU1lNKDFiKQogCWJuZQlkb19sb2NhbF90aW1lcgogI2VuZGlmCiAjZW5kaWYKQEAgLTcwLDcgKzcwLDEwIEBACiAgKi8KIAkubWFjcm8JaW52X2VudHJ5LCByZWFzb24KIAlzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCi0Jc3RtaWIJc3AsIHtyMSAtIGxyfQorIEFSTSgJc3RtaWIJc3AsIHtyMSAtIGxyfQkJKQorIFRIVU1CKAlzdG1pYQlzcCwge3IwIC0gcjEyfQkJKQorIFRIVU1CKAlzdHIJc3AsIFtzcCwgI1NfU1BdCQkpCisgVEhVTUIoCXN0cglsciwgW3NwLCAjU19MUl0JCSkKIAltb3YJcjEsICNccmVhc29uCiAJLmVuZG0KIApAQCAtMTI2LDE3ICsxMjksMjQgQEAKIAkubWFjcm8Jc3ZjX2VudHJ5LCBzdGFja19ob2xlPTAKICBVTldJTkQoLmZuc3RhcnQJCSkKICBVTldJTkQoLnNhdmUge3IwIC0gcGN9CQkpCi0Jc3ViCXNwLCBzcCwgIyhTX0ZSQU1FX1NJWkUgKyBcc3RhY2tfaG9sZSkKKwlzdWIJc3AsIHNwLCAjKFNfRlJBTUVfU0laRSArIFxzdGFja19ob2xlIC0gNCkKKyNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorIFNQRklYKAlzdHIJcjAsIFtzcF0JKQlAIHRlbXBvcmFyaWx5IHNhdmVkCisgU1BGSVgoCW1vdglyMCwgc3AJCSkKKyBTUEZJWCgJdHN0CXIwLCAjNAkJKQlAIHRlc3Qgb3JpZ2luYWwgc3RhY2sgYWxpZ25tZW50CisgU1BGSVgoCWxkcglyMCwgW3NwXQkpCUAgcmVzdG9yZWQKKyNlbHNlCiAgU1BGSVgoCXRzdAlzcCwgIzQJCSkKLSBTUEZJWCgJYmljbmUJc3AsIHNwLCAjNAkpCi0Jc3RtaWIJc3AsIHtyMSAtIHIxMn0KKyNlbmRpZgorIFNQRklYKAlzdWJlcQlzcCwgc3AsICM0CSkKKwlzdG1pYQlzcCwge3IxIC0gcjEyfQogCiAJbGRtaWEJcjAsIHtyMSAtIHIzfQotCWFkZAlyNSwgc3AsICNTX1NQCQlAIGhlcmUgZm9yIGludGVybG9jayBhdm9pZGFuY2UKKwlhZGQJcjUsIHNwLCAjU19TUCAtIDQJQCBoZXJlIGZvciBpbnRlcmxvY2sgYXZvaWRhbmNlCiAJbW92CXI0LCAjLTEJCQlAICAiIiAgIiIgICAgICAiIiAgICAgICAiIgotCWFkZAlyMCwgc3AsICMoU19GUkFNRV9TSVpFICsgXHN0YWNrX2hvbGUpCi0gU1BGSVgoCWFkZG5lCXIwLCByMCwgIzQJKQotCXN0cglyMSwgW3NwXQkJQCBzYXZlIHRoZSAicmVhbCIgcjAgY29waWVkCisJYWRkCXIwLCBzcCwgIyhTX0ZSQU1FX1NJWkUgKyBcc3RhY2tfaG9sZSAtIDQpCisgU1BGSVgoCWFkZGVxCXIwLCByMCwgIzQJKQorCXN0cglyMSwgW3NwLCAjLTRdIQkJQCBzYXZlIHRoZSAicmVhbCIgcjAgY29waWVkCiAJCQkJCUAgZnJvbSB0aGUgZXhjZXB0aW9uIHN0YWNrCiAKIAltb3YJcjEsIGxyCkBAIC0xNTEsNiArMTYxLDggQEAKIAlAICByNCAtIG9yaWdfcjAgKHNlZSBwdF9yZWdzIGRlZmluaXRpb24gaW4gcHRyYWNlLmgpCiAJQAogCXN0bWlhCXI1LCB7cjAgLSByNH0KKworCWFzbV90cmFjZV9oYXJkaXJxc19vZmYKIAkuZW5kbQogCiAJLmFsaWduCTUKQEAgLTE5Niw5ICsyMDgsOCBAQAogCUAKIAlAIHJlc3RvcmUgU1BTUiBhbmQgcmVzdGFydCB0aGUgaW5zdHJ1Y3Rpb24KIAlACi0JbGRyCXIwLCBbc3AsICNTX1BTUl0KLQltc3IJc3Bzcl9jeHNmLCByMAotCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKwlsZHIJcjIsIFtzcCwgI1NfUFNSXQorCXN2Y19leGl0IHIyCQkJCUAgcmV0dXJuIGZyb20gZXhjZXB0aW9uCiAgVU5XSU5EKC5mbmVuZAkJKQogRU5EUFJPQyhfX2RhYnRfc3ZjKQogCkBAIC0yMDYsOSArMjE3LDYgQEAKIF9faXJxX3N2YzoKIAlzdmNfZW50cnkKIAotI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCWJsCXRyYWNlX2hhcmRpcnFzX29mZgotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKIAlnZXRfdGhyZWFkX2luZm8gdHNrCiAJbGRyCXI4LCBbdHNrLCAjVElfUFJFRU1QVF0JCUAgZ2V0IHByZWVtcHQgY291bnQKQEAgLTIyNSwxMyArMjMzLDEyIEBACiAJdHN0CXIwLCAjX1RJRl9ORUVEX1JFU0NIRUQKIAlibG5lCXN2Y19wcmVlbXB0CiAjZW5kaWYKLQlsZHIJcjAsIFtzcCwgI1NfUFNSXQkJQCBpcnFzIGFyZSBhbHJlYWR5IGRpc2FibGVkCi0JbXNyCXNwc3JfY3hzZiwgcjAKKwlsZHIJcjQsIFtzcCwgI1NfUFNSXQkJQCBpcnFzIGFyZSBhbHJlYWR5IGRpc2FibGVkCiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JdHN0CXIwLCAjUFNSX0lfQklUCisJdHN0CXI0LCAjUFNSX0lfQklUCiAJYmxlcQl0cmFjZV9oYXJkaXJxc19vbgogI2VuZGlmCi0JbGRtaWEJc3AsIHtyMCAtIHBjfV4JCQlAIGxvYWQgcjAgLSBwYywgY3BzcgorCXN2Y19leGl0IHI0CQkJCUAgcmV0dXJuIGZyb20gZXhjZXB0aW9uCiAgVU5XSU5EKC5mbmVuZAkJKQogRU5EUFJPQyhfX2lycV9zdmMpCiAKQEAgLTI2Niw3ICsyNzMsNyBAQAogCUAgIHIwIC0gaW5zdHJ1Y3Rpb24KIAlACiAJbGRyCXIwLCBbcjIsICMtNF0KLQlhZHIJcjksIDFmCisJYWRyCXI5LCBCU1lNKDFmKQogCWJsCWNhbGxfZnBlCiAKIAltb3YJcjAsIHNwCQkJCUAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MKQEAgLTI4MCw5ICsyODcsOCBAQAogCUAKIAlAIHJlc3RvcmUgU1BTUiBhbmQgcmVzdGFydCB0aGUgaW5zdHJ1Y3Rpb24KIAlACi0JbGRyCWxyLCBbc3AsICNTX1BTUl0JCUAgR2V0IFNWQyBjcHNyCi0JbXNyCXNwc3JfY3hzZiwgbHIKLQlsZG1pYQlzcCwge3IwIC0gcGN9XgkJCUAgUmVzdG9yZSBTVkMgcmVnaXN0ZXJzCisJbGRyCXIyLCBbc3AsICNTX1BTUl0JCUAgR2V0IFNWQyBjcHNyCisJc3ZjX2V4aXQgcjIJCQkJQCByZXR1cm4gZnJvbSBleGNlcHRpb24KICBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9fdW5kX3N2YykKIApAQCAtMzIzLDkgKzMyOSw4IEBACiAJQAogCUAgcmVzdG9yZSBTUFNSIGFuZCByZXN0YXJ0IHRoZSBpbnN0cnVjdGlvbgogCUAKLQlsZHIJcjAsIFtzcCwgI1NfUFNSXQotCW1zcglzcHNyX2N4c2YsIHIwCi0JbGRtaWEJc3AsIHtyMCAtIHBjfV4JCQlAIGxvYWQgcjAgLSBwYywgY3BzcgorCWxkcglyMiwgW3NwLCAjU19QU1JdCisJc3ZjX2V4aXQgcjIJCQkJQCByZXR1cm4gZnJvbSBleGNlcHRpb24KICBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9fcGFidF9zdmMpCiAKQEAgLTM1Myw3ICszNTgsOCBAQAogIFVOV0lORCguZm5zdGFydAkpCiAgVU5XSU5EKC5jYW50dW53aW5kCSkJQCBkb24ndCB1bndpbmQgdGhlIHVzZXIgc3BhY2UKIAlzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCi0Jc3RtaWIJc3AsIHtyMSAtIHIxMn0KKyBBUk0oCXN0bWliCXNwLCB7cjEgLSByMTJ9CSkKKyBUSFVNQigJc3RtaWEJc3AsIHtyMCAtIHIxMn0JKQogCiAJbGRtaWEJcjAsIHtyMSAtIHIzfQogCWFkZAlyMCwgc3AsICNTX1BDCQlAIGhlcmUgZm9yIGludGVybG9jayBhdm9pZGFuY2UKQEAgLTM3Miw3ICszNzgsOCBAQAogCUAgQWxzbywgc2VwYXJhdGVseSBzYXZlIHNwX3VzciBhbmQgbHJfdXNyCiAJQAogCXN0bWlhCXIwLCB7cjIgLSByNH0KLQlzdG1kYglyMCwge3NwLCBscn1eCisgQVJNKAlzdG1kYglyMCwge3NwLCBscn1eCQkJKQorIFRIVU1CKAlzdG9yZV91c2VyX3NwX2xyIHIwLCByMSwgU19TUCAtIFNfUEMJKQogCiAJQAogCUAgRW5hYmxlIHRoZSBhbGlnbm1lbnQgdHJhcCB3aGlsZSBpbiBrZXJuZWwgbW9kZQpAQCAtMzgzLDYgKzM5MCw4IEBACiAJQCBDbGVhciBGUCB0byBtYXJrIHRoZSBmaXJzdCBzdGFjayBmcmFtZQogCUAKIAl6ZXJvX2ZwCisKKwlhc21fdHJhY2VfaGFyZGlycXNfb2ZmCiAJLmVuZG0KIAogCS5tYWNybwlrdXNlcl9jbXB4Y2hnX2NoZWNrCkBAIC00MjcsNyArNDM2LDcgQEAKIAlACiAJZW5hYmxlX2lycQogCW1vdglyMiwgc3AKLQlhZHIJbHIsIHJldF9mcm9tX2V4Y2VwdGlvbgorCWFkcglsciwgQlNZTShyZXRfZnJvbV9leGNlcHRpb24pCiAJYglkb19EYXRhQWJvcnQKICBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9fZGFidF91c3IpCkBAIC00MzcsOSArNDQ2LDYgQEAKIAl1c3JfZW50cnkKIAlrdXNlcl9jbXB4Y2hnX2NoZWNrCiAKLSNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQlibAl0cmFjZV9oYXJkaXJxc19vZmYKLSNlbmRpZgogCWdldF90aHJlYWRfaW5mbyB0c2sKICNpZmRlZiBDT05GSUdfUFJFRU1QVAogCWxkcglyOCwgW3RzaywgI1RJX1BSRUVNUFRdCQlAIGdldCBwcmVlbXB0IGNvdW50CkBAIC00NTIsNyArNDU4LDkgQEAKIAlsZHIJcjAsIFt0c2ssICNUSV9QUkVFTVBUXQogCXN0cglyOCwgW3RzaywgI1RJX1BSRUVNUFRdCiAJdGVxCXIwLCByNwotCXN0cm5lCXIwLCBbcjAsIC1yMF0KKyBBUk0oCXN0cm5lCXIwLCBbcjAsIC1yMF0JKQorIFRIVU1CKAltb3ZuZQlyMCwgIzAJCSkKKyBUSFVNQigJc3RybmUJcjAsIFtyMF0JKQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiAJYmwJdHJhY2VfaGFyZGlycXNfb24KQEAgLTQ3Niw5ICs0ODQsMTAgQEAKIAlACiAJQCAgcjAgLSBpbnN0cnVjdGlvbgogCUAKLQlhZHIJcjksIHJldF9mcm9tX2V4Y2VwdGlvbgotCWFkcglsciwgX191bmRfdXNyX3Vua25vd24KKwlhZHIJcjksIEJTWU0ocmV0X2Zyb21fZXhjZXB0aW9uKQorCWFkcglsciwgQlNZTShfX3VuZF91c3JfdW5rbm93bikKIAl0c3QJcjMsICNQU1JfVF9CSVQJCQlAIFRodW1iIG1vZGU/CisJaXRldAllcQkJCQlAIGV4cGxpY2l0IElUIG5lZWRlZCBmb3IgdGhlIDFmIGxhYmVsCiAJc3ViZXEJcjQsIHIyLCAjNAkJCUAgQVJNIGluc3RyIGF0IExSIC0gNAogCXN1Ym5lCXI0LCByMiwgIzIJCQlAIFRodW1iIGluc3RyIGF0IExSIC0gMgogMToJbGRyZXF0CXIwLCBbcjRdCkBAIC00ODgsNyArNDk3LDEwIEBACiAJYmVxCWNhbGxfZnBlCiAJQCBUaHVtYiBpbnN0cnVjdGlvbgogI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA3Ci0yOglsZHJodAlyNSwgW3I0XSwgIzIKKzI6CisgQVJNKAlsZHJodAlyNSwgW3I0XSwgIzIJKQorIFRIVU1CKAlsZHJodAlyNSwgW3I0XQkpCisgVEhVTUIoCWFkZAlyNCwgcjQsICMyCSkKIAlhbmQJcjAsIHI1LCAjMHhmODAwCQkJQCBtYXNrIGJpdHMgMTExeCB4Li4uIC4uLi4gLi4uLgogCWNtcAlyMCwgIzB4ZTgwMAkJCUAgMzJiaXQgaW5zdHJ1Y3Rpb24gaWYgeHggIT0gMAogCWJsbwlfX3VuZF91c3JfdW5rbm93bgpAQCAtNTc3LDkgKzU4OSwxMSBAQAogCW1vdmVxCXBjLCBscgogCWdldF90aHJlYWRfaW5mbyByMTAJCQlAIGdldCBjdXJyZW50IHRocmVhZAogCWFuZAlyOCwgcjAsICMweDAwMDAwZjAwCQlAIG1hc2sgb3V0IENQIG51bWJlcgorIFRIVU1CKAlsc3IJcjgsIHI4LCAjOAkJKQogCW1vdglyNywgIzEKIAlhZGQJcjYsIHIxMCwgI1RJX1VTRURfQ1AKLQlzdHJiCXI3LCBbcjYsIHI4LCBsc3IgIzhdCQlAIHNldCBhcHByb3ByaWF0ZSB1c2VkX2NwW10KKyBBUk0oCXN0cmIJcjcsIFtyNiwgcjgsIGxzciAjOF0JKQlAIHNldCBhcHByb3ByaWF0ZSB1c2VkX2NwW10KKyBUSFVNQigJc3RyYglyNywgW3I2LCByOF0JCSkJQCBzZXQgYXBwcm9wcmlhdGUgdXNlZF9jcFtdCiAjaWZkZWYgQ09ORklHX0lXTU1YVAogCUAgVGVzdCBpZiB3ZSBuZWVkIHRvIGdpdmUgYWNjZXNzIHRvIGlXTU1YdCBjb3Byb2Nlc3NvcnMKIAlsZHIJcjUsIFtyMTAsICNUSV9GTEFHU10KQEAgLTU4NywzNiArNjAxLDM4IEBACiAJbW92Y3NzCXI3LCByNSwgbHNyICMoVElGX1VTSU5HX0lXTU1YVCArIDEpCiAJYmNzCWl3bW14dF90YXNrX2VuYWJsZQogI2VuZGlmCi0JYWRkCXBjLCBwYywgcjgsIGxzciAjNgotCW1vdglyMCwgcjAKKyBBUk0oCWFkZAlwYywgcGMsIHI4LCBsc3IgIzYJKQorIFRIVU1CKAlsc2wJcjgsIHI4LCAjMgkJKQorIFRIVU1CKAlhZGQJcGMsIHI4CQkJKQorCW5vcAogCi0JbW92CXBjLCBscgkJCQlAIENQIzAKLQliCWRvX2ZwZQkJCQlAIENQIzEgKEZQRSkKLQliCWRvX2ZwZQkJCQlAIENQIzIgKEZQRSkKLQltb3YJcGMsIGxyCQkJCUAgQ1AjMworCVcobW92KQlwYywgbHIJCQkJQCBDUCMwCisJVyhiKQlkb19mcGUJCQkJQCBDUCMxIChGUEUpCisJVyhiKQlkb19mcGUJCQkJQCBDUCMyIChGUEUpCisJVyhtb3YpCXBjLCBscgkJCQlAIENQIzMKICNpZmRlZiBDT05GSUdfQ1JVTkNICiAJYgljcnVuY2hfdGFza19lbmFibGUJCUAgQ1AjNCAoTWF2ZXJpY2tDcnVuY2gpCiAJYgljcnVuY2hfdGFza19lbmFibGUJCUAgQ1AjNSAoTWF2ZXJpY2tDcnVuY2gpCiAJYgljcnVuY2hfdGFza19lbmFibGUJCUAgQ1AjNiAoTWF2ZXJpY2tDcnVuY2gpCiAjZWxzZQotCW1vdglwYywgbHIJCQkJQCBDUCM0Ci0JbW92CXBjLCBscgkJCQlAIENQIzUKLQltb3YJcGMsIGxyCQkJCUAgQ1AjNgorCVcobW92KQlwYywgbHIJCQkJQCBDUCM0CisJVyhtb3YpCXBjLCBscgkJCQlAIENQIzUKKwlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjNgogI2VuZGlmCi0JbW92CXBjLCBscgkJCQlAIENQIzcKLQltb3YJcGMsIGxyCQkJCUAgQ1AjOAotCW1vdglwYywgbHIJCQkJQCBDUCM5CisJVyhtb3YpCXBjLCBscgkJCQlAIENQIzcKKwlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjOAorCVcobW92KQlwYywgbHIJCQkJQCBDUCM5CiAjaWZkZWYgQ09ORklHX1ZGUAotCWIJZG9fdmZwCQkJCUAgQ1AjMTAgKFZGUCkKLQliCWRvX3ZmcAkJCQlAIENQIzExIChWRlApCisJVyhiKQlkb192ZnAJCQkJQCBDUCMxMCAoVkZQKQorCVcoYikJZG9fdmZwCQkJCUAgQ1AjMTEgKFZGUCkKICNlbHNlCi0JbW92CXBjLCBscgkJCQlAIENQIzEwIChWRlApCi0JbW92CXBjLCBscgkJCQlAIENQIzExIChWRlApCisJVyhtb3YpCXBjLCBscgkJCQlAIENQIzEwIChWRlApCisJVyhtb3YpCXBjLCBscgkJCQlAIENQIzExIChWRlApCiAjZW5kaWYKLQltb3YJcGMsIGxyCQkJCUAgQ1AjMTIKLQltb3YJcGMsIGxyCQkJCUAgQ1AjMTMKLQltb3YJcGMsIGxyCQkJCUAgQ1AjMTQgKERlYnVnKQotCW1vdglwYywgbHIJCQkJQCBDUCMxNSAoQ29udHJvbCkKKwlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTIKKwlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTMKKwlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTQgKERlYnVnKQorCVcobW92KQlwYywgbHIJCQkJQCBDUCMxNSAoQ29udHJvbCkKIAogI2lmZGVmIENPTkZJR19ORU9OCiAJLmFsaWduCTYKQEAgLTY2Nyw3ICs2ODMsNyBAQAogX191bmRfdXNyX3Vua25vd246CiAJZW5hYmxlX2lycQogCW1vdglyMCwgc3AKLQlhZHIJbHIsIHJldF9mcm9tX2V4Y2VwdGlvbgorCWFkcglsciwgQlNZTShyZXRfZnJvbV9leGNlcHRpb24pCiAJYglkb191bmRlZmluc3RyCiBFTkRQUk9DKF9fdW5kX3Vzcl91bmtub3duKQogCkBAIC03MTEsNyArNzI3LDEwIEBACiAgVU5XSU5EKC5jYW50dW53aW5kCSkKIAlhZGQJaXAsIHIxLCAjVElfQ1BVX1NBVkUKIAlsZHIJcjMsIFtyMiwgI1RJX1RQX1ZBTFVFXQotCXN0bWlhCWlwISwge3I0IC0gc2wsIGZwLCBzcCwgbHJ9CUAgU3RvcmUgbW9zdCByZWdzIG9uIHN0YWNrCisgQVJNKAlzdG1pYQlpcCEsIHtyNCAtIHNsLCBmcCwgc3AsIGxyfSApCUAgU3RvcmUgbW9zdCByZWdzIG9uIHN0YWNrCisgVEhVTUIoCXN0bWlhCWlwISwge3I0IC0gc2wsIGZwfQkgICApCUAgU3RvcmUgbW9zdCByZWdzIG9uIHN0YWNrCisgVEhVTUIoCXN0cglzcCwgW2lwXSwgIzQJCSAgICkKKyBUSFVNQigJc3RyCWxyLCBbaXBdLCAjNAkJICAgKQogI2lmZGVmIENPTkZJR19NTVUKIAlsZHIJcjYsIFtyMiwgI1RJX0NQVV9ET01BSU5dCiAjZW5kaWYKQEAgLTczNiw4ICs3NTUsMTIgQEAKIAlsZHIJcjAsID10aHJlYWRfbm90aWZ5X2hlYWQKIAltb3YJcjEsICNUSFJFQURfTk9USUZZX1NXSVRDSAogCWJsCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluCisgVEhVTUIoCW1vdglpcCwgcjQJCQkgICApCiAJbW92CXIwLCByNQotCWxkbWlhCXI0LCB7cjQgLSBzbCwgZnAsIHNwLCBwY30JQCBMb2FkIGFsbCByZWdzIHNhdmVkIHByZXZpb3VzbHkKKyBBUk0oCWxkbWlhCXI0LCB7cjQgLSBzbCwgZnAsIHNwLCBwY30gICkJQCBMb2FkIGFsbCByZWdzIHNhdmVkIHByZXZpb3VzbHkKKyBUSFVNQigJbGRtaWEJaXAhLCB7cjQgLSBzbCwgZnB9CSAgICkJQCBMb2FkIGFsbCByZWdzIHNhdmVkIHByZXZpb3VzbHkKKyBUSFVNQigJbGRyCXNwLCBbaXBdLCAjNAkJICAgKQorIFRIVU1CKAlsZHIJcGMsIFtpcF0JCSAgICkKICBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9fc3dpdGNoX3RvKQogCkBAIC03NzIsNiArNzk1LDcgQEAKICAqIGlmIHlvdXIgY29tcGlsZWQgY29kZSBpcyBub3QgZ29pbmcgdG8gdXNlIHRoZSBuZXcgaW5zdHJ1Y3Rpb25zIGZvciBvdGhlcgogICogcHVycG9zZS4KICAqLworIFRIVU1CKAkuYXJtCSkKIAogCS5tYWNybwl1c3JfcmV0LCByZWcKICNpZmRlZiBDT05GSUdfQVJNX1RIVU1CCkBAIC0xMDIwLDYgKzEwNDQsNyBAQAogCS5nbG9ibAlfX2t1c2VyX2hlbHBlcl9lbmQKIF9fa3VzZXJfaGVscGVyX2VuZDoKIAorIFRIVU1CKAkudGh1bWIJKQogCiAvKgogICogVmVjdG9yIHN0dWJzLgpAQCAtMTA1NCwxNyArMTA3OSwyMyBAQAogCUAgUHJlcGFyZSBmb3IgU1ZDMzIgbW9kZS4gIElSUXMgcmVtYWluIGRpc2FibGVkLgogCUAKIAltcnMJcjAsIGNwc3IKLQllb3IJcjAsIHIwLCAjKFxtb2RlIF4gU1ZDX01PREUpCisJZW9yCXIwLCByMCwgIyhcbW9kZSBeIFNWQ19NT0RFIHwgUFNSX0lTRVRTVEFURSkKIAltc3IJc3Bzcl9jeHNmLCByMAogCiAJQAogCUAgdGhlIGJyYW5jaCB0YWJsZSBtdXN0IGltbWVkaWF0ZWx5IGZvbGxvdyB0aGlzIGNvZGUKIAlACiAJYW5kCWxyLCBsciwgIzB4MGYKKyBUSFVNQigJYWRyCXIwLCAxZgkJCSkKKyBUSFVNQigJbGRyCWxyLCBbcjAsIGxyLCBsc2wgIzJdCSkKIAltb3YJcjAsIHNwCi0JbGRyCWxyLCBbcGMsIGxyLCBsc2wgIzJdCisgQVJNKAlsZHIJbHIsIFtwYywgbHIsIGxzbCAjMl0JKQogCW1vdnMJcGMsIGxyCQkJQCBicmFuY2ggdG8gaGFuZGxlciBpbiBTVkMgbW9kZQogRU5EUFJPQyh2ZWN0b3JfXG5hbWUpCisKKwkuYWxpZ24JMgorCUAgaGFuZGxlciBhZGRyZXNzZXMgZm9sbG93IHRoaXMgbGFiZWwKKzE6CiAJLmVuZG0KIAogCS5nbG9ibAlfX3N0dWJzX3N0YXJ0CkBAIC0xMjAyLDE0ICsxMjMzLDE2IEBACiAKIAkuZ2xvYmwJX192ZWN0b3JzX3N0YXJ0CiBfX3ZlY3RvcnNfc3RhcnQ6Ci0Jc3dpCVNZU19FUlJPUjAKLQliCXZlY3Rvcl91bmQgKyBzdHVic19vZmZzZXQKLQlsZHIJcGMsIC5MQ3Zzd2kgKyBzdHVic19vZmZzZXQKLQliCXZlY3Rvcl9wYWJ0ICsgc3R1YnNfb2Zmc2V0Ci0JYgl2ZWN0b3JfZGFidCArIHN0dWJzX29mZnNldAotCWIJdmVjdG9yX2FkZHJleGNwdG4gKyBzdHVic19vZmZzZXQKLQliCXZlY3Rvcl9pcnEgKyBzdHVic19vZmZzZXQKLQliCXZlY3Rvcl9maXEgKyBzdHVic19vZmZzZXQKKyBBUk0oCXN3aQlTWVNfRVJST1IwCSkKKyBUSFVNQigJc3ZjCSMwCQkpCisgVEhVTUIoCW5vcAkJCSkKKwlXKGIpCXZlY3Rvcl91bmQgKyBzdHVic19vZmZzZXQKKwlXKGxkcikJcGMsIC5MQ3Zzd2kgKyBzdHVic19vZmZzZXQKKwlXKGIpCXZlY3Rvcl9wYWJ0ICsgc3R1YnNfb2Zmc2V0CisJVyhiKQl2ZWN0b3JfZGFidCArIHN0dWJzX29mZnNldAorCVcoYikJdmVjdG9yX2FkZHJleGNwdG4gKyBzdHVic19vZmZzZXQKKwlXKGIpCXZlY3Rvcl9pcnEgKyBzdHVic19vZmZzZXQKKwlXKGIpCXZlY3Rvcl9maXEgKyBzdHVic19vZmZzZXQKIAogCS5nbG9ibAlfX3ZlY3RvcnNfZW5kCiBfX3ZlY3RvcnNfZW5kOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCmluZGV4IDhjM2RlMWEuLjgwN2NmZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTMzLDE0ICszMyw3IEBACiAJLyogcGVyZm9ybSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYWN0aW9ucyBiZWZvcmUgdXNlciByZXR1cm4gKi8KIAlhcmNoX3JldF90b191c2VyIHIxLCBscgogCi0JQCBmYXN0X3Jlc3RvcmVfdXNlcl9yZWdzCi0JbGRyCXIxLCBbc3AsICNTX09GRiArIFNfUFNSXQlAIGdldCBjYWxsaW5nIGNwc3IKLQlsZHIJbHIsIFtzcCwgI1NfT0ZGICsgU19QQ10hCUAgZ2V0IHBjCi0JbXNyCXNwc3JfY3hzZiwgcjEJCQlAIHNhdmUgaW4gc3Bzcl9zdmMKLQlsZG1kYglzcCwge3IxIC0gbHJ9XgkJCUAgZ2V0IGNhbGxpbmcgcjEgLSBscgotCW1vdglyMCwgcjAKLQlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFIC0gU19QQwotCW1vdnMJcGMsIGxyCQkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKKwlyZXN0b3JlX3VzZXJfcmVncyBmYXN0ID0gMSwgb2Zmc2V0ID0gU19PRkYKICBVTldJTkQoLmZuZW5kCQkpCiAKIC8qCkBAIC01MSw3ICs0NCw3IEBACiB3b3JrX3BlbmRpbmc6CiAJdHN0CXIxLCAjX1RJRl9ORUVEX1JFU0NIRUQKIAlibmUJd29ya19yZXNjaGVkCi0JdHN0CXIxLCAjX1RJRl9TSUdQRU5ESU5HCisJdHN0CXIxLCAjX1RJRl9TSUdQRU5ESU5HfF9USUZfTk9USUZZX1JFU1VNRQogCWJlcQlub193b3JrX3BlbmRpbmcKIAltb3YJcjAsIHNwCQkJCUAgJ3JlZ3MnCiAJbW92CXIyLCB3aHkJCQkJQCAnc3lzY2FsbCcKQEAgLTczLDE0ICs2Niw3IEBACiAJLyogcGVyZm9ybSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYWN0aW9ucyBiZWZvcmUgdXNlciByZXR1cm4gKi8KIAlhcmNoX3JldF90b191c2VyIHIxLCBscgogCi0JQCBzbG93X3Jlc3RvcmVfdXNlcl9yZWdzCi0JbGRyCXIxLCBbc3AsICNTX1BTUl0JCUAgZ2V0IGNhbGxpbmcgY3BzcgotCWxkcglsciwgW3NwLCAjU19QQ10hCQlAIGdldCBwYwotCW1zcglzcHNyX2N4c2YsIHIxCQkJQCBzYXZlIGluIHNwc3Jfc3ZjCi0JbGRtZGIJc3AsIHtyMCAtIGxyfV4JCQlAIGdldCBjYWxsaW5nIHIwIC0gbHIKLQltb3YJcjAsIHIwCi0JYWRkCXNwLCBzcCwgI1NfRlJBTUVfU0laRSAtIFNfUEMKLQltb3ZzCXBjLCBscgkJCQlAIHJldHVybiAmIG1vdmUgc3Bzcl9zdmMgaW50byBjcHNyCisJcmVzdG9yZV91c2VyX3JlZ3MgZmFzdCA9IDAsIG9mZnNldCA9IDAKIEVORFBST0MocmV0X3RvX3VzZXIpCiAKIC8qCkBAIC0xMzIsNiArMTE4LDI1IEBACiAKICNlbHNlCiAKK0VOVFJZKF9fZ251X21jb3VudF9uYykKKwlzdG1kYiBzcCEsIHtyMC1yMywgbHJ9CisJbGRyIHIwLCA9ZnRyYWNlX3RyYWNlX2Z1bmN0aW9uCisJbGRyIHIyLCBbcjBdCisJYWRyIHIwLCBmdHJhY2Vfc3R1YgorCWNtcCByMCwgcjIKKwlibmUgZ251X3RyYWNlCisJbGRtaWEgc3AhLCB7cjAtcjMsIGlwLCBscn0KKwlieCBpcAorCitnbnVfdHJhY2U6CisJbGRyIHIxLCBbc3AsICMyMF0JCQlAIGxyIG9mIGluc3RydW1lbnRlZCByb3V0aW5lCisJbW92IHIwLCBscgorCXN1YiByMCwgcjAsICNNQ09VTlRfSU5TTl9TSVpFCisJbW92IGxyLCBwYworCW1vdiBwYywgcjIKKwlsZG1pYSBzcCEsIHtyMC1yMywgaXAsIGxyfQorCWJ4IGlwCisKIEVOVFJZKG1jb3VudCkKIAlzdG1kYiBzcCEsIHtyMC1yMywgbHJ9CiAJbGRyIHIwLCA9ZnRyYWNlX3RyYWNlX2Z1bmN0aW9uCkBAIC0xODIsOCArMTg3LDEwIEBACiBFTlRSWSh2ZWN0b3Jfc3dpKQogCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKIAlzdG1pYQlzcCwge3IwIC0gcjEyfQkJCUAgQ2FsbGluZyByMCAtIHIxMgotCWFkZAlyOCwgc3AsICNTX1BDCi0Jc3RtZGIJcjgsIHtzcCwgbHJ9XgkJCUAgQ2FsbGluZyBzcCwgbHIKKyBBUk0oCWFkZAlyOCwgc3AsICNTX1BDCQkpCisgQVJNKAlzdG1kYglyOCwge3NwLCBscn1eCQkpCUAgQ2FsbGluZyBzcCwgbHIKKyBUSFVNQigJbW92CXI4LCBzcAkJCSkKKyBUSFVNQigJc3RvcmVfdXNlcl9zcF9sciByOCwgcjEwLCBTX1NQCSkJQCBjYWxsaW5nIHNwLCBscgogCW1ycwlyOCwgc3BzcgkJCUAgY2FsbGVkIGZyb20gbm9uLUZJUSBtb2RlLCBzbyBvay4KIAlzdHIJbHIsIFtzcCwgI1NfUENdCQkJQCBTYXZlIGNhbGxpbmcgUEMKIAlzdHIJcjgsIFtzcCwgI1NfUFNSXQkJQCBTYXZlIENQU1IKQEAgLTI3Miw3ICsyNzksNyBAQAogCWJuZQlfX3N5c190cmFjZQogCiAJY21wCXNjbm8sICNOUl9zeXNjYWxscwkJQCBjaGVjayB1cHBlciBzeXNjYWxsIGxpbWl0Ci0JYWRyCWxyLCByZXRfZmFzdF9zeXNjYWxsCQlAIHJldHVybiBhZGRyZXNzCisJYWRyCWxyLCBCU1lNKHJldF9mYXN0X3N5c2NhbGwpCUAgcmV0dXJuIGFkZHJlc3MKIAlsZHJjYwlwYywgW3RibCwgc2NubywgbHNsICMyXQkJQCBjYWxsIHN5c18qIHJvdXRpbmUKIAogCWFkZAlyMSwgc3AsICNTX09GRgpAQCAtMjkzLDcgKzMwMCw3IEBACiAJbW92CXIwLCAjMAkJCQlAIHRyYWNlIGVudHJ5IFtJUCA9IDBdCiAJYmwJc3lzY2FsbF90cmFjZQogCi0JYWRyCWxyLCBfX3N5c190cmFjZV9yZXR1cm4JCUAgcmV0dXJuIGFkZHJlc3MKKwlhZHIJbHIsIEJTWU0oX19zeXNfdHJhY2VfcmV0dXJuKQlAIHJldHVybiBhZGRyZXNzCiAJbW92CXNjbm8sIHIwCQkJQCBzeXNjYWxsIG51bWJlciAocG9zc2libHkgbmV3KQogCWFkZAlyMSwgc3AsICNTX1IwICsgU19PRkYJCUAgcG9pbnRlciB0byByZWdzCiAJY21wCXNjbm8sICNOUl9zeXNjYWxscwkJQCBjaGVjayB1cHBlciBzeXNjYWxsIGxpbWl0CkBAIC0zNzMsMTYgKzM4MCw2IEBACiAJCWIJc3lzX2Nsb25lCiBFTkRQUk9DKHN5c19jbG9uZV93cmFwcGVyKQogCi1zeXNfc2lnc3VzcGVuZF93cmFwcGVyOgotCQlhZGQJcjMsIHNwLCAjU19PRkYKLQkJYglzeXNfc2lnc3VzcGVuZAotRU5EUFJPQyhzeXNfc2lnc3VzcGVuZF93cmFwcGVyKQotCi1zeXNfcnRfc2lnc3VzcGVuZF93cmFwcGVyOgotCQlhZGQJcjIsIHNwLCAjU19PRkYKLQkJYglzeXNfcnRfc2lnc3VzcGVuZAotRU5EUFJPQyhzeXNfcnRfc2lnc3VzcGVuZF93cmFwcGVyKQotCiBzeXNfc2lncmV0dXJuX3dyYXBwZXI6CiAJCWFkZAlyMCwgc3AsICNTX09GRgogCQliCXN5c19zaWdyZXR1cm4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUwppbmRleCA4N2FiNGUxLi5hNGVhZjRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCkBAIC0zNiwxMSArMzYsNiBAQAogI2VuZGlmCiAJLmVuZG0KIAotCS5tYWNybwlnZXRfdGhyZWFkX2luZm8sIHJkCi0JbW92CVxyZCwgc3AsIGxzciAjMTMKLQltb3YJXHJkLCBccmQsIGxzbCAjMTMKLQkuZW5kbQotCiAJLm1hY3JvCWFsaWdubWVudF90cmFwLCBydGVtcAogI2lmZGVmIENPTkZJR19BTElHTk1FTlRfVFJBUAogCWxkcglccnRlbXAsIC5MQ2NyYWxpZ24KQEAgLTQ5LDYgKzQ0LDkzIEBACiAjZW5kaWYKIAkuZW5kbQogCisJQAorCUAgU3RvcmUvbG9hZCB0aGUgVVNFUiBTUCBhbmQgTFIgcmVnaXN0ZXJzIGJ5IHN3aXRjaGluZyB0byB0aGUgU1lTCisJQCBtb2RlLiBVc2VmdWwgaW4gVGh1bWItMiBtb2RlIHdoZXJlICJzdG0vbGRtIHJkLCB7c3AsIGxyfV4iIGlzIG5vdAorCUAgYXZhaWxhYmxlLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBTVkMgbW9kZQorCUAKKwkubWFjcm8Jc3RvcmVfdXNlcl9zcF9sciwgcmQsIHJ0ZW1wLCBvZmZzZXQgPSAwCisJbXJzCVxydGVtcCwgY3BzcgorCWVvcglccnRlbXAsIFxydGVtcCwgIyhTVkNfTU9ERSBeIFNZU1RFTV9NT0RFKQorCW1zcgljcHNyX2MsIFxydGVtcAkJCUAgc3dpdGNoIHRvIHRoZSBTWVMgbW9kZQorCisJc3RyCXNwLCBbXHJkLCAjXG9mZnNldF0JCUAgc2F2ZSBzcF91c3IKKwlzdHIJbHIsIFtccmQsICNcb2Zmc2V0ICsgNF0JCUAgc2F2ZSBscl91c3IKKworCWVvcglccnRlbXAsIFxydGVtcCwgIyhTVkNfTU9ERSBeIFNZU1RFTV9NT0RFKQorCW1zcgljcHNyX2MsIFxydGVtcAkJCUAgc3dpdGNoIGJhY2sgdG8gdGhlIFNWQyBtb2RlCisJLmVuZG0KKworCS5tYWNybwlsb2FkX3VzZXJfc3BfbHIsIHJkLCBydGVtcCwgb2Zmc2V0ID0gMAorCW1ycwlccnRlbXAsIGNwc3IKKwllb3IJXHJ0ZW1wLCBccnRlbXAsICMoU1ZDX01PREUgXiBTWVNURU1fTU9ERSkKKwltc3IJY3Bzcl9jLCBccnRlbXAJCQlAIHN3aXRjaCB0byB0aGUgU1lTIG1vZGUKKworCWxkcglzcCwgW1xyZCwgI1xvZmZzZXRdCQlAIGxvYWQgc3BfdXNyCisJbGRyCWxyLCBbXHJkLCAjXG9mZnNldCArIDRdCQlAIGxvYWQgbHJfdXNyCisKKwllb3IJXHJ0ZW1wLCBccnRlbXAsICMoU1ZDX01PREUgXiBTWVNURU1fTU9ERSkKKwltc3IJY3Bzcl9jLCBccnRlbXAJCQlAIHN3aXRjaCBiYWNrIHRvIHRoZSBTVkMgbW9kZQorCS5lbmRtCisKKyNpZm5kZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKKwkubWFjcm8Jc3ZjX2V4aXQsIHJwc3IKKwltc3IJc3Bzcl9jeHNmLCBccnBzcgorCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKwkuZW5kbQorCisJLm1hY3JvCXJlc3RvcmVfdXNlcl9yZWdzLCBmYXN0ID0gMCwgb2Zmc2V0ID0gMAorCWxkcglyMSwgW3NwLCAjXG9mZnNldCArIFNfUFNSXQlAIGdldCBjYWxsaW5nIGNwc3IKKwlsZHIJbHIsIFtzcCwgI1xvZmZzZXQgKyBTX1BDXSEJQCBnZXQgcGMKKwltc3IJc3Bzcl9jeHNmLCByMQkJCUAgc2F2ZSBpbiBzcHNyX3N2YworCS5pZglcZmFzdAorCWxkbWRiCXNwLCB7cjEgLSBscn1eCQkJQCBnZXQgY2FsbGluZyByMSAtIGxyCisJLmVsc2UKKwlsZG1kYglzcCwge3IwIC0gbHJ9XgkJCUAgZ2V0IGNhbGxpbmcgcjAgLSBscgorCS5lbmRpZgorCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUgLSBTX1BDCisJbW92cwlwYywgbHIJCQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgorCS5lbmRtCisKKwkubWFjcm8JZ2V0X3RocmVhZF9pbmZvLCByZAorCW1vdglccmQsIHNwLCBsc3IgIzEzCisJbW92CVxyZCwgXHJkLCBsc2wgIzEzCisJLmVuZG0KKyNlbHNlCS8qIENPTkZJR19USFVNQjJfS0VSTkVMICovCisJLm1hY3JvCXN2Y19leGl0LCBycHNyCisJbGRyCXIwLCBbc3AsICNTX1NQXQkJCUAgdG9wIG9mIHRoZSBzdGFjaworCWxkcglyMSwgW3NwLCAjU19QQ10JCQlAIHJldHVybiBhZGRyZXNzCisJdHN0CXIwLCAjNAkJCQlAIG9yaWcgc3RhY2sgOC1ieXRlIGFsaWduZWQ/CisJc3RtZGIJcjAsIHtyMSwgXHJwc3J9CQkJQCByZmUgY29udGV4dAorCWxkbWlhCXNwLCB7cjAgLSByMTJ9CisJbGRyCWxyLCBbc3AsICNTX0xSXQorCWFkZGVxCXNwLCBzcCwgI1NfRlJBTUVfU0laRSAtIDgJQCBhbGlnbmVkCisJYWRkbmUJc3AsIHNwLCAjU19GUkFNRV9TSVpFIC0gNAlAIG5vdCBhbGlnbmVkCisJcmZlaWEJc3AhCisJLmVuZG0KKworCS5tYWNybwlyZXN0b3JlX3VzZXJfcmVncywgZmFzdCA9IDAsIG9mZnNldCA9IDAKKwltb3YJcjIsIHNwCisJbG9hZF91c2VyX3NwX2xyIHIyLCByMywgXG9mZnNldCArIFNfU1AJQCBjYWxsaW5nIHNwLCBscgorCWxkcglyMSwgW3NwLCAjXG9mZnNldCArIFNfUFNSXQlAIGdldCBjYWxsaW5nIGNwc3IKKwlsZHIJbHIsIFtzcCwgI1xvZmZzZXQgKyBTX1BDXQlAIGdldCBwYworCWFkZAlzcCwgc3AsICNcb2Zmc2V0ICsgU19TUAorCW1zcglzcHNyX2N4c2YsIHIxCQkJQCBzYXZlIGluIHNwc3Jfc3ZjCisJLmlmCVxmYXN0CisJbGRtZGIJc3AsIHtyMSAtIHIxMn0JCQlAIGdldCBjYWxsaW5nIHIxIC0gcjEyCisJLmVsc2UKKwlsZG1kYglzcCwge3IwIC0gcjEyfQkJCUAgZ2V0IGNhbGxpbmcgcjAgLSByMTIKKwkuZW5kaWYKKwlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFIC0gU19TUAorCW1vdnMJcGMsIGxyCQkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKKwkuZW5kbQorCisJLm1hY3JvCWdldF90aHJlYWRfaW5mbywgcmQKKwltb3YJXHJkLCBzcAorCWxzcglccmQsIFxyZCwgIzEzCisJbW92CVxyZCwgXHJkLCBsc2wgIzEzCisJLmVuZG0KKyNlbmRpZgkvKiAhQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KIAogLyoKICAqIFRoZXNlIGFyZSB0aGUgcmVnaXN0ZXJzIHVzZWQgaW4gdGhlIHN5c2NhbGwgaGFuZGxlciwgYW5kIGFsbG93IHVzIHRvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCmluZGV4IDk5MTk1MmMuLjkzYWQ1NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCkBAIC0xNCw2ICsxNCw3IEBACiAjZGVmaW5lIEFUQUdfQ09SRSAweDU0NDEwMDAxCiAjZGVmaW5lIEFUQUdfQ09SRV9TSVpFICgoMio0ICsgMyo0KSA+PiAyKQogCisJLmFsaWduCTIKIAkudHlwZQlfX3N3aXRjaF9kYXRhLCAlb2JqZWN0CiBfX3N3aXRjaF9kYXRhOgogCS5sb25nCV9fbW1hcF9zd2l0Y2hlZApAQCAtNTEsNyArNTIsOSBAQAogCXN0cmNjCWZwLCBbcjZdLCM0CiAJYmNjCTFiCiAKLQlsZG1pYQlyMywge3I0LCByNSwgcjYsIHI3LCBzcH0KKyBBUk0oCWxkbWlhCXIzLCB7cjQsIHI1LCByNiwgcjcsIHNwfSkKKyBUSFVNQigJbGRtaWEJcjMsIHtyNCwgcjUsIHI2LCByN30JKQorIFRIVU1CKAlsZHIJc3AsIFtyMywgIzE2XQkJKQogCXN0cglyOSwgW3I0XQkJCUAgU2F2ZSBwcm9jZXNzb3IgSUQKIAlzdHIJcjEsIFtyNV0JCQlAIFNhdmUgbWFjaGluZSB0eXBlCiAJc3RyCXIyLCBbcjZdCQkJQCBTYXZlIGF0YWdzIHBvaW50ZXIKQEAgLTE1NSw3ICsxNTgsOCBAQAogICovCiBfX2xvb2t1cF9wcm9jZXNzb3JfdHlwZToKIAlhZHIJcjMsIDNmCi0JbGRtZGEJcjMsIHtyNSAtIHI3fQorCWxkbWlhCXIzLCB7cjUgLSByN30KKwlhZGQJcjMsIHIzLCAjOAogCXN1YglyMywgcjMsIHI3CQkJQCBnZXQgb2Zmc2V0IGJldHdlZW4gdmlydCZwaHlzCiAJYWRkCXI1LCByNSwgcjMJCQlAIGNvbnZlcnQgdmlydCBhZGRyZXNzZXMgdG8KIAlhZGQJcjYsIHI2LCByMwkJCUAgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZQpAQCAtMTg1LDkgKzE4OSwxMCBAQAogICogTG9vayBpbiA8YXNtL3Byb2NpbmZvLmg+IGFuZCBhcmNoL2FybS9rZXJuZWwvYXJjaC5bY2hdIGZvcgogICogbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgX19wcm9jX2luZm8gYW5kIF9fYXJjaF9pbmZvIHN0cnVjdHVyZXMuCiAgKi8KLQkubG9uZwlfX3Byb2NfaW5mb19iZWdpbgorCS5hbGlnbgkyCiszOgkubG9uZwlfX3Byb2NfaW5mb19iZWdpbgogCS5sb25nCV9fcHJvY19pbmZvX2VuZAotMzoJLmxvbmcJLgorNDoJLmxvbmcJLgogCS5sb25nCV9fYXJjaF9pbmZvX2JlZ2luCiAJLmxvbmcJX19hcmNoX2luZm9fZW5kCiAKQEAgLTIwMyw3ICsyMDgsNyBAQAogICogIHI1ID0gbWFjaF9pbmZvIHBvaW50ZXIgaW4gcGh5c2ljYWwgYWRkcmVzcyBzcGFjZQogICovCiBfX2xvb2t1cF9tYWNoaW5lX3R5cGU6Ci0JYWRyCXIzLCAzYgorCWFkcglyMywgNGIKIAlsZG1pYQlyMywge3I0LCByNSwgcjZ9CiAJc3ViCXIzLCByMywgcjQJCQlAIGdldCBvZmZzZXQgYmV0d2VlbiB2aXJ0JnBoeXMKIAlhZGQJcjUsIHI1LCByMwkJCUAgY29udmVydCB2aXJ0IGFkZHJlc3NlcyB0bwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2hlYWQtbm9tbXUuUyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLW5vbW11LlMKaW5kZXggY2M4N2UxNy4uZTVkZmMyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2hlYWQtbm9tbXUuUworKysgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC1ub21tdS5TCkBAIC0zNCw3ICszNCw3IEBACiAgKi8KIAkuc2VjdGlvbiAiLnRleHQuaGVhZCIsICJheCIKIEVOVFJZKHN0ZXh0KQotCW1zcgljcHNyX2MsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERSBAIGVuc3VyZSBzdmMgbW9kZQorCXNldG1vZGUJUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUsIHI5IEAgZW5zdXJlIHN2YyBtb2RlCiAJCQkJCQlAIGFuZCBpcnFzIGRpc2FibGVkCiAjaWZuZGVmIENPTkZJR19DUFVfQ1AxNQogCWxkcglyOSwgPUNPTkZJR19QUk9DRVNTT1JfSUQKQEAgLTUwLDggKzUwLDEwIEBACiAKIAlsZHIJcjEzLCBfX3N3aXRjaF9kYXRhCQlAIGFkZHJlc3MgdG8ganVtcCB0byBhZnRlcgogCQkJCQkJQCB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZQotCWFkcglsciwgX19hZnRlcl9wcm9jX2luaXQJCUAgcmV0dXJuIChQSUMpIGFkZHJlc3MKLQlhZGQJcGMsIHIxMCwgI1BST0NJTkZPX0lOSVRGVU5DCisJYWRyCWxyLCBCU1lNKF9fYWZ0ZXJfcHJvY19pbml0KQlAIHJldHVybiAoUElDKSBhZGRyZXNzCisgQVJNKAlhZGQJcGMsIHIxMCwgI1BST0NJTkZPX0lOSVRGVU5DCSkKKyBUSFVNQigJYWRkCXIxMiwgcjEwLCAjUFJPQ0lORk9fSU5JVEZVTkMJKQorIFRIVU1CKAltb3YJcGMsIHIxMgkJCQkpCiBFTkRQUk9DKHN0ZXh0KQogCiAvKgpAQCAtNTksNyArNjEsMTAgQEAKICAqLwogX19hZnRlcl9wcm9jX2luaXQ6CiAjaWZkZWYgQ09ORklHX0NQVV9DUDE1Ci0JbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCByZWFkIGNvbnRyb2wgcmVnCisJLyoKKwkgKiBDUDE1IHN5c3RlbSBjb250cm9sIHJlZ2lzdGVyIHZhbHVlIHJldHVybmVkIGluIHIwIGZyb20KKwkgKiB0aGUgQ1BVIGluaXQgZnVuY3Rpb24uCisJICovCiAjaWZkZWYgQ09ORklHX0FMSUdOTUVOVF9UUkFQCiAJb3JyCXIwLCByMCwgI0NSX0EKICNlbHNlCkBAIC04Miw3ICs4Nyw4IEBACiAJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCB3cml0ZSBjb250cm9sIHJlZwogI2VuZGlmIC8qIENPTkZJR19DUFVfQ1AxNSAqLwogCi0JbW92CXBjLCByMTMJCQkJQCBjbGVhciB0aGUgQlNTIGFuZCBqdW1wCisJbW92CXIzLCByMTMKKwltb3YJcGMsIHIzCQkJCUAgY2xlYXIgdGhlIEJTUyBhbmQganVtcAogCQkJCQkJQCB0byBzdGFydF9rZXJuZWwKIEVORFBST0MoX19hZnRlcl9wcm9jX2luaXQpCiAJLmx0b3JnCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwppbmRleCAyMWUxN2RjLi4zOGNjYmUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKQEAgLTc2LDcgKzc2LDcgQEAKICAqLwogCS5zZWN0aW9uICIudGV4dC5oZWFkIiwgImF4IgogRU5UUlkoc3RleHQpCi0JbXNyCWNwc3JfYywgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFIEAgZW5zdXJlIHN2YyBtb2RlCisJc2V0bW9kZQlQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERSwgcjkgQCBlbnN1cmUgc3ZjIG1vZGUKIAkJCQkJCUAgYW5kIGlycXMgZGlzYWJsZWQKIAltcmMJcDE1LCAwLCByOSwgYzAsIGMwCQlAIGdldCBwcm9jZXNzb3IgaWQKIAlibAlfX2xvb2t1cF9wcm9jZXNzb3JfdHlwZQkJQCByNT1wcm9jaW5mbyByOT1jcHVpZApAQCAtOTcsOCArOTcsMTAgQEAKIAkgKi8KIAlsZHIJcjEzLCBfX3N3aXRjaF9kYXRhCQlAIGFkZHJlc3MgdG8ganVtcCB0byBhZnRlcgogCQkJCQkJQCBtbXUgaGFzIGJlZW4gZW5hYmxlZAotCWFkcglsciwgX19lbmFibGVfbW11CQlAIHJldHVybiAoUElDKSBhZGRyZXNzCi0JYWRkCXBjLCByMTAsICNQUk9DSU5GT19JTklURlVOQworCWFkcglsciwgQlNZTShfX2VuYWJsZV9tbXUpCQlAIHJldHVybiAoUElDKSBhZGRyZXNzCisgQVJNKAlhZGQJcGMsIHIxMCwgI1BST0NJTkZPX0lOSVRGVU5DCSkKKyBUSFVNQigJYWRkCXIxMiwgcjEwLCAjUFJPQ0lORk9fSU5JVEZVTkMJKQorIFRIVU1CKAltb3YJcGMsIHIxMgkJCQkpCiBFTkRQUk9DKHN0ZXh0KQogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKQpAQCAtMTEwLDcgKzExMiw3IEBACiAJICogdGhlIHByb2Nlc3NvciB0eXBlIC0gdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayB0aGUgbWFjaGluZSB0eXBlCiAJICogYXMgaXQgaGFzIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYnkgdGhlIHByaW1hcnkgcHJvY2Vzc29yLgogCSAqLwotCW1zcgljcHNyX2MsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQorCXNldG1vZGUJUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUsIHI5CiAJbXJjCXAxNSwgMCwgcjksIGMwLCBjMAkJQCBnZXQgcHJvY2Vzc29yIGlkCiAJYmwJX19sb29rdXBfcHJvY2Vzc29yX3R5cGUKIAltb3ZzCXIxMCwgcjUJCQkJQCBpbnZhbGlkIHByb2Nlc3Nvcj8KQEAgLTEyMSwxMiArMTIzLDE1IEBACiAJICogVXNlIHRoZSBwYWdlIHRhYmxlcyBzdXBwbGllZCBmcm9tICBfX2NwdV91cC4KIAkgKi8KIAlhZHIJcjQsIF9fc2Vjb25kYXJ5X2RhdGEKLQlsZG1pYQlyNCwge3I1LCByNywgcjEzfQkJQCBhZGRyZXNzIHRvIGp1bXAgdG8gYWZ0ZXIKKwlsZG1pYQlyNCwge3I1LCByNywgcjEyfQkJQCBhZGRyZXNzIHRvIGp1bXAgdG8gYWZ0ZXIKIAlzdWIJcjQsIHI0LCByNQkJCUAgbW11IGhhcyBiZWVuIGVuYWJsZWQKIAlsZHIJcjQsIFtyNywgcjRdCQkJQCBnZXQgc2Vjb25kYXJ5X2RhdGEucGdkaXIKLQlhZHIJbHIsIF9fZW5hYmxlX21tdQkJQCByZXR1cm4gYWRkcmVzcwotCWFkZAlwYywgcjEwLCAjUFJPQ0lORk9fSU5JVEZVTkMJQCBpbml0aWFsaXNlIHByb2Nlc3NvcgotCQkJCQkJQCAocmV0dXJuIGNvbnRyb2wgcmVnKQorCWFkcglsciwgQlNZTShfX2VuYWJsZV9tbXUpCQlAIHJldHVybiBhZGRyZXNzCisJbW92CXIxMywgcjEyCQkJQCBfX3NlY29uZGFyeV9zd2l0Y2hlZCBhZGRyZXNzCisgQVJNKAlhZGQJcGMsIHIxMCwgI1BST0NJTkZPX0lOSVRGVU5DCSkgQCBpbml0aWFsaXNlIHByb2Nlc3NvcgorCQkJCQkJICBAIChyZXR1cm4gY29udHJvbCByZWcpCisgVEhVTUIoCWFkZAlyMTIsIHIxMCwgI1BST0NJTkZPX0lOSVRGVU5DCSkKKyBUSFVNQigJbW92CXBjLCByMTIJCQkJKQogRU5EUFJPQyhzZWNvbmRhcnlfc3RhcnR1cCkKIAogCS8qCkBAIC0xOTMsOCArMTk4LDggQEAKIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIHdyaXRlIGNvbnRyb2wgcmVnCiAJbXJjCXAxNSwgMCwgcjMsIGMwLCBjMCwgMAkJQCByZWFkIGlkIHJlZwogCW1vdglyMywgcjMKLQltb3YJcjMsIHIzCi0JbW92CXBjLCByMTMKKwltb3YJcjMsIHIxMworCW1vdglwYywgcjMKIEVORFBST0MoX190dXJuX21tdV9vbikKIAogCkBAIC0yMzUsNyArMjQwLDggQEAKIAkgKiB3aWxsIGJlIHJlbW92ZWQgYnkgcGFnaW5nX2luaXQoKS4gIFdlIHVzZSBvdXIgY3VycmVudCBwcm9ncmFtCiAJICogY291bnRlciB0byBkZXRlcm1pbmUgY29ycmVzcG9uZGluZyBzZWN0aW9uIGJhc2UgYWRkcmVzcy4KIAkgKi8KLQltb3YJcjYsIHBjLCBsc3IgIzIwCQkJQCBzdGFydCBvZiBrZXJuZWwgc2VjdGlvbgorCW1vdglyNiwgcGMKKwltb3YJcjYsIHI2LCBsc3IgIzIwCQkJQCBzdGFydCBvZiBrZXJuZWwgc2VjdGlvbgogCW9ycglyMywgcjcsIHI2LCBsc2wgIzIwCQlAIGZsYWdzICsga2VybmVsIGJhc2UKIAlzdHIJcjMsIFtyNCwgcjYsIGxzbCAjMl0JCUAgaWRlbnRpdHkgbWFwcGluZwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKaW5kZXggYjdjMzQ5MC4uYzlhODYxOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKQEAgLTg2LDcgKzg2LDcgQEAKIHVubG9jazoKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwogCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfQUNPUk4KKyNpZmRlZiBDT05GSUdfRklRCiAJCXNob3dfZmlxX2xpc3QocCwgdik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYmFjMDNjOC4uZjI4YzVlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYwpAQCAtMTAyLDYgKzEwMiw3IEBACiAJCXVuc2lnbmVkIGxvbmcgbG9jOwogCQlFbGYzMl9TeW0gKnN5bTsKIAkJczMyIG9mZnNldDsKKwkJdTMyIHVwcGVyLCBsb3dlciwgc2lnbiwgajEsIGoyOwogCiAJCW9mZnNldCA9IEVMRjMyX1JfU1lNKHJlbC0+cl9pbmZvKTsKIAkJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gKHN5bXNlYy0+c2hfc2l6ZSAvIHNpemVvZihFbGYzMl9TeW0pKSkgewpAQCAtMTg0LDYgKzE4NSw1OCBAQAogCQkJCQkob2Zmc2V0ICYgMHgwZmZmKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgUl9BUk1fVEhNX0NBTEw6CisJCWNhc2UgUl9BUk1fVEhNX0pVTVAyNDoKKwkJCXVwcGVyID0gKih1MTYgKilsb2M7CisJCQlsb3dlciA9ICoodTE2ICopKGxvYyArIDIpOworCisJCQkvKgorCQkJICogMjUgYml0IHNpZ25lZCBhZGRyZXNzIHJhbmdlIChUaHVtYi0yIEJMIGFuZCBCLlcKKwkJCSAqIGluc3RydWN0aW9ucyk6CisJCQkgKiAgIFM6STE6STI6aW1tMTA6aW1tMTE6MAorCQkJICogd2hlcmU6CisJCQkgKiAgIFMgICAgID0gdXBwZXJbMTBdICAgPSBvZmZzZXRbMjRdCisJCQkgKiAgIEkxICAgID0gfihKMSBeIFMpICAgPSBvZmZzZXRbMjNdCisJCQkgKiAgIEkyICAgID0gfihKMiBeIFMpICAgPSBvZmZzZXRbMjJdCisJCQkgKiAgIGltbTEwID0gdXBwZXJbOTowXSAgPSBvZmZzZXRbMjE6MTJdCisJCQkgKiAgIGltbTExID0gbG93ZXJbMTA6MF0gPSBvZmZzZXRbMTE6MV0KKwkJCSAqICAgSjEgICAgPSBsb3dlclsxM10KKwkJCSAqICAgSjIgICAgPSBsb3dlclsxMV0KKwkJCSAqLworCQkJc2lnbiA9ICh1cHBlciA+PiAxMCkgJiAxOworCQkJajEgPSAobG93ZXIgPj4gMTMpICYgMTsKKwkJCWoyID0gKGxvd2VyID4+IDExKSAmIDE7CisJCQlvZmZzZXQgPSAoc2lnbiA8PCAyNCkgfCAoKH4oajEgXiBzaWduKSAmIDEpIDw8IDIzKSB8CisJCQkJKCh+KGoyIF4gc2lnbikgJiAxKSA8PCAyMikgfAorCQkJCSgodXBwZXIgJiAweDAzZmYpIDw8IDEyKSB8CisJCQkJKChsb3dlciAmIDB4MDdmZikgPDwgMSk7CisJCQlpZiAob2Zmc2V0ICYgMHgwMTAwMDAwMCkKKwkJCQlvZmZzZXQgLT0gMHgwMjAwMDAwMDsKKwkJCW9mZnNldCArPSBzeW0tPnN0X3ZhbHVlIC0gbG9jOworCisJCQkvKiBvbmx5IFRodW1iIGFkZHJlc3NlcyBhbGxvd2VkIChubyBpbnRlcndvcmtpbmcpICovCisJCQlpZiAoIShvZmZzZXQgJiAxKSB8fAorCQkJICAgIG9mZnNldCA8PSAoczMyKTB4ZmYwMDAwMDAgfHwKKwkJCSAgICBvZmZzZXQgPj0gKHMzMikweDAxMDAwMDAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczogcmVsb2NhdGlvbiBvdXQgb2YgcmFuZ2UsIHNlY3Rpb24gIgorCQkJCSAgICAgICAiJWQgcmVsb2MgJWQgc3ltICclcydcbiIsIG1vZHVsZS0+bmFtZSwKKwkJCQkgICAgICAgcmVsaW5kZXgsIGksIHN0cnRhYiArIHN5bS0+c3RfbmFtZSk7CisJCQkJcmV0dXJuIC1FTk9FWEVDOworCQkJfQorCisJCQlzaWduID0gKG9mZnNldCA+PiAyNCkgJiAxOworCQkJajEgPSBzaWduIF4gKH4ob2Zmc2V0ID4+IDIzKSAmIDEpOworCQkJajIgPSBzaWduIF4gKH4ob2Zmc2V0ID4+IDIyKSAmIDEpOworCQkJKih1MTYgKilsb2MgPSAodTE2KSgodXBwZXIgJiAweGY4MDApIHwgKHNpZ24gPDwgMTApIHwKKwkJCQkJICAgICgob2Zmc2V0ID4+IDEyKSAmIDB4MDNmZikpOworCQkJKih1MTYgKikobG9jICsgMikgPSAodTE2KSgobG93ZXIgJiAweGQwMDApIHwKKwkJCQkJCSAgKGoxIDw8IDEzKSB8IChqMiA8PCAxMSkgfAorCQkJCQkJICAoKG9mZnNldCA+PiAxKSAmIDB4MDdmZikpOworCQkJdXBwZXIgPSAqKHUxNiAqKWxvYzsKKwkJCWxvd2VyID0gKih1MTYgKikobG9jICsgMik7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biByZWxvY2F0aW9uOiAldVxuIiwKIAkJCSAgICAgICBtb2R1bGUtPm5hbWUsIEVMRjMyX1JfVFlQRShyZWwtPnJfaW5mbykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMzkxOTZkZi4uNzkwZmJlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zODgsNyArMzg4LDcgQEAKIAlyZWdzLkFSTV9yMiA9ICh1bnNpZ25lZCBsb25nKWZuOwogCXJlZ3MuQVJNX3IzID0gKHVuc2lnbmVkIGxvbmcpa2VybmVsX3RocmVhZF9leGl0OwogCXJlZ3MuQVJNX3BjID0gKHVuc2lnbmVkIGxvbmcpa2VybmVsX3RocmVhZF9oZWxwZXI7Ci0JcmVncy5BUk1fY3BzciA9IFNWQ19NT0RFIHwgUFNSX0VORFNUQVRFOworCXJlZ3MuQVJNX2Nwc3IgPSBTVkNfTU9ERSB8IFBTUl9FTkRTVEFURSB8IFBTUl9JU0VUU1RBVEU7CiAKIAlyZXR1cm4gZG9fZm9yayhmbGFnc3xDTE9ORV9WTXxDTE9ORV9VTlRSQUNFRCwgMCwgJnJlZ3MsIDAsIE5VTEwsIE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCmluZGV4IDg5ODgyYTEuLmEyZWEzODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKQEAgLTUyMSw3ICs1MjEsMTMgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAl0bXAgPSAwOwotCWlmIChvZmYgPCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKQorCWlmIChvZmYgPT0gUFRfVEVYVF9BRERSKQorCQl0bXAgPSB0c2stPm1tLT5zdGFydF9jb2RlOworCWVsc2UgaWYgKG9mZiA9PSBQVF9EQVRBX0FERFIpCisJCXRtcCA9IHRzay0+bW0tPnN0YXJ0X2RhdGE7CisJZWxzZSBpZiAob2ZmID09IFBUX1RFWFRfRU5EX0FERFIpCisJCXRtcCA9IHRzay0+bW0tPmVuZF9jb2RlOworCWVsc2UgaWYgKG9mZiA8IHNpemVvZihzdHJ1Y3QgcHRfcmVncykpCiAJCXRtcCA9IGdldF91c2VyX3JlZyh0c2ssIG9mZiA+PiAyKTsKIAogCXJldHVybiBwdXRfdXNlcih0bXAsIHJldCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcmV0dXJuX2FkZHJlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9yZXR1cm5fYWRkcmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMjQ2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvcmV0dXJuX2FkZHJlc3MuYwpAQCAtMCwwICsxLDcxIEBACisvKgorICogYXJjaC9hcm0va2VybmVsL3JldHVybl9hZGRyZXNzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVXdlIEtsZWluZS1Lb2VuaWcgPHUua2xlaW5lLWtvZW5pZ0BwZW5ndXRyb25peC5kZT4KKyAqIGZvciBQZW5ndXRyb25peAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0ZSQU1FX1BPSU5URVIpICYmICFkZWZpbmVkKENPTkZJR19BUk1fVU5XSU5EKQorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgorCitzdHJ1Y3QgcmV0dXJuX2FkZHJlc3NfZGF0YSB7CisJdW5zaWduZWQgaW50IGxldmVsOworCXZvaWQgKmFkZHI7Cit9OworCitzdGF0aWMgaW50IHNhdmVfcmV0dXJuX2FkZHIoc3RydWN0IHN0YWNrZnJhbWUgKmZyYW1lLCB2b2lkICpkKQoreworCXN0cnVjdCByZXR1cm5fYWRkcmVzc19kYXRhICpkYXRhID0gZDsKKworCWlmICghZGF0YS0+bGV2ZWwpIHsKKwkJZGF0YS0+YWRkciA9ICh2b2lkICopZnJhbWUtPmxyOworCisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCS0tZGF0YS0+bGV2ZWw7CisJCXJldHVybiAwOworCX0KK30KKwordm9pZCAqcmV0dXJuX2FkZHJlc3ModW5zaWduZWQgaW50IGxldmVsKQoreworCXN0cnVjdCByZXR1cm5fYWRkcmVzc19kYXRhIGRhdGE7CisJc3RydWN0IHN0YWNrZnJhbWUgZnJhbWU7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBjdXJyZW50X3NwIGFzbSAoInNwIik7CisKKwlkYXRhLmxldmVsID0gbGV2ZWwgKyAxOworCisJZnJhbWUuZnAgPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcygwKTsKKwlmcmFtZS5zcCA9IGN1cnJlbnRfc3A7CisJZnJhbWUubHIgPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisJZnJhbWUucGMgPSAodW5zaWduZWQgbG9uZylyZXR1cm5fYWRkcmVzczsKKworCXdhbGtfc3RhY2tmcmFtZSgmZnJhbWUsIHNhdmVfcmV0dXJuX2FkZHIsICZkYXRhKTsKKworCWlmICghZGF0YS5sZXZlbCkKKwkJcmV0dXJuIGRhdGEuYWRkcjsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCisjZWxzZSAvKiBpZiBkZWZpbmVkKENPTkZJR19GUkFNRV9QT0lOVEVSKSAmJiAhZGVmaW5lZChDT05GSUdfQVJNX1VOV0lORCkgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FSTV9VTldJTkQpCisjd2FybmluZyAiVE9ETzogcmV0dXJuX2FkZHJlc3Mgc2hvdWxkIHVzZSB1bndpbmQgdGFibGVzIgorI2VuZGlmCisKK3ZvaWQgKnJldHVybl9hZGRyZXNzKHVuc2lnbmVkIGludCBsZXZlbCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworI2VuZGlmIC8qIGlmIGRlZmluZWQoQ09ORklHX0ZSQU1FX1BPSU5URVIpICYmICFkZWZpbmVkKENPTkZJR19BUk1fVU5XSU5EKSAvIGVsc2UgKi8KKworRVhQT1JUX1NZTUJPTF9HUEwocmV0dXJuX2FkZHJlc3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwppbmRleCBiYzVlNDEyLi5kNGQ0Zjc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKKyNpbmNsdWRlIDxhc20vdW5pZmllZC5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgogI2luY2x1ZGUgPGFzbS9lbGYuaD4KQEAgLTMyNywyNSArMzI4LDM4IEBACiAJfQogCiAJLyoKKwkgKiBEZWZpbmUgdGhlIHBsYWNlbWVudCBjb25zdHJhaW50IGZvciB0aGUgaW5saW5lIGFzbSBkaXJlY3RpdmUgYmVsb3cuCisJICogSW4gVGh1bWItMiwgbXNyIHdpdGggYW4gaW1tZWRpYXRlIHZhbHVlIGlzIG5vdCBhbGxvd2VkLgorCSAqLworI2lmZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCisjZGVmaW5lIFBMQwkiciIKKyNlbHNlCisjZGVmaW5lIFBMQwkiSSIKKyNlbmRpZgorCisJLyoKIAkgKiBzZXR1cCBzdGFja3MgZm9yIHJlLWVudHJhbnQgZXhjZXB0aW9uIGhhbmRsZXJzCiAJICovCiAJX19hc21fXyAoCiAJIm1zcgljcHNyX2MsICUxXG5cdCIKLQkiYWRkCXNwLCAlMCwgJTJcblx0IgorCSJhZGQJcjE0LCAlMCwgJTJcblx0IgorCSJtb3YJc3AsIHIxNFxuXHQiCiAJIm1zcgljcHNyX2MsICUzXG5cdCIKLQkiYWRkCXNwLCAlMCwgJTRcblx0IgorCSJhZGQJcjE0LCAlMCwgJTRcblx0IgorCSJtb3YJc3AsIHIxNFxuXHQiCiAJIm1zcgljcHNyX2MsICU1XG5cdCIKLQkiYWRkCXNwLCAlMCwgJTZcblx0IgorCSJhZGQJcjE0LCAlMCwgJTZcblx0IgorCSJtb3YJc3AsIHIxNFxuXHQiCiAJIm1zcgljcHNyX2MsICU3IgogCSAgICA6CiAJICAgIDogInIiIChzdGspLAotCSAgICAgICJJIiAoUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgSVJRX01PREUpLAorCSAgICAgIFBMQyAoUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgSVJRX01PREUpLAogCSAgICAgICJJIiAob2Zmc2V0b2Yoc3RydWN0IHN0YWNrLCBpcnFbMF0pKSwKLQkgICAgICAiSSIgKFBTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IEFCVF9NT0RFKSwKKwkgICAgICBQTEMgKFBTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IEFCVF9NT0RFKSwKIAkgICAgICAiSSIgKG9mZnNldG9mKHN0cnVjdCBzdGFjaywgYWJ0WzBdKSksCi0JICAgICAgIkkiIChQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBVTkRfTU9ERSksCisJICAgICAgUExDIChQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBVTkRfTU9ERSksCiAJICAgICAgIkkiIChvZmZzZXRvZihzdHJ1Y3Qgc3RhY2ssIHVuZFswXSkpLAotCSAgICAgICJJIiAoUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUpCisJICAgICAgUExDIChQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERSkKIAkgICAgOiAicjE0Iik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwppbmRleCBmNmJjNWQ0Li4xNDIzYTM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgogCiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CkBAIC00Nyw1NyArNDgsMjIgQEAKIAlNT1ZfUjdfTlJfUlRfU0lHUkVUVVJOLCBTV0lfU1lTX1JUX1NJR1JFVFVSTiwgU1dJX1RIVU1CX1JUX1NJR1JFVFVSTiwKIH07CiAKLXN0YXRpYyBpbnQgZG9fc2lnbmFsKHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICogcmVncywgaW50IHN5c2NhbGwpOwotCiAvKgogICogYXRvbWljYWxseSBzd2FwIGluIHRoZSBuZXcgc2lnbmFsIG1hc2ssIGFuZCB3YWl0IGZvciBhIHNpZ25hbC4KICAqLwotYXNtbGlua2FnZSBpbnQgc3lzX3NpZ3N1c3BlbmQoaW50IHJlc3RhcnQsIHVuc2lnbmVkIGxvbmcgb2xkbWFzaywgb2xkX3NpZ3NldF90IG1hc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSBpbnQgc3lzX3NpZ3N1c3BlbmQoaW50IHJlc3RhcnQsIHVuc2lnbmVkIGxvbmcgb2xkbWFzaywgb2xkX3NpZ3NldF90IG1hc2spCiB7Ci0Jc2lnc2V0X3Qgc2F2ZXNldDsKLQogCW1hc2sgJj0gX0JMT0NLQUJMRTsKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlzYXZlc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKKwljdXJyZW50LT5zYXZlZF9zaWdtYXNrID0gY3VycmVudC0+YmxvY2tlZDsKIAlzaWdpbml0c2V0KCZjdXJyZW50LT5ibG9ja2VkLCBtYXNrKTsKIAlyZWNhbGNfc2lncGVuZGluZygpOwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JcmVncy0+QVJNX3IwID0gLUVJTlRSOwogCi0Jd2hpbGUgKDEpIHsKLQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JCXNjaGVkdWxlKCk7Ci0JCWlmIChkb19zaWduYWwoJnNhdmVzZXQsIHJlZ3MsIDApKQotCQkJcmV0dXJuIHJlZ3MtPkFSTV9yMDsKLQl9Ci19Ci0KLWFzbWxpbmthZ2UgaW50Ci1zeXNfcnRfc2lnc3VzcGVuZChzaWdzZXRfdCBfX3VzZXIgKnVuZXdzZXQsIHNpemVfdCBzaWdzZXRzaXplLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzaWdzZXRfdCBzYXZlc2V0LCBuZXdzZXQ7Ci0KLQkvKiBYWFg6IERvbid0IHByZWNsdWRlIGhhbmRsaW5nIGRpZmZlcmVudCBzaXplZCBzaWdzZXRfdCdzLiAqLwotCWlmIChzaWdzZXRzaXplICE9IHNpemVvZihzaWdzZXRfdCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdzZXQsIHVuZXdzZXQsIHNpemVvZihuZXdzZXQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jc2lnZGVsc2V0bWFzaygmbmV3c2V0LCB+X0JMT0NLQUJMRSk7Ci0KLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlzYXZlc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKLQljdXJyZW50LT5ibG9ja2VkID0gbmV3c2V0OwotCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlyZWdzLT5BUk1fcjAgPSAtRUlOVFI7Ci0KLQl3aGlsZSAoMSkgewotCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLQkJc2NoZWR1bGUoKTsKLQkJaWYgKGRvX3NpZ25hbCgmc2F2ZXNldCwgcmVncywgMCkpCi0JCQlyZXR1cm4gcmVncy0+QVJNX3IwOwotCX0KKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwlzY2hlZHVsZSgpOworCXNldF9yZXN0b3JlX3NpZ21hc2soKTsKKwlyZXR1cm4gLUVSRVNUQVJUTk9IQU5EOwogfQogCiBhc21saW5rYWdlIGludCAKQEAgLTU0NSw3ICs1MTEsNyBAQAogLyoKICAqIE9LLCB3ZSdyZSBpbnZva2luZyBhIGhhbmRsZXIKICAqLwkKLXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiBoYW5kbGVfc2lnbmFsKHVuc2lnbmVkIGxvbmcgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLAogCSAgICAgIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKm9sZHNldCwKIAkgICAgICBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGludCBzeXNjYWxsKQpAQCAtNTk2LDcgKzU2Miw3IEBACiAKIAlpZiAocmV0ICE9IDApIHsKIAkJZm9yY2Vfc2lnc2VndihzaWcsIHRzayk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAkvKgpAQCAtNjEwLDYgKzU3Niw3IEBACiAJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKIAlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTYyMSw3ICs1ODgsNyBAQAogICogdGhlIGtlcm5lbCBjYW4gaGFuZGxlLCBhbmQgdGhlbiB3ZSBidWlsZCBhbGwgdGhlIHVzZXItbGV2ZWwgc2lnbmFsIGhhbmRsaW5nCiAgKiBzdGFjay1mcmFtZXMgaW4gb25lIGdvIGFmdGVyIHRoYXQuCiAgKi8KLXN0YXRpYyBpbnQgZG9fc2lnbmFsKHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc3lzY2FsbCkKK3N0YXRpYyB2b2lkIGRvX3NpZ25hbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHN5c2NhbGwpCiB7CiAJc3RydWN0IGtfc2lnYWN0aW9uIGthOwogCXNpZ2luZm9fdCBpbmZvOwpAQCAtNjM0LDcgKzYwMSw3IEBACiAJICogaWYgc28uCiAJICovCiAJaWYgKCF1c2VyX21vZGUocmVncykpCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKIAlpZiAodHJ5X3RvX2ZyZWV6ZSgpKQogCQlnb3RvIG5vX3NpZ25hbDsKQEAgLTY0Myw5ICs2MTAsMjQgQEAKIAogCXNpZ25yID0gZ2V0X3NpZ25hbF90b19kZWxpdmVyKCZpbmZvLCAma2EsIHJlZ3MsIE5VTEwpOwogCWlmIChzaWduciA+IDApIHsKLQkJaGFuZGxlX3NpZ25hbChzaWduciwgJmthLCAmaW5mbywgb2xkc2V0LCByZWdzLCBzeXNjYWxsKTsKKwkJc2lnc2V0X3QgKm9sZHNldDsKKworCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKSkKKwkJCW9sZHNldCA9ICZjdXJyZW50LT5zYXZlZF9zaWdtYXNrOworCQllbHNlCisJCQlvbGRzZXQgPSAmY3VycmVudC0+YmxvY2tlZDsKKwkJaWYgKGhhbmRsZV9zaWduYWwoc2lnbnIsICZrYSwgJmluZm8sIG9sZHNldCwgcmVncywgc3lzY2FsbCkgPT0gMCkgeworCQkJLyoKKwkJCSAqIEEgc2lnbmFsIHdhcyBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkOyB0aGUgc2F2ZWQKKwkJCSAqIHNpZ21hc2sgd2lsbCBoYXZlIGJlZW4gc3RvcmVkIGluIHRoZSBzaWduYWwgZnJhbWUsCisJCQkgKiBhbmQgd2lsbCBiZSByZXN0b3JlZCBieSBzaWdyZXR1cm4sIHNvIHdlIGNhbiBzaW1wbHkKKwkJCSAqIGNsZWFyIHRoZSBUSUZfUkVTVE9SRV9TSUdNQVNLIGZsYWcuCisJCQkgKi8KKwkJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQorCQkJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spOworCQl9CiAJCXNpbmdsZV9zdGVwX3NldChjdXJyZW50KTsKLQkJcmV0dXJuIDE7CisJCXJldHVybjsKIAl9CiAKICBub19zaWduYWw6CkBAIC02OTcsMTQgKzY3OSwyOCBAQAogCQkgICAgcmVncy0+QVJNX3IwID09IC1FUkVTVEFSVE5PSU5UUikgewogCQkJc2V0dXBfc3lzY2FsbF9yZXN0YXJ0KHJlZ3MpOwogCQl9CisKKwkJLyogSWYgdGhlcmUncyBubyBzaWduYWwgdG8gZGVsaXZlciwgd2UganVzdCBwdXQgdGhlIHNhdmVkIHNpZ21hc2sKKwkJICogYmFjay4KKwkJICovCisJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKSB7CisJCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKTsKKwkJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmY3VycmVudC0+c2F2ZWRfc2lnbWFzaywgTlVMTCk7CisJCX0KIAl9CiAJc2luZ2xlX3N0ZXBfc2V0KGN1cnJlbnQpOwotCXJldHVybiAwOwogfQogCiBhc21saW5rYWdlIHZvaWQKIGRvX25vdGlmeV9yZXN1bWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCB0aHJlYWRfZmxhZ3MsIGludCBzeXNjYWxsKQogewogCWlmICh0aHJlYWRfZmxhZ3MgJiBfVElGX1NJR1BFTkRJTkcpCi0JCWRvX3NpZ25hbCgmY3VycmVudC0+YmxvY2tlZCwgcmVncywgc3lzY2FsbCk7CisJCWRvX3NpZ25hbChyZWdzLCBzeXNjYWxsKTsKKworCWlmICh0aHJlYWRfZmxhZ3MgJiBfVElGX05PVElGWV9SRVNVTUUpIHsKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05PVElGWV9SRVNVTUUpOworCQl0cmFjZWhvb2tfbm90aWZ5X3Jlc3VtZShyZWdzKTsKKwkJaWYgKGN1cnJlbnQtPnJlcGxhY2VtZW50X3Nlc3Npb25fa2V5cmluZykKKwkJCWtleV9yZXBsYWNlX3Nlc3Npb25fa2V5cmluZygpOworCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IDlmNDQ0ZTUuLjIwYjc0MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zdGFja3RyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtMjEsNyArMjEsNyBAQAogICogTm90ZSB0aGF0IHdpdGggZnJhbWVwb2ludGVyIGVuYWJsZWQsIGV2ZW4gdGhlIGxlYWYgZnVuY3Rpb25zIGhhdmUgdGhlIHNhbWUKICAqIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSwgdGhlcmVmb3JlIHdlIGNhbiBpZ25vcmUgdGhlIExSIHZhbHVlIGluIHRoaXMgY2FzZS4KICAqLwotaW50IHVud2luZF9mcmFtZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWUpCitpbnQgbm90cmFjZSB1bndpbmRfZnJhbWUoc3RydWN0IHN0YWNrZnJhbWUgKmZyYW1lKQogewogCXVuc2lnbmVkIGxvbmcgaGlnaCwgbG93OwogCXVuc2lnbmVkIGxvbmcgZnAgPSBmcmFtZS0+ZnA7CkBAIC00Myw3ICs0Myw3IEBACiB9CiAjZW5kaWYKIAotdm9pZCB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHN0YWNrZnJhbWUgKmZyYW1lLAordm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWUsCiAJCSAgICAgaW50ICgqZm4pKHN0cnVjdCBzdGFja2ZyYW1lICosIHZvaWQgKiksIHZvaWQgKmRhdGEpCiB7CiAJd2hpbGUgKDEpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYyBiL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYwppbmRleCBkZDU2ZTExLi4zOWJhZjExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Vud2luZC5jCkBAIC02Miw3ICs2MiwxMSBAQAogfTsKIAogZW51bSByZWdzIHsKKyNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorCUZQID0gNywKKyNlbHNlCiAJRlAgPSAxMSwKKyNlbmRpZgogCVNQID0gMTMsCiAJTFIgPSAxNCwKIAlQQyA9IDE1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDY5MzcxMDIuLjVjYzQ4MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC04Myw2ICs4Myw3IEBACiAJCUVYSVRfVEVYVAogCQlFWElUX0RBVEEKIAkJKiguZXhpdGNhbGwuZXhpdCkKKwkJKiguZGlzY2FyZCkKIAkJKiguQVJNLmV4aWR4LmV4aXQudGV4dCkKIAkJKiguQVJNLmV4dGFiLmV4aXQudGV4dCkKICNpZm5kZWYgQ09ORklHX0hPVFBMVUdfQ1BVCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvYXNobGRpMy5TIGIvYXJjaC9hcm0vbGliL2FzaGxkaTMuUwppbmRleCAxMTU0ZDkyLi42MzhkZWIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvYXNobGRpMy5TCisrKyBiL2FyY2gvYXJtL2xpYi9hc2hsZGkzLlMKQEAgLTQzLDcgKzQzLDkgQEAKIAlyc2IJaXAsIHIyLCAjMzIKIAltb3ZtaQlhaCwgYWgsIGxzbCByMgogCW1vdnBsCWFoLCBhbCwgbHNsIHIzCi0Jb3JybWkJYWgsIGFoLCBhbCwgbHNyIGlwCisgQVJNKAlvcnJtaQlhaCwgYWgsIGFsLCBsc3IgaXAJKQorIFRIVU1CKAlsc3JtaQlyMywgYWwsIGlwCQkpCisgVEhVTUIoCW9ycm1pCWFoLCBhaCwgcjMJCSkKIAltb3YJYWwsIGFsLCBsc2wgcjIKIAltb3YJcGMsIGxyCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9hc2hyZGkzLlMgYi9hcmNoL2FybS9saWIvYXNocmRpMy5TCmluZGV4IDlmOGIzNTUuLjAxNWU4YWE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvYXNocmRpMy5TCisrKyBiL2FyY2gvYXJtL2xpYi9hc2hyZGkzLlMKQEAgLTQzLDcgKzQzLDkgQEAKIAlyc2IJaXAsIHIyLCAjMzIKIAltb3ZtaQlhbCwgYWwsIGxzciByMgogCW1vdnBsCWFsLCBhaCwgYXNyIHIzCi0Jb3JybWkJYWwsIGFsLCBhaCwgbHNsIGlwCisgQVJNKAlvcnJtaQlhbCwgYWwsIGFoLCBsc2wgaXAJKQorIFRIVU1CKAlsc2xtaQlyMywgYWgsIGlwCQkpCisgVEhVTUIoCW9ycm1pCWFsLCBhbCwgcjMJCSkKIAltb3YJYWgsIGFoLCBhc3IgcjIKIAltb3YJcGMsIGxyCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9iYWNrdHJhY2UuUyBiL2FyY2gvYXJtL2xpYi9iYWNrdHJhY2UuUwppbmRleCBiMDk1MWQwLi5hYWY3MjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvYmFja3RyYWNlLlMKKysrIGIvYXJjaC9hcm0vbGliL2JhY2t0cmFjZS5TCkBAIC0zOCw3ICszOCw5IEBACiAJCWJlcQlub19mcmFtZQkJQCB3ZSBoYXZlIG5vIHN0YWNrIGZyYW1lcwogCiAJCXRzdAlyMSwgIzB4MTAJCUAgMjYgb3IgMzItYml0IG1vZGU/Ci0JCW1vdmVxCW1hc2ssICMweGZjMDAwMDAzCUAgbWFzayBmb3IgMjYtYml0CisgQVJNKAkJbW92ZXEJbWFzaywgIzB4ZmMwMDAwMDMJKQorIFRIVU1CKAkJbW92ZXEJbWFzaywgIzB4ZmMwMDAwMDAJKQorIFRIVU1CKAkJb3JyZXEJbWFzaywgIzB4MDMJCSkKIAkJbW92bmUJbWFzaywgIzAJCUAgbWFzayBmb3IgMzItYml0CiAKIDE6CQlzdG1mZAlzcCEsIHtwY30JCUAgY2FsY3VsYXRlIG9mZnNldCBvZiBQQyBzdG9yZWQKQEAgLTEyNiw3ICsxMjgsOSBAQAogCQltb3YJcmVnLCAjMTAKIAkJbW92CXI3LCAjMAogMToJCW1vdglyMywgIzEKLQkJdHN0CWluc3RyLCByMywgbHNsIHJlZworIEFSTSgJCXRzdAlpbnN0ciwgcjMsIGxzbCByZWcJKQorIFRIVU1CKAkJbHNsCXIzLCByZWcJCQkpCisgVEhVTUIoCQl0c3QJaW5zdHIsIHIzCQkpCiAJCWJlcQkyZgogCQlhZGQJcjcsIHI3LCAjMQogCQl0ZXEJcjcsICM2CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvYml0b3BzLmggYi9hcmNoL2FybS9saWIvYml0b3BzLmgKaW5kZXggYzdmMjYyNy4uZDQyMjUyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2JpdG9wcy5oCisrKyBiL2FyY2gvYXJtL2xpYi9iaXRvcHMuaApAQCAtNjAsOCArNjAsOCBAQAogCXRzdAlyMiwgcjAsIGxzbCByMwogCVxpbnN0cglyMiwgcjIsIHIwLCBsc2wgcjMKIAlcc3RvcmUJcjIsIFtyMV0KLQlyZXN0b3JlX2lycXMgaXAKIAltb3ZlcQlyMCwgIzAKKwlyZXN0b3JlX2lycXMgaXAKIAltb3YJcGMsIGxyCiAJLmVuZG0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2NsZWFyX3VzZXIuUyBiL2FyY2gvYXJtL2xpYi9jbGVhcl91c2VyLlMKaW5kZXggODQ0ZjU2Ny4uMTI3OWFiZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2NsZWFyX3VzZXIuUworKysgYi9hcmNoL2FybS9saWIvY2xlYXJfdXNlci5TCkBAIC0yNywyMSArMjcsMjAgQEAKIAkJYW5kcwlpcCwgcjAsICMzCiAJCWJlcQkxZgogCQljbXAJaXAsICMyCi1VU0VSKAkJc3RyYnQJcjIsIFtyMF0sICMxKQotVVNFUigJCXN0cmxlYnQJcjIsIFtyMF0sICMxKQotVVNFUigJCXN0cmx0YnQJcjIsIFtyMF0sICMxKQorCQlzdHJ1c3IJcjIsIHIwLCAxCisJCXN0cnVzcglyMiwgcjAsIDEsIGxlCisJCXN0cnVzcglyMiwgcjAsIDEsIGx0CiAJCXJzYglpcCwgaXAsICM0CiAJCXN1YglyMSwgcjEsIGlwCQlAICA3ICA2ICA1ICA0ICAzICAyICAxCiAxOgkJc3VicwlyMSwgcjEsICM4CQlAIC0xIC0yIC0zIC00IC01IC02IC03Ci1VU0VSKAkJc3RycGx0CXIyLCBbcjBdLCAjNCkKLVVTRVIoCQlzdHJwbHQJcjIsIFtyMF0sICM0KQorCQlzdHJ1c3IJcjIsIHIwLCA0LCBwbCwgcmVwdD0yCiAJCWJwbAkxYgogCQlhZGRzCXIxLCByMSwgIzQJCUAgIDMgIDIgIDEgIDAgLTEgLTIgLTMKLVVTRVIoCQlzdHJwbHQJcjIsIFtyMF0sICM0KQorCQlzdHJ1c3IJcjIsIHIwLCA0LCBwbAogMjoJCXRzdAlyMSwgIzIJCQlAIDF4IDF4IDB4IDB4IDF4IDF4IDB4Ci1VU0VSKAkJc3RybmVidAlyMiwgW3IwXSwgIzEpCi1VU0VSKAkJc3RybmVidAlyMiwgW3IwXSwgIzEpCisJCXN0cnVzcglyMiwgcjAsIDEsIG5lLCByZXB0PTIKIAkJdHN0CXIxLCAjMQkJCUAgeDEgeDAgeDEgeDAgeDEgeDAgeDEKKwkJaXQJbmUJCQlAIGV4cGxpY2l0IElUIG5lZWRlZCBmb3IgdGhlIGxhYmVsCiBVU0VSKAkJc3RybmVidAlyMiwgW3IwXSkKIAkJbW92CXIwLCAjMAogCQlsZG1mZAlzcCEsIHtyMSwgcGN9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvY29weV9mcm9tX3VzZXIuUyBiL2FyY2gvYXJtL2xpYi9jb3B5X2Zyb21fdXNlci5TCmluZGV4IDU2Nzk5YTEuLmU0ZmUxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9jb3B5X2Zyb21fdXNlci5TCisrKyBiL2FyY2gvYXJtL2xpYi9jb3B5X2Zyb21fdXNlci5TCkBAIC0zMywxMSArMzMsMTUgQEAKICAqCU51bWJlciBvZiBieXRlcyBOT1QgY29waWVkLgogICovCiAKKyNpZm5kZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKKyNkZWZpbmUgTERSMVdfU0hJRlQJMAorI2Vsc2UKKyNkZWZpbmUgTERSMVdfU0hJRlQJMQorI2VuZGlmCisjZGVmaW5lIFNUUjFXX1NISUZUCTAKKwogCS5tYWNybyBsZHIxdyBwdHIgcmVnIGFib3J0Ci0xMDA6CWxkcnQgXHJlZywgW1xwdHJdLCAjNAotCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgotCS5sb25nIDEwMGIsIFxhYm9ydAotCS5wcmV2aW91cworCWxkcnVzcglccmVnLCBccHRyLCA0LCBhYm9ydD1cYWJvcnQKIAkuZW5kbQogCiAJLm1hY3JvIGxkcjR3IHB0ciByZWcxIHJlZzIgcmVnMyByZWc0IGFib3J0CkBAIC01MywxNCArNTcsMTEgQEAKIAkuZW5kbQogCiAJLm1hY3JvIGxkcjFiIHB0ciByZWcgY29uZD1hbCBhYm9ydAotMTAwOglsZHJcY29uZFwoKWJ0IFxyZWcsIFtccHRyXSwgIzEKLQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKLQkubG9uZyAxMDBiLCBcYWJvcnQKLQkucHJldmlvdXMKKwlsZHJ1c3IJXHJlZywgXHB0ciwgMSwgXGNvbmQsIGFib3J0PVxhYm9ydAogCS5lbmRtCiAKIAkubWFjcm8gc3RyMXcgcHRyIHJlZyBhYm9ydAotCXN0ciBccmVnLCBbXHB0cl0sICM0CisJVyhzdHIpIFxyZWcsIFtccHRyXSwgIzQKIAkuZW5kbQogCiAJLm1hY3JvIHN0cjh3IHB0ciByZWcxIHJlZzIgcmVnMyByZWc0IHJlZzUgcmVnNiByZWc3IHJlZzggYWJvcnQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9jb3B5X3RlbXBsYXRlLlMgYi9hcmNoL2FybS9saWIvY29weV90ZW1wbGF0ZS5TCmluZGV4IDEzOWNjZTYuLjgwNWUzZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9jb3B5X3RlbXBsYXRlLlMKKysrIGIvYXJjaC9hcm0vbGliL2NvcHlfdGVtcGxhdGUuUwpAQCAtNTcsNiArNTcsMTMgQEAKICAqCiAgKglSZXN0b3JlIHJlZ2lzdGVycyB3aXRoIHRoZSB2YWx1ZXMgcHJldmlvdXNseSBzYXZlZCB3aXRoIHRoZQogICoJJ3ByZXNlcnYnIG1hY3JvLiBDYWxsZWQgdXBvbiBjb2RlIHRlcm1pbmF0aW9uLgorICoKKyAqIExEUjFXX1NISUZUCisgKiBTVFIxV19TSElGVAorICoKKyAqCUNvcnJlY3Rpb24gdG8gYmUgYXBwbGllZCB0byB0aGUgImlwIiByZWdpc3RlciB3aGVuIGJyYW5jaGluZyBpbnRvCisgKgl0aGUgbGRyMXcgb3Igc3RyMXcgaW5zdHJ1Y3Rpb25zIChzb21lIG9mIHRoZXNlIG1hY3JvcyBtYXkgZXhwYW5kIHRvCisgKgl0aGFuIG9uZSAzMmJpdCBpbnN0cnVjdGlvbiBpbiBUaHVtYi0yKQogICovCiAKIApAQCAtOTksOSArMTA2LDE1IEBACiAKIDU6CQlhbmRzCWlwLCByMiwgIzI4CiAJCXJzYglpcCwgaXAsICMzMgorI2lmIExEUjFXX1NISUZUID4gMAorCQlsc2wJaXAsIGlwLCAjTERSMVdfU0hJRlQKKyNlbmRpZgogCQlhZGRuZQlwYywgcGMsIGlwCQlAIEMgaXMgYWx3YXlzIGNsZWFyIGhlcmUKIAkJYgk3ZgotNjoJCW5vcAorNjoKKwkJLnJlcHQJKDEgPDwgTERSMVdfU0hJRlQpCisJCVcobm9wKQorCQkuZW5kcgogCQlsZHIxdwlyMSwgcjMsIGFib3J0PTIwZgogCQlsZHIxdwlyMSwgcjQsIGFib3J0PTIwZgogCQlsZHIxdwlyMSwgcjUsIGFib3J0PTIwZgpAQCAtMTEwLDkgKzEyMywxNiBAQAogCQlsZHIxdwlyMSwgcjgsIGFib3J0PTIwZgogCQlsZHIxdwlyMSwgbHIsIGFib3J0PTIwZgogCisjaWYgTERSMVdfU0hJRlQgPCBTVFIxV19TSElGVAorCQlsc2wJaXAsIGlwLCAjU1RSMVdfU0hJRlQgLSBMRFIxV19TSElGVAorI2VsaWYgTERSMVdfU0hJRlQgPiBTVFIxV19TSElGVAorCQlsc3IJaXAsIGlwLCAjTERSMVdfU0hJRlQgLSBTVFIxV19TSElGVAorI2VuZGlmCiAJCWFkZAlwYywgcGMsIGlwCiAJCW5vcAotCQlub3AKKwkJLnJlcHQJKDEgPDwgU1RSMVdfU0hJRlQpCisJCVcobm9wKQorCQkuZW5kcgogCQlzdHIxdwlyMCwgcjMsIGFib3J0PTIwZgogCQlzdHIxdwlyMCwgcjQsIGFib3J0PTIwZgogCQlzdHIxdwlyMCwgcjUsIGFib3J0PTIwZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2NvcHlfdG9fdXNlci5TIGIvYXJjaC9hcm0vbGliL2NvcHlfdG9fdXNlci5TCmluZGV4IDg3ODgyMGYuLjFhNzFlMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9jb3B5X3RvX3VzZXIuUworKysgYi9hcmNoL2FybS9saWIvY29weV90b191c2VyLlMKQEAgLTMzLDggKzMzLDE1IEBACiAgKglOdW1iZXIgb2YgYnl0ZXMgTk9UIGNvcGllZC4KICAqLwogCisjZGVmaW5lIExEUjFXX1NISUZUCTAKKyNpZm5kZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKKyNkZWZpbmUgU1RSMVdfU0hJRlQJMAorI2Vsc2UKKyNkZWZpbmUgU1RSMVdfU0hJRlQJMQorI2VuZGlmCisKIAkubWFjcm8gbGRyMXcgcHRyIHJlZyBhYm9ydAotCWxkciBccmVnLCBbXHB0cl0sICM0CisJVyhsZHIpIFxyZWcsIFtccHRyXSwgIzQKIAkuZW5kbQogCiAJLm1hY3JvIGxkcjR3IHB0ciByZWcxIHJlZzIgcmVnMyByZWc0IGFib3J0CkBAIC01MCwxMCArNTcsNyBAQAogCS5lbmRtCiAKIAkubWFjcm8gc3RyMXcgcHRyIHJlZyBhYm9ydAotMTAwOglzdHJ0IFxyZWcsIFtccHRyXSwgIzQKLQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKLQkubG9uZyAxMDBiLCBcYWJvcnQKLQkucHJldmlvdXMKKwlzdHJ1c3IJXHJlZywgXHB0ciwgNCwgYWJvcnQ9XGFib3J0CiAJLmVuZG0KIAogCS5tYWNybyBzdHI4dyBwdHIgcmVnMSByZWcyIHJlZzMgcmVnNCByZWc1IHJlZzYgcmVnNyByZWc4IGFib3J0CkBAIC02OCwxMCArNzIsNyBAQAogCS5lbmRtCiAKIAkubWFjcm8gc3RyMWIgcHRyIHJlZyBjb25kPWFsIGFib3J0Ci0xMDA6CXN0clxjb25kXCgpYnQgXHJlZywgW1xwdHJdLCAjMQotCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgotCS5sb25nIDEwMGIsIFxhYm9ydAotCS5wcmV2aW91cworCXN0cnVzcglccmVnLCBccHRyLCAxLCBcY29uZCwgYWJvcnQ9XGFib3J0CiAJLmVuZG0KIAogCS5tYWNybyBlbnRlciByZWcxIHJlZzIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9jc3VtcGFydGlhbGNvcHl1c2VyLlMgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWxjb3B5dXNlci5TCmluZGV4IDE0Njc3ZmIuLmZkMGU5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9jc3VtcGFydGlhbGNvcHl1c2VyLlMKKysrIGIvYXJjaC9hcm0vbGliL2NzdW1wYXJ0aWFsY29weXVzZXIuUwpAQCAtMjYsNTAgKzI2LDI4IEBACiAJCS5lbmRtCiAKIAkJLm1hY3JvCWxvYWQxYiwJcmVnMQotOTk5OToJCWxkcmJ0CVxyZWcxLCBbcjBdLCAkMQotCQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKLQkJLmFsaWduCTMKLQkJLmxvbmcJOTk5OWIsIDYwMDFmCi0JCS5wcmV2aW91cworCQlsZHJ1c3IJXHJlZzEsIHIwLCAxCiAJCS5lbmRtCiAKIAkJLm1hY3JvCWxvYWQyYiwgcmVnMSwgcmVnMgotOTk5OToJCWxkcmJ0CVxyZWcxLCBbcjBdLCAkMQotOTk5ODoJCWxkcmJ0CVxyZWcyLCBbcjBdLCAkMQotCQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKLQkJLmxvbmcJOTk5OWIsIDYwMDFmCi0JCS5sb25nCTk5OThiLCA2MDAxZgotCQkucHJldmlvdXMKKwkJbGRydXNyCVxyZWcxLCByMCwgMQorCQlsZHJ1c3IJXHJlZzIsIHIwLCAxCiAJCS5lbmRtCiAKIAkJLm1hY3JvCWxvYWQxbCwgcmVnMQotOTk5OToJCWxkcnQJXHJlZzEsIFtyMF0sICQ0Ci0JCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgotCQkuYWxpZ24JMwotCQkubG9uZwk5OTk5YiwgNjAwMWYKLQkJLnByZXZpb3VzCisJCWxkcnVzcglccmVnMSwgcjAsIDQKIAkJLmVuZG0KIAogCQkubWFjcm8JbG9hZDJsLCByZWcxLCByZWcyCi05OTk5OgkJbGRydAlccmVnMSwgW3IwXSwgJDQKLTk5OTg6CQlsZHJ0CVxyZWcyLCBbcjBdLCAkNAotCQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKLQkJLmxvbmcJOTk5OWIsIDYwMDFmCi0JCS5sb25nCTk5OThiLCA2MDAxZgotCQkucHJldmlvdXMKKwkJbGRydXNyCVxyZWcxLCByMCwgNAorCQlsZHJ1c3IJXHJlZzIsIHIwLCA0CiAJCS5lbmRtCiAKIAkJLm1hY3JvCWxvYWQ0bCwgcmVnMSwgcmVnMiwgcmVnMywgcmVnNAotOTk5OToJCWxkcnQJXHJlZzEsIFtyMF0sICQ0Ci05OTk4OgkJbGRydAlccmVnMiwgW3IwXSwgJDQKLTk5OTc6CQlsZHJ0CVxyZWczLCBbcjBdLCAkNAotOTk5NjoJCWxkcnQJXHJlZzQsIFtyMF0sICQ0Ci0JCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgotCQkubG9uZwk5OTk5YiwgNjAwMWYKLQkJLmxvbmcJOTk5OGIsIDYwMDFmCi0JCS5sb25nCTk5OTdiLCA2MDAxZgotCQkubG9uZwk5OTk2YiwgNjAwMWYKLQkJLnByZXZpb3VzCisJCWxkcnVzcglccmVnMSwgcjAsIDQKKwkJbGRydXNyCVxyZWcyLCByMCwgNAorCQlsZHJ1c3IJXHJlZzMsIHIwLCA0CisJCWxkcnVzcglccmVnNCwgcjAsIDQKIAkJLmVuZG0KIAogLyoKQEAgLTkyLDE0ICs3MCwxNCBAQAogICovCiAJCS5zZWN0aW9uIC5maXh1cCwiYXgiCiAJCS5hbGlnbgk0Ci02MDAxOgkJbW92CXI0LCAjLUVGQVVMVAorOTAwMToJCW1vdglyNCwgIy1FRkFVTFQKIAkJbGRyCXI1LCBbZnAsICM0XQkJQCAqZXJyX3B0cgogCQlzdHIJcjQsIFtyNV0KIAkJbGRtaWEJc3AsIHtyMSwgcjJ9CQlAIHJldHJpZXZlIGRzdCwgbGVuCiAJCWFkZAlyMiwgcjIsIHIxCiAJCW1vdglyMCwgIzAJCQlAIHplcm8gdGhlIGJ1ZmZlcgotNjAwMjoJCXRlcQlyMiwgcjEKKzkwMDI6CQl0ZXEJcjIsIHIxCiAJCXN0cm5lYglyMCwgW3IxXSwgIzEKLQkJYm5lCTYwMDJiCisJCWJuZQk5MDAyYgogCQlsb2FkX3JlZ3MKIAkJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvZGl2NjQuUyBiL2FyY2gvYXJtL2xpYi9kaXY2NC5TCmluZGV4IDE0MjVlNzguLmZhYTc3NDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9kaXY2NC5TCisrKyBiL2FyY2gvYXJtL2xpYi9kaXY2NC5TCkBAIC0xNzcsNyArMTc3LDkgQEAKIAltb3YJeWgsIHhoLCBsc3IgaXAKIAltb3YJeWwsIHhsLCBsc3IgaXAKIAlyc2IJaXAsIGlwLCAjMzIKLQlvcnIJeWwsIHlsLCB4aCwgbHNsIGlwCisgQVJNKAlvcnIJeWwsIHlsLCB4aCwgbHNsIGlwCSkKKyBUSFVNQigJbHNsCXhoLCB4aCwgaXAJCSkKKyBUSFVNQigJb3JyCXlsLCB5bCwgeGgJCSkKIAltb3YJeGgsIHhsLCBsc2wgaXAKIAltb3YJeGgsIHhoLCBsc3IgaXAKIAltb3YJcGMsIGxyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvZmluZGJpdC5TIGIvYXJjaC9hcm0vbGliL2ZpbmRiaXQuUwppbmRleCA4YzRkZWZjLi4xZTRjYmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvZmluZGJpdC5TCisrKyBiL2FyY2gvYXJtL2xpYi9maW5kYml0LlMKQEAgLTI1LDcgKzI1LDEwIEBACiAJCXRlcQlyMSwgIzAJCiAJCWJlcQkzZgogCQltb3YJcjIsICMwCi0xOgkJbGRyYglyMywgW3IwLCByMiwgbHNyICMzXQorMToKKyBBUk0oCQlsZHJiCXIzLCBbcjAsIHIyLCBsc3IgIzNdCSkKKyBUSFVNQigJCWxzcglyMywgcjIsICMzCQkpCisgVEhVTUIoCQlsZHJiCXIzLCBbcjAsIHIzXQkJKQogCQllb3JzCXIzLCByMywgIzB4ZmYJCUAgaW52ZXJ0IGJpdHMKIAkJYm5lCS5MX2ZvdW5kCQlAIGFueSBub3cgc2V0IC0gZm91bmQgemVybyBiaXQKIAkJYWRkCXIyLCByMiwgIzgJCUAgbmV4dCBiaXQgcG9pbnRlcgpAQCAtNDQsNyArNDcsOSBAQAogCQliZXEJM2IKIAkJYW5kcwlpcCwgcjIsICM3CiAJCWJlcQkxYgkJCUAgSWYgbmV3IGJ5dGUsIGdvdG8gb2xkIHJvdXRpbmUKLQkJbGRyYglyMywgW3IwLCByMiwgbHNyICMzXQorIEFSTSgJCWxkcmIJcjMsIFtyMCwgcjIsIGxzciAjM10JKQorIFRIVU1CKAkJbHNyCXIzLCByMiwgIzMJCSkKKyBUSFVNQigJCWxkcmIJcjMsIFtyMCwgcjNdCQkpCiAJCWVvcglyMywgcjMsICMweGZmCQlAIG5vdyBsb29raW5nIGZvciBhIDEgYml0CiAJCW1vdnMJcjMsIHIzLCBsc3IgaXAJCUAgc2hpZnQgb2ZmIHVudXNlZCBiaXRzCiAJCWJuZQkuTF9mb3VuZApAQCAtNjEsNyArNjYsMTAgQEAKIAkJdGVxCXIxLCAjMAkKIAkJYmVxCTNmCiAJCW1vdglyMiwgIzAKLTE6CQlsZHJiCXIzLCBbcjAsIHIyLCBsc3IgIzNdCisxOgorIEFSTSgJCWxkcmIJcjMsIFtyMCwgcjIsIGxzciAjM10JKQorIFRIVU1CKAkJbHNyCXIzLCByMiwgIzMJCSkKKyBUSFVNQigJCWxkcmIJcjMsIFtyMCwgcjNdCQkpCiAJCW1vdnMJcjMsIHIzCiAJCWJuZQkuTF9mb3VuZAkJQCBhbnkgbm93IHNldCAtIGZvdW5kIHplcm8gYml0CiAJCWFkZAlyMiwgcjIsICM4CQlAIG5leHQgYml0IHBvaW50ZXIKQEAgLTgwLDcgKzg4LDkgQEAKIAkJYmVxCTNiCiAJCWFuZHMJaXAsIHIyLCAjNwogCQliZXEJMWIJCQlAIElmIG5ldyBieXRlLCBnb3RvIG9sZCByb3V0aW5lCi0JCWxkcmIJcjMsIFtyMCwgcjIsIGxzciAjM10KKyBBUk0oCQlsZHJiCXIzLCBbcjAsIHIyLCBsc3IgIzNdCSkKKyBUSFVNQigJCWxzcglyMywgcjIsICMzCQkpCisgVEhVTUIoCQlsZHJiCXIzLCBbcjAsIHIzXQkJKQogCQltb3ZzCXIzLCByMywgbHNyIGlwCQlAIHNoaWZ0IG9mZiB1bnVzZWQgYml0cwogCQlibmUJLkxfZm91bmQKIAkJb3JyCXIyLCByMiwgIzcJCUAgaWYgemVybywgdGhlbiBubyBiaXRzIGhlcmUKQEAgLTk1LDcgKzEwNSw5IEBACiAJCWJlcQkzZgogCQltb3YJcjIsICMwCiAxOgkJZW9yCXIzLCByMiwgIzB4MTgJCUAgYmlnIGVuZGlhbiBieXRlIG9yZGVyaW5nCi0JCWxkcmIJcjMsIFtyMCwgcjMsIGxzciAjM10KKyBBUk0oCQlsZHJiCXIzLCBbcjAsIHIzLCBsc3IgIzNdCSkKKyBUSFVNQigJCWxzcglyMywgIzMJCQkpCisgVEhVTUIoCQlsZHJiCXIzLCBbcjAsIHIzXQkJKQogCQllb3JzCXIzLCByMywgIzB4ZmYJCUAgaW52ZXJ0IGJpdHMKIAkJYm5lCS5MX2ZvdW5kCQlAIGFueSBub3cgc2V0IC0gZm91bmQgemVybyBiaXQKIAkJYWRkCXIyLCByMiwgIzgJCUAgbmV4dCBiaXQgcG9pbnRlcgpAQCAtMTExLDcgKzEyMyw5IEBACiAJCWFuZHMJaXAsIHIyLCAjNwogCQliZXEJMWIJCQlAIElmIG5ldyBieXRlLCBnb3RvIG9sZCByb3V0aW5lCiAJCWVvcglyMywgcjIsICMweDE4CQlAIGJpZyBlbmRpYW4gYnl0ZSBvcmRlcmluZwotCQlsZHJiCXIzLCBbcjAsIHIzLCBsc3IgIzNdCisgQVJNKAkJbGRyYglyMywgW3IwLCByMywgbHNyICMzXQkpCisgVEhVTUIoCQlsc3IJcjMsICMzCQkJKQorIFRIVU1CKAkJbGRyYglyMywgW3IwLCByM10JCSkKIAkJZW9yCXIzLCByMywgIzB4ZmYJCUAgbm93IGxvb2tpbmcgZm9yIGEgMSBiaXQKIAkJbW92cwlyMywgcjMsIGxzciBpcAkJQCBzaGlmdCBvZmYgdW51c2VkIGJpdHMKIAkJYm5lCS5MX2ZvdW5kCkBAIC0xMjUsNyArMTM5LDkgQEAKIAkJYmVxCTNmCiAJCW1vdglyMiwgIzAKIDE6CQllb3IJcjMsIHIyLCAjMHgxOAkJQCBiaWcgZW5kaWFuIGJ5dGUgb3JkZXJpbmcKLQkJbGRyYglyMywgW3IwLCByMywgbHNyICMzXQorIEFSTSgJCWxkcmIJcjMsIFtyMCwgcjMsIGxzciAjM10JKQorIFRIVU1CKAkJbHNyCXIzLCAjMwkJCSkKKyBUSFVNQigJCWxkcmIJcjMsIFtyMCwgcjNdCQkpCiAJCW1vdnMJcjMsIHIzCiAJCWJuZQkuTF9mb3VuZAkJQCBhbnkgbm93IHNldCAtIGZvdW5kIHplcm8gYml0CiAJCWFkZAlyMiwgcjIsICM4CQlAIG5leHQgYml0IHBvaW50ZXIKQEAgLTE0MSw3ICsxNTcsOSBAQAogCQlhbmRzCWlwLCByMiwgIzcKIAkJYmVxCTFiCQkJQCBJZiBuZXcgYnl0ZSwgZ290byBvbGQgcm91dGluZQogCQllb3IJcjMsIHIyLCAjMHgxOAkJQCBiaWcgZW5kaWFuIGJ5dGUgb3JkZXJpbmcKLQkJbGRyYglyMywgW3IwLCByMywgbHNyICMzXQorIEFSTSgJCWxkcmIJcjMsIFtyMCwgcjMsIGxzciAjM10JKQorIFRIVU1CKAkJbHNyCXIzLCAjMwkJCSkKKyBUSFVNQigJCWxkcmIJcjMsIFtyMCwgcjNdCQkpCiAJCW1vdnMJcjMsIHIzLCBsc3IgaXAJCUAgc2hpZnQgb2ZmIHVudXNlZCBiaXRzCiAJCWJuZQkuTF9mb3VuZAogCQlvcnIJcjIsIHIyLCAjNwkJQCBpZiB6ZXJvLCB0aGVuIG5vIGJpdHMgaGVyZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2dldHVzZXIuUyBiL2FyY2gvYXJtL2xpYi9nZXR1c2VyLlMKaW5kZXggNjc2MzA4OC4uYTE4MTRkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2dldHVzZXIuUworKysgYi9hcmNoL2FybS9saWIvZ2V0dXNlci5TCkBAIC0zNiw4ICszNiwxMyBAQAogRU5EUFJPQyhfX2dldF91c2VyXzEpCiAKIEVOVFJZKF9fZ2V0X3VzZXJfMikKKyNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorMjoJbGRyYnQJcjIsIFtyMF0KKzM6CWxkcmJ0CXIzLCBbcjAsICMxXQorI2Vsc2UKIDI6CWxkcmJ0CXIyLCBbcjBdLCAjMQogMzoJbGRyYnQJcjMsIFtyMF0KKyNlbmRpZgogI2lmbmRlZiBfX0FSTUVCX18KIAlvcnIJcjIsIHIyLCByMywgbHNsICM4CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2lvLXdyaXRlc3ctYXJtdjQuUyBiL2FyY2gvYXJtL2xpYi9pby13cml0ZXN3LWFybXY0LlMKaW5kZXggZDY1ODU2MS4uZmY0ZjcxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2lvLXdyaXRlc3ctYXJtdjQuUworKysgYi9hcmNoL2FybS9saWIvaW8td3JpdGVzdy1hcm12NC5TCkBAIC03NSw3ICs3NSwxMCBAQAogI2VuZGlmCiAKIC5Mb3V0c3dfbm9hbGlnbjoKLQkJbGRyCXIzLCBbcjEsIC1yM10hCisgQVJNKAkJbGRyCXIzLCBbcjEsIC1yM10hCSkKKyBUSFVNQigJCXJzYglyMywgcjMsICMwCSkKKyBUSFVNQigJCWxkcglyMywgW3IxLCByM10JKQorIFRIVU1CKAkJc3ViCXIxLCByMwkJKQogCQlzdWJjcwlyMiwgcjIsICMxCiAJCWJjcwkyZgogCQlzdWJzCXIyLCByMiwgIzIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9saWIxZnVuY3MuUyBiL2FyY2gvYXJtL2xpYi9saWIxZnVuY3MuUwppbmRleCA2Nzk2NGJjLi42ZGMwNjQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvbGliMWZ1bmNzLlMKKysrIGIvYXJjaC9hcm0vbGliL2xpYjFmdW5jcy5TCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGxpbnV4L2FyY2gvYXJtL2xpYi9saWIxZnVuY3MuUzogT3B0aW1pemVkIEFSTSBkaXZpc2lvbiByb3V0aW5lcwogICoKLSAqIEF1dGhvcjogTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICogQXV0aG9yOiBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgogICogICAtIGNvbnRyaWJ1dGVkIHRvIGdjYy0zLjQgb24gU2VwIDMwLCAyMDAzCiAgKiAgIC0gYWRhcHRlZCBmb3IgdGhlIExpbnV4IGtlcm5lbCBvbiBPY3QgMiwgMjAwMwogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvbHNocmRpMy5TIGIvYXJjaC9hcm0vbGliL2xzaHJkaTMuUwppbmRleCA5OWVhMzM4Li5mODNkNDQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvbHNocmRpMy5TCisrKyBiL2FyY2gvYXJtL2xpYi9sc2hyZGkzLlMKQEAgLTQzLDcgKzQzLDkgQEAKIAlyc2IJaXAsIHIyLCAjMzIKIAltb3ZtaQlhbCwgYWwsIGxzciByMgogCW1vdnBsCWFsLCBhaCwgbHNyIHIzCi0Jb3JybWkJYWwsIGFsLCBhaCwgbHNsIGlwCisgQVJNKAlvcnJtaQlhbCwgYWwsIGFoLCBsc2wgaXAJKQorIFRIVU1CKAlsc2xtaQlyMywgYWgsIGlwCQkpCisgVEhVTUIoCW9ycm1pCWFsLCBhbCwgcjMJCSkKIAltb3YJYWgsIGFoLCBsc3IgcjIKIAltb3YJcGMsIGxyCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9tZW1jcHkuUyBiL2FyY2gvYXJtL2xpYi9tZW1jcHkuUwppbmRleCBlMGQwMDI2Li5hOWI5ZTIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvbWVtY3B5LlMKKysrIGIvYXJjaC9hcm0vbGliL21lbWNweS5TCkBAIC0xMyw4ICsxMywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAKKyNkZWZpbmUgTERSMVdfU0hJRlQJMAorI2RlZmluZSBTVFIxV19TSElGVAkwCisKIAkubWFjcm8gbGRyMXcgcHRyIHJlZyBhYm9ydAotCWxkciBccmVnLCBbXHB0cl0sICM0CisJVyhsZHIpIFxyZWcsIFtccHRyXSwgIzQKIAkuZW5kbQogCiAJLm1hY3JvIGxkcjR3IHB0ciByZWcxIHJlZzIgcmVnMyByZWc0IGFib3J0CkBAIC0zMCw3ICszMyw3IEBACiAJLmVuZG0KIAogCS5tYWNybyBzdHIxdyBwdHIgcmVnIGFib3J0Ci0Jc3RyIFxyZWcsIFtccHRyXSwgIzQKKwlXKHN0cikgXHJlZywgW1xwdHJdLCAjNAogCS5lbmRtCiAKIAkubWFjcm8gc3RyOHcgcHRyIHJlZzEgcmVnMiByZWczIHJlZzQgcmVnNSByZWc2IHJlZzcgcmVnOCBhYm9ydApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL21lbW1vdmUuUyBiL2FyY2gvYXJtL2xpYi9tZW1tb3ZlLlMKaW5kZXggMTI1NDkxOC4uNTAyNWM4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL21lbW1vdmUuUworKysgYi9hcmNoL2FybS9saWIvbWVtbW92ZS5TCkBAIC03NSwyNCArNzUsMjQgQEAKIAkJYWRkbmUJcGMsIHBjLCBpcAkJQCBDIGlzIGFsd2F5cyBjbGVhciBoZXJlCiAJCWIJN2YKIDY6CQlub3AKLQkJbGRyCXIzLCBbcjEsICMtNF0hCi0JCWxkcglyNCwgW3IxLCAjLTRdIQotCQlsZHIJcjUsIFtyMSwgIy00XSEKLQkJbGRyCXI2LCBbcjEsICMtNF0hCi0JCWxkcglyNywgW3IxLCAjLTRdIQotCQlsZHIJcjgsIFtyMSwgIy00XSEKLQkJbGRyCWxyLCBbcjEsICMtNF0hCisJCVcobGRyKQlyMywgW3IxLCAjLTRdIQorCQlXKGxkcikJcjQsIFtyMSwgIy00XSEKKwkJVyhsZHIpCXI1LCBbcjEsICMtNF0hCisJCVcobGRyKQlyNiwgW3IxLCAjLTRdIQorCQlXKGxkcikJcjcsIFtyMSwgIy00XSEKKwkJVyhsZHIpCXI4LCBbcjEsICMtNF0hCisJCVcobGRyKQlsciwgW3IxLCAjLTRdIQogCiAJCWFkZAlwYywgcGMsIGlwCiAJCW5vcAogCQlub3AKLQkJc3RyCXIzLCBbcjAsICMtNF0hCi0JCXN0cglyNCwgW3IwLCAjLTRdIQotCQlzdHIJcjUsIFtyMCwgIy00XSEKLQkJc3RyCXI2LCBbcjAsICMtNF0hCi0JCXN0cglyNywgW3IwLCAjLTRdIQotCQlzdHIJcjgsIFtyMCwgIy00XSEKLQkJc3RyCWxyLCBbcjAsICMtNF0hCisJCVcoc3RyKQlyMywgW3IwLCAjLTRdIQorCQlXKHN0cikJcjQsIFtyMCwgIy00XSEKKwkJVyhzdHIpCXI1LCBbcjAsICMtNF0hCisJCVcoc3RyKQlyNiwgW3IwLCAjLTRdIQorCQlXKHN0cikJcjcsIFtyMCwgIy00XSEKKwkJVyhzdHIpCXI4LCBbcjAsICMtNF0hCisJCVcoc3RyKQlsciwgW3IwLCAjLTRdIQogCiAJQ0FMR04oCWJjcwkyYgkJCSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL3B1dHVzZXIuUyBiL2FyY2gvYXJtL2xpYi9wdXR1c2VyLlMKaW5kZXggODY0ZjNjMS4uMDJmZWRiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL3B1dHVzZXIuUworKysgYi9hcmNoL2FybS9saWIvcHV0dXNlci5TCkBAIC0zNyw2ICszNywxNSBAQAogCiBFTlRSWShfX3B1dF91c2VyXzIpCiAJbW92CWlwLCByMiwgbHNyICM4CisjaWZkZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKKyNpZm5kZWYgX19BUk1FQl9fCisyOglzdHJidAlyMiwgW3IwXQorMzoJc3RyYnQJaXAsIFtyMCwgIzFdCisjZWxzZQorMjoJc3RyYnQJaXAsIFtyMF0KKzM6CXN0cmJ0CXIyLCBbcjAsICMxXQorI2VuZGlmCisjZWxzZQkvKiAhQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KICNpZm5kZWYgX19BUk1FQl9fCiAyOglzdHJidAlyMiwgW3IwXSwgIzEKIDM6CXN0cmJ0CWlwLCBbcjBdCkBAIC00NCw2ICs1Myw3IEBACiAyOglzdHJidAlpcCwgW3IwXSwgIzEKIDM6CXN0cmJ0CXIyLCBbcjBdCiAjZW5kaWYKKyNlbmRpZgkvKiBDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwogCW1vdglyMCwgIzAKIAltb3YJcGMsIGxyCiBFTkRQUk9DKF9fcHV0X3VzZXJfMikKQEAgLTU1LDggKzY1LDEzIEBACiBFTkRQUk9DKF9fcHV0X3VzZXJfNCkKIAogRU5UUlkoX19wdXRfdXNlcl84KQorI2lmZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCis1OglzdHJ0CXIyLCBbcjBdCis2OglzdHJ0CXIzLCBbcjAsICM0XQorI2Vsc2UKIDU6CXN0cnQJcjIsIFtyMF0sICM0CiA2OglzdHJ0CXIzLCBbcjBdCisjZW5kaWYKIAltb3YJcjAsICMwCiAJbW92CXBjLCBscgogRU5EUFJPQyhfX3B1dF91c2VyXzgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvc2hhMS5TIGIvYXJjaC9hcm0vbGliL3NoYTEuUwppbmRleCBhMTZmYjIwLi5lYjBlZGI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvc2hhMS5TCisrKyBiL2FyY2gvYXJtL2xpYi9zaGExLlMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIFNIQSB0cmFuc2Zvcm0gb3B0aW1pemVkIGZvciBBUk0KICAqCi0gKiAgQ29weXJpZ2h0OgkoQykgMjAwNSBieSBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiAgQ29weXJpZ2h0OgkoQykgMjAwNSBieSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgogICogIENyZWF0ZWQ6CVNlcHRlbWJlciAxNywgMjAwNQogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTg3LDYgKzE4Nyw3IEBACiAKIEVORFBST0Moc2hhX3RyYW5zZm9ybSkKIAorCS5hbGlnbgkyCiAuTF9zaGFfSzoKIAkud29yZAkweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjLCAweGNhNjJjMWQ2CiAKQEAgLTE5NSw2ICsxOTYsNyBAQAogICogdm9pZCBzaGFfaW5pdChfX3UzMiAqYnVmKQogICovCiAKKwkuYWxpZ24JMgogLkxfc2hhX2luaXRpYWxfZGlnZXN0OgogCS53b3JkCTB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL3N0cm5jcHlfZnJvbV91c2VyLlMgYi9hcmNoL2FybS9saWIvc3RybmNweV9mcm9tX3VzZXIuUwppbmRleCAzMzAzNzNjLi4xYzk4MTRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvc3RybmNweV9mcm9tX3VzZXIuUworKysgYi9hcmNoL2FybS9saWIvc3RybmNweV9mcm9tX3VzZXIuUwpAQCAtMjMsNyArMjMsNyBAQAogRU5UUlkoX19zdHJuY3B5X2Zyb21fdXNlcikKIAltb3YJaXAsIHIxCiAxOglzdWJzCXIyLCByMiwgIzEKLVVTRVIoCWxkcnBsYnQJcjMsIFtyMV0sICMxKQorCWxkcnVzcglyMywgcjEsIDEsIHBsCiAJYm1pCTJmCiAJc3RyYglyMywgW3IwXSwgIzEKIAl0ZXEJcjMsICMwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvc3Rybmxlbl91c2VyLlMgYi9hcmNoL2FybS9saWIvc3Rybmxlbl91c2VyLlMKaW5kZXggOTBiYjlkMC4uNzg1NWIyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL3N0cm5sZW5fdXNlci5TCisrKyBiL2FyY2gvYXJtL2xpYi9zdHJubGVuX3VzZXIuUwpAQCAtMjMsNyArMjMsNyBAQAogRU5UUlkoX19zdHJubGVuX3VzZXIpCiAJbW92CXIyLCByMAogMToKLVVTRVIoCWxkcmJ0CXIzLCBbcjBdLCAjMSkKKwlsZHJ1c3IJcjMsIHIwLCAxCiAJdGVxCXIzLCAjMAogCWJlcQkyZgogCXN1YnMJcjEsIHIxLCAjMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwppbmRleCAzMjNiNDdmLi5hMjRkODI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwpAQCAtMjMsNiArMjMsMTIgQEAKIAlzZWxlY3QgR0VORVJJQ19USU1FCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAorY29uZmlnIEFSQ0hfQVQ5MVNBTTlHMTAKKwlib29sICJBVDkxU0FNOUcxMCIKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKKwlzZWxlY3QgR0VORVJJQ19USU1FCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwogY29uZmlnIEFSQ0hfQVQ5MVNBTTkyNjMKIAlib29sICJBVDkxU0FNOTI2MyIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKQEAgLTQxLDYgKzQ3LDEyIEBACiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAKK2NvbmZpZyBBUkNIX0FUOTFTQU05RzQ1CisJYm9vbCAiQVQ5MVNBTTlHNDUiCisJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisKIGNvbmZpZyBBUkNIX0FUOTFDQVA5CiAJYm9vbCAiQVQ5MUNBUDkiCiAJc2VsZWN0IENQVV9BUk05MjZUCkBAIC0xNDQsNiArMTU2LDEzIEBACiAJaGVscAogCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgdWNEcmFnb24gWUwtOTIwMCBib2FyZC4KIAorY29uZmlnIE1BQ0hfQ1BVQVQ5MQorCWJvb2wgIkV1a3JlYSBDUFVBVDkxIgorCWRlcGVuZHMgb24gQVJDSF9BVDkxUk05MjAwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgRXVrcmVhIEVsZWN0cm9tYXRpcXVlJ3MKKwkgIENQVUFUOTEgYm9hcmQgPGh0dHA6Ly93d3cuZXVrcmVhLmNvbS8+LgorCiBlbmRpZgogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIwNSw2ICsyMjQsMTMgQEAKIAkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgYSBDYWxhbyBTeXN0ZW1zIFFJTC1BOTI2MCBCb2FyZC4KIAkgIDxodHRwOi8vd3d3LmNhbGFvLXN5c3RlbXMuY29tPgogCitjb25maWcgTUFDSF9DUFU5MjYwCisJYm9vbCAiRXVrcmVhIENQVTkyNjAgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05MjYwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhIEV1a3JlYSBFbGVjdHJvbWF0aXF1ZSdzCisJICBDUFU5MjYwIEJvYXJkIDxodHRwOi8vd3d3LmV1a3JlYS5jb20vPgorCiBlbmRpZgogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIyNCw2ICsyNTAsMjEgQEAKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK2lmIEFSQ0hfQVQ5MVNBTTlHMTAKKworY29tbWVudCAiQVQ5MVNBTTlHMTAgQm9hcmQgVHlwZSIKKworY29uZmlnIE1BQ0hfQVQ5MVNBTTlHMTBFSworCWJvb2wgIkF0bWVsIEFUOTFTQU05RzEwLUVLIEV2YWx1YXRpb24gS2l0IgorCWRlcGVuZHMgb24gQVJDSF9BVDkxU0FNOUcxMAorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOUcxMC1FSyBFdmFsdWF0aW9uIEtpdC4KKwkgIDxodHRwOi8vd3d3LmF0bWVsLmNvbS9keW4vcHJvZHVjdHMvdG9vbHNfY2FyZC5hc3A/dG9vbF9pZD00NTg4PgorCitlbmRpZgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogaWYgQVJDSF9BVDkxU0FNOTI2MwogCiBjb21tZW50ICJBVDkxU0FNOTI2MyBCb2FyZCBUeXBlIgpAQCAtMjc2LDYgKzMxNywyOSBAQAogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdC4KIAorY29uZmlnIE1BQ0hfQ1BVOUcyMAorCWJvb2wgIkV1a3JlYSBDUFU5RzIwIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9BVDkxU0FNOUcyMAorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgYSBFdWtyZWEgRWxlY3Ryb21hdGlxdWUncworCSAgQ1BVOUcyMCBCb2FyZCA8aHR0cDovL3d3dy5ldWtyZWEuY29tLz4KKworZW5kaWYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lmIEFSQ0hfQVQ5MVNBTTlHNDUKKworY29tbWVudCAiQVQ5MVNBTTlHNDUgQm9hcmQgVHlwZSIKKworY29uZmlnIE1BQ0hfQVQ5MVNBTTlHNDVFS0VTCisJYm9vbCAiQXRtZWwgQVQ5MVNBTTlHNDUtRUtFUyBFdmFsdWF0aW9uIEtpdCIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVNBTTlHNDUKKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVNBTTlHNDUtRUtFUyBFdmFsdWF0aW9uIEtpdC4KKwkgICJFUyIgYXQgdGhlIGVuZCBvZiB0aGUgbmFtZSBtZWFucyB0aGF0IHRoaXMgYm9hcmQgaXMgYW4KKwkgIEVuZ2luZWVyaW5nIFNhbXBsZS4KKwogZW5kaWYKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMTUsMTMgKzM3OSwxMyBAQAogCiBjb25maWcgTVREX0FUOTFfREFUQUZMQVNIX0NBUkQKIAlib29sICJFbmFibGUgRGF0YUZsYXNoIENhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChBUkNIX0FUOTFSTTkyMDBESyB8fCBNQUNIX0FUOTFSTTkyMDBFSyB8fCBNQUNIX0FUOTFTQU05MjYwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjNFSyB8fCBNQUNIX0FUOTFTQU05RzIwRUsgfHwgTUFDSF9FQ0JBVDkxIHx8IE1BQ0hfU0FNOV9MOTI2MCB8fCBNQUNIX0FUOTFDQVA5QURLIHx8IE1BQ0hfTkVPQ09SRTkyNikKKwlkZXBlbmRzIG9uIChBUkNIX0FUOTFSTTkyMDBESyB8fCBNQUNIX0FUOTFSTTkyMDBFSyB8fCBNQUNIX0FUOTFTQU05MjYwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTlHMTBFSyB8fCBNQUNIX0FUOTFTQU05MjYzRUsgfHwgTUFDSF9BVDkxU0FNOUcyMEVLIHx8IE1BQ0hfRUNCQVQ5MSB8fCBNQUNIX1NBTTlfTDkyNjAgfHwgTUFDSF9BVDkxQ0FQOUFESyB8fCBNQUNIX05FT0NPUkU5MjYpCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBEYXRhRmxhc2ggY2FyZC4KIAogY29uZmlnIE1URF9OQU5EX0FUTUVMX0JVU1dJRFRIXzE2CiAJYm9vbCAiRW5hYmxlIDE2LWJpdCBkYXRhIGJ1cyBpbnRlcmZhY2UgdG8gTkFORCBmbGFzaCIKLQlkZXBlbmRzIG9uIChNQUNIX0FUOTFTQU05MjYwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjNFSyB8fCBNQUNIX0FUOTFTQU05RzIwRUsgfHwgTUFDSF9BVDkxQ0FQOUFESykKKwlkZXBlbmRzIG9uIChNQUNIX0FUOTFTQU05MjYwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTlHMTBFSyB8fCBNQUNIX0FUOTFTQU05MjYzRUsgfHwgTUFDSF9BVDkxU0FNOUcyMEVLIHx8IE1BQ0hfQVQ5MVNBTTlHNDVFS0VTIHx8IE1BQ0hfQVQ5MUNBUDlBREspCiAJaGVscAogCSAgT24gQVQ5MVNBTTkyNnggYm9hcmRzIGJvdGggdHlwZXMgb2YgTkFORCBmbGFzaCBjYW4gYmUgcHJlc2VudAogCSAgKDggYW5kIDE2IGJpdCBkYXRhIGJ1cyB3aWR0aCkuCkBAIC0zODMsNyArNDQ3LDcgQEAKIAogY29uZmlnIEFUOTFfRUFSTFlfVVNBUlQzCiAJYm9vbCAiVVNBUlQzIgotCWRlcGVuZHMgb24gKEFSQ0hfQVQ5MVJNOTIwMCB8fCBBUkNIX0FUOTFTQU05UkwgfHwgQVJDSF9BVDkxU0FNOTI2MCB8fCBBUkNIX0FUOTFTQU05RzIwKQorCWRlcGVuZHMgb24gKEFSQ0hfQVQ5MVJNOTIwMCB8fCBBUkNIX0FUOTFTQU05UkwgfHwgQVJDSF9BVDkxU0FNOTI2MCB8fCBBUkNIX0FUOTFTQU05RzIwIHx8IEFSQ0hfQVQ5MVNBTTlHNDUpCiAKIGNvbmZpZyBBVDkxX0VBUkxZX1VTQVJUNAogCWJvb2wgIlVTQVJUNCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQppbmRleCBjNjlmZjIzLi5hNmVkMDE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCkBAIC0xMyw5ICsxMywxMSBAQAogb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCkJKz0gYXQ5MXJtOTIwMC5vIGF0OTFybTkyMDBfdGltZS5vIGF0OTFybTkyMDBfZGV2aWNlcy5vCiBvYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCkJKz0gYXQ5MXNhbTkyNjAubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTkyNjBfZGV2aWNlcy5vIHNhbTlfc21jLm8KIG9iai0kKENPTkZJR19BUkNIX0FUOTFTQU05MjYxKQkrPSBhdDkxc2FtOTI2MS5vIGF0OTFzYW05MjZ4X3RpbWUubyBhdDkxc2FtOTI2MV9kZXZpY2VzLm8gc2FtOV9zbWMubworb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHMTApCSs9IGF0OTFzYW05MjYxLm8gYXQ5MXNhbTkyNnhfdGltZS5vIGF0OTFzYW05MjYxX2RldmljZXMubyBzYW05X3NtYy5vCiBvYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MykJKz0gYXQ5MXNhbTkyNjMubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTkyNjNfZGV2aWNlcy5vIHNhbTlfc21jLm8KIG9iai0kKENPTkZJR19BUkNIX0FUOTFTQU05UkwpCSs9IGF0OTFzYW05cmwubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTlybF9kZXZpY2VzLm8gc2FtOV9zbWMubwogb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHMjApCSs9IGF0OTFzYW05MjYwLm8gYXQ5MXNhbTkyNnhfdGltZS5vIGF0OTFzYW05MjYwX2RldmljZXMubyAgc2FtOV9zbWMubworIG9iai0kKENPTkZJR19BUkNIX0FUOTFTQU05RzQ1KQkrPSBhdDkxc2FtOWc0NS5vIGF0OTFzYW05MjZ4X3RpbWUubyBhdDkxc2FtOWc0NV9kZXZpY2VzLm8gc2FtOV9zbWMubwogb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MUNBUDkpCSs9IGF0OTFjYXA5Lm8gYXQ5MXNhbTkyNnhfdGltZS5vIGF0OTFjYXA5X2RldmljZXMubyBzYW05X3NtYy5vCiBvYmotJChDT05GSUdfQVJDSF9BVDkxWDQwKQkrPSBhdDkxeDQwLm8gYXQ5MXg0MF90aW1lLm8KIApAQCAtMzIsNiArMzQsNyBAQAogb2JqLSQoQ09ORklHX01BQ0hfUElDT1RVWDJYWCkJKz0gYm9hcmQtcGljb3R1eDIwMC5vCiBvYmotJChDT05GSUdfTUFDSF9FQ0JBVDkxKQkrPSBib2FyZC1lY2JhdDkxLm8KIG9iai0kKENPTkZJR19NQUNIX1lMOTIwMCkJKz0gYm9hcmQteWwtOTIwMC5vCitvYmotJChDT05GSUdfTUFDSF9DUFVBVDkxKQkrPSBib2FyZC1jcHVhdDkxLm8KIAogIyBBVDkxU0FNOTI2MCBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOTI2MEVLKSArPSBib2FyZC1zYW05MjYwZWsubwpAQCAtNDAsOSArNDMsMTEgQEAKIG9iai0kKENPTkZJR19NQUNIX1VTQl9BOTI2MCkJKz0gYm9hcmQtdXNiLWE5MjYwLm8KIG9iai0kKENPTkZJR19NQUNIX1FJTF9BOTI2MCkJKz0gYm9hcmQtcWlsLWE5MjYwLm8KIG9iai0kKENPTkZJR19NQUNIX0FGRUI5MjYwKQkrPSBib2FyZC1hZmViLTkyNjB2MS5vCitvYmotJChDT05GSUdfTUFDSF9DUFU5MjYwKQkrPSBib2FyZC1jcHU5a3JlYS5vCiAKICMgQVQ5MVNBTTkyNjEgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjFFSykgKz0gYm9hcmQtc2FtOTI2MWVrLm8KK29iai0kKENPTkZJR19NQUNIX0FUOTFTQU05RzEwRUspICs9IGJvYXJkLXNhbTkyNjFlay5vCiAKICMgQVQ5MVNBTTkyNjMgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjNFSykgKz0gYm9hcmQtc2FtOTI2M2VrLm8KQEAgLTU0LDYgKzU5LDEwIEBACiAKICMgQVQ5MVNBTTlHMjAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlHMjBFSykgKz0gYm9hcmQtc2FtOWcyMGVrLm8KK29iai0kKENPTkZJR19NQUNIX0NQVTlHMjApCSs9IGJvYXJkLWNwdTlrcmVhLm8KKworIyBBVDkxU0FNOUc0NSBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CitvYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOUc0NUVLRVMpICs9IGJvYXJkLXNhbTltMTBnNDVlay5vCiAKICMgQVQ5MUNBUDkgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MUNBUDlBREspCSs9IGJvYXJkLWNhcDlhZGsubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUuYm9vdAppbmRleCAwNzFhMjUwLi4zNDYyYjgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUuYm9vdAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUuYm9vdApAQCAtNyw2ICs3LDEwIEBACiAgICB6cmVsYWRkci15CTo9IDB4NzAwMDgwMDAKIHBhcmFtc19waHlzLXkJOj0gMHg3MDAwMDEwMAogaW5pdHJkX3BoeXMteQk6PSAweDcwNDEwMDAwCitlbHNlIGlmZXEgKCQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpLHkpCisgICB6cmVsYWRkci15CTo9IDB4NzAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHg3MDAwMDEwMAoraW5pdHJkX3BoeXMteQk6PSAweDcwNDEwMDAwCiBlbHNlCiAgICB6cmVsYWRkci15CTo9IDB4MjAwMDgwMDAKIHBhcmFtc19waHlzLXkJOj0gMHgyMDAwMDEwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKaW5kZXggZDc0YzlhYy4uZWU0ZWEwZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYwpAQCAtMTExMyw2ICsxMTEzLDEyMiBAQAogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQogI2VuZGlmCiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ0YvSURFCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfQVQ5MV9NT0RVTEUpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19QQVRBX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX1BBVEFfQVQ5MV9NT0RVTEUpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19BVDkxX0NGKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxX0NGX01PRFVMRSkKKworc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgY2YwX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2YwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MV9DSElQU0VMRUNUXzQsCisJCS5lbmQJPSBBVDkxX0NISVBTRUxFQ1RfNCArIFNaXzI1Nk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjZjBfZGV2aWNlID0geworCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJmNmMF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY2YwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY2YwX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBjZjFfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZjFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxX0NISVBTRUxFQ1RfNSwKKwkJLmVuZAk9IEFUOTFfQ0hJUFNFTEVDVF81ICsgU1pfMjU2TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNmMV9kZXZpY2UgPSB7CisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmY2YxX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjZjFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjZjFfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jZihzdHJ1Y3QgYXQ5MV9jZl9kYXRhICpkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJdW5zaWduZWQgbG9uZyBjc2E7CisKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWNzYSA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9NQVRSSVhfRUJJQ1NBKTsKKworCXN3aXRjaCAoZGF0YS0+Y2hpcHNlbGVjdCkgeworCWNhc2UgNDoKKwkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEM4LCAwKTsKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM4LCAwKTsKKwkJY3NhIHw9IEFUOTFfTUFUUklYX0NTNEFfU01DX0NGMTsKKwkJY2YwX2RhdGEgPSAqZGF0YTsKKwkJcGRldiA9ICZjZjBfZGV2aWNlOworCQlicmVhazsKKwljYXNlIDU6CisJCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BDOSwgMCk7CisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOSwgMCk7CisJCWNzYSB8PSBBVDkxX01BVFJJWF9DUzVBX1NNQ19DRjI7CisJCWNmMV9kYXRhID0gKmRhdGE7CisJCXBkZXYgPSAmY2YxX2RldmljZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJBVDkxIENGOiBiYWQgY2hpcC1zZWxlY3QgcmVxdWVzdGVkICgldSlcbiIsCisJCSAgICAgICBkYXRhLT5jaGlwc2VsZWN0KTsKKwkJcmV0dXJuOworCX0KKworCWF0OTFfc3lzX3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwgY3NhKTsKKworCWlmIChkYXRhLT5yc3RfcGluKSB7CisJCWF0OTFfc2V0X211bHRpX2RyaXZlKGRhdGEtPnJzdF9waW4sIDApOworCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yc3RfcGluLCAxKTsKKwl9CisKKwlpZiAoZGF0YS0+aXJxX3BpbikgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmlycV9waW4sIDApOworCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5pcnFfcGluLCAxKTsKKwl9CisKKwlpZiAoZGF0YS0+ZGV0X3BpbikgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDApOworCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5kZXRfcGluLCAxKTsKKwl9CisKKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzYsIDApOyAgICAgLyogQ0ZDRTEgKi8KKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzcsIDApOyAgICAgLyogQ0ZDRTIgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzEwLCAwKTsgICAgLyogQ0ZSTlcgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE1LCAxKTsgICAgLyogTldBSVQgKi8KKworCWlmIChkYXRhLT5mbGFncyAmIEFUOTFfQ0ZfVFJVRV9JREUpCisjaWYgZGVmaW5lZChDT05GSUdfUEFUQV9BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19QQVRBX0FUOTFfTU9EVUxFKQorCQlwZGV2LT5uYW1lID0gInBhdGFfYXQ5MSI7CisjZWxpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERV9BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERV9BVDkxX01PRFVMRSkKKwkJcGRldi0+bmFtZSA9ICJhdDkxX2lkZSI7CisjZWxzZQorI3dhcm5pbmcgImJvYXJkIHJlcXVpcmVzIEFUOTFfQ0ZfVFJVRV9JREU6IGVuYWJsZSBlaXRoZXIgYXQ5MV9pZGUgb3IgcGF0YV9hdDkxIgorI2VuZGlmCisJZWxzZQorCQlwZGV2LT5uYW1lID0gImF0OTFfY2YiOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOworfQorCisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NmKHN0cnVjdCBhdDkxX2NmX2RhdGEgKiBkYXRhKSB7fQorI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYwppbmRleCAzYWNkN2Q3Li40ZWNmMzc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYxLmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxX3BtYy5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MV9yc3RjLmg+CkBAIC0zMCw3ICszMSwxMSBAQAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1NZUyksCiAJCS5sZW5ndGgJCT0gU1pfMTZLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgeworCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGF0OTFzYW05MjYxX3NyYW1fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJewogCQkudmlydHVhbAk9IEFUOTFfSU9fVklSVF9CQVNFIC0gQVQ5MVNBTTkyNjFfU1JBTV9TSVpFLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MVNBTTkyNjFfU1JBTV9CQVNFKSwKIAkJLmxlbmd0aAkJPSBBVDkxU0FNOTI2MV9TUkFNX1NJWkUsCkBAIC0zOCw2ICs0MywxNSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGF0OTFzYW05ZzEwX3NyYW1fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IEFUOTFfSU9fVklSVF9CQVNFIC0gQVQ5MVNBTTlHMTBfU1JBTV9TSVpFLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MVNBTTlHMTBfU1JBTV9CQVNFKSwKKwkJLmxlbmd0aAkJPSBBVDkxU0FNOUcxMF9TUkFNX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBDbG9ja3MKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNjMsNiArMjc3LDEyIEBACiAJLyogTWFwIHBlcmlwaGVyYWxzICovCiAJaW90YWJsZV9pbml0KGF0OTFzYW05MjYxX2lvX2Rlc2MsIEFSUkFZX1NJWkUoYXQ5MXNhbTkyNjFfaW9fZGVzYykpOwogCisJaWYgKGNwdV9pc19hdDkxc2FtOWcxMCgpKQorCQlpb3RhYmxlX2luaXQoYXQ5MXNhbTlnMTBfc3JhbV9kZXNjLCBBUlJBWV9TSVpFKGF0OTFzYW05ZzEwX3NyYW1fZGVzYykpOworCWVsc2UKKwkJaW90YWJsZV9pbml0KGF0OTFzYW05MjYxX3NyYW1fZGVzYywgQVJSQVlfU0laRShhdDkxc2FtOTI2MV9zcmFtX2Rlc2MpKTsKKworCiAJYXQ5MV9hcmNoX3Jlc2V0ID0gYXQ5MXNhbTkyNjFfcmVzZXQ7CiAJcG1fcG93ZXJfb2ZmID0gYXQ5MXNhbTkyNjFfcG93ZXJvZmY7CiAJYXQ5MV9leHRlcm5faXJxID0gKDEgPDwgQVQ5MVNBTTkyNjFfSURfSVJRMCkgfCAoMSA8PCBBVDkxU0FNOTI2MV9JRF9JUlExKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMKaW5kZXggYjdmMjMzMi4uNTU3MTlhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCkBAIC03MDcsOSArNzA3LDkgQEAKICAqICBBQzk3CiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX0FUOTFfQUM5NykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUOTFfQUM5N19NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQogc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgYWM5N19kYXRhOworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKQEAgLTcyNSw4ICs3MjUsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfYWM5N19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImFjOTdjIiwKLQkuaWQJCT0gMSwKKwkubmFtZQkJPSAiYXRtZWxfYWM5N2MiLAorCS5pZAkJPSAwLAogCS5kZXYJCT0gewogCQkJCS5kbWFfbWFzawkJPSAmYWM5N19kbWFtYXNrLAogCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCkBAIC03MzYsNyArNzM2LDcgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYWM5N19yZXNvdXJjZXMpLAogfTsKIAotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGF0bWVsX2FjOTdfZGF0YSAqZGF0YSkKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKQogewogCWlmICghZGF0YSkKIAkJcmV0dXJuOwpAQCAtNzUwLDExICs3NTAsMTEgQEAKIAlpZiAoZGF0YS0+cmVzZXRfcGluKQogCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yZXNldF9waW4sIDApOwogCi0JYWM5N19kYXRhID0gKmVrX2RhdGE7CisJYWM5N19kYXRhID0gKmRhdGE7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2M19hYzk3X2RldmljZSk7CiB9CiAjZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGF0bWVsX2FjOTdfZGF0YSAqZGF0YSkge30KK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTE2NmI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1LmMKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiAgQ2hpcC1zcGVjaWZpYyBzZXR1cCBjb2RlIGZvciB0aGUgQVQ5MVNBTTlHNDUgZmFtaWx5CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOWc0NS5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MV9wbWMuaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFfcnN0Yy5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MV9zaGR3Yy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgYXQ5MXNhbTlnNDVfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9TWVMsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfU1lTKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gQVQ5MV9JT19WSVJUX0JBU0UgLSBBVDkxU0FNOUc0NV9TUkFNX1NJWkUsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxU0FNOUc0NV9TUkFNX0JBU0UpLAorCQkubGVuZ3RoCQk9IEFUOTFTQU05RzQ1X1NSQU1fU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0KK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ2xvY2tzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVGhlIHBlcmlwaGVyYWwgY2xvY2tzLgorICovCitzdGF0aWMgc3RydWN0IGNsayBwaW9BX2NsayA9IHsKKwkubmFtZQkJPSAicGlvQV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfUElPQSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBpb0JfY2xrID0geworCS5uYW1lCQk9ICJwaW9CX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9QSU9CLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGlvQ19jbGsgPSB7CisJLm5hbWUJCT0gInBpb0NfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1BJT0MsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBwaW9ERV9jbGsgPSB7CisJLm5hbWUJCT0gInBpb0RFX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9QSU9ERSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7CisJLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVVMwLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKKwkubmFtZQkJPSAidXNhcnQxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9VUzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0geworCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1VTMiwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0M19jbGsgPSB7CisJLm5hbWUJCT0gInVzYXJ0M19jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVVMzLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgbW1jMF9jbGsgPSB7CisJLm5hbWUJCT0gIm1jaTBfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX01DSTAsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0d2kwX2NsayA9IHsKKwkubmFtZQkJPSAidHdpMF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVFdJMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHR3aTFfY2xrID0geworCS5uYW1lCQk9ICJ0d2kxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9UV0kxLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3BpMF9jbGsgPSB7CisJLm5hbWUJCT0gInNwaTBfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1NQSTAsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBzcGkxX2NsayA9IHsKKwkubmFtZQkJPSAic3BpMV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfU1BJMSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzYzBfY2xrID0geworCS5uYW1lCQk9ICJzc2MwX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9TU0MwLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3NjMV9jbGsgPSB7CisJLm5hbWUJCT0gInNzYzFfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1NTQzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0Y2JfY2xrID0geworCS5uYW1lCQk9ICJ0Y2JfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1RDQiwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHB3bV9jbGsgPSB7CisJLm5hbWUJCT0gInB3bV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfUFdNQywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRzY19jbGsgPSB7CisJLm5hbWUJCT0gInRzY19jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVFNDLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgZG1hX2NsayA9IHsKKwkubmFtZQkJPSAiZG1hX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9ETUEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB1aHBoc19jbGsgPSB7CisJLm5hbWUJCT0gInVocGhzX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9VSFBIUywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGxjZGNfY2xrID0geworCS5uYW1lCQk9ICJsY2RjX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9MQ0RDLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgYWM5N19jbGsgPSB7CisJLm5hbWUJCT0gImFjOTdfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX0FDOTdDLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgbWFjYl9jbGsgPSB7CisJLm5hbWUJCT0gIm1hY2JfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX0VNQUMsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBpc2lfY2xrID0geworCS5uYW1lCQk9ICJpc2lfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX0lTSSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVkcGhzX2NsayA9IHsKKwkubmFtZQkJPSAidWRwaHNfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1VEUEhTLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jbGsgPSB7CisJLm5hbWUJCT0gIm1jaTFfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX01DSTEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CisKKy8qIE9uZSBhZGRpdGlvbmFsIGZha2UgY2xvY2sgZm9yIG9oY2kgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG9oY2lfY2xrID0geworCS5uYW1lCQk9ICJvaGNpX2NsayIsCisJLnBtY19tYXNrCT0gMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorCS5wYXJlbnQJCT0gJnVocGhzX2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKKwkmcGlvQV9jbGssCisJJnBpb0JfY2xrLAorCSZwaW9DX2NsaywKKwkmcGlvREVfY2xrLAorCSZ1c2FydDBfY2xrLAorCSZ1c2FydDFfY2xrLAorCSZ1c2FydDJfY2xrLAorCSZ1c2FydDNfY2xrLAorCSZtbWMwX2NsaywKKwkmdHdpMF9jbGssCisJJnR3aTFfY2xrLAorCSZzcGkwX2NsaywKKwkmc3BpMV9jbGssCisJJnNzYzBfY2xrLAorCSZzc2MxX2NsaywKKwkmdGNiX2NsaywKKwkmcHdtX2NsaywKKwkmdHNjX2NsaywKKwkmZG1hX2NsaywKKwkmdWhwaHNfY2xrLAorCSZsY2RjX2NsaywKKwkmYWM5N19jbGssCisJJm1hY2JfY2xrLAorCSZpc2lfY2xrLAorCSZ1ZHBoc19jbGssCisJJm1tYzFfY2xrLAorCS8vIGlycTAKKwkmb2hjaV9jbGssCit9OworCisvKgorICogVGhlIHR3byBwcm9ncmFtbWFibGUgY2xvY2tzLgorICogWW91IG11c3QgY29uZmlndXJlIHBpbiBtdWx0aXBsZXhpbmcgdG8gYnJpbmcgdGhlc2Ugc2lnbmFscyBvdXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHBjazAgPSB7CisJLm5hbWUJCT0gInBjazAiLAorCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzAsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAorCS5pZAkJPSAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBjazEgPSB7CisJLm5hbWUJCT0gInBjazEiLAorCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAorCS5pZAkJPSAxLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05ZzQ1X3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGVyaXBoX2Nsb2Nrcyk7IGkrKykKKwkJY2xrX3JlZ2lzdGVyKHBlcmlwaF9jbG9ja3NbaV0pOworCisJY2xrX3JlZ2lzdGVyKCZwY2swKTsKKwljbGtfcmVnaXN0ZXIoJnBjazEpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEdQSU8KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgYXQ5MXNhbTlnNDVfZ3Bpb1tdID0geworCXsKKwkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0EsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9BLAorCQkuY2xvY2sJCT0gJnBpb0FfY2xrLAorCX0sIHsKKwkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0IsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9CLAorCQkuY2xvY2sJCT0gJnBpb0JfY2xrLAorCX0sIHsKKwkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0MsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9DLAorCQkuY2xvY2sJCT0gJnBpb0NfY2xrLAorCX0sIHsKKwkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0RFLAorCQkub2Zmc2V0CQk9IEFUOTFfUElPRCwKKwkJLmNsb2NrCQk9ICZwaW9ERV9jbGssCisJfSwgeworCQkuaWQJCT0gQVQ5MVNBTTlHNDVfSURfUElPREUsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9FLAorCQkuY2xvY2sJCT0gJnBpb0RFX2NsaywKKwl9Cit9OworCitzdGF0aWMgdm9pZCBhdDkxc2FtOWc0NV9yZXNldCh2b2lkKQoreworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlNUQ19DUiwgQVQ5MV9SU1RDX0tFWSB8IEFUOTFfUlNUQ19QUk9DUlNUIHwgQVQ5MV9SU1RDX1BFUlJTVCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0OTFzYW05ZzQ1X3Bvd2Vyb2ZmKHZvaWQpCit7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TSERXX0NSLCBBVDkxX1NIRFdfS0VZIHwgQVQ5MV9TSERXX1NIRFcpOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQVQ5MVNBTTlHNDUgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkIF9faW5pdCBhdDkxc2FtOWc0NV9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKK3sKKwkvKiBNYXAgcGVyaXBoZXJhbHMgKi8KKwlpb3RhYmxlX2luaXQoYXQ5MXNhbTlnNDVfaW9fZGVzYywgQVJSQVlfU0laRShhdDkxc2FtOWc0NV9pb19kZXNjKSk7CisKKwlhdDkxX2FyY2hfcmVzZXQgPSBhdDkxc2FtOWc0NV9yZXNldDsKKwlwbV9wb3dlcl9vZmYgPSBhdDkxc2FtOWc0NV9wb3dlcm9mZjsKKwlhdDkxX2V4dGVybl9pcnEgPSAoMSA8PCBBVDkxU0FNOUc0NV9JRF9JUlEwKTsKKworCS8qIEluaXQgY2xvY2sgc3Vic3lzdGVtICovCisJYXQ5MV9jbG9ja19pbml0KG1haW5fY2xvY2spOworCisJLyogUmVnaXN0ZXIgdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBjbG9ja3MgKi8KKwlhdDkxc2FtOWc0NV9yZWdpc3Rlcl9jbG9ja3MoKTsKKworCS8qIFJlZ2lzdGVyIEdQSU8gc3Vic3lzdGVtICovCisJYXQ5MV9ncGlvX2luaXQoYXQ5MXNhbTlnNDVfZ3BpbywgNSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgSW50ZXJydXB0IGluaXRpYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVGhlIGRlZmF1bHQgaW50ZXJydXB0IHByaW9yaXR5IGxldmVscyAoMCA9IGxvd2VzdCwgNyA9IGhpZ2hlc3QpLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGF0OTFzYW05ZzQ1X2RlZmF1bHRfaXJxX3ByaW9yaXR5W05SX0FJQ19JUlFTXSBfX2luaXRkYXRhID0geworCTcsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovCisJNywJLyogU3lzdGVtIFBlcmlwaGVyYWxzICovCisJMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCisJMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovCisJMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBDICovCisJMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBEIGFuZCBFICovCisJMCwKKwk1LAkvKiBVU0FSVCAwICovCisJNSwJLyogVVNBUlQgMSAqLworCTUsCS8qIFVTQVJUIDIgKi8KKwk1LAkvKiBVU0FSVCAzICovCisJMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAwICovCisJNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlIDAgKi8KKwk2LAkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMSAqLworCTUsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCisJNSwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KKwk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCisJNCwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLworCTAsCS8qIFRpbWVyIENvdW50ZXIgMCwgMSwgMiwgMywgNCBhbmQgNSAqLworCTAsCS8qIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciAqLworCTAsCS8qIFRvdWNoIFNjcmVlbiBDb250cm9sbGVyICovCisJMCwJLyogRE1BIENvbnRyb2xsZXIgKi8KKwkyLAkvKiBVU0IgSG9zdCBIaWdoIFNwZWVkIHBvcnQgKi8KKwkzLAkvKiBMREMgQ29udHJvbGxlciAqLworCTUsCS8qIEFDOTcgQ29udHJvbGxlciAqLworCTMsCS8qIEV0aGVybmV0ICovCisJMCwJLyogSW1hZ2UgU2Vuc29yIEludGVyZmFjZSAqLworCTIsCS8qIFVTQiBEZXZpY2UgSGlnaCBzcGVlZCBwb3J0ICovCisJMCwKKwkwLAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIDEgKi8KKwkwLAorCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKSAqLworfTsKKwordm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtOUl9BSUNfSVJRU10pCit7CisJaWYgKCFwcmlvcml0eSkKKwkJcHJpb3JpdHkgPSBhdDkxc2FtOWc0NV9kZWZhdWx0X2lycV9wcmlvcml0eTsKKworCS8qIEluaXRpYWxpemUgdGhlIEFJQyBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCWF0OTFfYWljX2luaXQocHJpb3JpdHkpOworCisJLyogRW5hYmxlIEdQSU8gaW50ZXJydXB0cyAqLworCWF0OTFfZ3Bpb19pcnFfc2V0dXAoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDZlODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCkBAIC0wLDAgKzEsMTIzMCBAQAorLyoKKyAqICBPbi1DaGlwIGRldmljZXMgc2V0dXAgY29kZSBmb3IgdGhlIEFUOTFTQU05RzQ1IGZhbWlseQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQXRtZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KKworI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFzYW05ZzQ1Lmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOWc0NV9tYXRyaXguaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVVNCIEhvc3QgKE9IQ0kpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX29oY2lfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JoX29oY2lfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9PSENJX0JBU0UsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9PSENJX0JBU0UgKyBTWl8xTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9VSFBIUywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0lEX1VIUEhTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV91c2JoX29oY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX29oY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJm9oY2lfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1c2JoX29oY2lfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHVzYmhfb2hjaV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmhfb2hjaV9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmhfb2hjaShzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpCit7CisJaW50IGk7CisKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCS8qIEVuYWJsZSBWQnVzIGNvbnRyb2wgZm9yIFVIUCBwb3J0cyAqLworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0czsgaSsrKSB7CisJCWlmIChkYXRhLT52YnVzX3BpbltpXSkKKwkJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnZidXNfcGluW2ldLCAwKTsKKwl9CisKKwl1c2JoX29oY2lfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91c2JoX29oY2lfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaF9vaGNpKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVVNCIEhTIERldmljZSAoR2FkZ2V0KQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiYV91ZGNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9VRFBIU19GSUZPLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfVURQSFNfRklGTyArIFNaXzUxMksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9VRFBIUywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVURQSFMgKyBTWl8xSyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9VRFBIUywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0lEX1VEUEhTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworI2RlZmluZSBFUChuYW0sIGlkeCwgbWF4cGt0LCBtYXhiaywgZG1hLCBpc29jKQkJCVwKKwlbaWR4XSA9IHsJCQkJCQlcCisJCS5uYW1lCQk9IG5hbSwJCQkJXAorCQkuaW5kZXgJCT0gaWR4LAkJCQlcCisJCS5maWZvX3NpemUJPSBtYXhwa3QsCQkJXAorCQkubnJfYmFua3MJPSBtYXhiaywJCQlcCisJCS5jYW5fZG1hCT0gZG1hLAkJCQlcCisJCS5jYW5faXNvYwk9IGlzb2MsCQkJCVwKKwl9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiYV9lcF9kYXRhIHVzYmFfdWRjX2VwW10gX19pbml0ZGF0YSA9IHsKKwlFUCgiZXAwIiwgMCwgNjQsIDEsIDAsIDApLAorCUVQKCJlcDEiLCAxLCAxMDI0LCAyLCAxLCAxKSwKKwlFUCgiZXAyIiwgMiwgMTAyNCwgMiwgMSwgMSksCisJRVAoImVwMyIsIDMsIDEwMjQsIDMsIDEsIDApLAorCUVQKCJlcDQiLCA0LCAxMDI0LCAzLCAxLCAwKSwKKwlFUCgiZXA1IiwgNSwgMTAyNCwgMywgMSwgMSksCisJRVAoImVwNiIsIDYsIDEwMjQsIDMsIDEsIDEpLAorfTsKKworI3VuZGVmIEVQCisKKy8qCisgKiBwZGF0YSBkb2Vzbid0IGhhdmUgcm9vbSBmb3IgYW55IGVuZHBvaW50cywgc28gd2UgbmVlZCB0bworICogYXBwZW5kIHJvb20gZm9yIHRoZSBvbmVzIHdlIG5lZWQgcmlnaHQgYWZ0ZXIgaXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCXN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgcGRhdGE7CisJc3RydWN0IHVzYmFfZXBfZGF0YSBlcFs3XTsKK30gdXNiYV91ZGNfZGF0YTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV91c2JhX3VkY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3VzYmFfdWRjIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmdXNiYV91ZGNfZGF0YS5wZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHVzYmFfdWRjX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodXNiYV91ZGNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JhKHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgKmRhdGEpCit7CisJdXNiYV91ZGNfZGF0YS5wZGF0YS52YnVzX3BpbiA9IC1FSU5WQUw7CisJdXNiYV91ZGNfZGF0YS5wZGF0YS5udW1fZXAgPSBBUlJBWV9TSVpFKHVzYmFfdWRjX2VwKTsKKwltZW1jcHkodXNiYV91ZGNfZGF0YS5lcCwgdXNiYV91ZGNfZXAsIHNpemVvZih1c2JhX3VkY19lcCkpOzsKKworCWlmIChkYXRhICYmIGRhdGEtPnZidXNfcGluID4gMCkgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnZidXNfcGluLCAwKTsKKwkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+dmJ1c19waW4sIDEpOworCQl1c2JhX3VkY19kYXRhLnBkYXRhLnZidXNfcGluID0gZGF0YS0+dmJ1c19waW47CisJfQorCisJLyogUHVsbHVwIHBpbiBpcyBoYW5kbGVkIGludGVybmFsbHkgYnkgVVNCIGRldmljZSBwZXJpcGhlcmFsICovCisKKwkvKiBDbG9ja3MgKi8KKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXRtaV9jbGsiLCAmYXQ5MV91c2JhX3VkY19kZXZpY2UuZGV2LCAiaGNsayIpOworCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1ZHBoc19jbGsiLCAmYXQ5MV91c2JhX3VkY19kZXZpY2UuZGV2LCAicGNsayIpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VzYmFfdWRjX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmEoc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgRXRoZXJuZXQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNCKSB8fCBkZWZpbmVkKENPTkZJR19NQUNCX01PRFVMRSkKK3N0YXRpYyB1NjQgZXRoX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBhdDkxX2V0aF9kYXRhIGV0aF9kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGV0aF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfRU1BQywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfRU1BQyArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9FTUFDLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfSURfRU1BQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X2V0aF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm1hY2IiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJmV0aF9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmV0aF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gZXRoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZXRoX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBhdDkxX2V0aF9kYXRhICpkYXRhKQoreworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJaWYgKGRhdGEtPnBoeV9pcnFfcGluKSB7CisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cGh5X2lycV9waW4sIDApOworCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5waHlfaXJxX3BpbiwgMSk7CisJfQorCisJLyogUGlucyB1c2VkIGZvciBNSUkgYW5kIFJNSUkgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE3LCAwKTsJLyogRVRYQ0tfRVJFRkNLICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNSwgMCk7CS8qIEVSWERWICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMiwgMCk7CS8qIEVSWDAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEzLCAwKTsJLyogRVJYMSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDApOwkvKiBFUlhFUiAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTQsIDApOwkvKiBFVFhFTiAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTAsIDApOwkvKiBFVFgwICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMSwgMCk7CS8qIEVUWDEgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAwKTsJLyogRU1ESU8gKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsJLyogRU1EQyAqLworCisJaWYgKCFkYXRhLT5pc19ybWlpKSB7CisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjksIDApOwkvKiBFQ1JTICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMzAsIDApOwkvKiBFQ09MICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBOCwgIDApOwkvKiBFUlgyICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBOSwgIDApOwkvKiBFUlgzICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjgsIDApOwkvKiBFUlhDSyAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTYsICAwKTsJLyogRVRYMiAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTcsICAwKTsJLyogRVRYMyAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI3LCAwKTsJLyogRVRYRVIgKi8KKwl9CisKKwlldGhfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfZXRoX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgTkFORCAvIFNtYXJ0TWVkaWEKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUxfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgbmFuZF9kYXRhOworCisjZGVmaW5lIE5BTkRfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBOQU5EX0JBU0UsCisJCS5lbmQJPSBOQU5EX0JBU0UgKyBTWl8yNTZNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0VDQywKKwkJLmVuZAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0VDQyArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X25hbmRfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF9uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gbmFuZF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5hbmRfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBjc2E7CisKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWNzYSA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9NQVRSSVhfRUJJQ1NBKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX01BVFJJWF9FQklDU0EsIGNzYSB8IEFUOTFfTUFUUklYX0VCSV9DUzNBX1NNQ19TTUFSVE1FRElBKTsKKworCS8qIGVuYWJsZSBwaW4gKi8KKwlpZiAoZGF0YS0+ZW5hYmxlX3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+ZW5hYmxlX3BpbiwgMSk7CisKKwkvKiByZWFkeS9idXN5IHBpbiAqLworCWlmIChkYXRhLT5yZHlfcGluKQorCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnJkeV9waW4sIDEpOworCisJLyogY2FyZCBkZXRlY3QgcGluICovCisJaWYgKGRhdGEtPmRldF9waW4pCisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7CisKKwluYW5kX2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X25hbmRfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBUV0kgKGkyYykKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBQcmVmZXIgdGhlIEdQSU8gY29kZSBzaW5jZSB0aGUgVFdJIGNvbnRyb2xsZXIgaXNuJ3Qgcm9idXN0CisgKiAoZ2V0cyBvdmVycnVucyBhbmQgdW5kZXJydW5zIHVuZGVyIGxvYWQpIGFuZCBjYW4gb25seSBpc3N1ZQorICogcmVwZWF0ZWQgU1RBUlRzIGluIG9uZSBzY2VuYXJpbyAodGhlIGRyaXZlciBkb2Vzbid0IHlldCBoYW5kbGUgdGhlbSkuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQorc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIHBkYXRhX2kyYzAgPSB7CisJLnNkYV9waW4JCT0gQVQ5MV9QSU5fUEEyMCwKKwkuc2RhX2lzX29wZW5fZHJhaW4JPSAxLAorCS5zY2xfcGluCQk9IEFUOTFfUElOX1BBMjEsCisJLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKKwkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3R3aTBfZGV2aWNlID0geworCS5uYW1lCQkJPSAiaTJjLWdwaW8iLAorCS5pZAkJCT0gMCwKKwkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmcGRhdGFfaTJjMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YV9pMmMxID0geworCS5zZGFfcGluCQk9IEFUOTFfUElOX1BCMTAsCisJLnNkYV9pc19vcGVuX2RyYWluCT0gMSwKKwkuc2NsX3BpbgkJPSBBVDkxX1BJTl9QQjExLAorCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDEsCisJLnVkZWxheQkJCT0gMiwJCS8qIH4xMDAga0h6ICovCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV90d2kxX2RldmljZSA9IHsKKwkubmFtZQkJCT0gImkyYy1ncGlvIiwKKwkuaWQJCQk9IDEsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnBkYXRhX2kyYzEsCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHNob3J0IGkyY19pZCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKK3sKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbyhpMmNfaWQsIGRldmljZXMsIG5yX2RldmljZXMpOworCisJaWYgKGkyY19pZCA9PSAwKSB7CisJCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BBMjAsIDEpOwkJLyogVFdEIChTREEpICovCisJCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjAsIDEpOworCisJCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BBMjEsIDEpOwkJLyogVFdDSyAoU0NMKSAqLworCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTIxLCAxKTsKKworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3R3aTBfZGV2aWNlKTsKKwl9IGVsc2UgeworCQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQjEwLCAxKTsJCS8qIFRXRCAoU0RBKSAqLworCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQjEwLCAxKTsKKworCQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQjExLCAxKTsJCS8qIFRXQ0sgKFNDTCkgKi8KKwkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEIxMSwgMSk7CisKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV90d2kxX2RldmljZSk7CisJfQorfQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0FUOTFfTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2kwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9UV0kwLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9UV0kwICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0lEX1RXSTAsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9UV0kwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdHdpMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfaTJjIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSB0d2kwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpMF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2kxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9UV0kxLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9UV0kxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0lEX1RXSTEsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9UV0kxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdHdpMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfaTJjIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSB0d2kxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpMV9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzaG9ydCBpMmNfaWQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCit7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oaTJjX2lkLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKKworCS8qIHBpbnMgdXNlZCBmb3IgVFdJIGludGVyZmFjZSAqLworCWlmIChpMmNfaWQgPT0gMCkgeworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIwLCAwKTsJCS8qIFRXRCAqLworCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTIwLCAxKTsKKworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIxLCAwKTsJCS8qIFRXQ0sgKi8KKwkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyMSwgMSk7CisKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV90d2kwX2RldmljZSk7CisJfSBlbHNlIHsKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMCwgMCk7CQkvKiBUV0QgKi8KKwkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEIxMCwgMSk7CisKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMSwgMCk7CQkvKiBUV0NLICovCisJCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BCMTEsIDEpOworCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfdHdpMV9kZXZpY2UpOworCX0KK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHNob3J0IGkyY19pZCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgU1BJCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQorc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfU1BJMCwKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfU1BJMCArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9TUEkwLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfSURfU1BJMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3NwaTBfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorCS5yZXNvdXJjZQk9IHNwaTBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkwX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMF9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEIzLCBBVDkxX1BJTl9QQjE4LCBBVDkxX1BJTl9QQjE5LCBBVDkxX1BJTl9QRDI3IH07CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpMV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfU1BJMSwKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfU1BJMSArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9TUEkxLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfSURfU1BJMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3NwaTFfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorCS5yZXNvdXJjZQk9IHNwaTFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkxX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMV9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEIxNywgQVQ5MV9QSU5fUEQyOCwgQVQ5MV9QSU5fUEQxOCwgQVQ5MV9QSU5fUEQxOSB9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBjc19waW47CisJc2hvcnQgZW5hYmxlX3NwaTAgPSAwOworCXNob3J0IGVuYWJsZV9zcGkxID0gMDsKKworCS8qIENob29zZSBTUEkgY2hpcC1zZWxlY3RzICovCisJZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgeworCQlpZiAoZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCisJCQljc19waW4gPSAodW5zaWduZWQgbG9uZykgZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGE7CisJCWVsc2UgaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQorCQkJY3NfcGluID0gc3BpMF9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKKwkJZWxzZQorCQkJY3NfcGluID0gc3BpMV9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKKworCQlpZiAoZGV2aWNlc1tpXS5idXNfbnVtID09IDApCisJCQllbmFibGVfc3BpMCA9IDE7CisJCWVsc2UKKwkJCWVuYWJsZV9zcGkxID0gMTsKKworCQkvKiBlbmFibGUgY2hpcC1zZWxlY3QgcGluICovCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNzX3BpbiwgMSk7CisKKwkJLyogcGFzcyBjaGlwLXNlbGVjdCBwaW4gdG8gZHJpdmVyICovCisJCWRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgY3NfcGluOworCX0KKworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGRldmljZXMsIG5yX2RldmljZXMpOworCisJLyogQ29uZmlndXJlIFNQSSBidXMoZXMpICovCisJaWYgKGVuYWJsZV9zcGkwKSB7CisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMCwgMCk7CS8qIFNQSTBfTUlTTyAqLworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEsIDApOwkvKiBTUEkwX01PU0kgKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyLCAwKTsJLyogU1BJMF9TUENLICovCisKKwkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInNwaTBfY2xrIiwgJmF0OTFzYW05ZzQ1X3NwaTBfZGV2aWNlLmRldiwgInNwaV9jbGsiKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9zcGkwX2RldmljZSk7CisJfQorCWlmIChlbmFibGVfc3BpMSkgeworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE0LCAwKTsJLyogU1BJMV9NSVNPICovCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTUsIDApOwkvKiBTUEkxX01PU0kgKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNiwgMCk7CS8qIFNQSTFfU1BDSyAqLworCisJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJzcGkxX2NsayIsICZhdDkxc2FtOWc0NV9zcGkxX2RldmljZS5kZXYsICJzcGlfY2xrIik7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfc3BpMV9kZXZpY2UpOworCX0KK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIExDRCBDb250cm9sbGVyCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX01PRFVMRSkKK3N0YXRpYyB1NjQgbGNkY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyBsY2RjX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGNkY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0xDRENfQkFTRSwKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0xDRENfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0lEX0xDREMsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9MQ0RDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9sY2RjX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfbGNkZmIiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmbGNkY19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmxjZGNfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGxjZGNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsY2RjX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbGNkYyhzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMCwgMCk7CS8qIExDRERQV1IgKi8KKworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMiwgMCk7CS8qIExDRENDICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUzLCAwKTsJLyogTENEVlNZTkMgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTQsIDApOwkvKiBMQ0RIU1lOQyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFNSwgMCk7CS8qIExDRERPVENLICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU2LCAwKTsJLyogTENEREVOICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU3LCAwKTsJLyogTENERDAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTgsIDApOwkvKiBMQ0REMSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFOSwgMCk7CS8qIExDREQyICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxMCwgMCk7CS8qIExDREQzICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxMSwgMCk7CS8qIExDREQ0ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxMiwgMCk7CS8qIExDREQ1ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxMywgMCk7CS8qIExDREQ2ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxNCwgMCk7CS8qIExDREQ3ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxNSwgMCk7CS8qIExDREQ4ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxNiwgMCk7CS8qIExDREQ5ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxNywgMCk7CS8qIExDREQxMCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTgsIDApOwkvKiBMQ0REMTEgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTE5LCAwKTsJLyogTENERDEyICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyMCwgMCk7CS8qIExDREQxMyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjEsIDApOwkvKiBMQ0REMTQgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIyLCAwKTsJLyogTENERDE1ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyMywgMCk7CS8qIExDREQxNiAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjQsIDApOwkvKiBMQ0REMTcgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI1LCAwKTsJLyogTENERDE4ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyNiwgMCk7CS8qIExDREQxOSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjcsIDApOwkvKiBMQ0REMjAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI4LCAwKTsJLyogTENERDIxICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyOSwgMCk7CS8qIExDREQyMiAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMzAsIDApOwkvKiBMQ0REMjMgKi8KKworCWxjZGNfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9sY2RjX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gKmRhdGEpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRpbWVyL0NvdW50ZXIgYmxvY2sKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfQVRNRUxfVENMSUIKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMCwKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMCArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9UQ0IsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9UQ0IsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV90Y2IwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdGNiIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSB0Y2IwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiMF9yZXNvdXJjZXMpLAorfTsKKworLyogVENCMSBiZWdpbnMgd2l0aCBUQzMgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiMV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMSwKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMSArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9UQ0IsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9UQ0IsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV90Y2IxX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdGNiIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSB0Y2IxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiMV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKQoreworCS8qIHRoaXMgY2hpcCBoYXMgb25lIGNsb2NrIGFuZCBpcnEgZm9yIGFsbCBzaXggVEMgY2hhbm5lbHMgKi8KKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidGNiX2NsayIsICZhdDkxc2FtOWc0NV90Y2IwX2RldmljZS5kZXYsICJ0MF9jbGsiKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3RjYjBfZGV2aWNlKTsKKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidGNiX2NsayIsICZhdDkxc2FtOWc0NV90Y2IxX2RldmljZS5kZXYsICJ0MF9jbGsiKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3RjYjFfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpIHsgfQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBSVEMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDApIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9ydGNfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX3J0YyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gMCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnRjKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9ydGNfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0Yyh2b2lkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBSVFQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnR0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfUlRULAorCQkuZW5kCT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfUlRUICsgU1pfMTYgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9ydHRfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX3J0dCIsCisJLmlkCQk9IDAsCisJLnJlc291cmNlCT0gcnR0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocnR0X3Jlc291cmNlcyksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0dCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfcnR0X2RldmljZSk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBXYXRjaGRvZworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05X1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOV9XQVRDSERPR19NT0RVTEUpCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV93ZHRfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX3dkdCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gMCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3dkdF9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgUFdNCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BVE1FTF9QV00pIHx8IGRlZmluZWQoQ09ORklHX0FUTUVMX1BXTV9NT0RVTEUpCitzdGF0aWMgdTMyIHB3bV9tYXNrOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHB3bV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfUFdNQywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfUFdNQyArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9QV01DLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfSURfUFdNQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3B3bTBfZGV2aWNlID0geworCS5uYW1lCT0gImF0bWVsX3B3bSIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJnB3bV9tYXNrLAorCX0sCisJLnJlc291cmNlCT0gcHdtX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHdtX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcHdtKHUzMiBtYXNrKQoreworCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00wKSkKKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQyNCwgMSk7CS8qIGVuYWJsZSBQV00wICovCisKKwlpZiAobWFzayAmICgxIDw8IEFUOTFfUFdNMSkpCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BEMzEsIDEpOwkvKiBlbmFibGUgUFdNMSAqLworCisJaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTIpKQorCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDI2LCAxKTsJLyogZW5hYmxlIFBXTTIgKi8KKworCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00zKSkKKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQwLCAxKTsJLyogZW5hYmxlIFBXTTMgKi8KKworCXB3bV9tYXNrID0gbWFzazsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfcHdtMF9kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9wd20odTMyIG1hc2spIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFNTQyAtLSBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQykgfHwgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDX01PRFVMRSkKK3N0YXRpYyB1NjQgc3NjMF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9TU0MwLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9TU0MwICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0lEX1NTQzAsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9TU0MwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfc3NjMF9kZXZpY2UgPSB7CisJLm5hbWUJPSAic3NjIiwKKwkuaWQJPSAwLAorCS5kZXYJPSB7CisJCS5kbWFfbWFzawkJPSAmc3NjMF9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCX0sCisJLnJlc291cmNlCT0gc3NjMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzBfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMF9waW5zKHVuc2lnbmVkIHBpbnMpCit7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMSwgMSk7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMCwgMSk7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEQpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMiwgMSk7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMywgMSk7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENCwgMSk7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkYpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENSwgMSk7Cit9CisKK3N0YXRpYyB1NjQgc3NjMV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9TU0MxLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9TU0MxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0lEX1NTQzEsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9TU0MxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfc3NjMV9kZXZpY2UgPSB7CisJLm5hbWUJPSAic3NjIiwKKwkuaWQJPSAxLAorCS5kZXYJPSB7CisJCS5kbWFfbWFzawkJPSAmc3NjMV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCX0sCisJLnJlc291cmNlCT0gc3NjMV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzFfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMV9waW5zKHVuc2lnbmVkIHBpbnMpCit7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTQsIDEpOworCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEyLCAxKTsKKwlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxMCwgMSk7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTEsIDEpOworCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEzLCAxKTsKKwlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNSwgMSk7Cit9CisKKy8qCisgKiBTU0MgY29udHJvbGxlcnMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggbGlicmFyeSBjb2RlLCBpbnN0ZWFkIG9mIGFueQorICoga2luZCBvZiBhbGwtc2luZ2luZy9hbGwtZGFuY2luZyBkcml2ZXIuICBGb3IgZXhhbXBsZSBvbmUgY291bGQgYmUKKyAqIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIEkyUyBhdWRpbyBjb2RlYydzIGRyaXZlciwgd2hpbGUgYW5vdGhlciBvbmUKKyAqIG9uIHRoZSBzYW1lIHN5c3RlbSBtaWdodCBiZSB1c2VkIGJ5IGEgY3VzdG9tIGRhdGEgY2FwdHVyZSBkcml2ZXIuCisgKi8KK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCS8qCisJICogTk9URTogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIG1hdGNoaW5nCisJICogInBpbnMiIHRvIHdoYXRldmVyIHdpbGwgYmUgdXNpbmcgZWFjaCBwYXJ0aWN1bGFyIGNvbnRyb2xsZXIuCisJICovCisJc3dpdGNoIChpZCkgeworCWNhc2UgQVQ5MVNBTTlHNDVfSURfU1NDMDoKKwkJcGRldiA9ICZhdDkxc2FtOWc0NV9zc2MwX2RldmljZTsKKwkJY29uZmlndXJlX3NzYzBfcGlucyhwaW5zKTsKKwkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInNzYzBfY2xrIiwgJnBkZXYtPmRldiwgInBjbGsiKTsKKwkJYnJlYWs7CisJY2FzZSBBVDkxU0FNOUc0NV9JRF9TU0MxOgorCQlwZGV2ID0gJmF0OTFzYW05ZzQ1X3NzYzFfZGV2aWNlOworCQljb25maWd1cmVfc3NjMV9waW5zKHBpbnMpOworCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgic3NjMV9jbGsiLCAmcGRldi0+ZGV2LCAicGNsayIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOworfQorCisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVUFSVAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9BVE1FTCkKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGJndV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFfVkFfQkFTRV9TWVMgKyBBVDkxX0RCR1UsCisJCS5lbmQJPSBBVDkxX1ZBX0JBU0VfU1lTICsgQVQ5MV9EQkdVICsgU1pfNTEyIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFfSURfU1lTLAorCQkuZW5kCT0gQVQ5MV9JRF9TWVMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSBkYmd1X2RhdGEgPSB7CisJLnVzZV9kbWFfdHgJPSAwLAorCS51c2VfZG1hX3J4CT0gMCwKKwkucmVncwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9TWVMgKyBBVDkxX0RCR1UpLAorfTsKKworc3RhdGljIHU2NCBkYmd1X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9kYmd1X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmZGJndV9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmRiZ3VfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGRiZ3VfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkYmd1X3Jlc291cmNlcyksCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX2RiZ3VfcGlucyh2b2lkKQoreworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTIsIDApOwkJLyogRFJYRCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTMsIDEpOwkJLyogRFRYRCAqLworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzAsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1VTMCArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9VUzAsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9VUzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MF9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMSwKKwkudXNlX2RtYV9yeAk9IDEsCit9OworCitzdGF0aWMgdTY0IHVhcnQwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV91YXJ0MF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnVhcnQwX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDBfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHVhcnQwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDBfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModW5zaWduZWQgcGlucykKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE5LCAxKTsJCS8qIFRYRDAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE4LCAwKTsJCS8qIFJYRDAgKi8KKworCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTcsIDApOwkvKiBSVFMwICovCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxNSwgMCk7CS8qIENUUzAgKi8KK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVVMxLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzEgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfSURfVVMxLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfSURfVVMxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKKwkudXNlX2RtYV90eAk9IDEsCisJLnVzZV9kbWFfcngJPSAxLAorfTsKKworc3RhdGljIHU2NCB1YXJ0MV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdWFydDFfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCisJLmlkCQk9IDIsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MV9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQxX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB1YXJ0MV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQxX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKHVuc2lnbmVkIHBpbnMpCit7CisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI0LCAxKTsJCS8qIFRYRDEgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjUsIDApOwkJLyogUlhEMSAqLworCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNiwgMCk7CS8qIFJUUzEgKi8KKwlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDE3LCAwKTsJLyogQ1RTMSAqLworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQyX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzIsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1VTMiArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9VUzIsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9VUzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMSwKKwkudXNlX2RtYV9yeAk9IDEsCit9OworCitzdGF0aWMgdTY0IHVhcnQyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV91YXJ0Ml9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKKwkuaWQJCT0gMywKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjYsIDEpOwkJLyogVFhEMiAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNywgMCk7CQkvKiBSWEQyICovCisKKwlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQorCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzksIDApOwkvKiBSVFMyICovCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMSwgMCk7CS8qIENUUzIgKi8KK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0M19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVVMzLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzMgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfSURfVVMzLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfSURfVVMzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDNfZGF0YSA9IHsKKwkudXNlX2RtYV90eAk9IDEsCisJLnVzZV9kbWFfcngJPSAxLAorfTsKKworc3RhdGljIHU2NCB1YXJ0M19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdWFydDNfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCisJLmlkCQk9IDQsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0M19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQzX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB1YXJ0M19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQzX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0M19waW5zKHVuc2lnbmVkIHBpbnMpCit7CisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI4LCAxKTsJCS8qIFRYRDMgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjksIDApOwkJLyogUlhEMyAqLworCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMCk7CS8qIFJUUzMgKi8KKwlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQorCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAwKTsJLyogQ1RTMyAqLworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZTsJLyogdGhlIHNlcmlhbCBjb25zb2xlIGRldmljZSAqLworCit2b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJc3dpdGNoIChpZCkgeworCQljYXNlIDA6CQkvKiBEQkdVICovCisJCQlwZGV2ID0gJmF0OTFzYW05ZzQ1X2RiZ3VfZGV2aWNlOworCQkJY29uZmlndXJlX2RiZ3VfcGlucygpOworCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoIm1jayIsICZwZGV2LT5kZXYsICJ1c2FydCIpOworCQkJYnJlYWs7CisJCWNhc2UgQVQ5MVNBTTlHNDVfSURfVVMwOgorCQkJcGRldiA9ICZhdDkxc2FtOWc0NV91YXJ0MF9kZXZpY2U7CisJCQljb25maWd1cmVfdXNhcnQwX3BpbnMocGlucyk7CisJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQwX2NsayIsICZwZGV2LT5kZXYsICJ1c2FydCIpOworCQkJYnJlYWs7CisJCWNhc2UgQVQ5MVNBTTlHNDVfSURfVVMxOgorCQkJcGRldiA9ICZhdDkxc2FtOWc0NV91YXJ0MV9kZXZpY2U7CisJCQljb25maWd1cmVfdXNhcnQxX3BpbnMocGlucyk7CisJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQxX2NsayIsICZwZGV2LT5kZXYsICJ1c2FydCIpOworCQkJYnJlYWs7CisJCWNhc2UgQVQ5MVNBTTlHNDVfSURfVVMyOgorCQkJcGRldiA9ICZhdDkxc2FtOWc0NV91YXJ0Ml9kZXZpY2U7CisJCQljb25maWd1cmVfdXNhcnQyX3BpbnMocGlucyk7CisJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQyX2NsayIsICZwZGV2LT5kZXYsICJ1c2FydCIpOworCQkJYnJlYWs7CisJCWNhc2UgQVQ5MVNBTTlHNDVfSURfVVMzOgorCQkJcGRldiA9ICZhdDkxc2FtOWc0NV91YXJ0M19kZXZpY2U7CisJCQljb25maWd1cmVfdXNhcnQzX3BpbnMocGlucyk7CisJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQzX2NsayIsICZwZGV2LT5kZXYsICJ1c2FydCIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm47CisJfQorCXBkZXYtPmlkID0gcG9ydG5yOwkJLyogdXBkYXRlIHRvIG1hcHBlZCBJRCAqLworCisJaWYgKHBvcnRuciA8IEFUTUVMX01BWF9VQVJUKQorCQlhdDkxX3VhcnRzW3BvcnRucl0gPSBwZGV2OworfQorCit2b2lkIF9faW5pdCBhdDkxX3NldF9zZXJpYWxfY29uc29sZSh1bnNpZ25lZCBwb3J0bnIpCit7CisJaWYgKHBvcnRuciA8IEFUTUVMX01BWF9VQVJUKQorCQlhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlID0gYXQ5MV91YXJ0c1twb3J0bnJdOworfQorCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRNRUxfTUFYX1VBUlQ7IGkrKykgeworCQlpZiAoYXQ5MV91YXJ0c1tpXSkKKwkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihhdDkxX3VhcnRzW2ldKTsKKwl9CisKKwlpZiAoIWF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UpCisJCXByaW50ayhLRVJOX0lORk8gIkFUOTE6IE5vIGRlZmF1bHQgc2VyaWFsIGNvbnNvbGUgZGVmaW5lZC5cbiIpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQordm9pZCBfX2luaXQgYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUodW5zaWduZWQgcG9ydG5yKSB7fQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBUaGVzZSBkZXZpY2VzIGFyZSBhbHdheXMgcHJlc2VudCBhbmQgZG9uJ3QgbmVlZCBhbnkgYm9hcmQtc3BlY2lmaWMKKyAqIHNldHVwLgorICovCitzdGF0aWMgaW50IF9faW5pdCBhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCit7CisJYXQ5MV9hZGRfZGV2aWNlX3J0YygpOworCWF0OTFfYWRkX2RldmljZV9ydHQoKTsKKwlhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2coKTsKKwlhdDkxX2FkZF9kZXZpY2VfdGMoKTsKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hZmViLTkyNjB2MS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWFmZWItOTI2MHYxLmMKaW5kZXggOTcwZmQ2Yi4uNjFlNTJiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWFmZWItOTI2MHYxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWFmZWItOTI2MHYxLmMKQEAgLTE3NCw2ICsxNzQsMTYgQEAKIAl9LAogfTsKIAorLyoKKyAqIElERSAoQ0YgVHJ1ZSBJREUgbW9kZSkKKyAqLworc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgYWZlYjkyNjBfY2ZfZGF0YSA9IHsKKwkuY2hpcHNlbGVjdCA9IDQsCisJLmlycV9waW4gICAgPSBBVDkxX1BJTl9QQTYsCisJLnJzdF9waW4gICAgPSBBVDkxX1BJTl9QQTcsCisJLmZsYWdzICAgICAgPSBBVDkxX0NGX1RSVUVfSURFLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGFmZWI5MjYwX2JvYXJkX2luaXQodm9pZCkKIHsKIAkvKiBTZXJpYWwgKi8KQEAgLTIwMiw2ICsyMTIsOCBAQAogCQkJQVJSQVlfU0laRShhZmViOTI2MF9pMmNfZGV2aWNlcykpOwogCS8qIEF1ZGlvICovCiAJYXQ5MV9hZGRfZGV2aWNlX3NzYyhBVDkxU0FNOTI2MF9JRF9TU0MsIEFUTUVMX1NTQ19UWCk7CisJLyogSURFICovCisJYXQ5MV9hZGRfZGV2aWNlX2NmKCZhZmViOTI2MF9jZl9kYXRhKTsKIH0KIAogTUFDSElORV9TVEFSVChBRkVCOTI2MCwgIkN1c3RvbSBhZmViOTI2MCBib2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1OWtyZWEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHU5a3JlYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYzJlOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1OWtyZWEuYwpAQCAtMCwwICsxLDM4NSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHU5a3JlYS5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEF0bWVsCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjBfbWF0cml4Lmg+CisKKyNpbmNsdWRlICJzYW05X3NtYy5oIgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworc3RhdGljIHZvaWQgX19pbml0IGNwdTlrcmVhX21hcF9pbyh2b2lkKQoreworCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KKwlhdDkxc2FtOTI2MF9pbml0aWFsaXplKDE4NDMyMDAwKTsKKworCS8qIERHQlUgb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOworCisJLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMCwgMSwgQVRNRUxfVUFSVF9DVFMgfAorCQlBVE1FTF9VQVJUX1JUUyB8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfAorCQlBVE1FTF9VQVJUX0RDRCB8IEFUTUVMX1VBUlRfUkkpOworCisJLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8CisJCUFUTUVMX1VBUlRfUlRTKTsKKworCS8qIFVTQVJUMiBvbiB0dHlTMy4gKFJ4LCBUeCwgUlRTLCBDVFMpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMiwgMywgQVRNRUxfVUFSVF9DVFMgfAorCQlBVE1FTF9VQVJUX1JUUyk7CisKKwkvKiBVU0FSVDMgb24gdHR5UzQuIChSeCwgVHgpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMywgNCwgMCk7CisKKwkvKiBVU0FSVDQgb24gdHR5UzUuIChSeCwgVHgpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTNCwgNSwgMCk7CisKKwkvKiBVU0FSVDUgb24gdHR5UzYuIChSeCwgVHgpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTNSwgNiwgMCk7CisKKwkvKiBzZXQgc2VyaWFsIGNvbnNvbGUgdG8gdHR5UzAgKGllLCBEQkdVKSAqLworCWF0OTFfc2V0X3NlcmlhbF9jb25zb2xlKDApOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfaW5pdF9pcnEodm9pZCkKK3sKKwlhdDkxc2FtOTI2MF9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKKy8qCisgKiBVU0IgSG9zdCBwb3J0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV91c2JoX2RhdGEgPSB7CisJLnBvcnRzCQk9IDIsCit9OworCisvKgorICogVVNCIERldmljZSBwb3J0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGNwdTlrcmVhX3VkY19kYXRhID0geworCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BDOCwKKwkucHVsbHVwX3Bpbgk9IDAsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KK307CisKKy8qCisgKiBNQUNCIEV0aGVybmV0IGRldmljZQorICovCitzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV9tYWNiX2RhdGEgPSB7CisJLmlzX3JtaWkJPSAxLAorfTsKKworLyoKKyAqIE5BTkQgZmxhc2gKKyAqLworc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV9uYW5kX2RhdGEgPSB7CisJLmFsZQkJPSAyMSwKKwkuY2xlCQk9IDIyLAorCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKKwkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTQsCisJLmJ1c193aWR0aF8xNgk9IDAsCit9OworCisjaWZkZWYgQ09ORklHX01BQ0hfQ1BVOTI2MAorc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBjcHU5a3JlYV9uYW5kX3NtY19jb25maWcgPSB7CisJLm5jc19yZWFkX3NldHVwCQk9IDAsCisJLm5yZF9zZXR1cAkJPSAxLAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAorCS5ud2Vfc2V0dXAJCT0gMSwKKworCS5uY3NfcmVhZF9wdWxzZQkJPSAzLAorCS5ucmRfcHVsc2UJCT0gMywKKwkubmNzX3dyaXRlX3B1bHNlCT0gMywKKwkubndlX3B1bHNlCQk9IDMsCisKKwkucmVhZF9jeWNsZQkJPSA1LAorCS53cml0ZV9jeWNsZQkJPSA1LAorCisJLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCisJCXwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX0RCV184LAorCS50ZGZfY3ljbGVzCQk9IDIsCit9OworI2Vsc2UKK3N0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgY3B1OWtyZWFfbmFuZF9zbWNfY29uZmlnID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAorCS5ucmRfc2V0dXAJCT0gMiwKKwkubmNzX3dyaXRlX3NldHVwCT0gMCwKKwkubndlX3NldHVwCQk9IDIsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gNCwKKwkubnJkX3B1bHNlCQk9IDQsCisJLm5jc193cml0ZV9wdWxzZQk9IDQsCisJLm53ZV9wdWxzZQkJPSA0LAorCisJLnJlYWRfY3ljbGUJCT0gNywKKwkud3JpdGVfY3ljbGUJCT0gNywKKworCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERQorCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19EQldfOCwKKwkudGRmX2N5Y2xlcwkJPSAzLAorfTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfYWRkX2RldmljZV9uYW5kKHZvaWQpCit7CisJc2FtOV9zbWNfY29uZmlndXJlKDMsICZjcHU5a3JlYV9uYW5kX3NtY19jb25maWcpOworCWF0OTFfYWRkX2RldmljZV9uYW5kKCZjcHU5a3JlYV9uYW5kX2RhdGEpOworfQorCisvKgorICogTk9SIGZsYXNoCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGNwdWF0OTI2MF9ub3JfZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKK307CisKKyNkZWZpbmUgTk9SX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzAKKyNkZWZpbmUgTk9SX1NJWkUJU1pfNjRNCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugbm9yX2ZsYXNoX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gTk9SX0JBU0UsCisJCS5lbmQJPSBOT1JfQkFTRSArIE5PUl9TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3B1OWtyZWFfbm9yX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY3B1YXQ5MjYwX25vcl9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gbm9yX2ZsYXNoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobm9yX2ZsYXNoX3Jlc291cmNlcyksCit9OworCisjaWZkZWYgQ09ORklHX01BQ0hfQ1BVOTI2MAorc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBjcHU5a3JlYV9ub3Jfc21jX2NvbmZpZyA9IHsKKwkubmNzX3JlYWRfc2V0dXAJCT0gMCwKKwkubnJkX3NldHVwCQk9IDEsCisJLm5jc193cml0ZV9zZXR1cAk9IDAsCisJLm53ZV9zZXR1cAkJPSAxLAorCisJLm5jc19yZWFkX3B1bHNlCQk9IDEwLAorCS5ucmRfcHVsc2UJCT0gMTAsCisJLm5jc193cml0ZV9wdWxzZQk9IDYsCisJLm53ZV9wdWxzZQkJPSA2LAorCisJLnJlYWRfY3ljbGUJCT0gMTIsCisJLndyaXRlX2N5Y2xlCQk9IDgsCisKKwkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUKKwkJCXwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX0JBVF9XUklURQorCQkJfCBBVDkxX1NNQ19EQldfMTYsCisJLnRkZl9jeWNsZXMJCT0gMiwKK307CisjZWxzZQorc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBjcHU5a3JlYV9ub3Jfc21jX2NvbmZpZyA9IHsKKwkubmNzX3JlYWRfc2V0dXAJCT0gMCwKKwkubnJkX3NldHVwCQk9IDEsCisJLm5jc193cml0ZV9zZXR1cAk9IDAsCisJLm53ZV9zZXR1cAkJPSAxLAorCisJLm5jc19yZWFkX3B1bHNlCQk9IDEzLAorCS5ucmRfcHVsc2UJCT0gMTMsCisJLm5jc193cml0ZV9wdWxzZQk9IDgsCisJLm53ZV9wdWxzZQkJPSA4LAorCisJLnJlYWRfY3ljbGUJCT0gMTUsCisJLndyaXRlX2N5Y2xlCQk9IDEwLAorCisJLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCisJCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfV1JJVEUKKwkJCXwgQVQ5MV9TTUNfREJXXzE2LAorCS50ZGZfY3ljbGVzCQk9IDIsCit9OworI2VuZGlmCisKK3N0YXRpYyBfX2luaXQgdm9pZCBjcHU5a3JlYV9hZGRfZGV2aWNlX25vcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY3NhOworCisJY3NhID0gYXQ5MV9zeXNfcmVhZChBVDkxX01BVFJJWF9FQklDU0EpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwgY3NhIHwgQVQ5MV9NQVRSSVhfVkRESU9NU0VMXzNfM1YpOworCisJLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDAgKE5PUikgKi8KKwlzYW05X3NtY19jb25maWd1cmUoMCwgJmNwdTlrcmVhX25vcl9zbWNfY29uZmlnKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3B1OWtyZWFfbm9yX2ZsYXNoKTsKK30KKworLyoKKyAqIExFRHMKKyAqLworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjcHU5a3JlYV9sZWRzW10gPSB7CisJewkvKiBMRUQxICovCisJCS5uYW1lCQkJPSAiTEVEMSIsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzExLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gInRpbWVyIiwKKwl9LAorCXsJLyogTEVEMiAqLworCQkubmFtZQkJCT0gIkxFRDIiLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxMiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAorCX0sCisJewkvKiBMRUQzICovCisJCS5uYW1lCQkJPSAiTEVEMyIsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzcsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCisJfSwKKwl7CS8qIExFRDQgKi8KKwkJLm5hbWUJCQk9ICJMRUQ0IiwKKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BDOSwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgY3B1OWtyZWFfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJydGMtZHMxMzA3IiwgMHg2OCksCisJCS50eXBlCT0gImRzMTMzOSIsCisJfSwKK307CisKKy8qCisgKiBHUElPIEJ1dHRvbnMKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQorc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGNwdTlrcmVhX2J1dHRvbnNbXSA9IHsKKwl7CisJCS5ncGlvCQk9IEFUOTFfUElOX1BDMywKKwkJLmNvZGUJCT0gQlROXzAsCisJCS5kZXNjCQk9ICJCUDEiLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJCS53YWtldXAJCT0gMSwKKwl9LAorCXsKKwkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIyMCwKKwkJLmNvZGUJCT0gQlROXzEsCisJCS5kZXNjCQk9ICJCUDIiLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJCS53YWtldXAJCT0gMSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGNwdTlrcmVhX2J1dHRvbl9kYXRhID0geworCS5idXR0b25zCT0gY3B1OWtyZWFfYnV0dG9ucywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGNwdTlrcmVhX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3B1OWtyZWFfYnV0dG9uX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZjcHU5a3JlYV9idXR0b25fZGF0YSwKKwl9Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfYWRkX2RldmljZV9idXR0b25zKHZvaWQpCit7CisJYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQzMsIDEpOwkvKiBCUDEgKi8KKwlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQzMsIDEpOworCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEIyMCwgMSk7CS8qIEJQMiAqLworCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BCMjAsIDEpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjcHU5a3JlYV9idXR0b25fZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfYWRkX2RldmljZV9idXR0b25zKHZvaWQpCit7Cit9CisjZW5kaWYKKworLyoKKyAqIE1DSSAoU0QvTU1DKQorICovCitzdGF0aWMgc3RydWN0IGF0OTFfbW1jX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV9tbWNfZGF0YSA9IHsKKwkuc2xvdF9iCQk9IDAsCisJLndpcmU0CQk9IDEsCisJLmRldF9waW4JPSBBVDkxX1BJTl9QQTI5LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGNwdTlrcmVhX2JvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBOT1IgKi8KKwljcHU5a3JlYV9hZGRfZGV2aWNlX25vcigpOworCS8qIFNlcmlhbCAqLworCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKKwkvKiBVU0IgSG9zdCAqLworCWF0OTFfYWRkX2RldmljZV91c2JoKCZjcHU5a3JlYV91c2JoX2RhdGEpOworCS8qIFVTQiBEZXZpY2UgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdWRjKCZjcHU5a3JlYV91ZGNfZGF0YSk7CisJLyogTkFORCAqLworCWNwdTlrcmVhX2FkZF9kZXZpY2VfbmFuZCgpOworCS8qIEV0aGVybmV0ICovCisJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmY3B1OWtyZWFfbWFjYl9kYXRhKTsKKwkvKiBNTUMgKi8KKwlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZjcHU5a3JlYV9tbWNfZGF0YSk7CisJLyogSTJDICovCisJYXQ5MV9hZGRfZGV2aWNlX2kyYyhjcHU5a3JlYV9pMmNfZGV2aWNlcywKKwkJQVJSQVlfU0laRShjcHU5a3JlYV9pMmNfZGV2aWNlcykpOworCS8qIExFRHMgKi8KKwlhdDkxX2dwaW9fbGVkcyhjcHU5a3JlYV9sZWRzLCBBUlJBWV9TSVpFKGNwdTlrcmVhX2xlZHMpKTsKKwkvKiBQdXNoIEJ1dHRvbnMgKi8KKwljcHU5a3JlYV9hZGRfZGV2aWNlX2J1dHRvbnMoKTsKK30KKworI2lmZGVmIENPTkZJR19NQUNIX0NQVTkyNjAKK01BQ0hJTkVfU1RBUlQoQ1BVQVQ5MjYwLCAiRXVrcmVhIENQVTkyNjAiKQorI2Vsc2UKK01BQ0hJTkVfU1RBUlQoQ1BVQVQ5RzIwLCAiRXVrcmVhIENQVTlHMjAiKQorI2VuZGlmCisJLyogTWFpbnRhaW5lcjogRXJpYyBCZW5hcmQgLSBFVUtSRUEgRWxlY3Ryb21hdGlxdWUgKi8KKwkucGh5c19pbwk9IEFUOTFfQkFTRV9TWVMsCisJLmlvX3BnX29mZnN0CT0gKEFUOTFfVkFfQkFTRV9TWVMgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEFUOTFfU0RSQU1fQkFTRSArIDB4MTAwLAorCS50aW1lcgkJPSAmYXQ5MXNhbTkyNnhfdGltZXIsCisJLm1hcF9pbwkJPSBjcHU5a3JlYV9tYXBfaW8sCisJLmluaXRfaXJxCT0gY3B1OWtyZWFfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IGNwdTlrcmVhX2JvYXJkX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNwdWF0OTEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHVhdDkxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI4ZDk5NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHVhdDkxLmMKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1YXQ5MS5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBFcmljIEJlbmFyZCAtIGVyaWNAZXVrcmVhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMF9tYy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGNwdWF0OTFfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJsZWQxIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMwLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY3B1YXQ5MV9tYXBfaW8odm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCisJYXQ5MXJtOTIwMF9pbml0aWFsaXplKDE4NDMyMDAwLCBBVDkxUk05MjAwX1BRRlApOworCisJLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CisKKwkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTKSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMCwgMSwgQVRNRUxfVUFSVF9DVFMgfAorCQlBVE1FTF9VQVJUX1JUUyk7CisKKwkvKiBVU0FSVDEgb24gdHR5UzIuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzEsIDIsIEFUTUVMX1VBUlRfQ1RTIHwKKwkJQVRNRUxfVUFSVF9SVFMgfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwKKwkJQVRNRUxfVUFSVF9EQ0QgfCBBVE1FTF9VQVJUX1JJKTsKKworCS8qIFVTQVJUMiBvbiB0dHlTMyAoUngsIFR4KSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMiwgMywgMCk7CisKKwkvKiBVU0FSVDMgb24gdHR5UzQgKFJ4LCBUeCwgQ1RTLCBSVFMpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMzLCA0LCBBVE1FTF9VQVJUX0NUUyB8CisJCUFUTUVMX1VBUlRfUlRTKTsKKworCS8qIHNldCBzZXJpYWwgY29uc29sZSB0byB0dHlTMCAoaWUsIERCR1UpICovCisJYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUoMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjcHVhdDkxX2luaXRfaXJxKHZvaWQpCit7CisJYXQ5MXJtOTIwMF9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBfX2luaXRkYXRhIGNwdWF0OTFfZXRoX2RhdGEgPSB7CisJLmlzX3JtaWkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGNwdWF0OTFfdXNiaF9kYXRhID0geworCS5wb3J0cwkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgY3B1YXQ5MV91ZGNfZGF0YSA9IHsKKwkudmJ1c19waW4JPSBBVDkxX1BJTl9QQzE1LAorCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEMxNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSBfX2luaXRkYXRhIGNwdWF0OTFfbW1jX2RhdGEgPSB7CisJLmRldF9waW4JPSBBVDkxX1BJTl9QQzIsCisJLndpcmU0CQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBjcHVhdDkxX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNwdWF0OTFfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IEFUOTFfQ0hJUFNFTEVDVF8wLAorCS5lbmQJCT0gQVQ5MV9DSElQU0VMRUNUXzAgKyBTWl8xNk0gLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNwdWF0OTFfbm9yZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNwdWF0OTFfZmxhc2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9ICZjcHVhdDkxX2ZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKK307CisKKyNpZmRlZiBDT05GSUdfTVREX1BMQVRSQU0KK3N0cnVjdCBwbGF0ZGF0YV9tdGRfcmFtIGF0OTFfc3JhbV9wZGF0YSA9IHsKKwkubWFwbmFtZQk9ICJTUkFNIiwKKwkuYmFua3dpZHRoCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MV9zcmFtX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBBVDkxUk05MjAwX1NSQU1fQkFTRSwKKwkJLmVuZCAgID0gQVQ5MVJNOTIwMF9TUkFNX0JBU0UgKyBBVDkxUk05MjAwX1NSQU1fU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX3NyYW0gPSB7CisJLm5hbWUJCT0gIm10ZC1yYW0iLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9IGF0OTFfc3JhbV9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXQ5MV9zcmFtX3Jlc291cmNlKSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZhdDkxX3NyYW1fcGRhdGEsCisJfSwKK307CisjZW5kaWYgLyogTVREX1BMQVRSQU0gKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjcHVhdDkxX25vcmZsYXNoLAorI2lmZGVmIENPTkZJR19NVERfUExBVFJBTQorCSZhdDkxX3NyYW0sCisjZW5kaWYgLyogQ09ORklHX01URF9QTEFUUkFNICovCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY3B1YXQ5MV9ib2FyZF9pbml0KHZvaWQpCit7CisJLyogU2VyaWFsICovCisJYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOworCS8qIExFRHMuICovCisJYXQ5MV9ncGlvX2xlZHMoY3B1YXQ5MV9sZWRzLCBBUlJBWV9TSVpFKGNwdWF0OTFfbGVkcykpOworCS8qIEV0aGVybmV0ICovCisJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmY3B1YXQ5MV9ldGhfZGF0YSk7CisJLyogVVNCIEhvc3QgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmY3B1YXQ5MV91c2JoX2RhdGEpOworCS8qIFVTQiBEZXZpY2UgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdWRjKCZjcHVhdDkxX3VkY19kYXRhKTsKKwkvKiBNTUMgKi8KKwlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZjcHVhdDkxX21tY19kYXRhKTsKKwkvKiBJMkMgKi8KKwlhdDkxX2FkZF9kZXZpY2VfaTJjKE5VTEwsIDApOworCS8qIFBsYXRmb3JtIGRldmljZXMgKi8KKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChDUFVBVDkxLCAiRXVrcmVhIikKKwkvKiBNYWludGFpbmVyOiBFcmljIEJlbmFyZCAtIEVVS1JFQSBFbGVjdHJvbWF0aXF1ZSAqLworCS5waHlzX2lvCT0gQVQ5MV9CQVNFX1NZUywKKwkuaW9fcGdfb2Zmc3QJPSAoQVQ5MV9WQV9CQVNFX1NZUyA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gQVQ5MV9TRFJBTV9CQVNFICsgMHgxMDAsCisJLnRpbWVyCQk9ICZhdDkxcm05MjAwX3RpbWVyLAorCS5tYXBfaW8JCT0gY3B1YXQ5MV9tYXBfaW8sCisJLmluaXRfaXJxCT0gY3B1YXQ5MV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gY3B1YXQ5MV9ib2FyZF9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYxZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYxZWsuYwppbmRleCBkNTI2NmRhLi5mOWIxOTk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjFlay5jCkBAIC0yODcsNyArMjg3LDExIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYXQ3M2MyMTNfYm9hcmRfaW5mbyBhdDczYzIxM19kYXRhID0gewogCS5zc2NfaWQJCT0gMSwKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX0FUOTFTQU05MjYxRUspCiAJLnNob3J0bmFtZQk9ICJBVDkxU0FNOTI2MS1FSyBleHRlcm5hbCBEQUMiLAorI2Vsc2UKKwkuc2hvcnRuYW1lCT0gIkFUOTFTQU05RzEwLUVLIGV4dGVybmFsIERBQyIsCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVQ3M0MyMTMpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxM19NT0RVTEUpCkBAIC00MTQsNiArNDE4LDkgQEAKIAkuZGVmYXVsdF9tb25zcGVjcwkJPSAmYXQ5MWZiX2RlZmF1bHRfc3RuX21vbnNwZWNzLAogCS5hdG1lbF9sY2RmYl9wb3dlcl9jb250cm9sCT0gYXQ5MV9sY2RjX3N0bl9wb3dlcl9jb250cm9sLAogCS5ndWFyZF90aW1lCQkJPSAxLAorI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfQVQ5MVNBTTlHMTBFSykKKwkubGNkX3dpcmluZ19tb2RlCQk9IEFUTUVMX0xDRENfV0lSSU5HX1JHQiwKKyNlbmRpZgogfTsKIAogI2Vsc2UKQEAgLTQ2Nyw2ICs0NzQsOSBAQAogCS5kZWZhdWx0X21vbnNwZWNzCQk9ICZhdDkxZmJfZGVmYXVsdF90ZnRfbW9uc3BlY3MsCiAJLmF0bWVsX2xjZGZiX3Bvd2VyX2NvbnRyb2wJPSBhdDkxX2xjZGNfdGZ0X3Bvd2VyX2NvbnRyb2wsCiAJLmd1YXJkX3RpbWUJCQk9IDEsCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9BVDkxU0FNOUcxMEVLKQorCS5sY2Rfd2lyaW5nX21vZGUJCT0gQVRNRUxfTENEQ19XSVJJTkdfUkdCLAorI2VuZGlmCiB9OwogI2VuZGlmCiAKQEAgLTYwMCw3ICs2MTAsMTEgQEAKIAlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjFFSykKIE1BQ0hJTkVfU1RBUlQoQVQ5MVNBTTkyNjFFSywgIkF0bWVsIEFUOTFTQU05MjYxLUVLIikKKyNlbHNlCitNQUNISU5FX1NUQVJUKEFUOTFTQU05RzEwRUssICJBdG1lbCBBVDkxU0FNOUcxMC1FSyIpCisjZW5kaWYKIAkvKiBNYWludGFpbmVyOiBBdG1lbCAqLwogCS5waHlzX2lvCT0gQVQ5MV9CQVNFX1NZUywKIAkuaW9fcGdfb2Zmc3QJPSAoQVQ5MV9WQV9CQVNFX1NZUyA+PiAxOCkgJiAweGZmZmMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKaW5kZXggNTdkNTI1Mi4uMWJmN2JkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjNlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYzZWsuYwpAQCAtMzY0LDkgKzM2NCw5IEBACiAKIC8qCiAgKiBBQzk3CisgKiByZXNldF9waW4gaXMgbm90IGNvbm5lY3RlZDogTlJTVAogICovCi1zdGF0aWMgc3RydWN0IGF0bWVsX2FjOTdfZGF0YSBla19hYzk3X2RhdGEgPSB7Ci0JLnJlc2V0X3Bpbgk9IEFUOTFfUElOX1BBMTMsCitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgZWtfYWM5N19kYXRhID0gewogfTsKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMKaW5kZXggYTU1Mzk4ZS4uY2E0NzBkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYwpAQCAtMjczLDYgKzI3Myw3IEBACiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWtfaTJjX2RldmljZXNbXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCIyNGM1MTIiLCAweDUwKSwKKwkJSTJDX0JPQVJEX0lORk8oIndtODczMSIsIDB4MWIpLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOW0xMGc0NWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOW0xMGc0NWVrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1NThlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05bTEwZzQ1ZWsuYwpAQCAtMCwwICsxLDM4OSBAQAorLyoKKyAqICBCb2FyZC1zcGVjaWZpYyBzZXR1cCBjb2RlIGZvciB0aGUgQVQ5MVNBTTlNMTBHNDUgRXZhbHVhdGlvbiBLaXQgZmFtaWx5CisgKgorICogIENvdmVyczogKiBBVDkxU0FNOUc0NS1FS0VTICBib2FyZAorICogICAgICAgICAgKiBBVDkxU0FNOU0xMEc0NS1FSyBib2FyZAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQXRtZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8dmlkZW8vYXRtZWxfbGNkYy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxX3NoZHdjLmg+CisKKyNpbmNsdWRlICJzYW05X3NtYy5oIgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworCitzdGF0aWMgdm9pZCBfX2luaXQgZWtfbWFwX2lvKHZvaWQpCit7CisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwMCBNSHogY3J5c3RhbCAqLworCWF0OTFzYW05ZzQ1X2luaXRpYWxpemUoMTIwMDAwMDApOworCisJLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CisKKwkvKiBVU0FSVDAgbm90IGNvbm5lY3RlZCBvbiB0aGUgLUVLIGJvYXJkICovCisJLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTlHNDVfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKKworCS8qIHNldCBzZXJpYWwgY29uc29sZSB0byB0dHlTMCAoaWUsIERCR1UpICovCisJYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUoMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2lycSh2b2lkKQoreworCWF0OTFzYW05ZzQ1X2luaXRfaW50ZXJydXB0cyhOVUxMKTsKK30KKworCisvKgorICogVVNCIEhTIEhvc3QgcG9ydCAoY29tbW9uIHRvIE9IQ0kgJiBFSENJKQorICovCitzdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgZWtfdXNiaF9oc19kYXRhID0geworCS5wb3J0cwkJPSAyLAorCS52YnVzX3Bpbgk9IHtBVDkxX1BJTl9QRDEsIEFUOTFfUElOX1BEM30sCit9OworCisKKy8qCisgKiBVU0IgSFMgRGV2aWNlIHBvcnQKKyAqLworc3RhdGljIHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla191c2JhX3VkY19kYXRhID0geworCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BCMTksCit9OworCisKKy8qCisgKiBTUEkgZGV2aWNlcy4KKyAqLworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0geworCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KKwkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAorCQkuY2hpcF9zZWxlY3QJPSAwLAorCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKKwkJLmJ1c19udW0JPSAwLAorCX0sCit9OworCisKKy8qCisgKiBNQUNCIEV0aGVybmV0IGRldmljZQorICovCitzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSBla19tYWNiX2RhdGEgPSB7CisJLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEQ1LAorCS5pc19ybWlpCT0gMSwKK307CisKKworLyoKKyAqIE5BTkQgZmxhc2gKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgZWtfbmFuZF9wYXJ0aXRpb25bXSA9IHsKKwl7CisJCS5uYW1lCT0gIlBhcnRpdGlvbiAxIiwKKwkJLm9mZnNldAk9IDAsCisJCS5zaXplCT0gU1pfNjRNLAorCX0sCisJeworCQkubmFtZQk9ICJQYXJ0aXRpb24gMiIsCisJCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICogX19pbml0IG5hbmRfcGFydGl0aW9ucyhpbnQgc2l6ZSwgaW50ICpudW1fcGFydGl0aW9ucykKK3sKKwkqbnVtX3BhcnRpdGlvbnMgPSBBUlJBWV9TSVpFKGVrX25hbmRfcGFydGl0aW9uKTsKKwlyZXR1cm4gZWtfbmFuZF9wYXJ0aXRpb247Cit9CisKKy8qIGRldF9waW4gaXMgbm90IGNvbm5lY3RlZCAqLworc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBla19uYW5kX2RhdGEgPSB7CisJLmFsZQkJPSAyMSwKKwkuY2xlCQk9IDIyLAorCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEM4LAorCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEMxNCwKKwkucGFydGl0aW9uX2luZm8JPSBuYW5kX3BhcnRpdGlvbnMsCisjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVQ5MV9CVVNXSURUSF8xNikKKwkuYnVzX3dpZHRoXzE2CT0gMSwKKyNlbHNlCisJLmJ1c193aWR0aF8xNgk9IDAsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZWtfbmFuZF9zbWNfY29uZmlnID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAorCS5ucmRfc2V0dXAJCT0gMiwKKwkubmNzX3dyaXRlX3NldHVwCT0gMCwKKwkubndlX3NldHVwCQk9IDIsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gNCwKKwkubnJkX3B1bHNlCQk9IDQsCisJLm5jc193cml0ZV9wdWxzZQk9IDQsCisJLm53ZV9wdWxzZQkJPSA0LAorCisJLnJlYWRfY3ljbGUJCT0gNywKKwkud3JpdGVfY3ljbGUJCT0gNywKKworCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUsCisJLnRkZl9jeWNsZXMJCT0gMywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX25hbmQodm9pZCkKK3sKKwkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCisJaWYgKGVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCisJCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKKwllbHNlCisJCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OworCisJLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCisJc2FtOV9zbWNfY29uZmlndXJlKDMsICZla19uYW5kX3NtY19jb25maWcpOworCisJYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7Cit9CisKKworLyoKKyAqIExDRCBDb250cm9sbGVyCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYXQ5MV90ZnRfdmdhX21vZGVzW10gPSB7CisJeworCQkubmFtZSAgICAgICAgICAgPSAiTEciLAorCQkucmVmcmVzaAk9IDYwLAorCQkueHJlcwkJPSA0ODAsCQkueXJlcwkJPSAyNzIsCisJCS5waXhjbG9jawk9IEtIWjJQSUNPUyg5MDAwKSwKKworCQkubGVmdF9tYXJnaW4JPSAxLAkJLnJpZ2h0X21hcmdpbgk9IDEsCisJCS51cHBlcl9tYXJnaW4JPSA0MCwJCS5sb3dlcl9tYXJnaW4JPSAxLAorCQkuaHN5bmNfbGVuCT0gNDUsCQkudnN5bmNfbGVuCT0gMSwKKworCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9tb25zcGVjcyBhdDkxZmJfZGVmYXVsdF9tb25zcGVjcyA9IHsKKwkubWFudWZhY3R1cmVyCT0gIkxHIiwKKwkubW9uaXRvciAgICAgICAgPSAiTEIwNDNXUTEiLAorCisJLm1vZGVkYgkJPSBhdDkxX3RmdF92Z2FfbW9kZXMsCisJLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKGF0OTFfdGZ0X3ZnYV9tb2RlcyksCisJLmhmbWluCQk9IDE1MDAwLAorCS5oZm1heAkJPSAxNzY0MCwKKwkudmZtaW4JCT0gNTcsCisJLnZmbWF4CQk9IDY3LAorfTsKKworI2RlZmluZSBBVDkxU0FNOUc0NV9ERUZBVUxUX0xDRENPTjIgCShBVE1FTF9MQ0RDX01FTU9SX0xJVFRMRSBcCisJCQkJCXwgQVRNRUxfTENEQ19ESVNUWVBFX1RGVCBcCisJCQkJCXwgQVRNRUxfTENEQ19DTEtNT0RfQUxXQVlTQUNUSVZFKQorCisvKiBEcml2ZXIgZGF0YXMgKi8KK3N0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyBfX2luaXRkYXRhIGVrX2xjZGNfZGF0YSA9IHsKKwkubGNkY29uX2lzX2JhY2tsaWdodAkJPSB0cnVlLAorCS5kZWZhdWx0X2JwcAkJCT0gMzIsCisJLmRlZmF1bHRfZG1hY29uCQkJPSBBVE1FTF9MQ0RDX0RNQUVOLAorCS5kZWZhdWx0X2xjZGNvbjIJCT0gQVQ5MVNBTTlHNDVfREVGQVVMVF9MQ0RDT04yLAorCS5kZWZhdWx0X21vbnNwZWNzCQk9ICZhdDkxZmJfZGVmYXVsdF9tb25zcGVjcywKKwkuZ3VhcmRfdGltZQkJCT0gOSwKKwkubGNkX3dpcmluZ19tb2RlCQk9IEFUTUVMX0xDRENfV0lSSU5HX1JHQiwKK307CisKKyNlbHNlCitzdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gX19pbml0ZGF0YSBla19sY2RjX2RhdGE7CisjZW5kaWYKKworCisvKgorICogR1BJTyBCdXR0b25zCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBla19idXR0b25zW10gPSB7CisJewkvKiBCUDEsICJsZWZ0Y2xpYyIgKi8KKwkJLmNvZGUJCT0gQlROX0xFRlQsCisJCS5ncGlvCQk9IEFUOTFfUElOX1BCNiwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkuZGVzYwkJPSAibGVmdF9jbGljayIsCisJCS53YWtldXAJCT0gMSwKKwl9LAorCXsJLyogQlAyLCAicmlnaHRjbGljIiAqLworCQkuY29kZQkJPSBCVE5fUklHSFQsCisJCS5ncGlvCQk9IEFUOTFfUElOX1BCNywKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkuZGVzYwkJPSAicmlnaHRfY2xpY2siLAorCQkud2FrZXVwCQk9IDEsCisJfSwKKwkJLyogQlAzLCAiam95c3RpY2siICovCisJeworCQkuY29kZQkJPSBLRVlfTEVGVCwKKwkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIxNCwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkuZGVzYwkJPSAiSm95c3RpY2sgTGVmdCIsCisJfSwKKwl7CisJCS5jb2RlCQk9IEtFWV9SSUdIVCwKKwkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIxNSwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkuZGVzYwkJPSAiSm95c3RpY2sgUmlnaHQiLAorCX0sCisJeworCQkuY29kZQkJPSBLRVlfVVAsCisJCS5ncGlvCQk9IEFUOTFfUElOX1BCMTYsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gIkpveXN0aWNrIFVwIiwKKwl9LAorCXsKKwkJLmNvZGUJCT0gS0VZX0RPV04sCisJCS5ncGlvCQk9IEFUOTFfUElOX1BCMTcsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gIkpveXN0aWNrIERvd24iLAorCX0sCisJeworCQkuY29kZQkJPSBLRVlfRU5URVIsCisJCS5ncGlvCQk9IEFUOTFfUElOX1BCMTgsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gIkpveXN0aWNrIFByZXNzIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBla19idXR0b25fZGF0YSA9IHsKKwkuYnV0dG9ucwk9IGVrX2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShla19idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVrX2J1dHRvbl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImdwaW8ta2V5cyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZWtfYnV0dG9uX2RhdGEsCisJfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZWtfYnV0dG9ucyk7IGkrKykgeworCQlhdDkxX3NldF9HUElPX3BlcmlwaChla19idXR0b25zW2ldLmdwaW8sIDEpOworCQlhdDkxX3NldF9kZWdsaXRjaChla19idXR0b25zW2ldLmdwaW8sIDEpOworCX0KKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWtfYnV0dG9uX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKSB7fQorI2VuZGlmCisKKworLyoKKyAqIExFRHMgLi4uIHRoZXNlIGNvdWxkIGFsbCBiZSBQV00tZHJpdmVuLCBmb3IgdmFyaWFibGUgYnJpZ2h0bmVzcworICovCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKKwl7CS8qICJ0b3AiIGxlZCwgcmVkLCBwb3dlcmxlZCAqLworCQkubmFtZQkJCT0gImQ4IiwKKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BEMzAsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKKwl9LAorCXsJLyogImxlZnQiIGxlZCwgZ3JlZW4sIHVzZXJsZWQyLCBwd20zICovCisJCS5uYW1lCQkJPSAiZDYiLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEQwLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCisJfSwKKyNpZiAhKGRlZmluZWQoQ09ORklHX0xFRFNfQVRNRUxfUFdNKSB8fCBkZWZpbmVkKENPTkZJR19MRURTX0FUTUVMX1BXTV9NT0RVTEUpKQorCXsJLyogInJpZ2h0IiBsZWQsIGdyZWVuLCB1c2VybGVkMSwgcHdtMSAqLworCQkubmFtZQkJCT0gImQ3IiwKKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BEMzEsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibW1jMCIsCisJfSwKKyNlbmRpZgorfTsKKworCisvKgorICogUFdNIExlZHMKKyAqLworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19wd21fbGVkW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfTEVEU19BVE1FTF9QV00pIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfQVRNRUxfUFdNX01PRFVMRSkKKwl7CS8qICJyaWdodCIgbGVkLCBncmVlbiwgdXNlcmxlZDEsIHB3bTEgKi8KKwkJLm5hbWUJCQk9ICJkNyIsCisJCS5ncGlvCQkJPSAxLAkvKiBpcyBQV00gY2hhbm5lbCBudW1iZXIgKi8KKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKKwl9LAorI2VuZGlmCit9OworCisKKworc3RhdGljIHZvaWQgX19pbml0IGVrX2JvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBTZXJpYWwgKi8KKwlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7CisJLyogVVNCIEhTIEhvc3QgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdXNiaF9vaGNpKCZla191c2JoX2hzX2RhdGEpOworCS8qIFVTQiBIUyBEZXZpY2UgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdXNiYSgmZWtfdXNiYV91ZGNfZGF0YSk7CisJLyogU1BJICovCisJYXQ5MV9hZGRfZGV2aWNlX3NwaShla19zcGlfZGV2aWNlcywgQVJSQVlfU0laRShla19zcGlfZGV2aWNlcykpOworCS8qIEV0aGVybmV0ICovCisJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKKwkvKiBOQU5EICovCisJZWtfYWRkX2RldmljZV9uYW5kKCk7CisJLyogSTJDICovCisJYXQ5MV9hZGRfZGV2aWNlX2kyYygwLCBOVUxMLCAwKTsKKwkvKiBMQ0QgQ29udHJvbGxlciAqLworCWF0OTFfYWRkX2RldmljZV9sY2RjKCZla19sY2RjX2RhdGEpOworCS8qIFB1c2ggQnV0dG9ucyAqLworCWVrX2FkZF9kZXZpY2VfYnV0dG9ucygpOworCS8qIExFRHMgKi8KKwlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKKwlhdDkxX3B3bV9sZWRzKGVrX3B3bV9sZWQsIEFSUkFZX1NJWkUoZWtfcHdtX2xlZCkpOworfQorCitNQUNISU5FX1NUQVJUKEFUOTFTQU05RzQ1RUtFUywgIkF0bWVsIEFUOTFTQU05RzQ1LUVLRVMiKQorCS8qIE1haW50YWluZXI6IEF0bWVsICovCisJLnBoeXNfaW8JPSBBVDkxX0JBU0VfU1lTLAorCS5pb19wZ19vZmZzdAk9IChBVDkxX1ZBX0JBU0VfU1lTID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBBVDkxX1NEUkFNX0JBU0UgKyAweDEwMCwKKwkudGltZXIJCT0gJmF0OTFzYW05MjZ4X3RpbWVyLAorCS5tYXBfaW8JCT0gZWtfbWFwX2lvLAorCS5pbml0X2lycQk9IGVrX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBla19ib2FyZF9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKaW5kZXggZjZiNTY3Mi4uOWQwNzY3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogCiAjaW5jbHVkZSA8dmlkZW8vYXRtZWxfbGNkYy5oPgogCkBAIC0yMDgsNiArMjEwLDc5IEBACiAjZW5kaWYKIAogCisvKgorICogTEVEcworICovCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKKwl7CS8qICJib3R0b20iIGxlZCwgZ3JlZW4sIHVzZXJsZWQxIHRvIGJlIGRlZmluZWQgKi8KKwkJLm5hbWUJCQk9ICJkczEiLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEQxNSwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKKwl9LAorCXsJLyogImJvdHRvbSIgbGVkLCBncmVlbiwgdXNlcmxlZDIgdG8gYmUgZGVmaW5lZCAqLworCQkubmFtZQkJCT0gImRzMiIsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QRDE2LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAorCX0sCisJewkvKiAicG93ZXIiIGxlZCwgeWVsbG93ICovCisJCS5uYW1lCQkJPSAiZHMzIiwKKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BEMTQsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKKwl9Cit9OworCisKKy8qCisgKiBHUElPIEJ1dHRvbnMKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQorc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGVrX2J1dHRvbnNbXSA9IHsKKwl7CisJCS5ncGlvCQk9IEFUOTFfUElOX1BCMCwKKwkJLmNvZGUJCT0gQlROXzIsCisJCS5kZXNjCQk9ICJSaWdodCBDbGljayIsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLndha2V1cAkJPSAxLAorCX0sCisJeworCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjEsCisJCS5jb2RlCQk9IEJUTl8xLAorCQkuZGVzYwkJPSAiTGVmdCBDbGljayIsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLndha2V1cAkJPSAxLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZWtfYnV0dG9uX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBla19idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZWtfYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19idXR0b25fZGV2aWNlID0geworCS5uYW1lCQk9ICJncGlvLWtleXMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmVrX2J1dHRvbl9kYXRhLAorCX0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKK3sKKwlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMSwgMSk7CS8qIGJ0bjEgKi8KKwlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQjEsIDEpOworCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEIwLCAxKTsJLyogYnRuMiAqLworCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BCMCwgMSk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVrX2J1dHRvbl9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkge30KKyNlbmRpZgorCisKIHN0YXRpYyB2b2lkIF9faW5pdCBla19ib2FyZF9pbml0KHZvaWQpCiB7CiAJLyogU2VyaWFsICovCkBAIC0yMjYsNiArMzAxLDEwIEBACiAJYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7CiAJLyogVG91Y2ggU2NyZWVuIENvbnRyb2xsZXIgKi8KIAlhdDkxX2FkZF9kZXZpY2VfdHNhZGNjKCk7CisJLyogTEVEcyAqLworCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOworCS8qIFB1c2ggQnV0dG9ucyAqLworCWVrX2FkZF9kZXZpY2VfYnV0dG9ucygpOwogfQogCiBNQUNISU5FX1NUQVJUKEFUOTFTQU05UkxFSywgIkF0bWVsIEFUOTFTQU05UkwtRUsiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYwppbmRleCBiYWM1NzhmLi5jMDQyZGNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYwpAQCAtNDcsMjAgKzQ3LDI1IEBACiAgKiBDaGlwcyBoYXZlIHNvbWUga2luZCBvZiBjbG9ja3MgOiBncm91cCB0aGVtIGJ5IGZ1bmN0aW9uYWxpdHkKICAqLwogI2RlZmluZSBjcHVfaGFzX3V0bWkoKQkJKCAgY3B1X2lzX2F0OTFjYXA5KCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOXJsKCkpCisJCQkJfHwgY3B1X2lzX2F0OTFzYW05cmwoKSBcCisJCQkJfHwgY3B1X2lzX2F0OTFzYW05ZzQ1KCkpCiAKLSNkZWZpbmUgY3B1X2hhc184MDBNX3BsbGEoKQkoY3B1X2lzX2F0OTFzYW05ZzIwKCkpCisjZGVmaW5lIGNwdV9oYXNfODAwTV9wbGxhKCkJKCAgY3B1X2lzX2F0OTFzYW05ZzIwKCkgXAorCQkJCXx8IGNwdV9pc19hdDkxc2FtOWc0NSgpKQogCi0jZGVmaW5lIGNwdV9oYXNfcGxsYigpCQkoIWNwdV9pc19hdDkxc2FtOXJsKCkpCisjZGVmaW5lIGNwdV9oYXNfMzAwTV9wbGxhKCkJKGNwdV9pc19hdDkxc2FtOWcxMCgpKQogCi0jZGVmaW5lIGNwdV9oYXNfdXBsbCgpCQkoMCkKKyNkZWZpbmUgY3B1X2hhc19wbGxiKCkJCSghKGNwdV9pc19hdDkxc2FtOXJsKCkgXAorCQkJCXx8IGNwdV9pc19hdDkxc2FtOWc0NSgpKSkKKworI2RlZmluZSBjcHVfaGFzX3VwbGwoKQkJKGNwdV9pc19hdDkxc2FtOWc0NSgpKQogCiAvKiBVU0IgaG9zdCBIUyAmIEZTICovCiAjZGVmaW5lIGNwdV9oYXNfdWhwKCkJCSghY3B1X2lzX2F0OTFzYW05cmwoKSkKIAogLyogVVNCIGRldmljZSBGUyBvbmx5ICovCi0jZGVmaW5lIGNwdV9oYXNfdWRwZnMoKQkJKCFjcHVfaXNfYXQ5MXNhbTlybCgpKQotCisjZGVmaW5lIGNwdV9oYXNfdWRwZnMoKQkJKCEoY3B1X2lzX2F0OTFzYW05cmwoKSBcCisJCQkJfHwgY3B1X2lzX2F0OTFzYW05ZzQ1KCkpKQogCiBzdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsa19sb2NrKTsKQEAgLTEzMyw2ICsxMzgsMTMgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdWNrciA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9DS0dSX1VDS1IpOwogCisJaWYgKGNwdV9pc19hdDkxc2FtOWc0NSgpKSB7CisJCWlmIChpc19vbikKKwkJCXVja3IgfD0gQVQ5MV9QTUNfQklBU0VOOworCQllbHNlCisJCQl1Y2tyICY9IH5BVDkxX1BNQ19CSUFTRU47CisJfQorCiAJaWYgKGlzX29uKSB7CiAJCWlzX29uID0gQVQ5MV9QTUNfTE9DS1U7CiAJCWF0OTFfc3lzX3dyaXRlKEFUOTFfQ0tHUl9VQ0tSLCB1Y2tyIHwgY2xrLT5wbWNfbWFzayk7CkBAIC0zMTAsNiArMzIyLDcgQEAKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCXVuc2lnbmVkCXByZXNjYWxlOwogCXVuc2lnbmVkIGxvbmcJYWN0dWFsOworCXVuc2lnbmVkIGxvbmcJcHJldiA9IFVMT05HX01BWDsKIAogCWlmICghY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMxNyw4ICszMzAsMTYgQEAKIAogCWFjdHVhbCA9IGNsay0+cGFyZW50LT5yYXRlX2h6OwogCWZvciAocHJlc2NhbGUgPSAwOyBwcmVzY2FsZSA8IDc7IHByZXNjYWxlKyspIHsKLQkJaWYgKGFjdHVhbCAmJiBhY3R1YWwgPD0gcmF0ZSkKKwkJaWYgKGFjdHVhbCA+IHJhdGUpCisJCQlwcmV2ID0gYWN0dWFsOworCisJCWlmIChhY3R1YWwgJiYgYWN0dWFsIDw9IHJhdGUpIHsKKwkJCWlmICgocHJldiAtIHJhdGUpIDwgKHJhdGUgLSBhY3R1YWwpKSB7CisJCQkJYWN0dWFsID0gcHJldjsKKwkJCQlwcmVzY2FsZS0tOworCQkJfQogCQkJYnJlYWs7CisJCX0KIAkJYWN0dWFsID4+PSAxOwogCX0KIApAQCAtMzczLDYgKzM5NCwxMCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCWlmICghY2xrX2lzX3ByaW1hcnkocGFyZW50KSB8fCAhY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQogCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjcHVfaXNfYXQ5MXNhbTlybCgpICYmIHBhcmVudC0+aWQgPT0gQVQ5MV9QTUNfQ1NTX1BMTEIpCisJCXJldHVybiAtRUlOVkFMOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7CiAKIAljbGstPnJhdGVfaHogPSBwYXJlbnQtPnJhdGVfaHo7CkBAIC02MDEsNyArNjI2LDkgQEAKIAkJdWhwY2sucG1jX21hc2sgPSBBVDkxUk05MjAwX1BNQ19VSFA7CiAJCXVkcGNrLnBtY19tYXNrID0gQVQ5MVJNOTIwMF9QTUNfVURQOwogCQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19TQ0VSLCBBVDkxUk05MjAwX1BNQ19NQ0tVRFApOwotCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05MjYwKCkgfHwgY3B1X2lzX2F0OTFzYW05MjYxKCkgfHwgY3B1X2lzX2F0OTFzYW05MjYzKCkgfHwgY3B1X2lzX2F0OTFzYW05ZzIwKCkpIHsKKwl9IGVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MSgpIHx8CisJCSAgIGNwdV9pc19hdDkxc2FtOTI2MygpIHx8IGNwdV9pc19hdDkxc2FtOWcyMCgpIHx8CisJCSAgIGNwdV9pc19hdDkxc2FtOWcxMCgpKSB7CiAJCXVocGNrLnBtY19tYXNrID0gQVQ5MVNBTTkyNnhfUE1DX1VIUDsKIAkJdWRwY2sucG1jX21hc2sgPSBBVDkxU0FNOTI2eF9QTUNfVURQOwogCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFjYXA5KCkpIHsKQEAgLTYzNyw2ICs2NjQsNyBAQAogewogCXVuc2lnbmVkIHRtcCwgZnJlcSwgbWNrcjsKIAlpbnQgaTsKKwlpbnQgcGxsX292ZXJjbG9jayA9IGZhbHNlOwogCiAJLyoKIAkgKiBXaGVuIHRoZSBib290bG9hZGVyIGluaXRpYWxpemVkIHRoZSBtYWluIG9zY2lsbGF0b3IgY29ycmVjdGx5LApAQCAtNjU0LDEyICs2ODIsMjUgQEAKIAogCS8qIHJlcG9ydCBpZiBQTExBIGlzIG1vcmUgdGhhbiBtaWxkbHkgb3ZlcmNsb2NrZWQgKi8KIAlwbGxhLnJhdGVfaHogPSBhdDkxX3BsbF9yYXRlKCZwbGxhLCBtYWluX2Nsb2NrLCBhdDkxX3N5c19yZWFkKEFUOTFfQ0tHUl9QTExBUikpOwotCWlmICgoIWNwdV9oYXNfODAwTV9wbGxhKCkgJiYgcGxsYS5yYXRlX2h6ID4gMjA5MDAwMDAwKQotCSAgIHx8IChjcHVfaGFzXzgwME1fcGxsYSgpICYmIHBsbGEucmF0ZV9oeiA+IDgwMDAwMDAwMCkpCisJaWYgKGNwdV9oYXNfMzAwTV9wbGxhKCkpIHsKKwkJaWYgKHBsbGEucmF0ZV9oeiA+IDMwMDAwMDAwMCkKKwkJCXBsbF9vdmVyY2xvY2sgPSB0cnVlOworCX0gZWxzZSBpZiAoY3B1X2hhc184MDBNX3BsbGEoKSkgeworCQlpZiAocGxsYS5yYXRlX2h6ID4gODAwMDAwMDAwKQorCQkJcGxsX292ZXJjbG9jayA9IHRydWU7CisJfSBlbHNlIHsKKwkJaWYgKHBsbGEucmF0ZV9oeiA+IDIwOTAwMDAwMCkKKwkJCXBsbF9vdmVyY2xvY2sgPSB0cnVlOworCX0KKwlpZiAocGxsX292ZXJjbG9jaykKIAkJcHJfaW5mbygiQ2xvY2tzOiBQTExBIG92ZXJjbG9ja2VkLCAlbGQgTUh6XG4iLCBwbGxhLnJhdGVfaHogLyAxMDAwMDAwKTsKIAorCWlmIChjcHVfaXNfYXQ5MXNhbTlnNDUoKSkgeworCQltY2tyID0gYXQ5MV9zeXNfcmVhZChBVDkxX1BNQ19NQ0tSKTsKKwkJcGxsYS5yYXRlX2h6IC89ICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX1BMTEFESVYyKSA+PiAxMikpOwkvKiBwbGxhIGRpdmlzb3IgYnkgMiAqLworCX0KIAotCWlmIChjcHVfaGFzX3VwbGwoKSAmJiAhY3B1X2hhc19wbGxiKCkpIHsKKwlpZiAoIWNwdV9oYXNfcGxsYigpICYmIGNwdV9oYXNfdXBsbCgpKSB7CiAJCS8qIHNldHVwIFVUTUkgY2xvY2sgYXMgdGhlIGZvdXJ0aCBwcmltYXJ5IGNsb2NrCiAJCSAqIChpbnN0ZWFkIG9mIHBsbGIpICovCiAJCXV0bWlfY2xrLnR5cGUgfD0gQ0xLX1RZUEVfUFJJTUFSWTsKQEAgLTcwMSw2ICs3NDIsOSBAQAogCQkJZnJlcSAvICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDcpIDogZnJlcTsJLyogbWRpdiA7ICh4ID4+IDcpID0gKCh4ID4+IDgpICogMikgKi8KIAkJaWYgKG1ja3IgJiBBVDkxX1BNQ19QRElWKQogCQkJZnJlcSAvPSAyOwkJLyogcHJvY2Vzc29yIGNsb2NrIGRpdmlzaW9uICovCisJfSBlbHNlIGlmIChjcHVfaXNfYXQ5MXNhbTlnNDUoKSkgeworCQltY2sucmF0ZV9oeiA9IChtY2tyICYgQVQ5MV9QTUNfTURJVikgPT0gQVQ5MVNBTTlfUE1DX01ESVZfMyA/CisJCQlmcmVxIC8gMyA6IGZyZXEgLyAoMSA8PCAoKG1ja3IgJiBBVDkxX1BNQ19NRElWKSA+PiA4KSk7CS8qIG1kaXYgKi8KIAl9IGVsc2UgewogCQltY2sucmF0ZV9oeiA9IGZyZXEgLyAoMSA8PCAoKG1ja3IgJiBBVDkxX1BNQ19NRElWKSA+PiA4KSk7ICAgICAgLyogbWRpdiAqLwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oCmluZGV4IGI1ZGFmN2YuLjg4ZTQxM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaApAQCAtMTQsNiArMTQsNyBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFzYW05MjYxX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxc2FtOTI2M19pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jayk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTlybF9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jayk7CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTF4NDBfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFjYXA5X2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKIApAQCAtMjMsNiArMjQsNyBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFzYW05MjYxX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjNfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxc2FtOXJsX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxeDQwX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MWNhcDlfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FpY19pbml0KHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCmluZGV4IGYyMjM2ZjAuLmFlNDc3MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYwpAQCAtNDQsMTMgKzQ0LDExIEBACiAJCQkJCSB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpOwogc3RhdGljIGludCBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCiAJCQkJCXVuc2lnbmVkIG9mZnNldCk7Ci1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCk7CiAKICNkZWZpbmUgQVQ5MV9HUElPX0NISVAobmFtZSwgYmFzZV9ncGlvLCBucl9ncGlvKQkJCVwKIAl7CQkJCQkJCQlcCiAJCS5jaGlwID0gewkJCQkJCVwKIAkJCS5sYWJlbAkJICA9IG5hbWUsCQkJXAotCQkJLnJlcXVlc3QJICA9IGF0OTFfZ3Bpb2xpYl9yZXF1ZXN0LAlcCiAJCQkuZGlyZWN0aW9uX2lucHV0ICA9IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25faW5wdXQsIFwKIAkJCS5kaXJlY3Rpb25fb3V0cHV0ID0gYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9vdXRwdXQsIFwKIAkJCS5nZXQJCSAgPSBhdDkxX2dwaW9saWJfZ2V0LAkJXApAQCAtNTg4LDE5ICs1ODYsNiBAQAogCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodmFsID8gUElPX1NPRFIgOiBQSU9fQ09EUikpOwogfQogCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQl1bnNpZ25lZCBwaW4gPSBjaGlwLT5iYXNlICsgb2Zmc2V0OwotCXZvaWQgX19pb21lbSAqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZCBtYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCS8qIENhbm5vdCByZXF1ZXN0IEdQSU9zIHRoYXQgYXJlIGluIGFsdGVybmF0ZSBmdW5jdGlvbiBtb2RlICovCi0JaWYgKCEoX19yYXdfcmVhZGwocGlvICsgUElPX1BTUikgJiBtYXNrKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBhdDkxX2dwaW9saWJfZGJnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOTI2MS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOTI2MS5oCmluZGV4IDNhMzQ4Y2EuLjg3ZGU4YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXNhbTkyNjEuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05MjYxLmgKQEAgLTk1LDYgKzk1LDkgQEAKICNkZWZpbmUgQVQ5MVNBTTkyNjFfU1JBTV9CQVNFCTB4MDAzMDAwMDAJLyogSW50ZXJuYWwgU1JBTSBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgQVQ5MVNBTTkyNjFfU1JBTV9TSVpFCTB4MDAwMjgwMDAJLyogSW50ZXJuYWwgU1JBTSBzaXplICgxNjBLYikgKi8KIAorI2RlZmluZSBBVDkxU0FNOUcxMF9TUkFNX0JBU0UJQVQ5MVNBTTkyNjFfU1JBTV9CQVNFCS8qIEludGVybmFsIFNSQU0gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEFUOTFTQU05RzEwX1NSQU1fU0laRQkweDAwMDA0MDAwCS8qIEludGVybmFsIFNSQU0gc2l6ZSAoMTZLYikgKi8KKwogI2RlZmluZSBBVDkxU0FNOTI2MV9ST01fQkFTRQkweDAwNDAwMDAwCS8qIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgQVQ5MVNBTTkyNjFfUk9NX1NJWkUJU1pfMzJLCQkvKiBJbnRlcm5hbCBST00gc2l6ZSAoMzJLYikgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOWc0NS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOWc0NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MjY4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05ZzQ1LmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDaGlwLXNwZWNpZmljIGhlYWRlciBmaWxlIGZvciB0aGUgQVQ5MVNBTTlHNDUgZmFtaWx5CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IEF0bWVsIENvcnBvcmF0aW9uLgorICoKKyAqIENvbW1vbiBkZWZpbml0aW9ucy4KKyAqIEJhc2VkIG9uIEFUOTFTQU05RzQ1IHByZWxpbWluYXJ5IGRhdGFzaGVldC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgQVQ5MVNBTTlHNDVfSAorI2RlZmluZSBBVDkxU0FNOUc0NV9ICisKKy8qCisgKiBQZXJpcGhlcmFsIGlkZW50aWZpZXJzL2ludGVycnVwdHMuCisgKi8KKyNkZWZpbmUgQVQ5MV9JRF9GSVEJCTAJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkgKi8KKyNkZWZpbmUgQVQ5MV9JRF9TWVMJCTEJLyogU3lzdGVtIENvbnRyb2xsZXIgSW50ZXJydXB0ICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1BJT0EJMgkvKiBQYXJhbGxlbCBJL08gQ29udHJvbGxlciBBICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1BJT0IJMwkvKiBQYXJhbGxlbCBJL08gQ29udHJvbGxlciBCICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1BJT0MJNAkvKiBQYXJhbGxlbCBJL08gQ29udHJvbGxlciBDICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1BJT0RFCTUJLyogUGFyYWxsZWwgSS9PIENvbnRyb2xsZXIgRCBhbmQgRSAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9UUk5HCTYJLyogVHJ1ZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9VUzAJNwkvKiBVU0FSVCAwICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1VTMQk4CS8qIFVTQVJUIDEgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfVVMyCTkJLyogVVNBUlQgMiAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9VUzMJMTAJLyogVVNBUlQgMyAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9NQ0kwCTExCS8qIEhpZ2ggU3BlZWQgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAwICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1RXSTAJMTIJLyogVHdvLVdpcmUgSW50ZXJmYWNlIDAgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfVFdJMQkxMwkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMSAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9TUEkwCTE0CS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1NQSTEJMTUJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfU1NDMAkxNgkvKiBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlciAwICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1NTQzEJMTcJLyogU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIgMSAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9UQ0IJMTgJLyogVGltZXIgQ291bnRlciAwLCAxLCAyLCAzLCA0IGFuZCA1ICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1BXTUMJMTkJLyogUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1RTQwkyMAkvKiBUb3VjaCBTY3JlZW4gQURDIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfRE1BCTIxCS8qIERNQSBDb250cm9sbGVyICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1VIUEhTCTIyCS8qIFVTQiBIb3N0IEhpZ2ggU3BlZWQgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfTENEQwkyMwkvKiBMQ0QgQ29udHJvbGxlciAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9BQzk3QwkyNAkvKiBBQzk3IENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfRU1BQwkyNQkvKiBFdGhlcm5ldCBNQUMgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfSVNJCTI2CS8qIEltYWdlIFNlbnNvciBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfVURQSFMJMjcJLyogVVNCIERldmljZSBIaWdoIFNwZWVkICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX0FFU1RERVNTSEEgMjgJLyogQUVTICsgVC1ERVMgKyBTSEEgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfTUNJMQkyOQkvKiBIaWdoIFNwZWVkIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgMSAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9WREVDCTMwCS8qIFZpZGVvIERlY29kZXIgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfSVJRMAkzMQkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworCisvKgorICogVXNlciBQZXJpcGhlcmFsIHBoeXNpY2FsIGJhc2UgYWRkcmVzc2VzLgorICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVURQSFMJCTB4ZmZmNzgwMDAKKyNkZWZpbmUgQVQ5MVNBTTlHNDVfQkFTRV9UQ0IwCQkweGZmZjdjMDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVEMwCQkweGZmZjdjMDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVEMxCQkweGZmZjdjMDQwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVEMyCQkweGZmZjdjMDgwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfTUNJMAkJMHhmZmY4MDAwMAorI2RlZmluZSBBVDkxU0FNOUc0NV9CQVNFX1RXSTAJCTB4ZmZmODQwMDAKKyNkZWZpbmUgQVQ5MVNBTTlHNDVfQkFTRV9UV0kxCQkweGZmZjg4MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVVMwCQkweGZmZjhjMDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVVMxCQkweGZmZjkwMDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVVMyCQkweGZmZjk0MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVVMzCQkweGZmZjk4MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfU1NDMAkJMHhmZmY5YzAwMAorI2RlZmluZSBBVDkxU0FNOUc0NV9CQVNFX1NTQzEJCTB4ZmZmYTAwMDAKKyNkZWZpbmUgQVQ5MVNBTTlHNDVfQkFTRV9TUEkwCQkweGZmZmE0MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfU1BJMQkJMHhmZmZhODAwMAorI2RlZmluZSBBVDkxU0FNOUc0NV9CQVNFX0FDOTdDCQkweGZmZmFjMDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVFNDCQkweGZmZmIwMDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfSVNJCQkweGZmZmI0MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfUFdNQwkJMHhmZmZiODAwMAorI2RlZmluZSBBVDkxU0FNOUc0NV9CQVNFX0VNQUMJCTB4ZmZmYmMwMDAKKyNkZWZpbmUgQVQ5MVNBTTlHNDVfQkFTRV9BRVMJCTB4ZmZmYzAwMDAKKyNkZWZpbmUgQVQ5MVNBTTlHNDVfQkFTRV9UREVTCQkweGZmZmM0MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfU0hBCQkweGZmZmM4MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVFJORwkJMHhmZmZjYzAwMAorI2RlZmluZSBBVDkxU0FNOUc0NV9CQVNFX01DSTEJCTB4ZmZmZDAwMDAKKyNkZWZpbmUgQVQ5MVNBTTlHNDVfQkFTRV9UQ0IxCQkweGZmZmQ0MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVEMzCQkweGZmZmQ0MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVEM0CQkweGZmZmQ0MDQwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVEM1CQkweGZmZmQ0MDgwCisjZGVmaW5lIEFUOTFfQkFTRV9TWVMJCQkweGZmZmZlMjAwCisKKy8qCisgKiBTeXN0ZW0gUGVyaXBoZXJhbHMgKG9mZnNldCBmcm9tIEFUOTFfQkFTRV9TWVMpCisgKi8KKyNkZWZpbmUgQVQ5MV9FQ0MJKDB4ZmZmZmUyMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX0REUlNEUkMxCSgweGZmZmZlNDAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9ERFJTRFJDMAkoMHhmZmZmZTYwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfU01DCSgweGZmZmZlODAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9NQVRSSVgJKDB4ZmZmZmVhMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX0RNQQkoMHhmZmZmZWMwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfREJHVQkoMHhmZmZmZWUwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfQUlDCSgweGZmZmZmMDAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9BCSgweGZmZmZmMjAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9CCSgweGZmZmZmNDAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9DCSgweGZmZmZmNjAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9ECSgweGZmZmZmODAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9FCSgweGZmZmZmYTAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QTUMJKDB4ZmZmZmZjMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1JTVEMJKDB4ZmZmZmZkMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1NIRFdDCSgweGZmZmZmZDEwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9SVFQJKDB4ZmZmZmZkMjAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BJVAkoMHhmZmZmZmQzMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfV0RUCSgweGZmZmZmZDQwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9HUEJSCSgweGZmZmZmZDYwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9SVEMJKDB4ZmZmZmZkYjAgLSBBVDkxX0JBU0VfU1lTKQorCisjZGVmaW5lIEFUOTFfVVNBUlQwCUFUOTFTQU05RzQ1X0JBU0VfVVMwCisjZGVmaW5lIEFUOTFfVVNBUlQxCUFUOTFTQU05RzQ1X0JBU0VfVVMxCisjZGVmaW5lIEFUOTFfVVNBUlQyCUFUOTFTQU05RzQ1X0JBU0VfVVMyCisjZGVmaW5lIEFUOTFfVVNBUlQzCUFUOTFTQU05RzQ1X0JBU0VfVVMzCisKKy8qCisgKiBJbnRlcm5hbCBNZW1vcnkuCisgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfU1JBTV9CQVNFCTB4MDAzMDAwMDAJLyogSW50ZXJuYWwgU1JBTSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfU1JBTV9TSVpFCVNaXzY0SwkJLyogSW50ZXJuYWwgU1JBTSBzaXplICg2NEtiKSAqLworCisjZGVmaW5lIEFUOTFTQU05RzQ1X1JPTV9CQVNFCTB4MDA0MDAwMDAJLyogSW50ZXJuYWwgUk9NIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9ST01fU0laRQlTWl82NEsJCS8qIEludGVybmFsIFJPTSBzaXplICg2NEtiKSAqLworCisjZGVmaW5lIEFUOTFTQU05RzQ1X0xDRENfQkFTRQkweDAwNTAwMDAwCS8qIExDRCBDb250cm9sbGVyICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X1VEUEhTX0ZJRk8JMHgwMDYwMDAwMAkvKiBVU0IgRGV2aWNlIEhTIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfT0hDSV9CQVNFCTB4MDA3MDAwMDAJLyogVVNCIEhvc3QgY29udHJvbGxlciAoT0hDSSkgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfRUhDSV9CQVNFCTB4MDA4MDAwMDAJLyogVVNCIEhvc3QgY29udHJvbGxlciAoRUhDSSkgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfVkRFQ19CQVNFCTB4MDA5MDAwMDAJLyogVmlkZW8gRGVjb2RlciBDb250cm9sbGVyICovCisKKyNkZWZpbmUgQ09ORklHX0RSQU1fQkFTRQlBVDkxX0NISVBTRUxFQ1RfNgorCisjZGVmaW5lIENPTlNJU1RFTlRfRE1BX1NJWkUJU1pfNE0KKworLyoKKyAqIERNQSBwZXJpcGhlcmFsIGlkZW50aWZpZXJzCisgKiBmb3IgaGFyZHdhcmUgaGFuZHNoYWtpbmcgaW50ZXJmYWNlCisgKi8KKyNkZWZpbmUgQVRfRE1BX0lEX01DSTAJCSAwCisjZGVmaW5lIEFUX0RNQV9JRF9TUEkwX1RYCSAxCisjZGVmaW5lIEFUX0RNQV9JRF9TUEkwX1JYCSAyCisjZGVmaW5lIEFUX0RNQV9JRF9TUEkxX1RYCSAzCisjZGVmaW5lIEFUX0RNQV9JRF9TUEkxX1JYCSA0CisjZGVmaW5lIEFUX0RNQV9JRF9TU0MwX1RYCSA1CisjZGVmaW5lIEFUX0RNQV9JRF9TU0MwX1JYCSA2CisjZGVmaW5lIEFUX0RNQV9JRF9TU0MxX1RYCSA3CisjZGVmaW5lIEFUX0RNQV9JRF9TU0MxX1JYCSA4CisjZGVmaW5lIEFUX0RNQV9JRF9BQzk3X1RYCSA5CisjZGVmaW5lIEFUX0RNQV9JRF9BQzk3X1JYCTEwCisjZGVmaW5lIEFUX0RNQV9JRF9NQ0kxCQkxMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXNhbTlnNDVfbWF0cml4LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05ZzQ1X21hdHJpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzJkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05ZzQ1X21hdHJpeC5oCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogTWF0cml4LWNlbnRyaWMgaGVhZGVyIGZpbGUgZm9yIHRoZSBBVDkxU0FNOUc0NSBmYW1pbHkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgQXRtZWwgQ29ycG9yYXRpb24uCisgKgorICogTWVtb3J5IENvbnRyb2xsZXJzIChNQVRSSVgsIEVCSSkgLSBTeXN0ZW0gcGVyaXBoZXJhbHMgcmVnaXN0ZXJzLgorICogQmFzZWQgb24gQVQ5MVNBTTlHNDUgcHJlbGltaW5hcnkgZGF0YXNoZWV0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBBVDkxU0FNOUc0NV9NQVRSSVhfSAorI2RlZmluZSBBVDkxU0FNOUc0NV9NQVRSSVhfSAorCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkcwCShBVDkxX01BVFJJWCArIDB4MDApCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzEJKEFUOTFfTUFUUklYICsgMHgwNCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHMgkoQVQ5MV9NQVRSSVggKyAweDA4KQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkczCShBVDkxX01BVFJJWCArIDB4MEMpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzQJKEFUOTFfTUFUUklYICsgMHgxMCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHNQkoQVQ5MV9NQVRSSVggKyAweDE0KQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA1ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkc2CShBVDkxX01BVFJJWCArIDB4MTgpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDYgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzcJKEFUOTFfTUFUUklYICsgMHgxQykJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNyAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHOAkoQVQ5MV9NQVRSSVggKyAweDIwKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA4ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkc5CShBVDkxX01BVFJJWCArIDB4MjQpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDkgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzEwCShBVDkxX01BVFJJWCArIDB4MjgpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEwICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkcxMQkoQVQ5MV9NQVRSSVggKyAweDJDKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxMSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfVUxCVAkoNyA8PCAwKQkvKiBVbmRlZmluZWQgTGVuZ3RoIEJ1cnN0IFR5cGUgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX0lORklOSVRFCSgwIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9TSU5HTEUJCSgxIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9GT1VSCQkoMiA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfRUlHSFQJCSgzIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9TSVhURUVOCSg0IDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9USElSVFlUV08JKDUgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX1NJWFRZRk9VUgkoNiA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfMTI4CQkoNyA8PCAwKQorCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkcwCShBVDkxX01BVFJJWCArIDB4NDApCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMQkoQVQ5MV9NQVRSSVggKyAweDQ0KQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzIJKEFUOTFfTUFUUklYICsgMHg0OCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkczCShBVDkxX01BVFJJWCArIDB4NEMpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMyAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHNAkoQVQ5MV9NQVRSSVggKyAweDUwKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzUJKEFUOTFfTUFUUklYICsgMHg1NCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA1ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkc2CShBVDkxX01BVFJJWCArIDB4NTgpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHNwkoQVQ5MV9NQVRSSVggKyAweDVDKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDcgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX1NMT1RfQ1lDTEUJCSgweDFmZiA8PCAwKQkvKiBNYXhpbXVtIE51bWJlciBvZiBBbGxvd2VkIEN5Y2xlcyBmb3IgYSBCdXJzdCAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFCSgzICAgIDw8IDE2KQkvKiBEZWZhdWx0IE1hc3RlciBUeXBlICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX05PTkUJKDAgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX0xBU1QJKDEgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX0ZJWEVECSgyIDw8IDE2KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfRklYRURfREVGTVNUUgkoMHhmICA8PCAxOCkJLyogRml4ZWQgSW5kZXggb2YgRGVmYXVsdCBNYXN0ZXIgKi8KKworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTMAkoQVQ5MV9NQVRSSVggKyAweDgwKQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSAwICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQlMwCShBVDkxX01BVFJJWCArIDB4ODQpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEIgZm9yIFNsYXZlIDAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzEJKEFUOTFfTUFUUklYICsgMHg4OCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgMSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkJTMQkoQVQ5MV9NQVRSSVggKyAweDhDKQkvKiBQcmlvcml0eSBSZWdpc3RlciBCIGZvciBTbGF2ZSAxICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVMyCShBVDkxX01BVFJJWCArIDB4OTApCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDIgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJCUzIJKEFUOTFfTUFUUklYICsgMHg5NCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQiBmb3IgU2xhdmUgMiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTMwkoQVQ5MV9NQVRSSVggKyAweDk4KQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSAzICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQlMzCShBVDkxX01BVFJJWCArIDB4OUMpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEIgZm9yIFNsYXZlIDMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzQJKEFUOTFfTUFUUklYICsgMHhBMCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgNCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkJTNAkoQVQ5MV9NQVRSSVggKyAweEE0KQkvKiBQcmlvcml0eSBSZWdpc3RlciBCIGZvciBTbGF2ZSA0ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVM1CShBVDkxX01BVFJJWCArIDB4QTgpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDUgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJCUzUJKEFUOTFfTUFUUklYICsgMHhBQykJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQiBmb3IgU2xhdmUgNSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTNgkoQVQ5MV9NQVRSSVggKyAweEIwKQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSA2ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQlM2CShBVDkxX01BVFJJWCArIDB4QjQpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEIgZm9yIFNsYXZlIDYgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzcJKEFUOTFfTUFUUklYICsgMHhCOCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgNyAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkJTNwkoQVQ5MV9NQVRSSVggKyAweEJDKQkvKiBQcmlvcml0eSBSZWdpc3RlciBCIGZvciBTbGF2ZSA3ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NMFBSCQkoMyA8PCAwKQkvKiBNYXN0ZXIgMCBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTFQUgkJKDMgPDwgNCkJLyogTWFzdGVyIDEgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX00yUFIJCSgzIDw8IDgpCS8qIE1hc3RlciAyIFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NM1BSCQkoMyA8PCAxMikJLyogTWFzdGVyIDMgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX000UFIJCSgzIDw8IDE2KQkvKiBNYXN0ZXIgNCBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTVQUgkJKDMgPDwgMjApCS8qIE1hc3RlciA1IFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NNlBSCQkoMyA8PCAyNCkJLyogTWFzdGVyIDYgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX003UFIJCSgzIDw8IDI4KQkvKiBNYXN0ZXIgNyBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTThQUgkJKDMgPDwgMCkJLyogTWFzdGVyIDggUHJpb3JpdHkgKGluIFJlZ2lzdGVyIEIpICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NOVBSCQkoMyA8PCA0KQkvKiBNYXN0ZXIgOSBQcmlvcml0eSAoaW4gUmVnaXN0ZXIgQikgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX00xMFBSCQkoMyA8PCA4KQkvKiBNYXN0ZXIgMTAgUHJpb3JpdHkgKGluIFJlZ2lzdGVyIEIpICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NMTFQUgkJKDMgPDwgMTIpCS8qIE1hc3RlciAxMSBQcmlvcml0eSAoaW4gUmVnaXN0ZXIgQikgKi8KKworI2RlZmluZSBBVDkxX01BVFJJWF9NUkNSCShBVDkxX01BVFJJWCArIDB4MTAwKQkvKiBNYXN0ZXIgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMAkJKDEgPDwgMCkJLyogUmVtYXAgQ29tbWFuZCBmb3IgQUhCIE1hc3RlciAwIChBUk05MjZFSi1TIEluc3RydWN0aW9uIE1hc3RlcikgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjEJCSgxIDw8IDEpCS8qIFJlbWFwIENvbW1hbmQgZm9yIEFIQiBNYXN0ZXIgMSAoQVJNOTI2RUotUyBEYXRhIE1hc3RlcikgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjIJCSgxIDw8IDIpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0IzCQkoMSA8PCAzKQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCNAkJKDEgPDwgNCkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjUJCSgxIDw8IDUpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0I2CQkoMSA8PCA2KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCNwkJKDEgPDwgNykKKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjgJCSgxIDw8IDgpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0I5CQkoMSA8PCA5KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMTAJCSgxIDw8IDEwKQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMTEJCSgxIDw8IDExKQorCisjZGVmaW5lIEFUOTFfTUFUUklYX1RDTVIJKEFUOTFfTUFUUklYICsgMHgxMTApCS8qIFRDTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9JVENNX1NJWkUJCSgweGYgPDwgMCkJLyogU2l6ZSBvZiBJVENNIGVuYWJsZWQgbWVtb3J5IGJsb2NrICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfSVRDTV8wCQkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0lUQ01fMzIJCSg2IDw8IDApCisjZGVmaW5lCQlBVDkxX01BVFJJWF9EVENNX1NJWkUJCSgweGYgPDwgNCkJLyogU2l6ZSBvZiBEVENNIGVuYWJsZWQgbWVtb3J5IGJsb2NrICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV8wCQkoMCA8PCA0KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0RUQ01fMzIJCSg2IDw8IDQpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV82NAkJKDcgPDwgNCkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX1RDTV9OV1MJCSgweDEgPDwgMTEpCS8qIFdhaXQgc3RhdGUgVENNIHJlZ2lzdGVyICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVENNX05PX1dTCQkoMHgwIDw8IDExKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1RDTV9PTkVfV1MJCSgweDEgPDwgMTEpCisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfVklERU8JKEFUOTFfTUFUUklYICsgMHgxMTgpCS8qIFZpZGVvIE1vZGUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MUNfVkRFQ19TRUwJCQkoMHgxIDw8ICAwKSAvKiBWaWRlbyBNb2RlIFNlbGVjdGlvbiAqLworI2RlZmluZQkJCUFUOTFDX1ZERUNfU0VMX09GRgkJKDAgPDwgMCkKKyNkZWZpbmUJCQlBVDkxQ19WREVDX1NFTF9PTgkJKDEgPDwgMCkKKworI2RlZmluZSBBVDkxX01BVFJJWF9FQklDU0EJKEFUOTFfTUFUUklYICsgMHgxMjgpCS8qIEVCSSBDaGlwIFNlbGVjdCBBc3NpZ25tZW50IFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9FQklfQ1MxQQkJKDEgPDwgMSkJLyogQ2hpcCBTZWxlY3QgMSBBc3NpZ25tZW50ICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0NTMUFfU01DCQkoMCA8PCAxKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSV9DUzFBX1NEUkFNQwkJKDEgPDwgMSkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSV9DUzNBCQkoMSA8PCAzKQkvKiBDaGlwIFNlbGVjdCAzIEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQklfQ1MzQV9TTUMJCSgwIDw8IDMpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0NTM0FfU01DX1NNQVJUTUVESUEJKDEgPDwgMykKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSV9DUzRBCQkoMSA8PCA0KQkvKiBDaGlwIFNlbGVjdCA0IEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQklfQ1M0QV9TTUMJCSgwIDw8IDQpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0NTNEFfU01DX0NGMAkJKDEgPDwgNCkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSV9DUzVBCQkoMSA8PCA1KQkvKiBDaGlwIFNlbGVjdCA1IEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQklfQ1M1QV9TTUMJCSgwIDw8IDUpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0NTNUFfU01DX0NGMQkJKDEgPDwgNSkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSV9EQlBVQwkJKDEgPDwgOCkJLyogRGF0YSBCdXMgUHVsbC11cCBDb25maWd1cmF0aW9uICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0RCUFVfT04JCQkoMCA8PCA4KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSV9EQlBVX09GRgkJKDEgPDwgOCkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSV9WRERJT01TRUwJKDEgPDwgMTYpCS8qIE1lbW9yeSB2b2x0YWdlIHNlbGVjdGlvbiAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSV9WRERJT01TRUxfMV84VgkJKDAgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX1ZERElPTVNFTF8zXzNWCQkoMSA8PCAxNikKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSV9FQklfSU9TUgkoMSA8PCAxNykJLyogRUJJIEkvTyBzbGV3IHJhdGUgc2VsZWN0aW9uICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0VCSV9JT1NSX1JFRFVDRUQJKDAgPDwgMTcpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0VCSV9JT1NSX05PUk1BTAkJKDEgPDwgMTcpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9FQklfRERSX0lPU1IJKDEgPDwgMTgpCS8qIEREUjIgZGVkaWNhdGVkIHBvcnQgSS9PIHNsZXcgcmF0ZSBzZWxlY3Rpb24gKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQklfRERSX0lPU1JfUkVEVUNFRAkoMCA8PCAxOCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQklfRERSX0lPU1JfTk9STUFMCQkoMSA8PCAxOCkKKworI2RlZmluZSBBVDkxX01BVFJJWF9XUE1SCShBVDkxX01BVFJJWCArIDB4MUU0KQkvKiBXcml0ZSBQcm90ZWN0IE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX1dQTVJfV1BFTgkJKDEgPDwgMCkJLyogV3JpdGUgUHJvdGVjdCBFTmFibGUgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9XUE1SX1dQX1dQRElTCQkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1dQTVJfV1BfV1BFTgkJKDEgPDwgMCkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX1dQTVJfV1BLRVkJCSgweEZGRkZGRiA8PCA4KQkvKiBXcml0ZSBQcm90ZWN0IEtFWSAqLworCisjZGVmaW5lIEFUOTFfTUFUUklYX1dQU1IJKEFUOTFfTUFUUklYICsgMHgxRTgpCS8qIFdyaXRlIFByb3RlY3QgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9XUFNSX1dQVlMJCSgxIDw8IDApCS8qIFdyaXRlIFByb3RlY3QgVmlvbGF0aW9uIFN0YXR1cyAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX1dQU1JfTk9fV1BWCQkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1dQU1JfV1BWCQkoMSA8PCAwKQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfV1BTUl9XUFZTUkMJCSgweEZGRkYgPDwgOCkJLyogV3JpdGUgUHJvdGVjdCBWaW9sYXRpb24gU291cmNlICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oCmluZGV4IGU2YWZmZjguLjEzZjI3YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2JvYXJkLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9hdG1lbF91c2JhX3VkYy5oPgorI2luY2x1ZGUgPHNvdW5kL2F0bWVsLWFjOTdjLmg+CiAKICAvKiBVU0IgRGV2aWNlICovCiBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSB7CkBAIC04MCw3ICs4MSw4IEBACiB9OwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ldGgoc3RydWN0IGF0OTFfZXRoX2RhdGEgKmRhdGEpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUcyMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxQ0FQOSkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05RzIwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFDQVA5KSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUc0NSkKICNkZWZpbmUgZXRoX3BsYXRmb3JtX2RhdGEJYXQ5MV9ldGhfZGF0YQogI2VuZGlmCiAKQEAgLTkwLDYgKzkyLDcgQEAKIAl1OAkJdmJ1c19waW5bMl07CS8qIHBvcnQgcG93ZXItY29udHJvbCBwaW4gKi8KIH07CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKTsKK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaF9vaGNpKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSk7CiAKICAvKiBOQU5EIC8gU21hcnRNZWRpYSAqLwogc3RydWN0IGF0bWVsX25hbmRfZGF0YSB7CkBAIC0xMDUsNyArMTA4LDExIEBACiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSk7CiAKICAvKiBJMkMqLworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpCitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzaG9ydCBpMmNfaWQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpOworI2Vsc2UKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpOworI2VuZGlmCiAKICAvKiBTUEkgKi8KIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpOwpAQCAtMTY4LDEwICsxNzUsNyBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9sY2RjKHN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvICpkYXRhKTsKIAogIC8qIEFDOTcgKi8KLXN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgewotCXU4CQlyZXNldF9waW47CS8qIHJlc2V0ICovCi19OwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgKmRhdGEpOworZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKTsKIAogIC8qIElTSSAqLwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pc2kodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCBjNTU0YzNlLi4zNGE5NTAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTIxLDggKzIxLDEwIEBACiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTkyNjAJMHgwMTk4MDNhMAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05MjYxCTB4MDE5NzAzYTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOTI2MwkweDAxOTYwN2EwCisjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHMTAJMHg4MTk5MDNhMAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzIwCTB4MDE5OTA1YTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOVJMNjQJMHgwMTliMDNhMAorI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzQ1CTB4ODE5YjA1YTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxQ0FQOQkweDAzOUEwM0EwCiAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOVhFMTI4CTB4MzI5OTczYTAKQEAgLTM5LDYgKzQxLDE1IEBACiAJcmV0dXJuIChhdDkxX3N5c19yZWFkKEFUOTFfREJHVV9DSURSKSAmIH5BVDkxX0NJRFJfVkVSU0lPTik7CiB9CiAKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05TTExCTB4MDAwMDAwMDEKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05TTEwCTB4MDAwMDAwMDIKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05RzQ1CTB4MDAwMDAwMDQKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGF0OTFfZXhpZF9pZGVudGlmeSh2b2lkKQoreworCXJldHVybiBhdDkxX3N5c19yZWFkKEFUOTFfREJHVV9FWElEKTsKK30KKwogCiAjZGVmaW5lIEFSQ0hfRkFNSUxZX0FUOTFYOTIJMHgwOTIwMDAwMAogI2RlZmluZSBBUkNIX0ZBTUlMWV9BVDkxU0FNOQkweDAxOTAwMDAwCkBAIC04Nyw2ICs5OCwxMiBAQAogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTkyNjEoKQkoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MVNBTTlHMTAKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzEwKCkJKGF0OTFfY3B1X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDkxU0FNOUcxMCkKKyNlbHNlCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcxMCgpCSgwKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MwogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTkyNjMoKQkoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFTQU05MjYzKQogI2Vsc2UKQEAgLTk5LDYgKzExNiwxMiBAQAogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlybCgpCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9BVDkxU0FNOUc0NQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDUoKQkoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFTQU05RzQ1KQorI2Vsc2UKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1KCkJKDApCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BUkNIX0FUOTFDQVA5CiAjZGVmaW5lIGNwdV9pc19hdDkxY2FwOSgpCShhdDkxX2NwdV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ5MUNBUDkpCiAjZGVmaW5lIGNwdV9pc19hdDkxY2FwOV9yZXZCKCkJKGF0OTFjYXA5X3Jldl9pZGVudGlmeSgpID09IEFSQ0hfUkVWSVNJT05fQ0FQOV9CKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IGRhMGI2ODEuLmEwZGY4YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTIwLDEyICsyMCwxNCBAQAogI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMC5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUcyMCkKICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYwLmg+Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYxKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUcxMCkKICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYxLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYzKQogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjMuaD4KICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCkKICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05cmwuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpCisjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOWc0NS5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxQ0FQOSkKICNpbmNsdWRlIDxtYWNoL2F0OTFjYXA5Lmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFYNDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3RpbWV4LmgKaW5kZXggZDg0Yzk5NC4uMzFhYzJkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC90aW1leC5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtNDIsNiArNDIsMTEgQEAKICNkZWZpbmUgQVQ5MVNBTTlfTUFTVEVSX0NMT0NLCTk5MzAwMDAwCiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKEFUOTFTQU05X01BU1RFUl9DTE9DSy8xNikKIAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUcxMCkKKworI2RlZmluZSBBVDkxU0FNOV9NQVNURVJfQ0xPQ0sJMTMzMDAwMDAwCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKEFUOTFTQU05X01BU1RFUl9DTE9DSy8xNikKKwogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MykKIAogI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfVVNCX0E5MjYzKQpAQCAtNjIsNiArNjcsMTEgQEAKICNkZWZpbmUgQVQ5MVNBTTlfTUFTVEVSX0NMT0NLCTEzMjA5NjAwMAogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShBVDkxU0FNOV9NQVNURVJfQ0xPQ0svMTYpCiAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpCisKKyNkZWZpbmUgQVQ5MVNBTTlfTUFTVEVSX0NMT0NLCTEzMzMzMzMzMworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShBVDkxU0FNOV9NQVNURVJfQ0xPQ0svMTYpCisKICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MUNBUDkpCiAKICNkZWZpbmUgQVQ5MUNBUDlfTUFTVEVSX0NMT0NLCTEwMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYwppbmRleCBlMjZjNGZlLi40MDI4NzI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYwpAQCAtMjAxLDcgKzIwMSw4IEBACiAJCQlwcl9lcnIoIkFUOTE6IFBNIC0gU3VzcGVuZC10by1SQU0gd2l0aCBVU0Igc3RpbGwgYWN0aXZlXG4iKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JfSBlbHNlIGlmIChjcHVfaXNfYXQ5MXNhbTkyNjAoKSB8fCBjcHVfaXNfYXQ5MXNhbTkyNjEoKSB8fCBjcHVfaXNfYXQ5MXNhbTkyNjMoKSB8fCBjcHVfaXNfYXQ5MXNhbTlnMjAoKSkgeworCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05MjYwKCkgfHwgY3B1X2lzX2F0OTFzYW05MjYxKCkgfHwgY3B1X2lzX2F0OTFzYW05MjYzKCkKKwkJCXx8IGNwdV9pc19hdDkxc2FtOWcyMCgpIHx8IGNwdV9pc19hdDkxc2FtOWcxMCgpKSB7CiAJCWlmICgoc2NzciAmIChBVDkxU0FNOTI2eF9QTUNfVUhQIHwgQVQ5MVNBTTkyNnhfUE1DX1VEUCkpICE9IDApIHsKIAkJCXByX2VycigiQVQ5MTogUE0gLSBTdXNwZW5kLXRvLVJBTSB3aXRoIFVTQiBzdGlsbCBhY3RpdmVcbiIpOwogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1N2I0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvS2NvbmZpZwpAQCAtMCwwICsxLDIxIEBACitjaG9pY2UKKwlwcm9tcHQgIlByb2Nlc3NvciBzZWxlY3Rpb24gaW4gQkNNUklORyBmYW1pbHkgb2YgZGV2aWNlcyIKKwlkZXBlbmRzIG9uIEFSQ0hfQkNNUklORworCWRlZmF1bHQgQVJDSF9CQ00xMTEwNworCitjb25maWcgQVJDSF9GUEdBMTExMDcKKwlib29sICJGUEdBMTExMDciCisKK2NvbmZpZyBBUkNIX0JDTTExMTA3CisJYm9vbCAiQkNNMTExMDciCitlbmRjaG9pY2UKKworbWVudSAiQkNNUklORyBPcHRpb25zIgorCWRlcGVuZHMgb24gQVJDSF9CQ01SSU5HCisKK2NvbmZpZyBCQ01fWlJFTEFERFIKKwloZXggIkNvbXByZXNzZWQgWlJFTCBBRERSIgorCitlbmRtZW51CisKKyMgc291cmNlICJkcml2ZXJzL2NoYXIvYmNtcmluZy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZDlmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCisjIE9iamVjdCBmaWxlIGxpc3RzLgorCitvYmoteSA6PSBhcmNoLm8gbW0ubyBpcnEubyBjbG9jay5vIGNvcmUubyB0aW1lci5vIGRtYS5vCitvYmoteSArPSBjc3AvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNTNiMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDYgQEAKKyMgQWRkcmVzcyB3aGVyZSBkZWNvbXByZXNzb3Igd2lsbCBiZSB3cml0dGVuIGFuZCBldmVudHVhbGx5IGV4ZWN1dGVkLgorIworIyBkZWZhdWx0IHRvIFNEUkFNCit6cmVsYWRkci15ICAgICAgOj0gJChDT05GSUdfQkNNX1pSRUxBRERSKQorcGFyYW1zX3BoeXMteSAgIDo9IDB4MDAwMDA4MDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2FyY2guYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9hcmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhNjkzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9hcmNoLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9tbV9pby5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2NoaXBjSHdfZGVmLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaD4KKworI2luY2x1ZGUgPGNmZ19nbG9iYWwuaD4KKworI2luY2x1ZGUgImNvcmUuaCIKKworSFdfREVDTEFSRV9TUElOTE9DSyhhcmNoKQorSFdfREVDTEFSRV9TUElOTE9DSyhncGlvKQorI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKQorICAgIEVYUE9SVF9TWU1CT0woYmNtcmluZ19ncGlvX3JlZ19sb2NrKTsKKyNlbmRpZgorCisvKiBGSVhNRTogdGVtcG9yYXJ5IHNvbHV0aW9uICovCisjZGVmaW5lIEJDTV9TWVNDVExfUkVCT09UX1dBUk0gICAgICAgICAgICAgICAxCisjZGVmaW5lIENUTF9CQ01fUkVCT09UICAgICAgICAgICAgICAgICAxMTIKKworLyogc3lzY3RsICovCitpbnQgYmNtcmluZ19hcmNoX3dhcm1fcmVib290OwkvKiBkbyBhIHdhcm0gcmVib290IG9uIGhhcmQgcmVzZXQgKi8KKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpiY21yaW5nX3N5c2N0bF9oZWFkZXI7CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGJjbXJpbmdfc3lzY3RsX3dhcm1fcmVib290W10gPSB7CisJeworCSAuY3RsX25hbWUgPSBCQ01fU1lTQ1RMX1JFQk9PVF9XQVJNLAorCSAucHJvY25hbWUgPSAid2FybSIsCisJIC5kYXRhID0gJmJjbXJpbmdfYXJjaF93YXJtX3JlYm9vdCwKKwkgLm1heGxlbiA9IHNpemVvZihpbnQpLAorCSAubW9kZSA9IDA2NDQsCisJIC5wcm9jX2hhbmRsZXIgPSAmcHJvY19kb2ludHZlY30sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGJjbXJpbmdfc3lzY3RsX3JlYm9vdFtdID0geworCXsKKwkgLmN0bF9uYW1lID0gQ1RMX0JDTV9SRUJPT1QsCisJIC5wcm9jbmFtZSA9ICJyZWJvb3QiLAorCSAubW9kZSA9IDA1NTUsCisJIC5jaGlsZCA9IGJjbXJpbmdfc3lzY3RsX3dhcm1fcmVib290fSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmFuZF9kZXZpY2UgPSB7CisJLm5hbWUgPSAiYmNtLW5hbmQiLAorCS5pZCA9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZuYW5kX2RldmljZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ2FsbGVkIGZyb20gdGhlIGN1c3RvbWl6ZV9tYWNoaW5lIGZ1bmN0aW9uIGluIGFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisqCisqICAgVGhlIGN1c3RvbWl6ZV9tYWNoaW5lIGZ1bmN0aW9uIGlzIHRhZ2dlZCBhcyBhbiBhcmNoX2luaXRjYWxsCisqICAgKHNlZSBpbmNsdWRlL2xpbnV4L2luaXQuaCBmb3IgdGhlIG9yZGVyIHRoYXQgdGhlIHZhcmlvdXMgaW5pdCBzZWN0aW9ucworKiAgIGFyZSBjYWxsZWQgaW4uCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBiY21yaW5nX2luaXRfbWFjaGluZSh2b2lkKQoreworCisJYmNtcmluZ19zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGJjbXJpbmdfc3lzY3RsX3JlYm9vdCk7CisKKwkvKiBFbmFibGUgc3ByZWFkIHNwZWN0cnVtICovCisJY2hpcGNId19lbmFibGVTcHJlYWRTcGVjdHJ1bSgpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisKKwliY21yaW5nX2FtYmFfaW5pdCgpOworCisJZG1hX2luaXQoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDYWxsZWQgZnJvbSBzZXR1cF9hcmNoIChpbiBhcmNoL2FybS9rZXJuZWwvc2V0dXAuYykgdG8gZml4dXAgYW55IHRhZ3MKKyogICBwYXNzZWQgaW4gYnkgdGhlIGJvb3QgbG9hZGVyLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBiY21yaW5nX2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKmRlc2MsCisgICAgIHN0cnVjdCB0YWcgKnQsIGNoYXIgKipjbWRsaW5lLCBzdHJ1Y3QgbWVtaW5mbyAqbWkpIHsKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKwlwcmludGsoS0VSTl9OT1RJQ0UgImJjbXJpbmdfZml4dXBcbiIpOworCXQtPmhkci50YWcgPSBBVEFHX0NPUkU7CisJdC0+aGRyLnNpemUgPSB0YWdfc2l6ZSh0YWdfY29yZSk7CisJdC0+dS5jb3JlLmZsYWdzID0gMDsKKwl0LT51LmNvcmUucGFnZXNpemUgPSBQQUdFX1NJWkU7CisJdC0+dS5jb3JlLnJvb3RkZXYgPSAzMSA8PCA4IHwgMDsKKwl0ID0gdGFnX25leHQodCk7CisKKwl0LT5oZHIudGFnID0gQVRBR19NRU07CisJdC0+aGRyLnNpemUgPSB0YWdfc2l6ZSh0YWdfbWVtMzIpOworCXQtPnUubWVtLnN0YXJ0ID0gQ0ZHX0dMT0JBTF9SQU1fQkFTRTsKKwl0LT51Lm1lbS5zaXplID0gQ0ZHX0dMT0JBTF9SQU1fU0laRTsKKworCXQgPSB0YWdfbmV4dCh0KTsKKworCXQtPmhkci50YWcgPSBBVEFHX05PTkU7CisJdC0+aGRyLnNpemUgPSAwOworI2VuZGlmCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgTWFjaGluZSBEZXNjcmlwdGlvbgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK01BQ0hJTkVfU1RBUlQoQkNNUklORywgIkJDTVJJTkciKQorCS8qIE1haW50YWluZXI6IEJyb2FkY29tIENvcnBvcmF0aW9uICovCisJLnBoeXNfaW8gPSBNTV9JT19TVEFSVCwKKwkuaW9fcGdfb2Zmc3QgPSAoTU1fSU9fQkFTRSA+PiAxOCkgJiAweGZmZmMsCisJLmZpeHVwID0gYmNtcmluZ19maXh1cCwKKwkubWFwX2lvID0gYmNtcmluZ19tYXBfaW8sCisJLmluaXRfaXJxID0gYmNtcmluZ19pbml0X2lycSwKKwkudGltZXIgPSAmYmNtcmluZ190aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gYmNtcmluZ19pbml0X21hY2hpbmUKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YmFmYzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY2xvY2suYwpAQCAtMCwwICsxLDIyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAxIC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvaHdfY2ZnLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19kZWYuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9jaGlwY0h3X3JlZy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2NoaXBjSHdfaW5saW5lLmg+CisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorCisjZGVmaW5lIGNsa19pc19wcmltYXJ5KHgpICAgICAgICgoeCktPnR5cGUgJiBDTEtfVFlQRV9QUklNQVJZKQorI2RlZmluZSBjbGtfaXNfcGxsMSh4KSAgICAgICAgICAoKHgpLT50eXBlICYgQ0xLX1RZUEVfUExMMSkKKyNkZWZpbmUgY2xrX2lzX3BsbDIoeCkgICAgICAgICAgKCh4KS0+dHlwZSAmIENMS19UWVBFX1BMTDIpCisjZGVmaW5lIGNsa19pc19wcm9ncmFtbWFibGUoeCkgICgoeCktPnR5cGUgJiBDTEtfVFlQRV9QUk9HUkFNTUFCTEUpCisjZGVmaW5lIGNsa19pc19ieXBhc3NhYmxlKHgpICAgICgoeCktPnR5cGUgJiBDTEtfVFlQRV9CWVBBU1NBQkxFKQorCisjZGVmaW5lIGNsa19pc191c2luZ194dGFsKHgpICAgICgoeCktPm1vZGUgJiBDTEtfTU9ERV9YVEFMKQorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsa19sb2NrKTsKKworc3RhdGljIHZvaWQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNsaykKKwkJcmV0dXJuOworCisJLyogZW5hYmxlIHBhcmVudCBjbG9jayBmaXJzdCAqLworCWlmIChjbGstPnBhcmVudCkKKwkJX19jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKKworCWlmIChjbGstPnVzZV9jbnQrKyA9PSAwKSB7CisJCWlmIChjbGtfaXNfcGxsMShjbGspKSB7CS8qIFBMTDEgKi8KKwkJCWNoaXBjSHdfcGxsMUVuYWJsZShjbGstPnJhdGVfaHosIDApOworCQl9IGVsc2UgaWYgKGNsa19pc19wbGwyKGNsaykpIHsJLyogUExMMiAqLworCQkJY2hpcGNId19wbGwyRW5hYmxlKGNsay0+cmF0ZV9oeik7CisJCX0gZWxzZSBpZiAoY2xrX2lzX3VzaW5nX3h0YWwoY2xrKSkgewkvKiBzb3VyY2UgaXMgY3J5c3RhbCAqLworCQkJaWYgKCFjbGtfaXNfcHJpbWFyeShjbGspKQorCQkJCWNoaXBjSHdfYnlwYXNzQ2xvY2tFbmFibGUoY2xrLT5jc3BfaWQpOworCQl9IGVsc2UgewkvKiBzb3VyY2UgaXMgUExMICovCisJCQljaGlwY0h3X3NldENsb2NrRW5hYmxlKGNsay0+Y3NwX2lkKTsKKwkJfQorCX0KK30KKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWNsaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKwlfX2Nsa19lbmFibGUoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCitzdGF0aWMgdm9pZCBfX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNsaykKKwkJcmV0dXJuOworCisJQlVHX09OKGNsay0+dXNlX2NudCA9PSAwKTsKKworCWlmICgtLWNsay0+dXNlX2NudCA9PSAwKSB7CisJCWlmIChjbGtfaXNfcGxsMShjbGspKSB7CS8qIFBMTDEgKi8KKwkJCWNoaXBjSHdfcGxsMURpc2FibGUoKTsKKwkJfSBlbHNlIGlmIChjbGtfaXNfcGxsMihjbGspKSB7CS8qIFBMTDIgKi8KKwkJCWNoaXBjSHdfcGxsMkRpc2FibGUoKTsKKwkJfSBlbHNlIGlmIChjbGtfaXNfdXNpbmdfeHRhbChjbGspKSB7CS8qIHNvdXJjZSBpcyBjcnlzdGFsICovCisJCQlpZiAoIWNsa19pc19wcmltYXJ5KGNsaykpCisJCQkJY2hpcGNId19ieXBhc3NDbG9ja0Rpc2FibGUoY2xrLT5jc3BfaWQpOworCQl9IGVsc2UgewkvKiBzb3VyY2UgaXMgUExMICovCisJCQljaGlwY0h3X3NldENsb2NrRGlzYWJsZShjbGstPmNzcF9pZCk7CisJCX0KKwl9CisKKwlpZiAoY2xrLT5wYXJlbnQpCisJCV9fY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOworfQorCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFjbGspCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCV9fY2xrX2Rpc2FibGUoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNsaykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gY2xrLT5yYXRlX2h6OworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCitsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBhY3R1YWw7CisJdW5zaWduZWQgbG9uZyByYXRlX2h6OworCisJaWYgKCFjbGspCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFjbGtfaXNfcHJvZ3JhbW1hYmxlKGNsaykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNsay0+dXNlX2NudCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCWFjdHVhbCA9IGNsay0+cGFyZW50LT5yYXRlX2h6OworCXJhdGVfaHogPSBtaW4oYWN0dWFsLCByYXRlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJhdGVfaHo7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19yb3VuZF9yYXRlKTsKKworaW50IGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgYWN0dWFsOworCXVuc2lnbmVkIGxvbmcgcmF0ZV9oejsKKworCWlmICghY2xrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjbGstPnVzZV9jbnQpCisJCXJldHVybiAtRUJVU1k7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKwlhY3R1YWwgPSBjbGstPnBhcmVudC0+cmF0ZV9oejsKKwlyYXRlX2h6ID0gbWluKGFjdHVhbCwgcmF0ZSk7CisJcmF0ZV9oeiA9IGNoaXBjSHdfc2V0Q2xvY2tGcmVxdWVuY3koY2xrLT5jc3BfaWQsIHJhdGVfaHopOworCWNsay0+cmF0ZV9oeiA9IHJhdGVfaHo7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xrX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKCFjbGspCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGNsay0+cGFyZW50OworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3BhcmVudCk7CisKK2ludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjbGsgKm9sZF9wYXJlbnQ7CisKKwlpZiAoIWNsayB8fCAhcGFyZW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY2xrX2lzX3ByaW1hcnkocGFyZW50KSB8fCAhY2xrX2lzX2J5cGFzc2FibGUoY2xrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBpZiBtb3JlIHRoYW4gb25lIHVzZXIsIHBhcmVudCBpcyBub3QgYWxsb3dlZCAqLworCWlmIChjbGstPnVzZV9jbnQgPiAxKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKGNsay0+cGFyZW50ID09IHBhcmVudCkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKwlvbGRfcGFyZW50ID0gY2xrLT5wYXJlbnQ7CisJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CisJaWYgKGNsa19pc191c2luZ194dGFsKHBhcmVudCkpCisJCWNsay0+bW9kZSB8PSBDTEtfTU9ERV9YVEFMOworCWVsc2UKKwkJY2xrLT5tb2RlICY9ICh+Q0xLX01PREVfWFRBTCk7CisKKwkvKiBpZiBjbG9jayBpcyBhY3RpdmUgKi8KKwlpZiAoY2xrLT51c2VfY250ICE9IDApIHsKKwkJY2xrLT51c2VfY250LS07CisJCS8qIGVuYWJsZSBjbG9jayB3aXRoIHRoZSBuZXcgcGFyZW50ICovCisJCV9fY2xrX2VuYWJsZShjbGspOworCQkvKiBkaXNhYmxlIHRoZSBvbGQgcGFyZW50ICovCisJCV9fY2xrX2Rpc2FibGUob2xkX3BhcmVudCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3NldF9wYXJlbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTBiOTgxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2Nsb2NrLmgKQEAgLTAsMCArMSwzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAxIC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxtYWNoL2NzcC9jaGlwY0h3X2RlZi5oPgorCisjZGVmaW5lIENMS19UWVBFX1BSSU1BUlkgICAgICAgICAxCS8qIHByaW1hcnkgY2xvY2sgbXVzdCBOT1QgaGF2ZSBhIHBhcmVudCAqLworI2RlZmluZSBDTEtfVFlQRV9QTEwxICAgICAgICAgICAgMgkvKiBQUEwxICovCisjZGVmaW5lIENMS19UWVBFX1BMTDIgICAgICAgICAgICA0CS8qIFBQTDIgKi8KKyNkZWZpbmUgQ0xLX1RZUEVfUFJPR1JBTU1BQkxFICAgIDgJLyogcHJvZ3JhbW1hYmxlIGNsb2NrIHJhdGUgKi8KKyNkZWZpbmUgQ0xLX1RZUEVfQllQQVNTQUJMRSAgICAgIDE2CS8qIHBhcmVudCBjYW4gYmUgY2hhbmdlZCAqLworCisjZGVmaW5lIENMS19NT0RFX1hUQUwgICAgICAgICAgICAxCS8qIGNsb2NrIHNvdXJjZSBpcyBmcm9tIGNyeXN0YWwgKi8KKworc3RydWN0IGNsayB7CisJY29uc3QgY2hhciAqbmFtZTsJLyogY2xvY2sgbmFtZSAqLworCXVuc2lnbmVkIGludCB0eXBlOwkvKiBjbG9jayB0eXBlICovCisJdW5zaWduZWQgaW50IG1vZGU7CS8qIGN1cnJlbnQgbW9kZSAqLworCXZvbGF0aWxlIGludCB1c2VfYnlwYXNzOwkvKiBpbmRpY2F0ZSBpZiBpdCdzIGluIGJ5cGFzcyBtb2RlICovCisJY2hpcGNId19DTE9DS19lIGNzcF9pZDsJLyogY2xvY2sgSUQgZm9yIENTUCBDSElQQyAqLworCXVuc2lnbmVkIGxvbmcgcmF0ZV9oejsJLyogY2xvY2sgcmF0ZSBpbiBIeiAqLworCXVuc2lnbmVkIGludCB1c2VfY250OwkvKiB1c2FnZSBjb3VudCAqLworCXN0cnVjdCBjbGsgKnBhcmVudDsJLyogcGFyZW50IGNsb2NrICovCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkyYzY0OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKQEAgLTAsMCArMSwzNjcgQEAKKy8qCisgKiAgZGVyaXZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYworICogIGxpbnV4L2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwMyBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworLyogUG9ydGlvbnMgY29weXJpZ2h0IEJyb2FkY29tIDIwMDggKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL21tX2FkZHIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hcm1fdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgorCisjaW5jbHVkZSA8Y2ZnX2dsb2JhbC5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKworI2luY2x1ZGUgPGNzcC9zZWNIdy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL3NlY0h3X2RlZi5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2NoaXBjSHdfaW5saW5lLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvdG1ySHdfcmVnLmg+CisKKyNkZWZpbmUgQU1CQV9ERVZJQ0UobmFtZSwgaW5pdG5hbWUsIGJhc2UsIHBsYXQsIHNpemUpICAgICAgIFwKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgbmFtZSMjX2RldmljZSA9IHsgICAgIFwKKyAgIC5kZXYgPSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5jb2hlcmVudF9kbWFfbWFzayA9IH4wLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5pbml0X25hbWUgPSBpbml0bmFtZSwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5wbGF0Zm9ybV9kYXRhID0gcGxhdCAgICAgICAgICAgICAgICAgICAgIFwKKyAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIC5yZXMgPSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5zdGFydCA9IE1NX0FERFJfSU9fIyNiYXNlLCAgICAgICAgICAgICAgIFwKKwkJLmVuZCA9IE1NX0FERFJfSU9fIyNiYXNlICsgKHNpemUpIC0gMSwgICAgXAorICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gICAgICAgICAgICAgICAgICAgXAorICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgLmRtYV9tYXNrID0gfjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgLmlycSA9IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgSVJRXyMjYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisKK0FNQkFfREVWSUNFKHVhcnRBLCAidWFydGEiLCBVQVJUQSwgTlVMTCwgU1pfNEspOworQU1CQV9ERVZJQ0UodWFydEIsICJ1YXJ0YiIsIFVBUlRCLCBOVUxMLCBTWl80Syk7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbDFfY2xrID0geworCS5uYW1lID0gIlBMTDEiLAorCS50eXBlID0gQ0xLX1RZUEVfUFJJTUFSWSB8IENMS19UWVBFX1BMTDEsCisJLnJhdGVfaHogPSAyMDAwMDAwMDAwLAorCS51c2VfY250ID0gNywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnRfY2xrID0geworCS5uYW1lID0gIlVBUlQiLAorCS50eXBlID0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAorCS5jc3BfaWQgPSBjaGlwY0h3X0NMT0NLX1VBUlQsCisJLnJhdGVfaHogPSBIV19DRkdfVUFSVF9DTEtfSFosCisJLnBhcmVudCA9ICZwbGwxX2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CisJewkJCS8qIFVBUlQwICovCisJIC5kZXZfaWQgPSAidWFydGEiLAorCSAuY2xrID0gJnVhcnRfY2xrLAorCSB9LCB7CQkJLyogVUFSVDEgKi8KKwkgICAgIC5kZXZfaWQgPSAidWFydGIiLAorCSAgICAgLmNsayA9ICZ1YXJ0X2NsaywKKwkgICAgIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJJnVhcnRBX2RldmljZSwKKwkmdWFydEJfZGV2aWNlLAorfTsKKwordm9pZCBfX2luaXQgYmNtcmluZ19hbWJhX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKwl1MzIgYnVzX2Nsb2NrOworCisvKiBMaW51eCBpcyBydW4gaW5pdGlhbGx5IGluIG5vbi1zZWN1cmUgbW9kZS4gU2VjdXJlIHBlcmlwaGVyYWxzICovCisvKiBnZW5lcmF0ZSBGSVEsIGFuZCBtdXN0IGJlIGhhbmRsZWQgaW4gc2VjdXJlIG1vZGUuIFVudGlsIHdlIGhhdmUgKi8KKy8qIGEgbGludXggc2VjdXJpdHkgbW9uaXRvciBpbXBsZW1lbnRhdGlvbiwga2VlcCBldmVyeXRoaW5nIGluICovCisvKiBub24tc2VjdXJlIG1vZGUuICovCisJY2hpcGNId19idXNJbnRlcmZhY2VDbG9ja0VuYWJsZShjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfU1BVKTsKKwlzZWNId19zZXRVbnNlY3VyZShzZWNId19CTEtfTUFTS19DSElQX0NPTlRST0wgfAorCQkJICBzZWNId19CTEtfTUFTS19LRVlfU0NBTiB8CisJCQkgIHNlY0h3X0JMS19NQVNLX1RPVUNIX1NDUkVFTiB8CisJCQkgIHNlY0h3X0JMS19NQVNLX1VBUlQwIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfVUFSVDEgfAorCQkJICBzZWNId19CTEtfTUFTS19XQVRDSERPRyB8CisJCQkgIHNlY0h3X0JMS19NQVNLX1NQVU0gfAorCQkJICBzZWNId19CTEtfTUFTS19ERFIyIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfU1BVIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfUEtBIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfUk5HIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfUlRDIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfT1RQIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfQk9PVCB8CisJCQkgIHNlY0h3X0JMS19NQVNLX01QVSB8CisJCQkgIHNlY0h3X0JMS19NQVNLX1RaQ1RSTCB8IHNlY0h3X0JMS19NQVNLX0lOVFIpOworCisJLyogT25seSB0aGUgZGV2aWNlcyBhdHRhY2hlZCB0byB0aGUgQU1CQSBidXMgYXJlIGVuYWJsZWQganVzdCBiZWZvcmUgdGhlIGJ1cyBpcyAqLworCS8qIHNjYW5uZWQgYW5kIHRoZSBkcml2ZXJzIGFyZSBsb2FkZWQuIFRoZSBjbG9ja3MgbmVlZCB0byBiZSBvbiBmb3IgdGhlIEFNQkEgYnVzICovCisJLyogZHJpdmVyIHRvIGFjY2VzcyB0aGVzZSBibG9ja3MuIFRoZSBidXMgaXMgcHJvYmVkLCBhbmQgdGhlIGRyaXZlcnMgYXJlIGxvYWRlZC4gKi8KKwkvKiBGSVhNRSBOZWVkIHRvIHJlbW92ZSBlbmFibGUgb2YgUElGIG9uY2UgQ0xDRCBjbG9jayBlbmFibGUgdXNlZCBwcm9wZXJseSBpbiBGUEdBLiAqLworCWJ1c19jbG9jayA9IGNoaXBjSHdfUkVHX0JVU19DTE9DS19HRQorCSAgICB8IGNoaXBjSHdfUkVHX0JVU19DTE9DS19TRElPMCB8IGNoaXBjSHdfUkVHX0JVU19DTE9DS19TRElPMTsKKworCWNoaXBjSHdfYnVzSW50ZXJmYWNlQ2xvY2tFbmFibGUoYnVzX2Nsb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CisJCXN0cnVjdCBhbWJhX2RldmljZSAqZCA9IGFtYmFfZGV2c1tpXTsKKwkJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoZCwgJmlvbWVtX3Jlc291cmNlKTsKKwl9Cit9CisKKy8qCisgKiBXaGVyZSBpcyB0aGUgdGltZXIgKFZBKT8KKyAqLworI2RlZmluZSBUSU1FUjBfVkFfQkFTRQkJIE1NX0lPX0JBU0VfVE1SCisjZGVmaW5lIFRJTUVSMV9WQV9CQVNFCQkoTU1fSU9fQkFTRV9UTVIgKyAweDIwKQorI2RlZmluZSBUSU1FUjJfVkFfQkFTRQkJKE1NX0lPX0JBU0VfVE1SICsgMHg0MCkKKyNkZWZpbmUgVElNRVIzX1ZBX0JBU0UgICAgICAgICAgKE1NX0lPX0JBU0VfVE1SICsgMHg2MCkKKworLyogVGltZXIgMCAtIDI1IE1IeiwgVGltZXIzIGF0IGJ1cyBjbG9jayByYXRlLCB0eXBpY2FsbHkgIDE1MC0xNjYgTUh6ICovCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9GUEdBMTExMDcpCisvKiBmcGdhIGNwdS9idXMgYXJlIGN1cnJlbnRseSAzMCB0aW1lcyBzbG93ZXIgc28gc2NhbGUgZnJlcXVlbmN5IGFzIHdlbGwgdG8gKi8KKy8qIHNsb3cgZG93biBMaW51eCdzIHNlbnNlIG9mIHRpbWUgKi8KKyNkZWZpbmUgVElNRVIwX0ZSRVFVRU5DWV9NSFogICh0bXJId19MT1dfRlJFUVVFTkNZX01IWiAqIDMwKQorI2RlZmluZSBUSU1FUjFfRlJFUVVFTkNZX01IWiAgKHRtckh3X0xPV19GUkVRVUVOQ1lfTUhaICogMzApCisjZGVmaW5lIFRJTUVSM19GUkVRVUVOQ1lfTUhaICAodG1ySHdfSElHSF9GUkVRVUVOQ1lfTUhaICogMzApCisjZGVmaW5lIFRJTUVSM19GUkVRVUVOQ1lfS0haICAgKHRtckh3X0hJR0hfRlJFUVVFTkNZX0haIC8gMTAwMCAqIDMwKQorI2Vsc2UKKyNkZWZpbmUgVElNRVIwX0ZSRVFVRU5DWV9NSFogIHRtckh3X0xPV19GUkVRVUVOQ1lfTUhaCisjZGVmaW5lIFRJTUVSMV9GUkVRVUVOQ1lfTUhaICB0bXJId19MT1dfRlJFUVVFTkNZX01IWgorI2RlZmluZSBUSU1FUjNfRlJFUVVFTkNZX01IWiAgdG1ySHdfSElHSF9GUkVRVUVOQ1lfTUhaCisjZGVmaW5lIFRJTUVSM19GUkVRVUVOQ1lfS0haICAodG1ySHdfSElHSF9GUkVRVUVOQ1lfSFogLyAxMDAwKQorI2VuZGlmCisKKyNkZWZpbmUgVElDS1NfUEVSX3VTRUMgICAgIFRJTUVSMF9GUkVRVUVOQ1lfTUhaCisKKy8qCisgKiAgVGhlc2UgYXJlIHVzZWNvbmRzIE5PVCB0aWNrcy4KKyAqCisgKi8KKyNkZWZpbmUgbVNFQ18xICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwCisjZGVmaW5lIG1TRUNfNSAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TRUNfMSAqIDUpCisjZGVmaW5lIG1TRUNfMTAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TRUNfMSAqIDEwKQorI2RlZmluZSBtU0VDXzI1ICAgICAgICAgICAgICAgICAgICAgICAgIChtU0VDXzEgKiAyNSkKKyNkZWZpbmUgU0VDXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAobVNFQ18xICogMTAwMCkKKworLyoKKyAqIEhvdyBsb25nIGlzIHRoZSB0aW1lciBpbnRlcnZhbD8KKyAqLworI2RlZmluZSBUSU1FUl9JTlRFUlZBTAkoVElDS1NfUEVSX3VTRUMgKiBtU0VDXzEwKQorI2lmIFRJTUVSX0lOVEVSVkFMID49IDB4MTAwMDAwCisjZGVmaW5lIFRJTUVSX1JFTE9BRAkoVElNRVJfSU5URVJWQUwgPj4gOCkKKyNkZWZpbmUgVElNRVJfRElWSVNPUgkoVElNRVJfQ1RSTF9ESVYyNTYpCisjZGVmaW5lIFRJQ0tTMlVTRUNTKHgpCSgyNTYgKiAoeCkgLyBUSUNLU19QRVJfdVNFQykKKyNlbGlmIFRJTUVSX0lOVEVSVkFMID49IDB4MTAwMDAKKyNkZWZpbmUgVElNRVJfUkVMT0FECShUSU1FUl9JTlRFUlZBTCA+PiA0KQkvKiBEaXZpZGUgYnkgMTYgKi8KKyNkZWZpbmUgVElNRVJfRElWSVNPUgkoVElNRVJfQ1RSTF9ESVYxNikKKyNkZWZpbmUgVElDS1MyVVNFQ1MoeCkJKDE2ICogKHgpIC8gVElDS1NfUEVSX3VTRUMpCisjZWxzZQorI2RlZmluZSBUSU1FUl9SRUxPQUQJKFRJTUVSX0lOVEVSVkFMKQorI2RlZmluZSBUSU1FUl9ESVZJU09SCShUSU1FUl9DVFJMX0RJVjEpCisjZGVmaW5lIFRJQ0tTMlVTRUNTKHgpCSgoeCkgLyBUSUNLU19QRVJfdVNFQykKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0aW1lcl9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCSAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGN0cmw7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQl3cml0ZWwoVElNRVJfUkVMT0FELCBUSU1FUjBfVkFfQkFTRSArIFRJTUVSX0xPQUQpOworCisJCWN0cmwgPSBUSU1FUl9DVFJMX1BFUklPRElDOworCQljdHJsIHw9CisJCSAgICBUSU1FUl9ESVZJU09SIHwgVElNRVJfQ1RSTF8zMkJJVCB8IFRJTUVSX0NUUkxfSUUgfAorCQkgICAgVElNRVJfQ1RSTF9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJLyogcGVyaW9kIHNldCwgYW5kIHRpbWVyIGVuYWJsZWQgaW4gJ25leHRfZXZlbnQnIGhvb2sgKi8KKwkJY3RybCA9IFRJTUVSX0NUUkxfT05FU0hPVDsKKwkJY3RybCB8PSBUSU1FUl9ESVZJU09SIHwgVElNRVJfQ1RSTF8zMkJJVCB8IFRJTUVSX0NUUkxfSUU7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJZGVmYXVsdDoKKwkJY3RybCA9IDA7CisJfQorCisJd3JpdGVsKGN0cmwsIFRJTUVSMF9WQV9CQVNFICsgVElNRVJfQ1RSTCk7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBldnQsCisJCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqdW51c2VkKQoreworCXVuc2lnbmVkIGxvbmcgY3RybCA9IHJlYWRsKFRJTUVSMF9WQV9CQVNFICsgVElNRVJfQ1RSTCk7CisKKwl3cml0ZWwoZXZ0LCBUSU1FUjBfVkFfQkFTRSArIFRJTUVSX0xPQUQpOworCXdyaXRlbChjdHJsIHwgVElNRVJfQ1RSTF9FTkFCTEUsIFRJTUVSMF9WQV9CQVNFICsgVElNRVJfQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgdGltZXIwX2Nsb2NrZXZlbnQgPSB7CisJLm5hbWUgPSAidGltZXIwIiwKKwkuc2hpZnQgPSAzMiwKKwkuZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLnNldF9tb2RlID0gdGltZXJfc2V0X21vZGUsCisJLnNldF9uZXh0X2V2ZW50ID0gdGltZXJfc2V0X25leHRfZXZlbnQsCit9OworCisvKgorICogSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYmNtcmluZ190aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZ0aW1lcjBfY2xvY2tldmVudDsKKworCXdyaXRlbCgxLCBUSU1FUjBfVkFfQkFTRSArIFRJTUVSX0lOVENMUik7CisKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gYmNtcmluZ190aW1lcl9pcnEgPSB7CisJLm5hbWUgPSAiYmNtcmluZyBUaW1lciBUaWNrIiwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKKwkuaGFuZGxlciA9IGJjbXJpbmdfdGltZXJfaW50ZXJydXB0LAorfTsKKworc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMSh2b2lkKQoreworCXJldHVybiB+cmVhZGwoVElNRVIxX1ZBX0JBU0UgKyBUSU1FUl9WQUxVRSk7Cit9CisKK3N0YXRpYyBjeWNsZV90IGJjbXJpbmdfZ2V0X2N5Y2xlc190aW1lcjModm9pZCkKK3sKKwlyZXR1cm4gfnJlYWRsKFRJTUVSM19WQV9CQVNFICsgVElNRVJfVkFMVUUpOworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX2JjbXJpbmdfdGltZXIxID0geworCS5uYW1lID0gInRpbWVyMSIsCisJLnJhdGluZyA9IDIwMCwKKwkucmVhZCA9IGJjbXJpbmdfZ2V0X2N5Y2xlc190aW1lcjEsCisJLm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuc2hpZnQgPSAyMCwKKwkuZmxhZ3MgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfYmNtcmluZ190aW1lcjMgPSB7CisJLm5hbWUgPSAidGltZXIzIiwKKwkucmF0aW5nID0gMTAwLAorCS5yZWFkID0gYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMywKKwkubWFzayA9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5zaGlmdCA9IDIwLAorCS5mbGFncyA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYmNtcmluZ19jbG9ja3NvdXJjZV9pbml0KHZvaWQpCit7CisJLyogc2V0dXAgdGltZXIxIGFzIGZyZWUtcnVubmluZyBjbG9ja3NvdXJjZSAqLworCXdyaXRlbCgwLCBUSU1FUjFfVkFfQkFTRSArIFRJTUVSX0NUUkwpOworCXdyaXRlbCgweGZmZmZmZmZmLCBUSU1FUjFfVkFfQkFTRSArIFRJTUVSX0xPQUQpOworCXdyaXRlbCgweGZmZmZmZmZmLCBUSU1FUjFfVkFfQkFTRSArIFRJTUVSX1ZBTFVFKTsKKwl3cml0ZWwoVElNRVJfQ1RSTF8zMkJJVCB8IFRJTUVSX0NUUkxfRU5BQkxFIHwgVElNRVJfQ1RSTF9QRVJJT0RJQywKKwkgICAgICAgVElNRVIxX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKworCWNsb2Nrc291cmNlX2JjbXJpbmdfdGltZXIxLm11bHQgPQorCSAgICBjbG9ja3NvdXJjZV9raHoybXVsdChUSU1FUjFfRlJFUVVFTkNZX01IWiAqIDEwMDAsCisJCQkJIGNsb2Nrc291cmNlX2JjbXJpbmdfdGltZXIxLnNoaWZ0KTsKKwljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfYmNtcmluZ190aW1lcjEpOworCisJLyogc2V0dXAgdGltZXIzIGFzIGZyZWUtcnVubmluZyBjbG9ja3NvdXJjZSAqLworCXdyaXRlbCgwLCBUSU1FUjNfVkFfQkFTRSArIFRJTUVSX0NUUkwpOworCXdyaXRlbCgweGZmZmZmZmZmLCBUSU1FUjNfVkFfQkFTRSArIFRJTUVSX0xPQUQpOworCXdyaXRlbCgweGZmZmZmZmZmLCBUSU1FUjNfVkFfQkFTRSArIFRJTUVSX1ZBTFVFKTsKKwl3cml0ZWwoVElNRVJfQ1RSTF8zMkJJVCB8IFRJTUVSX0NUUkxfRU5BQkxFIHwgVElNRVJfQ1RSTF9QRVJJT0RJQywKKwkgICAgICAgVElNRVIzX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKworCWNsb2Nrc291cmNlX2JjbXJpbmdfdGltZXIzLm11bHQgPQorCSAgICBjbG9ja3NvdXJjZV9raHoybXVsdChUSU1FUjNfRlJFUVVFTkNZX0tIWiwKKwkJCQkgY2xvY2tzb3VyY2VfYmNtcmluZ190aW1lcjMuc2hpZnQpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9iY21yaW5nX3RpbWVyMyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCB1cCB0aW1lciBpbnRlcnJ1cHQsIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzLgorICovCit2b2lkIF9faW5pdCBiY21yaW5nX2luaXRfdGltZXIodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJiY21yaW5nX2luaXRfdGltZXJcbiIpOworCS8qCisJICogSW5pdGlhbGlzZSB0byBhIGtub3duIHN0YXRlIChhbGwgdGltZXJzIG9mZikKKwkgKi8KKwl3cml0ZWwoMCwgVElNRVIwX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKwl3cml0ZWwoMCwgVElNRVIxX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKwl3cml0ZWwoMCwgVElNRVIyX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKwl3cml0ZWwoMCwgVElNRVIzX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKworCS8qCisJICogTWFrZSBpcnFzIGhhcHBlbiBmb3IgdGhlIHN5c3RlbSB0aW1lcgorCSAqLworCXNldHVwX2lycShJUlFfVElNRVIwLCAmYmNtcmluZ190aW1lcl9pcnEpOworCisJYmNtcmluZ19jbG9ja3NvdXJjZV9pbml0KCk7CisKKwl0aW1lcjBfY2xvY2tldmVudC5tdWx0ID0KKwkgICAgZGl2X3NjKDEwMDAwMDAsIE5TRUNfUEVSX1NFQywgdGltZXIwX2Nsb2NrZXZlbnQuc2hpZnQpOworCXRpbWVyMF9jbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9CisJICAgIGNsb2NrZXZlbnRfZGVsdGEybnMoMHhmZmZmZmZmZiwgJnRpbWVyMF9jbG9ja2V2ZW50KTsKKwl0aW1lcjBfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPQorCSAgICBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZiwgJnRpbWVyMF9jbG9ja2V2ZW50KTsKKworCXRpbWVyMF9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmdGltZXIwX2Nsb2NrZXZlbnQpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIGJjbXJpbmdfdGltZXIgPSB7CisJLmluaXQgPSBiY21yaW5nX2luaXRfdGltZXIsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5N2JhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisvKiBQb3J0aW9ucyBjb3B5cmlnaHQgQnJvYWRjb20gMjAwOCAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0JDTVJJTkdfSAorI2RlZmluZSBfX0FTTV9BUkNIX0JDTVJJTkdfSAorCit2b2lkIF9faW5pdCBiY21yaW5nX2FtYmFfaW5pdCh2b2lkKTsKK3ZvaWQgX19pbml0IGJjbXJpbmdfbWFwX2lvKHZvaWQpOwordm9pZCBfX2luaXQgYmNtcmluZ19pbml0X2lycSh2b2lkKTsKKworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgYmNtcmluZ190aW1lcjsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4YzAzNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitvYmoteSArPSBkbWFjLworb2JqLXkgKz0gdG1yLworb2JqLXkgKz0gY2hpcGMvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2NoaXBjL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzM5NTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteSArPSBjaGlwY0h3Lm8gY2hpcGNId19zdHIubyBjaGlwY0h3X3Jlc2V0Lm8gY2hpcGNId19pbml0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvY2hpcGMvY2hpcGNIdy5jIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9jaGlwY0h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhNjFkOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvY2hpcGMvY2hpcGNIdy5jCkBAIC0wLDAgKzEsNzc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDMgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgY2hpcGNIdy5jCisqCisqICBAYnJpZWYgICBMb3cgbGV2ZWwgVmFyaW91cyBDSElQIGNsb2NrIGNvbnRyb2xsaW5nIHJvdXRpbmVzCisqCisqICBAbm90ZQorKgorKiAgIFRoZXNlIHJvdXRpbmVzIHByb3ZpZGUgYmFzaWMgY2xvY2sgY29udHJvbGxpbmcgZnVuY3Rpb25hbGl0eSBvbmx5LgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8Y3NwL2Vycm5vLmg+CisjaW5jbHVkZSA8Y3NwL3N0ZGludC5oPgorI2luY2x1ZGUgPGNzcC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPG1hY2gvY3NwL2NoaXBjSHdfZGVmLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaD4KKworI2luY2x1ZGUgPGNzcC9yZWcuaD4KKyNpbmNsdWRlIDxjc3AvZGVsYXkuaD4KKworLyogLS0tLSBQcml2YXRlIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFZQTSBhbGlnbm1lbnQgYWxnb3JpdGhtIHVzZXMgdGhpcyAqLworI2RlZmluZSBNQVhfUEhBU0VfQURKVVNUX0NPVU5UICAgICAgICAgMHhGRkZGCS8qIE1heCBudW1iZXIgb2YgdGltZXMgYWxsb3dlZCB0byBhZGp1c3QgdGhlIHBoYXNlICovCisjZGVmaW5lIE1BWF9QSEFTRV9BTElHTl9BVFRFTVBUUyAgICAgICAxMAkvKiBNYXggbnVtYmVyIG9mIGF0dGVtcHQgdG8gYWxpZ24gdGhlIHBoYXNlICovCisKKy8qIExvY2FsIGRlZmluaXRpb24gb2YgY2xvY2sgdHlwZSAqLworI2RlZmluZSBQTExfQ0xPQ0sgICAgICAgICAgICAgICAgICAgICAgMQkvKiBQTEwgQ2xvY2sgKi8KKyNkZWZpbmUgTk9OX1BMTF9DTE9DSyAgICAgICAgICAgICAgICAgIDIJLyogRGl2aWRlciBjbG9jayAqLworCitzdGF0aWMgaW50IGNoaXBjSHdfZGl2aWRlKGludCBudW0sIGludCBkZW5vbSkKKyAgICBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLmFyYW10ZXh0IikpKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBjbG9jayBmZXF1ZW5jeSBmb3IgbWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgY2xvY2tzCisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgY2xvY2sgZnJlcXVlbmN5CisqCisqICBAcmV0dXJuICBDb25maWd1cmVkIGNsb2NrIGZyZXF1ZW5jeSBpbiBoZXJ0egorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworY2hpcGNId19mcmVxIGNoaXBjSHdfZ2V0Q2xvY2tGcmVxdWVuY3koY2hpcGNId19DTE9DS19lIGNsb2NrCS8qICBbIElOIF0gQ29uZmlndXJhYmxlIGNsb2NrICovCisgICAgKSB7CisJdm9sYXRpbGUgdWludDMyX3QgKnBQTExSZWcgPSAodWludDMyX3QgKikgMHgwOworCXZvbGF0aWxlIHVpbnQzMl90ICpwQ2xvY2tDdHJsID0gKHVpbnQzMl90ICopIDB4MDsKKwl2b2xhdGlsZSB1aW50MzJfdCAqcERlcGVuZGVudENsb2NrID0gKHVpbnQzMl90ICopIDB4MDsKKwl1aW50MzJfdCB2Y29GcmVxUGxsMUh6ID0gMDsJLyogRWZmZWN0aXZlIFZDTyBmcmVxdWVuY3kgZm9yIFBMTDEgaW4gSHogKi8KKwl1aW50MzJfdCB2Y29GcmVxUGxsMkh6ID0gMDsJLyogRWZmZWN0aXZlIFZDTyBmcmVxdWVuY3kgZm9yIFBMTDIgaW4gSHogKi8KKwl1aW50MzJfdCBkZXBlbmRlbnRDbG9ja1R5cGUgPSAwOworCXVpbnQzMl90IHZjb0h6ID0gMDsKKworCS8qIEdldCBWQ08gZnJlcXVlbmNpZXMgKi8KKwlpZiAoKHBDaGlwY0h3LT5QTExQcmVEaXZpZGVyICYgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NT0RFX01BU0spICE9IGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTU9ERV9JTlRFR0VSKSB7CisJCXVpbnQ2NF90IGFkanVzdEZyZXEgPSAwOworCisJCXZjb0ZyZXFQbGwxSHogPSBjaGlwY0h3X1hUQUxfRlJFUV9IeiAqCisJCSAgICBjaGlwY0h3X2RpdmlkZShjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMSwgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDIpICoKKwkJICAgICgocENoaXBjSHctPlBMTFByZURpdmlkZXIgJiBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX01BU0spID4+CisJCSAgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9TSElGVCk7CisKKwkJLyogQWRqdXN0ZWQgZnJlcXVlbmN5IGR1ZSB0byBjaGlwY0h3X1JFR19QTExfRElWSURFUl9ORElWX2ZfU1MgKi8KKwkJYWRqdXN0RnJlcSA9ICh1aW50NjRfdCkgY2hpcGNId19YVEFMX0ZSRVFfSHogKgorCQkJKHVpbnQ2NF90KSBjaGlwY0h3X1JFR19QTExfRElWSURFUl9ORElWX2ZfU1MgKgorCQkJY2hpcGNId19kaXZpZGUoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDEsIChjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMiAqICh1aW50NjRfdCkgY2hpcGNId19SRUdfUExMX0RJVklERVJfRlJBQykpOworCQl2Y29GcmVxUGxsMUh6ICs9ICh1aW50MzJfdCkgYWRqdXN0RnJlcTsKKwl9IGVsc2UgeworCQl2Y29GcmVxUGxsMUh6ID0gY2hpcGNId19YVEFMX0ZSRVFfSHogKgorCQkgICAgY2hpcGNId19kaXZpZGUoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDEsIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyKSAqCisJCSAgICAoKHBDaGlwY0h3LT5QTExQcmVEaXZpZGVyICYgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NQVNLKSA+PgorCQkgICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfU0hJRlQpOworCX0KKwl2Y29GcmVxUGxsMkh6ID0KKwkgICAgY2hpcGNId19YVEFMX0ZSRVFfSHogKgorCQkgY2hpcGNId19kaXZpZGUoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDEsIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyKSAqCisJICAgICgocENoaXBjSHctPlBMTFByZURpdmlkZXIyICYgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NQVNLKSA+PgorCSAgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9TSElGVCk7CisKKwlzd2l0Y2ggKGNsb2NrKSB7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0REUjoKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+RERSQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0FSTToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+QVJNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0VTVzoKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+RVNXQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1ZQTToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+VlBNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0VTVzEyNToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+RVNXMTI1Q2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1VBUlQ6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlVBUlRDbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfU0RJTzA6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlNESU8wQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1NESU8xOgorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5TRElPMUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19TUEk6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlNQSUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19FVE06CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkVUTUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19VU0I6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlVTQkNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwySHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19MQ0Q6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkxDRENsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwySHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19BUE06CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkFQTUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwySHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19CVVM6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPkFDTEtDbG9jazsKKwkJcERlcGVuZGVudENsb2NrID0gJnBDaGlwY0h3LT5BUk1DbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlkZXBlbmRlbnRDbG9ja1R5cGUgPSBQTExfQ0xPQ0s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19PVFA6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPk9UUENsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfSTJDOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5JMkNDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0kyUzA6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPkkyUzBDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1JUQlVTOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5SVEJVU0Nsb2NrOworCQlwRGVwZW5kZW50Q2xvY2sgPSAmcENoaXBjSHctPkFDTEtDbG9jazsKKwkJZGVwZW5kZW50Q2xvY2tUeXBlID0gTk9OX1BMTF9DTE9DSzsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0FQTTEwMDoKKwkJcENsb2NrQ3RybCA9ICZwQ2hpcGNIdy0+QVBNMTAwQ2xvY2s7CisJCXBEZXBlbmRlbnRDbG9jayA9ICZwQ2hpcGNIdy0+QVBNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDJIejsKKwkJZGVwZW5kZW50Q2xvY2tUeXBlID0gUExMX0NMT0NLOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfVFNDOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5UU0NDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0xFRDoKKwkJcENsb2NrQ3RybCA9ICZwQ2hpcGNIdy0+TEVEQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19JMlMxOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5JMlMxQ2xvY2s7CisJCWJyZWFrOworCX0KKworCWlmIChwUExMUmVnKSB7CisJCS8qIE9idGFpbiBQTEwgY2xvY2sgZnJlcXVlbmN5ICovCisJCWlmICgqcFBMTFJlZyAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19CWVBBU1NfU0VMRUNUKSB7CisJCQkvKiBSZXR1cm4gY3J5c3RhbCBjbG9jayBmcmVxdWVuY3kgd2hlbiBieXBhc3NlZCAqLworCQkJcmV0dXJuIGNoaXBjSHdfWFRBTF9GUkVRX0h6OworCQl9IGVsc2UgaWYgKGNsb2NrID09IGNoaXBjSHdfQ0xPQ0tfRERSKSB7CisJCQkvKiBERFIgZnJlcXVlbmN5IGlzIGNvbmZpZ3VyZWQgaW4gUExMRGl2aWRlciByZWdpc3RlciAqLworCQkJcmV0dXJuIGNoaXBjSHdfZGl2aWRlICh2Y29IeiwgKCgocENoaXBjSHctPlBMTERpdmlkZXIgJiAweEZGMDAwMDAwKSA+PiAyNCkgPyAoKHBDaGlwY0h3LT5QTExEaXZpZGVyICYgMHhGRjAwMDAwMCkgPj4gMjQpIDogMjU2KSk7CisJCX0gZWxzZSB7CisJCQkvKiBGcm9tIGNoaXAgcmV2aXNpb24gbnVtYmVyIEIwLCBMQ0QgY2xvY2sgaXMgaW50ZXJuYWxseSBkaXZpZGVkIGJ5IDIgKi8KKwkJCWlmICgocFBMTFJlZyA9PSAmcENoaXBjSHctPkxDRENsb2NrKSAmJiAoY2hpcGNId19nZXRDaGlwUmV2aXNpb25OdW1iZXIoKSAhPSBjaGlwY0h3X1JFVl9OVU1CRVJfQTApKSB7CisJCQkJdmNvSHogPj49IDE7CisJCQl9CisJCQkvKiBPYnRhaW4gUExMIGNsb2NrIGZyZXF1ZW5jeSB1c2luZyBWQ08gZGl2aWRlcnMgKi8KKwkJCXJldHVybiBjaGlwY0h3X2RpdmlkZSh2Y29IeiwgKCgqcFBMTFJlZyAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19NRElWX01BU0spID8gKCpwUExMUmVnICYgY2hpcGNId19SRUdfUExMX0NMT0NLX01ESVZfTUFTSykgOiAyNTYpKTsKKwkJfQorCX0gZWxzZSBpZiAocENsb2NrQ3RybCkgeworCQkvKiBPYnRhaW4gZGl2aWRlciBjbG9jayBmcmVxdWVuY3kgKi8KKwkJdWludDMyX3QgZGl2OworCQl1aW50MzJfdCBmcmVxID0gMDsKKworCQlpZiAoKnBDbG9ja0N0cmwgJiBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfQllQQVNTX1NFTEVDVCkgeworCQkJLyogUmV0dXJuIGNyeXN0YWwgY2xvY2sgZnJlcXVlbmN5IHdoZW4gYnlwYXNzZWQgKi8KKwkJCXJldHVybiBjaGlwY0h3X1hUQUxfRlJFUV9IejsKKwkJfSBlbHNlIGlmIChwRGVwZW5kZW50Q2xvY2spIHsKKwkJCS8qIElkZW50aWZ5IHRoZSBkZXBlbmRlbnQgY2xvY2sgZnJlcXVlbmN5ICovCisJCQlzd2l0Y2ggKGRlcGVuZGVudENsb2NrVHlwZSkgeworCQkJY2FzZSBQTExfQ0xPQ0s6CisJCQkJaWYgKCpwRGVwZW5kZW50Q2xvY2sgJiBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfQllQQVNTX1NFTEVDVCkgeworCQkJCQkvKiBVc2UgY3J5c3RhbCBjbG9jayBmcmVxdWVuY3kgd2hlbiBkZXBlbmRlbnQgUExMIGNsb2NrIGlzIGJ5cGFzc2VkICovCisJCQkJCWZyZXEgPSBjaGlwY0h3X1hUQUxfRlJFUV9IejsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBPYnRhaW4gUExMIGNsb2NrIGZyZXF1ZW5jeSB1c2luZyBWQ08gZGl2aWRlcnMgKi8KKwkJCQkJZGl2ID0gKnBEZXBlbmRlbnRDbG9jayAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19NRElWX01BU0s7CisJCQkJCWZyZXEgPSBkaXYgPyBjaGlwY0h3X2RpdmlkZSh2Y29IeiwgZGl2KSA6IDA7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBOT05fUExMX0NMT0NLOgorCQkJCWlmIChwRGVwZW5kZW50Q2xvY2sgPT0gKHVpbnQzMl90ICopICZwQ2hpcGNIdy0+QUNMS0Nsb2NrKSB7CisJCQkJCWZyZXEgPSBjaGlwY0h3X2dldENsb2NrRnJlcXVlbmN5IChjaGlwY0h3X0NMT0NLX0JVUyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKCpwRGVwZW5kZW50Q2xvY2sgJiBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfQllQQVNTX1NFTEVDVCkgeworCQkJCQkJLyogVXNlIGNyeXN0YWwgY2xvY2sgZnJlcXVlbmN5IHdoZW4gZGVwZW5kZW50IGRpdmlkZXIgY2xvY2sgaXMgYnlwYXNzZWQgKi8KKwkJCQkJCWZyZXEgPSBjaGlwY0h3X1hUQUxfRlJFUV9IejsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8qIE9idGFpbiBkaXZpZGVyIGNsb2NrIGZyZXF1ZW5jeSB1c2luZyBYVEFMIGRpdmlkZXJzICovCisJCQkJCQlkaXYgPSAqcERlcGVuZGVudENsb2NrICYgY2hpcGNId19SRUdfRElWX0NMT0NLX0RJVl9NQVNLOworCQkJCQkJZnJlcSA9IGNoaXBjSHdfZGl2aWRlIChjaGlwY0h3X1hUQUxfRlJFUV9IeiwgKGRpdiA/IGRpdiA6IDI1NikpOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogRGVwZW5kZW50IG9uIGNyeXN0YWwgY2xvY2sgKi8KKwkJCWZyZXEgPSBjaGlwY0h3X1hUQUxfRlJFUV9IejsKKwkJfQorCisJCWRpdiA9ICpwQ2xvY2tDdHJsICYgY2hpcGNId19SRUdfRElWX0NMT0NLX0RJVl9NQVNLOworCQlyZXR1cm4gY2hpcGNId19kaXZpZGUoZnJlcSwgKGRpdiA/IGRpdiA6IDI1NikpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBjbG9jayBmZXF1ZW5jeSBmb3IgbWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgY2xvY2tzCisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgY2xvY2sgZnJlcXVlbmN5CisqCisqICBAcmV0dXJuICBDb25maWd1cmVkIGNsb2NrIGZyZXF1ZW5jeSBpbiBIegorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworY2hpcGNId19mcmVxIGNoaXBjSHdfc2V0Q2xvY2tGcmVxdWVuY3koY2hpcGNId19DTE9DS19lIGNsb2NrLAkvKiAgWyBJTiBdIENvbmZpZ3VyYWJsZSBjbG9jayAqLworCQkJCSAgICAgICB1aW50MzJfdCBmcmVxCS8qICBbIElOIF0gQ2xvY2sgZnJlcXVlbmN5IGluIEh6ICovCisgICAgKSB7CisJdm9sYXRpbGUgdWludDMyX3QgKnBQTExSZWcgPSAodWludDMyX3QgKikgMHgwOworCXZvbGF0aWxlIHVpbnQzMl90ICpwQ2xvY2tDdHJsID0gKHVpbnQzMl90ICopIDB4MDsKKwl2b2xhdGlsZSB1aW50MzJfdCAqcERlcGVuZGVudENsb2NrID0gKHVpbnQzMl90ICopIDB4MDsKKwl1aW50MzJfdCB2Y29GcmVxUGxsMUh6ID0gMDsJLyogRWZmZWN0aXZlIFZDTyBmcmVxdWVuY3kgZm9yIFBMTDEgaW4gSHogKi8KKwl1aW50MzJfdCBkZXNWY29GcmVxUGxsMUh6ID0gMDsJLyogRGVzaXJlZCBWQ08gZnJlcXVlbmN5IGZvciBQTEwxIGluIEh6ICovCisJdWludDMyX3QgdmNvRnJlcVBsbDJIeiA9IDA7CS8qIEVmZmVjdGl2ZSBWQ08gZnJlcXVlbmN5IGZvciBQTEwyIGluIEh6ICovCisJdWludDMyX3QgZGVwZW5kZW50Q2xvY2tUeXBlID0gMDsKKwl1aW50MzJfdCB2Y29IeiA9IDA7CisJdWludDMyX3QgZGVzVmNvSHogPSAwOworCisJLyogR2V0IFZDTyBmcmVxdWVuY2llcyAqLworCWlmICgocENoaXBjSHctPlBMTFByZURpdmlkZXIgJiBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX01PREVfTUFTSykgIT0gY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NT0RFX0lOVEVHRVIpIHsKKwkJdWludDY0X3QgYWRqdXN0RnJlcSA9IDA7CisKKwkJdmNvRnJlcVBsbDFIeiA9IGNoaXBjSHdfWFRBTF9GUkVRX0h6ICoKKwkJICAgIGNoaXBjSHdfZGl2aWRlKGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AxLCBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMikgKgorCQkgICAgKChwQ2hpcGNIdy0+UExMUHJlRGl2aWRlciAmIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTUFTSykgPj4KKwkJICAgICBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX1NISUZUKTsKKworCQkvKiBBZGp1c3RlZCBmcmVxdWVuY3kgZHVlIHRvIGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX05ESVZfZl9TUyAqLworCQlhZGp1c3RGcmVxID0gKHVpbnQ2NF90KSBjaGlwY0h3X1hUQUxfRlJFUV9IeiAqCisJCQkodWludDY0X3QpIGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX05ESVZfZl9TUyAqCisJCQljaGlwY0h3X2RpdmlkZShjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMSwgKGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyICogKHVpbnQ2NF90KSBjaGlwY0h3X1JFR19QTExfRElWSURFUl9GUkFDKSk7CisJCXZjb0ZyZXFQbGwxSHogKz0gKHVpbnQzMl90KSBhZGp1c3RGcmVxOworCisJCS8qIERlc2lyZWQgVkNPIGZyZXF1ZW5jeSAqLworCQlkZXNWY29GcmVxUGxsMUh6ID0gY2hpcGNId19YVEFMX0ZSRVFfSHogKgorCQkgICAgY2hpcGNId19kaXZpZGUoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDEsIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyKSAqCisJCSAgICAoKChwQ2hpcGNIdy0+UExMUHJlRGl2aWRlciAmIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTUFTSykgPj4KKwkJICAgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9TSElGVCkgKyAxKTsKKwl9IGVsc2UgeworCQl2Y29GcmVxUGxsMUh6ID0gZGVzVmNvRnJlcVBsbDFIeiA9IGNoaXBjSHdfWFRBTF9GUkVRX0h6ICoKKwkJICAgIGNoaXBjSHdfZGl2aWRlKGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AxLCBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMikgKgorCQkgICAgKChwQ2hpcGNIdy0+UExMUHJlRGl2aWRlciAmIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTUFTSykgPj4KKwkJICAgICBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX1NISUZUKTsKKwl9CisJdmNvRnJlcVBsbDJIeiA9IGNoaXBjSHdfWFRBTF9GUkVRX0h6ICogY2hpcGNId19kaXZpZGUoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDEsIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyKSAqCisJICAgICgocENoaXBjSHctPlBMTFByZURpdmlkZXIyICYgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NQVNLKSA+PgorCSAgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9TSElGVCk7CisKKwlzd2l0Y2ggKGNsb2NrKSB7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0REUjoKKwkJLyogQ29uZmlndXJlIHRoZSBERFJfY3RybDpCVVMgcmF0aW8gc2V0dGluZ3MgKi8KKwkJeworCQkJUkVHX0xPQ0FMX0lSUV9TQVZFOworCQkJLyogRHZpZGUgRERSX3BoeSBieSB0d28gdG8gb2J0YWluIEREUl9jdHJsIGNsb2NrICovCisJCQlwQ2hpcGNIdy0+RERSQ2xvY2sgPSAocENoaXBjSHctPkREUkNsb2NrICYgfmNoaXBjSHdfUkVHX1BMTF9DTE9DS19UT19CVVNfUkFUSU9fTUFTSykgfCAoKCgoZnJlcSAvIDIpIC8gY2hpcGNId19nZXRDbG9ja0ZyZXF1ZW5jeShjaGlwY0h3X0NMT0NLX0JVUykpIC0gMSkKKwkJCQk8PCBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfVE9fQlVTX1JBVElPX1NISUZUKTsKKwkJCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKKwkJfQorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5ERFJDbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlkZXNWY29IeiA9IGRlc1Zjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19BUk06CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkFSTUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwxSHo7CisJCWRlc1Zjb0h6ID0gZGVzVmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0VTVzoKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+RVNXQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJZGVzVmNvSHogPSBkZXNWY29GcmVxUGxsMUh6OworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfVlBNOgorCQkvKiBDb25maWd1cmUgdGhlIFZQTTpCVVMgcmF0aW8gc2V0dGluZ3MgKi8KKwkJeworCQkJUkVHX0xPQ0FMX0lSUV9TQVZFOworCQkJcENoaXBjSHctPlZQTUNsb2NrID0gKHBDaGlwY0h3LT5WUE1DbG9jayAmIH5jaGlwY0h3X1JFR19QTExfQ0xPQ0tfVE9fQlVTX1JBVElPX01BU0spIHwgKChjaGlwY0h3X2RpdmlkZSAoZnJlcSwgY2hpcGNId19nZXRDbG9ja0ZyZXF1ZW5jeShjaGlwY0h3X0NMT0NLX0JVUykpIC0gMSkKKwkJCQk8PCBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfVE9fQlVTX1JBVElPX1NISUZUKTsKKwkJCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKKwkJfQorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5WUE1DbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlkZXNWY29IeiA9IGRlc1Zjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19FU1cxMjU6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkVTVzEyNUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwxSHo7CisJCWRlc1Zjb0h6ID0gZGVzVmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1VBUlQ6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlVBUlRDbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlkZXNWY29IeiA9IGRlc1Zjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19TRElPMDoKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+U0RJTzBDbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlkZXNWY29IeiA9IGRlc1Zjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19TRElPMToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+U0RJTzFDbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlkZXNWY29IeiA9IGRlc1Zjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19TUEk6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlNQSUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwxSHo7CisJCWRlc1Zjb0h6ID0gZGVzVmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0VUTToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+RVRNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJZGVzVmNvSHogPSBkZXNWY29GcmVxUGxsMUh6OworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfVVNCOgorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5VU0JDbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMkh6OworCQlkZXNWY29IeiA9IHZjb0ZyZXFQbGwySHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19MQ0Q6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkxDRENsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwySHo7CisJCWRlc1Zjb0h6ID0gdmNvRnJlcVBsbDJIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0FQTToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+QVBNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDJIejsKKwkJZGVzVmNvSHogPSB2Y29GcmVxUGxsMkh6OworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfQlVTOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5BQ0xLQ2xvY2s7CisJCXBEZXBlbmRlbnRDbG9jayA9ICZwQ2hpcGNIdy0+QVJNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJZGVzVmNvSHogPSBkZXNWY29GcmVxUGxsMUh6OworCQlkZXBlbmRlbnRDbG9ja1R5cGUgPSBQTExfQ0xPQ0s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19PVFA6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPk9UUENsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfSTJDOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5JMkNDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0kyUzA6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPkkyUzBDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1JUQlVTOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5SVEJVU0Nsb2NrOworCQlwRGVwZW5kZW50Q2xvY2sgPSAmcENoaXBjSHctPkFDTEtDbG9jazsKKwkJZGVwZW5kZW50Q2xvY2tUeXBlID0gTk9OX1BMTF9DTE9DSzsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0FQTTEwMDoKKwkJcENsb2NrQ3RybCA9ICZwQ2hpcGNIdy0+QVBNMTAwQ2xvY2s7CisJCXBEZXBlbmRlbnRDbG9jayA9ICZwQ2hpcGNIdy0+QVBNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDJIejsKKwkJZGVzVmNvSHogPSB2Y29GcmVxUGxsMkh6OworCQlkZXBlbmRlbnRDbG9ja1R5cGUgPSBQTExfQ0xPQ0s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19UU0M6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPlRTQ0Nsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfTEVEOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5MRURDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0kyUzE6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPkkyUzFDbG9jazsKKwkJYnJlYWs7CisJfQorCisJaWYgKHBQTExSZWcpIHsKKwkJLyogU2VsZWN0IFhUQUwgYXMgYnlwYXNzIHNvdXJjZSAqLworCQlyZWczMl9tb2RpZnlfYW5kKHBQTExSZWcsIH5jaGlwY0h3X1JFR19QTExfQ0xPQ0tfU09VUkNFX0dQSU8pOworCQlyZWczMl9tb2RpZnlfb3IocFBMTFJlZywgY2hpcGNId19SRUdfUExMX0NMT0NLX0JZUEFTU19TRUxFQ1QpOworCQkvKiBGb3IgRERSIHNldHRpbmdzIHVzZSBvbmx5IHRoZSBQTEwgZGl2aWRlciBjbG9jayAqLworCQlpZiAocFBMTFJlZyA9PSAmcENoaXBjSHctPkREUkNsb2NrKSB7CisJCQkvKiBTZXQgTTFESVYgZm9yIFBMTDEsIHdoaWNoIGNvbnRyb2xzIHRoZSBERFIgY2xvY2sgKi8KKwkJCXJlZzMyX3dyaXRlKCZwQ2hpcGNIdy0+UExMRGl2aWRlciwgKHBDaGlwY0h3LT5QTExEaXZpZGVyICYgMHgwMEZGRkZGRikgfCAoKGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX01ESVYgKGRlc1Zjb0h6LCBmcmVxKSkgPDwgMjQpKTsKKwkJCS8qIENhbGN1bGF0ZSBleHBlY3RlZCBmcmVxdWVuY3kgKi8KKwkJCWZyZXEgPSBjaGlwY0h3X2RpdmlkZSh2Y29IeiwgKCgocENoaXBjSHctPlBMTERpdmlkZXIgJiAweEZGMDAwMDAwKSA+PiAyNCkgPyAoKHBDaGlwY0h3LT5QTExEaXZpZGVyICYgMHhGRjAwMDAwMCkgPj4gMjQpIDogMjU2KSk7CisJCX0gZWxzZSB7CisJCQkvKiBGcm9tIGNoaXAgcmV2aXNpb24gbnVtYmVyIEIwLCBMQ0QgY2xvY2sgaXMgaW50ZXJuYWxseSBkaXZpZGVkIGJ5IDIgKi8KKwkJCWlmICgocFBMTFJlZyA9PSAmcENoaXBjSHctPkxDRENsb2NrKSAmJiAoY2hpcGNId19nZXRDaGlwUmV2aXNpb25OdW1iZXIoKSAhPSBjaGlwY0h3X1JFVl9OVU1CRVJfQTApKSB7CisJCQkJZGVzVmNvSHogPj49IDE7CisJCQkJdmNvSHogPj49IDE7CisJCQl9CisJCQkvKiBTZXQgTURJViB0byBjaGFuZ2UgdGhlIGZyZXF1ZW5jeSAqLworCQkJcmVnMzJfbW9kaWZ5X2FuZChwUExMUmVnLCB+KGNoaXBjSHdfUkVHX1BMTF9DTE9DS19NRElWX01BU0spKTsKKwkJCXJlZzMyX21vZGlmeV9vcihwUExMUmVnLCBjaGlwY0h3X1JFR19QTExfRElWSURFUl9NRElWKGRlc1Zjb0h6LCBmcmVxKSk7CisJCQkvKiBDYWxjdWxhdGUgZXhwZWN0ZWQgZnJlcXVlbmN5ICovCisJCQlmcmVxID0gY2hpcGNId19kaXZpZGUodmNvSHosICgoKihwUExMUmVnKSAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19NRElWX01BU0spID8gKCoocFBMTFJlZykgJiBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfTURJVl9NQVNLKSA6IDI1NikpOworCQl9CisJCS8qIFdhaXQgZm9yIGZvciBhdGxlYXN0IDIwMG5zIGFzIHBlciB0aGUgcHJvdG9jb2wgdG8gY2hhbmdlIGZyZXF1ZW5jeSAqLworCQl1ZGVsYXkoMSk7CisJCS8qIERvIG5vdCBieXBhc3MgKi8KKwkJcmVnMzJfbW9kaWZ5X2FuZChwUExMUmVnLCB+Y2hpcGNId19SRUdfUExMX0NMT0NLX0JZUEFTU19TRUxFQ1QpOworCQkvKiBSZXR1cm4gdGhlIGNvbmZpZ3VyZWQgZnJlcXVlbmN5ICovCisJCXJldHVybiBmcmVxOworCX0gZWxzZSBpZiAocENsb2NrQ3RybCkgeworCQl1aW50MzJfdCBkaXZpZGVyID0gMDsKKworCQkvKiBEaXZpZGVyIGNsb2NrIHNob3VsZCBub3QgYmUgYnlwYXNzZWQgICovCisJCXJlZzMyX21vZGlmeV9hbmQocENsb2NrQ3RybCwKKwkJCQkgfmNoaXBjSHdfUkVHX0RJVl9DTE9DS19CWVBBU1NfU0VMRUNUKTsKKworCQkvKiBJZGVudGlmeSB0aGUgY2xvY2sgc291cmNlICovCisJCWlmIChwRGVwZW5kZW50Q2xvY2spIHsKKwkJCXN3aXRjaCAoZGVwZW5kZW50Q2xvY2tUeXBlKSB7CisJCQljYXNlIFBMTF9DTE9DSzoKKwkJCQlkaXZpZGVyID0gY2hpcGNId19kaXZpZGUoY2hpcGNId19kaXZpZGUgKGRlc1Zjb0h6LCAoKnBEZXBlbmRlbnRDbG9jayAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19NRElWX01BU0spKSwgZnJlcSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE5PTl9QTExfQ0xPQ0s6CisJCQkJeworCQkJCQl1aW50MzJfdCBzb3VyY2VDbG9jayA9IDA7CisKKwkJCQkJaWYgKHBEZXBlbmRlbnRDbG9jayA9PSAodWludDMyX3QgKikgJnBDaGlwY0h3LT5BQ0xLQ2xvY2spIHsKKwkJCQkJCXNvdXJjZUNsb2NrID0gY2hpcGNId19nZXRDbG9ja0ZyZXF1ZW5jeSAoY2hpcGNId19DTE9DS19CVVMpOworCQkJCQl9IGVsc2UgeworCQkJCQkJdWludDMyX3QgZGl2ID0gKnBEZXBlbmRlbnRDbG9jayAmIGNoaXBjSHdfUkVHX0RJVl9DTE9DS19ESVZfTUFTSzsKKwkJCQkJCXNvdXJjZUNsb2NrID0gY2hpcGNId19kaXZpZGUgKGNoaXBjSHdfWFRBTF9GUkVRX0h6LCAoKGRpdikgPyBkaXYgOiAyNTYpKTsKKwkJCQkJfQorCQkJCQlkaXZpZGVyID0gY2hpcGNId19kaXZpZGUoc291cmNlQ2xvY2ssIGZyZXEpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRpdmlkZXIgPSBjaGlwY0h3X2RpdmlkZShjaGlwY0h3X1hUQUxfRlJFUV9IeiwgZnJlcSk7CisJCX0KKworCQlpZiAoZGl2aWRlcikgeworCQkJUkVHX0xPQ0FMX0lSUV9TQVZFOworCQkJLyogU2V0IHRoZSBkaXZpZGVyIHRvIG9idGFpbiB0aGUgcmVxdWlyZWQgZnJlcXVlbmN5ICovCisJCQkqcENsb2NrQ3RybCA9ICgqcENsb2NrQ3RybCAmICh+Y2hpcGNId19SRUdfRElWX0NMT0NLX0RJVl9NQVNLKSkgfCAoKChkaXZpZGVyID4gMjU2KSA/IGNoaXBjSHdfUkVHX0RJVl9DTE9DS19ESVZfMjU2IDogZGl2aWRlcikgJiBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfRElWX01BU0spOworCQkJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworCQkJcmV0dXJuIGZyZXE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChjaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBWUE0gY2xvY2sgaW4gc3luYyB3aXRoIEJVUyBjbG9jayBmb3IgQ2hpcCBSZXYgI0EwCisqCisqICBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIHBoYXNlIGFkanVzdG1lbnQgYmV0d2VlbiBWUE0gYW5kIEJVUyBjbG9jaworKgorKiAgQHJldHVybiA+PSAwIDogT24gc3VjY2VzcyAoIyBvZiBhZGp1c3RtZW50IHJlcXVpcmVkKQorKiAgICAgICAgICAgIC0xIDogT24gZmFpbHVyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCB2cG1QaGFzZUFsaWduQTAodm9pZCkKK3sKKwl1aW50MzJfdCBwaGFzZUNvbnRyb2w7CisJdWludDMyX3QgcGhhc2VWYWx1ZTsKKwl1aW50MzJfdCBwcmV2UGhhc2VDb21wOworCWludCBpdGVyID0gMDsKKwlpbnQgYWRqdXN0Q291bnQgPSAwOworCWludCBjb3VudCA9IDA7CisKKwlmb3IgKGl0ZXIgPSAwOyAoaXRlciA8IE1BWF9QSEFTRV9BTElHTl9BVFRFTVBUUykgJiYgKGFkanVzdENvdW50IDwgTUFYX1BIQVNFX0FESlVTVF9DT1VOVCk7IGl0ZXIrKykgeworCQlwaGFzZUNvbnRyb2wgPSAocENoaXBjSHctPlZQTUNsb2NrICYgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfTUFTSykgPj4gY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfU0hJRlQ7CisJCXBoYXNlVmFsdWUgPSAwOworCQlwcmV2UGhhc2VDb21wID0gMDsKKworCQkvKiBTdGVwIDE6IExvb2sgZm9yIGZhbGxpbmcgUEhfQ09NUCB0cmFuc2l0aW9uICovCisKKwkJLyogUmVhZCB0aGUgY29udGVudHMgb2YgVlBNIENsb2NrIHJlc2dpc3RlciAqLworCQlwaGFzZVZhbHVlID0gcENoaXBjSHctPlZQTUNsb2NrOworCQlkbyB7CisJCQkvKiBTdG9yZSBwcmV2aW91cyB2YWx1ZSBvZiBwaGFzZSBjb21wYXJhdG9yICovCisJCQlwcmV2UGhhc2VDb21wID0gcGhhc2VWYWx1ZSAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT01QOworCQkJLyogQ2hhbmdlIHRoZSB2YWx1ZSBvZiBQSF9DVFJMLiAqLworCQkJcmVnMzJfd3JpdGUoJnBDaGlwY0h3LT5WUE1DbG9jaywgKHBDaGlwY0h3LT5WUE1DbG9jayAmICh+Y2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfTUFTSykpIHwgKHBoYXNlQ29udHJvbCA8PCBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09OVFJPTF9TSElGVCkpOworCQkJLyogV2FpdCBhdGxlYXN0IDIwIG5zICovCisJCQl1ZGVsYXkoMSk7CisJCQkvKiBUb2dnbGUgdGhlIExPQURfQ0ggYWZ0ZXIgcGhhc2UgY29udHJvbCBpcyB3cml0dGVuLiAqLworCQkJcENoaXBjSHctPlZQTUNsb2NrIF49IGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9VUERBVEVfRU5BQkxFOworCQkJLyogUmVhZCB0aGUgY29udGVudHMgb2YgIFZQTSBDbG9jayByZXNnaXN0ZXIuICovCisJCQlwaGFzZVZhbHVlID0gcENoaXBjSHctPlZQTUNsb2NrOworCisJCQlpZiAoKHBoYXNlVmFsdWUgJiBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09NUCkgPT0gMHgwKSB7CisJCQkJcGhhc2VDb250cm9sID0gKDB4M0YgJiAocGhhc2VDb250cm9sIC0gMSkpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBJbmNyZW1lbnQgdG8gdGhlIFBoYXNlIGNvdW50IHZhbHVlIGZvciBuZXh0IHdyaXRlLCBpZiBQaGFzZSBpcyBub3Qgc3RhYmxlLiAqLworCQkJCXBoYXNlQ29udHJvbCA9ICgweDNGICYgKHBoYXNlQ29udHJvbCArIDEpKTsKKwkJCX0KKwkJCS8qIENvdW50IG51bWJlciBvZiBhZGp1c3RtZW50IG1hZGUgKi8KKwkJCWFkanVzdENvdW50Kys7CisJCX0gd2hpbGUgKCgocHJldlBoYXNlQ29tcCA9PSAocGhhc2VWYWx1ZSAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT01QKSkgfHwJLyogTG9vayBmb3IgYSB0cmFuc2l0aW9uICovCisJCQkgICgocGhhc2VWYWx1ZSAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT01QKSAhPSAweDApKSAmJgkvKiBMb29rIGZvciBhIGZhbGxpbmcgZWRnZSAqLworCQkJIChhZGp1c3RDb3VudCA8IE1BWF9QSEFTRV9BREpVU1RfQ09VTlQpCS8qIERvIG5vdCBleGNlZWQgdGhlIGxpbWl0IHdoaWxlIHRyeWluZyAqLworCQkgICAgKTsKKworCQlpZiAoYWRqdXN0Q291bnQgPj0gTUFYX1BIQVNFX0FESlVTVF9DT1VOVCkgeworCQkJLyogRmFpbGVkIHRvIGFsaWduIFZQTSBwaGFzZSBhZnRlciBNQVhfUEhBU0VfQURKVVNUX0NPVU5UIHRyaWVzICovCisJCQlyZXR1cm4gLTE7CisJCX0KKworCQkvKiBTdGVwIDI6IEtlZXAgbW92aW5nIGZvcndhcmQgdG8gbWFrZSBzdXJlIGZhbGxpbmcgUEhfQ09NUCB0cmFuc2l0aW9uIHdhcyB2YWxpZCAqLworCisJCWZvciAoY291bnQgPSAwOyAoY291bnQgPCA1KSAmJiAoKHBoYXNlVmFsdWUgJiBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09NUCkgPT0gMCk7IGNvdW50KyspIHsKKwkJCXBoYXNlQ29udHJvbCA9ICgweDNGICYgKHBoYXNlQ29udHJvbCArIDEpKTsKKwkJCXJlZzMyX3dyaXRlKCZwQ2hpcGNIdy0+VlBNQ2xvY2ssIChwQ2hpcGNIdy0+VlBNQ2xvY2sgJiAofmNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT05UUk9MX01BU0spKSB8IChwaGFzZUNvbnRyb2wgPDwgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfU0hJRlQpKTsKKwkJCS8qIFdhaXQgYXRsZWFzdCAyMCBucyAqLworCQkJdWRlbGF5KDEpOworCQkJLyogVG9nZ2xlIHRoZSBMT0FEX0NIIGFmdGVyIHBoYXNlIGNvbnRyb2wgaXMgd3JpdHRlbi4gKi8KKwkJCXBDaGlwY0h3LT5WUE1DbG9jayBePSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfVVBEQVRFX0VOQUJMRTsKKwkJCXBoYXNlVmFsdWUgPSBwQ2hpcGNIdy0+VlBNQ2xvY2s7CisJCQkvKiBDb3VudCBudW1iZXIgb2YgYWRqdXN0bWVudCBtYWRlICovCisJCQlhZGp1c3RDb3VudCsrOworCQl9CisKKwkJaWYgKGFkanVzdENvdW50ID49IE1BWF9QSEFTRV9BREpVU1RfQ09VTlQpIHsKKwkJCS8qIEZhaWxlZCB0byBhbGlnbiBWUE0gcGhhc2UgYWZ0ZXIgTUFYX1BIQVNFX0FESlVTVF9DT1VOVCB0cmllcyAqLworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKGNvdW50ICE9IDUpIHsKKwkJCS8qIERldGVjdGVkIGZhbHNlIHRyYW5zaXRpb24gKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU3RlcCAzOiBLZWVwIG1vdmluZyBiYWNrd2FyZCB0byBtYWtlIHN1cmUgZmFsbGluZyBQSF9DT01QIHRyYW5zaXRpb24gd2FzIHN0YWJsZSAqLworCisJCWZvciAoY291bnQgPSAwOyAoY291bnQgPCAzKSAmJiAoKHBoYXNlVmFsdWUgJiBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09NUCkgPT0gMCk7IGNvdW50KyspIHsKKwkJCXBoYXNlQ29udHJvbCA9ICgweDNGICYgKHBoYXNlQ29udHJvbCAtIDEpKTsKKwkJCXJlZzMyX3dyaXRlKCZwQ2hpcGNIdy0+VlBNQ2xvY2ssIChwQ2hpcGNIdy0+VlBNQ2xvY2sgJiAofmNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT05UUk9MX01BU0spKSB8IChwaGFzZUNvbnRyb2wgPDwgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfU0hJRlQpKTsKKwkJCS8qIFdhaXQgYXRsZWFzdCAyMCBucyAqLworCQkJdWRlbGF5KDEpOworCQkJLyogVG9nZ2xlIHRoZSBMT0FEX0NIIGFmdGVyIHBoYXNlIGNvbnRyb2wgaXMgd3JpdHRlbi4gKi8KKwkJCXBDaGlwY0h3LT5WUE1DbG9jayBePSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfVVBEQVRFX0VOQUJMRTsKKwkJCXBoYXNlVmFsdWUgPSBwQ2hpcGNIdy0+VlBNQ2xvY2s7CisJCQkvKiBDb3VudCBudW1iZXIgb2YgYWRqdXN0bWVudCBtYWRlICovCisJCQlhZGp1c3RDb3VudCsrOworCQl9CisKKwkJaWYgKGFkanVzdENvdW50ID49IE1BWF9QSEFTRV9BREpVU1RfQ09VTlQpIHsKKwkJCS8qIEZhaWxlZCB0byBhbGlnbiBWUE0gcGhhc2UgYWZ0ZXIgTUFYX1BIQVNFX0FESlVTVF9DT1VOVCB0cmllcyAqLworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKGNvdW50ICE9IDMpIHsKKwkJCS8qIERldGVjdGVkIG5vaXN5IHRyYW5zaXRpb24gKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU3RlcCA0OiBLZWVwIG1vdmluZyBiYWNrd2FyZCBiZWZvcmUgdGhlIG9yaWdpbmFsIHRyYW5zaXRpb24gdG9vayBwbGFjZS4gKi8KKworCQlmb3IgKGNvdW50ID0gMDsgKGNvdW50IDwgNSk7IGNvdW50KyspIHsKKwkJCXBoYXNlQ29udHJvbCA9ICgweDNGICYgKHBoYXNlQ29udHJvbCAtIDEpKTsKKwkJCXJlZzMyX3dyaXRlKCZwQ2hpcGNIdy0+VlBNQ2xvY2ssIChwQ2hpcGNIdy0+VlBNQ2xvY2sgJiAofmNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT05UUk9MX01BU0spKSB8IChwaGFzZUNvbnRyb2wgPDwgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfU0hJRlQpKTsKKwkJCS8qIFdhaXQgYXRsZWFzdCAyMCBucyAqLworCQkJdWRlbGF5KDEpOworCQkJLyogVG9nZ2xlIHRoZSBMT0FEX0NIIGFmdGVyIHBoYXNlIGNvbnRyb2wgaXMgd3JpdHRlbi4gKi8KKwkJCXBDaGlwY0h3LT5WUE1DbG9jayBePSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfVVBEQVRFX0VOQUJMRTsKKwkJCXBoYXNlVmFsdWUgPSBwQ2hpcGNIdy0+VlBNQ2xvY2s7CisJCQkvKiBDb3VudCBudW1iZXIgb2YgYWRqdXN0bWVudCBtYWRlICovCisJCQlhZGp1c3RDb3VudCsrOworCQl9CisKKwkJaWYgKGFkanVzdENvdW50ID49IE1BWF9QSEFTRV9BREpVU1RfQ09VTlQpIHsKKwkJCS8qIEZhaWxlZCB0byBhbGlnbiBWUE0gcGhhc2UgYWZ0ZXIgTUFYX1BIQVNFX0FESlVTVF9DT1VOVCB0cmllcyAqLworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKChwaGFzZVZhbHVlICYgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTVApID09IDApIHsKKwkJCS8qIERldGVjdGVkIGZhbHNlIHRyYW5zaXRpb24gKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU3RlcCA1OiBSZSBkaXNjb3ZlciB0aGUgdmFsaWQgdHJhbnNpdGlvbiAqLworCisJCWRvIHsKKwkJCS8qIFN0b3JlIHByZXZpb3VzIHZhbHVlIG9mIHBoYXNlIGNvbXBhcmF0b3IgKi8KKwkJCXByZXZQaGFzZUNvbXAgPSBwaGFzZVZhbHVlOworCQkJLyogQ2hhbmdlIHRoZSB2YWx1ZSBvZiBQSF9DVFJMLiAqLworCQkJcmVnMzJfd3JpdGUoJnBDaGlwY0h3LT5WUE1DbG9jaywgKHBDaGlwY0h3LT5WUE1DbG9jayAmICh+Y2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfTUFTSykpIHwgKHBoYXNlQ29udHJvbCA8PCBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09OVFJPTF9TSElGVCkpOworCQkJLyogV2FpdCBhdGxlYXN0IDIwIG5zICovCisJCQl1ZGVsYXkoMSk7CisJCQkvKiBUb2dnbGUgdGhlIExPQURfQ0ggYWZ0ZXIgcGhhc2UgY29udHJvbCBpcyB3cml0dGVuLiAqLworCQkJcENoaXBjSHctPlZQTUNsb2NrIF49CisJCQkgICAgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX1VQREFURV9FTkFCTEU7CisJCQkvKiBSZWFkIHRoZSBjb250ZW50cyBvZiAgVlBNIENsb2NrIHJlc2dpc3Rlci4gKi8KKwkJCXBoYXNlVmFsdWUgPSBwQ2hpcGNIdy0+VlBNQ2xvY2s7CisKKwkJCWlmICgocGhhc2VWYWx1ZSAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT01QKSA9PSAweDApIHsKKwkJCQlwaGFzZUNvbnRyb2wgPSAoMHgzRiAmIChwaGFzZUNvbnRyb2wgLSAxKSk7CisJCQl9IGVsc2UgeworCQkJCS8qIEluY3JlbWVudCB0byB0aGUgUGhhc2UgY291bnQgdmFsdWUgZm9yIG5leHQgd3JpdGUsIGlmIFBoYXNlIGlzIG5vdCBzdGFibGUuICovCisJCQkJcGhhc2VDb250cm9sID0gKDB4M0YgJiAocGhhc2VDb250cm9sICsgMSkpOworCQkJfQorCisJCQkvKiBDb3VudCBudW1iZXIgb2YgYWRqdXN0bWVudCBtYWRlICovCisJCQlhZGp1c3RDb3VudCsrOworCQl9IHdoaWxlICgoKHByZXZQaGFzZUNvbXAgPT0gKHBoYXNlVmFsdWUgJiBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09NUCkpIHx8ICgocGhhc2VWYWx1ZSAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT01QKSAhPSAweDApKSAmJiAoYWRqdXN0Q291bnQgPCBNQVhfUEhBU0VfQURKVVNUX0NPVU5UKSk7CisKKwkJaWYgKGFkanVzdENvdW50ID49IE1BWF9QSEFTRV9BREpVU1RfQ09VTlQpIHsKKwkJCS8qIEZhaWxlZCB0byBhbGlnbiBWUE0gcGhhc2UgYWZ0ZXIgTUFYX1BIQVNFX0FESlVTVF9DT1VOVCB0cmllcyAgKi8KKwkJCXJldHVybiAtMTsKKwkJfSBlbHNlIHsKKwkJCS8qIFZhbGlkIHBoYXNlIG11c3QgaGF2ZSBkZXRlY3RlZCAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBGb3IgVlBNIFBoYXNlIHNob3VsZCBiZSBwZXJmZWN0bHkgYWxpZ25lZC4gKi8KKwlwaGFzZUNvbnRyb2wgPSAoKChwQ2hpcGNIdy0+VlBNQ2xvY2sgPj4gY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfU0hJRlQpIC0gMSkgJiAweDNGKTsKKwl7CisJCVJFR19MT0NBTF9JUlFfU0FWRTsKKworCQlwQ2hpcGNIdy0+VlBNQ2xvY2sgPSAocENoaXBjSHctPlZQTUNsb2NrICYgfmNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT05UUk9MX01BU0spIHwgKHBoYXNlQ29udHJvbCA8PCBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09OVFJPTF9TSElGVCk7CisJCS8qIExvYWQgbmV3IHBoYXNlIHZhbHVlICovCisJCXBDaGlwY0h3LT5WUE1DbG9jayBePSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfVVBEQVRFX0VOQUJMRTsKKworCQlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7CisJfQorCS8qIFJldHVybiB0aGUgc3RhdHVzICovCisJcmV0dXJuIChpbnQpYWRqdXN0Q291bnQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgVlBNIGNsb2NrIGluIHN5bmMgd2l0aCBCVVMgY2xvY2sKKyoKKyogIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgcGhhc2UgYWRqdXN0bWVudCBiZXR3ZWVuIFZQTSBhbmQgQlVTIGNsb2NrCisqCisqICBAcmV0dXJuID49IDAgOiBPbiBzdWNjZXNzICgjIG9mIGFkanVzdG1lbnQgcmVxdWlyZWQpCisqICAgICAgICAgICAgLTEgOiBPbiBmYWlsdXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgY2hpcGNId192cG1QaGFzZUFsaWduKHZvaWQpCit7CisKKwlpZiAoY2hpcGNId19nZXRDaGlwUmV2aXNpb25OdW1iZXIoKSA9PSBjaGlwY0h3X1JFVl9OVU1CRVJfQTApIHsKKwkJcmV0dXJuIHZwbVBoYXNlQWxpZ25BMCgpOworCX0gZWxzZSB7CisJCXVpbnQzMl90IHBoYXNlQ29udHJvbCA9IGNoaXBjSHdfZ2V0VnBtUGhhc2VDb250cm9sKCk7CisJCXVpbnQzMl90IHBoYXNlVmFsdWUgPSAwOworCQlpbnQgYWRqdXN0Q291bnQgPSAwOworCisJCS8qIERpc2FibGUgVlBNIGFjY2VzcyAqLworCQlwQ2hpcGNIdy0+U3BhcmUxICY9IH5jaGlwY0h3X1JFR19TUEFSRTFfVlBNX0JVU19BQ0NFU1NfRU5BQkxFOworCQkvKiBEaXNhYmxlIEhXIFZQTSBwaGFzZSBhbGlnbm1lbnQgICovCisJCWNoaXBjSHdfdnBtSHdQaGFzZUFsaWduRGlzYWJsZSgpOworCQkvKiBFbmFibGUgU1cgVlBNIHBoYXNlIGFsaWdubWVudCAgKi8KKwkJY2hpcGNId192cG1Td1BoYXNlQWxpZ25FbmFibGUoKTsKKwkJLyogQWRqdXN0IFZQTSBwaGFzZSAqLworCQl3aGlsZSAoYWRqdXN0Q291bnQgPCBNQVhfUEhBU0VfQURKVVNUX0NPVU5UKSB7CisJCQlwaGFzZVZhbHVlID0gY2hpcGNId19nZXRWcG1Id1BoYXNlQWxpZ25TdGF0dXMoKTsKKworCQkJLyogQWRqdXN0IHBoYXNlIGNvbnRyb2wgdmFsdWUgKi8KKwkJCWlmIChwaGFzZVZhbHVlID4gMHhGKSB7CisJCQkJLyogSW5jcmVtZW50IHBoYXNlIGNvbnRyb2wgdmFsdWUgKi8KKwkJCQlwaGFzZUNvbnRyb2wrKzsKKwkJCX0gZWxzZSBpZiAocGhhc2VWYWx1ZSA8IDB4RikgeworCQkJCS8qIERlY3JlbWVudCBwaGFzZSBjb250cm9sIHZhbHVlICovCisJCQkJcGhhc2VDb250cm9sLS07CisJCQl9IGVsc2UgeworCQkJCS8qIEVuYWJsZSBWUE0gYWNjZXNzICovCisJCQkJcENoaXBjSHctPlNwYXJlMSB8PSBjaGlwY0h3X1JFR19TUEFSRTFfVlBNX0JVU19BQ0NFU1NfRU5BQkxFOworCQkJCS8qIFJldHVybiBhZGp1c3QgY291bnQgKi8KKwkJCQlyZXR1cm4gYWRqdXN0Q291bnQ7CisJCQl9CisJCQkvKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIFBIX0NUUkwuICovCisJCQlyZWczMl93cml0ZSgmcENoaXBjSHctPlZQTUNsb2NrLCAocENoaXBjSHctPlZQTUNsb2NrICYgKH5jaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09OVFJPTF9NQVNLKSkgfCAocGhhc2VDb250cm9sIDw8IGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT05UUk9MX1NISUZUKSk7CisJCQkvKiBXYWl0IGF0bGVhc3QgMjAgbnMgKi8KKwkJCXVkZWxheSgxKTsKKwkJCS8qIFRvZ2dsZSB0aGUgTE9BRF9DSCBhZnRlciBwaGFzZSBjb250cm9sIGlzIHdyaXR0ZW4uICovCisJCQlwQ2hpcGNIdy0+VlBNQ2xvY2sgXj0gY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX1VQREFURV9FTkFCTEU7CisJCQkvKiBDb3VudCBhZGp1c3RtZW50ICovCisJCQlhZGp1c3RDb3VudCsrOworCQl9CisJfQorCisJLyogRGlzYWJsZSBWUE0gYWNjZXNzICovCisJcENoaXBjSHctPlNwYXJlMSAmPSB+Y2hpcGNId19SRUdfU1BBUkUxX1ZQTV9CVVNfQUNDRVNTX0VOQUJMRTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBMb2NhbCBEaXZpZGUgZnVuY3Rpb24KKyoKKyogIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgZGl2aWRlCisqCisqICBAcmV0dXJuIGRpdmlkZSB2YWx1ZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBjaGlwY0h3X2RpdmlkZShpbnQgbnVtLCBpbnQgZGVub20pCit7CisJaW50IHI7CisJaW50IHQgPSAxOworCisJLyogU2hpZnQgZGVub20gYW5kIHQgdXAgdG8gdGhlIGxhcmdlc3QgdmFsdWUgdG8gb3B0aW1pemUgYWxnb3JpdGhtICovCisJLyogdCBjb250YWlucyB0aGUgdW5pdHMgb2YgZWFjaCBkaXZpZGUgKi8KKwl3aGlsZSAoKGRlbm9tICYgMHg0MDAwMDAwMCkgPT0gMCkgewkvKiBmYWlscyBpZiBkZW5vbT0wICovCisJCWRlbm9tID0gZGVub20gPDwgMTsKKwkJdCA9IHQgPDwgMTsKKwl9CisKKwkvKiBJbnRpYWxpemUgdGhlIHJlc3VsdCAqLworCXIgPSAwOworCisJZG8geworCQkvKiBEZXRlcm1pbmUgaWYgdGhlcmUgZXhpc3RzIGEgcG9zaXRpdmUgcmVtYWluZGVyICovCisJCWlmICgobnVtIC0gZGVub20pID49IDApIHsKKwkJCS8qIEFjY3VtbGF0ZSB0IHRvIHRoZSByZXN1bHQgYW5kIGNhbGN1bGF0ZSBhIG5ldyByZW1haW5kZXIgKi8KKwkJCW51bSA9IG51bSAtIGRlbm9tOworCQkJciA9IHIgKyB0OworCQl9CisJCS8qIENvbnRpbnVlIHRvIHNoaWZ0IGRlbm9tIGFuZCBzaGlmdCB0IGRvd24gdG8gMCAqLworCQlkZW5vbSA9IGRlbm9tID4+IDE7CisJCXQgPSB0ID4+IDE7CisJfSB3aGlsZSAodCAhPSAwKTsKKworCXJldHVybiByOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9jaGlwY0h3X2luaXQuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvY2hpcGMvY2hpcGNId19pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY3ZGY3NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvY2hpcGMvY2hpcGNId19pbml0LmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAZmlsZSAgICBjaGlwY0h3X2luaXQuYworKgorKiAgQGJyaWVmICAgTG93IGxldmVsIENISVBDIFBMTCBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucworKgorKiAgQG5vdGUKKyoKKyogICBUaGVzZSByb3V0aW5lcyBwcm92aWRlIGJhc2ljIFBMTCBjb250cm9sbGluZyBmdW5jdGlvbmFsaXR5IG9ubHkuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlIDxjc3AvZXJybm8uaD4KKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8Y3NwL21vZHVsZS5oPgorCisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19kZWYuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9jaGlwY0h3X2lubGluZS5oPgorCisjaW5jbHVkZSA8Y3NwL3JlZy5oPgorI2luY2x1ZGUgPGNzcC9kZWxheS5oPgorLyogLS0tLSBQcml2YXRlIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgICAgQ2FsY3VsYXRpb24gZm9yIE5ESVZfaSB0byBvYnRhaW4gVkNPIGZyZXF1ZW5jeQorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlGcmVxX3ZjbyA9IEZyZXFfcmVmICogKFAyIC8gUDEpICogKFBMTF9ORElWX2kgKyBQTExfTkRJVl9mKQorCWZvciBGcmVxX3ZjbyA9IFZDT19GUkVRX01IegorCQlGcmVxX3JlZiA9IGNoaXBjSHdfWFRBTF9GUkVRX0h6CisJCVBMTF9QMSA9IFBMTF9QMiA9IDEKKwkJYW5kCisJCVBMTF9ORElWX2YgPSAwCisKKwlXZSBnZXQ6CisJCVBMTF9ORElWX2kgPSBGcmVxX3ZjbyAvIEZyZXFfcmVmID0gVkNPX0ZSRVFfTUh6IC8gY2hpcGNId19YVEFMX0ZSRVFfSHoKKworICAgIENhbGN1bGF0aW9uIGZvciBQTEwgTURJViB0byBvYnRhaW4gZnJlcXVlbmN5IEZyZXFfeCBmb3IgY2hhbm5lbCB4CisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJRnJlcV94ID0gY2hpcGNId19YVEFMX0ZSRVFfSHogKiBQTExfTkRJVl9pIC8gUExMX01ESVZfeCA9IFZDT19GUkVRX01IeiAvIFBMTF9NRElWX3gKKworCQlQTExfTURJVl94ID0gVkNPX0ZSRVFfTUh6IC8gRnJlcV94CisqLworCisvKiAtLS0tIFByaXZhdGUgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBQTEwyCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBQTEwyCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGNoaXBjSHdfcGxsMkVuYWJsZSh1aW50MzJfdCB2Y29GcmVxSHopCit7CisJdWludDMyX3QgcGxsUHJlRGl2aWRlcjIgPSAwOworCisJeworCQlSRUdfTE9DQUxfSVJRX1NBVkU7CisJCXBDaGlwY0h3LT5QTExDb25maWcyID0KKwkJICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfRF9SRVNFVCB8CisJCSAgICBjaGlwY0h3X1JFR19QTExfQ09ORklHX0FfUkVTRVQ7CisKKwkJcGxsUHJlRGl2aWRlcjIgPSBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QT1dFUl9ET1dOIHwKKwkJICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTU9ERV9JTlRFR0VSIHwKKwkJICAgIChjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX2kodmNvRnJlcUh6KSA8PAorCQkgICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfU0hJRlQpIHwKKwkJICAgIChjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMSA8PAorCQkgICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AxX1NISUZUKSB8CisJCSAgICAoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDIgPDwKKwkJICAgICBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMl9TSElGVCk7CisKKwkJLyogRW5hYmxlIENISVBDIHJlZ2lzdGVycyB0byBjb250cm9sIHRoZSBQTEwgKi8KKwkJcENoaXBjSHctPlBMTFN0YXR1cyB8PSBjaGlwY0h3X1JFR19QTExfU1RBVFVTX0NPTlRST0xfRU5BQkxFOworCisJCS8qIFNldCBwcmUgZGl2aWRlciB0byBnZXQgZGVzaXJlZCBWQ08gZnJlcXVlbmN5ICovCisJCXBDaGlwY0h3LT5QTExQcmVEaXZpZGVyMiA9IHBsbFByZURpdmlkZXIyOworCQkvKiBTZXQgTkRJViBGcmFjICovCisJCXBDaGlwY0h3LT5QTExEaXZpZGVyMiA9IGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX05ESVZfZjsKKworCQkvKiBUaGlzIGhhcyB0byBiZSByZW1vdmVkIG9uY2UgdGhlIGRlZmF1bHQgdmFsdWVzIGFyZSBmaXhlZCBmb3IgUExMMi4gKi8KKwkJcENoaXBjSHctPlBMTENvbnRyb2wxMiA9IDB4MzgwMDA3MDA7CisJCXBDaGlwY0h3LT5QTExDb250cm9sMjIgPSAweDAwMDAwMDE1OworCisJCS8qIFJlc2V0IFBMTDIgKi8KKwkJaWYgKHZjb0ZyZXFIeiA+IGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVkNPX1NQTElUX0ZSRVEpIHsKKwkJCXBDaGlwY0h3LT5QTExDb25maWcyID0gY2hpcGNId19SRUdfUExMX0NPTkZJR19EX1JFU0VUIHwKKwkJCSAgICBjaGlwY0h3X1JFR19QTExfQ09ORklHX0FfUkVTRVQgfAorCQkJICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVkNPXzE2MDFfMzIwMCB8CisJCQkgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19QT1dFUl9ET1dOOworCQl9IGVsc2UgeworCQkJcENoaXBjSHctPlBMTENvbmZpZzIgPSBjaGlwY0h3X1JFR19QTExfQ09ORklHX0RfUkVTRVQgfAorCQkJICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfQV9SRVNFVCB8CisJCQkgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19WQ09fODAwXzE2MDAgfAorCQkJICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfUE9XRVJfRE9XTjsKKwkJfQorCQlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7CisJfQorCisJLyogSW5zZXJ0IGNlcnRhaW4gYW1vdW50IG9mIGRlbGF5IGJlZm9yZSBkZWFzc2VydGluZyBBUkVTRVQuICovCisJdWRlbGF5KDEpOworCisJeworCQlSRUdfTE9DQUxfSVJRX1NBVkU7CisJCS8qIFJlbW92ZSBhbmFsb2cgcmVzZXQgYW5kIFBvd2VyIG9uIHRoZSBQTEwgKi8KKwkJcENoaXBjSHctPlBMTENvbmZpZzIgJj0KKwkJICAgIH4oY2hpcGNId19SRUdfUExMX0NPTkZJR19BX1JFU0VUIHwKKwkJICAgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19QT1dFUl9ET1dOKTsKKworCQlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7CisKKwl9CisKKwkvKiBXYWl0IHVudGlsIFBMTCBpcyBsb2NrZWQgKi8KKwl3aGlsZSAoIShwQ2hpcGNIdy0+UExMU3RhdHVzMiAmIGNoaXBjSHdfUkVHX1BMTF9TVEFUVVNfTE9DS0VEKSkKKwkJOworCisJeworCQlSRUdfTE9DQUxfSVJRX1NBVkU7CisJCS8qIFJlbW92ZSBkaWdpdGFsIHJlc2V0ICovCisJCXBDaGlwY0h3LT5QTExDb25maWcyICY9IH5jaGlwY0h3X1JFR19QTExfQ09ORklHX0RfUkVTRVQ7CisKKwkJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworCX0KK30KKworRVhQT1JUX1NZTUJPTChjaGlwY0h3X3BsbDJFbmFibGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICBJbml0aWFsaXplcyB0aGUgUExMMQorKgorKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgUExMMQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjaGlwY0h3X3BsbDFFbmFibGUodWludDMyX3QgdmNvRnJlcUh6LCBjaGlwY0h3X1NQUkVBRF9TUEVDVFJVTV9lIHNzU3VwcG9ydCkKK3sKKwl1aW50MzJfdCBwbGxQcmVEaXZpZGVyID0gMDsKKworCXsKKwkJUkVHX0xPQ0FMX0lSUV9TQVZFOworCisJCXBDaGlwY0h3LT5QTExDb25maWcgPQorCQkgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19EX1JFU0VUIHwKKwkJICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfQV9SRVNFVDsKKwkJLyogU2V0dGluZyBWQ08gZnJlcXVlbmN5ICovCisJCWlmIChzc1N1cHBvcnQgPT0gY2hpcGNId19TUFJFQURfU1BFQ1RSVU1fQUxMT1cpIHsKKwkJCXBsbFByZURpdmlkZXIgPQorCQkJICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTU9ERV9NQVNIXzFfOCB8CisJCQkgICAgKChjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX2kodmNvRnJlcUh6KSAtCisJCQkgICAgICAxKSA8PCBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX1NISUZUKSB8CisJCQkgICAgKGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AxIDw8CisJCQkgICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AxX1NISUZUKSB8CisJCQkgICAgKGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyIDw8CisJCQkgICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyX1NISUZUKTsKKwkJfSBlbHNlIHsKKwkJCXBsbFByZURpdmlkZXIgPSBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QT1dFUl9ET1dOIHwKKwkJCSAgICBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX01PREVfSU5URUdFUiB8CisJCQkgICAgKGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfaSh2Y29GcmVxSHopIDw8CisJCQkgICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfU0hJRlQpIHwKKwkJCSAgICAoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDEgPDwKKwkJCSAgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDFfU0hJRlQpIHwKKwkJCSAgICAoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDIgPDwKKwkJCSAgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDJfU0hJRlQpOworCQl9CisKKwkJLyogRW5hYmxlIENISVBDIHJlZ2lzdGVycyB0byBjb250cm9sIHRoZSBQTEwgKi8KKwkJcENoaXBjSHctPlBMTFN0YXR1cyB8PSBjaGlwY0h3X1JFR19QTExfU1RBVFVTX0NPTlRST0xfRU5BQkxFOworCisJCS8qIFNldCBwcmUgZGl2aWRlciB0byBnZXQgZGVzaXJlZCBWQ08gZnJlcXVlbmN5ICovCisJCXBDaGlwY0h3LT5QTExQcmVEaXZpZGVyID0gcGxsUHJlRGl2aWRlcjsKKwkJLyogU2V0IE5ESVYgRnJhYyAqLworCQlpZiAoc3NTdXBwb3J0ID09IGNoaXBjSHdfU1BSRUFEX1NQRUNUUlVNX0FMTE9XKSB7CisJCQlwQ2hpcGNIdy0+UExMRGl2aWRlciA9IGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX00xRElWIHwKKwkJCSAgICBjaGlwY0h3X1JFR19QTExfRElWSURFUl9ORElWX2ZfU1M7CisJCX0gZWxzZSB7CisJCQlwQ2hpcGNIdy0+UExMRGl2aWRlciA9IGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX00xRElWIHwKKwkJCSAgICBjaGlwY0h3X1JFR19QTExfRElWSURFUl9ORElWX2Y7CisJCX0KKworCQkvKiBSZXNldCBQTEwxICovCisJCWlmICh2Y29GcmVxSHogPiBjaGlwY0h3X1JFR19QTExfQ09ORklHX1ZDT19TUExJVF9GUkVRKSB7CisJCQlwQ2hpcGNIdy0+UExMQ29uZmlnID0gY2hpcGNId19SRUdfUExMX0NPTkZJR19EX1JFU0VUIHwKKwkJCSAgICBjaGlwY0h3X1JFR19QTExfQ09ORklHX0FfUkVTRVQgfAorCQkJICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVkNPXzE2MDFfMzIwMCB8CisJCQkgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19QT1dFUl9ET1dOOworCQl9IGVsc2UgeworCQkJcENoaXBjSHctPlBMTENvbmZpZyA9IGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfRF9SRVNFVCB8CisJCQkgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19BX1JFU0VUIHwKKwkJCSAgICBjaGlwY0h3X1JFR19QTExfQ09ORklHX1ZDT184MDBfMTYwMCB8CisJCQkgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19QT1dFUl9ET1dOOworCQl9CisKKwkJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworCisJCS8qIEluc2VydCBjZXJ0YWluIGFtb3VudCBvZiBkZWxheSBiZWZvcmUgZGVhc3NlcnRpbmcgQVJFU0VULiAqLworCQl1ZGVsYXkoMSk7CisKKwkJeworCQkJUkVHX0xPQ0FMX0lSUV9TQVZFOworCQkJLyogUmVtb3ZlIGFuYWxvZyByZXNldCBhbmQgUG93ZXIgb24gdGhlIFBMTCAqLworCQkJcENoaXBjSHctPlBMTENvbmZpZyAmPQorCQkJICAgIH4oY2hpcGNId19SRUdfUExMX0NPTkZJR19BX1JFU0VUIHwKKwkJCSAgICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfUE9XRVJfRE9XTik7CisJCQlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7CisJCX0KKworCQkvKiBXYWl0IHVudGlsIFBMTCBpcyBsb2NrZWQgKi8KKwkJd2hpbGUgKCEocENoaXBjSHctPlBMTFN0YXR1cyAmIGNoaXBjSHdfUkVHX1BMTF9TVEFUVVNfTE9DS0VEKQorCQkgICAgICAgfHwgIShwQ2hpcGNIdy0+CisJCQkgICAgUExMU3RhdHVzMiAmIGNoaXBjSHdfUkVHX1BMTF9TVEFUVVNfTE9DS0VEKSkKKwkJCTsKKworCQkvKiBSZW1vdmUgZGlnaXRhbCByZXNldCAqLworCQl7CisJCQlSRUdfTE9DQUxfSVJRX1NBVkU7CisJCQlwQ2hpcGNIdy0+UExMQ29uZmlnICY9IH5jaGlwY0h3X1JFR19QTExfQ09ORklHX0RfUkVTRVQ7CisJCQlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7CisJCX0KKwl9Cit9CisKK0VYUE9SVF9TWU1CT0woY2hpcGNId19wbGwxRW5hYmxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIGNoaXBjIG1vZHVsZQorKgorKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgUExMcyBhbmQgY29yZSBzeXN0ZW0gY2xvY2tzCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgY2hpcGNId19Jbml0KGNoaXBjSHdfSU5JVF9QQVJBTV90ICppbml0UGFyYW0JLyogIFsgSU4gXSBNaXNjIGNoaXAgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVyICovCisgICAgKSB7CisjaWYgIShkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKFNUQU5EQUxPTkUpKQorCWRlbGF5X2luaXQoKTsKKyNlbmRpZgorCisJLyogRG8gbm90IHByb2dyYW0gUExMLCB3aGVuIHdhcm0gcmVzZXQgKi8KKwlpZiAoIShjaGlwY0h3X2dldFN0aWNreUJpdHMoKSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9DSElQX1dBUk1fUkVTRVQpKSB7CisJCWNoaXBjSHdfcGxsMUVuYWJsZShpbml0UGFyYW0tPnBsbFZjb0ZyZXFIeiwKKwkJCQkgICBpbml0UGFyYW0tPnNzU3VwcG9ydCk7CisJCWNoaXBjSHdfcGxsMkVuYWJsZShpbml0UGFyYW0tPnBsbDJWY29GcmVxSHopOworCX0gZWxzZSB7CisJCS8qIENsZWFyIHN0aWNreSBiaXRzICovCisJCWNoaXBjSHdfY2xlYXJTdGlja3lCaXRzKGNoaXBjSHdfUkVHX1NUSUNLWV9DSElQX1dBUk1fUkVTRVQpOworCX0KKwkvKiBDbGVhciBzdGlja3kgYml0cyAqLworCWNoaXBjSHdfY2xlYXJTdGlja3lCaXRzKGNoaXBjSHdfUkVHX1NUSUNLWV9DSElQX1NPRlRfUkVTRVQpOworCisJLyogQmVmb3JlIGNvbmZpZ3VyaW5nIHRoZSBBUk0gY2xvY2ssIGF0bGVhc3Qgd2UgbmVlZCB0byBtYWtlIHN1cmUgQlVTIGNsb2NrIG1haW50YWlucyB0aGUgcHJvcGVyIHJhdGlvIHdpdGggQVJNIGNsb2NrICovCisJcENoaXBjSHctPkFDTEtDbG9jayA9CisJICAgIChwQ2hpcGNIdy0+CisJICAgICBBQ0xLQ2xvY2sgJiB+Y2hpcGNId19SRUdfQUNMS0Nsb2NrX0NMS19ESVZfTUFTSykgfCAoaW5pdFBhcmFtLT4KKwkJCQkJCQkJIGFybUJ1c1JhdGlvICYKKwkJCQkJCQkJIGNoaXBjSHdfUkVHX0FDTEtDbG9ja19DTEtfRElWX01BU0spOworCisJLyogU2V0IHZhcmlvdXMgY29yZSBjb21wb25lbnQgZnJlcXVlbmNpZXMuIFRoZSBvcmRlciBpbiB3aGljaCB0aGlzIGlzIGRvbmUgaXMgaW1wb3J0YW50IGZvciBzb21lLiAqLworCS8qIFRoZSBSVEJVUyAoRERSIFBIWSkgaXMgZGVyaXZlZCBmcm9tIHRoZSBCVVMsIGFuZCB0aGUgQlVTIGZyb20gdGhlIEFSTSwgYW5kIFZQTSBuZWVkcyB0byBrbm93IEJVUyAqLworCS8qIGZyZXF1ZW5jeSB0byBmaW5kIGl0cyByYXRpbyB3aXRoIHRoZSBCVVMuICBIZW5jZSB3ZSBtdXN0IHNldCB0aGUgQVJNIGZpcnN0LCBmb2xsb3dlZCBieSB0aGUgQlVTLCAgKi8KKwkvKiB0aGVuIFZQTSBhbmQgUlRCVVMuICovCisKKwljaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfQVJNLAorCQkJCSAgaW5pdFBhcmFtLT5idXNDbG9ja0ZyZXFIeiAqCisJCQkJICBpbml0UGFyYW0tPmFybUJ1c1JhdGlvKTsKKwljaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfQlVTLCBpbml0UGFyYW0tPmJ1c0Nsb2NrRnJlcUh6KTsKKwljaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfVlBNLAorCQkJCSAgaW5pdFBhcmFtLT5idXNDbG9ja0ZyZXFIeiAqCisJCQkJICBpbml0UGFyYW0tPnZwbUJ1c1JhdGlvKTsKKwljaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfRERSLAorCQkJCSAgaW5pdFBhcmFtLT5idXNDbG9ja0ZyZXFIeiAqCisJCQkJICBpbml0UGFyYW0tPmRkckJ1c1JhdGlvKTsKKwljaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfUlRCVVMsCisJCQkJICBpbml0UGFyYW0tPmJ1c0Nsb2NrRnJlcUh6IC8gMik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2NoaXBjL2NoaXBjSHdfcmVzZXQuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvY2hpcGMvY2hpcGNId19yZXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NzFkODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2NoaXBjL2NoaXBjSHdfcmVzZXQuYwpAQCAtMCwwICsxLDEyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19kZWYuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9jaGlwY0h3X2lubGluZS5oPgorI2luY2x1ZGUgPGNzcC9pbnRjSHcuaD4KKyNpbmNsdWRlIDxjc3AvY2FjaGUuaD4KKworLyogLS0tLSBQcml2YXRlIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFByaXZhdGUgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3ZvaWQgY2hpcGNId19yZXNldF9ydW5fZnJvbV9hcmFtKHZvaWQpOworCit0eXBlZGVmIHZvaWQgKCpSVU5GVU5DKSAodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICB3YXJtUmVzZXQKKyoKKyogIEBub3RlIHdhcm1SZXNldCBjb25maWd1cmVzIHRoZSBjbG9ja3Mgd2hpY2ggYXJlIG5vdCByZXNldCBiYWNrIHRvIHRoZSBzdGF0ZQorKiAgIHJlcXVpcmVkIHRvIGV4ZWN1dGUgb24gcmVzZXQuICBUbyBkbyBzbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIGNvZGUgaW50byBpbnRlcm5hbAorKiAgIG1lbW9yeSB0byBjaGFuZ2UgdGhlIEFSTSBjbG9jayB3aGlsZSB3ZSBhcmUgbm90IGV4ZWN1dGluZyBmcm9tIEREUi4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgY2hpcGNId19yZXNldCh1aW50MzJfdCBtYXNrKQoreworCWludCBpID0gMDsKKwlSVU5GVU5DIHJ1bkZ1bmMgPSAoUlVORlVOQykgKHVuc2lnbmVkIGxvbmcpTU1fQUREUl9JT19BUkFNOworCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCWludGNId19pcnFfZGlzYWJsZShJTlRDSFdfSU5UQzAsIDB4ZmZmZmZmZmYpOworCWludGNId19pcnFfZGlzYWJsZShJTlRDSFdfSU5UQzEsIDB4ZmZmZmZmZmYpOworCWludGNId19pcnFfZGlzYWJsZShJTlRDSFdfU0lOVEMsIDB4ZmZmZmZmZmYpOworCisJeworCQlSRUdfTE9DQUxfSVJRX1NBVkU7CisJCWlmIChtYXNrICYgY2hpcGNId19SRUdfU09GVF9SRVNFVF9DSElQX1NPRlQpIHsKKwkJCWNoaXBjSHdfc29mdFJlc2V0KGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfQ0hJUF9TT0ZUKTsKKwkJfQorCQkvKiBCeXBhc3MgdGhlIFBMTCBjbG9ja3MgYmVmb3JlIHJlYm9vdCAqLworCQlwQ2hpcGNIdy0+VUFSVENsb2NrIHw9IGNoaXBjSHdfUkVHX1BMTF9DTE9DS19CWVBBU1NfU0VMRUNUOworCQlwQ2hpcGNIdy0+U1BJQ2xvY2sgfD0gY2hpcGNId19SRUdfUExMX0NMT0NLX0JZUEFTU19TRUxFQ1Q7CisKKwkJLyogQ29weSB0aGUgY2hpcGNId193YXJtUmVzZXRfcnVuX2Zyb21fYXJhbSBmdW5jdGlvbiBpbnRvIEFSQU0gKi8KKwkJZG8geworCQkJKCh1aW50MzJfdCAqKSBNTV9JT19CQVNFX0FSQU0pW2ldID0KKwkJCSAgICAoKHVpbnQzMl90ICopICZjaGlwY0h3X3Jlc2V0X3J1bl9mcm9tX2FyYW0pW2ldOworCQkJaSsrOworCQl9IHdoaWxlICgoKHVpbnQzMl90ICopIE1NX0lPX0JBU0VfQVJBTSlbaSAtIDFdICE9IDB4ZTFhMGYwMGYpOwkvKiAweGUxYTBmMDBmID09IGFzbSAoIm1vdiByMTUsIHIxNSIpOyAqLworCisJCUNTUF9DQUNIRV9GTFVTSF9BTEw7CisKKwkJLyogcnVuIHRoZSBmdW5jdGlvbiBmcm9tIEFSQU0gKi8KKwkJcnVuRnVuYygpOworCisJCS8qIENvZGUgd2lsbCBuZXZlciBnZXQgaGVyZSwgYnV0IGluY2x1ZGUgaXQgdG8gYmFsYW5jZSBSRUdfTE9DQUxfSVJRX1NBVkUgYWJvdmUgKi8KKwkJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworCX0KK30KKworLyogVGhpcyBmdW5jdGlvbiBtdXN0IHJ1biBmcm9tIGludGVybmFsIG1lbW9yeSAqLwordm9pZCBjaGlwY0h3X3Jlc2V0X3J1bl9mcm9tX2FyYW0odm9pZCkKK3sKKy8qIE1ha2Ugc3VyZSwgcGlwZWxpbmUgaXMgZmlsbGVkIHdpdGggaW5zdHJ1Y3Rpb25zIGNvbWluZyBmcm9tIEFSQU0gKi8KK19fYXNtICgiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKFNUQU5EQUxPTkUpCisJCSIgTVJDICAgICAgcDE1LCMweDAscjAsYzEsYzAsIzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBCSUMgICAgICByMCxyMCwjMHhkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIE1DUiAgICAgIHAxNSwjMHgwLHIwLGMxLGMwLCMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisjZW5kaWYKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisvKiBCeXBhc3MgdGhlIEFSTSBjbG9jayBhbmQgc3dpdGNoIHRvIFhUQUwgY2xvY2sgKi8KKwkJIiBNT1YgICAgICByMiwjMHg4MDAwMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIExEUiAgICAgIHIzLFtyMiwjOF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgT1JSICAgICAgcjMscjMsIzB4MjAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBTVFIgICAgICByMyxbcjIsIzhdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorLyogSXNzdWUgcmVzZXQgKi8KKwkJIiBNT1YgICAgICByMywjMHgyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIFNUUiAgICAgIHIzLFtyMiwjMHg4MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisvKiBFbmQgaGVyZSAqLworCQkiIE1PViAgICAgIHBjLHBjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiKTsKKy8qIDB4ZTFhMGYwMGYgPT0gIGFzbSAoIm1vdiByMTUsIHIxNSIpOyAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9jaGlwY0h3X3N0ci5jIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9jaGlwY0h3X3N0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YWQ5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2NoaXBjL2NoaXBjSHdfc3RyLmMKQEAgLTAsMCArMSw2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIGNoaXBjSHdfc3RyLmMKKyoKKyogIEBicmllZiAgIENvbnRhaW5zIHN0cmluZ3Mgd2hpY2ggYXJlIHVzZWZ1bCB0byBsaW51eCBhbmQgY3NwCisqCisqICBAbm90ZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaD4KKworLyogLS0tLSBQcml2YXRlIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpnTXV4U3RyW10gPSB7CisJIkdQSU8iLAkJCS8qIDAgKi8KKwkiS2V5UGFkIiwJCS8qIDEgKi8KKwkiSTJDLUhvc3QiLAkJLyogMiAqLworCSJTUEkiLAkJCS8qIDMgKi8KKwkiVWFydCIsCQkJLyogNCAqLworCSJMRUQtTXR4LVAiLAkJLyogNSAqLworCSJMRUQtTXR4LVMiLAkJLyogNiAqLworCSJTRElPLTAiLAkJLyogNyAqLworCSJTRElPLTEiLAkJLyogOCAqLworCSJQQ00iLAkJCS8qIDkgKi8KKwkiSTJTIiwJCQkvKiAxMCAqLworCSJFVE0iLAkJCS8qIDExICovCisJIkRlYnVnIiwJCS8qIDEyICovCisJIk1pc2MiLAkJCS8qIDEzICovCisJIjB4RSIsCQkJLyogMTQgKi8KKwkiMHhGIiwJCQkvKiAxNSAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFJldHJpZXZlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbXV4IHNldHRpbmcgZm9yIGEgcGluLgorKgorKiAgQHJldHVybiAgUG9pbnRlciB0byBhIGNoYXJhY3RlciBzdHJpbmcuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2NvbnN0IGNoYXIgKmNoaXBjSHdfZ2V0R3Bpb1BpbkZ1bmN0aW9uU3RyKGludCBwaW4pCit7CisJaWYgKChwaW4gPCAwKSB8fCAocGluID49IGNoaXBjSHdfR1BJT19DT1VOVCkpIHsKKwkJcmV0dXJuICIiOworCX0KKworCXJldHVybiBnTXV4U3RyW2NoaXBjSHdfZ2V0R3Bpb1BpbkZ1bmN0aW9uKHBpbildOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9kbWFjL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9kbWFjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMTEwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkgKz0gZG1hY0h3Lm8gZG1hY0h3X2V4dHJhLm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3LmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I5YmFjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvZG1hYy9kbWFjSHcuYwpAQCAtMCwwICsxLDkxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIGRtYWNIdy5jCisqCisqICBAYnJpZWYgICBMb3cgbGV2ZWwgRE1BIGNvbnRyb2xsZXIgZHJpdmVyIHJvdXRpbmVzCisqCisqICBAbm90ZQorKgorKiAgIFRoZXNlIHJvdXRpbmVzIHByb3ZpZGUgYmFzaWMgRE1BIGZ1bmN0aW9uYWxpdHkgb25seS4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8Y3NwL3N0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaW5jbHVkZSA8Y3NwL2RtYWNIdy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2RtYWNId19yZWcuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9kbWFjSHdfcHJpdi5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2NoaXBjSHdfaW5saW5lLmg+CisKKy8qIC0tLS0gRXh0ZXJuYWwgRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEFsbG9jYXRlIERNQSBjb250cm9sIGJsb2NrcyAqLworZG1hY0h3X0NCTEtfdCBkbWFjSHdfZ0NibGtbZG1hY0h3X01BWF9DSEFOTkVMX0NPVU5UXTsKKwordWludDMyX3QgZG1hQ2hhbm5lbENvdW50XzAgPSBkbWFjSHdfTUFYX0NIQU5ORUxfQ09VTlQgLyAyOwordWludDMyX3QgZG1hQ2hhbm5lbENvdW50XzEgPSBkbWFjSHdfTUFYX0NIQU5ORUxfQ09VTlQgLyAyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IG1heGltdW0gRklGTyBmb3IgYSBETUEgY2hhbm5lbAorKgorKiAgQHJldHVybiAgTWF4aW11bSBhbGxvd2FibGUgRklGTyBzaXplCisqCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdWludDMyX3QgR2V0Rmlmb1NpemUoZG1hY0h3X0hBTkRMRV90IGhhbmRsZQkvKiAgIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKyAgICApIHsKKwl1aW50MzJfdCB2YWwgPSAwOworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisJZG1hY0h3X01JU0NfdCAqcE1pc2NSZWcgPQorCSAgICAoZG1hY0h3X01JU0NfdCAqKSBkbWFjSHdfUkVHX01JU0NfQkFTRShwQ2Jsay0+bW9kdWxlKTsKKworCXN3aXRjaCAocENibGstPmNoYW5uZWwpIHsKKwljYXNlIDA6CisJCXZhbCA9IChwTWlzY1JlZy0+Q29tcFBhcm0yLmxvICYgMHg3MDAwMDAwMCkgPj4gMjg7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdmFsID0gKHBNaXNjUmVnLT5Db21wUGFybTMuaGkgJiAweDcwMDAwMDAwKSA+PiAyODsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl2YWwgPSAocE1pc2NSZWctPkNvbXBQYXJtMy5sbyAmIDB4NzAwMDAwMDApID4+IDI4OworCQlicmVhazsKKwljYXNlIDM6CisJCXZhbCA9IChwTWlzY1JlZy0+Q29tcFBhcm00LmhpICYgMHg3MDAwMDAwMCkgPj4gMjg7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdmFsID0gKHBNaXNjUmVnLT5Db21wUGFybTQubG8gJiAweDcwMDAwMDAwKSA+PiAyODsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQl2YWwgPSAocE1pc2NSZWctPkNvbXBQYXJtNS5oaSAmIDB4NzAwMDAwMDApID4+IDI4OworCQlicmVhazsKKwljYXNlIDY6CisJCXZhbCA9IChwTWlzY1JlZy0+Q29tcFBhcm01LmxvICYgMHg3MDAwMDAwMCkgPj4gMjg7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJdmFsID0gKHBNaXNjUmVnLT5Db21wUGFybTYuaGkgJiAweDcwMDAwMDAwKSA+PiAyODsKKwkJYnJlYWs7CisJfQorCisJaWYgKHZhbCA8PSAweDQpIHsKKwkJcmV0dXJuIDggPDwgdmFsOworCX0gZWxzZSB7CisJCWRtYWNId19BU1NFUlQoMCk7CisJfQorCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUHJvZ3JhbSBjaGFubmVsIHJlZ2lzdGVyIHRvIGluaXRpYXRlIHRyYW5zZmVyCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqCisqICBAbm90ZQorKiAgICAgLSBEZXNjcmlwdG9yIGJ1ZmZlciBNVVNUIEFMV0FZUyBiZSBmbHVzaGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyogICAgIC0gVGhpcyBmdW5jdGlvbiBzaG91bGQgYWxzbyBiZSBjYWxsZWQgZnJvbSBJU1IgdG8gcHJvZ3JhbSB0aGUgY2hhbm5lbCB3aXRoCisqICAgICAgIHBlbmRpbmcgZGVzY3JpcHRvcnMKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG1hY0h3X2luaXRpYXRlVHJhbnNmZXIoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICovCisJCQkgICAgIGRtYWNId19DT05GSUdfdCAqcENvbmZpZywJLyogICBbIElOIF0gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworCQkJICAgICB2b2lkICpwRGVzY3JpcHRvcgkvKiAgIFsgSU4gXSBEZXNjcmlwdG9yIGJ1ZmZlciAqLworICAgICkgeworCWRtYWNId19ERVNDX1JJTkdfdCAqcFJpbmc7CisJZG1hY0h3X0RFU0NfdCAqcFByb2c7CisJZG1hY0h3X0NCTEtfdCAqcENibGs7CisKKwlwQ2JsayA9IGRtYWNId19IQU5ETEVfVE9fQ0JMSyhoYW5kbGUpOworCXBSaW5nID0gZG1hY0h3X0dFVF9ERVNDX1JJTkcocERlc2NyaXB0b3IpOworCisJaWYgKENIQU5ORUxfQlVTWShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCkpIHsKKwkJLyogTm90IHNhZmUgeWV0IHRvIHByb2dyYW0gdGhlIGNoYW5uZWwgKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChwQ2Jsay0+dmFyRGF0YVN0YXJ0ZWQpIHsKKwkJaWYgKHBDYmxrLT5kZXNjVXBkYXRlZCkgeworCQkJcENibGstPmRlc2NVcGRhdGVkID0gMDsKKwkJCXBQcm9nID0KKwkJCSAgICAoZG1hY0h3X0RFU0NfdCAqKSAoKHVpbnQzMl90KQorCQkJCQkgICAgICAgZG1hY0h3X1JFR19MTFAocENibGstPm1vZHVsZSwKKwkJCQkJCQkgICAgICBwQ2Jsay0+Y2hhbm5lbCkgKworCQkJCQkgICAgICAgcFJpbmctPnZpcnQyUGh5T2Zmc2V0KTsKKworCQkJLyogTG9hZCBkZXNjcmlwdG9yIGlmIG5vdCBsb2FkZWQgKi8KKwkJCWlmICghKHBQcm9nLT5jdGwuaGkgJiBkbWFjSHdfUkVHX0NUTF9ET05FKSkgeworCQkJCWRtYWNId19TRVRfU0FSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsLAorCQkJCQkgICAgICAgcFByb2ctPnNhcik7CisJCQkJZG1hY0h3X1NFVF9EQVIocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwsCisJCQkJCSAgICAgICBwUHJvZy0+ZGFyKTsKKwkJCQlkbWFjSHdfUkVHX0NUTF9MTyhwQ2Jsay0+bW9kdWxlLAorCQkJCQkJICBwQ2Jsay0+Y2hhbm5lbCkgPQorCQkJCSAgICBwUHJvZy0+Y3RsLmxvOworCQkJCWRtYWNId19SRUdfQ1RMX0hJKHBDYmxrLT5tb2R1bGUsCisJCQkJCQkgIHBDYmxrLT5jaGFubmVsKSA9CisJCQkJICAgIHBQcm9nLT5jdGwuaGk7CisJCQl9IGVsc2UgaWYgKHBQcm9nID09IChkbWFjSHdfREVTQ190ICopIHBSaW5nLT5wRW5kLT5sbHApIHsKKwkJCQkvKiBSZXR1cm4gYXMgZW5kIGRlc2NyaXB0b3IgaXMgcHJvY2Vzc2VkICovCisJCQkJcmV0dXJuOworCQkJfSBlbHNlIHsKKwkJCQlkbWFjSHdfQVNTRVJUKDApOworCQkJfQorCQl9IGVsc2UgeworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHBDb25maWctPnRyYW5zZmVyTW9kZSA9PSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9QRVJJT0RJQykgeworCQkJLyogRG8gbm90IG1ha2UgYSBzaW5nbGUgY2hhaW4sIHJhdGhlciBwcm9jZXNzIG9uZSBkZXNjcmlwdG9yIGF0IGEgdGltZSAqLworCQkJcFByb2cgPSBwUmluZy0+cEhlYWQ7CisJCQkvKiBQb2ludCB0byB0aGUgbmV4dCBkZXNjcmlwdG9yIGZvciBuZXh0IGl0ZXJhdGlvbiAqLworCQkJZG1hY0h3X05FWFRfREVTQyhwUmluZywgcEhlYWQpOworCQl9IGVsc2UgeworCQkJLyogUmV0dXJuIGlmIG5vIG1vcmUgcGVuZGluZyBkZXNjcmlwdG9yICovCisJCQlpZiAocFJpbmctPnBFbmQgPT0gTlVMTCkgeworCQkJCXJldHVybjsKKwkJCX0KKworCQkJcFByb2cgPSBwUmluZy0+cFByb2c7CisJCQlpZiAocENvbmZpZy0+dHJhbnNmZXJNb2RlID09CisJCQkgICAgZG1hY0h3X1RSQU5TRkVSX01PREVfQ09OVElOVU9VUykgeworCQkJCS8qIE1ha2Ugc3VyZSBhIGNvbXBsZXRlIHJpbmcgY2FuIGJlIGZvcm1lZCAqLworCQkJCWRtYWNId19BU1NFUlQoKGRtYWNId19ERVNDX3QgKikgcFJpbmctPnBFbmQtPgorCQkJCQkgICAgICBsbHAgPT0gcFJpbmctPnBQcm9nKTsKKwkJCQkvKiBNYWtlIHN1cmUgcFByb2cgcG9pbnRpbmcgdG8gdGhlIHBIZWFkICovCisJCQkJZG1hY0h3X0FTU0VSVCgoZG1hY0h3X0RFU0NfdCAqKSBwUmluZy0+cFByb2cgPT0KKwkJCQkJICAgICAgcFJpbmctPnBIZWFkKTsKKwkJCQkvKiBNYWtlIGEgY29tcGxldGUgcmluZyAqLworCQkJCWRvIHsKKwkJCQkJcFJpbmctPnBQcm9nLT5jdGwubG8gfD0KKwkJCQkJICAgIChkbWFjSHdfUkVHX0NUTF9MTFBfRFNUX0VOIHwKKwkJCQkJICAgICBkbWFjSHdfUkVHX0NUTF9MTFBfU1JDX0VOKTsKKwkJCQkJcFJpbmctPnBQcm9nID0KKwkJCQkJICAgIChkbWFjSHdfREVTQ190ICopIHBSaW5nLT5wUHJvZy0+bGxwOworCQkJCX0gd2hpbGUgKHBSaW5nLT5wUHJvZyAhPSBwUmluZy0+cEhlYWQpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBNYWtlIGEgc2luZ2xlIGxvbmcgY2hhaW4gKi8KKwkJCQl3aGlsZSAocFJpbmctPnBQcm9nICE9IHBSaW5nLT5wRW5kKSB7CisJCQkJCXBSaW5nLT5wUHJvZy0+Y3RsLmxvIHw9CisJCQkJCSAgICAoZG1hY0h3X1JFR19DVExfTExQX0RTVF9FTiB8CisJCQkJCSAgICAgZG1hY0h3X1JFR19DVExfTExQX1NSQ19FTik7CisJCQkJCXBSaW5nLT5wUHJvZyA9CisJCQkJCSAgICAoZG1hY0h3X0RFU0NfdCAqKSBwUmluZy0+cFByb2ctPmxscDsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBQcm9ncmFtIHRoZSBjaGFubmVsIHJlZ2lzdGVycyAqLworCQlkbWFjSHdfU0VUX1NBUihwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCwgcFByb2ctPnNhcik7CisJCWRtYWNId19TRVRfREFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsLCBwUHJvZy0+ZGFyKTsKKwkJZG1hY0h3X1NFVF9MTFAocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwsCisJCQkgICAgICAgKHVpbnQzMl90KSBwUHJvZyAtIHBSaW5nLT52aXJ0MlBoeU9mZnNldCk7CisJCWRtYWNId19SRUdfQ1RMX0xPKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKSA9CisJCSAgICBwUHJvZy0+Y3RsLmxvOworCQlkbWFjSHdfUkVHX0NUTF9ISShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCkgPQorCQkgICAgcFByb2ctPmN0bC5oaTsKKwkJaWYgKHBSaW5nLT5wRW5kKSB7CisJCQkvKiBSZW1lbWJlciB0aGUgZGVzY3JpcHRvciB0byB1c2UgbmV4dCAqLworCQkJcFJpbmctPnBQcm9nID0gKGRtYWNId19ERVNDX3QgKikgcFJpbmctPnBFbmQtPmxscDsKKwkJfQorCQkvKiBJbmRpY2F0ZSBubyBtb3JlIHBlbmRpbmcgZGVzY3JpcHRvciAgKi8KKwkJcFJpbmctPnBFbmQgPSAoZG1hY0h3X0RFU0NfdCAqKSBOVUxMOworCX0KKwkvKiBTdGFydCBETUEgb3BlcmF0aW9uICovCisJZG1hY0h3X0RNQV9TVEFSVChwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBJbml0aWFsaXplcyBETUEKKyoKKyogIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgRE1BIENTUCBkcml2ZXIKKyoKKyogIEBub3RlCisqICAgICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgYW55IERNQSBjaGFubmVsCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYWNId19pbml0RG1hKHZvaWQpCit7CisKKwl1aW50MzJfdCBpID0gMDsKKworCWRtYUNoYW5uZWxDb3VudF8wID0gZG1hY0h3X0dFVF9OVU1fQ0hBTk5FTCgwKTsKKwlkbWFDaGFubmVsQ291bnRfMSA9IGRtYWNId19HRVRfTlVNX0NIQU5ORUwoMSk7CisKKwkvKiBFbmFibGUgYWNjZXNzIHRvIHRoZSBETUEgYmxvY2sgKi8KKwljaGlwY0h3X2J1c0ludGVyZmFjZUNsb2NrRW5hYmxlKGNoaXBjSHdfUkVHX0JVU19DTE9DS19ETUFDMCk7CisJY2hpcGNId19idXNJbnRlcmZhY2VDbG9ja0VuYWJsZShjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfRE1BQzEpOworCisJaWYgKChkbWFDaGFubmVsQ291bnRfMCArIGRtYUNoYW5uZWxDb3VudF8xKSA+IGRtYWNId19NQVhfQ0hBTk5FTF9DT1VOVCkgeworCQlkbWFjSHdfQVNTRVJUKDApOworCX0KKworCW1lbXNldCgodm9pZCAqKWRtYWNId19nQ2JsaywgMCwKKwkgICAgICAgc2l6ZW9mKGRtYWNId19DQkxLX3QpICogKGRtYUNoYW5uZWxDb3VudF8wICsgZG1hQ2hhbm5lbENvdW50XzEpKTsKKwlmb3IgKGkgPSAwOyBpIDwgZG1hQ2hhbm5lbENvdW50XzA7IGkrKykgeworCQlkbWFjSHdfZ0NibGtbaV0ubW9kdWxlID0gMDsKKwkJZG1hY0h3X2dDYmxrW2ldLmNoYW5uZWwgPSBpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgZG1hQ2hhbm5lbENvdW50XzE7IGkrKykgeworCQlkbWFjSHdfZ0NibGtbaSArIGRtYUNoYW5uZWxDb3VudF8wXS5tb2R1bGUgPSAxOworCQlkbWFjSHdfZ0NibGtbaSArIGRtYUNoYW5uZWxDb3VudF8wXS5jaGFubmVsID0gaTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBFeGl0IGZ1bmN0aW9uIGZvciAgRE1BCisqCisqICBUaGlzIGZ1bmN0aW9uIGlzb2xhdGVzIERNQSBmcm9tIHRoZSBzeXN0ZW0KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG1hY0h3X2V4aXREbWEodm9pZCkKK3sKKwkvKiBEaXNhYmxlIGFjY2VzcyB0byB0aGUgRE1BIGJsb2NrICovCisJY2hpcGNId19idXNJbnRlcmZhY2VDbG9ja0Rpc2FibGUoY2hpcGNId19SRUdfQlVTX0NMT0NLX0RNQUMwKTsKKwljaGlwY0h3X2J1c0ludGVyZmFjZUNsb2NrRGlzYWJsZShjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfRE1BQzEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0cyBhIGhhbmRsZSB0byBhIERNQSBjaGFubmVsCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBoYW5kbGUsIHJlcHJlc2VudGluZyBhIGNvbnRyb2wgYmxvY2sgb2YgYSBwYXJ0aWN1bGFyIERNQSBjaGFubmVsCisqCisqICBAcmV0dXJuICAtMSAgICAgICAtIE9uIEZhaWx1cmUKKyogICAgICAgICAgICBoYW5kbGUgIC0gT24gU3VjY2VzcywgcmVwcmVzZW50aW5nIGEgY2hhbm5lbCBjb250cm9sIGJsb2NrCisqCisqICBAbm90ZQorKiAgICAgTm9uZSAgQ2hhbm5lbCBJRCBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcgImRtYWNId19NQUtFX0NIQU5ORUxfSUQiIG1hY3JvCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitkbWFjSHdfSEFORExFX3QgZG1hY0h3X2dldENoYW5uZWxIYW5kbGUoZG1hY0h3X0lEX3QgY2hhbm5lbElkCS8qIFsgSU4gXSBETUEgQ2hhbm5lbCBJZCAqLworICAgICkgeworCWludCBpZHg7CisKKwlzd2l0Y2ggKChjaGFubmVsSWQgPj4gOCkpIHsKKwljYXNlIDA6CisJCWRtYWNId19BU1NFUlQoKGNoYW5uZWxJZCAmIDB4ZmYpIDwgZG1hQ2hhbm5lbENvdW50XzApOworCQlpZHggPSAoY2hhbm5lbElkICYgMHhmZik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZG1hY0h3X0FTU0VSVCgoY2hhbm5lbElkICYgMHhmZikgPCBkbWFDaGFubmVsQ291bnRfMSk7CisJCWlkeCA9IGRtYUNoYW5uZWxDb3VudF8wICsgKGNoYW5uZWxJZCAmIDB4ZmYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkbWFjSHdfQVNTRVJUKDApOworCQlyZXR1cm4gKGRtYWNId19IQU5ETEVfdCkgLTE7CisJfQorCisJcmV0dXJuIGRtYWNId19DQkxLX1RPX0hBTkRMRSgmZG1hY0h3X2dDYmxrW2lkeF0pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgSW5pdGlhbGl6ZXMgYSBETUEgY2hhbm5lbCBmb3IgdXNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFuZCByZXNldHMgYSBETUEgY2hhbm5lbCBmb3IgdXNlCisqCisqICBAcmV0dXJuICAtMSAgICAgLSBPbiBGYWlsdXJlCisqICAgICAgICAgICAgMCAgICAgLSBPbiBTdWNjZXNzCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGRtYWNId19pbml0Q2hhbm5lbChkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qICAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisJaW50IG1vZHVsZSA9IHBDYmxrLT5tb2R1bGU7CisJaW50IGNoYW5uZWwgPSBwQ2Jsay0+Y2hhbm5lbDsKKworCS8qIFJlaW5pdGlhbGl6ZSB0aGUgY29udHJvbCBibG9jayAqLworCW1lbXNldCgodm9pZCAqKXBDYmxrLCAwLCBzaXplb2YoZG1hY0h3X0NCTEtfdCkpOworCXBDYmxrLT5tb2R1bGUgPSBtb2R1bGU7CisJcENibGstPmNoYW5uZWwgPSBjaGFubmVsOworCisJLyogRW5hYmxlIERNQSBjb250cm9sbGVyICovCisJZG1hY0h3X0RNQV9FTkFCTEUocENibGstPm1vZHVsZSk7CisJLyogUmVzZXQgRE1BIGNoYW5uZWwgKi8KKwlkbWFjSHdfUkVTRVRfQ09OVFJPTF9MTyhwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJZG1hY0h3X1JFU0VUX0NPTlRST0xfSEkocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCWRtYWNId19SRVNFVF9DT05GSUdfTE8ocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCWRtYWNId19SRVNFVF9DT05GSUdfSEkocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCisJLyogQ2xlYXIgYWxsIHJhdyBpbnRlcnJ1cHQgc3RhdHVzICovCisJZG1hY0h3X1RSQU5fSU5UX0NMRUFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwlkbWFjSHdfQkxPQ0tfSU5UX0NMRUFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwlkbWFjSHdfRVJST1JfSU5UX0NMRUFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKworCS8qIE1hc2sgZXZlbnQgc3BlY2lmaWMgaW50ZXJydXB0cyAqLworCWRtYWNId19UUkFOX0lOVF9ESVNBQkxFKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwlkbWFjSHdfQkxPQ0tfSU5UX0RJU0FCTEUocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCWRtYWNId19TVFJBTl9JTlRfRElTQUJMRShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJZG1hY0h3X0RUUkFOX0lOVF9ESVNBQkxFKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwlkbWFjSHdfRVJST1JfSU5UX0RJU0FCTEUocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIEZpbmRzIGFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQgdG8gZm9ybSBhIGRlc2NyaXB0b3IgcmluZworKgorKgorKiAgQHJldHVybiAgIE51bWJlciBvZiBieXRlcyByZXF1aXJlZCB0byBmb3JtIGEgZGVzY3JpcHRvciByaW5nCisqCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1aW50MzJfdCBkbWFjSHdfZGVzY3JpcHRvckxlbih1aW50MzJfdCBkZXNjQ250CS8qIFsgSU4gXSBOdW1iZXIgb2YgZGVzY3JpcHRvciBpbiB0aGUgcmluZyAqLworICAgICkgeworCS8qIE5lZWQgZXh0cmEgNCBieXRlIHRvIGVuc3VyZSAzMiBiaXQgYWxpZ25tZW50ICAqLworCXJldHVybiAoZGVzY0NudCAqIHNpemVvZihkbWFjSHdfREVTQ190KSkgKyBzaXplb2YoZG1hY0h3X0RFU0NfUklOR190KSArCisJCXNpemVvZih1aW50MzJfdCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBJbml0aWFsaXplcyBkZXNjcmlwdG9yIHJpbmcKKyoKKyogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplcyB0aGUgZGVzY3JpcHRvciByaW5nIG9mIGEgRE1BIGNoYW5uZWwKKyoKKyoKKyogIEByZXR1cm4gICAtMSAtIE9uIGZhaWx1cmUKKyogICAgICAgICAgICAgMCAtIE9uIHN1Y2Nlc3MKKyogIEBub3RlCisqICAgICAtICJsZW4iIHBhcmFtZXRlciBzaG91bGQgYmUgb2J0YWluZWQgZnJvbSAiZG1hY0h3X2Rlc2NyaXB0b3JMZW4iCisqICAgICAtIERlc2NyaXB0b3IgYnVmZmVyIE1VU1QgYmUgMzIgYml0IGFsaWduZWQgYW5kIHVuY2FjaGVkIGFzIGl0IGlzCisqICAgICAgIGFjY2Vzc2VkIGJ5IEFSTSBhbmQgRE1BCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X2luaXREZXNjcmlwdG9yKHZvaWQgKnBEZXNjcmlwdG9yVmlydCwJLyogIFsgSU4gXSBWaXJ0dWFsIGFkZHJlc3Mgb2YgdW5jYWhjZWQgYnVmZmVyIGFsbG9jYXRlZCB0byBmb3JtIGRlc2NyaXB0b3IgcmluZyAqLworCQkJICB1aW50MzJfdCBkZXNjcmlwdG9yUGh5QWRkciwJLyogIFsgSU4gXSBQaHlzaWNhbCBhZGRyZXNzIG9mIHBEZXNjcmlwdG9yVmlydCAoZGVzY3JpcHRvciBidWZmZXIpICovCisJCQkgIHVpbnQzMl90IGxlbiwJLyogIFsgSU4gXSBTaXplIG9mIHRoZSBwQnVmICovCisJCQkgIHVpbnQzMl90IG51bQkvKiAgWyBJTiBdIE51bWJlciBvZiBkZXNjcmlwdG9yIGluIHRoZSByaW5nICovCisgICAgKSB7CisJdWludDMyX3QgaTsKKwlkbWFjSHdfREVTQ19SSU5HX3QgKnBSaW5nOworCWRtYWNId19ERVNDX3QgKnBEZXNjOworCisJLyogQ2hlY2sgdGhlIGFsaWdubWVudCBvZiB0aGUgZGVzY3JpcHRvciAqLworCWlmICgodWludDMyX3QpIHBEZXNjcmlwdG9yVmlydCAmIDB4MDAwMDAwMDMpIHsKKwkJZG1hY0h3X0FTU0VSVCgwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIENoZWNrIGlmIGVub3VnaCBzcGFjZSBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIGRlc2NyaXB0b3IgcmluZyAqLworCWlmIChsZW4gPCBkbWFjSHdfZGVzY3JpcHRvckxlbihudW0pKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlwUmluZyA9IGRtYWNId19HRVRfREVTQ19SSU5HKHBEZXNjcmlwdG9yVmlydCk7CisJcFJpbmctPnBIZWFkID0KKwkgICAgKGRtYWNId19ERVNDX3QgKikgKCh1aW50MzJfdCkgcFJpbmcgKyBzaXplb2YoZG1hY0h3X0RFU0NfUklOR190KSk7CisJcFJpbmctPnBGcmVlID0gcFJpbmctPnBUYWlsID0gcFJpbmctPnBFbmQgPSBwUmluZy0+cEhlYWQ7CisJcFJpbmctPnBQcm9nID0gZG1hY0h3X0RFU0NfSU5JVDsKKwkvKiBJbml0aWFsaXplIGxpbmsgaXRlbSBjaGFpbiwgc3RhcnRpbmcgZnJvbSB0aGUgaGVhZCAqLworCXBEZXNjID0gcFJpbmctPnBIZWFkOworCS8qIEZpbmQgdGhlIG9mZnNldCBiZXR3ZWVuIHZpcnR1YWwgdG8gcGh5c2ljYWwgYWRkcmVzcyAqLworCXBSaW5nLT52aXJ0MlBoeU9mZnNldCA9ICh1aW50MzJfdCkgcERlc2NyaXB0b3JWaXJ0IC0gZGVzY3JpcHRvclBoeUFkZHI7CisKKwkvKiBGb3JtIHRoZSBkZXNjcmlwdG9yIHJpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtIC0gMTsgaSsrKSB7CisJCS8qIENsZWFyIGxpbmsgbGlzdCBpdGVtICovCisJCW1lbXNldCgodm9pZCAqKXBEZXNjLCAwLCBzaXplb2YoZG1hY0h3X0RFU0NfdCkpOworCQkvKiBQb2ludCB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzICovCisJCXBEZXNjLT5sbHBQaHkgPSAodWludDMyX3QpIChwRGVzYyArIDEpIC0gcFJpbmctPnZpcnQyUGh5T2Zmc2V0OworCQkvKiBQb2ludCB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSB2aXJ0dWFsIGFkZHJlc3MgKi8KKwkJcERlc2MtPmxscCA9ICh1aW50MzJfdCkgKHBEZXNjICsgMSk7CisJCS8qIE1hcmsgZGVzY3JpcHRvciBpcyByZWFkeSB0byB1c2UgKi8KKwkJcERlc2MtPmN0bC5oaSA9IGRtYWNId19ERVNDX0ZSRUU7CisJCS8qIExvb2sgaW50byBuZXh0IGxpbmsgbGlzdCBpdGVtICovCisJCXBEZXNjKys7CisJfQorCisJLyogQ2xlYXIgbGFzdCBsaW5rIGxpc3QgaXRlbSAqLworCW1lbXNldCgodm9pZCAqKXBEZXNjLCAwLCBzaXplb2YoZG1hY0h3X0RFU0NfdCkpOworCS8qIExhc3QgaXRlbSBwb2ludGluZyB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUKKwkgICBwaHlzaWNhbCBhZGRyZXNzIHRvIGNvbXBsZXRlIHRoZSByaW5nICovCisJcERlc2MtPmxscFBoeSA9ICh1aW50MzJfdCkgcFJpbmctPnBIZWFkIC0gcFJpbmctPnZpcnQyUGh5T2Zmc2V0OworCS8qIExhc3QgaXRlbSBwb2ludGluZyB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUKKwkgICB2aXJ0dWFsIGFkZHJlc3MgdG8gY29tcGxldGUgdGhlIHJpbmcKKwkgKi8KKwlwRGVzYy0+bGxwID0gKHVpbnQzMl90KSBwUmluZy0+cEhlYWQ7CisJLyogTWFyayBkZXNjcmlwdG9yIGlzIHJlYWR5IHRvIHVzZSAqLworCXBEZXNjLT5jdGwuaGkgPSBkbWFjSHdfREVTQ19GUkVFOworCS8qIFNldCB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHRoZSByaW5nICovCisJcFJpbmctPm51bSA9IG51bTsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENvbmZpZ3VyZSBETUEgY2hhbm5lbAorKgorKiAgQHJldHVybiAgMCAgOiBPbiBzdWNjZXNzCisqICAgICAgICAgICAtMSA6IE9uIGZhaWx1cmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkbWFjSHdfY29uZmlnQ2hhbm5lbChkbWFjSHdfSEFORExFX3QgaGFuZGxlLAkvKiAgIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKwkJCSBkbWFjSHdfQ09ORklHX3QgKnBDb25maWcJLyogICBbIElOIF0gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisJdWludDMyX3QgY2ZnSGlnaCA9IDA7CisJaW50IHNyY1RyU2l6ZTsKKwlpbnQgZHN0VHJTaXplOworCisJcENibGstPnZhckRhdGFTdGFydGVkID0gMDsKKwlwQ2Jsay0+dXNlckRhdGEgPSBOVUxMOworCisJLyogQ29uZmlndXJlCisJICAgLSBCdXJzdCB0cmFuc2FjdGlvbiB3aGVuIGVub3VnaCBkYXRhIGluIGF2YWlsYWJsZSBpbiBGSUZPCisJICAgLSBBSEIgQWNjZXNzIHByb3RlY3Rpb24gMQorCSAgIC0gU291cmNlIGFuZCBkZXN0aW5hdGlvbiBwZXJpcGhlcmFsIHBvcnRzCisJICovCisJY2ZnSGlnaCA9CisJICAgIGRtYWNId19SRUdfQ0ZHX0hJX0ZJRk9fRU5PVUdIIHwgZG1hY0h3X1JFR19DRkdfSElfQUhCX0hQUk9UXzEgfAorCSAgICBkbWFjSHdfU1JDX1BFUklfSU5URihwQ29uZmlnLT4KKwkJCQkgc3JjUGVyaXBoZXJhbFBvcnQpIHwKKwkgICAgZG1hY0h3X0RTVF9QRVJJX0lOVEYocENvbmZpZy0+ZHN0UGVyaXBoZXJhbFBvcnQpOworCS8qIFNldCBwcmlvcml0eSAqLworCWRtYWNId19TRVRfQ0hBTk5FTF9QUklPUklUWShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCwKKwkJCQkgICAgcENvbmZpZy0+Y2hhbm5lbFByaW9yaXR5KTsKKworCWlmIChwQ29uZmlnLT5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgIT0gMCkgeworCQkvKiBEZXN0aW5hdGlvbiBzdGF0dXMgdXBkYXRlIGVuYWJsZSAqLworCQljZmdIaWdoIHw9IGRtYWNId19SRUdfQ0ZHX0hJX1VQREFURV9EU1RfU1RBVDsKKwkJLyogQ29uZmlndXJlIHN0YXR1cyByZWdpc3RlcnMgKi8KKwkJZG1hY0h3X1NFVF9EU1RBVEFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsLAorCQkJCSAgIHBDb25maWctPmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyk7CisJfQorCisJaWYgKHBDb25maWctPnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyAhPSAwKSB7CisJCS8qIFNvdXJjZSBzdGF0dXMgdXBkYXRlIGVuYWJsZSAqLworCQljZmdIaWdoIHw9IGRtYWNId19SRUdfQ0ZHX0hJX1VQREFURV9TUkNfU1RBVDsKKwkJLyogU291cmNlIHN0YXR1cyB1cGRhdGUgZW5hYmxlICovCisJCWRtYWNId19TRVRfU1NUQVRBUihwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCwKKwkJCQkgICBwQ29uZmlnLT5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MpOworCX0KKwkvKiBDb25maWd1cmUgdGhlIGNvbmZpZyBoaWdoIHJlZ2lzdGVyICovCisJZG1hY0h3X0dFVF9DT05GSUdfSEkocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpID0gY2ZnSGlnaDsKKworCS8qIENsZWFyIGFsbCByYXcgaW50ZXJydXB0IHN0YXR1cyAqLworCWRtYWNId19UUkFOX0lOVF9DTEVBUihwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJZG1hY0h3X0JMT0NLX0lOVF9DTEVBUihwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJZG1hY0h3X0VSUk9SX0lOVF9DTEVBUihwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisKKwkvKiBDb25maWd1cmUgYmxvY2sgaW50ZXJydXB0ICovCisJaWYgKHBDb25maWctPmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPT0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUpIHsKKwkJZG1hY0h3X0JMT0NLX0lOVF9FTkFCTEUocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCX0gZWxzZSB7CisJCWRtYWNId19CTE9DS19JTlRfRElTQUJMRShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJfQorCS8qIENvbmZpZ3VyZSBjb21wbGV0ZSB0cmFuc2ZlciBpbnRlcnJ1cHQgKi8KKwlpZiAocENvbmZpZy0+Y29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9PSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSkgeworCQlkbWFjSHdfVFJBTl9JTlRfRU5BQkxFKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwl9IGVsc2UgeworCQlkbWFjSHdfVFJBTl9JTlRfRElTQUJMRShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJfQorCS8qIENvbmZpZ3VyZSBlcnJvciBpbnRlcnJ1cHQgKi8KKwlpZiAocENvbmZpZy0+ZXJyb3JJbnRlcnJ1cHQgPT0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUpIHsKKwkJZG1hY0h3X0VSUk9SX0lOVF9FTkFCTEUocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCX0gZWxzZSB7CisJCWRtYWNId19FUlJPUl9JTlRfRElTQUJMRShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJfQorCS8qIENvbmZpZ3VyZSBnYXRoZXIgcmVnaXN0ZXIgKi8KKwlpZiAocENvbmZpZy0+c3JjR2F0aGVyV2lkdGgpIHsKKwkJc3JjVHJTaXplID0KKwkJICAgIGRtYWNId19HZXRUcldpZHRoSW5CeXRlcyhwQ29uZmlnLT5zcmNNYXhUcmFuc2FjdGlvbldpZHRoKTsKKwkJaWYgKCEKKwkJICAgICgocENvbmZpZy0+c3JjR2F0aGVyV2lkdGggJSBzcmNUclNpemUpCisJCSAgICAgJiYgKHBDb25maWctPnNyY0dhdGhlckp1bXAgJSBzcmNUclNpemUpKSkgeworCQkJZG1hY0h3X1JFR19TR1JfTE8ocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpID0KKwkJCSAgICAoKHBDb25maWctPnNyY0dhdGhlcldpZHRoIC8KKwkJCSAgICAgIHNyY1RyU2l6ZSkgPDwgMjApIHwgKHBDb25maWctPnNyY0dhdGhlckp1bXAgLworCQkJCQkJICAgc3JjVHJTaXplKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwkvKiBDb25maWd1cmUgc2NhdHRlciByZWdpc3RlciAqLworCWlmIChwQ29uZmlnLT5kc3RTY2F0dGVyV2lkdGgpIHsKKwkJZHN0VHJTaXplID0KKwkJICAgIGRtYWNId19HZXRUcldpZHRoSW5CeXRlcyhwQ29uZmlnLT5kc3RNYXhUcmFuc2FjdGlvbldpZHRoKTsKKwkJaWYgKCEKKwkJICAgICgocENvbmZpZy0+ZHN0U2NhdHRlcldpZHRoICUgZHN0VHJTaXplKQorCQkgICAgICYmIChwQ29uZmlnLT5kc3RTY2F0dGVySnVtcCAlIGRzdFRyU2l6ZSkpKSB7CisJCQlkbWFjSHdfUkVHX0RTUl9MTyhwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCkgPQorCQkJICAgICgocENvbmZpZy0+ZHN0U2NhdHRlcldpZHRoIC8KKwkJCSAgICAgIGRzdFRyU2l6ZSkgPDwgMjApIHwgKHBDb25maWctPmRzdFNjYXR0ZXJKdW1wIC8KKwkJCQkJCSAgIGRzdFRyU2l6ZSk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBJbmRpY2F0ZXMgd2hldGhlciBETUEgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3Mgb3IgY29tcGxldGVkCisqCisqICBAcmV0dXJuICAgRE1BIHRyYW5zZmVyIHN0YXR1cworKiAgICAgICAgICBkbWFjSHdfVFJBTlNGRVJfU1RBVFVTX0JVU1k6ICAgICAgICAgRE1BIFRyYW5zZmVyIG9uZ29pbmcKKyogICAgICAgICAgZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19ET05FOiAgICAgICAgIERNQSBUcmFuc2ZlciBjb21wbGV0ZWQKKyogICAgICAgICAgZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19FUlJPUjogICAgICAgIERNQSBUcmFuc2ZlciBlcnJvcgorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19lIGRtYWNId190cmFuc2ZlckNvbXBsZXRlZChkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qICAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisKKwlpZiAoQ0hBTk5FTF9CVVNZKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKSkgeworCQlyZXR1cm4gZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19CVVNZOworCX0gZWxzZSBpZiAoZG1hY0h3X1JFR19JTlRfUkFXX0VSUk9SKHBDYmxrLT5tb2R1bGUpICYKKwkJICAgKDB4MDAwMDAwMDEgPDwgcENibGstPmNoYW5uZWwpKSB7CisJCXJldHVybiBkbWFjSHdfVFJBTlNGRVJfU1RBVFVTX0VSUk9SOworCX0KKworCXJldHVybiBkbWFjSHdfVFJBTlNGRVJfU1RBVFVTX0RPTkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgZGVzY3JpcHRvcnMgZm9yIGtub3duIGRhdGEgbGVuZ3RoCisqCisqICBXaGVuIERNQSBoYXMgdG8gd29yayBhcyBhIGZsb3cgY29udHJvbGxlciwgdGhpcyBmdW5jdGlvbiBwcmVwYXJlcyB0aGUKKyogIGRlc2NyaXB0b3IgY2hhaW4gdG8gdHJhbnNmZXIgZGF0YQorKgorKiAgZnJvbToKKyogICAgICAgICAgLSBNZW1vcnkgdG8gbWVtb3J5CisqICAgICAgICAgIC0gUGVyaXBoZXJhbCB0byBtZW1vcnkKKyogICAgICAgICAgLSBNZW1vcnkgdG8gUGVyaXBoZXJhbAorKiAgICAgICAgICAtIFBlcmlwaGVyYWwgdG8gUGVyaXBoZXJhbAorKgorKiAgQHJldHVybiAgIC0xIC0gT24gZmFpbHVyZQorKiAgICAgICAgICAgICAwIC0gT24gc3VjY2VzcworKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGRtYWNId19zZXREYXRhRGVzY3JpcHRvcihkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCSAgICAgdm9pZCAqcERlc2NyaXB0b3IsCS8qICAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICovCisJCQkgICAgIHZvaWQgKnBTcmNBZGRyLAkvKiAgIFsgSU4gXSBTb3VyY2UgKFBlcmlwaGVyYWwvTWVtb3J5KSBhZGRyZXNzICovCisJCQkgICAgIHZvaWQgKnBEc3RBZGRyLAkvKiAgIFsgSU4gXSBEZXN0aW5hdGlvbiAoUGVyaXBoZXJhbC9NZW1vcnkpIGFkZHJlc3MgKi8KKwkJCSAgICAgc2l6ZV90IGRhdGFMZW4JLyogICBbIElOIF0gRGF0YSBsZW5ndGggaW4gYnl0ZXMgKi8KKyAgICApIHsKKwlkbWFjSHdfVFJBTlNBQ1RJT05fV0lEVEhfZSBkc3RUcldpZHRoOworCWRtYWNId19UUkFOU0FDVElPTl9XSURUSF9lIHNyY1RyV2lkdGg7CisJZG1hY0h3X0RFU0NfUklOR190ICpwUmluZyA9IGRtYWNId19HRVRfREVTQ19SSU5HKHBEZXNjcmlwdG9yKTsKKwlkbWFjSHdfREVTQ190ICpwU3RhcnQ7CisJZG1hY0h3X0RFU0NfdCAqcFByb2c7CisJaW50IHNyY1RzID0gMDsKKwlpbnQgYmxrVHMgPSAwOworCWludCBvZGRTaXplID0gMDsKKwlpbnQgZGVzY0NvdW50ID0gMDsKKwlpbnQgY291bnQgPSAwOworCWludCBkc3RUclNpemUgPSAwOworCWludCBzcmNUclNpemUgPSAwOworCXVpbnQzMl90IG1heEJsb2NrU2l6ZSA9IGRtYWNId19NQVhfQkxPQ0tTSVpFOworCisJZHN0VHJTaXplID0gZG1hY0h3X0dldFRyV2lkdGhJbkJ5dGVzKHBDb25maWctPmRzdE1heFRyYW5zYWN0aW9uV2lkdGgpOworCXNyY1RyU2l6ZSA9IGRtYWNId19HZXRUcldpZHRoSW5CeXRlcyhwQ29uZmlnLT5zcmNNYXhUcmFuc2FjdGlvbldpZHRoKTsKKworCS8qIFNraXAgVHggaWYgYnVmZmVyIGlzIE5VTEwgIG9yIGxlbmd0aCBpcyB1bmtub3duICovCisJaWYgKChwU3JjQWRkciA9PSBOVUxMKSB8fCAocERzdEFkZHIgPT0gTlVMTCkgfHwgKGRhdGFMZW4gPT0gMCkpIHsKKwkJLyogRG8gbm90IGluaXRpYXRlIHRyYW5zZmVyICovCisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBFbnN1cmUgc2NhdHRlciBhbmQgZ2F0aGVyIGFyZSB0cmFuc2FjdGlvbiBhbGlnbmVkICovCisJaWYgKChwQ29uZmlnLT5zcmNHYXRoZXJXaWR0aCAlIHNyY1RyU2l6ZSkKKwkgICAgfHwgKHBDb25maWctPmRzdFNjYXR0ZXJXaWR0aCAlIGRzdFRyU2l6ZSkpIHsKKwkJcmV0dXJuIC0yOworCX0KKworCS8qCisJICAgQmFja2dyb3VuZCAxOiBETUFDIGNhbiBub3QgcGVyZm9ybSBETUEgaWYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlCisJICAgbm90IHByb3Blcmx5IGFsaWduZWQgd2l0aCB0aGUgY2hhbm5lbCdzIHRyYW5zYWN0aW9uIHdpZHRoLiBTbywgZm9yIHN1Y2Nlc3NmdWwKKwkgICBETUEgdHJhbnNmZXIsIHRyYW5zYWN0aW9uIHdpZHRoIG11c3QgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgYWxpZ25tZW50IG9mIHRoZQorCSAgIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzcy4KKwkgKi8KKworCS8qIEFkanVzdCBkZXN0aW5hdGlvbiB0cmFuc2FjdGlvbiB3aWR0aCBpZiBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIG5vdCBhbGlnbmVkIHByb3Blcmx5ICovCisJZHN0VHJXaWR0aCA9IHBDb25maWctPmRzdE1heFRyYW5zYWN0aW9uV2lkdGg7CisJd2hpbGUgKGRtYWNId19BRERSRVNTX01BU0soZHN0VHJTaXplKSAmICh1aW50MzJfdCkgcERzdEFkZHIpIHsKKwkJZHN0VHJXaWR0aCA9IGRtYWNId19HZXROZXh0VHJXaWR0aChkc3RUcldpZHRoKTsKKwkJZHN0VHJTaXplID0gZG1hY0h3X0dldFRyV2lkdGhJbkJ5dGVzKGRzdFRyV2lkdGgpOworCX0KKworCS8qIEFkanVzdCBzb3VyY2UgdHJhbnNhY3Rpb24gd2lkdGggaWYgc291cmNlIGFkZHJlc3MgaXMgbm90IGFsaWduZWQgcHJvcGVybHkgKi8KKwlzcmNUcldpZHRoID0gcENvbmZpZy0+c3JjTWF4VHJhbnNhY3Rpb25XaWR0aDsKKwl3aGlsZSAoZG1hY0h3X0FERFJFU1NfTUFTSyhzcmNUclNpemUpICYgKHVpbnQzMl90KSBwU3JjQWRkcikgeworCQlzcmNUcldpZHRoID0gZG1hY0h3X0dldE5leHRUcldpZHRoKHNyY1RyV2lkdGgpOworCQlzcmNUclNpemUgPSBkbWFjSHdfR2V0VHJXaWR0aEluQnl0ZXMoc3JjVHJXaWR0aCk7CisJfQorCisJLyogRmluZCB0aGUgbWF4aW11bSB0cmFuc2FjdGlvbiBwZXIgZGVzY3JpcHRvciAqLworCWlmIChwQ29uZmlnLT5tYXhEYXRhUGVyQmxvY2sKKwkgICAgJiYgKChwQ29uZmlnLT5tYXhEYXRhUGVyQmxvY2sgLyBzcmNUclNpemUpIDwKKwkJZG1hY0h3X01BWF9CTE9DS1NJWkUpKSB7CisJCW1heEJsb2NrU2l6ZSA9IHBDb25maWctPm1heERhdGFQZXJCbG9jayAvIHNyY1RyU2l6ZTsKKwl9CisKKwkvKiBGaW5kIG51bWJlciBvZiBzb3VyY2UgdHJhbnNhY3Rpb25zIG5lZWRlZCB0byBjb21wbGV0ZSB0aGUgRE1BIHRyYW5zZmVyICovCisJc3JjVHMgPSBkYXRhTGVuIC8gc3JjVHJTaXplOworCS8qIEZpbmQgdGhlIG9kZCBudW1iZXIgb2YgYnl0ZXMgdGhhdCBuZWVkIHRvIGJlIHRyYW5zZmVycmVkIGFzIHNpbmdsZSBieXRlIHRyYW5zYWN0aW9uIHdpZHRoICovCisJaWYgKHNyY1RzICYmIChkc3RUclNpemUgPiBzcmNUclNpemUpKSB7CisJCW9kZFNpemUgPSBkYXRhTGVuICUgZHN0VHJTaXplOworCQkvKiBBZGp1c3Qgc291cmNlIHRyYW5zYWN0aW9uIGNvdW50IGR1ZSB0byAib2RkU2l6ZSIgKi8KKwkJc3JjVHMgPSBzcmNUcyAtIChvZGRTaXplIC8gc3JjVHJTaXplKTsKKwl9IGVsc2UgeworCQlvZGRTaXplID0gZGF0YUxlbiAlIHNyY1RyU2l6ZTsKKwl9CisJLyogQWRqdXN0ICJkZXNjQ291bnQiIGR1ZSB0byAib2RkU2l6ZSIgKi8KKwlpZiAob2RkU2l6ZSkgeworCQlkZXNjQ291bnQrKzsKKwl9CisJLyogRmluZCB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3IgbmVlZGVkIGZvciB0b3RhbCAic3JjVHMiICovCisJaWYgKHNyY1RzKSB7CisJCWRlc2NDb3VudCArPSAoKHNyY1RzIC0gMSkgLyBtYXhCbG9ja1NpemUpICsgMTsKKwl9CisKKwkvKiBDaGVjayB0aGUgYXZhaWxhYmlsaXR5IG9mICJkZXNjQ291bnQiIGRpc2NyaXB0b3JzIGluIHRoZSByaW5nICovCisJcFByb2cgPSBwUmluZy0+cEhlYWQ7CisJZm9yIChjb3VudCA9IDA7IChkZXNjQ291bnQgPD0gcFJpbmctPm51bSkgJiYgKGNvdW50IDwgZGVzY0NvdW50KTsKKwkgICAgIGNvdW50KyspIHsKKwkJaWYgKChwUHJvZy0+Y3RsLmhpICYgZG1hY0h3X0RFU0NfRlJFRSkgPT0gMCkgeworCQkJLyogU3VmZmljaWVudCBkZXNjcmlwdG9ycyBhcmUgbm90IGF2YWlsYWJsZSAqLworCQkJcmV0dXJuIC0zOworCQl9CisJCXBQcm9nID0gKGRtYWNId19ERVNDX3QgKikgcFByb2ctPmxscDsKKwl9CisKKwkvKiBSZW1lbWJlciB0aGUgbGluayBsaXN0IGl0ZW0gdG8gcHJvZ3JhbSB0aGUgY2hhbm5lbCByZWdpc3RlcnMgKi8KKwlwU3RhcnQgPSBwUHJvZyA9IHBSaW5nLT5wSGVhZDsKKwkvKiBNYWtlIGEgbGluayBsaXN0IHdpdGggImRlc2NDb3VudCg9Y291bnQpIiBudW1iZXIgb2YgZGVzY3JpcHRvcnMgKi8KKwl3aGlsZSAoY291bnQpIHsKKwkJLyogUmVzZXQgY2hhbm5lbCBjb250cm9sIGluZm9ybWF0aW9uICovCisJCXBQcm9nLT5jdGwubG8gPSAwOworCQkvKiBFbmFibGUgc291cmNlIGdhdGhlciBpZiBjb25maWd1cmVkICovCisJCWlmIChwQ29uZmlnLT5zcmNHYXRoZXJXaWR0aCkgeworCQkJcFByb2ctPmN0bC5sbyB8PSBkbWFjSHdfUkVHX0NUTF9TR19FTkFCTEU7CisJCX0KKwkJLyogRW5hYmxlIGRlc3RpbmF0aW9uIHNjYXR0ZXIgaWYgY29uZmlndXJlZCAqLworCQlpZiAocENvbmZpZy0+ZHN0U2NhdHRlcldpZHRoKSB7CisJCQlwUHJvZy0+Y3RsLmxvIHw9IGRtYWNId19SRUdfQ1RMX0RTX0VOQUJMRTsKKwkJfQorCQkvKiBTZXQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisJCXBQcm9nLT5zYXIgPSAodWludDMyX3QpIHBTcmNBZGRyOworCQlwUHJvZy0+ZGFyID0gKHVpbnQzMl90KSBwRHN0QWRkcjsKKwkJLyogVXNlICJkZXZDdGwiIHRvIG1hcmsgdGhhdCB1c2VyIG1lbW9yeSBuZWVkIHRvIGJlIGZyZWVkIGxhdGVyIGlmIG5lZWRlZCAqLworCQlpZiAocFByb2cgPT0gcFJpbmctPnBIZWFkKSB7CisJCQlwUHJvZy0+ZGV2Q3RsID0gZG1hY0h3X0ZSRUVfVVNFUl9NRU1PUlk7CisJCX0gZWxzZSB7CisJCQlwUHJvZy0+ZGV2Q3RsID0gMDsKKwkJfQorCisJCWJsa1RzID0gc3JjVHM7CisKKwkJLyogU3BlY2lhbCB0cmVhdG1lYW50IGZvciBsYXN0IGRlc2NyaXB0b3IgKi8KKwkJaWYgKGNvdW50ID09IDEpIHsKKwkJCS8qIE1hcmsgdGhlIGxhc3QgZGVzY3JpcHRvciAqLworCQkJcFByb2ctPmN0bC5sbyAmPQorCQkJICAgIH4oZG1hY0h3X1JFR19DVExfTExQX0RTVF9FTiB8CisJCQkgICAgICBkbWFjSHdfUkVHX0NUTF9MTFBfU1JDX0VOKTsKKwkJCS8qIFRyZWF0bWVudCBmb3Igb2RkIGRhdGEgYnl0ZXMgKi8KKwkJCWlmIChvZGRTaXplKSB7CisJCQkJLyogQWRqdXN0IGZvciBzaW5nbGUgYnl0ZSB0cmFuc2FjdGlvbiB3aWR0aCAqLworCQkJCXN3aXRjaCAocENvbmZpZy0+dHJhbnNmZXJUeXBlKSB7CisJCQkJY2FzZSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTToKKwkJCQkJZHN0VHJXaWR0aCA9CisJCQkJCSAgICBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzg7CisJCQkJCWJsa1RzID0KKwkJCQkJICAgIChvZGRTaXplIC8gc3JjVHJTaXplKSArCisJCQkJCSAgICAoKG9kZFNpemUgJSBzcmNUclNpemUpID8gMSA6IDApOworCQkJCQlicmVhazsKKwkJCQljYXNlIGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMOgorCQkJCQlzcmNUcldpZHRoID0KKwkJCQkJICAgIGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfODsKKwkJCQkJYmxrVHMgPSBvZGRTaXplOworCQkJCQlicmVhazsKKwkJCQljYXNlIGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19NRU06CisJCQkJCXNyY1RyV2lkdGggPQorCQkJCQkgICAgZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF84OworCQkJCQlkc3RUcldpZHRoID0KKwkJCQkJICAgIGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfODsKKwkJCQkJYmxrVHMgPSBvZGRTaXplOworCQkJCQlicmVhazsKKwkJCQljYXNlIGRtYWNId19UUkFOU0ZFUl9UWVBFX1BFUklQSEVSQUxfVE9fUEVSSVBIRVJBTDoKKwkJCQkJLyogRG8gbm90IGFkanVzdCB0aGUgdHJhbnNhY3Rpb24gd2lkdGggICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJc3JjVHMgLT0gYmxrVHM7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoc3JjVHMgLyBtYXhCbG9ja1NpemUpIHsKKwkJCQlibGtUcyA9IG1heEJsb2NrU2l6ZTsKKwkJCX0KKwkJCS8qIFJlbWFpbmluZyBzb3VyY2UgdHJhbnNhY3Rpb25zIGZvciBuZXh0IGl0ZXJhdGlvbiAqLworCQkJc3JjVHMgLT0gYmxrVHM7CisJCX0KKwkJLyogTXVzdCBoYXZlIGEgdmFsaWQgc291cmNlIHRyYW5zYWN0aW9ucyAqLworCQlkbWFjSHdfQVNTRVJUKGJsa1RzID4gMCk7CisJCS8qIFNldCBjb250cm9sIGluZm9ybWF0aW9uICovCisJCWlmIChwQ29uZmlnLT5mbG93Q29udHJvbGVyID09IGRtYWNId19GTE9XX0NPTlRST0xfRE1BKSB7CisJCQlwUHJvZy0+Y3RsLmxvIHw9IHBDb25maWctPnRyYW5zZmVyVHlwZSB8CisJCQkgICAgcENvbmZpZy0+c3JjVXBkYXRlIHwKKwkJCSAgICBwQ29uZmlnLT5kc3RVcGRhdGUgfAorCQkJICAgIHNyY1RyV2lkdGggfAorCQkJICAgIGRzdFRyV2lkdGggfAorCQkJICAgIHBDb25maWctPnNyY01heEJ1cnN0V2lkdGggfAorCQkJICAgIHBDb25maWctPmRzdE1heEJ1cnN0V2lkdGggfAorCQkJICAgIHBDb25maWctPnNyY01hc3RlckludGVyZmFjZSB8CisJCQkgICAgcENvbmZpZy0+ZHN0TWFzdGVySW50ZXJmYWNlIHwgZG1hY0h3X1JFR19DVExfSU5UX0VOOworCQl9IGVsc2UgeworCQkJdWludDMyX3QgdHJhbnNmZXJUeXBlID0gMDsKKwkJCXN3aXRjaCAocENvbmZpZy0+dHJhbnNmZXJUeXBlKSB7CisJCQljYXNlIGRtYWNId19UUkFOU0ZFUl9UWVBFX1BFUklQSEVSQUxfVE9fTUVNOgorCQkJCXRyYW5zZmVyVHlwZSA9IGRtYWNId19SRUdfQ1RMX1RURkNfUE1fUEVSSTsKKwkJCQlicmVhazsKKwkJCWNhc2UgZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX1BFUklQSEVSQUw6CisJCQkJdHJhbnNmZXJUeXBlID0gZG1hY0h3X1JFR19DVExfVFRGQ19NUF9QRVJJOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlkbWFjSHdfQVNTRVJUKDApOworCQkJfQorCQkJcFByb2ctPmN0bC5sbyB8PSB0cmFuc2ZlclR5cGUgfAorCQkJICAgIHBDb25maWctPnNyY1VwZGF0ZSB8CisJCQkgICAgcENvbmZpZy0+ZHN0VXBkYXRlIHwKKwkJCSAgICBzcmNUcldpZHRoIHwKKwkJCSAgICBkc3RUcldpZHRoIHwKKwkJCSAgICBwQ29uZmlnLT5zcmNNYXhCdXJzdFdpZHRoIHwKKwkJCSAgICBwQ29uZmlnLT5kc3RNYXhCdXJzdFdpZHRoIHwKKwkJCSAgICBwQ29uZmlnLT5zcmNNYXN0ZXJJbnRlcmZhY2UgfAorCQkJICAgIHBDb25maWctPmRzdE1hc3RlckludGVyZmFjZSB8IGRtYWNId19SRUdfQ1RMX0lOVF9FTjsKKwkJfQorCisJCS8qIFNldCBibG9jayB0cmFuc2FjdGlvbiBzaXplICovCisJCXBQcm9nLT5jdGwuaGkgPSBibGtUcyAmIGRtYWNId19SRUdfQ1RMX0JMT0NLX1RTX01BU0s7CisJCS8qIExvb2sgZm9yIG5leHQgZGVzY3JpcHRvciAqLworCQlpZiAoY291bnQgPiAxKSB7CisJCQkvKiBQb2ludCB0byB0aGUgbmV4dCBkZXNjcmlwdG9yICovCisJCQlwUHJvZyA9IChkbWFjSHdfREVTQ190ICopIHBQcm9nLT5sbHA7CisKKwkJCS8qIFVwZGF0ZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIG5leHQgaXRlcmF0aW9uICovCisJCQlzd2l0Y2ggKHBDb25maWctPnRyYW5zZmVyVHlwZSkgeworCQkJY2FzZSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTToKKwkJCQlpZiAocENvbmZpZy0+ZHN0U2NhdHRlcldpZHRoKSB7CisJCQkJCXBEc3RBZGRyID0KKwkJCQkJICAgIChjaGFyICopcERzdEFkZHIgKworCQkJCQkgICAgYmxrVHMgKiBzcmNUclNpemUgKworCQkJCQkgICAgKCgoYmxrVHMgKiBzcmNUclNpemUpIC8KKwkJCQkJICAgICAgcENvbmZpZy0+ZHN0U2NhdHRlcldpZHRoKSAqCisJCQkJCSAgICAgcENvbmZpZy0+ZHN0U2NhdHRlckp1bXApOworCQkJCX0gZWxzZSB7CisJCQkJCXBEc3RBZGRyID0KKwkJCQkJICAgIChjaGFyICopcERzdEFkZHIgKworCQkJCQkgICAgYmxrVHMgKiBzcmNUclNpemU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fUEVSSVBIRVJBTDoKKwkJCQlpZiAocENvbmZpZy0+c3JjR2F0aGVyV2lkdGgpIHsKKwkJCQkJcFNyY0FkZHIgPQorCQkJCQkgICAgKGNoYXIgKilwRHN0QWRkciArCisJCQkJCSAgICBibGtUcyAqIHNyY1RyU2l6ZSArCisJCQkJCSAgICAoKChibGtUcyAqIHNyY1RyU2l6ZSkgLworCQkJCQkgICAgICBwQ29uZmlnLT5zcmNHYXRoZXJXaWR0aCkgKgorCQkJCQkgICAgIHBDb25maWctPnNyY0dhdGhlckp1bXApOworCQkJCX0gZWxzZSB7CisJCQkJCXBTcmNBZGRyID0KKwkJCQkJICAgIChjaGFyICopcFNyY0FkZHIgKworCQkJCQkgICAgYmxrVHMgKiBzcmNUclNpemU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fTUVNOgorCQkJCWlmIChwQ29uZmlnLT5kc3RTY2F0dGVyV2lkdGgpIHsKKwkJCQkJcERzdEFkZHIgPQorCQkJCQkgICAgKGNoYXIgKilwRHN0QWRkciArCisJCQkJCSAgICBibGtUcyAqIHNyY1RyU2l6ZSArCisJCQkJCSAgICAoKChibGtUcyAqIHNyY1RyU2l6ZSkgLworCQkJCQkgICAgICBwQ29uZmlnLT5kc3RTY2F0dGVyV2lkdGgpICoKKwkJCQkJICAgICBwQ29uZmlnLT5kc3RTY2F0dGVySnVtcCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcERzdEFkZHIgPQorCQkJCQkgICAgKGNoYXIgKilwRHN0QWRkciArCisJCQkJCSAgICBibGtUcyAqIHNyY1RyU2l6ZTsKKwkJCQl9CisKKwkJCQlpZiAocENvbmZpZy0+c3JjR2F0aGVyV2lkdGgpIHsKKwkJCQkJcFNyY0FkZHIgPQorCQkJCQkgICAgKGNoYXIgKilwRHN0QWRkciArCisJCQkJCSAgICBibGtUcyAqIHNyY1RyU2l6ZSArCisJCQkJCSAgICAoKChibGtUcyAqIHNyY1RyU2l6ZSkgLworCQkJCQkgICAgICBwQ29uZmlnLT5zcmNHYXRoZXJXaWR0aCkgKgorCQkJCQkgICAgIHBDb25maWctPnNyY0dhdGhlckp1bXApOworCQkJCX0gZWxzZSB7CisJCQkJCXBTcmNBZGRyID0KKwkJCQkJICAgIChjaGFyICopcFNyY0FkZHIgKworCQkJCQkgICAgYmxrVHMgKiBzcmNUclNpemU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX1BFUklQSEVSQUw6CisJCQkJLyogRG8gbm90IGFkanVzdCB0aGUgYWRkcmVzcyAqLworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlkbWFjSHdfQVNTRVJUKDApOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQXQgdGhlIGVuZCBvZiB0cmFuc2ZlciAic3JjVHMiIG11c3QgYmUgemVybyAqLworCQkJZG1hY0h3X0FTU0VSVChzcmNUcyA9PSAwKTsKKwkJfQorCQljb3VudC0tOworCX0KKworCS8qIFJlbWVtYmVyIHRoZSBkZXNjcmlwdG9yIHRvIGluaXRpYWxpemUgdGhlIHJlZ2lzdGVycyAqLworCWlmIChwUmluZy0+cFByb2cgPT0gZG1hY0h3X0RFU0NfSU5JVCkgeworCQlwUmluZy0+cFByb2cgPSBwU3RhcnQ7CisJfQorCS8qIEluZGljYXRlIHRoYXQgdGhlIGRlc2NyaXB0b3IgaXMgdXBkYXRlZCAqLworCXBSaW5nLT5wRW5kID0gcFByb2c7CisJLyogSGVhZCBwb2ludGluZyB0byB0aGUgbmV4dCBkZXNjcmlwdG9yICovCisJcFJpbmctPnBIZWFkID0gKGRtYWNId19ERVNDX3QgKikgcFByb2ctPmxscDsKKwkvKiBVcGRhdGUgVGFpbCBwb2ludGVyIGlmIGRlc3RpbmF0aW9uIGlzIGEgcGVyaXBoZXJhbCwKKwkgICBiZWNhdXNlIG5vIG9uZSBpcyBnb2luZyB0byByZWFkIGZyb20gdGhlIHBUYWlsCisJICovCisJaWYgKCFkbWFjSHdfRFNUX0lTX01FTU9SWShwQ29uZmlnLT50cmFuc2ZlclR5cGUpKSB7CisJCXBSaW5nLT5wVGFpbCA9IHBSaW5nLT5wSGVhZDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBQcm92aWRlcyBETUEgY29udHJvbGxlciBhdHRyaWJ1dGVzCisqCisqCisqICBAcmV0dXJuICBETUEgY29udHJvbGxlciBhdHRyaWJ1dGVzCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordWludDMyX3QgZG1hY0h3X2dldERtYUNvbnRyb2xsZXJBdHRyaWJ1dGUoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogIFsgSU4gXSAgRE1BIENoYW5uZWwgaGFuZGxlICovCisJCQkJCSAgZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX2UgYXR0cgkvKiAgWyBJTiBdICBETUEgQ29udHJvbGVyIGF0dHJpYnV0ZSBvZiB0eXBlICBkbWFjSHdfQ09OVFJPTExFUl9BVFRSSUJfZSAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisKKwlzd2l0Y2ggKGF0dHIpIHsKKwljYXNlIGRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9DSEFOTkVMX05VTToKKwkJcmV0dXJuIGRtYWNId19HRVRfTlVNX0NIQU5ORUwocENibGstPm1vZHVsZSk7CisJY2FzZSBkbWFjSHdfQ09OVFJPTExFUl9BVFRSSUJfQ0hBTk5FTF9NQVhfQkxPQ0tfU0laRToKKwkJcmV0dXJuICgxIDw8CisJCQkgKGRtYWNId19HRVRfTUFYX0JMT0NLX1NJWkUKKwkJCSAgKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5tb2R1bGUpICsgMikpIC0gODsKKwljYXNlIGRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9NQVNURVJfSU5URl9OVU06CisJCXJldHVybiBkbWFjSHdfR0VUX05VTV9JTlRFUkZBQ0UocENibGstPm1vZHVsZSk7CisJY2FzZSBkbWFjSHdfQ09OVFJPTExFUl9BVFRSSUJfQ0hBTk5FTF9CVVNfV0lEVEg6CisJCXJldHVybiAzMiA8PCBkbWFjSHdfR0VUX0NIQU5ORUxfREFUQV9XSURUSChwQ2Jsay0+bW9kdWxlLAorCQkJCQkJCSAgIHBDYmxrLT5jaGFubmVsKTsKKwljYXNlIGRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9DSEFOTkVMX0ZJRk9fU0laRToKKwkJcmV0dXJuIEdldEZpZm9TaXplKGhhbmRsZSk7CisJfQorCWRtYWNId19BU1NFUlQoMCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3X2V4dHJhLmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3X2V4dHJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3YjQzNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvZG1hYy9kbWFjSHdfZXh0cmEuYwpAQCAtMCwwICsxLDEwMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAZmlsZSAgICBkbWFjSHdfZXh0cmEuYworKgorKiAgQGJyaWVmICAgRXh0cmEgTG93IGxldmVsIERNQSBjb250cm9sbGVyIGRyaXZlciByb3V0aW5lcworKgorKiAgQG5vdGUKKyoKKyogICBUaGVzZSByb3V0aW5lcyBwcm92aWRlIGJhc2ljIERNQSBmdW5jdGlvbmFsaXR5IG9ubHkuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlIDxjc3AvZG1hY0h3Lmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvZG1hY0h3X3JlZy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2RtYWNId19wcml2Lmg+CisKK2V4dGVybiBkbWFjSHdfQ0JMS190IGRtYWNId19nQ2Jsa1tkbWFjSHdfTUFYX0NIQU5ORUxfQ09VTlRdOwkvKiBEZWNsYXJlZCBpbiBkbWFjSHcuYyAqLworCisvKiAtLS0tIEV4dGVybmFsIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAtLS0tIEludGVybmFsIFVzZSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIE92ZXJ3cml0ZXMgZGF0YSBsZW5ndGggaW4gdGhlIGRlc2NyaXB0b3IKKyoKKyogIFRoaXMgZnVuY3Rpb24gb3ZlcndyaXRlcyBkYXRhIGxlbmd0aCBpbiB0aGUgZGVzY3JpcHRvcgorKgorKgorKiAgQHJldHVybiAgIHZvaWQKKyoKKyogIEBub3RlCisqICAgICAgICAgIFRoaXMgaXMgb25seSB1c2VkIGZvciBQQ00gY2hhbm5lbAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfc2V0RGF0YUxlbmd0aChkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCSAgdm9pZCAqcERlc2NyaXB0b3IsCS8qICAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICovCisJCQkgIHNpemVfdCBkYXRhTGVuCS8qICAgWyBJTiBdIERhdGEgbGVuZ3RoIGluIGJ5dGVzICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEhlbHBlciBmdW5jdGlvbiB0byBkaXNwbGF5IERNQSByZWdpc3RlcnMKKyoKKyogIEByZXR1cm4gIHZvaWQKKyoKKyoKKyogIEBub3RlCisqICAgICBOb25lCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBEaXNwbGF5UmVnaXN0ZXJDb250ZW50cyhpbnQgbW9kdWxlLAkvKiAgIFsgSU4gXSBETUEgQ29udHJvbGxlciB1bml0ICAoMC0xKSAqLworCQkJCSAgICBpbnQgY2hhbm5lbCwJLyogICBbIElOIF0gRE1BIENoYW5uZWwgICAgICAgICAgKDAtNykgLyAtMShhbGwpICovCisJCQkJICAgIGludCAoKmZwUHJpbnQpIChjb25zdCBjaGFyICosIC4uLikJLyogICBbIElOIF0gQ2FsbGJhY2sgdG8gdGhlIHByaW50IGZ1bmN0aW9uICovCisgICAgKSB7CisJaW50IGNoYW47CisKKwkoKmZwUHJpbnQpICgiRGlzcGxheWluZyByZWdpc3RlciBjb250ZW50IFxuXG4iKTsKKwkoKmZwUHJpbnQpICgiTW9kdWxlICVkOiBJbnRlcnJ1cHQgcmF3IHRyYW5zZmVyICAgICAgICAgICAgICAweCVYXG4iLAorCQkgICAgbW9kdWxlLCAodWludDMyX3QpIChkbWFjSHdfUkVHX0lOVF9SQVdfVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IHJhdyBibG9jayAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfUkFXX0JMT0NLKG1vZHVsZSkpKTsKKwkoKmZwUHJpbnQpICgiTW9kdWxlICVkOiBJbnRlcnJ1cHQgcmF3IHNyYyB0cmFuc2ZlciAgICAgICAgICAweCVYXG4iLAorCQkgICAgbW9kdWxlLCAodWludDMyX3QpIChkbWFjSHdfUkVHX0lOVF9SQVdfU1RSQU4obW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCByYXcgZHN0IHRyYW5zZmVyICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX1JBV19EVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IHJhdyBlcnJvciAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfUkFXX0VSUk9SKG1vZHVsZSkpKTsKKwkoKmZwUHJpbnQpICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCBzdGF0IHRyYW5zZmVyICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX1NUQVRfVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IHN0YXQgYmxvY2sgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfU1RBVF9CTE9DSyhtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IHN0YXQgc3JjIHRyYW5zZmVyICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfU1RBVF9TVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IHN0YXQgZHN0IHRyYW5zZmVyICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfU1RBVF9EVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IHN0YXQgZXJyb3IgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfU1RBVF9FUlJPUihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkoKmZwUHJpbnQpICgiTW9kdWxlICVkOiBJbnRlcnJ1cHQgbWFzayB0cmFuc2ZlciAgICAgICAgICAgICAweCVYXG4iLAorCQkgICAgbW9kdWxlLCAodWludDMyX3QpIChkbWFjSHdfUkVHX0lOVF9NQVNLX1RSQU4obW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCBtYXNrIGJsb2NrICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX01BU0tfQkxPQ0sobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCBtYXNrIHNyYyB0cmFuc2ZlciAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX01BU0tfU1RSQU4obW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCBtYXNrIGRzdCB0cmFuc2ZlciAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX01BU0tfRFRSQU4obW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCBtYXNrIGVycm9yICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX01BU0tfRVJST1IobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IGNsZWFyIHRyYW5zZmVyICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfQ0xFQVJfVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IGNsZWFyIGJsb2NrICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfQ0xFQVJfQkxPQ0sobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCBjbGVhciBzcmMgdHJhbnNmZXIgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX0NMRUFSX1NUUkFOKG1vZHVsZSkpKTsKKwkoKmZwUHJpbnQpICgiTW9kdWxlICVkOiBJbnRlcnJ1cHQgY2xlYXIgZHN0IHRyYW5zZmVyICAgICAgICAweCVYXG4iLAorCQkgICAgbW9kdWxlLCAodWludDMyX3QpIChkbWFjSHdfUkVHX0lOVF9DTEVBUl9EVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IGNsZWFyIGVycm9yICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfQ0xFQVJfRVJST1IobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogU1cgc291cmNlIHJlcSAgICAgICAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19TV19IU19TUkNfUkVRKG1vZHVsZSkpKTsKKwkoKmZwUHJpbnQpICgiTW9kdWxlICVkOiBTVyBkZXN0IHJlcSAgICAgICAgICAgICAgICAgICAgICAgICAweCVYXG4iLAorCQkgICAgbW9kdWxlLCAodWludDMyX3QpIChkbWFjSHdfUkVHX1NXX0hTX0RTVF9SRVEobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IFNXIHNvdXJjZSBzaWduYWwgICAgICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfU1dfSFNfU1JDX1NHTF9SRVEobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IFNXIGRlc3Qgc2lnbmFsICAgICAgICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfU1dfSFNfRFNUX1NHTF9SRVEobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IFNXIHNvdXJjZSBsYXN0ICAgICAgICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfU1dfSFNfU1JDX0xTVF9SRVEobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IFNXIGRlc3QgbGFzdCAgICAgICAgICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfU1dfSFNfRFNUX0xTVF9SRVEobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogbWlzYyBjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19NSVNDX0NGRyhtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogbWlzYyBjaGFubmVsIGVuYWJsZSAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19NSVNDX0NIX0VOQUJMRShtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogbWlzYyBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19NSVNDX0lEKG1vZHVsZSkpKTsKKwkoKmZwUHJpbnQpICgiTW9kdWxlICVkOiBtaXNjIHRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAweCVYXG4iLAorCQkgICAgbW9kdWxlLCAodWludDMyX3QpIChkbWFjSHdfUkVHX01JU0NfVEVTVChtb2R1bGUpKSk7CisKKwlpZiAoY2hhbm5lbCA9PSAtMSkgeworCQlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgODsgY2hhbisrKSB7CisJCQkoKmZwUHJpbnQpCisJCQkgICAgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCQkoKmZwUHJpbnQpCisJCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgU291cmNlICAgICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCQkgICAgIG1vZHVsZSwgY2hhbiwKKwkJCSAgICAgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19TQVIobW9kdWxlLCBjaGFuKSkpOworCQkJKCpmcFByaW50KQorCQkJICAgICgiTW9kdWxlICVkOiBDaGFubmVsICVkIERlc3RpbmF0aW9uICAgICAgICAgICAgICAweCVYXG4iLAorCQkJICAgICBtb2R1bGUsIGNoYW4sCisJCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfREFSKG1vZHVsZSwgY2hhbikpKTsKKwkJCSgqZnBQcmludCkKKwkJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBMTFAgICAgICAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkJICAgICAodWludDMyX3QpIChkbWFjSHdfUkVHX0xMUChtb2R1bGUsIGNoYW4pKSk7CisJCQkoKmZwUHJpbnQpCisJCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgQ29udHJvbCAoTE8pICAgICAgICAgICAgIDB4JVhcbiIsCisJCQkgICAgIG1vZHVsZSwgY2hhbiwKKwkJCSAgICAgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19DVExfTE8obW9kdWxlLCBjaGFuKSkpOworCQkJKCpmcFByaW50KQorCQkJICAgICgiTW9kdWxlICVkOiBDaGFubmVsICVkIENvbnRyb2wgKEhJKSAgICAgICAgICAgICAweCVYXG4iLAorCQkJICAgICBtb2R1bGUsIGNoYW4sCisJCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfQ1RMX0hJKG1vZHVsZSwgY2hhbikpKTsKKwkJCSgqZnBQcmludCkKKwkJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBTb3VyY2UgU3RhdHMgICAgICAgICAgICAgMHglWFxuIiwKKwkJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkJICAgICAodWludDMyX3QpIChkbWFjSHdfUkVHX1NTVEFUKG1vZHVsZSwgY2hhbikpKTsKKwkJCSgqZnBQcmludCkKKwkJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBEZXN0IFN0YXRzICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkJICAgICAodWludDMyX3QpIChkbWFjSHdfUkVHX0RTVEFUKG1vZHVsZSwgY2hhbikpKTsKKwkJCSgqZnBQcmludCkKKwkJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBTb3VyY2UgU3RhdHMgQWRkciAgICAgICAgMHglWFxuIiwKKwkJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkJICAgICAodWludDMyX3QpIChkbWFjSHdfUkVHX1NTVEFUQVIobW9kdWxlLCBjaGFuKSkpOworCQkJKCpmcFByaW50KQorCQkJICAgICgiTW9kdWxlICVkOiBDaGFubmVsICVkIERlc3QgU3RhdHMgQWRkciAgICAgICAgICAweCVYXG4iLAorCQkJICAgICBtb2R1bGUsIGNoYW4sCisJCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfRFNUQVRBUihtb2R1bGUsIGNoYW4pKSk7CisJCQkoKmZwUHJpbnQpCisJCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgQ29uZmlnIChMTykgICAgICAgICAgICAgIDB4JVhcbiIsCisJCQkgICAgIG1vZHVsZSwgY2hhbiwKKwkJCSAgICAgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19DRkdfTE8obW9kdWxlLCBjaGFuKSkpOworCQkJKCpmcFByaW50KQorCQkJICAgICgiTW9kdWxlICVkOiBDaGFubmVsICVkIENvbmZpZyAoSEkpICAgICAgICAgICAgICAweCVYXG4iLAorCQkJICAgICBtb2R1bGUsIGNoYW4sCisJCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfQ0ZHX0hJKG1vZHVsZSwgY2hhbikpKTsKKwkJfQorCX0gZWxzZSB7CisJCWNoYW4gPSBjaGFubmVsOworCQkoKmZwUHJpbnQpCisJCSAgICAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJKCpmcFByaW50KQorCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgU291cmNlICAgICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICAgbW9kdWxlLCBjaGFuLCAodWludDMyX3QpIChkbWFjSHdfUkVHX1NBUihtb2R1bGUsIGNoYW4pKSk7CisJCSgqZnBQcmludCkKKwkJICAgICgiTW9kdWxlICVkOiBDaGFubmVsICVkIERlc3RpbmF0aW9uICAgICAgICAgICAgICAweCVYXG4iLAorCQkgICAgIG1vZHVsZSwgY2hhbiwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19EQVIobW9kdWxlLCBjaGFuKSkpOworCQkoKmZwUHJpbnQpCisJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBMTFAgICAgICAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgICBtb2R1bGUsIGNoYW4sICh1aW50MzJfdCkgKGRtYWNId19SRUdfTExQKG1vZHVsZSwgY2hhbikpKTsKKwkJKCpmcFByaW50KQorCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgQ29udHJvbCAoTE8pICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfQ1RMX0xPKG1vZHVsZSwgY2hhbikpKTsKKwkJKCpmcFByaW50KQorCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgQ29udHJvbCAoSEkpICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfQ1RMX0hJKG1vZHVsZSwgY2hhbikpKTsKKwkJKCpmcFByaW50KQorCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgU291cmNlIFN0YXRzICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICAgbW9kdWxlLCBjaGFuLCAodWludDMyX3QpIChkbWFjSHdfUkVHX1NTVEFUKG1vZHVsZSwgY2hhbikpKTsKKwkJKCpmcFByaW50KQorCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgRGVzdCBTdGF0cyAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICAgbW9kdWxlLCBjaGFuLCAodWludDMyX3QpIChkbWFjSHdfUkVHX0RTVEFUKG1vZHVsZSwgY2hhbikpKTsKKwkJKCpmcFByaW50KQorCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgU291cmNlIFN0YXRzIEFkZHIgICAgICAgIDB4JVhcbiIsCisJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfU1NUQVRBUihtb2R1bGUsIGNoYW4pKSk7CisJCSgqZnBQcmludCkKKwkJICAgICgiTW9kdWxlICVkOiBDaGFubmVsICVkIERlc3QgU3RhdHMgQWRkciAgICAgICAgICAweCVYXG4iLAorCQkgICAgIG1vZHVsZSwgY2hhbiwKKwkJICAgICAodWludDMyX3QpIChkbWFjSHdfUkVHX0RTVEFUQVIobW9kdWxlLCBjaGFuKSkpOworCQkoKmZwUHJpbnQpCisJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBDb25maWcgKExPKSAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgICBtb2R1bGUsIGNoYW4sCisJCSAgICAgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19DRkdfTE8obW9kdWxlLCBjaGFuKSkpOworCQkoKmZwUHJpbnQpCisJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBDb25maWcgKEhJKSAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgICBtb2R1bGUsIGNoYW4sCisJCSAgICAgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19DRkdfSEkobW9kdWxlLCBjaGFuKSkpOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEhlbHBlciBmdW5jdGlvbiB0byBkaXNwbGF5IGRlc2NyaXB0b3IgcmluZworKgorKiAgQHJldHVybiAgdm9pZAorKgorKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIERpc3BsYXlEZXNjUmluZyh2b2lkICpwRGVzY3JpcHRvciwJLyogICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgKi8KKwkJCSAgICBpbnQgKCpmcFByaW50KSAoY29uc3QgY2hhciAqLCAuLi4pCS8qICAgWyBJTiBdIENhbGxiYWNrIHRvIHRoZSBwcmludCBmdW5jdGlvbiAqLworICAgICkgeworCWRtYWNId19ERVNDX1JJTkdfdCAqcFJpbmcgPSBkbWFjSHdfR0VUX0RFU0NfUklORyhwRGVzY3JpcHRvcik7CisJZG1hY0h3X0RFU0NfdCAqcFN0YXJ0OworCisJaWYgKHBSaW5nLT5wSGVhZCA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisKKwlwU3RhcnQgPSBwUmluZy0+cEhlYWQ7CisKKwl3aGlsZSAoKGRtYWNId19ERVNDX3QgKikgcFN0YXJ0LT5sbHAgIT0gcFJpbmctPnBIZWFkKSB7CisJCWlmIChwU3RhcnQgPT0gcFJpbmctPnBIZWFkKSB7CisJCQkoKmZwUHJpbnQpICgiSGVhZFxuIik7CisJCX0KKwkJaWYgKHBTdGFydCA9PSBwUmluZy0+cFRhaWwpIHsKKwkJCSgqZnBQcmludCkgKCJUYWlsXG4iKTsKKwkJfQorCQlpZiAocFN0YXJ0ID09IHBSaW5nLT5wUHJvZykgeworCQkJKCpmcFByaW50KSAoIlByb2dcbiIpOworCQl9CisJCWlmIChwU3RhcnQgPT0gcFJpbmctPnBFbmQpIHsKKwkJCSgqZnBQcmludCkgKCJFbmRcbiIpOworCQl9CisJCWlmIChwU3RhcnQgPT0gcFJpbmctPnBGcmVlKSB7CisJCQkoKmZwUHJpbnQpICgiRnJlZVxuIik7CisJCX0KKwkJKCpmcFByaW50KSAoIjB4JVg6XG4iLCAodWludDMyX3QpIHBTdGFydCk7CisJCSgqZnBQcmludCkgKCJzYXIgICAgMHglMFhcbiIsIHBTdGFydC0+c2FyKTsKKwkJKCpmcFByaW50KSAoImRhciAgICAweCUwWFxuIiwgcFN0YXJ0LT5kYXIpOworCQkoKmZwUHJpbnQpICgibGxwICAgIDB4JTBYXG4iLCBwU3RhcnQtPmxscCk7CisJCSgqZnBQcmludCkgKCJjdGwubG8gMHglMFhcbiIsIHBTdGFydC0+Y3RsLmxvKTsKKwkJKCpmcFByaW50KSAoImN0bC5oaSAweCUwWFxuIiwgcFN0YXJ0LT5jdGwuaGkpOworCQkoKmZwUHJpbnQpICgic3N0YXQgIDB4JTBYXG4iLCBwU3RhcnQtPnNzdGF0KTsKKwkJKCpmcFByaW50KSAoImRzdGF0ICAweCUwWFxuIiwgcFN0YXJ0LT5kc3RhdCk7CisJCSgqZnBQcmludCkgKCJkZXZDdGwgMHglMFhcbiIsIHBTdGFydC0+ZGV2Q3RsKTsKKworCQlwU3RhcnQgPSAoZG1hY0h3X0RFU0NfdCAqKSBwU3RhcnQtPmxscDsKKwl9CisJaWYgKHBTdGFydCA9PSBwUmluZy0+cEhlYWQpIHsKKwkJKCpmcFByaW50KSAoIkhlYWRcbiIpOworCX0KKwlpZiAocFN0YXJ0ID09IHBSaW5nLT5wVGFpbCkgeworCQkoKmZwUHJpbnQpICgiVGFpbFxuIik7CisJfQorCWlmIChwU3RhcnQgPT0gcFJpbmctPnBQcm9nKSB7CisJCSgqZnBQcmludCkgKCJQcm9nXG4iKTsKKwl9CisJaWYgKHBTdGFydCA9PSBwUmluZy0+cEVuZCkgeworCQkoKmZwUHJpbnQpICgiRW5kXG4iKTsKKwl9CisJaWYgKHBTdGFydCA9PSBwUmluZy0+cEZyZWUpIHsKKwkJKCpmcFByaW50KSAoIkZyZWVcbiIpOworCX0KKwkoKmZwUHJpbnQpICgiMHglWDpcbiIsICh1aW50MzJfdCkgcFN0YXJ0KTsKKwkoKmZwUHJpbnQpICgic2FyICAgIDB4JTBYXG4iLCBwU3RhcnQtPnNhcik7CisJKCpmcFByaW50KSAoImRhciAgICAweCUwWFxuIiwgcFN0YXJ0LT5kYXIpOworCSgqZnBQcmludCkgKCJsbHAgICAgMHglMFhcbiIsIHBTdGFydC0+bGxwKTsKKwkoKmZwUHJpbnQpICgiY3RsLmxvIDB4JTBYXG4iLCBwU3RhcnQtPmN0bC5sbyk7CisJKCpmcFByaW50KSAoImN0bC5oaSAweCUwWFxuIiwgcFN0YXJ0LT5jdGwuaGkpOworCSgqZnBQcmludCkgKCJzc3RhdCAgMHglMFhcbiIsIHBTdGFydC0+c3N0YXQpOworCSgqZnBQcmludCkgKCJkc3RhdCAgMHglMFhcbiIsIHBTdGFydC0+ZHN0YXQpOworCSgqZnBQcmludCkgKCJkZXZDdGwgMHglMFhcbiIsIHBTdGFydC0+ZGV2Q3RsKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENoZWNrIGlmIERNQSBjaGFubmVsIGlzIHRoZSBmbG93IGNvbnRyb2xsZXIKKyoKKyogIEByZXR1cm4gIDEgOiBJZiBETUEgaXMgYSBmbG93IGNvbnRyb2xlcgorKiAgICAgICAgICAgMCA6IFBlcmlwaGVyYWwgaXMgdGhlIGZsb3cgY29udHJvbGxlcgorKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgaW50IERtYUlzRmxvd0NvbnRyb2xsZXIodm9pZCAqcERlc2NyaXB0b3IJLyogICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgKi8KKyAgICApIHsKKwl1aW50MzJfdCB0dGZjID0KKwkgICAgKGRtYWNId19HRVRfREVTQ19SSU5HKHBEZXNjcmlwdG9yKSktPnBUYWlsLT5jdGwuCisJICAgIGxvICYgZG1hY0h3X1JFR19DVExfVFRGQ19NQVNLOworCisJc3dpdGNoICh0dGZjKSB7CisJY2FzZSBkbWFjSHdfUkVHX0NUTF9UVEZDX01NX0RNQUM6CisJY2FzZSBkbWFjSHdfUkVHX0NUTF9UVEZDX01QX0RNQUM6CisJY2FzZSBkbWFjSHdfUkVHX0NUTF9UVEZDX1BNX0RNQUM6CisJY2FzZSBkbWFjSHdfUkVHX0NUTF9UVEZDX1BQX0RNQUM6CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgT3ZlcndyaXRlcyBkYXRhIGxlbmd0aCBpbiB0aGUgZGVzY3JpcHRvcgorKgorKiAgVGhpcyBmdW5jdGlvbiBvdmVyd3JpdGVzIGRhdGEgbGVuZ3RoIGluIHRoZSBkZXNjcmlwdG9yCisqCisqCisqICBAcmV0dXJuICAgdm9pZAorKgorKiAgQG5vdGUKKyogICAgICAgICAgVGhpcyBpcyBvbmx5IHVzZWQgZm9yIFBDTSBjaGFubmVsCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYWNId19zZXREYXRhTGVuZ3RoKGRtYWNId19DT05GSUdfdCAqcENvbmZpZywJLyogICBbIElOIF0gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworCQkJICB2b2lkICpwRGVzY3JpcHRvciwJLyogICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgKi8KKwkJCSAgc2l6ZV90IGRhdGFMZW4JLyogICBbIElOIF0gRGF0YSBsZW5ndGggaW4gYnl0ZXMgKi8KKyAgICApIHsKKwlkbWFjSHdfREVTQ190ICpwUHJvZzsKKwlkbWFjSHdfREVTQ190ICpwSGVhZDsKKwlpbnQgc3JjVHMgPSAwOworCWludCBzcmNUclNpemUgPSAwOworCisJcEhlYWQgPSAoZG1hY0h3X0dFVF9ERVNDX1JJTkcocERlc2NyaXB0b3IpKS0+cEhlYWQ7CisJcFByb2cgPSBwSGVhZDsKKworCXNyY1RyU2l6ZSA9IGRtYWNId19HZXRUcldpZHRoSW5CeXRlcyhwQ29uZmlnLT5zcmNNYXhUcmFuc2FjdGlvbldpZHRoKTsKKwlzcmNUcyA9IGRhdGFMZW4gLyBzcmNUclNpemU7CisJZG8geworCQlwUHJvZy0+Y3RsLmhpID0gc3JjVHMgJiBkbWFjSHdfUkVHX0NUTF9CTE9DS19UU19NQVNLOworCQlwUHJvZyA9IChkbWFjSHdfREVTQ190ICopIHBQcm9nLT5sbHA7CisJfSB3aGlsZSAocFByb2cgIT0gcEhlYWQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ2xlYXJzIHRoZSBpbnRlcnJ1cHQKKyoKKyogIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBETUEgY2hhbm5lbCBzcGVjaWZpYyBpbnRlcnJ1cHQKKyoKKyoKKyogIEByZXR1cm4gICB2b2lkCisqCisqICBAbm90ZQorKiAgICAgTXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIGNvbnRleHQgb2YgSVNSCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYWNId19jbGVhckludGVycnVwdChkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKyAgICApIHsKKwlkbWFjSHdfQ0JMS190ICpwQ2JsayA9IGRtYWNId19IQU5ETEVfVE9fQ0JMSyhoYW5kbGUpOworCisJZG1hY0h3X1RSQU5fSU5UX0NMRUFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwlkbWFjSHdfQkxPQ0tfSU5UX0NMRUFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwlkbWFjSHdfRVJST1JfSU5UX0NMRUFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFJldHVybnMgdGhlIGNhdXNlIG9mIGNoYW5uZWwgc3BlY2lmaWMgRE1BIGludGVycnVwdAorKgorKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjYXVzZSBvZiBpbnRlcnJ1cHQKKyoKKyogIEByZXR1cm4gIEludGVycnVwdCBzdGF0dXMsIGVhY2ggYml0IHJlcHJlc2VudGluZyBhIHNwZWNpZmljIHR5cGUgb2YgaW50ZXJydXB0CisqCisqICBAbm90ZQorKiAgICAgU2hvdWxkIGJlIGNhbGxlZCB1bmRlciB0aGUgY29udGV4dCBvZiBJU1IKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RtYWNId19JTlRFUlJVUFRfU1RBVFVTX2UgZG1hY0h3X2dldEludGVycnVwdFN0YXR1cyhkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKyAgICApIHsKKwlkbWFjSHdfQ0JMS190ICpwQ2JsayA9IGRtYWNId19IQU5ETEVfVE9fQ0JMSyhoYW5kbGUpOworCWRtYWNId19JTlRFUlJVUFRfU1RBVFVTX2Ugc3RhdHVzID0gZG1hY0h3X0lOVEVSUlVQVF9TVEFUVVNfTk9ORTsKKworCWlmIChkbWFjSHdfUkVHX0lOVF9TVEFUX1RSQU4ocENibGstPm1vZHVsZSkgJgorCSAgICAoKDB4MDAwMDAwMDEgPDwgcENibGstPmNoYW5uZWwpKSkgeworCQlzdGF0dXMgfD0gZG1hY0h3X0lOVEVSUlVQVF9TVEFUVVNfVFJBTlM7CisJfQorCWlmIChkbWFjSHdfUkVHX0lOVF9TVEFUX0JMT0NLKHBDYmxrLT5tb2R1bGUpICYKKwkgICAgKCgweDAwMDAwMDAxIDw8IHBDYmxrLT5jaGFubmVsKSkpIHsKKwkJc3RhdHVzIHw9IGRtYWNId19JTlRFUlJVUFRfU1RBVFVTX0JMT0NLOworCX0KKwlpZiAoZG1hY0h3X1JFR19JTlRfU1RBVF9FUlJPUihwQ2Jsay0+bW9kdWxlKSAmCisJICAgICgoMHgwMDAwMDAwMSA8PCBwQ2Jsay0+Y2hhbm5lbCkpKSB7CisJCXN0YXR1cyB8PSBkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19FUlJPUjsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgSW5kZW50aWZpZXMgYSBETUEgY2hhbm5lbCBjYXVzaW5nIGludGVycnVwdAorKgorKiAgVGhpcyBmdW5jdGlvbnMgcmV0dXJucyBhIGNoYW5uZWwgY2F1c2luZyBpbnRlcnJ1cHQgb2YgdHlwZSBkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19lCisqCisqICBAcmV0dXJuICBOVUxMICAgOiBObyBjaGFubmVsIGNhdXNpbmcgRE1BIGludGVycnVwdAorKiAgICAgICAgICAgISBOVUxMIDogSGFuZGxlIHRvIGEgY2hhbm5lbCBjYXVzaW5nIERNQSBpbnRlcnJ1cHQKKyogIEBub3RlCisqICAgICBkbWFjSHdfY2xlYXJJbnRlcnJ1cHQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgdmFsaWQgaGFuZGxlIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZG1hY0h3X0hBTkRMRV90IGRtYWNId19nZXRJbnRlcnJ1cHRTb3VyY2Uodm9pZCkKK3sKKwl1aW50MzJfdCBpOworCisJZm9yIChpID0gMDsgaSA8IGRtYUNoYW5uZWxDb3VudF8wICsgZG1hQ2hhbm5lbENvdW50XzE7IGkrKykgeworCQlpZiAoKGRtYWNId19SRUdfSU5UX1NUQVRfVFJBTihkbWFjSHdfZ0NibGtbaV0ubW9kdWxlKSAmCisJCSAgICAgKCgweDAwMDAwMDAxIDw8IGRtYWNId19nQ2Jsa1tpXS5jaGFubmVsKSkpCisJCSAgICB8fCAoZG1hY0h3X1JFR19JTlRfU1RBVF9CTE9DSyhkbWFjSHdfZ0NibGtbaV0ubW9kdWxlKSAmCisJCQkoKDB4MDAwMDAwMDEgPDwgZG1hY0h3X2dDYmxrW2ldLmNoYW5uZWwpKSkKKwkJICAgIHx8IChkbWFjSHdfUkVHX0lOVF9TVEFUX0VSUk9SKGRtYWNId19nQ2Jsa1tpXS5tb2R1bGUpICYKKwkJCSgoMHgwMDAwMDAwMSA8PCBkbWFjSHdfZ0NibGtbaV0uY2hhbm5lbCkpKQorCQkgICAgKSB7CisJCQlyZXR1cm4gZG1hY0h3X0NCTEtfVE9fSEFORExFKCZkbWFjSHdfZ0NibGtbaV0pOworCQl9CisJfQorCXJldHVybiBkbWFjSHdfQ0JMS19UT19IQU5ETEUoTlVMTCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIEVzdGltYXRlcyBudW1iZXIgb2YgZGVzY3JpcHRvciBuZWVkZWQgdG8gcGVyZm9ybSBjZXJ0YWluIERNQSB0cmFuc2ZlcgorKgorKgorKiAgQHJldHVybiAgT24gZmFpbHVyZSA6IC0xCisqICAgICAgICAgICBPbiBzdWNjZXNzIDogTnVtYmVyIG9mIGRlc2NyaXB0b3IgY291bnQKKyoKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkbWFjSHdfY2FsY3VsYXRlRGVzY3JpcHRvckNvdW50KGRtYWNId19DT05GSUdfdCAqcENvbmZpZywJLyogICBbIElOIF0gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworCQkJCSAgICB2b2lkICpwU3JjQWRkciwJLyogICBbIElOIF0gU291cmNlIChQZXJpcGhlcmFsL01lbW9yeSkgYWRkcmVzcyAqLworCQkJCSAgICB2b2lkICpwRHN0QWRkciwJLyogICBbIElOIF0gRGVzdGluYXRpb24gKFBlcmlwaGVyYWwvTWVtb3J5KSBhZGRyZXNzICovCisJCQkJICAgIHNpemVfdCBkYXRhTGVuCS8qICAgWyBJTiBdIERhdGEgbGVuZ3RoIGluIGJ5dGVzICovCisgICAgKSB7CisJaW50IHNyY1RzID0gMDsKKwlpbnQgb2RkU2l6ZSA9IDA7CisJaW50IGRlc2NDb3VudCA9IDA7CisJaW50IGRzdFRyU2l6ZSA9IDA7CisJaW50IHNyY1RyU2l6ZSA9IDA7CisJdWludDMyX3QgbWF4QmxvY2tTaXplID0gZG1hY0h3X01BWF9CTE9DS1NJWkU7CisJZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIX2UgZHN0VHJXaWR0aDsKKwlkbWFjSHdfVFJBTlNBQ1RJT05fV0lEVEhfZSBzcmNUcldpZHRoOworCisJZHN0VHJTaXplID0gZG1hY0h3X0dldFRyV2lkdGhJbkJ5dGVzKHBDb25maWctPmRzdE1heFRyYW5zYWN0aW9uV2lkdGgpOworCXNyY1RyU2l6ZSA9IGRtYWNId19HZXRUcldpZHRoSW5CeXRlcyhwQ29uZmlnLT5zcmNNYXhUcmFuc2FjdGlvbldpZHRoKTsKKworCS8qIFNraXAgVHggaWYgYnVmZmVyIGlzIE5VTEwgIG9yIGxlbmd0aCBpcyB1bmtub3duICovCisJaWYgKChwU3JjQWRkciA9PSBOVUxMKSB8fCAocERzdEFkZHIgPT0gTlVMTCkgfHwgKGRhdGFMZW4gPT0gMCkpIHsKKwkJLyogRG8gbm90IGluaXRpYXRlIHRyYW5zZmVyICovCisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBFbnN1cmUgc2NhdHRlciBhbmQgZ2F0aGVyIGFyZSB0cmFuc2FjdGlvbiBhbGlnbmVkICovCisJaWYgKHBDb25maWctPnNyY0dhdGhlcldpZHRoICUgc3JjVHJTaXplCisJICAgIHx8IHBDb25maWctPmRzdFNjYXR0ZXJXaWR0aCAlIGRzdFRyU2l6ZSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgICBCYWNrZ3JvdW5kIDE6IERNQUMgY2FuIG5vdCBwZXJmb3JtIERNQSBpZiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUKKwkgICBub3QgcHJvcGVybHkgYWxpZ25lZCB3aXRoIHRoZSBjaGFubmVsJ3MgdHJhbnNhY3Rpb24gd2lkdGguIFNvLCBmb3Igc3VjY2Vzc2Z1bAorCSAgIERNQSB0cmFuc2ZlciwgdHJhbnNhY3Rpb24gd2lkdGggbXVzdCBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBhbGlnbm1lbnQgb2YgdGhlCisJICAgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzLgorCSAqLworCisJLyogQWRqdXN0IGRlc3RpbmF0aW9uIHRyYW5zYWN0aW9uIHdpZHRoIGlmIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgbm90IGFsaWduZWQgcHJvcGVybHkgKi8KKwlkc3RUcldpZHRoID0gcENvbmZpZy0+ZHN0TWF4VHJhbnNhY3Rpb25XaWR0aDsKKwl3aGlsZSAoZG1hY0h3X0FERFJFU1NfTUFTSyhkc3RUclNpemUpICYgKHVpbnQzMl90KSBwRHN0QWRkcikgeworCQlkc3RUcldpZHRoID0gZG1hY0h3X0dldE5leHRUcldpZHRoKGRzdFRyV2lkdGgpOworCQlkc3RUclNpemUgPSBkbWFjSHdfR2V0VHJXaWR0aEluQnl0ZXMoZHN0VHJXaWR0aCk7CisJfQorCisJLyogQWRqdXN0IHNvdXJjZSB0cmFuc2FjdGlvbiB3aWR0aCBpZiBzb3VyY2UgYWRkcmVzcyBpcyBub3QgYWxpZ25lZCBwcm9wZXJseSAqLworCXNyY1RyV2lkdGggPSBwQ29uZmlnLT5zcmNNYXhUcmFuc2FjdGlvbldpZHRoOworCXdoaWxlIChkbWFjSHdfQUREUkVTU19NQVNLKHNyY1RyU2l6ZSkgJiAodWludDMyX3QpIHBTcmNBZGRyKSB7CisJCXNyY1RyV2lkdGggPSBkbWFjSHdfR2V0TmV4dFRyV2lkdGgoc3JjVHJXaWR0aCk7CisJCXNyY1RyU2l6ZSA9IGRtYWNId19HZXRUcldpZHRoSW5CeXRlcyhzcmNUcldpZHRoKTsKKwl9CisKKwkvKiBGaW5kIHRoZSBtYXhpbXVtIHRyYW5zYWN0aW9uIHBlciBkZXNjcmlwdG9yICovCisJaWYgKHBDb25maWctPm1heERhdGFQZXJCbG9jaworCSAgICAmJiAoKHBDb25maWctPm1heERhdGFQZXJCbG9jayAvIHNyY1RyU2l6ZSkgPAorCQlkbWFjSHdfTUFYX0JMT0NLU0laRSkpIHsKKwkJbWF4QmxvY2tTaXplID0gcENvbmZpZy0+bWF4RGF0YVBlckJsb2NrIC8gc3JjVHJTaXplOworCX0KKworCS8qIEZpbmQgbnVtYmVyIG9mIHNvdXJjZSB0cmFuc2FjdGlvbnMgbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBETUEgdHJhbnNmZXIgKi8KKwlzcmNUcyA9IGRhdGFMZW4gLyBzcmNUclNpemU7CisJLyogRmluZCB0aGUgb2RkIG51bWJlciBvZiBieXRlcyB0aGF0IG5lZWQgdG8gYmUgdHJhbnNmZXJyZWQgYXMgc2luZ2xlIGJ5dGUgdHJhbnNhY3Rpb24gd2lkdGggKi8KKwlpZiAoc3JjVHMgJiYgKGRzdFRyU2l6ZSA+IHNyY1RyU2l6ZSkpIHsKKwkJb2RkU2l6ZSA9IGRhdGFMZW4gJSBkc3RUclNpemU7CisJCS8qIEFkanVzdCBzb3VyY2UgdHJhbnNhY3Rpb24gY291bnQgZHVlIHRvICJvZGRTaXplIiAqLworCQlzcmNUcyA9IHNyY1RzIC0gKG9kZFNpemUgLyBzcmNUclNpemUpOworCX0gZWxzZSB7CisJCW9kZFNpemUgPSBkYXRhTGVuICUgc3JjVHJTaXplOworCX0KKwkvKiBBZGp1c3QgImRlc2NDb3VudCIgZHVlIHRvICJvZGRTaXplIiAqLworCWlmIChvZGRTaXplKSB7CisJCWRlc2NDb3VudCsrOworCX0KKworCS8qIEZpbmQgdGhlIG51bWJlciBvZiBkZXNjcmlwdG9yIG5lZWRlZCBmb3IgdG90YWwgInNyY1RzIiAqLworCWlmIChzcmNUcykgeworCQlkZXNjQ291bnQgKz0gKChzcmNUcyAtIDEpIC8gbWF4QmxvY2tTaXplKSArIDE7CisJfQorCisJcmV0dXJuIGRlc2NDb3VudDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENoZWNrIHRoZSBleGlzdGFuY2Ugb2YgcGVuZGluZyBkZXNjcmlwdG9yCisqCisqICBUaGlzIGZ1bmN0aW9uIGNvbmZpcm1lcyBpZiB0aGVyZSBpcyBhbnkgcGVuZGluZyBkZXNjcmlwdG9yIGluIHRoZSBjaGFpbgorKiAgdG8gcHJvZ3JhbSB0aGUgY2hhbm5lbAorKgorKiAgQHJldHVybiAgMSA6IENoYW5uZWwgbmVlZCB0byBiZSBwcm9ncmFtbWVkIHdpdGggcGVuZGluZyBkZXNjcmlwdG9yCisqICAgICAgICAgICAwIDogTm8gbW9yZSBwZW5kaW5nIGRlc2NyaXB0b3IgdG8gcHJvZ3JhbWUgdGhlIGNoYW5uZWwKKyoKKyogIEBub3RlCisqICAgICAtIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIElTUiBpbiBjYXNlIHRoZXJlIGFyZSBwZW5kaW5nCisqICAgICAgIGRlc2NyaXB0b3IgdG8gcHJvZ3JhbSB0aGUgY2hhbm5lbC4KKyoKKyogICAgIEV4YW1wbGU6CisqCisqICAgICBkbWFjX2lzciAoKQorKiAgICAgeworKiAgICAgICAgIC4uLgorKiAgICAgICAgIGlmIChkbWFjSHdfZGVzY3JpcHRvclBlbmRpbmcgKGhhbmRsZSkpCisqICAgICAgICAgeworKiAgICAgICAgICAgIGRtYWNId19pbml0aWF0ZVRyYW5zZmVyIChoYW5kbGUpOworKiAgICAgICAgIH0KKyogICAgIH0KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IGRtYWNId19kZXNjcmlwdG9yUGVuZGluZyhkbWFjSHdfSEFORExFX3QgaGFuZGxlLAkvKiAgIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKwkJCQkgIHZvaWQgKnBEZXNjcmlwdG9yCS8qICAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICovCisgICAgKSB7CisJZG1hY0h3X0NCTEtfdCAqcENibGsgPSBkbWFjSHdfSEFORExFX1RPX0NCTEsoaGFuZGxlKTsKKwlkbWFjSHdfREVTQ19SSU5HX3QgKnBSaW5nID0gZG1hY0h3X0dFVF9ERVNDX1JJTkcocERlc2NyaXB0b3IpOworCisJLyogTWFrZSBzdXJlIGNoYW5uZWwgaXMgbm90IGJ1c3kgKi8KKwlpZiAoIUNIQU5ORUxfQlVTWShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCkpIHsKKwkJLyogQ2hlY2sgaWYgcEVuZCBpcyBub3QgcHJvY2Vzc2VkICovCisJCWlmIChwUmluZy0+cEVuZCkgeworCQkJLyogU29tZXRoaW5nIGxlZnQgZm9yIHByb2Nlc3NpbmcgKi8KKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUHJvZ3JhbSBjaGFubmVsIHJlZ2lzdGVyIHRvIHN0b3AgdHJhbnNmZXIKKyoKKyogIEVuc3VyZXMgdGhlIGNoYW5uZWwgaXMgbm90IGRvaW5nIGFueSB0cmFuc2ZlciBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyoKKyogIEByZXR1cm4gIHZvaWQKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG1hY0h3X3N0b3BUcmFuc2ZlcihkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qICAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrOworCisJcENibGsgPSBkbWFjSHdfSEFORExFX1RPX0NCTEsoaGFuZGxlKTsKKworCS8qIFN0b3AgdGhlIGNoYW5uZWwgKi8KKwlkbWFjSHdfRE1BX1NUT1AocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGVhbGxvY2F0ZXMgc291cmNlIG9yIGRlc3RpbmF0aW9uIG1lbW9yeSwgYWxsb2NhdGVkCisqCisqICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgdG8gZGVhbGxvY2F0ZSBkYXRhIG1lbW9yeSB0aGF0IHdhcyBETUFlZCBzdWNjZXNzZnVsbHkKKyoKKyogIEByZXR1cm4gIE9uIGZhaWx1cmUgOiAtMQorKiAgICAgICAgICAgT24gc3VjY2VzcyA6IE51bWJlciBvZiBidWZmZXIgZnJlZWQKKyoKKyogIEBub3RlCisqICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIE9OTFksIHdoZW4gc291cmNlIE9SIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgcG9pbnRpbmcKKyogICAgIHRvIGR5bmFtaWMgbWVtb3J5CisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X2ZyZWVNZW0oZG1hY0h3X0NPTkZJR190ICpwQ29uZmlnLAkvKiAgIFsgSU4gXSBDb25maWd1cmF0aW9uIHNldHRpbmdzICovCisJCSAgIHZvaWQgKnBEZXNjcmlwdG9yLAkvKiAgIFsgSU4gXSBEZXNjcmlwdG9yIGJ1ZmZlciAqLworCQkgICB2b2lkICgqZnBGcmVlKSAodm9pZCAqKQkvKiAgIFsgSU4gXSBGdW5jdGlvbiBwb2ludGVyIHRvIGZyZWUgZGF0YSBtZW1vcnkgKi8KKyAgICApIHsKKwlkbWFjSHdfREVTQ19SSU5HX3QgKnBSaW5nID0gZG1hY0h3X0dFVF9ERVNDX1JJTkcocERlc2NyaXB0b3IpOworCXVpbnQzMl90IGNvdW50ID0gMDsKKworCWlmIChmcEZyZWUgPT0gTlVMTCkgeworCQlyZXR1cm4gLTE7CisJfQorCisJd2hpbGUgKChwUmluZy0+cEZyZWUgIT0gcFJpbmctPnBUYWlsKQorCSAgICAgICAmJiAocFJpbmctPnBGcmVlLT5jdGwubG8gJiBkbWFjSHdfREVTQ19GUkVFKSkgeworCQlpZiAocFJpbmctPnBGcmVlLT5kZXZDdGwgPT0gZG1hY0h3X0ZSRUVfVVNFUl9NRU1PUlkpIHsKKwkJCS8qIElkZW50aWZ5LCB3aGljaCBtZW1vcnkgdG8gZnJlZSAqLworCQkJaWYgKGRtYWNId19EU1RfSVNfTUVNT1JZKHBDb25maWctPnRyYW5zZmVyVHlwZSkpIHsKKwkJCQkoKmZwRnJlZSkgKCh2b2lkICopcFJpbmctPnBGcmVlLT5kYXIpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBEZXN0aW5hdGlvbiB3YXMgYSBwZXJpcGhlcmFsICovCisJCQkJKCpmcEZyZWUpICgodm9pZCAqKXBSaW5nLT5wRnJlZS0+c2FyKTsKKwkJCX0KKwkJCS8qIFVubWFyayB1c2VyIG1lbW9yeSB0byBpbmRpY2F0ZSBpdCBpcyBmcmVlZCAqLworCQkJcFJpbmctPnBGcmVlLT5kZXZDdGwgPSB+ZG1hY0h3X0ZSRUVfVVNFUl9NRU1PUlk7CisJCX0KKwkJZG1hY0h3X05FWFRfREVTQyhwUmluZywgcEZyZWUpOworCisJCWNvdW50Kys7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUHJlcGFyZXMgZGVzY3JpcHRvciByaW5nLCB3aGVuIHNvdXJjZSBwZXJpcGhlcmFsIHdvcmtpbmcgYXMgYSBmbG93IGNvbnRyb2xsZXIKKyoKKyogIFRoaXMgZnVuY3Rpb24gd2lsbCB1cGRhdGUgdGhlIGRpc2NyaXB0b3IgcmluZyBieSBhbGxvY2F0aW5nIGJ1ZmZlcnMsIHdoZW4gc291cmNlIHBlcmlwaGVyYWwKKyogIGhhcyB0byB3b3JrIGFzIGEgZmxvdyBjb250cm9sbGVyIHRvIHRyYW5zZmVyIGRhdGEgZnJvbToKKyogICAgICAgICAgIC0gUGVyaXBoZXJhbCB0byBtZW1vcnkuCisqCisqICBAcmV0dXJuICBPbiBmYWlsdXJlIDogLTEKKyogICAgICAgICAgIE9uIHN1Y2Nlc3MgOiBOdW1iZXIgb2YgZGVzY3JpcHRvciB1cGRhdGVkCisqCisqCisqICBAbm90ZQorKiAgICAgQ2hhbm5lbCBtdXN0IGJlIGNvbmZpZ3VyZWQgZm9yIHBlcmlwaGVyYWwgdG8gbWVtb3J5IHRyYW5zZmVyCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X3NldFZhcmlhYmxlRGF0YURlc2NyaXB0b3IoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICovCisJCQkJICAgICBkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCQkgICAgIHZvaWQgKnBEZXNjcmlwdG9yLAkvKiAgIFsgSU4gXSBEZXNjcmlwdG9yIGJ1ZmZlciAqLworCQkJCSAgICAgdWludDMyX3Qgc3JjQWRkciwJLyogICBbIElOIF0gU291cmNlIHBlcmlwaGVyYWwgYWRkcmVzcyAqLworCQkJCSAgICAgdm9pZCAqKCpmcEFsbG9jKSAoaW50IGxlbiksCS8qICAgWyBJTiBdIEZ1bmN0aW9uIHBvaW50ZXIgIHRoYXQgcHJvdmlkZXMgZGVzdGluYXRpb24gbWVtb3J5ICovCisJCQkJICAgICBpbnQgbGVuLAkvKiAgIFsgSU4gXSBOdW1iZXIgb2YgYnl0ZXMgImZwQWxsb2MiIHdpbGwgYWxsb2NhdGUgZm9yIGRlc3RpbmF0aW9uICovCisJCQkJICAgICBpbnQgbnVtCS8qICAgWyBJTiBdIE51bWJlciBvZiBkZXNjcmlwdG9yIHRvIHNldCAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisJZG1hY0h3X0RFU0NfdCAqcFByb2cgPSBOVUxMOworCWRtYWNId19ERVNDX3QgKnBMYXN0ID0gTlVMTDsKKwlkbWFjSHdfREVTQ19SSU5HX3QgKnBSaW5nID0gZG1hY0h3X0dFVF9ERVNDX1JJTkcocERlc2NyaXB0b3IpOworCXVpbnQzMl90IGRzdEFkZHI7CisJdWludDMyX3QgY29udHJvbFBhcmFtOworCWludCBpOworCisJZG1hY0h3X0FTU0VSVChwQ29uZmlnLT50cmFuc2ZlclR5cGUgPT0KKwkJICAgICAgZG1hY0h3X1RSQU5TRkVSX1RZUEVfUEVSSVBIRVJBTF9UT19NRU0pOworCisJaWYgKG51bSA+IHBSaW5nLT5udW0pIHsKKwkJcmV0dXJuIC0xOworCX0KKworCXBMYXN0ID0gcFJpbmctPnBFbmQ7CS8qIExhc3QgZGVzY3JpcHRvciB1cGRhdGVkICovCisJcFByb2cgPSBwUmluZy0+cEhlYWQ7CS8qIEZpcnN0IGRlc2NyaXB0b3IgaW4gdGhlIG5ldyBsaXN0ICovCisKKwljb250cm9sUGFyYW0gPSBwQ29uZmlnLT5zcmNVcGRhdGUgfAorCSAgICBwQ29uZmlnLT5kc3RVcGRhdGUgfAorCSAgICBwQ29uZmlnLT5zcmNNYXhUcmFuc2FjdGlvbldpZHRoIHwKKwkgICAgcENvbmZpZy0+ZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCB8CisJICAgIHBDb25maWctPnNyY01hc3RlckludGVyZmFjZSB8CisJICAgIHBDb25maWctPmRzdE1hc3RlckludGVyZmFjZSB8CisJICAgIHBDb25maWctPnNyY01heEJ1cnN0V2lkdGggfAorCSAgICBwQ29uZmlnLT5kc3RNYXhCdXJzdFdpZHRoIHwKKwkgICAgZG1hY0h3X1JFR19DVExfVFRGQ19QTV9QRVJJIHwKKwkgICAgZG1hY0h3X1JFR19DVExfTExQX0RTVF9FTiB8CisJICAgIGRtYWNId19SRUdfQ1RMX0xMUF9TUkNfRU4gfCBkbWFjSHdfUkVHX0NUTF9JTlRfRU47CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJLyogQWxsb2NhdGUgUnggYnVmZmVyIG9ubHkgZm9yIGlkbGUgZGVzY3JpcHRvciAqLworCQlpZiAoKChwUmluZy0+cEhlYWQtPmN0bC5oaSAmIGRtYWNId19ERVNDX0ZSRUUpID09IDApIHx8CisJCSAgICAoKGRtYWNId19ERVNDX3QgKikgcFJpbmctPnBIZWFkLT5sbHAgPT0gcFJpbmctPnBUYWlsKQorCQkgICAgKSB7CisJCQkvKiBSeCBkZXNjcmlwdG9yIGlzIG5vdCBpZGxlICovCisJCQlicmVhazsKKwkJfQorCQkvKiBTZXQgc291cmNlIGFkZHJlc3MgKi8KKwkJcFJpbmctPnBIZWFkLT5zYXIgPSBzcmNBZGRyOworCQlpZiAoZnBBbGxvYykgeworCQkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXIgaW4gZGVzY3JpcHRvciAqLworCQkJZHN0QWRkciA9ICh1aW50MzJfdCkgKCpmcEFsbG9jKSAobGVuKTsKKwkJCS8qIENoZWNrIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisJCQlpZiAoZHN0QWRkciA9PSAwKSB7CisJCQkJaWYgKGkgPT0gMCkgeworCQkJCQkvKiBOb3QgYSBzaW5nbGUgZGVzY3JpcHRvciBpcyBhdmFpbGFibGUgKi8KKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIFNldCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisJCQlwUmluZy0+cEhlYWQtPmRhciA9IGRzdEFkZHI7CisJCX0KKwkJLyogU2V0IGNvbnRyb2wgaW5mb3JtYXRpb24gKi8KKwkJcFJpbmctPnBIZWFkLT5jdGwubG8gPSBjb250cm9sUGFyYW07CisJCS8qIFVzZSAiZGV2Q3RsIiB0byBtYXJrIHRoZSBtZW1vcnkgdGhhdCBuZWVkIHRvIGJlIGZyZWVkIGxhdGVyICovCisJCXBSaW5nLT5wSGVhZC0+ZGV2Q3RsID0gZG1hY0h3X0ZSRUVfVVNFUl9NRU1PUlk7CisJCS8qIERlc2NyaXB0b3IgaXMgbm93IG93bmVkIGJ5IHRoZSBjaGFubmVsICovCisJCXBSaW5nLT5wSGVhZC0+Y3RsLmhpID0gMDsKKwkJLyogUmVtZW1iZXIgdGhlIGRlc2NyaXB0b3IgbGFzdCB1cGRhdGVkICovCisJCXBSaW5nLT5wRW5kID0gcFJpbmctPnBIZWFkOworCQkvKiBVcGRhdGUgbmV4dCBkZXNjcmlwdG9yICovCisJCWRtYWNId19ORVhUX0RFU0MocFJpbmcsIHBIZWFkKTsKKwl9CisKKwkvKiBNYXJrIHRoZSBlbmQgb2YgdGhlIGxpc3QgKi8KKwlwUmluZy0+cEVuZC0+Y3RsLmxvICY9CisJICAgIH4oZG1hY0h3X1JFR19DVExfTExQX0RTVF9FTiB8IGRtYWNId19SRUdfQ1RMX0xMUF9TUkNfRU4pOworCS8qIENvbm5lY3QgdGhlIGxpc3QgKi8KKwlpZiAocExhc3QgIT0gcFByb2cpIHsKKwkJcExhc3QtPmN0bC5sbyB8PQorCQkgICAgZG1hY0h3X1JFR19DVExfTExQX0RTVF9FTiB8IGRtYWNId19SRUdfQ1RMX0xMUF9TUkNfRU47CisJfQorCS8qIE1hcmsgdGhlIGRlc2NyaXB0b3JzIGFyZSB1cGRhdGVkICovCisJcENibGstPmRlc2NVcGRhdGVkID0gMTsKKwlpZiAoIXBDYmxrLT52YXJEYXRhU3RhcnRlZCkgeworCQkvKiBMTFAgbXVzdCBiZSBwb2ludGluZyB0byB0aGUgZmlyc3QgZGVzY3JpcHRvciAqLworCQlkbWFjSHdfU0VUX0xMUChwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCwKKwkJCSAgICAgICAodWludDMyX3QpIHBQcm9nIC0gcFJpbmctPnZpcnQyUGh5T2Zmc2V0KTsKKwkJLyogQ2hhbm5lbCwgaGFuZGxpbmcgdmFyaWFibGUgZGF0YSBzdGFydGVkICovCisJCXBDYmxrLT52YXJEYXRhU3RhcnRlZCA9IDE7CisJfQorCisJcmV0dXJuIGk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBSZWFkIGRhdGEgRE1BZWQgdG8gbWVtb3J5CisqCisqICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBkYXRhIHRoYXQgaGFzIGJlZW4gRE1BZWQgdG8gbWVtb3J5IHdoaWxlIHRyYW5zZmVyaW5nIGZyb206CisqICAgICAgICAgIC0gTWVtb3J5IHRvIG1lbW9yeQorKiAgICAgICAgICAtIFBlcmlwaGVyYWwgdG8gbWVtb3J5CisqCisqICBAcGFyYW0gICAgaGFuZGxlICAgICAtCisqICBAcGFyYW0gICAgcHBCYnVmICAgICAtCisqICBAcGFyYW0gICAgcExlbiAgICAgICAtCisqCisqICBAcmV0dXJuICAwIC0gTm8gbW9yZSBkYXRhIGlzIGF2YWlsYWJsZSB0byByZWFkCisqICAgICAgICAgICAxIC0gTW9yZSBkYXRhIG1pZ2h0IGJlIGF2YWlsYWJsZSB0byByZWFkCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X3JlYWRUcmFuc2ZlcnJlZERhdGEoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKwkJCSAgICAgICBkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICAgWyBJTiBdICBDb25maWd1cmF0aW9uIHNldHRpbmdzICovCisJCQkgICAgICAgdm9pZCAqcERlc2NyaXB0b3IsCS8qICAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICovCisJCQkgICAgICAgdm9pZCAqKnBwQmJ1ZiwJLyogICBbIE9VVCBdIERhdGEgcmVjZWl2ZWQgKi8KKwkJCSAgICAgICBzaXplX3QgKnBMbGVuCS8qICAgWyBPVVQgXSBMZW5ndGggb2YgdGhlIGRhdGEgcmVjZWl2ZWQgKi8KKyAgICApIHsKKwlkbWFjSHdfREVTQ19SSU5HX3QgKnBSaW5nID0gZG1hY0h3X0dFVF9ERVNDX1JJTkcocERlc2NyaXB0b3IpOworCisJKHZvaWQpaGFuZGxlOworCisJaWYgKHBDb25maWctPnRyYW5zZmVyTW9kZSAhPSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9DT05USU5VT1VTKSB7CisJCWlmICgoKHBSaW5nLT5wVGFpbC0+Y3RsLmhpICYgZG1hY0h3X0RFU0NfRlJFRSkgPT0gMCkgfHwKKwkJICAgIChwUmluZy0+cFRhaWwgPT0gcFJpbmctPnBIZWFkKQorCQkgICAgKSB7CisJCQkvKiBObyByZWNlaXZlIGRhdGEgYXZhaWxhYmxlICovCisJCQkqcHBCYnVmID0gKGNoYXIgKilOVUxMOworCQkJKnBMbGVuID0gMDsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBSZXR1cm4gcmVhZCBidWZmZXIgYW5kIGxlbmd0aCAqLworCSpwcEJidWYgPSAoY2hhciAqKXBSaW5nLT5wVGFpbC0+ZGFyOworCisJLyogRXh0cmFjdCBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIGRhdGEgKi8KKwlpZiAoRG1hSXNGbG93Q29udHJvbGxlcihwRGVzY3JpcHRvcikpIHsKKwkJdWludDMyX3Qgc3JjVHJTaXplID0gMDsKKworCQlzd2l0Y2ggKHBSaW5nLT5wVGFpbC0+Y3RsLmxvICYgZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIX01BU0spIHsKKwkJY2FzZSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfODoKKwkJCXNyY1RyU2l6ZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfMTY6CisJCQlzcmNUclNpemUgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIXzMyOgorCQkJc3JjVHJTaXplID0gNDsKKwkJCWJyZWFrOworCQljYXNlIGRtYWNId19SRUdfQ1RMX1NSQ19UUl9XSURUSF82NDoKKwkJCXNyY1RyU2l6ZSA9IDg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRtYWNId19BU1NFUlQoMCk7CisJCX0KKwkJLyogQ2FsY3VsYXRlIGxlbmd0aCBmcm9tIHRoZSBibG9jayBzaXplICovCisJCSpwTGxlbiA9CisJCSAgICAocFJpbmctPnBUYWlsLT5jdGwuaGkgJiBkbWFjSHdfUkVHX0NUTF9CTE9DS19UU19NQVNLKSAqCisJCSAgICBzcmNUclNpemU7CisJfSBlbHNlIHsKKwkJLyogRXh0cmFjdCBsZW5ndGggZnJvbSB0aGUgc291cmNlIHBlcmlwaGVyYWwgKi8KKwkJKnBMbGVuID0gcFJpbmctPnBUYWlsLT5zc3RhdDsKKwl9CisKKwkvKiBBZHZhbmNlIHRhaWwgdG8gbmV4dCBkZXNjcmlwdG9yICovCisJZG1hY0h3X05FWFRfREVTQyhwUmluZywgcFRhaWwpOworCisJcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgZGVzY3JpcHRvciBjYXJyeWluZyBjb250cm9sIGluZm9ybWF0aW9uCisqCisqICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB0byBzZW5kIHNwZWNpZmljIGNvbnRyb2wgaW5mb3JtYXRpb24gdG8gdGhlIGRldmljZQorKiAgdXNpbmcgdGhlIERNQSBjaGFubmVsCisqCisqCisqICBAcmV0dXJuICAtMSAtIE9uIGZhaWx1cmUKKyogICAgICAgICAgICAwIC0gT24gc3VjY2VzcworKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkbWFjSHdfc2V0Q29udHJvbERlc2NyaXB0b3IoZG1hY0h3X0NPTkZJR190ICpwQ29uZmlnLAkvKiAgIFsgSU4gXSBDb25maWd1cmF0aW9uIHNldHRpbmdzICovCisJCQkJdm9pZCAqcERlc2NyaXB0b3IsCS8qICAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICovCisJCQkJdWludDMyX3QgY3RsQWRkcmVzcywJLyogICBbIElOIF0gQWRkcmVzcyBvZiB0aGUgZGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJCQl1aW50MzJfdCBjb250cm9sCS8qICAgWyBJTiBdIERldmljZSBjb250cm9sIGluZm9ybWF0aW9uICovCisgICAgKSB7CisJZG1hY0h3X0RFU0NfUklOR190ICpwUmluZyA9IGRtYWNId19HRVRfREVTQ19SSU5HKHBEZXNjcmlwdG9yKTsKKworCWlmIChjdGxBZGRyZXNzID09IDApIHsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIENoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgZGVzY3JpcHRvcnMgaW4gdGhlIHJpbmcgKi8KKwlpZiAoKHBSaW5nLT5wSGVhZC0+Y3RsLmhpICYgZG1hY0h3X0RFU0NfRlJFRSkgPT0gMCkgeworCQlyZXR1cm4gLTE7CisJfQorCS8qIFNldCBjb250cm9sIGluZm9ybWF0aW9uICovCisJcFJpbmctPnBIZWFkLT5kZXZDdGwgPSBjb250cm9sOworCS8qIFNldCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKwlwUmluZy0+cEhlYWQtPnNhciA9ICh1aW50MzJfdCkgJnBSaW5nLT5wSGVhZC0+ZGV2Q3RsOworCXBSaW5nLT5wSGVhZC0+ZGFyID0gY3RsQWRkcmVzczsKKwkvKiBTZXQgY29udHJvbCBwYXJhbWV0ZXJzICovCisJaWYgKHBDb25maWctPmZsb3dDb250cm9sZXIgPT0gZG1hY0h3X0ZMT1dfQ09OVFJPTF9ETUEpIHsKKwkJcFJpbmctPnBIZWFkLT5jdGwubG8gPSBwQ29uZmlnLT50cmFuc2ZlclR5cGUgfAorCQkgICAgZG1hY0h3X1NSQ19BRERSRVNTX1VQREFURV9NT0RFX0lOQyB8CisJCSAgICBkbWFjSHdfRFNUX0FERFJFU1NfVVBEQVRFX01PREVfSU5DIHwKKwkJICAgIGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfMzIgfAorCQkgICAgcENvbmZpZy0+ZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCB8CisJCSAgICBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzAgfAorCQkgICAgZG1hY0h3X0RTVF9CVVJTVF9XSURUSF8wIHwKKwkJICAgIHBDb25maWctPnNyY01hc3RlckludGVyZmFjZSB8CisJCSAgICBwQ29uZmlnLT5kc3RNYXN0ZXJJbnRlcmZhY2UgfCBkbWFjSHdfUkVHX0NUTF9JTlRfRU47CisJfSBlbHNlIHsKKwkJdWludDMyX3QgdHJhbnNmZXJUeXBlID0gMDsKKwkJc3dpdGNoIChwQ29uZmlnLT50cmFuc2ZlclR5cGUpIHsKKwkJY2FzZSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTToKKwkJCXRyYW5zZmVyVHlwZSA9IGRtYWNId19SRUdfQ1RMX1RURkNfUE1fUEVSSTsKKwkJCWJyZWFrOworCQljYXNlIGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMOgorCQkJdHJhbnNmZXJUeXBlID0gZG1hY0h3X1JFR19DVExfVFRGQ19NUF9QRVJJOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkbWFjSHdfQVNTRVJUKDApOworCQl9CisJCXBSaW5nLT5wSGVhZC0+Y3RsLmxvID0gdHJhbnNmZXJUeXBlIHwKKwkJICAgIGRtYWNId19TUkNfQUREUkVTU19VUERBVEVfTU9ERV9JTkMgfAorCQkgICAgZG1hY0h3X0RTVF9BRERSRVNTX1VQREFURV9NT0RFX0lOQyB8CisJCSAgICBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzMyIHwKKwkJICAgIHBDb25maWctPmRzdE1heFRyYW5zYWN0aW9uV2lkdGggfAorCQkgICAgZG1hY0h3X1NSQ19CVVJTVF9XSURUSF8wIHwKKwkJICAgIGRtYWNId19EU1RfQlVSU1RfV0lEVEhfMCB8CisJCSAgICBwQ29uZmlnLT5zcmNNYXN0ZXJJbnRlcmZhY2UgfAorCQkgICAgcENvbmZpZy0+ZHN0TWFzdGVySW50ZXJmYWNlIHwKKwkJICAgIHBDb25maWctPmZsb3dDb250cm9sZXIgfCBkbWFjSHdfUkVHX0NUTF9JTlRfRU47CisJfQorCisJLyogU2V0IGJsb2NrIHRyYW5zYWN0aW9uIHNpemUgdG8gb25lIDMyIGJpdCB0cmFuc2FjdGlvbiAqLworCXBSaW5nLT5wSGVhZC0+Y3RsLmhpID0gZG1hY0h3X1JFR19DVExfQkxPQ0tfVFNfTUFTSyAmIDE7CisKKwkvKiBSZW1lbWJlciB0aGUgZGVzY3JpcHRvciB0byBpbml0aWFsaXplIHRoZSByZWdpc3RlcnMgKi8KKwlpZiAocFJpbmctPnBQcm9nID09IGRtYWNId19ERVNDX0lOSVQpIHsKKwkJcFJpbmctPnBQcm9nID0gcFJpbmctPnBIZWFkOworCX0KKwlwUmluZy0+cEVuZCA9IHBSaW5nLT5wSGVhZDsKKworCS8qIEFkdmFuY2UgdGhlIGRlc2NyaXB0b3IgKi8KKwlkbWFjSHdfTkVYVF9ERVNDKHBSaW5nLCBwSGVhZCk7CisKKwkvKiBVcGRhdGUgVGFpbCBwb2ludGVyIGlmIGRlc3RpbmF0aW9uIGlzIGEgcGVyaXBoZXJhbCAqLworCWlmICghZG1hY0h3X0RTVF9JU19NRU1PUlkocENvbmZpZy0+dHJhbnNmZXJUeXBlKSkgeworCQlwUmluZy0+cFRhaWwgPSBwUmluZy0+cEhlYWQ7CisJfQorCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0cyBjaGFubmVsIHNwZWNpZmljIHVzZXIgZGF0YQorKgorKiAgVGhpcyBmdW5jdGlvbiBhc3NvY2lhdGVzIHVzZXIgZGF0YSB0byBhIHNwZWNpZiBETUEgY2hhbm5lbAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfc2V0Q2hhbm5lbFVzZXJEYXRhKGRtYWNId19IQU5ETEVfdCBoYW5kbGUsCS8qICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICovCisJCQkgICAgICAgdm9pZCAqdXNlckRhdGEJLyogIFsgSU4gXSBVc2VyIGRhdGEgKi8KKyAgICApIHsKKwlkbWFjSHdfQ0JMS190ICpwQ2JsayA9IGRtYWNId19IQU5ETEVfVE9fQ0JMSyhoYW5kbGUpOworCisJcENibGstPnVzZXJEYXRhID0gdXNlckRhdGE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXRzIGNoYW5uZWwgc3BlY2lmaWMgdXNlciBkYXRhCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdXNlciBkYXRhIHNwZWNpZmljIHRvIGEgRE1BIGNoYW5uZWwKKyoKKyogIEByZXR1cm4gICB1c2VyIGRhdGEKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgKmRtYWNId19nZXRDaGFubmVsVXNlckRhdGEoZG1hY0h3X0hBTkRMRV90IGhhbmRsZQkvKiAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisKKwlyZXR1cm4gcENibGstPnVzZXJEYXRhOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUmVzZXRzIGRlc2NyaXB0b3IgY29udHJvbCBpbmZvcm1hdGlvbgorKgorKiAgQHJldHVybiAgdm9pZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfcmVzZXREZXNjcmlwdG9yQ29udHJvbCh2b2lkICpwRGVzY3JpcHRvcgkvKiAgIFsgSU4gXSBEZXNjcmlwdG9yIGJ1ZmZlciAgKi8KKyAgICApIHsKKwlpbnQgaTsKKwlkbWFjSHdfREVTQ19SSU5HX3QgKnBSaW5nOworCWRtYWNId19ERVNDX3QgKnBEZXNjOworCisJcFJpbmcgPSBkbWFjSHdfR0VUX0RFU0NfUklORyhwRGVzY3JpcHRvcik7CisJcERlc2MgPSBwUmluZy0+cEhlYWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgcFJpbmctPm51bTsgaSsrKSB7CisJCS8qIE1hcmsgZGVzY3JpcHRvciBpcyByZWFkeSB0byB1c2UgKi8KKwkJcERlc2MtPmN0bC5oaSA9IGRtYWNId19ERVNDX0ZSRUU7CisJCS8qIExvb2sgaW50byBuZXh0IGxpbmsgbGlzdCBpdGVtICovCisJCXBEZXNjKys7CisJfQorCXBSaW5nLT5wRnJlZSA9IHBSaW5nLT5wVGFpbCA9IHBSaW5nLT5wRW5kID0gcFJpbmctPnBIZWFkOworCXBSaW5nLT5wUHJvZyA9IGRtYWNId19ERVNDX0lOSVQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNwbGF5cyBjaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVycyBhbmQgb3RoZXIgY29udHJvbCBwYXJhbWV0ZXJzCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfcHJpbnREZWJ1Z0luZm8oZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKwkJCSAgIHZvaWQgKnBEZXNjcmlwdG9yLAkvKiAgIFsgSU4gXSBEZXNjcmlwdG9yIGJ1ZmZlciAqLworCQkJICAgaW50ICgqZnBQcmludCkgKGNvbnN0IGNoYXIgKiwgLi4uKQkvKiAgWyBJTiBdIFByaW50IGNhbGxiYWNrIGZ1bmN0aW9uICovCisgICAgKSB7CisJZG1hY0h3X0NCTEtfdCAqcENibGsgPSBkbWFjSHdfSEFORExFX1RPX0NCTEsoaGFuZGxlKTsKKworCURpc3BsYXlSZWdpc3RlckNvbnRlbnRzKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsLCBmcFByaW50KTsKKwlEaXNwbGF5RGVzY1JpbmcocERlc2NyaXB0b3IsIGZwUHJpbnQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC90bXIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL3Rtci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDRhNjFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC90bXIvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkgKz0gdG1ySHcubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC90bXIvdG1ySHcuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvdG1yL3Rtckh3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxYzlhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvdG1yL3Rtckh3LmMKQEAgLTAsMCArMSw1NzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAZmlsZSAgICB0bXJIdy5jCisqCisqICBAYnJpZWYgICBMb3cgbGV2ZWwgVGltZXIgZHJpdmVyIHJvdXRpbmVzCisqCisqICBAbm90ZQorKgorKiAgIFRoZXNlIHJvdXRpbmVzIHByb3ZpZGUgYmFzaWMgdGltZXIgZnVuY3Rpb25hbGl0eSBvbmx5LgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8Y3NwL2Vycm5vLmg+CisjaW5jbHVkZSA8Y3NwL3N0ZGludC5oPgorCisjaW5jbHVkZSA8Y3NwL3Rtckh3Lmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvdG1ySHdfcmVnLmg+CisKKyNkZWZpbmUgdG1ySHdfQVNTRVJUKGEpICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYSkpICooY2hhciAqKTAgPSAwCisjZGVmaW5lIHRtckh3X01JTExJU0VDX1BFUl9TRUMgICAgICAgICAgICAgICgxMDAwKQorCisjZGVmaW5lIHRtckh3X0xPV18xX1JFU09MVVRJT05fQ09VTlQgICAgICAgICh0bXJId19MT1dfUkVTT0xVVElPTl9DTE9DSyAvIHRtckh3X01JTExJU0VDX1BFUl9TRUMpCisjZGVmaW5lIHRtckh3X0xPV18xX01BWF9NSUxMSVNFQyAgICAgICAgICAgICgweEZGRkZGRkZGIC8gdG1ySHdfTE9XXzFfUkVTT0xVVElPTl9DT1VOVCkKKyNkZWZpbmUgdG1ySHdfTE9XXzE2X1JFU09MVVRJT05fQ09VTlQgICAgICAgKHRtckh3X0xPV18xX1JFU09MVVRJT05fQ09VTlQgLyAxNikKKyNkZWZpbmUgdG1ySHdfTE9XXzE2X01BWF9NSUxMSVNFQyAgICAgICAgICAgKDB4RkZGRkZGRkYgLyB0bXJId19MT1dfMTZfUkVTT0xVVElPTl9DT1VOVCkKKyNkZWZpbmUgdG1ySHdfTE9XXzI1Nl9SRVNPTFVUSU9OX0NPVU5UICAgICAgKHRtckh3X0xPV18xX1JFU09MVVRJT05fQ09VTlQgLyAyNTYpCisjZGVmaW5lIHRtckh3X0xPV18yNTZfTUFYX01JTExJU0VDICAgICAgICAgICgweEZGRkZGRkZGIC8gdG1ySHdfTE9XXzI1Nl9SRVNPTFVUSU9OX0NPVU5UKQorCisjZGVmaW5lIHRtckh3X0hJR0hfMV9SRVNPTFVUSU9OX0NPVU5UICAgICAgICh0bXJId19ISUdIX1JFU09MVVRJT05fQ0xPQ0sgLyB0bXJId19NSUxMSVNFQ19QRVJfU0VDKQorI2RlZmluZSB0bXJId19ISUdIXzFfTUFYX01JTExJU0VDICAgICAgICAgICAoMHhGRkZGRkZGRiAvIHRtckh3X0hJR0hfMV9SRVNPTFVUSU9OX0NPVU5UKQorI2RlZmluZSB0bXJId19ISUdIXzE2X1JFU09MVVRJT05fQ09VTlQgICAgICAodG1ySHdfSElHSF8xX1JFU09MVVRJT05fQ09VTlQgLyAxNikKKyNkZWZpbmUgdG1ySHdfSElHSF8xNl9NQVhfTUlMTElTRUMgICAgICAgICAgKDB4RkZGRkZGRkYgLyB0bXJId19ISUdIXzE2X1JFU09MVVRJT05fQ09VTlQpCisjZGVmaW5lIHRtckh3X0hJR0hfMjU2X1JFU09MVVRJT05fQ09VTlQgICAgICh0bXJId19ISUdIXzFfUkVTT0xVVElPTl9DT1VOVCAvIDI1NikKKyNkZWZpbmUgdG1ySHdfSElHSF8yNTZfTUFYX01JTExJU0VDICAgICAgICAgKDB4RkZGRkZGRkYgLyB0bXJId19ISUdIXzI1Nl9SRVNPTFVUSU9OX0NPVU5UKQorCitzdGF0aWMgdm9pZCBSZXNldFRpbWVyKHRtckh3X0lEX3QgdGltZXJJZCkKKyAgICBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLmFyYW10ZXh0IikpKTsKK3N0YXRpYyBpbnQgdG1ySHdfZGl2aWRlKGludCBudW0sIGludCBkZW5vbSkKKyAgICBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLmFyYW10ZXh0IikpKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCB0aW1lciBjYXBhYmlsaXR5CisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdmFyaW91cyBjYXBhYmlsaXRpZXMvYXR0cmlidXRlcyBvZiBhIHRpbWVyCisqCisqICBAcmV0dXJuICBDYXBhYmlsaXR5CisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1aW50MzJfdCB0bXJId19nZXRUaW1lckNhcGFiaWxpdHkodG1ySHdfSURfdCB0aW1lcklkLAkvKiAgWyBJTiBdIFRpbWVyIElkICovCisJCQkJICB0bXJId19DQVBBQklMSVRZX2UgY2FwYWJpbGl0eQkvKiAgWyBJTiBdIFRpbWVyIGNhcGFiaWxpdHkgKi8KKykgeworCXN3aXRjaCAoY2FwYWJpbGl0eSkgeworCWNhc2UgdG1ySHdfQ0FQQUJJTElUWV9DTE9DSzoKKwkJcmV0dXJuICh0aW1lcklkIDw9CisJCQkxKSA/IHRtckh3X0xPV19SRVNPTFVUSU9OX0NMT0NLIDoKKwkJICAgIHRtckh3X0hJR0hfUkVTT0xVVElPTl9DTE9DSzsKKwljYXNlIHRtckh3X0NBUEFCSUxJVFlfUkVTT0xVVElPTjoKKwkJcmV0dXJuIDMyOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFJlc2V0cyBhIHRpbWVyCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzICB0aW1lcgorKgorKiAgQHJldHVybiAgdm9pZAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgUmVzZXRUaW1lcih0bXJId19JRF90IHRpbWVySWQJLyogIFsgSU4gXSBUaW1lciBJZCAqLworKSB7CisJLyogUmVzZXQgdGltZXIgKi8KKwlwVG1ySHdbdGltZXJJZF0uTG9hZFZhbHVlID0gMDsKKwlwVG1ySHdbdGltZXJJZF0uQ3VycmVudFZhbHVlID0gMHhGRkZGRkZGRjsKKwlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCA9IDA7CisJcFRtckh3W3RpbWVySWRdLkJhY2tncm91bmRMb2FkID0gMDsKKwkvKiBBbHdheXMgY29uZmlndXJlIGFzIGEgMzIgYml0IHRpbWVyICovCisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgfD0gdG1ySHdfQ09OVFJPTF8zMkJJVDsKKwkvKiBDbGVhciBpbnRlcnJ1cHQgb25seSBpZiByYXcgc3RhdHVzIGludGVycnVwdCBpcyBzZXQgKi8KKwlpZiAocFRtckh3W3RpbWVySWRdLlJhd0ludGVycnVwdFN0YXR1cykgeworCQlwVG1ySHdbdGltZXJJZF0uSW50ZXJydXB0Q2xlYXIgPSAweEZGRkZGRkZGOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldHMgY291bnRlciB2YWx1ZSBmb3IgYW4gaW50ZXJ2YWwgaW4gbXMKKyoKKyogIEByZXR1cm4gICBPbiBzdWNjZXNzOiBFZmZlY3RpdmUgY291bnRlciB2YWx1ZSBzZXQKKyogICAgICAgICAgICBPbiBmYWlsdXJlOiAwCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdG1ySHdfSU5URVJWQUxfdCBTZXRUaW1lclBlcmlvZCh0bXJId19JRF90IHRpbWVySWQsCS8qICBbIElOIF0gVGltZXIgSWQgKi8KKwkJCQkgICAgICAgdG1ySHdfSU5URVJWQUxfdCBtc2VjCS8qICBbIElOIF0gSW50ZXJ2YWwgaW4gbWlsbGktc2Vjb25kICovCispIHsKKwl1aW50MzJfdCBzY2FsZSA9IDA7CisJdWludDMyX3QgY291bnQgPSAwOworCisJaWYgKHRpbWVySWQgPT0gMCB8fCB0aW1lcklkID09IDEpIHsKKwkJaWYgKG1zZWMgPD0gdG1ySHdfTE9XXzFfTUFYX01JTExJU0VDKSB7CisJCQlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX1BSRVNDQUxFXzE7CisJCQlzY2FsZSA9IHRtckh3X0xPV18xX1JFU09MVVRJT05fQ09VTlQ7CisJCX0gZWxzZSBpZiAobXNlYyA8PSB0bXJId19MT1dfMTZfTUFYX01JTExJU0VDKSB7CisJCQlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX1BSRVNDQUxFXzE2OworCQkJc2NhbGUgPSB0bXJId19MT1dfMTZfUkVTT0xVVElPTl9DT1VOVDsKKwkJfSBlbHNlIGlmIChtc2VjIDw9IHRtckh3X0xPV18yNTZfTUFYX01JTExJU0VDKSB7CisJCQlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX1BSRVNDQUxFXzI1NjsKKwkJCXNjYWxlID0gdG1ySHdfTE9XXzI1Nl9SRVNPTFVUSU9OX0NPVU5UOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQljb3VudCA9IG1zZWMgKiBzY2FsZTsKKwkJLyogU2V0IGNvdW50ZXIgdmFsdWUgKi8KKwkJcFRtckh3W3RpbWVySWRdLkxvYWRWYWx1ZSA9IGNvdW50OworCQlwVG1ySHdbdGltZXJJZF0uQmFja2dyb3VuZExvYWQgPSBjb3VudDsKKworCX0gZWxzZSBpZiAodGltZXJJZCA9PSAyIHx8IHRpbWVySWQgPT0gMykgeworCQlpZiAobXNlYyA8PSB0bXJId19ISUdIXzFfTUFYX01JTExJU0VDKSB7CisJCQlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX1BSRVNDQUxFXzE7CisJCQlzY2FsZSA9IHRtckh3X0hJR0hfMV9SRVNPTFVUSU9OX0NPVU5UOworCQl9IGVsc2UgaWYgKG1zZWMgPD0gdG1ySHdfSElHSF8xNl9NQVhfTUlMTElTRUMpIHsKKwkJCXBUbXJId1t0aW1lcklkXS5Db250cm9sIHw9IHRtckh3X0NPTlRST0xfUFJFU0NBTEVfMTY7CisJCQlzY2FsZSA9IHRtckh3X0hJR0hfMTZfUkVTT0xVVElPTl9DT1VOVDsKKwkJfSBlbHNlIGlmIChtc2VjIDw9IHRtckh3X0hJR0hfMjU2X01BWF9NSUxMSVNFQykgeworCQkJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgfD0gdG1ySHdfQ09OVFJPTF9QUkVTQ0FMRV8yNTY7CisJCQlzY2FsZSA9IHRtckh3X0hJR0hfMjU2X1JFU09MVVRJT05fQ09VTlQ7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWNvdW50ID0gbXNlYyAqIHNjYWxlOworCQkvKiBTZXQgY291bnRlciB2YWx1ZSAqLworCQlwVG1ySHdbdGltZXJJZF0uTG9hZFZhbHVlID0gY291bnQ7CisJCXBUbXJId1t0aW1lcklkXS5CYWNrZ3JvdW5kTG9hZCA9IGNvdW50OworCX0KKwlyZXR1cm4gY291bnQgLyBzY2FsZTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENvbmZpZ3VyZXMgYSBwZXJpb2RpYyB0aW1lciBpbiB0ZXJtcyBvZiB0aW1lciBpbnRlcnJ1cHQgcmF0ZQorKgorKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIHBlcmlvZGljIHRpbWVyIHRvIGdlbmVyYXRlIHNwZWNpZmljIG51bWJlciBvZgorKiAgdGltZXIgaW50ZXJydXB0IHBlciBzZWNvbmQKKyoKKyogIEByZXR1cm4gICBPbiBzdWNjZXNzOiBFZmZlY3RpdmUgdGltZXIgZnJlcXVlbmN5CisqICAgICAgICAgICAgT24gZmFpbHVyZTogMAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordG1ySHdfUkFURV90IHRtckh3X3NldFBlcmlvZGljVGltZXJSYXRlKHRtckh3X0lEX3QgdGltZXJJZCwJLyogIFsgSU4gXSBUaW1lciBJZCAqLworCQkJCQl0bXJId19SQVRFX3QgcmF0ZQkvKiAgWyBJTiBdIE51bWJlciBvZiB0aW1lciBpbnRlcnJ1cHQgcGVyIHNlY29uZCAqLworKSB7CisJdWludDMyX3QgcmVzb2x1dGlvbiA9IDA7CisJdWludDMyX3QgY291bnQgPSAwOworCVJlc2V0VGltZXIodGltZXJJZCk7CisKKwkvKiBTZXQgdGltZXIgbW9kZSBwZXJpb2RpYyAqLworCXBUbXJId1t0aW1lcklkXS5Db250cm9sIHw9IHRtckh3X0NPTlRST0xfUEVSSU9ESUM7CisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgJj0gfnRtckh3X0NPTlRST0xfT05FU0hPVDsKKwkvKiBTZXQgdGltZXIgaW4gaGlnaGVzdCByZXNvbHV0aW9uICovCisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgfD0gdG1ySHdfQ09OVFJPTF9QUkVTQ0FMRV8xOworCisJaWYgKHJhdGUgJiYgKHRpbWVySWQgPT0gMCB8fCB0aW1lcklkID09IDEpKSB7CisJCWlmIChyYXRlID4gdG1ySHdfTE9XX1JFU09MVVRJT05fQ0xPQ0spIHsKKwkJCXJldHVybiAwOworCQl9CisJCXJlc29sdXRpb24gPSB0bXJId19MT1dfUkVTT0xVVElPTl9DTE9DSzsKKwl9IGVsc2UgaWYgKHJhdGUgJiYgKHRpbWVySWQgPT0gMiB8fCB0aW1lcklkID09IDMpKSB7CisJCWlmIChyYXRlID4gdG1ySHdfSElHSF9SRVNPTFVUSU9OX0NMT0NLKSB7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCXJlc29sdXRpb24gPSB0bXJId19ISUdIX1JFU09MVVRJT05fQ0xPQ0s7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9CisJLyogRmluZCB0aGUgY291bnRlciB2YWx1ZSAqLworCWNvdW50ID0gcmVzb2x1dGlvbiAvIHJhdGU7CisJLyogU2V0IGNvdW50ZXIgdmFsdWUgKi8KKwlwVG1ySHdbdGltZXJJZF0uTG9hZFZhbHVlID0gY291bnQ7CisJcFRtckh3W3RpbWVySWRdLkJhY2tncm91bmRMb2FkID0gY291bnQ7CisKKwlyZXR1cm4gcmVzb2x1dGlvbiAvIGNvdW50OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ29uZmlndXJlcyBhIHBlcmlvZGljIHRpbWVyIHRvIGdlbmVyYXRlIHRpbWVyIGludGVycnVwdCBhZnRlcgorKiAgICAgICAgICAgY2VydGFpbiB0aW1lIGludGVydmFsCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGEgcGVyaW9kaWMgdGltZXIgdG8gZ2VuZXJhdGUgdGltZXIgaW50ZXJydXB0CisqICBhZnRlciBldmVyeSB0aW1lIGludGVydmFsIGluIG1pbGxpc2Vjb25kCisqCisqICBAcmV0dXJuICAgT24gc3VjY2VzczogRWZmZWN0aXZlIGludGVydmFsIHNldCBpbiBtaWxsaS1zZWNvbmQKKyogICAgICAgICAgICBPbiBmYWlsdXJlOiAwCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0bXJId19JTlRFUlZBTF90IHRtckh3X3NldFBlcmlvZGljVGltZXJJbnRlcnZhbCh0bXJId19JRF90IHRpbWVySWQsCS8qICBbIElOIF0gVGltZXIgSWQgKi8KKwkJCQkJCXRtckh3X0lOVEVSVkFMX3QgbXNlYwkvKiAgWyBJTiBdIEludGVydmFsIGluIG1pbGxpLXNlY29uZCAqLworKSB7CisJUmVzZXRUaW1lcih0aW1lcklkKTsKKworCS8qIFNldCB0aW1lciBtb2RlIHBlcmlvZGljICovCisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgfD0gdG1ySHdfQ09OVFJPTF9QRVJJT0RJQzsKKwlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCAmPSB+dG1ySHdfQ09OVFJPTF9PTkVTSE9UOworCisJcmV0dXJuIFNldFRpbWVyUGVyaW9kKHRpbWVySWQsIG1zZWMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ29uZmlndXJlcyBhIHBlcmlvZGljIHRpbWVyIHRvIGdlbmVyYXRlIHRpbWVyIGludGVycnVwdCBqdXN0IG9uY2UKKyogICAgICAgICAgIGFmdGVyIGNlcnRhaW4gdGltZSBpbnRlcnZhbAorKgorKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIHBlcmlvZGljIHRpbWVyIHRvIGdlbmVyYXRlIGEgc2luZ2xlIHRpY2tzIGFmdGVyCisqICBjZXJ0YWluIHRpbWUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmQKKyoKKyogIEByZXR1cm4gICBPbiBzdWNjZXNzOiBFZmZlY3RpdmUgaW50ZXJ2YWwgc2V0IGluIG1pbGxpLXNlY29uZAorKiAgICAgICAgICAgIE9uIGZhaWx1cmU6IDAKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X0lOVEVSVkFMX3QgdG1ySHdfc2V0T25lc2hvdFRpbWVySW50ZXJ2YWwodG1ySHdfSURfdCB0aW1lcklkLAkvKiAgWyBJTiBdIFRpbWVyIElkICovCisJCQkJCSAgICAgICB0bXJId19JTlRFUlZBTF90IG1zZWMJLyogIFsgSU4gXSBJbnRlcnZhbCBpbiBtaWxsaS1zZWNvbmQgKi8KKykgeworCVJlc2V0VGltZXIodGltZXJJZCk7CisKKwkvKiBTZXQgdGltZXIgbW9kZSBvbmVzaG90ICovCisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgfD0gdG1ySHdfQ09OVFJPTF9QRVJJT0RJQzsKKwlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX09ORVNIT1Q7CisKKwlyZXR1cm4gU2V0VGltZXJQZXJpb2QodGltZXJJZCwgbXNlYyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBDb25maWd1cmVzIGEgdGltZXIgdG8gcnVuIGFzIGEgZnJlZSBydW5uaW5nIHRpbWVyCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGEgdGltZXIgdG8gcnVuIGFzIGEgZnJlZSBydW5uaW5nIHRpbWVyCisqCisqICBAcmV0dXJuICAgVGltZXIgcmVzb2x1dGlvbiAoY291bnQgLyBzZWMpCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0bXJId19SQVRFX3QgdG1ySHdfc2V0RnJlZVJ1bm5pbmdUaW1lcih0bXJId19JRF90IHRpbWVySWQsCS8qICBbIElOIF0gVGltZXIgSWQgKi8KKwkJCQkgICAgICAgdWludDMyX3QgZGl2aWRlcgkvKiAgWyBJTiBdIERpdmlkaW5nIHRoZSBjbG9jayBmcmVxdWVuY3kgKi8KKykgeworCXVpbnQzMl90IHNjYWxlID0gMDsKKworCVJlc2V0VGltZXIodGltZXJJZCk7CisJLyogU2V0IHRpbWVyIGFzIGZyZWUgcnVubmluZyBtb2RlICovCisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgJj0gfnRtckh3X0NPTlRST0xfUEVSSU9ESUM7CisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgJj0gfnRtckh3X0NPTlRST0xfT05FU0hPVDsKKworCWlmIChkaXZpZGVyID49IDY0KSB7CisJCXBUbXJId1t0aW1lcklkXS5Db250cm9sIHw9IHRtckh3X0NPTlRST0xfUFJFU0NBTEVfMjU2OworCQlzY2FsZSA9IDI1NjsKKwl9IGVsc2UgaWYgKGRpdmlkZXIgPj0gOCkgeworCQlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX1BSRVNDQUxFXzE2OworCQlzY2FsZSA9IDE2OworCX0gZWxzZSB7CisJCXBUbXJId1t0aW1lcklkXS5Db250cm9sIHw9IHRtckh3X0NPTlRST0xfUFJFU0NBTEVfMTsKKwkJc2NhbGUgPSAxOworCX0KKworCWlmICh0aW1lcklkID09IDAgfHwgdGltZXJJZCA9PSAxKSB7CisJCXJldHVybiB0bXJId19kaXZpZGUodG1ySHdfTE9XX1JFU09MVVRJT05fQ0xPQ0ssIHNjYWxlKTsKKwl9IGVsc2UgaWYgKHRpbWVySWQgPT0gMiB8fCB0aW1lcklkID09IDMpIHsKKwkJcmV0dXJuIHRtckh3X2RpdmlkZSh0bXJId19ISUdIX1JFU09MVVRJT05fQ0xPQ0ssIHNjYWxlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFN0YXJ0cyBhIHRpbWVyCisqCisqICBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBhIHByZWNvbmZpZ3VyZWQgdGltZXIKKyoKKyogIEByZXR1cm4gIC0xICAgICAtIE9uIEZhaWx1cmUKKyogICAgICAgICAgICAwICAgICAtIE9uIFN1Y2Nlc3MKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCB0bXJId19zdGFydFRpbWVyKHRtckh3X0lEX3QgdGltZXJJZAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCispIHsKKwlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX1RJTUVSX0VOQUJMRTsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFN0b3BzIGEgdGltZXIKKyoKKyogIFRoaXMgZnVuY3Rpb24gc3RvcHMgYSBydW5uaW5nIHRpbWVyCisqCisqICBAcmV0dXJuICAtMSAgICAgLSBPbiBGYWlsdXJlCisqICAgICAgICAgICAgMCAgICAgLSBPbiBTdWNjZXNzCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgdG1ySHdfc3RvcFRpbWVyKHRtckh3X0lEX3QgdGltZXJJZAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCispIHsKKwlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCAmPSB+dG1ySHdfQ09OVFJPTF9USU1FUl9FTkFCTEU7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXRzIGN1cnJlbnQgdGltZXIgY291bnQKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VycmVudCB0aW1lciB2YWx1ZQorKgorKiAgQHJldHVybiAgQ3VycmVudCBkb3duY291bnRpbmcgdGltZXIgdmFsdWUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IHRtckh3X0dldEN1cnJlbnRDb3VudCh0bXJId19JRF90IHRpbWVySWQJLyogIFsgSU4gXSBUaW1lciBpZCAqLworKSB7CisJLyogcmV0dXJuIDMyIGJpdCB0aW1lciB2YWx1ZSAqLworCXN3aXRjaCAocFRtckh3W3RpbWVySWRdLkNvbnRyb2wgJiB0bXJId19DT05UUk9MX01PREVfTUFTSykgeworCWNhc2UgdG1ySHdfQ09OVFJPTF9GUkVFX1JVTk5JTkc6CisJCWlmIChwVG1ySHdbdGltZXJJZF0uQ3VycmVudFZhbHVlKSB7CisJCQlyZXR1cm4gdG1ySHdfTUFYX0NPVU5UIC0gcFRtckh3W3RpbWVySWRdLkN1cnJlbnRWYWx1ZTsKKwkJfQorCQlicmVhazsKKwljYXNlIHRtckh3X0NPTlRST0xfUEVSSU9ESUM6CisJY2FzZSB0bXJId19DT05UUk9MX09ORVNIT1Q6CisJCXJldHVybiBwVG1ySHdbdGltZXJJZF0uQmFja2dyb3VuZExvYWQgLQorCQkgICAgcFRtckh3W3RpbWVySWRdLkN1cnJlbnRWYWx1ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXRzIHRpbWVyIGNvdW50IHJhdGUKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvdW50cyBwZXIgc2Vjb25kCisqCisqICBAcmV0dXJuICBDb3VudCByYXRlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0bXJId19SQVRFX3QgdG1ySHdfZ2V0Q291bnRSYXRlKHRtckh3X0lEX3QgdGltZXJJZAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCispIHsKKwl1aW50MzJfdCBkaXZpZGVyID0gMDsKKworCXN3aXRjaCAocFRtckh3W3RpbWVySWRdLkNvbnRyb2wgJiB0bXJId19DT05UUk9MX1BSRVNDQUxFX01BU0spIHsKKwljYXNlIHRtckh3X0NPTlRST0xfUFJFU0NBTEVfMToKKwkJZGl2aWRlciA9IDE7CisJCWJyZWFrOworCWNhc2UgdG1ySHdfQ09OVFJPTF9QUkVTQ0FMRV8xNjoKKwkJZGl2aWRlciA9IDE2OworCQlicmVhazsKKwljYXNlIHRtckh3X0NPTlRST0xfUFJFU0NBTEVfMjU2OgorCQlkaXZpZGVyID0gMjU2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0bXJId19BU1NFUlQoMCk7CisJfQorCisJaWYgKHRpbWVySWQgPT0gMCB8fCB0aW1lcklkID09IDEpIHsKKwkJcmV0dXJuIHRtckh3X2RpdmlkZSh0bXJId19MT1dfUkVTT0xVVElPTl9DTE9DSywgZGl2aWRlcik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHRtckh3X2RpdmlkZSh0bXJId19ISUdIX1JFU09MVVRJT05fQ0xPQ0ssIGRpdmlkZXIpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZXMgdGltZXIgaW50ZXJydXB0CisqCisqICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHRpbWVyIGludGVycnVwdAorKgorKiAgQHJldHVybiAgIE4vQQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB0bXJId19lbmFibGVJbnRlcnJ1cHQodG1ySHdfSURfdCB0aW1lcklkCS8qICBbIElOIF0gVGltZXIgaWQgKi8KKykgeworCXBUbXJId1t0aW1lcklkXS5Db250cm9sIHw9IHRtckh3X0NPTlRST0xfSU5URVJSVVBUX0VOQUJMRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGVzIHRpbWVyIGludGVycnVwdAorKgorKiAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHQKKyoKKyogIEByZXR1cm4gICBOL0EKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgdG1ySHdfZGlzYWJsZUludGVycnVwdCh0bXJId19JRF90IHRpbWVySWQJLyogIFsgSU4gXSBUaW1lciBpZCAqLworKSB7CisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgJj0gfnRtckh3X0NPTlRST0xfSU5URVJSVVBUX0VOQUJMRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENsZWFycyB0aGUgaW50ZXJydXB0CisqCisqICBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgdGltZXIgaW50ZXJydXB0CisqCisqICBAcmV0dXJuICAgTi9BCisqCisqICBAbm90ZQorKiAgICAgTXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIGNvbnRleHQgb2YgSVNSCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHRtckh3X2NsZWFySW50ZXJydXB0KHRtckh3X0lEX3QgdGltZXJJZAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCispIHsKKwlwVG1ySHdbdGltZXJJZF0uSW50ZXJydXB0Q2xlYXIgPSAweDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXRzIHRoZSBpbnRlcnJ1cHQgc3RhdHVzCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGltZXIgaW50ZXJydXB0IHN0YXR1cworKgorKiAgQHJldHVybiAgIEludGVycnVwdCBzdGF0dXMKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X0lOVEVSUlVQVF9TVEFUVVNfZSB0bXJId19nZXRJbnRlcnJ1cHRTdGF0dXModG1ySHdfSURfdCB0aW1lcklkCS8qICBbIElOIF0gVGltZXIgaWQgKi8KKykgeworCWlmIChwVG1ySHdbdGltZXJJZF0uSW50ZXJydXB0U3RhdHVzKSB7CisJCXJldHVybiB0bXJId19JTlRFUlJVUFRfU1RBVFVTX1NFVDsKKwl9IGVsc2UgeworCQlyZXR1cm4gdG1ySHdfSU5URVJSVVBUX1NUQVRVU19VTlNFVDsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBJbmRlbnRpZmllcyBhIHRpbWVyIGNhdXNpbmcgaW50ZXJydXB0CisqCisqICBUaGlzIGZ1bmN0aW9ucyByZXR1cm5zIGEgdGltZXIgY2F1c2luZyBpbnRlcnJ1cHQKKyoKKyogIEByZXR1cm4gIDB4RkZGRkZGRkYgICA6IE5vIHRpbWVyIGNhdXNpbmcgYW4gaW50ZXJydXB0CisqICAgICAgICAgICAhIDB4RkZGRkZGRkYgOiB0aW1lciBjYXVzaW5nIGFuIGludGVycnVwdAorKiAgQG5vdGUKKyogICAgIHRtckh3X2NsZWFySW50cnJ1cHQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgdmFsaWQgdGltZXIgaWQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0bXJId19JRF90IHRtckh3X2dldEludGVycnVwdFNvdXJjZSh2b2lkCS8qICB2b2lkICovCispIHsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0bXJId19USU1FUl9OVU1fQ09VTlQ7IGkrKykgeworCQlpZiAocFRtckh3W2ldLkludGVycnVwdFN0YXR1cykgeworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisKKwlyZXR1cm4gMHhGRkZGRkZGRjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc3BsYXlzIHNwZWNpZmljIHRpbWVyIHJlZ2lzdGVycworKgorKgorKiAgQHJldHVybiAgdm9pZAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB0bXJId19wcmludERlYnVnSW5mbyh0bXJId19JRF90IHRpbWVySWQsCS8qICBbIElOIF0gVGltZXIgaWQgKi8KKwkJCSAgaW50ICgqZnBQcmludCkgKGNvbnN0IGNoYXIgKiwgLi4uKQkvKiAgWyBJTiBdIFByaW50IGNhbGxiYWNrIGZ1bmN0aW9uICovCispIHsKKwkoKmZwUHJpbnQpICgiRGlzcGxheWluZyByZWdpc3RlciBjb250ZW50cyBcblxuIik7CisJKCpmcFByaW50KSAoIlRpbWVyICVkOiBMb2FkIHZhbHVlICAgICAgICAgICAgICAweCVYXG4iLCB0aW1lcklkLAorCQkgICAgcFRtckh3W3RpbWVySWRdLkxvYWRWYWx1ZSk7CisJKCpmcFByaW50KSAoIlRpbWVyICVkOiBCYWNrZ3JvdW5kIGxvYWQgdmFsdWUgICAweCVYXG4iLCB0aW1lcklkLAorCQkgICAgcFRtckh3W3RpbWVySWRdLkJhY2tncm91bmRMb2FkKTsKKwkoKmZwUHJpbnQpICgiVGltZXIgJWQ6IENvbnRyb2wgICAgICAgICAgICAgICAgIDB4JVhcbiIsIHRpbWVySWQsCisJCSAgICBwVG1ySHdbdGltZXJJZF0uQ29udHJvbCk7CisJKCpmcFByaW50KSAoIlRpbWVyICVkOiBJbnRlcnJ1cHQgY2xlYXIgICAgICAgICAweCVYXG4iLCB0aW1lcklkLAorCQkgICAgcFRtckh3W3RpbWVySWRdLkludGVycnVwdENsZWFyKTsKKwkoKmZwUHJpbnQpICgiVGltZXIgJWQ6IEludGVycnVwdCByYXcgaW50ZXJydXB0IDB4JVhcbiIsIHRpbWVySWQsCisJCSAgICBwVG1ySHdbdGltZXJJZF0uUmF3SW50ZXJydXB0U3RhdHVzKTsKKwkoKmZwUHJpbnQpICgiVGltZXIgJWQ6IEludGVycnVwdCBzdGF0dXMgICAgICAgIDB4JVhcbiIsIHRpbWVySWQsCisJCSAgICBwVG1ySHdbdGltZXJJZF0uSW50ZXJydXB0U3RhdHVzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFVzZSBhIHRpbWVyIHRvIHBlcmZvcm0gYSBidXN5IHdhaXQgZGVsYXkgZm9yIGEgbnVtYmVyIG9mIHVzZWNzLgorKgorKiAgQHJldHVybiAgIE4vQQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB0bXJId191ZGVsYXkodG1ySHdfSURfdCB0aW1lcklkLAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCisJCSAgdW5zaWduZWQgbG9uZyB1c2VjcyAvKiAgWyBJTiBdIHVzZWMgdG8gZGVsYXkgKi8KKykgeworCXRtckh3X1JBVEVfdCB1c2VjX3RpY2tfcmF0ZTsKKwl0bXJId19DT1VOVF90IHN0YXJ0X3RpbWU7CisJdG1ySHdfQ09VTlRfdCBkZWx0YV90aW1lOworCisJc3RhcnRfdGltZSA9IHRtckh3X0dldEN1cnJlbnRDb3VudCh0aW1lcklkKTsKKwl1c2VjX3RpY2tfcmF0ZSA9IHRtckh3X2RpdmlkZSh0bXJId19nZXRDb3VudFJhdGUodGltZXJJZCksIDEwMDAwMDApOworCWRlbHRhX3RpbWUgPSB1c2VjcyAqIHVzZWNfdGlja19yYXRlOworCisJLyogQnVzeSB3YWl0ICovCisJd2hpbGUgKGRlbHRhX3RpbWUgPiAodG1ySHdfR2V0Q3VycmVudENvdW50KHRpbWVySWQpIC0gc3RhcnRfdGltZSkpCisJCTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIExvY2FsIERpdmlkZSBmdW5jdGlvbgorKgorKiAgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBkaXZpZGUKKyoKKyogIEByZXR1cm4gZGl2aWRlIHZhbHVlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHRtckh3X2RpdmlkZShpbnQgbnVtLCBpbnQgZGVub20pCit7CisJaW50IHI7CisJaW50IHQgPSAxOworCisJLyogU2hpZnQgZGVub20gYW5kIHQgdXAgdG8gdGhlIGxhcmdlc3QgdmFsdWUgdG8gb3B0aW1pemUgYWxnb3JpdGhtICovCisJLyogdCBjb250YWlucyB0aGUgdW5pdHMgb2YgZWFjaCBkaXZpZGUgKi8KKwl3aGlsZSAoKGRlbm9tICYgMHg0MDAwMDAwMCkgPT0gMCkgewkvKiBmYWlscyBpZiBkZW5vbT0wICovCisJCWRlbm9tID0gZGVub20gPDwgMTsKKwkJdCA9IHQgPDwgMTsKKwl9CisKKwkvKiBJbnRpYWxpemUgdGhlIHJlc3VsdCAqLworCXIgPSAwOworCisJZG8geworCQkvKiBEZXRlcm1pbmUgaWYgdGhlcmUgZXhpc3RzIGEgcG9zaXRpdmUgcmVtYWluZGVyICovCisJCWlmICgobnVtIC0gZGVub20pID49IDApIHsKKwkJCS8qIEFjY3VtbGF0ZSB0IHRvIHRoZSByZXN1bHQgYW5kIGNhbGN1bGF0ZSBhIG5ldyByZW1haW5kZXIgKi8KKwkJCW51bSA9IG51bSAtIGRlbm9tOworCQkJciA9IHIgKyB0OworCQl9CisJCS8qIENvbnRpbnVlIHRvIHNoaWZ0IGRlbm9tIGFuZCBzaGlmdCB0IGRvd24gdG8gMCAqLworCQlkZW5vbSA9IGRlbm9tID4+IDE7CisJCXQgPSB0ID4+IDE7CisJfSB3aGlsZSAodCAhPSAwKTsKKwlyZXR1cm4gcjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9kbWEuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjIwZmNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2RtYS5jCkBAIC0wLDAgKzEsMjMyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA0IC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBAZmlsZSAgIGRtYS5jCisqCisqICAgQGJyaWVmICBJbXBsZW1lbnRzIHRoZSBETUEgaW50ZXJmYWNlLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlIDxtYWNoL3RpbWVyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorCisvKiBJIGRvbid0IHF1aXRlIHVuZGVyc3RhbmQgd2h5IGRjNCBmYWlscyB3aGVuIHRoaXMgaXMgc2V0IHRvIDEgYW5kIERNQSBpcyBlbmFibGVkICovCisvKiBlc3BlY2lhbGx5IHNpbmNlIGRjNCBkb2Vzbid0IHVzZSBrbWFsbG9jJ2QgbWVtb3J5LiAqLworCisjZGVmaW5lIEFMTE9XX01BUF9PRl9LTUFMTE9DX01FTU9SWSAwCisKKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIC0tLS0gUHJpdmF0ZSBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTUFLRV9IQU5ETEUoY29udHJvbGxlcklkeCwgY2hhbm5lbElkeCkgICAgKCgoY29udHJvbGxlcklkeCkgPDwgNCkgfCAoY2hhbm5lbElkeCkpCisKKyNkZWZpbmUgQ09OVFJPTExFUl9GUk9NX0hBTkRMRShoYW5kbGUpICAgICgoKGhhbmRsZSkgPj4gNCkgJiAweDBmKQorI2RlZmluZSBDSEFOTkVMX0ZST01fSEFORExFKGhhbmRsZSkgICAgICAgKChoYW5kbGUpICYgMHgwZikKKworI2RlZmluZSBETUFfTUFQX0RFQlVHICAgMAorCisjaWYgRE1BX01BUF9ERUJVRworIyAgIGRlZmluZSAgRE1BX01BUF9QUklOVChmbXQsIGFyZ3MuLi4pICAgcHJpbnRrKCIlczogIiBmbXQsIF9fZnVuY19fLCAgIyMgYXJncykKKyNlbHNlCisjICAgZGVmaW5lICBETUFfTUFQX1BSSU5UKGZtdCwgYXJncy4uLikKKyNlbmRpZgorCisvKiAtLS0tIFByaXZhdGUgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgRE1BX0dsb2JhbF90IGdETUE7CitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpnRG1hRGlyOworCitzdGF0aWMgYXRvbWljX3QgZ0RtYVN0YXRNZW1UeXBlS21hbGxvYyA9IEFUT01JQ19JTklUKDApOworc3RhdGljIGF0b21pY190IGdEbWFTdGF0TWVtVHlwZVZtYWxsb2MgPSBBVE9NSUNfSU5JVCgwKTsKK3N0YXRpYyBhdG9taWNfdCBnRG1hU3RhdE1lbVR5cGVVc2VyID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgYXRvbWljX3QgZ0RtYVN0YXRNZW1UeXBlQ29oZXJlbnQgPSBBVE9NSUNfSU5JVCgwKTsKKworI2luY2x1ZGUgImRtYV9kZXZpY2UuYyIKKworLyogLS0tLSBQcml2YXRlIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLSBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBEaXNwbGF5cyBpbmZvcm1hdGlvbiBmb3IgL3Byb2MvZG1hL21lbS10eXBlCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZG1hX3Byb2NfcmVhZF9tZW1fdHlwZShjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJCSAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgbGVuID0gMDsKKworCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgImRtYV9tYXBfbWVtIHN0YXRpc3RpY3NcbiIpOworCWxlbiArPQorCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgImNvaGVyZW50OiAlZFxuIiwKKwkJICAgIGF0b21pY19yZWFkKCZnRG1hU3RhdE1lbVR5cGVDb2hlcmVudCkpOworCWxlbiArPQorCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgImttYWxsb2M6ICAlZFxuIiwKKwkJICAgIGF0b21pY19yZWFkKCZnRG1hU3RhdE1lbVR5cGVLbWFsbG9jKSk7CisJbGVuICs9CisJICAgIHNwcmludGYoYnVmICsgbGVuLCAidm1hbGxvYzogICVkXG4iLAorCQkgICAgYXRvbWljX3JlYWQoJmdEbWFTdGF0TWVtVHlwZVZtYWxsb2MpKTsKKwlsZW4gKz0KKwkgICAgc3ByaW50ZihidWYgKyBsZW4sICJ1c2VyOiAgICAgJWRcbiIsCisJCSAgICBhdG9taWNfcmVhZCgmZ0RtYVN0YXRNZW1UeXBlVXNlcikpOworCisJcmV0dXJuIGxlbjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBEaXNwbGF5cyBpbmZvcm1hdGlvbiBmb3IgL3Byb2MvZG1hL2NoYW5uZWxzCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZG1hX3Byb2NfcmVhZF9jaGFubmVscyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJCSAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgY29udHJvbGxlcklkeDsKKwlpbnQgY2hhbm5lbElkeDsKKwlpbnQgbGltaXQgPSBjb3VudCAtIDIwMDsKKwlpbnQgbGVuID0gMDsKKwlETUFfQ2hhbm5lbF90ICpjaGFubmVsOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZ0RNQS5sb2NrKSA8IDApIHsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwlmb3IgKGNvbnRyb2xsZXJJZHggPSAwOyBjb250cm9sbGVySWR4IDwgRE1BX05VTV9DT05UUk9MTEVSUzsKKwkgICAgIGNvbnRyb2xsZXJJZHgrKykgeworCQlmb3IgKGNoYW5uZWxJZHggPSAwOyBjaGFubmVsSWR4IDwgRE1BX05VTV9DSEFOTkVMUzsKKwkJICAgICBjaGFubmVsSWR4KyspIHsKKwkJCWlmIChsZW4gPj0gbGltaXQpIHsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJY2hhbm5lbCA9CisJCQkgICAgJmdETUEuY29udHJvbGxlcltjb250cm9sbGVySWR4XS5jaGFubmVsW2NoYW5uZWxJZHhdOworCisJCQlsZW4gKz0KKwkJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIiVkOiVkICIsIGNvbnRyb2xsZXJJZHgsCisJCQkJICAgIGNoYW5uZWxJZHgpOworCisJCQlpZiAoKGNoYW5uZWwtPmZsYWdzICYgRE1BX0NIQU5ORUxfRkxBR19JU19ERURJQ0FURUQpICE9CisJCQkgICAgMCkgeworCQkJCWxlbiArPQorCQkJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkRlZGljYXRlZCBmb3IgJXMgIiwKKwkJCQkJICAgIERNQV9nRGV2aWNlQXR0cmlidXRlW2NoYW5uZWwtPgorCQkJCQkJCQkgZGV2VHlwZV0ubmFtZSk7CisJCQl9IGVsc2UgeworCQkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlNoYXJlZCAiKTsKKwkJCX0KKworCQkJaWYgKChjaGFubmVsLT5mbGFncyAmIERNQV9DSEFOTkVMX0ZMQUdfTk9fSVNSKSAhPSAwKSB7CisJCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiTm8gSVNSICIpOworCQkJfQorCisJCQlpZiAoKGNoYW5uZWwtPmZsYWdzICYgRE1BX0NIQU5ORUxfRkxBR19MQVJHRV9GSUZPKSAhPSAwKSB7CisJCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiRmlmbzogMTI4ICIpOworCQkJfSBlbHNlIHsKKwkJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJGaWZvOiA2NCAgIik7CisJCQl9CisKKwkJCWlmICgoY2hhbm5lbC0+ZmxhZ3MgJiBETUFfQ0hBTk5FTF9GTEFHX0lOX1VTRSkgIT0gMCkgeworCQkJCWxlbiArPQorCQkJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkluVXNlIGJ5ICVzIiwKKwkJCQkJICAgIERNQV9nRGV2aWNlQXR0cmlidXRlW2NoYW5uZWwtPgorCQkJCQkJCQkgZGV2VHlwZV0ubmFtZSk7CisjaWYgKERNQV9ERUJVR19UUkFDS19SRVNFUlZBVElPTikKKwkJCQlsZW4gKz0KKwkJCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICIgKCVzOiVkKSIsCisJCQkJCSAgICBjaGFubmVsLT5maWxlTmFtZSwKKwkJCQkJICAgIGNoYW5uZWwtPmxpbmVOdW0pOworI2VuZGlmCisJCQl9IGVsc2UgeworCQkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIkF2YWlsICIpOworCQkJfQorCisJCQlpZiAoY2hhbm5lbC0+bGFzdERldlR5cGUgIT0gRE1BX0RFVklDRV9OT05FKSB7CisJCQkJbGVuICs9CisJCQkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiTGFzdCB1c2U6ICVzICIsCisJCQkJCSAgICBETUFfZ0RldmljZUF0dHJpYnV0ZVtjaGFubmVsLT4KKwkJCQkJCQkJIGxhc3REZXZUeXBlXS4KKwkJCQkJICAgIG5hbWUpOworCQkJfQorCisJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJcbiIpOworCQl9CisJfQorCXVwKCZnRE1BLmxvY2spOworCSplb2YgPSAxOworCisJcmV0dXJuIGxlbjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBEaXNwbGF5cyBpbmZvcm1hdGlvbiBmb3IgL3Byb2MvZG1hL2RldmljZXMKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBkbWFfcHJvY19yZWFkX2RldmljZXMoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgbGltaXQgPSBjb3VudCAtIDIwMDsKKwlpbnQgbGVuID0gMDsKKwlpbnQgZGV2SWR4OworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZ0RNQS5sb2NrKSA8IDApIHsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwlmb3IgKGRldklkeCA9IDA7IGRldklkeCA8IERNQV9OVU1fREVWSUNFX0VOVFJJRVM7IGRldklkeCsrKSB7CisJCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtkZXZJZHhdOworCisJCWlmIChkZXZBdHRyLT5uYW1lID09IE5VTEwpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGxlbiA+PSBsaW1pdCkgeworCQkJYnJlYWs7CisJCX0KKworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlLTEycyAiLCBkZXZBdHRyLT5uYW1lKTsKKworCQlpZiAoKGRldkF0dHItPmZsYWdzICYgRE1BX0RFVklDRV9GTEFHX0lTX0RFRElDQVRFRCkgIT0gMCkgeworCQkJbGVuICs9CisJCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJEZWRpY2F0ZWQgJWQ6JWQgIiwKKwkJCQkgICAgZGV2QXR0ci0+ZGVkaWNhdGVkQ29udHJvbGxlciwKKwkJCQkgICAgZGV2QXR0ci0+ZGVkaWNhdGVkQ2hhbm5lbCk7CisJCX0gZWxzZSB7CisJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJTaGFyZWQgRE1BOiIpOworCQkJaWYgKChkZXZBdHRyLT5mbGFncyAmIERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwKSAhPSAwKSB7CisJCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiMCIpOworCQkJfQorCQkJaWYgKChkZXZBdHRyLT5mbGFncyAmIERNQV9ERVZJQ0VfRkxBR19PTl9ETUExKSAhPSAwKSB7CisJCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiMSIpOworCQkJfQorCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiICIpOworCQl9CisJCWlmICgoZGV2QXR0ci0+ZmxhZ3MgJiBETUFfREVWSUNFX0ZMQUdfTk9fSVNSKSAhPSAwKSB7CisJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJOb0lTUiAiKTsKKwkJfQorCQlpZiAoKGRldkF0dHItPmZsYWdzICYgRE1BX0RFVklDRV9GTEFHX0FMTE9XX0xBUkdFX0ZJRk8pICE9IDApIHsKKwkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIkFsbG93LTEyOCAiKTsKKwkJfQorCisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sCisJCQkgICAgIlhmZXIgIzogJUx1IFRpY2tzOiAlTHUgQnl0ZXM6ICVMdSBEZXNjTGVuOiAldVxuIiwKKwkJCSAgICBkZXZBdHRyLT5udW1UcmFuc2ZlcnMsIGRldkF0dHItPnRyYW5zZmVyVGlja3MsCisJCQkgICAgZGV2QXR0ci0+dHJhbnNmZXJCeXRlcywKKwkJCSAgICBkZXZBdHRyLT5yaW5nLmJ5dGVzQWxsb2NhdGVkKTsKKworCX0KKworCXVwKCZnRE1BLmxvY2spOworCSplb2YgPSAxOworCisJcmV0dXJuIGxlbjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBEZXRlcm1pbmVzIGlmIGEgRE1BX0RldmljZV90IGlzICJ2YWxpZCIuCisqCisqICAgQHJldHVybgorKiAgICAgICBUUlVFICAgICAgICAtIGRtYSBkZXZpY2UgaXMgdmFsaWQKKyogICAgICAgRkFMU0UgICAgICAgLSBkbWEgZGV2aWNlIGlzbid0IHZhbGlkCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgaW50IElzRGV2aWNlVmFsaWQoRE1BX0RldmljZV90IGRldmljZSkKK3sKKwlyZXR1cm4gKGRldmljZSA+PSAwKSAmJiAoZGV2aWNlIDwgRE1BX05VTV9ERVZJQ0VfRU5UUklFUyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgVHJhbnNsYXRlcyBhIERNQSBoYW5kbGUgaW50byBhIHBvaW50ZXIgdG8gYSBjaGFubmVsLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgbm9uLU5VTEwgICAgLSBwb2ludGVyIHRvIERNQV9DaGFubmVsX3QKKyogICAgICAgTlVMTCAgICAgICAgLSBETUEgSGFuZGxlIHdhcyBpbnZhbGlkCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgRE1BX0NoYW5uZWxfdCAqSGFuZGxlVG9DaGFubmVsKERNQV9IYW5kbGVfdCBoYW5kbGUpCit7CisJaW50IGNvbnRyb2xsZXJJZHg7CisJaW50IGNoYW5uZWxJZHg7CisKKwljb250cm9sbGVySWR4ID0gQ09OVFJPTExFUl9GUk9NX0hBTkRMRShoYW5kbGUpOworCWNoYW5uZWxJZHggPSBDSEFOTkVMX0ZST01fSEFORExFKGhhbmRsZSk7CisKKwlpZiAoKGNvbnRyb2xsZXJJZHggPiBETUFfTlVNX0NPTlRST0xMRVJTKQorCSAgICB8fCAoY2hhbm5lbElkeCA+IERNQV9OVU1fQ0hBTk5FTFMpKSB7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gJmdETUEuY29udHJvbGxlcltjb250cm9sbGVySWR4XS5jaGFubmVsW2NoYW5uZWxJZHhdOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIEludGVycnVwdCBoYW5kbGVyIHdoaWNoIGlzIGNhbGxlZCB0byBwcm9jZXNzIERNQSBpbnRlcnJ1cHRzLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlETUFfQ2hhbm5lbF90ICpjaGFubmVsOworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKwlpbnQgaXJxU3RhdHVzOworCisJY2hhbm5lbCA9IChETUFfQ2hhbm5lbF90ICopIGRldl9pZDsKKworCS8qIEZpZ3VyZSBvdXQgd2h5IHdlIHdlcmUgY2FsbGVkLCBhbmQga25vY2sgZG93biB0aGUgaW50ZXJydXB0ICovCisKKwlpcnFTdGF0dXMgPSBkbWFjSHdfZ2V0SW50ZXJydXB0U3RhdHVzKGNoYW5uZWwtPmRtYWNId0hhbmRsZSk7CisJZG1hY0h3X2NsZWFySW50ZXJydXB0KGNoYW5uZWwtPmRtYWNId0hhbmRsZSk7CisKKwlpZiAoKGNoYW5uZWwtPmRldlR5cGUgPCAwKQorCSAgICB8fCAoY2hhbm5lbC0+ZGV2VHlwZSA+IERNQV9OVU1fREVWSUNFX0VOVFJJRVMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZG1hX2ludGVycnVwdF9oYW5kbGVyOiBJbnZhbGlkIGRldlR5cGU6ICVkXG4iLAorCQkgICAgICAgY2hhbm5lbC0+ZGV2VHlwZSk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtjaGFubmVsLT5kZXZUeXBlXTsKKworCS8qIFVwZGF0ZSBzdGF0cyAqLworCisJaWYgKChpcnFTdGF0dXMgJiBkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19UUkFOUykgIT0gMCkgeworCQlkZXZBdHRyLT50cmFuc2ZlclRpY2tzICs9CisJCSAgICAodGltZXJfZ2V0X3RpY2tfY291bnQoKSAtIGRldkF0dHItPnRyYW5zZmVyU3RhcnRUaW1lKTsKKwl9CisKKwlpZiAoKGlycVN0YXR1cyAmIGRtYWNId19JTlRFUlJVUFRfU1RBVFVTX0VSUk9SKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImRtYV9pbnRlcnJ1cHRfaGFuZGxlcjogZGV2VHlwZSA6JWQgRE1BIGVycm9yICglcylcbiIsCisJCSAgICAgICBjaGFubmVsLT5kZXZUeXBlLCBkZXZBdHRyLT5uYW1lKTsKKwl9IGVsc2UgeworCQlkZXZBdHRyLT5udW1UcmFuc2ZlcnMrKzsKKwkJZGV2QXR0ci0+dHJhbnNmZXJCeXRlcyArPSBkZXZBdHRyLT5udW1CeXRlczsKKwl9CisKKwkvKiBDYWxsIGFueSBpbnN0YWxsZWQgaGFuZGxlciAqLworCisJaWYgKGRldkF0dHItPmRldkhhbmRsZXIgIT0gTlVMTCkgeworCQlkZXZBdHRyLT5kZXZIYW5kbGVyKGNoYW5uZWwtPmRldlR5cGUsIGlycVN0YXR1cywKKwkJCQkgICAgZGV2QXR0ci0+dXNlckRhdGEpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBBbGxvY2F0ZXMgbWVtb3J5IHRvIGhvbGQgYSBkZXNjcmlwdG9yIHJpbmcuIFRoZSBkZXNjcmlwdG9yIHJpbmcgdGhlbgorKiAgIG5lZWRzIHRvIGJlIHBvcHVsYXRlZCBieSBtYWtpbmcgb25lIG9yIG1vcmUgY2FsbHMgdG8KKyogICBkbmFfYWRkX2Rlc2NyaXB0b3JzLgorKgorKiAgIFRoZSByZXR1cm5lZCBkZXNjcmlwdG9yIHJpbmcgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemVkLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgMCAgICAgICAgICAgRGVzY3JpcHRvciByaW5nIHdhcyBhbGxvY2F0ZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FSU5WQUwgICAgIEludmFsaWQgcGFyYW1ldGVycyBwYXNzZWQgaW4KKyogICAgICAgLUVOT01FTSAgICAgVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIGRlc2NyaXB0b3JzLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2FsbG9jX2Rlc2NyaXB0b3JfcmluZyhETUFfRGVzY3JpcHRvclJpbmdfdCAqcmluZywJLyogRGVzY3JpcHRvciByaW5nIHRvIHBvcHVsYXRlICovCisJCQkgICAgICBpbnQgbnVtRGVzY3JpcHRvcnMJLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIHRoYXQgbmVlZCB0byBiZSBhbGxvY2F0ZWQuICovCisgICAgKSB7CisJc2l6ZV90IGJ5dGVzVG9BbGxvYyA9IGRtYWNId19kZXNjcmlwdG9yTGVuKG51bURlc2NyaXB0b3JzKTsKKworCWlmICgocmluZyA9PSBOVUxMKSB8fCAobnVtRGVzY3JpcHRvcnMgPD0gMCkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmluZy0+cGh5c0FkZHIgPSAwOworCXJpbmctPmRlc2NyaXB0b3JzQWxsb2NhdGVkID0gMDsKKwlyaW5nLT5ieXRlc0FsbG9jYXRlZCA9IDA7CisKKwlyaW5nLT52aXJ0QWRkciA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoTlVMTCwKKwkJCQkJCSAgICAgYnl0ZXNUb0FsbG9jLAorCQkJCQkJICAgICAmcmluZy0+cGh5c0FkZHIsCisJCQkJCQkgICAgIEdGUF9LRVJORUwpOworCWlmIChyaW5nLT52aXJ0QWRkciA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJpbmctPmJ5dGVzQWxsb2NhdGVkID0gYnl0ZXNUb0FsbG9jOworCXJpbmctPmRlc2NyaXB0b3JzQWxsb2NhdGVkID0gbnVtRGVzY3JpcHRvcnM7CisKKwlyZXR1cm4gZG1hX2luaXRfZGVzY3JpcHRvcl9yaW5nKHJpbmcsIG51bURlc2NyaXB0b3JzKTsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfYWxsb2NfZGVzY3JpcHRvcl9yaW5nKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBSZWxlYXNlcyB0aGUgbWVtb3J5IHdoaWNoIHdhcyBwcmV2aW91c2x5IGFsbG9jYXRlZCBmb3IgYSBkZXNjcmlwdG9yIHJpbmcuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgZG1hX2ZyZWVfZGVzY3JpcHRvcl9yaW5nKERNQV9EZXNjcmlwdG9yUmluZ190ICpyaW5nCS8qIERlc2NyaXB0b3IgdG8gcmVsZWFzZSAqLworICAgICkgeworCWlmIChyaW5nLT52aXJ0QWRkciAhPSBOVUxMKSB7CisJCWRtYV9mcmVlX3dyaXRlY29tYmluZShOVUxMLAorCQkJCSAgICAgIHJpbmctPmJ5dGVzQWxsb2NhdGVkLAorCQkJCSAgICAgIHJpbmctPnZpcnRBZGRyLCByaW5nLT5waHlzQWRkcik7CisJfQorCisJcmluZy0+Ynl0ZXNBbGxvY2F0ZWQgPSAwOworCXJpbmctPmRlc2NyaXB0b3JzQWxsb2NhdGVkID0gMDsKKwlyaW5nLT52aXJ0QWRkciA9IE5VTEw7CisJcmluZy0+cGh5c0FkZHIgPSAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9mcmVlX2Rlc2NyaXB0b3JfcmluZyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhbGl6ZXMgYSBkZXNjcmlwdG9yIHJpbmcsIHNvIHRoYXQgZGVzY3JpcHRvcnMgY2FuIGJlIGFkZGVkIHRvIGl0LgorKiAgIE9uY2UgYSBkZXNjcmlwdG9yIHJpbmcgaGFzIGJlZW4gYWxsb2NhdGVkLCBpdCBtYXkgYmUgcmVpbml0aWFsaXplZCBmb3IKKyogICB1c2Ugd2l0aCBhZGRpdGlvbmFsL2RpZmZlcmVudCByZWdpb25zIG9mIG1lbW9yeS4KKyoKKyogICBOb3RlIHRoYXQgaWYgNyBkZXNjcmlwdG9ycyBhcmUgYWxsb2NhdGVkLCBpdCdzIHBlcmZlY3RseSBhY2NlcHRhYmxlIHRvCisqICAgaW5pdGlhbGl6ZSB0aGUgcmluZyB3aXRoIGEgc21hbGxlciBudW1iZXIgb2YgZGVzY3JpcHRvcnMuIFRoZSBhbW91bnQKKyogICBvZiBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgZGVzY3JpcHRvciByaW5nIHdpbGwgbm90IGJlIHJlZHVjZWQsIGFuZAorKiAgIHRoZSBkZXNjcmlwdG9yIHJpbmcgbWF5IGJlIHJlaW5pdGlhbGl6ZWQgbGF0ZXIKKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgICAgIERlc2NyaXB0b3IgcmluZyB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FTk9NRU0gICAgIFRoZSBkZXNjcmlwdG9yIHdoaWNoIHdhcyBwYXNzZWQgaW4gaGFzIGluc3VmZmljaWVudCBzcGFjZQorKiAgICAgICAgICAgICAgICAgICB0byBob2xkIHRoZSBkZXNpcmVkIG51bWJlciBvZiBkZXNjcmlwdG9ycy4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9pbml0X2Rlc2NyaXB0b3JfcmluZyhETUFfRGVzY3JpcHRvclJpbmdfdCAqcmluZywJLyogRGVzY3JpcHRvciByaW5nIHRvIGluaXRpYWxpemUgKi8KKwkJCSAgICAgaW50IG51bURlc2NyaXB0b3JzCS8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyB0byBpbml0aWFsaXplLiAqLworICAgICkgeworCWlmIChyaW5nLT52aXJ0QWRkciA9PSBOVUxMKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoZG1hY0h3X2luaXREZXNjcmlwdG9yKHJpbmctPnZpcnRBZGRyLAorCQkJCSAgcmluZy0+cGh5c0FkZHIsCisJCQkJICByaW5nLT5ieXRlc0FsbG9jYXRlZCwgbnVtRGVzY3JpcHRvcnMpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJkbWFfaW5pdF9kZXNjcmlwdG9yX3Jpbmc6IGRtYWNId19pbml0RGVzY3JpcHRvciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfaW5pdF9kZXNjcmlwdG9yX3JpbmcpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIERldGVybWluZXMgdGhlIG51bWJlciBvZiBkZXNjcmlwdG9ycyB3aGljaCB3b3VsZCBiZSByZXF1aXJlZCBmb3IgYQorKiAgIHRyYW5zZmVyIG9mIHRoZSBpbmRpY2F0ZWQgbWVtb3J5IHJlZ2lvbi4KKyoKKyogICBUaGlzIGZ1bmN0aW9uIGFsc28gbmVlZHMgdG8ga25vdyB3aGljaCBETUEgZGV2aWNlIHRoaXMgdHJhbnNmZXIgd2lsbAorKiAgIGJlIGRlc3RpbmVkIGZvciwgc28gdGhhdCB0aGUgYXBwcm9wcmlhdGUgRE1BIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHJldHJpZXZlZC4KKyogICBETUEgcGFyYW1ldGVycyBzdWNoIGFzIHRyYW5zZmVyIHdpZHRoLCBhbmQgd2hldGhlciB0aGlzIGlzIGEgbWVtb3J5LXRvLW1lbW9yeQorKiAgIG9yIG1lbW9yeS10by1wZXJpcGhlcmFsLCBldGMgY2FuIGFsbCBhZmZlY3QgdGhlIGFjdHVhbCBudW1iZXIgb2YgZGVzY3JpcHRvcnMKKyogICByZXF1aXJlZC4KKyoKKyogICBAcmV0dXJuCisqICAgICAgID4gMCAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHJlcXVpcmVkIGZvciB0aGUgaW5kaWNhdGVkIHRyYW5zZmVyCisqICAgICAgIC1FTk9ERVYgLSBEZXZpY2UgaGFuZGVkIGluIGlzIGludmFsaWQuCisqICAgICAgIC1FSU5WQUwgSW52YWxpZCBwYXJhbWV0ZXJzCisqICAgICAgIC1FTk9NRU0gTWVtb3J5IGV4aGF1c3RlZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2NhbGN1bGF0ZV9kZXNjcmlwdG9yX2NvdW50KERNQV9EZXZpY2VfdCBkZXZpY2UsCS8qIERNQSBEZXZpY2UgdGhhdCB0aGlzIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoICovCisJCQkJICAgZG1hX2FkZHJfdCBzcmNEYXRhLAkvKiBQbGFjZSB0byBnZXQgZGF0YSB0byB3cml0ZSB0byBkZXZpY2UgKi8KKwkJCQkgICBkbWFfYWRkcl90IGRzdERhdGEsCS8qIFBvaW50ZXIgdG8gZGV2aWNlIGRhdGEgYWRkcmVzcyAqLworCQkJCSAgIHNpemVfdCBudW1CeXRlcwkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgdG8gdGhlIGRldmljZSAqLworICAgICkgeworCWludCBudW1EZXNjcmlwdG9yczsKKwlETUFfRGV2aWNlQXR0cmlidXRlX3QgKmRldkF0dHI7CisKKwlpZiAoIUlzRGV2aWNlVmFsaWQoZGV2aWNlKSkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtkZXZpY2VdOworCisJbnVtRGVzY3JpcHRvcnMgPSBkbWFjSHdfY2FsY3VsYXRlRGVzY3JpcHRvckNvdW50KCZkZXZBdHRyLT5jb25maWcsCisJCQkJCQkJICAgICAgKHZvaWQgKilzcmNEYXRhLAorCQkJCQkJCSAgICAgICh2b2lkICopZHN0RGF0YSwKKwkJCQkJCQkgICAgICBudW1CeXRlcyk7CisJaWYgKG51bURlc2NyaXB0b3JzIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJkbWFfY2FsY3VsYXRlX2Rlc2NyaXB0b3JfY291bnQ6IGRtYWNId19jYWxjdWxhdGVEZXNjcmlwdG9yQ291bnQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIG51bURlc2NyaXB0b3JzOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9jYWxjdWxhdGVfZGVzY3JpcHRvcl9jb3VudCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgQWRkcyBhIHJlZ2lvbiBvZiBtZW1vcnkgdG8gdGhlIGRlc2NyaXB0b3IgcmluZy4gTm90ZSB0aGF0IGl0IG1heSB0YWtlCisqICAgbXVsdGlwbGUgZGVzY3JpcHRvcnMgZm9yIGVhY2ggcmVnaW9uIG9mIG1lbW9yeS4gSXQgaXMgdGhlIGNhbGxlcnMKKyogICByZXNwb25zaWJpbGl0eSB0byBhbGxvY2F0ZSBhIHN1ZmZpY2llbnRseSBsYXJnZSBkZXNjcmlwdG9yIHJpbmcuCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIERlc2NyaXB0b3JzIHdlcmUgYWRkZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FTk9ERVYgRGV2aWNlIGhhbmRlZCBpbiBpcyBpbnZhbGlkLgorKiAgICAgICAtRUlOVkFMIEludmFsaWQgcGFyYW1ldGVycworKiAgICAgICAtRU5PTUVNIE1lbW9yeSBleGhhdXN0ZWQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9hZGRfZGVzY3JpcHRvcnMoRE1BX0Rlc2NyaXB0b3JSaW5nX3QgKnJpbmcsCS8qIERlc2NyaXB0b3IgcmluZyB0byBhZGQgZGVzY3JpcHRvcnMgdG8gKi8KKwkJCURNQV9EZXZpY2VfdCBkZXZpY2UsCS8qIERNQSBEZXZpY2UgdGhhdCBkZXNjcmlwdG9ycyBhcmUgZm9yICovCisJCQlkbWFfYWRkcl90IHNyY0RhdGEsCS8qIFBsYWNlIHRvIGdldCBkYXRhIChtZW1vcnkgb3IgZGV2aWNlKSAqLworCQkJZG1hX2FkZHJfdCBkc3REYXRhLAkvKiBQbGFjZSB0byBwdXQgZGF0YSAobWVtb3J5IG9yIGRldmljZSkgKi8KKwkJCXNpemVfdCBudW1CeXRlcwkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgdG8gdGhlIGRldmljZSAqLworICAgICkgeworCWludCByYzsKKwlETUFfRGV2aWNlQXR0cmlidXRlX3QgKmRldkF0dHI7CisKKwlpZiAoIUlzRGV2aWNlVmFsaWQoZGV2aWNlKSkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtkZXZpY2VdOworCisJcmMgPSBkbWFjSHdfc2V0RGF0YURlc2NyaXB0b3IoJmRldkF0dHItPmNvbmZpZywKKwkJCQkgICAgICByaW5nLT52aXJ0QWRkciwKKwkJCQkgICAgICAodm9pZCAqKXNyY0RhdGEsCisJCQkJICAgICAgKHZvaWQgKilkc3REYXRhLCBudW1CeXRlcyk7CisJaWYgKHJjIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJkbWFfYWRkX2Rlc2NyaXB0b3JzOiBkbWFjSHdfc2V0RGF0YURlc2NyaXB0b3IgZmFpbGVkIHdpdGggY29kZTogJWRcbiIsCisJCSAgICAgICByYyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9hZGRfZGVzY3JpcHRvcnMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIFNldHMgdGhlIGRlc2NyaXB0b3IgcmluZyBhc3NvY2lhdGVkIHdpdGggYSBkZXZpY2UuCisqCisqICAgT25jZSBzZXQsIHRoZSBkZXNjcmlwdG9yIHJpbmcgd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSwgZXZlbgorKiAgIGFjcm9zcyBjaGFubmVsIHJlcXVlc3QvZnJlZSBjYWxscy4gUGFzc2luZyBpbiBhIE5VTEwgZGVzY3JpcHRvciByaW5nCisqICAgd2lsbCByZWxlYXNlIGFueSBkZXNjcmlwdG9yIHJpbmcgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLgorKgorKiAgIE5vdGU6IElmIHlvdSBjYWxsIGRtYV90cmFuc2Zlciwgb3Igb25lIG9mIHRoZSBvdGhlciBkbWFfYWxsb2NfIGZ1bmN0aW9ucworKiAgICAgICAgIHRoZSBkZXNjcmlwdG9yIHJpbmcgbWF5IGJlIHJlbGVhc2VkIGFuZCByZWFsbG9jYXRlZC4KKyoKKyogICBOb3RlOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVsZWFzZSB0aGUgZGVzY3JpcHRvciBtZW1vcnkgZm9yIGFueSBjdXJyZW50CisqICAgICAgICAgZGVzY3JpcHRvciByaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRldmljZS4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgRGVzY3JpcHRvcnMgd2VyZSBhZGRlZCBzdWNjZXNzZnVsbHkKKyogICAgICAgLUVOT0RFViBEZXZpY2UgaGFuZGVkIGluIGlzIGludmFsaWQuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfc2V0X2RldmljZV9kZXNjcmlwdG9yX3JpbmcoRE1BX0RldmljZV90IGRldmljZSwJLyogRGV2aWNlIHRvIHVwZGF0ZSB0aGUgZGVzY3JpcHRvciByaW5nIGZvci4gKi8KKwkJCQkgICBETUFfRGVzY3JpcHRvclJpbmdfdCAqcmluZwkvKiBEZXNjcmlwdG9yIHJpbmcgdG8gYWRkIGRlc2NyaXB0b3JzIHRvICovCisgICAgKSB7CisJRE1BX0RldmljZUF0dHJpYnV0ZV90ICpkZXZBdHRyOworCisJaWYgKCFJc0RldmljZVZhbGlkKGRldmljZSkpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldkF0dHIgPSAmRE1BX2dEZXZpY2VBdHRyaWJ1dGVbZGV2aWNlXTsKKworCS8qIEZyZWUgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGRlc2NyaXB0b3IgcmluZyAqLworCisJZG1hX2ZyZWVfZGVzY3JpcHRvcl9yaW5nKCZkZXZBdHRyLT5yaW5nKTsKKworCWlmIChyaW5nICE9IE5VTEwpIHsKKwkJLyogQ29weSBpbiB0aGUgbmV3IG9uZSAqLworCisJCWRldkF0dHItPnJpbmcgPSAqcmluZzsKKwl9CisKKwkvKiBTZXQgdGhpbmdzIHVwIHNvIHRoYXQgaWYgZG1hX3RyYW5zZmVyIGlzIGNhbGxlZCB0aGVuIHRoaXMgZGVzY3JpcHRvciAqLworCS8qIHJpbmcgd2lsbCBnZXQgZnJlZWQuICovCisKKwlkZXZBdHRyLT5wcmV2U3JjRGF0YSA9IDA7CisJZGV2QXR0ci0+cHJldkRzdERhdGEgPSAwOworCWRldkF0dHItPnByZXZOdW1CeXRlcyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfc2V0X2RldmljZV9kZXNjcmlwdG9yX3JpbmcpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIFJldHJpZXZlcyB0aGUgZGVzY3JpcHRvciByaW5nIGFzc29jaWF0ZWQgd2l0aCBhIGRldmljZS4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgRGVzY3JpcHRvcnMgd2VyZSBhZGRlZCBzdWNjZXNzZnVsbHkKKyogICAgICAgLUVOT0RFViBEZXZpY2UgaGFuZGVkIGluIGlzIGludmFsaWQuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfZ2V0X2RldmljZV9kZXNjcmlwdG9yX3JpbmcoRE1BX0RldmljZV90IGRldmljZSwJLyogRGV2aWNlIHRvIHJldHJpZXZlIHRoZSBkZXNjcmlwdG9yIHJpbmcgZm9yLiAqLworCQkJCSAgIERNQV9EZXNjcmlwdG9yUmluZ190ICpyaW5nCS8qIFBsYWNlIHRvIHN0b3JlIHJldHJpZXZlZCByaW5nICovCisgICAgKSB7CisJRE1BX0RldmljZUF0dHJpYnV0ZV90ICpkZXZBdHRyOworCisJbWVtc2V0KHJpbmcsIDAsIHNpemVvZigqcmluZykpOworCisJaWYgKCFJc0RldmljZVZhbGlkKGRldmljZSkpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldkF0dHIgPSAmRE1BX2dEZXZpY2VBdHRyaWJ1dGVbZGV2aWNlXTsKKworCSpyaW5nID0gZGV2QXR0ci0+cmluZzsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9nZXRfZGV2aWNlX2Rlc2NyaXB0b3JfcmluZyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgQ29uZmlndXJlcyBhIERNQSBjaGFubmVsLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgPj0gMCAgICAtIEluaXRpYWxpemF0aW9uIHdhcyBzdWNjZXNzZnVsbC4KKyoKKyogICAgICAgLUVCVVNZICAtIERldmljZSBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZC4KKyogICAgICAgLUVOT0RFViAtIERldmljZSBoYW5kZWQgaW4gaXMgaW52YWxpZC4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBDb25maWdDaGFubmVsKERNQV9IYW5kbGVfdCBoYW5kbGUpCit7CisJRE1BX0NoYW5uZWxfdCAqY2hhbm5lbDsKKwlETUFfRGV2aWNlQXR0cmlidXRlX3QgKmRldkF0dHI7CisJaW50IGNvbnRyb2xsZXJJZHg7CisKKwljaGFubmVsID0gSGFuZGxlVG9DaGFubmVsKGhhbmRsZSk7CisJaWYgKGNoYW5uZWwgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtjaGFubmVsLT5kZXZUeXBlXTsKKwljb250cm9sbGVySWR4ID0gQ09OVFJPTExFUl9GUk9NX0hBTkRMRShoYW5kbGUpOworCisJaWYgKChkZXZBdHRyLT5mbGFncyAmIERNQV9ERVZJQ0VfRkxBR19QT1JUX1BFUl9ETUFDKSAhPSAwKSB7CisJCWlmIChkZXZBdHRyLT5jb25maWcudHJhbnNmZXJUeXBlID09CisJCSAgICBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fUEVSSVBIRVJBTCkgeworCQkJZGV2QXR0ci0+Y29uZmlnLmRzdFBlcmlwaGVyYWxQb3J0ID0KKwkJCSAgICBkZXZBdHRyLT5kbWFjUG9ydFtjb250cm9sbGVySWR4XTsKKwkJfSBlbHNlIGlmIChkZXZBdHRyLT5jb25maWcudHJhbnNmZXJUeXBlID09CisJCQkgICBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSkgeworCQkJZGV2QXR0ci0+Y29uZmlnLnNyY1BlcmlwaGVyYWxQb3J0ID0KKwkJCSAgICBkZXZBdHRyLT5kbWFjUG9ydFtjb250cm9sbGVySWR4XTsKKwkJfQorCX0KKworCWlmIChkbWFjSHdfY29uZmlnQ2hhbm5lbChjaGFubmVsLT5kbWFjSHdIYW5kbGUsICZkZXZBdHRyLT5jb25maWcpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb25maWdDaGFubmVsOiBkbWFjSHdfY29uZmlnQ2hhbm5lbCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBJbnRpYWxpemVzIGFsbCBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRE1BLgorKiAgIEByZXR1cm4KKyogICAgICAgPj0gMCAgICAtIEluaXRpYWxpemF0aW9uIHdhcyBzdWNjZXNzZnVsbC4KKyoKKyogICAgICAgLUVCVVNZICAtIERldmljZSBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZC4KKyogICAgICAgLUVOT0RFViAtIERldmljZSBoYW5kZWQgaW4gaXMgaW52YWxpZC4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9pbml0KHZvaWQpCit7CisJaW50IHJjID0gMDsKKwlpbnQgY29udHJvbGxlcklkeDsKKwlpbnQgY2hhbm5lbElkeDsKKwlETUFfRGV2aWNlX3QgZGV2SWR4OworCURNQV9DaGFubmVsX3QgKmNoYW5uZWw7CisJRE1BX0hhbmRsZV90IGRlZGljYXRlZEhhbmRsZTsKKworCW1lbXNldCgmZ0RNQSwgMCwgc2l6ZW9mKGdETUEpKTsKKworCWluaXRfTVVURVhfTE9DS0VEKCZnRE1BLmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmdETUEuZnJlZUNoYW5uZWxRKTsKKworCS8qIEluaXRpYWxpemUgdGhlIEhhcmR3YXJlICovCisKKwlkbWFjSHdfaW5pdERtYSgpOworCisJLyogU3RhcnQgb2ZmIGJ5IG1hcmtpbmcgYWxsIG9mIHRoZSBETUEgY2hhbm5lbHMgYXMgc2hhcmVkLiAqLworCisJZm9yIChjb250cm9sbGVySWR4ID0gMDsgY29udHJvbGxlcklkeCA8IERNQV9OVU1fQ09OVFJPTExFUlM7CisJICAgICBjb250cm9sbGVySWR4KyspIHsKKwkJZm9yIChjaGFubmVsSWR4ID0gMDsgY2hhbm5lbElkeCA8IERNQV9OVU1fQ0hBTk5FTFM7CisJCSAgICAgY2hhbm5lbElkeCsrKSB7CisJCQljaGFubmVsID0KKwkJCSAgICAmZ0RNQS5jb250cm9sbGVyW2NvbnRyb2xsZXJJZHhdLmNoYW5uZWxbY2hhbm5lbElkeF07CisKKwkJCWNoYW5uZWwtPmZsYWdzID0gMDsKKwkJCWNoYW5uZWwtPmRldlR5cGUgPSBETUFfREVWSUNFX05PTkU7CisJCQljaGFubmVsLT5sYXN0RGV2VHlwZSA9IERNQV9ERVZJQ0VfTk9ORTsKKworI2lmIChETUFfREVCVUdfVFJBQ0tfUkVTRVJWQVRJT04pCisJCQljaGFubmVsLT5maWxlTmFtZSA9ICIiOworCQkJY2hhbm5lbC0+bGluZU51bSA9IDA7CisjZW5kaWYKKworCQkJY2hhbm5lbC0+ZG1hY0h3SGFuZGxlID0KKwkJCSAgICBkbWFjSHdfZ2V0Q2hhbm5lbEhhbmRsZShkbWFjSHdfTUFLRV9DSEFOTkVMX0lECisJCQkJCQkgICAgKGNvbnRyb2xsZXJJZHgsCisJCQkJCQkgICAgIGNoYW5uZWxJZHgpKTsKKwkJCWRtYWNId19pbml0Q2hhbm5lbChjaGFubmVsLT5kbWFjSHdIYW5kbGUpOworCQl9CisJfQorCisJLyogUmVjb3JkIGFueSBzcGVjaWFsIGF0dHJpYnV0ZXMgdGhhdCBjaGFubmVscyBtYXkgaGF2ZSAqLworCisJZ0RNQS5jb250cm9sbGVyWzBdLmNoYW5uZWxbMF0uZmxhZ3MgfD0gRE1BX0NIQU5ORUxfRkxBR19MQVJHRV9GSUZPOworCWdETUEuY29udHJvbGxlclswXS5jaGFubmVsWzFdLmZsYWdzIHw9IERNQV9DSEFOTkVMX0ZMQUdfTEFSR0VfRklGTzsKKwlnRE1BLmNvbnRyb2xsZXJbMV0uY2hhbm5lbFswXS5mbGFncyB8PSBETUFfQ0hBTk5FTF9GTEFHX0xBUkdFX0ZJRk87CisJZ0RNQS5jb250cm9sbGVyWzFdLmNoYW5uZWxbMV0uZmxhZ3MgfD0gRE1BX0NIQU5ORUxfRkxBR19MQVJHRV9GSUZPOworCisJLyogTm93IHdhbGsgdGhyb3VnaCBhbmQgcmVjb3JkIHRoZSBkZWRpY2F0ZWQgY2hhbm5lbHMuICovCisKKwlmb3IgKGRldklkeCA9IDA7IGRldklkeCA8IERNQV9OVU1fREVWSUNFX0VOVFJJRVM7IGRldklkeCsrKSB7CisJCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtkZXZJZHhdOworCisJCWlmICgoKGRldkF0dHItPmZsYWdzICYgRE1BX0RFVklDRV9GTEFHX05PX0lTUikgIT0gMCkKKwkJICAgICYmICgoZGV2QXR0ci0+ZmxhZ3MgJiBETUFfREVWSUNFX0ZMQUdfSVNfREVESUNBVEVEKSA9PSAwKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIkRNQSBEZXZpY2U6ICVzIENhbiBvbmx5IHJlcXVlc3QgTk9fSVNSIGZvciBkZWRpY2F0ZWQgZGV2aWNlc1xuIiwKKwkJCSAgICAgICBkZXZBdHRyLT5uYW1lKTsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKChkZXZBdHRyLT5mbGFncyAmIERNQV9ERVZJQ0VfRkxBR19JU19ERURJQ0FURUQpICE9IDApIHsKKwkJCS8qIFRoaXMgaXMgYSBkZWRpY2F0ZWQgZGV2aWNlLiBNYXJrIHRoZSBjaGFubmVsIGFzIGJlaW5nIHJlc2VydmVkLiAqLworCisJCQlpZiAoZGV2QXR0ci0+ZGVkaWNhdGVkQ29udHJvbGxlciA+PSBETUFfTlVNX0NPTlRST0xMRVJTKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJETUEgRGV2aWNlOiAlcyBETUEgQ29udHJvbGxlciAlZCBpcyBvdXQgb2YgcmFuZ2VcbiIsCisJCQkJICAgICAgIGRldkF0dHItPm5hbWUsCisJCQkJICAgICAgIGRldkF0dHItPmRlZGljYXRlZENvbnRyb2xsZXIpOworCQkJCXJjID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJaWYgKGRldkF0dHItPmRlZGljYXRlZENoYW5uZWwgPj0gRE1BX05VTV9DSEFOTkVMUykgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiRE1BIERldmljZTogJXMgRE1BIENoYW5uZWwgJWQgaXMgb3V0IG9mIHJhbmdlXG4iLAorCQkJCSAgICAgICBkZXZBdHRyLT5uYW1lLAorCQkJCSAgICAgICBkZXZBdHRyLT5kZWRpY2F0ZWRDaGFubmVsKTsKKwkJCQlyYyA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCWRlZGljYXRlZEhhbmRsZSA9CisJCQkgICAgTUFLRV9IQU5ETEUoZGV2QXR0ci0+ZGVkaWNhdGVkQ29udHJvbGxlciwKKwkJCQkJZGV2QXR0ci0+ZGVkaWNhdGVkQ2hhbm5lbCk7CisJCQljaGFubmVsID0gSGFuZGxlVG9DaGFubmVsKGRlZGljYXRlZEhhbmRsZSk7CisKKwkJCWlmICgoY2hhbm5lbC0+ZmxhZ3MgJiBETUFfQ0hBTk5FTF9GTEFHX0lTX0RFRElDQVRFRCkgIT0KKwkJCSAgICAwKSB7CisJCQkJcHJpbnRrCisJCQkJICAgICgiRE1BIERldmljZTogJXMgYXR0ZW1wdGluZyB0byB1c2Ugc2FtZSBETUEgQ29udHJvbGxlcjpDaGFubmVsICglZDolZCkgYXMgJXNcbiIsCisJCQkJICAgICBkZXZBdHRyLT5uYW1lLAorCQkJCSAgICAgZGV2QXR0ci0+ZGVkaWNhdGVkQ29udHJvbGxlciwKKwkJCQkgICAgIGRldkF0dHItPmRlZGljYXRlZENoYW5uZWwsCisJCQkJICAgICBETUFfZ0RldmljZUF0dHJpYnV0ZVtjaGFubmVsLT5kZXZUeXBlXS4KKwkJCQkgICAgIG5hbWUpOworCQkJCXJjID0gLUVCVVNZOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQljaGFubmVsLT5mbGFncyB8PSBETUFfQ0hBTk5FTF9GTEFHX0lTX0RFRElDQVRFRDsKKwkJCWNoYW5uZWwtPmRldlR5cGUgPSBkZXZJZHg7CisKKwkJCWlmIChkZXZBdHRyLT5mbGFncyAmIERNQV9ERVZJQ0VfRkxBR19OT19JU1IpIHsKKwkJCQljaGFubmVsLT5mbGFncyB8PSBETUFfQ0hBTk5FTF9GTEFHX05PX0lTUjsKKwkJCX0KKworCQkJLyogRm9yIGRlZGljYXRlZCBjaGFubmVscywgd2UgY2FuIGdvIGFoZWFkIGFuZCBjb25maWd1cmUgdGhlIERNQSBjaGFubmVsIG5vdyAqLworCQkJLyogYXMgd2VsbC4gKi8KKworCQkJQ29uZmlnQ2hhbm5lbChkZWRpY2F0ZWRIYW5kbGUpOworCQl9CisJfQorCisJLyogR28gdGhyb3VnaCBhbmQgcmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVycyAqLworCisJZm9yIChjb250cm9sbGVySWR4ID0gMDsgY29udHJvbGxlcklkeCA8IERNQV9OVU1fQ09OVFJPTExFUlM7CisJICAgICBjb250cm9sbGVySWR4KyspIHsKKwkJZm9yIChjaGFubmVsSWR4ID0gMDsgY2hhbm5lbElkeCA8IERNQV9OVU1fQ0hBTk5FTFM7CisJCSAgICAgY2hhbm5lbElkeCsrKSB7CisJCQljaGFubmVsID0KKwkJCSAgICAmZ0RNQS5jb250cm9sbGVyW2NvbnRyb2xsZXJJZHhdLmNoYW5uZWxbY2hhbm5lbElkeF07CisKKwkJCWlmICgoY2hhbm5lbC0+ZmxhZ3MgJiBETUFfQ0hBTk5FTF9GTEFHX05PX0lTUikgPT0gMCkgeworCQkJCXNucHJpbnRmKGNoYW5uZWwtPm5hbWUsIHNpemVvZihjaGFubmVsLT5uYW1lKSwKKwkJCQkJICJkbWEgJWQ6JWQgJXMiLCBjb250cm9sbGVySWR4LAorCQkJCQkgY2hhbm5lbElkeCwKKwkJCQkJIGNoYW5uZWwtPmRldlR5cGUgPT0KKwkJCQkJIERNQV9ERVZJQ0VfTk9ORSA/ICIiIDoKKwkJCQkJIERNQV9nRGV2aWNlQXR0cmlidXRlW2NoYW5uZWwtPmRldlR5cGVdLgorCQkJCQkgbmFtZSk7CisKKwkJCQlyYyA9CisJCQkJICAgICByZXF1ZXN0X2lycShJUlFfRE1BMEMwICsKKwkJCQkJCSAoY29udHJvbGxlcklkeCAqCisJCQkJCQkgIERNQV9OVU1fQ0hBTk5FTFMpICsKKwkJCQkJCSBjaGFubmVsSWR4LAorCQkJCQkJIGRtYV9pbnRlcnJ1cHRfaGFuZGxlciwKKwkJCQkJCSBJUlFGX0RJU0FCTEVELCBjaGFubmVsLT5uYW1lLAorCQkJCQkJIGNoYW5uZWwpOworCQkJCWlmIChyYyAhPSAwKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgInJlcXVlc3RfaXJxIGZvciBJUlFfRE1BJWRDJWQgZmFpbGVkXG4iLAorCQkJCQkgICAgICAgY29udHJvbGxlcklkeCwgY2hhbm5lbElkeCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyogQ3JlYXRlIC9wcm9jL2RtYS9jaGFubmVscyBhbmQgL3Byb2MvZG1hL2RldmljZXMgKi8KKworCWdEbWFEaXIgPSBjcmVhdGVfcHJvY19lbnRyeSgiZG1hIiwgU19JRkRJUiB8IFNfSVJVR08gfCBTX0lYVUdPLCBOVUxMKTsKKworCWlmIChnRG1hRGlyID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gY3JlYXRlIC9wcm9jL2RtYVxuIik7CisJfSBlbHNlIHsKKwkJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiY2hhbm5lbHMiLCAwLCBnRG1hRGlyLAorCQkJCSAgICAgICBkbWFfcHJvY19yZWFkX2NoYW5uZWxzLCBOVUxMKTsKKwkJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiZGV2aWNlcyIsIDAsIGdEbWFEaXIsCisJCQkJICAgICAgIGRtYV9wcm9jX3JlYWRfZGV2aWNlcywgTlVMTCk7CisJCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoIm1lbS10eXBlIiwgMCwgZ0RtYURpciwKKwkJCQkgICAgICAgZG1hX3Byb2NfcmVhZF9tZW1fdHlwZSwgTlVMTCk7CisJfQorCitvdXQ6CisKKwl1cCgmZ0RNQS5sb2NrKTsKKworCXJldHVybiByYzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBSZXNlcnZlcyBhIGNoYW5uZWwgZm9yIHVzZSB3aXRoIEBhIGRldi4gSWYgdGhlIGRldmljZSBpcyBzZXR1cCB0byB1c2UKKyogICBhIHNoYXJlZCBjaGFubmVsLCB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCBhIGZyZWUgY2hhbm5lbAorKiAgIGJlY29tZXMgYXZhaWxhYmxlLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgPj0gMCAgICAtIEEgdmFsaWQgRE1BIEhhbmRsZS4KKyogICAgICAgLUVCVVNZICAtIERldmljZSBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZC4KKyogICAgICAgLUVOT0RFViAtIERldmljZSBoYW5kZWQgaW4gaXMgaW52YWxpZC4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIChETUFfREVCVUdfVFJBQ0tfUkVTRVJWQVRJT04pCitETUFfSGFuZGxlX3QgZG1hX3JlcXVlc3RfY2hhbm5lbF9kYmcKKyAgICAoRE1BX0RldmljZV90IGRldiwgY29uc3QgY2hhciAqZmlsZU5hbWUsIGludCBsaW5lTnVtKQorI2Vsc2UKK0RNQV9IYW5kbGVfdCBkbWFfcmVxdWVzdF9jaGFubmVsKERNQV9EZXZpY2VfdCBkZXYpCisjZW5kaWYKK3sKKwlETUFfSGFuZGxlX3QgaGFuZGxlOworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKwlETUFfQ2hhbm5lbF90ICpjaGFubmVsOworCWludCBjb250cm9sbGVySWR4OworCWludCBjb250cm9sbGVySWR4MjsKKwlpbnQgY2hhbm5lbElkeDsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmdETUEubG9jaykgPCAwKSB7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJaWYgKChkZXYgPCAwKSB8fCAoZGV2ID49IERNQV9OVU1fREVWSUNFX0VOVFJJRVMpKSB7CisJCWhhbmRsZSA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKwlkZXZBdHRyID0gJkRNQV9nRGV2aWNlQXR0cmlidXRlW2Rldl07CisKKyNpZiAoRE1BX0RFQlVHX1RSQUNLX1JFU0VSVkFUSU9OKQorCXsKKwkJY2hhciAqczsKKworCQlzID0gc3RycmNocihmaWxlTmFtZSwgJy8nKTsKKwkJaWYgKHMgIT0gTlVMTCkgeworCQkJZmlsZU5hbWUgPSBzICsgMTsKKwkJfQorCX0KKyNlbmRpZgorCWlmICgoZGV2QXR0ci0+ZmxhZ3MgJiBETUFfREVWSUNFX0ZMQUdfSU5fVVNFKSAhPSAwKSB7CisJCS8qIFRoaXMgZGV2aWNlIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGFuZCBub3QgYmVlbiBmcmVlZCAqLworCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRldmljZSAlcyBpcyBhbHJlYWR5IHJlcXVlc3RlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkZXZBdHRyLT5uYW1lKTsKKwkJaGFuZGxlID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoKGRldkF0dHItPmZsYWdzICYgRE1BX0RFVklDRV9GTEFHX0lTX0RFRElDQVRFRCkgIT0gMCkgeworCQkvKiBUaGlzIGRldmljZSBoYXMgYSBkZWRpY2F0ZWQgY2hhbm5lbC4gKi8KKworCQljaGFubmVsID0KKwkJICAgICZnRE1BLmNvbnRyb2xsZXJbZGV2QXR0ci0+ZGVkaWNhdGVkQ29udHJvbGxlcl0uCisJCSAgICBjaGFubmVsW2RldkF0dHItPmRlZGljYXRlZENoYW5uZWxdOworCQlpZiAoKGNoYW5uZWwtPmZsYWdzICYgRE1BX0NIQU5ORUxfRkxBR19JTl9VU0UpICE9IDApIHsKKwkJCWhhbmRsZSA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJY2hhbm5lbC0+ZmxhZ3MgfD0gRE1BX0NIQU5ORUxfRkxBR19JTl9VU0U7CisJCWRldkF0dHItPmZsYWdzIHw9IERNQV9ERVZJQ0VfRkxBR19JTl9VU0U7CisKKyNpZiAoRE1BX0RFQlVHX1RSQUNLX1JFU0VSVkFUSU9OKQorCQljaGFubmVsLT5maWxlTmFtZSA9IGZpbGVOYW1lOworCQljaGFubmVsLT5saW5lTnVtID0gbGluZU51bTsKKyNlbmRpZgorCQloYW5kbGUgPQorCQkgICAgTUFLRV9IQU5ETEUoZGV2QXR0ci0+ZGVkaWNhdGVkQ29udHJvbGxlciwKKwkJCQlkZXZBdHRyLT5kZWRpY2F0ZWRDaGFubmVsKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVGhpcyBkZXZpY2UgbmVlZHMgdG8gdXNlIG9uZSBvZiB0aGUgc2hhcmVkIGNoYW5uZWxzLiAqLworCisJaGFuZGxlID0gRE1BX0lOVkFMSURfSEFORExFOworCXdoaWxlIChoYW5kbGUgPT0gRE1BX0lOVkFMSURfSEFORExFKSB7CisJCS8qIFNjYW4gdGhyb3VnaCB0aGUgc2hhcmVkIGNoYW5uZWxzIGFuZCBzZWUgaWYgb25lIGlzIGF2YWlsYWJsZSAqLworCisJCWZvciAoY29udHJvbGxlcklkeDIgPSAwOyBjb250cm9sbGVySWR4MiA8IERNQV9OVU1fQ09OVFJPTExFUlM7CisJCSAgICAgY29udHJvbGxlcklkeDIrKykgeworCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCB0cnkgb24gY29udHJvbGxlciAxIGZpcnN0LiAqLworCisJCQljb250cm9sbGVySWR4ID0gY29udHJvbGxlcklkeDI7CisJCQlpZiAoKGRldkF0dHItPgorCQkJICAgICBmbGFncyAmIERNQV9ERVZJQ0VfRkxBR19BTExPQ19ETUExX0ZJUlNUKSAhPSAwKSB7CisJCQkJY29udHJvbGxlcklkeCA9IDEgLSBjb250cm9sbGVySWR4OworCQkJfQorCisJCQkvKiBTZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgb24gdGhlIGNvbnRyb2xsZXIgYmVpbmcgdGVzdGVkICovCisKKwkJCWlmICgoZGV2QXR0ci0+CisJCQkgICAgIGZsYWdzICYgKERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwIDw8IGNvbnRyb2xsZXJJZHgpKQorCQkJICAgICE9IDApIHsKKwkJCQlmb3IgKGNoYW5uZWxJZHggPSAwOworCQkJCSAgICAgY2hhbm5lbElkeCA8IERNQV9OVU1fQ0hBTk5FTFM7CisJCQkJICAgICBjaGFubmVsSWR4KyspIHsKKwkJCQkJY2hhbm5lbCA9CisJCQkJCSAgICAmZ0RNQS5jb250cm9sbGVyW2NvbnRyb2xsZXJJZHhdLgorCQkJCQkgICAgY2hhbm5lbFtjaGFubmVsSWR4XTsKKworCQkJCQlpZiAoKChjaGFubmVsLT4KKwkJCQkJICAgICAgZmxhZ3MgJgorCQkJCQkgICAgICBETUFfQ0hBTk5FTF9GTEFHX0lTX0RFRElDQVRFRCkgPT0KKwkJCQkJICAgICAwKQorCQkJCQkgICAgJiYKKwkJCQkJICAgICgoY2hhbm5lbC0+CisJCQkJCSAgICAgIGZsYWdzICYgRE1BX0NIQU5ORUxfRkxBR19JTl9VU0UpCisJCQkJCSAgICAgPT0gMCkpIHsKKwkJCQkJCWlmICgoKGNoYW5uZWwtPgorCQkJCQkJICAgICAgZmxhZ3MgJgorCQkJCQkJICAgICAgRE1BX0NIQU5ORUxfRkxBR19MQVJHRV9GSUZPKQorCQkJCQkJICAgICAhPSAwKQorCQkJCQkJICAgICYmCisJCQkJCQkgICAgKChkZXZBdHRyLT4KKwkJCQkJCSAgICAgIGZsYWdzICYKKwkJCQkJCSAgICAgIERNQV9ERVZJQ0VfRkxBR19BTExPV19MQVJHRV9GSUZPKQorCQkJCQkJICAgICA9PSAwKSkgeworCQkJCQkJCS8qIFRoaXMgY2hhbm5lbCBpcyBhIGxhcmdlIGZpZm8gLSBkb24ndCB0aWUgaXQgdXAgKi8KKwkJCQkJCQkvKiB3aXRoIGRldmljZXMgdGhhdCB3ZSBkb24ndCB3YW50IHVzaW5nIGl0LiAqLworCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCWNoYW5uZWwtPmZsYWdzIHw9CisJCQkJCQkgICAgRE1BX0NIQU5ORUxfRkxBR19JTl9VU0U7CisJCQkJCQljaGFubmVsLT5kZXZUeXBlID0gZGV2OworCQkJCQkJZGV2QXR0ci0+ZmxhZ3MgfD0KKwkJCQkJCSAgICBETUFfREVWSUNFX0ZMQUdfSU5fVVNFOworCisjaWYgKERNQV9ERUJVR19UUkFDS19SRVNFUlZBVElPTikKKwkJCQkJCWNoYW5uZWwtPmZpbGVOYW1lID0gZmlsZU5hbWU7CisJCQkJCQljaGFubmVsLT5saW5lTnVtID0gbGluZU51bTsKKyNlbmRpZgorCQkJCQkJaGFuZGxlID0KKwkJCQkJCSAgICBNQUtFX0hBTkRMRShjb250cm9sbGVySWR4LAorCQkJCQkJCQljaGFubmVsSWR4KTsKKworCQkJCQkJLyogTm93IHRoYXQgd2UndmUgcmVzZXJ2ZWQgdGhlIGNoYW5uZWwgLSB3ZSBjYW4gZ28gYWhlYWQgYW5kIGNvbmZpZ3VyZSBpdCAqLworCisJCQkJCQlpZiAoQ29uZmlnQ2hhbm5lbChoYW5kbGUpICE9IDApIHsKKwkJCQkJCQloYW5kbGUgPSAtRUlPOworCQkJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJCSAgICAgICAiZG1hX3JlcXVlc3RfY2hhbm5lbDogQ29uZmlnQ2hhbm5lbCBmYWlsZWRcbiIpOworCQkJCQkJfQorCQkJCQkJZ290byBvdXQ7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBObyBjaGFubmVscyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZS4gTGV0J3Mgd2FpdCBmb3Igb25lIHRvIGZyZWUgdXAuICovCisKKwkJeworCQkJREVGSU5FX1dBSVQod2FpdCk7CisKKwkJCXByZXBhcmVfdG9fd2FpdCgmZ0RNQS5mcmVlQ2hhbm5lbFEsICZ3YWl0LAorCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJdXAoJmdETUEubG9jayk7CisJCQlzY2hlZHVsZSgpOworCQkJZmluaXNoX3dhaXQoJmdETUEuZnJlZUNoYW5uZWxRLCAmd2FpdCk7CisKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCS8qIFdlIGRvbid0IGN1cnJlbnRseSBob2xkIGdETUEubG9jaywgc28gd2UgcmV0dXJuIGRpcmVjdGx5ICovCisKKwkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQkJfQorCQl9CisKKwkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZ0RNQS5sb2NrKSkgeworCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJfQorCX0KKworb3V0OgorCXVwKCZnRE1BLmxvY2spOworCisJcmV0dXJuIGhhbmRsZTsKK30KKworLyogQ3JlYXRlIGJvdGggX2RiZyBhbmQgbm9uIF9kYmcgZnVuY3Rpb25zIGZvciBtb2R1bGVzLiAqLworCisjaWYgKERNQV9ERUJVR19UUkFDS19SRVNFUlZBVElPTikKKyN1bmRlZiBkbWFfcmVxdWVzdF9jaGFubmVsCitETUFfSGFuZGxlX3QgZG1hX3JlcXVlc3RfY2hhbm5lbChETUFfRGV2aWNlX3QgZGV2KQoreworCXJldHVybiBkbWFfcmVxdWVzdF9jaGFubmVsX2RiZyhkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7Cit9CisKK0VYUE9SVF9TWU1CT0woZG1hX3JlcXVlc3RfY2hhbm5lbF9kYmcpOworI2VuZGlmCitFWFBPUlRfU1lNQk9MKGRtYV9yZXF1ZXN0X2NoYW5uZWwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIEZyZWVzIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgRE1BIEhhbmRsZS4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9mcmVlX2NoYW5uZWwoRE1BX0hhbmRsZV90IGhhbmRsZQkvKiBETUEgaGFuZGxlLiAqLworICAgICkgeworCWludCByYyA9IDA7CisJRE1BX0NoYW5uZWxfdCAqY2hhbm5lbDsKKwlETUFfRGV2aWNlQXR0cmlidXRlX3QgKmRldkF0dHI7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZnRE1BLmxvY2spIDwgMCkgeworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKworCWNoYW5uZWwgPSBIYW5kbGVUb0NoYW5uZWwoaGFuZGxlKTsKKwlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtjaGFubmVsLT5kZXZUeXBlXTsKKworCWlmICgoY2hhbm5lbC0+ZmxhZ3MgJiBETUFfQ0hBTk5FTF9GTEFHX0lTX0RFRElDQVRFRCkgPT0gMCkgeworCQljaGFubmVsLT5sYXN0RGV2VHlwZSA9IGNoYW5uZWwtPmRldlR5cGU7CisJCWNoYW5uZWwtPmRldlR5cGUgPSBETUFfREVWSUNFX05PTkU7CisJfQorCWNoYW5uZWwtPmZsYWdzICY9IH5ETUFfQ0hBTk5FTF9GTEFHX0lOX1VTRTsKKwlkZXZBdHRyLT5mbGFncyAmPSB+RE1BX0RFVklDRV9GTEFHX0lOX1VTRTsKKworb3V0OgorCXVwKCZnRE1BLmxvY2spOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZnRE1BLmZyZWVDaGFubmVsUSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK0VYUE9SVF9TWU1CT0woZG1hX2ZyZWVfY2hhbm5lbCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIGRldmljZSBoYXMgYmVlbiBjb25maWd1cmVkIGFzIHVzaW5nIGEgc2hhcmVkCisqICAgY2hhbm5lbC4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgICAgIERldmljZSB1c2VzIGEgZGVkaWNhdGVkIGNoYW5uZWwKKyogICAgICAgPiB6ZXJvICAgICAgRGV2aWNlIHVzZXMgYSBzaGFyZWQgY2hhbm5lbAorKiAgICAgICA8IHplcm8gICAgICBFcnJvciBjb2RlCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfZGV2aWNlX2lzX2NoYW5uZWxfc2hhcmVkKERNQV9EZXZpY2VfdCBkZXZpY2UJLyogRGV2aWNlIHRvIGNoZWNrLiAqLworICAgICkgeworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKworCWlmICghSXNEZXZpY2VWYWxpZChkZXZpY2UpKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkZXZBdHRyID0gJkRNQV9nRGV2aWNlQXR0cmlidXRlW2RldmljZV07CisKKwlyZXR1cm4gKChkZXZBdHRyLT5mbGFncyAmIERNQV9ERVZJQ0VfRkxBR19JU19ERURJQ0FURUQpID09IDApOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9kZXZpY2VfaXNfY2hhbm5lbF9zaGFyZWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIEFsbG9jYXRlcyBidWZmZXJzIGZvciB0aGUgZGVzY3JpcHRvcnMuIFRoaXMgaXMgbm9ybWFsbHkgZG9uZSBhdXRvbWF0aWNhbGx5CisqICAgYnV0IG5lZWRzIHRvIGJlIGRvbmUgZXhwbGljaXRseSB3aGVuIGluaXRpYXRpbmcgYSBkbWEgZnJvbSBpbnRlcnJ1cHQKKyogICBjb250ZXh0LgorKgorKiAgIEByZXR1cm4KKyogICAgICAgMCAgICAgICBEZXNjcmlwdG9ycyB3ZXJlIGFsbG9jYXRlZCBzdWNjZXNzZnVsbHkKKyogICAgICAgLUVJTlZBTCBJbnZhbGlkIGRldmljZSB0eXBlIGZvciB0aGlzIGtpbmQgb2YgdHJhbnNmZXIKKyogICAgICAgICAgICAgICAoaS5lLiB0aGUgZGV2aWNlIGlzIF9NRU1fVE9fREVWIGFuZCBub3QgX0RFVl9UT19NRU0pCisqICAgICAgIC1FTk9NRU0gTWVtb3J5IGV4aGF1c3RlZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2FsbG9jX2Rlc2NyaXB0b3JzKERNQV9IYW5kbGVfdCBoYW5kbGUsCS8qIERNQSBIYW5kbGUgKi8KKwkJCSAgZG1hY0h3X1RSQU5TRkVSX1RZUEVfZSB0cmFuc2ZlclR5cGUsCS8qIFR5cGUgb2YgdHJhbnNmZXIgYmVpbmcgcGVyZm9ybWVkICovCisJCQkgIGRtYV9hZGRyX3Qgc3JjRGF0YSwJLyogUGxhY2UgdG8gZ2V0IGRhdGEgdG8gd3JpdGUgdG8gZGV2aWNlICovCisJCQkgIGRtYV9hZGRyX3QgZHN0RGF0YSwJLyogUG9pbnRlciB0byBkZXZpY2UgZGF0YSBhZGRyZXNzICovCisJCQkgIHNpemVfdCBudW1CeXRlcwkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgdG8gdGhlIGRldmljZSAqLworICAgICkgeworCURNQV9DaGFubmVsX3QgKmNoYW5uZWw7CisJRE1BX0RldmljZUF0dHJpYnV0ZV90ICpkZXZBdHRyOworCWludCBudW1EZXNjcmlwdG9yczsKKwlzaXplX3QgcmluZ0J5dGVzUmVxdWlyZWQ7CisJaW50IHJjID0gMDsKKworCWNoYW5uZWwgPSBIYW5kbGVUb0NoYW5uZWwoaGFuZGxlKTsKKwlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldkF0dHIgPSAmRE1BX2dEZXZpY2VBdHRyaWJ1dGVbY2hhbm5lbC0+ZGV2VHlwZV07CisKKwlpZiAoZGV2QXR0ci0+Y29uZmlnLnRyYW5zZmVyVHlwZSAhPSB0cmFuc2ZlclR5cGUpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRmlndXJlIG91dCBob3cgbWFueSBkZXNjcmlwdG9ycyB3ZSBuZWVkLiAqLworCisJLyogcHJpbnRrKCJzcmNEYXRhOiAweCUwOHggZHN0RGF0YTogMHglMDh4LCBudW1CeXRlczogJWRcbiIsICovCisJLyogICAgICAgIHNyY0RhdGEsIGRzdERhdGEsIG51bUJ5dGVzKTsgKi8KKworCW51bURlc2NyaXB0b3JzID0gZG1hY0h3X2NhbGN1bGF0ZURlc2NyaXB0b3JDb3VudCgmZGV2QXR0ci0+Y29uZmlnLAorCQkJCQkJCSAgICAgICh2b2lkICopc3JjRGF0YSwKKwkJCQkJCQkgICAgICAodm9pZCAqKWRzdERhdGEsCisJCQkJCQkJICAgICAgbnVtQnl0ZXMpOworCWlmIChudW1EZXNjcmlwdG9ycyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZG1hY0h3X2NhbGN1bGF0ZURlc2NyaXB0b3JDb3VudCBmYWlsZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIGRlc2NyaXB0b3IgcmluZywgb3IgaWYgd2UgbmVlZCB0byBhbGxvY2F0ZSAqLworCS8qIGEgbmV3IG9uZS4gKi8KKworCXJpbmdCeXRlc1JlcXVpcmVkID0gZG1hY0h3X2Rlc2NyaXB0b3JMZW4obnVtRGVzY3JpcHRvcnMpOworCisJLyogcHJpbnRrKCJyaW5nQnl0ZXNSZXF1aXJlZDogJWRcbiIsIHJpbmdCeXRlc1JlcXVpcmVkKTsgKi8KKworCWlmIChyaW5nQnl0ZXNSZXF1aXJlZCA+IGRldkF0dHItPnJpbmcuYnl0ZXNBbGxvY2F0ZWQpIHsKKwkJLyogTWFrZSBzdXJlIHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgbmV2ZXIgdGFrZW4gZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gKi8KKwkJLyogSXQncyBPSyBmb3IgYW4gaW50ZXJydXB0IHRvIGluaXRpYXRlIGEgRE1BIHRyYW5zZmVyLCBidXQgdGhlIGRlc2NyaXB0b3IgKi8KKwkJLyogYWxsb2NhdGlvbiBuZWVkcyB0byBoYXZlIGFscmVhZHkgYmVlbiBkb25lLiAqLworCisJCW1pZ2h0X3NsZWVwKCk7CisKKwkJLyogRnJlZSB0aGUgb2xkIGRlc2NyaXB0b3IgcmluZyBhbmQgYWxsb2NhdGUgYSBuZXcgb25lLiAqLworCisJCWRtYV9mcmVlX2Rlc2NyaXB0b3JfcmluZygmZGV2QXR0ci0+cmluZyk7CisKKwkJLyogQW5kIGFsbG9jYXRlIGEgbmV3IG9uZS4gKi8KKworCQlyYyA9CisJCSAgICAgZG1hX2FsbG9jX2Rlc2NyaXB0b3JfcmluZygmZGV2QXR0ci0+cmluZywKKwkJCQkJICAgICAgIG51bURlc2NyaXB0b3JzKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBkbWFfYWxsb2NfZGVzY3JpcHRvcl9yaW5nKCVkKSBmYWlsZWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG51bURlc2NyaXB0b3JzKTsKKwkJCXJldHVybiByYzsKKwkJfQorCQkvKiBTZXR1cCB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyB0cmFuc2ZlciAqLworCisJCWlmIChkbWFjSHdfaW5pdERlc2NyaXB0b3IoZGV2QXR0ci0+cmluZy52aXJ0QWRkciwKKwkJCQkJICBkZXZBdHRyLT5yaW5nLnBoeXNBZGRyLAorCQkJCQkgIGRldkF0dHItPnJpbmcuYnl0ZXNBbGxvY2F0ZWQsCisJCQkJCSAgbnVtRGVzY3JpcHRvcnMpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZG1hY0h3X2luaXREZXNjcmlwdG9yIGZhaWxlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFdlJ3ZlIGFscmVhZHkgZ290IGVub3VnaCByaW5nIGJ1ZmZlciBhbGxvY2F0ZWQuIEFsbCB3ZSBuZWVkIHRvIGRvIGlzIHJlc2V0ICovCisJCS8qIGFueSBjb250cm9sIGluZm9ybWF0aW9uLCBqdXN0IGluIGNhc2UgdGhlIHByZXZpb3VzIERNQSB3YXMgc3RvcHBlZC4gKi8KKworCQlkbWFjSHdfcmVzZXREZXNjcmlwdG9yQ29udHJvbChkZXZBdHRyLT5yaW5nLnZpcnRBZGRyKTsKKwl9CisKKwkvKiBkbWFfYWxsb2MvZnJlZSBib3RoIHNldCB0aGUgcHJldlNyYy9Ec3REYXRhIHRvIDAuIElmIHRoZXkgaGFwcGVuIHRvIGJlIHRoZSBzYW1lICovCisJLyogYXMgbGFzdCB0aW1lLCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2FsbCBzZXREYXRhRGVzY3JpcHRvciBhZ2Fpbi4gKi8KKworCWlmIChkbWFjSHdfc2V0RGF0YURlc2NyaXB0b3IoJmRldkF0dHItPmNvbmZpZywKKwkJCQkgICAgIGRldkF0dHItPnJpbmcudmlydEFkZHIsCisJCQkJICAgICAodm9pZCAqKXNyY0RhdGEsCisJCQkJICAgICAodm9pZCAqKWRzdERhdGEsIG51bUJ5dGVzKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZG1hY0h3X3NldERhdGFEZXNjcmlwdG9yIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmVtZW1iZXIgdGhlIGNyaXRpY2FsIGluZm9ybWF0aW9uIGZvciB0aGlzIHRyYW5zZmVyIHNvIHRoYXQgd2UgY2FuIGVsaW1pbmF0ZSAqLworCS8qIGFub3RoZXIgY2FsbCB0byBkbWFfYWxsb2NfZGVzY3JpcHRvcnMgaWYgdGhlIGNhbGxlciByZXVzZXMgdGhlIHNhbWUgYnVmZmVycyAqLworCisJZGV2QXR0ci0+cHJldlNyY0RhdGEgPSBzcmNEYXRhOworCWRldkF0dHItPnByZXZEc3REYXRhID0gZHN0RGF0YTsKKwlkZXZBdHRyLT5wcmV2TnVtQnl0ZXMgPSBudW1CeXRlczsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9hbGxvY19kZXNjcmlwdG9ycyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgQWxsb2NhdGVzIGFuZCBzZXRzIHVwIGRlc2NyaXB0b3JzIGZvciBhIGRvdWJsZSBidWZmZXJlZCBjaXJjdWxhciBidWZmZXIuCisqCisqICAgVGhpcyBpcyBwcmltYXJpbHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgdGhpbmdzIGxpa2UgdGhlIGluZ3Jlc3Mgc2FtcGxlcworKiAgIGZyb20gYSBtaWNyb3Bob25lLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgPiAwICAgICBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgYWN0dWFsbHkgYWxsb2NhdGVkLgorKiAgICAgICAtRUlOVkFMIEludmFsaWQgZGV2aWNlIHR5cGUgZm9yIHRoaXMga2luZCBvZiB0cmFuc2ZlcgorKiAgICAgICAgICAgICAgIChpLmUuIHRoZSBkZXZpY2UgaXMgX01FTV9UT19ERVYgYW5kIG5vdCBfREVWX1RPX01FTSkKKyogICAgICAgLUVOT01FTSBNZW1vcnkgZXhoYXVzdGVkCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfYWxsb2NfZG91YmxlX2RzdF9kZXNjcmlwdG9ycyhETUFfSGFuZGxlX3QgaGFuZGxlLAkvKiBETUEgSGFuZGxlICovCisJCQkJICAgICBkbWFfYWRkcl90IHNyY0RhdGEsCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2Ygc291cmNlIGRhdGEgKi8KKwkJCQkgICAgIGRtYV9hZGRyX3QgZHN0RGF0YTEsCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgZmlyc3QgZGVzdGluYXRpb24gYnVmZmVyICovCisJCQkJICAgICBkbWFfYWRkcl90IGRzdERhdGEyLAkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHNlY29uZCBkZXN0aW5hdGlvbiBidWZmZXIgKi8KKwkJCQkgICAgIHNpemVfdCBudW1CeXRlcwkvKiBOdW1iZXIgb2YgYnl0ZXMgaW4gZWFjaCBkZXN0aW5hdGlvbiBidWZmZXIgKi8KKyAgICApIHsKKwlETUFfQ2hhbm5lbF90ICpjaGFubmVsOworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKwlpbnQgbnVtRHN0MURlc2NyaXB0b3JzOworCWludCBudW1Ec3QyRGVzY3JpcHRvcnM7CisJaW50IG51bURlc2NyaXB0b3JzOworCXNpemVfdCByaW5nQnl0ZXNSZXF1aXJlZDsKKwlpbnQgcmMgPSAwOworCisJY2hhbm5lbCA9IEhhbmRsZVRvQ2hhbm5lbChoYW5kbGUpOworCWlmIChjaGFubmVsID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtjaGFubmVsLT5kZXZUeXBlXTsKKworCS8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgZGVzY3JpcHRvcnMgd2UgbmVlZC4gKi8KKworCS8qIHByaW50aygic3JjRGF0YTogMHglMDh4IGRzdERhdGE6IDB4JTA4eCwgbnVtQnl0ZXM6ICVkXG4iLCAqLworCS8qICAgICAgICBzcmNEYXRhLCBkc3REYXRhLCBudW1CeXRlcyk7ICovCisKKwludW1Ec3QxRGVzY3JpcHRvcnMgPQorCSAgICAgZG1hY0h3X2NhbGN1bGF0ZURlc2NyaXB0b3JDb3VudCgmZGV2QXR0ci0+Y29uZmlnLCAodm9pZCAqKXNyY0RhdGEsCisJCQkJCSAgICAgKHZvaWQgKilkc3REYXRhMSwgbnVtQnl0ZXMpOworCWlmIChudW1Ec3QxRGVzY3JpcHRvcnMgPCAwKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwludW1Ec3QyRGVzY3JpcHRvcnMgPQorCSAgICAgZG1hY0h3X2NhbGN1bGF0ZURlc2NyaXB0b3JDb3VudCgmZGV2QXR0ci0+Y29uZmlnLCAodm9pZCAqKXNyY0RhdGEsCisJCQkJCSAgICAgKHZvaWQgKilkc3REYXRhMiwgbnVtQnl0ZXMpOworCWlmIChudW1Ec3QyRGVzY3JpcHRvcnMgPCAwKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwludW1EZXNjcmlwdG9ycyA9IG51bURzdDFEZXNjcmlwdG9ycyArIG51bURzdDJEZXNjcmlwdG9yczsKKwkvKiBwcmludGsoIm51bURlc2NyaXB0b3JzOiAlZFxuIiwgbnVtRGVzY3JpcHRvcnMpOyAqLworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiByZXVzZSB0aGUgZXhpc3RpbmcgZGVzY3JpcHRvciByaW5nLCBvciBpZiB3ZSBuZWVkIHRvIGFsbG9jYXRlICovCisJLyogYSBuZXcgb25lLiAqLworCisJcmluZ0J5dGVzUmVxdWlyZWQgPSBkbWFjSHdfZGVzY3JpcHRvckxlbihudW1EZXNjcmlwdG9ycyk7CisKKwkvKiBwcmludGsoInJpbmdCeXRlc1JlcXVpcmVkOiAlZFxuIiwgcmluZ0J5dGVzUmVxdWlyZWQpOyAqLworCisJaWYgKHJpbmdCeXRlc1JlcXVpcmVkID4gZGV2QXR0ci0+cmluZy5ieXRlc0FsbG9jYXRlZCkgeworCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIGNvZGUgcGF0aCBpcyBuZXZlciB0YWtlbiBmcm9tIGludGVycnVwdCBjb250ZXh0LiAqLworCQkvKiBJdCdzIE9LIGZvciBhbiBpbnRlcnJ1cHQgdG8gaW5pdGlhdGUgYSBETUEgdHJhbnNmZXIsIGJ1dCB0aGUgZGVzY3JpcHRvciAqLworCQkvKiBhbGxvY2F0aW9uIG5lZWRzIHRvIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuICovCisKKwkJbWlnaHRfc2xlZXAoKTsKKworCQkvKiBGcmVlIHRoZSBvbGQgZGVzY3JpcHRvciByaW5nIGFuZCBhbGxvY2F0ZSBhIG5ldyBvbmUuICovCisKKwkJZG1hX2ZyZWVfZGVzY3JpcHRvcl9yaW5nKCZkZXZBdHRyLT5yaW5nKTsKKworCQkvKiBBbmQgYWxsb2NhdGUgYSBuZXcgb25lLiAqLworCisJCXJjID0KKwkJICAgICBkbWFfYWxsb2NfZGVzY3JpcHRvcl9yaW5nKCZkZXZBdHRyLT5yaW5nLAorCQkJCQkgICAgICAgbnVtRGVzY3JpcHRvcnMpOworCQlpZiAocmMgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IGRtYV9hbGxvY19kZXNjcmlwdG9yX3JpbmcoJWQpIGZhaWxlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgcmluZ0J5dGVzUmVxdWlyZWQpOworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCisJLyogU2V0dXAgdGhlIGRlc2NyaXB0b3IgZm9yIHRoaXMgdHJhbnNmZXIuIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aXRoICovCisJLyogQ09OVElOVU9VUyBETUEgb3BlcmF0aW9ucywgd2UgbmVlZCB0byByZWluaXRpYWxpemUgZXZlcnkgdGltZSwgb3RoZXJ3aXNlICovCisJLyogc2V0RGF0YURlc2NyaXB0b3Igd2lsbCBrZWVwIHRyeWluZyB0byBhcHBlbmQgb250byB0aGUgZW5kLiAqLworCisJaWYgKGRtYWNId19pbml0RGVzY3JpcHRvcihkZXZBdHRyLT5yaW5nLnZpcnRBZGRyLAorCQkJCSAgZGV2QXR0ci0+cmluZy5waHlzQWRkciwKKwkJCQkgIGRldkF0dHItPnJpbmcuYnl0ZXNBbGxvY2F0ZWQsCisJCQkJICBudW1EZXNjcmlwdG9ycykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRtYWNId19pbml0RGVzY3JpcHRvciBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogZG1hX2FsbG9jL2ZyZWUgYm90aCBzZXQgdGhlIHByZXZTcmMvRHN0RGF0YSB0byAwLiBJZiB0aGV5IGhhcHBlbiB0byBiZSB0aGUgc2FtZSAqLworCS8qIGFzIGxhc3QgdGltZSwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNhbGwgc2V0RGF0YURlc2NyaXB0b3IgYWdhaW4uICovCisKKwlpZiAoZG1hY0h3X3NldERhdGFEZXNjcmlwdG9yKCZkZXZBdHRyLT5jb25maWcsCisJCQkJICAgICBkZXZBdHRyLT5yaW5nLnZpcnRBZGRyLAorCQkJCSAgICAgKHZvaWQgKilzcmNEYXRhLAorCQkJCSAgICAgKHZvaWQgKilkc3REYXRhMSwgbnVtQnl0ZXMpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkbWFjSHdfc2V0RGF0YURlc2NyaXB0b3IgMSBmYWlsZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoZG1hY0h3X3NldERhdGFEZXNjcmlwdG9yKCZkZXZBdHRyLT5jb25maWcsCisJCQkJICAgICBkZXZBdHRyLT5yaW5nLnZpcnRBZGRyLAorCQkJCSAgICAgKHZvaWQgKilzcmNEYXRhLAorCQkJCSAgICAgKHZvaWQgKilkc3REYXRhMiwgbnVtQnl0ZXMpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkbWFjSHdfc2V0RGF0YURlc2NyaXB0b3IgMiBmYWlsZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFlvdSBzaG91bGQgdXNlIGRtYV9zdGFydF90cmFuc2ZlciByYXRoZXIgdGhhbiBkbWFfdHJhbnNmZXJfeHh4IHNvIHdlIGRvbid0ICovCisJLyogdHJ5IHRvIG1ha2UgdGhlICdwcmV2JyB2YXJpYWJsZXMgcmlnaHQuICovCisKKwlkZXZBdHRyLT5wcmV2U3JjRGF0YSA9IDA7CisJZGV2QXR0ci0+cHJldkRzdERhdGEgPSAwOworCWRldkF0dHItPnByZXZOdW1CeXRlcyA9IDA7CisKKwlyZXR1cm4gbnVtRGVzY3JpcHRvcnM7Cit9CisKK0VYUE9SVF9TWU1CT0woZG1hX2FsbG9jX2RvdWJsZV9kc3RfZGVzY3JpcHRvcnMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIEluaXRpYXRlcyBhIHRyYW5zZmVyIHdoZW4gdGhlIGRlc2NyaXB0b3JzIGhhdmUgYWxyZWFkeSBiZWVuIHNldHVwLgorKgorKiAgIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UsIGFuZCBub3JtYWxseSwgdGhlIGRtYV90cmFuc2Zlcl94eHggZnVuY3Rpb25zIHNob3VsZAorKiAgIGJlIHVzZWQuCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIFRyYW5zZmVyIHdhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseQorKiAgICAgICAtRU5PREVWIEludmFsaWQgaGFuZGxlCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfc3RhcnRfdHJhbnNmZXIoRE1BX0hhbmRsZV90IGhhbmRsZSkKK3sKKwlETUFfQ2hhbm5lbF90ICpjaGFubmVsOworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKworCWNoYW5uZWwgPSBIYW5kbGVUb0NoYW5uZWwoaGFuZGxlKTsKKwlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkZXZBdHRyID0gJkRNQV9nRGV2aWNlQXR0cmlidXRlW2NoYW5uZWwtPmRldlR5cGVdOworCisJZG1hY0h3X2luaXRpYXRlVHJhbnNmZXIoY2hhbm5lbC0+ZG1hY0h3SGFuZGxlLCAmZGV2QXR0ci0+Y29uZmlnLAorCQkJCWRldkF0dHItPnJpbmcudmlydEFkZHIpOworCisJLyogU2luY2Ugd2UgZ290IHRoaXMgZmFyLCBldmVyeXRoaW5nIHdlbnQgc3VjY2Vzc2Z1bGx5ICovCisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfc3RhcnRfdHJhbnNmZXIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIFN0b3BzIGEgcHJldmlvdXNseSBzdGFydGVkIERNQSB0cmFuc2Zlci4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgVHJhbnNmZXIgd2FzIHN0b3BwZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FTk9ERVYgSW52YWxpZCBoYW5kbGUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9zdG9wX3RyYW5zZmVyKERNQV9IYW5kbGVfdCBoYW5kbGUpCit7CisJRE1BX0NoYW5uZWxfdCAqY2hhbm5lbDsKKworCWNoYW5uZWwgPSBIYW5kbGVUb0NoYW5uZWwoaGFuZGxlKTsKKwlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRtYWNId19zdG9wVHJhbnNmZXIoY2hhbm5lbC0+ZG1hY0h3SGFuZGxlKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9zdG9wX3RyYW5zZmVyKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBXYWl0cyBmb3IgYSBETUEgdG8gY29tcGxldGUgYnkgcG9sbGluZy4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGludGVuZGVkCisqICAgdG8gYmUgdXNlZCBmb3IgdGVzdGluZy4gSW50ZXJydXB0cyBzaG91bGQgYmUgdXNlZCBmb3IgbW9zdCBETUEgb3BlcmF0aW9ucy4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV93YWl0X3RyYW5zZmVyX2RvbmUoRE1BX0hhbmRsZV90IGhhbmRsZSkKK3sKKwlETUFfQ2hhbm5lbF90ICpjaGFubmVsOworCWRtYWNId19UUkFOU0ZFUl9TVEFUVVNfZSBzdGF0dXM7CisKKwljaGFubmVsID0gSGFuZGxlVG9DaGFubmVsKGhhbmRsZSk7CisJaWYgKGNoYW5uZWwgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl3aGlsZSAoKHN0YXR1cyA9CisJCWRtYWNId190cmFuc2ZlckNvbXBsZXRlZChjaGFubmVsLT5kbWFjSHdIYW5kbGUpKSA9PQorCSAgICAgICBkbWFjSHdfVFJBTlNGRVJfU1RBVFVTX0JVU1kpIHsKKwkJOworCX0KKworCWlmIChzdGF0dXMgPT0gZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19FUlJPUikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBETUEgdHJhbnNmZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfd2FpdF90cmFuc2Zlcl9kb25lKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBJbml0aWF0ZXMgYSBETUEsIGFsbG9jYXRpbmcgdGhlIGRlc2NyaXB0b3JzIGFzIHJlcXVpcmVkLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgMCAgICAgICBUcmFuc2ZlciB3YXMgc3RhcnRlZCBzdWNjZXNzZnVsbHkKKyogICAgICAgLUVJTlZBTCBJbnZhbGlkIGRldmljZSB0eXBlIGZvciB0aGlzIGtpbmQgb2YgdHJhbnNmZXIKKyogICAgICAgICAgICAgICAoaS5lLiB0aGUgZGV2aWNlIGlzIF9ERVZfVE9fTUVNIGFuZCBub3QgX01FTV9UT19ERVYpCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfdHJhbnNmZXIoRE1BX0hhbmRsZV90IGhhbmRsZSwJLyogRE1BIEhhbmRsZSAqLworCQkgZG1hY0h3X1RSQU5TRkVSX1RZUEVfZSB0cmFuc2ZlclR5cGUsCS8qIFR5cGUgb2YgdHJhbnNmZXIgYmVpbmcgcGVyZm9ybWVkICovCisJCSBkbWFfYWRkcl90IHNyY0RhdGEsCS8qIFBsYWNlIHRvIGdldCBkYXRhIHRvIHdyaXRlIHRvIGRldmljZSAqLworCQkgZG1hX2FkZHJfdCBkc3REYXRhLAkvKiBQb2ludGVyIHRvIGRldmljZSBkYXRhIGFkZHJlc3MgKi8KKwkJIHNpemVfdCBudW1CeXRlcwkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgdG8gdGhlIGRldmljZSAqLworICAgICkgeworCURNQV9DaGFubmVsX3QgKmNoYW5uZWw7CisJRE1BX0RldmljZUF0dHJpYnV0ZV90ICpkZXZBdHRyOworCWludCByYyA9IDA7CisKKwljaGFubmVsID0gSGFuZGxlVG9DaGFubmVsKGhhbmRsZSk7CisJaWYgKGNoYW5uZWwgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXZBdHRyID0gJkRNQV9nRGV2aWNlQXR0cmlidXRlW2NoYW5uZWwtPmRldlR5cGVdOworCisJaWYgKGRldkF0dHItPmNvbmZpZy50cmFuc2ZlclR5cGUgIT0gdHJhbnNmZXJUeXBlKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFdlIGtlZXAgdHJhY2sgb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmV2aW91cyByZXF1ZXN0IGZvciB0aGlzICovCisJLyogZGV2aWNlLCBhbmQgaWYgdGhlIGF0dHJpYnV0ZXMgbWF0Y2gsIHRoZW4gd2UgY2FuIHVzZSB0aGUgZGVzY3JpcHRvcnMgd2Ugc2V0dXAgKi8KKwkvKiB0aGUgbGFzdCB0aW1lLCBhbmQgbm90IGhhdmUgdG8gcmVpbml0aWFsaXplIGV2ZXJ5dGhpbmcuICovCisKKwl7CisJCXJjID0KKwkJICAgICBkbWFfYWxsb2NfZGVzY3JpcHRvcnMoaGFuZGxlLCB0cmFuc2ZlclR5cGUsIHNyY0RhdGEsCisJCQkJCSAgIGRzdERhdGEsIG51bUJ5dGVzKTsKKwkJaWYgKHJjICE9IDApIHsKKwkJCXJldHVybiByYzsKKwkJfQorCX0KKworCS8qIEFuZCBraWNrIG9mZiB0aGUgdHJhbnNmZXIgKi8KKworCWRldkF0dHItPm51bUJ5dGVzID0gbnVtQnl0ZXM7CisJZGV2QXR0ci0+dHJhbnNmZXJTdGFydFRpbWUgPSB0aW1lcl9nZXRfdGlja19jb3VudCgpOworCisJZG1hY0h3X2luaXRpYXRlVHJhbnNmZXIoY2hhbm5lbC0+ZG1hY0h3SGFuZGxlLCAmZGV2QXR0ci0+Y29uZmlnLAorCQkJCWRldkF0dHItPnJpbmcudmlydEFkZHIpOworCisJLyogU2luY2Ugd2UgZ290IHRoaXMgZmFyLCBldmVyeXRoaW5nIHdlbnQgc3VjY2Vzc2Z1bGx5ICovCisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfdHJhbnNmZXIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIFNldCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbiBhIHRyYW5zZmVyIGNvbXBsZXRlcy4KKyogICBJZiBhIE5VTEwgY2FsbGJhY2sgZnVuY3Rpb24gaXMgc2V0LCB0aGVuIG5vIGNhbGxiYWNrIHdpbGwgb2NjdXIuCisqCisqICAgQG5vdGUgICBAYSBkZXZIYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQuCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIC0gU3VjY2VzcworKiAgICAgICAtRU5PREVWIC0gRGV2aWNlIGhhbmRlZCBpbiBpcyBpbnZhbGlkLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX3NldF9kZXZpY2VfaGFuZGxlcihETUFfRGV2aWNlX3QgZGV2LAkvKiBEZXZpY2UgdG8gc2V0IHRoZSBjYWxsYmFjayBmb3IuICovCisJCQkgICBETUFfRGV2aWNlSGFuZGxlcl90IGRldkhhbmRsZXIsCS8qIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgRE1BIGNvbXBsZXRlcyAqLworCQkJICAgdm9pZCAqdXNlckRhdGEJLyogUG9pbnRlciB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBkZXZIYW5kbGVyLiAqLworICAgICkgeworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFJc0RldmljZVZhbGlkKGRldikpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldkF0dHIgPSAmRE1BX2dEZXZpY2VBdHRyaWJ1dGVbZGV2XTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRldkF0dHItPnVzZXJEYXRhID0gdXNlckRhdGE7CisJZGV2QXR0ci0+ZGV2SGFuZGxlciA9IGRldkhhbmRsZXI7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfc2V0X2RldmljZV9oYW5kbGVyKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBJbml0aWFsaXplcyBhIG1lbW9yeSBtYXBwaW5nIHN0cnVjdHVyZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2luaXRfbWVtX21hcChETUFfTWVtTWFwX3QgKm1lbU1hcCkKK3sKKwltZW1zZXQobWVtTWFwLCAwLCBzaXplb2YoKm1lbU1hcCkpOworCisJaW5pdF9NVVRFWCgmbWVtTWFwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9pbml0X21lbV9tYXApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIFJlbGVhc2VzIGFueSBtZW1vcnkgY3VycmVudGx5IGJlaW5nIGhlbGQgYnkgYSBtZW1vcnkgbWFwcGluZyBzdHJ1Y3R1cmUuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfdGVybV9tZW1fbWFwKERNQV9NZW1NYXBfdCAqbWVtTWFwKQoreworCWRvd24oJm1lbU1hcC0+bG9jayk7CS8qIEp1c3QgYmVpbmcgcGFyYW5vaWQgKi8KKworCS8qIEZyZWUgdXAgYW55IGFsbG9jYXRlZCBtZW1vcnkgKi8KKworCXVwKCZtZW1NYXAtPmxvY2spOworCW1lbXNldChtZW1NYXAsIDAsIHNpemVvZigqbWVtTWFwKSk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfdGVybV9tZW1fbWFwKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBMb29rcyBhdCBhIG1lbW9yeSBhZGRyZXNzIGFuZCBjYXRlZ29yaXplcyBpdC4KKyoKKyogICBAcmV0dXJuIE9uZSBvZiB0aGUgdmFsdWVzIGZyb20gdGhlIERNQV9NZW1UeXBlX3QgZW51bWVyYXRpb24uCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0RNQV9NZW1UeXBlX3QgZG1hX21lbV90eXBlKHZvaWQgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyVmFsID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKKworCWlmIChhZGRyVmFsID49IFZNQUxMT0NfRU5EKSB7CisJCS8qIE5PVEU6IERNQSB2aXJ0dWFsIG1lbW9yeSBzcGFjZSBzdGFydHMgYXQgMHhGRnh4eHh4eCAqLworCisJCS8qIGRtYV9hbGxvY194eHggcGFnZXMgYXJlIHBoeXNpY2FsbHkgYW5kIHZpcnR1YWxseSBjb250aWd1b3VzICovCisKKwkJcmV0dXJuIERNQV9NRU1fVFlQRV9ETUE7CisJfQorCisJLyogVGVjaG5pY2FsbHksIHdlIGNvdWxkIGFkZCBvbmUgbW9yZSBjbGFzc2lmaWNhdGlvbi4gQWRkcmVzc2VzIGJldHdlZW4gVk1BTExPQ19FTkQgKi8KKwkvKiBhbmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgRE1BIHZpcnR1YWwgYWRkcmVzcyBjb3VsZCBiZSBjb25zaWRlcmVkIHRvIGJlIEkvTyBzcGFjZS4gKi8KKwkvKiBSaWdodCBub3csIG5vYm9keSBjYXJlcyBhYm91dCB0aGlzIHBhcnRpY3VsYXIgY2xhc3NpZmljYXRpb24sIHNvIHdlIGlnbm9yZSBpdC4gKi8KKworCWlmIChpc192bWFsbG9jX2FkZHIoYWRkcikpIHsKKwkJLyogQWRkcmVzcyBjb21lcyBmcm9tIHRoZSB2bWFsbG9jJ2QgcmVnaW9uLiBQYWdlcyBhcmUgdmlydHVhbGx5ICovCisJCS8qIGNvbnRpZ3VvdXMgYnV0IE5PVCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgKi8KKworCQlyZXR1cm4gRE1BX01FTV9UWVBFX1ZNQUxMT0M7CisJfQorCisJaWYgKGFkZHJWYWwgPj0gUEFHRV9PRkZTRVQpIHsKKwkJLyogUEFHRV9PRkZTRVQgaXMgdHlwaWNhbGx5IDB4QzAwMDAwMDAgKi8KKworCQkvKiBrbWFsbG9jJ2QgcGFnZXMgYXJlIHBoeXNpY2FsbHkgY29udGlndW91cyAqLworCisJCXJldHVybiBETUFfTUVNX1RZUEVfS01BTExPQzsKKwl9CisKKwlyZXR1cm4gRE1BX01FTV9UWVBFX1VTRVI7Cit9CisKK0VYUE9SVF9TWU1CT0woZG1hX21lbV90eXBlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBMb29rcyBhdCBhIG1lbW9yeSBhZGRyZXNzIGFuZCBkZXRlcm1pbmVzIGlmIHdlIHN1cHBvcnQgRE1BJ2luZyB0by9mcm9tCisqICAgdGhhdCB0eXBlIG9mIG1lbW9yeS4KKyoKKyogICBAcmV0dXJuIGJvb2xlYW4gLQorKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPSAwIG1lYW5zIGRtYSBzdXBwb3J0ZWQKKyogICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gMCBtZWFucyBkbWEgbm90IHN1cHBvcnRlZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21lbV9zdXBwb3J0c19kbWEodm9pZCAqYWRkcikKK3sKKwlETUFfTWVtVHlwZV90IG1lbVR5cGUgPSBkbWFfbWVtX3R5cGUoYWRkcik7CisKKwlyZXR1cm4gKG1lbVR5cGUgPT0gRE1BX01FTV9UWVBFX0RNQSkKKyNpZiBBTExPV19NQVBfT0ZfS01BTExPQ19NRU1PUlkKKwkgICAgfHwgKG1lbVR5cGUgPT0gRE1BX01FTV9UWVBFX0tNQUxMT0MpCisjZW5kaWYKKwkgICAgfHwgKG1lbVR5cGUgPT0gRE1BX01FTV9UWVBFX1VTRVIpOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9tZW1fc3VwcG9ydHNfZG1hKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBNYXBzIGluIGEgbWVtb3J5IHJlZ2lvbiBzdWNoIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgYSBETUEuCisqCisqICAgQHJldHVybgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21hcF9zdGFydChETUFfTWVtTWFwX3QgKm1lbU1hcCwJLyogU3RvcmVzIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXAgKi8KKwkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIJLyogRGlyZWN0aW9uIHRoYXQgdGhlIG1hcHBpbmcgd2lsbCBiZSBnb2luZyAqLworICAgICkgeworCWludCByYzsKKworCWRvd24oJm1lbU1hcC0+bG9jayk7CisKKwlETUFfTUFQX1BSSU5UKCJtZW1NYXA6ICVwXG4iLCBtZW1NYXApOworCisJaWYgKG1lbU1hcC0+aW5Vc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbWVtb3J5IG1hcCAlcCBpcyBhbHJlYWR5IGJlaW5nIHVzZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgbWVtTWFwKTsKKwkJcmMgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCW1lbU1hcC0+aW5Vc2UgPSAxOworCW1lbU1hcC0+ZGlyID0gZGlyOworCW1lbU1hcC0+bnVtUmVnaW9uc1VzZWQgPSAwOworCisJcmMgPSAwOworCitvdXQ6CisKKwlETUFfTUFQX1BSSU5UKCJyZXR1cm5pbmcgJWQiLCByYyk7CisKKwl1cCgmbWVtTWFwLT5sb2NrKTsKKworCXJldHVybiByYzsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfbWFwX3N0YXJ0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBBZGRzIGEgc2VnbWVudCBvZiBtZW1vcnkgdG8gYSBtZW1vcnkgbWFwLiBFYWNoIHNlZ21lbnQgaXMgYm90aAorKiAgIHBoeXNpY2FsbHkgYW5kIHZpcnR1YWxseSBjb250aWd1b3VzLgorKgorKiAgIEByZXR1cm4gICAgIDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZG1hX21hcF9hZGRfc2VnbWVudChETUFfTWVtTWFwX3QgKm1lbU1hcCwJLyogU3RvcmVzIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXAgKi8KKwkJCSAgICAgICBETUFfUmVnaW9uX3QgKnJlZ2lvbiwJLyogUmVnaW9uIHRoYXQgdGhlIHNlZ21lbnQgYmVsb25ncyB0byAqLworCQkJICAgICAgIHZvaWQgKnZpcnRBZGRyLAkvKiBWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHNlZ21lbnQgYmVpbmcgYWRkZWQgKi8KKwkJCSAgICAgICBkbWFfYWRkcl90IHBoeXNBZGRyLAkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBzZWdtZW50IGJlaW5nIGFkZGVkICovCisJCQkgICAgICAgc2l6ZV90IG51bUJ5dGVzCS8qIE51bWJlciBvZiBieXRlcyBvZiB0aGUgc2VnbWVudCBiZWluZyBhZGRlZCAqLworICAgICkgeworCURNQV9TZWdtZW50X3QgKnNlZ21lbnQ7CisKKwlETUFfTUFQX1BSSU5UKCJtZW1NYXA6JXAgdmE6JXAgcGE6MHgleCAjOiVkXG4iLCBtZW1NYXAsIHZpcnRBZGRyLAorCQkgICAgICBwaHlzQWRkciwgbnVtQnl0ZXMpOworCisJLyogU2FuaXR5IGNoZWNrICovCisKKwlpZiAoKCh1bnNpZ25lZCBsb25nKXZpcnRBZGRyIDwgKHVuc2lnbmVkIGxvbmcpcmVnaW9uLT52aXJ0QWRkcikKKwkgICAgfHwgKCgodW5zaWduZWQgbG9uZyl2aXJ0QWRkciArIG51bUJ5dGVzKSkgPgorCSAgICAoKHVuc2lnbmVkIGxvbmcpcmVnaW9uLT52aXJ0QWRkciArIHJlZ2lvbi0+bnVtQnl0ZXMpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiB2aXJ0QWRkciAlcCBpcyBvdXRzaWRlIHJlZ2lvbiBAICVwIGxlbjogJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdmlydEFkZHIsIHJlZ2lvbi0+dmlydEFkZHIsIHJlZ2lvbi0+bnVtQnl0ZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocmVnaW9uLT5udW1TZWdtZW50c1VzZWQgPiAwKSB7CisJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGlzIHNlZ21lbnQgaXMgcGh5c2ljYWxseSBjb250aWd1b3VzIHdpdGggdGhlIHByZXZpb3VzIG9uZSAqLworCisJCXNlZ21lbnQgPSAmcmVnaW9uLT5zZWdtZW50W3JlZ2lvbi0+bnVtU2VnbWVudHNVc2VkIC0gMV07CisKKwkJaWYgKChzZWdtZW50LT5waHlzQWRkciArIHNlZ21lbnQtPm51bUJ5dGVzKSA9PSBwaHlzQWRkcikgeworCQkJLyogSXQgaXMgLSBqdXN0IGFkZCBvbiB0byB0aGUgZW5kICovCisKKwkJCURNQV9NQVBfUFJJTlQoImFwcGVuZGluZyAlZCBieXRlcyB0byBsYXN0IHNlZ21lbnRcbiIsCisJCQkJICAgICAgbnVtQnl0ZXMpOworCisJCQlzZWdtZW50LT5udW1CeXRlcyArPSBudW1CeXRlczsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBSZWFsbG9jYXRlIHRvIGhvbGQgbW9yZSBzZWdtZW50cywgaWYgcmVxdWlyZWQuICovCisKKwlpZiAocmVnaW9uLT5udW1TZWdtZW50c1VzZWQgPj0gcmVnaW9uLT5udW1TZWdtZW50c0FsbG9jYXRlZCkgeworCQlETUFfU2VnbWVudF90ICpuZXdTZWdtZW50OworCQlzaXplX3Qgb2xkU2l6ZSA9CisJCSAgICByZWdpb24tPm51bVNlZ21lbnRzQWxsb2NhdGVkICogc2l6ZW9mKCpuZXdTZWdtZW50KTsKKwkJaW50IG5ld0FsbG9jID0gcmVnaW9uLT5udW1TZWdtZW50c0FsbG9jYXRlZCArIDQ7CisJCXNpemVfdCBuZXdTaXplID0gbmV3QWxsb2MgKiBzaXplb2YoKm5ld1NlZ21lbnQpOworCisJCW5ld1NlZ21lbnQgPSBrbWFsbG9jKG5ld1NpemUsIEdGUF9LRVJORUwpOworCQlpZiAobmV3U2VnbWVudCA9PSBOVUxMKSB7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1jcHkobmV3U2VnbWVudCwgcmVnaW9uLT5zZWdtZW50LCBvbGRTaXplKTsKKwkJbWVtc2V0KCYoKHVpbnQ4X3QgKikgbmV3U2VnbWVudClbb2xkU2l6ZV0sIDAsCisJCSAgICAgICBuZXdTaXplIC0gb2xkU2l6ZSk7CisJCWtmcmVlKHJlZ2lvbi0+c2VnbWVudCk7CisKKwkJcmVnaW9uLT5udW1TZWdtZW50c0FsbG9jYXRlZCA9IG5ld0FsbG9jOworCQlyZWdpb24tPnNlZ21lbnQgPSBuZXdTZWdtZW50OworCX0KKworCXNlZ21lbnQgPSAmcmVnaW9uLT5zZWdtZW50W3JlZ2lvbi0+bnVtU2VnbWVudHNVc2VkXTsKKwlyZWdpb24tPm51bVNlZ21lbnRzVXNlZCsrOworCisJc2VnbWVudC0+dmlydEFkZHIgPSB2aXJ0QWRkcjsKKwlzZWdtZW50LT5waHlzQWRkciA9IHBoeXNBZGRyOworCXNlZ21lbnQtPm51bUJ5dGVzID0gbnVtQnl0ZXM7CisKKwlETUFfTUFQX1BSSU5UKCJyZXR1cm5pbmcgc3VjY2Vzc1xuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBBZGRzIGEgcmVnaW9uIG9mIG1lbW9yeSB0byBhIG1lbW9yeSBtYXAuIEVhY2ggcmVnaW9uIGlzIHZpcnR1YWxseQorKiAgIGNvbnRpZ3VvdXMsIGJ1dCBub3QgbmVjZXNzYXJpbHkgcGh5c2ljYWxseSBjb250aWd1b3VzLgorKgorKiAgIEByZXR1cm4gICAgIDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfbWFwX2FkZF9yZWdpb24oRE1BX01lbU1hcF90ICptZW1NYXAsCS8qIFN0b3JlcyBzdGF0ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWFwICovCisJCSAgICAgICB2b2lkICptZW0sCS8qIFZpcnR1YWwgYWRkcmVzcyB0aGF0IHdlIHdhbnQgdG8gZ2V0IGEgbWFwIG9mICovCisJCSAgICAgICBzaXplX3QgbnVtQnl0ZXMJLyogTnVtYmVyIG9mIGJ5dGVzIGJlaW5nIG1hcHBlZCAqLworICAgICkgeworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKW1lbTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCWludCByYyA9IDA7CisJRE1BX1JlZ2lvbl90ICpyZWdpb247CisJZG1hX2FkZHJfdCBwaHlzQWRkcjsKKworCWRvd24oJm1lbU1hcC0+bG9jayk7CisKKwlETUFfTUFQX1BSSU5UKCJtZW1NYXA6JXAgdmE6JXAgIzolZFxuIiwgbWVtTWFwLCBtZW0sIG51bUJ5dGVzKTsKKworCWlmICghbWVtTWFwLT5pblVzZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBNYWtlIHN1cmUgeW91IGNhbGwgZG1hX21hcF9zdGFydCBmaXJzdFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBSZWFsbG9jYXRlIHRvIGhvbGQgbW9yZSByZWdpb25zLiAqLworCisJaWYgKG1lbU1hcC0+bnVtUmVnaW9uc1VzZWQgPj0gbWVtTWFwLT5udW1SZWdpb25zQWxsb2NhdGVkKSB7CisJCURNQV9SZWdpb25fdCAqbmV3UmVnaW9uOworCQlzaXplX3Qgb2xkU2l6ZSA9CisJCSAgICBtZW1NYXAtPm51bVJlZ2lvbnNBbGxvY2F0ZWQgKiBzaXplb2YoKm5ld1JlZ2lvbik7CisJCWludCBuZXdBbGxvYyA9IG1lbU1hcC0+bnVtUmVnaW9uc0FsbG9jYXRlZCArIDQ7CisJCXNpemVfdCBuZXdTaXplID0gbmV3QWxsb2MgKiBzaXplb2YoKm5ld1JlZ2lvbik7CisKKwkJbmV3UmVnaW9uID0ga21hbGxvYyhuZXdTaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG5ld1JlZ2lvbiA9PSBOVUxMKSB7CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQltZW1jcHkobmV3UmVnaW9uLCBtZW1NYXAtPnJlZ2lvbiwgb2xkU2l6ZSk7CisJCW1lbXNldCgmKCh1aW50OF90ICopIG5ld1JlZ2lvbilbb2xkU2l6ZV0sIDAsIG5ld1NpemUgLSBvbGRTaXplKTsKKworCQlrZnJlZShtZW1NYXAtPnJlZ2lvbik7CisKKwkJbWVtTWFwLT5udW1SZWdpb25zQWxsb2NhdGVkID0gbmV3QWxsb2M7CisJCW1lbU1hcC0+cmVnaW9uID0gbmV3UmVnaW9uOworCX0KKworCXJlZ2lvbiA9ICZtZW1NYXAtPnJlZ2lvblttZW1NYXAtPm51bVJlZ2lvbnNVc2VkXTsKKwltZW1NYXAtPm51bVJlZ2lvbnNVc2VkKys7CisKKwlvZmZzZXQgPSBhZGRyICYgflBBR0VfTUFTSzsKKworCXJlZ2lvbi0+bWVtVHlwZSA9IGRtYV9tZW1fdHlwZShtZW0pOworCXJlZ2lvbi0+dmlydEFkZHIgPSBtZW07CisJcmVnaW9uLT5udW1CeXRlcyA9IG51bUJ5dGVzOworCXJlZ2lvbi0+bnVtU2VnbWVudHNVc2VkID0gMDsKKwlyZWdpb24tPm51bUxvY2tlZFBhZ2VzID0gMDsKKwlyZWdpb24tPmxvY2tlZFBhZ2VzID0gTlVMTDsKKworCXN3aXRjaCAocmVnaW9uLT5tZW1UeXBlKSB7CisJY2FzZSBETUFfTUVNX1RZUEVfVk1BTExPQzoKKwkJeworCQkJYXRvbWljX2luYygmZ0RtYVN0YXRNZW1UeXBlVm1hbGxvYyk7CisKKwkJCS8qIHByaW50ayhLRVJOX0VSUiAiJXM6IHZtYWxsb2MnZCBwYWdlcyBhcmUgbm90IHN1cHBvcnRlZFxuIiwgX19mdW5jX18pOyAqLworCisJCQkvKiB2bWFsbG9jJ2QgcGFnZXMgYXJlIG5vdCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgKi8KKworCQkJcmMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgRE1BX01FTV9UWVBFX0tNQUxMT0M6CisJCXsKKwkJCWF0b21pY19pbmMoJmdEbWFTdGF0TWVtVHlwZUttYWxsb2MpOworCisJCQkvKiBrbWFsbG9jJ2QgcGFnZXMgYXJlIHBoeXNpY2FsbHkgY29udGlndW91cywgc28gdGhleSdsbCBoYXZlIGV4YWN0bHkgKi8KKwkJCS8qIG9uZSBzZWdtZW50ICovCisKKyNpZiBBTExPV19NQVBfT0ZfS01BTExPQ19NRU1PUlkKKwkJCXBoeXNBZGRyID0KKwkJCSAgICBkbWFfbWFwX3NpbmdsZShOVUxMLCBtZW0sIG51bUJ5dGVzLCBtZW1NYXAtPmRpcik7CisJCQlyYyA9IGRtYV9tYXBfYWRkX3NlZ21lbnQobWVtTWFwLCByZWdpb24sIG1lbSwgcGh5c0FkZHIsCisJCQkJCQkgbnVtQnl0ZXMpOworI2Vsc2UKKwkJCXJjID0gLUVJTlZBTDsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKworCWNhc2UgRE1BX01FTV9UWVBFX0RNQToKKwkJeworCQkJLyogZG1hX2FsbG9jX3h4eCBwYWdlcyBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzICovCisKKwkJCWF0b21pY19pbmMoJmdEbWFTdGF0TWVtVHlwZUNvaGVyZW50KTsKKworCQkJcGh5c0FkZHIgPSAodm1hbGxvY190b19wZm4obWVtKSA8PCBQQUdFX1NISUZUKSArIG9mZnNldDsKKworCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoTlVMTCwgcGh5c0FkZHIsIG51bUJ5dGVzLAorCQkJCQkJbWVtTWFwLT5kaXIpOworCQkJcmMgPSBkbWFfbWFwX2FkZF9zZWdtZW50KG1lbU1hcCwgcmVnaW9uLCBtZW0sIHBoeXNBZGRyLAorCQkJCQkJIG51bUJ5dGVzKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIERNQV9NRU1fVFlQRV9VU0VSOgorCQl7CisJCQlzaXplX3QgZmlyc3RQYWdlT2Zmc2V0OworCQkJc2l6ZV90IGZpcnN0UGFnZVNpemU7CisJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCQkJc3RydWN0IHRhc2tfc3RydWN0ICp1c2VyVGFzazsKKworCQkJYXRvbWljX2luYygmZ0RtYVN0YXRNZW1UeXBlVXNlcik7CisKKyNpZiAxCisJCQkvKiBJZiB0aGUgcGFnZXMgYXJlIHVzZXIgcGFnZXMsIHRoZW4gdGhlIGRtYV9tZW1fbWFwX3NldF91c2VyX3Rhc2sgZnVuY3Rpb24gKi8KKwkJCS8qIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY2FsbGVkLiAqLworCisJCQlpZiAobWVtTWFwLT51c2VyVGFzayA9PSBOVUxMKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczogbXVzdCBjYWxsIGRtYV9tZW1fbWFwX3NldF91c2VyX3Rhc2sgd2hlbiB1c2luZyB1c2VyLW1vZGUgbWVtb3J5XG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCS8qIFVzZXIgcGFnZXMgbmVlZCB0byBiZSBsb2NrZWQuICovCisKKwkJCWZpcnN0UGFnZU9mZnNldCA9CisJCQkgICAgKHVuc2lnbmVkIGxvbmcpcmVnaW9uLT52aXJ0QWRkciAmIChQQUdFX1NJWkUgLSAxKTsKKwkJCWZpcnN0UGFnZVNpemUgPSBQQUdFX1NJWkUgLSBmaXJzdFBhZ2VPZmZzZXQ7CisKKwkJCXJlZ2lvbi0+bnVtTG9ja2VkUGFnZXMgPSAoZmlyc3RQYWdlT2Zmc2V0CisJCQkJCQkgICsgcmVnaW9uLT5udW1CeXRlcyArCisJCQkJCQkgIFBBR0VfU0laRSAtIDEpIC8gUEFHRV9TSVpFOworCQkJcGFnZXMgPQorCQkJICAgIGttYWxsb2MocmVnaW9uLT5udW1Mb2NrZWRQYWdlcyAqCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisKKwkJCWlmIChwYWdlcyA9PSBOVUxMKSB7CisJCQkJcmVnaW9uLT5udW1Mb2NrZWRQYWdlcyA9IDA7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisKKwkJCXVzZXJUYXNrID0gbWVtTWFwLT51c2VyVGFzazsKKworCQkJZG93bl9yZWFkKCZ1c2VyVGFzay0+bW0tPm1tYXBfc2VtKTsKKwkJCXJjID0gZ2V0X3VzZXJfcGFnZXModXNlclRhc2ssCS8qIHRhc2sgKi8KKwkJCQkJICAgIHVzZXJUYXNrLT5tbSwJLyogbW0gKi8KKwkJCQkJICAgICh1bnNpZ25lZCBsb25nKXJlZ2lvbi0+dmlydEFkZHIsCS8qIHN0YXJ0ICovCisJCQkJCSAgICByZWdpb24tPm51bUxvY2tlZFBhZ2VzLAkvKiBsZW4gKi8KKwkJCQkJICAgIG1lbU1hcC0+ZGlyID09IERNQV9GUk9NX0RFVklDRSwJLyogd3JpdGUgKi8KKwkJCQkJICAgIDAsCS8qIGZvcmNlICovCisJCQkJCSAgICBwYWdlcywJLyogcGFnZXMgKGFycmF5IG9mIHBvaW50ZXJzIHRvIHBhZ2UpICovCisJCQkJCSAgICBOVUxMKTsJLyogdm1hcyAqLworCQkJdXBfcmVhZCgmdXNlclRhc2stPm1tLT5tbWFwX3NlbSk7CisKKwkJCWlmIChyYyAhPSByZWdpb24tPm51bUxvY2tlZFBhZ2VzKSB7CisJCQkJa2ZyZWUocGFnZXMpOworCQkJCXJlZ2lvbi0+bnVtTG9ja2VkUGFnZXMgPSAwOworCisJCQkJaWYgKHJjID49IDApIHsKKwkJCQkJcmMgPSAtRUlOVkFMOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJdWludDhfdCAqdmlydEFkZHIgPSByZWdpb24tPnZpcnRBZGRyOworCQkJCXNpemVfdCBieXRlc1JlbWFpbmluZzsKKwkJCQlpbnQgcGFnZUlkeDsKKworCQkJCXJjID0gMDsJLyogU2luY2UgZ2V0X3VzZXJfcGFnZXMgcmV0dXJucyArdmUgbnVtYmVyICovCisKKwkJCQlyZWdpb24tPmxvY2tlZFBhZ2VzID0gcGFnZXM7CisKKwkJCQkvKiBXZSd2ZSBsb2NrZWQgdGhlIHVzZXIgcGFnZXMuIE5vdyB3ZSBuZWVkIHRvIHdhbGsgdGhlbSBhbmQgZmlndXJlICovCisJCQkJLyogb3V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzZXMuICovCisKKwkJCQkvKiBUaGUgZmlyc3QgcGFnZSBtYXkgYmUgcGFydGlhbCAqLworCisJCQkJZG1hX21hcF9hZGRfc2VnbWVudChtZW1NYXAsCisJCQkJCQkgICAgcmVnaW9uLAorCQkJCQkJICAgIHZpcnRBZGRyLAorCQkJCQkJICAgIFBGTl9QSFlTKHBhZ2VfdG9fcGZuCisJCQkJCQkJICAgICAocGFnZXNbMF0pKSArCisJCQkJCQkgICAgZmlyc3RQYWdlT2Zmc2V0LAorCQkJCQkJICAgIGZpcnN0UGFnZVNpemUpOworCisJCQkJdmlydEFkZHIgKz0gZmlyc3RQYWdlU2l6ZTsKKwkJCQlieXRlc1JlbWFpbmluZyA9CisJCQkJICAgIHJlZ2lvbi0+bnVtQnl0ZXMgLSBmaXJzdFBhZ2VTaXplOworCisJCQkJZm9yIChwYWdlSWR4ID0gMTsKKwkJCQkgICAgIHBhZ2VJZHggPCByZWdpb24tPm51bUxvY2tlZFBhZ2VzOworCQkJCSAgICAgcGFnZUlkeCsrKSB7CisJCQkJCXNpemVfdCBieXRlc1RoaXNQYWdlID0KKwkJCQkJICAgIChieXRlc1JlbWFpbmluZyA+CisJCQkJCSAgICAgUEFHRV9TSVpFID8gUEFHRV9TSVpFIDoKKwkJCQkJICAgICBieXRlc1JlbWFpbmluZyk7CisKKwkJCQkJRE1BX01BUF9QUklOVAorCQkJCQkgICAgKCJwYWdlSWR4OiVkIHBhZ2VzW3BhZ2VJZHhdPSVwIHBmbj0ldSBwaHlzPSV1XG4iLAorCQkJCQkgICAgIHBhZ2VJZHgsIHBhZ2VzW3BhZ2VJZHhdLAorCQkJCQkgICAgIHBhZ2VfdG9fcGZuKHBhZ2VzW3BhZ2VJZHhdKSwKKwkJCQkJICAgICBQRk5fUEhZUyhwYWdlX3RvX3BmbgorCQkJCQkJICAgICAgKHBhZ2VzW3BhZ2VJZHhdKSkpOworCisJCQkJCWRtYV9tYXBfYWRkX3NlZ21lbnQobWVtTWFwLAorCQkJCQkJCSAgICByZWdpb24sCisJCQkJCQkJICAgIHZpcnRBZGRyLAorCQkJCQkJCSAgICBQRk5fUEhZUyhwYWdlX3RvX3BmbgorCQkJCQkJCQkgICAgIChwYWdlcworCQkJCQkJCQkgICAgICBbcGFnZUlkeF0pKSwKKwkJCQkJCQkgICAgYnl0ZXNUaGlzUGFnZSk7CisKKwkJCQkJdmlydEFkZHIgKz0gYnl0ZXNUaGlzUGFnZTsKKwkJCQkJYnl0ZXNSZW1haW5pbmcgLT0gYnl0ZXNUaGlzUGFnZTsKKwkJCQl9CisJCQl9CisjZWxzZQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBVc2VyIG1vZGUgcGFnZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKworCQkJLyogdXNlciBwYWdlcyBhcmUgbm90IHBoeXNpY2FsbHkgY29udGlndW91cyAqLworCisJCQlyYyA9IC1FSU5WQUw7CisjZW5kaWYKKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQl7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbnN1cHBvcnRlZCBtZW1vcnkgdHlwZTogJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHJlZ2lvbi0+bWVtVHlwZSk7CisKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHJjICE9IDApIHsKKwkJbWVtTWFwLT5udW1SZWdpb25zVXNlZC0tOworCX0KKworb3V0OgorCisJRE1BX01BUF9QUklOVCgicmV0dXJuaW5nICVkXG4iLCByYyk7CisKKwl1cCgmbWVtTWFwLT5sb2NrKTsKKworCXJldHVybiByYzsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfbWFwX2FkZF9zZWdtZW50KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBNYXBzIGluIGEgbWVtb3J5IHJlZ2lvbiBzdWNoIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgYSBETUEuCisqCisqICAgQHJldHVybiAgICAgMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZS4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9tYXBfbWVtKERNQV9NZW1NYXBfdCAqbWVtTWFwLAkvKiBTdG9yZXMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcCAqLworCQl2b2lkICptZW0sCS8qIFZpcnR1YWwgYWRkcmVzcyB0aGF0IHdlIHdhbnQgdG8gZ2V0IGEgbWFwIG9mICovCisJCXNpemVfdCBudW1CeXRlcywJLyogTnVtYmVyIG9mIGJ5dGVzIGJlaW5nIG1hcHBlZCAqLworCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIJLyogRGlyZWN0aW9uIHRoYXQgdGhlIG1hcHBpbmcgd2lsbCBiZSBnb2luZyAqLworICAgICkgeworCWludCByYzsKKworCXJjID0gZG1hX21hcF9zdGFydChtZW1NYXAsIGRpcik7CisJaWYgKHJjID09IDApIHsKKwkJcmMgPSBkbWFfbWFwX2FkZF9yZWdpb24obWVtTWFwLCBtZW0sIG51bUJ5dGVzKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJLyogU2luY2UgdGhlIGFkZCBmYWlscywgdGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwsIGFuZCB0aGUgY2FsbGVyIHdvbid0ICovCisJCQkvKiBjYWxsIHVubWFwLCBzbyB3ZSBuZWVkIHRvIGRvIGl0IGhlcmUuICovCisKKwkJCWRtYV91bm1hcChtZW1NYXAsIDApOworCQl9CisJfQorCisJcmV0dXJuIHJjOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9tYXBfbWVtKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBTZXR1cCBhIGRlc2NyaXB0b3IgcmluZyBmb3IgYSBnaXZlbiBtZW1vcnkgbWFwLgorKgorKiAgIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZGVzY3JpcHRvciByaW5nIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQsIGFuZAorKiAgIHRoaXMgcm91dGluZSB3aWxsIG9ubHkgcmVhbGxvY2F0ZSBhIG5ldyBkZXNjcmlwdG9yIHJpbmcgaWYgdGhlIGV4aXN0aW5nCisqICAgb25lIGlzIHRvbyBzbWFsbC4KKyoKKyogICBAcmV0dXJuICAgICAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21hcF9jcmVhdGVfZGVzY3JpcHRvcl9yaW5nKERNQV9EZXZpY2VfdCBkZXYsCS8qIERNQSBkZXZpY2UgKHdoZXJlIHRoZSByaW5nIGlzIHN0b3JlZCkgKi8KKwkJCQkgICBETUFfTWVtTWFwX3QgKm1lbU1hcCwJLyogTWVtb3J5IG1hcCB0aGF0IHdpbGwgYmUgdXNlZCAqLworCQkJCSAgIGRtYV9hZGRyX3QgZGV2UGh5c0FkZHIJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBkZXZpY2UgKi8KKyAgICApIHsKKwlpbnQgcmM7CisJaW50IG51bURlc2NyaXB0b3JzOworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKwlETUFfUmVnaW9uX3QgKnJlZ2lvbjsKKwlETUFfU2VnbWVudF90ICpzZWdtZW50OworCWRtYV9hZGRyX3Qgc3JjUGh5c0FkZHI7CisJZG1hX2FkZHJfdCBkc3RQaHlzQWRkcjsKKwlpbnQgcmVnaW9uSWR4OworCWludCBzZWdtZW50SWR4OworCisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtkZXZdOworCisJZG93bigmbWVtTWFwLT5sb2NrKTsKKworCS8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgZGVzY3JpcHRvcnMgd2UgbmVlZCAqLworCisJbnVtRGVzY3JpcHRvcnMgPSAwOworCWZvciAocmVnaW9uSWR4ID0gMDsgcmVnaW9uSWR4IDwgbWVtTWFwLT5udW1SZWdpb25zVXNlZDsgcmVnaW9uSWR4KyspIHsKKwkJcmVnaW9uID0gJm1lbU1hcC0+cmVnaW9uW3JlZ2lvbklkeF07CisKKwkJZm9yIChzZWdtZW50SWR4ID0gMDsgc2VnbWVudElkeCA8IHJlZ2lvbi0+bnVtU2VnbWVudHNVc2VkOworCQkgICAgIHNlZ21lbnRJZHgrKykgeworCQkJc2VnbWVudCA9ICZyZWdpb24tPnNlZ21lbnRbc2VnbWVudElkeF07CisKKwkJCWlmIChtZW1NYXAtPmRpciA9PSBETUFfVE9fREVWSUNFKSB7CisJCQkJc3JjUGh5c0FkZHIgPSBzZWdtZW50LT5waHlzQWRkcjsKKwkJCQlkc3RQaHlzQWRkciA9IGRldlBoeXNBZGRyOworCQkJfSBlbHNlIHsKKwkJCQlzcmNQaHlzQWRkciA9IGRldlBoeXNBZGRyOworCQkJCWRzdFBoeXNBZGRyID0gc2VnbWVudC0+cGh5c0FkZHI7CisJCQl9CisKKwkJCXJjID0KKwkJCSAgICAgZG1hX2NhbGN1bGF0ZV9kZXNjcmlwdG9yX2NvdW50KGRldiwgc3JjUGh5c0FkZHIsCisJCQkJCQkJICAgIGRzdFBoeXNBZGRyLAorCQkJCQkJCSAgICBzZWdtZW50LT4KKwkJCQkJCQkgICAgbnVtQnl0ZXMpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiJXM6IGRtYV9jYWxjdWxhdGVfZGVzY3JpcHRvcl9jb3VudCBmYWlsZWQ6ICVkXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgcmMpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJbnVtRGVzY3JpcHRvcnMgKz0gcmM7CisJCX0KKwl9CisKKwkvKiBBZGp1c3QgdGhlIHNpemUgb2YgdGhlIHJpbmcsIGlmIGl0IGlzbid0IGJpZyBlbm91Z2ggKi8KKworCWlmIChudW1EZXNjcmlwdG9ycyA+IGRldkF0dHItPnJpbmcuZGVzY3JpcHRvcnNBbGxvY2F0ZWQpIHsKKwkJZG1hX2ZyZWVfZGVzY3JpcHRvcl9yaW5nKCZkZXZBdHRyLT5yaW5nKTsKKwkJcmMgPQorCQkgICAgIGRtYV9hbGxvY19kZXNjcmlwdG9yX3JpbmcoJmRldkF0dHItPnJpbmcsCisJCQkJCSAgICAgICBudW1EZXNjcmlwdG9ycyk7CisJCWlmIChyYyA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogZG1hX2FsbG9jX2Rlc2NyaXB0b3JfcmluZyBmYWlsZWQ6ICVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCByYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSB7CisJCXJjID0KKwkJICAgICBkbWFfaW5pdF9kZXNjcmlwdG9yX3JpbmcoJmRldkF0dHItPnJpbmcsCisJCQkJCSAgICAgIG51bURlc2NyaXB0b3JzKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBkbWFfaW5pdF9kZXNjcmlwdG9yX3JpbmcgZmFpbGVkOiAlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgcmMpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBQb3B1bGF0ZSB0aGUgZGVzY3JpcHRvcnMgKi8KKworCWZvciAocmVnaW9uSWR4ID0gMDsgcmVnaW9uSWR4IDwgbWVtTWFwLT5udW1SZWdpb25zVXNlZDsgcmVnaW9uSWR4KyspIHsKKwkJcmVnaW9uID0gJm1lbU1hcC0+cmVnaW9uW3JlZ2lvbklkeF07CisKKwkJZm9yIChzZWdtZW50SWR4ID0gMDsgc2VnbWVudElkeCA8IHJlZ2lvbi0+bnVtU2VnbWVudHNVc2VkOworCQkgICAgIHNlZ21lbnRJZHgrKykgeworCQkJc2VnbWVudCA9ICZyZWdpb24tPnNlZ21lbnRbc2VnbWVudElkeF07CisKKwkJCWlmIChtZW1NYXAtPmRpciA9PSBETUFfVE9fREVWSUNFKSB7CisJCQkJc3JjUGh5c0FkZHIgPSBzZWdtZW50LT5waHlzQWRkcjsKKwkJCQlkc3RQaHlzQWRkciA9IGRldlBoeXNBZGRyOworCQkJfSBlbHNlIHsKKwkJCQlzcmNQaHlzQWRkciA9IGRldlBoeXNBZGRyOworCQkJCWRzdFBoeXNBZGRyID0gc2VnbWVudC0+cGh5c0FkZHI7CisJCQl9CisKKwkJCXJjID0KKwkJCSAgICAgZG1hX2FkZF9kZXNjcmlwdG9ycygmZGV2QXR0ci0+cmluZywgZGV2LAorCQkJCQkJIHNyY1BoeXNBZGRyLCBkc3RQaHlzQWRkciwKKwkJCQkJCSBzZWdtZW50LT5udW1CeXRlcyk7CisJCQlpZiAocmMgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczogZG1hX2FkZF9kZXNjcmlwdG9ycyBmYWlsZWQ6ICVkXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgcmMpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorCisJcmMgPSAwOworCitvdXQ6CisKKwl1cCgmbWVtTWFwLT5sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKK0VYUE9SVF9TWU1CT0woZG1hX21hcF9jcmVhdGVfZGVzY3JpcHRvcl9yaW5nKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBNYXBzIGluIGEgbWVtb3J5IHJlZ2lvbiBzdWNoIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgYSBETUEuCisqCisqICAgQHJldHVybgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX3VubWFwKERNQV9NZW1NYXBfdCAqbWVtTWFwLAkvKiBTdG9yZXMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcCAqLworCSAgICAgIGludCBkaXJ0aWVkCS8qIG5vbi16ZXJvIGlmIGFueSBvZiB0aGUgcGFnZXMgd2VyZSBtb2RpZmllZCAqLworICAgICkgeworCWludCByZWdpb25JZHg7CisJaW50IHNlZ21lbnRJZHg7CisJRE1BX1JlZ2lvbl90ICpyZWdpb247CisJRE1BX1NlZ21lbnRfdCAqc2VnbWVudDsKKworCWZvciAocmVnaW9uSWR4ID0gMDsgcmVnaW9uSWR4IDwgbWVtTWFwLT5udW1SZWdpb25zVXNlZDsgcmVnaW9uSWR4KyspIHsKKwkJcmVnaW9uID0gJm1lbU1hcC0+cmVnaW9uW3JlZ2lvbklkeF07CisKKwkJZm9yIChzZWdtZW50SWR4ID0gMDsgc2VnbWVudElkeCA8IHJlZ2lvbi0+bnVtU2VnbWVudHNVc2VkOworCQkgICAgIHNlZ21lbnRJZHgrKykgeworCQkJc2VnbWVudCA9ICZyZWdpb24tPnNlZ21lbnRbc2VnbWVudElkeF07CisKKwkJCXN3aXRjaCAocmVnaW9uLT5tZW1UeXBlKSB7CisJCQljYXNlIERNQV9NRU1fVFlQRV9WTUFMTE9DOgorCQkJCXsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiJXM6IHZtYWxsb2MnZCBwYWdlcyBhcmUgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisJCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKworCQkJY2FzZSBETUFfTUVNX1RZUEVfS01BTExPQzoKKwkJCQl7CisjaWYgQUxMT1dfTUFQX09GX0tNQUxMT0NfTUVNT1JZCisJCQkJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwKKwkJCQkJCQkgc2VnbWVudC0+cGh5c0FkZHIsCisJCQkJCQkJIHNlZ21lbnQtPm51bUJ5dGVzLAorCQkJCQkJCSBtZW1NYXAtPmRpcik7CisjZW5kaWYKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIERNQV9NRU1fVFlQRV9ETUE6CisJCQkJeworCQkJCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShOVUxMLAorCQkJCQkJCQlzZWdtZW50LT4KKwkJCQkJCQkJcGh5c0FkZHIsCisJCQkJCQkJCXNlZ21lbnQtPgorCQkJCQkJCQludW1CeXRlcywKKwkJCQkJCQkJbWVtTWFwLT5kaXIpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgRE1BX01FTV9UWVBFX1VTRVI6CisJCQkJeworCQkJCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovCisKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQlkZWZhdWx0OgorCQkJCXsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiJXM6IFVuc3VwcG9ydGVkIG1lbW9yeSB0eXBlOiAlZFxuIiwKKwkJCQkJICAgICAgIF9fZnVuY19fLCByZWdpb24tPm1lbVR5cGUpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQl9CisKKwkJCXNlZ21lbnQtPnZpcnRBZGRyID0gTlVMTDsKKwkJCXNlZ21lbnQtPnBoeXNBZGRyID0gMDsKKwkJCXNlZ21lbnQtPm51bUJ5dGVzID0gMDsKKwkJfQorCisJCWlmIChyZWdpb24tPm51bUxvY2tlZFBhZ2VzID4gMCkgeworCQkJaW50IHBhZ2VJZHg7CisKKwkJCS8qIFNvbWUgdXNlciBwYWdlcyB3ZXJlIGxvY2tlZC4gV2UgbmVlZCB0byBnbyBhbmQgdW5sb2NrIHRoZW0gbm93LiAqLworCisJCQlmb3IgKHBhZ2VJZHggPSAwOyBwYWdlSWR4IDwgcmVnaW9uLT5udW1Mb2NrZWRQYWdlczsKKwkJCSAgICAgcGFnZUlkeCsrKSB7CisJCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPQorCQkJCSAgICByZWdpb24tPmxvY2tlZFBhZ2VzW3BhZ2VJZHhdOworCisJCQkJaWYgKG1lbU1hcC0+ZGlyID09IERNQV9GUk9NX0RFVklDRSkgeworCQkJCQlTZXRQYWdlRGlydHkocGFnZSk7CisJCQkJfQorCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCX0KKwkJCWtmcmVlKHJlZ2lvbi0+bG9ja2VkUGFnZXMpOworCQkJcmVnaW9uLT5udW1Mb2NrZWRQYWdlcyA9IDA7CisJCQlyZWdpb24tPmxvY2tlZFBhZ2VzID0gTlVMTDsKKwkJfQorCisJCXJlZ2lvbi0+bWVtVHlwZSA9IERNQV9NRU1fVFlQRV9OT05FOworCQlyZWdpb24tPnZpcnRBZGRyID0gTlVMTDsKKwkJcmVnaW9uLT5udW1CeXRlcyA9IDA7CisJCXJlZ2lvbi0+bnVtU2VnbWVudHNVc2VkID0gMDsKKwl9CisJbWVtTWFwLT51c2VyVGFzayA9IE5VTEw7CisJbWVtTWFwLT5udW1SZWdpb25zVXNlZCA9IDA7CisJbWVtTWFwLT5pblVzZSA9IDA7CisKKwl1cCgmbWVtTWFwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV91bm1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvZG1hX2RldmljZS5jIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2RtYV9kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTBhZDczCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2RtYV9kZXZpY2UuYwpAQCAtMCwwICsxLDU5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA0IC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBAZmlsZSAgIGRtYV9kZXZpY2UuYworKgorKiAgIEBicmllZiAgcHJpdmF0ZSBhcnJheSBvZiBETUFfRGV2aWNlQXR0cmlidXRlX3QKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworRE1BX0RldmljZUF0dHJpYnV0ZV90IERNQV9nRGV2aWNlQXR0cmlidXRlW0RNQV9OVU1fREVWSUNFX0VOVFJJRVNdID0geworCVtETUFfREVWSUNFX01FTV9UT19NRU1dID0JLyogTUVNIDIgTUVNICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMCB8IERNQV9ERVZJQ0VfRkxBR19PTl9ETUExLAorCSAubmFtZSA9ICJtZW0tdG8tbWVtIiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNVcGRhdGUgPSBkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLmRzdFVwZGF0ZSA9IGRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX01FTSwKKwkJICAgIC50cmFuc2Zlck1vZGUgPSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9QRVJSRVFVRVNULAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNoYW5uZWxQcmlvcml0eSA9IGRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzcsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfVlBNX01FTV9UT19NRU1dID0JLyogVlBNICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfSVNfREVESUNBVEVEIHwgRE1BX0RFVklDRV9GTEFHX05PX0lTUiwKKwkgLm5hbWUgPSAidnBtIiwKKwkgLmRlZGljYXRlZENvbnRyb2xsZXIgPSAwLAorCSAuZGVkaWNhdGVkQ2hhbm5lbCA9IDAsCisJIC8qIHJlc2VydmUgRE1BMDowIGZvciBWUE0gKi8KKwkgfSwKKwlbRE1BX0RFVklDRV9OQU5EX01FTV9UT19NRU1dID0JLyogTkFORCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTAgfCBETUFfREVWSUNFX0ZMQUdfT05fRE1BMSwKKwkgLm5hbWUgPSAibmFuZCIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSAwLAorCQkgICAgLmRzdFBlcmlwaGVyYWxQb3J0ID0gMCwKKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF80LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzQsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNiwKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfUElGX01FTV9UT19ERVZdID0JLyogUElGIFRYICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMCB8IERNQV9ERVZJQ0VfRkxBR19PTl9ETUExCisJIHwgRE1BX0RFVklDRV9GTEFHX0FMTE9XX0xBUkdFX0ZJRk8KKwkgfCBETUFfREVWSUNFX0ZMQUdfQUxMT0NfRE1BMV9GSVJTVCB8IERNQV9ERVZJQ0VfRkxBR19QT1JUX1BFUl9ETUFDLAorCSAubmFtZSA9ICJwaWZfdHgiLAorCSAuZG1hY1BvcnQgPSB7MTQsIDV9LAorCSAuY29uZmlnID0geworCQkgICAgLnNyY1BlcmlwaGVyYWxQb3J0ID0gMCwJLyogU1JDOiBtZW1vcnkgKi8KKwkJICAgIC8qIGRzdFBlcmlwaGVyYWxQb3J0ICAgICAgICAgID0gNSBvciAxNCAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5zcmNVcGRhdGUgPSBkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLmRzdFVwZGF0ZSA9IGRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX1BFUklQSEVSQUwsCisJCSAgICAuc3JjTWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuZHN0TWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X0RTVF9NQVNURVJfSU5URVJGQUNFXzIsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF82NCwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF84LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzgsCisJCSAgICAubWF4RGF0YVBlckJsb2NrID0gMTYyNTYsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX1BJRl9ERVZfVE9fTUVNXSA9CS8qIFBJRiBSWCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTAgfCBETUFfREVWSUNFX0ZMQUdfT05fRE1BMQorCSB8IERNQV9ERVZJQ0VfRkxBR19BTExPV19MQVJHRV9GSUZPCisJIC8qIERNQV9ERVZJQ0VfRkxBR19BTExPQ19ETUExX0ZJUlNUICovCisJIHwgRE1BX0RFVklDRV9GTEFHX1BPUlRfUEVSX0RNQUMsCisJIC5uYW1lID0gInBpZl9yeCIsCisJIC5kbWFjUG9ydCA9IHsxNCwgNX0sCisJIC5jb25maWcgPSB7CisJCSAgICAvKiBzcmNQZXJpcGhlcmFsUG9ydCAgICAgICAgICA9IDUgb3IgMTQgKi8KKwkJICAgIC5kc3RQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIERTVDogbWVtb3J5ICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLnNyY1VwZGF0ZSA9IGRtYWNId19TUkNfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAuZHN0VXBkYXRlID0gZG1hY0h3X0RTVF9BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMiwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5jb21wbGV0ZVRyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzMyLAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzgsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfOCwKKwkJICAgIC5tYXhEYXRhUGVyQmxvY2sgPSAxNjI1NiwKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfSTJTMF9ERVZfVE9fTUVNXSA9CS8qIEkyUyBSWCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTAsCisJIC5uYW1lID0gImkyczBfcngiLAorCSAuY29uZmlnID0geworCQkgICAgLnNyY1BlcmlwaGVyYWxQb3J0ID0gMCwJLyogU1JDOiBJMlMwICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBEU1Q6IG1lbW9yeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMCwKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8xNiwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF82NCwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF80LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzAsCisJCSAgICAuYmxvY2tUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnRyYW5zZmVyTW9kZSA9IGRtYWNId19UUkFOU0ZFUl9NT0RFX0NPTlRJTlVPVVMsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX0kyUzBfTUVNX1RPX0RFVl0gPQkvKiBJMlMgVFggKi8KKwl7CisJIC5mbGFncyA9IERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwLAorCSAubmFtZSA9ICJpMnMwX3R4IiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIFNSQzogbWVtb3J5ICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAxLAkvKiBEU1Q6IEkyUzAgKi8KKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDAsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX1BFUklQSEVSQUwsCisJCSAgICAuc3JjTWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuZHN0TWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X0RTVF9NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfMTYsCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfMCwKKwkJICAgIC5kc3RNYXhCdXJzdFdpZHRoID0gZG1hY0h3X0RTVF9CVVJTVF9XSURUSF80LAorCQkgICAgLmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC50cmFuc2Zlck1vZGUgPSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9QRVJSRVFVRVNULAorCQkgICAgfSwKKwkgfSwKKwlbRE1BX0RFVklDRV9JMlMxX0RFVl9UT19NRU1dID0JLyogSTJTMSBSWCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTEsCisJIC5uYW1lID0gImkyczFfcngiLAorCSAuY29uZmlnID0geworCQkgICAgLnNyY1BlcmlwaGVyYWxQb3J0ID0gMiwJLyogU1JDOiBJMlMxICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBEU1Q6IG1lbW9yeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMCwKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8xNiwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF82NCwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF80LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzAsCisJCSAgICAuYmxvY2tUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnRyYW5zZmVyTW9kZSA9IGRtYWNId19UUkFOU0ZFUl9NT0RFX0NPTlRJTlVPVVMsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX0kyUzFfTUVNX1RPX0RFVl0gPQkvKiBJMlMxIFRYICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMSwKKwkgLm5hbWUgPSAiaTJzMV90eCIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBTUkM6IG1lbW9yeSAqLworCQkgICAgLmRzdFBlcmlwaGVyYWxQb3J0ID0gMywJLyogRFNUOiBJMlMxICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMCwKKwkJICAgIC5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAwLAorCQkgICAgLnRyYW5zZmVyVHlwZSA9IGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMLAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzE2LAorCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzAsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfNCwKKwkJICAgIC5ibG9ja1RyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9ESVNBQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNoYW5uZWxQcmlvcml0eSA9IGRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzcsCisJCSAgICAudHJhbnNmZXJNb2RlID0gZG1hY0h3X1RSQU5TRkVSX01PREVfUEVSUkVRVUVTVCwKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfRVNXX01FTV9UT19ERVZdID0JLyogRVNXIFRYICovCisJeworCSAubmFtZSA9ICJlc3dfdHgiLAorCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfSVNfREVESUNBVEVELAorCSAuZGVkaWNhdGVkQ29udHJvbGxlciA9IDEsCisJIC5kZWRpY2F0ZWRDaGFubmVsID0gMywKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIFNSQzogbWVtb3J5ICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAxLAkvKiBEU1Q6IEVTVyAoTVRQKSAqLworCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRElTQUJMRSwKKwkJICAgIC8qIERNQXhfQUhCX1NTVEFUQVJ5ICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC8qIERNQXhfQUhCX0RTVEFUQVJ5ICovCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgzMDQ5MDAxMCwKKwkJICAgIC8qIERNQXhfQUhCX0NGR3kgKi8KKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLyogRE1BeF9BSEJfQ1RMeSAqLworCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8yLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLnRyYW5zZmVyVHlwZSA9IGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMLAorCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzAsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfOCwKKwkJICAgIC5zcmNVcGRhdGUgPSBkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLmRzdFVwZGF0ZSA9IGRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX0VTV19ERVZfVE9fTUVNXSA9CS8qIEVTVyBSWCAqLworCXsKKwkgLm5hbWUgPSAiZXN3X3J4IiwKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX0lTX0RFRElDQVRFRCwKKwkgLmRlZGljYXRlZENvbnRyb2xsZXIgPSAxLAorCSAuZGVkaWNhdGVkQ2hhbm5lbCA9IDIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBTUkM6IEVTVyAoUFRNKSAqLworCQkgICAgLmRzdFBlcmlwaGVyYWxQb3J0ID0gMCwJLyogRFNUOiBtZW1vcnkgKi8KKwkJICAgIC5jb21wbGV0ZVRyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAvKiBETUF4X0FIQl9TU1RBVEFSeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MzA0ODAwMTAsCisJCSAgICAvKiBETUF4X0FIQl9EU1RBVEFSeSAqLworCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAvKiBETUF4X0FIQl9DRkd5ICovCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC8qIERNQXhfQUhCX0NUTHkgKi8KKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMiwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF84LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzAsCisJCSAgICAuc3JjVXBkYXRlID0gZG1hY0h3X1NSQ19BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC5kc3RVcGRhdGUgPSBkbWFjSHdfRFNUX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgfSwKKwkgfSwKKwlbRE1BX0RFVklDRV9BUE1fQ09ERUNfQV9ERVZfVE9fTUVNXSA9CS8qIEFQTSBDb2RlYyBBIEluZ3Jlc3MgKi8KKwl7CisJIC5mbGFncyA9IERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwLAorCSAubmFtZSA9ICJhcG1fYV9yeCIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSAyLAkvKiBTUkM6IENvZGVjIEEgSW5ncmVzcyBGSUZPICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBEU1Q6IG1lbW9yeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5zcmNVcGRhdGUgPSBkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLmRzdFVwZGF0ZSA9IGRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfUEVSSVBIRVJBTF9UT19NRU0sCisJCSAgICAuc3JjTWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzIsCisJCSAgICAuZHN0TWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X0RTVF9NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuYmxvY2tUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzMyLAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzQsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfNCwKKwkJICAgIC50cmFuc2Zlck1vZGUgPSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9DT05USU5VT1VTLAorCQkgICAgfSwKKwkgfSwKKwlbRE1BX0RFVklDRV9BUE1fQ09ERUNfQV9NRU1fVE9fREVWXSA9CS8qIEFQTSBDb2RlYyBBIEVncmVzcyAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTAsCisJIC5uYW1lID0gImFwbV9hX3R4IiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIFNSQzogbWVtb3J5ICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAzLAkvKiBEU1Q6IENvZGVjIEEgRWdyZXNzIEZJRk8gKi8KKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuc3JjVXBkYXRlID0gZG1hY0h3X1NSQ19BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC5kc3RVcGRhdGUgPSBkbWFjSHdfRFNUX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLnRyYW5zZmVyVHlwZSA9IGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMLAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8yLAorCQkgICAgLmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF82NCwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF80LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzQsCisJCSAgICAudHJhbnNmZXJNb2RlID0gZG1hY0h3X1RSQU5TRkVSX01PREVfUEVSUkVRVUVTVCwKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfQVBNX0NPREVDX0JfREVWX1RPX01FTV0gPQkvKiBBUE0gQ29kZWMgQiBJbmdyZXNzICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMCwKKwkgLm5hbWUgPSAiYXBtX2JfcngiLAorCSAuY29uZmlnID0geworCQkgICAgLnNyY1BlcmlwaGVyYWxQb3J0ID0gNCwJLyogU1JDOiBDb2RlYyBCIEluZ3Jlc3MgRklGTyAqLworCQkgICAgLmRzdFBlcmlwaGVyYWxQb3J0ID0gMCwJLyogRFNUOiBtZW1vcnkgKi8KKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuc3JjVXBkYXRlID0gZG1hY0h3X1NSQ19BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC5kc3RVcGRhdGUgPSBkbWFjSHdfRFNUX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLnRyYW5zZmVyVHlwZSA9IGRtYWNId19UUkFOU0ZFUl9UWVBFX1BFUklQSEVSQUxfVE9fTUVNLAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8yLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jb21wbGV0ZVRyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9ESVNBQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF82NCwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF80LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzQsCisJCSAgICAudHJhbnNmZXJNb2RlID0gZG1hY0h3X1RSQU5TRkVSX01PREVfQ09OVElOVU9VUywKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfQVBNX0NPREVDX0JfTUVNX1RPX0RFVl0gPQkvKiBBUE0gQ29kZWMgQiBFZ3Jlc3MgKi8KKwl7CisJIC5mbGFncyA9IERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwLAorCSAubmFtZSA9ICJhcG1fYl90eCIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBTUkM6IG1lbW9yeSAqLworCQkgICAgLmRzdFBlcmlwaGVyYWxQb3J0ID0gNSwJLyogRFNUOiBDb2RlYyBCIEVncmVzcyBGSUZPICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLnNyY1VwZGF0ZSA9IGRtYWNId19TUkNfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAuZHN0VXBkYXRlID0gZG1hY0h3X0RTVF9BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fUEVSSVBIRVJBTCwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMiwKKwkJICAgIC5ibG9ja1RyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9ESVNBQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNoYW5uZWxQcmlvcml0eSA9IGRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzcsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfMzIsCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfNCwKKwkJICAgIC5kc3RNYXhCdXJzdFdpZHRoID0gZG1hY0h3X0RTVF9CVVJTVF9XSURUSF80LAorCQkgICAgLnRyYW5zZmVyTW9kZSA9IGRtYWNId19UUkFOU0ZFUl9NT0RFX1BFUlJFUVVFU1QsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX0FQTV9DT0RFQ19DX0RFVl9UT19NRU1dID0JLyogQVBNIENvZGVjIEMgSW5ncmVzcyAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTEsCisJIC5uYW1lID0gImFwbV9jX3J4IiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDQsCS8qIFNSQzogQ29kZWMgQyBJbmdyZXNzIEZJRk8gKi8KKwkJICAgIC5kc3RQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIERTVDogbWVtb3J5ICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLnNyY1VwZGF0ZSA9IGRtYWNId19TUkNfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAuZHN0VXBkYXRlID0gZG1hY0h3X0RTVF9BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMiwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5ibG9ja1RyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRElTQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNoYW5uZWxQcmlvcml0eSA9IGRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzcsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfMzIsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfNCwKKwkJICAgIC5kc3RNYXhCdXJzdFdpZHRoID0gZG1hY0h3X0RTVF9CVVJTVF9XSURUSF80LAorCQkgICAgLnRyYW5zZmVyTW9kZSA9IGRtYWNId19UUkFOU0ZFUl9NT0RFX0NPTlRJTlVPVVMsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX0FQTV9QQ00wX0RFVl9UT19NRU1dID0JLyogUENNMCBSWCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTAsCisJIC5uYW1lID0gInBjbTBfcngiLAorCSAuY29uZmlnID0geworCQkgICAgLnNyY1BlcmlwaGVyYWxQb3J0ID0gMTIsCS8qIFNSQzogUENNMCAqLworCQkgICAgLmRzdFBlcmlwaGVyYWxQb3J0ID0gMCwJLyogRFNUOiBtZW1vcnkgKi8KKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDAsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfUEVSSVBIRVJBTF9UT19NRU0sCisJCSAgICAuc3JjTWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzIsCisJCSAgICAuZHN0TWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X0RTVF9NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfMzIsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfOCwKKwkJICAgIC5kc3RNYXhCdXJzdFdpZHRoID0gZG1hY0h3X0RTVF9CVVJTVF9XSURUSF80LAorCQkgICAgLmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jb21wbGV0ZVRyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9ESVNBQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC50cmFuc2Zlck1vZGUgPSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9DT05USU5VT1VTLAorCQkgICAgfSwKKwkgfSwKKwlbRE1BX0RFVklDRV9BUE1fUENNMF9NRU1fVE9fREVWXSA9CS8qIFBDTTAgVFggKi8KKwl7CisJIC5mbGFncyA9IERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwLAorCSAubmFtZSA9ICJwY20wX3R4IiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIFNSQzogbWVtb3J5ICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAxMywJLyogRFNUOiBQQ00wICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMCwKKwkJICAgIC5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAwLAorCQkgICAgLnRyYW5zZmVyVHlwZSA9IGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMLAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8yLAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzMyLAorCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzQsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfOCwKKwkJICAgIC5ibG9ja1RyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9ESVNBQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNoYW5uZWxQcmlvcml0eSA9IGRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzcsCisJCSAgICAudHJhbnNmZXJNb2RlID0gZG1hY0h3X1RSQU5TRkVSX01PREVfUEVSUkVRVUVTVCwKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfQVBNX1BDTTFfREVWX1RPX01FTV0gPQkvKiBQQ00xIFJYICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMSwKKwkgLm5hbWUgPSAicGNtMV9yeCIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSAxNCwJLyogU1JDOiBQQ00xICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBEU1Q6IG1lbW9yeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMCwKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMiwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF82NCwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF84LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzQsCisJCSAgICAuYmxvY2tUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnRyYW5zZmVyTW9kZSA9IGRtYWNId19UUkFOU0ZFUl9NT0RFX0NPTlRJTlVPVVMsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX0FQTV9QQ00xX01FTV9UT19ERVZdID0JLyogUENNMSBUWCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTEsCisJIC5uYW1lID0gInBjbTFfdHgiLAorCSAuY29uZmlnID0geworCQkgICAgLnNyY1BlcmlwaGVyYWxQb3J0ID0gMCwJLyogU1JDOiBtZW1vcnkgKi8KKwkJICAgIC5kc3RQZXJpcGhlcmFsUG9ydCA9IDE1LAkvKiBEU1Q6IFBDTTEgKi8KKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDAsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX1BFUklQSEVSQUwsCisJCSAgICAuc3JjTWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuZHN0TWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X0RTVF9NQVNURVJfSU5URVJGQUNFXzIsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfMzIsCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfNCwKKwkJICAgIC5kc3RNYXhCdXJzdFdpZHRoID0gZG1hY0h3X0RTVF9CVVJTVF9XSURUSF84LAorCQkgICAgLmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC50cmFuc2Zlck1vZGUgPSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9QRVJSRVFVRVNULAorCQkgICAgfSwKKwkgfSwKKwlbRE1BX0RFVklDRV9TUFVNX0RFVl9UT19NRU1dID0JLyogU1BVTSBSWCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTAgfCBETUFfREVWSUNFX0ZMQUdfT05fRE1BMSwKKwkgLm5hbWUgPSAic3B1bV9yeCIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSA2LAkvKiBTUkM6IENvZGVjIEEgSW5ncmVzcyBGSUZPICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBEU1Q6IG1lbW9yeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5zcmNVcGRhdGUgPSBkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLmRzdFVwZGF0ZSA9IGRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfUEVSSVBIRVJBTF9UT19NRU0sCisJCSAgICAuc3JjTWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzIsCisJCSAgICAuZHN0TWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X0RTVF9NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuYmxvY2tUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRElTQUJMRSwKKwkJICAgIC5jb21wbGV0ZVRyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzMyLAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzMyLAorCQkgICAgLyogQnVzcnQgc2l6ZSAqKk1VU1QqKiBiZSAxNiBmb3IgU1BVTSB0byB3b3JrICovCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfMTYsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfMTYsCisJCSAgICAudHJhbnNmZXJNb2RlID0gZG1hY0h3X1RSQU5TRkVSX01PREVfUEVSUkVRVUVTVCwKKwkJICAgIC8qIG9uIHRoZSBSWCBzaWRlLCBTUFUgbmVlZHMgdG8gYmUgdGhlIGZsb3cgY29udHJvbGxlciAqLworCQkgICAgLmZsb3dDb250cm9sZXIgPSBkbWFjSHdfRkxPV19DT05UUk9MX1BFUklQSEVSQUwsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX1NQVU1fTUVNX1RPX0RFVl0gPQkvKiBTUFVNIFRYICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMCB8IERNQV9ERVZJQ0VfRkxBR19PTl9ETUExLAorCSAubmFtZSA9ICJzcHVtX3R4IiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIFNSQzogbWVtb3J5ICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSA3LAkvKiBEU1Q6IFNQVU0gKi8KKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuc3JjVXBkYXRlID0gZG1hY0h3X1NSQ19BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC5kc3RVcGRhdGUgPSBkbWFjSHdfRFNUX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLnRyYW5zZmVyVHlwZSA9IGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMLAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8yLAorCQkgICAgLmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC8qIEJ1c3J0IHNpemUgKipNVVNUKiogYmUgMTYgZm9yIFNQVU0gdG8gd29yayAqLworCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzE2LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzE2LAorCQkgICAgLnRyYW5zZmVyTW9kZSA9IGRtYWNId19UUkFOU0ZFUl9NT0RFX1BFUlJFUVVFU1QsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX01FTV9UT19WUkFNXSA9CS8qIE1FTSAyIFZSQU0gKi8KKwl7CisJIC5mbGFncyA9IERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwIHwgRE1BX0RFVklDRV9GTEFHX09OX0RNQTEsCisJIC5uYW1lID0gIm1lbS10by12cmFtIiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIFNSQzogbWVtb3J5ICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLnNyY1VwZGF0ZSA9IGRtYWNId19TUkNfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAuZHN0VXBkYXRlID0gZG1hY0h3X0RTVF9BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fTUVNLAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8yLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNoYW5uZWxQcmlvcml0eSA9IGRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzcsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfOCwKKwkJICAgIC5kc3RNYXhCdXJzdFdpZHRoID0gZG1hY0h3X0RTVF9CVVJTVF9XSURUSF84LAorCQkgICAgfSwKKwkgfSwKKwlbRE1BX0RFVklDRV9WUkFNX1RPX01FTV0gPQkvKiBWUkFNIDIgTUVNICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMCB8IERNQV9ERVZJQ0VfRkxBR19PTl9ETUExLAorCSAubmFtZSA9ICJ2cmFtLXRvLW1lbSIsCisJIC5jb25maWcgPSB7CisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBEU1Q6IG1lbW9yeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5zcmNVcGRhdGUgPSBkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLmRzdFVwZGF0ZSA9IGRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMiwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5jb21wbGV0ZVRyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzgsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfOCwKKwkJICAgIH0sCisJIH0sCit9OworRVhQT1JUX1NZTUJPTChETUFfZ0RldmljZUF0dHJpYnV0ZSk7CS8qIHByaW1hcmlseSBmb3IgZG1hLXRlc3QuYyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY2ZnX2dsb2JhbC5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY2ZnX2dsb2JhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMWRhODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jZmdfZ2xvYmFsLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfQ0ZHX0dMT0JBTF9IXworI2RlZmluZSBfQ0ZHX0dMT0JBTF9IXworCisjaW5jbHVkZSA8Y2ZnX2dsb2JhbF9kZWZpbmVzLmg+CisKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9DSElQICAgICAgICAgICAgICAgICAgICAgICAgIEJDTTExMTA3CisjZGVmaW5lIENGR19HTE9CQUxfQ0hJUF9GQU1JTFkgICAgICAgICAgICAgICAgICBDRkdfR0xPQkFMX0NISVBfRkFNSUxZX0JDTVJJTkcKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9DSElQX1JFViAgICAgICAgICAgICAgICAgICAgIDB4QjAKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9SQU1fU0laRSAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9SQU1fQkFTRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9SQU1fUkVTRVJWRURfU0laRSAgICAgICAgICAgIDB4MDAwMDAwCisKKyNlbmRpZiAvKiBfQ0ZHX0dMT0JBTF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY2ZnX2dsb2JhbF9kZWZpbmVzLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jZmdfZ2xvYmFsX2RlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWJlYjBiMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NmZ19nbG9iYWxfZGVmaW5lcy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwNiAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgQ0ZHX0dMT0JBTF9ERUZJTkVTX0gKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9ERUZJTkVTX0gKKworLyogQ0hJUCAqLworI2RlZmluZSBCQ00xMTAzIDEKKworI2RlZmluZSBCQ00xMTkxIDQKKyNkZWZpbmUgQkNNMjE1MyA1CisjZGVmaW5lIEJDTTI4MjAgNgorCisjZGVmaW5lIEJDTTI4MjYgOAorI2RlZmluZSBGUEdBMTExMDcgOQorI2RlZmluZSBCQ00xMTEwNyAgIDEwCisjZGVmaW5lIEJDTTExMTA5ICAgMTEKKyNkZWZpbmUgQkNNMTExNzAgICAxMgorI2RlZmluZSBCQ00xMTExMCAgIDEzCisjZGVmaW5lIEJDTTExMjExICAgMTQKKworLyogQ0ZHX0dMT0JBTF9DSElQX0ZBTUlMWSB0eXBlcyAqLworI2RlZmluZSBDRkdfR0xPQkFMX0NISVBfRkFNSUxZX05PTkUgICAgICAgIDAKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9DSElQX0ZBTUlMWV9CQ00xMTZYICAgICAyCisjZGVmaW5lIENGR19HTE9CQUxfQ0hJUF9GQU1JTFlfQkNNUklORyAgICAgNAorI2RlZmluZSBDRkdfR0xPQkFMX0NISVBfRkFNSUxZX0JDTTExMDMgICAgIDgKKworI2RlZmluZSBJTUFHRV9IRUFERVJfU0laRV9DSEVDS1NVTSAgICA0CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9jYWNoZS5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhMjBlNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9jYWNoZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgQ1NQX0NBQ0hFX0gKKyNkZWZpbmUgQ1NQX0NBQ0hFX0gKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgPGNzcC9zdGRpbnQuaD4KKworLyogLS0tLSBQdWJsaWMgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoU1RBTkRBTE9ORSkKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisjZGVmaW5lIENTUF9DQUNIRV9GTFVTSF9BTEwgICAgICBmbHVzaF9jYWNoZV9hbGwoKQorCisjZWxzZQorCisjZGVmaW5lIENTUF9DQUNIRV9GTFVTSF9BTEwKKworI2VuZGlmCisKKyNlbmRpZiAvKiBDU1BfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2RlbGF5LmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvZGVsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjNkODAzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2RlbGF5LmgKQEAgLTAsMCArMSwzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIENTUF9ERUxBWV9ICisjZGVmaW5lIENTUF9ERUxBWV9ICisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFNvbWUgQ1NQIHJvdXRpbmVzIHJlcXVpcmUgdXNlIG9mIHRoZSBmb2xsb3dpbmcgZGVsYXkgcm91dGluZXMuIFVzZSB0aGUgT1MgKi8KKy8qIHZlcnNpb24gaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGEgQ1NQIHNwZWNpZmljIGRlZmluaXRpb24uICovCisvKiB2b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKTsgKi8KKy8qIHZvaWQgbWRlbGF5KHVuc2lnbmVkIGxvbmcgbXNlY3MpOyAqLworCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChTVEFOREFMT05FKQorICAgI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjZWxzZQorICAgI2luY2x1ZGUgPG1hY2gvY3NwL2RlbGF5Lmg+CisjZW5kaWYKKworLyogLS0tLSBQdWJsaWMgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZW5kaWYgLyogIENTUF9ERUxBWV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvZG1hY0h3LmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvZG1hY0h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ1MTAxMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9kbWFjSHcuaApAQCAtMCwwICsxLDU5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA0IC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIGRtYWNIdy5oCisqCisqICBAYnJpZWYgICBBUEkgZGVmaW5pdGlvbnMgZm9yIGxvdyBsZXZlbCBETUEgY29udHJvbGxlciBkcml2ZXIKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0RNQUNIV19ICisjZGVmaW5lIF9ETUFDSFdfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvZG1hY0h3X3JlZy5oPgorCisvKiBEZWZpbmUgRE1BIENoYW5uZWwgSUQgdXNpbmcgRE1BIGNvbnRyb2xsZXIgbnVtYmVyIChtKSBhbmQgY2hhbm5lbCBudW1iZXIgKGMpLgorCisgICBTeXN0ZW0gc3BlY2lmaWMgY2hhbm5lbCBJRCBzaG91bGQgYmUgZGVmaW5lZCBhcyBmb2xsb3dzCisKKyAgIEZvciBleGFtcGxlOgorCisgICAjaW5jbHVkZSA8ZG1hY0h3Lmg+CisgICAuLi4KKyAgICNkZWZpbmUgc3lzdGVtSHdfTENEX0NIQU5ORUxfSUQgICAgICAgICAgICAgICAgZG1hY0h3X01BS0VfQ0hBTk5FTF9JRCgwLDUpCisgICAjZGVmaW5lIHN5c3RlbUh3X1NXSVRDSF9SWF9DSEFOTkVMX0lEICAgICAgICAgIGRtYWNId19NQUtFX0NIQU5ORUxfSUQoMCwwKQorICAgI2RlZmluZSBzeXN0ZW1Id19TV0lUQ0hfVFhfQ0hBTk5FTF9JRCAgICAgICAgICBkbWFjSHdfTUFLRV9DSEFOTkVMX0lEKDAsMSkKKyAgICNkZWZpbmUgc3lzdGVtSHdfQVBNX1JYX0NIQU5ORUxfSUQgICAgICAgICAgICAgZG1hY0h3X01BS0VfQ0hBTk5FTF9JRCgwLDMpCisgICAjZGVmaW5lIHN5c3RlbUh3X0FQTV9UWF9DSEFOTkVMX0lEICAgICAgICAgICAgIGRtYWNId19NQUtFX0NIQU5ORUxfSUQoMCw0KQorICAgLi4uCisgICAjZGVmaW5lIHN5c3RlbUh3X1NIQVJFRDFfQ0hBTk5FTF9JRCAgICAgICAgICAgIGRtYWNId19NQUtFX0NIQU5ORUxfSUQoMSw0KQorICAgI2RlZmluZSBzeXN0ZW1Id19TSEFSRUQyX0NIQU5ORUxfSUQgICAgICAgICAgICBkbWFjSHdfTUFLRV9DSEFOTkVMX0lEKDEsNSkKKyAgICNkZWZpbmUgc3lzdGVtSHdfU0hBUkVEM19DSEFOTkVMX0lEICAgICAgICAgICAgZG1hY0h3X01BS0VfQ0hBTk5FTF9JRCgwLDYpCisgICAuLi4KKyovCisjZGVmaW5lIGRtYWNId19NQUtFX0NIQU5ORUxfSUQobSwgYykgICAgICAgICAobSA8PCA4IHwgYykKKwordHlwZWRlZiBlbnVtIHsKKwlkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV8wID0gZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfMCwJLyogQ2hhbm5lbCBwcmlvcml0eSAwLiBMb3dlc3QgcHJpb3JpdHkgRE1BIGNoYW5uZWwgKi8KKwlkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV8xID0gZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfMSwJLyogQ2hhbm5lbCBwcmlvcml0eSAxICovCisJZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfMiA9IGRtYWNId19SRUdfQ0ZHX0xPX0NIX1BSSU9SSVRZXzIsCS8qIENoYW5uZWwgcHJpb3JpdHkgMiAqLworCWRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzMgPSBkbWFjSHdfUkVHX0NGR19MT19DSF9QUklPUklUWV8zLAkvKiBDaGFubmVsIHByaW9yaXR5IDMgKi8KKwlkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV80ID0gZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfNCwJLyogQ2hhbm5lbCBwcmlvcml0eSA0ICovCisJZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNSA9IGRtYWNId19SRUdfQ0ZHX0xPX0NIX1BSSU9SSVRZXzUsCS8qIENoYW5uZWwgcHJpb3JpdHkgNSAqLworCWRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzYgPSBkbWFjSHdfUkVHX0NGR19MT19DSF9QUklPUklUWV82LAkvKiBDaGFubmVsIHByaW9yaXR5IDYgKi8KKwlkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83ID0gZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfNwkvKiBDaGFubmVsIHByaW9yaXR5IDcuIEhpZ2hlc3QgcHJpb3JpdHkgRE1BIGNoYW5uZWwgKi8KK30gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfZTsKKworLyogU291cmNlIGRlc3RpbmF0aW9uIG1hc3RlciBpbnRlcmZhY2UgKi8KK3R5cGVkZWYgZW51bSB7CisJZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzEgPSBkbWFjSHdfUkVHX0NUTF9TTVNfMSwJLyogU291cmNlIERNQSBtYXN0ZXIgaW50ZXJmYWNlIDEgKi8KKwlkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMiA9IGRtYWNId19SRUdfQ1RMX1NNU18yLAkvKiBTb3VyY2UgRE1BIG1hc3RlciBpbnRlcmZhY2UgMiAqLworCWRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8xID0gZG1hY0h3X1JFR19DVExfRE1TXzEsCS8qIERlc3RpbmF0aW9uIERNQSBtYXN0ZXIgaW50ZXJmYWNlIDEgKi8KKwlkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMiA9IGRtYWNId19SRUdfQ1RMX0RNU18yCS8qIERlc3RpbmF0aW9uIERNQSBtYXN0ZXIgaW50ZXJmYWNlIDIgKi8KK30gZG1hY0h3X01BU1RFUl9JTlRFUkZBQ0VfZTsKKwordHlwZWRlZiBlbnVtIHsKKwlkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzggPSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfOCwJLyogU291cmNlIDggYml0ICAoMSBieXRlKSBwZXIgdHJhbnNhY3Rpb24gKi8KKwlkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzE2ID0gZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIXzE2LAkvKiBTb3VyY2UgMTYgYml0ICgyIGJ5dGUpIHBlciB0cmFuc2FjdGlvbiAqLworCWRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfMzIgPSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfMzIsCS8qIFNvdXJjZSAzMiBiaXQgKDQgYnl0ZSkgcGVyIHRyYW5zYWN0aW9uICovCisJZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF82NCA9IGRtYWNId19SRUdfQ1RMX1NSQ19UUl9XSURUSF82NCwJLyogU291cmNlIDY0IGJpdCAoOCBieXRlKSBwZXIgdHJhbnNhY3Rpb24gKi8KKwlkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzggPSBkbWFjSHdfUkVHX0NUTF9EU1RfVFJfV0lEVEhfOCwJLyogRGVzdGluYXRpb24gOCBiaXQgICgxIGJ5dGUpIHBlciB0cmFuc2FjdGlvbiAqLworCWRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfMTYgPSBkbWFjSHdfUkVHX0NUTF9EU1RfVFJfV0lEVEhfMTYsCS8qIERlc3RpbmF0aW9uIDE2IGJpdCAoMiBieXRlKSBwZXIgdHJhbnNhY3Rpb24gKi8KKwlkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzMyID0gZG1hY0h3X1JFR19DVExfRFNUX1RSX1dJRFRIXzMyLAkvKiBEZXN0aW5hdGlvbiAzMiBiaXQgKDQgYnl0ZSkgcGVyIHRyYW5zYWN0aW9uICovCisJZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF82NCA9IGRtYWNId19SRUdfQ1RMX0RTVF9UUl9XSURUSF82NAkvKiBEZXN0aW5hdGlvbiA2NCBiaXQgKDggYnl0ZSkgcGVyIHRyYW5zYWN0aW9uICovCit9IGRtYWNId19UUkFOU0FDVElPTl9XSURUSF9lOworCit0eXBlZGVmIGVudW0geworCWRtYWNId19TUkNfQlVSU1RfV0lEVEhfMCA9IGRtYWNId19SRUdfQ1RMX1NSQ19NU0laRV8wLAkvKiBTb3VyY2UgTm8gYnVyc3QgKi8KKwlkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzQgPSBkbWFjSHdfUkVHX0NUTF9TUkNfTVNJWkVfNCwJLyogU291cmNlIDQgIFggZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIX3h4eCBieXRlcyBwZXIgYnVyc3QgKi8KKwlkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzggPSBkbWFjSHdfUkVHX0NUTF9TUkNfTVNJWkVfOCwJLyogU291cmNlIDggIFggZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIX3h4eCBieXRlcyBwZXIgYnVyc3QgKi8KKwlkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzE2ID0gZG1hY0h3X1JFR19DVExfU1JDX01TSVpFXzE2LAkvKiBTb3VyY2UgMTYgWCBkbWFjSHdfVFJBTlNBQ1RJT05fV0lEVEhfeHh4IGJ5dGVzIHBlciBidXJzdCAqLworCWRtYWNId19EU1RfQlVSU1RfV0lEVEhfMCA9IGRtYWNId19SRUdfQ1RMX0RTVF9NU0laRV8wLAkvKiBEZXN0aW5hdGlvbiBObyBidXJzdCAqLworCWRtYWNId19EU1RfQlVSU1RfV0lEVEhfNCA9IGRtYWNId19SRUdfQ1RMX0RTVF9NU0laRV80LAkvKiBEZXN0aW5hdGlvbiA0ICBYIGRtYWNId19UUkFOU0FDVElPTl9XSURUSF94eHggYnl0ZXMgcGVyIGJ1cnN0ICovCisJZG1hY0h3X0RTVF9CVVJTVF9XSURUSF84ID0gZG1hY0h3X1JFR19DVExfRFNUX01TSVpFXzgsCS8qIERlc3RpbmF0aW9uIDggIFggZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIX3h4eCBieXRlcyBwZXIgYnVyc3QgKi8KKwlkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzE2ID0gZG1hY0h3X1JFR19DVExfRFNUX01TSVpFXzE2CS8qIERlc3RpbmF0aW9uIDE2IFggZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIX3h4eCBieXRlcyBwZXIgYnVyc3QgKi8KK30gZG1hY0h3X0JVUlNUX1dJRFRIX2U7CisKK3R5cGVkZWYgZW51bSB7CisJZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX01FTSA9IGRtYWNId19SRUdfQ1RMX1RURkNfTU1fRE1BQywJLyogTWVtb3J5IHRvIG1lbW9yeSB0cmFuc2ZlciAqLworCWRtYWNId19UUkFOU0ZFUl9UWVBFX1BFUklQSEVSQUxfVE9fTUVNID0gZG1hY0h3X1JFR19DVExfVFRGQ19QTV9ETUFDLAkvKiBQZXJpcGhlcmFsIHRvIG1lbW9yeSB0cmFuc2ZlciAqLworCWRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMID0gZG1hY0h3X1JFR19DVExfVFRGQ19NUF9ETUFDLAkvKiBNZW1vcnkgdG8gcGVyaXBoZXJhbCB0cmFuc2ZlciAqLworCWRtYWNId19UUkFOU0ZFUl9UWVBFX1BFUklQSEVSQUxfVE9fUEVSSVBIRVJBTCA9IGRtYWNId19SRUdfQ1RMX1RURkNfUFBfRE1BQwkvKiBQZXJpcGhlcmFsIHRvIHBlcmlwaGVyYWwgdHJhbnNmZXIgKi8KK30gZG1hY0h3X1RSQU5TRkVSX1RZUEVfZTsKKwordHlwZWRlZiBlbnVtIHsKKwlkbWFjSHdfVFJBTlNGRVJfTU9ERV9QRVJSRVFVRVNULAkvKiBCbG9jayB0cmFuc2ZlciBwZXIgRE1BIHJlcXVlc3QgKi8KKwlkbWFjSHdfVFJBTlNGRVJfTU9ERV9DT05USU5VT1VTLAkvKiBDb250aW51b3VzIHRyYW5zZmVyIG9mIHN0cmVhbWluZyBkYXRhICovCisJZG1hY0h3X1RSQU5TRkVSX01PREVfUEVSSU9ESUMJLyogUGVyaW9kaWMgdHJhbnNmZXIgb2Ygc3RyZWFtaW5nIGRhdGEgKi8KK30gZG1hY0h3X1RSQU5TRkVSX01PREVfZTsKKwordHlwZWRlZiBlbnVtIHsKKwlkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DID0gZG1hY0h3X1JFR19DVExfU0lOQ19JTkMsCS8qIEluY3JlbWVudCBzb3VyY2UgYWRkcmVzcyBhZnRlciBldmVyeSB0cmFuc2FjdGlvbiAqLworCWRtYWNId19TUkNfQUREUkVTU19VUERBVEVfTU9ERV9ERUMgPSBkbWFjSHdfUkVHX0NUTF9TSU5DX0RFQywJLyogRGVjcmVtZW50IHNvdXJjZSBhZGRyZXNzIGFmdGVyIGV2ZXJ5IHRyYW5zYWN0aW9uICovCisJZG1hY0h3X0RTVF9BRERSRVNTX1VQREFURV9NT0RFX0lOQyA9IGRtYWNId19SRUdfQ1RMX0RJTkNfSU5DLAkvKiBJbmNyZW1lbnQgZGVzdGluYXRpb24gYWRkcmVzcyBhZnRlciBldmVyeSB0cmFuc2FjdGlvbiAqLworCWRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9ERUMgPSBkbWFjSHdfUkVHX0NUTF9ESU5DX0RFQywJLyogRGVjcmVtZW50IGRlc3RpbmF0aW9uIGFkZHJlc3MgYWZ0ZXIgZXZlcnkgdHJhbnNhY3Rpb24gKi8KKwlkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfTkMgPSBkbWFjSHdfUkVHX0NUTF9TSU5DX05DLAkvKiBObyBjaGFuZ2UgaW4gc291cmNlIGFkZHJlc3MgYWZ0ZXIgZXZlcnkgdHJhbnNhY3Rpb24gKi8KKwlkbWFjSHdfRFNUX0FERFJFU1NfVVBEQVRFX01PREVfTkMgPSBkbWFjSHdfUkVHX0NUTF9ESU5DX05DCS8qIE5vIGNoYW5nZSBpbiBkZXN0aW5hdGlvbiBhZGRyZXNzIGFmdGVyIGV2ZXJ5IHRyYW5zYWN0aW9uICovCit9IGRtYWNId19BRERSRVNTX1VQREFURV9NT0RFX2U7CisKK3R5cGVkZWYgZW51bSB7CisJZG1hY0h3X0ZMT1dfQ09OVFJPTF9ETUEsCS8qIERNQSB3b3JraW5nIGFzIGZsb3cgY29udHJvbGxlciAoZGVmYXVsdCkgKi8KKwlkbWFjSHdfRkxPV19DT05UUk9MX1BFUklQSEVSQUwJLyogUGVyaXBoZXJhbCB3b3JraW5nIGFzIGZsb3cgY29udHJvbGxlciAqLworfSBkbWFjSHdfRkxPV19DT05UUk9MX2U7CisKK3R5cGVkZWYgZW51bSB7CisJZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19CVVNZLAkvKiBETUEgVHJhbnNmZXIgb25nb2luZyAqLworCWRtYWNId19UUkFOU0ZFUl9TVEFUVVNfRE9ORSwJLyogRE1BIFRyYW5zZmVyIGNvbXBsZXRlZCAqLworCWRtYWNId19UUkFOU0ZFUl9TVEFUVVNfRVJST1IJLyogRE1BIFRyYW5zZmVyIGVycm9yICovCit9IGRtYWNId19UUkFOU0ZFUl9TVEFUVVNfZTsKKwordHlwZWRlZiBlbnVtIHsKKwlkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCS8qIEludGVycnVwdCBkaXNhYmxlICAqLworCWRtYWNId19JTlRFUlJVUFRfRU5BQkxFCS8qIEludGVycnVwdCBlbmFibGUgKi8KK30gZG1hY0h3X0lOVEVSUlVQVF9lOworCit0eXBlZGVmIGVudW0geworCWRtYWNId19JTlRFUlJVUFRfU1RBVFVTX05PTkUgPSAweDAsCS8qIE5vIERNQSBpbnRlcnJ1cHQgKi8KKwlkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19UUkFOUyA9IDB4MSwJLyogRW5kIG9mIERNQSB0cmFuc2ZlciBpbnRlcnJ1cHQgKi8KKwlkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19CTE9DSyA9IDB4MiwJLyogRW5kIG9mIGJsb2NrIHRyYW5zZmVyIGludGVycnVwdCAqLworCWRtYWNId19JTlRFUlJVUFRfU1RBVFVTX0VSUk9SID0gMHg0CS8qIEVycm9yIGludGVycnVwdCAqLworfSBkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19lOworCit0eXBlZGVmIGVudW0geworCWRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9DSEFOTkVMX05VTSwJLyogTnVtYmVyIG9mIERNQSBjaGFubmVsICovCisJZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX0NIQU5ORUxfTUFYX0JMT0NLX1NJWkUsCS8qIE1heGltdW0gY2hhbm5lbCBidXJzdCBzaXplICovCisJZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX01BU1RFUl9JTlRGX05VTSwJLyogTnVtYmVyIG9mIERNQSBtYXN0ZXIgaW50ZXJmYWNlICovCisJZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX0NIQU5ORUxfQlVTX1dJRFRILAkvKiBDaGFubmVsIERhdGEgYnVzIHdpZHRoICovCisJZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX0NIQU5ORUxfRklGT19TSVpFCS8qIENoYW5uZWwgRklGTyBzaXplICovCit9IGRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9lOworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZG1hY0h3X0hBTkRMRV90OwkvKiBETUEgY2hhbm5lbCBoYW5kbGUgKi8KK3R5cGVkZWYgdWludDMyX3QgZG1hY0h3X0lEX3Q7CS8qIERNQSBjaGFubmVsIElkLiAgTXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJCQkJICAgImRtYWNId19NQUtFX0NIQU5ORUxfSUQiIG1hY3JvCisJCQkJICovCisvKiBETUEgY2hhbm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50MzJfdCBzcmNQZXJpcGhlcmFsUG9ydDsJLyogU291cmNlIHBlcmlwaGVyYWwgcG9ydCAqLworCXVpbnQzMl90IGRzdFBlcmlwaGVyYWxQb3J0OwkvKiBEZXN0aW5hdGlvbiBwZXJpcGhlcmFsIHBvcnQgKi8KKwl1aW50MzJfdCBzcmNTdGF0dXNSZWdpc3RlckFkZHJlc3M7CS8qIFNvdXJjZSBzdGF0dXMgcmVnaXN0ZXIgYWRkcmVzcyAqLworCXVpbnQzMl90IGRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzczsJLyogRGVzdGluYXRpb24gc3RhdHVzIHJlZ2lzdGVyIGFkZHJlc3Mgb2YgdHlwZSAgKi8KKworCXVpbnQzMl90IHNyY0dhdGhlcldpZHRoOwkvKiBOdW1iZXIgb2YgYnl0ZXMgZ2F0aGVyZWQgYmVmb3JlIHN1Y2Nlc3NpdmUgZ2F0aGVyIG9wZWFyYXRpb24gKi8KKwl1aW50MzJfdCBzcmNHYXRoZXJKdW1wOwkvKiBOdW1iZXIgb2YgYnl0ZXMganVtcHBlZCBiZWZvcmUgc3VjY2Vzc2l2ZSBnYXRoZXIgb3BlYXJhdGlvbiAqLworCXVpbnQzMl90IGRzdFNjYXR0ZXJXaWR0aDsJLyogTnVtYmVyIG9mIGJ5dGVzIHNhY2F0dGVyZWQgYmVmb3JlIHN1Y2Nlc3NpdmUgc2NhdHRlciBvcGVhcmF0aW9uICovCisJdWludDMyX3QgZHN0U2NhdHRlckp1bXA7CS8qIE51bWJlciBvZiBieXRlcyBqdW1wcGVkICBiZWZvcmUgc3VjY2Vzc2l2ZSBzY2F0dGVyIG9wZWFyYXRpb24gKi8KKwl1aW50MzJfdCBtYXhEYXRhUGVyQmxvY2s7CS8qIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkIHBlciBibG9jay9kZXNjcnB0b3IuCisJCQkJCSAgIDAgPSBNYXhpbXVtIHBvc3NpYmxlLgorCQkJCQkgKi8KKworCWRtYWNId19BRERSRVNTX1VQREFURV9NT0RFX2Ugc3JjVXBkYXRlOwkvKiBTb3VyY2UgYWRkcmVzcyB1cGRhdGUgbW9kZSAqLworCWRtYWNId19BRERSRVNTX1VQREFURV9NT0RFX2UgZHN0VXBkYXRlOwkvKiBEZXN0aW5hdGlvbiBhZGRyZXNzIHVwZGF0ZSBtb2RlICovCisJZG1hY0h3X1RSQU5TRkVSX1RZUEVfZSB0cmFuc2ZlclR5cGU7CS8qIERNQSB0cmFuc2ZlciB0eXBlICAqLworCWRtYWNId19UUkFOU0ZFUl9NT0RFX2UgdHJhbnNmZXJNb2RlOwkvKiBETUEgdHJhbnNmZXIgbW9kZSAqLworCWRtYWNId19NQVNURVJfSU5URVJGQUNFX2Ugc3JjTWFzdGVySW50ZXJmYWNlOwkvKiBETUEgc291cmNlIGludGVyZmFjZSAgKi8KKwlkbWFjSHdfTUFTVEVSX0lOVEVSRkFDRV9lIGRzdE1hc3RlckludGVyZmFjZTsJLyogRE1BIGRlc3RpbmF0aW9uIGludGVyZmFjZSAqLworCWRtYWNId19UUkFOU0FDVElPTl9XSURUSF9lIHNyY01heFRyYW5zYWN0aW9uV2lkdGg7CS8qIFNvdXJjZSB0cmFuc2FjdGlvbiB3aWR0aCAgICovCisJZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIX2UgZHN0TWF4VHJhbnNhY3Rpb25XaWR0aDsJLyogRGVzdGluYXRpb24gdHJhbnNhY3Rpb24gd2lkdGggKi8KKwlkbWFjSHdfQlVSU1RfV0lEVEhfZSBzcmNNYXhCdXJzdFdpZHRoOwkvKiBTb3VyY2UgYnVyc3Qgd2lkdGggKi8KKwlkbWFjSHdfQlVSU1RfV0lEVEhfZSBkc3RNYXhCdXJzdFdpZHRoOwkvKiBEZXN0aW5hdGlvbiBidXJzdCB3aWR0aCAqLworCWRtYWNId19JTlRFUlJVUFRfZSBibG9ja1RyYW5zZmVySW50ZXJydXB0OwkvKiBCbG9jayB0cnNuYWZlciBpbnRlcnJ1cHQgKi8KKwlkbWFjSHdfSU5URVJSVVBUX2UgY29tcGxldGVUcmFuc2ZlckludGVycnVwdDsJLyogQ29tcGxldGUgRE1BIHRyc25hZmVyIGludGVycnVwdCAqLworCWRtYWNId19JTlRFUlJVUFRfZSBlcnJvckludGVycnVwdDsJLyogRXJyb3IgaW50ZXJydXB0ICovCisJZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfZSBjaGFubmVsUHJpb3JpdHk7CS8qIENoYW5uZWwgcHJpb3JpdHkgKi8KKwlkbWFjSHdfRkxPV19DT05UUk9MX2UgZmxvd0NvbnRyb2xlcjsJLyogRGF0YSBmbG93IGNvbnRyb2xsZXIgKi8KK30gZG1hY0h3X0NPTkZJR190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgSW5pdGlhbGl6ZXMgRE1BCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIERNQSBDU1AgZHJpdmVyCisqCisqICBAbm90ZQorKiAgICAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIGFueSBETUEgY2hhbm5lbAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfaW5pdERtYSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEV4aXQgZnVuY3Rpb24gZm9yICBETUEKKyoKKyogIFRoaXMgZnVuY3Rpb24gaXNvbGF0ZXMgRE1BIGZyb20gdGhlIHN5c3RlbQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfZXhpdERtYSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldHMgYSBoYW5kbGUgdG8gYSBETUEgY2hhbm5lbAorKgorKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgaGFuZGxlLCByZXByZXNlbnRpbmcgYSBjb250cm9sIGJsb2NrIG9mIGEgcGFydGljdWxhciBETUEgY2hhbm5lbAorKgorKiAgQHJldHVybiAgLTEgICAgICAgLSBPbiBGYWlsdXJlCisqICAgICAgICAgICAgaGFuZGxlICAtIE9uIFN1Y2Nlc3MsIHJlcHJlc2VudGluZyBhIGNoYW5uZWwgY29udHJvbCBibG9jaworKgorKiAgQG5vdGUKKyogICAgIE5vbmUgIENoYW5uZWwgSUQgbXVzdCBiZSBjcmVhdGVkIHVzaW5nICJkbWFjSHdfTUFLRV9DSEFOTkVMX0lEIiBtYWNybworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZG1hY0h3X0hBTkRMRV90IGRtYWNId19nZXRDaGFubmVsSGFuZGxlKGRtYWNId19JRF90IGNoYW5uZWxJZAkvKiBbIElOIF0gRE1BIENoYW5uZWwgSWQgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgSW5pdGlhbGl6ZXMgYSBETUEgY2hhbm5lbCBmb3IgdXNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFuZCByZXNldHMgYSBETUEgY2hhbm5lbCBmb3IgdXNlCisqCisqICBAcmV0dXJuICAtMSAgICAgLSBPbiBGYWlsdXJlCisqICAgICAgICAgICAgMCAgICAgLSBPbiBTdWNjZXNzCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGRtYWNId19pbml0Q2hhbm5lbChkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIEVzdGltYXRlcyBudW1iZXIgb2YgZGVzY3JpcHRvciBuZWVkZWQgdG8gcGVyZm9ybSBjZXJ0YWluIERNQSB0cmFuc2ZlcgorKgorKgorKiAgQHJldHVybiAgT24gZmFpbHVyZSA6IC0xCisqICAgICAgICAgICBPbiBzdWNjZXNzIDogTnVtYmVyIG9mIGRlc2NyaXB0b3IgY291bnQKKyoKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkbWFjSHdfY2FsY3VsYXRlRGVzY3JpcHRvckNvdW50KGRtYWNId19DT05GSUdfdCAqcENvbmZpZywJLyogICBbIElOIF0gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworCQkJCSAgICB2b2lkICpwU3JjQWRkciwJLyogICBbIElOIF0gU291cmNlIChQZXJpcGhlcmFsL01lbW9yeSkgYWRkcmVzcyAqLworCQkJCSAgICB2b2lkICpwRHN0QWRkciwJLyogICBbIElOIF0gRGVzdGluYXRpb24gKFBlcmlwaGVyYWwvTWVtb3J5KSBhZGRyZXNzICovCisJCQkJICAgIHNpemVfdCBkYXRhTGVuCS8qICAgWyBJTiBdIERhdGEgbGVuZ3RoIGluIGJ5dGVzICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEluaXRpYWxpemVzIGRlc2NyaXB0b3IgcmluZworKgorKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluaXRpYWxpemVzIHRoZSBkZXNjcmlwdG9yIHJpbmcgb2YgYSBETUEgY2hhbm5lbAorKgorKgorKiAgQHJldHVybiAgIC0xIC0gT24gZmFpbHVyZQorKiAgICAgICAgICAgICAwIC0gT24gc3VjY2VzcworKiAgQG5vdGUKKyogICAgIC0gImxlbiIgcGFyYW1ldGVyIHNob3VsZCBiZSBvYnRhaW5lZCBmcm9tICJkbWFjSHdfZGVzY3JpcHRvckxlbiIKKyogICAgIC0gRGVzY3JpcHRvciBidWZmZXIgTVVTVCBiZSAzMiBiaXQgYWxpZ25lZCBhbmQgdW5jYWNoZWQgYXMgaXQKKyogICAgICAgaXMgYWNjZXNzZWQgYnkgQVJNIGFuZCBETUEKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkbWFjSHdfaW5pdERlc2NyaXB0b3Iodm9pZCAqcERlc2NyaXB0b3JWaXJ0LAkvKiAgWyBJTiBdIFZpcnR1YWwgYWRkcmVzcyBvZiB1bmNhaGNlZCBidWZmZXIgYWxsb2NhdGVkIHRvIGZvcm0gZGVzY3JpcHRvciByaW5nICovCisJCQkgIHVpbnQzMl90IGRlc2NyaXB0b3JQaHlBZGRyLAkvKiAgWyBJTiBdIFBoeXNpY2FsIGFkZHJlc3Mgb2YgcERlc2NyaXB0b3JWaXJ0IChkZXNjcmlwdG9yIGJ1ZmZlcikgKi8KKwkJCSAgdWludDMyX3QgbGVuLAkvKiAgWyBJTiBdIFNpemUgb2YgdGhlIHBCdWYgKi8KKwkJCSAgdWludDMyX3QgbnVtCS8qICBbIElOIF0gTnVtYmVyIG9mIGRlc2NyaXB0b3IgaW4gdGhlIHJpbmcgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICBGaW5kcyBhbW91bnQgb2YgbWVtb3J5IHJlcXVpcmVkIHRvIGZvcm0gYSBkZXNjcmlwdG9yIHJpbmcKKyoKKyoKKyogIEByZXR1cm4gICBOdW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgdG8gZm9ybSBhIGRlc2NyaXB0b3IgcmluZworKgorKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IGRtYWNId19kZXNjcmlwdG9yTGVuKHVpbnQzMl90IGRlc2NDbnQJLyogIFsgSU4gXSBOdW1iZXIgb2YgZGVzY3JpcHRvciBpbiB0aGUgcmluZyAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBDb25maWd1cmUgRE1BIGNoYW5uZWwKKyoKKyogIEByZXR1cm4gIDAgIDogT24gc3VjY2VzcworKiAgICAgICAgICAgLTEgOiBPbiBmYWlsdXJlCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X2NvbmZpZ0NoYW5uZWwoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgICovCisJCQkgZG1hY0h3X0NPTkZJR190ICpwQ29uZmlnCS8qICAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IGRlc2NyaXB0b3JzIGZvciBrbm93biBkYXRhIGxlbmd0aAorKgorKiAgV2hlbiBETUEgaGFzIHRvIHdvcmsgYXMgYSBmbG93IGNvbnRyb2xsZXIsIHRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlCisqICBkZXNjcmlwdG9yIGNoYWluIHRvIHRyYW5zZmVyIGRhdGEKKyoKKyogIGZyb206CisqICAgICAgICAgIC0gTWVtb3J5IHRvIG1lbW9yeQorKiAgICAgICAgICAtIFBlcmlwaGVyYWwgdG8gbWVtb3J5CisqICAgICAgICAgIC0gTWVtb3J5IHRvIFBlcmlwaGVyYWwKKyogICAgICAgICAgLSBQZXJpcGhlcmFsIHRvIFBlcmlwaGVyYWwKKyoKKyogIEByZXR1cm4gICAtMSAtIE9uIGZhaWx1cmUKKyogICAgICAgICAgICAgMCAtIE9uIHN1Y2Nlc3MKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkbWFjSHdfc2V0RGF0YURlc2NyaXB0b3IoZG1hY0h3X0NPTkZJR190ICpwQ29uZmlnLAkvKiAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCSAgICAgdm9pZCAqcERlc2NyaXB0b3IsCS8qICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgICovCisJCQkgICAgIHZvaWQgKnBTcmNBZGRyLAkvKiAgWyBJTiBdIFNvdXJjZSAoUGVyaXBoZXJhbC9NZW1vcnkpIGFkZHJlc3MgKi8KKwkJCSAgICAgdm9pZCAqcERzdEFkZHIsCS8qICBbIElOIF0gRGVzdGluYXRpb24gKFBlcmlwaGVyYWwvTWVtb3J5KSBhZGRyZXNzICovCisJCQkgICAgIHNpemVfdCBkYXRhTGVuCS8qICBbIElOIF0gTGVuZ3RoIGluIGJ5dGVzICAgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgSW5kaWNhdGVzIHdoZXRoZXIgRE1BIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzIG9yIGNvbXBsZXRlZAorKgorKiAgQHJldHVybiAgIERNQSB0cmFuc2ZlciBzdGF0dXMKKyogICAgICAgICAgZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19CVVNZOiAgICAgICAgIERNQSBUcmFuc2ZlciBvbmdvaW5nCisqICAgICAgICAgIGRtYWNId19UUkFOU0ZFUl9TVEFUVVNfRE9ORTogICAgICAgICBETUEgVHJhbnNmZXIgY29tcGxldGVkCisqICAgICAgICAgIGRtYWNId19UUkFOU0ZFUl9TVEFUVVNfRVJST1I6ICAgICAgICBETUEgVHJhbnNmZXIgZXJyb3IKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RtYWNId19UUkFOU0ZFUl9TVEFUVVNfZSBkbWFjSHdfdHJhbnNmZXJDb21wbGV0ZWQoZG1hY0h3X0hBTkRMRV90IGhhbmRsZQkvKiAgIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBkZXNjcmlwdG9yIGNhcnJ5aW5nIGNvbnRyb2wgaW5mb3JtYXRpb24KKyoKKyogIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRvIHNlbmQgc3BlY2lmaWMgY29udHJvbCBpbmZvcm1hdGlvbiB0byB0aGUgZGV2aWNlCisqICB1c2luZyB0aGUgRE1BIGNoYW5uZWwKKyoKKyoKKyogIEByZXR1cm4gIC0xIC0gT24gZmFpbHVyZQorKiAgICAgICAgICAgIDAgLSBPbiBzdWNjZXNzCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGRtYWNId19zZXRDb250cm9sRGVzY3JpcHRvcihkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICBbIElOIF0gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworCQkJCXZvaWQgKnBEZXNjcmlwdG9yLAkvKiAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICAqLworCQkJCXVpbnQzMl90IGN0bEFkZHJlc3MsCS8qICBbIElOIF0gQWRkcmVzcyBvZiB0aGUgZGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIgICovCisJCQkJdWludDMyX3QgY29udHJvbAkvKiAgWyBJTiBdIERldmljZSBjb250cm9sIGluZm9ybWF0aW9uICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFJlYWQgZGF0YSBETUEgdHJhbnNmZXJyZWQgdG8gbWVtb3J5CisqCisqICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBkYXRhIHRoYXQgaGFzIGJlZW4gRE1BZWQgdG8gbWVtb3J5IHdoaWxlIHRyYW5zZmVyaW5nIGZyb206CisqICAgICAgICAgIC0gTWVtb3J5IHRvIG1lbW9yeQorKiAgICAgICAgICAtIFBlcmlwaGVyYWwgdG8gbWVtb3J5CisqCisqICBAcmV0dXJuICAwIC0gTm8gbW9yZSBkYXRhIGlzIGF2YWlsYWJsZSB0byByZWFkCisqICAgICAgICAgICAxIC0gTW9yZSBkYXRhIG1pZ2h0IGJlIGF2YWlsYWJsZSB0byByZWFkCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X3JlYWRUcmFuc2ZlcnJlZERhdGEoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgICAgKi8KKwkJCSAgICAgICBkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICBbIElOIF0gIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCSAgICAgICB2b2lkICpwRGVzY3JpcHRvciwJLyogIFsgSU4gXSBEZXNjcmlwdG9yIGJ1ZmZlciAgKi8KKwkJCSAgICAgICB2b2lkICoqcHBCYnVmLAkvKiAgWyBPVVQgXSBEYXRhIHJlY2VpdmVkICovCisJCQkgICAgICAgc2l6ZV90ICpwTGxlbgkvKiAgWyBPVVQgXSBMZW5ndGggb2YgdGhlIGRhdGEgcmVjZWl2ZWQgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUHJlcGFyZXMgZGVzY3JpcHRvciByaW5nLCB3aGVuIHNvdXJjZSBwZXJpcGhlcmFsIHdvcmtpbmcgYXMgYSBmbG93IGNvbnRyb2xsZXIKKyoKKyogIFRoaXMgZnVuY3Rpb24gd2lsbCBmb3JtIHRoZSBkZXNjcmlwdG9yIHJpbmcgYnkgYWxsb2NhdGluZyBidWZmZXJzLCB3aGVuIHNvdXJjZSBwZXJpcGhlcmFsCisqICBoYXMgdG8gd29yayBhcyBhIGZsb3cgY29udHJvbGxlciB0byB0cmFuc2ZlciBkYXRhIGZyb206CisqICAgICAgICAgICAtIFBlcmlwaGVyYWwgdG8gbWVtb3J5LgorKgorKiAgQHJldHVybiAgLTEgLSBPbiBmYWlsdXJlCisqICAgICAgICAgICAgMCAtIE9uIHN1Y2Nlc3MKKyoKKyoKKyogIEBub3RlCisqICAgICBOb25lCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X3NldFZhcmlhYmxlRGF0YURlc2NyaXB0b3IoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgICAqLworCQkJCSAgICAgZG1hY0h3X0NPTkZJR190ICpwQ29uZmlnLAkvKiAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCQkgICAgIHZvaWQgKnBEZXNjcmlwdG9yLAkvKiAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICAqLworCQkJCSAgICAgdWludDMyX3Qgc3JjQWRkciwJLyogIFsgSU4gXSBTb3VyY2UgcGVyaXBoZXJhbCBhZGRyZXNzICovCisJCQkJICAgICB2b2lkICooKmZwQWxsb2MpIChpbnQgbGVuKSwJLyogIFsgSU4gXSBGdW5jdGlvbiBwb2ludGVyICB0aGF0IHByb3ZpZGVzIGRlc3RpbmF0aW9uIG1lbW9yeSAqLworCQkJCSAgICAgaW50IGxlbiwJLyogIFsgSU4gXSBOdW1iZXIgb2YgYnl0ZXMgImZwQWxsb2MiIHdpbGwgYWxsb2NhdGUgZm9yIGRlc3RpbmF0aW9uICovCisJCQkJICAgICBpbnQgbnVtCS8qICBbIElOIF0gTnVtYmVyIG9mIGRlc2NyaXB0b3IgdG8gc2V0ICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFByb2dyYW0gY2hhbm5lbCByZWdpc3RlciB0byBpbml0aWF0ZSB0cmFuc2ZlcgorKgorKiAgQHJldHVybiAgdm9pZAorKgorKgorKiAgQG5vdGUKKyogICAgIC0gRGVzY3JpcHRvciBidWZmZXIgTVVTVCBBTFdBWVMgYmUgZmx1c2hlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisqICAgICAtIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsc28gYmUgY2FsbGVkIGZyb20gSVNSIHRvIHByb2dyYW0gdGhlIGNoYW5uZWwgd2l0aAorKiAgICAgICBwZW5kaW5nIGRlc2NyaXB0b3JzCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYWNId19pbml0aWF0ZVRyYW5zZmVyKGRtYWNId19IQU5ETEVfdCBoYW5kbGUsCS8qICAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAqLworCQkJICAgICBkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCSAgICAgdm9pZCAqcERlc2NyaXB0b3IJLyogICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFJlc2V0cyBkZXNjcmlwdG9yIGNvbnRyb2wgaW5mb3JtYXRpb24KKyoKKyogIEByZXR1cm4gIHZvaWQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG1hY0h3X3Jlc2V0RGVzY3JpcHRvckNvbnRyb2wodm9pZCAqcERlc2NyaXB0b3IJLyogICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFByb2dyYW0gY2hhbm5lbCByZWdpc3RlciB0byBzdG9wIHRyYW5zZmVyCisqCisqICBFbnN1cmVzIHRoZSBjaGFubmVsIGlzIG5vdCBkb2luZyBhbnkgdHJhbnNmZXIgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYWNId19zdG9wVHJhbnNmZXIoZG1hY0h3X0hBTkRMRV90IGhhbmRsZQkvKiAgIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ2hlY2sgdGhlIGV4aXN0YW5jZSBvZiBwZW5kaW5nIGRlc2NyaXB0b3IKKyoKKyogIFRoaXMgZnVuY3Rpb24gY29uZmlybWVzIGlmIHRoZXJlIGlzIGFueSBwZW5kaW5nIGRlc2NyaXB0b3IgaW4gdGhlIGNoYWluCisqICB0byBwcm9ncmFtIHRoZSBjaGFubmVsCisqCisqICBAcmV0dXJuICAxIDogQ2hhbm5lbCBuZWVkIHRvIGJlIHByb2dyYW1tZWQgd2l0aCBwZW5kaW5nIGRlc2NyaXB0b3IKKyogICAgICAgICAgIDAgOiBObyBtb3JlIHBlbmRpbmcgZGVzY3JpcHRvciB0byBwcm9ncmFtZSB0aGUgY2hhbm5lbAorKgorKiAgQG5vdGUKKyogICAgIC0gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gSVNSIGluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcKKyogICAgICAgZGVzY3JpcHRvciB0byBwcm9ncmFtIHRoZSBjaGFubmVsLgorKgorKiAgICAgRXhhbXBsZToKKyoKKyogICAgIGRtYWNfaXNyICgpCisqICAgICB7CisqICAgICAgICAgLi4uCisqICAgICAgICAgaWYgKGRtYWNId19kZXNjcmlwdG9yUGVuZGluZyAoaGFuZGxlKSkKKyogICAgICAgICB7CisqICAgICAgICAgICAgZG1hY0h3X2luaXRpYXRlVHJhbnNmZXIgKGhhbmRsZSk7CisqICAgICAgICAgfQorKiAgICAgfQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordWludDMyX3QgZG1hY0h3X2Rlc2NyaXB0b3JQZW5kaW5nKGRtYWNId19IQU5ETEVfdCBoYW5kbGUsCS8qICAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAqLworCQkJCSAgdm9pZCAqcERlc2NyaXB0b3IJLyogICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGVhbGxvY2F0ZXMgc291cmNlIG9yIGRlc3RpbmF0aW9uIG1lbW9yeSwgYWxsb2NhdGVkCisqCisqICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgdG8gZGVhbGxvY2F0ZSBkYXRhIG1lbW9yeSB0aGF0IHdhcyBETUFlZCBzdWNjZXNzZnVsbHkKKyoKKyogIEByZXR1cm4gIC0xICAtIE9uIGZhaWx1cmUKKyogICAgICAgICAgICAwICAtIE9uIHN1Y2Nlc3MKKyoKKyogIEBub3RlCisqICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIE9OTFksIHdoZW4gc291cmNlIE9SIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgcG9pbnRpbmcKKyogICAgIHRvIGR5bmFtaWMgbWVtb3J5CisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X2ZyZWVNZW0oZG1hY0h3X0NPTkZJR190ICpwQ29uZmlnLAkvKiAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJICAgdm9pZCAqcERlc2NyaXB0b3IsCS8qICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgICovCisJCSAgIHZvaWQgKCpmcEZyZWUpICh2b2lkICopCS8qICBbIElOIF0gRnVuY3Rpb24gcG9pbnRlciB0byBmcmVlIGRhdGEgbWVtb3J5ICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENsZWFycyB0aGUgaW50ZXJydXB0CisqCisqICBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgRE1BIGNoYW5uZWwgc3BlY2lmaWMgaW50ZXJydXB0CisqCisqICBAcmV0dXJuICAgTi9BCisqCisqICBAbm90ZQorKiAgICAgTXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIGNvbnRleHQgb2YgSVNSCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYWNId19jbGVhckludGVycnVwdChkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBSZXR1cm5zIHRoZSBjYXVzZSBvZiBjaGFubmVsIHNwZWNpZmljIERNQSBpbnRlcnJ1cHQKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2F1c2Ugb2YgaW50ZXJydXB0CisqCisqICBAcmV0dXJuICBJbnRlcnJ1cHQgc3RhdHVzLCBlYWNoIGJpdCByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyB0eXBlIG9mIGludGVycnVwdAorKiAgICAgICAgICAgb2YgdHlwZSBkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19lCisqICBAbm90ZQorKiAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHVuZGVyIHRoZSBjb250ZXh0IG9mIElTUgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZG1hY0h3X0lOVEVSUlVQVF9TVEFUVVNfZSBkbWFjSHdfZ2V0SW50ZXJydXB0U3RhdHVzKGRtYWNId19IQU5ETEVfdCBoYW5kbGUJLyogIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEluZGVudGlmaWVzIGEgRE1BIGNoYW5uZWwgY2F1c2luZyBpbnRlcnJ1cHQKKyoKKyogIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgYSBjaGFubmVsIGNhdXNpbmcgaW50ZXJydXB0IG9mIHR5cGUgZG1hY0h3X0lOVEVSUlVQVF9TVEFUVVNfZQorKgorKiAgQHJldHVybiAgTlVMTCAgIDogTm8gY2hhbm5lbCBjYXVzaW5nIERNQSBpbnRlcnJ1cHQKKyogICAgICAgICAgICEgTlVMTCA6IEhhbmRsZSB0byBhIGNoYW5uZWwgY2F1c2luZyBETUEgaW50ZXJydXB0CisqICBAbm90ZQorKiAgICAgZG1hY0h3X2NsZWFySW50ZXJydXB0KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHZhbGlkIGhhbmRsZSBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RtYWNId19IQU5ETEVfdCBkbWFjSHdfZ2V0SW50ZXJydXB0U291cmNlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0cyBjaGFubmVsIHNwZWNpZmljIHVzZXIgZGF0YQorKgorKiAgVGhpcyBmdW5jdGlvbiBhc3NvY2lhdGVzIHVzZXIgZGF0YSB0byBhIHNwZWNpZiBETUEgY2hhbm5lbAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfc2V0Q2hhbm5lbFVzZXJEYXRhKGRtYWNId19IQU5ETEVfdCBoYW5kbGUsCS8qICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICAqLworCQkJICAgICAgIHZvaWQgKnVzZXJEYXRhCS8qICBbIElOIF0gVXNlciBkYXRhICAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXRzIGNoYW5uZWwgc3BlY2lmaWMgdXNlciBkYXRhCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdXNlciBkYXRhIHNwZWNpZmljIHRvIGEgRE1BIGNoYW5uZWwKKyoKKyogIEByZXR1cm4gICB1c2VyIGRhdGEKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgKmRtYWNId19nZXRDaGFubmVsVXNlckRhdGEoZG1hY0h3X0hBTkRMRV90IGhhbmRsZQkvKiAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGlzcGxheXMgY2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgYW5kIG90aGVyIGNvbnRyb2wgcGFyYW1ldGVycworKgorKgorKiAgQHJldHVybiAgdm9pZAorKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG1hY0h3X3ByaW50RGVidWdJbmZvKGRtYWNId19IQU5ETEVfdCBoYW5kbGUsCS8qICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICAqLworCQkJICAgdm9pZCAqcERlc2NyaXB0b3IsCS8qICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgICovCisJCQkgICBpbnQgKCpmcFByaW50KSAoY29uc3QgY2hhciAqLCAuLi4pCS8qICBbIElOIF0gUHJpbnQgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUHJvdmlkZXMgRE1BIGNvbnRyb2xsZXIgYXR0cmlidXRlcworKgorKgorKiAgQHJldHVybiAgRE1BIGNvbnRyb2xsZXIgYXR0cmlidXRlcworKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IGRtYWNId19nZXREbWFDb250cm9sbGVyQXR0cmlidXRlKGRtYWNId19IQU5ETEVfdCBoYW5kbGUsCS8qICBbIElOIF0gIERNQSBDaGFubmVsIGhhbmRsZSAgKi8KKwkJCQkJICBkbWFjSHdfQ09OVFJPTExFUl9BVFRSSUJfZSBhdHRyCS8qICBbIElOIF0gIERNQSBDb250cm9sZXIgYXR0cmlidXRlIG9mIHR5cGUgIGRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9lICovCisgICAgKTsKKworI2VuZGlmIC8qIF9ETUFDSFdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2Vycm5vLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTM1N2RkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2Vycm5vLmgKQEAgLTAsMCArMSwzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBDU1BfRVJSTk9fSAorI2RlZmluZSBDU1BfRVJSTk9fSAorCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgICBkZWZpbmVkKF9fS0VSTkVMX18pCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNlbGlmIGRlZmluZWQoQ1NQX1NJTVVMQVRJT04pCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZXJybm8uaD4KKyNlbHNlCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgVmFyaWFibGUgRXh0ZXJucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHVibGljIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbmRpZiAvKiBDU1BfRVJSTk9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2ludGNIdy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2ludGNIdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNjM5YzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvaW50Y0h3LmgKQEAgLTAsMCArMSw0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgaW50Y0h3LmgKKyoKKyogIEBicmllZiAgIGdlbmVyaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgQVBJCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JTlRDSFdfSAorI2RlZmluZSBfSU5UQ0hXX0gKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNsdWRlIDxtYWNoL2NzcC9pbnRjSHdfcmVnLmg+CisKKy8qIC0tLS0gUHVibGljIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRjSHdfaXJxX2Rpc2FibGUodm9pZCAqYmFzZXAsIHVpbnQzMl90IG1hc2spOworc3RhdGljIGlubGluZSB2b2lkIGludGNId19pcnFfZW5hYmxlKHZvaWQgKmJhc2VwLCB1aW50MzJfdCBtYXNrKTsKKworI2VuZGlmIC8qIF9JTlRDSFdfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvbW9kdWxlLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwZDJhNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9tb2R1bGUuaApAQCAtMCwwICsxLDMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDMgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgQ1NQX01PRFVMRV9ICisjZGVmaW5lIENTUF9NT0RVTEVfSAorCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgX19LRVJORUxfXworICAgICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNlbHNlCisgICAgI2RlZmluZSBFWFBPUlRfU1lNQk9MKHN5bWJvbCkKKyNlbmRpZgorCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgVmFyaWFibGUgRXh0ZXJucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHVibGljIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworI2VuZGlmIC8qIENTUF9NT0RVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL3JlZy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZjYwYmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvcmVnLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAZmlsZSAgICByZWcuaAorKgorKiAgQGJyaWVmICAgR2VuZXJpYyByZWdpc3RlciBkZWZpbnRpb25zIHVzZWQgaW4gQ1NQCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgQ1NQX1JFR19ICisjZGVmaW5lIENTUF9SRUdfSAorCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8Y3NwL3N0ZGludC5oPgorCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIF9fUkVHMzIoeCkgICAgICAoKigodm9sYXRpbGUgdWludDMyX3QgKikoeCkpKQorI2RlZmluZSBfX1JFRzE2KHgpICAgICAgKCooKHZvbGF0aWxlIHVpbnQxNl90ICopKHgpKSkKKyNkZWZpbmUgX19SRUc4KHgpICAgICAgICgqKCh2b2xhdGlsZSB1aW50OF90ICopICh4KSkpCisKKy8qIE1hY3JvcyB1c2VkIHRvIGRlZmluZSBhIHNlcXVlbmNlIG9mIHJlc2VydmVkIHJlZ2lzdGVycy4gVGhlIHN0YXJ0IC8gZW5kICovCisvKiBhcmUgYnl0ZSBvZmZzZXRzIGluIHRoZSBwYXJ0aWN1bGFyIHJlZ2lzdGVyIGRlZmluaXRpb24sIHdpdGggdGhlICJlbmQiICovCisvKiBiZWluZyB0aGUgb2Zmc2V0IG9mIHRoZSBuZXh0IHVuLXJlc2VydmVkIHJlZ2lzdGVyLiBFLmcuIGlmIG9mZnNldHMgKi8KKy8qIDB4MTAgdGhyb3VnaCB0byAweDFmIGFyZSByZXNlcnZlZCwgdGhlbiB0aGlzIHJlc2VydmVkIGFyZWEgY291bGQgYmUgKi8KKy8qIHNwZWNpZmllZCBhcyBmb2xsb3dzLiAqLworLyogIHR5cGVkZWYgc3RydWN0ICovCisvKiAgeyAqLworLyogICAgICB1aW50MzJfdCByZWcxOyAgICAgICAgICAgb2Zmc2V0IDB4MDAgKi8KKy8qICAgICAgdWludDMyX3QgcmVnMjsgICAgICAgICAgIG9mZnNldCAweDA0ICovCisvKiAgICAgIHVpbnQzMl90IHJlZzM7ICAgICAgICAgICBvZmZzZXQgMHgwOCAqLworLyogICAgICB1aW50MzJfdCByZWc0OyAgICAgICAgICAgb2Zmc2V0IDB4MGMgKi8KKy8qICAgICAgUkVHMzJfUlNWRCgweDEwLCAweDIwKTsgKi8KKy8qICAgICAgdWludDMyX3QgcmVnNTsgICAgICAgICAgIG9mZnNldCAweDIwICovCisvKiAgICAgIC4uLiAqLworLyogIH0gRVhBTVBMRV9SRUdfdDsgKi8KKyNkZWZpbmUgUkVHOF9SU1ZEKHN0YXJ0LCBlbmQpICAgdWludDhfdCByc3ZkXyMjc3RhcnRbKGVuZCAtIHN0YXJ0KSAvIHNpemVvZih1aW50OF90KV0KKyNkZWZpbmUgUkVHMTZfUlNWRChzdGFydCwgZW5kKSAgdWludDE2X3QgcnN2ZF8jI3N0YXJ0WyhlbmQgLSBzdGFydCkgLyBzaXplb2YodWludDE2X3QpXQorI2RlZmluZSBSRUczMl9SU1ZEKHN0YXJ0LCBlbmQpICB1aW50MzJfdCByc3ZkXyMjc3RhcnRbKGVuZCAtIHN0YXJ0KSAvIHNpemVvZih1aW50MzJfdCldCisKKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBOb3RlOiBXaGVuIHByb3RlY3RpbmcgbXVsdGlwbGUgc3RhdGVtZW50cywgdGhlIFJFR19MT0NBTF9JUlFfU0FWRSBhbmQgKi8KKy8qIFJFR19MT0NBTF9JUlFfUkVTVE9SRSBtdXN0IGJlIGVuY2xvc2VkIGluIHsgfSB0byBhbGxvdyB0aGUgICovCisvKiBmbGFncyB2YXJpYWJsZSB0byBiZSBkZWNsYXJlZCBsb2NhbGx5LiAqLworLyogZS5nLiAqLworLyogICAgc3RhdGVtZW50MTsgKi8KKy8qICAgIHsgKi8KKy8qICAgICAgIFJFR19MT0NBTF9JUlFfU0FWRTsgKi8KKy8qICAgICAgIDxtdWx0aXBsZSBzdGF0ZW1lbnRzIGhlcmU+ICovCisvKiAgICAgICBSRUdfTE9DQUxfSVJRX1JFU1RPUkU7ICovCisvKiAgICB9ICovCisvKiAgICBzdGF0ZW1lbnQyOyAqLworLyogICovCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKFNUQU5EQUxPTkUpCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjZGVmaW5lIFJFR19MT0NBTF9JUlFfU0FWRSAgICAgIEhXX0RFQ0xBUkVfU1BJTkxPQ0socmVnMzIpIFwKKwl1bnNpZ25lZCBsb25nIGZsYWdzOyBIV19JUlFfU0FWRShyZWczMiwgZmxhZ3MpCisKKyNkZWZpbmUgUkVHX0xPQ0FMX0lSUV9SRVNUT1JFICAgSFdfSVJRX1JFU1RPUkUocmVnMzIsIGZsYWdzKQorCisjZWxzZQorCisjZGVmaW5lIFJFR19MT0NBTF9JUlFfU0FWRQorI2RlZmluZSBSRUdfTE9DQUxfSVJRX1JFU1RPUkUKKworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWczMl9tb2RpZnlfYW5kKHZvbGF0aWxlIHVpbnQzMl90ICpyZWcsIHVpbnQzMl90IHZhbHVlKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwkqcmVnICY9IHZhbHVlOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlZzMyX21vZGlmeV9vcih2b2xhdGlsZSB1aW50MzJfdCAqcmVnLCB1aW50MzJfdCB2YWx1ZSkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJKnJlZyB8PSB2YWx1ZTsKKwlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWczMl9tb2RpZnlfbWFzayh2b2xhdGlsZSB1aW50MzJfdCAqcmVnLCB1aW50MzJfdCBtYXNrLAorCQkJCSAgICAgdWludDMyX3QgdmFsdWUpCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCSpyZWcgPSAoKnJlZyAmIG1hc2spIHwgdmFsdWU7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVnMzJfd3JpdGUodm9sYXRpbGUgdWludDMyX3QgKnJlZywgdWludDMyX3QgdmFsdWUpCit7CisJKnJlZyA9IHZhbHVlOworfQorCisjZW5kaWYgLyogQ1NQX1JFR19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3Avc2VjSHcuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9zZWNIdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDdlMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3Avc2VjSHcuaApAQCAtMCwwICsxLDY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgc2VjSHcuaAorKgorKiAgQGJyaWVmICAgRGVmaW5pdGlvbnMgZm9yIGFjY2Vzc2luZyBsb3cgbGV2ZWwgc2VjdXJpdHkgZmVhdHVyZXMKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgU0VDSFdfSAorI2RlZmluZSBTRUNIV19ICisKK3R5cGVkZWYgdm9pZCAoKnNlY0h3X0ZVTkNfdCkgKHZvaWQpOworCit0eXBlZGVmIGVudW0geworCXNlY0h3X01PREVfU0VDVVJFID0gMHgwLAkvKiBTd2l0Y2hlcyBwcm9jZXNzb3IgaW50byBzZWN1cmUgbW9kZSAqLworCXNlY0h3X01PREVfTk9OU0VDVVJFID0gMHgxCS8qIFN3aXRjaGVzIHByb2Nlc3NvciBpbnRvIG5vbi1zZWN1cmUgbW9kZSAqLworfSBzZWNId19NT0RFOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUmVxdWVzdGluZyB0byBleGVjdXRlIHRoZSBmdW5jdGlvbiBpbiBzZWN1cmUgbW9kZQorKgorKiAgVGhpcyBmdW5jdGlvbiByZXF1ZXN0cyB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gcnVuIGluIHNlY3VyZSBtb2RlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHNlY0h3X1J1blNlY3VyZShzZWNId19GVU5DX3QJLyogRnVuY3Rpb24gdG8gcnVuIGluIHNlY3VyZSBtb2RlICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldHMgdGhlICBtb2RlCisqCisqICBoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcHJvY2Vzc29yIG1vZGUgKHNlY3VyZS9ub24tc2VjdXJlKQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzZWNId19TZXRNb2RlKHNlY0h3X01PREUJLyogUHJvY2Vzc29yIG1vZGUgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IHRoZSBjdXJyZW50IG1vZGUKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0aWV2ZXMgdGhlIHByb2Nlc3NvciBtb2RlIChzZWN1cmUvbm9uLXNlY3VyZSkKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgc2VjSHdfR2V0TW9kZShzZWNId19NT0RFICopOworCisjZW5kaWYgLyogU0VDSFdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL3N0ZGludC5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL3N0ZGludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhODcxOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3Avc3RkaW50LmgKQEAgLTAsMCArMSwzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBDU1BfU1RESU5UX0gKKyNkZWZpbmUgQ1NQX1NURElOVF9ICisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworLyogLS0tLSBQdWJsaWMgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZW5kaWYgLyogQ1NQX1NURElOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3Avc3RyaW5nLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3Avc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5ZTQwMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9zdHJpbmcuaApAQCAtMCwwICsxLDM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDMgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworI2lmbmRlZiBDU1BfU1RSSU5HX0gKKyNkZWZpbmUgQ1NQX1NUUklOR19ICisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisgICAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjZWxzZQorICAgI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKy8qIC0tLS0gUHVibGljIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisjZW5kaWYgLyogQ1NQX1NUUklOR19IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC90bXJIdy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL3Rtckh3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyMzZkMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC90bXJIdy5oCkBAIC0wLDAgKzEsMjYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgdG1ySHcuaAorKgorKiAgQGJyaWVmICAgQVBJIGRlZmluaXRpb25zIGZvciBsb3cgbGV2ZWwgVGltZXIgZHJpdmVyCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9UTVJIV19ICisjZGVmaW5lIF9UTVJIV19ICisKKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisKK3R5cGVkZWYgdWludDMyX3QgdG1ySHdfSURfdDsJLyogVGltZXIgSUQgKi8KK3R5cGVkZWYgdWludDMyX3QgdG1ySHdfQ09VTlRfdDsJLyogVGltZXIgY291bnQgKi8KK3R5cGVkZWYgdWludDMyX3QgdG1ySHdfSU5URVJWQUxfdDsJLyogVGltZXIgaW50ZXJ2YWwgKi8KK3R5cGVkZWYgdWludDMyX3QgdG1ySHdfUkFURV90OwkvKiBUaW1lciBldmVudCAoY291bnQvaW50ZXJydXB0KSByYXRlICovCisKK3R5cGVkZWYgZW51bSB7CisJdG1ySHdfSU5URVJSVVBUX1NUQVRVU19TRVQsCS8qIEludGVycnVwdGVkICAqLworCXRtckh3X0lOVEVSUlVQVF9TVEFUVVNfVU5TRVQJLyogTm8gSW50ZXJydXB0ICovCit9IHRtckh3X0lOVEVSUlVQVF9TVEFUVVNfZTsKKwordHlwZWRlZiBlbnVtIHsKKwl0bXJId19DQVBBQklMSVRZX0NMT0NLLAkvKiBDbG9jayBzcGVlZCBpbiBISHogKi8KKwl0bXJId19DQVBBQklMSVRZX1JFU09MVVRJT04JLyogVGltZXIgcmVzb2x1dGlvbiBpbiBiaXRzICovCit9IHRtckh3X0NBUEFCSUxJVFlfZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCB0aW1lciBjYXBhYmlsaXR5CisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdmFyaW91cyBjYXBhYmlsaXRpZXMvYXR0cmlidXRlcyBvZiBhIHRpbWVyCisqCisqICBAcmV0dXJuICBOdW1lcmljIGNhcGFiaWxpdHkKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IHRtckh3X2dldFRpbWVyQ2FwYWJpbGl0eSh0bXJId19JRF90IHRpbWVySWQsCS8qICBbIElOIF0gVGltZXIgSWQgKi8KKwkJCQkgIHRtckh3X0NBUEFCSUxJVFlfZSBjYXBhYmlsaXR5CS8qICBbIElOIF0gVGltZXIgY2FwYWJpbGl0eSAqLworKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENvbmZpZ3VyZXMgYSBwZXJpb2RpYyB0aW1lciBpbiB0ZXJtcyBvZiB0aW1lciBpbnRlcnJ1cHQgcmF0ZQorKgorKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIHBlcmlvZGljIHRpbWVyIHRvIGdlbmVyYXRlIHNwZWNpZmljIG51bWJlciBvZgorKiAgdGltZXIgaW50ZXJydXB0IHBlciBzZWNvbmQKKyoKKyogIEByZXR1cm4gICBPbiBzdWNjZXNzOiBFZmZlY3RpdmUgdGltZXIgZnJlcXVlbmN5CisqICAgICAgICAgICAgT24gZmFpbHVyZTogMAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordG1ySHdfUkFURV90IHRtckh3X3NldFBlcmlvZGljVGltZXJSYXRlKHRtckh3X0lEX3QgdGltZXJJZCwJLyogIFsgSU4gXSBUaW1lciBJZCAqLworCQkJCQl0bXJId19SQVRFX3QgcmF0ZQkvKiAgWyBJTiBdIE51bWJlciBvZiB0aW1lciBpbnRlcnJ1cHQgcGVyIHNlY29uZCAqLworKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENvbmZpZ3VyZXMgYSBwZXJpb2RpYyB0aW1lciB0byBnZW5lcmF0ZSB0aW1lciBpbnRlcnJ1cHQgYWZ0ZXIKKyogICAgICAgICAgIGNlcnRhaW4gdGltZSBpbnRlcnZhbAorKgorKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIHBlcmlvZGljIHRpbWVyIHRvIGdlbmVyYXRlIHRpbWVyIGludGVycnVwdAorKiAgYWZ0ZXIgZXZlcnkgdGltZSBpbnRlcnZhbCBpbiBtaWxpc2Vjb25kCisqCisqICBAcmV0dXJuICAgT24gc3VjY2VzczogRWZmZWN0aXZlIGludGVydmFsIHNldCBpbiBtaWxpLXNlY29uZAorKiAgICAgICAgICAgIE9uIGZhaWx1cmU6IDAKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X0lOVEVSVkFMX3QgdG1ySHdfc2V0UGVyaW9kaWNUaW1lckludGVydmFsKHRtckh3X0lEX3QgdGltZXJJZCwJLyogIFsgSU4gXSBUaW1lciBJZCAqLworCQkJCQkJdG1ySHdfSU5URVJWQUxfdCBtc2VjCS8qICBbIElOIF0gSW50ZXJ2YWwgaW4gbWlsaS1zZWNvbmQgKi8KKyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBDb25maWd1cmVzIGEgcGVyaW9kaWMgdGltZXIgdG8gZ2VuZXJhdGUgdGltZXIgaW50ZXJydXB0IGp1c3Qgb25jZQorKiAgICAgICAgICAgYWZ0ZXIgY2VydGFpbiB0aW1lIGludGVydmFsCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGEgcGVyaW9kaWMgdGltZXIgdG8gZ2VuZXJhdGUgYSBzaW5nbGUgdGlja3MgYWZ0ZXIKKyogIGNlcnRhaW4gdGltZSBpbnRlcnZhbCBpbiBtaWxpc2Vjb25kCisqCisqICBAcmV0dXJuICAgT24gc3VjY2VzczogRWZmZWN0aXZlIGludGVydmFsIHNldCBpbiBtaWxpLXNlY29uZAorKiAgICAgICAgICAgIE9uIGZhaWx1cmU6IDAKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X0lOVEVSVkFMX3QgdG1ySHdfc2V0T25lc2hvdFRpbWVySW50ZXJ2YWwodG1ySHdfSURfdCB0aW1lcklkLAkvKiAgWyBJTiBdIFRpbWVyIElkICovCisJCQkJCSAgICAgICB0bXJId19JTlRFUlZBTF90IG1zZWMJLyogIFsgSU4gXSBJbnRlcnZhbCBpbiBtaWxpLXNlY29uZCAqLworKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENvbmZpZ3VyZXMgYSB0aW1lciB0byBydW4gYXMgYSBmcmVlIHJ1bm5pbmcgdGltZXIKKyoKKyogIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSB0aW1lciB0byBydW4gYXMgYSBmcmVlIHJ1bm5pbmcgdGltZXIKKyoKKyogIEByZXR1cm4gICBUaW1lciByZXNvbHV0aW9uIChjb3VudCAvIHNlYykKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X1JBVEVfdCB0bXJId19zZXRGcmVlUnVubmluZ1RpbWVyKHRtckh3X0lEX3QgdGltZXJJZCwJLyogIFsgSU4gXSBUaW1lciBJZCAqLworCQkJCSAgICAgICB1aW50MzJfdCBkaXZpZGVyCS8qICBbIElOIF0gRGl2aWRpbmcgdGhlIGNsb2NrIGZyZXF1ZW5jeSAqLworKSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLmFyYW10ZXh0IikpKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFN0YXJ0cyBhIHRpbWVyCisqCisqICBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBhIHByZWNvbmZpZ3VyZWQgdGltZXIKKyoKKyogIEByZXR1cm4gIC0xICAgICAtIE9uIEZhaWx1cmUKKyogICAgICAgICAgICAwICAgICAtIE9uIFN1Y2Nlc3MKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCB0bXJId19zdGFydFRpbWVyKHRtckh3X0lEX3QgdGltZXJJZAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCispIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIuYXJhbXRleHQiKSkpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU3RvcHMgYSB0aW1lcgorKgorKiAgVGhpcyBmdW5jdGlvbiBzdG9wcyBhIHJ1bm5pbmcgdGltZXIKKyoKKyogIEByZXR1cm4gIC0xICAgICAtIE9uIEZhaWx1cmUKKyogICAgICAgICAgICAwICAgICAtIE9uIFN1Y2Nlc3MKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCB0bXJId19zdG9wVGltZXIodG1ySHdfSURfdCB0aW1lcklkCS8qICBbIElOIF0gVGltZXIgaWQgKi8KKyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXRzIGN1cnJlbnQgdGltZXIgY291bnQKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VycmVudCB0aW1lciB2YWx1ZQorKgorKiAgQHJldHVybiAgQ3VycmVudCBkb3duY291bnRpbmcgdGltZXIgdmFsdWUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X0NPVU5UX3QgdG1ySHdfR2V0Q3VycmVudENvdW50KHRtckh3X0lEX3QgdGltZXJJZAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCispIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIuYXJhbXRleHQiKSkpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0cyB0aW1lciBjb3VudCByYXRlCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBjb3VudHMgcGVyIHNlY29uZAorKgorKiAgQHJldHVybiAgQ291bnQgcmF0ZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordG1ySHdfUkFURV90IHRtckh3X2dldENvdW50UmF0ZSh0bXJId19JRF90IHRpbWVySWQJLyogIFsgSU4gXSBUaW1lciBpZCAqLworKSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLmFyYW10ZXh0IikpKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZXMgdGltZXIgaW50ZXJydXB0CisqCisqICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHRpbWVyIGludGVycnVwdAorKgorKiAgQHJldHVybiAgIE4vQQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB0bXJId19lbmFibGVJbnRlcnJ1cHQodG1ySHdfSURfdCB0aW1lcklkCS8qICBbIElOIF0gVGltZXIgaWQgKi8KKyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlcyB0aW1lciBpbnRlcnJ1cHQKKyoKKyogIFRoaXMgZnVuY3Rpb24gZGlzYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0CisqCisqICBAcmV0dXJuICAgTi9BCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHRtckh3X2Rpc2FibGVJbnRlcnJ1cHQodG1ySHdfSURfdCB0aW1lcklkCS8qICBbIElOIF0gVGltZXIgaWQgKi8KKyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBDbGVhcnMgdGhlIGludGVycnVwdAorKgorKiAgVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIHRpbWVyIGludGVycnVwdAorKgorKiAgQHJldHVybiAgIE4vQQorKgorKiAgQG5vdGUKKyogICAgIE11c3QgYmUgY2FsbGVkIHVuZGVyIHRoZSBjb250ZXh0IG9mIElTUgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB0bXJId19jbGVhckludGVycnVwdCh0bXJId19JRF90IHRpbWVySWQJLyogIFsgSU4gXSBUaW1lciBpZCAqLworKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldHMgdGhlIGludGVycnVwdCBzdGF0dXMKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aW1lciBpbnRlcnJ1cHQgc3RhdHVzCisqCisqICBAcmV0dXJuICAgSW50ZXJydXB0IHN0YXR1cworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordG1ySHdfSU5URVJSVVBUX1NUQVRVU19lIHRtckh3X2dldEludGVycnVwdFN0YXR1cyh0bXJId19JRF90IHRpbWVySWQJLyogIFsgSU4gXSBUaW1lciBpZCAqLworKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEluZGVudGlmaWVzIGEgdGltZXIgY2F1c2luZyBpbnRlcnJ1cHQKKyoKKyogIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgYSB0aW1lciBjYXVzaW5nIGludGVycnVwdAorKgorKiAgQHJldHVybiAgMHhGRkZGRkZGRiAgIDogTm8gdGltZXIgY2F1c2luZyBhbiBpbnRlcnJ1cHQKKyogICAgICAgICAgICEgMHhGRkZGRkZGRiA6IHRpbWVyIGNhdXNpbmcgYW4gaW50ZXJydXB0CisqICBAbm90ZQorKiAgICAgdG1ySHdfY2xlYXJJbnRycnVwdCgpIG11c3QgYmUgY2FsbGVkIHdpdGggYSB2YWxpZCB0aW1lciBpZCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X0lEX3QgdG1ySHdfZ2V0SW50ZXJydXB0U291cmNlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGlzcGxheXMgc3BlY2lmaWMgdGltZXIgcmVnaXN0ZXJzCisqCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHRtckh3X3ByaW50RGVidWdJbmZvKHRtckh3X0lEX3QgdGltZXJJZCwJLyogIFsgSU4gXSBUaW1lciBpZCAqLworCQkJICBpbnQgKCpmcFByaW50KSAoY29uc3QgY2hhciAqLCAuLi4pCS8qICBbIElOIF0gUHJpbnQgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBVc2UgYSB0aW1lciB0byBwZXJmb3JtIGEgYnVzeSB3YWl0IGRlbGF5IGZvciBhIG51bWJlciBvZiB1c2Vjcy4KKyoKKyogIEByZXR1cm4gICBOL0EKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgdG1ySHdfdWRlbGF5KHRtckh3X0lEX3QgdGltZXJJZCwJLyogIFsgSU4gXSBUaW1lciBpZCAqLworCQkgIHVuc2lnbmVkIGxvbmcgdXNlY3MJLyogIFsgSU4gXSB1c2VjIHRvIGRlbGF5ICovCispIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIuYXJhbXRleHQiKSkpOworCisjZW5kaWYgLyogX1RNUkhXX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjM3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0NMS0RFVl9ICisjZGVmaW5lIF9fQVNNX01BQ0hfQ0xLREVWX0gKKworI2RlZmluZSBfX2Nsa19nZXQoY2xrKSAoeyAxOyB9KQorI2RlZmluZSBfX2Nsa19wdXQoY2xrKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2FwLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGZhMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2FwLmgKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIENBUF9ICisjZGVmaW5lIENBUF9ICisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordHlwZWRlZiBlbnVtIHsKKwlDQVBfTk9UX1BSRVNFTlQgPSAwLAorCUNBUF9QUkVTRU5UCit9IENBUF9SQ19UOworCit0eXBlZGVmIGVudW0geworCUNBUF9WUE0sCisJQ0FQX0VUSF9QSFksCisJQ0FQX0VUSF9HTUlJLAorCUNBUF9FVEhfU0dNSUksCisJQ0FQX1VTQiwKKwlDQVBfVFNDLAorCUNBUF9FSFNTLAorCUNBUF9TRElPLAorCUNBUF9VQVJUQiwKKwlDQVBfS0VZUEFELAorCUNBUF9DTENELAorCUNBUF9HRSwKKwlDQVBfTEVETSwKKwlDQVBfQkJMLAorCUNBUF9WREVDLAorCUNBUF9QSUYsCisJQ0FQX0FQTSwKKwlDQVBfU1BVLAorCUNBUF9QS0EsCisJQ0FQX1JORywKK30gQ0FQX0NBUEFCSUxJVFlfVDsKKwordHlwZWRlZiBlbnVtIHsKKwlDQVBfTENEX1dWR0EgPSAwLAorCUNBUF9MQ0RfVkdBID0gMHgxLAorCUNBUF9MQ0RfV1FWR0EgPSAweDIsCisJQ0FQX0xDRF9RVkdBID0gMHgzCit9IENBUF9MQ0RfUkVTX1Q7CisKKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW5saW5lIENBUF9SQ19UIGNhcF9pc1ByZXNlbnQoQ0FQX0NBUEFCSUxJVFlfVCBjYXBhYmlsaXR5LCBpbnQgaW5kZXgpOworc3RhdGljIGlubGluZSB1aW50MzJfdCBjYXBfZ2V0TWF4QXJtU3BlZWRIeih2b2lkKTsKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2FwX2dldE1heFZwbVNwZWVkSHoodm9pZCk7CitzdGF0aWMgaW5saW5lIENBUF9MQ0RfUkVTX1QgY2FwX2dldE1heExjZFJlcyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jYXBfaW5saW5lLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jYXBfaW5saW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzY2U2OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2NhcF9pbmxpbmUuaApAQCAtMCwwICsxLDQwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIENBUF9JTkxJTkVfSAorI2RlZmluZSBDQVBfSU5MSU5FX0gKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNsdWRlIDxtYWNoL2NzcC9jYXAuaD4KKyNpbmNsdWRlIDxjZmdfZ2xvYmFsLmg+CisKKy8qIC0tLS0gUHVibGljIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENBUF9DT05GSUcwX1ZQTV9ESVMgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDQVBfQ09ORklHMF9FVEhfUEhZMF9ESVMgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfRVRIX1BIWTFfRElTICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENBUF9DT05GSUcwX0VUSF9HTUlJMF9ESVMgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDQVBfQ09ORklHMF9FVEhfR01JSTFfRElTICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfRVRIX1NHTUlJMF9ESVMgICAweDAwMDAwMDIwCisjZGVmaW5lIENBUF9DT05GSUcwX0VUSF9TR01JSTFfRElTICAgMHgwMDAwMDA0MAorI2RlZmluZSBDQVBfQ09ORklHMF9VU0IwX0RJUyAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfVVNCMV9ESVMgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENBUF9DT05GSUcwX1RTQ19ESVMgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDQVBfQ09ORklHMF9FSFNTMF9ESVMgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfRUhTUzFfRElTICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENBUF9DT05GSUcwX1NESU8wX0RJUyAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDQVBfQ09ORklHMF9TRElPMV9ESVMgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfVUFSVEJfRElTICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENBUF9DT05GSUcwX0tFWVBBRF9ESVMgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDQVBfQ09ORklHMF9DTENEX0RJUyAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfR0VfRElTICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENBUF9DT05GSUcwX0xFRE1fRElTICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDQVBfQ09ORklHMF9CQkxfRElTICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfVkRFQ19ESVMgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENBUF9DT05GSUcwX1BJRl9ESVMgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDQVBfQ09ORklHMF9SRVNFUlZFRDFfRElTICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfUkVTRVJWRUQyX0RJUyAgICAweDAwODAwMDAwCisKKyNkZWZpbmUgQ0FQX0NPTkZJRzFfQVBNQV9ESVMgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENBUF9DT05GSUcxX0FQTUJfRElTICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDQVBfQ09ORklHMV9BUE1DX0RJUyAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ0FQX0NPTkZJRzFfQ0xDRF9SRVNfTUFTSyAgICAweDAwMDAwNjAwCisjZGVmaW5lIENBUF9DT05GSUcxX0NMQ0RfUkVTX1NISUZUICAgOQorI2RlZmluZSBDQVBfQ09ORklHMV9DTENEX1JFU19XVkdBICAgIChDQVBfTENEX1dWR0EgPDwgQ0FQX0NPTkZJRzFfQ0xDRF9SRVNfU0hJRlQpCisjZGVmaW5lIENBUF9DT05GSUcxX0NMQ0RfUkVTX1ZHQSAgICAgKENBUF9MQ0RfVkdBIDw8IENBUF9DT05GSUcxX0NMQ0RfUkVTX1NISUZUKQorI2RlZmluZSBDQVBfQ09ORklHMV9DTENEX1JFU19XUVZHQSAgIChDQVBfTENEX1dRVkdBIDw8IENBUF9DT05GSUcxX0NMQ0RfUkVTX1NISUZUKQorI2RlZmluZSBDQVBfQ09ORklHMV9DTENEX1JFU19RVkdBICAgIChDQVBfTENEX1FWR0EgPDwgQ0FQX0NPTkZJRzFfQ0xDRF9SRVNfU0hJRlQpCisKKyNkZWZpbmUgQ0FQX0NPTkZJRzJfU1BVX0RJUyAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENBUF9DT05GSUcyX1BLQV9ESVMgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDQVBfQ09ORklHMl9STkdfRElTICAgICAgICAgIDB4MDAwMDAwODAKKworI2lmICAgKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTEwNykKKyNkZWZpbmUgY2FwQ29uZmlnMCAwCisjZGVmaW5lIGNhcENvbmZpZzEgQ0FQX0NPTkZJRzFfQ0xDRF9SRVNfV1ZHQQorI2RlZmluZSBjYXBDb25maWcyIDAKKyNkZWZpbmUgQ0FQX0FQTV9NQVhfTlVNX0NIQU5TIDMKKyNlbGlmIChDRkdfR0xPQkFMX0NISVAgPT0gRlBHQTExMTA3KQorI2RlZmluZSBjYXBDb25maWcwIDAKKyNkZWZpbmUgY2FwQ29uZmlnMSBDQVBfQ09ORklHMV9DTENEX1JFU19XVkdBCisjZGVmaW5lIGNhcENvbmZpZzIgMAorI2RlZmluZSBDQVBfQVBNX01BWF9OVU1fQ0hBTlMgMworI2VsaWYgKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTEwOSkKKyNkZWZpbmUgY2FwQ29uZmlnMCAoQ0FQX0NPTkZJRzBfVVNCMV9ESVMgfCBDQVBfQ09ORklHMF9FSFNTMV9ESVMgfCBDQVBfQ09ORklHMF9TRElPMV9ESVMgfCBDQVBfQ09ORklHMF9HRV9ESVMgfCBDQVBfQ09ORklHMF9CQkxfRElTIHwgQ0FQX0NPTkZJRzBfVkRFQ19ESVMpCisjZGVmaW5lIGNhcENvbmZpZzEgKENBUF9DT05GSUcxX0FQTUNfRElTIHwgQ0FQX0NPTkZJRzFfQ0xDRF9SRVNfV1FWR0EpCisjZGVmaW5lIGNhcENvbmZpZzIgKENBUF9DT05GSUcyX1NQVV9ESVMgfCBDQVBfQ09ORklHMl9QS0FfRElTKQorI2RlZmluZSBDQVBfQVBNX01BWF9OVU1fQ0hBTlMgMgorI2VsaWYgKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTE3MCkKKyNkZWZpbmUgY2FwQ29uZmlnMCAoQ0FQX0NPTkZJRzBfRVRIX0dNSUkwX0RJUyB8IENBUF9DT05GSUcwX0VUSF9HTUlJMV9ESVMgfCBDQVBfQ09ORklHMF9VU0IwX0RJUyB8IENBUF9DT05GSUcwX1VTQjFfRElTIHwgQ0FQX0NPTkZJRzBfVFNDX0RJUyB8IENBUF9DT05GSUcwX0VIU1MxX0RJUyB8IENBUF9DT05GSUcwX1NESU8wX0RJUyB8IENBUF9DT05GSUcwX1NESU8xX0RJUyB8IENBUF9DT05GSUcwX1VBUlRCX0RJUyB8IENBUF9DT05GSUcwX0NMQ0RfRElTIHwgQ0FQX0NPTkZJRzBfR0VfRElTIHwgQ0FQX0NPTkZJRzBfQkJMX0RJUyB8IENBUF9DT05GSUcwX1ZERUNfRElTKQorI2RlZmluZSBjYXBDb25maWcxIChDQVBfQ09ORklHMV9BUE1DX0RJUyB8IENBUF9DT05GSUcxX0NMQ0RfUkVTX1dRVkdBKQorI2RlZmluZSBjYXBDb25maWcyIChDQVBfQ09ORklHMl9TUFVfRElTIHwgQ0FQX0NPTkZJRzJfUEtBX0RJUykKKyNkZWZpbmUgQ0FQX0FQTV9NQVhfTlVNX0NIQU5TIDIKKyNlbGlmIChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTExMTApCisjZGVmaW5lIGNhcENvbmZpZzAgKENBUF9DT05GSUcwX1VTQjFfRElTIHwgQ0FQX0NPTkZJRzBfVFNDX0RJUyB8IENBUF9DT05GSUcwX0VIU1MxX0RJUyB8IENBUF9DT05GSUcwX1NESU8wX0RJUyB8IENBUF9DT05GSUcwX1NESU8xX0RJUyB8IENBUF9DT05GSUcwX1VBUlRCX0RJUyB8IENBUF9DT05GSUcwX0dFX0RJUyB8IENBUF9DT05GSUcwX0JCTF9ESVMgfCBDQVBfQ09ORklHMF9WREVDX0RJUykKKyNkZWZpbmUgY2FwQ29uZmlnMSBDQVBfQ09ORklHMV9BUE1DX0RJUworI2RlZmluZSBjYXBDb25maWcyIChDQVBfQ09ORklHMl9TUFVfRElTIHwgQ0FQX0NPTkZJRzJfUEtBX0RJUykKKyNkZWZpbmUgQ0FQX0FQTV9NQVhfTlVNX0NIQU5TIDIKKyNlbGlmIChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTEyMTEpCisjZGVmaW5lIGNhcENvbmZpZzAgKENBUF9DT05GSUcwX0VUSF9QSFkwX0RJUyB8IENBUF9DT05GSUcwX0VUSF9HTUlJMF9ESVMgfCBDQVBfQ09ORklHMF9FVEhfR01JSTFfRElTIHwgQ0FQX0NPTkZJRzBfRVRIX1NHTUlJMF9ESVMgfCBDQVBfQ09ORklHMF9FVEhfU0dNSUkxX0RJUyB8IENBUF9DT05GSUcwX0NMQ0RfRElTKQorI2RlZmluZSBjYXBDb25maWcxIENBUF9DT05GSUcxX0FQTUNfRElTCisjZGVmaW5lIGNhcENvbmZpZzIgMAorI2RlZmluZSBDQVBfQVBNX01BWF9OVU1fQ0hBTlMgMgorI2Vsc2UKKyNlcnJvciBDRkdfR0xPQkFMX0NISVAgdHlwZSBjYXBhYmlsaXRpZXMgbm90IGRlZmluZWQKKyNlbmRpZgorCisjaWYgICAoKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTEwNykgfHwgKENGR19HTE9CQUxfQ0hJUCA9PSBGUEdBMTExMDcpKQorI2RlZmluZSBDQVBfSFdfQ0ZHX0FSTV9DTEtfSFogNTAwMDAwMDAwCisjZWxpZiAoKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTEwOSkgfHwgKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTE3MCkgfHwgKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTExMCkpCisjZGVmaW5lIENBUF9IV19DRkdfQVJNX0NMS19IWiAzMDAwMDAwMDAKKyNlbGlmIChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTEyMTEpCisjZGVmaW5lIENBUF9IV19DRkdfQVJNX0NMS19IWiA2NjY2NjY2NjYKKyNlbHNlCisjZXJyb3IgQ0ZHX0dMT0JBTF9DSElQIHR5cGUgY2FwYWJpbGl0aWVzIG5vdCBkZWZpbmVkCisjZW5kaWYKKworI2lmICgoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTA3KSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMjExKSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEZQR0ExMTEwNykpCisjZGVmaW5lIENBUF9IV19DRkdfVlBNX0NMS19IWiAzMzMzMzMzMzMKKyNlbGlmICgoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTA5KSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTcwKSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTEwKSkKKyNkZWZpbmUgQ0FQX0hXX0NGR19WUE1fQ0xLX0haIDIwMDAwMDAwMAorI2Vsc2UKKyNlcnJvciBDRkdfR0xPQkFMX0NISVAgdHlwZSBjYXBhYmlsaXRpZXMgbm90IGRlZmluZWQKKyNlbmRpZgorCisvKiAtLS0tIFB1YmxpYyBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIGNhcF9pc1ByZXNlbnQgLQorKgorKiAgUFVSUE9TRToKKyogICAgIERldGVybWluZXMgaWYgdGhlIGNoaXAgaGFzIGEgY2VydGFpbiBjYXBhYmlsaXR5IHByZXNlbnQKKyoKKyogIFBBUkFNRVRFUlM6CisqICAgICBjYXBhYmlsaXR5IC0gdHlwZSBvZiBjYXBhYmlsaXR5IHRvIGRldGVybWluZSBpZiBwcmVzZW50CisqCisqICBSRVRVUk5TOgorKiAgICAgQ0FQX1BSRVNFTlQgb3IgQ0FQX05PVF9QUkVTRU5UCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBDQVBfUkNfVCBjYXBfaXNQcmVzZW50KENBUF9DQVBBQklMSVRZX1QgY2FwYWJpbGl0eSwgaW50IGluZGV4KQoreworCUNBUF9SQ19UIHJldHVyblZhbCA9IENBUF9OT1RfUFJFU0VOVDsKKworCXN3aXRjaCAoY2FwYWJpbGl0eSkgeworCWNhc2UgQ0FQX1ZQTToKKwkJeworCQkJaWYgKCEoY2FwQ29uZmlnMCAmIENBUF9DT05GSUcwX1ZQTV9ESVMpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9FVEhfUEhZOgorCQl7CisJCQlpZiAoKGluZGV4ID09IDApCisJCQkgICAgJiYgKCEoY2FwQ29uZmlnMCAmIENBUF9DT05GSUcwX0VUSF9QSFkwX0RJUykpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCQlpZiAoKGluZGV4ID09IDEpCisJCQkgICAgJiYgKCEoY2FwQ29uZmlnMCAmIENBUF9DT05GSUcwX0VUSF9QSFkxX0RJUykpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9FVEhfR01JSToKKwkJeworCQkJaWYgKChpbmRleCA9PSAwKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9FVEhfR01JSTBfRElTKSkpIHsKKwkJCQlyZXR1cm5WYWwgPSBDQVBfUFJFU0VOVDsKKwkJCX0KKwkJCWlmICgoaW5kZXggPT0gMSkKKwkJCSAgICAmJiAoIShjYXBDb25maWcwICYgQ0FQX0NPTkZJRzBfRVRIX0dNSUkxX0RJUykpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9FVEhfU0dNSUk6CisJCXsKKwkJCWlmICgoaW5kZXggPT0gMCkKKwkJCSAgICAmJiAoIShjYXBDb25maWcwICYgQ0FQX0NPTkZJRzBfRVRIX1NHTUlJMF9ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQkJaWYgKChpbmRleCA9PSAxKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9FVEhfU0dNSUkxX0RJUykpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9VU0I6CisJCXsKKwkJCWlmICgoaW5kZXggPT0gMCkKKwkJCSAgICAmJiAoIShjYXBDb25maWcwICYgQ0FQX0NPTkZJRzBfVVNCMF9ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQkJaWYgKChpbmRleCA9PSAxKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9VU0IxX0RJUykpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9UU0M6CisJCXsKKwkJCWlmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9UU0NfRElTKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfRUhTUzoKKwkJeworCQkJaWYgKChpbmRleCA9PSAwKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9FSFNTMF9ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQkJaWYgKChpbmRleCA9PSAxKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9FSFNTMV9ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfU0RJTzoKKwkJeworCQkJaWYgKChpbmRleCA9PSAwKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9TRElPMF9ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQkJaWYgKChpbmRleCA9PSAxKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9TRElPMV9ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfVUFSVEI6CisJCXsKKwkJCWlmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9VQVJUQl9ESVMpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9LRVlQQUQ6CisJCXsKKwkJCWlmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9LRVlQQURfRElTKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfQ0xDRDoKKwkJeworCQkJaWYgKCEoY2FwQ29uZmlnMCAmIENBUF9DT05GSUcwX0NMQ0RfRElTKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfR0U6CisJCXsKKwkJCWlmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9HRV9ESVMpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9MRURNOgorCQl7CisJCQlpZiAoIShjYXBDb25maWcwICYgQ0FQX0NPTkZJRzBfTEVETV9ESVMpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9CQkw6CisJCXsKKwkJCWlmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9CQkxfRElTKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfVkRFQzoKKwkJeworCQkJaWYgKCEoY2FwQ29uZmlnMCAmIENBUF9DT05GSUcwX1ZERUNfRElTKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfUElGOgorCQl7CisJCQlpZiAoIShjYXBDb25maWcwICYgQ0FQX0NPTkZJRzBfUElGX0RJUykpIHsKKwkJCQlyZXR1cm5WYWwgPSBDQVBfUFJFU0VOVDsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgQ0FQX0FQTToKKwkJeworCQkJaWYgKChpbmRleCA9PSAwKQorCQkJICAgICYmICghKGNhcENvbmZpZzEgJiBDQVBfQ09ORklHMV9BUE1BX0RJUykpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCQlpZiAoKGluZGV4ID09IDEpCisJCQkgICAgJiYgKCEoY2FwQ29uZmlnMSAmIENBUF9DT05GSUcxX0FQTUJfRElTKSkpIHsKKwkJCQlyZXR1cm5WYWwgPSBDQVBfUFJFU0VOVDsKKwkJCX0KKwkJCWlmICgoaW5kZXggPT0gMikKKwkJCSAgICAmJiAoIShjYXBDb25maWcxICYgQ0FQX0NPTkZJRzFfQVBNQ19ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfU1BVOgorCQl7CisJCQlpZiAoIShjYXBDb25maWcyICYgQ0FQX0NPTkZJRzJfU1BVX0RJUykpIHsKKwkJCQlyZXR1cm5WYWwgPSBDQVBfUFJFU0VOVDsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgQ0FQX1BLQToKKwkJeworCQkJaWYgKCEoY2FwQ29uZmlnMiAmIENBUF9DT05GSUcyX1BLQV9ESVMpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9STkc6CisJCXsKKwkJCWlmICghKGNhcENvbmZpZzIgJiBDQVBfQ09ORklHMl9STkdfRElTKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJeworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0dXJuVmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgY2FwX2dldE1heEFybVNwZWVkSHogLQorKgorKiAgUFVSUE9TRToKKyogICAgIERldGVybWluZXMgdGhlIG1heGltdW0gc3BlZWQgb2YgdGhlIEFSTSBDUFUKKyoKKyogIFBBUkFNRVRFUlM6CisqICAgICBub25lCisqCisqICBSRVRVUk5TOgorKiAgICAgY2xvY2sgc3BlZWQgaW4gSHogdGhhdCB0aGUgQVJNIHByb2Nlc3NvciBpcyBhYmxlIHRvIHJ1biBhdAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2FwX2dldE1heEFybVNwZWVkSHoodm9pZCkKK3sKKyNpZiAgICgoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTA3KSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEZQR0ExMTEwNykpCisJcmV0dXJuIDUwMDAwMDAwMDsKKyNlbGlmICgoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTA5KSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTcwKSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTEwKSkKKwlyZXR1cm4gMzAwMDAwMDAwOworI2VsaWYgKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTIxMSkKKwlyZXR1cm4gNjY2NjY2NjY2OworI2Vsc2UKKyNlcnJvciBDRkdfR0xPQkFMX0NISVAgdHlwZSBjYXBhYmlsaXRpZXMgbm90IGRlZmluZWQKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgY2FwX2dldE1heFZwbVNwZWVkSHogLQorKgorKiAgUFVSUE9TRToKKyogICAgIERldGVybWluZXMgdGhlIG1heGltdW0gc3BlZWQgb2YgdGhlIFZQTQorKgorKiAgUEFSQU1FVEVSUzoKKyogICAgIG5vbmUKKyoKKyogIFJFVFVSTlM6CisqICAgICBjbG9jayBzcGVlZCBpbiBIeiB0aGF0IHRoZSBWUE0gaXMgYWJsZSB0byBydW4gYXQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNhcF9nZXRNYXhWcG1TcGVlZEh6KHZvaWQpCit7CisjaWYgKChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTExMDcpIHx8IChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTEyMTEpIHx8IChDRkdfR0xPQkFMX0NISVAgPT0gRlBHQTExMTA3KSkKKwlyZXR1cm4gMzMzMzMzMzMzOworI2VsaWYgKChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTExMDkpIHx8IChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTExNzApIHx8IChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTExMTApKQorCXJldHVybiAyMDAwMDAwMDA7CisjZWxzZQorI2Vycm9yIENGR19HTE9CQUxfQ0hJUCB0eXBlIGNhcGFiaWxpdGllcyBub3QgZGVmaW5lZAorI2VuZGlmCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBjYXBfZ2V0TWF4TGNkUmVzIC0KKyoKKyogIFBVUlBPU0U6CisqICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIExDRCByZXNvbHV0aW9uIGNhcGFiaWxpdGllcworKgorKiAgUEFSQU1FVEVSUzoKKyogICAgIG5vbmUKKyoKKyogIFJFVFVSTlM6CisqICAgQ0FQX0xDRF9XVkdBLCBDQVBfTENEX1ZHQSwgQ0FQX0xDRF9XUVZHQSBvciBDQVBfTENEX1FWR0EKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIENBUF9MQ0RfUkVTX1QgY2FwX2dldE1heExjZFJlcyh2b2lkKQoreworCXJldHVybiAoQ0FQX0xDRF9SRVNfVCkKKwkJKChjYXBDb25maWcxICYgQ0FQX0NPTkZJRzFfQ0xDRF9SRVNfTUFTSykgPj4KKwkJIENBUF9DT05GSUcxX0NMQ0RfUkVTX1NISUZUKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jaGlwY0h3X2RlZi5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGVhZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19kZWYuaApAQCAtMCwwICsxLDExMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgQ0hJUENfREVGX0gKKyNkZWZpbmUgQ0hJUENfREVGX0gKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8Y3NwL2Vycm5vLmg+CisjaW5jbHVkZSA8Y3NwL3JlZy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2NoaXBjSHdfcmVnLmg+CisKKy8qIC0tLS0gUHVibGljIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBTZXQgMSB0byBjb25maWd1cmUgRERSL1ZQTSBwaGFzZSBhbGlnbm1lbnQgYnkgSFcgKi8KKyNkZWZpbmUgY2hpcGNId19ERFJfSFdfUEhBU0VfQUxJR04gICAgMAorI2RlZmluZSBjaGlwY0h3X1ZQTV9IV19QSEFTRV9BTElHTiAgICAwCisKK3R5cGVkZWYgdWludDMyX3QgY2hpcGNId19mcmVxOworCisvKiBDb25maWd1cmFibGUgbWlzY2VsbGFuZW91cyBjbG9ja3MgKi8KK3R5cGVkZWYgZW51bSB7CisJY2hpcGNId19DTE9DS19ERFIsCS8qIEREUiBQSFkgQ2xvY2sgKi8KKwljaGlwY0h3X0NMT0NLX0FSTSwJLyogQVJNIENsb2NrICovCisJY2hpcGNId19DTE9DS19FU1csCS8qIEV0aGVybmV0IFN3aXRjaCBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfVlBNLAkvKiBWUE0gQ2xvY2sgKi8KKwljaGlwY0h3X0NMT0NLX0VTVzEyNSwJLyogRXRoZXJuZXQgTUlJIENsb2NrICovCisJY2hpcGNId19DTE9DS19VQVJULAkvKiBVQVJUIENsb2NrICovCisJY2hpcGNId19DTE9DS19TRElPMCwJLyogU0RJTyAwIENsb2NrICovCisJY2hpcGNId19DTE9DS19TRElPMSwJLyogU0RJTyAxIENsb2NrICovCisJY2hpcGNId19DTE9DS19TUEksCS8qIFNQSSBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfRVRNLAkvKiBBUk0gRVRNIENsb2NrICovCisKKwljaGlwY0h3X0NMT0NLX0JVUywJLyogQlVTIENsb2NrICovCisJY2hpcGNId19DTE9DS19PVFAsCS8qIE9UUCBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfSTJDLAkvKiBJMkMgSG9zdCBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfSTJTMCwJLyogSTJTIDAgSG9zdCBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfUlRCVVMsCS8qIEREUiBQSFkgQ29uZmlndXJhdGlvbiBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfQVBNMTAwLAkvKiBBUE0xMDAgQ2xvY2sgKi8KKwljaGlwY0h3X0NMT0NLX1RTQywJLyogVG91Y2ggc2NyZWVuIENsb2NrICovCisJY2hpcGNId19DTE9DS19MRUQsCS8qIExFRCBDbG9jayAqLworCisJY2hpcGNId19DTE9DS19VU0IsCS8qIFVTQiBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfTENELAkvKiBMQ0QgQ0xvY2sgKi8KKwljaGlwY0h3X0NMT0NLX0FQTSwJLyogQVBNIENsb2NrICovCisKKwljaGlwY0h3X0NMT0NLX0kyUzEsCS8qIEkyUyAxIEhvc3QgQ2xvY2sgKi8KK30gY2hpcGNId19DTE9DS19lOworCisvKiBTeXN0ZW0gYm9vdGluZyBzdHJhcCBvcHRpb25zICovCit0eXBlZGVmIGVudW0geworCWNoaXBjSHdfQk9PVF9ERVZJQ0VfVUFSVCA9IGNoaXBjSHdfU1RSQVBTX0JPT1RfREVWSUNFX1VBUlQsCisJY2hpcGNId19CT09UX0RFVklDRV9TRVJJQUxfRkxBU0ggPQorCSAgICBjaGlwY0h3X1NUUkFQU19CT09UX0RFVklDRV9TRVJJQUxfRkxBU0gsCisJY2hpcGNId19CT09UX0RFVklDRV9OT1JfRkxBU0hfMTYgPQorCSAgICBjaGlwY0h3X1NUUkFQU19CT09UX0RFVklDRV9OT1JfRkxBU0hfMTYsCisJY2hpcGNId19CT09UX0RFVklDRV9OQU5EX0ZMQVNIXzggPQorCSAgICBjaGlwY0h3X1NUUkFQU19CT09UX0RFVklDRV9OQU5EX0ZMQVNIXzgsCisJY2hpcGNId19CT09UX0RFVklDRV9OQU5EX0ZMQVNIXzE2ID0KKwkgICAgY2hpcGNId19TVFJBUFNfQk9PVF9ERVZJQ0VfTkFORF9GTEFTSF8xNgorfSBjaGlwY0h3X0JPT1RfREVWSUNFX2U7CisKKy8qIFN5c3RlbSBib290aW5nIG1vZGVzICovCit0eXBlZGVmIGVudW0geworCWNoaXBjSHdfQk9PVF9NT0RFX05PUk1BTCA9IGNoaXBjSHdfU1RSQVBTX0JPT1RfTU9ERV9OT1JNQUwsCisJY2hpcGNId19CT09UX01PREVfREJHX1NXID0gY2hpcGNId19TVFJBUFNfQk9PVF9NT0RFX0RCR19TVywKKwljaGlwY0h3X0JPT1RfTU9ERV9EQkdfQk9PVCA9IGNoaXBjSHdfU1RSQVBTX0JPT1RfTU9ERV9EQkdfQk9PVCwKKwljaGlwY0h3X0JPT1RfTU9ERV9OT1JNQUxfUVVJRVQgPSBjaGlwY0h3X1NUUkFQU19CT09UX01PREVfTk9STUFMX1FVSUVUCit9IGNoaXBjSHdfQk9PVF9NT0RFX2U7CisKKy8qIE5BTkQgRmxhc2ggcGFnZSBzaXplIHN0cmFwIG9wdGlvbnMgKi8KK3R5cGVkZWYgZW51bSB7CisJY2hpcGNId19OQU5EX1BBR0VTSVpFXzUxMiA9IGNoaXBjSHdfU1RSQVBTX05BTkRfUEFHRVNJWkVfNTEyLAorCWNoaXBjSHdfTkFORF9QQUdFU0laRV8yMDQ4ID0gY2hpcGNId19TVFJBUFNfTkFORF9QQUdFU0laRV8yMDQ4LAorCWNoaXBjSHdfTkFORF9QQUdFU0laRV80MDk2ID0gY2hpcGNId19TVFJBUFNfTkFORF9QQUdFU0laRV80MDk2LAorCWNoaXBjSHdfTkFORF9QQUdFU0laRV9FWFQgPSBjaGlwY0h3X1NUUkFQU19OQU5EX1BBR0VTSVpFX0VYVAorfSBjaGlwY0h3X05BTkRfUEFHRVNJWkVfZTsKKworLyogR1BJTyBQaW4gZnVuY3Rpb24gKi8KK3R5cGVkZWYgZW51bSB7CisJY2hpcGNId19HUElPX0ZVTkNUSU9OX0tFWVBBRCA9IGNoaXBjSHdfUkVHX0dQSU9fTVVYX0tFWVBBRCwKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fSTJDSCA9IGNoaXBjSHdfUkVHX0dQSU9fTVVYX0kyQ0gsCisJY2hpcGNId19HUElPX0ZVTkNUSU9OX1NQSSA9IGNoaXBjSHdfUkVHX0dQSU9fTVVYX1NQSSwKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fVUFSVCA9IGNoaXBjSHdfUkVHX0dQSU9fTVVYX1VBUlQsCisJY2hpcGNId19HUElPX0ZVTkNUSU9OX0xFRE1UWFAgPSBjaGlwY0h3X1JFR19HUElPX01VWF9MRURNVFhQLAorCWNoaXBjSHdfR1BJT19GVU5DVElPTl9MRURNVFhTID0gY2hpcGNId19SRUdfR1BJT19NVVhfTEVETVRYUywKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fU0RJTzAgPSBjaGlwY0h3X1JFR19HUElPX01VWF9TRElPMCwKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fU0RJTzEgPSBjaGlwY0h3X1JFR19HUElPX01VWF9TRElPMSwKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fUENNID0gY2hpcGNId19SRUdfR1BJT19NVVhfUENNLAorCWNoaXBjSHdfR1BJT19GVU5DVElPTl9JMlMgPSBjaGlwY0h3X1JFR19HUElPX01VWF9JMlMsCisJY2hpcGNId19HUElPX0ZVTkNUSU9OX0VUTSA9IGNoaXBjSHdfUkVHX0dQSU9fTVVYX0VUTSwKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fREVCVUcgPSBjaGlwY0h3X1JFR19HUElPX01VWF9ERUJVRywKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fTUlTQyA9IGNoaXBjSHdfUkVHX0dQSU9fTVVYX01JU0MsCisJY2hpcGNId19HUElPX0ZVTkNUSU9OX0dQSU8gPSBjaGlwY0h3X1JFR19HUElPX01VWF9HUElPCit9IGNoaXBjSHdfR1BJT19GVU5DVElPTl9lOworCisvKiBQSU4gT3V0cHV0IHNsZXcgcmF0ZSAqLwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X1BJTl9TTEVXX1JBVEVfSElHSCA9IGNoaXBjSHdfUkVHX1NMRVdfUkFURV9ISUdILAorCWNoaXBjSHdfUElOX1NMRVdfUkFURV9OT1JNQUwgPSBjaGlwY0h3X1JFR19TTEVXX1JBVEVfTk9STUFMCit9IGNoaXBjSHdfUElOX1NMRVdfUkFURV9lOworCisvKiBQSU4gQ3VycmVudCBkcml2ZSBzdHJlbmd0aCAqLwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X1BJTl9DVVJSRU5UX1NUUkVOR1RIXzJtQSA9IGNoaXBjSHdfUkVHX0NVUlJFTlRfU1RSRU5HVEhfMm1BLAorCWNoaXBjSHdfUElOX0NVUlJFTlRfU1RSRU5HVEhfNG1BID0gY2hpcGNId19SRUdfQ1VSUkVOVF9TVFJFTkdUSF80bUEsCisJY2hpcGNId19QSU5fQ1VSUkVOVF9TVFJFTkdUSF82bUEgPSBjaGlwY0h3X1JFR19DVVJSRU5UX1NUUkVOR1RIXzZtQSwKKwljaGlwY0h3X1BJTl9DVVJSRU5UX1NUUkVOR1RIXzhtQSA9IGNoaXBjSHdfUkVHX0NVUlJFTlRfU1RSRU5HVEhfOG1BLAorCWNoaXBjSHdfUElOX0NVUlJFTlRfU1RSRU5HVEhfMTBtQSA9IGNoaXBjSHdfUkVHX0NVUlJFTlRfU1RSRU5HVEhfMTBtQSwKKwljaGlwY0h3X1BJTl9DVVJSRU5UX1NUUkVOR1RIXzEybUEgPSBjaGlwY0h3X1JFR19DVVJSRU5UX1NUUkVOR1RIXzEybUEKK30gY2hpcGNId19QSU5fQ1VSUkVOVF9TVFJFTkdUSF9lOworCisvKiBQSU4gUHVsbCB1cCByZWdpc3RlciBzZXR0aW5ncyAqLwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X1BJTl9QVUxMX05PTkUgPSBjaGlwY0h3X1JFR19QVUxMX05PTkUsCisJY2hpcGNId19QSU5fUFVMTF9VUCA9IGNoaXBjSHdfUkVHX1BVTExfVVAsCisJY2hpcGNId19QSU5fUFVMTF9ET1dOID0gY2hpcGNId19SRUdfUFVMTF9ET1dOCit9IGNoaXBjSHdfUElOX1BVTExfZTsKKworLyogUElOIGlucHV0IHR5cGUgc2V0dGluZ3MgKi8KK3R5cGVkZWYgZW51bSB7CisJY2hpcGNId19QSU5fSU5QVVRUWVBFX0NNT1MgPSBjaGlwY0h3X1JFR19JTlBVVFRZUEVfQ01PUywKKwljaGlwY0h3X1BJTl9JTlBVVFRZUEVfU1QgPSBjaGlwY0h3X1JFR19JTlBVVFRZUEVfU1QKK30gY2hpcGNId19QSU5fSU5QVVRUWVBFX2U7CisKKy8qIEFsbG93L0Rpc2Fsb3cgdGhlIHN1cHBvcnQgb2Ygc3ByZWFkIHNwZWN0cnVtICAqLwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X1NQUkVBRF9TUEVDVFJVTV9ESVNBTExPVywJLyogU3ByZWFkIHNwZWN0cnVtIHN1cHBvcnQgaXMgbm90IGFsbG93ZWQgKi8KKwljaGlwY0h3X1NQUkVBRF9TUEVDVFJVTV9BTExPVwkvKiBTcHJlYWQgc3BlY3RydW0gc3VwcG9ydCBpcyBhbGxvd2VkICovCit9IGNoaXBjSHdfU1BSRUFEX1NQRUNUUlVNX2U7CisKK3R5cGVkZWYgc3RydWN0IHsKKwljaGlwY0h3X1NQUkVBRF9TUEVDVFJVTV9lIHNzU3VwcG9ydDsJLyogQWxsb3cvRGlzYWxvdyB0byBzdXBwb3J0IHNwcmVhZCBzcGVjdHJ1bS4KKwkJCQkJCSAgIElmIHN1cHBvcnRlZCwgY2FsbCBjaGlwY0h3X2VuYWJsZVNwcmVhZFNwZWN0cnVtICgpCisJCQkJCQkgICB0byBhY3RpdmF0ZSB0aGUgc3ByZWFkIHNwZWN0cnVtIHdpdGggZGVzaXJlZCBzcHJlYWQuICovCisJdWludDMyX3QgcGxsVmNvRnJlcUh6OwkvKiBQTEwgVkNPIGZyZXF1ZW5jeSBpbiBIeiAqLworCXVpbnQzMl90IHBsbDJWY29GcmVxSHo7CS8qIFBMTDIgVkNPIGZyZXF1ZW5jeSBpbiBIeiAqLworCXVpbnQzMl90IGJ1c0Nsb2NrRnJlcUh6OwkvKiBCdXMgY2xvY2sgZnJlcXVlbmN5IGluIEh6ICovCisJdWludDMyX3QgYXJtQnVzUmF0aW87CS8qIEFSTSBjbG9jayA6IEJ1cyBjbG9jayAqLworCXVpbnQzMl90IHZwbUJ1c1JhdGlvOwkvKiBWUE0gY2xvY2sgOiBCdXMgY2xvY2sgKi8KKwl1aW50MzJfdCBkZHJCdXNSYXRpbzsJLyogRERSIGNsb2NrIDogQnVzIGNsb2NrICovCit9IGNoaXBjSHdfSU5JVF9QQVJBTV90OworCisvKiBDSElQIHJldmlzaW9uIG51bWJlciAqLwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X1JFVl9OVU1CRVJfQTAgPSBjaGlwY0h3X1JFR19SRVZfQTAsCisJY2hpcGNId19SRVZfTlVNQkVSX0IwID0gY2hpcGNId19SRUdfUkVWX0IwCit9IGNoaXBjSHdfUkVWX05VTUJFUl9lOworCit0eXBlZGVmIGVudW0geworCWNoaXBjSHdfVlBNX0hXX1BIQVNFX0lOVFJfRElTQUJMRSA9IGNoaXBjSHdfUkVHX1ZQTV9JTlRSX0RJU0FCTEUsCisJY2hpcGNId19WUE1fSFdfUEhBU0VfSU5UUl9GQVNUID0gY2hpcGNId19SRUdfVlBNX0lOVFJfRkFTVCwKKwljaGlwY0h3X1ZQTV9IV19QSEFTRV9JTlRSX01FRElVTSA9IGNoaXBjSHdfUkVHX1ZQTV9JTlRSX01FRElVTSwKKwljaGlwY0h3X1ZQTV9IV19QSEFTRV9JTlRSX1NMT1cgPSBjaGlwY0h3X1JFR19WUE1fSU5UUl9TTE9XCit9IGNoaXBjSHdfVlBNX0hXX1BIQVNFX0lOVFJfZTsKKwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X0REUl9IV19QSEFTRV9NQVJHSU5fU1RSSUNULAkvKiAgU3RyaWN0IG1hcmdpbiBmb3IgRERSIHBoYXNlIGFsaWduIGNvbmRpdGlvbiAqLworCWNoaXBjSHdfRERSX0hXX1BIQVNFX01BUkdJTl9NRURJVU0sCS8qICBNZWRpdW0gbWFyZ2luIGZvciBERFIgcGhhc2UgYWxpZ24gY29uZGl0aW9uICovCisJY2hpcGNId19ERFJfSFdfUEhBU0VfTUFSR0lOX1dJREUJLyogIFdpZGVyIG1hcmdpbiBmb3IgRERSIHBoYXNlIGFsaWduIGNvbmRpdGlvbiAqLworfSBjaGlwY0h3X0REUl9IV19QSEFTRV9NQVJHSU5fZTsKKwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X1ZQTV9IV19QSEFTRV9NQVJHSU5fU1RSSUNULAkvKiAgU3RyaWN0IG1hcmdpbiBmb3IgVlBNIHBoYXNlIGFsaWduIGNvbmRpdGlvbiAqLworCWNoaXBjSHdfVlBNX0hXX1BIQVNFX01BUkdJTl9NRURJVU0sCS8qICBNZWRpdW0gbWFyZ2luIGZvciBWUE0gcGhhc2UgYWxpZ24gY29uZGl0aW9uICovCisJY2hpcGNId19WUE1fSFdfUEhBU0VfTUFSR0lOX1dJREUJLyogIFdpZGVyIG1hcmdpbiBmb3IgVlBNIHBoYXNlIGFsaWduIGNvbmRpdGlvbiAqLworfSBjaGlwY0h3X1ZQTV9IV19QSEFTRV9NQVJHSU5fZTsKKworI2RlZmluZSBjaGlwY0h3X1hUQUxfRlJFUV9IeiAgICAgICAgICAgICAgICAgICAgMjUwMDAwMDAJLyogUmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeSBpbiBIeiAqLworCisvKiBQcm9ncmFtYWJsZSBwaW4gZGVmaW5lcyAqLworI2RlZmluZSBjaGlwY0h3X1BJTl9HUElPKG4pICAgICAgICAgICAgICAgICAgICAgKCgoKG4pID49IDApICYmICgobikgPCAoY2hpcGNId19HUElPX0NPVU5UKSkpID8gKG4pIDogMHhGRkZGRkZGRikKKwkJCQkJCQkJCSAgICAgLyogR1BJTyBwaW4gMCAtIDYwICovCisjZGVmaW5lIGNoaXBjSHdfUElOX1VBUlRUWEQgICAgICAgICAgICAgICAgICAgICAoY2hpcGNId19HUElPX0NPVU5UICsgMCkJLyogVUFSVCBUcmFuc21pdCAqLworI2RlZmluZSBjaGlwY0h3X1BJTl9OVklfQSAgICAgICAgICAgICAgICAgICAgICAgKGNoaXBjSHdfR1BJT19DT1VOVCArIDEpCS8qIE5WSSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgY2hpcGNId19QSU5fTlZJX0QgICAgICAgICAgICAgICAgICAgICAgIChjaGlwY0h3X0dQSU9fQ09VTlQgKyAyKQkvKiBOVkkgSW50ZXJmYWNlICovCisjZGVmaW5lIGNoaXBjSHdfUElOX05WSV9PRUIgICAgICAgICAgICAgICAgICAgICAoY2hpcGNId19HUElPX0NPVU5UICsgMykJLyogTlZJIEludGVyZmFjZSAqLworI2RlZmluZSBjaGlwY0h3X1BJTl9OVklfV0VCICAgICAgICAgICAgICAgICAgICAgKGNoaXBjSHdfR1BJT19DT1VOVCArIDQpCS8qIE5WSSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgY2hpcGNId19QSU5fTlZJX0NTICAgICAgICAgICAgICAgICAgICAgIChjaGlwY0h3X0dQSU9fQ09VTlQgKyA1KQkvKiBOVkkgSW50ZXJmYWNlICovCisjZGVmaW5lIGNoaXBjSHdfUElOX05WSV9OQU5EX0NTQiAgICAgICAgICAgICAgICAoY2hpcGNId19HUElPX0NPVU5UICsgNikJLyogTlZJIEludGVyZmFjZSAqLworI2RlZmluZSBjaGlwY0h3X1BJTl9OVklfRkxBU0hXUCAgICAgICAgICAgICAgICAgKGNoaXBjSHdfR1BJT19DT1VOVCArIDcpCS8qIE5WSSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgY2hpcGNId19QSU5fTlZJX05BTkRfUkRZQiAgICAgICAgICAgICAgIChjaGlwY0h3X0dQSU9fQ09VTlQgKyA4KQkvKiBOVkkgSW50ZXJmYWNlICovCisjZGVmaW5lIGNoaXBjSHdfUElOX0NMX0RBVEFfMF8xNyAgICAgICAgICAgICAgICAoY2hpcGNId19HUElPX0NPVU5UICsgOSkJLyogTENEIERhdGEgMCAtIDE3ICovCisjZGVmaW5lIGNoaXBjSHdfUElOX0NMX0RBVEFfMThfMjAgICAgICAgICAgICAgICAoY2hpcGNId19HUElPX0NPVU5UICsgMTApCS8qIExDRCBEYXRhIDE4IC0gMjAgKi8KKyNkZWZpbmUgY2hpcGNId19QSU5fQ0xfREFUQV8yMV8yMyAgICAgICAgICAgICAgIChjaGlwY0h3X0dQSU9fQ09VTlQgKyAxMSkJLyogTENEIERhdGEgMjEgLSAyMyAqLworI2RlZmluZSBjaGlwY0h3X1BJTl9DTF9QT1dFUiAgICAgICAgICAgICAgICAgICAgKGNoaXBjSHdfR1BJT19DT1VOVCArIDEyKQkvKiBMQ0QgUG93ZXIgKi8KKyNkZWZpbmUgY2hpcGNId19QSU5fQ0xfQUNLICAgICAgICAgICAgICAgICAgICAgIChjaGlwY0h3X0dQSU9fQ09VTlQgKyAxMykJLyogTENEIEFjayAqLworI2RlZmluZSBjaGlwY0h3X1BJTl9DTF9GUCAgICAgICAgICAgICAgICAgICAgICAgKGNoaXBjSHdfR1BJT19DT1VOVCArIDE0KQkvKiBMQ0QgRlAgKi8KKyNkZWZpbmUgY2hpcGNId19QSU5fQ0xfTFAgICAgICAgICAgICAgICAgICAgICAgIChjaGlwY0h3X0dQSU9fQ09VTlQgKyAxNSkJLyogTENEIExQICovCisjZGVmaW5lIGNoaXBjSHdfUElOX1VBUlRSWEQgICAgICAgICAgICAgICAgICAgICAoY2hpcGNId19HUElPX0NPVU5UICsgMTYpCS8qIFVBUlQgUmVjZWl2ZSAqLworCisvKiAtLS0tIFB1YmxpYyBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIGNsb2NrIG1vZHVsZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjaGlwY0h3X0luaXQoY2hpcGNId19JTklUX1BBUkFNX3QgKmluaXRQYXJhbQkvKiAgWyBJTiBdIE1pc2MgY2hpcCBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXIgKi8KKyAgICApIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIuYXJhbXRleHQiKSkpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICBFbmFibGVzIHRoZSBQTEwxCisqCisqICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIFBMTDEKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgY2hpcGNId19wbGwxRW5hYmxlKHVpbnQzMl90IHZjb0ZyZXFIeiwJLyogIFsgSU4gXSBWQ08gZnJlcXVlbmN5IGluIEh6ICovCisJCQljaGlwY0h3X1NQUkVBRF9TUEVDVFJVTV9lIHNzU3VwcG9ydAkvKiAgWyBJTiBdIFNTIHN0YXR1cyAqLworICAgICkgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi5hcmFtdGV4dCIpKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIEVuYWJsZXMgdGhlIFBMTDIKKyoKKyogIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgUExMMgorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjaGlwY0h3X3BsbDJFbmFibGUodWludDMyX3QgdmNvRnJlcUh6CS8qICBbIElOIF0gVkNPIGZyZXF1ZW5jeSBpbiBIeiAqLworICAgICkgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi5hcmFtdGV4dCIpKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIERpc2FibGUgdGhlIFBMTDEKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3BsbDFEaXNhYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICBEaXNhYmxlIHRoZSBQTEwyCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wbGwyRGlzYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBjbG9jayBmZXF1ZW5jeSBmb3IgbWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgY2xvY2tzCisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgY2xvY2sgZnJlcXVlbmN5CisqCisqICBAcmV0dXJuICBDb25maWd1cmVkIGNsb2NrIGZyZXF1ZW5jeSBpbiBLSHoKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2NoaXBjSHdfZnJlcSBjaGlwY0h3X2dldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfZSBjbG9jawkvKiAgWyBJTiBdIENvbmZpZ3VyYWJsZSBjbG9jayAqLworICAgICkgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi5hcmFtdGV4dCIpKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgY2xvY2sgZmVxdWVuY3kgZm9yIG1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIGNsb2NrcworKgorKiAgVGhpcyBmdW5jdGlvbiBzZXRzIGNsb2NrIGZyZXF1ZW5jeQorKgorKiAgQHJldHVybiAgQ29uZmlndXJlZCBjbG9jayBmcmVxdWVuY3kgaW4gSHoKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2NoaXBjSHdfZnJlcSBjaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfZSBjbG9jaywJLyogIFsgSU4gXSBDb25maWd1cmFibGUgY2xvY2sgKi8KKwkJCQkgICAgICAgdWludDMyX3QgZnJlcQkvKiAgWyBJTiBdIENsb2NrIGZyZXF1ZW5jeSBpbiBIeiAqLworICAgICkgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi5hcmFtdGV4dCIpKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgVlBNIGNsb2NrIGluIHN5bmMgd2l0aCBCVVMgY2xvY2sKKyoKKyogIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgcGhhc2UgYWRqdXN0bWVudCBiZXR3ZWVuIFZQTSBhbmQgQlVTIGNsb2NrCisqCisqICBAcmV0dXJuID49IDAgOiBPbiBzdWNjZXNzICggIyBvZiBhZGp1c3RtZW50IHJlcXVpcmVkICkKKyogICAgICAgICAgICAtMSA6IE9uIGZhaWx1cmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBjaGlwY0h3X3ZwbVBoYXNlQWxpZ24odm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBFbmFibGVzIGNvcmUgYSBjbG9jayBvZiBhIGNlcnRhaW4gZGV2aWNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgYSBjb3JlIGNsb2NrCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqICBAbm90ZSAgICBEb2Vzbm90IGFmZmVjdCB0aGUgYnVzIGludGVyZmFjZSBjbG9jaworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0Q2xvY2tFbmFibGUoY2hpcGNId19DTE9DS19lIGNsb2NrCS8qICBbIElOIF0gQ29uZmlndXJhYmxlIGNsb2NrICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGVkIGEgY29yZSBjbG9jayBvZiBhIGNlcnRhaW4gZGV2aWNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIGEgY29yZSBjbG9jaworKgorKiAgQHJldHVybiAgdm9pZAorKgorKiAgQG5vdGUgICAgRG9lc25vdCBhZmZlY3QgdGhlIGJ1cyBpbnRlcmZhY2UgY2xvY2sKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldENsb2NrRGlzYWJsZShjaGlwY0h3X0NMT0NLX2UgY2xvY2sJLyogIFsgSU4gXSBDb25maWd1cmFibGUgY2xvY2sgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlcyBieXBhc3MgY2xvY2sgb2YgYSBjZXJ0YWluIGRldmljZQorKgorKiAgVGhpcyBmdW5jdGlvbiBlbmFibGVzIGJ5cGFzcyBjbG9jaworKgorKiAgQG5vdGUgICAgRG9lc25vdCBhZmZlY3QgdGhlIGJ1cyBpbnRlcmZhY2UgY2xvY2sKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2J5cGFzc0Nsb2NrRW5hYmxlKGNoaXBjSHdfQ0xPQ0tfZSBjbG9jawkvKiAgWyBJTiBdIENvbmZpZ3VyYWJsZSBjbG9jayAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlZCBieXBhc3MgY2xvY2sgb2YgYSBjZXJ0YWluIGRldmljZQorKgorKiAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyBieXBhc3MgY2xvY2sKKyoKKyogIEBub3RlICAgIERvZXNub3QgYWZmZWN0IHRoZSBidXMgaW50ZXJmYWNlIGNsb2NrCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19ieXBhc3NDbG9ja0Rpc2FibGUoY2hpcGNId19DTE9DS19lIGNsb2NrCS8qICBbIElOIF0gQ29uZmlndXJhYmxlIGNsb2NrICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCBOdW1lcmljIENoaXAgSUQKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBDaGlwIElEIHRoYXQgaW5jbHVkZXMgdGhlIHJldmlzb24gbnVtYmVyCisqCisqICBAcmV0dXJuICBDb21wbGV0ZSBudW1lcmljIENoaXAgSUQKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19nZXRDaGlwSWQodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgQ2hpcCBQcm9kdWN0IElECisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgQ2hpcCBQcm9kdWN0IElECisqCisqICBAcmV0dXJuICBDaGlwIFByb2R1Y3QgSUQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19nZXRDaGlwUHJvZHVjdElkKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IHJldmlzaW9uIG51bWJlcgorKgorKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHJldmlzaW9uIG51bWJlciBvZiB0aGUgY2hpcAorKgorKiAgQHJldHVybiAgUmV2aXNpb24gbnVtYmVyCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIGNoaXBjSHdfUkVWX05VTUJFUl9lIGNoaXBjSHdfZ2V0Q2hpcFJldmlzaW9uTnVtYmVyKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlcyBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBFbmFibGVzICBidXMgaW50ZXJmYWNlIGNsb2NrIG9mIHZhcmlvdXMgZGV2aWNlCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqICBAbm90ZSAgICB1c2UgY2hpcGNId19SRUdfQlVTX0NMT0NLX1hYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2J1c0ludGVyZmFjZUNsb2NrRW5hYmxlKHVpbnQzMl90IG1hc2sJLyogIFsgSU4gXSBCaXQgbWFwIG9mIHR5cGUgIGNoaXBjSHdfUkVHX0JVU19DTE9DS19YWFhYWCAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlcyBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBEaXNhYmxlcyAgYnVzIGludGVyZmFjZSBjbG9jayBvZiB2YXJpb3VzIGRldmljZQorKgorKiAgQHJldHVybiAgdm9pZAorKgorKiAgQG5vdGUgICAgdXNlIGNoaXBjSHdfUkVHX0JVU19DTE9DS19YWFhYCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19idXNJbnRlcmZhY2VDbG9ja0Rpc2FibGUodWludDMyX3QgbWFzawkvKiAgWyBJTiBdIEJpdCBtYXAgb2YgdHlwZSAgY2hpcGNId19SRUdfQlVTX0NMT0NLX1hYWFhYICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZXMgdmFyaW91cyBhdWRpbyBjaGFubmVscworKgorKiAgRW5hYmxlcyBhdWRpbyBjaGFubmVsCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqICBAbm90ZSAgICB1c2UgY2hpcGNId19SRUdfQVVESU9fQ0hBTk5FTF9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2F1ZGlvQ2hhbm5lbEVuYWJsZSh1aW50MzJfdCBtYXNrCS8qICBbIElOIF0gQml0IG1hcCBvZiB0eXBlICBjaGlwY0h3X1JFR19BVURJT19DSEFOTkVMX1hYWFhYWCAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlcyB2YXJpb3VzIGF1ZGlvIGNoYW5uZWxzCisqCisqICBEaXNhYmxlcyBhdWRpbyBjaGFubmVsCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqICBAbm90ZSAgICB1c2UgY2hpcGNId19SRUdfQVVESU9fQ0hBTk5FTF9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2F1ZGlvQ2hhbm5lbERpc2FibGUodWludDMyX3QgbWFzawkvKiAgWyBJTiBdIEJpdCBtYXAgb2YgdHlwZSAgY2hpcGNId19SRUdfQVVESU9fQ0hBTk5FTF9YWFhYWFggKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgIFNvZnQgcmVzZXRzIGRldmljZXMKKyoKKyogIFNvZnQgcmVzZXRzIHZhcmlvdXMgZGV2aWNlcworKgorKiAgQHJldHVybiAgIHZvaWQKKyoKKyogIEBub3RlICAgICB1c2UgY2hpcGNId19SRUdfU09GVF9SRVNFVF9YWFhYWFggZGVmaW5lcworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc29mdFJlc2V0KHVpbnQ2NF90IG1hc2sJLyogIFsgSU4gXSBCaXQgbWFwIG9mIHR5cGUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9YWFhYWFggKi8KKyAgICApOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zb2Z0UmVzZXREaXNhYmxlKHVpbnQ2NF90IG1hc2sJLyogIFsgSU4gXSBCaXQgbWFwIG9mIHR5cGUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9YWFhYWFggKi8KKyAgICApOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zb2Z0UmVzZXRFbmFibGUodWludDY0X3QgbWFzawkvKiAgWyBJTiBdIEJpdCBtYXAgb2YgdHlwZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1hYWFhYWCAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICAgQ29uZmlndXJlcyBtaXNjIENISVAgZnVuY3Rpb25hbGl0eQorKgorKiAgQ29uZmlndXJlcyBDSElQIGZ1bmN0aW9uYWxpdHkKKyoKKyogIEByZXR1cm4gICB2b2lkCisqCisqICBAbm90ZSAgICAgdXNlIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X21pc2NDb250cm9sKHVpbnQzMl90IG1hc2sJLyogIFsgSU4gXSBCaXQgbWFwIG9mIHR5cGUgY2hpcGNId19SRUdfTUlTQ19DVFJMX1hYWFhYWCAqLworICAgICk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X21pc2NDb250cm9sRGlzYWJsZSh1aW50MzJfdCBtYXNrCS8qICBbIElOIF0gQml0IG1hcCBvZiB0eXBlIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9YWFhYWFggKi8KKyAgICApOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19taXNjQ29udHJvbEVuYWJsZSh1aW50MzJfdCBtYXNrCS8qICBbIElOIF0gQml0IG1hcCBvZiB0eXBlIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9YWFhYWFggKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgIFNldCBPVFAgb3B0aW9ucworKgorKiAgU2V0IE9UUCBvcHRpb25zCisqCisqICBAcmV0dXJuICAgdm9pZAorKgorKiAgQG5vdGUgICAgIHVzZSBjaGlwY0h3X1JFR19PVFBfWFhYWFhYCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRPVFBPcHRpb24odWludDY0X3QgbWFzawkvKiAgWyBJTiBdIEJpdCBtYXAgb2YgdHlwZSBjaGlwY0h3X1JFR19PVFBfWFhYWFhYICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBHZXQgc3RpY2t5IGJpdHMKKyoKKyogIEByZXR1cm4gICBTdGlja3kgYml0IG9wdGlvbnMgb2YgdHlwZSBjaGlwY0h3X1JFR19TVElDS1lfWFhYWFhYCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0U3RpY2t5Qml0cyh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBTZXQgc3RpY2t5IGJpdHMKKyoKKyogIEByZXR1cm4gICB2b2lkCisqCisqICBAbm90ZSAgICAgdXNlIGNoaXBjSHdfUkVHX1NUSUNLWV9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFN0aWNreUJpdHModWludDMyX3QgbWFzawkvKiAgWyBJTiBdIEJpdCBtYXAgb2YgdHlwZSBjaGlwY0h3X1JFR19TVElDS1lfWFhYWFhYICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBDbGVhciBzdGlja3kgYml0cworKgorKiAgQHJldHVybiAgIHZvaWQKKyoKKyogIEBub3RlICAgICB1c2UgY2hpcGNId19SRUdfU1RJQ0tZX1hYWFhYWAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfY2xlYXJTdGlja3lCaXRzKHVpbnQzMl90IG1hc2sJLyogIFsgSU4gXSBCaXQgbWFwIG9mIHR5cGUgY2hpcGNId19SRUdfU1RJQ0tZX1hYWFhYWCAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICAgR2V0IHNvZnR3YXJlIG92ZXJyaWRlIHN0cmFwIG9wdGlvbnMKKyoKKyogIFJldHJpZXZlcyBzb2Z0d2FyZSBvdmVycmlkZSBzdHJhcCBvcHRpb25zCisqCisqICBAcmV0dXJuICAgU29mdHdhcmUgb3ZlcnJpZGUgc3RyYXAgdmFsdWUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19nZXRTb2Z0U3RyYXBzKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgIFNldCBzb2Z0d2FyZSBvdmVycmlkZSBzdHJhcCBvcHRpb25zCisqCisqICBzZXQgc29mdHdhcmUgb3ZlcnJpZGUgc3RyYXAgb3B0aW9ucworKgorKiAgQHJldHVybiAgIG5vdGhpbmcKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFNvZnRTdHJhcHModWludDMyX3Qgc3RyYXBPcHRpb25zKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBHZXQgcGluIHN0cmFwIG9wdGlvbnMKKyoKKyogIFJldHJpZXZlcyBwaW4gc3RyYXAgb3B0aW9ucworKgorKiAgQHJldHVybiAgIFBpbiBzdHJhcCB2YWx1ZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2dldFBpblN0cmFwcyh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBHZXQgdmFsaWQgcGluIHN0cmFwIG9wdGlvbnMKKyoKKyogIFJldHJpZXZlcyB2YWxpZCBwaW4gc3RyYXAgb3B0aW9ucworKgorKiAgQHJldHVybiAgIHZhbGlkIFBpbiBzdHJhcCB2YWx1ZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2dldFZhbGlkU3RyYXBzKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgIEluaXRpYWxpemUgdmFsaWQgcGluIHN0cmFwIG9wdGlvbnMKKyoKKyogIFJldHJpZXZlcyB2YWxpZCBwaW4gc3RyYXAgb3B0aW9ucyBieSBjb3B5aW5nIEhXIHN0cmFwIG9wdGlvbnMgdG8gc29mdCByZWdpc3RlcgorKiAgKGlmIGNoaXBjSHdfU1RSQVBTX1NPRlRfT1ZFUlJJREUgbm90IHNldCkKKyoKKyogIEByZXR1cm4gICBub3RoaW5nCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19pbml0VmFsaWRTdHJhcHModm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgc3RhdHVzIChlbmFibGVkL2Rpc2FibGVkKSBvZiBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN0YXR1cyBvZiBkZXZpY2VzJyBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBAcmV0dXJuICBCdXMgaW50ZXJmYWNlIGNsb2NrCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0QnVzSW50ZXJmYWNlQ2xvY2tTdGF0dXModm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgYm9vdCBkZXZpY2UKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZGV2aWNlIHR5cGUgdXNlZCBpbiBib290aW5nIHRoZSBzeXN0ZW0KKyoKKyogIEByZXR1cm4gIEJvb3QgZGV2aWNlIG9mIHR5cGUgY2hpcGNId19CT09UX0RFVklDRV9lCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIGNoaXBjSHdfQk9PVF9ERVZJQ0VfZSBjaGlwY0h3X2dldEJvb3REZXZpY2Uodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgYm9vdCBtb2RlCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHdheSB0aGUgc3lzdGVtIHdhcyBib290ZWQKKyoKKyogIEByZXR1cm4gIEJvb3QgbW9kZSBvZiB0eXBlIGNoaXBjSHdfQk9PVF9NT0RFX2UKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgY2hpcGNId19CT09UX01PREVfZSBjaGlwY0h3X2dldEJvb3RNb2RlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IE5BTkQgZmxhc2ggcGFnZSBzaXplCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIE5BTkQgZGV2aWNlIHBhZ2Ugc2l6ZQorKgorKiAgQHJldHVybiAgQm9vdCBOQU5EIGRldmljZSBwYWdlIHNpemUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgY2hpcGNId19OQU5EX1BBR0VTSVpFX2UgY2hpcGNId19nZXROYW5kUGFnZVNpemUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgTkFORCBmbGFzaCBhZGRyZXNzIGN5Y2xlIGNvbmZpZ3VyYXRpb24KKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgTkFORCBmbGFzaCBhZGRyZXNzIGN5Y2xlIGNvbmZpZ3VyYXRpb24KKyoKKyogIEByZXR1cm4gIDAgPSBEbyBub3QgZXh0cmEgYWRkcmVzcyBjeWNsZSwgMSA9IEFkZCBleHRyYSBjeWNsZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBpbnQgY2hpcGNId19nZXROYW5kRXh0cmFDeWNsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEFjdGl2YXRlcyBQSUYgaW50ZXJmYWNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGFjdGl2YXRlcyBQSUYgaW50ZXJmYWNlIGJ5IHRha2luZyBjb250cm9sIG9mIExDRCBwaW5zCisqCisqICBAbm90ZQorKiAgICAgICBXaGVuIGFjdGl2YXRlZCwgTENEIHBpbnMgd2lsbCBiZSBkZWZpbmVkIGFzIGZvbGxvd3MgZm9yIFBJRiBvcGVyYXRpb24KKyoKKyogICAgICAgQ0xEWzE3OjBdICA9IHBpZl9kYXRhWzE3OjBdCisqICAgICAgIENMRFsyMzoxOF0gPSBwaWZfYWRkcmVzc1s1OjBdCisqICAgICAgIENMUE9XRVIgICAgPSBwaWZfd3Jfc3RyCisqICAgICAgIENMQ1AgICAgICAgPSBwaWZfcmRfc3RyCisqICAgICAgIENMQUMgICAgICAgPSBwaWZfaGF0MQorKiAgICAgICBDTEZQICAgICAgID0gcGlmX2hyZHkxCisqICAgICAgIENMTFAgICAgICAgPSBwaWZfaGF0MgorKiAgICAgICBHUElPWzQyXSAgID0gcGlmX2hyZHkyCisqCisqICAgICAgIEluIFBJRiBtb2RlLCAicGlmX2hyZHkyIiBvdmVycmlkZXMgb3RoZXIgc2hhcmVkIGZ1bmN0aW9uIGZvciBHUElPWzQyXSBwaW4KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2FjdGl2YXRlUGlmSW50ZXJmYWNlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQWN0aXZhdGVzIExDRCBpbnRlcmZhY2UKKyoKKyogIFRoaXMgZnVuY3Rpb24gYWN0aXZhdGVzIExDRCBpbnRlcmZhY2UKKyoKKyogIEBub3RlCisqICAgICAgIFdoZW4gYWN0aXZhdGVkLCBMQ0QgcGlucyB3aWxsIGJlIGRlZmluZWQgYXMgZm9sbG93cworKgorKiAgICAgICBDTERbMTc6MF0gID0gTENEIGRhdGEKKyogICAgICAgQ0xEWzIzOjE4XSA9IExDRCBkYXRhCisqICAgICAgIENMUE9XRVIgICAgPSBMQ0QgcG93ZXIKKyogICAgICAgQ0xDUCAgICAgICA9CisqICAgICAgIENMQUMgICAgICAgPSBMQ0QgYWNrCisqICAgICAgIENMRlAgICAgICAgPQorKiAgICAgICBDTExQICAgICAgID0KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2FjdGl2YXRlTGNkSW50ZXJmYWNlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGVhY3RpdmF0ZXMgUElGL0xDRCBpbnRlcmZhY2UKKyoKKyogIFRoaXMgZnVuY3Rpb24gZGVhY3RpdmF0ZXMgUElGL0xDRCBpbnRlcmZhY2UKKyoKKyogIEBub3RlCisqICAgICAgIFdoZW4gZGVhY3RpdmF0ZWQgTENEIHBpbnMgd2lsbCBiZSBpbiBydGktc3RhdGVkCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19kZWFjdGl2YXRlUGlmTGNkSW50ZXJmYWNlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IHRvIGtub3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgR1BJTyBwaW4KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgY2hpcGNId19HUElPX0ZVTkNUSU9OX2UgY2hpcGNId19nZXRHcGlvUGluRnVuY3Rpb24oaW50IHBpbgkvKiBHUElPIFBpbiBudW1iZXIgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ29uZmlndXJlIEdQSU8gcGluIGZ1bmN0aW9uCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRHcGlvUGluRnVuY3Rpb24oaW50IHBpbiwJLyogR1BJTyBQaW4gbnVtYmVyICovCisJCQkJCSAgICAgIGNoaXBjSHdfR1BJT19GVU5DVElPTl9lIGZ1bmMJLyogQ29uZmlndXJhdGlvbiBmdW5jdGlvbiAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgUGluIHNsZXcgcmF0ZQorKgorKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBzbGV3IG9mIGluZGl2aWR1YWwgcGluCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRQaW5TbGV3UmF0ZSh1aW50MzJfdCBwaW4sCS8qIFBpbiBvZiB0eXBlIGNoaXBjSHdfUElOX1hYWFhYICovCisJCQkJCSAgY2hpcGNId19QSU5fU0xFV19SQVRFX2Ugc2xld1JhdGUJLyogUGluIHNsZXcgcmF0ZSAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgUGluIG91dHB1dCBkcml2ZSBjdXJyZW50CisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgb3V0cHV0IGRyaXZlIGN1cnJlbnQgb2YgaW5kaXZpZHVhbCBwaW4KKyoKKyogIE5vdGU6IEF2b2lkIHRoZSB1c2Ugb2YgdGhlIHdvcmQgJ2N1cnJlbnQnIHNpbmNlIGxpbnV4IGhlYWRlcnMgZGVmaW5lIHRoaXMKKyogICAgICAgIHRvIGJlIHRoZSBjdXJyZW50IHRhc2suCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRQaW5PdXRwdXRDdXJyZW50KHVpbnQzMl90IHBpbiwJLyogUGluIG9mIHR5cGUgY2hpcGNId19QSU5fWFhYWFggKi8KKwkJCQkJICAgICAgIGNoaXBjSHdfUElOX0NVUlJFTlRfU1RSRU5HVEhfZSBjdXJyCS8qIFBpbiBjdXJyZW50IHJhdGluZyAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgUGluIHB1bGx1cCByZWdpc3RlcgorKgorKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHB1bGx1cCByZWdpc3RlciBvZiBpbmRpdmlkdWFsICBwaW4KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFBpblB1bGx1cCh1aW50MzJfdCBwaW4sCS8qIFBpbiBvZiB0eXBlIGNoaXBjSHdfUElOX1hYWFhYICovCisJCQkJCWNoaXBjSHdfUElOX1BVTExfZSBwdWxsdXAJLyogUHVsbHVwIHJlZ2lzdGVyIHNldHRpbmdzICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBQaW4gaW5wdXQgdHlwZQorKgorKiAgVGhpcyBmdW5jdGlvbiBzZXRzIGlucHV0IHR5cGUgb2YgaW5kaXZpZHVhbCBQaW4KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFBpbklucHV0VHlwZSh1aW50MzJfdCBwaW4sCS8qIFBpbiBvZiB0eXBlIGNoaXBjSHdfUElOX1hYWFhYICovCisJCQkJCSAgIGNoaXBjSHdfUElOX0lOUFVUVFlQRV9lIGlucHV0VHlwZQkvKiBQaW4gaW5wdXQgdHlwZSAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBSZXRyaWV2ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG11eCBzZXR0aW5nIGZvciBhIHBpbi4KKyoKKyogIEByZXR1cm4gIFBvaW50ZXIgdG8gYSBjaGFyYWN0ZXIgc3RyaW5nLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitjb25zdCBjaGFyICpjaGlwY0h3X2dldEdwaW9QaW5GdW5jdGlvblN0cihpbnQgcGluKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBpc3N1ZSB3YXJtUmVzZXQKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGNoaXBjSHdfcmVzZXQodWludDMyX3QgbWFzayk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgY2xvY2sgcmVjb25maWd1cmUKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGNoaXBjSHdfY2xvY2tSZWNvbmZpZyh1aW50MzJfdCBidXNIeiwgdWludDMyX3QgYXJtUmF0aW8sIHVpbnQzMl90IHZwbVJhdGlvLAorCQkJICAgdWludDMyX3QgZGRyUmF0aW8pOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlIFNwcmVhZCBTcGVjdHJ1bQorKgorKiAgQG5vdGUgY2hpcGNId19Jbml0KCkgbXVzdCBiZSBjYWxsZWQgZWFybGllcgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZW5hYmxlU3ByZWFkU3BlY3RydW0odm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlIFNwcmVhZCBTcGVjdHJ1bQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGlzYWJsZVNwcmVhZFNwZWN0cnVtKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIENoZWNrcyBpZiBzb2Z0d2FyZSBzdHJhcCBpcyBlbmFibGVkCisgKgorICogICBAcmV0dXJuIDEgOiBXaGVuIGVuYWJsZQorICogICAgICAgICAgIDAgOiBXaGVuIGRpc2FibGUKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIGludCBjaGlwY0h3X2lzU29mdHdhcmVTdHJhcHNFbmFibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgRW5hYmxlIHNvZnR3YXJlIHN0cmFwCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc29mdHdhcmVTdHJhcHNFbmFibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgRGlzYWJsZSBzb2Z0d2FyZSBzdHJhcAorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NvZnR3YXJlU3RyYXBzRGlzYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBQTEwgdGVzdCBlbmFibGUKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wbGxUZXN0RW5hYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIFBMTDIgdGVzdCBlbmFibGUKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wbGwyVGVzdEVuYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBQTEwgdGVzdCBkaXNhYmxlCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfcGxsVGVzdERpc2FibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgUExMMiB0ZXN0IGRpc2FibGUKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wbGwyVGVzdERpc2FibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgR2V0IFBMTCB0ZXN0IHN0YXR1cworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNoaXBjSHdfaXNQbGxUZXN0RW5hYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIEdldCBQTEwyIHRlc3Qgc3RhdHVzCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBpbnQgY2hpcGNId19pc1BsbDJUZXN0RW5hYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIFBMTCB0ZXN0IHNlbGVjdAorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3BsbFRlc3RTZWxlY3QodWludDMyX3QgdmFsKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBQTEwyIHRlc3Qgc2VsZWN0CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfcGxsMlRlc3RTZWxlY3QodWludDMyX3QgdmFsKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBHZXQgUExMIHRlc3Qgc2VsZWN0ZWQgb3B0aW9uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50OF90IGNoaXBjSHdfZ2V0UGxsVGVzdFNlbGVjdGVkKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIEdldCBQTEwyIHRlc3Qgc2VsZWN0ZWQgb3B0aW9uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50OF90IGNoaXBjSHdfZ2V0UGxsMlRlc3RTZWxlY3RlZCh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZXMgRERSIFNXIHBoYXNlIGFsaWdubWVudCBpbnRlcnJ1cHQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2RkclBoYXNlQWxpZ25JbnRlcnJ1cHRFbmFibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlcyBERFIgU1cgcGhhc2UgYWxpZ25tZW50IGludGVycnVwdAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRyUGhhc2VBbGlnbkludGVycnVwdERpc2FibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgVlBNIFNXIHBoYXNlIGFsaWdubWVudCBpbnRlcnJ1cHQgbW9kZQorKgorKiAgVGhpcyBmdW5jdGlvbiBzZXRzIFZQTSBwaGFzZSBhbGlnbm1lbnQgaW50ZXJydXB0CisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQKK2NoaXBjSHdfdnBtUGhhc2VBbGlnbkludGVycnVwdE1vZGUoY2hpcGNId19WUE1fSFdfUEhBU0VfSU5UUl9lIG1vZGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlIEREUiBwaGFzZSBhbGlnbm1lbnQgaW4gc29mdHdhcmUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2RkclN3UGhhc2VBbGlnbkVuYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGUgRERSIHBoYXNlIGFsaWdubWVudCBpbiBzb2Z0d2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRyU3dQaGFzZUFsaWduRGlzYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZSBERFIgcGhhc2UgYWxpZ25tZW50IGluIGhhcmR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19kZHJId1BoYXNlQWxpZ25FbmFibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlIEREUiBwaGFzZSBhbGlnbm1lbnQgaW4gaGFyZHdhcmUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2Rkckh3UGhhc2VBbGlnbkRpc2FibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBFbmFibGUgVlBNIHBoYXNlIGFsaWdubWVudCBpbiBzb2Z0d2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfdnBtU3dQaGFzZUFsaWduRW5hYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGlzYWJsZSBWUE0gcGhhc2UgYWxpZ25tZW50IGluIHNvZnR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Td1BoYXNlQWxpZ25EaXNhYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlIFZQTSBwaGFzZSBhbGlnbm1lbnQgaW4gaGFyZHdhcmUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3ZwbUh3UGhhc2VBbGlnbkVuYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGUgVlBNIHBoYXNlIGFsaWdubWVudCBpbiBoYXJkd2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfdnBtSHdQaGFzZUFsaWduRGlzYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBERFIgcGhhc2UgYWxpZ25tZW50IG1hcmdpbiBpbiBoYXJkd2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0RGRySHdQaGFzZUFsaWduTWFyZ2luKGNoaXBjSHdfRERSX0hXX1BIQVNFX01BUkdJTl9lIG1hcmdpbgkvKiBNYXJnaW4gYWxpbmdpbmcgRERSICBwaGFzZSAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgVlBNIHBoYXNlIGFsaWdubWVudCBtYXJnaW4gaW4gaGFyZHdhcmUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFZwbUh3UGhhc2VBbGlnbk1hcmdpbihjaGlwY0h3X1ZQTV9IV19QSEFTRV9NQVJHSU5fZSBtYXJnaW4JLyogTWFyZ2luIGFsaW5naW5nIFZQTSAgcGhhc2UgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ2hlY2tzIEREUiBwaGFzZSBhbGlnbmVkIHN0YXR1cyBkb25lIGJ5IEhXCisqCisqICBAcmV0dXJuICAxOiBXaGVuIGFsaWduZWQKKyogICAgICAgICAgIDA6IFdoZW4gbm90IGFsaWduZWQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19pc0Rkckh3UGhhc2VBbGlnbmVkKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ2hlY2tzIFZQTSBwaGFzZSBhbGlnbmVkIHN0YXR1cyBkb25lIGJ5IEhXCisqCisqICBAcmV0dXJuICAxOiBXaGVuIGFsaWduZWQKKyogICAgICAgICAgIDA6IFdoZW4gbm90IGFsaWduZWQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19pc1ZwbUh3UGhhc2VBbGlnbmVkKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IEREUiBwaGFzZSBhbGlnbmVkIHN0YXR1cyBkb25lIGJ5IEhXCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0RGRySHdQaGFzZUFsaWduU3RhdHVzKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IFZQTSBwaGFzZSBhbGlnbmVkIHN0YXR1cyBkb25lIGJ5IEhXCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0VnBtSHdQaGFzZUFsaWduU3RhdHVzKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IEREUiBwaGFzZSBjb250cm9sIHZhbHVlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0RGRyUGhhc2VDb250cm9sKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IFZQTSBwaGFzZSBjb250cm9sIHZhbHVlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0VnBtUGhhc2VDb250cm9sKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRERSIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGNvdW50CisqCisqICBAbm90ZSAgICBJZiBIVyBmYWlscyB0byBwZXJmb3JtIHRoZSBwaGFzZSBhbGlnbm1lbnQsIGl0IHdpbGwgdHJpZ2dlcgorKiAgICAgICAgICAgYSBERFIgcGhhc2UgYWxpZ25tZW50IHRpbWVvdXQgaW50ZXJydXB0LgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRySHdQaGFzZUFsaWduVGltZW91dCh1aW50MzJfdCBidXNDeWNsZQkvKiBUaW1lb3V0IGluIGJ1cyBjeWNsZSAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBWUE0gcGhhc2UgYWxpZ25tZW50IHRpbWVvdXQgY291bnQKKyoKKyogIEBub3RlICAgIElmIEhXIGZhaWxzIHRvIHBlcmZvcm0gdGhlIHBoYXNlIGFsaWdubWVudCwgaXQgd2lsbCB0cmlnZ2VyCisqICAgICAgICAgICBhIFZQTSBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Id1BoYXNlQWxpZ25UaW1lb3V0KHVpbnQzMl90IGJ1c0N5Y2xlCS8qIFRpbWVvdXQgaW4gYnVzIGN5Y2xlICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEREUiBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQgZW5hYmxlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19kZHJId1BoYXNlQWxpZ25UaW1lb3V0SW50ZXJydXB0RW5hYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgVlBNIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGludGVycnVwdCBlbmFibGUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3ZwbUh3UGhhc2VBbGlnblRpbWVvdXRJbnRlcnJ1cHRFbmFibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBERFIgcGhhc2UgYWxpZ25tZW50IHRpbWVvdXQgaW50ZXJydXB0IGRpc2FibGUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2Rkckh3UGhhc2VBbGlnblRpbWVvdXRJbnRlcnJ1cHREaXNhYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgVlBNIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGludGVycnVwdCBkaXNhYmxlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Id1BoYXNlQWxpZ25UaW1lb3V0SW50ZXJydXB0RGlzYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENsZWFyIEREUiBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2Rkckh3UGhhc2VBbGlnblRpbWVvdXRJbnRlcnJ1cHRDbGVhcih2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENsZWFyIFZQTSBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3ZwbUh3UGhhc2VBbGlnblRpbWVvdXRJbnRlcnJ1cHRDbGVhcih2b2lkKTsKKworLyogLS0tLSBQcml2YXRlIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2VuZGlmIC8qIENISVBDX0RFRl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jaGlwY0h3X2lubGluZS5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzg4MzNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaApAQCAtMCwwICsxLDE2NzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgQ0hJUENfSU5MSU5FX0gKKyNkZWZpbmUgQ0hJUENfSU5MSU5FX0gKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlIDxjc3AvZXJybm8uaD4KKyNpbmNsdWRlIDxjc3AvcmVnLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19yZWcuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9jaGlwY0h3X2RlZi5oPgorCisvKiAtLS0tIFByaXZhdGUgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3R5cGVkZWYgZW51bSB7CisJY2hpcGNId19PUFRZUEVfQllQQVNTLAkvKiBCeXBhc3Mgb3BlcmF0aW9uICovCisJY2hpcGNId19PUFRZUEVfT1VUUFVUCS8qIE91dHB1dCBvcGVyYXRpb24gKi8KK30gY2hpcGNId19PUFRZUEVfZTsKKworLyogLS0tLSBQdWJsaWMgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHVibGljIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQcml2YXRlIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRDbG9jayhjaGlwY0h3X0NMT0NLX2UgY2xvY2ssCisJCQkJICAgIGNoaXBjSHdfT1BUWVBFX2UgdHlwZSwgaW50IG1vZGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IE51bWVyaWMgQ2hpcCBJRAorKgorKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIENoaXAgSUQgdGhhdCBpbmNsdWRlcyB0aGUgcmV2aXNvbiBudW1iZXIKKyoKKyogIEByZXR1cm4gIENvbXBsZXRlIG51bWVyaWMgQ2hpcCBJRAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2dldENoaXBJZCh2b2lkKQoreworCXJldHVybiBwQ2hpcGNIdy0+Q2hpcElkOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlIFNwcmVhZCBTcGVjdHJ1bQorKgorKiAgQG5vdGUgY2hpcGNId19Jbml0KCkgbXVzdCBiZSBjYWxsZWQgZWFybGllcgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZW5hYmxlU3ByZWFkU3BlY3RydW0odm9pZCkKK3sKKwlpZiAoKHBDaGlwY0h3LT4KKwkgICAgIFBMTFByZURpdmlkZXIgJiBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX01PREVfTUFTSykgIT0KKwkgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NT0RFX0lOVEVHRVIpIHsKKwkJZGRyY1JlZ19QSFlfQUREUl9DVExfUkVHUC0+c3NDZmcgPQorCQkgICAgKDB4RkZGRiA8PCBkZHJjUmVnX1BIWV9BRERSX1NTX0NGR19ORElWX0FNUExJVFVERV9TSElGVCkgfAorCQkgICAgKGRkcmNSZWdfUEhZX0FERFJfU1NfQ0ZHX01JTl9DWUNMRV9QRVJfVElDSyA8PAorCQkgICAgIGRkcmNSZWdfUEhZX0FERFJfU1NfQ0ZHX0NZQ0xFX1BFUl9USUNLX1NISUZUKTsKKwkJZGRyY1JlZ19QSFlfQUREUl9DVExfUkVHUC0+c3NDdGwgfD0KKwkJICAgIGRkcmNSZWdfUEhZX0FERFJfU1NfQ1RSTF9FTkFCTEU7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGlzYWJsZSBTcHJlYWQgU3BlY3RydW0KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2Rpc2FibGVTcHJlYWRTcGVjdHJ1bSh2b2lkKQoreworCWRkcmNSZWdfUEhZX0FERFJfQ1RMX1JFR1AtPnNzQ3RsICY9IH5kZHJjUmVnX1BIWV9BRERSX1NTX0NUUkxfRU5BQkxFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IENoaXAgUHJvZHVjdCBJRAorKgorKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIENoaXAgUHJvZHVjdCBJRAorKgorKiAgQHJldHVybiAgQ2hpcCBQcm9kdWN0IElECisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0Q2hpcFByb2R1Y3RJZCh2b2lkKQoreworCXJldHVybiAocENoaXBjSHctPgorCQkgQ2hpcElkICYgY2hpcGNId19SRUdfQ0hJUElEX0JBU0VfTUFTSykgPj4KKwkJY2hpcGNId19SRUdfQ0hJUElEX0JBU0VfU0hJRlQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgcmV2aXNpb24gbnVtYmVyCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBjaGlwCisqCisqICBAcmV0dXJuICBSZXZpc2lvbiBudW1iZXIKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgY2hpcGNId19SRVZfTlVNQkVSX2UgY2hpcGNId19nZXRDaGlwUmV2aXNpb25OdW1iZXIodm9pZCkKK3sKKwlyZXR1cm4gcENoaXBjSHctPkNoaXBJZCAmIGNoaXBjSHdfUkVHX0NISVBJRF9SRVZfTUFTSzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZXMgYnVzIGludGVyZmFjZSBjbG9jaworKgorKiAgRW5hYmxlcyAgYnVzIGludGVyZmFjZSBjbG9jayBvZiB2YXJpb3VzIGRldmljZQorKgorKiAgQHJldHVybiAgdm9pZAorKgorKiAgQG5vdGUgICAgdXNlIGNoaXBjSHdfUkVHX0JVU19DTE9DS19YWFhYIGZvciBtYXNrCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19idXNJbnRlcmZhY2VDbG9ja0VuYWJsZSh1aW50MzJfdCBtYXNrKQoreworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPkJ1c0ludGZDbG9jaywgbWFzayk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlcyBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBEaXNhYmxlcyAgYnVzIGludGVyZmFjZSBjbG9jayBvZiB2YXJpb3VzIGRldmljZQorKgorKiAgQHJldHVybiAgdm9pZAorKgorKiAgQG5vdGUgICAgdXNlIGNoaXBjSHdfUkVHX0JVU19DTE9DS19YWFhYCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19idXNJbnRlcmZhY2VDbG9ja0Rpc2FibGUodWludDMyX3QgbWFzaykKK3sKKwlyZWczMl9tb2RpZnlfYW5kKCZwQ2hpcGNIdy0+QnVzSW50ZkNsb2NrLCB+bWFzayk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgc3RhdHVzIChlbmFibGVkL2Rpc2FibGVkKSBvZiBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN0YXR1cyBvZiBkZXZpY2VzJyBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBAcmV0dXJuICBCdXMgaW50ZXJmYWNlIGNsb2NrCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0QnVzSW50ZXJmYWNlQ2xvY2tTdGF0dXModm9pZCkKK3sKKwlyZXR1cm4gcENoaXBjSHctPkJ1c0ludGZDbG9jazsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZXMgdmFyaW91cyBhdWRpbyBjaGFubmVscworKgorKiAgRW5hYmxlcyBhdWRpbyBjaGFubmVsCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqICBAbm90ZSAgICB1c2UgY2hpcGNId19SRUdfQVVESU9fQ0hBTk5FTF9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2F1ZGlvQ2hhbm5lbEVuYWJsZSh1aW50MzJfdCBtYXNrKQoreworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPkF1ZGlvRW5hYmxlLCBtYXNrKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGVzIHZhcmlvdXMgYXVkaW8gY2hhbm5lbHMKKyoKKyogIERpc2FibGVzIGF1ZGlvIGNoYW5uZWwKKyoKKyogIEByZXR1cm4gIHZvaWQKKyoKKyogIEBub3RlICAgIHVzZSBjaGlwY0h3X1JFR19BVURJT19DSEFOTkVMX1hYWFhYWAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfYXVkaW9DaGFubmVsRGlzYWJsZSh1aW50MzJfdCBtYXNrKQoreworCXJlZzMyX21vZGlmeV9hbmQoJnBDaGlwY0h3LT5BdWRpb0VuYWJsZSwgfm1hc2spOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgIFNvZnQgcmVzZXRzIGRldmljZXMKKyoKKyogIFNvZnQgcmVzZXRzIHZhcmlvdXMgZGV2aWNlcworKgorKiAgQHJldHVybiAgIHZvaWQKKyoKKyogIEBub3RlICAgICB1c2UgY2hpcGNId19SRUdfU09GVF9SRVNFVF9YWFhYWFggZGVmaW5lcworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc29mdFJlc2V0KHVpbnQ2NF90IG1hc2spCit7CisJY2hpcGNId19zb2Z0UmVzZXRFbmFibGUobWFzayk7CisJY2hpcGNId19zb2Z0UmVzZXREaXNhYmxlKG1hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zb2Z0UmVzZXREaXNhYmxlKHVpbnQ2NF90IG1hc2spCit7CisJdWludDMyX3QgY3RybDEgPSAodWludDMyX3QpIG1hc2s7CisJdWludDMyX3QgY3RybDIgPSAodWludDMyX3QpIChtYXNrID4+IDMyKTsKKworCS8qIERlYXNzZXJ0IG1vZHVsZSBzb2Z0IHJlc2V0ICovCisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCXBDaGlwY0h3LT5Tb2Z0UmVzZXQxIF49IGN0cmwxOworCXBDaGlwY0h3LT5Tb2Z0UmVzZXQyIF49IChjdHJsMiAmICh+Y2hpcGNId19SRUdfU09GVF9SRVNFVF9VTkhPTERfTUFTSykpOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc29mdFJlc2V0RW5hYmxlKHVpbnQ2NF90IG1hc2spCit7CisJdWludDMyX3QgY3RybDEgPSAodWludDMyX3QpIG1hc2s7CisJdWludDMyX3QgY3RybDIgPSAodWludDMyX3QpIChtYXNrID4+IDMyKTsKKwl1aW50MzJfdCB1bmhvbGQgPSAwOworCisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCXBDaGlwY0h3LT5Tb2Z0UmVzZXQxIHw9IGN0cmwxOworCS8qIE1hc2sgb3V0IHVuaG9sZCByZXF1ZXN0IGJpdHMgKi8KKwlwQ2hpcGNIdy0+U29mdFJlc2V0MiB8PSAoY3RybDIgJiAofmNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVU5IT0xEX01BU0spKTsKKworCS8qIFByb2Nlc3MgdW5ob2xkIHJlcXVlc3RzICovCisJaWYgKGN0cmwyICYgY2hpcGNId19SRUdfU09GVF9SRVNFVF9WUE1fR0xPQkFMX1VOSE9MRCkgeworCQl1bmhvbGQgPSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1ZQTV9HTE9CQUxfSE9MRDsKKwl9CisKKwlpZiAoY3RybDIgJiBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1ZQTV9VTkhPTEQpIHsKKwkJdW5ob2xkIHw9IGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVlBNX0hPTEQ7CisJfQorCisJaWYgKGN0cmwyICYgY2hpcGNId19SRUdfU09GVF9SRVNFVF9BUk1fVU5IT0xEKSB7CisJCXVuaG9sZCB8PSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0FSTV9IT0xEOworCX0KKworCWlmICh1bmhvbGQpIHsKKwkJLyogTWFrZSBzdXJlIHVuaG9sZCByZXF1ZXN0IGlzIGVmZmVjdGl2ZSAqLworCQlwQ2hpcGNIdy0+U29mdFJlc2V0MSAmPSB+dW5ob2xkOworCX0KKwlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICAgQ29uZmlndXJlcyBtaXNjIENISVAgZnVuY3Rpb25hbGl0eQorKgorKiAgQ29uZmlndXJlcyBDSElQIGZ1bmN0aW9uYWxpdHkKKyoKKyogIEByZXR1cm4gICB2b2lkCisqCisqICBAbm90ZSAgICAgdXNlIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X21pc2NDb250cm9sKHVpbnQzMl90IG1hc2spCit7CisJcmVnMzJfd3JpdGUoJnBDaGlwY0h3LT5NaXNjQ3RybCwgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X21pc2NDb250cm9sRGlzYWJsZSh1aW50MzJfdCBtYXNrKQoreworCXJlZzMyX21vZGlmeV9hbmQoJnBDaGlwY0h3LT5NaXNjQ3RybCwgfm1hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19taXNjQ29udHJvbEVuYWJsZSh1aW50MzJfdCBtYXNrKQoreworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPk1pc2NDdHJsLCBtYXNrKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBTZXQgT1RQIG9wdGlvbnMKKyoKKyogIFNldCBPVFAgb3B0aW9ucworKgorKiAgQHJldHVybiAgIHZvaWQKKyoKKyogIEBub3RlICAgICB1c2UgY2hpcGNId19SRUdfT1RQX1hYWFhYWAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0T1RQT3B0aW9uKHVpbnQ2NF90IG1hc2spCit7CisJdWludDMyX3QgY3RybDEgPSAodWludDMyX3QpIG1hc2s7CisJdWludDMyX3QgY3RybDIgPSAodWludDMyX3QpIChtYXNrID4+IDMyKTsKKworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPlNvZnRPVFAxLCBjdHJsMSk7CisJcmVnMzJfbW9kaWZ5X29yKCZwQ2hpcGNIdy0+U29mdE9UUDIsIGN0cmwyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBHZXQgc3RpY2t5IGJpdHMKKyoKKyogIEByZXR1cm4gICBTdGlja3kgYml0IG9wdGlvbnMgb2YgdHlwZSBjaGlwY0h3X1JFR19TVElDS1lfWFhYWFhYCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0U3RpY2t5Qml0cyh2b2lkKQoreworCXJldHVybiBwQ2hpcGNIdy0+U3RpY2t5OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgIFNldCBzdGlja3kgYml0cworKgorKiAgQHJldHVybiAgIHZvaWQKKyoKKyogIEBub3RlICAgICB1c2UgY2hpcGNId19SRUdfU1RJQ0tZX1hYWFhYWAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0U3RpY2t5Qml0cyh1aW50MzJfdCBtYXNrKQoreworCXVpbnQzMl90IGJpdHMgPSAwOworCisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCWlmIChtYXNrICYgY2hpcGNId19SRUdfU1RJQ0tZX1BPUl9CUk9NKSB7CisJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX1BPUl9CUk9NOworCX0gZWxzZSB7CisJCXVpbnQzMl90IHN0aWNreTsKKwkJc3RpY2t5ID0gcENoaXBjSHctPlN0aWNreTsKKworCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfQk9PVF9ET05FKQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9CT09UX0RPTkUpID09IDApIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0JPT1RfRE9ORTsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8xKQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzEpID09IDApIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMTsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8yKQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzIpID09IDApIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMjsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8zKQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzMpID09IDApIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMzsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF80KQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzQpID09IDApIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfNDsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF81KQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzUpID09IDApIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfNTsKKwkJfQorCX0KKwlwQ2hpcGNIdy0+U3RpY2t5ID0gYml0czsKKwlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICAgQ2xlYXIgc3RpY2t5IGJpdHMKKyoKKyogIEByZXR1cm4gICB2b2lkCisqCisqICBAbm90ZSAgICAgdXNlIGNoaXBjSHdfUkVHX1NUSUNLWV9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2NsZWFyU3RpY2t5Qml0cyh1aW50MzJfdCBtYXNrKQoreworCXVpbnQzMl90IGJpdHMgPSAwOworCisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCWlmIChtYXNrICYKKwkgICAgKGNoaXBjSHdfUkVHX1NUSUNLWV9CT09UX0RPTkUgfCBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8xIHwKKwkgICAgIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzIgfCBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8zIHwKKwkgICAgIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzQgfCBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF81KSkgeworCQl1aW50MzJfdCBzdGlja3kgPSBwQ2hpcGNIdy0+U3RpY2t5OworCisJCWlmICgobWFzayAmIGNoaXBjSHdfUkVHX1NUSUNLWV9CT09UX0RPTkUpCisJCSAgICAmJiAoc3RpY2t5ICYgY2hpcGNId19SRUdfU1RJQ0tZX0JPT1RfRE9ORSkpIHsKKwkJCWJpdHMgPSBjaGlwY0h3X1JFR19TVElDS1lfQk9PVF9ET05FOworCQkJbWFzayAmPSB+Y2hpcGNId19SRUdfU1RJQ0tZX0JPT1RfRE9ORTsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8xKQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzEpKSB7CisJCQliaXRzIHw9IGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzE7CisJCQltYXNrICY9IH5jaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8xOworCQl9CisJCWlmICgobWFzayAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzIpCisJCSAgICAmJiAoc3RpY2t5ICYgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMikpIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMjsKKwkJCW1hc2sgJj0gfmNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzI7CisJCX0KKwkJaWYgKChtYXNrICYgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMykKKwkJICAgICYmIChzdGlja3kgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8zKSkgeworCQkJYml0cyB8PSBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8zOworCQkJbWFzayAmPSB+Y2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMzsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF80KQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzQpKSB7CisJCQliaXRzIHw9IGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzQ7CisJCQltYXNrICY9IH5jaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF80OworCQl9CisJCWlmICgobWFzayAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzUpCisJCSAgICAmJiAoc3RpY2t5ICYgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfNSkpIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfNTsKKwkJCW1hc2sgJj0gfmNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzU7CisJCX0KKwl9CisJcENoaXBjSHctPlN0aWNreSA9IGJpdHMgfCBtYXNrOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBHZXQgc29mdHdhcmUgc3RyYXAgdmFsdWUKKyoKKyogIFJldHJpZXZlcyBzb2Z0d2FyZSBzdHJhcCB2YWx1ZQorKgorKiAgQHJldHVybiAgIFNvZnR3YXJlIHN0cmFwIHZhbHVlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0U29mdFN0cmFwcyh2b2lkKQoreworCXJldHVybiBwQ2hpcGNIdy0+U29mdFN0cmFwczsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBTZXQgc29mdHdhcmUgb3ZlcnJpZGUgc3RyYXAgb3B0aW9ucworKgorKiAgc2V0IHNvZnR3YXJlIG92ZXJyaWRlIHN0cmFwIG9wdGlvbnMKKyoKKyogIEByZXR1cm4gICBub3RoaW5nCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRTb2Z0U3RyYXBzKHVpbnQzMl90IHN0cmFwT3B0aW9ucykKK3sKKwlyZWczMl93cml0ZSgmcENoaXBjSHctPlNvZnRTdHJhcHMsIHN0cmFwT3B0aW9ucyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgUGluIFN0cmFwIE9wdGlvbnMKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmF3IGJvb3Qgc3RyYXAgb3B0aW9ucworKgorKiAgQHJldHVybiAgc3RyYXAgb3B0aW9ucworKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2dldFBpblN0cmFwcyh2b2lkKQoreworCXJldHVybiBwQ2hpcGNIdy0+UGluU3RyYXBzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IFZhbGlkIFN0cmFwIE9wdGlvbnMKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsaWQgcmF3IGJvb3Qgc3RyYXAgb3B0aW9ucworKgorKiAgQHJldHVybiAgc3RyYXAgb3B0aW9ucworKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2dldFZhbGlkU3RyYXBzKHZvaWQpCit7CisJdWludDMyX3Qgc29mdFN0cmFwczsKKworCS8qCisJICoqIEFsd2F5cyByZXR1cm4gdGhlIFNvZnRTdHJhcHMgLSBib290Uk9NIGNhbGxzIGNoaXBjSHdfaW5pdFZhbGlkU3RyYXBzCisJICoqIHdoaWNoIGNvcGllcyBIVyBzdHJhcHMgdG8gc29mdCBzdHJhcHMgaWYgdGhlcmUgaXMgbm8gb3ZlcnJpZGUKKwkgKi8KKwlzb2Z0U3RyYXBzID0gY2hpcGNId19nZXRTb2Z0U3RyYXBzKCk7CisKKwlyZXR1cm4gc29mdFN0cmFwczsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBJbml0aWFsaXplIHZhbGlkIHBpbiBzdHJhcCBvcHRpb25zCisqCisqICBSZXRyaWV2ZXMgdmFsaWQgcGluIHN0cmFwIG9wdGlvbnMgYnkgY29weWluZyBIVyBzdHJhcCBvcHRpb25zIHRvIHNvZnQgcmVnaXN0ZXIKKyogIChpZiBjaGlwY0h3X1NUUkFQU19TT0ZUX09WRVJSSURFIG5vdCBzZXQpCisqCisqICBAcmV0dXJuICAgbm90aGluZworKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfaW5pdFZhbGlkU3RyYXBzKHZvaWQpCit7CisJdWludDMyX3Qgc29mdFN0cmFwczsKKworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlzb2Z0U3RyYXBzID0gY2hpcGNId19nZXRTb2Z0U3RyYXBzKCk7CisKKwlpZiAoKHNvZnRTdHJhcHMgJiBjaGlwY0h3X1NUUkFQU19TT0ZUX09WRVJSSURFKSA9PSAwKSB7CisJCS8qIENvcHkgSFcgc3RyYXBzIHRvIHNvZnR3YXJlIHN0cmFwcyAqLworCQljaGlwY0h3X3NldFNvZnRTdHJhcHMoY2hpcGNId19nZXRQaW5TdHJhcHMoKSk7CisJfQorCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCBib290IGRldmljZQorKgorKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBkZXZpY2UgdHlwZSB1c2VkIGluIGJvb3RpbmcgdGhlIHN5c3RlbQorKgorKiAgQHJldHVybiAgQm9vdCBkZXZpY2Ugb2YgdHlwZSBjaGlwY0h3X0JPT1RfREVWSUNFCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIGNoaXBjSHdfQk9PVF9ERVZJQ0VfZSBjaGlwY0h3X2dldEJvb3REZXZpY2Uodm9pZCkKK3sKKwlyZXR1cm4gY2hpcGNId19nZXRWYWxpZFN0cmFwcygpICYgY2hpcGNId19TVFJBUFNfQk9PVF9ERVZJQ0VfTUFTSzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCBib290IG1vZGUKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgd2F5IHRoZSBzeXN0ZW0gd2FzIGJvb3RlZAorKgorKiAgQHJldHVybiAgQm9vdCBtb2RlIG9mIHR5cGUgY2hpcGNId19CT09UX01PREUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgY2hpcGNId19CT09UX01PREVfZSBjaGlwY0h3X2dldEJvb3RNb2RlKHZvaWQpCit7CisJcmV0dXJuIGNoaXBjSHdfZ2V0VmFsaWRTdHJhcHMoKSAmIGNoaXBjSHdfU1RSQVBTX0JPT1RfTU9ERV9NQVNLOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IE5BTkQgZmxhc2ggcGFnZSBzaXplCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIE5BTkQgZGV2aWNlIHBhZ2Ugc2l6ZQorKgorKiAgQHJldHVybiAgQm9vdCBOQU5EIGRldmljZSBwYWdlIHNpemUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgY2hpcGNId19OQU5EX1BBR0VTSVpFX2UgY2hpcGNId19nZXROYW5kUGFnZVNpemUodm9pZCkKK3sKKwlyZXR1cm4gY2hpcGNId19nZXRWYWxpZFN0cmFwcygpICYgY2hpcGNId19TVFJBUFNfTkFORF9QQUdFU0laRV9NQVNLOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IE5BTkQgZmxhc2ggYWRkcmVzcyBjeWNsZSBjb25maWd1cmF0aW9uCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIE5BTkQgZmxhc2ggYWRkcmVzcyBjeWNsZSBjb25maWd1cmF0aW9uCisqCisqICBAcmV0dXJuICAwID0gRG8gbm90IGV4dHJhIGFkZHJlc3MgY3ljbGUsIDEgPSBBZGQgZXh0cmEgY3ljbGUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNoaXBjSHdfZ2V0TmFuZEV4dHJhQ3ljbGUodm9pZCkKK3sKKwlpZiAoY2hpcGNId19nZXRWYWxpZFN0cmFwcygpICYgY2hpcGNId19TVFJBUFNfTkFORF9FWFRSQV9DWUNMRSkgeworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBBY3RpdmF0ZXMgUElGIGludGVyZmFjZQorKgorKiAgVGhpcyBmdW5jdGlvbiBhY3RpdmF0ZXMgUElGIGludGVyZmFjZSBieSB0YWtpbmcgY29udHJvbCBvZiBMQ0QgcGlucworKgorKiAgQG5vdGUKKyogICAgICAgV2hlbiBhY3RpdmF0ZWQsIExDRCBwaW5zIHdpbGwgYmUgZGVmaW5lZCBhcyBmb2xsb3dzIGZvciBQSUYgb3BlcmF0aW9uCisqCisqICAgICAgIENMRFsxNzowXSAgPSBwaWZfZGF0YVsxNzowXQorKiAgICAgICBDTERbMjM6MThdID0gcGlmX2FkZHJlc3NbNTowXQorKiAgICAgICBDTFBPV0VSICAgID0gcGlmX3dyX3N0cgorKiAgICAgICBDTENQICAgICAgID0gcGlmX3JkX3N0cgorKiAgICAgICBDTEFDICAgICAgID0gcGlmX2hhdDEKKyogICAgICAgQ0xGUCAgICAgICA9IHBpZl9ocmR5MQorKiAgICAgICBDTExQICAgICAgID0gcGlmX2hhdDIKKyogICAgICAgR1BJT1s0Ml0gICA9IHBpZl9ocmR5MgorKgorKiAgICAgICBJbiBQSUYgbW9kZSwgInBpZl9ocmR5MiIgb3ZlcnJpZGVzIG90aGVyIHNoYXJlZCBmdW5jdGlvbiBmb3IgR1BJT1s0Ml0gcGluCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19hY3RpdmF0ZVBpZkludGVyZmFjZSh2b2lkKQoreworCXJlZzMyX3dyaXRlKCZwQ2hpcGNIdy0+TGNkUGlmTW9kZSwgY2hpcGNId19SRUdfUElGX1BJTl9FTkFCTEUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQWN0aXZhdGVzIExDRCBpbnRlcmZhY2UKKyoKKyogIFRoaXMgZnVuY3Rpb24gYWN0aXZhdGVzIExDRCBpbnRlcmZhY2UKKyoKKyogIEBub3RlCisqICAgICAgIFdoZW4gYWN0aXZhdGVkLCBMQ0QgcGlucyB3aWxsIGJlIGRlZmluZWQgYXMgZm9sbG93cworKgorKiAgICAgICBDTERbMTc6MF0gID0gTENEIGRhdGEKKyogICAgICAgQ0xEWzIzOjE4XSA9IExDRCBkYXRhCisqICAgICAgIENMUE9XRVIgICAgPSBMQ0QgcG93ZXIKKyogICAgICAgQ0xDUCAgICAgICA9CisqICAgICAgIENMQUMgICAgICAgPSBMQ0QgYWNrCisqICAgICAgIENMRlAgICAgICAgPQorKiAgICAgICBDTExQICAgICAgID0KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2FjdGl2YXRlTGNkSW50ZXJmYWNlKHZvaWQpCit7CisJcmVnMzJfd3JpdGUoJnBDaGlwY0h3LT5MY2RQaWZNb2RlLCBjaGlwY0h3X1JFR19MQ0RfUElOX0VOQUJMRSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEZWFjdGl2YXRlcyBQSUYvTENEIGludGVyZmFjZQorKgorKiAgVGhpcyBmdW5jdGlvbiBkZWFjdGl2YXRlcyBQSUYvTENEIGludGVyZmFjZQorKgorKiAgQG5vdGUKKyogICAgICAgV2hlbiBkZWFjdGl2YXRlZCBMQ0QgcGlucyB3aWxsIGJlIGluIHJ0aS1zdGF0ZWQKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2RlYWN0aXZhdGVQaWZMY2RJbnRlcmZhY2Uodm9pZCkKK3sKKwlyZWczMl93cml0ZSgmcENoaXBjSHctPkxjZFBpZk1vZGUsIDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2VsZWN0IEdFMgorKgorKiAgVGhpcyBmdW5jdGlvbiBzZWxlY3QgR0UyIGFzIHRoZSBncmFwaGljIGVuZ2luZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2VsZWN0R0UyKHZvaWQpCit7CisJcmVnMzJfbW9kaWZ5X2FuZCgmcENoaXBjSHctPk1pc2NDdHJsLCB+Y2hpcGNId19SRUdfTUlTQ19DVFJMX0dFX1NFTCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZWxlY3QgR0UzCisqCisqICBUaGlzIGZ1bmN0aW9uIHNlbGVjdCBHRTMgYXMgdGhlIGdyYXBoaWMgZW5naW5lCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZWxlY3RHRTModm9pZCkKK3sKKwlyZWczMl9tb2RpZnlfb3IoJnBDaGlwY0h3LT5NaXNjQ3RybCwgY2hpcGNId19SRUdfTUlTQ19DVFJMX0dFX1NFTCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgdG8ga25vdyB0aGUgY29uZmlndXJhdGlvbiBvZiBHUElPIHBpbgorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBjaGlwY0h3X0dQSU9fRlVOQ1RJT05fZSBjaGlwY0h3X2dldEdwaW9QaW5GdW5jdGlvbihpbnQgcGluKQoreworCXJldHVybiAoKigodWludDMyX3QgKikgY2hpcGNId19SRUdfR1BJT19NVVgocGluKSkgJgorCQkoY2hpcGNId19SRUdfR1BJT19NVVhfTUFTSyA8PAorCQkgY2hpcGNId19SRUdfR1BJT19NVVhfUE9TSVRJT04ocGluKSkpID4+CisJICAgIGNoaXBjSHdfUkVHX0dQSU9fTVVYX1BPU0lUSU9OKHBpbik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBDb25maWd1cmUgR1BJTyBwaW4gZnVuY3Rpb24KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldEdwaW9QaW5GdW5jdGlvbihpbnQgcGluLAorCQkJCQkgICAgICBjaGlwY0h3X0dQSU9fRlVOQ1RJT05fZSBmdW5jKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwkqKCh1aW50MzJfdCAqKSBjaGlwY0h3X1JFR19HUElPX01VWChwaW4pKSAmPQorCSAgICB+KGNoaXBjSHdfUkVHX0dQSU9fTVVYX01BU0sgPDwgY2hpcGNId19SRUdfR1BJT19NVVhfUE9TSVRJT04ocGluKSk7CisJKigodWludDMyX3QgKikgY2hpcGNId19SRUdfR1BJT19NVVgocGluKSkgfD0KKwkgICAgZnVuYyA8PCBjaGlwY0h3X1JFR19HUElPX01VWF9QT1NJVElPTihwaW4pOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBQaW4gc2xldyByYXRlCisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHNsZXcgb2YgaW5kaXZpZHVhbCBwaW4KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFBpblNsZXdSYXRlKHVpbnQzMl90IHBpbiwKKwkJCQkJICBjaGlwY0h3X1BJTl9TTEVXX1JBVEVfZSBzbGV3UmF0ZSkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJKigodWludDMyX3QgKikgY2hpcGNId19SRUdfU0xFV19SQVRFKHBpbikpICY9CisJICAgIH4oY2hpcGNId19SRUdfU0xFV19SQVRFX01BU0sgPDwKKwkgICAgICBjaGlwY0h3X1JFR19TTEVXX1JBVEVfUE9TSVRJT04ocGluKSk7CisJKigodWludDMyX3QgKikgY2hpcGNId19SRUdfU0xFV19SQVRFKHBpbikpIHw9CisJICAgICh1aW50MzJfdCkgc2xld1JhdGUgPDwgY2hpcGNId19SRUdfU0xFV19SQVRFX1BPU0lUSU9OKHBpbik7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IFBpbiBvdXRwdXQgZHJpdmUgY3VycmVudAorKgorKiAgVGhpcyBmdW5jdGlvbiBzZXRzIG91dHB1dCBkcml2ZSBjdXJyZW50IG9mIGluZGl2aWR1YWwgcGluCisqCisqICBOb3RlOiBBdm9pZCB0aGUgdXNlIG9mIHRoZSB3b3JkICdjdXJyZW50JyBzaW5jZSBsaW51eCBoZWFkZXJzIGRlZmluZSB0aGlzCisqICAgICAgICB0byBiZSB0aGUgY3VycmVudCB0YXNrLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0UGluT3V0cHV0Q3VycmVudCh1aW50MzJfdCBwaW4sCisJCQkJCSAgICAgICBjaGlwY0h3X1BJTl9DVVJSRU5UX1NUUkVOR1RIX2UKKwkJCQkJICAgICAgIGN1cnIpCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCSooKHVpbnQzMl90ICopIGNoaXBjSHdfUkVHX0NVUlJFTlQocGluKSkgJj0KKwkgICAgfihjaGlwY0h3X1JFR19DVVJSRU5UX01BU0sgPDwgY2hpcGNId19SRUdfQ1VSUkVOVF9QT1NJVElPTihwaW4pKTsKKwkqKCh1aW50MzJfdCAqKSBjaGlwY0h3X1JFR19DVVJSRU5UKHBpbikpIHw9CisJICAgICh1aW50MzJfdCkgY3VyciA8PCBjaGlwY0h3X1JFR19DVVJSRU5UX1BPU0lUSU9OKHBpbik7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IFBpbiBwdWxsdXAgcmVnaXN0ZXIKKyoKKyogIFRoaXMgZnVuY3Rpb24gc2V0cyBwdWxsdXAgcmVnaXN0ZXIgb2YgaW5kaXZpZHVhbCBwaW4KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFBpblB1bGx1cCh1aW50MzJfdCBwaW4sIGNoaXBjSHdfUElOX1BVTExfZSBwdWxsdXApCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCSooKHVpbnQzMl90ICopIGNoaXBjSHdfUkVHX1BVTExVUChwaW4pKSAmPQorCSAgICB+KGNoaXBjSHdfUkVHX1BVTExVUF9NQVNLIDw8IGNoaXBjSHdfUkVHX1BVTExVUF9QT1NJVElPTihwaW4pKTsKKwkqKCh1aW50MzJfdCAqKSBjaGlwY0h3X1JFR19QVUxMVVAocGluKSkgfD0KKwkgICAgKHVpbnQzMl90KSBwdWxsdXAgPDwgY2hpcGNId19SRUdfUFVMTFVQX1BPU0lUSU9OKHBpbik7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IFBpbiBpbnB1dCB0eXBlCisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgaW5wdXQgdHlwZSBvZiBpbmRpdmlkdWFsIHBpbgorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0UGluSW5wdXRUeXBlKHVpbnQzMl90IHBpbiwKKwkJCQkJICAgY2hpcGNId19QSU5fSU5QVVRUWVBFX2UgaW5wdXRUeXBlKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwkqKCh1aW50MzJfdCAqKSBjaGlwY0h3X1JFR19JTlBVVFRZUEUocGluKSkgJj0KKwkgICAgfihjaGlwY0h3X1JFR19JTlBVVFRZUEVfTUFTSyA8PAorCSAgICAgIGNoaXBjSHdfUkVHX0lOUFVUVFlQRV9QT1NJVElPTihwaW4pKTsKKwkqKCh1aW50MzJfdCAqKSBjaGlwY0h3X1JFR19JTlBVVFRZUEUocGluKSkgfD0KKwkgICAgKHVpbnQzMl90KSBpbnB1dFR5cGUgPDwgY2hpcGNId19SRUdfSU5QVVRUWVBFX1BPU0lUSU9OKHBpbik7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUG93ZXIgdXAgdGhlIFVTQiBQSFkKKyoKKyogIFRoaXMgZnVuY3Rpb24gcG93ZXJzIHVwIHRoZSBVU0IgUEhZCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wb3dlclVwVXNiUGh5KHZvaWQpCit7CisJcmVnMzJfbW9kaWZ5X2FuZCgmcENoaXBjSHctPk1pc2NDdHJsLAorCQkJIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9VU0JfUE9XRVJPTik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBQb3dlciBkb3duIHRoZSBVU0IgUEhZCisqCisqICBUaGlzIGZ1bmN0aW9uIHBvd2VycyBkb3duIHRoZSBVU0IgUEhZCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wb3dlckRvd25Vc2JQaHkodm9pZCkKK3sKKwlyZWczMl9tb2RpZnlfb3IoJnBDaGlwY0h3LT5NaXNjQ3RybCwKKwkJCWNoaXBjSHdfUkVHX01JU0NfQ1RSTF9VU0JfUE9XRVJPRkYpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IHRoZSAybmQgVVNCIGFzIGhvc3QKKyoKKyogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgMm5kIFVTQiBhcyBob3N0CisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRVc2JIb3N0KHZvaWQpCit7CisJcmVnMzJfbW9kaWZ5X29yKCZwQ2hpcGNIdy0+TWlzY0N0cmwsCisJCQljaGlwY0h3X1JFR19NSVNDX0NUUkxfVVNCX01PREVfSE9TVCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgdGhlIDJuZCBVU0IgYXMgZGV2aWNlCisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIDJuZCBVU0IgYXMgZGV2aWNlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRVc2JEZXZpY2Uodm9pZCkKK3sKKwlyZWczMl9tb2RpZnlfYW5kKCZwQ2hpcGNIdy0+TWlzY0N0cmwsCisJCQkgY2hpcGNId19SRUdfTUlTQ19DVFJMX1VTQl9NT0RFX0RFVklDRSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBMb3dlciBsYXllciBmdW50aW9uIHRvIGVuYWJsZS9kaXNhYmxlIGEgY2xvY2sgb2YgYSBjZXJ0YWluIGRldmljZQorKgorKiAgVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIGEgY29yZSBjbG9jaworKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0Q2xvY2soY2hpcGNId19DTE9DS19lIGNsb2NrLAorCQkJCSAgICBjaGlwY0h3X09QVFlQRV9lIHR5cGUsIGludCBtb2RlKQoreworCXZvbGF0aWxlIHVpbnQzMl90ICpwUExMUmVnID0gKHVpbnQzMl90ICopIDB4MDsKKwl2b2xhdGlsZSB1aW50MzJfdCAqcENsb2NrQ3RybCA9ICh1aW50MzJfdCAqKSAweDA7CisKKwlzd2l0Y2ggKGNsb2NrKSB7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0REUjoKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+RERSQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19BUk06CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkFSTUNsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfRVNXOgorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5FU1dDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1ZQTToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+VlBNQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19FU1cxMjU6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkVTVzEyNUNsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfVUFSVDoKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+VUFSVENsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfU0RJTzA6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlNESU8wQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19TRElPMToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+U0RJTzFDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1NQSToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+U1BJQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19FVE06CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkVUTUNsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfVVNCOgorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5VU0JDbG9jazsKKwkJaWYgKHR5cGUgPT0gY2hpcGNId19PUFRZUEVfT1VUUFVUKSB7CisJCQlpZiAobW9kZSkgeworCQkJCXJlZzMyX21vZGlmeV9hbmQocFBMTFJlZywKKwkJCQkJCSB+Y2hpcGNId19SRUdfUExMX0NMT0NLX1BPV0VSX0RPV04pOworCQkJfSBlbHNlIHsKKwkJCQlyZWczMl9tb2RpZnlfb3IocFBMTFJlZywKKwkJCQkJCWNoaXBjSHdfUkVHX1BMTF9DTE9DS19QT1dFUl9ET1dOKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfTENEOgorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5MQ0RDbG9jazsKKwkJaWYgKHR5cGUgPT0gY2hpcGNId19PUFRZUEVfT1VUUFVUKSB7CisJCQlpZiAobW9kZSkgeworCQkJCXJlZzMyX21vZGlmeV9hbmQocFBMTFJlZywKKwkJCQkJCSB+Y2hpcGNId19SRUdfUExMX0NMT0NLX1BPV0VSX0RPV04pOworCQkJfSBlbHNlIHsKKwkJCQlyZWczMl9tb2RpZnlfb3IocFBMTFJlZywKKwkJCQkJCWNoaXBjSHdfUkVHX1BMTF9DTE9DS19QT1dFUl9ET1dOKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfQVBNOgorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5BUE1DbG9jazsKKwkJaWYgKHR5cGUgPT0gY2hpcGNId19PUFRZUEVfT1VUUFVUKSB7CisJCQlpZiAobW9kZSkgeworCQkJCXJlZzMyX21vZGlmeV9hbmQocFBMTFJlZywKKwkJCQkJCSB+Y2hpcGNId19SRUdfUExMX0NMT0NLX1BPV0VSX0RPV04pOworCQkJfSBlbHNlIHsKKwkJCQlyZWczMl9tb2RpZnlfb3IocFBMTFJlZywKKwkJCQkJCWNoaXBjSHdfUkVHX1BMTF9DTE9DS19QT1dFUl9ET1dOKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfQlVTOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5BQ0xLQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19PVFA6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPk9UUENsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfSTJDOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5JMkNDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0kyUzA6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPkkyUzBDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1JUQlVTOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5SVEJVU0Nsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfQVBNMTAwOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5BUE0xMDBDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1RTQzoKKwkJcENsb2NrQ3RybCA9ICZwQ2hpcGNIdy0+VFNDQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19MRUQ6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPkxFRENsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfSTJTMToKKwkJcENsb2NrQ3RybCA9ICZwQ2hpcGNIdy0+STJTMUNsb2NrOworCQlicmVhazsKKwl9CisKKwlpZiAocFBMTFJlZykgeworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBjaGlwY0h3X09QVFlQRV9PVVRQVVQ6CisJCQkvKiBQTEwgY2xvY2sgb3V0cHV0IGVuYWJsZS9kaXNhYmxlICovCisJCQlpZiAobW9kZSkgeworCQkJCWlmIChjbG9jayA9PSBjaGlwY0h3X0NMT0NLX0REUikgeworCQkJCQkvKiBERFIgY2xvY2sgZW5hYmxlIGlzIGludmVydGVkICovCisJCQkJCXJlZzMyX21vZGlmeV9hbmQocFBMTFJlZywKKwkJCQkJCQkgfmNoaXBjSHdfUkVHX1BMTF9DTE9DS19PVVRQVVRfRU5BQkxFKTsKKwkJCQl9IGVsc2UgeworCQkJCQlyZWczMl9tb2RpZnlfb3IocFBMTFJlZywKKwkJCQkJCQljaGlwY0h3X1JFR19QTExfQ0xPQ0tfT1VUUFVUX0VOQUJMRSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoY2xvY2sgPT0gY2hpcGNId19DTE9DS19ERFIpIHsKKwkJCQkJLyogRERSIGNsb2NrIGRpc2FibGUgaXMgaW52ZXJ0ZWQgKi8KKwkJCQkJcmVnMzJfbW9kaWZ5X29yKHBQTExSZWcsCisJCQkJCQkJY2hpcGNId19SRUdfUExMX0NMT0NLX09VVFBVVF9FTkFCTEUpOworCQkJCX0gZWxzZSB7CisJCQkJCXJlZzMyX21vZGlmeV9hbmQocFBMTFJlZywKKwkJCQkJCQkgfmNoaXBjSHdfUkVHX1BMTF9DTE9DS19PVVRQVVRfRU5BQkxFKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBjaGlwY0h3X09QVFlQRV9CWVBBU1M6CisJCQkvKiBQTEwgY2xvY2sgYnlwYXNzIGVuYWJsZS9kaXNhYmxlICovCisJCQlpZiAobW9kZSkgeworCQkJCXJlZzMyX21vZGlmeV9vcihwUExMUmVnLAorCQkJCQkJY2hpcGNId19SRUdfUExMX0NMT0NLX0JZUEFTU19TRUxFQ1QpOworCQkJfSBlbHNlIHsKKwkJCQlyZWczMl9tb2RpZnlfYW5kKHBQTExSZWcsCisJCQkJCQkgfmNoaXBjSHdfUkVHX1BMTF9DTE9DS19CWVBBU1NfU0VMRUNUKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmIChwQ2xvY2tDdHJsKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIGNoaXBjSHdfT1BUWVBFX09VVFBVVDoKKwkJCWlmIChtb2RlKSB7CisJCQkJcmVnMzJfbW9kaWZ5X29yKHBDbG9ja0N0cmwsCisJCQkJCQljaGlwY0h3X1JFR19ESVZfQ0xPQ0tfT1VUUFVUX0VOQUJMRSk7CisJCQl9IGVsc2UgeworCQkJCXJlZzMyX21vZGlmeV9hbmQocENsb2NrQ3RybCwKKwkJCQkJCSB+Y2hpcGNId19SRUdfRElWX0NMT0NLX09VVFBVVF9FTkFCTEUpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgY2hpcGNId19PUFRZUEVfQllQQVNTOgorCQkJaWYgKG1vZGUpIHsKKwkJCQlyZWczMl9tb2RpZnlfb3IocENsb2NrQ3RybCwKKwkJCQkJCWNoaXBjSHdfUkVHX0RJVl9DTE9DS19CWVBBU1NfU0VMRUNUKTsKKwkJCX0gZWxzZSB7CisJCQkJcmVnMzJfbW9kaWZ5X2FuZChwQ2xvY2tDdHJsLAorCQkJCQkJIH5jaGlwY0h3X1JFR19ESVZfQ0xPQ0tfQllQQVNTX1NFTEVDVCk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGVzIGEgY29yZSBjbG9jayBvZiBhIGNlcnRhaW4gZGV2aWNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIGEgY29yZSBjbG9jaworKgorKiAgQG5vdGUgICAgbm8gY2hhbmdlIGluIHBvd2VyIGNvbnN1bXB0aW9uCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRDbG9ja0Rpc2FibGUoY2hpcGNId19DTE9DS19lIGNsb2NrKQoreworCisJLyogRGlzYWJsZSBvdXRwdXQgb2YgdGhlIGNsb2NrICovCisJY2hpcGNId19zZXRDbG9jayhjbG9jaywgY2hpcGNId19PUFRZUEVfT1VUUFVULCAwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZSBhIGNvcmUgY2xvY2sgb2YgYSBjZXJ0YWluIGRldmljZQorKgorKiAgVGhpcyBmdW5jdGlvbiBlbmFibGVzIGEgY29yZSBjbG9jaworKgorKiAgQG5vdGUgICAgbm8gY2hhbmdlIGluIHBvd2VyIGNvbnN1bXB0aW9uCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRDbG9ja0VuYWJsZShjaGlwY0h3X0NMT0NLX2UgY2xvY2spCit7CisKKwkvKiBFbmFibGUgb3V0cHV0IG9mIHRoZSBjbG9jayAqLworCWNoaXBjSHdfc2V0Q2xvY2soY2xvY2ssIGNoaXBjSHdfT1BUWVBFX09VVFBVVCwgMSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBFbmFibGVzIGJ5cGFzcyBjbG9jayBvZiBhIGNlcnRhaW4gZGV2aWNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgYnlwYXNzIGNsb2NrCisqCisqICBAbm90ZSAgICBEb2Vzbm90IGFmZmVjdCB0aGUgYnVzIGludGVyZmFjZSBjbG9jaworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfYnlwYXNzQ2xvY2tFbmFibGUoY2hpcGNId19DTE9DS19lIGNsb2NrKQoreworCS8qIEVuYWJsZSBieXBhc3MgY2xvY2sgKi8KKwljaGlwY0h3X3NldENsb2NrKGNsb2NrLCBjaGlwY0h3X09QVFlQRV9CWVBBU1MsIDEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGlzYWJsZWQgYnlwYXNzIGNsb2NrIG9mIGEgY2VydGFpbiBkZXZpY2UKKyoKKyogIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgYnlwYXNzIGNsb2NrCisqCisqICBAbm90ZSAgICBEb2Vzbm90IGFmZmVjdCB0aGUgYnVzIGludGVyZmFjZSBjbG9jaworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfYnlwYXNzQ2xvY2tEaXNhYmxlKGNoaXBjSHdfQ0xPQ0tfZSBjbG9jaykKK3sKKwkvKiBEaXNhYmxlIGJ5cGFzcyBjbG9jayAqLworCWNoaXBjSHdfc2V0Q2xvY2soY2xvY2ssIGNoaXBjSHdfT1BUWVBFX0JZUEFTUywgMCk7CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBDaGVja3MgaWYgc29mdHdhcmUgc3RyYXAgaXMgZW5hYmxlZAorICoKKyAqICAgQHJldHVybiAxIDogV2hlbiBlbmFibGUKKyAqICAgICAgICAgICAwIDogV2hlbiBkaXNhYmxlCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBpbnQgY2hpcGNId19pc1NvZnR3YXJlU3RyYXBzRW5hYmxlKHZvaWQpCit7CisJcmV0dXJuIHBDaGlwY0h3LT5Tb2Z0U3RyYXBzICYgMHgwMDAwMDAwMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBFbmFibGUgc29mdHdhcmUgc3RyYXAKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zb2Z0d2FyZVN0cmFwc0VuYWJsZSh2b2lkKQoreworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPlNvZnRTdHJhcHMsIDB4MDAwMDAwMDEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIERpc2FibGUgc29mdHdhcmUgc3RyYXAKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zb2Z0d2FyZVN0cmFwc0Rpc2FibGUodm9pZCkKK3sKKwlyZWczMl9tb2RpZnlfYW5kKCZwQ2hpcGNIdy0+U29mdFN0cmFwcywgKH4weDAwMDAwMDAxKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgUExMIHRlc3QgZW5hYmxlCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfcGxsVGVzdEVuYWJsZSh2b2lkKQoreworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPlBMTENvbmZpZywKKwkJCWNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVEVTVF9FTkFCTEUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIFBMTDIgdGVzdCBlbmFibGUKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wbGwyVGVzdEVuYWJsZSh2b2lkKQoreworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPlBMTENvbmZpZzIsCisJCQljaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfRU5BQkxFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBQTEwgdGVzdCBkaXNhYmxlCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfcGxsVGVzdERpc2FibGUodm9pZCkKK3sKKwlyZWczMl9tb2RpZnlfYW5kKCZwQ2hpcGNIdy0+UExMQ29uZmlnLAorCQkJIH5jaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfRU5BQkxFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBQTEwyIHRlc3QgZGlzYWJsZQorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3BsbDJUZXN0RGlzYWJsZSh2b2lkKQoreworCXJlZzMyX21vZGlmeV9hbmQoJnBDaGlwY0h3LT5QTExDb25maWcyLAorCQkJIH5jaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfRU5BQkxFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBHZXQgUExMIHRlc3Qgc3RhdHVzCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBpbnQgY2hpcGNId19pc1BsbFRlc3RFbmFibGUodm9pZCkKK3sKKwlyZXR1cm4gcENoaXBjSHctPlBMTENvbmZpZyAmIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVEVTVF9FTkFCTEU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgR2V0IFBMTDIgdGVzdCBzdGF0dXMKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIGludCBjaGlwY0h3X2lzUGxsMlRlc3RFbmFibGUodm9pZCkKK3sKKwlyZXR1cm4gcENoaXBjSHctPlBMTENvbmZpZzIgJiBjaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfRU5BQkxFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIFBMTCB0ZXN0IHNlbGVjdAorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3BsbFRlc3RTZWxlY3QodWludDMyX3QgdmFsKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+UExMQ29uZmlnICY9IH5jaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfU0VMRUNUX01BU0s7CisJcENoaXBjSHctPlBMTENvbmZpZyB8PQorCSAgICAodmFsKSA8PCBjaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfU0VMRUNUX1NISUZUOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBQTEwyIHRlc3Qgc2VsZWN0CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfcGxsMlRlc3RTZWxlY3QodWludDMyX3QgdmFsKQoreworCisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCXBDaGlwY0h3LT5QTExDb25maWcyICY9IH5jaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfU0VMRUNUX01BU0s7CisJcENoaXBjSHctPlBMTENvbmZpZzIgfD0KKwkgICAgKHZhbCkgPDwgY2hpcGNId19SRUdfUExMX0NPTkZJR19URVNUX1NFTEVDVF9TSElGVDsKKwlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgR2V0IFBMTCB0ZXN0IHNlbGVjdGVkIG9wdGlvbgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBjaGlwY0h3X2dldFBsbFRlc3RTZWxlY3RlZCh2b2lkKQoreworCXJldHVybiAodWludDhfdCkgKChwQ2hpcGNIdy0+CisJCQkgICBQTExDb25maWcgJiBjaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfU0VMRUNUX01BU0spCisJCQkgID4+IGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVEVTVF9TRUxFQ1RfU0hJRlQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIEdldCBQTEwyIHRlc3Qgc2VsZWN0ZWQgb3B0aW9uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50OF90IGNoaXBjSHdfZ2V0UGxsMlRlc3RTZWxlY3RlZCh2b2lkKQoreworCXJldHVybiAodWludDhfdCkgKChwQ2hpcGNIdy0+CisJCQkgICBQTExDb25maWcyICYgY2hpcGNId19SRUdfUExMX0NPTkZJR19URVNUX1NFTEVDVF9NQVNLKQorCQkJICA+PiBjaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfU0VMRUNUX1NISUZUKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgRGlzYWJsZSB0aGUgUExMMQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfcGxsMURpc2FibGUodm9pZCkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJcENoaXBjSHctPlBMTENvbmZpZyB8PSBjaGlwY0h3X1JFR19QTExfQ09ORklHX1BPV0VSX0RPV047CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICBEaXNhYmxlIHRoZSBQTEwyCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wbGwyRGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+UExMQ29uZmlnMiB8PSBjaGlwY0h3X1JFR19QTExfQ09ORklHX1BPV0VSX0RPV047CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlcyBERFIgU1cgcGhhc2UgYWxpZ25tZW50IGludGVycnVwdAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRyUGhhc2VBbGlnbkludGVycnVwdEVuYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+U3BhcmUxIHw9IGNoaXBjSHdfUkVHX1NQQVJFMV9ERFJfUEhBU0VfSU5UUl9FTkFCTEU7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGlzYWJsZXMgRERSIFNXIHBoYXNlIGFsaWdubWVudCBpbnRlcnJ1cHQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2RkclBoYXNlQWxpZ25JbnRlcnJ1cHREaXNhYmxlKHZvaWQpCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCXBDaGlwY0h3LT5TcGFyZTEgJj0gfmNoaXBjSHdfUkVHX1NQQVJFMV9ERFJfUEhBU0VfSU5UUl9FTkFCTEU7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IFZQTSBTVyBwaGFzZSBhbGlnbm1lbnQgaW50ZXJydXB0IG1vZGUKKyoKKyogIFRoaXMgZnVuY3Rpb24gc2V0cyBWUE0gcGhhc2UgYWxpZ25tZW50IGludGVycnVwdAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkCitjaGlwY0h3X3ZwbVBoYXNlQWxpZ25JbnRlcnJ1cHRNb2RlKGNoaXBjSHdfVlBNX0hXX1BIQVNFX0lOVFJfZSBtb2RlKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlpZiAobW9kZSA9PSBjaGlwY0h3X1ZQTV9IV19QSEFTRV9JTlRSX0RJU0FCTEUpIHsKKwkJcENoaXBjSHctPlNwYXJlMSAmPSB+Y2hpcGNId19SRUdfU1BBUkUxX1ZQTV9QSEFTRV9JTlRSX0VOQUJMRTsKKwl9IGVsc2UgeworCQlwQ2hpcGNIdy0+U3BhcmUxIHw9IGNoaXBjSHdfUkVHX1NQQVJFMV9WUE1fUEhBU0VfSU5UUl9FTkFCTEU7CisJfQorCXBDaGlwY0h3LT5WUE1QaGFzZUN0cmwyID0KKwkgICAgKHBDaGlwY0h3LT4KKwkgICAgIFZQTVBoYXNlQ3RybDIgJiB+KGNoaXBjSHdfUkVHX1ZQTV9JTlRSX1NFTEVDVF9NQVNLIDw8CisJCQkgICAgICAgY2hpcGNId19SRUdfVlBNX0lOVFJfU0VMRUNUX1NISUZUKSkgfCBtb2RlOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZSBERFIgcGhhc2UgYWxpZ25tZW50IGluIHNvZnR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19kZHJTd1BoYXNlQWxpZ25FbmFibGUodm9pZCkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJcENoaXBjSHctPkREUlBoYXNlQ3RybDEgfD0gY2hpcGNId19SRUdfRERSX1NXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGUgRERSIHBoYXNlIGFsaWdubWVudCBpbiBzb2Z0d2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRyU3dQaGFzZUFsaWduRGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+RERSUGhhc2VDdHJsMSAmPSB+Y2hpcGNId19SRUdfRERSX1NXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZSBERFIgcGhhc2UgYWxpZ25tZW50IGluIGhhcmR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19kZHJId1BoYXNlQWxpZ25FbmFibGUodm9pZCkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJcENoaXBjSHctPkREUlBoYXNlQ3RybDEgfD0gY2hpcGNId19SRUdfRERSX0hXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGUgRERSIHBoYXNlIGFsaWdubWVudCBpbiBoYXJkd2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRySHdQaGFzZUFsaWduRGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+RERSUGhhc2VDdHJsMSAmPSB+Y2hpcGNId19SRUdfRERSX0hXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZSBWUE0gcGhhc2UgYWxpZ25tZW50IGluIHNvZnR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Td1BoYXNlQWxpZ25FbmFibGUodm9pZCkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJcENoaXBjSHctPlZQTVBoYXNlQ3RybDEgfD0gY2hpcGNId19SRUdfVlBNX1NXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGUgVlBNIHBoYXNlIGFsaWdubWVudCBpbiBzb2Z0d2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfdnBtU3dQaGFzZUFsaWduRGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+VlBNUGhhc2VDdHJsMSAmPSB+Y2hpcGNId19SRUdfVlBNX1NXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZSBWUE0gcGhhc2UgYWxpZ25tZW50IGluIGhhcmR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Id1BoYXNlQWxpZ25FbmFibGUodm9pZCkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJcENoaXBjSHctPlZQTVBoYXNlQ3RybDEgfD0gY2hpcGNId19SRUdfVlBNX0hXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGUgVlBNIHBoYXNlIGFsaWdubWVudCBpbiBoYXJkd2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfdnBtSHdQaGFzZUFsaWduRGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+VlBNUGhhc2VDdHJsMSAmPSB+Y2hpcGNId19SRUdfVlBNX0hXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBERFIgcGhhc2UgYWxpZ25tZW50IG1hcmdpbiBpbiBoYXJkd2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkCitjaGlwY0h3X3NldERkckh3UGhhc2VBbGlnbk1hcmdpbihjaGlwY0h3X0REUl9IV19QSEFTRV9NQVJHSU5fZSBtYXJnaW4pCit7CisJdWludDMyX3QgZ2UgPSAwOworCXVpbnQzMl90IGxlID0gMDsKKworCXN3aXRjaCAobWFyZ2luKSB7CisJY2FzZSBjaGlwY0h3X0REUl9IV19QSEFTRV9NQVJHSU5fU1RSSUNUOgorCQlnZSA9IDB4MEY7CisJCWxlID0gMHgwRjsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0REUl9IV19QSEFTRV9NQVJHSU5fTUVESVVNOgorCQlnZSA9IDB4MDM7CisJCWxlID0gMHgzRjsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0REUl9IV19QSEFTRV9NQVJHSU5fV0lERToKKwkJZ2UgPSAweDAxOworCQlsZSA9IDB4N0Y7CisJCWJyZWFrOworCX0KKworCXsKKwkJUkVHX0xPQ0FMX0lSUV9TQVZFOworCisJCXBDaGlwY0h3LT5ERFJQaGFzZUN0cmwxICY9CisJCSAgICB+KChjaGlwY0h3X1JFR19ERFJfUEhBU0VfVkFMVUVfR0VfTUFTSyA8PAorCQkgICAgICAgY2hpcGNId19SRUdfRERSX1BIQVNFX1ZBTFVFX0dFX1NISUZUKQorCQkgICAgICB8fCAoY2hpcGNId19SRUdfRERSX1BIQVNFX1ZBTFVFX0xFX01BU0sgPDwKKwkJCSAgY2hpcGNId19SRUdfRERSX1BIQVNFX1ZBTFVFX0xFX1NISUZUKSk7CisKKwkJcENoaXBjSHctPkREUlBoYXNlQ3RybDEgfD0KKwkJICAgICgoZ2UgPDwgY2hpcGNId19SRUdfRERSX1BIQVNFX1ZBTFVFX0dFX1NISUZUKQorCQkgICAgIHx8IChsZSA8PCBjaGlwY0h3X1JFR19ERFJfUEhBU0VfVkFMVUVfTEVfU0hJRlQpKTsKKworCQlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IFZQTSBwaGFzZSBhbGlnbm1lbnQgbWFyZ2luIGluIGhhcmR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQKK2NoaXBjSHdfc2V0VnBtSHdQaGFzZUFsaWduTWFyZ2luKGNoaXBjSHdfVlBNX0hXX1BIQVNFX01BUkdJTl9lIG1hcmdpbikKK3sKKwl1aW50MzJfdCBnZSA9IDA7CisJdWludDMyX3QgbGUgPSAwOworCisJc3dpdGNoIChtYXJnaW4pIHsKKwljYXNlIGNoaXBjSHdfVlBNX0hXX1BIQVNFX01BUkdJTl9TVFJJQ1Q6CisJCWdlID0gMHgwRjsKKwkJbGUgPSAweDBGOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfVlBNX0hXX1BIQVNFX01BUkdJTl9NRURJVU06CisJCWdlID0gMHgwMzsKKwkJbGUgPSAweDNGOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfVlBNX0hXX1BIQVNFX01BUkdJTl9XSURFOgorCQlnZSA9IDB4MDE7CisJCWxlID0gMHg3RjsKKwkJYnJlYWs7CisJfQorCisJeworCQlSRUdfTE9DQUxfSVJRX1NBVkU7CisKKwkJcENoaXBjSHctPlZQTVBoYXNlQ3RybDEgJj0KKwkJICAgIH4oKGNoaXBjSHdfUkVHX1ZQTV9QSEFTRV9WQUxVRV9HRV9NQVNLIDw8CisJCSAgICAgICBjaGlwY0h3X1JFR19WUE1fUEhBU0VfVkFMVUVfR0VfU0hJRlQpCisJCSAgICAgIHx8IChjaGlwY0h3X1JFR19WUE1fUEhBU0VfVkFMVUVfTEVfTUFTSyA8PAorCQkJICBjaGlwY0h3X1JFR19WUE1fUEhBU0VfVkFMVUVfTEVfU0hJRlQpKTsKKworCQlwQ2hpcGNIdy0+VlBNUGhhc2VDdHJsMSB8PQorCQkgICAgKChnZSA8PCBjaGlwY0h3X1JFR19WUE1fUEhBU0VfVkFMVUVfR0VfU0hJRlQpCisJCSAgICAgfHwgKGxlIDw8IGNoaXBjSHdfUkVHX1ZQTV9QSEFTRV9WQUxVRV9MRV9TSElGVCkpOworCisJCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBDaGVja3MgRERSIHBoYXNlIGFsaWduZWQgc3RhdHVzIGRvbmUgYnkgSFcKKyoKKyogIEByZXR1cm4gIDE6IFdoZW4gYWxpZ25lZAorKiAgICAgICAgICAgMDogV2hlbiBub3QgYWxpZ25lZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2lzRGRySHdQaGFzZUFsaWduZWQodm9pZCkKK3sKKwlyZXR1cm4gKHBDaGlwY0h3LT4KKwkJUGhhc2VBbGlnblN0YXR1cyAmIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9BTElHTkVEKSA/IDEgOiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ2hlY2tzIFZQTSBwaGFzZSBhbGlnbmVkIHN0YXR1cyBkb25lIGJ5IEhXCisqCisqICBAcmV0dXJuICAxOiBXaGVuIGFsaWduZWQKKyogICAgICAgICAgIDA6IFdoZW4gbm90IGFsaWduZWQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19pc1ZwbUh3UGhhc2VBbGlnbmVkKHZvaWQpCit7CisJcmV0dXJuIChwQ2hpcGNIdy0+CisJCVBoYXNlQWxpZ25TdGF0dXMgJiBjaGlwY0h3X1JFR19WUE1fUEhBU0VfQUxJR05FRCkgPyAxIDogMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCBERFIgcGhhc2UgYWxpZ25lZCBzdGF0dXMgZG9uZSBieSBIVworKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2dldERkckh3UGhhc2VBbGlnblN0YXR1cyh2b2lkKQoreworCXJldHVybiAocENoaXBjSHctPgorCQlQaGFzZUFsaWduU3RhdHVzICYgY2hpcGNId19SRUdfRERSX1BIQVNFX1NUQVRVU19NQVNLKSA+PgorCSAgICBjaGlwY0h3X1JFR19ERFJfUEhBU0VfU1RBVFVTX1NISUZUOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IFZQTSBwaGFzZSBhbGlnbmVkIHN0YXR1cyBkb25lIGJ5IEhXCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0VnBtSHdQaGFzZUFsaWduU3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIChwQ2hpcGNIdy0+CisJCVBoYXNlQWxpZ25TdGF0dXMgJiBjaGlwY0h3X1JFR19WUE1fUEhBU0VfU1RBVFVTX01BU0spID4+CisJICAgIGNoaXBjSHdfUkVHX1ZQTV9QSEFTRV9TVEFUVVNfU0hJRlQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgRERSIHBoYXNlIGNvbnRyb2wgdmFsdWUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19nZXREZHJQaGFzZUNvbnRyb2wodm9pZCkKK3sKKwlyZXR1cm4gKHBDaGlwY0h3LT4KKwkJUGhhc2VBbGlnblN0YXR1cyAmIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9DVFJMX01BU0spID4+CisJICAgIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9DVFJMX1NISUZUOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IFZQTSBwaGFzZSBjb250cm9sIHZhbHVlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0VnBtUGhhc2VDb250cm9sKHZvaWQpCit7CisJcmV0dXJuIChwQ2hpcGNIdy0+CisJCVBoYXNlQWxpZ25TdGF0dXMgJiBjaGlwY0h3X1JFR19WUE1fUEhBU0VfQ1RSTF9NQVNLKSA+PgorCSAgICBjaGlwY0h3X1JFR19WUE1fUEhBU0VfQ1RSTF9TSElGVDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEREUiBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBjb3VudAorKgorKiAgQG5vdGUgICAgSWYgSFcgZmFpbHMgdG8gcGVyZm9ybSB0aGUgcGhhc2UgYWxpZ25tZW50LCBpdCB3aWxsIHRyaWdnZXIKKyogICAgICAgICAgIGEgRERSIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGludGVycnVwdC4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2Rkckh3UGhhc2VBbGlnblRpbWVvdXQodWludDMyX3QgYnVzQ3ljbGUpCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCXBDaGlwY0h3LT5ERFJQaGFzZUN0cmwyICY9CisJICAgIH4oY2hpcGNId19SRUdfRERSX1BIQVNFX1RJTUVPVVRfQ09VTlRfTUFTSyA8PAorCSAgICAgIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9USU1FT1VUX0NPVU5UX1NISUZUKTsKKwlwQ2hpcGNIdy0+RERSUGhhc2VDdHJsMiB8PQorCSAgICAoYnVzQ3ljbGUgJiBjaGlwY0h3X1JFR19ERFJfUEhBU0VfVElNRU9VVF9DT1VOVF9NQVNLKSA8PAorCSAgICBjaGlwY0h3X1JFR19ERFJfUEhBU0VfVElNRU9VVF9DT1VOVF9TSElGVDsKKwlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBWUE0gcGhhc2UgYWxpZ25tZW50IHRpbWVvdXQgY291bnQKKyoKKyogIEBub3RlICAgIElmIEhXIGZhaWxzIHRvIHBlcmZvcm0gdGhlIHBoYXNlIGFsaWdubWVudCwgaXQgd2lsbCB0cmlnZ2VyCisqICAgICAgICAgICBhIFZQTSBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Id1BoYXNlQWxpZ25UaW1lb3V0KHVpbnQzMl90IGJ1c0N5Y2xlKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+VlBNUGhhc2VDdHJsMiAmPQorCSAgICB+KGNoaXBjSHdfUkVHX1ZQTV9QSEFTRV9USU1FT1VUX0NPVU5UX01BU0sgPDwKKwkgICAgICBjaGlwY0h3X1JFR19WUE1fUEhBU0VfVElNRU9VVF9DT1VOVF9TSElGVCk7CisJcENoaXBjSHctPlZQTVBoYXNlQ3RybDIgfD0KKwkgICAgKGJ1c0N5Y2xlICYgY2hpcGNId19SRUdfVlBNX1BIQVNFX1RJTUVPVVRfQ09VTlRfTUFTSykgPDwKKwkgICAgY2hpcGNId19SRUdfVlBNX1BIQVNFX1RJTUVPVVRfQ09VTlRfU0hJRlQ7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ2xlYXIgRERSIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGludGVycnVwdAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRySHdQaGFzZUFsaWduVGltZW91dEludGVycnVwdENsZWFyKHZvaWQpCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCS8qIENsZWFyIHRpbWVvdXQgaW50ZXJydXB0IHNlcnZpY2UgYml0ICovCisJcENoaXBjSHctPkREUlBoYXNlQ3RybDIgfD0gY2hpcGNId19SRUdfRERSX0lOVFJfU0VSVklDRUQ7CisJcENoaXBjSHctPkREUlBoYXNlQ3RybDIgJj0gfmNoaXBjSHdfUkVHX0REUl9JTlRSX1NFUlZJQ0VEOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENsZWFyIFZQTSBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3ZwbUh3UGhhc2VBbGlnblRpbWVvdXRJbnRlcnJ1cHRDbGVhcih2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwkvKiBDbGVhciB0aW1lb3V0IGludGVycnVwdCBzZXJ2aWNlIGJpdCAqLworCXBDaGlwY0h3LT5WUE1QaGFzZUN0cmwyIHw9IGNoaXBjSHdfUkVHX1ZQTV9JTlRSX1NFUlZJQ0VEOworCXBDaGlwY0h3LT5WUE1QaGFzZUN0cmwyICY9IH5jaGlwY0h3X1JFR19WUE1fSU5UUl9TRVJWSUNFRDsKKwlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBERFIgcGhhc2UgYWxpZ25tZW50IHRpbWVvdXQgaW50ZXJydXB0IGVuYWJsZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRySHdQaGFzZUFsaWduVGltZW91dEludGVycnVwdEVuYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwljaGlwY0h3X2Rkckh3UGhhc2VBbGlnblRpbWVvdXRJbnRlcnJ1cHRDbGVhcigpOwkvKiBSZWNvbW1lbmRlZCAqLworCS8qIEVuYWJsZSB0aW1lb3V0IGludGVycnVwdCAqLworCXBDaGlwY0h3LT5ERFJQaGFzZUN0cmwyIHw9IGNoaXBjSHdfUkVHX0REUl9USU1FT1VUX0lOVFJfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFZQTSBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQgZW5hYmxlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Id1BoYXNlQWxpZ25UaW1lb3V0SW50ZXJydXB0RW5hYmxlKHZvaWQpCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCWNoaXBjSHdfdnBtSHdQaGFzZUFsaWduVGltZW91dEludGVycnVwdENsZWFyKCk7CS8qIFJlY29tbWVuZGVkICovCisJLyogRW5hYmxlIHRpbWVvdXQgaW50ZXJydXB0ICovCisJcENoaXBjSHctPlZQTVBoYXNlQ3RybDIgfD0gY2hpcGNId19SRUdfVlBNX1RJTUVPVVRfSU5UUl9FTkFCTEU7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRERSIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGludGVycnVwdCBkaXNhYmxlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19kZHJId1BoYXNlQWxpZ25UaW1lb3V0SW50ZXJydXB0RGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+RERSUGhhc2VDdHJsMiAmPSB+Y2hpcGNId19SRUdfRERSX1RJTUVPVVRfSU5UUl9FTkFCTEU7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgVlBNIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGludGVycnVwdCBkaXNhYmxlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Id1BoYXNlQWxpZ25UaW1lb3V0SW50ZXJydXB0RGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+VlBNUGhhc2VDdHJsMiAmPSB+Y2hpcGNId19SRUdfVlBNX1RJTUVPVVRfSU5UUl9FTkFCTEU7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisjZW5kaWYgLyogQ0hJUENfSU5MSU5FX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2NoaXBjSHdfcmVnLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jaGlwY0h3X3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNjI0NDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jaGlwY0h3X3JlZy5oCkBAIC0wLDAgKzEsNTMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgY2hpcGNId19yZWcuaAorKgorKiAgQGJyaWVmICAgRGVmaW5pdGlvbnMgZm9yIGxvdyBsZXZlbCBjaGlwIGNvbnRyb2wgcmVnaXN0ZXJzCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIENISVBDSFdfUkVHX0gKKyNkZWZpbmUgQ0hJUENIV19SRUdfSAorCisjaW5jbHVkZSA8bWFjaC9jc3AvbW1faW8uaD4KKyNpbmNsdWRlIDxjc3AvcmVnLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvZGRyY1JlZy5oPgorCisjZGVmaW5lIGNoaXBjSHdfQkFTRV9BRERSRVNTICAgIE1NX0lPX0JBU0VfQ0hJUEMKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IENoaXBJZDsJLyogQ2hpcCBJRCAqLworCXVpbnQzMl90IEREUkNsb2NrOwkvKiBQTEwxIENoYW5uZWwgMSBmb3IgRERSIGNsb2NrICovCisJdWludDMyX3QgQVJNQ2xvY2s7CS8qIFBMTDEgQ2hhbm5lbCAyIGZvciBBUk0gY2xvY2sgKi8KKwl1aW50MzJfdCBFU1dDbG9jazsJLyogUExMMSBDaGFubmVsIDMgZm9yIEVTVyBzeXN0ZW0gY2xvY2sgKi8KKwl1aW50MzJfdCBWUE1DbG9jazsJLyogUExMMSBDaGFubmVsIDQgZm9yIFZQTSBjbG9jayAqLworCXVpbnQzMl90IEVTVzEyNUNsb2NrOwkvKiBQTEwxIENoYW5uZWwgNSBmb3IgRVNXIDEyNU1IeiBjbG9jayAqLworCXVpbnQzMl90IFVBUlRDbG9jazsJLyogUExMMSBDaGFubmVsIDYgZm9yIFVBUlQgY2xvY2sgKi8KKwl1aW50MzJfdCBTRElPMENsb2NrOwkvKiBQTEwxIENoYW5uZWwgNyBmb3IgU0RJTyAwIGNsb2NrICovCisJdWludDMyX3QgU0RJTzFDbG9jazsJLyogUExMMSBDaGFubmVsIDggZm9yIFNESU8gMSBjbG9jayAqLworCXVpbnQzMl90IFNQSUNsb2NrOwkvKiBQTEwxIENoYW5uZWwgOSBmb3IgU1BJIG1hc3RlciBDbG9jayAgKi8KKwl1aW50MzJfdCBFVE1DbG9jazsJLyogUExMMSBDaGFubmVsIDEwIGZvciBBUk0gRVRNIENsb2NrICAqLworCisJdWludDMyX3QgQUNMS0Nsb2NrOwkvKiBBQ0xLIENsb2NrIChEaXZpZGVyKSAqLworCXVpbnQzMl90IE9UUENsb2NrOwkvKiBPVFAgQ2xvY2sgIChEaXZpZGVyKSAqLworCXVpbnQzMl90IEkyQ0Nsb2NrOwkvKiBJMkMgQ2xvY2sgKENLXzEzbSkgKERpdmlkZXIpICovCisJdWludDMyX3QgSTJTMENsb2NrOwkvKiBJMlMwIENsb2NrIChEaXZpZGVyKSAqLworCXVpbnQzMl90IFJUQlVTQ2xvY2s7CS8qIFJUQlVTIChERFIgUEhZIENvbmZpZy4pIENsb2NrIChEaXZpZGVyKSAqLworCXVpbnQzMl90IHBhZDE7CisJdWludDMyX3QgQVBNMTAwQ2xvY2s7CS8qIEFQTSAxMDBNSHogQ0xLIENsb2NrIChEaXZpZGVyKSAqLworCXVpbnQzMl90IFRTQ0Nsb2NrOwkvKiBUU0MgQ2xvY2sgKERpdmlkZXIpICovCisJdWludDMyX3QgTEVEQ2xvY2s7CS8qIExFRCBDbG9jayAoRGl2aWRlcikgKi8KKworCXVpbnQzMl90IFVTQkNsb2NrOwkvKiBQTEwyIENoYW5uZWwgMSBmb3IgVVNCIGNsb2NrICovCisJdWludDMyX3QgTENEQ2xvY2s7CS8qIFBMTDIgQ2hhbm5lbCAyIGZvciBMQ0QgY2xvY2sgKi8KKwl1aW50MzJfdCBBUE1DbG9jazsJLyogUExMMiBDaGFubmVsIDMgZm9yIEFQTSAyMDAgTUh6IGNsb2NrICovCisKKwl1aW50MzJfdCBCdXNJbnRmQ2xvY2s7CS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgKi8KKworCXVpbnQzMl90IFBMTFN0YXR1czsJLyogUExMIHN0YXR1cyByZWdpc3RlciAoUExMMSkgKi8KKwl1aW50MzJfdCBQTExDb25maWc7CS8qIFBMTCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICAoUExMMSkgKi8KKwl1aW50MzJfdCBQTExQcmVEaXZpZGVyOwkvKiBQTEwgcHJlLWRpdmlkZXIgY29udHJvbCByZWdpc3RlciAoUExMMSkgKi8KKwl1aW50MzJfdCBQTExEaXZpZGVyOwkvKiBQTEwgZGl2aWRlciBjb250cm9sIHJlZ2lzdGVyIChQTEwxKSAqLworCXVpbnQzMl90IFBMTENvbnRyb2wxOwkvKiBQTEwgYW5hbG9nIGNvbnRyb2wgcmVnaXN0ZXIgIzEgKFBMTDEpICovCisJdWludDMyX3QgUExMQ29udHJvbDI7CS8qIFBMTCBhbmFsb2cgY29udHJvbCByZWdpc3RlciAjMiAoUExMMSkgKi8KKworCXVpbnQzMl90IEkyUzFDbG9jazsJLyogSTJTMSBDbG9jayAgKi8KKwl1aW50MzJfdCBBdWRpb0VuYWJsZTsJLyogRW5hYmxlLyBkaXNhYmxlIGF1ZGlvIGNoYW5uZWwgKi8KKwl1aW50MzJfdCBTb2Z0UmVzZXQxOwkvKiBSZXNldCBibG9ja3MgKi8KKwl1aW50MzJfdCBTb2Z0UmVzZXQyOwkvKiBSZXNldCBibG9ja3MgKi8KKwl1aW50MzJfdCBTcGFyZTE7CS8qIFBoYXNlIGFsaWduIGludGVycnVwdHMgKi8KKwl1aW50MzJfdCBTdGlja3k7CS8qIFN0aWNreSBiaXRzICovCisJdWludDMyX3QgTWlzY0N0cmw7CS8qIE1pc2MuIGNvbnRyb2wgKi8KKwl1aW50MzJfdCBwYWQzWzNdOworCisJdWludDMyX3QgUExMU3RhdHVzMjsJLyogUExMIHN0YXR1cyByZWdpc3RlciAoUExMMikgKi8KKwl1aW50MzJfdCBQTExDb25maWcyOwkvKiBQTEwgY29uZmlndXJhdGlvbiByZWdpc3RlciAgKFBMTDIpICovCisJdWludDMyX3QgUExMUHJlRGl2aWRlcjI7CS8qIFBMTCBwcmUtZGl2aWRlciBjb250cm9sIHJlZ2lzdGVyIChQTEwyKSAqLworCXVpbnQzMl90IFBMTERpdmlkZXIyOwkvKiBQTEwgZGl2aWRlciBjb250cm9sIHJlZ2lzdGVyIChQTEwyKSAqLworCXVpbnQzMl90IFBMTENvbnRyb2wxMjsJLyogUExMIGFuYWxvZyBjb250cm9sIHJlZ2lzdGVyICMxIChQTEwyKSAqLworCXVpbnQzMl90IFBMTENvbnRyb2wyMjsJLyogUExMIGFuYWxvZyBjb250cm9sIHJlZ2lzdGVyICMyIChQTEwyKSAqLworCisJdWludDMyX3QgRERSUGhhc2VDdHJsMTsJLyogRERSIENsb2NrIFBoYXNlIEFsaWdubWVudCBjb250cm9sMSAqLworCXVpbnQzMl90IFZQTVBoYXNlQ3RybDE7CS8qIFZQTSBDbG9jayBQaGFzZSBBbGlnbm1lbnQgY29udHJvbDEgKi8KKwl1aW50MzJfdCBQaGFzZUFsaWduU3RhdHVzOwkvKiBERFIvVlBNIENsb2NrIFBoYXNlIEFsaWdubWVudCBTdGF0dXMgKi8KKwl1aW50MzJfdCBQaGFzZUN0cmxTdGF0dXM7CS8qIEREUi9WUE0gQ2xvY2sgSFcgRERSL1ZQTSBwaF9jdHJsIGFuZCBsb2FkX2NoIFN0YXR1cyAqLworCXVpbnQzMl90IEREUlBoYXNlQ3RybDI7CS8qIEREUiBDbG9jayBQaGFzZSBBbGlnbm1lbnQgY29udHJvbDIgKi8KKwl1aW50MzJfdCBWUE1QaGFzZUN0cmwyOwkvKiBWUE0gQ2xvY2sgUGhhc2UgQWxpZ25tZW50IGNvbnRyb2wyICovCisJdWludDMyX3QgcGFkNFs5XTsKKworCXVpbnQzMl90IFNvZnRPVFAxOwkvKiBTb2Z0d2FyZSBPVFAgY29udHJvbCAqLworCXVpbnQzMl90IFNvZnRPVFAyOwkvKiBTb2Z0d2FyZSBPVFAgY29udHJvbCAqLworCXVpbnQzMl90IFNvZnRTdHJhcHM7CS8qIFNvZnR3YXJlIHN0cmFwICovCisJdWludDMyX3QgUGluU3RyYXBzOwkvKiBQaW4gU3RyYXBzICovCisJdWludDMyX3QgRGlmZk9zY0N0cmw7CS8qIERpZmYgb3NjaWxsYXRvciBjb250cm9sICovCisJdWludDMyX3QgRGlhZ3NDdHJsOwkvKiBEaWFnbm9zdGljIGNvbnRyb2wgKi8KKwl1aW50MzJfdCBEaWFnc091dHB1dEN0cmw7CS8qIERpYWdub3N0aWMgb3V0cHV0IGVuYWJsZSAqLworCXVpbnQzMl90IERpYWdzUmVhZEJhY2tDdHJsOwkvKiBEaWFnbm9zdGljIHJlYWQgYmFjayBjb250cm9sICovCisKKwl1aW50MzJfdCBMY2RQaWZNb2RlOwkvKiBMQ0QvUElGIFBpbiBTaGFyaW5nIE1VWCBNb2RlICovCisKKwl1aW50MzJfdCBHcGlvTXV4XzBfNzsJLyogUGluIFNoYXJpbmcgTVVYMCBDb250cm9sICovCisJdWludDMyX3QgR3Bpb011eF84XzE1OwkvKiBQaW4gU2hhcmluZyBNVVgxIENvbnRyb2wgKi8KKwl1aW50MzJfdCBHcGlvTXV4XzE2XzIzOwkvKiBQaW4gU2hhcmluZyBNVVgyIENvbnRyb2wgKi8KKwl1aW50MzJfdCBHcGlvTXV4XzI0XzMxOwkvKiBQaW4gU2hhcmluZyBNVVgzIENvbnRyb2wgKi8KKwl1aW50MzJfdCBHcGlvTXV4XzMyXzM5OwkvKiBQaW4gU2hhcmluZyBNVVg0IENvbnRyb2wgKi8KKwl1aW50MzJfdCBHcGlvTXV4XzQwXzQ3OwkvKiBQaW4gU2hhcmluZyBNVVg1IENvbnRyb2wgKi8KKwl1aW50MzJfdCBHcGlvTXV4XzQ4XzU1OwkvKiBQaW4gU2hhcmluZyBNVVg2IENvbnRyb2wgKi8KKwl1aW50MzJfdCBHcGlvTXV4XzU2XzYzOwkvKiBQaW4gU2hhcmluZyBNVVg3IENvbnRyb2wgKi8KKworCXVpbnQzMl90IEdwaW9TUl8wXzc7CS8qIFNsZXcgcmF0ZSBmb3IgR1BJTyAwIC0gNyAqLworCXVpbnQzMl90IEdwaW9TUl84XzE1OwkvKiBTbGV3IHJhdGUgZm9yIEdQSU8gOCAtIDE1ICovCisJdWludDMyX3QgR3Bpb1NSXzE2XzIzOwkvKiBTbGV3IHJhdGUgZm9yIEdQSU8gMTYgLSAyMyAqLworCXVpbnQzMl90IEdwaW9TUl8yNF8zMTsJLyogU2xldyByYXRlIGZvciBHUElPIDI0IC0gMzEgKi8KKwl1aW50MzJfdCBHcGlvU1JfMzJfMzk7CS8qIFNsZXcgcmF0ZSBmb3IgR1BJTyAzMiAtIDM5ICovCisJdWludDMyX3QgR3Bpb1NSXzQwXzQ3OwkvKiBTbGV3IHJhdGUgZm9yIEdQSU8gNDAgLSA0NyAqLworCXVpbnQzMl90IEdwaW9TUl80OF81NTsJLyogU2xldyByYXRlIGZvciBHUElPIDQ4IC0gNTUgKi8KKwl1aW50MzJfdCBHcGlvU1JfNTZfNjM7CS8qIFNsZXcgcmF0ZSBmb3IgR1BJTyA1NiAtIDYzICovCisJdWludDMyX3QgTWlzY1NSXzBfNzsJLyogU2xldyByYXRlIGZvciBNSVNDIDAgLSA3ICovCisJdWludDMyX3QgTWlzY1NSXzhfMTU7CS8qIFNsZXcgcmF0ZSBmb3IgTUlTQyA4IC0gMTUgKi8KKworCXVpbnQzMl90IEdwaW9QdWxsXzBfMTU7CS8qIFB1bGwgdXAgcmVnaXN0ZXJzIGZvciBHUElPIDAgLSAxNSAqLworCXVpbnQzMl90IEdwaW9QdWxsXzE2XzMxOwkvKiBQdWxsIHVwIHJlZ2lzdGVycyBmb3IgR1BJTyAxNiAtIDMxICovCisJdWludDMyX3QgR3Bpb1B1bGxfMzJfNDc7CS8qIFB1bGwgdXAgcmVnaXN0ZXJzIGZvciBHUElPIDMyIC0gNDcgKi8KKwl1aW50MzJfdCBHcGlvUHVsbF80OF82MzsJLyogUHVsbCB1cCByZWdpc3RlcnMgZm9yIEdQSU8gNDggLSA2MyAqLworCXVpbnQzMl90IE1pc2NQdWxsXzBfMTU7CS8qIFB1bGwgdXAgcmVnaXN0ZXJzIGZvciBNSVNDIDAgLSAxNSAqLworCisJdWludDMyX3QgR3Bpb0lucHV0XzBfMzE7CS8qIElucHV0IHR5cGUgZm9yIEdQSU8gMCAtIDMxICovCisJdWludDMyX3QgR3Bpb0lucHV0XzMyXzYzOwkvKiBJbnB1dCB0eXBlIGZvciBHUElPIDMyIC0gNjMgKi8KKwl1aW50MzJfdCBNaXNjSW5wdXRfMF8xNTsJLyogSW5wdXQgdHlwZSBmb3IgTUlTQyAwIC0gMTYgKi8KK30gY2hpcGNId19SRUdfdDsKKworI2RlZmluZSBwQ2hpcGNIdyAgKCh2b2xhdGlsZSBjaGlwY0h3X1JFR190ICopIGNoaXBjSHdfQkFTRV9BRERSRVNTKQorI2RlZmluZSBwQ2hpcGNQaHlzaWNhbCAgKCh2b2xhdGlsZSBjaGlwY0h3X1JFR190ICopIE1NX0FERFJfSU9fQ0hJUEMpCisKKyNkZWZpbmUgY2hpcGNId19SRUdfQ0hJUElEX0JBU0VfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjAwMAorI2RlZmluZSBjaGlwY0h3X1JFR19DSElQSURfQkFTRV9TSElGVCAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBjaGlwY0h3X1JFR19DSElQSURfUkVWX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkZGCisjZGVmaW5lIGNoaXBjSHdfUkVHX1JFVl9BMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QTAwCisjZGVmaW5lIGNoaXBjSHdfUkVHX1JFVl9CMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIwCisKKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX1NUQVRVU19DT05UUk9MX0VOQUJMRSAgICAgICAgICAgMHg4MDAwMDAwMAkvKiBBbGxvdyBjb250cm9sbGluZyBQTEwgcmVnaXN0ZXJzICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9TVEFUVVNfTE9DS0VEICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogUExMIGlzIHNldHRsZWQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NPTkZJR19EX1JFU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBEaWdpdGFsIHJlc2V0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfQV9SRVNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQJLyogQW5hbG9nIHJlc2V0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfQllQQVNTX0VOQUJMRSAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogQnlwYXNzIGVuYWJsZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfQ09ORklHX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAweDAwMDAwMDEwCS8qIE91dHB1dCBlbmFibGUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NPTkZJR19QT1dFUl9ET1dOICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBQb3dlciBkb3duICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVkNPX1NQTElUX0ZSRVEgICAgICAgICAgIDE2MDAwMDAwMDAJLyogMS42R0h6IFZDTyBzcGxpdCBmcmVxdWVuY3kgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NPTkZJR19WQ09fODAwXzE2MDAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBWQ08gcmFuZ2UgODAwLTE2MDAgTUh6ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVkNPXzE2MDFfMzIwMCAgICAgICAgICAgIDB4MDAwMDAwODAJLyogVkNPIHJhbmdlIDE2MDEtMzIwMCBNSHogKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NPTkZJR19URVNUX0VOQUJMRSAgICAgICAgICAgICAgMHgwMDAxMDAwMAkvKiBQTEwgdGVzdCBvdXRwdXQgZW5hYmxlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVEVTVF9TRUxFQ1RfTUFTSyAgICAgICAgIDB4MDAzRTAwMDAJLyogTWFzayB0byBzZXQgdGVzdCB2YWx1ZXMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NPTkZJR19URVNUX1NFTEVDVF9TSElGVCAgICAgICAgMTcKKworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09NUCAgICAgICAgICAgICAgICAweDAwODAwMDAwCS8qIFBoYXNlIGNvbXBhcmF0b3Igb3V0cHV0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19UT19CVVNfUkFUSU9fTUFTSyAgICAgICAgIDB4MDAzMDAwMDAJLyogQ2xvY2sgdG8gYnVzIHJhdGlvIG1hc2sgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NMT0NLX1RPX0JVU19SQVRJT19TSElGVCAgICAgICAgMjAJLyogTnVtYmVyIG9mIGJpdHMgdG8gYmUgc2hpZnRlZCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUE9XRVJfRE9XTiAgICAgICAgICAgICAgICAweDAwMDgwMDAwCS8qIFBMTCBjaGFubmVsIHBvd2VyIGRvd24gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NMT0NLX1NPVVJDRV9HUElPICAgICAgICAgICAgICAgMHgwMDA0MDAwMAkvKiBVc2UgR1BJTyBhcyBzb3VyY2UgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NMT0NLX0JZUEFTU19TRUxFQ1QgICAgICAgICAgICAgMHgwMDAyMDAwMAkvKiBTZWxlY3QgYnlwYXNzIGNsb2NrICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19PVVRQVVRfRU5BQkxFICAgICAgICAgICAgIDB4MDAwMTAwMDAJLyogQ2xvY2sgZ2F0ZWQgT04gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX1VQREFURV9FTkFCTEUgICAgICAgMHgwMDAwODAwMAkvKiBDbG9jayBwaGFzZSB1cGRhdGUgZW5hYmxlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT05UUk9MX1NISUZUICAgICAgIDgJLyogTnVtYmVyIG9mIGJpdHMgdG8gYmUgc2hpZnRlZCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09OVFJPTF9NQVNLICAgICAgICAweDAwMDAzRjAwCS8qIFBoYXNlIGNvbnRyb2wgbWFzayAqLworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfTURJVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCS8qIENsb2NrIHBvc3QgZGl2aWRlciBtYXNrCisKKwkJCQkJCQkJCSAgIDAwMDAwMDAwID0gZGl2aWRlLWJ5LTI1NgorCQkJCQkJCQkJICAgMDAwMDAwMDEgPSBkaXZpZGUtYnktMQorCQkJCQkJCQkJICAgMDAwMDAwMTAgPSBkaXZpZGUtYnktMgorCQkJCQkJCQkJICAgMDAwMDAwMTEgPSBkaXZpZGUtYnktMworCQkJCQkJCQkJICAgMDAwMDAxMDAgPSBkaXZpZGUtYnktNAorCQkJCQkJCQkJICAgMDAwMDAxMDEgPSBkaXZpZGUtYnktNQorCQkJCQkJCQkJICAgMDAwMDAxMTAgPSBkaXZpZGUtYnktNgorCQkJCQkJCQkJICAgLgorCQkJCQkJCQkJICAgLgorCQkJCQkJCQkJICAgMTExMTEwMTEgPSBkaXZpZGUtYnktMjUxCisJCQkJCQkJCQkgICAxMTExMTEwMCA9IGRpdmlkZS1ieS0yNTIKKwkJCQkJCQkJCSAgIDExMTExMTAxID0gZGl2aWRlLWJ5LTI1MworCQkJCQkJCQkJICAgMTExMTExMTAgPSBkaXZpZGUtYnktMjU0CisJCQkJCQkJCQkgKi8KKworI2RlZmluZSBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfU09VUkNFX09USEVSICAgICAgICAgICAgICAweDAwMDQwMDAwCS8qIE5PTi1QTEwgY2xvY2sgc291cmNlIHNlbGVjdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfQllQQVNTX1NFTEVDVCAgICAgICAgICAgICAweDAwMDIwMDAwCS8qIE5PTi1QTEwgY2xvY2sgYnlwYXNzIGVuYWJsZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAweDAwMDEwMDAwCS8qIE5PTi1QTEwgY2xvY2sgb3V0cHV0IGVuYWJsZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfRElWX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCS8qIE5PTi1QTEwgY2xvY2sgcG9zdC1kaXZpZGUgbWFzayAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfRElWXzI1NiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIE5PTi1QTEwgY2xvY2sgcG9zdC1kaXZpZGUgYnkgMjU2ICovCisKKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDFfU0hJRlQgICAgICAgICAgICAgMAorI2RlZmluZSBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMl9TSElGVCAgICAgICAgICAgICA0CisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfU0hJRlQgICAgICAgICAgIDgKKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NQVNLICAgICAgICAgICAgMHgwMDAxRkYwMAorI2RlZmluZSBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QT1dFUl9ET1dOICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTU9ERV9NQVNLICAgICAgIDB4MDA3MDAwMDAJLyogRGl2aWRlciBtYXNrICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTU9ERV9JTlRFR0VSICAgIDB4MDAwMDAwMDAJLyogSW50ZWdlci1OIE1vZGUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NT0RFX01BU0hfVU5JVCAgMHgwMDEwMDAwMAkvKiBNQVNIIFNpZ21hLURlbHRhIE1vZHVsYXRvciBVbml0IE1vZGUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NT0RFX01GQl9VTklUICAgMHgwMDIwMDAwMAkvKiBNRkIgU2lnbWEtRGVsdGEgTW9kdWxhdG9yIFVuaXQgTW9kZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX01PREVfTUFTSF8xXzggICAweDAwMzAwMDAwCS8qIE1BU0ggU2lnbWEtRGVsdGEgTW9kdWxhdG9yIDEvOCBNb2RlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTU9ERV9NRkJfMV84ICAgIDB4MDA0MDAwMDAJLyogTUZCIFNpZ21hLURlbHRhIE1vZHVsYXRvciAxLzggTW9kZSAqLworCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfaSh2Y28pICAgICAgICAgICgodmNvKSAvIGNoaXBjSHdfWFRBTF9GUkVRX0h6KQorI2RlZmluZSBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMSAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfRElWSURFUl9NMURJViAgICAgICAgICAgICAgICAgICAweDAzMDAwMDAwCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX0ZSQUMgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYJLyogRnJhY3Rpb25hbCBkaXZpZGVyICovCisKKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0RJVklERVJfTkRJVl9mX1NTICAgICAgICAgICAgICAgKDB4MDBGRkZGRkYpCS8qIFRvIGF0dGFpbiBzcHJlYWQgd2l0aCBtYXggZnJlcXVlbmN5ICovCisKKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0RJVklERVJfTkRJVl9mICAgICAgICAgICAgICAgICAgMAkvKiBuZGl2X2ZyYWMgPSBjaGlwY0h3X1JFR19QTExfRElWSURFUl9ORElWX2YgLworCQkJCQkJCQkgICBjaGlwY0h3X1JFR19QTExfRElWSURFUl9GUkFDCisJCQkJCQkJCSAgID0gMCwgd2hlbiBTUyBpcyBkaXNhYmxlCisJCQkJCQkJCSAqLworCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX01ESVYodmNvLCBIeikgICAgICAgICAgICgoY2hpcGNId19kaXZpZGUoKHZjbyksIChIeikpID4gMjU1KSA/IDAgOiBjaGlwY0h3X2RpdmlkZSgodmNvKSwgKEh6KSkpCisKKyNkZWZpbmUgY2hpcGNId19SRUdfQUNMS0Nsb2NrX0NMS19ESVZfTUFTSyAgICAgICAgICAgICAgMHgzCisKKy8qIFN5c3RlbSBib290aW5nIHN0cmFwIG9wdGlvbnMgKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfU09GVF9PVkVSUklERSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBTb2Z0d2FyZSBTdHJhcCBPdmVycmlkZSAqLworCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfREVWSUNFX05BTkRfRkxBU0hfOCAgICAgICAgIDB4MDAwMDAwMDAJLyogOCBiaXQgTkFORCBGTEFTSCBCb290ICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfREVWSUNFX05PUl9GTEFTSF8xNiAgICAgICAgIDB4MDAwMDAwMDIJLyogMTYgYml0IE5PUiBGTEFTSCBCb290ICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfREVWSUNFX1NFUklBTF9GTEFTSCAgICAgICAgIDB4MDAwMDAwMDQJLyogU2VyaWFsIEZMQVNIIEJvb3QgKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfQk9PVF9ERVZJQ0VfTkFORF9GTEFTSF8xNiAgICAgICAgMHgwMDAwMDAwNgkvKiAxNiBiaXQgTkFORCBGTEFTSCBCb290ICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfREVWSUNFX1VBUlQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgJLyogVUFSVCBCb290ICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfREVWSUNFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUJLyogTWFzayAqLworCisvKiBTeXN0ZW0gYm9vdCBvcHRpb24gKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfQk9PVF9PUFRJT05fQlJPTSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBCb290IGZyb20gQm9vdCBST00gKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfQk9PVF9PUFRJT05fQVJBTSAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAkvKiBCb290IGZyb20gQVJBTSAqLworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19CT09UX09QVElPTl9OT1IgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCS8qIEJvb3QgZnJvbSBOT1IgZmxhc2ggKi8KKworLyogTkFORCBGbGFzaCBwYWdlIHNpemUgc3RyYXAgb3B0aW9ucyAqLworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19OQU5EX1BBR0VTSVpFXzUxMiAgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIE5BTkQgRkxBU0ggcGFnZSBzaXplIG9mIDUxMiBieXRlcyAqLworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19OQU5EX1BBR0VTSVpFXzIwNDggICAgICAgICAgICAgICAweDAwMDAwMDQwCS8qIE5BTkQgRkxBU0ggcGFnZSBzaXplIG9mIDIwNDggYnl0ZXMgKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfTkFORF9QQUdFU0laRV80MDk2ICAgICAgICAgICAgICAgMHgwMDAwMDA4MAkvKiBOQU5EIEZMQVNIIHBhZ2Ugc2l6ZSBvZiA0MDk2IGJ5dGVzICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX05BTkRfUEFHRVNJWkVfRVhUICAgICAgICAgICAgICAgIDB4MDAwMDAwQzAJLyogTkFORCBGTEFTSCBwYWdlIG9mIGV4dGVuZWQgc2l6ZSAqLworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19OQU5EX1BBR0VTSVpFX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMEMwCS8qIE1hc2sgKi8KKworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19OQU5EX0VYVFJBX0NZQ0xFICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCS8qIE5BTkQgRkxBU0ggYWRkcmVzcyBjeWNsZSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX1JFQk9PVF9UT19VQVJUICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAJLyogUmVib290IHRvIFVBUlQgb24gZXJyb3IgKi8KKworLyogU2VjdXJlIGJvb3QgbW9kZSBzdHJhcCBvcHRpb25zICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAJLyogTm9ybWFsIEJvb3QgKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfQk9PVF9NT0RFX0RCR19TVyAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAkvKiBTb2Z0d2FyZSBkZWJ1Z2dpbmcgQm9vdCAqLworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19CT09UX01PREVfREJHX0JPT1QgICAgICAgICAgICAgICAweDAwMDAwMjAwCS8qIEJvb3Qgcm9tIGRlYnVnZ2luZyBCb290ICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfTU9ERV9OT1JNQUxfUVVJRVQgICAgICAgICAgIDB4MDAwMDAzMDAJLyogTm9ybWFsIEJvb3QgKFF1aWV0IEJvb3RSb20pICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAJLyogTWFzayAqLworCisvKiBTbGF2ZSBNb2RlIHN0cmFwcyAqLworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19JMkNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCS8qIEkyQyBTbGF2ZSAgKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfU1BJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAkvKiBTUEkgU2xhdmUgICovCisKKy8qIFN0cmFwIHBpbiBvcHRpb25zICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NXX1NUUkFQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICgocENoaXBjSHctPlBpblN0cmFwcyAmIDB4MDAwMEZDMDApID4+IDEwKQorCisvKiBQSUYvTENEIHBpbiBzaGFyaW5nIGRlZmluZXMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfTENEX1BJTl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBMQ0QgQ29udHJvbGxlciBpcyB1c2VkIGFuZCB0aGUgcGlucyBoYXZlIExDRCBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUElGX1BJTl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBMQ0QgcGlucyBhcmUgdXNlZCB0byBwZXJmb3JtIFBJRiBmdW5jdGlvbnMgICovCisKKyNkZWZpbmUgY2hpcGNId19HUElPX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjEJLyogTnVtYmVyIG9mIEdQSU8gcGluIGFjY2Vzc2libGUgdGhvcnVnaCBDSElQQyAqLworCisvKiBOT1RFOiBBbnkgY2hhbmdlcyB0byB0aGVzZSBjb25zdGFudHMgd2lsbCByZXF1aXJlIGEgY29ycmVzcG9uZGluZyBjaGFuZ2UgdG8gY2hpcGNId19zdHIuYyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19HUElPX01VWF9LRVlQQUQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCS8qIEdQSU8gbXV4IGZvciBLZXlwYWQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfSTJDSCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBHUElPIG11eCBmb3IgSTJDSCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19HUElPX01VWF9TUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCS8qIEdQSU8gbXV4IGZvciBTUEkgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfVUFSVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBHUElPIG11eCBmb3IgVUFSVCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19HUElPX01VWF9MRURNVFhQICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CS8qIEdQSU8gbXV4IGZvciBMRURNVFhQICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0dQSU9fTVVYX0xFRE1UWFMgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYJLyogR1BJTyBtdXggZm9yIExFRE1UWFMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfU0RJTzAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNwkvKiBHUElPIG11eCBmb3IgU0RJTzAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfU0RJTzEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBHUElPIG11eCBmb3IgU0RJTzEgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfUENNICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQkvKiBHUElPIG11eCBmb3IgUENNICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0dQSU9fTVVYX0kyUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEJLyogR1BJTyBtdXggZm9yIEkyUyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19HUElPX01VWF9FVE0gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCS8qIEdQSU8gbXV4IGZvciBFVE0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfREVCVUcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQwkvKiBHUElPIG11eCBmb3IgREVCVUcgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfTUlTQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAkvKiBHUElPIG11eCBmb3IgTUlTQyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19HUElPX01VWF9HUElPICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIEdQSU8gbXV4IGZvciBHUElPICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0dQSU9fTVVYKHBpbikgICAgICAgICAgICAgICAgICAgICAgICgmcENoaXBjSHctPkdwaW9NdXhfMF83ICsgKChwaW4pID4+IDMpKQorI2RlZmluZSBjaGlwY0h3X1JFR19HUElPX01VWF9QT1NJVElPTihwaW4pICAgICAgICAgICAgICAoKChwaW4pICYgMHgwMDAwMDAwNykgPDwgMikKKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgkvKiBNYXNrICovCisKKyNkZWZpbmUgY2hpcGNId19SRUdfU0xFV19SQVRFX0hJR0ggICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBIaWdoIHNwZWVkIHNsZXcgcmF0ZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TTEVXX1JBVEVfTk9STUFMICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CS8qIE5vcm1hbCBzbGV3IHJhdGUgKi8KKwkJCQkJCQkvKiBQaW5zIGJleW9uZCA0MiBhcmUgZGVmaW5lZCBieSBza2lwcGluZyA4IGJpdHMgd2l0aGluIHRoZSByZWdpc3RlciAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TTEVXX1JBVEUocGluKSAgICAgICAgICAgICAgICAgICAgICAoKChwaW4pID4gNDIpID8gKCZwQ2hpcGNIdy0+R3Bpb1NSXzBfNyArICgoKHBpbikgKyAyKSA+PiAzKSkgOiAoJnBDaGlwY0h3LT5HcGlvU1JfMF83ICsgKChwaW4pID4+IDMpKSkKKyNkZWZpbmUgY2hpcGNId19SRUdfU0xFV19SQVRFX1BPU0lUSU9OKHBpbikgICAgICAgICAgICAgKCgocGluKSA+IDQyKSA/ICgoKChwaW4pICsgMikgJiAweDAwMDAwMDA3KSA8PCAyKSA6ICgoKHBpbikgJiAweDAwMDAwMDA3KSA8PCAyKSkKKyNkZWZpbmUgY2hpcGNId19SRUdfU0xFV19SQVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBNYXNrICovCisKKyNkZWZpbmUgY2hpcGNId19SRUdfQ1VSUkVOVF9TVFJFTkdUSF8ybUEgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBDdXJyZW50IGRyaXZpbmcgc3RyZW5ndGggMiBtaWxsaSBhbXBlcmUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQ1VSUkVOVF9TVFJFTkdUSF80bUEgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBDdXJyZW50IGRyaXZpbmcgc3RyZW5ndGggNCBtaWxsaSBhbXBlcmUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQ1VSUkVOVF9TVFJFTkdUSF82bUEgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBDdXJyZW50IGRyaXZpbmcgc3RyZW5ndGggNiBtaWxsaSBhbXBlcmUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQ1VSUkVOVF9TVFJFTkdUSF84bUEgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQkvKiBDdXJyZW50IGRyaXZpbmcgc3RyZW5ndGggOCBtaWxsaSBhbXBlcmUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQ1VSUkVOVF9TVFJFTkdUSF8xMG1BICAgICAgICAgICAgICAgMHgwMDAwMDAwNgkvKiBDdXJyZW50IGRyaXZpbmcgc3RyZW5ndGggMTAgbWlsbGkgYW1wZXJlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0NVUlJFTlRfU1RSRU5HVEhfMTJtQSAgICAgICAgICAgICAgIDB4MDAwMDAwMDcJLyogQ3VycmVudCBkcml2aW5nIHN0cmVuZ3RoIDEyIG1pbGxpIGFtcGVyZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19DVVJSRU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CS8qIE1hc2sgKi8KKwkJCQkJCQkvKiBQaW5zIGJleW9uZCA0MiBhcmUgZGVmaW5lZCBieSBza2lwcGluZyA4IGJpdHMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQ1VSUkVOVChwaW4pICAgICAgICAgICAgICAgICAgICAgICAgKCgocGluKSA+IDQyKSA/ICgmcENoaXBjSHctPkdwaW9TUl8wXzcgKyAoKChwaW4pICsgMikgPj4gMykpIDogKCZwQ2hpcGNIdy0+R3Bpb1NSXzBfNyArICgocGluKSA+PiAzKSkpCisjZGVmaW5lIGNoaXBjSHdfUkVHX0NVUlJFTlRfUE9TSVRJT04ocGluKSAgICAgICAgICAgICAgICgoKHBpbikgPiA0MikgPyAoKCgocGluKSArIDIpICYgMHgwMDAwMDAwNykgPDwgMikgOiAoKChwaW4pICYgMHgwMDAwMDAwNykgPDwgMikpCisKKyNkZWZpbmUgY2hpcGNId19SRUdfUFVMTF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBObyBwdWxsIHVwIHJlZ2lzdGVyICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BVTExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogUHVsbCB1cCByZWdpc3RlciBlbmFibGUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUFVMTF9ET1dOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBQdWxsIGRvd24gcmVnaXN0ZXIgZW5hYmxlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BVTExVUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMJLyogTWFzayAqLworCQkJCQkJCS8qIFBpbnMgYmV5b25kIDQyIGFyZSBkZWZpbmVkIGJ5IHNraXBwaW5nIDQgYml0cyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19QVUxMVVAocGluKSAgICAgICAgICAgICAgICAgICAgICAgICAoKChwaW4pID4gNDIpID8gKCZwQ2hpcGNIdy0+R3Bpb1B1bGxfMF8xNSArICgoKHBpbikgKyAyKSA+PiA0KSkgOiAoJnBDaGlwY0h3LT5HcGlvUHVsbF8wXzE1ICsgKChwaW4pID4+IDQpKSkKKyNkZWZpbmUgY2hpcGNId19SRUdfUFVMTFVQX1BPU0lUSU9OKHBpbikgICAgICAgICAgICAgICAgKCgocGluKSA+IDQyKSA/ICgoKChwaW4pICsgMikgJiAweDAwMDAwMDBGKSA8PCAxKSA6ICgoKHBpbikgJiAweDAwMDAwMDBGKSA8PCAxKSkKKworI2RlZmluZSBjaGlwY0h3X1JFR19JTlBVVFRZUEVfQ01PUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIE5vcm1hbCBDTU9TIGxvZ2ljICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0lOUFVUVFlQRV9TVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogSGlnaCBzcGVlZCBTY2htaXR0IFRyaWdnZXIgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfSU5QVVRUWVBFX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBNYXNrICovCisJCQkJCQkJLyogUGlucyBiZXlvbmQgNDIgYXJlIGRlZmluZWQgYnkgc2tpcHBpbmcgMiBiaXRzICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0lOUFVUVFlQRShwaW4pICAgICAgICAgICAgICAgICAgICAgICgoKHBpbikgPiA0MikgPyAoJnBDaGlwY0h3LT5HcGlvSW5wdXRfMF8zMSArICgoKHBpbikgKyAyKSA+PiA1KSkgOiAoJnBDaGlwY0h3LT5HcGlvSW5wdXRfMF8zMSArICgocGluKSA+PiA1KSkpCisjZGVmaW5lIGNoaXBjSHdfUkVHX0lOUFVUVFlQRV9QT1NJVElPTihwaW4pICAgICAgICAgICAgICgoKHBpbikgPiA0MikgPyAoKCgocGluKSArIDIpICYgMHgwMDAwMDAxRikpIDogKCgocGluKSAmIDB4MDAwMDAwMUYpKSkKKworLyogRGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgYnVzIGNsb2NrICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19BUk0gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgQVJNICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19WREVDICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgVkRFQyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfQVJBTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIEFSQU0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX0hQTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBIUE0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX0REUkMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBERFJDICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19ETUFDMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgRE1BQzAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX0RNQUMxICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBETUFDMSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfTlZJICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIE5WSSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfRVNXICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIEVTVyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfR0UgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIEdFICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19JMkNIICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgSTJDSCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfSTJTMCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIEkyUzAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX0kyUzEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBJMlMxICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19WUkFNICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgVlJBTSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfQ0xDRCAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIENMQ0QgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX0xESyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBMREsgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX0xFRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBMRUQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX09UUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBPVFAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX1BJRiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBQSUYgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX1NQVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBTUFUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX1NESU8wICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBTRElPMCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfU0RJTzEgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIFNESU8xICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19TUElIICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgU1BJSCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfU1BJUyAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIFNQSVMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX1VBUlQwICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBVQVJUMCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfVUFSVDEgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIFVBUlQxICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19CQkwgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgQkJMICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19JMkNTICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgSTJDUyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfVVNCSCAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIFVTQiBIb3N0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19VU0JEICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgVVNCIERldmljZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfQlJPTSAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIEJvb3QgUk9NICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19UU0MgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgVG91Y2ggc2NyZWVuICovCisKKy8qIFNvZnR3YXJlIHJlc2V0cyBkZWZpbmVzICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVlBNX0dMT0JBTF9IT0xEICAgICAgICAgIDB4MDAwMDAwMDA4MDAwMDAwMFVMTAkvKiBSZXNldCBHbG9iYWwgVlBNIGFuZCBob2xkICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVlBNX0hPTEQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDA0MDAwMDAwMFVMTAkvKiBSZXNldCBWUE0gYW5kIGhvbGQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9WUE1fR0xPQkFMICAgICAgICAgICAgICAgMHgwMDAwMDAwMDIwMDAwMDAwVUxMCS8qIFJlc2V0IEdsb2JhbCBWUE0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9WUE0gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDEwMDAwMDAwVUxMCS8qIFJlc2V0IFZQTSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0tFWVBBRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDgwMDAwMDBVTEwJLyogUmVzZXQgS2V5IHBhZCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0xFRCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDQwMDAwMDBVTEwJLyogUmVzZXQgTEVEICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfU1BVICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMjAwMDAwMFVMTAkvKiBSZXNldCBTUFUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9STkcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAxMDAwMDAwVUxMCS8qIFJlc2V0IFJORyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1BLQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDA4MDAwMDBVTEwJLyogUmVzZXQgUEtBICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfTENEICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDQwMDAwMFVMTAkvKiBSZXNldCBMQ0QgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9QSUYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMjAwMDAwVUxMCS8qIFJlc2V0IFBJRiAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0kyQ1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAxMDAwMDBVTEwJLyogUmVzZXQgSTJDIFNsYXZlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfSTJDSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDA4MDAwMFVMTAkvKiBSZXNldCBJMkMgSG9zdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1NESU8xICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwNDAwMDBVTEwJLyogUmVzZXQgU0RJTyAxICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfU0RJTzAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAyMDAwMFVMTAkvKiBSZXNldCBTRElPIDAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9CQkwgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDEwMDAwVUxMCS8qIFJlc2V0IEJCTCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0kyUzEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDgwMDBVTEwJLyogUmVzZXQgSTJTMSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0kyUzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDQwMDBVTEwJLyogUmVzZXQgSTJTMCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1NQSVMgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDIwMDBVTEwJLyogUmVzZXQgU1BJIFNsYXZlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfU1BJSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMTAwMFVMTAkvKiBSZXNldCBTUEkgSG9zdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0dQSU8xICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDA4MDBVTEwJLyogUmVzZXQgR1BJTyBibG9jayAxICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfR1BJTzAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDQwMFVMTAkvKiBSZXNldCBHUElPIGJsb2NrIDAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9VQVJUMSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMjAwVUxMCS8qIFJlc2V0IFVBUlQgMSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1VBUlQwICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAxMDBVTEwJLyogUmVzZXQgVUFSVCAwICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfTlZJICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDA4MFVMTAkvKiBSZXNldCBOVkkgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9XRE9HICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDQwVUxMCS8qIFJlc2V0IFdhdGNoIGRvZyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1RNUiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMjBVTEwJLyogUmVzZXQgVGltZXIgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9FVE0gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDEwVUxMCS8qIFJlc2V0IEVUTSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0FSTV9IT0xEICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDhVTEwJLyogUmVzZXQgQVJNIGFuZCBIT0xEICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfQVJNICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwNFVMTAkvKiBSZXNldCBBUk0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9DSElQX1dBUk0gICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDAyVUxMCS8qIENoaXAgd2FybSByZXNldCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0NISVBfU09GVCAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwJLyogQ2hpcCBzb2Z0IHJlc2V0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVkRFQyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAwMDAwMDAwMFVMTAkvKiBWaWRlbyBkZWNvZGVyICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfR0UgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAwMDAwMDAwMFVMTAkvKiBHcmFwaGljcyBlbmdpbmUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9PVFAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMDAwMDAwMDAwVUxMCS8qIFJlc2V0IE9UUCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1VTQjIgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwMDAwMDAwMDBVTEwJLyogUmVzZXQgVVNCMiAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1VTQjEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwMDAwMDAwMDBVTEwJLyogUmVzZXQgVVNCIDEgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9VU0IgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MDAwMDAwMDAwVUxMCS8qIFJlc2V0IFVTQiAxIGFuZCBVU0IyIHNvZnQgcmVzZXQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9FU1cgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MDAwMDAwMDAwVUxMCS8qIFJlc2V0IEV0aGVybmV0IHN3aXRjaCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0VTV0NMSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwMDAwMDAwMDBVTEwJLyogUmVzZXQgRXRoZXJuZXQgc3dpdGNoIGNsb2NrICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfRERSUEhZICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAwMDAwMDAwMFVMTAkvKiBSZXNldCBERFIgUGh5c2ljYWwgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9ERFIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwODAwMDAwMDAwVUxMCS8qIFJlc2V0IEREUiBDb250cm9sbGVyICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVFNDICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQwMDAwMDAwMFVMTAkvKiBSZXNldCBUb3VjaCBzY3JlZW4gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9QQ00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMjAwMDAwMDAwVUxMCS8qIFJlc2V0IFBDTSBkZXZpY2UgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9BUE0gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMTAwMDAwMDAwVUxMCS8qIFJlc2V0IEFQTSBkZXZpY2UgKi8KKworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1ZQTV9HTE9CQUxfVU5IT0xEICAgICAgICAweDgwMDAwMDAwMDAwMDAwMDBVTEwJLyogVW5ob2xkIEdsb2JhbCBWUE0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9WUE1fVU5IT0xEICAgICAgICAgICAgICAgMHg0MDAwMDAwMDAwMDAwMDAwVUxMCS8qIFVuaG9sZCBWUE0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9BUk1fVU5IT0xEICAgICAgICAgICAgICAgMHgyMDAwMDAwMDAwMDAwMDAwVUxMCS8qIFVuaG9sZCBBUk0gcmVzZXQgICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVU5IT0xEX01BU0sgICAgICAgICAgICAgIDB4RjAwMDAwMDAwMDAwMDAwMFVMTAkvKiBNYXNrIHRvIGhhbmRsZSB1bmhvbGQgcmVxdWVzdCAqLworCisvKiBBdWRpbyBjaGFubmVsIGNvbnRyb2wgZGVmaW5lcyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19BVURJT19DSEFOTkVMX0VOQUJMRV9BTEwgICAgICAgICAgICAweDAwMDAwMDAxCS8qIEVuYWJsZSBhbGwgYXVkaW8gY2hhbm5lbCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19BVURJT19DSEFOTkVMX0VOQUJMRV9BICAgICAgICAgICAgICAweDAwMDAwMDAyCS8qIEVuYWJsZSBjaGFubmVsIEEgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQVVESU9fQ0hBTk5FTF9FTkFCTEVfQiAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBFbmFibGUgY2hhbm5lbCBCICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0FVRElPX0NIQU5ORUxfRU5BQkxFX0MgICAgICAgICAgICAgIDB4MDAwMDAwMDgJLyogRW5hYmxlIGNoYW5uZWwgQyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19BVURJT19DSEFOTkVMX0VOQUJMRV9OVFBfQ0xPQ0sgICAgICAweDAwMDAwMDEwCS8qIEVuYWJsZSBOVFAgY2xvY2sgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQVVESU9fQ0hBTk5FTF9FTkFCTEVfUENNMF9DTE9DSyAgICAgMHgwMDAwMDAyMAkvKiBFbmFibGUgUENNMCBjbG9jayAqLworI2RlZmluZSBjaGlwY0h3X1JFR19BVURJT19DSEFOTkVMX0VOQUJMRV9QQ00xX0NMT0NLICAgICAweDAwMDAwMDQwCS8qIEVuYWJsZSBQQ00xIGNsb2NrICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0FVRElPX0NIQU5ORUxfRU5BQkxFX0FQTV9DTE9DSyAgICAgIDB4MDAwMDAwODAJLyogRW5hYmxlIEFQTSBjbG9jayAqLworCisvKiBNaXNjLiBjaGlwIGNvbnRyb2wgZGVmaW5lcyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19NSVNDX0NUUkxfR0VfU0VMICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCS8qIFNlbGVjdCBHRTIvR0UzICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9JMlMxX0NMT0NLX09OQ0hJUCAgICAgICAgIDB4MDAwMDAwMDAJLyogVXNlIG9uIGNoaXAgY2xvY2sgZm9yIEkyUzEgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfTUlTQ19DVFJMX0kyUzFfQ0xPQ0tfR1BJTyAgICAgICAgICAgMHgwMDAyMDAwMAkvKiBVc2UgZXh0ZXJuYWwgY2xvY2sgdmlhIEdQSU8gcGluIDI2IGZvciBJMlMxICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9JMlMwX0NMT0NLX09OQ0hJUCAgICAgICAgIDB4MDAwMDAwMDAJLyogVXNlIG9uIGNoaXAgY2xvY2sgZm9yIEkyUzAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfTUlTQ19DVFJMX0kyUzBfQ0xPQ0tfR1BJTyAgICAgICAgICAgMHgwMDAxMDAwMAkvKiBVc2UgZXh0ZXJuYWwgY2xvY2sgdmlhIEdQSU8gcGluIDQ1IGZvciBJMlMwICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9BUk1fQ1AxNV9ESVNBQkxFICAgICAgICAgIDB4MDAwMDgwMDAJLyogRGlzYWJsZSBBUk0gQ1AxNSBiaXQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfTUlTQ19DVFJMX1JUQ19ESVNBQkxFICAgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBEaXNhYmxlIFJUQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfTUlTQ19DVFJMX0JCUkFNX0RJU0FCTEUgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBEaXNhYmxlIEJhdHRlcnkgQmFja2VkIFJBTSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19NSVNDX0NUUkxfVVNCX01PREVfSE9TVCAgICAgICAgICAgICAweDAwMDAwMDAyCS8qIFNldCBVU0IgYXMgaG9zdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19NSVNDX0NUUkxfVVNCX01PREVfREVWSUNFICAgICAgICAgICAweEZGRkZGRkZECS8qIFNldCBVU0IgYXMgZGV2aWNlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9VU0JfUE9XRVJPTiAgICAgICAgICAgICAgIDB4RkZGRkZGRkUJLyogUG93ZXIgdXAgVVNCICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9VU0JfUE9XRVJPRkYgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogUG93ZXIgZG93biBVU0IgKi8KKworLyogT1RQIGNvbmZpZ3VyYXRpb24gZGVmaW5lcyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfU0VDVVJJVFlfT0ZGICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwMDAwMDAwMDBVTEwJLyogU2VjdXJpdHkgc3VwcG9ydCBpcyBPRkYgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfT1RQX1NQVV9TTE9XICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMDAwMDAwMDAwVUxMCS8qIExpbWl0ZWQgU1BVIHRocm91Z2hwdXQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfT1RQX0xDRF9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNjAwMDAwMDAwVUxMCS8qIFNldCBWUE0gc3BlZWQgb25lICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9WUE1fU1BFRURfMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEwMDAwMDAwMFVMTAkvKiBTZXQgVlBNIHNwZWVkIG9uZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfVlBNX1NQRUVEXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwODAwMDAwMDBVTEwJLyogU2V0IFZQTSBzcGVlZCB6ZXJvICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9BWElfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDA2MDAwMDAwMFVMTAkvKiBTZXQgbWF4aW11bSBBWEkgYnVzIHNwZWVkICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9BUE1fRElTQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAxRjAwMDAwMFVMTAkvKiBEaXNhYmxlIEFQTSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfUElGX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAyMDAwMDBVTEwJLyogRGlzYWJsZSBQSUYgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfT1RQX1ZERUNfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMTAwMDAwVUxMCS8qIERpc2FibGUgVmlkZW8gZGVjb2RlciAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfQkJMX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwODAwMDBVTEwJLyogRGlzYWJsZSBSVEMgYW5kIEJCUkFNICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9MRURfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDA0MDAwMFVMTAkvKiBEaXNhYmxlIExFRCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfR0VfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMjAwMDBVTEwJLyogRGlzYWJsZSBHcmFwaGljcyBFbmdpbmUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfT1RQX0xDRF9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDEwMDAwVUxMCS8qIERpc2FibGUgTENEICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9LRVlQQURfRElTQUJMRSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwODAwMFVMTAkvKiBEaXNhYmxlIGtleXBhZCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfVUFSVF9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDQwMDBVTEwJLyogRGlzYWJsZSBVQVJUICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9TRElPSF9ESVNBQkxFICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMzAwMFVMTAkvKiBEaXNhYmxlIFNESU8gaG9zdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfSFNTX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDBDMDBVTEwJLyogRGlzYWJsZSBIU1MgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfT1RQX1RTQ19ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMjAwVUxMCS8qIERpc2FibGUgdG91Y2ggc2NyZWVuICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9VU0JfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDE4MFVMTAkvKiBEaXNhYmxlIFVTQiAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfU0dNSUlfRElTQUJMRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwNjBVTEwJLyogRGlzYWJsZSBTR01JSSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfRVRIX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMThVTEwJLyogRGlzYWJsZSBnaWdhYml0IGV0aGVybmV0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9FVEhfUEhZX0RJU0FCTEUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwNlVMTAkvKiBEaXNhYmxlIGV0aGVybmV0IFBIWSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfVlBNX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwJLyogRGlzYWJsZSBWUE0gKi8KKworLyogU3RpY2t5IGJpdCBkZWZpbmVzICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NUSUNLWV9CT09UX0RPTkUgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogQm9vdCBkb25lICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NUSUNLWV9TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIJLyogQVJNIHNvZnQgcmVzZXQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBHZW5lcmFsIHB1cnBvc2UgYml0IDEgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBHZW5lcmFsIHB1cnBvc2UgYml0IDIgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAkvKiBHZW5lcmFsIHB1cnBvc2UgYml0IDMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfNCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAkvKiBHZW5lcmFsIHB1cnBvc2UgYml0IDQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfNSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAkvKiBHZW5lcmFsIHB1cnBvc2UgYml0IDUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1RJQ0tZX1BPUl9CUk9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAkvKiBTcGVjaWFsIHN0aWNreSBiaXQgZm9yIHNlY3VyaXR5IC0gc2V0IGluIEJST00gdG8gYXZvaWQgb3RoZXIgbW9kZXMgYmVpbmcgZW50ZXJlZCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TVElDS1lfQVJNX1JFU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCS8qIEFSTSByZXNldCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TVElDS1lfQ0hJUF9TT0ZUX1JFU0VUICAgICAgICAgICAgICAweDAwMDAwMjAwCS8qIENoaXAgc29mdCByZXNldCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TVElDS1lfQ0hJUF9XQVJNX1JFU0VUICAgICAgICAgICAgICAweDAwMDAwNDAwCS8qIENoaXAgd2FybSByZXNldCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TVElDS1lfV0RPR19SRVNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCS8qIFdhdGNoZG9nIHJlc2V0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NUSUNLWV9PVFBfUkVTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAJLyogT1RQIHJlc2V0ICovCisKKwkJCQkJCQkvKiBIVyBwaGFzZSBhbGlnbm1lbnQgZGVmaW5lcyAqLy8qIFNwYXJlMSByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TUEFSRTFfRERSX1BIQVNFX0lOVFJfRU5BQkxFICAgICAgICAweDgwMDAwMDAwCS8qIEVuYWJsZSBERFIgcGhhc2UgYWxpZ24gcGFuaWMgaW50ZXJydXB0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NQQVJFMV9WUE1fUEhBU0VfSU5UUl9FTkFCTEUgICAgICAgIDB4NDAwMDAwMDAJLyogRW5hYmxlIFZQTSBwaGFzZSBhbGlnbiBwYW5pYyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1BBUkUxX1ZQTV9CVVNfQUNDRVNTX0VOQUJMRSAgICAgICAgMHgwMDAwMDAwMgkvKiBFbmFibGUgYWNjZXNzIHRvIFZQTSB1c2luZyBzeXN0ZW0gQlVTICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NQQVJFMV9ERFJfQlVTX0FDQ0VTU19FTkFCTEUgICAgICAgIDB4MDAwMDAwMDEJLyogRW5hYmxlIGFjY2VzcyB0byBERFIgdXNpbmcgc3lzdGVtIEJVUyAqLworCQkJCQkJCS8qIEREUlBoYXNlQ3RybDEgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfRERSX1NXX1BIQVNFX0NUUkxfRU5BQkxFICAgICAgICAgICAgMHg4MDAwMDAwMAkvKiBFbmFibGUgRERSIFNXIHBoYXNlIGFsaWdubWVudCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfSFdfUEhBU0VfQ1RSTF9FTkFCTEUgICAgICAgICAgICAweDQwMDAwMDAwCS8qIEVuYWJsZSBERFIgSFcgcGhhc2UgYWxpZ25tZW50ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9WQUxVRV9HRV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwN0YJLyogRERSIGxvd2VyIHRocmVzaG9sZCBmb3IgcGhhc2UgYWxpZ25tZW50ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9WQUxVRV9HRV9TSElGVCAgICAgICAgICAgIDIzCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9WQUxVRV9MRV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwN0YJLyogRERSIHVwcGVyIHRocmVzaG9sZCBmb3IgcGhhc2UgYWxpZ25tZW50ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9WQUxVRV9MRV9TSElGVCAgICAgICAgICAgIDE2CisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9BTElHTl9XQUlUX0NZQ0xFX01BU0sgICAgIDB4MDAwMEZGRkYJLyogQlVTIEN5Y2xlIHRvIHdhaXQgdG8gcnVuIG5leHQgRERSIHBoYXNlIGFsaWdubWVudCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfUEhBU0VfQUxJR05fV0FJVF9DWUNMRV9TSElGVCAgICAwCisJCQkJCQkJLyogVlBNUGhhc2VDdHJsMSByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fU1dfUEhBU0VfQ1RSTF9FTkFCTEUgICAgICAgICAgICAweDgwMDAwMDAwCS8qIEVuYWJsZSBWUE0gU1cgcGhhc2UgYWxpZ25tZW50ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9IV19QSEFTRV9DVFJMX0VOQUJMRSAgICAgICAgICAgIDB4NDAwMDAwMDAJLyogRW5hYmxlIFZQTSBIVyBwaGFzZSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX1ZBTFVFX0dFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA3RgkvKiBWUE0gbG93ZXIgdGhyZXNob2xkIGZvciBwaGFzZSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX1ZBTFVFX0dFX1NISUZUICAgICAgICAgICAgMjMKKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX1ZBTFVFX0xFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA3RgkvKiBWUE0gdXBwZXIgdGhyZXNob2xkIGZvciBwaGFzZSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX1ZBTFVFX0xFX1NISUZUICAgICAgICAgICAgMTYKKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX0FMSUdOX1dBSVRfQ1lDTEVfTUFTSyAgICAgMHgwMDAwRkZGRgkvKiBCVVMgQ3ljbGUgdG8gd2FpdCB0byBjb21wbGV0ZSB0aGUgVlBNIHBoYXNlIGFsaWdubWVudCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fUEhBU0VfQUxJR05fV0FJVF9DWUNMRV9TSElGVCAgICAwCisJCQkJCQkJLyogUGhhc2VBbGlnblN0YXR1cyByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfVElNRU9VVF9JTlRSX1NUQVRVUyAgICAgICAgICAgICAweDgwMDAwMDAwCS8qIEREUiB0aW1lIG91dCBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9TVEFUVVNfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwN0YJLyogRERSIHBoYXNlIHN0YXR1cyB2YWx1ZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfUEhBU0VfU1RBVFVTX1NISUZUICAgICAgICAgICAgICAyNAorI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfUEhBU0VfQUxJR05FRCAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCS8qIEREUiBQaGFzZSBhbGlnbmVkIHN0YXR1cyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfTE9BRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCS8qIExvYWQgRERSIHBoYXNlIHN0YXR1cyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfUEhBU0VfQ1RSTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCS8qIEREUiBwaGFzZSBjb250cm9sIHZhbHVlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9DVFJMX1NISUZUICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9USU1FT1VUX0lOVFJfU1RBVFVTICAgICAgICAgICAgIDB4ODAwMDAwMDAJLyogVlBNIHRpbWUgb3V0IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX1NUQVRVU19NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDA3RgkvKiBWUE0gcGhhc2Ugc3RhdHVzIHZhbHVlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9QSEFTRV9TVEFUVVNfU0hJRlQgICAgICAgICAgICAgIDgKKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX0FMSUdORUQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAkvKiBWUE0gUGhhc2UgYWxpZ25lZCBzdGF0dXMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX0xPQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAkvKiBMb2FkIFZQTSBwaGFzZSBzdGF0dXMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX0NUUkxfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgkvKiBWUE0gcGhhc2UgY29udHJvbCB2YWx1ZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fUEhBU0VfQ1RSTF9TSElGVCAgICAgICAgICAgICAgICAwCisJCQkJCQkJLyogRERSUGhhc2VDdHJsMiByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfSU5UUl9TRVJWSUNFRCAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCS8qIEFja25vd2xlZGdlIHRoYXQgaW50ZXJydXB0IHdhcyBzZXJ2aWNlZCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfVElNRU9VVF9JTlRSX0VOQUJMRSAgICAgICAgICAgICAweDAxMDAwMDAwCS8qIEVuYWJsZSB0aW1lIG91dCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfRERSX0xPQURfQ09VTlRfUEhBU0VfQ1RSTF9NQVNLICAgICAgMHgwMDAwMDAwRgkvKiBXYWl0IGJlZm9yZSB0b2dnbGluZyBsb2FkX2NoICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9MT0FEX0NPVU5UX1BIQVNFX0NUUkxfU0hJRlQgICAgIDIwCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9UT1RBTF9MT0FEX0NPVU5UX0NUUkxfTUFTSyAgICAgIDB4MDAwMDAwMEYJLyogVG90YWwgd2FpdCB0byBzZXR0bGUgcGhfY3RybCBhbmQgbG9hZF9jaCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfVE9UQUxfTE9BRF9DT1VOVF9DVFJMX1NISUZUICAgICAxNgorI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfUEhBU0VfVElNRU9VVF9DT1VOVF9NQVNLICAgICAgICAweDAwMDBGRkZGCS8qIFRpbWUgb3V0IHZhbHVlIGZvciBERFIgSFcgcGhhc2UgYWxpZ25tZW50ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9USU1FT1VUX0NPVU5UX1NISUZUICAgICAgIDAKKwkJCQkJCQkvKiBWUE1QaGFzZUN0cmwyIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9JTlRSX1NFTEVDVF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMJLyogSW50ZXJydXB0IHNlbGVjdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fSU5UUl9TRUxFQ1RfU0hJRlQgICAgICAgICAgICAgICAyNgorI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fSU5UUl9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9JTlRSX0ZBU1QgICAgICAgICAgICAgICAgICAgICAgICgweDEgPDwgY2hpcGNId19SRUdfVlBNX0lOVFJfU0VMRUNUX1NISUZUKQorI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fSU5UUl9NRURJVU0gICAgICAgICAgICAgICAgICAgICAoMHgyIDw8IGNoaXBjSHdfUkVHX1ZQTV9JTlRSX1NFTEVDVF9TSElGVCkKKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX0lOVFJfU0xPVyAgICAgICAgICAgICAgICAgICAgICAgKDB4MyA8PCBjaGlwY0h3X1JFR19WUE1fSU5UUl9TRUxFQ1RfU0hJRlQpCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9JTlRSX1NFUlZJQ0VEICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAJLyogQWNrbm93bGVkZ2UgdGhhdCBpbnRlcnJ1cHQgd2FzIHNlcnZpY2VkICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9USU1FT1VUX0lOVFJfRU5BQkxFICAgICAgICAgICAgIDB4MDEwMDAwMDAJLyogRW5hYmxlIHRpbWUgb3V0IGludGVycnVwdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fTE9BRF9DT1VOVF9QSEFTRV9DVFJMX01BU0sgICAgICAweDAwMDAwMDBGCS8qIFdhaXQgYmVmb3JlIHRvZ2dsaW5nIGxvYWRfY2ggKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX0xPQURfQ09VTlRfUEhBU0VfQ1RSTF9TSElGVCAgICAgMjAKKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1RPVEFMX0xPQURfQ09VTlRfQ1RSTF9NQVNLICAgICAgMHgwMDAwMDAwRgkvKiBUb3RhbCB3YWl0IGN5Y2xlIHRvIHNldHRsZSBwaF9jdHJsIGFuZCBsb2FkX2NoICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9UT1RBTF9MT0FEX0NPVU5UX0NUUkxfU0hJRlQgICAgIDE2CisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9QSEFTRV9USU1FT1VUX0NPVU5UX01BU0sgICAgICAgIDB4MDAwMEZGRkYJLyogVGltZSBvdXQgdmFsdWUgZm9yIFZQTSBIVyBwaGFzZSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX1RJTUVPVVRfQ09VTlRfU0hJRlQgICAgICAgMAorCisjZW5kaWYgLyogQ0hJUENIV19SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvZGRyY1JlZy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvZGRyY1JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYjY4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kZHJjUmVnLmgKQEAgLTAsMCArMSw4NzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAZmlsZSAgICBkZHJjUmVnLmgKKyoKKyogIEBicmllZiAgIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciBCQ01SSU5HIEREUjIgQ29udHJvbGxlciBhbmQgUEhZCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgRERSQ19SRUdfSAorI2RlZmluZSBERFJDX1JFR19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgPGNzcC9yZWcuaD4KKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisKKyNpbmNsdWRlIDxtYWNoL2NzcC9tbV9pby5oPgorCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRERSMiBDb250cm9sbGVyIChBUk0gUEwzNDEpIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIEFSTSBQTDM0MSBERFIyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBvZmZzZXQgMHgwMDAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJdHlwZWRlZiBzdHJ1Y3QgeworCQl1aW50MzJfdCBtZW1jU3RhdHVzOworCQl1aW50MzJfdCBtZW1jQ21kOworCQl1aW50MzJfdCBkaXJlY3RDbWQ7CisJCXVpbnQzMl90IG1lbW9yeUNmZzsKKwkJdWludDMyX3QgcmVmcmVzaFByZDsKKwkJdWludDMyX3QgY2FzTGF0ZW5jeTsKKwkJdWludDMyX3Qgd3JpdGVMYXRlbmN5OworCQl1aW50MzJfdCB0TXJkOworCQl1aW50MzJfdCB0UmFzOworCQl1aW50MzJfdCB0UmM7CisJCXVpbnQzMl90IHRSY2Q7CisJCXVpbnQzMl90IHRSZmM7CisJCXVpbnQzMl90IHRScDsKKwkJdWludDMyX3QgdFJyZDsKKwkJdWludDMyX3QgdFdyOworCQl1aW50MzJfdCB0V3RyOworCQl1aW50MzJfdCB0WHA7CisJCXVpbnQzMl90IHRYc3I7CisJCXVpbnQzMl90IHRFc3I7CisJCXVpbnQzMl90IG1lbW9yeUNmZzI7CisJCXVpbnQzMl90IG1lbW9yeUNmZzM7CisJCXVpbnQzMl90IHRGYXc7CisJfSBkZHJjUmVnX0NUTFJfTUVNQ19SRUdfdDsKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19SRUdfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfUkVHUCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSBkZHJjUmVnX0NUTFJfTUVNQ19SRUdfdCAqKSAgKE1NX0lPX0JBU0VfRERSQyArIGRkcmNSZWdfQ1RMUl9NRU1DX1JFR19PRkZTRVQpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19CQU5LU19NQVNLICAgICAgICAgICAgICgweDMgPDwgMTIpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19CQU5LU180ICAgICAgICAgICAgICAgICgweDAgPDwgMTIpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19CQU5LU184ICAgICAgICAgICAgICAgICgweDMgPDwgMTIpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX01PTklUT1JTX01BU0sgICAgICAgICAgKDB4MyA8PCAxMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX01PTklUT1JTXzAgICAgICAgICAgICAgKDB4MCA8PCAxMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX01PTklUT1JTXzEgICAgICAgICAgICAgKDB4MSA8PCAxMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX01PTklUT1JTXzIgICAgICAgICAgICAgKDB4MiA8PCAxMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX01PTklUT1JTXzQgICAgICAgICAgICAgKDB4MyA8PCAxMCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfQ0hJUFNfTUFTSyAgICAgICAgICAgICAoMHgzIDw8IDcpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19DSElQU18xICAgICAgICAgICAgICAgICgweDAgPDwgNykKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX0NISVBTXzIgICAgICAgICAgICAgICAgKDB4MSA8PCA3KQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfQ0hJUFNfMyAgICAgICAgICAgICAgICAoMHgyIDw8IDcpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19DSElQU180ICAgICAgICAgICAgICAgICgweDMgPDwgNykKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfVFlQRV9NQVNLICAgICAgICAgICAgICAoMHg3IDw8IDQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19UWVBFX0REUjIgICAgICAgICAgICAgICgweDUgPDwgNCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfV0lEVEhfTUFTSyAgICAgICAgICAgICAoMHgzIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19XSURUSF8xNiAgICAgICAgICAgICAgICgweDAgPDwgMikKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX1dJRFRIXzMyICAgICAgICAgICAgICAgKDB4MSA8PCAyKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfV0lEVEhfNjQgICAgICAgICAgICAgICAoMHgyIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19XSURUSF8xMjggICAgICAgICAgICAgICgweDMgPDwgMikKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfU1RBVEVfTUFTSyAgICAgICAgICAgICAoMHgzIDw8IDApCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19TVEFURV9DT05GSUcgICAgICAgICAgICgweDAgPDwgMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX1NUQVRFX1JFQURZICAgICAgICAgICAgKDB4MSA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfU1RBVEVfUEFVU0VEICAgICAgICAgICAoMHgyIDw8IDApCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19TVEFURV9MT1dQV1IgICAgICAgICAgICgweDMgPDwgMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19DTURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg3IDw8IDApCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX0NNRF9HTyAgICAgICAgICAgICAgICAgICAgICAgICgweDAgPDwgMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfQ01EX1NMRUVQICAgICAgICAgICAgICAgICAgICAgKDB4MSA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19DTURfV0FLRVVQICAgICAgICAgICAgICAgICAgICAoMHgyIDw8IDApCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX0NNRF9QQVVTRSAgICAgICAgICAgICAgICAgICAgICgweDMgPDwgMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfQ01EX0NPTkZJR1VSRSAgICAgICAgICAgICAgICAgKDB4NCA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19DTURfQUNUSVZFX1BBVVNFICAgICAgICAgICAgICAoMHg3IDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0RJUkVDVF9DTURfQ0hJUF9TSElGVCAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0RJUkVDVF9DTURfQ0hJUF9NQVNLICAgICAgICAgICAgICAgKDB4MyA8PCBkZHJjUmVnX0NUTFJfRElSRUNUX0NNRF9DSElQX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9ESVJFQ1RfQ01EX1RZUEVfUFJFQ0hBUkdFQUxMICAgICAgICgweDAgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9ESVJFQ1RfQ01EX1RZUEVfQVVUT1JFRlJFU0ggICAgICAgICgweDEgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9ESVJFQ1RfQ01EX1RZUEVfTU9ERVJFRyAgICAgICAgICAgICgweDIgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9ESVJFQ1RfQ01EX1RZUEVfTk9QICAgICAgICAgICAgICAgICgweDMgPDwgMTgpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0RJUkVDVF9DTURfQkFOS19TSElGVCAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0RJUkVDVF9DTURfQkFOS19NQVNLICAgICAgICAgICAgICAgKDB4MyA8PCBkZHJjUmVnX0NUTFJfRElSRUNUX0NNRF9CQU5LX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9ESVJFQ1RfQ01EX0FERFJfU0hJRlQgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0RJUkVDVF9DTURfQUREUl9NQVNLICAgICAgICAgICAgICAgKDB4MWZmZmYgPDwgZGRyY1JlZ19DVExSX0RJUkVDVF9DTURfQUREUl9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19DSElQX0NOVF9NQVNLICAgICAgICAgICAoMHgzIDw8IDIxKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19DSElQX0NOVF8xICAgICAgICAgICAgICAoMHgwIDw8IDIxKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19DSElQX0NOVF8yICAgICAgICAgICAgICAoMHgxIDw8IDIxKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19DSElQX0NOVF8zICAgICAgICAgICAgICAoMHgyIDw8IDIxKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19DSElQX0NOVF80ICAgICAgICAgICAgICAoMHgzIDw8IDIxKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEX01BU0sgICAgICAgICAgICgweDcgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzNfMCAgICAgICAgICAgICgweDAgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzRfMSAgICAgICAgICAgICgweDEgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzVfMiAgICAgICAgICAgICgweDIgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzZfMyAgICAgICAgICAgICgweDMgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzdfNCAgICAgICAgICAgICgweDQgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzhfNSAgICAgICAgICAgICgweDUgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzlfNiAgICAgICAgICAgICgweDYgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzEwXzcgICAgICAgICAgICgweDcgPDwgMTgpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQlVSU1RfTEVOX01BU0sgICAgICAgICAgKDB4NyA8PCAxNSkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQlVSU1RfTEVOXzQgICAgICAgICAgICAgKDB4MiA8PCAxNSkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQlVSU1RfTEVOXzggICAgICAgICAgICAgKDB4MyA8PCAxNSkJLyogQG5vdGUgTm90IHN1cHBvcnRlZCBpbiBQTDM0MSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1BXUkRPV05fRU5BQkxFICAgICAgICAgICgweDEgPDwgMTMpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfUFdSRE9XTl9DWUNMRVNfU0hJRlQgICAgNworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19QV1JET1dOX0NZQ0xFU19NQVNLICAgICAoMHgzZiA8PCBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19QV1JET1dOX0NZQ0xFU19TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19BWElfUk9XX0JJVFNfTUFTSyAgICAgICAoMHg3IDw8IDMpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX0FYSV9ST1dfQklUU18xMSAgICAgICAgICgweDAgPDwgMykKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQVhJX1JPV19CSVRTXzEyICAgICAgICAgKDB4MSA8PCAzKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19BWElfUk9XX0JJVFNfMTMgICAgICAgICAoMHgyIDw8IDMpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX0FYSV9ST1dfQklUU18xNCAgICAgICAgICgweDMgPDwgMykKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQVhJX1JPV19CSVRTXzE1ICAgICAgICAgKDB4NCA8PCAzKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19BWElfUk9XX0JJVFNfMTYgICAgICAgICAoMHg1IDw8IDMpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQVhJX0NPTF9CSVRTX01BU0sgICAgICAgKDB4NyA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19BWElfQ09MX0JJVFNfOSAgICAgICAgICAoMHgxIDw8IDApCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX0FYSV9DT0xfQklUU18xMCAgICAgICAgICgweDIgPDwgMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQVhJX0NPTF9CSVRTXzExICAgICAgICAgKDB4MyA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9SRUZSRVNIX1BSRF9TSElGVCAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1JFRlJFU0hfUFJEX01BU0sgICAgICAgICAgICAgICAgICAgKDB4N2ZmZiA8PCBkZHJjUmVnX0NUTFJfUkVGUkVTSF9QUkRfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0NBU19MQVRFTkNZX1NISUZUICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBkZHJjUmVnX0NUTFJfQ0FTX0xBVEVOQ1lfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg3IDw8IGRkcmNSZWdfQ1RMUl9DQVNfTEFURU5DWV9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfV1JJVEVfTEFURU5DWV9TSElGVCAgICAgICAgICAgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9XUklURV9MQVRFTkNZX01BU0sgICAgICAgICAgICAgICAgICgweDcgPDwgZGRyY1JlZ19DVExSX1dSSVRFX0xBVEVOQ1lfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfTVJEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9NUkRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3ZiA8PCBkZHJjUmVnX0NUTFJfVF9NUkRfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUkFTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxZiA8PCBkZHJjUmVnX0NUTFJfVF9SQVNfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxZiA8PCBkZHJjUmVnX0NUTFJfVF9SQ19TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SQ0RfU0NIRURVTEVfREVMQVlfU0hJRlQgICAgICAgICA4CisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1JDRF9TQ0hFRFVMRV9ERUxBWV9NQVNLICAgICAgICAgICgweDcgPDwgZGRyY1JlZ19DVExSX1RfUkNEX1NDSEVEVUxFX0RFTEFZX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1JDRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUkNEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NyA8PCBkZHJjUmVnX0NUTFJfVF9SQ0RfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUkZDX1NDSEVEVUxFX0RFTEFZX1NISUZUICAgICAgICAgOAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SRkNfU0NIRURVTEVfREVMQVlfTUFTSyAgICAgICAgICAoMHg3ZiA8PCBkZHJjUmVnX0NUTFJfVF9SRkNfU0NIRURVTEVfREVMQVlfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUkZDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SRkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3ZiA8PCBkZHJjUmVnX0NUTFJfVF9SRkNfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUlBfU0NIRURVTEVfREVMQVlfU0hJRlQgICAgICAgICAgOAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SUF9TQ0hFRFVMRV9ERUxBWV9NQVNLICAgICAgICAgICAoMHg3IDw8IGRkcmNSZWdfQ1RMUl9UX1JQX1NDSEVEVUxFX0RFTEFZX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1JQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUlBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ZiA8PCBkZHJjUmVnX0NUTFJfVF9SUF9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SUkRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1JSRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweGYgPDwgZGRyY1JlZ19DVExSX1RfUlJEX1NISUZUKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1dSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfV1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NyA8PCBkZHJjUmVnX0NUTFJfVF9XUl9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9XVFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1dUUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDcgPDwgZGRyY1JlZ19DVExSX1RfV1RSX1NISUZUKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1hQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfWFBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ZmYgPDwgZGRyY1JlZ19DVExSX1RfWFBfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfWFNSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9YU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhmZiA8PCBkZHJjUmVnX0NUTFJfVF9YU1JfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfRVNSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9FU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhmZiA8PCBkZHJjUmVnX0NUTFJfVF9FU1JfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkcyX1dJRFRIX01BU0sgICAgICAgICAgICAgKDB4MyA8PCA2KQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfV0lEVEhfMTZCSVRTICAgICAgICAgICAoMCA8PCA2KQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfV0lEVEhfMzJCSVRTICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfV0lEVEhfNjRCSVRTICAgICAgICAgICAoMiA8PCA2KQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHMl9BWElfQkFOS19CSVRTX01BU0sgICAgICgweDMgPDwgNCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkcyX0FYSV9CQU5LX0JJVFNfMiAgICAgICAgKDAgPDwgNCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkcyX0FYSV9CQU5LX0JJVFNfMyAgICAgICAgKDMgPDwgNCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfQ0tFX0lOSVRfU1RBVEVfTE9XICAgICAoMCA8PCAzKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfQ0tFX0lOSVRfU1RBVEVfSElHSCAgICAoMSA8PCAzKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHMl9EUU1fSU5JVF9TVEFURV9MT1cgICAgICgwIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHMl9EUU1fSU5JVF9TVEFURV9ISUdIICAgICgxIDw8IDIpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkcyX0NMS19NQVNLICAgICAgICAgICAgICAgKDB4MyA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfQ0xLX0FTWU5DICAgICAgICAgICAgICAoMCA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfQ0xLX1NZTkNfQV9MRV9NICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfQ0xLX1NZTkNfQV9HVF9NICAgICAgICAoMyA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHM19SRUZSRVNIX1RPX1NISUZUICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkczX1JFRlJFU0hfVE9fTUFTSyAgICAgICAgKDB4NyA8PCBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzNfUkVGUkVTSF9UT19TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9GQVdfU0NIRURVTEVfREVMQVlfU0hJRlQgICAgICAgICA4CisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX0ZBV19TQ0hFRFVMRV9ERUxBWV9NQVNLICAgICAgICAgICgweDFmIDw8IGRkcmNSZWdfQ1RMUl9UX0ZBV19TQ0hFRFVMRV9ERUxBWV9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9GQVdfUEVSSU9EX1NISUZUICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX0ZBV19QRVJJT0RfTUFTSyAgICAgICAgICAgICAgICAgICgweDFmIDw8IGRkcmNSZWdfQ1RMUl9UX0ZBV19QRVJJT0RfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQVJNIFBMMzQxIEFYSSBJRCBRT1MgY29uZmlndXJhdGlvbiByZWdpc3RlcnMsIG9mZnNldCAweDEwMCAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1FPU19DTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1FPU19NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRkcmNSZWdfQ1RMUl9RT1NfQ05UIC0gMSkKKworCXR5cGVkZWYgc3RydWN0IHsKKwkJdWludDMyX3QgY2ZnW2RkcmNSZWdfQ1RMUl9RT1NfQ05UXTsKKwl9IGRkcmNSZWdfQ1RMUl9RT1NfUkVHX3Q7CisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1FPU19SRUdfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1FPU19SRUdQICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSBkZHJjUmVnX0NUTFJfUU9TX1JFR190ICopIChNTV9JT19CQVNFX0REUkMgKyBkZHJjUmVnX0NUTFJfUU9TX1JFR19PRkZTRVQpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9RT1NfQ0ZHX01BWF9TSElGVCAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1FPU19DRkdfTUFYX01BU0sgICAgICAgICAgICAgICAgICAgKDB4ZmYgPDwgZGRyY1JlZ19DVExSX1FPU19DRkdfTUFYX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9RT1NfQ0ZHX01JTl9TSElGVCAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1FPU19DRkdfTUlOX01BU0sgICAgICAgICAgICAgICAgICAgKDEgPDwgZGRyY1JlZ19DVExSX1FPU19DRkdfTUlOX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9RT1NfQ0ZHX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQVJNIFBMMzQxIE1lbW9yeSBjaGlwIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBvZmZzZXQgMHgyMDAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9DSElQX0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0NISVBfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRkcmNSZWdfQ1RMUl9DSElQX0NOVCAtIDEpCisKKwl0eXBlZGVmIHN0cnVjdCB7CisJCXVpbnQzMl90IGNmZ1tkZHJjUmVnX0NUTFJfQ0hJUF9DTlRdOworCX0gZGRyY1JlZ19DVExSX0NISVBfUkVHX3Q7CisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0NISVBfUkVHX09GRlNFVCAgICAgICAgICAgICAgICAgICAgMHgyMDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0NISVBfUkVHUCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSBkZHJjUmVnX0NUTFJfQ0hJUF9SRUdfdCAqKSAoTU1fSU9fQkFTRV9ERFJDICsgZGRyY1JlZ19DVExSX0NISVBfUkVHX09GRlNFVCkpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0NISVBfQ0ZHX01FTV9PUkdfTUFTSyAgICAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9DSElQX0NGR19NRU1fT1JHX1JPV19CQU5LX0NPTCAgICAgICgwIDw8IDE2KQorI2RlZmluZSBkZHJjUmVnX0NUTFJfQ0hJUF9DRkdfTUVNX09SR19CQU5LX1JPV19DT0wgICAgICAoMSA8PCAxNikKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfQ0hJUF9DRkdfQVhJX0FERFJfTUFUQ0hfU0hJRlQgICAgICA4CisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9DSElQX0NGR19BWElfQUREUl9NQVRDSF9NQVNLICAgICAgICgweGZmIDw8IGRkcmNSZWdfQ1RMUl9DSElQX0NGR19BWElfQUREUl9NQVRDSF9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfQ0hJUF9DRkdfQVhJX0FERFJfTUFTS19TSElGVCAgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9DSElQX0NGR19BWElfQUREUl9NQVNLX01BU0sgICAgICAgICgweGZmIDw8IGRkcmNSZWdfQ1RMUl9DSElQX0NGR19BWElfQUREUl9NQVNLX1NISUZUKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIEFSTSBQTDM0MSBVc2VyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBvZmZzZXQgMHgzMDAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX09VVFBVVF9DTlQgICAgICAgICAgICAgICAgICAgIDIKKworCXR5cGVkZWYgc3RydWN0IHsKKwkJdWludDMyX3QgaW5wdXQ7CisJCXVpbnQzMl90IG91dHB1dFtkZHJjUmVnX0NUTFJfVVNFUl9PVVRQVVRfQ05UXTsKKwkJdWludDMyX3QgZmVhdHVyZTsKKwl9IGRkcmNSZWdfQ1RMUl9VU0VSX1JFR190OworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX1JFR19PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MzAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX1JFR1AgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgZGRyY1JlZ19DVExSX1VTRVJfUkVHX3QgKikgKE1NX0lPX0JBU0VfRERSQyArIGRkcmNSZWdfQ1RMUl9VU0VSX1JFR19PRkZTRVQpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX0lOUFVUX1NUQVRVU19TSElGVCAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1VTRVJfSU5QVVRfU1RBVFVTX01BU0sgICAgICAgICAgICAgKDB4ZmYgPDwgZGRyY1JlZ19DVExSX1VTRVJfSU5QVVRfU1RBVFVTX1NISUZUKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX09VVFBVVF9DRkdfU0hJRlQgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1VTRVJfT1VUUFVUX0NGR19NQVNLICAgICAgICAgICAgICAgKDB4ZmYgPDwgZGRyY1JlZ19DVExSX1VTRVJfT1VUUFVUX0NGR19TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfVVNFUl9PVVRQVVRfMF9DRkdfU1lOQ19CUklER0VfU0hJRlQgICAgICAxCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX09VVFBVVF8wX0NGR19TWU5DX0JSSURHRV9NQVNLICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9VU0VSX09VVFBVVF8wX0NGR19TWU5DX0JSSURHRV9TSElGVCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1VTRVJfT1VUUFVUXzBfQ0ZHX1NZTkNfQlJJREdFX0JQMTM0ICAgICAgKDAgPDwgZGRyY1JlZ19DVExSX1VTRVJfT1VUUFVUXzBfQ0ZHX1NZTkNfQlJJREdFX1NISUZUKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfVVNFUl9PVVRQVVRfMF9DRkdfU1lOQ19CUklER0VfUEwzMDEgICAgICAoMSA8PCBkZHJjUmVnX0NUTFJfVVNFUl9PVVRQVVRfMF9DRkdfU1lOQ19CUklER0VfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX09VVFBVVF8wX0NGR19TWU5DX0JSSURHRV9SRUdJU1RFUkVEIGRkcmNSZWdfQ1RMUl9VU0VSX09VVFBVVF8wX0NGR19TWU5DX0JSSURHRV9QTDMwMQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9GRUFUVVJFX1dSSVRFX0JMT0NLX0RJU0FCTEUgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9GRUFUVVJFX0VBUkxZX0JVUlNUX1JTUF9ESVNBQkxFICAgICgxIDw8IDApCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBCcm9hZGNvbSBERFIyMyBQSFkgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQnJvYWRjb20gRERSMjMgUEhZIEFkZHJlc3MgYW5kIENvbnRyb2wgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJdHlwZWRlZiBzdHJ1Y3QgeworCQl1aW50MzJfdCByZXZpc2lvbjsKKwkJdWludDMyX3QgcG1DdGw7CisJCSBSRUczMl9SU1ZEKDB4MDAwOCwgMHgwMDEwKTsKKwkJdWludDMyX3QgcGxsU3RhdHVzOworCQl1aW50MzJfdCBwbGxDZmc7CisJCXVpbnQzMl90IHBsbFByZURpdjsKKwkJdWludDMyX3QgcGxsRGl2OworCQl1aW50MzJfdCBwbGxDdGwxOworCQl1aW50MzJfdCBwbGxDdGwyOworCQl1aW50MzJfdCBzc0N0bDsKKwkJdWludDMyX3Qgc3NDZmc7CisJCXVpbnQzMl90IHZkbFN0YXRpYzsKKwkJdWludDMyX3QgdmRsRHluYW1pYzsKKwkJdWludDMyX3QgcGFkSWRsZTsKKwkJdWludDMyX3QgcHZ0Q29tcDsKKwkJdWludDMyX3QgcGFkRHJpdmU7CisJCXVpbnQzMl90IGNsa1JnbHRyQ3RsOworCX0gZGRyY1JlZ19QSFlfQUREUl9DVExfUkVHX3Q7CisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUkVHX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1JFR1AgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgZGRyY1JlZ19QSFlfQUREUl9DVExfUkVHX3QgKikgKE1NX0lPX0JBU0VfRERSQyArIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1JFR19PRkZTRVQpKQorCisvKiBAdG9kbyBUaGVzZSBTUyBkZWZpbml0aW9ucyBhcmUgZHVwbGljYXRlcyBvZiBvbmVzIGJlbG93ICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9TU19DVFJMX0VOQUJMRSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX1NTX0NGR19DWUNMRV9QRVJfVElDS19NQVNLICAgICAweEZGRkYwMDAwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfU1NfQ0ZHX0NZQ0xFX1BFUl9USUNLX1NISUZUICAgIDE2CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfU1NfQ0ZHX01JTl9DWUNMRV9QRVJfVElDSyAgICAgIDEwCS8qIEhpZ2hlciB0aGUgdmFsdWUsIGxvd2VyIHRoZSBTUyBtb2R1bGF0aW9uIGZyZXF1ZW5jeSAqLworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX1NTX0NGR19ORElWX0FNUExJVFVERV9NQVNLICAgICAweDAwMDBGRkZGCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfU1NfQ0ZHX05ESVZfQU1QTElUVURFX1NISUZUICAgIDAKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9SRVZJU0lPTl9NQUpPUl9TSElGVCAgICAgICA4CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1JFVklTSU9OX01BSk9SX01BU0sgICAgICAgICgweGZmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1JFVklTSU9OX01BSk9SX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1JFVklTSU9OX01JTk9SX1NISUZUICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUkVWSVNJT05fTUlOT1JfTUFTSyAgICAgICAgKDB4ZmYgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUkVWSVNJT05fTUlOT1JfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfQ0xLX1BNX0NUTF9ERFJfQ0xLX0RJU0FCTEUgKDEgPDwgMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfU1RBVFVTX0xPQ0tFRCAgICAgICAgICAoMSA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfRElWMl9DTEtfUkVTRVQgICAgICgxIDw8IDMxKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfVEVTVF9TRUxfU0hJRlQgICAgIDE3CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfVEVTVF9TRUxfTUFTSyAgICAgICgweDFmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfVEVTVF9TRUxfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NGR19URVNUX0VOQUJMRSAgICAgICAgKDEgPDwgMTYpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NGR19CR0FQX0FESl9TSElGVCAgICAgMTIKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NGR19CR0FQX0FESl9NQVNLICAgICAgKDB4ZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ0ZHX0JHQVBfQURKX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfVkNPX1JORyAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfQ0gxX1BXUkRXTiAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfQllQQVNTX0VOQUJMRSAgICAgICgxIDw8IDUpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfQ0xLT1VUX0VOQUJMRSAgICAgICgxIDw8IDQpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfRF9SRVNFVCAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfQV9SRVNFVCAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfUFdSRFdOICAgICAgICAgICAgICgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX1BSRV9ESVZfRElUSEVSX01GQiAgICAgKDEgPDwgMjYpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9QUkVfRElWX1BXUkRXTiAgICAgICAgICgxIDw8IDI1KQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9QUkVfRElWX01PREVfU0hJRlQgICAgIDIwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9QUkVfRElWX01PREVfTUFTSyAgICAgICgweDcgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX1BSRV9ESVZfTU9ERV9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfUFJFX0RJVl9JTlRfU0hJRlQgICAgICA4CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9QUkVfRElWX0lOVF9NQVNLICAgICAgICgweDFmZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfUFJFX0RJVl9JTlRfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX1BSRV9ESVZfUDJfU0hJRlQgICAgICAgNAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfUFJFX0RJVl9QMl9NQVNLICAgICAgICAoMHhmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9QUkVfRElWX1AyX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9QUkVfRElWX1AxX1NISUZUICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX1BSRV9ESVZfUDFfTUFTSyAgICAgICAgKDB4ZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfUFJFX0RJVl9QMV9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfRElWX00xX1NISUZUICAgICAgICAgICAyNAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfRElWX00xX01BU0sgICAgICAgICAgICAoMHhmZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfRElWX00xX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9ESVZfRlJBQ19TSElGVCAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0RJVl9GUkFDX01BU0sgICAgICAgICAgKDB4ZmZmZmZmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9ESVZfRlJBQ19TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9URVNUQV9TSElGVCAgICAgICAzMAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9URVNUQV9NQVNLICAgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX1RFU1RBX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX0tWQ09fWFNfU0hJRlQgICAgIDI3CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX0tWQ09fWFNfTUFTSyAgICAgICgweDcgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfS1ZDT19YU19TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9LVkNPX1hGX1NISUZUICAgICAyNAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9LVkNPX1hGX01BU0sgICAgICAoMHg3IDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX0tWQ09fWEZfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfTFBGX0JXX1NISUZUICAgICAgMjIKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfTFBGX0JXX01BU0sgICAgICAgKDB4MyA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9MUEZfQldfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfTEZfT1JERVIgICAgICAgICAgKDB4MSA8PCAyMSkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9DTl9TSElGVCAgICAgICAgICAxOQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9DTl9NQVNLICAgICAgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX0NOX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX1JOX1NISUZUICAgICAgICAgIDE3CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX1JOX01BU0sgICAgICAgICAgICgweDMgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfUk5fU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfQ1BfU0hJRlQgICAgICAgICAgMTUKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfQ1BfTUFTSyAgICAgICAgICAgKDB4MyA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9DUF9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9DWl9TSElGVCAgICAgICAgICAxMworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9DWl9NQVNLICAgICAgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX0NaX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX1JaX1NISUZUICAgICAgICAgIDEwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX1JaX01BU0sgICAgICAgICAgICgweDcgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfUlpfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfSUNQWF9TSElGVCAgICAgICAgNQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9JQ1BYX01BU0sgICAgICAgICAoMHgxZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9JQ1BYX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX0lDUF9PRkZfU0hJRlQgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfSUNQX09GRl9NQVNLICAgICAgKDB4MWYgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfSUNQX09GRl9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDJfUFRBUF9BREpfU0hJRlQgICAgNAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMl9QVEFQX0FESl9NQVNLICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwyX1BUQVBfQURKX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwyX0NUQVBfQURKX1NISUZUICAgIDIKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDJfQ1RBUF9BREpfTUFTSyAgICAgKDB4MyA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMl9DVEFQX0FESl9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMl9MT1dDVVJfRU5BQkxFICAgICAoMHgxIDw8IDEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwyX0JJQVNJTl9FTkFCTEUgICAgICgweDEgPDwgMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfU1NfRU5fRU5BQkxFICAgICAgICAgICAoMHgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX1NTX0NGR19DWUNfUEVSX1RJQ0tfU0hJRlQgIDE2CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9TU19DRkdfQ1lDX1BFUl9USUNLX01BU0sgICAoMHhmZmZmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9TU19DRkdfQ1lDX1BFUl9USUNLX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9TU19DRkdfTkRJVl9BTVBfU0hJRlQgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9TU19DRkdfTkRJVl9BTVBfTUFTSyAgICAgICAoMHhmZmZmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9TU19DRkdfTkRJVl9BTVBfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX1NUQVRJQ19PVlJfRk9SQ0UgICAgICAgICAgICgxIDw8IDIwKQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9WRExfU1RBVElDX09WUl9FTkFCTEUgICAgICAgICAgKDEgPDwgMTYpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX1NUQVRJQ19PVlJfRkFMTF9TSElGVCAgICAgIDEyCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9TVEFUSUNfT1ZSX0ZBTExfTUFTSyAgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9TVEFUSUNfT1ZSX0ZBTExfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX1NUQVRJQ19PVlJfUklTRV9TSElGVCAgICAgIDgKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX1NUQVRJQ19PVlJfUklTRV9NQVNLICAgICAgICgweDMgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX1NUQVRJQ19PVlJfUklTRV9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9WRExfU1RBVElDX09WUl9TVEVQX1NISUZUICAgICAgMAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9WRExfU1RBVElDX09WUl9TVEVQX01BU0sgICAgICAgKDB4M2YgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX1NUQVRJQ19PVlJfU1RFUF9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9WRExfRFlOQU1JQ19PVlJfRU5BQkxFICAgICAgICAgKDEgPDwgMTYpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX0RZTkFNSUNfT1ZSX0ZBTExfU0hJRlQgICAgIDEyCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9GQUxMX01BU0sgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9GQUxMX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9SSVNFX1NISUZUICAgICA4CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9SSVNFX01BU0sgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9SSVNFX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9TVEVQX1NISUZUICAgICAwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9TVEVQX01BU0sgICAgICAoMHgzZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9WRExfRFlOQU1JQ19PVlJfU1RFUF9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QQURfSURMRV9FTkFCTEUgICAgICAgICAgICAoMXUgPDwgMzEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX1JYRU5CX0RJU0FCTEUgICAgICgxIDw8IDgpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX0NUTF9JRERRX0RJU0FCTEUgICgxIDw8IDYpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX0NUTF9SRUJfRElTQUJMRSAgICgxIDw8IDUpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX0NUTF9PRUJfRElTQUJMRSAgICgxIDw8IDQpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX0NLRV9JRERRX0RJU0FCTEUgICgxIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX0NLRV9SRUJfRElTQUJMRSAgICgxIDw8IDEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX0NLRV9PRUJfRElTQUJMRSAgICgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfUERfRE9ORSAgICAgICAgICAgKDEgPDwgMzApCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX05EX0RPTkUgICAgICAgICAgICgxIDw8IDI5KQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9TQU1QTEVfRE9ORSAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfU0FNUExFX0FVVE9fRU5BQkxFICAgICgxIDw8IDI3KQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9TQU1QTEVfRU5BQkxFICAgICAoMSA8PCAyNikKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfQUREUl9PVlJfRU5BQkxFICAgKDEgPDwgMjUpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX0RRX09WUl9FTkFCTEUgICAgICgxIDw8IDI0KQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX1BEX1NISUZUICAgICAgICAgIDIwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX1BEX01BU0sgICAgICAgICAgICgweGYgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfUERfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfTkRfU0hJRlQgICAgICAgICAgMTYKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfTkRfTUFTSyAgICAgICAgICAgKDB4ZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9ORF9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9BRERSX1BEX1NISUZUICAgICAxMgorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9BRERSX1BEX01BU0sgICAgICAoMHhmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX0FERFJfUERfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfQUREUl9ORF9TSElGVCAgICAgOAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9BRERSX05EX01BU0sgICAgICAoMHhmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX0FERFJfTkRfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfRFFfUERfU0hJRlQgICAgICAgNAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9EUV9QRF9NQVNLICAgICAgICAoMHhmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX0RRX1BEX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX0RRX05EX1NISUZUICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfRFFfTkRfTUFTSyAgICAgICAgKDB4ZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9EUV9ORF9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QQURfRFJJVkVfUlQ2MEIgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QQURfRFJJVkVfU0VMX1NTVEwxOCAgICAgICAoMSA8PCAzKQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QQURfRFJJVkVfU0VMVFhEUlZfQ0kgICAgICAoMSA8PCAyKQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QQURfRFJJVkVfU0VMUlhEUlYgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QQURfRFJJVkVfU0xFVyAgICAgICAgICAgICAoMSA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX0NMS19SR0xUUl9DVExfUFdSX0hBTEYgICAgICgxIDw8IDEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX0NMS19SR0xUUl9DVExfUFdSX09GRiAgICAgICgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQnJvYWRjb20gRERSMjMgUEhZIEJ5dGUgTGFuZSByZWdpc3RlciBkZWZpbml0aW9ucyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX0NOVCAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfTUFYICAgICAgICAgICAgICAgICAgICAgICAoZGRyY1JlZ19DVExSX0JZVEVfTEFORV9DTlQgLSAxKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfT1ZSX0NOVCAgICAgICAgICAgICAgIDgKKworCXR5cGVkZWYgc3RydWN0IHsKKwkJdWludDMyX3QgcmV2aXNpb247CisJCXVpbnQzMl90IHZkbENhbGlicmF0ZTsKKwkJdWludDMyX3QgdmRsU3RhdHVzOworCQkgUkVHMzJfUlNWRCgweDAwMGMsIDB4MDAxMCk7CisJCXVpbnQzMl90IHZkbE92ZXJyaWRlW2RkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfT1ZSX0NOVF07CisJCXVpbnQzMl90IHJlYWRDdGw7CisJCXVpbnQzMl90IHJlYWRTdGF0dXM7CisJCXVpbnQzMl90IHJlYWRDbGVhcjsKKwkJdWludDMyX3QgcGFkSWRsZUN0bDsKKwkJdWludDMyX3QgcGFkRHJpdmVDdGw7CisJCXVpbnQzMl90IHBhZENsa0N0bDsKKwkJdWludDMyX3Qgd3JpdGVDdGw7CisJCXVpbnQzMl90IGNsa1JlZ0N0bDsKKwl9IGRkcmNSZWdfUEhZX0JZVEVfTEFORV9SRUdfdDsKKworLyogVGhlcmUgYXJlIDIgaW5zdGFuY2VzIG9mIHRoZSBieXRlIExhbmUgcmVnaXN0ZXJzLCBvbmUgZm9yIGVhY2ggYnl0ZSBsYW5lLiAqLworI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfMV9SRUdfT0ZGU0VUICAgICAgICAgICAgICAweDA1MDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FXzJfUkVHX09GRlNFVCAgICAgICAgICAgICAgMHgwNjAwCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FXzFfUkVHUCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVHX3QgKikgKE1NX0lPX0JBU0VfRERSQyArIGRkcmNSZWdfUEhZX0JZVEVfTEFORV8xX1JFR19PRkZTRVQpKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfMl9SRUdQICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9SRUdfdCAqKSAoTU1fSU9fQkFTRV9ERFJDICsgZGRyY1JlZ19QSFlfQllURV9MQU5FXzJfUkVHX09GRlNFVCkpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1JFVklTSU9OX01BSk9SX1NISUZUICAgICAgOAorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVWSVNJT05fTUFKT1JfTUFTSyAgICAgICAoMHhmZiA8PCBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVWSVNJT05fTUFKT1JfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1JFVklTSU9OX01JTk9SX1NISUZUICAgICAgMAorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVWSVNJT05fTUlOT1JfTUFTSyAgICAgICAoMHhmZiA8PCBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVWSVNJT05fTUlOT1JfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9DQUxJQl9DTEtfMkNZQ0xFICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9DQUxJQl9DTEtfMUNZQ0xFICAgICAgKDAgPDwgNCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX0NBTElCX1RFU1QgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX0NBTElCX0FMV0FZUyAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX0NBTElCX09OQ0UgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX0NBTElCX0ZBU1QgICAgICAgICAgICAoMSA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUaGUgYnl0ZSBsYW5lIFZETCBzdGF0dXMgY2FsaWJUb3RhbFs5OjBdIGlzIGNvbXByaXNlZCBvZiBbOTo0XSBzdGVwIHZhbHVlLCBbMzoyXSBmaW5lIGZhbGwgKi8KKy8qIGFuZCBbMTowXSBmaW5lIHJpc2UuIE5vdGUgdGhhdCBjYWxpYlRvdGFsWzk6MF0gaXMgbG9jYXRlZCBhdCBiaXQgNCBpbiB0aGUgVkRMIHN0YXR1cyAqLworLyogcmVnaXN0ZXIuIFRoZSBmaW5lIHJpc2UgYW5kIGZhbGwgYXJlIG5vIGxvbmdlciB1c2VkLCBzbyBhZGQgc29tZSBkZWZpbml0aW9ucyBmb3IganVzdCAqLworLyogdGhlIHN0ZXAgc2V0dGluZyB0byBzaW1wbGlmeSB0aGluZ3MuICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9TVEFUVVNfU1RFUF9TSElGVCAgICAgOAorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX1NUQVRVU19TVEVQX01BU0sgICAgICAoMHgzZiA8PCBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX1NUQVRVU19TVEVQX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfU1RBVFVTX1RPVEFMX1NISUZUICAgIDQKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9TVEFUVVNfVE9UQUxfTUFTSyAgICAgKDB4M2ZmIDw8IGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfU1RBVFVTX1RPVEFMX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfU1RBVFVTX0xPQ0sgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfU1RBVFVTX0lETEUgICAgICAgICAgICgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfRU5BQkxFICAgICAgICAgICAgKDEgPDwgMTYpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfRkFMTF9TSElGVCAgICAgICAgMTIKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfRkFMTF9NQVNLICAgICAgICAgKDB4MyA8PCBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX09WUl9GQUxMX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfT1ZSX1JJU0VfU0hJRlQgICAgICAgIDgKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfUklTRV9NQVNLICAgICAgICAgKDB4MyA8PCBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX09WUl9SSVNFX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfT1ZSX1NURVBfU0hJRlQgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfU1RFUF9NQVNLICAgICAgICAgKDB4M2YgPDwgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfU1RFUF9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX09WUl9JRFhfU1RBVElDX1JFQURfRFFTX1AgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfSURYX1NUQVRJQ19SRUFEX0RRU19OICAgICAxCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfT1ZSX0lEWF9TVEFUSUNfUkVBRF9FTiAgICAgICAgMgorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX09WUl9JRFhfU1RBVElDX1dSSVRFX0RRX0RRTSAgIDMKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfSURYX0RZTkFNSUNfUkVBRF9EUVNfUCAgICA0CisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfT1ZSX0lEWF9EWU5BTUlDX1JFQURfRFFTX04gICAgNQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX09WUl9JRFhfRFlOQU1JQ19SRUFEX0VOICAgICAgIDYKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfSURYX0RZTkFNSUNfV1JJVEVfRFFfRFFNICA3CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1JFQURfQ1RMX0RFTEFZX1NISUZUICAgICAgOAorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVBRF9DVExfREVMQVlfTUFTSyAgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0JZVEVfTEFORV9SRUFEX0NUTF9ERUxBWV9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVBRF9DVExfRFFfT0RUX0VOQUJMRSAgICAoMSA8PCAzKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVBRF9DVExfRFFfT0RUX0FESlVTVCAgICAoMSA8PCAyKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVBRF9DVExfUkRfT0RUX0VOQUJMRSAgICAoMSA8PCAxKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVBRF9DVExfUkRfT0RUX0FESlVTVCAgICAoMSA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9SRUFEX1NUQVRVU19FUlJPUl9TSElGVCAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1JFQURfU1RBVFVTX0VSUk9SX01BU0sgICAgKDB4ZiA8PCBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVBRF9TVEFUVVNfRVJST1JfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1JFQURfQ0xFQVJfU1RBVFVTICAgICAgICAgKDEgPDwgMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0VOQUJMRSAgICAgICAgICAgICAgICAgICAoMXUgPDwgMzEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfSURMRV9DVExfRE1fUlhFTkJfRElTQUJMRSAgICAgICAgICgxIDw8IDE5KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RNX0lERFFfRElTQUJMRSAgICAgICAgICAoMSA8PCAxOCkKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1BBRF9JRExFX0NUTF9ETV9SRUJfRElTQUJMRSAgICAgICAgICAgKDEgPDwgMTcpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfSURMRV9DVExfRE1fT0VCX0RJU0FCTEUgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RRX1JYRU5CX0RJU0FCTEUgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1BBRF9JRExFX0NUTF9EUV9JRERRX0RJU0FCTEUgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfSURMRV9DVExfRFFfUkVCX0RJU0FCTEUgICAgICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RRX09FQl9ESVNBQkxFICAgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1BBRF9JRExFX0NUTF9SRUFEX0VOQl9SWEVOQl9ESVNBQkxFICAgKDEgPDwgMTEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfSURMRV9DVExfUkVBRF9FTkJfSUREUV9ESVNBQkxFICAgICgxIDw8IDEwKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX1JFQURfRU5CX1JFQl9ESVNBQkxFICAgICAoMSA8PCA5KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX1JFQURfRU5CX09FQl9ESVNBQkxFICAgICAoMSA8PCA4KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RRU19SWEVOQl9ESVNBQkxFICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RRU19JRERRX0RJU0FCTEUgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RRU19SRUJfRElTQUJMRSAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RRU19PRUJfRElTQUJMRSAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0NMS19SWEVOQl9ESVNBQkxFICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0NMS19JRERRX0RJU0FCTEUgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0NMS19SRUJfRElTQUJMRSAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0NMS19PRUJfRElTQUJMRSAgICAgICAgICAoMSA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfRFJJVkVfQ1RMX1JUNjBCX0REUl9SRUFEX0VOQiAgICAgICgxIDw8IDUpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfRFJJVkVfQ1RMX1JUNjBCICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfRFJJVkVfQ1RMX1NFTF9TU1RMMTggICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfRFJJVkVfQ1RMX1NFTFRYRFJWX0NJICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfRFJJVkVfQ1RMX1NFTFJYRFJWICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfRFJJVkVfQ1RMX1NMRVcgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1BBRF9DTEtfQ1RMX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfV1JJVEVfQ1RMX1BSRUFNQkxFX0REUjMgICAgICAgICAgICAgICAoMSA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9DTEtfUkVHX0NUTF9QV1JfSEFMRiAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9DTEtfUkVHX0NUTF9QV1JfT0ZGICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBUk0gUEwzNDEgRERSQyB0byBCcm9hZGNvbSBERFIyMyBQSFkgZ2x1ZSByZWdpc3RlciBkZWZpbml0aW9ucyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCXR5cGVkZWYgc3RydWN0IHsKKwkJdWludDMyX3QgY2ZnOworCQl1aW50MzJfdCBhY3RNb25DbnQ7CisJCXVpbnQzMl90IGN0bDsKKwkJdWludDMyX3QgbGJpc3RDdGw7CisJCXVpbnQzMl90IGxiaXN0U2VlZDsKKwkJdWludDMyX3QgbGJpc3RTdGF0dXM7CisJCXVpbnQzMl90IHRpZU9mZjsKKwkJdWludDMyX3QgYWN0TW9uQ2xlYXI7CisJCXVpbnQzMl90IHN0YXR1czsKKwkJdWludDMyX3QgdXNlcjsKKwl9IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9SRUdfdDsKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfUkVHUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX1JFR190ICopIChNTV9JT19CQVNFX0REUkMgKyBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfT0ZGU0VUKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRERSMiAvIEFYSSBibG9jayBwaGFzZSBhbGlnbm1lbnQgaW50ZXJydXB0IGNvbnRyb2wgKi8KKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19JTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDMgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19JTlRfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfSU5UX09GRiAgICAgICAgICAgICAgICAgICAgICAgKDAgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19JTlRfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfSU5UX09OX1RJR0hUICAgICAgICAgICAgICAgICAgKDEgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19JTlRfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfSU5UX09OX01FRElVTSAgICAgICAgICAgICAgICAgKDIgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19JTlRfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfSU5UX09OX0xPT1NFICAgICAgICAgICAgICAgICAgKDMgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19JTlRfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QTExfUkVGQ0xLX1NISUZUICAgICAgICAgICAgICAxNworI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX1BMTF9SRUZDTEtfTUFTSyAgICAgICAgICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfUExMX1JFRkNMS19TSElGVCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QTExfUkVGQ0xLX0RJRkZFUkVOVElBTCAgICAgICAoMCA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX1BMTF9SRUZDTEtfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfUExMX1JFRkNMS19DTU9TICAgICAgICAgICAgICAgKDEgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QTExfUkVGQ0xLX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfRElWMkNMS19UUkVFX1NISUZUICAgICAgICAgICAgMTYKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19ESVYyQ0xLX1RSRUVfTUFTSyAgICAgICAgICAgICAoMSA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RJVjJDTEtfVFJFRV9TSElGVCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19ESVYyQ0xLX1RSRUVfREVFUCAgICAgICAgICAgICAoMCA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RJVjJDTEtfVFJFRV9TSElGVCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19ESVYyQ0xLX1RSRUVfU0hBTExPVyAgICAgICAgICAoMSA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RJVjJDTEtfVFJFRV9TSElGVCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19IV19GSVhFRF9BTElHTk1FTlRfRElTQUJMRUQgICBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RJVjJDTEtfVFJFRV9TSEFMTE9XCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19TWU5DX0JSSURHRV9TSElGVCAgICAgICAgICAgICAxNQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX1NZTkNfQlJJREdFX01BU0sgICAgICAgICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfU1lOQ19CUklER0VfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfU1lOQ19CUklER0VfQlAxMzQgICAgICAgICAgICAgKDAgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19TWU5DX0JSSURHRV9TSElGVCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19TWU5DX0JSSURHRV9QTDMwMSAgICAgICAgICAgICAoMSA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX1NZTkNfQlJJREdFX1NISUZUKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX1NZTkNfQlJJREdFX1JFR0lTVEVSRUQgICAgICAgIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfU1lOQ19CUklER0VfUEwzMDEKKworLyogU29mdHdhcmUgY29udHJvbCBvZiBQSFkgVkRMIHVwZGF0ZXMgZnJvbSBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmdzLiBCaXQgMTMgZW5hYmxlcyB0aGUgdXNlIG9mIEJpdCAxNC4gKi8KKy8qIElmIHNvZnR3YXJlIGNvbnRyb2wgaXMgbm90IGVuYWJsZWQsIHRoZW4gdXBkYXRlcyBvY2N1ciB3aGVuIGEgcmVmcmVzaCBjb21tYW5kIGlzIGlzc3VlZCBieSB0aGUgaGFyZHdhcmUgKi8KKy8qIGNvbnRyb2xsZXIuIElmIDIgY2hpcHMgc2VsZWN0cyBhcmUgYmVpbmcgdXNlZCwgdGhlbiBzb2Z0d2FyZSBjb250cm9sIG11c3QgYmUgZW5hYmxlZC4gKi8KKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QSFlfVkRMX1VQREFURV9TV19DVExfTE9BRCAgICAoMSA8PCAxNCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QSFlfVkRMX1VQREFURV9TV19DVExfRU5BQkxFICAoMSA8PCAxMykKKworLyogVXNlIHRoZXNlIHRvIGJ5cGFzcyBhIHBpcGVsaW5lIHN0YWdlLiBCeSBkZWZhdWx0IHRoZSBBRERSIGlzIG9mZiBidXQgdGhlIEJZVEUgTEFORSBpbiAvIG91dCBhcmUgb24uICovCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfUEhZX0FERFJfQ1RMX0lOX0JZUEFTU19QSVBFTElORV9TVEFHRSAoMSA8PCAxMikKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QSFlfQllURV9MQU5FX0lOX0JZUEFTU19QSVBFTElORV9TVEFHRSAoMSA8PCAxMSkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QSFlfQllURV9MQU5FX09VVF9CWVBBU1NfUElQRUxJTkVfU1RBR0UgKDEgPDwgMTApCisKKy8qIENoaXAgc2VsZWN0IGNvdW50ICovCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ1NfQ05UX1NISUZUICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NTX0NOVF9NQVNLICAgICAgICAgICAgICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ1NfQ05UX1NISUZUKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NTX0NOVF8xICAgICAgICAgICAgICAgICAgICAgICgwIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ1NfQ05UX1NISUZUKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NTX0NOVF8yICAgICAgICAgICAgICAgICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ1NfQ05UX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0xLX1NISUZUICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NMS19BU1lOQyAgICAgICAgICAgICAgICAgICAgICgwIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0xLX1NISUZUKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NMS19TWU5DICAgICAgICAgICAgICAgICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0xLX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0tFX0lOSVRfU0hJRlQgICAgICAgICAgICAgICAgNworI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NLRV9JTklUX0xPVyAgICAgICAgICAgICAgICAgICgwIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0tFX0lOSVRfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0tFX0lOSVRfSElHSCAgICAgICAgICAgICAgICAgKDEgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19DS0VfSU5JVF9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RRTV9JTklUX1NISUZUICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19EUU1fSU5JVF9MT1cgICAgICAgICAgICAgICAgICAoMCA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RRTV9JTklUX1NISUZUKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RRTV9JTklUX0hJR0ggICAgICAgICAgICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfRFFNX0lOSVRfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19DQVNfTEFURU5DWV9TSElGVCAgICAgICAgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0FTX0xBVEVOQ1lfTUFTSyAgICAgICAgICAgICAgKDB4NyA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NBU19MQVRFTkNZX1NISUZUKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfU1RBVFVTX1BIQVNFX1NISUZUICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX1NUQVRVU19QSEFTRV9NQVNLICAgICAgICAgICAgICAgICAoMHg3ZiA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfU1RBVFVTX1BIQVNFX1NISUZUKQorCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30JCQkJLyogZW5kIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorI2VuZGlmCQkJCS8qIEREUkNfUkVHX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2RtYWNId19wcml2LmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kbWFjSHdfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NTA2NmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kbWFjSHdfcHJpdi5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgZG1hY0h3X3ByaXYuaAorKgorKiAgQGJyaWVmICAgUHJpdmF0ZSBEZWZpbml0aW9ucyBmb3IgbG93IGxldmVsIERNQSBkcml2ZXIKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfRE1BQ0hXX1BSSVZfSAorI2RlZmluZSBfRE1BQ0hXX1BSSVZfSAorCisjaW5jbHVkZSA8Y3NwL3N0ZGludC5oPgorCisvKiBEYXRhIHR5cGUgZm9yIERNQSBMaW5rIExpc3QgSXRlbSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IHNhcjsJCS8qIFNvdXJjZSBBZHJlc3MgUmVnaXN0ZXIuCisJCQkJICAgQWRkcmVzcyBtdXN0IGJlIGFsaWduZWQgdG8gQ1RMeC5TUkNfVFJfV0lEVEguICAgICAgICAgICAgICovCisJdWludDMyX3QgZGFyOwkJLyogRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3Rlci4KKwkJCQkgICBBZGRyZXNzIG11c3QgYmUgYWxpZ25lZCB0byBDVEx4LkRTVF9UUl9XSURUSC4gICAgICAgICAgICAgKi8KKwl1aW50MzJfdCBsbHBQaHk7CS8qIExMUCBjb250YWlucyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbmV4dCBkZXNjcmlwdG9yIGZvciBibG9jayBjaGFpbmluZyB1c2luZyBsaW5rZWQgbGlzdHMuCisJCQkJICAgQWRkcmVzcyBNVVNUIGJlIGFsaWduZWQgdG8gYSAzMi1iaXQgYm91bmRhcnkuICAgICAgICAgICAgICovCisJZG1hY0h3X1JFRzY0X3QgY3RsOwkvKiBDb250cm9sIFJlZ2lzdGVyLiA2NCBiaXRzICovCisJdWludDMyX3Qgc3N0YXQ7CQkvKiBTb3VyY2UgU3RhdHVzIFJlZ2lzdGVyICovCisJdWludDMyX3QgZHN0YXQ7CQkvKiBEZXN0aW5hdGlvbiBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1aW50MzJfdCBkZXZDdGw7CS8qIERldmljZSBzcGVjaWZpYyBjb250cm9sIGluZm9ybWF0aW9uICovCisJdWludDMyX3QgbGxwOwkJLyogTExQIGNvbnRhaW5zIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIG5leHQgZGVzY3JpcHRvciBmb3IgYmxvY2sgY2hhaW5pbmcgdXNpbmcgbGlua2VkIGxpc3RzLiAqLworfSBkbWFjSHdfREVTQ190OworCisvKgorICogIERlc2NyaXB0b3IgcmluZyBwb2ludGVycworICovCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IG51bTsJCS8qIE51bWJlciBvZiBsaW5rIGl0ZW1zICovCisJZG1hY0h3X0RFU0NfdCAqcEhlYWQ7CS8qIEhlYWQgb2YgZGVzY3JpcHRvciByaW5nIChmb3Igd3JpdGluZykgKi8KKwlkbWFjSHdfREVTQ190ICpwVGFpbDsJLyogVGFpbCBvZiBkZXNjcmlwdG9yIHJpbmcgKGZvciByZWFkaW5nKSAqLworCWRtYWNId19ERVNDX3QgKnBQcm9nOwkvKiBEZXNjcmlwdG9yIHRvIHByb2dyYW0gdGhlIGNoYW5uZWwgKGZvciBwcm9ncmFtbWluZyB0aGUgY2hhbm5lbCByZWdpc3RlcikgKi8KKwlkbWFjSHdfREVTQ190ICpwRW5kOwkvKiBFbmQgb2YgY3VycmVudCBkZXNjcmlwdG9yIGNoYWluICovCisJZG1hY0h3X0RFU0NfdCAqcEZyZWU7CS8qIERlc2NyaXB0b3IgdG8gZnJlZSBtZW1vcnkgKGZyZWVpbmcgZHluYW1pYyBtZW1vcnkpICovCisJdWludDMyX3QgdmlydDJQaHlPZmZzZXQ7CS8qIFZpcnR1YWwgdG8gcGh5c2ljYWwgYWRkcmVzcyBvZmZzZXQgZm9yIHRoZSBkZXNjcmlwdG9yIHJpbmcgKi8KK30gZG1hY0h3X0RFU0NfUklOR190OworCisvKgorICogIERNQSBjaGFubmVsIGNvbnRyb2wgYmxvY2sKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IG1vZHVsZTsJLyogRE1BIGNvbnRyb2xsZXIgbW9kdWxlICgwLTEpICovCisJdWludDMyX3QgY2hhbm5lbDsJLyogRE1BIGNoYW5uZWwgKDAtNykgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCB2YXJEYXRhU3RhcnRlZDsJLyogRmxhZyBpbmRpY2F0aW5nIHZhcmlhYmxlIGRhdGEgY2hhbm5lbCBpcyBlbmFibGVkICovCisJdm9sYXRpbGUgdWludDMyX3QgZGVzY1VwZGF0ZWQ7CS8qIEZsYWcgdG8gaW5kaWNhdGUgZGVzY3JpcHRvciB1cGRhdGUgaXMgY29tcGxldGUgKi8KKwl2b2lkICp1c2VyRGF0YTsJCS8qIENoYW5uZWwgc3BlY2lmYyB1c2VyIGRhdGEgKi8KK30gZG1hY0h3X0NCTEtfdDsKKworI2RlZmluZSBkbWFjSHdfQVNTRVJUKGEpICAgICAgICAgICAgICAgICAgaWYgKCEoYSkpIHdoaWxlICgxKQorI2RlZmluZSBkbWFjSHdfTUFYX0NIQU5ORUxfQ09VTlQgICAgICAgICAgMTYKKyNkZWZpbmUgZG1hY0h3X0ZSRUVfVVNFUl9NRU1PUlkgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgZG1hY0h3X0RFU0NfRlJFRSAgICAgICAgICAgICAgICAgIGRtYWNId19SRUdfQ1RMX0RPTkUKKyNkZWZpbmUgZG1hY0h3X0RFU0NfSU5JVCAgICAgICAgICAgICAgICAgICgoZG1hY0h3X0RFU0NfdCAqKSAweEZGRkZGRkZGKQorI2RlZmluZSBkbWFjSHdfTUFYX0JMT0NLU0laRSAgICAgICAgICAgICAgNDA2NAorI2RlZmluZSBkbWFjSHdfR0VUX0RFU0NfUklORyhhZGRyKSAgICAgICAgKGRtYWNId19ERVNDX1JJTkdfdCAqKShhZGRyKQorI2RlZmluZSBkbWFjSHdfQUREUkVTU19NQVNLKGJ5dGUpICAgICAgICAgKChieXRlKSAtIDEpCisjZGVmaW5lIGRtYWNId19ORVhUX0RFU0MocnAsIGRwKSAgICAgICAgICAgKChycCktPmRwID0gKGRtYWNId19ERVNDX3QgKikocnApLT5kcC0+bGxwKQorI2RlZmluZSBkbWFjSHdfSEFORExFX1RPX0NCTEsoaGFuZGxlKSAgICAgKChkbWFjSHdfQ0JMS190ICopIChoYW5kbGUpKQorI2RlZmluZSBkbWFjSHdfQ0JMS19UT19IQU5ETEUoY2Jsa3ApICAgICAgKChkbWFjSHdfSEFORExFX3QpIChjYmxrcCkpCisjZGVmaW5lIGRtYWNId19EU1RfSVNfTUVNT1JZKHR0KSAgICAgICAgICAoKCh0dCkgPT0gIGRtYWNId19UUkFOU0ZFUl9UWVBFX1BFUklQSEVSQUxfVE9fTUVNKSB8fCAoKHR0KSA9PSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fTUVNKSkgPyAxIDogMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IG5leHQgYXZhaWxhYmxlIHRyYW5zYWN0aW9uIHdpZHRoCisqCisqCisqICBAcmV0dXJuICBPbiBzdWNlc3MgIDogTmV4dCBhdmFpbCBhYmxlIHRyYW5zYWN0aW9uIHdpZHRoCisqICAgICAgICAgICBPbiBmYWlsdXJlIDogZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIXzgKKyoKKyogIEBub3RlCisqICAgICBOb25lCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIGRtYWNId19UUkFOU0FDVElPTl9XSURUSF9lIGRtYWNId19HZXROZXh0VHJXaWR0aChkbWFjSHdfVFJBTlNBQ1RJT05fV0lEVEhfZSB0dwkvKiAgIFsgSU4gXSBDdXJyZW50IHRyYW5zYWN0aW9uIHdpZHRoICovCisgICAgKSB7CisJaWYgKHR3ICYgZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIX01BU0spIHsKKwkJcmV0dXJuICgodHcgPj4gZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIX1NISUZUKSAtCisJCQkgMSkgPDwgZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIX1NISUZUOworCX0gZWxzZSBpZiAodHcgJiBkbWFjSHdfUkVHX0NUTF9EU1RfVFJfV0lEVEhfTUFTSykgeworCQlyZXR1cm4gKCh0dyA+PiBkbWFjSHdfUkVHX0NUTF9EU1RfVFJfV0lEVEhfU0hJRlQpIC0KKwkJCSAxKSA8PCBkbWFjSHdfUkVHX0NUTF9EU1RfVFJfV0lEVEhfU0hJRlQ7CisJfQorCisJLyogRGVmYXVsdCByZXR1cm4gICovCisJcmV0dXJuIGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfODsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCBudW1iZXIgb2YgYnl0ZXMgcGVyIHRyYW5zYWN0aW9uCisqCisqICBAcmV0dXJuICBOdW1iZXIgb2YgYnl0ZXMgcGVyIHRyYW5zYWN0aW9uCisqCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBpbnQgZG1hY0h3X0dldFRyV2lkdGhJbkJ5dGVzKGRtYWNId19UUkFOU0FDVElPTl9XSURUSF9lIHR3CS8qICAgWyBJTiBdICBUcmFuc2FjdGlvbiB3aWR0aCAqLworICAgICkgeworCWludCB3aWR0aCA9IDE7CisJc3dpdGNoICh0dykgeworCWNhc2UgZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF84OgorCQl3aWR0aCA9IDE7CisJCWJyZWFrOworCWNhc2UgZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8xNjoKKwljYXNlIGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfMTY6CisJCXdpZHRoID0gMjsKKwkJYnJlYWs7CisJY2FzZSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzMyOgorCWNhc2UgZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF8zMjoKKwkJd2lkdGggPSA0OworCQlicmVhazsKKwljYXNlIGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQ6CisJY2FzZSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzY0OgorCQl3aWR0aCA9IDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRtYWNId19BU1NFUlQoMCk7CisJfQorCisJLyogRGVmYXVsdCB0cmFuc2FjdGlvbiB3aWR0aCAqLworCXJldHVybiB3aWR0aDsKK30KKworI2VuZGlmIC8qIF9ETUFDSFdfUFJJVl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kbWFjSHdfcmVnLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kbWFjSHdfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkxY2VhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2RtYWNId19yZWcuaApAQCAtMCwwICsxLDQwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA0IC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIGRtYWNId19yZWcuaAorKgorKiAgQGJyaWVmICAgRGVmaW5pdGlvbnMgZm9yIGxvdyBsZXZlbCBETUEgcmVnaXN0ZXJzCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0RNQUNIV19SRUdfSAorI2RlZmluZSBfRE1BQ0hXX1JFR19ICisKKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvbW1faW8uaD4KKworLyogRGF0YSB0eXBlIGZvciA2NCBiaXQgbGl0dGxlIGVuZGlhbiByZWdpc3RlciAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVpbnQzMl90IGxvOwkvKiBMb3dlciAzMiBiaXQgaW4gbGl0dGxlIGVuZGlhbiBtb2RlICovCisJdm9sYXRpbGUgdWludDMyX3QgaGk7CS8qIFVwcGVyIDMyIGJpdCBpbiBsaXR0bGUgZW5kaWFuIG1vZGUgKi8KK30gZG1hY0h3X1JFRzY0X3Q7CisKKy8qIERhdGEgdHlwZSByZXByZXNlbnRpbmcgRE1BIGNoYW5uZWwgcmVnaXN0ZXJzICovCit0eXBlZGVmIHN0cnVjdCB7CisJZG1hY0h3X1JFRzY0X3QgQ2hhbm5lbFNhcjsJLyogIFNvdXJjZSBBZHJlc3MgUmVnaXN0ZXIuIDY0IGJpdHMgKHVwcGVyIDMyIGJpdHMgYXJlIHJlc2VydmVkKQorCQkJCQkgICBBZGRyZXNzIG11c3QgYmUgYWxpZ25lZCB0byBDVEx4LlNSQ19UUl9XSURUSC4KKwkJCQkJICovCisJZG1hY0h3X1JFRzY0X3QgQ2hhbm5lbERhcjsJLyogIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIuNjQgYml0cyAodXBwZXIgMzIgYml0cyBhcmUgcmVzZXJ2ZWQpCisJCQkJCSAgIEFkZHJlc3MgbXVzdCBiZSBhbGlnbmVkIHRvIENUTHguRFNUX1RSX1dJRFRILgorCQkJCQkgKi8KKwlkbWFjSHdfUkVHNjRfdCBDaGFubmVsTGxwOwkvKiAgTGluayBMaXN0IFBvaW50ZXIuNjQgYml0cyAodXBwZXIgMzIgYml0cyBhcmUgcmVzZXJ2ZWQpCisJCQkJCSAgIExMUCBjb250YWlucyB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBMTEkgZm9yIGJsb2NrIGNoYWluaW5nIHVzaW5nIGxpbmtlZCBsaXN0cy4KKwkJCQkJICAgSWYgTExQaXMgc2V0IHRvIDB4MCwgdGhlbiB0cmFuc2ZlcnMgdXNpbmcgbGlua2VkIGxpc3RzIGFyZSBub3QgZW5hYmxlZC4KKwkJCQkJICAgQWRkcmVzcyBNVVNUIGJlIGFsaWduZWQgdG8gYSAzMi1iaXQgYm91bmRhcnkuCisJCQkJCSAqLworCWRtYWNId19SRUc2NF90IENoYW5uZWxDdGw7CS8qIENvbnRyb2wgUmVnaXN0ZXIuIDY0IGJpdHMgKi8KKwlkbWFjSHdfUkVHNjRfdCBDaGFubmVsU3N0YXQ7CS8qIFNvdXJjZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKwlkbWFjSHdfUkVHNjRfdCBDaGFubmVsRHN0YXQ7CS8qIERlc3RpbmF0aW9uIFN0YXR1cyBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IENoYW5uZWxTc3RhdEFkZHI7CS8qIFNvdXJjZSBTdGF0dXMgQWRkcmVzcyBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IENoYW5uZWxEc3RhdEFkZHI7CS8qIERlc3RpbmF0aW9uIFN0YXR1cyBBZGRyZXNzIFJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgQ2hhbm5lbENvbmZpZzsJLyogQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgU3JjR2F0aGVyOwkvKiBTb3VyY2UgZ2F0aGVyIHJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgRHN0U2NhdHRlcjsJLyogRGVzdGluYXRpb24gc2NhdHRlciByZWdpc3RlciAqLworfSBkbWFjSHdfQ0hfUkVHX3Q7CisKKy8qIERhdGEgdHlwZSBmb3IgUkFXIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzICovCit0eXBlZGVmIHN0cnVjdCB7CisJZG1hY0h3X1JFRzY0X3QgUmF3VGZyOwkvKiBSYXcgU3RhdHVzIGZvciBJbnRUZnIgSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgUmF3QmxvY2s7CS8qIFJhdyBTdGF0dXMgZm9yIEludEJsb2NrIEludGVycnVwdCAqLworCWRtYWNId19SRUc2NF90IFJhd1NyY1RyYW47CS8qIFJhdyBTdGF0dXMgZm9yIEludFNyY1RyYW4gSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgUmF3RHN0VHJhbjsJLyogUmF3IFN0YXR1cyBmb3IgSW50RHN0VHJhbiBJbnRlcnJ1cHQgKi8KKwlkbWFjSHdfUkVHNjRfdCBSYXdFcnI7CS8qIFJhdyBTdGF0dXMgZm9yIEludEVyciBJbnRlcnJ1cHQgKi8KK30gZG1hY0h3X0lOVF9SQVdfdDsKKworLyogRGF0YSB0eXBlIGZvciBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWRtYWNId19SRUc2NF90IFN0YXR1c1RmcjsJLyogU3RhdHVzIGZvciBJbnRUZnIgSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgU3RhdHVzQmxvY2s7CS8qIFN0YXR1cyBmb3IgSW50QmxvY2sgSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgU3RhdHVzU3JjVHJhbjsJLyogU3RhdHVzIGZvciBJbnRTcmNUcmFuIEludGVycnVwdCAqLworCWRtYWNId19SRUc2NF90IFN0YXR1c0RzdFRyYW47CS8qIFN0YXR1cyBmb3IgSW50RHN0VHJhbiBJbnRlcnJ1cHQgKi8KKwlkbWFjSHdfUkVHNjRfdCBTdGF0dXNFcnI7CS8qIFN0YXR1cyBmb3IgSW50RXJyIEludGVycnVwdCAqLworfSBkbWFjSHdfSU5UX1NUQVRVU190OworCisvKiBEYXRhIHR5cGUgZm9yIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyovCit0eXBlZGVmIHN0cnVjdCB7CisJZG1hY0h3X1JFRzY0X3QgTWFza1RmcjsJLyogTWFzayBmb3IgSW50VGZyIEludGVycnVwdCAqLworCWRtYWNId19SRUc2NF90IE1hc2tCbG9jazsJLyogTWFzayBmb3IgSW50QmxvY2sgSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgTWFza1NyY1RyYW47CS8qIE1hc2sgZm9yIEludFNyY1RyYW4gSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgTWFza0RzdFRyYW47CS8qIE1hc2sgZm9yIEludERzdFRyYW4gSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgTWFza0VycjsJLyogTWFzayBmb3IgSW50RXJyIEludGVycnVwdCAqLworfSBkbWFjSHdfSU5UX01BU0tfdDsKKworLyogRGF0YSB0eXBlIGZvciBpbnRlcnJ1cHQgY2xlYXIgcmVnaXN0ZXJzICovCit0eXBlZGVmIHN0cnVjdCB7CisJZG1hY0h3X1JFRzY0X3QgQ2xlYXJUZnI7CS8qIENsZWFyIGZvciBJbnRUZnIgSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgQ2xlYXJCbG9jazsJLyogQ2xlYXIgZm9yIEludEJsb2NrIEludGVycnVwdCAqLworCWRtYWNId19SRUc2NF90IENsZWFyU3JjVHJhbjsJLyogQ2xlYXIgZm9yIEludFNyY1RyYW4gSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgQ2xlYXJEc3RUcmFuOwkvKiBDbGVhciBmb3IgSW50RHN0VHJhbiBJbnRlcnJ1cHQgKi8KKwlkbWFjSHdfUkVHNjRfdCBDbGVhckVycjsJLyogQ2xlYXIgZm9yIEludEVyciBJbnRlcnJ1cHQgKi8KKwlkbWFjSHdfUkVHNjRfdCBTdGF0dXNJbnQ7CS8qIFN0YXR1cyBmb3IgZWFjaCBpbnRlcnJ1cHQgdHlwZSAqLworfSBkbWFjSHdfSU5UX0NMRUFSX3Q7CisKKy8qIERhdGEgdHlwZSBmb3Igc29mdHdhcmUgaGFuZHNoYWtpbmcgcmVnaXN0ZXJzICovCit0eXBlZGVmIHN0cnVjdCB7CisJZG1hY0h3X1JFRzY0X3QgUmVxU3JjUmVnOwkvKiBTb3VyY2UgU29mdHdhcmUgVHJhbnNhY3Rpb24gUmVxdWVzdCBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IFJlcURzdFJlZzsJLyogRGVzdGluYXRpb24gU29mdHdhcmUgVHJhbnNhY3Rpb24gUmVxdWVzdCBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IFNnbFJlcVNyY1JlZzsJLyogU2luZ2xlIFNvdXJjZSBUcmFuc2FjdGlvbiBSZXF1ZXN0IFJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgU2dsUmVxRHN0UmVnOwkvKiBTaW5nbGUgRGVzdGluYXRpb24gVHJhbnNhY3Rpb24gUmVxdWVzdCBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IExzdFNyY1JlZzsJLyogTGFzdCBTb3VyY2UgVHJhbnNhY3Rpb24gUmVxdWVzdCBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IExzdERzdFJlZzsJLyogTGFzdCBEZXN0aW5hdGlvbiBUcmFuc2FjdGlvbiBSZXF1ZXN0IFJlZ2lzdGVyICovCit9IGRtYWNId19TV19IQU5EU0hBS0VfdDsKKworLyogRGF0YSB0eXBlIGZvciBtaXNjLiByZWdpc3RlcnMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlkbWFjSHdfUkVHNjRfdCBEbWFDZmdSZWc7CS8qIERNQSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgQ2hFblJlZzsJLyogRE1BIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgRG1hSWRSZWc7CS8qIERNQSBJRCBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IERtYVRlc3RSZWc7CS8qIERNQSBUZXN0IFJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgUmVzZXJ2ZWQwOwkvKiBSZXNlcnZlZCAqLworCWRtYWNId19SRUc2NF90IFJlc2VydmVkMTsJLyogUmVzZXJ2ZWQgKi8KKwlkbWFjSHdfUkVHNjRfdCBDb21wUGFybTY7CS8qIENvbXBvbmVudCBQYXJhbWV0ZXIgNiAqLworCWRtYWNId19SRUc2NF90IENvbXBQYXJtNTsJLyogQ29tcG9uZW50IFBhcmFtZXRlciA1ICovCisJZG1hY0h3X1JFRzY0X3QgQ29tcFBhcm00OwkvKiBDb21wb25lbnQgUGFyYW1ldGVyIDQgKi8KKwlkbWFjSHdfUkVHNjRfdCBDb21wUGFybTM7CS8qIENvbXBvbmVudCBQYXJhbWV0ZXIgMyAqLworCWRtYWNId19SRUc2NF90IENvbXBQYXJtMjsJLyogQ29tcG9uZW50IFBhcmFtZXRlciAyICovCisJZG1hY0h3X1JFRzY0X3QgQ29tcFBhcm0xOwkvKiBDb21wb25lbnQgUGFyYW1ldGVyIDEgKi8KKwlkbWFjSHdfUkVHNjRfdCBDb21wSWQ7CS8qIENvbXBvZW50IElEICovCit9IGRtYWNId19NSVNDX3Q7CisKKy8qIEJhc2UgcmVnaXN0ZXJzICovCisjZGVmaW5lIGRtYWNId18wX01PRFVMRV9CQVNFX0FERFIgICAgICAgIChjaGFyICopIE1NX0lPX0JBU0VfRE1BMAkvKiBETUFDIDAgbW9kdWxlJ3MgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIGRtYWNId18xX01PRFVMRV9CQVNFX0FERFIgICAgICAgIChjaGFyICopIE1NX0lPX0JBU0VfRE1BMQkvKiBETUFDIDEgbW9kdWxlJ3MgYmFzZSBhZGRyZXNzICovCisKK2V4dGVybiB1aW50MzJfdCBkbWFDaGFubmVsQ291bnRfMDsKK2V4dGVybiB1aW50MzJfdCBkbWFDaGFubmVsQ291bnRfMTsKKworLyogRGVmaW5lIGNoYW5uZWwgc3BlY2lmaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIGRtYWNId19DSEFOX0JBU0UobW9kdWxlLCBjaGFuKSAgICAgICAgICAoKGRtYWNId19DSF9SRUdfdCAqKSAoKGNoYXIgKikoKG1vZHVsZSkgPyBkbWFjSHdfMV9NT0RVTEVfQkFTRV9BRERSIDogZG1hY0h3XzBfTU9EVUxFX0JBU0VfQUREUikgKyAoKGNoYW4pICogc2l6ZW9mKGRtYWNId19DSF9SRUdfdCkpKSkKKworLyogUmF3IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzICovCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1JBV19CQVNFKG1vZHVsZSkgICAgICAgICAoKGNoYXIgKilkbWFjSHdfQ0hBTl9CQVNFKChtb2R1bGUpLCAoKG1vZHVsZSkgPyBkbWFDaGFubmVsQ291bnRfMSA6IGRtYUNoYW5uZWxDb3VudF8wKSkpCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1JBV19UUkFOKG1vZHVsZSkgICAgICAgICAoKChkbWFjSHdfSU5UX1JBV190ICopIGRtYWNId19SRUdfSU5UX1JBV19CQVNFKChtb2R1bGUpKSktPlJhd1Rmci5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfUkFXX0JMT0NLKG1vZHVsZSkgICAgICAgICgoKGRtYWNId19JTlRfUkFXX3QgKikgZG1hY0h3X1JFR19JTlRfUkFXX0JBU0UoKG1vZHVsZSkpKS0+UmF3QmxvY2subG8pCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1JBV19TVFJBTihtb2R1bGUpICAgICAgICAoKChkbWFjSHdfSU5UX1JBV190ICopIGRtYWNId19SRUdfSU5UX1JBV19CQVNFKChtb2R1bGUpKSktPlJhd1NyY1RyYW4ubG8pCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1JBV19EVFJBTihtb2R1bGUpICAgICAgICAoKChkbWFjSHdfSU5UX1JBV190ICopIGRtYWNId19SRUdfSU5UX1JBV19CQVNFKChtb2R1bGUpKSktPlJhd0RzdFRyYW4ubG8pCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1JBV19FUlJPUihtb2R1bGUpICAgICAgICAoKChkbWFjSHdfSU5UX1JBV190ICopIGRtYWNId19SRUdfSU5UX1JBV19CQVNFKChtb2R1bGUpKSktPlJhd0Vyci5sbykKKworLyogSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfU1RBVF9CQVNFKG1vZHVsZSkgICAgICAgICgoY2hhciAqKShkbWFjSHdfUkVHX0lOVF9SQVdfQkFTRSgobW9kdWxlKSkgKyBzaXplb2YoZG1hY0h3X0lOVF9SQVdfdCkpKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9TVEFUX1RSQU4obW9kdWxlKSAgICAgICAgKCgoZG1hY0h3X0lOVF9TVEFUVVNfdCAqKSBkbWFjSHdfUkVHX0lOVF9TVEFUX0JBU0UoKG1vZHVsZSkpKS0+U3RhdHVzVGZyLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9TVEFUX0JMT0NLKG1vZHVsZSkgICAgICAgKCgoZG1hY0h3X0lOVF9TVEFUVVNfdCAqKSBkbWFjSHdfUkVHX0lOVF9TVEFUX0JBU0UoKG1vZHVsZSkpKS0+U3RhdHVzQmxvY2subG8pCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1NUQVRfU1RSQU4obW9kdWxlKSAgICAgICAoKChkbWFjSHdfSU5UX1NUQVRVU190ICopIGRtYWNId19SRUdfSU5UX1NUQVRfQkFTRSgobW9kdWxlKSkpLT5TdGF0dXNTcmNUcmFuLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9TVEFUX0RUUkFOKG1vZHVsZSkgICAgICAgKCgoZG1hY0h3X0lOVF9TVEFUVVNfdCAqKSBkbWFjSHdfUkVHX0lOVF9TVEFUX0JBU0UoKG1vZHVsZSkpKS0+U3RhdHVzRHN0VHJhbi5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfU1RBVF9FUlJPUihtb2R1bGUpICAgICAgICgoKGRtYWNId19JTlRfU1RBVFVTX3QgKikgZG1hY0h3X1JFR19JTlRfU1RBVF9CQVNFKChtb2R1bGUpKSktPlN0YXR1c0Vyci5sbykKKworLyogSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfTUFTS19CQVNFKG1vZHVsZSkgICAgICAgICgoY2hhciAqKShkbWFjSHdfUkVHX0lOVF9TVEFUX0JBU0UoKG1vZHVsZSkpICsgc2l6ZW9mKGRtYWNId19JTlRfU1RBVFVTX3QpKSkKKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfTUFTS19UUkFOKG1vZHVsZSkgICAgICAgICgoKGRtYWNId19JTlRfTUFTS190ICopIGRtYWNId19SRUdfSU5UX01BU0tfQkFTRSgobW9kdWxlKSkpLT5NYXNrVGZyLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9NQVNLX0JMT0NLKG1vZHVsZSkgICAgICAgKCgoZG1hY0h3X0lOVF9NQVNLX3QgKikgZG1hY0h3X1JFR19JTlRfTUFTS19CQVNFKChtb2R1bGUpKSktPk1hc2tCbG9jay5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfTUFTS19TVFJBTihtb2R1bGUpICAgICAgICgoKGRtYWNId19JTlRfTUFTS190ICopIGRtYWNId19SRUdfSU5UX01BU0tfQkFTRSgobW9kdWxlKSkpLT5NYXNrU3JjVHJhbi5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfTUFTS19EVFJBTihtb2R1bGUpICAgICAgICgoKGRtYWNId19JTlRfTUFTS190ICopIGRtYWNId19SRUdfSU5UX01BU0tfQkFTRSgobW9kdWxlKSkpLT5NYXNrRHN0VHJhbi5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfTUFTS19FUlJPUihtb2R1bGUpICAgICAgICgoKGRtYWNId19JTlRfTUFTS190ICopIGRtYWNId19SRUdfSU5UX01BU0tfQkFTRSgobW9kdWxlKSkpLT5NYXNrRXJyLmxvKQorCisvKiBJbnRlcnJ1cHQgY2xlYXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX0NMRUFSX0JBU0UobW9kdWxlKSAgICAgICAoKGNoYXIgKikoZG1hY0h3X1JFR19JTlRfTUFTS19CQVNFKChtb2R1bGUpKSArIHNpemVvZihkbWFjSHdfSU5UX01BU0tfdCkpKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9DTEVBUl9UUkFOKG1vZHVsZSkgICAgICAgKCgoZG1hY0h3X0lOVF9DTEVBUl90ICopIGRtYWNId19SRUdfSU5UX0NMRUFSX0JBU0UoKG1vZHVsZSkpKS0+Q2xlYXJUZnIubG8pCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX0NMRUFSX0JMT0NLKG1vZHVsZSkgICAgICAoKChkbWFjSHdfSU5UX0NMRUFSX3QgKikgZG1hY0h3X1JFR19JTlRfQ0xFQVJfQkFTRSgobW9kdWxlKSkpLT5DbGVhckJsb2NrLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9DTEVBUl9TVFJBTihtb2R1bGUpICAgICAgKCgoZG1hY0h3X0lOVF9DTEVBUl90ICopIGRtYWNId19SRUdfSU5UX0NMRUFSX0JBU0UoKG1vZHVsZSkpKS0+Q2xlYXJTcmNUcmFuLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9DTEVBUl9EVFJBTihtb2R1bGUpICAgICAgKCgoZG1hY0h3X0lOVF9DTEVBUl90ICopIGRtYWNId19SRUdfSU5UX0NMRUFSX0JBU0UoKG1vZHVsZSkpKS0+Q2xlYXJEc3RUcmFuLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9DTEVBUl9FUlJPUihtb2R1bGUpICAgICAgKCgoZG1hY0h3X0lOVF9DTEVBUl90ICopIGRtYWNId19SRUdfSU5UX0NMRUFSX0JBU0UoKG1vZHVsZSkpKS0+Q2xlYXJFcnIubG8pCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1NUQVRVUyhtb2R1bGUpICAgICAgICAgICAoKChkbWFjSHdfSU5UX0NMRUFSX3QgKikgZG1hY0h3X1JFR19JTlRfQ0xFQVJfQkFTRSgobW9kdWxlKSkpLT5TdGF0dXNJbnQubG8pCisKKy8qIFNvZnR3YXJlIGhhbmRzaGFraW5nIHJlZ2lzdGVycyAqLworI2RlZmluZSBkbWFjSHdfUkVHX1NXX0hTX0JBU0UobW9kdWxlKSAgICAgICAgICAgKChjaGFyICopKGRtYWNId19SRUdfSU5UX0NMRUFSX0JBU0UoKG1vZHVsZSkpICsgc2l6ZW9mKGRtYWNId19JTlRfQ0xFQVJfdCkpKQorI2RlZmluZSBkbWFjSHdfUkVHX1NXX0hTX1NSQ19SRVEobW9kdWxlKSAgICAgICAgKCgoZG1hY0h3X1NXX0hBTkRTSEFLRV90ICopIGRtYWNId19SRUdfU1dfSFNfQkFTRSgobW9kdWxlKSkpLT5SZXFTcmNSZWcubG8pCisjZGVmaW5lIGRtYWNId19SRUdfU1dfSFNfRFNUX1JFUShtb2R1bGUpICAgICAgICAoKChkbWFjSHdfU1dfSEFORFNIQUtFX3QgKikgZG1hY0h3X1JFR19TV19IU19CQVNFKChtb2R1bGUpKSktPlJlcURzdFJlZy5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19TV19IU19TUkNfU0dMX1JFUShtb2R1bGUpICAgICgoKGRtYWNId19TV19IQU5EU0hBS0VfdCAqKSBkbWFjSHdfUkVHX1NXX0hTX0JBU0UoKG1vZHVsZSkpKS0+U2dsUmVxU3JjUmVnLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX1NXX0hTX0RTVF9TR0xfUkVRKG1vZHVsZSkgICAgKCgoZG1hY0h3X1NXX0hBTkRTSEFLRV90ICopIGRtYWNId19SRUdfU1dfSFNfQkFTRSgobW9kdWxlKSkpLT5TZ2xSZXFEc3RSZWcubG8pCisjZGVmaW5lIGRtYWNId19SRUdfU1dfSFNfU1JDX0xTVF9SRVEobW9kdWxlKSAgICAoKChkbWFjSHdfU1dfSEFORFNIQUtFX3QgKikgZG1hY0h3X1JFR19TV19IU19CQVNFKChtb2R1bGUpKSktPkxzdFNyY1JlZy5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19TV19IU19EU1RfTFNUX1JFUShtb2R1bGUpICAgICgoKGRtYWNId19TV19IQU5EU0hBS0VfdCAqKSBkbWFjSHdfUkVHX1NXX0hTX0JBU0UoKG1vZHVsZSkpKS0+THN0RHN0UmVnLmxvKQorCisvKiBNaXNjZWxsYW5lb3VzIHJlZ2lzdGVycyAqLworI2RlZmluZSBkbWFjSHdfUkVHX01JU0NfQkFTRShtb2R1bGUpICAgICAgICAgICAgKChjaGFyICopKGRtYWNId19SRUdfU1dfSFNfQkFTRSgobW9kdWxlKSkgKyBzaXplb2YoZG1hY0h3X1NXX0hBTkRTSEFLRV90KSkpCisjZGVmaW5lIGRtYWNId19SRUdfTUlTQ19DRkcobW9kdWxlKSAgICAgICAgICAgICAoKChkbWFjSHdfTUlTQ190ICopIGRtYWNId19SRUdfTUlTQ19CQVNFKChtb2R1bGUpKSktPkRtYUNmZ1JlZy5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19NSVNDX0NIX0VOQUJMRShtb2R1bGUpICAgICAgICgoKGRtYWNId19NSVNDX3QgKikgZG1hY0h3X1JFR19NSVNDX0JBU0UoKG1vZHVsZSkpKS0+Q2hFblJlZy5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19NSVNDX0lEKG1vZHVsZSkgICAgICAgICAgICAgICgoKGRtYWNId19NSVNDX3QgKikgZG1hY0h3X1JFR19NSVNDX0JBU0UoKG1vZHVsZSkpKS0+RG1hSWRSZWcubG8pCisjZGVmaW5lIGRtYWNId19SRUdfTUlTQ19URVNUKG1vZHVsZSkgICAgICAgICAgICAoKChkbWFjSHdfTUlTQ190ICopIGRtYWNId19SRUdfTUlTQ19CQVNFKChtb2R1bGUpKSktPkRtYVRlc3RSZWcubG8pCisjZGVmaW5lIGRtYWNId19SRUdfTUlTQ19DT01QX1BBUkFNMV9MTyhtb2R1bGUpICAoKChkbWFjSHdfTUlTQ190ICopIGRtYWNId19SRUdfTUlTQ19CQVNFKChtb2R1bGUpKSktPkNvbXBQYXJtMS5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19NSVNDX0NPTVBfUEFSQU0xX0hJKG1vZHVsZSkgICgoKGRtYWNId19NSVNDX3QgKikgZG1hY0h3X1JFR19NSVNDX0JBU0UoKG1vZHVsZSkpKS0+Q29tcFBhcm0xLmhpKQorI2RlZmluZSBkbWFjSHdfUkVHX01JU0NfQ09NUF9QQVJBTTJfTE8obW9kdWxlKSAgKCgoZG1hY0h3X01JU0NfdCAqKSBkbWFjSHdfUkVHX01JU0NfQkFTRSgobW9kdWxlKSkpLT5Db21wUGFybTIubG8pCisjZGVmaW5lIGRtYWNId19SRUdfTUlTQ19DT01QX1BBUkFNMl9ISShtb2R1bGUpICAoKChkbWFjSHdfTUlTQ190ICopIGRtYWNId19SRUdfTUlTQ19CQVNFKChtb2R1bGUpKSktPkNvbXBQYXJtMi5oaSkKKyNkZWZpbmUgZG1hY0h3X1JFR19NSVNDX0NPTVBfUEFSQU0zX0xPKG1vZHVsZSkgICgoKGRtYWNId19NSVNDX3QgKikgZG1hY0h3X1JFR19NSVNDX0JBU0UoKG1vZHVsZSkpKS0+Q29tcFBhcm0zLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX01JU0NfQ09NUF9QQVJBTTNfSEkobW9kdWxlKSAgKCgoZG1hY0h3X01JU0NfdCAqKSBkbWFjSHdfUkVHX01JU0NfQkFTRSgobW9kdWxlKSkpLT5Db21wUGFybTMuaGkpCisjZGVmaW5lIGRtYWNId19SRUdfTUlTQ19DT01QX1BBUkFNNF9MTyhtb2R1bGUpICAoKChkbWFjSHdfTUlTQ190ICopIGRtYWNId19SRUdfTUlTQ19CQVNFKChtb2R1bGUpKSktPkNvbXBQYXJtNC5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19NSVNDX0NPTVBfUEFSQU00X0hJKG1vZHVsZSkgICgoKGRtYWNId19NSVNDX3QgKikgZG1hY0h3X1JFR19NSVNDX0JBU0UoKG1vZHVsZSkpKS0+Q29tcFBhcm00LmhpKQorI2RlZmluZSBkbWFjSHdfUkVHX01JU0NfQ09NUF9QQVJBTTVfTE8obW9kdWxlKSAgKCgoZG1hY0h3X01JU0NfdCAqKSBkbWFjSHdfUkVHX01JU0NfQkFTRSgobW9kdWxlKSkpLT5Db21wUGFybTUubG8pCisjZGVmaW5lIGRtYWNId19SRUdfTUlTQ19DT01QX1BBUkFNNV9ISShtb2R1bGUpICAoKChkbWFjSHdfTUlTQ190ICopIGRtYWNId19SRUdfTUlTQ19CQVNFKChtb2R1bGUpKSktPkNvbXBQYXJtNS5oaSkKKyNkZWZpbmUgZG1hY0h3X1JFR19NSVNDX0NPTVBfUEFSQU02X0xPKG1vZHVsZSkgICgoKGRtYWNId19NSVNDX3QgKikgZG1hY0h3X1JFR19NSVNDX0JBU0UoKG1vZHVsZSkpKS0+Q29tcFBhcm02LmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX01JU0NfQ09NUF9QQVJBTTZfSEkobW9kdWxlKSAgKCgoZG1hY0h3X01JU0NfdCAqKSBkbWFjSHdfUkVHX01JU0NfQkFTRSgobW9kdWxlKSkpLT5Db21wUGFybTYuaGkpCisKKy8qIENoYW5uZWwgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19TQVIobW9kdWxlLCBjaGFuKSAgICAgICAgICAgIChkbWFjSHdfQ0hBTl9CQVNFKChtb2R1bGUpLCAoY2hhbikpLT5DaGFubmVsU2FyLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0RBUihtb2R1bGUsIGNoYW4pICAgICAgICAgICAgKGRtYWNId19DSEFOX0JBU0UoKG1vZHVsZSksIChjaGFuKSktPkNoYW5uZWxEYXIubG8pCisjZGVmaW5lIGRtYWNId19SRUdfTExQKG1vZHVsZSwgY2hhbikgICAgICAgICAgICAoZG1hY0h3X0NIQU5fQkFTRSgobW9kdWxlKSwgKGNoYW4pKS0+Q2hhbm5lbExscC5sbykKKworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9MTyhtb2R1bGUsIGNoYW4pICAgICAgICAgKGRtYWNId19DSEFOX0JBU0UoKG1vZHVsZSksIChjaGFuKSktPkNoYW5uZWxDdGwubG8pCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0hJKG1vZHVsZSwgY2hhbikgICAgICAgICAoZG1hY0h3X0NIQU5fQkFTRSgobW9kdWxlKSwgKGNoYW4pKS0+Q2hhbm5lbEN0bC5oaSkKKworI2RlZmluZSBkbWFjSHdfUkVHX1NTVEFUKG1vZHVsZSwgY2hhbikgICAgICAgICAgKGRtYWNId19DSEFOX0JBU0UoKG1vZHVsZSksIChjaGFuKSktPkNoYW5uZWxTc3RhdC5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19EU1RBVChtb2R1bGUsIGNoYW4pICAgICAgICAgIChkbWFjSHdfQ0hBTl9CQVNFKChtb2R1bGUpLCAoY2hhbikpLT5DaGFubmVsRHN0YXQubG8pCisjZGVmaW5lIGRtYWNId19SRUdfU1NUQVRBUihtb2R1bGUsIGNoYW4pICAgICAgICAoZG1hY0h3X0NIQU5fQkFTRSgobW9kdWxlKSwgKGNoYW4pKS0+Q2hhbm5lbFNzdGF0QWRkci5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19EU1RBVEFSKG1vZHVsZSwgY2hhbikgICAgICAgIChkbWFjSHdfQ0hBTl9CQVNFKChtb2R1bGUpLCAoY2hhbikpLT5DaGFubmVsRHN0YXRBZGRyLmxvKQorCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPKG1vZHVsZSwgY2hhbikgICAgICAgICAoZG1hY0h3X0NIQU5fQkFTRSgobW9kdWxlKSwgKGNoYW4pKS0+Q2hhbm5lbENvbmZpZy5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfSEkobW9kdWxlLCBjaGFuKSAgICAgICAgIChkbWFjSHdfQ0hBTl9CQVNFKChtb2R1bGUpLCAoY2hhbikpLT5DaGFubmVsQ29uZmlnLmhpKQorCisjZGVmaW5lIGRtYWNId19SRUdfU0dSX0xPKG1vZHVsZSwgY2hhbikgICAgICAgICAoZG1hY0h3X0NIQU5fQkFTRSgobW9kdWxlKSwgKGNoYW4pKS0+U3JjR2F0aGVyLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX1NHUl9ISShtb2R1bGUsIGNoYW4pICAgICAgICAgKGRtYWNId19DSEFOX0JBU0UoKG1vZHVsZSksIChjaGFuKSktPlNyY0dhdGhlci5oaSkKKworI2RlZmluZSBkbWFjSHdfUkVHX0RTUl9MTyhtb2R1bGUsIGNoYW4pICAgICAgICAgKGRtYWNId19DSEFOX0JBU0UoKG1vZHVsZSksIChjaGFuKSktPkRzdFNjYXR0ZXIubG8pCisjZGVmaW5lIGRtYWNId19SRUdfRFNSX0hJKG1vZHVsZSwgY2hhbikgICAgICAgICAoZG1hY0h3X0NIQU5fQkFTRSgobW9kdWxlKSwgKGNoYW4pKS0+RHN0U2NhdHRlci5oaSkKKworI2RlZmluZSBJTlRfU1RBVFVTX01BU0soY2hhbm5lbCkgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEgPDwgKGNoYW5uZWwpKQorI2RlZmluZSBDSEFOTkVMX0JVU1kobW9kLCBjaGFubmVsKSAgICAgICAgICAgICAgKGRtYWNId19SRUdfTUlTQ19DSF9FTkFCTEUoKG1vZCkpICYgKDB4MDAwMDAwMDEgPDwgKGNoYW5uZWwpKSkKKworLyogQml0IG1hc2sgZm9yIFJFR19ETUFDeF9DVExfTE8gKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9JTlRfRU4gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogQ2hhbm5lbCBpbnRlcnJ1cHQgZW5hYmxlICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRFNUX1RSX1dJRFRIX01BU0sgICAgICAgICAgICAweDAwMDAwMDBFCS8qIERlc3RpbmF0aW9uIHRyYW5zYWN0aW9uIHdpZHRoIG1hc2sgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRFNUX1RSX1dJRFRIX1NISUZUICAgICAgICAgICAxCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RTVF9UUl9XSURUSF84ICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBEZXN0aW5hdGlvbiB0cmFuc2FjdGlvbiB3aWR0aCA4IGJpdCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9EU1RfVFJfV0lEVEhfMTYgICAgICAgICAgICAgIDB4MDAwMDAwMDIJLyogRGVzdGluYXRpb24gdHJhbnNhY3Rpb24gd2lkdGggMTYgYml0ICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RTVF9UUl9XSURUSF8zMiAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBEZXN0aW5hdGlvbiB0cmFuc2FjdGlvbiB3aWR0aCAzMiBiaXQgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRFNUX1RSX1dJRFRIXzY0ICAgICAgICAgICAgICAweDAwMDAwMDA2CS8qIERlc3RpbmF0aW9uIHRyYW5zYWN0aW9uIHdpZHRoIDY0IGJpdCAqLworCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX1NSQ19UUl9XSURUSF9NQVNLICAgICAgICAgICAgMHgwMDAwMDA3MAkvKiBTb3VyY2UgdHJhbnNhY3Rpb24gd2lkdGggbWFzayAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfU0hJRlQgICAgICAgICAgIDQKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIXzggICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIFNvdXJjZSB0cmFuc2FjdGlvbiB3aWR0aCA4IGJpdCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfMTYgICAgICAgICAgICAgIDB4MDAwMDAwMTAJLyogU291cmNlIHRyYW5zYWN0aW9uIHdpZHRoIDE2IGJpdCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfMzIgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogU291cmNlIHRyYW5zYWN0aW9uIHdpZHRoIDMyIGJpdCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfNjQgICAgICAgICAgICAgIDB4MDAwMDAwMzAJLyogU291cmNlIHRyYW5zYWN0aW9uIHdpZHRoIDY0IGJpdCAqLworCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RTX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAkvKiBEZXN0aW5hdGlvbiBzY2F0dGVyIGVuYWJsZSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TR19FTkFCTEUgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAJLyogU291cmNlIGdhdGhlciBlbmFibGUgKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9ESU5DX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxODAJLyogRGVzdGluYXRpb24gYWRkcmVzcyBpbmMvZGVjIG1hc2sgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRElOQ19JTkMgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIERlc3RpbmF0aW9uIGFkZHJlc3MgaW5jcmVtZW50ICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RJTkNfREVDICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAkvKiBEZXN0aW5hdGlvbiBhZGRyZXNzIGRlY3JlbWVudCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9ESU5DX05DICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAJLyogRGVzdGluYXRpb24gYWRkcmVzcyBubyBjaGFuZ2UgKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TSU5DX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2MDAJLyogU291cmNlIGFkZHJlc3MgaW5jL2RlYyBtYXNrICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX1NJTkNfSU5DICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBTb3VyY2UgYWRkcmVzcyBpbmNyZW1lbnQgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU0lOQ19ERUMgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCS8qIFNvdXJjZSBhZGRyZXNzIGRlY3JlbWVudCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TSU5DX05DICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAJLyogU291cmNlIGFkZHJlc3Mgbm8gY2hhbmdlICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRFNUX01TSVpFX01BU0sgICAgICAgICAgICAgICAweDAwMDAzODAwCS8qIERlc3RpbmF0aW9uIGJ1cnN0IHRyYW5zYWN0aW9uIGxlbmd0aCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9EU1RfTVNJWkVfMCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAJLyogTm8gRGVzdGluYXRpb24gYnVyc3QgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRFNUX01TSVpFXzQgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCS8qIERlc3RpbmF0aW9uIGJ1cnN0IHRyYW5zYWN0aW9uIGxlbmd0aCA0ICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RTVF9NU0laRV84ICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAkvKiBEZXN0aW5hdGlvbiBidXJzdCB0cmFuc2FjdGlvbiBsZW5ndGggOCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9EU1RfTVNJWkVfMTYgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAJLyogRGVzdGluYXRpb24gYnVyc3QgdHJhbnNhY3Rpb24gbGVuZ3RoIDE2ICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU1JDX01TSVpFX01BU0sgICAgICAgICAgICAgICAweDAwMDFDMDAwCS8qIFNvdXJjZSBidXJzdCB0cmFuc2FjdGlvbiBsZW5ndGggKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU1JDX01TSVpFXzAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIE5vIFNvdXJjZSBidXJzdCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TUkNfTVNJWkVfNCAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAJLyogU291cmNlIGJ1cnN0IHRyYW5zYWN0aW9uIGxlbmd0aCA0ICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX1NSQ19NU0laRV84ICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAkvKiBTb3VyY2UgYnVyc3QgdHJhbnNhY3Rpb24gbGVuZ3RoIDggKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU1JDX01TSVpFXzE2ICAgICAgICAgICAgICAgICAweDAwMDBDMDAwCS8qIFNvdXJjZSBidXJzdCB0cmFuc2FjdGlvbiBsZW5ndGggMTYgKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9UVEZDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAJLyogVHJhbnNmZXIgdHlwZSBhbmQgZmxvdyBjb250cm9sbGVyICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX1RURkNfTU1fRE1BQyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBNZW1vcnkgdG8gTWVtb3J5IHdpdGggRE1BQyBhcyBmbG93IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfVFRGQ19NUF9ETUFDICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCS8qIE1lbW9yeSB0byBQZXJpcGhlcmFsIHdpdGggRE1BQyBhcyBmbG93IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfVFRGQ19QTV9ETUFDICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCS8qIFBlcmlwaGVyYWwgdG8gTWVtb3J5IHdpdGggRE1BQyBhcyBmbG93IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfVFRGQ19QUF9ETUFDICAgICAgICAgICAgICAgICAweDAwMzAwMDAwCS8qIFBlcmlwaGVyYWwgdG8gUGVyaXBoZXJhbCB3aXRoIERNQUMgYXMgZmxvdyBjb250cm9sbGVyICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX1RURkNfUE1fUEVSSSAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAkvKiBQZXJpcGhlcmFsIHRvIE1lbW9yeSB3aXRoIFBlcmlwaGVyYWwgYXMgZmxvdyBjb250cm9sbGVyICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX1RURkNfUFBfU1BFUkkgICAgICAgICAgICAgICAgMHgwMDUwMDAwMAkvKiBQZXJpcGhlcmFsIHRvIFBlcmlwaGVyYWwgd2l0aCBTb3VyY2UgUGVyaXBoZXJhbCBhcyBmbG93IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfVFRGQ19NUF9QRVJJICAgICAgICAgICAgICAgICAweDAwNjAwMDAwCS8qIE1lbW9yeSB0byBQZXJpcGhlcmFsIHdpdGggUGVyaXBoZXJhbCBhcyBmbG93IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfVFRGQ19QUF9EUEVSSSAgICAgICAgICAgICAgICAweDAwNzAwMDAwCS8qIFBlcmlwaGVyYWwgdG8gUGVyaXBoZXJhbCB3aXRoIERlc3RpbmF0aW9uIFBlcmlwaGVyYWwgYXMgZmxvdyBjb250cm9sbGVyICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRE1TX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxODAwMDAwCS8qIERlc3RpbmF0aW9uIEFIQiBtYXN0ZXIgaW50ZXJmYWNlICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RNU18xICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBEZXN0aW5hdGlvbiBBSEIgbWFzdGVyIGludGVyZmFjZSAxICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RNU18yICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAkvKiBEZXN0aW5hdGlvbiBBSEIgbWFzdGVyIGludGVyZmFjZSAyICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU01TX01BU0sgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCS8qIFNvdXJjZSBBSEIgbWFzdGVyIGludGVyZmFjZSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TTVNfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAJLyogU291cmNlIEFIQiBtYXN0ZXIgaW50ZXJmYWNlIDEgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU01TXzIgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCS8qIFNvdXJjZSBBSEIgbWFzdGVyIGludGVyZmFjZSAyICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfTExQX0RTVF9FTiAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCS8qIEJsb2NrIGNoYWluaW5nIGVuYWJsZSBmb3IgZGVzdGluYXRpb24gc2lkZSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9MTFBfU1JDX0VOICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAJLyogQmxvY2sgY2hhaW5pbmcgZW5hYmxlIGZvciBzb3VyY2Ugc2lkZSAqLworCisvKiBCaXQgbWFzayBmb3IgUkVHX0RNQUN4X0NUTF9ISSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9CTE9DS19UU19NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDBGRkYJLyogQmxvY2sgdHJhbnNmZXIgc2l6ZSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAJLyogQmxvY2sgdHJhc25mZXIgZG9uZSAqLworCisvKiBCaXQgbWFzayBmb3IgUkVHX0RNQUN4X0NGR19MTyAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9QUklPUklUWV9TSElGVCAgICAgICAgICAgICAgICAgIDUJLyogQ2hhbm5lbCBwcmlvcml0eSBzaGlmdCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9QUklPUklUWV9NQVNLICAgICAgICAgIDB4MDAwMDAwRTAJLyogQ2hhbm5lbCBwcmlvcml0eSBtYXNrICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0NIX1BSSU9SSVRZXzAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBDaGFubmVsIHByaW9yaXR5IDAgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfMSAgICAgICAgICAgICAweDAwMDAwMDIwCS8qIENoYW5uZWwgcHJpb3JpdHkgMSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9QUklPUklUWV8yICAgICAgICAgICAgIDB4MDAwMDAwNDAJLyogQ2hhbm5lbCBwcmlvcml0eSAyICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0NIX1BSSU9SSVRZXzMgICAgICAgICAgICAgMHgwMDAwMDA2MAkvKiBDaGFubmVsIHByaW9yaXR5IDMgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfNCAgICAgICAgICAgICAweDAwMDAwMDgwCS8qIENoYW5uZWwgcHJpb3JpdHkgNCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9QUklPUklUWV81ICAgICAgICAgICAgIDB4MDAwMDAwQTAJLyogQ2hhbm5lbCBwcmlvcml0eSA1ICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0NIX1BSSU9SSVRZXzYgICAgICAgICAgICAgMHgwMDAwMDBDMAkvKiBDaGFubmVsIHByaW9yaXR5IDYgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfNyAgICAgICAgICAgICAweDAwMDAwMEUwCS8qIENoYW5uZWwgcHJpb3JpdHkgNyAqLworCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0NIX1NVU1BFTkQgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAkvKiBDaGFubmVsIHN1c3BlbmQgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQ0hfRklGT19FTVBUWSAgICAgICAgICAgICAweDAwMDAwMjAwCS8qIENoYW5uZWwgRklGTyBlbXB0eSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19EU1RfQ0hfU1dfSFMgICAgICAgICAgICAgIDB4MDAwMDA0MDAJLyogRGVzdGluYXRpb24gY2hhbm5lbCBTVyBoYW5kc2hha2luZyAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19TUkNfQ0hfU1dfSFMgICAgICAgICAgICAgIDB4MDAwMDA4MDAJLyogU291cmNlIGNoYW5uZWwgU1cgaGFuZHNoYWtpbmcgKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9MT0NLX01BU0sgICAgICAgICAgICAgIDB4MDAwMDMwMDAJLyogQ2hhbm5lbCBsb2NraW5nIG1hc2sgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQ0hfTE9DS19ETUEgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIENoYW5uZWwgbG9jayBvdmVyIHRoZSBlbnRpcmUgRE1BIHRyYW5zZmVyIG9wZXJhdGlvbiAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9MT0NLX0JMT0NLICAgICAgICAgICAgIDB4MDAwMDEwMDAJLyogQ2hhbm5lbCBsb2NrIG92ZXIgdGhlIGJsb2NrIHRyYW5zZmVyIG9wZXJhdGlvbiAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9MT0NLX1RSQU5TICAgICAgICAgICAgIDB4MDAwMDIwMDAJLyogQ2hhbm5lbCBsb2NrIG92ZXIgdGhlIHRyYW5zYWN0aW9uICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0NIX0xPQ0tfRU5BQkxFICAgICAgICAgICAgMHgwMDAxMDAwMAkvKiBDaGFubmVsIGxvY2sgZW5hYmxlICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQlVTX0xPQ0tfTUFTSyAgICAgICAgICAgICAweDAwMDBDMDAwCS8qIEJ1cyBsb2NraW5nIG1hc2sgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQlVTX0xPQ0tfRE1BICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIEJ1cyBsb2NrIG92ZXIgdGhlIGVudGlyZSBETUEgdHJhbnNmZXIgb3BlcmF0aW9uICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0JVU19MT0NLX0JMT0NLICAgICAgICAgICAgMHgwMDAwNDAwMAkvKiBCdXMgbG9jayBvdmVyIHRoZSBibG9jayB0cmFuc2ZlciBvcGVyYXRpb24gKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQlVTX0xPQ0tfVFJBTlMgICAgICAgICAgICAweDAwMDA4MDAwCS8qIEJ1cyBsb2NrIG92ZXIgdGhlIHRyYW5zYWN0aW9uICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0JVU19MT0NLX0VOQUJMRSAgICAgICAgICAgMHgwMDAyMDAwMAkvKiBCdXMgbG9jayBlbmFibGUgKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19EU1RfSFNfUE9MQVJJVFlfTE9XICAgICAgIDB4MDAwNDAwMDAJLyogRGVzdGluYXRpb24gY2hhbm5lbCBoYW5kc2hha2luZyBzaWduYWwgcG9sYXJpdHkgbG93ICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX1NSQ19IU19QT0xBUklUWV9MT1cgICAgICAgMHgwMDA4MDAwMAkvKiBTb3VyY2UgY2hhbm5lbCBoYW5kc2hha2luZyBzaWduYWwgcG9sYXJpdHkgbG93ICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fTUFYX0FNQkFfQlVSU1RfTEVOX01BU0sgICAweDNGRjAwMDAwCS8qIE1heGltdW0gQU1CQSBidXJzdCBsZW5ndGggKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19BVVRPX1JFTE9BRF9TUkMgICAgICAgICAgIDB4NDAwMDAwMDAJLyogU291cmNlIGFkZHJlc3MgYXV0byByZWxvYWQgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQVVUT19SRUxPQURfRFNUICAgICAgICAgICAweDgwMDAwMDAwCS8qIERlc3RpbmF0aW9uIGFkZHJlc3MgYXV0byByZWxvYWQgKi8KKworLyogQml0IG1hc2sgZm9yIFJFR19ETUFDeF9DRkdfSEkgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfSElfRkNfRFNUX1JFQURZICAgICAgICAgICAgICAweDAwMDAwMDAxCS8qIFNvdXJjZSB0cmFuc2FjdGlvbiByZXF1ZXN0IGlzIHNlcnZpY2VkIHdoZW4gZGVzdGluYXRpb24gaXMgcmVhZHkgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfSElfRklGT19FTk9VR0ggICAgICAgICAgICAgICAweDAwMDAwMDAyCS8qIEluaXRpYXRlIGJ1cnN0IHRyYW5zYWN0aW9uIHdoZW4gZW5vdWdoIGRhdGEgaW4gYXZhaWxhYmxlIGluIEZJRk8gKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19ISV9BSEJfSFBST1RfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMUMJLyogQUhCIHByb3RlY3Rpb24gbWFzayAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19ISV9BSEJfSFBST1RfMSAgICAgICAgICAgICAgIDB4MDAwMDAwMDQJLyogQUhCIHByb3RlY3Rpb24gMSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19ISV9BSEJfSFBST1RfMiAgICAgICAgICAgICAgIDB4MDAwMDAwMDgJLyogQUhCIHByb3RlY3Rpb24gMiAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19ISV9BSEJfSFBST1RfMyAgICAgICAgICAgICAgIDB4MDAwMDAwMTAJLyogQUhCIHByb3RlY3Rpb24gMyAqLworCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0hJX1VQREFURV9EU1RfU1RBVCAgICAgICAgICAgMHgwMDAwMDAyMAkvKiBEZXN0aW5hdGlvbiBzdGF0dXMgdXBkYXRlIGVuYWJsZSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19ISV9VUERBVEVfU1JDX1NUQVQgICAgICAgICAgIDB4MDAwMDAwNDAJLyogU291cmNlIHN0YXR1cyB1cGRhdGUgZW5hYmxlICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfSElfU1JDX1BFUklfSU5URl9NQVNLICAgICAgICAweDAwMDAwNzgwCS8qIFNvdXJjZSBwZXJpcGhlcmFsIGhhcmR3YXJlIGludGVyZmFjZSBtYXNrICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0hJX0RTVF9QRVJJX0lOVEZfTUFTSyAgICAgICAgMHgwMDAwNzgwMAkvKiBEZXN0aW5hdGlvbiBwZXJpcGhlcmFsIGhhcmR3YXJlIGludGVyZmFjZSBtYXNrICovCisKKy8qIERNQSBDb25maWd1cmF0aW9uIFBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DT01QX1BBUkFNX05VTV9DSEFOTkVMUyAgICAgICAgICAweDAwMDAwNzAwCS8qIE51bWJlciBvZiBjaGFubmVscyAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NPTVBfUEFSQU1fTlVNX0lOVEVSRkFDRSAgICAgICAgIDB4MDAwMDE4MDAJLyogTnVtYmVyIG9mIG1hc3RlciBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DT01QX1BBUkFNX01BWF9CTEtfU0laRSAgICAgICAgICAweDAwMDAwMDBmCS8qIE1heGltdW0gYnJ1c3Qgc2l6ZSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NPTVBfUEFSQU1fREFUQV9XSURUSCAgICAgICAgICAgIDB4MDAwMDYwMDAJLyogRGF0YSB0cmFuc2ZlciB3aWR0aCAqLworCisvKiBEZWZpbmUgR0VUL1NFVCBtYWNyb3MgdG8gcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIGRtYWNId19TRVRfU0FSKG1vZHVsZSwgY2hhbm5lbCwgYWRkcikgICAgICAgICAgKGRtYWNId19SRUdfU0FSKChtb2R1bGUpLCAoY2hhbm5lbCkpID0gKHVpbnQzMl90KSAoYWRkcikpCisjZGVmaW5lIGRtYWNId19TRVRfREFSKG1vZHVsZSwgY2hhbm5lbCwgYWRkcikgICAgICAgICAgKGRtYWNId19SRUdfREFSKChtb2R1bGUpLCAoY2hhbm5lbCkpID0gKHVpbnQzMl90KSAoYWRkcikpCisjZGVmaW5lIGRtYWNId19TRVRfTExQKG1vZHVsZSwgY2hhbm5lbCwgcHRyKSAgICAgICAgICAgKGRtYWNId19SRUdfTExQKChtb2R1bGUpLCAoY2hhbm5lbCkpID0gKHVpbnQzMl90KSAocHRyKSkKKworI2RlZmluZSBkbWFjSHdfR0VUX1NTVEFUKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgICAgICAgIChkbWFjSHdfUkVHX1NTVEFUKChtb2R1bGUpLCAoY2hhbm5lbCkpKQorI2RlZmluZSBkbWFjSHdfR0VUX0RTVEFUKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgICAgICAgIChkbWFjSHdfUkVHX0RTVEFUKChtb2R1bGUpLCAoY2hhbm5lbCkpKQorCisjZGVmaW5lIGRtYWNId19TRVRfU1NUQVRBUihtb2R1bGUsIGNoYW5uZWwsIGFkZHIpICAgICAgKGRtYWNId19SRUdfU1NUQVRBUigobW9kdWxlKSwgKGNoYW5uZWwpKSA9ICh1aW50MzJfdCkgKGFkZHIpKQorI2RlZmluZSBkbWFjSHdfU0VUX0RTVEFUQVIobW9kdWxlLCBjaGFubmVsLCBhZGRyKSAgICAgIChkbWFjSHdfUkVHX0RTVEFUQVIoKG1vZHVsZSksIChjaGFubmVsKSkgPSAodWludDMyX3QpIChhZGRyKSkKKworI2RlZmluZSBkbWFjSHdfU0VUX0NPTlRST0xfTE8obW9kdWxlLCBjaGFubmVsLCBjdGwpICAgIChkbWFjSHdfUkVHX0NUTF9MTygobW9kdWxlKSwgKGNoYW5uZWwpKSB8PSAoY3RsKSkKKyNkZWZpbmUgZG1hY0h3X1JFU0VUX0NPTlRST0xfTE8obW9kdWxlLCBjaGFubmVsKSAgICAgICAoZG1hY0h3X1JFR19DVExfTE8oKG1vZHVsZSksIChjaGFubmVsKSkgPSAwKQorI2RlZmluZSBkbWFjSHdfR0VUX0NPTlRST0xfTE8obW9kdWxlLCBjaGFubmVsKSAgICAgICAgIChkbWFjSHdfUkVHX0NUTF9MTygobW9kdWxlKSwgKGNoYW5uZWwpKSkKKworI2RlZmluZSBkbWFjSHdfU0VUX0NPTlRST0xfSEkobW9kdWxlLCBjaGFubmVsLCBjdGwpICAgIChkbWFjSHdfUkVHX0NUTF9ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSB8PSAoY3RsKSkKKyNkZWZpbmUgZG1hY0h3X1JFU0VUX0NPTlRST0xfSEkobW9kdWxlLCBjaGFubmVsKSAgICAgICAoZG1hY0h3X1JFR19DVExfSEkoKG1vZHVsZSksIChjaGFubmVsKSkgPSAwKQorI2RlZmluZSBkbWFjSHdfR0VUX0NPTlRST0xfSEkobW9kdWxlLCBjaGFubmVsKSAgICAgICAgIChkbWFjSHdfUkVHX0NUTF9ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSkKKworI2RlZmluZSBkbWFjSHdfR0VUX0JMT0NLX1NJWkUobW9kdWxlLCBjaGFubmVsKSAgICAgICAgIChkbWFjSHdfUkVHX0NUTF9ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSAmIGRtYWNId19SRUdfQ1RMX0JMT0NLX1RTX01BU0spCisjZGVmaW5lIGRtYWNId19ETUFfQ09NUExFVEUobW9kdWxlLCBjaGFubmVsKSAgICAgICAgICAgKGRtYWNId19SRUdfQ1RMX0hJKChtb2R1bGUpLCAoY2hhbm5lbCkpICYgZG1hY0h3X1JFR19DVExfRE9ORSkKKworI2RlZmluZSBkbWFjSHdfU0VUX0NPTkZJR19MTyhtb2R1bGUsIGNoYW5uZWwsIGNmZykgICAgIChkbWFjSHdfUkVHX0NGR19MTygobW9kdWxlKSwgKGNoYW5uZWwpKSB8PSAoY2ZnKSkKKyNkZWZpbmUgZG1hY0h3X1JFU0VUX0NPTkZJR19MTyhtb2R1bGUsIGNoYW5uZWwpICAgICAgICAoZG1hY0h3X1JFR19DRkdfTE8oKG1vZHVsZSksIChjaGFubmVsKSkgPSAwKQorI2RlZmluZSBkbWFjSHdfR0VUX0NPTkZJR19MTyhtb2R1bGUsIGNoYW5uZWwpICAgICAgICAgIChkbWFjSHdfUkVHX0NGR19MTygobW9kdWxlKSwgKGNoYW5uZWwpKSkKKyNkZWZpbmUgZG1hY0h3X1NFVF9BTUJBX0JVU1JUX0xFTihtb2R1bGUsIGNoYW5uZWwsIGxlbikgICAgKGRtYWNId19SRUdfQ0ZHX0xPKChtb2R1bGUpLCAoY2hhbm5lbCkpID0gKGRtYWNId19SRUdfQ0ZHX0xPKChtb2R1bGUpLCAoY2hhbm5lbCkpICYgfihkbWFjSHdfUkVHX0NGR19MT19NQVhfQU1CQV9CVVJTVF9MRU5fTUFTSykpIHwgKCgobGVuKSA8PCAyMCkgJiBkbWFjSHdfUkVHX0NGR19MT19NQVhfQU1CQV9CVVJTVF9MRU5fTUFTSykpCisjZGVmaW5lIGRtYWNId19TRVRfQ0hBTk5FTF9QUklPUklUWShtb2R1bGUsIGNoYW5uZWwsIHByaW8pIChkbWFjSHdfUkVHX0NGR19MTygobW9kdWxlKSwgKGNoYW5uZWwpKSA9IChkbWFjSHdfUkVHX0NGR19MTygobW9kdWxlKSwgKGNoYW5uZWwpKSAmIH4oZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfTUFTSykpIHwgKHByaW8pKQorI2RlZmluZSBkbWFjSHdfU0VUX0FIQl9IUFJPVChtb2R1bGUsIGNoYW5uZWwsIHByb3RlY3QpICAoZG1hY0h3X1JFR19DRkdfSEkobW9kdWxlLCBjaGFubmVsKSA9IChkbWFjSHdfUkVHX0NGR19ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSAmIH4oZG1hY0h3X1JFR19DRkdfSElfQUhCX0hQUk9UX01BU0spKSB8IChwcm90ZWN0KSkKKworI2RlZmluZSBkbWFjSHdfU0VUX0NPTkZJR19ISShtb2R1bGUsIGNoYW5uZWwsIGNmZykgICAgICAoZG1hY0h3X1JFR19DRkdfSEkoKG1vZHVsZSksIChjaGFubmVsKSkgfD0gKGNmZykpCisjZGVmaW5lIGRtYWNId19SRVNFVF9DT05GSUdfSEkobW9kdWxlLCBjaGFubmVsKSAgICAgICAgIChkbWFjSHdfUkVHX0NGR19ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSA9IDApCisjZGVmaW5lIGRtYWNId19HRVRfQ09ORklHX0hJKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgICAgIChkbWFjSHdfUkVHX0NGR19ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSkKKyNkZWZpbmUgZG1hY0h3X1NFVF9TUkNfUEVSSV9JTlRGKG1vZHVsZSwgY2hhbm5lbCwgaW50ZikgKGRtYWNId19SRUdfQ0ZHX0hJKChtb2R1bGUpLCAoY2hhbm5lbCkpID0gKGRtYWNId19SRUdfQ0ZHX0hJKChtb2R1bGUpLCAoY2hhbm5lbCkpICYgfihkbWFjSHdfUkVHX0NGR19ISV9TUkNfUEVSSV9JTlRGX01BU0spKSB8ICgoKGludGYpIDw8IDcpICYgZG1hY0h3X1JFR19DRkdfSElfU1JDX1BFUklfSU5URl9NQVNLKSkKKyNkZWZpbmUgZG1hY0h3X1NSQ19QRVJJX0lOVEYoaW50ZikgICAgICAgICAgICAgICAgICAgICAgKCgoaW50ZikgPDwgNykgJiBkbWFjSHdfUkVHX0NGR19ISV9TUkNfUEVSSV9JTlRGX01BU0spCisjZGVmaW5lIGRtYWNId19TRVRfRFNUX1BFUklfSU5URihtb2R1bGUsIGNoYW5uZWwsIGludGYpIChkbWFjSHdfUkVHX0NGR19ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSA9IChkbWFjSHdfUkVHX0NGR19ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSAmIH4oZG1hY0h3X1JFR19DRkdfSElfRFNUX1BFUklfSU5URl9NQVNLKSkgfCAoKChpbnRmKSA8PCAxMSkgJiBkbWFjSHdfUkVHX0NGR19ISV9EU1RfUEVSSV9JTlRGX01BU0spKQorI2RlZmluZSBkbWFjSHdfRFNUX1BFUklfSU5URihpbnRmKSAgICAgICAgICAgICAgICAgICAgICAoKChpbnRmKSA8PCAxMSkgJiBkbWFjSHdfUkVHX0NGR19ISV9EU1RfUEVSSV9JTlRGX01BU0spCisKKyNkZWZpbmUgZG1hY0h3X0RNQV9TVEFSVChtb2R1bGUsIGNoYW5uZWwpICAgICAgICAgICAgICAoZG1hY0h3X1JFR19NSVNDX0NIX0VOQUJMRSgobW9kdWxlKSkgPSAoMHgwMDAwMDAwMSA8PCAoKGNoYW5uZWwpICsgOCkpIHwgKDB4MDAwMDAwMDEgPDwgKGNoYW5uZWwpKSkKKyNkZWZpbmUgZG1hY0h3X0RNQV9TVE9QKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgICAgICAgICAoZG1hY0h3X1JFR19NSVNDX0NIX0VOQUJMRSgobW9kdWxlKSkgPSAoMHgwMDAwMDAwMSA8PCAoKGNoYW5uZWwpICsgOCkpKQorI2RlZmluZSBkbWFjSHdfRE1BX0VOQUJMRShtb2R1bGUpICAgICAgICAgICAgICAgICAgICAgIChkbWFjSHdfUkVHX01JU0NfQ0ZHKChtb2R1bGUpKSA9IDEpCisjZGVmaW5lIGRtYWNId19ETUFfRElTQUJMRShtb2R1bGUpICAgICAgICAgICAgICAgICAgICAgKGRtYWNId19SRUdfTUlTQ19DRkcoKG1vZHVsZSkpID0gMCkKKworI2RlZmluZSBkbWFjSHdfVFJBTl9JTlRfRU5BQkxFKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgIChkbWFjSHdfUkVHX0lOVF9NQVNLX1RSQU4oKG1vZHVsZSkpID0gKDB4MDAwMDAwMDEgPDwgKChjaGFubmVsKSArIDgpKSB8ICgweDAwMDAwMDAxIDw8IChjaGFubmVsKSkpCisjZGVmaW5lIGRtYWNId19CTE9DS19JTlRfRU5BQkxFKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgKGRtYWNId19SRUdfSU5UX01BU0tfQkxPQ0soKG1vZHVsZSkpID0gKDB4MDAwMDAwMDEgPDwgKChjaGFubmVsKSArIDgpKSB8ICgweDAwMDAwMDAxIDw8IChjaGFubmVsKSkpCisjZGVmaW5lIGRtYWNId19FUlJPUl9JTlRfRU5BQkxFKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgKGRtYWNId19SRUdfSU5UX01BU0tfRVJST1IoKG1vZHVsZSkpID0gKDB4MDAwMDAwMDEgPDwgKChjaGFubmVsKSArIDgpKSB8ICgweDAwMDAwMDAxIDw8IChjaGFubmVsKSkpCisKKyNkZWZpbmUgZG1hY0h3X1RSQU5fSU5UX0RJU0FCTEUobW9kdWxlLCBjaGFubmVsKSAgICAgICAoZG1hY0h3X1JFR19JTlRfTUFTS19UUkFOKChtb2R1bGUpKSA9ICgweDAwMDAwMDAxIDw8ICgoY2hhbm5lbCkgKyA4KSkpCisjZGVmaW5lIGRtYWNId19CTE9DS19JTlRfRElTQUJMRShtb2R1bGUsIGNoYW5uZWwpICAgICAgKGRtYWNId19SRUdfSU5UX01BU0tfQkxPQ0soKG1vZHVsZSkpID0gKDB4MDAwMDAwMDEgPDwgKChjaGFubmVsKSArIDgpKSkKKyNkZWZpbmUgZG1hY0h3X0VSUk9SX0lOVF9ESVNBQkxFKG1vZHVsZSwgY2hhbm5lbCkgICAgICAoZG1hY0h3X1JFR19JTlRfTUFTS19FUlJPUigobW9kdWxlKSkgPSAoMHgwMDAwMDAwMSA8PCAoKGNoYW5uZWwpICsgOCkpKQorI2RlZmluZSBkbWFjSHdfU1RSQU5fSU5UX0RJU0FCTEUobW9kdWxlLCBjaGFubmVsKSAgICAgIChkbWFjSHdfUkVHX0lOVF9NQVNLX1NUUkFOKChtb2R1bGUpKSA9ICgweDAwMDAwMDAxIDw8ICgoY2hhbm5lbCkgKyA4KSkpCisjZGVmaW5lIGRtYWNId19EVFJBTl9JTlRfRElTQUJMRShtb2R1bGUsIGNoYW5uZWwpICAgICAgKGRtYWNId19SRUdfSU5UX01BU0tfRFRSQU4oKG1vZHVsZSkpID0gKDB4MDAwMDAwMDEgPDwgKChjaGFubmVsKSArIDgpKSkKKworI2RlZmluZSBkbWFjSHdfVFJBTl9JTlRfQ0xFQVIobW9kdWxlLCBjaGFubmVsKSAgICAgICAgIChkbWFjSHdfUkVHX0lOVF9DTEVBUl9UUkFOKChtb2R1bGUpKSA9ICgweDAwMDAwMDAxIDw8IChjaGFubmVsKSkpCisjZGVmaW5lIGRtYWNId19CTE9DS19JTlRfQ0xFQVIobW9kdWxlLCBjaGFubmVsKSAgICAgICAgKGRtYWNId19SRUdfSU5UX0NMRUFSX0JMT0NLKChtb2R1bGUpKSA9ICgweDAwMDAwMDAxIDw8IChjaGFubmVsKSkpCisjZGVmaW5lIGRtYWNId19FUlJPUl9JTlRfQ0xFQVIobW9kdWxlLCBjaGFubmVsKSAgICAgICAgKGRtYWNId19SRUdfSU5UX0NMRUFSX0VSUk9SKChtb2R1bGUpKSA9ICgweDAwMDAwMDAxIDw8IChjaGFubmVsKSkpCisKKyNkZWZpbmUgZG1hY0h3X0dFVF9OVU1fQ0hBTk5FTChtb2R1bGUpICAgICAgICAgICAgICAgICAoKChkbWFjSHdfUkVHX01JU0NfQ09NUF9QQVJBTTFfSEkoKG1vZHVsZSkpICYgZG1hY0h3X1JFR19DT01QX1BBUkFNX05VTV9DSEFOTkVMUykgPj4gOCkgKyAxKQorI2RlZmluZSBkbWFjSHdfR0VUX05VTV9JTlRFUkZBQ0UobW9kdWxlKSAgICAgICAgICAgICAgICgoKGRtYWNId19SRUdfTUlTQ19DT01QX1BBUkFNMV9ISSgobW9kdWxlKSkgJiBkbWFjSHdfUkVHX0NPTVBfUEFSQU1fTlVNX0lOVEVSRkFDRSkgPj4gMTEpICsgMSkKKyNkZWZpbmUgZG1hY0h3X0dFVF9NQVhfQkxPQ0tfU0laRShtb2R1bGUsIGNoYW5uZWwpICAgICAoKGRtYWNId19SRUdfTUlTQ19DT01QX1BBUkFNMV9MTygobW9kdWxlKSkgPj4gKDQgKiAoY2hhbm5lbCkpKSAmIGRtYWNId19SRUdfQ09NUF9QQVJBTV9NQVhfQkxLX1NJWkUpCisjZGVmaW5lIGRtYWNId19HRVRfQ0hBTk5FTF9EQVRBX1dJRFRIKG1vZHVsZSwgY2hhbm5lbCkgKChkbWFjSHdfUkVHX01JU0NfQ09NUF9QQVJBTTFfSEkoKG1vZHVsZSkpICYgZG1hY0h3X1JFR19DT01QX1BBUkFNX0RBVEFfV0lEVEgpID4+IDEzKQorCisjZW5kaWYgLyogX0RNQUNIV19SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvaHdfY2ZnLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9od19jZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmE5MWJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvaHdfY2ZnLmgKQEAgLTAsMCArMSw3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIENTUF9IV19DRkdfSAorI2RlZmluZSBDU1BfSFdfQ0ZHX0gKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgPGNmZ19nbG9iYWwuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9jYXBfaW5saW5lLmg+CisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisjaW5jbHVkZSA8bWFjaC9tZW1vcnlfc2V0dGluZ3MuaD4KKyNlbHNlCisjaW5jbHVkZSA8aHdfY2ZnLmg+CisjZW5kaWYKKworLyogU29tZSBpdGVtcyB0aGF0IGNhbiBiZSBkZWZpbmVkIGV4dGVybmFsbHksIGJ1dCB3aWxsIGJlIHNldCB0byBkZWZhdWx0IHZhbHVlcyAqLworLyogaWYgdGhleSBhcmUgbm90IGRlZmluZWQuICovCisvKiAgICAgIEhXX0NGR19QTExfU1BSRUFEX1NQRUNUUlVNX0RJU0FCTEUgICBEZWZhdWx0IHVuZGVmaW5lZCBhbmQgU1MgaXMgZW5hYmxlZC4gKi8KKy8qICAgICAgSFdfQ0ZHX1NEUkFNX0NBU19MQVRFTkNZICAgICAgICA1ICAgIERlZmF1bHQgNSwgVmFsdWVzIFszLi42XSAqLworLyogICAgICBIV19DRkdfU0RSQU1fQ0hJUF9TRUxFQ1RfQ05UICAgIDEgICAgRGVmYXVsdCAxLCBWYXVsZXMgWzEuLjJdICovCisvKiAgICAgIEhXX0NGR19TRFJBTV9TUEVFRF9HUkFERSAgICAgICAgNjY3ICBEZWZhdWx0IDY2NywgVmFsdWVzIFs0MDAsNTMzLDY2Nyw4MDBdICovCisvKiAgICAgIEhXX0NGR19TRFJBTV9XSURUSF9CSVRTICAgICAgICAgMTYgICBEZWZhdWx0IDE2LCBWYXVsZXMgWzgsMTZdICovCisvKiAgICAgIEhXX0NGR19TRFJBTV9BRERSX0JSQyAgICAgICAgICAgICAgICBEZWZhdWx0IHVuZGVmaW5lZCBhbmQgUm93LUJhbmstQ29sIChSQkMpIGFkZHJlc3NpbmcgdXNlZC4gRGVmaW5lIHRvIHVzZSBCYW5rLVJvdy1Db2wgKEJSQykuICovCisvKiAgICAgIEhXX0NGR19TRFJBTV9DTEtfQVNZTkMgICAgICAgICAgICAgICBEZWZhdWx0IHVuZGVmaW5lZCBhbmQgRERSIGNsb2NrIGlzIHN5bmNocm9ub3VzIHdpdGggQVhJIEJVUyBjbG9jay4gRGVmaW5lIGZvciBBU1lOQyBtb2RlLiAqLworCisjaWYgZGVmaW5lZChDRkdfR0xPQkFMX0NISVApCisgICNpZiAoQ0ZHX0dMT0JBTF9DSElQID09IEZQR0ExMTEwNykKKyAgICAgI2RlZmluZSBIV19DRkdfQlVTX0NMS19IWiAgICAgICAgICAgIDUwMDAwMDAKKyAgICAgI2RlZmluZSBIV19DRkdfRERSX0NUTFJfQ0xLX0haICAgICAgMTAwMDAwMDAKKyAgICAgI2RlZmluZSBIV19DRkdfRERSX1BIWV9PTUlUCisgICAgICNkZWZpbmUgSFdfQ0ZHX1VBUlRfQ0xLX0haICAgICAgICAgICA3NTAwMDAwCisgICNlbHNlCisgICAgICNkZWZpbmUgSFdfQ0ZHX1BMTF9WQ09fSFogICAgICAgICAgIDIwMDAwMDAwMDAKKyAgICAgI2RlZmluZSBIV19DRkdfUExMMl9WQ09fSFogICAgICAgICAgMTgwMDAwMDAwMAorICAgICAjZGVmaW5lIEhXX0NGR19BUk1fQ0xLX0haICAgICAgICAgICAgQ0FQX0hXX0NGR19BUk1fQ0xLX0haCisgICAgICNkZWZpbmUgSFdfQ0ZHX0JVU19DTEtfSFogICAgICAgICAgICAxNjY2NjY2NjYKKyAgICAgI2RlZmluZSBIV19DRkdfRERSX0NUTFJfQ0xLX0haICAgICAgIDMzMzMzMzMzMworICAgICAjZGVmaW5lIEhXX0NGR19ERFJfUEhZX0NMS19IWiAgICAgICAgKDIgKiBIV19DRkdfRERSX0NUTFJfQ0xLX0haKQorICAgICAjZGVmaW5lIEhXX0NGR19VQVJUX0NMS19IWiAgICAgICAgICAgMTQyODU3MTQyCisgICAgICNkZWZpbmUgSFdfQ0ZHX1ZQTV9DTEtfSFogICAgICAgICAgICBDQVBfSFdfQ0ZHX1ZQTV9DTEtfSFoKKyAgI2VuZGlmCisjZWxzZQorICAgI2RlZmluZSBIV19DRkdfUExMX1ZDT19IWiAgICAgICAgICAgMTgwMDAwMDAwMAorICAgI2RlZmluZSBIV19DRkdfUExMMl9WQ09fSFogICAgICAgICAgMTgwMDAwMDAwMAorICAgI2RlZmluZSBIV19DRkdfQVJNX0NMS19IWiAgICAgICAgICAgIDQ1MDAwMDAwMAorICAgI2RlZmluZSBIV19DRkdfQlVTX0NMS19IWiAgICAgICAgICAgIDE1MDAwMDAwMAorICAgI2RlZmluZSBIV19DRkdfRERSX0NUTFJfQ0xLX0haICAgICAgIDMwMDAwMDAwMAorICAgI2RlZmluZSBIV19DRkdfRERSX1BIWV9DTEtfSFogICAgICAgICgyICogSFdfQ0ZHX0REUl9DVExSX0NMS19IWikKKyAgICNkZWZpbmUgSFdfQ0ZHX1VBUlRfQ0xLX0haICAgICAgICAgICAxNTAwMDAwMDAKKyAgICNkZWZpbmUgSFdfQ0ZHX1ZQTV9DTEtfSFogICAgICAgICAgICAzMDAwMDAwMDAKKyNlbmRpZgorCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgVmFyaWFibGUgRXh0ZXJucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHVibGljIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworI2VuZGlmIC8qIENTUF9IV19DRkdfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9pbnRjSHdfcmVnLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9pbnRjSHdfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAxZmM0NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2ludGNId19yZWcuaApAQCAtMCwwICsxLDI0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIGludGNId19yZWcuaAorKgorKiAgQGJyaWVmICAgcGxhdGZvcm0gc3BlY2lmaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgYml0IGFzc2lnbm1lbnRzCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JTlRDSFdfUkVHX0gKKyNkZWZpbmUgX0lOVENIV19SRUdfSAorCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2luY2x1ZGUgPGNzcC9zdGRpbnQuaD4KKyNpbmNsdWRlIDxjc3AvcmVnLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvbW1faW8uaD4KKworLyogLS0tLSBQdWJsaWMgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBJTlRDSFdfTlVNX0lSUV9QRVJfSU5UQyAgIDMyCS8qIE1heGltdW0gbnVtYmVyIG9mIGludGVycnVwdCBjb250cm9sbGVycyAqLworI2RlZmluZSBJTlRDSFdfTlVNX0lOVEMgICAgICAgICAgIDMKKworLyogRGVmaW5lcyBmb3IgaW50ZXJydXB0IGNvbnRyb2xsZXJzLiBUaGlzIHNpbXBsaWZpZXMgYW5kIGNsZWFucyB1cCB0aGUgZnVuY3Rpb24gY2FsbHMuICovCisjZGVmaW5lIElOVENIV19JTlRDMCAgICAoKHZvaWQgKilNTV9JT19CQVNFX0lOVEMwKQorI2RlZmluZSBJTlRDSFdfSU5UQzEgICAgKCh2b2lkICopTU1fSU9fQkFTRV9JTlRDMSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDICAgICgodm9pZCAqKU1NX0lPX0JBU0VfU0lOVEMpCisKKy8qIElOVEMwIC0gaW50ZXJydXB0IGNvbnRyb2xsZXIgMCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfUElGX0JJVE5VTSAgICAgICAgICAgMzEJLyogUGVyaXBoZXJhbCBpbnRlcmZhY2UgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9DTENEX0JJVE5VTSAgICAgICAgICAzMAkvKiBMQ0QgQ29udHJvbGxlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0dFX0JJVE5VTSAgICAgICAgICAgIDI5CS8qIEdyYXBoaWMgZW5naW5lIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfQVBNX0JJVE5VTSAgICAgICAgICAgMjgJLyogQXVkaW8gcHJvY2VzcyBtb2R1bGUgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9FU1dfQklUTlVNICAgICAgICAgICAyNwkvKiBFdGhlcm5ldCBzd2l0Y2ggaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9TUElIX0JJVE5VTSAgICAgICAgICAyNgkvKiBTUEkgaG9zdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSM19CSVROVU0gICAgICAgIDI1CS8qIFRpbWVyMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMl9CSVROVU0gICAgICAgIDI0CS8qIFRpbWVyMiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMV9CSVROVU0gICAgICAgIDIzCS8qIFRpbWVyMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMF9CSVROVU0gICAgICAgIDIyCS8qIFRpbWVyMCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1NESU9IMV9CSVROVU0gICAgICAgIDIxCS8qIFNESU8xIGhvc3QgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9TRElPSDBfQklUTlVNICAgICAgICAyMAkvKiBTRElPMCBob3N0IGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfVVNCRF9CSVROVU0gICAgICAgICAgMTkJLyogVVNCIGRldmljZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1VTQkgxX0JJVE5VTSAgICAgICAgIDE4CS8qIFVTQjEgaG9zdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1VTQkhEMl9CSVROVU0gICAgICAgIDE3CS8qIFVTQiBob3N0Mi9kZXZpY2UyIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfVlBNX0JJVE5VTSAgICAgICAgICAgMTYJLyogVm9pY2UgcHJvY2VzcyBtb2R1bGUgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9ETUExQzdfQklUTlVNICAgICAgICAxNQkvKiBETUExIGNoYW5uZWwgNyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDNl9CSVROVU0gICAgICAgIDE0CS8qIERNQTEgY2hhbm5lbCA2IGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfRE1BMUM1X0JJVE5VTSAgICAgICAgMTMJLyogRE1BMSBjaGFubmVsIDUgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9ETUExQzRfQklUTlVNICAgICAgICAxMgkvKiBETUExIGNoYW5uZWwgNCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDM19CSVROVU0gICAgICAgIDExCS8qIERNQTEgY2hhbm5lbCAzIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfRE1BMUMyX0JJVE5VTSAgICAgICAgMTAJLyogRE1BMSBjaGFubmVsIDIgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9ETUExQzFfQklUTlVNICAgICAgICAgOQkvKiBETUExIGNoYW5uZWwgMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDMF9CSVROVU0gICAgICAgICA4CS8qIERNQTEgY2hhbm5lbCAwIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfRE1BMEM3X0JJVE5VTSAgICAgICAgIDcJLyogRE1BMCBjaGFubmVsIDcgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9ETUEwQzZfQklUTlVNICAgICAgICAgNgkvKiBETUEwIGNoYW5uZWwgNiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDNV9CSVROVU0gICAgICAgICA1CS8qIERNQTAgY2hhbm5lbCA1IGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfRE1BMEM0X0JJVE5VTSAgICAgICAgIDQJLyogRE1BMCBjaGFubmVsIDQgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9ETUEwQzNfQklUTlVNICAgICAgICAgMwkvKiBETUEwIGNoYW5uZWwgMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDMl9CSVROVU0gICAgICAgICAyCS8qIERNQTAgY2hhbm5lbCAyIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfRE1BMEMxX0JJVE5VTSAgICAgICAgIDEJLyogRE1BMCBjaGFubmVsIDEgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9ETUEwQzBfQklUTlVNICAgICAgICAgMAkvKiBETUEwIGNoYW5uZWwgMCBpbnRlcnJ1cHQgKi8KKworI2RlZmluZSBJTlRDSFdfSU5UQzBfUElGICAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMF9QSUZfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzBfQ0xDRCAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMF9DTENEX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0dFICAgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfR0VfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzBfQVBNICAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMF9BUE1fQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzBfRVNXICAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMF9FU1dfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzBfU1BJSCAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMF9TUElIX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMyAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVElNRVIzX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVElNRVIyX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVElNRVIxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVElNRVIwX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1NESU9IMSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfU0RJT0gxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1NESU9IMCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfU0RJT0gwX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1VTQkQgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVVNCRF9CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMF9VU0JIMSAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMwX1VTQkgxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1VTQkhEMiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVVNCSEQyX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1ZQTSAgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVlBNX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDNyAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUM3X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDNiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUM2X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDNSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUM1X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDNCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUM0X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDMyAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUMzX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDMiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUMyX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDMSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUMxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDMCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUMwX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDNyAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEM3X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDNiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEM2X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDNSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEM1X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDNCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEM0X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDMyAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEMzX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDMiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEMyX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDMSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEMxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDMCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEMwX0JJVE5VTSkKKworLyogSU5UQzEgLSBpbnRlcnJ1cHQgY29udHJvbGxlciAxICovCisjZGVmaW5lIElOVENIV19JTlRDMV9ERFJWUE1QX0JJVE5VTSAgICAgICAyNwkvKiBERFIgYW5kIFZQTSBQTEwgY2xvY2sgcGhhc2UgcmVsYXRpb25zaGlwIGludGVydXB0IChOb3QgZm9yIEEwKSAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfRERSVlBNVF9CSVROVU0gICAgICAgMjYJLyogRERSIGFuZCBWUE0gSFcgcGhhc2UgYWxpZ24gdGltZW91dCBpbnRlcnJ1cHQgKE5vdCBmb3IgQTApICovCisjZGVmaW5lIElOVENIV19JTlRDMV9ERFJQX0JJVE5VTSAgICAgICAgICAyNgkvKiBERFIgYW5kIFBMTCBjbG9jayBwaGFzZSByZWxhdGlvbnNoaXAgaW50ZXJ1cHQgKEZvciBBMCBvbmx5KSkgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1JUQzJfQklUTlVNICAgICAgICAgIDI1CS8qIFJlYWwgdGltZSBjbG9jayB0YW1wZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9WREVDX0JJVE5VTSAgICAgICAgICAyNAkvKiBIYW50cm8gVmlkZW8gRGVjb2RlciBpbnRlcnJ1cHQgKi8KKy8qIEJpdHMgMTMtMjMgYXJlIG5vbi1zZWN1cmUgdmVyc2lvbnMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2VjdXJlIGJpdHMgaW4gU0lOVEMgYml0cyAwLTEwLiAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfU1BVTV9CSVROVU0gICAgICAgICAgMjMJLyogU2VjdXJlIHByb2Nlc3MgbW9kdWxlIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfUlRDMV9CSVROVU0gICAgICAgICAgMjIJLyogUmVhbCB0aW1lIGNsb2NrIG9uZS1zaG90IGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfUlRDMF9CSVROVU0gICAgICAgICAgMjEJLyogUmVhbCB0aW1lIGNsb2NrIHBlcmlvZGljIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfUk5HX0JJVE5VTSAgICAgICAgICAgMjAJLyogUmFuZG9tIG51bWJlciBnZW5lcmF0b3IgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9GTVBVX0JJVE5VTSAgICAgICAgICAxOQkvKiBGbGFzaCBtZW1vcnkgcGFyaXRpb24gdW5pdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1ZNUFVfQklUTlVNICAgICAgICAgIDE4CS8qIFZSQU0gbWVtb3J5IHBhcnRpdGlvbiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0RNUFVfQklUTlVNICAgICAgICAgIDE3CS8qIEREUjIgbWVtb3J5IHBhcnRpdGlvbiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0tFWUNfQklUTlVNICAgICAgICAgIDE2CS8qIEtleSBwYWQgY29udHJvbGxlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1RTQ19CSVROVU0gICAgICAgICAgIDE1CS8qIFRvdWNoIHNjcmVlbiBjb250cm9sbGVyIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfVUFSVDBfQklUTlVNICAgICAgICAgMTQJLyogVUFSVCAwICovCisjZGVmaW5lIElOVENIV19JTlRDMV9XRE9HX0JJVE5VTSAgICAgICAgICAxMwkvKiBXYXRjaGRvZyB0aW1lciBpbnRlcnJ1cHQgKi8KKworI2RlZmluZSBJTlRDSFdfSU5UQzFfVUFSVDFfQklUTlVNICAgICAgICAgMTIJLyogVUFSVCAxICovCisjZGVmaW5lIElOVENIV19JTlRDMV9QTVVJUlFfQklUTlVNICAgICAgICAxMQkvKiBBUk0gcGVyZm9ybWFuY2UgbW9uaXRvciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0NPTU1SWF9CSVROVU0gICAgICAgIDEwCS8qIEFSTSBEREMgcmVjZWl2ZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0NPTU1UWF9CSVROVU0gICAgICAgICA5CS8qIEFSTSBEREMgdHJhbnNtaXQgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9GTEFTSENfQklUTlVNICAgICAgICAgOAkvKiBGbGFzaCBjb250cm9sbGVyIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfR1BIWV9CSVROVU0gICAgICAgICAgIDcJLyogR2lnYWJpdCBQaHkgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9TUElTX0JJVE5VTSAgICAgICAgICAgNgkvKiBTUEkgc2xhdmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9JMkNTX0JJVE5VTSAgICAgICAgICAgNQkvKiBJMkMgc2xhdmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9JMkNIX0JJVE5VTSAgICAgICAgICAgNAkvKiBJMkMgaG9zdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0kyUzFfQklUTlVNICAgICAgICAgICAzCS8qIEkyUzEgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9JMlMwX0JJVE5VTSAgICAgICAgICAgMgkvKiBJMlMwIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfR1BJTzFfQklUTlVNICAgICAgICAgIDEJLyogR1BJTyBiaXQgNjQvLzMyIGNvbWJpbmVkIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfR1BJTzBfQklUTlVNICAgICAgICAgIDAJLyogR1BJTyBiaXQgMzEvLzAgY29tYmluZWQgaW50ZXJydXB0ICovCisKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0REUlZQTVQgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfRERSVlBNVF9CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9ERFJWUE1QICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX0REUlZQTVBfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfRERSUCAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9ERFJQX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1ZERUMgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfVkRFQ19CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9TUFVNICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX1NQVU1fQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfUlRDMiAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9SVEMyX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1JUQzEgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfUlRDMV9CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9SVEMwICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX1JUQzBfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfUk5HICAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9STkdfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfRk1QVSAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9GTVBVX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0lNUFUgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfSU1QVV9CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9ETVBVICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX0RNUFVfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfS0VZQyAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9LRVlDX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1RTQyAgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfVFNDX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1VBUlQwICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfVUFSVDBfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfV0RPRyAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9XRE9HX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1VBUlQxICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfVUFSVDFfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfUE1VSVJRICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9QTVVJUlFfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfQ09NTVJYICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9DT01NUlhfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfQ09NTVRYICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9DT01NVFhfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfRkxBU0hDICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9GTEFTSENfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfR1BIWSAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9HUEhZX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1NQSVMgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfU1BJU19CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9JMkNTICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX0kyQ1NfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfSTJDSCAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9JMkNIX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0kyUzEgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfSTJTMV9CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9JMlMwICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX0kyUzBfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfR1BJTzEgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9HUElPMV9CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9HUElPMCAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX0dQSU8wX0JJVE5VTSkKKworLyogU0lOVEMgc2VjdXJlIGludCBjb250cm9sbGVyICovCisjZGVmaW5lIElOVENIV19TSU5UQ19SVEMyX0JJVE5VTSAgICAgICAgICAxNQkvKiBSZWFsIHRpbWUgY2xvY2sgdGFtcGVyIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfU0lOVENfVElNRVIzX0JJVE5VTSAgICAgICAgMTQJLyogU2VjdXJlIHRpbWVyMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1RJTUVSMl9CSVROVU0gICAgICAgIDEzCS8qIFNlY3VyZSB0aW1lcjIgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19TSU5UQ19USU1FUjFfQklUTlVNICAgICAgICAxMgkvKiBTZWN1cmUgdGltZXIxIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfU0lOVENfVElNRVIwX0JJVE5VTSAgICAgICAgMTEJLyogU2VjdXJlIHRpbWVyMCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1NQVU1fQklUTlVNICAgICAgICAgIDEwCS8qIFNlY3VyZSBwcm9jZXNzIG1vZHVsZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1JUQzFfQklUTlVNICAgICAgICAgICA5CS8qIFJlYWwgdGltZSBjbG9jayBvbmUtc2hvdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1JUQzBfQklUTlVNICAgICAgICAgICA4CS8qIFJlYWwgdGltZSBjbG9jayBwZXJpb2RpYyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1JOR19CSVROVU0gICAgICAgICAgICA3CS8qIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfU0lOVENfRk1QVV9CSVROVU0gICAgICAgICAgIDYJLyogRmxhc2ggbWVtb3J5IHBhcml0aW9uIHVuaXQgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19TSU5UQ19WTVBVX0JJVE5VTSAgICAgICAgICAgNQkvKiBWUkFNIG1lbW9yeSBwYXJ0aXRpb24gaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19TSU5UQ19ETVBVX0JJVE5VTSAgICAgICAgICAgNAkvKiBERFIyIG1lbW9yeSBwYXJ0aXRpb24gaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19TSU5UQ19LRVlDX0JJVE5VTSAgICAgICAgICAgMwkvKiBLZXkgcGFkIGNvbnRyb2xsZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19TSU5UQ19UU0NfQklUTlVNICAgICAgICAgICAgMgkvKiBUb3VjaCBzY3JlZW4gY29udHJvbGxlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1VBUlQwX0JJVE5VTSAgICAgICAgICAxCS8qIFVBUlQwIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfU0lOVENfV0RPR19CSVROVU0gICAgICAgICAgIDAJLyogV2F0Y2hkb2cgdGltZXIgaW50ZXJydXB0ICovCisKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1RJTUVSMyAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfVElNRVIzX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1RJTUVSMiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfVElNRVIyX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1RJTUVSMSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfVElNRVIxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1RJTUVSMCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfVElNRVIwX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1NQVU0gICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfU1BVTV9CSVROVU0pCisjZGVmaW5lIElOVENIV19TSU5UQ19SVEMyICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX1NJTlRDX1JUQzJfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfU0lOVENfUlRDMSAgICAgICAgICAgICAgICAgKDE8PElOVENIV19TSU5UQ19SVEMxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1JUQzAgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfUlRDMF9CSVROVU0pCisjZGVmaW5lIElOVENIV19TSU5UQ19STkcgICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX1NJTlRDX1JOR19CSVROVU0pCisjZGVmaW5lIElOVENIV19TSU5UQ19GTVBVICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX1NJTlRDX0ZNUFVfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfU0lOVENfSU1QVSAgICAgICAgICAgICAgICAgKDE8PElOVENIV19TSU5UQ19JTVBVX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX0RNUFUgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfRE1QVV9CSVROVU0pCisjZGVmaW5lIElOVENIV19TSU5UQ19LRVlDICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX1NJTlRDX0tFWUNfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfU0lOVENfVFNDICAgICAgICAgICAgICAgICAgKDE8PElOVENIV19TSU5UQ19UU0NfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfU0lOVENfVUFSVDAgICAgICAgICAgICAgICAgKDE8PElOVENIV19TSU5UQ19VQVJUMF9CSVROVU0pCisjZGVmaW5lIElOVENIV19TSU5UQ19XRE9HICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX1NJTlRDX1dET0dfQklUTlVNKQorCisvKiBQTDE5MiBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoVklDKSBsYXlvdXQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lSUVNUQVRVUyAgICAgIDB4MDAJLyogSVJRIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJTlRDSFdfRklRU1RBVFVTICAgICAgMHgwNAkvKiBGSVEgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIElOVENIV19SQVdJTlRSICAgICAgICAweDA4CS8qIFJhdyBJbnRlcnJ1cHQgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIElOVENIV19JTlRTRUxFQ1QgICAgICAweDBjCS8qIEludGVycnVwdCBTZWxlY3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEVOQUJMRSAgICAgIDB4MTAJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBJTlRDSFdfSU5URU5DTEVBUiAgICAgMHgxNAkvKiBJbnRlcnJ1cHQgRW5hYmxlIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lIElOVENIV19TT0ZUSU5UICAgICAgICAweDE4CS8qIFNvZnQgSW50ZXJydXB0IFJlZ2lzdGVyICovCisjZGVmaW5lIElOVENIV19TT0ZUSU5UQ0xFQVIgICAweDFjCS8qIFNvZnQgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lIElOVENIV19QUk9URUNUSU9OICAgICAweDIwCS8qIFByb3RlY3Rpb24gRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIElOVENIV19TV1BSSU9NQVNLICAgICAweDI0CS8qIFNvZnR3YXJlIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU5UQ0hXX1BSSU9EQUlTWSAgICAgIDB4MjgJLyogUHJpb3JpdHkgRGFpc3kgQ2hhaW4gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU5UQ0hXX1ZFQ1RBRERSMCAgICAgIDB4MTAwCS8qIFZlY3RvciBBZGRyZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBJTlRDSFdfVkVDVFBSSU8wICAgICAgMHgyMDAJLyogVmVjdG9yIFByaW9yaXR5IFJlZ2lzdGVycyAwLTMxICovCisjZGVmaW5lIElOVENIV19BRERSRVNTICAgICAgICAweGYwMAkvKiBWZWN0b3IgQWRkcmVzcyBSZWdpc3RlciAwLTMxICovCisjZGVmaW5lIElOVENIV19QSUQgICAgICAgICAgICAweGZlMAkvKiBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyIDAtMyAqLworI2RlZmluZSBJTlRDSFdfUENFTExJRCAgICAgICAgMHhmZjAJLyogUHJpbWVDZWxsIElEIFJlZ2lzdGVyIDAtMyAqLworCisvKiBFeGFtcGxlIFVzYWdlOiBpbnRjSHdfaXJxX2VuYWJsZShJTlRDSFdfSU5UQzAsIElOVENIV19JTlRDMF9USU1FUjApOyAqLworLyogICAgICAgICAgICAgICAgaW50Y0h3X2lycV9jbGVhcihJTlRDSFdfSU5UQzAsIElOVENIV19JTlRDMF9USU1FUjApOyAqLworLyogICAgICAgICAgICAgICAgdWludDMyX3QgYml0cyA9IGludGNId19pcnFfc3RhdHVzKElOVENIV19JTlRDMCk7ICovCisvKiAgICAgICAgICAgICAgICB1aW50MzJfdCBiaXRzID0gaW50Y0h3X2lycV9yYXdfc3RhdHVzKElOVENIV19JTlRDMCk7ICovCisKKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQ2xlYXIgb25lIG9yIG1vcmUgSVJRIGludGVycnVwdHMuICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW50Y0h3X2lycV9kaXNhYmxlKHZvaWQgKmJhc2VwLCB1aW50MzJfdCBtYXNrKQoreworCV9fUkVHMzIoYmFzZXAgKyBJTlRDSFdfSU5URU5DTEVBUikgPSBtYXNrOworfQorCisvKiBFbmFibGVzIG9uZSBvciBtb3JlIElSUSBpbnRlcnJ1cHRzLiAqLworc3RhdGljIGlubGluZSB2b2lkIGludGNId19pcnFfZW5hYmxlKHZvaWQgKmJhc2VwLCB1aW50MzJfdCBtYXNrKQoreworCV9fUkVHMzIoYmFzZXAgKyBJTlRDSFdfSU5URU5BQkxFKSA9IG1hc2s7Cit9CisKKyNlbmRpZiAvKiBfSU5UQ0hXX1JFR19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9tbV9hZGRyLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9tbV9hZGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiYjU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL21tX2FkZHIuaApAQCAtMCwwICsxLDEwMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIG1tX2FkZHIuaAorKgorKiAgQGJyaWVmICAgTWVtb3J5IE1hcCBhZGRyZXNzIGRlZmludGlvbnMKKyoKKyogIEBub3RlCisqICAgICBOb25lCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX01NX0FERFJfSAorI2RlZmluZSBfTU1fQUREUl9ICisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhZGVmaW5lZChDU1BfU0lNVUxBVElPTikKKyNpbmNsdWRlIDxjZmdfZ2xvYmFsLmg+CisjZW5kaWYKKworLyogLS0tLSBQdWJsaWMgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogIE1lbW9yeSBNYXAgYWRkcmVzcyBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIE1NX0FERFJfRERSICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworI2RlZmluZSBNTV9BRERSX0lPX1ZQTV9FWFRNRU1fUlNWRCAweDBGMDAwMDAwCS8qIDE2IE1CIC0gUmVzZXJ2ZWQgZXh0ZXJuYWwgbWVtb3J5IGZvciBWUE0gdXNlICovCisKKyNkZWZpbmUgTU1fQUREUl9JT19GTEFTSEMgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBNTV9BRERSX0lPX0JST00gICAgICAgICAgICAweDMwMDAwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fQVJBTSAgICAgICAgICAgIDB4MzAxMDAwMDAJLyogNjQgS0IgLSBleHRyYSBjeWNsZSBsYXRlbmN5IC0gV1Mgc3dpdGNoICovCisjZGVmaW5lIE1NX0FERFJfSU9fRE1BMCAgICAgICAgICAgIDB4MzAyMDAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19ETUExICAgICAgICAgICAgMHgzMDMwMDAwMAorI2RlZmluZSBNTV9BRERSX0lPX0VTVyAgICAgICAgICAgICAweDMwNDAwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fQ0xDRCAgICAgICAgICAgIDB4MzA1MDAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19QSUYgICAgICAgICAgICAgMHgzMDU4MDAwMAorI2RlZmluZSBNTV9BRERSX0lPX0FQTSAgICAgICAgICAgICAweDMwNjAwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fU1BVTSAgICAgICAgICAgIDB4MzA3MDAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19WUE1fUFJPRyAgICAgICAgMHgzMDgwMDAwMAorI2RlZmluZSBNTV9BRERSX0lPX1ZQTV9EQVRBICAgICAgICAweDMwQTAwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fVlJBTSAgICAgICAgICAgIDB4NDAwMDAwMDAJLyogNjQgS0IgIC0gc2VjdXJpdHkgYmxvY2sgaW4gZnJvbnQgb2YgaXQgKi8KKyNkZWZpbmUgTU1fQUREUl9JT19DSElQQyAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBNTV9BRERSX0lPX1VNSSAgICAgICAgICAgICAweDgwMDAxMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fTkFORCAgICAgICAgICAgIDB4ODAwMDE4MDAKKyNkZWZpbmUgTU1fQUREUl9JT19MRURNICAgICAgICAgICAgMHg4MDAwMjAwMAorI2RlZmluZSBNTV9BRERSX0lPX1BXTSAgICAgICAgICAgICAweDgwMDAyMDQwCisjZGVmaW5lIE1NX0FERFJfSU9fVklOVEMgICAgICAgICAgIDB4ODAwMDMwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19HUElPMCAgICAgICAgICAgMHg4MDAwNDAwMAorI2RlZmluZSBNTV9BRERSX0lPX0dQSU8xICAgICAgICAgICAweDgwMDA0ODAwCisjZGVmaW5lIE1NX0FERFJfSU9fSTJDUyAgICAgICAgICAgIDB4ODAwMDUwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19TUElTICAgICAgICAgICAgMHg4MDAwNjAwMAorI2RlZmluZSBNTV9BRERSX0lPX0hQTSAgICAgICAgICAgICAweDgwMDA3NDAwCisjZGVmaW5lIE1NX0FERFJfSU9fSFBNX1JFTUFQICAgICAgIDB4ODAwMDc4MDAKKyNkZWZpbmUgTU1fQUREUl9JT19UWlBDICAgICAgICAgICAgMHg4MDAwODAwMAorI2RlZmluZSBNTV9BRERSX0lPX01QVSAgICAgICAgICAgICAweDgwMDA5MDAwCisjZGVmaW5lIE1NX0FERFJfSU9fU1BVTVAgICAgICAgICAgIDB4ODAwMGEwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19QS0EgICAgICAgICAgICAgMHg4MDAwYjAwMAorI2RlZmluZSBNTV9BRERSX0lPX1JORyAgICAgICAgICAgICAweDgwMDBjMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fS0VZQyAgICAgICAgICAgIDB4ODAwMGQwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19CQkwgICAgICAgICAgICAgMHg4MDAwZTAwMAorI2RlZmluZSBNTV9BRERSX0lPX09UUCAgICAgICAgICAgICAweDgwMDBmMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fSTJTMCAgICAgICAgICAgIDB4ODAwMTAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19JMlMxICAgICAgICAgICAgMHg4MDAxMTAwMAorI2RlZmluZSBNTV9BRERSX0lPX1VBUlRBICAgICAgICAgICAweDgwMDEyMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fVUFSVEIgICAgICAgICAgIDB4ODAwMTMwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19JMkNIICAgICAgICAgICAgMHg4MDAxNDAyMAorI2RlZmluZSBNTV9BRERSX0lPX1NQSUggICAgICAgICAgICAweDgwMDE1MDAwCisjZGVmaW5lIE1NX0FERFJfSU9fVFNDICAgICAgICAgICAgIDB4ODAwMTYwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19UTVIgICAgICAgICAgICAgMHg4MDAxNzAwMAorI2RlZmluZSBNTV9BRERSX0lPX1dBVENIRE9HICAgICAgICAweDgwMDE3ODAwCisjZGVmaW5lIE1NX0FERFJfSU9fRVRNICAgICAgICAgICAgIDB4ODAwMTgwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19ERFJDICAgICAgICAgICAgMHg4MDAxOTAwMAorI2RlZmluZSBNTV9BRERSX0lPX1NJTlRDICAgICAgICAgICAweDgwMTAwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fSU5UQzAgICAgICAgICAgIDB4ODAyMDAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19JTlRDMSAgICAgICAgICAgMHg4MDIwMTAwMAorI2RlZmluZSBNTV9BRERSX0lPX0dFICAgICAgICAgICAgICAweDgwMzAwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fVVNCX0NUTFIwICAgICAgIDB4ODA0MDAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19VU0JfQ1RMUjEgICAgICAgMHg4MDQxMDAwMAorI2RlZmluZSBNTV9BRERSX0lPX1VTQl9QSFkgICAgICAgICAweDgwNDIwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fU0RJT0gwICAgICAgICAgIDB4ODA1MDAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19TRElPSDEgICAgICAgICAgMHg4MDYwMDAwMAorI2RlZmluZSBNTV9BRERSX0lPX1ZERUMgICAgICAgICAgICAweDgwNzAwMDAwCisKKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZW5kaWYgLyogX01NX0FERFJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvbW1faW8uaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL21tX2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5MmVjNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL21tX2lvLmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAZmlsZSAgICBtbV9pby5oCisqCisqICBAYnJpZWYgICBNZW1vcnkgTWFwIEkvTyBkZWZpbml0aW9ucworKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfTU1fSU9fSAorI2RlZmluZSBfTU1fSU9fSAorCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2luY2x1ZGUgPG1hY2gvY3NwL21tX2FkZHIuaD4KKworI2lmICFkZWZpbmVkKENTUF9TSU1VTEFUSU9OKQorI2luY2x1ZGUgPGNmZ19nbG9iYWwuaD4KKyNlbmRpZgorCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTU1VKQorCisvKiBUaGlzIG1hY3JvIGlzIHJlZmVyZW5jZWQgaW4gPG1hY2gvaW8uaD4KKyAqIFBoeXMgdG8gVmlydHVhbCAweE55eHh4eHh4ID0+IDB4Rk54eHh4eHgKKyAqIFRoaXMgbWFjcm8gaXMgcmVmZXJlbmNlZCBpbiA8YXNtL2FyY2gvaW8uaD4KKyAqCisgKiBBc3N1bWUgVlBNIGFkZHJlc3MgaXMgdGhlIGxhc3QgeCBNQiBvZiBtZW1vcnkuICBGb3IgVlBNLCBtYXAgdG8KKyAqIDB4ZjAwMDAwMDAgYW5kIHVwLgorICovCisKKyNpZm5kZWYgTU1fSU9fUEhZU19UT19WSVJUCisjaWZkZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIE1NX0lPX1BIWVNfVE9fVklSVChwaHlzKSAgICAgICAoMHhGMDAwMDAwMCB8ICgoKHBoeXMpID4+IDQpICYgMHgwRjAwMDAwMCkgfCAoKHBoeXMpICYgMHhGRkZGRkYpKQorI2Vsc2UKKyNkZWZpbmUgTU1fSU9fUEhZU19UT19WSVJUKHBoeXMpICAgICAgICgoKHBoeXMpID09IE1NX0FERFJfSU9fVlBNX0VYVE1FTV9SU1ZEKSA/IDB4RjAwMDAwMDAgOiBcCisJCQkoMHhGMDAwMDAwMCB8ICgoKHBoeXMpID4+IDQpICYgMHgwRjAwMDAwMCkgfCAoKHBoeXMpICYgMHhGRkZGRkYpKSkKKyNlbmRpZgorI2VuZGlmCisKKy8qIFZpcnR1YWwgdG8gUGh5c2ljYWwgMHhGTnh4eHh4eCA9PiAweE4weHh4eHh4ICovCisKKyNpZm5kZWYgTU1fSU9fVklSVF9UT19QSFlTCisjaWZkZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIE1NX0lPX1ZJUlRfVE9fUEhZUyh2aXJ0KSAgICAgICAoKCgodmlydCkgJiAweDBGMDAwMDAwKSA8PCA0KSB8ICgodmlydCkgJiAweEZGRkZGRikpCisjZWxzZQorI2RlZmluZSBNTV9JT19WSVJUX1RPX1BIWVModmlydCkgICAgICAgKCgodmlydCkgPT0gMHhGMDAwMDAwMCkgPyBNTV9BRERSX0lPX1ZQTV9FWFRNRU1fUlNWRCA6IFwKKwkJCSgoKCh2aXJ0KSAmIDB4MEYwMDAwMDApIDw8IDQpIHwgKCh2aXJ0KSAmIDB4RkZGRkZGKSkpCisjZW5kaWYKKyNlbmRpZgorCisjZWxzZQorCisjaWZuZGVmIE1NX0lPX1BIWVNfVE9fVklSVAorI2RlZmluZSBNTV9JT19QSFlTX1RPX1ZJUlQocGh5cykgICAgICAgKHBoeXMpCisjZW5kaWYKKworI2lmbmRlZiBNTV9JT19WSVJUX1RPX1BIWVMKKyNkZWZpbmUgTU1fSU9fVklSVF9UT19QSFlTKHZpcnQpICAgICAgICh2aXJ0KQorI2VuZGlmCisKKyNlbmRpZgorCisvKiBSZWdpc3RlcnMgaW4gMHhFeHh4eHh4eCB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byAweEZ4eHh4eHh4ICovCisjZGVmaW5lIE1NX0lPX0JBU0VfRkxBU0hDICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19GTEFTSEMpCisjZGVmaW5lIE1NX0lPX0JBU0VfTkFORCAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19OQU5EKQorI2RlZmluZSBNTV9JT19CQVNFX1VNSSAgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fVU1JKQorCisjZGVmaW5lIE1NX0lPX1NUQVJUIE1NX0FERFJfSU9fRkxBU0hDCS8qIFBoeXNpY2FsIGJlZ2lubmluZyBvZiBJTyBtYXBwZWQgbWVtb3J5ICovCisjZGVmaW5lIE1NX0lPX0JBU0UgIE1NX0lPX0JBU0VfRkxBU0hDCS8qIFZpcnR1YWwgYmVnaW5uaW5nIG9mIElPIG1hcHBlZCBtZW1vcnkgKi8KKworI2RlZmluZSBNTV9JT19CQVNFX0JST00gICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fQlJPTSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9BUkFNICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0FSQU0pCisjZGVmaW5lIE1NX0lPX0JBU0VfRE1BMCAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19ETUEwKQorI2RlZmluZSBNTV9JT19CQVNFX0RNQTEgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fRE1BMSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9FU1cgICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0VTVykKKyNkZWZpbmUgTU1fSU9fQkFTRV9DTENEICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0NMQ0QpCisjZGVmaW5lIE1NX0lPX0JBU0VfUElGICAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19QSUYpCisjZGVmaW5lIE1NX0lPX0JBU0VfQVBNICAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19BUE0pCisjZGVmaW5lIE1NX0lPX0JBU0VfU1BVTSAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19TUFVNKQorI2RlZmluZSBNTV9JT19CQVNFX1ZQTV9QUk9HICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fVlBNX1BST0cpCisjZGVmaW5lIE1NX0lPX0JBU0VfVlBNX0RBVEEgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19WUE1fREFUQSkKKworI2RlZmluZSBNTV9JT19CQVNFX1ZSQU0gICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fVlJBTSkKKworI2RlZmluZSBNTV9JT19CQVNFX0NISVBDICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fQ0hJUEMpCisjZGVmaW5lIE1NX0lPX0JBU0VfRERSQyAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19ERFJDKQorI2RlZmluZSBNTV9JT19CQVNFX0xFRE0gICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fTEVETSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9QV00gICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1BXTSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9WSU5UQyAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1ZJTlRDKQorI2RlZmluZSBNTV9JT19CQVNFX0dQSU8wICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fR1BJTzApCisjZGVmaW5lIE1NX0lPX0JBU0VfR1BJTzEgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19HUElPMSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9UTVIgICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1RNUikKKyNkZWZpbmUgTU1fSU9fQkFTRV9XQVRDSERPRyAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1dBVENIRE9HKQorI2RlZmluZSBNTV9JT19CQVNFX0VUTSAgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fRVRNKQorI2RlZmluZSBNTV9JT19CQVNFX0hQTSAgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fSFBNKQorI2RlZmluZSBNTV9JT19CQVNFX0hQTV9SRU1BUCAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fSFBNX1JFTUFQKQorI2RlZmluZSBNTV9JT19CQVNFX1RaUEMgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fVFpQQykKKyNkZWZpbmUgTU1fSU9fQkFTRV9NUFUgICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX01QVSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9TUFVNUCAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1NQVU1QKQorI2RlZmluZSBNTV9JT19CQVNFX1BLQSAgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fUEtBKQorI2RlZmluZSBNTV9JT19CQVNFX1JORyAgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fUk5HKQorI2RlZmluZSBNTV9JT19CQVNFX0tFWUMgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fS0VZQykKKyNkZWZpbmUgTU1fSU9fQkFTRV9CQkwgICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0JCTCkKKyNkZWZpbmUgTU1fSU9fQkFTRV9PVFAgICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX09UUCkKKyNkZWZpbmUgTU1fSU9fQkFTRV9JMlMwICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0kyUzApCisjZGVmaW5lIE1NX0lPX0JBU0VfSTJTMSAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19JMlMxKQorI2RlZmluZSBNTV9JT19CQVNFX1VBUlRBICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fVUFSVEEpCisjZGVmaW5lIE1NX0lPX0JBU0VfVUFSVEIgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19VQVJUQikKKyNkZWZpbmUgTU1fSU9fQkFTRV9JMkNIICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0kyQ0gpCisjZGVmaW5lIE1NX0lPX0JBU0VfU1BJSCAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19TUElIKQorI2RlZmluZSBNTV9JT19CQVNFX1RTQyAgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fVFNDKQorI2RlZmluZSBNTV9JT19CQVNFX0kyQ1MgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fSTJDUykKKyNkZWZpbmUgTU1fSU9fQkFTRV9TUElTICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1NQSVMpCisjZGVmaW5lIE1NX0lPX0JBU0VfU0lOVEMgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19TSU5UQykKKyNkZWZpbmUgTU1fSU9fQkFTRV9JTlRDMCAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0lOVEMwKQorI2RlZmluZSBNTV9JT19CQVNFX0lOVEMxICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fSU5UQzEpCisjZGVmaW5lIE1NX0lPX0JBU0VfR0UgICAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19HRSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9VU0JfQ1RMUjAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1VTQl9DVExSMCkKKyNkZWZpbmUgTU1fSU9fQkFTRV9VU0JfQ1RMUjEgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1VTQl9DVExSMSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9VU0JfUEhZICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1VTQl9QSFkpCisjZGVmaW5lIE1NX0lPX0JBU0VfU0RJT0gwICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19TRElPSDApCisjZGVmaW5lIE1NX0lPX0JBU0VfU0RJT0gxICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19TRElPSDEpCisjZGVmaW5lIE1NX0lPX0JBU0VfVkRFQyAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19WREVDKQorCisjZGVmaW5lIE1NX0lPX0JBU0VfVlBNX0VYVE1FTV9SU1ZEICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19WUE1fRVhUTUVNX1JTVkQpCisKKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZW5kaWYgLyogX01NX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL3NlY0h3X2RlZi5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3Avc2VjSHdfZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE1ZjVmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL3NlY0h3X2RlZi5oCkBAIC0wLDAgKzEsMTAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDMgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgc2VjSHdfZGVmLmgKKyoKKyogIEBicmllZiAgIERlZmluaXRpb25zIGZvciBjb25maWd1cmluZy90ZXN0aW5nIHNlY3VyZSBibG9ja3MKKyoKKyogIEBub3RlCisqICAgICBOb25lCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgU0VDSFdfREVGX0gKKyNkZWZpbmUgU0VDSFdfREVGX0gKKworI2luY2x1ZGUgPG1hY2gvY3NwL21tX2lvLmg+CisKKy8qIEJpdCBtYXNrIGZvciB2YXJpb3VzIHNlY3VyZSBkZXZpY2UgKi8KKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfQ0hJUF9DT05UUk9MICAgICAweDAwMDAwMDAxCisjZGVmaW5lIHNlY0h3X0JMS19NQVNLX0tFWV9TQ0FOICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBzZWNId19CTEtfTUFTS19UT1VDSF9TQ1JFRU4gICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfVUFSVDAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIHNlY0h3X0JMS19NQVNLX1VBUlQxICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBzZWNId19CTEtfTUFTS19XQVRDSERPRyAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfU1BVTSAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIHNlY0h3X0JMS19NQVNLX0REUjIgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBzZWNId19CTEtfTUFTS19FWFRfTUVNICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfRVNXICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIHNlY0h3X0JMS19NQVNLX1NQVSAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBzZWNId19CTEtfTUFTS19QS0EgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfUk5HICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIHNlY0h3X0JMS19NQVNLX1JUQyAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBzZWNId19CTEtfTUFTS19PVFAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfQk9PVCAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIHNlY0h3X0JMS19NQVNLX01QVSAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBzZWNId19CTEtfTUFTS19UWkNUUkwgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfSU5UUiAgICAgICAgICAgICAweDAxMDAwMDAwCisKKy8qIFRydXN0em9uZSByZWdpc3RlciBzZXQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl2b2xhdGlsZSB1aW50MzJfdCBzdGF0dXM7CS8qIHJlYWQgb25seSAtIHJlZmxlY3RzIHN0YXR1cyBvZiB3cml0ZXMgb2YgMiB3cml0ZSByZWdpc3RlcnMgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCBzZXRVbnNlY3VyZTsJLyogd3JpdGUgb25seS4gcmVhZHMgYmFjayBhcyAwICovCisJdm9sYXRpbGUgdWludDMyX3Qgc2V0U2VjdXJlOwkvKiB3cml0ZSBvbmx5LiByZWFkcyBiYWNrIGFzIDAgKi8KK30gc2VjSHdfVFpSRUdfdDsKKworLyogVGhlcmUgYXJlIDIgcmVnaXN0ZXIgc2V0cy4gVGhlIGZpcnN0IGlzIGZvciB0aGUgbG93ZXIgMTYgYml0cywgdGhlIDJuZCAqLworLyogaXMgZm9yIHRoZSBoaWdoZXIgMTYgYml0cy4gKi8KKwordHlwZWRlZiBlbnVtIHsKKwlzZWNId19JRFhfTFMgPSAwLAorCXNlY0h3X0lEWF9NUyA9IDEsCisJc2VjSHdfSURYX05VTQorfSBzZWNId19JRFhfZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHNlY0h3X1RaUkVHX3QgcmVnW3NlY0h3X0lEWF9OVU1dOworfSBzZWNId19SRUdTX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIENvbmZpZ3VyZXMgYSBkZXZpY2UgYXMgYSBzZWN1cmUgZGV2aWNlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjSHdfc2V0U2VjdXJlKHVpbnQzMl90IG1hc2sJLyogIG1hc2sgb2YgdHlwZSBzZWNId19CTEtfTUFTS19YWFhYWFggKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICBDb25maWd1cmVzIGEgZGV2aWNlIGFzIGEgbm9uLXNlY3VyZSBkZXZpY2UKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWNId19zZXRVbnNlY3VyZSh1aW50MzJfdCBtYXNrCS8qICBtYXNrIG9mIHR5cGUgc2VjSHdfQkxLX01BU0tfWFhYWFhYICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgR2V0IHRoZSB0cnVzdHpvbmUgc3RhdHVzIGZvciBhbGwgY29tcG9uZW50cy4gMSA9IG5vbi1zZWN1cmUsIDAgPSBzZWN1cmUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3Qgc2VjSHdfZ2V0U3RhdHVzKHZvaWQpOworCisjaW5jbHVkZSA8bWFjaC9jc3Avc2VjSHdfaW5saW5lLmg+CisKKyNlbmRpZiAvKiBTRUNIV19ERUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3Avc2VjSHdfaW5saW5lLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9zZWNId19pbmxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2Q2YTAzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3Avc2VjSHdfaW5saW5lLmgKQEAgLTAsMCArMSw3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIHNlY0h3X2lubGluZS5oCisqCisqICBAYnJpZWYgICBEZWZpbml0aW9ucyBmb3IgY29uZmlndXJpbmcvdGVzdGluZyBzZWN1cmUgYmxvY2tzCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFNFQ0hXX0lOTElORV9ICisjZGVmaW5lIFNFQ0hXX0lOTElORV9ICisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIENvbmZpZ3VyZXMgYSBkZXZpY2UgYXMgYSBzZWN1cmUgZGV2aWNlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjSHdfc2V0U2VjdXJlKHVpbnQzMl90IG1hc2sJLyogIG1hc2sgb2YgdHlwZSBzZWNId19CTEtfTUFTS19YWFhYWFggKi8KKyAgICApIHsKKwlzZWNId19SRUdTX3QgKnJlZ3AgPSAoc2VjSHdfUkVHU190ICopIE1NX0lPX0JBU0VfVFpQQzsKKworCWlmIChtYXNrICYgMHgwMDAwRkZGRikgeworCQlyZWdwLT5yZWdbc2VjSHdfSURYX0xTXS5zZXRTZWN1cmUgPSBtYXNrICYgMHgwMDAwRkZGRjsKKwl9CisKKwlpZiAobWFzayAmIDB4RkZGRjAwMDApIHsKKwkJcmVncC0+cmVnW3NlY0h3X0lEWF9NU10uc2V0U2VjdXJlID0gbWFzayA+PiAxNjsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIENvbmZpZ3VyZXMgYSBkZXZpY2UgYXMgYSBub24tc2VjdXJlIGRldmljZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIHNlY0h3X3NldFVuc2VjdXJlKHVpbnQzMl90IG1hc2sJLyogIG1hc2sgb2YgdHlwZSBzZWNId19CTEtfTUFTS19YWFhYWFggKi8KKyAgICApIHsKKwlzZWNId19SRUdTX3QgKnJlZ3AgPSAoc2VjSHdfUkVHU190ICopIE1NX0lPX0JBU0VfVFpQQzsKKworCWlmIChtYXNrICYgMHgwMDAwRkZGRikgeworCQlyZWdwLT5yZWdbc2VjSHdfSURYX0xTXS5zZXRVbnNlY3VyZSA9IG1hc2sgJiAweDAwMDBGRkZGOworCX0KKwlpZiAobWFzayAmIDB4RkZGRjAwMDApIHsKKwkJcmVncC0+cmVnW3NlY0h3X0lEWF9NU10uc2V0VW5zZWN1cmUgPSBtYXNrID4+IDE2OworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgR2V0IHRoZSB0cnVzdHpvbmUgc3RhdHVzIGZvciBhbGwgY29tcG9uZW50cy4gMSA9IG5vbi1zZWN1cmUsIDAgPSBzZWN1cmUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3Qgc2VjSHdfZ2V0U3RhdHVzKHZvaWQpCit7CisJc2VjSHdfUkVHU190ICpyZWdwID0gKHNlY0h3X1JFR1NfdCAqKSBNTV9JT19CQVNFX1RaUEM7CisKKwlyZXR1cm4gKHJlZ3AtPnJlZ1sxXS5zdGF0dXMgPDwgMTYpICsgcmVncC0+cmVnWzBdLnN0YXR1czsKK30KKworI2VuZGlmIC8qIFNFQ0hXX0lOTElORV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC90bXJId19yZWcuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL3Rtckh3X3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwODBhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC90bXJId19yZWcuaApAQCAtMCwwICsxLDgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgdG1ySHdfcmVnLmgKKyoKKyogIEBicmllZiAgIERlZmluaXRpb25zIGZvciBsb3cgbGV2ZWwgVGltZXIgcmVnaXN0ZXJzCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9UTVJIV19SRUdfSAorI2RlZmluZSBfVE1SSFdfUkVHX0gKKworI2luY2x1ZGUgPG1hY2gvY3NwL21tX2lvLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvaHdfY2ZnLmg+CisvKiBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgdG1ySHdfTU9EVUxFX0JBU0VfQUREUiAgICAgICAgICBNTV9JT19CQVNFX1RNUgorCisvKgorVGhpcyBwbGF0Zm9ybSBoYXMgZm91ciBkaWZmZXJlbnQgdGltZXJzIHJ1bm5pbmcgYXQgZGlmZmVyZW50IGNsb2NrIHNwZWVkCisKK1RpbWVyIG9uZSAgIChUaW1lciBJRCAwKSBydW5zIGF0ICAyNSBNSHoKK1RpbWVyIHR3byAgIChUaW1lciBJRCAxKSBydW5zIGF0ICAyNSBNSHoKK1RpbWVyIHRocmVlIChUaW1lciBJRCAyKSBydW5zIGF0IDE1MCBNSHoKK1RpbWVyIGZvdXIgIChUaW1lciBJRCAzKSBydW5zIGF0IDE1MCBNSHoKKyovCisjZGVmaW5lIHRtckh3X0xPV19GUkVRVUVOQ1lfTUhaICAgICAgICAgMjUJLyogQWx3YXlzIDI1TUh6IGZyb20gWFRBTCAqLworI2RlZmluZSB0bXJId19MT1dfRlJFUVVFTkNZX0haICAgICAgICAgIDI1MDAwMDAwCisKKyNpZiBkZWZpbmVkKENGR19HTE9CQUxfQ0hJUCkgJiYgKENGR19HTE9CQUxfQ0hJUCA9PSBGUEdBMTExMDcpCisjZGVmaW5lIHRtckh3X0hJR0hfRlJFUVVFTkNZX01IWiAgICAgICAgMTUwCS8qIEFsd2F5cyAxNTBNSHogZm9yIEZQR0EgKi8KKyNkZWZpbmUgdG1ySHdfSElHSF9GUkVRVUVOQ1lfSFogICAgICAgICAxNTAwMDAwMDAKKyNlbHNlCisjZGVmaW5lIHRtckh3X0hJR0hfRlJFUVVFTkNZX0haICAgICAgICAgSFdfQ0ZHX0JVU19DTEtfSFoKKyNkZWZpbmUgdG1ySHdfSElHSF9GUkVRVUVOQ1lfTUhaICAgICAgICAoSFdfQ0ZHX0JVU19DTEtfSFogLyAxMDAwMDAwKQorI2VuZGlmCisKKyNkZWZpbmUgdG1ySHdfTE9XX1JFU09MVVRJT05fQ0xPQ0sgICAgICB0bXJId19MT1dfRlJFUVVFTkNZX0haCisjZGVmaW5lIHRtckh3X0hJR0hfUkVTT0xVVElPTl9DTE9DSyAgICAgdG1ySHdfSElHSF9GUkVRVUVOQ1lfSFoKKyNkZWZpbmUgdG1ySHdfTUFYX0NPVU5UICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRikJLyogbWF4aW11bSBudW1iZXIgb2YgY291bnQgYSB0aW1lciBjYW4gY291bnQgKi8KKyNkZWZpbmUgdG1ySHdfVElNRVJfTlVNX0NPVU5UICAgICAgICAgICAoNCkJLyogTnVtYmVyIG9mIHRpbWVyIG1vZHVsZSBzdXBwb3J0ZWQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IExvYWRWYWx1ZTsJLyogTG9hZCB2YWx1ZSBmb3IgdGltZXIgKi8KKwl1aW50MzJfdCBDdXJyZW50VmFsdWU7CS8qIEN1cnJlbnQgdmFsdWUgZm9yIHRpbWVyICovCisJdWludDMyX3QgQ29udHJvbDsJLyogQ29udHJvbCByZWdpc3RlciAqLworCXVpbnQzMl90IEludGVycnVwdENsZWFyOwkvKiBJbnRlcnJ1cHQgY2xlYXIgcmVnaXN0ZXIgKi8KKwl1aW50MzJfdCBSYXdJbnRlcnJ1cHRTdGF0dXM7CS8qIFJhdyBpbnRlcnJ1cHQgc3RhdHVzICovCisJdWludDMyX3QgSW50ZXJydXB0U3RhdHVzOwkvKiBNYXNrZWQgaW50ZXJydXB0IHN0YXR1cyAqLworCXVpbnQzMl90IEJhY2tncm91bmRMb2FkOwkvKiBCYWNrZ3JvdW5kIGxvYWQgdmFsdWUgKi8KKwl1aW50MzJfdCBwYWRkaW5nOwkvKiBQYWRkaW5nIHJlZ2lzdGVyICovCit9IHRtckh3X1JFR190OworCisvKiBDb250cm9sIGJvdCBtYXNrcyAqLworI2RlZmluZSB0bXJId19DT05UUk9MX1RJTUVSX0VOQUJMRSAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgdG1ySHdfQ09OVFJPTF9QRVJJT0RJQyAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIHRtckh3X0NPTlRST0xfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSB0bXJId19DT05UUk9MX1BSRVNDQUxFX01BU0sgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgdG1ySHdfQ09OVFJPTF9QUkVTQ0FMRV8xICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIHRtckh3X0NPTlRST0xfUFJFU0NBTEVfMTYgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSB0bXJId19DT05UUk9MX1BSRVNDQUxFXzI1NiAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgdG1ySHdfQ09OVFJPTF8zMkJJVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIHRtckh3X0NPTlRST0xfT05FU0hPVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSB0bXJId19DT05UUk9MX0ZSRUVfUlVOTklORyAgICAgICAgICAgIDB4MDAwMDAwMDAKKworI2RlZmluZSB0bXJId19DT05UUk9MX01PREVfTUFTSyAgICAgICAgICAgICAgICh0bXJId19DT05UUk9MX1BFUklPRElDIHwgdG1ySHdfQ09OVFJPTF9PTkVTSE9UKQorCisjZGVmaW5lIHBUbXJIdyAoKHZvbGF0aWxlIHRtckh3X1JFR190ICopdG1ySHdfTU9EVUxFX0JBU0VfQUREUikKKworI2VuZGlmIC8qIF9UTVJIV19SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3OTgwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTAsMCArMSw4MjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwNCAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgQGZpbGUgICBkbWEuaAorKgorKiAgIEBicmllZiAgQVBJIGRlZmluaXRpb25zIGZvciB0aGUgbGludXggRE1BIGludGVyZmFjZS4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmICFkZWZpbmVkKEFTTV9BUk1fQVJDSF9CQ01SSU5HX0RNQV9IKQorI2RlZmluZSBBU01fQVJNX0FSQ0hfQkNNUklOR19ETUFfSAorCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGNzcC9kbWFjSHcuaD4KKyNpbmNsdWRlIDxtYWNoL3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKworLyogLS0tLSBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSWYgRE1BX0RFQlVHX1RSQUNLX1JFU0VSVkFUSU9OIGlzIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGVuIHRoZSBmaWxlbmFtZSAqLworLyogYW5kIGxpbmUgbnVtYmVyIG9mIHRoZSByZXNlcnZhdGlvbiByZXF1ZXN0IHdpbGwgYmUgcmVjb3JkZWQgaW4gdGhlIGNoYW5uZWwgdGFibGUgKi8KKworI2RlZmluZSBETUFfREVCVUdfVFJBQ0tfUkVTRVJWQVRJT04gICAxCisKKyNkZWZpbmUgRE1BX05VTV9DT05UUk9MTEVSUyAgICAgMgorI2RlZmluZSBETUFfTlVNX0NIQU5ORUxTICAgICAgICA4CS8qIHBlciBjb250cm9sbGVyICovCisKK3R5cGVkZWYgZW51bSB7CisJRE1BX0RFVklDRV9NRU1fVE9fTUVNLAkvKiBGb3IgbWVtb3J5IHRvIG1lbW9yeSB0cmFuc2ZlcnMgKi8KKwlETUFfREVWSUNFX0kyUzBfREVWX1RPX01FTSwKKwlETUFfREVWSUNFX0kyUzBfTUVNX1RPX0RFViwKKwlETUFfREVWSUNFX0kyUzFfREVWX1RPX01FTSwKKwlETUFfREVWSUNFX0kyUzFfTUVNX1RPX0RFViwKKwlETUFfREVWSUNFX0FQTV9DT0RFQ19BX0RFVl9UT19NRU0sCisJRE1BX0RFVklDRV9BUE1fQ09ERUNfQV9NRU1fVE9fREVWLAorCURNQV9ERVZJQ0VfQVBNX0NPREVDX0JfREVWX1RPX01FTSwKKwlETUFfREVWSUNFX0FQTV9DT0RFQ19CX01FTV9UT19ERVYsCisJRE1BX0RFVklDRV9BUE1fQ09ERUNfQ19ERVZfVE9fTUVNLAkvKiBBZGRpdGlvbmFsIG1pYyBpbnB1dCBmb3IgYmVhbS1mb3JtaW5nICovCisJRE1BX0RFVklDRV9BUE1fUENNMF9ERVZfVE9fTUVNLAorCURNQV9ERVZJQ0VfQVBNX1BDTTBfTUVNX1RPX0RFViwKKwlETUFfREVWSUNFX0FQTV9QQ00xX0RFVl9UT19NRU0sCisJRE1BX0RFVklDRV9BUE1fUENNMV9NRU1fVE9fREVWLAorCURNQV9ERVZJQ0VfU1BVTV9ERVZfVE9fTUVNLAorCURNQV9ERVZJQ0VfU1BVTV9NRU1fVE9fREVWLAorCURNQV9ERVZJQ0VfU1BJSF9ERVZfVE9fTUVNLAorCURNQV9ERVZJQ0VfU1BJSF9NRU1fVE9fREVWLAorCURNQV9ERVZJQ0VfVUFSVF9BX0RFVl9UT19NRU0sCisJRE1BX0RFVklDRV9VQVJUX0FfTUVNX1RPX0RFViwKKwlETUFfREVWSUNFX1VBUlRfQl9ERVZfVE9fTUVNLAorCURNQV9ERVZJQ0VfVUFSVF9CX01FTV9UT19ERVYsCisJRE1BX0RFVklDRV9QSUZfTUVNX1RPX0RFViwKKwlETUFfREVWSUNFX1BJRl9ERVZfVE9fTUVNLAorCURNQV9ERVZJQ0VfRVNXX0RFVl9UT19NRU0sCisJRE1BX0RFVklDRV9FU1dfTUVNX1RPX0RFViwKKwlETUFfREVWSUNFX1ZQTV9NRU1fVE9fTUVNLAorCURNQV9ERVZJQ0VfQ0xDRF9NRU1fVE9fTUVNLAorCURNQV9ERVZJQ0VfTkFORF9NRU1fVE9fTUVNLAorCURNQV9ERVZJQ0VfTUVNX1RPX1ZSQU0sCisJRE1BX0RFVklDRV9WUkFNX1RPX01FTSwKKworCS8qIEFkZCBuZXcgZW50cmllcyBiZWZvcmUgdGhpcyBsaW5lLiAqLworCisJRE1BX05VTV9ERVZJQ0VfRU5UUklFUywKKwlETUFfREVWSUNFX05PTkUgPSAweGZmLAkvKiBTcGVjaWFsIHZhbHVlIHRvIGluZGljYXRlIHRoYXQgbm8gZGV2aWNlIGlzIGN1cnJlbnRseSBhc3NpZ25lZC4gKi8KKworfSBETUFfRGV2aWNlX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgVGhlIERNQV9IYW5kbGVfdCBpcyB0aGUgcHJpbWFyeSBvYmplY3QgdXNlZCBieSBjYWxsZXJzIG9mIHRoZSBBUEkuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBETUFfSU5WQUxJRF9IQU5ETEUgICgoRE1BX0hhbmRsZV90KSAtMSkKKwordHlwZWRlZiBpbnQgRE1BX0hhbmRsZV90OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIFRoZSBETUFfRGVzY3JpcHRvclJpbmdfdCBjb250YWlucyBhIHJpbmcgb2YgZGVzY3JpcHRvcnMgd2hpY2ggaXMgdXNlZAorKiAgIHRvIHBvaW50IHRvIHJlZ2lvbnMgb2YgbWVtb3J5LgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl2b2lkICp2aXJ0QWRkcjsJCS8qIFZpcnR1YWwgQWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvciByaW5nICovCisJZG1hX2FkZHJfdCBwaHlzQWRkcjsJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvciByaW5nICovCisJaW50IGRlc2NyaXB0b3JzQWxsb2NhdGVkOwkvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgYWxsb2NhdGVkIGluIHRoZSBkZXNjcmlwdG9yIHJpbmcgKi8KKwlzaXplX3QgYnl0ZXNBbGxvY2F0ZWQ7CS8qIE51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgaW4gdGhlIGRlc2NyaXB0b3IgcmluZyAqLworCit9IERNQV9EZXNjcmlwdG9yUmluZ190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIFRoZSBETUFfTWVtVHlwZV90IGFuZCBETUFfTWVtTWFwX3QgYXJlIGhlbHBlciBzdHJ1Y3R1cmVzIHVzZWQgdG8gc2V0dXAKKyogICBETUEgY2hhaW5zIGZyb20gYSB2YXJpZXR5IG9mIG1lbW9yeSBzb3VyY2VzLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRE1BX01FTV9NQVBfTUlOX1NJWkUgICAgNDA5NgkvKiBQYWdlcyBsZXNzIHRoYW4gdGhpcyBzaXplIGFyZSBiZXR0ZXIgKi8KKwkJCQkJLyogb2ZmIG5vdCBiZWluZyBETUEnZC4gKi8KKwordHlwZWRlZiBlbnVtIHsKKwlETUFfTUVNX1RZUEVfTk9ORSwJLyogTm90IGEgdmFsaWQgc2V0dGluZyAqLworCURNQV9NRU1fVFlQRV9WTUFMTE9DLAkvKiBNZW1vcnkgY2FtZSBmcm9tIHZtYWxsb2MgY2FsbCAqLworCURNQV9NRU1fVFlQRV9LTUFMTE9DLAkvKiBNZW1vcnkgY2FtZSBmcm9tIGttYWxsb2MgY2FsbCAqLworCURNQV9NRU1fVFlQRV9ETUEsCS8qIE1lbW9yeSBjYW1lIGZyb20gZG1hX2FsbG9jX3h4eCBjYWxsICovCisJRE1BX01FTV9UWVBFX1VTRVIsCS8qIE1lbW9yeSBjYW1lIGZyb20gdXNlciBzcGFjZS4gKi8KKworfSBETUFfTWVtVHlwZV90OworCisvKiBBIHNlZ21lbnQgcmVwcmVzZW50cyBhIHBoeXNpY2FsbHkgYW5kIHZpcnR1YWxseSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeS4gKi8KKy8qIGkuZS4gZWFjaCBzZWdtZW50IGNhbiBiZSBETUEnZCAqLworLyogQSB1c2VyIG9mIHRoZSBETUEgY29kZSB3aWxsIGFkZCBtZW1vcnkgcmVnaW9ucy4gRWFjaCByZWdpb24gbWF5IG5lZWQgdG8gYmUgKi8KKy8qIHJlcHJlc2VudGVkIGJ5IG9uZSBvciBtb3JlIHNlZ21lbnRzLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdm9pZCAqdmlydEFkZHI7CQkvKiBWaXJ0dWFsIGFkZHJlc3MgdXNlZCBmb3IgdGhpcyBzZWdtZW50ICovCisJZG1hX2FkZHJfdCBwaHlzQWRkcjsJLyogUGh5c2ljYWwgYWRkcmVzcyB0aGlzIHNlZ21lbnQgbWFwcyB0byAqLworCXNpemVfdCBudW1CeXRlczsJLyogU2l6ZSBvZiB0aGUgc2VnbWVudCwgaW4gYnl0ZXMgKi8KKworfSBETUFfU2VnbWVudF90OworCisvKiBBIHJlZ2lvbiByZXByZXNlbnRzIGEgdmlydHVhbGx5IGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5LCB3aGljaCBtYXkgYmUgKi8KKy8qIG1hZGUgdXAgb2YgbXVsdGlwbGUgc2VnbWVudHMuICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlETUFfTWVtVHlwZV90IG1lbVR5cGU7CisJdm9pZCAqdmlydEFkZHI7CisJc2l6ZV90IG51bUJ5dGVzOworCisJLyogRWFjaCByZWdpb24gKHZpcnR1YWxseSBjb250aWd1b3VzKSBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBzZWdtZW50cy4gRWFjaCAqLworCS8qIHNlZ21lbnQgaXMgdmlydHVhbGx5IGFuZCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMuICovCisKKwlpbnQgbnVtU2VnbWVudHNVc2VkOworCWludCBudW1TZWdtZW50c0FsbG9jYXRlZDsKKwlETUFfU2VnbWVudF90ICpzZWdtZW50OworCisJLyogV2hlbiBhIHJlZ2lvbiBjb3JyZXNwb25kcyB0byB1c2VyIG1lbW9yeSwgd2UgbmVlZCB0byBsb2NrIGFsbCBvZiB0aGUgcGFnZXMgKi8KKwkvKiBkb3duIGJlZm9yZSB3ZSBjYW4gZmlndXJlIG91dCB0aGUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgbG9ja2VkUGFnZSBhcnJheSBjb250YWlucyAqLworCS8qIHRoZSBwYWdlcyB0aGF0IHdlcmUgbG9ja2VkLCBhbmQgd2hpY2ggc3Vic2VxdWVudGx5IG5lZWQgdG8gYmUgdW5sb2NrZWQgb25jZSB0aGUgKi8KKwkvKiBtZW1vcnkgaXMgdW5tYXBwZWQuICovCisKKwl1bnNpZ25lZCBudW1Mb2NrZWRQYWdlczsKKwlzdHJ1Y3QgcGFnZSAqKmxvY2tlZFBhZ2VzOworCit9IERNQV9SZWdpb25fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBpblVzZTsJCS8qIElzIHRoaXMgbWFwcGluZyBjdXJyZW50bHkgYmVpbmcgdXNlZD8gKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CS8qIEFjcXVpcmVkIHdoZW4gdXNpbmcgdGhpcyBzdHJ1Y3R1cmUgKi8KKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7CS8qIERpcmVjdGlvbiB0aGlzIHRyYW5zZmVyIGlzIGludGVuZGVkIGZvciAqLworCisJLyogSW4gdGhlIGV2ZW50IHRoYXQgd2UncmUgbWFwcGluZyB1c2VyIG1lbW9yeSwgd2UgbmVlZCB0byBrbm93IHdoaWNoIHRhc2sgKi8KKwkvKiB0aGUgbWVtb3J5IGlzIGZvciwgc28gdGhhdCB3ZSBjYW4gb2J0YWluIHRoZSBjb3JyZWN0IG1tIGxvY2tzLiAqLworCisJc3RydWN0IHRhc2tfc3RydWN0ICp1c2VyVGFzazsKKworCWludCBudW1SZWdpb25zVXNlZDsKKwlpbnQgbnVtUmVnaW9uc0FsbG9jYXRlZDsKKwlETUFfUmVnaW9uX3QgKnJlZ2lvbjsKKworfSBETUFfTWVtTWFwX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgVGhlIERNQV9EZXZpY2VBdHRyaWJ1dGVfdCBjb250YWlucyBpbmZvcm1hdGlvbiB3aGljaCBkZXNjcmliZXMgYQorKiAgIHBhcnRpY3VsYXIgRE1BIGRldmljZSAob3IgcGVyaXBoZXJhbCkuCisqCisqICAgSXQgaXMgYW50aWNpcGF0ZWQgdGhhdCB0aGUgYXJyYXJ5IG9mIERNQV9EZXZpY2VBdHRyaWJ1dGVfdCdzIHdpbGwgYmUKKyogICBzdGF0aWNhbGx5IGluaXRpYWxpemVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZSBkZXZpY2UgaGFuZGxlciBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBETUEgb3BlcmF0aW9uIGNvbXBsZXRlcy4gVGhlIHJlYW9uICovCisvKiBmb3IgaXQgdG8gYmUgY2FsbGVkIHdpbGwgYmUgYSBiaXRtYXNrIHdpdGggb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBiaXRzICovCisvKiBzZXQuICovCisKKyNkZWZpbmUgRE1BX0hBTkRMRVJfUkVBU09OX0JMT0NLX0NPTVBMRVRFICAgICAgIGRtYWNId19JTlRFUlJVUFRfU1RBVFVTX0JMT0NLCisjZGVmaW5lIERNQV9IQU5ETEVSX1JFQVNPTl9UUkFOU0ZFUl9DT01QTEVURSAgICBkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19UUkFOUworI2RlZmluZSBETUFfSEFORExFUl9SRUFTT05fRVJST1IgICAgICAgICAgICAgICAgZG1hY0h3X0lOVEVSUlVQVF9TVEFUVVNfRVJST1IKKwordHlwZWRlZiB2b2lkICgqRE1BX0RldmljZUhhbmRsZXJfdCkgKERNQV9EZXZpY2VfdCBkZXYsIGludCByZWFzb24sCisJCQkJICAgICB2b2lkICp1c2VyRGF0YSk7CisKKyNkZWZpbmUgRE1BX0RFVklDRV9GTEFHX09OX0RNQTAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMSAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIERNQV9ERVZJQ0VfRkxBR19QT1JUX1BFUl9ETUFDICAgICAgIDB4MDAwMDAwMDQJLyogSWYgc2V0LCBpdCBtZWFucyB0aGF0IHRoZSBwb3J0IHVzZWQgb24gRE1BQzAgaXMgZGlmZmVyZW50IGZyb20gdGhlIHBvcnQgdXNlZCBvbiBETUFDMSAqLworI2RlZmluZSBETUFfREVWSUNFX0ZMQUdfQUxMT0NfRE1BMV9GSVJTVCAgICAweDAwMDAwMDA4CS8qIElmIHNldCwgYWxsb2NhdGUgZnJvbSBETUExIGJlZm9yZSBhbGxvY2F0aW5nIGZyb20gRE1BMCAqLworI2RlZmluZSBETUFfREVWSUNFX0ZMQUdfSVNfREVESUNBVEVEICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIERNQV9ERVZJQ0VfRkxBR19OT19JU1IgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgRE1BX0RFVklDRV9GTEFHX0FMTE9XX0xBUkdFX0ZJRk8gICAgMHgwMDAwMDQwMAorI2RlZmluZSBETUFfREVWSUNFX0ZMQUdfSU5fVVNFICAgICAgICAgICAgICAweDAwMDAwODAwCS8qIElmIHNldCwgZGV2aWNlIGlzIGluIHVzZSBvbiBhIGNoYW5uZWwgKi8KKworLyogTm90ZTogU29tZSBETUEgZGV2aWNlcyBjYW4gYmUgdXNlZCBmcm9tIG11bHRpcGxlIERNQSBDb250cm9sbGVycy4gVGhlIGJpdG1hc2sgaXMgdXNlZCB0byAqLworLyogICAgICAgZGV0ZXJtaW5lIHdoaWNoIERNQSBjb250cm9sbGVycyBhIGdpdmVuIGRldmljZSBjYW4gYmUgdXNlZCBmcm9tLCBhbmQgdGhlIGludGVyZmFjZSAqLworLyogICAgICAgYXJyYXkgZGV0ZXJtZWluZXMgdGhlIGFjdHVhbCBpbnRlcmZhY2UgbnVtYmVyIHRvIHVzZSBmb3IgYSBnaXZlbiBjb250cm9sbGVyLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdWludDMyX3QgZmxhZ3M7CQkvKiBCaXRtYXNrIG9mIERNQV9ERVZJQ0VfRkxBR194eHggY29uc3RhbnRzICovCisJdWludDhfdCBkZWRpY2F0ZWRDb250cm9sbGVyOwkvKiBDb250cm9sbGVyIG51bWJlciB0byB1c2UgaWYgRE1BX0RFVklDRV9GTEFHX0lTX0RFRElDQVRFRCBpcyBzZXQuICovCisJdWludDhfdCBkZWRpY2F0ZWRDaGFubmVsOwkvKiBDaGFubmVsIG51bWJlciB0byB1c2UgaWYgRE1BX0RFVklDRV9GTEFHX0lTX0RFRElDQVRFRCBpcyBzZXQuICovCisJY29uc3QgY2hhciAqbmFtZTsJLyogV2lsbCBzaG93IHVwIGluIHRoZSAvcHJvYyBlbnRyeSAqLworCisJdWludDMyX3QgZG1hY1BvcnRbRE1BX05VTV9DT05UUk9MTEVSU107CS8qIFNwZWNpZmllcyB0aGUgcG9ydCBudW1iZXIgd2hlbiBETUFfREVWSUNFX0ZMQUdfUE9SVF9QRVJfRE1BQyBmbGFnIGlzIHNldCAqLworCisJZG1hY0h3X0NPTkZJR190IGNvbmZpZzsJLyogQ29uZmlndXJhdGlvbiB0byB1c2Ugd2hlbiBETUEnaW5nIHVzaW5nIHRoaXMgZGV2aWNlICovCisKKwl2b2lkICp1c2VyRGF0YTsJCS8qIFBhc3NlZCB0byB0aGUgZGV2SGFuZGxlciAqLworCURNQV9EZXZpY2VIYW5kbGVyX3QgZGV2SGFuZGxlcjsJLyogQ2FsbGVkIHdoZW4gRE1BIG9wZXJhdGlvbnMgZmluaXNoLiAqLworCisJdGltZXJfdGlja19jb3VudF90IHRyYW5zZmVyU3RhcnRUaW1lOwkvKiBUaW1lIHRoZSBjdXJyZW50IHRyYW5zZmVyIHdhcyBzdGFydGVkICovCisKKwkvKiBUaGUgZm9sbG93aW5nIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIHdpbGwgYmUgY29sbGVjdGVkIGFuZCBwcmVzZW50ZWQgaW4gYSBwcm9jIGVudHJ5LiAqLworCS8qIE5vdGU6IFdpdGggYSBjb250aXVvdXMgYmFuZHdpZHRoIG9mIDEgR2Ivc2VjLCBpdCB3b3VsZCB0YWtlIDU4NCB5ZWFycyB0byBvdmVyZmxvdyAqLworCS8qICAgICAgIGEgNjQgYml0IGNvdW50ZXIuICovCisKKwl1aW50NjRfdCBudW1UcmFuc2ZlcnM7CS8qIE51bWJlciBvZiBETUEgdHJhbnNmZXJzIHBlcmZvcm1lZCAqLworCXVpbnQ2NF90IHRyYW5zZmVyVGlja3M7CS8qIFRvdGFsIHRpbWUgc3BlbnQgZG9pbmcgRE1BIHRyYW5zZmVycyAobWVhc3VyZWQgaW4gdGltZXJfdGlja19jb3VudF90J3MpICovCisJdWludDY0X3QgdHJhbnNmZXJCeXRlczsJLyogVG90YWwgYnl0ZXMgdHJhbnNmZXJyZWQgKi8KKwl1aW50MzJfdCB0aW1lc0Jsb2NrZWQ7CS8qIE51bWJlciBvZiB0aW1lcyBhIGNoYW5uZWwgd2FzIHVuYXZhaWxhYmxlICovCisJdWludDMyX3QgbnVtQnl0ZXM7CS8qIExhc3QgdHJhbnNmZXIgc2l6ZSAqLworCisJLyogSXQncyBub3QgcG9zc2libGUgdG8gZnJlZSBtZW1vcnkgd2hpY2ggaXMgYWxsb2NhdGVkIGZvciB0aGUgZGVzY3JpcHRvcnMgZnJvbSB3aXRoaW4gKi8KKwkvKiB0aGUgSVNSLiBTbyBtYWtlIHRoZSBwcmVzdW1wdGlvbiB0aGF0IGEgZ2l2ZW4gZGV2aWNlIHdpbGwgdGVuZCB0byB1c2UgdGhlICovCisJLyogc2FtZSBzaXplZCBidWZmZXJzIG92ZXIgYW5kIG92ZXIgYWdhaW4sIGFuZCB3ZSBrZWVwIHRoZW0gYXJvdW5kLiAqLworCisJRE1BX0Rlc2NyaXB0b3JSaW5nX3QgcmluZzsJLyogUmluZyBvZiBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQgZm9yIHRoaXMgZGV2aWNlICovCisKKwkvKiBXZSBzdGFzaCBhd2F5IHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIHByZXZpb3VzIHRyYW5zZmVyLiBJZiBiYWNrLXRvLWJhY2sgKi8KKwkvKiB0cmFuc2ZlcnMgYXJlIHBlcmZvcm1lZCBmcm9tIHRoZSBzYW1lIGJ1ZmZlciwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGtlZXAgcmUtaW5pdGlhbGl6aW5nICovCisJLyogdGhlIGRlc2NyaXB0b3IgYnVmZmVycy4gKi8KKworCXVpbnQzMl90IHByZXZOdW1CeXRlczsKKwlkbWFfYWRkcl90IHByZXZTcmNEYXRhOworCWRtYV9hZGRyX3QgcHJldkRzdERhdGE7CisKK30gRE1BX0RldmljZUF0dHJpYnV0ZV90OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIERNQV9DaGFubmVsX3QsIERNQV9Db250cm9sbGVyX3QsIGFuZCBETUFfU3RhdGVfdCBhcmUgcmVhbGx5IGludGVybmFsCisqICAgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBkb24ndCBiZWxvbmcgaW4gdGhpcyBoZWFkZXIgZmlsZSwgYnV0IGFyZSBpbmNsdWRlZAorKiAgIG1lcmVseSBmb3IgZGlzY3Vzc2lvbi4KKyoKKyogICBCeSB0aGUgdGltZSB0aGlzIGlzIGltcGxlbWVudGVkLCB0aGVzZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgbW92ZWQgb3V0IGludG8KKyogICB0aGUgYXBwcm9wcmlhdGUgQyBzb3VyY2UgZmlsZSBpbnN0ZWFkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgVGhlIERNQV9DaGFubmVsX3QgY29udGFpbnMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBETUEgY2hhbm5lbC4gU29tZQorKiAgIG9mIHRoZSBjaGFubmVscyBhcmUgZGVkaWNhdGVkLiBOb24tZGVkaWNhdGVkIGNoYW5uZWxzIGFyZSBzaGFyZWQKKyogICBhbW9uZ3N0IHRoZSBvdGhlciBkZXZpY2VzLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRE1BX0NIQU5ORUxfRkxBR19JTl9VU0UgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIERNQV9DSEFOTkVMX0ZMQUdfSVNfREVESUNBVEVEICAgMHgwMDAwMDAwMgorI2RlZmluZSBETUFfQ0hBTk5FTF9GTEFHX05PX0lTUiAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRE1BX0NIQU5ORUxfRkxBR19MQVJHRV9GSUZPICAgICAweDAwMDAwMDA4CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50MzJfdCBmbGFnczsJCS8qIGJpdG1hc2sgb2YgRE1BX0NIQU5ORUxfRkxBR194eHggY29uc3RhbnRzICovCisJRE1BX0RldmljZV90IGRldlR5cGU7CS8qIERldmljZSB0aGlzIGNoYW5uZWwgaXMgY3VycmVudGx5IHJlc2VydmVkIGZvciAqLworCURNQV9EZXZpY2VfdCBsYXN0RGV2VHlwZTsJLyogRGV2aWNlIHR5cGUgdGhhdCB1c2VkIHRoaXMgcHJldmlvdXNseSAqLworCWNoYXIgbmFtZVsyMF07CQkvKiBOYW1lIHBhc3NlZCBvbnRvIHJlcXVlc3RfaXJxICovCisKKyNpZiAoRE1BX0RFQlVHX1RSQUNLX1JFU0VSVkFUSU9OKQorCWNvbnN0IGNoYXIgKmZpbGVOYW1lOwkvKiBQbGFjZSB3aGVyZSBjaGFubmVsIHJlc2VydmF0aW9uIHRvb2sgcGxhY2UgKi8KKwlpbnQgbGluZU51bTsJCS8qIFBsYWNlIHdoZXJlIGNoYW5uZWwgcmVzZXJ2YXRpb24gdG9vayBwbGFjZSAqLworI2VuZGlmCisJZG1hY0h3X0hBTkRMRV90IGRtYWNId0hhbmRsZTsJLyogbG93IGxldmVsIGNoYW5uZWwgaGFuZGxlLiAqLworCit9IERNQV9DaGFubmVsX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgVGhlIERNQV9Db250cm9sbGVyX3QgY29udGFpbnMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBETUEgY29udHJvbGxlci4KKyoKKyogICBUaGUgZnJlZUNoYW5uZWxRIGlzIHN0b3JlZCBpbiB0aGUgY29udHJvbGxlciBkYXRhIHN0cnVjdHVyZSByYXRoZXIgdGhhbgorKiAgIHRoZSBjaGFubmVsIGRhdGEgc3RydWN0dXJlIHNpbmNlIHNldmVyYWwgb2YgdGhlIGRldmljZXMgYXJlIGFjY2Vzc2libGUKKyogICBmcm9tIG11bHRpcGxlIGNvbnRyb2xsZXJzLCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIGtub3cgd2hpY2ggY29udHJvbGxlcgorKiAgIHdpbGwgYmVjb21lIGF2YWlsYWJsZSBmaXJzdC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCB7CisJRE1BX0NoYW5uZWxfdCBjaGFubmVsW0RNQV9OVU1fQ0hBTk5FTFNdOworCit9IERNQV9Db250cm9sbGVyX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgVGhlIERNQV9HbG9iYWxfdCBjb250YWlucyBhbGwgb2YgdGhlIGdsb2JhbCBzdGF0ZSBpbmZvcm1hdGlvbiB1c2VkIGJ5CisqICAgdGhlIERNQSBjb2RlLgorKgorKiAgIENhbGxlcnMgd2hpY2ggbmVlZCB0byBhbGxvY2F0ZSBhIHNoYXJlZCBjaGFubmVsIHdpbGwgYmUgcXVldWVkIHVwCisqICAgb24gdGhlIGZyZWVDaGFubmVsUSB1bnRpbCBhIGNoYW5uZWwgYmVjb21lcyBhdmFpbGFibGUuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsJLyogYWNxdWlyZWQgd2hlbiBtYW5pcHVsYXRpbmcgdGFibGUgZW50cmllcyAqLworCXdhaXRfcXVldWVfaGVhZF90IGZyZWVDaGFubmVsUTsKKworCURNQV9Db250cm9sbGVyX3QgY29udHJvbGxlcltETUFfTlVNX0NPTlRST0xMRVJTXTsKKworfSBETUFfR2xvYmFsX3Q7CisKKy8qIC0tLS0gVmFyaWFibGUgRXh0ZXJucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2V4dGVybiBETUFfRGV2aWNlQXR0cmlidXRlX3QgRE1BX2dEZXZpY2VBdHRyaWJ1dGVbRE1BX05VTV9ERVZJQ0VfRU5UUklFU107CisKKy8qIC0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhbGl6ZXMgdGhlIERNQSBtb2R1bGUuCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIC0gU3VjY2VzcworKiAgICAgICA8IDAgICAgIC0gRXJyb3IKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9pbml0KHZvaWQpOworCisjaWYgKERNQV9ERUJVR19UUkFDS19SRVNFUlZBVElPTikKK0RNQV9IYW5kbGVfdCBkbWFfcmVxdWVzdF9jaGFubmVsX2RiZyhETUFfRGV2aWNlX3QgZGV2LCBjb25zdCBjaGFyICpmaWxlTmFtZSwKKwkJCQkgICAgIGludCBsaW5lTnVtKTsKKyNkZWZpbmUgZG1hX3JlcXVlc3RfY2hhbm5lbChkZXYpICBkbWFfcmVxdWVzdF9jaGFubmVsX2RiZyhkZXYsIF9fRklMRV9fLCBfX0xJTkVfXykKKyNlbHNlCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgUmVzZXJ2ZXMgYSBjaGFubmVsIGZvciB1c2Ugd2l0aCBAYSBkZXYuIElmIHRoZSBkZXZpY2UgaXMgc2V0dXAgdG8gdXNlCisqICAgYSBzaGFyZWQgY2hhbm5lbCwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgYSBmcmVlIGNoYW5uZWwKKyogICBiZWNvbWVzIGF2YWlsYWJsZS4KKyoKKyogICBAcmV0dXJuCisqICAgICAgID49IDAgICAgLSBBIHZhbGlkIERNQSBIYW5kbGUuCisqICAgICAgIC1FQlVTWSAgLSBEZXZpY2UgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQuCisqICAgICAgIC1FTk9ERVYgLSBEZXZpY2UgaGFuZGVkIGluIGlzIGludmFsaWQuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0RNQV9IYW5kbGVfdCBkbWFfcmVxdWVzdF9jaGFubmVsKERNQV9EZXZpY2VfdCBkZXYJLyogRGV2aWNlIHRvIHVzZSB3aXRoIHRoZSBhbGxvY2F0ZWQgY2hhbm5lbC4gKi8KKyAgICApOworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgRnJlZXMgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBETUEgSGFuZGxlLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgIDAgICAgICAtIERNQSBIYW5kbGUgd2FzIHJlbGVhc2VkIHN1Y2Nlc3NmdWxseS4KKyogICAgICAgLUVJTlZBTCAtIEludmFsaWQgRE1BIGhhbmRsZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2ZyZWVfY2hhbm5lbChETUFfSGFuZGxlX3QgY2hhbm5lbAkvKiBETUEgaGFuZGxlLiAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIGRldmljZSBoYXMgYmVlbiBjb25maWd1cmVkIGFzIHVzaW5nIGEgc2hhcmVkCisqICAgY2hhbm5lbC4KKyoKKyogICBAcmV0dXJuIGJvb2xlYW4KKyogICAgICAgMCAgICAgICAgICAgRGV2aWNlIHVzZXMgYSBkZWRpY2F0ZWQgY2hhbm5lbAorKiAgICAgICBub24temVybyAgICBEZXZpY2UgdXNlcyBhIHNoYXJlZCBjaGFubmVsCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfZGV2aWNlX2lzX2NoYW5uZWxfc2hhcmVkKERNQV9EZXZpY2VfdCBkZXYJLyogRGV2aWNlIHRvIGNoZWNrLiAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgQWxsb2NhdGVzIG1lbW9yeSB0byBob2xkIGEgZGVzY3JpcHRvciByaW5nLiBUaGUgZGVzY3JpcHRvciByaW5nIHRoZW4KKyogICBuZWVkcyB0byBiZSBwb3B1bGF0ZWQgYnkgbWFraW5nIG9uZSBvciBtb3JlIGNhbGxzIHRvCisqICAgZG5hX2FkZF9kZXNjcmlwdG9ycy4KKyoKKyogICBUaGUgcmV0dXJuZWQgZGVzY3JpcHRvciByaW5nIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbml0aWFsaXplZC4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgICAgIERlc2NyaXB0b3IgcmluZyB3YXMgYWxsb2NhdGVkIHN1Y2Nlc3NmdWxseQorKiAgICAgICAtRU5PTUVNICAgICBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZGVzaXJlZCBudW1iZXIgb2YgZGVzY3JpcHRvcnMuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfYWxsb2NfZGVzY3JpcHRvcl9yaW5nKERNQV9EZXNjcmlwdG9yUmluZ190ICpyaW5nLAkvKiBEZXNjcmlwdG9yIHJpbmcgdG8gcG9wdWxhdGUgKi8KKwkJCSAgICAgIGludCBudW1EZXNjcmlwdG9ycwkvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgdGhhdCBuZWVkIHRvIGJlIGFsbG9jYXRlZC4gKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIFJlbGVhc2VzIHRoZSBtZW1vcnkgd2hpY2ggd2FzIHByZXZpb3VzbHkgYWxsb2NhdGVkIGZvciBhIGRlc2NyaXB0b3IgcmluZy4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBkbWFfZnJlZV9kZXNjcmlwdG9yX3JpbmcoRE1BX0Rlc2NyaXB0b3JSaW5nX3QgKnJpbmcJLyogRGVzY3JpcHRvciB0byByZWxlYXNlICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBJbml0aWFsaXplcyBhIGRlc2NyaXB0b3IgcmluZywgc28gdGhhdCBkZXNjcmlwdG9ycyBjYW4gYmUgYWRkZWQgdG8gaXQuCisqICAgT25jZSBhIGRlc2NyaXB0b3IgcmluZyBoYXMgYmVlbiBhbGxvY2F0ZWQsIGl0IG1heSBiZSByZWluaXRpYWxpemVkIGZvcgorKiAgIHVzZSB3aXRoIGFkZGl0aW9uYWwvZGlmZmVyZW50IHJlZ2lvbnMgb2YgbWVtb3J5LgorKgorKiAgIE5vdGUgdGhhdCBpZiA3IGRlc2NyaXB0b3JzIGFyZSBhbGxvY2F0ZWQsIGl0J3MgcGVyZmVjdGx5IGFjY2VwdGFibGUgdG8KKyogICBpbml0aWFsaXplIHRoZSByaW5nIHdpdGggYSBzbWFsbGVyIG51bWJlciBvZiBkZXNjcmlwdG9ycy4gVGhlIGFtb3VudAorKiAgIG9mIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBkZXNjcmlwdG9yIHJpbmcgd2lsbCBub3QgYmUgcmVkdWNlZCwgYW5kCisqICAgdGhlIGRlc2NyaXB0b3IgcmluZyBtYXkgYmUgcmVpbml0aWFsaXplZCBsYXRlcgorKgorKiAgIEByZXR1cm4KKyogICAgICAgMCAgICAgICAgICAgRGVzY3JpcHRvciByaW5nIHdhcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkKKyogICAgICAgLUVOT01FTSAgICAgVGhlIGRlc2NyaXB0b3Igd2hpY2ggd2FzIHBhc3NlZCBpbiBoYXMgaW5zdWZmaWNpZW50IHNwYWNlCisqICAgICAgICAgICAgICAgICAgIHRvIGhvbGQgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIGRlc2NyaXB0b3JzLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2luaXRfZGVzY3JpcHRvcl9yaW5nKERNQV9EZXNjcmlwdG9yUmluZ190ICpyaW5nLAkvKiBEZXNjcmlwdG9yIHJpbmcgdG8gaW5pdGlhbGl6ZSAqLworCQkJICAgICBpbnQgbnVtRGVzY3JpcHRvcnMJLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIHRvIGluaXRpYWxpemUuICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBEZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgd2hpY2ggd291bGQgYmUgcmVxdWlyZWQgZm9yIGEKKyogICB0cmFuc2ZlciBvZiB0aGUgaW5kaWNhdGVkIG1lbW9yeSByZWdpb24uCisqCisqICAgVGhpcyBmdW5jdGlvbiBhbHNvIG5lZWRzIHRvIGtub3cgd2hpY2ggRE1BIGRldmljZSB0aGlzIHRyYW5zZmVyIHdpbGwKKyogICBiZSBkZXN0aW5lZCBmb3IsIHNvIHRoYXQgdGhlIGFwcHJvcHJpYXRlIERNQSBjb25maWd1cmF0aW9uIGNhbiBiZSByZXRyaWV2ZWQuCisqICAgRE1BIHBhcmFtZXRlcnMgc3VjaCBhcyB0cmFuc2ZlciB3aWR0aCwgYW5kIHdoZXRoZXIgdGhpcyBpcyBhIG1lbW9yeS10by1tZW1vcnkKKyogICBvciBtZW1vcnktdG8tcGVyaXBoZXJhbCwgZXRjIGNhbiBhbGwgYWZmZWN0IHRoZSBhY3R1YWwgbnVtYmVyIG9mIGRlc2NyaXB0b3JzCisqICAgcmVxdWlyZWQuCisqCisqICAgQHJldHVybgorKiAgICAgICA+IDAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBkZXNjcmlwdG9ycyByZXF1aXJlZCBmb3IgdGhlIGluZGljYXRlZCB0cmFuc2ZlcgorKiAgICAgICAtRUlOVkFMIEludmFsaWQgZGV2aWNlIHR5cGUgZm9yIHRoaXMga2luZCBvZiB0cmFuc2ZlcgorKiAgICAgICAgICAgICAgIChpLmUuIHRoZSBkZXZpY2UgaXMgX01FTV9UT19ERVYgYW5kIG5vdCBfREVWX1RPX01FTSkKKyogICAgICAgLUVOT01FTSBNZW1vcnkgZXhoYXVzdGVkCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfY2FsY3VsYXRlX2Rlc2NyaXB0b3JfY291bnQoRE1BX0RldmljZV90IGRldmljZSwJLyogRE1BIERldmljZSB0aGF0IHRoaXMgd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggKi8KKwkJCQkgICBkbWFfYWRkcl90IHNyY0RhdGEsCS8qIFBsYWNlIHRvIGdldCBkYXRhIHRvIHdyaXRlIHRvIGRldmljZSAqLworCQkJCSAgIGRtYV9hZGRyX3QgZHN0RGF0YSwJLyogUG9pbnRlciB0byBkZXZpY2UgZGF0YSBhZGRyZXNzICovCisJCQkJICAgc2l6ZV90IG51bUJ5dGVzCS8qIE51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciB0byB0aGUgZGV2aWNlICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBBZGRzIGEgcmVnaW9uIG9mIG1lbW9yeSB0byB0aGUgZGVzY3JpcHRvciByaW5nLiBOb3RlIHRoYXQgaXQgbWF5IHRha2UKKyogICBtdWx0aXBsZSBkZXNjcmlwdG9ycyBmb3IgZWFjaCByZWdpb24gb2YgbWVtb3J5LiBJdCBpcyB0aGUgY2FsbGVycworKiAgIHJlc3BvbnNpYmlsaXR5IHRvIGFsbG9jYXRlIGEgc3VmZmljaWVudGx5IGxhcmdlIGRlc2NyaXB0b3IgcmluZy4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgRGVzY3JpcHRvcnMgd2VyZSBhZGRlZCBzdWNjZXNzZnVsbHkKKyogICAgICAgLUVJTlZBTCBJbnZhbGlkIGRldmljZSB0eXBlIGZvciB0aGlzIGtpbmQgb2YgdHJhbnNmZXIKKyogICAgICAgICAgICAgICAoaS5lLiB0aGUgZGV2aWNlIGlzIF9NRU1fVE9fREVWIGFuZCBub3QgX0RFVl9UT19NRU0pCisqICAgICAgIC1FTk9NRU0gTWVtb3J5IGV4aGF1c3RlZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2FkZF9kZXNjcmlwdG9ycyhETUFfRGVzY3JpcHRvclJpbmdfdCAqcmluZywJLyogRGVzY3JpcHRvciByaW5nIHRvIGFkZCBkZXNjcmlwdG9ycyB0byAqLworCQkJRE1BX0RldmljZV90IGRldmljZSwJLyogRE1BIERldmljZSB0aGF0IGRlc2NyaXB0b3JzIGFyZSBmb3IgKi8KKwkJCWRtYV9hZGRyX3Qgc3JjRGF0YSwJLyogUGxhY2UgdG8gZ2V0IGRhdGEgKG1lbW9yeSBvciBkZXZpY2UpICovCisJCQlkbWFfYWRkcl90IGRzdERhdGEsCS8qIFBsYWNlIHRvIHB1dCBkYXRhIChtZW1vcnkgb3IgZGV2aWNlKSAqLworCQkJc2l6ZV90IG51bUJ5dGVzCS8qIE51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciB0byB0aGUgZGV2aWNlICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBTZXRzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXNzb2NpYXRlZCB3aXRoIGEgZGV2aWNlLgorKgorKiAgIE9uY2Ugc2V0LCB0aGUgZGVzY3JpcHRvciByaW5nIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UsIGV2ZW4KKyogICBhY3Jvc3MgY2hhbm5lbCByZXF1ZXN0L2ZyZWUgY2FsbHMuIFBhc3NpbmcgaW4gYSBOVUxMIGRlc2NyaXB0b3IgcmluZworKiAgIHdpbGwgcmVsZWFzZSBhbnkgZGVzY3JpcHRvciByaW5nIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS4KKyoKKyogICBOb3RlOiBJZiB5b3UgY2FsbCBkbWFfdHJhbnNmZXIsIG9yIG9uZSBvZiB0aGUgb3RoZXIgZG1hX2FsbG9jXyBmdW5jdGlvbnMKKyogICAgICAgICB0aGUgZGVzY3JpcHRvciByaW5nIG1heSBiZSByZWxlYXNlZCBhbmQgcmVhbGxvY2F0ZWQuCisqCisqICAgTm90ZTogVGhpcyBmdW5jdGlvbiB3aWxsIHJlbGVhc2UgdGhlIGRlc2NyaXB0b3IgbWVtb3J5IGZvciBhbnkgY3VycmVudAorKiAgICAgICAgIGRlc2NyaXB0b3IgcmluZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfc2V0X2RldmljZV9kZXNjcmlwdG9yX3JpbmcoRE1BX0RldmljZV90IGRldmljZSwJLyogRGV2aWNlIHRvIHVwZGF0ZSB0aGUgZGVzY3JpcHRvciByaW5nIGZvci4gKi8KKwkJCQkgICBETUFfRGVzY3JpcHRvclJpbmdfdCAqcmluZwkvKiBEZXNjcmlwdG9yIHJpbmcgdG8gYWRkIGRlc2NyaXB0b3JzIHRvICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhc3NvY2lhdGVkIHdpdGggYSBkZXZpY2UuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfZ2V0X2RldmljZV9kZXNjcmlwdG9yX3JpbmcoRE1BX0RldmljZV90IGRldmljZSwJLyogRGV2aWNlIHRvIHJldHJpZXZlIHRoZSBkZXNjcmlwdG9yIHJpbmcgZm9yLiAqLworCQkJCSAgIERNQV9EZXNjcmlwdG9yUmluZ190ICpyaW5nCS8qIFBsYWNlIHRvIHN0b3JlIHJldHJpZXZlZCByaW5nICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBBbGxvY2F0ZXMgYnVmZmVycyBmb3IgdGhlIGRlc2NyaXB0b3JzLiBUaGlzIGlzIG5vcm1hbGx5IGRvbmUgYXV0b21hdGljYWxseQorKiAgIGJ1dCBuZWVkcyB0byBiZSBkb25lIGV4cGxpY2l0bHkgd2hlbiBpbml0aWF0aW5nIGEgZG1hIGZyb20gaW50ZXJydXB0CisqICAgY29udGV4dC4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgRGVzY3JpcHRvcnMgd2VyZSBhbGxvY2F0ZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FSU5WQUwgSW52YWxpZCBkZXZpY2UgdHlwZSBmb3IgdGhpcyBraW5kIG9mIHRyYW5zZmVyCisqICAgICAgICAgICAgICAgKGkuZS4gdGhlIGRldmljZSBpcyBfTUVNX1RPX0RFViBhbmQgbm90IF9ERVZfVE9fTUVNKQorKiAgICAgICAtRU5PTUVNIE1lbW9yeSBleGhhdXN0ZWQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9hbGxvY19kZXNjcmlwdG9ycyhETUFfSGFuZGxlX3QgaGFuZGxlLAkvKiBETUEgSGFuZGxlICovCisJCQkgIGRtYWNId19UUkFOU0ZFUl9UWVBFX2UgdHJhbnNmZXJUeXBlLAkvKiBUeXBlIG9mIHRyYW5zZmVyIGJlaW5nIHBlcmZvcm1lZCAqLworCQkJICBkbWFfYWRkcl90IHNyY0RhdGEsCS8qIFBsYWNlIHRvIGdldCBkYXRhIHRvIHdyaXRlIHRvIGRldmljZSAqLworCQkJICBkbWFfYWRkcl90IGRzdERhdGEsCS8qIFBvaW50ZXIgdG8gZGV2aWNlIGRhdGEgYWRkcmVzcyAqLworCQkJICBzaXplX3QgbnVtQnl0ZXMJLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIHRvIHRoZSBkZXZpY2UgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIEFsbG9jYXRlcyBhbmQgc2V0cyB1cCBkZXNjcmlwdG9ycyBmb3IgYSBkb3VibGUgYnVmZmVyZWQgY2lyY3VsYXIgYnVmZmVyLgorKgorKiAgIFRoaXMgaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIHRoaW5ncyBsaWtlIHRoZSBpbmdyZXNzIHNhbXBsZXMKKyogICBmcm9tIGEgbWljcm9waG9uZS4KKyoKKyogICBAcmV0dXJuCisqICAgICAgID4gMCAgICAgTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGFjdHVhbGx5IGFsbG9jYXRlZC4KKyogICAgICAgLUVJTlZBTCBJbnZhbGlkIGRldmljZSB0eXBlIGZvciB0aGlzIGtpbmQgb2YgdHJhbnNmZXIKKyogICAgICAgICAgICAgICAoaS5lLiB0aGUgZGV2aWNlIGlzIF9NRU1fVE9fREVWIGFuZCBub3QgX0RFVl9UT19NRU0pCisqICAgICAgIC1FTk9NRU0gTWVtb3J5IGV4aGF1c3RlZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2FsbG9jX2RvdWJsZV9kc3RfZGVzY3JpcHRvcnMoRE1BX0hhbmRsZV90IGhhbmRsZSwJLyogRE1BIEhhbmRsZSAqLworCQkJCSAgICAgZG1hX2FkZHJfdCBzcmNEYXRhLAkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHNvdXJjZSBkYXRhICovCisJCQkJICAgICBkbWFfYWRkcl90IGRzdERhdGExLAkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIGZpcnN0IGRlc3RpbmF0aW9uIGJ1ZmZlciAqLworCQkJCSAgICAgZG1hX2FkZHJfdCBkc3REYXRhMiwJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBzZWNvbmQgZGVzdGluYXRpb24gYnVmZmVyICovCisJCQkJICAgICBzaXplX3QgbnVtQnl0ZXMJLyogTnVtYmVyIG9mIGJ5dGVzIGluIGVhY2ggZGVzdGluYXRpb24gYnVmZmVyICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBJbml0aWFsaXplcyBhIERNQV9NZW1NYXBfdCBkYXRhIHN0cnVjdHVyZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2luaXRfbWVtX21hcChETUFfTWVtTWFwX3QgKm1lbU1hcAkvKiBTdG9yZXMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcCAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgUmVsZWFzZXMgYW55IG1lbW9yeSBjdXJyZW50bHkgYmVpbmcgaGVsZCBieSBhIG1lbW9yeSBtYXBwaW5nIHN0cnVjdHVyZS4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV90ZXJtX21lbV9tYXAoRE1BX01lbU1hcF90ICptZW1NYXAJLyogU3RvcmVzIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXAgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIExvb2tzIGF0IGEgbWVtb3J5IGFkZHJlc3MgYW5kIGNhdGVnb3JpemVzIGl0LgorKgorKiAgIEByZXR1cm4gT25lIG9mIHRoZSB2YWx1ZXMgZnJvbSB0aGUgRE1BX01lbVR5cGVfdCBlbnVtZXJhdGlvbi4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworRE1BX01lbVR5cGVfdCBkbWFfbWVtX3R5cGUodm9pZCAqYWRkcik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgU2V0cyB0aGUgcHJvY2VzcyAoYWthIHVzZXJUYXNrKSBhc3NvY2lhdGVkIHdpdGggYSBtZW0gbWFwLiBUaGlzIGlzCisqICAgcmVxdWlyZWQgaWYgdXNlci1tb2RlIHNlZ21lbnRzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hcHBpbmcuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfbWVtX21hcF9zZXRfdXNlcl90YXNrKERNQV9NZW1NYXBfdCAqbWVtTWFwLAorCQkJCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwltZW1NYXAtPnVzZXJUYXNrID0gdGFzazsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBMb29rcyBhdCBhIG1lbW9yeSBhZGRyZXNzIGFuZCBkZXRlcm1pbmVzIGlmIHdlIHN1cHBvcnQgRE1BJ2luZyB0by9mcm9tCisqICAgdGhhdCB0eXBlIG9mIG1lbW9yeS4KKyoKKyogICBAcmV0dXJuIGJvb2xlYW4gLQorKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPSAwIG1lYW5zIGRtYSBzdXBwb3J0ZWQKKyogICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gMCBtZWFucyBkbWEgbm90IHN1cHBvcnRlZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21lbV9zdXBwb3J0c19kbWEodm9pZCAqYWRkcik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhbGl6ZXMgYSBtZW1vcnkgbWFwIGZvciB1c2UuIFNpbmNlIHRoaXMgZnVuY3Rpb24gYWNxdWlyZXMgYQorKiAgIHNlbXBhcGhvcmUgd2l0aGluIHRoZSBtZW1vcnkgbWFwLCBpdCBpcyBWRVJZIGltcG9ydGFudCB0aGF0IGRtYV91bm1hcAorKiAgIGJlIGNhbGxlZCB3aGVuIHlvdSdyZSBmaW5pc2hlZCB1c2luZyB0aGUgbWFwLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21hcF9zdGFydChETUFfTWVtTWFwX3QgKm1lbU1hcCwJLyogU3RvcmVzIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXAgKi8KKwkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIJLyogRGlyZWN0aW9uIHRoYXQgdGhlIG1hcHBpbmcgd2lsbCBiZSBnb2luZyAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgQWRkcyBhIHNlZ21lbnQgb2YgbWVtb3J5IHRvIGEgbWVtb3J5IG1hcC4KKyoKKyogICBAcmV0dXJuICAgICAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21hcF9hZGRfcmVnaW9uKERNQV9NZW1NYXBfdCAqbWVtTWFwLAkvKiBTdG9yZXMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcCAqLworCQkgICAgICAgdm9pZCAqbWVtLAkvKiBWaXJ0dWFsIGFkZHJlc3MgdGhhdCB3ZSB3YW50IHRvIGdldCBhIG1hcCBvZiAqLworCQkgICAgICAgc2l6ZV90IG51bUJ5dGVzCS8qIE51bWJlciBvZiBieXRlcyBiZWluZyBtYXBwZWQgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIENyZWF0ZXMgYSBkZXNjcmlwdG9yIHJpbmcgZnJvbSBhIG1lbW9yeSBtYXBwaW5nLgorKgorKiAgIEByZXR1cm4gMCBvbiBzdWNlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21hcF9jcmVhdGVfZGVzY3JpcHRvcl9yaW5nKERNQV9EZXZpY2VfdCBkZXYsCS8qIERNQSBkZXZpY2UgKHdoZXJlIHRoZSByaW5nIGlzIHN0b3JlZCkgKi8KKwkJCQkgICBETUFfTWVtTWFwX3QgKm1lbU1hcCwJLyogTWVtb3J5IG1hcCB0aGF0IHdpbGwgYmUgdXNlZCAqLworCQkJCSAgIGRtYV9hZGRyX3QgZGV2UGh5c0FkZHIJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBkZXZpY2UgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIE1hcHMgaW4gYSBtZW1vcnkgcmVnaW9uIHN1Y2ggdGhhdCBpdCBjYW4gYmUgdXNlZCBmb3IgcGVyZm9ybWluZyBhIERNQS4KKyoKKyogICBAcmV0dXJuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfbWFwX21lbShETUFfTWVtTWFwX3QgKm1lbU1hcCwJLyogU3RvcmVzIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXAgKi8KKwkJdm9pZCAqYWRkciwJLyogVmlydHVhbCBhZGRyZXNzIHRoYXQgd2Ugd2FudCB0byBnZXQgYSBtYXAgb2YgKi8KKwkJc2l6ZV90IGNvdW50LAkvKiBOdW1iZXIgb2YgYnl0ZXMgYmVpbmcgbWFwcGVkICovCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcgkvKiBEaXJlY3Rpb24gdGhhdCB0aGUgbWFwcGluZyB3aWxsIGJlIGdvaW5nICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBNYXBzIGluIGEgbWVtb3J5IHJlZ2lvbiBzdWNoIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgYSBETUEuCisqCisqICAgQHJldHVybgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX3VubWFwKERNQV9NZW1NYXBfdCAqbWVtTWFwLAkvKiBTdG9yZXMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcCAqLworCSAgICAgIGludCBkaXJ0aWVkCS8qIG5vbi16ZXJvIGlmIGFueSBvZiB0aGUgcGFnZXMgd2VyZSBtb2RpZmllZCAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhdGVzIGEgdHJhbnNmZXIgd2hlbiB0aGUgZGVzY3JpcHRvcnMgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0dXAuCisqCisqICAgVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSwgYW5kIG5vcm1hbGx5LCB0aGUgZG1hX3RyYW5zZmVyX3h4eCBmdW5jdGlvbnMgc2hvdWxkCisqICAgYmUgdXNlZC4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgVHJhbnNmZXIgd2FzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FTk9ERVYgSW52YWxpZCBoYW5kbGUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9zdGFydF90cmFuc2ZlcihETUFfSGFuZGxlX3QgaGFuZGxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBTdG9wcyBhIHByZXZpb3VzbHkgc3RhcnRlZCBETUEgdHJhbnNmZXIuCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIFRyYW5zZmVyIHdhcyBzdG9wcGVkIHN1Y2Nlc3NmdWxseQorKiAgICAgICAtRU5PREVWIEludmFsaWQgaGFuZGxlCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfc3RvcF90cmFuc2ZlcihETUFfSGFuZGxlX3QgaGFuZGxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBXYWl0cyBmb3IgYSBETUEgdG8gY29tcGxldGUgYnkgcG9sbGluZy4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGludGVuZGVkCisqICAgdG8gYmUgdXNlZCBmb3IgdGVzdGluZy4gSW50ZXJydXB0cyBzaG91bGQgYmUgdXNlZCBmb3IgbW9zdCBETUEgb3BlcmF0aW9ucy4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV93YWl0X3RyYW5zZmVyX2RvbmUoRE1BX0hhbmRsZV90IGhhbmRsZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhdGVzIGEgRE1BIHRyYW5zZmVyCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIFRyYW5zZmVyIHdhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseQorKiAgICAgICAtRUlOVkFMIEludmFsaWQgZGV2aWNlIHR5cGUgZm9yIHRoaXMga2luZCBvZiB0cmFuc2ZlcgorKiAgICAgICAgICAgICAgIChpLmUuIHRoZSBkZXZpY2UgaXMgX01FTV9UT19ERVYgYW5kIG5vdCBfREVWX1RPX01FTSkKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV90cmFuc2ZlcihETUFfSGFuZGxlX3QgaGFuZGxlLAkvKiBETUEgSGFuZGxlICovCisJCSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9lIHRyYW5zZmVyVHlwZSwJLyogVHlwZSBvZiB0cmFuc2ZlciBiZWluZyBwZXJmb3JtZWQgKi8KKwkJIGRtYV9hZGRyX3Qgc3JjRGF0YSwJLyogUGxhY2UgdG8gZ2V0IGRhdGEgdG8gd3JpdGUgdG8gZGV2aWNlICovCisJCSBkbWFfYWRkcl90IGRzdERhdGEsCS8qIFBvaW50ZXIgdG8gZGV2aWNlIGRhdGEgYWRkcmVzcyAqLworCQkgc2l6ZV90IG51bUJ5dGVzCS8qIE51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciB0byB0aGUgZGV2aWNlICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBJbml0aWF0ZXMgYSB0cmFuc2ZlciBmcm9tIG1lbW9yeSB0byBhIGRldmljZS4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgVHJhbnNmZXIgd2FzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FSU5WQUwgSW52YWxpZCBkZXZpY2UgdHlwZSBmb3IgdGhpcyBraW5kIG9mIHRyYW5zZmVyCisqICAgICAgICAgICAgICAgKGkuZS4gdGhlIGRldmljZSBpcyBfREVWX1RPX01FTSBhbmQgbm90IF9NRU1fVE9fREVWKQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIGludCBkbWFfdHJhbnNmZXJfdG9fZGV2aWNlKERNQV9IYW5kbGVfdCBoYW5kbGUsCS8qIERNQSBIYW5kbGUgKi8KKwkJCQkJIGRtYV9hZGRyX3Qgc3JjRGF0YSwJLyogUGxhY2UgdG8gZ2V0IGRhdGEgdG8gd3JpdGUgdG8gZGV2aWNlIChwaHlzaWNhbCBhZGRyZXNzKSAqLworCQkJCQkgZG1hX2FkZHJfdCBkc3REYXRhLAkvKiBQb2ludGVyIHRvIGRldmljZSBkYXRhIGFkZHJlc3MgKHBoeXNpY2FsIGFkZHJlc3MpICovCisJCQkJCSBzaXplX3QgbnVtQnl0ZXMJLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIHRvIHRoZSBkZXZpY2UgKi8KKyAgICApIHsKKwlyZXR1cm4gZG1hX3RyYW5zZmVyKGhhbmRsZSwKKwkJCSAgICBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fUEVSSVBIRVJBTCwKKwkJCSAgICBzcmNEYXRhLCBkc3REYXRhLCBudW1CeXRlcyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhdGVzIGEgdHJhbnNmZXIgZnJvbSBhIGRldmljZSB0byBtZW1vcnkuCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIFRyYW5zZmVyIHdhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseQorKiAgICAgICAtRUlOVkFMIEludmFsaWQgZGV2aWNlIHR5cGUgZm9yIHRoaXMga2luZCBvZiB0cmFuc2ZlcgorKiAgICAgICAgICAgICAgIChpLmUuIHRoZSBkZXZpY2UgaXMgX01FTV9UT19ERVYgYW5kIG5vdCBfREVWX1RPX01FTSkKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGlubGluZSBpbnQgZG1hX3RyYW5zZmVyX2Zyb21fZGV2aWNlKERNQV9IYW5kbGVfdCBoYW5kbGUsCS8qIERNQSBIYW5kbGUgKi8KKwkJCQkJICAgZG1hX2FkZHJfdCBzcmNEYXRhLAkvKiBQb2ludGVyIHRvIHRoZSBkZXZpY2UgZGF0YSBhZGRyZXNzIChwaHlzaWNhbCBhZGRyZXNzKSAqLworCQkJCQkgICBkbWFfYWRkcl90IGRzdERhdGEsCS8qIFBsYWNlIHRvIHN0b3JlIGRhdGEgcmV0cmlldmVkIGZyb20gdGhlIGRldmljZSAocGh5c2ljYWwgYWRkcmVzcykgKi8KKwkJCQkJICAgc2l6ZV90IG51bUJ5dGVzCS8qIE51bWJlciBvZiBieXRlcyB0byByZXRyaWV2ZSBmcm9tIHRoZSBkZXZpY2UgKi8KKyAgICApIHsKKwlyZXR1cm4gZG1hX3RyYW5zZmVyKGhhbmRsZSwKKwkJCSAgICBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJCSAgICBzcmNEYXRhLCBkc3REYXRhLCBudW1CeXRlcyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhdGVzIGEgbWVtb3J5IHRvIG1lbW9yeSB0cmFuc2Zlci4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgVHJhbnNmZXIgd2FzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FSU5WQUwgSW52YWxpZCBkZXZpY2UgdHlwZSBmb3IgdGhpcyBraW5kIG9mIHRyYW5zZmVyCisqICAgICAgICAgICAgICAgKGkuZS4gdGhlIGRldmljZSB3YXNuJ3QgRE1BX0RFVklDRV9NRU1fVE9fTUVNKQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIGludCBkbWFfdHJhbnNmZXJfbWVtX3RvX21lbShETUFfSGFuZGxlX3QgaGFuZGxlLAkvKiBETUEgSGFuZGxlICovCisJCQkJCSAgZG1hX2FkZHJfdCBzcmNEYXRhLAkvKiBQbGFjZSB0byB0cmFuc2ZlciBkYXRhIGZyb20gKHBoeXNpY2FsIGFkZHJlc3MpICovCisJCQkJCSAgZG1hX2FkZHJfdCBkc3REYXRhLAkvKiBQbGFjZSB0byB0cmFuc2ZlciBkYXRhIHRvIChwaHlzaWNhbCBhZGRyZXNzKSAqLworCQkJCQkgIHNpemVfdCBudW1CeXRlcwkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgKi8KKyAgICApIHsKKwlyZXR1cm4gZG1hX3RyYW5zZmVyKGhhbmRsZSwKKwkJCSAgICBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fTUVNLAorCQkJICAgIHNyY0RhdGEsIGRzdERhdGEsIG51bUJ5dGVzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBTZXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSB0cmFuc2ZlciBjb21wbGV0ZXMuCisqICAgSWYgYSBOVUxMIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHNldCwgdGhlbiBubyBjYWxsYmFjayB3aWxsIG9jY3VyLgorKgorKiAgIEBub3RlICAgQGEgZGV2SGFuZGxlciB3aWxsIGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LgorKgorKiAgIEByZXR1cm4KKyogICAgICAgMCAgICAgICAtIFN1Y2Nlc3MKKyogICAgICAgLUVOT0RFViAtIERldmljZSBoYW5kZWQgaW4gaXMgaW52YWxpZC4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9zZXRfZGV2aWNlX2hhbmRsZXIoRE1BX0RldmljZV90IGRldiwJLyogRGV2aWNlIHRvIHNldCB0aGUgY2FsbGJhY2sgZm9yLiAqLworCQkJICAgRE1BX0RldmljZUhhbmRsZXJfdCBkZXZIYW5kbGVyLAkvKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIERNQSBjb21wbGV0ZXMgKi8KKwkJCSAgIHZvaWQgKnVzZXJEYXRhCS8qIFBvaW50ZXIgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gZGV2SGFuZGxlci4gKi8KKyAgICApOworCisjZW5kaWYKKworI2VuZGlmIC8qIEFTTV9BUk1fQVJDSF9CQ01SSU5HX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QzOTNjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDYgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgQkNNUmluZy1iYXNlZCBwbGF0Zm9ybXMKKyAqCisgKi8KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvbW1faW8uaD4KKworCQkubWFjcm8JZGlzYWJsZV9maXEKKwkJLmVuZG0KKworCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJCWxkcglcYmFzZSwgPShNTV9JT19CQVNFX0lOVEMwKQorCQlsZHIJXGlycXN0YXQsIFtcYmFzZSwgIzBdCQlAIGdldCBzdGF0dXMKKyAgICAgICAgICAgICAgICBsZHIgICAgIFxpcnFuciwgW1xiYXNlLCAjMHgxMF0gICAgICAgICAgQCBtYXNrIHdpdGggZW5hYmxlIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgYW5kcyAgICBcaXJxc3RhdCwgXGlycXN0YXQsIFxpcnFucgorCQltb3YJXGlycW5yLCAjSVJRX0lOVEMwX1NUQVJUCisJCWNtcAlcaXJxc3RhdCwgIzAKKwkJYm5lCTEwMDFmCisKKwkJbGRyCVxiYXNlLCA9KE1NX0lPX0JBU0VfSU5UQzEpCisJCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjMF0JCUAgZ2V0IHN0YXR1cworICAgICAgICAgICAgICAgIGxkciAgICAgXGlycW5yLCBbXGJhc2UsICMweDEwXSAgICAgICAgICBAIG1hc2sgd2l0aCBlbmFibGUgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICBhbmRzICAgIFxpcnFzdGF0LCBcaXJxc3RhdCwgXGlycW5yCisJCW1vdglcaXJxbnIsICNJUlFfSU5UQzFfU1RBUlQKKwkJY21wCVxpcnFzdGF0LCAjMAorCQlibmUJMTAwMWYKKworCQlsZHIJXGJhc2UsID0oTU1fSU9fQkFTRV9TSU5UQykKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMwXQkJQCBnZXQgc3RhdHVzCisgICAgICAgICAgICAgICAgbGRyICAgICBcaXJxbnIsIFtcYmFzZSwgIzB4MTBdICAgICAgICAgIEAgbWFzayB3aXRoIGVuYWJsZSByZWdpc3RlcgorICAgICAgICAgICAgICAgIGFuZHMgICAgXGlycXN0YXQsIFxpcnFzdGF0LCBcaXJxbnIKKwkJbW92CVxpcnFuciwgIzB4ZmZmZmZmZmYgICAgICAgICAgICAgQCBjb2RlIG1lYW5pbmcgbm8gaW50ZXJydXB0IGJpdHMgc2V0CisJCWNtcAlcaXJxc3RhdCwgIzAKKwkJYmVxCTEwMDJmCisKKwkJbW92CVxpcnFuciwgI0lSUV9TSU5UQ19TVEFSVCAgICAgICAgQCBzb21ldGhpbmcgaXMgc2V0LCBzbyBmaXh1cCByZXR1cm4gdmFsdWUKKworMTAwMToKKwkJbW92cwlcdG1wLCBcaXJxc3RhdCwgbHNsICMxNgorCQltb3ZuZQlcaXJxc3RhdCwgXHRtcAorCQlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzE2CisKKwkJbW92cwlcdG1wLCBcaXJxc3RhdCwgbHNsICM4CisJCW1vdm5lCVxpcnFzdGF0LCBcdG1wCisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjOAorCisJCW1vdnMJXHRtcCwgXGlycXN0YXQsIGxzbCAjNAorCQltb3ZuZQlcaXJxc3RhdCwgXHRtcAorCQlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzQKKworCQltb3ZzCVx0bXAsIFxpcnFzdGF0LCBsc2wgIzIKKwkJbW92bmUJXGlycXN0YXQsIFx0bXAKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICMyCisKKwkJbW92cwlcdG1wLCBcaXJxc3RhdCwgbHNsICMxCisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjMQorCQlvcnJzCVxiYXNlLCBcYmFzZSwgIzEKKworMTAwMjogICAgICAgICAgIEAgaXJxbnIgd2lsbCBiZSBzZXQgdG8gMHhmZmZmZmZmZiBpZiBubyBpcnEgYml0cyBhcmUgc2V0CisJCS5lbmRtCisKKwkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCQkuZW5kbQorCisJCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCQkuZW5kbQorCisJCS5tYWNybwlpcnFfcHJpb190YWJsZQorCQkuZW5kbQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3ZWIzNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMCwwICsxLDYwIEBACisvKgorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIG9mIHRoZSBCQ01SaW5nLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKworI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPG1hY2gvbWVtb3J5Lmg+CisjaW5jbHVkZSA8Y2ZnX2dsb2JhbC5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL21tX2lvLmg+CisKKy8qIEhhcmR3YXJlIGFkZHJlc3NlcyBvZiBtYWpvciBhcmVhcy4KKyAqICAqX1NUQVJUIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzCisgKiAgKl9TSVpFICBpcyB0aGUgc2l6ZSBvZiB0aGUgcmVnaW9uCisgKiAgKl9CQVNFICBpcyB0aGUgdmlydHVhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgUkFNX1NUQVJUICAgICAgICAgICAgICAgUEhZU19PRkZTRVQKKworI2RlZmluZSBSQU1fU0laRSAgICAgICAgICAgICAgICAoQ0ZHX0dMT0JBTF9SQU1fU0laRS1DRkdfR0xPQkFMX1JBTV9TSVpFX1JFU0VSVkVEKQorI2RlZmluZSBSQU1fQkFTRSAgICAgICAgICAgICAgICBQQUdFX09GRlNFVAorCisjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkxCisKKy8qIE1hY3JvcyB0byBtYWtlIG1hbmFnaW5nIHNwaW5sb2NrcyBhIGJpdCBtb3JlIGNvbnRyb2xsZWQgaW4gdGVybXMgb2YgbmFtaW5nLiAqLworLyogU2VlIHJlZ19ncGlvLmgsIHJlZ19pcnEuaCwgYXJjaC5jLCBncGlvLmMgZm9yIGV4YW1wbGUgdXNhZ2UuICovCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKQorI2RlZmluZSBIV19ERUNMQVJFX1NQSU5MT0NLKG5hbWUpICBERUZJTkVfU1BJTkxPQ0soYmNtcmluZ18jI25hbWUjI19yZWdfbG9jayk7CisjZGVmaW5lIEhXX0VYVEVSTl9TUElOTE9DSyhuYW1lKSAgIGV4dGVybiBzcGlubG9ja190IGJjbXJpbmdfIyNuYW1lIyNfcmVnX2xvY2s7CisjZGVmaW5lIEhXX0lSUV9TQVZFKG5hbWUsIHZhbCkgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZiY21yaW5nXyMjbmFtZSMjX3JlZ19sb2NrLCAodmFsKSkKKyNkZWZpbmUgSFdfSVJRX1JFU1RPUkUobmFtZSwgdmFsKSAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtcmluZ18jI25hbWUjI19yZWdfbG9jaywgKHZhbCkpCisjZWxzZQorI2RlZmluZSBIV19ERUNMQVJFX1NQSU5MT0NLKG5hbWUpCisjZGVmaW5lIEhXX0VYVEVSTl9TUElOTE9DSyhuYW1lKQorI2RlZmluZSBIV19JUlFfU0FWRShuYW1lLCB2YWwpICAgICB7KHZvaWQpKG5hbWUpOyAodm9pZCkodmFsKTsgfQorI2RlZmluZSBIV19JUlFfUkVTVE9SRShuYW1lLCB2YWwpICB7KHZvaWQpKG5hbWUpOyAodm9pZCkodmFsKTsgfQorI2VuZGlmCisKKyNpZm5kZWYgSFdfSU9fUEhZU19UT19WSVJUCisjZGVmaW5lIEhXX0lPX1BIWVNfVE9fVklSVCBNTV9JT19QSFlTX1RPX1ZJUlQKKyNlbmRpZgorI2RlZmluZSBIV19JT19WSVJUX1RPX1BIWVMgTU1fSU9fVklSVF9UT19QSFlTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYjBlZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKKworI2RlZmluZSBfX2lvKGEpICAgICAgICAgKCh2b2lkIF9faW9tZW0gKilIV19JT19QSFlTX1RPX1ZJUlQoYSkpCisKKy8qIERvIG5vdCBlbmFibGUgbWVtX3BjaSBmb3IgYSBiaWcgZW5kaWFuIGFybSBhcmNoaXRlY3R1cmUgb3IgdW5leHBlY3RlZCBieXRlc3dhcHMgd2lsbCAqLworLyogaGFwcGVuIGluIHJlYWR3L3dyaXRldyBldGMuICovCisKKyNkZWZpbmUgcmVhZGIoYykgICAgICAgIF9fcmF3X3JlYWRiKGMpCisjZGVmaW5lIHJlYWR3KGMpICAgICAgICBfX3Jhd19yZWFkdyhjKQorI2RlZmluZSByZWFkbChjKSAgICAgICAgX19yYXdfcmVhZGwoYykKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKSByZWFkYihhZGRyKQorI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpIHJlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikgcmVhZGwoYWRkcikKKworI2RlZmluZSByZWFkc2IocCwgZCwgbCkgICBfX3Jhd19yZWFkc2IocCwgZCwgbCkKKyNkZWZpbmUgcmVhZHN3KHAsIGQsIGwpICAgX19yYXdfcmVhZHN3KHAsIGQsIGwpCisjZGVmaW5lIHJlYWRzbChwLCBkLCBsKSAgIF9fcmF3X3JlYWRzbChwLCBkLCBsKQorCisjZGVmaW5lIHdyaXRlYih2LCBjKSAgICAgX19yYXdfd3JpdGViKHYsIGMpCisjZGVmaW5lIHdyaXRldyh2LCBjKSAgICAgX19yYXdfd3JpdGV3KHYsIGMpCisjZGVmaW5lIHdyaXRlbCh2LCBjKSAgICAgX19yYXdfd3JpdGVsKHYsIGMpCisKKyNkZWZpbmUgd3JpdGVzYihwLCBkLCBsKSAgX19yYXdfd3JpdGVzYihwLCBkLCBsKQorI2RlZmluZSB3cml0ZXN3KHAsIGQsIGwpICBfX3Jhd193cml0ZXN3KHAsIGQsIGwpCisjZGVmaW5lIHdyaXRlc2wocCwgZCwgbCkgIF9fcmF3X3dyaXRlc2wocCwgZCwgbCkKKworI2RlZmluZSBtZW1zZXRfaW8oYywgdiwgbCkgICAgX21lbXNldF9pbygoYyksICh2KSwgKGwpKQorI2RlZmluZSBtZW1jcHlfZnJvbWlvKGEsIGMsIGwpICAgIF9tZW1jcHlfZnJvbWlvKChhKSwgKGMpLCAobCkpCisjZGVmaW5lIG1lbWNweV90b2lvKGMsIGEsIGwpICBfbWVtY3B5X3RvaW8oKGMpLCAoYSksIChsKSkKKworI2RlZmluZSBldGhfaW9fY29weV9hbmRfc3VtKHMsIGMsIGwsIGIpIGV0aF9jb3B5X2FuZF9zdW0oKHMpLCAoYyksIChsKSwgKGIpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI3OWI4MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBCcm9hZGNvbQorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWYgIWRlZmluZWQoQVJDSF9CQ01SSU5HX0lSUVNfSCkKKyNkZWZpbmUgQVJDSF9CQ01SSU5HX0lSUVNfSAorCisvKiBJTlRDMCAtIGludGVycnVwdCBjb250cm9sbGVyIDAgKi8KKyNkZWZpbmUgSVJRX0lOVEMwX1NUQVJUICAgICAwCisjZGVmaW5lIElSUV9ETUEwQzAgICAgICAgICAgMAkvKiBETUEwIGNoYW5uZWwgMCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0RNQTBDMSAgICAgICAgICAxCS8qIERNQTAgY2hhbm5lbCAxIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1BMEMyICAgICAgICAgIDIJLyogRE1BMCBjaGFubmVsIDIgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9ETUEwQzMgICAgICAgICAgMwkvKiBETUEwIGNoYW5uZWwgMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0RNQTBDNCAgICAgICAgICA0CS8qIERNQTAgY2hhbm5lbCA0IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1BMEM1ICAgICAgICAgIDUJLyogRE1BMCBjaGFubmVsIDUgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9ETUEwQzYgICAgICAgICAgNgkvKiBETUEwIGNoYW5uZWwgNiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0RNQTBDNyAgICAgICAgICA3CS8qIERNQTAgY2hhbm5lbCA3IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1BMUMwICAgICAgICAgIDgJLyogRE1BMSBjaGFubmVsIDAgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9ETUExQzEgICAgICAgICAgOQkvKiBETUExIGNoYW5uZWwgMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0RNQTFDMiAgICAgICAgIDEwCS8qIERNQTEgY2hhbm5lbCAyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1BMUMzICAgICAgICAgMTEJLyogRE1BMSBjaGFubmVsIDMgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9ETUExQzQgICAgICAgICAxMgkvKiBETUExIGNoYW5uZWwgNCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0RNQTFDNSAgICAgICAgIDEzCS8qIERNQTEgY2hhbm5lbCA1IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1BMUM2ICAgICAgICAgMTQJLyogRE1BMSBjaGFubmVsIDYgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9ETUExQzcgICAgICAgICAxNQkvKiBETUExIGNoYW5uZWwgNyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1ZQTSAgICAgICAgICAgIDE2CS8qIFZvaWNlIHByb2Nlc3MgbW9kdWxlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfVVNCSEQyICAgICAgICAgMTcJLyogVVNCIGhvc3QyL2RldmljZTIgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9VU0JIMSAgICAgICAgICAxOAkvKiBVU0IxIGhvc3QgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9VU0JEICAgICAgICAgICAxOQkvKiBVU0IgZGV2aWNlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfU0RJT0gwICAgICAgICAgMjAJLyogU0RJTzAgaG9zdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NESU9IMSAgICAgICAgIDIxCS8qIFNESU8xIGhvc3QgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9USU1FUjAgICAgICAgICAyMgkvKiBUaW1lcjAgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9USU1FUjEgICAgICAgICAyMwkvKiBUaW1lcjEgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9USU1FUjIgICAgICAgICAyNAkvKiBUaW1lcjIgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9USU1FUjMgICAgICAgICAyNQkvKiBUaW1lcjMgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TUElIICAgICAgICAgICAyNgkvKiBTUEkgaG9zdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0VTVyAgICAgICAgICAgIDI3CS8qIEV0aGVybmV0IHN3aXRjaCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0FQTSAgICAgICAgICAgIDI4CS8qIEF1ZGlvIHByb2Nlc3MgbW9kdWxlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfR0UgICAgICAgICAgICAgMjkJLyogR3JhcGhpYyBlbmdpbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9DTENEICAgICAgICAgICAzMAkvKiBMQ0QgQ29udHJvbGxlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1BJRiAgICAgICAgICAgIDMxCS8qIFBlcmlwaGVyYWwgaW50ZXJmYWNlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfSU5UQzBfRU5EICAgICAgMzEKKworLyogSU5UQzEgLSBpbnRlcnJ1cHQgY29udHJvbGxlciAxICovCisjZGVmaW5lIElSUV9JTlRDMV9TVEFSVCAgICAzMgorI2RlZmluZSBJUlFfR1BJTzAgICAgICAgICAgMzIJLyogIDAgR1BJTyBiaXQgMzEvLzAgY29tYmluZWQgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9HUElPMSAgICAgICAgICAzMwkvKiAgMSBHUElPIGJpdCA2NC8vMzIgY29tYmluZWQgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9JMlMwICAgICAgICAgICAzNAkvKiAgMiBJMlMwIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfSTJTMSAgICAgICAgICAgMzUJLyogIDMgSTJTMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0kyQ0ggICAgICAgICAgIDM2CS8qICA0IEkyQyBob3N0IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfSTJDUyAgICAgICAgICAgMzcJLyogIDUgSTJDIHNsYXZlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfU1BJUyAgICAgICAgICAgMzgJLyogIDYgU1BJIHNsYXZlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfR1BIWSAgICAgICAgICAgMzkJLyogIDcgR2lnYWJpdCBQaHkgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9GTEFTSEMgICAgICAgICA0MAkvKiAgOCBGbGFzaCBjb250cm9sbGVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfQ09NTVRYICAgICAgICAgNDEJLyogIDkgQVJNIEREQyB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0NPTU1SWCAgICAgICAgIDQyCS8qIDEwIEFSTSBEREMgcmVjZWl2ZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1BNVUlSUSAgICAgICAgIDQzCS8qIDExIEFSTSBwZXJmb3JtYW5jZSBtb25pdG9yIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfVUFSVEIgICAgICAgICAgNDQJLyogMTIgVUFSVEIgKi8KKyNkZWZpbmUgSVJRX1dBVENIRE9HICAgICAgIDQ1CS8qIDEzIFdhdGNoZG9nIHRpbWVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfVUFSVEEgICAgICAgICAgNDYJLyogMTQgVUFSVEEgKi8KKyNkZWZpbmUgSVJRX1RTQyAgICAgICAgICAgIDQ3CS8qIDE1IFRvdWNoIHNjcmVlbiBjb250cm9sbGVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfS0VZQyAgICAgICAgICAgNDgJLyogMTYgS2V5IHBhZCBjb250cm9sbGVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1QVSAgICAgICAgICAgNDkJLyogMTcgRERSMiBtZW1vcnkgcGFydGl0aW9uIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfVk1QVSAgICAgICAgICAgNTAJLyogMTggVlJBTSBtZW1vcnkgcGFydGl0aW9uIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRk1QVSAgICAgICAgICAgNTEJLyogMTkgRmxhc2ggbWVtb3J5IHBhcml0aW9uIHVuaXQgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9STkcgICAgICAgICAgICA1MgkvKiAyMCBSYW5kb20gbnVtYmVyIGdlbmVyYXRvciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1JUQzAgICAgICAgICAgIDUzCS8qIDIxIFJlYWwgdGltZSBjbG9jayBwZXJpb2RpYyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1JUQzEgICAgICAgICAgIDU0CS8qIDIyIFJlYWwgdGltZSBjbG9jayBvbmUtc2hvdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NQVU0gICAgICAgICAgIDU1CS8qIDIzIFNlY3VyZSBwcm9jZXNzIG1vZHVsZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1ZERUMgICAgICAgICAgIDU2CS8qIDI0IEhhbnRybyB2aWRlbyBkZWNvZGVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfUlRDMiAgICAgICAgICAgNTcJLyogMjUgUmVhbCB0aW1lIGNsb2NrIHRhbXBlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0REUlAgICAgICAgICAgIDU4CS8qIDI2IEREUiBQYW5pYyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0lOVEMxX0VORCAgICAgIDU4CisKKy8qIFNJTlRDIHNlY3VyZSBpbnQgY29udHJvbGxlciAqLworI2RlZmluZSBJUlFfU0lOVENfU1RBUlQgICAgNTkKKyNkZWZpbmUgSVJRX1NFQ19XQVRDSERPRyAgIDU5CS8qICAwIFdhdGNoZG9nIHRpbWVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfU0VDX1VBUlRBICAgICAgNjAJLyogIDEgVUFSVEEgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TRUNfVFNDICAgICAgICA2MQkvKiAgMiBUb3VjaCBzY3JlZW4gY29udHJvbGxlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NFQ19LRVlDICAgICAgIDYyCS8qICAzIEtleSBwYWQgY29udHJvbGxlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NFQ19ETVBVICAgICAgIDYzCS8qICA0IEREUjIgbWVtb3J5IHBhcnRpdGlvbiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NFQ19WTVBVICAgICAgIDY0CS8qICA1IFZSQU0gbWVtb3J5IHBhcnRpdGlvbiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NFQ19GTVBVICAgICAgIDY1CS8qICA2IEZsYXNoIG1lbW9yeSBwYXJpdGlvbiB1bml0IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfU0VDX1JORyAgICAgICAgNjYJLyogIDcgUmFuZG9tIG51bWJlciBnZW5lcmF0b3IgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TRUNfUlRDMCAgICAgICA2NwkvKiAgOCBSZWFsIHRpbWUgY2xvY2sgcGVyaW9kaWMgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TRUNfUlRDMSAgICAgICA2OAkvKiAgOSBSZWFsIHRpbWUgY2xvY2sgb25lLXNob3QgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TRUNfU1BVTSAgICAgICA2OQkvKiAxMCBTZWN1cmUgcHJvY2VzcyBtb2R1bGUgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TRUNfVElNRVIwICAgICA3MAkvKiAxMSBTZWN1cmUgdGltZXIwIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfU0VDX1RJTUVSMSAgICAgNzEJLyogMTIgU2VjdXJlIHRpbWVyMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NFQ19USU1FUjIgICAgIDcyCS8qIDEzIFNlY3VyZSB0aW1lcjIgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TRUNfVElNRVIzICAgICA3MwkvKiAxNCBTZWN1cmUgdGltZXIzIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfU0VDX1JUQzIgICAgICAgNzQJLyogMTUgUmVhbCB0aW1lIGNsb2NrIHRhbXBlciBpbnRlcnJ1cHQgKi8KKworI2RlZmluZSBJUlFfU0lOVENfRU5EICAgICAgNzQKKworLyogTm90ZTogdGhlcmUgYXJlIDMgSU5UQyByZWdpc3RlcnMgb2YgMzIgYml0cyBlYWNoLiBTbyBpbnRlcm5hbCBJUlFzIGNvdWxkIGdvIGZyb20gMC05NSAqLworLyogICAgICAgU2luY2UgSVJRcyBhcmUgdHlwaWNhbGx5IHZpZXdlZCBpbiBkZWNpbWFsLCB3ZSBzdGFydCB0aGUgZ3BpbyBiYXNlZCBJUlFzIG9mZiBhdCAxMDAgKi8KKy8qICAgICAgIHRvIG1ha2UgdGhlIG1hcHBpbmcgZWFzeSBmb3IgaHVtYW5zIHRvIGRlY2lwaGVyLiAqLworCisjZGVmaW5lIElSUV9HUElPXzAgICAgICAgICAgICAgICAgICAxMDAKKworI2RlZmluZSBOVU1fSU5URVJOQUxfSVJRUyAgICAgICAgICAoSVJRX1NJTlRDX0VORCsxKQorCisvKiBJIGNvdWxkbid0IGdldCB0aGUgZ3Bpb0h3X3JlZy5oIGZpbGUgdG8gYmUgaW5jbHVkZWQgY2xlYW5seSwgc28gSSBoYXJkY29kZWQgaXQgKi8KKy8qIGRlZmluZSBOVU1fR1BJT19JUlFTICAgICAgICAgICAgICAgR1BJT0hXX1RPVEFMX05VTV9QSU5TICovCisjZGVmaW5lIE5VTV9HUElPX0lSUVMgICAgICAgICAgICAgICA2MgorCisjZGVmaW5lIE5SX0lSUVMgICAgICAgICAgICAgICAgICAgICAoSVJRX0dQSU9fMCArIE5VTV9HUElPX0lSUVMpCisKKyNkZWZpbmUgSVJRX1VOS05PV04gICAgICAgICAgICAgICAgIC0xCisKKy8qIFR1bmUgdGhlc2UgYml0cyB0byBwcmVjbHVkZSBub2lzeSBvciB1bnN1cHBvcnRlZCBpbnRlcnJ1cHQgc291cmNlcyBhcyByZXF1aXJlZC4gKi8KKyNkZWZpbmUgSVJRX0lOVEMwX1ZBTElEX01BU0sgICAgICAgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgSVJRX0lOVEMxX1ZBTElEX01BU0sgICAgICAgIDB4MDdmZmZmZmYKKyNkZWZpbmUgSVJRX1NJTlRDX1ZBTElEX01BU0sgICAgICAgIDB4MDAwMGZmZmYKKworI2VuZGlmIC8qIEFSQ0hfQkNNUklOR19JUlFTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNGY5NDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwNSAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKyNpbmNsdWRlIDxjZmdfZ2xvYmFsLmg+CisKKy8qCisgKiBQaHlzaWNhbCB2cyB2aXJ0dWFsIFJBTSBhZGRyZXNzIHNwYWNlIGNvbnZlcnNpb24uICBUaGVzZSBhcmUKKyAqIHByaXZhdGUgZGVmaW5pdGlvbnMgd2hpY2ggc2hvdWxkIE5PVCBiZSB1c2VkIG91dHNpZGUgbWVtb3J5LmgKKyAqIGZpbGVzLiAgVXNlIHZpcnRfdG9fcGh5cy9waHlzX3RvX3ZpcnQvX19wYS9fX3ZhIGluc3RlYWQuCisgKi8KKworI2RlZmluZSBQSFlTX09GRlNFVCBDRkdfR0xPQkFMX1JBTV9CQVNFCisKKy8qCisgKiBNYXhpbXVtIERNQSBtZW1vcnkgYWxsb3dlZCBpcyAxNE0KKyAqLworI2RlZmluZSBDT05TSVNURU5UX0RNQV9TSVpFIChTWl8xNk0gLSBTWl8yTSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL21lbW9yeV9zZXR0aW5ncy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9tZW1vcnlfc2V0dGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTVjZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9tZW1vcnlfc2V0dGluZ3MuaApAQCAtMCwwICsxLDY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIE1FTU9SWV9TRVRUSU5HU19ICisjZGVmaW5lIE1FTU9SWV9TRVRUSU5HU19ICisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBNZW1vcnkgZGV2aWNlcyAqLworLyogTkFORCBGbGFzaCB0aW1pbmcgZm9yIDE2NiBNSHogc2V0dGluZyAqLworI2RlZmluZSBIV19DRkdfTkFORF90QlRBICAoNSA8PCAxNikJLyogQnVzIHR1cm5hcm91bmQgY3ljbGUgKG4pICAgICAgICAwLTcgICgzMCBucykgKi8KKyNkZWZpbmUgSFdfQ0ZHX05BTkRfdFdQICAgKDQgPDwgMTEpCS8qIFdyaXRlIHB1bHNlIHdpZHRoIGN5Y2xlIChuKzEpICAgMC0zMSAoMjUgbnMpICovCisjZGVmaW5lIEhXX0NGR19OQU5EX3RXUiAgICgxIDw8IDkpCS8qIFdyaXRlIHJlY292ZXJ5IGN5Y2xlIChuKzEpICAgICAgMC0zICAoMTAgbnMpICovCisjZGVmaW5lIEhXX0NGR19OQU5EX3RBUyAgICgwIDw8IDcpCS8qIFdyaXRlIGFkZHJlc3Mgc2V0dXAgY3ljbGUgKG4rMSkgMC0zICAoIDAgbnMpICovCisjZGVmaW5lIEhXX0NGR19OQU5EX3RPRSAgICgzIDw8IDUpCS8qIE91dHB1dCBlbmFibGUgZGVsYXkgY3ljbGUgKG4pICAgMC0zICAoMTUgbnMpICovCisjZGVmaW5lIEhXX0NGR19OQU5EX3RSQyAgICg3IDw8IDApCS8qIFJlYWQgYWNjZXNzIGN5Y2xlIChuKzIpICAgICAgICAgMC0zMSAoNTAgbnMpICovCisKKyNkZWZpbmUgSFdfQ0ZHX05BTkRfVENSIChIV19DRkdfTkFORF90QlRBIFwKKwl8IEhXX0NGR19OQU5EX3RXUCAgXAorCXwgSFdfQ0ZHX05BTkRfdFdSICBcCisJfCBIV19DRkdfTkFORF90QVMgIFwKKwl8IEhXX0NGR19OQU5EX3RPRSAgXAorCXwgSFdfQ0ZHX05BTkRfdFJDKQorCisvKiBOT1IgRmxhc2ggdGltaW5nIGZvciAxNjYgTUh6IHNldHRpbmcgKi8KKyNkZWZpbmUgSFdfQ0ZHX05PUl9UUFJDX1RXTEMgKDAgPDwgMTkpCS8qIFBhZ2UgcmVhZCBhY2Nlc3MgY3ljbGUgLyBCdXJzdCB3cml0ZSBsYXRlbmN5IChuKzIgLyBuKzEpIChtYXggMjVucykgKi8KKyNkZWZpbmUgSFdfQ0ZHX05PUl9UQlRBICAgICAgKDAgPDwgMTYpCS8qIEJ1cyB0dXJuYXJvdW5kIGN5Y2xlIChuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChETkEpICAgICAgKi8KKyNkZWZpbmUgSFdfQ0ZHX05PUl9UV1AgICAgICAgKDYgPDwgMTEpCS8qIFdyaXRlIHB1bHNlIHdpZHRoIGN5Y2xlIChuKzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzNW5zKSAgICAgKi8KKyNkZWZpbmUgSFdfQ0ZHX05PUl9UV1IgICAgICAgKDAgPDwgOSkJLyogV3JpdGUgcmVjb3ZlcnkgY3ljbGUgKG4rMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDBucykgICAgICAqLworI2RlZmluZSBIV19DRkdfTk9SX1RBUyAgICAgICAoMCA8PCA3KQkvKiBXcml0ZSBhZGRyZXNzIHNldHVwIGN5Y2xlIChuKzEpICAgICAgICAgICAgICAgICAgICAgICAgICAoMG5zKSAgICAgICovCisjZGVmaW5lIEhXX0NGR19OT1JfVE9FICAgICAgICgwIDw8IDUpCS8qIE91dHB1dCBlbmFibGUgZGVsYXkgY3ljbGUgKG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXggMjVucykgKi8KKyNkZWZpbmUgSFdfQ0ZHX05PUl9UUkNfVExDICAgKDB4MTAgPDwgMCkJLyogUmVhZCBhY2Nlc3MgY3ljbGUgLyBCdXJzdCByZWFkIGxhdGVuY3kgKG4rMiAvIG4rMSkgICAgICAgKDEwMG5zKSAgICAqLworCisjZGVmaW5lIEhXX0NGR19GTEFTSDBfVENSIChIV19DRkdfTk9SX1RQUkNfVFdMQyBcCisJfCBIV19DRkdfTk9SX1RCVEEgICAgICBcCisJfCBIV19DRkdfTk9SX1RXUCAgICAgICBcCisJfCBIV19DRkdfTk9SX1RXUiAgICAgICBcCisJfCBIV19DRkdfTk9SX1RBUyAgICAgICBcCisJfCBIV19DRkdfTk9SX1RPRSAgICAgICBcCisJfCBIV19DRkdfTk9SX1RSQ19UTEMpCisKKyNkZWZpbmUgSFdfQ0ZHX0ZMQVNIMV9UQ1IgICAgSFdfQ0ZHX0ZMQVNIMF9UQ1IKKyNkZWZpbmUgSFdfQ0ZHX0ZMQVNIMl9UQ1IgICAgSFdfQ0ZHX0ZMQVNIMF9UQ1IKKworLyogU0RSQU0gU2V0dGluZ3MgKi8KKy8qICNkZWZpbmUgSFdfQ0ZHX1NEUkFNX0NBU19MQVRFTkNZICAgICAgICA1ICAgIERlZmF1bHQgNSwgVmFsdWVzIFszLi42XSAqLworLyogI2RlZmluZSBIV19DRkdfU0RSQU1fQ0hJUF9TRUxFQ1RfQ05UICAgIDEgICAgRGVmYXVsdCAxLCBWYXVsZXMgWzEuLjJdICovCisvKiAjZGVmaW5lIEhXX0NGR19TRFJBTV9TUEVFRF9HUkFERSAgICAgICAgNjY3ICBEZWZhdWx0IDY2NywgVmFsdWVzIFs0MDAsNTMzLDY2Nyw4MDBdICovCisvKiAjZGVmaW5lIEhXX0NGR19TRFJBTV9XSURUSF9CSVRTICAgICAgICAgMTYgICBEZWZhdWx0IDE2LCBWYXVsZXMgWzgsMTZdICovCisjZGVmaW5lIEhXX0NGR19TRFJBTV9TSVpFX0JZVEVTICAgICAgICAgMHgxMDAwMDAwMAkvKiBUb3RhbCBtZW1vcnksIG5vdCBwZXIgZGV2aWNlIHNpemUgKi8KKworLyogLS0tLSBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbmRpZiAvKiBNRU1PUllfU0VUVElOR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RiZjkzYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAorCisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaD4KKworZXh0ZXJuIGludCBiY21yaW5nX2FyY2hfd2FybV9yZWJvb3Q7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNoYXIgKmNtZCkKK3sKKwlwcmludGsoImFyY2hfcmVzZXQ6JWMgJXhcbiIsIG1vZGUsIGJjbXJpbmdfYXJjaF93YXJtX3JlYm9vdCk7CisKKwlpZiAobW9kZSA9PSAnaCcpIHsKKwkJLyogUmVib290IGNvbmZpZ3VyZWQgaW4gcHJvYyBlbnRyeSAqLworCQlpZiAoYmNtcmluZ19hcmNoX3dhcm1fcmVib290KSB7CisJCQlwcmludGsoIndhcm0gcmVzZXRcbiIpOworCQkJLyogSXNzdWUgV2FybSByZXNldCAoZG8gbm90IHJlc2V0IGV0aGVybmV0IHN3aXRjaCwga2VlcCBhbGl2ZSkgKi8KKwkJCWNoaXBjSHdfcmVzZXQoY2hpcGNId19SRUdfU09GVF9SRVNFVF9DSElQX1dBUk0pOworCQl9IGVsc2UgeworCQkJLyogRm9yY2UgcmVzZXQgb2YgZXZlcnl0aGluZyAqLworCQkJcHJpbnRrKCJmb3JjZSByZXNldFxuIik7CisJCQljaGlwY0h3X3Jlc2V0KGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfQ0hJUF9TT0ZUKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEZvcmNlIHJlc2V0IG9mIGV2ZXJ5dGhpbmcgKi8KKwkJcHJpbnRrKCJmb3JjZSByZXNldFxuIik7CisJCWNoaXBjSHdfcmVzZXQoY2hpcGNId19SRUdfU09GVF9SRVNFVF9DSElQX1NPRlQpOworCX0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3RpbWVyLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5NGJiYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvdGltZXIuaApAQCAtMCwwICsxLDc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIHRpbWVyLmgKKyoKKyogIFBVUlBPU0U6CisqCisqCisqCisqICBOT1RFUzoKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoQkNNX0xJTlVYX1RJTUVSX0gpCisjZGVmaW5lIEJDTV9MSU5VWF9USU1FUl9ICisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit0eXBlZGVmIHVuc2lnbmVkIGludCB0aW1lcl90aWNrX2NvdW50X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB0aW1lcl90aWNrX3JhdGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHRpbWVyX21zZWNfdDsKKworLyogLS0tLSBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICB0aW1lcl9nZXRfdGlja19jb3VudAorKgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordGltZXJfdGlja19jb3VudF90IHRpbWVyX2dldF90aWNrX2NvdW50KHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgdGltZXJfZ2V0X3RpY2tfcmF0ZQorKgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordGltZXJfdGlja19yYXRlX3QgdGltZXJfZ2V0X3RpY2tfcmF0ZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIHRpbWVyX2dldF9tc2VjCisqCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0aW1lcl9tc2VjX3QgdGltZXJfZ2V0X21zZWModm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICB0aW1lcl90aWNrc190b19tc2VjCisqCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0aW1lcl9tc2VjX3QgdGltZXJfdGlja3NfdG9fbXNlYyh0aW1lcl90aWNrX2NvdW50X3QgdGlja3MpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIEJDTV9MSU5VWF9USU1FUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkMDMzZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMCwwICsxLDI1IEBACisvKgorICoKKyAqICBJbnRlZ3JhdG9yIGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyoKKyAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRpY2tzIHBlciBzZWNvbmQKKyAqLworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCTEwMDAwMCAvKiBSRUdfU01UX1RJQ0tTX1BFUl9TRUMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5ODIxYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwNSAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8bWFjaC9jc3AvbW1fYWRkci5oPgorCisjZGVmaW5lIEJDTVJJTkdfVUFSVF8wX0RSICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKU1NX0FERFJfSU9fVUFSVEEpCisjZGVmaW5lIEJDTVJJTkdfVUFSVF8wX0ZSICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShNTV9BRERSX0lPX1VBUlRBICsgMHgxOCkpCisvKgorICogVGhpcyBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRjKGludCBjKQoreworCS8qIFNlbmQgb3V0IFVBUlRBICovCisJd2hpbGUgKEJDTVJJTkdfVUFSVF8wX0ZSICYgKDEgPDwgNSkpCisJCTsKKworCUJDTVJJTkdfVUFSVF8wX0RSID0gYzsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKK3sKKwkvKiBXYWl0IGZvciB0aGUgdHggZmlmbyB0byBiZSBlbXB0eSAqLworCXdoaWxlICgoQkNNUklOR19VQVJUXzBfRlIgJiAoMSA8PCA3KSkgPT0gMCkKKwkJOworCisJLyogV2FpdCBmb3IgdGhlIGZpbmFsIGNoYXJhY3RlciB0byBiZSBzZW50IG9uIHRoZSB0eGQgbGluZSAqLworCXdoaWxlIChCQ01SSU5HX1VBUlRfMF9GUiAmICgxIDw8IDMpKQorCQk7Cit9CisKKyNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQorI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVlMmVhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qCisgKiBNb3ZlIFZNQUxMT0NfRU5EIHRvIDB4ZjAwMDAwMDAgc28gdGhhdCB0aGUgdm0gc3BhY2UgY2FuIHJhbmdlIGZyb20KKyAqIDB4ZTAwMDAwMDAgdG8gMHhlZmZmZmZmZi4gVGhpcyBnaXZlcyB1cyAyNTYgTUIgb2Ygdm0gc3BhY2UgYW5kIGhhbmRsZXMKKyAqIGxhcmdlciBwaHlzaWNhbCBtZW1vcnkgZGVzaWducyBiZXR0ZXIuCisgKi8KKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgzMDAwMDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pcnEuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzFjNDkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2lycS5jCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvaW50Y0h3X3JlZy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL21tX2lvLmg+CisKK3N0YXRpYyB2b2lkIGJjbXJpbmdfbWFza19pcnEwKHVuc2lnbmVkIGludCBpcnEpCit7CisJd3JpdGVsKDEgPDwgKGlycSAtIElSUV9JTlRDMF9TVEFSVCksCisJICAgICAgIE1NX0lPX0JBU0VfSU5UQzAgKyBJTlRDSFdfSU5URU5DTEVBUik7Cit9CisKK3N0YXRpYyB2b2lkIGJjbXJpbmdfdW5tYXNrX2lycTAodW5zaWduZWQgaW50IGlycSkKK3sKKwl3cml0ZWwoMSA8PCAoaXJxIC0gSVJRX0lOVEMwX1NUQVJUKSwKKwkgICAgICAgTU1fSU9fQkFTRV9JTlRDMCArIElOVENIV19JTlRFTkFCTEUpOworfQorCitzdGF0aWMgdm9pZCBiY21yaW5nX21hc2tfaXJxMSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXdyaXRlbCgxIDw8IChpcnEgLSBJUlFfSU5UQzFfU1RBUlQpLAorCSAgICAgICBNTV9JT19CQVNFX0lOVEMxICsgSU5UQ0hXX0lOVEVOQ0xFQVIpOworfQorCitzdGF0aWMgdm9pZCBiY21yaW5nX3VubWFza19pcnExKHVuc2lnbmVkIGludCBpcnEpCit7CisJd3JpdGVsKDEgPDwgKGlycSAtIElSUV9JTlRDMV9TVEFSVCksCisJICAgICAgIE1NX0lPX0JBU0VfSU5UQzEgKyBJTlRDSFdfSU5URU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgYmNtcmluZ19tYXNrX2lycTIodW5zaWduZWQgaW50IGlycSkKK3sKKwl3cml0ZWwoMSA8PCAoaXJxIC0gSVJRX1NJTlRDX1NUQVJUKSwKKwkgICAgICAgTU1fSU9fQkFTRV9TSU5UQyArIElOVENIV19JTlRFTkNMRUFSKTsKK30KKworc3RhdGljIHZvaWQgYmNtcmluZ191bm1hc2tfaXJxMih1bnNpZ25lZCBpbnQgaXJxKQoreworCXdyaXRlbCgxIDw8IChpcnEgLSBJUlFfU0lOVENfU1RBUlQpLAorCSAgICAgICBNTV9JT19CQVNFX1NJTlRDICsgSU5UQ0hXX0lOVEVOQUJMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmNtcmluZ19pcnEwX2NoaXAgPSB7CisJLnR5cGVuYW1lID0gIkFSTS1JTlRDMCIsCisJLmFjayA9IGJjbXJpbmdfbWFza19pcnEwLAorCS5tYXNrID0gYmNtcmluZ19tYXNrX2lycTAsCS8qIG1hc2sgYSBzcGVjaWZpYyBpbnRlcnJ1cHQsIGJsb2NraW5nIGl0cyBkZWxpdmVyeS4gKi8KKwkudW5tYXNrID0gYmNtcmluZ191bm1hc2tfaXJxMCwJLyogdW5tYWtzIGFuIGludGVycnVwdCAqLworfTsKKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBiY21yaW5nX2lycTFfY2hpcCA9IHsKKwkudHlwZW5hbWUgPSAiQVJNLUlOVEMxIiwKKwkuYWNrID0gYmNtcmluZ19tYXNrX2lycTEsCisJLm1hc2sgPSBiY21yaW5nX21hc2tfaXJxMSwKKwkudW5tYXNrID0gYmNtcmluZ191bm1hc2tfaXJxMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmNtcmluZ19pcnEyX2NoaXAgPSB7CisJLnR5cGVuYW1lID0gIkFSTS1TSU5UQyIsCisJLmFjayA9IGJjbXJpbmdfbWFza19pcnEyLAorCS5tYXNrID0gYmNtcmluZ19tYXNrX2lycTIsCisJLnVubWFzayA9IGJjbXJpbmdfdW5tYXNrX2lycTIsCit9OworCitzdGF0aWMgdm9pZCB2aWNfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UsIHN0cnVjdCBpcnFfY2hpcCAqY2hpcCwKKwkJICAgICB1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0LCB1bnNpZ25lZCBpbnQgdmljX3NvdXJjZXMpCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGlycSA9IGlycV9zdGFydCArIGk7CisJCXNldF9pcnFfY2hpcChpcnEsIGNoaXApOworCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIGJhc2UpOworCisJCWlmICh2aWNfc291cmNlcyAmICgxIDw8IGkpKSB7CisJCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJCX0KKwl9CisJd3JpdGVsKDAsIGJhc2UgKyBJTlRDSFdfSU5UU0VMRUNUKTsKKwl3cml0ZWwoMCwgYmFzZSArIElOVENIV19JTlRFTkFCTEUpOworCXdyaXRlbCh+MCwgYmFzZSArIElOVENIV19JTlRFTkNMRUFSKTsKKwl3cml0ZWwoMCwgYmFzZSArIElOVENIV19JUlFTVEFUVVMpOworCXdyaXRlbCh+MCwgYmFzZSArIElOVENIV19TT0ZUSU5UQ0xFQVIpOworfQorCit2b2lkIF9faW5pdCBiY21yaW5nX2luaXRfaXJxKHZvaWQpCit7CisJdmljX2luaXQoKHZvaWQgX19pb21lbSAqKU1NX0lPX0JBU0VfSU5UQzAsICZiY21yaW5nX2lycTBfY2hpcCwKKwkJIElSUV9JTlRDMF9TVEFSVCwgSVJRX0lOVEMwX1ZBTElEX01BU0spOworCXZpY19pbml0KCh2b2lkIF9faW9tZW0gKilNTV9JT19CQVNFX0lOVEMxLCAmYmNtcmluZ19pcnExX2NoaXAsCisJCSBJUlFfSU5UQzFfU1RBUlQsIElSUV9JTlRDMV9WQUxJRF9NQVNLKTsKKwl2aWNfaW5pdCgodm9pZCBfX2lvbWVtICopTU1fSU9fQkFTRV9TSU5UQywgJmJjbXJpbmdfaXJxMl9jaGlwLAorCQkgSVJRX1NJTlRDX1NUQVJULCBJUlFfU0lOVENfVkFMSURfTUFTSyk7CisKKwkvKiBzcGVjaWFsIGNhc2VzICovCisJaWYgKElOVENIV19JTlRDMV9HUElPMCAmIElSUV9JTlRDMV9WQUxJRF9NQVNLKSB7CisJCXNldF9pcnFfaGFuZGxlcihJUlFfR1BJTzAsIGhhbmRsZV9zaW1wbGVfaXJxKTsKKwl9CisJaWYgKElOVENIV19JTlRDMV9HUElPMSAmIElSUV9JTlRDMV9WQUxJRF9NQVNLKSB7CisJCXNldF9pcnFfaGFuZGxlcihJUlFfR1BJTzEsIGhhbmRsZV9zaW1wbGVfaXJxKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvbW0uYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMWMzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvbW0uYwpAQCAtMCwwICsxLDU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDMgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvbW1faW8uaD4KKworI2RlZmluZSBJT19ERVNDKHZhLCBzeikgeyAudmlydHVhbCA9IHZhLCBcCisJLnBmbiA9IF9fcGh5c190b19wZm4oSFdfSU9fVklSVF9UT19QSFlTKHZhKSksIFwKKwkubGVuZ3RoID0gc3osIFwKKwkudHlwZSA9IE1UX0RFVklDRSB9CisKKyNkZWZpbmUgTUVNX0RFU0ModmEsIHN6KSB7IC52aXJ0dWFsID0gdmEsIFwKKwkucGZuID0gX19waHlzX3RvX3BmbihIV19JT19WSVJUX1RPX1BIWVModmEpKSwgXAorCS5sZW5ndGggPSBzeiwgXAorCS50eXBlID0gTVRfTUVNT1JZIH0KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBiY21yaW5nX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCUlPX0RFU0MoTU1fSU9fQkFTRV9OQU5ELCBTWl82NEspLAkvKiBwaHlzOjB4MjgwMDAwMDAtMHgyODAwMEZGRiAgdmlydDoweEU4MDAwMDAwLTB4RTgwMDBGRkYgIHNpemU6MHgwMDAxMDAwMCAqLworCUlPX0RFU0MoTU1fSU9fQkFTRV9VTUksIFNaXzY0SyksCS8qIHBoeXM6MHgyQzAwMDAwMC0weDJDMDAwRkZGICB2aXJ0OjB4RUMwMDAwMDAtMHhFQzAwMEZGRiAgc2l6ZToweDAwMDEwMDAwICovCisKKwlJT19ERVNDKE1NX0lPX0JBU0VfQlJPTSwgU1pfNjRLKSwJLyogcGh5czoweDMwMDAwMDAwLTB4MzAwMEZGRkYgIHZpcnQ6MHhGMzAwMDAwMC0weEYzMDBGRkZGICBzaXplOjB4MDAwMTAwMDAgKi8KKwlNRU1fREVTQyhNTV9JT19CQVNFX0FSQU0sIFNaXzFNKSwJLyogcGh5czoweDMxMDAwMDAwLTB4MzFGRkZGRkYgIHZpcnQ6MHhGMzEwMDAwMC0weEYzMUZGRkZGICBzaXplOjB4MDEwMDAwMDAgKi8KKwlJT19ERVNDKE1NX0lPX0JBU0VfRE1BMCwgU1pfMU0pLAkvKiBwaHlzOjB4MzIwMDAwMDAtMHgzMkZGRkZGRiAgdmlydDoweEYzMjAwMDAwLTB4RjMyRkZGRkYgIHNpemU6MHgwMTAwMDAwMCAqLworCUlPX0RFU0MoTU1fSU9fQkFTRV9ETUExLCBTWl8xTSksCS8qIHBoeXM6MHgzMzAwMDAwMC0weDMzRkZGRkZGICB2aXJ0OjB4RjMzMDAwMDAtMHhGMzNGRkZGRiAgc2l6ZToweDAxMDAwMDAwICovCisJSU9fREVTQyhNTV9JT19CQVNFX0VTVywgU1pfMU0pLAkvKiBwaHlzOjB4MzQwMDAwMDAtMHgzNEZGRkZGRiAgdmlydDoweEYzNDAwMDAwLTB4RjM0RkZGRkYgIHNpemU6MHgwMTAwMDAwMCAqLworCUlPX0RFU0MoTU1fSU9fQkFTRV9DTENELCBTWl8xTSksCS8qIHBoeXM6MHgzNTAwMDAwMC0weDM1RkZGRkZGICB2aXJ0OjB4RjM1MDAwMDAtMHhGMzVGRkZGRiAgc2l6ZToweDAxMDAwMDAwICovCisJSU9fREVTQyhNTV9JT19CQVNFX0FQTSwgU1pfMU0pLAkvKiBwaHlzOjB4MzYwMDAwMDAtMHgzNkZGRkZGRiAgdmlydDoweEYzNjAwMDAwLTB4RjM2RkZGRkYgIHNpemU6MHgwMTAwMDAwMCAqLworCUlPX0RFU0MoTU1fSU9fQkFTRV9TUFVNLCBTWl8xTSksCS8qIHBoeXM6MHgzNzAwMDAwMC0weDM3RkZGRkZGICB2aXJ0OjB4RjM3MDAwMDAtMHhGMzdGRkZGRiAgc2l6ZToweDAxMDAwMDAwICovCisJSU9fREVTQyhNTV9JT19CQVNFX1ZQTV9QUk9HLCBTWl8xTSksCS8qIHBoeXM6MHgzODAwMDAwMC0weDM4RkZGRkZGICB2aXJ0OjB4RjM4MDAwMDAtMHhGMzhGRkZGRiAgc2l6ZToweDAxMDAwMDAwICovCisJSU9fREVTQyhNTV9JT19CQVNFX1ZQTV9EQVRBLCBTWl8xTSksCS8qIHBoeXM6MHgzQTAwMDAwMC0weDNBRkZGRkZGICB2aXJ0OjB4RjNBMDAwMDAtMHhGM0FGRkZGRiAgc2l6ZToweDAxMDAwMDAwICovCisKKwlJT19ERVNDKE1NX0lPX0JBU0VfVlJBTSwgU1pfNjRLKSwJLyogcGh5czoweDQwMDAwMDAwLTB4NDAwMEZGRkYgIHZpcnQ6MHhGNDAwMDAwMC0weEY0MDBGRkZGICBzaXplOjB4MDAwMTAwMDAgKi8KKwlJT19ERVNDKE1NX0lPX0JBU0VfQ0hJUEMsIFNaXzE2TSksCS8qIHBoeXM6MHg4MDAwMDAwMC0weDgwRkZGRkZGICB2aXJ0OjB4RjgwMDAwMDAtMHhGOEZGRkZGRiAgc2l6ZToweDAxMDAwMDAwICovCisJSU9fREVTQyhNTV9JT19CQVNFX1ZQTV9FWFRNRU1fUlNWRCwKKwkJU1pfMTZNKSwJLyogcGh5czoweDBGMDAwMDAwLTB4MEZGRkZGRkYgIHZpcnQ6MHhGMDAwMDAwMC0weEYwRkZGRkZGICBzaXplOjB4MDEwMDAwMDAgKi8KK307CisKK3ZvaWQgX19pbml0IGJjbXJpbmdfbWFwX2lvKHZvaWQpCit7CisKKwlpb3RhYmxlX2luaXQoYmNtcmluZ19pb19kZXNjLCBBUlJBWV9TSVpFKGJjbXJpbmdfaW9fZGVzYykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDQxNWQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL3RpbWVyLmMKQEAgLTAsMCArMSw2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGNzcC90bXJIdy5oPgorCisjaW5jbHVkZSA8bWFjaC90aW1lci5oPgorLyogVGhlIGNvcmUuYyBmaWxlIGluaXRpYWxpemVzIHRpbWVycyAxIGFuZCAzIGFzIGEgbGludXggY2xvY2tzb3VyY2UuICovCisvKiBUaGUgcmVhbCB0aW1lIGNsb2NrIHNob3VsZCBwcm9iYWJseSBiZSB0aGUgcmVhbCBsaW51eCBjbG9ja3NvdXJjZS4gKi8KKy8qIEluIHRoZSBtZWFudGltZSwgdGhpcyBmaWxlIHNob3VsZCBhZ3JlZSB3aXRoIGNvcmUuYyBhcyB0byB0aGUgKi8KKy8qIHByb2ZpbGluZyB0aW1lci4gSWYgdGhlIGNsb2Nrc291cmNlIGlzIG1vdmVkIHRvIHJ0YyBsYXRlciwgdGhlbiAqLworLyogd2UgY2FuIGluaXQgdGhlIHByb2ZpbGluZyB0aW1lciBoZXJlIGluc3RlYWQuICovCisKKy8qIFRpbWVyIDEgcHJvdmlkZXMgMjVNSHogcmVzb2x1dGlvbiBzeW5jcmhvbml6ZWQgdG8gc2NoZWR1bGluZyBhbmQgQVBNIHRpbWluZyAqLworLyogVGltZXIgMyBwcm92aWRlcyBidXMgZnJlcWV1bmN5IHN5Y2hyb25pemVkIHRvIEFDTEssIGJ1dCBzcHJlYWQgc3BlY3RydW0gd2lsbCAqLworLyogYWZmZWN0IHN5bmNocm9uaXphdGlvbiB3aXRoIHNjaGVkdWxpbmcgYW5kIEFQTSB0aW1pbmcuICovCisKKyNkZWZpbmUgUFJPRl9USU1FUiAxCisKK3RpbWVyX3RpY2tfcmF0ZV90IHRpbWVyX2dldF90aWNrX3JhdGUodm9pZCkKK3sKKwlyZXR1cm4gdG1ySHdfZ2V0Q291bnRSYXRlKFBST0ZfVElNRVIpOworfQorCit0aW1lcl90aWNrX2NvdW50X3QgdGltZXJfZ2V0X3RpY2tfY291bnQodm9pZCkKK3sKKwlyZXR1cm4gdG1ySHdfR2V0Q3VycmVudENvdW50KFBST0ZfVElNRVIpOwkvKiBjaGFuZ2UgZG93bmNvdW50ZXIgdG8gdXBjb3VudGVyICovCit9CisKK3RpbWVyX21zZWNfdCB0aW1lcl90aWNrc190b19tc2VjKHRpbWVyX3RpY2tfY291bnRfdCB0aWNrcykKK3sKKwlzdGF0aWMgaW50IHRpY2tSYXRlTXNlYzsKKworCWlmICh0aWNrUmF0ZU1zZWMgPT0gMCkgeworCQl0aWNrUmF0ZU1zZWMgPSB0aW1lcl9nZXRfdGlja19yYXRlKCkgLyAxMDAwOworCX0KKworCXJldHVybiB0aWNrcyAvIHRpY2tSYXRlTXNlYzsKK30KKwordGltZXJfbXNlY190IHRpbWVyX2dldF9tc2VjKHZvaWQpCit7CisJcmV0dXJuIHRpbWVyX3RpY2tzX3RvX21zZWModGltZXJfZ2V0X3RpY2tfY291bnQoKSk7Cit9CisKK0VYUE9SVF9TWU1CT0wodGltZXJfZ2V0X3RpY2tfY291bnQpOworRVhQT1JUX1NZTUJPTCh0aW1lcl90aWNrc190b19tc2VjKTsKK0VYUE9SVF9TWU1CT0wodGltZXJfZ2V0X3RpY2tfcmF0ZSk7CitFWFBPUlRfU1lNQk9MKHRpbWVyX2dldF9tc2VjKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Fkc3NwaGVyZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvYWRzc3BoZXJlLmMKaW5kZXggM2ZiZDliMC4uY2FmNmQ1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvYWRzc3BoZXJlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvYWRzc3BoZXJlLmMKQEAgLTEyLDE4ICsxMiwxNSBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKwogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKwogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCisKIHN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGFkc3NwaGVyZV9mbGFzaF9kYXRhID0gewogCS53aWR0aAkJPSA0LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCmluZGV4IDZjNGMxNjMuLjNkZDBlMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwpAQCAtMjIsNDggKzIyLDM5IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAKLS8qCi0gKiBUaGUgRVA5M3h4IGhhcyB0d28gZXh0ZXJuYWwgY3J5c3RhbCBvc2NpbGxhdG9ycy4gIFRvIGdlbmVyYXRlIHRoZQotICogcmVxdWlyZWQgaGlnaC1mcmVxdWVuY3kgY2xvY2tzLCB0aGUgcHJvY2Vzc29yIHVzZXMgdHdvIHBoYXNlLWxvY2tlZC0KLSAqIGxvb3BzIChQTExzKSB0byBtdWx0aXBseSB0aGUgaW5jb21pbmcgZXh0ZXJuYWwgY2xvY2sgc2lnbmFsIHRvIG11Y2gKLSAqIGhpZ2hlciBmcmVxdWVuY2llcyB0aGF0IGFyZSB0aGVuIGRpdmlkZWQgZG93biBieSBwcm9ncmFtbWFibGUgZGl2aWRlcnMKLSAqIHRvIHByb2R1Y2UgdGhlIG5lZWRlZCBjbG9ja3MuICBUaGUgUExMcyBvcGVyYXRlIGluZGVwZW5kZW50bHkgb2Ygb25lCi0gKiBhbm90aGVyLgotICovCi0jZGVmaW5lIEVQOTNYWF9FWFRfQ0xLX1JBVEUJMTQ3NDU2MDAKLSNkZWZpbmUgRVA5M1hYX0VYVF9SVENfUkFURQkzMjc2OAotCi0KIHN0cnVjdCBjbGsgewogCXVuc2lnbmVkIGxvbmcJcmF0ZTsKIAlpbnQJCXVzZXJzOwogCWludAkJc3dfbG9ja2VkOwotCXUzMgkJZW5hYmxlX3JlZzsKKwl2b2lkIF9faW9tZW0JKmVuYWJsZV9yZWc7CiAJdTMyCQllbmFibGVfbWFzazsKIAogCXVuc2lnbmVkIGxvbmcJKCpnZXRfcmF0ZSkoc3RydWN0IGNsayAqY2xrKTsKKwlpbnQJCSgqc2V0X3JhdGUpKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIH07CiAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VhcnRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspOwogCitzdGF0aWMgaW50IHNldF9rZXl0Y2hjbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CisKIAogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VhcnQxID0gewogCS5zd19sb2NrZWQJPSAxLAotCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHLAotCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJR19VMUVOLAorCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkcsCisJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkdfVTFFTiwKIAkuZ2V0X3JhdGUJPSBnZXRfdWFydF9yYXRlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa191YXJ0MiA9IHsKIAkuc3dfbG9ja2VkCT0gMSwKLQkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJRywKLQkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUdfVTJFTiwKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHLAorCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHX1UyRU4sCiAJLmdldF9yYXRlCT0gZ2V0X3VhcnRfcmF0ZSwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdWFydDMgPSB7CiAJLnN3X2xvY2tlZAk9IDEsCi0JLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUcsCi0JLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHX1UzRU4sCisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0RFVkNGRywKKwkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0RFVkNGR19VM0VOLAogCS5nZXRfcmF0ZQk9IGdldF91YXJ0X3JhdGUsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3BsbDE7CkBAIC03NSw2ICs2NiwxNSBAQAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfVVNIX0VOLAogfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19rZXlwYWQgPSB7CisJLnN3X2xvY2tlZAk9IDEsCisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJViwKKwkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9LRU4sCisJLnNldF9yYXRlCT0gc2V0X2tleXRjaGNsa19yYXRlLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wd20gPSB7CisJLnJhdGUJCT0gRVA5M1hYX0VYVF9DTEtfUkFURSwKK307CiAKIC8qIERNQSBDbG9ja3MgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAwID0gewpAQCAtMTMwLDI3ICsxMzAsMjkgQEAKIAl7IC5kZXZfaWQgPSBkZXYsIC5jb25faWQgPSBjb24sIC5jbGsgPSBjayB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBjbG9ja3NbXSA9IHsKLQlJTklUX0NLKCJhcGI6dWFydDEiLCBOVUxMLCAmY2xrX3VhcnQxKSwKLQlJTklUX0NLKCJhcGI6dWFydDIiLCBOVUxMLCAmY2xrX3VhcnQyKSwKLQlJTklUX0NLKCJhcGI6dWFydDMiLCBOVUxMLCAmY2xrX3VhcnQzKSwKLQlJTklUX0NLKE5VTEwsICJwbGwxIiwgJmNsa19wbGwxKSwKLQlJTklUX0NLKE5VTEwsICJmY2xrIiwgJmNsa19mKSwKLQlJTklUX0NLKE5VTEwsICJoY2xrIiwgJmNsa19oKSwKLQlJTklUX0NLKE5VTEwsICJwY2xrIiwgJmNsa19wKSwKLQlJTklUX0NLKE5VTEwsICJwbGwyIiwgJmNsa19wbGwyKSwKLQlJTklUX0NLKCJlcDkzeHgtb2hjaSIsIE5VTEwsICZjbGtfdXNiX2hvc3QpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDAiLCAmY2xrX20ycDApLAotCUlOSVRfQ0soTlVMTCwgIm0ycDEiLCAmY2xrX20ycDEpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDIiLCAmY2xrX20ycDIpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDMiLCAmY2xrX20ycDMpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDQiLCAmY2xrX20ycDQpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDUiLCAmY2xrX20ycDUpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDYiLCAmY2xrX20ycDYpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDciLCAmY2xrX20ycDcpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDgiLCAmY2xrX20ycDgpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDkiLCAmY2xrX20ycDkpLAotCUlOSVRfQ0soTlVMTCwgIm0ybTAiLCAmY2xrX20ybTApLAotCUlOSVRfQ0soTlVMTCwgIm0ybTEiLCAmY2xrX20ybTEpLAorCUlOSVRfQ0soImFwYjp1YXJ0MSIsCQlOVUxMLAkJJmNsa191YXJ0MSksCisJSU5JVF9DSygiYXBiOnVhcnQyIiwJCU5VTEwsCQkmY2xrX3VhcnQyKSwKKwlJTklUX0NLKCJhcGI6dWFydDMiLAkJTlVMTCwJCSZjbGtfdWFydDMpLAorCUlOSVRfQ0soTlVMTCwJCQkicGxsMSIsCQkmY2xrX3BsbDEpLAorCUlOSVRfQ0soTlVMTCwJCQkiZmNsayIsCQkmY2xrX2YpLAorCUlOSVRfQ0soTlVMTCwJCQkiaGNsayIsCQkmY2xrX2gpLAorCUlOSVRfQ0soTlVMTCwJCQkicGNsayIsCQkmY2xrX3ApLAorCUlOSVRfQ0soTlVMTCwJCQkicGxsMiIsCQkmY2xrX3BsbDIpLAorCUlOSVRfQ0soImVwOTN4eC1vaGNpIiwJCU5VTEwsCQkmY2xrX3VzYl9ob3N0KSwKKwlJTklUX0NLKCJlcDkzeHgta2V5cGFkIiwJTlVMTCwJCSZjbGtfa2V5cGFkKSwKKwlJTklUX0NLKE5VTEwsCQkJInB3bV9jbGsiLAkmY2xrX3B3bSksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnAwIiwJCSZjbGtfbTJwMCksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnAxIiwJCSZjbGtfbTJwMSksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnAyIiwJCSZjbGtfbTJwMiksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnAzIiwJCSZjbGtfbTJwMyksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnA0IiwJCSZjbGtfbTJwNCksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnA1IiwJCSZjbGtfbTJwNSksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnA2IiwJCSZjbGtfbTJwNiksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnA3IiwJCSZjbGtfbTJwNyksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnA4IiwJCSZjbGtfbTJwOCksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnA5IiwJCSZjbGtfbTJwOSksCisJSU5JVF9DSyhOVUxMLAkJCSJtMm0wIiwJCSZjbGtfbTJtMCksCisJSU5JVF9DSyhOVUxMLAkJCSJtMm0xIiwJCSZjbGtfbTJtMSksCiB9OwogCiAKQEAgLTE2MCw5ICsxNjIsMTEgQEAKIAkJdTMyIHZhbHVlOwogCiAJCXZhbHVlID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJdmFsdWUgfD0gY2xrLT5lbmFibGVfbWFzazsKIAkJaWYgKGNsay0+c3dfbG9ja2VkKQotCQkJX19yYXdfd3JpdGVsKDB4YWEsIEVQOTNYWF9TWVNDT05fU1dMT0NLKTsKLQkJX19yYXdfd3JpdGVsKHZhbHVlIHwgY2xrLT5lbmFibGVfbWFzaywgY2xrLT5lbmFibGVfcmVnKTsKKwkJCWVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUodmFsdWUsIGNsay0+ZW5hYmxlX3JlZyk7CisJCWVsc2UKKwkJCV9fcmF3X3dyaXRlbCh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE3NSw5ICsxNzksMTEgQEAKIAkJdTMyIHZhbHVlOwogCiAJCXZhbHVlID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJdmFsdWUgJj0gfmNsay0+ZW5hYmxlX21hc2s7CiAJCWlmIChjbGstPnN3X2xvY2tlZCkKLQkJCV9fcmF3X3dyaXRlbCgweGFhLCBFUDkzWFhfU1lTQ09OX1NXTE9DSyk7Ci0JCV9fcmF3X3dyaXRlbCh2YWx1ZSAmIH5jbGstPmVuYWJsZV9tYXNrLCBjbGstPmVuYWJsZV9yZWcpOworCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKKwkJZWxzZQorCQkJX19yYXdfd3JpdGVsKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOwpAQCAtMjAyLDYgKzIwOCw0MyBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwogCitzdGF0aWMgaW50IHNldF9rZXl0Y2hjbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgdmFsOworCXUzMiBkaXZfYml0OworCisJdmFsID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKworCS8qCisJICogVGhlIEtleSBNYXRyaXggYW5kIEFEQyBjbG9ja3MgYXJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIHNhbWUKKwkgKiBTeXN0ZW0gQ29udHJvbGxlciByZWdpc3Rlci4gIFRoZSBjbG9jayB1c2VkIHdpbGwgYmUgZWl0aGVyCisJICogMS80IG9yIDEvMTYgdGhlIGV4dGVybmFsIGNsb2NrIHJhdGUgZGVwZW5kaW5nIG9uIHRoZQorCSAqIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tESVYvRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfQURJVgorCSAqIGJpdCBiZWluZyBzZXQgb3IgY2xlYXJlZC4KKwkgKi8KKwlkaXZfYml0ID0gY2xrLT5lbmFibGVfbWFzayA+PiAxNTsKKworCWlmIChyYXRlID09IEVQOTNYWF9LRVlUQ0hDTEtfRElWNCkKKwkJdmFsIHw9IGRpdl9iaXQ7CisJZWxzZSBpZiAocmF0ZSA9PSBFUDkzWFhfS0VZVENIQ0xLX0RJVjE2KQorCQl2YWwgJj0gfmRpdl9iaXQ7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUodmFsLCBjbGstPmVuYWJsZV9yZWcpOworCWNsay0+cmF0ZSA9IHJhdGU7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaWYgKGNsay0+c2V0X3JhdGUpCisJCXJldHVybiBjbGstPnNldF9yYXRlKGNsaywgcmF0ZSk7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKKwogCiBzdGF0aWMgY2hhciBmY2xrX2Rpdmlzb3JzW10gPSB7IDEsIDIsIDQsIDgsIDE2LCAxLCAxLCAxIH07CiBzdGF0aWMgY2hhciBoY2xrX2Rpdmlzb3JzW10gPSB7IDEsIDIsIDQsIDUsIDYsIDgsIDE2LCAzMiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCmluZGV4IDIwNGRjNWMuLjE2YjkyYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKQEAgLTE2LDQwICsxNiwyNCBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CiAKQEAgLTk4LDcgKzgyLDcgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBsYXN0X2ppZmZ5X3RpbWU7CiAKLSNkZWZpbmUgVElNRVI0X1RJQ0tTX1BFUl9KSUZGWQkJKChDTE9DS19USUNLX1JBVEUgKyAoSFovMikpIC8gSFopCisjZGVmaW5lIFRJTUVSNF9USUNLU19QRVJfSklGRlkJCURJVl9ST1VORF9DTE9TRVNUKENMT0NLX1RJQ0tfUkFURSwgSFopCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBlcDkzeHhfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKQEAgLTM2Miw4ICszNDYsOCBAQAogewogCWludCBncGlvX2lycTsKIAotCXZpY19pbml0KCh2b2lkICopRVA5M1hYX1ZJQzFfQkFTRSwgMCwgRVA5M1hYX1ZJQzFfVkFMSURfSVJRX01BU0ssIDApOwotCXZpY19pbml0KCh2b2lkICopRVA5M1hYX1ZJQzJfQkFTRSwgMzIsIEVQOTNYWF9WSUMyX1ZBTElEX0lSUV9NQVNLLCAwKTsKKwl2aWNfaW5pdChFUDkzWFhfVklDMV9CQVNFLCAwLCBFUDkzWFhfVklDMV9WQUxJRF9JUlFfTUFTSywgMCk7CisJdmljX2luaXQoRVA5M1hYX1ZJQzJfQkFTRSwgMzIsIEVQOTNYWF9WSUMyX1ZBTElEX0lSUV9NQVNLLCAwKTsKIAogCWZvciAoZ3Bpb19pcnEgPSBncGlvX3RvX2lycSgwKTsKIAkgICAgIGdwaW9faXJxIDw9IGdwaW9fdG9faXJxKEVQOTNYWF9HUElPX0xJTkVfTUFYX0lSUSk7ICsrZ3Bpb19pcnEpIHsKQEAgLTM4NSw2ICszNjksNDcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRVA5M3h4IFN5c3RlbSBDb250cm9sbGVyIFNvZnR3YXJlIExvY2tlZCByZWdpc3RlciBoYW5kbGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzeXNjb25fc3dsb2NrIHByZXZlbnRzIGFueXRoaW5nIGVsc2UgZnJvbSB3cml0aW5nIHRvIHRoZSBzeXNjb24KKyAqIGJsb2NrIHdoaWxlIGEgc29mdHdhcmUgbG9ja2VkIHJlZ2lzdGVyIGlzIGJlaW5nIHdyaXR0ZW4uCisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc3lzY29uX3N3bG9jayk7CisKK3ZvaWQgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh1bnNpZ25lZCBpbnQgdmFsLCB2b2lkIF9faW9tZW0gKnJlZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN5c2Nvbl9zd2xvY2ssIGZsYWdzKTsKKworCV9fcmF3X3dyaXRlbCgweGFhLCBFUDkzWFhfU1lTQ09OX1NXTE9DSyk7CisJX19yYXdfd3JpdGVsKHZhbCwgcmVnKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5c2Nvbl9zd2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSk7CisKK3ZvaWQgZXA5M3h4X2RldmNmZ19zZXRfY2xlYXIodW5zaWduZWQgaW50IHNldF9iaXRzLCB1bnNpZ25lZCBpbnQgY2xlYXJfYml0cykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3lzY29uX3N3bG9jaywgZmxhZ3MpOworCisJdmFsID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9ERVZDRkcpOworCXZhbCB8PSBzZXRfYml0czsKKwl2YWwgJj0gfmNsZWFyX2JpdHM7CisJX19yYXdfd3JpdGVsKDB4YWEsIEVQOTNYWF9TWVNDT05fU1dMT0NLKTsKKwlfX3Jhd193cml0ZWwodmFsLCBFUDkzWFhfU1lTQ09OX0RFVkNGRyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeXNjb25fc3dsb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGVwOTN4eF9kZXZjZmdfc2V0X2NsZWFyKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogRVA5M3h4IHBlcmlwaGVyYWwgaGFuZGxpbmcKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBFUDkzWFhfVUFSVF9NQ1JfT0ZGU0VUCQkoMHgwMTAwKQpAQCAtNTE3LDEwICs1NDIsOCBAQAogCiB2b2lkIF9faW5pdCBlcDkzeHhfcmVnaXN0ZXJfZXRoKHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgKmRhdGEsIGludCBjb3B5X2FkZHIpCiB7Ci0JaWYgKGNvcHlfYWRkcikgewotCQltZW1jcHkoZGF0YS0+ZGV2X2FkZHIsCi0JCQkodm9pZCAqKShFUDkzWFhfRVRIRVJORVRfQkFTRSArIDB4NTApLCA2KTsKLQl9CisJaWYgKGNvcHlfYWRkcikKKwkJbWVtY3B5X2Zyb21pbyhkYXRhLT5kZXZfYWRkciwgRVA5M1hYX0VUSEVSTkVUX0JBU0UgKyAweDUwLCA2KTsKIAogCWVwOTN4eF9ldGhfZGF0YSA9ICpkYXRhOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXA5M3h4X2V0aF9kZXZpY2UpOwpAQCAtNTQ2LDE5ICs1NjksMTI1IEBACiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfaTJjX2RldmljZSk7CiB9CiAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVQOTN4eCBMRURzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZXA5M3h4X2xlZF9waW5zW10gPSB7CisJeworCQkubmFtZQkJCT0gInBsYXRmb3JtOmdybGVkIiwKKwkJLmdwaW8JCQk9IEVQOTNYWF9HUElPX0xJTkVfR1JMRUQsCisJfSwgeworCQkubmFtZQkJCT0gInBsYXRmb3JtOnJkbGVkIiwKKwkJLmdwaW8JCQk9IEVQOTNYWF9HUElPX0xJTkVfUkRMRUQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBlcDkzeHhfbGVkX2RhdGEgPSB7CisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShlcDkzeHhfbGVkX3BpbnMpLAorCS5sZWRzCQk9IGVwOTN4eF9sZWRfcGlucywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVwOTN4eF9sZWRzID0geworCS5uYW1lCQk9ICJsZWRzLWdwaW8iLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZXA5M3h4X2xlZF9kYXRhLAorCX0sCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFUDkzeHggcHdtIHBlcmlwaGVyYWwgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlcDkzeHhfcHdtMF9yZXNvdXJjZVtdID0geworCXsKKwkJLnN0YXJ0CT0gRVA5M1hYX1BXTV9QSFlTX0JBU0UsCisJCS5lbmQJPSBFUDkzWFhfUFdNX1BIWVNfQkFTRSArIDB4MTAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X3B3bTBfZGV2aWNlID0geworCS5uYW1lCQk9ICJlcDkzeHgtcHdtIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZXA5M3h4X3B3bTBfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IGVwOTN4eF9wd20wX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlcDkzeHhfcHdtMV9yZXNvdXJjZVtdID0geworCXsKKwkJLnN0YXJ0CT0gRVA5M1hYX1BXTV9QSFlTX0JBU0UgKyAweDIwLAorCQkuZW5kCT0gRVA5M1hYX1BXTV9QSFlTX0JBU0UgKyAweDMwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVwOTN4eF9wd20xX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZXA5M3h4LXB3bSIsCisJLmlkCQk9IDEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGVwOTN4eF9wd20xX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBlcDkzeHhfcHdtMV9yZXNvdXJjZSwKK307CisKK3ZvaWQgX19pbml0IGVwOTN4eF9yZWdpc3Rlcl9wd20oaW50IHB3bTAsIGludCBwd20xKQoreworCWlmIChwd20wKQorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9wd20wX2RldmljZSk7CisKKwkvKiBOT1RFOiBFUDkzMDcgZG9lcyBub3QgaGF2ZSBQV01PVVQxIChwaW4gRUdQSU8xNCkgKi8KKwlpZiAocHdtMSkKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfcHdtMV9kZXZpY2UpOworfQorCitpbnQgZXA5M3h4X3B3bV9hY3F1aXJlX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgZXJyOworCisJaWYgKHBkZXYtPmlkID09IDApIHsKKwkJZXJyID0gMDsKKwl9IGVsc2UgaWYgKHBkZXYtPmlkID09IDEpIHsKKwkJZXJyID0gZ3Bpb19yZXF1ZXN0KEVQOTNYWF9HUElPX0xJTkVfRUdQSU8xNCwKKwkJCQkgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoRVA5M1hYX0dQSU9fTElORV9FR1BJTzE0LCAwKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZmFpbDsKKworCQkvKiBQV00gMSBvdXRwdXQgb24gRUdQSU9bMTRdICovCisJCWVwOTN4eF9kZXZjZmdfc2V0X2JpdHMoRVA5M1hYX1NZU0NPTl9ERVZDRkdfUE9ORyk7CisJfSBlbHNlIHsKKwkJZXJyID0gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gZXJyOworCitmYWlsOgorCWdwaW9fZnJlZShFUDkzWFhfR1BJT19MSU5FX0VHUElPMTQpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKGVwOTN4eF9wd21fYWNxdWlyZV9ncGlvKTsKKwordm9pZCBlcDkzeHhfcHdtX3JlbGVhc2VfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWlmIChwZGV2LT5pZCA9PSAxKSB7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KEVQOTNYWF9HUElPX0xJTkVfRUdQSU8xNCk7CisJCWdwaW9fZnJlZShFUDkzWFhfR1BJT19MSU5FX0VHUElPMTQpOworCisJCS8qIEVHUElPWzE0XSB1c2VkIGZvciBHUElPICovCisJCWVwOTN4eF9kZXZjZmdfY2xlYXJfYml0cyhFUDkzWFhfU1lTQ09OX0RFVkNGR19QT05HKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGVwOTN4eF9wd21fcmVsZWFzZV9ncGlvKTsKKworCiBleHRlcm4gdm9pZCBlcDkzeHhfZ3Bpb19pbml0KHZvaWQpOwogCiB2b2lkIF9faW5pdCBlcDkzeHhfaW5pdF9kZXZpY2VzKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQkvKgotCSAqIERpc2FsbG93IGFjY2VzcyB0byBNYXZlcmlja0NydW5jaCBpbml0aWFsbHkuCi0JICovCi0JdiA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJRyk7Ci0JdiAmPSB+RVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHX0NSVU5DSF9FTkFCTEU7Ci0JX19yYXdfd3JpdGVsKDB4YWEsIEVQOTNYWF9TWVNDT05fU1dMT0NLKTsKLQlfX3Jhd193cml0ZWwodiwgRVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHKTsKKwkvKiBEaXNhbGxvdyBhY2Nlc3MgdG8gTWF2ZXJpY2tDcnVuY2ggaW5pdGlhbGx5ICovCisJZXA5M3h4X2RldmNmZ19jbGVhcl9iaXRzKEVQOTNYWF9TWVNDT05fREVWQ0ZHX0NQRU5BKTsKIAogCWVwOTN4eF9ncGlvX2luaXQoKTsKIApAQCAtNTY4LDQgKzY5Nyw1IEBACiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9ydGNfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9vaGNpX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfbGVkcyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKaW5kZXggZTllNDViOS4uNzMxNDVhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwpAQCAtMjYsMTggKzI2LDE2IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKKwogc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZWRiOTN4eF9mbGFzaF9kYXRhOwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGVkYjkzeHhfZmxhc2hfcmVzb3VyY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9nZXNiYzkzMTIuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dlc2JjOTMxMi5jCmluZGV4IDNiYWQ1MDAuLjNkYTdjYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dlc2JjOTMxMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dlc2JjOTMxMi5jCkBAIC0xMiwxOCArMTIsMTUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAorCiBzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBnZXNiYzkzMTJfZmxhc2hfZGF0YSA9IHsKIAkud2lkdGgJCT0gNCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKaW5kZXggNDgyY2YzZC4uMWVhODg3MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYwpAQCAtMTcsMTUgKzE3LDE2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvZXA5M3h4LXJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogc3RydWN0IGVwOTN4eF9ncGlvX2NoaXAgewogCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKIAotCXVuc2lnbmVkIGludAkJZGF0YV9yZWc7Ci0JdW5zaWduZWQgaW50CQlkYXRhX2Rpcl9yZWc7CisJdm9pZCBfX2lvbWVtCQkqZGF0YV9yZWc7CisJdm9pZCBfX2lvbWVtCQkqZGF0YV9kaXJfcmVnOwogfTsKIAogI2RlZmluZSB0b19lcDkzeHhfZ3Bpb19jaGlwKGMpIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgZXA5M3h4X2dwaW9fY2hpcCwgY2hpcCkKQEAgLTExMSwxNSArMTEyLDYxIEBACiB7CiAJc3RydWN0IGVwOTN4eF9ncGlvX2NoaXAgKmVwOTN4eF9jaGlwID0gdG9fZXA5M3h4X2dwaW9fY2hpcChjaGlwKTsKIAl1OCBkYXRhX3JlZywgZGF0YV9kaXJfcmVnOwotCWludCBpOworCWludCBncGlvLCBpOwogCiAJZGF0YV9yZWcgPSBfX3Jhd19yZWFkYihlcDkzeHhfY2hpcC0+ZGF0YV9yZWcpOwogCWRhdGFfZGlyX3JlZyA9IF9fcmF3X3JlYWRiKGVwOTN4eF9jaGlwLT5kYXRhX2Rpcl9yZWcpOwogCi0JZm9yIChpID0gMDsgaSA8IGNoaXAtPm5ncGlvOyBpKyspCi0JCXNlcV9wcmludGYocywgIkdQSU8gJXMlZDogJXMgJXNcbiIsIGNoaXAtPmxhYmVsLCBpLAotCQkJICAgKGRhdGFfcmVnICYgKDEgPDwgaSkpID8gInNldCIgOiAiY2xlYXIiLAotCQkJICAgKGRhdGFfZGlyX3JlZyAmICgxIDw8IGkpKSA/ICJvdXQiIDogImluIik7CisJZ3BpbyA9IGVwOTN4eF9jaGlwLT5jaGlwLmJhc2U7CisJZm9yIChpID0gMDsgaSA8IGNoaXAtPm5ncGlvOyBpKyssIGdwaW8rKykgeworCQlpbnQgaXNfb3V0ID0gZGF0YV9kaXJfcmVnICYgKDEgPDwgaSk7CisKKwkJc2VxX3ByaW50ZihzLCAiICVzJWQgZ3Bpby0lLTNkICglLTEycykgJXMgJXMiLAorCQkJCWNoaXAtPmxhYmVsLCBpLCBncGlvLAorCQkJCWdwaW9jaGlwX2lzX3JlcXVlc3RlZChjaGlwLCBpKSA/IDogIiIsCisJCQkJaXNfb3V0ID8gIm91dCIgOiAiaW4gIiwKKwkJCQkoZGF0YV9yZWcgJiAoMSA8PCBpKSkgPyAiaGkiIDogImxvIik7CisKKwkJaWYgKCFpc19vdXQpIHsKKwkJCWludCBpcnEgPSBncGlvX3RvX2lycShncGlvKTsKKwkJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCisJCQlpZiAoaXJxID49IDAgJiYgZGVzYy0+YWN0aW9uKSB7CisJCQkJY2hhciAqdHJpZ2dlcjsKKworCQkJCXN3aXRjaCAoZGVzYy0+c3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgeworCQkJCWNhc2UgSVJRX1RZUEVfTk9ORToKKwkJCQkJdHJpZ2dlciA9ICIoZGVmYXVsdCkiOworCQkJCQlicmVhazsKKwkJCQljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKKwkJCQkJdHJpZ2dlciA9ICJlZGdlLWZhbGxpbmciOworCQkJCQlicmVhazsKKwkJCQljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgorCQkJCQl0cmlnZ2VyID0gImVkZ2UtcmlzaW5nIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6CisJCQkJCXRyaWdnZXIgPSAiZWRnZS1ib3RoIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQkJCQl0cmlnZ2VyID0gImxldmVsLWhpZ2giOworCQkJCQlicmVhazsKKwkJCQljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKKwkJCQkJdHJpZ2dlciA9ICJsZXZlbC1sb3ciOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQl0cmlnZ2VyID0gIj90cmlnZ2VyPyI7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXNlcV9wcmludGYocywgIiBpcnEtJWQgJXMlcyIsCisJCQkJCQlpcnEsIHRyaWdnZXIsCisJCQkJCQkoZGVzYy0+c3RhdHVzICYgSVJRX1dBS0VVUCkKKwkJCQkJCQk/ICIgd2FrZXVwIiA6ICIiKTsKKwkJCX0KKwkJfQorCisJCXNlcV9wcmludGYocywgIlxuIik7CisJfQogfQogCiAjZGVmaW5lIEVQOTNYWF9HUElPX0JBTksobmFtZSwgZHIsIGRkciwgYmFzZV9ncGlvKQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eC1yZWdzLmgKaW5kZXggOTY3YzA3OS4uZWE3OGU5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eC1yZWdzLmgKQEAgLTUyLDQwICs1Miw0MyBAQAogI2RlZmluZSBFUDkzWFhfQUhCX1ZJUlRfQkFTRQkJMHhmZWYwMDAwMAogI2RlZmluZSBFUDkzWFhfQUhCX1NJWkUJCQkweDAwMTAwMDAwCiAKKyNkZWZpbmUgRVA5M1hYX0FIQl9JT01FTSh4KQkJSU9NRU0oRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAoeCkpCisKICNkZWZpbmUgRVA5M1hYX0FQQl9QSFlTX0JBU0UJCTB4ODA4MDAwMDAKICNkZWZpbmUgRVA5M1hYX0FQQl9WSVJUX0JBU0UJCTB4ZmVkMDAwMDAKICNkZWZpbmUgRVA5M1hYX0FQQl9TSVpFCQkJMHgwMDIwMDAwMAogCisjZGVmaW5lIEVQOTNYWF9BUEJfSU9NRU0oeCkJCUlPTUVNKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgKHgpKQorCiAKIC8qIEFIQiBwZXJpcGhlcmFscyAqLwotI2RlZmluZSBFUDkzWFhfRE1BX0JBU0UJCQkoKHZvaWQgX19pb21lbSAqKQkJXAotCQkJCQkgKEVQOTNYWF9BSEJfVklSVF9CQVNFICsgMHgwMDAwMDAwMCkpCisjZGVmaW5lIEVQOTNYWF9ETUFfQkFTRQkJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAwMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfQkFTRQkJKEVQOTNYWF9BSEJfVklSVF9CQVNFICsgMHgwMDAxMDAwMCkKICNkZWZpbmUgRVA5M1hYX0VUSEVSTkVUX1BIWVNfQkFTRQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDEwMDAwKQorI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfQkFTRQkJRVA5M1hYX0FIQl9JT01FTSgweDAwMDEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9VU0JfQkFTRQkJCShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArIDB4MDAwMjAwMDApCiAjZGVmaW5lIEVQOTNYWF9VU0JfUEhZU19CQVNFCQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDIwMDAwKQorI2RlZmluZSBFUDkzWFhfVVNCX0JBU0UJCQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwMjAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1JBU1RFUl9CQVNFCQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDMwMDAwKQorI2RlZmluZSBFUDkzWFhfUkFTVEVSX0JBU0UJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAzMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfR1JBUEhJQ1NfQUNDRUxfQkFTRQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDQwMDAwKQorI2RlZmluZSBFUDkzWFhfR1JBUEhJQ1NfQUNDRUxfQkFTRQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwNDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1NEUkFNX0NPTlRST0xMRVJfQkFTRQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDYwMDAwKQorI2RlZmluZSBFUDkzWFhfU0RSQU1fQ09OVFJPTExFUl9CQVNFCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDA2MDAwMCkKIAotI2RlZmluZSBFUDkzWFhfUENNQ0lBX0NPTlRST0xMRVJfQkFTRQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDgwMDAwKQorI2RlZmluZSBFUDkzWFhfUENNQ0lBX0NPTlRST0xMRVJfQkFTRQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwODAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX0JPT1RfUk9NX0JBU0UJCShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArIDB4MDAwOTAwMDApCisjZGVmaW5lIEVQOTNYWF9CT09UX1JPTV9CQVNFCQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwOTAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX0lERV9CQVNFCQkJKEVQOTNYWF9BSEJfVklSVF9CQVNFICsgMHgwMDBhMDAwMCkKKyNkZWZpbmUgRVA5M1hYX0lERV9CQVNFCQkJRVA5M1hYX0FIQl9JT01FTSgweDAwMGEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9WSUMxX0JBU0UJCShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArIDB4MDAwYjAwMDApCisjZGVmaW5lIEVQOTNYWF9WSUMxX0JBU0UJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDBiMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVklDMl9CQVNFCQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMGMwMDAwKQorI2RlZmluZSBFUDkzWFhfVklDMl9CQVNFCQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwYzAwMDApCiAKIAogLyogQVBCIHBlcmlwaGVyYWxzICovCi0jZGVmaW5lIEVQOTNYWF9USU1FUl9CQVNFCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMDEwMDAwKQorI2RlZmluZSBFUDkzWFhfVElNRVJfQkFTRQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMDEwMDAwKQogI2RlZmluZSBFUDkzWFhfVElNRVJfUkVHKHgpCQkoRVA5M1hYX1RJTUVSX0JBU0UgKyAoeCkpCiAjZGVmaW5lIEVQOTNYWF9USU1FUjFfTE9BRAkJRVA5M1hYX1RJTUVSX1JFRygweDAwKQogI2RlZmluZSBFUDkzWFhfVElNRVIxX1ZBTFVFCQlFUDkzWFhfVElNRVJfUkVHKDB4MDQpCkBAIC0xMDIsMTEgKzEwNSwxMSBAQAogI2RlZmluZSBFUDkzWFhfVElNRVIzX0NPTlRST0wJCUVQOTNYWF9USU1FUl9SRUcoMHg4OCkKICNkZWZpbmUgRVA5M1hYX1RJTUVSM19DTEVBUgkJRVA5M1hYX1RJTUVSX1JFRygweDhjKQogCi0jZGVmaW5lIEVQOTNYWF9JMlNfQkFTRQkJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwMjAwMDApCisjZGVmaW5lIEVQOTNYWF9JMlNfQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDAyMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfU0VDVVJJVFlfQkFTRQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDAzMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1NFQ1VSSVRZX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDAzMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfR1BJT19CQVNFCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMDQwMDAwKQorI2RlZmluZSBFUDkzWFhfR1BJT19CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwNDAwMDApCiAjZGVmaW5lIEVQOTNYWF9HUElPX1JFRyh4KQkJKEVQOTNYWF9HUElPX0JBU0UgKyAoeCkpCiAjZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX1RZUEUxCQlFUDkzWFhfR1BJT19SRUcoMHg0YykKICNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfVFlQRTIJCUVQOTNYWF9HUElPX1JFRygweDUwKQpAQCAtMTI0LDMyICsxMjcsMzMgQEAKICNkZWZpbmUgRVA5M1hYX0dQSU9fQl9JTlRfRU5BQkxFCUVQOTNYWF9HUElPX1JFRygweGI4KQogI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9TVEFUVVMJRVA5M1hYX0dQSU9fUkVHKDB4YmMpCiAKLSNkZWZpbmUgRVA5M1hYX0FBQ19CQVNFCQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDA4MDAwMCkKKyNkZWZpbmUgRVA5M1hYX0FBQ19CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMDgwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9TUElfQkFTRQkJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwYTAwMDApCisjZGVmaW5lIEVQOTNYWF9TUElfQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBhMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfSVJEQV9CQVNFCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMGIwMDAwKQorI2RlZmluZSBFUDkzWFhfSVJEQV9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwYjAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1VBUlQxX0JBU0UJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwYzAwMDApCiAjZGVmaW5lIEVQOTNYWF9VQVJUMV9QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAwYzAwMDApCisjZGVmaW5lIEVQOTNYWF9VQVJUMV9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwYzAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1VBUlQyX0JBU0UJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwZDAwMDApCiAjZGVmaW5lIEVQOTNYWF9VQVJUMl9QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAwZDAwMDApCisjZGVmaW5lIEVQOTNYWF9VQVJUMl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwZDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1VBUlQzX0JBU0UJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwZTAwMDApCiAjZGVmaW5lIEVQOTNYWF9VQVJUM19QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAwZTAwMDApCisjZGVmaW5lIEVQOTNYWF9VQVJUM19CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwZTAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX0tFWV9NQVRSSVhfQkFTRQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDBmMDAwMCkKKyNkZWZpbmUgRVA5M1hYX0tFWV9NQVRSSVhfQkFTRQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMGYwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9BRENfQkFTRQkJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAxMDAwMDApCi0jZGVmaW5lIEVQOTNYWF9UT1VDSFNDUkVFTl9CQVNFCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMTAwMDAwKQorI2RlZmluZSBFUDkzWFhfQURDX0JBU0UJCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCisjZGVmaW5lIEVQOTNYWF9UT1VDSFNDUkVFTl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1BXTV9CQVNFCQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDExMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1BXTV9QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAxMTAwMDApCisjZGVmaW5lIEVQOTNYWF9QV01fQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDExMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfUlRDX0JBU0UJCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMTIwMDAwKQogI2RlZmluZSBFUDkzWFhfUlRDX1BIWVNfQkFTRQkJKEVQOTNYWF9BUEJfUEhZU19CQVNFICsgMHgwMDEyMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1JUQ19CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMTIwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9TWVNDT05fQkFTRQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDEzMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMzAwMDApCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fUkVHKHgpCQkoRVA5M1hYX1NZU0NPTl9CQVNFICsgKHgpKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX1BPV0VSX1NUQVRFCUVQOTNYWF9TWVNDT05fUkVHKDB4MDApCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fUFdSQ05UCQlFUDkzWFhfU1lTQ09OX1JFRygweDA0KQpAQCAtMTcyLDE0ICsxNzYsNDUgQEAKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TVEFOREJZCQlFUDkzWFhfU1lTQ09OX1JFRygweDBjKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0NMT0NLX1NFVDEJRVA5M1hYX1NZU0NPTl9SRUcoMHgyMCkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTE9DS19TRVQyCUVQOTNYWF9TWVNDT05fUkVHKDB4MjQpCi0jZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJRwlFUDkzWFhfU1lTQ09OX1JFRygweDgwKQotI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUdfVTNFTgkJKDE8PDI0KQotI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUdfQ1JVTkNIX0VOQUJMRQkoMTw8MjMpCi0jZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJR19VMkVOCQkoMTw8MjApCi0jZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJR19VMUVOCQkoMTw8MTgpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHCQlFUDkzWFhfU1lTQ09OX1JFRygweDgwKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19TV1JTVAkoMTw8MzEpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0QxT05HCSgxPDwzMCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfRDBPTkcJKDE8PDI5KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19JT05VMgkoMTw8MjgpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0dPTksJKDE8PDI3KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19UT05HCSgxPDwyNikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfTU9ORwkoMTw8MjUpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX1UzRU4JKDE8PDI0KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19DUEVOQQkoMTw8MjMpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0EyT05HCSgxPDwyMikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfQTFPTkcJKDE8PDIxKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19VMkVOCSgxPDwyMCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfRVhWQwkoMTw8MTkpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX1UxRU4JKDE8PDE4KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19USU4JKDE8PDE3KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19IQzNJTgkoMTw8MTUpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0hDM0VOCSgxPDwxNCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfSEMxSU4JKDE8PDEzKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19IQzFFTgkoMTw8MTIpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0hPTklERQkoMTw8MTEpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0dPTklERQkoMTw8MTApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX1BPTkcJKDE8PDkpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0VPTklERQkoMTw8OCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfSTJTT05TU1AJKDE8PDcpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0kyU09OQUM5NwkoMTw8NikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfUkFTT05QMwkoMTw8NCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfUkFTCSgxPDwzKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19BRENQRAkoMTw8MikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfS0VZUwkoMTw8MSkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfU0hFTkEJKDE8PDApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWCUVQOTNYWF9TWVNDT05fUkVHKDB4OTApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX1RTRU4JKDE8PDMxKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9BRElWCSgxPDwxNikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfS0VOCSgxPDwxNSkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfS0RJVgkoMTw8MCkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TV0xPQ0sJCUVQOTNYWF9TWVNDT05fUkVHKDB4YzApCiAKLSNkZWZpbmUgRVA5M1hYX1dBVENIRE9HX0JBU0UJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAxNDAwMDApCisjZGVmaW5lIEVQOTNYWF9XQVRDSERPR19CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxNDAwMDApCiAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDI4NjYyOTcuLjM0OWZhN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC00LDEyICs0LDIzIEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKIAotI2luY2x1ZGUgImVwOTN4eC1yZWdzLmgiCisjaW5jbHVkZSA8bWFjaC9lcDkzeHgtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KIAogI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkJMAogCi0jaW5jbHVkZSAicGxhdGZvcm0uaCIKKy8qCisgKiBUaGUgRVA5M3h4IGhhcyB0d28gZXh0ZXJuYWwgY3J5c3RhbCBvc2NpbGxhdG9ycy4gIFRvIGdlbmVyYXRlIHRoZQorICogcmVxdWlyZWQgaGlnaC1mcmVxdWVuY3kgY2xvY2tzLCB0aGUgcHJvY2Vzc29yIHVzZXMgdHdvIHBoYXNlLWxvY2tlZC0KKyAqIGxvb3BzIChQTExzKSB0byBtdWx0aXBseSB0aGUgaW5jb21pbmcgZXh0ZXJuYWwgY2xvY2sgc2lnbmFsIHRvIG11Y2gKKyAqIGhpZ2hlciBmcmVxdWVuY2llcyB0aGF0IGFyZSB0aGVuIGRpdmlkZWQgZG93biBieSBwcm9ncmFtbWFibGUgZGl2aWRlcnMKKyAqIHRvIHByb2R1Y2UgdGhlIG5lZWRlZCBjbG9ja3MuICBUaGUgUExMcyBvcGVyYXRlIGluZGVwZW5kZW50bHkgb2Ygb25lCisgKiBhbm90aGVyLgorICovCisjZGVmaW5lIEVQOTNYWF9FWFRfQ0xLX1JBVEUJMTQ3NDU2MDAKKyNkZWZpbmUgRVA5M1hYX0VYVF9SVENfUkFURQkzMjc2OAogCi0jaW5jbHVkZSAidHM3Mnh4LmgiCisjZGVmaW5lIEVQOTNYWF9LRVlUQ0hDTEtfRElWNAkoRVA5M1hYX0VYVF9DTEtfUkFURSAvIDQpCisjZGVmaW5lIEVQOTNYWF9LRVlUQ0hDTEtfRElWMTYJKEVQOTNYWF9FWFRfQ0xLX1JBVEUgLyAxNikKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGZkNWYwODEuLmNlYmNjMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9pby5oCkBAIC0xLDggKzEsMjEgQEAKIC8qCiAgKiBhcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvaW8uaAogICovCisjaWZuZGVmIF9fQVNNX01BQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9NQUNIX0lPX0gKIAogI2RlZmluZSBJT19TUEFDRV9MSU1JVAkJMHhmZmZmZmZmZgogCi0jZGVmaW5lIF9faW8ocCkJCV9fdHlwZXNhZmVfaW8ocCkKLSNkZWZpbmUgX19tZW1fcGNpKHApCShwKQorI2RlZmluZSBfX2lvKHApCQkJX190eXBlc2FmZV9pbyhwKQorI2RlZmluZSBfX21lbV9wY2kocCkJCShwKQorCisvKgorICogQSB0eXBlc2FmZSBfX2lvKCkgdmFyaWF0aW9uIGZvciB2YXJpYWJsZSBpbml0aWFsaXNlcnMKKyAqLworI2lmZGVmIF9fQVNTRU1CTEVSX18KKyNkZWZpbmUgSU9NRU0ocCkJCXAKKyNlbHNlCisjZGVmaW5lIElPTUVNKHApCQkoKHZvaWQgX19pb21lbSBfX2ZvcmNlICopKHApKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKaW5kZXggMDVmMGY0Zi4uNWY1ZmE2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKQEAgLTUsNiArNSw3IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiBzdHJ1Y3QgaTJjX2JvYXJkX2luZm87CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogCiBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhCiB7CkBAIC0xNSw4ICsxNiwyNyBAQAogdm9pZCBlcDkzeHhfbWFwX2lvKHZvaWQpOwogdm9pZCBlcDkzeHhfaW5pdF9pcnEodm9pZCk7CiB2b2lkIGVwOTN4eF9pbml0X3RpbWUodW5zaWduZWQgbG9uZyk7CisKKy8qIEVQOTN4eCBTeXN0ZW0gQ29udHJvbGxlciBzb2Z0d2FyZSBsb2NrZWQgcmVnaXN0ZXIgd3JpdGUgKi8KK3ZvaWQgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh1bnNpZ25lZCBpbnQgdmFsLCB2b2lkIF9faW9tZW0gKnJlZyk7Cit2b2lkIGVwOTN4eF9kZXZjZmdfc2V0X2NsZWFyKHVuc2lnbmVkIGludCBzZXRfYml0cywgdW5zaWduZWQgaW50IGNsZWFyX2JpdHMpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZXA5M3h4X2RldmNmZ19zZXRfYml0cyh1bnNpZ25lZCBpbnQgYml0cykKK3sKKwllcDkzeHhfZGV2Y2ZnX3NldF9jbGVhcihiaXRzLCAweDAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVwOTN4eF9kZXZjZmdfY2xlYXJfYml0cyh1bnNpZ25lZCBpbnQgYml0cykKK3sKKwllcDkzeHhfZGV2Y2ZnX3NldF9jbGVhcigweDAwLCBiaXRzKTsKK30KKwogdm9pZCBlcDkzeHhfcmVnaXN0ZXJfZXRoKHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgKmRhdGEsIGludCBjb3B5X2FkZHIpOwogdm9pZCBlcDkzeHhfcmVnaXN0ZXJfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG51bSk7Cit2b2lkIGVwOTN4eF9yZWdpc3Rlcl9wd20oaW50IHB3bTAsIGludCBwd20xKTsKK2ludCBlcDkzeHhfcHdtX2FjcXVpcmVfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK3ZvaWQgZXA5M3h4X3B3bV9yZWxlYXNlX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisKIHZvaWQgZXA5M3h4X2luaXRfZGV2aWNlcyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGVwOTN4eF90aW1lcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGVkOGYzNWUuLjZkNjYxZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTExLDE1ICsxMSwxMyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKLQl1MzIgZGV2aWNlY2ZnOwotCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotCWRldmljZWNmZyA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJRyk7Ci0JX19yYXdfd3JpdGVsKDB4YWEsIEVQOTNYWF9TWVNDT05fU1dMT0NLKTsKLQlfX3Jhd193cml0ZWwoZGV2aWNlY2ZnIHwgMHg4MDAwMDAwMCwgRVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHKTsKLQlfX3Jhd193cml0ZWwoMHhhYSwgRVA5M1hYX1NZU0NPTl9TV0xPQ0spOwotCV9fcmF3X3dyaXRlbChkZXZpY2VjZmcgJiB+MHg4MDAwMDAwMCwgRVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHKTsKKwkvKgorCSAqIFNldCB0aGVuIGNsZWFyIHRoZSBTV1JTVCBiaXQgdG8gaW5pdGlhdGUgYSBzb2Z0d2FyZSByZXNldAorCSAqLworCWVwOTN4eF9kZXZjZmdfc2V0X2JpdHMoRVA5M1hYX1NZU0NPTl9ERVZDRkdfU1dSU1QpOworCWVwOTN4eF9kZXZjZmdfY2xlYXJfYml0cyhFUDkzWFhfU1lTQ09OX0RFVkNGR19TV1JTVCk7CiAKIAl3aGlsZSAoMSkKIAkJOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3RzNzJ4eC5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3RzNzJ4eC5oCmluZGV4IDQxMTczNDQuLjNiZDkzNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC90czcyeHguaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvdHM3Mnh4LmgKQEAgLTY3LDcgKzY3LDYgQEAKIAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKIHN0YXRpYyBpbmxpbmUgaW50IGJvYXJkX2lzX3RzNzIwMCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwppbmRleCAxNWQ2ODE1Li4wYTMxM2U4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwpAQCAtOSwyMSArOSwxNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKwogCiBzdGF0aWMgc3RydWN0IGVwOTN4eF9ldGhfZGF0YSBtaWNybzlfZXRoX2RhdGEgPSB7CiAJLnBoeV9pZAkJPSAweDFmLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvdHM3Mnh4LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYwppbmRleCBhYWYxMzcxLi4yNTlmNzgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYwpAQCAtMTIsMTkgKzEyLDE4IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbTQ4dDg2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tNDh0ODYuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvdHM3Mnh4Lmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB0czcyeHhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDEyNTEzMTkuLmQ3OTU2NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTM2LDggKzM2LDEyIEBACiAjZGVmaW5lIFBDSU9fQkFTRQkJUENJX0lPX1ZBRERSCiAjZGVmaW5lIFBDSU1FTV9CQVNFCQlQQ0lfTUVNT1JZX1ZBRERSCiAKKyNpZmRlZiBDT05GSUdfTU1VCiAvKiBtYWNybyB0byBnZXQgYXQgSU8gc3BhY2Ugd2hlbiBydW5uaW5nIHZpcnR1YWxseSAqLwogI2RlZmluZSBJT19BRERSRVNTKHgpICgoKHgpID4+IDQpICsgSU9fQkFTRSkgCisjZWxzZQorI2RlZmluZSBJT19BRERSRVNTKHgpICh4KQorI2VuZGlmCiAKICNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTEKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKaW5kZXggNGFjMDQwNTUuLjJhMzE4ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwpAQCAtNDksMTQgKzQ5LDE0IEBACiAKICNkZWZpbmUgSU5UQ1BfUEFfQ0xDRF9CQVNFCQkweGMwMDAwMDAwCiAKLSNkZWZpbmUgSU5UQ1BfVkFfQ0lDX0JBU0UJCTB4ZjEwMDAwNDAKLSNkZWZpbmUgSU5UQ1BfVkFfUElDX0JBU0UJCTB4ZjE0MDAwMDAKLSNkZWZpbmUgSU5UQ1BfVkFfU0lDX0JBU0UJCTB4ZmNhMDAwMDAKKyNkZWZpbmUgSU5UQ1BfVkFfQ0lDX0JBU0UJCUlPX0FERFJFU1MoSU5URUdSQVRPUl9IRFJfQkFTRSkgKyAweDQwCisjZGVmaW5lIElOVENQX1ZBX1BJQ19CQVNFCQlJT19BRERSRVNTKElOVEVHUkFUT1JfSUNfQkFTRSkKKyNkZWZpbmUgSU5UQ1BfVkFfU0lDX0JBU0UJCUlPX0FERFJFU1MoMHhjYTAwMDAwMCkKIAogI2RlZmluZSBJTlRDUF9QQV9FVEhfQkFTRQkJMHhjODAwMDAwMAogI2RlZmluZSBJTlRDUF9FVEhfU0laRQkJCTB4MTAKIAotI2RlZmluZSBJTlRDUF9WQV9DVFJMX0JBU0UJCTB4ZmNiMDAwMDAKKyNkZWZpbmUgSU5UQ1BfVkFfQ1RSTF9CQVNFCQlJT19BRERSRVNTKDB4Y2IwMDAwMDApCiAjZGVmaW5lIElOVENQX0ZMQVNIUFJPRwkJCTB4MDQKICNkZWZpbmUgQ0lOVEVHUkFUT1JfRkxBU0hQUk9HX0ZMVlBQRU4JKDEgPDwgMCkKICNkZWZpbmUgQ0lOVEVHUkFUT1JfRkxBU0hQUk9HX0ZMV1JFTgkoMSA8PCAxKQpAQCAtMTIxLDEyICsxMjEsMTIgQEAKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewotCQkudmlydHVhbAk9IDB4ZmNhMDAwMDAsCisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUygweGNhMDAwMDAwKSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4Y2EwMDAwMDApLAogCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LCB7Ci0JCS52aXJ0dWFsCT0gMHhmY2IwMDAwMCwKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKDB4Y2IwMDAwMDApLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oMHhjYjAwMDAwMCksCiAJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRQpAQCAtMzk0LDggKzM5NCw4IEBACiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgbW1jX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JdW5zaWduZWQgaW50IHN0YXR1cyA9IHJlYWRsKDB4ZmNhMDAwMDQpOwotCXdyaXRlbCg4LCAweGZjYjAwMDA4KTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gcmVhZGwoSU9fQUREUkVTUygweGNhMDAwMDAwKSArIDQpOworCXdyaXRlbCg4LCBJT19BRERSRVNTKDB4Y2IwMDAwMDApICsgOCk7CiAKIAlyZXR1cm4gc3RhdHVzICYgODsKIH0KQEAgLTQwMyw2ICs0MDMsOCBAQAogc3RhdGljIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSBtbWNfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCiAJLnN0YXR1cwkJPSBtbWNfc3RhdHVzLAorCS5ncGlvX3dwCT0gLTEsCisJLmdwaW9fY2QJPSAtMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgbW1jX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKaW5kZXggMWU5M2RmZS4uNTA4M2YwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKQEAgLTQxNiw2ICs0MTYsNyBAQAogfTsKIAogdW5zaWduZWQgbG9uZyBpeHA0eHhfdGltZXJfZnJlcSA9IEZSRVE7CitFWFBPUlRfU1lNQk9MKGl4cDR4eF90aW1lcl9mcmVxKTsKIHN0YXRpYyBpbnQgX19pbml0IGl4cDR4eF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpCiB7CiAJY2xvY2tzb3VyY2VfaXhwNHh4Lm11bHQgPQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnCmluZGV4IDI1MTAwZjcuLjBhY2E0NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWcKQEAgLTM4LDYgKzM4LDEyIEBACiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKIAkgIFFOQVAgVFMtMTE5IGFuZCBUUy0yMTkgVHVyYm8gTkFTIGRldmljZXMuCiAKK2NvbmZpZyBNQUNIX09QRU5SRF9CQVNFCisJYm9vbCAiTWFydmVsbCBPcGVuUkQgQmFzZSBCb2FyZCIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKKwkgIE1hcnZlbGwgT3BlblJEIEJhc2UgQm9hcmQuCisKIGVuZG1lbnUKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL01ha2VmaWxlCmluZGV4IDlkZDY4MGUuLjgwYWIwZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9NYWtlZmlsZQpAQCAtNiw1ICs2LDYgQEAKIG9iai0kKENPTkZJR19NQUNIX01WODhGNjI4MUdUV19HRSkJKz0gbXY4OGY2MjgxZ3R3X2dlLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX1NIRUVWQVBMVUcpCQkrPSBzaGVldmFwbHVnLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX1RTMjE5KQkJKz0gdHMyMTktc2V0dXAubworb2JqLSQoQ09ORklHX01BQ0hfT1BFTlJEX0JBU0UpCQkrPSBvcGVucmRfYmFzZS1zZXR1cC5vCiAKIG9iai0kKENPTkZJR19DUFVfSURMRSkJCQkrPSBjcHVpZGxlLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCmluZGV4IDBmNjkxOTguLjBhY2I2MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwpAQCAtODM4LDcgKzgzOCw4IEBACiAJdTMyIGRldiwgcmV2OwogCiAJa2lya3dvb2RfcGNpZV9pZCgmZGV2LCAmcmV2KTsKLQlpZiAoZGV2ID09IE1WODhGNjI4MV9ERVZfSUQgJiYgcmV2ID09IE1WODhGNjI4MV9SRVZfQTApCisJaWYgKGRldiA9PSBNVjg4RjYyODFfREVWX0lEICYmIChyZXYgPT0gTVY4OEY2MjgxX1JFVl9BMCB8fAorCQkJCQlyZXYgPT0gTVY4OEY2MjgxX1JFVl9BMSkpCiAJCXJldHVybiAyMDAwMDAwMDA7CiAKIAlyZXR1cm4gMTY2NjY2NjY3OwpAQCAtODcyLDYgKzg3Myw4IEBACiAJCQlyZXR1cm4gIk1WODhGNjI4MS1aMCI7CiAJCWVsc2UgaWYgKHJldiA9PSBNVjg4RjYyODFfUkVWX0EwKQogCQkJcmV0dXJuICJNVjg4RjYyODEtQTAiOworCQllbHNlIGlmIChyZXYgPT0gTVY4OEY2MjgxX1JFVl9BMSkKKwkJCXJldHVybiAiTVY4OEY2MjgxLUExIjsKIAkJZWxzZQogCQkJcmV0dXJuICJNVjg4RjYyODEtUmV2LVVuc3VwcG9ydGVkIjsKIAl9IGVsc2UgaWYgKGRldiA9PSBNVjg4RjYxOTJfREVWX0lEKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaAppbmRleCAwN2FmODU4Li41NGMxMzI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKQEAgLTEwMSw2ICsxMDEsNyBAQAogI2RlZmluZSBNVjg4RjYyODFfREVWX0lECTB4NjI4MQogI2RlZmluZSBNVjg4RjYyODFfUkVWX1owCTAKICNkZWZpbmUgTVY4OEY2MjgxX1JFVl9BMAkyCisjZGVmaW5lIE1WODhGNjI4MV9SRVZfQTEJMwogCiAjZGVmaW5lIE1WODhGNjE5Ml9ERVZfSUQJMHg2MTkyCiAjZGVmaW5lIE1WODhGNjE5Ml9SRVZfWjAJMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmRfYmFzZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmRfYmFzZS1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0N2RmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZF9iYXNlLXNldHVwLmMKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkX2Jhc2Utc2V0dXAuYworICoKKyAqIE1hcnZlbGwgT3BlblJEIEJhc2UgQm9hcmQgU2V0dXAKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CisjaW5jbHVkZSA8cGxhdC9tdnNkaW8uaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJtcHAuaCIKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG9wZW5yZF9iYXNlX25hbmRfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lID0gInUtYm9vdCIsCisJCS5vZmZzZXQgPSAwLAorCQkuc2l6ZSA9IFNaXzFNCisJfSwgeworCQkubmFtZSA9ICJ1SW1hZ2UiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZSA9IFNaXzRNCisJfSwgeworCQkubmFtZSA9ICJyb290IiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBvcGVucmRfYmFzZV9nZTAwX2RhdGEgPSB7CisJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoOCksCit9OworCitzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSBvcGVucmRfYmFzZV9zYXRhX2RhdGEgPSB7CisJLm5fcG9ydHMJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBtdnNkaW9fcGxhdGZvcm1fZGF0YSBvcGVucmRfYmFzZV9tdnNkaW9fZGF0YSA9IHsKKwkuZ3Bpb19jYXJkX2RldGVjdCA9IDI5LAkvKiBNUFAyOSB1c2VkIGFzIFNEIGNhcmQgZGV0ZWN0ICovCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG9wZW5yZF9iYXNlX21wcF9jb25maWdbXSBfX2luaXRkYXRhID0geworCU1QUDI5X0dQSU8sCisJMAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9wZW5yZF9iYXNlX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIEJhc2ljIHNldHVwLiBOZWVkcyB0byBiZSBjYWxsZWQgZWFybHkuCisJICovCisJa2lya3dvb2RfaW5pdCgpOworCWtpcmt3b29kX21wcF9jb25mKG9wZW5yZF9iYXNlX21wcF9jb25maWcpOworCisJa2lya3dvb2RfdWFydDBfaW5pdCgpOworCWtpcmt3b29kX25hbmRfaW5pdChBUlJBWV9BTkRfU0laRShvcGVucmRfYmFzZV9uYW5kX3BhcnRzKSwgMjUpOworCisJa2lya3dvb2RfZWhjaV9pbml0KCk7CisKKwlraXJrd29vZF9nZTAwX2luaXQoJm9wZW5yZF9iYXNlX2dlMDBfZGF0YSk7CisJa2lya3dvb2Rfc2F0YV9pbml0KCZvcGVucmRfYmFzZV9zYXRhX2RhdGEpOworCWtpcmt3b29kX3NkaW9faW5pdCgmb3BlbnJkX2Jhc2VfbXZzZGlvX2RhdGEpOworfQorCitNQUNISU5FX1NUQVJUKE9QRU5SRF9CQVNFLCAiTWFydmVsbCBPcGVuUkQgQmFzZSBCb2FyZCIpCisJLyogTWFpbnRhaW5lcjogRGhhdmFsIFZhc2EgPGRoYXZhbC52YXNhQGVpbmZvY2hpcHMuY29tPiAqLworCS5waHlzX2lvCT0gS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChLSVJLV09PRF9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IG9wZW5yZF9iYXNlX2luaXQsCisJLm1hcF9pbwkJPSBraXJrd29vZF9tYXBfaW8sCisJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teDEvY2xvY2suYwppbmRleCAwZDBmMzA2Li5kMWI1ODg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL2Nsb2NrLmMKQEAgLTE4LDExICsxOCwxNCBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorCiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgpAQCAtOTQsNyArOTcsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBjbGsxNm0gPSB7Ci0JLm5hbWUgPSAiQ0xLMTZNIiwKIAkuZ2V0X3JhdGUgPSBjbGsxNm1fZ2V0X3JhdGUsCiAJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAogCS5lbmFibGVfcmVnID0gQ0NNX0NTQ1IsCkBAIC0xMTEsNyArMTEzLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjbGsgY2xrMzIgPSB7Ci0JLm5hbWUgPSAiQ0xLMzIiLAogCS5nZXRfcmF0ZSA9IGNsazMyX2dldF9yYXRlLAogfTsKIApAQCAtMTIxLDcgKzEyMiw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsazMyX3ByZW11bHQgPSB7Ci0JLm5hbWUgPSAiQ0xLMzJfcHJlbXVsdGlwbGllciIsCiAJLnBhcmVudCA9ICZjbGszMiwKIAkuZ2V0X3JhdGUgPSBjbGszMl9wcmVtdWx0X2dldF9yYXRlLAogfTsKQEAgLTE1Niw3ICsxNTYsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBwcmVtX2NsayA9IHsKLQkubmFtZSA9ICJwcmVtX2NsayIsCiAJLnNldF9wYXJlbnQgPSBwcmVtX2Nsa19zZXRfcGFyZW50LAogfTsKIApAQCAtMTY3LDcgKzE2Niw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHN5c3RlbV9jbGsgPSB7Ci0JLm5hbWUgPSAic3lzdGVtX2NsayIsCiAJLnBhcmVudCA9ICZwcmVtX2NsaywKIAkuZ2V0X3JhdGUgPSBzeXN0ZW1fY2xrX2dldF9yYXRlLAogfTsKQEAgLTE3OSw3ICsxNzcsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBtY3VfY2xrID0gewotCS5uYW1lID0gIm1jdV9jbGsiLAogCS5wYXJlbnQgPSAmY2xrMzJfcHJlbXVsdCwKIAkuZ2V0X3JhdGUgPSBtY3VfY2xrX2dldF9yYXRlLAogfTsKQEAgLTE5NSw3ICsxOTIsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBmY2xrID0gewotCS5uYW1lID0gImZjbGsiLAogCS5wYXJlbnQgPSAmbWN1X2NsaywKIAkuZ2V0X3JhdGUgPSBmY2xrX2dldF9yYXRlLAogfTsKQEAgLTIzOCw3ICsyMzQsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBoY2xrID0gewotCS5uYW1lID0gImhjbGsiLAogCS5wYXJlbnQgPSAmc3lzdGVtX2NsaywKIAkuZ2V0X3JhdGUgPSBoY2xrX2dldF9yYXRlLAogCS5yb3VuZF9yYXRlID0gaGNsa19yb3VuZF9yYXRlLApAQCAtMjgwLDcgKzI3NSw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsazQ4bSA9IHsKLQkubmFtZSA9ICJDTEs0OE0iLAogCS5wYXJlbnQgPSAmc3lzdGVtX2NsaywKIAkuZ2V0X3JhdGUgPSBjbGs0OG1fZ2V0X3JhdGUsCiAJLnJvdW5kX3JhdGUgPSBjbGs0OG1fcm91bmRfcmF0ZSwKQEAgLTQwMCwyMSArMzk0LDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBlcmNsa1tdID0gewogCXsKLQkJLm5hbWUgPSAicGVyY2xrIiwKIAkJLmlkID0gMCwKIAkJLnBhcmVudCA9ICZzeXN0ZW1fY2xrLAogCQkuZ2V0X3JhdGUgPSBwZXJjbGsxX2dldF9yYXRlLAogCQkucm91bmRfcmF0ZSA9IHBlcmNsazFfcm91bmRfcmF0ZSwKIAkJLnNldF9yYXRlID0gcGVyY2xrMV9zZXRfcmF0ZSwKIAl9LCB7Ci0JCS5uYW1lID0gInBlcmNsayIsCiAJCS5pZCA9IDEsCiAJCS5wYXJlbnQgPSAmc3lzdGVtX2NsaywKIAkJLmdldF9yYXRlID0gcGVyY2xrMl9nZXRfcmF0ZSwKIAkJLnJvdW5kX3JhdGUgPSBwZXJjbGsyX3JvdW5kX3JhdGUsCiAJCS5zZXRfcmF0ZSA9IHBlcmNsazJfc2V0X3JhdGUsCiAJfSwgewotCQkubmFtZSA9ICJwZXJjbGsiLAogCQkuaWQgPSAyLAogCQkucGFyZW50ID0gJnN5c3RlbV9jbGssCiAJCS5nZXRfcmF0ZSA9IHBlcmNsazNfZ2V0X3JhdGUsCkBAIC00NTcsMTIgKzQ0OCwxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBjbGtvX2NsayA9IHsKLQkubmFtZSA9ICJjbGtvX2NsayIsCiAJLnNldF9wYXJlbnQgPSBjbGtvX3NldF9wYXJlbnQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0gewotCS5uYW1lID0gImRtYSIsCiAJLnBhcmVudCA9ICZoY2xrLAogCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKQEAgLTQ3Myw3ICs0NjIsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgY3NpX2NsayA9IHsKLQkubmFtZSA9ICJjc2lfY2xrIiwKIAkucGFyZW50ID0gJmhjbGssCiAJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLApAQCAtNDg0LDcgKzQ3Miw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtbWFfY2xrID0gewotCS5uYW1lID0gIm1tYV9jbGsiLAogCS5wYXJlbnQgPSAmaGNsaywKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCkBAIC00OTUsNyArNDgyLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYmRfY2xrID0gewotCS5uYW1lID0gInVzYmRfY2xrIiwKIAkucGFyZW50ID0gJmNsazQ4bSwKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCkBAIC01MDYsOTkgKzQ5Miw4NSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0X2NsayA9IHsKLQkubmFtZSA9ICJncHRfY2xrIiwKIAkucGFyZW50ID0gJnBlcmNsa1swXSwKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0X2NsayA9IHsKLQkubmFtZSA9ICJ1YXJ0IiwKIAkucGFyZW50ID0gJnBlcmNsa1swXSwKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmNfY2xrID0gewotCS5uYW1lID0gImkyY19jbGsiLAogCS5wYXJlbnQgPSAmaGNsaywKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzcGlfY2xrID0gewotCS5uYW1lID0gInNwaV9jbGsiLAogCS5wYXJlbnQgPSAmcGVyY2xrWzFdLAogCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNkaGNfY2xrID0gewotCS5uYW1lID0gInNkaGNfY2xrIiwKIAkucGFyZW50ID0gJnBlcmNsa1sxXSwKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBsY2RjX2NsayA9IHsKLQkubmFtZSA9ICJsY2RjX2NsayIsCiAJLnBhcmVudCA9ICZwZXJjbGtbMV0sCiAJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbXNoY19jbGsgPSB7Ci0JLm5hbWUgPSAibXNoY19jbGsiLAogCS5wYXJlbnQgPSAmaGNsaywKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzc2lfY2xrID0gewotCS5uYW1lID0gInNzaV9jbGsiLAogCS5wYXJlbnQgPSAmcGVyY2xrWzJdLAogCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHJ0Y19jbGsgPSB7Ci0JLm5hbWUgPSAicnRjX2NsayIsCiAJLnBhcmVudCA9ICZjbGszMiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpteGNfY2xrc1tdID0gewotCSZjbGsxNm0sCi0JJmNsazMyLAotCSZjbGszMl9wcmVtdWx0LAotCSZwcmVtX2NsaywKLQkmc3lzdGVtX2NsaywKLQkmbWN1X2NsaywKLQkmZmNsaywKLQkmaGNsaywKLQkmY2xrNDhtLAotCSZwZXJjbGtbMF0sCi0JJnBlcmNsa1sxXSwKLQkmcGVyY2xrWzJdLAotCSZjbGtvX2NsaywKLQkmZG1hX2NsaywKLQkmY3NpX2NsaywKLQkmbW1hX2NsaywKLQkmdXNiZF9jbGssCi0JJmdwdF9jbGssCi0JJnVhcnRfY2xrLAotCSZpMmNfY2xrLAotCSZzcGlfY2xrLAotCSZzZGhjX2NsaywKLQkmbGNkY19jbGssCi0JJm1zaGNfY2xrLAotCSZzc2lfY2xrLAotCSZydGNfY2xrLAorI2RlZmluZSBfUkVHSVNURVJfQ0xPQ0soZCwgbiwgYykgXAorCXsgXAorCQkuZGV2X2lkID0gZCwgXAorCQkuY29uX2lkID0gbiwgXAorCQkuY2xrID0gJmMsIFwKKwl9LAorc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSBfX2luaXRkYXRhID0geworCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZG1hIiwgZG1hX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14MS1jYW1lcmEuMCIsIE5VTEwsIGNzaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtbWEiLCBtbWFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14X3VkYy4wIiwgTlVMTCwgdXNiZF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQiLCBncHRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMCIsIE5VTEwsIHVhcnRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMSIsIE5VTEwsIHVhcnRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4wIiwgTlVMTCwgaTJjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMCIsIE5VTEwsIHNwaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtbW1jLjAiLCBOVUxMLCBzZGhjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1mYi4wIiwgTlVMTCwgbGNkY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtc2hjIiwgbXNoY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzc2kiLCBzc2lfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX3J0Yy4wIiwgTlVMTCwgcnRjX2NsaykKIH07CiAKIGludCBfX2luaXQgbXgxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKIHsKLQlzdHJ1Y3QgY2xrICoqY2xrcDsKIAl1bnNpZ25lZCBpbnQgcmVnOworCWludCBpOwogCiAJLyogZGlzYWJsZSBjbG9ja3Mgd2UgYXJlIGFibGUgdG8gKi8KIAlfX3Jhd193cml0ZWwoMCwgU0NNX0dDQ1IpOwpAQCAtNjIwLDEzICs1OTIsMTMgQEAKIAlyZWcgPSAocmVnICYgQ0NNX0NTQ1JfQ0xLT19NQVNLKSA+PiBDQ01fQ1NDUl9DTEtPX09GRlNFVDsKIAljbGtvX2Nsay5wYXJlbnQgPSAoc3RydWN0IGNsayAqKWNsa29fY2xvY2tzW3JlZ107CiAKLQlmb3IgKGNsa3AgPSBteGNfY2xrczsgY2xrcCA8IG14Y19jbGtzICsgQVJSQVlfU0laRShteGNfY2xrcyk7IGNsa3ArKykKLQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQorCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKIAogCWNsa19lbmFibGUoJmhjbGspOwogCWNsa19lbmFibGUoJmZjbGspOwogCi0JbXhjX3RpbWVyX2luaXQoJmdwdF9jbGspOworCW14Y190aW1lcl9pbml0KCZncHRfY2xrLCBJT19BRERSRVNTKFRJTTFfQkFTRV9BRERSKSwgVElNMV9JTlQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMKaW5kZXggNzZkMWZmYi4uYjZiZTI5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL2RldmljZXMuYwpAQCAtMjksMTIgKzI5LDExIEBACiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9jc2lfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLnN0YXJ0ICA9IDB4MDAyMjQwMDAsCiAJCS5lbmQgICAgPSAweDAwMjI0MDEwLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7CisJfSwgewogCQkuc3RhcnQgID0gQ1NJX0lOVCwKIAkJLmVuZCAgICA9IENTSV9JTlQsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKQEAgLTU1LDEyICs1NCwxMSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfaTJjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKKwl7CiAJCS5zdGFydCAgPSAweDAwMjE3MDAwLAogCQkuZW5kICAgID0gMHgwMDIxNzAxMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0geworCX0sIHsKIAkJLnN0YXJ0ICA9IEkyQ19JTlQsCiAJCS5lbmQgICAgPSBJMkNfSU5ULAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCkBAIC03NSwyMiArNzMsMTkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3VhcnQxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKKwl7CiAJCS5zdGFydAk9IFVBUlQxX0JBU0VfQUREUiwKIAkJLmVuZAk9IFVBUlQxX0JBU0VfQUREUiArIDB4RDAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0geworCX0sIHsKIAkJLnN0YXJ0CT0gVUFSVDFfTUlOVF9SWCwKIAkJLmVuZAk9IFVBUlQxX01JTlRfUlgsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0geworCX0sIHsKIAkJLnN0YXJ0CT0gVUFSVDFfTUlOVF9UWCwKIAkJLmVuZAk9IFVBUlQxX01JTlRfVFgsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0geworCX0sIHsKIAkJLnN0YXJ0CT0gVUFSVDFfTUlOVF9SVFMsCiAJCS5lbmQJPSBVQVJUMV9NSU5UX1JUUywKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCkBAIC0xMDUsMjIgKzEwMCwxOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfdWFydDJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLnN0YXJ0CT0gVUFSVDJfQkFTRV9BRERSLAogCQkuZW5kCT0gVUFSVDJfQkFTRV9BRERSICsgMHhEMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7CisJfSwgewogCQkuc3RhcnQJPSBVQVJUMl9NSU5UX1JYLAogCQkuZW5kCT0gVUFSVDJfTUlOVF9SWCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7CisJfSwgewogCQkuc3RhcnQJPSBVQVJUMl9NSU5UX1RYLAogCQkuZW5kCT0gVUFSVDJfTUlOVF9UWCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7CisJfSwgewogCQkuc3RhcnQJPSBVQVJUMl9NSU5UX1JUUywKIAkJLmVuZAk9IFVBUlQyX01JTlRfUlRTLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKQEAgLTEzNSwxNyArMTI3LDE1IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9ydGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLnN0YXJ0ICA9IDB4MDAyMDQwMDAsCiAJCS5lbmQgICAgPSAweDAwMjA0MDI0LAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7CisJfSwgewogCQkuc3RhcnQgID0gUlRDX0lOVCwKIAkJLmVuZCAgICA9IFJUQ19JTlQsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKKwl9LCB7CiAJCS5zdGFydCAgPSBSVENfU0FNSU5ULAogCQkuZW5kICAgID0gUlRDX1NBTUlOVCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLApAQCAtMTYwLDEyICsxNTAsMTEgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3dkdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQgID0gMHgwMDIwMTAwMCwKIAkJLmVuZCAgICA9IDB4MDAyMDEwMDgsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKKwl9LCB7CiAJCS5zdGFydCAgPSBXRFRfSU5ULAogCQkuZW5kICAgID0gV0RUX0lOVCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLApAQCAtMTgwLDQyICsxNjksMzUgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3VzYl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQJPSAweDAwMjEyMDAwLAogCQkuZW5kCT0gMHgwMDIxMjE0OCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7CisJfSwgewogCQkuc3RhcnQJPSBVU0JEX0lOVDAsCiAJCS5lbmQJPSBVU0JEX0lOVDAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0geworCX0sIHsKIAkJLnN0YXJ0CT0gVVNCRF9JTlQxLAogCQkuZW5kCT0gVVNCRF9JTlQxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKKwl9LCB7CiAJCS5zdGFydAk9IFVTQkRfSU5UMiwKIAkJLmVuZAk9IFVTQkRfSU5UMiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbNF0gPSB7CisJfSwgewogCQkuc3RhcnQJPSBVU0JEX0lOVDMsCiAJCS5lbmQJPSBVU0JEX0lOVDMsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzVdID0geworCX0sIHsKIAkJLnN0YXJ0CT0gVVNCRF9JTlQ0LAogCQkuZW5kCT0gVVNCRF9JTlQ0LAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVs2XSA9IHsKKwl9LCB7CiAJCS5zdGFydAk9IFVTQkRfSU5UNSwKIAkJLmVuZAk9IFVTQkRfSU5UNSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbN10gPSB7CisJfSwgewogCQkuc3RhcnQJPSBVU0JEX0lOVDYsCiAJCS5lbmQJPSBVU0JEX0lOVDYsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLApAQCAtMjMxLDI5ICsyMTMsMjYgQEAKIAogLyogR1BJTyBwb3J0IGRlc2NyaXB0aW9uICovCiBzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14X2dwaW9fcG9ydHNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTAiLAogCQkuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSKSwKIAkJLmlycSA9IEdQSU9fSU5UX1BPUlRBLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQKLQl9LAotCVsxXSA9IHsKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAorCX0sIHsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby0xIiwKIAkJLmJhc2UgPSAodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhHUElPX0JBU0VfQUREUiArIDB4MTAwKSwKIAkJLmlycSA9IEdQSU9fSU5UX1BPUlRCLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMgotCX0sCi0JWzJdID0geworCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiwKKwl9LCB7CiAJCS5jaGlwLmxhYmVsID0gImdwaW8tMiIsCiAJCS5iYXNlID0gKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDIwMCksCiAJCS5pcnEgPSBHUElPX0lOVF9QT1JUQywKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQKLQl9LAotCVszXSA9IHsKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQsCisJfSwgewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTMiLAogCQkuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSICsgMHgzMDApLAogCQkuaXJxID0gR1BJT19JTlRfUE9SVEQsCi0JCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDk2CisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDk2LAogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL2dlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtbXgxL2dlbmVyaWMuYwppbmRleCA3NjIyYzliLi43ZjlmYzEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvZ2VuZXJpYy5jCkBAIC00MSw2ICs0MSwxMyBAQAogdm9pZCBfX2luaXQgbXgxX21hcF9pbyh2b2lkKQogewogCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDEpOworCW14Y19hcmNoX3Jlc2V0X2luaXQoSU9fQUREUkVTUyhXRFRfQkFTRV9BRERSKSk7CiAKIAlpb3RhYmxlX2luaXQoaW14X2lvX2Rlc2MsIEFSUkFZX1NJWkUoaW14X2lvX2Rlc2MpKTsKIH0KKwordm9pZCBfX2luaXQgbXgxX2luaXRfaXJxKHZvaWQpCit7CisJbXhjX2luaXRfaXJxKElPX0FERFJFU1MoQVZJQ19CQVNFX0FERFIpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvbXgxYWRzLmMgYi9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYwppbmRleCBlNWIwYzBhLi4zMGYwNGU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYwpAQCAtMTA0LDEyICsxMDQsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBteDFhZHNfaTJjX2RldmljZXNbXSA9IHsKIAl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTd4IiwgMHgyMiksCi0JCS50eXBlID0gInBjZjg1NzUiLAorCQlJMkNfQk9BUkRfSU5GTygicGNmODU3NSIsIDB4MjIpLAogCQkucGxhdGZvcm1fZGF0YSA9ICZwY2Y4NTd4X2RhdGFbMF0sCiAJfSwgewotCQlJMkNfQk9BUkRfSU5GTygicGNmODU3eCIsIDB4MjQpLAotCQkudHlwZSA9ICJwY2Y4NTc1IiwKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NzUiLCAweDI0KSwKIAkJLnBsYXRmb3JtX2RhdGEgPSAmcGNmODU3eF9kYXRhWzFdLAogCX0sCiB9OwpAQCAtMTUxLDcgKzE0OSw3IEBACiAJLmlvX3BnX29mZnN0CT0gKElNWF9JT19CQVNFID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MTAwLAogCS5tYXBfaW8JCT0gbXgxX21hcF9pbywKLQkuaW5pdF9pcnEJPSBteGNfaW5pdF9pcnEsCisJLmluaXRfaXJxCT0gbXgxX2luaXRfaXJxLAogCS50aW1lcgkJPSAmbXgxYWRzX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBteDFhZHNfaW5pdCwKIE1BQ0hJTkVfRU5ECkBAIC0xNjEsNyArMTU5LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoSU1YX0lPX0JBU0UgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBteDFfbWFwX2lvLAotCS5pbml0X2lycQk9IG14Y19pbml0X2lycSwKKwkuaW5pdF9pcnEJPSBteDFfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZteDFhZHNfdGltZXIsCiAJLmluaXRfbWFjaGluZQk9IG14MWFkc19pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL3NjYjkzMjguYyBiL2FyY2gvYXJtL21hY2gtbXgxL3NjYjkzMjguYwppbmRleCAyMGUwYjViLi4zMjVkOThkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9zY2I5MzI4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvc2NiOTMyOC5jCkBAIC02OCwyMiArNjgsMjAgQEAKICAqIHRvIGdhaW4gYWNjZXNzIHRvIGFkZHJlc3MgbGF0Y2ggcmVnaXN0ZXJzIGFuZCB0aGUgZGF0YSBwYXRoLgogICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtOTAwMHhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLm5hbWUJPSAiYWRkcmVzcyBhcmVhIiwKIAkJLnN0YXJ0CT0gSU1YX0NTNV9QSFlTLAogCQkuZW5kCT0gSU1YX0NTNV9QSFlTICsgMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0JLyogYWRkcmVzcyBhY2Nlc3MgKi8KLQl9LAotCVsxXSA9IHsKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCS8qIGFkZHJlc3MgYWNjZXNzICovCisJfSwgewogCQkubmFtZQk9ICJkYXRhIGFyZWEiLAogCQkuc3RhcnQJPSBJTVhfQ1M1X1BIWVMgKyA0LAogCQkuZW5kCT0gSU1YX0NTNV9QSFlTICsgNSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0JLyogZGF0YSBhY2Nlc3MgKi8KLQl9LAotCVsyXSA9IHsKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCS8qIGRhdGEgYWNjZXNzICovCisJfSwgewogCQkuc3RhcnQJPSBJUlFfR1BJT0MoMyksCiAJCS5lbmQJPSBJUlFfR1BJT0MoMyksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCwKIAl9LAogfTsKIApAQCAtMTU0LDcgKzE1Miw3IEBACiAJLmlvX3BnX29mZnN0CT0gKCgweGUwMjAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHgwODAwMDEwMCwKIAkubWFwX2lvCQk9IG14MV9tYXBfaW8sCi0JLmluaXRfaXJxCT0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycQk9IG14MV9pbml0X2lycSwKIAkudGltZXIJCT0gJnNjYjkzMjhfdGltZXIsCiAJLmluaXRfbWFjaGluZQk9IHNjYjkzMjhfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teDIvS2NvbmZpZwppbmRleCBjNzdkYTU4Li5jOGEyZWFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL0tjb25maWcKQEAgLTUzLDYgKzUzLDM0IEBACiAKIGVuZGNob2ljZQogCitjb25maWcgTUFDSF9FVUtSRUFfQ1BVSU1YMjcKKwlib29sICJFdWtyZWEgQ1BVSU1YMjcgbW9kdWxlIgorCWRlcGVuZHMgb24gTUFDSF9NWDI3CisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBFdWtyZWEgQ1BVSU1YMjcgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMKKwkgIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgbW9kdWxlIGFuZCBpdHMgcGVyaXBoZXJhbHMuCisKK2NvbmZpZyBNQUNIX0VVS1JFQV9DUFVJTVgyN19VU0VTREhDMgorCWJvb2wgIkNQVUlNWDI3IGludGVncmF0ZXMgU0RIQzIgbW9kdWxlIgorCWRlcGVuZHMgb24gTUFDSF9FVUtSRUFfQ1BVSU1YMjcKKwloZWxwCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIGludGVybmFsIFNESEMyIHVzZWQgb24gQ1BVSU1YMjcgdXNlZAorCSAgZm9yIHdpZmkgb3IgZU1NQy4KKworY2hvaWNlCisJcHJvbXB0ICJCYXNlYm9hcmQiCisJZGVwZW5kcyBvbiBNQUNIX0VVS1JFQV9DUFVJTVgyNworCWRlZmF1bHQgTUFDSF9FVUtSRUFfTUJJTVgyN19CQVNFQk9BUkQKKworY29uZmlnIE1BQ0hfRVVLUkVBX01CSU1YMjdfQkFTRUJPQVJECisJcHJvbXB0ICJFdWtyZWEgTUJJTVgyNyBkZXZlbG9wbWVudCBib2FyZCIKKwlib29sCisJaGVscAorCSAgVGhpcyBhZGRzIGJvYXJkIHNwZWNpZmljIGRldmljZXMgdGhhdCBjYW4gYmUgZm91bmQgb24gRXVrcmVhJ3MKKwkgIE1CSU1YMjcgZXZhbHVhdGlvbiBib2FyZC4KKworZW5kY2hvaWNlCisKIGNvbmZpZyBNQUNIX01YMjdfM0RTCiAJYm9vbCAiTVgyN1BESyBwbGF0Zm9ybSIKIAlkZXBlbmRzIG9uIE1BQ0hfTVgyNwpAQCAtNjcsNCArOTUsMTEgQEAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgyNyBMSVRFS0lUIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCiAJICBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCiAKK2NvbmZpZyBNQUNIX1BDQTEwMAorCWJvb2wgIlBoeXRlYyBwaHlDQVJELXMgKHBjYTEwMCkiCisJZGVwZW5kcyBvbiBNQUNIX01YMjcKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHBoeUNBUkQtcyAoYWthIHBjYTEwMCkgcGxhdGZvcm0uIFRoaXMKKwkgIGluY2x1ZGVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgbW9kdWxlIGFuZCBpdHMgcGVyaXBoZXJhbHMuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlCmluZGV4IGI5YjFjY2EuLjE5NTYwZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlCkBAIC0xNyw0ICsxNyw3IEBACiBvYmotJChDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJEKSArPSBwY205NzAtYmFzZWJvYXJkLm8KIG9iai0kKENPTkZJR19NQUNIX01YMjdfM0RTKSArPSBteDI3cGRrLm8KIG9iai0kKENPTkZJR19NQUNIX01YMjdMSVRFKSArPSBteDI3bGl0ZS5vCitvYmotJChDT05GSUdfTUFDSF9FVUtSRUFfQ1BVSU1YMjcpICs9IGV1a3JlYV9jcHVpbXgyNy5vCitvYmotJChDT05GSUdfTUFDSF9FVUtSRUFfTUJJTVgyN19CQVNFQk9BUkQpICs9IGV1a3JlYV9tYmlteDI3LWJhc2Vib2FyZC5vCitvYmotJChDT05GSUdfTUFDSF9QQ0ExMDApICs9IHBjYTEwMC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDIxLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyMS5jCmluZGV4IDA4NTBmYjguLmVlZGU3OTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDIxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjEuYwpAQCAtMTAwNCw2ICsxMDA0LDYgQEAKIAljbGtfZW5hYmxlKCZ1YXJ0X2Nsa1swXSk7CiAjZW5kaWYKIAotCW14Y190aW1lcl9pbml0KCZncHRfY2xrWzBdKTsKKwlteGNfdGltZXJfaW5pdCgmZ3B0X2Nsa1swXSwgSU9fQUREUkVTUyhHUFQxX0JBU0VfQUREUiksIE1YQ19JTlRfR1BUMSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYwppbmRleCAyYzk3MTQ0Li40MDg5OTUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKQEAgLTY0Myw3ICs2NDMsMTQgQEAKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkzIiwgY3NwaTNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14LWZiLjAiLCBOVUxMLCBsY2RjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzaSIsIGNzaV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ1c2IiLCB1c2JfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiX2FoYiIsIHVzYl9jbGsxKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2IiLCB1c2JfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2JfYWhiIiwgdXNiX2NsazEpCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4xIiwgInVzYiIsIHVzYl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4xIiwgInVzYl9haGIiLCB1c2JfY2xrMSkKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjIiLCAidXNiIiwgdXNiX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjIiLCAidXNiX2FoYiIsIHVzYl9jbGsxKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic3NpMSIsIHNzaTFfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic3NpMiIsIHNzaTJfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjX25hbmQuMCIsIE5VTEwsIG5mY19jbGspCkBAIC03NDgsNyArNzU1LDcgQEAKIAljbGtfZW5hYmxlKCZ1YXJ0MV9jbGspOwogI2VuZGlmCiAKLQlteGNfdGltZXJfaW5pdCgmZ3B0MV9jbGspOworCW14Y190aW1lcl9pbml0KCZncHQxX2NsaywgSU9fQUREUkVTUyhHUFQxX0JBU0VfQUREUiksIE1YQ19JTlRfR1BUMSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuYwppbmRleCBhMGYxYjM2Li41MDE5OWFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5jCkBAIC00MCw0NSArNDAsODcgQEAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIC8qCi0gKiBSZXNvdXJjZSBkZWZpbml0aW9uIGZvciB0aGUgTVhDIElyREEKKyAqIFNQSSBtYXN0ZXIgY29udHJvbGxlcgorICoKKyAqIC0gaS5NWDE6IDIgY2hhbm5lbCAoc2xpZ2hseSBkaWZmZXJlbnQgcmVnaXN0ZXIgc2V0dGluZykKKyAqIC0gaS5NWDIxOiAyIGNoYW5uZWwKKyAqIC0gaS5NWDI3OiAzIGNoYW5uZWwKICAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaXJkYV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgID0gVUFSVDNfQkFTRV9BRERSLAotCQkuZW5kICAgICA9IFVBUlQzX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKLQkJLmZsYWdzICAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ICAgPSBNWENfSU5UX1VBUlQzLAotCQkuZW5kICAgICA9IE1YQ19JTlRfVUFSVDMsCi0JCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfcmVzb3VyY2VzMFtdID0geworCXsKKwkgICAgICAgLnN0YXJ0ID0gQ1NQSTFfQkFTRV9BRERSLAorCSAgICAgICAuZW5kID0gQ1NQSTFfQkFTRV9BRERSICsgU1pfNEsgLSAxLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJICAgICAgIC5zdGFydCA9IE1YQ19JTlRfQ1NQSTEsCisJICAgICAgIC5lbmQgPSBNWENfSU5UX0NTUEkxLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKIAotLyogUGxhdGZvcm0gRGF0YSBmb3IgTVhDIElyREEgKi8KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2lyZGFfZGV2aWNlID0gewotCS5uYW1lID0gIm14Y19pcmRhIiwKLQkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaXJkYV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IG14Y19pcmRhX3Jlc291cmNlcywKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV9yZXNvdXJjZXMxW10gPSB7CisJeworCQkuc3RhcnQgPSBDU1BJMl9CQVNFX0FERFIsCisJCS5lbmQgPSBDU1BJMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9DU1BJMiwKKwkJLmVuZCA9IE1YQ19JTlRfQ1NQSTIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCiB9OwogCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpX3Jlc291cmNlczJbXSA9IHsKKwl7CisJCS5zdGFydCA9IENTUEkzX0JBU0VfQUREUiwKKwkJLmVuZCA9IENTUEkzX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWENfSU5UX0NTUEkzLAorCQkuZW5kID0gTVhDX0lOVF9DU1BJMywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisjZW5kaWYKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTAgPSB7CisJLm5hbWUgPSAic3BpX2lteCIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NwaV9yZXNvdXJjZXMwKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpX3Jlc291cmNlczAsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMSA9IHsKKwkubmFtZSA9ICJzcGlfaW14IiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpX3Jlc291cmNlczEpLAorCS5yZXNvdXJjZSA9IG14Y19zcGlfcmVzb3VyY2VzMSwKK307CisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMiA9IHsKKwkubmFtZSA9ICJzcGlfaW14IiwKKwkuaWQgPSAyLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpX3Jlc291cmNlczIpLAorCS5yZXNvdXJjZSA9IG14Y19zcGlfcmVzb3VyY2VzMiwKK307CisjZW5kaWYKKwogLyoKICAqIEdlbmVyYWwgUHVycG9zZSBUaW1lcgotICogLSBpLk1YMTogMiB0aW1lciAoc2xpZ2hseSBkaWZmZXJlbnQgcmVnaXN0ZXIgaGFuZGxpbmcpCi0gKiAtIGkuTVgyMTogMyB0aW1lcgotICogLSBpLk1YMjc6IDYgdGltZXIKKyAqIC0gaS5NWDIxOiAzIHRpbWVycworICogLSBpLk1YMjc6IDYgdGltZXJzCiAgKi8KIAogLyogV2UgdXNlIGdwdDAgYXMgc3lzdGVtIHRpbWVyLCBzbyBkbyBub3QgYWRkIGEgZGV2aWNlIGZvciB0aGlzIG9uZSAqLwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRpbWVyMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQJPSBHUFQyX0JBU0VfQUREUiwKIAkJLmVuZAk9IEdQVDJfQkFTRV9BRERSICsgMHgxNywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLQl9LAotCVsxXSA9IHsKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgewogCQkuc3RhcnQgICA9IE1YQ19JTlRfR1BUMiwKIAkJLmVuZCAgICAgPSBNWENfSU5UX0dQVDIsCiAJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCkBAIC04OSwxNiArMTMxLDE1IEBACiAJLm5hbWUgPSAiaW14X2dwdCIsCiAJLmlkID0gMSwKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltZXIxX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gdGltZXIxX3Jlc291cmNlcworCS5yZXNvdXJjZSA9IHRpbWVyMV9yZXNvdXJjZXMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRpbWVyMl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQJPSBHUFQzX0JBU0VfQUREUiwKIAkJLmVuZAk9IEdQVDNfQkFTRV9BRERSICsgMHgxNywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLQl9LAotCVsxXSA9IHsKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgewogCQkuc3RhcnQgICA9IE1YQ19JTlRfR1BUMywKIAkJLmVuZCAgICAgPSBNWENfSU5UX0dQVDMsCiAJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCkBAIC0xMDksMTcgKzE1MCwxNiBAQAogCS5uYW1lID0gImlteF9ncHQiLAogCS5pZCA9IDIsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWVyMl9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IHRpbWVyMl9yZXNvdXJjZXMKKwkucmVzb3VyY2UgPSB0aW1lcjJfcmVzb3VyY2VzLAogfTsKIAogI2lmZGVmIENPTkZJR19NQUNIX01YMjcKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGltZXIzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKKwl7CiAJCS5zdGFydAk9IEdQVDRfQkFTRV9BRERSLAogCQkuZW5kCT0gR1BUNF9CQVNFX0FERFIgKyAweDE3LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQotCX0sCi0JWzFdID0geworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CiAJCS5zdGFydCAgID0gTVhDX0lOVF9HUFQ0LAogCQkuZW5kICAgICA9IE1YQ19JTlRfR1BUNCwKIAkJLmZsYWdzICAgPSBJT1JFU09VUkNFX0lSUSwKQEAgLTEzMCwxNiArMTcwLDE1IEBACiAJLm5hbWUgPSAiaW14X2dwdCIsCiAJLmlkID0gMywKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltZXIzX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gdGltZXIzX3Jlc291cmNlcworCS5yZXNvdXJjZSA9IHRpbWVyM19yZXNvdXJjZXMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRpbWVyNF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQJPSBHUFQ1X0JBU0VfQUREUiwKIAkJLmVuZAk9IEdQVDVfQkFTRV9BRERSICsgMHgxNywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLQl9LAotCVsxXSA9IHsKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgewogCQkuc3RhcnQgICA9IE1YQ19JTlRfR1BUNSwKIAkJLmVuZCAgICAgPSBNWENfSU5UX0dQVDUsCiAJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCkBAIC0xNTAsMTYgKzE4OSwxNSBAQAogCS5uYW1lID0gImlteF9ncHQiLAogCS5pZCA9IDQsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWVyNF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IHRpbWVyNF9yZXNvdXJjZXMKKwkucmVzb3VyY2UgPSB0aW1lcjRfcmVzb3VyY2VzLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0aW1lcjVfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLnN0YXJ0CT0gR1BUNl9CQVNFX0FERFIsCiAJCS5lbmQJPSBHUFQ2X0JBU0VfQUREUiArIDB4MTcsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCi0JfSwKLQlbMV0gPSB7CisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKIAkJLnN0YXJ0ICAgPSBNWENfSU5UX0dQVDYsCiAJCS5lbmQgICAgID0gTVhDX0lOVF9HUFQ2LAogCQkuZmxhZ3MgICA9IElPUkVTT1VSQ0VfSVJRLApAQCAtMTcwLDcgKzIwOCw3IEBACiAJLm5hbWUgPSAiaW14X2dwdCIsCiAJLmlkID0gNSwKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltZXI1X3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gdGltZXI1X3Jlc291cmNlcworCS5yZXNvdXJjZSA9IHRpbWVyNV9yZXNvdXJjZXMsCiB9OwogI2VuZGlmCiAKQEAgLTIxNCwxMSArMjUyLDExIEBACiAJewogCQkuc3RhcnQJPSBORkNfQkFTRV9BRERSLAogCQkuZW5kCT0gTkZDX0JBU0VfQUREUiArIDB4ZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7CiAJCS5zdGFydAk9IE1YQ19JTlRfTkFOREZDLAogCQkuZW5kCT0gTVhDX0lOVF9OQU5ERkMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwogCkBAIC0yNDAsOCArMjc4LDcgQEAKIAkJLnN0YXJ0ID0gTENEQ19CQVNFX0FERFIsCiAJCS5lbmQgICA9IExDRENfQkFTRV9BRERSICsgMHhGRkYsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JeworCX0sIHsKIAkJLnN0YXJ0ID0gTVhDX0lOVF9MQ0RDLAogCQkuZW5kICAgPSBNWENfSU5UX0xDREMsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLApAQCAtMjY0LDExICszMDEsMTEgQEAKIAl7CiAJCS5zdGFydAk9IEZFQ19CQVNFX0FERFIsCiAJCS5lbmQJPSBGRUNfQkFTRV9BRERSICsgMHhmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sIHsKIAkJLnN0YXJ0CT0gTVhDX0lOVF9GRUMsCiAJCS5lbmQJPSBNWENfSU5UX0ZFQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CiAKQEAgLTI4MSwxNSArMzE4LDE0IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjXzFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLnN0YXJ0CT0gSTJDX0JBU0VfQUREUiwKIAkJLmVuZAk9IEkyQ19CQVNFX0FERFIgKyAweDBmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCi0JfSwKLQlbMV0gPSB7CisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKIAkJLnN0YXJ0CT0gTVhDX0lOVF9JMkMsCiAJCS5lbmQJPSBNWENfSU5UX0kyQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfQogfTsKIApAQCAtMjk3LDIwICszMzMsMTkgQEAKIAkubmFtZSA9ICJpbXgtaTJjIiwKIAkuaWQgPSAwLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaTJjXzFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfaTJjXzFfcmVzb3VyY2VzCisJLnJlc291cmNlID0gbXhjX2kyY18xX3Jlc291cmNlcywKIH07CiAKICNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19pMmNfMl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQJPSBJMkMyX0JBU0VfQUREUiwKIAkJLmVuZAk9IEkyQzJfQkFTRV9BRERSICsgMHgwZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQotCX0sCi0JWzFdID0geworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CiAJCS5zdGFydAk9IE1YQ19JTlRfSTJDMiwKIAkJLmVuZAk9IE1YQ19JTlRfSTJDMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfQogfTsKIApAQCAtMzE4LDE3ICszNTMsMTYgQEAKIAkubmFtZSA9ICJpbXgtaTJjIiwKIAkuaWQgPSAxLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaTJjXzJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfaTJjXzJfcmVzb3VyY2VzCisJLnJlc291cmNlID0gbXhjX2kyY18yX3Jlc291cmNlcywKIH07CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfcHdtX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKKwl7CiAJCS5zdGFydAk9IFBXTV9CQVNFX0FERFIsCiAJCS5lbmQJPSBQV01fQkFTRV9BRERSICsgMHgwZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQotCX0sCi0JWzFdID0geworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CiAJCS5zdGFydCAgID0gTVhDX0lOVF9QV00sCiAJCS5lbmQgICAgID0gTVhDX0lOVF9QV00sCiAJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCkBAIC0zMzksMjggKzM3MywyNiBAQAogCS5uYW1lID0gIm14Y19wd20iLAogCS5pZCA9IDAsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19wd21fcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfcHdtX3Jlc291cmNlcworCS5yZXNvdXJjZSA9IG14Y19wd21fcmVzb3VyY2VzLAogfTsKIAogLyoKICAqIFJlc291cmNlIGRlZmluaXRpb24gZm9yIHRoZSBNWEMgU0RIQwogICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCQkuc3RhcnQgPSBTREhDMV9CQVNFX0FERFIsCi0JCQkuZW5kICAgPSBTREhDMV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJCX0sCi0JWzFdID0gewotCQkJLnN0YXJ0ID0gTVhDX0lOVF9TREhDMSwKLQkJCS5lbmQgICA9IE1YQ19JTlRfU0RIQzEsCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJCX0sCi0JWzJdID0gewotCQkJLnN0YXJ0ICA9IERNQV9SRVFfU0RIQzEsCi0JCQkuZW5kICAgID0gRE1BX1JFUV9TREhDMSwKLQkJCS5mbGFncyAgPSBJT1JFU09VUkNFX0RNQQotCQl9LAorCXsKKwkJLnN0YXJ0ID0gU0RIQzFfQkFTRV9BRERSLAorCQkuZW5kICAgPSBTREhDMV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9TREhDMSwKKwkJLmVuZCAgID0gTVhDX0lOVF9TREhDMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkuc3RhcnQgID0gRE1BX1JFUV9TREhDMSwKKwkJLmVuZCAgICA9IERNQV9SRVFfU0RIQzEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAogfTsKIAogc3RhdGljIHU2NCBteGNfc2RoYzFfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKQEAgLTM3NywyMSArNDA5LDE5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjMl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCQkuc3RhcnQgPSBTREhDMl9CQVNFX0FERFIsCi0JCQkuZW5kICAgPSBTREhDMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJCX0sCi0JWzFdID0gewotCQkJLnN0YXJ0ID0gTVhDX0lOVF9TREhDMiwKLQkJCS5lbmQgICA9IE1YQ19JTlRfU0RIQzIsCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJCX0sCi0JWzJdID0gewotCQkJLnN0YXJ0ICA9IERNQV9SRVFfU0RIQzIsCi0JCQkuZW5kICAgID0gRE1BX1JFUV9TREhDMiwKLQkJCS5mbGFncyAgPSBJT1JFU09VUkNFX0RNQQotCQl9LAorCXsKKwkJLnN0YXJ0ID0gU0RIQzJfQkFTRV9BRERSLAorCQkuZW5kICAgPSBTREhDMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9TREhDMiwKKwkJLmVuZCAgID0gTVhDX0lOVF9TREhDMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkuc3RhcnQgID0gRE1BX1JFUV9TREhDMiwKKwkJLmVuZCAgICA9IERNQV9SRVFfU0RIQzIsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAogfTsKIAogc3RhdGljIHU2NCBteGNfc2RoYzJfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKQEAgLTQwNywzNSArNDM3LDEyMyBAQAogICAgICAgIC5yZXNvdXJjZSAgICAgICA9IG14Y19zZGhjMl9yZXNvdXJjZXMsCiB9OwogCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvdGdfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBPVEdfQkFTRV9BRERSLAorCQkuZW5kCT0gT1RHX0JBU0VfQUREUiArIDB4MWZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAk9IE1YQ19JTlRfVVNCMywKKwkJLmVuZAk9IE1YQ19JTlRfVVNCMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgb3RnX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKKy8qIE9URyBnYWRnZXQgZGV2aWNlICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfdWRjX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZnNsLXVzYjItdWRjIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzawkJPSAmb3RnX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmZVTCwKKwl9LAorCS5yZXNvdXJjZQk9IG90Z19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG90Z19yZXNvdXJjZXMpLAorfTsKKworLyogT1RHIGhvc3QgKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX290Z19ob3N0ID0geworCS5uYW1lID0gIm14Yy1laGNpIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJCS5kbWFfbWFzayA9ICZvdGdfZG1hbWFzaywKKwl9LAorCS5yZXNvdXJjZSA9IG90Z19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG90Z19yZXNvdXJjZXMpLAorfTsKKworLyogVVNCIGhvc3QgMSAqLworCitzdGF0aWMgdTY0IHVzYmgxX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3VzYmgxX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gT1RHX0JBU0VfQUREUiArIDB4MjAwLAorCQkuZW5kID0gT1RHX0JBU0VfQUREUiArIDB4M2ZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQ19JTlRfVVNCMSwKKwkJLmVuZCA9IE1YQ19JTlRfVVNCMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmgxID0geworCS5uYW1lID0gIm14Yy1laGNpIiwKKwkuaWQgPSAxLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJCS5kbWFfbWFzayA9ICZ1c2JoMV9kbWFtYXNrLAorCX0sCisJLnJlc291cmNlID0gbXhjX3VzYmgxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3VzYmgxX3Jlc291cmNlcyksCit9OworCisvKiBVU0IgaG9zdCAyICovCitzdGF0aWMgdTY0IHVzYmgyX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3VzYmgyX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gT1RHX0JBU0VfQUREUiArIDB4NDAwLAorCQkuZW5kID0gT1RHX0JBU0VfQUREUiArIDB4NWZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQ19JTlRfVVNCMiwKKwkJLmVuZCA9IE1YQ19JTlRfVVNCMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmgyID0geworCS5uYW1lID0gIm14Yy1laGNpIiwKKwkuaWQgPSAyLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJCS5kbWFfbWFzayA9ICZ1c2JoMl9kbWFtYXNrLAorCX0sCisJLnJlc291cmNlID0gbXhjX3VzYmgyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3VzYmgyX3Jlc291cmNlcyksCit9OworI2VuZGlmCisKIC8qIEdQSU8gcG9ydCBkZXNjcmlwdGlvbiAqLwogc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteF9ncGlvX3BvcnRzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby0wIiwKIAkJLmlycSA9IE1YQ19JTlRfR1BJTywKIAkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSKSwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAotCX0sCi0JWzFdID0geworCX0sIHsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby0xIiwKIAkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSICsgMHgxMDApLAogCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiwKLQl9LAotCVsyXSA9IHsKKwl9LCB7CiAJCS5jaGlwLmxhYmVsID0gImdwaW8tMiIsCiAJCS5iYXNlID0gSU9fQUREUkVTUyhHUElPX0JBU0VfQUREUiArIDB4MjAwKSwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQsCi0JfSwKLQlbM10gPSB7CisJfSwgewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTMiLAogCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDMwMCksCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDk2LAotCX0sCi0JWzRdID0geworCX0sIHsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby00IiwKIAkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSICsgMHg0MDApLAogCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAxMjgsCi0JfSwKLQlbNV0gPSB7CisJfSwgewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTUiLAogCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDUwMCksCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDE2MCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaAppbmRleCAwNDkwMDViLi5kMzE1NDA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5oCkBAIC00LDcgKzQsNiBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDQ7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0NTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193ZHQ7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaXJkYV9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UwOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTI7CkBAIC0yMCwzICsxOSwxMSBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UxOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NkaGNfZGV2aWNlMDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfb3RnX3VkY19kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfb3RnX2hvc3Q7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTI7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2V1a3JlYV9jcHVpbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvZXVrcmVhX2NwdWlteDI3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxODc2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2V1a3JlYV9jcHVpbXgyNy5jCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCisgKgorICogQmFzZWQgb24gcGNtMDM4LmMgd2hpY2ggaXMgOgorICogQ29weXJpZ2h0IDIwMDcgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPiwgUGVuZ3V0cm9uaXgKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGxhdC1yYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2JvYXJkLWV1a3JlYV9jcHVpbXgyNy5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBpbnQgZXVrcmVhX2NwdWlteDI3X3BpbnNbXSA9IHsKKwkvKiBVQVJUMSAqLworCVBFMTJfUEZfVUFSVDFfVFhELAorCVBFMTNfUEZfVUFSVDFfUlhELAorCVBFMTRfUEZfVUFSVDFfQ1RTLAorCVBFMTVfUEZfVUFSVDFfUlRTLAorCS8qIFVBUlQ0ICovCisJUEIyNl9BRl9VQVJUNF9SVFMsCisJUEIyOF9BRl9VQVJUNF9UWEQsCisJUEIyOV9BRl9VQVJUNF9DVFMsCisJUEIzMV9BRl9VQVJUNF9SWEQsCisJLyogRkVDICovCisJUEQwX0FJTl9GRUNfVFhEMCwKKwlQRDFfQUlOX0ZFQ19UWEQxLAorCVBEMl9BSU5fRkVDX1RYRDIsCisJUEQzX0FJTl9GRUNfVFhEMywKKwlQRDRfQU9VVF9GRUNfUlhfRVIsCisJUEQ1X0FPVVRfRkVDX1JYRDEsCisJUEQ2X0FPVVRfRkVDX1JYRDIsCisJUEQ3X0FPVVRfRkVDX1JYRDMsCisJUEQ4X0FGX0ZFQ19NRElPLAorCVBEOV9BSU5fRkVDX01EQywKKwlQRDEwX0FPVVRfRkVDX0NSUywKKwlQRDExX0FPVVRfRkVDX1RYX0NMSywKKwlQRDEyX0FPVVRfRkVDX1JYRDAsCisJUEQxM19BT1VUX0ZFQ19SWF9EViwKKwlQRDE0X0FPVVRfRkVDX1JYX0NMSywKKwlQRDE1X0FPVVRfRkVDX0NPTCwKKwlQRDE2X0FJTl9GRUNfVFhfRVIsCisJUEYyM19BSU5fRkVDX1RYX0VOLAorCS8qIEkyQzEgKi8KKwlQRDE3X1BGX0kyQ19EQVRBLAorCVBEMThfUEZfSTJDX0NMSywKKwkvKiBTREhDMiAqLworCVBCNF9QRl9TRDJfRDAsCisJUEI1X1BGX1NEMl9EMSwKKwlQQjZfUEZfU0QyX0QyLAorCVBCN19QRl9TRDJfRDMsCisJUEI4X1BGX1NEMl9DTUQsCisJUEI5X1BGX1NEMl9DTEssCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX01PRFVMRSkKKwkvKiBRdWFkIFVBUlQncyBJUlEgKi8KKwlHUElPX1BPUlREIHwgMjIgfCBHUElPX0dQSU8gfCBHUElPX0lOLAorCUdQSU9fUE9SVEQgfCAyMyB8IEdQSU9fR1BJTyB8IEdQSU9fSU4sCisJR1BJT19QT1JURCB8IDI3IHwgR1BJT19HUElPIHwgR1BJT19JTiwKKwlHUElPX1BPUlREIHwgMzAgfCBHUElPX0dQSU8gfCBHUElPX0lOLAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBldWtyZWFfY3B1aW14MjdfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGggPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldWtyZWFfY3B1aW14MjdfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ID0gMHhjMDAwMDAwMCwKKwkuZW5kICAgPSAweGMzZmZmZmZmLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXVrcmVhX2NwdWlteDI3X25vcl9tdGRfZGV2aWNlID0geworCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXVrcmVhX2NwdWlteDI3X2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCisJLnJlc291cmNlID0gJmV1a3JlYV9jcHVpbXgyN19mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGFbXSA9IHsKKwl7CisJCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCisJfSwgeworCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgZXVrcmVhX2NwdWlteDI3X25hbmRfYm9hcmRfaW5mbyA9IHsKKwkud2lkdGggPSAxLAorCS5od19lY2MgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZldWtyZWFfY3B1aW14Mjdfbm9yX210ZF9kZXZpY2UsCisJJm14Y19mZWNfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBldWtyZWFfY3B1aW14MjdfaTJjXzFfZGF0YSA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZXVrcmVhX2NwdWlteDI3X2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAorCX0sCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpKENTM19CQVNFX0FERFIgKyAweDIwMDAwMCksCisJCS5pcnEgPSBJUlFfR1BJT0IoMjMpLAorCQkudWFydGNsayA9IDE0NzQ1NjAwLAorCQkucmVnc2hpZnQgPSAxLAorCQkuaW90eXBlID0gVVBJT19NRU0sCisJCS5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCB8IFVQRl9JT1JFTUFQLAorCX0sIHsKKwkJLm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZykoQ1MzX0JBU0VfQUREUiArIDB4NDAwMDAwKSwKKwkJLmlycSA9IElSUV9HUElPQigyMiksCisJCS51YXJ0Y2xrID0gMTQ3NDU2MDAsCisJCS5yZWdzaGlmdCA9IDEsCisJCS5pb3R5cGUgPSBVUElPX01FTSwKKwkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0lPUkVNQVAsCisJfSwgeworCQkubWFwYmFzZSA9ICh1bnNpZ25lZCBsb25nKShDUzNfQkFTRV9BRERSICsgMHg4MDAwMDApLAorCQkuaXJxID0gSVJRX0dQSU9CKDI3KSwKKwkJLnVhcnRjbGsgPSAxNDc0NTYwMCwKKwkJLnJlZ3NoaWZ0ID0gMSwKKwkJLmlvdHlwZSA9IFVQSU9fTUVNLAorCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QgfCBVUEZfSU9SRU1BUCwKKwl9LCB7CisJCS5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpKENTM19CQVNFX0FERFIgKyAweDEwMDAwMDApLAorCQkuaXJxID0gSVJRX0dQSU9CKDMwKSwKKwkJLnVhcnRjbGsgPSAxNDc0NTYwMCwKKwkJLnJlZ3NoaWZ0ID0gMSwKKwkJLmlvdHlwZSA9IFVQSU9fTUVNLAorCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QgfCBVUEZfSU9SRU1BUCwKKwl9LCB7CisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZSA9ICJzZXJpYWw4MjUwIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gc2VyaWFsX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisjZW5kaWYKKworc3RhdGljIHZvaWQgX19pbml0IGV1a3JlYV9jcHVpbXgyN19pbml0KHZvaWQpCit7CisJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhldWtyZWFfY3B1aW14MjdfcGlucywKKwkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14MjdfcGlucyksICJDUFVJTVgyNyIpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGFbMF0pOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmZXVrcmVhX2NwdWlteDI3X25hbmRfYm9hcmRfaW5mbyk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBldWtyZWFfY3B1aW14MjdfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14MjdfaTJjX2RldmljZXMpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMCwgJmV1a3JlYV9jcHVpbXgyN19pMmNfMV9kYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOworCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9FVUtSRUFfQ1BVSU1YMjdfVVNFU0RIQzIpCisJLyogU0RIQzIgY2FuIGJlIHVzZWQgZm9yIFdpZmkgKi8KKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCBOVUxMKTsKKwkvKiBpbiB3aGljaCBjYXNlIFVBUlQ0IGlzIGFsc28gdXNlZCBmb3IgQmx1ZXRvb3RoICovCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMywgJnVhcnRfcGRhdGFbMV0pOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfTU9EVUxFKQorCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0VVS1JFQV9NQklNWDI3X0JBU0VCT0FSRAorCWV1a3JlYV9tYmlteDI3X2Jhc2Vib2FyZF9pbml0KCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgX19pbml0IGV1a3JlYV9jcHVpbXgyN190aW1lcl9pbml0KHZvaWQpCit7CisJbXgyN19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIGV1a3JlYV9jcHVpbXgyN190aW1lciA9IHsKKwkuaW5pdCA9IGV1a3JlYV9jcHVpbXgyN190aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChDUFVJTVgyNywgIkVVS1JFQSBDUFVJTVgyNyIpCisJLnBoeXNfaW8gICAgICAgID0gQUlQSV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0ICAgID0gKChBSVBJX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDI3X21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IGV1a3JlYV9jcHVpbXgyN19pbml0LAorCS50aW1lciAgICAgICAgICA9ICZldWtyZWFfY3B1aW14MjdfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvZXVrcmVhX21iaW14MjctYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9ldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzgyYjZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZXVrcmVhX21iaW14MjctYmFzZWJvYXJkLmMKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpYyBCZW5hcmQgLSBlcmljQGV1a3JlYS5jb20KKyAqCisgKiBCYXNlZCBvbiBwY205NzAtYmFzZWJvYXJkLmMgd2hpY2ggaXMgOgorICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydCAoa2VybmVsQHBlbmd1dHJvbml4LmRlKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgaW50IGV1a3JlYV9tYmlteDI3X3BpbnNbXSA9IHsKKwkvKiBVQVJUMiAqLworCVBFM19QRl9VQVJUMl9DVFMsCisJUEU0X1BGX1VBUlQyX1JUUywKKwlQRTZfUEZfVUFSVDJfVFhELAorCVBFN19QRl9VQVJUMl9SWEQsCisJLyogVUFSVDMgKi8KKwlQRThfUEZfVUFSVDNfVFhELAorCVBFOV9QRl9VQVJUM19SWEQsCisJUEUxMF9QRl9VQVJUM19DVFMsCisJUEUxMV9QRl9VQVJUM19SVFMsCisJLyogVUFSVDQgKi8KKwlQQjI2X0FGX1VBUlQ0X1JUUywKKwlQQjI4X0FGX1VBUlQ0X1RYRCwKKwlQQjI5X0FGX1VBUlQ0X0NUUywKKwlQQjMxX0FGX1VBUlQ0X1JYRCwKKwkvKiBTREhDMSovCisJUEUxOF9QRl9TRDFfRDAsCisJUEUxOV9QRl9TRDFfRDEsCisJUEUyMF9QRl9TRDFfRDIsCisJUEUyMV9QRl9TRDFfRDMsCisJUEUyMl9QRl9TRDFfQ01ELAorCVBFMjNfUEZfU0QxX0NMSywKKwkvKiBkaXNwbGF5ICovCisJUEE1X1BGX0xTQ0xLLAorCVBBNl9QRl9MRDAsCisJUEE3X1BGX0xEMSwKKwlQQThfUEZfTEQyLAorCVBBOV9QRl9MRDMsCisJUEExMF9QRl9MRDQsCisJUEExMV9QRl9MRDUsCisJUEExMl9QRl9MRDYsCisJUEExM19QRl9MRDcsCisJUEExNF9QRl9MRDgsCisJUEExNV9QRl9MRDksCisJUEExNl9QRl9MRDEwLAorCVBBMTdfUEZfTEQxMSwKKwlQQTE4X1BGX0xEMTIsCisJUEExOV9QRl9MRDEzLAorCVBBMjBfUEZfTEQxNCwKKwlQQTIxX1BGX0xEMTUsCisJUEEyMl9QRl9MRDE2LAorCVBBMjNfUEZfTEQxNywKKwlQQTI4X1BGX0hTWU5DLAorCVBBMjlfUEZfVlNZTkMsCisJUEEzMF9QRl9DT05UUkFTVCwKKwlQQTMxX1BGX09FX0FDRCwKKwkvKiBTUEkxICovCisJUEQyOF9QRl9DU1BJMV9TUzAsCisJUEQyOV9QRl9DU1BJMV9TQ0xLLAorCVBEMzBfUEZfQ1NQSTFfTUlTTywKKwlQRDMxX1BGX0NTUEkxX01PU0ksCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGdwaW9fbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJsZWQxIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZ3BpbwkJCT0gR1BJT19QT1JURiB8IDE2LAorCX0sCisJeworCQkubmFtZQkJCT0gImxlZDIiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZ3BpbwkJCT0gR1BJT19QT1JURiB8IDE5LAorCX0sCisJeworCQkubmFtZQkJCT0gImJhY2tsaWdodCIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiYmFja2xpZ2h0IiwKKwkJLmFjdGl2ZV9sb3cJCT0gMCwKKwkJLmdwaW8JCQk9IEdQSU9fUE9SVEUgfCA1LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZ3Bpb19sZWRfaW5mbyA9IHsKKwkubGVkcwkJPSBncGlvX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShncGlvX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19ncGlvID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZ3Bpb19sZWRfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIGV1a3JlYV9tYmlteDI3X21vZGVzW10gPSB7CisJeworCQkubW9kZSA9IHsKKwkJCS5uYW1lCQk9ICJDTU8tUUdWQSIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gMzIwLAorCQkJLnlyZXMJCT0gMjQwLAorCQkJLnBpeGNsb2NrCT0gMTU2MDAwLAorCQkJLmhzeW5jX2xlbgk9IDMwLAorCQkJLmxlZnRfbWFyZ2luCT0gMzgsCisJCQkucmlnaHRfbWFyZ2luCT0gMjAsCisJCQkudnN5bmNfbGVuCT0gMywKKwkJCS51cHBlcl9tYXJnaW4JPSAxNSwKKwkJCS5sb3dlcl9tYXJnaW4JPSA0LAorCQl9LAorCQkucGNyCQk9IDB4RkFEMDhCODAsCisJCS5icHAJCT0gMTYsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgZXVrcmVhX21iaW14MjdfZmJfZGF0YSA9IHsKKwkubW9kZSA9IGV1a3JlYV9tYmlteDI3X21vZGVzLAorCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X21vZGVzKSwKKworCS5wd21yCQk9IDB4MDBBOTAzRkYsCisJLmxzY3IxCQk9IDB4MDAxMjAzMDAsCisJLmRtYWNyCQk9IDB4MDAwNDAwNjAsCit9OworCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhW10gPSB7CisJeworCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorCX0sCisJeworCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorCX0sCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikKKwl8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKKworI2RlZmluZSBBRFM3ODQ2X1BFTkRPV04gKEdQSU9fUE9SVEQgfCAyNSkKKworc3RhdGljIHZvaWQgYWRzNzg0Nl9kZXZfaW5pdCh2b2lkKQoreworCWlmIChncGlvX3JlcXVlc3QoQURTNzg0Nl9QRU5ET1dOLCAiQURTNzg0NiBwZW5kb3duIikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgZ2V0IGFkczc0NiBwZW4gZG93biBHUElPXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEFEUzc4NDZfUEVORE9XTik7Cit9CisKK3N0YXRpYyBpbnQgYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZSh2b2lkKQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoQURTNzg0Nl9QRU5ET1dOKTsKK30KKworc3RhdGljIHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgYWRzNzg0Nl9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZ2V0X3BlbmRvd25fc3RhdGUJPSBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlLAorCS5rZWVwX3ZyZWZfb24JCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZXVrcmVhX21iaW14Mjdfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCVswXSA9IHsKKwkJLm1vZGFsaWFzCT0gImFkczc4NDYiLAorCQkuYnVzX251bQk9IDAsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5tYXhfc3BlZWRfaHoJPSAxNTAwMDAwLAorCQkuaXJxCQk9IElSUV9HUElPRCgyNSksCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmFkczc4NDZfY29uZmlnLAorCQkubW9kZSAgICAgICAgICAgPSBTUElfTU9ERV8yLAorCX0sCit9OworCitzdGF0aWMgaW50IGV1a3JlYV9tYmlteDI3X3NwaV9jc1tdID0ge0dQSU9fUE9SVEQgfCAyOH07CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgZXVrcmVhX21iaW14Mjdfc3BpXzBfZGF0YSA9IHsKKwkuY2hpcHNlbGVjdAk9IGV1a3JlYV9tYmlteDI3X3NwaV9jcywKKwkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X3NwaV9jcyksCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbGVkc19ncGlvLAorfTsKKworLyoKKyAqIHN5c3RlbSBpbml0IGZvciBiYXNlYm9hcmQgdXNhZ2UuIFdpbGwgYmUgY2FsbGVkIGJ5IGNwdWlteDI3IGluaXQuCisgKgorICogQWRkIHBsYXRmb3JtIGRldmljZXMgcHJlc2VudCBvbiB0aGlzIGJhc2Vib2FyZCBhbmQgaW5pdAorICogdGhlbSBmcm9tIENQVSBzaWRlIGFzIGZhciBhcyByZXF1aXJlZCB0byB1c2UgdGhlbSBsYXRlciBvbgorICovCit2b2lkIF9faW5pdCBldWtyZWFfbWJpbXgyN19iYXNlYm9hcmRfaW5pdCh2b2lkKQoreworCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMoZXVrcmVhX21iaW14MjdfcGlucywKKwkJQVJSQVlfU0laRShldWtyZWFfbWJpbXgyN19waW5zKSwgIk1CSU1YMjciKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhWzBdKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UyLCAmdWFydF9wZGF0YVsxXSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmZXVrcmVhX21iaW14MjdfZmJfZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMCwgTlVMTCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KQorCXx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDZfTU9EVUxFKQorCS8qIFNQSSBhbmQgQURTNzg0NiBUb3VjaHNjcmVlbiBjb250cm9sZXIgaW5pdCAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI1IHwgR1BJT19HUElPIHwgR1BJT19JTik7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UwLCAmZXVrcmVhX21iaW14Mjdfc3BpXzBfZGF0YSk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZXVrcmVhX21iaW14Mjdfc3BpX2JvYXJkX2luZm8sCisJCQlBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X3NwaV9ib2FyZF9pbmZvKSk7CisJYWRzNzg0Nl9kZXZfaW5pdCgpOworI2VuZGlmCisKKwkvKiBMZWRzIGNvbmZpZ3VyYXRpb24gKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEYgfCAxNiB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEYgfCAxOSB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKKwkvKiBCYWNrbGlnaHQgKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEUgfCA1IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9nZW5lcmljLmMKaW5kZXggMTY5MzcyZi4uYWU4Zjc1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2dlbmVyaWMuYwpAQCAtNzIsNiArNzIsNyBAQAogdm9pZCBfX2luaXQgbXgyMV9tYXBfaW8odm9pZCkKIHsKIAlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgyMSk7CisJbXhjX2FyY2hfcmVzZXRfaW5pdChJT19BRERSRVNTKFdET0dfQkFTRV9BRERSKSk7CiAKIAlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKIH0KQEAgLTc5LDcgKzgwLDE4IEBACiB2b2lkIF9faW5pdCBteDI3X21hcF9pbyh2b2lkKQogewogCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDI3KTsKKwlteGNfYXJjaF9yZXNldF9pbml0KElPX0FERFJFU1MoV0RPR19CQVNFX0FERFIpKTsKIAogCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOwogfQogCit2b2lkIF9faW5pdCBteDI3X2luaXRfaXJxKHZvaWQpCit7CisJbXhjX2luaXRfaXJxKElPX0FERFJFU1MoQVZJQ19CQVNFX0FERFIpKTsKK30KKwordm9pZCBfX2luaXQgbXgyMV9pbml0X2lycSh2b2lkKQoreworCW14MjdfaW5pdF9pcnEoKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbXgyMWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbXgyMWFkcy5jCmluZGV4IGE1ZWU0NjEuLmNmNWY3N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL214MjFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9teDIxYWRzLmMKQEAgLTE2NCwyNSArMTY0LDMzIEBACiAgKiBDb25uZWN0ZWQgaXMgYSBwb3J0cmFpdCBTaGFycC1RVkdBIGRpc3BsYXkKICAqIG9mIHR5cGU6IExRMDM1UTdEQjAyCiAgKi8KK3N0YXRpYyBzdHJ1Y3QgaW14X2ZiX3ZpZGVvbW9kZSBteDIxYWRzX21vZGVzW10gPSB7CisJeworCQkubW9kZSA9IHsKKwkJCS5uYW1lCQk9ICJTaGFycC1MUTAzNVE3IiwKKwkJCS5yZWZyZXNoCT0gNjAsCisJCQkueHJlcwkJPSAyNDAsCisJCQkueXJlcwkJPSAzMjAsCisJCQkucGl4Y2xvY2sJPSAxODg2NzksIC8qIGluIHBzICg1LjNNSHopICovCisJCQkuaHN5bmNfbGVuCT0gMiwKKwkJCS5sZWZ0X21hcmdpbgk9IDYsCisJCQkucmlnaHRfbWFyZ2luCT0gMTYsCisJCQkudnN5bmNfbGVuCT0gMSwKKwkJCS51cHBlcl9tYXJnaW4JPSA4LAorCQkJLmxvd2VyX21hcmdpbgk9IDEwLAorCQl9LAorCQkucGNyCQk9IDB4ZmIxMDhiYzcsCisJCS5icHAJCT0gMTYsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgbXgyMWFkc19mYl9kYXRhID0gewotCS5waXhjbG9jayAgICAgICA9IDE4ODY3OSwgLyogaW4gcHMgKi8KLQkueHJlcyAgICAgICAgICAgPSAyNDAsCi0JLnlyZXMgICAgICAgICAgID0gMzIwLAorCS5tb2RlID0gbXgyMWFkc19tb2RlcywKKwkubnVtX21vZGVzID0gQVJSQVlfU0laRShteDIxYWRzX21vZGVzKSwKIAotCS5icHAgICAgICAgICAgICA9IDE2LAotCS5oc3luY19sZW4gICAgICA9IDIsCi0JLmxlZnRfbWFyZ2luICAgID0gNiwKLQkucmlnaHRfbWFyZ2luICAgPSAxNiwKLQotCS52c3luY19sZW4gICAgICA9IDEsCi0JLnVwcGVyX21hcmdpbiAgID0gOCwKLQkubG93ZXJfbWFyZ2luICAgPSAxMCwKLQkuZml4ZWRfc2NyZWVuX2NwdSA9IDAsCi0KLQkucGNyICAgICAgICAgICAgPSAweEZCMTA4QkM3LAotCS5wd21yICAgICAgICAgICA9IDB4MDBBOTAxZmYsCi0JLmxzY3IxICAgICAgICAgID0gMHgwMDEyMDMwMCwKLQkuZG1hY3IgICAgICAgICAgPSAweDAwMDIwMDA4LAorCS5wd21yCQk9IDB4MDBhOTAzZmYsCisJLmxzY3IxCQk9IDB4MDAxMjAzMDAsCisJLmRtYWNyCQk9IDB4MDAwMjAwMDgsCiAKIAkuaW5pdCA9IG14MjFhZHNfZmJfaW5pdCwKIAkuZXhpdCA9IG14MjFhZHNfZmJfZXhpdCwKQEAgLTI4MCw3ICsyODgsNyBAQAogCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyAgICAgICAgID0gbXgyMWFkc19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycSAgICAgICA9IG14MjFfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXgyMWFkc19ib2FyZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZteDIxYWRzX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL214MjdhZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgyL214MjdhZHMuYwppbmRleCAwMmRhZGRhLi44M2U0MTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9teDI3YWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvbXgyN2Fkcy5jCkBAIC0xODMsMjAgKzE4MywyOSBAQAogCQlfX3Jhd193cml0ZXcoUEJDX0JDVFJMMV9MQ0RPTiwgUEJDX0JDVFJMMV9DTEVBUl9SRUcpOwogfQogCitzdGF0aWMgc3RydWN0IGlteF9mYl92aWRlb21vZGUgbXgyN2Fkc19tb2Rlc1tdID0geworCXsKKwkJLm1vZGUgPSB7CisJCQkubmFtZQkJPSAiU2hhcnAtTFEwMzVRNyIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gMjQwLAorCQkJLnlyZXMJCT0gMzIwLAorCQkJLnBpeGNsb2NrCT0gMTg4Njc5LCAvKiBpbiBwcyAoNS4zTUh6KSAqLworCQkJLmhzeW5jX2xlbgk9IDEsCisJCQkubGVmdF9tYXJnaW4JPSA5LAorCQkJLnJpZ2h0X21hcmdpbgk9IDE2LAorCQkJLnZzeW5jX2xlbgk9IDEsCisJCQkudXBwZXJfbWFyZ2luCT0gNywKKwkJCS5sb3dlcl9tYXJnaW4JPSA5LAorCQl9LAorCQkuYnBwCQk9IDE2LAorCQkucGNyCQk9IDB4RkIwMDhCQzAsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgbXgyN2Fkc19mYl9kYXRhID0gewotCS5waXhjbG9jawk9IDE4ODY3OSwKLQkueHJlcwkJPSAyNDAsCi0JLnlyZXMJCT0gMzIwLAotCi0JLmJwcAkJPSAxNiwKLQkuaHN5bmNfbGVuCT0gMSwKLQkubGVmdF9tYXJnaW4JPSA5LAotCS5yaWdodF9tYXJnaW4JPSAxNiwKLQotCS52c3luY19sZW4JPSAxLAotCS51cHBlcl9tYXJnaW4JPSA3LAotCS5sb3dlcl9tYXJnaW4JPSA5LAotCS5maXhlZF9zY3JlZW5fY3B1ID0gMCwKKwkubW9kZSA9IG14MjdhZHNfbW9kZXMsCisJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobXgyN2Fkc19tb2RlcyksCiAKIAkvKgogCSAqIC0gSFNZTkMgYWN0aXZlIGhpZ2gKQEAgLTIwNyw3ICsyMTYsNiBAQAogCSAqIC0gZGF0YSBlbmFibGUgbG93IGFjdGl2ZQogCSAqIC0gZW5hYmxlIHNoYXJwIG1vZGUKIAkgKi8KLQkucGNyCQk9IDB4RkIwMDhCQzAsCiAJLnB3bXIJCT0gMHgwMEE5MDNGRiwKIAkubHNjcjEJCT0gMHgwMDEyMDMwMCwKIAkuZG1hY3IJCT0gMHgwMDAyMDAxMCwKQEAgLTMzMCw3ICszMzgsNyBAQAogCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyAgICAgICAgID0gbXgyN2Fkc19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXgyN2Fkc19ib2FyZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZteDI3YWRzX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL214MjdsaXRlLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9teDI3bGl0ZS5jCmluZGV4IDNhZTExY2IuLjgyZWEyMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL214MjdsaXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvbXgyN2xpdGUuYwpAQCAtODksNyArODksNyBAQAogCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyAgICAgICAgID0gbXgyN19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXgyN2xpdGVfaW5pdCwKIAkudGltZXIgICAgICAgICAgPSAmbXgyN2xpdGVfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbXgyN3Bkay5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbXgyN3Bkay5jCmluZGV4IDFkOTIzOGMuLjY3NjFkMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL214MjdwZGsuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9teDI3cGRrLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAkuaW9fcGdfb2Zmc3QgICAgPSAoKEFJUElfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAogCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKKwkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IG14MjdwZGtfaW5pdCwKIAkudGltZXIgICAgICAgICAgPSAmbXgyN3Bka190aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY2ExMDAuYyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjYTEwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNWIxNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14Mi9wY2ExMDAuYwpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2FzY2hhIEhhdWVyIChrZXJuZWxAcGVuZ3V0cm9uaXguZGUpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZWVwcm9tLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC5oPgorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9JTVhfTU9EVUxFKQorI2luY2x1ZGUgPG1hY2gvc3BpLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBpbnQgcGNhMTAwX3BpbnNbXSA9IHsKKwkvKiBVQVJUMSAqLworCVBFMTJfUEZfVUFSVDFfVFhELAorCVBFMTNfUEZfVUFSVDFfUlhELAorCVBFMTRfUEZfVUFSVDFfQ1RTLAorCVBFMTVfUEZfVUFSVDFfUlRTLAorCS8qIFNESEMgKi8KKwlQQjRfUEZfU0QyX0QwLAorCVBCNV9QRl9TRDJfRDEsCisJUEI2X1BGX1NEMl9EMiwKKwlQQjdfUEZfU0QyX0QzLAorCVBCOF9QRl9TRDJfQ01ELAorCVBCOV9QRl9TRDJfQ0xLLAorCS8qIEZFQyAqLworCVBEMF9BSU5fRkVDX1RYRDAsCisJUEQxX0FJTl9GRUNfVFhEMSwKKwlQRDJfQUlOX0ZFQ19UWEQyLAorCVBEM19BSU5fRkVDX1RYRDMsCisJUEQ0X0FPVVRfRkVDX1JYX0VSLAorCVBENV9BT1VUX0ZFQ19SWEQxLAorCVBENl9BT1VUX0ZFQ19SWEQyLAorCVBEN19BT1VUX0ZFQ19SWEQzLAorCVBEOF9BRl9GRUNfTURJTywKKwlQRDlfQUlOX0ZFQ19NREMsCisJUEQxMF9BT1VUX0ZFQ19DUlMsCisJUEQxMV9BT1VUX0ZFQ19UWF9DTEssCisJUEQxMl9BT1VUX0ZFQ19SWEQwLAorCVBEMTNfQU9VVF9GRUNfUlhfRFYsCisJUEQxNF9BT1VUX0ZFQ19SWF9DTEssCisJUEQxNV9BT1VUX0ZFQ19DT0wsCisJUEQxNl9BSU5fRkVDX1RYX0VSLAorCVBGMjNfQUlOX0ZFQ19UWF9FTiwKKwkvKiBTU0kxICovCisJUEMyMF9QRl9TU0kxX0ZTLAorCVBDMjFfUEZfU1NJMV9SWEQsCisJUEMyMl9QRl9TU0kxX1RYRCwKKwlQQzIzX1BGX1NTSTFfQ0xLLAorCS8qIG9uYm9hcmQgSTJDICovCisJUEM1X1BGX0kyQzJfU0RBLAorCVBDNl9QRl9JMkMyX1NDTCwKKwkvKiBleHRlcm5hbCBJMkMgKi8KKwlQRDE3X1BGX0kyQ19EQVRBLAorCVBEMThfUEZfSTJDX0NMSywKKwkvKiBTUEkxICovCisJUEQyNV9QRl9DU1BJMV9SRFksCisJUEQyOV9QRl9DU1BJMV9TQ0xLLAorCVBEMzBfUEZfQ1NQSTFfTUlTTywKKwlQRDMxX1BGX0NTUEkxX01PU0ksCit9OworCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgcGNhMTAwX25hbmRfYm9hcmRfaW5mbyA9IHsKKwkud2lkdGggPSAxLAorCS5od19lY2MgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZteGNfdzFfbWFzdGVyX2RldmljZSwKKwkmbXhjX2ZlY19kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIHBjYTEwMF9pMmNfMV9kYXRhID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYm9hcmRfZWVwcm9tID0geworCS5ieXRlX2xlbiA9IDQwOTYsCisJLnBhZ2Vfc2l6ZSA9IDMyLAorCS5mbGFncyA9IEFUMjRfRkxBR19BRERSMTYsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHBjYTEwMF9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImF0MjQiLCAweDUyKSwgLyogRTA9MCwgRTE9MSwgRTI9MCAqLworCQkucGxhdGZvcm1fZGF0YSA9ICZib2FyZF9lZXByb20sCisJfSwgeworCQlJMkNfQk9BUkRfSU5GTygicnRjLXBjZjg1NjMiLCAweDUxKSwKKwkJLnR5cGUgPSAicGNmODU2MyIKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJsbTc1IiwgMHg0YSksCisJCS50eXBlID0gImxtNzUiCisJfQorfTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9JTVhfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBzcGlfZWVwcm9tIGF0MjUzMjAgPSB7CisJLm5hbWUJCT0gImF0MjUzMjBhbiIsCisJLmJ5dGVfbGVuCT0gNDA5NiwKKwkucGFnZV9zaXplCT0gMzIsCisJLmZsYWdzCQk9IEVFX0FERFIyLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwY2ExMDBfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzID0gImF0MjUiLAorCQkubWF4X3NwZWVkX2h6ID0gMzAwMDAsCisJCS5idXNfbnVtID0gMCwKKwkJLmNoaXBfc2VsZWN0ID0gMSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYXQyNTMyMCwKKwl9LAorfTsKKworc3RhdGljIGludCBwY2ExMDBfc3BpX2NzW10gPSB7R1BJT19QT1JURCArIDI4LCBHUElPX1BPUlREICsgMjd9OworCitzdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHBjYTEwMF9zcGlfMF9kYXRhID0geworCS5jaGlwc2VsZWN0CT0gcGNhMTAwX3NwaV9jcywKKwkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKHBjYTEwMF9zcGlfY3MpLAorfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHBjYTEwMF9zZGhjMl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLAorCQl2b2lkICpkYXRhKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2lycShJUlFfR1BJT0MoMjkpLCBkZXRlY3RfaXJxLAorCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCQkgICJpbXgtbW1jLWRldGVjdCIsIGRhdGEpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUgorCQkJInBjYTEwMDogRmFpbGVkIHRvIHJldWVzdCBpcnEgZm9yIHNkL21tYyBkZXRlY3Rpb25cbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGNhMTAwX3NkaGMyX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKElSUV9HUElPQygyOSksIGRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGNfcGRhdGEgPSB7CisJLmluaXQgPSBwY2ExMDBfc2RoYzJfaW5pdCwKKwkuZXhpdCA9IHBjYTEwMF9zZGhjMl9leGl0LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHBjYTEwMF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMocGNhMTAwX3BpbnMsCisJCQlBUlJBWV9TSVpFKHBjYTEwMF9waW5zKSwgIlBDQTEwMCIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAicGNhMTAwOiBGYWlsZWQgdG8gc2V0dXAgcGlucyAoJWQpXG4iLCByZXQpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOworCisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMjkgfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCAmc2RoY19wZGF0YSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZwY2ExMDBfbmFuZF9ib2FyZF9pbmZvKTsKKworCS8qIG9ubHkgdGhlIGkyYyBtYXN0ZXIgMSBpcyB1c2VkIG9uIHRoaXMgQ1BVIGNhcmQgKi8KKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBwY2ExMDBfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShwY2ExMDBfaTJjX2RldmljZXMpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJnBjYTEwMF9pMmNfMV9kYXRhKTsKKworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI3IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCisJLyogR1BJTzBfSVJRICovCisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMzEgfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKKwkvKiBHUElPMV9JUlEgKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEMgfCAyNSB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOworCS8qIEdQSU8yX0lSUSAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURSB8IDUgfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9JTVhfTU9EVUxFKQorCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBjYTEwMF9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKHBjYTEwMF9zcGlfYm9hcmRfaW5mbykpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zcGlfZGV2aWNlMCwgJnBjYTEwMF9zcGlfMF9kYXRhKTsKKyNlbmRpZgorCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwY2ExMDBfdGltZXJfaW5pdCh2b2lkKQoreworCW14MjdfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBwY2ExMDBfdGltZXIgPSB7CisJLmluaXQgPSBwY2ExMDBfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoUENBMTAwLCAicGh5Q0FSRC1pLk1YMjciKQorCS5waHlzX2lvICAgICAgICA9IEFJUElfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyAgICAgICAgID0gbXgyN19tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IHBjYTEwMF9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZwY2ExMDBfdGltZXIsCitNQUNISU5FX0VORAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCmluZGV4IGE0NjI4ZDAuLmVlNjVkZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCkBAIC0xODYsMTcgKzE4NiwxMyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY20wMzhfaTJjX2RldmljZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQlJMkNfQk9BUkRfSU5GTygiYXQyNCIsIDB4NTIpLCAvKiBFMD0wLCBFMT0xLCBFMj0wICovCiAJCS5wbGF0Zm9ybV9kYXRhID0gJmJvYXJkX2VlcHJvbSwKLQl9LAotCVsxXSA9IHsKLQkJSTJDX0JPQVJEX0lORk8oInJ0Yy1wY2Y4NTYzIiwgMHg1MSksCi0JCS50eXBlID0gInBjZjg1NjMiCi0JfSwKLQlbMl0gPSB7CisJfSwgeworCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAorCX0sIHsKIAkJSTJDX0JPQVJEX0lORk8oImxtNzUiLCAweDRhKSwKLQkJLnR5cGUgPSAibG03NSIKIAl9CiB9OwogCkBAIC0yMjAsNiArMjE2LDkgQEAKIAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJnBjbTAzOF9pMmNfMV9kYXRhKTsKIAorCS8qIFBFMTggZm9yIHVzZXItTEVEIEQ0MCAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURSB8IDE4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CiAKICNpZmRlZiBDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJECkBAIC0yNDEsNyArMjQwLDcgQEAKIAkuaW9fcGdfb2Zmc3QgICAgPSAoKEFJUElfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAogCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKKwkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IHBjbTAzOF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZwY20wMzhfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCmluZGV4IDZhM2FjYWY1Li5jMjYxZjU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi9wbGF0Zm9ybS9zamExMDAwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKQEAgLTEyNSw0MCArMTI2LDk2IEBACiAJLmV4aXQgPSBwY205NzBfc2RoYzJfZXhpdCwKIH07CiAKLS8qCi0gKiBDb25uZWN0ZWQgaXMgYSBwb3J0cmFpdCBTaGFycC1RVkdBIGRpc3BsYXkKLSAqIG9mIHR5cGU6IExRMDM1UTdESDA2Ci0gKi8KK3N0YXRpYyBzdHJ1Y3QgaW14X2ZiX3ZpZGVvbW9kZSBwY205NzBfbW9kZXNbXSA9IHsKKwl7CisJCS5tb2RlID0geworCQkJLm5hbWUJCT0gIlNoYXJwLUxRMDM1UTciLAorCQkJLnJlZnJlc2gJPSA2MCwKKwkJCS54cmVzCQk9IDI0MCwKKwkJCS55cmVzCQk9IDMyMCwKKwkJCS5waXhjbG9jawk9IDE4ODY3OSwgLyogaW4gcHMgKDUuM01IeikgKi8KKwkJCS5oc3luY19sZW4JPSA3LAorCQkJLmxlZnRfbWFyZ2luCT0gNSwKKwkJCS5yaWdodF9tYXJnaW4JPSAxNiwKKwkJCS52c3luY19sZW4JPSAxLAorCQkJLnVwcGVyX21hcmdpbgk9IDcsCisJCQkubG93ZXJfbWFyZ2luCT0gOSwKKwkJfSwKKwkJLyoKKwkJICogLSBIU1lOQyBhY3RpdmUgaGlnaAorCQkgKiAtIFZTWU5DIGFjdGl2ZSBoaWdoCisJCSAqIC0gY2xrIG5vdGVuYWJsZWQgd2hpbGUgaWRsZQorCQkgKiAtIGNsb2NrIG5vdCBpbnZlcnRlZAorCQkgKiAtIGRhdGEgbm90IGludmVydGVkCisJCSAqIC0gZGF0YSBlbmFibGUgbG93IGFjdGl2ZQorCQkgKiAtIGVuYWJsZSBzaGFycCBtb2RlCisJCSAqLworCQkucGNyCQk9IDB4RjAwMDgwQzAsCisJCS5icHAJCT0gMTYsCisJfSwgeworCQkubW9kZSA9IHsKKwkJCS5uYW1lCQk9ICJUWDA5MCIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gMjQwLAorCQkJLnlyZXMJCT0gMzIwLAorCQkJLnBpeGNsb2NrCT0gMzgyNTUsCisJCQkubGVmdF9tYXJnaW4JPSAxNDQsCisJCQkucmlnaHRfbWFyZ2luCT0gMCwKKwkJCS51cHBlcl9tYXJnaW4JPSA3LAorCQkJLmxvd2VyX21hcmdpbgk9IDQwLAorCQkJLmhzeW5jX2xlbgk9IDk2LAorCQkJLnZzeW5jX2xlbgk9IDEsCisJCX0sCisJCS8qCisJCSAqIC0gSFNZTkMgYWN0aXZlIGxvdyAoMSA8PCAyMikKKwkJICogLSBWU1lOQyBhY3RpdmUgbG93ICgxIDw8IDIzKQorCQkgKiAtIGNsayBub3RlbmFibGVkIHdoaWxlIGlkbGUKKwkJICogLSBjbG9jayBub3QgaW52ZXJ0ZWQKKwkJICogLSBkYXRhIG5vdCBpbnZlcnRlZAorCQkgKiAtIGRhdGEgZW5hYmxlIGxvdyBhY3RpdmUKKwkJICogLSBlbmFibGUgc2hhcnAgbW9kZQorCQkgKi8KKwkJLnBjciA9IDB4RjAwMDgwODAgfCAoMTw8MjIpIHwgKDE8PDIzKSB8ICgxPDwxOSksCisJCS5icHAgPSAzMiwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBwY20wMzhfZmJfZGF0YSA9IHsKLQkucGl4Y2xvY2sJPSAxODg2NzksIC8qIGluIHBzICg1LjNNSHopICovCi0JLnhyZXMJCT0gMjQwLAotCS55cmVzCQk9IDMyMCwKKwkubW9kZSA9IHBjbTk3MF9tb2RlcywKKwkubnVtX21vZGVzID0gQVJSQVlfU0laRShwY205NzBfbW9kZXMpLAogCi0JLmJwcAkJPSAxNiwKLQkuaHN5bmNfbGVuCT0gNywKLQkubGVmdF9tYXJnaW4JPSA1LAotCS5yaWdodF9tYXJnaW4JPSAxNiwKLQotCS52c3luY19sZW4JPSAxLAotCS51cHBlcl9tYXJnaW4JPSA3LAotCS5sb3dlcl9tYXJnaW4JPSA5LAotCS5maXhlZF9zY3JlZW5fY3B1ID0gMCwKLQotCS8qCi0JICogLSBIU1lOQyBhY3RpdmUgaGlnaAotCSAqIC0gVlNZTkMgYWN0aXZlIGhpZ2gKLQkgKiAtIGNsayBub3RlbmFibGVkIHdoaWxlIGlkbGUKLQkgKiAtIGNsb2NrIG5vdCBpbnZlcnRlZAotCSAqIC0gZGF0YSBub3QgaW52ZXJ0ZWQKLQkgKiAtIGRhdGEgZW5hYmxlIGxvdyBhY3RpdmUKLQkgKiAtIGVuYWJsZSBzaGFycCBtb2RlCi0JICovCi0JLnBjcgkJPSAweEZBMDA4MEMwLAogCS5wd21yCQk9IDB4MDBBOTAzRkYsCiAJLmxzY3IxCQk9IDB4MDAxMjAzMDAsCiAJLmRtYWNyCQk9IDB4MDAwMjAwMTAsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjbTk3MF9zamExMDAwX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ICAgPSBDUzRfQkFTRV9BRERSLAorCQkuZW5kICAgICA9IENTNF9CQVNFX0FERFIgKyAweDEwMCAtIDEsCisJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgICA9IElSUV9HUElPRSgxOSksCisJCS5lbmQgICAgID0gSVJRX0dQSU9FKDE5KSwKKwkJLmZsYWdzICAgPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0VER0UsCisJfSwKK307CisKK3N0cnVjdCBzamExMDAwX3BsYXRmb3JtX2RhdGEgcGNtOTcwX3NqYTEwMDBfcGxhdGZvcm1fZGF0YSA9IHsKKwkuY2xvY2sJCT0gMTYwMDAwMDAgLyAyLAorCS5vY3IJCT0gMHg0MCB8IDB4MTgsCisJLmNkcgkJPSAweDQwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtOTcwX3NqYTEwMDAgPSB7CisJLm5hbWUgPSAic2phMTAwMF9wbGF0Zm9ybSIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGNtOTcwX3NqYTEwMDBfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5yZXNvdXJjZSA9IHBjbTk3MF9zamExMDAwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUocGNtOTcwX3NqYTEwMDBfcmVzb3VyY2VzKSwKK307CisKIC8qCiAgKiBzeXN0ZW0gaW5pdCBmb3IgYmFzZWJvYXJkIHVzYWdlLiBXaWxsIGJlIGNhbGxlZCBieSBwY20wMzggaW5pdC4KICAqCkBAIC0xNzIsNCArMjI5LDUgQEAKIAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19mYl9kZXZpY2UsICZwY20wMzhfZmJfZGF0YSk7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMSwgJnNkaGNfcGRhdGEpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNtOTcwX3NqYTEwMDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW14MjUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzI4ZjU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L0tjb25maWcKQEAgLTAsMCArMSw5IEBACitpZiBBUkNIX01YMjUKKworY29tbWVudCAiTVgyNSBwbGF0Zm9ybXM6IgorCitjb25maWcgTUFDSF9NWDI1XzNEUworCXNlbGVjdCBBUkNIX01YQ19JT01VWF9WMworCWJvb2wgIlN1cHBvcnQgTVgyNVBESyAoM0RTKSBQbGF0Zm9ybSIKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXgyNS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTIzODM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorb2JqLXkJCQkJOj0gbW0ubyBkZXZpY2VzLm8KK29iai0kKENPTkZJR19BUkNIX01YMjUpCQkrPSBjbG9jay5vCitvYmotJChDT05GSUdfTUFDSF9NWDI1XzNEUykJKz0gbXgyNXBkay5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtbXgyNS9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZGQzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14MjUvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDMgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHg4MDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweDgwMDAwMTAwCitpbml0cmRfcGh5cy15CTo9IDB4ODA4MDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyNjk1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9jbG9jay5jCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorCisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgorCisjZGVmaW5lIENSTV9CQVNFCU1YMjVfSU9fQUREUkVTUyhNWDI1X0NSTV9CQVNFX0FERFIpCisKKyNkZWZpbmUgQ0NNX01QQ1RMCTB4MDAKKyNkZWZpbmUgQ0NNX1VQQ1RMCTB4MDQKKyNkZWZpbmUgQ0NNX0NDVEwJMHgwOAorI2RlZmluZSBDQ01fQ0dDUjAJMHgwQworI2RlZmluZSBDQ01fQ0dDUjEJMHgxMAorI2RlZmluZSBDQ01fQ0dDUjIJMHgxNAorI2RlZmluZSBDQ01fUENEUjAJMHgxOAorI2RlZmluZSBDQ01fUENEUjEJMHgxQworI2RlZmluZSBDQ01fUENEUjIJMHgyMAorI2RlZmluZSBDQ01fUENEUjMJMHgyNAorI2RlZmluZSBDQ01fUkNTUgkweDI4CisjZGVmaW5lIENDTV9DUkRSCTB4MkMKKyNkZWZpbmUgQ0NNX0RDVlIwCTB4MzAKKyNkZWZpbmUgQ0NNX0RDVlIxCTB4MzQKKyNkZWZpbmUgQ0NNX0RDVlIyCTB4MzgKKyNkZWZpbmUgQ0NNX0RDVlIzCTB4M2MKKyNkZWZpbmUgQ0NNX0xUUjAJMHg0MAorI2RlZmluZSBDQ01fTFRSMQkweDQ0CisjZGVmaW5lIENDTV9MVFIyCTB4NDgKKyNkZWZpbmUgQ0NNX0xUUjMJMHg0YworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9tcGxsKHZvaWQpCit7CisJdWxvbmcgbXBjdGwgPSBfX3Jhd19yZWFkbChDUk1fQkFTRSArIENDTV9NUENUTCk7CisKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwobXBjdGwsIDI0MDAwMDAwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfdXBsbCh2b2lkKQoreworCXVsb25nIG1wY3RsID0gX19yYXdfcmVhZGwoQ1JNX0JBU0UgKyBDQ01fVVBDVEwpOworCisJcmV0dXJuIG14Y19kZWNvZGVfcGxsKG1wY3RsLCAyNDAwMDAwMCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfYXJtKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGNjdGwgPSByZWFkbChDUk1fQkFTRSArIENDTV9DQ1RMKTsKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBnZXRfcmF0ZV9tcGxsKCk7CisKKwlpZiAoY2N0bCAmICgxIDw8IDE0KSkKKwkJcmF0ZSA9IChyYXRlICogMykgPj4gMTsKKworCXJldHVybiByYXRlIC8gKChjY3RsID4+IDMwKSArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9haGIoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgY2N0bCA9IHJlYWRsKENSTV9CQVNFICsgQ0NNX0NDVEwpOworCisJcmV0dXJuIGdldF9yYXRlX2FybShOVUxMKSAvICgoKGNjdGwgPj4gMjgpICYgMHgzKSArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9pcGcoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBnZXRfcmF0ZV9haGIoTlVMTCkgPj4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfcGVyKGludCBwZXIpCit7CisJdW5zaWduZWQgbG9uZyBvZnMgPSAocGVyICYgMHgzKSAqIDg7CisJdW5zaWduZWQgbG9uZyByZWcgPSBwZXIgJiB+MHgzOworCXVuc2lnbmVkIGxvbmcgdmFsID0gKHJlYWRsKENSTV9CQVNFICsgQ0NNX1BDRFIwICsgcmVnKSA+PiBvZnMpICYgMHgzZjsKKwl1bnNpZ25lZCBsb25nIGZyZWY7CisKKwlpZiAocmVhZGwoQ1JNX0JBU0UgKyAweDY0KSAmICgxIDw8IHBlcikpCisJCWZyZWYgPSBnZXRfcmF0ZV91cGxsKCk7CisJZWxzZQorCQlmcmVmID0gZ2V0X3JhdGVfaXBnKE5VTEwpOworCisJcmV0dXJuIGZyZWYgLyAodmFsICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3VhcnQoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBnZXRfcmF0ZV9wZXIoMTUpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9pMmMoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBnZXRfcmF0ZV9wZXIoNik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX25mYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGdldF9yYXRlX3Blcig4KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfb3RnKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gNDgwMDAwMDA7IC8qIEZJWE1FICovCit9CisKK3N0YXRpYyBpbnQgY2xrX2NnY3JfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWcgfD0gMSA8PCBjbGstPmVuYWJsZV9zaGlmdDsKKwlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsa19jZ2NyX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZyAmPSB+KDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpOworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKKyNkZWZpbmUgREVGSU5FX0NMT0NLKG5hbWUsIGksIGVyLCBlcywgZ3IsIHNyKQkJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJXAorCQkuaWQJCT0gaSwJCQlcCisJCS5lbmFibGVfcmVnCT0gQ1JNX0JBU0UgKyBlciwJXAorCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJXAorCQkuZ2V0X3JhdGUJPSBnciwJCQlcCisJCS5zZXRfcmF0ZQk9IHNyLAkJCVwKKwkJLmVuYWJsZQkJPSBjbGtfY2djcl9lbmFibGUsCVwKKwkJLmRpc2FibGUJPSBjbGtfY2djcl9kaXNhYmxlLAlcCisJfQorCitERUZJTkVfQ0xPQ0soZ3B0X2NsaywgICAgMCwgQ0NNX0NHQ1IwLCAgNSwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhjc3BpMV9jbGssICAwLCBDQ01fQ0dDUjEsICA1LCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKGNzcGkyX2NsaywgIDAsIENDTV9DR0NSMSwgIDYsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soY3NwaTNfY2xrLCAgMCwgQ0NNX0NHQ1IxLCAgNywgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyh1YXJ0MV9jbGssICAwLCBDQ01fQ0dDUjIsIDE0LCBnZXRfcmF0ZV91YXJ0LCBOVUxMKTsKK0RFRklORV9DTE9DSyh1YXJ0Ml9jbGssICAwLCBDQ01fQ0dDUjIsIDE1LCBnZXRfcmF0ZV91YXJ0LCBOVUxMKTsKK0RFRklORV9DTE9DSyh1YXJ0M19jbGssICAwLCBDQ01fQ0dDUjIsIDE2LCBnZXRfcmF0ZV91YXJ0LCBOVUxMKTsKK0RFRklORV9DTE9DSyh1YXJ0NF9jbGssICAwLCBDQ01fQ0dDUjIsIDE3LCBnZXRfcmF0ZV91YXJ0LCBOVUxMKTsKK0RFRklORV9DTE9DSyh1YXJ0NV9jbGssICAwLCBDQ01fQ0dDUjIsIDE4LCBnZXRfcmF0ZV91YXJ0LCBOVUxMKTsKK0RFRklORV9DTE9DSyhuZmNfY2xrLCAgICAwLCBDQ01fQ0dDUjAsICA4LCBnZXRfcmF0ZV9uZmMsIE5VTEwpOworREVGSU5FX0NMT0NLKHVzYm90Z19jbGssIDAsIENDTV9DR0NSMCwgMjgsIGdldF9yYXRlX290ZywgTlVMTCk7CitERUZJTkVfQ0xPQ0socHdtMV9jbGssCSAwLCBDQ01fQ0dDUjEsIDMxLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKHB3bTJfY2xrLAkgMCwgQ0NNX0NHQ1IyLCAgMCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhwd20zX2NsaywJIDAsIENDTV9DR0NSMiwgIDEsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0socHdtNF9jbGssCSAwLCBDQ01fQ0dDUjIsICAyLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKGtwcF9jbGssCSAwLCBDQ01fQ0dDUjEsIDI4LCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKHRzY19jbGssCSAwLCBDQ01fQ0dDUjIsIDEzLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKGkyY19jbGssCSAwLCBDQ01fQ0dDUjAsICA2LCBnZXRfcmF0ZV9pMmMsIE5VTEwpOworCisjZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKQlcCisJewkJCQlcCisJCS5kZXZfaWQgPSBkLAkJXAorCQkuY29uX2lkID0gbiwJCVwKKwkJLmNsayA9ICZjLAkJXAorCX0sCisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4wIiwgTlVMTCwgdWFydDFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMSIsIE5VTEwsIHVhcnQyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjIiLCBOVUxMLCB1YXJ0M19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4zIiwgTlVMTCwgdWFydDRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuNCIsIE5VTEwsIHVhcnQ1X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjAiLCAidXNiIiwgdXNib3RnX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjEiLCAidXNiIiwgdXNib3RnX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjIiLCAidXNiIiwgdXNib3RnX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2IiLCB1c2JvdGdfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX25hbmQuMCIsIE5VTEwsIG5mY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjAiLCBOVUxMLCBjc3BpMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjEiLCBOVUxMLCBjc3BpMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjIiLCBOVUxMLCBjc3BpM19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGNfcHdtLjAiLCBOVUxMLCBwd20xX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y19wd20uMSIsIE5VTEwsIHB3bTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX3B3bS4yIiwgTlVMTCwgcHdtM19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGNfcHdtLjMiLCBOVUxMLCBwd200X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1rZXlwYWQiLCBOVUxMLCBrcHBfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXgyNS1hZGMiLCBOVUxMLCB0c2NfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4wIiwgTlVMTCwgaTJjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMSIsIE5VTEwsIGkyY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjIiLCBOVUxMLCBpMmNfY2xrKQorfTsKKworaW50IF9faW5pdCBteDI1X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCisJbXhjX3RpbWVyX2luaXQoJmdwdF9jbGssIE1YMjVfSU9fQUREUkVTUyhNWDI1X0dQVDFfQkFTRV9BRERSKSwgNTQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjEyZGUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYwpAQCAtMCwwICsxLDQwMiBAQAorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL214MjUuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MFtdID0geworCXsKKwkJLnN0YXJ0ID0gMHg0M2Y5MDAwMCwKKwkJLmVuZCA9IDB4NDNmOTNmZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gNDUsCisJCS5lbmQgPSA0NSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMCA9IHsKKwkubmFtZSA9ICJpbXgtdWFydCIsCisJLmlkID0gMCwKKwkucmVzb3VyY2UgPSB1YXJ0MCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDApLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MVtdID0geworCXsKKwkJLnN0YXJ0ID0gMHg0M2Y5NDAwMCwKKwkJLmVuZCA9IDB4NDNmOTdmZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gMzIsCisJCS5lbmQgPSAzMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMSA9IHsKKwkubmFtZSA9ICJpbXgtdWFydCIsCisJLmlkID0gMSwKKwkucmVzb3VyY2UgPSB1YXJ0MSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDEpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MltdID0geworCXsKKwkJLnN0YXJ0ID0gMHg1MDAwYzAwMCwKKwkJLmVuZCA9IDB4NTAwMGZmZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gMTgsCisJCS5lbmQgPSAxOCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMiA9IHsKKwkubmFtZSA9ICJpbXgtdWFydCIsCisJLmlkID0gMiwKKwkucmVzb3VyY2UgPSB1YXJ0MiwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDIpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0M1tdID0geworCXsKKwkJLnN0YXJ0ID0gMHg1MDAwODAwMCwKKwkJLmVuZCA9IDB4NTAwMGJmZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gNSwKKwkJLmVuZCA9IDUsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTMgPSB7CisJLm5hbWUgPSAiaW14LXVhcnQiLAorCS5pZCA9IDMsCisJLnJlc291cmNlID0gdWFydDMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVhcnQzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDRbXSA9IHsKKwl7CisJCS5zdGFydCA9IDB4NTAwMmMwMDAsCisJCS5lbmQgPSAweDUwMDJmZmZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IDQwLAorCQkuZW5kID0gNDAsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTQgPSB7CisJLm5hbWUgPSAiaW14LXVhcnQiLAorCS5pZCA9IDQsCisJLnJlc291cmNlID0gdWFydDQsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVhcnQ0KSwKK307CisKKyNkZWZpbmUgTVgyNV9PVEdfQkFTRV9BRERSIDB4NTNGRjQwMDAKKworc3RhdGljIHU2NCBvdGdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX290Z19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IE1YMjVfT1RHX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YMjVfT1RHX0JBU0VfQUREUiArIDB4MWZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IDM3LAorCQkuZW5kID0gMzcsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGcgPSB7CisJLm5hbWUgPSAibXhjLWVoY2kiLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwkJLmRtYV9tYXNrID0gJm90Z19kbWFtYXNrLAorCX0sCisJLnJlc291cmNlID0gbXhjX290Z19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19vdGdfcmVzb3VyY2VzKSwKK307CisKKy8qIE9URyBnYWRnZXQgZGV2aWNlICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG90Z191ZGNfZGV2aWNlID0geworCS5uYW1lID0gImZzbC11c2IyLXVkYyIsCisJLmlkICAgPSAtMSwKKwkuZGV2ICA9IHsKKwkJLmRtYV9tYXNrICAgICAgICAgID0gJm90Z19kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCX0sCisJLnJlc291cmNlID0gbXhjX290Z19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19vdGdfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyB1NjQgdXNiaDJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3VzYmgyX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gTVgyNV9PVEdfQkFTRV9BRERSICsgMHg0MDAsCisJCS5lbmQgPSBNWDI1X09UR19CQVNFX0FERFIgKyAweDVmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSAzNSwKKwkJLmVuZCA9IDM1LAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDIgPSB7CisJLm5hbWUgPSAibXhjLWVoY2kiLAorCS5pZCA9IDEsCisJLmRldiA9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwkJLmRtYV9tYXNrID0gJnVzYmgyX2RtYW1hc2ssCisJfSwKKwkucmVzb3VyY2UgPSBteGNfdXNiaDJfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfdXNiaDJfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV9yZXNvdXJjZXMwW10gPSB7CisJeworCSAgICAgICAuc3RhcnQgPSAweDQzZmE0MDAwLAorCSAgICAgICAuZW5kID0gMHg0M2ZhN2ZmZiwKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCSAgICAgICAuc3RhcnQgPSAxNCwKKwkgICAgICAgLmVuZCA9IDE0LAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTAgPSB7CisJLm5hbWUgPSAic3BpX2lteCIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NwaV9yZXNvdXJjZXMwKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpX3Jlc291cmNlczAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfcmVzb3VyY2VzMVtdID0geworCXsKKwkgICAgICAgLnN0YXJ0ID0gMHg1MDAxMDAwMCwKKwkgICAgICAgLmVuZCA9IDB4NTAwMTNmZmYsCisJICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkgICAgICAgLnN0YXJ0ID0gMTMsCisJICAgICAgIC5lbmQgPSAxMywKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NwaV9kZXZpY2UxID0geworCS5uYW1lID0gInNwaV9pbXgiLAorCS5pZCA9IDEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19zcGlfcmVzb3VyY2VzMSksCisJLnJlc291cmNlID0gbXhjX3NwaV9yZXNvdXJjZXMxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpX3Jlc291cmNlczJbXSA9IHsKKwl7CisJICAgICAgIC5zdGFydCA9IDB4NTAwMDQwMDAsCisJICAgICAgIC5lbmQgPSAweDUwMDA3ZmZmLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJICAgICAgIC5zdGFydCA9IDAsCisJICAgICAgIC5lbmQgPSAwLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTIgPSB7CisJLm5hbWUgPSAic3BpX2lteCIsCisJLmlkID0gMiwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NwaV9yZXNvdXJjZXMyKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpX3Jlc291cmNlczIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19wd21fcmVzb3VyY2VzMFtdID0geworCXsKKwkJLnN0YXJ0CT0gMHg1M2ZlMDAwMCwKKwkJLmVuZAk9IDB4NTNmZTNmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ICAgPSAyNiwKKwkJLmVuZCAgICAgPSAyNiwKKwkJLmZsYWdzICAgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlMCA9IHsKKwkubmFtZSA9ICJteGNfcHdtIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfcHdtX3Jlc291cmNlczApLAorCS5yZXNvdXJjZSA9IG14Y19wd21fcmVzb3VyY2VzMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3B3bV9yZXNvdXJjZXMxW10gPSB7CisJeworCQkuc3RhcnQJPSAweDUzZmEwMDAwLAorCQkuZW5kCT0gMHg1M2ZhM2ZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgICA9IDM2LAorCQkuZW5kICAgICA9IDM2LAorCQkuZmxhZ3MgICA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3B3bV9kZXZpY2UxID0geworCS5uYW1lID0gIm14Y19wd20iLAorCS5pZCA9IDEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19wd21fcmVzb3VyY2VzMSksCisJLnJlc291cmNlID0gbXhjX3B3bV9yZXNvdXJjZXMxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfcHdtX3Jlc291cmNlczJbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4NTNmYTgwMDAsCisJCS5lbmQJPSAweDUzZmFiZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCAgID0gNDEsCisJCS5lbmQgICAgID0gNDEsCisJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcHdtX2RldmljZTIgPSB7CisJLm5hbWUgPSAibXhjX3B3bSIsCisJLmlkID0gMiwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3B3bV9yZXNvdXJjZXMyKSwKKwkucmVzb3VyY2UgPSBteGNfcHdtX3Jlc291cmNlczIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19rZXlwYWRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSAweDQzZmE4MDAwLAorCQkuZW5kCT0gMHg0M2ZhYmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgICA9IDI0LAorCQkuZW5kICAgICA9IDI0LAorCQkuZmxhZ3MgICA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2tleXBhZF9kZXZpY2UgPSB7CisJLm5hbWUgPSAibXhjLWtleXBhZCIsCisJLmlkID0gLTEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19rZXlwYWRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfa2V5cGFkX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3B3bV9yZXNvdXJjZXMzW10gPSB7CisJeworCQkuc3RhcnQJPSAweDUzZmM4MDAwLAorCQkuZW5kCT0gMHg1M2ZjYmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgICA9IDQyLAorCQkuZW5kICAgICA9IDQyLAorCQkuZmxhZ3MgICA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3B3bV9kZXZpY2UzID0geworCS5uYW1lID0gIm14Y19wd20iLAorCS5pZCA9IDMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19wd21fcmVzb3VyY2VzMyksCisJLnJlc291cmNlID0gbXhjX3B3bV9yZXNvdXJjZXMzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjXzFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSAweDQzZjgwMDAwLAorCQkuZW5kCT0gMHg0M2Y4M2ZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQJPSAzLAorCQkuZW5kCT0gMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTAgPSB7CisJLm5hbWUgPSAiaW14LWkyYyIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyY18xX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX2kyY18xX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2kyY18yX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gMHg0M2Y5ODAwMCwKKwkJLmVuZAk9IDB4NDNmOWJmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0CT0gNCwKKwkJLmVuZAk9IDQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UxID0geworCS5uYW1lID0gImlteC1pMmMiLAorCS5pZCA9IDEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19pMmNfMl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19pMmNfMl9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19pMmNfM19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4NDNmODQwMDAsCisJCS5lbmQJPSAweDQzZjg3ZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAk9IDEwLAorCQkuZW5kCT0gMTAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UyID0geworCS5uYW1lID0gImlteC1pMmMiLAorCS5pZCA9IDIsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19pMmNfM19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19pMmNfM19yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14X2dwaW9fcG9ydHNbXSA9IHsKKwl7CisJCS5jaGlwLmxhYmVsID0gImdwaW8tMCIsCisJCS5iYXNlID0gKHZvaWQgX19pb21lbSAqKU1YMjVfR1BJTzFfQkFTRV9BRERSX1ZJUlQsCisJCS5pcnEgPSA1MiwKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAorCX0sIHsKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby0xIiwKKwkJLmJhc2UgPSAodm9pZCBfX2lvbWVtICopTVgyNV9HUElPMl9CQVNFX0FERFJfVklSVCwKKwkJLmlycSA9IDUxLAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiwKKwl9LCB7CisJCS5jaGlwLmxhYmVsID0gImdwaW8tMiIsCisJCS5iYXNlID0gKHZvaWQgX19pb21lbSAqKU1YMjVfR1BJTzNfQkFTRV9BRERSX1ZJUlQsCisJCS5pcnEgPSAxNiwKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQsCisJfSwgeworCQkuY2hpcC5sYWJlbCA9ICJncGlvLTMiLAorCQkuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilNWDI1X0dQSU80X0JBU0VfQUREUl9WSVJULAorCQkuaXJxID0gMjMsCisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDk2LAorCX0KK307CisKK2ludCBfX2luaXQgbXhjX3JlZ2lzdGVyX2dwaW9zKHZvaWQpCit7CisJcmV0dXJuIG14Y19ncGlvX2luaXQoaW14X2dwaW9fcG9ydHMsIEFSUkFZX1NJWkUoaW14X2dwaW9fcG9ydHMpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2YmY4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmgKQEAgLTAsMCArMSwxOSBAQAorZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMzsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTQ7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfb3RnOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3RnX3VkY19kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcHdtX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcHdtX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcHdtX2RldmljZTI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcHdtX2RldmljZTM7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfa2V5cGFkX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9tbS5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L21tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlNTg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9tbS5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgQXJtIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQorICogIENvcHlyaWdodCAyMDA1LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgIC0gYWRkIE1YMzEgc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtdjMuaD4KKworLyoKKyAqIFRoaXMgdGFibGUgZGVmaW5lcyBzdGF0aWMgdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzIGZvciBJL08gcmVnaW9ucy4KKyAqIFRoZXNlIGFyZSB0aGUgbWFwcGluZ3MgY29tbW9uIGFjcm9zcyBhbGwgTVgzIGJvYXJkcy4KKyAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteGNfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IE1YMjVfQVZJQ19CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YMjVfQVZJQ19CQVNFX0FERFIpLAorCQkubGVuZ3RoCQk9IE1YMjVfQVZJQ19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfSwgeworCQkudmlydHVhbAk9IE1YMjVfQUlQUzFfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihNWDI1X0FJUFMxX0JBU0VfQUREUiksCisJCS5sZW5ndGgJCT0gTVgyNV9BSVBTMV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfSwgeworCQkudmlydHVhbAk9IE1YMjVfQUlQUzJfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihNWDI1X0FJUFMyX0JBU0VfQUREUiksCisJCS5sZW5ndGgJCT0gTVgyNV9BSVBTMl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfSwKK307CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBtZW1vcnkgbWFwLiBJdCBpcyBjYWxsZWQgZHVyaW5nIHRoZQorICogc3lzdGVtIHN0YXJ0dXAgdG8gY3JlYXRlIHN0YXRpYyBwaHlzaWNhbCB0byB2aXJ0dWFsIG1lbW9yeSBtYXBwaW5ncworICogZm9yIHRoZSBJTyBtb2R1bGVzLgorICovCit2b2lkIF9faW5pdCBteDI1X21hcF9pbyh2b2lkKQoreworCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDI1KTsKKwlteGNfaW9tdXhfdjNfaW5pdChNWDI1X0lPX0FERFJFU1MoTVgyNV9JT01VWENfQkFTRV9BRERSKSk7CisJbXhjX2FyY2hfcmVzZXRfaW5pdChNWDI1X0lPX0FERFJFU1MoTVgyNV9XRE9HX0JBU0VfQUREUikpOworCisJaW90YWJsZV9pbml0KG14Y19pb19kZXNjLCBBUlJBWV9TSVpFKG14Y19pb19kZXNjKSk7Cit9CisKK3ZvaWQgX19pbml0IG14MjVfaW5pdF9pcnEodm9pZCkKK3sKKwlteGNfaW5pdF9pcnEoKHZvaWQgX19pb21lbSAqKU1YMjVfQVZJQ19CQVNFX0FERFJfVklSVCk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYWE0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCkBAIC0wLDAgKzEsNTggQEAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlICJkZXZpY2VzLmgiCisjaW5jbHVkZSA8bWFjaC9pb211eC12My5oPgorCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgbmFuZF9ib2FyZF9pbmZvID0geworCS53aWR0aCA9IDEsCisJLmh3X2VjYyA9IDEsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka19pbml0KHZvaWQpCit7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgTlVMTCk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmbmFuZF9ib2FyZF9pbmZvKTsKK30KKworCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka190aW1lcl9pbml0KHZvaWQpCit7CisJbXgyNV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14MjVwZGtfdGltZXIgPSB7CisJLmluaXQgICA9IG14MjVwZGtfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoTVgyNV8zRFMsICJGcmVlc2NhbGUgTVgyNVBESyAoM0RTKSIpCisJLyogTWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KKwkucGh5c19pbwk9IE1YMjVfQUlQUzFfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdAk9ICgoTVgyNV9BSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyAgICAgICAgID0gbXgyNV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gbXgyNV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lICAgPSBteDI1cGRrX2luaXQsCisJLnRpbWVyICAgICAgICAgID0gJm14MjVwZGtfdGltZXIsCitNQUNISU5FX0VORAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9hcm1hZGlsbG81eDAuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2FybWFkaWxsbzV4MC5jCmluZGV4IGVlMzMxZmQuLjc3NmMwZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2FybWFkaWxsbzV4MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2FybWFkaWxsbzV4MC5jCkBAIC0zNTIsNyArMzUyLDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDAwMDAwMTAwLAogCS5tYXBfaW8JCT0gbXgzMV9tYXBfaW8sCi0JLmluaXRfaXJxCT0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycQk9IG14MzFfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZhcm1hZGlsbG81eDBfdGltZXIsCiAJLmluaXRfbWFjaGluZQk9IGFybWFkaWxsbzV4MF9pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCmluZGV4IDU3N2VlODMuLmZlNWM0MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwpAQCAtMjczLDYgKzI3MywxOSBAQAogCXJldHVybiByYXRlIC8gZ2V0XzNfM19kaXYoKHBkcjIgPj4gMTYpICYgMHgzZik7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX290ZyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwZHI0ID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSNCk7CisJdW5zaWduZWQgbG9uZyByYXRlOworCisJaWYgKHBkcjQgJiAoMSA8PCA5KSkKKwkJcmF0ZSA9IGdldF9yYXRlX2FybSgpOworCWVsc2UKKwkJcmF0ZSA9IGdldF9yYXRlX3BwbGwoKTsKKworCXJldHVybiByYXRlIC8gZ2V0XzNfM19kaXYoKHBkcjQgPj4gMjIpICYgMHgzZik7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2lwZ19wZXIoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgcGRyMCA9IF9fcmF3X3JlYWRsKENDTV9CQVNFICsgQ0NNX1BEUjApOwpAQCAtMzY1LDcgKzM3OCw3IEBACiBERUZJTkVfQ0xPQ0sodWFydDFfY2xrLCAgMCwgQ0NNX0NHUjIsIDE2LCBnZXRfcmF0ZV91YXJ0LCBOVUxMKTsKIERFRklORV9DTE9DSyh1YXJ0Ml9jbGssICAxLCBDQ01fQ0dSMiwgMTgsIGdldF9yYXRlX3VhcnQsIE5VTEwpOwogREVGSU5FX0NMT0NLKHVhcnQzX2NsaywgIDIsIENDTV9DR1IyLCAyMCwgZ2V0X3JhdGVfdWFydCwgTlVMTCk7Ci1ERUZJTkVfQ0xPQ0sodXNib3RnX2NsaywgMCwgQ0NNX0NHUjIsIDIyLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyh1c2JvdGdfY2xrLCAwLCBDQ01fQ0dSMiwgMjIsIGdldF9yYXRlX290ZywgTlVMTCk7CiBERUZJTkVfQ0xPQ0sod2RvZ19jbGssICAgMCwgQ0NNX0NHUjIsIDI0LCBOVUxMLCBOVUxMKTsKIERFRklORV9DTE9DSyhtYXhfY2xrLCAgICAwLCBDQ01fQ0dSMiwgMjYsIE5VTEwsIE5VTEwpOwogREVGSU5FX0NMT0NLKGFkbXV4X2NsaywgIDAsIENDTV9DR1IyLCAzMCwgTlVMTCwgTlVMTCk7CkBAIC00MjYsNyArNDM5LDEwIEBACiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4wIiwgTlVMTCwgdWFydDFfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMSIsIE5VTEwsIHVhcnQyX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjIiLCBOVUxMLCB1YXJ0M19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ1c2JvdGciLCB1c2JvdGdfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2IiLCB1c2JvdGdfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2IiLCB1c2JvdGdfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMiIsICJ1c2IiLCB1c2JvdGdfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYm90Z19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJteGNfd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1heCIsIG1heF9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJhZG11eCIsIGFkbXV4X2NsaykKQEAgLTQ1Niw3ICs0NzIsNyBAQAogCV9fcmF3X3dyaXRlbCgoMyA8PCAyNikgfCBsbCwgQ0NNX0JBU0UgKyBDQ01fQ0dSMik7CiAJX19yYXdfd3JpdGVsKDAsIENDTV9CQVNFICsgQ0NNX0NHUjMpOwogCi0JbXhjX3RpbWVyX2luaXQoJmdwdF9jbGspOworCW14Y190aW1lcl9pbml0KCZncHRfY2xrLCBJT19BRERSRVNTKEdQVDFfQkFTRV9BRERSKSwgTVhDX0lOVF9HUFQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYwppbmRleCA4YjE0MjM5Li4wNmJkNjE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9teDMxLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KIAogI2luY2x1ZGUgImNybV9yZWdzLmgiCkBAIC00MDIsNiArNDAzLDExIEBACiAJcmV0dXJuIGNraWhfcmF0ZTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2NraWxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBDS0lMX0NMS19GUkVROworfQorCiBzdGF0aWMgc3RydWN0IGNsayBja2loX2NsayA9IHsKIAkuZ2V0X3JhdGUgPSBjbGtfY2tpaF9nZXRfcmF0ZSwKIH07CkBAIC01MDgsNiArNTE0LDcgQEAKIERFRklORV9DTE9DSyhuZmNfY2xrLCAgICAgMCwgTlVMTCwgICAgICAgICAgMCwgbmZjX2dldF9yYXRlLCBOVUxMLCAmYWhiX2Nsayk7CiBERUZJTkVfQ0xPQ0soc2NjX2NsaywgICAgIDAsIE5VTEwsICAgICAgICAgIDAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKIERFRklORV9DTE9DSyhpcGdfY2xrLCAgICAgMCwgTlVMTCwgICAgICAgICAgMCwgaXBnX2dldF9yYXRlLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soY2tpbF9jbGssICAgIDAsIE5VTEwsICAgICAgICAgIDAsIGNsa19ja2lsX2dldF9yYXRlLCBOVUxMLCBOVUxMKTsKIAogI2RlZmluZSBfUkVHSVNURVJfQ0xPQ0soZCwgbiwgYykgXAogCXsgXApAQCAtNTE4LDkgKzUyNSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlbWkiLCBlbWlfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaSIsIGNzcGkxX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkiLCBjc3BpMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpIiwgY3NwaTNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4wIiwgTlVMTCwgY3NwaTFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4xIiwgTlVMTCwgY3NwaTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4yIiwgTlVMTCwgY3NwaTNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0IiwgZ3B0X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInB3bSIsIHB3bV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ3ZG9nIiwgd2RvZ19jbGspCkBAIC01MzEsNiArNTM4LDEyIEBACiAJX1JFR0lTVEVSX0NMT0NLKCJpcHUtY29yZSIsIE5VTEwsIGlwdV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJteDNfc2RjX2ZiIiwgTlVMTCwgaXB1X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImtwcCIsIGtwcF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4wIiwgInVzYiIsIHVzYl9jbGsxKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2JfYWhiIiwgdXNiX2NsazIpCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4xIiwgInVzYiIsIHVzYl9jbGsxKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2JfYWhiIiwgdXNiX2NsazIpCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4yIiwgInVzYiIsIHVzYl9jbGsxKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMiIsICJ1c2JfYWhiIiwgdXNiX2NsazIpCiAJX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiIiwgdXNiX2NsazEpCiAJX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiX2FoYiIsIHVzYl9jbGsyKQogCV9SRUdJU1RFUl9DTE9DSygibXgzLWNhbWVyYS4wIiwgTlVMTCwgY3NpX2NsaykKQEAgLTU1OSw2ICs1NzIsNyBAQAogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiaWltIiwgaWltX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1wZWc0IiwgbXBlZzRfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibWJ4IiwgbWJ4X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y19ydGMiLCBOVUxMLCBja2lsX2NsaykKIH07CiAKIGludCBfX2luaXQgbXgzMV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpCkBAIC02MDksNyArNjIzLDcgQEAKIAkJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9QTUNSMSk7CiAJfQogCi0JbXhjX3RpbWVyX2luaXQoJmlwZ19jbGspOworCW14Y190aW1lcl9pbml0KCZpcGdfY2xrLCBJT19BRERSRVNTKEdQVDFfQkFTRV9BRERSKSwgTVhDX0lOVF9HUFQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKaW5kZXggOWU4N2UwOC4uOGE1NzdmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYwpAQCAtMTI5LDE5ICsxMjksMTcgQEAKIAogLyogR1BJTyBwb3J0IGRlc2NyaXB0aW9uICovCiBzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14X2dwaW9fcG9ydHNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTAiLAogCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJTzFfQkFTRV9BRERSKSwKIAkJLmlycSA9IE1YQ19JTlRfR1BJTzEsCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCwKLQl9LAotCVsxXSA9IHsKKwl9LCB7CiAJCS5jaGlwLmxhYmVsID0gImdwaW8tMSIsCiAJCS5iYXNlID0gSU9fQUREUkVTUyhHUElPMl9CQVNFX0FERFIpLAogCQkuaXJxID0gTVhDX0lOVF9HUElPMiwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgMzIsCi0JfSwKLQlbMl0gPSB7CisJfSwgewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTIiLAogCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJTzNfQkFTRV9BRERSKSwKIAkJLmlycSA9IE1YQ19JTlRfR1BJTzMsCkBAIC0xNzMsMTEgKzE3MSwxMSBAQAogCXsKIAkJLnN0YXJ0CT0gMCwgLyogcnVudGltZSBkZXBlbmRlbnQgKi8KIAkJLmVuZAk9IDAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sIHsKIAkJLnN0YXJ0CT0gTVhDX0lOVF9OQU5ERkMsCiAJCS5lbmQJPSBNWENfSU5UX05BTkRGQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CiAKQEAgLTE5Myw4ICsxOTEsNyBAQAogCQkuc3RhcnQgPSBJMkNfQkFTRV9BRERSLAogCQkuZW5kID0gSTJDX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7CisJfSwgewogCQkuc3RhcnQgPSBNWENfSU5UX0kyQywKIAkJLmVuZCA9IE1YQ19JTlRfSTJDLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKQEAgLTIxMyw4ICsyMTAsNyBAQAogCQkuc3RhcnQgPSBJMkMyX0JBU0VfQUREUiwKIAkJLmVuZCA9IEkyQzJfQkFTRV9BRERSICsgU1pfNEsgLSAxLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKKwl9LCB7CiAJCS5zdGFydCA9IE1YQ19JTlRfSTJDMiwKIAkJLmVuZCA9IE1YQ19JTlRfSTJDMiwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCkBAIC0yMzMsOCArMjI5LDcgQEAKIAkJLnN0YXJ0ID0gSTJDM19CQVNFX0FERFIsCiAJCS5lbmQgPSBJMkMzX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7CisJfSwgewogCQkuc3RhcnQgPSBNWENfSU5UX0kyQzMsCiAJCS5lbmQgPSBNWENfSU5UX0kyQzMsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLApAQCAtMzcxLDggKzM2Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3RnX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0CT0gT1RHX0JBU0VfQUREUiwKLQkJLmVuZAk9IE9UR19CQVNFX0FERFIgKyAweDFmZiwKKwkJLnN0YXJ0CT0gTVgzMV9PVEdfQkFTRV9BRERSLAorCQkuZW5kCT0gTVgzMV9PVEdfQkFTRV9BRERSICsgMHgxZmYsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sIHsKIAkJLnN0YXJ0CT0gTVhDX0lOVF9VU0IzLApAQCAtMzk1LDE2ICszOTAsMTQyIEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG90Z19yZXNvdXJjZXMpLAogfTsKIAorLyogT1RHIGhvc3QgKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX290Z19ob3N0ID0geworCS5uYW1lID0gIm14Yy1laGNpIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJCS5kbWFfbWFzayA9ICZvdGdfZG1hbWFzaywKKwl9LAorCS5yZXNvdXJjZSA9IG90Z19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG90Z19yZXNvdXJjZXMpLAorfTsKKworLyogVVNCIGhvc3QgMSAqLworCitzdGF0aWMgdTY0IHVzYmgxX2RtYW1hc2sgPSB+KHUzMikwOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y191c2JoMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IE1YMzFfT1RHX0JBU0VfQUREUiArIDB4MjAwLAorCQkuZW5kID0gTVgzMV9PVEdfQkFTRV9BRERSICsgMHgzZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9VU0IxLAorCQkuZW5kID0gTVhDX0lOVF9VU0IxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDEgPSB7CisJLm5hbWUgPSAibXhjLWVoY2kiLAorCS5pZCA9IDEsCisJLmRldiA9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwkJLmRtYV9tYXNrID0gJnVzYmgxX2RtYW1hc2ssCisJfSwKKwkucmVzb3VyY2UgPSBteGNfdXNiaDFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfdXNiaDFfcmVzb3VyY2VzKSwKK307CisKKy8qIFVTQiBob3N0IDIgKi8KK3N0YXRpYyB1NjQgdXNiaDJfZG1hbWFzayA9IH4odTMyKTA7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3VzYmgyX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gTVgzMV9PVEdfQkFTRV9BRERSICsgMHg0MDAsCisJCS5lbmQgPSBNWDMxX09UR19CQVNFX0FERFIgKyAweDVmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWENfSU5UX1VTQjIsCisJCS5lbmQgPSBNWENfSU5UX1VTQjIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMiA9IHsKKwkubmFtZSA9ICJteGMtZWhjaSIsCisJLmlkID0gMiwKKwkuZGV2ID0geworCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCQkuZG1hX21hc2sgPSAmdXNiaDJfZG1hbWFzaywKKwl9LAorCS5yZXNvdXJjZSA9IG14Y191c2JoMl9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y191c2JoMl9yZXNvdXJjZXMpLAorfTsKKworLyoKKyAqIFNQSSBtYXN0ZXIgY29udHJvbGxlcgorICogMyBjaGFubmVscworICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9zcGlfMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJICAgICAgIC5zdGFydCA9IENTUEkxX0JBU0VfQUREUiwKKwkgICAgICAgLmVuZCA9IENTUEkxX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCSAgICAgICAuc3RhcnQgPSBNWENfSU5UX0NTUEkxLAorCSAgICAgICAuZW5kID0gTVhDX0lOVF9DU1BJMSwKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3NwaV8xX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gQ1NQSTJfQkFTRV9BRERSLAorCQkuZW5kID0gQ1NQSTJfQkFTRV9BRERSICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQ19JTlRfQ1NQSTIsCisJCS5lbmQgPSBNWENfSU5UX0NTUEkyLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3BpXzJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBDU1BJM19CQVNFX0FERFIsCisJCS5lbmQgPSBDU1BJM19CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9DU1BJMywKKwkJLmVuZCA9IE1YQ19JTlRfQ1NQSTMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMCA9IHsKKwkubmFtZSA9ICJzcGlfaW14IiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBpbXhfc3BpXzBfcmVzb3VyY2VzLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTEgPSB7CisJLm5hbWUgPSAic3BpX2lteCIsCisJLmlkID0gMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW14X3NwaV8xX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gaW14X3NwaV8xX3Jlc291cmNlcywKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NwaV9kZXZpY2UyID0geworCS5uYW1lID0gInNwaV9pbXgiLAorCS5pZCA9IDIsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGlteF9zcGlfMl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IGlteF9zcGlfMl9yZXNvdXJjZXMsCit9OworCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVgzNQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfZmVjX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0CT0gTVhDX0ZFQ19CQVNFX0FERFIsCiAJCS5lbmQJPSBNWENfRkVDX0JBU0VfQUREUiArIDB4ZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7CiAJCS5zdGFydAk9IE1YQ19JTlRfRkVDLAogCQkuZW5kCT0gTVhDX0lOVF9GRUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwogCkBAIC00MjYsNiArNTQ3LDE0IEBACiAJaWYgKGNwdV9pc19teDM1KCkpIHsKIAkJbXhjX25hbmRfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gTVgzNV9ORkNfQkFTRV9BRERSOwogCQlteGNfbmFuZF9yZXNvdXJjZXNbMF0uZW5kID0gTVgzNV9ORkNfQkFTRV9BRERSICsgMHhmZmY7CisJCW90Z19yZXNvdXJjZXNbMF0uc3RhcnQgPSBNWDM1X09UR19CQVNFX0FERFI7CisJCW90Z19yZXNvdXJjZXNbMF0uZW5kID0gTVgzNV9PVEdfQkFTRV9BRERSICsgMHgxZmY7CisJCW90Z19yZXNvdXJjZXNbMV0uc3RhcnQgPSBNWENfSU5UX1VTQk9URzsKKwkJb3RnX3Jlc291cmNlc1sxXS5lbmQgPSBNWENfSU5UX1VTQk9URzsKKwkJbXhjX3VzYmgxX3Jlc291cmNlc1swXS5zdGFydCA9IE1YMzVfT1RHX0JBU0VfQUREUiArIDB4NDAwOworCQlteGNfdXNiaDFfcmVzb3VyY2VzWzBdLmVuZCA9IE1YMzVfT1RHX0JBU0VfQUREUiArIDB4NWZmOworCQlteGNfdXNiaDFfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gTVhDX0lOVF9VU0JIUzsKKwkJbXhjX3VzYmgxX3Jlc291cmNlc1sxXS5lbmQgPSBNWENfSU5UX1VTQkhTOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCmluZGV4IGZmZDQ5NGQuLjc5ZjJiZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKQEAgLTE2LDUgKzE2LDExIEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNzZGhjX2RldmljZTA7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNzZGhjX2RldmljZTE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfb3RnX3VkY19kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfb3RnX2hvc3Q7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcm5nYV9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCmluZGV4IDFmNWZkZDQuLmFkNWExMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbW0uYwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC12My5oPgogCiAvKiEKICAqIEBmaWxlIG1tLmMKQEAgLTc1LDYgKzc2LDcgQEAKIHZvaWQgX19pbml0IG14MzFfbWFwX2lvKHZvaWQpCiB7CiAJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YMzEpOworCW14Y19hcmNoX3Jlc2V0X2luaXQoSU9fQUREUkVTUyhXRE9HX0JBU0VfQUREUikpOwogCiAJaW90YWJsZV9pbml0KG14Y19pb19kZXNjLCBBUlJBWV9TSVpFKG14Y19pb19kZXNjKSk7CiB9CkBAIC04MiwxMCArODQsMjIgQEAKIHZvaWQgX19pbml0IG14MzVfbWFwX2lvKHZvaWQpCiB7CiAJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YMzUpOworCW14Y19pb211eF92M19pbml0KElPX0FERFJFU1MoSU9NVVhDX0JBU0VfQUREUikpOworCW14Y19hcmNoX3Jlc2V0X2luaXQoSU9fQUREUkVTUyhXRE9HX0JBU0VfQUREUikpOwogCiAJaW90YWJsZV9pbml0KG14Y19pb19kZXNjLCBBUlJBWV9TSVpFKG14Y19pb19kZXNjKSk7CiB9CiAKK3ZvaWQgX19pbml0IG14MzFfaW5pdF9pcnEodm9pZCkKK3sKKwlteGNfaW5pdF9pcnEoSU9fQUREUkVTUyhBVklDX0JBU0VfQUREUikpOworfQorCit2b2lkIF9faW5pdCBteDM1X2luaXRfaXJxKHZvaWQpCit7CisJbXgzMV9pbml0X2lycSgpOworfQorCiAjaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKIHN0YXRpYyBpbnQgbXhjX2luaXRfbDJ4MCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jCmluZGV4IDMwZTI3NjcuLjA0OTdjMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxYWRzLmMKQEAgLTUxNyw3ICs1MTcsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgzMWFkc19pbml0X2lycSh2b2lkKQogewotCW14Y19pbml0X2lycSgpOworCW14MzFfaW5pdF9pcnEoKTsKIAlteDMxYWRzX2luaXRfZXhwaW8oKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpbGx5LmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbGlsbHkuYwppbmRleCA2YWIyZjE2Li40MjMwMjUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbGlsbHkuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbGlsbHkuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJLmlvX3BnX29mZnN0CT0gKChBSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBteDMxX21hcF9pbywKLQkuaW5pdF9pcnEJPSBteGNfaW5pdF9pcnEsCisJLmluaXRfaXJxCT0gbXgzMV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gbXgzMWxpbGx5X2JvYXJkX2luaXQsCiAJLnRpbWVyCQk9ICZteDMxbGlsbHlfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLmMKaW5kZXggODZmZTcwZi4uYThkNTdkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS5jCkBAIC03MSwxMiArNzEsMTEgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21zYzkxMXhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLnN0YXJ0CQk9IENTNF9CQVNFX0FERFIsCiAJCS5lbmQJCT0gQ1M0X0JBU0VfQUREUiArIDB4MTAwLAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7CisJfSwgewogCQkuc3RhcnQJCT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX1NGUzYpLAogCQkuZW5kCQk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9TRlM2KSwKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLApAQCAtMTYyLDcgKzE2MSw3IEBACiAJLmlvX3BnX29mZnN0ICAgID0gKChBSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyAgICAgICAgID0gbXgzMWxpdGVfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKKwkuaW5pdF9pcnEgICAgICAgPSBteDMxX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZteDMxbGl0ZV90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtZGV2Ym9hcmQuYwppbmRleCBiNDg1ODFlLi41NTkyY2RiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLWRldmJvYXJkLmMKQEAgLTE2LDcgKzE2LDYgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtNDAsMTggKzM5LDYgQEAKIAlNWDMxX1BJTl9QQ19SRUFEWV9fU0QyX0RBVEExLCBNWDMxX1BJTl9QQ19XQUlUX0JfX1NEMl9EQVRBMCwKIAlNWDMxX1BJTl9QQ19DRDJfQl9fU0QyX0NMSywgTVgzMV9QSU5fUENfQ0QxX0JfX1NEMl9DTUQsCiAJTVgzMV9QSU5fQVRBX0RJT1JfX0dQSU8zXzI4LCBNWDMxX1BJTl9BVEFfRElPV19fR1BJTzNfMjksCi0JLyogVVNCIE9URyAqLwotCU1YMzFfUElOX1VTQk9UR19EQVRBMF9fVVNCT1RHX0RBVEEwLAotCU1YMzFfUElOX1VTQk9UR19EQVRBMV9fVVNCT1RHX0RBVEExLAotCU1YMzFfUElOX1VTQk9UR19EQVRBMl9fVVNCT1RHX0RBVEEyLAotCU1YMzFfUElOX1VTQk9UR19EQVRBM19fVVNCT1RHX0RBVEEzLAotCU1YMzFfUElOX1VTQk9UR19EQVRBNF9fVVNCT1RHX0RBVEE0LAotCU1YMzFfUElOX1VTQk9UR19EQVRBNV9fVVNCT1RHX0RBVEE1LAotCU1YMzFfUElOX1VTQk9UR19EQVRBNl9fVVNCT1RHX0RBVEE2LAotCU1YMzFfUElOX1VTQk9UR19EQVRBN19fVVNCT1RHX0RBVEE3LAotCU1YMzFfUElOX1VTQk9UR19DTEtfX1VTQk9UR19DTEssIE1YMzFfUElOX1VTQk9UR19ESVJfX1VTQk9UR19ESVIsCi0JTVgzMV9QSU5fVVNCT1RHX05YVF9fVVNCT1RHX05YVCwgTVgzMV9QSU5fVVNCT1RHX1NUUF9fVVNCT1RHX1NUUCwKLQlNWDMxX1BJTl9VU0JfT0NfX0dQSU8xXzMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKQEAgLTExMSwzMyArOTgsNiBAQAogCS5leGl0CT0gZGV2Ym9hcmRfc2RoYzJfZXhpdCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSB1c2JfcGRhdGEgPSB7Ci0JLm9wZXJhdGluZ19tb2RlCT0gRlNMX1VTQjJfRFJfREVWSUNFLAotCS5waHlfbW9kZQk9IEZTTF9VU0IyX1BIWV9VTFBJLAotfTsKLQotI2RlZmluZSBPVEdfUEFEX0NGRyAoUEFEX0NUTF9EUlZfTUFYIHwgUEFEX0NUTF9TUkVfRkFTVCkKLSNkZWZpbmUgT1RHX0VOX0IgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9VU0JfT0MpCi0KLXN0YXRpYyB2b2lkIGRldmJvYXJkX3VzYm90Z19pbml0KHZvaWQpCi17Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEwLCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEExLCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEyLCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEzLCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE0LCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE1LCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE2LCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE3LCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0NMSywgT1RHX1BBRF9DRkcpOwotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19ESVIsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfTlhULCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX1NUUCwgT1RHX1BBRF9DRkcpOwotCi0JZ3Bpb19yZXF1ZXN0KE9UR19FTl9CLCAidXNiLXVkYy1lbiIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChPVEdfRU5fQiwgMCk7Ci19Ci0KIC8qCiAgKiBzeXN0ZW0gaW5pdCBmb3IgYmFzZWJvYXJkIHVzYWdlLiBXaWxsIGJlIGNhbGxlZCBieSBteDMxbW9ib2FyZCBpbml0LgogICovCkBAIC0xNTEsNyArMTExLDQgQEAKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UxLCAmdWFydF9wZGF0YSk7CiAKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNzZGhjX2RldmljZTEsICZzZGhjMl9wZGF0YSk7Ci0KLQlkZXZib2FyZF91c2JvdGdfaW5pdCgpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfdWRjX2RldmljZSwgJnVzYl9wZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1tYXJ4Ym90LmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1tYXJ4Ym90LmMKaW5kZXggOTAxZmIwMS4uMmJmYWZmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtbWFyeGJvdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYwpAQCAtMTYsNyArMTYsNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC00OCwxOCArNDcsOCBAQAogCU1YMzFfUElOX0NTSV9QSVhDTEtfX0NTSV9QSVhDTEssIE1YMzFfUElOX0NTSV9WU1lOQ19fQ1NJX1ZTWU5DLAogCU1YMzFfUElOX0dQSU8zXzBfX0dQSU8zXzAsIE1YMzFfUElOX0dQSU8zXzFfX0dQSU8zXzEsCiAJTVgzMV9QSU5fVFhEMl9fR1BJTzFfMjgsCi0JLyogVVNCIE9URyAqLwotCU1YMzFfUElOX1VTQk9UR19EQVRBMF9fVVNCT1RHX0RBVEEwLAotCU1YMzFfUElOX1VTQk9UR19EQVRBMV9fVVNCT1RHX0RBVEExLAotCU1YMzFfUElOX1VTQk9UR19EQVRBMl9fVVNCT1RHX0RBVEEyLAotCU1YMzFfUElOX1VTQk9UR19EQVRBM19fVVNCT1RHX0RBVEEzLAotCU1YMzFfUElOX1VTQk9UR19EQVRBNF9fVVNCT1RHX0RBVEE0LAotCU1YMzFfUElOX1VTQk9UR19EQVRBNV9fVVNCT1RHX0RBVEE1LAotCU1YMzFfUElOX1VTQk9UR19EQVRBNl9fVVNCT1RHX0RBVEE2LAotCU1YMzFfUElOX1VTQk9UR19EQVRBN19fVVNCT1RHX0RBVEE3LAotCU1YMzFfUElOX1VTQk9UR19DTEtfX1VTQk9UR19DTEssIE1YMzFfUElOX1VTQk9UR19ESVJfX1VTQk9UR19ESVIsCi0JTVgzMV9QSU5fVVNCT1RHX05YVF9fVVNCT1RHX05YVCwgTVgzMV9QSU5fVVNCT1RHX1NUUF9fVVNCT1RHX1NUUCwKLQlNWDMxX1BJTl9VU0JfT0NfX0dQSU8xXzMwLAorCS8qIGRzUElDIHJlc2V0cyAqLworCU1YMzFfUElOX1NUWEQ1X19HUElPMV8yMSwgTVgzMV9QSU5fU1JYRDVfX0dQSU8xXzIyLAogfTsKIAogI2RlZmluZSBTREhDMl9DRCBJT01VWF9UT19HUElPKE1YMzFfUElOX0FUQV9ESU9SKQpAQCAtMTE1LDMxICsxMDQsMjAgQEAKIAkuZXhpdAk9IG1hcnhib3Rfc2RoYzJfZXhpdCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSB1c2JfcGRhdGEgPSB7Ci0JLm9wZXJhdGluZ19tb2RlCT0gRlNMX1VTQjJfRFJfREVWSUNFLAotCS5waHlfbW9kZQk9IEZTTF9VU0IyX1BIWV9VTFBJLAotfTsKKyNkZWZpbmUgVFJTTEFUX1JTVF9CCUlPTVVYX1RPX0dQSU8oTVgzMV9QSU5fU1RYRDUpCisjZGVmaW5lIERTUElDU19SU1RfQglJT01VWF9UT19HUElPKE1YMzFfUElOX1NSWEQ1KQogCi0jZGVmaW5lIE9UR19QQURfQ0ZHIChQQURfQ1RMX0RSVl9NQVggfCBQQURfQ1RMX1NSRV9GQVNUKQotI2RlZmluZSBPVEdfRU5fQiBJT01VWF9UT19HUElPKE1YMzFfUElOX1VTQl9PQykKLQotc3RhdGljIHZvaWQgbWFyeGJvdF91c2JvdGdfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgZHNwaWNzX3Jlc2V0c19pbml0KHZvaWQpCiB7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEwLCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEExLCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEyLCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEzLCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE0LCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE1LCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE2LCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE3LCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0NMSywgT1RHX1BBRF9DRkcpOwotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19ESVIsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfTlhULCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX1NUUCwgT1RHX1BBRF9DRkcpOworCWlmICghZ3Bpb19yZXF1ZXN0KFRSU0xBVF9SU1RfQiwgInRyYW5zbGF0b3ItcnN0IikpIHsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFRSU0xBVF9SU1RfQiwgMSk7CisJCWdwaW9fZXhwb3J0KFRSU0xBVF9SU1RfQiwgZmFsc2UpOworCX0KIAotCWdwaW9fcmVxdWVzdChPVEdfRU5fQiwgInVzYi11ZGMtZW4iKTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoT1RHX0VOX0IsIDApOworCWlmICghZ3Bpb19yZXF1ZXN0KERTUElDU19SU1RfQiwgImRzcGljcy1yc3QiKSkgeworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRFNQSUNTX1JTVF9CLCAxKTsKKwkJZ3Bpb19leHBvcnQoRFNQSUNTX1JTVF9CLCBmYWxzZSk7CisJfQogfQogCiAvKgpAQCAtMTUyLDggKzEzMCw3IEBACiAJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMobWFyeGJvdF9waW5zLCBBUlJBWV9TSVpFKG1hcnhib3RfcGlucyksCiAJCSJtYXJ4Ym90Iik7CiAKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNzZGhjX2RldmljZTEsICZzZGhjMl9wZGF0YSk7CisJZHNwaWNzX3Jlc2V0c19pbml0KCk7CiAKLQltYXJ4Ym90X3VzYm90Z19pbml0KCk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmdXNiX3BkYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNzZGhjX2RldmljZTEsICZzZGhjMl9wZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQuYwppbmRleCAyYTJkYTQ3Li45MjQzZGU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMKQEAgLTE2LDkgKzE2LDEyIEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CkBAIC0zNiw2ICszOSw3IEBACiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9teDMxLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKQEAgLTU1LDYgKzU5LDI2IEBACiAJTVgzMV9QSU5fU0QxX0RBVEExX19TRDFfREFUQTEsIE1YMzFfUElOX1NEMV9EQVRBMF9fU0QxX0RBVEEwLAogCU1YMzFfUElOX1NEMV9DTEtfX1NEMV9DTEssIE1YMzFfUElOX1NEMV9DTURfX1NEMV9DTUQsCiAJTVgzMV9QSU5fQVRBX0NTMF9fR1BJTzNfMjYsIE1YMzFfUElOX0FUQV9DUzFfX0dQSU8zXzI3LAorCS8qIFVTQiByZXNldCAqLworCU1YMzFfUElOX0dQSU8xXzBfX0dQSU8xXzAsCisJLyogVVNCIE9URyAqLworCU1YMzFfUElOX1VTQk9UR19EQVRBMF9fVVNCT1RHX0RBVEEwLAorCU1YMzFfUElOX1VTQk9UR19EQVRBMV9fVVNCT1RHX0RBVEExLAorCU1YMzFfUElOX1VTQk9UR19EQVRBMl9fVVNCT1RHX0RBVEEyLAorCU1YMzFfUElOX1VTQk9UR19EQVRBM19fVVNCT1RHX0RBVEEzLAorCU1YMzFfUElOX1VTQk9UR19EQVRBNF9fVVNCT1RHX0RBVEE0LAorCU1YMzFfUElOX1VTQk9UR19EQVRBNV9fVVNCT1RHX0RBVEE1LAorCU1YMzFfUElOX1VTQk9UR19EQVRBNl9fVVNCT1RHX0RBVEE2LAorCU1YMzFfUElOX1VTQk9UR19EQVRBN19fVVNCT1RHX0RBVEE3LAorCU1YMzFfUElOX1VTQk9UR19DTEtfX1VTQk9UR19DTEssIE1YMzFfUElOX1VTQk9UR19ESVJfX1VTQk9UR19ESVIsCisJTVgzMV9QSU5fVVNCT1RHX05YVF9fVVNCT1RHX05YVCwgTVgzMV9QSU5fVVNCT1RHX1NUUF9fVVNCT1RHX1NUUCwKKwlNWDMxX1BJTl9VU0JfT0NfX0dQSU8xXzMwLAorCS8qIExFRHMgKi8KKwlNWDMxX1BJTl9TVkVOMF9fR1BJTzJfMCwgTVgzMV9QSU5fU1RYMF9fR1BJTzJfMSwKKwlNWDMxX1BJTl9TUlgwX19HUElPMl8yLCBNWDMxX1BJTl9TSU1QRDBfX0dQSU8yXzMsCisJLyogU0VMICovCisJTVgzMV9QSU5fRFRSX0RDRTFfX0dQSU8yXzgsIE1YMzFfUElOX0RTUl9EQ0UxX19HUElPMl85LAorCU1YMzFfUElOX1JJX0RDRTFfX0dQSU8yXzEwLCBNWDMxX1BJTl9EQ0RfRENFMV9fR1BJTzJfMTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBteDMxbW9ib2FyZF9mbGFzaF9kYXRhID0gewpAQCAtMTQyLDggKzE2NiwxMDkgQEAKIAkuZXhpdAk9IG1vYm9hcmRfc2RoYzFfZXhpdCwKIH07CiAKKy8qCisgKiB0aGlzIHBpbiBpcyBkZWRpY2F0ZWQgZm9yIGFsbCBteDMxbW9ib2FyZCBzeXN0ZW1zLCBzbyB3ZSBkbyBpdCBoZXJlCisgKi8KKyNkZWZpbmUgVVNCX1JFU0VUX0IJSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9HUElPMV8wKQorCitzdGF0aWMgdm9pZCB1c2JfeGN2cl9yZXNldCh2b2lkKQoreworCWdwaW9fcmVxdWVzdChVU0JfUkVTRVRfQiwgInVzYi1yZXNldCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChVU0JfUkVTRVRfQiwgMCk7CisJbWRlbGF5KDEpOworCWdwaW9fc2V0X3ZhbHVlKFVTQl9SRVNFVF9CLCAxKTsKK30KKworI2RlZmluZSBVU0JfUEFEX0NGRyAoUEFEX0NUTF9EUlZfTUFYIHwgUEFEX0NUTF9TUkVfRkFTVCB8IFBBRF9DVExfSFlTX0NNT1MgfCBcCisJCQlQQURfQ1RMX09ERV9DTU9TIHwgUEFEX0NUTF8xMDBLX1BVKQorCisjZGVmaW5lIE9UR19FTl9CIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fVVNCX09DKQorCitzdGF0aWMgdm9pZCBtb2JvYXJkX3VzYm90Z19pbml0KHZvaWQpCit7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEwLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEExLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEyLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEzLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE0LCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE1LCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE2LCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE3LCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0NMSywgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19ESVIsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfTlhULCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX1NUUCwgVVNCX1BBRF9DRkcpOworCisJZ3Bpb19yZXF1ZXN0KE9UR19FTl9CLCAidXNiLXVkYy1lbiIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChPVEdfRU5fQiwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSB1c2JfcGRhdGEgPSB7CisJLm9wZXJhdGluZ19tb2RlCT0gRlNMX1VTQjJfRFJfREVWSUNFLAorCS5waHlfbW9kZQk9IEZTTF9VU0IyX1BIWV9VTFBJLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBteDMxbW9ib2FyZF9sZWRzW10gPSB7CisJeworCQkubmFtZSAJPSAiY29yZWJvYXJkLWxlZC0wOnJlZDpydW5uaW5nIiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJoZWFydGJlYXQiLAorCQkuZ3BpbyAJPSBJT01VWF9UT19HUElPKE1YMzFfUElOX1NWRU4wKSwKKwl9LCB7CisJCS5uYW1lCT0gImNvcmVib2FyZC1sZWQtMTpyZWQiLAorCQkuZ3Bpbwk9IElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fU1RYMCksCisJfSwgeworCQkubmFtZQk9ICJjb3JlYm9hcmQtbGVkLTI6cmVkIiwKKwkJLmdwaW8JPSBJT01VWF9UT19HUElPKE1YMzFfUElOX1NSWDApLAorCX0sIHsKKwkJLm5hbWUJPSAiY29yZWJvYXJkLWxlZC0zOnJlZCIsCisJCS5ncGlvCT0gSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TSU1QRDApLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgbXgzMW1vYm9hcmRfbGVkX3BkYXRhID0geworCS5udW1fbGVkcyAJPSBBUlJBWV9TSVpFKG14MzFtb2JvYXJkX2xlZHMpLAorCS5sZWRzCQk9IG14MzFtb2JvYXJkX2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDMxbW9ib2FyZF9sZWRzX2RldmljZSA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm14MzFtb2JvYXJkX2xlZF9wZGF0YSwKKwl9LAorfTsKKworI2RlZmluZSBTRUwwIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fRFRSX0RDRTEpCisjZGVmaW5lIFNFTDEgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9EU1JfRENFMSkKKyNkZWZpbmUgU0VMMiBJT01VWF9UT19HUElPKE1YMzFfUElOX1JJX0RDRTEpCisjZGVmaW5lIFNFTDMgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9EQ0RfRENFMSkKKworc3RhdGljIHZvaWQgbXgzMW1vYm9hcmRfaW5pdF9zZWxfZ3Bpb3Modm9pZCkKK3sKKwlpZiAoIWdwaW9fcmVxdWVzdChTRUwwLCAic2VsMCIpKSB7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNFTDApOworCQlncGlvX2V4cG9ydChTRUwwLCB0cnVlKTsKKwl9CisKKwlpZiAoIWdwaW9fcmVxdWVzdChTRUwxLCAic2VsMSIpKSB7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNFTDEpOworCQlncGlvX2V4cG9ydChTRUwxLCB0cnVlKTsKKwl9CisKKwlpZiAoIWdwaW9fcmVxdWVzdChTRUwyLCAic2VsMiIpKSB7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNFTDIpOworCQlncGlvX2V4cG9ydChTRUwyLCB0cnVlKTsKKwl9CisKKwlpZiAoIWdwaW9fcmVxdWVzdChTRUwzLCAic2VsMyIpKSB7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNFTDMpOworCQlncGlvX2V4cG9ydChTRUwzLCB0cnVlKTsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmbXgzMW1vYm9hcmRfZmxhc2gsCisJJm14MzFtb2JvYXJkX2xlZHNfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBteDMxbW9ib2FyZF9iYXNlYm9hcmQ7CkBAIC0xNjIsMTEgKzI4NywxOCBAQAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2U0LCAmdWFydF9wZGF0YSk7CiAKKwlteDMxbW9ib2FyZF9pbml0X3NlbF9ncGlvcygpOworCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2kyY19kZXZpY2UwLCAmbW9ib2FyZF9pMmMwX3BkYXRhKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsICZtb2JvYXJkX2kyYzFfcGRhdGEpOwogCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjc2RoY19kZXZpY2UwLCAmc2RoYzFfcGRhdGEpOwogCisJdXNiX3hjdnJfcmVzZXQoKTsKKworCW1vYm9hcmRfdXNib3RnX2luaXQoKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX3VkY19kZXZpY2UsICZ1c2JfcGRhdGEpOworCiAJc3dpdGNoIChteDMxbW9ib2FyZF9iYXNlYm9hcmQpIHsKIAljYXNlIE1YMzFOT0JPQVJEOgogCQlicmVhazsKQEAgLTE5Nyw3ICszMjksNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAogCS5tYXBfaW8gICAgICAgICA9IG14MzFfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKKwkuaW5pdF9pcnEgICAgICAgPSBteDMxX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZteDMxbW9ib2FyZF90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxcGRrLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxcGRrLmMKaW5kZXggYzE5ODM4ZC4uMGY3YTJmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMXBkay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFwZGsuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJLmlvX3BnX29mZnN0CT0gKChBSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyAgICAgICAgID0gbXgzMXBka19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycSAgICAgICA9IG14MzFfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCiAJLnRpbWVyICAgICAgICAgID0gJm14MzFwZGtfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzNXBkay5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzNXBkay5jCmluZGV4IDZkMTUzNzQuLjZmZjE4NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzVwZGsuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDM1cGRrLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvICAgICAgICAgPSBteDM1X21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteGNfaW5pdF9pcnEsCisJLmluaXRfaXJxICAgICAgID0gbXgzNV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lICAgPSBteGNfYm9hcmRfaW5pdCwKIAkudGltZXIgICAgICAgICAgPSAmbXgzNXBka190aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYyBiL2FyY2gvYXJtL21hY2gtbXgzL3BjbTAzNy5jCmluZGV4IDg0MGNmZGEzLi42Y2JhYWJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi9wbGF0Zm9ybS9zamExMDAwLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAKQEAgLTE2OSw2ICsxNzAsOCBAQAogCU1YMzFfUElOX0NTSV9NQ0xLX19DU0lfTUNMSywKIAlNWDMxX1BJTl9DU0lfUElYQ0xLX19DU0lfUElYQ0xLLAogCU1YMzFfUElOX0NTSV9WU1lOQ19fQ1NJX1ZTWU5DLAorCS8qIEdQSU8gKi8KKwlJT01VWF9NT0RFKE1YMzFfUElOX0FUQV9ETUFDSywgSU9NVVhfQ09ORklHX0dQSU8pLAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGNtMDM3X2ZsYXNoX2RhdGEgPSB7CkBAIC0yNDQsMTIgKzI0NywxMSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQJCT0gQ1MxX0JBU0VfQUREUiArIDB4MzAwLAogCQkuZW5kCQk9IENTMV9CQVNFX0FERFIgKyAweDMwMCArIFNaXzY0SyAtIDEsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKKwl9LCB7CiAJCS5zdGFydAkJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzNfMSksCiAJCS5lbmQJCT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8zXzEpLAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCwKQEAgLTMzOSw4ICszNDEsNyBAQAogCQlJMkNfQk9BUkRfSU5GTygiYXQyNCIsIDB4NTIpLCAvKiBFMD0wLCBFMT0xLCBFMj0wICovCiAJCS5wbGF0Zm9ybV9kYXRhID0gJmJvYXJkX2VlcHJvbSwKIAl9LCB7Ci0JCUkyQ19CT0FSRF9JTkZPKCJydGMtcGNmODU2MyIsIDB4NTEpLAotCQkudHlwZSA9ICJwY2Y4NTYzIiwKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKIAl9CiB9OwogCkBAIC01MTUsNiArNTE2LDMzIEBACiAJLm51bV9tb2Rlcwk9IEFSUkFZX1NJWkUoZmJfbW9kZWRiKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNtOTcwX3NqYTEwMDBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgICA9IENTNV9CQVNFX0FERFIsCisJCS5lbmQgICAgID0gQ1M1X0JBU0VfQUREUiArIDB4MTAwIC0gMSwKKwkJLmZsYWdzICAgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCAgID0gSU9NVVhfVE9fSVJRKElPTVVYX1BJTig0OCwgMTA1KSksCisJCS5lbmQgICAgID0gSU9NVVhfVE9fSVJRKElPTVVYX1BJTig0OCwgMTA1KSksCisJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dFREdFLAorCX0sCit9OworCitzdHJ1Y3Qgc2phMTAwMF9wbGF0Zm9ybV9kYXRhIHBjbTk3MF9zamExMDAwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNsb2NrCQk9IDE2MDAwMDAwIC8gMiwKKwkub2NyCQk9IDB4NDAgfCAweDE4LAorCS5jZHIJCT0gMHg0MCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTk3MF9zamExMDAwID0geworCS5uYW1lID0gInNqYTEwMDBfcGxhdGZvcm0iLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTk3MF9zamExMDAwX3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UgPSBwY205NzBfc2phMTAwMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHBjbTk3MF9zamExMDAwX3Jlc291cmNlcyksCit9OworCiAvKgogICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCiAgKi8KQEAgLTU3NSw2ICs2MDMsOCBAQAogCiAJaWYgKCFwY20wMzdfY2FtZXJhX2FsbG9jX2RtYSg0ICogMTAyNCAqIDEwMjQpKQogCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfY2FtZXJhLCAmY2FtZXJhX3BkYXRhKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNtOTcwX3NqYTEwMDApOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNtMDM3X3RpbWVyX2luaXQodm9pZCkKQEAgLTU5Miw3ICs2MjIsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAogCS5tYXBfaW8gICAgICAgICA9IG14MzFfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKKwkuaW5pdF9pcnEgICAgICAgPSBteDMxX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZwY20wMzdfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDQzLmMgYi9hcmNoL2FybS9tYWNoLW14My9wY20wNDMuYwppbmRleCA4ZDI3YzMyLi5lMThhMjI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9wY20wNDMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9wY20wNDMuYwpAQCAtMTMzLDggKzEzMyw3IEBACiAJCUkyQ19CT0FSRF9JTkZPKCJhdDI0IiwgMHg1MiksIC8qIEUwPTAsIEUxPTEsIEUyPTAgKi8KIAkJLnBsYXRmb3JtX2RhdGEgPSAmYm9hcmRfZWVwcm9tLAogCX0sIHsKLQkJSTJDX0JPQVJEX0lORk8oInJ0Yy1wY2Y4NTYzIiwgMHg1MSksCi0JCS50eXBlID0gInBjZjg1NjMiLAorCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAogCX0KIH07CiAjZW5kaWYKQEAgLTIwMyw3ICsyMDIsOCBAQAogCU1YMzVfUEFEX0QzX1ZTWU5DX19JUFVfRElTUEJfRDNfVlNZTkMsCiAJTVgzNV9QQURfRDNfUkVWX19JUFVfRElTUEJfRDNfUkVWLAogCU1YMzVfUEFEX0QzX0NMU19fSVBVX0RJU1BCX0QzX0NMUywKLQlNWDM1X1BBRF9EM19TUExfX0lQVV9ESVNQQl9EM19TUEwKKwkvKiBncGlvICovCisJTVgzNV9QQURfQVRBX0NTMF9fR1BJTzJfNiwKIH07CiAKIC8qCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvICAgICAgICAgPSBteDM1X21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteGNfaW5pdF9pcnEsCisJLmluaXRfaXJxICAgICAgID0gbXgzNV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lICAgPSBteGNfYm9hcmRfaW5pdCwKIAkudGltZXIgICAgICAgICAgPSAmcGNtMDQzX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL3FvbmcuYyBiL2FyY2gvYXJtL21hY2gtbXgzL3FvbmcuYwppbmRleCA4MmIzMWM0Li4wNDQ1MTFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9xb25nLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvcW9uZy5jCkBAIC04MSwxMyArODEsMTIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbmV0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKKwl7CiAJCS5uYW1lCT0gImRuZXQtbWVtb3J5IiwKIAkJLnN0YXJ0CT0gUU9OR19ETkVUX0JBU0VBRERSLAogCQkuZW5kCT0gUU9OR19ETkVUX0JBU0VBRERSICsgUU9OR19ETkVUX1NJWkUgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKKwl9LCB7CiAJCS5zdGFydAk9IFFPTkdfRlBHQV9JUlEsCiAJCS5lbmQJPSBRT05HX0ZQR0FfSVJRLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKQEAgLTI4MCw3ICsyNzksNyBAQAogCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAogCS5tYXBfaW8gICAgICAgICA9IG14MzFfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKKwkuaW5pdF9pcnEgICAgICAgPSBteDMxX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZxb25nX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTVmYTM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKK2lmIEFSQ0hfTVhDOTEyMzEKKworY29tbWVudCAiTVhDOTEyMzEgcGxhdGZvcm1zOiIKKworY29uZmlnIE1BQ0hfTUFHWF9aTjUKKwlib29sICJTdXBwb3J0IE1vdG9yb2xhIFpuNSBHU00gcGhvbmUiCisJZGVmYXVsdCBuCisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNb3Rvcm9sYSBabjUgR1NNIHBob25lLgorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExZDVlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACitvYmoteQk6PSBtbS5vIGNsb2NrLm8gZGV2aWNlcy5vIHN5c3RlbS5vIGlvbXV4Lm8KK29iai0kKENPTkZJR19NQUNIX01BR1hfWk41KSArPSBtYWd4LXpuNS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzOWExOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDMgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHg5MDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweDkwMDAwMTAwCitpbml0cmRfcGh5cy15CTo9IDB4OTA4MDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2ZhMzdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9jbG9jay5jCkBAIC0wLDAgKzEsNjQyIEBACisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2J1Zy5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSAiY3JtX3JlZ3MuaCIKKworI2RlZmluZSBDUk1fU01BTExfRElWSURFUihiYXNlLCBuYW1lKSBcCisJY3JtX3NtYWxsX2RpdmlkZXIoYmFzZSwgXAorCQkJICBiYXNlICMjIF8gIyMgbmFtZSAjIyBfT0ZGU0VULCBcCisJCQkgIGJhc2UgIyMgXyAjIyBuYW1lICMjIF9NQVNLKQorI2RlZmluZSBDUk1fMURJVklERVIoYmFzZSwgbmFtZSkgXAorCWNybV9kaXZpZGVyKGJhc2UsIFwKKwkJICAgIGJhc2UgIyMgXyAjIyBuYW1lICMjIF9PRkZTRVQsIFwKKwkJICAgIGJhc2UgIyMgXyAjIyBuYW1lICMjIF9NQVNLLCAxKQorI2RlZmluZSBDUk1fMTZESVZJREVSKGJhc2UsIG5hbWUpIFwKKwljcm1fZGl2aWRlcihiYXNlLCBcCisJCSAgICBiYXNlICMjIF8gIyMgbmFtZSAjIyBfT0ZGU0VULCBcCisJCSAgICBiYXNlICMjIF8gIyMgbmFtZSAjIyBfTUFTSywgMTYpCisKK3N0YXRpYyB1MzIgY3JtX3NtYWxsX2RpdmlkZXIodm9pZCBfX2lvbWVtICpyZWcsIHU4IG9mZnNldCwgdTMyIG1hc2spCit7CisJc3RhdGljIGNvbnN0IHUzMiBjcm1fc21hbGxfZGl2aWRlcnNbXSA9IHsKKwkJMiwgMywgNCwgNSwgNiwgOCwgMTAsIDEyCisJfTsKKwl1OCBpZHg7CisKKwlpZHggPSAoX19yYXdfcmVhZGwocmVnKSAmIG1hc2spID4+IG9mZnNldDsKKwlpZiAoaWR4ID4gNykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gY3JtX3NtYWxsX2RpdmlkZXJzW2lkeF07Cit9CisKK3N0YXRpYyB1MzIgY3JtX2RpdmlkZXIodm9pZCBfX2lvbWVtICpyZWcsIHU4IG9mZnNldCwgdTMyIG1hc2ssIHUzMiB6KQoreworCXUzMiBkaXY7CisJZGl2ID0gKF9fcmF3X3JlYWRsKHJlZykgJiBtYXNrKSA+PiBvZmZzZXQ7CisJcmV0dXJuIGRpdiA/IGRpdiA6IHo7Cit9CisKK3N0YXRpYyBpbnQgX2Nsa18xYml0X2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnIHw9IDEgPDwgY2xrLT5lbmFibGVfc2hpZnQ7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfY2xrXzFiaXRfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnICY9IH4oMSA8PCBjbGstPmVuYWJsZV9zaGlmdCk7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKK30KKworc3RhdGljIGludCBfY2xrXzNiaXRfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWcgfD0gMHg3IDw8IGNsay0+ZW5hYmxlX3NoaWZ0OworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX2Nsa18zYml0X2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZyAmPSB+KDB4NyA8PCBjbGstPmVuYWJsZV9zaGlmdCk7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2tpaF9yYXRlOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfY2tpaF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNraWhfcmF0ZTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2tpaF9jbGsgPSB7CisJLmdldF9yYXRlID0gY2xrX2NraWhfZ2V0X3JhdGUsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfY2tpaF94Ml9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDIgKiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworfQorCitzdGF0aWMgc3RydWN0IGNsayBja2loX3gyX2NsayA9IHsKKwkucGFyZW50ID0gJmNraWhfY2xrLAorCS5nZXRfcmF0ZSA9IGNsa19ja2loX3gyX2dldF9yYXRlLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2NraWxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBDS0lMX0NMS19GUkVROworfQorCitzdGF0aWMgc3RydWN0IGNsayBja2lsX2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBjbGtfY2tpbF9nZXRfcmF0ZSwKK307CisKKy8qIHBsbHMgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jdV9wbGxfY2xrOworc3RhdGljIHN0cnVjdCBjbGsgZHNwX3BsbF9jbGs7CitzdGF0aWMgc3RydWN0IGNsayB1c2JfcGxsX2NsazsKKworc3RhdGljIHN0cnVjdCBjbGsgKnBsbF9jbGsodTggc2VsKQoreworCXN3aXRjaCAoc2VsKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gJm1jdV9wbGxfY2xrOworCWNhc2UgMToKKwkJcmV0dXJuICZkc3BfcGxsX2NsazsKKwljYXNlIDI6CisJCXJldHVybiAmdXNiX3BsbF9jbGs7CisJfQorCUJVRygpOworfQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpwbGxfYmFzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsayA9PSAmbWN1X3BsbF9jbGspCisJCXJldHVybiBNWENfUExMMF9CQVNFOworCWVsc2UgaWYgKGNsayA9PSAmZHNwX3BsbF9jbGspCisJCXJldHVybiBNWENfUExMMV9CQVNFOworCWVsc2UgaWYgKGNsayA9PSAmdXNiX3BsbF9jbGspCisJCXJldHVybiBNWENfUExMMl9CQVNFOworCUJVRygpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfcGxsX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwljb25zdCB2b2lkIF9faW9tZW0gKnBsbGJhc2U7CisJdW5zaWduZWQgbG9uZyBkcF9vcCwgZHBfbWZkLCBkcF9tZm4sIHBsbF9oZnNtLCByZWZfY2xrLCBtZmk7CisJbG9uZyBtZm4sIG1mbl9hYnMsIG1mZCwgcGRmOworCXM2NCB0ZW1wOworCXBsbGJhc2UgPSBwbGxfYmFzZShjbGspOworCisJcGxsX2hmc20gPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9DVEwpICYgTVhDX1BMTF9EUF9DVExfSEZTTTsKKwlpZiAocGxsX2hmc20gPT0gMCkgeworCQlkcF9vcCA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX09QKTsKKwkJZHBfbWZkID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfTUZEKTsKKwkJZHBfbWZuID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfTUZOKTsKKwl9IGVsc2UgeworCQlkcF9vcCA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0hGU19PUCk7CisJCWRwX21mZCA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0hGU19NRkQpOworCQlkcF9tZm4gPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9IRlNfTUZOKTsKKwl9CisKKwlwZGYgPSBkcF9vcCAmIE1YQ19QTExfRFBfT1BfUERGX01BU0s7CisJbWZpID0gKGRwX29wID4+IE1YQ19QTExfRFBfT1BfTUZJX09GRlNFVCkgJiBNWENfUExMX0RQX09QX1BERl9NQVNLOworCW1maSA9IChtZmkgPD0gNSkgPyA1IDogbWZpOworCW1mZCA9IGRwX21mZCAmIE1YQ19QTExfRFBfTUZEX01BU0s7CisJbWZuID0gZHBfbWZuICYgTVhDX1BMTF9EUF9NRk5fTUFTSzsKKwltZm4gPSAobWZuIDw9IDB4NDAwMDAwMCkgPyBtZm4gOiAobWZuIC0gMHgxMDAwMDAwMCk7CisKKwlpZiAobWZuIDwgMCkKKwkJbWZuX2FicyA9IC1tZm47CisJZWxzZQorCQltZm5fYWJzID0gbWZuOworCisvKiBYWFg6IGFjdHVhbGx5IHRoaXMgYXN1bWVzIHRoYXQgY2tpaCBpcyBmZWQgdG8gcGxsLCBidXQgc3BlYyBzYXlzCisgKiB0aGF0IGNraWhfeDIgaXMgYWxzbyBwb3NzaWJsZS4gbmVlZCB0byBjaGVjayB0aGlzIG91dC4KKyAqLworCXJlZl9jbGsgPSBjbGtfZ2V0X3JhdGUoJmNraWhfY2xrKTsKKworCXJlZl9jbGsgKj0gMjsKKwlyZWZfY2xrIC89IHBkZiArIDE7CisKKwl0ZW1wID0gKHU2NCkgcmVmX2NsayAqIG1mbl9hYnM7CisJZG9fZGl2KHRlbXAsIG1mZCk7CisJaWYgKG1mbiA8IDApCisJCXRlbXAgPSAtdGVtcDsKKwl0ZW1wICs9IHJlZl9jbGsgKiBtZmk7CisKKwlyZXR1cm4gdGVtcDsKK30KKworc3RhdGljIGludCBjbGtfcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdm9pZCBfX2lvbWVtICpjdGw7CisJdTMyIHJlZzsKKworCWN0bCA9IHBsbF9iYXNlKGNsayk7CisJcmVnID0gX19yYXdfcmVhZGwoY3RsKTsKKwlyZWcgfD0gKE1YQ19QTExfRFBfQ1RMX1JTVCB8IE1YQ19QTExfRFBfQ1RMX1VQRU4pOworCV9fcmF3X3dyaXRlbChyZWcsIGN0bCk7CisJZG8geworCQlyZWcgPSBfX3Jhd19yZWFkbChjdGwpOworCX0gd2hpbGUgKChyZWcgJiBNWENfUExMX0RQX0NUTF9MUkYpICE9IE1YQ19QTExfRFBfQ1RMX0xSRik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsa19wbGxfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdm9pZCBfX2lvbWVtICpjdGw7CisJdTMyIHJlZzsKKworCWN0bCA9IHBsbF9iYXNlKGNsayk7CisJcmVnID0gX19yYXdfcmVhZGwoY3RsKTsKKwlyZWcgJj0gfihNWENfUExMX0RQX0NUTF9SU1QgfCBNWENfUExMX0RQX0NUTF9VUEVOKTsKKwlfX3Jhd193cml0ZWwocmVnLCBjdGwpOworfQorCitzdGF0aWMgc3RydWN0IGNsayBtY3VfcGxsX2NsayA9IHsKKwkucGFyZW50ID0gJmNraWhfY2xrLAorCS5nZXRfcmF0ZSA9IGNsa19wbGxfZ2V0X3JhdGUsCisJLmVuYWJsZSA9IGNsa19wbGxfZW5hYmxlLAorCS5kaXNhYmxlID0gY2xrX3BsbF9kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNwX3BsbF9jbGsgPSB7CisJLnBhcmVudCA9ICZja2loX2NsaywKKwkuZ2V0X3JhdGUgPSBjbGtfcGxsX2dldF9yYXRlLAorCS5lbmFibGUgPSBjbGtfcGxsX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGNsa19wbGxfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9wbGxfY2xrID0geworCS5wYXJlbnQgPSAmY2tpaF9jbGssCisJLmdldF9yYXRlID0gY2xrX3BsbF9nZXRfcmF0ZSwKKwkuZW5hYmxlID0gY2xrX3BsbF9lbmFibGUsCisJLmRpc2FibGUgPSBjbGtfcGxsX2Rpc2FibGUsCit9OworLyogcGxscyBzdHVmZiBlbmQgKi8KKworLyogYXBfcmVmX2NsayBzdHVmZiAqLworc3RhdGljIHN0cnVjdCBjbGsgYXBfcmVmX2NsazsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2FwX3JlZl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGFzY3NyLCBhY3NyOworCXU4IGFwX3BhdF9yZWZfZGl2XzIsIGFwX2lzZWwsIGFjcywgYWRzOworCisJYXNjc3IgPSBfX3Jhd19yZWFkbChNWENfQ1JNQVBfQVNDU1IpOworCWFjc3IgPSBfX3Jhd19yZWFkbChNWENfQ1JNQVBfQUNTUik7CisKKwkvKiAwIGZvciBja2loLCAxIGZvciBja2loKjIgKi8KKwlhcF9pc2VsID0gYXNjc3IgJiBNWENfQ1JNQVBfQVNDU1JfQVBJU0VMOworCS8qIHJlZyBkaXZpZGVyICovCisJYXBfcGF0X3JlZl9kaXZfMiA9IChhc2NzciA+PiBNWENfQ1JNQVBfQVNDU1JfQVBfUEFURElWMl9PRkZTRVQpICYgMHgxOworCS8qIHVuZG9jdW1lbnRlZCwgMSBmb3IgZGlzYWJsaW5nIGRpdmlkZXIgKi8KKwlhZHMgPSAoYWNzciA+PiBNWENfQ1JNQVBfQUNTUl9BRFNfT0ZGU0VUKSAmIDB4MTsKKwkvKiAwIGZvciBwYXRfcmVmLCAxIGZvciBkaXZpZGVyIG91dCAqLworCWFjcyA9IGFjc3IgJiBNWENfQ1JNQVBfQUNTUl9BQ1M7CisKKwlpZiAoYWNzICYgIWFkcykKKwkJLyogdXNlIGRpdmlkZWQgY2xvY2sgKi8KKwkJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoYXBfcGF0X3JlZl9kaXZfMiA/IDIgOiAxKTsKKworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpICogKGFwX2lzZWwgPyAyIDogMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFwX3JlZl9jbGsgPSB7CisJLnBhcmVudCA9ICZja2loX2NsaywKKwkuZ2V0X3JhdGUgPSBjbGtfYXBfcmVmX2dldF9yYXRlLAorfTsKKy8qIGFwX3JlZl9jbGsgc3R1ZmYgZW5kICovCisKKy8qIGFwX3ByZV9kZnNfY2xrIHN0dWZmICovCitzdGF0aWMgc3RydWN0IGNsayBhcF9wcmVfZGZzX2NsazsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2FwX3ByZV9kZnNfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBhY3NyLCBhc2NzcjsKKworCWFjc3IgPSBfX3Jhd19yZWFkbChNWENfQ1JNQVBfQUNTUik7CisJYXNjc3IgPSBfX3Jhd19yZWFkbChNWENfQ1JNQVBfQVNDU1IpOworCisJaWYgKGFjc3IgJiBNWENfQ1JNQVBfQUNTUl9BQ1MpIHsKKwkJdTggc2VsOworCQlzZWwgPSAoYXNjc3IgJiBNWENfQ1JNQVBfQVNDU1JfQVBTRUxfTUFTSykgPj4KKwkJCU1YQ19DUk1BUF9BU0NTUl9BUFNFTF9PRkZTRVQ7CisJCXJldHVybiBjbGtfZ2V0X3JhdGUocGxsX2NsayhzZWwpKSAvCisJCQlDUk1fU01BTExfRElWSURFUihNWENfQ1JNQVBfQUNEUiwgQVJNRElWKTsKKwl9CisJcmV0dXJuIGNsa19nZXRfcmF0ZSgmYXBfcmVmX2Nsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFwX3ByZV9kZnNfY2xrID0geworCS5nZXRfcmF0ZSA9IGNsa19hcF9wcmVfZGZzX2dldF9yYXRlLAorfTsKKy8qIGFwX3ByZV9kZnNfY2xrIHN0dWZmIGVuZCAqLworCisvKiB1c2JfY2xrIHN0dWZmICovCitzdGF0aWMgc3RydWN0IGNsayB1c2JfY2xrOworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrX3VzYl9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBhY3NyLCBhc2NzcjsKKworCWFjc3IgPSBfX3Jhd19yZWFkbChNWENfQ1JNQVBfQUNTUik7CisJYXNjc3IgPSBfX3Jhd19yZWFkbChNWENfQ1JNQVBfQVNDU1IpOworCisJaWYgKGFjc3IgJiBNWENfQ1JNQVBfQUNTUl9BQ1MpIHsKKwkJdTggc2VsOworCQlzZWwgPSAoYXNjc3IgJiBNWENfQ1JNQVBfQVNDU1JfVVNCU0VMX01BU0spID4+CisJCQlNWENfQ1JNQVBfQVNDU1JfVVNCU0VMX09GRlNFVDsKKwkJcmV0dXJuIHBsbF9jbGsoc2VsKTsKKwl9CisJcmV0dXJuICZhcF9yZWZfY2xrOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfdXNiX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvCisJCUNSTV9TTUFMTF9ESVZJREVSKE1YQ19DUk1BUF9BQ0RFUjIsIFVTQkRJVik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9jbGsgPSB7CisJLmVuYWJsZV9yZWcgPSBNWENfQ1JNQVBfQUNERVIyLAorCS5lbmFibGVfc2hpZnQgPSBNWENfQ1JNQVBfQUNERVIyX1VTQkVOX09GRlNFVCwKKwkuZ2V0X3JhdGUgPSBjbGtfdXNiX2dldF9yYXRlLAorCS5lbmFibGUgPSBfY2xrXzFiaXRfZW5hYmxlLAorCS5kaXNhYmxlID0gX2Nsa18xYml0X2Rpc2FibGUsCit9OworLyogdXNiX2NsayBzdHVmZiBlbmQgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2lwZ19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyBDUk1fMTZESVZJREVSKE1YQ19DUk1BUF9BQ0RSLCBJUERJVik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19haGJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8KKwkJQ1JNXzE2RElWSURFUihNWENfQ1JNQVBfQUNEUiwgQUhCRElWKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgaXBnX2NsayA9IHsKKwkucGFyZW50ID0gJmFwX3ByZV9kZnNfY2xrLAorCS5nZXRfcmF0ZSA9IGNsa19pcGdfZ2V0X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhaGJfY2xrID0geworCS5wYXJlbnQgPSAmYXBfcHJlX2Rmc19jbGssCisJLmdldF9yYXRlID0gY2xrX2FoYl9nZXRfcmF0ZSwKK307CisKKy8qIHBlcmNsa19jbGsgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcmNsa19jbGs7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19wZXJjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBhY2RlcjI7CisKKwlhY2RlcjIgPSBfX3Jhd19yZWFkbChNWENfQ1JNQVBfQUNERVIyKTsKKwlpZiAoYWNkZXIyICYgTVhDX0NSTUFQX0FDREVSMl9CQVVEX0lTRUxfTUFTSykKKwkJcmV0dXJuIDIgKiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcmNsa19jbGsgPSB7CisJLnBhcmVudCA9ICZja2loX2NsaywKKwkuZ2V0X3JhdGUgPSBjbGtfcGVyY2xrX2dldF9yYXRlLAorfTsKKy8qIHBlcmNsa19jbGsgc3R1ZmYgZW5kICovCisKKy8qIHVhcnRfY2xrIHN0dWZmICovCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0X2Nsa1tdOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfdWFydF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGRpdjsKKworCXN3aXRjaCAoY2xrLT5pZCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCWRpdiA9IENSTV9TTUFMTF9ESVZJREVSKE1YQ19DUk1BUF9BQ0RFUjIsIEJBVURESVYpOworCQlicmVhazsKKwljYXNlIDI6CisJCWRpdiA9IENSTV9TTUFMTF9ESVZJREVSKE1YQ19DUk1BUF9BUFJBLCBVQVJUM0RJVik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIGRpdjsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgdWFydF9jbGtbXSA9IHsKKwl7CisJCS5pZCA9IDAsCisJCS5wYXJlbnQgPSAmcGVyY2xrX2NsaywKKwkJLmVuYWJsZV9yZWcgPSBNWENfQ1JNQVBfQVBSQSwKKwkJLmVuYWJsZV9zaGlmdCA9IE1YQ19DUk1BUF9BUFJBX1VBUlQxRU5fT0ZGU0VULAorCQkuZ2V0X3JhdGUgPSBjbGtfdWFydF9nZXRfcmF0ZSwKKwkJLmVuYWJsZSA9IF9jbGtfMWJpdF9lbmFibGUsCisJCS5kaXNhYmxlID0gX2Nsa18xYml0X2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAxLAorCQkucGFyZW50ID0gJnBlcmNsa19jbGssCisJCS5lbmFibGVfcmVnID0gTVhDX0NSTUFQX0FQUkEsCisJCS5lbmFibGVfc2hpZnQgPSBNWENfQ1JNQVBfQVBSQV9VQVJUMkVOX09GRlNFVCwKKwkJLmdldF9yYXRlID0gY2xrX3VhcnRfZ2V0X3JhdGUsCisJCS5lbmFibGUgPSBfY2xrXzFiaXRfZW5hYmxlLAorCQkuZGlzYWJsZSA9IF9jbGtfMWJpdF9kaXNhYmxlLAorCX0sIHsKKwkJLmlkID0gMiwKKwkJLnBhcmVudCA9ICZwZXJjbGtfY2xrLAorCQkuZW5hYmxlX3JlZyA9IE1YQ19DUk1BUF9BUFJBLAorCQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NSTUFQX0FQUkFfVUFSVDNFTl9PRkZTRVQsCisJCS5nZXRfcmF0ZSA9IGNsa191YXJ0X2dldF9yYXRlLAorCQkuZW5hYmxlID0gX2Nsa18xYml0X2VuYWJsZSwKKwkJLmRpc2FibGUgPSBfY2xrXzFiaXRfZGlzYWJsZSwKKwl9LAorfTsKKy8qIHVhcnRfY2xrIHN0dWZmIGVuZCAqLworCisvKiBzZGhjX2NsayBzdHVmZiAqLworc3RhdGljIHN0cnVjdCBjbGsgbmZjX2NsazsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX25mY19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLworCQlDUk1fMURJVklERVIoTVhDX0NSTUFQX0FDREVSMiwgTkZDRElWKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgbmZjX2NsayA9IHsKKwkucGFyZW50ID0gJmFoYl9jbGssCisJLmVuYWJsZV9yZWcgPSBNWENfQ1JNQVBfQUNERVIyLAorCS5lbmFibGVfc2hpZnQgPSBNWENfQ1JNQVBfQUNERVIyX05GQ0VOX09GRlNFVCwKKwkuZ2V0X3JhdGUgPSBjbGtfbmZjX2dldF9yYXRlLAorCS5lbmFibGUgPSBfY2xrXzFiaXRfZW5hYmxlLAorCS5kaXNhYmxlID0gX2Nsa18xYml0X2Rpc2FibGUsCit9OworLyogc2RoY19jbGsgc3R1ZmYgZW5kICovCisKKy8qIHNkaGNfY2xrIHN0dWZmICovCitzdGF0aWMgc3RydWN0IGNsayBzZGhjX2Nsa1tdOworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrX3NkaGNfcGFyZW50KHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgYXByYjsKKwl1OCBzZWw7CisJdTMyIG1hc2s7CisJaW50IG9mZnNldDsKKworCWFwcmIgPSBfX3Jhd19yZWFkbChNWENfQ1JNQVBfQVBSQik7CisKKwlzd2l0Y2ggKGNsay0+aWQpIHsKKwljYXNlIDA6CisJCW1hc2sgPSBNWENfQ1JNQVBfQVBSQl9TREhDMV9JU0VMX01BU0s7CisJCW9mZnNldCA9IE1YQ19DUk1BUF9BUFJCX1NESEMxX0lTRUxfT0ZGU0VUOworCQlicmVhazsKKwljYXNlIDE6CisJCW1hc2sgPSBNWENfQ1JNQVBfQVBSQl9TREhDMl9JU0VMX01BU0s7CisJCW9mZnNldCA9IE1YQ19DUk1BUF9BUFJCX1NESEMyX0lTRUxfT0ZGU0VUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisJc2VsID0gKGFwcmIgJiBtYXNrKSA+PiBvZmZzZXQ7CisKKwlzd2l0Y2ggKHNlbCkgeworCWNhc2UgMDoKKwkJcmV0dXJuICZja2loX2NsazsKKwljYXNlIDE6CisJCXJldHVybiAmY2tpaF94Ml9jbGs7CisJfQorCXJldHVybiAmdXNiX2NsazsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3NkaGNfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBkaXY7CisKKwlzd2l0Y2ggKGNsay0+aWQpIHsKKwljYXNlIDA6CisJCWRpdiA9IENSTV9TTUFMTF9ESVZJREVSKE1YQ19DUk1BUF9BUFJCLCBTREhDMV9ESVYpOworCQlicmVhazsKKwljYXNlIDE6CisJCWRpdiA9IENSTV9TTUFMTF9ESVZJREVSKE1YQ19DUk1BUF9BUFJCLCBTREhDMl9ESVYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIGRpdjsKK30KKworc3RhdGljIGludCBjbGtfc2RoY19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBhbWxwbXJlMSwgYXByYjsKKworCWFtbHBtcmUxID0gX19yYXdfcmVhZGwoTVhDX0NSTUFQX0FNTFBNUkUxKTsKKwlhcHJiID0gX19yYXdfcmVhZGwoTVhDX0NSTUFQX0FQUkIpOworCXN3aXRjaCAoY2xrLT5pZCkgeworCWNhc2UgMDoKKwkJYW1scG1yZTEgfD0gKDB4NyA8PCBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUU0X09GRlNFVCk7CisJCWFwcmIgfD0gKDB4MSA8PCBNWENfQ1JNQVBfQVBSQl9TREhDMUVOX09GRlNFVCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYW1scG1yZTEgfD0gKDB4NyA8PCBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUU1X09GRlNFVCk7CisJCWFwcmIgfD0gKDB4MSA8PCBNWENfQ1JNQVBfQVBSQl9TREhDMkVOX09GRlNFVCk7CisJCWJyZWFrOworCX0KKwlfX3Jhd193cml0ZWwoYW1scG1yZTEsIE1YQ19DUk1BUF9BTUxQTVJFMSk7CisJX19yYXdfd3JpdGVsKGFwcmIsIE1YQ19DUk1BUF9BUFJCKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xrX3NkaGNfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGFtbHBtcmUxLCBhcHJiOworCisJYW1scG1yZTEgPSBfX3Jhd19yZWFkbChNWENfQ1JNQVBfQU1MUE1SRTEpOworCWFwcmIgPSBfX3Jhd19yZWFkbChNWENfQ1JNQVBfQVBSQik7CisJc3dpdGNoIChjbGstPmlkKSB7CisJY2FzZSAwOgorCQlhbWxwbXJlMSAmPSB+KDB4NyA8PCBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUU0X09GRlNFVCk7CisJCWFwcmIgJj0gfigweDEgPDwgTVhDX0NSTUFQX0FQUkJfU0RIQzFFTl9PRkZTRVQpOworCQlicmVhazsKKwljYXNlIDE6CisJCWFtbHBtcmUxICY9IH4oMHg3IDw8IE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTVfT0ZGU0VUKTsKKwkJYXByYiAmPSB+KDB4MSA8PCBNWENfQ1JNQVBfQVBSQl9TREhDMkVOX09GRlNFVCk7CisJCWJyZWFrOworCX0KKwlfX3Jhd193cml0ZWwoYW1scG1yZTEsIE1YQ19DUk1BUF9BTUxQTVJFMSk7CisJX19yYXdfd3JpdGVsKGFwcmIsIE1YQ19DUk1BUF9BUFJCKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgc2RoY19jbGtbXSA9IHsKKwl7CisJCS5pZCA9IDAsCisJCS5nZXRfcmF0ZSA9IGNsa19zZGhjX2dldF9yYXRlLAorCQkuZW5hYmxlID0gY2xrX3NkaGNfZW5hYmxlLAorCQkuZGlzYWJsZSA9IGNsa19zZGhjX2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAxLAorCQkuZ2V0X3JhdGUgPSBjbGtfc2RoY19nZXRfcmF0ZSwKKwkJLmVuYWJsZSA9IGNsa19zZGhjX2VuYWJsZSwKKwkJLmRpc2FibGUgPSBjbGtfc2RoY19kaXNhYmxlLAorCX0sCit9OworLyogc2RoY19jbGsgc3R1ZmYgZW5kICovCisKKy8qIHdkb2dfY2xrIHN0dWZmICovCitzdGF0aWMgc3RydWN0IGNsayB3ZG9nX2Nsa1tdID0geworCXsKKwkJLmlkID0gMCwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlX3JlZyA9IE1YQ19DUk1BUF9BTUxQTVJELAorCQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NSTUFQX0FNTFBNUkRfTUxQTUQ3X09GRlNFVCwKKwkJLmVuYWJsZSA9IF9jbGtfM2JpdF9lbmFibGUsCisJCS5kaXNhYmxlID0gX2Nsa18zYml0X2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAxLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGVfcmVnID0gTVhDX0NSTUFQX0FNTFBNUkQsCisJCS5lbmFibGVfc2hpZnQgPSBNWENfQ1JNQVBfQU1MUE1SRF9NTFBNRDNfT0ZGU0VULAorCQkuZW5hYmxlID0gX2Nsa18zYml0X2VuYWJsZSwKKwkJLmRpc2FibGUgPSBfY2xrXzNiaXRfZGlzYWJsZSwKKwl9LAorfTsKKy8qIHdkb2dfY2xrIHN0dWZmIGVuZCAqLworCisvKiBncHRfY2xrIHN0dWZmICovCitzdGF0aWMgc3RydWN0IGNsayBncHRfY2xrID0geworCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkuZW5hYmxlX3JlZyA9IE1YQ19DUk1BUF9BTUxQTVJDLAorCS5lbmFibGVfc2hpZnQgPSBNWENfQ1JNQVBfQU1MUE1SQ19NTFBNQzRfT0ZGU0VULAorCS5lbmFibGUgPSBfY2xrXzNiaXRfZW5hYmxlLAorCS5kaXNhYmxlID0gX2Nsa18zYml0X2Rpc2FibGUsCit9OworLyogZ3B0X2NsayBzdHVmZiBlbmQgKi8KKworLyogY3NwaV9jbGsgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNzcGlfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGVfcmVnID0gTVhDX0NSTUFQX0FNTFBNUkUyLAorCQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NSTUFQX0FNTFBNUkUyX01MUE1FMF9PRkZTRVQsCisJCS5lbmFibGUgPSBfY2xrXzNiaXRfZW5hYmxlLAorCQkuZGlzYWJsZSA9IF9jbGtfM2JpdF9kaXNhYmxlLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlX3JlZyA9IE1YQ19DUk1BUF9BTUxQTVJFMSwKKwkJLmVuYWJsZV9zaGlmdCA9IE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTZfT0ZGU0VULAorCQkuZW5hYmxlID0gX2Nsa18zYml0X2VuYWJsZSwKKwkJLmRpc2FibGUgPSBfY2xrXzNiaXRfZGlzYWJsZSwKKwl9LAorfTsKKy8qIGNzcGlfY2xrIHN0dWZmIGVuZCAqLworCisjZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKSBcCisJeyBcCisJCS5kZXZfaWQgPSBkLCBcCisJCS5jb25faWQgPSBuLCBcCisJCS5jbGsgPSAmYywgXAorCX0sCisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4wIiwgTlVMTCwgdWFydF9jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydF9jbGtbMV0pCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4yIiwgTlVMTCwgdWFydF9jbGtbMl0pCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjAiLCBOVUxMLCBzZGhjX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMSIsIE5VTEwsIHNkaGNfY2xrWzFdKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLXdkdC4wIiwgTlVMTCwgd2RvZ19jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjAiLCBOVUxMLCBjc3BpX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMSIsIE5VTEwsIGNzcGlfY2xrWzFdKQorfTsKKworaW50IF9faW5pdCBteGM5MTIzMV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpCit7CisJdm9pZCBfX2lvbWVtICpncHRfYmFzZTsKKwlpbnQgaTsKKworCWNraWhfcmF0ZSA9IGZyZWY7CisKKwl1c2JfY2xrLnBhcmVudCA9IGNsa191c2JfcGFyZW50KCZ1c2JfY2xrKTsKKwlzZGhjX2Nsa1swXS5wYXJlbnQgPSBjbGtfc2RoY19wYXJlbnQoJnNkaGNfY2xrWzBdKTsKKwlzZGhjX2Nsa1sxXS5wYXJlbnQgPSBjbGtfc2RoY19wYXJlbnQoJnNkaGNfY2xrWzFdKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCisJZ3B0X2Jhc2UgPSBNWEM5MTIzMV9JT19BRERSRVNTKE1YQzkxMjMxX0dQVDFfQkFTRV9BRERSKTsKKwlteGNfdGltZXJfaW5pdCgmZ3B0X2NsaywgZ3B0X2Jhc2UsIE1YQzkxMjMxX0lOVF9HUFQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2NybV9yZWdzLmggYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2NybV9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U0ZjU5MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvY3JtX3JlZ3MuaApAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA3IE1vdG9yb2xhLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9BUkNIX0FSTV9NQUNIX01YQzkxMjMxX0NSTV9SRUdTX0hfCisjZGVmaW5lIF9BUkNIX0FSTV9NQUNIX01YQzkxMjMxX0NSTV9SRUdTX0hfCisKKyNkZWZpbmUgQ0tJTF9DTEtfRlJFUQkJCTMyNzY4CisKKyNkZWZpbmUgTVhDX0NSTV9BUF9CQVNFCQkJTVhDOTEyMzFfSU9fQUREUkVTUyhNWEM5MTIzMV9DUk1fQVBfQkFTRV9BRERSKQorI2RlZmluZSBNWENfQ1JNX0NPTV9CQVNFCQlNWEM5MTIzMV9JT19BRERSRVNTKE1YQzkxMjMxX0NSTV9DT01fQkFTRV9BRERSKQorI2RlZmluZSBNWENfRFNNX0JBU0UJCQlNWEM5MTIzMV9JT19BRERSRVNTKE1YQzkxMjMxX0RTTV9CQVNFX0FERFIpCisjZGVmaW5lIE1YQ19QTEwwX0JBU0UJCQlNWEM5MTIzMV9JT19BRERSRVNTKE1YQzkxMjMxX1BMTDBfQkFTRV9BRERSKQorI2RlZmluZSBNWENfUExMMV9CQVNFCQkJTVhDOTEyMzFfSU9fQUREUkVTUyhNWEM5MTIzMV9QTEwxX0JBU0VfQUREUikKKyNkZWZpbmUgTVhDX1BMTDJfQkFTRQkJCU1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfUExMMl9CQVNFX0FERFIpCisjZGVmaW5lIE1YQ19DTEtDVExfQkFTRQkJCU1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfQ0xLQ1RMX0JBU0VfQUREUikKKworLyogUExMIFJlZ2lzdGVyIE9mZnNldHMgKi8KKyNkZWZpbmUgTVhDX1BMTF9EUF9DVEwJCQkweDAwCisjZGVmaW5lIE1YQ19QTExfRFBfQ09ORklHCQkweDA0CisjZGVmaW5lIE1YQ19QTExfRFBfT1AJCQkweDA4CisjZGVmaW5lIE1YQ19QTExfRFBfTUZECQkJMHgwQworI2RlZmluZSBNWENfUExMX0RQX01GTgkJCTB4MTAKKyNkZWZpbmUgTVhDX1BMTF9EUF9IRlNfT1AJCTB4MUMKKyNkZWZpbmUgTVhDX1BMTF9EUF9IRlNfTUZECQkweDIwCisjZGVmaW5lIE1YQ19QTExfRFBfSEZTX01GTgkJMHgyNAorCisvKiBQTEwgUmVnaXN0ZXIgQml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX0RQRENLMF8yX0VOCTB4MTAwMAorI2RlZmluZSBNWENfUExMX0RQX0NUTF9BREUJCTB4ODAwCisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX1JFRl9DTEtfRElWCTB4NDAwCisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX0hGU00JCTB4ODAKKyNkZWZpbmUgTVhDX1BMTF9EUF9DVExfUFJFCQkweDQwCisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX1VQRU4JCTB4MjAKKyNkZWZpbmUgTVhDX1BMTF9EUF9DVExfUlNUCQkweDEwCisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX1JDUAkJMHg4CisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX1BMTQkJMHg0CisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX0JSTTAJCTB4MgorI2RlZmluZSBNWENfUExMX0RQX0NUTF9MUkYJCTB4MQorCisjZGVmaW5lIE1YQ19QTExfRFBfT1BfTUZJX09GRlNFVAk0CisjZGVmaW5lIE1YQ19QTExfRFBfT1BfTUZJX01BU0sJCTB4RgorI2RlZmluZSBNWENfUExMX0RQX09QX1BERl9PRkZTRVQJMAorI2RlZmluZSBNWENfUExMX0RQX09QX1BERl9NQVNLCQkweEYKKworI2RlZmluZSBNWENfUExMX0RQX01GRF9PRkZTRVQJCTAKKyNkZWZpbmUgTVhDX1BMTF9EUF9NRkRfTUFTSwkJMHg3RkZGRkZGCisKKyNkZWZpbmUgTVhDX1BMTF9EUF9NRk5fT0ZGU0VUCQkwCisjZGVmaW5lIE1YQ19QTExfRFBfTUZOX01BU0sJCTB4N0ZGRkZGRgorCisvKiBDUk0gQVAgUmVnaXN0ZXIgT2Zmc2V0cyAqLworI2RlZmluZSBNWENfQ1JNQVBfQVNDU1IJCQkoTVhDX0NSTV9BUF9CQVNFICsgMHgwMCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FDRFIJCQkoTVhDX0NSTV9BUF9CQVNFICsgMHgwNCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMQkJKE1YQ19DUk1fQVBfQkFTRSArIDB4MDgpCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RFUjIJCShNWENfQ1JNX0FQX0JBU0UgKyAweDBDKQorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1IJCQkoTVhDX0NSTV9BUF9CQVNFICsgMHgxMCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FDQ0dDUgkJKE1YQ19DUk1fQVBfQkFTRSArIDB4MTQpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJBCQkoTVhDX0NSTV9BUF9CQVNFICsgMHgxOCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkIJCShNWENfQ1JNX0FQX0JBU0UgKyAweDFDKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQwkJKE1YQ19DUk1fQVBfQkFTRSArIDB4MjApCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJECQkoTVhDX0NSTV9BUF9CQVNFICsgMHgyNCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUxCQkoTVhDX0NSTV9BUF9CQVNFICsgMHgyOCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUyCQkoTVhDX0NSTV9BUF9CQVNFICsgMHgyQykKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkYJCShNWENfQ1JNX0FQX0JBU0UgKyAweDMwKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRwkJKE1YQ19DUk1fQVBfQkFTRSArIDB4MzQpCisjZGVmaW5lIE1YQ19DUk1BUF9BUEdDUgkJCShNWENfQ1JNX0FQX0JBU0UgKyAweDM4KQorI2RlZmluZSBNWENfQ1JNQVBfQUNTUgkJCShNWENfQ1JNX0FQX0JBU0UgKyAweDNDKQorI2RlZmluZSBNWENfQ1JNQVBfQURDUgkJCShNWENfQ1JNX0FQX0JBU0UgKyAweDQwKQorI2RlZmluZSBNWENfQ1JNQVBfQUNSCQkJKE1YQ19DUk1fQVBfQkFTRSArIDB4NDQpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUNSCQkJKE1YQ19DUk1fQVBfQkFTRSArIDB4NDgpCisjZGVmaW5lIE1YQ19DUk1BUF9BUENSCQkJKE1YQ19DUk1fQVBfQkFTRSArIDB4NEMpCisjZGVmaW5lIE1YQ19DUk1BUF9BTU9SQQkJCShNWENfQ1JNX0FQX0JBU0UgKyAweDUwKQorI2RlZmluZSBNWENfQ1JNQVBfQU1PUkIJCQkoTVhDX0NSTV9BUF9CQVNFICsgMHg1NCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FHUFIJCQkoTVhDX0NSTV9BUF9CQVNFICsgMHg1OCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkEJCQkoTVhDX0NSTV9BUF9CQVNFICsgMHg1QykKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkIJCQkoTVhDX0NSTV9BUF9CQVNFICsgMHg2MCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FQT1IJCQkoTVhDX0NSTV9BUF9CQVNFICsgMHg2NCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FERk1SCQkJKE1YQ19DUk1fQVBfQkFTRSArIDB4NjgpCisKKy8qIENSTSBBUCBSZWdpc3RlciBCaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVhDX0NSTUFQX0FTQ1NSX0NSUwkJCTB4MTAwMDAKKyNkZWZpbmUgTVhDX0NSTUFQX0FTQ1NSX0FQX1BBVERJVjJfT0ZGU0VUCTE1CisjZGVmaW5lIE1YQ19DUk1BUF9BU0NTUl9BUF9QQVRSRUZfRElWMgkJMHg4MDAwCisjZGVmaW5lIE1YQ19DUk1BUF9BU0NTUl9VU0JTRUxfT0ZGU0VUCQkxMworI2RlZmluZSBNWENfQ1JNQVBfQVNDU1JfVVNCU0VMX01BU0sJCSgweDMgPDwgMTMpCisjZGVmaW5lIE1YQ19DUk1BUF9BU0NTUl9DU0lTRUxfT0ZGU0VUCQkxMQorI2RlZmluZSBNWENfQ1JNQVBfQVNDU1JfQ1NJU0VMX01BU0sJCSgweDMgPDwgMTEpCisjZGVmaW5lIE1YQ19DUk1BUF9BU0NTUl9TU0kyU0VMX09GRlNFVAkJNworI2RlZmluZSBNWENfQ1JNQVBfQVNDU1JfU1NJMlNFTF9NQVNLCQkoMHgzIDw8IDcpCisjZGVmaW5lIE1YQ19DUk1BUF9BU0NTUl9TU0kxU0VMX09GRlNFVAkJNQorI2RlZmluZSBNWENfQ1JNQVBfQVNDU1JfU1NJMVNFTF9NQVNLCQkoMHgzIDw8IDUpCisjZGVmaW5lIE1YQ19DUk1BUF9BU0NTUl9BUFNFTF9PRkZTRVQJCTMKKyNkZWZpbmUgTVhDX0NSTUFQX0FTQ1NSX0FQU0VMX01BU0sJCSgweDMgPDwgMykKKyNkZWZpbmUgTVhDX0NSTUFQX0FTQ1NSX0FQX1BBVERJVjFfT0ZGU0VUCTIKKyNkZWZpbmUgTVhDX0NSTUFQX0FTQ1NSX0FQX1BBVFJFRl9ESVYxCQkweDQKKyNkZWZpbmUgTVhDX0NSTUFQX0FTQ1NSX0FQSVNFTAkJCTB4MQorCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RSX0FSTURJVl9PRkZTRVQJCTgKKyNkZWZpbmUgTVhDX0NSTUFQX0FDRFJfQVJNRElWX01BU0sJCSgweEYgPDwgOCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FDRFJfQUhCRElWX09GRlNFVAkJNAorI2RlZmluZSBNWENfQ1JNQVBfQUNEUl9BSEJESVZfTUFTSwkJKDB4RiA8PCA0KQorI2RlZmluZSBNWENfQ1JNQVBfQUNEUl9JUERJVl9PRkZTRVQJCTAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDRFJfSVBESVZfTUFTSwkJMHhGCisKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMV9DU0lFTl9PRkZTRVQJCTMwCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RFUjFfQ1NJRElWX09GRlNFVAkJMjQKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMV9DU0lESVZfTUFTSwkJKDB4M0YgPDwgMjQpCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RFUjFfU1NJMkVOX09GRlNFVAkJMTQKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMV9TU0kyRElWX09GRlNFVAkJOAorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIxX1NTSTJESVZfTUFTSwkJKDB4M0YgPDwgOCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMV9TU0kxRU5fT0ZGU0VUCQk2CisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RFUjFfU1NJMURJVl9PRkZTRVQJCTAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMV9TU0kxRElWX01BU0sJCTB4M0YKKworI2RlZmluZSBNWENfQ1JNQVBfQUNERVIyX0NSQ1RfQ0xLX0RJVl9PRkZTRVQJMjQKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMl9DUkNUX0NMS19ESVZfTUFTSwkoMHg3IDw8IDI0KQorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIyX05GQ0VOX09GRlNFVAkJMjAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMl9ORkNESVZfT0ZGU0VUCQkxNgorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIyX05GQ0RJVl9NQVNLCQkoMHhGIDw8IDE2KQorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIyX1VTQkVOX09GRlNFVAkJMTIKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMl9VU0JESVZfT0ZGU0VUCQk4CisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RFUjJfVVNCRElWX01BU0sJCSgweEYgPDwgOCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMl9CQVVEX0lTRUxfT0ZGU0VUCTUKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMl9CQVVEX0lTRUxfTUFTSwkJKDB4MyA8PCA1KQorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIyX0JBVURESVZfT0ZGU0VUCQkwCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RFUjJfQkFVRERJVl9NQVNLCQkweEYKKworI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQV9NTFBNQTdfT0ZGU0VUCQkyMgorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQV9NTFBNQTdfTUFTSwkJKDB4NyA8PCAyMikKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkFfTUxQTUE2X09GRlNFVAkJMTkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkFfTUxQTUE2X01BU0sJCSgweDcgPDwgMTkpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJBX01MUE1BNF9PRkZTRVQJCTEyCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJBX01MUE1BNF9NQVNLCQkoMHg3IDw8IDEyKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQV9NTFBNQTNfT0ZGU0VUCQk5CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJBX01MUE1BM19NQVNLCQkoMHg3IDw8IDkpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJBX01MUE1BMl9PRkZTRVQJCTYKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkFfTUxQTUEyX01BU0sJCSgweDcgPDwgNikKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkFfTUxQTUExX09GRlNFVAkJMworI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQV9NTFBNQTFfTUFTSwkJKDB4NyA8PCAzKQorCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJCX01MUE1CMF9PRkZTRVQJCTAKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkJfTUxQTUIwX01BU0sJCTB4NworCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJDX01MUE1DOV9PRkZTRVQJCTI4CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJDX01MUE1DOV9NQVNLCQkoMHg3IDw8IDI4KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQ19NTFBNQzdfT0ZGU0VUCQkyMgorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQ19NTFBNQzdfTUFTSwkJKDB4NyA8PCAyMikKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkNfTUxQTUM1X09GRlNFVAkJMTYKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkNfTUxQTUM1X01BU0sJCSgweDcgPDwgMTYpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJDX01MUE1DNF9PRkZTRVQJCTEyCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJDX01MUE1DNF9NQVNLCQkoMHg3IDw8IDEyKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQ19NTFBNQzNfT0ZGU0VUCQk5CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJDX01MUE1DM19NQVNLCQkoMHg3IDw8IDkpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJDX01MUE1DMl9PRkZTRVQJCTYKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkNfTUxQTUMyX01BU0sJCSgweDcgPDwgNikKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkNfTUxQTUMxX09GRlNFVAkJMworI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQ19NTFBNQzFfTUFTSwkJKDB4NyA8PCAzKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQ19NTFBNQzBfT0ZGU0VUCQkwCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJDX01MUE1DMF9NQVNLCQkweDcKKworI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRF9NTFBNRDdfT0ZGU0VUCQkyMgorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRF9NTFBNRDdfTUFTSwkJKDB4NyA8PCAyMikKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkRfTUxQTUQ0X09GRlNFVAkJMTIKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkRfTUxQTUQ0X01BU0sJCSgweDcgPDwgMTIpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJEX01MUE1EM19PRkZTRVQJCTkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkRfTUxQTUQzX01BU0sJCSgweDcgPDwgOSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkRfTUxQTUQyX09GRlNFVAkJNgorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRF9NTFBNRDJfTUFTSwkJKDB4NyA8PCA2KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRF9NTFBNRDBfT0ZGU0VUCQkwCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJEX01MUE1EMF9NQVNLCQkweDcKKworI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUU5X09GRlNFVAkyOAorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUU5X01BU0sJCSgweDcgPDwgMjgpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRThfT0ZGU0VUCTI1CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRThfTUFTSwkJKDB4NyA8PCAyNSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FN19PRkZTRVQJMjIKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FN19NQVNLCQkoMHg3IDw8IDIyKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUU2X09GRlNFVAkxOQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUU2X01BU0sJCSgweDcgPDwgMTkpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTVfT0ZGU0VUCTE2CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTVfTUFTSwkJKDB4NyA8PCAxNikKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FNF9PRkZTRVQJMTIKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FNF9NQVNLCQkoMHg3IDw8IDEyKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUUzX09GRlNFVAk5CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTNfTUFTSwkJKDB4NyA8PCA5KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUUyX09GRlNFVAk2CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTJfTUFTSwkJKDB4NyA8PCA2KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUUxX09GRlNFVAkzCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTFfTUFTSwkJKDB4NyA8PCAzKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUUwX09GRlNFVAkwCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTBfTUFTSwkJMHg3CisKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUyX01MUE1FMF9PRkZTRVQJMAorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTJfTUxQTUUwX01BU0sJCTB4NworCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJGX01MUE1GNl9PRkZTRVQJCTE5CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJGX01MUE1GNl9NQVNLCQkoMHg3IDw8IDE5KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRl9NTFBNRjVfT0ZGU0VUCQkxNgorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRl9NTFBNRjVfTUFTSwkJKDB4NyA8PCAxNikKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkZfTUxQTUYzX09GRlNFVAkJOQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRl9NTFBNRjNfTUFTSwkJKDB4NyA8PCA5KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRl9NTFBNRjJfT0ZGU0VUCQk2CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJGX01MUE1GMl9NQVNLCQkoMHg3IDw8IDYpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJGX01MUE1GMV9PRkZTRVQJCTMKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkZfTUxQTUYxX01BU0sJCSgweDcgPDwgMykKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkZfTUxQTUYwX09GRlNFVAkJMAorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRl9NTFBNRjBfTUFTSwkJKDB4NyA8PCAwKQorCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHX01MUE1HOV9PRkZTRVQJCTI4CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHX01MUE1HOV9NQVNLCQkoMHg3IDw8IDI4KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SR19NTFBNRzdfT0ZGU0VUCQkyMgorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SR19NTFBNRzdfTUFTSwkJKDB4NyA8PCAyMikKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkdfTUxQTUc2X09GRlNFVAkJMTkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkdfTUxQTUc2X01BU0sJCSgweDcgPDwgMTkpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHX01MUE1HNV9PRkZTRVQJCTE2CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHX01MUE1HNV9NQVNLCQkoMHg3IDw8IDE2KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SR19NTFBNRzRfT0ZGU0VUCQkxMgorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SR19NTFBNRzRfTUFTSwkJKDB4NyA8PCAxMikKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkdfTUxQTUczX09GRlNFVAkJOQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SR19NTFBNRzNfTUFTSwkJKDB4NyA8PCA5KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SR19NTFBNRzJfT0ZGU0VUCQk2CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHX01MUE1HMl9NQVNLCQkoMHg3IDw8IDYpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHX01MUE1HMV9PRkZTRVQJCTMKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkdfTUxQTUcxX01BU0sJCSgweDcgPDwgMykKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkdfTUxQTUcwX09GRlNFVAkJMAorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SR19NTFBNRzBfTUFTSwkJMHg3CisKKyNkZWZpbmUgTVhDX0NSTUFQX0FHUFJfSVBVUEFEX09GRlNFVAkJMjAKKyNkZWZpbmUgTVhDX0NSTUFQX0FHUFJfSVBVUEFEX01BU0sJCSgweDcgPDwgMjApCisKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkFfRUwxVEVOX09GRlNFVAkJMjkKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkFfU0lNRU5fT0ZGU0VUCQkyNAorI2RlZmluZSBNWENfQ1JNQVBfQVBSQV9VQVJUM0RJVl9PRkZTRVQJCTE3CisjZGVmaW5lIE1YQ19DUk1BUF9BUFJBX1VBUlQzRElWX01BU0sJCSgweEYgPDwgMTcpCisjZGVmaW5lIE1YQ19DUk1BUF9BUFJBX1VBUlQzRU5fT0ZGU0VUCQkxNgorI2RlZmluZSBNWENfQ1JNQVBfQVBSQV9TQUhBUkFfRElWMl9DTEtFTl9PRkZTRVQJMTQKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkFfTVFTUElFTl9PRkZTRVQJCTEzCisjZGVmaW5lIE1YQ19DUk1BUF9BUFJBX1VBUlQyRU5fT0ZGU0VUCQk4CisjZGVmaW5lIE1YQ19DUk1BUF9BUFJBX1VBUlQxRU5fT0ZGU0VUCQkwCisKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkJfU0RIQzJfSVNFTF9PRkZTRVQJMTMKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkJfU0RIQzJfSVNFTF9NQVNLCQkoMHg3IDw8IDEzKQorI2RlZmluZSBNWENfQ1JNQVBfQVBSQl9TREhDMl9ESVZfT0ZGU0VUCQk5CisjZGVmaW5lIE1YQ19DUk1BUF9BUFJCX1NESEMyX0RJVl9NQVNLCQkoMHhGIDw8IDkpCisjZGVmaW5lIE1YQ19DUk1BUF9BUFJCX1NESEMyRU5fT0ZGU0VUCQk4CisjZGVmaW5lIE1YQ19DUk1BUF9BUFJCX1NESEMxX0lTRUxfT0ZGU0VUCTUKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkJfU0RIQzFfSVNFTF9NQVNLCQkoMHg3IDw8IDUpCisjZGVmaW5lIE1YQ19DUk1BUF9BUFJCX1NESEMxX0RJVl9PRkZTRVQJCTEKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkJfU0RIQzFfRElWX01BU0sJCSgweEYgPDwgMSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkJfU0RIQzFFTl9PRkZTRVQJCTAKKworI2RlZmluZSBNWENfQ1JNQVBfQUNTUl9BRFNfT0ZGU0VUCQk4CisjZGVmaW5lIE1YQ19DUk1BUF9BQ1NSX0FEUwkJCSgweDEgPDwgOCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FDU1JfQUNTCQkJMHgxCisKKyNkZWZpbmUgTVhDX0NSTUFQX0FEQ1JfTEZERl8wCQkJKDB4MCA8PCA4KQorI2RlZmluZSBNWENfQ1JNQVBfQURDUl9MRkRGXzIJCQkoMHgxIDw8IDgpCisjZGVmaW5lIE1YQ19DUk1BUF9BRENSX0xGREZfNAkJCSgweDIgPDwgOCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FEQ1JfTEZERl84CQkJKDB4MyA8PCA4KQorI2RlZmluZSBNWENfQ1JNQVBfQURDUl9MRkRGX09GRlNFVAkJOAorI2RlZmluZSBNWENfQ1JNQVBfQURDUl9MRkRGX01BU0sJCSgweDMgPDwgOCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FEQ1JfQUxUX1BMTAkJCTB4ODAKKyNkZWZpbmUgTVhDX0NSTUFQX0FEQ1JfREZTX0RJVkVOCQkweDIwCisjZGVmaW5lIE1YQ19DUk1BUF9BRENSX0RJVl9CWVAJCQkweDIKKyNkZWZpbmUgTVhDX0NSTUFQX0FEQ1JfVlNUQVQJCQkweDgKKyNkZWZpbmUgTVhDX0NSTUFQX0FEQ1JfVFNUQVQJCQkweDEwCisjZGVmaW5lIE1YQ19DUk1BUF9BRENSX0RWRlNfVkNUUkwJCTB4MTAKKyNkZWZpbmUgTVhDX0NSTUFQX0FEQ1JfQ0xLX09OCQkJMHg0MAorCisjZGVmaW5lIE1YQ19DUk1BUF9BREZNUl9GQ19PRkZTRVQJCTE2CisjZGVmaW5lIE1YQ19DUk1BUF9BREZNUl9GQ19NQVNLCQkJKDB4MUYgPDwgMTYpCisjZGVmaW5lIE1YQ19DUk1BUF9BREZNUl9NRl9PRkZTRVQJCTEKKyNkZWZpbmUgTVhDX0NSTUFQX0FERk1SX01GX01BU0sJCQkoMHgzRkYgPDwgMSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FERk1SX0RGTV9DTEtfUkVBRFkJCTB4MQorI2RlZmluZSBNWENfQ1JNQVBfQURGTVJfREZNX1BXUl9ET1dOCQkweDgwMDAKKworI2RlZmluZSBNWENfQ1JNQVBfQUNSX0NLT0hTX0hJR0gJCSgxIDw8IDE4KQorI2RlZmluZSBNWENfQ1JNQVBfQUNSX0NLT1NfSElHSAkJCSgxIDw8IDE2KQorI2RlZmluZSBNWENfQ1JNQVBfQUNSX0NLT0hTX01BU0sJCSgweDcgPDwgMTIpCisjZGVmaW5lIE1YQ19DUk1BUF9BQ1JfQ0tPSEQJCQkoMSA8PCAxMSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FDUl9DS09IRElWX01BU0sJCSgweEYgPDwgOCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FDUl9DS09IRElWX09GRlNFVAkJOAorI2RlZmluZSBNWENfQ1JNQVBfQUNSX0NLT0QJCQkoMSA8PCA3KQorI2RlZmluZSBNWENfQ1JNQVBfQUNSX0NLT1NfTUFTSwkJCSgweDcgPDwgNCkKKworLyogQVAgV2FybSByZXNldCAqLworI2RlZmluZSBNWENfQ1JNQVBfQU1DUl9TV19BUAkJCSgxIDw8IDE0KQorCisvKiBCaXQgZGVmaW5pdGlvbnMgb2YgQUNHQ1IgaW4gQ1JNX0FQIGZvciB0cmVlIGxldmVsIGNsb2NrIGdhdGluZyAqLworI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHMF9TVE9QX1dBSVQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzBfU1RPUAkJMHgwMDAwMDAwMworI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHMF9SVU4JCTB4MDAwMDAwMDcKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzBfRElTQUJMRUQJCTB4MDAwMDAwMDAKKworI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHMV9TVE9QX1dBSVQJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzFfU1RPUAkJMHgwMDAwMDAxOAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHMV9SVU4JCTB4MDAwMDAwMzgKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzFfRElTQUJMRUQJCTB4MDAwMDAwMDAKKworI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHMl9TVE9QX1dBSVQJCTB4MDAwMDAwNDAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzJfU1RPUAkJMHgwMDAwMDBDMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHMl9SVU4JCTB4MDAwMDAxQzAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzJfRElTQUJMRUQJCTB4MDAwMDAwMDAKKworI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHM19TVE9QX1dBSVQJCTB4MDAwMDAyMDAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzNfU1RPUAkJMHgwMDAwMDYwMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHM19SVU4JCTB4MDAwMDBFMDAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzNfRElTQUJMRUQJCTB4MDAwMDAwMDAKKworI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHNF9TVE9QX1dBSVQJCTB4MDAwMDEwMDAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzRfU1RPUAkJMHgwMDAwMzAwMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHNF9SVU4JCTB4MDAwMDcwMDAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzRfRElTQUJMRUQJCTB4MDAwMDAwMDAKKworI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHNV9TVE9QX1dBSVQJCTB4MDAwMTAwMDAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzVfU1RPUAkJMHgwMDAzMDAwMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHNV9SVU4JCTB4MDAwNzAwMDAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzVfRElTQUJMRUQJCTB4MDAwMDAwMDAKKworI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHNl9TVE9QX1dBSVQJCTB4MDAwODAwMDAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzZfU1RPUAkJMHgwMDE4MDAwMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHNl9SVU4JCTB4MDAzODAwMDAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDR0NSX0FDRzZfRElTQUJMRUQJCTB4MDAwMDAwMDAKKworI2RlZmluZSBOVU1fR0FURV9DVFJMCQkJCTYKKworLyogQ1JNIENPTSBSZWdpc3RlciBPZmZzZXRzICovCisjZGVmaW5lIE1YQ19DUk1DT01fQ1NDUgkJCQkoTVhDX0NSTV9DT01fQkFTRSArIDB4MEMpCisjZGVmaW5lIE1YQ19DUk1DT01fQ0NDUgkJCQkoTVhDX0NSTV9DT01fQkFTRSArIDB4MTApCisKKy8qIENSTSBDT00gQml0IERlZmluaXRpb25zICovCisjZGVmaW5lIE1YQ19DUk1DT01fQ1NDUl9QUEQxCQkJMHgwODAwMDAwMAorI2RlZmluZSBNWENfQ1JNQ09NX0NTQ1JfQ0tPSFNFTAkJCSgxIDw8IDE4KQorI2RlZmluZSBNWENfQ1JNQ09NX0NTQ1JfQ0tPU0VMCQkJKDEgPDwgMTcpCisjZGVmaW5lIE1YQ19DUk1DT01fQ0NDUl9DQ19ESVZfT0ZGU0VUCQk4CisjZGVmaW5lIE1YQ19DUk1DT01fQ0NDUl9DQ19ESVZfTUFTSwkJKDB4MUYgPDwgOCkKKyNkZWZpbmUgTVhDX0NSTUNPTV9DQ0NSX0NDX1NFTF9PRkZTRVQJCTAKKyNkZWZpbmUgTVhDX0NSTUNPTV9DQ0NSX0NDX1NFTF9NQVNLCQkweDMKKworLyogRFNNIFJlZ2lzdGVyIE9mZnNldHMgKi8KKyNkZWZpbmUgTVhDX0RTTV9TTEVFUF9USU1FCQkJKE1YQ19EU01fQkFTRSArIDB4MGMpCisjZGVmaW5lIE1YQ19EU01fQ09OVFJPTDAJCQkoTVhDX0RTTV9CQVNFICsgMHgyMCkKKyNkZWZpbmUgTVhDX0RTTV9DT05UUk9MMQkJCShNWENfRFNNX0JBU0UgKyAweDI0KQorI2RlZmluZSBNWENfRFNNX0NUUkVOCQkJCShNWENfRFNNX0JBU0UgKyAweDI4KQorI2RlZmluZSBNWENfRFNNX1dBUk1fUEVSCQkJKE1YQ19EU01fQkFTRSArIDB4NDApCisjZGVmaW5lIE1YQ19EU01fTE9DS19QRVIJCQkoTVhDX0RTTV9CQVNFICsgMHg0NCkKKyNkZWZpbmUgTVhDX0RTTV9NR1BFUgkJCQkoTVhDX0RTTV9CQVNFICsgMHg0YykKKyNkZWZpbmUgTVhDX0RTTV9DUk1fQ09OVFJPTAkJCShNWENfRFNNX0JBU0UgKyAweDUwKQorCisvKiBCaXQgZGVmaW5pdGlvbnMgb2YgdmFyaW91cyByZWdpc3RlcnMgaW4gRFNNICovCisjZGVmaW5lIE1YQ19EU01fQ1JNX0NUUkxfRFZGU19CWVAJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTVhDX0RTTV9DUk1fQ1RSTF9EVkZTX1ZDVFJMCQkweDAwMDAwMDA0CisjZGVmaW5lIE1YQ19EU01fQ1JNX0NUUkxfTFBNRDEJCQkweDAwMDAwMDAyCisjZGVmaW5lIE1YQ19EU01fQ1JNX0NUUkxfTFBNRDAJCQkweDAwMDAwMDAxCisjZGVmaW5lIE1YQ19EU01fQ1JNX0NUUkxfTFBNRF9TVE9QX01PREUJCTB4MDAwMDAwMDAKKyNkZWZpbmUgTVhDX0RTTV9DUk1fQ1RSTF9MUE1EX1dBSVRfTU9ERQkJMHgwMDAwMDAwMQorI2RlZmluZSBNWENfRFNNX0NSTV9DVFJMX0xQTURfUlVOX01PREUJCTB4MDAwMDAwMDMKKyNkZWZpbmUgTVhDX0RTTV9DT05UUk9MMF9TVEJZX0NPTU1JVF9FTgkJMHgwMDAwMDIwMAorI2RlZmluZSBNWENfRFNNX0NPTlRST0wwX01TVFJfRU4JCTB4MDAwMDAwMDEKKyNkZWZpbmUgTVhDX0RTTV9DT05UUk9MMF9SRVNUQVJUCQkweDAwMDAwMDEwCisvKiBDb3VudGVyIEJsb2NrIHJlc2V0ICovCisjZGVmaW5lIE1YQ19EU01fQ09OVFJPTDFfQ0JfUlNUCQkJMHgwMDAwMDAwMgorLyogU3RhdGUgTWFjaGluZSByZXNldCAqLworI2RlZmluZSBNWENfRFNNX0NPTlRST0wxX1NNX1JTVAkJCTB4MDAwMDAwMDQKKy8qIEJpdCBuZWVkZWQgdG8gcmVzZXQgY291bnRlciBibG9jayAqLworI2RlZmluZSBNWENfQ09OVFJPTDFfUlNUX0NOVDMyCQkJMHgwMDAwMDAwOAorI2RlZmluZSBNWENfRFNNX0NPTlRST0wxX1JTVF9DTlQzMl9FTgkJMHgwMDAwMDgwMAorI2RlZmluZSBNWENfRFNNX0NPTlRST0wxX1NMRUVQCQkJMHgwMDAwMDEwMAorI2RlZmluZSBNWENfRFNNX0NPTlRST0wxX1dBS0VVUF9ESVNBQkxFCQkweDAwMDA0MDAwCisjZGVmaW5lIE1YQ19EU01fQ1RSRU5fQ05UMzIJCQkweDAwMDAwMDAxCisKKy8qIE1hZ2ljIEZpeCBlbmFibGUgYml0ICovCisjZGVmaW5lIE1YQ19EU01fTUdQRVJfRU5fTUdGWAkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgTVhDX0RTTV9NR1BFUl9QRVJfTUFTSwkJCTB4MDAwMDAzRkYKKyNkZWZpbmUgTVhDX0RTTV9NR1BFUl9QRVIobikJCQkoTVhDX0RTTV9NR1BFUl9QRVJfTUFTSyAmIG4pCisKKy8qIEFkZHJlc3Mgb2Zmc2V0cyBvZiB0aGUgQ0xLQ1RMIHJlZ2lzdGVycyAqLworI2RlZmluZSBNWENfQ0xLQ1RMX0dQX0NUUkwJKE1YQ19DTEtDVExfQkFTRSArIDB4MDApCisjZGVmaW5lIE1YQ19DTEtDVExfR1BfU0VSCShNWENfQ0xLQ1RMX0JBU0UgKyAweDA0KQorI2RlZmluZSBNWENfQ0xLQ1RMX0dQX0NFUgkoTVhDX0NMS0NUTF9CQVNFICsgMHgwOCkKKworI2VuZGlmIC8qIF9BUkNIX0FSTV9NQUNIX01YQzkxMjMxX0NSTV9SRUdTX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1M2JkOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2RldmljZXMuYwpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IFNhc2NoYSBIYXVlciwga2VybmVsQHBlbmd1dHJvbml4LmRlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MFtdID0geworCXsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfVUFSVDFfQkFTRV9BRERSLAorCQkuZW5kID0gTVhDOTEyMzFfVUFSVDFfQkFTRV9BRERSICsgMHgwQjUsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfSU5UX1VBUlQxX1JYLAorCQkuZW5kID0gTVhDOTEyMzFfSU5UX1VBUlQxX1JYLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQzkxMjMxX0lOVF9VQVJUMV9UWCwKKwkJLmVuZCA9IE1YQzkxMjMxX0lOVF9VQVJUMV9UWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkuc3RhcnQgPSBNWEM5MTIzMV9JTlRfVUFSVDFfTUlOVCwKKwkJLmVuZCA9IE1YQzkxMjMxX0lOVF9VQVJUMV9NSU5ULAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UwID0geworCS5uYW1lID0gImlteC11YXJ0IiwKKwkuaWQgPSAwLAorCS5yZXNvdXJjZSA9IHVhcnQwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0MCksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQxW10gPSB7CisJeworCQkuc3RhcnQgPSBNWEM5MTIzMV9VQVJUMl9CQVNFX0FERFIsCisJCS5lbmQgPSBNWEM5MTIzMV9VQVJUMl9CQVNFX0FERFIgKyAweDBCNSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWEM5MTIzMV9JTlRfVUFSVDJfUlgsCisJCS5lbmQgPSBNWEM5MTIzMV9JTlRfVUFSVDJfUlgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfSU5UX1VBUlQyX1RYLAorCQkuZW5kID0gTVhDOTEyMzFfSU5UX1VBUlQyX1RYLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQzkxMjMxX0lOVF9VQVJUMl9NSU5ULAorCQkuZW5kID0gTVhDOTEyMzFfSU5UX1VBUlQyX01JTlQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTEgPSB7CisJLm5hbWUgPSAiaW14LXVhcnQiLAorCS5pZCA9IDEsCisJLnJlc291cmNlID0gdWFydDEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVhcnQxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDJbXSA9IHsKKwl7CisJCS5zdGFydCA9IE1YQzkxMjMxX1VBUlQzX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YQzkxMjMxX1VBUlQzX0JBU0VfQUREUiArIDB4MEI1LAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQzkxMjMxX0lOVF9VQVJUM19SWCwKKwkJLmVuZCA9IE1YQzkxMjMxX0lOVF9VQVJUM19SWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkuc3RhcnQgPSBNWEM5MTIzMV9JTlRfVUFSVDNfVFgsCisJCS5lbmQgPSBNWEM5MTIzMV9JTlRfVUFSVDNfVFgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfSU5UX1VBUlQzX01JTlQsCisJCS5lbmQgPSBNWEM5MTIzMV9JTlRfVUFSVDNfTUlOVCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UyID0geworCS5uYW1lID0gImlteC11YXJ0IiwKKwkuaWQgPSAyLAorCS5yZXNvdXJjZSA9IHVhcnQyLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0MiksCit9OworCisvKiBHUElPIHBvcnQgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBteGNfZ3Bpb19wb3J0c1tdID0geworCVswXSA9IHsKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby0wIiwKKwkJLmJhc2UgPSBNWEM5MTIzMV9JT19BRERSRVNTKE1YQzkxMjMxX0dQSU8xX0FQX0JBU0VfQUREUiksCisJCS5pcnEgPSBNWEM5MTIzMV9JTlRfR1BJTzEsCisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCwKKwl9LAorCVsxXSA9IHsKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby0xIiwKKwkJLmJhc2UgPSBNWEM5MTIzMV9JT19BRERSRVNTKE1YQzkxMjMxX0dQSU8yX0FQX0JBU0VfQUREUiksCisJCS5pcnEgPSBNWEM5MTIzMV9JTlRfR1BJTzIsCisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDMyLAorCX0sCisJWzJdID0geworCQkuY2hpcC5sYWJlbCA9ICJncGlvLTIiLAorCQkuYmFzZSA9IE1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfR1BJTzNfQVBfQkFTRV9BRERSKSwKKwkJLmlycSA9IE1YQzkxMjMxX0lOVF9HUElPMywKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQsCisJfSwKKwlbM10gPSB7CisJCS5jaGlwLmxhYmVsID0gImdwaW8tMyIsCisJCS5iYXNlID0gTVhDOTEyMzFfSU9fQUREUkVTUyhNWEM5MTIzMV9HUElPNF9TSF9CQVNFX0FERFIpLAorCQkuaXJxID0gTVhDOTEyMzFfSU5UX0dQSU80LAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyA5NiwKKwl9LAorfTsKKworaW50IF9faW5pdCBteGNfcmVnaXN0ZXJfZ3Bpb3Modm9pZCkKK3sKKwlyZXR1cm4gbXhjX2dwaW9faW5pdChteGNfZ3Bpb19wb3J0cywgQVJSQVlfU0laRShteGNfZ3Bpb19wb3J0cykpOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19uYW5kX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gTVhDOTEyMzFfTkZDX0JBU0VfQUREUiwKKwkJLmVuZAk9IE1YQzkxMjMxX05GQ19CQVNFX0FERFIgKyAweGZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwl9LCB7CisJCS5zdGFydAk9IE1YQzkxMjMxX0lOVF9OQU5ERkMsCisJCS5lbmQJPSBNWEM5MTIzMV9JTlRfTkFOREZDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19uYW5kX2RldmljZSA9IHsKKwkubmFtZSA9ICJteGNfbmFuZCIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX25hbmRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfbmFuZF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IE1YQzkxMjMxX01NQ19TREhDMV9CQVNFX0FERFIsCisJCS5lbmQgPSBNWEM5MTIzMV9NTUNfU0RIQzFfQkFTRV9BRERSICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWEM5MTIzMV9JTlRfTU1DX1NESEMxLAorCQkuZW5kID0gTVhDOTEyMzFfSU5UX01NQ19TREhDMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NkaGMxX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfTU1DX1NESEMyX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YQzkxMjMxX01NQ19TREhDMl9CQVNFX0FERFIgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQzkxMjMxX0lOVF9NTUNfU0RIQzIsCisJCS5lbmQgPSBNWEM5MTIzMV9JTlRfTU1DX1NESEMyLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UwID0geworCS5uYW1lID0gIm14Yy1tbWMiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19zZGhjMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19zZGhjMF9yZXNvdXJjZXMsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZTEgPSB7CisJLm5hbWUgPSAibXhjLW1tYyIsCisJLmlkID0gMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NkaGMxX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX3NkaGMxX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2NzcGkwX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfQ1NQSTFfQkFTRV9BRERSLAorCQkuZW5kID0gTVhDOTEyMzFfQ1NQSTFfQkFTRV9BRERSICsgMHgyMCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWEM5MTIzMV9JTlRfQ1NQSTEsCisJCS5lbmQgPSBNWEM5MTIzMV9JTlRfQ1NQSTEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19jc3BpX2RldmljZTAgPSB7CisJLm5hbWUgPSAic3BpX2lteCIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2NzcGkwX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX2NzcGkwX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2NzcGkxX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfQ1NQSTJfQkFTRV9BRERSLAorCQkuZW5kID0gTVhDOTEyMzFfQ1NQSTJfQkFTRV9BRERSICsgMHgyMCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWEM5MTIzMV9JTlRfQ1NQSTIsCisJCS5lbmQgPSBNWEM5MTIzMV9JTlRfQ1NQSTIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19jc3BpX2RldmljZTEgPSB7CisJLm5hbWUgPSAic3BpX2lteCIsCisJLmlkID0gMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2NzcGkxX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX2NzcGkxX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3dkb2cwX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfV0RPRzFfQkFTRV9BRERSLAorCQkuZW5kID0gTVhDOTEyMzFfV0RPRzFfQkFTRV9BRERSICsgMHgxMCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3dkb2dfZGV2aWNlMCA9IHsKKwkubmFtZSA9ICJteGMtd2R0IiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfd2RvZzBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfd2RvZzBfcmVzb3VyY2VzLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9kZXZpY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhMjEzNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvZGV2aWNlcy5oCkBAIC0wLDAgKzEsMTMgQEAKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UxOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMjsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX25hbmRfZGV2aWNlOworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NkaGNfZGV2aWNlMTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2NzcGlfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19jc3BpX2RldmljZTE7CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193ZG9nX2RldmljZTA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2lvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2lvbXV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1ZDliMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvaW9tdXguYwpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBieSBWYWxlbnRpbiBMb25nY2hhbXAgPHZhbGVudGluLmxvbmdjaGFtcEBlcGZsLmNoPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXhjOTEyMzEuaD4KKworLyoKKyAqIElPTVVYIHJlZ2lzdGVyIChiYXNlKSBhZGRyZXNzZXMKKyAqLworI2RlZmluZSBJT01VWF9BUF9CQVNFCQlNWEM5MTIzMV9JT19BRERSRVNTKE1YQzkxMjMxX0lPTVVYX0FQX0JBU0VfQUREUikKKyNkZWZpbmUgSU9NVVhfQ09NX0JBU0UJCU1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfSU9NVVhfQ09NX0JBU0VfQUREUikKKyNkZWZpbmUgSU9NVVhTV19BUF9NVVhfQ1RMCShJT01VWF9BUF9CQVNFICsgMHgwMDApCisjZGVmaW5lIElPTVVYU1dfU1BfTVVYX0NUTAkoSU9NVVhfQ09NX0JBU0UgKyAweDAwMCkKKyNkZWZpbmUgSU9NVVhTV19QQURfQ1RMCQkoSU9NVVhfQ09NX0JBU0UgKyAweDIwMCkKKworI2RlZmluZSBJT01VWElOVF9PQlMxCQkoSU9NVVhfQVBfQkFTRSArIDB4NjAwKQorI2RlZmluZSBJT01VWElOVF9PQlMyCQkoSU9NVVhfQVBfQkFTRSArIDB4MDA0KQorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbXV4X2xvY2spOworCisjZGVmaW5lIE5CX1BPUlRTCQkJKChQSU5fTUFYICsgMzIpIC8gMzIpCisjZGVmaW5lIFBJTl9HTE9CQUxfTlVNKHBpbikgXAorCSgoKHBpbiAmIE1VWF9TSURFX01BU0spID4+IE1VWF9TSURFX1NISUZUKSpQSU5fQVBfTUFYICsJXAorCSAoKHBpbiAmIE1VWF9SRUdfTUFTSykgPj4gTVVYX1JFR19TSElGVCkqNCArCQlcCisJICgocGluICYgTVVYX0ZJRUxEX01BU0spID4+IE1VWF9GSUVMRF9TSElGVCkpCisKK3Vuc2lnbmVkIGxvbmcgbXhjX3Bpbl9hbGxvY19tYXBbTkJfUE9SVFMgKiAzMiAvIEJJVFNfUEVSX0xPTkddOworLyoKKyAqIHNldCB0aGUgbW9kZSBmb3IgYSBJT01VWCBwaW4uCisgKi8KK2ludCBteGNfaW9tdXhfbW9kZShjb25zdCB1bnNpZ25lZCBpbnQgcGluX21vZGUpCit7CisJdTMyIHNpZGUsIGZpZWxkLCBsLCBtb2RlLCByZXQgPSAwOworCXZvaWQgX19pb21lbSAqcmVnOworCisJc2lkZSA9IChwaW5fbW9kZSAmIE1VWF9TSURFX01BU0spID4+IE1VWF9TSURFX1NISUZUOworCXN3aXRjaCAoc2lkZSkgeworCWNhc2UgTVVYX1NJREVfQVA6CisJCXJlZyA9IElPTVVYU1dfQVBfTVVYX0NUTDsKKwkJYnJlYWs7CisJY2FzZSBNVVhfU0lERV9TUDoKKwkJcmVnID0gSU9NVVhTV19TUF9NVVhfQ1RMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmVnICs9ICgocGluX21vZGUgJiBNVVhfUkVHX01BU0spID4+IE1VWF9SRUdfU0hJRlQpICogNDsKKwlmaWVsZCA9IChwaW5fbW9kZSAmIE1VWF9GSUVMRF9NQVNLKSA+PiBNVVhfRklFTERfU0hJRlQ7CisJbW9kZSA9IChwaW5fbW9kZSAmIE1VWF9NT0RFX01BU0spID4+IE1VWF9NT0RFX1NISUZUOworCisJc3Bpbl9sb2NrKCZncGlvX211eF9sb2NrKTsKKworCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCWwgJj0gfigweGZmIDw8IChmaWVsZCAqIDgpKTsKKwlsIHw9IG1vZGUgPDwgKGZpZWxkICogOCk7CisJX19yYXdfd3JpdGVsKGwsIHJlZyk7CisKKwlzcGluX3VubG9jaygmZ3Bpb19tdXhfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfbW9kZSk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHBhZCB2YWx1ZSBmb3IgYSBJT01VWCBwaW4uCisgKi8KK3ZvaWQgbXhjX2lvbXV4X3NldF9wYWQoZW51bSBpb211eF9waW5zIHBpbiwgdTMyIGNvbmZpZykKK3sKKwl1MzIgcGFkZ3JwLCBmaWVsZCwgbDsKKwl2b2lkIF9faW9tZW0gKnJlZzsKKworCXBhZGdycCA9IChwaW4gJiBNVVhfUEFER1JQX01BU0spID4+IE1VWF9QQURHUlBfU0hJRlQ7CisJcmVnID0gSU9NVVhTV19QQURfQ1RMICsgKHBpbiArIDIpIC8gMyAqIDQ7CisJZmllbGQgPSAocGluICsgMikgJSAzOworCisJcHJfZGVidWcoIiVzOiByZWcgb2Zmc2V0ID0gMHgleCwgZmllbGQgPSAlZFxuIiwKKwkJCV9fZnVuY19fLCAocGluICsgMikgLyAzLCBmaWVsZCk7CisKKwlzcGluX2xvY2soJmdwaW9fbXV4X2xvY2spOworCisJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJbCAmPSB+KDB4MWZmIDw8IChmaWVsZCAqIDEwKSk7CisJbCB8PSBjb25maWcgPDwgKGZpZWxkICogMTApOworCV9fcmF3X3dyaXRlbChsLCByZWcpOworCisJc3Bpbl91bmxvY2soJmdwaW9fbXV4X2xvY2spOworfQorRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfc2V0X3BhZCk7CisKKy8qCisgKiBhbGxvY3MgYSBzaW5nbGUgcGluOgorICogCS0gcmVzZXJ2ZXMgdGhlIHBpbiBzbyB0aGF0IGl0IGlzIG5vdCBjbGFpbWVkIGJ5IGFub3RoZXIgZHJpdmVyCisgKiAJLSBzZXR1cHMgdGhlIGlvbXV4IGFjY29yZGluZyB0byB0aGUgY29uZmlndXJhdGlvbgorICovCitpbnQgbXhjX2lvbXV4X2FsbG9jX3Bpbihjb25zdCB1bnNpZ25lZCBpbnQgcGluX21vZGUsIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXVuc2lnbmVkIHBhZCA9IFBJTl9HTE9CQUxfTlVNKHBpbl9tb2RlKTsKKwlpZiAocGFkID49IChQSU5fTUFYICsgMSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJteGNfaW9tdXg6IEF0dGVtcHQgdG8gcmVxdWVzdCBub25leGlzdGFudCBwaW4gJXUgZm9yIFwiJXNcIlxuIiwKKwkJCXBhZCwgbGFiZWwgPyBsYWJlbCA6ICI/Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KHBhZCwgbXhjX3Bpbl9hbGxvY19tYXApKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXhjX2lvbXV4OiBwaW4gJXUgYWxyZWFkeSB1c2VkLiBBbGxvY2F0aW9uIGZvciBcIiVzXCIgZmFpbGVkXG4iLAorCQkJcGFkLCBsYWJlbCA/IGxhYmVsIDogIj8iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJbXhjX2lvbXV4X21vZGUocGluX21vZGUpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG14Y19pb211eF9hbGxvY19waW4pOworCitpbnQgbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModW5zaWduZWQgaW50ICpwaW5fbGlzdCwgdW5zaWduZWQgY291bnQsCisJCWNvbnN0IGNoYXIgKmxhYmVsKQoreworCXVuc2lnbmVkIGludCAqcCA9IHBpbl9saXN0OworCWludCBpOworCWludCByZXQgPSAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJcmV0ID0gbXhjX2lvbXV4X2FsbG9jX3BpbigqcCwgbGFiZWwpOworCQlpZiAocmV0KQorCQkJZ290byBzZXR1cF9lcnJvcjsKKwkJcCsrOworCX0KKwlyZXR1cm4gMDsKKworc2V0dXBfZXJyb3I6CisJbXhjX2lvbXV4X3JlbGVhc2VfbXVsdGlwbGVfcGlucyhwaW5fbGlzdCwgaSk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMpOworCit2b2lkIG14Y19pb211eF9yZWxlYXNlX3Bpbihjb25zdCB1bnNpZ25lZCBpbnQgcGluX21vZGUpCit7CisJdW5zaWduZWQgcGFkID0gUElOX0dMT0JBTF9OVU0ocGluX21vZGUpOworCisJaWYgKHBhZCA8IChQSU5fTUFYICsgMSkpCisJCWNsZWFyX2JpdChwYWQsIG14Y19waW5fYWxsb2NfbWFwKTsKK30KK0VYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3JlbGVhc2VfcGluKTsKKwordm9pZCBteGNfaW9tdXhfcmVsZWFzZV9tdWx0aXBsZV9waW5zKHVuc2lnbmVkIGludCAqcGluX2xpc3QsIGludCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgKnAgPSBwaW5fbGlzdDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCW14Y19pb211eF9yZWxlYXNlX3BpbigqcCk7CisJCXArKzsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKG14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9tYWd4LXpuNS5jIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9tYWd4LXpuNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYmU0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL21hZ3gtem41LmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IERtaXRyaXkgVGF5Y2hlbmFjaGV2IDxkaW1pY2h4cEBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2MiBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teGM5MTIzMS5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworfTsKKworc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjX3BkYXRhID0geworfTsKKworc3RhdGljIHZvaWQgX19pbml0IHpuNV9pbml0KHZvaWQpCit7CisJcG1fcG93ZXJfb2ZmID0gbXhjOTEyMzFfcG93ZXJfb2ZmOworCisJbXhjX2lvbXV4X2FsbG9jX3BpbihNWEM5MTIzMV9QSU5fU1BfVVNCX0RBVF9WUF9fUlhEMiwgInVhcnQyLXJ4Iik7CisJbXhjX2lvbXV4X2FsbG9jX3BpbihNWEM5MTIzMV9QSU5fU1BfVVNCX1NFMF9WTV9fVFhEMiwgInVhcnQyLXR4Iik7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UxLCAmdWFydF9wZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMCwgJnNkaGNfcGRhdGEpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3dkb2dfZGV2aWNlMCwgTlVMTCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB6bjVfdGltZXJfaW5pdCh2b2lkKQoreworCW14YzkxMjMxX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsgLyogMjZtaHogY2tpaCAqLworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIHpuNV90aW1lciA9IHsKKwkuaW5pdCA9IHpuNV90aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChNQUdYX1pONSwgIk1vdG9yb2xhIFpuNSIpCisJLnBoeXNfaW8JPSBNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0CT0gKChNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbwkJPSBteGM5MTIzMV9tYXBfaW8sCisJLmluaXRfaXJxCT0gbXhjOTEyMzFfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZ6bjVfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IHpuNV9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvbW0uYyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvbW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmVjZGEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9tbS5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgQXJtIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQorICogIENvcHlyaWdodCAyMDA0LTIwMDUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgIC0gYWRkIE1YQyBzcGVjaWZpYyBkZWZpbml0aW9ucworICogIENvcHlyaWdodCAyMDA2IE1vdG9yb2xhLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIE1YQyBtZW1vcnkgbWFwLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14Y19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gTVhDOTEyMzFfTDJDQ19CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YQzkxMjMxX0wyQ0NfQkFTRV9BRERSKSwKKwkJLmxlbmd0aAkJPSBNWEM5MTIzMV9MMkNDX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gTVhDOTEyMzFfWF9NRU1DX0JBU0VfQUREUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTVhDOTEyMzFfWF9NRU1DX0JBU0VfQUREUiksCisJCS5sZW5ndGgJCT0gTVhDOTEyMzFfWF9NRU1DX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gTVhDOTEyMzFfUk9NUF9CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YQzkxMjMxX1JPTVBfQkFTRV9BRERSKSwKKwkJLmxlbmd0aAkJPSBNWEM5MTIzMV9ST01QX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gTVhDOTEyMzFfQVZJQ19CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YQzkxMjMxX0FWSUNfQkFTRV9BRERSKSwKKwkJLmxlbmd0aAkJPSBNWEM5MTIzMV9BVklDX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFIpLAorCQkubGVuZ3RoCQk9IE1YQzkxMjMxX0FJUFMxX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIpLAorCQkubGVuZ3RoCQk9IE1YQzkxMjMxX1NQQkEwX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gTVhDOTEyMzFfU1BCQTFfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihNWEM5MTIzMV9TUEJBMV9CQVNFX0FERFIpLAorCQkubGVuZ3RoCQk9IE1YQzkxMjMxX1NQQkExX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFIpLAorCQkubGVuZ3RoCQk9IE1YQzkxMjMxX0FJUFMyX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSBtYXAuIEl0IGlzIGNhbGxlZCBkdXJpbmcgdGhlCisgKiBzeXN0ZW0gc3RhcnR1cCB0byBjcmVhdGUgc3RhdGljIHBoeXNpY2FsIHRvIHZpcnR1YWwgbWVtb3J5IG1hcCBmb3IKKyAqIHRoZSBJTyBtb2R1bGVzLgorICovCit2b2lkIF9faW5pdCBteGM5MTIzMV9tYXBfaW8odm9pZCkKK3sKKwlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVhDOTEyMzEpOworCisJaW90YWJsZV9pbml0KG14Y19pb19kZXNjLCBBUlJBWV9TSVpFKG14Y19pb19kZXNjKSk7Cit9CisKK3ZvaWQgX19pbml0IG14YzkxMjMxX2luaXRfaXJxKHZvaWQpCit7CisJbXhjX2luaXRfaXJxKE1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfQVZJQ19CQVNFX0FERFIpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvc3lzdGVtLmMgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL3N5c3RlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNmY3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL3N5c3RlbS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBEbWl0cml5IFRheWNoZW5hY2hldiA8ZGltaWNoeHBAZ21haWwuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIgb3IgbGF0ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgImNybV9yZWdzLmgiCisKKyNkZWZpbmUgV0RPR19XQ1IJCU1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfV0RPRzFfQkFTRV9BRERSKQorI2RlZmluZSBXRE9HX1dDUl9PVVRfRU5BQkxFCSgxIDw8IDYpCisjZGVmaW5lIFdET0dfV0NSX0FTU0VSVAkJKDEgPDwgNSkKKwordm9pZCBteGM5MTIzMV9wb3dlcl9vZmYodm9pZCkKK3sKKwl1MTYgd2NyOworCisJd2NyID0gX19yYXdfcmVhZHcoV0RPR19XQ1IpOworCXdjciB8PSBXRE9HX1dDUl9PVVRfRU5BQkxFOworCXdjciAmPSB+V0RPR19XQ1JfQVNTRVJUOworCV9fcmF3X3dyaXRldyh3Y3IsIFdET0dfV0NSKTsKK30KKwordm9pZCBteGM5MTIzMV9hcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCXUzMiBhbWNyOworCisJLyogUmVzZXQgdGhlIEFQIHVzaW5nIENSTSAqLworCWFtY3IgPSBfX3Jhd19yZWFkbChNWENfQ1JNQVBfQU1DUik7CisJYW1jciAmPSB+TVhDX0NSTUFQX0FNQ1JfU1dfQVA7CisJX19yYXdfd3JpdGVsKGFtY3IsIE1YQ19DUk1BUF9BTUNSKTsKKworCW1kZWxheSgxMCk7CisJY3B1X3Jlc2V0KDApOworfQorCit2b2lkIG14YzkxMjMxX3ByZXBhcmVfaWRsZSh2b2lkKQoreworCXUzMiBjcm1fY3RsOworCisJLyogR28gdG8gV0FJVCBtb2RlIGFmdGVyIFdGSSAqLworCWNybV9jdGwgPSBfX3Jhd19yZWFkbChNWENfRFNNX0NSTV9DT05UUk9MKTsKKwljcm1fY3RsICY9IH4oTVhDX0RTTV9DUk1fQ1RSTF9MUE1EMCB8IE1YQ19EU01fQ1JNX0NUUkxfTFBNRDEpOworCWNybV9jdGwgfD0gIE1YQ19EU01fQ1JNX0NUUkxfTFBNRF9XQUlUX01PREU7CisJX19yYXdfd3JpdGVsKGNybV9jdGwsIE1YQ19EU01fQ1JNX0NPTlRST0wpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IGExOTUyYTAuLjg0NGYxZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTI0LDE1ICsyNCwxMyBAQAogCQkuZW5kbQogCiAJCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwkJbGRyCVxiYXNlLCA9aW9fcDJ2KDB4MDAxZmYwMDApCiAJCS5lbmRtCiAKIAkJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCiAJCS5lbmRtCiAKIAkJLm1hY3JvICBnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKLQkJbW92CVxiYXNlLCAjaW9fcDJ2KDB4MDAxMDAwMDApCi0JCWFkZAlcYmFzZSwgXGJhc2UsICMweDAwMGZmMDAwCi0KIAkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMwXQogCQljbHoJXGlycW5yLCBcaXJxc3RhdAogCQlyc2IgICAgIFxpcnFuciwgXGlycW5yLCAjMzEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwMmI0OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9LY29uZmlnCkBAIC0wLDAgKzEsMjEgQEAKK2lmIEFSQ0hfTk9NQURJSworCittZW51ICJOb21hZGlrIGJvYXJkcyIKKworY29uZmlnIE1BQ0hfTk9NQURJS184ODE1TkhLCisJYm9vbCAiU1QgODgxNSBOb21hZGlrIEhhcmR3YXJlIEtpdCAoZXZhbHVhdGlvbiBib2FyZCkiCisJc2VsZWN0IE5PTUFESUtfODgxNQorCitlbmRtZW51CisKK2NvbmZpZyBOT01BRElLXzg4MTUKKwlib29sCisKKworY29uZmlnIEkyQ19CSVRCQU5HXzg4MTVOSEsKKwl0cmlzdGF0ZSAiRHJpdmVyIGZvciBiaXQtYmFuZyBidXNzZXMgZm91bmQgb24gdGhlIDg4MTUgTkhLIgorCWRlcGVuZHMgb24gSTJDICYmIE1BQ0hfTk9NQURJS184ODE1TkhLCisJc2VsZWN0IEkyQ19BTEdPQklUCisJZGVmYXVsdCB5CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyMDQwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9NYWtlZmlsZQpAQCAtMCwwICsxLDE5IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworIyBOb3RlISBEZXBlbmRlbmNpZXMgYXJlIGRvbmUgYXV0b21hZ2ljYWxseSBieSAnbWFrZSBkZXAnLCB3aGljaCBhbHNvCisjIHJlbW92ZXMgYW55IG9sZCBkZXBlbmRlbmNpZXMuIERPTidUIHB1dCB5b3VyIG93biBkZXBlbmRlbmNpZXMgaGVyZQorIyB1bmxlc3MgaXQncyBzb21ldGhpbmcgc3BlY2lhbCAoaWUgbm90IGEgLmMgZmlsZSkuCisKKyMgT2JqZWN0IGZpbGUgbGlzdHMuCisKK29iai15CQkJKz0gY2xvY2subyB0aW1lci5vIGdwaW8ubworCisjIENwdSByZXZpc2lvbgorb2JqLSQoQ09ORklHX05PTUFESUtfODgxNSkgKz0gY3B1LTg4MTUubworCisjIFNwZWNpZmljIGJvYXJkIHN1cHBvcnQKK29iai0kKENPTkZJR19NQUNIX05PTUFESUtfODgxNU5ISykgKz0gYm9hcmQtbmhrODgxNS5vCisKKyMgTm9tYWRpayBleHRyYSBkZXZpY2VzCitvYmotJChDT05GSUdfSTJDX0JJVEJBTkdfODgxNU5ISykgKz0gaTJjLTg4MTVuaGsubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2U3NWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSw0IEBACisgICB6cmVsYWRkci15CTo9IDB4MDAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHgwMDAwMDEwMAoraW5pdHJkX3BoeXMteQk6PSAweDAwODAwMDAwCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9ib2FyZC1uaGs4ODE1LmMgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvYm9hcmQtbmhrODgxNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YmRlYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvYm9hcmQtbmhrODgxNS5jCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbm9tYWRpay9ib2FyZC04ODE1bmhrLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgTkhLMTUgYm9hcmQgc3BlY2lmYyBkcml2ZXIgZGVmaW5pdGlvbgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9zZXR1cC5oPgorI2luY2x1ZGUgImNsb2NrLmgiCisKKyNkZWZpbmUgX19NRU1fNEtfUkVTT1VSQ0UoeCkgXAorCS5yZXMgPSB7LnN0YXJ0ID0gKHgpLCAuZW5kID0gKHgpICsgU1pfNEsgLSAxLCAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTX0KKworc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSB1YXJ0MF9kZXZpY2UgPSB7CisJLmRldiA9IHsgLmluaXRfbmFtZSA9ICJ1YXJ0MCIgfSwKKwlfX01FTV80S19SRVNPVVJDRShOT01BRElLX1VBUlQwX0JBU0UpLAorCS5pcnEgPSB7SVJRX1VBUlQwLCBOT19JUlF9LAorfTsKKworc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSB1YXJ0MV9kZXZpY2UgPSB7CisJLmRldiA9IHsgLmluaXRfbmFtZSA9ICJ1YXJ0MSIgfSwKKwlfX01FTV80S19SRVNPVVJDRShOT01BRElLX1VBUlQxX0JBU0UpLAorCS5pcnEgPSB7SVJRX1VBUlQxLCBOT19JUlF9LAorfTsKKworc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwkmdWFydDBfZGV2aWNlLAorCSZ1YXJ0MV9kZXZpY2UsCit9OworCisvKiBXZSBoYXZlIGEgZml4ZWQgY2xvY2sgYWxvbmUsIGJ5IG5vdyAqLworc3RhdGljIHN0cnVjdCBjbGsgbmhrODgxNV9jbGtfNDggPSB7CisJLnJhdGUgPSA0OCoxMDAwKjEwMDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5oazg4MTVfZXRoX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUgPSAic21jOTF4LXJlZ3MiLAorCQkuc3RhcnQgPSAweDM0MDAwMDAwICsgMHgzMDAsCisJCS5lbmQgPSAweDM0MDAwMDAwICsgU1pfNjRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBOT01BRElLX0dQSU9fVE9fSVJRKDExNSksCisJCS5lbmQgPSBOT01BRElLX0dQSU9fVE9fSVJRKDExNSksCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIHwgSVJRRl9UUklHR0VSX1JJU0lORywKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBuaGs4ODE1X2V0aF9kZXZpY2UgPSB7CisJLm5hbWUgPSAic21jOTF4IiwKKwkucmVzb3VyY2UgPSBuaGs4ODE1X2V0aF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG5oazg4MTVfZXRoX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBuaGs4ODE1X2V0aF9pbml0KHZvaWQpCit7CisJaW50IGdwaW9fbnIgPSAxMTU7IC8qIGhhcmR3aXJlZCBpbiB0aGUgYm9hcmQgKi8KKwlpbnQgZXJyOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KGdwaW9fbnIsICJldGhfaXJxIik7CisJaWYgKCFlcnIpIGVyciA9IG5ta19ncGlvX3NldF9tb2RlKGdwaW9fbnIsIE5NS19HUElPX0FMVF9HUElPKTsKKwlpZiAoIWVycikgZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb19ucik7CisJaWYgKGVycikKKwkJcHJfZXJyKCJFcnJvciAlaSBpbiAlc1xuIiwgZXJyLCBfX2Z1bmNfXyk7CisJcmV0dXJuIGVycjsKK30KK2RldmljZV9pbml0Y2FsbChuaGs4ODE1X2V0aF9pbml0KTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm5oazg4MTVfcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm5oazg4MTVfZXRoX2RldmljZSwKKwkvKiB3aWxsIGFkZCBtb3JlIGRldmljZXMgKi8KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuaGs4ODE1X3BsYXRmb3JtX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWNwdTg4MTVfcGxhdGZvcm1faW5pdCgpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG5oazg4MTVfcGxhdGZvcm1fZGV2aWNlcywKKwkJCSAgICAgQVJSQVlfU0laRShuaGs4ODE1X3BsYXRmb3JtX2RldmljZXMpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgeworCQlubWRrX2Nsa19jcmVhdGUoJm5oazg4MTVfY2xrXzQ4LCBhbWJhX2RldnNbaV0tPmRldi5pbml0X25hbWUpOworCQlhbWJhX2RldmljZV9yZWdpc3RlcihhbWJhX2RldnNbaV0sICZpb21lbV9yZXNvdXJjZSk7CisJfQorfQorCitNQUNISU5FX1NUQVJUKE5PTUFESUssICJOSEs4ODE1IikKKwkvKiBNYWludGFpbmVyOiBTVCBNaWNyb0VsZWN0cm9uaWNzICovCisJLnBoeXNfaW8JPSBOT01BRElLX1VBUlQwX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoTk9NQURJS19VQVJUMF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgxMDAsCisJLm1hcF9pbwkJPSBjcHU4ODE1X21hcF9pbywKKwkuaW5pdF9pcnEJPSBjcHU4ODE1X2luaXRfaXJxLAorCS50aW1lcgkJPSAmbm9tYWRpa190aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gbmhrODgxNV9wbGF0Zm9ybV9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY5MjUwMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9jbG9jay5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2Nsb2NrLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEFsZXNzYW5kcm8gUnViaW5pCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlICJjbG9jay5oIgorCisvKgorICogVGhlIG5vbWFkaWsgYm9hcmQgdXNlcyBnZW5lcmljIGNsb2NrcywgYnV0IHRoZSBzZXJpYWwgcGwwMTEgZmlsZQorICogY2FsbHMgY2xrX2VuYWJsZSgpLCBjbGtfZGlzYWJsZSgpLCBjbGtfZ2V0X3JhdGUoKSwgc28gd2UgcHJvdmlkZSB0aGVtCisgKi8KK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5yYXRlOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCisvKiBlbmFibGUgYW5kIGRpc2FibGUgZG8gbm90aGluZyAqLworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKworLyogQ3JlYXRlIGEgY2xvY2sgc3RydWN0dXJlIHdpdGggdGhlIGdpdmVuIG5hbWUgKi8KK2ludCBubWRrX2Nsa19jcmVhdGUoc3RydWN0IGNsayAqY2xrLCBjb25zdCBjaGFyICpkZXZfaWQpCit7CisJc3RydWN0IGNsa19sb29rdXAgKmNsa2RldjsKKworCWNsa2RldiA9IGNsa2Rldl9hbGxvYyhjbGssIE5VTEwsIGRldl9pZCk7CisJaWYgKCFjbGtkZXYpCisJCXJldHVybiAtRU5PTUVNOworCWNsa2Rldl9hZGQoY2xrZGV2KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1ZmFlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9jbG9jay5oCkBAIC0wLDAgKzEsMTQgQEAKKworLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY2xvY2suaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQWxlc3NhbmRybyBSdWJpbmkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCitzdHJ1Y3QgY2xrIHsKKwl1bnNpZ25lZCBsb25nCQlyYXRlOworfTsKK2V4dGVybiBpbnQgbm1ka19jbGtfY3JlYXRlKHN0cnVjdCBjbGsgKmNsaywgY29uc3QgY2hhciAqZGV2X2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9jcHUtODgxNS5jIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzYzU5NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9jcHUtODgxNS5jCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IFNUTWljcm9lbGVjdHJvbmljcywgMjAwNy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgorCisvKiBUaGUgODgxNSBoYXMgNCBHUElPIGJsb2NrcywgbGV0J3MgcmVnaXN0ZXIgdGhlbSBpbW1lZGlhdGVseSAqLworc3RhdGljIHN0cnVjdCBubWtfZ3Bpb19wbGF0Zm9ybV9kYXRhIGNwdTg4MTVfZ3Bpb1tdID0geworCXsKKwkJLm5hbWUgPSAiR1BJTy0wLTMxIiwKKwkJLmZpcnN0X2dwaW8gPSAwLAorCQkuZmlyc3RfaXJxID0gTk9NQURJS19HUElPX1RPX0lSUSgwKSwKKwkJLnBhcmVudF9pcnEgPSBJUlFfR1BJTzAsCisJfSwgeworCQkubmFtZSA9ICJHUElPLTMyLTYzIiwKKwkJLmZpcnN0X2dwaW8gPSAzMiwKKwkJLmZpcnN0X2lycSA9IE5PTUFESUtfR1BJT19UT19JUlEoMzIpLAorCQkucGFyZW50X2lycSA9IElSUV9HUElPMSwKKwl9LCB7CisJCS5uYW1lID0gIkdQSU8tNjQtOTUiLAorCQkuZmlyc3RfZ3BpbyA9IDY0LAorCQkuZmlyc3RfaXJxID0gTk9NQURJS19HUElPX1RPX0lSUSg2NCksCisJCS5wYXJlbnRfaXJxID0gSVJRX0dQSU8yLAorCX0sIHsKKwkJLm5hbWUgPSAiR1BJTy05Ni0xMjciLCAvKiAxMjQuLjEyNyBub3Qgcm91dGVkIHRvIHBpbiAqLworCQkuZmlyc3RfZ3BpbyA9IDk2LAorCQkuZmlyc3RfaXJxID0gTk9NQURJS19HUElPX1RPX0lSUSg5NiksCisJCS5wYXJlbnRfaXJxID0gSVJRX0dQSU8zLAorCX0KK307CisKKyNkZWZpbmUgX19NRU1fNEtfUkVTT1VSQ0UoeCkgXAorCS5yZXMgPSB7LnN0YXJ0ID0gKHgpLCAuZW5kID0gKHgpICsgU1pfNEsgLSAxLCAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTX0KKworc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSBjcHU4ODE1X2FtYmFfZ3Bpb1tdID0geworCXsKKwkJLmRldiA9IHsKKwkJCS5pbml0X25hbWUgPSAiZ3BpbzAiLAorCQkJLnBsYXRmb3JtX2RhdGEgPSBjcHU4ODE1X2dwaW8gKyAwLAorCQl9LAorCQlfX01FTV80S19SRVNPVVJDRShOT01BRElLX0dQSU8wX0JBU0UpLAorCX0sIHsKKwkJLmRldiA9IHsKKwkJCS5pbml0X25hbWUgPSAiZ3BpbzEiLAorCQkJLnBsYXRmb3JtX2RhdGEgPSBjcHU4ODE1X2dwaW8gKyAxLAorCQl9LAorCQlfX01FTV80S19SRVNPVVJDRShOT01BRElLX0dQSU8xX0JBU0UpLAorCX0sIHsKKwkJLmRldiA9IHsKKwkJCS5pbml0X25hbWUgPSAiZ3BpbzIiLAorCQkJLnBsYXRmb3JtX2RhdGEgPSBjcHU4ODE1X2dwaW8gKyAyLAorCQl9LAorCQlfX01FTV80S19SRVNPVVJDRShOT01BRElLX0dQSU8yX0JBU0UpLAorCX0sIHsKKwkJLmRldiA9IHsKKwkJCS5pbml0X25hbWUgPSAiZ3BpbzMiLAorCQkJLnBsYXRmb3JtX2RhdGEgPSBjcHU4ODE1X2dwaW8gKyAzLAorCQl9LAorCQlfX01FTV80S19SRVNPVVJDRShOT01BRElLX0dQSU8zX0JBU0UpLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0geworCWNwdTg4MTVfYW1iYV9ncGlvICsgMCwKKwljcHU4ODE1X2FtYmFfZ3BpbyArIDEsCisJY3B1ODgxNV9hbWJhX2dwaW8gKyAyLAorCWNwdTg4MTVfYW1iYV9ncGlvICsgMywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNwdTg4MTVfaW5pdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKQorCQlhbWJhX2RldmljZV9yZWdpc3RlcihhbWJhX2RldnNbaV0sICZpb21lbV9yZXNvdXJjZSk7CisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGNwdTg4MTVfaW5pdCk7CisKKy8qIEFsbCBTb0MgZGV2aWNlcyBsaXZlIGluIHRoZSBzYW1lIGFyZWEgKHNlZSBoYXJkd2FyZS5oKSAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBub21hZGlrX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwgPQlOT01BRElLX0lPX1ZJUlRVQUwsCisJCS5wZm4gPQkJX19waHlzX3RvX3BmbihOT01BRElLX0lPX1BIWVNJQ0FMKSwKKwkJLmxlbmd0aCA9CU5PTUFESUtfSU9fU0laRSwKKwkJLnR5cGUgPSAJTVRfREVWSUNFLAorCX0KKwkvKiBzdGF0aWMgcmFtIGFuZCBzZWN1cmVkIHJhbSBtYXkgYmUgYWRkZWQgbGF0ZXIgKi8KK307CisKK3ZvaWQgX19pbml0IGNwdTg4MTVfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KG5vbWFkaWtfaW9fZGVzYywgQVJSQVlfU0laRShub21hZGlrX2lvX2Rlc2MpKTsKK30KKwordm9pZCBfX2luaXQgY3B1ODgxNV9pbml0X2lycSh2b2lkKQoreworCS8qIFRoaXMgbW9kaWZpZWQgVklDIGNlbGwgaGFzIHR3byByZWdpc3RlciBibG9ja3MsIGF0IDAgYW5kIDB4MjAgKi8KKwl2aWNfaW5pdChpb19wMnYoTk9NQURJS19JQ19CQVNFICsgMHgwMCksIElSUV9WSUNfU1RBUlQgKyAgMCwgfjAsIDApOworCXZpY19pbml0KGlvX3AydihOT01BRElLX0lDX0JBU0UgKyAweDIwKSwgSVJRX1ZJQ19TVEFSVCArIDMyLCB+MCwgMCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBib2FyZCBpbml0ICgiaW5pdF9tYWNoaW5lIikuCisgKi8KKyB2b2lkIF9faW5pdCBjcHU4ODE1X3BsYXRmb3JtX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMAorCS8qIEF0IGZ1bGwgc3BlZWQgbGF0ZW5jeSBtdXN0IGJlID49Miwgc28gMHgyNDkgaW4gbG93IGJpdHMgKi8KKwlsMngwX2luaXQoaW9fcDJ2KE5PTUFESUtfTDJDQ19CQVNFKSwgMHgwMDczMDI0OSwgMHhmZTAwMGZmZik7CisjZW5kaWYKKwkgcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEwOWIyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9ncGlvLmMKQEAgLTAsMCArMSwzOTYgQEAKKy8qCisgKiBHZW5lcmljIEdQSU8gZHJpdmVyIGZvciBsb2dpYyBjZWxscyBmb3VuZCBpbiB0aGUgTm9tYWRpayBTb0MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsMjAwOSBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGVzc2FuZHJvIFJ1YmluaSA8cnViaW5pQHVuaXB2Lml0PgorICogICBSZXdyaXR0ZW4gYmFzZWQgb24gd29yayBieSBQcmFmdWxsYSBXQURBU0tBUiA8cHJhZnVsbGEud2FkYXNrYXJAc3QuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorCisvKgorICogVGhlIEdQSU8gbW9kdWxlIGluIHRoZSBOb21hZGlrIGZhbWlseSBvZiBTeXN0ZW1zLW9uLUNoaXAgaXMgYW4KKyAqIEFNQkEgZGV2aWNlLCBtYW5hZ2luZyAzMiBwaW5zIGFuZCBhbHRlcm5hdGUgZnVuY3Rpb25zLiAgVGhlIGxvZ2ljIGJsb2NrCisgKiBpcyBjdXJyZW50bHkgb25seSB1c2VkIGluIHRoZSBOb21hZGlrLgorICoKKyAqIFN5bWJvbHMgaW4gdGhpcyBmaWxlIGFyZSBjYWxsZWQgIm5ta19ncGlvIiBmb3IgIm5vbWFkaWsgZ3BpbyIKKyAqLworCisjZGVmaW5lIE5NS19HUElPX1BFUl9DSElQIDMyCitzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCB7CisJc3RydWN0IGdwaW9fY2hpcCBjaGlwOworCXZvaWQgX19pb21lbSAqYWRkcjsKKwl1bnNpZ25lZCBpbnQgcGFyZW50X2lycTsKKwlzcGlubG9ja190ICpsb2NrOworCS8qIEtlZXAgdHJhY2sgb2YgY29uZmlndXJlZCBlZGdlcyAqLworCXUzMiBlZGdlX3Jpc2luZzsKKwl1MzIgZWRnZV9mYWxsaW5nOworfTsKKworLyogTW9kZSBmdW5jdGlvbnMgKi8KK2ludCBubWtfZ3Bpb19zZXRfbW9kZShpbnQgZ3BpbywgaW50IGdwaW9fbW9kZSkKK3sKKwlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgYWZ1bmMsIGJmdW5jLCBiaXQ7CisKKwlubWtfY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKE5PTUFESUtfR1BJT19UT19JUlEoZ3BpbykpOworCWlmICghbm1rX2NoaXApCisJCXJldHVybiAtRUlOVkFMOworCisJYml0ID0gMSA8PCAoZ3BpbyAtIG5ta19jaGlwLT5jaGlwLmJhc2UpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5ta19jaGlwLT5sb2NrLCBmbGFncyk7CisJYWZ1bmMgPSByZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0FGU0xBKSAmIH5iaXQ7CisJYmZ1bmMgPSByZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0FGU0xCKSAmIH5iaXQ7CisJaWYgKGdwaW9fbW9kZSAmIE5NS19HUElPX0FMVF9BKQorCQlhZnVuYyB8PSBiaXQ7CisJaWYgKGdwaW9fbW9kZSAmIE5NS19HUElPX0FMVF9CKQorCQliZnVuYyB8PSBiaXQ7CisJd3JpdGVsKGFmdW5jLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0FGU0xBKTsKKwl3cml0ZWwoYmZ1bmMsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fQUZTTEIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5ta19jaGlwLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobm1rX2dwaW9fc2V0X21vZGUpOworCitpbnQgbm1rX2dwaW9fZ2V0X21vZGUoaW50IGdwaW8pCit7CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwOworCXUzMiBhZnVuYywgYmZ1bmMsIGJpdDsKKworCW5ta19jaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoTk9NQURJS19HUElPX1RPX0lSUShncGlvKSk7CisJaWYgKCFubWtfY2hpcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliaXQgPSAxIDw8IChncGlvIC0gbm1rX2NoaXAtPmNoaXAuYmFzZSk7CisKKwlhZnVuYyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fQUZTTEEpICYgYml0OworCWJmdW5jID0gcmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19BRlNMQikgJiBiaXQ7CisKKwlyZXR1cm4gKGFmdW5jID8gTk1LX0dQSU9fQUxUX0EgOiAwKSB8IChiZnVuYyA/IE5NS19HUElPX0FMVF9CIDogMCk7Cit9CitFWFBPUlRfU1lNQk9MKG5ta19ncGlvX2dldF9tb2RlKTsKKworCisvKiBJUlEgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIGludCBubWtfZ3Bpb19nZXRfYml0bWFzayhpbnQgZ3BpbykKK3sKKwlyZXR1cm4gMSA8PCAoZ3BpbyAlIDMyKTsKK30KKworc3RhdGljIHZvaWQgbm1rX2dwaW9faXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBncGlvOworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKKworCWdwaW8gPSBOT01BRElLX0lSUV9UT19HUElPKGlycSk7CisJbm1rX2NoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCWlmICghbm1rX2NoaXApCisJCXJldHVybjsKKwl3cml0ZWwobm1rX2dwaW9fZ2V0X2JpdG1hc2soZ3BpbyksIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fSUMpOworfQorCitzdGF0aWMgdm9pZCBubWtfZ3Bpb19pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBncGlvOworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBiaXRtYXNrLCByZWc7CisKKwlncGlvID0gTk9NQURJS19JUlFfVE9fR1BJTyhpcnEpOworCW5ta19jaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwliaXRtYXNrID0gbm1rX2dwaW9fZ2V0X2JpdG1hc2soZ3Bpbyk7CisJaWYgKCFubWtfY2hpcCkKKwkJcmV0dXJuOworCisJLyogd2UgbXVzdCBpbmRpdmlkdWFsbHkgY2xlYXIgdGhlIHR3byBlZGdlcyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZubWtfY2hpcC0+bG9jaywgZmxhZ3MpOworCWlmIChubWtfY2hpcC0+ZWRnZV9yaXNpbmcgJiBiaXRtYXNrKSB7CisJCXJlZyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fUldJTVNDKTsKKwkJcmVnICY9IH5iaXRtYXNrOworCQl3cml0ZWwocmVnLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX1JXSU1TQyk7CisJfQorCWlmIChubWtfY2hpcC0+ZWRnZV9mYWxsaW5nICYgYml0bWFzaykgeworCQlyZWcgPSByZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0ZXSU1TQyk7CisJCXJlZyAmPSB+Yml0bWFzazsKKwkJd3JpdGVsKHJlZywgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19GV0lNU0MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZubWtfY2hpcC0+bG9jaywgZmxhZ3MpOworfTsKKworc3RhdGljIHZvaWQgbm1rX2dwaW9faXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBncGlvOworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBiaXRtYXNrLCByZWc7CisKKwlncGlvID0gTk9NQURJS19JUlFfVE9fR1BJTyhpcnEpOworCW5ta19jaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwliaXRtYXNrID0gbm1rX2dwaW9fZ2V0X2JpdG1hc2soZ3Bpbyk7CisJaWYgKCFubWtfY2hpcCkKKwkJcmV0dXJuOworCisJLyogd2UgbXVzdCBpbmRpdmlkdWFsbHkgc2V0IHRoZSB0d28gZWRnZXMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKKwlpZiAobm1rX2NoaXAtPmVkZ2VfcmlzaW5nICYgYml0bWFzaykgeworCQlyZWcgPSByZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX1JXSU1TQyk7CisJCXJlZyB8PSBiaXRtYXNrOworCQl3cml0ZWwocmVnLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX1JXSU1TQyk7CisJfQorCWlmIChubWtfY2hpcC0+ZWRnZV9mYWxsaW5nICYgYml0bWFzaykgeworCQlyZWcgPSByZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0ZXSU1TQyk7CisJCXJlZyB8PSBiaXRtYXNrOworCQl3cml0ZWwocmVnLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0ZXSU1TQyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5ta19jaGlwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbm1rX2dwaW9faXJxX3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCWludCBncGlvOworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBiaXRtYXNrOworCisJZ3BpbyA9IE5PTUFESUtfSVJRX1RPX0dQSU8oaXJxKTsKKwlubWtfY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJYml0bWFzayA9IG5ta19ncGlvX2dldF9iaXRtYXNrKGdwaW8pOworCWlmICghbm1rX2NoaXApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHR5cGUgJiBJUlFfVFlQRV9MRVZFTF9ISUdIKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodHlwZSAmIElSUV9UWVBFX0xFVkVMX0xPVykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKKworCW5ta19jaGlwLT5lZGdlX3Jpc2luZyAmPSB+Yml0bWFzazsKKwlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfUklTSU5HKQorCQlubWtfY2hpcC0+ZWRnZV9yaXNpbmcgfD0gYml0bWFzazsKKwl3cml0ZWwobm1rX2NoaXAtPmVkZ2VfcmlzaW5nLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX1JJTVNDKTsKKworCW5ta19jaGlwLT5lZGdlX2ZhbGxpbmcgJj0gfmJpdG1hc2s7CisJaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCisJCW5ta19jaGlwLT5lZGdlX2ZhbGxpbmcgfD0gYml0bWFzazsKKwl3cml0ZWwobm1rX2NoaXAtPmVkZ2VfZmFsbGluZywgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19GSU1TQyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZubWtfY2hpcC0+bG9jaywgZmxhZ3MpOworCisJbm1rX2dwaW9faXJxX3VubWFzayhpcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbm1rX2dwaW9faXJxX2NoaXAgPSB7CisJLm5hbWUJCT0gIk5vbWFkaWstR1BJTyIsCisJLmFjawkJPSBubWtfZ3Bpb19pcnFfYWNrLAorCS5tYXNrCQk9IG5ta19ncGlvX2lycV9tYXNrLAorCS51bm1hc2sJCT0gbm1rX2dwaW9faXJxX3VubWFzaywKKwkuc2V0X3R5cGUJPSBubWtfZ3Bpb19pcnFfc2V0X3R5cGUsCit9OworCitzdGF0aWMgdm9pZCBubWtfZ3Bpb19pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwOworCXN0cnVjdCBpcnFfY2hpcCAqaG9zdF9jaGlwOworCXVuc2lnbmVkIGludCBncGlvX2lycTsKKwl1MzIgcGVuZGluZzsKKwl1bnNpZ25lZCBpbnQgZmlyc3RfaXJxOworCisJbm1rX2NoaXAgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKwlmaXJzdF9pcnEgPSBOT01BRElLX0dQSU9fVE9fSVJRKG5ta19jaGlwLT5jaGlwLmJhc2UpOworCXdoaWxlICggKHBlbmRpbmcgPSByZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0lTKSkgKSB7CisJCWdwaW9faXJxID0gZmlyc3RfaXJxICsgX19mZnMocGVuZGluZyk7CisJCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7CisJfQorCWlmICgwKSB7LyogZG9uJ3QgYWNrIHBhcmVudCBpcnEsIGFzIGFjayA9PSBkaXNhYmxlICovCisJCWhvc3RfY2hpcCA9IGdldF9pcnFfY2hpcChpcnEpOworCQlob3N0X2NoaXAtPmFjayhpcnEpOworCX0KK30KKworc3RhdGljIGludCBubWtfZ3Bpb19pbml0X2lycShzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXApCit7CisJdW5zaWduZWQgaW50IGZpcnN0X2lycTsKKwlpbnQgaTsKKworCWZpcnN0X2lycSA9IE5PTUFESUtfR1BJT19UT19JUlEobm1rX2NoaXAtPmNoaXAuYmFzZSk7CisJZm9yIChpID0gZmlyc3RfaXJxOyBpIDwgZmlyc3RfaXJxICsgTk1LX0dQSU9fUEVSX0NISVA7IGkrKykgeworCQlzZXRfaXJxX2NoaXAoaSwgJm5ta19ncGlvX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9lZGdlX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CisJCXNldF9pcnFfY2hpcF9kYXRhKGksIG5ta19jaGlwKTsKKwl9CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIobm1rX2NoaXAtPnBhcmVudF9pcnEsIG5ta19ncGlvX2lycV9oYW5kbGVyKTsKKwlzZXRfaXJxX2RhdGEobm1rX2NoaXAtPnBhcmVudF9pcnEsIG5ta19jaGlwKTsKKwlyZXR1cm4gMDsKK30KKworLyogSS9PIEZ1bmN0aW9ucyAqLworc3RhdGljIGludCBubWtfZ3Bpb19tYWtlX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAgPQorCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG5ta19ncGlvX2NoaXAsIGNoaXApOworCisJd3JpdGVsKDEgPDwgb2Zmc2V0LCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0RJUkMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5ta19ncGlvX21ha2Vfb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJCQlpbnQgdmFsKQoreworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9CisJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCwgY2hpcCk7CisKKwl3cml0ZWwoMSA8PCBvZmZzZXQsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fRElSUyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbm1rX2dwaW9fZ2V0X2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXAgPQorCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG5ta19ncGlvX2NoaXAsIGNoaXApOworCXUzMiBiaXQgPSAxIDw8IG9mZnNldDsKKworCXJldHVybiAocmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19EQVQpICYgYml0KSAhPSAwOworfQorCitzdGF0aWMgdm9pZCBubWtfZ3Bpb19zZXRfb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJCQlpbnQgdmFsKQoreworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9CisJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCwgY2hpcCk7CisJdTMyIGJpdCA9IDEgPDwgb2Zmc2V0OworCisJaWYgKHZhbCkKKwkJd3JpdGVsKGJpdCwgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19EQVRTKTsKKwllbHNlCisJCXdyaXRlbChiaXQsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fREFUQyk7Cit9CisKKy8qIFRoaXMgc3RydWN0dXJlIGlzIHJlcGxpY2F0ZWQgZm9yIGVhY2ggR1BJTyBibG9jayBhbGxvY2F0ZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgbm1rX2dwaW9fdGVtcGxhdGUgPSB7CisJLmRpcmVjdGlvbl9pbnB1dAk9IG5ta19ncGlvX21ha2VfaW5wdXQsCisJLmdldAkJCT0gbm1rX2dwaW9fZ2V0X2lucHV0LAorCS5kaXJlY3Rpb25fb3V0cHV0CT0gbm1rX2dwaW9fbWFrZV9vdXRwdXQsCisJLnNldAkJCT0gbm1rX2dwaW9fc2V0X291dHB1dCwKKwkubmdwaW8JCQk9IE5NS19HUElPX1BFUl9DSElQLAorCS5jYW5fc2xlZXAJCT0gMCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5ta19ncGlvX3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCBzdHJ1Y3QgYW1iYV9pZCAqaWQpCit7CisJc3RydWN0IG5ta19ncGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwOworCWludCByZXQ7CisKKwlwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJcmV0ID0gYW1iYV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCBwZGF0YS0+bmFtZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW5ta19jaGlwID0ga3phbGxvYyhzaXplb2YoKm5ta19jaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFubWtfY2hpcCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9hbWJhOworCX0KKwkvKgorCSAqIFRoZSB2aXJ0IGFkZHJlc3MgaW4gbm1rX2NoaXAtPmFkZHIgaXMgaW4gdGhlIG5vbWFkaWsgcmVnaXN0ZXIgc3BhY2UsCisJICogc28gd2UgY2FuIHNpbXBseSBjb252ZXJ0IHRoZSByZXNvdXJjZSBhZGRyZXNzLCB3aXRob3V0IHJlbWFwcGluZworCSAqLworCW5ta19jaGlwLT5hZGRyID0gaW9fcDJ2KGRldi0+cmVzLnN0YXJ0KTsKKwlubWtfY2hpcC0+Y2hpcCA9IG5ta19ncGlvX3RlbXBsYXRlOworCW5ta19jaGlwLT5wYXJlbnRfaXJxID0gcGRhdGEtPnBhcmVudF9pcnE7CisKKwljaGlwID0gJm5ta19jaGlwLT5jaGlwOworCWNoaXAtPmJhc2UgPSBwZGF0YS0+Zmlyc3RfZ3BpbzsKKwljaGlwLT5sYWJlbCA9IHBkYXRhLT5uYW1lOworCWNoaXAtPmRldiA9ICZkZXYtPmRldjsKKwljaGlwLT5vd25lciA9IFRISVNfTU9EVUxFOworCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZubWtfY2hpcC0+Y2hpcCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZTsKKworCWFtYmFfc2V0X2RydmRhdGEoZGV2LCBubWtfY2hpcCk7CisKKwlubWtfZ3Bpb19pbml0X2lycShubWtfY2hpcCk7CisKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJCaXRzICVpLSVpIGF0IGFkZHJlc3MgJXBcbiIsCisJCSBubWtfY2hpcC0+Y2hpcC5iYXNlLCBubWtfY2hpcC0+Y2hpcC5iYXNlKzMxLCBubWtfY2hpcC0+YWRkcik7CisJcmV0dXJuIDA7CisKKyBvdXRfZnJlZToKKwlrZnJlZShubWtfY2hpcCk7Cisgb3V0X2FtYmE6CisJYW1iYV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKwlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWx1cmUgJWkgZm9yIEdQSU8gJWktJWlcbiIsIHJldCwKKwkJICBwZGF0YS0+Zmlyc3RfZ3BpbywgcGRhdGEtPmZpcnN0X2dwaW8rMzEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbm1rX2dwaW9fcmVtb3ZlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKKworCW5ta19jaGlwID0gYW1iYV9nZXRfZHJ2ZGF0YShkZXYpOworCWdwaW9jaGlwX3JlbW92ZSgmbm1rX2NoaXAtPmNoaXApOworCWtmcmVlKG5ta19jaGlwKTsKKwlhbWJhX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCXJldHVybiAwOworfQorCisKKy8qIFdlIGhhdmUgMHgxZjA4MDA2MCBhbmQgMHgxZjE4MDA2MCwgYWNjZXB0IGJvdGggdXNpbmcgdGhlIG1hc2sgKi8KK3N0YXRpYyBzdHJ1Y3QgYW1iYV9pZCBubWtfZ3Bpb19pZHNbXSA9IHsKKwl7CisJCS5pZAk9IDB4MWYwODAwNjAsCisJCS5tYXNrCT0gMHhmZmVmZmZmZiwKKwl9LAorCXswLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kcml2ZXIgbm1rX2dwaW9fZHJpdmVyID0geworCS5kcnYgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9ICJncGlvIiwKKwkJfSwKKwkucHJvYmUgPSBubWtfZ3Bpb19wcm9iZSwKKwkucmVtb3ZlID0gbm1rX2dwaW9fcmVtb3ZlLAorCS5zdXNwZW5kID0gTlVMTCwgLyogdG8gYmUgZG9uZSAqLworCS5yZXN1bWUgPSBOVUxMLAorCS5pZF90YWJsZSA9IG5ta19ncGlvX2lkcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5ta19ncGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gYW1iYV9kcml2ZXJfcmVnaXN0ZXIoJm5ta19ncGlvX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwobm1rX2dwaW9faW5pdCk7CisKK01PRFVMRV9BVVRIT1IoIlByYWZ1bGxhIFdBREFTS0FSIGFuZCBBbGVzc2FuZHJvIFJ1YmluaSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOb21hZGlrIEdQSU8gRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2kyYy04ODE1bmhrLmMgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaTJjLTg4MTVuaGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmZlMjVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2kyYy04ODE1bmhrLmMKQEAgLTAsMCArMSw2NSBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworLyoKKyAqIFRoZXJlIGFyZSB0d28gYnVzc2VzIGluIHRoZSA4ODE1TkhLLgorICogVGhleSBjb3VsZCwgaW4gdGhlb3J5LCBiZSBkcml2ZW4gYnkgdGhlIGhhcmR3YXJlIGNvbXBvbmVudCwgYnV0IHdlCisgKiB1c2UgYml0LWJhbmcgdGhyb3VnaCBHUElPIGJ5IG5vdywgdG8ga2VlcCB0aGluZ3Mgc2ltcGxlCisgKi8KKworc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIG5oazg4MTVfaTJjX2RhdGEwID0geworCS8qIGtlZXAgZGVmYXVsdHMgZm9yIHRpbWVvdXRzOyBwaW5zIGFyZSBwdXNoLXB1bGwgYmlkaXJlY3Rpb25hbCAqLworCS5zY2xfcGluID0gNjIsCisJLnNkYV9waW4gPSA2MywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBuaGs4ODE1X2kyY19kYXRhMSA9IHsKKwkvKiBrZWVwIGRlZmF1bHRzIGZvciB0aW1lb3V0czsgcGlucyBhcmUgcHVzaC1wdWxsIGJpZGlyZWN0aW9uYWwgKi8KKwkuc2NsX3BpbiA9IDUzLAorCS5zZGFfcGluID0gNTQsCit9OworCisvKiBmaXJzdCBidXM6IEdQSU8gWFggYW5kIFlZICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBuaGs4ODE1X2kyY19kZXYwID0geworCS5uYW1lCT0gImkyYy1ncGlvIiwKKwkuaWQJPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm5oazg4MTVfaTJjX2RhdGEwLAorCX0sCit9OworLyogc2Vjb25kIGJ1czogR1BJTyBYWCBhbmQgWVkgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5oazg4MTVfaTJjX2RldjEgPSB7CisJLm5hbWUJPSAiaTJjLWdwaW8iLAorCS5pZAk9IDEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbmhrODgxNV9pMmNfZGF0YTEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5oazg4MTVfaTJjX2luaXQodm9pZCkKK3sKKwlubWtfZ3Bpb19zZXRfbW9kZShuaGs4ODE1X2kyY19kYXRhMC5zY2xfcGluLCBOTUtfR1BJT19BTFRfR1BJTyk7CisJbm1rX2dwaW9fc2V0X21vZGUobmhrODgxNV9pMmNfZGF0YTAuc2RhX3BpbiwgTk1LX0dQSU9fQUxUX0dQSU8pOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbmhrODgxNV9pMmNfZGV2MCk7CisKKwlubWtfZ3Bpb19zZXRfbW9kZShuaGs4ODE1X2kyY19kYXRhMS5zY2xfcGluLCBOTUtfR1BJT19BTFRfR1BJTyk7CisJbm1rX2dwaW9fc2V0X21vZGUobmhrODgxNV9pMmNfZGF0YTEuc2RhX3BpbiwgTk1LX0dQSU9fQUxUX0dQSU8pOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbmhrODgxNV9pMmNfZGV2MSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5oazg4MTVfaTJjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmbmhrODgxNV9pMmNfZGV2MCk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJm5oazg4MTVfaTJjX2RldjEpOworCXJldHVybjsKK30KKworbW9kdWxlX2luaXQobmhrODgxNV9pMmNfaW5pdCk7Cittb2R1bGVfZXhpdChuaGs4ODE1X2kyY19leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjM3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0NMS0RFVl9ICisjZGVmaW5lIF9fQVNNX01BQ0hfQ0xLREVWX0gKKworI2RlZmluZSBfX2Nsa19nZXQoY2xrKSAoeyAxOyB9KQorI2RlZmluZSBfX2Nsa19wdXQoY2xrKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzY5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBSdXNzZWxsIEtpbmcKKyAqICBNb3ZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TIGJ5IEJlbiBEb29rcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworCQkubWFjcm8JYWRkcnVhcnQscngKKwkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPworCQltb3ZlcQlccngsICMweDEwMDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCisJCW1vdm5lCVxyeCwgIzB4ZjAwMDAwMDAJQCB2aXJ0dWFsIGJhc2UKKwkJYWRkCVxyeCwgXHJ4LCAjMHgwMDEwMDAwMAorCQlhZGQJXHJ4LCBccngsICMweDAwMGZiMDAwCisJCS5lbmRtCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctcGwwMXguUz4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWYxYWEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIE5vbWFkaWsgcGxhdGZvcm1zCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworCS5tYWNybwlkaXNhYmxlX2ZpcQorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwlsZHIJXGJhc2UsID1JT19BRERSRVNTKE5PTUFESUtfSUNfQkFTRSkKKwkuZW5kbQorCisJLm1hY3JvCWFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkuZW5kbQorCisJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCisJLyogVGhpcyBzdGFuemEgZ2V0cyB0aGUgaXJxIG1hc2sgZnJvbSBvbmUgb2YgdHdvIHN0YXR1cyByZWdpc3RlcnMgKi8KKwltb3YJXGlycW5yLCAjMAorCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjVklDX1JFR19JUlFTUjBdCUAgZ2V0IG1hc2tlZCBzdGF0dXMKKwljbXAJXGlycXN0YXQsICMwCisJYm5lCTEwMDFmCisJYWRkCVxpcnFuciwgXGlycW5yLCAjMzIKKwlsZHIJXGlycXN0YXQsIFtcYmFzZSwgI1ZJQ19SRUdfSVJRU1IxXQlAIGdldCBtYXNrZWQgc3RhdHVzCisKKzEwMDE6CXRzdAlcaXJxc3RhdCwgIzE1CisJYm5lCTEwMDJmCisJYWRkCVxpcnFuciwgXGlycW5yLCAjNAorCW1vdnMJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzQKKwlibmUJMTAwMWIKKzEwMDI6CXRzdAlcaXJxc3RhdCwgIzEKKwlibmUJMTAwM2YKKwlhZGQJXGlycW5yLCBcaXJxbnIsICMxCisJbW92cwlcaXJxc3RhdCwgXGlycXN0YXQsIGxzciAjMQorCWJuZQkxMDAyYgorMTAwMzoJLyogRVEgd2lsbCBiZSBzZXQgaWYgbm8gaXJxcyBwZW5kaW5nICovCisJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1NzdjOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBTdHJ1Y3R1cmVzIGFuZCByZWdpc3RlcnMgZm9yIEdQSU8gYWNjZXNzIGluIHRoZSBOb21hZGlrIFNvQworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqICAgICBBdXRob3I6IFByYWZ1bGxhIFdBREFTS0FSIDxwcmFmdWxsYS53YWRhc2thckBzdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWxlc3NhbmRybyBSdWJpbmkgPHJ1YmluaUB1bmlwdi5pdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfR1BJT19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfR1BJT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisKKy8qCisgKiBUaGVzZSBjdXJyZW50bHkgY2F1c2UgYSBmdW5jdGlvbiBjYWxsIHRvIGhhcHBlbiwgdGhleSBtYXkgYmUgb3B0aW1pemVkCisgKiBpZiBuZWVkZWQgYnkgYWRkaW5nIGNwdS1zcGVjaWZpYyBkZWZpbmVzIHRvIGlkZW50aWZ5IGJsb2NrcworICogKHNlZSBtYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Bpby5oIGFzIGFuIGV4YW1wbGUgdXNpbmcgR1BMUiBldGMpCisgKi8KKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUgIF9fZ3Bpb19nZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUgIF9fZ3Bpb19zZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19jYW5zbGVlcCAgIF9fZ3Bpb19jYW5zbGVlcAorI2RlZmluZSBncGlvX3RvX2lycSAgICAgX19ncGlvX3RvX2lycQorCisvKgorICogIm5ta19ncGlvIiBhbmQgIk5NS19HUElPIiBzdGFuZCBmb3IgIk5vbWFkaWsgR1BJTyIsIGxlYXZpbmcKKyAqIHRoZSAiZ3BpbyIgbmFtZXNwYWNlIGZvciBnZW5lcmljIGFuZCBjcm9zcy1tYWNoaW5lIGZ1bmN0aW9ucworICovCisKKy8qIFJlZ2lzdGVyIGluIHRoZSBsb2dpYyBibG9jayAqLworI2RlZmluZSBOTUtfR1BJT19EQVQJMHgwMAorI2RlZmluZSBOTUtfR1BJT19EQVRTCTB4MDQKKyNkZWZpbmUgTk1LX0dQSU9fREFUQwkweDA4CisjZGVmaW5lIE5NS19HUElPX1BESVMJMHgwYworI2RlZmluZSBOTUtfR1BJT19ESVIJMHgxMAorI2RlZmluZSBOTUtfR1BJT19ESVJTCTB4MTQKKyNkZWZpbmUgTk1LX0dQSU9fRElSQwkweDE4CisjZGVmaW5lIE5NS19HUElPX1NMUEMJMHgxYworI2RlZmluZSBOTUtfR1BJT19BRlNMQQkweDIwCisjZGVmaW5lIE5NS19HUElPX0FGU0xCCTB4MjQKKworI2RlZmluZSBOTUtfR1BJT19SSU1TQwkweDQwCisjZGVmaW5lIE5NS19HUElPX0ZJTVNDCTB4NDQKKyNkZWZpbmUgTk1LX0dQSU9fSVMJMHg0OAorI2RlZmluZSBOTUtfR1BJT19JQwkweDRjCisjZGVmaW5lIE5NS19HUElPX1JXSU1TQwkweDUwCisjZGVmaW5lIE5NS19HUElPX0ZXSU1TQwkweDU0CisjZGVmaW5lIE5NS19HUElPX1dLUwkweDU4CisKKy8qIEFsdGVybmF0ZSBmdW5jdGlvbnM6IGZ1bmN0aW9uIEMgaXMgc2V0IGluIGh3IGJ5IHNldHRpbmcgYm90aCBBIGFuZCBCICovCisjZGVmaW5lIE5NS19HUElPX0FMVF9HUElPCTAKKyNkZWZpbmUgTk1LX0dQSU9fQUxUX0EJMQorI2RlZmluZSBOTUtfR1BJT19BTFRfQgkyCisjZGVmaW5lIE5NS19HUElPX0FMVF9DCShOTUtfR1BJT19BTFRfQSB8IE5NS19HUElPX0FMVF9CKQorCitleHRlcm4gaW50IG5ta19ncGlvX3NldF9tb2RlKGludCBncGlvLCBpbnQgZ3Bpb19tb2RlKTsKK2V4dGVybiBpbnQgbm1rX2dwaW9fZ2V0X21vZGUoaW50IGdwaW8pOworCisvKgorICogUGxhdGZvcm0gZGF0YSB0byByZWdpc3RlciBhIGJsb2NrOiBvbmx5IHRoZSBpbml0aWFsIGdwaW8vaXJxIG51bWJlci4KKyAqLworc3RydWN0IG5ta19ncGlvX3BsYXRmb3JtX2RhdGEgeworCWNoYXIgKm5hbWU7CisJaW50IGZpcnN0X2dwaW87CisJaW50IGZpcnN0X2lycTsKKwlpbnQgcGFyZW50X2lycTsKK307CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMTZkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFyZHdhcmUgZGVmaW5pdGlvbnMgb2YgdGhlIE5vbWFkaWsuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlPVSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorCisvKiBOb21hZGlrIHJlZ2lzdGVycyBsaXZlIGZyb20gMHgxMDAwLjAwMDAgdG8gMHgxMDIzLjAwMDAgLS0gY3VycmVudGx5ICovCisjZGVmaW5lIE5PTUFESUtfSU9fVklSVFVBTAkweEYwMDAwMDAwCS8qIFZBIG9mIElPICAqLworI2RlZmluZSBOT01BRElLX0lPX1BIWVNJQ0FMCTB4MTAwMDAwMDAJLyogUEEgb2YgSU8gKi8KKyNkZWZpbmUgTk9NQURJS19JT19TSVpFCQkweDAwMzAwMDAwCS8qIDNNQiBmb3IgYWxsIHJlZ3MgKi8KKworLyogdXNlZCBpbiBDIGNvZGUsIHNvIGNhc3QgdG8gcHJvcGVyIHR5cGUgKi8KKyNkZWZpbmUgaW9fcDJ2KHgpICgodm9pZCBfX2lvbWVtICopKHgpIFwKKwkJCS0gTk9NQURJS19JT19QSFlTSUNBTCArIE5PTUFESUtfSU9fVklSVFVBTCkKKyNkZWZpbmUgaW9fdjJwKHgpICgodW5zaWduZWQgbG9uZykoeCkgXAorCQkJLSBOT01BRElLX0lPX1ZJUlRVQUwgKyBOT01BRElLX0lPX1BIWVNJQ0FMKQorCisvKiB1c2VkIGluIGFzbSBjb2RlLCBzbyBubyBjYXN0cyAqLworI2RlZmluZSBJT19BRERSRVNTKHgpICgoeCkgLSBOT01BRElLX0lPX1BIWVNJQ0FMICsgTk9NQURJS19JT19WSVJUVUFMKQorCisvKgorICogICBCYXNlIGFkZHJlc3MgZGVmaW5hdGlvbiBmb3IgTm9tYWRpayBPbmNoaXAgTG9naWMgQmxvY2sKKyAqLworI2RlZmluZSBOT01BRElLX0ZTTUNfQkFTRQkweDEwMTAwMDAwCS8qIEZTTUMgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5PTUFESUtfU0RSQU1DX0JBU0UJMHgxMDExMDAwMAkvKiBTRFJBTSBDb250cm9sbGVyICovCisjZGVmaW5lIE5PTUFESUtfQ0xDRENfQkFTRQkweDEwMTIwMDAwCS8qIENMQ0QgQ29udHJvbGxlciAqLworI2RlZmluZSBOT01BRElLX01ESUZfQkFTRQkweDEwMTIwMDAwCS8qIE1ESUYgKi8KKyNkZWZpbmUgTk9NQURJS19ETUEwX0JBU0UJMHgxMDEzMDAwMAkvKiBETUEwIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgTk9NQURJS19JQ19CQVNFCQkweDEwMTQwMDAwCS8qIFZlY3RvcmVkIElycSBDb250cm9sbGVyICovCisjZGVmaW5lIE5PTUFESUtfRE1BMV9CQVNFCTB4MTAxNTAwMDAJLyogRE1BMSBDb250cm9sbGVyICovCisjZGVmaW5lIE5PTUFESUtfVVNCX0JBU0UJMHgxMDE3MDAwMAkvKiBVU0ItT1RHIGNvbmYgcmVnIGJhc2UgKi8KKyNkZWZpbmUgTk9NQURJS19DUllQX0JBU0UJMHgxMDE4MDAwMAkvKiBDcnlwdG8gcHJvY2Vzc29yICovCisjZGVmaW5lIE5PTUFESUtfU0hBMV9CQVNFCTB4MTAxOTAwMDAJLyogU0hBLTEgUHJvY2Vzc29yICovCisjZGVmaW5lIE5PTUFESUtfWFRJX0JBU0UJMHgxMDFBMDAwMAkvKiBYVEkgKi8KKyNkZWZpbmUgTk9NQURJS19STkdfQkFTRQkweDEwMUIwMDAwCS8qIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisjZGVmaW5lIE5PTUFESUtfU1JDX0JBU0UJMHgxMDFFMDAwMAkvKiBTUkMgYmFzZSAqLworI2RlZmluZSBOT01BRElLX1dET0dfQkFTRQkweDEwMUUxMDAwCS8qIFdhdGNoZG9nICovCisjZGVmaW5lIE5PTUFESUtfTVRVMF9CQVNFCTB4MTAxRTIwMDAJLyogTXVsdGlwbGUgVGltZXIgMCAqLworI2RlZmluZSBOT01BRElLX01UVTFfQkFTRQkweDEwMUUzMDAwCS8qIE11bHRpcGxlIFRpbWVyIDEgKi8KKyNkZWZpbmUgTk9NQURJS19HUElPMF9CQVNFCTB4MTAxRTQwMDAJLyogR1BJTzAgKi8KKyNkZWZpbmUgTk9NQURJS19HUElPMV9CQVNFCTB4MTAxRTUwMDAJLyogR1BJTzEgKi8KKyNkZWZpbmUgTk9NQURJS19HUElPMl9CQVNFCTB4MTAxRTYwMDAJLyogR1BJTzIgKi8KKyNkZWZpbmUgTk9NQURJS19HUElPM19CQVNFCTB4MTAxRTcwMDAJLyogR1BJTzMgKi8KKyNkZWZpbmUgTk9NQURJS19SVENfQkFTRQkweDEwMUU4MDAwCS8qIFJlYWwgVGltZSBDbG9jayBiYXNlICovCisjZGVmaW5lIE5PTUFESUtfUE1VX0JBU0UJMHgxMDFFOTAwMAkvKiBQb3dlciBNYW5hZ2VtZW50IFVuaXQgKi8KKyNkZWZpbmUgTk9NQURJS19PV01fQkFTRQkweDEwMUVBMDAwCS8qIE9uZSB3aXJlIG1hc3RlciAqLworI2RlZmluZSBOT01BRElLX1NDUl9CQVNFCTB4MTAxRUYwMDAJLyogU2VjdXJlIENvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5PTUFESUtfTVNQMl9CQVNFCTB4MTAxRjAwMDAJLyogTVNQIDIgaW50ZXJmYWNlICovCisjZGVmaW5lIE5PTUFESUtfTVNQMV9CQVNFCTB4MTAxRjEwMDAJLyogTVNQIDEgaW50ZXJmYWNlICovCisjZGVmaW5lIE5PTUFESUtfVUFSVDJfQkFTRQkweDEwMUYyMDAwCS8qIFVBUlQgMiBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgTk9NQURJS19TU0lSeF9CQVNFCTB4MTAxRjMwMDAJLyogU1NJIDgtY2ggcnggaW50ZXJmYWNlICovCisjZGVmaW5lIE5PTUFESUtfU1NJVHhfQkFTRQkweDEwMUY0MDAwCS8qIFNTSSA4LWNoIHR4IGludGVyZmFjZSAqLworI2RlZmluZSBOT01BRElLX01TSENfQkFTRQkweDEwMUY1MDAwCS8qIE1lbW9yeSBTdGljayhQcm8pIEhvc3QgKi8KKyNkZWZpbmUgTk9NQURJS19TRElfQkFTRQkweDEwMUY2MDAwCS8qIFNELWNhcmQvTU0tQ2FyZCAqLworI2RlZmluZSBOT01BRElLX0kyQzFfQkFTRQkweDEwMUY3MDAwCS8qIEkyQzEgaW50ZXJmYWNlICovCisjZGVmaW5lIE5PTUFESUtfSTJDMF9CQVNFCTB4MTAxRjgwMDAJLyogSTJDMCBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgTk9NQURJS19NU1AwX0JBU0UJMHgxMDFGOTAwMAkvKiBNU1AgMCBpbnRlcmZhY2UgICovCisjZGVmaW5lIE5PTUFESUtfRklSREFfQkFTRQkweDEwMUZBMDAwCS8qIEZJckRBIGludGVyZmFjZSAgKi8KKyNkZWZpbmUgTk9NQURJS19VQVJUMV9CQVNFCTB4MTAxRkIwMDAJLyogVUFSVCAxIGludGVyZmFjZSAqLworI2RlZmluZSBOT01BRElLX1NTUF9CQVNFCTB4MTAxRkMwMDAJLyogU1NQIGludGVyZmFjZSAgKi8KKyNkZWZpbmUgTk9NQURJS19VQVJUMF9CQVNFCTB4MTAxRkQwMDAJLyogVUFSVCAwIGludGVyZmFjZSAqLworI2RlZmluZSBOT01BRElLX1NHQV9CQVNFCTB4MTAxRkUwMDAJLyogU0dBIGludGVyZmFjZSAqLworI2RlZmluZSBOT01BRElLX0wyQ0NfQkFTRQkweDEwMjEwMDAwCS8qIEwyIENhY2hlIGNvbnRyb2xsZXIgKi8KKworLyogT3RoZXIgcmFuZ2VzLCBub3QgZm9yIHAydi92MnAgKi8KKyNkZWZpbmUgTk9NQURJS19CQUNLVVBfUkFNCTB4ODAwMTAwMDAKKyNkZWZpbmUgTk9NQURJS19FQlJPTQkJMHg4MDAwMDAwMAkvKiBFbWJlZGRlZCBib290IFJPTSAqLworI2RlZmluZSBOT01BRElLX0hBTUFDVl9ETUVNX0JBU0UgMHhBMDEwMDAwMAkvKiBIQU1BQ1YgRGF0YSBNZW1vcnkgU3RhcnQgKi8KKyNkZWZpbmUgTk9NQURJS19IQU1BQ1ZfRE1FTV9FTkQJMHhBMDFGRkZGRgkvKiBIQU1BQ1YgRGF0YSBNZW1vcnkgRW5kICovCisjZGVmaW5lIE5PTUFESUtfSEFNQUNBX0RNRU0JMHhBMDIwMDAwMAkvKiBIQU1BQ0EgRGF0YSBNZW1vcnkgU3BhY2UgKi8KKworI2RlZmluZSBOT01BRElLX0ZTTUNfVkEJCUlPX0FERFJFU1MoTk9NQURJS19GU01DX0JBU0UpCisjZGVmaW5lIE5PTUFESUtfTVRVMF9WQQkJSU9fQUREUkVTUyhOT01BRElLX01UVTBfQkFTRSkKKyNkZWZpbmUgTk9NQURJS19NVFUxX1ZBCQlJT19BRERSRVNTKE5PTUFESUtfTVRVMV9CQVNFKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxZWNhMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvaW8uaApAQCAtMCwwICsxLDIyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9pby5oICAgKGNvcGllZCBmcm9tIG1hY2gtc2ExMTAwKQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5Ny0xOTk5IFJ1c3NlbGwgS2luZworICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKiAgMDYtMTItMTk5NyAgUk1LICAgICBDcmVhdGVkLgorICogIDA3LTA0LTE5OTkgIFJNSyAgICAgTWFqb3IgY2xlYW51cAorICovCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKKworLyoKKyAqIFdlIGRvbid0IGFjdHVhbGx5IGhhdmUgcmVhbCBJU0Egbm9yIFBDSSBidXNlcywgYnV0IHRoZXJlIGlzIHNvIG1hbnkKKyAqIGRyaXZlcnMgb3V0IHRoZXJlIHRoYXQgbWlnaHQganVzdCB3b3JrIGlmIHdlIGZha2UgdGhlbS4uLgorICovCisjZGVmaW5lIF9faW8oYSkgICAgICAgICBfX3R5cGVzYWZlX2lvKGEpCisjZGVmaW5lIF9fbWVtX3BjaShhKSAgICAoYSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYWFiYzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogIG1hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvaXJxcy5oCisgKgorICogIENvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0lSUVNfSAorI2RlZmluZSBfX0FTTV9BUkNIX0lSUVNfSAorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIElSUV9WSUNfU1RBUlQJCTAJLyogZmlyc3QgVklDIGludGVycnVwdCBpcyAwICovCisKKy8qCisgKiBJbnRlcnJ1cHQgbnVtYmVycyBnZW5lcmljIGZvciBhbGwgTm9tYWRpayBDaGlwIGN1dHMKKyAqLworI2RlZmluZSBJUlFfV0FUQ0hET0cJCQkwCisjZGVmaW5lIElSUV9TT0ZUSU5UCQkJMQorI2RlZmluZSBJUlFfQ1JZUFRPCQkJMgorI2RlZmluZSBJUlFfT1dNCQkJCTMKKyNkZWZpbmUgSVJRX01UVTAJCQk0CisjZGVmaW5lIElSUV9NVFUxCQkJNQorI2RlZmluZSBJUlFfR1BJTzAJCQk2CisjZGVmaW5lIElSUV9HUElPMQkJCTcKKyNkZWZpbmUgSVJRX0dQSU8yCQkJOAorI2RlZmluZSBJUlFfR1BJTzMJCQk5CisjZGVmaW5lIElSUV9SVENfUlRUCQkJMTAKKyNkZWZpbmUgSVJRX1NTUAkJCQkxMQorI2RlZmluZSBJUlFfVUFSVDAJCQkxMgorI2RlZmluZSBJUlFfRE1BMQkJCTEzCisjZGVmaW5lIElSUV9DTENEX01ESUYJCQkxNAorI2RlZmluZSBJUlFfRE1BMAkJCTE1CisjZGVmaW5lIElSUV9QV1JGQUlMCQkJMTYKKyNkZWZpbmUgSVJRX1VBUlQxCQkJMTcKKyNkZWZpbmUgSVJRX0ZJUkRBCQkJMTgKKyNkZWZpbmUgSVJRX01TUDAJCQkxOQorI2RlZmluZSBJUlFfSTJDMAkJCTIwCisjZGVmaW5lIElSUV9JMkMxCQkJMjEKKyNkZWZpbmUgSVJRX1NETU1DCQkJMjIKKyNkZWZpbmUgSVJRX1VTQk9URwkJCTIzCisjZGVmaW5lIElSUV9TVkFfSVQwCQkJMjQKKyNkZWZpbmUgSVJRX1NWQV9JVDEJCQkyNQorI2RlZmluZSBJUlFfU0FBX0lUMAkJCTI2CisjZGVmaW5lIElSUV9TQUFfSVQxCQkJMjcKKyNkZWZpbmUgSVJRX1VBUlQyCQkJMjgKKyNkZWZpbmUgSVJRX01TUDIJCQkzMQorI2RlZmluZSBJUlFfTDJDQwkJCTQ4CisjZGVmaW5lIElSUV9IUEkJCQkJNDkKKyNkZWZpbmUgSVJRX1NLRQkJCQk1MAorI2RlZmluZSBJUlFfS1AJCQkJNTEKKyNkZWZpbmUgSVJRX01FTVNUCQkJNTQKKyNkZWZpbmUgSVJRX1NHQV9JVAkJCTU4CisjZGVmaW5lIElSUV9VU0JNCQkJNjAKKyNkZWZpbmUgSVJRX01TUDEJCQk2MgorCisjZGVmaW5lIE5PTUFESUtfU09DX05SX0lSUVMJCTY0CisKKy8qIEFmdGVyIGNoaXAtc3BlY2lmaWMgSVJRIG51bWJlcnMgd2UgaGF2ZSB0aGUgR1BJTyBvbmVzICovCisjZGVmaW5lIE5PTUFESUtfTlJfR1BJTwkJCTEyOCAvKiBsYXN0IDQgbm90IHdpcmVkIHRvIHBpbnMgKi8KKyNkZWZpbmUgTk9NQURJS19HUElPX1RPX0lSUShncGlvKQkoKGdwaW8pICsgTk9NQURJS19TT0NfTlJfSVJRUykKKyNkZWZpbmUgTk9NQURJS19JUlFfVE9fR1BJTyhpcnEpCSgoaXJxKSAtIE5PTUFESUtfU09DX05SX0lSUVMpCisjZGVmaW5lIE5SX0lSUVMJCQkJTk9NQURJS19HUElPX1RPX0lSUShOT01BRElLX05SX0dQSU8pCisKKy8qIEZvbGxvd2luZyB0d28gYXJlIHVzZWQgYnkgZW50cnlfbWFjcm8uUywgdG8gYWNjZXNzIG91ciBkdWFsLXZpYyAqLworI2RlZmluZSBWSUNfUkVHX0lSUVNSMAkJMAorI2RlZmluZSBWSUNfUkVHX0lSUVNSMQkJMHgyMAorCisjZW5kaWYgLyogX19BU01fQVJDSF9JUlFTX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1Njg5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqICBtYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworLyoKKyAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgorICovCisjZGVmaW5lIFBIWVNfT0ZGU0VUCVVMKDB4MDAwMDAwMDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9tdHUuaCBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvbXR1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkYTdmMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvbXR1LmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBfX0FTTV9BUkNIX01UVV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTVRVX0gKKworLyoKKyAqIFRoZSBNVFUgZGV2aWNlIGhvc3RzIGZvdXIgZGlmZmVyZW50IGNvdW50ZXJzLCB3aXRoIDQgc2V0IG9mCisgKiByZWdpc3RlcnMuIFRoZXNlIGFyZSByZWdpc3RlciBuYW1lcy4KKyAqLworCisjZGVmaW5lIE1UVV9JTVNDCTB4MDAJLyogSW50ZXJydXB0IG1hc2sgc2V0L2NsZWFyICovCisjZGVmaW5lIE1UVV9SSVMJCTB4MDQJLyogUmF3IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgTVRVX01JUwkJMHgwOAkvKiBNYXNrZWQgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBNVFVfSUNSCQkweDBDCS8qIEludGVycnVwdCBjbGVhciByZWdpc3RlciAqLworCisvKiBwZXItdGltZXIgcmVnaXN0ZXJzIHRha2UgMC4uMyBhcyBhcmd1bWVudCAqLworI2RlZmluZSBNVFVfTFIoeCkJKDB4MTAgKyAweDEwICogKHgpICsgMHgwMCkJLyogTG9hZCB2YWx1ZSAqLworI2RlZmluZSBNVFVfVkFMKHgpCSgweDEwICsgMHgxMCAqICh4KSArIDB4MDQpCS8qIEN1cnJlbnQgdmFsdWUgKi8KKyNkZWZpbmUgTVRVX0NSKHgpCSgweDEwICsgMHgxMCAqICh4KSArIDB4MDgpCS8qIENvbnRyb2wgcmVnICovCisjZGVmaW5lIE1UVV9CR0xSKHgpCSgweDEwICsgMHgxMCAqICh4KSArIDB4MGMpCS8qIEF0IG5leHQgb3ZlcmZsb3cgKi8KKworLyogYml0cyBmb3IgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRVX0NSbl9FTkEJCTB4ODAKKyNkZWZpbmUgTVRVX0NSbl9QRVJJT0RJQwkweDQwCS8qIGlmIDAgPSBmcmVlLXJ1bm5pbmcgKi8KKyNkZWZpbmUgTVRVX0NSbl9QUkVTQ0FMRV9NQVNLCTB4MGMKKyNkZWZpbmUgTVRVX0NSbl9QUkVTQ0FMRV8xCQkweDAwCisjZGVmaW5lIE1UVV9DUm5fUFJFU0NBTEVfMTYJCTB4MDQKKyNkZWZpbmUgTVRVX0NSbl9QUkVTQ0FMRV8yNTYJCTB4MDgKKyNkZWZpbmUgTVRVX0NSbl8zMkJJVFMJCTB4MDIKKyNkZWZpbmUgTVRVX0NSbl9PTkVTSE9UCQkweDAxCS8qIGlmIDAgPSB3cmFwcyByZWxvYWRpbmcgZnJvbSBCR0xSKi8KKworLyogT3RoZXIgcmVnaXN0ZXJzIGFyZSB1c3VhbCBhbWJhL3ByaW1lY2VsbCByZWdpc3RlcnMsIGN1cnJlbnRseSBub3QgdXNlZCAqLworI2RlZmluZSBNVFVfSVRDUgkweGZmMAorI2RlZmluZSBNVFVfSVRPUAkweGZmNAorCisjZGVmaW5lIE1UVV9QRVJJUEhfSUQwCTB4ZmUwCisjZGVmaW5lIE1UVV9QRVJJUEhfSUQxCTB4ZmU0CisjZGVmaW5lIE1UVV9QRVJJUEhfSUQyCTB4ZmU4CisjZGVmaW5lIE1UVV9QRVJJUEhfSUQzCTB4ZmVDCisKKyNkZWZpbmUgTVRVX1BDRUxMMAkweGZmMAorI2RlZmluZSBNVFVfUENFTEwxCTB4ZmY0CisjZGVmaW5lIE1UVV9QQ0VMTDIJMHhmZjgKKyNkZWZpbmUgTVRVX1BDRUxMMwkweGZmQworCisjZW5kaWYgLyogX19BU01fQVJDSF9NVFVfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3NldHVwLmggYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3NldHVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRlNDY4YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvc2V0dXAuaApAQCAtMCwwICsxLDIyIEBACisKKy8qCisgKiBUaGVzZSBzeW1ib2xzIGFyZSBuZWVkZWQgZm9yIGJvYXJkLXNwZWNpZmljIGZpbGVzIHRvIGNhbGwgdGhlaXIKKyAqIG93biBjcHUtc3BlY2lmaWMgZmlsZXMKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfU0VUVVBfSAorI2RlZmluZSBfX0FTTV9BUkNIX1NFVFVQX0gKKworI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpZmRlZiBDT05GSUdfTk9NQURJS184ODE1CisKK2V4dGVybiB2b2lkIGNwdTg4MTVfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgY3B1ODgxNV9wbGF0Zm9ybV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgY3B1ODgxNV9pbml0X2lycSh2b2lkKTsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIG5vbWFkaWtfdGltZXI7CisKKyNlbmRpZiAvKiBOT01BRElLXzg4MTUgKi8KKworI2VuZGlmIC8qICBfX0FTTV9BUkNIX1NFVFVQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTlmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggU1RNaWNyb2VsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwkvKgorCSAqIFRoaXMgc2hvdWxkIGRvIGFsbCB0aGUgY2xvY2sgc3dpdGNoaW5nCisJICogYW5kIHdhaXQgZm9yIGludGVycnVwdCB0cmlja3MKKwkgKi8KKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwl2b2lkIF9faW9tZW0gKnNyY19yc3RzciA9IGlvX3AydihOT01BRElLX1NSQ19CQVNFICsgMHgxOCk7CisKKwkvKiBGSVhNRTogdXNlIGVncGlvIHdoZW4gaW1wbGVtZW50ZWQgKi8KKworCS8qIFdyaXRlIGFueXRoaW5nIHRvIFJlc2V0IHN0YXR1cyByZWdpc3RlciAqLworCXdyaXRlbCgxLCBzcmNfcnN0c3IpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMThiODg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FTTV9BUkNIX1RJTUVYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9USU1FWF9ICisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFICAgICAgICAgMjQwMDAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxMDAzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFNUTWljcm9lbGVjdHJvbmljcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKy8qIHdlIG5lZWQgdGhlIGNvbnN0YW50cyBpbiBhbWJhL3NlcmlhbC5oLCBidXQgaXQgcmVmZXJzIHRvIGFtYmFfZGV2aWNlICovCitzdHJ1Y3QgYW1iYV9kZXZpY2U7CisjaW5jbHVkZSA8bGludXgvYW1iYS9zZXJpYWwuaD4KKworI2RlZmluZSBOT01BRElLX1VBUlRfRFIJCTB4MTAxRkIwMDAKKyNkZWZpbmUgTk9NQURJS19VQVJUX0xDUkgJMHgxMDFGQjAyYworI2RlZmluZSBOT01BRElLX1VBUlRfQ1IJCTB4MTAxRkIwMzAKKyNkZWZpbmUgTk9NQURJS19VQVJUX0ZSCQkweDEwMUZCMDE4CisKK3N0YXRpYyB2b2lkIHB1dGMoY29uc3QgY2hhciBjKQoreworCS8qIERvIG5vdGhpbmcgaWYgdGhlIFVBUlQgaXMgbm90IGVuYWJsZWQuICovCisJaWYgKCEocmVhZGIoTk9NQURJS19VQVJUX0NSKSAmIFVBUlQwMXhfQ1JfVUFSVEVOKSkKKwkJcmV0dXJuOworCisJaWYgKGMgPT0gJ1xuJykKKwkJcHV0YygnXHInKTsKKworCXdoaWxlIChyZWFkYihOT01BRElLX1VBUlRfRlIpICYgVUFSVDAxeF9GUl9UWEZGKQorCQliYXJyaWVyKCk7CisJd3JpdGViKGMsIE5PTUFESUtfVUFSVF9EUik7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoKHZvaWQpCit7CisJaWYgKCEocmVhZGIoTk9NQURJS19VQVJUX0NSKSAmIFVBUlQwMXhfQ1JfVUFSVEVOKSkKKwkJcmV0dXJuOworCXdoaWxlIChyZWFkYihOT01BRElLX1VBUlRfRlIpICYgVUFSVDAxeF9GUl9CVVNZKQorCQliYXJyaWVyKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2RlY29tcF9zZXR1cCh2b2lkKQoreworfQorCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKSAvKiBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTJlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDIgQEAKKworI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAweGU4MDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNzM4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvdGltZXIuYwpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW5vbWFkaWsvdGltZXIuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGVzc2FuZHJvIFJ1YmluaSwgc29tZXdoYXQgYmFzZWQgb24gYXQ5MXNhbTkyNngKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPG1hY2gvbXR1Lmg+CisKKyNkZWZpbmUgVElNRVJfQ1RSTAkweDgwCS8qIE5vIGRpdmlzb3IgKi8KKyNkZWZpbmUgVElNRVJfUEVSSU9ESUMJMHg0MAorI2RlZmluZSBUSU1FUl9TWjMyQklUCTB4MDIKKworLyogSW5pdGlhbCB2YWx1ZSBmb3IgU1JDIGNvbnRyb2wgcmVnaXN0ZXI6IGFsbCB0aW1lcnMgdXNlIE1YVEFMLzggc291cmNlICovCisjZGVmaW5lIFNSQ19DUl9JTklUX01BU0sJMHgwMDAwN2ZmZgorI2RlZmluZSBTUkNfQ1JfSU5JVF9WQUwJCTB4MmFhYTgwMDAKKworc3RhdGljIHUzMglubWRrX2NvdW50OwkJLyogYWNjdW11bGF0ZWQgY291bnQgKi8KK3N0YXRpYyB1MzIJbm1ka19jeWNsZTsJCS8qIHdyaXRlLW9uY2UgKi8KK3N0YXRpYyBfX2lvbWVtIHZvaWQgKm10dV9iYXNlOworCisvKgorICogY2xvY2tzb3VyY2U6IHRoZSBNVFUgZGV2aWNlIGlzIGEgZGVjcmVtZW50aW5nIGNvdW50ZXJzLCBzbyB3ZSBuZWdhdGUKKyAqIHRoZSB2YWx1ZSBiZWluZyByZWFkLgorICovCitzdGF0aWMgY3ljbGVfdCBubWRrX3JlYWRfdGltZXIoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwl1MzIgY291bnQgPSByZWFkbChtdHVfYmFzZSArIE1UVV9WQUwoMCkpOworCXJldHVybiBubWRrX2NvdW50ICsgbm1ka19jeWNsZSAtIGNvdW50OworCit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2Ugbm1ka19jbGtzcmMgPSB7CisJLm5hbWUJCT0gIm10dV8wIiwKKwkucmF0aW5nCQk9IDEyMCwKKwkucmVhZAkJPSBubWRrX3JlYWRfdGltZXIsCisJLnNoaWZ0CQk9IDIwLAorCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKK307CisKKy8qCisgKiBDbG9ja2V2ZW50IGRldmljZTogY3VycmVudGx5IG9ubHkgcGVyaW9kaWMgbW9kZSBpcyBzdXBwb3J0ZWQKKyAqLworc3RhdGljIHZvaWQgbm1ka19jbGtldnRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCSAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQkvKiBlbmFibGUgaW50ZXJydXB0cyAtLSBhbmQgY291bnQgY3VycmVudCB2YWx1ZT8gKi8KKwkJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJd3JpdGVsKHJlYWRsKG10dV9iYXNlICsgTVRVX0lNU0MpIHwgMSwgbXR1X2Jhc2UgKyBNVFVfSU1TQyk7CisJCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJQlVHKCk7IC8qIE5vdCBzdXBwb3J0ZWQsIHlldCAqLworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJCS8qIGRpc2FibGUgaXJxICovCisJCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXdyaXRlbChyZWFkbChtdHVfYmFzZSArIE1UVV9JTVNDKSAmIH4xLCBtdHVfYmFzZSArIE1UVV9JTVNDKTsKKwkJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2Ugbm1ka19jbGtldnQgPSB7CisJLm5hbWUJCT0gIm10dV8wIiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQywKKwkuc2hpZnQJCT0gMzIsCisJLnJhdGluZwkJPSAxMDAsCisJLnNldF9tb2RlCT0gbm1ka19jbGtldnRfbW9kZSwKK307CisKKy8qCisgKiBJUlEgSGFuZGxlciBmb3IgdGhlIHRpbWVyIDAgb2YgdGhlIE1UVSBibG9jay4gVGhlIGlycSBpcyBub3Qgc2hhcmVkCisgKiBhcyB3ZSBhcmUgdGhlIG9ubHkgdXNlcnMgb2YgbXR1MCBieSBub3cuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBubWRrX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJLyogYWNrOiAiaW50ZXJydXB0IGNsZWFyIHJlZ2lzdGVyIiAqLworCXdyaXRlbCggMSA8PCAwLCBtdHVfYmFzZSArIE1UVV9JQ1IpOworCisJLyogd2UgY2FuJ3QgY291bnQgbG9zdCB0aWNrcywgdW5mb3J0dW5hdGVseSAqLworCW5tZGtfY291bnQgKz0gbm1ka19jeWNsZTsKKwlubWRrX2Nsa2V2dC5ldmVudF9oYW5kbGVyKCZubWRrX2Nsa2V2dCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBTZXQgdXAgdGltZXIgaW50ZXJydXB0LCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcy4KKyAqLworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbm1ka190aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gIk5vbWFkaWsgVGltZXIgVGljayIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5oYW5kbGVyCT0gbm1ka190aW1lcl9pbnRlcnJ1cHQsCit9OworCitzdGF0aWMgdm9pZCBubWRrX3RpbWVyX3Jlc2V0KHZvaWQpCit7CisJdTMyIGNyOworCisJd3JpdGVsKDAsIG10dV9iYXNlICsgTVRVX0NSKDApKTsgLyogb2ZmICovCisKKwkvKiBjb25maWd1cmUgbG9hZCBhbmQgYmFja2dyb3VuZC1sb2FkLCBhbmQgZmlyZSBpdCB1cCAqLworCXdyaXRlbChubWRrX2N5Y2xlLCBtdHVfYmFzZSArIE1UVV9MUigwKSk7CisJd3JpdGVsKG5tZGtfY3ljbGUsIG10dV9iYXNlICsgTVRVX0JHTFIoMCkpOworCWNyID0gTVRVX0NSbl9QRVJJT0RJQyB8IE1UVV9DUm5fUFJFU0NBTEVfMSB8IE1UVV9DUm5fMzJCSVRTOworCXdyaXRlbChjciwgbXR1X2Jhc2UgKyBNVFVfQ1IoMCkpOworCXdyaXRlbChjciB8IE1UVV9DUm5fRU5BLCBtdHVfYmFzZSArIE1UVV9DUigwKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBubWRrX3RpbWVyX2luaXQodm9pZCkKK3sKKwl1MzIgc3JjX2NyOworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlpbnQgYml0czsKKworCXJhdGUgPSBDTE9DS19USUNLX1JBVEU7IC8qIDIuNE1IeiAqLworCW5tZGtfY3ljbGUgPSAocmF0ZSArIEhaLzIpIC8gSFo7CisKKwkvKiBDb25maWd1cmUgdGltZXIgc291cmNlcyBpbiAic3lzdGVtIHJlc2V0IGNvbnRyb2xsZXIiIGN0cmwgcmVnICovCisJc3JjX2NyID0gcmVhZGwoaW9fcDJ2KE5PTUFESUtfU1JDX0JBU0UpKTsKKwlzcmNfY3IgJj0gU1JDX0NSX0lOSVRfTUFTSzsKKwlzcmNfY3IgfD0gU1JDX0NSX0lOSVRfVkFMOworCXdyaXRlbChzcmNfY3IsIGlvX3AydihOT01BRElLX1NSQ19CQVNFKSk7CisKKwkvKiBTYXZlIGdsb2JhbCBwb2ludGVyIHRvIG10dSwgdXNlZCBieSBmdW5jdGlvbnMgYWJvdmUgKi8KKwltdHVfYmFzZSA9IGlvX3AydihOT01BRElLX01UVTBfQkFTRSk7CisKKwkvKiBJbml0IHRoZSB0aW1lciBhbmQgcmVnaXN0ZXIgY2xvY2tzb3VyY2UgKi8KKwlubWRrX3RpbWVyX3Jlc2V0KCk7CisKKwlubWRrX2Nsa3NyYy5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChyYXRlLCBubWRrX2Nsa3NyYy5zaGlmdCk7CisJYml0cyA9ICA4KnNpemVvZihubWRrX2NvdW50KTsKKwlubWRrX2Nsa3NyYy5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSyhiaXRzKTsKKworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZubWRrX2Nsa3NyYyk7CisKKwkvKiBSZWdpc3RlciBpcnEgYW5kIGNsb2NrZXZlbnRzICovCisJc2V0dXBfaXJxKElSUV9NVFUwLCAmbm1ka190aW1lcl9pcnEpOworCW5tZGtfY2xrZXZ0Lm11bHQgPSBkaXZfc2MocmF0ZSwgTlNFQ19QRVJfU0VDLCBubWRrX2Nsa2V2dC5zaGlmdCk7CisJbm1ka19jbGtldnQuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZubWRrX2Nsa2V2dCk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgbm9tYWRpa190aW1lciA9IHsKKwkuaW5pdAkJPSBubWRrX3RpbWVyX2luaXQsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYwppbmRleCBiMGM3NDAyLi4xYjIyMzA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYwpAQCAtMzksNyArMzksNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIHNkcDQ0MzBfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkuZW5hYmxlZF91YXJ0cwk9ICgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSwKKwkuZW5hYmxlZF91YXJ0cwk9ICgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSB8ICgxIDw8IDMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgc2RwNDQzMF9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKaW5kZXggOTliNmUxNS4uYTg0NmFhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYwpAQCAtMTI4LDYgKzEyOCw3IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCisJCS5idWZmZXJfc2l6ZQk9IDB4NkYsCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMzRYWF9NQ0JTUDJfQkFTRSwKQEAgLTEzNiw2ICsxMzcsNyBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMl9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuYnVmZmVyX3NpemUJPSAweDNGRiwKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQM19CQVNFLApAQCAtMTQ0LDYgKzE0Niw3IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDNfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCisJCS5idWZmZXJfc2l6ZQk9IDB4NkYsCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMzRYWF9NQ0JTUDRfQkFTRSwKQEAgLTE1Miw2ICsxNTUsNyBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNF9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A0X0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuYnVmZmVyX3NpemUJPSAweDZGLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDM0WFhfTUNCU1A1X0JBU0UsCkBAIC0xNjAsNiArMTY0LDcgQEAKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDVfSVJRX1JYLAogCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQNV9JUlFfVFgsCiAJCS5vcHMJCT0gJm9tYXAyX21jYnNwX29wcywKKwkJLmJ1ZmZlcl9zaXplCT0gMHg2RiwKIAl9LAogfTsKICNkZWZpbmUgT01BUDM0WFhfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDM0eHhfbWNic3BfcGRhdGEpCkBAIC0xNjgsNiArMTczLDQyIEBACiAjZGVmaW5lIE9NQVAzNFhYX01DQlNQX1BEQVRBX1NaCQkwCiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDQ0eHhfbWNic3BfcGRhdGFbXSA9IHsKKwl7CisJCS5waHlzX2Jhc2UgICAgICA9IE9NQVA0NFhYX01DQlNQMV9CQVNFLAorCQkuZG1hX3J4X3N5bmMgICAgPSBPTUFQNDRYWF9ETUFfTUNCU1AxX1JYLAorCQkuZG1hX3R4X3N5bmMgICAgPSBPTUFQNDRYWF9ETUFfTUNCU1AxX1RYLAorCQkucnhfaXJxICAgICAgICAgPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYLAorCQkudHhfaXJxICAgICAgICAgPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1RYLAorCQkub3BzICAgICAgICAgICAgPSAmb21hcDJfbWNic3Bfb3BzLAorCX0sCisJeworCQkucGh5c19iYXNlICAgICAgPSBPTUFQNDRYWF9NQ0JTUDJfQkFTRSwKKwkJLmRtYV9yeF9zeW5jICAgID0gT01BUDQ0WFhfRE1BX01DQlNQMl9SWCwKKwkJLmRtYV90eF9zeW5jICAgID0gT01BUDQ0WFhfRE1BX01DQlNQMl9UWCwKKwkJLnJ4X2lycSAgICAgICAgID0gSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCwKKwkJLnR4X2lycSAgICAgICAgID0gSU5UXzI0WFhfTUNCU1AyX0lSUV9UWCwKKwkJLm9wcyAgICAgICAgICAgID0gJm9tYXAyX21jYnNwX29wcywKKwl9LAorCXsKKwkJLnBoeXNfYmFzZSAgICAgID0gT01BUDQ0WFhfTUNCU1AzX0JBU0UsCisJCS5kbWFfcnhfc3luYyAgICA9IE9NQVA0NFhYX0RNQV9NQ0JTUDNfUlgsCisJCS5kbWFfdHhfc3luYyAgICA9IE9NQVA0NFhYX0RNQV9NQ0JTUDNfVFgsCisJCS5yeF9pcnEgICAgICAgICA9IElOVF8yNFhYX01DQlNQM19JUlFfUlgsCisJCS50eF9pcnEgICAgICAgICA9IElOVF8yNFhYX01DQlNQM19JUlFfVFgsCisJCS5vcHMgICAgICAgICAgICA9ICZvbWFwMl9tY2JzcF9vcHMsCisJfSwKKwl7CisJCS5waHlzX2Jhc2UgICAgICA9IE9NQVA0NFhYX01DQlNQNF9CQVNFLAorCQkuZG1hX3J4X3N5bmMgICAgPSBPTUFQNDRYWF9ETUFfTUNCU1A0X1JYLAorCQkuZG1hX3R4X3N5bmMgICAgPSBPTUFQNDRYWF9ETUFfTUNCU1A0X1RYLAorCQkucnhfaXJxICAgICAgICAgPSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1JYLAorCQkudHhfaXJxICAgICAgICAgPSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1RYLAorCQkub3BzICAgICAgICAgICAgPSAmb21hcDJfbWNic3Bfb3BzLAorCX0sCit9OworI2RlZmluZSBPTUFQNDRYWF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwNDR4eF9tY2JzcF9wZGF0YSkKKwogc3RhdGljIGludCBfX2luaXQgb21hcDJfbWNic3BfaW5pdCh2b2lkKQogewogCWlmIChjcHVfaXNfb21hcDI0MjAoKSkKQEAgLTE3Niw2ICsyMTcsOCBAQAogCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDI0MzBfTUNCU1BfUERBVEFfU1o7CiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpKQogCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDM0WFhfTUNCU1BfUERBVEFfU1o7CisJaWYgKGNwdV9pc19vbWFwNDR4eCgpKQorCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDQ0WFhfTUNCU1BfUERBVEFfU1o7CiAKIAltY2JzcF9wdHIgPSBremFsbG9jKG9tYXBfbWNic3BfY291bnQgKiBzaXplb2Yoc3RydWN0IG9tYXBfbWNic3AgKiksCiAJCQkJCQkJCUdGUF9LRVJORUwpOwpAQCAtMTkxLDYgKzIzNCw5IEBACiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpKQogCQlvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhvbWFwMzR4eF9tY2JzcF9wZGF0YSwKIAkJCQkJCU9NQVAzNFhYX01DQlNQX1BEQVRBX1NaKTsKKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKG9tYXA0NHh4X21jYnNwX3BkYXRhLAorCQkJCQkJT01BUDQ0WFhfTUNCU1BfUERBVEFfU1opOwogCiAJcmV0dXJuIG9tYXBfbWNic3BfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKaW5kZXggYTc0MjFhNS4uY2UyMjM0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCkBAIC0xMDksNiArMTA5LDE2IEBACiAJCS5yZWdzaGlmdAk9IDIsCiAJCS51YXJ0Y2xrCT0gT01BUDI0WFhfQkFTRV9CQVVEICogMTYsCiAJfSwgeworI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQ0X0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDRfQkFTRSwKKwkJLmlycQkJPSA3MCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAorCX0sIHsKKyNlbmRpZgogCQkuZmxhZ3MJCT0gMAogCX0KIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnCmluZGV4IDJjNzAzNWQuLmMzZDUxM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnCkBAIC04OSw2ICs4OSwyNyBAQAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCiAJICBMYUNpZSBFdGhlcm5ldCBEaXNrIG1pbmkgVjIuCiAKK2NvbmZpZyBNQUNIX0QyTkVUCisJYm9vbCAiTGFDaWUgZDIgTmV0d29yayIKKwlzZWxlY3QgSTJDX0JPQVJESU5GTworCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgTGFDaWUgZDIgTmV0d29yayBOQVMuCisKK2NvbmZpZyBNQUNIX0JJR0RJU0sKKwlib29sICJMYUNpZSBCaWcgRGlzayBOZXR3b3JrIgorCXNlbGVjdCBJMkNfQk9BUkRJTkZPCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisJICBMYUNpZSBCaWcgRGlzayBOZXR3b3JrIE5BUy4KKworY29uZmlnIE1BQ0hfTkVUMkJJRworCWJvb2wgIkxhQ2llIDJCaWcgTmV0d29yayIKKwlzZWxlY3QgSTJDX0JPQVJESU5GTworCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgTGFDaWUgMkJpZyBOZXR3b3JrIE5BUy4KKwogY29uZmlnIE1BQ0hfTVNTMgogCWJvb2wgIk1heHRvciBTaGFyZWQgU3RvcmFnZSBJSSIKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvTWFrZWZpbGUKaW5kZXggZWRjMzhlMi4uODk3NzJmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9NYWtlZmlsZQpAQCAtMTIsNiArMTIsOSBAQAogb2JqLSQoQ09ORklHX01BQ0hfVFM3OFhYKQkrPSB0czc4eHgtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfTVYyMTIwKQkrPSBtdjIxMjAtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfRURNSU5JX1YyKQkrPSBlZG1pbmlfdjItc2V0dXAubworb2JqLSQoQ09ORklHX01BQ0hfRDJORVQpCSs9IGQybmV0LXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX0JJR0RJU0spCSs9IGQybmV0LXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX05FVDJCSUcpCSs9IG5ldDJiaWctc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfTVNTMikJCSs9IG1zczItc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfV05SODU0VCkJKz0gd25yODU0dC1zZXR1cC5vCiBvYmotJChDT05GSUdfTUFDSF9SRDg4RjUxODFMX0dFKQkrPSByZDg4ZjUxODFsLWdlLXNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9hZGRyLW1hcC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2FkZHItbWFwLmMKaW5kZXggZDc4NzMxZS4uMWE1ZDZhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2FkZHItbWFwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2FkZHItbWFwLmMKQEAgLTg0LDcgKzg0LDggQEAKIAlvcmlvbjV4X3BjaWVfaWQoJmRldiwgJnJldik7CiAJaWYgKChkZXYgPT0gTVY4OEY1MjgxX0RFVl9JRCAmJiB3aW4gPCA0KQogCSAgICB8fCAoZGV2ID09IE1WODhGNTE4Ml9ERVZfSUQgJiYgd2luIDwgMikKLQkgICAgfHwgKGRldiA9PSBNVjg4RjUxODFfREVWX0lEICYmIHdpbiA8IDIpKQorCSAgICB8fCAoZGV2ID09IE1WODhGNTE4MV9ERVZfSUQgJiYgd2luIDwgMikKKwkgICAgfHwgKGRldiA9PSBNVjg4RjYxODNfREVWX0lEICYmIHdpbiA8IDQpKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2QybmV0LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZDJuZXQtc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDRiZjc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2QybmV0LXNldHVwLmMKQEAgLTAsMCArMSwzNjUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW9yaW9uNXgvZDJuZXQtc2V0dXAuYworICoKKyAqIExhQ2llIGQyTmV0d29yayBhbmQgQmlnIERpc2sgTmV0d29yayBOQVMgc2V0dXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2ltb24gR3Vpbm90IDxzZ3Vpbm90QGxhY2llLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxtYWNoL29yaW9uNXguaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJtcHAuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMYUNpZSBkMiBOZXR3b3JrIEluZm8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogNTEyS0IgTk9SIGZsYXNoIERldmljZSBidXMgYm9vdCBjaGlwIHNlbGVjdAorICovCisKKyNkZWZpbmUgRDJORVRfTk9SX0JPT1RfQkFTRQkJMHhmZmY4MDAwMAorI2RlZmluZSBEMk5FVF9OT1JfQk9PVF9TSVpFCQlTWl81MTJLCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogNTEyS0IgTk9SIEZsYXNoIG9uIEJvb3QgRGV2aWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRPRE86IENoZWNrIHdyaXRlIHN1cHBvcnQgb24gZmxhc2ggTVgyOUxWNDAwQ0JUQy03MEcKKyAqLworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZDJuZXRfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIkZ1bGw1MTJrYiIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gMCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBkMm5ldF9ub3JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMSwKKwkucGFydHMJCT0gZDJuZXRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGQybmV0X3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkMm5ldF9ub3JfZmxhc2hfcmVzb3VyY2UgPSB7CisJLmZsYWdzCQkJPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJCQk9IEQyTkVUX05PUl9CT09UX0JBU0UsCisJLmVuZAkJCT0gRDJORVRfTk9SX0JPT1RfQkFTRQorCQkJCQkrIEQyTkVUX05PUl9CT09UX1NJWkUgLSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZDJuZXRfbm9yX2ZsYXNoID0geworCS5uYW1lCQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZkMm5ldF9ub3JfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCQk9IDEsCisJLnJlc291cmNlCQk9ICZkMm5ldF9ub3JfZmxhc2hfcmVzb3VyY2UsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEV0aGVybmV0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGQybmV0X2V0aF9kYXRhID0geworCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDgpLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJMkMgZGV2aWNlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBpMmMgYWRkciB8IGNoaXAgICAgICAgICB8IGRlc2NyaXB0aW9uCisgKiAweDMyICAgICB8IFJpY29oIDVDMzcyYiB8IFJUQworICogMHgzZSAgICAgfCBHTVQgRzc2MiAgICAgfCBQV00gZmFuIGNvbnRyb2xsZXIKKyAqIDB4NTAgICAgIHwgSFQyNExDMDggICAgIHwgZWVwcm9tICgxa0IpCisgKgorICogVE9ETzogQWRkIEc3NjIgc3VwcG9ydCB0byB0aGUgZzc2MGEgZHJpdmVyLgorICovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZDJuZXRfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJyczVjMzcyYiIsIDB4MzIpLAorCX0sIHsKKwkJSTJDX0JPQVJEX0lORk8oIjI0YzA4IiwgMHg1MCksCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0FUQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIGQybmV0X3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cwk9IDIsCit9OworCisjZGVmaW5lIEQyTkVUX0dQSU9fU0FUQTBfUE9XRVIJMworI2RlZmluZSBEMk5FVF9HUElPX1NBVEExX1BPV0VSCTEyCisKK3N0YXRpYyB2b2lkIF9faW5pdCBkMm5ldF9zYXRhX3Bvd2VyX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KEQyTkVUX0dQSU9fU0FUQTBfUE9XRVIsICJTQVRBMCBwb3dlciIpOworCWlmIChlcnIgPT0gMCkgeworCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoRDJORVRfR1BJT19TQVRBMF9QT1dFUiwgMSk7CisJCWlmIChlcnIpCisJCQlncGlvX2ZyZWUoRDJORVRfR1BJT19TQVRBMF9QT1dFUik7CisJfQorCWlmIChlcnIpCisJCXByX2VycigiZDJuZXQ6IGZhaWxlZCB0byBjb25maWd1cmUgU0FUQTAgcG93ZXIgR1BJT1xuIik7CisKKwllcnIgPSBncGlvX3JlcXVlc3QoRDJORVRfR1BJT19TQVRBMV9QT1dFUiwgIlNBVEExIHBvd2VyIik7CisJaWYgKGVyciA9PSAwKSB7CisJCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChEMk5FVF9HUElPX1NBVEExX1BPV0VSLCAxKTsKKwkJaWYgKGVycikKKwkJCWdwaW9fZnJlZShEMk5FVF9HUElPX1NBVEExX1BPV0VSKTsKKwl9CisJaWYgKGVycikKKwkJcHJfZXJyKCJkMm5ldDogZmFpbGVkIHRvIGNvbmZpZ3VyZSBTQVRBMSBwb3dlciBHUElPXG4iKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIExFRCdzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoZSBibHVlIGZyb250IExFRCBpcyB3aXJlZCB0byB0aGUgQ1BMRCBhbmQgY2FuIGJsaW5rIGluIHJlbGF0aW9uIHdpdGggdGhlCisgKiBTQVRBIGFjdGl2aXR5LiBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgdG8gbWFrZSB0aGlzIExFRCBjb21wYXRpYmxlIHdpdGgKKyAqIHRoZSBsZWRzLWdwaW8gZHJpdmVyOiBNUFAxNCBhbmQgTVBQMTUgYXJlIGNvbmZpZ3VyZWQgdG8gYWN0IGxpa2Ugb3V0cHV0CisgKiBHUElPJ3MgYW5kIGhhdmUgdG8gc3RheSBpbiBhbiBhY3RpdmUgc3RhdGUuIFRoaXMgaXMgbmVlZGVkIHRvIHNldCB0aGUgYmx1ZQorICogTEVEIGluIGEgImZpeCBvbiIgc3RhdGUgcmVnYXJkbGVzcyBvZiB0aGUgU0FUQSBhY3Rpdml0eS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGFycmF5IGRldGFpbCB0aGUgZGlmZmVyZW50IExFRCByZWdpc3RlcnMgYW5kIHRoZSBjb21iaW5hdGlvbgorICogb2YgdGhlaXIgcG9zc2libGUgdmFsdWVzOgorICoKKyAqIGxlZF9vZmYgICB8IGJsaW5rX2N0cmwgfCBTQVRBIGFjdGl2ZSB8IExFRCBzdGF0ZQorICogICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAqICAgIDEgICAgICB8ICAgICB4ICAgICAgfCAgICAgIHggICAgICB8ICBvZmYKKyAqICAgIDAgICAgICB8ICAgICAwICAgICAgfCAgICAgIDAgICAgICB8ICBvZmYKKyAqICAgIDAgICAgICB8ICAgICAxICAgICAgfCAgICAgIDAgICAgICB8ICBibGluayAocmF0ZSAzMDBtcykKKyAqICAgIDAgICAgICB8ICAgICB4ICAgICAgfCAgICAgIDEgICAgICB8ICBvbgorICoKKyAqIE5vdGVzOiBUaGUgYmx1ZSBhbmQgdGhlIHJlZCBmcm9udCBMRUQncyBjYW4ndCBiZSBvbiBhdCB0aGUgc2FtZSB0aW1lLgorICogICAgICAgIFJlZCBMRUQgaGF2ZSBwcmlvcml0eS4KKyAqLworCisjZGVmaW5lIEQyTkVUX0dQSU9fUkVEX0xFRAkJNgorI2RlZmluZSBEMk5FVF9HUElPX0JMVUVfTEVEX0JMSU5LX0NUUkwJMTYKKyNkZWZpbmUgRDJORVRfR1BJT19CTFVFX0xFRF9PRkYJCTIzCisjZGVmaW5lIEQyTkVUX0dQSU9fU0FUQTBfQUNUCQkxNAorI2RlZmluZSBEMk5FVF9HUElPX1NBVEExX0FDVAkJMTUKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkMm5ldF9sZWRzW10gPSB7CisJeworCQkubmFtZSA9ICJkMm5ldDpibHVlOnBvd2VyIiwKKwkJLmdwaW8gPSBEMk5FVF9HUElPX0JMVUVfTEVEX09GRiwKKwkJLmFjdGl2ZV9sb3cgPSAxLAorCX0sCisJeworCQkubmFtZSA9ICJkMm5ldDpyZWQ6ZmFpbCIsCisJCS5ncGlvID0gRDJORVRfR1BJT19SRURfTEVELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZDJuZXRfbGVkX2RhdGEgPSB7CisJLm51bV9sZWRzID0gQVJSQVlfU0laRShkMm5ldF9sZWRzKSwKKwkubGVkcyA9IGQybmV0X2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkMm5ldF9ncGlvX2xlZHMgPSB7CisJLm5hbWUgICAgICAgICAgID0gImxlZHMtZ3BpbyIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmZDJuZXRfbGVkX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkMm5ldF9ncGlvX2xlZHNfaW5pdCh2b2lkKQoreworCS8qIENvbmZpZ3VyZSBHUElPIG92ZXIgTVBQIG1heCBudW1iZXIuICovCisJb3Jpb25fZ3Bpb19zZXRfdmFsaWQoRDJORVRfR1BJT19CTFVFX0xFRF9PRkYsIDEpOworCisJaWYgKGdwaW9fcmVxdWVzdChEMk5FVF9HUElPX1NBVEEwX0FDVCwgIkxFRCBTQVRBMCBhY3Rpdml0eSIpICE9IDApCisJCXJldHVybjsKKwlpZiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEQyTkVUX0dQSU9fU0FUQTBfQUNULCAxKSAhPSAwKQorCQlnb3RvIGVycl9mcmVlXzE7CisJaWYgKGdwaW9fcmVxdWVzdChEMk5FVF9HUElPX1NBVEExX0FDVCwgIkxFRCBTQVRBMSBhY3Rpdml0eSIpICE9IDApCisJCWdvdG8gZXJyX2ZyZWVfMTsKKwlpZiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEQyTkVUX0dQSU9fU0FUQTFfQUNULCAxKSAhPSAwKQorCQlnb3RvIGVycl9mcmVlXzI7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkMm5ldF9ncGlvX2xlZHMpOworCXJldHVybjsKKworZXJyX2ZyZWVfMjoKKwlncGlvX2ZyZWUoRDJORVRfR1BJT19TQVRBMV9BQ1QpOworZXJyX2ZyZWVfMToKKwlncGlvX2ZyZWUoRDJORVRfR1BJT19TQVRBMF9BQ1QpOworCXJldHVybjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8ga2V5cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRDJORVRfR1BJT19QVVNIX0JVVFRPTgkJMTgKKyNkZWZpbmUgRDJORVRfR1BJT19QT1dFUl9TV0lUQ0hfT04JOAorI2RlZmluZSBEMk5FVF9HUElPX1BPV0VSX1NXSVRDSF9PRkYJOQorCisjZGVmaW5lIEQyTkVUX1NXSVRDSF9QT1dFUl9PTgkJMHgxCisjZGVmaW5lIEQyTkVUX1NXSVRDSF9QT1dFUl9PRkYJCTB4MgorCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gZDJuZXRfYnV0dG9uc1tdID0geworCXsKKwkJLnR5cGUJCT0gRVZfU1csCisJCS5jb2RlCQk9IEQyTkVUX1NXSVRDSF9QT1dFUl9PRkYsCisJCS5ncGlvCQk9IEQyTkVUX0dQSU9fUE9XRVJfU1dJVENIX09GRiwKKwkJLmRlc2MJCT0gIlBvd2VyIHJvY2tlciBzd2l0Y2ggKGF1dG98b2ZmKSIsCisJCS5hY3RpdmVfbG93CT0gMCwKKwl9LAorCXsKKwkJLnR5cGUJCT0gRVZfU1csCisJCS5jb2RlCQk9IEQyTkVUX1NXSVRDSF9QT1dFUl9PTiwKKwkJLmdwaW8JCT0gRDJORVRfR1BJT19QT1dFUl9TV0lUQ0hfT04sCisJCS5kZXNjCQk9ICJQb3dlciByb2NrZXIgc3dpdGNoIChvbnxhdXRvKSIsCisJCS5hY3RpdmVfbG93CT0gMCwKKwl9LAorCXsKKwkJLnR5cGUJCT0gRVZfS0VZLAorCQkuY29kZQkJPSBLRVlfUE9XRVIsCisJCS5ncGlvCQk9IEQyTkVUX0dQSU9fUFVTSF9CVVRUT04sCisJCS5kZXNjCQk9ICJGcm9udCBQdXNoIEJ1dHRvbiIsCisJCS5hY3RpdmVfbG93CT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBkMm5ldF9idXR0b25fZGF0YSA9IHsKKwkuYnV0dG9ucwk9IGQybmV0X2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShkMm5ldF9idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGQybmV0X2dwaW9fYnV0dG9ucyA9IHsKKwkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmQybmV0X2J1dHRvbl9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgU2V0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IG9yaW9uNXhfbXBwX21vZGUgZDJuZXRfbXBwX21vZGVzW10gX19pbml0ZGF0YSA9IHsKKwl7ICAwLCBNUFBfR1BJTyB9LAkvKiBCb2FyZCBJRCAoYml0IDApICovCisJeyAgMSwgTVBQX0dQSU8gfSwJLyogQm9hcmQgSUQgKGJpdCAxKSAqLworCXsgIDIsIE1QUF9HUElPIH0sCS8qIEJvYXJkIElEIChiaXQgMikgKi8KKwl7ICAzLCBNUFBfR1BJTyB9LAkvKiBTQVRBIDAgcG93ZXIgKi8KKwl7ICA0LCBNUFBfVU5VU0VEIH0sCisJeyAgNSwgTVBQX0dQSU8gfSwJLyogRmFuIGZhaWwgZGV0ZWN0aW9uICovCisJeyAgNiwgTVBQX0dQSU8gfSwJLyogUmVkIGZyb250IExFRCAqLworCXsgIDcsIE1QUF9VTlVTRUQgfSwKKwl7ICA4LCBNUFBfR1BJTyB9LAkvKiBSZWFyIHBvd2VyIHN3aXRjaCAob258YXV0bykgKi8KKwl7ICA5LCBNUFBfR1BJTyB9LAkvKiBSZWFyIHBvd2VyIHN3aXRjaCAoYXV0b3xvZmYpICovCisJeyAxMCwgTVBQX1VOVVNFRCB9LAorCXsgMTEsIE1QUF9VTlVTRUQgfSwKKwl7IDEyLCBNUFBfR1BJTyB9LAkvKiBTQVRBIDEgcG93ZXIgKi8KKwl7IDEzLCBNUFBfVU5VU0VEIH0sCisJeyAxNCwgTVBQX0dQSU8gfSwJLyogU0FUQSAwIGFjdGl2ZSAqLworCXsgMTUsIE1QUF9HUElPIH0sCS8qIFNBVEEgMSBhY3RpdmUgKi8KKwl7IDE2LCBNUFBfR1BJTyB9LAkvKiBCbHVlIGZyb250IExFRCBibGluayBjb250cm9sICovCisJeyAxNywgTVBQX1VOVVNFRCB9LAorCXsgMTgsIE1QUF9HUElPIH0sCS8qIEZyb250IGJ1dHRvbiAoMCA9IFJlbGVhc2VkLCAxID0gUHVzaGVkICkgKi8KKwl7IDE5LCBNUFBfVU5VU0VEIH0sCisJeyAtMSB9CisJLyogMjI6IFVTQiBwb3J0IDEgZnVzZSAoMCA9IEZhaWwsIDEgPSBPaykgKi8KKwkvKiAyMzogQmx1ZSBmcm9udCBMRUQgb2ZmICovCisJLyogMjQ6IEluaGliaXQgYm9hcmQgcG93ZXIgb2ZmICgwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkKSAqLworfTsKKworc3RhdGljIHZvaWQgX19pbml0IGQybmV0X2luaXQodm9pZCkKK3sKKwkvKgorCSAqIFNldHVwIGJhc2ljIE9yaW9uIGZ1bmN0aW9ucy4gTmVlZCB0byBiZSBjYWxsZWQgZWFybHkuCisJICovCisJb3Jpb241eF9pbml0KCk7CisKKwlvcmlvbjV4X21wcF9jb25mKGQybmV0X21wcF9tb2Rlcyk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBwZXJpcGhlcmFscy4KKwkgKi8KKwlvcmlvbjV4X2VoY2kwX2luaXQoKTsKKwlvcmlvbjV4X2V0aF9pbml0KCZkMm5ldF9ldGhfZGF0YSk7CisJb3Jpb241eF9pMmNfaW5pdCgpOworCW9yaW9uNXhfdWFydDBfaW5pdCgpOworCisJZDJuZXRfc2F0YV9wb3dlcl9pbml0KCk7CisJb3Jpb241eF9zYXRhX2luaXQoJmQybmV0X3NhdGFfZGF0YSk7CisKKwlvcmlvbjV4X3NldHVwX2Rldl9ib290X3dpbihEMk5FVF9OT1JfQk9PVF9CQVNFLAorCQkJCUQyTkVUX05PUl9CT09UX1NJWkUpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZDJuZXRfbm9yX2ZsYXNoKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZDJuZXRfZ3Bpb19idXR0b25zKTsKKworCWQybmV0X2dwaW9fbGVkc19pbml0KCk7CisKKwlwcl9ub3RpY2UoImQybmV0OiBGbGFzaCB3cml0ZSBhcmUgbm90IHlldCBzdXBwb3J0ZWQuXG4iKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGQybmV0X2kyY19kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUoZDJuZXRfaTJjX2RldmljZXMpKTsKK30KKworLyogV2FybmluZzogTGFDaWUgdXNlIGEgd3JvbmcgbWFjaC10eXBlICgweDIwZT01MjYpIGluIHRoZWlyIGJvb3Rsb2FkZXIuICovCisKKyNpZmRlZiBDT05GSUdfTUFDSF9EMk5FVAorTUFDSElORV9TVEFSVChEMk5FVCwgIkxhQ2llIGQyIE5ldHdvcmsiKQorCS5waHlzX2lvCT0gT1JJT041WF9SRUdTX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKE9SSU9ONVhfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4RkZGQywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSBkMm5ldF9pbml0LAorCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKKwkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCisJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKK01BQ0hJTkVfRU5ECisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0JJR0RJU0sKK01BQ0hJTkVfU1RBUlQoQklHRElTSywgIkxhQ2llIEJpZyBEaXNrIE5ldHdvcmsiKQorCS5waHlzX2lvCT0gT1JJT041WF9SRUdTX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKE9SSU9ONVhfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4RkZGQywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSBkMm5ldF9pbml0LAorCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKKwkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCisJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKK01BQ0hJTkVfRU5ECisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L25ldDJiaWctc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9uZXQyYmlnLXNldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JkNjI4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9uZXQyYmlnLXNldHVwLmMKQEAgLTAsMCArMSw0MzEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW9yaW9uNXgvbmV0MmJpZy1zZXR1cC5jCisgKgorICogTGFDaWUgMkJpZyBOZXR3b3JrIE5BUyBzZXR1cAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTaW1vbiBHdWlub3QgPHNndWlub3RAbGFjaWUuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8bWFjaC9vcmlvbjV4Lmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAibXBwLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTGFDaWUgMkJpZyBOZXR3b3JrIEluZm8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogNTEyS0IgTk9SIGZsYXNoIERldmljZSBidXMgYm9vdCBjaGlwIHNlbGVjdAorICovCisKKyNkZWZpbmUgTkVUMkJJR19OT1JfQk9PVF9CQVNFCQkweGZmZjgwMDAwCisjZGVmaW5lIE5FVDJCSUdfTk9SX0JPT1RfU0laRQkJU1pfNTEySworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIDUxMktCIE5PUiBGbGFzaCBvbiBCb290IERldmljZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUT0RPOiBDaGVjayB3cml0ZSBzdXBwb3J0IG9uIGZsYXNoIE1YMjlMVjQwMENCVEMtNzBHCisgKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5ldDJiaWdfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIkZ1bGw1MTJrYiIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBuZXQyYmlnX25vcl9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAxLAorCS5wYXJ0cwkJPSBuZXQyYmlnX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShuZXQyYmlnX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuZXQyYmlnX25vcl9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCQk9IElPUkVTT1VSQ0VfTUVNLAorCS5zdGFydAkJCT0gTkVUMkJJR19OT1JfQk9PVF9CQVNFLAorCS5lbmQJCQk9IE5FVDJCSUdfTk9SX0JPT1RfQkFTRQorCQkJCQkrIE5FVDJCSUdfTk9SX0JPT1RfU0laRSAtIDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBuZXQyYmlnX25vcl9mbGFzaCA9IHsKKwkubmFtZQkJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbmV0MmJpZ19ub3JfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCQk9IDEsCisJLnJlc291cmNlCQk9ICZuZXQyYmlnX25vcl9mbGFzaF9yZXNvdXJjZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRXRoZXJuZXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgbmV0MmJpZ19ldGhfZGF0YSA9IHsKKwkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUig4KSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSTJDIGRldmljZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogaTJjIGFkZHIgfCBjaGlwICAgICAgICAgfCBkZXNjcmlwdGlvbgorICogMHgzMiAgICAgfCBSaWNvaCA1QzM3MmIgfCBSVEMKKyAqIDB4NTAgICAgIHwgSFQyNExDMDggICAgIHwgZWVwcm9tICgxa0IpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBuZXQyYmlnX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygicnM1YzM3MmIiLCAweDMyKSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCIyNGMwOCIsIDB4NTApLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNBVEEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSBuZXQyYmlnX3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cwk9IDIsCit9OworCisjZGVmaW5lIE5FVDJCSUdfR1BJT19TQVRBX1BPV0VSX1JFUQkxOQorI2RlZmluZSBORVQyQklHX0dQSU9fU0FUQTBfUE9XRVIJMjMKKyNkZWZpbmUgTkVUMkJJR19HUElPX1NBVEExX1BPV0VSCTI1CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuZXQyYmlnX3NhdGFfcG93ZXJfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwkvKiBDb25maWd1cmUgR1BJT3Mgb3ZlciBNUFAgbWF4IG51bWJlci4gKi8KKwlvcmlvbl9ncGlvX3NldF92YWxpZChORVQyQklHX0dQSU9fU0FUQTBfUE9XRVIsIDEpOworCW9yaW9uX2dwaW9fc2V0X3ZhbGlkKE5FVDJCSUdfR1BJT19TQVRBMV9QT1dFUiwgMSk7CisKKwllcnIgPSBncGlvX3JlcXVlc3QoTkVUMkJJR19HUElPX1NBVEEwX1BPV0VSLCAiU0FUQTAgcG93ZXIgc3RhdHVzIik7CisJaWYgKGVyciA9PSAwKSB7CisJCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KE5FVDJCSUdfR1BJT19TQVRBMF9QT1dFUik7CisJCWlmIChlcnIpCisJCQlncGlvX2ZyZWUoTkVUMkJJR19HUElPX1NBVEEwX1BPV0VSKTsKKwl9CisJaWYgKGVycikgeworCQlwcl9lcnIoIm5ldDJiaWc6IGZhaWxlZCB0byBzZXR1cCBTQVRBMCBwb3dlciBHUElPXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWVyciA9IGdwaW9fcmVxdWVzdChORVQyQklHX0dQSU9fU0FUQTFfUE9XRVIsICJTQVRBMSBwb3dlciBzdGF0dXMiKTsKKwlpZiAoZXJyID09IDApIHsKKwkJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoTkVUMkJJR19HUElPX1NBVEExX1BPV0VSKTsKKwkJaWYgKGVycikKKwkJCWdwaW9fZnJlZShORVQyQklHX0dQSU9fU0FUQTFfUE9XRVIpOworCX0KKwlpZiAoZXJyKSB7CisJCXByX2VycigibmV0MmJpZzogZmFpbGVkIHRvIHNldHVwIFNBVEExIHBvd2VyIEdQSU9cbiIpOworCQlnb3RvIGVycl9mcmVlXzE7CisJfQorCisJZXJyID0gZ3Bpb19yZXF1ZXN0KE5FVDJCSUdfR1BJT19TQVRBX1BPV0VSX1JFUSwgIlNBVEEgcG93ZXIgcmVxdWVzdCIpOworCWlmIChlcnIgPT0gMCkgeworCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoTkVUMkJJR19HUElPX1NBVEFfUE9XRVJfUkVRLCAwKTsKKwkJaWYgKGVycikKKwkJCWdwaW9fZnJlZShORVQyQklHX0dQSU9fU0FUQV9QT1dFUl9SRVEpOworCX0KKwlpZiAoZXJyKSB7CisJCXByX2VycigibmV0MmJpZzogZmFpbGVkIHRvIHNldHVwIFNBVEEgcG93ZXIgcmVxdWVzdCBHUElPXG4iKTsKKwkJZ290byBlcnJfZnJlZV8yOworCX0KKworCWlmIChncGlvX2dldF92YWx1ZShORVQyQklHX0dQSU9fU0FUQTBfUE9XRVIpICYmCisJCWdwaW9fZ2V0X3ZhbHVlKE5FVDJCSUdfR1BJT19TQVRBMV9QT1dFUikpIHsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU0FUQSBwb3dlciB1cCBvbiBib3RoIGRpc2sgaXMgZG9uZSBieSBwdWxsaW5nIGhpZ2ggdGhlIENQTEQgcG93ZXIKKwkgKiByZXF1ZXN0IGxpbmUuIFRoZSAzMDBtcyBkZWxheSBpcyByZWxhdGVkIHRvIHRoZSBDUExEIGNsb2NrIGFuZCBpcworCSAqIG5lZWRlZCB0byBiZSBzdXJlIHRoYXQgdGhlIENQTEQgaGFzIHRha2UgaW50byBhY2NvdW50IHRoZSBsb3cgbGluZQorCSAqIHN0YXR1cy4KKwkgKi8KKwltc2xlZXAoMzAwKTsKKwlncGlvX3NldF92YWx1ZShORVQyQklHX0dQSU9fU0FUQV9QT1dFUl9SRVEsIDEpOworCXByX2luZm8oIm5ldDJiaWc6IHBvd2VyIHVwIFNBVEEgaGFyZCBkaXNrc1xuIik7CisKKwlyZXR1cm47CisKK2Vycl9mcmVlXzI6CisJZ3Bpb19mcmVlKE5FVDJCSUdfR1BJT19TQVRBMV9QT1dFUik7CitlcnJfZnJlZV8xOgorCWdwaW9fZnJlZShORVQyQklHX0dQSU9fU0FUQTBfUE9XRVIpOworCisJcmV0dXJuOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8gTEVEcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGUgcG93ZXIgZnJvbnQgTEVEcyAoYmx1ZSBhbmQgcmVkKSBhbmQgU0FUQSByZWQgTEVEcyBhcmUgY29udHJvbGxlZCB2aWEgYQorICogc2luZ2xlIEdQSU8gbGluZSBhbmQgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUgbGVkcy1ncGlvIGRyaXZlci4KKyAqCisgKiBUaGUgU0FUQSBibHVlIExFRHMgaGF2ZSBzb21lIGhhcmR3YXJlIGJsaW5rIGNhcGFiaWxpdGllcyB3aGljaCBhcmUgZGV0YWlsbGVkCisgKiBpbiB0aGUgZm9sbG93aW5nIGFycmF5OgorICoKKyAqIFNBVEF4IGJsdWUgTEVEIHwgU0FUQXggYWN0aXZpdHkgfCBMRUQgc3RhdGUKKyAqICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfAorICogICAgICAgMCAgICAgICAgfCAgICAgICAwICAgICAgICB8ICBibGluayAocmF0ZSAzMDBtcykKKyAqICAgICAgIDEgICAgICAgIHwgICAgICAgMCAgICAgICAgfCAgb2ZmCisgKiAgICAgICA/ICAgICAgICB8ICAgICAgIDEgICAgICAgIHwgIG9uCisgKgorICogTm90ZXM6IFRoZSBibHVlIGFuZCB0aGUgcmVkIGZyb250IExFRCdzIGNhbid0IGJlIG9uIGF0IHRoZSBzYW1lIHRpbWUuCisgKiAgICAgICAgQmx1ZSBMRUQgaGF2ZSBwcmlvcml0eS4KKyAqLworCisjZGVmaW5lIE5FVDJCSUdfR1BJT19QV1JfUkVEX0xFRAk2CisjZGVmaW5lIE5FVDJCSUdfR1BJT19QV1JfQkxVRV9MRUQJMTYKKyNkZWZpbmUgTkVUMkJJR19HUElPX1BXUl9MRURfQkxJTktfU1RPUAk3CisKKyNkZWZpbmUgTkVUMkJJR19HUElPX1NBVEEwX1JFRF9MRUQJMTEKKyNkZWZpbmUgTkVUMkJJR19HUElPX1NBVEExX1JFRF9MRUQJMTAKKworI2RlZmluZSBORVQyQklHX0dQSU9fU0FUQTBfQkxVRV9MRUQJMTcKKyNkZWZpbmUgTkVUMkJJR19HUElPX1NBVEExX0JMVUVfTEVECTEzCisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgbmV0MmJpZ19sZWRzW10gPSB7CisJeworCQkubmFtZSA9ICJuZXQyYmlnOnJlZDpwb3dlciIsCisJCS5ncGlvID0gTkVUMkJJR19HUElPX1BXUl9SRURfTEVELAorCX0sCisJeworCQkubmFtZSA9ICJuZXQyYmlnOmJsdWU6cG93ZXIiLAorCQkuZ3BpbyA9IE5FVDJCSUdfR1BJT19QV1JfQkxVRV9MRUQsCisJfSwKKwl7CisJCS5uYW1lID0gIm5ldDJiaWc6cmVkOnNhdGEwIiwKKwkJLmdwaW8gPSBORVQyQklHX0dQSU9fU0FUQTBfUkVEX0xFRCwKKwl9LAorCXsKKwkJLm5hbWUgPSAibmV0MmJpZzpyZWQ6c2F0YTEiLAorCQkuZ3BpbyA9IE5FVDJCSUdfR1BJT19TQVRBMV9SRURfTEVELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgbmV0MmJpZ19sZWRfZGF0YSA9IHsKKwkubnVtX2xlZHMgPSBBUlJBWV9TSVpFKG5ldDJiaWdfbGVkcyksCisJLmxlZHMgPSBuZXQyYmlnX2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBuZXQyYmlnX2dwaW9fbGVkcyA9IHsKKwkubmFtZSAgICAgICAgICAgPSAibGVkcy1ncGlvIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZuZXQyYmlnX2xlZF9kYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbmV0MmJpZ19ncGlvX2xlZHNfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwkvKiBTdG9wIGluaXRpYWwgQ1BMRCBzbG93IHJlZC9ibHVlIGJsaW5raW5nIG9uIHBvd2VyIExFRC4gKi8KKwllcnIgPSBncGlvX3JlcXVlc3QoTkVUMkJJR19HUElPX1BXUl9MRURfQkxJTktfU1RPUCwKKwkJCSAgICJQb3dlciBMRUQgYmxpbmsgc3RvcCIpOworCWlmIChlcnIgPT0gMCkgeworCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoTkVUMkJJR19HUElPX1BXUl9MRURfQkxJTktfU1RPUCwgMSk7CisJCWlmIChlcnIpCisJCQlncGlvX2ZyZWUoTkVUMkJJR19HUElPX1BXUl9MRURfQkxJTktfU1RPUCk7CisJfQorCWlmIChlcnIpCisJCXByX2VycigibmV0MmJpZzogZmFpbGVkIHRvIHNldHVwIHBvd2VyIExFRCBibGluayBHUElPXG4iKTsKKworCS8qCisJICogQ29uZmlndXJlIFNBVEEwIGFuZCBTQVRBMSBibHVlIExFRHMgdG8gYmxpbmsgaW4gcmVsYXRpb24gd2l0aCB0aGUKKwkgKiBoYXJkIGRpc2sgYWN0aXZpdHkuCisJICovCisJZXJyID0gZ3Bpb19yZXF1ZXN0KE5FVDJCSUdfR1BJT19TQVRBMF9CTFVFX0xFRCwKKwkJCSAgICJTQVRBMCBibHVlIExFRCBjb250cm9sIik7CisJaWYgKGVyciA9PSAwKSB7CisJCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChORVQyQklHX0dQSU9fU0FUQTBfQkxVRV9MRUQsIDEpOworCQlpZiAoZXJyKQorCQkJZ3Bpb19mcmVlKE5FVDJCSUdfR1BJT19TQVRBMF9CTFVFX0xFRCk7CisJfQorCWlmIChlcnIpCisJCXByX2VycigibmV0MmJpZzogZmFpbGVkIHRvIHNldHVwIFNBVEEwIGJsdWUgTEVEIEdQSU9cbiIpOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KE5FVDJCSUdfR1BJT19TQVRBMV9CTFVFX0xFRCwKKwkJCSAgICJTQVRBMSBibHVlIExFRCBjb250cm9sIik7CisJaWYgKGVyciA9PSAwKSB7CisJCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChORVQyQklHX0dQSU9fU0FUQTFfQkxVRV9MRUQsIDEpOworCQlpZiAoZXJyKQorCQkJZ3Bpb19mcmVlKE5FVDJCSUdfR1BJT19TQVRBMV9CTFVFX0xFRCk7CisJfQorCWlmIChlcnIpCisJCXByX2VycigibmV0MmJpZzogZmFpbGVkIHRvIHNldHVwIFNBVEExIGJsdWUgTEVEIEdQSU9cbiIpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZuZXQyYmlnX2dwaW9fbGVkcyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGtleXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE5FVDJCSUdfR1BJT19QVVNIX0JVVFRPTgkxOAorI2RlZmluZSBORVQyQklHX0dQSU9fUE9XRVJfU1dJVENIX09OCTgKKyNkZWZpbmUgTkVUMkJJR19HUElPX1BPV0VSX1NXSVRDSF9PRkYJOQorCisjZGVmaW5lIE5FVDJCSUdfU1dJVENIX1BPV0VSX09OCQkweDEKKyNkZWZpbmUgTkVUMkJJR19TV0lUQ0hfUE9XRVJfT0ZGCTB4MgorCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gbmV0MmJpZ19idXR0b25zW10gPSB7CisJeworCQkudHlwZQkJPSBFVl9TVywKKwkJLmNvZGUJCT0gTkVUMkJJR19TV0lUQ0hfUE9XRVJfT0ZGLAorCQkuZ3BpbwkJPSBORVQyQklHX0dQSU9fUE9XRVJfU1dJVENIX09GRiwKKwkJLmRlc2MJCT0gIlBvd2VyIHJvY2tlciBzd2l0Y2ggKGF1dG98b2ZmKSIsCisJCS5hY3RpdmVfbG93CT0gMCwKKwl9LAorCXsKKwkJLnR5cGUJCT0gRVZfU1csCisJCS5jb2RlCQk9IE5FVDJCSUdfU1dJVENIX1BPV0VSX09OLAorCQkuZ3BpbwkJPSBORVQyQklHX0dQSU9fUE9XRVJfU1dJVENIX09OLAorCQkuZGVzYwkJPSAiUG93ZXIgcm9ja2VyIHN3aXRjaCAob258YXV0bykiLAorCQkuYWN0aXZlX2xvdwk9IDAsCisJfSwKKwl7CisJCS50eXBlCQk9IEVWX0tFWSwKKwkJLmNvZGUJCT0gS0VZX1BPV0VSLAorCQkuZ3BpbwkJPSBORVQyQklHX0dQSU9fUFVTSF9CVVRUT04sCisJCS5kZXNjCQk9ICJGcm9udCBQdXNoIEJ1dHRvbiIsCisJCS5hY3RpdmVfbG93CT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBuZXQyYmlnX2J1dHRvbl9kYXRhID0geworCS5idXR0b25zCT0gbmV0MmJpZ19idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUobmV0MmJpZ19idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5ldDJiaWdfZ3Bpb19idXR0b25zID0geworCS5uYW1lCQk9ICJncGlvLWtleXMiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbmV0MmJpZ19idXR0b25fZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZW5lcmFsIFNldHVwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBvcmlvbjV4X21wcF9tb2RlIG5ldDJiaWdfbXBwX21vZGVzW10gX19pbml0ZGF0YSA9IHsKKwl7ICAwLCBNUFBfR1BJTyB9LAkvKiBSYWlkIG1vZGUgKGJpdCAwKSAqLworCXsgIDEsIE1QUF9HUElPIH0sCS8qIFVTQiBwb3J0IDIgZnVzZSAoMCA9IEZhaWwsIDEgPSBPaykgKi8KKwl7ICAyLCBNUFBfR1BJTyB9LAkvKiBSYWlkIG1vZGUgKGJpdCAxKSAqLworCXsgIDMsIE1QUF9HUElPIH0sCS8qIEJvYXJkIElEIChiaXQgMCkgKi8KKwl7ICA0LCBNUFBfR1BJTyB9LAkvKiBGYW4gYWN0aXZpdHkgKDAgPSBPZmYsIDEgPSBPbikgKi8KKwl7ICA1LCBNUFBfR1BJTyB9LAkvKiBGYW4gZmFpbCBkZXRlY3Rpb24gKi8KKwl7ICA2LCBNUFBfR1BJTyB9LAkvKiBSZWQgZnJvbnQgTEVEICgwID0gT2ZmLCAxID0gT24pICovCisJeyAgNywgTVBQX0dQSU8gfSwJLyogRGlzYWJsZSBpbml0aWFsIGJsaW5raW5nIG9uIGZyb250IExFRCAqLworCXsgIDgsIE1QUF9HUElPIH0sCS8qIFJlYXIgcG93ZXIgc3dpdGNoIChvbnxhdXRvKSAqLworCXsgIDksIE1QUF9HUElPIH0sCS8qIFJlYXIgcG93ZXIgc3dpdGNoIChhdXRvfG9mZikgKi8KKwl7IDEwLCBNUFBfR1BJTyB9LAkvKiBTQVRBIDEgcmVkIExFRCAoMCA9IE9mZiwgMSA9IE9uKSAqLworCXsgMTEsIE1QUF9HUElPIH0sCS8qIFNBVEEgMCByZWQgTEVEICgwID0gT2ZmLCAxID0gT24pICovCisJeyAxMiwgTVBQX0dQSU8gfSwJLyogQm9hcmQgSUQgKGJpdCAxKSAqLworCXsgMTMsIE1QUF9HUElPIH0sCS8qIFNBVEEgMSBibHVlIExFRCBibGluayBjb250cm9sICovCisJeyAxNCwgTVBQX1NBVEFfTEVEIH0sCisJeyAxNSwgTVBQX1NBVEFfTEVEIH0sCisJeyAxNiwgTVBQX0dQSU8gfSwJLyogQmx1ZSBmcm9udCBMRUQgY29udHJvbCAqLworCXsgMTcsIE1QUF9HUElPIH0sCS8qIFNBVEEgMCBibHVlIExFRCBibGluayBjb250cm9sICovCisJeyAxOCwgTVBQX0dQSU8gfSwJLyogRnJvbnQgYnV0dG9uICgwID0gUmVsZWFzZWQsIDEgPSBQdXNoZWQgKSAqLworCXsgMTksIE1QUF9HUElPIH0sCS8qIFNBVEF7MCwxfSBwb3dlciBPbi9PZmYgcmVxdWVzdCAqLworCXsgLTEgfQorCS8qIDIyOiBVU0IgcG9ydCAxIGZ1c2UgKDAgPSBGYWlsLCAxID0gT2spICovCisJLyogMjM6IFNBVEEgMCBwb3dlciBzdGF0dXMgKi8KKwkvKiAyNDogQm9hcmQgcG93ZXIgb2ZmICovCisJLyogMjU6IFNBVEEgMSBwb3dlciBzdGF0dXMgKi8KK307CisKKyNkZWZpbmUgTkVUMkJJR19HUElPX1BPV0VSX09GRgkJMjQKKworc3RhdGljIHZvaWQgbmV0MmJpZ19wb3dlcl9vZmYodm9pZCkKK3sKKwlncGlvX3NldF92YWx1ZShORVQyQklHX0dQSU9fUE9XRVJfT0ZGLCAxKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG5ldDJiaWdfaW5pdCh2b2lkKQoreworCS8qCisJICogU2V0dXAgYmFzaWMgT3Jpb24gZnVuY3Rpb25zLiBOZWVkIHRvIGJlIGNhbGxlZCBlYXJseS4KKwkgKi8KKwlvcmlvbjV4X2luaXQoKTsKKworCW9yaW9uNXhfbXBwX2NvbmYobmV0MmJpZ19tcHBfbW9kZXMpOworCisJLyoKKwkgKiBDb25maWd1cmUgcGVyaXBoZXJhbHMuCisJICovCisJb3Jpb241eF9laGNpMF9pbml0KCk7CisJb3Jpb241eF9laGNpMV9pbml0KCk7CisJb3Jpb241eF9ldGhfaW5pdCgmbmV0MmJpZ19ldGhfZGF0YSk7CisJb3Jpb241eF9pMmNfaW5pdCgpOworCW9yaW9uNXhfdWFydDBfaW5pdCgpOworCW9yaW9uNXhfeG9yX2luaXQoKTsKKworCW5ldDJiaWdfc2F0YV9wb3dlcl9pbml0KCk7CisJb3Jpb241eF9zYXRhX2luaXQoJm5ldDJiaWdfc2F0YV9kYXRhKTsKKworCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKE5FVDJCSUdfTk9SX0JPT1RfQkFTRSwKKwkJCQkgICBORVQyQklHX05PUl9CT09UX1NJWkUpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbmV0MmJpZ19ub3JfZmxhc2gpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZuZXQyYmlnX2dwaW9fYnV0dG9ucyk7CisJbmV0MmJpZ19ncGlvX2xlZHNfaW5pdCgpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgbmV0MmJpZ19pMmNfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKG5ldDJiaWdfaTJjX2RldmljZXMpKTsKKworCW9yaW9uX2dwaW9fc2V0X3ZhbGlkKE5FVDJCSUdfR1BJT19QT1dFUl9PRkYsIDEpOworCisJaWYgKGdwaW9fcmVxdWVzdChORVQyQklHX0dQSU9fUE9XRVJfT0ZGLCAicG93ZXItb2ZmIikgPT0gMCAmJgorCSAgICBncGlvX2RpcmVjdGlvbl9vdXRwdXQoTkVUMkJJR19HUElPX1BPV0VSX09GRiwgMCkgPT0gMCkKKwkJcG1fcG93ZXJfb2ZmID0gbmV0MmJpZ19wb3dlcl9vZmY7CisJZWxzZQorCQlwcl9lcnIoIm5ldDJiaWc6IGZhaWxlZCB0byBjb25maWd1cmUgcG93ZXItb2ZmIEdQSU9cbiIpOworCisJcHJfbm90aWNlKCJuZXQyYmlnOiBGbGFzaCB3cml0aW5nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLlxuIik7Cit9CisKKy8qIFdhcm5pbmc6IExhQ2llIHVzZSBhIHdyb25nIG1hY2gtdHlwZSAoMHgyMGU9NTI2KSBpbiB0aGVpciBib290bG9hZGVyLiAqLworTUFDSElORV9TVEFSVChORVQyQklHLCAiTGFDaWUgMkJpZyBOZXR3b3JrIikKKwkucGh5c19pbwk9IE9SSU9ONVhfUkVHU19QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChPUklPTjVYX1JFR1NfVklSVF9CQVNFKSA+PiAxOCkgJiAweEZGRkMsCisJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gbmV0MmJpZ19pbml0LAorCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKKwkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCisJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9hdWRpby5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2F1ZGlvLmgKaW5kZXggMTZlYjAyNS4uYTM0NDllMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2F1ZGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2F1ZGlvLmgKQEAgLTMsMTAgKzMsMTIgQEAKIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAKIC8qCiAgKiBAcmVzZXRfZ3BpbzogQUM5NyByZXNldCBncGlvIChub3JtYWxseSBncGlvMTEzIG9yIGdwaW85NSkKICAqICAgICAgICAgICAgICBhIC0xIHZhbHVlIG1lYW5zIG5vIGdwaW8gd2lsbCBiZSB1c2VkIGZvciByZXNldAorICogQGNvZGVjX3BkYXRhOiBBQzk3IGNvZGVjIHBsYXRmb3JtX2RhdGEKIAogICogcmVzZXRfZ3BpbyBzaG91bGQgb25seSBiZSBzcGVjaWZpZWQgZm9yIHB4YTI3eCBDUFVzIHdoZXJlIGEgc2lsaWNvbgogICogYnVnIHByZXZlbnRzIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSByZXNldCBsaW5lLiBJZiBub3Qgc3BlY2lmaWVkLApAQCAtMjAsNiArMjIsNyBAQAogCXZvaWQgKCpyZXN1bWUpKHZvaWQgKik7CiAJdm9pZCAqcHJpdjsKIAlpbnQgcmVzZXRfZ3BpbzsKKwl2b2lkICpjb2RlY19wZGF0YVtBQzk3X0JVU19NQVhfREVWSUNFU107CiB9IHB4YTJ4eF9hdWRpb19vcHNfdDsKIAogZXh0ZXJuIHZvaWQgcHhhX3NldF9hYzk3X2luZm8ocHhhMnh4X2F1ZGlvX29wc190ICpvcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI3eF9rZXlwYWQuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyN3hfa2V5cGFkLmgKaW5kZXggZDVhNDhhOS4uN2I0ZWFkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI3eF9rZXlwYWQuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjd4X2tleXBhZC5oCkBAIC0yLDkgKzIsMTIgQEAKICNkZWZpbmUgX19BU01fQVJDSF9QWEEyN3hfS0VZUEFEX0gKIAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogCiAjZGVmaW5lIE1BWF9NQVRSSVhfS0VZX1JPV1MJKDgpCiAjZGVmaW5lIE1BWF9NQVRSSVhfS0VZX0NPTFMJKDgpCisjZGVmaW5lIE1BVFJJWF9ST1dfU0hJRlQJKDMpCisjZGVmaW5lIE1BWF9ESVJFQ1RfS0VZX05VTQkoOCkKIAogLyogcHhhM3h4IGtleXBhZCBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCiAgKgpAQCAtMzMsNyArMzYsNyBAQAogCiAJLyogZGlyZWN0IGtleXMgKi8KIAlpbnQJCWRpcmVjdF9rZXlfbnVtOwotCXVuc2lnbmVkIGludAlkaXJlY3Rfa2V5X21hcFs4XTsKKwl1bnNpZ25lZCBpbnQJZGlyZWN0X2tleV9tYXBbTUFYX0RJUkVDVF9LRVlfTlVNXTsKIAogCS8qIHJvdGFyeSBlbmNvZGVycyAwICovCiAJaW50CQllbmFibGVfcm90YXJ5MDsKQEAgLTUxLDggKzU0LDYgQEAKIAl1bnNpZ25lZCBpbnQJZGVib3VuY2VfaW50ZXJ2YWw7CiB9OwogCi0jZGVmaW5lIEtFWShyb3csIGNvbCwgdmFsKQkoKChyb3cpIDw8IDI4KSB8ICgoY29sKSA8PCAyNCkgfCAodmFsKSkKLQogZXh0ZXJuIHZvaWQgcHhhX3NldF9rZXlwYWRfaW5mbyhzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhICppbmZvKTsKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUFhBMjd4X0tFWVBBRF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKaW5kZXggMjU0NmMwNi4uNjI5ZTA1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYwpAQCAtNjc4LDggKzY3OCw4IEBACiAJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJVc2VyIHRyaWdnZXJlZCB3YWtldXAgaW4gb2ZmbGluZSBjaGFyZ2VyLlxuIik7CiAJfQogCi0JaWYgKCghc2hhcnBzbF9wbS5tYWNoaW5mby0+cmVhZF9kZXZkYXRhKFNIQVJQU0xfU1RBVFVTX0xPQ0spKSB8fCAoc2hhcnBzbF9mYXRhbF9jaGVjaygpIDwgMCkgKQotCXsKKwlpZiAoKCFzaGFycHNsX3BtLm1hY2hpbmZvLT5yZWFkX2RldmRhdGEoU0hBUlBTTF9TVEFUVVNfTE9DSykpIHx8CisJICAgICghc2hhcnBzbF9wbS5tYWNoaW5mby0+cmVhZF9kZXZkYXRhKFNIQVJQU0xfU1RBVFVTX0ZBVEFMKSkpCXsKIAkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkZhdGFsIGNvbmRpdGlvbi4gU3VzcGVuZC5cbiIpOwogCQljb3JnaV9nb3RvX3NsZWVwKGFsYXJtX3RpbWUsIGFsYXJtX2VuYWJsZSwgc3RhdGUpOwogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwppbmRleCBkNGNmYTIxLi5kZmM5YjBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCkBAIC03NSw3ICs3NSw3IEBACiAKIGNvbmZpZyBSRUFMVklFV19ISUdIX1BIWVNfT0ZGU0VUCiAJYm9vbCAiSGlnaCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgZm9yIHRoZSBSZWFsVmlldyBwbGF0Zm9ybSIKLQlkZXBlbmRzIG9uICFNQUNIX1JFQUxWSUVXX1BCMTE3NgorCWRlcGVuZHMgb24gTU1VICYmICFNQUNIX1JFQUxWSUVXX1BCMTE3NgogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFJlYWxWaWV3IGJvYXJkcyBvdGhlciB0aGFuIFBCMTE3NiBoYXZlIHRoZSBSQU0gYXZhaWxhYmxlIGF0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCmluZGV4IGZhY2JkNDkuLmRjMzUxOWM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwpAQCAtMjIxLDYgKzIyMSw5IEBACiAKICNkZWZpbmUgUkVBTFZJRVdfU1lTTUNJCShfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsgUkVBTFZJRVdfU1lTX01DSV9PRkZTRVQpCiAKKy8qCisgKiBUaGlzIGlzIG9ubHkgdXNlZCBpZiBHUElPTElCIHN1cHBvcnQgaXMgZGlzYWJsZWQKKyAqLwogc3RhdGljIHVuc2lnbmVkIGludCByZWFsdmlld19tbWNfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYW1iYV9kZXZpY2UsIGRldik7CkBAIC0yMzcsMTEgKzI0MCwxNSBAQAogc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzBfcGxhdF9kYXRhID0gewogCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKIAkuc3RhdHVzCQk9IHJlYWx2aWV3X21tY19zdGF0dXMsCisJLmdwaW9fd3AJPSAxNywKKwkuZ3Bpb19jZAk9IDE2LAogfTsKIAogc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzFfcGxhdF9kYXRhID0gewogCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKIAkuc3RhdHVzCQk9IHJlYWx2aWV3X21tY19zdGF0dXMsCisJLmdwaW9fd3AJPSAxOSwKKwkuZ3Bpb19jZAk9IDE4LAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGZmMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0wLDAgKzEsNiBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KKworI2RlZmluZSBncGlvX2dldF92YWx1ZQlfX2dwaW9fZ2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fc2V0X3ZhbHVlCV9fZ3Bpb19zZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19jYW5zbGVlcAlfX2dwaW9fY2Fuc2xlZXAKKyNkZWZpbmUgZ3Bpb190b19pcnEJX19ncGlvX3RvX2lycQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggYjQyYzE0Zi4uOGE2MzhkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAKIC8qIG1hY3JvIHRvIGdldCBhdCBJTyBzcGFjZSB3aGVuIHJ1bm5pbmcgdmlydHVhbGx5ICovCisjaWZkZWYgQ09ORklHX01NVQogLyoKICAqIFN0YXRpY2FsbHkgbWFwcGVkIGFkZHJlc3NlczoKICAqCkBAIC0zMyw2ICszNCw5IEBACiAgKiAxZnh4IHh4eHggLT4gZmV4eCB4eHh4CiAgKi8KICNkZWZpbmUgSU9fQUREUkVTUyh4KQkJKCgoeCkgJiAweDAzZmZmZmZmKSArIDB4ZmIwMDAwMDApCisjZWxzZQorI2RlZmluZSBJT19BRERSRVNTKHgpCQkoeCkKKyNlbmRpZgogI2RlZmluZSBfX2lvX2FkZHJlc3MobikJCV9faW8oSU9fQUREUkVTUyhuKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCmluZGV4IGFjMGU4M2YuLmE4ODQ1OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2xvY2FsdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vdW5pZmllZC5oPgogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1lYi5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGIxMW1wLmg+CkBAIC0xMzcsMjYgKzEzOCwxOSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcG9rZV9taWxvKHZvaWQpCiB7Ci0JZXh0ZXJuIHZvaWQgc2Vjb25kYXJ5X3N0YXJ0dXAodm9pZCk7Ci0KIAkvKiBub2JvZHkgaXMgdG8gYmUgcmVsZWFzZWQgZnJvbSB0aGUgcGVuIHlldCAqLwogCXBlbl9yZWxlYXNlID0gLTE7CiAKIAkvKgotCSAqIHdyaXRlIHRoZSBhZGRyZXNzIG9mIHNlY29uZGFyeSBzdGFydHVwIGludG8gdGhlIHN5c3RlbS13aWRlCi0JICogZmxhZ3MgcmVnaXN0ZXIsIHRoZW4gY2xlYXIgdGhlIGJvdHRvbSB0d28gYml0cywgd2hpY2ggaXMgd2hhdAotCSAqIEJvb3RNb25pdG9yIGlzIHdhaXRpbmcgZm9yCisJICogV3JpdGUgdGhlIGFkZHJlc3Mgb2Ygc2Vjb25kYXJ5IHN0YXJ0dXAgaW50byB0aGUgc3lzdGVtLXdpZGUgZmxhZ3MKKwkgKiByZWdpc3Rlci4gVGhlIEJvb3RNb25pdG9yIHdhaXRzIGZvciB0aGlzIHJlZ2lzdGVyIHRvIGJlY29tZQorCSAqIG5vbi16ZXJvLgogCSAqLwotI2lmIDEKICNkZWZpbmUgUkVBTFZJRVdfU1lTX0ZMQUdTU19PRkZTRVQgMHgzMAotCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMocmVhbHZpZXdfc2Vjb25kYXJ5X3N0YXJ0dXApLAorI2RlZmluZSBSRUFMVklFV19TWVNfRkxBR1NDX09GRlNFVCAweDM0CisJX19yYXdfd3JpdGVsKEJTWU0odmlydF90b19waHlzKHJlYWx2aWV3X3NlY29uZGFyeV9zdGFydHVwKSksCiAJCSAgICAgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCiAJCSAgICAgUkVBTFZJRVdfU1lTX0ZMQUdTU19PRkZTRVQpOwotI2RlZmluZSBSRUFMVklFV19TWVNfRkxBR1NDX09GRlNFVCAweDM0Ci0JX19yYXdfd3JpdGVsKDMsCi0JCSAgICAgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCi0JCSAgICAgUkVBTFZJRVdfU1lTX0ZMQUdTQ19PRkZTRVQpOwotI2VuZGlmCiAKIAltYigpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCmluZGV4IDhkZmE0NGUuLmFiZDEzYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMTEzLDYgKzExNCwyMSBAQAogCQlpb3RhYmxlX2luaXQocmVhbHZpZXdfZWIxMW1wX2lvX2Rlc2MsIEFSUkFZX1NJWkUocmVhbHZpZXdfZWIxMW1wX2lvX2Rlc2MpKTsKIH0KIAorc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8wX3BsYXRfZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gMCwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMV9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDgsCisJLmlycV9iYXNlCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzJfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSAxNiwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKIC8qCiAgKiBSZWFsVmlldyBFQiBBTUJBIGRldmljZXMKICAqLwpAQCAtMTg5LDkgKzIwNSw5IEBACiBBTUJBX0RFVklDRShkbWFjLCAgImRldjozMCIsICBETUFDLCAgICAgTlVMTCk7CiBBTUJBX0RFVklDRShzY3RsLCAgImRldjplMCIsICBTQ1RMLCAgICAgTlVMTCk7CiBBTUJBX0RFVklDRSh3ZG9nLCAgImRldjplMSIsICBFQl9XQVRDSERPRywgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwgImRldjplNCIsICBFQl9HUElPMCwgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMSwgImRldjplNSIsICBHUElPMSwgICAgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMiwgImRldjplNiIsICBHUElPMiwgICAgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwgImRldjplNCIsICBFQl9HUElPMCwgJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwgImRldjplNSIsICBHUElPMSwgICAgJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwgImRldjplNiIsICBHUElPMiwgICAgJmdwaW8yX3BsYXRfZGF0YSk7CiBBTUJBX0RFVklDRShydGMsICAgImRldjplOCIsICBFQl9SVEMsICAgTlVMTCk7CiBBTUJBX0RFVklDRShzY2kwLCAgImRldjpmMCIsICBTQ0ksICAgICAgTlVMTCk7CiBBTUJBX0RFVklDRSh1YXJ0MCwgImRldjpmMSIsICBFQl9VQVJUMCwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYwppbmRleCAyNWVmZTcxLi4xN2ZiYjBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMTA3LDYgKzEwOCwyMSBAQAogCWlvdGFibGVfaW5pdChyZWFsdmlld19wYjExNzZfaW9fZGVzYywgQVJSQVlfU0laRShyZWFsdmlld19wYjExNzZfaW9fZGVzYykpOwogfQogCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzBfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSAwLAorCS5pcnFfYmFzZQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8xX3BsYXRfZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gOCwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMl9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDE2LAorCS5pcnFfYmFzZQk9IC0xLAorfTsKKwogLyoKICAqIFJlYWxWaWV3IFBCMTE3NiBBTUJBIGRldmljZXMKICAqLwpAQCAtMTY0LDkgKzE4MCw5IEBACiBBTUJBX0RFVklDRShzbWMsCSJkZXY6MDAiLAlQQjExNzZfU01DLAlOVUxMKTsKIEFNQkFfREVWSUNFKHNjdGwsCSJkZXY6ZTAiLAlTQ1RMLAkJTlVMTCk7CiBBTUJBX0RFVklDRSh3ZG9nLAkiZGV2OmUxIiwJUEIxMTc2X1dBVENIRE9HLAlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmU0IiwJUEIxMTc2X0dQSU8wLAlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmU0IiwJUEIxMTc2X0dQSU8wLAkmZ3BpbzBfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQkmZ3BpbzFfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQkmZ3BpbzJfcGxhdF9kYXRhKTsKIEFNQkFfREVWSUNFKHJ0YywJImRldjplOCIsCVBCMTE3Nl9SVEMsCU5VTEwpOwogQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpmMCIsCVNDSSwJCU5VTEwpOwogQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6ZjEiLAlQQjExNzZfVUFSVDAsCU5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKaW5kZXggZGM0YjE2OS4uZmRkMDQyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTEwOCw2ICsxMDksMjEgQEAKIAlpb3RhYmxlX2luaXQocmVhbHZpZXdfcGIxMW1wX2lvX2Rlc2MsIEFSUkFZX1NJWkUocmVhbHZpZXdfcGIxMW1wX2lvX2Rlc2MpKTsKIH0KIAorc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8wX3BsYXRfZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gMCwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMV9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDgsCisJLmlycV9iYXNlCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzJfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSAxNiwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKIC8qCiAgKiBSZWFsVmlldyBQQjExTVBDb3JlIEFNQkEgZGV2aWNlcwogICovCkBAIC0xNjYsOSArMTgyLDkgQEAKIEFNQkFfREVWSUNFKHNtYywJImRldjowMCIsCVBCMTFNUF9TTUMsCU5VTEwpOwogQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjplMCIsCVNDVEwsCQlOVUxMKTsKIEFNQkFfREVWSUNFKHdkb2csCSJkZXY6ZTEiLAlQQjExTVBfV0FUQ0hET0csIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQjExTVBfR1BJTzAsCU5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCU5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQjExTVBfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOwogQU1CQV9ERVZJQ0UocnRjLAkiZGV2OmU4IiwJUEIxMU1QX1JUQywJTlVMTCk7CiBBTUJBX0RFVklDRShzY2kwLAkiZGV2OmYwIiwJU0NJLAkJTlVMTCk7CiBBTUJBX0RFVklDRSh1YXJ0MCwJImRldjpmMSIsCVBCMTFNUF9VQVJUMCwJTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCmluZGV4IGQ2YWMxZWIuLjcwYmJhOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTk4LDYgKzk5LDIxIEBACiAJaW90YWJsZV9pbml0KHJlYWx2aWV3X3BiYThfaW9fZGVzYywgQVJSQVlfU0laRShyZWFsdmlld19wYmE4X2lvX2Rlc2MpKTsKIH0KIAorc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8wX3BsYXRfZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gMCwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMV9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDgsCisJLmlycV9iYXNlCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzJfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSAxNiwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKIC8qCiAgKiBSZWFsVmlldyBQQkE4Q29yZSBBTUJBIGRldmljZXMKICAqLwpAQCAtMTU2LDkgKzE3Miw5IEBACiBBTUJBX0RFVklDRShzbWMsCSJkZXY6MDAiLAlQQkE4X1NNQywJTlVMTCk7CiBBTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOwogQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCQThfV0FUQ0hET0csIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQkE4X0dQSU8wLAlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmU0IiwJUEJBOF9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjplNSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjplNiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7CiBBTUJBX0RFVklDRShydGMsCSJkZXY6ZTgiLAlQQkE4X1JUQywJTlVMTCk7CiBBTUJBX0RFVklDRShzY2kwLAkiZGV2OmYwIiwJU0NJLAkJTlVMTCk7CiBBTUJBX0RFVklDRSh1YXJ0MCwJImRldjpmMSIsCVBCQThfVUFSVDAsCU5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKaW5kZXggZWRlMmE1Ny4uY2U2YzVkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTExOCw2ICsxMTksMjEgQEAKIAkJaW90YWJsZV9pbml0KHJlYWx2aWV3X2xvY2FsX2lvX2Rlc2MsIEFSUkFZX1NJWkUocmVhbHZpZXdfbG9jYWxfaW9fZGVzYykpOwogfQogCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzBfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSAwLAorCS5pcnFfYmFzZQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8xX3BsYXRfZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gOCwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMl9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDE2LAorCS5pcnFfYmFzZQk9IC0xLAorfTsKKwogLyoKICAqIFJlYWxWaWV3IFBCWENvcmUgQU1CQSBkZXZpY2VzCiAgKi8KQEAgLTE3Niw5ICsxOTIsOSBAQAogQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OjAwIiwJUEJYX1NNQywJTlVMTCk7CiBBTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOwogQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCWF9XQVRDSERPRywgCU5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQlhfR1BJTzAsCU5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCU5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQlhfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOwogQU1CQV9ERVZJQ0UocnRjLAkiZGV2OmU4IiwJUEJYX1JUQywJTlVMTCk7CiBBTUJBX0RFVklDRShzY2kwLAkiZGV2OmYwIiwJU0NJLAkJTlVMTCk7CiBBTUJBX0RFVklDRSh1YXJ0MCwJImRldjpmMSIsCVBCWF9VQVJUMCwJTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCmluZGV4IDQxYmI2NWQuLmQ4YzAyM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCkBAIC0xMiw2ICsxMiw3IEBACiAJc2VsZWN0IFMzQzI0MTBfR1BJTwogCXNlbGVjdCBDUFVfTExTRVJJQUxfUzNDMjQxMAogCXNlbGVjdCBTM0MyNDEwX1BNIGlmIFBNCisJc2VsZWN0IFMzQzI0MTBfQ1BVRlJFUSBpZiBDUFVfRlJFUV9TM0MyNFhYCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgUzNDMjQxMCBhbmQgUzNDMjQxMEEgZmFtaWx5IGZyb20gdGhlIFMzQzI0WFggbGluZQogCSAgb2YgU2Ftc3VuZyBNb2JpbGUgQ1BVcy4KQEAgLTQ1LDYgKzQ2LDIyIEBACiAJICBJbnRlcm5hbCBub2RlIGZvciBtYWNoaW5lcyB3aXRoIGFuIEJBU1Qgc3R5bGUgSURFCiAJICBpbnRlcmZhY2UKIAorIyBjcHUgZnJlcXVlbmN5IHNjYWxpbmcgc3VwcG9ydAorCitjb25maWcgUzNDMjQxMF9DUFVGUkVRCisJYm9vbAorCWRlcGVuZHMgb24gQ1BVX0ZSRVFfUzNDMjRYWCAmJiBDUFVfUzNDMjQxMAorCXNlbGVjdCBTM0MyNDEwX0NQVUZSRVFfVVRJTFMKKwloZWxwCisJICBDUFUgRnJlcXVlbmN5IHNjYWxpbmcgc3VwcG9ydCBmb3IgUzNDMjQxMAorCitjb25maWcgUzNDMjQxMF9QTExUQUJMRQorCWJvb2wKKwlkZXBlbmRzIG9uIFMzQzI0MTBfQ1BVRlJFUSAmJiBDUFVfRlJFUV9TM0MyNFhYX1BMTAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNlbGVjdCB0aGUgUExMIHRhYmxlIGZvciB0aGUgUzNDMjQxMAorCiBtZW51ICJTM0MyNDEwIE1hY2hpbmVzIgogCiBjb25maWcgQVJDSF9TTURLMjQxMApAQCAtNzksNiArOTYsNyBAQAogY29uZmlnIEFSQ0hfQkFTVAogCWJvb2wgIlNpbXRlYyBFbGVjdHJvbmljcyBCQVNUIChFQjI0MTBJVFgpIgogCXNlbGVjdCBDUFVfUzNDMjQxMAorCXNlbGVjdCBTM0MyNDEwX0lPVElNSU5HIGlmIFMzQzI0MTBfQ1BVRlJFUQogCXNlbGVjdCBQTV9TSU1URUMgaWYgUE0KIAlzZWxlY3QgU0lNVEVDX05PUgogCXNlbGVjdCBNQUNIX0JBU1RfSURFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKaW5kZXggZmNhMDJmOC4uMmFiNWJhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQpAQCAtMTUsNiArMTUsOCBAQAogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEwX0RNQSkJKz0gZG1hLm8KIG9iai0kKENPTkZJR19TM0MyNDEwX1BNKQkrPSBwbS5vIHNsZWVwLm8KIG9iai0kKENPTkZJR19TM0MyNDEwX0dQSU8pCSs9IGdwaW8ubworb2JqLSQoQ09ORklHX1MzQzI0MTBfQ1BVRlJFUSkJKz0gY3B1LWZyZXEubworb2JqLSQoQ09ORklHX1MzQzI0MTBfUExMVEFCTEUpCSs9IHBsbC5vCiAKICMgTWFjaGluZSBzdXBwb3J0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUtZnJlcS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS1mcmVxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxMTg2OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUtZnJlcS5jCkBAIC0wLDAgKzEsMTU5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LWZyZXEuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDEwIENQVSBGcmVxdWVuY3kgc2NhbGluZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLWNvcmUuaD4KKworLyogTm90ZSwgMjQxMEEgaGFzIGFuIGV4dHJhIG1vZGUgZm9yIDE6NDo0IHJhdGlvLCBiaXQgMiBvZiBDTEtESVYgKi8KKworc3RhdGljIHZvaWQgczNjMjQxMF9jcHVmcmVxX3NldGRpdnMoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCXUzMiBjbGtkaXYgPSAwOworCisJaWYgKGNmZy0+ZGl2cy5oX2Rpdmlzb3IgPT0gMikKKwkJY2xrZGl2IHw9IFMzQzI0MTBfQ0xLRElWTl9IRElWTjsKKworCWlmIChjZmctPmRpdnMucF9kaXZpc29yICE9IGNmZy0+ZGl2cy5oX2Rpdmlzb3IpCisJCWNsa2RpdiB8PSBTM0MyNDEwX0NMS0RJVk5fUERJVk47CisKKwlfX3Jhd193cml0ZWwoY2xrZGl2LCBTM0MyNDEwX0NMS0RJVk4pOworfQorCitzdGF0aWMgaW50IHMzYzI0MTBfY3B1ZnJlcV9jYWxjZGl2cyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpCit7CisJdW5zaWduZWQgbG9uZyBoY2xrLCBmY2xrLCBwY2xrOworCXVuc2lnbmVkIGludCBoZGl2LCBwZGl2OworCXVuc2lnbmVkIGxvbmcgaGNsa19tYXg7CisKKwlmY2xrID0gY2ZnLT5mcmVxLmZjbGs7CisJaGNsa19tYXggPSBjZmctPm1heC5oY2xrOworCisJY2ZnLT5mcmVxLmFybWNsayA9IGZjbGs7CisKKwlzM2NfZnJlcV9kYmcoIiVzOiBmY2xrIGlzICVsdSwgbWF4IGhjbGsgJWx1XG4iLAorCQkgICAgICBfX2Z1bmNfXywgZmNsaywgaGNsa19tYXgpOworCisJaGRpdiA9IChmY2xrID4gY2ZnLT5tYXguaGNsaykgPyAyIDogMTsKKwloY2xrID0gZmNsayAvIGhkaXY7CisKKwlpZiAoaGNsayA+IGNmZy0+bWF4LmhjbGspIHsKKwkJczNjX2ZyZXFfZGJnKCIlczogaGNsayB0b28gYmlnXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBkaXYgPSAoaGNsayA+IGNmZy0+bWF4LnBjbGspID8gMiA6IDE7CisJcGNsayA9IGhjbGsgLyBwZGl2OworCisJaWYgKHBjbGsgPiBjZmctPm1heC5wY2xrKSB7CisJCXMzY19mcmVxX2RiZygiJXM6IHBjbGsgdG9vIGJpZ1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwZGl2ICo9IGhkaXY7CisKKwkvKiByZWNvcmQgdGhlIHJlc3VsdCAqLworCWNmZy0+ZGl2cy5wX2Rpdmlzb3IgPSBwZGl2OworCWNmZy0+ZGl2cy5oX2Rpdmlzb3IgPSBoZGl2OworCisJcmV0dXJuIDAgICAgICA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2NwdWZyZXFfaW5mbyBzM2MyNDEwX2NwdWZyZXFfaW5mbyA9IHsKKwkubWF4CQk9IHsKKwkJLmZjbGsJPSAyMDAwMDAwMDAsCisJCS5oY2xrCT0gMTAwMDAwMDAwLAorCQkucGNsawk9ICA1MDAwMDAwMCwKKwl9LAorCisJLyogdHJhbnNpdGlvbiBsYXRlbmN5IGlzIGFib3V0IDVtcyB3b3JzdC1jYXNlLCBzbworCSAqIHNldCAxMG1zIHRvIGJlIHN1cmUgKi8KKwkubGF0ZW5jeQk9IDEwMDAwMDAwLAorCisJLmxvY2t0aW1lX20JPSAxNTAsCisJLmxvY2t0aW1lX3UJPSAxNTAsCisJLmxvY2t0aW1lX2JpdHMJPSAxMiwKKworCS5uZWVkX3BsbAk9IDEsCisKKwkubmFtZQkJPSAiczNjMjQxMCIsCisJLmNhbGNfaW90aW1pbmcJPSBzM2MyNDEwX2lvdGltaW5nX2NhbGMsCisJLnNldF9pb3RpbWluZwk9IHMzYzI0MTBfaW90aW1pbmdfc2V0LAorCS5nZXRfaW90aW1pbmcJPSBzM2MyNDEwX2lvdGltaW5nX2dldCwKKwkucmVzdW1lX2Nsb2Nrcwk9IHMzYzI0MTBfc2V0dXBfY2xvY2tzLAorCisJLnNldF9mdmNvCT0gczNjMjQxMF9zZXRfZnZjbywKKwkuc2V0X3JlZnJlc2gJPSBzM2MyNDEwX2NwdWZyZXFfc2V0cmVmcmVzaCwKKwkuc2V0X2RpdnMJPSBzM2MyNDEwX2NwdWZyZXFfc2V0ZGl2cywKKwkuY2FsY19kaXZzCT0gczNjMjQxMF9jcHVmcmVxX2NhbGNkaXZzLAorCisJLmRlYnVnX2lvX3Nob3cJPSBzM2NfY3B1ZnJlcV9kZWJ1Z2ZzX2NhbGwoczNjMjQxMF9pb3RpbWluZ19kZWJ1Z2ZzKSwKK307CisKK3N0YXRpYyBpbnQgczNjMjQxMF9jcHVmcmVxX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCXJldHVybiBzM2NfY3B1ZnJlcV9yZWdpc3RlcigmczNjMjQxMF9jcHVmcmVxX2luZm8pOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMF9jcHVmcmVxX2RyaXZlciA9IHsKKwkuYWRkCQk9IHMzYzI0MTBfY3B1ZnJlcV9hZGQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwX2NwdWZyZXFfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX3N5c2NsYXNzLAorCQkJCSAgICAgICZzM2MyNDEwX2NwdWZyZXFfZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDEwX2NwdWZyZXFfaW5pdCk7CisKK3N0YXRpYyBpbnQgczNjMjQxMGFfY3B1ZnJlcV9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKK3sKKwkvKiBhbHRlciB0aGUgbWF4aW11bSBmcmVxIHNldHRpbmdzIGZvciBTM0MyNDEwQS4gSWYgYSBib2FyZCBrbm93cworCSAqIGl0IG9ubHkgaGFzIGEgbWF4aW11bSBvZiAyMDAsIHRoZW4gaXQgc2hvdWxkIHJlZ2lzdGVyIGl0cyBvd24KKwkgKiBsaW1pdHMuICovCisKKwlzM2MyNDEwX2NwdWZyZXFfaW5mby5tYXguZmNsayA9IDI2NjAwMDAwMDsKKwlzM2MyNDEwX2NwdWZyZXFfaW5mby5tYXguaGNsayA9IDEzMzAwMDAwMDsKKwlzM2MyNDEwX2NwdWZyZXFfaW5mby5tYXgucGNsayA9ICA2NjUwMDAwMDsKKwlzM2MyNDEwX2NwdWZyZXFfaW5mby5uYW1lID0gInMzYzI0MTBhIjsKKworCXJldHVybiBzM2MyNDEwX2NwdWZyZXFfYWRkKHN5c2Rldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwYV9jcHVmcmVxX2RyaXZlciA9IHsKKwkuYWRkCQk9IHMzYzI0MTBhX2NwdWZyZXFfYWRkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQxMGFfY3B1ZnJlcV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBhX3N5c2NsYXNzLAorCQkJCSAgICAgICZzM2MyNDEwYV9jcHVmcmVxX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQxMGFfY3B1ZnJlcV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwppbmRleCBkYmY5NmU2Li42M2I3NTNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCkBAIC0xNjQsNiArMTY0LDE3IEBACiB9CiAKIGFyY2hfaW5pdGNhbGwoczNjMjQxMF9kbWFfZHJ2aW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwYV9kbWFfZHJpdmVyID0geworCS5hZGQJPSBzM2MyNDEwX2RtYV9hZGQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwYV9kbWFfZHJ2aW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwYV9zeXNjbGFzcywgJnMzYzI0MTBhX2RtYV9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKHMzYzI0MTBhX2RtYV9kcnZpbml0KTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDJhMjM4NGYuLjZjMTJjNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0xNjQsNiArMTY0LDEyIEBACiAjZGVmaW5lIElSUV9TM0NVQVJUX1RYMwkJSVJRX1MzQzI0NDNfVFgzCiAjZGVmaW5lIElSUV9TM0NVQVJUX0VSUjMJSVJRX1MzQzI0NDNfRVJSMwogCisjaWZkZWYgQ09ORklHX0NQVV9TM0MyNDQwCisjZGVmaW5lIElSUV9TM0MyNDR4X0FDOTcgSVJRX1MzQzI0NDBfQUM5NworI2Vsc2UKKyNkZWZpbmUgSVJRX1MzQzI0NHhfQUM5NyBJUlFfUzNDMjQ0M19BQzk3CisjZW5kaWYKKwogLyogT3VyIEZJUXMgYXJlIHJvdXRhYmxlIGZyb20gSVJRX0VJTlQwIHRvIElSUV9BRENQQVJFTlQgKi8KICNkZWZpbmUgRklRX1NUQVJUCQlJUlFfRUlOVDAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggZTk5YjIxMi4uYjA0OWU2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC02Nyw2ICs2NywxMyBAQAogI2RlZmluZSBTM0MyNDQzX1BBX0hTTU1DICAgKDB4NEE4MDAwMDApCiAjZGVmaW5lIFMzQzI0NDNfU1pfSFNNTUMgICAoMjU2KQogCisvKiBTM0MyNDEyIG1lbW9yeSBhbmQgSU8gY29udHJvbHMgKi8KKyNkZWZpbmUgUzNDMjQxMl9QQV9TU01DCSgweDRGMDAwMDAwKQorI2RlZmluZSBTM0MyNDEyX1ZBX1NTTUMJUzNDX0FERFJfQ1BVKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgUzNDMjQxMl9QQV9FQkkJKDB4NDg4MDAwMDApCisjZGVmaW5lIFMzQzI0MTJfVkFfRUJJCVMzQ19BRERSX0NQVSgweDAwMDEwMDAwKQorCiAvKiBwaHlzaWNhbCBhZGRyZXNzZXMgb2YgYWxsIHRoZSBjaGlwLXNlbGVjdCBhcmVhcyAqLwogCiAjZGVmaW5lIFMzQzI0MTBfQ1MwICgweDAwMDAwMDAwKQpAQCAtMTAzLDUgKzExMCw2IEBACiAjZGVmaW5lIFMzQ19QQV9VQVJUCSAgICBTM0MyNFhYX1BBX1VBUlQKICNkZWZpbmUgUzNDX1BBX1VTQkhPU1QJUzNDMjQxMF9QQV9VU0JIT1NUCiAjZGVmaW5lIFMzQ19QQV9IU01NQzAJICAgIFMzQzI0NDNfUEFfSFNNTUMKKyNkZWZpbmUgUzNDX1BBX05BTkQJICAgIFMzQzI0WFhfUEFfTkFORAogCiAjZW5kaWYgLyogX19BU01fQVJDSF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmgKaW5kZXggYjI3OGQwYy4uZjZlOGVlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby5oCkBAIC0zMjgsMTMgKzMyOCwxNSBAQAogCiAjZGVmaW5lIFMzQzI0MTBfR1BEOF9WRDE2CSgweDAyIDw8IDE2KQogI2RlZmluZSBTM0MyNDAwX0dQRDhfVE9VVDMJKDB4MDIgPDwgMTYpCisjZGVmaW5lIFMzQzI0NDBfR1BEOF9TUElNSVNPMQkoMHgwMyA8PCAxNikKIAogI2RlZmluZSBTM0MyNDEwX0dQRDlfVkQxNwkoMHgwMiA8PCAxOCkKICNkZWZpbmUgUzNDMjQwMF9HUEQ5X1RDTEswCSgweDAyIDw8IDE4KQotI2RlZmluZSBTM0MyNDEwX0dQRDlfTUFTSyAgICAgICAoMHgwMyA8PCAxOCkKKyNkZWZpbmUgUzNDMjQ0MF9HUEQ5X1NQSU1PU0kxCSgweDAzIDw8IDE4KQogCiAjZGVmaW5lIFMzQzI0MTBfR1BEMTBfVkQxOAkoMHgwMiA8PCAyMCkKICNkZWZpbmUgUzNDMjQwMF9HUEQxMF9uV0FJVAkoMHgwMiA8PCAyMCkKKyNkZWZpbmUgUzNDMjQ0MF9HUEQxMF9TUElDTEsxCSgweDAzIDw8IDIwKQogCiAjZGVmaW5lIFMzQzI0MTBfR1BEMTFfVkQxOQkoMHgwMiA8PCAyMikKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLW1lbS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLW1lbS5oCmluZGV4IDU3NzU5ODAuLjdmN2M1MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1tZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtbWVtLmgKQEAgLTczLDYgKzczLDE2IEBACiAjZGVmaW5lIFMzQzI0MTBfQldTQ09OX1dTNwkJKDE8PDMwKQogI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9TVDcJCSgxPDwzMSkKIAorLyogYWNjZXNvciBmdW5jdGlvbnMgZm9yIGdldHRpbmcgQkFOSyhuKSBjb25maWd1cmF0aW9uLiAobiAhPSAwKSAqLworCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX0dFVChfYndzY29uLCBfYmFuaykgKCgoX2J3c2NvbikgPj4gKChfYmFuaykgKiA0KSkgJiAweGYpCisKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFc4CQkoMCkKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFcxNgkJKDEpCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX0RXMzIJCSgyKQorI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9XUwkJKDEgPDwgMikKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fU1QJCSgxIDw8IDMpCisKIC8qIG1lbW9yeSBzZXQgKHJvbSwgcmFtKSAqLwogI2RlZmluZSBTM0MyNDEwX0JBTktDT04wCQlTM0MyNDEwX01FTVJFRygweDAwMDQpCiAjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTjEJCVMzQzI0MTBfTUVNUkVHKDB4MDAwOCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1zM2MyNDEyLW1lbS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLXMzYzI0MTItbWVtLmgKaW5kZXggYTRiZjI3MS4uZmI2MzUyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLXMzYzI0MTItbWVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLXMzYzI0MTItbWVtLmgKQEAgLTE0LDkgKzE0LDExIEBACiAjaWZuZGVmIF9fQVNNX0FSTV9SRUdTX1MzQzI0MTJfTUVNCiAjZGVmaW5lIF9fQVNNX0FSTV9SRUdTX1MzQzI0MTJfTUVNCiAKLSNpZm5kZWYgUzNDMjQxMl9NRU1SRUcKICNkZWZpbmUgUzNDMjQxMl9NRU1SRUcoeCkgKFMzQzI0WFhfVkFfTUVNQ1RSTCArICh4KSkKLSNlbmRpZgorI2RlZmluZSBTM0MyNDEyX0VCSVJFRyh4KSAoUzNDMjQxMl9WQV9FQkkgKyAoeCkpCisKKyNkZWZpbmUgUzNDMjQxMl9TU01DUkVHKHgpIChTM0MyNDEyX1ZBX1NTTUMgKyAoeCkpCisjZGVmaW5lIFMzQzI0MTJfU1NNQyh4LCBvKSAoUzNDMjQxMl9TU01DUkVHKCh4ICogMHgyMCkgKyAobykpKQogCiAjZGVmaW5lIFMzQzI0MTJfQkFOS0NGRwkJCVMzQzI0MTJfTUVNUkVHKDB4MDApCiAjZGVmaW5lIFMzQzI0MTJfQkFOS0NPTjEJCVMzQzI0MTJfTUVNUkVHKDB4MDQpCkBAIC0yNiw0ICsyOCwyMSBAQAogI2RlZmluZSBTM0MyNDEyX1JFRlJFU0gJCQlTM0MyNDEyX01FTVJFRygweDEwKQogI2RlZmluZSBTM0MyNDEyX1RJTUVPVVQJCQlTM0MyNDEyX01FTVJFRygweDE0KQogCisvKiBFQkkgY29udHJvbCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBTM0MyNDEyX0VCSV9QUgkJCVMzQzI0MTJfRUJJUkVHKDB4MDApCisjZGVmaW5lIFMzQzI0MTJfRUJJX0JBTktDRkcJCVMzQzI0MTJfRUJJUkVHKDB4MDQpCisKKy8qIFNTTUMgY29udHJvbCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBTM0MyNDEyX1NTTUNfQkFOSyh4KQkJUzNDMjQxMl9TU01DKHgsIDB4MDApCisjZGVmaW5lIFMzQzI0MTJfU01JRENZUih4KQkJUzNDMjQxMl9TU01DKHgsIDB4MDApCisjZGVmaW5lIFMzQzI0MTJfU01CV1NUUkQoeCkJCVMzQzI0MTJfU1NNQyh4LCAweDA0KQorI2RlZmluZSBTM0MyNDEyX1NNQldTVFdSUih4KQkJUzNDMjQxMl9TU01DKHgsIDB4MDgpCisjZGVmaW5lIFMzQzI0MTJfU01CV1NUT0VOUih4KQkJUzNDMjQxMl9TU01DKHgsIDB4MEMpCisjZGVmaW5lIFMzQzI0MTJfU01CV1NUV0VOUih4KQkJUzNDMjQxMl9TU01DKHgsIDB4MTApCisjZGVmaW5lIFMzQzI0MTJfU01CQ1IoeCkJCVMzQzI0MTJfU1NNQyh4LCAweDE0KQorI2RlZmluZSBTM0MyNDEyX1NNQlNSKHgpCQlTM0MyNDEyX1NTTUMoeCwgMHgxOCkKKyNkZWZpbmUgUzNDMjQxMl9TTUJXU1RCUkRSKHgpCQlTM0MyNDEyX1NTTUMoeCwgMHgxQykKKwogI2VuZGlmIC8qICBfX0FTTV9BUk1fUkVHU19TM0MyNDEyX01FTSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zcGkuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3BpLmgKaW5kZXggMWQzMDBmYi4uMTkzYjM5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zcGkuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3NwaS5oCkBAIC0zMCw0ICszMCw3IEBACiBleHRlcm4gdm9pZCBzM2MyNHh4X3NwaV9ncGlvY2ZnX2J1czFfZ3BnNV82Xzcoc3RydWN0IHMzYzI0MTBfc3BpX2luZm8gKnNwaSwKIAkJCQkJICAgICAgaW50IGVuYWJsZSk7CiAKK2V4dGVybiB2b2lkIHMzYzI0eHhfc3BpX2dwaW9jZmdfYnVzMV9ncGQ4XzlfMTAoc3RydWN0IHMzYzI0MTBfc3BpX2luZm8gKnNwaSwKKwkJCQkJICAgICAgIGludCBlbmFibGUpOworCiAjZW5kaWYgLyogX19BU01fQVJDSF9TUElfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCmluZGV4IDkyMTUwMzkuLjVlMmYzNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKQEAgLTM5LDkgKzM5LDIyIEBACiAJLnJlc3VtZQkJPSBzM2MyNHh4X2lycV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgaW50IHMzYzI0MTBfaXJxX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBfaXJxX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9zeXNjbGFzcywgJnMzYzI0MTBfaXJxX2RyaXZlcik7CiB9CiAKIGFyY2hfaW5pdGNhbGwoczNjMjQxMF9pcnFfaW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwYV9pcnFfZHJpdmVyID0geworCS5hZGQJCT0gczNjMjQxMF9pcnFfYWRkLAorCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBhX2lycV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBhX3N5c2NsYXNzLCAmczNjMjQxMGFfaXJxX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQxMGFfaXJxX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCmluZGV4IGNlM2JhYmEyLi42NDdjOWFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KIAorI2luY2x1ZGUgPHBsYXQvaHdtb24uaD4KICNpbmNsdWRlIDxwbGF0L25hbmQuaD4KICNpbmNsdWRlIDxwbGF0L2lpYy5oPgogI2luY2x1ZGUgPG1hY2gvZmIuaD4KQEAgLTU5LDYgKzYwLDcgQEAKICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CiAKICNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCiAjaW5jbHVkZSAibm9yLXNpbXRlYy5oIgpAQCAtNTQ3LDcgKzU0OSwzNSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHMzY19od21vbl9wZGF0YSBiYXN0X2h3bW9uX2luZm8gPSB7CisJLyogTENEIGNvbnRyYXN0ICgwLTYuNlYpICovCisJLmluWzBdID0gJihzdHJ1Y3QgczNjX2h3bW9uX2NoY2ZnKSB7CisJCS5uYW1lCQk9ICJsY2QtY29udHJhc3QiLAorCQkubXVsdAkJPSAzMzAwLAorCQkuZGl2CQk9IDUxMiwKKwl9LAorCS8qIExFRCBjdXJyZW50IGZlZWRiYWNrICovCisJLmluWzFdID0gJihzdHJ1Y3QgczNjX2h3bW9uX2NoY2ZnKSB7CisJCS5uYW1lCQk9ICJsZWQtZmVlZGJhY2siLAorCQkubXVsdAkJPSAzMzAwLAorCQkuZGl2CQk9IDEwMjQsCisJfSwKKwkvKiBMQ0QgZmVlZGJhY2sgKDAtNi42VikgKi8KKwkuaW5bMl0gPSAmKHN0cnVjdCBzM2NfaHdtb25fY2hjZmcpIHsKKwkJLm5hbWUJCT0gImxjZC1mZWVkYmFjayIsCisJCS5tdWx0CQk9IDMzMDAsCisJCS5kaXYJCT0gNTEyLAorCX0sCisJLyogVmNvcmUgKDEuOC0yLjBWKSwgVnJlZiAzLjNWICAqLworCS5pblszXSA9ICYoc3RydWN0IHMzY19od21vbl9jaGNmZykgeworCQkubmFtZQkJPSAidmNvcmUiLAorCQkubXVsdAkJPSAzMzAwLAorCQkuZGl2CQk9IDEwMjQsCisJfSwKK307CisKIC8qIFN0YW5kYXJkIEJBU1QgZGV2aWNlcyAqLworLy8gY2F0IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9zM2MyNHh4LWFkYy9zM2MtaHdtb24vaW5fMAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYmFzdF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmczNjX2RldmljZV91c2IsCkBAIC01NTYsNiArNTg2LDggQEAKIAkmczNjX2RldmljZV9pMmMwLAogIAkmczNjX2RldmljZV9ydGMsCiAJJnMzY19kZXZpY2VfbmFuZCwKKwkmczNjX2RldmljZV9hZGMsCisJJnMzY19kZXZpY2VfaHdtb24sCiAJJmJhc3RfZGV2aWNlX2RtOWssCiAJJmJhc3RfZGV2aWNlX2FzaXgsCiAJJmJhc3RfZGV2aWNlX2F4cHAsCkBAIC01NzAsNiArNjAyLDEyIEBACiAJJnMzYzI0eHhfdWNsaywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgX19pbml0ZGF0YSBiYXN0X2NwdWZyZXEgPSB7CisJLnJlZnJlc2gJPSA3ODAwLCAvKiA3Ljh1c2VjICovCisJLmF1dG9faW8JPSAxLAorCS5uZWVkX2lvCT0gMSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBiYXN0X21hcF9pbyh2b2lkKQogewogCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyAqLwpAQCAtNTg4LDYgKzYyNiw3IEBACiAJczNjMjR4eF9yZWdpc3Rlcl9jbG9ja3MoYmFzdF9jbG9ja3MsIEFSUkFZX1NJWkUoYmFzdF9jbG9ja3MpKTsKIAogCXMzY19kZXZpY2VfbmFuZC5kZXYucGxhdGZvcm1fZGF0YSA9ICZiYXN0X25hbmRfaW5mbzsKKwlzM2NfZGV2aWNlX2h3bW9uLmRldi5wbGF0Zm9ybV9kYXRhID0gJmJhc3RfaHdtb25faW5mbzsKIAogCXMzYzI0eHhfaW5pdF9pbyhiYXN0X2lvZGVzYywgQVJSQVlfU0laRShiYXN0X2lvZGVzYykpOwogCXMzYzI0eHhfaW5pdF9jbG9ja3MoMCk7CkBAIC02MDgsNiArNjQ3LDggQEAKIAogCXVzYl9zaW10ZWNfaW5pdCgpOwogCW5vcl9zaW10ZWNfaW5pdCgpOworCisJczNjX2NwdWZyZXFfc2V0Ym9hcmQoJmJhc3RfY3B1ZnJlcSk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoQkFTVCwgIlNpbXRlYy1CQVNUIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbGwuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTc4YzJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BsbC5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9wbGwuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCVZpbmNlbnQgU2FuZGVycyA8dmluY2VAYXJtLmxpbnV4Lm9yZy51az4KKyAqCisgKiBTM0MyNDEwIENQVSBQTEwgdGFibGVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLWNvcmUuaD4KKworc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBwbGxfdmFsc18xMk1IeltdID0geworICAgIHsgLmZyZXF1ZW5jeSA9IDM0MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDgyLCAyLCAzKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDQ1MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDgyLCAxLCAzKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDUxMDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDE2MSwgMywgMyksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDQ4MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDEyMCwgMiwgMyksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDU2MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDE0MiwgMiwgMyksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDY4MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDgyLCAyLCAyKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDc5MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDcxLCAxLCAyKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDg1MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDEwNSwgMiwgMiksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDkwMDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDExMiwgMiwgMiksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDEwMTAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDEyNywgMiwgMiksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDExMzAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDEwNSwgMSwgMiksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDExODAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDE1MCwgMiwgMiksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDEyNDAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDExNiwgMSwgMiksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDEzNTAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDgyLCAyLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE0NzAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDkwLCAyLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE1MjAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDY4LCAxLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE1ODAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDcxLCAxLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE3MDAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDc3LCAxLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE4MDAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDgyLCAxLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE4NjAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDg1LCAxLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE5MjAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDg4LCAxLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDIwMzAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDE2MSwgMywgMSksICB9LAorCisgICAgLyogMjQxMEEgZXh0cmFzICovCisKKyAgICB7IC5mcmVxdWVuY3kgPSAyMTAwMDAwMDAsIC5pbmRleCA9IFBMTFZBTCgxMzIsIDIsIDEpLCAgfSwKKyAgICB7IC5mcmVxdWVuY3kgPSAyMjYwMDAwMDAsIC5pbmRleCA9IFBMTFZBTCgxMDUsIDEsIDEpLCAgfSwKKyAgICB7IC5mcmVxdWVuY3kgPSAyNjYwMDAwMDAsIC5pbmRleCA9IFBMTFZBTCgxMjUsIDEsIDEpLCAgfSwKKyAgICB7IC5mcmVxdWVuY3kgPSAyNjgwMDAwMDAsIC5pbmRleCA9IFBMTFZBTCgxMjYsIDEsIDEpLCAgfSwKKyAgICB7IC5mcmVxdWVuY3kgPSAyNzAwMDAwMDAsIC5pbmRleCA9IFBMTFZBTCgxMjcsIDEsIDEpLCAgfSwKK307CisKK3N0YXRpYyBpbnQgczNjMjQxMF9wbGxzX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXJldHVybiBzM2NfcGxsdGFiX3JlZ2lzdGVyKHBsbF92YWxzXzEyTUh6LCBBUlJBWV9TSVpFKHBsbF92YWxzXzEyTUh6KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwX3BsbHNfZHJ2ID0geworCS5hZGQJPSBzM2MyNDEwX3BsbHNfYWRkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQxMF9wbGxfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX3N5c2NsYXNzLCAmczNjMjQxMF9wbGxzX2Rydik7CisKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDEwX3BsbF9pbml0KTsKKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0MTBhX3BsbHNfZHJ2ID0geworCS5hZGQJPSBzM2MyNDEwX3BsbHNfYWRkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQxMGFfcGxsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMGFfc3lzY2xhc3MsICZzM2MyNDEwYV9wbGxzX2Rydik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQxMGFfcGxsX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwppbmRleCAxNDNlMDhhLi45NjYxMTljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwpAQCAtMTE5LDYgKzExOSwxOCBAQAogfQogCiBhcmNoX2luaXRjYWxsKHMzYzI0MTBfcG1fZHJ2aW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwYV9wbV9kcml2ZXIgPSB7CisJLmFkZAkJPSBzM2MyNDEwX3BtX2FkZCwKKwkucmVzdW1lCQk9IHMzYzI0MTBfcG1fcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQxMGFfcG1fZHJ2aW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwYV9zeXNjbGFzcywgJnMzYzI0MTBhX3BtX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQxMGFfcG1fZHJ2aW5pdCk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKaW5kZXggZmViMTQxYjEuLjkxYmE0MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYwpAQCAtMTA1LDE3ICsxMDUsMzMgQEAKIAlzM2MyNHh4X3NldHVwX2Nsb2NrcyhmY2xrLCBoY2xrLCBwY2xrKTsKIH0KIAorLyogZmFrZSBBUk1DTEsgZm9yIHVzZSB3aXRoIGNwdWZyZXEsIGV0Yy4gKi8KKworc3RhdGljIHN0cnVjdCBjbGsgczNjMjQxMF9hcm1jbGsgPSB7CisJLm5hbWUJPSAiYXJtY2xrIiwKKwkucGFyZW50CT0gJmNsa19mLAorCS5pZAk9IC0xLAorfTsKKwogdm9pZCBfX2luaXQgczNjMjQxMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKIHsKIAlzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3MoeHRhbCk7CiAJczNjMjQxMF9zZXR1cF9jbG9ja3MoKTsKIAlzM2MyNDEwX2Jhc2VjbGtfYWRkKCk7CisJczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQxMF9hcm1jbGspOwogfQogCiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0MTBfc3lzY2xhc3MgPSB7CiAJLm5hbWUgPSAiczNjMjQxMC1jb3JlIiwKIH07CiAKKy8qIE5vdGUsIHdlIHdvdWxkIGhhdmUgbGlrZWQgdG8gbmFtZSB0aGlzIHMzYzI0MTAtY29yZSwgYnV0IHdlIGNhbm5vdAorICogcmVnaXN0ZXIgdHdvIHN5c2Rldl9jbGFzcyB3aXRoIHRoZSBzYW1lIG5hbWUuCisgKi8KK3N0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQxMGFfc3lzY2xhc3MgPSB7CisJLm5hbWUgPSAiczNjMjQxMGEtY29yZSIsCit9OworCiBzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgczNjMjQxMF9zeXNkZXYgPSB7CiAJLmNscwkJPSAmczNjMjQxMF9zeXNjbGFzcywKIH07CkBAIC0xMzMsOSArMTQ5LDIyIEBACiAKIGNvcmVfaW5pdGNhbGwoczNjMjQxMF9jb3JlX2luaXQpOwogCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwYV9jb3JlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZzM2MyNDEwYV9zeXNjbGFzcyk7Cit9CisKK2NvcmVfaW5pdGNhbGwoczNjMjQxMGFfY29yZV9pbml0KTsKKwogaW50IF9faW5pdCBzM2MyNDEwX2luaXQodm9pZCkKIHsKIAlwcmludGsoIlMzQzI0MTA6IEluaXRpYWxpc2luZyBhcmNoaXRlY3R1cmVcbiIpOwogCiAJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczNjMjQxMF9zeXNkZXYpOwogfQorCitpbnQgX19pbml0IHMzYzI0MTBhX2luaXQodm9pZCkKK3sKKwlzM2MyNDEwX3N5c2Rldi5jbHMgPSAmczNjMjQxMGFfc3lzY2xhc3M7CisJcmV0dXJuIHMzYzI0MTBfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZwppbmRleCA2MzU4NmZmLi4zNWMxYmRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZwpAQCAtMzIsNiArMzIsMTUgQEAKIAloZWxwCiAJICBJbnRlcm5hbCBjb25maWcgbm9kZSB0byBhcHBseSBTM0MyNDEyIHBvd2VyIG1hbmFnZW1lbnQKIAorIyBOb3RlLCB0aGUgUzNDMjQxMiBJT3RpbWluZyBzdXBwb3J0IGlzIGluIHBsYXQtczNjMjR4eAorCitjb25maWcgUzNDMjQxMl9DUFVGUkVRCisJYm9vbAorCWRlcGVuZHMgb24gQ1BVX0ZSRVFfUzNDMjRYWCAmJiBDUFVfUzNDMjQxMgorCXNlbGVjdCBTM0MyNDEyX0lPVElNSU5HCisJZGVmYXVsdCB5CisJaGVscAorCSAgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIHN1cHBvcnQgZm9yIFMzQzI0MTIgYW5kIFMzQzI0MTMgU29DIENQVXMuCiAKIG1lbnUgIlMzQzI0MTIgTWFjaGluZXMiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9NYWtlZmlsZQppbmRleCAyMDkxOGQ1Li41MzBlYzQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBACiBvYmotJChDT05GSUdfQ1BVX1MzQzI0MTIpCSs9IGdwaW8ubwogb2JqLSQoQ09ORklHX1MzQzI0MTJfRE1BKQkrPSBkbWEubwogb2JqLSQoQ09ORklHX1MzQzI0MTJfUE0pCSs9IHBtLm8gc2xlZXAubworb2JqLSQoQ09ORklHX1MzQzI0MTJfQ1BVRlJFUSkJKz0gY3B1LWZyZXEubwogCiAjIE1hY2hpbmUgc3VwcG9ydAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY3B1LWZyZXEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9jcHUtZnJlcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2VhMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY3B1LWZyZXEuYwpAQCAtMCwwICsxLDI1NyBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2NwdS1mcmVxLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMiBDUFUgRnJlcXVlbmN5IHNjYWxsaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDEyLW1lbS5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS1jb3JlLmg+CisKKy8qIG91ciBjbG9jayByZXNvdXJjZXMuICovCitzdGF0aWMgc3RydWN0IGNsayAqeHRhbDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpmY2xrOworc3RhdGljIHN0cnVjdCBjbGsgKmhjbGs7CitzdGF0aWMgc3RydWN0IGNsayAqYXJtY2xrOworCisvKiBIRElWOiAxLCAyLCAzLCA0LCA2LCA4ICovCisKK3N0YXRpYyBpbnQgczNjMjQxMl9jcHVmcmVxX2NhbGNkaXZzKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwl1bnNpZ25lZCBpbnQgaGRpdiwgcGRpdiwgYXJtZGl2LCBkdnM7CisJdW5zaWduZWQgbG9uZyBoY2xrLCBmY2xrLCBhcm1jbGssIGFybWRpdl9jbGs7CisJdW5zaWduZWQgbG9uZyBoY2xrX21heDsKKworCWZjbGsgPSBjZmctPmZyZXEuZmNsazsKKwlhcm1jbGsgPSBjZmctPmZyZXEuYXJtY2xrOworCWhjbGtfbWF4ID0gY2ZnLT5tYXguaGNsazsKKworCS8qIFdlIGNhbid0IHJ1biBoY2xrIGFib3ZlIGFybWNsayBhcyBhdCB0aGUgYmVzdCB3ZSBoYXZlIHRvCisJICogaGF2ZSBhcm1jbGsgYW5kIGhjbGsgaW4gZHZzIG1vZGUuICovCisKKwlpZiAoaGNsa19tYXggPiBhcm1jbGspCisJCWhjbGtfbWF4ID0gYXJtY2xrOworCisJczNjX2ZyZXFfZGJnKCIlczogZmNsaz0lbHUsIGFybWNsaz0lbHUsIGhjbGtfbWF4PSVsdVxuIiwKKwkJICAgICBfX2Z1bmNfXywgZmNsaywgYXJtY2xrLCBoY2xrX21heCk7CisJczNjX2ZyZXFfZGJnKCIlczogd2FudCBmPSVsdSwgYXJtPSVsdSwgaD0lbHUsIHA9JWx1XG4iLAorCQkgICAgIF9fZnVuY19fLCBjZmctPmZyZXEuZmNsaywgY2ZnLT5mcmVxLmFybWNsaywKKwkJICAgICBjZmctPmZyZXEuaGNsaywgY2ZnLT5mcmVxLnBjbGspOworCisJYXJtZGl2ID0gZmNsayAvIGFybWNsazsKKworCWlmIChhcm1kaXYgPCAxKQorCQlhcm1kaXYgPSAxOworCWlmIChhcm1kaXYgPiAyKQorCQlhcm1kaXYgPSAyOworCisJY2ZnLT5kaXZzLmFybV9kaXZpc29yID0gYXJtZGl2OworCWFybWRpdl9jbGsgPSBmY2xrIC8gYXJtZGl2OworCisJaGRpdiA9IGFybWRpdl9jbGsgLyBoY2xrX21heDsKKwlpZiAoaGRpdiA8IDEpCisJCWhkaXYgPSAxOworCisJY2ZnLT5mcmVxLmhjbGsgPSBoY2xrID0gYXJtZGl2X2NsayAvIGhkaXY7CisKKwkvKiBzZXQgZHZzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIHJlYWNoZWQgYXJtY2xrIG9yIG5vdC4gKi8KKwljZmctPmRpdnMuZHZzID0gZHZzID0gYXJtY2xrIDwgYXJtZGl2X2NsazsKKworCS8qIHVwZGF0ZSB0aGUgYWN0dWFsIGFybWNsayB3ZSBhY2hpZXZlZC4gKi8KKwljZmctPmZyZXEuYXJtY2xrID0gZHZzID8gaGNsayA6IGFybWRpdl9jbGs7CisKKwlzM2NfZnJlcV9kYmcoIiVzOiBhcm1jbGsgJWx1LCBoY2xrICVsdSwgYXJtZGl2ICVkLCBoZGl2ICVkLCBkdnMgJWRcbiIsCisJCSAgICAgX19mdW5jX18sIGFybWNsaywgaGNsaywgYXJtZGl2LCBoZGl2LCBjZmctPmRpdnMuZHZzKTsKKworCWlmIChoZGl2ID4gNCkKKwkJZ290byBpbnZhbGlkOworCisJcGRpdiA9IChoY2xrID4gY2ZnLT5tYXgucGNsaykgPyAyIDogMTsKKworCWlmICgoaGNsayAvIHBkaXYpID4gY2ZnLT5tYXgucGNsaykKKwkJcGRpdisrOworCisJY2ZnLT5mcmVxLnBjbGsgPSBoY2xrIC8gcGRpdjsKKworCXMzY19mcmVxX2RiZygiJXM6IHBkaXYgJWRcbiIsIF9fZnVuY19fLCBwZGl2KTsKKworCWlmIChwZGl2ID4gMikKKwkJZ290byBpbnZhbGlkOworCisJcGRpdiAqPSBoZGl2OworCisJLyogc3RvcmUgdGhlIHJlc3VsdCwgYW5kIHRoZW4gcmV0dXJuICovCisKKwljZmctPmRpdnMuaF9kaXZpc29yID0gaGRpdiAqIGFybWRpdjsKKwljZmctPmRpdnMucF9kaXZpc29yID0gcGRpdiAqIGFybWRpdjsKKworCXJldHVybiAwOworCisgaW52YWxpZDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgczNjMjQxMl9jcHVmcmVxX3NldGRpdnMoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCXVuc2lnbmVkIGxvbmcgY2xrZGl2OworCXVuc2lnbmVkIGxvbmcgb2xkZGl2OworCisJb2xkZGl2ID0gY2xrZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtESVZOKTsKKworCS8qIGNsZWFyIG9mZiBjdXJyZW50IGNsb2NrIGluZm8gKi8KKworCWNsa2RpdiAmPSB+UzNDMjQxMl9DTEtESVZOX0FSTURJVk47CisJY2xrZGl2ICY9IH5TM0MyNDEyX0NMS0RJVk5fSERJVk5fTUFTSzsKKwljbGtkaXYgJj0gflMzQzI0MTJfQ0xLRElWTl9QRElWTjsKKworCWlmIChjZmctPmRpdnMuYXJtX2Rpdmlzb3IgPT0gMikKKwkJY2xrZGl2IHw9IFMzQzI0MTJfQ0xLRElWTl9BUk1ESVZOOworCisJY2xrZGl2IHw9ICgoY2ZnLT5kaXZzLmhfZGl2aXNvciAvIGNmZy0+ZGl2cy5hcm1fZGl2aXNvcikgLSAxKTsKKworCWlmIChjZmctPmRpdnMucF9kaXZpc29yICE9IGNmZy0+ZGl2cy5oX2Rpdmlzb3IpCisJCWNsa2RpdiB8PSBTM0MyNDEyX0NMS0RJVk5fUERJVk47CisKKwlzM2NfZnJlcV9kYmcoIiVzOiBkaXYgJTA4bHggPT4gJTA4bHhcbiIsIF9fZnVuY19fLCBvbGRkaXYsIGNsa2Rpdik7CisJX19yYXdfd3JpdGVsKGNsa2RpdiwgUzNDMjQxMF9DTEtESVZOKTsKKworCWNsa19zZXRfcGFyZW50KGFybWNsaywgY2ZnLT5kaXZzLmR2cyA/IGhjbGsgOiBmY2xrKTsKK30KKworc3RhdGljIHZvaWQgczNjMjQxMl9jcHVmcmVxX3NldHJlZnJlc2goc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCXN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCAqYm9hcmQgPSBjZmctPmJvYXJkOworCXVuc2lnbmVkIGxvbmcgcmVmcmVzaDsKKworCXMzY19mcmVxX2RiZygiJXM6IHJlZnJlc2ggJXUgbnMsIGhjbGsgJWx1XG4iLCBfX2Z1bmNfXywKKwkJICAgICBib2FyZC0+cmVmcmVzaCwgY2ZnLT5mcmVxLmhjbGspOworCisJLyogUmVkdWNlIGJvdGggdGhlIHJlZnJlc2ggdGltZSAoaW4gbnMpIGFuZCB0aGUgZnJlcXVlbmN5IChpbiBNSHopCisJICogYnkgMTAgZWFjaCB0byBlbnN1cmUgdGhhdCB3ZSBkbyBub3Qgb3ZlcmZsb3cgMzIgYml0IG51bWJlcnMuIFRoaXMKKwkgKiBzaG91bGQgd29yayBmb3IgSENMSyB1cCB0byAxMzNNSHogYW5kIHJlZnJlc2ggcGVyaW9kIHVwIHRvIDMwdXNlYy4KKwkgKi8KKworCXJlZnJlc2ggPSAoYm9hcmQtPnJlZnJlc2ggLyAxMCk7CisJcmVmcmVzaCAqPSAoY2ZnLT5mcmVxLmhjbGsgLyAxMDApOworCXJlZnJlc2ggLz0gKDEgKiAxMDAwICogMTAwMCk7CS8qIDEwXjYgKi8KKworCXMzY19mcmVxX2RiZygiJXM6IHNldHRpbmcgcmVmcmVzaCAweCUwOGx4XG4iLCBfX2Z1bmNfXywgcmVmcmVzaCk7CisJX19yYXdfd3JpdGVsKHJlZnJlc2gsIFMzQzI0MTJfUkVGUkVTSCk7Cit9CisKKy8qIHNldCB0aGUgZGVmYXVsdCBjcHUgZnJlcXVlbmN5IGluZm9ybWF0aW9uLCBiYXNlZCBvbiBhbiAyMDBNSHogcGFydAorICogYXMgd2UgaGF2ZSBubyBvdGhlciB3YXkgb2YgZGV0ZWN0aW5nIHRoZSBzcGVlZCByYXRpbmcgaW4gc29mdHdhcmUuCisgKi8KKworc3RhdGljIHN0cnVjdCBzM2NfY3B1ZnJlcV9pbmZvIHMzYzI0MTJfY3B1ZnJlcV9pbmZvID0geworCS5tYXgJCT0geworCQkuZmNsawk9IDIwMDAwMDAwMCwKKwkJLmhjbGsJPSAxMDAwMDAwMDAsCisJCS5wY2xrCT0gIDUwMDAwMDAwLAorCX0sCisKKwkubGF0ZW5jeQk9IDUwMDAwMDAsIC8qIDVtcyAqLworCisJLmxvY2t0aW1lX20JPSAxNTAsCisJLmxvY2t0aW1lX3UJPSAxNTAsCisJLmxvY2t0aW1lX2JpdHMJPSAxNiwKKworCS5uYW1lCQk9ICJzM2MyNDEyIiwKKwkuc2V0X3JlZnJlc2gJPSBzM2MyNDEyX2NwdWZyZXFfc2V0cmVmcmVzaCwKKwkuc2V0X2RpdnMJPSBzM2MyNDEyX2NwdWZyZXFfc2V0ZGl2cywKKwkuY2FsY19kaXZzCT0gczNjMjQxMl9jcHVmcmVxX2NhbGNkaXZzLAorCisJLmNhbGNfaW90aW1pbmcJPSBzM2MyNDEyX2lvdGltaW5nX2NhbGMsCisJLnNldF9pb3RpbWluZwk9IHMzYzI0MTJfaW90aW1pbmdfc2V0LAorCS5nZXRfaW90aW1pbmcJPSBzM2MyNDEyX2lvdGltaW5nX2dldCwKKworCS5yZXN1bWVfY2xvY2tzCT0gczNjMjQxMl9zZXR1cF9jbG9ja3MsCisKKwkuZGVidWdfaW9fc2hvdyAgPSBzM2NfY3B1ZnJlcV9kZWJ1Z2ZzX2NhbGwoczNjMjQxMl9pb3RpbWluZ19kZWJ1Z2ZzKSwKK307CisKK3N0YXRpYyBpbnQgczNjMjQxMl9jcHVmcmVxX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmNsa19yYXRlOworCisJaGNsayA9IGNsa19nZXQoTlVMTCwgImhjbGsiKTsKKwlpZiAoSVNfRVJSKGhjbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBmaW5kIGhjbGsgY2xvY2tcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJZmNsayA9IGNsa19nZXQoTlVMTCwgImZjbGsiKTsKKwlpZiAoSVNfRVJSKGZjbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBmaW5kIGZjbGsgY2xvY2tcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJfZmNsazsKKwl9CisKKwlmY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZmNsayk7CisJaWYgKGZjbGtfcmF0ZSA+IDIwMDAwMDAwMCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiJXM6IGZjbGsgJWxkIE1IeiwgYXNzdW1pbmcgMjY2TUh6IGNhcGFibGUgcGFydFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBmY2xrX3JhdGUgLyAxMDAwMDAwKTsKKwkJczNjMjQxMl9jcHVmcmVxX2luZm8ubWF4LmZjbGsgPSAyNjYwMDAwMDA7CisJCXMzYzI0MTJfY3B1ZnJlcV9pbmZvLm1heC5oY2xrID0gMTMzMDAwMDAwOworCQlzM2MyNDEyX2NwdWZyZXFfaW5mby5tYXgucGNsayA9ICA2NjAwMDAwMDsKKwl9CisKKwlhcm1jbGsgPSBjbGtfZ2V0KE5VTEwsICJhcm1jbGsiKTsKKwlpZiAoSVNfRVJSKGFybWNsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGZpbmQgYXJtIGNsb2NrXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX2FybWNsazsKKwl9CisKKwl4dGFsID0gY2xrX2dldChOVUxMLCAieHRhbCIpOworCWlmIChJU19FUlIoeHRhbCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGZpbmQgeHRhbCBjbG9ja1xuIiwgX19mdW5jX18pOworCQlnb3RvIGVycl94dGFsOworCX0KKworCXJldHVybiBzM2NfY3B1ZnJlcV9yZWdpc3RlcigmczNjMjQxMl9jcHVmcmVxX2luZm8pOworCitlcnJfeHRhbDoKKwljbGtfcHV0KGFybWNsayk7CitlcnJfYXJtY2xrOgorCWNsa19wdXQoZmNsayk7CitlcnJfZmNsazoKKwljbGtfcHV0KGhjbGspOworCisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEyX2NwdWZyZXFfZHJpdmVyID0geworCS5hZGQJCT0gczNjMjQxMl9jcHVmcmVxX2FkZCwKK307CisKK3N0YXRpYyBpbnQgczNjMjQxMl9jcHVmcmVxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMl9zeXNjbGFzcywKKwkJCQkgICAgICAmczNjMjQxMl9jcHVmcmVxX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQxMl9jcHVmcmVxX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9zM2MyNDEyLmMKaW5kZXggNWI1YWJhNi4uYmVmMzlmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jCkBAIC02OSw2ICs2OSwxOCBAQAogCUlPREVTQ19FTlQoQ0xLUFdSKSwKIAlJT0RFU0NfRU5UKFRJTUVSKSwKIAlJT0RFU0NfRU5UKFdBVENIRE9HKSwKKwl7CisJCS52aXJ0dWFsID0gKHVuc2lnbmVkIGxvbmcpUzNDMjQxMl9WQV9TU01DLAorCQkucGZuCSA9IF9fcGh5c190b19wZm4oUzNDMjQxMl9QQV9TU01DKSwKKwkJLmxlbmd0aAkgPSBTWl8xTSwKKwkJLnR5cGUJID0gTVRfREVWSUNFLAorCX0sCisJeworCQkudmlydHVhbCA9ICh1bnNpZ25lZCBsb25nKVMzQzI0MTJfVkFfRUJJLAorCQkucGZuCSA9IF9fcGh5c190b19wZm4oUzNDMjQxMl9QQV9FQkkpLAorCQkubGVuZ3RoCSA9IFNaXzFNLAorCQkudHlwZQkgPSBNVF9ERVZJQ0UsCisJfSwKIH07CiAKIC8qIHVhcnQgcmVnaXN0cmF0aW9uIHByb2Nlc3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKaW5kZXggOGNmZWFlYy4uOGFlMWIyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKQEAgLTMzLDYgKzMzLDcgQEAKIAlzZWxlY3QgUE1fU0lNVEVDIGlmIFBNCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQogCXNlbGVjdCBTM0MyNFhYX0dQSU9fRVhUUkE2NAorCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTIwMDAwMDAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIEVsZWN0cm9uaWNzIEFOVUJJUwpAQCAtNDQsNiArNDUsOCBAQAogCXNlbGVjdCBTM0MyNFhYX0RDTEsKIAlzZWxlY3QgUE1fU0lNVEVDIGlmIFBNCiAJc2VsZWN0IFMzQzI0WFhfR1BJT19FWFRSQTEyOAorCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTIwMDAwMDAKKwlzZWxlY3QgUzNDMjQxMF9JT1RJTUlORyBpZiBTM0MyNDQwX0NQVUZSRVEKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIElNMjQ0MEQyMCBtb2R1bGUsIGFsc28KQEAgLTUyLDYgKzU1LDcgQEAKIGNvbmZpZyBNQUNIX1JYMzcxNQogCWJvb2wgIkhQIGlQQVEgcngzNzE1IgogCXNlbGVjdCBDUFVfUzNDMjQ0MAorCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTY5MzQ0MDAKIAlzZWxlY3QgUE1fSDE5NDAgaWYgUE0KIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEhQIGlQQVEgcngzNzE1LgpAQCAtNTksNiArNjMsNyBAQAogY29uZmlnIEFSQ0hfUzNDMjQ0MAogCWJvb2wgIlNNREsyNDQwIgogCXNlbGVjdCBDUFVfUzNDMjQ0MAorCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTY5MzQ0MDAKIAlzZWxlY3QgTUFDSF9TTURLCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKIAloZWxwCkBAIC02Nyw2ICs3Miw3IEBACiBjb25maWcgTUFDSF9ORVhDT0RFUl8yNDQwCiAgCWJvb2wgIk5leFZpc2lvbiBORVhDT0RFUiAyNDQwIExpZ2h0IEJvYXJkIgogIAlzZWxlY3QgQ1BVX1MzQzI0NDAKKwlzZWxlY3QgUzNDMjQ0MF9YVEFMXzEyMDAwMDAwCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKIAloZWxwCiAgCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOZXggVmlzaW9uIE5FWENPREVSIDI0NDAgTGlnaHQgQm9hcmQKQEAgLTc1LDYgKzgxLDcgQEAKIAlib29sICJTTURLMjQ0MCB3aXRoIFMzQzI0NDAgQ1BVIG1vZHVsZSIKIAlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQ0MAogCWRlZmF1bHQgeSBpZiBBUkNIX1MzQzI0NDAKKwlzZWxlY3QgUzNDMjQ0MF9YVEFMXzE2OTM0NDAwCiAJc2VsZWN0IENQVV9TM0MyNDQwCiAKIGNvbmZpZyBNQUNIX0FUMjQ0MEVWQgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYwppbmRleCBjYmEwNjRiLi4yMTA1YTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KQEAgLTM1MSw2ICszNTIsMTIgQEAKIAkmczNjMjR4eF91Y2xrLAogfTsKIAorc3RhdGljIHN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCBfX2luaXRkYXRhIG9zaXJpc19jcHVmcmVxID0geworCS5yZWZyZXNoCT0gNzgwMCwgLyogcmVmcmVzaCBwZXJpb2QgaXMgNy44dXNlYyAqLworCS5hdXRvX2lvCT0gMSwKKwkubmVlZF9pbwk9IDEsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgb3NpcmlzX21hcF9pbyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00MDIsNiArNDA5LDggQEAKIAogCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKIAorCXMzY19jcHVmcmVxX3NldGJvYXJkKCZvc2lyaXNfY3B1ZnJlcSk7CisKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBvc2lyaXNfaTJjX2RldnMsCiAJCQkJQVJSQVlfU0laRShvc2lyaXNfaTJjX2RldnMpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggYTAxMTMyNy4uNzllNGQ5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC04MSw1ICs4MSw2IEBACiAKICNkZWZpbmUgUzNDX1BBX1VBUlQJCVMzQzI0QTBfUEFfVUFSVAogI2RlZmluZSBTM0NfUEFfSUlDCQlTM0MyNEEwX1BBX0lJQworI2RlZmluZSBTM0NfUEFfTkFORAkJUzNDMjRYWF9QQV9OQU5ECiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIXzI0QTBfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDUwNTdkOTkuLmZjOGIyMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMzgsMTggKzM4LDIxIEBACiAjZGVmaW5lIFMzQ19WQV9VQVJUMgkJUzNDX1ZBX1VBUlR4KDIpCiAjZGVmaW5lIFMzQ19WQV9VQVJUMwkJUzNDX1ZBX1VBUlR4KDMpCiAKKyNkZWZpbmUgUzNDNjRYWF9QQV9OQU5ECQkoMHg3MDIwMDAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9GQgkJKDB4NzcxMDAwMDApCiAjZGVmaW5lIFMzQzY0WFhfUEFfVVNCX0hTT1RHCSgweDdDMDAwMDAwKQogI2RlZmluZSBTM0M2NFhYX1BBX1dBVENIRE9HCSgweDdFMDA0MDAwKQogI2RlZmluZSBTM0M2NFhYX1BBX1NZU0NPTgkoMHg3RTAwRjAwMCkKKyNkZWZpbmUgUzNDNjRYWF9QQV9BQzk3CQkoMHg3RjAwMTAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9JSVMwCQkoMHg3RjAwMjAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9JSVMxCQkoMHg3RjAwMzAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9USU1FUgkoMHg3RjAwNjAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9JSUMwCQkoMHg3RjAwNDAwMCkKKyNkZWZpbmUgUzNDNjRYWF9QQV9JSVNWNAkoMHg3RjAwRDAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9JSUMxCQkoMHg3RjAwRjAwMCkKIAogI2RlZmluZSBTM0M2NFhYX1BBX0dQSU8JCSgweDdGMDA4MDAwKQotI2RlZmluZSBTM0M2NFhYX1ZBX0dQSU8JCVMzQ19BRERSKDB4MDA1MDAwMDApCisjZGVmaW5lIFMzQzY0WFhfVkFfR1BJTwkJUzNDX0FERFJfQ1BVKDB4MDAwMDAwMDApCiAjZGVmaW5lIFMzQzY0WFhfU1pfR1BJTwkJU1pfNEsKIAogI2RlZmluZSBTM0M2NFhYX1BBX1NEUkFNCSgweDUwMDAwMDAwKQpAQCAtNTcsNyArNjAsNyBAQAogI2RlZmluZSBTM0M2NFhYX1BBX1ZJQzEJCSgweDcxMzAwMDAwKQogCiAjZGVmaW5lIFMzQzY0WFhfUEFfTU9ERU0JKDB4NzQxMDgwMDApCi0jZGVmaW5lIFMzQzY0WFhfVkFfTU9ERU0JUzNDX0FERFIoMHgwMDYwMDAwMCkKKyNkZWZpbmUgUzNDNjRYWF9WQV9NT0RFTQlTM0NfQUREUl9DUFUoMHgwMDEwMDAwMCkKIAogI2RlZmluZSBTM0M2NFhYX1BBX1VTQkhPU1QJKDB4NzQzMDAwMDApCiAKQEAgLTcyLDYgKzc1LDcgQEAKICNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJUzNDNjRYWF9QQV9IU01NQzIKICNkZWZpbmUgUzNDX1BBX0lJQwkJUzNDNjRYWF9QQV9JSUMwCiAjZGVmaW5lIFMzQ19QQV9JSUMxCQlTM0M2NFhYX1BBX0lJQzEKKyNkZWZpbmUgUzNDX1BBX05BTkQJCVMzQzY0WFhfUEFfTkFORAogI2RlZmluZSBTM0NfUEFfRkIJCVMzQzY0WFhfUEFfRkIKICNkZWZpbmUgUzNDX1BBX1VTQkhPU1QJCVMzQzY0WFhfUEFfVVNCSE9TVAogI2RlZmluZSBTM0NfUEFfVVNCX0hTT1RHCVMzQzY0WFhfUEFfVVNCX0hTT1RHCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvczNjNjQwMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL3MzYzY0MDAuYwppbmRleCAxZWNlODg3Li5iNDJiZGQwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL3MzYzY0MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvczNjNjQwMC5jCkBAIC00OCw2ICs0OCw4IEBACiAKIAkvKiB0aGUgaTJjIGRldmljZXMgYXJlIGRpcmVjdGx5IGNvbXBhdGlibGUgd2l0aCBzM2MyNDQwICovCiAJczNjX2kyYzBfc2V0bmFtZSgiczNjMjQ0MC1pMmMiKTsKKworCXMzY19kZXZpY2VfbmFuZC5uYW1lID0gInMzYzY0MDAtbmFuZCI7CiB9CiAKIHZvaWQgX19pbml0IHMzYzY0MDBfaW5pdF9jbG9ja3MoaW50IHh0YWwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9LY29uZmlnCmluZGV4IGU2M2FhYzdmLi5mOWQwZjA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZwpAQCAtOTcsMyArOTcsMTMgQEAKIAlzZWxlY3QgUzNDNjRYWF9TRVRVUF9JMkMxCiAJaGVscAogICAgICAgICAgIE1hY2hpbmUgc3VwcG9ydCBmb3IgdGhlIFNhbXN1bmcgTkNQCisKK2NvbmZpZyBNQUNIX0hNVAorCWJvb2wgIkFpcmdvbyBITVQiCisJc2VsZWN0IENQVV9TM0M2NDEwCisJc2VsZWN0IFMzQ19ERVZfRkIKKwlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0M2NFhYX1NFVFVQX0ZCXzI0QlBQCisJc2VsZWN0IEhBVkVfUFdNCisJaGVscAorCSAgTWFjaGluZSBzdXBwb3J0IGZvciB0aGUgQWlyZ29vIEhNVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL01ha2VmaWxlCmluZGV4IDZmOWRlYWMuLjNlNDhjM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvTWFrZWZpbGUKQEAgLTIzLDUgKzIzLDQgQEAKIG9iai0kKENPTkZJR19NQUNIX0FOVzY0MTApCSs9IG1hY2gtYW53NjQxMC5vCiBvYmotJChDT05GSUdfTUFDSF9TTURLNjQxMCkJKz0gbWFjaC1zbWRrNjQxMC5vCiBvYmotJChDT05GSUdfTUFDSF9OQ1ApCQkrPSBtYWNoLW5jcC5vCi0KLQorb2JqLSQoQ09ORklHX01BQ0hfSE1UKQkJKz0gbWFjaC1obXQubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL2NwdS5jCmluZGV4IGFkZTkwNGQuLjliNjdjNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9jcHUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvY3B1LmMKQEAgLTYyLDYgKzYyLDggQEAKIAkvKiB0aGUgaTJjIGRldmljZXMgYXJlIGRpcmVjdGx5IGNvbXBhdGlibGUgd2l0aCBzM2MyNDQwICovCiAJczNjX2kyYzBfc2V0bmFtZSgiczNjMjQ0MC1pMmMiKTsKIAlzM2NfaTJjMV9zZXRuYW1lKCJzM2MyNDQwLWkyYyIpOworCisJczNjX2RldmljZV9uYW5kLm5hbWUgPSAiczNjNjQwMC1uYW5kIjsKIH0KIAogdm9pZCBfX2luaXQgczNjNjQxMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLWhtdC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtaG10LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3NDEwNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLWhtdC5jCkBAIC0wLDAgKzEsMjc2IEBACisvKiBtYWNoLWhtdC5jIC0gUGxhdGZvcm0gY29kZSBmb3IgQWlyZ29vIEhNVAorICoKKyAqIENvcHlyaWdodCAyMDA5IFBldGVyIEtvcnNnYWFyZCA8amFjbWV0QHN1bnNpdGUuZGs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWZiLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CisjaW5jbHVkZSA8cGxhdC9mYi5oPgorI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgorCisjaW5jbHVkZSA8cGxhdC9zM2M2NDEwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisKKyNkZWZpbmUgVUNPTiBTM0MyNDEwX1VDT05fREVGQVVMVAorI2RlZmluZSBVTENPTiAoUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSkKKyNkZWZpbmUgVUZDT04gKFMzQzI0MTBfVUZDT05fUlhUUklHOCB8IFMzQzI0MTBfVUZDT05fRklGT01PREUpCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIGhtdF91YXJ0Y2Znc1tdIF9faW5pdGRhdGEgPSB7CisJWzBdID0geworCQkuaHdwb3J0CSAgICAgPSAwLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSBVQ09OLAorCQkudWxjb24JICAgICA9IFVMQ09OLAorCQkudWZjb24JICAgICA9IFVGQ09OLAorCX0sCisJWzFdID0geworCQkuaHdwb3J0CSAgICAgPSAxLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSBVQ09OLAorCQkudWxjb24JICAgICA9IFVMQ09OLAorCQkudWZjb24JICAgICA9IFVGQ09OLAorCX0sCisJWzJdID0geworCQkuaHdwb3J0CSAgICAgPSAyLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSBVQ09OLAorCQkudWxjb24JICAgICA9IFVMQ09OLAorCQkudWZjb24JICAgICA9IFVGQ09OLAorCX0sCit9OworCitzdGF0aWMgaW50IGhtdF9ibF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KFMzQzY0WFhfR1BCKDQpLCAibGNkIGJhY2tsaWdodCBlbmFibGUiKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BCKDQpLCAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaG10X2JsX25vdGlmeShpbnQgYnJpZ2h0bmVzcykKK3sKKwkvKgorCSAqIHRyYW5zbGF0ZSBmcm9tIENJRUxVVi9DSUVMQUIgTCotPmJyaWdodG5lc3MsIEUuRy4gZnJvbQorCSAqIHBlcmNlaXZlZCBsdW1pbmFuY2UgdG8gbGlnaHQgb3V0cHV0LiBBc3N1bWVzIHJhbmdlIDAuLjI1NjAwCisJICovCisJaWYgKGJyaWdodG5lc3MgPCAweDgwMCkgeworCQkvKiBZID0gWW4gKiBMIC8gOTAzLjMgKi8KKwkJYnJpZ2h0bmVzcyA9ICgxMDAqMjU2ICogYnJpZ2h0bmVzcyArIDIzMTI0NS8yKSAvIDIzMTI0NTsKKwl9IGVsc2UgeworCQkvKiBZID0gWW4gKiAoKEwgKyAxNikgLyAxMTYgKV4zICovCisJCWludCB0ID0gKGJyaWdodG5lc3MqNCArIDE2KjEwMjQgKyA1OCkvMTE2OworCQlicmlnaHRuZXNzID0gMjUgKiAoKHQgKiB0ICogdCArIDB4MTAwMDAwLzIpIC8gMHgxMDAwMDApOworCX0KKworCWdwaW9fc2V0X3ZhbHVlKFMzQzY0WFhfR1BCKDQpLCBicmlnaHRuZXNzKTsKKworCXJldHVybiBicmlnaHRuZXNzOworfQorCitzdGF0aWMgdm9pZCBobXRfYmxfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZ3Bpb19mcmVlKFMzQzY0WFhfR1BCKDQpKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgaG10X2JhY2tsaWdodF9kYXRhID0geworCS5wd21faWQJCT0gMSwKKwkubWF4X2JyaWdodG5lc3MJPSAxMDAgKiAyNTYsCisJLmRmdF9icmlnaHRuZXNzCT0gNDAgKiAyNTYsCisJLnB3bV9wZXJpb2RfbnMJPSAxMDAwMDAwMDAwIC8gKDEwMCAqIDI1NiAqIDIwKSwKKwkuaW5pdAkJPSBobXRfYmxfaW5pdCwKKwkubm90aWZ5CQk9IGhtdF9ibF9ub3RpZnksCisJLmV4aXQJCT0gaG10X2JsX2V4aXQsCisKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhtdF9iYWNrbGlnaHRfZGV2aWNlID0geworCS5uYW1lCQk9ICJwd20tYmFja2xpZ2h0IiwKKwkuZGV2CQk9IHsKKwkJLnBhcmVudAk9ICZzM2NfZGV2aWNlX3RpbWVyWzFdLmRldiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaG10X2JhY2tsaWdodF9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19mYl9wZF93aW4gaG10X2ZiX3dpbjAgPSB7CisJLndpbl9tb2RlCT0geworCQkucGl4Y2xvY2sJPSA0MTA5NCwKKwkJLmxlZnRfbWFyZ2luCT0gOCwKKwkJLnJpZ2h0X21hcmdpbgk9IDEzLAorCQkudXBwZXJfbWFyZ2luCT0gNywKKwkJLmxvd2VyX21hcmdpbgk9IDUsCisJCS5oc3luY19sZW4JPSAzLAorCQkudnN5bmNfbGVuCT0gMSwKKwkJLnhyZXMJCT0gODAwLAorCQkueXJlcwkJPSA0ODAsCisJfSwKKwkubWF4X2JwcAk9IDMyLAorCS5kZWZhdWx0X2JwcAk9IDE2LAorfTsKKworLyogNDA1NTY2IGNsb2NrcyBwZXIgZnJhbWUgPT4gNjBIeiByZWZyZXNoIHJlcXVpcmVzIDI0MzMzOTYwSHogY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgczNjX2ZiX3BsYXRkYXRhIGhtdF9sY2RfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkuc2V0dXBfZ3Bpbwk9IHMzYzY0eHhfZmJfZ3Bpb19zZXR1cF8yNGJwcCwKKwkud2luWzBdCQk9ICZobXRfZmJfd2luMCwKKwkudmlkY29uMAk9IFZJRENPTjBfVklET1VUX1JHQiB8IFZJRENPTjBfUE5STU9ERV9SR0IsCisJLnZpZGNvbjEJPSBWSURDT04xX0lOVl9IU1lOQyB8IFZJRENPTjFfSU5WX1ZTWU5DLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGhtdF9uYW5kX3BhcnRbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gInVib290IiwKKwkJLnNpemUJPSBTWl81MTJLLAorCQkub2Zmc2V0CT0gMCwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJPSAidWJvb3QtZW52MSIsCisJCS5zaXplCT0gU1pfMjU2SywKKwkJLm9mZnNldAk9IFNaXzUxMkssCisJfSwKKwlbMl0gPSB7CisJCS5uYW1lCT0gInVib290LWVudjIiLAorCQkuc2l6ZQk9IFNaXzI1NkssCisJCS5vZmZzZXQJPSBTWl81MTJLICsgU1pfMjU2SywKKwl9LAorCVszXSA9IHsKKwkJLm5hbWUJPSAia2VybmVsIiwKKwkJLnNpemUJPSBTWl8yTSwKKwkJLm9mZnNldAk9IFNaXzFNLAorCX0sCisJWzRdID0geworCQkubmFtZQk9ICJyb290ZnMiLAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJPSBTWl8xTSArIFNaXzJNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfbmFuZF9zZXQgaG10X25hbmRfc2V0c1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJCT0gIm5hbmQiLAorCQkubnJfY2hpcHMJPSAxLAorCQkubnJfcGFydGl0aW9ucwk9IEFSUkFZX1NJWkUoaG10X25hbmRfcGFydCksCisJCS5wYXJ0aXRpb25zCT0gaG10X25hbmRfcGFydCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgaG10X25hbmRfaW5mbyA9IHsKKwkudGFjbHMJCT0gMjUsCisJLnR3cnBoMAkJPSA1NSwKKwkudHdycGgxCQk9IDQwLAorCS5ucl9zZXRzCT0gQVJSQVlfU0laRShobXRfbmFuZF9zZXRzKSwKKwkuc2V0cwkJPSBobXRfbmFuZF9zZXRzLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBobXRfbGVkc1tdID0geworCXsgLyogbGVmdCBmdW5jdGlvbiBrZXlzICovCisJCS5uYW1lCQkJPSAibGVmdDpibHVlIiwKKwkJLmdwaW8JCQk9IFMzQzY0WFhfR1BPKDEyKSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJkZWZhdWx0LW9uIiwKKwl9LAorCXsgLyogcmlnaHQgZnVuY3Rpb24ga2V5cyAtIHJlZCAqLworCQkubmFtZQkJCT0gInJpZ2h0OnJlZCIsCisJCS5ncGlvCQkJPSBTM0M2NFhYX0dQTygxMyksCisJfSwKKwl7IC8qIHJpZ2h0IGZ1bmN0aW9uIGtleXMgLSBncmVlbiAqLworCQkubmFtZQkJCT0gInJpZ2h0OmdyZWVuIiwKKwkJLmdwaW8JCQk9IFMzQzY0WFhfR1BPKDE0KSwKKwl9LAorCXsgLyogcmlnaHQgZnVuY3Rpb24ga2V5cyAtIGJsdWUgKi8KKwkJLm5hbWUJCQk9ICJyaWdodDpibHVlIiwKKwkJLmdwaW8JCQk9IFMzQzY0WFhfR1BPKDE1KSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJkZWZhdWx0LW9uIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGhtdF9sZWRfZGF0YSA9IHsKKwkubnVtX2xlZHMgPSBBUlJBWV9TSVpFKGhtdF9sZWRzKSwKKwkubGVkcyA9IGhtdF9sZWRzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaG10X2xlZHNfZGV2aWNlID0geworCS5uYW1lCQkJPSAibGVkcy1ncGlvIiwKKwkuaWQJCQk9IC0xLAorCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZobXRfbGVkX2RhdGEsCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGhtdF9pb2Rlc2NbXSA9IHt9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaG10X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzM2NfZGV2aWNlX2kyYzAsCisJJnMzY19kZXZpY2VfbmFuZCwKKwkmczNjX2RldmljZV9mYiwKKwkmczNjX2RldmljZV91c2IsCisJJnMzY19kZXZpY2VfdGltZXJbMV0sCisJJmhtdF9iYWNrbGlnaHRfZGV2aWNlLAorCSZobXRfbGVkc19kZXZpY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaG10X21hcF9pbyh2b2lkKQoreworCXMzYzY0eHhfaW5pdF9pbyhobXRfaW9kZXNjLCBBUlJBWV9TSVpFKGhtdF9pb2Rlc2MpKTsKKwlzM2MyNHh4X2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKKwlzM2MyNHh4X2luaXRfdWFydHMoaG10X3VhcnRjZmdzLCBBUlJBWV9TSVpFKGhtdF91YXJ0Y2ZncykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaG10X21hY2hpbmVfaW5pdCh2b2lkKQoreworCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKKwlzM2NfZmJfc2V0X3BsYXRkYXRhKCZobXRfbGNkX3BkYXRhKTsKKwlzM2NfZGV2aWNlX25hbmQuZGV2LnBsYXRmb3JtX2RhdGEgPSAmaG10X25hbmRfaW5mbzsKKworCWdwaW9fcmVxdWVzdChTM0M2NFhYX0dQQyg3KSwgInVzYiBwb3dlciIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQQyg3KSwgMCk7CisJZ3Bpb19yZXF1ZXN0KFMzQzY0WFhfR1BNKDApLCAidXNiIHBvd2VyIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BNKDApLCAxKTsKKwlncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEsoNyksICJ1c2IgcG93ZXIiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUEsoNyksIDEpOworCWdwaW9fcmVxdWVzdChTM0M2NFhYX0dQRigxMyksICJ1c2IgcG93ZXIiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUEYoMTMpLCAxKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGhtdF9kZXZpY2VzLCBBUlJBWV9TSVpFKGhtdF9kZXZpY2VzKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoSE1ULCAiQWlyZ29vLUhNVCIpCisJLyogTWFpbnRhaW5lcjogUGV0ZXIgS29yc2dhYXJkIDxqYWNtZXRAc3Vuc2l0ZS5kaz4gKi8KKwkucGh5c19pbwk9IFMzQ19QQV9VQVJUICYgMHhmZmYwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzNDX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBTM0M2NFhYX1BBX1NEUkFNICsgMHgxMDAsCisJLmluaXRfaXJxCT0gczNjNjQxMF9pbml0X2lycSwKKwkubWFwX2lvCQk9IGhtdF9tYXBfaW8sCisJLmluaXRfbWFjaGluZQk9IGhtdF9tYWNoaW5lX2luaXQsCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLW5jcC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtbmNwLmMKaW5kZXggNjAzMDYzNi4uNTVlOWJiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtbmNwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtbmNwLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAkmczNjX2RldmljZV9pMmMwLAogfTsKIAotc3RydWN0IG1hcF9kZXNjIG5jcF9pb2Rlc2NbXSA9IHt9Oworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBuY3BfaW9kZXNjW10gX19pbml0ZGF0YSA9IHt9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgbmNwX21hcF9pbyh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMKaW5kZXggYmM5YTdkZS4uZWE1MWRiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jCkBAIC02NSwxNiArNjUsMzAgQEAKIAlbMF0gPSB7CiAJCS5od3BvcnQJICAgICA9IDAsCiAJCS5mbGFncwkgICAgID0gMCwKLQkJLnVjb24JICAgICA9IDB4M2M1LAotCQkudWxjb24JICAgICA9IDB4MDMsCi0JCS51ZmNvbgkgICAgID0gMHg1MSwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCiAJfSwKIAlbMV0gPSB7CiAJCS5od3BvcnQJICAgICA9IDEsCiAJCS5mbGFncwkgICAgID0gMCwKLQkJLnVjb24JICAgICA9IDB4M2M1LAotCQkudWxjb24JICAgICA9IDB4MDMsCi0JCS51ZmNvbgkgICAgID0gMHg1MSwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbMl0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbM10gPSB7CisJCS5od3BvcnQJICAgICA9IDMsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhNGJhNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9LY29uZmlnCkBAIC0wLDAgKzEsMjIgQEAKKyMgYXJjaC9hcm0vbWFjaC1zNXBjMTAwL0tjb25maWcKKyMKKyMgQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyMJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFM1UEMxMDAgQ1BVCisKK2NvbmZpZyBDUFVfUzVQQzEwMAorCWJvb2wKKwlzZWxlY3QgQ1BVX1M1UEMxMDBfSU5JVAorCXNlbGVjdCBDUFVfUzVQQzEwMF9DTE9DSworCWhlbHAKKwkgIEVuYWJsZSBTNVBDMTAwIENQVSBzdXBwb3J0CisKK2NvbmZpZyBNQUNIX1NNREtDMTAwCisJYm9vbCAiU01ES0MxMDAiCisJc2VsZWN0IENQVV9TNVBDMTAwCisJc2VsZWN0IFM1UEMxWFhfU0VUVVBfSTJDMQorCWhlbHAKKwkgIE1hY2hpbmUgc3VwcG9ydCBmb3IgdGhlIFNhbXN1bmcgU01ES0MxMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmM4OWIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL01ha2VmaWxlCkBAIC0wLDAgKzEsMTcgQEAKKyMgYXJjaC9hcm0vbWFjaC1zNXBjMTAwL01ha2VmaWxlCisjCisjIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKK29iai15CQkJCTo9CitvYmotbQkJCQk6PQorb2JqLW4JCQkJOj0KK29iai0JCQkJOj0KKworIyBDb3JlIHN1cHBvcnQgZm9yIFM1UEMxMDAgc3lzdGVtCisKK29iai0kKENPTkZJR19DUFVfUzVQQzEwMCkJKz0gY3B1Lm8KKworIyBtYWNoaW5lIHN1cHBvcnQKK29iai0kKENPTkZJR19NQUNIX1NNREtDMTAwKQkrPSBtYWNoLXNtZGtjMTAwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5MGFhMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMiBAQAorICAgenJlbGFkZHIteQk6PSAweDIwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4MjAwMDAxMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9jcHUuYyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTcxODg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2NwdS5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwYzEwMC9jcHUuYworICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisgKglCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogQmFzZWQgb24gbWFjaC1zM2M2NDEwL2NwdS5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgorI2luY2x1ZGUgPHBsYXQvaWljLWNvcmUuaD4KKyNpbmNsdWRlIDxwbGF0L3M1cGMxMDAuaD4KKworLyogSW5pdGlhbCBJTyBtYXBwaW5ncyAqLworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHM1cGMxMDBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKK307CisKKy8qIHM1cGMxMDBfbWFwX2lvCisgKgorICogcmVnaXN0ZXIgdGhlIHN0YW5kYXJkIGNwdSBJTyBhcmVhcworKi8KKwordm9pZCBfX2luaXQgczVwYzEwMF9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQoczVwYzEwMF9pb2Rlc2MsIEFSUkFZX1NJWkUoczVwYzEwMF9pb2Rlc2MpKTsKKworCS8qIGluaXRpYWxpc2UgZGV2aWNlIGluZm9ybWF0aW9uIGVhcmx5ICovCit9CisKK3ZvaWQgX19pbml0IHM1cGMxMDBfaW5pdF9jbG9ja3MoaW50IHh0YWwpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbml0aWFsaXNpbmcgY2xvY2tzXG4iLCBfX2Z1bmNfXyk7CisJczNjMjR4eF9yZWdpc3Rlcl9iYXNlY2xvY2tzKHh0YWwpOworCXM1cGMxeHhfcmVnaXN0ZXJfY2xvY2tzKCk7CisJczVwYzEwMF9yZWdpc3Rlcl9jbG9ja3MoKTsKKwlzNXBjMTAwX3NldHVwX2Nsb2NrcygpOworfQorCit2b2lkIF9faW5pdCBzNXBjMTAwX2luaXRfaXJxKHZvaWQpCit7CisJdTMyIHZpY192YWxpZFtdID0ge34wLCB+MCwgfjB9OworCisJLyogVklDMCwgVklDMSwgYW5kIFZJQzIgYXJlIGZ1bGx5IHBvcHVsYXRlZC4gKi8KKwlzNXBjMXh4X2luaXRfaXJxKHZpY192YWxpZCwgQVJSQVlfU0laRSh2aWNfdmFsaWQpKTsKK30KKworc3RydWN0IHN5c2Rldl9jbGFzcyBzNXBjMTAwX3N5c2NsYXNzID0geworCS5uYW1lCT0gInM1cGMxMDAtY29yZSIsCit9OworCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgczVwYzEwMF9zeXNkZXYgPSB7CisJLmNscwk9ICZzNXBjMTAwX3N5c2NsYXNzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczVwYzEwMF9jb3JlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZzNXBjMTAwX3N5c2NsYXNzKTsKK30KKworY29yZV9pbml0Y2FsbChzNXBjMTAwX2NvcmVfaW5pdCk7CisKK2ludCBfX2luaXQgczVwYzEwMF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIlM1UEMxMDA6IEluaXRpYWxpc2luZyBhcmNoaXRlY3R1cmVcbiIpOworCisJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczVwYzEwMF9zeXNkZXYpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMTQyY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwzOCBAQAorLyogYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqCUJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KKyAqCisgKgorICogQmFzZWQgb24gbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKy8qIHB1bGwgaW4gdGhlIHJlbGV2YW50IHJlZ2lzdGVyIGFuZCBtYXAgZmlsZXMuICovCisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKworCS8qIG5vdGUsIGZvciB0aGUgYm9vdCBwcm9jZXNzIHRvIHdvcmsgd2UgaGF2ZSB0byBrZWVwIHRoZSBVQVJUCisJICogdmlydHVhbCBhZGRyZXNzIGFsaWduZWQgdG8gYW4gMU1pQiBib3VuZGFyeSBmb3IgdGhlIEwxCisJICogbWFwcGluZyB0aGUgaGVhZCBjb2RlIG1ha2VzLiBXZSBrZWVwIHRoZSBVQVJUIHZpcnR1YWwgYWRkcmVzcworCSAqIGFsaWduZWQgYW5kIGFkZCBpbiB0aGUgb2Zmc2V0IHdoZW4gd2UgbG9hZCB0aGUgdmFsdWUgaGVyZS4KKwkgKi8KKworCS5tYWNybyBhZGRydWFydCwgcngKKwkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwkJdHN0CVxyeCwgIzEKKwkJbGRyZXEJXHJ4LCA9IFMzQ19QQV9VQVJUCisJCWxkcm5lCVxyeCwgPSAoUzNDX1ZBX1VBUlQgKyBTM0NfUEFfVUFSVCAmIDB4ZmZmZmYpCisJCWFkZAlccngsIFxyeCwgIygweDQwMCAqIENPTkZJR19ERUJVR19TM0NfVUFSVCkKKwkuZW5kbQorCisvKiBpbmNsdWRlIHRoZSByZXNldCBvZiB0aGUgY29kZSB3aGljaCB3aWxsIGRvIHRoZSB3b3JrLCB3ZSdyZSBvbmx5CisgKiBjb21waWxpbmcgZm9yIGEgc2luZ2xlIGNwdSBwcm9jZXNzb3IgdHlwZSBzbyB0aGUgZGVmYXVsdCBvZiBzM2MyNDQwCisgKiB3aWxsIGJlIGZpbmUgd2l0aCB1cy4KKyAqLworCisjaW5jbHVkZSA8cGxhdC9kZWJ1Zy1tYWNyby5TPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MTMxOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSw1MCBAQAorLyogYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqCUJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBtYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIHRoZSBTYW1zdW5nIFM1UEMxWFggc2VyaWVzCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9pcnFzLmg+CisKKwkubWFjcm8JZGlzYWJsZV9maXEKKwkuZW5kbQorCisJLm1hY3JvCWdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJbGRyCVxiYXNlLCA9UzNDX1ZBX1ZJQzAKKwkuZW5kbQorCisJLm1hY3JvCWFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkuZW5kbQorCisJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCisJQCBjaGVjayB0aGUgdmljMAorCW1vdglcaXJxbnIsICMgUzNDX0lSUV9PRkZTRVQgKyAzMQorCWxkcglcaXJxc3RhdCwgWyBcYmFzZSwgIyBWSUNfSVJRX1NUQVRVUyBdCisJdGVxCVxpcnFzdGF0LCAjMAorCisJQCBvdGhlcndpc2UgdHJ5IHZpYzEKKwlhZGRlcQlcdG1wLCBcYmFzZSwgIyhTM0NfVkFfVklDMSAtIFMzQ19WQV9WSUMwKQorCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjMzIKKwlsZHJlcQlcaXJxc3RhdCwgWyBcdG1wLCAjIFZJQ19JUlFfU1RBVFVTIF0KKwl0ZXFlcQlcaXJxc3RhdCwgIzAKKworCUAgb3RoZXJ3aXNlIHRyeSB2aWMyCisJYWRkZXEJXHRtcCwgXGJhc2UsICMoUzNDX1ZBX1ZJQzIgLSBTM0NfVkFfVklDMCkKKwlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzMyCisJbGRyZXEJXGlycXN0YXQsIFsgXHRtcCwgIyBWSUNfSVJRX1NUQVRVUyBdCisJdGVxZXEJXGlycXN0YXQsICMwCisKKwljbHpuZQlcaXJxc3RhdCwgXGlycXN0YXQKKwlzdWJuZQlcaXJxbnIsIFxpcnFuciwgXGlycXN0YXQKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9ncGlvLWNvcmUuaCBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvZ3Bpby1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyOGQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvZ3Bpby1jb3JlLmgKQEAgLTAsMCArMSwyMSBAQAorLyogYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9ncGlvLWNvcmUuaAorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisgKiAgICAgIEJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBTNVBDMTAwIC0gR1BJTyBjb3JlIHN1cHBvcnQKKyAqCisgKiBCYXNlZCBvbiBtYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2dwaW8tY29yZS5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9HUElPX0NPUkVfSAorI2RlZmluZSBfX0FTTV9BUkNIX0dQSU9fQ09SRV9IIF9fRklMRV9fCisKKy8qIGN1cnJlbnRseSB3ZSBqdXN0IGluY2x1ZGUgdGhlIHBsYXRmb3JtIHN1cHBvcnQgKi8KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY29yZS5oPgorCisjZW5kaWYgLyogX19BU01fQVJDSF9HUElPX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzRmYzkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qIGFyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvZ3Bpby5oCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqCUJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBTNVBDMTAwIC0gR1BJTyBsaWIgc3VwcG9ydAorICoKKyAqIEJhc2Ugb24gbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBncGlvX2dldF92YWx1ZQlfX2dwaW9fZ2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fc2V0X3ZhbHVlCV9fZ3Bpb19zZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19jYW5zbGVlcAlfX2dwaW9fY2Fuc2xlZXAKKyNkZWZpbmUgZ3Bpb190b19pcnEJX19ncGlvX3RvX2lycQorCisvKiBHUElPIGJhbmsgc2l6ZXMgKi8KKyNkZWZpbmUgUzVQQzFYWF9HUElPX0EwX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fQTFfTlIJKDUpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19CX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fQ19OUgkoNSkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0RfTlIJKDcpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19FMF9OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0UxX05SCSg2KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fRjBfTlIJKDgpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19GMV9OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0YyX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fRjNfTlIJKDQpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19HMF9OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0cxX05SCSgzKQorI2RlZmluZSBTNVBDMVhYX0dQSU9fRzJfTlIJKDcpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19HM19OUgkoNykKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0gwX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fSDFfTlIJKDgpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19IMl9OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0gzX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fSV9OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0owX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fSjFfTlIJKDUpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19KMl9OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0ozX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fSjRfTlIJKDQpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19LMF9OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0sxX05SCSg2KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fSzJfTlIJKDgpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19LM19OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX01QMDBfTlIJKDgpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19NUDAxX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fTVAwMl9OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX01QMDNfTlIJKDgpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19NUDA0X05SCSg1KQorCisvKiBHUElPIGJhbmsgbnVtYmVzICovCisKKy8qIENPTkZJR19TM0NfR1BJT19TUEFDRSBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGV4dHJhCisgKiBzcGFjZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHNvIHRoYXQgYW55IGFjY2lkZW50YWwKKyAqIGNoYW5nZSBmcm9tIG9uZSBncGlvIGJhbmsgdG8gYW5vdGhlciBjYW4gYmUgY2F1Z2h0LgorKi8KKworI2RlZmluZSBTNVBDMVhYX0dQSU9fTkVYVChfX2dwaW8pIFwKKwkoKF9fZ3BpbyMjX1NUQVJUKSArIChfX2dwaW8jI19OUikgKyBDT05GSUdfUzNDX0dQSU9fU1BBQ0UgKyAxKQorCitlbnVtIHMzY19ncGlvX251bWJlciB7CisJUzVQQzFYWF9HUElPX0EwX1NUQVJUIAk9IDAsCisJUzVQQzFYWF9HUElPX0ExX1NUQVJUIAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19BMCksCisJUzVQQzFYWF9HUElPX0JfU1RBUlQgCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0ExKSwKKwlTNVBDMVhYX0dQSU9fQ19TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19CKSwKKwlTNVBDMVhYX0dQSU9fRF9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19DKSwKKwlTNVBDMVhYX0dQSU9fRTBfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fRCksCisJUzVQQzFYWF9HUElPX0UxX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0UwKSwKKwlTNVBDMVhYX0dQSU9fRjBfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fRTEpLAorCVM1UEMxWFhfR1BJT19GMV9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19GMCksCisJUzVQQzFYWF9HUElPX0YyX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0YxKSwKKwlTNVBDMVhYX0dQSU9fRjNfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fRjIpLAorCVM1UEMxWFhfR1BJT19HMF9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19GMyksCisJUzVQQzFYWF9HUElPX0cxX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0cwKSwKKwlTNVBDMVhYX0dQSU9fRzJfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fRzEpLAorCVM1UEMxWFhfR1BJT19HM19TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19HMiksCisJUzVQQzFYWF9HUElPX0gwX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0czKSwKKwlTNVBDMVhYX0dQSU9fSDFfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fSDApLAorCVM1UEMxWFhfR1BJT19IMl9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19IMSksCisJUzVQQzFYWF9HUElPX0gzX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0gyKSwKKwlTNVBDMVhYX0dQSU9fSV9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19IMyksCisJUzVQQzFYWF9HUElPX0owX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0kpLAorCVM1UEMxWFhfR1BJT19KMV9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19KMCksCisJUzVQQzFYWF9HUElPX0oyX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0oxKSwKKwlTNVBDMVhYX0dQSU9fSjNfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fSjIpLAorCVM1UEMxWFhfR1BJT19KNF9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19KMyksCisJUzVQQzFYWF9HUElPX0swX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0o0KSwKKwlTNVBDMVhYX0dQSU9fSzFfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fSzApLAorCVM1UEMxWFhfR1BJT19LMl9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19LMSksCisJUzVQQzFYWF9HUElPX0szX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0syKSwKKwlTNVBDMVhYX0dQSU9fTVAwMF9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19LMyksCisJUzVQQzFYWF9HUElPX01QMDFfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fTVAwMCksCisJUzVQQzFYWF9HUElPX01QMDJfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fTVAwMSksCisJUzVQQzFYWF9HUElPX01QMDNfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fTVAwMiksCisJUzVQQzFYWF9HUElPX01QMDRfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fTVAwMyksCit9OworCisvKiBTNVBDMVhYIEdQSU8gbnVtYmVyIGRlZmluaXRpb25zLiAqLworI2RlZmluZSBTNVBDMVhYX0dQQTAoX25yKQkoUzVQQzFYWF9HUElPX0EwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BBMShfbnIpCShTNVBDMVhYX0dQSU9fQTFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEIoX25yKQkoUzVQQzFYWF9HUElPX0JfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEMoX25yKQkoUzVQQzFYWF9HUElPX0NfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEQoX25yKQkoUzVQQzFYWF9HUElPX0RfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEUwKF9ucikJKFM1UEMxWFhfR1BJT19FMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQRTEoX25yKQkoUzVQQzFYWF9HUElPX0UxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BGMChfbnIpCShTNVBDMVhYX0dQSU9fRjBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEYxKF9ucikJKFM1UEMxWFhfR1BJT19GMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQRjIoX25yKQkoUzVQQzFYWF9HUElPX0YyX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BGMyhfbnIpCShTNVBDMVhYX0dQSU9fRjNfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEcwKF9ucikJKFM1UEMxWFhfR1BJT19HMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQRzEoX25yKQkoUzVQQzFYWF9HUElPX0cxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BHMihfbnIpCShTNVBDMVhYX0dQSU9fRzJfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEczKF9ucikJKFM1UEMxWFhfR1BJT19HM19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQSDAoX25yKQkoUzVQQzFYWF9HUElPX0gwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BIMShfbnIpCShTNVBDMVhYX0dQSU9fSDFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEgyKF9ucikJKFM1UEMxWFhfR1BJT19IMl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQSDMoX25yKQkoUzVQQzFYWF9HUElPX0gzX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BJKF9ucikJKFM1UEMxWFhfR1BJT19JX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BKMChfbnIpCShTNVBDMVhYX0dQSU9fSjBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEoxKF9ucikJKFM1UEMxWFhfR1BJT19KMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQSjIoX25yKQkoUzVQQzFYWF9HUElPX0oyX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BKMyhfbnIpCShTNVBDMVhYX0dQSU9fSjNfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEo0KF9ucikJKFM1UEMxWFhfR1BJT19KNF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQSzAoX25yKQkoUzVQQzFYWF9HUElPX0swX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BLMShfbnIpCShTNVBDMVhYX0dQSU9fSzFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEsyKF9ucikJKFM1UEMxWFhfR1BJT19LMl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQSzMoX25yKQkoUzVQQzFYWF9HUElPX0szX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfTVAwMChfbnIpCShTNVBDMVhYX0dQSU9fTVAwMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX01QMDEoX25yKQkoUzVQQzFYWF9HUElPX01QMDFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9NUDAyKF9ucikJKFM1UEMxWFhfR1BJT19NUDAyX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfTVAwMyhfbnIpCShTNVBDMVhYX0dQSU9fTVAwM19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX01QMDQoX25yKQkoUzVQQzFYWF9HUElPX01QMDRfU1RBUlQgKyAoX25yKSkKKworLyogdGhlIGVuZCBvZiB0aGUgUzVQQzFYWCBzcGVjaWZpYyBncGlvcyAqLworI2RlZmluZSBTNVBDMVhYX0dQSU9fRU5ECShTNVBDMVhYX01QMDQoUzVQQzFYWF9HUElPX01QMDRfTlIpICsgMSkKKyNkZWZpbmUgUzNDX0dQSU9fRU5ECQlTNVBDMVhYX0dQSU9fRU5ECisKKy8qIGRlZmluZSB0aGUgbnVtYmVyIG9mIGdwaW9zIHdlIG5lZWQgdG8gdGhlIG9uZSBhZnRlciB0aGUgTVAwNCgpIHJhbmdlICovCisjZGVmaW5lIEFSQ0hfTlJfR1BJT1MJKFM1UEMxWFhfTVAwNChTNVBDMVhYX0dQSU9fTVAwNF9OUikgKyAxKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMzg2MTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTAsMCArMSwxNCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqICAgICAgQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxMDAgLSBIYXJkd2FyZSBzdXBwb3J0CisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9IIF9fRklMRV9fCisKKy8qIGN1cnJlbnRseSBub3RoaW5nIGhlcmUsIHBsYWNlaG9sZGVyICovCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyNzIwZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvaXJxcy5oCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqICAgICAgQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxMDAgLSBJUlEgZGVmaW5pdGlvbnMKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19IIF9fRklMRV9fCisKKyNpbmNsdWRlIDxwbGF0L2lycXMuaD4KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOWYzOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvbWFwLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIEJhc2VkIG9uIG1hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvbWFwLmgKKyAqCisgKiBTNVBDMVhYIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUFQX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NQVBfSCBfX0ZJTEVfXworCisjaW5jbHVkZSA8cGxhdC9tYXAtYmFzZS5oPgorCisKKy8qIENoaXAgSUQgKi8KKyNkZWZpbmUgUzVQQzEwMF9QQV9DSElQSUQJKDB4RTAwMDAwMDApCisjZGVmaW5lIFM1UEMxWFhfUEFfQ0hJUElECVM1UEMxMDBfUEFfQ0hJUElECisjZGVmaW5lIFM1UEMxWFhfVkFfQ0hJUElECVMzQ19WQV9TWVMKKworLyogU3lzdGVtICovCisjZGVmaW5lIFM1UEMxMDBfUEFfU1lTCQkoMHhFMDEwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9DTEsJCShTNVBDMTAwX1BBX1NZUyArIDB4MCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9QV1IJCShTNVBDMTAwX1BBX1NZUyArIDB4ODAwMCkKKyNkZWZpbmUgUzVQQzFYWF9QQV9DTEsJCVM1UEMxMDBfUEFfQ0xLCisjZGVmaW5lIFM1UEMxWFhfUEFfUFdSCQlTNVBDMTAwX1BBX1BXUgorI2RlZmluZSBTNVBDMVhYX1ZBX0NMSwkJKFMzQ19WQV9TWVMgKyAweDEwMDAwKQorI2RlZmluZSBTNVBDMVhYX1ZBX1BXUgkJKFMzQ19WQV9TWVMgKyAweDIwMDAwKQorCisvKiBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUzVQQzEwMF9QQV9WSUMJCSgweEU0MDAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1ZBX1ZJQwkJUzNDX1ZBX0lSUQorI2RlZmluZSBTNVBDMTAwX1BBX1ZJQ19PRkZTRVQJMHgxMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9WQV9WSUNfT0ZGU0VUCTB4MTAwMDAKKyNkZWZpbmUgUzVQQzFYWF9QQV9WSUMoeCkJKFM1UEMxMDBfUEFfVklDICsgKCh4KSAqIFM1UEMxMDBfUEFfVklDX09GRlNFVCkpCisjZGVmaW5lIFM1UEMxWFhfVkFfVklDKHgpCShTNVBDMTAwX1ZBX1ZJQyArICgoeCkgKiBTNVBDMTAwX1ZBX1ZJQ19PRkZTRVQpKQorCisvKiBUaW1lciAqLworI2RlZmluZSBTNVBDMTAwX1BBX1RJTUVSCSgweEVBMDAwMDAwKQorI2RlZmluZSBTNVBDMVhYX1BBX1RJTUVSCVM1UEMxMDBfUEFfVElNRVIKKyNkZWZpbmUgUzVQQzFYWF9WQV9USU1FUglTM0NfVkFfVElNRVIKKworLyogVUFSVCAqLworI2RlZmluZSBTNVBDMTAwX1BBX1VBUlQJCSgweEVDMDAwMDAwKQorI2RlZmluZSBTNVBDMVhYX1BBX1VBUlQJCVM1UEMxMDBfUEFfVUFSVAorI2RlZmluZSBTNVBDMVhYX1ZBX1VBUlQJCVMzQ19WQV9VQVJUCisKKy8qIElJQyAqLworI2RlZmluZSBTNVBDMTAwX1BBX0lJQwkJKDB4RUMxMDAwMDApCisKKy8qIEVUQyAqLworI2RlZmluZSBTNVBDMTAwX1BBX1NEUkFNCSgweDIwMDAwMDAwKQorCisvKiBjb21wYXRpYmlsaXR5IGRlZmluZXMuICovCisjZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVBDMTAwX1BBX1VBUlQKKyNkZWZpbmUgUzNDX1BBX1VBUlQwCQkoUzVQQzEwMF9QQV9VQVJUICsgMHgwKQorI2RlZmluZSBTM0NfUEFfVUFSVDEJCShTNVBDMTAwX1BBX1VBUlQgKyAweDQwMCkKKyNkZWZpbmUgUzNDX1BBX1VBUlQyCQkoUzVQQzEwMF9QQV9VQVJUICsgMHg4MDApCisjZGVmaW5lIFMzQ19QQV9VQVJUMwkJKFM1UEMxMDBfUEFfVUFSVCArIDB4QzAwKQorI2RlZmluZSBTM0NfVkFfVUFSVDAJCShTM0NfVkFfVUFSVCArIDB4MCkKKyNkZWZpbmUgUzNDX1ZBX1VBUlQxCQkoUzNDX1ZBX1VBUlQgKyAweDQwMCkKKyNkZWZpbmUgUzNDX1ZBX1VBUlQyCQkoUzNDX1ZBX1VBUlQgKyAweDgwMCkKKyNkZWZpbmUgUzNDX1ZBX1VBUlQzCQkoUzNDX1ZBX1VBUlQgKyAweEMwMCkKKyNkZWZpbmUgUzNDX1VBUlRfT0ZGU0VUCQkweDQwMAorI2RlZmluZSBTM0NfVkFfVklDMAkJKFMzQ19WQV9JUlEgKyAweDApCisjZGVmaW5lIFMzQ19WQV9WSUMxCQkoUzNDX1ZBX0lSUSArIDB4MTAwMDApCisjZGVmaW5lIFMzQ19WQV9WSUMyCQkoUzNDX1ZBX0lSUSArIDB4MjAwMDApCisjZGVmaW5lIFMzQ19QQV9JSUMJCVM1UEMxMDBfUEFfSUlDCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0MxMDBfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNjBkMTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qIGFyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICogICAgICBCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogQmFzZWQgb24gbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAorCisjZGVmaW5lIFBIWVNfT0ZGU0VUICAgICAJVUwoMHgyMDAwMDAwMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzRkMmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaApAQCAtMCwwICsxLDU2IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqICAgICAgQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxMDAgLSBwd20gY2xvY2sgYW5kIHRpbWVyIHN1cHBvcnQKKyAqCisgKiBCYXNlZCBvbiBtYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCisgKi8KKworLyoqCisgKiBwd21fY2ZnX3NyY19pc190Y2xrKCkgLSByZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gbXV4IGNvbmZpZyBpcyBhIHRjbGsKKyAqIEB0Y2ZnOiBUaGUgdGltZXIgVENGRzEgcmVnaXN0ZXIgYml0cyBzaGlmdGVkIGRvd24gdG8gMC4KKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBmcm9tIFRDRkcxIGlzIGEgVENMSyBpbnN0ZWFkCisgKiBhbnkgb2YgdGhlIFRESVYgY2xvY2tzLgorICovCitzdGF0aWMgaW5saW5lIGludCBwd21fY2ZnX3NyY19pc190Y2xrKHVuc2lnbmVkIGxvbmcgdGNmZykKK3sKKwlyZXR1cm4gdGNmZyA+PSBTM0M2NFhYX1RDRkcxX01VWF9UQ0xLOworfQorCisvKioKKyAqIHRjZmdfdG9fZGl2aXNvcigpIC0gY29udmVydCB0Y2ZnMSBzZXR0aW5nIHRvIGEgZGl2aXNvcgorICogQHRjZmcxOiBUaGUgdGNmZzEgc2V0dGluZywgc2hpZnRlZCBkb3duLgorICoKKyAqIEdldCB0aGUgZGl2aXNvciB2YWx1ZSBmb3IgdGhlIGdpdmVuIHRjZmcxIHNldHRpbmcuIFdlIGFzc3VtZSB0aGUKKyAqIGNhbGxlciBoYXMgYWxyZWFkeSBjaGVja2VkIHRvIHNlZSBpZiB0aGlzIGlzIG5vdCBhIFRDTEsgc291cmNlLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNmZ190b19kaXZpc29yKHVuc2lnbmVkIGxvbmcgdGNmZzEpCit7CisJcmV0dXJuIDEgPDwgdGNmZzE7Cit9CisKKy8qKgorICogcHdtX3RkaXZfaGFzX2RpdjEoKSAtIGRvZXMgdGhlIHRkaXYgc2V0dGluZyBoYXZlIGEgLzEKKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIGEgLzEgaW4gdGhlIHRkaXYgc2V0dGluZy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHdtX3RkaXZfaGFzX2RpdjEodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBwd21fdGRpdl9kaXZfYml0cygpIC0gY2FsY3VsYXRlIFRDRkcxIGRpdmlzb3IgdmFsdWUuCisgKiBAZGl2OiBUaGUgZGl2aXNvciB0byBjYWxjdWxhdGUgdGhlIGJpdCBpbmZvcm1hdGlvbiBmb3IuCisgKgorICogVHVybiBhIGRpdmlzb3IgaW50byB0aGUgbmVjZXNzYXJ5IGJpdCBmaWVsZCBmb3IgVENGRzEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwd21fdGRpdl9kaXZfYml0cyh1bnNpZ25lZCBpbnQgZGl2KQoreworCXJldHVybiBpbG9nMihkaXYpOworfQorCisjZGVmaW5lIFMzQ19UQ0ZHMV9NVVhfVENMSyBTM0M2NFhYX1RDRkcxX01VWF9UQ0xLCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxYWMxNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaApAQCAtMCwwICsxLDI0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxWFggLSBJUlEgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfSVJRX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0lSUV9IIF9fRklMRV9fCisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS92aWMuaD4KKworLyogaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgUzVQQzFYWF9WSUMwUkVHKHgpICAgICAgICAgIAkJKCh4KSArIFM1UEMxWFhfVkFfVklDKDApKQorI2RlZmluZSBTNVBDMVhYX1ZJQzFSRUcoeCkgICAgICAgICAgCQkoKHgpICsgUzVQQzFYWF9WQV9WSUMoMSkpCisjZGVmaW5lIFM1UEMxWFhfVklDMlJFRyh4KSAgICAgICAgIAkJKCh4KSArIFM1UEMxWFhfVkFfVklDKDIpKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9SRUdTX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzkwMTQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMCwwICsxLDI0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqICAgICAgQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxWFggLSBzeXN0ZW0gaW1wbGVtZW50YXRpb24KKyAqCisgKiBCYXNlZCBvbiBtYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0ggX19GSUxFX18KKworc3RhdGljIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJLyogbm90aGluZyBoZXJlIHlldCAqLworfQorCitzdGF0aWMgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCS8qIG5vdGhpbmcgaGVyZSB5ZXQgKi8KK30KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvdGljay5oIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC90aWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNkZTBmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvdGljay5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvdGljay5oCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqCUJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBTM0M2NFhYIC0gVGltZXIgdGljayBzdXBwb3J0IGRlZmluaXRpb25zCisgKgorICogQmFzZWQgb24gbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC90aWNrLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1RJQ0tfSAorI2RlZmluZSBfX0FTTV9BUkNIX1RJQ0tfSCBfX0ZJTEVfXworCisvKiBub3RlLCB0aGUgdGltZXIgaW50ZXJydXRwcyB0dXJuIHVwIGluIDIgcGxhY2VzLCB0aGUgdmljIGFuZCB0aGVuCisgKiB0aGUgdGltZXIgYmxvY2suIFdlIHRha2UgdGhlIFZJQyBhcyB0aGUgYmFzZSBhdCB0aGUgbW9tZW50LgorICovCitzdGF0aWMgaW5saW5lIHUzMiBzM2MyNHh4X29zdGltZXJfcGVuZGluZyh2b2lkKQoreworCXUzMiBwZW5kID0gX19yYXdfcmVhZGwoUzNDX1ZBX1ZJQzAgKyBWSUNfUkFXX1NUQVRVUyk7CisJcmV0dXJuIHBlbmQgJiAxIDw8IChJUlFfVElNRVI0IC0gUzVQQzFYWF9JUlFfVklDMCgwKSk7Cit9CisKKyNkZWZpbmUgVElDS19NQVgJKDB4ZmZmZmZmZmYpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1RJQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWNjZjUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSwyOCBAQAorLyogYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxMDAgLSB1bmNvbXByZXNzIGNvZGUKKyAqCisgKiBCYXNlZCBvbiBtYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvdW5jb21wcmVzcy5oPgorCitzdGF0aWMgdm9pZCBhcmNoX2RldGVjdF9jcHUodm9pZCkKK3sKKwkvKiB3ZSBkbyBub3QgbmVlZCB0byBkbyBhbnkgY3B1IGRldGVjdGlvbiBoZXJlIGF0IHRoZSBtb21lbnQuICovCisJZmlmb19tYXNrID0gUzNDMjQ0MF9VRlNUQVRfVFhNQVNLOworCWZpZm9fbWF4ID0gNjMgPDwgUzNDMjQ0MF9VRlNUQVRfVFhTSElGVDsKK30KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvbWFjaC1zbWRrYzEwMC5jIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL21hY2gtc21ka2MxMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTQwOTNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL21hY2gtc21ka2MxMDAuYwpAQCAtMCwwICsxLDEwMyBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL21hY2gtc21ka2MxMDAuYworICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisgKiBBdXRob3I6IEJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczVwYzEwMC5oPgorCisjZGVmaW5lIFVDT04gKFMzQzI0MTBfVUNPTl9ERUZBVUxUIHwgUzNDMjQxMF9VQ09OX1VDTEspCisjZGVmaW5lIFVMQ09OIChTM0MyNDEwX0xDT05fQ1M4IHwgUzNDMjQxMF9MQ09OX1BOT05FIHwgUzNDMjQxMF9MQ09OX1NUT1BCKQorI2RlZmluZSBVRkNPTiAoUzNDMjQxMF9VRkNPTl9SWFRSSUc4IHwgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSkKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgc21ka2MxMDBfdWFydGNmZ3NbXSBfX2luaXRkYXRhID0geworCVswXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMCwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gMHgzYzUsCisJCS51bGNvbgkgICAgID0gMHgwMywKKwkJLnVmY29uCSAgICAgPSAweDUxLAorCX0sCisJWzFdID0geworCQkuaHdwb3J0CSAgICAgPSAxLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSAweDNjNSwKKwkJLnVsY29uCSAgICAgPSAweDAzLAorCQkudWZjb24JICAgICA9IDB4NTEsCisJfSwKKwlbMl0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IDB4M2M1LAorCQkudWxjb24JICAgICA9IDB4MDMsCisJCS51ZmNvbgkgICAgID0gMHg1MSwKKwl9LAorCVszXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMywKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gMHgzYzUsCisJCS51bGNvbgkgICAgID0gMHgwMywKKwkJLnVmY29uCSAgICAgPSAweDUxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGtjMTAwX2lvZGVzY1tdID0ge307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrYzEwMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbWRrYzEwMF9tYXBfaW8odm9pZCkKK3sKKwlzNXBjMXh4X2luaXRfaW8oc21ka2MxMDBfaW9kZXNjLCBBUlJBWV9TSVpFKHNtZGtjMTAwX2lvZGVzYykpOworCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTIwMDAwMDApOworCXMzYzI0eHhfaW5pdF91YXJ0cyhzbWRrYzEwMF91YXJ0Y2ZncywgQVJSQVlfU0laRShzbWRrYzEwMF91YXJ0Y2ZncykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc21ka2MxMDBfbWFjaGluZV9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoc21ka2MxMDBfZGV2aWNlcywgQVJSQVlfU0laRShzbWRrYzEwMF9kZXZpY2VzKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoU01ES0MxMDAsICJTTURLQzEwMCIpCisJLyogTWFpbnRhaW5lcjogQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPiAqLworCS5waHlzX2lvCT0gUzVQQzFYWF9QQV9VQVJUICYgMHhmZmYwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzVQQzFYWF9WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gUzVQQzEwMF9QQV9TRFJBTSArIDB4MTAwLAorCisJLmluaXRfaXJxCT0gczVwYzEwMF9pbml0X2lycSwKKwkubWFwX2lvCQk9IHNtZGtjMTAwX21hcF9pbywKKwkuaW5pdF9tYWNoaW5lCT0gc21ka2MxMDBfbWFjaGluZV9pbml0LAorCS50aW1lcgkJPSAmczNjMjR4eF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvYXNzYWJldC5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2Fzc2FiZXQuaAppbmRleCAzOTU5YjIwLi4yOGMyY2Y1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvYXNzYWJldC5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9hc3NhYmV0LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2Fzc2FiZXQuaAogICoKLSAqIENyZWF0ZWQgMjAwMC8wNi8wNSBieSBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiBDcmVhdGVkIDIwMDAvMDYvMDUgYnkgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIHNwZWNpZmljIGRlZmluaXRpb25zIGZvciBBc3NhYmV0CiAgKiBPbmx5IGluY2x1ZGUgdGhpcyBmaWxlIGZyb20gU0ExMTAwLXNwZWNpZmljIGZpbGVzLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCA2MDcxMTgyLi45OWY1ODU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTggTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBTQTExMDAgYXJjaGl0ZWN0dXJlCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGU5ZjhlZWQuLmQ1Mjc3ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KICAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9uZXBvbnNldC5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL25lcG9uc2V0LmgKaW5kZXggZDNmMDQ0Zi4uZmZlMmJjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL25lcG9uc2V0LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL25lcG9uc2V0LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL25lcG9uc2V0LmgKICAqCi0gKiBDcmVhdGVkIDIwMDAvMDYvMDUgYnkgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICogQ3JlYXRlZCAyMDAwLzA2LzA1IGJ5IE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYXJkd2FyZSBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgQXNzYWJldAogICogT25seSBpbmNsdWRlIHRoaXMgZmlsZSBmcm9tIFNBMTEwMC1zcGVjaWZpYyBmaWxlcy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCA5NDJiMTUzLi5iYTlkYTlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGFyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAogICoKLSAqIENvcHlyaWdodCAoYykgMTk5OSBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KICAqLwogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggNzE0MTYwYi4uNmNiMzlkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGFyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKICAqCi0gKiAoQykgMTk5OSBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiAoQykgMTk5OSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgogICoKICAqIFJlb3JnYW5pc2VkIHRvIGJlIG1hY2hpbmUgaW5kZXBlbmRlbnQuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BtLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbS5jCmluZGV4IDExMWNjZTYuLmM4M2ZkYzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcG0uYwpAQCAtMTUsNyArMTUsNyBAQAogICogCQkJU2F2ZSBtb3JlIHZhbHVlIGZvciB0aGUgcmVzdW1lIGZ1bmN0aW9uISBTdXBwb3J0CiAgKiAJCQlCaXRzeS9Bc3NhYmV0L0ZyZWViaXJkIGJvYXJkCiAgKgotICogMjAwMS0wOC0yOToJTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICogMjAwMS0wOC0yOToJTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KICAqIAkJCUNsZWFuZWQgdXAsIHB1c2hlZCBwbGF0Zm9ybSBkZXBlbmRlbnQgc3R1ZmYKICAqIAkJCWluIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWxlcy4KICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKaW5kZXggNzExYzAyOS4uOTVkOTJlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OCBEZWJvcmFoIFdhbGxhY2guCiAgKiBUd2lkZGxlcyAgKEMpIDE5OTkgSHVnbyBGaWVubmVzIDxodWdvQGVtcGVnLmNvbT4KICAqCi0gKiAyMDAwLzAzLzI5IChDKSBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiAyMDAwLzAzLzI5IChDKSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgogICoJUmV3cml0dGVuOiBiaWcgY2xlYW51cCwgbXVjaCBzaW1wbGVyLCBiZXR0ZXIgSFogYWNjdXJhY3kuCiAgKgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMKaW5kZXggMzEzOGQzOS4uNTg1Y2MwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL21tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9tbWMuYwpAQCAtMTU2LDYgKzE1Niw4IEBACiAJbW1jaV9jYXJkLT5tbWMwX3BsYXRfZGF0YS5vY3JfbWFzayA9IE1NQ19WRERfMjhfMjk7CiAJbW1jaV9jYXJkLT5tbWMwX3BsYXRfZGF0YS50cmFuc2xhdGVfdmRkID0gbW1jX3RyYW5zbGF0ZV92ZGQ7CiAJbW1jaV9jYXJkLT5tbWMwX3BsYXRfZGF0YS5zdGF0dXMgPSBtbWNfc3RhdHVzOworCW1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGEuZ3Bpb193cCA9IC0xOworCW1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGEuZ3Bpb19jZCA9IC0xOwogCiAJbW1jc2RfZGV2aWNlLT5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKikgJm1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwppbmRleCAzMTA5M2FmLi45NzVlYWU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvY250MzJfdG9fNjMuaD4KQEAgLTM3MSw2ICszNzIsOCBAQAogc3RhdGljIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSBtbWMwX3BsYXRfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCiAJLnN0YXR1cwkJPSBtbWNfc3RhdHVzLAorCS5ncGlvX3dwCT0gLTEsCisJLmdwaW9fY2QJPSAtMSwKIH07CiAKIC8qCkBAIC03MDUsNiArNzA4LDE2IEBACiAJLnJlbW92ZQkJPSB2ZXJzYXRpbGVfY2xjZF9yZW1vdmUsCiB9OwogCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzBfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSAwLAorCS5pcnFfYmFzZQk9IElSUV9HUElPMF9TVEFSVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMV9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDgsCisJLmlycV9iYXNlCT0gSVJRX0dQSU8xX1NUQVJULAorfTsKKwogI2RlZmluZSBBQUNJX0lSUQl7IElSUV9BQUNJLCBOT19JUlEgfQogI2RlZmluZSBBQUNJX0RNQQl7IDB4ODAsIDB4ODEgfQogI2RlZmluZSBNTUNJMF9JUlEJeyBJUlFfTU1DSTBBLElSUV9TSUNfTU1DSTBCIH0KQEAgLTc2Nyw4ICs3ODAsOCBAQAogQU1CQV9ERVZJQ0UoZG1hYywgICJkZXY6MzAiLCAgRE1BQywgICAgIE5VTEwpOwogQU1CQV9ERVZJQ0Uoc2N0bCwgICJkZXY6ZTAiLCAgU0NUTCwgICAgIE5VTEwpOwogQU1CQV9ERVZJQ0Uod2RvZywgICJkZXY6ZTEiLCAgV0FUQ0hET0csIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsICJkZXY6ZTQiLCAgR1BJTzAsICAgIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzEsICJkZXY6ZTUiLCAgR1BJTzEsICAgIE5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzAsICJkZXY6ZTQiLCAgR1BJTzAsICAgICZncGlvMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzEsICJkZXY6ZTUiLCAgR1BJTzEsICAgICZncGlvMV9wbGF0X2RhdGEpOwogQU1CQV9ERVZJQ0UocnRjLCAgICJkZXY6ZTgiLCAgUlRDLCAgICAgIE5VTEwpOwogQU1CQV9ERVZJQ0Uoc2NpMCwgICJkZXY6ZjAiLCAgU0NJLCAgICAgIE5VTEwpOwogQU1CQV9ERVZJQ0UodWFydDAsICJkZXY6ZjEiLCAgVUFSVDAsICAgIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRmZjI3NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTAsMCArMSw2IEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlCV9fZ3Bpb19nZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUJX19ncGlvX3NldF92YWx1ZQorI2RlZmluZSBncGlvX2NhbnNsZWVwCV9fZ3Bpb19jYW5zbGVlcAorI2RlZmluZSBncGlvX3RvX2lycQlfX2dwaW9fdG9faXJxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCA5YmZkYjMwLi5iZjQ0YzYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTEyMiw0ICsxMjIsMTMgQEAKICNkZWZpbmUgSVJRX1NJQ19QQ0kzCQkoSVJRX1NJQ19TVEFSVCArIFNJQ19JTlRfUENJMykKICNkZWZpbmUgSVJRX1NJQ19FTkQJCTYzCiAKLSNkZWZpbmUgTlJfSVJRUwkJCTY0CisjZGVmaW5lIElSUV9HUElPMF9TVEFSVAkJKElSUV9TSUNfRU5EICsgMSkKKyNkZWZpbmUgSVJRX0dQSU8wX0VORAkJKElSUV9HUElPMF9TVEFSVCArIDMxKQorI2RlZmluZSBJUlFfR1BJTzFfU1RBUlQJCShJUlFfR1BJTzBfRU5EICsgMSkKKyNkZWZpbmUgSVJRX0dQSU8xX0VORAkJKElSUV9HUElPMV9TVEFSVCArIDMxKQorI2RlZmluZSBJUlFfR1BJTzJfU1RBUlQJCShJUlFfR1BJTzFfRU5EICsgMSkKKyNkZWZpbmUgSVJRX0dQSU8yX0VORAkJKElSUV9HUElPMl9TVEFSVCArIDMxKQorI2RlZmluZSBJUlFfR1BJTzNfU1RBUlQJCShJUlFfR1BJTzJfRU5EICsgMSkKKyNkZWZpbmUgSVJRX0dQSU8zX0VORAkJKElSUV9HUElPM19TVEFSVCArIDMxKQorCisjZGVmaW5lIE5SX0lSUVMJCQkoSVJRX0dQSU8zX0VORCArIDEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGVfcGIuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jCmluZGV4IGFhMDUxYzAuLjlhZjhkODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTQzLDYgKzQ0LDE4IEBACiBzdGF0aWMgc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIG1tYzFfcGxhdF9kYXRhID0gewogCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKIAkuc3RhdHVzCQk9IG1tY19zdGF0dXMsCisJLmdwaW9fd3AJPSAtMSwKKwkuZ3Bpb19jZAk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8yX3BsYXRfZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gMTYsCisJLmlycV9iYXNlCT0gSVJRX0dQSU8yX1NUQVJULAorfTsKKworc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8zX3BsYXRfZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gMjQsCisJLmlycV9iYXNlCT0gSVJRX0dQSU8zX1NUQVJULAogfTsKIAogI2RlZmluZSBVQVJUM19JUlEJeyBJUlFfU0lDX1VBUlQzLCBOT19JUlEgfQpAQCAtNzAsOCArODMsOCBAQAogQU1CQV9ERVZJQ0UobW1jMSwgICJmcGdhOjBiIiwgTU1DSTEsICAgICZtbWMxX3BsYXRfZGF0YSk7CiAKIC8qIERldkNoaXAgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0UoZ3BpbzIsICJkZXY6ZTYiLCAgR1BJTzIsICAgIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzMsICJkZXY6ZTciLCAgR1BJTzMsICAgIE5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzIsICJkZXY6ZTYiLCAgR1BJTzIsICAgICZncGlvMl9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzMsICJkZXY6ZTciLCAgR1BJTzMsICAgICZncGlvM19wbGF0X2RhdGEpOwogCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewogCSZ1YXJ0M19kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9LY29uZmlnCmluZGV4IDhlNDE3OGYuLjY5YmFiMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9LY29uZmlnCkBAIC01LDYgKzUsMTYgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBXOTBQOTEwIG9mIE51dm90b24gVzkwWDkwMCBDUFVzLgogCitjb25maWcgQ1BVX05VQzk1MAorCWJvb2wKKwloZWxwCisJICBTdXBwb3J0IGZvciBOVUNQOTUwIG9mIE51dm90b24gTlVDOTAwIENQVXMuCisKK2NvbmZpZyBDUFVfTlVDOTYwCisJYm9vbAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIE5VQ1A5NjAgb2YgTnV2b3RvbiBOVUM5MDAgQ1BVcy4KKwogbWVudSAiVzkwUDkxMCBNYWNoaW5lcyIKIAogY29uZmlnIE1BQ0hfVzkwUDkxMEVWQgpAQCAtMTYsNCArMjYsMjQgQEAKIAogZW5kbWVudQogCittZW51ICJOVUM5NTAgTWFjaGluZXMiCisKK2NvbmZpZyBNQUNIX1c5MFA5NTBFVkIKKwlib29sICJOdXZvdG9uIE5VQzk1MCBFdmFsdWF0aW9uIEJvYXJkIgorCXNlbGVjdCBDUFVfTlVDOTUwCisJaGVscAorCSAgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTnV2b3RvbiBOVUM5NTBFVkIKKworZW5kbWVudQorCittZW51ICJOVUM5NjAgTWFjaGluZXMiCisKK2NvbmZpZyBNQUNIX1c5ME45NjBFVkIKKwlib29sICJOdXZvdG9uIE5VQzk2MCBFdmFsdWF0aW9uIEJvYXJkIgorCXNlbGVjdCBDUFVfTlVDOTYwCisJaGVscAorCSAgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTnV2b3RvbiBOVUM5NjBFVkIKKworZW5kbWVudQorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL01ha2VmaWxlCmluZGV4IGQ1MGM5NGYuLjgyOGMwMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvTWFrZWZpbGUKQEAgLTQsMTIgKzQsMTYgQEAKIAogIyBPYmplY3QgZmlsZSBsaXN0cy4KIAotb2JqLXkJCQkJOj0gaXJxLm8gdGltZS5vIG1mcC13OTBwOTEwLm8gZ3Bpby5vIGNsb2NrLm8KLQorb2JqLXkJCQkJOj0gaXJxLm8gdGltZS5vIG1mcC5vIGdwaW8ubyBjbG9jay5vCitvYmoteQkJCQkrPSBjbGtzZWwubyBkZXYubyBjcHUubwogIyBXOTBYOTAwIENQVSBzdXBwb3J0IGZpbGVzCiAKLW9iai0kKENPTkZJR19DUFVfVzkwUDkxMCkJKz0gdzkwcDkxMC5vCitvYmotJChDT05GSUdfQ1BVX1c5MFA5MTApCSs9IG51YzkxMC5vCitvYmotJChDT05GSUdfQ1BVX05VQzk1MCkJKz0gbnVjOTUwLm8KK29iai0kKENPTkZJR19DUFVfTlVDOTYwKQkrPSBudWM5NjAubwogCiAjIG1hY2hpbmUgc3VwcG9ydAogCi1vYmotJChDT05GSUdfTUFDSF9XOTBQOTEwRVZCKQkrPSBtYWNoLXc5MHA5MTBldmIubworb2JqLSQoQ09ORklHX01BQ0hfVzkwUDkxMEVWQikJKz0gbWFjaC1udWM5MTBldmIubworb2JqLSQoQ09ORklHX01BQ0hfVzkwUDk1MEVWQikJKz0gbWFjaC1udWM5NTBldmIubworb2JqLSQoQ09ORklHX01BQ0hfVzkwTjk2MEVWQikJKz0gbWFjaC1udWM5NjBldmIubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsa3NlbC5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsa3NlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZTRhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xrc2VsLmMKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbGtzZWwuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorCisjZGVmaW5lIFBMTDAJCTB4MDAKKyNkZWZpbmUgUExMMQkJMHgwMQorI2RlZmluZSBPVEhFUgkJMHgwMgorI2RlZmluZSBFWFQJCTB4MDMKKyNkZWZpbmUgTVNPRkZTRVQJMHgwQworI2RlZmluZSBBVEFPRkZTRVQJMHgwYQorI2RlZmluZSBMQ0RPRkZTRVQJMHgwNgorI2RlZmluZSBBVURPRkZTRVQJMHgwNAorI2RlZmluZSBDUFVPRkZTRVQJMHgwMAorCitzdGF0aWMgREVGSU5FX01VVEVYKGNsa3NlbF9zZW0pOworCitzdGF0aWMgdm9pZCBjbG9ja19zb3VyY2Vfc2VsZWN0KGNvbnN0IGNoYXIgKmRldl9pZCwgdW5zaWduZWQgaW50IGNsa3ZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgY2xrc2VsLCBvZmZzZXQ7CisKKwljbGtzZWwgPSBfX3Jhd19yZWFkbChSRUdfQ0xLU0VMKTsKKworCWlmIChzdHJjbXAoZGV2X2lkLCAibnVjOTAwLW1zIikgPT0gMCkKKwkJb2Zmc2V0ID0gTVNPRkZTRVQ7CisJZWxzZSBpZiAoc3RyY21wKGRldl9pZCwgIm51YzkwMC1hdGFwaSIpID09IDApCisJCW9mZnNldCA9IEFUQU9GRlNFVDsKKwllbHNlIGlmIChzdHJjbXAoZGV2X2lkLCAibnVjOTAwLWxjZCIpID09IDApCisJCW9mZnNldCA9IExDRE9GRlNFVDsKKwllbHNlIGlmIChzdHJjbXAoZGV2X2lkLCAibnVjOTAwLWF1ZGlvIikgPT0gMCkKKwkJb2Zmc2V0ID0gQVVET0ZGU0VUOworCWVsc2UKKwkJb2Zmc2V0ID0gQ1BVT0ZGU0VUOworCisJY2xrc2VsICY9IH4oMHgwMyA8PCBvZmZzZXQpOworCWNsa3NlbCB8PSAoY2xrdmFsIDw8IG9mZnNldCk7CisKKwlfX3Jhd193cml0ZWwoY2xrc2VsLCBSRUdfQ0xLU0VMKTsKK30KKwordm9pZCBudWM5MDBfY2xvY2tfc291cmNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqc3JjKQoreworCXVuc2lnbmVkIGludCBjbGt2YWw7CisJY29uc3QgY2hhciAqZGV2X2lkOworCisJQlVHX09OKCFzcmMpOworCWNsa3ZhbCA9IDA7CisKKwltdXRleF9sb2NrKCZjbGtzZWxfc2VtKTsKKworCWlmIChkZXYpCisJCWRldl9pZCA9IGRldl9uYW1lKGRldik7CisJZWxzZQorCQlkZXZfaWQgPSAiY3B1ZnJlcSI7CisKKwlpZiAoc3RyY21wKHNyYywgInBsbDAiKSA9PSAwKQorCQljbGt2YWwgPSBQTEwwOworCWVsc2UgaWYgKHN0cmNtcChzcmMsICJwbGwxIikgPT0gMCkKKwkJY2xrdmFsID0gUExMMTsKKwllbHNlIGlmIChzdHJjbXAoc3JjLCAiZXh0IikgPT0gMCkKKwkJY2xrdmFsID0gRVhUOworCWVsc2UgaWYgKHN0cmNtcChzcmMsICJvdGgiKSA9PSAwKQorCQljbGt2YWwgPSBPVEhFUjsKKworCWNsb2NrX3NvdXJjZV9zZWxlY3QoZGV2X2lkLCBjbGt2YWwpOworCisJbXV0ZXhfdW5sb2NrKCZjbGtzZWxfc2VtKTsKK30KK0VYUE9SVF9TWU1CT0wobnVjOTAwX2Nsb2NrX3NvdXJjZSk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmMKaW5kZXggZjQyMDYxMy4uYjc4NTk5NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5jCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlICJjbG9jay5oIgogCisjZGVmaW5lIFNVQkNMSyAweDI0CisKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xvY2tzX2xvY2spOwogCiBpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCkBAIC01Myw3ICs1NSwxMyBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CiAKLXZvaWQgdzkweDkwMF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMTUwMDAwMDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CisKK3ZvaWQgbnVjOTAwX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQogewogCXVuc2lnbmVkIGludCBjbG9ja3MgPSBjbGstPmNrZW47CiAJdW5zaWduZWQgbG9uZyBjbGtlbjsKQEAgLTY4LDYgKzc2LDIyIEBACiAJX19yYXdfd3JpdGVsKGNsa2VuLCBXOTBYOTAwX1ZBX0NMS1BXUik7CiB9CiAKK3ZvaWQgbnVjOTAwX3N1YmNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCBjbG9ja3MgPSBjbGstPmNrZW47CisJdW5zaWduZWQgbG9uZyBjbGtlbjsKKworCWNsa2VuID0gX19yYXdfcmVhZGwoVzkwWDkwMF9WQV9DTEtQV1IgKyBTVUJDTEspOworCisJaWYgKGVuYWJsZSkKKwkJY2xrZW4gfD0gY2xvY2tzOworCWVsc2UKKwkJY2xrZW4gJj0gfmNsb2NrczsKKworCV9fcmF3X3dyaXRlbChjbGtlbiwgVzkwWDkwMF9WQV9DTEtQV1IgKyBTVUJDTEspOworfQorCisKIHZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSkKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmgKaW5kZXggNGYyN2JkYS4uZjU4MTZhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmgKQEAgLTEyLDcgKzEyLDggQEAKIAogI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KIAotdm9pZCB3OTB4OTAwX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKK3ZvaWQgbnVjOTAwX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKK3ZvaWQgbnVjOTAwX3N1YmNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKIHZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSk7CiAKIHN0cnVjdCBjbGsgewpAQCAtMjMsMTAgKzI0LDE3IEBACiAKICNkZWZpbmUgREVGSU5FX0NMSyhfbmFtZSwgX2N0cmxiaXQpCQkJXAogc3RydWN0IGNsayBjbGtfIyNfbmFtZSA9IHsJCQkJXAotCQkuZW5hYmxlCT0gdzkweDkwMF9jbGtfZW5hYmxlLAkJXAorCQkuZW5hYmxlCT0gbnVjOTAwX2Nsa19lbmFibGUsCQlcCiAJCS5ja2VuCT0gKDEgPDwgX2N0cmxiaXQpLAkJXAogCX0KIAorI2RlZmluZSBERUZJTkVfU1VCQ0xLKF9uYW1lLCBfY3RybGJpdCkJCQlcCitzdHJ1Y3QgY2xrIGNsa18jI19uYW1lID0gewkJCQlcCisJCS5lbmFibGUJPSBudWM5MDBfc3ViY2xrX2VuYWJsZSwJXAorCQkuY2tlbgk9ICgxIDw8IF9jdHJsYml0KSwJCVwKKwl9CisKKwogI2RlZmluZSBERUZfQ0xLTE9PSyhfY2xrLCBfZGV2bmFtZSwgX2Nvbm5hbWUpCQlcCiAJewkJCQkJCVwKIAkJLmNsawkJPSBfY2xrLAkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjFjZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5jCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE51dm90b24gY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIE5VQzkwMCBzZXJpZXMgY3B1IGNvbW1vbiBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWViaS5oPgorCisjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKworLyogSW5pdGlhbCBJTyBtYXBwaW5ncyAqLworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG51YzkwMF9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworCUlPREVTQ19FTlQoSVJRKSwKKwlJT0RFU0NfRU5UKEdDUiksCisJSU9ERVNDX0VOVChVQVJUKSwKKwlJT0RFU0NfRU5UKFRJTUVSKSwKKwlJT0RFU0NfRU5UKEVCSSksCit9OworCisvKiBJbml0aWFsIGNsb2NrIGRlY2xhcmF0aW9ucy4gKi8KK3N0YXRpYyBERUZJTkVfQ0xLKGxjZCwgMCk7CitzdGF0aWMgREVGSU5FX0NMSyhhdWRpbywgMSk7CitzdGF0aWMgREVGSU5FX0NMSyhmbWksIDQpOworc3RhdGljIERFRklORV9TVUJDTEsobXMsIDApOworc3RhdGljIERFRklORV9TVUJDTEsoc2QsIDEpOworc3RhdGljIERFRklORV9DTEsoZG1hYywgNSk7CitzdGF0aWMgREVGSU5FX0NMSyhhdGFwaSwgNik7CitzdGF0aWMgREVGSU5FX0NMSyhlbWMsIDcpOworc3RhdGljIERFRklORV9TVUJDTEsocm1paSwgMik7CitzdGF0aWMgREVGSU5FX0NMSyh1c2JkLCA4KTsKK3N0YXRpYyBERUZJTkVfQ0xLKHVzYmgsIDkpOworc3RhdGljIERFRklORV9DTEsoZzJkLCAxMCk7Oworc3RhdGljIERFRklORV9DTEsocHdtLCAxOCk7CitzdGF0aWMgREVGSU5FX0NMSyhwczIsIDI0KTsKK3N0YXRpYyBERUZJTkVfQ0xLKGtwaSwgMjUpOworc3RhdGljIERFRklORV9DTEsod2R0LCAyNik7CitzdGF0aWMgREVGSU5FX0NMSyhnZG1hLCAyNyk7CitzdGF0aWMgREVGSU5FX0NMSyhhZGMsIDI4KTsKK3N0YXRpYyBERUZJTkVfQ0xLKHVzaSwgMjkpOworc3RhdGljIERFRklORV9DTEsoZXh0LCAwKTsKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIG51YzkwMF9jbGtyZWdzW10gPSB7CisJREVGX0NMS0xPT0soJmNsa19sY2QsICJudWM5MDAtbGNkIiwgTlVMTCksCisJREVGX0NMS0xPT0soJmNsa19hdWRpbywgIm51YzkwMC1hdWRpbyIsIE5VTEwpLAorCURFRl9DTEtMT09LKCZjbGtfZm1pLCAibnVjOTAwLWZtaSIsIE5VTEwpLAorCURFRl9DTEtMT09LKCZjbGtfbXMsICJudWM5MDAtZm1pIiwgIk1TIiksCisJREVGX0NMS0xPT0soJmNsa19zZCwgIm51YzkwMC1mbWkiLCAiU0QiKSwKKwlERUZfQ0xLTE9PSygmY2xrX2RtYWMsICJudWM5MDAtZG1hYyIsIE5VTEwpLAorCURFRl9DTEtMT09LKCZjbGtfYXRhcGksICJudWM5MDAtYXRhcGkiLCBOVUxMKSwKKwlERUZfQ0xLTE9PSygmY2xrX2VtYywgIm51YzkwMC1lbWMiLCBOVUxMKSwKKwlERUZfQ0xLTE9PSygmY2xrX3JtaWksICJudWM5MDAtZW1jIiwgIlJNSUkiKSwKKwlERUZfQ0xLTE9PSygmY2xrX3VzYmQsICJudWM5MDAtdXNiZCIsIE5VTEwpLAorCURFRl9DTEtMT09LKCZjbGtfdXNiaCwgIm51YzkwMC11c2JoIiwgTlVMTCksCisJREVGX0NMS0xPT0soJmNsa19nMmQsICJudWM5MDAtZzJkIiwgTlVMTCksCisJREVGX0NMS0xPT0soJmNsa19wd20sICJudWM5MDAtcHdtIiwgTlVMTCksCisJREVGX0NMS0xPT0soJmNsa19wczIsICJudWM5MDAtcHMyIiwgTlVMTCksCisJREVGX0NMS0xPT0soJmNsa19rcGksICJudWM5MDAta3BpIiwgTlVMTCksCisJREVGX0NMS0xPT0soJmNsa193ZHQsICJudWM5MDAtd2R0IiwgTlVMTCksCisJREVGX0NMS0xPT0soJmNsa19nZG1hLCAibnVjOTAwLWdkbWEiLCBOVUxMKSwKKwlERUZfQ0xLTE9PSygmY2xrX2FkYywgIm51YzkwMC1hZGMiLCBOVUxMKSwKKwlERUZfQ0xLTE9PSygmY2xrX3VzaSwgIm51YzkwMC1zcGkiLCBOVUxMKSwKKwlERUZfQ0xLTE9PSygmY2xrX2V4dCwgTlVMTCwgImV4dCIpLAorfTsKKworLyogSW5pdGlhbCBzZXJpYWwgcGxhdGZvcm0gZGF0YSAqLworCitzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgbnVjOTAwX3VhcnRfZGF0YVtdID0geworCU5VQzkwMF84MjUwUE9SVChVQVJUMCksCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9zZXJpYWxfZGV2aWNlID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IG51YzkwMF91YXJ0X2RhdGEsCisJfSwKK307CisKKy8qU2V0IE5VQzkwMCBzZXJpZXMgY3B1IGZyZXF1ZW5jZSovCitzdGF0aWMgaW50IF9faW5pdCBudWM5MDBfc2V0X2Nsa3ZhbCh1bnNpZ25lZCBpbnQgY3B1ZnJlcSkKK3sKKwl1bnNpZ25lZCBpbnQgcGxsY2xrLCBhaGJjbGssIGFwYmNsaywgdmFsOworCisJcGxsY2xrID0gMDsKKwlhaGJjbGsgPSAwOworCWFwYmNsayA9IDA7CisKKwlzd2l0Y2ggKGNwdWZyZXEpIHsKKwljYXNlIDY2OgorCQlwbGxjbGsgPSBQTExfNjZNSFo7CisJCWFoYmNsayA9IEFIQl9DUFVDTEtfMV8xOworCQlhcGJjbGsgPSBBUEJfQUhCXzFfMjsKKwkJYnJlYWs7CisKKwljYXNlIDEwMDoKKwkJcGxsY2xrID0gUExMXzEwME1IWjsKKwkJYWhiY2xrID0gQUhCX0NQVUNMS18xXzE7CisJCWFwYmNsayA9IEFQQl9BSEJfMV8yOworCQlicmVhazsKKworCWNhc2UgMTIwOgorCQlwbGxjbGsgPSBQTExfMTIwTUhaOworCQlhaGJjbGsgPSBBSEJfQ1BVQ0xLXzFfMjsKKwkJYXBiY2xrID0gQVBCX0FIQl8xXzI7CisJCWJyZWFrOworCisJY2FzZSAxNjY6CisJCXBsbGNsayA9IFBMTF8xNjZNSFo7CisJCWFoYmNsayA9IEFIQl9DUFVDTEtfMV8yOworCQlhcGJjbGsgPSBBUEJfQUhCXzFfMjsKKwkJYnJlYWs7CisKKwljYXNlIDIwMDoKKwkJcGxsY2xrID0gUExMXzIwME1IWjsKKwkJYWhiY2xrID0gQUhCX0NQVUNMS18xXzI7CisJCWFwYmNsayA9IEFQQl9BSEJfMV8yOworCQlicmVhazsKKwl9CisKKwlfX3Jhd193cml0ZWwocGxsY2xrLCBSRUdfUExMQ09OMCk7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChSRUdfQ0xLRElWKTsKKwl2YWwgJj0gfigweDAzIDw8IDI0IHwgMHgwMyA8PCAyNik7CisJdmFsIHw9IChhaGJjbGsgPDwgMjQgfCBhcGJjbGsgPDwgMjYpOworCV9fcmF3X3dyaXRlbCh2YWwsIFJFR19DTEtESVYpOworCisJcmV0dXJuIAkwOworfQorc3RhdGljIGludCBfX2luaXQgbnVjOTAwX3NldF9jcHVmcmVxKGNoYXIgKnN0cikKK3sKKwl1bnNpZ25lZCBsb25nIGNwdWZyZXEsIHZhbDsKKworCWlmICghKnN0cikKKwkJcmV0dXJuIDA7CisKKwlzdHJpY3Rfc3RydG91bChzdHIsIDAsICZjcHVmcmVxKTsKKworCW51YzkwMF9jbG9ja19zb3VyY2UoTlVMTCwgImV4dCIpOworCisJbnVjOTAwX3NldF9jbGt2YWwoY3B1ZnJlcSk7CisKKwltZGVsYXkoMSk7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChSRUdfQ0tTS0VXKTsKKwl2YWwgJj0gfjB4ZmY7CisJdmFsIHw9IERFRkFVTFRTS0VXOworCV9fcmF3X3dyaXRlbCh2YWwsIFJFR19DS1NLRVcpOworCisJbnVjOTAwX2Nsb2NrX3NvdXJjZShOVUxMLCAicGxsMCIpOworCisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoImNwdWZyZXE9IiwgbnVjOTAwX3NldF9jcHVmcmVxKTsKKworLypJbml0IE5VQzkwMCBldmIgaW8qLworCit2b2lkIF9faW5pdCBudWM5MDBfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgbWFjaF9zaXplKQoreworCXVuc2lnbmVkIGxvbmcgaWRjb2RlID0gMHgwOworCisJaW90YWJsZV9pbml0KG1hY2hfZGVzYywgbWFjaF9zaXplKTsKKwlpb3RhYmxlX2luaXQobnVjOTAwX2lvZGVzYywgQVJSQVlfU0laRShudWM5MDBfaW9kZXNjKSk7CisKKwlpZGNvZGUgPSBfX3Jhd19yZWFkbChOVUM5MDBQRElEKTsKKwlpZiAoaWRjb2RlID09IE5VQzkxMF9DUFVJRCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIHR5cGUgMHglMDhseCBpcyBOVUM5MTBcbiIsIGlkY29kZSk7CisJZWxzZSBpZiAoaWRjb2RlID09IE5VQzkyMF9DUFVJRCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIHR5cGUgMHglMDhseCBpcyBOVUM5MjBcbiIsIGlkY29kZSk7CisJZWxzZSBpZiAoaWRjb2RlID09IE5VQzk1MF9DUFVJRCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIHR5cGUgMHglMDhseCBpcyBOVUM5NTBcbiIsIGlkY29kZSk7CisJZWxzZSBpZiAoaWRjb2RlID09IE5VQzk2MF9DUFVJRCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIHR5cGUgMHglMDhseCBpcyBOVUM5NjBcbiIsIGlkY29kZSk7Cit9CisKKy8qSW5pdCBOVUM5MDAgY2xvY2sqLworCit2b2lkIF9faW5pdCBudWM5MDBfaW5pdF9jbG9ja3Modm9pZCkKK3sKKwljbGtzX3JlZ2lzdGVyKG51YzkwMF9jbGtyZWdzLCBBUlJBWV9TSVpFKG51YzkwMF9jbGtyZWdzKSk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuaAppbmRleCA1N2I1ZGJhLi40ZDU4YmExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5oCkBAIC02LDcgKzYsNyBAQAogICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCi0gKiBIZWFkZXIgZmlsZSBmb3IgVzkwWDkwMCBDUFUgc3VwcG9ydAorICogSGVhZGVyIGZpbGUgZm9yIE5VQzkwMCBDUFUgc3VwcG9ydAogICoKICAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KICAqCkBAIC0yNCwyOSArMjQsNyBAQAogICAgICAgIC50eXBlICAgID0gTVRfREVWSUNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAotLypDcHUgaWRlbnRpZmllciByZWdpc3RlciovCi0KLSNkZWZpbmUgVzkwWDkwMFBESUQJVzkwWDkwMF9WQV9HQ1IKLSNkZWZpbmUgVzkwUDkxMF9DUFVJRAkweDAyOTAwOTEwCi0jZGVmaW5lIFc5MFA5MjBfQ1BVSUQJMHgwMjkwMDkyMAotI2RlZmluZSBXOTBQOTUwX0NQVUlECTB4MDI5MDA5NTAKLSNkZWZpbmUgVzkwTjk2MF9DUFVJRAkweDAyOTAwOTYwCi0KLXN0cnVjdCB3OTB4OTAwX3VhcnRjZmc7Ci1zdHJ1Y3QgbWFwX2Rlc2M7Ci1zdHJ1Y3Qgc3lzX3RpbWVyOwotCi0vKiBjb3JlIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyAqLwotCi1leHRlcm4gdm9pZCB3OTB4OTAwX2luaXRfaXJxKHZvaWQpOwotZXh0ZXJuIHZvaWQgdzkwcDkxMF9pbml0X2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7Ci1leHRlcm4gdm9pZCB3OTBwOTEwX2luaXRfdWFydHMoc3RydWN0IHc5MHg5MDBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pOwotZXh0ZXJuIHZvaWQgdzkwcDkxMF9pbml0X2Nsb2Nrcyh2b2lkKTsKLWV4dGVybiB2b2lkIHc5MHA5MTBfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB3OTBwOTEwX3NlcmlhbF9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHN5c190aW1lciB3OTB4OTAwX3RpbWVyOwotCi0jZGVmaW5lIFc5MFg5MDBfODI1MFBPUlQobmFtZSkJCQkJCVwKKyNkZWZpbmUgTlVDOTAwXzgyNTBQT1JUKG5hbWUpCQkJCQlcCiB7CQkJCQkJCQlcCiAJLm1lbWJhc2UJPSBuYW1lIyNfQkEsCQkJCVwKIAkubWFwYmFzZQk9IG5hbWUjI19QQSwJCQkJXApAQCAtNTYsMyArMzQsMjYgQEAKIAkuaW90eXBlCQk9IFVQSU9fTUVNLAkJCQlcCiAJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwJXAogfQorCisvKkNwdSBpZGVudGlmaWVyIHJlZ2lzdGVyKi8KKworI2RlZmluZSBOVUM5MDBQRElECVc5MFg5MDBfVkFfR0NSCisjZGVmaW5lIE5VQzkxMF9DUFVJRAkweDAyOTAwOTEwCisjZGVmaW5lIE5VQzkyMF9DUFVJRAkweDAyOTAwOTIwCisjZGVmaW5lIE5VQzk1MF9DUFVJRAkweDAyOTAwOTUwCisjZGVmaW5lIE5VQzk2MF9DUFVJRAkweDAyOTAwOTYwCisKKy8qIGV4dGVybiBmaWxlIGZyb20gY3B1LmMgKi8KKworZXh0ZXJuIHZvaWQgbnVjOTAwX2Nsb2NrX3NvdXJjZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKnNyYyk7CitleHRlcm4gdm9pZCBudWM5MDBfaW5pdF9jbG9ja3Modm9pZCk7CitleHRlcm4gdm9pZCBudWM5MDBfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgbWFjaF9zaXplKTsKK2V4dGVybiB2b2lkIG51YzkwMF9ib2FyZF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKipkZXZpY2UsIGludCBzaXplKTsKKworLyogZm9yIGVpdGhlciBwdWJsaWMgYmV0d2VlbiA5MTAgYW5kIDkyMCwgb3IgYmV0d2VlbiA5MjAgYW5kIDk1MCAqLworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBudWM5MDBfc2VyaWFsX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9kZXZpY2VfZm1pOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV9rcGk7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBudWM5MDBfZGV2aWNlX3J0YzsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9kZXZpY2VfdHM7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvZGV2LmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2Zjk4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9kZXYuYwpAQCAtMCwwICsxLDM4OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkweDkwMC9kZXYuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOdXZvdG9uIGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgImNwdS5oIgorCisvKk5VQzkwMCBldmIgbm9yZmxhc2ggZHJpdmVyIGRhdGEgKi8KKworI2RlZmluZSBOVUM5MDBfRkxBU0hfQkFTRQkweEEwMDAwMDAwCisjZGVmaW5lIE5VQzkwMF9GTEFTSF9TSVpFCTB4NDAwMDAwCisjZGVmaW5lIFNQSU9GRlNFVAkJMHgyMDAKKyNkZWZpbmUgU1BJT1JFR19TSVpFCQkweDEwMAorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbnVjOTAwX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCT0JIk5PUiBQYXJ0aXRpb24gMSBmb3Iga2VybmVsICg5NjBLKSIsCisJCS5zaXplCT0JMHhGMDAwMCwKKwkJLm9mZnNldAk9CTB4MTAwMDAsCisJfSwKKwl7CisJCS5uYW1lCT0JIk5PUiBQYXJ0aXRpb24gMiBmb3IgaW1hZ2UgKDFNKSIsCisJCS5zaXplCT0JMHgxMDAwMDAsCisJCS5vZmZzZXQJPQkweDEwMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPQkiTk9SIFBhcnRpdGlvbiAzIGZvciB1c2VyICgyTSkiLAorCQkuc2l6ZQk9CTB4MjAwMDAwLAorCQkub2Zmc2V0CT0JMHgwMDIwMDAwMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBudWM5MDBfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0JMiwKKwkucGFydHMJCT0JbnVjOTAwX2ZsYXNoX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0JQVJSQVlfU0laRShudWM5MDBfZmxhc2hfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG51YzkwMF9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9CU5VQzkwMF9GTEFTSF9CQVNFLAorCQkuZW5kCT0JTlVDOTAwX0ZMQVNIX0JBU0UgKyBOVUM5MDBfRkxBU0hfU0laRSAtIDEsCisJCS5mbGFncwk9CUlPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0JInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPQkwLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhID0gJm51YzkwMF9mbGFzaF9kYXRhLAorCQkJfSwKKwkucmVzb3VyY2UJPQludWM5MDBfZmxhc2hfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0JQVJSQVlfU0laRShudWM5MDBfZmxhc2hfcmVzb3VyY2VzKSwKK307CisKKy8qIFVTQiBFSENJIEhvc3QgQ29udHJvbGxlciAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG51YzkwMF91c2JfZWhjaV9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gVzkwWDkwMF9QQV9VU0JFSENJSE9TVCwKKwkJLmVuZCAgID0gVzkwWDkwMF9QQV9VU0JFSENJSE9TVCArIFc5MFg5MDBfU1pfVVNCRUhDSUhPU1QgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1VTQkgsCisJCS5lbmQgICA9IElSUV9VU0JILAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgdTY0IG51YzkwMF9kZXZpY2VfdXNiX2VoY2lfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV91c2JfZWhjaSA9IHsKKwkubmFtZQkJICA9ICJudWM5MDAtZWhjaSIsCisJLmlkCQkgID0gLTEsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUobnVjOTAwX3VzYl9laGNpX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IG51YzkwMF91c2JfZWhjaV9yZXNvdXJjZSwKKwkuZGV2ICAgICAgICAgICAgICA9IHsKKwkJLmRtYV9tYXNrID0gJm51YzkwMF9kZXZpY2VfdXNiX2VoY2lfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZlVMCisJfQorfTsKKworLyogVVNCIE9IQ0kgSG9zdCBDb250cm9sbGVyICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnVjOTAwX3VzYl9vaGNpX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBXOTBYOTAwX1BBX1VTQk9IQ0lIT1NULAorCQkuZW5kICAgPSBXOTBYOTAwX1BBX1VTQk9IQ0lIT1NUICsgVzkwWDkwMF9TWl9VU0JPSENJSE9TVCAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfVVNCSCwKKwkJLmVuZCAgID0gSVJRX1VTQkgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyB1NjQgbnVjOTAwX2RldmljZV91c2Jfb2hjaV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV91c2Jfb2hjaSA9IHsKKwkubmFtZQkJICA9ICJudWM5MDAtb2hjaSIsCisJLmlkCQkgID0gLTEsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUobnVjOTAwX3VzYl9vaGNpX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IG51YzkwMF91c2Jfb2hjaV9yZXNvdXJjZSwKKwkuZGV2ICAgICAgICAgICAgICA9IHsKKwkJLmRtYV9tYXNrID0gJm51YzkwMF9kZXZpY2VfdXNiX29oY2lfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZlVMCisJfQorfTsKKworLyogVVNCIERldmljZSAoR2FkZ2V0KSovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnVjOTAwX3VzYmdhZGdldF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gVzkwWDkwMF9QQV9VU0JERVYsCisJCS5lbmQgICA9IFc5MFg5MDBfUEFfVVNCREVWICsgVzkwWDkwMF9TWl9VU0JERVYgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1VTQkQsCisJCS5lbmQgICA9IElSUV9VU0JELAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBudWM5MDBfZGV2aWNlX3VzYmdhZGdldCA9IHsKKwkubmFtZQkJPSAibnVjOTAwLXVzYmdhZGdldCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShudWM5MDBfdXNiZ2FkZ2V0X3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBudWM5MDBfdXNiZ2FkZ2V0X3Jlc291cmNlLAorfTsKKworLyogTUFDIGRldmljZSAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG51YzkwMF9lbWNfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFc5MFg5MDBfUEFfRU1DLAorCQkuZW5kICAgPSBXOTBYOTAwX1BBX0VNQyArIFc5MFg5MDBfU1pfRU1DIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9FTUNUWCwKKwkJLmVuZCAgID0gSVJRX0VNQ1RYLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX0VNQ1JYLAorCQkuZW5kICAgPSBJUlFfRU1DUlgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyB1NjQgbnVjOTAwX2RldmljZV9lbWNfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9kZXZpY2VfZW1jID0geworCS5uYW1lCQk9ICJudWM5MDAtZW1jIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG51YzkwMF9lbWNfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IG51YzkwMF9lbWNfcmVzb3VyY2UsCisJLmRldiAgICAgICAgICAgICAgPSB7CisJCS5kbWFfbWFzayA9ICZudWM5MDBfZGV2aWNlX2VtY19kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmVUwKKwl9Cit9OworCisvKiBTUEkgZGV2aWNlICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnVjOTAwX3NwaV9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gVzkwWDkwMF9QQV9JMkMgKyBTUElPRkZTRVQsCisJCS5lbmQgICA9IFc5MFg5MDBfUEFfSTJDICsgU1BJT0ZGU0VUICsgU1BJT1JFR19TSVpFIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9TU1AsCisJCS5lbmQgICA9IElSUV9TU1AsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9kZXZpY2Vfc3BpID0geworCS5uYW1lCQk9ICJudWM5MDAtc3BpIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG51YzkwMF9zcGlfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IG51YzkwMF9zcGlfcmVzb3VyY2UsCit9OworCisvKiBzcGkgZGV2aWNlLCBzcGkgZmxhc2ggaW5mbyAqLworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbnVjOTAwX3NwaV9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9ICJib290bG9hZGVyKHNwaSkiLAorCQkuc2l6ZSA9IDB4MDEwMDAwMCwKKwkJLm9mZnNldCA9IDAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBudWM5MDBfc3BpX2ZsYXNoX2RhdGEgPSB7CisJLm5hbWUgPSAibTI1cDgwIiwKKwkucGFydHMgPSAgbnVjOTAwX3NwaV9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUobnVjOTAwX3NwaV9mbGFzaF9wYXJ0aXRpb25zKSwKKwkudHlwZSA9ICJ3MjV4MTYiLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBudWM5MDBfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzID0gIm0yNXA4MCIsCisJCS5tYXhfc3BlZWRfaHogPSAyMDAwMDAwMCwKKwkJLmJ1c19udW0gPSAwLAorCQkuY2hpcF9zZWxlY3QgPSAxLAorCQkucGxhdGZvcm1fZGF0YSA9ICZudWM5MDBfc3BpX2ZsYXNoX2RhdGEsCisJCS5tb2RlID0gU1BJX01PREVfMCwKKwl9LAorfTsKKworLyogV0RUIERldmljZSAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG51YzkwMF93ZHRfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFc5MFg5MDBfUEFfVElNRVIsCisJCS5lbmQgICA9IFc5MFg5MDBfUEFfVElNRVIgKyBXOTBYOTAwX1NaX1RJTUVSIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9XRFQsCisJCS5lbmQgICA9IElSUV9XRFQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9kZXZpY2Vfd2R0ID0geworCS5uYW1lCQk9ICJudWM5MDAtd2R0IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG51YzkwMF93ZHRfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IG51YzkwMF93ZHRfcmVzb3VyY2UsCit9OworCisvKgorICogcHVibGljIGRldmljZSBkZWZpbml0aW9uIGJldHdlZW4gOTEwIGFuZCA5MjAsIG9yIDkxMAorICogYW5kIDk1MCBvciA5NTAgYW5kIDk2MC4uLix0aGVpciBkZXYgcGxhdGZvcm0gcmVnaXN0ZXIKKyAqIHNob3VsZCBiZSBpbiBzcGVjaWZpYyBmaWxlIHN1Y2ggYXMgbnVjOTUwLCBudWM5NjAgYworICogZmlsZXMgcmF0aGVyIHRoYW4gdGhlIHB1YmxpYyBkZXYuYyBmaWxlIGhlcmUuIHNvIHRoZQorICogY29ycmVzcG9uZGluZyBwbGF0Zm9ybV9kZXZpY2UgZGVmaW5pdGlvbiBzaG91bGQgbm90IGJlCisgKiBzdGF0aWMuCisqLworCisvKiBSVEMgY29udHJvbGxlciovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnVjOTAwX3J0Y19yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gVzkwWDkwMF9QQV9SVEMsCisJCS5lbmQgICA9IFc5MFg5MDBfUEFfUlRDICsgMHhmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9SVEMsCisJCS5lbmQgICA9IElSUV9SVEMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9kZXZpY2VfcnRjID0geworCS5uYW1lCQk9ICJudWM5MDAtcnRjIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG51YzkwMF9ydGNfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IG51YzkwMF9ydGNfcmVzb3VyY2UsCit9OworCisvKlRvdWNoU2NyZWVuIGNvbnRyb2xsZXIqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG51YzkwMF90c19yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gVzkwWDkwMF9QQV9BREMsCisJCS5lbmQgICA9IFc5MFg5MDBfUEFfQURDICsgVzkwWDkwMF9TWl9BREMtMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9BREMsCisJCS5lbmQgICA9IElSUV9BREMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9kZXZpY2VfdHMgPSB7CisJLm5hbWUJCT0gIm51YzkwMC10cyIsCisJLmlkCQk9IC0xLAorCS5yZXNvdXJjZQk9IG51YzkwMF90c19yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobnVjOTAwX3RzX3Jlc291cmNlKSwKK307CisKKy8qIEZNSSBEZXZpY2UgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBudWM5MDBfZm1pX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBXOTBYOTAwX1BBX0ZNSSwKKwkJLmVuZCAgID0gVzkwWDkwMF9QQV9GTUkgKyBXOTBYOTAwX1NaX0ZNSSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfRk1JLAorCQkuZW5kICAgPSBJUlFfRk1JLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9kZXZpY2VfZm1pID0geworCS5uYW1lCQk9ICJudWM5MDAtZm1pIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG51YzkwMF9mbWlfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IG51YzkwMF9mbWlfcmVzb3VyY2UsCit9OworCisvKiBLUEkgY29udHJvbGxlciovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnVjOTAwX2twaV9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gVzkwWDkwMF9QQV9LUEksCisJCS5lbmQgICA9IFc5MFg5MDBfUEFfS1BJICsgVzkwWDkwMF9TWl9LUEkgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX0tQSSwKKwkJLmVuZCAgID0gSVJRX0tQSSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9kZXZpY2Vfa3BpID0geworCS5uYW1lCQk9ICJudWM5MDAta3BpIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG51YzkwMF9rcGlfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IG51YzkwMF9rcGlfcmVzb3VyY2UsCit9OworCisvKkhlcmUgc2hvdWxkIGJlIHlvdXIgZXZiIHJlc291cnNlLHN1Y2ggYXMgTENEKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm51YzkwMF9wdWJsaWNfZGV2W10gX19pbml0ZGF0YSA9IHsKKwkmbnVjOTAwX3NlcmlhbF9kZXZpY2UsCisJJm51YzkwMF9mbGFzaF9kZXZpY2UsCisJJm51YzkwMF9kZXZpY2VfdXNiX2VoY2ksCisJJm51YzkwMF9kZXZpY2VfdXNiX29oY2ksCisJJm51YzkwMF9kZXZpY2VfdXNiZ2FkZ2V0LAorCSZudWM5MDBfZGV2aWNlX2VtYywKKwkmbnVjOTAwX2RldmljZV9zcGksCisJJm51YzkwMF9kZXZpY2Vfd2R0LAorfTsKKworLyogUHJvdmlkZSBhZGRpbmcgc3BlY2lmaWMgQ1BVIHBsYXRmb3JtIGRldmljZXMgQVBJICovCisKK3ZvaWQgX19pbml0IG51YzkwMF9ib2FyZF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKipkZXZpY2UsIGludCBzaXplKQoreworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZSwgc2l6ZSk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMobnVjOTAwX3B1YmxpY19kZXYsIEFSUkFZX1NJWkUobnVjOTAwX3B1YmxpY19kZXYpKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhudWM5MDBfc3BpX2JvYXJkX2luZm8sCisJCQkJCUFSUkFZX1NJWkUobnVjOTAwX3NwaV9ib2FyZF9pbmZvKSk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvZ3Bpby5jCmluZGV4IGM3MmUwZGYuLmJhMDVhZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2dwaW8uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHA5MTAvZ3Bpby5jCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvZ3Bpby5jCiAgKgotICogR2VuZXJpYyB3OTBwOTEwIEdQSU8gaGFuZGxpbmcKKyAqIEdlbmVyaWMgbnVjOTAwIEdQSU8gaGFuZGxpbmcKICAqCiAgKiAgV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgogICoKQEAgLTMwLDMxICszMCwzMSBAQAogI2RlZmluZSBHUElPX0lOCQkJKDB4MEMpCiAjZGVmaW5lIEdST1VQSU5FUlYJCSgweDEwKQogI2RlZmluZSBHUElPX0dQSU8oTmIpCQkoMHgwMDAwMDAwMSA8PCAoTmIpKQotI2RlZmluZSB0b193OTBwOTEwX2dwaW9fY2hpcChjKSBjb250YWluZXJfb2YoYywgc3RydWN0IHc5MHA5MTBfZ3Bpb19jaGlwLCBjaGlwKQorI2RlZmluZSB0b19udWM5MDBfZ3Bpb19jaGlwKGMpIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbnVjOTAwX2dwaW9fY2hpcCwgY2hpcCkKIAotI2RlZmluZSBXOTBQOTEwX0dQSU9fQ0hJUChuYW1lLCBiYXNlX2dwaW8sIG5yX2dwaW8pCQkJXAorI2RlZmluZSBOVUM5MDBfR1BJT19DSElQKG5hbWUsIGJhc2VfZ3BpbywgbnJfZ3BpbykJCQlcCiAJewkJCQkJCQkJXAogCQkuY2hpcCA9IHsJCQkJCQlcCiAJCQkubGFiZWwJCSAgPSBuYW1lLAkJCVwKLQkJCS5kaXJlY3Rpb25faW5wdXQgID0gdzkwcDkxMF9kaXJfaW5wdXQsCQlcCi0JCQkuZGlyZWN0aW9uX291dHB1dCA9IHc5MHA5MTBfZGlyX291dHB1dCwJCVwKLQkJCS5nZXQJCSAgPSB3OTBwOTEwX2dwaW9fZ2V0LAkJXAotCQkJLnNldAkJICA9IHc5MHA5MTBfZ3Bpb19zZXQsCQlcCisJCQkuZGlyZWN0aW9uX2lucHV0ICA9IG51YzkwMF9kaXJfaW5wdXQsCQlcCisJCQkuZGlyZWN0aW9uX291dHB1dCA9IG51YzkwMF9kaXJfb3V0cHV0LAkJXAorCQkJLmdldAkJICA9IG51YzkwMF9ncGlvX2dldCwJCVwKKwkJCS5zZXQJCSAgPSBudWM5MDBfZ3Bpb19zZXQsCQlcCiAJCQkuYmFzZQkJICA9IGJhc2VfZ3BpbywJCQlcCiAJCQkubmdwaW8JCSAgPSBucl9ncGlvLAkJCVwKIAkJfQkJCQkJCQlcCiAJfQogCi1zdHJ1Y3QgdzkwcDkxMF9ncGlvX2NoaXAgeworc3RydWN0IG51YzkwMF9ncGlvX2NoaXAgewogCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKIAl2b2lkIF9faW9tZW0JCSpyZWdiYXNlOwkvKiBCYXNlIG9mIGdyb3VwIHJlZ2lzdGVyKi8KIAlzcGlubG9ja190IAkJZ3Bpb19sb2NrOwogfTsKIAotc3RhdGljIGludCB3OTBwOTEwX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3N0YXRpYyBpbnQgbnVjOTAwX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlzdHJ1Y3QgdzkwcDkxMF9ncGlvX2NoaXAgKnc5MHA5MTBfZ3BpbyA9IHRvX3c5MHA5MTBfZ3Bpb19jaGlwKGNoaXApOwotCXZvaWQgX19pb21lbSAqcGlvID0gdzkwcDkxMF9ncGlvLT5yZWdiYXNlICsgR1BJT19JTjsKKwlzdHJ1Y3QgbnVjOTAwX2dwaW9fY2hpcCAqbnVjOTAwX2dwaW8gPSB0b19udWM5MDBfZ3Bpb19jaGlwKGNoaXApOworCXZvaWQgX19pb21lbSAqcGlvID0gbnVjOTAwX2dwaW8tPnJlZ2Jhc2UgKyBHUElPX0lOOwogCXVuc2lnbmVkIGludCByZWd2YWw7CiAKIAlyZWd2YWwgPSBfX3Jhd19yZWFkbChwaW8pOwpAQCAtNjMsMTQgKzYzLDE0IEBACiAJcmV0dXJuIChyZWd2YWwgIT0gMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHc5MHA5MTBfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKQorc3RhdGljIHZvaWQgbnVjOTAwX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKIHsKLQlzdHJ1Y3QgdzkwcDkxMF9ncGlvX2NoaXAgKnc5MHA5MTBfZ3BpbyA9IHRvX3c5MHA5MTBfZ3Bpb19jaGlwKGNoaXApOwotCXZvaWQgX19pb21lbSAqcGlvID0gdzkwcDkxMF9ncGlvLT5yZWdiYXNlICsgR1BJT19PVVQ7CisJc3RydWN0IG51YzkwMF9ncGlvX2NoaXAgKm51YzkwMF9ncGlvID0gdG9fbnVjOTAwX2dwaW9fY2hpcChjaGlwKTsKKwl2b2lkIF9faW9tZW0gKnBpbyA9IG51YzkwMF9ncGlvLT5yZWdiYXNlICsgR1BJT19PVVQ7CiAJdW5zaWduZWQgaW50IHJlZ3ZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnc5MHA5MTBfZ3Bpby0+Z3Bpb19sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm51YzkwMF9ncGlvLT5ncGlvX2xvY2ssIGZsYWdzKTsKIAogCXJlZ3ZhbCA9IF9fcmF3X3JlYWRsKHBpbyk7CiAKQEAgLTgxLDM2ICs4MSwzNiBAQAogCiAJX19yYXdfd3JpdGVsKHJlZ3ZhbCwgcGlvKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnc5MHA5MTBfZ3Bpby0+Z3Bpb19sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnVjOTAwX2dwaW8tPmdwaW9fbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHc5MHA5MTBfZGlyX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3N0YXRpYyBpbnQgbnVjOTAwX2Rpcl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0Jc3RydWN0IHc5MHA5MTBfZ3Bpb19jaGlwICp3OTBwOTEwX2dwaW8gPSB0b193OTBwOTEwX2dwaW9fY2hpcChjaGlwKTsKLQl2b2lkIF9faW9tZW0gKnBpbyA9IHc5MHA5MTBfZ3Bpby0+cmVnYmFzZSArIEdQSU9fRElSOworCXN0cnVjdCBudWM5MDBfZ3Bpb19jaGlwICpudWM5MDBfZ3BpbyA9IHRvX251YzkwMF9ncGlvX2NoaXAoY2hpcCk7CisJdm9pZCBfX2lvbWVtICpwaW8gPSBudWM5MDBfZ3Bpby0+cmVnYmFzZSArIEdQSU9fRElSOwogCXVuc2lnbmVkIGludCByZWd2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ3OTBwOTEwX2dwaW8tPmdwaW9fbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZudWM5MDBfZ3Bpby0+Z3Bpb19sb2NrLCBmbGFncyk7CiAKIAlyZWd2YWwgPSBfX3Jhd19yZWFkbChwaW8pOwogCXJlZ3ZhbCAmPSB+R1BJT19HUElPKG9mZnNldCk7CiAJX19yYXdfd3JpdGVsKHJlZ3ZhbCwgcGlvKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnc5MHA5MTBfZ3Bpby0+Z3Bpb19sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnVjOTAwX2dwaW8tPmdwaW9fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdzkwcDkxMF9kaXJfb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKK3N0YXRpYyBpbnQgbnVjOTAwX2Rpcl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKQogewotCXN0cnVjdCB3OTBwOTEwX2dwaW9fY2hpcCAqdzkwcDkxMF9ncGlvID0gdG9fdzkwcDkxMF9ncGlvX2NoaXAoY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICpvdXRyZWcgPSB3OTBwOTEwX2dwaW8tPnJlZ2Jhc2UgKyBHUElPX09VVDsKLQl2b2lkIF9faW9tZW0gKnBpbyA9IHc5MHA5MTBfZ3Bpby0+cmVnYmFzZSArIEdQSU9fRElSOworCXN0cnVjdCBudWM5MDBfZ3Bpb19jaGlwICpudWM5MDBfZ3BpbyA9IHRvX251YzkwMF9ncGlvX2NoaXAoY2hpcCk7CisJdm9pZCBfX2lvbWVtICpvdXRyZWcgPSBudWM5MDBfZ3Bpby0+cmVnYmFzZSArIEdQSU9fT1VUOworCXZvaWQgX19pb21lbSAqcGlvID0gbnVjOTAwX2dwaW8tPnJlZ2Jhc2UgKyBHUElPX0RJUjsKIAl1bnNpZ25lZCBpbnQgcmVndmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdzkwcDkxMF9ncGlvLT5ncGlvX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbnVjOTAwX2dwaW8tPmdwaW9fbG9jaywgZmxhZ3MpOwogCiAJcmVndmFsID0gX19yYXdfcmVhZGwocGlvKTsKIAlyZWd2YWwgfD0gR1BJT19HUElPKG9mZnNldCk7CkBAIC0xMjUsMjggKzEyNSwyOCBAQAogCiAJX19yYXdfd3JpdGVsKHJlZ3ZhbCwgb3V0cmVnKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnc5MHA5MTBfZ3Bpby0+Z3Bpb19sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnVjOTAwX2dwaW8tPmdwaW9fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdzkwcDkxMF9ncGlvX2NoaXAgdzkwcDkxMF9ncGlvW10gPSB7Ci0JVzkwUDkxMF9HUElPX0NISVAoIkdST1VQQyIsIDAsIDE2KSwKLQlXOTBQOTEwX0dQSU9fQ0hJUCgiR1JPVVBEIiwgMTYsIDEwKSwKLQlXOTBQOTEwX0dQSU9fQ0hJUCgiR1JPVVBFIiwgMjYsIDE0KSwKLQlXOTBQOTEwX0dQSU9fQ0hJUCgiR1JPVVBGIiwgNDAsIDEwKSwKLQlXOTBQOTEwX0dQSU9fQ0hJUCgiR1JPVVBHIiwgNTAsIDE3KSwKLQlXOTBQOTEwX0dQSU9fQ0hJUCgiR1JPVVBIIiwgNjcsIDgpLAotCVc5MFA5MTBfR1BJT19DSElQKCJHUk9VUEkiLCA3NSwgMTcpLAorc3RhdGljIHN0cnVjdCBudWM5MDBfZ3Bpb19jaGlwIG51YzkwMF9ncGlvW10gPSB7CisJTlVDOTAwX0dQSU9fQ0hJUCgiR1JPVVBDIiwgMCwgMTYpLAorCU5VQzkwMF9HUElPX0NISVAoIkdST1VQRCIsIDE2LCAxMCksCisJTlVDOTAwX0dQSU9fQ0hJUCgiR1JPVVBFIiwgMjYsIDE0KSwKKwlOVUM5MDBfR1BJT19DSElQKCJHUk9VUEYiLCA0MCwgMTApLAorCU5VQzkwMF9HUElPX0NISVAoIkdST1VQRyIsIDUwLCAxNyksCisJTlVDOTAwX0dQSU9fQ0hJUCgiR1JPVVBIIiwgNjcsIDgpLAorCU5VQzkwMF9HUElPX0NISVAoIkdST1VQSSIsIDc1LCAxNyksCiB9OwogCi12b2lkIF9faW5pdCB3OTBwOTEwX2luaXRfZ3BpbyhpbnQgbnJfZ3JvdXApCit2b2lkIF9faW5pdCBudWM5MDBfaW5pdF9ncGlvKGludCBucl9ncm91cCkKIHsKIAl1bnNpZ25lZAlpOwotCXN0cnVjdCB3OTBwOTEwX2dwaW9fY2hpcCAqZ3Bpb19jaGlwOworCXN0cnVjdCBudWM5MDBfZ3Bpb19jaGlwICpncGlvX2NoaXA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfZ3JvdXA7IGkrKykgewotCQlncGlvX2NoaXAgPSAmdzkwcDkxMF9ncGlvW2ldOworCQlncGlvX2NoaXAgPSAmbnVjOTAwX2dwaW9baV07CiAJCXNwaW5fbG9ja19pbml0KCZncGlvX2NoaXAtPmdwaW9fbG9jayk7CiAJCWdwaW9fY2hpcC0+cmVnYmFzZSA9IEdQSU9fQkFTRSArIGkgKiBHUk9VUElORVJWOwogCQlncGlvY2hpcF9hZGQoJmdwaW9fY2hpcC0+Y2hpcCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCmluZGV4IGYxMGI2YTguLjUxNmQ2YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCkBAIC0yOCw0ICsyOCwyNiBAQAogI2RlZmluZSBSRUdfQ0xLRU4xCShDTEtfQkEgKyAweDI0KQogI2RlZmluZSBSRUdfQ0xLRElWMQkoQ0xLX0JBICsgMHgyOCkKIAorLyogRGVmaW5lIFBMTCBmcmVxIHNldHRpbmcgKi8KKyNkZWZpbmUgUExMX0RJU0FCTEUJCTB4MTJCNjMKKyNkZWZpbmUJUExMXzY2TUhaCQkweDJCNjMKKyNkZWZpbmUJUExMXzEwME1IWgkJMHg0RjY0CisjZGVmaW5lIFBMTF8xMjBNSFoJCTB4NEY2MworI2RlZmluZQlQTExfMTY2TUhaCQkweDQxMjQKKyNkZWZpbmUJUExMXzIwME1IWgkJMHg0RjI0CisKKy8qIERlZmluZSBBSEI6Q1BVRlJFUSByYXRpbyAqLworI2RlZmluZQlBSEJfQ1BVQ0xLXzFfMQkJMHgwMAorI2RlZmluZQlBSEJfQ1BVQ0xLXzFfMgkJMHgwMQorI2RlZmluZQlBSEJfQ1BVQ0xLXzFfNAkJMHgwMgorI2RlZmluZQlBSEJfQ1BVQ0xLXzFfOAkJMHgwMworCisvKiBEZWZpbmUgQVBCOkFIQiByYXRpbyAqLworI2RlZmluZSBBUEJfQUhCXzFfMgkJMHgwMQorI2RlZmluZSBBUEJfQUhCXzFfNAkJMHgwMgorI2RlZmluZSBBUEJfQUhCXzFfOAkJMHgwMworCisvKiBEZWZpbmUgY2xvY2sgc2tldyAqLworI2RlZmluZSBERUZBVUxUU0tFVwkJMHg0OAorCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfUkVHU19DTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3JlZ3MtZWJpLmggYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3JlZ3MtZWJpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4NDU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1lYmkuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9yZWdzLWViaS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfRUJJX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0VCSV9ICisKKy8qIEVCSSBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIEVCSV9CQQkJVzkwWDkwMF9WQV9FQkkKKyNkZWZpbmUgUkVHX0VCSUNPTgkoRUJJX0JBICsgMHgwMCkKKyNkZWZpbmUgUkVHX1JPTUNPTgkoRUJJX0JBICsgMHgwNCkKKyNkZWZpbmUgUkVHX1NEQ09ORjAJKEVCSV9CQSArIDB4MDgpCisjZGVmaW5lIFJFR19TRENPTkYxCShFQklfQkEgKyAweDBDKQorI2RlZmluZSBSRUdfU0RUSU1FMAkoRUJJX0JBICsgMHgxMCkKKyNkZWZpbmUgUkVHX1NEVElNRTEJKEVCSV9CQSArIDB4MTQpCisjZGVmaW5lIFJFR19FWFQwQ09OCShFQklfQkEgKyAweDE4KQorI2RlZmluZSBSRUdfRVhUMUNPTgkoRUJJX0JBICsgMHgxQykKKyNkZWZpbmUgUkVHX0VYVDJDT04JKEVCSV9CQSArIDB4MjApCisjZGVmaW5lIFJFR19FWFQzQ09OCShFQklfQkEgKyAweDI0KQorI2RlZmluZSBSRUdfRVhUNENPTgkoRUJJX0JBICsgMHgyOCkKKyNkZWZpbmUgUkVHX0NLU0tFVwkoRUJJX0JBICsgMHgyQykKKworI2VuZGlmIC8qICBfX0FTTV9BUkNIX1JFR1NfRUJJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdzkwcDkxMF9rZXlwYWQuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdzkwcDkxMF9rZXlwYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTY3NzhlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC93OTBwOTEwX2tleXBhZC5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX19BU01fQVJDSF9XOTBQOTEwX0tFWVBBRF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVzkwUDkxMF9LRVlQQURfSAorCisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorCitleHRlcm4gdm9pZCBtZnBfc2V0X2dyb3VwaShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCitzdHJ1Y3QgdzkwcDkxMF9rZXlwYWRfcGxhdGZvcm1fZGF0YSB7CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CisKKwl1bnNpZ25lZCBpbnQJcHJlc2NhbGU7CisJdW5zaWduZWQgaW50CWRlYm91bmNlOworfTsKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVzkwUDkxMF9LRVlQQURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2lycS5jCmluZGV4IDBiNGZjMTkuLjBjZTlkOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaXJxLmMKQEAgLTEwLDggKzEwLDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCiAgKgogICovCiAKQEAgLTI5LDkgKzI4LDExNCBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CiAKLXN0YXRpYyB2b2lkIHc5MHg5MDBfaXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3N0cnVjdCBncm91cF9pcnEgeworCXVuc2lnbmVkIGxvbmcJCWdwZW47CisJdW5zaWduZWQgaW50CQllbmFibGVkOworCXZvaWQJCQkoKmVuYWJsZSkoc3RydWN0IGdyb3VwX2lycSAqLCBpbnQgZW5hYmxlKTsKK307CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3JvdXBpcnFfbG9jayk7CisKKyNkZWZpbmUgREVGSU5FX0dST1VQKF9uYW1lLCBfY3RybGJpdCwgX251bSkJCQkJXAorc3RydWN0IGdyb3VwX2lycSBncm91cF8jI19uYW1lID0gewkJCQkJXAorCQkuZW5hYmxlCQk9IG51YzkwMF9ncm91cF9lbmFibGUsCQkJXAorCQkuZ3BlbgkJPSAoKDEgPDwgX251bSkgLSAxKSA8PCBfY3RybGJpdCwJXAorCX0KKworc3RhdGljIHZvaWQgbnVjOTAwX2dyb3VwX2VuYWJsZShzdHJ1Y3QgZ3JvdXBfaXJxICpncGlycSwgaW50IGVuYWJsZSk7CisKK3N0YXRpYyBERUZJTkVfR1JPVVAobmlycTAsIDAsIDQpOworc3RhdGljIERFRklORV9HUk9VUChuaXJxMSwgNCwgNCk7CitzdGF0aWMgREVGSU5FX0dST1VQKHVzYmgsIDgsIDIpOworc3RhdGljIERFRklORV9HUk9VUChvdHRpbWVyLCAxNiwgMyk7CitzdGF0aWMgREVGSU5FX0dST1VQKGdkbWEsIDIwLCAyKTsKK3N0YXRpYyBERUZJTkVfR1JPVVAoc2MsIDI0LCAyKTsKK3N0YXRpYyBERUZJTkVfR1JPVVAoaTJjLCAyNiwgMik7CitzdGF0aWMgREVGSU5FX0dST1VQKHBzMiwgMjgsIDIpOworCitzdGF0aWMgaW50IGdyb3VwX2lycV9lbmFibGUoc3RydWN0IGdyb3VwX2lycSAqZ3JvdXBfaXJxKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3JvdXBpcnFfbG9jaywgZmxhZ3MpOworCWlmIChncm91cF9pcnEtPmVuYWJsZWQrKyA9PSAwKQorCQkoZ3JvdXBfaXJxLT5lbmFibGUpKGdyb3VwX2lycSwgMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3JvdXBpcnFfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdyb3VwX2lycV9kaXNhYmxlKHN0cnVjdCBncm91cF9pcnEgKmdyb3VwX2lycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJV0FSTl9PTihncm91cF9pcnEtPmVuYWJsZWQgPT0gMCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3JvdXBpcnFfbG9jaywgZmxhZ3MpOworCWlmICgtLWdyb3VwX2lycS0+ZW5hYmxlZCA9PSAwKQorCQkoZ3JvdXBfaXJxLT5lbmFibGUpKGdyb3VwX2lycSwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3JvdXBpcnFfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfZ3JvdXBfZW5hYmxlKHN0cnVjdCBncm91cF9pcnEgKmdwaXJxLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCBncm91cGVuID0gZ3BpcnEtPmdwZW47CisJdW5zaWduZWQgbG9uZyByZWd2YWw7CisKKwlyZWd2YWwgPSBfX3Jhd19yZWFkbChSRUdfQUlDX0dFTik7CisKKwlpZiAoZW5hYmxlKQorCQlyZWd2YWwgfD0gZ3JvdXBlbjsKKwllbHNlCisJCXJlZ3ZhbCAmPSB+Z3JvdXBlbjsKKworCV9fcmF3X3dyaXRlbChyZWd2YWwsIFJFR19BSUNfR0VOKTsKK30KKworc3RhdGljIHZvaWQgbnVjOTAwX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGdyb3VwX2lycSAqZ3JvdXBfaXJxOworCisJZ3JvdXBfaXJxID0gTlVMTDsKKwogCV9fcmF3X3dyaXRlbCgxIDw8IGlycSwgUkVHX0FJQ19NRENSKTsKKworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSBJUlFfR1JPVVAwOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfbmlycTA7CisJCWJyZWFrOworCisJY2FzZSBJUlFfR1JPVVAxOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfbmlycTE7CisJCWJyZWFrOworCisJY2FzZSBJUlFfVVNCSDoKKwkJZ3JvdXBfaXJxID0gJmdyb3VwX3VzYmg7CisJCWJyZWFrOworCisJY2FzZSBJUlFfVF9JTlRfR1JPVVA6CisJCWdyb3VwX2lycSA9ICZncm91cF9vdHRpbWVyOworCQlicmVhazsKKworCWNhc2UgSVJRX0dETUFHUk9VUDoKKwkJZ3JvdXBfaXJxID0gJmdyb3VwX2dkbWE7CisJCWJyZWFrOworCisJY2FzZSBJUlFfU0NHUk9VUDoKKwkJZ3JvdXBfaXJxID0gJmdyb3VwX3NjOworCQlicmVhazsKKworCWNhc2UgSVJRX0kyQ0dST1VQOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfaTJjOworCQlicmVhazsKKworCWNhc2UgSVJRX1AyU0dST1VQOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfcHMyOworCQlicmVhazsKKwl9CisKKwlpZiAoZ3JvdXBfaXJxKQorCQlncm91cF9pcnFfZGlzYWJsZShncm91cF9pcnEpOwogfQogCiAvKgpAQCAtMzksMzcgKzE0Myw3MSBAQAogICogdG8gUkVHX0FJQ19FT1NDUiBmb3IgQUNLCiAgKi8KIAotc3RhdGljIHZvaWQgdzkweDkwMF9pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBudWM5MDBfaXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogewogCV9fcmF3X3dyaXRlbCgweDAxLCBSRUdfQUlDX0VPU0NSKTsKIH0KIAotc3RhdGljIHZvaWQgdzkweDkwMF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBudWM5MDBfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGxvbmcgbWFzazsKKwlzdHJ1Y3QgZ3JvdXBfaXJxICpncm91cF9pcnE7CiAKLQlpZiAoaXJxID09IElSUV9UX0lOVF9HUk9VUCkgewotCQltYXNrID0gX19yYXdfcmVhZGwoUkVHX0FJQ19HRU4pOwotCQlfX3Jhd193cml0ZWwoVElNRV9HUk9VUF9JUlEgfCBtYXNrLCBSRUdfQUlDX0dFTik7Ci0JCV9fcmF3X3dyaXRlbCgxIDw8IElSUV9UX0lOVF9HUk9VUCwgUkVHX0FJQ19NRUNSKTsKLQl9CisJZ3JvdXBfaXJxID0gTlVMTDsKKwogCV9fcmF3X3dyaXRlbCgxIDw8IGlycSwgUkVHX0FJQ19NRUNSKTsKKworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSBJUlFfR1JPVVAwOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfbmlycTA7CisJCWJyZWFrOworCisJY2FzZSBJUlFfR1JPVVAxOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfbmlycTE7CisJCWJyZWFrOworCisJY2FzZSBJUlFfVVNCSDoKKwkJZ3JvdXBfaXJxID0gJmdyb3VwX3VzYmg7CisJCWJyZWFrOworCisJY2FzZSBJUlFfVF9JTlRfR1JPVVA6CisJCWdyb3VwX2lycSA9ICZncm91cF9vdHRpbWVyOworCQlicmVhazsKKworCWNhc2UgSVJRX0dETUFHUk9VUDoKKwkJZ3JvdXBfaXJxID0gJmdyb3VwX2dkbWE7CisJCWJyZWFrOworCisJY2FzZSBJUlFfU0NHUk9VUDoKKwkJZ3JvdXBfaXJxID0gJmdyb3VwX3NjOworCQlicmVhazsKKworCWNhc2UgSVJRX0kyQ0dST1VQOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfaTJjOworCQlicmVhazsKKworCWNhc2UgSVJRX1AyU0dST1VQOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfcHMyOworCQlicmVhazsKKwl9CisKKwlpZiAoZ3JvdXBfaXJxKQorCQlncm91cF9pcnFfZW5hYmxlKGdyb3VwX2lycSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdzkweDkwMF9pcnFfY2hpcCA9IHsKLQkuYWNrCSAgID0gdzkweDkwMF9pcnFfYWNrLAotCS5tYXNrCSAgID0gdzkweDkwMF9pcnFfbWFzaywKLQkudW5tYXNrCSAgID0gdzkweDkwMF9pcnFfdW5tYXNrLAorc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBudWM5MDBfaXJxX2NoaXAgPSB7CisJLmFjawkgICA9IG51YzkwMF9pcnFfYWNrLAorCS5tYXNrCSAgID0gbnVjOTAwX2lycV9tYXNrLAorCS51bm1hc2sJICAgPSBudWM5MDBfaXJxX3VubWFzaywKIH07CiAKLXZvaWQgX19pbml0IHc5MHg5MDBfaW5pdF9pcnEodm9pZCkKK3ZvaWQgX19pbml0IG51YzkwMF9pbml0X2lycSh2b2lkKQogewogCWludCBpcnFubzsKIAogCV9fcmF3X3dyaXRlbCgweEZGRkZGRkZFLCBSRUdfQUlDX01EQ1IpOwogCiAJZm9yIChpcnFubyA9IElSUV9XRFQ7IGlycW5vIDw9IElSUV9BREM7IGlycW5vKyspIHsKLQkJc2V0X2lycV9jaGlwKGlycW5vLCAmdzkweDkwMF9pcnFfY2hpcCk7CisJCXNldF9pcnFfY2hpcChpcnFubywgJm51YzkwMF9pcnFfY2hpcCk7CiAJCXNldF9pcnFfaGFuZGxlcihpcnFubywgaGFuZGxlX2xldmVsX2lycSk7CiAJCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51YzkxMGV2Yi5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtbnVjOTEwZXZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwNWJkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51YzkxMGV2Yi5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC1udWM5MTBldmIuYworICoKKyAqIEJhc2VkIG9uIG1hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYnkgSm9uYXMgRGlldHNjaGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgIm51YzkxMC5oIgorCitzdGF0aWMgdm9pZCBfX2luaXQgbnVjOTEwZXZiX21hcF9pbyh2b2lkKQoreworCW51YzkxMF9tYXBfaW8oKTsKKwludWM5MTBfaW5pdF9jbG9ja3MoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG51YzkxMGV2Yl9pbml0KHZvaWQpCit7CisJbnVjOTEwX2JvYXJkX2luaXQoKTsKK30KKworTUFDSElORV9TVEFSVChXOTBQOTEwRVZCLCAiVzkwUDkxMEVWQiIpCisJLyogTWFpbnRhaW5lcjogV2FuIFpvbmdTaHVuICovCisJLnBoeXNfaW8JPSBXOTBYOTAwX1BBX1VBUlQsCisJLmlvX3BnX29mZnN0CT0gKCgodTMyKVc5MFg5MDBfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDAsCisJLm1hcF9pbwkJPSBudWM5MTBldmJfbWFwX2lvLAorCS5pbml0X2lycQk9IG51YzkwMF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gbnVjOTEwZXZiX2luaXQsCisJLnRpbWVyCQk9ICZudWM5MDBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtbnVjOTUwZXZiLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC1udWM5NTBldmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWY5MDNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtbnVjOTUwZXZiLmMKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51Yzk1MGV2Yi5jCisgKgorICogQmFzZWQgb24gbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYyBieSBKb25hcyBEaWV0c2NoZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSAibnVjOTUwLmgiCisKK3N0YXRpYyB2b2lkIF9faW5pdCBudWM5NTBldmJfbWFwX2lvKHZvaWQpCit7CisJbnVjOTUwX21hcF9pbygpOworCW51Yzk1MF9pbml0X2Nsb2NrcygpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbnVjOTUwZXZiX2luaXQodm9pZCkKK3sKKwludWM5NTBfYm9hcmRfaW5pdCgpOworfQorCitNQUNISU5FX1NUQVJUKFc5MFA5NTBFVkIsICJXOTBQOTUwRVZCIikKKwkvKiBNYWludGFpbmVyOiBXYW4gWm9uZ1NodW4gKi8KKwkucGh5c19pbwk9IFc5MFg5MDBfUEFfVUFSVCwKKwkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpVzkwWDkwMF9WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMCwKKwkubWFwX2lvCQk9IG51Yzk1MGV2Yl9tYXBfaW8sCisJLmluaXRfaXJxCT0gbnVjOTAwX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBudWM5NTBldmJfaW5pdCwKKwkudGltZXIJCT0gJm51YzkwMF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC1udWM5NjBldmIuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51Yzk2MGV2Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYTQ2ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC1udWM5NjBldmIuYwpAQCAtMCwwICsxLDQ0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtbnVjOTYwZXZiLmMKKyAqCisgKiBCYXNlZCBvbiBtYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jIGJ5IEpvbmFzIERpZXRzY2hlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNpbmNsdWRlICJudWM5NjAuaCIKKworc3RhdGljIHZvaWQgX19pbml0IG51Yzk2MGV2Yl9tYXBfaW8odm9pZCkKK3sKKwludWM5NjBfbWFwX2lvKCk7CisJbnVjOTYwX2luaXRfY2xvY2tzKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBudWM5NjBldmJfaW5pdCh2b2lkKQoreworCW51Yzk2MF9ib2FyZF9pbml0KCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoVzkwTjk2MEVWQiwgIlc5ME45NjBFVkIiKQorCS8qIE1haW50YWluZXI6IFdhbiBab25nU2h1biAqLworCS5waHlzX2lvCT0gVzkwWDkwMF9QQV9VQVJULAorCS5pb19wZ19vZmZzdAk9ICgoKHUzMilXOTBYOTAwX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAwLAorCS5tYXBfaW8JCT0gbnVjOTYwZXZiX21hcF9pbywKKwkuaW5pdF9pcnEJPSBudWM5MDBfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG51Yzk2MGV2Yl9pbml0LAorCS50aW1lcgkJPSAmbnVjOTAwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLXc5MHA5MTBldmIuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLXc5MHA5MTBldmIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E2MmJkMy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC13OTBwOTEwZXZiLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLXc5MHA5MTBldmIuYwotICoKLSAqIEJhc2VkIG9uIG1hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYnkgSm9uYXMgRGlldHNjaGUKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uLgotICoKLSAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jaW5jbHVkZSA8bWFjaC9yZWdzLXNlcmlhbC5oPgotI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlICJjcHUuaCIKLS8qdzkwcDkxMCBldmIgbm9yZmxhc2ggZHJpdmVyIGRhdGEgKi8KLQotI2RlZmluZSBXOTBQOTEwX0ZMQVNIX0JBU0UJMHhBMDAwMDAwMAotI2RlZmluZSBXOTBQOTEwX0ZMQVNIX1NJWkUJMHg0MDAwMDAKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHc5MHA5MTBfZmxhc2hfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUJPQkiTk9SIFBhcnRpdGlvbiAxIGZvciBrZXJuZWwgKDk2MEspIiwKLQkJLnNpemUJPQkweEYwMDAwLAotCQkub2Zmc2V0CT0JMHgxMDAwMCwKLQl9LAotCXsKLQkJLm5hbWUJPQkiTk9SIFBhcnRpdGlvbiAyIGZvciBpbWFnZSAoMU0pIiwKLQkJLnNpemUJPQkweDEwMDAwMCwKLQkJLm9mZnNldAk9CTB4MTAwMDAwLAotCX0sCi0JewotCQkubmFtZQk9CSJOT1IgUGFydGl0aW9uIDMgZm9yIHVzZXIgKDJNKSIsCi0JCS5zaXplCT0JMHgyMDAwMDAsCi0JCS5vZmZzZXQJPQkweDAwMjAwMDAwLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHc5MHA5MTBfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGgJCT0JMiwKLQkucGFydHMJCT0JdzkwcDkxMF9mbGFzaF9wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cwk9CUFSUkFZX1NJWkUodzkwcDkxMF9mbGFzaF9wYXJ0aXRpb25zKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdzkwcDkxMF9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9CVc5MFA5MTBfRkxBU0hfQkFTRSwKLQkJLmVuZAk9CVc5MFA5MTBfRkxBU0hfQkFTRSArIFc5MFA5MTBfRkxBU0hfU0laRSAtIDEsCi0JCS5mbGFncwk9CUlPUkVTT1VSQ0VfTUVNLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHc5MHA5MTBfZmxhc2hfZGV2aWNlID0gewotCS5uYW1lCQk9CSJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0JMCwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YSA9ICZ3OTBwOTEwX2ZsYXNoX2RhdGEsCi0JCQl9LAotCS5yZXNvdXJjZQk9CXc5MHA5MTBfZmxhc2hfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzCT0JQVJSQVlfU0laRSh3OTBwOTEwX2ZsYXNoX3Jlc291cmNlcyksCi19OwotCi0vKiBVU0IgRUhDSSBIb3N0IENvbnRyb2xsZXIgKi8KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3OTB4OTAwX3VzYl9laGNpX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSBXOTBYOTAwX1BBX1VTQkVIQ0lIT1NULAotCQkuZW5kICAgPSBXOTBYOTAwX1BBX1VTQkVIQ0lIT1NUICsgVzkwWDkwMF9TWl9VU0JFSENJSE9TVCAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfVVNCSCwKLQkJLmVuZCAgID0gSVJRX1VTQkgsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyB1NjQgdzkweDkwMF9kZXZpY2VfdXNiX2VoY2lfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSB3OTB4OTAwX2RldmljZV91c2JfZWhjaSA9IHsKLQkubmFtZQkJICA9ICJ3OTB4OTAwLWVoY2kiLAotCS5pZAkJICA9IC0xLAotCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHc5MHg5MDBfdXNiX2VoY2lfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQkgID0gdzkweDkwMF91c2JfZWhjaV9yZXNvdXJjZSwKLQkuZGV2ICAgICAgICAgICAgICA9IHsKLQkJLmRtYV9tYXNrID0gJnc5MHg5MDBfZGV2aWNlX3VzYl9laGNpX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTAotCX0KLX07Ci1FWFBPUlRfU1lNQk9MKHc5MHg5MDBfZGV2aWNlX3VzYl9laGNpKTsKLQotLyogVVNCIE9IQ0kgSG9zdCBDb250cm9sbGVyICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdzkweDkwMF91c2Jfb2hjaV9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gVzkwWDkwMF9QQV9VU0JPSENJSE9TVCwKLQkJLmVuZCAgID0gVzkwWDkwMF9QQV9VU0JPSENJSE9TVCArIFc5MFg5MDBfU1pfVVNCT0hDSUhPU1QgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ID0gSVJRX1VTQkgsCi0JCS5lbmQgICA9IElSUV9VU0JILAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdGF0aWMgdTY0IHc5MHg5MDBfZGV2aWNlX3VzYl9vaGNpX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7Ci1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHc5MHg5MDBfZGV2aWNlX3VzYl9vaGNpID0gewotCS5uYW1lCQkgID0gInc5MHg5MDAtb2hjaSIsCi0JLmlkCQkgID0gLTEsCi0JLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUodzkweDkwMF91c2Jfb2hjaV9yZXNvdXJjZSksCi0JLnJlc291cmNlCSAgPSB3OTB4OTAwX3VzYl9vaGNpX3Jlc291cmNlLAotCS5kZXYgICAgICAgICAgICAgID0gewotCQkuZG1hX21hc2sgPSAmdzkweDkwMF9kZXZpY2VfdXNiX29oY2lfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZlVMCi0JfQotfTsKLUVYUE9SVF9TWU1CT0wodzkweDkwMF9kZXZpY2VfdXNiX29oY2kpOwotCi0vKlRvdWNoU2NyZWVuIGNvbnRyb2xsZXIqLwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHc5MHg5MDBfdHNfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFc5MFg5MDBfUEFfQURDLAotCQkuZW5kICAgPSBXOTBYOTAwX1BBX0FEQyArIFc5MFg5MDBfU1pfQURDLTEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfQURDLAotCQkuZW5kICAgPSBJUlFfQURDLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSB3OTB4OTAwX2RldmljZV90cyA9IHsKLQkubmFtZQkJPSAidzkweDkwMC10cyIsCi0JLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHc5MHg5MDBfdHNfcmVzb3VyY2UsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHc5MHg5MDBfdHNfcmVzb3VyY2UpLAotfTsKLUVYUE9SVF9TWU1CT0wodzkweDkwMF9kZXZpY2VfdHMpOwotCi0vKiBSVEMgY29udHJvbGxlciovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdzkweDkwMF9ydGNfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFc5MFg5MDBfUEFfUlRDLAotCQkuZW5kICAgPSBXOTBYOTAwX1BBX1JUQyArIDB4ZmYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfUlRDLAotCQkuZW5kICAgPSBJUlFfUlRDLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSB3OTB4OTAwX2RldmljZV9ydGMgPSB7Ci0JLm5hbWUJCT0gInc5MHg5MDAtcnRjIiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHc5MHg5MDBfcnRjX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJPSB3OTB4OTAwX3J0Y19yZXNvdXJjZSwKLX07Ci1FWFBPUlRfU1lNQk9MKHc5MHg5MDBfZGV2aWNlX3J0Yyk7Ci0KLS8qIEtQSSBjb250cm9sbGVyKi8KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3OTB4OTAwX2twaV9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gVzkwWDkwMF9QQV9LUEksCi0JCS5lbmQgICA9IFc5MFg5MDBfUEFfS1BJICsgVzkwWDkwMF9TWl9LUEkgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ID0gSVJRX0tQSSwKLQkJLmVuZCAgID0gSVJRX0tQSSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHc5MHg5MDBfZGV2aWNlX2twaSA9IHsKLQkubmFtZQkJPSAidzkweDkwMC1rcGkiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodzkweDkwMF9rcGlfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQk9IHc5MHg5MDBfa3BpX3Jlc291cmNlLAotfTsKLUVYUE9SVF9TWU1CT0wodzkweDkwMF9kZXZpY2Vfa3BpKTsKLQotLyogVVNCIERldmljZSAoR2FkZ2V0KSovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdzkweDkwMF91c2JnYWRnZXRfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFc5MFg5MDBfUEFfVVNCREVWLAotCQkuZW5kICAgPSBXOTBYOTAwX1BBX1VTQkRFViArIFc5MFg5MDBfU1pfVVNCREVWIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IElSUV9VU0JELAotCQkuZW5kICAgPSBJUlFfVVNCRCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSB3OTB4OTAwX2RldmljZV91c2JnYWRnZXQgPSB7Ci0JLm5hbWUJCT0gInc5MHg5MDAtdXNiZ2FkZ2V0IiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHc5MHg5MDBfdXNiZ2FkZ2V0X3Jlc291cmNlKSwKLQkucmVzb3VyY2UJPSB3OTB4OTAwX3VzYmdhZGdldF9yZXNvdXJjZSwKLX07Ci1FWFBPUlRfU1lNQk9MKHc5MHg5MDBfZGV2aWNlX3VzYmdhZGdldCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdzkwcDkxMF9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewotfTsKLQotLypIZXJlIHNob3VsZCBiZSB5b3VyIGV2YiByZXNvdXJzZSxzdWNoIGFzIExDRCovCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp3OTBwOTEwZXZiX2RldltdIF9faW5pdGRhdGEgPSB7Ci0JJnc5MHA5MTBfc2VyaWFsX2RldmljZSwKLQkmdzkwcDkxMF9mbGFzaF9kZXZpY2UsCi0JJnc5MHg5MDBfZGV2aWNlX3VzYl9laGNpLAotCSZ3OTB4OTAwX2RldmljZV91c2Jfb2hjaSwKLQkmdzkweDkwMF9kZXZpY2VfdHMsCi0JJnc5MHg5MDBfZGV2aWNlX3J0YywKLQkmdzkweDkwMF9kZXZpY2Vfa3BpLAotCSZ3OTB4OTAwX2RldmljZV91c2JnYWRnZXQsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgdzkwcDkxMGV2Yl9tYXBfaW8odm9pZCkKLXsKLQl3OTBwOTEwX21hcF9pbyh3OTBwOTEwX2lvZGVzYywgQVJSQVlfU0laRSh3OTBwOTEwX2lvZGVzYykpOwotCXc5MHA5MTBfaW5pdF9jbG9ja3MoKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHc5MHA5MTBldmJfaW5pdCh2b2lkKQotewotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHc5MHA5MTBldmJfZGV2LCBBUlJBWV9TSVpFKHc5MHA5MTBldmJfZGV2KSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoVzkwUDkxMEVWQiwgIlc5MFA5MTBFVkIiKQotCS8qIE1haW50YWluZXI6IFdhbiBab25nU2h1biAqLwotCS5waHlzX2lvCT0gVzkwWDkwMF9QQV9VQVJULAotCS5pb19wZ19vZmZzdAk9ICgoKHUzMilXOTBYOTAwX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSAwLAotCS5tYXBfaW8JCT0gdzkwcDkxMGV2Yl9tYXBfaW8sCi0JLmluaXRfaXJxCT0gdzkweDkwMF9pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lCT0gdzkwcDkxMGV2Yl9pbml0LAotCS50aW1lcgkJPSAmdzkweDkwMF90aW1lciwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWZwLXc5MHA5MTAuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tZnAtdzkwcDkxMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzUyMGZlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tZnAtdzkwcDkxMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWZwLXc5MHA5MTAuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KLSAqCi0gKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0jZGVmaW5lIFJFR19NRlNFTAkoVzkwWDkwMF9WQV9HQ1IgKyAweEMpCi0KLSNkZWZpbmUgR1BTRUxGCQkoMHgwMSA8PCAxKQotCi0jZGVmaW5lIEdQU0VMQwkJKDB4MDMgPDwgMikKLSNkZWZpbmUgRU5LUEkJCSgweDAyIDw8IDIpCi0jZGVmaW5lIEVOTkFORAkJKDB4MDEgPDwgMikKLQotI2RlZmluZSBHUFNFTEVJMAkoMHgwMSA8PCAyNikKLSNkZWZpbmUgR1BTRUxFSTEJKDB4MDEgPDwgMjcpCi0KLXN0YXRpYyBERUNMQVJFX01VVEVYKG1mcF9zZW0pOwotCi12b2lkIG1mcF9zZXRfZ3JvdXBmKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBsb25nIG1mcGVuOwotCWNvbnN0IGNoYXIgKmRldl9pZDsKLQotCUJVR19PTighZGV2KTsKLQotCWRvd24oJm1mcF9zZW0pOwotCi0JZGV2X2lkID0gZGV2X25hbWUoZGV2KTsKLQotCW1mcGVuID0gX19yYXdfcmVhZGwoUkVHX01GU0VMKTsKLQotCWlmIChzdHJjbXAoZGV2X2lkLCAidzkwcDkxMC1lbWMiKSA9PSAwKQotCQltZnBlbiB8PSBHUFNFTEY7LyplbmFibGUgbWFjKi8KLQllbHNlCi0JCW1mcGVuICY9IH5HUFNFTEY7LypHUElPRls5OjBdKi8KLQotCV9fcmF3X3dyaXRlbChtZnBlbiwgUkVHX01GU0VMKTsKLQotCXVwKCZtZnBfc2VtKTsKLX0KLUVYUE9SVF9TWU1CT0wobWZwX3NldF9ncm91cGYpOwotCi12b2lkIG1mcF9zZXRfZ3JvdXBjKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBsb25nIG1mcGVuOwotCWNvbnN0IGNoYXIgKmRldl9pZDsKLQotCUJVR19PTighZGV2KTsKLQotCWRvd24oJm1mcF9zZW0pOwotCi0JZGV2X2lkID0gZGV2X25hbWUoZGV2KTsKLQotCW1mcGVuID0gX19yYXdfcmVhZGwoUkVHX01GU0VMKTsKLQotCWlmIChzdHJjbXAoZGV2X2lkLCAidzkwcDkxMC1sY2QiKSA9PSAwKQotCQltZnBlbiB8PSBHUFNFTEM7LyplbmFibGUgbGNkKi8KLQllbHNlIGlmIChzdHJjbXAoZGV2X2lkLCAidzkwcDkxMC1rcGkiKSA9PSAwKSB7Ci0JCQltZnBlbiAmPSAofkdQU0VMQyk7LyplbmFibGUga3BpKi8KLQkJCW1mcGVuIHw9IEVOS1BJOwotCQl9IGVsc2UgaWYgKHN0cmNtcChkZXZfaWQsICJ3OTBwOTEwLW5hbmQiKSA9PSAwKSB7Ci0JCQkJbWZwZW4gJj0gKH5HUFNFTEMpOy8qZW5hYmxlIG5hbmQqLwotCQkJCW1mcGVuIHw9IEVOTkFORDsKLQkJCX0gZWxzZQotCQkJCW1mcGVuICY9ICh+R1BTRUxDKTsvKkdQSU9DWzE0OjBdKi8KLQotCV9fcmF3X3dyaXRlbChtZnBlbiwgUkVHX01GU0VMKTsKLQotCXVwKCZtZnBfc2VtKTsKLX0KLUVYUE9SVF9TWU1CT0wobWZwX3NldF9ncm91cGMpOwotCi12b2lkIG1mcF9zZXRfZ3JvdXBpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGdwaW8pCi17Ci0JdW5zaWduZWQgbG9uZyBtZnBlbjsKLQljb25zdCBjaGFyICpkZXZfaWQ7Ci0KLQlCVUdfT04oIWRldik7Ci0KLQlkb3duKCZtZnBfc2VtKTsKLQotCWRldl9pZCA9IGRldl9uYW1lKGRldik7Ci0KLQltZnBlbiA9IF9fcmF3X3JlYWRsKFJFR19NRlNFTCk7Ci0KLQlpZiAoc3RyY21wKGRldl9pZCwgInc5MHA5MTAtd2RvZyIpID09IDApCi0JCW1mcGVuIHw9IEdQU0VMRUkxOy8qZW5hYmxlIHdkb2cqLwotCQllbHNlIGlmIChzdHJjbXAoZGV2X2lkLCAidzkwcDkxMC1hdGFwaSIpID09IDApCi0JCQltZnBlbiB8PSBHUFNFTEVJMDsvKmVuYWJsZSBhdGFwaSovCi0KLQlfX3Jhd193cml0ZWwobWZwZW4sIFJFR19NRlNFTCk7Ci0KLQl1cCgmbWZwX3NlbSk7Ci19Ci1FWFBPUlRfU1lNQk9MKG1mcF9zZXRfZ3JvdXBpKTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21mcC5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21mcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0N2RjOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWZwLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWZwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2RlZmluZSBSRUdfTUZTRUwJKFc5MFg5MDBfVkFfR0NSICsgMHhDKQorCisjZGVmaW5lIEdQU0VMRgkJKDB4MDEgPDwgMSkKKworI2RlZmluZSBHUFNFTEMJCSgweDAzIDw8IDIpCisjZGVmaW5lIEVOS1BJCQkoMHgwMiA8PCAyKQorI2RlZmluZSBFTk5BTkQJCSgweDAxIDw8IDIpCisKKyNkZWZpbmUgR1BTRUxFSTAJKDB4MDEgPDwgMjYpCisjZGVmaW5lIEdQU0VMRUkxCSgweDAxIDw8IDI3KQorCisjZGVmaW5lIEdQSU9HMFRPMQkoMHgwMyA8PCAxNCkKKyNkZWZpbmUgR1BJT0cyVE8zCSgweDAzIDw8IDE2KQorI2RlZmluZSBFTlNQSQkJKDB4MGEgPDwgMTQpCisjZGVmaW5lIEVOSTJDMAkJKDB4MDEgPDwgMTQpCisjZGVmaW5lIEVOSTJDMQkJKDB4MDEgPDwgMTYpCisKK3N0YXRpYyBERUZJTkVfTVVURVgobWZwX211dGV4KTsKKwordm9pZCBtZnBfc2V0X2dyb3VwZihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBtZnBlbjsKKwljb25zdCBjaGFyICpkZXZfaWQ7CisKKwlCVUdfT04oIWRldik7CisKKwltdXRleF9sb2NrKCZtZnBfbXV0ZXgpOworCisJZGV2X2lkID0gZGV2X25hbWUoZGV2KTsKKworCW1mcGVuID0gX19yYXdfcmVhZGwoUkVHX01GU0VMKTsKKworCWlmIChzdHJjbXAoZGV2X2lkLCAibnVjOTAwLWVtYyIpID09IDApCisJCW1mcGVuIHw9IEdQU0VMRjsvKmVuYWJsZSBtYWMqLworCWVsc2UKKwkJbWZwZW4gJj0gfkdQU0VMRjsvKkdQSU9GWzk6MF0qLworCisJX19yYXdfd3JpdGVsKG1mcGVuLCBSRUdfTUZTRUwpOworCisJbXV0ZXhfdW5sb2NrKCZtZnBfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChtZnBfc2V0X2dyb3VwZik7CisKK3ZvaWQgbWZwX3NldF9ncm91cGMoc3RydWN0IGRldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgbWZwZW47CisJY29uc3QgY2hhciAqZGV2X2lkOworCisJQlVHX09OKCFkZXYpOworCisJbXV0ZXhfbG9jaygmbWZwX211dGV4KTsKKworCWRldl9pZCA9IGRldl9uYW1lKGRldik7CisKKwltZnBlbiA9IF9fcmF3X3JlYWRsKFJFR19NRlNFTCk7CisKKwlpZiAoc3RyY21wKGRldl9pZCwgIm51YzkwMC1sY2QiKSA9PSAwKQorCQltZnBlbiB8PSBHUFNFTEM7LyplbmFibGUgbGNkKi8KKwllbHNlIGlmIChzdHJjbXAoZGV2X2lkLCAibnVjOTAwLWtwaSIpID09IDApIHsKKwkJbWZwZW4gJj0gKH5HUFNFTEMpOy8qZW5hYmxlIGtwaSovCisJCW1mcGVuIHw9IEVOS1BJOworCX0gZWxzZSBpZiAoc3RyY21wKGRldl9pZCwgIm51YzkwMC1uYW5kIikgPT0gMCkgeworCQltZnBlbiAmPSAofkdQU0VMQyk7LyplbmFibGUgbmFuZCovCisJCW1mcGVuIHw9IEVOTkFORDsKKwl9IGVsc2UKKwkJbWZwZW4gJj0gKH5HUFNFTEMpOy8qR1BJT0NbMTQ6MF0qLworCisJX19yYXdfd3JpdGVsKG1mcGVuLCBSRUdfTUZTRUwpOworCisJbXV0ZXhfdW5sb2NrKCZtZnBfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChtZnBfc2V0X2dyb3VwYyk7CisKK3ZvaWQgbWZwX3NldF9ncm91cGkoc3RydWN0IGRldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgbWZwZW47CisJY29uc3QgY2hhciAqZGV2X2lkOworCisJQlVHX09OKCFkZXYpOworCisJbXV0ZXhfbG9jaygmbWZwX211dGV4KTsKKworCWRldl9pZCA9IGRldl9uYW1lKGRldik7CisKKwltZnBlbiA9IF9fcmF3X3JlYWRsKFJFR19NRlNFTCk7CisKKwltZnBlbiAmPSB+R1BTRUxFSTE7LypkZWZhdWx0IGdwaW8xNiovCisKKwlpZiAoc3RyY21wKGRldl9pZCwgIm51YzkwMC13ZG9nIikgPT0gMCkKKwkJbWZwZW4gfD0gR1BTRUxFSTE7LyplbmFibGUgd2RvZyovCisJZWxzZSBpZiAoc3RyY21wKGRldl9pZCwgIm51YzkwMC1hdGFwaSIpID09IDApCisJCW1mcGVuIHw9IEdQU0VMRUkwOy8qZW5hYmxlIGF0YXBpKi8KKwllbHNlIGlmIChzdHJjbXAoZGV2X2lkLCAibnVjOTAwLWtleXBhZCIpID09IDApCisJCW1mcGVuICY9IH5HUFNFTEVJMDsvKmVuYWJsZSBrZXlwYWQqLworCisJX19yYXdfd3JpdGVsKG1mcGVuLCBSRUdfTUZTRUwpOworCisJbXV0ZXhfdW5sb2NrKCZtZnBfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChtZnBfc2V0X2dyb3VwaSk7CisKK3ZvaWQgbWZwX3NldF9ncm91cGcoc3RydWN0IGRldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgbWZwZW47CisJY29uc3QgY2hhciAqZGV2X2lkOworCisJQlVHX09OKCFkZXYpOworCisJbXV0ZXhfbG9jaygmbWZwX211dGV4KTsKKworCWRldl9pZCA9IGRldl9uYW1lKGRldik7CisKKwltZnBlbiA9IF9fcmF3X3JlYWRsKFJFR19NRlNFTCk7CisKKwlpZiAoc3RyY21wKGRldl9pZCwgIm51YzkwMC1zcGkiKSA9PSAwKSB7CisJCW1mcGVuICY9IH4oR1BJT0cwVE8xIHwgR1BJT0cyVE8zKTsKKwkJbWZwZW4gfD0gRU5TUEk7LyplbmFibGUgc3BpKi8KKwl9IGVsc2UgaWYgKHN0cmNtcChkZXZfaWQsICJudWM5MDAtaTJjMCIpID09IDApIHsKKwkJbWZwZW4gJj0gfihHUElPRzBUTzEpOworCQltZnBlbiB8PSBFTkkyQzA7LyplbmFibGUgaTJjMCovCisJfSBlbHNlIGlmIChzdHJjbXAoZGV2X2lkLCAibnVjOTAwLWkyYzEiKSA9PSAwKSB7CisJCW1mcGVuICY9IH4oR1BJT0cyVE8zKTsKKwkJbWZwZW4gfD0gRU5JMkMxOy8qZW5hYmxlIGkyYzEqLworCX0gZWxzZSB7CisJCW1mcGVuICY9IH4oR1BJT0cwVE8xIHwgR1BJT0cyVE8zKTsvKkdQSU9HWzM6MF0qLworCX0KKworCV9fcmF3X3dyaXRlbChtZnBlbiwgUkVHX01GU0VMKTsKKworCW11dGV4X3VubG9jaygmbWZwX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0wobWZwX3NldF9ncm91cGcpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTEwLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU2ZjAzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5MTAuYwpAQCAtMCwwICsxLDYwIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251YzkxMC5jCisgKgorICogQmFzZWQgb24gbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYyBieSBCZW4gRG9va3MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTnV2b3RvbiBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogTlVDOTEwIGNwdSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCisvKiBkZWZpbmUgc3BlY2lmaWMgQ1BVIHBsYXRmb3JtIGRldmljZSAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbnVjOTEwX2RldltdIF9faW5pdGRhdGEgPSB7CisJJm51YzkwMF9kZXZpY2VfdHMsCisJJm51YzkwMF9kZXZpY2VfcnRjLAorfTsKKworLyogZGVmaW5lIHNwZWNpZmljIENQVSBwbGF0Zm9ybSBpbyBtYXAgKi8KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBudWM5MTBldmJfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKKwlJT0RFU0NfRU5UKFVTQkVIQ0lIT1NUKSwKKwlJT0RFU0NfRU5UKFVTQk9IQ0lIT1NUKSwKKwlJT0RFU0NfRU5UKEtQSSksCisJSU9ERVNDX0VOVChVU0JERVYpLAorCUlPREVTQ19FTlQoQURDKSwKK307CisKKy8qSW5pdCBOVUM5MTAgZXZiIGlvKi8KKwordm9pZCBfX2luaXQgbnVjOTEwX21hcF9pbyh2b2lkKQoreworCW51YzkwMF9tYXBfaW8obnVjOTEwZXZiX2lvZGVzYywgQVJSQVlfU0laRShudWM5MTBldmJfaW9kZXNjKSk7Cit9CisKKy8qSW5pdCBOVUM5MTAgY2xvY2sqLworCit2b2lkIF9faW5pdCBudWM5MTBfaW5pdF9jbG9ja3Modm9pZCkKK3sKKwludWM5MDBfaW5pdF9jbG9ja3MoKTsKK30KKworLypJbml0IE5VQzkxMCBib2FyZCBpbmZvKi8KKwordm9pZCBfX2luaXQgbnVjOTEwX2JvYXJkX2luaXQodm9pZCkKK3sKKwludWM5MDBfYm9hcmRfaW5pdChudWM5MTBfZGV2LCBBUlJBWV9TSVpFKG51YzkxMF9kZXYpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5MTAuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5MTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2U5YmE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251YzkxMC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTEwLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiBjb3Jwb3JhdGlvbgorICoKKyAqIEhlYWRlciBmaWxlIGZvciBOVUM5MDAgQ1BVIHN1cHBvcnQKKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworc3RydWN0IG1hcF9kZXNjOworc3RydWN0IHN5c190aW1lcjsKKworLyogY29yZSBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMgKi8KKworZXh0ZXJuIHZvaWQgbnVjOTAwX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbnVjOTAwX3RpbWVyOworCisvKiBleHRlcm4gZmlsZSBmcm9tIG51YzkxMC5jICovCisKK2V4dGVybiB2b2lkIG51YzkxMF9ib2FyZF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbnVjOTEwX2luaXRfY2xvY2tzKHZvaWQpOworZXh0ZXJuIHZvaWQgbnVjOTEwX21hcF9pbyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NTAuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDk1MDgxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk1MC5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTUwLmMKKyAqCisgKiBCYXNlZCBvbiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jIGJ5IEJlbiBEb29rcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIE5VQzk1MCBjcHUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSAiY3B1LmgiCisKKy8qIGRlZmluZSBzcGVjaWZpYyBDUFUgcGxhdGZvcm0gZGV2aWNlICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpudWM5NTBfZGV2W10gX19pbml0ZGF0YSA9IHsKKwkmbnVjOTAwX2RldmljZV9rcGksCisJJm51YzkwMF9kZXZpY2VfZm1pLAorfTsKKworLyogZGVmaW5lIHNwZWNpZmljIENQVSBwbGF0Zm9ybSBpbyBtYXAgKi8KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBudWM5NTBldmJfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKK307CisKKy8qSW5pdCBOVUM5NTAgZXZiIGlvKi8KKwordm9pZCBfX2luaXQgbnVjOTUwX21hcF9pbyh2b2lkKQoreworCW51YzkwMF9tYXBfaW8obnVjOTUwZXZiX2lvZGVzYywgQVJSQVlfU0laRShudWM5NTBldmJfaW9kZXNjKSk7Cit9CisKKy8qSW5pdCBOVUM5NTAgY2xvY2sqLworCit2b2lkIF9faW5pdCBudWM5NTBfaW5pdF9jbG9ja3Modm9pZCkKK3sKKwludWM5MDBfaW5pdF9jbG9ja3MoKTsKK30KKworLypJbml0IE5VQzk1MCBib2FyZCBpbmZvKi8KKwordm9pZCBfX2luaXQgbnVjOTUwX2JvYXJkX2luaXQodm9pZCkKK3sKKwludWM5MDBfYm9hcmRfaW5pdChudWM5NTBfZGV2LCBBUlJBWV9TSVpFKG51Yzk1MF9kZXYpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NTAuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGExMTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk1MC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTUwLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiBjb3Jwb3JhdGlvbgorICoKKyAqIEhlYWRlciBmaWxlIGZvciBOVUM5MDAgQ1BVIHN1cHBvcnQKKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworc3RydWN0IG1hcF9kZXNjOworc3RydWN0IHN5c190aW1lcjsKKworLyogY29yZSBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMgKi8KKworZXh0ZXJuIHZvaWQgbnVjOTAwX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbnVjOTAwX3RpbWVyOworCisvKiBleHRlcm4gZmlsZSBmcm9tIG51Yzk1MC5jICovCisKK2V4dGVybiB2b2lkIG51Yzk1MF9ib2FyZF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbnVjOTUwX2luaXRfY2xvY2tzKHZvaWQpOworZXh0ZXJuIHZvaWQgbnVjOTUwX21hcF9pbyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NjAuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODUxYTNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk2MC5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTYwLmMKKyAqCisgKiBCYXNlZCBvbiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jIGJ5IEJlbiBEb29rcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIE5VQzk2MCBjcHUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSAiY3B1LmgiCisKKy8qIGRlZmluZSBzcGVjaWZpYyBDUFUgcGxhdGZvcm0gZGV2aWNlICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpudWM5NjBfZGV2W10gX19pbml0ZGF0YSA9IHsKKwkmbnVjOTAwX2RldmljZV9rcGksCisJJm51YzkwMF9kZXZpY2VfZm1pLAorfTsKKworLyogZGVmaW5lIHNwZWNpZmljIENQVSBwbGF0Zm9ybSBpbyBtYXAgKi8KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBudWM5NjBldmJfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKK307CisKKy8qSW5pdCBOVUM5NjAgZXZiIGlvKi8KKwordm9pZCBfX2luaXQgbnVjOTYwX21hcF9pbyh2b2lkKQoreworCW51YzkwMF9tYXBfaW8obnVjOTYwZXZiX2lvZGVzYywgQVJSQVlfU0laRShudWM5NjBldmJfaW9kZXNjKSk7Cit9CisKKy8qSW5pdCBOVUM5NjAgY2xvY2sqLworCit2b2lkIF9faW5pdCBudWM5NjBfaW5pdF9jbG9ja3Modm9pZCkKK3sKKwludWM5MDBfaW5pdF9jbG9ja3MoKTsKK30KKworLypJbml0IE5VQzk2MCBib2FyZCBpbmZvKi8KKwordm9pZCBfX2luaXQgbnVjOTYwX2JvYXJkX2luaXQodm9pZCkKK3sKKwludWM5MDBfYm9hcmRfaW5pdChudWM5NjBfZGV2LCBBUlJBWV9TSVpFKG51Yzk2MF9kZXYpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NjAuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGMwN2NiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk2MC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTYwLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiBjb3Jwb3JhdGlvbgorICoKKyAqIEhlYWRlciBmaWxlIGZvciBOVUM5MDAgQ1BVIHN1cHBvcnQKKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworc3RydWN0IG1hcF9kZXNjOworc3RydWN0IHN5c190aW1lcjsKKworLyogY29yZSBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMgKi8KKworZXh0ZXJuIHZvaWQgbnVjOTAwX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbnVjOTAwX3RpbWVyOworCisvKiBleHRlcm4gZmlsZSBmcm9tIG51Yzk2MC5jICovCisKK2V4dGVybiB2b2lkIG51Yzk2MF9ib2FyZF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbnVjOTYwX2luaXRfY2xvY2tzKHZvaWQpOworZXh0ZXJuIHZvaWQgbnVjOTYwX21hcF9pbyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdGltZS5jCmluZGV4IGJjYzgzOGYuLjQxMjhhZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3RpbWUuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBCYXNlZCBvbiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvdGltZS5jIGJ5IEJlbiBEb29rcwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwOSBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgpAQCAtMjMsNiArMjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KQEAgLTMxLDQ5ICszMywxNTAgQEAKICNpbmNsdWRlIDxtYWNoL21hcC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy10aW1lci5oPgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB3OTB4OTAwX2dldHRpbWVvZmZzZXQodm9pZCkKKyNkZWZpbmUgUkVTRVRJTlQJMHgxZgorI2RlZmluZSBQRVJJT0QJCSgweDAxIDw8IDI3KQorI2RlZmluZSBPTkVTSE9UCQkoMHgwMCA8PCAyNykKKyNkZWZpbmUgQ09VTlRFTgkJKDB4MDEgPDwgMzApCisjZGVmaW5lIElOVEVOCQkoMHgwMSA8PCAyOSkKKworI2RlZmluZSBUSUNLU19QRVJfU0VDCTEwMAorI2RlZmluZSBQUkVTQ0FMRQkweDYzIC8qIERpdmlkZXIgPSBwcmVzY2FsZSArIDEgKi8KKwordW5zaWduZWQgaW50IHRpbWVyMF9sb2FkOworCitzdGF0aWMgdm9pZCBudWM5MDBfY2xvY2tldmVudF9zZXRtb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjbGspCiB7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IF9fcmF3X3JlYWRsKFJFR19UQ1NSMCk7CisJdmFsICY9IH4oMHgwMyA8PCAyNyk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlfX3Jhd193cml0ZWwodGltZXIwX2xvYWQsIFJFR19USUNSMCk7CisJCXZhbCB8PSAoUEVSSU9EIHwgQ09VTlRFTiB8IElOVEVOIHwgUFJFU0NBTEUpOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJdmFsIHw9IChPTkVTSE9UIHwgQ09VTlRFTiB8IElOVEVOIHwgUFJFU0NBTEUpOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CisJCWJyZWFrOworCX0KKworCV9fcmF3X3dyaXRlbCh2YWwsIFJFR19UQ1NSMCk7Cit9CisKK3N0YXRpYyBpbnQgbnVjOTAwX2Nsb2NrZXZlbnRfc2V0bmV4dGV2ZW50KHVuc2lnbmVkIGxvbmcgZXZ0LAorCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjbGspCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCV9fcmF3X3dyaXRlbChldnQsIFJFR19USUNSMCk7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChSRUdfVENTUjApOworCXZhbCB8PSAoQ09VTlRFTiB8IElOVEVOIHwgUFJFU0NBTEUpOworCV9fcmF3X3dyaXRlbCh2YWwsIFJFR19UQ1NSMCk7CisKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgbnVjOTAwX2Nsb2NrZXZlbnRfZGV2aWNlID0geworCS5uYW1lCQk9ICJudWM5MDAtdGltZXIwIiwKKwkuc2hpZnQJCT0gMzIsCisJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAorCS5zZXRfbW9kZQk9IG51YzkwMF9jbG9ja2V2ZW50X3NldG1vZGUsCisJLnNldF9uZXh0X2V2ZW50CT0gbnVjOTAwX2Nsb2NrZXZlbnRfc2V0bmV4dGV2ZW50LAorCS5yYXRpbmcJCT0gMzAwLAorfTsKKwogLypJUlEgaGFuZGxlciBmb3IgdGhlIHRpbWVyKi8KIAotc3RhdGljIGlycXJldHVybl90Ci13OTB4OTAwX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgbnVjOTAwX3RpbWVyMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXRpbWVyX3RpY2soKTsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmbnVjOTAwX2Nsb2NrZXZlbnRfZGV2aWNlOworCiAJX19yYXdfd3JpdGVsKDB4MDEsIFJFR19USVNSKTsgLyogY2xlYXIgVElGMCAqLworCisJZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiB3OTB4OTAwX3RpbWVyX2lycSA9IHsKLQkubmFtZQkJPSAidzkweDkwMCBUaW1lciBUaWNrIiwKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG51YzkwMF90aW1lcjBfaXJxID0geworCS5uYW1lCQk9ICJudWM5MDAtdGltZXIwIiwKIAkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCi0JLmhhbmRsZXIJPSB3OTB4OTAwX3RpbWVyX2ludGVycnVwdCwKKwkuaGFuZGxlcgk9IG51YzkwMF90aW1lcjBfaW50ZXJydXB0LAogfTsKIAotLypTZXQgdXAgdGltZXIgcmVnLiovCi0KLXN0YXRpYyB2b2lkIHc5MHg5MDBfdGltZXJfc2V0dXAodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBudWM5MDBfY2xvY2tldmVudHNfaW5pdCh1bnNpZ25lZCBpbnQgcmF0ZSkKIHsKLQlfX3Jhd193cml0ZWwoMCwgUkVHX1RDU1IwKTsKLQlfX3Jhd193cml0ZWwoMCwgUkVHX1RDU1IxKTsKLQlfX3Jhd193cml0ZWwoMCwgUkVHX1RDU1IyKTsKLQlfX3Jhd193cml0ZWwoMCwgUkVHX1RDU1IzKTsKLQlfX3Jhd193cml0ZWwoMCwgUkVHX1RDU1I0KTsKLQlfX3Jhd193cml0ZWwoMHgxRiwgUkVHX1RJU1IpOwotCV9fcmF3X3dyaXRlbCgxNTAwMDAwMC8oMTAwICogMTAwKSwgUkVHX1RJQ1IwKTsKLQlfX3Jhd193cml0ZWwoMHg2ODAwMDA2MywgUkVHX1RDU1IwKTsKKwludWM5MDBfY2xvY2tldmVudF9kZXZpY2UubXVsdCA9IGRpdl9zYyhyYXRlLCBOU0VDX1BFUl9TRUMsCisJCQkJCW51YzkwMF9jbG9ja2V2ZW50X2RldmljZS5zaGlmdCk7CisJbnVjOTAwX2Nsb2NrZXZlbnRfZGV2aWNlLm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHhmZmZmZmZmZiwKKwkJCQkJJm51YzkwMF9jbG9ja2V2ZW50X2RldmljZSk7CisJbnVjOTAwX2Nsb2NrZXZlbnRfZGV2aWNlLm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHhmLAorCQkJCQkmbnVjOTAwX2Nsb2NrZXZlbnRfZGV2aWNlKTsKKwludWM5MDBfY2xvY2tldmVudF9kZXZpY2UuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CisKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJm51YzkwMF9jbG9ja2V2ZW50X2RldmljZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCB3OTB4OTAwX3RpbWVyX2luaXQodm9pZCkKK3N0YXRpYyBjeWNsZV90IG51YzkwMF9nZXRfY3ljbGVzKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7Ci0JdzkweDkwMF90aW1lcl9zZXR1cCgpOwotCXNldHVwX2lycShJUlFfVElNRVIwLCAmdzkweDkwMF90aW1lcl9pcnEpOworCXJldHVybiB+X19yYXdfcmVhZGwoUkVHX1REUjEpOwogfQogCi1zdHJ1Y3Qgc3lzX3RpbWVyIHc5MHg5MDBfdGltZXIgPSB7Ci0JLmluaXQJCT0gdzkweDkwMF90aW1lcl9pbml0LAotCS5vZmZzZXQJCT0gdzkweDkwMF9nZXR0aW1lb2Zmc2V0LAotCS5yZXN1bWUJCT0gdzkweDkwMF90aW1lcl9zZXR1cAorc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9udWM5MDAgPSB7CisJLm5hbWUJPSAibnVjOTAwLXRpbWVyMSIsCisJLnJhdGluZwk9IDIwMCwKKwkucmVhZAk9IG51YzkwMF9nZXRfY3ljbGVzLAorCS5tYXNrCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCisJLnNoaWZ0CT0gMjAsCisJLmZsYWdzCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbnVjOTAwX2Nsb2Nrc291cmNlX2luaXQodW5zaWduZWQgaW50IHJhdGUpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBSRUdfVElDUjEpOworCisJdmFsID0gX19yYXdfcmVhZGwoUkVHX1RDU1IxKTsKKwl2YWwgfD0gKENPVU5URU4gfCBQRVJJT0QpOworCV9fcmF3X3dyaXRlbCh2YWwsIFJFR19UQ1NSMSk7CisKKwljbG9ja3NvdXJjZV9udWM5MDAubXVsdCA9CisJCWNsb2Nrc291cmNlX2toejJtdWx0KChyYXRlIC8gMTAwMCksIGNsb2Nrc291cmNlX251YzkwMC5zaGlmdCk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX251YzkwMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBudWM5MDBfdGltZXJfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNrX2V4dCA9IGNsa19nZXQoTlVMTCwgImV4dCIpOworCXVuc2lnbmVkIGludAlyYXRlOworCisJQlVHX09OKElTX0VSUihja19leHQpKTsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2tfZXh0KTsKKwljbGtfcHV0KGNrX2V4dCk7CisJcmF0ZSA9IHJhdGUgLyAoUFJFU0NBTEUgKyAweDAxKTsKKworCSAvKiBzZXQgYSBrbm93biBzdGF0ZSAqLworCV9fcmF3X3dyaXRlbCgweDAwLCBSRUdfVENTUjApOworCV9fcmF3X3dyaXRlbCgweDAwLCBSRUdfVENTUjEpOworCV9fcmF3X3dyaXRlbChSRVNFVElOVCwgUkVHX1RJU1IpOworCXRpbWVyMF9sb2FkID0gKHJhdGUgLyBUSUNLU19QRVJfU0VDKTsKKworCXNldHVwX2lycShJUlFfVElNRVIwLCAmbnVjOTAwX3RpbWVyMF9pcnEpOworCisJbnVjOTAwX2Nsb2Nrc291cmNlX2luaXQocmF0ZSk7CisJbnVjOTAwX2Nsb2NrZXZlbnRzX2luaXQocmF0ZSk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgbnVjOTAwX3RpbWVyID0geworCS5pbml0CQk9IG51YzkwMF90aW1lcl9pbml0LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC93OTBwOTEwLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdzkwcDkxMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzk3ZTQ5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC93OTBwOTEwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkweDkwMC93OTBwOTEwLmMKLSAqCi0gKiBCYXNlZCBvbiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jIGJ5IEJlbiBEb29rcwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCi0gKgotICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgotICoKLSAqIFc5MFA5MTAgY3B1IHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3Mtc2VyaWFsLmg+Ci0KLSNpbmNsdWRlICJjcHUuaCIKLSNpbmNsdWRlICJjbG9jay5oIgotCi0vKiBJbml0aWFsIElPIG1hcHBpbmdzICovCi0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdzkwcDkxMF9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewotCUlPREVTQ19FTlQoSVJRKSwKLQlJT0RFU0NfRU5UKEdDUiksCi0JSU9ERVNDX0VOVChVQVJUKSwKLQlJT0RFU0NfRU5UKFRJTUVSKSwKLQlJT0RFU0NfRU5UKEVCSSksCi0JSU9ERVNDX0VOVChVU0JFSENJSE9TVCksCi0JSU9ERVNDX0VOVChVU0JPSENJSE9TVCksCi0JSU9ERVNDX0VOVChBREMpLAotCUlPREVTQ19FTlQoUlRDKSwKLQlJT0RFU0NfRU5UKEtQSSksCi0JSU9ERVNDX0VOVChVU0JERVYpLAotCS8qSU9ERVNDX0VOVChMQ0QpLCovCi19OwotCi0vKiBJbml0aWFsIGNsb2NrIGRlY2xhcmF0aW9ucy4gKi8KLXN0YXRpYyBERUZJTkVfQ0xLKGxjZCwgMCk7Ci1zdGF0aWMgREVGSU5FX0NMSyhhdWRpbywgMSk7Ci1zdGF0aWMgREVGSU5FX0NMSyhmbWksIDQpOwotc3RhdGljIERFRklORV9DTEsoZG1hYywgNSk7Ci1zdGF0aWMgREVGSU5FX0NMSyhhdGFwaSwgNik7Ci1zdGF0aWMgREVGSU5FX0NMSyhlbWMsIDcpOwotc3RhdGljIERFRklORV9DTEsodXNiZCwgOCk7Ci1zdGF0aWMgREVGSU5FX0NMSyh1c2JoLCA5KTsKLXN0YXRpYyBERUZJTkVfQ0xLKGcyZCwgMTApOzsKLXN0YXRpYyBERUZJTkVfQ0xLKHB3bSwgMTgpOwotc3RhdGljIERFRklORV9DTEsocHMyLCAyNCk7Ci1zdGF0aWMgREVGSU5FX0NMSyhrcGksIDI1KTsKLXN0YXRpYyBERUZJTkVfQ0xLKHdkdCwgMjYpOwotc3RhdGljIERFRklORV9DTEsoZ2RtYSwgMjcpOwotc3RhdGljIERFRklORV9DTEsoYWRjLCAyOCk7Ci1zdGF0aWMgREVGSU5FX0NMSyh1c2ksIDI5KTsKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHc5MHA5MTBfY2xrcmVnc1tdID0gewotCURFRl9DTEtMT09LKCZjbGtfbGNkLCAidzkwcDkxMC1sY2QiLCBOVUxMKSwKLQlERUZfQ0xLTE9PSygmY2xrX2F1ZGlvLCAidzkwcDkxMC1hdWRpbyIsIE5VTEwpLAotCURFRl9DTEtMT09LKCZjbGtfZm1pLCAidzkwcDkxMC1mbWkiLCBOVUxMKSwKLQlERUZfQ0xLTE9PSygmY2xrX2RtYWMsICJ3OTBwOTEwLWRtYWMiLCBOVUxMKSwKLQlERUZfQ0xLTE9PSygmY2xrX2F0YXBpLCAidzkwcDkxMC1hdGFwaSIsIE5VTEwpLAotCURFRl9DTEtMT09LKCZjbGtfZW1jLCAidzkwcDkxMC1lbWMiLCBOVUxMKSwKLQlERUZfQ0xLTE9PSygmY2xrX3VzYmQsICJ3OTBwOTEwLXVzYmQiLCBOVUxMKSwKLQlERUZfQ0xLTE9PSygmY2xrX3VzYmgsICJ3OTBwOTEwLXVzYmgiLCBOVUxMKSwKLQlERUZfQ0xLTE9PSygmY2xrX2cyZCwgInc5MHA5MTAtZzJkIiwgTlVMTCksCi0JREVGX0NMS0xPT0soJmNsa19wd20sICJ3OTBwOTEwLXB3bSIsIE5VTEwpLAotCURFRl9DTEtMT09LKCZjbGtfcHMyLCAidzkwcDkxMC1wczIiLCBOVUxMKSwKLQlERUZfQ0xLTE9PSygmY2xrX2twaSwgInc5MHA5MTAta3BpIiwgTlVMTCksCi0JREVGX0NMS0xPT0soJmNsa193ZHQsICJ3OTBwOTEwLXdkdCIsIE5VTEwpLAotCURFRl9DTEtMT09LKCZjbGtfZ2RtYSwgInc5MHA5MTAtZ2RtYSIsIE5VTEwpLAotCURFRl9DTEtMT09LKCZjbGtfYWRjLCAidzkwcDkxMC1hZGMiLCBOVUxMKSwKLQlERUZfQ0xLTE9PSygmY2xrX3VzaSwgInc5MHA5MTAtdXNpIiwgTlVMTCksCi19OwotCi0vKiBJbml0aWFsIHNlcmlhbCBwbGF0Zm9ybSBkYXRhICovCi0KLXN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCB3OTBwOTEwX3VhcnRfZGF0YVtdID0gewotCVc5MFg5MDBfODI1MFBPUlQoVUFSVDApLAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSB3OTBwOTEwX3NlcmlhbF9kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKLQkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKLQkuZGV2CQkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gdzkwcDkxMF91YXJ0X2RhdGEsCi0JfSwKLX07Ci0KLS8qSW5pdCBXOTBQOTEwIGV2YiBpbyovCi0KLXZvaWQgX19pbml0IHc5MHA5MTBfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgbWFjaF9zaXplKQotewotCXVuc2lnbmVkIGxvbmcgaWRjb2RlID0gMHgwOwotCi0JaW90YWJsZV9pbml0KHc5MHA5MTBfaW9kZXNjLCBBUlJBWV9TSVpFKHc5MHA5MTBfaW9kZXNjKSk7Ci0KLQlpZGNvZGUgPSBfX3Jhd19yZWFkbChXOTBYOTAwUERJRCk7Ci0JaWYgKGlkY29kZSAhPSBXOTBQOTEwX0NQVUlEKQotCQlwcmludGsoS0VSTl9FUlIgIkNQVSB0eXBlIDB4JTA4bHggaXMgbm90IFc5MFA5MTBcbiIsIGlkY29kZSk7Ci19Ci0KLS8qSW5pdCBXOTBQOTEwIGNsb2NrKi8KLQotdm9pZCBfX2luaXQgdzkwcDkxMF9pbml0X2Nsb2Nrcyh2b2lkKQotewotCWNsa3NfcmVnaXN0ZXIodzkwcDkxMF9jbGtyZWdzLCBBUlJBWV9TSVpFKHc5MHA5MTBfY2xrcmVncykpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCB3OTBwOTEwX2luaXRfY3B1KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHc5MHg5MDBfYXJjaF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHc5MHA5MTBfaW5pdF9jcHUoKTsKLX0KLWFyY2hfaW5pdGNhbGwodzkweDkwMF9hcmNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggODNjMDI1ZS4uNWZlNTk1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC03NTgsNyArNzU4LDcgQEAKIGNvbmZpZyBDQUNIRV9MMlgwCiAJYm9vbCAiRW5hYmxlIHRoZSBMMngwIG91dGVyIGNhY2hlIGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBSRUFMVklFV19FQl9BUk0xMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMTc2IHx8IFwKLQkJICAgUkVBTFZJRVdfRUJfQTlNUCB8fCBBUkNIX01YMzUgfHwgQVJDSF9NWDMxIHx8IE1BQ0hfUkVBTFZJRVdfUEJYCisJCSAgIFJFQUxWSUVXX0VCX0E5TVAgfHwgQVJDSF9NWDM1IHx8IEFSQ0hfTVgzMSB8fCBNQUNIX1JFQUxWSUVXX1BCWCB8fCBBUkNIX05PTUFESUsKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT1VURVJfQ0FDSEUKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYyBiL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCmluZGV4IDAzY2QyN2QuLmIyNzBkNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCisrKyBiL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCkBAIC0xNTksNyArMTU5LDkgQEAKIAogI2RlZmluZSBfX2dldDhfdW5hbGlnbmVkX2NoZWNrKGlucyx2YWwsYWRkcixlcnIpCVwKIAlfX2FzbV9fKAkJCQkJXAotCSIxOgkiaW5zIgklMSwgWyUyXSwgIzFcbiIJCQlcCisgQVJNKAkiMToJImlucyIJJTEsIFslMl0sICMxXG4iCSkJCVwKKyBUSFVNQigJIjE6CSJpbnMiCSUxLCBbJTJdXG4iCSkJCVwKKyBUSFVNQigJIglhZGQJJTIsICUyLCAjMVxuIgkpCQlcCiAJIjI6XG4iCQkJCQkJXAogCSIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgkJXAogCSIJLmFsaWduCTJcbiIJCQkJXApAQCAtMjE1LDcgKzIxNyw5IEBACiAJZG8gewkJCQkJCQlcCiAJCXVuc2lnbmVkIGludCBlcnIgPSAwLCB2ID0gdmFsLCBhID0gYWRkcjsJXAogCQlfX2FzbV9fKCBGSVJTVF9CWVRFXzE2CQkJCVwKLQkJIjE6CSJpbnMiCSUxLCBbJTJdLCAjMVxuIgkJCVwKKwkgQVJNKAkiMToJImlucyIJJTEsIFslMl0sICMxXG4iCSkJCVwKKwkgVEhVTUIoCSIxOgkiaW5zIgklMSwgWyUyXVxuIgkpCQlcCisJIFRIVU1CKAkiCWFkZAklMiwgJTIsICMxXG4iCSkJCVwKIAkJIgltb3YJJTEsICUxLCAiTkVYVF9CWVRFIlxuIgkJXAogCQkiMjoJImlucyIJJTEsIFslMl1cbiIJCQlcCiAJCSIzOlxuIgkJCQkJCVwKQEAgLTI0NSwxMSArMjQ5LDE3IEBACiAJZG8gewkJCQkJCQlcCiAJCXVuc2lnbmVkIGludCBlcnIgPSAwLCB2ID0gdmFsLCBhID0gYWRkcjsJXAogCQlfX2FzbV9fKCBGSVJTVF9CWVRFXzMyCQkJCVwKLQkJIjE6CSJpbnMiCSUxLCBbJTJdLCAjMVxuIgkJCVwKKwkgQVJNKAkiMToJImlucyIJJTEsIFslMl0sICMxXG4iCSkJCVwKKwkgVEhVTUIoCSIxOgkiaW5zIgklMSwgWyUyXVxuIgkpCQlcCisJIFRIVU1CKAkiCWFkZAklMiwgJTIsICMxXG4iCSkJCVwKIAkJIgltb3YJJTEsICUxLCAiTkVYVF9CWVRFIlxuIgkJXAotCQkiMjoJImlucyIJJTEsIFslMl0sICMxXG4iCQkJXAorCSBBUk0oCSIyOgkiaW5zIgklMSwgWyUyXSwgIzFcbiIJKQkJXAorCSBUSFVNQigJIjI6CSJpbnMiCSUxLCBbJTJdXG4iCSkJCVwKKwkgVEhVTUIoCSIJYWRkCSUyLCAlMiwgIzFcbiIJKQkJXAogCQkiCW1vdgklMSwgJTEsICJORVhUX0JZVEUiXG4iCQlcCi0JCSIzOgkiaW5zIgklMSwgWyUyXSwgIzFcbiIJCQlcCisJIEFSTSgJIjM6CSJpbnMiCSUxLCBbJTJdLCAjMVxuIgkpCQlcCisJIFRIVU1CKAkiMzoJImlucyIJJTEsIFslMl1cbiIJKQkJXAorCSBUSFVNQigJIglhZGQJJTIsICUyLCAjMVxuIgkpCQlcCiAJCSIJbW92CSUxLCAlMSwgIk5FWFRfQllURSJcbiIJCVwKIAkJIjQ6CSJpbnMiCSUxLCBbJTJdXG4iCQkJXAogCQkiNTpcbiIJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUwppbmRleCBiZTkzZmYwLi5iZGEwZWMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKQEAgLTIxLDcgKzIxLDcgQEAKICAqCiAgKglGbHVzaCB0aGUgd2hvbGUgRC1jYWNoZS4KICAqCi0gKglDb3JydXB0ZWQgcmVnaXN0ZXJzOiByMC1yNSwgcjcsIHI5LXIxMQorICoJQ29ycnVwdGVkIHJlZ2lzdGVyczogcjAtcjcsIHI5LXIxMSAocjYgb25seSBpbiBUaHVtYiBtb2RlKQogICoKICAqCS0gbW0gICAgLSBtbV9zdHJ1Y3QgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCiAgKi8KQEAgLTUxLDggKzUxLDEyIEBACiBsb29wMjoKIAltb3YJcjksIHI0CQkJCUAgY3JlYXRlIHdvcmtpbmcgY29weSBvZiBtYXggd2F5IHNpemUKIGxvb3AzOgotCW9ycglyMTEsIHIxMCwgcjksIGxzbCByNQkJQCBmYWN0b3Igd2F5IGFuZCBjYWNoZSBudW1iZXIgaW50byByMTEKLQlvcnIJcjExLCByMTEsIHI3LCBsc2wgcjIJCUAgZmFjdG9yIGluZGV4IG51bWJlciBpbnRvIHIxMQorIEFSTSgJb3JyCXIxMSwgcjEwLCByOSwgbHNsIHI1CSkJQCBmYWN0b3Igd2F5IGFuZCBjYWNoZSBudW1iZXIgaW50byByMTEKKyBUSFVNQigJbHNsCXI2LCByOSwgcjUJCSkKKyBUSFVNQigJb3JyCXIxMSwgcjEwLCByNgkJKQlAIGZhY3RvciB3YXkgYW5kIGNhY2hlIG51bWJlciBpbnRvIHIxMQorIEFSTSgJb3JyCXIxMSwgcjExLCByNywgbHNsIHIyCSkJQCBmYWN0b3IgaW5kZXggbnVtYmVyIGludG8gcjExCisgVEhVTUIoCWxzbAlyNiwgcjcsIHIyCQkpCisgVEhVTUIoCW9ycglyMTEsIHIxMSwgcjYJCSkJQCBmYWN0b3IgaW5kZXggbnVtYmVyIGludG8gcjExCiAJbWNyCXAxNSwgMCwgcjExLCBjNywgYzE0LCAyCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBieSBzZXQvd2F5CiAJc3VicwlyOSwgcjksICMxCQkJQCBkZWNyZW1lbnQgdGhlIHdheQogCWJnZQlsb29wMwpAQCAtODIsMTEgKzg2LDEzIEBACiAgKgogICovCiBFTlRSWSh2N19mbHVzaF9rZXJuX2NhY2hlX2FsbCkKLQlzdG1mZAlzcCEsIHtyNC1yNSwgcjcsIHI5LXIxMSwgbHJ9CisgQVJNKAlzdG1mZAlzcCEsIHtyNC1yNSwgcjcsIHI5LXIxMSwgbHJ9CSkKKyBUSFVNQigJc3RtZmQJc3AhLCB7cjQtcjcsIHI5LXIxMSwgbHJ9CSkKIAlibAl2N19mbHVzaF9kY2FjaGVfYWxsCiAJbW92CXIwLCAjMAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCUAgSStCVEIgY2FjaGUgaW52YWxpZGF0ZQotCWxkbWZkCXNwISwge3I0LXI1LCByNywgcjktcjExLCBscn0KKyBBUk0oCWxkbWZkCXNwISwge3I0LXI1LCByNywgcjktcjExLCBscn0JKQorIFRIVU1CKAlsZG1mZAlzcCEsIHtyNC1yNywgcjktcjExLCBscn0JKQogCW1vdglwYywgbHIKIEVORFBST0ModjdfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCmluZGV4IDUxMGMxNzkuLmIzMDkyNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwpAQCAtMzYsNyArMzYsMzQgQEAKICNkZWZpbmUgQ09OU0lTVEVOVF9QVEVfSU5ERVgoeCkgKCgodW5zaWduZWQgbG9uZykoeCkgLSBDT05TSVNURU5UX0JBU0UpID4+IFBHRElSX1NISUZUKQogI2RlZmluZSBOVU1fQ09OU0lTVEVOVF9QVEVTIChDT05TSVNURU5UX0RNQV9TSVpFID4+IFBHRElSX1NISUZUKQogCitzdGF0aWMgdTY0IGdldF9jb2hlcmVudF9kbWFfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJdTY0IG1hc2sgPSBJU0FfRE1BX1RIUkVTSE9MRDsKIAorCWlmIChkZXYpIHsKKwkJbWFzayA9IGRldi0+Y29oZXJlbnRfZG1hX21hc2s7CisKKwkJLyoKKwkJICogU2FuaXR5IGNoZWNrIHRoZSBETUEgbWFzayAtIGl0IG11c3QgYmUgbm9uLXplcm8sIGFuZAorCQkgKiBtdXN0IGJlIGFibGUgdG8gYmUgc2F0aXNmaWVkIGJ5IGEgRE1BIGFsbG9jYXRpb24uCisJCSAqLworCQlpZiAobWFzayA9PSAwKSB7CisJCQlkZXZfd2FybihkZXYsICJjb2hlcmVudCBETUEgbWFzayBpcyB1bnNldFxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmICgofm1hc2spICYgSVNBX0RNQV9USFJFU0hPTEQpIHsKKwkJCWRldl93YXJuKGRldiwgImNvaGVyZW50IERNQSBtYXNrICUjbGx4IGlzIHNtYWxsZXIgIgorCQkJCSAidGhhbiBzeXN0ZW0gR0ZQX0RNQSBtYXNrICUjbGx4XG4iLAorCQkJCSBtYXNrLCAodW5zaWduZWQgbG9uZyBsb25nKUlTQV9ETUFfVEhSRVNIT0xEKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIG1hc2s7Cit9CisKKyNpZmRlZiBDT05GSUdfTU1VCiAvKgogICogVGhlc2UgYXJlIHRoZSBwYWdlIHRhYmxlcyAoMk1CIGVhY2gpIGNvdmVyaW5nIHVuY2FjaGVkLCBETUEgY29uc2lzdGVudCBhbGxvY2F0aW9ucwogICovCkBAIC0xNTIsNyArMTc5LDggQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3QgYXJtX3ZtX3JlZ2lvbiAqYzsKIAl1bnNpZ25lZCBsb25nIG9yZGVyOwotCXU2NCBtYXNrID0gSVNBX0RNQV9USFJFU0hPTEQsIGxpbWl0OworCXU2NCBtYXNrID0gZ2V0X2NvaGVyZW50X2RtYV9tYXNrKGRldik7CisJdTY0IGxpbWl0OwogCiAJaWYgKCFjb25zaXN0ZW50X3B0ZVswXSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBub3QgaW5pdGlhbGlzZWRcbiIsIF9fZnVuY19fKTsKQEAgLTE2MCwyNSArMTg4LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKGRldikgewotCQltYXNrID0gZGV2LT5jb2hlcmVudF9kbWFfbWFzazsKLQotCQkvKgotCQkgKiBTYW5pdHkgY2hlY2sgdGhlIERNQSBtYXNrIC0gaXQgbXVzdCBiZSBub24temVybywgYW5kCi0JCSAqIG11c3QgYmUgYWJsZSB0byBiZSBzYXRpc2ZpZWQgYnkgYSBETUEgYWxsb2NhdGlvbi4KLQkJICovCi0JCWlmIChtYXNrID09IDApIHsKLQkJCWRldl93YXJuKGRldiwgImNvaGVyZW50IERNQSBtYXNrIGlzIHVuc2V0XG4iKTsKLQkJCWdvdG8gbm9fcGFnZTsKLQkJfQotCi0JCWlmICgofm1hc2spICYgSVNBX0RNQV9USFJFU0hPTEQpIHsKLQkJCWRldl93YXJuKGRldiwgImNvaGVyZW50IERNQSBtYXNrICUjbGx4IGlzIHNtYWxsZXIgIgotCQkJCSAidGhhbiBzeXN0ZW0gR0ZQX0RNQSBtYXNrICUjbGx4XG4iLAotCQkJCSBtYXNrLCAodW5zaWduZWQgbG9uZyBsb25nKUlTQV9ETUFfVEhSRVNIT0xEKTsKLQkJCWdvdG8gbm9fcGFnZTsKLQkJfQotCX0KKwlpZiAoIW1hc2spCisJCWdvdG8gbm9fcGFnZTsKIAogCS8qCiAJICogU2FuaXR5IGNoZWNrIHRoZSBhbGxvY2F0aW9uIHNpemUuCkBAIC0yNjcsNiArMjc4LDMxIEBACiAJKmhhbmRsZSA9IH4wOwogCXJldHVybiBOVUxMOwogfQorI2Vsc2UJLyogIUNPTkZJR19NTVUgKi8KK3N0YXRpYyB2b2lkICoKK19fZG1hX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmhhbmRsZSwgZ2ZwX3QgZ2ZwLAorCSAgICBwZ3Byb3RfdCBwcm90KQoreworCXZvaWQgKnZpcnQ7CisJdTY0IG1hc2sgPSBnZXRfY29oZXJlbnRfZG1hX21hc2soZGV2KTsKKworCWlmICghbWFzaykKKwkJZ290byBlcnJvcjsKKworCWlmIChtYXNrICE9IDB4ZmZmZmZmZmYpCisJCWdmcCB8PSBHRlBfRE1BOworCXZpcnQgPSBrbWFsbG9jKHNpemUsIGdmcCk7CisJaWYgKCF2aXJ0KQorCQlnb3RvIGVycm9yOworCisJKmhhbmRsZSA9ICB2aXJ0X3RvX2RtYShkZXYsIHZpcnQpOworCXJldHVybiB2aXJ0OworCitlcnJvcjoKKwkqaGFuZGxlID0gfjA7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYJLyogQ09ORklHX01NVSAqLwogCiAvKgogICogQWxsb2NhdGUgRE1BLWNvaGVyZW50IG1lbW9yeSBzcGFjZSBhbmQgcmV0dXJuIGJvdGggdGhlIGtlcm5lbCByZW1hcHBlZApAQCAtMzExLDkgKzM0NywxMCBAQAogc3RhdGljIGludCBkbWFfbW1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgICAgdm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplKQogeworCWludCByZXQgPSAtRU5YSU87CisjaWZkZWYgQ09ORklHX01NVQogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVzZXJfc2l6ZSwga2Vybl9zaXplOwogCXN0cnVjdCBhcm1fdm1fcmVnaW9uICpjOwotCWludCByZXQgPSAtRU5YSU87CiAKIAl1c2VyX3NpemUgPSAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOwogCkBAIC0zMzQsNiArMzcxLDcgQEAKIAkJCQkJICAgICAgdm1hLT52bV9wYWdlX3Byb3QpOwogCQl9CiAJfQorI2VuZGlmCS8qIENPTkZJR19NTVUgKi8KIAogCXJldHVybiByZXQ7CiB9CkBAIC0zNTgsNiArMzk2LDcgQEAKICAqIGZyZWUgYSBwYWdlIGFzIGRlZmluZWQgYnkgdGhlIGFib3ZlIG1hcHBpbmcuCiAgKiBNdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkLgogICovCisjaWZkZWYgQ09ORklHX01NVQogdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBoYW5kbGUpCiB7CiAJc3RydWN0IGFybV92bV9yZWdpb24gKmM7CkBAIC00NDQsNiArNDgzLDE0IEBACiAJICAgICAgIF9fZnVuY19fLCBjcHVfYWRkcik7CiAJZHVtcF9zdGFjaygpOwogfQorI2Vsc2UJLyogIUNPTkZJR19NTVUgKi8KK3ZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgaGFuZGxlKQoreworCWlmIChkbWFfcmVsZWFzZV9mcm9tX2NvaGVyZW50KGRldiwgZ2V0X29yZGVyKHNpemUpLCBjcHVfYWRkcikpCisJCXJldHVybjsKKwlrZnJlZShjcHVfYWRkcik7Cit9CisjZW5kaWYJLyogQ09ORklHX01NVSAqLwogRVhQT1JUX1NZTUJPTChkbWFfZnJlZV9jb2hlcmVudCk7CiAKIC8qCkBAIC00NTEsMTAgKzQ5OCwxMiBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBjb25zaXN0ZW50X2luaXQodm9pZCkKIHsKKwlpbnQgcmV0ID0gMDsKKyNpZmRlZiBDT05GSUdfTU1VCiAJcGdkX3QgKnBnZDsKIAlwbWRfdCAqcG1kOwogCXB0ZV90ICpwdGU7Ci0JaW50IHJldCA9IDAsIGkgPSAwOworCWludCBpID0gMDsKIAl1MzIgYmFzZSA9IENPTlNJU1RFTlRfQkFTRTsKIAogCWRvIHsKQEAgLTQ3Nyw2ICs1MjYsNyBAQAogCQljb25zaXN0ZW50X3B0ZVtpKytdID0gcHRlOwogCQliYXNlICs9ICgxIDw8IFBHRElSX1NISUZUKTsKIAl9IHdoaWxlIChiYXNlIDwgQ09OU0lTVEVOVF9FTkQpOworI2VuZGlmCS8qICFDT05GSUdfTU1VICovCiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKaW5kZXggNmZkY2JiNy4uY2M4ODI5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQuYworKysgYi9hcmNoL2FybS9tbS9mYXVsdC5jCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTIzLDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImZhdWx0LmgiCiAKKyNpZmRlZiBDT05GSUdfTU1VCiAKICNpZmRlZiBDT05GSUdfS1BST0JFUwogc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBmc3IpCkBAIC05Nyw2ICsxMDAsMTAgQEAKIAogCXByaW50aygiXG4iKTsKIH0KKyNlbHNlCQkJCQkvKiBDT05GSUdfTU1VICovCit2b2lkIHNob3dfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7IH0KKyNlbmRpZgkJCQkJLyogQ09ORklHX01NVSAqLwogCiAvKgogICogT29wcy4gIFRoZSBrZXJuZWwgdHJpZWQgdG8gYWNjZXNzIHNvbWUgcGFnZSB0aGF0IHdhc24ndCBwcmVzZW50LgpAQCAtMTcxLDYgKzE3OCw3IEBACiAJCV9fZG9fa2VybmVsX2ZhdWx0KG1tLCBhZGRyLCBmc3IsIHJlZ3MpOwogfQogCisjaWZkZWYgQ09ORklHX01NVQogI2RlZmluZSBWTV9GQVVMVF9CQURNQVAJCTB4MDEwMDAwCiAjZGVmaW5lIFZNX0ZBVUxUX0JBREFDQ0VTUwkweDAyMDAwMAogCkBAIC0zMjIsNiArMzMwLDEzIEBACiAJX19kb19rZXJuZWxfZmF1bHQobW0sIGFkZHIsIGZzciwgcmVncyk7CiAJcmV0dXJuIDA7CiB9CisjZWxzZQkJCQkJLyogQ09ORklHX01NVSAqLworc3RhdGljIGludAorZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiAwOworfQorI2VuZGlmCQkJCQkvKiBDT05GSUdfTU1VICovCiAKIC8qCiAgKiBGaXJzdCBMZXZlbCBUcmFuc2xhdGlvbiBGYXVsdCBIYW5kbGVyCkBAIC0zNDAsNiArMzU1LDcgQEAKICAqIGludGVycnVwdCBvciBhIGNyaXRpY2FsIHJlZ2lvbiwgYW5kIHNob3VsZCBvbmx5IGNvcHkgdGhlIGluZm9ybWF0aW9uCiAgKiBmcm9tIHRoZSBtYXN0ZXIgcGFnZSB0YWJsZSwgbm90aGluZyBtb3JlLgogICovCisjaWZkZWYgQ09ORklHX01NVQogc3RhdGljIGludCBfX2twcm9iZXMKIGRvX3RyYW5zbGF0aW9uX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwKIAkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTM3OCw2ICszOTQsMTQgQEAKIAlkb19iYWRfYXJlYShhZGRyLCBmc3IsIHJlZ3MpOwogCXJldHVybiAwOwogfQorI2Vsc2UJCQkJCS8qIENPTkZJR19NTVUgKi8KK3N0YXRpYyBpbnQKK2RvX3RyYW5zbGF0aW9uX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwKKwkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgkJCQkJLyogQ09ORklHX01NVSAqLwogCiAvKgogICogU29tZSBzZWN0aW9uIHBlcm1pc3Npb24gZmF1bHRzIG5lZWQgdG8gYmUgaGFuZGxlZCBncmFjZWZ1bGx5LgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmx1c2guYyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKaW5kZXggYzA3MjIyZS4uNTc1ZjNhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmx1c2guYworKysgYi9hcmNoL2FybS9tbS9mbHVzaC5jCkBAIC0xNDQsNyArMTQ0LDE0IEBACiAJICogcGFnZS4gIFRoaXMgZW5zdXJlcyB0aGF0IGRhdGEgaW4gdGhlIHBoeXNpY2FsIHBhZ2UgaXMgbXV0dWFsbHkKIAkgKiBjb2hlcmVudCB3aXRoIHRoZSBrZXJuZWxzIG1hcHBpbmcuCiAJICovCi0JX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2VfYWRkcmVzcyhwYWdlKSk7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkvKgorCSAqIGttYXBfYXRvbWljKCkgZG9lc24ndCBzZXQgdGhlIHBhZ2UgdmlydHVhbCBhZGRyZXNzLCBhbmQKKwkgKiBrdW5tYXBfYXRvbWljKCkgdGFrZXMgY2FyZSBvZiBjYWNoZSBmbHVzaGluZyBhbHJlYWR5LgorCSAqLworCWlmIChwYWdlX2FkZHJlc3MocGFnZSkpCisjZW5kaWYKKwkJX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2VfYWRkcmVzcyhwYWdlKSk7CiAKIAkvKgogCSAqIElmIHRoaXMgaXMgYSBwYWdlIGNhY2hlIHBhZ2UsIGFuZCB3ZSBoYXZlIGFuIGFsaWFzaW5nIFZJUFQgY2FjaGUsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9oaWdobWVtLmMgYi9hcmNoL2FybS9tbS9oaWdobWVtLmMKaW5kZXggYTM0OTU0ZC4uNzNjYWU1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaGlnaG1lbS5jCisrKyBiL2FyY2gvYXJtL21tL2hpZ2htZW0uYwpAQCAtNDAsMTEgKzQwLDE2IEBACiB7CiAJdW5zaWduZWQgaW50IGlkeDsKIAl1bnNpZ25lZCBsb25nIHZhZGRyOworCXZvaWQgKmttYXA7CiAKIAlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCiAJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CiAKKwlrbWFwID0ga21hcF9oaWdoX2dldChwYWdlKTsKKwlpZiAoa21hcCkKKwkJcmV0dXJuIGttYXA7CisKIAlpZHggPSB0eXBlICsgS01fVFlQRV9OUiAqIHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl2YWRkciA9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpOwogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCkBAIC04MCw2ICs4NSw5IEBACiAjZWxzZQogCQkodm9pZCkgaWR4OyAgLyogdG8ga2lsbCBhIHdhcm5pbmcgKi8KICNlbmRpZgorCX0gZWxzZSBpZiAodmFkZHIgPj0gUEtNQVBfQUREUigwKSAmJiB2YWRkciA8IFBLTUFQX0FERFIoTEFTVF9QS01BUCkpIHsKKwkJLyogdGhpcyBhZGRyZXNzIHdhcyBvYnRhaW5lZCB0aHJvdWdoIGttYXBfaGlnaF9nZXQoKSAqLworCQlrdW5tYXBfaGlnaChwdGVfcGFnZShwa21hcF9wYWdlX3RhYmxlW1BLTUFQX05SKHZhZGRyKV0pKTsKIAl9CiAJcGFnZWZhdWx0X2VuYWJsZSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDNhNzI3OWMuLmVhMzYxODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTM0OSwxMiArMzUwLDQzIEBACiAJZnJlZV9hcmVhX2luaXRfbm9kZShub2RlLCB6b25lX3NpemUsIG1pbiwgemhvbGVfc2l6ZSk7CiB9CiAKKyNpZm5kZWYgQ09ORklHX1NQQVJTRU1FTQoraW50IHBmbl92YWxpZCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlzdHJ1Y3QgbWVtaW5mbyAqbWkgPSAmbWVtaW5mbzsKKwl1bnNpZ25lZCBpbnQgbGVmdCA9IDAsIHJpZ2h0ID0gbWktPm5yX2JhbmtzOworCisJZG8geworCQl1bnNpZ25lZCBpbnQgbWlkID0gKHJpZ2h0ICsgbGVmdCkgLyAyOworCQlzdHJ1Y3QgbWVtYmFuayAqYmFuayA9ICZtaS0+YmFua1ttaWRdOworCisJCWlmIChwZm4gPCBiYW5rX3Bmbl9zdGFydChiYW5rKSkKKwkJCXJpZ2h0ID0gbWlkOworCQllbHNlIGlmIChwZm4gPj0gYmFua19wZm5fZW5kKGJhbmspKQorCQkJbGVmdCA9IG1pZCArIDE7CisJCWVsc2UKKwkJCXJldHVybiAxOworCX0gd2hpbGUgKGxlZnQgPCByaWdodCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHBmbl92YWxpZCk7CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgbWVtaW5mb19jbXAoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworCWNvbnN0IHN0cnVjdCBtZW1iYW5rICphID0gX2EsICpiID0gX2I7CisJbG9uZyBjbXAgPSBiYW5rX3Bmbl9zdGFydChhKSAtIGJhbmtfcGZuX3N0YXJ0KGIpOworCXJldHVybiBjbXAgPCAwID8gLTEgOiBjbXAgPiAwID8gMSA6IDA7Cit9CisKIHZvaWQgX19pbml0IGJvb3RtZW1faW5pdCh2b2lkKQogewogCXN0cnVjdCBtZW1pbmZvICptaSA9ICZtZW1pbmZvOwogCXVuc2lnbmVkIGxvbmcgbWluLCBtYXhfbG93LCBtYXhfaGlnaDsKIAlpbnQgbm9kZSwgaW5pdHJkX25vZGU7CiAKKwlzb3J0KCZtaS0+YmFuaywgbWktPm5yX2JhbmtzLCBzaXplb2YobWktPmJhbmtbMF0pLCBtZW1pbmZvX2NtcCwgTlVMTCk7CisKIAkvKgogCSAqIExvY2F0ZSB3aGljaCBub2RlIGNvbnRhaW5zIHRoZSByYW1kaXNrIGltYWdlLCBpZiBhbnkuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9ub21tdS5jIGIvYXJjaC9hcm0vbW0vbm9tbXUuYwppbmRleCBhZDdiYWNjLi45MDA4MTFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9ub21tdS5jCisrKyBiL2FyY2gvYXJtL21tL25vbW11LmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCiAjaW5jbHVkZSAibW0uaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtbWFjcm9zLlMgYi9hcmNoL2FybS9tbS9wcm9jLW1hY3Jvcy5TCmluZGV4IDU0YjFmNzIuLjdkNjNiZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtbWFjcm9zLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1tYWNyb3MuUwpAQCAtNzcsMTkgKzc3LDE1IEBACiAgKiBTYW5pdHkgY2hlY2sgdGhlIFBURSBjb25maWd1cmF0aW9uIGZvciB0aGUgY29kZSBiZWxvdyAtIHdoaWNoIG1ha2VzCiAgKiBjZXJ0YWluIGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGVzZSBiaXRzIGFyZSBsYXllZCBvdXQuCiAgKi8KKyNpZmRlZiBDT05GSUdfTU1VCiAjaWYgTF9QVEVfU0hBUkVEICE9IFBURV9FWFRfU0hBUkVECiAjZXJyb3IgUFRFIHNoYXJlZCBiaXQgbWlzbWF0Y2gKICNlbmRpZgotI2lmIExfUFRFX0JVRkZFUkFCTEUgIT0gUFRFX0JVRkZFUkFCTEUKLSNlcnJvciBQVEUgYnVmZmVyYWJsZSBiaXQgbWlzbWF0Y2gKLSNlbmRpZgotI2lmIExfUFRFX0NBQ0hFQUJMRSAhPSBQVEVfQ0FDSEVBQkxFCi0jZXJyb3IgUFRFIGNhY2hlYWJsZSBiaXQgbWlzbWF0Y2gKLSNlbmRpZgogI2lmIChMX1BURV9FWEVDK0xfUFRFX1VTRVIrTF9QVEVfV1JJVEUrTF9QVEVfRElSVFkrTF9QVEVfWU9VTkcrXAogICAgICBMX1BURV9GSUxFK0xfUFRFX1BSRVNFTlQpID4gTF9QVEVfU0hBUkVECiAjZXJyb3IgSW52YWxpZCBMaW51eCBQVEUgYml0IHNldHRpbmdzCiAjZW5kaWYKKyNlbmRpZgkvKiBDT05GSUdfTU1VICovCiAKIC8qCiAgKiBUaGUgQVJNdjYgYW5kIEFSTXY3IHNldF9wdGVfZXh0IHRyYW5zbGF0aW9uIGZ1bmN0aW9uLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCmluZGV4IDE4MGEwOGQuLmYzZmExYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKQEAgLTEyNyw3ICsxMjcsOSBAQAogICovCiBFTlRSWShjcHVfdjdfc2V0X3B0ZV9leHQpCiAjaWZkZWYgQ09ORklHX01NVQotCXN0cglyMSwgW3IwXSwgIy0yMDQ4CQlAIGxpbnV4IHZlcnNpb24KKyBBUk0oCXN0cglyMSwgW3IwXSwgIy0yMDQ4CSkJQCBsaW51eCB2ZXJzaW9uCisgVEhVTUIoCXN0cglyMSwgW3IwXQkJKQlAIGxpbnV4IHZlcnNpb24KKyBUSFVNQigJc3ViCXIwLCByMCwgIzIwNDgJCSkKIAogCWJpYwlyMywgcjEsICMweDAwMDAwM2YwCiAJYmljCXIzLCByMywgI1BURV9UWVBFX01BU0sKQEAgLTIzMiw3ICsyMzQsNiBAQAogCW1jcglwMTUsIDAsIHI0LCBjMiwgYzAsIDEJCUAgbG9hZCBUVEIxCiAJbW92CXIxMCwgIzB4MWYJCQlAIGRvbWFpbnMgMCwgMSA9IG1hbmFnZXIKIAltY3IJcDE1LCAwLCByMTAsIGMzLCBjMCwgMAkJQCBsb2FkIGRvbWFpbiBhY2Nlc3MgcmVnaXN0ZXIKLSNlbmRpZgogCS8qCiAJICogTWVtb3J5IHJlZ2lvbiBhdHRyaWJ1dGVzIHdpdGggU0NUTFIuVFJFPTEKIAkgKgpAQCAtMjY1LDYgKzI2Niw3IEBACiAJbGRyCXI2LCA9MHg0MGUwNDBlMAkJCUAgTk1SUgogCW1jcglwMTUsIDAsIHI1LCBjMTAsIGMyLCAwCQlAIHdyaXRlIFBSUlIKIAltY3IJcDE1LCAwLCByNiwgYzEwLCBjMiwgMQkJQCB3cml0ZSBOTVJSCisjZW5kaWYKIAlhZHIJcjUsIHY3X2NydmFsCiAJbGRtaWEJcjUsIHtyNSwgcjZ9CiAjaWZkZWYgQ09ORklHX0NQVV9FTkRJQU5fQkU4CkBAIC0yNzMsNiArMjc1LDcgQEAKICAgIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIHJlYWQgY29udHJvbCByZWdpc3RlcgogCWJpYwlyMCwgcjAsIHI1CQkJQCBjbGVhciBiaXRzIHRoZW0KIAlvcnIJcjAsIHIwLCByNgkJCUAgc2V0IHRoZW0KKyBUSFVNQigJb3JyCXIwLCByMCwgIzEgPDwgMzAJKQlAIFRodW1iIGV4Y2VwdGlvbnMKIAltb3YJcGMsIGxyCQkJCUAgcmV0dXJuIHRvIGhlYWQuUzpfX3JldAogRU5EUFJPQyhfX3Y3X3NldHVwKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwppbmRleCAwY2NlMzdiLi40MjMzOTQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKQEAgLTE3LDcgKzE3LDcgQEAKICAqCiAgKiAyMDAxIFNlcCAwODoKICAqCUNvbXBsZXRlbHkgcmV2aXNpdGVkLCBtYW55IGltcG9ydGFudCBmaXhlcwotICoJTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICoJTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1pb3Avc2V0dXAuYyBiL2FyY2gvYXJtL3BsYXQtaW9wL3NldHVwLmMKaW5kZXggOWU1NzNlNy4uYmFkZTU4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1pb3Avc2V0dXAuYworKysgYi9hcmNoL2FybS9wbGF0LWlvcC9zZXR1cC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGFyY2gvYXJtL3BsYXQtaW9wL3NldHVwLmMKICAqCi0gKiBBdXRob3I6IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqIEF1dGhvcjogTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KICAqIENvcHlyaWdodCAoQykgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycG9yYXRpb24uCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcKaW5kZXggODk4NmI3NDEuLmNhNWM3YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZwpAQCAtOSw2ICs5LDcgQEAKIGNvbmZpZyBBUkNIX01YMQogCWJvb2wgIk1YMS1iYXNlZCIKIAlzZWxlY3QgQ1BVX0FSTTkyMFQKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBGcmVlc2NhbGUgaS5NWDEgZmFtaWx5CiAKQEAgLTE5LDYgKzIwLDEzIEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIEZyZWVzY2FsZSBpLk1YMiBmYW1pbHkKIAorY29uZmlnIEFSQ0hfTVgyNQorCWJvb2wgIk1YMjUtYmFzZWQiCisJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IENPTU1PTl9DTEtERVYKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgRnJlZXNjYWxlIGkuTVgyNSBmYW1pbHkKKwogY29uZmlnIEFSQ0hfTVgzCiAJYm9vbCAiTVgzLWJhc2VkIgogCXNlbGVjdCBDUFVfVjYKQEAgLTI2LDExICszNCwyMCBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBGcmVlc2NhbGUgaS5NWDMgZmFtaWx5CiAKK2NvbmZpZyBBUkNIX01YQzkxMjMxCisJYm9vbCAiTVhDOTEyMzEtYmFzZWQiCisJc2VsZWN0IENQVV9WNgorCXNlbGVjdCBDT01NT05fQ0xLREVWCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIEZyZWVzY2FsZSBNWEM5MTIzMSBmYW1pbHkKKwogZW5kY2hvaWNlCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1teDEvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1teDIvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZyIKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1teDI1L0tjb25maWciCitzb3VyY2UgImFyY2gvYXJtL21hY2gtbXhjOTEyMzEvS2NvbmZpZyIKIAogZW5kbWVudQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1teGMvY2xvY2suYwppbmRleCA5MmUxMzU2Li45ZThmYmQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2Nsb2NrLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIHN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKIHN0YXRpYyBERUZJTkVfTVVURVgoY2xvY2tzX211dGV4KTsKQEAgLTQ3LDc2ICs0OCw2IEBACiAgKiBTdGFuZGFyZCBjbG9jayBmdW5jdGlvbnMgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L2Nsay5oCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKgotICogQWxsIHRoZSBjb2RlIGluc2lkZSAjaWZuZGVmIENPTkZJR19DT01NT05fQ0xLREVWIGNhbiBiZSByZW1vdmVkIG9uY2UgYWxsCi0gKiBNWEMgYXJjaGl0ZWN0dXJlcyBoYXZlIHN3aXRjaGVkIHRvIHVzaW5nIGNsa2Rldi4KLSAqLwotI2lmbmRlZiBDT05GSUdfQ09NTU9OX0NMS0RFVgotLyoKLSAqIFJldHJpZXZlIGEgY2xvY2sgYnkgbmFtZS4KLSAqCi0gKiBOb3RlIHRoYXQgd2UgZmlyc3QgdHJ5IHRvIHVzZSBkZXZpY2UgaWQgb24gdGhlIGJ1cwotICogYW5kIGNsb2NrIG5hbWUuIElmIHRoaXMgZmFpbHMsIHdlIHRyeSB0byB1c2UgIjxuYW1lPi48aWQ+Ii4gSWYgdGhpcyBmYWlscywKLSAqIHdlIHRyeSB0byB1c2UgY2xvY2sgbmFtZSBvbmx5LgotICogVGhlIHJlZmVyZW5jZSBjb3VudCB0byB0aGUgY2xvY2sncyBtb2R1bGUgb3duZXIgcmVmIGNvdW50IGlzIGluY3JlbWVudGVkLgotICovCi1zdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCi17Ci0Jc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7Ci0JaW50IGlkbm87Ci0JY29uc3QgY2hhciAqc3RyOwotCi0JaWYgKGlkID09IE5VTEwpCi0JCXJldHVybiBjbGs7Ci0KLQlpZiAoZGV2ID09IE5VTEwgfHwgZGV2LT5idXMgIT0gJnBsYXRmb3JtX2J1c190eXBlKQotCQlpZG5vID0gLTE7Ci0JZWxzZQotCQlpZG5vID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldiktPmlkOwotCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgewotCQlpZiAocC0+aWQgPT0gaWRubyAmJgotCQkgICAgc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgewotCQkJY2xrID0gcDsKLQkJCWdvdG8gZm91bmQ7Ci0JCX0KLQl9Ci0KLQlzdHIgPSBzdHJyY2hyKGlkLCAnLicpOwotCWlmIChzdHIpIHsKLQkJaW50IGNudCA9IHN0ciAtIGlkOwotCQlzdHIrKzsKLQkJaWRubyA9IHNpbXBsZV9zdHJ0b2woc3RyLCBOVUxMLCAxMCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgewotCQkJaWYgKHAtPmlkID09IGlkbm8gJiYKLQkJCSAgICBzdHJsZW4ocC0+bmFtZSkgPT0gY250ICYmCi0JCQkgICAgc3RybmNtcChpZCwgcC0+bmFtZSwgY250KSA9PSAwICYmCi0JCQkgICAgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7Ci0JCQkJY2xrID0gcDsKLQkJCQlnb3RvIGZvdW5kOwotCQkJfQotCQl9Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWlmIChzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7Ci0JCQljbGsgPSBwOwotCQkJZ290byBmb3VuZDsKLQkJfQotCX0KLQotCXByaW50ayhLRVJOX1dBUk5JTkcgImNsazogVW5hYmxlIHRvIGdldCByZXF1ZXN0ZWQgY2xvY2s6ICVzXG4iLCBpZCk7Ci0KLWZvdW5kOgotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLQotCXJldHVybiBjbGs7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19nZXQpOwotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKQEAgLTE5MywxNiArMTI0LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKIAotI2lmbmRlZiBDT05GSUdfQ09NTU9OX0NMS0RFVgotLyogRGVjcmVtZW50IHRoZSBjbG9jaydzIG1vZHVsZSByZWZlcmVuY2UgY291bnQgKi8KLXZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKGNsayAmJiAhSVNfRVJSKGNsaykpCi0JCW1vZHVsZV9wdXQoY2xrLT5vd25lcik7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19wdXQpOwotI2VuZGlmCi0KIC8qIFJvdW5kIHRoZSByZXF1ZXN0ZWQgY2xvY2sgcmF0ZSB0byB0aGUgbmVhcmVzdCBzdXBwb3J0ZWQKICAqIHJhdGUgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJlcXVlc3RlZCByYXRlLgogICogVGhpcyBpcyBkZXBlbmRlbnQgb24gdGhlIGNsb2NrJ3MgY3VycmVudCBwYXJlbnQuCkBAIC0yNjUsODAgKzE4Niw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa19nZXRfcGFyZW50KTsKIAotI2lmbmRlZiBDT05GSUdfQ09NTU9OX0NMS0RFVgotLyoKLSAqIEFkZCBhIG5ldyBjbG9jayB0byB0aGUgY2xvY2sgdHJlZS4KLSAqLwotaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JbGlzdF9hZGQoJmNsay0+bm9kZSwgJmNsb2Nrcyk7Ci0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19yZWdpc3Rlcik7Ci0KLS8qIFJlbW92ZSBhIGNsb2NrIGZyb20gdGhlIGNsb2NrIHRyZWUgKi8KLXZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQlsaXN0X2RlbCgmY2xrLT5ub2RlKTsKLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa191bnJlZ2lzdGVyKTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgaW50IG14Y19jbG9ja19yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgY2xrICpjbGtwOwotCWNoYXIgKnAgPSBwYWdlOwotCWludCBsZW47Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZjbG9ja3MsIG5vZGUpIHsKLQkJcCArPSBzcHJpbnRmKHAsICIlcy0lZDpcdFx0JWx1LCAlZCIsIGNsa3AtPm5hbWUsIGNsa3AtPmlkLAotCQkJCWNsa19nZXRfcmF0ZShjbGtwKSwgY2xrcC0+dXNlY291bnQpOwotCQlpZiAoY2xrcC0+cGFyZW50KQotCQkJcCArPSBzcHJpbnRmKHAsICIsICVzLSVkXG4iLCBjbGtwLT5wYXJlbnQtPm5hbWUsCi0JCQkJICAgICBjbGtwLT5wYXJlbnQtPmlkKTsKLQkJZWxzZQotCQkJcCArPSBzcHJpbnRmKHAsICJcbiIpOwotCX0KLQotCWxlbiA9IChwIC0gcGFnZSkgLSBvZmY7Ci0JaWYgKGxlbiA8IDApCi0JCWxlbiA9IDA7Ci0KLQkqZW9mID0gKGxlbiA8PSBjb3VudCkgPyAxIDogMDsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludCBfX2luaXQgbXhjX3NldHVwX3Byb2NfZW50cnkodm9pZCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJlczsKLQotCXJlcyA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImNwdS9jbG9ja3MiLCAwLCBOVUxMLAotCQkJCSAgICAgbXhjX2Nsb2NrX3JlYWRfcHJvYywgTlVMTCk7Ci0JaWYgKCFyZXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gY3JlYXRlIHByb2MvY3B1L2Nsb2Nrc1xuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotbGF0ZV9pbml0Y2FsbChteGNfc2V0dXBfcHJvY19lbnRyeSk7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KLSNlbmRpZgotCiAvKgogICogR2V0IHRoZSByZXN1bHRpbmcgY2xvY2sgcmF0ZSBmcm9tIGEgUExMIHJlZ2lzdGVyIHZhbHVlIGFuZCB0aGUgaW5wdXQKICAqIGZyZXF1ZW5jeS4gUExMcyB3aXRoIHRoaXMgcmVnaXN0ZXIgbGF5b3V0IGNhbiBhdCBsZWFzdCBiZSBmb3VuZCBvbgpAQCAtMzYzLDEyICsyMTAsMTEgQEAKIAogCW1mbl9hYnMgPSBtZm47CiAKLSNpZiAhZGVmaW5lZCBDT05GSUdfQVJDSF9NWDEgJiYgIWRlZmluZWQgQ09ORklHX0FSQ0hfTVgyMQotCWlmIChtZm4gPj0gMHgyMDApIHsKLQkJbWZuIHw9IDB4RkZGRkZFMDA7Ci0JCW1mbl9hYnMgPSAtbWZuOwotCX0KLSNlbmRpZgorCS8qIE9uIGFsbCBpLk1YcyBleGNlcHQgaS5NWDEgYW5kIGkuTVgyMSBtZm4gaXMgYSAxMGJpdAorCSAqIDIncyBjb21wbGVtZW50cyBudW1iZXIKKwkgKi8KKwlpZiAoIWNwdV9pc19teDEoKSAmJiAhY3B1X2lzX214MjEoKSAmJiBtZm4gPj0gMHgyMDApCisJCW1mbl9hYnMgPSAweDQwMCAtIG1mbjsKIAogCWZyZXEgKj0gMjsKIAlmcmVxIC89IHBkICsgMTsKQEAgLTM3Niw4ICsyMjIsMTAgQEAKIAlsbCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpZnJlcSAqIG1mbl9hYnM7CiAKIAlkb19kaXYobGwsIG1mZCArIDEpOwotCWlmIChtZm4gPCAwKQorCisJaWYgKCFjcHVfaXNfbXgxKCkgJiYgIWNwdV9pc19teDIxKCkgJiYgbWZuID49IDB4MjAwKQogCQlsbCA9IC1sbDsKKwogCWxsID0gKGZyZXEgKiBtZmkpICsgbGw7CiAKIAlyZXR1cm4gbGw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKaW5kZXggNzUwNmQ5Ni4uY2ZjNGE4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYwpAQCAtMjksNiArMjksMjMgQEAKIHN0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCAqbXhjX2dwaW9fcG9ydHM7CiBzdGF0aWMgaW50IGdwaW9fdGFibGVfc2l6ZTsKIAorI2RlZmluZSBjcHVfaXNfbXgxX214MigpCShjcHVfaXNfbXgxKCkgfHwgY3B1X2lzX214MigpKQorCisjZGVmaW5lIEdQSU9fRFIJCShjcHVfaXNfbXgxX214MigpID8gMHgxYyA6IDB4MDApCisjZGVmaW5lIEdQSU9fR0RJUgkoY3B1X2lzX214MV9teDIoKSA/IDB4MDAgOiAweDA0KQorI2RlZmluZSBHUElPX1BTUgkoY3B1X2lzX214MV9teDIoKSA/IDB4MjQgOiAweDA4KQorI2RlZmluZSBHUElPX0lDUjEJKGNwdV9pc19teDFfbXgyKCkgPyAweDI4IDogMHgwQykKKyNkZWZpbmUgR1BJT19JQ1IyCShjcHVfaXNfbXgxX214MigpID8gMHgyQyA6IDB4MTApCisjZGVmaW5lIEdQSU9fSU1SCShjcHVfaXNfbXgxX214MigpID8gMHgzMCA6IDB4MTQpCisjZGVmaW5lIEdQSU9fSVNSCShjcHVfaXNfbXgxX214MigpID8gMHgzNCA6IDB4MTgpCisjZGVmaW5lIEdQSU9fSVNSCShjcHVfaXNfbXgxX214MigpID8gMHgzNCA6IDB4MTgpCisKKyNkZWZpbmUgR1BJT19JTlRfTE9XX0xFVgkoY3B1X2lzX214MV9teDIoKSA/IDB4MyA6IDB4MCkKKyNkZWZpbmUgR1BJT19JTlRfSElHSF9MRVYJKGNwdV9pc19teDFfbXgyKCkgPyAweDIgOiAweDEpCisjZGVmaW5lIEdQSU9fSU5UX1JJU0VfRURHRQkoY3B1X2lzX214MV9teDIoKSA/IDB4MCA6IDB4MikKKyNkZWZpbmUgR1BJT19JTlRfRkFMTF9FREdFCShjcHVfaXNfbXgxX214MigpID8gMHgxIDogMHgzKQorI2RlZmluZSBHUElPX0lOVF9OT05FCQkweDQKKwogLyogTm90ZTogVGhpcyBkcml2ZXIgYXNzdW1lcyAzMiBHUElPcyBhcmUgaGFuZGxlZCBpbiBvbmUgcmVnaXN0ZXIgKi8KIAogc3RhdGljIHZvaWQgX2NsZWFyX2dwaW9faXJxc3RhdHVzKHN0cnVjdCBteGNfZ3Bpb19wb3J0ICpwb3J0LCB1MzIgaW5kZXgpCkBAIC0xNjIsNyArMTc5LDYgQEAKIAl9CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX01YMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NWDEpCiAvKiBNWDEgYW5kIE1YMyBoYXMgb25lIGludGVycnVwdCAqcGVyKiBncGlvIHBvcnQgKi8KIHN0YXRpYyB2b2lkIG14M19ncGlvX2lycV9oYW5kbGVyKHUzMiBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKQEAgLTE3NCw5ICsxOTAsNyBAQAogCiAJbXhjX2dwaW9faXJxX2hhbmRsZXIocG9ydCwgaXJxX3N0YXQpOwogfQotI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDIKIC8qIE1YMiBoYXMgb25lIGludGVycnVwdCAqZm9yIGFsbCogZ3BpbyBwb3J0cyAqLwogc3RhdGljIHZvaWQgbXgyX2dwaW9faXJxX2hhbmRsZXIodTMyIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewpAQCAtMTk1LDcgKzIwOSw2IEBACiAJCQlteGNfZ3Bpb19pcnFfaGFuZGxlcigmcG9ydFtpXSwgaXJxX3N0YXQpOwogCX0KIH0KLSNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdwaW9faXJxX2NoaXAgPSB7CiAJLmFjayA9IGdwaW9fYWNrX2lycSwKQEAgLTI4NCwxNyArMjk3LDE4IEBACiAJCS8qIGl0cyBhIHNlcmlvdXMgY29uZmlndXJhdGlvbiBidWcgd2hlbiBpdCBmYWlscyAqLwogCQlCVUdfT04oIGdwaW9jaGlwX2FkZCgmcG9ydFtpXS5jaGlwKSA8IDAgKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVgzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX01YMSkKLQkJLyogc2V0dXAgb25lIGhhbmRsZXIgZm9yIGVhY2ggZW50cnkgKi8KLQkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIocG9ydFtpXS5pcnEsIG14M19ncGlvX2lycV9oYW5kbGVyKTsKLQkJc2V0X2lycV9kYXRhKHBvcnRbaV0uaXJxLCAmcG9ydFtpXSk7Ci0jZW5kaWYKKwkJaWYgKGNwdV9pc19teDEoKSB8fCBjcHVfaXNfbXgzKCkgfHwgY3B1X2lzX214MjUoKSkgeworCQkJLyogc2V0dXAgb25lIGhhbmRsZXIgZm9yIGVhY2ggZW50cnkgKi8KKwkJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHBvcnRbaV0uaXJxLCBteDNfZ3Bpb19pcnFfaGFuZGxlcik7CisJCQlzZXRfaXJxX2RhdGEocG9ydFtpXS5pcnEsICZwb3J0W2ldKTsKKwkJfQogCX0KIAotI2lmZGVmIENPTkZJR19BUkNIX01YMgotCS8qIHNldHVwIG9uZSBoYW5kbGVyIGZvciBhbGwgR1BJTyBpbnRlcnJ1cHRzICovCi0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIocG9ydFswXS5pcnEsIG14Ml9ncGlvX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2RhdGEocG9ydFswXS5pcnEsIHBvcnQpOwotI2VuZGlmCisJaWYgKGNwdV9pc19teDIoKSkgeworCQkvKiBzZXR1cCBvbmUgaGFuZGxlciBmb3IgYWxsIEdQSU8gaW50ZXJydXB0cyAqLworCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihwb3J0WzBdLmlycSwgbXgyX2dwaW9faXJxX2hhbmRsZXIpOworCQlzZXRfaXJxX2RhdGEocG9ydFswXS5pcnEsIHBvcnQpOworCX0KKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLWFybWFkaWxsbzV4MC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLWFybWFkaWxsbzV4MC5oCmluZGV4IDg3NjllOTEuLjAzNzZjMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1hcm1hZGlsbG81eDAuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtYXJtYWRpbGxvNXgwLmgKQEAgLTEyLDExICsxMiw0IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX0FSTUFESUxMTzVYMF9IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfQVJNQURJTExPNVgwX0hfXwogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19ERUJVR19MTCAqLwotCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUglBSVBTMV9JT19BRERSRVNTKFVBUlQxX0JBU0VfQUREUikKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtZXVrcmVhX2NwdWlteDI3LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtZXVrcmVhX2NwdWlteDI3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmZDU4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1ldWtyZWFfY3B1aW14MjcuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCisgKgorICogQmFzZWQgb24gYm9hcmQtcGNtMDM4Lmggd2hpY2ggaXMgOgorICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydCAoa2VybmVsQHBlbmd1dHJvbml4LmRlKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfRVVLUkVBX0NQVUlNWDI3X0hfXworI2RlZmluZSBfX0FTTV9BUkNIX01YQ19CT0FSRF9FVUtSRUFfQ1BVSU1YMjdfSF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogVGhpcyBDUFUgbW9kdWxlIG5lZWRzIGEgYmFzZWJvYXJkIHRvIHdvcmsuIEFmdGVyIGJhc2ljIGluaXRpYWxpemluZworICogaXRzIG93biBkZXZpY2VzLCBpdCBjYWxscyBiYXNlYm9hcmQncyBpbml0IGZ1bmN0aW9uLgorICogVE9ETzogQWRkIHlvdXIgb3duIGJhc2Vib2FyZCBpbml0IGZ1bmN0aW9uIGFuZCBjYWxsIGl0IGZyb20KKyAqIGluc2lkZSBldWtyZWFfY3B1aW14MjdfaW5pdCgpLgorICoKKyAqIFRoaXMgZXhhbXBsZSBoZXJlIGlzIGZvciB0aGUgZGV2ZWxvcG1lbnQgYm9hcmQuIFJlZmVyCisgKiBldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQuYworICovCisKK2V4dGVybiB2b2lkIGV1a3JlYV9tYmlteDI3X2Jhc2Vib2FyZF9pbml0KHZvaWQpOworCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX0VVS1JFQV9DUFVJTVgyN19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDIxYWRzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgyMWFkcy5oCmluZGV4IDA2NzAxZGYuLjBjZjRmYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDIxYWRzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjFhZHMuaApAQCAtMTUsMTIgKzE1LDYgQEAKICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfTVgyMUFEU19IX18KIAogLyoKLSAqIE1YQyBVQVJUIEVWQiBib2FyZCBsZXZlbCBjb25maWd1cmF0aW9ucwotICovCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSICAgICAgIFVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUiAgICAgICBBSVBJX0lPX0FERFJFU1MoVUFSVDFfQkFTRV9BRERSKQotCi0vKgogICogTWVtb3J5LW1hcHBlZCBJL08gb24gTVgyMUFEUyBiYXNlIGJvYXJkCiAgKi8KICNkZWZpbmUgTVgyMUFEU19NTUlPX0JBU0VfQUREUiAgIDB4RjUwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3YWRzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgyN2Fkcy5oCmluZGV4IGQ0MmY0ZTYuLjc3NzZkMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3YWRzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdhZHMuaApAQCAtMjYsMTIgKzI2LDYgQEAKIAkJCQlNWENfTUFYX1ZJUlRVQUxfSU5UUykKIAogLyoKLSAqIE1YQyBVQVJUIEVWQiBib2FyZCBsZXZlbCBjb25maWd1cmF0aW9ucwotICovCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSICAgICAgIFVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUiAgICAgICBBSVBJX0lPX0FERFJFU1MoVUFSVDFfQkFTRV9BRERSKQotCi0vKgogICogQG5hbWUgTWVtb3J5IFNpemUgcGFyYW1ldGVycwogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3bGl0ZS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdsaXRlLmgKaW5kZXggYTg3MGY4ZS4uZWE4NzU1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdsaXRlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdsaXRlLmgKQEAgLTExLDkgKzExLDQgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgyN0xJVEVfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdMSVRFX0hfXwogCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19ERUJVR19MTCAqLwotCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUglBSVBTMV9JT19BRERSRVNTKFVBUlQxX0JBU0VfQUREUikKLQogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdMSVRFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdwZGsuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3cGRrLmgKaW5kZXggNTUyYjU1ZC4uZmVjMWJjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdwZGsuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgyN3Bkay5oCkBAIC0xMSw5ICsxMSw0IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdQREtfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdQREtfSF9fCiAKLS8qIG1hbmRhdG9yeSBmb3IgQ09ORklHX0RFQlVHX0xMICovCi0KLSNkZWZpbmUgTVhDX0xMX1VBUlRfUEFERFIJVUFSVDFfQkFTRV9BRERSCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1ZBRERSCUFJUFMxX0lPX0FERFJFU1MoVUFSVDFfQkFTRV9BRERSKQotCiAjZW5kaWYgLyogX19BU01fQVJDSF9NWENfQk9BUkRfTVgyN1BES19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxYWRzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWFkcy5oCmluZGV4IDA2ZTY4OTUuLjJjYmZhMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxYWRzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFhZHMuaApAQCAtMTE0LDkgKzExNCw0IEBACiAKICNkZWZpbmUgTVhDX01BWF9FWFBfSU9fTElORVMJMTYKIAotLyogbWFuZGF0b3J5IGZvciBDT05GSUdfREVCVUdfTEwgKi8KLQotI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCi0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19CT0FSRF9NWDMxQURTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFsaWxseS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFsaWxseS5oCmluZGV4IDc4Y2YzMWUuLmViNWE1MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbGlsbHkuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWxpbGx5LmgKQEAgLTIyLDExICsyMiw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFMSUxMWV9IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMUxJTExZX0hfXwogCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19MTF9ERUJVRyAqLwotCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUgkoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MEEwMDApCi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIGVudW0gbXgzMWxpbGx5X2JvYXJkcyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWxpdGUuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbGl0ZS5oCmluZGV4IDUyZmJkZjIuLjhlNjQzMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbGl0ZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbGl0ZS5oCkBAIC0xMSw4ICsxMSw1IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFMSVRFX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19CT0FSRF9NWDMxTElURV9IX18KIAotI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCi0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19CT0FSRF9NWDMxTElURV9IX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFtb2JvYXJkLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMW1vYm9hcmQuaAppbmRleCAzMDNmZDI0Li5kNWJlNmI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMW1vYm9hcmQuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMW1vYm9hcmQuaApAQCAtMTksMTEgKzE5LDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMU1PQk9BUkRfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFNT0JPQVJEX0hfXwogCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19ERUJVR19MTCAqLwotCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUgkoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MEEwMDApCi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIGVudW0gbXgzMW1vYm9hcmRfYm9hcmRzIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxcGRrLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMXBkay5oCmluZGV4IDUxOWJhYjMuLjJiYmQ2ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxcGRrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFwZGsuaApAQCAtMTEsMTEgKzExLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMVBES19IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMVBES19IX18KIAotLyogbWFuZGF0b3J5IGZvciBDT05GSUdfREVCVUdfTEwgKi8KLQotI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCi0KIC8qIERlZmluaXRpb25zIGZvciBjb21wb25lbnRzIG9uIHRoZSBEZWJ1ZyBib2FyZCAqLwogCiAvKiBCYXNlIGFkZHJlc3Mgb2YgQ1BMRCBjb250cm9sbGVyIG9uIHRoZSBEZWJ1ZyBib2FyZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzVwZGsuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDM1cGRrLmgKaW5kZXggMTExMTAzNy4uMzgzZjFjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzVwZGsuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzNXBkay5oCkBAIC0xOSw5ICsxOSw0IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzVQREtfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzVQREtfSF9fCiAKLS8qIG1hbmRhdG9yeSBmb3IgQ09ORklHX0RFQlVHX0xMICovCi0KLSNkZWZpbmUgTVhDX0xMX1VBUlRfUEFERFIJVUFSVDFfQkFTRV9BRERSCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1ZBRERSCUFJUFMxX0lPX0FERFJFU1MoVUFSVDFfQkFTRV9BRERSKQotCiAjZW5kaWYgLyogX19BU01fQVJDSF9NWENfQk9BUkRfTVgzNVBES19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1wY20wMzcuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1wY20wMzcuaAppbmRleCBmMGExZmExLi4xMzQxMTcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcGNtMDM3LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXBjbTAzNy5oCkBAIC0xOSw5ICsxOSw0IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1BDTTAzN19IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfUENNMDM3X0hfXwogCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19ERUJVR19MTCAqLwotCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUglBSVBTMV9JT19BRERSRVNTKFVBUlQxX0JBU0VfQUREUikKLQogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1BDTTAzN19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1wY20wMzguaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1wY20wMzguaAppbmRleCA0ZmNkNzQ5Li40MTBmOTc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcGNtMDM4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXBjbTAzOC5oCkBAIC0xOSwxMSArMTksNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19CT0FSRF9QQ00wMzhfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1BDTTAzOF9IX18KIAotLyogbWFuZGF0b3J5IGZvciBDT05GSUdfREVCVUdfTEwgKi8KLQotI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJKEFJUElfQkFTRV9BRERSX1ZJUlQgKyAweDBBMDAwKQotCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKICAqIFRoaXMgQ1BVIG1vZHVsZSBuZWVkcyBhIGJhc2Vib2FyZCB0byB3b3JrLiBBZnRlciBiYXNpYyBpbml0aWFsaXppbmcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1wY20wNDMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1wY20wNDMuaAppbmRleCAxNWZiZGYxLi4xYWM0ZTE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcGNtMDQzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXBjbTA0My5oCkBAIC0xOSw5ICsxOSw0IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1BDTTA0M19IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfUENNMDQzX0hfXwogCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19MTF9ERUJVRyAqLwotCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUglBSVBTMV9JT19BRERSRVNTKFVBUlQxX0JBU0VfQUREUikKLQogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1BDTTA0M19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1xb25nLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcW9uZy5oCmluZGV4IDA0MDMzZWMuLjZkODhjN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1xb25nLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXFvbmcuaApAQCAtMTEsMTEgKzExLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfUU9OR19IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfUU9OR19IX18KIAotLyogbWFuZGF0b3J5IGZvciBDT05GSUdfREVCVUdfTEwgKi8KLQotI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCi0KIC8qIE5PUiBGTEFTSCAqLwogI2RlZmluZSBRT05HX05PUl9TSVpFCQkoMTI4KjEwMjQqMTAyNCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCmluZGV4IDAyYzNjZDAuLjI4NmNiOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jb21tb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY29tbW9uLmgKQEAgLTE2LDE4ICsxNiwzMyBAQAogCiBleHRlcm4gdm9pZCBteDFfbWFwX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXgyMV9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBteDI1X21hcF9pbyh2b2lkKTsKIGV4dGVybiB2b2lkIG14MjdfbWFwX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXgzMV9tYXBfaW8odm9pZCk7CiBleHRlcm4gdm9pZCBteDM1X21hcF9pbyh2b2lkKTsKLWV4dGVybiB2b2lkIG14Y19pbml0X2lycSh2b2lkKTsKLWV4dGVybiB2b2lkIG14Y190aW1lcl9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2Nsayk7CitleHRlcm4gdm9pZCBteGM5MTIzMV9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBteGNfaW5pdF9pcnEodm9pZCBfX2lvbWVtICopOworZXh0ZXJuIHZvaWQgbXgxX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgbXgyMV9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIG14MjVfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBteDI3X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgbXgzMV9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIG14MzVfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBteGM5MTIzMV9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIG14Y190aW1lcl9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2Nsaywgdm9pZCBfX2lvbWVtICosIGludCk7CiBleHRlcm4gaW50IG14MV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOwogZXh0ZXJuIGludCBteDIxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgbHJlZiwgdW5zaWduZWQgbG9uZyBmcmVmKTsKK2V4dGVybiBpbnQgbXgyNV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOwogZXh0ZXJuIGludCBteDI3X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZik7CiBleHRlcm4gaW50IG14MzFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKTsKIGV4dGVybiBpbnQgbXgzNV9jbG9ja3NfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgbXhjOTEyMzFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKTsKIGV4dGVybiBpbnQgbXhjX3JlZ2lzdGVyX2dwaW9zKHZvaWQpOwogZXh0ZXJuIGludCBteGNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgKmRhdGEpOwogZXh0ZXJuIHZvaWQgbXhjX3NldF9jcHVfdHlwZSh1bnNpZ25lZCBpbnQgdHlwZSk7CitleHRlcm4gdm9pZCBteGNfYXJjaF9yZXNldF9pbml0KHZvaWQgX19pb21lbSAqKTsKK2V4dGVybiB2b2lkIG14YzkxMjMxX3Bvd2VyX29mZih2b2lkKTsKK2V4dGVybiB2b2lkIG14YzkxMjMxX2FyY2hfcmVzZXQoaW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgbXhjOTEyMzFfcHJlcGFyZV9pZGxlKHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYmJjNWY2Ny4uMTViMmIxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDUyICsxMSw1MiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2lmZGVmIENPTkZJR19BUkNIX01YMQorI2luY2x1ZGUgPG1hY2gvbXgxLmg+CisjZGVmaW5lIFVBUlRfUEFERFIJVUFSVDFfQkFTRV9BRERSCisjZGVmaW5lIFVBUlRfVkFERFIJSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCisjZW5kaWYKIAotI2lmZGVmIENPTkZJR19NQUNIX01YMzFBRFMKLSNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MzFhZHMuaD4KKyNpZmRlZiBDT05GSUdfQVJDSF9NWDI1CisjaWZkZWYgVUFSVF9QQUREUgorI2Vycm9yICJDT05GSUdfREVCVUdfTEwgaXMgaW5jb21wYXRpYmxlIHdpdGggbXVsdGlwbGUgYXJjaHMiCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9QQ00wMzcKLSNpbmNsdWRlIDxtYWNoL2JvYXJkLXBjbTAzNy5oPgorI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgorI2RlZmluZSBVQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgorI2RlZmluZSBVQVJUX1ZBRERSCU1YMjVfQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDMxTElURQotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMWxpdGUuaD4KKworI2lmZGVmIENPTkZJR19BUkNIX01YMgorI2lmZGVmIFVBUlRfUEFERFIKKyNlcnJvciAiQ09ORklHX0RFQlVHX0xMIGlzIGluY29tcGF0aWJsZSB3aXRoIG11bHRpcGxlIGFyY2hzIgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX01BQ0hfTVgyN0FEUwotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgyN2Fkcy5oPgorI2luY2x1ZGUgPG1hY2gvbXgyeC5oPgorI2RlZmluZSBVQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgorI2RlZmluZSBVQVJUX1ZBRERSCUFJUElfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDIxQURTCi0jaW5jbHVkZSA8bWFjaC9ib2FyZC1teDIxYWRzLmg+CisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDMKKyNpZmRlZiBVQVJUX1BBRERSCisjZXJyb3IgIkNPTkZJR19ERUJVR19MTCBpcyBpbmNvbXBhdGlibGUgd2l0aCBtdWx0aXBsZSBhcmNocyIKICNlbmRpZgotI2lmZGVmIENPTkZJR19NQUNIX1BDTTAzOAotI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGNtMDM4Lmg+CisjaW5jbHVkZSA8bWFjaC9teDN4Lmg+CisjZGVmaW5lIFVBUlRfUEFERFIJVUFSVDFfQkFTRV9BRERSCisjZGVmaW5lIFVBUlRfVkFERFIJQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDMxXzNEUwotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMXBkay5oPgorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVhDOTEyMzEKKyNpZmRlZiBVQVJUX1BBRERSCisjZXJyb3IgIkNPTkZJR19ERUJVR19MTCBpcyBpbmNvbXBhdGlibGUgd2l0aCBtdWx0aXBsZSBhcmNocyIKICNlbmRpZgotI2lmZGVmIENPTkZJR19NQUNIX1FPTkcKLSNpbmNsdWRlIDxtYWNoL2JvYXJkLXFvbmcuaD4KLSNlbmRpZgotI2lmZGVmIENPTkZJR19NQUNIX1BDTTA0MwotI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGNtMDQzLmg+Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDI3XzNEUwotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgyN3Bkay5oPgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01BQ0hfQVJNQURJTExPNVgwCi0jaW5jbHVkZSA8bWFjaC9ib2FyZC1hcm1hZGlsbG81eDAuaD4KLSNlbmRpZgotI2lmZGVmIENPTkZJR19NQUNIX01YMzVfM0RTCi0jaW5jbHVkZSA8bWFjaC9ib2FyZC1teDM1cGRrLmg+Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDI3TElURQotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgyN2xpdGUuaD4KKyNpbmNsdWRlIDxtYWNoL214YzkxMjMxLmg+CisjZGVmaW5lIFVBUlRfUEFERFIJTVhDOTEyMzFfVUFSVDJfQkFTRV9BRERSCisjZGVmaW5lIFVBUlRfVkFERFIJTVhDOTEyMzFfQUlQUzFfSU9fQUREUkVTUyhNWEM5MTIzMV9VQVJUMl9CQVNFX0FERFIpCiAjZW5kaWYKIAkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KLQkJbGRyZXEJXHJ4LCA9TVhDX0xMX1VBUlRfUEFERFIJQCBwaHlzaWNhbAotCQlsZHJuZQlccngsID1NWENfTExfVUFSVF9WQUREUglAIHZpcnR1YWwKKwkJbGRyZXEJXHJ4LCA9VUFSVF9QQUREUglAIHBoeXNpY2FsCisJCWxkcm5lCVxyeCwgPVVBUlRfVkFERFIJQCB2aXJ0dWFsCiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IDVmMDFkNjAuLjdjZjI5MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0xOCw3ICsxOCw4IEBACiAJLmVuZG0KIAogCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKLQlsZHIJXGJhc2UsID1BVklDX0lPX0FERFJFU1MoQVZJQ19CQVNFX0FERFIpCisJbGRyCVxiYXNlLCA9YXZpY19iYXNlCisJbGRyCVxiYXNlLCBbXGJhc2VdCiAjaWZkZWYgQ09ORklHX01YQ19JUlFfUFJJT1IKIAlsZHIJcjQsIFtcYmFzZSwgI0FWSUNfTklNQVNLXQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDQyZTRlZTMuLjc4ZGI3NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC00Miw2ICs0MiwxNCBAQAogIyBpbmNsdWRlIDxtYWNoL214MS5oPgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDI1CisjIGluY2x1ZGUgPG1hY2gvbXgyNS5oPgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWEM5MTIzMQorIyBpbmNsdWRlIDxtYWNoL214YzkxMjMxLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPG1hY2gvbXhjLmg+CiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19IQVJEV0FSRV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pbXhmYi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lteGZiLmgKaW5kZXggOWYwMTAxMS4uNTI2MzUwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lteGZiLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lteGZiLmgKQEAgLTIsNiArMiw4IEBACiAgKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIG1hY2hpbmUgd2hpY2ggd2UgYXJlIHJ1bm5pbmcgb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKICNkZWZpbmUgUENSX1RGVAkJKDEgPDwgMzEpCiAjZGVmaW5lIFBDUl9DT0xPUgkoMSA8PCAzMCkKICNkZWZpbmUgUENSX1BCU0laXzEJKDAgPDwgMjgpCkBAIC0xMyw3ICsxNSw4IEBACiAjZGVmaW5lIFBDUl9CUElYXzQJKDIgPDwgMjUpCiAjZGVmaW5lIFBDUl9CUElYXzgJKDMgPDwgMjUpCiAjZGVmaW5lIFBDUl9CUElYXzEyCSg0IDw8IDI1KQotI2RlZmluZSBQQ1JfQlBJWF8xNgkoNCA8PCAyNSkKKyNkZWZpbmUgUENSX0JQSVhfMTYJKDUgPDwgMjUpCisjZGVmaW5lIFBDUl9CUElYXzE4CSg2IDw8IDI1KQogI2RlZmluZSBQQ1JfUElYUE9MCSgxIDw8IDI0KQogI2RlZmluZSBQQ1JfRkxNUE9MCSgxIDw8IDIzKQogI2RlZmluZSBQQ1JfTFBQT0wJKDEgPDwgMjIpCkBAIC00NiwyOSArNDksMjEgQEAKICNkZWZpbmUgRE1BQ1JfSE0oeCkJKCgoeCkgJiAweGYpIDw8IDE2KQogI2RlZmluZSBETUFDUl9UTSh4KQkoKHgpICYgMHhmKQogCitzdHJ1Y3QgaW14X2ZiX3ZpZGVvbW9kZSB7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSBtb2RlOworCXUzMiBwY3I7CisJdW5zaWduZWQgY2hhcglicHA7Cit9OworCiBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgewotCXVfbG9uZwkJcGl4Y2xvY2s7Ci0KLQl1X3Nob3J0CQl4cmVzOwotCXVfc2hvcnQJCXlyZXM7Ci0KLQl1X2ludAkJbm9uc3RkOwotCXVfY2hhcgkJYnBwOwotCXVfY2hhcgkJaHN5bmNfbGVuOwotCXVfY2hhcgkJbGVmdF9tYXJnaW47Ci0JdV9jaGFyCQlyaWdodF9tYXJnaW47Ci0KLQl1X2NoYXIJCXZzeW5jX2xlbjsKLQl1X2NoYXIJCXVwcGVyX21hcmdpbjsKLQl1X2NoYXIJCWxvd2VyX21hcmdpbjsKLQl1X2NoYXIJCXN5bmM7CisJc3RydWN0IGlteF9mYl92aWRlb21vZGUgKm1vZGU7CisJaW50CQludW1fbW9kZXM7CiAKIAl1X2ludAkJY21hcF9ncmV5c2NhbGU6MSwKIAkJCWNtYXBfaW52ZXJzZToxLAogCQkJY21hcF9zdGF0aWM6MSwKIAkJCXVudXNlZDoyOTsKIAotCXVfaW50CQlwY3I7CiAJdV9pbnQJCXB3bXI7CiAJdV9pbnQJCWxzY3IxOwogCXVfaW50CQlkbWFjcjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDI1LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMGM0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNS5oCkBAIC0wLDAgKzEsNTE3IEBACisvKgorICogYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBieSBMb3RoYXIgV2Fzc21hbm4gPExXQEtBUk8tZWxlY3Ryb25pY3MuZGU+CisgKgorICogYmFzZWQgb24gYXJjaC9hcm0vbWFjaC1teDI1L214MjVfcGlucy5oCisgKiAgICBDb3B5cmlnaHQgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogYW5kCisgKiBhcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzNS5oCisgKiAgICBDb3B5cmlnaHQgKEMsIE5PX1BBRF9DVFJMKSAyMDA5IGJ5IEphbiBXZWl0emVsIFBoeXRlYyBNZXNzdGVjaG5payBHbWJIIDxhcm1saW51eEBwaHl0ZWMuZGU+CisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworI2lmbmRlZiBfX0lPTVVYX01YMjVfSF9fCisjZGVmaW5lIF9fSU9NVVhfTVgyNV9IX18KKworI2luY2x1ZGUgPG1hY2gvaW9tdXgtdjMuaD4KKworI2lmbmRlZiBHUElPX1BPUlRBCisjZXJyb3IgUGxlYXNlIGluY2x1ZGUgbWFjaC9pb211eC5oCisjZW5kaWYKKworLyoKKyAqCisgKiBAYnJpZWYgTVgyNSBJL08gUGluIExpc3QKKyAqCisgKiBAaW5ncm91cCBHUElPX01YMjUKKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogSU9NVVgvUEFEIEJpdCBmaWVsZCBkZWZpbml0aW9ucworICovCisKKyNkZWZpbmUgTVgyNV9QQURfQTEwX19BMTAJCUlPTVVYX1BBRCgweDAwMCwgMHgwMDgsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9BMTBfX0dQSU9fNF8wCQlJT01VWF9QQUQoMHgwMDAsIDB4MDA4LCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9BMTNfX0ExMwkJSU9NVVhfUEFEKDB4MjJDLCAweDAwYywgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0ExM19fR1BJT180XzEJCUlPTVVYX1BBRCgweDIyQywgMHgwMGMsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ExNF9fQTE0CQlJT01VWF9QQUQoMHgyMzAsIDB4MDEwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTE0X19HUElPXzJfMAkJSU9NVVhfUEFEKDB4MjMwLCAweDAxMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQTE1X19BMTUJCUlPTVVYX1BBRCgweDIzNCwgMHgwMTQsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9BMTVfX0dQSU9fMl8xCQlJT01VWF9QQUQoMHgyMzQsIDB4MDE0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9BMTZfX0ExNgkJSU9NVVhfUEFEKDB4MDAwLCAweDAxOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0ExNl9fR1BJT18yXzIJCUlPTVVYX1BBRCgweDAwMCwgMHgwMTgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ExN19fQTE3CQlJT01VWF9QQUQoMHgyMzgsIDB4MDFjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTE3X19HUElPXzJfMwkJSU9NVVhfUEFEKDB4MjM4LCAweDAxYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQTE4X19BMTgJCUlPTVVYX1BBRCgweDIzYywgMHgwMjAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9BMThfX0dQSU9fMl80CQlJT01VWF9QQUQoMHgyM2MsIDB4MDIwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTE4X19GRUNfQ09MCQlJT01VWF9QQUQoMHgyM2MsIDB4MDIwLCAweDE3LCAweDUwNCwgMCwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9BMTlfX0ExOQkJSU9NVVhfUEFEKDB4MjQwLCAweDAyNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0ExOV9fRkVDX1JYX0VSCQlJT01VWF9QQUQoMHgyNDAsIDB4MDI0LCAweDE3LCAweDUxOCwgMCwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfQTE5X19HUElPXzJfNQkJSU9NVVhfUEFEKDB4MjQwLCAweDAyNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQTIwX19BMjAJCUlPTVVYX1BBRCgweDI0NCwgMHgwMjgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9BMjBfX0dQSU9fMl82CQlJT01VWF9QQUQoMHgyNDQsIDB4MDI4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTIwX19GRUNfUkRBVEEyCUlPTVVYX1BBRCgweDI0NCwgMHgwMjgsIDB4MTcsIDB4NTBjLCAwLCBOT19QQURfQ1RMKQorCisjZGVmaW5lIE1YMjVfUEFEX0EyMV9fQTIxCQlJT01VWF9QQUQoMHgyNDgsIDB4MDJjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTIxX19HUElPXzJfNwkJSU9NVVhfUEFEKDB4MjQ4LCAweDAyYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0EyMV9fRkVDX1JEQVRBMwlJT01VWF9QQUQoMHgyNDgsIDB4MDJjLCAweDE3LCAweDUxMCwgMCwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9BMjJfX0EyMgkJSU9NVVhfUEFEKDB4MDAwLCAweDAzMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0EyMl9fR1BJT18yXzgJCUlPTVVYX1BBRCgweDAwMCwgMHgwMzAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0EyM19fQTIzCQlJT01VWF9QQUQoMHgyNGMsIDB4MDM0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTIzX19HUElPXzJfOQkJSU9NVVhfUEFEKDB4MjRjLCAweDAzNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQTI0X19BMjQJCUlPTVVYX1BBRCgweDI1MCwgMHgwMzgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9BMjRfX0dQSU9fMl8xMAkJSU9NVVhfUEFEKDB4MjUwLCAweDAzOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0EyNF9fRkVDX1JYX0NMSwlJT01VWF9QQUQoMHgyNTAsIDB4MDM4LCAweDE3LCAweDUxNCwgMCwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9BMjVfX0EyNQkJSU9NVVhfUEFEKDB4MjU0LCAweDAzYywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0EyNV9fR1BJT18yXzExCQlJT01VWF9QQUQoMHgyNTQsIDB4MDNjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTI1X19GRUNfQ1JTCQlJT01VWF9QQUQoMHgyNTQsIDB4MDNjLCAweDE3LCAweDUwOCwgMCwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9FQjBfX0VCMAkJSU9NVVhfUEFEKDB4MjU4LCAweDA0MCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0VCMF9fQVVENF9UWEQJCUlPTVVYX1BBRCgweDI1OCwgMHgwNDAsIDB4MTQsIDB4NDY0LCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRUIwX19HUElPXzJfMTIJCUlPTVVYX1BBRCgweDI1OCwgMHgwNDAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0VCMV9fRUIxCQlJT01VWF9QQUQoMHgyNWMsIDB4MDQ0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRUIxX19BVUQ0X1JYRAkJSU9NVVhfUEFEKDB4MjVjLCAweDA0NCwgMHgxNCwgMHg0NjAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9FQjFfX0dQSU9fMl8xMwkJSU9NVVhfUEFEKDB4MjVjLCAweDA0NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfT0VfX09FCQkJSU9NVVhfUEFEKDB4MjYwLCAweDA0OCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX09FX19BVUQ0X1RYQwkJSU9NVVhfUEFEKDB4MjYwLCAweDA0OCwgMHgxNCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX09FX19HUElPXzJfMTQJCUlPTVVYX1BBRCgweDI2MCwgMHgwNDgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0NTMF9fQ1MwCQlJT01VWF9QQUQoMHgwMDAsIDB4MDRjLCAweDAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1MwX19HUElPXzRfMgkJSU9NVVhfUEFEKDB4MDAwLCAweDA0YywgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1MxX19DUzEJCUlPTVVYX1BBRCgweDAwMCwgMHgwNTAsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DUzFfX0dQSU9fNF8zCQlJT01VWF9QQUQoMHgwMDAsIDB4MDUwLCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DUzRfX0NTNAkJSU9NVVhfUEFEKDB4MjY0LCAweDA1NCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTNF9fVUFSVDVfQ1RTCQlJT01VWF9QQUQoMHgyNjQsIDB4MDU0LCAweDEzLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1M0X19HUElPXzNfMjAJCUlPTVVYX1BBRCgweDI2NCwgMHgwNTQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0NTNV9fQ1M1CQlJT01VWF9QQUQoMHgyNjgsIDB4MDU4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1M1X19VQVJUNV9SVFMJCUlPTVVYX1BBRCgweDI2OCwgMHgwNTgsIDB4MTMsIDB4NTc0LCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1M1X19HUElPXzNfMjEJCUlPTVVYX1BBRCgweDI2OCwgMHgwNTgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX05GX0NFMF9fTkZfQ0UwCQlJT01VWF9QQUQoMHgyNmMsIDB4MDVjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9ORl9DRTBfX0dQSU9fM18yMglJT01VWF9QQUQoMHgyNmMsIDB4MDVjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9FQ0JfX0VDQgkJSU9NVVhfUEFEKDB4MjcwLCAweDA2MCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0VDQl9fVUFSVDVfVFhEX01VWAlJT01VWF9QQUQoMHgyNzAsIDB4MDYwLCAweDEzLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRUNCX19HUElPXzNfMjMJCUlPTVVYX1BBRCgweDI3MCwgMHgwNjAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0xCQV9fTEJBCQlJT01VWF9QQUQoMHgyNzQsIDB4MDY0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTEJBX19VQVJUNV9SWERfTVVYCUlPTVVYX1BBRCgweDI3NCwgMHgwNjQsIDB4MTMsIDB4NTc4LCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTEJBX19HUElPXzNfMjQJCUlPTVVYX1BBRCgweDI3NCwgMHgwNjQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0JDTEtfX0JDTEsJCUlPTVVYX1BBRCgweDAwMCwgMHgwNjgsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9CQ0xLX19HUElPXzRfNAkJSU9NVVhfUEFEKDB4MDAwLCAweDA2OCwgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfUldfX1JXCQkJSU9NVVhfUEFEKDB4Mjc4LCAweDA2YywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1JXX19BVUQ0X1RYRlMJCUlPTVVYX1BBRCgweDI3OCwgMHgwNmMsIDB4MTQsIDB4NDc0LCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfUldfX0dQSU9fM18yNQkJSU9NVVhfUEFEKDB4Mjc4LCAweDA2YywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfTkZXRV9CX19ORldFX0IJCUlPTVVYX1BBRCgweDAwMCwgMHgwNzAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9ORldFX0JfX0dQSU9fM18yNglJT01VWF9QQUQoMHgwMDAsIDB4MDcwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9ORlJFX0JfX05GUkVfQgkJSU9NVVhfUEFEKDB4MDAwLCAweDA3NCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX05GUkVfQl9fR1BJT18zXzI3CUlPTVVYX1BBRCgweDAwMCwgMHgwNzQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX05GQUxFX19ORkFMRQkJSU9NVVhfUEFEKDB4MDAwLCAweDA3OCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX05GQUxFX19HUElPXzNfMjgJSU9NVVhfUEFEKDB4MDAwLCAweDA3OCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfTkZDTEVfX05GQ0xFCQlJT01VWF9QQUQoMHgwMDAsIDB4MDdjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTkZDTEVfX0dQSU9fM18yOQlJT01VWF9QQUQoMHgwMDAsIDB4MDdjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9ORldQX0JfX05GV1BfQgkJSU9NVVhfUEFEKDB4MDAwLCAweDA4MCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX05GV1BfQl9fR1BJT18zXzMwCUlPTVVYX1BBRCgweDAwMCwgMHgwODAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX05GUkJfX05GUkIJCUlPTVVYX1BBRCgweDI3YywgMHgwODQsIDB4MTAsIDAsIDAsIFBBRF9DVExfUEtFKQorI2RlZmluZSBNWDI1X1BBRF9ORlJCX19HUElPXzNfMzEJSU9NVVhfUEFEKDB4MjdjLCAweDA4NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRDE1X19EMTUJCUlPTVVYX1BBRCgweDI4MCwgMHgwODgsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EMTVfX0xEMTYJCUlPTVVYX1BBRCgweDI4MCwgMHgwODgsIDB4MDEsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EMTVfX0dQSU9fNF81CQlJT01VWF9QQUQoMHgyODAsIDB4MDg4LCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9EMTRfX0QxNAkJSU9NVVhfUEFEKDB4Mjg0LCAweDA4YywgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0QxNF9fTEQxNwkJSU9NVVhfUEFEKDB4Mjg0LCAweDA4YywgMHgwMSwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0QxNF9fR1BJT180XzYJCUlPTVVYX1BBRCgweDI4NCwgMHgwOGMsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0QxM19fRDEzCQlJT01VWF9QQUQoMHgyODgsIDB4MDkwLCAweDAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRDEzX19MRDE4CQlJT01VWF9QQUQoMHgyODgsIDB4MDkwLCAweDAxLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRDEzX19HUElPXzRfNwkJSU9NVVhfUEFEKDB4Mjg4LCAweDA5MCwgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRDEyX19EMTIJCUlPTVVYX1BBRCgweDI4YywgMHgwOTQsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EMTJfX0dQSU9fNF84CQlJT01VWF9QQUQoMHgyOGMsIDB4MDk0LCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9EMTFfX0QxMQkJSU9NVVhfUEFEKDB4MjkwLCAweDA5OCwgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0QxMV9fR1BJT180XzkJCUlPTVVYX1BBRCgweDI5MCwgMHgwOTgsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0QxMF9fRDEwCQlJT01VWF9QQUQoMHgyOTQsIDB4MDljLCAweDAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRDEwX19HUElPXzRfMTAJCUlPTVVYX1BBRCgweDI5NCwgMHgwOWMsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EMTBfX1VTQk9UR19PQwkJSU9NVVhfUEFEKDB4Mjk0LCAweDA5YywgMHgwNiwgMHg1N2MsIDAsIFBBRF9DVExfUFVTXzEwMEtfVVApCisKKyNkZWZpbmUgTVgyNV9QQURfRDlfX0Q5CQkJSU9NVVhfUEFEKDB4Mjk4LCAweDBhMCwgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0Q5X19HUElPXzRfMTEJCUlPTVVYX1BBRCgweDI5OCwgMHgwYTAsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EOV9fVVNCSDJfUFdSCQlJT01VWF9QQUQoMHgyOTgsIDB4MGEwLCAweDA2LCAwLCAwLCBQQURfQ1RMX1BLRSkKKworI2RlZmluZSBNWDI1X1BBRF9EOF9fRDgJCQlJT01VWF9QQUQoMHgyOWMsIDB4MGE0LCAweDAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRDhfX0dQSU9fNF8xMgkJSU9NVVhfUEFEKDB4MjljLCAweDBhNCwgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0Q4X19VU0JIMl9PQwkJSU9NVVhfUEFEKDB4MjljLCAweDBhNCwgMHgwNiwgMHg1ODAsIDAsIFBBRF9DVExfUFVTXzEwMEtfVVApCisKKyNkZWZpbmUgTVgyNV9QQURfRDdfX0Q3CQkJSU9NVVhfUEFEKDB4MmEwLCAweDBhOCwgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0Q3X19HUElPXzRfMTMJCUlPTVVYX1BBRCgweDJhMCwgMHgwYTgsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0Q2X19ENgkJCUlPTVVYX1BBRCgweDJhNCwgMHgwYWMsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9ENl9fR1BJT180XzE0CQlJT01VWF9QQUQoMHgyYTQsIDB4MGFjLCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9ENV9fRDUJCQlJT01VWF9QQUQoMHgyYTgsIDB4MGIwLCAweDAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRDVfX0dQSU9fNF8xNQkJSU9NVVhfUEFEKDB4MmE4LCAweDBiMCwgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRDRfX0Q0CQkJSU9NVVhfUEFEKDB4MmFjLCAweDBiNCwgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0Q0X19HUElPXzRfMTYJCUlPTVVYX1BBRCgweDJhYywgMHgwYjQsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0QzX19EMwkJCUlPTVVYX1BBRCgweDJiMCwgMHgwYjgsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EM19fR1BJT180XzE3CQlJT01VWF9QQUQoMHgyYjAsIDB4MGI4LCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9EMl9fRDIJCQlJT01VWF9QQUQoMHgyYjQsIDB4MGJjLCAweDAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRDJfX0dQSU9fNF8xOAkJSU9NVVhfUEFEKDB4MmI0LCAweDBiYywgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRDFfX0QxCQkJSU9NVVhfUEFEKDB4MmI4LCAweDBjMCwgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0QxX19HUElPXzRfMTkJCUlPTVVYX1BBRCgweDJiOCwgMHgwYzAsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0QwX19EMAkJCUlPTVVYX1BBRCgweDJiYywgMHgwYzQsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EMF9fR1BJT180XzIwCQlJT01VWF9QQUQoMHgyYmMsIDB4MGM0LCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDBfX0xEMAkJSU9NVVhfUEFEKDB4MmMwLCAweDBjOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMF9fQ1NJX0QwCQlJT01VWF9QQUQoMHgyYzAsIDB4MGM4LCAweDEyLCAweDQ4OCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMF9fR1BJT18yXzE1CQlJT01VWF9QQUQoMHgyYzAsIDB4MGM4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDFfX0xEMQkJSU9NVVhfUEFEKDB4MmM0LCAweDBjYywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMV9fQ1NJX0QxCQlJT01VWF9QQUQoMHgyYzQsIDB4MGNjLCAweDEyLCAweDQ4YywgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMV9fR1BJT18yXzE2CQlJT01VWF9QQUQoMHgyYzQsIDB4MGNjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDJfX0xEMgkJSU9NVVhfUEFEKDB4MmM4LCAweDBkMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMl9fR1BJT18yXzE3CQlJT01VWF9QQUQoMHgyYzgsIDB4MGQwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDNfX0xEMwkJSU9NVVhfUEFEKDB4MmNjLCAweDBkNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEM19fR1BJT18yXzE4CQlJT01VWF9QQUQoMHgyY2MsIDB4MGQ0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDRfX0xENAkJSU9NVVhfUEFEKDB4MmQwLCAweDBkOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xENF9fR1BJT18yXzE5CQlJT01VWF9QQUQoMHgyZDAsIDB4MGQ4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDVfX0xENQkJSU9NVVhfUEFEKDB4MmQ0LCAweDBkYywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xENV9fR1BJT18xXzE5CQlJT01VWF9QQUQoMHgyZDQsIDB4MGRjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDZfX0xENgkJSU9NVVhfUEFEKDB4MmQ4LCAweDBlMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xENl9fR1BJT18xXzIwCQlJT01VWF9QQUQoMHgyZDgsIDB4MGUwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDdfX0xENwkJSU9NVVhfUEFEKDB4MmRjLCAweDBlNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEN19fR1BJT18xXzIxCQlJT01VWF9QQUQoMHgyZGMsIDB4MGU0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDhfX0xEOAkJSU9NVVhfUEFEKDB4MmUwLCAweDBlOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEOF9fRkVDX1RYX0VSUglJT01VWF9QQUQoMHgyZTAsIDB4MGU4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RMKQorCisjZGVmaW5lIE1YMjVfUEFEX0xEOV9fTEQ5CQlJT01VWF9QQUQoMHgyZTQsIDB4MGVjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTEQ5X19GRUNfQ09MCQlJT01VWF9QQUQoMHgyZTQsIDB4MGVjLCAweDE1LCAweDUwNCwgMSwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDEwX19MRDEwCQlJT01VWF9QQUQoMHgyZTgsIDB4MGYwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTEQxMF9fRkVDX1JYX0VSCUlPTVVYX1BBRCgweDJlOCwgMHgwZjAsIDB4MTUsIDB4NTE4LCAxLCBOT19QQURfQ1RMKQorCisjZGVmaW5lIE1YMjVfUEFEX0xEMTFfX0xEMTEJCUlPTVVYX1BBRCgweDJlYywgMHgwZjQsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9MRDExX19GRUNfUkRBVEEyCUlPTVVYX1BBRCgweDJlYywgMHgwZjQsIDB4MTUsIDB4NTBjLCAxLCBOT19QQURfQ1RMKQorCisjZGVmaW5lIE1YMjVfUEFEX0xEMTJfX0xEMTIJCUlPTVVYX1BBRCgweDJmMCwgMHgwZjgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9MRDEyX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDJmMCwgMHgwZjgsIDB4MTUsIDB4NTEwLCAxLCBOT19QQURfQ1RMKQorCisjZGVmaW5lIE1YMjVfUEFEX0xEMTNfX0xEMTMJCUlPTVVYX1BBRCgweDJmNCwgMHgwZmMsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9MRDEzX19GRUNfVERBVEEyCUlPTVVYX1BBRCgweDJmNCwgMHgwZmMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVEwpCisKKyNkZWZpbmUgTVgyNV9QQURfTEQxNF9fTEQxNAkJSU9NVVhfUEFEKDB4MmY4LCAweDEwMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMTRfX0ZFQ19UREFUQTMJSU9NVVhfUEFEKDB4MmY4LCAweDEwMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDE1X19MRDE1CQlJT01VWF9QQUQoMHgyZmMsIDB4MTA0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTEQxNV9fRkVDX1JYX0NMSwlJT01VWF9QQUQoMHgyZmMsIDB4MTA0LCAweDE1LCAweDUxNCwgMSwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9IU1lOQ19fSFNZTkMJCUlPTVVYX1BBRCgweDMwMCwgMHgxMDgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9IU1lOQ19fR1BJT18xXzIyCUlPTVVYX1BBRCgweDMwMCwgMHgxMDgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX1ZTWU5DX19WU1lOQwkJSU9NVVhfUEFEKDB4MzA0LCAweDEwYywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1ZTWU5DX19HUElPXzFfMjMJSU9NVVhfUEFEKDB4MzA0LCAweDEwYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfTFNDTEtfX0xTQ0xLCQlJT01VWF9QQUQoMHgzMDgsIDB4MTEwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTFNDTEtfX0dQSU9fMV8yNAlJT01VWF9QQUQoMHgzMDgsIDB4MTEwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9PRV9BQ0RfX09FX0FDRAkJSU9NVVhfUEFEKDB4MzBjLCAweDExNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX09FX0FDRF9fR1BJT18xXzI1CUlPTVVYX1BBRCgweDMwYywgMHgxMTQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0NPTlRSQVNUX19DT05UUkFTVAlJT01VWF9QQUQoMHgzMTAsIDB4MTE4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ09OVFJBU1RfX0ZFQ19DUlMJSU9NVVhfUEFEKDB4MzEwLCAweDExOCwgMHgxNSwgMHg1MDgsIDEsIE5PX1BBRF9DVEwpCisKKyNkZWZpbmUgTVgyNV9QQURfUFdNX19QV00JCUlPTVVYX1BBRCgweDMxNCwgMHgxMWMsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9QV01fX0dQSU9fMV8yNgkJSU9NVVhfUEFEKDB4MzE0LCAweDExYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1BXTV9fVVNCSDJfT0MJCUlPTVVYX1BBRCgweDMxNCwgMHgxMWMsIDB4MTYsIDB4NTgwLCAxLCBQQURfQ1RMX1BVU18xMDBLX1VQKQorCisjZGVmaW5lIE1YMjVfUEFEX0NTSV9EMl9fQ1NJX0QyCQlJT01VWF9QQUQoMHgzMTgsIDB4MTIwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0QyX19VQVJUNV9SWERfTVVYCUlPTVVYX1BBRCgweDMxOCwgMHgxMjAsIDB4MTEsIDB4NTc4LCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0QyX19HUElPXzFfMjcJSU9NVVhfUEFEKDB4MzE4LCAweDEyMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0QzX19DU0lfRDMJCUlPTVVYX1BBRCgweDMxYywgMHgxMjQsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DU0lfRDNfX0dQSU9fMV8yOAlJT01VWF9QQUQoMHgzMWMsIDB4MTI0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU0lfRDRfX0NTSV9ENAkJSU9NVVhfUEFEKDB4MzIwLCAweDEyOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTSV9ENF9fVUFSVDVfUlRTCUlPTVVYX1BBRCgweDMyMCwgMHgxMjgsIDB4MTEsIDB4NTc0LCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0Q0X19HUElPXzFfMjkJSU9NVVhfUEFEKDB4MzIwLCAweDEyOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0Q1X19DU0lfRDUJCUlPTVVYX1BBRCgweDMyNCwgMHgxMmMsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DU0lfRDVfX0dQSU9fMV8zMAlJT01VWF9QQUQoMHgzMjQsIDB4MTJjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU0lfRDZfX0NTSV9ENgkJSU9NVVhfUEFEKDB4MzI4LCAweDEzMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTSV9ENl9fR1BJT18xXzMxCUlPTVVYX1BBRCgweDMyOCwgMHgxMzAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0NTSV9EN19fQ1NJX0Q3CQlJT01VWF9QQUQoMHgzMmMsIDB4MTM0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0Q3X19HUElPXzFfNglJT01VWF9QQUQoMHgzMmMsIDB4MTM0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU0lfRDhfX0NTSV9EOAkJSU9NVVhfUEFEKDB4MzMwLCAweDEzOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTSV9EOF9fR1BJT18xXzcJSU9NVVhfUEFEKDB4MzMwLCAweDEzOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0Q5X19DU0lfRDkJCUlPTVVYX1BBRCgweDMzNCwgMHgxM2MsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DU0lfRDlfX0dQSU9fNF8yMQlJT01VWF9QQUQoMHgzMzQsIDB4MTNjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU0lfTUNMS19fQ1NJX01DTEsJSU9NVVhfUEFEKDB4MzM4LCAweDE0MCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTSV9NQ0xLX19HUElPXzFfOAlJT01VWF9QQUQoMHgzMzgsIDB4MTQwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU0lfVlNZTkNfX0NTSV9WU1lOQwlJT01VWF9QQUQoMHgzM2MsIDB4MTQ0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX1ZTWU5DX19HUElPXzFfOQlJT01VWF9QQUQoMHgzM2MsIDB4MTQ0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU0lfSFNZTkNfX0NTSV9IU1lOQwlJT01VWF9QQUQoMHgzNDAsIDB4MTQ4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0hTWU5DX19HUElPXzFfMTAJSU9NVVhfUEFEKDB4MzQwLCAweDE0OCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX1BJWENMS19fQ1NJX1BJWENMSwlJT01VWF9QQUQoMHgzNDQsIDB4MTRjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX1BJWENMS19fR1BJT18xXzExCUlPTVVYX1BBRCgweDM0NCwgMHgxNGMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0kyQzFfQ0xLX19JMkMxX0NMSwlJT01VWF9QQUQoMHgzNDgsIDB4MTUwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfSTJDMV9DTEtfX0dQSU9fMV8xMglJT01VWF9QQUQoMHgzNDgsIDB4MTUwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9JMkMxX0RBVF9fSTJDMV9EQVQJSU9NVVhfUEFEKDB4MzRjLCAweDE1NCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0kyQzFfREFUX19HUElPXzFfMTMJSU9NVVhfUEFEKDB4MzRjLCAweDE1NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1NQSTFfTU9TSV9fQ1NQSTFfTU9TSQlJT01VWF9QQUQoMHgzNTAsIDB4MTU4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NQSTFfTU9TSV9fR1BJT18xXzE0CUlPTVVYX1BBRCgweDM1MCwgMHgxNTgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0NTUEkxX01JU09fX0NTUEkxX01JU08JSU9NVVhfUEFEKDB4MzU0LCAweDE1YywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTUEkxX01JU09fX0dQSU9fMV8xNQlJT01VWF9QQUQoMHgzNTQsIDB4MTVjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU1BJMV9TUzBfX0NTUEkxX1NTMAlJT01VWF9QQUQoMHgzNTgsIDB4MTYwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NQSTFfU1MwX19HUElPXzFfMTYJSU9NVVhfUEFEKDB4MzU4LCAweDE2MCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1NQSTFfU1MxX19DU1BJMV9TUzEJSU9NVVhfUEFEKDB4MzVjLCAweDE2NCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTUEkxX1NTMV9fR1BJT18xXzE3CUlPTVVYX1BBRCgweDM1YywgMHgxNjQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0NTUEkxX1NDTEtfX0NTUEkxX1NDTEsJSU9NVVhfUEFEKDB4MzYwLCAweDE2OCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTUEkxX1NDTEtfX0dQSU9fMV8xOAlJT01VWF9QQUQoMHgzNjAsIDB4MTY4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU1BJMV9SRFlfX0NTUEkxX1JEWQlJT01VWF9QQUQoMHgzNjQsIDB4MTZjLCAweDEwLCAwLCAwLCBQQURfQ1RMX1BLRSkKKyNkZWZpbmUgTVgyNV9QQURfQ1NQSTFfUkRZX19HUElPXzJfMjIJSU9NVVhfUEFEKDB4MzY0LCAweDE2YywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDFfUlhEX19VQVJUMV9SWEQJSU9NVVhfUEFEKDB4MzY4LCAweDE3MCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfMTAwS19ET1dOKQorI2RlZmluZSBNWDI1X1BBRF9VQVJUMV9SWERfX0dQSU9fNF8yMglJT01VWF9QQUQoMHgzNjgsIDB4MTcwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9VQVJUMV9UWERfX1VBUlQxX1RYRAlJT01VWF9QQUQoMHgzNmMsIDB4MTc0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDFfVFhEX19HUElPXzRfMjMJSU9NVVhfUEFEKDB4MzZjLCAweDE3NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDFfUlRTX19VQVJUMV9SVFMJSU9NVVhfUEFEKDB4MzcwLCAweDE3OCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfMTAwS19VUCkKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDFfUlRTX19DU0lfRDAJSU9NVVhfUEFEKDB4MzcwLCAweDE3OCwgMHgxMSwgMHg0ODgsIDEsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9VQVJUMV9SVFNfX0dQSU9fNF8yNAlJT01VWF9QQUQoMHgzNzAsIDB4MTc4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9VQVJUMV9DVFNfX1VBUlQxX0NUUwlJT01VWF9QQUQoMHgzNzQsIDB4MTdjLCAweDEwLCAwLCAwLCBQQURfQ1RMX1BVU18xMDBLX1VQKQorI2RlZmluZSBNWDI1X1BBRF9VQVJUMV9DVFNfX0NTSV9EMQlJT01VWF9QQUQoMHgzNzQsIDB4MTdjLCAweDExLCAweDQ4YywgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1VBUlQxX0NUU19fR1BJT180XzI1CUlPTVVYX1BBRCgweDM3NCwgMHgxN2MsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhECUlPTVVYX1BBRCgweDM3OCwgMHgxODAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9VQVJUMl9SWERfX0dQSU9fNF8yNglJT01VWF9QQUQoMHgzNzgsIDB4MTgwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9VQVJUMl9UWERfX1VBUlQyX1RYRAlJT01VWF9QQUQoMHgzN2MsIDB4MTg0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDJfVFhEX19HUElPXzRfMjcJSU9NVVhfUEFEKDB4MzdjLCAweDE4NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDJfUlRTX19VQVJUMl9SVFMJSU9NVVhfUEFEKDB4MzgwLCAweDE4OCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1VBUlQyX1JUU19fRkVDX0NPTAlJT01VWF9QQUQoMHgzODAsIDB4MTg4LCAweDEyLCAweDUwNCwgMiwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDJfUlRTX19HUElPXzRfMjgJSU9NVVhfUEFEKDB4MzgwLCAweDE4OCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDJfQ1RTX19GRUNfUlhfRVIJSU9NVVhfUEFEKDB4Mzg0LCAweDE4YywgMHgxMiwgMHg1MTgsIDIsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX1VBUlQyX0NUU19fVUFSVDJfQ1RTCUlPTVVYX1BBRCgweDM4NCwgMHgxOGMsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9VQVJUMl9DVFNfX0dQSU9fNF8yOQlJT01VWF9QQUQoMHgzODQsIDB4MThjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9TRDFfQ01EX19TRDFfQ01ECUlPTVVYX1BBRCgweDM4OCwgMHgxOTAsIDB4MTAsIDAsIDAsIFBBRF9DVExfUFVTXzQ3S19VUCkKKyNkZWZpbmUgTVgyNV9QQURfU0QxX0NNRF9fRkVDX1JEQVRBMglJT01VWF9QQUQoMHgzODgsIDB4MTkwLCAweDEyLCAweDUwYywgMiwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfU0QxX0NNRF9fR1BJT18yXzIzCUlPTVVYX1BBRCgweDM4OCwgMHgxOTAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX1NEMV9DTEtfX1NEMV9DTEsJSU9NVVhfUEFEKDB4MzhjLCAweDE5NCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfNDdLX1VQKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfQ0xLX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDM4YywgMHgxOTQsIDB4MTIsIDB4NTEwLCAyLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfQ0xLX19HUElPXzJfMjQJSU9NVVhfUEFEKDB4MzhjLCAweDE5NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEwX19TRDFfREFUQTAJSU9NVVhfUEFEKDB4MzkwLCAweDE5OCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfNDdLX1VQKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTBfX0dQSU9fMl8yNQlJT01VWF9QQUQoMHgzOTAsIDB4MTk4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTFfX1NEMV9EQVRBMQlJT01VWF9QQUQoMHgzOTQsIDB4MTljLCAweDEwLCAwLCAwLCBQQURfQ1RMX1BVU180N0tfVVApCisjZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBMV9fQVVEN19SWEQJSU9NVVhfUEFEKDB4Mzk0LCAweDE5YywgMHgxMywgMHg0NzgsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTFfX0dQSU9fMl8yNglJT01VWF9QQUQoMHgzOTQsIDB4MTljLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTJfX1NEMV9EQVRBMglJT01VWF9QQUQoMHgzOTgsIDB4MWEwLCAweDEwLCAwLCAwLCBQQURfQ1RMX1BVU180N0tfVVApCisjZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBMl9fRkVDX1JYX0NMSwlJT01VWF9QQUQoMHgzOTgsIDB4MWEwLCAweDE1LCAweDUxNCwgMiwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEyX19HUElPXzJfMjcJSU9NVVhfUEFEKDB4Mzk4LCAweDFhMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEzX19TRDFfREFUQTMJSU9NVVhfUEFEKDB4MzljLCAweDFhNCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfNDdLX1VQKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTNfX0ZFQ19DUlMJSU9NVVhfUEFEKDB4MzljLCAweDFhNCwgMHgxMCwgMHg1MDgsIDIsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBM19fR1BJT18yXzI4CUlPTVVYX1BBRCgweDM5YywgMHgxYTQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9ST1cwX19LUFBfUk9XMAlJT01VWF9QQUQoMHgzYTAsIDB4MWE4LCAweDEwLCAwLCAwLCBQQURfQ1RMX1BLRSkKKyNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzBfX0dQSU9fMl8yOQlJT01VWF9QQUQoMHgzYTAsIDB4MWE4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9LUFBfUk9XMV9fS1BQX1JPVzEJSU9NVVhfUEFEKDB4M2E0LCAweDFhYywgMHgxMCwgMCwgMCwgUEFEX0NUTF9QS0UpCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9ST1cxX19HUElPXzJfMzAJSU9NVVhfUEFEKDB4M2E0LCAweDFhYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzJfX0tQUF9ST1cyCUlPTVVYX1BBRCgweDNhOCwgMHgxYjAsIDB4MTAsIDAsIDAsIFBBRF9DVExfUEtFKQorI2RlZmluZSBNWDI1X1BBRF9LUFBfUk9XMl9fQ1NJX0QwCUlPTVVYX1BBRCgweDNhOCwgMHgxYjAsIDB4MTMsIDB4NDg4LCAyLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzJfX0dQSU9fMl8zMQlJT01VWF9QQUQoMHgzYTgsIDB4MWIwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9LUFBfUk9XM19fS1BQX1JPVzMJSU9NVVhfUEFEKDB4M2FjLCAweDFiNCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QS0UpCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9ST1czX19DU0lfTEQxCUlPTVVYX1BBRCgweDNhYywgMHgxYjQsIDB4MTMsIDB4NDhjLCAyLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzNfX0dQSU9fM18wCUlPTVVYX1BBRCgweDNhYywgMHgxYjQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wwX19LUFBfQ09MMAlJT01VWF9QQUQoMHgzYjAsIDB4MWI4LCAweDEwLCAwLCAwLCBQQURfQ1RMX1BLRSB8IFBBRF9DVExfT0RFKQorI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MMF9fR1BJT18zXzEJSU9NVVhfUEFEKDB4M2IwLCAweDFiOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfS1BQX0NPTDFfX0tQUF9DT0wxCUlPTVVYX1BBRCgweDNiNCwgMHgxYmMsIDB4MTAsIDAsIDAsIFBBRF9DVExfUEtFIHwgUEFEX0NUTF9PREUpCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wxX19HUElPXzNfMglJT01VWF9QQUQoMHgzYjQsIDB4MWJjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MMl9fS1BQX0NPTDIJSU9NVVhfUEFEKDB4M2I4LCAweDFjMCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QS0UgfCBQQURfQ1RMX09ERSkKKyNkZWZpbmUgTVgyNV9QQURfS1BQX0NPTDJfX0dQSU9fM18zCUlPTVVYX1BBRCgweDNiOCwgMHgxYzAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wzX19LUFBfQ09MMwlJT01VWF9QQUQoMHgzYmMsIDB4MWM0LCAweDEwLCAwLCAwLCBQQURfQ1RMX1BLRSB8IFBBRF9DVExfT0RFKQorI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MM19fR1BJT18zXzQJSU9NVVhfUEFEKDB4M2JjLCAweDFjNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRkVDX01EQ19fRkVDX01EQwlJT01VWF9QQUQoMHgzYzAsIDB4MWM4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfTURDX19BVUQ0X1RYRAlJT01VWF9QQUQoMHgzYzAsIDB4MWM4LCAweDEyLCAweDQ2NCwgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19NRENfX0dQSU9fM181CUlPTVVYX1BBRCgweDNjMCwgMHgxYzgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19NRElPX19GRUNfTURJTwlJT01VWF9QQUQoMHgzYzQsIDB4MWNjLCAweDEwLCAwLCAwLCBQQURfQ1RMX0hZUyB8IFBBRF9DVExfUFVTXzIyS19VUCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX01ESU9fX0FVRDRfUlhECUlPTVVYX1BBRCgweDNjNCwgMHgxY2MsIDB4MTIsIDB4NDYwLCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX01ESU9fX0dQSU9fM182CUlPTVVYX1BBRCgweDNjNCwgMHgxY2MsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19UREFUQTBfX0ZFQ19UREFUQTAJSU9NVVhfUEFEKDB4M2M4LCAweDFkMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX1REQVRBMF9fR1BJT18zXzcJSU9NVVhfUEFEKDB4M2M4LCAweDFkMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRkVDX1REQVRBMV9fRkVDX1REQVRBMQlJT01VWF9QQUQoMHgzY2MsIDB4MWQ0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfVERBVEExX19BVUQ0X1RYRlMJSU9NVVhfUEFEKDB4M2NjLCAweDFkNCwgMHgxMiwgMHg0NzQsIDEsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfVERBVEExX19HUElPXzNfOAlJT01VWF9QQUQoMHgzY2MsIDB4MWQ0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9GRUNfVFhfRU5fX0ZFQ19UWF9FTglJT01VWF9QQUQoMHgzZDAsIDB4MWQ4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfVFhfRU5fX0dQSU9fM185ICAgCUlPTVVYX1BBRCgweDNkMCwgMHgxZDgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19SREFUQTBfX0ZFQ19SREFUQTAJSU9NVVhfUEFEKDB4M2Q0LCAweDFkYywgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfMTAwS19ET1dOIHwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX1JEQVRBMF9fR1BJT18zXzEwCUlPTVVYX1BBRCgweDNkNCwgMHgxZGMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19SREFUQTFfX0ZFQ19SREFUQTEJSU9NVVhfUEFEKDB4M2Q4LCAweDFlMCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfMTAwS19ET1dOIHwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX1JEQVRBMV9fR1BJT18zXzExCUlPTVVYX1BBRCgweDNkOCwgMHgxZTAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWCUlPTVVYX1BBRCgweDNkYywgMHgxZTQsIDB4MTAsIDAsIDAsIFBBRF9DVExfUFVTXzEwMEtfRE9XTiB8IE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19SWF9EVl9fQ0FOMl9SWAlJT01VWF9QQUQoMHgzZGMsIDB4MWU0LCAweDE0LCAweDQ4NCwgMCwgUEFEX0NUTF9QVVNfMjJLX1VQKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfUlhfRFZfX0dQSU9fM18xMglJT01VWF9QQUQoMHgzZGMsIDB4MWU0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9GRUNfVFhfQ0xLX19GRUNfVFhfQ0xLCUlPTVVYX1BBRCgweDNlMCwgMHgxZTgsIDB4MTAsIDAsIDAsIFBBRF9DVExfSFlTIHwgUEFEX0NUTF9QVVNfMTAwS19ET1dOKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfVFhfQ0xLX19HUElPXzNfMTMJSU9NVVhfUEFEKDB4M2UwLCAweDFlOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfUlRDS19fUlRDSwkJSU9NVVhfUEFEKDB4M2U0LCAweDFlYywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1JUQ0tfX09XSVJFCQlJT01VWF9QQUQoMHgzZTQsIDB4MWVjLCAweDExLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfUlRDS19fR1BJT18zXzE0CUlPTVVYX1BBRCgweDNlNCwgMHgxZWMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0RFX0JfX0RFX0IJCUlPTVVYX1BBRCgweDNlYywgMHgxZjAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9ERV9CX19HUElPXzJfMjAJSU9NVVhfUEFEKDB4M2VjLCAweDFmMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfVERPX19URE8JCUlPTVVYX1BBRCgweDNlOCwgMHgwMDAsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fQV9fR1BJT19BCQlJT01VWF9QQUQoMHgzZjAsIDB4MWY0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfR1BJT19BX19DQU4xX1RYCUlPTVVYX1BBRCgweDNmMCwgMHgxZjQsIDB4MTYsIDAsIDAsIFBBRF9DVExfUFVTXzIyS19VUCkKKyNkZWZpbmUgTVgyNV9QQURfR1BJT19BX19VU0JPVEdfUFdSCUlPTVVYX1BBRCgweDNmMCwgMHgxZjQsIDB4MTIsIDAsIDAsIFBBRF9DVExfUEtFKQorCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fQl9fR1BJT19CCQlJT01VWF9QQUQoMHgzZjQsIDB4MWY4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfR1BJT19CX19DQU4xX1JYCUlPTVVYX1BBRCgweDNmNCwgMHgxZjgsIDB4MTYsIDB4NDgwLCAxLCBQQURfQ1RMX1BVU18yMkspCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fQl9fVVNCT1RHX09DCUlPTVVYX1BBRCgweDNmNCwgMHgxZjgsIDB4MTIsIDB4NTdjLCAxLCBQQURfQ1RMX1BVU18xMDBLX1VQKQorCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fQ19fR1BJT19DCQlJT01VWF9QQUQoMHgzZjgsIDB4MWZjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfR1BJT19DX19DQU4yX1RYCUlPTVVYX1BBRCgweDNmOCwgMHgxZmMsIDB4MTYsIDAsIDAsIFBBRF9DVExfUFVTXzIyS19VUCkKKworI2RlZmluZSBNWDI1X1BBRF9HUElPX0RfX0dQSU9fRAkJSU9NVVhfUEFEKDB4M2ZjLCAweDIwMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fRF9fQ0FOMl9SWAlJT01VWF9QQUQoMHgzZmMsIDB4MjAwLCAweDE2LCAweDQ4NCwgMSwgUEFEX0NUTF9QVVNfMjJLX1VQKQorCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fRV9fR1BJT19FCQlJT01VWF9QQUQoMHg0MDAsIDB4MjA0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfR1BJT19FX19BVUQ3X1RYRAlJT01VWF9QQUQoMHg0MDAsIDB4MjA0LCAweDE0LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9HUElPX0ZfX0dQSU9fRgkJSU9NVVhfUEFEKDB4NDA0LCAweDIwOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fRl9fQVVEN19UWEMJSU9NVVhfUEFEKDB4NDA0LCAweDIwOCwgMHgxNCwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRVhUX0FSTUNMS19fRVhUX0FSTUNMSwlJT01VWF9QQUQoMHgwMDAsIDB4MjBjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRVhUX0FSTUNMS19fR1BJT18zXzE1CUlPTVVYX1BBRCgweDAwMCwgMHgyMGMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX1VQTExfQllQQ0xLX19VUExMX0JZUENMSyBJT01VWF9QQUQoMHgwMDAsIDB4MjEwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfVVBMTF9CWVBDTEtfX0dQSU9fM18xNglJT01VWF9QQUQoMHgwMDAsIDB4MjEwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9WU1RCWV9SRVFfX1ZTVEJZX1JFUQlJT01VWF9QQUQoMHg0MDgsIDB4MjE0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfVlNUQllfUkVRX19BVUQ3X1RYRlMJSU9NVVhfUEFEKDB4NDA4LCAweDIxNCwgMHgxNCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1ZTVEJZX1JFUV9fR1BJT18zXzE3CUlPTVVYX1BBRCgweDQwOCwgMHgyMTQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9WU1RCWV9BQ0tfX1ZTVEJZX0FDSwlJT01VWF9QQUQoMHg0MGMsIDB4MjE4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfVlNUQllfQUNLX19HUElPXzNfMTgJSU9NVVhfUEFEKDB4NDBjLCAweDIxOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfUE9XRVJfRkFJTF9fUE9XRVJfRkFJTAlJT01VWF9QQUQoMHg0MTAsIDB4MjFjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfUE9XRVJfRkFJTF9fQVVEN19SWEQJSU9NVVhfUEFEKDB4NDEwLCAweDIxYywgMHgxNCwgMHg0NzgsIDEsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9QT1dFUl9GQUlMX19HUElPXzNfMTkJSU9NVVhfUEFEKDB4NDEwLCAweDIxYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ0xLT19fQ0xLTwkJSU9NVVhfUEFEKDB4NDE0LCAweDIyMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NMS09fX0dQSU9fMl8yMQlJT01VWF9QQUQoMHg0MTQsIDB4MjIwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9CT09UX01PREUwX19CT09UX01PREUwCUlPTVVYX1BBRCgweDAwMCwgMHgyMjQsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9CT09UX01PREUwX19HUElPXzRfMzAJSU9NVVhfUEFEKDB4MDAwLCAweDIyNCwgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0JPT1RfTU9ERTFfX0JPT1RfTU9ERTEJSU9NVVhfUEFEKDB4MDAwLCAweDIyOCwgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0JPT1RfTU9ERTFfX0dQSU9fNF8zMQlJT01VWF9QQUQoMHgwMDAsIDB4MjI4LCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RWU19NSVNDCUlPTVVYX1BBRCgweDQxOCwgMHgwMDAsIDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RTRV9GRUMJSU9NVVhfUEFEKDB4NDFjLCAweDAwMCwgMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NUTF9HUlBfRFZTX0pUQUcJSU9NVVhfUEFEKDB4NDIwLCAweDAwMCwgMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NUTF9HUlBfRFNFX05GQwlJT01VWF9QQUQoMHg0MjQsIDB4MDAwLCAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1RMX0dSUF9EU0VfQ1NJCUlPTVVYX1BBRCgweDQyOCwgMHgwMDAsIDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RTRV9XRUlNCUlPTVVYX1BBRCgweDQyYywgMHgwMDAsIDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RTRV9ERFIJSU9NVVhfUEFEKDB4NDMwLCAweDAwMCwgMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NUTF9HUlBfRFZTX0NSTQlJT01VWF9QQUQoMHg0MzQsIDB4MDAwLCAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1RMX0dSUF9EU0VfS1BQCUlPTVVYX1BBRCgweDQzOCwgMHgwMDAsIDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RTRV9TREhDMQlJT01VWF9QQUQoMHg0M2MsIDB4MDAwLCAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1RMX0dSUF9EU0VfTENECUlPTVVYX1BBRCgweDQ0MCwgMHgwMDAsIDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RTRV9VQVJUCUlPTVVYX1BBRCgweDQ0NCwgMHgwMDAsIDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RWU19ORkMJSU9NVVhfUEFEKDB4NDQ4LCAweDAwMCwgMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NUTF9HUlBfRFZTX0NTSQlJT01VWF9QQUQoMHg0NGMsIDB4MDAwLCAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1RMX0dSUF9EU0VfQ1NQSTEJSU9NVVhfUEFEKDB4NDUwLCAweDAwMCwgMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NUTF9HUlBfRERSVFlQRQlJT01VWF9QQUQoMHg0NTQsIDB4MDAwLCAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1RMX0dSUF9EVlNfU0RIQzEJSU9NVVhfUEFEKDB4NDU4LCAweDAwMCwgMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NUTF9HUlBfRFZTX0xDRAlJT01VWF9QQUQoMHg0NWMsIDB4MDAwLCAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2VuZGlmIC8vIF9fQVNTRU1CTFlfXworI2VuZGlmIC8vIF9fSU9NVVhfTVgyNV9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDMuaAppbmRleCAyZWIxODJmLi40NDZmODY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14My5oCkBAIC02MzUsNiArNjM1LDE5IEBACiAjZGVmaW5lIE1YMzFfUElOX1VTQk9UR19ESVJfX1VTQk9UR19ESVIgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX0RJUiwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX1VTQk9UR19OWFRfX1VTQk9UR19OWFQgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX05YVCwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX1VTQk9UR19TVFBfX1VTQk9UR19TVFAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX1NUUCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX01PU0lfX1VTQkgxX1JYRE0gICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfTU9TSSwgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX01JU09fX1VTQkgxX1JYRFAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfTUlTTywgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NTMF9fVVNCSDFfVFhETSAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU1MwLCAgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NTMV9fVVNCSDFfVFhEUCAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU1MxLCAgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NTMl9fVVNCSDFfUkNWICAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU1MyLCAgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NDTEtfX1VTQkgxX09FQiAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU0NMSywgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NQSV9SRFlfX1VTQkgxX0ZTICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU1BJX1JEWSwgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX1VTQkgyX0RBVEEwX19VU0JIMl9EQVRBMCAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCSDJfREFUQTAsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9VU0JIMl9EQVRBMV9fVVNCSDJfREFUQTEgICAgICBJT01VWF9NT0RFKE1YMzFfUElOX1VTQkgyX0RBVEExLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fVVNCSDJfQ0xLX19VU0JIMl9DTEsgICAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JIMl9DTEssIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9VU0JIMl9ESVJfX1VTQkgyX0RJUiAgICAgICAgICBJT01VWF9NT0RFKE1YMzFfUElOX1VTQkgyX0RJUiwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX1VTQkgyX05YVF9fVVNCSDJfTlhUICAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCSDJfTlhULCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fVVNCSDJfU1RQX19VU0JIMl9TVFAgICAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JIMl9TVFAsIElPTVVYX0NPTkZJR19GVU5DKQogI2RlZmluZSBNWDMxX1BJTl9VU0JfT0NfX0dQSU8xXzMwCUlPTVVYX01PREUoTVgzMV9QSU5fVVNCX09DLCBJT01VWF9DT05GSUdfR1BJTykKICNkZWZpbmUgTVgzMV9QSU5fSTJDX0RBVF9fSTJDMV9TREEJSU9NVVhfTU9ERShNWDMxX1BJTl9JMkNfREFULCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fSTJDX0NMS19fSTJDMV9TQ0wJSU9NVVhfTU9ERShNWDMxX1BJTl9JMkNfQ0xLLCBJT01VWF9DT05GSUdfRlVOQykKQEAgLTY2OSw2ICs2ODIsMTggQEAKICNkZWZpbmUgTVgzMV9QSU5fR1BJTzNfMF9fR1BJTzNfMAlJT01VWF9NT0RFKE1YMzFfUElOX0dQSU8zXzAsIElPTVVYX0NPTkZJR19HUElPKQogI2RlZmluZSBNWDMxX1BJTl9HUElPM18xX19HUElPM18xCUlPTVVYX01PREUoTVgzMV9QSU5fR1BJTzNfMSwgSU9NVVhfQ09ORklHX0dQSU8pCiAjZGVmaW5lIE1YMzFfUElOX1RYRDJfX0dQSU8xXzI4CQlJT01VWF9NT0RFKE1YMzFfUElOX1RYRDIsIElPTVVYX0NPTkZJR19HUElPKQorI2RlZmluZSBNWDMxX1BJTl9HUElPMV8wX19HUElPMV8wCUlPTVVYX01PREUoTVgzMV9QSU5fR1BJTzFfMCwgSU9NVVhfQ09ORklHX0dQSU8pCisjZGVmaW5lIE1YMzFfUElOX1NWRU4wX19HUElPMl8wCQlJT01VWF9NT0RFKE1YMzFfUElOX1NWRU4wLCBJT01VWF9DT05GSUdfR1BJTykKKyNkZWZpbmUgTVgzMV9QSU5fU1RYMF9fR1BJTzJfMQkJSU9NVVhfTU9ERShNWDMxX1BJTl9TVFgwLCBJT01VWF9DT05GSUdfR1BJTykKKyNkZWZpbmUgTVgzMV9QSU5fU1JYMF9fR1BJTzJfMgkJSU9NVVhfTU9ERShNWDMxX1BJTl9TUlgwLCBJT01VWF9DT05GSUdfR1BJTykKKyNkZWZpbmUgTVgzMV9QSU5fU0lNUEQwX19HUElPMl8zCUlPTVVYX01PREUoTVgzMV9QSU5fU0lNUEQwLCBJT01VWF9DT05GSUdfR1BJTykKKyNkZWZpbmUgTVgzMV9QSU5fRFRSX0RDRTFfX0dQSU8yXzgJSU9NVVhfTU9ERShNWDMxX1BJTl9EVFJfRENFMSwgSU9NVVhfQ09ORklHX0dQSU8pCisjZGVmaW5lIE1YMzFfUElOX0RTUl9EQ0UxX19HUElPMl85CUlPTVVYX01PREUoTVgzMV9QSU5fRFNSX0RDRTEsIElPTVVYX0NPTkZJR19HUElPKQorI2RlZmluZSBNWDMxX1BJTl9SSV9EQ0UxX19HUElPMl8xMAlJT01VWF9NT0RFKE1YMzFfUElOX1JJX0RDRTEsIElPTVVYX0NPTkZJR19HUElPKQorI2RlZmluZSBNWDMxX1BJTl9EQ0RfRENFMV9fR1BJTzJfMTEJSU9NVVhfTU9ERShNWDMxX1BJTl9EQ0RfRENFMSwgSU9NVVhfQ09ORklHX0dQSU8pCisjZGVmaW5lIE1YMzFfUElOX1NUWEQ1X19HUElPMV8yMSAgICAgICBJT01VWF9NT0RFKE1YMzFfUElOX1NUWEQ1LCBJT01VWF9DT05GSUdfR1BJTykKKyNkZWZpbmUgTVgzMV9QSU5fU1JYRDVfX0dQSU8xXzIyICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fU1JYRDUsIElPTVVYX0NPTkZJR19HUElPKQorCiAKIC8qWFhYOiBUaGUgU1MwLCBTUzEsIFNTMiwgU1MzIGxpbmVzIG9mIHNwaTMgYXJlIG11bHRpcGxleGVkIGJ5IGNzcGkyX3NzMCwgY3NwaTJfc3MxLCBjc3BpMV9zczAKICAqIGNzcGkxX3NzMSovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXhjOTEyMzEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teGM5MTIzMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMTMwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXhjOTEyMzEuaApAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBieSBEbWl0cml5IFRheWNoZW5hY2hldiA8ZGltaWNoeHBAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9fTUFDSF9JT01VWF9NWEM5MTIzMV9IX18KKyNkZWZpbmUgX19NQUNIX0lPTVVYX01YQzkxMjMxX0hfXworCisvKgorICogdmFyaW91cyBJT01VWCBvdXRwdXQgZnVuY3Rpb25zCisgKi8KKworI2RlZmluZQlJT01VWF9PQ09ORklHX0dQSU8gKDAgPDwgNCkJLyogdXNlZCBhcyBHUElPICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfRlVOQyAoMSA8PCA0KQkvKiB1c2VkIGFzIGZ1bmN0aW9uICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfQUxUMSAoMiA8PCA0KQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiAxICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfQUxUMiAoMyA8PCA0KQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiAyICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfQUxUMyAoNCA8PCA0KQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiAzICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfQUxUNCAoNSA8PCA0KQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiA0ICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfQUxUNSAoNiA8PCA0KQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiA1ICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfQUxUNiAoNyA8PCA0KQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiA2ICovCisjZGVmaW5lCUlPTVVYX0lDT05GSUdfTk9ORSAgMAkgCS8qIG5vdCBjb25maWd1cmVkIGZvciBpbnB1dCAqLworI2RlZmluZQlJT01VWF9JQ09ORklHX0dQSU8gIDEJCS8qIHVzZWQgYXMgR1BJTyAqLworI2RlZmluZQlJT01VWF9JQ09ORklHX0ZVTkMgIDIJCS8qIHVzZWQgYXMgZnVuY3Rpb24gKi8KKyNkZWZpbmUJSU9NVVhfSUNPTkZJR19BTFQxICA0CQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiAxICovCisjZGVmaW5lCUlPTVVYX0lDT05GSUdfQUxUMiAgOAkJLyogdXNlZCBhcyBhbHRlcm5hdGUgZnVuY3Rpb24gMiAqLworCisjZGVmaW5lIElPTVVYX0NPTkZJR19HUElPIChJT01VWF9PQ09ORklHX0dQSU8gfCBJT01VWF9JQ09ORklHX0dQSU8pCisjZGVmaW5lIElPTVVYX0NPTkZJR19GVU5DIChJT01VWF9PQ09ORklHX0ZVTkMgfCBJT01VWF9JQ09ORklHX0ZVTkMpCisjZGVmaW5lIElPTVVYX0NPTkZJR19BTFQxIChJT01VWF9PQ09ORklHX0FMVDEgfCBJT01VWF9JQ09ORklHX0FMVDEpCisjZGVmaW5lIElPTVVYX0NPTkZJR19BTFQyIChJT01VWF9PQ09ORklHX0FMVDIgfCBJT01VWF9JQ09ORklHX0FMVDIpCisKKy8qCisgKiBzZXR1cHMgYSBzaW5nbGUgcGluOgorICogCS0gcmVzZXJ2ZXMgdGhlIHBpbiBzbyB0aGF0IGl0IGlzIG5vdCBjbGFpbWVkIGJ5IGFub3RoZXIgZHJpdmVyCisgKiAJLSBzZXR1cHMgdGhlIGlvbXV4IGFjY29yZGluZyB0byB0aGUgY29uZmlndXJhdGlvbgorICogCS0gaWYgdGhlIHBpbiBpcyBjb25maWd1cmVkIGFzIGEgR1BJTywgd2UgY2xhaW0gaXQgdGhyb3VnIGtlcm5lbCBncGlvbGliCisgKi8KK2ludCBteGNfaW9tdXhfYWxsb2NfcGluKGNvbnN0IHVuc2lnbmVkIGludCBwaW5fbW9kZSwgY29uc3QgY2hhciAqbGFiZWwpOworLyoKKyAqIHNldHVwcyBtdXRsaXBsZSBwaW5zCisgKiBjb252ZW5pZW50IHdheSB0byBjYWxsIHRoZSBhYm92ZSBmdW5jdGlvbiB3aXRoIHRhYmxlcworICovCitpbnQgbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModW5zaWduZWQgaW50ICpwaW5fbGlzdCwgdW5zaWduZWQgY291bnQsCisJCWNvbnN0IGNoYXIgKmxhYmVsKTsKKworLyoKKyAqIHJlbGVhc2VzIGEgc2luZ2xlIHBpbjoKKyAqIAktIG1ha2UgaXQgYXZhaWxhYmxlIGZvciBhIGZ1dHVyZSB1c2UgYnkgYW5vdGhlciBkcml2ZXIKKyAqIAktIGZyZWVzIHRoZSBHUElPIGlmIHRoZSBwaW4gd2FzIGNvbmZpZ3VyZWQgYXMgR1BJTworICogCS0gRE9FUyBOT1QgcmVjb25maWd1cmUgdGhlIElPTVVYIGluIGl0cyByZXNldCBzdGF0ZQorICovCit2b2lkIG14Y19pb211eF9yZWxlYXNlX3Bpbihjb25zdCB1bnNpZ25lZCBpbnQgcGluX21vZGUpOworLyoKKyAqIHJlbGVhc2VzIG11bHRpcGxlIHBpbnMKKyAqIGNvbnZlbnZpZW50IHdheSB0byBjYWxsIHRoZSBhYm92ZSBmdW5jdGlvbiB3aXRoIHRhYmxlcworICovCit2b2lkIG14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnModW5zaWduZWQgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KTsKKworI2RlZmluZSBNVVhfU0lERV9BUAkJKDApCisjZGVmaW5lIE1VWF9TSURFX1NQCQkoMSkKKworI2RlZmluZSBNVVhfU0lERV9TSElGVAkJKDI2KQorI2RlZmluZSBNVVhfU0lERV9NQVNLCQkoMHgxIDw8IE1VWF9TSURFX1NISUZUKQorCisjZGVmaW5lIE1VWF9HUElPX1BPUlRfU0hJRlQJKDIzKQorI2RlZmluZSBNVVhfR1BJT19QT1JUX01BU0sJKDB4NyA8PCBNVVhfR1BJT19QT1JUX1NISUZUKQorCisjZGVmaW5lIE1VWF9HUElPX1BJTl9TSElGVAkoMjApCisjZGVmaW5lIE1VWF9HUElPX1BJTl9NQVNLCSgweDFmIDw8IE1VWF9HUElPX1BJTl9TSElGVCkKKworI2RlZmluZSBNVVhfUkVHX1NISUZUCQkoMTUpCisjZGVmaW5lIE1VWF9SRUdfTUFTSwkJKDB4MWYgPDwgTVVYX1JFR19TSElGVCkKKworI2RlZmluZSBNVVhfRklFTERfU0hJRlQJCSgxMykKKyNkZWZpbmUgTVVYX0ZJRUxEX01BU0sJCSgweDMgPDwgTVVYX0ZJRUxEX1NISUZUKQorCisjZGVmaW5lIE1VWF9QQURHUlBfU0hJRlQJKDgpCisjZGVmaW5lIE1VWF9QQURHUlBfTUFTSwkJKDB4MWYgPDwgTVVYX1BBREdSUF9TSElGVCkKKworI2RlZmluZSBNVVhfUElOX01BU0sJCSgweGZmZmZmZiA8PCA4KQorCisjZGVmaW5lIEdQSU9fUE9SVF9NQVgJCSgzKQorCisjZGVmaW5lIElPTVVYX1BJTihzaWRlLCBncG9ydCwgZ3BpbiwgY3RscmVnLCBjdGxmaWVsZCwgcGFkZ3JwKSBcCisJKCgoc2lkZSkgPDwgTVVYX1NJREVfU0hJRlQpIHwJCSAgXAorCSAoZ3BvcnQgPDwgTVVYX0dQSU9fUE9SVF9TSElGVCkgfAkJXAorCSAoKGdwaW4pIDw8IE1VWF9HUElPX1BJTl9TSElGVCkgfAkJXAorCSAoKGN0bHJlZykgPDwgTVVYX1JFR19TSElGVCkgfAkJXAorCSAoKGN0bGZpZWxkKSA8PCBNVVhfRklFTERfU0hJRlQpIHwJCVwKKwkgKChwYWRncnApIDw8IE1VWF9QQURHUlBfU0hJRlQpKQorCisjZGVmaW5lIE1VWF9NT0RFX09VVF9TSElGVAkoNCkKKyNkZWZpbmUgTVVYX01PREVfSU5fU0hJRlQJKDApCisjZGVmaW5lIE1VWF9NT0RFX1NISUZUCQkoMCkKKyNkZWZpbmUgTVVYX01PREVfTUFTSwkJKDB4ZmYgPDwgTVVYX01PREVfU0hJRlQpCisKKyNkZWZpbmUgSU9NVVhfTU9ERShwaW4sIG1vZGUpIFwKKwkocGluIHwgKG1vZGUgPDwgTVVYX01PREVfU0hJRlQpKQorCitlbnVtIGlvbXV4X3BpbnMgeworCS8qIEFQIFNpZGUgcGlucyAqLworCU1YQzkxMjMxX1BJTl9BUF9DTEUJCT0gSU9NVVhfUElOKDAsIDAsICAwLCAgMCwgMCwgMjQpLAorCU1YQzkxMjMxX1BJTl9BUF9BTEUJCT0gSU9NVVhfUElOKDAsIDAsICAxLCAgMCwgMSwgMjQpLAorCU1YQzkxMjMxX1BJTl9BUF9DRV9CCQk9IElPTVVYX1BJTigwLCAwLCAgMiwgIDAsIDIsIDI0KSwKKwlNWEM5MTIzMV9QSU5fQVBfUkVfQgkJPSBJT01VWF9QSU4oMCwgMCwgIDMsICAwLCAzLCAyNCksCisJTVhDOTEyMzFfUElOX0FQX1dFX0IJCT0gSU9NVVhfUElOKDAsIDAsICA0LCAgMSwgMCwgMjQpLAorCU1YQzkxMjMxX1BJTl9BUF9XUF9CCQk9IElPTVVYX1BJTigwLCAwLCAgNSwgIDEsIDEsIDI0KSwKKwlNWEM5MTIzMV9QSU5fQVBfQlNZX0IJCT0gSU9NVVhfUElOKDAsIDAsICA2LCAgMSwgMiwgMjQpLAorCU1YQzkxMjMxX1BJTl9BUF9VMV9UWEQJCT0gSU9NVVhfUElOKDAsIDAsICA3LCAgMSwgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9VMV9SWEQJCT0gSU9NVVhfUElOKDAsIDAsICA4LCAgMiwgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9VMV9SVFNfQgk9IElPTVVYX1BJTigwLCAwLCAgOSwgIDIsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfVTFfQ1RTX0IJPSBJT01VWF9QSU4oMCwgMCwgMTAsICAyLCAyLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0FEMV9UWEQJCT0gSU9NVVhfUElOKDAsIDAsIDExLCAgMiwgMywgIDkpLAorCU1YQzkxMjMxX1BJTl9BUF9BRDFfUlhECQk9IElPTVVYX1BJTigwLCAwLCAxMiwgIDMsIDAsICA5KSwKKwlNWEM5MTIzMV9QSU5fQVBfQUQxX1RYQwkJPSBJT01VWF9QSU4oMCwgMCwgMTMsICAzLCAxLCAgOSksCisJTVhDOTEyMzFfUElOX0FQX0FEMV9UWEZTCT0gSU9NVVhfUElOKDAsIDAsIDE0LCAgMywgMiwgIDkpLAorCU1YQzkxMjMxX1BJTl9BUF9BRDJfVFhECQk9IElPTVVYX1BJTigwLCAwLCAxNSwgIDMsIDMsICA5KSwKKwlNWEM5MTIzMV9QSU5fQVBfQUQyX1JYRAkJPSBJT01VWF9QSU4oMCwgMCwgMTYsICA0LCAwLCAgOSksCisJTVhDOTEyMzFfUElOX0FQX0FEMl9UWEMJCT0gSU9NVVhfUElOKDAsIDAsIDE3LCAgNCwgMSwgIDkpLAorCU1YQzkxMjMxX1BJTl9BUF9BRDJfVFhGUwk9IElPTVVYX1BJTigwLCAwLCAxOCwgIDQsIDIsICA5KSwKKwlNWEM5MTIzMV9QSU5fQVBfT1dEQVQJCT0gSU9NVVhfUElOKDAsIDAsIDE5LCAgNCwgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQxNwk9IElPTVVYX1BJTigwLCAwLCAyMCwgIDUsIDAsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0QzX1ZTWU5DCT0gSU9NVVhfUElOKDAsIDAsIDIxLCAgNSwgMSwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfRDNfSFNZTkMJPSBJT01VWF9QSU4oMCwgMCwgMjIsICA1LCAyLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9EM19DTEsJPSBJT01VWF9QSU4oMCwgMCwgMjMsICA1LCAzLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9EM19EUkRZCT0gSU9NVVhfUElOKDAsIDAsIDI0LCAgNiwgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfRDNfQ09OVFIJPSBJT01VWF9QSU4oMCwgMCwgMjUsICA2LCAxLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9EMF9DUwk9IElPTVVYX1BJTigwLCAwLCAyNiwgIDYsIDIsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0xEMTYJPSBJT01VWF9QSU4oMCwgMCwgMjcsICA2LCAzLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9EMl9DUwk9IElPTVVYX1BJTigwLCAwLCAyOCwgIDcsIDAsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX1BBUl9SUwk9IElPTVVYX1BJTigwLCAwLCAyOSwgIDcsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0QzX1BTCT0gSU9NVVhfUElOKDAsIDAsIDMwLCAgNywgMiwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfRDNfQ0xTCT0gSU9NVVhfUElOKDAsIDAsIDMxLCAgNywgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfUkQJCT0gSU9NVVhfUElOKDAsIDEsICAwLCAgOCwgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfV1IJCT0gSU9NVVhfUElOKDAsIDEsICAxLCAgOCwgMSwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQwCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgIDgsIDIsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0xEMQkJPSBJT01VWF9QSU4oMCwgNywgIDAsICA4LCAzLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9MRDIJCT0gSU9NVVhfUElOKDAsIDcsICAwLCAgOSwgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQzCQk9IElPTVVYX1BJTigwLCAxLCAgMiwgIDksIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0xENAkJPSBJT01VWF9QSU4oMCwgMSwgIDMsICA5LCAyLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9MRDUJCT0gSU9NVVhfUElOKDAsIDEsICA0LCAgOSwgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQ2CQk9IElPTVVYX1BJTigwLCAxLCAgNSwgMTAsIDAsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0xENwkJPSBJT01VWF9QSU4oMCwgMSwgIDYsIDEwLCAxLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9MRDgJCT0gSU9NVVhfUElOKDAsIDEsICA3LCAxMCwgMiwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQ5CQk9IElPTVVYX1BJTigwLCAxLCAgOCwgMTAsIDMsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0xEMTAJPSBJT01VWF9QSU4oMCwgMSwgIDksIDExLCAwLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9MRDExCT0gSU9NVVhfUElOKDAsIDEsIDEwLCAxMSwgMSwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQxMgk9IElPTVVYX1BJTigwLCAxLCAxMSwgMTEsIDIsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0xEMTMJPSBJT01VWF9QSU4oMCwgMSwgMTIsIDExLCAzLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9MRDE0CT0gSU9NVVhfUElOKDAsIDEsIDEzLCAxMiwgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQxNQk9IElPTVVYX1BJTigwLCAxLCAxNCwgMTIsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BST1c0CQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMTIsIDIsIDEwKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BST1c1CQk9IElPTVVYX1BJTigwLCAxLCAxNiwgMTIsIDMsIDEwKSwKKwlNWEM5MTIzMV9QSU5fQVBfR1BJT19BUF9CMTcJPSBJT01VWF9QSU4oMCwgMSwgMTcsIDEzLCAwLCAxMCksCisJTVhDOTEyMzFfUElOX0FQX0dQSU9fQVBfQjE4CT0gSU9NVVhfUElOKDAsIDEsIDE4LCAxMywgMSwgMTApLAorCU1YQzkxMjMxX1BJTl9BUF9LUENPTDMJCT0gSU9NVVhfUElOKDAsIDEsIDE5LCAxMywgMiwgMTEpLAorCU1YQzkxMjMxX1BJTl9BUF9LUENPTDQJCT0gSU9NVVhfUElOKDAsIDEsIDIwLCAxMywgMywgMTEpLAorCU1YQzkxMjMxX1BJTl9BUF9LUENPTDUJCT0gSU9NVVhfUElOKDAsIDEsIDIxLCAxNCwgMCwgMTEpLAorCU1YQzkxMjMxX1BJTl9BUF9HUElPX0FQX0IyMgk9IElPTVVYX1BJTigwLCAxLCAyMiwgMTQsIDEsIDExKSwKKwlNWEM5MTIzMV9QSU5fQVBfR1BJT19BUF9CMjMJPSBJT01VWF9QSU4oMCwgMSwgMjMsIDE0LCAyLCAxMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9EMAkJPSBJT01VWF9QSU4oMCwgMSwgMjQsIDE0LCAzLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9EMQkJPSBJT01VWF9QSU4oMCwgMSwgMjUsIDE1LCAwLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9EMgkJPSBJT01VWF9QSU4oMCwgMSwgMjYsIDE1LCAxLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9EMwkJPSBJT01VWF9QSU4oMCwgMSwgMjcsIDE1LCAyLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9ENAkJPSBJT01VWF9QSU4oMCwgMSwgMjgsIDE1LCAzLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9ENQkJPSBJT01VWF9QSU4oMCwgMSwgMjksIDE2LCAwLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9ENgkJPSBJT01VWF9QSU4oMCwgMSwgMzAsIDE2LCAxLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9ENwkJPSBJT01VWF9QSU4oMCwgMSwgMzEsIDE2LCAyLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9EOAkJPSBJT01VWF9QSU4oMCwgMiwgIDAsIDE2LCAzLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9EOQkJPSBJT01VWF9QSU4oMCwgMiwgIDEsIDE3LCAwLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9NQ0xLCT0gSU9NVVhfUElOKDAsIDIsICAyLCAxNywgMSwgMjEpLAorCU1YQzkxMjMxX1BJTl9BUF9DU0lfVlNZTkMJPSBJT01VWF9QSU4oMCwgMiwgIDMsIDE3LCAyLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9IU1lOQwk9IElPTVVYX1BJTigwLCAyLCAgNCwgMTcsIDMsIDIxKSwKKwlNWEM5MTIzMV9QSU5fQVBfQ1NJX1BJWENMSwk9IElPTVVYX1BJTigwLCAyLCAgNSwgMTgsIDAsIDIxKSwKKwlNWEM5MTIzMV9QSU5fQVBfSTJDTEsJCT0gSU9NVVhfUElOKDAsIDIsICA2LCAxOCwgMSwgMTIpLAorCU1YQzkxMjMxX1BJTl9BUF9JMkRBVAkJPSBJT01VWF9QSU4oMCwgMiwgIDcsIDE4LCAyLCAxMiksCisJTVhDOTEyMzFfUElOX0FQX0dQSU9fQVBfQzgJPSBJT01VWF9QSU4oMCwgMiwgIDgsIDE4LCAzLCAgOSksCisJTVhDOTEyMzFfUElOX0FQX0dQSU9fQVBfQzkJPSBJT01VWF9QSU4oMCwgMiwgIDksIDE5LCAwLCAgOSksCisJTVhDOTEyMzFfUElOX0FQX0dQSU9fQVBfQzEwCT0gSU9NVVhfUElOKDAsIDIsIDEwLCAxOSwgMSwgIDkpLAorCU1YQzkxMjMxX1BJTl9BUF9HUElPX0FQX0MxMQk9IElPTVVYX1BJTigwLCAyLCAxMSwgMTksIDIsICA5KSwKKwlNWEM5MTIzMV9QSU5fQVBfR1BJT19BUF9DMTIJPSBJT01VWF9QSU4oMCwgMiwgMTIsIDE5LCAzLCAgOSksCisJTVhDOTEyMzFfUElOX0FQX0dQSU9fQVBfQzEzCT0gSU9NVVhfUElOKDAsIDIsIDEzLCAyMCwgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9HUElPX0FQX0MxNAk9IElPTVVYX1BJTigwLCAyLCAxNCwgMjAsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfR1BJT19BUF9DMTUJPSBJT01VWF9QSU4oMCwgMiwgMTUsIDIwLCAyLCAgOSksCisJTVhDOTEyMzFfUElOX0FQX0dQSU9fQVBfQzE2CT0gSU9NVVhfUElOKDAsIDIsIDE2LCAyMCwgMywgIDkpLAorCU1YQzkxMjMxX1BJTl9BUF9HUElPX0FQX0MxNwk9IElPTVVYX1BJTigwLCAyLCAxNywgMjEsIDAsICA5KSwKKwlNWEM5MTIzMV9QSU5fQVBfRURfSU5UMAkJPSBJT01VWF9QSU4oMCwgMiwgMTgsIDIxLCAxLCAyMiksCisJTVhDOTEyMzFfUElOX0FQX0VEX0lOVDEJCT0gSU9NVVhfUElOKDAsIDIsIDE5LCAyMSwgMiwgMjIpLAorCU1YQzkxMjMxX1BJTl9BUF9FRF9JTlQyCQk9IElPTVVYX1BJTigwLCAyLCAyMCwgMjEsIDMsIDIyKSwKKwlNWEM5MTIzMV9QSU5fQVBfRURfSU5UMwkJPSBJT01VWF9QSU4oMCwgMiwgMjEsIDIyLCAwLCAyMiksCisJTVhDOTEyMzFfUElOX0FQX0VEX0lOVDQJCT0gSU9NVVhfUElOKDAsIDIsIDIyLCAyMiwgMSwgMjMpLAorCU1YQzkxMjMxX1BJTl9BUF9FRF9JTlQ1CQk9IElPTVVYX1BJTigwLCAyLCAyMywgMjIsIDIsIDIzKSwKKwlNWEM5MTIzMV9QSU5fQVBfRURfSU5UNgkJPSBJT01VWF9QSU4oMCwgMiwgMjQsIDIyLCAzLCAyMyksCisJTVhDOTEyMzFfUElOX0FQX0VEX0lOVDcJCT0gSU9NVVhfUElOKDAsIDIsIDI1LCAyMywgMCwgMjMpLAorCU1YQzkxMjMxX1BJTl9BUF9VMl9EU1JfQgk9IElPTVVYX1BJTigwLCAyLCAyNiwgMjMsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfVTJfUklfQgkJPSBJT01VWF9QSU4oMCwgMiwgMjcsIDIzLCAyLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX1UyX0NUU19CCT0gSU9NVVhfUElOKDAsIDIsIDI4LCAyMywgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9VMl9EVFJfQgk9IElPTVVYX1BJTigwLCAyLCAyOSwgMjQsIDAsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BST1cwCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMjQsIDEsIDEwKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BST1cxCQk9IElPTVVYX1BJTigwLCAxLCAxNSwgMjQsIDIsIDEwKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BST1cyCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMjQsIDMsIDEwKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BST1czCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMjUsIDAsIDEwKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BDT0wwCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMjUsIDEsIDExKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BDT0wxCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMjUsIDIsIDExKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BDT0wyCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMjUsIDMsIDExKSwKKworCS8qIFNoYXJlZCBwaW5zICovCisJTVhDOTEyMzFfUElOX1NQX1UzX1RYRAkJPSBJT01VWF9QSU4oMSwgMywgIDAsICAwLCAwLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1UzX1JYRAkJPSBJT01VWF9QSU4oMSwgMywgIDEsICAwLCAxLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1UzX1JUU19CCT0gSU9NVVhfUElOKDEsIDMsICAyLCAgMCwgMiwgMjgpLAorCU1YQzkxMjMxX1BJTl9TUF9VM19DVFNfQgk9IElPTVVYX1BJTigxLCAzLCAgMywgIDAsIDMsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVVNCX1RYT0VfQgk9IElPTVVYX1BJTigxLCAzLCAgNCwgIDEsIDAsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVVNCX0RBVF9WUAk9IElPTVVYX1BJTigxLCAzLCAgNSwgIDEsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVVNCX1NFMF9WTQk9IElPTVVYX1BJTigxLCAzLCAgNiwgIDEsIDIsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVVNCX1JYRAkJPSBJT01VWF9QSU4oMSwgMywgIDcsICAxLCAzLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1VIMl9UWE9FX0IJPSBJT01VWF9QSU4oMSwgMywgIDgsICAyLCAwLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1VIMl9TUEVFRAk9IElPTVVYX1BJTigxLCAzLCAgOSwgIDIsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVUgyX1NVU1BFTgk9IElPTVVYX1BJTigxLCAzLCAxMCwgIDIsIDIsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVUgyX1RYRFAJPSBJT01VWF9QSU4oMSwgMywgMTEsICAyLCAzLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1VIMl9SWERQCT0gSU9NVVhfUElOKDEsIDMsIDEyLCAgMywgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9TUF9VSDJfUlhETQk9IElPTVVYX1BJTigxLCAzLCAxMywgIDMsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVUgyX09WUgkJPSBJT01VWF9QSU4oMSwgMywgMTQsICAzLCAyLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1VIMl9QV1IJCT0gSU9NVVhfUElOKDEsIDMsIDE1LCAgMywgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9TUF9TRDFfREFUMAk9IElPTVVYX1BJTigxLCAzLCAxNiwgIDQsIDAsIDI1KSwKKwlNWEM5MTIzMV9QSU5fU1BfU0QxX0RBVDEJPSBJT01VWF9QSU4oMSwgMywgMTcsICA0LCAxLCAyNSksCisJTVhDOTEyMzFfUElOX1NQX1NEMV9EQVQyCT0gSU9NVVhfUElOKDEsIDMsIDE4LCAgNCwgMiwgMjUpLAorCU1YQzkxMjMxX1BJTl9TUF9TRDFfREFUMwk9IElPTVVYX1BJTigxLCAzLCAxOSwgIDQsIDMsIDI1KSwKKwlNWEM5MTIzMV9QSU5fU1BfU0QxX0NNRAkJPSBJT01VWF9QSU4oMSwgMywgMjAsICA1LCAwLCAyNSksCisJTVhDOTEyMzFfUElOX1NQX1NEMV9DTEsJCT0gSU9NVVhfUElOKDEsIDMsIDIxLCAgNSwgMSwgMjUpLAorCU1YQzkxMjMxX1BJTl9TUF9TRDJfREFUMAk9IElPTVVYX1BJTigxLCAzLCAyMiwgIDUsIDIsIDI2KSwKKwlNWEM5MTIzMV9QSU5fU1BfU0QyX0RBVDEJPSBJT01VWF9QSU4oMSwgMywgMjMsICA1LCAzLCAyNiksCisJTVhDOTEyMzFfUElOX1NQX1NEMl9EQVQyCT0gSU9NVVhfUElOKDEsIDMsIDI0LCAgNiwgMCwgMjYpLAorCU1YQzkxMjMxX1BJTl9TUF9TRDJfREFUMwk9IElPTVVYX1BJTigxLCAzLCAyNSwgIDYsIDEsIDI2KSwKKwlNWEM5MTIzMV9QSU5fU1BfR1BJT19TUF9BMjYJPSBJT01VWF9QSU4oMSwgMywgMjYsICA2LCAyLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1NQSTFfQ0xLCT0gSU9NVVhfUElOKDEsIDMsIDI3LCAgNiwgMywgMTMpLAorCU1YQzkxMjMxX1BJTl9TUF9TUEkxX01PU0kJPSBJT01VWF9QSU4oMSwgMywgMjgsICA3LCAwLCAxMyksCisJTVhDOTEyMzFfUElOX1NQX1NQSTFfTUlTTwk9IElPTVVYX1BJTigxLCAzLCAyOSwgIDcsIDEsIDEzKSwKKwlNWEM5MTIzMV9QSU5fU1BfU1BJMV9TUzAJPSBJT01VWF9QSU4oMSwgMywgMzAsICA3LCAyLCAxMyksCisJTVhDOTEyMzFfUElOX1NQX1NQSTFfU1MxCT0gSU9NVVhfUElOKDEsIDMsIDMxLCAgNywgMywgMTMpLAorCU1YQzkxMjMxX1BJTl9TUF9TRDJfQ01ECQk9IElPTVVYX1BJTigxLCA3LCAgMCwgIDgsIDAsIDI2KSwKKwlNWEM5MTIzMV9QSU5fU1BfU0QyX0NMSwkJPSBJT01VWF9QSU4oMSwgNywgIDAsICA4LCAxLCAyNiksCisJTVhDOTEyMzFfUElOX1NQX1NJTTFfUlNUX0IJPSBJT01VWF9QSU4oMSwgMiwgMzAsICA4LCAyLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1NJTTFfU1ZFTgk9IElPTVVYX1BJTigxLCA3LCAgMCwgIDgsIDMsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfU0lNMV9DTEsJPSBJT01VWF9QSU4oMSwgNywgIDAsICA5LCAwLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1NJTTFfVFJYRAk9IElPTVVYX1BJTigxLCA3LCAgMCwgIDksIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfU0lNMV9QRAkJPSBJT01VWF9QSU4oMSwgMiwgMzEsICA5LCAyLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1VIMl9UWERNCT0gSU9NVVhfUElOKDEsIDcsICAwLCAgOSwgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9TUF9VSDJfUlhECQk9IElPTVVYX1BJTigxLCA3LCAgMCwgMTAsIDAsIDI4KSwKK307CisKKyNkZWZpbmUgUElOX0FQX01BWAkoMTA0KQorI2RlZmluZSBQSU5fU1BfTUFYCSg0MSkKKworI2RlZmluZSBQSU5fTUFYCQkoUElOX0FQX01BWCArIFBJTl9TUF9NQVgpCisKKy8qCisgKiBDb252ZW5pZW5jZSB2YWx1ZXMgZm9yIHVzZSB3aXRoIG14Y19pb211eF9tb2RlKCkKKyAqCisgKiBGb3JtYXQgaGVyZSBpcyBNWEM5MTIzMV9QSU5fKHBpbiBuYW1lKV9fKGZ1bmN0aW9uKQorICovCisKKyNkZWZpbmUgTVhDOTEyMzFfUElOX1NQX1VTQl9EQVRfVlBfX1VTQl9EQVRfVlAgXAorCUlPTVVYX01PREUoTVhDOTEyMzFfUElOX1NQX1VTQl9EQVRfVlAsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWEM5MTIzMV9QSU5fU1BfVVNCX1NFMF9WTV9fVVNCX1NFMF9WTSBcCisJSU9NVVhfTU9ERShNWEM5MTIzMV9QSU5fU1BfVVNCX1NFMF9WTSwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YQzkxMjMxX1BJTl9TUF9VU0JfREFUX1ZQX19SWEQyIFwKKwlJT01VWF9NT0RFKE1YQzkxMjMxX1BJTl9TUF9VU0JfREFUX1ZQLCBJT01VWF9DT05GSUdfQUxUMSkKKyNkZWZpbmUgTVhDOTEyMzFfUElOX1NQX1VTQl9TRTBfVk1fX1RYRDIgXAorCUlPTVVYX01PREUoTVhDOTEyMzFfUElOX1NQX1VTQl9TRTBfVk0sIElPTVVYX0NPTkZJR19BTFQxKQorCisKKyNlbmRpZiAvKiBfX01BQ0hfSU9NVVhfTVhDOTEyMzFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtdjMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC12My5oCmluZGV4IDdjZDg0NTQuLmEwZmE0MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC12My5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC12My5oCkBAIC02OCwyOCArNjgsMjQgQEAKIC8qCiAgKiBVc2UgdG8gc2V0IFBBRCBjb250cm9sCiAgKi8KLSNkZWZpbmUgUEFEX0NUTF9EUklWRV9WT0xUQUdFXzNfM19WCTAKLSNkZWZpbmUgUEFEX0NUTF9EUklWRV9WT0xUQUdFXzFfOF9WCTEKIAotI2RlZmluZSBQQURfQ1RMX05PX0hZU1RFUkVTSVMJCTAKLSNkZWZpbmUgUEFEX0NUTF9IWVNURVJFU0lTCQkxCisjZGVmaW5lIFBBRF9DVExfRFZTCQkJKDEgPDwgMTMpCisjZGVmaW5lIFBBRF9DVExfSFlTCQkJKDEgPDwgOCkKIAotI2RlZmluZSBQQURfQ1RMX1BVTExfRElTQUJMRUQJCTB4MAotI2RlZmluZSBQQURfQ1RMX1BVTExfS0VFUEVSCQkweGEKLSNkZWZpbmUgUEFEX0NUTF9QVUxMX0RPV05fMTAwSwkJMHhjCi0jZGVmaW5lIFBBRF9DVExfUFVMTF9VUF80N0sJCTB4ZAotI2RlZmluZSBQQURfQ1RMX1BVTExfVVBfMTAwSwkJMHhlCi0jZGVmaW5lIFBBRF9DVExfUFVMTF9VUF8yMksJCTB4ZgorI2RlZmluZSBQQURfQ1RMX1BLRQkJCSgxIDw8IDcpCisjZGVmaW5lIFBBRF9DVExfUFVFCQkJKDEgPDwgNikKKyNkZWZpbmUgUEFEX0NUTF9QVVNfMTAwS19ET1dOCQkoMCA8PCA0KQorI2RlZmluZSBQQURfQ1RMX1BVU180N0tfVVAJCSgxIDw8IDQpCisjZGVmaW5lIFBBRF9DVExfUFVTXzEwMEtfVVAJCSgyIDw8IDQpCisjZGVmaW5lIFBBRF9DVExfUFVTXzIyS19VUAkJKDMgPDwgNCkKIAotI2RlZmluZSBQQURfQ1RMX09VVFBVVF9DTU9TCQkwCi0jZGVmaW5lIFBBRF9DVExfT1VUUFVUX09QRU5fRFJBSU4JMQorI2RlZmluZSBQQURfQ1RMX09ERQkJCSgxIDw8IDMpCiAKLSNkZWZpbmUgUEFEX0NUTF9EUklWRV9TVFJFTkdUSF9OT1JNCTAKLSNkZWZpbmUgUEFEX0NUTF9EUklWRV9TVFJFTkdUSF9ISUdICTEKLSNkZWZpbmUgUEFEX0NUTF9EUklWRV9TVFJFTkdUSF9NQVgJMgorI2RlZmluZSBQQURfQ1RMX0RTRV9TVEFOREFSRAkJKDAgPDwgMSkKKyNkZWZpbmUgUEFEX0NUTF9EU0VfSElHSAkJKDEgPDwgMSkKKyNkZWZpbmUgUEFEX0NUTF9EU0VfTUFYCQkJKDIgPDwgMSkKIAotI2RlZmluZSBQQURfQ1RMX1NMRVdfUkFURV9TTE9XCQkwCi0jZGVmaW5lIFBBRF9DVExfU0xFV19SQVRFX0ZBU1QJCTEKKyNkZWZpbmUgUEFEX0NUTF9TUkVfRkFTVAkJKDEgPDwgMCkKIAogLyoKICAqIHNldHVwcyBhIHNpbmdsZSBwYWQ6CkBAIC0xMTcsNSArMTEzLDEwIEBACiAgKi8KIHZvaWQgbXhjX2lvbXV4X3YzX3JlbGVhc2VfbXVsdGlwbGVfcGFkcyhzdHJ1Y3QgcGFkX2Rlc2MgKnBhZF9saXN0LCBpbnQgY291bnQpOwogCisvKgorICogSW5pdGlhbGlzZSB0aGUgaW9tdXggY29udHJvbGxlcgorICovCit2b2lkIG14Y19pb211eF92M19pbml0KHZvaWQgX19pb21lbSAqaW9tdXhfdjNfYmFzZSk7CisKICNlbmRpZiAvKiBfX01BQ0hfSU9NVVhfVjNfSF9fKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXguaAppbmRleCAxNzFmOGFkLi42ZDQ5ZjhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXguaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXguaApAQCAtNDksNiArNDksOSBAQAogI2lmZGVmIENPTkZJR19BUkNIX01YMgogIyBkZWZpbmUgR1BJT19QT1JUX01BWCAgNQogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgyNQorIyBkZWZpbmUgR1BJT19QT1JUX01BWCAgMworI2VuZGlmCiAKICNpZm5kZWYgR1BJT19QT1JUX01BWAogIyBlcnJvciAiR1BJTyBjb25maWcgcG9ydCBjb3VudCB1bmtub3duISIKQEAgLTEwNyw2ICsxMTAsOSBAQAogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNy5oPgogI2VuZGlmCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDI1CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI1Lmg+CisjZW5kaWYKIAogCiAvKiBkZWNvZGUgaXJxIG51bWJlciB0byB1c2Ugd2l0aCBJTVIoeCksIElTUih4KSBhbmQgZnJpZW5kcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggNTE4YTM2NS4uZWFkOWQ1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0yNCw2ICsyNCwxMCBAQAogI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA2KQogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMKICNkZWZpbmUgTVhDX0dQSU9fSVJRUwkJKDMyICogMykKKyNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgyNQorI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA0KQorI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWEM5MTIzMQorI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA0KQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggNjA2NWUwMC4uZDNhZmFmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMjIsNiArMjIsMTAgQEAKICNlbmRpZgogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ODAwMDAwMDApCisjZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMjUKKyNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ODAwMDAwMDApCisjZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YQzkxMjMxCisjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDkwMDAwMDAwKQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NWDFfVklERU8pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgxLmgKaW5kZXggMTAwMGJmMy4uMWIyODkwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDEuaApAQCAtMTIsMTAgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgxX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19NWDFfSF9fCiAKLSNpZm5kZWYgX19BU01fQVJDSF9NWENfSEFSRFdBUkVfSF9fCi0jZXJyb3IgIkRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5LiIKLSNlbmRpZgotCiAjaW5jbHVkZSA8bWFjaC92bWFsbG9jLmg+CiAKIC8qCkBAIC0xMzgsMjAgKzEzNCw2IEBACiAjZGVmaW5lIEdQSU9fSU5UX1BPUlRECQk2MgogI2RlZmluZSBXRFRfSU5UCQkJNjMKIAotLyogZ3BpbyBhbmQgZ3BpbyBiYXNlZCBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KLSNkZWZpbmUgR1BJT19EUgkJIAkweDFDCi0jZGVmaW5lIEdQSU9fR0RJUgkgCTB4MDAKLSNkZWZpbmUgR1BJT19QU1IJIAkweDI0Ci0jZGVmaW5lIEdQSU9fSUNSMQkgCTB4MjgKLSNkZWZpbmUgR1BJT19JQ1IyCSAJMHgyQwotI2RlZmluZSBHUElPX0lNUgkgCTB4MzAKLSNkZWZpbmUgR1BJT19JU1IJIAkweDM0Ci0jZGVmaW5lIEdQSU9fSU5UX0xPV19MRVYJMHgzCi0jZGVmaW5lIEdQSU9fSU5UX0hJR0hfTEVWCTB4MgotI2RlZmluZSBHUElPX0lOVF9SSVNFX0VER0UgCTB4MAotI2RlZmluZSBHUElPX0lOVF9GQUxMX0VER0UJMHgxCi0jZGVmaW5lIEdQSU9fSU5UX05PTkUJCTB4NAotCiAvKiBETUEgKi8KICNkZWZpbmUgRE1BX1JFUV9VQVJUM19UCQkyCiAjZGVmaW5lIERNQV9SRVFfVUFSVDNfUgkJMwpAQCAtMTc5LDggKzE2MSw0IEBACiAjZGVmaW5lIERNQV9SRVFfVUFSVDFfVAkJMzAKICNkZWZpbmUgRE1BX1JFUV9VQVJUMV9SCQkzMQogCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19ERUJVR19MTCAqLwotI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCi0KICNlbmRpZiAvKiAgX19BU01fQVJDSF9NWENfTVgxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDIxLmgKaW5kZXggOGIwNzBhMC4uMjExMTJjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjEuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyMS5oCkBAIC0yNSwxMSArMjUsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19NWDIxX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19NWDIxX0hfXwogCi0jaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0hBUkRXQVJFX0hfXwotI2Vycm9yICJEbyBub3QgaW5jbHVkZSBkaXJlY3RseS4iCi0jZW5kaWYKLQotCiAvKiBNZW1vcnkgcmVnaW9ucyBhbmQgQ1MgKi8KICNkZWZpbmUgU0RSQU1fQkFTRV9BRERSICAgICAgICAgMHhDMDAwMDAwMAogI2RlZmluZSBDU0QxX0JBU0VfQUREUiAgICAgICAgICAweEM0MDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzY0YmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjUuaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9fTUFDSF9NWDI1X0hfXworI2RlZmluZSBfX01BQ0hfTVgyNV9IX18KKworI2RlZmluZSBNWDI1X0FJUFMxX0JBU0VfQUREUgkJMHg0M0YwMDAwMAorI2RlZmluZSBNWDI1X0FJUFMxX0JBU0VfQUREUl9WSVJUCTB4RkMwMDAwMDAKKyNkZWZpbmUgTVgyNV9BSVBTMV9TSVpFCQkJU1pfMU0KKyNkZWZpbmUgTVgyNV9BSVBTMl9CQVNFX0FERFIJCTB4NTNGMDAwMDAKKyNkZWZpbmUgTVgyNV9BSVBTMl9CQVNFX0FERFJfVklSVAkweEZDMjAwMDAwCisjZGVmaW5lIE1YMjVfQUlQUzJfU0laRQkJCVNaXzFNCisjZGVmaW5lIE1YMjVfQVZJQ19CQVNFX0FERFIJCTB4NjgwMDAwMDAKKyNkZWZpbmUgTVgyNV9BVklDX0JBU0VfQUREUl9WSVJUCTB4RkM0MDAwMDAKKyNkZWZpbmUgTVgyNV9BVklDX1NJWkUJCQlTWl8xTQorCisjZGVmaW5lIE1YMjVfSU9NVVhDX0JBU0VfQUREUgkJKE1YMjVfQUlQUzFfQkFTRV9BRERSICsgMHhhYzAwMCkKKworI2RlZmluZSBNWDI1X0NSTV9CQVNFX0FERFIJCShNWDI1X0FJUFMyX0JBU0VfQUREUiArIDB4ODAwMDApCisjZGVmaW5lIE1YMjVfR1BUMV9CQVNFX0FERFIJCShNWDI1X0FJUFMyX0JBU0VfQUREUiArIDB4OTAwMDApCisjZGVmaW5lIE1YMjVfV0RPR19CQVNFX0FERFIJCShNWDI1X0FJUFMyX0JBU0VfQUREUiArIDB4ZGMwMDApCisKKyNkZWZpbmUgTVgyNV9HUElPMV9CQVNFX0FERFJfVklSVAkoTVgyNV9BSVBTMl9CQVNFX0FERFJfVklSVCArIDB4Y2MwMDApCisjZGVmaW5lIE1YMjVfR1BJTzJfQkFTRV9BRERSX1ZJUlQJKE1YMjVfQUlQUzJfQkFTRV9BRERSX1ZJUlQgKyAweGQwMDAwKQorI2RlZmluZSBNWDI1X0dQSU8zX0JBU0VfQUREUl9WSVJUCShNWDI1X0FJUFMyX0JBU0VfQUREUl9WSVJUICsgMHhhNDAwMCkKKyNkZWZpbmUgTVgyNV9HUElPNF9CQVNFX0FERFJfVklSVAkoTVgyNV9BSVBTMl9CQVNFX0FERFJfVklSVCArIDB4OWMwMDApCisKKyNkZWZpbmUgTVgyNV9BSVBTMV9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBNWDI1X0FJUFMxX0JBU0VfQUREUikgKyBNWDI1X0FJUFMxX0JBU0VfQUREUl9WSVJUKQorI2RlZmluZSBNWDI1X0FJUFMyX0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIE1YMjVfQUlQUzJfQkFTRV9BRERSKSArIE1YMjVfQUlQUzJfQkFTRV9BRERSX1ZJUlQpCisjZGVmaW5lIE1YMjVfQVZJQ19JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBNWDI1X0FWSUNfQkFTRV9BRERSKSArIE1YMjVfQVZJQ19CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBfX2luX3JhbmdlKGFkZHIsIG5hbWUpCSgoYWRkcikgPj0gbmFtZSMjX0JBU0VfQUREUiAmJiAoYWRkcikgPCBuYW1lIyNfQkFTRV9BRERSICsgbmFtZSMjX1NJWkUpCisKKyNkZWZpbmUgTVgyNV9JT19BRERSRVNTKHgpCQkJCQlcCisJKHZvaWQgX19mb3JjZSBfX2lvbWVtICopCQkJCVwKKwkoX19pbl9yYW5nZSh4LCBNWDI1X0FJUFMxKSA/IE1YMjVfQUlQUzFfSU9fQUREUkVTUyh4KSA6CVwKKwlfX2luX3JhbmdlKHgsIE1YMjVfQUlQUzIpID8gTVgyNV9BSVBTMl9JT19BRERSRVNTKHgpIDoJXAorCV9faW5fcmFuZ2UoeCwgTVgyNV9BVklDKSA/IE1YMjVfQVZJQ19JT19BRERSRVNTKHgpIDoJXAorCTB4REVBREJFRUYpCisKKyNkZWZpbmUgVUFSVDFfQkFTRV9BRERSCQkJMHg0M2Y5MDAwMAorI2RlZmluZSBVQVJUMl9CQVNFX0FERFIJCQkweDQzZjk0MDAwCisKKyNlbmRpZiAvKiBfX01BQ0hfTVgyNV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI3LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNy5oCmluZGV4IDZlOTNmMmMuLmRjM2FkOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI3LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjcuaApAQCAtMjQsMTAgKzI0LDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgyN19IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfTVgyN19IX18KIAotI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19IQVJEV0FSRV9IX18KLSNlcnJvciAiRG8gbm90IGluY2x1ZGUgZGlyZWN0bHkuIgotI2VuZGlmCi0KIC8qIElSQU0gKi8KICNkZWZpbmUgSVJBTV9CQVNFX0FERFIgICAgICAgICAgMHhGRkZGNEMwMAkvKiBpbnRlcm5hbCByYW0gKi8KIApAQCAtMTIwLDcgKzExNiw0IEBACiAKIC8qIE1hbmRhdG9yeSBkZWZpbmVzIHVzZWQgZ2xvYmFsbHkgKi8KIAotLyogdGhpcyBDUFUgc3VwcG9ydHMgdXAgdG8gMTkyIEdQSU9zIChkb24ndCBmb3JnZXQgdGhlIGJhc2Vib2FyZCEpICovCi0jZGVmaW5lIEFSQ0hfTlJfR1BJT1MJCSgxOTIgKyAxNikKLQogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX01YMjdfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyeC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MnguaAppbmRleCBmYzQwZDNhLi5kYjVkOTIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyeC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDJ4LmgKQEAgLTIzLDEwICsyMyw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX01YMnhfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX01YMnhfSF9fCiAKLSNpZm5kZWYgX19BU01fQVJDSF9NWENfSEFSRFdBUkVfSF9fCi0jZXJyb3IgIkRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5LiIKLSNlbmRpZgotCiAvKiBUaGUgZm9sbG93aW5nIGFkZHJlc3NlcyBhcmUgY29tbW9uIGJldHdlZW4gaS5NWDIxIGFuZCBpLk1YMjcgKi8KIAogLyogUmVnaXN0ZXIgb2ZmZXN0cyAqLwpAQCAtMTU0LDIwICsxNTAsNiBAQAogI2RlZmluZSBNWENfSU5UX0dQSU8JCTgKICNkZWZpbmUgTVhDX0lOVF9DU1BJMwkJNgogCi0vKiBncGlvIGFuZCBncGlvIGJhc2VkIGludGVycnVwdCBoYW5kbGluZyAqLwotI2RlZmluZSBHUElPX0RSCQkgCTB4MUMKLSNkZWZpbmUgR1BJT19HRElSCSAJMHgwMAotI2RlZmluZSBHUElPX1BTUgkgCTB4MjQKLSNkZWZpbmUgR1BJT19JQ1IxCSAJMHgyOAotI2RlZmluZSBHUElPX0lDUjIJIAkweDJDCi0jZGVmaW5lIEdQSU9fSU1SCSAJMHgzMAotI2RlZmluZSBHUElPX0lTUgkgCTB4MzQKLSNkZWZpbmUgR1BJT19JTlRfTE9XX0xFVgkweDMKLSNkZWZpbmUgR1BJT19JTlRfSElHSF9MRVYJMHgyCi0jZGVmaW5lIEdQSU9fSU5UX1JJU0VfRURHRSAJMHgwCi0jZGVmaW5lIEdQSU9fSU5UX0ZBTExfRURHRQkweDEKLSNkZWZpbmUgR1BJT19JTlRfTk9ORQkJMHg0Ci0KIC8qIGZpeGVkIERNQSByZXF1ZXN0IG51bWJlcnMgKi8KICNkZWZpbmUgRE1BX1JFUV9DU0lfUlggICAgICAgICAgMzEKICNkZWZpbmUgRE1BX1JFUV9DU0lfU1RBVCAgICAgICAgMzAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDMxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oCmluZGV4IDBiMDY5NDFiLi4xNGFjMGRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDMxLmgKQEAgLTQsNyArNCw3IEBACiAjZGVmaW5lIE1YMzFfSVJBTV9CQVNFX0FERFIJCTB4MUZGQzAwMDAJLyogaW50ZXJuYWwgcmFtICovCiAjZGVmaW5lIE1YMzFfSVJBTV9TSVpFCQkJU1pfMTZLCiAKLSNkZWZpbmUgT1RHX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwODgwMDApCisjZGVmaW5lIE1YMzFfT1RHX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA4ODAwMCkKICNkZWZpbmUgQVRBX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwOEMwMDApCiAjZGVmaW5lIFVBUlQ0X0JBU0VfQUREUiAJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQjAwMDApCiAjZGVmaW5lIFVBUlQ1X0JBU0VfQUREUiAJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQjQwMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzNS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzUuaAppbmRleCA2NDY1ZmVmLi5hYjRjZmVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzNS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDM1LmgKQEAgLTUsNiArNSw3IEBACiAjZGVmaW5lIE1YMzVfSVJBTV9TSVpFCQlTWl8xMjhLCiAKICNkZWZpbmUgTVhDX0ZFQ19CQVNFX0FERFIJMHg1MDAzODAwMAorI2RlZmluZSBNWDM1X09UR19CQVNFX0FERFIJMHg1M2ZmNDAwMAogI2RlZmluZSBNWDM1X05GQ19CQVNFX0FERFIJMHhCQjAwMDAwMAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M3guaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDN4LmgKaW5kZXggYjU1OWE0Yi4uMDA5ZjQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M3guaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzeC5oCkBAIC0xMSwxMCArMTEsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19NWDMxX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19NWDMxX0hfXwogCi0jaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0hBUkRXQVJFX0hfXwotI2Vycm9yICJEbyBub3QgaW5jbHVkZSBkaXJlY3RseS4iCi0jZW5kaWYKLQogLyoKICAqIE1YMzEgbWVtb3J5IG1hcDoKICAqCkBAIC0yNjMsMjUgKzI1OSw4IEBACiAjZGVmaW5lIFNZU1RFTV9SRVZfTUlOCQlDSElQX1JFVl8xXzAKICNkZWZpbmUgU1lTVEVNX1JFVl9OVU0JCTMKIAotLyogZ3BpbyBhbmQgZ3BpbyBiYXNlZCBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KLSNkZWZpbmUgR1BJT19EUgkJIAkweDAwCi0jZGVmaW5lIEdQSU9fR0RJUgkgCTB4MDQKLSNkZWZpbmUgR1BJT19QU1IJIAkweDA4Ci0jZGVmaW5lIEdQSU9fSUNSMQkgCTB4MEMKLSNkZWZpbmUgR1BJT19JQ1IyCSAJMHgxMAotI2RlZmluZSBHUElPX0lNUgkgCTB4MTQKLSNkZWZpbmUgR1BJT19JU1IJIAkweDE4Ci0jZGVmaW5lIEdQSU9fSU5UX0xPV19MRVYJMHgwCi0jZGVmaW5lIEdQSU9fSU5UX0hJR0hfTEVWCTB4MQotI2RlZmluZSBHUElPX0lOVF9SSVNFX0VER0UJMHgyCi0jZGVmaW5lIEdQSU9fSU5UX0ZBTExfRURHRQkweDMKLSNkZWZpbmUgR1BJT19JTlRfTk9ORQkJMHg0Ci0KIC8qIE1hbmRhdG9yeSBkZWZpbmVzIHVzZWQgZ2xvYmFsbHkgKi8KIAotLyogdGhpcyBDUFUgc3VwcG9ydHMgdXAgdG8gOTYgR1BJT3MgKi8KLSNkZWZpbmUgQVJDSF9OUl9HUElPUwkJOTYKLQogI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgIWRlZmluZWQoX19NWENfQk9PVF9VTkNPTVBSRVNTKQogCiBleHRlcm4gdW5zaWduZWQgaW50IHN5c3RlbV9yZXY7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjLmgKaW5kZXggNWZhMmEwNy4uNTE5OTA1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Yy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGMuaApAQCAtMjYsOSArMjYsMTEgQEAKIAogI2RlZmluZSBNWENfQ1BVX01YMQkJMQogI2RlZmluZSBNWENfQ1BVX01YMjEJCTIxCisjZGVmaW5lIE1YQ19DUFVfTVgyNQkJMjUKICNkZWZpbmUgTVhDX0NQVV9NWDI3CQkyNwogI2RlZmluZSBNWENfQ1BVX01YMzEJCTMxCiAjZGVmaW5lIE1YQ19DUFVfTVgzNQkJMzUKKyNkZWZpbmUgTVhDX0NQVV9NWEM5MTIzMQk5MTIzMQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogZXh0ZXJuIHVuc2lnbmVkIGludCBfX214Y19jcHVfdHlwZTsKQEAgLTU4LDYgKzYwLDE4IEBACiAjIGRlZmluZSBjcHVfaXNfbXgyMSgpCQkoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgyNQorIyBpZmRlZiBteGNfY3B1X3R5cGUKKyMgIHVuZGVmIG14Y19jcHVfdHlwZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBfX214Y19jcHVfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIE1YQ19DUFVfTVgyNQorIyBlbmRpZgorIyBkZWZpbmUgY3B1X2lzX214MjUoKQkJKG14Y19jcHVfdHlwZSA9PSBNWENfQ1BVX01YMjUpCisjZWxzZQorIyBkZWZpbmUgY3B1X2lzX214MjUoKQkJKDApCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19NQUNIX01YMjcKICMgaWZkZWYgbXhjX2NwdV90eXBlCiAjICB1bmRlZiBteGNfY3B1X3R5cGUKQEAgLTk0LDEzICsxMDgsMjUgQEAKICMgZGVmaW5lIGNwdV9pc19teDM1KCkJCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9NWEM5MTIzMQorIyBpZmRlZiBteGNfY3B1X3R5cGUKKyMgIHVuZGVmIG14Y19jcHVfdHlwZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBfX214Y19jcHVfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIE1YQ19DUFVfTVhDOTEyMzEKKyMgZW5kaWYKKyMgZGVmaW5lIGNwdV9pc19teGM5MTIzMSgpCShteGNfY3B1X3R5cGUgPT0gTVhDX0NQVV9NWEM5MTIzMSkKKyNlbHNlCisjIGRlZmluZSBjcHVfaXNfbXhjOTEyMzEoKQkoMCkKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NWDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfTVgyKQogI2RlZmluZSBDU0NSX1UobikgKElPX0FERFJFU1MoV0VJTV9CQVNFX0FERFIpICsgbiAqIDB4MTApCiAjZGVmaW5lIENTQ1JfTChuKSAoSU9fQUREUkVTUyhXRUlNX0JBU0VfQUREUikgKyBuICogMHgxMCArIDB4NCkKICNkZWZpbmUgQ1NDUl9BKG4pIChJT19BRERSRVNTKFdFSU1fQkFTRV9BRERSKSArIG4gKiAweDEwICsgMHg4KQogI2VuZGlmCiAKLSNkZWZpbmUgY3B1X2lzX214MygpCShjcHVfaXNfbXgzMSgpIHx8IGNwdV9pc19teDM1KCkpCisjZGVmaW5lIGNwdV9pc19teDMoKQkoY3B1X2lzX214MzEoKSB8fCBjcHVfaXNfbXgzNSgpIHx8IGNwdV9pc19teGM5MTIzMSgpKQogI2RlZmluZSBjcHVfaXNfbXgyKCkJKGNwdV9pc19teDIxKCkgfHwgY3B1X2lzX214MjcoKSkKIAogI2VuZGlmIC8qICBfX0FTTV9BUkNIX01YQ19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGM5MTIzMS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214YzkxMjMxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE0ODRkMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGM5MTIzMS5oCkBAIC0wLDAgKzEsMzE1IEBACisvKgorICogIENvcHlyaWdodCAyMDA0LTIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgIC0gUGxhdGZvcm0gc3BlY2lmaWMgcmVnaXN0ZXIgbWVtb3J5IG1hcAorICoKKyAqICBDb3B5cmlnaHQgMjAwNS0yMDA3IE1vdG9yb2xhLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fTUFDSF9NWEM5MTIzMV9IX18KKyNkZWZpbmUgX19NQUNIX01YQzkxMjMxX0hfXworCisvKgorICogTDJDQworICovCisjZGVmaW5lIE1YQzkxMjMxX0wyQ0NfQkFTRV9BRERSCQkweDMwMDAwMDAwCisjZGVmaW5lIE1YQzkxMjMxX0wyQ0NfQkFTRV9BRERSX1ZJUlQJMHhGOTAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9MMkNDX1NJWkUJCVNaXzY0SworCisvKgorICogQUlQUyAxCisgKi8KKyNkZWZpbmUgTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSCTB4NDNGMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSX1ZJUlQJMHhGQzAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9BSVBTMV9TSVpFCQlTWl8xTQorCisjZGVmaW5lIE1YQzkxMjMxX0FJUFMxX0NUUkxfQkFTRV9BRERSCU1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUgorI2RlZmluZSBNWEM5MTIzMV9NQVhfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHgwNDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfRVZUTU9OX0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHgwODAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfQ0xLQ1RMX0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHgwQzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfRVRCX1NMT1Q0X0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHgxMDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfRVRCX1NMT1Q1X0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHgxNDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfRUNUX0NUSU9fQkFTRV9BRERSCShNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFIgKyAweDE4MDAwKQorI2RlZmluZSBNWEM5MTIzMV9JMkNfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHg4MDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfTVVfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHg4ODAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfVUFSVDFfQkFTRV9BRERSCShNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFIgKyAweDkwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9VQVJUMl9CQVNFX0FERFIJKE1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUiArIDB4OTQwMDApCisjZGVmaW5lIE1YQzkxMjMxX0RTTV9CQVNFX0FERFIJCShNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFIgKyAweDk4MDAwKQorI2RlZmluZSBNWEM5MTIzMV9PV0lSRV9CQVNFX0FERFIJKE1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUiArIDB4OUMwMDApCisjZGVmaW5lIE1YQzkxMjMxX1NTSTFfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHhBMDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfS1BQX0JBU0VfQUREUgkJKE1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUiArIDB4QTgwMDApCisjZGVmaW5lIE1YQzkxMjMxX0lPTVVYX0FQX0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHhBQzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfQ1RJX0FQX0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHhCODAwMCkKKworLyoKKyAqIEFJUFMgMgorICovCisjZGVmaW5lIE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUgkweDUzRjAwMDAwCisjZGVmaW5lIE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUl9WSVJUCTB4RkMxMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfQUlQUzJfU0laRQkJU1pfMU0KKworI2RlZmluZSBNWEM5MTIzMV9HRU1LX0JBU0VfQUREUgkJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4OEMwMDApCisjZGVmaW5lIE1YQzkxMjMxX0dQVDFfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHg5MDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfRVBJVDFfQVBfQkFTRV9BRERSCShNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFIgKyAweDk0MDAwKQorI2RlZmluZSBNWEM5MTIzMV9TQ0NfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHhBQzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfUk5HQV9CQVNFX0FERFIJCShNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFIgKyAweEIwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9JUFVfQ1RSTF9CQVNFX0FERFIJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4QzAwMDApCisjZGVmaW5lIE1YQzkxMjMxX0FVRE1VWF9CQVNFX0FERFIJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4QzQwMDApCisjZGVmaW5lIE1YQzkxMjMxX0VESU9fQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHhDODAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfR1BJTzFfQVBfQkFTRV9BRERSCShNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFIgKyAweENDMDAwKQorI2RlZmluZSBNWEM5MTIzMV9HUElPMl9BUF9CQVNFX0FERFIJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4RDAwMDApCisjZGVmaW5lIE1YQzkxMjMxX1NETUFfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHhENDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfUlRDX0JBU0VfQUREUgkJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4RDgwMDApCisjZGVmaW5lIE1YQzkxMjMxX1dET0cxX0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHhEQzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfUFdNX0JBU0VfQUREUgkJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4RTAwMDApCisjZGVmaW5lIE1YQzkxMjMxX0dQSU8zX0FQX0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHhFNDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfV0RPRzJfQkFTRV9BRERSCShNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFIgKyAweEU4MDAwKQorI2RlZmluZSBNWEM5MTIzMV9SVElDX0JBU0VfQUREUgkJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4RUMwMDApCisjZGVmaW5lIE1YQzkxMjMxX0xQTUNfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHhGMDAwMCkKKworLyoKKyAqIFNQQkEgZ2xvYmFsIG1vZHVsZSAwCisgKi8KKyNkZWZpbmUgTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSCTB4NTAwMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSX1ZJUlQJMHhGQzIwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9TUEJBMF9TSVpFCQlTWl8xTQorCisjZGVmaW5lIE1YQzkxMjMxX01NQ19TREhDMV9CQVNFX0FERFIJKE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUiArIDB4MDQwMDApCisjZGVmaW5lIE1YQzkxMjMxX01NQ19TREhDMl9CQVNFX0FERFIJKE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUiArIDB4MDgwMDApCisjZGVmaW5lIE1YQzkxMjMxX1VBUlQzX0JBU0VfQUREUgkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHgwQzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfQ1NQSTJfQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDEwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9TU0kyX0JBU0VfQUREUgkJKE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUiArIDB4MTQwMDApCisjZGVmaW5lIE1YQzkxMjMxX1NJTV9CQVNFX0FERFIJCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDE4MDAwKQorI2RlZmluZSBNWEM5MTIzMV9JSU1fQkFTRV9BRERSCQkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHgxQzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfQ1RJX1NETUFfQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDIwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9VU0JPVEdfQ1RSTF9CQVNFX0FERFIJKE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUiArIDB4MjQwMDApCisjZGVmaW5lIE1YQzkxMjMxX1VTQk9UR19EQVRBX0JBU0VfQUREUgkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHgyODAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfQ1NQSTFfQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDMwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9TUEJBX0NUUkxfQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDNDMDAwKQorI2RlZmluZSBNWEM5MTIzMV9JT01VWF9DT01fQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDQwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9DUk1fQ09NX0JBU0VfQUREUgkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHg0NDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfQ1JNX0FQX0JBU0VfQUREUgkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHg0ODAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfUExMMF9CQVNFX0FERFIJCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDRDMDAwKQorI2RlZmluZSBNWEM5MTIzMV9QTEwxX0JBU0VfQUREUgkJKE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUiArIDB4NTAwMDApCisjZGVmaW5lIE1YQzkxMjMxX1BMTDJfQkFTRV9BRERSCQkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHg1NDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfR1BJTzRfU0hfQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDU4MDAwKQorI2RlZmluZSBNWEM5MTIzMV9IQUNfQkFTRV9BRERSCQkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHg1QzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfU0FIQVJBX0JBU0VfQUREUgkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHg1QzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfUExMM19CQVNFX0FERFIJCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDYwMDAwKQorCisvKgorICogU1BCQSBnbG9iYWwgbW9kdWxlIDEKKyAqLworI2RlZmluZSBNWEM5MTIzMV9TUEJBMV9CQVNFX0FERFIJMHg1MjAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9TUEJBMV9CQVNFX0FERFJfVklSVAkweEZDMzAwMDAwCisjZGVmaW5lIE1YQzkxMjMxX1NQQkExX1NJWkUJCVNaXzFNCisKKyNkZWZpbmUgTVhDOTEyMzFfTVFTUElfQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMV9CQVNFX0FERFIgKyAweDM0MDAwKQorI2RlZmluZSBNWEM5MTIzMV9FTDFUX0JBU0VfQUREUgkJKE1YQzkxMjMxX1NQQkExX0JBU0VfQUREUiArIDB4MzgwMDApCisKKy8qIQorICogRGVmaW5lcyBmb3IgU1BCQSBtb2R1bGVzCisgKi8KKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9TREhDMQkJMHgwNAorI2RlZmluZSBNWEM5MTIzMV9TUEJBX1NESEMyCQkweDA4CisjZGVmaW5lIE1YQzkxMjMxX1NQQkFfVUFSVDMJCTB4MEMKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9DU1BJMgkJMHgxMAorI2RlZmluZSBNWEM5MTIzMV9TUEJBX1NTSTIJCTB4MTQKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9TSU0JCTB4MTgKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9JSU0JCTB4MUMKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9DVElfU0RNQQkJMHgyMAorI2RlZmluZSBNWEM5MTIzMV9TUEJBX1VTQk9UR19DVFJMX1JFR1MJMHgyNAorI2RlZmluZSBNWEM5MTIzMV9TUEJBX1VTQk9UR19EQVRBX1JFR1MJMHgyOAorI2RlZmluZSBNWEM5MTIzMV9TUEJBX0NTUEkxCQkweDMwCisjZGVmaW5lIE1YQzkxMjMxX1NQQkFfTVFTUEkJCTB4MzQKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9FTDFUCQkweDM4CisjZGVmaW5lIE1YQzkxMjMxX1NQQkFfSU9NVVgJCTB4NDAKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9DUk1fQ09NCQkweDQ0CisjZGVmaW5lIE1YQzkxMjMxX1NQQkFfQ1JNX0FQCQkweDQ4CisjZGVmaW5lIE1YQzkxMjMxX1NQQkFfUExMMAkJMHg0QworI2RlZmluZSBNWEM5MTIzMV9TUEJBX1BMTDEJCTB4NTAKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9QTEwyCQkweDU0CisjZGVmaW5lIE1YQzkxMjMxX1NQQkFfR1BJTzQJCTB4NTgKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9TQUhBUkEJCTB4NUMKKworLyoKKyAqIFJPTVAgYW5kIEFWSUMKKyAqLworI2RlZmluZSBNWEM5MTIzMV9ST01QX0JBU0VfQUREUgkJMHg2MDAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9ST01QX0JBU0VfQUREUl9WSVJUCTB4RkM0MDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfUk9NUF9TSVpFCQlTWl82NEsKKworI2RlZmluZSBNWEM5MTIzMV9BVklDX0JBU0VfQUREUgkJMHg2ODAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9BVklDX0JBU0VfQUREUl9WSVJUCTB4RkM0MTAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfQVZJQ19TSVpFCQlTWl82NEsKKworLyoKKyAqIE5BTkQsIFNEUkFNLCBXRUlNLCBNM0lGLCBFTUkgY29udHJvbGxlcnMKKyAqLworI2RlZmluZSBNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSCTB4QjgwMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfWF9NRU1DX0JBU0VfQUREUl9WSVJUCTB4RkM0MjAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfWF9NRU1DX1NJWkUJCVNaXzY0SworCisjZGVmaW5lIE1YQzkxMjMxX05GQ19CQVNFX0FERFIJCShNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSICsgMHgwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9FU0RDVExfQkFTRV9BRERSCShNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSICsgMHgxMDAwKQorI2RlZmluZSBNWEM5MTIzMV9XRUlNX0JBU0VfQUREUgkJKE1YQzkxMjMxX1hfTUVNQ19CQVNFX0FERFIgKyAweDIwMDApCisjZGVmaW5lIE1YQzkxMjMxX00zSUZfQkFTRV9BRERSCQkoTVhDOTEyMzFfWF9NRU1DX0JBU0VfQUREUiArIDB4MzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfRU1JX0NUTF9CQVNFX0FERFIJKE1YQzkxMjMxX1hfTUVNQ19CQVNFX0FERFIgKyAweDQwMDApCisKKy8qCisgKiBNZW1vcnkgcmVnaW9ucyBhbmQgQ1MKKyAqIENQTEQgaXMgY29ubmVjdGVkIG9uIENTNAorICogQ1M1IGlzIFRQMTAyMSBvciBpdCBpcyBub3QgY29ubmVjdGVkCisgKiAqLworI2RlZmluZSBNWEM5MTIzMV9GQl9SQU1fQkFTRV9BRERSCTB4NzgwMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfRkJfUkFNX1NJWkUJCVNaXzI1NksKKyNkZWZpbmUgTVhDOTEyMzFfQ1NEMF9CQVNFX0FERFIJCTB4ODAwMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfQ1NEMV9CQVNFX0FERFIJCTB4OTAwMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfQ1MwX0JBU0VfQUREUgkJMHhBMDAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9DUzFfQkFTRV9BRERSCQkweEE4MDAwMDAwCisjZGVmaW5lIE1YQzkxMjMxX0NTMl9CQVNFX0FERFIJCTB4QjAwMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfQ1MzX0JBU0VfQUREUgkJMHhCMjAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9DUzRfQkFTRV9BRERSCQkweEI0MDAwMDAwCisjZGVmaW5lIE1YQzkxMjMxX0NTNV9CQVNFX0FERFIJCTB4QjYwMDAwMDAKKworLyogSXMgZ2l2ZW4gYWRkcmVzcyBiZWxvbmdzIHRvIHRoZSBzcGVjaWZpZWQgbWVtb3J5IHJlZ2lvbj8gKi8KKyNkZWZpbmUgQUREUkVTU19JTl9SRUdJT04oYWRkciwgc3RhcnQsIHNpemUpIFwKKwkoKChhZGRyKSA+PSAoc3RhcnQpKSAmJiAoKGFkZHIpIDwgKHN0YXJ0KSsoc2l6ZSkpKQorCisvKiBJcyBnaXZlbiBhZGRyZXNzIGJlbG9uZ3MgdG8gdGhlIHNwZWNpZmllZCBuYW1lZCBgbW9kdWxlJz8gKi8KKyNkZWZpbmUgTVhDOTEyMzFfSVNfTU9EVUxFKGFkZHIsIG1vZHVsZSkgXAorCUFERFJFU1NfSU5fUkVHSU9OKGFkZHIsIE1YQzkxMjMxXyAjIyBtb2R1bGUgIyMgX0JBU0VfQUREUiwgXAorCSAgICAgICAgICAgICAgICAgICAgICAgIE1YQzkxMjMxXyAjIyBtb2R1bGUgIyMgX1NJWkUpCisvKgorICogVGhpcyBtYWNybyBkZWZpbmVzIHRoZSBwaHlzaWNhbCB0byB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZyBmb3IgYWxsIHRoZQorICogcGVyaXBoZXJhbCBtb2R1bGVzLiBJdCBpcyB1c2VkIGJ5IHBhc3NpbmcgaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXMgeAorICogYW5kIHJldHVybmluZyB0aGUgdmlydHVhbCBhZGRyZXNzLiBJZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpcyBub3QgbWFwcGVkLAorICogaXQgcmV0dXJucyAweERFQURCRUVGCisgKi8KKworI2RlZmluZSBNWEM5MTIzMV9JT19BRERSRVNTKHgpIFwKKwkodm9pZCBfX2lvbWVtICopIFwKKwkoTVhDOTEyMzFfSVNfTU9EVUxFKHgsIEwyQ0MpID8gTVhDOTEyMzFfTDJDQ19JT19BRERSRVNTKHgpIDogXAorCSBNWEM5MTIzMV9JU19NT0RVTEUoeCwgQUlQUzEpID8gTVhDOTEyMzFfQUlQUzFfSU9fQUREUkVTUyh4KSA6IFwKKwkgTVhDOTEyMzFfSVNfTU9EVUxFKHgsIEFJUFMyKSA/IE1YQzkxMjMxX0FJUFMyX0lPX0FERFJFU1MoeCkgOiBcCisJIE1YQzkxMjMxX0lTX01PRFVMRSh4LCBTUEJBMCkgPyBNWEM5MTIzMV9TUEJBMF9JT19BRERSRVNTKHgpIDogXAorCSBNWEM5MTIzMV9JU19NT0RVTEUoeCwgU1BCQTEpID8gTVhDOTEyMzFfU1BCQTFfSU9fQUREUkVTUyh4KSA6IFwKKwkgTVhDOTEyMzFfSVNfTU9EVUxFKHgsIFJPTVApID8gTVhDOTEyMzFfUk9NUF9JT19BRERSRVNTKHgpIDogXAorCSBNWEM5MTIzMV9JU19NT0RVTEUoeCwgQVZJQykgPyBNWEM5MTIzMV9BVklDX0lPX0FERFJFU1MoeCkgOiBcCisJIE1YQzkxMjMxX0lTX01PRFVMRSh4LCBYX01FTUMpID8gTVhDOTEyMzFfWF9NRU1DX0lPX0FERFJFU1MoeCkgOiBcCisJIDB4REVBREJFRUYpCisKKworLyoKKyAqIGRlZmluZSB0aGUgYWRkcmVzcyBtYXBwaW5nIG1hY3JvczogaW4gcGh5c2ljYWwgYWRkcmVzcyBvcmRlcgorICovCisjZGVmaW5lIE1YQzkxMjMxX0wyQ0NfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gTVhDOTEyMzFfTDJDQ19CQVNFX0FERFIpICsgTVhDOTEyMzFfTDJDQ19CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBNWEM5MTIzMV9BSVBTMV9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFIpICsgTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQTBfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSKSArIE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIE1YQzkxMjMxX1NQQkExX0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIE1YQzkxMjMxX1NQQkExX0JBU0VfQUREUikgKyBNWEM5MTIzMV9TUEJBMV9CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBNWEM5MTIzMV9BSVBTMl9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFIpICsgTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgTVhDOTEyMzFfUk9NUF9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBNWEM5MTIzMV9ST01QX0JBU0VfQUREUikgKyBNWEM5MTIzMV9ST01QX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIE1YQzkxMjMxX0FWSUNfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gTVhDOTEyMzFfQVZJQ19CQVNFX0FERFIpICsgTVhDOTEyMzFfQVZJQ19CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBNWEM5MTIzMV9YX01FTUNfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gTVhDOTEyMzFfWF9NRU1DX0JBU0VfQUREUikgKyBNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSX1ZJUlQpCisKKy8qCisgKiBJbnRlcnJ1cHQgbnVtYmVycworICovCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9HUElPMwkJMAorI2RlZmluZSBNWEM5MTIzMV9JTlRfRUwxVF9DSQkJMQorI2RlZmluZSBNWEM5MTIzMV9JTlRfRUwxVF9SRkNJCQkyCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9FTDFUX1JGSQkJMworI2RlZmluZSBNWEM5MTIzMV9JTlRfRUwxVF9NQ1UJCTQKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0VMMVRfSVBJCQk1CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9NVV9HRU4JCTYKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0dQSU80CQk3CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9NTUNfU0RIQzIJCTgKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX01NQ19TREhDMQkJOQorI2RlZmluZSBNWEM5MTIzMV9JTlRfSTJDCQkxMAorI2RlZmluZSBNWEM5MTIzMV9JTlRfU1NJMgkJMTEKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1NTSTEJCTEyCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9DU1BJMgkJMTMKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0NTUEkxCQkxNAorI2RlZmluZSBNWEM5MTIzMV9JTlRfUlRJQwkJMTUKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1NBSEFSQQkJMTUKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0hBQwkJMTUKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1VBUlQzX1JYCQkxNgorI2RlZmluZSBNWEM5MTIzMV9JTlRfVUFSVDNfVFgJCTE3CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9VQVJUM19NSU5UCQkxOAorI2RlZmluZSBNWEM5MTIzMV9JTlRfRUNUCQkxOQorI2RlZmluZSBNWEM5MTIzMV9JTlRfU0lNX0lQQgkJMjAKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1NJTV9EQVRBCQkyMQorI2RlZmluZSBNWEM5MTIzMV9JTlRfUk5HQQkJMjIKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0RTTV9BUAkJMjMKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0tQUAkJMjQKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1JUQwkJMjUKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1BXTQkJMjYKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0dFTUtfQVAJCTI3CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9FUElUCQkyOAorI2RlZmluZSBNWEM5MTIzMV9JTlRfR1BUCQkyOQorI2RlZmluZSBNWEM5MTIzMV9JTlRfVUFSVDJfUlgJCTMwCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9VQVJUMl9UWAkJMzEKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1VBUlQyX01JTlQJCTMyCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9OQU5ERkMJCTMzCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9TRE1BCQkzNAorI2RlZmluZSBNWEM5MTIzMV9JTlRfVVNCX1dBS0VVUAkJMzUKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1VTQl9TT0YJCTM2CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9QTVVfRVZUTU9OCQkzNworI2RlZmluZSBNWEM5MTIzMV9JTlRfVVNCX0ZVTkMJCTM4CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9VU0JfRE1BCQkzOQorI2RlZmluZSBNWEM5MTIzMV9JTlRfVVNCX0NUUkwJCTQwCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9JUFVfRVJSCQk0MQorI2RlZmluZSBNWEM5MTIzMV9JTlRfSVBVX1NZTgkJNDIKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1VBUlQxX1JYCQk0MworI2RlZmluZSBNWEM5MTIzMV9JTlRfVUFSVDFfVFgJCTQ0CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9VQVJUMV9NSU5UCQk0NQorI2RlZmluZSBNWEM5MTIzMV9JTlRfSUlNCQk0NgorI2RlZmluZSBNWEM5MTIzMV9JTlRfTVVfUlhfT1IJCTQ3CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9NVV9UWF9PUgkJNDgKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1NDQ19TQ00JCTQ5CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9TQ0NfU01OCQk1MAorI2RlZmluZSBNWEM5MTIzMV9JTlRfR1BJTzIJCTUxCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9HUElPMQkJNTIKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX01RU1BJMQkJNTMKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX01RU1BJMgkJNTQKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1dET0cyCQk1NQorI2RlZmluZSBNWEM5MTIzMV9JTlRfRVhUX0lOVDcJCTU2CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9FWFRfSU5UNgkJNTcKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0VYVF9JTlQ1CQk1OAorI2RlZmluZSBNWEM5MTIzMV9JTlRfRVhUX0lOVDQJCTU5CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9FWFRfSU5UMwkJNjAKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0VYVF9JTlQyCQk2MQorI2RlZmluZSBNWEM5MTIzMV9JTlRfRVhUX0lOVDEJCTYyCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9FWFRfSU5UMAkJNjMKKworI2RlZmluZSBNWEM5MTIzMV9NQVhfSU5UX0xJTkVTCQk2MworI2RlZmluZSBNWEM5MTIzMV9NQVhfRVhUX0xJTkVTCQk4CisKKyNlbmRpZiAvKiBfX01BQ0hfTVhDOTEyMzFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZTU2MjQxYS4uZWYwMDE5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjEsOCArMjEsMTggQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfU1lTVEVNX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19TWVNURU1fSF9fCiAKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKwogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQogeworI2lmZGVmIENPTkZJR19BUkNIX01YQzkxMjMxCisJaWYgKGNwdV9pc19teGM5MTIzMSgpKSB7CisJCS8qIE5lZWQgdGhpcyB0byBzZXQgRFNNIGxvdy1wb3dlciBtb2RlICovCisJCW14YzkxMjMxX3ByZXBhcmVfaWRsZSgpOworCX0KKyNlbmRpZgorCiAJY3B1X2RvX2lkbGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdGltZXguaAppbmRleCAwN2I0YTczLi41MjdhNmMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdGltZXguaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMjYsNiArMjYsMTAgQEAKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxMzMwMDAwMAogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxNjYyNTAwMAorI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDI1CisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMTYwMDAwMDAKKyNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVhDOTEyMzEKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxMzAwMDAwMAogI2VuZGlmCiAKICNlbmRpZgkJCQkvKiBfX0FTTV9BUkNIX01YQ19USU1FWF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmluZGV4IGRlNmZlMDMuLjA4MmEzOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMjYsOCArMjYsMTEgQEAKICNkZWZpbmUgX19NWENfQk9PVF9VTkNPTVBSRVNTCiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2RlZmluZSBVQVJUKHgpICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoc2VyaWFsX3BvcnQgKyAoeCkpKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgdWFydF9iYXNlOworCisjZGVmaW5lIFVBUlQoeCkgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSh1YXJ0X2Jhc2UgKyAoeCkpKQogCiAjZGVmaW5lIFVTUjIgMHg5OAogI2RlZmluZSBVU1IyX1RYRkUgKDE8PDE0KQpAQCAtNDYsMTkgKzQ5LDEwIEBACiAKIHN0YXRpYyB2b2lkIHB1dGMoaW50IGNoKQogewotCXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlcmlhbF9wb3J0ID0gMDsKLQotCWlmICh1bmxpa2VseShzZXJpYWxfcG9ydCA9PSAwKSkgewotCQlkbyB7Ci0JCQlzZXJpYWxfcG9ydCA9IFVBUlQxX0JBU0VfQUREUjsKLQkJCWlmIChVQVJUKFVDUjEpICYgVUNSMV9VQVJURU4pCi0JCQkJYnJlYWs7Ci0JCQlzZXJpYWxfcG9ydCA9IFVBUlQyX0JBU0VfQUREUjsKLQkJCWlmIChVQVJUKFVDUjEpICYgVUNSMV9VQVJURU4pCi0JCQkJYnJlYWs7Ci0JCQlyZXR1cm47Ci0JCX0gd2hpbGUgKDApOwotCX0KKwlpZiAoIXVhcnRfYmFzZSkKKwkJcmV0dXJuOworCWlmICghKFVBUlQoVUNSMSkgJiBVQ1IxX1VBUlRFTikpCisJCXJldHVybjsKIAogCXdoaWxlICghKFVBUlQoVVNSMikgJiBVU1IyX1RYRkUpKQogCQliYXJyaWVyKCk7CkBAIC02OCwxMSArNjIsNDkgQEAKIAogI2RlZmluZSBmbHVzaCgpIGRvIHsgfSB3aGlsZSAoMCkKIAotLyoKLSAqIG5vdGhpbmcgdG8gZG8KLSAqLwotI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisjZGVmaW5lIE1YMV9VQVJUMV9CQVNFX0FERFIJMHgwMDIwNjAwMAorI2RlZmluZSBNWDI1X1VBUlQxX0JBU0VfQUREUgkweDQzZjkwMDAwCisjZGVmaW5lIE1YMlhfVUFSVDFfQkFTRV9BRERSCTB4MTAwMGEwMDAKKyNkZWZpbmUgTVgzWF9VQVJUMV9CQVNFX0FERFIJMHg0M0Y5MDAwMAorI2RlZmluZSBNWDNYX1VBUlQyX0JBU0VfQUREUgkweDQzRjk0MDAwCiAKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hcmNoX2RlY29tcF9zZXR1cCh1bnNpZ25lZCBsb25nIGFyY2hfaWQpCit7CisJc3dpdGNoIChhcmNoX2lkKSB7CisJY2FzZSBNQUNIX1RZUEVfTVgxQURTOgorCWNhc2UgTUFDSF9UWVBFX1NDQjkzMjg6CisJCXVhcnRfYmFzZSA9IE1YMV9VQVJUMV9CQVNFX0FERFI7CisJCWJyZWFrOworCWNhc2UgTUFDSF9UWVBFX01YMjVfM0RTOgorCQl1YXJ0X2Jhc2UgPSBNWDI1X1VBUlQxX0JBU0VfQUREUjsKKwkJYnJlYWs7CisJY2FzZSBNQUNIX1RZUEVfSU1YMjdMSVRFOgorCWNhc2UgTUFDSF9UWVBFX01YMjdfM0RTOgorCWNhc2UgTUFDSF9UWVBFX01YMjdBRFM6CisJY2FzZSBNQUNIX1RZUEVfUENNMDM4OgorCWNhc2UgTUFDSF9UWVBFX01YMjFBRFM6CisJCXVhcnRfYmFzZSA9IE1YMlhfVUFSVDFfQkFTRV9BRERSOworCQlicmVhazsKKwljYXNlIE1BQ0hfVFlQRV9NWDMxTElURToKKwljYXNlIE1BQ0hfVFlQRV9BUk1BRElMTE81WDA6CisJY2FzZSBNQUNIX1RZUEVfTVgzMU1PQk9BUkQ6CisJY2FzZSBNQUNIX1RZUEVfUU9ORzoKKwljYXNlIE1BQ0hfVFlQRV9NWDMxXzNEUzoKKwljYXNlIE1BQ0hfVFlQRV9QQ00wMzc6CisJY2FzZSBNQUNIX1RZUEVfTVgzMUFEUzoKKwljYXNlIE1BQ0hfVFlQRV9NWDM1XzNEUzoKKwljYXNlIE1BQ0hfVFlQRV9QQ00wNDM6CisJCXVhcnRfYmFzZSA9IE1YM1hfVUFSVDFfQkFTRV9BRERSOworCQlicmVhazsKKwljYXNlIE1BQ0hfVFlQRV9NQUdYX1pONToKKwkJdWFydF9iYXNlID0gTVgzWF9VQVJUMl9CQVNFX0FERFI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCV9fYXJjaF9kZWNvbXBfc2V0dXAoYXJjaF9pZCkKICNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCiAKICNlbmRpZgkJCQkvKiBfX0FTTV9BUkNIX01YQ19VTkNPTVBSRVNTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW9tdXgtdjMuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2lvbXV4LXYzLmMKaW5kZXggNzdhMDc4Zi4uODUxY2E5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW9tdXgtdjMuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pb211eC12My5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC12My5oPgogCi0jZGVmaW5lIElPTVVYX0JBU0UJSU9fQUREUkVTUyhJT01VWENfQkFTRV9BRERSKQorc3RhdGljIHZvaWQgX19pb21lbSAqYmFzZTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW9tdXhfdjNfcGFkX2FsbG9jX21hcFsweDIwMCAvIEJJVFNfUEVSX0xPTkddOwogCkBAIC00NSwxNCArNDUsMTQgQEAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChwYWRfb2ZzID4+IDIsIGlvbXV4X3YzX3BhZF9hbGxvY19tYXApKQogCQlyZXR1cm4gLUVCVVNZOwogCWlmIChwYWQtPm11eF9jdHJsX29mcykKLQkJX19yYXdfd3JpdGVsKHBhZC0+bXV4X21vZGUsIElPTVVYX0JBU0UgKyBwYWQtPm11eF9jdHJsX29mcyk7CisJCV9fcmF3X3dyaXRlbChwYWQtPm11eF9tb2RlLCBiYXNlICsgcGFkLT5tdXhfY3RybF9vZnMpOwogCiAJaWYgKHBhZC0+c2VsZWN0X2lucHV0X29mcykKIAkJX19yYXdfd3JpdGVsKHBhZC0+c2VsZWN0X2lucHV0LAotCQkJCUlPTVVYX0JBU0UgKyBwYWQtPnNlbGVjdF9pbnB1dF9vZnMpOworCQkJCWJhc2UgKyBwYWQtPnNlbGVjdF9pbnB1dF9vZnMpOwogCi0JaWYgKCEocGFkLT5wYWRfY3RybCAmIE5PX1BBRF9DVFJMKSkKLQkJX19yYXdfd3JpdGVsKHBhZC0+cGFkX2N0cmwsIElPTVVYX0JBU0UgKyBwYWQtPnBhZF9jdHJsX29mcyk7CisJaWYgKCEocGFkLT5wYWRfY3RybCAmIE5PX1BBRF9DVFJMKSAmJiBwYWQtPnBhZF9jdHJsX29mcykKKwkJX19yYXdfd3JpdGVsKHBhZC0+cGFkX2N0cmwsIGJhc2UgKyBwYWQtPnBhZF9jdHJsX29mcyk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKG14Y19pb211eF92M19zZXR1cF9wYWQpOwpAQCAtOTYsMyArOTYsOCBAQAogCX0KIH0KIEVYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3YzX3JlbGVhc2VfbXVsdGlwbGVfcGFkcyk7CisKK3ZvaWQgbXhjX2lvbXV4X3YzX2luaXQodm9pZCBfX2lvbWVtICppb211eF92M19iYXNlKQoreworCWJhc2UgPSBpb211eF92M19iYXNlOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaXJxLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9pcnEuYwppbmRleCA4YWVlNzYzLi43NzhkZGZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pcnEuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pcnEuYwpAQCAtNDQsNyArNDQsNyBAQAogI2RlZmluZSBBVklDX0ZJUE5ESAkJMHg2MAkvKiBmYXN0IGludCBwZW5kaW5nIGhpZ2ggKi8KICNkZWZpbmUgQVZJQ19GSVBOREwJCTB4NjQJLyogZmFzdCBpbnQgcGVuZGluZyBsb3cgKi8KIAotc3RhdGljIHZvaWQgX19pb21lbSAqYXZpY19iYXNlOwordm9pZCBfX2lvbWVtICphdmljX2Jhc2U7CiAKIGludCBpbXhfaXJxX3NldF9wcmlvcml0eSh1bnNpZ25lZCBjaGFyIGlycSwgdW5zaWduZWQgY2hhciBwcmlvKQogewpAQCAtMTEzLDExICsxMTMsMTEgQEAKICAqIGludGVycnVwdHMuIEl0IHJlZ2lzdGVycyB0aGUgaW50ZXJydXB0IGVuYWJsZSBhbmQgZGlzYWJsZSBmdW5jdGlvbnMKICAqIHRvIHRoZSBrZXJuZWwgZm9yIGVhY2ggaW50ZXJydXB0IHNvdXJjZS4KICAqLwotdm9pZCBfX2luaXQgbXhjX2luaXRfaXJxKHZvaWQpCit2b2lkIF9faW5pdCBteGNfaW5pdF9pcnEodm9pZCBfX2lvbWVtICppcnFiYXNlKQogewogCWludCBpOwogCi0JYXZpY19iYXNlID0gSU9fQUREUkVTUyhBVklDX0JBU0VfQUREUik7CisJYXZpY19iYXNlID0gaXJxYmFzZTsKIAogCS8qIHB1dCB0aGUgQVZJQyBpbnRvIHRoZSByZXNldCB2YWx1ZSB3aXRoCiAJICogYWxsIGludGVycnVwdHMgZGlzYWJsZWQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3B3bS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvcHdtLmMKaW5kZXggYWUzNDE5OC4uNWNkYmQ2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvcHdtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvcHdtLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgTVgzX1BXTVBSICAgICAgICAgICAgICAgICAweDEwICAgIC8qIFBXTSBQZXJpb2QgUmVnaXN0ZXIgKi8KICNkZWZpbmUgTVgzX1BXTUNSX1BSRVNDQUxFUih4KSAgICAoKCh4IC0gMSkgJiAweEZGRikgPDwgNCkKICNkZWZpbmUgTVgzX1BXTUNSX0NMS1NSQ19JUEdfSElHSCAoMiA8PCAxNikKKyNkZWZpbmUgTVgzX1BXTUNSX0NMS1NSQ19JUEcgICAgICAoMSA8PCAxNikKICNkZWZpbmUgTVgzX1BXTUNSX0VOICAgICAgICAgICAgICAoMSA8PCAwKQogCiAKQEAgLTU1LDkgKzU2LDExIEBACiAJaWYgKHB3bSA9PSBOVUxMIHx8IHBlcmlvZF9ucyA9PSAwIHx8IGR1dHlfbnMgPiBwZXJpb2RfbnMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNwdV9pc19teDI3KCkgfHwgY3B1X2lzX214MygpKSB7CisJaWYgKGNwdV9pc19teDI3KCkgfHwgY3B1X2lzX214MygpIHx8IGNwdV9pc19teDI1KCkpIHsKIAkJdW5zaWduZWQgbG9uZyBsb25nIGM7CiAJCXVuc2lnbmVkIGxvbmcgcGVyaW9kX2N5Y2xlcywgZHV0eV9jeWNsZXMsIHByZXNjYWxlOworCQl1MzIgY3I7CisKIAkJYyA9IGNsa19nZXRfcmF0ZShwd20tPmNsayk7CiAJCWMgPSBjICogcGVyaW9kX25zOwogCQlkb19kaXYoYywgMTAwMDAwMDAwMCk7CkBAIC03Miw5ICs3NSwxNSBAQAogCiAJCXdyaXRlbChkdXR5X2N5Y2xlcywgcHdtLT5tbWlvX2Jhc2UgKyBNWDNfUFdNU0FSKTsKIAkJd3JpdGVsKHBlcmlvZF9jeWNsZXMsIHB3bS0+bW1pb19iYXNlICsgTVgzX1BXTVBSKTsKLQkJd3JpdGVsKE1YM19QV01DUl9QUkVTQ0FMRVIocHJlc2NhbGUgLSAxKSB8Ci0JCQlNWDNfUFdNQ1JfQ0xLU1JDX0lQR19ISUdIIHwgTVgzX1BXTUNSX0VOLAotCQkJcHdtLT5tbWlvX2Jhc2UgKyBNWDNfUFdNQ1IpOworCisJCWNyID0gTVgzX1BXTUNSX1BSRVNDQUxFUihwcmVzY2FsZSkgfCBNWDNfUFdNQ1JfRU47CisKKwkJaWYgKGNwdV9pc19teDI1KCkpCisJCQljciB8PSBNWDNfUFdNQ1JfQ0xLU1JDX0lQRzsKKwkJZWxzZQorCQkJY3IgfD0gTVgzX1BXTUNSX0NMS1NSQ19JUEdfSElHSDsKKworCQl3cml0ZWwoY3IsIHB3bS0+bW1pb19iYXNlICsgTVgzX1BXTUNSKTsKIAl9IGVsc2UgaWYgKGNwdV9pc19teDEoKSB8fCBjcHVfaXNfbXgyMSgpKSB7CiAJCS8qIFRoZSBQV00gc3Vic3lzdGVtIGFsbG93cyBmb3IgZXhhY3QgZnJlcXVlbmNpZXMuIEhvd2V2ZXIsCiAJCSAqIEkgY2Fubm90IGNvbm5lY3QgYSBzY29wZSBvbiBteSBkZXZpY2UgdG8gdGhlIFBXTSBsaW5lIGFuZApAQCAtMTE4LDYgKzEyNyw4IEBACiAKIHZvaWQgcHdtX2Rpc2FibGUoc3RydWN0IHB3bV9kZXZpY2UgKnB3bSkKIHsKKwl3cml0ZWwoMCwgcHdtLT5tbWlvX2Jhc2UgKyBNWDNfUFdNQ1IpOworCiAJaWYgKHB3bS0+Y2xrX2VuYWJsZWQpIHsKIAkJY2xrX2Rpc2FibGUocHdtLT5jbGspOwogCQlwd20tPmNsa19lbmFibGVkID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3N5c3RlbS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKaW5kZXggNzljMzc1Ny4uOTdmNDI3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKQEAgLTI3LDMyICsyNywzOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDEKLSNkZWZpbmUgV0RPR19XQ1JfUkVHCQlJT19BRERSRVNTKFdEVF9CQVNFX0FERFIpCi0jZGVmaW5lIFdET0dfV0NSX0VOQUJMRQkJKDEgPDwgMCkKLSNlbHNlCi0jZGVmaW5lIFdET0dfV0NSX1JFRwkJSU9fQUREUkVTUyhXRE9HX0JBU0VfQUREUikKLSNkZWZpbmUgV0RPR19XQ1JfRU5BQkxFCQkoMSA8PCAyKQotI2VuZGlmCitzdGF0aWMgdm9pZCBfX2lvbWVtICp3ZG9nX2Jhc2U7CiAKIC8qCiAgKiBSZXNldCB0aGUgc3lzdGVtLiBJdCBpcyBjYWxsZWQgYnkgbWFjaGluZV9yZXN0YXJ0KCkuCiAgKi8KIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKLQlpZiAoIWNwdV9pc19teDEoKSkgeworCXVuc2lnbmVkIGludCB3Y3JfZW5hYmxlOworCisjaWZkZWYgQ09ORklHX0FSQ0hfTVhDOTEyMzEKKwlpZiAoY3B1X2lzX214YzkxMjMxKCkpIHsKKwkJbXhjOTEyMzFfYXJjaF9yZXNldChtb2RlLCBjbWQpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJaWYgKGNwdV9pc19teDEoKSkgeworCQl3Y3JfZW5hYmxlID0gKDEgPDwgMCk7CisJfSBlbHNlIHsKIAkJc3RydWN0IGNsayAqY2xrOwogCiAJCWNsayA9IGNsa19nZXRfc3lzKCJpbXgtd2R0LjAiLCBOVUxMKTsKIAkJaWYgKCFJU19FUlIoY2xrKSkKIAkJCWNsa19lbmFibGUoY2xrKTsKKwkJd2NyX2VuYWJsZSA9ICgxIDw8IDIpOwogCX0KIAogCS8qIEFzc2VydCBTUlMgc2lnbmFsICovCi0JX19yYXdfd3JpdGV3KFdET0dfV0NSX0VOQUJMRSwgV0RPR19XQ1JfUkVHKTsKKwlfX3Jhd193cml0ZXcod2NyX2VuYWJsZSwgd2RvZ19iYXNlKTsKIAogCS8qIHdhaXQgZm9yIHJlc2V0IHRvIGFzc2VydC4uLiAqLwogCW1kZWxheSg1MDApOwpAQCAtNjUsMyArNzEsOCBAQAogCS8qIHdlJ2xsIHRha2UgYSBqdW1wIHRocm91Z2ggemVybyBhcyBhIHBvb3Igc2Vjb25kICovCiAJY3B1X3Jlc2V0KDApOwogfQorCit2b2lkIG14Y19hcmNoX3Jlc2V0X2luaXQodm9pZCBfX2lvbWVtICpiYXNlKQoreworCXdkb2dfYmFzZSA9IGJhc2U7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy90aW1lLmMgYi9hcmNoL2FybS9wbGF0LW14Yy90aW1lLmMKaW5kZXggODhmYjNhNS4uODQ0NTY3ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL3RpbWUuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy90aW1lLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKICNkZWZpbmUgTVgyX1RTVEFUX0NBUFQJCSgxIDw8IDEpCiAjZGVmaW5lIE1YMl9UU1RBVF9DT01QCQkoMSA8PCAwKQogCi0vKiBNWDMxLCBNWDM1ICovCisvKiBNWDMxLCBNWDM1LCBNWDI1LCBNWEM5MTIzMSAqLwogI2RlZmluZSBNWDNfVENUTF9XQUlURU4JCSgxIDw8IDMpCiAjZGVmaW5lIE1YM19UQ1RMX0NMS19JUEcJKDEgPDwgNikKICNkZWZpbmUgTVgzX1RDVExfRlJSCQkoMSA8PCA5KQpAQCAtNjYsNyArNjYsNyBAQAogewogCXVuc2lnbmVkIGludCB0bXA7CiAKLQlpZiAoY3B1X2lzX214MygpKQorCWlmIChjcHVfaXNfbXgzKCkgfHwgY3B1X2lzX214MjUoKSkKIAkJX19yYXdfd3JpdGVsKDAsIHRpbWVyX2Jhc2UgKyBNWDNfSVIpOwogCWVsc2UgewogCQl0bXAgPSBfX3Jhd19yZWFkbCh0aW1lcl9iYXNlICsgTVhDX1RDVEwpOwpAQCAtNzYsNyArNzYsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3B0X2lycV9lbmFibGUodm9pZCkKIHsKLQlpZiAoY3B1X2lzX214MygpKQorCWlmIChjcHVfaXNfbXgzKCkgfHwgY3B1X2lzX214MjUoKSkKIAkJX19yYXdfd3JpdGVsKDE8PDAsIHRpbWVyX2Jhc2UgKyBNWDNfSVIpOwogCWVsc2UgewogCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwodGltZXJfYmFzZSArIE1YQ19UQ1RMKSB8IE1YMV8yX1RDVExfSVJRRU4sCkBAIC05MCw3ICs5MCw3IEBACiAJCV9fcmF3X3dyaXRlbCgwLCB0aW1lcl9iYXNlICsgTVgxXzJfVFNUQVQpOwogCWlmIChjcHVfaXNfbXgyKCkpCiAJCV9fcmF3X3dyaXRlbChNWDJfVFNUQVRfQ0FQVCB8IE1YMl9UU1RBVF9DT01QLCB0aW1lcl9iYXNlICsgTVgxXzJfVFNUQVQpOwotCWlmIChjcHVfaXNfbXgzKCkpCisJaWYgKGNwdV9pc19teDMoKSB8fCBjcHVfaXNfbXgyNSgpKQogCQlfX3Jhd193cml0ZWwoTVgzX1RTVEFUX09GMSwgdGltZXJfYmFzZSArIE1YM19UU1RBVCk7CiB9CiAKQEAgLTExNyw3ICsxMTcsNyBAQAogewogCXVuc2lnbmVkIGludCBjID0gY2xrX2dldF9yYXRlKHRpbWVyX2Nsayk7CiAKLQlpZiAoY3B1X2lzX214MygpKQorCWlmIChjcHVfaXNfbXgzKCkgfHwgY3B1X2lzX214MjUoKSkKIAkJY2xvY2tzb3VyY2VfbXhjLnJlYWQgPSBteDNfZ2V0X2N5Y2xlczsKIAogCWNsb2Nrc291cmNlX214Yy5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChjLApAQCAtMTgwLDcgKzE4MCw3IEBACiAKIAlpZiAobW9kZSAhPSBjbG9ja2V2ZW50X21vZGUpIHsKIAkJLyogU2V0IGV2ZW50IHRpbWUgaW50byBmYXItZmFyIGZ1dHVyZSAqLwotCQlpZiAoY3B1X2lzX214MygpKQorCQlpZiAoY3B1X2lzX214MygpIHx8IGNwdV9pc19teDI1KCkpCiAJCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwodGltZXJfYmFzZSArIE1YM19UQ04pIC0gMywKIAkJCQkJdGltZXJfYmFzZSArIE1YM19UQ01QKTsKIAkJZWxzZQpAQCAtMjMzLDcgKzIzMyw3IEBACiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJmNsb2NrZXZlbnRfbXhjOwogCXVpbnQzMl90IHRzdGF0OwogCi0JaWYgKGNwdV9pc19teDMoKSkKKwlpZiAoY3B1X2lzX214MygpIHx8IGNwdV9pc19teDI1KCkpCiAJCXRzdGF0ID0gX19yYXdfcmVhZGwodGltZXJfYmFzZSArIE1YM19UU1RBVCk7CiAJZWxzZQogCQl0c3RhdCA9IF9fcmF3X3JlYWRsKHRpbWVyX2Jhc2UgKyBNWDFfMl9UU1RBVCk7CkBAIC0yNjQsNyArMjY0LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgYyA9IGNsa19nZXRfcmF0ZSh0aW1lcl9jbGspOwogCi0JaWYgKGNwdV9pc19teDMoKSkKKwlpZiAoY3B1X2lzX214MygpIHx8IGNwdV9pc19teDI1KCkpCiAJCWNsb2NrZXZlbnRfbXhjLnNldF9uZXh0X2V2ZW50ID0gbXgzX3NldF9uZXh0X2V2ZW50OwogCiAJY2xvY2tldmVudF9teGMubXVsdCA9IGRpdl9zYyhjLCBOU0VDX1BFUl9TRUMsCkBAIC0yODEsMzAgKzI4MSwxMyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9faW5pdCBteGNfdGltZXJfaW5pdChzdHJ1Y3QgY2xrICp0aW1lcl9jbGspCit2b2lkIF9faW5pdCBteGNfdGltZXJfaW5pdChzdHJ1Y3QgY2xrICp0aW1lcl9jbGssIHZvaWQgX19pb21lbSAqYmFzZSwgaW50IGlycSkKIHsKIAl1aW50MzJfdCB0Y3RsX3ZhbDsKLQlpbnQgaXJxOwogCiAJY2xrX2VuYWJsZSh0aW1lcl9jbGspOwogCi0JaWYgKGNwdV9pc19teDEoKSkgewotI2lmZGVmIENPTkZJR19BUkNIX01YMQotCQl0aW1lcl9iYXNlID0gSU9fQUREUkVTUyhUSU0xX0JBU0VfQUREUik7Ci0JCWlycSA9IFRJTTFfSU5UOwotI2VuZGlmCi0JfSBlbHNlIGlmIChjcHVfaXNfbXgyKCkpIHsKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDIKLQkJdGltZXJfYmFzZSA9IElPX0FERFJFU1MoR1BUMV9CQVNFX0FERFIpOwotCQlpcnEgPSBNWENfSU5UX0dQVDE7Ci0jZW5kaWYKLQl9IGVsc2UgaWYgKGNwdV9pc19teDMoKSkgewotI2lmZGVmIENPTkZJR19BUkNIX01YMwotCQl0aW1lcl9iYXNlID0gSU9fQUREUkVTUyhHUFQxX0JBU0VfQUREUik7Ci0JCWlycSA9IE1YQ19JTlRfR1BUOwotI2VuZGlmCi0JfSBlbHNlCi0JCUJVRygpOworCXRpbWVyX2Jhc2UgPSBiYXNlOwogCiAJLyoKIAkgKiBJbml0aWFsaXNlIHRvIGEga25vd24gc3RhdGUgKGFsbCB0aW1lcnMgb2ZmLCBhbmQgdGltaW5nIHJlc2V0KQpAQCAtMzEzLDcgKzI5Niw3IEBACiAJX19yYXdfd3JpdGVsKDAsIHRpbWVyX2Jhc2UgKyBNWENfVENUTCk7CiAJX19yYXdfd3JpdGVsKDAsIHRpbWVyX2Jhc2UgKyBNWENfVFBSRVIpOyAvKiBzZWUgZGF0YXNoZWV0IG5vdGUgKi8KIAotCWlmIChjcHVfaXNfbXgzKCkpCisJaWYgKGNwdV9pc19teDMoKSB8fCBjcHVfaXNfbXgyNSgpKQogCQl0Y3RsX3ZhbCA9IE1YM19UQ1RMX0NMS19JUEcgfCBNWDNfVENUTF9GUlIgfCBNWDNfVENUTF9XQUlURU4gfCBNWENfVENUTF9URU47CiAJZWxzZQogCQl0Y3RsX3ZhbCA9IE1YMV8yX1RDVExfRlJSIHwgTVgxXzJfVENUTF9DTEtfUENMSzEgfCBNWENfVENUTF9URU47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGVidWctbGVkcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RlYnVnLWxlZHMuYwppbmRleCBiZTRlZWZkLi45Mzk1ODk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZGVidWctbGVkcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZWJ1Zy1sZWRzLmMKQEAgLTI4MSwyNCArMjgxLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZnBnYV9zdXNwZW5kX2xhdGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IGZwZ2Ffc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJX19yYXdfd3JpdGV3KH4wLCAmZnBnYS0+bGVkcyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZnBnYV9yZXN1bWVfZWFybHkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgZnBnYV9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewogCV9fcmF3X3dyaXRldyh+aHdfbGVkX3N0YXRlLCAmZnBnYS0+bGVkcyk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBmcGdhX2Rldl9wbV9vcHMgPSB7CisJLnN1c3BlbmRfbm9pcnEgPSBmcGdhX3N1c3BlbmRfbm9pcnEsCisJLnJlc3VtZV9ub2lycSA9IGZwZ2FfcmVzdW1lX25vaXJxLAorfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbGVkX2RyaXZlciA9IHsKIAkuZHJpdmVyLm5hbWUJPSAib21hcF9kYmdfbGVkIiwKKwkuZHJpdmVyLnBtCT0gJmZwZ2FfZGV2X3BtX29wcywKIAkucHJvYmUJCT0gZnBnYV9wcm9iZSwKLQkuc3VzcGVuZF9sYXRlCT0gZnBnYV9zdXNwZW5kX2xhdGUsCi0JLnJlc3VtZV9lYXJseQk9IGZwZ2FfcmVzdW1lX2Vhcmx5LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZnBnYV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggZTNhYzk0Zi4uOWIwMGY0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtMTEyNyw2ICsxMTI3LDExIEBACiB2b2lkIG9tYXBfZG1hX2xpbmtfbGNoKGludCBsY2hfaGVhZCwgaW50IGxjaF9xdWV1ZSkKIHsKIAlpZiAob21hcF9kbWFfaW5fMTUxMF9tb2RlKCkpIHsKKwkJaWYgKGxjaF9oZWFkID09IGxjaF9xdWV1ZSkgeworCQkJZG1hX3dyaXRlKGRtYV9yZWFkKENDUihsY2hfaGVhZCkpIHwgKDMgPDwgOCksCisJCQkJCQkJCUNDUihsY2hfaGVhZCkpOworCQkJcmV0dXJuOworCQl9CiAJCXByaW50ayhLRVJOX0VSUiAiRE1BIGxpbmtpbmcgaXMgbm90IHN1cHBvcnRlZCBpbiAxNTEwIG1vZGVcbiIpOwogCQlCVUcoKTsKIAkJcmV0dXJuOwpAQCAtMTE0OSw2ICsxMTU0LDExIEBACiB2b2lkIG9tYXBfZG1hX3VubGlua19sY2goaW50IGxjaF9oZWFkLCBpbnQgbGNoX3F1ZXVlKQogewogCWlmIChvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSkgeworCQlpZiAobGNoX2hlYWQgPT0gbGNoX3F1ZXVlKSB7CisJCQlkbWFfd3JpdGUoZG1hX3JlYWQoQ0NSKGxjaF9oZWFkKSkgJiB+KDMgPDwgOCksCisJCQkJCQkJCUNDUihsY2hfaGVhZCkpOworCQkJcmV0dXJuOworCQl9CiAJCXByaW50ayhLRVJOX0VSUiAiRE1BIGxpbmtpbmcgaXMgbm90IHN1cHBvcnRlZCBpbiAxNTEwIG1vZGVcbiIpOwogCQlCVUcoKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggOTI5OGJjMC4uMTc2Yzg2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC0xMzgsNiArMTM4LDMyIEBACiAjZGVmaW5lIE9NQVAyNFhYX0dQSU9fQ0xFQVJEQVRBT1VUCTB4MDA5MAogI2RlZmluZSBPTUFQMjRYWF9HUElPX1NFVERBVEFPVVQJMHgwMDk0CiAKKyNkZWZpbmUgT01BUDRfR1BJT19SRVZJU0lPTgkJMHgwMDAwCisjZGVmaW5lIE9NQVA0X0dQSU9fU1lTQ09ORklHCQkweDAwMTAKKyNkZWZpbmUgT01BUDRfR1BJT19FT0kJCQkweDAwMjAKKyNkZWZpbmUgT01BUDRfR1BJT19JUlFTVEFUVVNSQVcwCTB4MDAyNAorI2RlZmluZSBPTUFQNF9HUElPX0lSUVNUQVRVU1JBVzEJMHgwMDI4CisjZGVmaW5lIE9NQVA0X0dQSU9fSVJRU1RBVFVTMAkJMHgwMDJjCisjZGVmaW5lIE9NQVA0X0dQSU9fSVJRU1RBVFVTMQkJMHgwMDMwCisjZGVmaW5lIE9NQVA0X0dQSU9fSVJRU1RBVFVTU0VUMAkweDAwMzQKKyNkZWZpbmUgT01BUDRfR1BJT19JUlFTVEFUVVNTRVQxCTB4MDAzOAorI2RlZmluZSBPTUFQNF9HUElPX0lSUVNUQVRVU0NMUjAJMHgwMDNjCisjZGVmaW5lIE9NQVA0X0dQSU9fSVJRU1RBVFVTQ0xSMQkweDAwNDAKKyNkZWZpbmUgT01BUDRfR1BJT19JUlFXQUtFTjAJCTB4MDA0NAorI2RlZmluZSBPTUFQNF9HUElPX0lSUVdBS0VOMQkJMHgwMDQ4CisjZGVmaW5lIE9NQVA0X0dQSU9fU1lTU1RBVFVTCQkweDAxMDQKKyNkZWZpbmUgT01BUDRfR1BJT19DVFJMCQkJMHgwMTMwCisjZGVmaW5lIE9NQVA0X0dQSU9fT0UJCQkweDAxMzQKKyNkZWZpbmUgT01BUDRfR1BJT19EQVRBSU4JCTB4MDEzOAorI2RlZmluZSBPTUFQNF9HUElPX0RBVEFPVVQJCTB4MDEzYworI2RlZmluZSBPTUFQNF9HUElPX0xFVkVMREVURUNUMAkJMHgwMTQwCisjZGVmaW5lIE9NQVA0X0dQSU9fTEVWRUxERVRFQ1QxCQkweDAxNDQKKyNkZWZpbmUgT01BUDRfR1BJT19SSVNJTkdERVRFQ1QJCTB4MDE0OAorI2RlZmluZSBPTUFQNF9HUElPX0ZBTExJTkdERVRFQ1QJMHgwMTRjCisjZGVmaW5lIE9NQVA0X0dQSU9fREVCT1VOQ0VOQUJMRQkweDAxNTAKKyNkZWZpbmUgT01BUDRfR1BJT19ERUJPVU5DSU5HVElNRQkweDAxNTQKKyNkZWZpbmUgT01BUDRfR1BJT19DTEVBUkRBVEFPVVQJCTB4MDE5MAorI2RlZmluZSBPTUFQNF9HUElPX1NFVERBVEFPVVQJCTB4MDE5NAogLyoKICAqIG9tYXAzNHh4IHNwZWNpZmljIEdQSU8gcmVnaXN0ZXJzCiAgKi8KQEAgLTM4NiwxMiArNDEyLDE2IEBACiAJCXJlZyArPSBPTUFQODUwX0dQSU9fRElSX0NPTlRST0w7CiAJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJcmVnICs9IE9NQVAyNFhYX0dQSU9fT0U7CiAJCWJyZWFrOwogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKwljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJCXJlZyArPSBPTUFQNF9HUElPX09FOworCQlicmVhazsKKyNlbmRpZgogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybjsKQEAgLTQ1OSw4ICs0ODksNyBAQAogCQkJbCAmPSB+KDEgPDwgZ3Bpbyk7CiAJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJaWYgKGVuYWJsZSkKIAkJCXJlZyArPSBPTUFQMjRYWF9HUElPX1NFVERBVEFPVVQ7CkBAIC00NjksNiArNDk4LDE1IEBACiAJCWwgPSAxIDw8IGdwaW87CiAJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKwljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJCWlmIChlbmFibGUpCisJCQlyZWcgKz0gT01BUDRfR1BJT19TRVREQVRBT1VUOworCQllbHNlCisJCQlyZWcgKz0gT01BUDRfR1BJT19DTEVBUkRBVEFPVVQ7CisJCWwgPSAxIDw8IGdwaW87CisJCWJyZWFrOworI2VuZGlmCiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwpAQCAtNTA5LDEyICs1NDcsMTYgQEAKIAkJcmVnICs9IE9NQVA4NTBfR1BJT19EQVRBX0lOUFVUOwogCQlicmVhazsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCXJlZyArPSBPTUFQMjRYWF9HUElPX0RBVEFJTjsKIAkJYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwkJcmVnICs9IE9NQVA0X0dQSU9fREFUQUlOOworCQlicmVhazsKKyNlbmRpZgogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTU4OSw3ICs2MzEsMTEgQEAKIAogCWJhbmsgPSBnZXRfZ3Bpb19iYW5rKGdwaW8pOwogCXJlZyA9IGJhbmstPmJhc2U7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKwlyZWcgKz0gT01BUDRfR1BJT19ERUJPVU5DRU5BQkxFOworI2Vsc2UKIAlyZWcgKz0gT01BUDI0WFhfR1BJT19ERUJPVU5DRV9FTjsKKyNlbmRpZgogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAl2YWwgPSBfX3Jhd19yZWFkbChyZWcpOwpAQCAtNjI2LDcgKzY3MiwxMSBAQAogCXJlZyA9IGJhbmstPmJhc2U7CiAKIAllbmNfdGltZSAmPSAweGZmOworI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CisJcmVnICs9IE9NQVA0X0dQSU9fREVCT1VOQ0lOR1RJTUU7CisjZWxzZQogCXJlZyArPSBPTUFQMjRYWF9HUElPX0RFQk9VTkNFX1ZBTDsKKyNlbmRpZgogCV9fcmF3X3dyaXRlbChlbmNfdGltZSwgcmVnKTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9zZXRfZ3Bpb19kZWJvdW5jZV90aW1lKTsKQEAgLTYzOCwyMyArNjg4LDQ2IEBACiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gYmFuay0+YmFzZTsKIAl1MzIgZ3Bpb19iaXQgPSAxIDw8IGdwaW87CisJdTMyIHZhbDsKIAotCU1PRF9SRUdfQklUKE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QwLCBncGlvX2JpdCwKLQkJdHJpZ2dlciAmIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0JTU9EX1JFR19CSVQoT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDEsIGdwaW9fYml0LAotCQl0cmlnZ2VyICYgSVJRX1RZUEVfTEVWRUxfSElHSCk7Ci0JTU9EX1JFR19CSVQoT01BUDI0WFhfR1BJT19SSVNJTkdERVRFQ1QsIGdwaW9fYml0LAotCQl0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpOwotCU1PRF9SRUdfQklUKE9NQVAyNFhYX0dQSU9fRkFMTElOR0RFVEVDVCwgZ3Bpb19iaXQsCi0JCXRyaWdnZXIgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpOwotCisJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCU1PRF9SRUdfQklUKE9NQVA0X0dQSU9fTEVWRUxERVRFQ1QwLCBncGlvX2JpdCwKKwkJCXRyaWdnZXIgJiBJUlFfVFlQRV9MRVZFTF9MT1cpOworCQlNT0RfUkVHX0JJVChPTUFQNF9HUElPX0xFVkVMREVURUNUMSwgZ3Bpb19iaXQsCisJCQl0cmlnZ2VyICYgSVJRX1RZUEVfTEVWRUxfSElHSCk7CisJCU1PRF9SRUdfQklUKE9NQVA0X0dQSU9fUklTSU5HREVURUNULCBncGlvX2JpdCwKKwkJCXRyaWdnZXIgJiBJUlFfVFlQRV9FREdFX1JJU0lORyk7CisJCU1PRF9SRUdfQklUKE9NQVA0X0dQSU9fRkFMTElOR0RFVEVDVCwgZ3Bpb19iaXQsCisJCQl0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKTsKKwl9IGVsc2UgeworCQlNT0RfUkVHX0JJVChPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMCwgZ3Bpb19iaXQsCisJCQl0cmlnZ2VyICYgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwkJTU9EX1JFR19CSVQoT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDEsIGdwaW9fYml0LAorCQkJdHJpZ2dlciAmIElSUV9UWVBFX0xFVkVMX0hJR0gpOworCQlNT0RfUkVHX0JJVChPTUFQMjRYWF9HUElPX1JJU0lOR0RFVEVDVCwgZ3Bpb19iaXQsCisJCQl0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCQlNT0RfUkVHX0JJVChPTUFQMjRYWF9HUElPX0ZBTExJTkdERVRFQ1QsIGdwaW9fYml0LAorCQkJdHJpZ2dlciAmIElSUV9UWVBFX0VER0VfRkFMTElORyk7CisJfQogCWlmIChsaWtlbHkoIShiYW5rLT5ub25fd2FrZXVwX2dwaW9zICYgZ3Bpb19iaXQpKSkgewotCQlpZiAodHJpZ2dlciAhPSAwKQotCQkJX19yYXdfd3JpdGVsKDEgPDwgZ3BpbywgYmFuay0+YmFzZQorCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJCWlmICh0cmlnZ2VyICE9IDApCisJCQkJX19yYXdfd3JpdGVsKDEgPDwgZ3BpbywgYmFuay0+YmFzZSsKKwkJCQkJCU9NQVA0X0dQSU9fSVJRV0FLRU4wKTsKKwkJCWVsc2UgeworCQkJCXZhbCA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKworCQkJCQkJCU9NQVA0X0dQSU9fSVJRV0FLRU4wKTsKKwkJCQlfX3Jhd193cml0ZWwodmFsICYgKH4oMSA8PCBncGlvKSksIGJhbmstPmJhc2UgKworCQkJCQkJCSBPTUFQNF9HUElPX0lSUVdBS0VOMCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAodHJpZ2dlciAhPSAwKQorCQkJCV9fcmF3X3dyaXRlbCgxIDw8IGdwaW8sIGJhbmstPmJhc2UKIAkJCQkJKyBPTUFQMjRYWF9HUElPX1NFVFdLVUVOQSk7Ci0JCWVsc2UKLQkJCV9fcmF3X3dyaXRlbCgxIDw8IGdwaW8sIGJhbmstPmJhc2UKKwkJCWVsc2UKKwkJCQlfX3Jhd193cml0ZWwoMSA8PCBncGlvLCBiYW5rLT5iYXNlCiAJCQkJCSsgT01BUDI0WFhfR1BJT19DTEVBUldLVUVOQSk7CisJCX0KIAl9IGVsc2UgewogCQlpZiAodHJpZ2dlciAhPSAwKQogCQkJYmFuay0+ZW5hYmxlZF9ub25fd2FrZXVwX2dwaW9zIHw9IGdwaW9fYml0OwpAQCAtNjYyLDkgKzczNSwxNSBAQAogCQkJYmFuay0+ZW5hYmxlZF9ub25fd2FrZXVwX2dwaW9zICY9IH5ncGlvX2JpdDsKIAl9CiAKLQliYW5rLT5sZXZlbF9tYXNrID0KLQkJX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QwKSB8Ci0JCV9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMSk7CisJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCWJhbmstPmxldmVsX21hc2sgPQorCQkJX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fTEVWRUxERVRFQ1QwKSB8CisJCQlfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDRfR1BJT19MRVZFTERFVEVDVDEpOworCX0gZWxzZSB7CisJCWJhbmstPmxldmVsX21hc2sgPQorCQkJX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QwKSB8CisJCQlfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDEpOworCX0KIH0KICNlbmRpZgogCkBAIC04MjgsMTIgKzkwNywxNiBAQAogCQlyZWcgKz0gT01BUDg1MF9HUElPX0lOVF9TVEFUVVM7CiAJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCXJlZyArPSBPTUFQMjRYWF9HUElPX0lSUVNUQVRVUzE7CiAJCWJyZWFrOwogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKwljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJCXJlZyArPSBPTUFQNF9HUElPX0lSUVNUQVRVUzA7CisJCWJyZWFrOworI2VuZGlmCiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwpAQCAtODQzLDEyICs5MjYsMTYgQEAKIAkvKiBXb3JrYXJvdW5kIGZvciBjbGVhcmluZyBEU1AgR1BJTyBpbnRlcnJ1cHRzIHRvIGFsbG93IHJldGVudGlvbiAqLwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJcmVnID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fSVJRU1RBVFVTMjsKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorCXJlZyA9IGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0lSUVNUQVRVUzE7CisjZW5kaWYKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXAzNHh4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKIAkJX19yYXdfd3JpdGVsKGdwaW9fbWFzaywgcmVnKTsKIAogCS8qIEZsdXNoIHBvc3RlZCB3cml0ZSBmb3IgdGhlIGlycSBzdGF0dXMgdG8gYXZvaWQgc3B1cmlvdXMgaW50ZXJydXB0cyAqLwogCV9fcmF3X3JlYWRsKHJlZyk7Ci0jZW5kaWYKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfY2xlYXJfZ3Bpb19pcnFzdGF0dXMoc3RydWN0IGdwaW9fYmFuayAqYmFuaywgaW50IGdwaW8pCkBAIC04OTgsMTMgKzk4NSwxOCBAQAogCQlpbnYgPSAxOwogCQlicmVhazsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19JUlFFTkFCTEUxOwogCQltYXNrID0gMHhmZmZmZmZmZjsKIAkJYnJlYWs7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwkJcmVnICs9IE9NQVA0X0dQSU9fSVJRU1RBVFVTU0VUMDsKKwkJbWFzayA9IDB4ZmZmZmZmZmY7CisJCWJyZWFrOworI2VuZGlmCiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuIDA7CkBAIC05NzIsOCArMTA2NCw3IEBACiAJCQlsIHw9IGdwaW9fbWFzazsKIAkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBcCi0JCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCWlmIChlbmFibGUpCiAJCQlyZWcgKz0gT01BUDI0WFhfR1BJT19TRVRJUlFFTkFCTEUxOwpAQCAtOTgyLDYgKzEwNzMsMTUgQEAKIAkJbCA9IGdwaW9fbWFzazsKIAkJYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwkJaWYgKGVuYWJsZSkKKwkJCXJlZyArPSBPTUFQNF9HUElPX0lSUVNUQVRVU1NFVDA7CisJCWVsc2UKKwkJCXJlZyArPSBPTUFQNF9HUElPX0lSUVNUQVRVU0NMUjA7CisJCWwgPSBncGlvX21hc2s7CisJCWJyZWFrOworI2VuZGlmCiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwpAQCAtMTE1NywxMSArMTI1NywxNCBAQAogCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fODUwKQogCQlpc3JfcmVnID0gYmFuay0+YmFzZSArIE9NQVA4NTBfR1BJT19JTlRfU1RBVFVTOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzI0WFgpCiAJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19JUlFTVEFUVVMxOwogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKwlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzI0WFgpCisJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19JUlFTVEFUVVMwOworI2VuZGlmCiAJd2hpbGUoMSkgewogCQl1MzIgaXNyX3NhdmVkLCBsZXZlbF9tYXNrID0gMDsKIAkJdTMyIGVuYWJsZWQ7CkBAIC0xMzE1LDggKzE0MTgsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKLXN0YXRpYyBpbnQgb21hcF9tcHVpb19zdXNwZW5kX2xhdGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IG9tYXBfbXB1aW9fc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBncGlvX2JhbmsJKmJhbmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl2b2lkIF9faW9tZW0JCSptYXNrX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQX01QVUlPX0dQSU9fTUFTS0lUOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwpAQCAtMTMyOSw4ICsxNDMzLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvbWFwX21wdWlvX3Jlc3VtZV9lYXJseShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBvbWFwX21wdWlvX3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBncGlvX2JhbmsJKmJhbmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl2b2lkIF9faW9tZW0JCSptYXNrX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQX01QVUlPX0dQSU9fTUFTS0lUOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwpAQCAtMTM0MiwxNCArMTQ0NywxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgb21hcF9tcHVpb19kZXZfcG1fb3BzID0geworCS5zdXNwZW5kX25vaXJxID0gb21hcF9tcHVpb19zdXNwZW5kX25vaXJxLAorCS5yZXN1bWVfbm9pcnEgPSBvbWFwX21wdWlvX3Jlc3VtZV9ub2lycSwKK307CisKIC8qIHVzZSBwbGF0Zm9ybV9kcml2ZXIgZm9yIHRoaXMsIG5vdyB0aGF0IHRoZXJlJ3Mgbm8gbG9uZ2VyIGFueQogICogcG9pbnQgdG8gc3lzX2RldmljZSAob3RoZXIgdGhhbiBub3QgZGlzdHVyYmluZyBvbGQgY29kZSkuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfbXB1aW9fZHJpdmVyID0gewotCS5zdXNwZW5kX2xhdGUJPSBvbWFwX21wdWlvX3N1c3BlbmRfbGF0ZSwKLQkucmVzdW1lX2Vhcmx5CT0gb21hcF9tcHVpb19yZXN1bWVfZWFybHksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIm1wdWlvIiwKKwkJLnBtCT0gJm9tYXBfbXB1aW9fZGV2X3BtX29wcywKIAl9LAogfTsKIApAQCAtMTYzOCw3ICsxNzQ3LDcgQEAKIAogCQlncGlvX2JhbmtfY291bnQgPSBPTUFQMzRYWF9OUl9HUElPUzsKIAkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzQ0eHg7Ci0JCXJldiA9IF9fcmF3X3JlYWRsKGdwaW9fYmFua1swXS5iYXNlICsgT01BUDI0WFhfR1BJT19SRVZJU0lPTik7CisJCXJldiA9IF9fcmF3X3JlYWRsKGdwaW9fYmFua1swXS5iYXNlICsgT01BUDRfR1BJT19SRVZJU0lPTik7CiAJCXByaW50ayhLRVJOX0lORk8gIk9NQVA0NHh4IEdQSU8gaGFyZHdhcmUgdmVyc2lvbiAlZC4lZFxuIiwKIAkJCShyZXYgPj4gNCkgJiAweDBmLCByZXYgJiAweDBmKTsKIAl9CkBAIC0xNjcyLDcgKzE3ODEsMTYgQEAKIAkJCXN0YXRpYyBjb25zdCB1MzIgbm9uX3dha2V1cF9ncGlvc1tdID0gewogCQkJCTB4ZTIwM2ZmYzAsIDB4MDg3MDAwNDAKIAkJCX07Ci0KKwkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX0lSUVNUQVRVU0NMUjApOworCQkJX19yYXdfd3JpdGV3KDB4MDAxNSwgYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX1NZU0NPTkZJRyk7CisJCQlfX3Jhd193cml0ZWwoMHgwMDAwMDAwMCwgYmFuay0+YmFzZSArCisJCQkJCQkgT01BUDRfR1BJT19ERUJPVU5DRU5BQkxFKTsKKwkJCS8qIEluaXRpYWxpemUgaW50ZXJmYWNlIGNsb2NrIHVuZ2F0ZWQsIG1vZHVsZSBlbmFibGVkICovCisJCQlfX3Jhd193cml0ZWwoMCwgYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fQ1RSTCk7CisJCX0gZWxzZSB7CiAJCQlfX3Jhd193cml0ZWwoMHgwMDAwMDAwMCwgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fSVJRRU5BQkxFMSk7CiAJCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fSVJRU1RBVFVTMSk7CiAJCQlfX3Jhd193cml0ZXcoMHgwMDE1LCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19TWVNDT05GSUcpOwpAQCAtMTY4MCwxMiArMTc5OCwxMiBAQAogCiAJCQkvKiBJbml0aWFsaXplIGludGVyZmFjZSBjbG9jayB1bmdhdGVkLCBtb2R1bGUgZW5hYmxlZCAqLwogCQkJX19yYXdfd3JpdGVsKDAsIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0NUUkwpOworCQl9CiAJCQlpZiAoaSA8IEFSUkFZX1NJWkUobm9uX3dha2V1cF9ncGlvcykpCiAJCQkJYmFuay0+bm9uX3dha2V1cF9ncGlvcyA9IG5vbl93YWtldXBfZ3Bpb3NbaV07CiAJCQlncGlvX2NvdW50ID0gMzI7CiAJCX0KICNlbmRpZgotCiAJCS8qIFJFVklTSVQgZXZlbnR1YWxseSBzd2l0Y2ggZnJvbSBPTUFQLXNwZWNpZmljIGdwaW8gc3RydWN0cwogCQkgKiBvdmVyIHRvIHRoZSBnZW5lcmljIG9uZXMKIAkJICovCkBAIC0xNzcxLDE0ICsxODg5LDIwIEBACiAJCQl3YWtlX3NldCA9IGJhbmstPmJhc2UgKyBPTUFQMTYxMF9HUElPX1NFVF9XQUtFVVBFTkE7CiAJCQlicmVhazsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJCXdha2Vfc3RhdHVzID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fV0FLRV9FTjsKIAkJCXdha2VfY2xlYXIgPSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19DTEVBUldLVUVOQTsKIAkJCXdha2Vfc2V0ID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fU0VUV0tVRU5BOwogCQkJYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorCQljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJCQl3YWtlX3N0YXR1cyA9IGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0lSUVdBS0VOMDsKKwkJCXdha2VfY2xlYXIgPSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19JUlFXQUtFTjA7CisJCQl3YWtlX3NldCA9IGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0lSUVdBS0VOMDsKKwkJCWJyZWFrOworI2VuZGlmCiAJCWRlZmF1bHQ6CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTgxMywxMyArMTkzNywxOCBAQAogCQkJd2FrZV9zZXQgPSBiYW5rLT5iYXNlICsgT01BUDE2MTBfR1BJT19TRVRfV0FLRVVQRU5BOwogCQkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBcCi0JCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJCXdha2VfY2xlYXIgPSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19DTEVBUldLVUVOQTsKIAkJCXdha2Vfc2V0ID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fU0VUV0tVRU5BOwogCQkJYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorCQljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJCQl3YWtlX2NsZWFyID0gYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fSVJRV0FLRU4wOworCQkJd2FrZV9zZXQgPSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19JUlFXQUtFTjA7CisJCQlicmVhazsKKyNlbmRpZgogCQlkZWZhdWx0OgogCQkJY29udGludWU7CiAJCX0KQEAgLTE4NjMsMjEgKzE5OTIsMjkgQEAKIAogCQlpZiAoIShiYW5rLT5lbmFibGVkX25vbl93YWtldXBfZ3Bpb3MpKQogCQkJY29udGludWU7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAkJYmFuay0+c2F2ZWRfZGF0YWluID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fREFUQUlOKTsKIAkJbDEgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19GQUxMSU5HREVURUNUKTsKIAkJbDIgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19SSVNJTkdERVRFQ1QpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKwkJYmFuay0+c2F2ZWRfZGF0YWluID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCisJCQkJCQkJT01BUDRfR1BJT19EQVRBSU4pOworCQlsMSA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0ZBTExJTkdERVRFQ1QpOworCQlsMiA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX1JJU0lOR0RFVEVDVCk7CisjZW5kaWYKIAkJYmFuay0+c2F2ZWRfZmFsbGluZ2RldGVjdCA9IGwxOwogCQliYW5rLT5zYXZlZF9yaXNpbmdkZXRlY3QgPSBsMjsKIAkJbDEgJj0gfmJhbmstPmVuYWJsZWRfbm9uX3dha2V1cF9ncGlvczsKIAkJbDIgJj0gfmJhbmstPmVuYWJsZWRfbm9uX3dha2V1cF9ncGlvczsKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBcCi0JCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJCV9fcmF3X3dyaXRlbChsMSwgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fRkFMTElOR0RFVEVDVCk7CiAJCV9fcmF3X3dyaXRlbChsMiwgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fUklTSU5HREVURUNUKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CisJCV9fcmF3X3dyaXRlbChsMSwgYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fRkFMTElOR0RFVEVDVCk7CisJCV9fcmF3X3dyaXRlbChsMiwgYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fUklTSU5HREVURUNUKTsKKyNlbmRpZgogCQljKys7CiAJfQogCWlmICghYykgewpAQCAtMTg5OSwyNyArMjAzNiwyOSBAQAogCiAJCWlmICghKGJhbmstPmVuYWJsZWRfbm9uX3dha2V1cF9ncGlvcykpCiAJCQljb250aW51ZTsKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBcCi0JCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJCV9fcmF3X3dyaXRlbChiYW5rLT5zYXZlZF9mYWxsaW5nZGV0ZWN0LAogCQkJCSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19GQUxMSU5HREVURUNUKTsKIAkJX19yYXdfd3JpdGVsKGJhbmstPnNhdmVkX3Jpc2luZ2RldGVjdCwKIAkJCQkgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fUklTSU5HREVURUNUKTsKKwkJbCA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0RBVEFJTik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorCQlfX3Jhd193cml0ZWwoYmFuay0+c2F2ZWRfZmFsbGluZ2RldGVjdCwKKwkJCQkgYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fRkFMTElOR0RFVEVDVCk7CisJCV9fcmF3X3dyaXRlbChiYW5rLT5zYXZlZF9yaXNpbmdkZXRlY3QsCisJCQkJIGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX1JJU0lOR0RFVEVDVCk7CisJCWwgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDRfR1BJT19EQVRBSU4pOwogI2VuZGlmCiAJCS8qIENoZWNrIGlmIGFueSBvZiB0aGUgbm9uLXdha2V1cCBpbnRlcnJ1cHQgR1BJT3MgaGF2ZSBjaGFuZ2VkCiAJCSAqIHN0YXRlLiAgSWYgc28sIGdlbmVyYXRlIGFuIElSUSBieSBzb2Z0d2FyZS4gIFRoaXMgaXMKIAkJICogaG9ycmlibHkgcmFjeSwgYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvIHRvIHdvcmsgYXJvdW5kCiAJCSAqIHRoaXMgc2lsaWNvbiBidWcuICovCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQkJbCA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0RBVEFJTik7Ci0jZW5kaWYKIAkJbCBePSBiYW5rLT5zYXZlZF9kYXRhaW47CiAJCWwgJj0gYmFuay0+bm9uX3dha2V1cF9ncGlvczsKIAkJaWYgKGwpIHsKIAkJCXUzMiBvbGQwLCBvbGQxOwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAkJCW9sZDAgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDApOwogCQkJb2xkMSA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMSk7CiAJCQlfX3Jhd193cml0ZWwob2xkMCB8IGwsIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMCk7CkBAIC0xOTI3LDYgKzIwNjYsMjAgQEAKIAkJCV9fcmF3X3dyaXRlbChvbGQwLCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDApOwogCQkJX19yYXdfd3JpdGVsKG9sZDEsIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMSk7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorCQkJb2xkMCA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKworCQkJCQkJT01BUDRfR1BJT19MRVZFTERFVEVDVDApOworCQkJb2xkMSA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKworCQkJCQkJT01BUDRfR1BJT19MRVZFTERFVEVDVDEpOworCQkJX19yYXdfd3JpdGVsKG9sZDAgfCBsLCBiYW5rLT5iYXNlICsKKwkJCQkJCU9NQVA0X0dQSU9fTEVWRUxERVRFQ1QwKTsKKwkJCV9fcmF3X3dyaXRlbChvbGQxIHwgbCwgYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX0xFVkVMREVURUNUMSk7CisJCQlfX3Jhd193cml0ZWwob2xkMCwgYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX0xFVkVMREVURUNUMCk7CisJCQlfX3Jhd193cml0ZWwob2xkMSwgYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX0xFVkVMREVURUNUMSk7CisjZW5kaWYKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZG1hLmgKaW5kZXggN2I5MzljYy4uNzJmNjgwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9kbWEuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2RtYS5oCkBAIC0xMjIsNiArMTIyLDExIEBACiAjZGVmaW5lIE9NQVBfRE1BNF9DQ0ZOKG4pCQkoMHg2MCAqIChuKSArIDB4YzApCiAjZGVmaW5lIE9NQVBfRE1BNF9DT0xPUihuKQkJKDB4NjAgKiAobikgKyAweGM0KQogCisvKiBBZGRpdGlvbmFsIHJlZ2lzdGVycyBhdmFpbGFibGUgb24gT01BUDQgKi8KKyNkZWZpbmUgT01BUF9ETUE0X0NEUChuKQkJKDB4NjAgKiAobikgKyAweGQwKQorI2RlZmluZSBPTUFQX0RNQTRfQ05EUChuKQkJKDB4NjAgKiAobikgKyAweGQ0KQorI2RlZmluZSBPTUFQX0RNQTRfQ0NETihuKQkJKDB4NjAgKiAobikgKyAweGQ4KQorCiAvKiBEdW1teSBkZWZpbmVzIHRvIGtlZXAgbXVsdGktb21hcCBjb21waWxlcyBoYXBweSAqLwogI2RlZmluZSBPTUFQMV9ETUFfUkVWSVNJT04JCTAKICNkZWZpbmUgT01BUDFfRE1BX0lSUVNUQVRVU19MMAkJMApAQCAtMzExLDYgKzMxNiw4OSBAQAogI2RlZmluZSBPTUFQMzRYWF9ETUFfVVNJTV9UWAkJNzkJLyogU19ETUFfNzggKi8KICNkZWZpbmUgT01BUDM0WFhfRE1BX1VTSU1fUlgJCTgwCS8qIFNfRE1BXzc5ICovCiAKKy8qIERNQSByZXF1ZXN0IGxpbmVzIGZvciA0NHh4ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRElTUENfUkVRCTYJLyogU19ETUFfNSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1lTX1JFUTIJCTcJLyogU19ETUFfNiAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfSVNTX1JFUTEJCTkJLyogU19ETUFfOCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfSVNTX1JFUTIJCTEwCS8qIFNfRE1BXzkgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0lTU19SRVEzCQkxMgkvKiBTX0RNQV8xMSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfSVNTX1JFUTQJCTEzCS8qIFNfRE1BXzEyICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfUkZCSV9SRVEJMTQJLyogU19ETUFfMTMgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTNfVFgwCQkxNQkvKiBTX0RNQV8xNCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJM19SWDAJCTE2CS8qIFNfRE1BXzE1ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDJfVFgJCTE3CS8qIFNfRE1BXzE2ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDJfUlgJCTE4CS8qIFNfRE1BXzE3ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDNfVFgJCTE5CS8qIFNfRE1BXzE4ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDNfUlgJCTIwCS8qIFNfRE1BXzE5ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkzX1RYMQkJMjMJLyogU19ETUFfMjIgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTNfUlgxCQkyNAkvKiBTX0RNQV8yMyAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDM19UWAkJMjUJLyogU19ETUFfMjQgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzNfUlgJCTI2CS8qIFNfRE1BXzI1ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkMxX1RYCQkyNwkvKiBTX0RNQV8yNiAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDMV9SWAkJMjgJLyogU19ETUFfMjcgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzJfVFgJCTI5CS8qIFNfRE1BXzI4ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkMyX1JYCQkzMAkvKiBTX0RNQV8yOSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1A0X1RYCQkzMQkvKiBTX0RNQV8zMCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1A0X1JYCQkzMgkvKiBTX0RNQV8zMSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AxX1RYCQkzMwkvKiBTX0RNQV8zMiAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AxX1JYCQkzNAkvKiBTX0RNQV8zMyAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9UWDAJCTM1CS8qIFNfRE1BXzM0ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkxX1JYMAkJMzYJLyogU19ETUFfMzUgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfVFgxCQkzNwkvKiBTX0RNQV8zNiAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9SWDEJCTM4CS8qIFNfRE1BXzM3ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkxX1RYMgkJMzkJLyogU19ETUFfMzggKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfUlgyCQk0MAkvKiBTX0RNQV8zOSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9UWDMJCTQxCS8qIFNfRE1BXzQwICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkxX1JYMwkJNDIJLyogU19ETUFfNDEgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTJfVFgwCQk0MwkvKiBTX0RNQV80MiAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMl9SWDAJCTQ0CS8qIFNfRE1BXzQzICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkyX1RYMQkJNDUJLyogU19ETUFfNDQgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTJfUlgxCQk0NgkvKiBTX0RNQV80NSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DMl9UWAkJNDcJLyogU19ETUFfNDYgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzJfUlgJCTQ4CS8qIFNfRE1BXzQ3ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUMV9UWAkJNDkJLyogU19ETUFfNDggKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQxX1JYCQk1MAkvKiBTX0RNQV80OSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfVUFSVDJfVFgJCTUxCS8qIFNfRE1BXzUwICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUMl9SWAkJNTIJLyogU19ETUFfNTEgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQzX1RYCQk1MwkvKiBTX0RNQV81MiAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfVUFSVDNfUlgJCTU0CS8qIFNfRE1BXzUzICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUNF9UWAkJNTUJLyogU19ETUFfNTQgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQ0X1JYCQk1NgkvKiBTX0RNQV81NSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DNF9UWAkJNTcJLyogU19ETUFfNTYgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzRfUlgJCTU4CS8qIFNfRE1BXzU3ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUM1X1RYCQk1OQkvKiBTX0RNQV81OCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DNV9SWAkJNjAJLyogU19ETUFfNTkgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzFfVFgJCTYxCS8qIFNfRE1BXzYwICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUMxX1JYCQk2MgkvKiBTX0RNQV82MSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1lTX1JFUTMJCTY0CS8qIFNfRE1BXzYzICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ1BETV9VUAkJNjUJLyogU19ETUFfNjQgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01DUERNX0RMCQk2NgkvKiBTX0RNQV82NSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJNF9UWDAJCTcwCS8qIFNfRE1BXzY5ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEk0X1JYMAkJNzEJLyogU19ETUFfNzAgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kxX1JFUTAJNzIJLyogU19ETUFfNzEgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kxX1JFUTEJNzMJLyogU19ETUFfNzIgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kxX1JFUTIJNzQJLyogU19ETUFfNzMgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kxX1JFUTMJNzUJLyogU19ETUFfNzQgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19IRE1JX1JFUQk3NgkvKiBTX0RNQV83NSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DM19UWAkJNzcJLyogU19ETUFfNzYgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzNfUlgJCTc4CS8qIFNfRE1BXzc3ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VU0lNX1RYCQk3OQkvKiBTX0RNQV83OCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfVVNJTV9SWAkJODAJLyogU19ETUFfNzkgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kyX1JFUTAJODEJLyogU19ETUFfODAgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kyX1JFUTEJODIJLyogU19ETUFfODEgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kyX1JFUTIJODMJLyogU19ETUFfODIgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kyX1JFUTMJODQJLyogU19ETUFfODMgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVEwCQkxMDEJLyogU19ETUFfMTAwICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRMQkJMTAyCS8qIFNfRE1BXzEwMSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUTIJCTEwMwkvKiBTX0RNQV8xMDIgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVEzCQkxMDQJLyogU19ETUFfMTAzICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRNAkJMTA1CS8qIFNfRE1BXzEwNCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUTUJCTEwNgkvKiBTX0RNQV8xMDUgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVE2CQkxMDcJLyogU19ETUFfMTA2ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRNwkJMTA4CS8qIFNfRE1BXzEwNyAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDNF9UWAkJMTI0CS8qIFNfRE1BXzEyMyAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDNF9SWAkJMTI1CS8qIFNfRE1BXzEyNCAqLworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiBIYXJkd2FyZSByZWdpc3RlcnMgZm9yIExDRCBETUEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWNic3AuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWNic3AuaAppbmRleCBiYjE1NGVhLi5lMGQ2ZWNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21jYnNwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tY2JzcC5oCkBAIC01Myw2ICs1MywxMSBAQAogI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDRfQkFTRQkweDQ5MDI2MDAwCiAjZGVmaW5lIE9NQVAzNFhYX01DQlNQNV9CQVNFCTB4NDgwOTYwMDAKIAorI2RlZmluZSBPTUFQNDRYWF9NQ0JTUDFfQkFTRQkweDQ5MDIyMDAwCisjZGVmaW5lIE9NQVA0NFhYX01DQlNQMl9CQVNFCTB4NDkwMjQwMDAKKyNkZWZpbmUgT01BUDQ0WFhfTUNCU1AzX0JBU0UJMHg0OTAyNjAwMAorI2RlZmluZSBPTUFQNDRYWF9NQ0JTUDRfQkFTRQkweDQ4MDc0MDAwCisKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCiAKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFJSMgkweDAwCkBAIC05OCw3ICsxMDMsOCBAQAogI2RlZmluZSBBVURJT19ETUFfVFgJCU9NQVBfRE1BX01DQlNQMV9UWAogI2RlZmluZSBBVURJT19ETUFfUlgJCU9NQVBfRE1BX01DQlNQMV9SWAogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAorCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCiAKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFJSMgkweDAwCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RSUjEJMHgwNApAQCAtMTM0LDYgKzE0MCwxMSBAQAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0VSRwkweDc0CiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDRVJICTB4NzgKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfU1lTQ09OCTB4OEMKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfVEhSU0gyCTB4OTAKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfVEhSU0gxCTB4OTQKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfSVJRU1QJMHhBMAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19JUlFFTgkweEE0CisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1dBS0VVUEVOCTB4QTgKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENDUgkweEFDCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDQ1IJMHhCMAogCkBAIC0yNDksOCArMjYwLDI3IEBACiAjZGVmaW5lIFJESVNBQkxFCQkweDAwMDEKIAogLyoqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgU1lTQ09ORklHIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ0xPQ0tBQ1RJVklUWSh2YWx1ZSkJKCh2YWx1ZSk8PDgpCisjZGVmaW5lIFNJRExFTU9ERSh2YWx1ZSkJKCh2YWx1ZSk8PDMpCisjZGVmaW5lIEVOQVdBS0VVUAkJMHgwMDA0CiAjZGVmaW5lIFNPRlRSU1QJCQkweDAwMDIKIAorLyoqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgRE1BIG9wZXJhdGluZyBtb2RlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUNCU1BfRE1BX01PREVfRUxFTUVOVAkJMAorI2RlZmluZSBNQ0JTUF9ETUFfTU9ERV9USFJFU0hPTEQJMQorI2RlZmluZSBNQ0JTUF9ETUFfTU9ERV9GUkFNRQkJMgorCisvKioqKioqKioqKioqKioqKioqKioqKiBNY0JTUCBXQUtFVVBFTiBiaXQgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBYRU1QVFlFT0ZFTgkJMHg0MDAwCisjZGVmaW5lIFhSRFlFTgkJCTB4MDQwMAorI2RlZmluZSBYRU9GRU4JCQkweDAyMDAKKyNkZWZpbmUgWEZTWEVOCQkJMHgwMTAwCisjZGVmaW5lIFhTWU5DRVJSRU4JCTB4MDA4MAorI2RlZmluZSBSUkRZRU4JCQkweDAwMDgKKyNkZWZpbmUgUkVPRkVOCQkJMHgwMDA0CisjZGVmaW5lIFJGU1JFTgkJCTB4MDAwMgorI2RlZmluZSBSU1lOQ0VSUkVOCQkweDAwMDEKKwogLyogd2UgZG9uJ3QgZG8gbXVsdGljaGFubmVsIGZvciBub3cgKi8KIHN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcgewogCXUxNiBzcGNyMjsKQEAgLTM0NCw2ICszNzQsOSBAQAogCXU4IGRtYV9yeF9zeW5jLCBkbWFfdHhfc3luYzsKIAl1MTYgcnhfaXJxLCB0eF9pcnE7CiAJc3RydWN0IG9tYXBfbWNic3Bfb3BzICpvcHM7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKwl1MTYgYnVmZmVyX3NpemU7CisjZW5kaWYKIH07CiAKIHN0cnVjdCBvbWFwX21jYnNwIHsKQEAgLTM3Nyw2ICs0MTAsMTEgQEAKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgY2xrICppY2xrOwogCXN0cnVjdCBjbGsgKmZjbGs7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKwlpbnQgZG1hX29wX21vZGU7CisJdTE2IG1heF90eF90aHJlczsKKwl1MTYgbWF4X3J4X3RocmVzOworI2VuZGlmCiB9OwogZXh0ZXJuIHN0cnVjdCBvbWFwX21jYnNwICoqbWNic3BfcHRyOwogZXh0ZXJuIGludCBvbWFwX21jYnNwX2NvdW50OwpAQCAtMzg1LDEwICs0MjMsMjUgQEAKIHZvaWQgb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcoc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqY29uZmlnLAogCQkJCQlpbnQgc2l6ZSk7CiB2b2lkIG9tYXBfbWNic3BfY29uZmlnKHVuc2lnbmVkIGludCBpZCwgY29uc3Qgc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyAqIGNvbmZpZyk7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKK3ZvaWQgb21hcF9tY2JzcF9zZXRfdHhfdGhyZXNob2xkKHVuc2lnbmVkIGludCBpZCwgdTE2IHRocmVzaG9sZCk7Cit2b2lkIG9tYXBfbWNic3Bfc2V0X3J4X3RocmVzaG9sZCh1bnNpZ25lZCBpbnQgaWQsIHUxNiB0aHJlc2hvbGQpOwordTE2IG9tYXBfbWNic3BfZ2V0X21heF90eF90aHJlc2hvbGQodW5zaWduZWQgaW50IGlkKTsKK3UxNiBvbWFwX21jYnNwX2dldF9tYXhfcnhfdGhyZXNob2xkKHVuc2lnbmVkIGludCBpZCk7CitpbnQgb21hcF9tY2JzcF9nZXRfZG1hX29wX21vZGUodW5zaWduZWQgaW50IGlkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9tY2JzcF9zZXRfdHhfdGhyZXNob2xkKHVuc2lnbmVkIGludCBpZCwgdTE2IHRocmVzaG9sZCkKK3sgfQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfbWNic3Bfc2V0X3J4X3RocmVzaG9sZCh1bnNpZ25lZCBpbnQgaWQsIHUxNiB0aHJlc2hvbGQpCit7IH0KK3N0YXRpYyBpbmxpbmUgdTE2IG9tYXBfbWNic3BfZ2V0X21heF90eF90aHJlc2hvbGQodW5zaWduZWQgaW50IGlkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHUxNiBvbWFwX21jYnNwX2dldF9tYXhfcnhfdGhyZXNob2xkKHVuc2lnbmVkIGludCBpZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgb21hcF9tY2JzcF9nZXRfZG1hX29wX21vZGUodW5zaWduZWQgaW50IGlkKSB7IHJldHVybiAwOyB9CisjZW5kaWYKIGludCBvbWFwX21jYnNwX3JlcXVlc3QodW5zaWduZWQgaW50IGlkKTsKIHZvaWQgb21hcF9tY2JzcF9mcmVlKHVuc2lnbmVkIGludCBpZCk7Ci12b2lkIG9tYXBfbWNic3Bfc3RhcnQodW5zaWduZWQgaW50IGlkKTsKLXZvaWQgb21hcF9tY2JzcF9zdG9wKHVuc2lnbmVkIGludCBpZCk7Cit2b2lkIG9tYXBfbWNic3Bfc3RhcnQodW5zaWduZWQgaW50IGlkLCBpbnQgdHgsIGludCByeCk7Cit2b2lkIG9tYXBfbWNic3Bfc3RvcCh1bnNpZ25lZCBpbnQgaWQsIGludCB0eCwgaW50IHJ4KTsKIHZvaWQgb21hcF9tY2JzcF94bWl0X3dvcmQodW5zaWduZWQgaW50IGlkLCB1MzIgd29yZCk7CiB1MzIgb21hcF9tY2JzcF9yZWN2X3dvcmQodW5zaWduZWQgaW50IGlkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMTA2MGUzNC4uZWQ4ZWM3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcGllZCBmcm9tIGFyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAotICogQ29weXJpZ2h0IChjKSAxOTk5IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqIENvcHlyaWdodCAoYykgMTk5OSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgogICovCiAjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKICNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCBlZmEwZTAxLi44OGFjOTc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtMTkxLDEzICsxOTEsMTc3IEBACiAJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBNQ1IyLCBjb25maWctPm1jcjIpOwogCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgTUNSMSwgY29uZmlnLT5tY3IxKTsKIAlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFBDUjAsIGNvbmZpZy0+cGNyMCk7Ci0JaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKSB7CiAJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgWENDUiwgY29uZmlnLT54Y2NyKTsKIAkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBSQ0NSLCBjb25maWctPnJjY3IpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9jb25maWcpOwogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKy8qCisgKiBvbWFwX21jYnNwX3NldF90eF90aHJlc2hvbGQgY29uZmlndXJlcyBob3cgdG8gZGVhbAorICogd2l0aCB0cmFuc21pdCB0aHJlc2hvbGQuIHRoZSB0aHJlc2hvbGQgdmFsdWUgYW5kIGhhbmRsZXIgY2FuIGJlCisgKiBjb25maWd1cmUgaW4gaGVyZS4KKyAqLwordm9pZCBvbWFwX21jYnNwX3NldF90eF90aHJlc2hvbGQodW5zaWduZWQgaW50IGlkLCB1MTYgdGhyZXNob2xkKQoreworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CisKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQlyZXR1cm47CisKKwlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CisJCXJldHVybjsKKwl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKKworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgVEhSU0gyLCB0aHJlc2hvbGQpOworfQorRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3NldF90eF90aHJlc2hvbGQpOworCisvKgorICogb21hcF9tY2JzcF9zZXRfcnhfdGhyZXNob2xkIGNvbmZpZ3VyZXMgaG93IHRvIGRlYWwKKyAqIHdpdGggcmVjZWl2ZSB0aHJlc2hvbGQuIHRoZSB0aHJlc2hvbGQgdmFsdWUgYW5kIGhhbmRsZXIgY2FuIGJlCisgKiBjb25maWd1cmUgaW4gaGVyZS4KKyAqLwordm9pZCBvbWFwX21jYnNwX3NldF9yeF90aHJlc2hvbGQodW5zaWduZWQgaW50IGlkLCB1MTYgdGhyZXNob2xkKQoreworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CisKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQlyZXR1cm47CisKKwlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CisJCXJldHVybjsKKwl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKKworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgVEhSU0gxLCB0aHJlc2hvbGQpOworfQorRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3NldF9yeF90aHJlc2hvbGQpOworCisvKgorICogb21hcF9tY2JzcF9nZXRfbWF4X3R4X3RocmVzIGp1c3QgcmV0dXJuIHRoZSBjdXJyZW50IGNvbmZpZ3VyZWQKKyAqIG1heGltdW0gdGhyZXNob2xkIGZvciB0cmFuc21pc3Npb24KKyAqLwordTE2IG9tYXBfbWNic3BfZ2V0X21heF90eF90aHJlc2hvbGQodW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKworCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKKworCXJldHVybiBtY2JzcC0+bWF4X3R4X3RocmVzOworfQorRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX2dldF9tYXhfdHhfdGhyZXNob2xkKTsKKworLyoKKyAqIG9tYXBfbWNic3BfZ2V0X21heF9yeF90aHJlcyBqdXN0IHJldHVybiB0aGUgY3VycmVudCBjb25maWd1cmVkCisgKiBtYXhpbXVtIHRocmVzaG9sZCBmb3IgcmVjZXB0aW9uCisgKi8KK3UxNiBvbWFwX21jYnNwX2dldF9tYXhfcnhfdGhyZXNob2xkKHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisKKwlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisKKwlyZXR1cm4gbWNic3AtPm1heF9yeF90aHJlczsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9nZXRfbWF4X3J4X3RocmVzaG9sZCk7CisKKy8qCisgKiBvbWFwX21jYnNwX2dldF9kbWFfb3BfbW9kZSBqdXN0IHJldHVybiB0aGUgY3VycmVudCBjb25maWd1cmVkCisgKiBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIG1jYnNwIGNoYW5uZWwKKyAqLworaW50IG9tYXBfbWNic3BfZ2V0X2RtYV9vcF9tb2RlKHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJaW50IGRtYV9vcF9tb2RlOworCisJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICgldSlcbiIsIF9fZnVuY19fLCBpZCArIDEpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCisJc3Bpbl9sb2NrX2lycSgmbWNic3AtPmxvY2spOworCWRtYV9vcF9tb2RlID0gbWNic3AtPmRtYV9vcF9tb2RlOworCXNwaW5fdW5sb2NrX2lycSgmbWNic3AtPmxvY2spOworCisJcmV0dXJuIGRtYV9vcF9tb2RlOworfQorRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX2dldF9kbWFfb3BfbW9kZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMzR4eF9tY2JzcF9yZXF1ZXN0KHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkKK3sKKwkvKgorCSAqIEVuYWJsZSB3YWt1cCBiZWhhdmlvciwgc21hcnQgaWRsZSBhbmQgYWxsIHdha2V1cHMKKwkgKiBSRVZJU0lUOiBzb21lIHdha2V1cHMgbWF5IGJlIHVubmVjZXNzYXJ5CisJICovCisJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCXUxNiBzeXNjb247CisKKwkJc3lzY29uID0gT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBTWVNDT04pOworCQlzeXNjb24gJj0gfihFTkFXQUtFVVAgfCBTSURMRU1PREUoMHgwMykgfCBDTE9DS0FDVElWSVRZKDB4MDMpKTsKKworCQlzcGluX2xvY2tfaXJxKCZtY2JzcC0+bG9jayk7CisJCWlmIChtY2JzcC0+ZG1hX29wX21vZGUgPT0gTUNCU1BfRE1BX01PREVfVEhSRVNIT0xEKSB7CisJCQlzeXNjb24gfD0gKEVOQVdBS0VVUCB8IFNJRExFTU9ERSgweDAyKSB8CisJCQkJCUNMT0NLQUNUSVZJVFkoMHgwMikpOworCQkJT01BUF9NQ0JTUF9XUklURShtY2JzcC0+aW9fYmFzZSwgV0FLRVVQRU4sCisJCQkJCVhSRFlFTiB8IFJSRFlFTik7CisJCX0gZWxzZSB7CisJCQlzeXNjb24gfD0gU0lETEVNT0RFKDB4MDEpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmbWNic3AtPmxvY2spOworCisJCU9NQVBfTUNCU1BfV1JJVEUobWNic3AtPmlvX2Jhc2UsIFNZU0NPTiwgc3lzY29uKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMzR4eF9tY2JzcF9mcmVlKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkKK3sKKwkvKgorCSAqIERpc2FibGUgd2FrdXAgYmVoYXZpb3IsIHNtYXJ0IGlkbGUgYW5kIGFsbCB3YWtldXBzCisJICovCisJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCXUxNiBzeXNjb247CisKKwkJc3lzY29uID0gT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBTWVNDT04pOworCQlzeXNjb24gJj0gfihFTkFXQUtFVVAgfCBTSURMRU1PREUoMHgwMykgfCBDTE9DS0FDVElWSVRZKDB4MDMpKTsKKwkJLyoKKwkJICogSFcgYnVnIHdvcmthcm91bmQgLSBJZiBub19pZGxlIG1vZGUgaXMgdGFrZW4sIHdlIG5lZWQgdG8KKwkJICogZ28gdG8gc21hcnRfaWRsZSBiZWZvcmUgZ29pbmcgdG8gYWx3YXlzX2lkbGUsIG9yIHRoZQorCQkgKiBkZXZpY2Ugd2lsbCBub3QgaGl0IHJldGVudGlvbiBhbnltb3JlLgorCQkgKi8KKwkJc3lzY29uIHw9IFNJRExFTU9ERSgweDAyKTsKKwkJT01BUF9NQ0JTUF9XUklURShtY2JzcC0+aW9fYmFzZSwgU1lTQ09OLCBzeXNjb24pOworCisJCXN5c2NvbiAmPSB+KFNJRExFTU9ERSgweDAzKSk7CisJCU9NQVBfTUNCU1BfV1JJVEUobWNic3AtPmlvX2Jhc2UsIFNZU0NPTiwgc3lzY29uKTsKKworCQlPTUFQX01DQlNQX1dSSVRFKG1jYnNwLT5pb19iYXNlLCBXQUtFVVBFTiwgMCk7CisJfQorfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMzR4eF9tY2JzcF9yZXF1ZXN0KHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMzR4eF9tY2JzcF9mcmVlKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkge30KKyNlbmRpZgorCiAvKgogICogV2UgY2FuIGNob29zZSBiZXR3ZWVuIElSUSBiYXNlZCBvciBwb2xsZWQgSU8uCiAgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgb21hcF9tY2JzcF9yZXF1ZXN0KCkuCkBAIC0yNTcsNiArNDIxLDkgQEAKIAljbGtfZW5hYmxlKG1jYnNwLT5pY2xrKTsKIAljbGtfZW5hYmxlKG1jYnNwLT5mY2xrKTsKIAorCS8qIERvIHByb2NlZHVyZSBzcGVjaWZpYyB0byBvbWFwMzR4eCBhcmNoLCBpZiBhcHBsaWNhYmxlICovCisJb21hcDM0eHhfbWNic3BfcmVxdWVzdChtY2JzcCk7CisKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGF0IHRyYW5zbWl0dGVyLCByZWNlaXZlciBhbmQgc2FtcGxlLXJhdGUgZ2VuZXJhdG9yIGFyZQogCSAqIG5vdCBydW5uaW5nIGJlZm9yZSBhY3RpdmF0aW5nIElSUXMuCkBAIC0zMDUsNiArNDcyLDkgQEAKIAlpZiAobWNic3AtPnBkYXRhICYmIG1jYnNwLT5wZGF0YS0+b3BzICYmIG1jYnNwLT5wZGF0YS0+b3BzLT5mcmVlKQogCQltY2JzcC0+cGRhdGEtPm9wcy0+ZnJlZShpZCk7CiAKKwkvKiBEbyBwcm9jZWR1cmUgc3BlY2lmaWMgdG8gb21hcDM0eHggYXJjaCwgaWYgYXBwbGljYWJsZSAqLworCW9tYXAzNHh4X21jYnNwX2ZyZWUobWNic3ApOworCiAJY2xrX2Rpc2FibGUobWNic3AtPmZjbGspOwogCWNsa19kaXNhYmxlKG1jYnNwLT5pY2xrKTsKIApAQCAtMzI4LDE0ICs0OTgsMTUgQEAKIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9mcmVlKTsKIAogLyoKLSAqIEhlcmUgd2Ugc3RhcnQgdGhlIE1jQlNQLCBieSBlbmFibGluZyB0aGUgc2FtcGxlCi0gKiBnZW5lcmF0b3IsIGJvdGggdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVycywKLSAqIGFuZCB0aGUgZnJhbWUgc3luYy4KKyAqIEhlcmUgd2Ugc3RhcnQgdGhlIE1jQlNQLCBieSBlbmFibGluZyB0cmFuc21pdHRlciwgcmVjZWl2ZXIgb3IgYm90aC4KKyAqIElmIG5vIHRyYW5zbWl0dGVyIG9yIHJlY2VpdmVyIGlzIGFjdGl2ZSBwcmlvciBjYWxsaW5nLCB0aGVuIHNhbXBsZS1yYXRlCisgKiBnZW5lcmF0b3IgYW5kIGZyYW1lIHN5bmMgYXJlIHN0YXJ0ZWQuCiAgKi8KLXZvaWQgb21hcF9tY2JzcF9zdGFydCh1bnNpZ25lZCBpbnQgaWQpCit2b2lkIG9tYXBfbWNic3Bfc3RhcnQodW5zaWduZWQgaW50IGlkLCBpbnQgdHgsIGludCByeCkKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CiAJdm9pZCBfX2lvbWVtICppb19iYXNlOworCWludCBpZGxlOwogCXUxNiB3OwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewpAQCAtMzQ4LDMyICs1MTksNTggQEAKIAltY2JzcC0+cnhfd29yZF9sZW5ndGggPSAoT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFJDUjEpID4+IDUpICYgMHg3OwogCW1jYnNwLT50eF93b3JkX2xlbmd0aCA9IChPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgWENSMSkgPj4gNSkgJiAweDc7CiAKLQkvKiBTdGFydCB0aGUgc2FtcGxlIGdlbmVyYXRvciAqLwotCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHcgfCAoMSA8PCA2KSk7CisJaWRsZSA9ICEoKE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMikgfAorCQkgIE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMSkpICYgMSk7CisKKwlpZiAoaWRsZSkgeworCQkvKiBTdGFydCB0aGUgc2FtcGxlIGdlbmVyYXRvciAqLworCQl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKKwkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMiwgdyB8ICgxIDw8IDYpKTsKKwl9CiAKIAkvKiBFbmFibGUgdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVyICovCisJdHggJj0gMTsKIAl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCB3IHwgMSk7CisJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMiwgdyB8IHR4KTsKIAorCXJ4ICY9IDE7CiAJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMSk7Ci0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMSwgdyB8IDEpOworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIHcgfCByeCk7CiAKLQl1ZGVsYXkoMTAwKTsKKwkvKgorCSAqIFdvcnN0IGNhc2U6IENMS1NSRyoyID0gODAwMGtoejogKDEvODAwMCkgKiAyICogMiB1c2VjCisJICogUkVWSVNJVDogMTAwdXMgbWF5IGdpdmUgZW5vdWdoIHRpbWUgZm9yIHR3byBDTEtTUkcsIGhvd2V2ZXIKKwkgKiBkdWUgdG8gc29tZSB1bmtub3duIFBNIHJlbGF0ZWQsIGNsb2NrIGdhdGluZyBldGMuIHJlYXNvbiBpdAorCSAqIGlzIG5vdyBhdCA1MDB1cy4KKwkgKi8KKwl1ZGVsYXkoNTAwKTsKIAotCS8qIFN0YXJ0IGZyYW1lIHN5bmMgKi8KLQl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCB3IHwgKDEgPDwgNykpOworCWlmIChpZGxlKSB7CisJCS8qIFN0YXJ0IGZyYW1lIHN5bmMgKi8KKwkJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMik7CisJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHcgfCAoMSA8PCA3KSk7CisJfQorCisJaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCS8qIFJlbGVhc2UgdGhlIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlciAqLworCQl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFhDQ1IpOworCQl3ICY9IH4odHggPyBYRElTQUJMRSA6IDApOworCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFhDQ1IsIHcpOworCQl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFJDQ1IpOworCQl3ICY9IH4ocnggPyBSRElTQUJMRSA6IDApOworCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFJDQ1IsIHcpOworCX0KIAogCS8qIER1bXAgTWNCU1AgUmVncyAqLwogCW9tYXBfbWNic3BfZHVtcF9yZWcoaWQpOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3N0YXJ0KTsKIAotdm9pZCBvbWFwX21jYnNwX3N0b3AodW5zaWduZWQgaW50IGlkKQordm9pZCBvbWFwX21jYnNwX3N0b3AodW5zaWduZWQgaW50IGlkLCBpbnQgdHgsIGludCByeCkKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CiAJdm9pZCBfX2lvbWVtICppb19iYXNlOworCWludCBpZGxlOwogCXUxNiB3OwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewpAQCAtMzg1LDE2ICs1ODIsMzMgQEAKIAlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CiAKIAkvKiBSZXNldCB0cmFuc21pdHRlciAqLworCXR4ICY9IDE7CisJaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgWENDUik7CisJCXcgfD0gKHR4ID8gWERJU0FCTEUgOiAwKTsKKwkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBYQ0NSLCB3KTsKKwl9CiAJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMik7Ci0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMiwgdyAmIH4oMSkpOworCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHcgJiB+dHgpOwogCiAJLyogUmVzZXQgcmVjZWl2ZXIgKi8KKwlyeCAmPSAxOworCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgeworCQl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFJDQ1IpOworCQl3IHw9ICh0eCA/IFJESVNBQkxFIDogMCk7CisJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgUkNDUiwgdyk7CisJfQogCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjEpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIHcgJiB+KDEpKTsKKwlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IxLCB3ICYgfnJ4KTsKIAotCS8qIFJlc2V0IHRoZSBzYW1wbGUgcmF0ZSBnZW5lcmF0b3IgKi8KLQl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCB3ICYgfigxIDw8IDYpKTsKKwlpZGxlID0gISgoT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKSB8CisJCSAgT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKSkgJiAxKTsKKworCWlmIChpZGxlKSB7CisJCS8qIFJlc2V0IHRoZSBzYW1wbGUgcmF0ZSBnZW5lcmF0b3IgKi8KKwkJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMik7CisJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHcgJiB+KDEgPDwgNikpOworCX0KIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zdG9wKTsKIApAQCAtODgzLDYgKzEwOTcsMTQ5IEBACiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3Bfc2V0X3NwaV9tb2RlKTsKIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAzNFhYCisjZGVmaW5lIG1heF90aHJlcyhtKQkJCShtY2JzcC0+cGRhdGEtPmJ1ZmZlcl9zaXplKQorI2RlZmluZSB2YWxpZF90aHJlc2hvbGQobSwgdmFsKQkJKCh2YWwpIDw9IG1heF90aHJlcyhtKSkKKyNkZWZpbmUgVEhSRVNIT0xEX1BST1BfQlVJTERFUihwcm9wKQkJCQkJXAorc3RhdGljIHNzaXplX3QgcHJvcCMjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAkJCQlcCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAorCQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBtY2JzcC0+cHJvcCk7CQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHByb3AjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJCVwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3AgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCVwKKwl1bnNpZ25lZCBsb25nIHZhbDsJCQkJCQlcCisJaW50IHN0YXR1czsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXN0YXR1cyA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCk7CQkJCVwKKwlpZiAoc3RhdHVzKQkJCQkJCQlcCisJCXJldHVybiBzdGF0dXM7CQkJCQkJXAorCQkJCQkJCQkJXAorCWlmICghdmFsaWRfdGhyZXNob2xkKG1jYnNwLCB2YWwpKQkJCQlcCisJCXJldHVybiAtRURPTTsJCQkJCQlcCisJCQkJCQkJCQlcCisJbWNic3AtPnByb3AgPSB2YWw7CQkJCQkJXAorCXJldHVybiBzaXplOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKHByb3AsIDA2NDQsIHByb3AjI19zaG93LCBwcm9wIyNfc3RvcmUpOworCitUSFJFU0hPTERfUFJPUF9CVUlMREVSKG1heF90eF90aHJlcyk7CitUSFJFU0hPTERfUFJPUF9CVUlMREVSKG1heF9yeF90aHJlcyk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkbWFfb3BfbW9kZXNbXSA9IHsKKwkiZWxlbWVudCIsICJ0aHJlc2hvbGQiLCAiZnJhbWUiLAorfTsKKworc3RhdGljIHNzaXplX3QgZG1hX29wX21vZGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBkbWFfb3BfbW9kZSwgaSA9IDA7CisJc3NpemVfdCBsZW4gPSAwOworCWNvbnN0IGNoYXIgKiBjb25zdCAqczsKKworCXNwaW5fbG9ja19pcnEoJm1jYnNwLT5sb2NrKTsKKwlkbWFfb3BfbW9kZSA9IG1jYnNwLT5kbWFfb3BfbW9kZTsKKwlzcGluX3VubG9ja19pcnEoJm1jYnNwLT5sb2NrKTsKKworCWZvciAocyA9ICZkbWFfb3BfbW9kZXNbaV07IGkgPCBBUlJBWV9TSVpFKGRtYV9vcF9tb2Rlcyk7IHMrKywgaSsrKSB7CisJCWlmIChkbWFfb3BfbW9kZSA9PSBpKQorCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiWyVzXSAiLCAqcyk7CisJCWVsc2UKKwkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiVzICIsICpzKTsKKwl9CisJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiXG4iKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRtYV9vcF9tb2RlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNvbnN0IGNoYXIgKiBjb25zdCAqczsKKwlpbnQgaSA9IDA7CisKKwlmb3IgKHMgPSAmZG1hX29wX21vZGVzW2ldOyBpIDwgQVJSQVlfU0laRShkbWFfb3BfbW9kZXMpOyBzKyssIGkrKykKKwkJaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgKnMpKQorCQkJYnJlYWs7CisKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGRtYV9vcF9tb2RlcykpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycSgmbWNic3AtPmxvY2spOworCWlmICghbWNic3AtPmZyZWUpIHsKKwkJc2l6ZSA9IC1FQlVTWTsKKwkJZ290byB1bmxvY2s7CisJfQorCW1jYnNwLT5kbWFfb3BfbW9kZSA9IGk7CisKK3VubG9jazoKKwlzcGluX3VubG9ja19pcnEoJm1jYnNwLT5sb2NrKTsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZG1hX29wX21vZGUsIDA2NDQsIGRtYV9vcF9tb2RlX3Nob3csIGRtYV9vcF9tb2RlX3N0b3JlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmFkZGl0aW9uYWxfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfbWF4X3R4X3RocmVzLmF0dHIsCisJJmRldl9hdHRyX21heF9yeF90aHJlcy5hdHRyLAorCSZkZXZfYXR0cl9kbWFfb3BfbW9kZS5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZGRpdGlvbmFsX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gKHN0cnVjdCBhdHRyaWJ1dGUgKiopYWRkaXRpb25hbF9hdHRycywKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZGV2aW5pdCBvbWFwX2FkZGl0aW9uYWxfYWRkKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZhZGRpdGlvbmFsX2F0dHJfZ3JvdXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZleGl0IG9tYXBfYWRkaXRpb25hbF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmYWRkaXRpb25hbF9hdHRyX2dyb3VwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZGV2aW5pdCBvbWFwMzR4eF9kZXZpY2VfaW5pdChzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3ApCit7CisJbWNic3AtPmRtYV9vcF9tb2RlID0gTUNCU1BfRE1BX01PREVfRUxFTUVOVDsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJbWNic3AtPm1heF90eF90aHJlcyA9IG1heF90aHJlcyhtY2JzcCk7CisJCW1jYnNwLT5tYXhfcnhfdGhyZXMgPSBtYXhfdGhyZXMobWNic3ApOworCQkvKgorCQkgKiBSRVZJU0lUOiBTZXQgZG1hcF9vcF9tb2RlIHRvIFRIUkVTSE9MRCBhcyBkZWZhdWx0CisJCSAqIGZvciBtY2JzcDIgaW5zdGFuY2VzLgorCQkgKi8KKwkJaWYgKG9tYXBfYWRkaXRpb25hbF9hZGQobWNic3AtPmRldikpCisJCQlkZXZfd2FybihtY2JzcC0+ZGV2LAorCQkJCSJVbmFibGUgdG8gY3JlYXRlIGFkZGl0aW9uYWwgY29udHJvbHNcbiIpOworCX0gZWxzZSB7CisJCW1jYnNwLT5tYXhfdHhfdGhyZXMgPSAtRUlOVkFMOworCQltY2JzcC0+bWF4X3J4X3RocmVzID0gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RldmV4aXQgb21hcDM0eHhfZGV2aWNlX2V4aXQoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwKQoreworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKKwkJb21hcF9hZGRpdGlvbmFsX3JlbW92ZShtY2JzcC0+ZGV2KTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZpbml0IG9tYXAzNHh4X2RldmljZV9pbml0KHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RldmV4aXQgb21hcDM0eHhfZGV2aWNlX2V4aXQoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwKSB7fQorI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAzNFhYICovCisKIC8qCiAgKiBNY0JTUDEgYW5kIE1jQlNQMyBhcmUgZGlyZWN0bHkgbWFwcGVkIG9uIDE2MTAgYW5kIDE1MTAuCiAgKiA3MzAgaGFzIG9ubHkgMiBNY0JTUCwgYW5kIGJvdGggb2YgdGhlbSBhcmUgTVBVIHBlcmlwaGVyYWxzLgpAQCAtOTUzLDYgKzEzMTAsMTAgQEAKIAltY2JzcC0+ZGV2ID0gJnBkZXYtPmRldjsKIAltY2JzcF9wdHJbaWRdID0gbWNic3A7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWNic3ApOworCisJLyogSW5pdGlhbGl6ZSBtY2JzcCBwcm9wZXJ0aWVzIGZvciBPTUFQMzRYWCBpZiBuZWVkZWQgLyBhcHBsaWNhYmxlICovCisJb21hcDM0eHhfZGV2aWNlX2luaXQobWNic3ApOworCiAJcmV0dXJuIDA7CiAKIGVycl9mY2xrOgpAQCAtOTc2LDYgKzEzMzcsOCBAQAogCQkJCW1jYnNwLT5wZGF0YS0+b3BzLT5mcmVlKQogCQkJbWNic3AtPnBkYXRhLT5vcHMtPmZyZWUobWNic3AtPmlkKTsKIAorCQlvbWFwMzR4eF9kZXZpY2VfZXhpdChtY2JzcCk7CisKIAkJY2xrX2Rpc2FibGUobWNic3AtPmZjbGspOwogCQljbGtfZGlzYWJsZShtY2JzcC0+aWNsayk7CiAJCWNsa19wdXQobWNic3AtPmZjbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtczNjL0tjb25maWcKaW5kZXggOTM1Yzc1NS4uODkzMWM1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXMzYy9LY29uZmlnCkBAIC0xOTgsNCArMTk4LDkgQEAKIAloZWxwCiAJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9uIGZvciBVU0IgaGlnaC1zcGVlZCBPdEcKIAorY29uZmlnIFMzQ19ERVZfTkFORAorCWJvb2wKKwloZWxwCisJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9uIGZvciBOQU5EIGNvbnRyb2xsZXIKKwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUKaW5kZXggMDc2MTc2Ni4uM2MwOTEwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUKQEAgLTI4LDEzICsyOCwxNyBAQAogb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0tZ3Bpby5vCiBvYmotJChDT05GSUdfUzNDMjQxMF9QTV9DSEVDSykJKz0gcG0tY2hlY2subwogCisjIFBXTSBzdXBwb3J0CisKK29iai0kKENPTkZJR19IQVZFX1BXTSkJCSs9IHB3bS5vCisKICMgZGV2aWNlcwogCiBvYmotJChDT05GSUdfUzNDX0RFVl9IU01NQykJKz0gZGV2LWhzbW1jLm8KIG9iai0kKENPTkZJR19TM0NfREVWX0hTTU1DMSkJKz0gZGV2LWhzbW1jMS5vCiBvYmoteQkJCQkrPSBkZXYtaTJjMC5vCiBvYmotJChDT05GSUdfUzNDX0RFVl9JMkMxKQkrPSBkZXYtaTJjMS5vCi1vYmotJChDT05GSUdfU05EX1MzQzY0WFhfU09DX0kyUykJKz0gZGV2LWF1ZGlvLm8KIG9iai0kKENPTkZJR19TM0NfREVWX0ZCKQkrPSBkZXYtZmIubwogb2JqLSQoQ09ORklHX1MzQ19ERVZfVVNCX0hPU1QpCSs9IGRldi11c2Iubwogb2JqLSQoQ09ORklHX1MzQ19ERVZfVVNCX0hTT1RHKQkrPSBkZXYtdXNiLWhzb3RnLm8KK29iai0kKENPTkZJR19TM0NfREVWX05BTkQpCSs9IGRldi1uYW5kLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1uYW5kLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9kZXYtbmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNTMyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9kZXYtbmFuZC5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBTM0Mgc2VyaWVzIGRldmljZSBkZWZpbml0aW9uIGZvciBuYW5kIGRldmljZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY19uYW5kX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0NfUEFfTkFORCwKKwkJLmVuZCAgID0gUzNDX1BBX05BTkQgKyBTWl8xTSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX25hbmQgPSB7CisJLm5hbWUJCSAgPSAiczNjMjQxMC1uYW5kIiwKKwkuaWQJCSAgPSAtMSwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfbmFuZF9yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfbmFuZF9yZXNvdXJjZSwKK307CisKK0VYUE9SVF9TWU1CT0woczNjX2RldmljZV9uYW5kKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hZGMuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hZGMuaAppbmRleCBkODQ3YmQ0Li41ZjNiMWNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYWRjLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2FkYy5oCkBAIC0xOSwxMCArMTksMTQgQEAKIGV4dGVybiBpbnQgczNjX2FkY19zdGFydChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKIAkJCSB1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IG5yX3NhbXBsZXMpOwogCitleHRlcm4gaW50IHMzY19hZGNfcmVhZChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNoKTsKKwogZXh0ZXJuIHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqCiAJczNjX2FkY19yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJIHZvaWQgKCpzZWxlY3QpKHVuc2lnbmVkIHNlbGVjdGVkKSwKLQkJCSB2b2lkICgqY29udikodW5zaWduZWQgZDAsIHVuc2lnbmVkIGQxLAorCQkJIHZvaWQgKCpzZWxlY3QpKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50LAorCQkJCQl1bnNpZ25lZCBzZWxlY3RlZCksCisJCQkgdm9pZCAoKmNvbnYpKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICAgIHVuc2lnbmVkIGQwLCB1bnNpZ25lZCBkMSwKIAkJCQkgICAgICB1bnNpZ25lZCAqc2FtcGxlc19sZWZ0KSwKIAkJCSB1bnNpZ25lZCBpbnQgaXNfdHMpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYXVkaW8tc2ltdGVjLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYXVkaW8tc2ltdGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY0NDBiOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hdWRpby1zaW10ZWMuaApAQCAtMCwwICsxLDM3IEBACisvKiBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYXVkaW8tc2ltdGVjLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTaW10ZWMgQXVkaW8gc3VwcG9ydC4KKyovCisKKy8qKgorICogc3RydWN0IHMzYzI0eHhfYXVkaW9fc2ltdGVjX3BkYXRhIC0gcGxhdGZvcm0gZGF0YSBmb3Igc2ltdGVjIGF1ZGlvCisgKiBAdXNlX21wbGxpbjogU2VsZWN0IGNvZGVjIGNsb2NrIGZyb20gTVBMTGluCisgKiBAb3V0cHV0X2NkY2xrOiBOZWVkIHRvIG91dHB1dCBDRENMSyB0byB0aGUgY29kZWMKKyAqIEBoYXZlX21pYzogU2V0IGlmIHdlIGhhdmUgYSBNSUMgc29ja2V0CisgKiBAaGF2ZV9sb3V0OiBTZXQgaWYgd2UgaGF2ZSBhIExpbmVPdXQgc29ja2V0CisgKiBAYW1wX2dwaW86IEdQSU8gcGluIHRvIGVuYWJsZSB0aGUgQU1QCisgKiBAYW1wX2dhaW46IE9wdGlvbiBHUElPIHRvIGNvbnRyb2wgQU1QIGdhaW4KKyAqLworc3RydWN0IHMzYzI0eHhfYXVkaW9fc2ltdGVjX3BkYXRhIHsKKwl1bnNpZ25lZCBpbnQJdXNlX21wbGxpbjoxOworCXVuc2lnbmVkIGludAlvdXRwdXRfY2RjbGs6MTsKKworCXVuc2lnbmVkIGludAloYXZlX21pYzoxOworCXVuc2lnbmVkIGludAloYXZlX2xvdXQ6MTsKKworCWludAkJYW1wX2dwaW87CisJaW50CQlhbXBfZ2FpblsyXTsKKworCXZvaWQJKCpzdGFydHVwKSh2b2lkKTsKK307CisKK2V4dGVybiBpbnQgc2ltdGVjX2F1ZGlvX2FkZChjb25zdCBjaGFyICpjb2RlY19uYW1lLAorCQkJICAgIHN0cnVjdCBzM2MyNHh4X2F1ZGlvX3NpbXRlY19wZGF0YSAqcGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY3B1LWZyZXEuaAppbmRleCBjODZhMTMzLi43Yjk4MmI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY3B1LWZyZXEuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY3B1LWZyZXEuaApAQCAtMTcsNiArMTcsMjEgQEAKIHN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZDsKIHN0cnVjdCBzM2NfaW90aW1pbmdzOwogCisvKioKKyAqIHN0cnVjdCBzM2NfZnJlcSAtIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiAobWFpbmx5IGZvciBjb3JlIGRyaXZlcnMpCisgKiBAZmNsazogVGhlIEZDTEsgZnJlcXVlbmN5IGluIEh6LgorICogQGFybWNsazogVGhlIEFSTUNMSyBmcmVxdWVuY3kgaW4gSHouCisgKiBAaGNsa190bnM6IEhDTEsgY3ljbGUgdGltZSBpbiAxMHRocyBvZiBuYW5vLXNlY29uZHMuCisgKiBAaGNsazogVGhlIEhDTEsgZnJlcXVlbmN5IGluIEh6LgorICogQHBjbGs6IFRoZSBQQ0xLIGZyZXF1ZW5jeSBpbiBIei4KKyAqCisgKiBUaGlzIGNvbnRhaW5zIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbgorICogbWFpbmx5IGZvciB0aGUgY29yZSBkcml2ZXJzIHRvIGVuc3VyZSB3ZSBkbyBub3QgZW5kIHVwIHBhc3NpbmcgYWJvdXQKKyAqIGEgbGFyZ2UgbnVtYmVyIG9mIHBhcmFtZXRlcnMuCisgKgorICogVGhlIEBoY2xrX3RucyBmaWVsZCBpcyBhIHVzZWZ1bCBjYWNoZSBmb3IgdGhlIHBhcnRzIG9mIHRoZSBkcml2ZXJzIHRoYXQKKyAqIG5lZWQgdG8gY2FsY3VsYXRlIElPIHRpbWluZ3MgYW5kIHN1Y2hsaWtlLgorICovCiBzdHJ1Y3QgczNjX2ZyZXEgewogCXVuc2lnbmVkIGxvbmcJZmNsazsKIAl1bnNpZ25lZCBsb25nCWFybWNsazsKQEAgLTI1LDQ4ICs0MCw4NCBAQAogCXVuc2lnbmVkIGxvbmcJcGNsazsKIH07CiAKLS8qIHdyYXBwZXIgJ3N0cnVjdCBjcHVmcmVxX2ZyZXFzJyBzbyB0aGF0IGFueSBkcml2ZXJzIHJlY2VpdmluZyB0aGUKKy8qKgorICogc3RydWN0IHMzY19jcHVmcmVxX2ZyZXFzIC0gczNjIGNwdWZyZXEgbm90aWZpY2F0aW9uIGluZm9ybWF0aW9uLgorICogQGZyZXFzOiBUaGUgY3B1ZnJlcSBzZXR0aW5nIGluZm9ybWF0aW9uLgorICogQG9sZDogVGhlIG9sZCBjbG9jayBzZXR0aW5ncy4KKyAqIEBuZXc6IFRoZSBuZXcgY2xvY2sgc2V0dGluZ3MuCisgKiBAcGxsX2NoYW5naW5nOiBTZXQgaWYgdGhlIFBMTCBpcyBjaGFuZ2luZy4KKyAqCisgKiBXcmFwcGVyICdzdHJ1Y3QgY3B1ZnJlcV9mcmVxcycgc28gdGhhdCBhbnkgZHJpdmVycyByZWNlaXZpbmcgdGhlCiAgKiBub3RpZmljYXRpb24gY2FuIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRoYXQgaXMgbm90IHByb3ZpZGVkIGJ5IGp1c3QKICAqIGhhdmluZyB0aGUgY29yZSBmcmVxdWVuY3kgYWxvbmUuCisgKgorICogVGhlIHBsbF9jaGFuZ2luZyBmbGFnIGlzIHVzZWQgdG8gaW5kaWNhdGUgaWYgdGhlIFBMTCBpdHNlbGYgaXMKKyAqIGJlaW5nIHNldCBkdXJpbmcgdGhpcyBjaGFuZ2UuIFRoaXMgaXMgaW1wb3J0YW50IGFzIHRoZSBjbG9ja3MKKyAqIHdpbGwgdGVtcG9yYXJpbHkgYmUgc2V0IHRvIHRoZSBYVEFMIGNsb2NrIGR1cmluZyB0aGlzIHRpbWUsIHNvCisgKiBkcml2ZXJzIG1heSB3YW50IHRvIGNsb3NlIGRvd24gdGhlaXIgb3V0cHV0IGR1cmluZyB0aGlzIHRpbWUuCisgKgorICogTm90ZSwgdGhpcyBpcyBub3QgYmVpbmcgdXNlZCBieSBhbnkgY3VycmVudCBkcml2ZXJzIGFuZCB0aGVyZWZvcmUKKyAqIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuCiAgKi8KLQogc3RydWN0IHMzY19jcHVmcmVxX2ZyZXFzIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcwlmcmVxczsKIAlzdHJ1Y3QgczNjX2ZyZXEJCW9sZDsKIAlzdHJ1Y3QgczNjX2ZyZXEJCW5ldzsKKworCXVuc2lnbmVkIGludAkJcGxsX2NoYW5naW5nOjE7CiB9OwogCiAjZGVmaW5lIHRvX3MzY19jcHVmcmVxKF9jZikgY29udGFpbmVyX29mKF9jZiwgc3RydWN0IHMzY19jcHVmcmVxX2ZyZXFzLCBmcmVxcykKIAorLyoqCisgKiBzdHJ1Y3QgczNjX2Nsa2RpdnMgLSBjbG9jayBkaXZpc29yIGluZm9ybWF0aW9uCisgKiBAcF9kaXZpc29yOiBEaXZpc29yIGZyb20gRkNMSyB0byBQQ0xLLgorICogQGhfZGl2aXNvcjogRGl2aXNvciBmcm9tIEZDTEsgdG8gSENMSy4KKyAqIEBhcm1fZGl2aXNvcjogRGl2aXNvciBmcm9tIEZDTEsgdG8gQVJNQ0xLIChub3QgYWxsIENQVXMpLgorICogQGR2czogTm9uLXplcm8gaWYgdXNpbmcgRFZTIG1vZGUgZm9yIEFSTUNMSy4KKyAqCisgKiBEaXZpc29yIHNldHRpbmdzIGZvciB0aGUgY29yZSBjbG9ja3MuCisgKi8KIHN0cnVjdCBzM2NfY2xrZGl2cyB7Ci0JaW50CQlwX2Rpdmlzb3I7CS8qIGZjbGsgLyBwY2xrICovCi0JaW50CQloX2Rpdmlzb3I7CS8qIGZjbGsgLyBoY2xrICovCi0JaW50CQlhcm1fZGl2aXNvcjsJLyogbm90IGFsbCBjcHVzIGhhdmUgdGhpcy4gKi8KLQl1bnNpZ25lZCBjaGFyCWR2czsJCS8qIHVzaW5nIGR2cyBtb2RlIHRvIGFybS4gKi8KKwlpbnQJCXBfZGl2aXNvcjsKKwlpbnQJCWhfZGl2aXNvcjsKKwlpbnQJCWFybV9kaXZpc29yOworCXVuc2lnbmVkIGNoYXIJZHZzOwogfTsKIAogI2RlZmluZSBQTExWQUwoX20sIF9wLCBfcykgKCgoX20pIDw8IDEyKSB8ICgoX3ApIDw8IDQpIHwgKF9zKSkKIAorLyoqCisgKiBzdHJ1Y3QgczNjX3BsbHZhbCAtIFBMTCB2YWx1ZSBlbnRyeS4KKyAqIEBmcmVxOiBUaGUgZnJlcXVlbmN5IGZvciB0aGlzIGVudHJ5IGluIEh6LgorICogQHBsbF9yZWc6IFRoZSBQTEwgcmVnaXN0ZXIgc2V0dGluZyBmb3IgdGhpcyBQTEwgdmFsdWUuCisgKi8KIHN0cnVjdCBzM2NfcGxsdmFsIHsKIAl1bnNpZ25lZCBsb25nCQlmcmVxOwogCXVuc2lnbmVkIGxvbmcJCXBsbF9yZWc7CiB9OwogCi1zdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnIHsKLQlzdHJ1Y3QgczNjX2ZyZXEJCWZyZXE7Ci0Jc3RydWN0IHMzY19wbGx2YWwJcGxsOwotCXN0cnVjdCBzM2NfY2xrZGl2cwlkaXZzOwotCXN0cnVjdCBzM2NfY3B1ZnJlcV9pbmZvICppbmZvOwkvKiBmb3IgY29yZSwgbm90IGRyaXZlcnMgKi8KLQlzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgKmJvYXJkOwotfTsKLQotLyogczNjX2NwdWZyZXFfYm9hcmQKKy8qKgorICogc3RydWN0IHMzY19jcHVmcmVxX2JvYXJkIC0gcGVyLWJvYXJkIGNwdSBmcmVxdWVuY3kgaW5mb3JtYXRpbgorICogQHJlZnJlc2g6IFRoZSBTRFJBTSByZWZyZXNoIHBlcmlvZCBpbiBuYW5vc2Vjb25kcy4KKyAqIEBhdXRvX2lvOiBTZXQgaWYgdGhlIElPIHRpbWluZyBzZXR0aW5ncyBzaG91bGQgYmUgZ2VuZXJhdGVkIGZyb20gdGhlCisgKglpbml0aWFsaXNhdGlvbiB0aW1lIGhhcmR3YXJlIHJlZ2lzdGVycy4KKyAqIEBuZWVkX2lvOiBTZXQgaWYgdGhlIGJvYXJkIGhhcyBleHRlcm5hbCBJTyBvbiBhbnkgb2YgdGhlIGNoaXBzZWxlY3QKKyAqCWxpbmVzIHRoYXQgd2lsbCByZXF1aXJlIHRoZSBoYXJkd2FyZSB0aW1pbmcgcmVnaXN0ZXJzIHRvIGJlCisgKgl1cGRhdGVkIG9uIGEgY2xvY2sgY2hhbmdlLgorICogQG1heDogVGhlIG1heGl1bSBmcmVxdWVuY3kgbGltaXRzIGZvciB0aGUgc3lzdGVtLiBBbnkgZmllbGQgdGhhdAorICoJaXMgbGVmdCBhdCB6ZXJvIHdpbGwgdXNlIHRoZSBDUFUncyBzZXR0aW5ncy4KICAqCi0gKiBwZXItYm9hcmQgY29uZmlndXJhdG9uIGluZm9ybWF0aW9uLCBzdWNoIGFzIG1lbW9yeSByZWZyZXNoIGFuZAotICogaG93IHRvIGluaXRpYWxpc2UgSU8gdGltaW5ncy4KKyAqIFRoaXMgY29udGFpbnMgdGhlIGJvYXJkIHNwZWNpZmljIHNldHRpbmdzIHRoYXQgYWZmZWN0IGhvdyB0aGUgQ1BVCisgKiBkcml2ZXJzIGNob3NlIHNldHRpbmdzLiBUaGVzZSBpbmNsdWRlIHRoZSBtZW1vcnkgcmVmcmVzaCBhbmQgSU8KKyAqIHRpbWluZyBpbmZvcm1hdGlvbi4KKyAqCisgKiBSZWdpc3RyYXRpb24gZGVwZW5kcyBvbiB0aGUgZHJpdmVyIGJlaW5nIHVzZWQsIHRoZSBBUk1DTEsgb25seQorICogaW1wbGVtZW50YXRpb24gZG9lcyBub3QgY3VycmVudGx5IG5lZWQgdGhpcyBidXQgdGhlIG9sZGVyIHN0eWxlCisgKiBkcml2ZXIgcmVxdWlyZXMgdGhpcyB0byBiZSBhdmFpbGFibGUuCiAgKi8KIHN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCB7Ci0JdW5zaWduZWQgaW50CXJlZnJlc2g7CS8qIHJlZnJlc2ggcGVyaW9kIGluIG5zICovCisJdW5zaWduZWQgaW50CXJlZnJlc2g7CiAJdW5zaWduZWQgaW50CWF1dG9faW86MTsJLyogYXV0b21hdGljYWxseSBpbml0IGlvIHRpbWluZ3MuICovCiAJdW5zaWduZWQgaW50CW5lZWRfaW86MTsJLyogc2V0IGlmIG5lZWRzIGlvIHRpbWluZyBzdXBwb3J0LiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY3B1LmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY3B1LmgKaW5kZXggYmU1NDFjYi4uZmJjM2Q0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2NwdS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9jcHUuaApAQCAtNjUsNiArNjUsNyBAQAogLyogc3lzdGVtIGRldmljZSBjbGFzc2VzICovCiAKIGV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0MTBfc3lzY2xhc3M7CitleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBzM2MyNDEwYV9zeXNjbGFzczsKIGV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0MTJfc3lzY2xhc3M7CiBleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBzM2MyNDQwX3N5c2NsYXNzOwogZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0Ml9zeXNjbGFzczsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9kZXZzLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZGV2cy5oCmluZGV4IDJlMTcwODIuLjBmNTQwZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9kZXZzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RldnMuaApAQCAtNDYsNiArNDYsOCBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9zcGkwOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9zcGkxOwogCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2h3bW9uOworCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX25hbmQ7CiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdXNiZ2FkZ2V0OwpAQCAtNTYsNSArNTgsNiBAQAogI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MAogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2NhbWlmOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9hYzk3OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9od21vbi5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2h3bW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhODhlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9od21vbi5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9od21vbi5oCisgKgorICogQ29weXJpZ2h0IDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQyAtIEhXTW9uIGludGVyZmFjZSBmb3IgQURDCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9BRENfSFdNT05fSAorI2RlZmluZSBfX0FTTV9BUkNIX0FEQ19IV01PTl9IIF9fRklMRV9fCisKKy8qKgorICogczNjX2h3bW9uX2NoY2ZnIC0gY2hhbm5lbCBjb25maWd1cmF0aW9uCisgKiBAbmFtZTogVGhlIG5hbWUgdG8gZ2l2ZSB0aGlzIGNoYW5uZWwuCisgKiBAbXVsdDogTXVsdGlwbHkgdGhlIEFEQyB2YWx1ZSByZWFkIGJ5IHRoaXMuCisgKiBAZGl2OiBEaXZpZGUgdGhlIHZhbHVlIGZyb20gdGhlIEFEQyBieSB0aGlzLgorICoKKyAqIFRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIEFEQyBpcyBjb252ZXJ0ZWQgdG8gYSB2YWx1ZSB0aGF0CisgKiBod21vbiBleHBlY3RzIChtVikgYnkgcmVzdWx0ID0gKHZhbHVlX3JlYWQgKiBAbXVsdCkgLyBAZGl2LgorICovCitzdHJ1Y3QgczNjX2h3bW9uX2NoY2ZnIHsKKwljb25zdCBjaGFyCSpuYW1lOworCXVuc2lnbmVkIGludAltdWx0OworCXVuc2lnbmVkIGludAlkaXY7Cit9OworCisvKioKKyAqIHMzY19od21vbl9wZGF0YSAtIEhXTU9OIHBsYXRmb3JtIGRhdGEKKyAqIEBpbjogT25lIGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggcG9zc2libGUgY2hhbm5lbCB1c2VkLgorICovCitzdHJ1Y3QgczNjX2h3bW9uX3BkYXRhIHsKKwlzdHJ1Y3QgczNjX2h3bW9uX2NoY2ZnCSppbls4XTsKK307CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0FEQ19IV01PTl9IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9tYXAtYmFzZS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L21hcC1iYXNlLmgKaW5kZXggYjg0Mjg5ZC4uMjUwYmUzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L21hcC1iYXNlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L21hcC1iYXNlLmgKQEAgLTMyLDkgKzMyLDE1IEBACiAKICNkZWZpbmUgUzNDX1ZBX0lSUQlTM0NfQUREUigweDAwMDAwMDAwKQkvKiBpcnEgY29udHJvbGxlcihzKSAqLwogI2RlZmluZSBTM0NfVkFfU1lTCVMzQ19BRERSKDB4MDAxMDAwMDApCS8qIHN5c3RlbSBjb250cm9sICovCi0jZGVmaW5lIFMzQ19WQV9NRU0JUzNDX0FERFIoMHgwMDIwMDAwMCkJLyogc3lzdGVtIGNvbnRyb2wgKi8KKyNkZWZpbmUgUzNDX1ZBX01FTQlTM0NfQUREUigweDAwMjAwMDAwKQkvKiBtZW1vcnkgY29udHJvbCAqLwogI2RlZmluZSBTM0NfVkFfVElNRVIJUzNDX0FERFIoMHgwMDMwMDAwMCkJLyogdGltZXIgYmxvY2sgKi8KICNkZWZpbmUgUzNDX1ZBX1dBVENIRE9HCVMzQ19BRERSKDB4MDA0MDAwMDApCS8qIHdhdGNoZG9nICovCiAjZGVmaW5lIFMzQ19WQV9VQVJUCVMzQ19BRERSKDB4MDEwMDAwMDApCS8qIFVBUlQgKi8KIAorLyogVGhpcyBpcyB1c2VkIGZvciB0aGUgQ1BVIHNwZWNpZmljIG1hcHBpbmdzIHRoYXQgbWF5IGJlIG5lZWRlZCwgc28gdGhhdAorICogdGhleSBkbyBub3QgbmVlZCB0byBkaXJlY3RseSB1c2VkIFMzQ19BRERSKCkgYW5kIHRodXMgbWFrZSBpdCBlYXNpZXIgdG8KKyAqIG1vZGlmeSB0aGUgc3BhY2UgZm9yIG1hcHBpbmcuCisgKi8KKyNkZWZpbmUgUzNDX0FERFJfQ1BVKHgpCVMzQ19BRERSKDB4MDA1MDAwMDAgKyAoeCkpCisKICNlbmRpZiAvKiBfX0FTTV9QTEFUX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zM2MyNDEyLWlpcy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtczNjMjQxMi1paXMuaAppbmRleCAwZmFkNzU3Li4wNzY1OWRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zM2MyNDEyLWlpcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXMzYzI0MTItaWlzLmgKQEAgLTMzLDYgKzMzLDExIEBACiAjZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRQkoMSA8PCAxKQogI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFCSgxIDw8IDApCiAKKyNkZWZpbmUgUzNDNjRYWF9JSVNNT0RfQkxDXzE2QklUCSgwIDw8IDEzKQorI2RlZmluZSBTM0M2NFhYX0lJU01PRF9CTENfOEJJVAkJKDEgPDwgMTMpCisjZGVmaW5lIFMzQzY0WFhfSUlTTU9EX0JMQ18yNEJJVAkoMiA8PCAxMykKKyNkZWZpbmUgUzNDNjRYWF9JSVNNT0RfQkxDX01BU0sJCSgzIDw8IDEzKQorCiAjZGVmaW5lIFMzQzY0WFhfSUlTTU9EX0lNU19QQ0xLCQkoMCA8PCAxMCkKICNkZWZpbmUgUzNDNjRYWF9JSVNNT0RfSU1TX1NZU01VWAkoMSA8PCAxMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvcHdtLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9wd20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmRjNWIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvcHdtLmMKQEAgLTAsMCArMSw0MTAgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczNjL3B3bS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEJlbiBEb29rcworICogQ29weXJpZ2h0IChjKSAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPiwgPGJlbi1saW51eEBmbHVmZi5vcmc+CisgKgorICogUzNDIHNlcmllcyBQV00gZGV2aWNlIGNvcmUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wd20uaD4KKworI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtdGltZXIuaD4KKworc3RydWN0IHB3bV9kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQJIGxpc3Q7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKKworCXN0cnVjdCBjbGsJCSpjbGtfZGl2OworCXN0cnVjdCBjbGsJCSpjbGs7CisJY29uc3QgY2hhcgkJKmxhYmVsOworCisJdW5zaWduZWQgaW50CQkgcGVyaW9kX25zOworCXVuc2lnbmVkIGludAkJIGR1dHlfbnM7CisKKwl1bnNpZ25lZCBjaGFyCQkgdGNvbl9iYXNlOworCXVuc2lnbmVkIGNoYXIJCSBydW5uaW5nOworCXVuc2lnbmVkIGNoYXIJCSB1c2VfY291bnQ7CisJdW5zaWduZWQgY2hhcgkJIHB3bV9pZDsKK307CisKKyNkZWZpbmUgcHdtX2RiZyhfcHdtLCBtc2cuLi4pIGRldl9kYmcoJihfcHdtKS0+cGRldi0+ZGV2LCBtc2cpCisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfc2NhbGVyWzJdOworCisvKiBTdGFuZGFyZCBzZXR1cCBmb3IgYSB0aW1lciBibG9jay4gKi8KKworI2RlZmluZSBUSU1FUl9SRVNPVVJDRV9TSVpFICgxKQorCisjZGVmaW5lIFRJTUVSX1JFU09VUkNFKF90bXIsIF9pcnEpCQkJXAorCShzdHJ1Y3QgcmVzb3VyY2UgW1RJTUVSX1JFU09VUkNFX1NJWkVdKSB7CVwKKwkJWzBdID0gewkJCQkJXAorCQkJLnN0YXJ0CT0gX2lycSwJCQlcCisJCQkuZW5kCT0gX2lycSwJCQlcCisJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQlcCisJCX0JCQkJCVwKKwl9CisKKyNkZWZpbmUgREVGSU5FX1MzQ19USU1FUihfdG1yX25vLCBfaXJxKQkJCVwKKwkubmFtZQkJPSAiczNjMjR4eC1wd20iLAkJXAorCS5pZAkJPSBfdG1yX25vLAkJCVwKKwkubnVtX3Jlc291cmNlcwk9IFRJTUVSX1JFU09VUkNFX1NJWkUsCQlcCisJLnJlc291cmNlCT0gVElNRVJfUkVTT1VSQ0UoX3Rtcl9ubywgX2lycSksCVwKKworLyogc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGFuIHN0YXRpYyBtYXBwaW5nIGZvciB0aGUgdGltZXIsIHdlIGRvIG5vdAorICogYm90aGVyIHNldHRpbmcgYW55IElPIHJlc291cmNlIGZvciB0aGUgYmFzZS4KKyAqLworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdGltZXJbXSA9IHsKKwlbMF0gPSB7IERFRklORV9TM0NfVElNRVIoMCwgSVJRX1RJTUVSMCkgfSwKKwlbMV0gPSB7IERFRklORV9TM0NfVElNRVIoMSwgSVJRX1RJTUVSMSkgfSwKKwlbMl0gPSB7IERFRklORV9TM0NfVElNRVIoMiwgSVJRX1RJTUVSMikgfSwKKwlbM10gPSB7IERFRklORV9TM0NfVElNRVIoMywgSVJRX1RJTUVSMykgfSwKKwlbNF0gPSB7IERFRklORV9TM0NfVElNRVIoNCwgSVJRX1RJTUVSNCkgfSwKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3bV9pc190ZGl2KHN0cnVjdCBwd21fZGV2aWNlICpwd20pCit7CisJcmV0dXJuIGNsa19nZXRfcGFyZW50KHB3bS0+Y2xrKSA9PSBwd20tPmNsa19kaXY7Cit9CisKK3N0YXRpYyBERUZJTkVfTVVURVgocHdtX2xvY2spOworc3RhdGljIExJU1RfSEVBRChwd21fbGlzdCk7CisKK3N0cnVjdCBwd21fZGV2aWNlICpwd21fcmVxdWVzdChpbnQgcHdtX2lkLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwlzdHJ1Y3QgcHdtX2RldmljZSAqcHdtOworCWludCBmb3VuZCA9IDA7CisKKwltdXRleF9sb2NrKCZwd21fbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB3bSwgJnB3bV9saXN0LCBsaXN0KSB7CisJCWlmIChwd20tPnB3bV9pZCA9PSBwd21faWQpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZvdW5kKSB7CisJCWlmIChwd20tPnVzZV9jb3VudCA9PSAwKSB7CisJCQlwd20tPnVzZV9jb3VudCA9IDE7CisJCQlwd20tPmxhYmVsID0gbGFiZWw7CisJCX0gZWxzZQorCQkJcHdtID0gRVJSX1BUUigtRUJVU1kpOworCX0gZWxzZQorCQlwd20gPSBFUlJfUFRSKC1FTk9FTlQpOworCisJbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7CisJcmV0dXJuIHB3bTsKK30KKworRVhQT1JUX1NZTUJPTChwd21fcmVxdWVzdCk7CisKKwordm9pZCBwd21fZnJlZShzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQoreworCW11dGV4X2xvY2soJnB3bV9sb2NrKTsKKworCWlmIChwd20tPnVzZV9jb3VudCkgeworCQlwd20tPnVzZV9jb3VudC0tOworCQlwd20tPmxhYmVsID0gTlVMTDsKKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJQV00lZCBkZXZpY2UgYWxyZWFkeSBmcmVlZFxuIiwgcHdtLT5wd21faWQpOworCisJbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7Cit9CisKK0VYUE9SVF9TWU1CT0wocHdtX2ZyZWUpOworCisjZGVmaW5lIHB3bV90Y29uX3N0YXJ0KHB3bSkgKDEgPDwgKHB3bS0+dGNvbl9iYXNlICsgMCkpCisjZGVmaW5lIHB3bV90Y29uX2ludmVydChwd20pICgxIDw8IChwd20tPnRjb25fYmFzZSArIDIpKQorI2RlZmluZSBwd21fdGNvbl9hdXRvcmVsb2FkKHB3bSkgKDEgPDwgKHB3bS0+dGNvbl9iYXNlICsgMykpCisjZGVmaW5lIHB3bV90Y29uX21hbnVsdXBkYXRlKHB3bSkgKDEgPDwgKHB3bS0+dGNvbl9iYXNlICsgMSkpCisKK2ludCBwd21fZW5hYmxlKHN0cnVjdCBwd21fZGV2aWNlICpwd20pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHRjb247CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwl0Y29uID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ09OKTsKKwl0Y29uIHw9IHB3bV90Y29uX3N0YXJ0KHB3bSk7CisJX19yYXdfd3JpdGVsKHRjb24sIFMzQzI0MTBfVENPTik7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlwd20tPnJ1bm5pbmcgPSAxOworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHB3bV9lbmFibGUpOworCit2b2lkIHB3bV9kaXNhYmxlKHN0cnVjdCBwd21fZGV2aWNlICpwd20pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHRjb247CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwl0Y29uID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ09OKTsKKwl0Y29uICY9IH5wd21fdGNvbl9zdGFydChwd20pOworCV9fcmF3X3dyaXRlbCh0Y29uLCBTM0MyNDEwX1RDT04pOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcHdtLT5ydW5uaW5nID0gMDsKK30KKworRVhQT1JUX1NZTUJPTChwd21fZGlzYWJsZSk7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHB3bV9jYWxjX3RpbihzdHJ1Y3QgcHdtX2RldmljZSAqcHdtLCB1bnNpZ25lZCBsb25nIGZyZXEpCit7CisJdW5zaWduZWQgbG9uZyB0aW5fcGFyZW50X3JhdGU7CisJdW5zaWduZWQgaW50IGRpdjsKKworCXRpbl9wYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGtfZ2V0X3BhcmVudChwd20tPmNsa19kaXYpKTsKKwlwd21fZGJnKHB3bSwgInRpbiBwYXJlbnQgYXQgJWx1XG4iLCB0aW5fcGFyZW50X3JhdGUpOworCisJZm9yIChkaXYgPSAyOyBkaXYgPD0gMTY7IGRpdiAqPSAyKSB7CisJCWlmICgodGluX3BhcmVudF9yYXRlIC8gKGRpdiA8PCAxNikpIDwgZnJlcSkKKwkJCXJldHVybiB0aW5fcGFyZW50X3JhdGUgLyBkaXY7CisJfQorCisJcmV0dXJuIHRpbl9wYXJlbnRfcmF0ZSAvIDE2OworfQorCisjZGVmaW5lIE5TX0lOX0haICgxMDAwMDAwMDAwVUwpCisKK2ludCBwd21fY29uZmlnKHN0cnVjdCBwd21fZGV2aWNlICpwd20sIGludCBkdXR5X25zLCBpbnQgcGVyaW9kX25zKQoreworCXVuc2lnbmVkIGxvbmcgdGluX3JhdGU7CisJdW5zaWduZWQgbG9uZyB0aW5fbnM7CisJdW5zaWduZWQgbG9uZyBwZXJpb2Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHRjb247CisJdW5zaWduZWQgbG9uZyB0Y250OworCWxvbmcgdGNtcDsKKworCS8qIFdlIGN1cnJlbnRseSBhdm9pZCB1c2luZyA2NGJpdCBhcml0aG1ldGljIGJ5IHVzaW5nIHRoZQorCSAqIGZhY3QgdGhhdCBhbnl0aGluZyBmYXN0ZXIgdGhhbiAxSHogaXMgZWFzaWx5IHJlcHJlc2VudGFibGUKKwkgKiBieSAzMmJpdHMuICovCisKKwlpZiAocGVyaW9kX25zID4gTlNfSU5fSFogfHwgZHV0eV9ucyA+IE5TX0lOX0haKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCWlmIChkdXR5X25zID4gcGVyaW9kX25zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwZXJpb2RfbnMgPT0gcHdtLT5wZXJpb2RfbnMgJiYKKwkgICAgZHV0eV9ucyA9PSBwd20tPmR1dHlfbnMpCisJCXJldHVybiAwOworCisJLyogVGhlIFRDTVAgYW5kIFRDTlQgY2FuIGJlIHJlYWQgd2l0aG91dCBhIGxvY2ssIHRoZXkncmUgbm90CisJICogc2hhcmVkIGJldHdlZW4gdGhlIHRpbWVycy4gKi8KKworCXRjbXAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDTVBCKHB3bS0+cHdtX2lkKSk7CisJdGNudCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENOVEIocHdtLT5wd21faWQpKTsKKworCXBlcmlvZCA9IE5TX0lOX0haIC8gcGVyaW9kX25zOworCisJcHdtX2RiZyhwd20sICJkdXR5X25zPSVkLCBwZXJpb2RfbnM9JWQgKCVsdSlcbiIsCisJCWR1dHlfbnMsIHBlcmlvZF9ucywgcGVyaW9kKTsKKworCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgY2hhbmdpbmcgdGhlIGNsb2NrIHJhdGUgb2YgdGhlIFBXTSAqLworCisJaWYgKHB3bS0+cGVyaW9kX25zICE9IHBlcmlvZF9ucykgeworCQlpZiAocHdtX2lzX3RkaXYocHdtKSkgeworCQkJdGluX3JhdGUgPSBwd21fY2FsY190aW4ocHdtLCBwZXJpb2QpOworCQkJY2xrX3NldF9yYXRlKHB3bS0+Y2xrX2RpdiwgdGluX3JhdGUpOworCQl9IGVsc2UKKwkJCXRpbl9yYXRlID0gY2xrX2dldF9yYXRlKHB3bS0+Y2xrKTsKKworCQlwd20tPnBlcmlvZF9ucyA9IHBlcmlvZF9uczsKKworCQlwd21fZGJnKHB3bSwgInRpbl9yYXRlPSVsdVxuIiwgdGluX3JhdGUpOworCisJCXRpbl9ucyA9IE5TX0lOX0haIC8gdGluX3JhdGU7CisJCXRjbnQgPSBwZXJpb2RfbnMgLyB0aW5fbnM7CisJfSBlbHNlCisJCXRpbl9ucyA9IE5TX0lOX0haIC8gY2xrX2dldF9yYXRlKHB3bS0+Y2xrKTsKKworCS8qIE5vdGUsIGNvdW50ZXJzIGNvdW50IGRvd24gKi8KKworCXRjbXAgPSBkdXR5X25zIC8gdGluX25zOworCXRjbXAgPSB0Y250IC0gdGNtcDsKKwkvKiB0aGUgcHdtIGh3IG9ubHkgY2hlY2tzIHRoZSBjb21wYXJlIHJlZ2lzdGVyIGFmdGVyIGEgZGVjcmVtZW50LAorCSAgIHNvIHRoZSBwaW4gbmV2ZXIgdG9nZ2xlcyBpZiB0Y21wID0gdGNudCAqLworCWlmICh0Y21wID09IHRjbnQpCisJCXRjbXAtLTsKKworCXB3bV9kYmcocHdtLCAidGluX25zPSVsdSwgdGNtcD0lbGQvJWx1XG4iLCB0aW5fbnMsIHRjbXAsIHRjbnQpOworCisJaWYgKHRjbXAgPCAwKQorCQl0Y21wID0gMDsKKworCS8qIFVwZGF0ZSB0aGUgUFdNIHJlZ2lzdGVyIGJsb2NrLiAqLworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJX19yYXdfd3JpdGVsKHRjbXAsIFMzQzI0MTBfVENNUEIocHdtLT5wd21faWQpKTsKKwlfX3Jhd193cml0ZWwodGNudCwgUzNDMjQxMF9UQ05UQihwd20tPnB3bV9pZCkpOworCisJdGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENPTik7CisJdGNvbiB8PSBwd21fdGNvbl9tYW51bHVwZGF0ZShwd20pOworCXRjb24gfD0gcHdtX3Rjb25fYXV0b3JlbG9hZChwd20pOworCV9fcmF3X3dyaXRlbCh0Y29uLCBTM0MyNDEwX1RDT04pOworCisJdGNvbiAmPSB+cHdtX3Rjb25fbWFudWx1cGRhdGUocHdtKTsKKwlfX3Jhd193cml0ZWwodGNvbiwgUzNDMjQxMF9UQ09OKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHB3bV9jb25maWcpOworCitzdGF0aWMgaW50IHB3bV9yZWdpc3RlcihzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQoreworCXB3bS0+ZHV0eV9ucyA9IC0xOworCXB3bS0+cGVyaW9kX25zID0gLTE7CisKKwltdXRleF9sb2NrKCZwd21fbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcHdtLT5saXN0LCAmcHdtX2xpc3QpOworCW11dGV4X3VubG9jaygmcHdtX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjX3B3bV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHB3bV9kZXZpY2UgKnB3bTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdGNvbjsKKwl1bnNpZ25lZCBpbnQgaWQgPSBwZGV2LT5pZDsKKwlpbnQgcmV0OworCisJaWYgKGlkID09IDQpIHsKKwkJZGV2X2VycihkZXYsICJUSU1FUjQgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXB3bSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwd21fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHB3bSA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHB3bV9kZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwd20tPnBkZXYgPSBwZGV2OworCXB3bS0+cHdtX2lkID0gaWQ7CisKKwkvKiBjYWxjdWxhdGUgYmFzZSBvZiBjb250cm9sIGJpdHMgaW4gVENPTiAqLworCXB3bS0+dGNvbl9iYXNlID0gaWQgPT0gMCA/IDAgOiAoaWQgKiA0KSArIDQ7CisKKwlwd20tPmNsayA9IGNsa19nZXQoZGV2LCAicHdtLXRpbiIpOworCWlmIChJU19FUlIocHdtLT5jbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBwd20gdGluIGNsa1xuIik7CisJCXJldCA9IFBUUl9FUlIocHdtLT5jbGspOworCQlnb3RvIGVycl9hbGxvYzsKKwl9CisKKwlwd20tPmNsa19kaXYgPSBjbGtfZ2V0KGRldiwgInB3bS10ZGl2Iik7CisJaWYgKElTX0VSUihwd20tPmNsa19kaXYpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBwd20gdGRpdiBjbGtcbiIpOworCQlyZXQgPSBQVFJfRVJSKHB3bS0+Y2xrX2Rpdik7CisJCWdvdG8gZXJyX2Nsa190aW47CisJfQorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJdGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENPTik7CisJdGNvbiB8PSBwd21fdGNvbl9pbnZlcnQocHdtKTsKKwlfX3Jhd193cml0ZWwodGNvbiwgUzNDMjQxMF9UQ09OKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCisJcmV0ID0gcHdtX3JlZ2lzdGVyKHB3bSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBwd21cbiIpOworCQlnb3RvIGVycl9jbGtfdGRpdjsKKwl9CisKKwlwd21fZGJnKHB3bSwgImNvbmZpZyBiaXRzICUwMnhcbiIsCisJCShfX3Jhd19yZWFkbChTM0MyNDEwX1RDT04pID4+IHB3bS0+dGNvbl9iYXNlKSAmIDB4MGYpOworCisJZGV2X2luZm8oZGV2LCAidGluIGF0ICVsdSwgdGRpdiBhdCAlbHUsIHRpbj0lc2NsaywgYmFzZSAlZFxuIiwKKwkJIGNsa19nZXRfcmF0ZShwd20tPmNsayksCisJCSBjbGtfZ2V0X3JhdGUocHdtLT5jbGtfZGl2KSwKKwkJIHB3bV9pc190ZGl2KHB3bSkgPyAiZGl2IiA6ICJleHQiLCBwd20tPnRjb25fYmFzZSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwd20pOworCXJldHVybiAwOworCisgZXJyX2Nsa190ZGl2OgorCWNsa19wdXQocHdtLT5jbGtfZGl2KTsKKworIGVycl9jbGtfdGluOgorCWNsa19wdXQocHdtLT5jbGspOworCisgZXJyX2FsbG9jOgorCWtmcmVlKHB3bSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzM2NfcHdtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwd21fZGV2aWNlICpwd20gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWNsa19wdXQocHdtLT5jbGtfZGl2KTsKKwljbGtfcHV0KHB3bS0+Y2xrKTsKKwlrZnJlZShwd20pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY19wd21fZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNHh4LXB3bSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHMzY19wd21fcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzM2NfcHdtX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwd21faW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwljbGtfc2NhbGVyWzBdID0gY2xrX2dldChOVUxMLCAicHdtLXNjYWxlcjAiKTsKKwljbGtfc2NhbGVyWzFdID0gY2xrX2dldChOVUxMLCAicHdtLXNjYWxlcjEiKTsKKworCWlmIChJU19FUlIoY2xrX3NjYWxlclswXSkgfHwgSVNfRVJSKGNsa19zY2FsZXJbMV0pKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBnZXQgc2NhbGVyIGNsb2Nrc1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY19wd21fZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWRkIHB3bSBkcml2ZXJcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiByZXQ7Cit9CisKK2FyY2hfaW5pdGNhbGwocHdtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L0tjb25maWcgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvS2NvbmZpZwppbmRleCA1YjBiYzkxLi45YzdhY2E0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvS2NvbmZpZwpAQCAtMTAsNiArMTAsNyBAQAogCWRlZmF1bHQgeQogCXNlbGVjdCBOT19JT1BPUlQKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwlzZWxlY3QgUzNDX0RFVklDRV9OQU5ECiAJaGVscAogCSAgQmFzZSBwbGF0Zm9ybSBjb2RlIGZvciBhbnkgU2Ftc3VuZyBTM0MyNFhYIGRldmljZQogCkBAIC0zNCw2ICszNSw0MCBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFMzQzI0NDAgYW5kIFMzQzI0NDIgU2Ftc3VuZyBNb2JpbGUgQ1BVIGJhc2VkIHN5c3RlbXMuCiAKK2NvbmZpZyBTM0MyNDQwX0NQVUZSRVEKKwlib29sICJTM0MyNDQwL1MzQzI0NDIgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBDUFVfRlJFUV9TM0MyNFhYICYmIChDUFVfUzNDMjQ0MCB8fCBDUFVfUzNDMjQ0MikKKwlzZWxlY3QgUzNDMjQxMF9DUFVGUkVRX1VUSUxTCisJZGVmYXVsdCB5CisJaGVscAorCSAgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIHN1cHBvcnQgZm9yIFMzQzI0NDAgYW5kIFMzQzI0NDIgU29DIENQVXMuCisKK2NvbmZpZyBTM0MyNDQwX1hUQUxfMTIwMDAwMDAKKwlib29sCisJaGVscAorCSAgSW5kaWNhdGUgdGhhdCB0aGUgYnVpbGQgbmVlZHMgdG8gc3VwcG9ydCAxMk1IeiBzeXN0ZW0KKwkgIGNyeXN0YWwuCisKK2NvbmZpZyBTM0MyNDQwX1hUQUxfMTY5MzQ0MDAKKwlib29sCisJaGVscAorCSAgSW5kaWNhdGUgdGhhdCB0aGUgYnVpbGQgbmVlZHMgdG8gc3VwcG9ydCAxNi45MzQ0TUh6IHN5c3RlbQorCSAgY3J5c3RhbC4KKworY29uZmlnIFMzQzI0NDBfUExMXzEyMDAwMDAwCisJYm9vbAorCWRlcGVuZHMgb24gUzNDMjQ0MF9DUFVGUkVRICYmIFMzQzI0NDBfWFRBTF8xMjAwMDAwMAorCWRlZmF1bHQgeSBpZiBDUFVfRlJFUV9TM0MyNFhYX1BMTAorCWhlbHAKKwkgIFBMTCB0YWJsZXMgZm9yIFMzQzI0NDAgb3IgUzNDMjQ0MiBDUFVzIHdpdGggMTJNSHogY3J5c3RhbHMuCisKK2NvbmZpZyBTM0MyNDQwX1BMTF8xNjkzNDQwMAorCWJvb2wKKwlkZXBlbmRzIG9uIFMzQzI0NDBfQ1BVRlJFUSAmJiBTM0MyNDQwX1hUQUxfMTY5MzQ0MDAKKwlkZWZhdWx0IHkgaWYgQ1BVX0ZSRVFfUzNDMjRYWF9QTEwKKwloZWxwCisJICBQTEwgdGFibGVzIGZvciBTM0MyNDQwIG9yIFMzQzI0NDIgQ1BVcyB3aXRoIDE2LjkzNE1IeiBjcnlzdGFscy4KKwogY29uZmlnIFMzQzI0WFhfUFdNCiAJYm9vbCAiUFdNIGRldmljZSBzdXBwb3J0IgogCXNlbGVjdCBIQVZFX1BXTQpAQCAtMTA1LDggKzE0MCwzOSBAQAogCSAgU1BJIEdQSU8gY29uZmlndXJhdGlvbiBjb2RlIGZvciBCVVMgMSB3aGVuIGNvbm5lY3RlZCB0bwogCSAgR1BHNSwgR1BHNiBhbmQgR1BHNy4KIAorY29uZmlnIFMzQzI0WFhfU1BJX0JVUzFfR1BEOF9HUEQ5X0dQRDEwCisJYm9vbAorCWhlbHAKKwkgIFNQSSBHUElPIGNvbmZpZ3VyYXRpb24gY29kZSBmb3IgQlVTIDEgd2hlbiBjb25uZWN0ZWQgdG8KKwkgIEdQRDgsIEdQRDkgYW5kIEdQRDEwLgorCiAjIGNvbW1vbiBjb2RlIGZvciBzM2MyNHh4IGJhc2VkIG1hY2hpbmVzLCBzdWNoIGFzIHRoZSBTTURLcy4KIAorIyBjcHUgZnJlcXVlbmN5IGl0ZW1zIGNvbW1vbiBiZXR3ZWVuIHMzYzI0MTAgYW5kIHMzYzI0NDAvczNjMjQ0MgorCitjb25maWcgUzNDMjQxMF9JT1RJTUlORworCWJvb2wKKwlkZXBlbmRzIG9uIENQVV9GUkVRX1MzQzI0WFgKKwloZWxwCisJICBJbnRlcm5hbCBub2RlIHRvIHNlbGVjdCBpbyB0aW1pbmcgY29kZSB0aGF0IGlzIGNvbW1vbiB0byB0aGUgczNjMjQxMAorCSAgYW5kIHMzYzI0NDAvczNjMjQ0MiBjcHUgZnJlcXVlbmN5IHN1cHBvcnQuCisKK2NvbmZpZyBTM0MyNDEwX0NQVUZSRVFfVVRJTFMKKwlib29sCisJZGVwZW5kcyBvbiBDUFVfRlJFUV9TM0MyNFhYCisJaGVscAorCSAgSW50ZXJuYWwgbm9kZSB0byBzZWxlY3QgdGltaW5nIGNvZGUgdGhhdCBpcyBjb21tb24gdG8gdGhlIHMzYzI0MTAKKwkgIGFuZCBzM2MyNDQwL3MzYzI0NCBjcHUgZnJlcXVlbmN5IHN1cHBvcnQuCisKKyMgY3B1IGZyZXF1ZW5jeSBzdXBwb3J0IGNvbW1vbiB0byBzM2MyNDEyLCBzM2MyNDEzIGFuZCBzM2MyNDQyCisKK2NvbmZpZyBTM0MyNDEyX0lPVElNSU5HCisJYm9vbAorCWRlcGVuZHMgb24gQ1BVX0ZSRVFfUzNDMjRYWCAmJiAoQ1BVX1MzQzI0MTIgfHwgQ1BVX1MzQzI0NDMpCisJaGVscAorCSAgSW50ZWwgbm9kZSB0byBzZWxlY3QgaW8gdGltaW5nIGNvZGUgdGhhdCBpcyBjb21tb24gdG8gdGhlIHMzYzI0MTIKKwkgIGFuZCB0aGUgczNjMjQ0My4KKwogY29uZmlnIE1BQ0hfU01ESwogCWJvb2wKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvTWFrZWZpbGUKaW5kZXggNTc5YTE2NS4uNzc4MGQyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9NYWtlZmlsZQpAQCAtMjAsMTkgKzIwLDI4IEBACiBvYmoteQkJCQkrPSBjbG9jay5vCiBvYmotJChDT05GSUdfUzNDMjRYWF9EQ0xLKQkrPSBjbG9jay1kY2xrLm8KIAorb2JqLSQoQ09ORklHX0NQVV9GUkVRX1MzQzI0WFgpCSs9IGNwdS1mcmVxLm8KK29iai0kKENPTkZJR19DUFVfRlJFUV9TM0MyNFhYX0RFQlVHRlMpICs9IGNwdS1mcmVxLWRlYnVnZnMubworCiAjIEFyY2hpdGVjdHVyZSBkZXBlbmRhbnQgYnVpbGRzCiAKIG9iai0kKENPTkZJR19DUFVfUzNDMjQ0WCkJKz0gczNjMjQ0eC5vCiBvYmotJChDT05GSUdfQ1BVX1MzQzI0NFgpCSs9IHMzYzI0NHgtaXJxLm8KIG9iai0kKENPTkZJR19DUFVfUzNDMjQ0WCkJKz0gczNjMjQ0eC1jbG9jay5vCitvYmotJChDT05GSUdfUzNDMjQ0MF9DUFVGUkVRKQkrPSBzM2MyNDQwLWNwdWZyZXEubworb2JqLSQoQ09ORklHX1MzQzI0NDBfUExMXzEyMDAwMDAwKSArPSBzM2MyNDQwLXBsbC0xMjAwMDAwMC5vCitvYmotJChDT05GSUdfUzNDMjQ0MF9QTExfMTY5MzQ0MDApICs9IHMzYzI0NDAtcGxsLTE2OTM0NDAwLm8KKwogb2JqLSQoQ09ORklHX1BNX1NJTVRFQykJCSs9IHBtLXNpbXRlYy5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBpcnEtcG0ubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gc2xlZXAubwotb2JqLSQoQ09ORklHX1MzQzI0WFhfUFdNKQkrPSBwd20ubwogb2JqLSQoQ09ORklHX1MzQzI0MTBfQ0xPQ0spCSs9IHMzYzI0MTAtY2xvY2subwogb2JqLSQoQ09ORklHX1MzQzI0MTBfRE1BKQkrPSBkbWEubwogb2JqLSQoQ09ORklHX1MzQzI0WFhfQURDKQkrPSBhZGMubworb2JqLSQoQ09ORklHX1MzQzI0MTBfSU9USU1JTkcpCSs9IHMzYzI0MTAtaW90aW1pbmcubworb2JqLSQoQ09ORklHX1MzQzI0MTJfSU9USU1JTkcpCSs9IHMzYzI0MTItaW90aW1pbmcubworb2JqLSQoQ09ORklHX1MzQzI0MTBfQ1BVRlJFUV9VVElMUykgKz0gczNjMjQxMC1jcHVmcmVxLXV0aWxzLm8KIAogIyBkZXZpY2Ugc3BlY2lmaWMgc2V0dXAgYW5kL29yIGluaXRpYWxpc2F0aW9uCiBvYmotJChDT05GSUdfQVJDSF9TM0MyNDEwKQkrPSBzZXR1cC1pMmMubwpAQCAtNDEsNiArNTAsNyBAQAogCiBvYmotJChDT05GSUdfUzNDMjRYWF9TUElfQlVTMF9HUEUxMV9HUEUxMl9HUEUxMykgKz0gc3BpLWJ1czAtZ3BlMTFfMTJfMTMubwogb2JqLSQoQ09ORklHX1MzQzI0WFhfU1BJX0JVUzFfR1BHNV9HUEc2X0dQRzcpICAgICs9IHNwaS1idXMxLWdwZzVfNl83Lm8KK29iai0kKENPTkZJR19TM0MyNFhYX1NQSV9CVVMxX0dQRDhfR1BEOV9HUEQxMCkJICs9IHNwaS1idXMxLWdwZDhfOV8xMC5vCiAKICMgbWFjaGluZSBjb21tb24gc3VwcG9ydAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvYWRjLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvYWRjLmMKaW5kZXggZWUxYmFmMS4uMTExMTdhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYwpAQCAtMzksMTMgKzM5LDE2IEBACiBzdHJ1Y3QgczNjX2FkY19jbGllbnQgewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CiAJc3RydWN0IGxpc3RfaGVhZAkgcGVuZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAkqd2FpdDsKIAogCXVuc2lnbmVkIGludAkJIG5yX3NhbXBsZXM7CisJaW50CQkJIHJlc3VsdDsKIAl1bnNpZ25lZCBjaGFyCQkgaXNfdHM7CiAJdW5zaWduZWQgY2hhcgkJIGNoYW5uZWw7CiAKLQl2b2lkCSgqc2VsZWN0X2NiKSh1bnNpZ25lZCBzZWxlY3RlZCk7Ci0Jdm9pZAkoKmNvbnZlcnRfY2IpKHVuc2lnbmVkIHZhbDEsIHVuc2lnbmVkIHZhbDIsCisJdm9pZAkoKnNlbGVjdF9jYikoc3RydWN0IHMzY19hZGNfY2xpZW50ICpjLCB1bnNpZ25lZCBzZWxlY3RlZCk7CisJdm9pZAkoKmNvbnZlcnRfY2IpKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqYywKKwkJCSAgICAgIHVuc2lnbmVkIHZhbDEsIHVuc2lnbmVkIHZhbDIsCiAJCQkgICAgICB1bnNpZ25lZCAqc2FtcGxlc19sZWZ0KTsKIH07CiAKQEAgLTgxLDcgKzg0LDcgQEAKIHsKIAl1bnNpZ25lZCBjb24gPSByZWFkbChhZGMtPnJlZ3MgKyBTM0MyNDEwX0FEQ0NPTik7CiAKLQljbGllbnQtPnNlbGVjdF9jYigxKTsKKwljbGllbnQtPnNlbGVjdF9jYihjbGllbnQsIDEpOwogCiAJY29uICY9IH5TM0MyNDEwX0FEQ0NPTl9NVVhNQVNLOwogCWNvbiAmPSB+UzNDMjQxMF9BRENDT05fU1REQk07CkBAIC0xNTMsMjUgKzE1Niw2MSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoczNjX2FkY19zdGFydCk7CiAKLXN0YXRpYyB2b2lkIHMzY19hZGNfZGVmYXVsdF9zZWxlY3QodW5zaWduZWQgc2VsZWN0KQorc3RhdGljIHZvaWQgczNjX2NvbnZlcnRfZG9uZShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKKwkJCSAgICAgdW5zaWduZWQgdiwgdW5zaWduZWQgdSwgdW5zaWduZWQgKmxlZnQpCit7CisJY2xpZW50LT5yZXN1bHQgPSB2OworCXdha2VfdXAoY2xpZW50LT53YWl0KTsKK30KKworaW50IHMzY19hZGNfcmVhZChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNoKQoreworCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEX09OU1RBQ0sod2FrZSk7CisJaW50IHJldDsKKworCWNsaWVudC0+Y29udmVydF9jYiA9IHMzY19jb252ZXJ0X2RvbmU7CisJY2xpZW50LT53YWl0ID0gJndha2U7CisJY2xpZW50LT5yZXN1bHQgPSAtMTsKKworCXJldCA9IHMzY19hZGNfc3RhcnQoY2xpZW50LCBjaCwgMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyOworCisJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KHdha2UsIGNsaWVudC0+cmVzdWx0ID49IDAsIEhaIC8gMik7CisJaWYgKGNsaWVudC0+cmVzdWx0IDwgMCkgeworCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIGVycjsKKwl9CisKKwljbGllbnQtPmNvbnZlcnRfY2IgPSBOVUxMOworCXJldHVybiBjbGllbnQtPnJlc3VsdDsKKworZXJyOgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzM2NfYWRjX2NvbnZlcnQpOworCitzdGF0aWMgdm9pZCBzM2NfYWRjX2RlZmF1bHRfc2VsZWN0KHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgIHVuc2lnbmVkIHNlbGVjdCkKIHsKIH0KIAogc3RydWN0IHMzY19hZGNfY2xpZW50ICpzM2NfYWRjX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJCXZvaWQgKCpzZWxlY3QpKHVuc2lnbmVkIGludCBzZWxlY3RlZCksCi0JCQkJCXZvaWQgKCpjb252KSh1bnNpZ25lZCBkMCwgdW5zaWduZWQgZDEsCisJCQkJCXZvaWQgKCpzZWxlY3QpKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50LAorCQkJCQkJICAgICAgIHVuc2lnbmVkIGludCBzZWxlY3RlZCksCisJCQkJCXZvaWQgKCpjb252KShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKKwkJCQkJCSAgICAgdW5zaWduZWQgZDAsIHVuc2lnbmVkIGQxLAogCQkJCQkJICAgICB1bnNpZ25lZCAqc2FtcGxlc19sZWZ0KSwKIAkJCQkJdW5zaWduZWQgaW50IGlzX3RzKQogewogCXN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50OwogCiAJV0FSTl9PTighcGRldik7Ci0JV0FSTl9PTighY29udik7CiAKIAlpZiAoIXNlbGVjdCkKIAkJc2VsZWN0ID0gczNjX2FkY19kZWZhdWx0X3NlbGVjdDsKIAotCWlmICghY29udiB8fCAhcGRldikKKwlpZiAoIXBkZXYpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMzY19hZGNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CkBAIC0yMzAsMTYgKzI2OSwxOSBAQAogCWFkY19kYmcoYWRjLCAicmVhZCAlZDogMHglMDR4LCAweCUwNHhcbiIsIGNsaWVudC0+bnJfc2FtcGxlcywgZGF0YTAsIGRhdGExKTsKIAogCWNsaWVudC0+bnJfc2FtcGxlcy0tOwotCShjbGllbnQtPmNvbnZlcnRfY2IpKGRhdGEwICYgMHgzZmYsIGRhdGExICYgMHgzZmYsICZjbGllbnQtPm5yX3NhbXBsZXMpOworCisJaWYgKGNsaWVudC0+Y29udmVydF9jYikKKwkJKGNsaWVudC0+Y29udmVydF9jYikoY2xpZW50LCBkYXRhMCAmIDB4M2ZmLCBkYXRhMSAmIDB4M2ZmLAorCQkJCSAgICAgJmNsaWVudC0+bnJfc2FtcGxlcyk7CiAKIAlpZiAoY2xpZW50LT5ucl9zYW1wbGVzID4gMCkgewogCQkvKiBmaXJlIGFub3RoZXIgY29udmVyc2lvbiBmb3IgdGhpcyAqLwogCi0JCWNsaWVudC0+c2VsZWN0X2NiKDEpOworCQljbGllbnQtPnNlbGVjdF9jYihjbGllbnQsIDEpOwogCQlzM2NfYWRjX2NvbnZlcnQoYWRjKTsKIAl9IGVsc2UgewogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCShjbGllbnQtPnNlbGVjdF9jYikoMCk7CisJCShjbGllbnQtPnNlbGVjdF9jYikoY2xpZW50LCAwKTsKIAkJYWRjLT5jdXIgPSBOVUxMOwogCiAJCXMzY19hZGNfdHJ5KGFkYyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LWZyZXEtZGVidWdmcy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS1mcmVxLWRlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTI3NjY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS1mcmVxLWRlYnVnZnMuYwpAQCAtMCwwICsxLDE5OSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS1mcmVxLWRlYnVnZnMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjRYWCBDUFUgRnJlcXVlbmN5IHNjYWxpbmcgLSBkZWJ1Z2ZzIHN0YXR1cyBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS1jb3JlLmg+CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkYmdmc19yb290Oworc3RhdGljIHN0cnVjdCBkZW50cnkgKmRiZ2ZzX2ZpbGVfaW87CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZGJnZnNfZmlsZV9pbmZvOworc3RhdGljIHN0cnVjdCBkZW50cnkgKmRiZ2ZzX2ZpbGVfYm9hcmQ7CisKKyNkZWZpbmUgcHJpbnRfbnMoeCkgKCh4KSAvIDEwKSwgKCh4KSAlIDEwKQorCitzdGF0aWMgdm9pZCBzaG93X21heChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHMzY19mcmVxICpmKQoreworCXNlcV9wcmludGYoc2VxLCAiTUFYOiBGPSVsdSwgSD0lbHUsIFA9JWx1LCBBPSVsdVxuIiwKKwkJICAgZi0+ZmNsaywgZi0+aGNsaywgZi0+cGNsaywgZi0+YXJtY2xrKTsKK30KKworc3RhdGljIGludCBib2FyZF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpwKQoreworCXN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZzsKKwlzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgKmJyZDsKKworCWNmZyA9IHMzY19jcHVmcmVxX2dldGNvbmZpZygpOworCWlmICghY2ZnKSB7CisJCXNlcV9wcmludGYoc2VxLCAibm8gY29uZmlndXJhdGlvbiByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYnJkID0gY2ZnLT5ib2FyZDsKKwlpZiAoIWJyZCkgeworCQlzZXFfcHJpbnRmKHNlcSwgIm5vIGJvYXJkIGRlZmluaXRpb24gc2V0P1xuIik7CisJCXJldHVybiAwOworCX0KKworCXNlcV9wcmludGYoc2VxLCAiU0RSQU0gcmVmcmVzaCAldSBuc1xuIiwgYnJkLT5yZWZyZXNoKTsKKwlzZXFfcHJpbnRmKHNlcSwgImF1dG9faW89JXVcbiIsIGJyZC0+YXV0b19pbyk7CisJc2VxX3ByaW50ZihzZXEsICJuZWVkX2lvPSV1XG4iLCBicmQtPm5lZWRfaW8pOworCisJc2hvd19tYXgoc2VxLCAmYnJkLT5tYXgpOworCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmb3BzX2JvYXJkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGJvYXJkX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2JvYXJkID0geworCS5vcGVuCQk9IGZvcHNfYm9hcmRfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpwKQoreworCXN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZzsKKworCWNmZyA9IHMzY19jcHVmcmVxX2dldGNvbmZpZygpOworCWlmICghY2ZnKSB7CisJCXNlcV9wcmludGYoc2VxLCAibm8gY29uZmlndXJhdGlvbiByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2VxX3ByaW50ZihzZXEsICIgIEZDTEsgJWxkIEh6XG4iLCBjZmctPmZyZXEuZmNsayk7CisJc2VxX3ByaW50ZihzZXEsICIgIEhDTEsgJWxkIEh6ICglbHUuJWx1IG5zKVxuIiwKKwkJICAgY2ZnLT5mcmVxLmhjbGssIHByaW50X25zKGNmZy0+ZnJlcS5oY2xrX3RucykpOworCXNlcV9wcmludGYoc2VxLCAiICBQQ0xLICVsZCBIelxuIiwgY2ZnLT5mcmVxLmhjbGspOworCXNlcV9wcmludGYoc2VxLCAiQVJNQ0xLICVsZCBIelxuIiwgY2ZnLT5mcmVxLmFybWNsayk7CisJc2VxX3ByaW50ZihzZXEsICJcbiIpOworCisJc2hvd19tYXgoc2VxLCAmY2ZnLT5tYXgpOworCisJc2VxX3ByaW50ZihzZXEsICJEaXZpc29yczogUD0lZCwgSD0lZCwgQT0lZCwgZHZzPSVzXG4iLAorCQkgICBjZmctPmRpdnMuaF9kaXZpc29yLCBjZmctPmRpdnMucF9kaXZpc29yLAorCQkgICBjZmctPmRpdnMuYXJtX2Rpdmlzb3IsIGNmZy0+ZGl2cy5kdnMgPyAib24iIDogIm9mZiIpOworCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKKworCXNlcV9wcmludGYoc2VxLCAibG9ja19wbGw9JXVcbiIsIGNmZy0+bG9ja19wbGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZm9wc19pbmZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGluZm9fc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfaW5mbyA9IHsKKwkub3BlbgkJPSBmb3BzX2luZm9fb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgaW9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqcCkKK3sKKwl2b2lkICgqc2hvd19iYW5rKShzdHJ1Y3Qgc2VxX2ZpbGUgKiwgc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqLCB1bmlvbiBzM2NfaW9iYW5rICopOworCXN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZzsKKwlzdHJ1Y3QgczNjX2lvdGltaW5ncyAqaW90OworCXVuaW9uIHMzY19pb2JhbmsgKmlvYjsKKwlpbnQgYmFuazsKKworCWNmZyA9IHMzY19jcHVmcmVxX2dldGNvbmZpZygpOworCWlmICghY2ZnKSB7CisJCXNlcV9wcmludGYoc2VxLCAibm8gY29uZmlndXJhdGlvbiByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2hvd19iYW5rID0gY2ZnLT5pbmZvLT5kZWJ1Z19pb19zaG93OworCWlmICghc2hvd19iYW5rKSB7CisJCXNlcV9wcmludGYoc2VxLCAibm8gY29kZSB0byBzaG93IGJhbmsgdGltaW5nXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaW90ID0gczNjX2NwdWZyZXFfZ2V0aW90aW1pbmdzKCk7CisJaWYgKCFpb3QpIHsKKwkJc2VxX3ByaW50ZihzZXEsICJubyBpbyB0aW1pbmdzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXFfcHJpbnRmKHNlcSwgImhjbGsgcGVyaW9kIGlzICVsdS4lbHUgbnNcbiIsIHByaW50X25zKGNmZy0+ZnJlcS5oY2xrX3RucykpOworCisJZm9yIChiYW5rID0gMDsgYmFuayA8IE1BWF9CQU5LUzsgYmFuaysrKSB7CisJCWlvYiA9ICZpb3QtPmJhbmtbYmFua107CisKKwkJc2VxX3ByaW50ZihzZXEsICJiYW5rICVkOiAiLCBiYW5rKTsKKworCQlpZiAoIWlvYi0+aW9fMjQxMCkgeworCQkJc2VxX3ByaW50ZihzZXEsICJub3RoaW5nIHNldFxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXNob3dfYmFuayhzZXEsIGNmZywgaW9iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmb3BzX2lvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGlvX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2lvID0geworCS5vcGVuCQk9IGZvcHNfaW9fb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKKworc3RhdGljIGludCBfX2luaXQgczNjX2ZyZXFfZGVidWdmc19pbml0KHZvaWQpCit7CisJZGJnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiczNjLWNwdWZyZXEiLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRiZ2ZzX3Jvb3QpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGNyZWF0aW5nIGRlYnVnZnMgcm9vdFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gUFRSX0VSUihkYmdmc19yb290KTsKKwl9CisKKwlkYmdmc19maWxlX2lvID0gZGVidWdmc19jcmVhdGVfZmlsZSgiaW8tdGltaW5nIiwgU19JUlVHTywgZGJnZnNfcm9vdCwKKwkJCQkJICAgIE5VTEwsICZmb3BzX2lvKTsKKworCWRiZ2ZzX2ZpbGVfaW5mbyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImluZm8iLCBTX0lSVUdPLCBkYmdmc19yb290LAorCQkJCQkgICAgICBOVUxMLCAmZm9wc19pbmZvKTsKKworCWRiZ2ZzX2ZpbGVfYm9hcmQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJib2FyZCIsIFNfSVJVR08sIGRiZ2ZzX3Jvb3QsCisJCQkJCSAgICAgICBOVUxMLCAmZm9wc19ib2FyZCk7CisKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbChzM2NfZnJlcV9kZWJ1Z2ZzX2luaXQpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LWZyZXEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUtZnJlcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMWI3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LWZyZXEuYwpAQCAtMCwwICsxLDcxNiBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS1mcmVxLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwNywyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIENQVSBGcmVxdWVuY3kgc2NhbGluZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS1jb3JlLmg+CisKKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKworLyogbm90ZSwgY3B1ZnJlcSBzdXBwb3J0IGRlYWxzIGluIGtIeiwgbm8gSHogKi8KKworc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlciBzM2MyNHh4X2RyaXZlcjsKK3N0YXRpYyBzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnIGNwdV9jdXI7CitzdGF0aWMgc3RydWN0IHMzY19pb3RpbWluZ3MgczNjMjR4eF9pb3RpbWluZzsKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBsbF9yZWc7CitzdGF0aWMgdW5zaWduZWQgaW50IGxhc3RfdGFyZ2V0ID0gfjA7CitzdGF0aWMgdW5zaWduZWQgaW50IGZ0YWJfc2l6ZTsKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmZ0YWI7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpfY2xrX21wbGw7CitzdGF0aWMgc3RydWN0IGNsayAqX2Nsa194dGFsOworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19mY2xrOworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19oY2xrOworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19wY2xrOworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19hcm07CisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfUzNDMjRYWF9ERUJVR0ZTCitzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpzM2NfY3B1ZnJlcV9nZXRjb25maWcodm9pZCkKK3sKKwlyZXR1cm4gJmNwdV9jdXI7Cit9CisKK3N0cnVjdCBzM2NfaW90aW1pbmdzICpzM2NfY3B1ZnJlcV9nZXRpb3RpbWluZ3Modm9pZCkKK3sKKwlyZXR1cm4gJnMzYzI0eHhfaW90aW1pbmc7Cit9CisjZW5kaWYgLyogQ09ORklHX0NQVV9GUkVRX1MzQzI0WFhfREVCVUdGUyAqLworCitzdGF0aWMgdm9pZCBzM2NfY3B1ZnJlcV9nZXRjdXIoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCXVuc2lnbmVkIGxvbmcgZmNsaywgcGNsaywgaGNsaywgYXJtY2xrOworCisJY2ZnLT5mcmVxLmZjbGsgPSBmY2xrID0gY2xrX2dldF9yYXRlKGNsa19mY2xrKTsKKwljZmctPmZyZXEuaGNsayA9IGhjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrX2hjbGspOworCWNmZy0+ZnJlcS5wY2xrID0gcGNsayA9IGNsa19nZXRfcmF0ZShjbGtfcGNsayk7CisJY2ZnLT5mcmVxLmFybWNsayA9IGFybWNsayA9IGNsa19nZXRfcmF0ZShjbGtfYXJtKTsKKworCWNmZy0+cGxsLmluZGV4ID0gX19yYXdfcmVhZGwoUzNDMjQxMF9NUExMQ09OKTsKKwljZmctPnBsbC5mcmVxdWVuY3kgPSBmY2xrOworCisJY2ZnLT5mcmVxLmhjbGtfdG5zID0gMTAwMDAwMDAwMCAvIChjZmctPmZyZXEuaGNsayAvIDEwKTsKKworCWNmZy0+ZGl2cy5oX2Rpdmlzb3IgPSBmY2xrIC8gaGNsazsKKwljZmctPmRpdnMucF9kaXZpc29yID0gZmNsayAvIHBjbGs7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfY3B1ZnJlcV9jYWxjKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwl1bnNpZ25lZCBsb25nIHBsbCA9IGNmZy0+cGxsLmZyZXF1ZW5jeTsKKworCWNmZy0+ZnJlcS5mY2xrID0gcGxsOworCWNmZy0+ZnJlcS5oY2xrID0gcGxsIC8gY2ZnLT5kaXZzLmhfZGl2aXNvcjsKKwljZmctPmZyZXEucGNsayA9IHBsbCAvIGNmZy0+ZGl2cy5wX2Rpdmlzb3I7CisKKwkvKiBjb252ZXJ0IGhjbGsgaW50byAxMHRocyBvZiBuYW5vc2Vjb25kcyBmb3IgaW8gY2FsY3MgKi8KKwljZmctPmZyZXEuaGNsa190bnMgPSAxMDAwMDAwMDAwIC8gKGNmZy0+ZnJlcS5oY2xrIC8gMTApOworfQorCitzdGF0aWMgaW5saW5lIGludCBjbG9zZXIodW5zaWduZWQgaW50IHRhcmdldCwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCBjKQoreworCWludCBkaWZmX2N1ciA9IGFicyh0YXJnZXQgLSBjKTsKKwlpbnQgZGlmZl9uZXcgPSBhYnModGFyZ2V0IC0gbik7CisKKwlyZXR1cm4gKGRpZmZfbmV3IDwgZGlmZl9jdXIpOworfQorCitzdGF0aWMgdm9pZCBzM2NfY3B1ZnJlcV9zaG93KGNvbnN0IGNoYXIgKnBmeCwKKwkJCQkgc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCXMzY19mcmVxX2RiZygiJXM6IEZ2Y289JXUsIEY9JWx1LCBBPSVsdSwgSD0lbHUgKCV1KSwgUD0lbHUgKCV1KVxuIiwKKwkJICAgICBwZngsIGNmZy0+cGxsLmZyZXF1ZW5jeSwgY2ZnLT5mcmVxLmZjbGssIGNmZy0+ZnJlcS5hcm1jbGssCisJCSAgICAgY2ZnLT5mcmVxLmhjbGssIGNmZy0+ZGl2cy5oX2Rpdmlzb3IsCisJCSAgICAgY2ZnLT5mcmVxLnBjbGssIGNmZy0+ZGl2cy5wX2Rpdmlzb3IpOworfQorCisvKiBmdW5jdGlvbnMgdG8gd3JhcHBlciB0aGUgZHJpdmVyIGluZm8gY2FsbHMgdG8gZG8gdGhlIGNwdSBzcGVjaWZpYyB3b3JrICovCisKK3N0YXRpYyB2b2lkIHMzY19jcHVmcmVxX3NldGlvKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwlpZiAoY2ZnLT5pbmZvLT5zZXRfaW90aW1pbmcpCisJCShjZmctPmluZm8tPnNldF9pb3RpbWluZykoY2ZnLCAmczNjMjR4eF9pb3RpbWluZyk7Cit9CisKK3N0YXRpYyBpbnQgczNjX2NwdWZyZXFfY2FsY2lvKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwlpZiAoY2ZnLT5pbmZvLT5jYWxjX2lvdGltaW5nKQorCQlyZXR1cm4gKGNmZy0+aW5mby0+Y2FsY19pb3RpbWluZykoY2ZnLCAmczNjMjR4eF9pb3RpbWluZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgczNjX2NwdWZyZXFfc2V0cmVmcmVzaChzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpCit7CisJKGNmZy0+aW5mby0+c2V0X3JlZnJlc2gpKGNmZyk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19jcHVmcmVxX3NldGRpdnMoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCShjZmctPmluZm8tPnNldF9kaXZzKShjZmcpOworfQorCitzdGF0aWMgaW50IHMzY19jcHVmcmVxX2NhbGNkaXZzKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwlyZXR1cm4gKGNmZy0+aW5mby0+Y2FsY19kaXZzKShjZmcpOworfQorCitzdGF0aWMgdm9pZCBzM2NfY3B1ZnJlcV9zZXRmdmNvKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwkoY2ZnLT5pbmZvLT5zZXRfZnZjbykoY2ZnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHMzY19jcHVmcmVxX3Jlc3VtZV9jbG9ja3Modm9pZCkKK3sKKwljcHVfY3VyLmluZm8tPnJlc3VtZV9jbG9ja3MoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHMzY19jcHVmcmVxX3VwZGF0ZWNsayhzdHJ1Y3QgY2xrICpjbGssCisJCQkJCSB1bnNpZ25lZCBpbnQgZnJlcSkKK3sKKwljbGtfc2V0X3JhdGUoY2xrLCBmcmVxKTsKK30KKworc3RhdGljIGludCBzM2NfY3B1ZnJlcV9zZXR0YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJCQkJIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKKwkJCQkgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwbGwpCit7CisJc3RydWN0IHMzY19jcHVmcmVxX2ZyZXFzIGZyZXFzOworCXN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgY3B1X25ldzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY3B1X25ldyA9IGNwdV9jdXI7ICAvKiBjb3B5IG5ldyBmcm9tIGN1cnJlbnQgKi8KKworCXMzY19jcHVmcmVxX3Nob3coImN1ciIsICZjcHVfY3VyKTsKKworCS8qIFRPRE8gLSBjaGVjayBmb3IgRE1BIGN1cnJlbnRseSBvdXRzdGFuZGluZyAqLworCisJY3B1X25ldy5wbGwgPSBwbGwgPyAqcGxsIDogY3B1X2N1ci5wbGw7CisKKwlpZiAocGxsKQorCQlmcmVxcy5wbGxfY2hhbmdpbmcgPSAxOworCisJLyogdXBkYXRlIG91ciBmcmVxdWVuY2llcyAqLworCisJY3B1X25ldy5mcmVxLmFybWNsayA9IHRhcmdldF9mcmVxOworCWNwdV9uZXcuZnJlcS5mY2xrID0gY3B1X25ldy5wbGwuZnJlcXVlbmN5OworCisJaWYgKHMzY19jcHVmcmVxX2NhbGNkaXZzKCZjcHVfbmV3KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJubyBkaXZpc29ycyBmb3IgJWRcbiIsIHRhcmdldF9mcmVxKTsKKwkJZ290byBlcnJfbm90cG9zc2libGU7CisJfQorCisJczNjX2ZyZXFfZGJnKCIlczogZ290IGRpdnNcbiIsIF9fZnVuY19fKTsKKworCXMzY19jcHVmcmVxX2NhbGMoJmNwdV9uZXcpOworCisJczNjX2ZyZXFfZGJnKCIlczogY2FsY3VsYXRlZCBmcmVxdWVuY2llcyBmb3IgbmV3XG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoY3B1X25ldy5mcmVxLmhjbGsgIT0gY3B1X2N1ci5mcmVxLmhjbGspIHsKKwkJaWYgKHMzY19jcHVmcmVxX2NhbGNpbygmY3B1X25ldykgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBJTyB0aW1pbmdzXG4iLCBfX2Z1bmNfXyk7CisJCQlnb3RvIGVycl9ub3Rwb3NzaWJsZTsKKwkJfQorCX0KKworCXMzY19jcHVmcmVxX3Nob3coIm5ldyIsICZjcHVfbmV3KTsKKworCS8qIHNldHVwIG91ciBjcHVmcmVxIHBhcmFtZXRlcnMgKi8KKworCWZyZXFzLm9sZCA9IGNwdV9jdXIuZnJlcTsKKwlmcmVxcy5uZXcgPSBjcHVfbmV3LmZyZXE7CisKKwlmcmVxcy5mcmVxcy5jcHUgPSAwOworCWZyZXFzLmZyZXFzLm9sZCA9IGNwdV9jdXIuZnJlcS5hcm1jbGsgLyAxMDAwOworCWZyZXFzLmZyZXFzLm5ldyA9IGNwdV9uZXcuZnJlcS5hcm1jbGsgLyAxMDAwOworCisJLyogdXBkYXRlIGYvaC9wIGNsb2NrIHNldHRpbmdzIGJlZm9yZSB3ZSBpc3N1ZSB0aGUgY2hhbmdlCisJICogbm90aWZpY2F0aW9uLCBzbyB0aGF0IGRyaXZlcnMgZG8gbm90IG5lZWQgdG8gZG8gYW55dGhpbmcKKwkgKiBzcGVjaWFsIGlmIHRoZXkgd2FudCB0byByZWNhbGN1bGF0ZSBvbiBDUFVGUkVRX1BSRUNIQU5HRS4gKi8KKworCXMzY19jcHVmcmVxX3VwZGF0ZWNsayhfY2xrX21wbGwsIGNwdV9uZXcucGxsLmZyZXF1ZW5jeSk7CisJczNjX2NwdWZyZXFfdXBkYXRlY2xrKGNsa19mY2xrLCBjcHVfbmV3LmZyZXEuZmNsayk7CisJczNjX2NwdWZyZXFfdXBkYXRlY2xrKGNsa19oY2xrLCBjcHVfbmV3LmZyZXEuaGNsayk7CisJczNjX2NwdWZyZXFfdXBkYXRlY2xrKGNsa19wY2xrLCBjcHVfbmV3LmZyZXEucGNsayk7CisKKwkvKiBzdGFydCB0aGUgZnJlcXVlbmN5IGNoYW5nZSAqLworCisJaWYgKHBvbGljeSkKKwkJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMuZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKKworCS8qIElmIGhjbGsgaXMgc3RheWluZyB0aGUgc2FtZSwgdGhlbiB3ZSBkbyBub3QgbmVlZCB0bworCSAqIHJlLXdyaXRlIHRoZSBJTyBvciB0aGUgcmVmcmVzaCB0aW1pbmdzIHdoaWxzdCB3ZSBhcmUgY2hhbmdpbmcKKwkgKiBzcGVlZC4gKi8KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIGlzIG91ciBtZW1vcnkgY2xvY2sgc2xvd2luZyBkb3duPyAqLworCWlmIChjcHVfbmV3LmZyZXEuaGNsayA8IGNwdV9jdXIuZnJlcS5oY2xrKSB7CisJCXMzY19jcHVmcmVxX3NldHJlZnJlc2goJmNwdV9uZXcpOworCQlzM2NfY3B1ZnJlcV9zZXRpbygmY3B1X25ldyk7CisJfQorCisJaWYgKGNwdV9uZXcuZnJlcS5mY2xrID09IGNwdV9jdXIuZnJlcS5mY2xrKSB7CisJCS8qIG5vdCBjaGFuZ2luZyBQTEwsIGp1c3Qgc2V0IHRoZSBkaXZpc29ycyAqLworCisJCXMzY19jcHVmcmVxX3NldGRpdnMoJmNwdV9uZXcpOworCX0gZWxzZSB7CisJCWlmIChjcHVfbmV3LmZyZXEuZmNsayA8IGNwdV9jdXIuZnJlcS5mY2xrKSB7CisJCQkvKiBzbG93IHRoZSBjcHUgZG93biwgdGhlbiBzZXQgZGl2aXNvcnMgKi8KKworCQkJczNjX2NwdWZyZXFfc2V0ZnZjbygmY3B1X25ldyk7CisJCQlzM2NfY3B1ZnJlcV9zZXRkaXZzKCZjcHVfbmV3KTsKKwkJfSBlbHNlIHsKKwkJCS8qIHNldCB0aGUgZGl2aXNvcnMsIHRoZW4gc3BlZWQgdXAgKi8KKworCQkJczNjX2NwdWZyZXFfc2V0ZGl2cygmY3B1X25ldyk7CisJCQlzM2NfY3B1ZnJlcV9zZXRmdmNvKCZjcHVfbmV3KTsKKwkJfQorCX0KKworCS8qIGRpZCBvdXIgbWVtb3J5IGNsb2NrIHNwZWVkIHVwICovCisJaWYgKGNwdV9uZXcuZnJlcS5oY2xrID4gY3B1X2N1ci5mcmVxLmhjbGspIHsKKwkJczNjX2NwdWZyZXFfc2V0cmVmcmVzaCgmY3B1X25ldyk7CisJCXMzY19jcHVmcmVxX3NldGlvKCZjcHVfbmV3KTsKKwl9CisKKwkvKiB1cGRhdGUgb3VyIGN1cnJlbnQgc2V0dGluZ3MgKi8KKwljcHVfY3VyID0gY3B1X25ldzsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCS8qIG5vdGlmeSBldmVyeW9uZSB3ZSd2ZSBkb25lIHRoaXMgKi8KKwlpZiAocG9saWN5KQorCQljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcy5mcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKKworCXMzY19mcmVxX2RiZygiJXM6IGZpbmlzaGVkXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7CisKKyBlcnJfbm90cG9zc2libGU6CisJcHJpbnRrKEtFUk5fRVJSICJubyBjb21wYXRpYmxlIHNldHRpbmdzIGZvciAlZFxuIiwgdGFyZ2V0X2ZyZXEpOworCXJldHVybiAtRUlOVkFMOworfQorCisvKiBzM2NfY3B1ZnJlcV90YXJnZXQKKyAqCisgKiBjYWxsZWQgYnkgdGhlIGNwdWZyZXEgY29yZSB0byBhZGp1c3QgdGhlIGZyZXF1ZW5jeSB0aGF0IHRoZSBDUFUKKyAqIGlzIGN1cnJlbnRseSBydW5uaW5nIGF0LgorICovCisKK3N0YXRpYyBpbnQgczNjX2NwdWZyZXFfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQkJICAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAorCQkJICAgICAgdW5zaWduZWQgaW50IHJlbGF0aW9uKQoreworCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcGxsOworCXVuc2lnbmVkIGludCBpbmRleDsKKworCS8qIGF2b2lkIHJlcGVhdGVkIGNhbGxzIHdoaWNoIGNhdXNlIGEgbmVlZGxlc3MgYW1vdXQgb2YgZHVwbGljYXRlZAorCSAqIGxvZ2dpbmcgb3V0cHV0IChhbmQgQ1BVIHRpbWUgYXMgdGhlIGNhbGN1bGF0aW9uIHByb2Nlc3MgaXMKKwkgKiBkb25lKSAqLworCWlmICh0YXJnZXRfZnJlcSA9PSBsYXN0X3RhcmdldCkKKwkJcmV0dXJuIDA7CisKKwlsYXN0X3RhcmdldCA9IHRhcmdldF9mcmVxOworCisJczNjX2ZyZXFfZGJnKCIlczogcG9saWN5ICVwLCB0YXJnZXQgJXUsIHJlbGF0aW9uICV1XG4iLAorCQkgICAgIF9fZnVuY19fLCBwb2xpY3ksIHRhcmdldF9mcmVxLCByZWxhdGlvbik7CisKKwlpZiAoZnRhYikgeworCQlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgZnRhYiwKKwkJCQkJCSAgIHRhcmdldF9mcmVxLCByZWxhdGlvbiwKKwkJCQkJCSAgICZpbmRleCkpIHsKKwkJCXMzY19mcmVxX2RiZygiJXM6IHRhYmxlIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlzM2NfZnJlcV9kYmcoIiVzOiBhZGp1c3QgJWQgdG8gZW50cnkgJWQgKCV1KVxuIiwgX19mdW5jX18sCisJCQkgICAgIHRhcmdldF9mcmVxLCBpbmRleCwgZnRhYltpbmRleF0uZnJlcXVlbmN5KTsKKwkJdGFyZ2V0X2ZyZXEgPSBmdGFiW2luZGV4XS5mcmVxdWVuY3k7CisJfQorCisJdGFyZ2V0X2ZyZXEgKj0gMTAwMDsgIC8qIGNvbnZlcnQgdGFyZ2V0IHRvIEh6ICovCisKKwkvKiBmaW5kIHRoZSBzZXR0aW5ncyBmb3Igb3VyIG5ldyBmcmVxdWVuY3kgKi8KKworCWlmICghcGxsX3JlZyB8fCBjcHVfY3VyLmxvY2tfcGxsKSB7CisJCS8qIGVpdGhlciB3ZSd2ZSBub3QgZ290IGFueSBQTEwgdmFsdWVzLCBvciB3ZSd2ZSBsb2NrZWQKKwkJICogdG8gdGhlIGN1cnJlbnQgb25lLiAqLworCQlwbGwgPSBOVUxMOworCX0gZWxzZSB7CisJCXN0cnVjdCBjcHVmcmVxX3BvbGljeSB0bXBfcG9saWN5OworCQlpbnQgcmV0OworCisJCS8qIHdlIGtlZXAgdGhlIGNwdSBwbGwgdGFibGUgaW4gSHosIHRvIGVuc3VyZSB3ZSBnZXQgYW4KKwkJICogYWNjdXJhdGUgdmFsdWUgZm9yIHRoZSBQTEwgb3V0cHV0LiAqLworCisJCXRtcF9wb2xpY3kubWluID0gcG9saWN5LT5taW4gKiAxMDAwOworCQl0bXBfcG9saWN5Lm1heCA9IHBvbGljeS0+bWF4ICogMTAwMDsKKwkJdG1wX3BvbGljeS5jcHUgPSBwb2xpY3ktPmNwdTsKKworCQkvKiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQgdXNlcyBhIHBvaW50ZXIgdG8gJ2luZGV4JworCQkgKiB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIHRoZSB0YWJsZSBlbnRyeSwgbm90IHRoZSB2YWx1ZSBvZgorCQkgKiB0aGUgdGFibGUgZW50cnkncyBpbmRleCBmaWVsZC4gKi8KKworCQlyZXQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQoJnRtcF9wb2xpY3ksIHBsbF9yZWcsCisJCQkJCQkgICAgIHRhcmdldF9mcmVxLCByZWxhdGlvbiwKKwkJCQkJCSAgICAgJmluZGV4KTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gUExMIGF2YWlsYWJsZVxuIiwgX19mdW5jX18pOworCQkJZ290byBlcnJfbm90cG9zc2libGU7CisJCX0KKworCQlwbGwgPSBwbGxfcmVnICsgaW5kZXg7CisKKwkJczNjX2ZyZXFfZGJnKCIlczogdGFyZ2V0ICV1ID0+ICV1XG4iLAorCQkJICAgICBfX2Z1bmNfXywgdGFyZ2V0X2ZyZXEsIHBsbC0+ZnJlcXVlbmN5KTsKKworCQl0YXJnZXRfZnJlcSA9IHBsbC0+ZnJlcXVlbmN5OworCX0KKworCXJldHVybiBzM2NfY3B1ZnJlcV9zZXR0YXJnZXQocG9saWN5LCB0YXJnZXRfZnJlcSwgcGxsKTsKKworIGVycl9ub3Rwb3NzaWJsZToKKwlwcmludGsoS0VSTl9FUlIgIm5vIGNvbXBhdGlibGUgc2V0dGluZ3MgZm9yICVkXG4iLCB0YXJnZXRfZnJlcSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgczNjX2NwdWZyZXFfZ2V0KHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGtfYXJtKSAvIDEwMDA7Cit9CisKK3N0cnVjdCBjbGsgKnMzY19jcHVmcmVxX2Nsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBjbGsgKmNsazsKKworCWNsayA9IGNsa19nZXQoZGV2LCBuYW1lKTsKKwlpZiAoSVNfRVJSKGNsaykpCisJCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogZmFpbGVkIHRvIGdldCBjbG9jayAnJXMnXG4iLCBuYW1lKTsKKworCXJldHVybiBjbGs7Cit9CisKK3N0YXRpYyBpbnQgczNjX2NwdWZyZXFfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlczogaW5pdGlhbGlzaW5nIHBvbGljeSAlcFxuIiwgX19mdW5jX18sIHBvbGljeSk7CisKKwlpZiAocG9saWN5LT5jcHUgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwb2xpY3ktPmN1ciA9IHMzY19jcHVmcmVxX2dldCgwKTsKKwlwb2xpY3ktPm1pbiA9IHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSA9IDA7CisJcG9saWN5LT5tYXggPSBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEgPSBjcHVfY3VyLmluZm8tPm1heC5mY2xrIC8gMTAwMDsKKwlwb2xpY3ktPmdvdmVybm9yID0gQ1BVRlJFUV9ERUZBVUxUX0dPVkVSTk9SOworCisJLyogZmVlZCB0aGUgbGF0ZW5jeSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjcHUgZHJpdmVyICovCisJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IGNwdV9jdXIuaW5mby0+bGF0ZW5jeTsKKworCWlmIChmdGFiKQorCQljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgZnRhYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5pdCBpbnQgczNjX2NwdWZyZXFfaW5pdGNsa3Modm9pZCkKK3sKKwlfY2xrX21wbGwgPSBzM2NfY3B1ZnJlcV9jbGtfZ2V0KE5VTEwsICJtcGxsIik7CisJX2Nsa194dGFsID0gczNjX2NwdWZyZXFfY2xrX2dldChOVUxMLCAieHRhbCIpOworCWNsa19mY2xrID0gczNjX2NwdWZyZXFfY2xrX2dldChOVUxMLCAiZmNsayIpOworCWNsa19oY2xrID0gczNjX2NwdWZyZXFfY2xrX2dldChOVUxMLCAiaGNsayIpOworCWNsa19wY2xrID0gczNjX2NwdWZyZXFfY2xrX2dldChOVUxMLCAicGNsayIpOworCWNsa19hcm0gPSBzM2NfY3B1ZnJlcV9jbGtfZ2V0KE5VTEwsICJhcm1jbGsiKTsKKworCWlmIChJU19FUlIoY2xrX2ZjbGspIHx8IElTX0VSUihjbGtfaGNsaykgfHwgSVNfRVJSKGNsa19wY2xrKSB8fAorCSAgICBJU19FUlIoX2Nsa19tcGxsKSB8fCBJU19FUlIoY2xrX2FybSkgfHwgSVNfRVJSKF9jbGtfeHRhbCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGdldCBjbG9jayhzKVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogY2xvY2tzIGY9JWx1LGg9JWx1LHA9JWx1LGE9JWx1XG4iLCBfX2Z1bmNfXywKKwkgICAgICAgY2xrX2dldF9yYXRlKGNsa19mY2xrKSAvIDEwMDAsCisJICAgICAgIGNsa19nZXRfcmF0ZShjbGtfaGNsaykgLyAxMDAwLAorCSAgICAgICBjbGtfZ2V0X3JhdGUoY2xrX3BjbGspIC8gMTAwMCwKKwkgICAgICAgY2xrX2dldF9yYXRlKGNsa19hcm0pIC8gMTAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2NfY3B1ZnJlcV92ZXJpZnkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisJaWYgKHBvbGljeS0+Y3B1ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgc3VzcGVuZF9wbGw7CitzdGF0aWMgdW5zaWduZWQgaW50IHN1c3BlbmRfZnJlcTsKKworc3RhdGljIGludCBzM2NfY3B1ZnJlcV9zdXNwZW5kKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBwbV9tZXNzYWdlX3QgcG1zZykKK3sKKwlzdXNwZW5kX3BsbC5mcmVxdWVuY3kgPSBjbGtfZ2V0X3JhdGUoX2Nsa19tcGxsKTsKKwlzdXNwZW5kX3BsbC5pbmRleCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfTVBMTENPTik7CisJc3VzcGVuZF9mcmVxID0gczNjX2NwdWZyZXFfZ2V0KDApICogMTAwMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19jcHVmcmVxX3Jlc3VtZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlpbnQgcmV0OworCisJczNjX2ZyZXFfZGJnKCIlczogcmVzdW1pbmcgd2l0aCBwb2xpY3kgJXBcbiIsIF9fZnVuY19fLCBwb2xpY3kpOworCisJbGFzdF90YXJnZXQgPSB+MDsJLyogaW52YWxpZGF0ZSBsYXN0X3RhcmdldCBzZXR0aW5nICovCisKKwkvKiBmaXJzdCwgZmluZCBvdXQgd2hhdCBzcGVlZCB3ZSByZXN1bWVkIGF0LiAqLworCXMzY19jcHVmcmVxX3Jlc3VtZV9jbG9ja3MoKTsKKworCS8qIHdoaWxzdCB3ZSB3aWxsIGJlIGNhbGxlZCBsYXRlciBvbiwgd2UgdHJ5IGFuZCByZS1zZXQgdGhlCisJICogY3B1IGZyZXF1ZW5jaWVzIGFzIHNvb24gYXMgcG9zc2libGUgc28gdGhhdCB3ZSBkbyBub3QgZW5kCisJICogdXAgcmVzdW1pbmcgZGV2aWNlcyBhbmQgdGhlbiBpbW1lZGlhdGxleSBoYXZpbmcgdG8gcmUtc2V0CisJICogYSBudW1iZXIgb2Ygc2V0dGluZ3Mgb25jZSB0aGVzZSBkZXZpY2VzIGhhdmUgcmVzdGFydGVkLgorCSAqCisJICogYXMgYSBub3RlLCBpdCBpcyBleHBlY3RlZCBkZXZpY2VzIGFyZSBub3QgdXNlZCB1bnRpbCB0aGV5CisJICogaGF2ZSBiZWVuIHVuLXN1c3BlbmRlZCBhbmQgYXQgdGhhdCB0aW1lIHRoZXkgc2hvdWxkIGhhdmUKKwkgKiB1c2VkIHRoZSB1cGRhdGVkIGNsb2NrIHNldHRpbmdzLgorCSAqLworCisJcmV0ID0gczNjX2NwdWZyZXFfc2V0dGFyZ2V0KE5VTEwsIHN1c3BlbmRfZnJlcSwgJnN1c3BlbmRfcGxsKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZXNldCBwbGwvZnJlcVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgczNjX2NwdWZyZXFfcmVzdW1lIE5VTEwKKyNkZWZpbmUgczNjX2NwdWZyZXFfc3VzcGVuZCBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlciBzM2MyNHh4X2RyaXZlciA9IHsKKwkuZmxhZ3MJCT0gQ1BVRlJFUV9TVElDS1ksCisJLnZlcmlmeQkJPSBzM2NfY3B1ZnJlcV92ZXJpZnksCisJLnRhcmdldAkJPSBzM2NfY3B1ZnJlcV90YXJnZXQsCisJLmdldAkJPSBzM2NfY3B1ZnJlcV9nZXQsCisJLmluaXQJCT0gczNjX2NwdWZyZXFfaW5pdCwKKwkuc3VzcGVuZAk9IHMzY19jcHVmcmVxX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2NfY3B1ZnJlcV9yZXN1bWUsCisJLm5hbWUJCT0gInMzYzI0eHgiLAorfTsKKworCitpbnQgX19pbml0IHMzY19jcHVmcmVxX3JlZ2lzdGVyKHN0cnVjdCBzM2NfY3B1ZnJlcV9pbmZvICppbmZvKQoreworCWlmICghaW5mbyB8fCAhaW5mby0+bmFtZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcGFzcyB2YWxpZCBpbmZvcm1hdGlvblxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiUzNDMjRYWCBDUFUgRnJlcXVlbmN5IGRyaXZlciwgJXMgY3B1IHN1cHBvcnRcbiIsCisJICAgICAgIGluZm8tPm5hbWUpOworCisJLyogY2hlY2sgb3VyIGRyaXZlciBpbmZvIGhhcyB2YWxpZCBkYXRhICovCisKKwlCVUdfT04oaW5mby0+c2V0X3JlZnJlc2ggPT0gTlVMTCk7CisJQlVHX09OKGluZm8tPnNldF9kaXZzID09IE5VTEwpOworCUJVR19PTihpbmZvLT5jYWxjX2RpdnMgPT0gTlVMTCk7CisKKwkvKiBpbmZvLT5zZXRfZnZjbyBpcyBvcHRpb25hbCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlcmUKKwkgKiBpcyBhIG5lZWQgdG8gc2V0IHRoZSBjbG9jayBjb2RlLiAqLworCisJY3B1X2N1ci5pbmZvID0gaW5mbzsKKworCS8qIE5vdGUsIGRyaXZlciByZWdpc3RlcmluZyBzaG91bGQgcHJvYmFibHkgdXBkYXRlIGxvY2t0aW1lICovCisKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBzM2NfY3B1ZnJlcV9zZXRib2FyZChzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgKmJvYXJkKQoreworCXN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCAqb3VyczsKKworCWlmICghYm9hcmQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIGJvYXJkIGRhdGFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ29weSB0aGUgYm9hcmQgaW5mb3JtYXRpb24gc28gdGhhdCBlYWNoIGJvYXJkIGNhbiBtYWtlIHRoaXMKKwkgKiBpbml0ZGF0YS4gKi8KKworCW91cnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAob3VycyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkqb3VycyA9ICpib2FyZDsKKwljcHVfY3VyLmJvYXJkID0gb3VyczsKKworCXJldHVybiAwOworfQorCitpbnQgX19pbml0IHMzY19jcHVmcmVxX2F1dG9faW8odm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjcHVfY3VyLmluZm8tPmdldF9pb3RpbWluZykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBnZXRfaW90aW1pbmcgdW5kZWZpbmVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIiVzOiB3b3JraW5nIG91dCBJTyBzZXR0aW5nc1xuIiwgX19mdW5jX18pOworCisJcmV0ID0gKGNwdV9jdXIuaW5mby0+Z2V0X2lvdGltaW5nKSgmY3B1X2N1ciwgJnMzYzI0eHhfaW90aW1pbmcpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBnZXQgdGltaW5nc1xuIiwgX19mdW5jX18pOworCisJcmV0dXJuIHJldDsKK30KKworLyogaWYgb25lIG9yIGlzIHplcm8sIHRoZW4gcmV0dXJuIHRoZSBvdGhlciwgb3RoZXJ3aXNlIHJldHVybiB0aGUgbWluICovCisjZGVmaW5lIGRvX21pbihfYSwgX2IpICgoX2EpID09IDAgPyAoX2IpIDogKF9iKSA9PSAwID8gKF9hKSA6IG1pbihfYSwgX2IpKQorCisvKioKKyAqIHMzY19jcHVmcmVxX2ZyZXFfbWluIC0gZmluZCB0aGUgbWluaW11bSBzZXR0aW5ncyBmb3IgdGhlIGdpdmVuIGZyZXEuCisgKiBAZHN0OiBUaGUgZGVzdGluYXRpb24gc3RydWN0dXJlCisgKiBAYTogT25lIGFyZ3VtZW50LgorICogQGI6IFRoZSBvdGhlciBhcmd1bWVudC4KKyAqCisgKiBDcmVhdGUgYSBtaW5pbXVtIG9mIGVhY2ggZnJlcXVlbmN5IGVudHJ5IGluIHRoZSAnc3RydWN0IHMzY19mcmVxJywKKyAqIHVubGVzcyB0aGUgZW50cnkgaXMgemVybyB3aGVuIGl0IGlzIGlnbm9yZWQgYW5kIHRoZSBub24temVybyBhcmd1bWVudAorICogdXNlZC4KKyAqLworc3RhdGljIHZvaWQgczNjX2NwdWZyZXFfZnJlcV9taW4oc3RydWN0IHMzY19mcmVxICpkc3QsCisJCQkJIHN0cnVjdCBzM2NfZnJlcSAqYSwgc3RydWN0IHMzY19mcmVxICpiKQoreworCWRzdC0+ZmNsayA9IGRvX21pbihhLT5mY2xrLCBiLT5mY2xrKTsKKwlkc3QtPmhjbGsgPSBkb19taW4oYS0+aGNsaywgYi0+aGNsayk7CisJZHN0LT5wY2xrID0gZG9fbWluKGEtPnBjbGssIGItPnBjbGspOworCWRzdC0+YXJtY2xrID0gZG9fbWluKGEtPmFybWNsaywgYi0+YXJtY2xrKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgY2FsY19sb2NrdGltZSh1MzIgZnJlcSwgdTMyIHRpbWVfdXMpCit7CisJdTMyIHJlc3VsdDsKKworCXJlc3VsdCA9IGZyZXEgKiB0aW1lX3VzOworCXJlc3VsdCA9IERJVl9ST1VORF9VUChyZXN1bHQsIDEwMDAgKiAxMDAwKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19jcHVmcmVxX3VwZGF0ZV9sb2N0a2ltZSh2b2lkKQoreworCXVuc2lnbmVkIGludCBiaXRzID0gY3B1X2N1ci5pbmZvLT5sb2NrdGltZV9iaXRzOworCXUzMiByYXRlID0gKHUzMiljbGtfZ2V0X3JhdGUoX2Nsa194dGFsKTsKKwl1MzIgdmFsOworCisJaWYgKGJpdHMgPT0gMCkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJdmFsID0gY2FsY19sb2NrdGltZShyYXRlLCBjcHVfY3VyLmluZm8tPmxvY2t0aW1lX3UpIDw8IGJpdHM7CisJdmFsIHw9IGNhbGNfbG9ja3RpbWUocmF0ZSwgY3B1X2N1ci5pbmZvLT5sb2NrdGltZV9tKTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBuZXcgbG9ja3RpbWUgaXMgMHglMDh4XG4iLCBfX2Z1bmNfXywgdmFsKTsKKwlfX3Jhd193cml0ZWwodmFsLCBTM0MyNDEwX0xPQ0tUSU1FKTsKK30KKworc3RhdGljIGludCBzM2NfY3B1ZnJlcV9idWlsZF9mcmVxKHZvaWQpCit7CisJaW50IHNpemUsIHJldDsKKworCWlmICghY3B1X2N1ci5pbmZvLT5jYWxjX2ZyZXF0YWJsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZnJlZShmdGFiKTsKKwlmdGFiID0gTlVMTDsKKworCXNpemUgPSBjcHVfY3VyLmluZm8tPmNhbGNfZnJlcXRhYmxlKCZjcHVfY3VyLCBOVUxMLCAwKTsKKwlzaXplKys7CisKKwlmdGFiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKSAqIHNpemUsIEdGUF9LRVJORUwpOworCWlmICghZnRhYikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIHRhYmxlc1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmdGFiX3NpemUgPSBzaXplOworCisJcmV0ID0gY3B1X2N1ci5pbmZvLT5jYWxjX2ZyZXF0YWJsZSgmY3B1X2N1ciwgZnRhYiwgc2l6ZSk7CisJczNjX2NwdWZyZXFfYWRkZnJlcShmdGFiLCByZXQsIHNpemUsIENQVUZSRVFfVEFCTEVfRU5EKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzM2NfY3B1ZnJlcV9pbml0Y2FsbCh2b2lkKQoreworCWludCByZXQgPSAwOworCisJaWYgKGNwdV9jdXIuaW5mbyAmJiBjcHVfY3VyLmJvYXJkKSB7CisJCXJldCA9IHMzY19jcHVmcmVxX2luaXRjbGtzKCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQkvKiBnZXQgY3VycmVudCBzZXR0aW5ncyAqLworCQlzM2NfY3B1ZnJlcV9nZXRjdXIoJmNwdV9jdXIpOworCQlzM2NfY3B1ZnJlcV9zaG93KCJjdXIiLCAmY3B1X2N1cik7CisKKwkJaWYgKGNwdV9jdXIuYm9hcmQtPmF1dG9faW8pIHsKKwkJCXJldCA9IHMzY19jcHVmcmVxX2F1dG9faW8oKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gZ2V0IGlvIHRpbWluZ1xuIiwKKwkJCQkgICAgICAgX19mdW5jX18pOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJaWYgKGNwdV9jdXIuYm9hcmQtPm5lZWRfaW8gJiYgIWNwdV9jdXIuaW5mby0+c2V0X2lvdGltaW5nKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBJTyBzdXBwb3J0IHJlZ2lzdGVyZWRcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKCFjcHVfY3VyLmluZm8tPm5lZWRfcGxsKQorCQkJY3B1X2N1ci5sb2NrX3BsbCA9IDE7CisKKwkJczNjX2NwdWZyZXFfdXBkYXRlX2xvY3RraW1lKCk7CisKKwkJczNjX2NwdWZyZXFfZnJlcV9taW4oJmNwdV9jdXIubWF4LCAmY3B1X2N1ci5ib2FyZC0+bWF4LAorCQkJCSAgICAgJmNwdV9jdXIuaW5mby0+bWF4KTsKKworCQlpZiAoY3B1X2N1ci5pbmZvLT5jYWxjX2ZyZXF0YWJsZSkKKwkJCXMzY19jcHVmcmVxX2J1aWxkX2ZyZXEoKTsKKworCQlyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmczNjMjR4eF9kcml2ZXIpOworCX0KKworIG91dDoKKwlyZXR1cm4gcmV0OworfQorCitsYXRlX2luaXRjYWxsKHMzY19jcHVmcmVxX2luaXRjYWxsKTsKKworLyoqCisgKiBzM2NfcGxsdGFiX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgQ1BVIFBMTCB0YWJsZS4KKyAqIEBwbGxzOiBUaGUgbGlzdCBvZiBQTEwgZW50cmllcy4KKyAqIEBwbGxzX25vOiBUaGUgc2l6ZSBvZiB0aGUgUExMIGVudHJpZXMgQHBsbHMuCisgKgorICogUmVnaXN0ZXIgdGhlIGdpdmVuIHNldCBvZiBQTExzIHdpdGggdGhlIHN5c3RlbS4KKyAqLworaW50IF9faW5pdCBzM2NfcGxsdGFiX3JlZ2lzdGVyKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcGxscywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcGxsc19ubykKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnZhbHM7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSkgKiAocGxsc19ubyArIDEpOworCisJdmFscyA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHZhbHMpIHsKKwkJbWVtY3B5KHZhbHMsIHBsbHMsIHNpemUpOworCQlwbGxfcmVnID0gdmFsczsKKworCQkvKiB3cml0ZSBhIHRlcm1pbmF0aW5nIGVudHJ5LCB3ZSBkb24ndCBzdG9yZSBpdCBpbiB0aGUKKwkJICogdGFibGUgdGhhdCBpcyBzdG9yZWQgaW4gdGhlIGtlcm5lbCAqLworCQl2YWxzICs9IHBsbHNfbm87CisJCXZhbHMtPmZyZXF1ZW5jeSA9IENQVUZSRVFfVEFCTEVfRU5EOworCisJCXByaW50ayhLRVJOX0lORk8gImNwdWZyZXE6ICVkIFBMTCBlbnRyaWVzXG4iLCBwbGxzX25vKTsKKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBubyBtZW1vcnkgZm9yIFBMTCB0YWJsZXNcbiIpOworCisJcmV0dXJuIHZhbHMgPyAwIDogLUVOT01FTTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYwppbmRleCAxOTMyYjdlLi41NDQ3ZTYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCkBAIC04MSw3ICs4MSw3IEBACiAJCS5tYXBfaW8JCT0gczNjMjQxMF9tYXBfaW8sCiAJCS5pbml0X2Nsb2Nrcwk9IHMzYzI0MTBfaW5pdF9jbG9ja3MsCiAJCS5pbml0X3VhcnRzCT0gczNjMjQxMF9pbml0X3VhcnRzLAotCQkuaW5pdAkJPSBzM2MyNDEwX2luaXQsCisJCS5pbml0CQk9IHMzYzI0MTBhX2luaXQsCiAJCS5uYW1lCQk9IG5hbWVfczNjMjQxMGEKIAl9LAogCXsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jCmluZGV4IDRlYjM3OGMuLmY1MmE5MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvZmIuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CkBAIC0xODAsMjUgKzE4Miw2IEBACiAJfQogfQogCi0vKiBOQU5EIENvbnRyb2xsZXIgKi8KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfbmFuZF9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gUzNDMjRYWF9QQV9OQU5ELAotCQkuZW5kICAgPSBTM0MyNFhYX1BBX05BTkQgKyBTM0MyNFhYX1NaX05BTkQgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9Ci19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfbmFuZCA9IHsKLQkubmFtZQkJICA9ICJzM2MyNDEwLW5hbmQiLAotCS5pZAkJICA9IC0xLAotCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY19uYW5kX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJICA9IHMzY19uYW5kX3Jlc291cmNlLAotfTsKLQotRVhQT1JUX1NZTUJPTChzM2NfZGV2aWNlX25hbmQpOwotCiAvKiBVU0IgRGV2aWNlIChHYWRnZXQpKi8KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfdXNiZ2FkZ2V0X3Jlc291cmNlW10gPSB7CkBAIC0zNDgsNyArMzMxLDcgQEAKIC8qIEhXTU9OICovCiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9od21vbiA9IHsKLQkubmFtZQkJPSAiczNjMjR4eC1od21vbiIsCisJLm5hbWUJCT0gInMzYy1od21vbiIsCiAJLmlkCQk9IC0xLAogCS5kZXYucGFyZW50CT0gJnMzY19kZXZpY2VfYWRjLmRldiwKIH07CkBAIC00NzMsNCArNDU2LDUyIEBACiAKIEVYUE9SVF9TWU1CT0woczNjX2RldmljZV9jYW1pZik7CiAKKy8qIEFDOTcgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfYWM5N19yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDMjQ0MF9QQV9BQzk3LAorCQkuZW5kICAgPSBTM0MyNDQwX1BBX0FDOTcgKyBTM0MyNDQwX1NaX0FDOTcgLTEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfUzNDMjQ0eF9BQzk3LAorCQkuZW5kICAgPSBJUlFfUzNDMjQ0eF9BQzk3LAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUgID0gIlBDTSBvdXQiLAorCQkuc3RhcnQgPSBETUFDSF9QQ01fT1VULAorCQkuZW5kICAgPSBETUFDSF9QQ01fT1VULAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVszXSA9IHsKKwkJLm5hbWUgID0gIlBDTSBpbiIsCisJCS5zdGFydCA9IERNQUNIX1BDTV9JTiwKKwkJLmVuZCAgID0gRE1BQ0hfUENNX0lOLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVs0XSA9IHsKKwkJLm5hbWUgID0gIk1pYyBpbiIsCisJCS5zdGFydCA9IERNQUNIX01JQ19JTiwKKwkJLmVuZCAgID0gRE1BQ0hfTUlDX0lOLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBzM2NfZGV2aWNlX2FjOTdfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2FjOTcgPSB7CisJLm5hbWUJCSAgPSAiczNjLWFjOTciLAorCS5pZAkJICA9IC0xLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY19hYzk3X3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzY19hYzk3X3Jlc291cmNlLAorCS5kZXYgICAgICAgICAgICAgID0geworCQkuZG1hX21hc2sgPSAmczNjX2RldmljZV9hYzk3X2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTAorCX0KK307CisKK0VYUE9SVF9TWU1CT0woczNjX2RldmljZV9hYzk3KTsKKwogI2VuZGlmIC8vIENPTkZJR19DUFVfUzMyNDQwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLWNvcmUuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZWIwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLWNvcmUuaApAQCAtMCwwICsxLDI4MiBAQAorLyogYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwNywyMDA5IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MgQ1BVIGZyZXF1ZW5jeSBzY2FsaW5nIHN1cHBvcnQgLSBjb3JlIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEuaD4KKworc3RydWN0IHNlcV9maWxlOworCisjZGVmaW5lIE1BWF9CQU5LUyAoOCkKKyNkZWZpbmUgUzNDMjQxMl9NQVhfSU8JKDgpCisKKy8qKgorICogc3RydWN0IHMzYzI0MTBfaW9iYW5rX3RpbWluZyAtIElPIGJhbmsgdGltaW5ncyBmb3IgUzNDMjQxMCBzdHlsZSB0aW1pbmdzCisgKiBAYmFua2NvbjogVGhlIGNhY2hlZCB2ZXJzaW9uIG9mIHNldHRpbmdzIGluIHRoaXMgc3RydWN0dXJlLgorICogQHRhY3A6CisgKiBAdGFjczogVGltZSBmcm9tIGFkZHJlc3MgdmFsaWQgdG8gbkNTIGFzc2VydGVkLgorICogQHRjb3M6IFRpbWUgZnJvbSBuQ1MgYXNzZXJ0ZWQgdG8gbk9FIG9yIG5XRSBhc3NlcnRlZC4KKyAqIEB0YWNjOiBUaW1lIHRoYXQgbk9FIG9yIG5XRSBpcyBhc3NlcnRlZC4KKyAqIEB0Y29oOiBUaW1lIG5DUyBpcyBoZWxkIGFmdGVyIG5PRSBvciBuV0UgYXJlIHJlbGVhc2VkLgorICogQHRjYWg6IFRpbWUgYWRkcmVzcyBpcyBoZWxkIGZvciBhZnRlcgorICogQG53YWl0X2VuOiBXaGV0aGVyIG5XQUlUIGlzIGVuYWJsZWQgZm9yIHRoaXMgYmFuay4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBJTyB0aW1pbmdzIGZvciBhIFMzQzI0MTAgc3R5bGUgSU8gYmFuaworICogdXNlZCBieSB0aGUgQ1BVIGZyZXF1ZW5jeSBzdXBwb3J0IGlmIGl0IG5lZWRzIHRvIGNoYW5nZSB0aGUgc2V0dGluZ3MKKyAqIG9mIHRoZSBJTy4KKyAqLworc3RydWN0IHMzYzI0MTBfaW9iYW5rX3RpbWluZyB7CisJdW5zaWduZWQgbG9uZwliYW5rY29uOworCXVuc2lnbmVkIGludAl0YWNwOworCXVuc2lnbmVkIGludAl0YWNzOworCXVuc2lnbmVkIGludAl0Y29zOworCXVuc2lnbmVkIGludAl0YWNjOworCXVuc2lnbmVkIGludAl0Y29oOwkJLyogbkNTIGhvbGQgYWZyZXIgbk9FL25XRSAqLworCXVuc2lnbmVkIGludAl0Y2FoOwkJLyogQWRkcmVzcyBob2xkIGFmdGVyIG5DUyAqLworCXVuc2lnbmVkIGNoYXIJbndhaXRfZW47CS8qIG5XYWl0IGVuYWJsZWQgZm9yIGJhbmsuICovCit9OworCisvKioKKyAqIHN0cnVjdCBzM2MyNDEyX2lvYmFua190aW1pbmcgLSBpbyB0aW1pbmdzIGZvciBQTDA5MiAoUzNDMjQxMikgc3R5bGUgSU8KKyAqIEBpZGN5OiBUaGUgaWRsZSBjeWNsZSB0aW1lIGJldHdlZW4gdHJhbnNhY3Rpb25zLgorICogQHdzdHJkOiBuQ1MgcmVsZWFzZSB0byBlbmQgb2YgcmVhZCBjeWNsZS4KKyAqIEB3c3R3cjogbkNTIHJlbGVhc2UgdG8gZW5kIG9mIHdyaXRlIGN5Y2xlLgorICogQHdzdG9lbjogbkNTIGFzc2VydGlvbiB0byBuT0UgYXNzZXJ0aW9uIHRpbWUuCisgKiBAd3N0d2VuOiBuQ1MgYXNzZXJ0aW9uIHRvIG5XRSBhc3NlcnRpb24gdGltZS4KKyAqIEB3c3RicmQ6IEJ1cnN0IHJlYWR5IGRlbGF5LgorICogQHNtYmlkY3lyOiBSZWdpc3RlciBjYWNoZSBmb3Igc21iaWRjeXIgdmFsdWUuCisgKiBAc21id3N0cmQ6IFJlZ2lzdGVyIGNhY2hlIGZvciBzbWJ3c3RyZCB2YWx1ZS4KKyAqIEBzbWJ3c3R3cjogUmVnaXN0ZXIgY2FjaGUgZm9yIHNtYndzdHdyIHZhbHVlLgorICogQHNtYndzdG9lbjogUmVnaXN0ZXIgY2FjaGUgZm9yIHNtYndzdG9lbiB2YWx1ZS4KKyAqIEBzbWJ3c3R3ZW46IFJlZ2lzdGVyIGNhY2hlIGZvciBzbWJ3c3R3ZW4gdmFsdWUuCisgKiBAc21id3N0YnJkOiBSZWdpc3RlciBjYWNoZSBmb3Igc21id3N0YnJkIHZhbHVlLgorICoKKyAqIFRpbWluZyBpbmZvcm1hdGlvbiBmb3IgYSBJTyBiYW5rIG9uIGFuIFMzQzI0MTIgb3Igc2ltaWxhciBzeXN0ZW0gd2hpY2gKKyAqIHVzZXMgYSBQTDA5MyBibG9jay4KKyAqLworc3RydWN0IHMzYzI0MTJfaW9iYW5rX3RpbWluZyB7CisJdW5zaWduZWQgaW50CWlkY3k7CisJdW5zaWduZWQgaW50CXdzdHJkOworCXVuc2lnbmVkIGludAl3c3R3cjsKKwl1bnNpZ25lZCBpbnQJd3N0b2VuOworCXVuc2lnbmVkIGludAl3c3R3ZW47CisJdW5zaWduZWQgaW50CXdzdGJyZDsKKworCS8qIHJlZ2lzdGVyIGNhY2hlICovCisJdW5zaWduZWQgY2hhcglzbWJpZGN5cjsKKwl1bnNpZ25lZCBjaGFyCXNtYndzdHJkOworCXVuc2lnbmVkIGNoYXIJc21id3N0d3I7CisJdW5zaWduZWQgY2hhcglzbWJ3c3RvZW47CisJdW5zaWduZWQgY2hhcglzbWJ3c3R3ZW47CisJdW5zaWduZWQgY2hhcglzbWJ3c3RicmQ7Cit9OworCit1bmlvbiBzM2NfaW9iYW5rIHsKKwlzdHJ1Y3QgczNjMjQxMF9pb2JhbmtfdGltaW5nCSppb18yNDEwOworCXN0cnVjdCBzM2MyNDEyX2lvYmFua190aW1pbmcJKmlvXzI0MTI7Cit9OworCisvKioKKyAqIHN0cnVjdCBzM2NfaW90aW1pbmdzIC0gQ2hpcCBJTyB0aW1pbmdzIGhvbGRlcgorICogQGJhbms6IFRoZSB0aW1pbmdzIGZvciBlYWNoIElPIGJhbmsuCisgKi8KK3N0cnVjdCBzM2NfaW90aW1pbmdzIHsKKwl1bmlvbiBzM2NfaW9iYW5rCWJhbmtbTUFYX0JBTktTXTsKK307CisKKy8qKgorICogc3RydWN0IHMzY19wbGx0YWIgLSBQTEwgdGFibGUgaW5mb3JtYXRpb24uCisgKiBAdmFsczogTGlzdCBvZiBQTEwgdmFsdWVzLgorICogQHNpemU6IFNpemUgb2YgdGhlIFBMTCB0YWJsZSBAdmFscy4KKyAqLworc3RydWN0IHMzY19wbGx0YWIgeworCXN0cnVjdCBzM2NfcGxsdmFsCSp2YWxzOworCWludAkJCSBzaXplOworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnIC0gY3VycmVudCBjcHUgZnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24KKyAqIEBmcmVxOiBUaGUgY3VycmVudCBzZXR0aW5ncyBmb3IgdGhlIGNvcmUgY2xvY2tzLgorICogQG1heDogTWF4aXVtIHNldHRpbmdzLCBkZXJpdmVkIGZyb20gY29yZSwgYm9hcmQgYW5kIHVzZXIgc2V0dGluZ3MuCisgKiBAcGxsOiBUaGUgUExMIHRhYmxlIGVudHJ5IGZvciB0aGUgY3VycmVudCBQTEwgc2V0dGluZ3MuCisgKiBAZGl2czogVGhlIGRpdmlzb3Igc2V0dGluZ3MgZm9yIHRoZSBjb3JlIGNsb2Nrcy4KKyAqIEBpbmZvOiBUaGUgY3VycmVudCBjb3JlIGRyaXZlciBpbmZvcm1hdGlvbi4KKyAqIEBib2FyZDogVGhlIGluZm9ybWF0aW9uIGZvciB0aGUgYm9hcmQgd2UgYXJlIHJ1bm5pbmcgb24uCisgKiBAbG9ja19wbGw6IFNldCBpZiB0aGUgUExMIHNldHRpbmdzIGNhbm5vdCBiZSBjaGFuZ2VkLgorICoKKyAqIFRoaXMgaXMgZm9yIHRoZSBjb3JlIGRyaXZlcnMgdGhhdCBuZWVkIHRvIGtub3cgaW5mb3JtYXRpb24gYWJvdXQKKyAqIHRoZSBjdXJyZW50IHNldHRpbmdzIGFuZCB2YWx1ZXMuIEl0IHNob3VsZCBub3QgYmUgbmVlZGVkIGJ5IGFueQorICogZGV2aWNlIGRyaXZlcnMuCisqLworc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyB7CisJc3RydWN0IHMzY19mcmVxCQlmcmVxOworCXN0cnVjdCBzM2NfZnJlcQkJbWF4OworCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBwbGw7CisJc3RydWN0IHMzY19jbGtkaXZzCWRpdnM7CisJc3RydWN0IHMzY19jcHVmcmVxX2luZm8gKmluZm87CS8qIGZvciBjb3JlLCBub3QgZHJpdmVycyAqLworCXN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCAqYm9hcmQ7CisKKwl1bnNpZ25lZCBpbnQJbG9ja19wbGw6MTsKK307CisKKy8qKgorICogc3RydWN0IHMzY19jcHVmcmVxX2luZm8gLSBJbmZvcm1hdGlvbiBmb3IgdGhlIENQVSBmcmVxdWVuY3kgZHJpdmVyLgorICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoaXMgaW1wbGVtZW50YXRpb24uCisgKiBAbWF4OiBUaGUgbWF4aW11bSBmcmVxdWVuY2llcyBmb3IgdGhlIHN5c3RlbS4KKyAqIEBsYXRlbmN5OiBUcmFuc2l0aW9uIGxhdGVuY3kgdG8gZ2l2ZSB0byBjcHVmcmVxLgorICogQGxvY2t0aW1lX206IFRoZSBsb2NrLXRpbWUgaW4gdVMgZm9yIHRoZSBNUExMLgorICogQGxvY2t0aW1lX3U6IFRoZSBsb2NrLXRpbWUgaW4gdVMgZm9yIHRoZSBVUExMLgorICogQGxvY3R0aW1lX2JpdHM6IFRoZSBudW1iZXIgb2YgYml0cyBlYWNoIExPQ0tUSU1FIGZpZWxkLgorICogQG5lZWRfcGxsOiBTZXQgaWYgdGhpcyBkcml2ZXIgbmVlZHMgdG8gY2hhbmdlIHRoZSBQTEwgdmFsdWVzIHRvIGFjaGVpdmUKKyAqCWFueSBmcmVxdWVuY3kgY2hhbmdlcy4gVGhpcyBpcyByZWFsbHkgb25seSBuZWVkIGJ5IGRldmljZXMgbGlrZSB0aGUKKyAqCVMzQzI0MTAgd2hlcmUgdGhlcmUgaXMgbm8gb3IgbGltaXRlZCBkaXZpZGVyIGJldHdlZW4gdGhlIFBMTCBhbmQgdGhlCisgKglBUk1DTEsuCisgKiBAcmVzdW1lX2Nsb2NrczogVXBkYXRlIHRoZSBjbG9ja3Mgb24gcmVzdW1lLgorICogQGdldF9pb3RpbWluZzogR2V0IHRoZSBjdXJyZW50IElPIHRpbWluZyBkYXRhLCBtYWlubHkgZm9yIHVzZSBhdCBzdGFydC4KKyAqIEBzZXRfaW90aW1pbmc6IFVwZGF0ZSB0aGUgSU8gdGltaW5ncyBmcm9tIHRoZSBjYWNoZWQgY29waWVzIGNhbGN1bGF0ZWQKKyAqCWZyb20gdGhlIEBjYWxjX2lvdGltaW5nIGVudHJ5IHdoZW4gY2hhbmdpbmcgdGhlIGZyZXF1ZW5jeS4KKyAqIEBjYWxjX2lvdGltaW5nOiBDYWxjdWxhdGUgYW5kIHVwZGF0ZSB0aGUgY2FjaGVkIGNvcGllcyBvZiB0aGUgSU8gdGltaW5ncworICoJZnJvbSB0aGUgbmV3bHkgY2FsY3VsYXRlZCBmcmVxdWVuY2llcy4KKyAqIEBjYWxjX2ZyZXF0YWJsZTogQ2FsY3VsYXRlIChmaWxsIGluKSB0aGUgZ2l2ZW4gZnJlcXVlbmN5IHRhYmxlIGZyb20gdGhlCisgKgljdXJyZW50IGZyZXF1ZW5jeSBjb25maWd1cmF0aW9uLiBJZiB0aGUgdGFibGUgcGFzc2VkIGluIGlzIE5VTEwsCisgKgl0aGVuIHRoZSByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBiZSBmaWxsZWQgZm9yIGFsbG9jYXRpb24KKyAqCW9mIHRoZSB0YWJsZS4KKyAqIEBzZXRfcmVmcmVzaDogU2V0IHRoZSBtZW1vcnkgcmVmcmVzaCBjb25maWd1cmF0aW9uLgorICogQHNldF9mdmNvOiBTZXQgdGhlIFBMTCBmcmVxdWVuY2llcy4KKyAqIEBzZXRfZGl2czogVXBkYXRlIHRoZSBjbG9jayBkaXZpc29ycy4KKyAqIEBjYWxjX2RpdnM6IENhbGN1bGF0ZSB0aGUgY2xvY2sgZGl2aXNvcnMuCisgKi8KK3N0cnVjdCBzM2NfY3B1ZnJlcV9pbmZvIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwlzdHJ1Y3QgczNjX2ZyZXEJCW1heDsKKworCXVuc2lnbmVkIGludAkJbGF0ZW5jeTsKKworCXVuc2lnbmVkIGludAkJbG9ja3RpbWVfbTsKKwl1bnNpZ25lZCBpbnQJCWxvY2t0aW1lX3U7CisJdW5zaWduZWQgY2hhcgkJbG9ja3RpbWVfYml0czsKKworCXVuc2lnbmVkIGludAkJbmVlZF9wbGw6MTsKKworCS8qIGRyaXZlciByb3V0aW5lcyAqLworCisJdm9pZAkJKCpyZXN1bWVfY2xvY2tzKSh2b2lkKTsKKworCWludAkJKCpnZXRfaW90aW1pbmcpKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQkJc3RydWN0IHMzY19pb3RpbWluZ3MgKnRpbWluZ3MpOworCisJdm9pZAkJKCpzZXRfaW90aW1pbmcpKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQkJc3RydWN0IHMzY19pb3RpbWluZ3MgKnRpbWluZ3MpOworCisJaW50CQkoKmNhbGNfaW90aW1pbmcpKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQkJIHN0cnVjdCBzM2NfaW90aW1pbmdzICp0aW1pbmdzKTsKKworCWludAkJKCpjYWxjX2ZyZXF0YWJsZSkoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJCQkgIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqdCwKKwkJCQkJICBzaXplX3QgdGFibGVfc2l6ZSk7CisKKwl2b2lkCQkoKmRlYnVnX2lvX3Nob3cpKHN0cnVjdCBzZXFfZmlsZSAqc2VxLAorCQkJCQkgc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJCQkgdW5pb24gczNjX2lvYmFuayAqaW9iKTsKKworCXZvaWQJCSgqc2V0X3JlZnJlc2gpKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CisJdm9pZAkJKCpzZXRfZnZjbykoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKTsKKwl2b2lkCQkoKnNldF9kaXZzKShzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpOworCWludAkJKCpjYWxjX2RpdnMpKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7Cit9OworCitleHRlcm4gaW50IHMzY19jcHVmcmVxX3JlZ2lzdGVyKHN0cnVjdCBzM2NfY3B1ZnJlcV9pbmZvICppbmZvKTsKKworZXh0ZXJuIGludCBzM2NfcGxsdGFiX3JlZ2lzdGVyKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcGxscywgdW5zaWduZWQgaW50IHBsbHNfbm8pOworCisvKiBleHBvcnRzIGFuZCB1dGlsaXRpZXMgZm9yIGRlYnVnZnMgKi8KK2V4dGVybiBzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpzM2NfY3B1ZnJlcV9nZXRjb25maWcodm9pZCk7CitleHRlcm4gc3RydWN0IHMzY19pb3RpbWluZ3MgKnMzY19jcHVmcmVxX2dldGlvdGltaW5ncyh2b2lkKTsKKworZXh0ZXJuIHZvaWQgczNjMjQxMF9pb3RpbWluZ19kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqc2VxLAorCQkJCSAgICAgc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJCSAgICAgdW5pb24gczNjX2lvYmFuayAqaW9iKTsKKworZXh0ZXJuIHZvaWQgczNjMjQxMl9pb3RpbWluZ19kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqc2VxLAorCQkJCSAgICAgc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJCSAgICAgdW5pb24gczNjX2lvYmFuayAqaW9iKTsKKworI2lmZGVmIENPTkZJR19DUFVfRlJFUV9TM0MyNFhYX0RFQlVHRlMKKyNkZWZpbmUgczNjX2NwdWZyZXFfZGVidWdmc19jYWxsKHgpIHgKKyNlbHNlCisjZGVmaW5lIHMzY19jcHVmcmVxX2RlYnVnZnNfY2FsbCh4KSBOVUxMCisjZW5kaWYKKworLyogVXNlZnVsIHV0aWxpdHkgZnVuY3Rpb25zLiAqLworCitleHRlcm4gc3RydWN0IGNsayAqczNjX2NwdWZyZXFfY2xrX2dldChzdHJ1Y3QgZGV2aWNlICosIGNvbnN0IGNoYXIgKik7CisKKy8qIFMzQzI0MTAgYW5kIGNvbXBhdGlibGUgZXhwb3J0ZWQgZnVuY3Rpb25zICovCisKK2V4dGVybiB2b2lkIHMzYzI0MTBfY3B1ZnJlcV9zZXRyZWZyZXNoKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CisKK2V4dGVybiBpbnQgczNjMjQxMF9pb3RpbWluZ19jYWxjKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQkgc3RydWN0IHMzY19pb3RpbWluZ3MgKmlvdCk7CisKK2V4dGVybiBpbnQgczNjMjQxMF9pb3RpbWluZ19nZXQoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJCXN0cnVjdCBzM2NfaW90aW1pbmdzICp0aW1pbmdzKTsKKworZXh0ZXJuIHZvaWQgczNjMjQxMF9pb3RpbWluZ19zZXQoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJCSBzdHJ1Y3QgczNjX2lvdGltaW5ncyAqaW90KTsKKworZXh0ZXJuIHZvaWQgczNjMjQxMF9zZXRfZnZjbyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpOworCisvKiBTM0MyNDEyIGNvbXBhdGlibGUgcm91dGluZXMgKi8KKworZXh0ZXJuIGludCBzM2MyNDEyX2lvdGltaW5nX2dldChzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkJc3RydWN0IHMzY19pb3RpbWluZ3MgKnRpbWluZ3MpOworCitleHRlcm4gaW50IHMzYzI0MTJfaW90aW1pbmdfZ2V0KHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQlzdHJ1Y3QgczNjX2lvdGltaW5ncyAqdGltaW5ncyk7CisKK2V4dGVybiBpbnQgczNjMjQxMl9pb3RpbWluZ19jYWxjKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQkgc3RydWN0IHMzY19pb3RpbWluZ3MgKmlvdCk7CisKK2V4dGVybiB2b2lkIHMzYzI0MTJfaW90aW1pbmdfc2V0KHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQkgc3RydWN0IHMzY19pb3RpbWluZ3MgKmlvdCk7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfUzNDMjRYWF9ERUJVRworI2RlZmluZSBzM2NfZnJlcV9kYmcoeC4uLikgcHJpbnRrKEtFUk5fSU5GTyB4KQorI2Vsc2UKKyNkZWZpbmUgczNjX2ZyZXFfZGJnKHguLi4pIGRvIHsgaWYgKDApIHByaW50ayh4KTsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX0ZSRVFfUzNDMjRYWF9ERUJVRyAqLworCisjaWZkZWYgQ09ORklHX0NQVV9GUkVRX1MzQzI0WFhfSU9ERUJVRworI2RlZmluZSBzM2NfZnJlcV9pb2RiZyh4Li4uKSBwcmludGsoS0VSTl9JTkZPIHgpCisjZWxzZQorI2RlZmluZSBzM2NfZnJlcV9pb2RiZyh4Li4uKSBkbyB7IGlmICgwKSBwcmludGsoeCk7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogQ09ORklHX0NQVV9GUkVRX1MzQzI0WFhfSU9ERUJVRyAqLworCitzdGF0aWMgaW5saW5lIGludCBzM2NfY3B1ZnJlcV9hZGRmcmVxKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqdGFibGUsCisJCQkJICAgICAgaW50IGluZGV4LCBzaXplX3QgdGFibGVfc2l6ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgZnJlcSkKK3sKKwlpZiAoaW5kZXggPCAwKQorCQlyZXR1cm4gaW5kZXg7CisKKwlpZiAodGFibGUpIHsKKwkJaWYgKGluZGV4ID49IHRhYmxlX3NpemUpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlzM2NfZnJlcV9kYmcoIiVzOiB7ICVkID0gJXUga0h6IH1cbiIsCisJCQkgICAgIF9fZnVuY19fLCBpbmRleCwgZnJlcSk7CisKKwkJdGFibGVbaW5kZXhdLmluZGV4ID0gaW5kZXg7CisJCXRhYmxlW2luZGV4XS5mcmVxdWVuY3kgPSBmcmVxOworCX0KKworCXJldHVybiBpbmRleCArIDE7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2ZpcS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9maXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTIxYjgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9maXEuaApAQCAtMCwwICsxLDEzIEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2ZpcS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIEhlYWRlciBmaWxlIGZvciBTM0MyNFhYIENQVSBGSVEgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCitleHRlcm4gaW50IHMzYzI0eHhfc2V0X2ZpcSh1bnNpZ25lZCBpbnQgaXJxLCBib29sIG9uKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmgKaW5kZXggYTlhYzllMi4uYjZkZWVlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpZmRlZiBDT05GSUdfQ1BVX1MzQzI0MTAKIAogZXh0ZXJuICBpbnQgczNjMjQxMF9pbml0KHZvaWQpOworZXh0ZXJuICBpbnQgczNjMjQxMGFfaW5pdCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgczNjMjQxMF9tYXBfaW8odm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYwppbmRleCA5NTg3Mzc3Li5kMDJmNWYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCkBAIC00OTMsNiArNDkzLDM4IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0ZJUQorLyoqCisgKiBzM2MyNHh4X3NldF9maXEgLSBzZXQgdGhlIEZJUSByb3V0aW5nCisgKiBAaXJxOiBJUlEgbnVtYmVyIHRvIHJvdXRlIHRvIEZJUSBvbiBwcm9jZXNzb3IuCisgKiBAb246IFdoZXRoZXIgdG8gcm91dGUgQGlycSB0byB0aGUgRklRLCBvciB0byByZW1vdmUgdGhlIEZJUSByb3V0aW5nLgorICoKKyAqIENoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIElSUSB0byBGSVEgcm91dGluZyBkZXBlbmRpbmcgb24gQGlycSBhbmQgQG9uLiBJZgorICogQG9uIGlzIHRydWUsIHRoZSBAaXJxIGlzIGNoZWNrZWQgdG8gc2VlIGlmIGl0IGNhbiBiZSByb3V0ZWQgYW5kIHRoZQorICogaW50ZXJydXB0IGNvbnRyb2xsZXIgdXBkYXRlZCB0byByb3V0ZSB0aGUgSVJRLiBJZiBAb24gaXMgZmFsc2UsIHRoZSBGSVEKKyAqIHJvdXRpbmcgaXMgY2xlYXJlZCwgcmVnYXJkbGVzcyBvZiB3aGljaCBAaXJxIGlzIHNwZWNpZmllZC4KKyAqLworaW50IHMzYzI0eHhfc2V0X2ZpcSh1bnNpZ25lZCBpbnQgaXJxLCBib29sIG9uKQoreworCXUzMiBpbnRtb2Q7CisJdW5zaWduZWQgb2ZmczsKKworCWlmIChvbikgeworCQlvZmZzID0gaXJxIC0gRklRX1NUQVJUOworCQlpZiAob2ZmcyA+IDMxKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaW50bW9kID0gMSA8PCBvZmZzOworCX0gZWxzZSB7CisJCWludG1vZCA9IDA7CisJfQorCisJX19yYXdfd3JpdGVsKGludG1vZCwgUzNDMjQxMF9JTlRNT0QpOworCXJldHVybiAwOworfQorI2VuZGlmCisKKwogLyogczNjMjR4eF9pbml0X2lycQogICoKICAqIEluaXRpYWxpc2UgUzNDMjQxMCBJUlEgc3lzdGVtCkBAIC01MDUsNiArNTM3LDEwIEBACiAJaW50IGlycW5vOwogCWludCBpOwogCisjaWZkZWYgQ09ORklHX0ZJUQorCWluaXRfRklRKCk7CisjZW5kaWYKKwogCWlycWRiZigiczNjMjQxMF9pbml0X2lycTogY2xlYXJpbmcgaW50ZXJydXB0IHN0YXR1cyBmbGFnc1xuIik7CiAKIAkvKiBmaXJzdCwgY2xlYXIgYWxsIGludGVycnVwdHMgcGVuZGluZy4uLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3B3bS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3B3bS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmE2ZDRkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20uYworKysgL2Rldi9udWxsCkBAIC0xLDQwOSArMCwwIEBACi0vKiBhcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQmVuIERvb2tzCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+LCA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KLSAqCi0gKiBTM0MyNFhYIFBXTSBkZXZpY2UgY29yZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3B3bS5oPgotCi0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2RldnMuaD4KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtdGltZXIuaD4KLQotc3RydWN0IHB3bV9kZXZpY2UgewotCXN0cnVjdCBsaXN0X2hlYWQJIGxpc3Q7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKLQotCXN0cnVjdCBjbGsJCSpjbGtfZGl2OwotCXN0cnVjdCBjbGsJCSpjbGs7Ci0JY29uc3QgY2hhcgkJKmxhYmVsOwotCi0JdW5zaWduZWQgaW50CQkgcGVyaW9kX25zOwotCXVuc2lnbmVkIGludAkJIGR1dHlfbnM7Ci0KLQl1bnNpZ25lZCBjaGFyCQkgdGNvbl9iYXNlOwotCXVuc2lnbmVkIGNoYXIJCSBydW5uaW5nOwotCXVuc2lnbmVkIGNoYXIJCSB1c2VfY291bnQ7Ci0JdW5zaWduZWQgY2hhcgkJIHB3bV9pZDsKLX07Ci0KLSNkZWZpbmUgcHdtX2RiZyhfcHdtLCBtc2cuLi4pIGRldl9kYmcoJihfcHdtKS0+cGRldi0+ZGV2LCBtc2cpCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfc2NhbGVyWzJdOwotCi0vKiBTdGFuZGFyZCBzZXR1cCBmb3IgYSB0aW1lciBibG9jay4gKi8KLQotI2RlZmluZSBUSU1FUl9SRVNPVVJDRV9TSVpFICgxKQotCi0jZGVmaW5lIFRJTUVSX1JFU09VUkNFKF90bXIsIF9pcnEpCQkJXAotCShzdHJ1Y3QgcmVzb3VyY2UgW1RJTUVSX1JFU09VUkNFX1NJWkVdKSB7CVwKLQkJWzBdID0gewkJCQkJXAotCQkJLnN0YXJ0CT0gX2lycSwJCQlcCi0JCQkuZW5kCT0gX2lycSwJCQlcCi0JCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQlcCi0JCX0JCQkJCVwKLQl9Ci0KLSNkZWZpbmUgREVGSU5FX1MzQ19USU1FUihfdG1yX25vLCBfaXJxKQkJCVwKLQkubmFtZQkJPSAiczNjMjR4eC1wd20iLAkJXAotCS5pZAkJPSBfdG1yX25vLAkJCVwKLQkubnVtX3Jlc291cmNlcwk9IFRJTUVSX1JFU09VUkNFX1NJWkUsCQlcCi0JLnJlc291cmNlCT0gVElNRVJfUkVTT1VSQ0UoX3Rtcl9ubywgX2lycSksCVwKLQotLyogc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGFuIHN0YXRpYyBtYXBwaW5nIGZvciB0aGUgdGltZXIsIHdlIGRvIG5vdAotICogYm90aGVyIHNldHRpbmcgYW55IElPIHJlc291cmNlIGZvciB0aGUgYmFzZS4KLSAqLwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdGltZXJbXSA9IHsKLQlbMF0gPSB7IERFRklORV9TM0NfVElNRVIoMCwgSVJRX1RJTUVSMCkgfSwKLQlbMV0gPSB7IERFRklORV9TM0NfVElNRVIoMSwgSVJRX1RJTUVSMSkgfSwKLQlbMl0gPSB7IERFRklORV9TM0NfVElNRVIoMiwgSVJRX1RJTUVSMikgfSwKLQlbM10gPSB7IERFRklORV9TM0NfVElNRVIoMywgSVJRX1RJTUVSMykgfSwKLQlbNF0gPSB7IERFRklORV9TM0NfVElNRVIoNCwgSVJRX1RJTUVSNCkgfSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHB3bV9pc190ZGl2KHN0cnVjdCBwd21fZGV2aWNlICpwd20pCi17Ci0JcmV0dXJuIGNsa19nZXRfcGFyZW50KHB3bS0+Y2xrKSA9PSBwd20tPmNsa19kaXY7Ci19Ci0KLXN0YXRpYyBERUZJTkVfTVVURVgocHdtX2xvY2spOwotc3RhdGljIExJU1RfSEVBRChwd21fbGlzdCk7Ci0KLXN0cnVjdCBwd21fZGV2aWNlICpwd21fcmVxdWVzdChpbnQgcHdtX2lkLCBjb25zdCBjaGFyICpsYWJlbCkKLXsKLQlzdHJ1Y3QgcHdtX2RldmljZSAqcHdtOwotCWludCBmb3VuZCA9IDA7Ci0KLQltdXRleF9sb2NrKCZwd21fbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB3bSwgJnB3bV9saXN0LCBsaXN0KSB7Ci0JCWlmIChwd20tPnB3bV9pZCA9PSBwd21faWQpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGZvdW5kKSB7Ci0JCWlmIChwd20tPnVzZV9jb3VudCA9PSAwKSB7Ci0JCQlwd20tPnVzZV9jb3VudCA9IDE7Ci0JCQlwd20tPmxhYmVsID0gbGFiZWw7Ci0JCX0gZWxzZQotCQkJcHdtID0gRVJSX1BUUigtRUJVU1kpOwotCX0gZWxzZQotCQlwd20gPSBFUlJfUFRSKC1FTk9FTlQpOwotCi0JbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7Ci0JcmV0dXJuIHB3bTsKLX0KLQotRVhQT1JUX1NZTUJPTChwd21fcmVxdWVzdCk7Ci0KLQotdm9pZCBwd21fZnJlZShzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQotewotCW11dGV4X2xvY2soJnB3bV9sb2NrKTsKLQotCWlmIChwd20tPnVzZV9jb3VudCkgewotCQlwd20tPnVzZV9jb3VudC0tOwotCQlwd20tPmxhYmVsID0gTlVMTDsKLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSICJQV00lZCBkZXZpY2UgYWxyZWFkeSBmcmVlZFxuIiwgcHdtLT5wd21faWQpOwotCi0JbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7Ci19Ci0KLUVYUE9SVF9TWU1CT0wocHdtX2ZyZWUpOwotCi0jZGVmaW5lIHB3bV90Y29uX3N0YXJ0KHB3bSkgKDEgPDwgKHB3bS0+dGNvbl9iYXNlICsgMCkpCi0jZGVmaW5lIHB3bV90Y29uX2ludmVydChwd20pICgxIDw8IChwd20tPnRjb25fYmFzZSArIDIpKQotI2RlZmluZSBwd21fdGNvbl9hdXRvcmVsb2FkKHB3bSkgKDEgPDwgKHB3bS0+dGNvbl9iYXNlICsgMykpCi0jZGVmaW5lIHB3bV90Y29uX21hbnVsdXBkYXRlKHB3bSkgKDEgPDwgKHB3bS0+dGNvbl9iYXNlICsgMSkpCi0KLWludCBwd21fZW5hYmxlKHN0cnVjdCBwd21fZGV2aWNlICpwd20pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHRjb247Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQl0Y29uID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ09OKTsKLQl0Y29uIHw9IHB3bV90Y29uX3N0YXJ0KHB3bSk7Ci0JX19yYXdfd3JpdGVsKHRjb24sIFMzQzI0MTBfVENPTik7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlwd20tPnJ1bm5pbmcgPSAxOwotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKHB3bV9lbmFibGUpOwotCi12b2lkIHB3bV9kaXNhYmxlKHN0cnVjdCBwd21fZGV2aWNlICpwd20pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHRjb247Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQl0Y29uID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ09OKTsKLQl0Y29uICY9IH5wd21fdGNvbl9zdGFydChwd20pOwotCV9fcmF3X3dyaXRlbCh0Y29uLCBTM0MyNDEwX1RDT04pOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcHdtLT5ydW5uaW5nID0gMDsKLX0KLQotRVhQT1JUX1NZTUJPTChwd21fZGlzYWJsZSk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHB3bV9jYWxjX3RpbihzdHJ1Y3QgcHdtX2RldmljZSAqcHdtLCB1bnNpZ25lZCBsb25nIGZyZXEpCi17Ci0JdW5zaWduZWQgbG9uZyB0aW5fcGFyZW50X3JhdGU7Ci0JdW5zaWduZWQgaW50IGRpdjsKLQotCXRpbl9wYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGtfZ2V0X3BhcmVudChwd20tPmNsa19kaXYpKTsKLQlwd21fZGJnKHB3bSwgInRpbiBwYXJlbnQgYXQgJWx1XG4iLCB0aW5fcGFyZW50X3JhdGUpOwotCi0JZm9yIChkaXYgPSAyOyBkaXYgPD0gMTY7IGRpdiAqPSAyKSB7Ci0JCWlmICgodGluX3BhcmVudF9yYXRlIC8gKGRpdiA8PCAxNikpIDwgZnJlcSkKLQkJCXJldHVybiB0aW5fcGFyZW50X3JhdGUgLyBkaXY7Ci0JfQotCi0JcmV0dXJuIHRpbl9wYXJlbnRfcmF0ZSAvIDE2OwotfQotCi0jZGVmaW5lIE5TX0lOX0haICgxMDAwMDAwMDAwVUwpCi0KLWludCBwd21fY29uZmlnKHN0cnVjdCBwd21fZGV2aWNlICpwd20sIGludCBkdXR5X25zLCBpbnQgcGVyaW9kX25zKQotewotCXVuc2lnbmVkIGxvbmcgdGluX3JhdGU7Ci0JdW5zaWduZWQgbG9uZyB0aW5fbnM7Ci0JdW5zaWduZWQgbG9uZyBwZXJpb2Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHRjb247Ci0JdW5zaWduZWQgbG9uZyB0Y250OwotCWxvbmcgdGNtcDsKLQotCS8qIFdlIGN1cnJlbnRseSBhdm9pZCB1c2luZyA2NGJpdCBhcml0aG1ldGljIGJ5IHVzaW5nIHRoZQotCSAqIGZhY3QgdGhhdCBhbnl0aGluZyBmYXN0ZXIgdGhhbiAxSHogaXMgZWFzaWx5IHJlcHJlc2VudGFibGUKLQkgKiBieSAzMmJpdHMuICovCi0KLQlpZiAocGVyaW9kX25zID4gTlNfSU5fSFogfHwgZHV0eV9ucyA+IE5TX0lOX0haKQotCQlyZXR1cm4gLUVSQU5HRTsKLQotCWlmIChkdXR5X25zID4gcGVyaW9kX25zKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChwZXJpb2RfbnMgPT0gcHdtLT5wZXJpb2RfbnMgJiYKLQkgICAgZHV0eV9ucyA9PSBwd20tPmR1dHlfbnMpCi0JCXJldHVybiAwOwotCi0JLyogVGhlIFRDTVAgYW5kIFRDTlQgY2FuIGJlIHJlYWQgd2l0aG91dCBhIGxvY2ssIHRoZXkncmUgbm90Ci0JICogc2hhcmVkIGJldHdlZW4gdGhlIHRpbWVycy4gKi8KLQotCXRjbXAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDTVBCKHB3bS0+cHdtX2lkKSk7Ci0JdGNudCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENOVEIocHdtLT5wd21faWQpKTsKLQotCXBlcmlvZCA9IE5TX0lOX0haIC8gcGVyaW9kX25zOwotCi0JcHdtX2RiZyhwd20sICJkdXR5X25zPSVkLCBwZXJpb2RfbnM9JWQgKCVsdSlcbiIsCi0JCWR1dHlfbnMsIHBlcmlvZF9ucywgcGVyaW9kKTsKLQotCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgY2hhbmdpbmcgdGhlIGNsb2NrIHJhdGUgb2YgdGhlIFBXTSAqLwotCi0JaWYgKHB3bS0+cGVyaW9kX25zICE9IHBlcmlvZF9ucykgewotCQlpZiAocHdtX2lzX3RkaXYocHdtKSkgewotCQkJdGluX3JhdGUgPSBwd21fY2FsY190aW4ocHdtLCBwZXJpb2QpOwotCQkJY2xrX3NldF9yYXRlKHB3bS0+Y2xrX2RpdiwgdGluX3JhdGUpOwotCQl9IGVsc2UKLQkJCXRpbl9yYXRlID0gY2xrX2dldF9yYXRlKHB3bS0+Y2xrKTsKLQotCQlwd20tPnBlcmlvZF9ucyA9IHBlcmlvZF9uczsKLQotCQlwd21fZGJnKHB3bSwgInRpbl9yYXRlPSVsdVxuIiwgdGluX3JhdGUpOwotCi0JCXRpbl9ucyA9IE5TX0lOX0haIC8gdGluX3JhdGU7Ci0JCXRjbnQgPSBwZXJpb2RfbnMgLyB0aW5fbnM7Ci0JfSBlbHNlCi0JCXRpbl9ucyA9IE5TX0lOX0haIC8gY2xrX2dldF9yYXRlKHB3bS0+Y2xrKTsKLQotCS8qIE5vdGUsIGNvdW50ZXJzIGNvdW50IGRvd24gKi8KLQotCXRjbXAgPSBkdXR5X25zIC8gdGluX25zOwotCXRjbXAgPSB0Y250IC0gdGNtcDsKLQkvKiB0aGUgcHdtIGh3IG9ubHkgY2hlY2tzIHRoZSBjb21wYXJlIHJlZ2lzdGVyIGFmdGVyIGEgZGVjcmVtZW50LAotCSAgIHNvIHRoZSBwaW4gbmV2ZXIgdG9nZ2xlcyBpZiB0Y21wID0gdGNudCAqLwotCWlmICh0Y21wID09IHRjbnQpCi0JCXRjbXAtLTsKLQotCXB3bV9kYmcocHdtLCAidGluX25zPSVsdSwgdGNtcD0lbGQvJWx1XG4iLCB0aW5fbnMsIHRjbXAsIHRjbnQpOwotCi0JaWYgKHRjbXAgPCAwKQotCQl0Y21wID0gMDsKLQotCS8qIFVwZGF0ZSB0aGUgUFdNIHJlZ2lzdGVyIGJsb2NrLiAqLwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JX19yYXdfd3JpdGVsKHRjbXAsIFMzQzI0MTBfVENNUEIocHdtLT5wd21faWQpKTsKLQlfX3Jhd193cml0ZWwodGNudCwgUzNDMjQxMF9UQ05UQihwd20tPnB3bV9pZCkpOwotCi0JdGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENPTik7Ci0JdGNvbiB8PSBwd21fdGNvbl9tYW51bHVwZGF0ZShwd20pOwotCXRjb24gfD0gcHdtX3Rjb25fYXV0b3JlbG9hZChwd20pOwotCV9fcmF3X3dyaXRlbCh0Y29uLCBTM0MyNDEwX1RDT04pOwotCi0JdGNvbiAmPSB+cHdtX3Rjb25fbWFudWx1cGRhdGUocHdtKTsKLQlfX3Jhd193cml0ZWwodGNvbiwgUzNDMjQxMF9UQ09OKTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKHB3bV9jb25maWcpOwotCi1zdGF0aWMgaW50IHB3bV9yZWdpc3RlcihzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQotewotCXB3bS0+ZHV0eV9ucyA9IC0xOwotCXB3bS0+cGVyaW9kX25zID0gLTE7Ci0KLQltdXRleF9sb2NrKCZwd21fbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmcHdtLT5saXN0LCAmcHdtX2xpc3QpOwotCW11dGV4X3VubG9jaygmcHdtX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjX3B3bV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Ci0Jc3RydWN0IHB3bV9kZXZpY2UgKnB3bTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgdGNvbjsKLQl1bnNpZ25lZCBpbnQgaWQgPSBwZGV2LT5pZDsKLQlpbnQgcmV0OwotCi0JaWYgKGlkID09IDQpIHsKLQkJZGV2X2VycihkZXYsICJUSU1FUjQgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQotCXB3bSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwd21fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHB3bSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHB3bV9kZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlwd20tPnBkZXYgPSBwZGV2OwotCXB3bS0+cHdtX2lkID0gaWQ7Ci0KLQkvKiBjYWxjdWxhdGUgYmFzZSBvZiBjb250cm9sIGJpdHMgaW4gVENPTiAqLwotCXB3bS0+dGNvbl9iYXNlID0gaWQgPT0gMCA/IDAgOiAoaWQgKiA0KSArIDQ7Ci0KLQlwd20tPmNsayA9IGNsa19nZXQoZGV2LCAicHdtLXRpbiIpOwotCWlmIChJU19FUlIocHdtLT5jbGspKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBwd20gdGluIGNsa1xuIik7Ci0JCXJldCA9IFBUUl9FUlIocHdtLT5jbGspOwotCQlnb3RvIGVycl9hbGxvYzsKLQl9Ci0KLQlwd20tPmNsa19kaXYgPSBjbGtfZ2V0KGRldiwgInB3bS10ZGl2Iik7Ci0JaWYgKElTX0VSUihwd20tPmNsa19kaXYpKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBwd20gdGRpdiBjbGtcbiIpOwotCQlyZXQgPSBQVFJfRVJSKHB3bS0+Y2xrX2Rpdik7Ci0JCWdvdG8gZXJyX2Nsa190aW47Ci0JfQotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JdGNvbiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENPTik7Ci0JdGNvbiB8PSBwd21fdGNvbl9pbnZlcnQocHdtKTsKLQlfX3Jhd193cml0ZWwodGNvbiwgUzNDMjQxMF9UQ09OKTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCi0JcmV0ID0gcHdtX3JlZ2lzdGVyKHB3bSk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBwd21cbiIpOwotCQlnb3RvIGVycl9jbGtfdGRpdjsKLQl9Ci0KLQlwd21fZGJnKHB3bSwgImNvbmZpZyBiaXRzICUwMnhcbiIsCi0JCShfX3Jhd19yZWFkbChTM0MyNDEwX1RDT04pID4+IHB3bS0+dGNvbl9iYXNlKSAmIDB4MGYpOwotCi0JZGV2X2luZm8oZGV2LCAidGluIGF0ICVsdSwgdGRpdiBhdCAlbHUsIHRpbj0lc2NsaywgYmFzZSAlZFxuIiwKLQkJIGNsa19nZXRfcmF0ZShwd20tPmNsayksCi0JCSBjbGtfZ2V0X3JhdGUocHdtLT5jbGtfZGl2KSwKLQkJIHB3bV9pc190ZGl2KHB3bSkgPyAiZGl2IiA6ICJleHQiLCBwd20tPnRjb25fYmFzZSk7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwd20pOwotCXJldHVybiAwOwotCi0gZXJyX2Nsa190ZGl2OgotCWNsa19wdXQocHdtLT5jbGtfZGl2KTsKLQotIGVycl9jbGtfdGluOgotCWNsa19wdXQocHdtLT5jbGspOwotCi0gZXJyX2FsbG9jOgotCWtmcmVlKHB3bSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBzM2NfcHdtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBwd21fZGV2aWNlICpwd20gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCWNsa19wdXQocHdtLT5jbGtfZGl2KTsKLQljbGtfcHV0KHB3bS0+Y2xrKTsKLQlrZnJlZShwd20pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY19wd21fZHJpdmVyID0gewotCS5kcml2ZXIJCT0gewotCQkubmFtZQk9ICJzM2MyNHh4LXB3bSIsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlCQk9IHMzY19wd21fcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzM2NfcHdtX3JlbW92ZSksCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBwd21faW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQljbGtfc2NhbGVyWzBdID0gY2xrX2dldChOVUxMLCAicHdtLXNjYWxlcjAiKTsKLQljbGtfc2NhbGVyWzFdID0gY2xrX2dldChOVUxMLCAicHdtLXNjYWxlcjEiKTsKLQotCWlmIChJU19FUlIoY2xrX3NjYWxlclswXSkgfHwgSVNfRVJSKGNsa19zY2FsZXJbMV0pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBnZXQgc2NhbGVyIGNsb2Nrc1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY19wd21fZHJpdmVyKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWRkIHB3bSBkcml2ZXJcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWFyY2hfaW5pdGNhbGwocHdtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTAtY3B1ZnJlcS11dGlscy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTAtY3B1ZnJlcS11dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZWE4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQxMC1jcHVmcmVxLXV0aWxzLmMKQEAgLTAsMCArMSw2NCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTAtY3B1ZnJlcS11dGlscy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIENQVSBGcmVxdWVuY3kgc2NhbGluZyAtIHV0aWxzIGZvciBTM0MyNDEwL1MzQzI0NDAvUzNDMjQ0MgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS1jb3JlLmg+CisKKy8qKgorICogczNjMjQxMF9jcHVmcmVxX3NldHJlZnJlc2ggLSBzZXQgU0RSQU0gcmVmcmVzaCB2YWx1ZQorICogQGNmZzogVGhlIGZyZXF1ZW5jeSBjb25maWd1cmF0aW9uCisgKgorICogU2V0IHRoZSBTRFJBTSByZWZyZXNoIHZhbHVlIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBjb25maWd1cmVkCisgKiBmcmVxdWVuY3kuCisgKi8KK3ZvaWQgczNjMjQxMF9jcHVmcmVxX3NldHJlZnJlc2goc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCXN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCAqYm9hcmQgPSBjZmctPmJvYXJkOworCXVuc2lnbmVkIGxvbmcgcmVmcmVzaDsKKwl1bnNpZ25lZCBsb25nIHJlZnZhbDsKKworCS8qIFJlZHVjZSBib3RoIHRoZSByZWZyZXNoIHRpbWUgKGluIG5zKSBhbmQgdGhlIGZyZXF1ZW5jeSAoaW4gTUh6KQorCSAqIGRvd24gdG8gZW5zdXJlIHRoYXQgd2UgZG8gbm90IG92ZXJmbG93IDMyIGJpdCBudW1iZXJzLgorCSAqCisJICogVGhpcyBzaG91bGQgd29yayBmb3IgSENMSyB1cCB0byAxMzNNSHogYW5kIHJlZnJlc2ggcGVyaW9kIHVwCisJICogdG8gMzB1c2VjLgorCSAqLworCisJcmVmcmVzaCA9IChjZmctPmZyZXEuaGNsayAvIDEwMCkgKiAoYm9hcmQtPnJlZnJlc2ggLyAxMCk7CisJcmVmcmVzaCA9IERJVl9ST1VORF9VUChyZWZyZXNoLCAoMTAwMCAqIDEwMDApKTsgLyogYXBwbHkgc2NhbGUgICovCisJcmVmcmVzaCA9ICgxIDw8IDExKSArIDEgLSByZWZyZXNoOworCisJczNjX2ZyZXFfZGJnKCIlczogcmVmcmVzaCB2YWx1ZSAlbHVcbiIsIF9fZnVuY19fLCByZWZyZXNoKTsKKworCXJlZnZhbCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfUkVGUkVTSCk7CisJcmVmdmFsICY9IH4oKDEgPDwgMTIpIC0gMSk7CisJcmVmdmFsIHw9IHJlZnJlc2g7CisJX19yYXdfd3JpdGVsKHJlZnZhbCwgUzNDMjQxMF9SRUZSRVNIKTsKK30KKworLyoqCisgKiBzM2MyNDEwX3NldF9mdmNvIC0gc2V0IHRoZSBQTEwgdmFsdWUKKyAqIEBjZmc6IFRoZSBmcmVxdWVuY3kgY29uZmlndXJhdGlvbgorICovCit2b2lkIHMzYzI0MTBfc2V0X2Z2Y28oc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCV9fcmF3X3dyaXRlbChjZmctPnBsbC5pbmRleCwgUzNDMjQxMF9NUExMQ09OKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDEwLWlvdGltaW5nLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQxMC1pb3RpbWluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYTNhMTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQxMC1pb3RpbWluZy5jCkBAIC0wLDAgKzEsNDc3IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQxMC1pb3RpbWluZy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDgsMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjRYWCBDUFUgRnJlcXVlbmN5IHNjYWxpbmcgLSBJTyB0aW1pbmcgZm9yIFMzQzI0MTAvUzNDMjQ0MC9TM0MyNDQyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLWNvcmUuaD4KKworI2RlZmluZSBwcmludF9ucyh4KSAoKHgpIC8gMTApLCAoKHgpICUgMTApCisKKy8qKgorICogczNjMjQxMF9wcmludF90aW1pbmcgLSBwcmludCBiYW5rIHRpbWluZyBkYXRhIGZvciBkZWJ1ZyBwdXJwb3NlcworICogQHBmeDogVGhlIHByZWZpeCB0byBwdXQgb24gdGhlIG91dHB1dAorICogQHRpbWluZ3M6IFRoZSB0aW1pbmcgaW5mb3JhbXRpb24gdG8gcHJpbnQuCisqLworc3RhdGljIHZvaWQgczNjMjQxMF9wcmludF90aW1pbmcoY29uc3QgY2hhciAqcGZ4LAorCQkJCSBzdHJ1Y3QgczNjX2lvdGltaW5ncyAqdGltaW5ncykKK3sKKwlzdHJ1Y3QgczNjMjQxMF9pb2JhbmtfdGltaW5nICpidDsKKwlpbnQgYmFuazsKKworCWZvciAoYmFuayA9IDA7IGJhbmsgPCBNQVhfQkFOS1M7IGJhbmsrKykgeworCQlidCA9IHRpbWluZ3MtPmJhbmtbYmFua10uaW9fMjQxMDsKKwkJaWYgKCFidCkKKwkJCWNvbnRpbnVlOworCisJCXByaW50ayhLRVJOX0RFQlVHICIlcyAlZDogVGFjcz0lZC4lZCwgVGNvcz0lZC4lZCwgVGFjYz0lZC4lZCwgIgorCQkgICAgICAgIlRjb2g9JWQuJWQsIFRjYWg9JWQuJWRcbiIsIHBmeCwgYmFuaywKKwkJICAgICAgIHByaW50X25zKGJ0LT50YWNzKSwKKwkJICAgICAgIHByaW50X25zKGJ0LT50Y29zKSwKKwkJICAgICAgIHByaW50X25zKGJ0LT50YWNjKSwKKwkJICAgICAgIHByaW50X25zKGJ0LT50Y29oKSwKKwkJICAgICAgIHByaW50X25zKGJ0LT50Y2FoKSk7CisJfQorfQorCisvKioKKyAqIGJhbmtfcmVnIC0gY29udmVydCBiYW5rIG51bWJlciB0byBwb2ludGVyIHRvIHRoZSBjb250cm9sIHJlZ2lzdGVyLgorICogQGJhbms6IFRoZSBJTyBiYW5rIG51bWJlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmJhbmtfcmVnKHVuc2lnbmVkIGludCBiYW5rKQoreworCXJldHVybiBTM0MyNDEwX0JBTktDT04wICsgKGJhbmsgPDwgMik7Cit9CisKKy8qKgorICogYmFua19pc19pbyAtIHRlc3Qgd2hldGhlciBiYW5rIGlzIHVzZWQgZm9yIElPCisgKiBAYmFua2NvbjogVGhlIGJhbmsgY29udHJvbCByZWdpc3Rlci4KKyAqCisgKiBUaGlzIGlzIGEgc2ltcGxpc3RpYyB0ZXN0IHRvIHNlZSBpZiBhbnkgQkFOS0NPTlt4XSBpcyBub3QgYW4gSU8KKyAqIGJhbmsuIEl0IGN1cnJlbnRseSBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCB3aGV0aGVyIEJXU0NPTiBoYXMKKyAqIGFuIGlsbGVnYWwgd2lkdGgtc2V0dGluZyBpbiBpdCwgb3IgaWYgdGhlIHBpbiBjb25uZWN0ZWQgdG8gbkNTW3hdCisgKiBpcyBhY3R1YWxseSBiZWluZyBoYW5kbGVkIGFzIGEgY2hpcC1zZWxlY3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJhbmtfaXNfaW8odW5zaWduZWQgbG9uZyBiYW5rY29uKQoreworCXJldHVybiAhKGJhbmtjb24gJiBTM0MyNDEwX0JBTktDT05fU0RSQU0pOworfQorCisvKioKKyAqIHRvX2RpdiAtIGNvbnZlcnQgY3ljbGUgdGltZSB0byBkaXZpc29yCisgKiBAY3ljOiBUaGUgY3ljbGUgdGltZSwgaW4gMTB0aHMgb2YgbmFub3NlY29uZHMuCisgKiBAaGNsa190bnM6IFRoZSBjeWNsZSB0aW1lIGZvciBIQ0xLLCBpbiAxMHRocyBvZiBuYW5vc2Vjb25kcy4KKyAqCisgKiBDb252ZXJ0IHRoZSBnaXZlbiBjeWNsZSB0aW1lIGludG8gdGhlIGRpdmlzb3IgdG8gdXNlIHRvIG9idGFpbiBpdCBmcm9tCisgKiBIQ0xLLgorKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRvX2Rpdih1bnNpZ25lZCBpbnQgY3ljLCB1bnNpZ25lZCBpbnQgaGNsa190bnMpCit7CisJaWYgKGN5YyA9PSAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBESVZfUk9VTkRfVVAoY3ljLCBoY2xrX3Rucyk7Cit9CisKKy8qKgorICogY2FsY18wMTI0IC0gY2FsY3VsYXRlIGRpdmlzb3IgY29udHJvbCBmb3IgZGl2aXNvcnMgdGhhdCBkbyAvMCwgLzEuIC8yIGFuZCAvNAorICogQGN5YzogVGhlIGN5Y2xlIHRpbWUsIGluIDEwdGhzIG9mIG5hbm9zZWNvbmRzLgorICogQGhjbGtfdG5zOiBUaGUgY3ljbGUgdGltZSBmb3IgSENMSywgaW4gMTB0aHMgb2YgbmFub3NlY29uZHMuCisgKiBAdjogUG9pbnRlciB0byByZWdpc3RlciB0byBhbHRlci4KKyAqIEBzaGlmdDogVGhlIHNoaWZ0IHRvIGdldCB0byB0aGUgY29udHJvbCBiaXRzLgorICoKKyAqIENhbGN1bGF0ZSB0aGUgZGl2aXNvciwgYW5kIHR1cm4gaXQgaW50byB0aGUgY29ycmVjdCBjb250cm9sIGJpdHMgdG8KKyAqIHNldCBpbiB0aGUgcmVzdWx0LCBAdi4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBjYWxjXzAxMjQodW5zaWduZWQgaW50IGN5YywgdW5zaWduZWQgbG9uZyBoY2xrX3RucywKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnYsIGludCBzaGlmdCkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2ID0gdG9fZGl2KGN5YywgaGNsa190bnMpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJczNjX2ZyZXFfaW9kYmcoIiVzOiBjeWM9JWQsIGhjbGs9JWx1LCBzaGlmdD0lZCA9PiBkaXYgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgY3ljLCBoY2xrX3Rucywgc2hpZnQsIGRpdik7CisKKwlzd2l0Y2ggKGRpdikgeworCWNhc2UgMDoKKwkJdmFsID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl2YWwgPSAxOworCQlicmVhazsKKwljYXNlIDI6CisJCXZhbCA9IDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwljYXNlIDQ6CisJCXZhbCA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwkqdiB8PSB2YWwgPDwgc2hpZnQ7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjYWxjX3RhY3AodW5zaWduZWQgaW50IGN5YywgdW5zaWduZWQgbG9uZyBoY2xrLCB1bnNpZ25lZCBsb25nICp2KQoreworCS8qIEN1cnJlbnRseSBubyBzdXBwb3J0IGZvciBUYWNwIGNhbGN1bGF0aW9ucy4gKi8KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjYWxjX3RhY2MgLSBjYWxjdWxhdGUgZGl2aXNvciBjb250cm9sIGZvciB0YWNjLgorICogQGN5YzogVGhlIGN5Y2xlIHRpbWUsIGluIDEwdGhzIG9mIG5hbm9zZWNvbmRzLgorICogQG53YWl0X2VuOiBJUyBuV0FJVCBlbmFibGVkIGZvciB0aGlzIGJhbmsuCisgKiBAaGNsa190bnM6IFRoZSBjeWNsZSB0aW1lIGZvciBIQ0xLLCBpbiAxMHRocyBvZiBuYW5vc2Vjb25kcy4KKyAqIEB2OiBQb2ludGVyIHRvIHJlZ2lzdGVyIHRvIGFsdGVyLgorICoKKyAqIENhbGN1bGF0ZSB0aGUgZGl2aXNvciBjb250cm9sIGZvciB0QUNDLCB0YWtpbmcgaW50byBhY2NvdW50IHdoZXRoZXIKKyAqIHRoZSBiYW5rIGhhcyBuV0FJVCBlbmFibGVkLiBUaGUgcmVzdWx0IGlzIHVzZWQgdG8gbW9kaWZ5IHRoZSB2YWx1ZQorICogcG9pbnRlZCB0byBieSBAdi4KKyovCitzdGF0aWMgaW50IGNhbGNfdGFjYyh1bnNpZ25lZCBpbnQgY3ljLCBpbnQgbndhaXRfZW4sCisJCSAgICAgdW5zaWduZWQgbG9uZyBoY2xrX3RucywgdW5zaWduZWQgbG9uZyAqdikKK3sKKwl1bnNpZ25lZCBpbnQgZGl2ID0gdG9fZGl2KGN5YywgaGNsa190bnMpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJczNjX2ZyZXFfaW9kYmcoIiVzOiBjeWM9JXUsIG53YWl0PSVkLCBoY2xrPSVsdSA9PiBkaXY9JXVcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgY3ljLCBud2FpdF9lbiwgaGNsa190bnMsIGRpdik7CisKKwkvKiBpZiBuV2FpdCBlbmFibGVkIG9uIGFuIGJhbmssIFRhY2MgbXVzdCBiZSBhdC1sZWFzdCA0IGN5Y2xlcy4gKi8KKwlpZiAobndhaXRfZW4gJiYgZGl2IDwgNCkKKwkJZGl2ID0gNDsKKworCXN3aXRjaCAoZGl2KSB7CisJY2FzZSAwOgorCQl2YWwgPSAwOworCQlicmVhazsKKworCWNhc2UgMToKKwljYXNlIDI6CisJY2FzZSAzOgorCWNhc2UgNDoKKwkJdmFsID0gZGl2IC0gMTsKKwkJYnJlYWs7CisKKwljYXNlIDU6CisJY2FzZSA2OgorCQl2YWwgPSA0OworCQlicmVhazsKKworCWNhc2UgNzoKKwljYXNlIDg6CisJCXZhbCA9IDU7CisJCWJyZWFrOworCisJY2FzZSA5OgorCWNhc2UgMTA6CisJCXZhbCA9IDY7CisJCWJyZWFrOworCisJY2FzZSAxMToKKwljYXNlIDEyOgorCWNhc2UgMTM6CisJY2FzZSAxNDoKKwkJdmFsID0gNzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCisJKnYgfD0gdmFsIDw8IDg7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogczNjMjQxMF9jYWxjX2JhbmsgLSBjYWxjdWxhdGUgYmFuayB0aW1pbmcgaW5mcm9tYXRpb24KKyAqIEBjZmc6IFRoZSBjb25maWd1cmF0aW9uIHdlIG5lZWQgdG8gY2FsY3VsYXRlIGZvci4KKyAqIEBidDogVGhlIGJhbmsgdGltaW5nIGluZm9ybWF0aW9uLgorICoKKyAqIEdpdmVuIHRoZSBjeWNsZSB0aW1pbmUgZm9yIGEgYmFuayBAYnQsIGNhbGN1bGF0ZSB0aGUgbmV3IEJBTktDT04KKyAqIHNldHRpbmcgZm9yIHRoZSBAY2ZnIHRpbWluZy4gVGhpcyB1cGRhdGVzIHRoZSB0aW1pbmcgaW5mb3JtYXRpb24KKyAqIHJlYWR5IGZvciB0aGUgY3B1IGZyZXF1ZW5jeSBjaGFuZ2UuCisgKi8KK3N0YXRpYyBpbnQgczNjMjQxMF9jYWxjX2Jhbmsoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJICAgICBzdHJ1Y3QgczNjMjQxMF9pb2JhbmtfdGltaW5nICpidCkKK3sKKwl1bnNpZ25lZCBsb25nIGhjbGsgPSBjZmctPmZyZXEuaGNsa190bnM7CisJdW5zaWduZWQgbG9uZyByZXM7CisJaW50IHJldDsKKworCXJlcyAgPSBidC0+YmFua2NvbjsKKwlyZXMgJj0gKFMzQzI0MTBfQkFOS0NPTl9TRFJBTSB8IFMzQzI0MTBfQkFOS0NPTl9QTUMxNik7CisKKwkvKiB0YWNwOiAyLDMsNCw1ICovCisJLyogdGNhaDogMCwxLDIsNCAqLworCS8qIHRjb2g6IDAsMSwyLDQgKi8KKwkvKiB0YWNjOiAxLDIsMyw0LDYsNywxMCwxNCAoPjQgZm9yIG53YWl0KSAqLworCS8qIHRjb3M6IDAsMSwyLDQgKi8KKwkvKiB0YWNzOiAwLDEsMiw0ICovCisKKwlyZXQgID0gY2FsY18wMTI0KGJ0LT50YWNzLCBoY2xrLCAmcmVzLCBTM0MyNDEwX0JBTktDT05fVGFjc19TSElGVCk7CisJcmV0IHw9IGNhbGNfMDEyNChidC0+dGNvcywgaGNsaywgJnJlcywgUzNDMjQxMF9CQU5LQ09OX1Rjb3NfU0hJRlQpOworCXJldCB8PSBjYWxjXzAxMjQoYnQtPnRjYWgsIGhjbGssICZyZXMsIFMzQzI0MTBfQkFOS0NPTl9UY2FoX1NISUZUKTsKKwlyZXQgfD0gY2FsY18wMTI0KGJ0LT50Y29oLCBoY2xrLCAmcmVzLCBTM0MyNDEwX0JBTktDT05fVGNvaF9TSElGVCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCB8PSBjYWxjX3RhY3AoYnQtPnRhY3AsIGhjbGssICZyZXMpOworCXJldCB8PSBjYWxjX3RhY2MoYnQtPnRhY2MsIGJ0LT5ud2FpdF9lbiwgaGNsaywgJnJlcyk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ0LT5iYW5rY29uID0gcmVzOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHRhY2NfdGFiW10gPSB7CisJWzBdCT0gMSwKKwlbMV0JPSAyLAorCVsyXQk9IDMsCisJWzNdCT0gNCwKKwlbNF0JPSA2LAorCVs1XQk9IDksCisJWzZdCT0gMTAsCisJWzddCT0gMTQsCit9OworCisvKioKKyAqIGdldF90YWNjIC0gdHVybiB0QUNDIHZhbHVlIGludG8gY3ljbGUgdGltZQorICogQGhjbGtfdG5zOiBUaGUgY3ljbGUgdGltZSBmb3IgSENMSywgaW4gMTB0aHMgb2YgbmFub3NlY29uZHMuCisgKiBAdmFsOiBUaGUgYmFuayB0aW1pbmcgcmVnaXN0ZXIgdmFsdWUsIHNoaWZlZCBkb3duLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF90YWNjKHVuc2lnbmVkIGxvbmcgaGNsa190bnMsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXZhbCAmPSA3OworCXJldHVybiBoY2xrX3RucyAqIHRhY2NfdGFiW3ZhbF07Cit9CisKKy8qKgorICogZ2V0XzAxMjQgLSB0dXJuIDAvMS8yLzQgZGl2aWRlciBpbnRvIGN5Y2xlIHRpbWUKKyAqIEBoY2xrX3RuczogVGhlIGN5Y2xlIHRpbWUgZm9yIEhDTEssIGluIDEwdGhzIG9mIG5hbm9zZWNvbmRzLgorICogQHZhbDogVGhlIGJhbmsgdGltaW5nIHJlZ2lzdGVyIHZhbHVlLCBzaGlmZWQgZG93bi4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfMDEyNCh1bnNpZ25lZCBsb25nIGhjbGtfdG5zLAorCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl2YWwgJj0gMzsKKwlyZXR1cm4gaGNsa190bnMgKiAoKHZhbCA9PSAzKSA/IDQgOiB2YWwpOworfQorCisvKioKKyAqIHMzYzI0MTBfaW90aW1pbmdfZ2V0YmFuayAtIHR1cm4gQkFOS0NPTiBpbnRvIGN5Y2xlIHRpbWUgaW5mb3JtYXRpb24KKyAqIEBjZmc6IFRoZSBmcmVxdWVuY3kgY29uZmlndXJhdGlvbgorICogQGJ0OiBUaGUgYmFuayB0aW1pbmcgdG8gZmlsbCBpbiAodXNlcyBjYWNoZWQgQkFOS0NPTikKKyAqCisgKiBHaXZlbiB0aGUgQkFOS0NPTiBzZXR0aW5nIGluIEBidCBhbmQgdGhlIGN1cnJlbnQgZnJlcXVlbmN5IHNldHRpbmdzCisgKiBpbiBAY2ZnLCB1cGRhdGUgdGhlIGN5Y2xlIHRpbWluZyBpbmZvcm1hdGlvbi4KKyAqLwordm9pZCBzM2MyNDEwX2lvdGltaW5nX2dldGJhbmsoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJICAgICAgc3RydWN0IHMzYzI0MTBfaW9iYW5rX3RpbWluZyAqYnQpCit7CisJdW5zaWduZWQgbG9uZyBiYW5rY29uID0gYnQtPmJhbmtjb247CisJdW5zaWduZWQgbG9uZyBoY2xrID0gY2ZnLT5mcmVxLmhjbGtfdG5zOworCisJYnQtPnRjYWggPSBnZXRfMDEyNChoY2xrLCBiYW5rY29uID4+IFMzQzI0MTBfQkFOS0NPTl9UY2FoX1NISUZUKTsKKwlidC0+dGNvaCA9IGdldF8wMTI0KGhjbGssIGJhbmtjb24gPj4gUzNDMjQxMF9CQU5LQ09OX1Rjb2hfU0hJRlQpOworCWJ0LT50Y29zID0gZ2V0XzAxMjQoaGNsaywgYmFua2NvbiA+PiBTM0MyNDEwX0JBTktDT05fVGNvc19TSElGVCk7CisJYnQtPnRhY3MgPSBnZXRfMDEyNChoY2xrLCBiYW5rY29uID4+IFMzQzI0MTBfQkFOS0NPTl9UYWNzX1NISUZUKTsKKwlidC0+dGFjYyA9IGdldF90YWNjKGhjbGssIGJhbmtjb24gPj4gUzNDMjQxMF9CQU5LQ09OX1RhY2NfU0hJRlQpOworfQorCisvKioKKyAqIHMzYzI0MTBfaW90aW1pbmdfZGVidWdmcyAtIGRlYnVnZnMgc2hvdyBpbyBiYW5rIHRpbWluZyBpbmZvcm1hdGlvbgorICogQHNlcTogVGhlIHNlcV9maWxlIHRvIHdyaXRlIG91dHB1dCB0byB1c2luZyBzZXFfcHJpbnRmKCkuCisgKiBAY2ZnOiBUaGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorICogQGlvYjogVGhlIElPIGJhbmsgaW5mb3JtYXRpb24gdG8gZGVjb2RlLgorICovCit2b2lkIHMzYzI0MTBfaW90aW1pbmdfZGVidWdmcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKKwkJCSAgICAgIHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCSAgICAgIHVuaW9uIHMzY19pb2JhbmsgKmlvYikKK3sKKwlzdHJ1Y3QgczNjMjQxMF9pb2JhbmtfdGltaW5nICpidCA9IGlvYi0+aW9fMjQxMDsKKwl1bnNpZ25lZCBsb25nIGJhbmtjb24gPSBidC0+YmFua2NvbjsKKwl1bnNpZ25lZCBsb25nIGhjbGsgPSBjZmctPmZyZXEuaGNsa190bnM7CisJdW5zaWduZWQgaW50IHRhY3M7CisJdW5zaWduZWQgaW50IHRjb3M7CisJdW5zaWduZWQgaW50IHRhY2M7CisJdW5zaWduZWQgaW50IHRjb2g7CisJdW5zaWduZWQgaW50IHRjYWg7CisKKwlzZXFfcHJpbnRmKHNlcSwgIkJBTktDT049MHglMDhseFxuIiwgYmFua2Nvbik7CisKKwl0Y2FoID0gZ2V0XzAxMjQoaGNsaywgYmFua2NvbiA+PiBTM0MyNDEwX0JBTktDT05fVGNhaF9TSElGVCk7CisJdGNvaCA9IGdldF8wMTI0KGhjbGssIGJhbmtjb24gPj4gUzNDMjQxMF9CQU5LQ09OX1Rjb2hfU0hJRlQpOworCXRjb3MgPSBnZXRfMDEyNChoY2xrLCBiYW5rY29uID4+IFMzQzI0MTBfQkFOS0NPTl9UY29zX1NISUZUKTsKKwl0YWNzID0gZ2V0XzAxMjQoaGNsaywgYmFua2NvbiA+PiBTM0MyNDEwX0JBTktDT05fVGFjc19TSElGVCk7CisJdGFjYyA9IGdldF90YWNjKGhjbGssIGJhbmtjb24gPj4gUzNDMjQxMF9CQU5LQ09OX1RhY2NfU0hJRlQpOworCisJc2VxX3ByaW50ZihzZXEsCisJCSAgICJcdFJlYWQ6IFRhY3M9JWQuJWQsIFRjb3M9JWQuJWQsIFRhY2M9JWQuJWQsIFRjb2g9JWQuJWQsIFRjYWg9JWQuJWRcbiIsCisJCSAgIHByaW50X25zKGJ0LT50YWNzKSwKKwkJICAgcHJpbnRfbnMoYnQtPnRjb3MpLAorCQkgICBwcmludF9ucyhidC0+dGFjYyksCisJCSAgIHByaW50X25zKGJ0LT50Y29oKSwKKwkJICAgcHJpbnRfbnMoYnQtPnRjYWgpKTsKKworCXNlcV9wcmludGYoc2VxLAorCQkgICAiXHQgU2V0OiBUYWNzPSVkLiVkLCBUY29zPSVkLiVkLCBUYWNjPSVkLiVkLCBUY29oPSVkLiVkLCBUY2FoPSVkLiVkXG4iLAorCQkgICBwcmludF9ucyh0YWNzKSwKKwkJICAgcHJpbnRfbnModGNvcyksCisJCSAgIHByaW50X25zKHRhY2MpLAorCQkgICBwcmludF9ucyh0Y29oKSwKKwkJICAgcHJpbnRfbnModGNhaCkpOworfQorCisvKioKKyAqIHMzYzI0MTBfaW90aW1pbmdfY2FsYyAtIENhbGN1bGF0ZSBiYW5rIHRpbWluZyBmb3IgZnJlcXVlbmN5IGNoYW5nZS4KKyAqIEBjZmc6IFRoZSBmcmVxdWVuY3kgY29uZmlndXJhdGlvbgorICogQGlvdDogVGhlIElPIHRpbWluZyBpbmZvcm1hdGlvbiB0byBmaWxsIG91dC4KKyAqCisgKiBDYWxjdWxhdGUgdGhlIG5ldyB2YWx1ZXMgZm9yIHRoZSBiYW5rcyBpbiBAaW90IGJhc2VkIG9uIHRoZSBuZXcKKyAqIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBpbiBAY2ZnLiBUaGlzIGlzIHRoZW4gdXNlZCBieSBzM2MyNDEwX2lvdGltaW5nX3NldCgpCisgKiB0byB1cGRhdGUgdGhlIHRpbWluZyB3aGVuIG5lY2Vzc2FyeS4KKyAqLworaW50IHMzYzI0MTBfaW90aW1pbmdfY2FsYyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkgIHN0cnVjdCBzM2NfaW90aW1pbmdzICppb3QpCit7CisJc3RydWN0IHMzYzI0MTBfaW9iYW5rX3RpbWluZyAqYnQ7CisJdW5zaWduZWQgbG9uZyBiYW5rY29uOworCWludCBiYW5rOworCWludCByZXQ7CisKKwlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgTUFYX0JBTktTOyBiYW5rKyspIHsKKwkJYmFua2NvbiA9IF9fcmF3X3JlYWRsKGJhbmtfcmVnKGJhbmspKTsKKwkJYnQgPSBpb3QtPmJhbmtbYmFua10uaW9fMjQxMDsKKworCQlpZiAoIWJ0KQorCQkJY29udGludWU7CisKKwkJYnQtPmJhbmtjb24gPSBiYW5rY29uOworCisJCXJldCA9IHMzYzI0MTBfY2FsY19iYW5rKGNmZywgYnQpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgY2FsY3VsYXRlIGJhbmsgJWQgaW9cbiIsCisJCQkgICAgICAgX19mdW5jX18sIGJhbmspOworCQkJZ290byBlcnI7CisJCX0KKworCQlzM2NfZnJlcV9pb2RiZygiJXM6IGJhbmsgJWQ6IGNvbj0lMDhseFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgYmFuaywgYnQtPmJhbmtjb24pOworCX0KKworCXJldHVybiAwOworIGVycjoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHMzYzI0MTBfaW90aW1pbmdfc2V0IC0gc2V0IHRoZSBJTyB0aW1pbmdzIGZyb20gdGhlIGdpdmVuIHNldHVwLgorICogQGNmZzogVGhlIGZyZXF1ZW5jeSBjb25maWd1cmF0aW9uCisgKiBAaW90OiBUaGUgSU8gdGltaW5nIGluZm9ybWF0aW9uIHRvIHVzZS4KKyAqCisgKiBTZXQgYWxsIHRoZSBjdXJyZW50bHkgdXNlZCBJTyBiYW5rIHRpbWluZyBpbmZvcm1hdGlvbiBnZW5lcmF0ZWQKKyAqIGJ5IHMzYzI0MTBfaW90aW1pbmdfY2FsYygpIG9uY2UgdGhlIGNvcmUgaGFzIHZhbGlkYXRlZCB0aGF0IGFsbAorICogdGhlIG5ldyB2YWx1ZXMgYXJlIHdpdGhpbiBwZXJtaXR0ZWQgYm91bmRzLgorICovCit2b2lkIHMzYzI0MTBfaW90aW1pbmdfc2V0KHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCSAgc3RydWN0IHMzY19pb3RpbWluZ3MgKmlvdCkKK3sKKwlzdHJ1Y3QgczNjMjQxMF9pb2JhbmtfdGltaW5nICpidDsKKwlpbnQgYmFuazsKKworCS8qIHNldCB0aGUgaW8gdGltaW5ncyBmcm9tIHRoZSBzcGVjaWZpZXIgKi8KKworCWZvciAoYmFuayA9IDA7IGJhbmsgPCBNQVhfQkFOS1M7IGJhbmsrKykgeworCQlidCA9IGlvdC0+YmFua1tiYW5rXS5pb18yNDEwOworCQlpZiAoIWJ0KQorCQkJY29udGludWU7CisKKwkJX19yYXdfd3JpdGVsKGJ0LT5iYW5rY29uLCBiYW5rX3JlZyhiYW5rKSk7CisJfQorfQorCisvKioKKyAqIHMzYzI0MTBfaW90aW1pbmdfZ2V0IC0gR2V0IHRoZSB0aW1pbmcgaW5mb3JtYXRpb24gZnJvbSBjdXJyZW50IHJlZ2lzdGVycy4KKyAqIEBjZmc6IFRoZSBmcmVxdWVuY3kgY29uZmlndXJhdGlvbgorICogQHRpbWluZ3M6IFRoZSBJTyB0aW1pbmcgaW5mb3JtYXRpb24gdG8gZmlsbCBvdXQuCisgKgorICogQ2FsY3VsYXRlIHRoZSBAdGltaW5ncyB0aW1pbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgY3VycmVudCBmcmVxdWVuY3kKKyAqIGluZm9ybWF0aW9uIGluIEBjZmcsIGFuZCB0aGUgbmV3IGZyZXF1ZW5jeSBjb25maWd1cgorICogdGhyb3VnaCBhbGwgdGhlIElPIGJhbmtzLCByZWFkaW5nIHRoZSBzdGF0ZSBhbmQgdGhlbiB1cGRhdGluZyBAaW90CisgKiBhcyBuZWNlc3NhcnkuCisgKgorICogVGhpcyBpcyB1c2VkIGF0IHRoZSBtb21lbnQgb24gaW5pdGlhbGlzYXRpb24gdG8gZ2V0IHRoZSBjdXJyZW50CisgKiBjb25maWd1cmF0aW9uIHNvIHRoYXQgYm9hcmRzIGRvIG5vdCBoYXZlIHRvIGNhcnJ5IHRoZWlyIG93biBzZXR1cAorICogaWYgdGhlIHRpbWluZ3MgYXJlIGNvcnJlY3Qgb24gaW5pdGlhbGlzYXRpb24uCisgKi8KKworaW50IHMzYzI0MTBfaW90aW1pbmdfZ2V0KHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCSBzdHJ1Y3QgczNjX2lvdGltaW5ncyAqdGltaW5ncykKK3sKKwlzdHJ1Y3QgczNjMjQxMF9pb2JhbmtfdGltaW5nICpidDsKKwl1bnNpZ25lZCBsb25nIGJhbmtjb247CisJdW5zaWduZWQgbG9uZyBid3Njb247CisJaW50IGJhbms7CisKKwlid3Njb24gPSBfX3Jhd19yZWFkbChTM0MyNDEwX0JXU0NPTik7CisKKwkvKiBsb29rIHRocm91Z2ggYWxsIGJhbmtzIHRvIHNlZSB3aGF0IGlzIGN1cnJlbnRseSBzZXQuICovCisKKwlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgTUFYX0JBTktTOyBiYW5rKyspIHsKKwkJYmFua2NvbiA9IF9fcmF3X3JlYWRsKGJhbmtfcmVnKGJhbmspKTsKKworCQlpZiAoIWJhbmtfaXNfaW8oYmFua2NvbikpCisJCQljb250aW51ZTsKKworCQlzM2NfZnJlcV9pb2RiZygiJXM6IGJhbmsgJWQ6IGNvbiAlMDhseFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgYmFuaywgYmFua2Nvbik7CisKKwkJYnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjMjQxMF9pb2JhbmtfdGltaW5nKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIG1lbW9yeSBmb3IgYmFua1xuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQkvKiBmaW5kIG91dCBpbiBuV2FpdCBpcyBlbmFibGVkIGZvciBiYW5rLiAqLworCisJCWlmIChiYW5rICE9IDApIHsKKwkJCXVuc2lnbmVkIGxvbmcgdG1wICA9IFMzQzI0MTBfQldTQ09OX0dFVChid3Njb24sIGJhbmspOworCQkJaWYgKHRtcCAmIFMzQzI0MTBfQldTQ09OX1dTKQorCQkJCWJ0LT5ud2FpdF9lbiA9IDE7CisJCX0KKworCQl0aW1pbmdzLT5iYW5rW2JhbmtdLmlvXzI0MTAgPSBidDsKKwkJYnQtPmJhbmtjb24gPSBiYW5rY29uOworCisJCXMzYzI0MTBfaW90aW1pbmdfZ2V0YmFuayhjZmcsIGJ0KTsKKwl9CisKKwlzM2MyNDEwX3ByaW50X3RpbWluZygiZ2V0IiwgdGltaW5ncyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQxMi1pb3RpbWluZy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTItaW90aW1pbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDQ1ZTQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDEyLWlvdGltaW5nLmMKQEAgLTAsMCArMSwyODUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDEyLWlvdGltaW5nLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMi9TM0MyNDQzIChQTDA5MyBiYXNlZCkgSU8gdGltaW5nIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA5My5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9yZWdzLXMzYzI0MTItbWVtLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEtY29yZS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKworI2RlZmluZSBwcmludF9ucyh4KSAoKHgpIC8gMTApLCAoKHgpICUgMTApCisKKy8qKgorICogczNjMjQxMl9wcmludF90aW1pbmcgLSBwcmludCB0aW1pbmcgaW5mcm9tYXRpb24gdmlhIHByaW50ay4KKyAqIEBwZng6IFRoZSBwcmVmaXggdG8gcHJpbnQgZWFjaCBsaW5lIHdpdGguCisgKiBAaW90OiBUaGUgSU8gdGltaW5nIGluZm9ybWF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHMzYzI0MTJfcHJpbnRfdGltaW5nKGNvbnN0IGNoYXIgKnBmeCwgc3RydWN0IHMzY19pb3RpbWluZ3MgKmlvdCkKK3sKKwlzdHJ1Y3QgczNjMjQxMl9pb2JhbmtfdGltaW5nICpidDsKKwl1bnNpZ25lZCBpbnQgYmFuazsKKworCWZvciAoYmFuayA9IDA7IGJhbmsgPCBNQVhfQkFOS1M7IGJhbmsrKykgeworCQlidCA9IGlvdC0+YmFua1tiYW5rXS5pb18yNDEyOworCQlpZiAoIWJ0KQorCQkJY29udGludWU7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlZDogaWRjeT0lZC4lZCB3c3RyZD0lZC4lZCB3c3R3cj0lZCwlZCIKKwkJICAgICAgICJ3c3RvZW49JWQuJWQgd3N0d2VuPSVkLiVkIHdzdGJyZD0lZC4lZFxuIiwgcGZ4LCBiYW5rLAorCQkgICAgICAgcHJpbnRfbnMoYnQtPmlkY3kpLAorCQkgICAgICAgcHJpbnRfbnMoYnQtPndzdHJkKSwKKwkJICAgICAgIHByaW50X25zKGJ0LT53c3R3ciksCisJCSAgICAgICBwcmludF9ucyhidC0+d3N0b2VuKSwKKwkJICAgICAgIHByaW50X25zKGJ0LT53c3R3ZW4pLAorCQkgICAgICAgcHJpbnRfbnMoYnQtPndzdGJyZCkpOworCX0KK30KKworLyoqCisgKiB0b19kaXYgLSB0dXJuIGEgY3ljbGUgbGVuZ3RoIGludG8gYSBkaXZpc29yIHNldHRpbmcuCisgKiBAY3ljX3RuczogVGhlIGN5Y2xlIHRpbWUgaW4gMTB0aHMgb2YgbmFub3NlY29uZHMuCisgKiBAY2xrX3RuczogVGhlIGNsb2NrIHBlcmlvZCBpbiAxMHRocyBvZiBuYW5vc2Vjb25kcy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdG9fZGl2KHVuc2lnbmVkIGludCBjeWNfdG5zLCB1bnNpZ25lZCBpbnQgY2xrX3RucykKK3sKKwlyZXR1cm4gY3ljX3RucyA/IERJVl9ST1VORF9VUChjeWNfdG5zLCBjbGtfdG5zKSA6IDA7Cit9CisKKy8qKgorICogY2FsY190aW1pbmcgLSBjYWxjdWxhdGUgdGltaW5nIGRpdmlzb3IgdmFsdWUgYW5kIGNoZWNrIGluIHJhbmdlLgorICogQGh3dG06IFRoZSBoYXJkd2FyZSB0aW1pbmcgaW4gMTB0aHMgb2YgbmFub3NlY29uZHMuCisgKiBAY2xrX3RuczogVGhlIGNsb2NrIHBlcmlvZCBpbiAxMHRocyBvZiBuYW5vc2Vjb25kcy4KKyAqIEBlcnI6IFBvaW50ZXIgdG8gZXJyIHZhcmlhYmxlIHRvIHVwZGF0ZSBpbiBldmVudCBvZiBmYWlsdXJlLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfdGltaW5nKHVuc2lnbmVkIGludCBod3RtLCB1bnNpZ25lZCBpbnQgY2xrX3RucywKKwkJCQl1bnNpZ25lZCBpbnQgKmVycikKK3sKKwl1bnNpZ25lZCBpbnQgcmV0ID0gdG9fZGl2KGh3dG0sIGNsa190bnMpOworCisJaWYgKHJldCA+IDB4ZikKKwkJKmVyciA9IC1FSU5WQUw7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHMzYzI0MTJfY2FsY19iYW5rIC0gY2FsY3VsYXRlIHRoZSBiYW5rIGRpdmlzb3Igc2V0dGluZ3MuCisgKiBAY2ZnOiBUaGUgY3VycmVudCBmcmVxdWVuY3kgY29uZmlndXJhdGlvbi4KKyAqIEBidDogVGhlIGJhbmsgdGltaW5nLgorICovCitzdGF0aWMgaW50IHMzYzI0MTJfY2FsY19iYW5rKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCSAgICAgc3RydWN0IHMzYzI0MTJfaW9iYW5rX3RpbWluZyAqYnQpCit7CisJdW5zaWduZWQgaW50IGhjbGsgPSBjZmctPmZyZXEuaGNsa190bnM7CisJaW50IGVyciA9IDA7CisKKwlidC0+c21iaWRjeXIgPSBjYWxjX3RpbWluZyhidC0+aWRjeSwgaGNsaywgJmVycik7CisJYnQtPnNtYndzdHJkID0gY2FsY190aW1pbmcoYnQtPndzdHJkLCBoY2xrLCAmZXJyKTsKKwlidC0+c21id3N0d3IgPSBjYWxjX3RpbWluZyhidC0+d3N0d3IsIGhjbGssICZlcnIpOworCWJ0LT5zbWJ3c3RvZW4gPSBjYWxjX3RpbWluZyhidC0+d3N0b2VuLCBoY2xrLCAmZXJyKTsKKwlidC0+c21id3N0d2VuID0gY2FsY190aW1pbmcoYnQtPndzdHdlbiwgaGNsaywgJmVycik7CisJYnQtPnNtYndzdGJyZCA9IGNhbGNfdGltaW5nKGJ0LT53c3RicmQsIGhjbGssICZlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBzM2MyNDEyX2lvdGltaW5nX2RlYnVnZnMgLSBkZWJ1Z2ZzIHNob3cgaW8gYmFuayB0aW1pbmcgaW5mb3JtYXRpb24KKyAqIEBzZXE6IFRoZSBzZXFfZmlsZSB0byB3cml0ZSBvdXRwdXQgdG8gdXNpbmcgc2VxX3ByaW50ZigpLgorICogQGNmZzogVGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAqIEBpb2I6IFRoZSBJTyBiYW5rIGluZm9ybWF0aW9uIHRvIGRlY29kZS4KKyovCit2b2lkIHMzYzI0MTJfaW90aW1pbmdfZGVidWdmcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKKwkJCSAgICAgIHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCSAgICAgIHVuaW9uIHMzY19pb2JhbmsgKmlvYikKK3sKKwlzdHJ1Y3QgczNjMjQxMl9pb2JhbmtfdGltaW5nICpidCA9IGlvYi0+aW9fMjQxMjsKKworCXNlcV9wcmludGYoc2VxLAorCQkgICAiXHRSZWFkOiBpZGN5PSVkLiVkIHdzdHJkPSVkLiVkIHdzdHdyPSVkLCVkIgorCQkgICAid3N0b2VuPSVkLiVkIHdzdHdlbj0lZC4lZCB3c3RicmQ9JWQuJWRcbiIsCisJCSAgIHByaW50X25zKGJ0LT5pZGN5KSwKKwkJICAgcHJpbnRfbnMoYnQtPndzdHJkKSwKKwkJICAgcHJpbnRfbnMoYnQtPndzdHdyKSwKKwkJICAgcHJpbnRfbnMoYnQtPndzdG9lbiksCisJCSAgIHByaW50X25zKGJ0LT53c3R3ZW4pLAorCQkgICBwcmludF9ucyhidC0+d3N0YnJkKSk7Cit9CisKKy8qKgorICogczNjMjQxMl9pb3RpbWluZ19jYWxjIC0gY2FsY3VsYXRlIGFsbCB0aGUgYmFuayBkaXZpc29yIHNldHRpbmdzLgorICogQGNmZzogVGhlIGN1cnJlbnQgZnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24uCisgKiBAaW90OiBUaGUgYmFuayB0aW1pbmcgaW5mb3JtYXRpb24uCisgKgorICogQ2FsY3VsYXRlIHRoZSB0aW1pbmcgaW5mb3JtYXRpb24gZm9yIGFsbCB0aGUgYmFua3MgdGhhdCBhcmUKKyAqIGNvbmZpZ3VyZWQgYXMgSU8sIHVzaW5nIHMzYzI0MTJfY2FsY19iYW5rKCkuCisgKi8KK2ludCBzM2MyNDEyX2lvdGltaW5nX2NhbGMoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJICBzdHJ1Y3QgczNjX2lvdGltaW5ncyAqaW90KQoreworCXN0cnVjdCBzM2MyNDEyX2lvYmFua190aW1pbmcgKmJ0OworCWludCBiYW5rOworCWludCByZXQ7CisKKwlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgTUFYX0JBTktTOyBiYW5rKyspIHsKKwkJYnQgPSBpb3QtPmJhbmtbYmFua10uaW9fMjQxMjsKKwkJaWYgKCFidCkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IHMzYzI0MTJfY2FsY19iYW5rKGNmZywgYnQpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgY2FsY3VsYXRlIGJhbmsgJWQgaW9cbiIsCisJCQkgICAgICAgX19mdW5jX18sIGJhbmspOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKyBlcnI6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBzM2MyNDEyX2lvdGltaW5nX3NldCAtIHNldCB0aGUgdGltaW5nIGluZm9ybWF0aW9uCisgKiBAY2ZnOiBUaGUgY3VycmVudCBmcmVxdWVuY3kgY29uZmlndXJhdGlvbi4KKyAqIEBpb3Q6IFRoZSBiYW5rIHRpbWluZyBpbmZvcm1hdGlvbi4KKyAqCisgKiBTZXQgdGhlIElPIGJhbmsgaW5mb3JtYXRpb24gZnJvbSB0aGUgZGV0YWlscyBjYWxjdWxhdGVkIGVhcmxpZXIgZnJvbQorICogY2FsbGluZyBzM2MyNDEyX2lvdGltaW5nX2NhbGMoKS4KKyAqLwordm9pZCBzM2MyNDEyX2lvdGltaW5nX3NldChzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkgIHN0cnVjdCBzM2NfaW90aW1pbmdzICppb3QpCit7CisJc3RydWN0IHMzYzI0MTJfaW9iYW5rX3RpbWluZyAqYnQ7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCWludCBiYW5rOworCisJLyogc2V0IHRoZSBpbyB0aW1pbmdzIGZyb20gdGhlIHNwZWNpZmllciAqLworCisJZm9yIChiYW5rID0gMDsgYmFuayA8IE1BWF9CQU5LUzsgYmFuaysrKSB7CisJCWJ0ID0gaW90LT5iYW5rW2JhbmtdLmlvXzI0MTI7CisJCWlmICghYnQpCisJCQljb250aW51ZTsKKworCQlyZWdzID0gUzNDMjQxMl9TU01DX0JBTksoYmFuayk7CisKKwkJX19yYXdfd3JpdGVsKGJ0LT5zbWJpZGN5ciwgcmVncyArIFNNQklEQ1lSKTsKKwkJX19yYXdfd3JpdGVsKGJ0LT5zbWJ3c3RyZCwgcmVncyArIFNNQldTVFJEUik7CisJCV9fcmF3X3dyaXRlbChidC0+c21id3N0d3IsIHJlZ3MgKyBTTUJXU1RXUlIpOworCQlfX3Jhd193cml0ZWwoYnQtPnNtYndzdG9lbiwgcmVncyArIFNNQldTVE9FTlIpOworCQlfX3Jhd193cml0ZWwoYnQtPnNtYndzdHdlbiwgcmVncyArIFNNQldTVFdFTlIpOworCQlfX3Jhd193cml0ZWwoYnQtPnNtYndzdGJyZCwgcmVncyArIFNNQldTVEJSRFIpOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgczNjMjQxMl9kZWNvZGVfdGltaW5nKHVuc2lnbmVkIGludCBjbG9jaywgdTMyIHJlZykKK3sKKwlyZXR1cm4gKHJlZyAmIDB4ZikgKiBjbG9jazsKK30KKworc3RhdGljIHZvaWQgczNjMjQxMl9pb3RpbWluZ19nZXRiYW5rKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQkgICAgIHN0cnVjdCBzM2MyNDEyX2lvYmFua190aW1pbmcgKmJ0LAorCQkJCSAgICAgdW5zaWduZWQgaW50IGJhbmspCit7CisJdW5zaWduZWQgbG9uZyBjbGsgPSBjZmctPmZyZXEuaGNsa190bnM7ICAvKiBzc21jIGNsb2NrPz8/ICovCisJdm9pZCBfX2lvbWVtICpyZWdzID0gUzNDMjQxMl9TU01DX0JBTksoYmFuayk7CisKKwlidC0+aWRjeSA9IHMzYzI0MTJfZGVjb2RlX3RpbWluZyhjbGssIF9fcmF3X3JlYWRsKHJlZ3MgKyBTTUJJRENZUikpOworCWJ0LT53c3RyZCA9IHMzYzI0MTJfZGVjb2RlX3RpbWluZyhjbGssIF9fcmF3X3JlYWRsKHJlZ3MgKyBTTUJXU1RSRFIpKTsKKwlidC0+d3N0b2VuID0gczNjMjQxMl9kZWNvZGVfdGltaW5nKGNsaywgX19yYXdfcmVhZGwocmVncyArIFNNQldTVE9FTlIpKTsKKwlidC0+d3N0d2VuID0gczNjMjQxMl9kZWNvZGVfdGltaW5nKGNsaywgX19yYXdfcmVhZGwocmVncyArIFNNQldTVFdFTlIpKTsKKwlidC0+d3N0YnJkID0gczNjMjQxMl9kZWNvZGVfdGltaW5nKGNsaywgX19yYXdfcmVhZGwocmVncyArIFNNQldTVEJSRFIpKTsKK30KKworLyoqCisgKiBiYW5rX2lzX2lvIC0gcmV0dXJuIHRydWUgaWYgYmFuayBpcyAocG9zc2libHkpIElPLgorICogQGJhbms6IFRoZSBiYW5rIG51bWJlci4KKyAqIEBiYW5rY2ZnOiBUaGUgdmFsdWUgb2YgUzNDMjQxMl9FQklfQkFOS0NGRy4KKyAqLworc3RhdGljIGlubGluZSBib29sIGJhbmtfaXNfaW8odW5zaWduZWQgaW50IGJhbmssIHUzMiBiYW5rY2ZnKQoreworCWlmIChiYW5rIDwgMikKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gIShiYW5rY2ZnICYgKDEgPDwgYmFuaykpOworfQorCitpbnQgczNjMjQxMl9pb3RpbWluZ19nZXQoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJIHN0cnVjdCBzM2NfaW90aW1pbmdzICp0aW1pbmdzKQoreworCXN0cnVjdCBzM2MyNDEyX2lvYmFua190aW1pbmcgKmJ0OworCXUzMiBiYW5rY2ZnID0gX19yYXdfcmVhZGwoUzNDMjQxMl9FQklfQkFOS0NGRyk7CisJdW5zaWduZWQgaW50IGJhbms7CisKKwkvKiBsb29rIHRocm91Z2ggYWxsIGJhbmtzIHRvIHNlZSB3aGF0IGlzIGN1cnJlbnRseSBzZXQuICovCisKKwlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgTUFYX0JBTktTOyBiYW5rKyspIHsKKwkJaWYgKCFiYW5rX2lzX2lvKGJhbmssIGJhbmtjZmcpKQorCQkJY29udGludWU7CisKKwkJYnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjMjQxMl9pb2JhbmtfdGltaW5nKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIG1lbW9yeSBmb3IgYmFua1xuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQl0aW1pbmdzLT5iYW5rW2JhbmtdLmlvXzI0MTIgPSBidDsKKwkJczNjMjQxMl9pb3RpbWluZ19nZXRiYW5rKGNmZywgYnQsIGJhbmspOworCX0KKworCXMzYzI0MTJfcHJpbnRfdGltaW5nKCJnZXQiLCB0aW1pbmdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBpcyBpbiBoZXJlIGFzIGl0IGlzIHNvIHNtYWxsLCBpdCBkb2Vzbid0IGN1cnJlbnRseSB3YXJyYW50IGEgZmlsZQorICogdG8gaXRzZWxmLiBXZSBleHBlY3QgdGhhdCBhbnkgczNjMjR4eCBuZWVkaW5nIHRoaXMgaXMgZ29pbmcgdG8gYWxzbworICogbmVlZCB0aGUgaW90aW1pbmcgc3VwcG9ydC4KKyAqLwordm9pZCBzM2MyNDEyX2NwdWZyZXFfc2V0cmVmcmVzaChzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpCit7CisJc3RydWN0IHMzY19jcHVmcmVxX2JvYXJkICpib2FyZCA9IGNmZy0+Ym9hcmQ7CisJdTMyIHJlZnJlc2g7CisKKwlXQVJOX09OKGJvYXJkID09IE5VTEwpOworCisJLyogUmVkdWNlIGJvdGggdGhlIHJlZnJlc2ggdGltZSAoaW4gbnMpIGFuZCB0aGUgZnJlcXVlbmN5IChpbiBNSHopCisJICogZG93biB0byBlbnN1cmUgdGhhdCB3ZSBkbyBub3Qgb3ZlcmZsb3cgMzIgYml0IG51bWJlcnMuCisJICoKKwkgKiBUaGlzIHNob3VsZCB3b3JrIGZvciBIQ0xLIHVwIHRvIDEzM01IeiBhbmQgcmVmcmVzaCBwZXJpb2QgdXAKKwkgKiB0byAzMHVzZWMuCisJICovCisKKwlyZWZyZXNoID0gKGNmZy0+ZnJlcS5oY2xrIC8gMTAwKSAqIChib2FyZC0+cmVmcmVzaCAvIDEwKTsKKwlyZWZyZXNoID0gRElWX1JPVU5EX1VQKHJlZnJlc2gsICgxMDAwICogMTAwMCkpOyAvKiBhcHBseSBzY2FsZSAgKi8KKwlyZWZyZXNoICY9ICgoMSA8PCAxNikgLSAxKTsKKworCXMzY19mcmVxX2RiZygiJXM6IHJlZnJlc2ggdmFsdWUgJXVcbiIsIF9fZnVuY19fLCAodW5zaWduZWQgaW50KXJlZnJlc2gpOworCisJX19yYXdfd3JpdGVsKHJlZnJlc2gsIFMzQzI0MTJfUkVGUkVTSCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0MC1jcHVmcmVxLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0MC1jcHVmcmVxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyZTZjNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLWNwdWZyZXEuYwpAQCAtMCwwICsxLDMxMSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAtY3B1ZnJlcS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDgsMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDQwL1MzQzI0NDIgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLWNvcmUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICp4dGFsOworc3RhdGljIHN0cnVjdCBjbGsgKmZjbGs7CitzdGF0aWMgc3RydWN0IGNsayAqaGNsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICphcm1jbGs7CisKKy8qIEhESVY6IDEsIDIsIDMsIDQsIDYsIDggKi8KKworc3RhdGljIGlubGluZSBpbnQgd2l0aGluX2toeih1bnNpZ25lZCBsb25nIGEsIHVuc2lnbmVkIGxvbmcgYikKK3sKKwlsb25nIGRpZmYgPSBhIC0gYjsKKworCXJldHVybiAoZGlmZiA+PSAtMTAwMCAmJiBkaWZmIDw9IDEwMDApOworfQorCisvKioKKyAqIHMzYzI0NDBfY3B1ZnJlcV9jYWxjZGl2cyAtIGNhbGN1bGF0ZSBkaXZpZGVyIHNldHRpbmdzCisgKiBAY2ZnOiBUaGUgY3B1IGZyZXF1ZW5jeSBzZXR0aW5ncy4KKyAqCisgKiBDYWxjdWFsdGUgdGhlIGRpdmlkZXIgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gZnJlcXVlbmN5IHNldHRpbmdzCisgKiBzcGVjaWZpZWQgaW4gQGNmZy4gVGhlIHZhbHVlcyBhcmUgc3RvcmVkIGluIEBjZmcgZm9yIGxhdGVyIHVzZQorICogYnkgdGhlIHJlbGV2YW50IHNldCByb3V0aW5lIGlmIHRoZSByZXF1ZXN0IHNldHRpbmdzIGNhbiBiZSByZWFjaGVkLgorICovCitpbnQgczNjMjQ0MF9jcHVmcmVxX2NhbGNkaXZzKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwl1bnNpZ25lZCBpbnQgaGRpdiwgcGRpdjsKKwl1bnNpZ25lZCBsb25nIGhjbGssIGZjbGssIGFybWNsazsKKwl1bnNpZ25lZCBsb25nIGhjbGtfbWF4OworCisJZmNsayA9IGNmZy0+ZnJlcS5mY2xrOworCWFybWNsayA9IGNmZy0+ZnJlcS5hcm1jbGs7CisJaGNsa19tYXggPSBjZmctPm1heC5oY2xrOworCisJczNjX2ZyZXFfZGJnKCIlczogZmNsayBpcyAlbHUsIGFybWNsayAlbHUsIG1heCBoY2xrICVsdVxuIiwKKwkJICAgICBfX2Z1bmNfXywgZmNsaywgYXJtY2xrLCBoY2xrX21heCk7CisKKwlpZiAoYXJtY2xrID4gZmNsaykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYXJtY2xrID4gZmNsa1xuIiwgX19mdW5jX18pOworCQlhcm1jbGsgPSBmY2xrOworCX0KKworCS8qIGlmIHdlIGFyZSBpbiBEVlMsIHdlIG5lZWQgSENMSyB0byBiZSA8PSBBUk1DTEsgKi8KKwlpZiAoYXJtY2xrIDwgZmNsayAmJiBhcm1jbGsgPCBoY2xrX21heCkKKwkJaGNsa19tYXggPSBhcm1jbGs7CisKKwlmb3IgKGhkaXYgPSAxOyBoZGl2IDwgOTsgaGRpdisrKSB7CisJCWlmIChoZGl2ID09IDUgfHwgaGRpdiA9PSA3KQorCQkJaGRpdisrOworCisJCWhjbGsgPSAoZmNsayAvIGhkaXYpOworCQlpZiAoaGNsayA8PSBoY2xrX21heCB8fCB3aXRoaW5fa2h6KGhjbGssIGhjbGtfbWF4KSkKKwkJCWJyZWFrOworCX0KKworCXMzY19mcmVxX2RiZygiJXM6IGhjbGsgJWx1LCBkaXYgJWRcbiIsIF9fZnVuY19fLCBoY2xrLCBoZGl2KTsKKworCWlmIChoZGl2ID4gOCkKKwkJZ290byBpbnZhbGlkOworCisJcGRpdiA9IChoY2xrID4gY2ZnLT5tYXgucGNsaykgPyAyIDogMTsKKworCWlmICgoaGNsayAvIHBkaXYpID4gY2ZnLT5tYXgucGNsaykKKwkJcGRpdisrOworCisJczNjX2ZyZXFfZGJnKCIlczogcGRpdiAlZFxuIiwgX19mdW5jX18sIHBkaXYpOworCisJaWYgKHBkaXYgPiAyKQorCQlnb3RvIGludmFsaWQ7CisKKwlwZGl2ICo9IGhkaXY7CisKKwkvKiBjYWxjdWxhdGUgYSB2YWxpZCBhcm1jbGsgKi8KKworCWlmIChhcm1jbGsgPCBoY2xrKQorCQlhcm1jbGsgPSBoY2xrOworCisJLyogaWYgd2UncmUgcnVubmluZyBhcm1jbGsgbG93ZXIgdGhhbiBmY2xrLCB0aGlzIHJlYWxseSBtZWFucworCSAqIHRoYXQgdGhlIHN5c3RlbSBzaG91bGQgZ28gaW50byBkdnMgbW9kZSwgd2hpY2ggbWVhbnMgdGhhdAorCSAqIGFybWNsayBpcyBjb25uZWN0ZWQgdG8gaGNsay4gKi8KKwlpZiAoYXJtY2xrIDwgZmNsaykgeworCQljZmctPmRpdnMuZHZzID0gMTsKKwkJYXJtY2xrID0gaGNsazsKKwl9IGVsc2UKKwkJY2ZnLT5kaXZzLmR2cyA9IDA7CisKKwljZmctPmZyZXEuYXJtY2xrID0gYXJtY2xrOworCisJLyogc3RvcmUgdGhlIHJlc3VsdCwgYW5kIHRoZW4gcmV0dXJuICovCisKKwljZmctPmRpdnMuaF9kaXZpc29yID0gaGRpdjsKKwljZmctPmRpdnMucF9kaXZpc29yID0gcGRpdjsKKworCXJldHVybiAwOworCisgaW52YWxpZDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworI2RlZmluZSBDQU1ESVZOX0hDTEtfSEFMRiAoUzNDMjQ0MF9DQU1ESVZOX0hDTEszX0hBTEYgfCBcCisJCQkgICBTM0MyNDQwX0NBTURJVk5fSENMSzRfSEFMRikKKworLyoqCisgKiBzM2MyNDQwX2NwdWZyZXFfc2V0ZGl2cyAtIHNldCB0aGUgY3B1IGZyZXF1ZW5jeSBkaXZpZGVyIHNldHRpbmdzCisgKiBAY2ZnOiBUaGUgY3B1IGZyZXF1ZW5jeSBzZXR0aW5ncy4KKyAqCisgKiBTZXQgdGhlIGRpdmlzb3JzIGZyb20gdGhlIHNldHRpbmdzIGluIEBjZmcsIHdoaWNoIHdoZXJlIGdlbmVyYXRlZAorICogZHVyaW5nIHRoZSBjYWxjdWxhdGlvbiBwaGFzZSBieSBzM2MyNDQwX2NwdWZyZXFfY2FsY2RpdnMoKS4KKyAqLworc3RhdGljIHZvaWQgczNjMjQ0MF9jcHVmcmVxX3NldGRpdnMoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCXVuc2lnbmVkIGxvbmcgY2xrZGl2LCBjYW1kaXY7CisKKwlzM2NfZnJlcV9kYmcoIiVzOiBkaXZzaW9yczogaD0lZCwgcD0lZFxuIiwgX19mdW5jX18sCisJCSAgICAgY2ZnLT5kaXZzLmhfZGl2aXNvciwgY2ZnLT5kaXZzLnBfZGl2aXNvcik7CisKKwljbGtkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0RJVk4pOworCWNhbWRpdiA9IF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7CisKKwljbGtkaXYgJj0gfihTM0MyNDQwX0NMS0RJVk5fSERJVk5fTUFTSyB8IFMzQzI0NDBfQ0xLRElWTl9QRElWTik7CisJY2FtZGl2ICY9IH5DQU1ESVZOX0hDTEtfSEFMRjsKKworCXN3aXRjaCAoY2ZnLT5kaXZzLmhfZGl2aXNvcikgeworCWNhc2UgMToKKwkJY2xrZGl2IHw9IFMzQzI0NDBfQ0xLRElWTl9IRElWTl8xOworCQlicmVhazsKKworCWNhc2UgMjoKKwkJY2xrZGl2IHw9IFMzQzI0NDBfQ0xLRElWTl9IRElWTl8yOworCQlicmVhazsKKworCWNhc2UgNjoKKwkJY2FtZGl2IHw9IFMzQzI0NDBfQ0FNRElWTl9IQ0xLM19IQUxGOworCWNhc2UgMzoKKwkJY2xrZGl2IHw9IFMzQzI0NDBfQ0xLRElWTl9IRElWTl8zXzY7CisJCWJyZWFrOworCisJY2FzZSA4OgorCQljYW1kaXYgfD0gUzNDMjQ0MF9DQU1ESVZOX0hDTEs0X0hBTEY7CisJY2FzZSA0OgorCQljbGtkaXYgfD0gUzNDMjQ0MF9DTEtESVZOX0hESVZOXzRfODsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsJLyogd2UgZG9uJ3QgZXhwZWN0IHRvIGdldCBoZXJlLiAqLworCX0KKworCWlmIChjZmctPmRpdnMucF9kaXZpc29yICE9IGNmZy0+ZGl2cy5oX2Rpdmlzb3IpCisJCWNsa2RpdiB8PSBTM0MyNDQwX0NMS0RJVk5fUERJVk47CisKKwkvKiB0b2RvIC0gc2V0IHBjbGsuICovCisKKwkvKiBXcml0ZSB0aGUgZGl2aXNvcnMgZmlyc3Qgd2l0aCBoY2xrIGludGVudGlvbmFsbHkgaGFsdmVkIHNvIHRoYXQKKwkgKiB3aGVuIHdlIHdyaXRlIGNsa2RpdiB3ZSB3aWxsIHVuZGVyLWZyZXF1ZW5jeSBpbnN0ZWFkIG9mIG92ZXIuIFdlCisJICogdGhlbiBtYWtlIGEgc2hvcnQgZGVsYXkgYW5kIHJlbW92ZSB0aGUgaGNsayBoYWx2aW5nIGlmIG5lY2Vzc2FyeS4KKwkgKi8KKworCV9fcmF3X3dyaXRlbChjYW1kaXYgfCBDQU1ESVZOX0hDTEtfSEFMRiwgUzNDMjQ0MF9DQU1ESVZOKTsKKwlfX3Jhd193cml0ZWwoY2xrZGl2LCBTM0MyNDEwX0NMS0RJVk4pOworCisJbmRlbGF5KDIwKTsKKwlfX3Jhd193cml0ZWwoY2FtZGl2LCBTM0MyNDQwX0NBTURJVk4pOworCisJY2xrX3NldF9wYXJlbnQoYXJtY2xrLCBjZmctPmRpdnMuZHZzID8gaGNsayA6IGZjbGspOworfQorCitzdGF0aWMgaW50IHJ1bl9mcmVxX2Zvcih1bnNpZ25lZCBsb25nIG1heF9oY2xrLCB1bnNpZ25lZCBsb25nIGZjbGssCisJCQlpbnQgKmRpdnMsCisJCQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnRhYmxlLAorCQkJc2l6ZV90IHRhYmxlX3NpemUpCit7CisJdW5zaWduZWQgbG9uZyBmcmVxOworCWludCBpbmRleCA9IDA7CisJaW50IGRpdjsKKworCWZvciAoZGl2ID0gKmRpdnM7IGRpdiA+IDA7IGRpdiA9ICpkaXZzKyspIHsKKwkJZnJlcSA9IGZjbGsgLyBkaXY7CisKKwkJaWYgKGZyZXEgPiBtYXhfaGNsayAmJiBkaXYgIT0gMSkKKwkJCWNvbnRpbnVlOworCisJCWZyZXEgLz0gMTAwMDsgLyogdGFibGUgaXMgaW4ga0h6ICovCisJCWluZGV4ID0gczNjX2NwdWZyZXFfYWRkZnJlcSh0YWJsZSwgaW5kZXgsIHRhYmxlX3NpemUsIGZyZXEpOworCQlpZiAoaW5kZXggPCAwKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGluZGV4OworfQorCitzdGF0aWMgaW50IGhjbGtfZGl2c1tdID0geyAxLCAyLCAzLCA0LCA2LCA4LCAtMSB9OworCitzdGF0aWMgaW50IHMzYzI0NDBfY3B1ZnJlcV9jYWxjdGFibGUoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJCSAgICAgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSwKKwkJCQkgICAgIHNpemVfdCB0YWJsZV9zaXplKQoreworCWludCByZXQ7CisKKwlXQVJOX09OKGNmZy0+aW5mbyA9PSBOVUxMKTsKKwlXQVJOX09OKGNmZy0+Ym9hcmQgPT0gTlVMTCk7CisKKwlyZXQgPSBydW5fZnJlcV9mb3IoY2ZnLT5pbmZvLT5tYXguaGNsaywKKwkJCSAgIGNmZy0+aW5mby0+bWF4LmZjbGssCisJCQkgICBoY2xrX2RpdnMsCisJCQkgICB0YWJsZSwgdGFibGVfc2l6ZSk7CisKKwlzM2NfZnJlcV9kYmcoIiVzOiByZXR1cm5pbmcgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHMzY19jcHVmcmVxX2luZm8gczNjMjQ0MF9jcHVmcmVxX2luZm8gPSB7CisJLm1heAkJPSB7CisJCS5mY2xrCT0gNDAwMDAwMDAwLAorCQkuaGNsawk9IDEzMzMzMzMzMywKKwkJLnBjbGsJPSAgNjY2NjY2NjYsCisJfSwKKworCS5sb2NrdGltZV9tCT0gMzAwLAorCS5sb2NrdGltZV91CT0gMzAwLAorCS5sb2NrdGltZV9iaXRzCT0gMTYsCisKKwkubmFtZQkJPSAiczNjMjQ0eCIsCisJLmNhbGNfaW90aW1pbmcJPSBzM2MyNDEwX2lvdGltaW5nX2NhbGMsCisJLnNldF9pb3RpbWluZwk9IHMzYzI0MTBfaW90aW1pbmdfc2V0LAorCS5nZXRfaW90aW1pbmcJPSBzM2MyNDEwX2lvdGltaW5nX2dldCwKKwkuc2V0X2Z2Y28JPSBzM2MyNDEwX3NldF9mdmNvLAorCisJLnNldF9yZWZyZXNoCT0gczNjMjQxMF9jcHVmcmVxX3NldHJlZnJlc2gsCisJLnNldF9kaXZzCT0gczNjMjQ0MF9jcHVmcmVxX3NldGRpdnMsCisJLmNhbGNfZGl2cwk9IHMzYzI0NDBfY3B1ZnJlcV9jYWxjZGl2cywKKwkuY2FsY19mcmVxdGFibGUJPSBzM2MyNDQwX2NwdWZyZXFfY2FsY3RhYmxlLAorCisJLnJlc3VtZV9jbG9ja3MJPSBzM2MyNDR4X3NldHVwX2Nsb2NrcywKKworCS5kZWJ1Z19pb19zaG93ICA9IHMzY19jcHVmcmVxX2RlYnVnZnNfY2FsbChzM2MyNDEwX2lvdGltaW5nX2RlYnVnZnMpLAorfTsKKworc3RhdGljIGludCBzM2MyNDQwX2NwdWZyZXFfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCit7CisJeHRhbCA9IHMzY19jcHVmcmVxX2Nsa19nZXQoTlVMTCwgInh0YWwiKTsKKwloY2xrID0gczNjX2NwdWZyZXFfY2xrX2dldChOVUxMLCAiaGNsayIpOworCWZjbGsgPSBzM2NfY3B1ZnJlcV9jbGtfZ2V0KE5VTEwsICJmY2xrIik7CisJYXJtY2xrID0gczNjX2NwdWZyZXFfY2xrX2dldChOVUxMLCAiYXJtY2xrIik7CisKKwlpZiAoSVNfRVJSKHh0YWwpIHx8IElTX0VSUihoY2xrKSB8fCBJU19FUlIoZmNsaykgfHwgSVNfRVJSKGFybWNsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGdldCBjbG9ja3NcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJcmV0dXJuIHMzY19jcHVmcmVxX3JlZ2lzdGVyKCZzM2MyNDQwX2NwdWZyZXFfaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQwX2NwdWZyZXFfZHJpdmVyID0geworCS5hZGQJCT0gczNjMjQ0MF9jcHVmcmVxX2FkZCwKK307CisKK3N0YXRpYyBpbnQgczNjMjQ0MF9jcHVmcmVxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0MF9zeXNjbGFzcywKKwkJCQkgICAgICAmczNjMjQ0MF9jcHVmcmVxX2RyaXZlcik7Cit9CisKKy8qIGFyY2hfaW5pdGNhbGwgYWRkcyB0aGUgY2xvY2tzIHdlIG5lZWQsIHNvIHVzZSBzdWJzeXNfaW5pdGNhbGwuICovCitzdWJzeXNfaW5pdGNhbGwoczNjMjQ0MF9jcHVmcmVxX2luaXQpOworCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0Ml9jcHVmcmVxX2RyaXZlciA9IHsKKwkuYWRkCQk9IHMzYzI0NDBfY3B1ZnJlcV9hZGQsCit9OworCitzdGF0aWMgaW50IHMzYzI0NDJfY3B1ZnJlcV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzY2xhc3MsCisJCQkJICAgICAgJnMzYzI0NDJfY3B1ZnJlcV9kcml2ZXIpOworfQorCitzdWJzeXNfaW5pdGNhbGwoczNjMjQ0Ml9jcHVmcmVxX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAtcGxsLTEyMDAwMDAwLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0MC1wbGwtMTIwMDAwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjk0NDNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAtcGxsLTEyMDAwMDAwLmMKQEAgLTAsMCArMSw5NyBAQAorLyogYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAtcGxsLTEyMDAwMDAwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQGFybS5saW51eC5vcmcudWs+CisgKgorICogUzNDMjQ0MC9TM0MyNDQyIENQVSBQTEwgdGFibGVzICgxMk1IeiBDcnlzdGFsKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS1jb3JlLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgczNjMjQ0MF9wbGxzXzEyW10gX19pbml0ZGF0YSA9IHsKKwl7IC5mcmVxdWVuY3kgPSA3NTAwMDAwMCwJLmluZGV4ID0gUExMVkFMKDB4NzUsIDMsIDMpLCAgfSwgCS8qIEZWY28gNjAwLjAwMDAwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDgwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg5OCwgNCwgMyksICB9LCAJLyogRlZjbyA2NDAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gOTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAyLCAzKSwgIH0sIAkvKiBGVmNvIDcyMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxMDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDVjLCAxLCAzKSwgIH0sIAkvKiBGVmNvIDgwMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxMTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDY2LCAxLCAzKSwgIH0sIAkvKiBGVmNvIDg4MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxMjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAxLCAzKSwgIH0sIAkvKiBGVmNvIDk2MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxNTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDc1LCAzLCAyKSwgIH0sIAkvKiBGVmNvIDYwMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxNjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDk4LCA0LCAyKSwgIH0sIAkvKiBGVmNvIDY0MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxNzAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDRkLCAxLCAyKSwgIH0sIAkvKiBGVmNvIDY4MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxODAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAyLCAyKSwgIH0sIAkvKiBGVmNvIDcyMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxOTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDU3LCAxLCAyKSwgIH0sIAkvKiBGVmNvIDc2MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyMDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDVjLCAxLCAyKSwgIH0sIAkvKiBGVmNvIDgwMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyMTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDg0LCAyLCAyKSwgIH0sIAkvKiBGVmNvIDg0MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyMjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDY2LCAxLCAyKSwgIH0sIAkvKiBGVmNvIDg4MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyMzAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDZiLCAxLCAyKSwgIH0sIAkvKiBGVmNvIDkyMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyNDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAxLCAyKSwgIH0sIAkvKiBGVmNvIDk2MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDc1LCAzLCAxKSwgIH0sIAkvKiBGVmNvIDYwMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDkzLCA0LCAxKSwgIH0sIAkvKiBGVmNvIDYyMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDk4LCA0LCAxKSwgIH0sIAkvKiBGVmNvIDY0MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMzAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDY2LCAyLCAxKSwgIH0sIAkvKiBGVmNvIDY2MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDRkLCAxLCAxKSwgIH0sIAkvKiBGVmNvIDY4MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweGE3LCA0LCAxKSwgIH0sIAkvKiBGVmNvIDcwMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAyLCAxKSwgIH0sIAkvKiBGVmNvIDcyMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNzAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweGIxLCA0LCAxKSwgIH0sIAkvKiBGVmNvIDc0MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzODAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDU3LCAxLCAxKSwgIH0sIAkvKiBGVmNvIDc2MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzOTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDdhLCAyLCAxKSwgIH0sIAkvKiBGVmNvIDc4MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSA0MDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDVjLCAxLCAxKSwgIH0sIAkvKiBGVmNvIDgwMC4wMDAwMDAgKi8KK307CisKK3N0YXRpYyBpbnQgczNjMjQ0MF9wbGxzMTJfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNsayAqeHRhbF9jbGs7CisJdW5zaWduZWQgbG9uZyB4dGFsOworCisJeHRhbF9jbGsgPSBjbGtfZ2V0KE5VTEwsICJ4dGFsIik7CisJaWYgKElTX0VSUih4dGFsX2NsaykpCisJCXJldHVybiBQVFJfRVJSKHh0YWxfY2xrKTsKKworCXh0YWwgPSBjbGtfZ2V0X3JhdGUoeHRhbF9jbGspOworCWNsa19wdXQoeHRhbF9jbGspOworCisJaWYgKHh0YWwgPT0gMTIwMDAwMDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgUExMIHRhYmxlIGZvciAxMk1IeiBjcnlzdGFsXG4iKTsKKwkJcmV0dXJuIHMzY19wbGx0YWJfcmVnaXN0ZXIoczNjMjQ0MF9wbGxzXzEyLAorCQkJCQkgICBBUlJBWV9TSVpFKHMzYzI0NDBfcGxsc18xMikpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0MF9wbGxzMTJfZHJ2ID0geworCS5hZGQJPSBzM2MyNDQwX3BsbHMxMl9hZGQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDQwX3BsbF8xMm1oeih2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX3N5c2NsYXNzLCAmczNjMjQ0MF9wbGxzMTJfZHJ2KTsKKworfQorCithcmNoX2luaXRjYWxsKHMzYzI0NDBfcGxsXzEybWh6KTsKKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDJfcGxsczEyX2RydiA9IHsKKwkuYWRkCT0gczNjMjQ0MF9wbGxzMTJfYWRkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQ0Ml9wbGxfMTJtaHoodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0Ml9zeXNjbGFzcywgJnMzYzI0NDJfcGxsczEyX2Rydik7CisKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDQyX3BsbF8xMm1oeik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0MC1wbGwtMTY5MzQ0MDAuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLXBsbC0xNjkzNDQwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzlhZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0MC1wbGwtMTY5MzQ0MDAuYwpAQCAtMCwwICsxLDEyNyBAQAorLyogYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAtcGxsLTE2OTM0NDAwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQGFybS5saW51eC5vcmcudWs+CisgKgorICogUzNDMjQ0MC9TM0MyNDQyIENQVSBQTEwgdGFibGVzICgxNi45MzQ0NE1IeiBDcnlzdGFsKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS1jb3JlLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgczNjMjQ0MF9wbGxzXzE2OTM0NFtdIF9faW5pdGRhdGEgPSB7CisJeyAuZnJlcXVlbmN5ID0gNzgwMTkyMDAsCS5pbmRleCA9IFBMTFZBTCgxMjEsIDUsIDMpLCAJfSwgCS8qIEZWY28gNjI0LjE1MzYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDg0MDY3MjAwLAkuaW5kZXggPSBQTExWQUwoMTMxLCA1LCAzKSwgCX0sIAkvKiBGVmNvIDY3Mi41Mzc2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSA5MDExNTIwMCwJLmluZGV4ID0gUExMVkFMKDE0MSwgNSwgMyksIAl9LCAJLyogRlZjbyA3MjAuOTIxNjAwICovCisJeyAuZnJlcXVlbmN5ID0gOTYxNjMyMDAsCS5pbmRleCA9IFBMTFZBTCgxNTEsIDUsIDMpLCAJfSwgCS8qIEZWY28gNzY5LjMwNTYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDEwMjEzNTYwMCwJLmluZGV4ID0gUExMVkFMKDE4NSwgNiwgMyksIAl9LCAJLyogRlZjbyA4MTcuMDg0ODAwICovCisJeyAuZnJlcXVlbmN5ID0gMTA4MjU5MjAwLAkuaW5kZXggPSBQTExWQUwoMTcxLCA1LCAzKSwgCX0sIAkvKiBGVmNvIDg2Ni4wNzM2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxMTQzMDcyMDAsCS5pbmRleCA9IFBMTFZBTCgxMjcsIDMsIDMpLCAJfSwgCS8qIEZWY28gOTE0LjQ1NzYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDEyMDIzNDI0MCwJLmluZGV4ID0gUExMVkFMKDEzNCwgMywgMyksIAl9LCAJLyogRlZjbyA5NjEuODczOTIwICovCisJeyAuZnJlcXVlbmN5ID0gMTI2MTYxMjgwLAkuaW5kZXggPSBQTExWQUwoMTQxLCAzLCAzKSwgCX0sIAkvKiBGVmNvIDEwMDkuMjkwMjQwICovCisJeyAuZnJlcXVlbmN5ID0gMTMyMDg4MzIwLAkuaW5kZXggPSBQTExWQUwoMTQ4LCAzLCAzKSwgCX0sIAkvKiBGVmNvIDEwNTYuNzA2NTYwICovCisJeyAuZnJlcXVlbmN5ID0gMTM4MDE1MzYwLAkuaW5kZXggPSBQTExWQUwoMTU1LCAzLCAzKSwgCX0sIAkvKiBGVmNvIDExMDQuMTIyODgwICovCisJeyAuZnJlcXVlbmN5ID0gMTQ0Nzg5MTIwLAkuaW5kZXggPSBQTExWQUwoMTYzLCAzLCAzKSwgCX0sIAkvKiBGVmNvIDExNTguMzEyOTYwICovCisJeyAuZnJlcXVlbmN5ID0gMTUwMTAwMzYzLAkuaW5kZXggPSBQTExWQUwoMTg3LCA5LCAyKSwgCX0sIAkvKiBGVmNvIDYwMC40MDE0NTQgKi8KKwl7IC5mcmVxdWVuY3kgPSAxNTYwMzg0MDAsCS5pbmRleCA9IFBMTFZBTCgxMjEsIDUsIDIpLCAJfSwgCS8qIEZWY28gNjI0LjE1MzYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDE2MjA4NjQwMCwJLmluZGV4ID0gUExMVkFMKDEyNiwgNSwgMiksIAl9LCAJLyogRlZjbyA2NDguMzQ1NjAwICovCisJeyAuZnJlcXVlbmN5ID0gMTY4MTM0NDAwLAkuaW5kZXggPSBQTExWQUwoMTMxLCA1LCAyKSwgCX0sIAkvKiBGVmNvIDY3Mi41Mzc2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxNzQwNDgwMDAsCS5pbmRleCA9IFBMTFZBTCgxNzcsIDcsIDIpLCAJfSwgCS8qIEZWY28gNjk2LjE5MjAwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDE4MDIzMDQwMCwJLmluZGV4ID0gUExMVkFMKDE0MSwgNSwgMiksIAl9LCAJLyogRlZjbyA3MjAuOTIxNjAwICovCisJeyAuZnJlcXVlbmN5ID0gMTg2Mjc4NDAwLAkuaW5kZXggPSBQTExWQUwoMTI0LCA0LCAyKSwgCX0sIAkvKiBGVmNvIDc0NS4xMTM2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxOTIzMjY0MDAsCS5pbmRleCA9IFBMTFZBTCgxNTEsIDUsIDIpLCAJfSwgCS8qIEZWY28gNzY5LjMwNTYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDE5ODEzMjQ4MCwJLmluZGV4ID0gUExMVkFMKDEwOSwgMywgMiksIAl9LCAJLyogRlZjbyA3OTIuNTI5OTIwICovCisJeyAuZnJlcXVlbmN5ID0gMjA0MjcxMjAwLAkuaW5kZXggPSBQTExWQUwoMTg1LCA2LCAyKSwgCX0sIAkvKiBGVmNvIDgxNy4wODQ4MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyMTAyNjg4MDAsCS5pbmRleCA9IFBMTFZBTCgxNDEsIDQsIDIpLCAJfSwgCS8qIEZWY28gODQxLjA3NTIwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDIxNjUxODQwMCwJLmluZGV4ID0gUExMVkFMKDE3MSwgNSwgMiksIAl9LCAJLyogRlZjbyA4NjYuMDczNjAwICovCisJeyAuZnJlcXVlbmN5ID0gMjIyMjY0MDAwLAkuaW5kZXggPSBQTExWQUwoOTcsIDIsIDIpLCAJfSwgCS8qIEZWY28gODg5LjA1NjAwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDIyODYxNDQwMCwJLmluZGV4ID0gUExMVkFMKDEyNywgMywgMiksIAl9LCAJLyogRlZjbyA5MTQuNDU3NjAwICovCisJeyAuZnJlcXVlbmN5ID0gMjM0MjU5MjAwLAkuaW5kZXggPSBQTExWQUwoMTU4LCA0LCAyKSwgCX0sIAkvKiBGVmNvIDkzNy4wMzY4MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyNDA0Njg0ODAsCS5pbmRleCA9IFBMTFZBTCgxMzQsIDMsIDIpLCAJfSwgCS8qIEZWY28gOTYxLjg3MzkyMCAqLworCXsgLmZyZXF1ZW5jeSA9IDI0Njk2MDAwMCwJLmluZGV4ID0gUExMVkFMKDE2NywgNCwgMiksIAl9LCAJLyogRlZjbyA5ODcuODQwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMjUyMzIyNTYwLAkuaW5kZXggPSBQTExWQUwoMTQxLCAzLCAyKSwgCX0sIAkvKiBGVmNvIDEwMDkuMjkwMjQwICovCisJeyAuZnJlcXVlbmN5ID0gMjU4MjQ5NjAwLAkuaW5kZXggPSBQTExWQUwoMTE0LCAyLCAyKSwgCX0sIAkvKiBGVmNvIDEwMzIuOTk4NDAwICovCisJeyAuZnJlcXVlbmN5ID0gMjY0MTc2NjQwLAkuaW5kZXggPSBQTExWQUwoMTQ4LCAzLCAyKSwgCX0sIAkvKiBGVmNvIDEwNTYuNzA2NTYwICovCisJeyAuZnJlcXVlbmN5ID0gMjcwOTUwNDAwLAkuaW5kZXggPSBQTExWQUwoMTIwLCAyLCAyKSwgCX0sIAkvKiBGVmNvIDEwODMuODAxNjAwICovCisJeyAuZnJlcXVlbmN5ID0gMjc2MDMwNzIwLAkuaW5kZXggPSBQTExWQUwoMTU1LCAzLCAyKSwgCX0sIAkvKiBGVmNvIDExMDQuMTIyODgwICovCisJeyAuZnJlcXVlbmN5ID0gMjgyMjQwMDAwLAkuaW5kZXggPSBQTExWQUwoOTIsIDEsIDIpLCAJfSwgCS8qIEZWY28gMTEyOC45NjAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyODk1NzgyNDAsCS5pbmRleCA9IFBMTFZBTCgxNjMsIDMsIDIpLCAJfSwgCS8qIEZWY28gMTE1OC4zMTI5NjAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyOTQyMzUyMDAsCS5pbmRleCA9IFBMTFZBTCgxMzEsIDIsIDIpLCAJfSwgCS8qIEZWY28gMTE3Ni45NDA4MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMDAyMDA3MjcsCS5pbmRleCA9IFBMTFZBTCgxODcsIDksIDEpLCAJfSwgCS8qIEZWY28gNjAwLjQwMTQ1NCAqLworCXsgLmZyZXF1ZW5jeSA9IDMwNjM1ODY5MCwJLmluZGV4ID0gUExMVkFMKDE5MSwgOSwgMSksIAl9LCAJLyogRlZjbyA2MTIuNzE3MzgwICovCisJeyAuZnJlcXVlbmN5ID0gMzEyMDc2ODAwLAkuaW5kZXggPSBQTExWQUwoMTIxLCA1LCAxKSwgCX0sIAkvKiBGVmNvIDYyNC4xNTM2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMTgzNjY3MjAsCS5pbmRleCA9IFBMTFZBTCg4NiwgMywgMSksIAl9LCAJLyogRlZjbyA2MzYuNzMzNDQwICovCisJeyAuZnJlcXVlbmN5ID0gMzI0MTcyODAwLAkuaW5kZXggPSBQTExWQUwoMTI2LCA1LCAxKSwgCX0sIAkvKiBGVmNvIDY0OC4zNDU2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMzAyMjA4MDAsCS5pbmRleCA9IFBMTFZBTCgxMDksIDQsIDEpLCAJfSwgCS8qIEZWY28gNjYwLjQ0MTYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDMzNjI2ODgwMCwJLmluZGV4ID0gUExMVkFMKDEzMSwgNSwgMSksIAl9LCAJLyogRlZjbyA2NzIuNTM3NjAwICovCisJeyAuZnJlcXVlbmN5ID0gMzQyMDc0ODgwLAkuaW5kZXggPSBQTExWQUwoOTMsIDMsIDEpLCAJfSwgCS8qIEZWY28gNjg0LjE0OTc2MCAqLworCXsgLmZyZXF1ZW5jeSA9IDM0ODA5NjAwMCwJLmluZGV4ID0gUExMVkFMKDE3NywgNywgMSksIAl9LCAJLyogRlZjbyA2OTYuMTkyMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMzU1NjIyNDAwLAkuaW5kZXggPSBQTExWQUwoMTE4LCA0LCAxKSwgCX0sIAkvKiBGVmNvIDcxMS4yNDQ4MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNjA0NjA4MDAsCS5pbmRleCA9IFBMTFZBTCgxNDEsIDUsIDEpLCAJfSwgCS8qIEZWY28gNzIwLjkyMTYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDM2NjIwNjQwMCwJLmluZGV4ID0gUExMVkFMKDE2NSwgNiwgMSksIAl9LCAJLyogRlZjbyA3MzIuNDEyODAwICovCisJeyAuZnJlcXVlbmN5ID0gMzcyNTU2ODAwLAkuaW5kZXggPSBQTExWQUwoMTI0LCA0LCAxKSwgCX0sIAkvKiBGVmNvIDc0NS4xMTM2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNzgyMDE2MDAsCS5pbmRleCA9IFBMTFZBTCgxMjYsIDQsIDEpLCAJfSwgCS8qIEZWY28gNzU2LjQwMzIwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDM4NDY1MjgwMCwJLmluZGV4ID0gUExMVkFMKDE1MSwgNSwgMSksIAl9LCAJLyogRlZjbyA3NjkuMzA1NjAwICovCisJeyAuZnJlcXVlbmN5ID0gMzkxNjA4MDAwLAkuaW5kZXggPSBQTExWQUwoMTc3LCA2LCAxKSwgCX0sIAkvKiBGVmNvIDc4My4yMTYwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzOTYyNjQ5NjAsCS5pbmRleCA9IFBMTFZBTCgxMDksIDMsIDEpLCAJfSwgCS8qIEZWY28gNzkyLjUyOTkyMCAqLworCXsgLmZyZXF1ZW5jeSA9IDQwMjE5MjAwMCwJLmluZGV4ID0gUExMVkFMKDg3LCAyLCAxKSwgCX0sIAkvKiBGVmNvIDgwNC4zODQwMDAgKi8KK307CisKK3N0YXRpYyBpbnQgczNjMjQ0MF9wbGxzMTY5MzQ0X2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjbGsgKnh0YWxfY2xrOworCXVuc2lnbmVkIGxvbmcgeHRhbDsKKworCXh0YWxfY2xrID0gY2xrX2dldChOVUxMLCAieHRhbCIpOworCWlmIChJU19FUlIoeHRhbF9jbGspKQorCQlyZXR1cm4gUFRSX0VSUih4dGFsX2Nsayk7CisKKwl4dGFsID0gY2xrX2dldF9yYXRlKHh0YWxfY2xrKTsKKwljbGtfcHV0KHh0YWxfY2xrKTsKKworCWlmICh4dGFsID09IDE2OTM0NDAwMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBQTEwgdGFibGUgZm9yIDE2LjkzNDRNSHogY3J5c3RhbFxuIik7CisJCXJldHVybiBzM2NfcGxsdGFiX3JlZ2lzdGVyKHMzYzI0NDBfcGxsc18xNjkzNDQsCisJCQkJCSAgIEFSUkFZX1NJWkUoczNjMjQ0MF9wbGxzXzE2OTM0NCkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0MF9wbGxzMTY5MzQ0X2RydiA9IHsKKwkuYWRkCT0gczNjMjQ0MF9wbGxzMTY5MzQ0X2FkZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0NDBfcGxsXzE2OTM0NDAwKHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzY2xhc3MsCisJCQkJICAgICAgJnMzYzI0NDBfcGxsczE2OTM0NF9kcnYpOworCit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQ0MF9wbGxfMTY5MzQ0MDApOworCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0Ml9wbGxzMTY5MzQ0X2RydiA9IHsKKwkuYWRkCT0gczNjMjQ0MF9wbGxzMTY5MzQ0X2FkZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0NDJfcGxsXzE2OTM0NDAwKHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzY2xhc3MsCisJCQkJICAgICAgJnMzYzI0NDJfcGxsczE2OTM0NF9kcnYpOworCit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQ0Ml9wbGxfMTY5MzQ0MDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NwaS1idXMxLWdwZDhfOV8xMC5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NwaS1idXMxLWdwZDhfOV8xMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZmNmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc3BpLWJ1czEtZ3BkOF85XzEwLmMKQEAgLTAsMCArMSwzOCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NwaS1idXMwLWdwZDhfOV8xMC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYIFNQSSAtIGdwaW8gY29uZmlndXJhdGlvbiBmb3IgYnVzIDEgb24gZ3BkOCw5LDEwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvc3BpLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KKwordm9pZCBzM2MyNHh4X3NwaV9ncGlvY2ZnX2J1czFfZ3BkOF85XzEwKHN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpzcGksCisJCQkJCWludCBlbmFibGUpCit7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcyglZClcbiIsIF9fZnVuY19fLCBlbmFibGUpOworCWlmIChlbmFibGUpIHsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRCgxMCksIFMzQzI0NDBfR1BEMTBfU1BJQ0xLMSk7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEQoOSksIFMzQzI0NDBfR1BEOV9TUElNT1NJMSk7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEQoOCksIFMzQzI0NDBfR1BEOF9TUElNSVNPMSk7CisJCXMzYzI0MTBfZ3Bpb19wdWxsdXAoUzNDMjQxMF9HUEQoMTApLCAwKTsKKwkJczNjMjQxMF9ncGlvX3B1bGx1cChTM0MyNDEwX0dQRCg5KSwgMCk7CisJfSBlbHNlIHsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRCg4KSwgUzNDMjQxMF9HUElPX0lOUFVUKTsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRCg5KSwgUzNDMjQxMF9HUElPX0lOUFVUKTsKKwkJczNjMjQxMF9ncGlvX3B1bGx1cChTM0MyNDEwX0dQRCgxMCksIDEpOworCQlzM2MyNDEwX2dwaW9fcHVsbHVwKFMzQzI0MTBfR1BEKDkpLCAxKTsKKwkJczNjMjQxMF9ncGlvX3B1bGx1cChTM0MyNDEwX0dQRCg4KSwgMSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L0tjb25maWcgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvS2NvbmZpZwppbmRleCA1ZWJkOGI0Li5iY2ZhNzc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvS2NvbmZpZwpAQCAtMTksNiArMTksNyBAQAogCXNlbGVjdCBTM0NfR1BJT19QVUxMX1VQRE9XTgogCXNlbGVjdCBTM0NfR1BJT19DRkdfUzNDMjRYWAogCXNlbGVjdCBTM0NfR1BJT19DRkdfUzNDNjRYWAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAlzZWxlY3QgVVNCX0FSQ0hfSEFTX09IQ0kKIAloZWxwCiAJICBCYXNlIHBsYXRmb3JtIGNvZGUgZm9yIGFueSBTYW1zdW5nIFMzQzY0WFggZGV2aWNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvTWFrZWZpbGUKaW5kZXggM2M4ODgyYy4uYjg1YjQzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9NYWtlZmlsZQpAQCAtNDAsNCArNDAsNSBAQAogb2JqLSQoQ09ORklHX1MzQzY0WFhfU0VUVVBfSTJDMCkgKz0gc2V0dXAtaTJjMC5vCiBvYmotJChDT05GSUdfUzNDNjRYWF9TRVRVUF9JMkMxKSArPSBzZXR1cC1pMmMxLm8KIG9iai0kKENPTkZJR19TM0M2NFhYX1NFVFVQX0ZCXzI0QlBQKSArPSBzZXR1cC1mYi0yNGJwcC5vCi1vYmotJChDT05GSUdfUzNDNjRYWF9TRVRVUF9TREhDSV9HUElPKSArPSBzZXR1cC1zZGhjaS1ncGlvLm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitvYmotJChDT05GSUdfUzNDNjRYWF9TRVRVUF9TREhDSV9HUElPKSArPSBzZXR1cC1zZGhjaS1ncGlvLm8KK29iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0MpICs9IGRldi1hdWRpby5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9kZXYtYXVkaW8uYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kZXYtYXVkaW8uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWF1ZGlvLmMKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9kZXYtYXVkaW8uYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L0tjb25maWcgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGE3MTFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L0tjb25maWcKQEAgLTAsMCArMSw1MCBAQAorIyBhcmNoL2FybS9wbGF0LXM1cGMxeHgvS2NvbmZpZworIworIyBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorIwlCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKK2NvbmZpZyBQTEFUX1M1UEMxWFgKKwlib29sCisJZGVwZW5kcyBvbiBBUkNIX1M1UEMxWFgKKwlkZWZhdWx0IHkKKwlzZWxlY3QgUExBVF9TM0MKKwlzZWxlY3QgQVJNX1ZJQworCXNlbGVjdCBOT19JT1BPUlQKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwlzZWxlY3QgUzNDX0dQSU9fVFJBQ0sKKwlzZWxlY3QgUzNDX0dQSU9fUFVMTF9VUERPV04KKwloZWxwCisJICBCYXNlIHBsYXRmb3JtIGNvZGUgZm9yIGFueSBTYW1zdW5nIFM1UEMxWFggZGV2aWNlCisKK2lmIFBMQVRfUzVQQzFYWAorCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaGFyZWQgYnkgYWxsIFMzQzY0WFggaW1wbGVtZW50YXRpb25zCisKK2NvbmZpZyBDUFVfUzVQQzEwMF9JTklUCisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBpbml0aWFsaXNhdGlvbiBjb2RlIGZvciB0aGUgUzVQQzFYWAorCitjb25maWcgQ1BVX1M1UEMxMDBfQ0xPQ0sKKwlib29sCisJaGVscAorCSAgQ29tbW9uIGNsb2NrIHN1cHBvcnQgY29kZSBmb3IgdGhlIFM1UEMxWFgKKworIyBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2Ugc2V0dXAKKworY29uZmlnIFM1UEMxMDBfU0VUVVBfSTJDMAorCWJvb2wKKwlkZWZhdWx0IHkKKwloZWxwCisJICBDb21tb24gc2V0dXAgY29kZSBmb3IgaTJjIGJ1cyAwLgorCisJICBOb3RlLCBjdXJyZW50bHkgc2luY2UgaTJjMCBpcyBhbHdheXMgY29tcGlsZWQsIHRoaXMgc2V0dXAgaGVscGVyCisJICBpcyBhbHdheXMgY29tcGlsZWQgd2l0aCBpdC4KKworY29uZmlnIFM1UEMxMDBfU0VUVVBfSTJDMQorCWJvb2wKKwloZWxwCisJICBDb21tb24gc2V0dXAgY29kZSBmb3IgaTJjIGJ1cyAxLgorZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWVjYjJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L01ha2VmaWxlCkBAIC0wLDAgKzEsMjYgQEAKKyMgYXJjaC9hcm0vcGxhdC1zNXBjMXh4L01ha2VmaWxlCisjCisjIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKK29iai15CQkJCTo9CitvYmotbQkJCQk6PQorb2JqLW4JCQkJOj0gZHVtbXkubworb2JqLQkJCQk6PQorCisjIENvcmUgZmlsZXMKKworb2JqLXkJCQkJKz0gZGV2LXVhcnQubworb2JqLXkJCQkJKz0gY3B1Lm8KK29iai15CQkJCSs9IGlycS5vCisKKyMgQ1BVIHN1cHBvcnQKKworb2JqLSQoQ09ORklHX0NQVV9TNVBDMTAwX0lOSVQpCSs9IHM1cGMxMDAtaW5pdC5vCitvYmotJChDT05GSUdfQ1BVX1M1UEMxMDBfQ0xPQ0spCSs9IHM1cGMxMDAtY2xvY2subworCisjIERldmljZSBzZXR1cAorCitvYmotJChDT05GSUdfUzVQQzEwMF9TRVRVUF9JMkMwKSArPSBzZXR1cC1pMmMwLm8KK29iai0kKENPTkZJR19TNVBDMTAwX1NFVFVQX0kyQzEpICs9IHNldHVwLWkyYzEubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2NwdS5jIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNWE3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvY3B1LmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczVwYzF4eC9jcHUuYworICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisgKglCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogUzVQQzFYWCBDUFUgU3VwcG9ydAorICoKKyAqIEJhc2VkIG9uIHBsYXQtczNjNjR4eC9jcHUuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKworI2luY2x1ZGUgPHBsYXQvczVwYzEwMC5oPgorCisvKiB0YWJsZSBvZiBzdXBwb3J0ZWQgQ1BVcyAqLworCitzdGF0aWMgY29uc3QgY2hhciBuYW1lX3M1cGMxMDBbXSA9ICJTNVBDMTAwIjsKKworc3RhdGljIHN0cnVjdCBjcHVfdGFibGUgY3B1X2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkuaWRjb2RlCQk9IDB4NDMxMDAwMDAsCisJCS5pZG1hc2sJCT0gMHhmZmZmZjAwMCwKKwkJLm1hcF9pbwkJPSBzNXBjMTAwX21hcF9pbywKKwkJLmluaXRfY2xvY2tzCT0gczVwYzEwMF9pbml0X2Nsb2NrcywKKwkJLmluaXRfdWFydHMJPSBzNXBjMTAwX2luaXRfdWFydHMsCisJCS5pbml0CQk9IHM1cGMxMDBfaW5pdCwKKwkJLm5hbWUJCT0gbmFtZV9zNXBjMTAwLAorCX0sCit9OworLyogbWluaW1hbCBJTyBtYXBwaW5nICovCisKKy8qIHNlZSBub3RlcyBvbiB1YXJ0IG1hcCBpbiBhcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgKi8KKyNkZWZpbmUgVUFSVF9PRkZTIChTM0NfUEFfVUFSVCAmIDB4ZmZmZikKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzNXBjMXh4X2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UEMxWFhfVkFfQ0hJUElELAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQQzFYWF9QQV9DSElQSUQpLAorCQkubGVuZ3RoCQk9IFNaXzE2LAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UEMxWFhfVkFfQ0xLLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQQzFYWF9QQV9DTEspLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UEMxWFhfVkFfUFdSLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQQzFYWF9QQV9QV1IpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKShTNVBDMVhYX1ZBX1VBUlQpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQQzFYWF9QQV9VQVJUKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBDMVhYX1ZBX1ZJQygwKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UEMxWFhfUEFfVklDKDApKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBDMVhYX1ZBX1ZJQygxKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UEMxWFhfUEFfVklDKDEpKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBDMVhYX1ZBX1ZJQygyKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UEMxWFhfUEFfVklDKDIpKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBDMVhYX1ZBX1RJTUVSLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQQzFYWF9QQV9USU1FUiksCisJCS5sZW5ndGgJCT0gU1pfMjU2LAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKK307CisKKy8qIHJlYWQgY3B1IGlkZW50aWZpY2F0aW9uIGNvZGUgKi8KKwordm9pZCBfX2luaXQgczVwYzF4eF9pbml0X2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGlkY29kZTsKKworCS8qIGluaXRpYWxpc2UgdGhlIGlvIGRlc2NyaXB0b3JzIHdlIG5lZWQgZm9yIGluaXRpYWxpc2F0aW9uICovCisJaW90YWJsZV9pbml0KHM1cGMxeHhfaW9kZXNjLCBBUlJBWV9TSVpFKHM1cGMxeHhfaW9kZXNjKSk7CisJaW90YWJsZV9pbml0KG1hY2hfZGVzYywgc2l6ZSk7CisKKwlpZGNvZGUgPSBfX3Jhd19yZWFkbChTNVBDMVhYX1ZBX0NISVBJRCk7CisJczNjX2luaXRfY3B1KGlkY29kZSwgY3B1X2lkcywgQVJSQVlfU0laRShjcHVfaWRzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvZGV2LXVhcnQuYyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9kZXYtdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NDliYzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvZGV2LXVhcnQuYwpAQCAtMCwwICsxLDE3NCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2Rldi11YXJ0LmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIEJhc2VkIG9uIHBsYXQtczNjNjR4eC9kZXYtdWFydC5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKworLyogU2VyaWFsIHBvcnQgcmVnaXN0cmF0aW9ucyAqLworCisvKiA2NHh4IHVhcnRzIGFyZSBjbG9zZXIgdG9nZXRoZXIgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXBjMXh4X3VhcnQwX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBTM0NfUEFfVUFSVDAsCisJCS5lbmQJPSBTM0NfUEFfVUFSVDAgKyAweDEwMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX1JYMCwKKwkJLmVuZAk9IElSUV9TM0NVQVJUX1JYMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX1RYMCwKKwkJLmVuZAk9IElSUV9TM0NVQVJUX1RYMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfRVJSMCwKKwkJLmVuZAk9IElSUV9TM0NVQVJUX0VSUjAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwYzF4eF91YXJ0MV9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDX1BBX1VBUlQxLAorCQkuZW5kICAgPSBTM0NfUEFfVUFSVDEgKyAweDEwMCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX1JYMSwKKwkJLmVuZAk9IElSUV9TM0NVQVJUX1JYMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX1RYMSwKKwkJLmVuZAk9IElSUV9TM0NVQVJUX1RYMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfRVJSMSwKKwkJLmVuZAk9IElSUV9TM0NVQVJUX0VSUjEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cGMxeHhfdWFydDJfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQ19QQV9VQVJUMiwKKwkJLmVuZCAgID0gUzNDX1BBX1VBUlQyICsgMHgxMDAsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9SWDIsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9SWDIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9UWDIsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9UWDIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX0VSUjIsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9FUlIyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXBjMXh4X3VhcnQzX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0NfUEFfVUFSVDMsCisJCS5lbmQgICA9IFMzQ19QQV9VQVJUMyArIDB4MTAwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfUlgzLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfUlgzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfVFgzLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfVFgzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKworCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9FUlIzLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfRVJSMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKKworc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgczVwYzF4eF91YXJ0X3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPSB7CisJWzBdID0geworCQkucmVzb3VyY2VzCT0gczVwYzF4eF91YXJ0MF9yZXNvdXJjZSwKKwkJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczVwYzF4eF91YXJ0MF9yZXNvdXJjZSksCisJfSwKKwlbMV0gPSB7CisJCS5yZXNvdXJjZXMJPSBzNXBjMXh4X3VhcnQxX3Jlc291cmNlLAorCQkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzNXBjMXh4X3VhcnQxX3Jlc291cmNlKSwKKwl9LAorCVsyXSA9IHsKKwkJLnJlc291cmNlcwk9IHM1cGMxeHhfdWFydDJfcmVzb3VyY2UsCisJCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHM1cGMxeHhfdWFydDJfcmVzb3VyY2UpLAorCX0sCisJWzNdID0geworCQkucmVzb3VyY2VzCT0gczVwYzF4eF91YXJ0M19yZXNvdXJjZSwKKwkJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczVwYzF4eF91YXJ0M19yZXNvdXJjZSksCisJfSwKK307CisKKy8qIHVhcnQgZGV2aWNlcyAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3VhcnRfZGV2aWNlMCA9IHsKKwkuaWQJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0eHhfdWFydF9kZXZpY2UxID0geworCS5pZAkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjR4eF91YXJ0X2RldmljZTIgPSB7CisJLmlkCQk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3VhcnRfZGV2aWNlMyA9IHsKKwkuaWQJCT0gMywKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9zcmNbNF0gPSB7CisJJnMzYzI0eHhfdWFydF9kZXZpY2UwLAorCSZzM2MyNHh4X3VhcnRfZGV2aWNlMSwKKwkmczNjMjR4eF91YXJ0X2RldmljZTIsCisJJnMzYzI0eHhfdWFydF9kZXZpY2UzLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X2RldnNbNF0gPSB7Cit9OworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwN2Q4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L2lycXMuaApAQCAtMCwwICsxLDE4MiBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2luY2x1ZGUvcGxhdC9pcnFzLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICogICAgICBCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogUzVQQzFYWCAtIENvbW1vbiBJUlEgc3VwcG9ydAorICoKKyAqIEJhc2VkIG9uIHBsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCisgKi8KKworI2lmbmRlZiBfX0FTTV9QTEFUX1M1UEMxWFhfSVJRU19ICisjZGVmaW5lIF9fQVNNX1BMQVRfUzVQQzFYWF9JUlFTX0ggX19GSUxFX18KKworLyogd2Uga2VlcCB0aGUgZmlyc3Qgc2V0IG9mIENQVSBJUlFzIG91dCBvZiB0aGUgcmFuZ2Ugb2YKKyAqIHRoZSBJU0Egc3BhY2UsIHNvIHRoYXQgdGhlIFBDMTA0IGhhcyB0aGVtIHRvIGl0c2VsZgorICogYW5kIHdlIGRvbid0IGVuZCB1cCBoYXZpbmcgdG8gZG8gaG9ycmlibGUgdGhpbmdzIHRvIHRoZQorICogc3RhbmRhcmQgSVNBIGRyaXZlcnMuLi4uCisgKgorICogbm90ZSwgc2luY2Ugd2UncmUgdXNpbmcgdGhlIFZJQ3MsIG91ciBzdGFydCBtdXN0IGJlIGEKKyAqIG11bGl0cGxlIG9mIDMyIHRvIGFsbG93IHRoZSBjb21tb24gY29kZSB0byB3b3JrCisgKi8KKworI2RlZmluZSBTM0NfSVJRX09GRlNFVAkJKDMyKQorCisjZGVmaW5lIFMzQ19JUlEoeCkJCSgoeCkgKyBTM0NfSVJRX09GRlNFVCkKKworI2RlZmluZSBTM0NfVklDMF9CQVNFCQlTM0NfSVJRKDApCisjZGVmaW5lIFMzQ19WSUMxX0JBU0UJCVMzQ19JUlEoMzIpCisjZGVmaW5lIFMzQ19WSUMyX0JBU0UJCVMzQ19JUlEoNjQpCisKKy8qIFVBUlQgaW50ZXJydXB0cywgZWFjaCBVQVJUIGhhcyA0IGludHRlcnVwdHMgcGVyIGNoYW5uZWwgc28KKyAqIHVzZSB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgSVNBIGFuZCBTM0MgbWFpbiBpbnRlcnJ1cHRzLiBOb3RlLCB0aGVzZQorICogYXJlIG5vdCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgUzNDMjRYWCBzZXJpZXMhICovCisKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfQkFTRTAJKDE2KQorI2RlZmluZSBJUlFfUzNDVUFSVF9CQVNFMQkoMjApCisjZGVmaW5lIElSUV9TM0NVQVJUX0JBU0UyCSgyNCkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfQkFTRTMJKDI4KQorCisjZGVmaW5lIFVBUlRfSVJRX1JYRAkJKDApCisjZGVmaW5lIFVBUlRfSVJRX0VSUgkJKDEpCisjZGVmaW5lIFVBUlRfSVJRX1RYRAkJKDIpCisjZGVmaW5lIFVBUlRfSVJRX01PREVNCQkoMykKKworI2RlZmluZSBJUlFfUzNDVUFSVF9SWDAJCShJUlFfUzNDVUFSVF9CQVNFMCArIFVBUlRfSVJRX1JYRCkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfVFgwCQkoSVJRX1MzQ1VBUlRfQkFTRTAgKyBVQVJUX0lSUV9UWEQpCisjZGVmaW5lIElSUV9TM0NVQVJUX0VSUjAJKElSUV9TM0NVQVJUX0JBU0UwICsgVUFSVF9JUlFfRVJSKQorCisjZGVmaW5lIElSUV9TM0NVQVJUX1JYMQkJKElSUV9TM0NVQVJUX0JBU0UxICsgVUFSVF9JUlFfUlhEKQorI2RlZmluZSBJUlFfUzNDVUFSVF9UWDEJCShJUlFfUzNDVUFSVF9CQVNFMSArIFVBUlRfSVJRX1RYRCkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfRVJSMQkoSVJRX1MzQ1VBUlRfQkFTRTEgKyBVQVJUX0lSUV9FUlIpCisKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgyCQkoSVJRX1MzQ1VBUlRfQkFTRTIgKyBVQVJUX0lSUV9SWEQpCisjZGVmaW5lIElSUV9TM0NVQVJUX1RYMgkJKElSUV9TM0NVQVJUX0JBU0UyICsgVUFSVF9JUlFfVFhEKQorI2RlZmluZSBJUlFfUzNDVUFSVF9FUlIyCShJUlFfUzNDVUFSVF9CQVNFMiArIFVBUlRfSVJRX0VSUikKKworI2RlZmluZSBJUlFfUzNDVUFSVF9SWDMJCShJUlFfUzNDVUFSVF9CQVNFMyArIFVBUlRfSVJRX1JYRCkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfVFgzCQkoSVJRX1MzQ1VBUlRfQkFTRTMgKyBVQVJUX0lSUV9UWEQpCisjZGVmaW5lIElSUV9TM0NVQVJUX0VSUjMJKElSUV9TM0NVQVJUX0JBU0UzICsgVUFSVF9JUlFfRVJSKQorCisvKiBWSUMgYmFzZWQgSVJRcyAqLworCisjZGVmaW5lIFM1UEMxWFhfSVJRX1ZJQzAoeCkJKFMzQ19WSUMwX0JBU0UgKyAoeCkpCisjZGVmaW5lIFM1UEMxWFhfSVJRX1ZJQzEoeCkJKFMzQ19WSUMxX0JBU0UgKyAoeCkpCisjZGVmaW5lIFM1UEMxWFhfSVJRX1ZJQzIoeCkJKFMzQ19WSUMyX0JBU0UgKyAoeCkpCisKKy8qCisgKiBWSUMwOiBzeXN0ZW0sIERNQSwgdGltZXIKKyAqLworI2RlZmluZSBJUlFfRUlOVDAJCVM1UEMxWFhfSVJRX1ZJQzAoMCkKKyNkZWZpbmUgSVJRX0VJTlQxCQlTNVBDMVhYX0lSUV9WSUMwKDEpCisjZGVmaW5lIElSUV9FSU5UMgkJUzVQQzFYWF9JUlFfVklDMCgyKQorI2RlZmluZSBJUlFfRUlOVDMJCVM1UEMxWFhfSVJRX1ZJQzAoMykKKyNkZWZpbmUgSVJRX0VJTlQ0CQlTNVBDMVhYX0lSUV9WSUMwKDQpCisjZGVmaW5lIElSUV9FSU5UNQkJUzVQQzFYWF9JUlFfVklDMCg1KQorI2RlZmluZSBJUlFfRUlOVDYJCVM1UEMxWFhfSVJRX1ZJQzAoNikKKyNkZWZpbmUgSVJRX0VJTlQ3CQlTNVBDMVhYX0lSUV9WSUMwKDcpCisjZGVmaW5lIElSUV9FSU5UOAkJUzVQQzFYWF9JUlFfVklDMCg4KQorI2RlZmluZSBJUlFfRUlOVDkJCVM1UEMxWFhfSVJRX1ZJQzAoOSkKKyNkZWZpbmUgSVJRX0VJTlQxMAkJUzVQQzFYWF9JUlFfVklDMCgxMCkKKyNkZWZpbmUgSVJRX0VJTlQxMQkJUzVQQzFYWF9JUlFfVklDMCgxMSkKKyNkZWZpbmUgSVJRX0VJTlQxMgkJUzVQQzFYWF9JUlFfVklDMCgxMikKKyNkZWZpbmUgSVJRX0VJTlQxMwkJUzVQQzFYWF9JUlFfVklDMCgxMykKKyNkZWZpbmUgSVJRX0VJTlQxNAkJUzVQQzFYWF9JUlFfVklDMCgxNCkKKyNkZWZpbmUgSVJRX0VJTlQxNQkJUzVQQzFYWF9JUlFfVklDMCgxNSkKKyNkZWZpbmUgSVJRX0VJTlQxNl8zMQkJUzVQQzFYWF9JUlFfVklDMCgxNikKKyNkZWZpbmUgSVJRX0JBVEYJCVM1UEMxWFhfSVJRX1ZJQzAoMTcpCisjZGVmaW5lIElSUV9NRE1BCQlTNVBDMVhYX0lSUV9WSUMwKDE4KQorI2RlZmluZSBJUlFfUERNQTAJCVM1UEMxWFhfSVJRX1ZJQzAoMTkpCisjZGVmaW5lIElSUV9QRE1BMQkJUzVQQzFYWF9JUlFfVklDMCgyMCkKKyNkZWZpbmUgSVJRX1RJTUVSMAkJUzVQQzFYWF9JUlFfVklDMCgyMSkKKyNkZWZpbmUgSVJRX1RJTUVSMQkJUzVQQzFYWF9JUlFfVklDMCgyMikKKyNkZWZpbmUgSVJRX1RJTUVSMgkJUzVQQzFYWF9JUlFfVklDMCgyMykKKyNkZWZpbmUgSVJRX1RJTUVSMwkJUzVQQzFYWF9JUlFfVklDMCgyNCkKKyNkZWZpbmUgSVJRX1RJTUVSNAkJUzVQQzFYWF9JUlFfVklDMCgyNSkKKyNkZWZpbmUgSVJRX1NZU1RJTUVSCQlTNVBDMVhYX0lSUV9WSUMwKDI2KQorI2RlZmluZSBJUlFfV0RUCQkJUzVQQzFYWF9JUlFfVklDMCgyNykKKyNkZWZpbmUgSVJRX1JUQ19BTEFSTQkJUzVQQzFYWF9JUlFfVklDMCgyOCkKKyNkZWZpbmUgSVJRX1JUQ19USUMJCVM1UEMxWFhfSVJRX1ZJQzAoMjkpCisjZGVmaW5lIElSUV9HUElPSU5UCQlTNVBDMVhYX0lSUV9WSUMwKDMwKQorCisvKgorICogVklDMTogQVJNLCBwb3dlciwgbWVtb3J5LCBjb25uZWN0aXZpdHkKKyAqLworI2RlZmluZSBJUlFfQ09SVEVYMAkJUzVQQzFYWF9JUlFfVklDMSgwKQorI2RlZmluZSBJUlFfQ09SVEVYMQkJUzVQQzFYWF9JUlFfVklDMSgxKQorI2RlZmluZSBJUlFfQ09SVEVYMgkJUzVQQzFYWF9JUlFfVklDMSgyKQorI2RlZmluZSBJUlFfQ09SVEVYMwkJUzVQQzFYWF9JUlFfVklDMSgzKQorI2RlZmluZSBJUlFfQ09SVEVYNAkJUzVQQzFYWF9JUlFfVklDMSg0KQorI2RlZmluZSBJUlFfSUVNQVBDCQlTNVBDMVhYX0lSUV9WSUMxKDUpCisjZGVmaW5lIElSUV9JRU1JRUMJCVM1UEMxWFhfSVJRX1ZJQzEoNikKKyNkZWZpbmUgSVJRX09ORU5BTkQJCVM1UEMxWFhfSVJRX1ZJQzEoNykKKyNkZWZpbmUgSVJRX05GQwkJCVM1UEMxWFhfSVJRX1ZJQzEoOCkKKyNkZWZpbmUgSVJRX0NGQwkJCVM1UEMxWFhfSVJRX1ZJQzEoOSkKKyNkZWZpbmUgSVJRX1VBUlQwCQlTNVBDMVhYX0lSUV9WSUMxKDEwKQorI2RlZmluZSBJUlFfVUFSVDEJCVM1UEMxWFhfSVJRX1ZJQzEoMTEpCisjZGVmaW5lIElSUV9VQVJUMgkJUzVQQzFYWF9JUlFfVklDMSgxMikKKyNkZWZpbmUgSVJRX1VBUlQzCQlTNVBDMVhYX0lSUV9WSUMxKDEzKQorI2RlZmluZSBJUlFfSUlDCQkJUzVQQzFYWF9JUlFfVklDMSgxNCkKKyNkZWZpbmUgSVJRX1NQSTAJCVM1UEMxWFhfSVJRX1ZJQzEoMTUpCisjZGVmaW5lIElSUV9TUEkxCQlTNVBDMVhYX0lSUV9WSUMxKDE2KQorI2RlZmluZSBJUlFfU1BJMgkJUzVQQzFYWF9JUlFfVklDMSgxNykKKyNkZWZpbmUgSVJRX0lSREEJCVM1UEMxWFhfSVJRX1ZJQzEoMTgpCisjZGVmaW5lIElSUV9DQU4wCQlTNVBDMVhYX0lSUV9WSUMxKDE5KQorI2RlZmluZSBJUlFfQ0FOMQkJUzVQQzFYWF9JUlFfVklDMSgyMCkKKyNkZWZpbmUgSVJRX0hTSVJYCQlTNVBDMVhYX0lSUV9WSUMxKDIxKQorI2RlZmluZSBJUlFfSFNJVFgJCVM1UEMxWFhfSVJRX1ZJQzEoMjIpCisjZGVmaW5lIElSUV9VSE9TVAkJUzVQQzFYWF9JUlFfVklDMSgyMykKKyNkZWZpbmUgSVJRX09URwkJCVM1UEMxWFhfSVJRX1ZJQzEoMjQpCisjZGVmaW5lIElSUV9NU00JCQlTNVBDMVhYX0lSUV9WSUMxKDI1KQorI2RlZmluZSBJUlFfSFNNTUMwCQlTNVBDMVhYX0lSUV9WSUMxKDI2KQorI2RlZmluZSBJUlFfSFNNTUMxCQlTNVBDMVhYX0lSUV9WSUMxKDI3KQorI2RlZmluZSBJUlFfSFNNTUMyCQlTNVBDMVhYX0lSUV9WSUMxKDI4KQorI2RlZmluZSBJUlFfTUlQSUNTSQkJUzVQQzFYWF9JUlFfVklDMSgyOSkKKyNkZWZpbmUgSVJRX01JUElEU0kJCVM1UEMxWFhfSVJRX1ZJQzEoMzApCisKKy8qCisgKiBWSUMyOiBtdWx0aW1lZGlhLCBhdWRpbywgc2VjdXJpdHkKKyAqLworI2RlZmluZSBJUlFfTENEMAkJUzVQQzFYWF9JUlFfVklDMigwKQorI2RlZmluZSBJUlFfTENEMQkJUzVQQzFYWF9JUlFfVklDMigxKQorI2RlZmluZSBJUlFfTENEMgkJUzVQQzFYWF9JUlFfVklDMigyKQorI2RlZmluZSBJUlFfTENEMwkJUzVQQzFYWF9JUlFfVklDMigzKQorI2RlZmluZSBJUlFfUk9UQVRPUgkJUzVQQzFYWF9JUlFfVklDMig0KQorI2RlZmluZSBJUlFfRklNQzAJCVM1UEMxWFhfSVJRX1ZJQzIoNSkKKyNkZWZpbmUgSVJRX0ZJTUMxCQlTNVBDMVhYX0lSUV9WSUMyKDYpCisjZGVmaW5lIElSUV9GSU1DMgkJUzVQQzFYWF9JUlFfVklDMig3KQorI2RlZmluZSBJUlFfSlBFRwkJUzVQQzFYWF9JUlFfVklDMig4KQorI2RlZmluZSBJUlFfMkQJCQlTNVBDMVhYX0lSUV9WSUMyKDkpCisjZGVmaW5lIElSUV8zRAkJCVM1UEMxWFhfSVJRX1ZJQzIoMTApCisjZGVmaW5lIElSUV9NSVhFUgkJUzVQQzFYWF9JUlFfVklDMigxMSkKKyNkZWZpbmUgSVJRX0hETUkJCVM1UEMxWFhfSVJRX1ZJQzIoMTIpCisjZGVmaW5lIElSUV9JSUMxCQlTNVBDMVhYX0lSUV9WSUMyKDEzKQorI2RlZmluZSBJUlFfTUZDCQkJUzVQQzFYWF9JUlFfVklDMigxNCkKKyNkZWZpbmUgSVJRX1RWRU5DCQlTNVBDMVhYX0lSUV9WSUMyKDE1KQorI2RlZmluZSBJUlFfSTJTMAkJUzVQQzFYWF9JUlFfVklDMigxNikKKyNkZWZpbmUgSVJRX0kyUzEJCVM1UEMxWFhfSVJRX1ZJQzIoMTcpCisjZGVmaW5lIElSUV9JMlMyCQlTNVBDMVhYX0lSUV9WSUMyKDE4KQorI2RlZmluZSBJUlFfQUM5NwkJUzVQQzFYWF9JUlFfVklDMigxOSkKKyNkZWZpbmUgSVJRX1BDTTAJCVM1UEMxWFhfSVJRX1ZJQzIoMjApCisjZGVmaW5lIElSUV9QQ00xCQlTNVBDMVhYX0lSUV9WSUMyKDIxKQorI2RlZmluZSBJUlFfU1BESUYJCVM1UEMxWFhfSVJRX1ZJQzIoMjIpCisjZGVmaW5lIElSUV9BREMJCQlTNVBDMVhYX0lSUV9WSUMyKDIzKQorI2RlZmluZSBJUlFfUEVORE4JCVM1UEMxWFhfSVJRX1ZJQzIoMjQpCisjZGVmaW5lIElSUV9UQwkJCUlSUV9QRU5ETgorI2RlZmluZSBJUlFfS0VZUEFECQlTNVBDMVhYX0lSUV9WSUMyKDI1KQorI2RlZmluZSBJUlFfQ0cJCQlTNVBDMVhYX0lSUV9WSUMyKDI2KQorI2RlZmluZSBJUlFfU0VDCQkJUzVQQzFYWF9JUlFfVklDMigyNykKKyNkZWZpbmUgSVJRX1NFQ1JYCQlTNVBDMVhYX0lSUV9WSUMyKDI4KQorI2RlZmluZSBJUlFfU0VDVFgJCVM1UEMxWFhfSVJRX1ZJQzIoMjkpCisjZGVmaW5lIElSUV9TRE1JUlEJCVM1UEMxWFhfSVJRX1ZJQzIoMzApCisjZGVmaW5lIElSUV9TRE1GSVEJCVM1UEMxWFhfSVJRX1ZJQzIoMzEpCisKKyNkZWZpbmUgUzNDX0lSUV9FSU5UX0JBU0UJKElSUV9TRE1GSVEgKyAxKQorCisjZGVmaW5lIFMzQ19FSU5UKHgpCQkoKHgpICsgUzNDX0lSUV9FSU5UX0JBU0UpCisjZGVmaW5lIElSUV9FSU5UKHgpCQlTM0NfRUlOVCh4KQorCisjZGVmaW5lIE5SX0lSUVMgCQkoSVJRX0VJTlQoMzEpKzEpCisKKyNlbmRpZiAvKiBfX0FTTV9QTEFUX1M1UEMxWFhfSVJRU19IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9pbmNsdWRlL3BsYXQvcGxsLmggYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3BsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYWZlZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3BsbC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qIGFyY2gvYXJtL3BsYXQtczVwYzF4eC9pbmNsdWRlL3BsYXQvcGxsLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxWFggUExMIGNvZGUKKyAqCisgKiBCYXNlZCBvbiBwbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3BsbC5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgUzVQX1BMTF9NRElWX01BU0sJKCgxIDw8ICgyNS0xNisxKSkgLSAxKQorI2RlZmluZSBTNVBfUExMX1BESVZfTUFTSwkoKDEgPDwgKDEzLTgrMSkpIC0gMSkKKyNkZWZpbmUgUzVQX1BMTF9TRElWX01BU0sJKCgxIDw8ICgyLTArMSkpIC0gMSkKKyNkZWZpbmUgUzVQX1BMTF9NRElWX1NISUZUCSgxNikKKyNkZWZpbmUgUzVQX1BMTF9QRElWX1NISUZUCSg4KQorI2RlZmluZSBTNVBfUExMX1NESVZfU0hJRlQJKDApCisKKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHM1cGMxeHhfZ2V0X3BsbCh1bnNpZ25lZCBsb25nIGJhc2VjbGssCisJCQkJCSAgICB1MzIgcGxsY29uKQoreworCXUzMiBtZGl2LCBwZGl2LCBzZGl2OworCXU2NCBmdmNvID0gYmFzZWNsazsKKworCW1kaXYgPSAocGxsY29uID4+IFM1UF9QTExfTURJVl9TSElGVCkgJiBTNVBfUExMX01ESVZfTUFTSzsKKwlwZGl2ID0gKHBsbGNvbiA+PiBTNVBfUExMX1BESVZfU0hJRlQpICYgUzVQX1BMTF9QRElWX01BU0s7CisJc2RpdiA9IChwbGxjb24gPj4gUzVQX1BMTF9TRElWX1NISUZUKSAmIFM1UF9QTExfU0RJVl9NQVNLOworCisJZnZjbyAqPSBtZGl2OworCWRvX2RpdihmdmNvLCAocGRpdiA8PCBzZGl2KSk7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZnZjbzsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2luY2x1ZGUvcGxhdC9yZWdzLWNsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjODM5MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCkBAIC0wLDAgKzEsNDIxIEBACisvKiBhcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaAorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisgKglCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogUzVQQzFYWCBjbG9jayByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fUExBVF9SRUdTX0NMT0NLX0gKKyNkZWZpbmUgX19QTEFUX1JFR1NfQ0xPQ0tfSCBfX0ZJTEVfXworCisjZGVmaW5lIFM1UEMxWFhfQ0xLUkVHKHgpCQkoUzVQQzFYWF9WQV9DTEsgKyAoeCkpCisKKyNkZWZpbmUgUzVQQzFYWF9BUExMX0xPQ0sJCVM1UEMxWFhfQ0xLUkVHKDB4MDApCisjZGVmaW5lIFM1UEMxWFhfTVBMTF9MT0NLCQlTNVBDMVhYX0NMS1JFRygweDA0KQorI2RlZmluZSBTNVBDMVhYX0VQTExfTE9DSwkJUzVQQzFYWF9DTEtSRUcoMHgwOCkKKyNkZWZpbmUgUzVQQzEwMF9IUExMX0xPQ0sJCVM1UEMxWFhfQ0xLUkVHKDB4MEMpCisKKyNkZWZpbmUgUzVQQzFYWF9BUExMX0NPTgkJUzVQQzFYWF9DTEtSRUcoMHgxMDApCisjZGVmaW5lIFM1UEMxWFhfTVBMTF9DT04JCVM1UEMxWFhfQ0xLUkVHKDB4MTA0KQorI2RlZmluZSBTNVBDMVhYX0VQTExfQ09OCQlTNVBDMVhYX0NMS1JFRygweDEwOCkKKyNkZWZpbmUgUzVQQzEwMF9IUExMX0NPTgkJUzVQQzFYWF9DTEtSRUcoMHgxMEMpCisKKyNkZWZpbmUgUzVQQzFYWF9DTEtfU1JDMAkJUzVQQzFYWF9DTEtSRUcoMHgyMDApCisjZGVmaW5lIFM1UEMxWFhfQ0xLX1NSQzEJCVM1UEMxWFhfQ0xLUkVHKDB4MjA0KQorI2RlZmluZSBTNVBDMVhYX0NMS19TUkMyCQlTNVBDMVhYX0NMS1JFRygweDIwOCkKKyNkZWZpbmUgUzVQQzFYWF9DTEtfU1JDMwkJUzVQQzFYWF9DTEtSRUcoMHgyMEMpCisKKyNkZWZpbmUgUzVQQzFYWF9DTEtfRElWMAkJUzVQQzFYWF9DTEtSRUcoMHgzMDApCisjZGVmaW5lIFM1UEMxWFhfQ0xLX0RJVjEJCVM1UEMxWFhfQ0xLUkVHKDB4MzA0KQorI2RlZmluZSBTNVBDMVhYX0NMS19ESVYyCQlTNVBDMVhYX0NMS1JFRygweDMwOCkKKyNkZWZpbmUgUzVQQzFYWF9DTEtfRElWMwkJUzVQQzFYWF9DTEtSRUcoMHgzMEMpCisjZGVmaW5lIFM1UEMxWFhfQ0xLX0RJVjQJCVM1UEMxWFhfQ0xLUkVHKDB4MzEwKQorCisjZGVmaW5lIFM1UEMxMDBfQ0xLX09VVAkJCVM1UEMxWFhfQ0xLUkVHKDB4NDAwKQorCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMDAJCVM1UEMxWFhfQ0xLUkVHKDB4NTAwKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAxCQlTNVBDMVhYX0NMS1JFRygweDUwNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QwMgkJUzVQQzFYWF9DTEtSRUcoMHg1MDgpCisKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMAkJUzVQQzFYWF9DTEtSRUcoMHg1MjApCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTEJCVM1UEMxWFhfQ0xLUkVHKDB4NTI0KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEyCQlTNVBDMVhYX0NMS1JFRygweDUyOCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMwkJUzVQQzFYWF9DTEtSRUcoMHg1MkMpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTQJCVM1UEMxWFhfQ0xLUkVHKDB4NTMwKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE1CQlTNVBDMVhYX0NMS1JFRygweDUzNCkKKworI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDIwCQlTNVBDMVhYX0NMS1JFRygweDU0MCkKKworI2RlZmluZSBTNVBDMTAwX1NDTEtHQVRFMAkJUzVQQzFYWF9DTEtSRUcoMHg1NjApCisjZGVmaW5lIFM1UEMxMDBfU0NMS0dBVEUxCQlTNVBDMVhYX0NMS1JFRygweDU2NCkKKworI2RlZmluZSBTNVBDMTAwX09USEVSUyAgICAgICAgICBTNVBDMVhYX0NMS1JFRygweDgyMDApCisKKyNkZWZpbmUgUzVQQzFYWF9FUExMX0VOICAgICAoMTw8MzEpCisjZGVmaW5lIFM1UEMxWFhfRVBMTF9NQVNLICAgMHhmZmZmZmZmZgorI2RlZmluZSBTNVBDMVhYX0VQTExWQUwoX20sIF9wLCBfcykgICAoKF9tKSA8PCAxNiB8ICgoX3ApIDw8IDgpIHwgKChfcykpKQorCisvKiBDTEtTUkMwICovCisjZGVmaW5lIFM1UEMxWFhfQ0xLU1JDMF9BUExMX01BU0sJCSgweDE8PDApCisjZGVmaW5lIFM1UEMxWFhfQ0xLU1JDMF9BUExMX1NISUZUCQkoMCkKKyNkZWZpbmUgUzVQQzFYWF9DTEtTUkMwX01QTExfTUFTSwkJKDB4MTw8NCkKKyNkZWZpbmUgUzVQQzFYWF9DTEtTUkMwX01QTExfU0hJRlQJCSg0KQorI2RlZmluZSBTNVBDMVhYX0NMS1NSQzBfRVBMTF9NQVNLCQkoMHgxPDw4KQorI2RlZmluZSBTNVBDMVhYX0NMS1NSQzBfRVBMTF9TSElGVAkJKDgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMF9IUExMX01BU0sJCSgweDE8PDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzBfSFBMTF9TSElGVAkJKDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzBfQU1NVVhfTUFTSwkJKDB4MTw8MTYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMF9BTU1VWF9TSElGVAkJKDE2KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzBfSFJFRl9NQVNLCQkoMHgxPDwyMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMwX0hSRUZfU0hJRlQJCSgyMCkKKyNkZWZpbmUgUzVQQzFYWF9DTEtTUkMwX09ORU5BTkRfTUFTSwkoMHgxPDwyNCkKKyNkZWZpbmUgUzVQQzFYWF9DTEtTUkMwX09ORU5BTkRfU0hJRlQJKDI0KQorCisKKy8qIENMS1NSQzEgKi8KKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMxX1VBUlRfTUFTSwkJKDB4MTw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMxX1VBUlRfU0hJRlQJCSgwKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfU1BJMF9NQVNLCQkoMHgzPDw0KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfU1BJMF9TSElGVAkJKDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMV9TUEkxX01BU0sJCSgweDM8PDgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMV9TUEkxX1NISUZUCQkoOCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMxX1NQSTJfTUFTSwkJKDB4Mzw8MTIpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMV9TUEkyX1NISUZUCQkoMTIpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMV9JUkRBX01BU0sJCSgweDM8PDE2KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfSVJEQV9TSElGVAkJKDE2KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfVUhPU1RfTUFTSwkJKDB4Mzw8MjApCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMV9VSE9TVF9TSElGVAkJKDIwKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfQ0xLNDhNX01BU0sJCSgweDE8PDI0KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfQ0xLNDhNX1NISUZUCSgyNCkKKworLyogQ0xLU1JDMiAqLworI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfTU1DMF9NQVNLCQkoMHgzPDwwKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfTU1DMF9TSElGVAkJKDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9NTUMxX01BU0sJCSgweDM8PDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9NTUMxX1NISUZUCQkoNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX01NQzJfTUFTSwkJKDB4Mzw8OCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX01NQzJfU0hJRlQJCSg4KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfTENEX01BU0sJCSgweDM8PDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfTENEX1NISUZUCQkoMTIpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9GSU1DMF9NQVNLCQkoMHgzPDwxNikKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX0ZJTUMwX1NISUZUCQkoMTYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9GSU1DMV9NQVNLCQkoMHgzPDwyMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX0ZJTUMxX1NISUZUCQkoMjApCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9GSU1DMl9NQVNLCQkoMHgzPDwyNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX0ZJTUMyX1NISUZUCQkoMjQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9NSVhFUl9NQVNLCQkoMHgzPDwyOCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX01JWEVSX1NISUZUCQkoMjgpCisKKy8qIENMS1NSQzMgKi8KKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX1BXSV9NQVNLCQkoMHgzPDwwKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfUFdJX1NISUZUCQkoMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX0hDTEtEMl9NQVNLCQkoMHgxPDw0KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfSENMS0QyX1NISUZUCSg0KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfSTJTRDJfTUFTSwkJKDB4Mzw8OCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX0kyU0QyX1NISUZUCQkoOCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX0FVRElPMF9NQVNLCQkoMHg3PDwxMikKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX0FVRElPMF9TSElGVAkoMTIpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDM19BVURJTzFfTUFTSwkJKDB4Nzw8MTYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDM19BVURJTzFfU0hJRlQJKDE2KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfQVVESU8yX01BU0sJCSgweDc8PDIwKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfQVVESU8yX1NISUZUCSgyMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX1NQRElGX01BU0sJCSgweDM8PDI0KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfU1BESUZfU0hJRlQJCSgyNCkKKworCisvKiBDTEtESVYwICovCisjZGVmaW5lIFM1UEMxWFhfQ0xLRElWMF9BUExMX01BU0sJCSgweDE8PDApCisjZGVmaW5lIFM1UEMxWFhfQ0xLRElWMF9BUExMX1NISUZUCQkoMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYwX0FSTV9NQVNLCQkoMHg3PDw0KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjBfQVJNX1NISUZUCQkoNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYwX0QwX01BU0sJCSgweDc8PDgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMF9EMF9TSElGVAkJKDgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMF9QQ0xLRDBfTUFTSwkJKDB4Nzw8MTIpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMF9QQ0xLRDBfU0hJRlQJKDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjBfU0VDU1NfTUFTSwkJKDB4Nzw8MTYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMF9TRUNTU19TSElGVAkJKDE2KQorCisvKiBDTEtESVYxICovCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMV9BTV9NQVNLCQkoMHg3PDwwKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfQU1fU0hJRlQJCSgwKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfTVBMTF9NQVNLCQkoMHgzPDw0KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfTVBMTF9TSElGVAkJKDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMV9NUExMMl9NQVNLCQkoMHgxPDw4KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfTVBMTDJfU0hJRlQJCSg4KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfRDFfTUFTSwkJKDB4Nzw8MTIpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMV9EMV9TSElGVAkJKDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfUENMS0QxX01BU0sJCSgweDc8PDE2KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfUENMS0QxX1NISUZUCSgxNikKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX09ORU5BTkRfTUFTSwkoMHgzPDwyMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX09ORU5BTkRfU0hJRlQJKDIwKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfQ0FNX01BU0sJCSgweDFGPDwyNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX0NBTV9TSElGVAkJKDI0KQorCisvKiBDTEtESVYyICovCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMl9VQVJUX01BU0sJCSgweDc8PDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMl9VQVJUX1NISUZUCQkoMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX1NQSTBfTUFTSwkJKDB4Zjw8NCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX1NQSTBfU0hJRlQJCSg0KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjJfU1BJMV9NQVNLCQkoMHhmPDw4KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjJfU1BJMV9TSElGVAkJKDgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMl9TUEkyX01BU0sJCSgweGY8PDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjJfU1BJMl9TSElGVAkJKDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjJfSVJEQV9NQVNLCQkoMHhmPDwxNikKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX0lSREFfU0hJRlQJCSgxNikKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX1VIT1NUX01BU0sJCSgweGY8PDIwKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjJfVUhPU1RfU0hJRlQJCSgyMCkKKworLyogQ0xLRElWMyAqLworI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfTU1DMF9NQVNLCQkoMHhmPDwwKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfTU1DMF9TSElGVAkJKDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19NTUMxX01BU0sJCSgweGY8PDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19NTUMxX1NISUZUCQkoNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX01NQzJfTUFTSwkJKDB4Zjw8OCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX01NQzJfU0hJRlQJCSg4KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfTENEX01BU0sJCSgweGY8PDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfTENEX1NISUZUCQkoMTIpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19GSU1DMF9NQVNLCQkoMHhmPDwxNikKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX0ZJTUMwX1NISUZUCQkoMTYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19GSU1DMV9NQVNLCQkoMHhmPDwyMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX0ZJTUMxX1NISUZUCQkoMjApCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19GSU1DMl9NQVNLCQkoMHhmPDwyNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX0ZJTUMyX1NISUZUCQkoMjQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19IRE1JX01BU0sJCSgweGY8PDI4KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfSERNSV9TSElGVAkJKDI4KQorCisvKiBDTEtESVY0ICovCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9QV0lfTUFTSwkJKDB4Nzw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVY0X1BXSV9TSElGVAkJKDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9IQ0xLRDJfTUFTSwkJKDB4Nzw8NCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVY0X0hDTEtEMl9TSElGVAkoNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVY0X0kyU0QyX01BU0sJCSgweGY8PDgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9JMlNEMl9TSElGVAkJKDgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9BVURJTzBfTUFTSwkJKDB4Zjw8MTIpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9BVURJTzBfU0hJRlQJKDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjRfQVVESU8xX01BU0sJCSgweGY8PDE2KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjRfQVVESU8xX1NISUZUCSgxNikKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVY0X0FVRElPMl9NQVNLCQkoMHhmPDwyMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVY0X0FVRElPMl9TSElGVAkoMjApCisKKworLyogSENMS0QwL1BDTEtEMCBDbG9jayBHYXRlIDAgUmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMDBfSU5UQwkJKDE8PDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMDBfVFpJQwkJKDE8PDEpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMDBfQ0ZDT04JCSgxPDwyKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAwX01ETUEJCSgxPDwzKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAwX0cyRAkJKDE8PDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMDBfU0VDU1MJCSgxPDw1KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAwX0NTU1lTCQkoMTw8NikKKworLyogSENMS0QwL1BDTEtEMCBDbG9jayBHYXRlIDEgUmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMDFfRE1DCQkoMTw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QwMV9TUk9NQwkJKDE8PDEpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMDFfT05FTkFORAkJKDE8PDIpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMDFfTkZDT04JCSgxPDwzKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAxX0lOVE1FTQkJKDE8PDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMDFfRUJJCQkoMTw8NSkKKworLyogUENMS0QwIENsb2NrIEdhdGUgMiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QwMl9TRUNLRVkJCSgxPDwxKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAyX1NETQkJKDE8PDIpCisKKy8qIEhDTEtEMS9QQ0xLRDEgQ2xvY2sgR2F0ZSAwIFJlZ2lzdGVycyAqLworI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEwX1BETUEwCQkoMTw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMF9QRE1BMQkJKDE8PDEpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTBfVVNCSE9TVAkJKDE8PDIpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTBfVVNCT1RHCQkoMTw8MykKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMF9NT0RFTUlGCQkoMTw8NCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMF9IU01NQzAJCSgxPDw1KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEwX0hTTU1DMQkJKDE8PDYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTBfSFNNTUMyCQkoMTw8NykKKworLyogSENMS0QxL1BDTEtEMSBDbG9jayBHYXRlIDEgUmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTFfTENECQkoMTw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMV9ST1RBVE9SCQkoMTw8MSkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMV9GSU1DMAkJKDE8PDIpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTFfRklNQzEJCSgxPDwzKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDExX0ZJTUMyCQkoMTw8NCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMV9KUEVHCQkoMTw8NSkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMV9EU0kJCSgxPDw2KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDExX0NTSQkJKDE8PDcpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTFfRzNECQkoMTw8OCkKKworLyogSENMS0QxL1BDTEtEMSBDbG9jayBHYXRlIDIgUmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTJfVFYJCSgxPDwwKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEyX1ZQCQkoMTw8MSkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMl9NSVhFUgkJKDE8PDIpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTJfSERNSQkJKDE8PDMpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTJfTUZDCQkoMTw8NCkKKworLyogSENMS0QxL1BDTEtEMSBDbG9jayBHYXRlIDMgUmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTNfQ0hJUElECQkoMTw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxM19HUElPCQkoMTw8MSkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxM19BUEMJCSgxPDwyKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEzX0lFQwkJKDE8PDMpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTNfUFdNCQkoMTw8NikKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxM19TWVNUSU1FUgkoMTw8NykKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxM19XRFQJCSgxPDw4KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEzX1JUQwkJKDE8PDkpCisKKy8qIEhDTEtEMS9QQ0xLRDEgQ2xvY2sgR2F0ZSA0IFJlZ2lzdGVycyAqLworI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE0X1VBUlQwCQkoMTw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNF9VQVJUMQkJKDE8PDEpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTRfVUFSVDIJCSgxPDwyKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE0X1VBUlQzCQkoMTw8MykKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNF9JSUMJCSgxPDw0KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE0X0hETUlfSUlDCSgxPDw1KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE0X1NQSTAJCSgxPDw2KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE0X1NQSTEJCSgxPDw3KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE0X1NQSTIJCSgxPDw4KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE0X0lSREEJCSgxPDw5KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE0X0NDQU4wCQkoMTw8MTApCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTRfQ0NBTjEJCSgxPDwxMSkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNF9IU0lUWAkJKDE8PDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE0X0hTSVJYCQkoMTw8MTMpCisKKy8qIEhDTEtEMS9QQ0xLRDEgQ2xvY2sgR2F0ZSA1IFJlZ2lzdGVycyAqLworI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE1X0lJUzAJCSgxPDwwKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE1X0lJUzEJCSgxPDwxKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE1X0lJUzIJCSgxPDwyKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE1X0FDOTcJCSgxPDwzKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE1X1BDTTAJCSgxPDw0KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE1X1BDTTEJCSgxPDw1KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE1X1NQRElGCQkoMTw8NikKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNV9UU0FEQwkJKDE8PDcpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTVfS0VZSUYJCSgxPDw4KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE1X0NHCQkoMTw8OSkKKworLyogSENMS0QyIENsb2NrIEdhdGUgMCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QyMF9IQ0xLRDIJCSgxPDwwKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDIwX0kyU0QyCQkoMTw8MSkKKworLyogU3BlY2lhbCBDbG9jayBHYXRlIDAgUmVnaXN0ZXJzICovCisjZGVmaW5lCVM1UEMxWFhfQ0xLR0FURV9TQ0xLMF9IUE0JCSgxPDwwKQorI2RlZmluZQlTNVBDMVhYX0NMS0dBVEVfU0NMSzBfUFdJCQkoMTw8MSkKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEswX09ORU5BTkQJKDE8PDIpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9VQVJUCQkoMTw8MykKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEswX1NQSTAJCSgxPDw0KQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzBfU1BJMQkJKDE8PDUpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9TUEkyCQkoMTw8NikKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEswX1NQSTBfNDgJKDE8PDcpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9TUEkxXzQ4CSgxPDw4KQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzBfU1BJMl80OAkoMTw8OSkKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEswX0lSREEJCSgxPDwxMCkKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEswX1VTQkhPU1QJKDE8PDExKQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzBfTU1DMAkJKDE8PDEyKQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzBfTU1DMQkJKDE8PDEzKQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzBfTU1DMgkJKDE8PDE0KQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzBfTU1DMF80OAkoMTw8MTUpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9NTUMxXzQ4CSgxPDwxNikKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzJfNDgJKDE8PDE3KQorCisvKiBTcGVjaWFsIENsb2NrIEdhdGUgMSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEsxX0xDRAkJKDE8PDApCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9GSU1DMAkJKDE8PDEpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9GSU1DMQkJKDE8PDIpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9GSU1DMgkJKDE8PDMpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9UVjU0CQkoMTw8NCkKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEsxX1ZEQUM1NAkoMTw8NSkKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEsxX01JWEVSCQkoMTw8NikKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEsxX0hETUkJCSgxPDw3KQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzFfQVVESU8wCSgxPDw4KQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzFfQVVESU8xCSgxPDw5KQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzFfQVVESU8yCSgxPDwxMCkKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEsxX1NQRElGCQkoMTw8MTEpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9DQU0JCSgxPDwxMikKKworLyogcmVnaXN0ZXIgZm9yIHBvd2VyIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgUzVQQzEwMF9QV1JfQ0ZHIAkJUzVQQzFYWF9DTEtSRUcoMHg4MDAwKQorI2RlZmluZSBTNVBDMTAwX0VJTlRfV0FLRVVQX01BU0sgCVM1UEMxWFhfQ0xLUkVHKDB4ODAwNCkKKyNkZWZpbmUgUzVQQzEwMF9OT1JNQUxfQ0ZHIAkJUzVQQzFYWF9DTEtSRUcoMHg4MDEwKQorI2RlZmluZSBTNVBDMTAwX1NUT1BfQ0ZHIAkJUzVQQzFYWF9DTEtSRUcoMHg4MDE0KQorI2RlZmluZSBTNVBDMTAwX1NMRUVQX0NGRyAJCVM1UEMxWFhfQ0xLUkVHKDB4ODAxOCkKKyNkZWZpbmUgUzVQQzEwMF9TVE9QX01FTV9DRkcgCVM1UEMxWFhfQ0xLUkVHKDB4ODAxQykKKyNkZWZpbmUgUzVQQzEwMF9PU0NfRlJFUSAJCVM1UEMxWFhfQ0xLUkVHKDB4ODEwMCkKKyNkZWZpbmUgUzVQQzEwMF9PU0NfU1RBQkxFIAkJUzVQQzFYWF9DTEtSRUcoMHg4MTA0KQorI2RlZmluZSBTNVBDMTAwX1BXUl9TVEFCTEUgCQlTNVBDMVhYX0NMS1JFRygweDgxMDgpCisjZGVmaW5lIFM1UEMxMDBfTVRDX1NUQUJMRSAJCVM1UEMxWFhfQ0xLUkVHKDB4ODExMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEFNUF9TVEFCTEUgCVM1UEMxWFhfQ0xLUkVHKDB4ODExNCkKKyNkZWZpbmUgUzVQQzEwMF9PVEhFUlMgCQlTNVBDMVhYX0NMS1JFRygweDgyMDApCisjZGVmaW5lIFM1UEMxMDBfUlNUX1NUQVQgCQlTNVBDMVhYX0NMS1JFRygweDgzMDApCisjZGVmaW5lIFM1UEMxMDBfV0FLRVVQX1NUQVQgCVM1UEMxWFhfQ0xLUkVHKDB4ODMwNCkKKyNkZWZpbmUgUzVQQzEwMF9CTEtfUFdSX1NUQVQgCVM1UEMxWFhfQ0xLUkVHKDB4ODMwOCkKKyNkZWZpbmUgUzVQQzEwMF9JTkZPUk0wIAkJUzVQQzFYWF9DTEtSRUcoMHg4NDAwKQorI2RlZmluZSBTNVBDMTAwX0lORk9STTEgCQlTNVBDMVhYX0NMS1JFRygweDg0MDQpCisjZGVmaW5lIFM1UEMxMDBfSU5GT1JNMiAJCVM1UEMxWFhfQ0xLUkVHKDB4ODQwOCkKKyNkZWZpbmUgUzVQQzEwMF9JTkZPUk0zIAkJUzVQQzFYWF9DTEtSRUcoMHg4NDBDKQorI2RlZmluZSBTNVBDMTAwX0lORk9STTQgCQlTNVBDMVhYX0NMS1JFRygweDg0MTApCisjZGVmaW5lIFM1UEMxMDBfSU5GT1JNNSAJCVM1UEMxWFhfQ0xLUkVHKDB4ODQxNCkKKyNkZWZpbmUgUzVQQzEwMF9JTkZPUk02IAkJUzVQQzFYWF9DTEtSRUcoMHg4NDE4KQorI2RlZmluZSBTNVBDMTAwX0lORk9STTcgCQlTNVBDMVhYX0NMS1JFRygweDg0MUMpCisjZGVmaW5lIFM1UEMxMDBfRENHSURYX01BUDAgCVM1UEMxWFhfQ0xLUkVHKDB4ODUwMCkKKyNkZWZpbmUgUzVQQzEwMF9EQ0dJRFhfTUFQMSAJUzVQQzFYWF9DTEtSRUcoMHg4NTA0KQorI2RlZmluZSBTNVBDMTAwX0RDR0lEWF9NQVAyIAlTNVBDMVhYX0NMS1JFRygweDg1MDgpCisjZGVmaW5lIFM1UEMxMDBfRENHUEVSRl9NQVAwIAlTNVBDMVhYX0NMS1JFRygweDg1MEMpCisjZGVmaW5lIFM1UEMxMDBfRENHUEVSRl9NQVAxIAlTNVBDMVhYX0NMS1JFRygweDg1MTApCisjZGVmaW5lIFM1UEMxMDBfRFZDSURYX01BUCAJCVM1UEMxWFhfQ0xLUkVHKDB4ODUxNCkKKyNkZWZpbmUgUzVQQzEwMF9GUkVRX0NQVSAJCVM1UEMxWFhfQ0xLUkVHKDB4ODUxOCkKKyNkZWZpbmUgUzVQQzEwMF9GUkVRX0RQTSAJCVM1UEMxWFhfQ0xLUkVHKDB4ODUxQykKKyNkZWZpbmUgUzVQQzEwMF9EVlNFTUNMS19FTiAJUzVQQzFYWF9DTEtSRUcoMHg4NTIwKQorI2RlZmluZSBTNVBDMTAwX0FQTExfQ09OX0w4IAlTNVBDMVhYX0NMS1JFRygweDg2MDApCisjZGVmaW5lIFM1UEMxMDBfQVBMTF9DT05fTDcgCVM1UEMxWFhfQ0xLUkVHKDB4ODYwNCkKKyNkZWZpbmUgUzVQQzEwMF9BUExMX0NPTl9MNiAJUzVQQzFYWF9DTEtSRUcoMHg4NjA4KQorI2RlZmluZSBTNVBDMTAwX0FQTExfQ09OX0w1IAlTNVBDMVhYX0NMS1JFRygweDg2MEMpCisjZGVmaW5lIFM1UEMxMDBfQVBMTF9DT05fTDQgCVM1UEMxWFhfQ0xLUkVHKDB4ODYxMCkKKyNkZWZpbmUgUzVQQzEwMF9BUExMX0NPTl9MMyAJUzVQQzFYWF9DTEtSRUcoMHg4NjE0KQorI2RlZmluZSBTNVBDMTAwX0FQTExfQ09OX0wyIAlTNVBDMVhYX0NMS1JFRygweDg2MTgpCisjZGVmaW5lIFM1UEMxMDBfQVBMTF9DT05fTDEgCVM1UEMxWFhfQ0xLUkVHKDB4ODYxQykKKyNkZWZpbmUgUzVQQzEwMF9JRU1fQ09OVFJPTCAJUzVQQzFYWF9DTEtSRUcoMHg4NjIwKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVl9JRU1fTDggCVM1UEMxWFhfQ0xLUkVHKDB4ODcwMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVZfSUVNX0w3IAlTNVBDMVhYX0NMS1JFRygweDg3MDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWX0lFTV9MNiAJUzVQQzFYWF9DTEtSRUcoMHg4NzA4KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVl9JRU1fTDUgCVM1UEMxWFhfQ0xLUkVHKDB4ODcwQykKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVZfSUVNX0w0IAlTNVBDMVhYX0NMS1JFRygweDg3MTApCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWX0lFTV9MMyAJUzVQQzFYWF9DTEtSRUcoMHg4NzE0KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVl9JRU1fTDIgCVM1UEMxWFhfQ0xLUkVHKDB4ODcxOCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVZfSUVNX0wxIAlTNVBDMVhYX0NMS1JFRygweDg3MUMpCisjZGVmaW5lIFM1UEMxMDBfSUVNX0hQTUNMS19ESVYgCVM1UEMxWFhfQ0xLUkVHKDB4ODcyNCkKKworI2RlZmluZSBTNVBDMTAwX1NXUkVTRVQJCVM1UEMxWFhfQ0xLUkVHKDB4MTAwMDAwKQorI2RlZmluZSBTNVBDMTAwX09ORF9TV1JFU0VUCQlTNVBDMVhYX0NMS1JFRygweDEwMDAwOCkKKyNkZWZpbmUgUzVQQzEwMF9HRU5fQ1RSTAkJUzVQQzFYWF9DTEtSRUcoMHgxMDAxMDApCisjZGVmaW5lIFM1UEMxMDBfR0VOX1NUQVRVUwkJUzVQQzFYWF9DTEtSRUcoMHgxMDAxMDQpCisjZGVmaW5lIFM1UEMxMDBfTUVNX1NZU19DRkcJCVM1UEMxWFhfQ0xLUkVHKDB4MTAwMjAwKQorI2RlZmluZSBTNVBDMTAwX0NBTV9NVVhfU0VMCQlTNVBDMVhYX0NMS1JFRygweDEwMDMwMCkKKyNkZWZpbmUgUzVQQzEwMF9NSVhFUl9PVVRfU0VMCVM1UEMxWFhfQ0xLUkVHKDB4MTAwMzA0KQorI2RlZmluZSBTNVBDMTAwX0xQTVBfTU9ERV9TRUwJUzVQQzFYWF9DTEtSRUcoMHgxMDAzMDgpCisjZGVmaW5lIFM1UEMxMDBfTUlQSV9QSFlfQ09OMAlTNVBDMVhYX0NMS1JFRygweDEwMDQwMCkKKyNkZWZpbmUgUzVQQzEwMF9NSVBJX1BIWV9DT04xCVM1UEMxWFhfQ0xLUkVHKDB4MTAwNDE0KQorI2RlZmluZSBTNVBDMTAwX0hETUlfUEhZX0NPTjAJUzVQQzFYWF9DTEtSRUcoMHgxMDA0MjApCisKKyNkZWZpbmUgUzVQQzEwMF9DRkdfV0ZJX0NMRUFOCSh+KDM8PDUpKQorI2RlZmluZSBTNVBDMTAwX0NGR19XRklfSURMRQkoMTw8NSkKKyNkZWZpbmUgUzVQQzEwMF9DRkdfV0ZJX1NUT1AJKDI8PDUpCisjZGVmaW5lIFM1UEMxMDBfQ0ZHX1dGSV9TTEVFUAkoMzw8NSkKKworI2RlZmluZSBTNVBDMTAwX09USEVSX1NZU19JTlQJMjQKKyNkZWZpbmUgUzVQQzEwMF9PVEhFUl9TVEFfVFlQRQkyMworI2RlZmluZSBTVEFfVFlQRV9FWFBPTgkJMAorI2RlZmluZSBTVEFfVFlQRV9TRlIJCTEKKworI2RlZmluZSBTNVBDMTAwX1BXUl9TVEFfRVhQX1NDQUxFCTAKKyNkZWZpbmUgUzVQQzEwMF9QV1JfU1RBX0NOVAkJNAorCisjZGVmaW5lIFM1UEMxMDBfUFdSX1NUQUJMRV9DT1VOVAk4NTUwMAorCisjZGVmaW5lIFM1UEMxMDBfU0xFRVBfQ0ZHX09TQ19FTgkwCisKKy8qIE9USEVSUyBSZXNnaXN0ZXIgKi8KKyNkZWZpbmUgUzVQQzEwMF9PVEhFUlNfVVNCX1NJR19NQVNLIAkoMSA8PCAxNikKKyNkZWZpbmUgUzVQQzEwMF9PVEhFUlNfTUlQSV9EUEhZX0VOCQkoMSA8PCAyOCkKKworLyogTUlQSSBELVBIWSBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgUzVQQzEwMF9NSVBJX1BIWV9DT04wX01fUkVTRVROCSgxIDw8IDEpCisjZGVmaW5lIFM1UEMxMDBfTUlQSV9QSFlfQ09OMF9TX1JFU0VUTgkoMSA8PCAwKQorCisjZW5kaWYgLyogX1BMQVRfUkVHU19DTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3M1cGMxMDAuaCBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9pbmNsdWRlL3BsYXQvczVwYzEwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZTI3NTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3M1cGMxMDAuaApAQCAtMCwwICsxLDY1IEBACisvKiBhcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3M1cGMxMDAuaAorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisgKglCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogSGVhZGVyIGZpbGUgZm9yIHM1cGMxMDAgY3B1IHN1cHBvcnQKKyAqCisgKiBCYXNlZCBvbiBwbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3MzYzY0MDAuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKiBDb21tb24gaW5pdCBjb2RlIGZvciBTNVBDMTAwIHJlbGF0ZWQgU29DcyAqLworZXh0ZXJuICBpbnQgczVwYzEwMF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgczVwYzEwMF9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBzNXBjMTAwX2luaXRfY2xvY2tzKGludCB4dGFsKTsKK2V4dGVybiAgaW50IHM1cGMxMDBfcmVnaXN0ZXJfYmFzZWNsb2Nrcyh1bnNpZ25lZCBsb25nIHh0YWwpOworZXh0ZXJuIHZvaWQgczVwYzEwMF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIHM1cGMxMDBfaW5pdF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpOworZXh0ZXJuIHZvaWQgczVwYzEwMF9jb21tb25faW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubyk7CitleHRlcm4gdm9pZCBzNXBjMTAwX3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiB2b2lkIHM1cGMxMDBfc2V0dXBfY2xvY2tzKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczVwYzEwMF9zeXNjbGFzczsKKworI2RlZmluZSBzNXBjMTAwX2luaXRfdWFydHMgczVwYzEwMF9jb21tb25faW5pdF91YXJ0cworCisvKiBTb21lIGRheSwgYmVsb3dzIHdpbGwgYmUgbW92ZWQgdG8gcGxhdC1zNXBjL2luY2x1ZGUvcGxhdC9jcHUuaCAqLworZXh0ZXJuIHZvaWQgczVwYzF4eF9pbml0X2lycSh1MzIgKnZpY192YWxpZCwgaW50IG51bSk7CitleHRlcm4gdm9pZCBzNXBjMXh4X2luaXRfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKTsKKworLyogU29tZSBkYXksIGJlbG93cyB3aWxsIGJlIG1vdmVkIHRvIHBsYXQtczVwYy9pbmNsdWRlL3BsYXQvY2xvY2suaCAqLworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX2hwbGw7CitleHRlcm4gc3RydWN0IGNsayBjbGtfaGQwOworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX3BkMDsKK2V4dGVybiBzdHJ1Y3QgY2xrIGNsa181NG07CitleHRlcm4gc3RydWN0IGNsayBjbGtfZG91dF9tcGxsMjsKK2V4dGVybiB2b2lkIHM1cGMxeHhfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpOworZXh0ZXJuIGludCBzNXBjMXh4X3NjbGswX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKK2V4dGVybiBpbnQgczVwYzF4eF9zY2xrMV9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSk7CisKKy8qIFNvbWUgZGF5LCBiZWxvd3Mgd2lsbCBiZSBtb3ZlZCB0byBwbGF0LXM1cGMvaW5jbHVkZS9wbGF0L2RldnMuaCAqLworZXh0ZXJuIHN0cnVjdCBzM2MyNHh4X3VhcnRfcmVzb3VyY2VzIHM1cGMxeHhfdWFydF9yZXNvdXJjZXNbXTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfZzJkOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9nM2Q7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3ZwcDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdHZlbmM7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3R2c2NhbGVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9yb3RhdG9yOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9qcGVnOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9vbmVuYW5kOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV91c2Jfb3RnaGNkOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9rZXlwYWQ7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3RzOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9nM2Q7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3NtYzkxMXg7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2ZpbWMwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9maW1jMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfbWZjOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9hYzk3OworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9maW1jMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfZmltYzE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2ZpbWMyOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaXJxLmMgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkNmRkOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9pcnEuYwpAQCAtMCwwICsxLDI1OSBAQAorLyogYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2lycS5jCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqICAgICAgQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxWFggLSBJbnRlcnJ1cHQgaGFuZGxpbmcKKyAqCisgKiBCYXNlZCBvbiBwbGF0LXMzYzY0eHgvaXJxLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtdGltZXIuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorCisvKiBUaW1lciBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KKworc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF90aW1lcih1bnNpZ25lZCBpbnQgYmFzZV9pcnEsIHVuc2lnbmVkIGludCBzdWJfaXJxKQoreworCWdlbmVyaWNfaGFuZGxlX2lycShzdWJfaXJxKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF90aW1lcjAodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXMzY19pcnFfZGVtdXhfdGltZXIoaXJxLCBJUlFfVElNRVIwKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF90aW1lcjEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXMzY19pcnFfZGVtdXhfdGltZXIoaXJxLCBJUlFfVElNRVIxKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF90aW1lcjIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXMzY19pcnFfZGVtdXhfdGltZXIoaXJxLCBJUlFfVElNRVIyKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF90aW1lcjModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXMzY19pcnFfZGVtdXhfdGltZXIoaXJxLCBJUlFfVElNRVIzKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF90aW1lcjQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXMzY19pcnFfZGVtdXhfdGltZXIoaXJxLCBJUlFfVElNRVI0KTsKK30KKworLyogV2UgYXNzdW1lIHRoZSBJUlFfVElNRVIwLi5JUlFfVElNRVI0IHJhbmdlIGlzIGNvbnRpbnVvdXMuICovCisKK3N0YXRpYyB2b2lkIHMzY19pcnFfdGltZXJfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXUzMiByZWcgPSBfX3Jhd19yZWFkbChTM0M2NFhYX1RJTlRfQ1NUQVQpOworCisJcmVnICY9IDB4MWY7ICAvKiBtYXNrIG91dCBwZW5kaW5nIGludGVycnVwdHMgKi8KKwlyZWcgJj0gfigxIDw8IChpcnEgLSBJUlFfVElNRVIwKSk7CisJX19yYXdfd3JpdGVsKHJlZywgUzNDNjRYWF9USU5UX0NTVEFUKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV90aW1lcl91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl1MzIgcmVnID0gX19yYXdfcmVhZGwoUzNDNjRYWF9USU5UX0NTVEFUKTsKKworCXJlZyAmPSAweDFmOyAgLyogbWFzayBvdXQgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJcmVnIHw9IDEgPDwgKGlycSAtIElSUV9USU1FUjApOworCV9fcmF3X3dyaXRlbChyZWcsIFMzQzY0WFhfVElOVF9DU1RBVCk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfdGltZXJfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIHJlZyA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfVElOVF9DU1RBVCk7CisKKwlyZWcgJj0gMHgxZjsKKwlyZWcgfD0gKDEgPDwgNSkgPDwgKGlycSAtIElSUV9USU1FUjApOworCV9fcmF3X3dyaXRlbChyZWcsIFMzQzY0WFhfVElOVF9DU1RBVCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgczNjX2lycV90aW1lciA9IHsKKwkubmFtZQkJPSAiczNjLXRpbWVyIiwKKwkubWFzawkJPSBzM2NfaXJxX3RpbWVyX21hc2ssCisJLnVubWFzawkJPSBzM2NfaXJxX3RpbWVyX3VubWFzaywKKwkuYWNrCQk9IHMzY19pcnFfdGltZXJfYWNrLAorfTsKKworc3RydWN0IHVhcnRfaXJxIHsKKwl2b2lkIF9faW9tZW0JKnJlZ3M7CisJdW5zaWduZWQgaW50CSBiYXNlX2lycTsKKwl1bnNpZ25lZCBpbnQJIHBhcmVudF9pcnE7Cit9OworCisvKiBOb3RlLCB3ZSBtYWtlIHVzZSBvZiB0aGUgZmFjdCB0aGF0IHRoZSBwYXJlbnQgSVJRcywgSVJRX1VBUlRbMC4uM10KKyAqIGFyZSBjb25zZWN1dGl2ZSB3aGVuIGxvb2tpbmcgdXAgdGhlIGludGVycnVwdCBpbiB0aGUgZGVtdXggcm91dGluZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdWFydF9pcnEgdWFydF9pcnFzW10gPSB7CisJWzBdID0geworCQkucmVncwkJPSAodm9pZCAqKVMzQ19WQV9VQVJUMCwKKwkJLmJhc2VfaXJxCT0gSVJRX1MzQ1VBUlRfQkFTRTAsCisJCS5wYXJlbnRfaXJxCT0gSVJRX1VBUlQwLAorCX0sCisJWzFdID0geworCQkucmVncwkJPSAodm9pZCAqKVMzQ19WQV9VQVJUMSwKKwkJLmJhc2VfaXJxCT0gSVJRX1MzQ1VBUlRfQkFTRTEsCisJCS5wYXJlbnRfaXJxCT0gSVJRX1VBUlQxLAorCX0sCisJWzJdID0geworCQkucmVncwkJPSAodm9pZCAqKVMzQ19WQV9VQVJUMiwKKwkJLmJhc2VfaXJxCT0gSVJRX1MzQ1VBUlRfQkFTRTIsCisJCS5wYXJlbnRfaXJxCT0gSVJRX1VBUlQyLAorCX0sCisJWzNdID0geworCQkucmVncwkJPSAodm9pZCAqKVMzQ19WQV9VQVJUMywKKwkJLmJhc2VfaXJxCT0gSVJRX1MzQ1VBUlRfQkFTRTMsCisJCS5wYXJlbnRfaXJxCT0gSVJRX1VBUlQzLAorCX0sCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqczNjX2lycV91YXJ0X2Jhc2UodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgdWFydF9pcnEgKnVpcnEgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXJldHVybiB1aXJxLT5yZWdzOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzM2NfaXJxX3VhcnRfYml0KHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIGlycSAmIDM7Cit9CisKKy8qIFVBUlQgaW50ZXJydXB0IHJlZ2lzdGVycywgbm90IHdvcnRoIGFkZGluZyB0byBzZXBlcmF0ZSBpbmNsdWRlIGhlYWRlciAqLworI2RlZmluZSBTM0M2NFhYX1VJTlRQCTB4MzAKKyNkZWZpbmUgUzNDNjRYWF9VSU5UU1AJMHgzNAorI2RlZmluZSBTM0M2NFhYX1VJTlRNCTB4MzgKKworc3RhdGljIHZvaWQgczNjX2lycV91YXJ0X21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzM2NfaXJxX3VhcnRfYmFzZShpcnEpOworCXVuc2lnbmVkIGludCBiaXQgPSBzM2NfaXJxX3VhcnRfYml0KGlycSk7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0M2NFhYX1VJTlRNKTsKKwlyZWcgfD0gKDEgPDwgYml0KTsKKwlfX3Jhd193cml0ZWwocmVnLCByZWdzICsgUzNDNjRYWF9VSU5UTSk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfdWFydF9tYXNrYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gczNjX2lycV91YXJ0X2Jhc2UoaXJxKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gczNjX2lycV91YXJ0X2JpdChpcnEpOworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDNjRYWF9VSU5UTSk7CisJcmVnIHw9ICgxIDw8IGJpdCk7CisJX19yYXdfd3JpdGVsKHJlZywgcmVncyArIFMzQzY0WFhfVUlOVE0pOworCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgcmVncyArIFMzQzY0WFhfVUlOVFApOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX3VhcnRfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gczNjX2lycV91YXJ0X2Jhc2UoaXJxKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gczNjX2lycV91YXJ0X2JpdChpcnEpOworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDNjRYWF9VSU5UTSk7CisJcmVnICY9IH4oMSA8PCBiaXQpOworCV9fcmF3X3dyaXRlbChyZWcsIHJlZ3MgKyBTM0M2NFhYX1VJTlRNKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV91YXJ0X2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IHMzY19pcnFfdWFydF9iYXNlKGlycSk7CisJdW5zaWduZWQgaW50IGJpdCA9IHMzY19pcnFfdWFydF9iaXQoaXJxKTsKKworCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgcmVncyArIFMzQzY0WFhfVUlOVFApOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX2RlbXV4X3VhcnQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCB1YXJ0X2lycSAqdWlycSA9ICZ1YXJ0X2lycXNbaXJxIC0gSVJRX1VBUlQwXTsKKwl1MzIgcGVuZCA9IF9fcmF3X3JlYWRsKHVpcnEtPnJlZ3MgKyBTM0M2NFhYX1VJTlRQKTsKKwlpbnQgYmFzZSA9IHVpcnEtPmJhc2VfaXJxOworCisJaWYgKHBlbmQgJiAoMSA8PCAwKSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGJhc2UpOworCWlmIChwZW5kICYgKDEgPDwgMSkpCisJCWdlbmVyaWNfaGFuZGxlX2lycShiYXNlICsgMSk7CisJaWYgKHBlbmQgJiAoMSA8PCAyKSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGJhc2UgKyAyKTsKKwlpZiAocGVuZCAmICgxIDw8IDMpKQorCQlnZW5lcmljX2hhbmRsZV9pcnEoYmFzZSArIDMpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHMzY19pcnFfdWFydCA9IHsKKwkubmFtZQkJPSAiczNjLXVhcnQiLAorCS5tYXNrCQk9IHMzY19pcnFfdWFydF9tYXNrLAorCS51bm1hc2sJCT0gczNjX2lycV91YXJ0X3VubWFzaywKKwkubWFza19hY2sJPSBzM2NfaXJxX3VhcnRfbWFza2FjaywKKwkuYWNrCQk9IHMzY19pcnFfdWFydF9hY2ssCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgczVwYzF4eF91YXJ0X2lycShzdHJ1Y3QgdWFydF9pcnEgKnVpcnEpCit7CisJdm9pZCBfX2lvbWVtICpyZWdfYmFzZSA9IHVpcnEtPnJlZ3M7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgb2ZmczsKKworCS8qIG1hc2sgYWxsIGludGVycnVwdHMgYXQgdGhlIHN0YXJ0LiAqLworCV9fcmF3X3dyaXRlbCgweGYsIHJlZ19iYXNlICsgUzNDNjRYWF9VSU5UTSk7CisKKwlmb3IgKG9mZnMgPSAwOyBvZmZzIDwgMzsgb2ZmcysrKSB7CisJCWlycSA9IHVpcnEtPmJhc2VfaXJxICsgb2ZmczsKKworCQlzZXRfaXJxX2NoaXAoaXJxLCAmczNjX2lycV91YXJ0KTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCB1aXJxKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcih1aXJxLT5wYXJlbnRfaXJxLCBzM2NfaXJxX2RlbXV4X3VhcnQpOworfQorCit2b2lkIF9faW5pdCBzNXBjMXh4X2luaXRfaXJxKHUzMiAqdmljX3ZhbGlkLCBpbnQgbnVtKQoreworCWludCBpOworCWludCB1YXJ0LCBpcnE7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGluaXRpYWxpc2luZyBpbnRlcnJ1cHRzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBpbml0aWFsaXNlIHRoZSBwYWlyIG9mIFZJQ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisJCXZpY19pbml0KCh2b2lkICopUzVQQzFYWF9WQV9WSUMoaSksIFMzQ19JUlEoaSAqIFMzQ19JUlFfT0ZGU0VUKSwKKwkJCQl2aWNfdmFsaWRbaV0sIDApOworCisJLyogYWRkIHRoZSB0aW1lciBzdWItaXJxcyAqLworCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX1RJTUVSMCwgczNjX2lycV9kZW11eF90aW1lcjApOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9USU1FUjEsIHMzY19pcnFfZGVtdXhfdGltZXIxKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfVElNRVIyLCBzM2NfaXJxX2RlbXV4X3RpbWVyMik7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX1RJTUVSMywgczNjX2lycV9kZW11eF90aW1lcjMpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9USU1FUjQsIHMzY19pcnFfZGVtdXhfdGltZXI0KTsKKworCWZvciAoaXJxID0gSVJRX1RJTUVSMDsgaXJxIDw9IElSUV9USU1FUjQ7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZzM2NfaXJxX3RpbWVyKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlmb3IgKHVhcnQgPSAwOyB1YXJ0IDwgQVJSQVlfU0laRSh1YXJ0X2lycXMpOyB1YXJ0KyspCisJCXM1cGMxeHhfdWFydF9pcnEoJnVhcnRfaXJxc1t1YXJ0XSk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L3M1cGMxMDAtY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9zNXBjMTAwLWNsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyNDAzNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9zNXBjMTAwLWNsb2NrLmMKQEAgLTAsMCArMSwxMTM5IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cGMxeHgvczVwYzEwMC1jbG9jay5jCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcywgQ28uCisgKglCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogUzVQQzEwMCBiYXNlZCBjb21tb24gY2xvY2sgc3VwcG9ydAorICoKKyAqIEJhc2VkIG9uIHBsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BsbC5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvczVwYzEwMC5oPgorCisvKiBmaW5fYXBsbCwgZmluX21wbGwgYW5kIGZpbl9lcGxsIGFyZSBhbGwgdGhlIHNhbWUgY2xvY2ssIHdoaWNoIHdlIGNhbGwKKyAqIGV4dF94dGFsX211eCBmb3Igd2FudCBvZiBhbiBhY3R1YWwgbmFtZSBmcm9tIHRoZSBtYW51YWwuCisqLworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfZXh0X3h0YWxfbXV4ID0geworCS5uYW1lCQk9ICJleHRfeHRhbCIsCisJLmlkCQk9IC0xLAorfTsKKworI2RlZmluZSBjbGtfZmluX2FwbGwgY2xrX2V4dF94dGFsX211eAorI2RlZmluZSBjbGtfZmluX21wbGwgY2xrX2V4dF94dGFsX211eAorI2RlZmluZSBjbGtfZmluX2VwbGwgY2xrX2V4dF94dGFsX211eAorI2RlZmluZSBjbGtfZmluX2hwbGwgY2xrX2V4dF94dGFsX211eAorCisjZGVmaW5lIGNsa19mb3V0X21wbGwJY2xrX21wbGwKKworc3RydWN0IGNsa19zb3VyY2VzIHsKKwl1bnNpZ25lZCBpbnQJbnJfc291cmNlczsKKwlzdHJ1Y3QgY2xrCSoqc291cmNlczsKK307CisKK3N0cnVjdCBjbGtzcmNfY2xrIHsKKwlzdHJ1Y3QgY2xrCQljbGs7CisJdW5zaWduZWQgaW50CQltYXNrOworCXVuc2lnbmVkIGludAkJc2hpZnQ7CisKKwlzdHJ1Y3QgY2xrX3NvdXJjZXMJKnNvdXJjZXM7CisKKwl1bnNpZ25lZCBpbnQJCWRpdmlkZXJfc2hpZnQ7CisJdm9pZCBfX2lvbWVtCQkqcmVnX2RpdmlkZXI7CisJdm9pZCBfX2lvbWVtCQkqcmVnX3NvdXJjZTsKK307CisKK3N0YXRpYyBpbnQgY2xrX2RlZmF1bHRfc2V0cmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwljbGstPnJhdGUgPSByYXRlOworCXJldHVybiAxOworfQorCitzdHJ1Y3QgY2xrIGNsa18yN20gPSB7CisJLm5hbWUJCT0gImNsa18yN20iLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAyNzAwMDAwMCwKK307CisKK3N0YXRpYyBpbnQgY2xrXzQ4bV9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwkvKiBjYW4ndCByZWx5IG9uIGNsb2NrIGxvY2ssIHRoaXMgcmVnaXN0ZXIgaGFzIG90aGVyIHVzYWdlcyAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKFM1UEMxWFhfQ0xLX1NSQzEpOworCWlmIChlbmFibGUpCisJCXZhbCB8PSBTNVBDMTAwX0NMS1NSQzFfQ0xLNDhNX01BU0s7CisJZWxzZQorCQl2YWwgJj0gflM1UEMxMDBfQ0xLU1JDMV9DTEs0OE1fTUFTSzsKKworCV9fcmF3X3dyaXRlbCh2YWwsIFM1UEMxWFhfQ0xLX1NSQzEpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgY2xrIGNsa180OG0gPSB7CisJLm5hbWUJCT0gImNsa180OG0iLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSA0ODAwMDAwMCwKKwkuZW5hYmxlCQk9IGNsa180OG1fY3RybCwKK307CisKK3N0cnVjdCBjbGsgY2xrXzU0bSA9IHsKKwkubmFtZQkJPSAiY2xrXzU0bSIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDU0MDAwMDAwLAorfTsKKworc3RydWN0IGNsayBjbGtfaHBsbCA9IHsKKwkubmFtZQkJPSAiaHBsbCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RydWN0IGNsayBjbGtfaGQwID0geworCS5uYW1lCQk9ICJoY2xrZDAiLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAwLAorCS5wYXJlbnQJCT0gTlVMTCwKKwkuY3RybGJpdAk9IDAsCisJLnNldF9yYXRlCT0gY2xrX2RlZmF1bHRfc2V0cmF0ZSwKK307CisKK3N0cnVjdCBjbGsgY2xrX3BkMCA9IHsKKwkubmFtZQkJPSAicGNsa2QwIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gMCwKKwkucGFyZW50CQk9IE5VTEwsCisJLmN0cmxiaXQJPSAwLAorCS5zZXRfcmF0ZQk9IGNsa19kZWZhdWx0X3NldHJhdGUsCit9OworCitzdGF0aWMgaW50IHM1cGMxeHhfY2xrX2dhdGUodm9pZCBfX2lvbWVtICpyZWcsCisJCQkJc3RydWN0IGNsayAqY2xrLAorCQkJCWludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IGN0cmxiaXQgPSBjbGstPmN0cmxiaXQ7CisJdTMyIGNvbjsKKworCWNvbiA9IF9fcmF3X3JlYWRsKHJlZyk7CisKKwlpZiAoZW5hYmxlKQorCQljb24gfD0gY3RybGJpdDsKKwllbHNlCisJCWNvbiAmPSB+Y3RybGJpdDsKKworCV9fcmF3X3dyaXRlbChjb24sIHJlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczVwYzF4eF9jbGtfZDAwX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBjMXh4X2Nsa19nYXRlKFM1UEMxMDBfQ0xLR0FURV9EMDAsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBzNXBjMXh4X2Nsa19kMDFfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIHM1cGMxeHhfY2xrX2dhdGUoUzVQQzEwMF9DTEtHQVRFX0QwMSwgY2xrLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IHM1cGMxeHhfY2xrX2QwMl9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczVwYzF4eF9jbGtfZ2F0ZShTNVBDMTAwX0NMS0dBVEVfRDAyLCBjbGssIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgczVwYzF4eF9jbGtfZDEwX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBjMXh4X2Nsa19nYXRlKFM1UEMxMDBfQ0xLR0FURV9EMTAsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBzNXBjMXh4X2Nsa19kMTFfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIHM1cGMxeHhfY2xrX2dhdGUoUzVQQzEwMF9DTEtHQVRFX0QxMSwgY2xrLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IHM1cGMxeHhfY2xrX2QxMl9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczVwYzF4eF9jbGtfZ2F0ZShTNVBDMTAwX0NMS0dBVEVfRDEyLCBjbGssIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgczVwYzF4eF9jbGtfZDEzX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBjMXh4X2Nsa19nYXRlKFM1UEMxMDBfQ0xLR0FURV9EMTMsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBzNXBjMXh4X2Nsa19kMTRfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIHM1cGMxeHhfY2xrX2dhdGUoUzVQQzEwMF9DTEtHQVRFX0QxNCwgY2xrLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IHM1cGMxeHhfY2xrX2QxNV9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczVwYzF4eF9jbGtfZ2F0ZShTNVBDMTAwX0NMS0dBVEVfRDE1LCBjbGssIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgczVwYzF4eF9jbGtfZDIwX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBjMXh4X2Nsa19nYXRlKFM1UEMxMDBfQ0xLR0FURV9EMjAsIGNsaywgZW5hYmxlKTsKK30KKworaW50IHM1cGMxeHhfc2NsazBfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIHM1cGMxeHhfY2xrX2dhdGUoUzVQQzEwMF9TQ0xLR0FURTAsIGNsaywgZW5hYmxlKTsKK30KKworaW50IHM1cGMxeHhfc2NsazFfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIHM1cGMxeHhfY2xrX2dhdGUoUzVQQzEwMF9TQ0xLR0FURTEsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NfZGlzYWJsZVtdID0geworCXsKKwkJLm5hbWUJCT0gImRzaSIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDExX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxMV9EU0ksCisJfSwgeworCQkubmFtZQkJPSAiY3NpIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDExX0NTSSwKKwl9LCB7CisJCS5uYW1lCQk9ICJjY2FuMCIsCisJCS5pZAkJPSAwLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTRfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE0X0NDQU4wLAorCX0sIHsKKwkJLm5hbWUJCT0gImNjYW4xIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxNF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTRfQ0NBTjEsCisJfSwgeworCQkubmFtZQkJPSAia2V5cGFkIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTVfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE1X0tFWUlGLAorCX0sIHsKKwkJLm5hbWUJCT0gImhjbGtkMiIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSBOVUxMLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QyMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMjBfSENMS0QyLAorCX0sIHsKKwkJLm5hbWUJCT0gImlpcy1kMiIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSBOVUxMLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QyMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMjBfSTJTRDIsCisJfSwgeworCQkubmFtZQkJPSAib3RnIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEwX1VTQk9URywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NbXSA9IHsKKwkvKiBTeXN0ZW0xIChEMF8wKSBkZXZpY2VzICovCisJeworCQkubmFtZQkJPSAiaW50YyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2hkMCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMDBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDAwX0lOVEMsCisJfSwgeworCQkubmFtZQkJPSAidHppYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2hkMCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMDBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDAwX1RaSUMsCisJfSwgeworCQkubmFtZQkJPSAiY2YtYXRhIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaGQwLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QwMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMDBfQ0ZDT04sCisJfSwgeworCQkubmFtZQkJPSAibWRtYSIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2hkMCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMDBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDAwX01ETUEsCisJfSwgeworCQkubmFtZQkJPSAiZzJkIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaGQwLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QwMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMDBfRzJELAorCX0sIHsKKwkJLm5hbWUJCT0gInNlY3NzIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaGQwLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QwMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMDBfU0VDU1MsCisJfSwgeworCQkubmFtZQkJPSAiY3NzeXMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oZDAsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDAwX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QwMF9DU1NZUywKKwl9LAorCisJLyogTWVtb3J5IChEMF8xKSBkZXZpY2VzICovCisJeworCQkubmFtZQkJPSAiZG1jIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaGQwLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QwMV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMDFfRE1DLAorCX0sIHsKKwkJLm5hbWUJCT0gInNyb21jIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaGQwLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QwMV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMDFfU1JPTUMsCisJfSwgeworCQkubmFtZQkJPSAib25lbmFuZCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2hkMCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMDFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDAxX09ORU5BTkQsCisJfSwgeworCQkubmFtZQkJPSAibmFuZCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2hkMCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMDFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDAxX05GQ09OLAorCX0sIHsKKwkJLm5hbWUJCT0gImludG1lbSIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2hkMCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMDFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDAxX0lOVE1FTSwKKwl9LCB7CisJCS5uYW1lCQk9ICJlYmkiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oZDAsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDAxX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QwMV9FQkksCisJfSwKKworCS8qIFN5c3RlbTIgKEQwXzIpIGRldmljZXMgKi8KKwl7CisJCS5uYW1lCQk9ICJzZWNrZXkiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wZDAsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDAyX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QwMl9TRUNLRVksCisJfSwgeworCQkubmFtZQkJPSAic2RtIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaGQwLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QwMl9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMDJfU0RNLAorCX0sCisKKwkvKiBGaWxlIChEMV8wKSBkZXZpY2VzICovCisJeworCQkubmFtZQkJPSAicGRtYTAiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTBfUERNQTAsCisJfSwgeworCQkubmFtZQkJPSAicGRtYTEiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTBfUERNQTEsCisJfSwgeworCQkubmFtZQkJPSAidXNiLWhvc3QiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTBfVVNCSE9TVCwKKwl9LCB7CisJCS5uYW1lCQk9ICJtb2RlbSIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDEwX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxMF9NT0RFTUlGLAorCX0sIHsKKwkJLm5hbWUJCT0gImhzbW1jIiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTBfSFNNTUMwLAorCX0sIHsKKwkJLm5hbWUJCT0gImhzbW1jIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTBfSFNNTUMxLAorCX0sIHsKKwkJLm5hbWUJCT0gImhzbW1jIiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTBfSFNNTUMyLAorCX0sCisKKwkvKiBNdWx0aW1lZGlhMSAoRDFfMSkgZGV2aWNlcyAqLworCXsKKwkJLm5hbWUJCT0gImxjZCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDExX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxMV9MQ0QsCisJfSwgeworCQkubmFtZQkJPSAicm90YXRvciIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDExX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxMV9ST1RBVE9SLAorCX0sIHsKKwkJLm5hbWUJCT0gImZpbWMiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDExX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxMV9GSU1DMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJmaW1jIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTFfRklNQzEsCisJfSwgeworCQkubmFtZQkJPSAiZmltYyIsCisJCS5pZAkJPSAyLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDExX0ZJTUMyLAorCX0sIHsKKwkJLm5hbWUJCT0gImpwZWciLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTFfSlBFRywKKwl9LCB7CisJCS5uYW1lCQk9ICJnM2QiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTFfRzNELAorCX0sCisKKwkvKiBNdWx0aW1lZGlhMiAoRDFfMikgZGV2aWNlcyAqLworCXsKKwkJLm5hbWUJCT0gInR2IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTJfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEyX1RWLAorCX0sIHsKKwkJLm5hbWUJCT0gInZwIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTJfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEyX1ZQLAorCX0sIHsKKwkJLm5hbWUJCT0gIm1peGVyIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTJfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEyX01JWEVSLAorCX0sIHsKKwkJLm5hbWUJCT0gImhkbWkiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMl9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTJfSERNSSwKKwl9LCB7CisJCS5uYW1lCQk9ICJtZmMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMl9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTJfTUZDLAorCX0sCisKKwkvKiBTeXN0ZW0gKEQxXzMpIGRldmljZXMgKi8KKwl7CisJCS5uYW1lCQk9ICJjaGlwaWQiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxM19jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTNfQ0hJUElELAorCX0sIHsKKwkJLm5hbWUJCT0gImdwaW8iLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxM19jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTNfR1BJTywKKwl9LCB7CisJCS5uYW1lCQk9ICJhcGMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxM19jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTNfQVBDLAorCX0sIHsKKwkJLm5hbWUJCT0gImllYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDEzX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxM19JRUMsCisJfSwgeworCQkubmFtZQkJPSAidGltZXJzIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTNfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEzX1BXTSwKKwl9LCB7CisJCS5uYW1lCQk9ICJzeXN0aW1lciIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDEzX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxM19TWVNUSU1FUiwKKwl9LCB7CisJCS5uYW1lCQk9ICJ3YXRjaGRvZyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDEzX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxM19XRFQsCisJfSwgeworCQkubmFtZQkJPSAicnRjIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTNfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEzX1JUQywKKwl9LAorCisJLyogQ29ubmVjdGl2aXR5IChEMV80KSBkZXZpY2VzICovCisJeworCQkubmFtZQkJPSAidWFydCIsCisJCS5pZAkJPSAwLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTRfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE0X1VBUlQwLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE0X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNF9VQVJUMSwKKwl9LCB7CisJCS5uYW1lCQk9ICJ1YXJ0IiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxNF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTRfVUFSVDIsCisJfSwgeworCQkubmFtZQkJPSAidWFydCIsCisJCS5pZAkJPSAzLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTRfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE0X1VBUlQzLAorCX0sIHsKKwkJLm5hbWUJCT0gImkyYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE0X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNF9JSUMsCisJfSwgeworCQkubmFtZQkJPSAiaGRtaS1pMmMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxNF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTRfSERNSV9JSUMsCisJfSwgeworCQkubmFtZQkJPSAic3BpIiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxNF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTRfU1BJMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJzcGkiLAorCQkuaWQJCT0gMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE0X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNF9TUEkxLAorCX0sIHsKKwkJLm5hbWUJCT0gInNwaSIsCisJCS5pZAkJPSAyLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTRfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE0X1NQSTIsCisJfSwgeworCQkubmFtZQkJPSAiaXJkYSIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE0X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNF9JUkRBLAorCX0sIHsKKwkJLm5hbWUJCT0gImhzaXR4IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTRfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE0X0hTSVRYLAorCX0sIHsKKwkJLm5hbWUJCT0gImhzaXJ4IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTRfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE0X0hTSVJYLAorCX0sCisKKwkvKiBBdWRpbyAoRDFfNSkgZGV2aWNlcyAqLworCXsKKwkJLm5hbWUJCT0gImlpcyIsCisJCS5pZAkJPSAwLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTVfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE1X0lJUzAsCisJfSwgeworCQkubmFtZQkJPSAiaWlzIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxNV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTVfSUlTMSwKKwl9LCB7CisJCS5uYW1lCQk9ICJpaXMiLAorCQkuaWQJCT0gMiwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE1X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNV9JSVMyLAorCX0sIHsKKwkJLm5hbWUJCT0gImFjOTciLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxNV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTVfQUM5NywKKwl9LCB7CisJCS5uYW1lCQk9ICJwY20iLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE1X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNV9QQ00wLAorCX0sIHsKKwkJLm5hbWUJCT0gInBjbSIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTVfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE1X1BDTTEsCisJfSwgeworCQkubmFtZQkJPSAic3BkaWYiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxNV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTVfU1BESUYsCisJfSwgeworCQkubmFtZQkJPSAiYWRjIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTVfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE1X1RTQURDLAorCX0sIHsKKwkJLm5hbWUJCT0gImtleWlmIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTVfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE1X0tFWUlGLAorCX0sIHsKKwkJLm5hbWUJCT0gImNnIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTVfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE1X0NHLAorCX0sCisKKwkvKiBBdWRpbyAoRDJfMCkgZGV2aWNlczogYWxsIGRpc2FibGVkICovCisKKwkvKiBTcGVjaWFsIENsb2NrcyAxICovCisJeworCQkubmFtZQkJPSAic2Nsa19ocG0iLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gTlVMTCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X3NjbGswX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzFYWF9DTEtHQVRFX1NDTEswX0hQTSwKKwl9LCB7CisJCS5uYW1lCQk9ICJzY2xrX29uZW5hbmQiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gTlVMTCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X3NjbGswX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX09ORU5BTkQsCisJfSwgeworCQkubmFtZQkJPSAic2Nsa19zcGlfNDgiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrXzQ4bSwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X3NjbGswX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX1NQSTBfNDgsCisJfSwgeworCQkubmFtZQkJPSAic2Nsa19zcGlfNDgiLAorCQkuaWQJCT0gMSwKKwkJLnBhcmVudAkJPSAmY2xrXzQ4bSwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X3NjbGswX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX1NQSTFfNDgsCisJfSwgeworCQkubmFtZQkJPSAic2Nsa19zcGlfNDgiLAorCQkuaWQJCT0gMiwKKwkJLnBhcmVudAkJPSAmY2xrXzQ4bSwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X3NjbGswX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX1NQSTJfNDgsCisJfSwgeworCQkubmFtZQkJPSAic2Nsa19tbWNfNDgiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrXzQ4bSwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X3NjbGswX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzBfNDgsCisJfSwgeworCQkubmFtZQkJPSAic2Nsa19tbWNfNDgiLAorCQkuaWQJCT0gMSwKKwkJLnBhcmVudAkJPSAmY2xrXzQ4bSwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X3NjbGswX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzFfNDgsCisJfSwgeworCQkubmFtZQkJPSAic2Nsa19tbWNfNDgiLAorCQkuaWQJCT0gMiwKKwkJLnBhcmVudAkJPSAmY2xrXzQ4bSwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X3NjbGswX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzJfNDgsCisJfSwKKworCS8qIFNwZWNpYWwgQ2xvY2tzIDIgKi8KKwl7CisJCS5uYW1lCQk9ICJzY2xrX3R2XzU0IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfNTRtLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfc2NsazFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfU0NMSzFfVFY1NCwKKwl9LCB7CisJCS5uYW1lCQk9ICJzY2xrX3ZkYWNfNTQiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa181NG0sCisJCS5lbmFibGUJCT0gczVwYzF4eF9zY2xrMV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9WREFDNTQsCisJfSwgeworCQkubmFtZQkJPSAic2Nsa19zcGRpZiIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSBOVUxMLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfc2NsazFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfU0NMSzFfU1BESUYsCisJfSwKK307CisKK3ZvaWQgX19pbml0IHM1cGMxeHhfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrcDsKKwlpbnQgcmV0OworCWludCBwdHI7CisKKwljbGtwID0gaW5pdF9jbG9ja3M7CisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGluaXRfY2xvY2tzKTsgcHRyKyssIGNsa3ArKykgeworCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKKwkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOworCQl9CisJfQorCisJY2xrcCA9IGluaXRfY2xvY2tzX2Rpc2FibGU7CisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGluaXRfY2xvY2tzX2Rpc2FibGUpOyBwdHIrKywgY2xrcCsrKSB7CisKKwkJcmV0ID0gczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhjbGtwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2NrICVzICglZClcbiIsCisJCQkgICAgICAgY2xrcC0+bmFtZSwgcmV0KTsKKwkJfQorCisJCShjbGtwLT5lbmFibGUpKGNsa3AsIDApOworCX0KKworCXMzY19wd21jbGtfaW5pdCgpOworfQorc3RhdGljIHN0cnVjdCBjbGsgY2xrX2ZvdXRfYXBsbCA9IHsKKwkubmFtZQkJPSAiZm91dF9hcGxsIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrX3NyY19hcGxsX2xpc3RbXSA9IHsKKwlbMF0gPSAmY2xrX2Zpbl9hcGxsLAorCVsxXSA9ICZjbGtfZm91dF9hcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtfc3JjX2FwbGwgPSB7CisJLnNvdXJjZXMJPSBjbGtfc3JjX2FwbGxfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrX3NyY19hcGxsX2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X2FwbGwgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gIm1vdXRfYXBsbCIsCisJCS5pZAkJPSAtMSwKKwl9LAorCS5zaGlmdAkJPSBTNVBDMVhYX0NMS1NSQzBfQVBMTF9TSElGVCwKKwkubWFzawkJPSBTNVBDMVhYX0NMS1NSQzBfQVBMTF9NQVNLLAorCS5zb3VyY2VzCT0gJmNsa19zcmNfYXBsbCwKKwkucmVnX3NvdXJjZQk9IFM1UEMxWFhfQ0xLX1NSQzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfZm91dF9lcGxsID0geworCS5uYW1lCQk9ICJmb3V0X2VwbGwiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfc3JjX2VwbGxfbGlzdFtdID0geworCVswXSA9ICZjbGtfZmluX2VwbGwsCisJWzFdID0gJmNsa19mb3V0X2VwbGwsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19zb3VyY2VzIGNsa19zcmNfZXBsbCA9IHsKKwkuc291cmNlcwk9IGNsa19zcmNfZXBsbF9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtfc3JjX2VwbGxfbGlzdCksCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfZXBsbCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAibW91dF9lcGxsIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNoaWZ0CQk9IFM1UEMxWFhfQ0xLU1JDMF9FUExMX1NISUZULAorCS5tYXNrCQk9IFM1UEMxWFhfQ0xLU1JDMF9FUExMX01BU0ssCisJLnNvdXJjZXMJPSAmY2xrX3NyY19lcGxsLAorCS5yZWdfc291cmNlCT0gUzVQQzFYWF9DTEtfU1JDMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfc3JjX21wbGxfbGlzdFtdID0geworCVswXSA9ICZjbGtfZmluX21wbGwsCisJWzFdID0gJmNsa19mb3V0X21wbGwsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19zb3VyY2VzIGNsa19zcmNfbXBsbCA9IHsKKwkuc291cmNlcwk9IGNsa19zcmNfbXBsbF9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtfc3JjX21wbGxfbGlzdCksCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfbXBsbCA9IHsKKwkuY2xrID0geworCQkubmFtZQkJPSAibW91dF9tcGxsIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNoaWZ0CQk9IFM1UEMxWFhfQ0xLU1JDMF9NUExMX1NISUZULAorCS5tYXNrCQk9IFM1UEMxWFhfQ0xLU1JDMF9NUExMX01BU0ssCisJLnNvdXJjZXMJPSAmY2xrX3NyY19tcGxsLAorCS5yZWdfc291cmNlCT0gUzVQQzFYWF9DTEtfU1JDMCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHM1cGMxeHhfY2xrX2RvdXRtcGxsX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgY2xrZGl2OworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwYXJlbnQgaXMgJWxkXG4iLCBfX2Z1bmNfXywgcmF0ZSk7CisKKwljbGtkaXYgPSBfX3Jhd19yZWFkbChTNVBDMVhYX0NMS19ESVYxKSAmIFM1UEMxMDBfQ0xLRElWMV9NUExMX01BU0s7CisJcmF0ZSAvPSAoY2xrZGl2ID4+IFM1UEMxMDBfQ0xLRElWMV9NUExMX1NISUZUKSArIDE7CisKKwlyZXR1cm4gcmF0ZTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2RvdXRfbXBsbCA9IHsKKwkubmFtZQkJPSAiZG91dF9tcGxsIiwKKwkuaWQJCT0gLTEsCisJLnBhcmVudAkJPSAmY2xrX21vdXRfbXBsbC5jbGssCisJLmdldF9yYXRlCT0gczVwYzF4eF9jbGtfZG91dG1wbGxfZ2V0X3JhdGUsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzNXBjMXh4X2Nsa19kb3V0bXBsbDJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBjbGtkaXY7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHBhcmVudCBpcyAlbGRcbiIsIF9fZnVuY19fLCByYXRlKTsKKworCWNsa2RpdiA9IF9fcmF3X3JlYWRsKFM1UEMxWFhfQ0xLX0RJVjEpICYgUzVQQzEwMF9DTEtESVYxX01QTEwyX01BU0s7CisJcmF0ZSAvPSAoY2xrZGl2ID4+IFM1UEMxMDBfQ0xLRElWMV9NUExMMl9TSElGVCkgKyAxOworCisJcmV0dXJuIHJhdGU7Cit9CisKK3N0cnVjdCBjbGsgY2xrX2RvdXRfbXBsbDIgPSB7CisJLm5hbWUJCT0gImRvdXRfbXBsbDIiLAorCS5pZAkJPSAtMSwKKwkucGFyZW50CQk9ICZjbGtfbW91dF9tcGxsLmNsaywKKwkuZ2V0X3JhdGUJPSBzNXBjMXh4X2Nsa19kb3V0bXBsbDJfZ2V0X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X3VhcnRfbGlzdFtdID0geworCSZjbGtfbW91dF9lcGxsLmNsaywKKwkmY2xrX2RvdXRfbXBsbCwKKwlOVUxMLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrc2V0X3VhcnQgPSB7CisJLnNvdXJjZXMJPSBjbGtzZXRfdWFydF9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfdWFydF9saXN0KSwKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNsa3NyY19jbGsgKnRvX2Nsa3NyYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjbGssIHN0cnVjdCBjbGtzcmNfY2xrLCBjbGspOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzNXBjMXh4X2dldHJhdGVfY2xrc3JjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlzdHJ1Y3QgY2xrc3JjX2NsayAqc2NsayA9IHRvX2Nsa3NyYyhjbGspOworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdTMyIGNsa2RpdiA9IF9fcmF3X3JlYWRsKHNjbGstPnJlZ19kaXZpZGVyKTsKKworCWNsa2RpdiA+Pj0gc2Nsay0+ZGl2aWRlcl9zaGlmdDsKKwljbGtkaXYgJj0gMHhmOworCWNsa2RpdisrOworCisJcmF0ZSAvPSBjbGtkaXY7CisJcmV0dXJuIHJhdGU7Cit9CisKK3N0YXRpYyBpbnQgczVwYzF4eF9zZXRyYXRlX2Nsa3NyYyhzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlzdHJ1Y3QgY2xrc3JjX2NsayAqc2NsayA9IHRvX2Nsa3NyYyhjbGspOworCXZvaWQgX19pb21lbSAqcmVnID0gc2Nsay0+cmVnX2RpdmlkZXI7CisJdW5zaWduZWQgaW50IGRpdjsKKwl1MzIgdmFsOworCisJcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJZGl2ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIHJhdGU7CisJaWYgKGRpdiA+IDE2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJdmFsICY9IH4oMHhmIDw8IHNjbGstPnNoaWZ0KTsKKwl2YWwgfD0gKGRpdiAtIDEpIDw8IHNjbGstPnNoaWZ0OworCV9fcmF3X3dyaXRlbCh2YWwsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNXBjMXh4X3NldHBhcmVudF9jbGtzcmMoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJc3RydWN0IGNsa3NyY19jbGsgKnNjbGsgPSB0b19jbGtzcmMoY2xrKTsKKwlzdHJ1Y3QgY2xrX3NvdXJjZXMgKnNyY3MgPSBzY2xrLT5zb3VyY2VzOworCXUzMiBjbGtzcmMgPSBfX3Jhd19yZWFkbChzY2xrLT5yZWdfc291cmNlKTsKKwlpbnQgc3JjX25yID0gLTE7CisJaW50IHB0cjsKKworCWZvciAocHRyID0gMDsgcHRyIDwgc3Jjcy0+bnJfc291cmNlczsgcHRyKyspCisJCWlmIChzcmNzLT5zb3VyY2VzW3B0cl0gPT0gcGFyZW50KSB7CisJCQlzcmNfbnIgPSBwdHI7CisJCQlicmVhazsKKwkJfQorCisJaWYgKHNyY19uciA+PSAwKSB7CisJCWNsa3NyYyAmPSB+c2Nsay0+bWFzazsKKwkJY2xrc3JjIHw9IHNyY19uciA8PCBzY2xrLT5zaGlmdDsKKworCQlfX3Jhd193cml0ZWwoY2xrc3JjLCBzY2xrLT5yZWdfc291cmNlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHM1cGMxeHhfcm91bmRyYXRlX2Nsa3NyYyhzdHJ1Y3QgY2xrICpjbGssCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwlpbnQgZGl2OworCisJaWYgKHJhdGUgPiBwYXJlbnRfcmF0ZSkKKwkJcmF0ZSA9IHBhcmVudF9yYXRlOworCWVsc2UgeworCQlkaXYgPSByYXRlIC8gcGFyZW50X3JhdGU7CisKKwkJaWYgKGRpdiA9PSAwKQorCQkJZGl2ID0gMTsKKwkJaWYgKGRpdiA+IDE2KQorCQkJZGl2ID0gMTY7CisKKwkJcmF0ZSA9IHBhcmVudF9yYXRlIC8gZGl2OworCX0KKworCXJldHVybiByYXRlOworfQorCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX3VhcnRfdWNsazEgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gInVjbGsxIiwKKwkJLmlkCQk9IC0xLAorCQkuY3RybGJpdCAgICAgICAgPSBTNVBDMTAwX0NMS0dBVEVfU0NMSzBfVUFSVCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X3NjbGswX2N0cmwsCisJCS5zZXRfcGFyZW50CT0gczVwYzF4eF9zZXRwYXJlbnRfY2xrc3JjLAorCQkuZ2V0X3JhdGUJPSBzNXBjMXh4X2dldHJhdGVfY2xrc3JjLAorCQkuc2V0X3JhdGUJPSBzNXBjMXh4X3NldHJhdGVfY2xrc3JjLAorCQkucm91bmRfcmF0ZQk9IHM1cGMxeHhfcm91bmRyYXRlX2Nsa3NyYywKKwl9LAorCS5zaGlmdAkJPSBTNVBDMTAwX0NMS1NSQzFfVUFSVF9TSElGVCwKKwkubWFzawkJPSBTNVBDMTAwX0NMS1NSQzFfVUFSVF9NQVNLLAorCS5zb3VyY2VzCT0gJmNsa3NldF91YXJ0LAorCS5kaXZpZGVyX3NoaWZ0CT0gUzVQQzEwMF9DTEtESVYyX1VBUlRfU0hJRlQsCisJLnJlZ19kaXZpZGVyCT0gUzVQQzFYWF9DTEtfRElWMiwKKwkucmVnX3NvdXJjZQk9IFM1UEMxWFhfQ0xLX1NSQzEsCit9OworCisvKiBDbG9jayBpbml0aWFsaXNhdGlvbiBjb2RlICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayAqaW5pdF9wYXJlbnRzW10gPSB7CisJJmNsa19tb3V0X2FwbGwsCisJJmNsa19tb3V0X2VwbGwsCisJJmNsa19tb3V0X21wbGwsCisJJmNsa191YXJ0X3VjbGsxLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0X29yX2NwdWZyZXEgczVwYzF4eF9zZXRfY2xrc3JjKHN0cnVjdCBjbGtzcmNfY2xrICpjbGspCit7CisJc3RydWN0IGNsa19zb3VyY2VzICpzcmNzID0gY2xrLT5zb3VyY2VzOworCXUzMiBjbGtzcmMgPSBfX3Jhd19yZWFkbChjbGstPnJlZ19zb3VyY2UpOworCisJY2xrc3JjICY9IGNsay0+bWFzazsKKwljbGtzcmMgPj49IGNsay0+c2hpZnQ7CisKKwlpZiAoY2xrc3JjID4gc3Jjcy0+bnJfc291cmNlcyB8fCAhc3Jjcy0+c291cmNlc1tjbGtzcmNdKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJhZCBzb3VyY2UgJWRcbiIsCisJCSAgICAgICBjbGstPmNsay5uYW1lLCBjbGtzcmMpOworCQlyZXR1cm47CisJfQorCisJY2xrLT5jbGsucGFyZW50ID0gc3Jjcy0+c291cmNlc1tjbGtzcmNdOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNvdXJjZSBpcyAlcyAoJWQpLCByYXRlIGlzICVsZFxuIiwKKwkgICAgICAgY2xrLT5jbGsubmFtZSwgY2xrLT5jbGsucGFyZW50LT5uYW1lLCBjbGtzcmMsCisJICAgICAgIGNsa19nZXRfcmF0ZSgmY2xrLT5jbGspKTsKK30KKworI2RlZmluZSBHRVRfRElWKGNsaywgZmllbGQpICgoKChjbGspICYgZmllbGQjI19NQVNLKSA+PiBmaWVsZCMjX1NISUZUKSArIDEpCisKK3ZvaWQgX19pbml0X29yX2NwdWZyZXEgczVwYzEwMF9zZXR1cF9jbG9ja3Modm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICp4dGFsX2NsazsKKwl1bnNpZ25lZCBsb25nIHh0YWw7CisJdW5zaWduZWQgbG9uZyBhcm1jbGs7CisJdW5zaWduZWQgbG9uZyBoY2xrZDA7CisJdW5zaWduZWQgbG9uZyBoY2xrOworCXVuc2lnbmVkIGxvbmcgcGNsa2QwOworCXVuc2lnbmVkIGxvbmcgcGNsazsKKwl1bnNpZ25lZCBsb25nIGFwbGw7CisJdW5zaWduZWQgbG9uZyBtcGxsOworCXVuc2lnbmVkIGxvbmcgaHBsbDsKKwl1bnNpZ25lZCBsb25nIGVwbGw7CisJdW5zaWduZWQgaW50IHB0cjsKKwl1MzIgY2xrZGl2MCwgY2xrZGl2MTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVnaXN0ZXJpbmcgY2xvY2tzXG4iLCBfX2Z1bmNfXyk7CisKKwljbGtkaXYwID0gX19yYXdfcmVhZGwoUzVQQzFYWF9DTEtfRElWMCk7CisJY2xrZGl2MSA9IF9fcmF3X3JlYWRsKFM1UEMxWFhfQ0xLX0RJVjEpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBjbGtkaXYwID0gJTA4eCwgY2xrZGl2MSA9ICUwOHhcbiIsCisJCQlfX2Z1bmNfXywgY2xrZGl2MCwgY2xrZGl2MSk7CisKKwl4dGFsX2NsayA9IGNsa19nZXQoTlVMTCwgInh0YWwiKTsKKwlCVUdfT04oSVNfRVJSKHh0YWxfY2xrKSk7CisKKwl4dGFsID0gY2xrX2dldF9yYXRlKHh0YWxfY2xrKTsKKwljbGtfcHV0KHh0YWxfY2xrKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogeHRhbCBpcyAlbGRcbiIsIF9fZnVuY19fLCB4dGFsKTsKKworCWFwbGwgPSBzNXBjMXh4X2dldF9wbGwoeHRhbCwgX19yYXdfcmVhZGwoUzVQQzFYWF9BUExMX0NPTikpOworCW1wbGwgPSBzNXBjMXh4X2dldF9wbGwoeHRhbCwgX19yYXdfcmVhZGwoUzVQQzFYWF9NUExMX0NPTikpOworCWVwbGwgPSBzNXBjMXh4X2dldF9wbGwoeHRhbCwgX19yYXdfcmVhZGwoUzVQQzFYWF9FUExMX0NPTikpOworCWhwbGwgPSBzNXBjMXh4X2dldF9wbGwoeHRhbCwgX19yYXdfcmVhZGwoUzVQQzEwMF9IUExMX0NPTikpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUzVQQzEwMDogUExMIHNldHRpbmdzLCBBPSVsZCwgTT0lbGQsIEU9JWxkLCBIPSVsZFxuIiwKKwkgICAgICAgYXBsbCwgbXBsbCwgZXBsbCwgaHBsbCk7CisKKwlhcm1jbGsgPSBhcGxsIC8gR0VUX0RJVihjbGtkaXYwLCBTNVBDMVhYX0NMS0RJVjBfQVBMTCk7CisJYXJtY2xrID0gYXJtY2xrIC8gR0VUX0RJVihjbGtkaXYwLCBTNVBDMTAwX0NMS0RJVjBfQVJNKTsKKwloY2xrZDAgPSBhcm1jbGsgLyBHRVRfRElWKGNsa2RpdjAsIFM1UEMxMDBfQ0xLRElWMF9EMCk7CisJcGNsa2QwID0gaGNsa2QwIC8gR0VUX0RJVihjbGtkaXYwLCBTNVBDMTAwX0NMS0RJVjBfUENMS0QwKTsKKwloY2xrID0gbXBsbCAvIEdFVF9ESVYoY2xrZGl2MSwgUzVQQzEwMF9DTEtESVYxX0QxKTsKKwlwY2xrID0gaGNsayAvIEdFVF9ESVYoY2xrZGl2MSwgUzVQQzEwMF9DTEtESVYxX1BDTEtEMSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJTNVBDMTAwOiBBUk1DTEs9JWxkLCBIQ0xLRDA9JWxkLCBQQ0xLRDA9JWxkLCBIQ0xLPSVsZCwgUENMSz0lbGRcbiIsCisJICAgICAgIGFybWNsaywgaGNsa2QwLCBwY2xrZDAsIGhjbGssIHBjbGspOworCisJY2xrX2ZvdXRfYXBsbC5yYXRlID0gYXBsbDsKKwljbGtfZm91dF9tcGxsLnJhdGUgPSBtcGxsOworCWNsa19mb3V0X2VwbGwucmF0ZSA9IGVwbGw7CisJY2xrX2ZvdXRfYXBsbC5yYXRlID0gYXBsbDsKKworCWNsa19oLnJhdGUgPSBoY2xrOworCWNsa19wLnJhdGUgPSBwY2xrOworCisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGluaXRfcGFyZW50cyk7IHB0cisrKQorCQlzNXBjMXh4X3NldF9jbGtzcmMoaW5pdF9wYXJlbnRzW3B0cl0pOworfQorCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJJmNsa19leHRfeHRhbF9tdXgsCisJJmNsa19tb3V0X2VwbGwuY2xrLAorCSZjbGtfZm91dF9lcGxsLAorCSZjbGtfbW91dF9tcGxsLmNsaywKKwkmY2xrX2RvdXRfbXBsbCwKKwkmY2xrX3VhcnRfdWNsazEuY2xrLAorCSZjbGtfZXh0LAorCSZjbGtfZXBsbCwKKwkmY2xrXzI3bSwKKwkmY2xrXzQ4bSwKKwkmY2xrXzU0bSwKK307CisKK3ZvaWQgX19pbml0IHM1cGMxMDBfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrcDsKKwlpbnQgcmV0OworCWludCBwdHI7CisKKwlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoY2xrcyk7IHB0cisrKSB7CisJCWNsa3AgPSBjbGtzW3B0cl07CisJCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soY2xrcCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBjbG9jayAlcyAoJWQpXG4iLAorCQkJICAgICAgIGNsa3AtPm5hbWUsIHJldCk7CisJCX0KKwl9CisKKwljbGtfbXBsbC5wYXJlbnQgPSAmY2xrX21vdXRfbXBsbC5jbGs7CisJY2xrX2VwbGwucGFyZW50ID0gJmNsa19tb3V0X2VwbGwuY2xrOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L3M1cGMxMDAtaW5pdC5jIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L3M1cGMxMDAtaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ODcxMDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvczVwYzEwMC1pbml0LmMKQEAgLTAsMCArMSwyNyBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L3M1cGMxMDAtaW5pdC5jCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqICAgICAgQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxMDAgLSBDUFUgaW5pdGlhbGlzYXRpb24gKGNvbW1vbiB3aXRoIG90aGVyIFM1UEMxWFggY2hpcHMpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvczVwYzEwMC5oPgorCisvKiB1YXJ0IHJlZ2lzdHJhdGlvbiBwcm9jZXNzICovCisKK3ZvaWQgX19pbml0IHM1cGMxMDBfY29tbW9uX2luaXRfdWFydHMoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pCit7CisJLyogVGhlIGRyaXZlciBuYW1lIGlzIHMzYzY0MDAtdWFydCB0byByZXVzZSBzM2M2NDAwX3NlcmlhbF9kcnYgICovCisJczNjMjR4eF9pbml0X3VhcnRkZXZzKCJzM2M2NDAwLXVhcnQiLCBzNXBjMXh4X3VhcnRfcmVzb3VyY2VzLCBjZmcsIG5vKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9zZXR1cC1pMmMwLmMgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvc2V0dXAtaTJjMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDBjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvc2V0dXAtaTJjMC5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczVwYzF4eC9zZXR1cC1pMmMwLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIEJhc2UgUzVQQzFYWCBJMkMgYnVzIDAgZ3BpbyBjb25maWd1cmF0aW9uCisgKgorICogQmFzZWQgb24gcGxhdC1zM2M2NHh4L3NldHVwLWkyYzAuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHBsYXRmb3JtX2RldmljZTsgLyogZG9uJ3QgbmVlZCB0aGUgY29udGVudHMgKi8KKworI2luY2x1ZGUgPHBsYXQvaWljLmg+CisKK3ZvaWQgczNjX2kyYzBfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCS8qIFBpbiBjb25maWd1cmF0aW9uIHdvdWxkIGJlIG5lZWRlZCAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L3NldHVwLWkyYzEuYyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9zZXR1cC1pMmMxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmM2NhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9zZXR1cC1pMmMxLmMKQEAgLTAsMCArMSwyNSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NldHVwLWkyYzEuYworICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisgKglCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogQmFzZSBTNVBDMVhYIEkyQyBidXMgMSBncGlvIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBCYXNlZCBvbiBwbGF0LXMzYzY0eHgvc2V0dXAtaTJjMS5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOyAvKiBkb24ndCBuZWVkIHRoZSBjb250ZW50cyAqLworCisjaW5jbHVkZSA8cGxhdC9paWMuaD4KKwordm9pZCBzM2NfaTJjMV9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJLyogUGluIGNvbmZpZ3VyYXRpb24gd291bGQgYmUgbmVlZGVkICovCit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwppbmRleCAzMzAyNmVmLi5jOGM1NWI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CiAjCi0jIExhc3QgdXBkYXRlOiBTYXQgSnVuIDIwIDIyOjI4OjM5IDIwMDkKKyMgTGFzdCB1cGRhdGU6IFNhdCBTZXAgMTIgMTI6MDA6MTYgMjAwOQogIwogIyBtYWNoaW5lX2lzX3h4eAlDT05GSUdfeHh4eAkJTUFDSF9UWVBFX3h4eAkJbnVtYmVyCiAjCkBAIC0xNzY5LDcgKzE3NjksNyBAQAogbWk0MjR3cgkJCU1BQ0hfTUk0MjRXUgkJTUk0MjRXUgkJCTE3NzgKIGF4c191bHRyYXgJCU1BQ0hfQVhTX1VMVFJBWAkJQVhTX1VMVFJBWAkJMTc3OQogYXQ1NzJkOTQwZGViCQlNQUNIX0FUNTcyRDk0MERFQglBVDU3MkQ5NDBERUIJCTE3ODAKLWRhdmluY2lfZGE4eHhfZXZtCU1BQ0hfREFWSU5DSV9EQThYWF9FVk0JREFWSU5DSV9EQThYWF9FVk0JMTc4MQorZGF2aW5jaV9kYTgzMF9ldm0JTUFDSF9EQVZJTkNJX0RBODMwX0VWTQlEQVZJTkNJX0RBODMwX0VWTQkxNzgxCiBlcDkzMDIJCQlNQUNIX0VQOTMwMgkJRVA5MzAyCQkJMTc4MgogYXQ1NzJkOTQwaGZlawkJTUFDSF9BVDU3MkQ5NDBIRkVCCUFUNTcyRDk0MEhGRUIJCTE3ODMKIGN5Ym9vazMJCQlNQUNIX0NZQk9PSzMJCUNZQk9PSzMJCQkxNzg0CkBAIC0xOTYyLDcgKzE5NjIsNyBAQAogYXJtMTEJCQlNQUNIX0FSTTExCQlBUk0xMQkJCTE5NzIKIGNwdWF0OTI2MAkJTUFDSF9DUFVBVDkyNjAJCUNQVUFUOTI2MAkJMTk3MwogY3B1cHhhMjU1CQlNQUNIX0NQVVBYQTI1NQkJQ1BVUFhBMjU1CQkxOTc0Ci1jcHVpbXgyNwkJTUFDSF9DUFVJTVgyNwkJQ1BVSU1YMjcJCTE5NzUKK2V1a3JlYV9jcHVpbXgyNwkJTUFDSF9DUFVJTVgyNwkJQ1BVSU1YMjcJCTE5NzUKIGNoZWZsdXgJCQlNQUNIX0NIRUZMVVgJCUNIRUZMVVgJCQkxOTc2CiBlYl9jcHV4OWsyCQlNQUNIX0VCX0NQVVg5SzIJCUVCX0NQVVg5SzIJCTE5NzcKIG9wY290ZWMJCQlNQUNIX09QQ09URUMJCU9QQ09URUMJCQkxOTc4CkBAIC0yMjQ5LDE0ICsyMjQ5LDE0IEBACiBkYXJ3aW4JCQlNQUNIX0RBUldJTgkJREFSV0lOCQkJMjI2Mgogb3JhdGlzY29tdQkJTUFDSF9PUkFUSVNDT01VCQlPUkFUSVNDT01VCQkyMjYzCiBydHNiYzIwCQkJTUFDSF9SVFNCQzIwCQlSVFNCQzIwCQkJMjI2NAotaTc4MAkJCU1BQ0hfSTc4MAkJSTc4MAkJCTIyNjUKK3NnaF9pNzgwCQlNQUNIX0k3ODAJCUk3ODAJCQkyMjY1CiBnZW1pbmkzMjQJCU1BQ0hfR0VNSU5JMzI0CQlHRU1JTkkzMjQJCTIyNjYKIG9yYXRpc2xhbgkJTUFDSF9PUkFUSVNMQU4JCU9SQVRJU0xBTgkJMjI2Nwogb3JhdGlzYWxvZwkJTUFDSF9PUkFUSVNBTE9HCQlPUkFUSVNBTE9HCQkyMjY4CiBvcmF0aXNtYWRpCQlNQUNIX09SQVRJU01BREkJCU9SQVRJU01BREkJCTIyNjkKIG9yYXRpc290MTYJCU1BQ0hfT1JBVElTT1QxNgkJT1JBVElTT1QxNgkJMjI3MAogb3JhdGlzZGVzawkJTUFDSF9PUkFUSVNERVNLCQlPUkFUSVNERVNLCQkyMjcxCi12MnBfY2E5CQkJTUFDSF9WMlBfQ0E5CQlWMlBfQ0E5CQkJMjI3MgordjJfY2E5CQkJTUFDSF9WMlBfQ0E5CQlWMlBfQ0E5CQkJMjI3Mgogc2ludGV4bwkJCU1BQ0hfU0lOVEVYTwkJU0lOVEVYTwkJCTIyNzMKIGNtMzM4OQkJCU1BQ0hfQ00zMzg5CQlDTTMzODkJCQkyMjc0CiBvbWFwM19jaW8JCU1BQ0hfT01BUDNfQ0lPCQlPTUFQM19DSU8JCTIyNzUKQEAgLTIyODAsMyArMjI4MCwxMzIgQEAKIGh0Y3RvcGF6CQlNQUNIX0hUQ1RPUEFaCQlIVENUT1BBWgkJMjI5MwogbWF0cml4NTA0CQlNQUNIX01BVFJJWDUwNAkJTUFUUklYNTA0CQkyMjk0CiBtcmZzYQkJCU1BQ0hfTVJGU0EJCU1SRlNBCQkJMjI5NQorc2NfcDI3MAkJCU1BQ0hfU0NfUDI3MAkJU0NfUDI3MAkJCTIyOTYKK2F0bGFzNV9ldmIJCU1BQ0hfQVRMQVM1X0VWQgkJQVRMQVM1X0VWQgkJMjI5NworcGVsY29fbG9ib3gJCU1BQ0hfUEVMQ09fTE9CT1gJUEVMQ09fTE9CT1gJCTIyOTgKK2RpbGF4X3BjdTIwMAkJTUFDSF9ESUxBWF9QQ1UyMDAJRElMQVhfUENVMjAwCQkyMjk5CitsZW9uYXJkbwkJTUFDSF9MRU9OQVJETwkJTEVPTkFSRE8JCTIzMDAKK3pvcmFuX2FwcHJvYWNoNwkJTUFDSF9aT1JBTl9BUFBST0FDSDcJWk9SQU5fQVBQUk9BQ0g3CQkyMzAxCitkcDZ4eAkJCU1BQ0hfRFA2WFgJCURQNlhYCQkJMjMwMgorYmNtMjE1M192ZXNwZXIJCU1BQ0hfQkNNMjE1M19WRVNQRVIJQkNNMjE1M19WRVNQRVIJCTIzMDMKK21haGltYWhpCQlNQUNIX01BSElNQUhJCQlNQUhJTUFISQkJMjMwNAorY2xpY2tjCQkJTUFDSF9DTElDS0MJCUNMSUNLQwkJCTIzMDUKK3piX2dhdGV3YXkJCU1BQ0hfWkJfR0FURVdBWQkJWkJfR0FURVdBWQkJMjMwNgordGF6Y2FyZAkJCU1BQ0hfVEFaQ0FSRAkJVEFaQ0FSRAkJCTIzMDcKK3RhemRldgkJCU1BQ0hfVEFaREVWCQlUQVpERVYJCQkyMzA4Cithbm5heF9jYl9hcm0JCU1BQ0hfQU5OQVhfQ0JfQVJNCUFOTkFYX0NCX0FSTQkJMjMwOQorYW5uYXhfZG0zCQlNQUNIX0FOTkFYX0RNMwkJQU5OQVhfRE0zCQkyMzEwCitjZXJlYnJpYwkJTUFDSF9DRVJFQlJJQwkJQ0VSRUJSSUMJCTIzMTEKK29yY2EJCQlNQUNIX09SQ0EJCU9SQ0EJCQkyMzEyCitwYzkyNjAJCQlNQUNIX1BDOTI2MAkJUEM5MjYwCQkJMjMxMworZW1zMjg1YQkJCU1BQ0hfRU1TMjg1QQkJRU1TMjg1QQkJCTIzMTQKK2dlYzI0MTAJCQlNQUNIX0dFQzI0MTAJCUdFQzI0MTAJCQkyMzE1CitnZWMyNDQwCQkJTUFDSF9HRUMyNDQwCQlHRUMyNDQwCQkJMjMxNgorbXc5MDMJCQlNQUNIX0FSQ0hfTVc5MDMJCUFSQ0hfTVc5MDMJCTIzMTcKK213MjQ0MAkJCU1BQ0hfTVcyNDQwCQlNVzI0NDAJCQkyMzE4CitlY2FjMjM3OAkJTUFDSF9FQ0FDMjM3OAkJRUNBQzIzNzgJCTIzMTkKK3Rhemtpb3NrCQlNQUNIX1RBWktJT1NLCQlUQVpLSU9TSwkJMjMyMAord2hpdGVyYWJiaXRfbWNoCQlNQUNIX1dISVRFUkFCQklUX01DSAlXSElURVJBQkJJVF9NQ0gJCTIzMjEKK3Nib3g5MjYzCQlNQUNIX1NCT1g5MjYzCQlTQk9YOTI2MwkJMjMyMgorb3JlbwkJCU1BQ0hfT1JFTwkJT1JFTwkJCTIzMjMKK3NtZGs2NDQyCQlNQUNIX1NNREs2NDQyCQlTTURLNjQ0MgkJMjMyNAorb3BlbnJkX2Jhc2UJCU1BQ0hfT1BFTlJEX0JBU0UJT1BFTlJEX0JBU0UJCTIzMjUKK2luY3JlZGlibGUJCU1BQ0hfSU5DUkVESUJMRQkJSU5DUkVESUJMRQkJMjMyNgoraW5jcmVkaWJsZWMJCU1BQ0hfSU5DUkVESUJMRUMJSU5DUkVESUJMRUMJCTIzMjcKK2hlcm9jdAkJCU1BQ0hfSEVST0NUCQlIRVJPQ1QJCQkyMzI4CittbW5ldDEwMDAJCU1BQ0hfTU1ORVQxMDAwCQlNTU5FVDEwMDAJCTIzMjkKK2RldmtpdDgwMDAJCU1BQ0hfREVWS0lUODAwMAkJREVWS0lUODAwMAkJMjMzMAorZGV2a2l0OTAwMAkJTUFDSF9ERVZLSVQ5MDAwCQlERVZLSVQ5MDAwCQkyMzMxCitteDMxdHh0cgkJTUFDSF9NWDMxVFhUUgkJTVgzMVRYVFIJCTIzMzIKK3UzODAJCQlNQUNIX1UzODAJCVUzODAJCQkyMzMzCitvYW1wM19odWFsdQkJTUFDSF9IVUFMVV9CT0FSRAlIVUFMVV9CT0FSRAkJMjMzNAorbnBjbXg1MAkJCU1BQ0hfTlBDTVg1MAkJTlBDTVg1MAkJCTIzMzUKK214NTFfbGFuZ2U1MQkJTUFDSF9NWDUxX0xBTkdFNTEJTVg1MV9MQU5HRTUxCQkyMzM2CitteDUxX2xhbmdlNTIJCU1BQ0hfTVg1MV9MQU5HRTUyCU1YNTFfTEFOR0U1MgkJMjMzNworcmlvbQkJCU1BQ0hfUklPTQkJUklPTQkJCTIzMzgKK2NvbWNhcwkJCU1BQ0hfQ09NQ0FTCQlDT01DQVMJCQkyMzM5Cit3c2lfbXgyNwkJTUFDSF9XU0lfTVgyNwkJV1NJX01YMjcJCTIzNDAKK2NtX3QzNQkJCU1BQ0hfQ01fVDM1CQlDTV9UMzUJCQkyMzQxCituZXQyYmlnCQkJTUFDSF9ORVQyQklHCQlORVQyQklHCQkJMjM0MgorbW90b3JvbGFfYTE2MDAJCU1BQ0hfTU9UT1JPTEFfQTE2MDAJTU9UT1JPTEFfQTE2MDAJCTIzNDMKK2lnZXAwMDIwCQlNQUNIX0lHRVAwMDIwCQlJR0VQMDAyMAkJMjM0NAoraWdlcDAwMTAJCU1BQ0hfSUdFUDAwMTAJCUlHRVAwMDEwCQkyMzQ1CittdjYyODFndHdnZTIJCU1BQ0hfTVY2MjgxR1RXR0UyCU1WNjI4MUdUV0dFMgkJMjM0Ngorc2NhdDEwMAkJCU1BQ0hfU0NBVDEwMAkJU0NBVDEwMAkJCTIzNDcKK3Nhbm1pbmEJCQlNQUNIX1NBTk1JTkEJCVNBTk1JTkEJCQkyMzQ4Cittb21lbnRvCQkJTUFDSF9NT01FTlRPCQlNT01FTlRPCQkJMjM0OQorbnVjOXh4CQkJTUFDSF9OVUM5WFgJCU5VQzlYWAkJCTIzNTAKK251YzkxMGV2YgkJTUFDSF9OVUM5MTBFVkIJCU5VQzkxMEVWQgkJMjM1MQorbnVjOTIwZXZiCQlNQUNIX05VQzkyMEVWQgkJTlVDOTIwRVZCCQkyMzUyCitudWM5NTBldmIJCU1BQ0hfTlVDOTUwRVZCCQlOVUM5NTBFVkIJCTIzNTMKK251Yzk0NWV2YgkJTUFDSF9OVUM5NDVFVkIJCU5VQzk0NUVWQgkJMjM1NAorbnVjOTYwZXZiCQlNQUNIX05VQzk2MEVWQgkJTlVDOTYwRVZCCQkyMzU1CitudWM5MzJldmIJCU1BQ0hfTlVDOTMyRVZCCQlOVUM5MzJFVkIJCTIzNTYKK251YzkwMAkJCU1BQ0hfTlVDOTAwCQlOVUM5MDAJCQkyMzU3CitzZDFzb2MJCQlNQUNIX1NEMVNPQwkJU0QxU09DCQkJMjM1OAorbG4yNDQwYmMJCU1BQ0hfTE4yNDQwQkMJCUxOMjQ0MEJDCQkyMzU5Cityc2JjCQkJTUFDSF9SU0JDCQlSU0JDCQkJMjM2MAorb3BlbnJkX2NsaWVudAkJTUFDSF9PUEVOUkRfQ0xJRU5UCU9QRU5SRF9DTElFTlQJCTIzNjEKK2hwaXBhcTExeAkJTUFDSF9IUElQQVExMVgJCUhQSVBBUTExWAkJMjM2Mgord2F5bGFuZAkJCU1BQ0hfV0FZTEFORAkJV0FZTEFORAkJCTIzNjMKK2FjbmJzeDEwMgkJTUFDSF9BQ05CU1gxMDIJCUFDTkJTWDEwMgkJMjM2NAoraHdhdDkxCQkJTUFDSF9IV0FUOTEJCUhXQVQ5MQkJCTIzNjUKK2F0OTFzYW05MjYzY3MJCU1BQ0hfQVQ5MVNBTTkyNjNDUwlBVDkxU0FNOTI2M0NTCQkyMzY2Citjc2I3MzIJCQlNQUNIX0NTQjczMgkJQ1NCNzMyCQkJMjM2NwordTg1MDAJCQlNQUNIX1U4NTAwCQlVODUwMAkJCTIzNjgKK2h1cWl1CQkJTUFDSF9IVVFJVQkJSFVRSVUJCQkyMzY5CitteDUxX2t1bmx1bgkJTUFDSF9NWDUxX0tVTkxVTglNWDUxX0tVTkxVTgkJMjM3MAorcG10MWcJCQlNQUNIX1BNVDFHCQlQTVQxRwkJCTIzNzEKK2h0Y2VsZgkJCU1BQ0hfSFRDRUxGCQlIVENFTEYJCQkyMzcyCithcm1hZGlsbG80MjAJCU1BQ0hfQVJNQURJTExPNDIwCUFSTUFESUxMTzQyMAkJMjM3MworYXJtYWRpbGxvNDQwCQlNQUNIX0FSTUFESUxMTzQ0MAlBUk1BRElMTE80NDAJCTIzNzQKK3VfY2hpcF9kdWFsX2FybQkJTUFDSF9VX0NISVBfRFVBTF9BUk0JVV9DSElQX0RVQUxfQVJNCQkyMzc1Citjc3JfYmRiMwkJTUFDSF9DU1JfQkRCMwkJQ1NSX0JEQjMJCTIzNzYKK2RvbGJ5X2NhdDEwMTgJCU1BQ0hfRE9MQllfQ0FUMTAxOAlET0xCWV9DQVQxMDE4CQkyMzc3CitoeTkzMDcJCQlNQUNIX0hZOTMwNwkJSFk5MzA3CQkJMjM3OAorYXNwaXJlX2Vhc3lzdG9yZQlNQUNIX0FfRVMJCUFfRVMJCQkyMzc5CitkYXZpbmNpX2lyaWYJCU1BQ0hfREFWSU5DSV9JUklGCURBVklOQ0lfSVJJRgkJMjM4MAorYWdhbWE5MjYzCQlNQUNIX0FHQU1BOTI2MwkJQUdBTUE5MjYzCQkyMzgxCittYXJ2ZWxsX2phc3BlcgkJTUFDSF9NQVJWRUxMX0pBU1BFUglNQVJWRUxMX0pBU1BFUgkJMjM4MgorZmxpbnQJCQlNQUNIX0ZMSU5UCQlGTElOVAkJCTIzODMKK3Rhdm9yZXZiMwkJTUFDSF9UQVZPUkVWQjMJCVRBVk9SRVZCMwkJMjM4NAorc2NoX200OTAJCU1BQ0hfU0NIX000OTAJCVNDSF9NNDkwCQkyMzg2CityYmwwMQkJCU1BQ0hfUkJMMDEJCVJCTDAxCQkJMjM4Nworb21uaWZpCQkJTUFDSF9PTU5JRkkJCU9NTklGSQkJCTIzODgKK290YXZhbG8JCQlNQUNIX09UQVZBTE8JCU9UQVZBTE8JCQkyMzg5CitzaWVubmEJCQlNQUNIX1NJRU5OQQkJU0lFTk5BCQkJMjM5MAoraHRjX2V4Y2FsaWJ1cl9zNjIwCU1BQ0hfSFRDX0VYQ0FMSUJVUl9TNjIwCUhUQ19FWENBTElCVVJfUzYyMAkyMzkxCitodGNfb3BhbAkJTUFDSF9IVENfT1BBTAkJSFRDX09QQUwJCTIzOTIKK3RvdWNoYm9vawkJTUFDSF9UT1VDSEJPT0sJCVRPVUNIQk9PSwkJMjM5MworbGF0dGUJCQlNQUNIX0xBVFRFCQlMQVRURQkJCTIzOTQKK3hhMjAwCQkJTUFDSF9YQTIwMAkJWEEyMDAJCQkyMzk1CituaW1yb2QJCQlNQUNIX05JTVJPRAkJTklNUk9ECQkJMjM5NgorY2M5cDkyMTVfM2cJCU1BQ0hfQ0M5UDkyMTVfM0cJQ0M5UDkyMTVfM0cJCTIzOTcKK2NjOXA5MjE1XzNnanMJCU1BQ0hfQ0M5UDkyMTVfM0dKUwlDQzlQOTIxNV8zR0pTCQkyMzk4Cit0azcxCQkJTUFDSF9USzcxCQlUSzcxCQkJMjM5OQorY29taGFtMzUyNQkJTUFDSF9DT01IQU0zNTI1CQlDT01IQU0zNTI1CQkyNDAwCitteDMxZXJlYnVzCQlNQUNIX01YMzFFUkVCVVMJCU1YMzFFUkVCVVMJCTI0MDEKK21jYXJkbXgyNwkJTUFDSF9NQ0FSRE1YMjcJCU1DQVJETVgyNwkJMjQwMgorcGFyYWRpc2UJCU1BQ0hfUEFSQURJU0UJCVBBUkFESVNFCQkyNDAzCit0aWRlCQkJTUFDSF9USURFCQlUSURFCQkJMjQwNAord3psMjQ0MAkJCU1BQ0hfV1pMMjQ0MAkJV1pMMjQ0MAkJCTI0MDUKK3NkcmRlbW8JCQlNQUNIX1NEUkRFTU8JCVNEUkRFTU8JCQkyNDA2CitldGhlcmNhbjIJCU1BQ0hfRVRIRVJDQU4yCQlFVEhFUkNBTjIJCTI0MDcKK2VjbWltZzIwCQlNQUNIX0VDTUlNRzIwCQlFQ01JTUcyMAkJMjQwOAorb21hcF9kcmFnb24JCU1BQ0hfT01BUF9EUkFHT04JT01BUF9EUkFHT04JCTI0MDkKK2hhbG8JCQlNQUNIX0hBTE8JCUhBTE8JCQkyNDEwCitodWFuZ3NoYW4JCU1BQ0hfSFVBTkdTSEFOCQlIVUFOR1NIQU4JCTI0MTEKK3ZsX21hMnNjCQlNQUNIX1ZMX01BMlNDCQlWTF9NQTJTQwkJMjQxMgorcmF1bWZlbGRfcmMJCU1BQ0hfUkFVTUZFTERfUkMJUkFVTUZFTERfUkMJCTI0MTMKK3JhdW1mZWxkX2Nvbm5lY3RvcglNQUNIX1JBVU1GRUxEX0NPTk5FQ1RPUglSQVVNRkVMRF9DT05ORUNUT1IJMjQxNAorcmF1bWZlbGRfc3BlYWtlcglNQUNIX1JBVU1GRUxEX1NQRUFLRVIJUkFVTUZFTERfU1BFQUtFUgkyNDE1CittdWx0aWJ1c19tYXN0ZXIJCU1BQ0hfTVVMVElCVVNfTUFTVEVSCU1VTFRJQlVTX01BU1RFUgkJMjQxNgorbXVsdGlidXNfcGJrCQlNQUNIX01VTFRJQlVTX1BCSwlNVUxUSUJVU19QQksJCTI0MTcKK3RuZXR2MTA3eAkJTUFDSF9UTkVUVjEwN1gJCVRORVRWMTA3WAkJMjQxOAorc25ha2UJCQlNQUNIX1NOQUtFCQlTTkFLRQkJCTI0MTkKK2N3bXgyNwkJCU1BQ0hfQ1dNWDI3CQlDV01YMjcJCQkyNDIwCitzY2hfbTQ4MAkJTUFDSF9TQ0hfTTQ4MAkJU0NIX000ODAJCTI0MjEKK3BsYXR5cHVzCQlNQUNIX1BMQVRZUFVTCQlQTEFUWVBVUwkJMjQyMgorcHNzMgkJCU1BQ0hfUFNTMgkJUFNTMgkJCTI0MjMKK2RhdmluY2lfYXBtMTUwCQlNQUNIX0RBVklOQ0lfQVBNMTUwCURBVklOQ0lfQVBNMTUwCQkyNDI0CitzdHI5MTAwCQkJTUFDSF9TVFI5MTAwCQlTVFI5MTAwCQkJMjQyNQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL2VudHJ5LlMgYi9hcmNoL2FybS92ZnAvZW50cnkuUwppbmRleCBhMmJlZDYyLi40ZmE5OTAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvZW50cnkuUworKysgYi9hcmNoL2FybS92ZnAvZW50cnkuUwpAQCAtNDIsNiArNDIsNyBAQAogCW1vdglwYywgbHIKIEVORFBST0ModmZwX251bGxfZW50cnkpCiAKKwkuYWxpZ24JMgogLkxDdmZwOgogCS53b3JkCXZmcF92ZWN0b3IKIApAQCAtNjEsNiArNjIsNyBAQAogCW1vdglwYywgcjkJCQlAIHdlIGhhdmUgaGFuZGxlZCB0aGUgZmF1bHQKIEVORFBST0ModmZwX3Rlc3RpbmdfZW50cnkpCiAKKwkuYWxpZ24JMgogVkZQX2FyY2hfYWRkcmVzczoKIAkud29yZAlWRlBfYXJjaAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwaHcuUyBiL2FyY2gvYXJtL3ZmcC92ZnBody5TCmluZGV4IDFhZWFlMzguLjY2ZGMyZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC92ZnBody5TCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBody5TCkBAIC0yMDksNDAgKzIwOSw1NSBAQAogbGFzdF9WRlBfY29udGV4dF9hZGRyZXNzOgogCS53b3JkCWxhc3RfVkZQX2NvbnRleHQKIAotRU5UUlkodmZwX2dldF9mbG9hdCkKLQlhZGQJcGMsIHBjLCByMCwgbHNsICMzCisJLm1hY3JvCXRibF9icmFuY2gsIGJhc2UsIHRtcCwgc2hpZnQKKyNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorCWFkcglcdG1wLCAxZgorCWFkZAlcdG1wLCBcdG1wLCBcYmFzZSwgbHNsIFxzaGlmdAorCW1vdglwYywgXHRtcAorI2Vsc2UKKwlhZGQJcGMsIHBjLCBcYmFzZSwgbHNsIFxzaGlmdAogCW1vdglyMCwgcjAKKyNlbmRpZgorMToKKwkuZW5kbQorCitFTlRSWSh2ZnBfZ2V0X2Zsb2F0KQorCXRibF9icmFuY2ggcjAsIHIzLCAjMwogCS5pcnAJZHIsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQotCW1yYwlwMTAsIDAsIHIwLCBjXGRyLCBjMCwgMAlAIGZtcnMJcjAsIHMwCisxOgltcmMJcDEwLCAwLCByMCwgY1xkciwgYzAsIDAJQCBmbXJzCXIwLCBzMAogCW1vdglwYywgbHIKLQltcmMJcDEwLCAwLCByMCwgY1xkciwgYzAsIDQJQCBmbXJzCXIwLCBzMQorCS5vcmcJMWIgKyA4CisxOgltcmMJcDEwLCAwLCByMCwgY1xkciwgYzAsIDQJQCBmbXJzCXIwLCBzMQogCW1vdglwYywgbHIKKwkub3JnCTFiICsgOAogCS5lbmRyCiBFTkRQUk9DKHZmcF9nZXRfZmxvYXQpCiAKIEVOVFJZKHZmcF9wdXRfZmxvYXQpCi0JYWRkCXBjLCBwYywgcjEsIGxzbCAjMwotCW1vdglyMCwgcjAKKwl0YmxfYnJhbmNoIHIxLCByMywgIzMKIAkuaXJwCWRyLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUKLQltY3IJcDEwLCAwLCByMCwgY1xkciwgYzAsIDAJQCBmbXNyCXIwLCBzMAorMToJbWNyCXAxMCwgMCwgcjAsIGNcZHIsIGMwLCAwCUAgZm1zcglyMCwgczAKIAltb3YJcGMsIGxyCi0JbWNyCXAxMCwgMCwgcjAsIGNcZHIsIGMwLCA0CUAgZm1zcglyMCwgczEKKwkub3JnCTFiICsgOAorMToJbWNyCXAxMCwgMCwgcjAsIGNcZHIsIGMwLCA0CUAgZm1zcglyMCwgczEKIAltb3YJcGMsIGxyCisJLm9yZwkxYiArIDgKIAkuZW5kcgogRU5EUFJPQyh2ZnBfcHV0X2Zsb2F0KQogCiBFTlRSWSh2ZnBfZ2V0X2RvdWJsZSkKLQlhZGQJcGMsIHBjLCByMCwgbHNsICMzCi0JbW92CXIwLCByMAorCXRibF9icmFuY2ggcjAsIHIzLCAjMwogCS5pcnAJZHIsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQotCWZtcnJkCXIwLCByMSwgZFxkcgorMToJZm1ycmQJcjAsIHIxLCBkXGRyCiAJbW92CXBjLCBscgorCS5vcmcJMWIgKyA4CiAJLmVuZHIKICNpZmRlZiBDT05GSUdfVkZQdjMKIAlAIGQxNiAtIGQzMSByZWdpc3RlcnMKIAkuaXJwCWRyLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUKLQltcnJjCXAxMSwgMywgcjAsIHIxLCBjXGRyCUAgZm1ycmQJcjAsIHIxLCBkXGRyCisxOgltcnJjCXAxMSwgMywgcjAsIHIxLCBjXGRyCUAgZm1ycmQJcjAsIHIxLCBkXGRyCiAJbW92CXBjLCBscgorCS5vcmcJMWIgKyA4CiAJLmVuZHIKICNlbmRpZgogCkBAIC0yNTMsMTcgKzI2OCwxOCBAQAogRU5EUFJPQyh2ZnBfZ2V0X2RvdWJsZSkKIAogRU5UUlkodmZwX3B1dF9kb3VibGUpCi0JYWRkCXBjLCBwYywgcjIsIGxzbCAjMwotCW1vdglyMCwgcjAKKwl0YmxfYnJhbmNoIHIyLCByMywgIzMKIAkuaXJwCWRyLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUKLQlmbWRycglkXGRyLCByMCwgcjEKKzE6CWZtZHJyCWRcZHIsIHIwLCByMQogCW1vdglwYywgbHIKKwkub3JnCTFiICsgOAogCS5lbmRyCiAjaWZkZWYgQ09ORklHX1ZGUHYzCiAJQCBkMTYgLSBkMzEgcmVnaXN0ZXJzCiAJLmlycAlkciwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1Ci0JbWNycglwMTEsIDMsIHIxLCByMiwgY1xkcglAIGZtZHJyCXIxLCByMiwgZFxkcgorMToJbWNycglwMTEsIDMsIHIxLCByMiwgY1xkcglAIGZtZHJyCXIxLCByMiwgZFxkcgogCW1vdglwYywgbHIKKwkub3JnCTFiICsgOAogCS5lbmRyCiAjZW5kaWYKIEVORFBST0ModmZwX3B1dF9kb3VibGUpCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCAwNGM4NjA2Li5mZTg2M2Y5IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU3LDQgKzU3LDcgQEAKICNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNwogI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORwogCisjZGVmaW5lIFNPX1BST1RPQ09MCQkzOAorI2RlZmluZSBTT19ET01BSU4JCTM5CisKICNlbmRpZiAvKiBfX0FTTV9BVlIzMl9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGZjNDJkZTUuLmZkMGM1ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTg0LDYgKzg0LDcgQEAKICNkZWZpbmUgVElGX01FTURJRQkJNgogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTcJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwgKi8KICNkZWZpbmUgVElGX0NQVV9HT0lOR19UT19TTEVFUAk4CS8qIENQVSBpcyBlbnRlcmluZyBzbGVlcCAwIG1vZGUgKi8KKyNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUJOQkvKiBjYWxsYmFjayBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXIgKi8KICNkZWZpbmUgVElGX0ZSRUVaRQkJMjkKICNkZWZpbmUgVElGX0RFQlVHCQkzMAkvKiBkZWJ1Z2dpbmcgZW5hYmxlZCAqLwogI2RlZmluZSBUSUZfVVNFUlNQQUNFCQkzMSAgICAgIC8qIHRydWUgaWYgRlMgc2V0cyB1c2Vyc3BhY2UgKi8KQEAgLTk2LDYgKzk3LDcgQEAKICNkZWZpbmUgX1RJRl9NRU1ESUUJCSgxIDw8IFRJRl9NRU1ESUUpCiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxIDw8IFRJRl9SRVNUT1JFX1NJR01BU0spCiAjZGVmaW5lIF9USUZfQ1BVX0dPSU5HX1RPX1NMRUVQICgxIDw8IFRJRl9DUFVfR09JTkdfVE9fU0xFRVApCisjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMSA8PCBUSUZfTk9USUZZX1JFU1VNRSkKICNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCiAKIC8qIE5vdGU6IFRoZSBtYXNrcyBiZWxvdyBtdXN0IG5ldmVyIHNwYW4gbW9yZSB0aGFuIDE2IGJpdHMhICovCkBAIC0xMDMsMTMgKzEwNSwxNSBAQAogLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJCQlcCiAJKCgxIDw8IFRJRl9TSUdQRU5ESU5HKQkJCVwKKwkgfCBfVElGX05PVElGWV9SRVNVTUUJCQlcCiAJIHwgKDEgPDwgVElGX05FRURfUkVTQ0hFRCkJCVwKIAkgfCAoMSA8PCBUSUZfUE9MTElOR19OUkZMQUcpCQlcCiAJIHwgKDEgPDwgVElGX0JSRUFLUE9JTlQpCQlcCiAJIHwgKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykpCiAKIC8qIHdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1c2Vyc3BhY2UgKi8KLSNkZWZpbmUgX1RJRl9BTExXT1JLX01BU0sJKF9USUZfV09SS19NQVNLIHwgKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpKQorI2RlZmluZSBfVElGX0FMTFdPUktfTUFTSwkoX1RJRl9XT1JLX01BU0sgfCAoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkgfCBcCisJCQkJIF9USUZfTk9USUZZX1JFU1VNRSkKIC8qIHdvcmsgdG8gZG8gb24gcmV0dXJuIGZyb20gZGVidWcgbW9kZSAqLwogI2RlZmluZSBfVElGX0RCR1dPUktfTUFTSwkoX1RJRl9XT1JLX01BU0sgJiB+KDEgPDwgVElGX0JSRUFLUE9JTlQpKQogCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9lbnRyeS1hdnIzMmIuUyBiL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TCmluZGV4IDAwOWE4MDEuLjE2OTI2OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TCkBAIC0yODEsNyArMjgxLDcgQEAKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAlyam1wCTFiCiAKLTI6CW1vdglyMiwgX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9SRVNUT1JFX1NJR01BU0sKKzI6CW1vdglyMiwgX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9SRVNUT1JFX1NJR01BU0sgfCBfVElGX05PVElGWV9SRVNVTUUKIAl0c3QJcjEsIHIyCiAJYnJlcQkzZgogCXVubWFza19pbnRlcnJ1cHRzCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYXZyMzIva2VybmVsL3NpZ25hbC5jCmluZGV4IDI3MjI3NTYuLjY0Zjg4NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL3NpZ25hbC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdWNvbnRleHQuaD4KQEAgLTMyMiw0ICszMjMsMTEgQEAKIAogCWlmICh0aS0+ZmxhZ3MgJiAoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9SRVNUT1JFX1NJR01BU0spKQogCQlkb19zaWduYWwocmVncywgJmN1cnJlbnQtPmJsb2NrZWQsIHN5c2NhbGwpOworCisJaWYgKHRpLT5mbGFncyAmIF9USUZfTk9USUZZX1JFU1VNRSkgeworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfTk9USUZZX1JFU1VNRSk7CisJCXRyYWNlaG9va19ub3RpZnlfcmVzdW1lKHJlZ3MpOworCQlpZiAoY3VycmVudC0+cmVwbGFjZW1lbnRfc2Vzc2lvbl9rZXlyaW5nKQorCQkJa2V5X3JlcGxhY2Vfc2Vzc2lvbl9rZXlyaW5nKCk7CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYXZyMzIva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNzkxMGQ0MS4uYzRiNTY2NSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xMjQsMTQgKzEyNCwxMSBAQAogCQlfZW5kID0gLjsKIAl9CiAKKwlEV0FSRl9ERUJVRworCiAJLyogV2hlbiBzb21ldGhpbmcgaW4gdGhlIGtlcm5lbCBpcyBOT1QgY29tcGlsZWQgYXMgYSBtb2R1bGUsIHRoZSBtb2R1bGUKIAkgKiBjbGVhbnVwIGNvZGUgYW5kIGRhdGEgYXJlIHB1dCBpbnRvIHRoZXNlIHNlZ21lbnRzLiBCb3RoIGNhbiB0aGVuIGJlCiAJICogdGhyb3duIGF3YXksIGFzIGNsZWFudXAgY29kZSBpcyBuZXZlciBjYWxsZWQgdW5sZXNzIGl0J3MgYSBtb2R1bGUuCiAJICovCi0JL0RJU0NBUkQvICAgICAgIAk6IHsKLQkJRVhJVF9EQVRBCi0JCSooLmV4aXRjYWxsLmV4aXQpCi0JfQotCi0JRFdBUkZfREVCVUcKKwlESVNDQVJEUwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3JvdGFyeS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3JvdGFyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNWVjZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fcm90YXJ5LmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIGJvYXJkIGluaXRpYWxpemF0aW9uIHNob3VsZCBwdXQgb25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgaW50byBwbGF0Zm9ybV9kYXRhCisgKiBhbmQgcGxhY2UgdGhlIGJmaW4tcm90YXJ5IG9udG8gcGxhdGZvcm1fYnVzIG5hbWVkICJiZmluLXJvdGFyeSIuCisgKi8KKworI2lmbmRlZiBfQkZJTl9ST1RBUllfSAorI2RlZmluZSBfQkZJTl9ST1RBUllfSAorCisvKiBtb2RlIGJpdG1hc2tzICovCisjZGVmaW5lIFJPVF9RVUFEX0VOQwlDTlRNT0RFX1FVQURFTkMJLyogcXVhZHJhdHVyZS9ncmV5IGNvZGUgZW5jb2RlciBtb2RlICovCisjZGVmaW5lIFJPVF9CSU5fRU5DCUNOVE1PREVfQklORU5DCS8qIGJpbmFyeSBlbmNvZGVyIG1vZGUgKi8KKyNkZWZpbmUgUk9UX1VEX0NOVAlDTlRNT0RFX1VEQ05UCS8qIHJvdGFyeSBjb3VudGVyIG1vZGUgKi8KKyNkZWZpbmUgUk9UX0RJUl9DTlQJQ05UTU9ERV9ESVJDTlQJLyogZGlyZWN0aW9uIGNvdW50ZXIgbW9kZSAqLworCisjZGVmaW5lIFJPVF9ERUJFCURFQkUJCS8qIERlYm91bmNlIEVuYWJsZSAqLworCisjZGVmaW5lIFJPVF9DREdJTlYJQ0RHSU5WCQkvKiBDREcgUGluIFBvbGFyaXR5IEludmVydCAqLworI2RlZmluZSBST1RfQ1VESU5WCUNVRElOVgkJLyogQ1VEIFBpbiBQb2xhcml0eSBJbnZlcnQgKi8KKyNkZWZpbmUgUk9UX0NaTUlOVglDWk1JTlYJCS8qIENaTSBQaW4gUG9sYXJpdHkgSW52ZXJ0ICovCisKK3N0cnVjdCBiZmluX3JvdGFyeV9wbGF0Zm9ybV9kYXRhIHsKKwkvKiBzZXQgcm90YXJ5IFVQIEtFWV8jIyMgb3IgQlROXyMjIyBpbiBjYXNlIHlvdSBwcmVmZXIKKwkgKiBiZmluLXJvdGFyeSB0byBzZW5kIEVWX0tFWSBvdGhlcndpc2Ugc2V0IDAKKwkgKi8KKwl1bnNpZ25lZCBpbnQgcm90YXJ5X3VwX2tleTsKKwkvKiBzZXQgcm90YXJ5IERPV04gS0VZXyMjIyBvciBCVE5fIyMjIGluIGNhc2UgeW91IHByZWZlcgorCSAqIGJmaW4tcm90YXJ5IHRvIHNlbmQgRVZfS0VZIG90aGVyd2lzZSBzZXQgMAorCSAqLworCXVuc2lnbmVkIGludCByb3RhcnlfZG93bl9rZXk7CisJLyogc2V0IHJvdGFyeSBCVVRUT04gS0VZXyMjIyBvciBCVE5fIyMjICovCisJdW5zaWduZWQgaW50IHJvdGFyeV9idXR0b25fa2V5OworCS8qIHNldCByb3RhcnkgUmVsYXRpdmUgQXhpcyBSRUxfIyMjIGluIGNhc2UgeW91IHByZWZlcgorCSAqIGJmaW4tcm90YXJ5IHRvIHNlbmQgRVZfUkVMIG90aGVyd2lzZSBzZXQgMAorCSAqLworCXVuc2lnbmVkIGludCByb3RhcnlfcmVsX2NvZGU7CisJdW5zaWduZWQgc2hvcnQgZGVib3VuY2U7CS8qIDAuLjE3ICovCisJdW5zaWduZWQgc2hvcnQgbW9kZTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDZhYzMwN2MuLmQ3ZmZlMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMjc3LDggKzI3Nyw1IEBACiAKIAlEV0FSRl9ERUJVRwogCi0JL0RJU0NBUkQvIDoKLQl7Ci0JCSooLmV4aXRjYWxsLmV4aXQpCi0JfQorCURJU0NBUkRTCiB9CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYyBiL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCmluZGV4IDBiYzNjNGUuLjk5ZTRkYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCkBAIC00Miw5ICs0Miw5IEBACiAjaW5jbHVkZSA8YXNtL21lbV9tYXAuaD4KICNpbmNsdWRlICJibGFja2Zpbl9zcmFtLmgiCiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzcGlubG9ja190LCBsMXNyYW1fbG9jaykgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzcGlubG9ja190LCBsMV9kYXRhX3NyYW1fbG9jaykgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzcGlubG9ja190LCBsMV9pbnN0X3NyYW1fbG9jaykgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzcGlubG9ja190LCBsMXNyYW1fbG9jayk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3BpbmxvY2tfdCwgbDFfZGF0YV9zcmFtX2xvY2spOworc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHNwaW5sb2NrX3QsIGwxX2luc3Rfc3JhbV9sb2NrKTsKIHN0YXRpYyBzcGlubG9ja190IGwyX3NyYW1fbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiAvKiB0aGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIEwxIHNjcmF0Y2hwYWQgYW5kIERBVEEgU1JBTSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCA3MmJhMDhkLi4xZDQ1ZmQ2IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMTcsNyArMTcsOCBAQAogICogcmVnaXN0ZXJzIGxpa2UgY3IzIG9uIHRoZSBpMzg2CiAgKi8KIAotZXh0ZXJuIHZvbGF0aWxlIERFRklORV9QRVJfQ1BVKHBnZF90ICosY3VycmVudF9wZ2QpOyAvKiBkZWZpbmVkIGluIGFyY2gvY3Jpcy9tbS9mYXVsdC5jICovCisvKiBkZWZpbmVkIGluIGFyY2gvY3Jpcy9tbS9mYXVsdC5jICovCitERUNMQVJFX1BFUl9DUFUocGdkX3QgKiwgY3VycmVudF9wZ2QpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGQ1Y2Y3NDAuLjQ1ZWM0OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU5LDYgKzU5LDkgQEAKICNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNwogI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORwogCisjZGVmaW5lIFNPX1BST1RPQ09MCQkzOAorI2RlZmluZSBTT19ET01BSU4JCTM5CisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggYjMyNjAyMy4uNDhiMGYzOSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2NyaXMva2VybmVsL3B0cmFjZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0zNiw0ICszNywxMSBAQAogCS8qIGRlYWwgd2l0aCBwZW5kaW5nIHNpZ25hbCBkZWxpdmVyeSAqLwogCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIF9USUZfU0lHUEVORElORykKIAkJZG9fc2lnbmFsKGNhbnJlc3RhcnQscmVncyk7CisKKwlpZiAodGhyZWFkX2luZm9fZmxhZ3MgJiBfVElGX05PVElGWV9SRVNVTUUpIHsKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05PVElGWV9SRVNVTUUpOworCQl0cmFjZWhvb2tfbm90aWZ5X3Jlc3VtZShyZWdzKTsKKwkJaWYgKGN1cnJlbnQtPnJlcGxhY2VtZW50X3Nlc3Npb25fa2V5cmluZykKKwkJCWtleV9yZXBsYWNlX3Nlc3Npb25fa2V5cmluZygpOworCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAwZDJhZGZjLi42YzgxODM2IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xNDAsMTIgKzE0MCw3IEBACiAJX2VuZCA9IC47CiAJX19lbmQgPSAuOwogCi0JLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCi0JL0RJU0NBUkQvIDogewotCQlFWElUX1RFWFQKLQkJRVhJVF9EQVRBCi0JCSooLmV4aXRjYWxsLmV4aXQpCi0gICAgICAgIH0KLQogCWRyYW1fZW5kID0gZHJhbV9zdGFydCArIChDT05GSUdfRVRSQVhfRFJBTV9TSVpFIC0gX19DT05GSUdfRVRSQVhfVk1FTV9TSVpFKSoxMDI0KjEwMjQ7CisKKwlESVNDQVJEUwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL21tL2ZhdWx0LmMgYi9hcmNoL2NyaXMvbW0vZmF1bHQuYwppbmRleCBmOTI1MTE1Li40YTdjZGQ5IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvbW0vZmF1bHQuYworKysgYi9hcmNoL2NyaXMvbW0vZmF1bHQuYwpAQCAtMjksNyArMjksNyBAQAogCiAvKiBjdXJyZW50IGFjdGl2ZSBwYWdlIGRpcmVjdG9yeSAqLwogCi12b2xhdGlsZSBERUZJTkVfUEVSX0NQVShwZ2RfdCAqLGN1cnJlbnRfcGdkKTsKK0RFRklORV9QRVJfQ1BVKHBnZF90ICosIGN1cnJlbnRfcGdkKTsKIHVuc2lnbmVkIGxvbmcgY3Jpc19zaWduYWxfcmV0dXJuX3BhZ2U7CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDU3YzNkNDAuLjJkZWE3MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01Nyw1ICs1Nyw4IEBACiAjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKICNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKIAorI2RlZmluZSBTT19QUk9UT0NPTAkJMzgKKyNkZWZpbmUgU09fRE9NQUlOCQkzOQorCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2Zydi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNGE3YTYyYy4uNmIwYTJiNiAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9zaWduYWwuYwpAQCAtNTcyLDYgKzU3Miw4IEBACiAJaWYgKHRocmVhZF9pbmZvX2ZsYWdzICYgX1RJRl9OT1RJRllfUkVTVU1FKSB7CiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9OT1RJRllfUkVTVU1FKTsKIAkJdHJhY2Vob29rX25vdGlmeV9yZXN1bWUoX19mcmFtZSk7CisJCWlmIChjdXJyZW50LT5yZXBsYWNlbWVudF9zZXNzaW9uX2tleXJpbmcpCisJCQlrZXlfcmVwbGFjZV9zZXNzaW9uX2tleXJpbmcoKTsKIAl9CiAKIH0gLyogZW5kIGRvX25vdGlmeV9yZXN1bWUoKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2Zydi9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAyMmQ5Nzg3Li43ZGJmNDFmIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2Zydi9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTc3LDYgKzE3Nyw4IEBACiAgIC5kZWJ1Z19yYW5nZXMJCTAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQogCiAgIC5jb21tZW50IDAgOiB7ICooLmNvbW1lbnQpIH0KKworICBESVNDQVJEUwogfQogCiBfX2tlcm5lbF9pbWFnZV9zaXplX25vX2JzcyA9IF9fYnNzX3N0YXJ0IC0gX19rZXJuZWxfaW1hZ2Vfc3RhcnQ7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA2MDI1MThhNy4uMTU0N2YwMSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01Nyw0ICs1Nyw3IEBACiAjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKICNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKIAorI2RlZmluZSBTT19QUk9UT0NPTAkJMzgKKyNkZWZpbmUgU09fRE9NQUlOCQkzOQorCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDhiYmM4YjAuLjcwZTY3ZTQ3IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC04OSw2ICs4OSw3IEBACiAJCQkJCSAgIFRJRl9ORUVEX1JFU0NIRUQgKi8KICNkZWZpbmUgVElGX01FTURJRQkJNAogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTUJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwoKSAqLworI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQk2CS8qIGNhbGxiYWNrIGJlZm9yZSByZXR1cm5pbmcgdG8gdXNlciAqLwogI2RlZmluZSBUSUZfRlJFRVpFCQkxNgkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAvKiBhcyBhYm92ZSwgYnV0IGFzIGJpdCB2YWx1ZXMgKi8KQEAgLTk3LDYgKzk4LDcgQEAKICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMSA8PCBUSUZfTk9USUZZX1JFU1VNRSkKICNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogCiAjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDBGRkZFCS8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9oODMwMC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggY2YzNDcyZi4uYWY4NDJjMyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvc2lnbmFsLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTU1Miw0ICs1NTMsMTEgQEAKIHsKIAlpZiAodGhyZWFkX2luZm9fZmxhZ3MgJiAoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9SRVNUT1JFX1NJR01BU0spKQogCQlkb19zaWduYWwocmVncywgTlVMTCk7CisKKwlpZiAodGhyZWFkX2luZm9fZmxhZ3MgJiBfVElGX05PVElGWV9SRVNVTUUpIHsKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05PVElGWV9SRVNVTUUpOworCQl0cmFjZWhvb2tfbm90aWZ5X3Jlc3VtZShyZWdzKTsKKwkJaWYgKGN1cnJlbnQtPnJlcGxhY2VtZW50X3Nlc3Npb25fa2V5cmluZykKKwkJCWtleV9yZXBsYWNlX3Nlc3Npb25fa2V5cmluZygpOworCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDQzYTg3YjkuLjY2MmIwMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTUyLDkgKzE1Miw2IEBACiAJX19lbmQgPSAuIDsKIAlfX3JhbXN0YXJ0ID0gLjsKIAl9Ci0JL0RJU0NBUkQvIDogewotCQkqKC5leGl0Y2FsbC5leGl0KQotCX0KICAgICAgICAgLnJvbWZzIDoJCiAJewogCQkqKC5yb21mcyopCkBAIC0xNjUsNCArMTYyLDYgQEAKIAlDT01NQU5EX1NUQVJUID0gLiAtIDB4MjAwIDsKIAlfX3JhbWVuZCA9IC4gOwogCX0KKworCURJU0NBUkRTCiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IDE3MDA0MmIuLjAxMWExY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC04OSw2ICs4OSw5IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgSEFWRV9MRUdBQ1lfUEVSX0NQVV9BUkVBCisJZGVmX2Jvb2wgeQorCiBjb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKIAlkZWZfYm9vbCB5CiAKQEAgLTExMiw2ICsxMTUsMTAgQEAKIAlib29sCiAJc2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SCiAKK2NvbmZpZyBBUkNIX1VTRVNfUEdfVU5DQUNIRUQKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBJQTY0X1VOQ0FDSEVEX0FMTE9DQVRPUgorCiBjb25maWcgQVVESVRfQVJDSAogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltZXRoLmMgYi9hcmNoL2lhNjQvaHAvc2ltL3NpbWV0aC5jCmluZGV4IGU0ZDhmZGUuLjdlODE5NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltZXRoLmMKKysrIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1ldGguYwpAQCAtNDEyLDcgKzQxMiw3IEBACiAJICovCiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWdwLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWdwLmgKaW5kZXggYzExZmRkOC4uMDFkMDljNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FncC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hZ3AuaApAQCAtMTcsMTAgKzE3LDYgQEAKICNkZWZpbmUgdW5tYXBfcGFnZV9mcm9tX2FncChwYWdlKQkvKiBub3RoaW5nICovCiAjZGVmaW5lIGZsdXNoX2FncF9jYWNoZSgpCQltYigpCiAKLS8qIENvbnZlcnQgYSBwaHlzaWNhbCBhZGRyZXNzIHRvIGFuIGFkZHJlc3Mgc3VpdGFibGUgZm9yIHRoZSBHQVJULiAqLwotI2RlZmluZSBwaHlzX3RvX2dhcnQoeCkgKHgpCi0jZGVmaW5lIGdhcnRfdG9fcGh5cyh4KSAoeCkKLQogLyogR0FUVCBhbGxvY2F0aW9uLiBSZXR1cm5zL2FjY2VwdHMgR0FUVCBrZXJuZWwgdmlydHVhbCBhZGRyZXNzLiAqLwogI2RlZmluZSBhbGxvY19nYXR0X3BhZ2VzKG9yZGVyKQkJXAogCSgoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgKG9yZGVyKSkpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZGV2aWNlLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZGV2aWNlLmgKaW5kZXggNDFhYjg1ZC4uZDY2ZDQ0NiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2RldmljZS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kZXZpY2UuaApAQCAtMTUsNCArMTUsNyBAQAogI2VuZGlmCiB9OwogCitzdHJ1Y3QgcGRldl9hcmNoZGF0YSB7Cit9OworCiAjZW5kaWYgLyogX0FTTV9JQTY0X0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDVhNjFiNWMuLjhkM2M3OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC00NCw3ICs0NCw2IEBACiAjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCiAKICNkZWZpbmUgZ2V0X2RtYV9vcHMoZGV2KSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpCi0jZGVmaW5lIGZsdXNoX3dyaXRlX2J1ZmZlcnMoKQogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmctY29tbW9uLmg+CiAKQEAgLTY5LDYgKzY4LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBkbWFfY2FwYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUpCit7CisJaWYgKCFkZXYtPmRtYV9tYXNrKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBhZGRyICsgc2l6ZSA8PSAqZGV2LT5kbWFfbWFzazsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHBoeXNfdG9fZG1hKHN0cnVjdCBkZXZpY2UgKmRldiwgcGh5c19hZGRyX3QgcGFkZHIpCit7CisJcmV0dXJuIHBhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IGRtYV90b19waHlzKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkYWRkcikKK3sKKwlyZXR1cm4gZGFkZHI7Cit9CisKIGV4dGVybiBpbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA1ZjQzNjk3Li5kOWI2MzI1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjM1LDcgKzIzNSw4IEBACiAjZGVmaW5lIEtWTV9SRVFfUFRDX0cJCTMyCiAjZGVmaW5lIEtWTV9SRVFfUkVTVU1FCQkzMwogCi0jZGVmaW5lIEtWTV9QQUdFU19QRVJfSFBBR0UJMQorI2RlZmluZSBLVk1fTlJfUEFHRV9TSVpFUwkxCisjZGVmaW5lIEtWTV9QQUdFU19QRVJfSFBBR0UoeCkJMQogCiBzdHJ1Y3Qga3ZtOwogc3RydWN0IGt2bV92Y3B1OwpAQCAtNDY1LDcgKzQ2Niw2IEBACiAJdW5zaWduZWQgbG9uZwltZXRhcGh5c2ljYWxfcnI0OwogCXVuc2lnbmVkIGxvbmcJdm1tX2luaXRfcnI7CiAKLQlpbnQJCW9ubGluZV92Y3B1czsKIAlpbnQJCWlzX3NuMjsKIAogCXN0cnVjdCBrdm1faW9hcGljICp2aW9hcGljOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX3BhcmEuaAppbmRleCAwZDZkOGNhLi4xNTg4YWVlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX3BhcmEuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX3BhcmEuaApAQCAtMTksOSArMTksMTMgQEAKICAqCiAgKi8KIAorI2lmZGVmIF9fS0VSTkVMX18KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga3ZtX2FyY2hfcGFyYV9mZWF0dXJlcyh2b2lkKQogewogCXJldHVybiAwOwogfQogCiAjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggNzQ1NDIxMi4uMGIwZDVmZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjYsNCArNjYsNyBAQAogI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CiAjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCiAKKyNkZWZpbmUgU09fUFJPVE9DT0wJCTM4CisjZGVmaW5lIFNPX0RPTUFJTgkJMzkKKwogI2VuZGlmIC8qIF9BU01fSUE2NF9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwppbmRleCAyM2Y4NDZkLi5lNmM1YzNkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGFzbS9tY2FfYXNtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlICJoZWFkLmgiCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKICNkZWZpbmUgU0FMX1BTUl9CSVRTX1RPX1NFVAkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2hlYWQuaCBiL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMmFjNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuaApAQCAtMCwwICsxIEBACitleHRlcm4gdm9pZCBjb25zb2xlX3ByaW50KGNvbnN0IGNoYXIgKnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCA1ZDdjMGU1Li45YmNlYzk5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTYxLDYgKzE2MSwxMyBAQAogCQlzaG93X3N0YWNrKE5VTEwsIE5VTEwpOwogfQogCisvKiBsb2NhbCBzdXBwb3J0IGZvciBkZXByZWNhdGVkIGNvbnNvbGVfcHJpbnQgKi8KK3ZvaWQKK2NvbnNvbGVfcHJpbnQoY29uc3QgY2hhciAqcykKK3sKKwlwcmludGsoS0VSTl9FTUVSRyAiJXMiLCBzKTsKK30KKwogdm9pZAogZG9fbm90aWZ5X3Jlc3VtZV91c2VyKHNpZ3NldF90ICp1bnVzZWQsIHN0cnVjdCBzaWdzY3JhdGNoICpzY3IsIGxvbmcgaW5fc3lzY2FsbCkKIHsKQEAgLTE5Miw2ICsxOTksOCBAQAogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9OT1RJRllfUkVTVU1FKSkgewogCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfTk9USUZZX1JFU1VNRSk7CiAJCXRyYWNlaG9va19ub3RpZnlfcmVzdW1lKCZzY3ItPnB0KTsKKwkJaWYgKGN1cnJlbnQtPnJlcGxhY2VtZW50X3Nlc3Npb25fa2V5cmluZykKKwkJCWtleV9yZXBsYWNlX3Nlc3Npb25fa2V5cmluZygpOwogCX0KIAogCS8qIGNvcHkgdXNlciByYnMgdG8ga2VybmVsIHJicyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IDFiMjNlYzEyLi4xZGU4NmM5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCkBAIC04NTUsMTEgKzg1NSwxNyBAQAogCWMtPnVuaW1wbF9wYV9tYXNrID0gfigoMUw8PDYzKSB8ICgoMUwgPDwgcGh5c19hZGRyX3NpemUpIC0gMSkpOwogfQogCisvKgorICogSW4gVVAgY29uZmlndXJhdGlvbiwgc2V0dXBfcGVyX2NwdV9hcmVhcygpIGlzIGRlZmluZWQgaW4KKyAqIGluY2x1ZGUvbGludXgvcGVyY3B1LmgKKyAqLworI2lmZGVmIENPTkZJR19TTVAKIHZvaWQgX19pbml0CiBzZXR1cF9wZXJfY3B1X2FyZWFzICh2b2lkKQogewogCS8qIHN0YXJ0X2tlcm5lbCgpIHJlcXVpcmVzIHRoaXMuLi4gKi8KIH0KKyNlbmRpZgogCiAvKgogICogRG8gdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbnM6CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NtcC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXAuYwppbmRleCBmMGM1MjFiLi45M2ViZmVhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc21wLmMKQEAgLTU4LDcgKzU4LDggQEAKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiB9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDMyKSkpIGxvY2FsX3RsYl9mbHVzaF9jb3VudHNbTlJfQ1BVU107CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBzaG9ydCwgc2hhZG93X2ZsdXNoX2NvdW50c1tOUl9DUFVTXSkgX19fX2NhY2hlbGluZV9hbGlnbmVkOworc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHVuc2lnbmVkIHNob3J0IFtOUl9DUFVTXSwKKwkJCQkgICAgIHNoYWRvd19mbHVzaF9jb3VudHMpOwogCiAjZGVmaW5lIElQSV9DQUxMX0ZVTkMJCTAKICNkZWZpbmUgSVBJX0NQVV9TVE9QCQkxCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNGE5NWU4Ni4uZWI0MjE0ZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMjQsMTQgKzI0LDE0IEBACiB9CiBTRUNUSU9OUwogewotICAvKiBTZWN0aW9ucyB0byBiZSBkaXNjYXJkZWQgKi8KKyAgLyogdW53aW5kIGV4aXQgc2VjdGlvbnMgbXVzdCBiZSBkaXNjYXJkZWQgYmVmb3JlIHRoZSByZXN0IG9mIHRoZQorICAgICBzZWN0aW9ucyBnZXQgaW5jbHVkZWQuICovCiAgIC9ESVNDQVJELyA6IHsKLQlFWElUX1RFWFQKLQlFWElUX0RBVEEKLQkqKC5leGl0Y2FsbC5leGl0KQogCSooLklBXzY0LnVud2luZC5leGl0LnRleHQpCiAJKiguSUFfNjQudW53aW5kX2luZm8uZXhpdC50ZXh0KQotCX0KKwkqKC5jb21tZW50KQorCSooLm5vdGUpCisgIH0KIAogICB2ID0gUEFHRV9PRkZTRVQ7CS8qIHRoaXMgc3ltYm9sIGlzIGhlcmUgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLi4uICovCiAgIHBoeXNfc3RhcnQgPSBfc3RhcnQgLSBMT0FEX09GRlNFVDsKQEAgLTMxNiw3ICszMTYsNyBAQAogICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQogICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQogICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9Ci0gIC8qIFRoZXNlIG11c3QgYXBwZWFyIHJlZ2FyZGxlc3Mgb2YgIC4gICovCi0gIC9ESVNDQVJELyA6IHsgKiguY29tbWVudCkgfQotICAvRElTQ0FSRC8gOiB7ICooLm5vdGUpIH0KKworICAvKiBEZWZhdWx0IGRpc2NhcmRzICovCisgIERJU0NBUkRTCiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL0tjb25maWcgYi9hcmNoL2lhNjQva3ZtL0tjb25maWcKaW5kZXggNjRkNTIwOS4uZWYzZTdiZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9rdm0vS2NvbmZpZwpAQCAtMSwxMiArMSw4IEBACiAjCiAjIEtWTSBjb25maWd1cmF0aW9uCiAjCi1jb25maWcgSEFWRV9LVk0KLQlib29sCiAKLWNvbmZpZyBIQVZFX0tWTV9JUlFDSElQCi0gICAgICAgYm9vbAotICAgICAgIGRlZmF1bHQgeQorc291cmNlICJ2aXJ0L2t2bS9LY29uZmlnIgogCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCkBAIC0yOCw2ICsyNCw4IEBACiAJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgUFJFRU1QVF9OT1RJRklFUlMKIAlzZWxlY3QgQU5PTl9JTk9ERVMKKwlzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUAorCXNlbGVjdCBLVk1fQVBJQ19BUkNISVRFQ1RVUkUKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGhvc3RpbmcgZnVsbHkgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgaGFyZHdhcmUKIAkgIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuICBZb3Ugd2lsbCBuZWVkIGEgZmFpcmx5IHJlY2VudApAQCAtNDksOSArNDcsNiBAQAogCSAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEl0YW5pdW0gMiBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIFZUCiAJICBleHRlbnNpb25zLgogCi1jb25maWcgS1ZNX1RSQUNFCi0gICAgICAgYm9vbAotCiBzb3VyY2UgZHJpdmVycy92aXJ0aW8vS2NvbmZpZwogCiBlbmRpZiAjIFZJUlRVQUxJWkFUSU9OCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKaW5kZXggODBjNTdiMC4uMGFkMDlmMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCisrKyBiL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYwpAQCAtMjEwLDE2ICsyMTAsNiBAQAogCiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdmNwdV9maW5kX21taW9fZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkJZ3BhX3QgYWRkciwgaW50IGxlbiwgaW50IGlzX3dyaXRlKQotewotCXN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXY7Ci0KLQlkZXYgPSBrdm1faW9fYnVzX2ZpbmRfZGV2KCZ2Y3B1LT5rdm0tPm1taW9fYnVzLCBhZGRyLCBsZW4sIGlzX3dyaXRlKTsKLQotCXJldHVybiBkZXY7Ci19Ci0KIHN0YXRpYyBpbnQgaGFuZGxlX3ZtX2Vycm9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9VTktOT1dOOwpAQCAtMjMxLDYgKzIyMSw3IEBACiB7CiAJc3RydWN0IGt2bV9tbWlvX3JlcSAqcDsKIAlzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqbW1pb19kZXY7CisJaW50IHI7CiAKIAlwID0ga3ZtX2dldF92Y3B1X2lvcmVxKHZjcHUpOwogCkBAIC0yNDcsMTYgKzIzOCwxMyBAQAogCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfTU1JTzsKIAlyZXR1cm4gMDsKIG1taW86Ci0JbW1pb19kZXYgPSB2Y3B1X2ZpbmRfbW1pb19kZXYodmNwdSwgcC0+YWRkciwgcC0+c2l6ZSwgIXAtPmRpcik7Ci0JaWYgKG1taW9fZGV2KSB7Ci0JCWlmICghcC0+ZGlyKQotCQkJa3ZtX2lvZGV2aWNlX3dyaXRlKG1taW9fZGV2LCBwLT5hZGRyLCBwLT5zaXplLAotCQkJCQkJJnAtPmRhdGEpOwotCQllbHNlCi0JCQlrdm1faW9kZXZpY2VfcmVhZChtbWlvX2RldiwgcC0+YWRkciwgcC0+c2l6ZSwKLQkJCQkJCSZwLT5kYXRhKTsKLQotCX0gZWxzZQorCWlmIChwLT5kaXIpCisJCXIgPSBrdm1faW9fYnVzX3JlYWQoJnZjcHUtPmt2bS0+bW1pb19idXMsIHAtPmFkZHIsCisJCQkJICAgIHAtPnNpemUsICZwLT5kYXRhKTsKKwllbHNlCisJCXIgPSBrdm1faW9fYnVzX3dyaXRlKCZ2Y3B1LT5rdm0tPm1taW9fYnVzLCBwLT5hZGRyLAorCQkJCSAgICAgcC0+c2l6ZSwgJnAtPmRhdGEpOworCWlmIChyKQogCQlwcmludGsoS0VSTl9FUlIia3ZtOiBObyBpb2RldmljZSBmb3VuZCEgYWRkcjolbHhcbiIsIHAtPmFkZHIpOwogCXAtPnN0YXRlID0gU1RBVEVfSU9SRVNQX1JFQURZOwogCkBAIC0zMzcsMTMgKzMyNSwxMiBAQAogewogCXVuaW9uIGlhNjRfbGlkIGxpZDsKIAlpbnQgaTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAKLQlmb3IgKGkgPSAwOyBpIDwga3ZtLT5hcmNoLm9ubGluZV92Y3B1czsgaSsrKSB7Ci0JCWlmIChrdm0tPnZjcHVzW2ldKSB7Ci0JCQlsaWQudmFsID0gVkNQVV9MSUQoa3ZtLT52Y3B1c1tpXSk7Ci0JCQlpZiAobGlkLmlkID09IGlkICYmIGxpZC5laWQgPT0gZWlkKQotCQkJCXJldHVybiBrdm0tPnZjcHVzW2ldOwotCQl9CisJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7CisJCWxpZC52YWwgPSBWQ1BVX0xJRCh2Y3B1KTsKKwkJaWYgKGxpZC5pZCA9PSBpZCAmJiBsaWQuZWlkID09IGVpZCkKKwkJCXJldHVybiB2Y3B1OwogCX0KIAogCXJldHVybiBOVUxMOwpAQCAtNDA5LDIxICszOTYsMjEgQEAKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LT5rdm07CiAJc3RydWN0IGNhbGxfZGF0YSBjYWxsX2RhdGE7CiAJaW50IGk7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1aTsKIAogCWNhbGxfZGF0YS5wdGNfZ19kYXRhID0gcC0+dS5wdGNfZ19kYXRhOwogCi0JZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewotCQlpZiAoIWt2bS0+dmNwdXNbaV0gfHwga3ZtLT52Y3B1c1tpXS0+YXJjaC5tcF9zdGF0ZSA9PQotCQkJCQkJS1ZNX01QX1NUQVRFX1VOSU5JVElBTElaRUQgfHwKLQkJCQkJdmNwdSA9PSBrdm0tPnZjcHVzW2ldKQorCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHVpLCBrdm0pIHsKKwkJaWYgKHZjcHVpLT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9VTklOSVRJQUxJWkVEIHx8CisJCQkJdmNwdSA9PSB2Y3B1aSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZrdm0tPnZjcHVzW2ldLT53cSkpCi0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmt2bS0+dmNwdXNbaV0tPndxKTsKKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnZjcHVpLT53cSkpCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnZjcHVpLT53cSk7CiAKLQkJaWYgKGt2bS0+dmNwdXNbaV0tPmNwdSAhPSAtMSkgewotCQkJY2FsbF9kYXRhLnZjcHUgPSBrdm0tPnZjcHVzW2ldOwotCQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGt2bS0+dmNwdXNbaV0tPmNwdSwKKwkJaWYgKHZjcHVpLT5jcHUgIT0gLTEpIHsKKwkJCWNhbGxfZGF0YS52Y3B1ID0gdmNwdWk7CisJCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUodmNwdWktPmNwdSwKIAkJCQkJdmNwdV9nbG9iYWxfcHVyZ2UsICZjYWxsX2RhdGEsIDEpOwogCQl9IGVsc2UKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcia3ZtOiBVbmluaXQgdmNwdSByZWNlaXZlZCBpcGkhXG4iKTsKQEAgLTg1Miw4ICs4MzksNiBAQAogCiAJa3ZtX2luaXRfdm0oa3ZtKTsKIAotCWt2bS0+YXJjaC5vbmxpbmVfdmNwdXMgPSAwOwotCiAJcmV0dXJuIGt2bTsKIAogfQpAQCAtMTAwMCwxMCArOTg1LDEwIEBACiAJCQlnb3RvIG91dDsKIAkJaWYgKGlycWNoaXBfaW5fa2VybmVsKGt2bSkpIHsKIAkJCV9fczMyIHN0YXR1czsKLQkJCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJCQltdXRleF9sb2NrKCZrdm0tPmlycV9sb2NrKTsKIAkJCXN0YXR1cyA9IGt2bV9zZXRfaXJxKGt2bSwgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELAogCQkJCSAgICBpcnFfZXZlbnQuaXJxLCBpcnFfZXZlbnQubGV2ZWwpOwotCQkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZrdm0tPmlycV9sb2NrKTsKIAkJCWlmIChpb2N0bCA9PSBLVk1fSVJRX0xJTkVfU1RBVFVTKSB7CiAJCQkJaXJxX2V2ZW50LnN0YXR1cyA9IHN0YXR1czsKIAkJCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpcnFfZXZlbnQsCkBAIC0xMjE2LDcgKzEyMDEsNyBAQAogCWlmIChJU19FUlIodm1tX3ZjcHUpKQogCQlyZXR1cm4gUFRSX0VSUih2bW1fdmNwdSk7CiAKLQlpZiAodmNwdS0+dmNwdV9pZCA9PSAwKSB7CisJaWYgKGt2bV92Y3B1X2lzX2JzcCh2Y3B1KSkgewogCQl2Y3B1LT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFOwogCiAJCS8qU2V0IGVudHJ5IGFkZHJlc3MgZm9yIGZpcnN0IHJ1bi4qLwpAQCAtMTIyNCw3ICsxMjA5LDcgQEAKIAogCQkvKkluaXRpYWxpemUgaXRjIG9mZnNldCBmb3IgdmNwdXMqLwogCQlpdGNfb2Zmc2V0ID0gMFVMIC0ga3ZtX2dldF9pdGModmNwdSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBrdm0tPmFyY2gub25saW5lX3ZjcHVzOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7IGkrKykgewogCQkJdiA9IChzdHJ1Y3Qga3ZtX3ZjcHUgKikoKGNoYXIgKil2Y3B1ICsKIAkJCQkJc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdV9kYXRhKSAqIGkpOwogCQkJdi0+YXJjaC5pdGNfb2Zmc2V0ID0gaXRjX29mZnNldDsKQEAgLTEzNTYsOCArMTM0MSw2IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlrdm0tPmFyY2gub25saW5lX3ZjcHVzKys7Ci0KIAlyZXR1cm4gdmNwdTsKIGZhaWw6CiAJcmV0dXJuIEVSUl9QVFIocik7CkBAIC0xOTUyLDE5ICsxOTM1LDYgQEAKICAgICByZXR1cm4gZmluZF9oaWdoZXN0X2JpdHMoKGludCAqKSZ2cGQtPmlyclswXSk7CiB9CiAKLWludCBrdm1fY3B1X2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWlmIChrdm1faGlnaGVzdF9wZW5kaW5nX2lycSh2Y3B1KSAhPSAtMSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBrdm1fYXJjaF9pbnRlcnJ1cHRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JLyogZG8gcmVhbCBjaGVjayBoZXJlICovCi0JcmV0dXJuIDE7Ci19Ci0KIGludCBrdm1fY3B1X2hhc19wZW5kaW5nX3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlyZXR1cm4gdmNwdS0+YXJjaC50aW1lcl9maXJlZDsKQEAgLTE5NzcsNyArMTk0Nyw4IEBACiAKIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gdmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfUlVOTkFCTEU7CisJcmV0dXJuICh2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9SVU5OQUJMRSkgfHwKKwkJKGt2bV9oaWdoZXN0X3BlbmRpbmdfaXJxKHZjcHUpICE9IC0xKTsKIH0KIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92Y3B1LmMgYi9hcmNoL2lhNjQva3ZtL3ZjcHUuYwppbmRleCBjYzQwNmQwLi5kY2U3NWI3MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92Y3B1LmMKKysrIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmMKQEAgLTgzMCw4ICs4MzAsOCBAQAogCiAJa3ZtID0gKHN0cnVjdCBrdm0gKilLVk1fVk1fQkFTRTsKIAotCWlmICh2Y3B1LT52Y3B1X2lkID09IDApIHsKLQkJZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgeworCWlmIChrdm1fdmNwdV9pc19ic3AodmNwdSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IGF0b21pY19yZWFkKCZrdm0tPm9ubGluZV92Y3B1cyk7IGkrKykgewogCQkJdiA9IChzdHJ1Y3Qga3ZtX3ZjcHUgKikoKGNoYXIgKil2Y3B1ICsKIAkJCQkJc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdV9kYXRhKSAqIGkpOwogCQkJVk1YKHYsIGl0Y19vZmZzZXQpID0gaXRjX29mZnNldDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYwppbmRleCBlNDU2ZjA2Li5lY2UxYmY5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCkBAIC03MSw3ICs3MSw3IEBACiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc25faHViX2luZm9fcywgX19zbl9odWJfaW5mbyk7CiBFWFBPUlRfUEVSX0NQVV9TWU1CT0woX19zbl9odWJfaW5mbyk7CiAKLURFRklORV9QRVJfQ1BVKHNob3J0LCBfX3NuX2Nub2RlaWRfdG9fbmFzaWRbTUFYX0NPTVBBQ1RfTk9ERVNdKTsKK0RFRklORV9QRVJfQ1BVKHNob3J0IFtNQVhfQ09NUEFDVF9OT0RFU10sIF9fc25fY25vZGVpZF90b19uYXNpZCk7CiBFWFBPUlRfUEVSX0NQVV9TWU1CT0woX19zbl9jbm9kZWlkX3RvX25hc2lkKTsKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG5vZGVwZGFfcyAqLCBfX3NuX25vZGVwZGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3hlbi90aW1lLmMgYi9hcmNoL2lhNjQveGVuL3RpbWUuYwppbmRleCBmYjgzMzI2Li5kYmVhZGI5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQveGVuL3RpbWUuYworKysgYi9hcmNoL2lhNjQveGVuL3RpbWUuYwpAQCAtMTMzLDggKzEzMyw3IEBACiAJCWFjY291bnRfaWRsZV90aWNrcyhibG9ja2VkKTsKIAkJcnVuX2xvY2FsX3RpbWVycygpOwogCi0JCWlmIChyY3VfcGVuZGluZyhjcHUpKQotCQkJcmN1X2NoZWNrX2NhbGxiYWNrcyhjcHUsIHVzZXJfbW9kZShnZXRfaXJxX3JlZ3MoKSkpOworCQlyY3VfY2hlY2tfY2FsbGJhY2tzKGNwdSwgdXNlcl9tb2RlKGdldF9pcnFfcmVncygpKSk7CiAKIAkJc2NoZWR1bGVyX3RpY2soKTsKIAkJcnVuX3Bvc2l4X2NwdV90aW1lcnMocCk7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggYmU3ZWQ1OC4uMzM5MGE4NiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTcsNCArNTcsNyBAQAogI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CiAjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCiAKKyNkZWZpbmUgU09fUFJPVE9DT0wJCTM4CisjZGVmaW5lIFNPX0RPTUFJTgkJMzkKKwogI2VuZGlmIC8qIF9BU01fTTMyUl9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAwN2JiNWJkLi43MTU3ODE1IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMTQ5LDYgKzE0OSw3IEBACiAjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMgkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCiAjZGVmaW5lIFRJRl9TSU5HTEVTVEVQCQkzCS8qIHJlc3RvcmUgc2luZ2xlc3RlcCBvbiByZXR1cm4gdG8gdXNlciBtb2RlICovCiAjZGVmaW5lIFRJRl9JUkVUCQk0CS8qIHJldHVybiB3aXRoIGlyZXQgKi8KKyNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUJNQkvKiBjYWxsYmFjayBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXIgKi8KICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk4CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KICNkZWZpbmUgVElGX1VTRURGUFUJCTE2CS8qIEZQVSB3YXMgdXNlZCBieSB0aGlzIHRhc2sgdGhpcyBxdWFudHVtIChTTVApICovCiAjZGVmaW5lIFRJRl9QT0xMSU5HX05SRkxBRwkxNwkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcgVElGX05FRURfUkVTQ0hFRCAqLwpAQCAtMTYwLDYgKzE2MSw3IEBACiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQogI2RlZmluZSBfVElGX1NJTkdMRVNURVAJCSgxPDxUSUZfU0lOR0xFU1RFUCkKICNkZWZpbmUgX1RJRl9JUkVUCQkoMTw8VElGX0lSRVQpCisjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQogI2RlZmluZSBfVElGX1VTRURGUFUJCSgxPDxUSUZfVVNFREZQVSkKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMTgxMjQ1NC4uMTQ0YjBmMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3Vjb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTQwOCw1ICs0MDksMTIgQEAKIAlpZiAodGhyZWFkX2luZm9fZmxhZ3MgJiBfVElGX1NJR1BFTkRJTkcpCiAJCWRvX3NpZ25hbChyZWdzLG9sZHNldCk7CiAKKwlpZiAodGhyZWFkX2luZm9fZmxhZ3MgJiBfVElGX05PVElGWV9SRVNVTUUpIHsKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05PVElGWV9SRVNVTUUpOworCQl0cmFjZWhvb2tfbm90aWZ5X3Jlc3VtZShyZWdzKTsKKwkJaWYgKGN1cnJlbnQtPnJlcGxhY2VtZW50X3Nlc3Npb25fa2V5cmluZykKKwkJCWtleV9yZXBsYWNlX3Nlc3Npb25fa2V5cmluZygpOworCX0KKwogCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9JUkVUKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA0MTc5YWRmLi5kZTVlMjFjIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xMjAsMTMgKzEyMCw2IEBACiAKICAgX2VuZCA9IC4gOwogCi0gIC8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLwotICAvRElTQ0FSRC8gOiB7Ci0JRVhJVF9URVhUCi0JRVhJVF9EQVRBCi0JKiguZXhpdGNhbGwuZXhpdCkKLQl9Ci0KICAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KICAgLnN0YWIgMCA6IHsgKiguc3RhYikgfQogICAuc3RhYnN0ciAwIDogeyAqKC5zdGFic3RyKSB9CkBAIC0xMzUsNCArMTI4LDcgQEAKICAgLnN0YWIuaW5kZXggMCA6IHsgKiguc3RhYi5pbmRleCkgfQogICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CiAgIC5jb21tZW50IDAgOiB7ICooLmNvbW1lbnQpIH0KKworICAvKiBTZWN0aW9ucyB0byBiZSBkaXNjYXJkZWQgKi8KKyAgRElTQ0FSRFMKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9lbnRyeV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VudHJ5X21tLmgKaW5kZXggNTIwMmY1YS4uNDc0MTI1OCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VudHJ5X21tLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VudHJ5X21tLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKICNkZWZpbmUgY3VycHRyIGEyCiAKIExGTFVTSF9JX0FORF9EID0gMHgwMDAwMDgwOAotTFNJR1RSQVAgPSA1CiAKIC8qIHByb2Nlc3MgYml0cyBmb3IgdGFza19zdHJ1Y3QucHRyYWNlICovCiBQVF9UUkFDRVNZU19PRkYgPSAzCkBAIC0xMTgsOSArMTE3LDYgQEAKICNkZWZpbmUgU1RSKFgpIFNUUjEoWCkKICNkZWZpbmUgU1RSMShYKSAjWAogCi0jZGVmaW5lIFBUX09GRl9PUklHX0QwCSAweDI0Ci0jZGVmaW5lIFBUX09GRl9GT1JNQVRWRUMgMHgzMgotI2RlZmluZSBQVF9PRkZfU1IJIDB4MkMKICNkZWZpbmUgU0FWRV9BTExfSU5UCQkJCVwKIAkiY2xybAklJXNwQC07IiAgICAvKiBzdGtfYWRqICovCVwKIAkicGVhCS0xOnc7IgkgICAgLyogb3JpZyBkMCA9IC0xICovCVwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9lbnRyeV9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VudHJ5X25vLmgKaW5kZXggYzI1NTNkMi4uOTA3ZWQwMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VudHJ5X25vLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VudHJ5X25vLmgKQEAgLTcyLDggKzcyLDggQEAKIAlsZWEJJXNwQCgtMzIpLCVzcAkJLyogc3BhY2UgZm9yIDggcmVncyAqLwogCW1vdmVtbAklZDEtJWQ1LyVhMC0lYTIsJXNwQAogCW1vdmVsCXN3X3VzcCwlYTAJCS8qIGdldCB1c3AgKi8KLQltb3ZlbAklYTBALSwlc3BAKFBUX1BDKQkvKiBjb3B5IGV4Y2VwdGlvbiBwcm9ncmFtIGNvdW50ZXIgKi8KLQltb3ZlbAklYTBALSwlc3BAKFBUX0ZPUk1BVFZFQykvKiBjb3B5IGV4Y2VwdGlvbiBmb3JtYXQvdmVjdG9yL3NyICovCisJbW92ZWwJJWEwQC0sJXNwQChQVF9PRkZfUEMpCS8qIGNvcHkgZXhjZXB0aW9uIHByb2dyYW0gY291bnRlciAqLworCW1vdmVsCSVhMEAtLCVzcEAoUFRfT0ZGX0ZPUk1BVFZFQykvKmNvcHkgZXhjZXB0aW9uIGZvcm1hdC92ZWN0b3Ivc3IgKi8KIAlicmEJN2YKIAk2OgogCWNscmwJJXNwQC0JCQkvKiBzdGthZGogKi8KQEAgLTg5LDggKzg5LDggQEAKIAlibmVzCThmCQkJLyogbm8sIHNraXAgKi8KIAltb3ZlCSMweDI3MDAsJXNyCQkvKiBkaXNhYmxlIGludHJzICovCiAJbW92ZWwJc3dfdXNwLCVhMAkJLyogZ2V0IHVzcCAqLwotCW1vdmVsCSVzcEAoUFRfUEMpLCVhMEAtCS8qIGNvcHkgZXhjZXB0aW9uIHByb2dyYW0gY291bnRlciAqLwotCW1vdmVsCSVzcEAoUFRfRk9STUFUVkVDKSwlYTBALS8qIGNvcHkgZXhjZXB0aW9uIGZvcm1hdC92ZWN0b3Ivc3IgKi8KKwltb3ZlbAklc3BAKFBUX09GRl9QQyksJWEwQC0JLyogY29weSBleGNlcHRpb24gcHJvZ3JhbSBjb3VudGVyICovCisJbW92ZWwJJXNwQChQVF9PRkZfRk9STUFUVkVDKSwlYTBALS8qY29weSBleGNlcHRpb24gZm9ybWF0L3ZlY3Rvci9zciAqLwogCW1vdmVtbAklc3BALCVkMS0lZDUvJWEwLSVhMgogCWxlYQklc3BAKDMyKSwlc3AJCS8qIHNwYWNlIGZvciA4IHJlZ3MgKi8KIAltb3ZlbAklc3BAKywlZDAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYXRoLWVtdS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hdGgtZW11LmgKaW5kZXggZGRmYWI5Ni4uNWU5MjQ5YiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hdGgtZW11LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hdGgtZW11LmgKQEAgLTE0NSwxNiArMTQ1LDE2IEBACiAgKiB0aGVzZSBhcmUgb25seSB1c2VkIGR1cmluZyBpbnN0cnVjdGlvbiBkZWNvZGluZwogICogd2hlcmUgd2UgYWx3YXlzIGtub3cgaG93IGRlZXAgd2UncmUgb24gdGhlIHN0YWNrLgogICovCi0jZGVmaW5lIEZQU19ETwkJKFBUX0QwKQotI2RlZmluZSBGUFNfRDEJCShQVF9EMSkKLSNkZWZpbmUgRlBTX0QyCQkoUFRfRDIpCi0jZGVmaW5lIEZQU19BMAkJKFBUX0EwKQotI2RlZmluZSBGUFNfQTEJCShQVF9BMSkKLSNkZWZpbmUgRlBTX0EyCQkoUFRfQTIpCi0jZGVmaW5lIEZQU19TUgkJKFBUX1NSKQotI2RlZmluZSBGUFNfUEMJCShQVF9QQykKLSNkZWZpbmUgRlBTX0VBCQkoUFRfUEMrNikKLSNkZWZpbmUgRlBTX1BDMgkJKFBUX1BDKzEwKQorI2RlZmluZSBGUFNfRE8JCShQVF9PRkZfRDApCisjZGVmaW5lIEZQU19EMQkJKFBUX09GRl9EMSkKKyNkZWZpbmUgRlBTX0QyCQkoUFRfT0ZGX0QyKQorI2RlZmluZSBGUFNfQTAJCShQVF9PRkZfQTApCisjZGVmaW5lIEZQU19BMQkJKFBUX09GRl9BMSkKKyNkZWZpbmUgRlBTX0EyCQkoUFRfT0ZGX0EyKQorI2RlZmluZSBGUFNfU1IJCShQVF9PRkZfU1IpCisjZGVmaW5lIEZQU19QQwkJKFBUX09GRl9QQykKKyNkZWZpbmUgRlBTX0VBCQkoUFRfT0ZGX1BDKzYpCisjZGVmaW5lIEZQU19QQzIJCShQVF9PRkZfUEMrMTApCiAKIC5tYWNybwlmcF9nZXRfZnBfcmVnCiAJbGVhCShGUERfRlBSRUcsRlBEQVRBLCVkMC53KjQpLCVhMApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGNhODdmOTMuLmVlZTAxY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU3LDQgKzU3LDcgQEAKICNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNwogI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORwogCisjZGVmaW5lIFNPX1BST1RPQ09MCQkzOAorI2RlZmluZSBTT19ET01BSU4JCTM5CisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19tbS5oCmluZGV4IDZlYTVjMzMuLmI2ZGEzODggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19tbS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19tbS5oCkBAIC0xLDYgKzEsMTAgQEAKICNpZm5kZWYgX0FTTV9NNjhLX1RIUkVBRF9JTkZPX0gKICNkZWZpbmUgX0FTTV9NNjhLX1RIUkVBRF9JTkZPX0gKIAorI2lmbmRlZiBBU01fT0ZGU0VUU19DCisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKQEAgLTMxLDcgKzM1LDEyIEBACiAjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8JKGluaXRfdGFzay50aHJlYWQuaW5mbykKICNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQogCi0jZGVmaW5lIHRhc2tfdGhyZWFkX2luZm8odHNrKQkoJih0c2spLT50aHJlYWQuaW5mbykKKyNpZmRlZiBBU01fT0ZGU0VUU19DCisjZGVmaW5lIHRhc2tfdGhyZWFkX2luZm8odHNrKQkoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSBOVUxMKQorI2Vsc2UKKyNkZWZpbmUgdGFza190aHJlYWRfaW5mbyh0c2spCSgoc3RydWN0IHRocmVhZF9pbmZvICopKChjaGFyICopdHNrK1RBU0tfVElORk8pKQorI2VuZGlmCisKICNkZWZpbmUgdGFza19zdGFja19wYWdlKHRzaykJKCh0c2spLT5zdGFjaykKICNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpCXRhc2tfdGhyZWFkX2luZm8oY3VycmVudCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGIxZjAxMmYuLjczZTVlNTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL202OGsva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTgsNiArOCw4IEBACiAgKiAjZGVmaW5lcyBmcm9tIHRoZSBhc3NlbWJseS1sYW5ndWFnZSBvdXRwdXQuCiAgKi8KIAorI2RlZmluZSBBU01fT0ZGU0VUU19DCisKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CkBAIC0yNyw2ICsyOSw5IEBACiAJREVGSU5FKFRBU0tfSU5GTywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuaW5mbykpOwogCURFRklORShUQVNLX01NLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIG1tKSk7CiAJREVGSU5FKFRBU0tfQUNUSVZFX01NLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGFjdGl2ZV9tbSkpOworI2lmZGVmIENPTkZJR19NTVUKKwlERUZJTkUoVEFTS19USU5GTywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQuaW5mbykpOworI2VuZGlmCiAKIAkvKiBvZmZzZXRzIGludG8gdGhlIHRocmVhZCBzdHJ1Y3QgKi8KIAlERUZJTkUoVEhSRUFEX0tTUCwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIGtzcCkpOwpAQCAtNDQsMjAgKzQ5LDIwIEBACiAJREVGSU5FKFRJTkZPX0ZMQUdTLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGZsYWdzKSk7CiAKIAkvKiBvZmZzZXRzIGludG8gdGhlIHB0X3JlZ3MgKi8KLQlERUZJTkUoUFRfRDAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMCkpOwotCURFRklORShQVF9PUklHX0QwLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgb3JpZ19kMCkpOwotCURFRklORShQVF9EMSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQxKSk7Ci0JREVGSU5FKFBUX0QyLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDIpKTsKLQlERUZJTkUoUFRfRDMsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMykpOwotCURFRklORShQVF9ENCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQ0KSk7Ci0JREVGSU5FKFBUX0Q1LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDUpKTsKLQlERUZJTkUoUFRfQTAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMCkpOwotCURFRklORShQVF9BMSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGExKSk7Ci0JREVGSU5FKFBUX0EyLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYTIpKTsKLQlERUZJTkUoUFRfUEMsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykpOwotCURFRklORShQVF9TUiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNyKSk7CisJREVGSU5FKFBUX09GRl9EMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQwKSk7CisJREVGSU5FKFBUX09GRl9PUklHX0QwLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgb3JpZ19kMCkpOworCURFRklORShQVF9PRkZfRDEsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMSkpOworCURFRklORShQVF9PRkZfRDIsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMikpOworCURFRklORShQVF9PRkZfRDMsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMykpOworCURFRklORShQVF9PRkZfRDQsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkNCkpOworCURFRklORShQVF9PRkZfRDUsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkNSkpOworCURFRklORShQVF9PRkZfQTAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMCkpOworCURFRklORShQVF9PRkZfQTEsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMSkpOworCURFRklORShQVF9PRkZfQTIsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMikpOworCURFRklORShQVF9PRkZfUEMsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykpOworCURFRklORShQVF9PRkZfU1IsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBzcikpOwogCS8qIGJpdGZpZWxkcyBhcmUgYSBiaXQgZGlmZmljdWx0ICovCi0JREVGSU5FKFBUX1ZFQ1RPUiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSArIDQpOworCURFRklORShQVF9PRkZfRk9STUFUVkVDLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpICsgNCk7CiAKIAkvKiBvZmZzZXRzIGludG8gdGhlIGlycV9oYW5kbGVyIHN0cnVjdCAqLwogCURFRklORShJUlFfSEFORExFUiwgb2Zmc2V0b2Yoc3RydWN0IGlycV9ub2RlLCBoYW5kbGVyKSk7CkBAIC04NCwxMCArODksMTAgQEAKIAlERUZJTkUoRk9OVF9ERVNDX1BSRUYsIG9mZnNldG9mKHN0cnVjdCBmb250X2Rlc2MsIHByZWYpKTsKIAogCS8qIHNpZ25hbCBkZWZpbmVzICovCi0JREVGSU5FKFNJR1NFR1YsIFNJR1NFR1YpOwotCURFRklORShTRUdWX01BUEVSUiwgU0VHVl9NQVBFUlIpOwotCURFRklORShTSUdUUkFQLCBTSUdUUkFQKTsKLQlERUZJTkUoVFJBUF9UUkFDRSwgVFJBUF9UUkFDRSk7CisJREVGSU5FKExTSUdTRUdWLCBTSUdTRUdWKTsKKwlERUZJTkUoTFNFR1ZfTUFQRVJSLCBTRUdWX01BUEVSUik7CisJREVGSU5FKExTSUdUUkFQLCBTSUdUUkFQKTsKKwlERUZJTkUoTFRSQVBfVFJBQ0UsIFRSQVBfVFJBQ0UpOwogCiAJLyogb2Zmc2V0cyBpbnRvIHRoZSBjdXN0b20gc3RydWN0ICovCiAJREVGSU5FKENVU1RPTUJBU0UsICZhbWlnYV9jdXN0b20pOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TCmluZGV4IGMzNzM1Y2QuLjkyMmY1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL202OGsva2VybmVsL2VudHJ5LlMKQEAgLTc3LDE3ICs3NywxNyBAQAogCWpyYQkuTHJldF9mcm9tX2V4Y2VwdGlvbgogCiBkb190cmFjZV9lbnRyeToKLQltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX0QwKQl8IG5lZWRlZCBmb3Igc3RyYWNlCisJbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9PRkZfRDApfCBuZWVkZWQgZm9yIHN0cmFjZQogCXN1YnFsCSM0LCVzcAogCVNBVkVfU1dJVENIX1NUQUNLCiAJamJzcglzeXNjYWxsX3RyYWNlCiAJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKIAlhZGRxbAkjNCwlc3AKLQltb3ZlbAklc3BAKFBUX09SSUdfRDApLCVkMAorCW1vdmVsCSVzcEAoUFRfT0ZGX09SSUdfRDApLCVkMAogCWNtcGwJI05SX3N5c2NhbGxzLCVkMAogCWpjcwlzeXNjYWxsCiBiYWRzeXM6Ci0JbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9EMCkKKwltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX09GRl9EMCkKIAlqcmEJcmV0X2Zyb21fc3lzY2FsbAogCiBkb190cmFjZV9leGl0OgpAQCAtMTAzLDcgKzEwMyw3IEBACiAJYWRkcWwJIzQsJXNwCiAvKiBvbiA2ODA0MCBjb21wbGV0ZSBwZW5kaW5nIHdyaXRlYmFja3MgaWYgYW55ICovCiAjaWZkZWYgQ09ORklHX002ODA0MAotCWJmZXh0dQklc3BAKFBUX1ZFQ1RPUil7IzAsIzR9LCVkMAorCWJmZXh0dQklc3BAKFBUX09GRl9GT1JNQVRWRUMpeyMwLCM0fSwlZDAKIAlzdWJxbAkjNywlZDAJCQkJfCBidXMgZXJyb3IgZnJhbWUgPwogCWpibmUJMWYKIAltb3ZlbAklc3AsJXNwQC0KQEAgLTEyNyw3ICsxMjcsNyBAQAogCWpjYwliYWRzeXMKIHN5c2NhbGw6CiAJamJzcglAKHN5c19jYWxsX3RhYmxlLCVkMDpsOjQpQCgwKQotCW1vdmVsCSVkMCwlc3BAKFBUX0QwKQkJfCBzYXZlIHRoZSByZXR1cm4gdmFsdWUKKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfRDApCXwgc2F2ZSB0aGUgcmV0dXJuIHZhbHVlCiByZXRfZnJvbV9zeXNjYWxsOgogCXxvcml3CSMweDA3MDAsJXNyCiAJbW92ZXcJJWN1cnB0ckAoVEFTS19JTkZPK1RJTkZPX0ZMQUdTKzIpLCVkMApAQCAtMTM1LDcgKzEzNSw3IEBACiAxOglSRVNUT1JFX0FMTAogCiBzeXNjYWxsX2V4aXRfd29yazoKLQlidHN0CSM1LCVzcEAoUFRfU1IpCQl8IGNoZWNrIGlmIHJldHVybmluZyB0byBrZXJuZWwKKwlidHN0CSM1LCVzcEAoUFRfT0ZGX1NSKQl8IGNoZWNrIGlmIHJldHVybmluZyB0byBrZXJuZWwKIAlibmVzCTFiCQkJfCBpZiBzbywgc2tpcCByZXNjaGVkLCBzaWduYWxzCiAJbHNsdwkjMSwlZDAKIAlqY3MJZG9fdHJhY2VfZXhpdApAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIEVOVFJZKHJldF9mcm9tX2V4Y2VwdGlvbikKIC5McmV0X2Zyb21fZXhjZXB0aW9uOgotCWJ0c3QJIzUsJXNwQChQVF9TUikJCXwgY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbAorCWJ0c3QJIzUsJXNwQChQVF9PRkZfU1IpCXwgY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbAogCWJuZXMJMWYJCQl8IGlmIHNvLCBza2lwIHJlc2NoZWQsIHNpZ25hbHMKIAl8IG9ubHkgYWxsb3cgaW50ZXJydXB0cyB3aGVuIHdlIGFyZSByZWFsbHkgdGhlIGxhc3Qgb25lIG9uIHRoZQogCXwga2VybmVsIHN0YWNrLCBvdGhlcndpc2Ugc3RhY2sgb3ZlcmZsb3cgY2FuIG9jY3VyIGR1cmluZwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJamJyYQlyZXN1bWVfdXNlcnNwYWNlCiAKIGRvX2RlbGF5ZWRfdHJhY2U6Ci0JYmNscgkjNywlc3BAKFBUX1NSKQkJfCBjbGVhciB0cmFjZSBiaXQgaW4gU1IKKwliY2xyCSM3LCVzcEAoUFRfT0ZGX1NSKQl8IGNsZWFyIHRyYWNlIGJpdCBpbiBTUgogCXBlYQkxCQkJfCBzZW5kIFNJR1RSQVAKIAltb3ZlbAklY3VycHRyLCVzcEAtCiAJcGVhCUxTSUdUUkFQCkBAIC0xOTksNyArMTk5LDcgQEAKIAlHRVRfQ1VSUkVOVCglZDApCiAJYWRkcWIJIzEsJWN1cnB0ckAoVEFTS19JTkZPK1RJTkZPX1BSRUVNUFQrMSkKIAkJCQkJfCAgcHV0IGV4Y2VwdGlvbiAjIGluIGQwCi0JYmZleHR1CSVzcEAoUFRfVkVDVE9SKXsjNCwjMTB9LCVkMAorCWJmZXh0dQklc3BAKFBUX09GRl9GT1JNQVRWRUMpeyM0LCMxMH0sJWQwCiAJc3VidwkjVkVDX1NQVVIsJWQwCiAKIAltb3ZlbAklc3AsJXNwQC0KQEAgLTIxNiw3ICsyMTYsNyBAQAogCUFMSUdOCiByZXRfZnJvbV9sYXN0X2ludGVycnVwdDoKIAltb3ZlcQkjKH5BTExPV0lOVD4+OCkmMHhmZiwlZDAKLQlhbmRiCSVzcEAoUFRfU1IpLCVkMAorCWFuZGIJJXNwQChQVF9PRkZfU1IpLCVkMAogCWpuZQkyYgogCiAJLyogY2hlY2sgaWYgd2UgbmVlZCB0byBkbyBzb2Z0d2FyZSBpbnRlcnJ1cHRzICovCkBAIC0yMzIsNyArMjMyLDcgQEAKIAlHRVRfQ1VSUkVOVCglZDApCiAJYWRkcWIJIzEsJWN1cnB0ckAoVEFTS19JTkZPK1RJTkZPX1BSRUVNUFQrMSkKIAkJCQkJfCAgcHV0IGV4Y2VwdGlvbiAjIGluIGQwCi0JYmZleHR1CSVzcEAoUFRfVkVDVE9SKXsjNCwjMTB9LCVkMAorCWJmZXh0dQklc3BAKFBUX09GRl9GT1JNQVRWRUMpeyM0LCMxMH0sJWQwCiB1c2VyX2lycXZlY19maXh1cCA9IC4gKyAyCiAJc3VidwkjVkVDX1VTRVIsJWQwCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdGQubGRzIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN0ZC5sZHMKaW5kZXggMDFkMjEyYi4uNDdlYWMxOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN0ZC5sZHMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN0ZC5sZHMKQEAgLTgyLDEzICs4Miw2IEBACiAKICAgX2VuZCA9IC4gOwogCi0gIC8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLwotICAvRElTQ0FSRC8gOiB7Ci0JRVhJVF9URVhUCi0JRVhJVF9EQVRBCi0JKiguZXhpdGNhbGwuZXhpdCkKLQl9Ci0KICAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KICAgLnN0YWIgMCA6IHsgKiguc3RhYikgfQogICAuc3RhYnN0ciAwIDogeyAqKC5zdGFic3RyKSB9CkBAIC05Nyw0ICs5MCw3IEBACiAgIC5zdGFiLmluZGV4IDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KICAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQogICAuY29tbWVudCAwIDogeyAqKC5jb21tZW50KSB9CisKKyAgLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCisgIERJU0NBUkRTCiB9CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3VuMy5sZHMgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3VuMy5sZHMKaW5kZXggYzE5MmY3Ny4uMDNlZmFmMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN1bjMubGRzCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdW4zLmxkcwpAQCAtNzcsMTMgKzc3LDYgQEAKIAogICBfZW5kID0gLiA7CiAKLSAgLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCi0gIC9ESVNDQVJELyA6IHsKLQlFWElUX1RFWFQKLQlFWElUX0RBVEEKLQkqKC5leGl0Y2FsbC5leGl0KQotCX0KLQogICAuY3JhcCA6IHsKIAkvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLwogCSooLnN0YWIpCkBAIC05Niw0ICs4OSw2IEBACiAJKigubm90ZSkKICAgfQogCisgIC8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLworICBESVNDQVJEUwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2VudHJ5LlMgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfZW50cnkuUwppbmRleCA5NTRiNGYzLi5hM2ZlMWYzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWF0aC1lbXUvZnBfZW50cnkuUworKysgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfZW50cnkuUwpAQCAtODUsOCArODUsOCBAQAogZnBfZXJyX3VhMToKIAlhZGRxLmwJIzQsJXNwCiAJbW92ZS5sCSVhMCwtKCVzcCkKLQlwZWEJU0VHVl9NQVBFUlIKLQlwZWEJU0lHU0VHVgorCXBlYQlMU0VHVl9NQVBFUlIKKwlwZWEJTFNJR1NFR1YKIAlqc3IJZnBlbXVfc2lnbmFsCiAJYWRkLncJIzEyLCVzcAogCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KQEAgLTk2LDggKzk2LDggQEAKIAl8IGl0IGRvZXMgbm90IHJlYWxseSBiZWxvbmcgaGVyZSwgYnV0Li4uCiBmcF9zZW5kdHJhY2UwNjA6CiAJbW92ZS5sCShGUFNfUEMsJXNwKSwtKCVzcCkKLQlwZWEJVFJBUF9UUkFDRQotCXBlYQlTSUdUUkFQCisJcGVhCUxUUkFQX1RSQUNFCisJcGVhCUxTSUdUUkFQCiAJanNyCWZwZW11X3NpZ25hbAogCWFkZC53CSMxMiwlc3AKIAlqcmEJcmV0X2Zyb21fZXhjZXB0aW9uCkBAIC0xMjIsMTcgKzEyMiwxNyBAQAogCS5sb25nCWZwX2dldF9kNiwgZnBfZ2V0X2Q3CiAKIGZwX2dldF9kMDoKLQltb3ZlLmwJKFBUX0QwKzgsJXNwKSwlZDAKKwltb3ZlLmwJKFBUX09GRl9EMCs4LCVzcCksJWQwCiAJcHJpbnRmCVBSRUdJU1RFUiwie2QwLT4lMDh4fSIsMSwlZDAKIAlydHMKIAogZnBfZ2V0X2QxOgotCW1vdmUubAkoUFRfRDErOCwlc3ApLCVkMAorCW1vdmUubAkoUFRfT0ZGX0QxKzgsJXNwKSwlZDAKIAlwcmludGYJUFJFR0lTVEVSLCJ7ZDEtPiUwOHh9IiwxLCVkMAogCXJ0cwogCiBmcF9nZXRfZDI6Ci0JbW92ZS5sCShQVF9EMis4LCVzcCksJWQwCisJbW92ZS5sCShQVF9PRkZfRDIrOCwlc3ApLCVkMAogCXByaW50ZglQUkVHSVNURVIsIntkMi0+JTA4eH0iLDEsJWQwCiAJcnRzCiAKQEAgLTE3MywzNSArMTczLDM1IEBACiAKIGZwX3B1dF9kMDoKIAlwcmludGYJUFJFR0lTVEVSLCJ7ZDA8LSUwOHh9IiwxLCVkMAotCW1vdmUubAklZDAsKFBUX0QwKzgsJXNwKQorCW1vdmUubAklZDAsKFBUX09GRl9EMCs4LCVzcCkKIAlydHMKIAogZnBfcHV0X2QxOgogCXByaW50ZglQUkVHSVNURVIsIntkMTwtJTA4eH0iLDEsJWQwCi0JbW92ZS5sCSVkMCwoUFRfRDErOCwlc3ApCisJbW92ZS5sCSVkMCwoUFRfT0ZGX0QxKzgsJXNwKQogCXJ0cwogCiBmcF9wdXRfZDI6CiAJcHJpbnRmCVBSRUdJU1RFUiwie2QyPC0lMDh4fSIsMSwlZDAKLQltb3ZlLmwJJWQwLChQVF9EMis4LCVzcCkKKwltb3ZlLmwJJWQwLChQVF9PRkZfRDIrOCwlc3ApCiAJcnRzCiAKIGZwX3B1dF9kMzoKIAlwcmludGYJUFJFR0lTVEVSLCJ7ZDM8LSUwOHh9IiwxLCVkMAogfAltb3ZlLmwJJWQwLCVkMwotCW1vdmUubAklZDAsKFBUX0QzKzgsJXNwKQorCW1vdmUubAklZDAsKFBUX09GRl9EMys4LCVzcCkKIAlydHMKIAogZnBfcHV0X2Q0OgogCXByaW50ZglQUkVHSVNURVIsIntkNDwtJTA4eH0iLDEsJWQwCiB8CW1vdmUubAklZDAsJWQ0Ci0JbW92ZS5sCSVkMCwoUFRfRDQrOCwlc3ApCisJbW92ZS5sCSVkMCwoUFRfT0ZGX0Q0KzgsJXNwKQogCXJ0cwogCiBmcF9wdXRfZDU6CiAJcHJpbnRmCVBSRUdJU1RFUiwie2Q1PC0lMDh4fSIsMSwlZDAKIHwJbW92ZS5sCSVkMCwlZDUKLQltb3ZlLmwJJWQwLChQVF9ENSs4LCVzcCkKKwltb3ZlLmwJJWQwLChQVF9PRkZfRDUrOCwlc3ApCiAJcnRzCiAKIGZwX3B1dF9kNjoKQEAgLTIyNSwxNyArMjI1LDE3IEBACiAJLmxvbmcJZnBfZ2V0X2E2LCBmcF9nZXRfYTcKIAogZnBfZ2V0X2EwOgotCW1vdmUubAkoUFRfQTArOCwlc3ApLCVhMAorCW1vdmUubAkoUFRfT0ZGX0EwKzgsJXNwKSwlYTAKIAlwcmludGYJUFJFR0lTVEVSLCJ7YTAtPiUwOHh9IiwxLCVhMAogCXJ0cwogCiBmcF9nZXRfYTE6Ci0JbW92ZS5sCShQVF9BMSs4LCVzcCksJWEwCisJbW92ZS5sCShQVF9PRkZfQTErOCwlc3ApLCVhMAogCXByaW50ZglQUkVHSVNURVIsInthMS0+JTA4eH0iLDEsJWEwCiAJcnRzCiAKIGZwX2dldF9hMjoKLQltb3ZlLmwJKFBUX0EyKzgsJXNwKSwlYTAKKwltb3ZlLmwJKFBUX09GRl9BMis4LCVzcCksJWEwCiAJcHJpbnRmCVBSRUdJU1RFUiwie2EyLT4lMDh4fSIsMSwlYTAKIAlydHMKIApAQCAtMjc2LDE3ICsyNzYsMTcgQEAKIAogZnBfcHV0X2EwOgogCXByaW50ZglQUkVHSVNURVIsInthMDwtJTA4eH0iLDEsJWEwCi0JbW92ZS5sCSVhMCwoUFRfQTArOCwlc3ApCisJbW92ZS5sCSVhMCwoUFRfT0ZGX0EwKzgsJXNwKQogCXJ0cwogCiBmcF9wdXRfYTE6CiAJcHJpbnRmCVBSRUdJU1RFUiwie2ExPC0lMDh4fSIsMSwlYTAKLQltb3ZlLmwJJWEwLChQVF9BMSs4LCVzcCkKKwltb3ZlLmwJJWEwLChQVF9PRkZfQTErOCwlc3ApCiAJcnRzCiAKIGZwX3B1dF9hMjoKIAlwcmludGYJUFJFR0lTVEVSLCJ7YTI8LSUwOHh9IiwxLCVhMAotCW1vdmUubAklYTAsKFBUX0EyKzgsJXNwKQorCW1vdmUubAklYTAsKFBUX09GRl9BMis4LCVzcCkKIAlydHMKIAogZnBfcHV0X2EzOgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBiN2ZlNTA1Li4yNzM2YTVlIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTg0LDEyICsxODQsNiBAQAogCQlfX2luaXRfZW5kID0gLjsKIAl9ID4gSU5JVAogCi0JL0RJU0NBUkQvIDogewotCQlFWElUX1RFWFQKLQkJRVhJVF9EQVRBCi0JCSooLmV4aXRjYWxsLmV4aXQpCi0JfQotCiAJLmJzcyA6IHsKIAkJLiA9IEFMSUdOKDQpOwogCQlfc2JzcyA9IC4gOwpAQCAtMjAwLDUgKzE5NCw2IEBACiAJIAlfZW5kID0gLiA7CiAJfSA+IEJTUwogCisJRElTQ0FSRFMKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2RldmljZS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2RldmljZS5oCmluZGV4IGMwNDI4MzAuLjMwMjg2ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9kZXZpY2UuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vZGV2aWNlLmgKQEAgLTE2LDYgKzE2LDkgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUJKm9mX25vZGU7CiB9OwogCitzdHJ1Y3QgcGRldl9hcmNoZGF0YSB7Cit9OworCiAjZW5kaWYgLyogX0FTTV9NSUNST0JMQVpFX0RFVklDRV9IICovCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGQzNGQzOGQuLmVjNWZhOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTIzLDggKzIzLDggQEAKIAkJX3N0ZXh0ID0gLiA7CiAJCSooLnRleHQgLnRleHQuKikKIAkJKiguZml4dXApCi0KLQkJKiguZXhpdGNhbGwuZXhpdCkKKyAgICAgICAgICAgICAgIEVYSVRfVEVYVAorICAgICAgICAgICAgICAgRVhJVF9DQUxMCiAJCVNDSEVEX1RFWFQKIAkJTE9DS19URVhUCiAJCUtQUk9CRVNfVEVYVApAQCAtMTYyLDQgKzE2Miw2IEBACiAJfQogCS4gPSBBTElHTig0MDk2KTsKIAlfZW5kID0gLjsKKworCURJU0NBUkRTCiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKaW5kZXggMmVjYWI2MS4uY2Y1MGZhMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYwpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeV9maXhlZC5oPgogCiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWFyNy9hcjcuaD4KQEAgLTIwOCw2ICsyMTAsMTIgQEAKIAkud2lkdGggPSAyLAogfTsKIAorc3RhdGljIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGZpeGVkX3BoeV9zdGF0dXMgX19pbml0ZGF0YSA9IHsKKwkubGluayA9IDEsCisJLnNwZWVkID0gMTAwLAorCS5kdXBsZXggPSAxLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0X2NwbWFjX2RhdGEgY3BtYWNfbG93X2RhdGEgPSB7CiAJLnJlc2V0X2JpdCA9IDE3LAogCS5wb3dlcl9iaXQgPSAyMCwKQEAgLTUzMCw2ICs1MzgsOSBAQAogCX0KIAogCWlmIChhcjdfaGFzX2hpZ2hfY3BtYWMoKSkgeworCQlyZXMgPSBmaXhlZF9waHlfYWRkKFBIWV9QT0xMLCBjcG1hY19oaWdoLmlkLCAmZml4ZWRfcGh5X3N0YXR1cyk7CisJCWlmIChyZXMgJiYgcmVzICE9IC1FTk9ERVYpCisJCQlyZXR1cm4gcmVzOwogCQljcG1hY19nZXRfbWFjKDEsIGNwbWFjX2hpZ2hfZGF0YS5kZXZfYWRkcik7CiAJCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3BtYWNfaGlnaCk7CiAJCWlmIChyZXMpCkBAIC01MzgsNiArNTQ5LDEwIEBACiAJCWNwbWFjX2xvd19kYXRhLnBoeV9tYXNrID0gMHhmZmZmZmZmZjsKIAl9CiAKKwlyZXMgPSBmaXhlZF9waHlfYWRkKFBIWV9QT0xMLCBjcG1hY19sb3cuaWQsICZmaXhlZF9waHlfc3RhdHVzKTsKKwlpZiAocmVzICYmIHJlcyAhPSAtRU5PREVWKQorCQlyZXR1cm4gcmVzOworCiAJY3BtYWNfZ2V0X21hYygwLCBjcG1hY19sb3dfZGF0YS5kZXZfYWRkcik7CiAJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjcG1hY19sb3cpOwogCWlmIChyZXMpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggMmFiY2ExNy4uYWUwNWFjYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNDIsNiArNDIsOCBAQAogI2RlZmluZSBTT19TTkRUSU1FTwkweDEwMDUJLyogc2VuZCB0aW1lb3V0ICovCiAjZGVmaW5lIFNPX1JDVlRJTUVPIAkweDEwMDYJLyogcmVjZWl2ZSB0aW1lb3V0ICovCiAjZGVmaW5lIFNPX0FDQ0VQVENPTk4JMHgxMDA5CisjZGVmaW5lIFNPX1BST1RPQ09MCTB4MTAyOAkvKiBwcm90b2NvbCB0eXBlICovCisjZGVmaW5lIFNPX0RPTUFJTgkweDEwMjkJLyogZG9tYWluL3NvY2tldCBmYW1pbHkgKi8KIAogLyogbGludXgtc3BlY2lmaWMsIG1pZ2h0IGFzIHdlbGwgYmUgdGhlIHNhbWUgYXMgb24gaTM4NiAqLwogI2RlZmluZSBTT19OT19DSEVDSwkxMQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBmOWRmNzIwLi4wMWNjMTYzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMTE1LDYgKzExNSw3IEBACiAjZGVmaW5lIFRJRl9ORUVEX1JFU0NIRUQJMgkvKiByZXNjaGVkdWxpbmcgbmVjZXNzYXJ5ICovCiAjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTMJLyogc3lzY2FsbCBhdWRpdGluZyBhY3RpdmUgKi8KICNkZWZpbmUgVElGX1NFQ0NPTVAJCTQJLyogc2VjdXJlIGNvbXB1dGluZyAqLworI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQk1CS8qIGNhbGxiYWNrIGJlZm9yZSByZXR1cm5pbmcgdG8gdXNlciAqLwogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTkJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwoKSAqLwogI2RlZmluZSBUSUZfVVNFREZQVQkJMTYJLyogRlBVIHdhcyB1c2VkIGJ5IHRoaXMgdGFzayB0aGlzIHF1YW50dW0gKFNNUCkgKi8KICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE3CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCkBAIC0xMzksNiArMTQwLDcgQEAKICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMTw8VElGX1NZU0NBTExfQVVESVQpCiAjZGVmaW5lIF9USUZfU0VDQ09NUAkJKDE8PFRJRl9TRUNDT01QKQorI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMTw8VElGX1JFU1RPUkVfU0lHTUFTSykKICNkZWZpbmUgX1RJRl9VU0VERlBVCQkoMTw8VElGX1VTRURGUFUpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwppbmRleCBlODU1YjExLi4xYTZhZTEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCkBAIC0xNjQsNyArMTY0LDcgQEAKIAlQVFIJc3lzX2Nvbm5lY3QKIAlQVFIJc3lzX2FjY2VwdAogCVBUUglzeXNfc2VuZHRvCi0JUFRSCXN5c19yZWN2ZnJvbQorCVBUUgljb21wYXRfc3lzX3JlY3Zmcm9tCiAJUFRSCWNvbXBhdF9zeXNfc2VuZG1zZwkJLyogNjA0NSAqLwogCVBUUgljb21wYXRfc3lzX3JlY3Ztc2cKIAlQVFIJc3lzX3NodXRkb3duCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggMGM0OWYxYS4uY2QzMTA4NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMzc4LDggKzM3OCw4IEBACiAJUFRSCXN5c19nZXRzb2NrbmFtZQogCVBUUglzeXNfZ2V0c29ja29wdAogCVBUUglzeXNfbGlzdGVuCi0JUFRSCXN5c19yZWN2CQkJLyogNDE3NSAqLwotCVBUUglzeXNfcmVjdmZyb20KKwlQVFIJY29tcGF0X3N5c19yZWN2CQkJLyogNDE3NSAqLworCVBUUgljb21wYXRfc3lzX3JlY3Zmcm9tCiAJUFRSCWNvbXBhdF9zeXNfcmVjdm1zZwogCVBUUglzeXNfc2VuZAogCVBUUgljb21wYXRfc3lzX3NlbmRtc2cKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jCmluZGV4IDgzMGM1ZWYuLjYyNTQwNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CiAKICNpbmNsdWRlIDxhc20vYWJpLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS5oPgpAQCAtNzAwLDQgKzcwMSwxMSBAQAogCS8qIGRlYWwgd2l0aCBwZW5kaW5nIHNpZ25hbCBkZWxpdmVyeSAqLwogCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIChfVElGX1NJR1BFTkRJTkcgfCBfVElGX1JFU1RPUkVfU0lHTUFTSykpCiAJCWRvX3NpZ25hbChyZWdzKTsKKworCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIF9USUZfTk9USUZZX1JFU1VNRSkgeworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfTk9USUZZX1JFU1VNRSk7CisJCXRyYWNlaG9va19ub3RpZnlfcmVzdW1lKHJlZ3MpOworCQlpZiAoY3VycmVudC0+cmVwbGFjZW1lbnRfc2Vzc2lvbl9rZXlyaW5nKQorCQkJa2V5X3JlcGxhY2Vfc2Vzc2lvbl9rZXlyaW5nKCk7CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDU4NzM4YzguLjE0NzRjMTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE3NiwxNyArMTc2LDYgQEAKIAogCV9lbmQgPSAuIDsKIAotCS8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLwotCS9ESVNDQVJELyA6IHsKLQkJKiguZXhpdGNhbGwuZXhpdCkKLQotCQkvKiBBQkkgY3JhcCBzdGFydHMgaGVyZSAqLwotCQkqKC5NSVBTLm9wdGlvbnMpCi0JCSooLm9wdGlvbnMpCi0JCSooLnBkcikKLQkJKigucmVnaW5mbykKLQl9Ci0KIAkvKiBUaGVzZSBtYXJrIHRoZSBBQkkgb2YgdGhlIGtlcm5lbCBmb3IgZGVidWdnZXJzLiAgKi8KIAkubWRlYnVnLmFiaTMyIDogewogCQlLRUVQKCooLm1kZWJ1Zy5hYmkzMikpCkBAIC0yMTIsNCArMjAxLDE0IEBACiAJCSooLmdwdGFiLmJzcykKIAkJKiguZ3B0YWIuc2JzcykKIAl9CisKKwkvKiBTZWN0aW9ucyB0byBiZSBkaXNjYXJkZWQgKi8KKwlESVNDQVJEUworCS9ESVNDQVJELyA6IHsKKwkJLyogQUJJIGNyYXAgc3RhcnRzIGhlcmUgKi8KKwkJKiguTUlQUy5vcHRpb25zKQorCQkqKC5vcHRpb25zKQorCQkqKC5wZHIpCisJCSooLnJlZ2luZm8pCisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGZiNWRhZjQuLjRkZjc1YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU3LDQgKzU3LDcgQEAKICNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNwogI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORwogCisjZGVmaW5lIFNPX1BST1RPQ09MCQkzOAorI2RlZmluZSBTT19ET01BSU4JCTM5CisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9zaWduYWwuYwppbmRleCBmZWIyZjJlLi5hMjFmNDNiIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvc2lnbmFsLmMKQEAgLTU2OCw1ICs1NjgsNyBAQAogCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIF9USUZfTk9USUZZX1JFU1VNRSkgewogCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfTk9USUZZX1JFU1VNRSk7CiAJCXRyYWNlaG9va19ub3RpZnlfcmVzdW1lKF9fZnJhbWUpOworCQlpZiAoY3VycmVudC0+cmVwbGFjZW1lbnRfc2Vzc2lvbl9rZXlyaW5nKQorCQkJa2V5X3JlcGxhY2Vfc2Vzc2lvbl9rZXlyaW5nKCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGY0YWEwNzkuLjc2ZjQxYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTExNSwxMiArMTE1LDEwIEBACiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICBwZzAgPSAuOwogCi0gIC8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLwotICAvRElTQ0FSRC8gOiB7Ci0JRVhJVF9DQUxMCi0JfQotCiAgIFNUQUJTX0RFQlVHCiAKICAgRFdBUkZfREVCVUcKKworICAvKiBTZWN0aW9ucyB0byBiZSBkaXNjYXJkZWQgKi8KKyAgRElTQ0FSRFMKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2FncC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYWdwLmgKaW5kZXggOTY1MTY2MC4uZDIyNmZmYSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYWdwLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYWdwLmgKQEAgLTExLDEwICsxMSw2IEBACiAjZGVmaW5lIHVubWFwX3BhZ2VfZnJvbV9hZ3AocGFnZSkJLyogbm90aGluZyAqLwogI2RlZmluZSBmbHVzaF9hZ3BfY2FjaGUoKQkJbWIoKQogCi0vKiBDb252ZXJ0IGEgcGh5c2ljYWwgYWRkcmVzcyB0byBhbiBhZGRyZXNzIHN1aXRhYmxlIGZvciB0aGUgR0FSVC4gKi8KLSNkZWZpbmUgcGh5c190b19nYXJ0KHgpICh4KQotI2RlZmluZSBnYXJ0X3RvX3BoeXMoeCkgKHgpCi0KIC8qIEdBVFQgYWxsb2NhdGlvbi4gUmV0dXJucy9hY2NlcHRzIEdBVFQga2VybmVsIHZpcnR1YWwgYWRkcmVzcy4gKi8KICNkZWZpbmUgYWxsb2NfZ2F0dF9wYWdlcyhvcmRlcikJCVwKIAkoKGNoYXIgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIChvcmRlcikpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA4ODU0NzJiLi45NjBiMWU1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtMjQsNiArMjQsOCBAQAogI2RlZmluZSBTT19SQ1ZUSU1FTwkweDEwMDYKICNkZWZpbmUgU09fRVJST1IJMHgxMDA3CiAjZGVmaW5lIFNPX1RZUEUJCTB4MTAwOAorI2RlZmluZSBTT19QUk9UT0NPTAkweDEwMjgKKyNkZWZpbmUgU09fRE9NQUlOCTB4MTAyOQogI2RlZmluZSBTT19QRUVSTkFNRQkweDIwMDAKIAogI2RlZmluZSBTT19OT19DSEVDSwkweDQwMGIKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDRjZTBlZGYuLmFjNzc1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtNTksNiArNTksNyBAQAogI2RlZmluZSBUSUZfTUVNRElFCQk1CiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJNgkvKiByZXN0b3JlIHNhdmVkIHNpZ25hbCBtYXNrICovCiAjZGVmaW5lIFRJRl9GUkVFWkUJCTcJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KKyNkZWZpbmUgVElGX05PVElGWV9SRVNVTUUJOAkvKiBjYWxsYmFjayBiZWZvcmUgcmV0dXJuaW5nIHRvIHVzZXIgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCkBAIC02Nyw4ICs2OCw5IEBACiAjZGVmaW5lIF9USUZfMzJCSVQJCSgxIDw8IFRJRl8zMkJJVCkKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykKICNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCisjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMSA8PCBUSUZfTk9USUZZX1JFU1VNRSkKIAotI2RlZmluZSBfVElGX1VTRVJfV09SS19NQVNLICAgICAoX1RJRl9TSUdQRU5ESU5HIHwgXAorI2RlZmluZSBfVElGX1VTRVJfV09SS19NQVNLICAgICAoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9OT1RJRllfUkVTVU1FIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RJRl9ORUVEX1JFU0NIRUQgfCBfVElGX1JFU1RPUkVfU0lHTUFTSykKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKaW5kZXggZTU1MmU1NC4uOGM0NzEyYiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKQEAgLTk0OCw3ICs5NDgsNyBAQAogCS8qIEFzIGFib3ZlICovCiAJbWZjdGwgICAlY3IzMCwlcjEKIAlMRFJFRwlUSV9GTEFHUyglcjEpLCVyMTkKLQlsZGkJKF9USUZfU0lHUEVORElOR3xfVElGX1JFU1RPUkVfU0lHTUFTSyksICVyMjAKKwlsZGkJKF9USUZfU0lHUEVORElOR3xfVElGX1JFU1RPUkVfU0lHTUFTS3xfVElGX05PVElGWV9SRVNVTUUpLCAlcjIwCiAJYW5kLENPTkQoPD4pCSVyMTksICVyMjAsICVyMAogCWIsbglpbnRyX3Jlc3RvcmUJLyogc2tpcCBwYXN0IGlmIHdlJ3ZlIG5vdGhpbmcgdG8gZG8gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCmluZGV4IGY4MjU0NDIuLjhlYjNjNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KICNpbmNsdWRlIDxhc20vdWNvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vcnRfc2lnZnJhbWUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNjQ1LDQgKzY0NiwxMSBAQAogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSUdQRU5ESU5HKSB8fAogCSAgICB0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQogCQlkb19zaWduYWwocmVncywgaW5fc3lzY2FsbCk7CisKKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTk9USUZZX1JFU1VNRSkpIHsKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05PVElGWV9SRVNVTUUpOworCQl0cmFjZWhvb2tfbm90aWZ5X3Jlc3VtZShyZWdzKTsKKwkJaWYgKGN1cnJlbnQtPnJlcGxhY2VtZW50X3Nlc3Npb25fa2V5cmluZykKKwkJCWtleV9yZXBsYWNlX3Nlc3Npb25fa2V5cmluZygpOworCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggZmQyY2M0Zi4uYWVhMTc4NCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTIzNyw5ICsyMzcsMTIgQEAKIAkvKiBmcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCV9lbmQgPSAuIDsKIAorCVNUQUJTX0RFQlVHCisJLm5vdGUgMCA6IHsgKigubm90ZSkgfQorCiAJLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCisJRElTQ0FSRFMKIAkvRElTQ0FSRC8gOiB7Ci0JCSooLmV4aXRjYWxsLmV4aXQpCiAjaWZkZWYgQ09ORklHXzY0QklUCiAJCS8qIHRlbXBvcmFyeSBoYWNrIHVudGlsIGJpbnV0aWxzIGlzIGZpeGVkIHRvIG5vdCBlbWl0IHRoZXNlCiAJIAkgKiBmb3Igc3RhdGljIGJpbmFyaWVzCkBAIC0yNTIsNyArMjU1LDQgQEAKIAkJKiguZ251Lmhhc2gpCiAjZW5kaWYKIAl9Ci0KLQlTVEFCU19ERUJVRwotCS5ub3RlIDAgOiB7ICooLm5vdGUpIH0JCiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IGQwMDEzMWMuLjgyNTA5MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC00OSw2ICs0OSw5IEBACiBjb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKIAlkZWZfYm9vbCBQUEM2NAogCitjb25maWcgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LCisJZGVmX2Jvb2wgUFBDNjQKKwogY29uZmlnIElSUV9QRVJfQ1BVCiAJYm9vbAogCWRlZmF1bHQgeQpAQCAtMTIwLDcgKzEyMyw4IEBACiAJc2VsZWN0IEhBVkVfS1JFVFBST0JFUwogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJc2VsZWN0IEhBVkVfTE1CCi0Jc2VsZWN0IEhBVkVfRE1BX0FUVFJTIGlmIFBQQzY0CisJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCisJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCXNlbGVjdCBVU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpZiBTTVAKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX1NZU0NBTExfV1JBUFBFUlMgaWYgUFBDNjQKQEAgLTMwNywxMCArMzExLDYgQEAKIAkgIHBsYXRmb3JtcyB3aGVyZSB0aGUgc2l6ZSBvZiBhIHBoeXNpY2FsIGFkZHJlc3MgaXMgbGFyZ2VyCiAJICB0aGFuIHRoZSBidXMgYWRkcmVzcy4gIE5vdCBhbGwgcGxhdGZvcm1zIHN1cHBvcnQgdGhpcy4KIAotY29uZmlnIFBQQ19ORUVEX0RNQV9TWU5DX09QUwotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIChOT1RfQ09IRVJFTlRfQ0FDSEUgfHwgU1dJT1RMQikKLQogY29uZmlnIEhPVFBMVUdfQ1BVCiAJYm9vbCAiU3VwcG9ydCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIENQVXMiCiAJZGVwZW5kcyBvbiBTTVAgJiYgSE9UUExVRyAmJiBFWFBFUklNRU5UQUwgJiYgKFBQQ19QU0VSSUVTIHx8IFBQQ19QTUFDKQpAQCAtNDcyLDcgKzQ3Miw3IEBACiAJYm9vbCAiMTZrIHBhZ2Ugc2l6ZSIgaWYgNDR4CiAKIGNvbmZpZyBQUENfNjRLX1BBR0VTCi0JYm9vbCAiNjRrIHBhZ2Ugc2l6ZSIgaWYgNDR4IHx8IFBQQ19TVERfTU1VXzY0CisJYm9vbCAiNjRrIHBhZ2Ugc2l6ZSIgaWYgNDR4IHx8IFBQQ19TVERfTU1VXzY0IHx8IFBQQ19CT09LM0VfNjQKIAlzZWxlY3QgUFBDX0hBU19IQVNIXzY0SyBpZiBQUENfU1REX01NVV82NAogCiBjb25maWcgUFBDXzI1NktfUEFHRVMKQEAgLTQ5MiwxNiArNDkyLDE2IEBACiAKIGNvbmZpZyBGT1JDRV9NQVhfWk9ORU9SREVSCiAJaW50ICJNYXhpbXVtIHpvbmUgb3JkZXIiCi0JcmFuZ2UgOSA2NCBpZiBQUENfU1REX01NVV82NCAmJiBQUENfNjRLX1BBR0VTCi0JZGVmYXVsdCAiOSIgaWYgUFBDX1NURF9NTVVfNjQgJiYgUFBDXzY0S19QQUdFUwotCXJhbmdlIDEzIDY0IGlmIFBQQ19TVERfTU1VXzY0ICYmICFQUENfNjRLX1BBR0VTCi0JZGVmYXVsdCAiMTMiIGlmIFBQQ19TVERfTU1VXzY0ICYmICFQUENfNjRLX1BBR0VTCi0JcmFuZ2UgOSA2NCBpZiBQUENfU1REX01NVV8zMiAmJiBQUENfMTZLX1BBR0VTCi0JZGVmYXVsdCAiOSIgaWYgUFBDX1NURF9NTVVfMzIgJiYgUFBDXzE2S19QQUdFUwotCXJhbmdlIDcgNjQgaWYgUFBDX1NURF9NTVVfMzIgJiYgUFBDXzY0S19QQUdFUwotCWRlZmF1bHQgIjciIGlmIFBQQ19TVERfTU1VXzMyICYmIFBQQ182NEtfUEFHRVMKLQlyYW5nZSA1IDY0IGlmIFBQQ19TVERfTU1VXzMyICYmIFBQQ18yNTZLX1BBR0VTCi0JZGVmYXVsdCAiNSIgaWYgUFBDX1NURF9NTVVfMzIgJiYgUFBDXzI1NktfUEFHRVMKKwlyYW5nZSA5IDY0IGlmIFBQQzY0ICYmIFBQQ182NEtfUEFHRVMKKwlkZWZhdWx0ICI5IiBpZiBQUEM2NCAmJiBQUENfNjRLX1BBR0VTCisJcmFuZ2UgMTMgNjQgaWYgUFBDNjQgJiYgIVBQQ182NEtfUEFHRVMKKwlkZWZhdWx0ICIxMyIgaWYgUFBDNjQgJiYgIVBQQ182NEtfUEFHRVMKKwlyYW5nZSA5IDY0IGlmIFBQQzMyICYmIFBQQ18xNktfUEFHRVMKKwlkZWZhdWx0ICI5IiBpZiBQUEMzMiAmJiBQUENfMTZLX1BBR0VTCisJcmFuZ2UgNyA2NCBpZiBQUEMzMiAmJiBQUENfNjRLX1BBR0VTCisJZGVmYXVsdCAiNyIgaWYgUFBDMzIgJiYgUFBDXzY0S19QQUdFUworCXJhbmdlIDUgNjQgaWYgUFBDMzIgJiYgUFBDXzI1NktfUEFHRVMKKwlkZWZhdWx0ICI1IiBpZiBQUEMzMiAmJiBQUENfMjU2S19QQUdFUwogCXJhbmdlIDExIDY0CiAJZGVmYXVsdCAiMTEiCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL01ha2VmaWxlCmluZGV4IGJjMzVmNGUuLjk1MmEzOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKQEAgLTc3LDcgKzc3LDcgQEAKIENIRUNLRkxBR1MJKz0gLW0kKENPTkZJR19XT1JEX1NJWkUpIC1EX19wb3dlcnBjX18gLURfX3Bvd2VycGMkKENPTkZJR19XT1JEX1NJWkUpX18KIAogaWZlcSAoJChDT05GSUdfUFBDNjQpLHkpCi1HQ0NfQlJPS0VOX1ZFQwk6PSAkKHNoZWxsIGlmIFsgJChjYWxsIGNjLXZlcnNpb24pIC1sdCAwNDAwIF0gOyB0aGVuIGVjaG8gInkiOyBmaSkKK0dDQ19CUk9LRU5fVkVDCTo9ICQoY2FsbCBjYy1pZnZlcnNpb24sIC1sdCwgMDQwMCwgeSkKIAogaWZlcSAoJChDT05GSUdfUE9XRVI0X09OTFkpLHkpCiBpZmVxICgkKENPTkZJR19BTFRJVkVDKSx5KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvNHh4LmMgYi9hcmNoL3Bvd2VycGMvYm9vdC80eHguYwppbmRleCAzMjViMzEwLi4yN2RiODkzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC80eHguYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC80eHguYwpAQCAtOCw2ICs4LDEwIEBACiAgKiAgIEV1Z2VuZSBTdXJvdmVnaW4gPGV1Z2VuZS5zdXJvdmVnaW5AenVsdHlzLmNvbT4gb3IgPGVic0BlYnNob21lLm5ldD4KICAqICAgQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IFp1bHR5cyBUZWNobm9sb2dpZXMKICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKiAgIFVwZGF0ZWQgZm9yIHN1cHBvcnRpbmcgUFBDNDA1RVggb24gS2lsYXVlYS4KKyAqICAgVGllanVuIENoZW4gPHRpZWp1bi5jaGVuQHdpbmRyaXZlci5jb20+CisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgpAQCAtNjU5LDMgKzY2MywxNDEgQEAKIAlkdF9maXh1cF9jbG9jaygiL3BsYi9vcGIvc2VyaWFsQGVmNjAwMzAwIiwgdWFydDApOwogCWR0X2ZpeHVwX2Nsb2NrKCIvcGxiL29wYi9zZXJpYWxAZWY2MDA0MDAiLCB1YXJ0MSk7CiB9CisKK3N0YXRpYyB1OCBpYm00MDVleF9md2R2X211bHRpX2JpdHNbXSA9IHsKKwkvKiB2YWx1ZXMgZm9yOiAgMSAtIDE2ICovCisJMHgwMSwgMHgwMiwgMHgwZSwgMHgwOSwgMHgwNCwgMHgwYiwgMHgxMCwgMHgwZCwgMHgwYywgMHgwNSwKKwkweDA2LCAweDBmLCAweDBhLCAweDA3LCAweDA4LCAweDAzCit9OworCit1MzIgaWJtNDA1ZXhfZ2V0X2Z3ZHZhKHVuc2lnbmVkIGxvbmcgY3ByX2Z3ZHYpCit7CisJdTMyIGluZGV4OworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQVJSQVlfU0laRShpYm00MDVleF9md2R2X211bHRpX2JpdHMpOyBpbmRleCsrKQorCQlpZiAoY3ByX2Z3ZHYgPT0gKHUzMilpYm00MDVleF9md2R2X211bHRpX2JpdHNbaW5kZXhdKQorCQkJcmV0dXJuIGluZGV4ICsgMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTggaWJtNDA1ZXhfZmJkdl9tdWx0aV9iaXRzW10gPSB7CisJLyogdmFsdWVzIGZvcjogIDEgLSAxMDAgKi8KKwkweDAwLCAweGZmLCAweDdlLCAweGZkLCAweDdhLCAweGY1LCAweDZhLCAweGQ1LCAweDJhLCAweGQ0LAorCTB4MjksIDB4ZDMsIDB4MjYsIDB4Y2MsIDB4MTksIDB4YjMsIDB4NjcsIDB4Y2UsIDB4MWQsIDB4YmIsCisJMHg3NywgMHhlZSwgMHg1ZCwgMHhiYSwgMHg3NCwgMHhlOSwgMHg1MiwgMHhhNSwgMHg0YiwgMHg5NiwKKwkweDJjLCAweGQ4LCAweDMxLCAweGUzLCAweDQ2LCAweDhkLCAweDFiLCAweGI3LCAweDZmLCAweGRlLAorCTB4M2QsIDB4ZmIsIDB4NzYsIDB4ZWQsIDB4NWEsIDB4YjUsIDB4NmIsIDB4ZDYsIDB4MmQsIDB4ZGIsCisJMHgzNiwgMHhlYywgMHg1OSwgMHhiMiwgMHg2NCwgMHhjOSwgMHgxMiwgMHhhNCwgMHg0OCwgMHg5MSwKKwkweDIzLCAweGM3LCAweDBlLCAweDljLCAweDM4LCAweGYwLCAweDYxLCAweGMyLCAweDA1LCAweDhiLAorCTB4MTcsIDB4YWYsIDB4NWYsIDB4YmUsIDB4N2MsIDB4ZjksIDB4NzIsIDB4ZTUsIDB4NGEsIDB4OTUsCisJMHgyYiwgMHhkNywgMHgyZSwgMHhkYywgMHgzOSwgMHhmMywgMHg2NiwgMHhjZCwgMHgxYSwgMHhiNCwKKwkweDY4LCAweGQxLCAweDIyLCAweGM0LCAweDA5LCAweDkzLCAweDI3LCAweGNmLCAweDFlLCAweGJjLAorCS8qIHZhbHVlcyBmb3I6ICAxMDEgLSAyMDAgKi8KKwkweDc4LCAweGYxLCAweDYyLCAweGM1LCAweDBhLCAweDk0LCAweDI4LCAweGQwLCAweDIxLCAweGMzLAorCTB4MDYsIDB4OGMsIDB4MTgsIDB4YjAsIDB4NjAsIDB4YzEsIDB4MDIsIDB4ODQsIDB4MDgsIDB4OTAsCisJMHgyMCwgMHhjMCwgMHgwMSwgMHg4MywgMHgwNywgMHg4ZiwgMHgxZiwgMHhiZiwgMHg3ZiwgMHhmZSwKKwkweDdkLCAweGZhLCAweDc1LCAweGVhLCAweDU1LCAweGFhLCAweDU0LCAweGE5LCAweDUzLCAweGE2LAorCTB4NGMsIDB4OTksIDB4MzMsIDB4ZTcsIDB4NGUsIDB4OWQsIDB4M2IsIDB4ZjcsIDB4NmUsIDB4ZGQsCisJMHgzYSwgMHhmNCwgMHg2OSwgMHhkMiwgMHgyNSwgMHhjYiwgMHgxNiwgMHhhYywgMHg1OCwgMHhiMSwKKwkweDYzLCAweGM2LCAweDBkLCAweDliLCAweDM3LCAweGVmLCAweDVlLCAweGJkLCAweDdiLCAweGY2LAorCTB4NmQsIDB4ZGEsIDB4MzUsIDB4ZWIsIDB4NTYsIDB4YWQsIDB4NWIsIDB4YjYsIDB4NmMsIDB4ZDksCisJMHgzMiwgMHhlNCwgMHg0OSwgMHg5MiwgMHgyNCwgMHhjOCwgMHgxMSwgMHhhMywgMHg0NywgMHg4ZSwKKwkweDFjLCAweGI4LCAweDcwLCAweGUxLCAweDQyLCAweDg1LCAweDBiLCAweDk3LCAweDJmLCAweGRmLAorCS8qIHZhbHVlcyBmb3I6ICAyMDEgLSAyNTUgKi8KKwkweDNlLCAweGZjLCAweDc5LCAweGYyLCAweDY1LCAweGNhLCAweDE1LCAweGFiLCAweDU3LCAweGFlLAorCTB4NWMsIDB4YjksIDB4NzMsIDB4ZTYsIDB4NGQsIDB4OWEsIDB4MzQsIDB4ZTgsIDB4NTEsIDB4YTIsCisJMHg0NCwgMHg4OSwgMHgxMywgMHhhNywgMHg0ZiwgMHg5ZSwgMHgzYywgMHhmOCwgMHg3MSwgMHhlMiwKKwkweDQ1LCAweDhhLCAweDE0LCAweGE4LCAweDUwLCAweGExLCAweDQzLCAweDg2LCAweDBjLCAweDk4LAorCTB4MzAsIDB4ZTAsIDB4NDEsIDB4ODIsIDB4MDQsIDB4ODgsIDB4MTAsIDB4YTAsIDB4NDAsIDB4ODEsCisJMHgwMywgMHg4NywgMHgwZiwgMHg5ZiwgMHgzZiAgLyogRU5EICovCit9OworCit1MzIgaWJtNDA1ZXhfZ2V0X2ZiZHYodW5zaWduZWQgbG9uZyBjcHJfZmJkdikKK3sKKwl1MzIgaW5kZXg7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBBUlJBWV9TSVpFKGlibTQwNWV4X2ZiZHZfbXVsdGlfYml0cyk7IGluZGV4KyspCisJCWlmIChjcHJfZmJkdiA9PSAodTMyKWlibTQwNWV4X2ZiZHZfbXVsdGlfYml0c1tpbmRleF0pCisJCQlyZXR1cm4gaW5kZXggKyAxOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaWJtNDA1ZXhfZml4dXBfY2xvY2tzKHVuc2lnbmVkIGludCBzeXNfY2xrLCB1bnNpZ25lZCBpbnQgdWFydF9jbGspCit7CisJLyogUExMIGNvbmZpZyAqLworCXUzMiBwbGxjICA9IENQUjBfUkVBRChEQ1JOX0NQUjBfUExMQyk7CisJdTMyIHBsbGQgID0gQ1BSMF9SRUFEKERDUk5fQ1BSMF9QTExEKTsKKwl1MzIgY3B1ZCAgPSBDUFIwX1JFQUQoRENSTl9DUFIwX1BSSU1BRCk7CisJdTMyIHBsYmQgID0gQ1BSMF9SRUFEKERDUk5fQ1BSMF9QUklNQkQpOworCXUzMiBvcGJkICA9IENQUjBfUkVBRChEQ1JOX0NQUjBfT1BCRCk7CisJdTMyIHBlcmQgID0gQ1BSMF9SRUFEKERDUk5fQ1BSMF9QRVJEKTsKKworCS8qIERpdmlkZXJzICovCisJdTMyIGZiZHYgICA9IGlibTQwNWV4X2dldF9mYmR2KF9fZml4X3plcm8oKHBsbGQgPj4gMjQpICYgMHhmZiwgMSkpOworCisJdTMyIGZ3ZHZhICA9IGlibTQwNWV4X2dldF9md2R2YShfX2ZpeF96ZXJvKChwbGxkID4+IDE2KSAmIDB4MGYsIDEpKTsKKworCXUzMiBjcHVkdjAgPSBfX2ZpeF96ZXJvKChjcHVkID4+IDI0KSAmIDcsIDgpOworCisJLyogUExCRFYwIGlzIGhhcmR3YXJlZCB0byAwMTAuICovCisJdTMyIHBsYmR2MCA9IDI7CisJdTMyIHBsYjJ4ZHYwID0gX19maXhfemVybygocGxiZCA+PiAxNikgJiA3LCA4KTsKKworCXUzMiBvcGJkdjAgPSBfX2ZpeF96ZXJvKChvcGJkID4+IDI0KSAmIDMsIDQpOworCisJdTMyIHBlcmR2MCA9IF9fZml4X3plcm8oKHBlcmQgPj4gMjQpICYgMywgNCk7CisKKwkvKiBSZXN1bHRpbmcgY2xvY2tzICovCisJdTMyIGNwdSwgcGxiLCBvcGIsIGViYywgdmNvLCB0YiwgdWFydDAsIHVhcnQxOworCisJLyogUExMJ3MgVkNPIGlzIHRoZSBzb3VyY2UgZm9yIHByaW1hcnkgZm9yd2FyZCA/ICovCisJaWYgKHBsbGMgJiAweDQwMDAwMDAwKSB7CisJCXUzMiBtOworCisJCS8qIEZlZWRiYWNrIHBhdGggKi8KKwkJc3dpdGNoICgocGxsYyA+PiAyNCkgJiA3KSB7CisJCWNhc2UgMDoKKwkJCS8qIFBMTE9VVHggKi8KKwkJCW0gPSBmYmR2OworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCS8qIENQVSAqLworCQkJbSA9IGZiZHYgKiBmd2R2YSAqIGNwdWR2MDsKKwkJCWJyZWFrOworCQljYXNlIDU6CisJCQkvKiBQRVJDbGsgKi8KKwkJCW0gPSBmYmR2ICogZndkdmEgKiBwbGIyeGR2MCAqIHBsYmR2MCAqIG9wYmR2MCAqIHBlcmR2MDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRmKCJXQVJOSU5HICEgSW52YWxpZCBQTEwgZmVlZGJhY2sgc291cmNlICFcbiIpOworCQkJZ290byBieXBhc3M7CisJCX0KKworCQl2Y28gPSAodW5zaWduZWQgaW50KShzeXNfY2xrICogbSk7CisJfSBlbHNlIHsKK2J5cGFzczoKKwkJLyogQnlwYXNzIHN5c3RlbSBQTEwgKi8KKwkJdmNvID0gMDsKKwl9CisKKwkvKiBDUFUgPSBWQ08gLyAoIEZXRFZBIHggQ1BVRFYwKSAqLworCWNwdSA9IHZjbyAvIChmd2R2YSAqIGNwdWR2MCk7CisJLyogUExCID0gVkNPIC8gKCBGV0RWQSB4IFBMQjJYRFYwIHggUExCRFYwKSAqLworCXBsYiA9IHZjbyAvIChmd2R2YSAqIHBsYjJ4ZHYwICogcGxiZHYwKTsKKwkvKiBPUEIgPSBQTEIgLyBPUEJEVjAgKi8KKwlvcGIgPSBwbGIgLyBvcGJkdjA7CisJLyogRUJDID0gT1BCIC8gUEVSRFYwICovCisJZWJjID0gb3BiIC8gcGVyZHYwOworCisJdGIgPSBjcHU7CisJdWFydDAgPSB1YXJ0MSA9IHVhcnRfY2xrOworCisJZHRfZml4dXBfY3B1X2Nsb2NrcyhjcHUsIHRiLCAwKTsKKwlkdF9maXh1cF9jbG9jaygiL3BsYiIsIHBsYik7CisJZHRfZml4dXBfY2xvY2soIi9wbGIvb3BiIiwgb3BiKTsKKwlkdF9maXh1cF9jbG9jaygiL3BsYi9vcGIvZWJjIiwgZWJjKTsKKwlkdF9maXh1cF9jbG9jaygiL3BsYi9vcGIvc2VyaWFsQGVmNjAwMjAwIiwgdWFydDApOworCWR0X2ZpeHVwX2Nsb2NrKCIvcGxiL29wYi9zZXJpYWxAZWY2MDAzMDAiLCB1YXJ0MSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC80eHguaCBiL2FyY2gvcG93ZXJwYy9ib290LzR4eC5oCmluZGV4IDI2MDZlNjQuLjdkYzVkNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290LzR4eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9ib290LzR4eC5oCkBAIC0yMSw2ICsyMSw3IEBACiAKIHZvaWQgaWJtNDA1Z3BfZml4dXBfY2xvY2tzKHVuc2lnbmVkIGludCBzeXNfY2xrLCB1bnNpZ25lZCBpbnQgc2VyX2Nsayk7CiB2b2lkIGlibTQwNWVwX2ZpeHVwX2Nsb2Nrcyh1bnNpZ25lZCBpbnQgc3lzX2Nsayk7Cit2b2lkIGlibTQwNWV4X2ZpeHVwX2Nsb2Nrcyh1bnNpZ25lZCBpbnQgc3lzX2NsaywgdW5zaWduZWQgaW50IHVhcnRfY2xrKTsKIHZvaWQgaWJtNDQwZ3BfZml4dXBfY2xvY2tzKHVuc2lnbmVkIGludCBzeXNfY2xrLCB1bnNpZ25lZCBpbnQgc2VyX2Nsayk7CiB2b2lkIGlibTQ0MGVwX2ZpeHVwX2Nsb2Nrcyh1bnNpZ25lZCBpbnQgc3lzX2NsaywgdW5zaWduZWQgaW50IHNlcl9jbGssCiAJCQkgICB1bnNpZ25lZCBpbnQgdG1yX2Nsayk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlCmluZGV4IDlhZTdiN2UuLjdiZmM4YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlCkBAIC0zOSw2ICszOSw3IEBACiAKICQob2JqKS80eHgubzogQk9PVENGTEFHUyArPSAtbWNwdT00MDUKICQob2JqKS9lYm9ueS5vOiBCT09UQ0ZMQUdTICs9IC1tY3B1PTQwNQorJChvYmopL2N1Ym9vdC1ob3Rmb290Lm86IEJPT1RDRkxBR1MgKz0gLW1jcHU9NDA1CiAkKG9iaikvY3Vib290LXRhaXNoYW4ubzogQk9PVENGTEFHUyArPSAtbWNwdT00MDUKICQob2JqKS9jdWJvb3Qta2F0bWFpLm86IEJPT1RDRkxBR1MgKz0gLW1jcHU9NDA1CiAkKG9iaikvY3Vib290LWFjYWRpYS5vOiBCT09UQ0ZMQUdTICs9IC1tY3B1PTQwNQpAQCAtNjcsNyArNjgsNyBAQAogCQljcG0tc2VyaWFsLmMgc3RkbGliLmMgbXBjNTJ4eC1wc2MuYyBwbGFuZXRjb3JlLmMgdWFydGxpdGUuYyBcCiAJCWZzbC1zb2MuYyBtcGM4eHguYyBwcTIuYwogc3JjLXBsYXQgOj0gb2YuYyBjdWJvb3QtNTJ4eC5jIGN1Ym9vdC04MjR4LmMgY3Vib290LTgzeHguYyBjdWJvb3QtODV4eC5jIGhvbGx5LmMgXAotCQljdWJvb3QtZWJvbnkuYyB0cmVlYm9vdC1lYm9ueS5jIHBycG1jMjgwMC5jIFwKKwkJY3Vib290LWVib255LmMgY3Vib290LWhvdGZvb3QuYyB0cmVlYm9vdC1lYm9ueS5jIHBycG1jMjgwMC5jIFwKIAkJcHMzLWhlYWQuUyBwczMtaHZjYWxsLlMgcHMzLmMgdHJlZWJvb3QtYmFtYm9vLmMgY3Vib290LTh4eC5jIFwKIAkJY3Vib290LXBxMi5jIGN1Ym9vdC1zZXF1b2lhLmMgdHJlZWJvb3Qtd2FsbnV0LmMgXAogCQljdWJvb3QtYmFtYm9vLmMgY3Vib290LW1wYzc0NDhocGMyLmMgY3Vib290LXRhaXNoYW4uYyBcCkBAIC03NSw3ICs3Niw3IEBACiAJCWN1Ym9vdC1rYXRtYWkuYyBjdWJvb3QtcmFpbmllci5jIHJlZGJvb3QtOHh4LmMgZXA4MjQ4ZS5jIFwKIAkJY3Vib290LXdhcnAuYyBjdWJvb3QtODV4eC1jcG0yLmMgY3Vib290LXlvc2VtaXRlLmMgc2ltcGxlYm9vdC5jIFwKIAkJdmlydGV4NDA1LWhlYWQuUyB2aXJ0ZXguYyByZWRib290LTgzeHguYyBjdWJvb3Qtc2FtNDQwZXAuYyBcCi0JCWN1Ym9vdC1hY2FkaWEuYyBjdWJvb3QtYW1pZ2FvbmUuYworCQljdWJvb3QtYWNhZGlhLmMgY3Vib290LWFtaWdhb25lLmMgY3Vib290LWtpbGF1ZWEuYwogc3JjLWJvb3QgOj0gJChzcmMtd2xpYikgJChzcmMtcGxhdCkgZW1wdHkuYwogCiBzcmMtYm9vdCA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCAkKHNyYy1ib290KSkKQEAgLTE5MCw2ICsxOTEsNyBAQAogCiAjIEJvYXJkIHBvcnRzIGluIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybS80MHgvS2NvbmZpZwogaW1hZ2UtJChDT05GSUdfRVA0MDUpCQkJKz0gZHRiSW1hZ2UuZXA0MDUKK2ltYWdlLSQoQ09ORklHX0hPVEZPT1QpCQkJKz0gY3VJbWFnZS5ob3Rmb290CiBpbWFnZS0kKENPTkZJR19XQUxOVVQpCQkJKz0gdHJlZUltYWdlLndhbG51dAogaW1hZ2UtJChDT05GSUdfQUNBRElBKQkJCSs9IGN1SW1hZ2UuYWNhZGlhCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1ob3Rmb290LmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtaG90Zm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNjk3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtaG90Zm9vdC5jCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogT2xkIFUtYm9vdCBjb21wYXRpYmlsaXR5IGZvciBFc3RlZW0gMTk1RSBIb3Rmb290IENQVSBCb2FyZAorICoKKyAqIEF1dGhvcjogU29sb21vbiBQZWFjaHkgPHNvbG9tb25AbGludXgtd2xhbi5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAic3RkaW8uaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkY3IuaCIKKyNpbmNsdWRlICI0eHguaCIKKyNpbmNsdWRlICJjdWJvb3QuaCIKKworI2RlZmluZSBUQVJHRVRfNHh4CisjZGVmaW5lIFRBUkdFVF9IT1RGT09UCisKKyNpbmNsdWRlICJwcGNib290LWhvdGZvb3QuaCIKKworc3RhdGljIGJkX3QgYmQ7CisKKyNkZWZpbmUgTlVNX1JFR1MgMworCitzdGF0aWMgdm9pZCBob3Rmb290X2ZpeHVwcyh2b2lkKQoreworCXUzMiB1YXJ0ID0gbWZkY3IoRENSTl9DUEMwX1VDUikgJiAweDdmOworCisJZHRfZml4dXBfbWVtb3J5KGJkLmJpX21lbXN0YXJ0LCBiZC5iaV9tZW1zaXplKTsgCisKKwlkdF9maXh1cF9jcHVfY2xvY2tzKGJkLmJpX3Byb2NmcmVxLCBiZC5iaV9wcm9jZnJlcSwgMCk7CisJZHRfZml4dXBfY2xvY2soIi9wbGIiLCBiZC5iaV9wbGJfYnVzZnJlcSk7CisJZHRfZml4dXBfY2xvY2soIi9wbGIvb3BiIiwgYmQuYmlfb3BiZnJlcSk7CisJZHRfZml4dXBfY2xvY2soIi9wbGIvZWJjIiwgYmQuYmlfcGNpX2J1c2ZyZXEpOworCWR0X2ZpeHVwX2Nsb2NrKCIvcGxiL29wYi9zZXJpYWxAZWY2MDAzMDAiLCBiZC5iaV9wcm9jZnJlcSAvIHVhcnQpOyAKKwlkdF9maXh1cF9jbG9jaygiL3BsYi9vcGIvc2VyaWFsQGVmNjAwNDAwIiwgYmQuYmlfcHJvY2ZyZXEgLyB1YXJ0KTsgCisJCisJZHRfZml4dXBfbWFjX2FkZHJlc3NfYnlfYWxpYXMoImV0aGVybmV0MCIsIGJkLmJpX2VuZXRhZGRyKTsKKwlkdF9maXh1cF9tYWNfYWRkcmVzc19ieV9hbGlhcygiZXRoZXJuZXQxIiwgYmQuYmlfZW5ldDFhZGRyKTsKKworCS8qIElzIHRoaXMgYSBzaW5nbGUgZXRoL3NlcmlhbCBib2FyZD8gKi8KKwlpZiAoKGJkLmJpX2VuZXQxYWRkclswXSA9PSAwKSAmJiAKKwkgICAgKGJkLmJpX2VuZXQxYWRkclsxXSA9PSAwKSAmJgorCSAgICAoYmQuYmlfZW5ldDFhZGRyWzJdID09IDApICYmCisJICAgIChiZC5iaV9lbmV0MWFkZHJbM10gPT0gMCkgJiYKKwkgICAgKGJkLmJpX2VuZXQxYWRkcls0XSA9PSAwKSAmJgorCSAgICAoYmQuYmlfZW5ldDFhZGRyWzVdID09IDApKSB7CisJCXZvaWQgKmRldnA7CisKKwkJcHJpbnRmKCJUcmltbWluZyBkZXZ0cmVlIGZvciBzaW5nbGUgc2VyaWFsL2V0aCBib2FyZFxuIik7CisKKwkJZGV2cCA9IGZpbmRkZXZpY2UoIi9wbGIvb3BiL3NlcmlhbEBlZjYwMDMwMCIpOworCQlpZiAoIWRldnApCisJCQlmYXRhbCgiQ2FuJ3QgZmluZCBub2RlIGZvciAvcGxiL29wYi9zZXJpYWxAZWY2MDAzMDAiKTsKKwkJZGVsX25vZGUoZGV2cCk7CisKKwkJZGV2cCA9IGZpbmRkZXZpY2UoIi9wbGIvb3BiL2V0aGVybmV0QGVmNjAwOTAwIik7CisJCWlmICghZGV2cCkKKwkJCWZhdGFsKCJDYW4ndCBmaW5kIG5vZGUgZm9yIC9wbGIvb3BiL2V0aGVybmV0QGVmNjAwOTAwIik7CisJCWRlbF9ub2RlKGRldnApOworCX0KKworCWlibTR4eF9xdWllc2NlX2V0aCgodTMyICopMHhlZjYwMDgwMCwgKHUzMiAqKTB4ZWY2MDA5MDApOworCisJLyogRml4IHVwIGZsYXNoIHNpemUgaW4gZmR0IGZvciA0TSBib2FyZHMuICovCisJaWYgKGJkLmJpX2ZsYXNoc2l6ZSA8IDB4ODAwMDAwKSB7CisJCXUzMiByZWdzW05VTV9SRUdTXTsKKwkJdm9pZCAqZGV2cCA9IGZpbmRkZXZpY2UoIi9wbGIvZWJjL25vcl9mbGFzaEAwIik7CisJCWlmICghZGV2cCkKKwkJCWZhdGFsKCJDYW4ndCBmaW5kIEZEVCBub2RlIGZvciBub3JfZmxhc2ghPz8iKTsKKworCQlwcmludGYoIkZpeGluZyBkZXZ0cmVlIGZvciA0TSBGbGFzaFxuIik7CisJCQorCQkvKiBGaXJzdCBmaXggdXAgdGhlIGJhc2UgYWRkcmVzc2UgKi8KKwkJZ2V0cHJvcChkZXZwLCAicmVnIiwgcmVncywgc2l6ZW9mKHJlZ3MpKTsKKwkJcmVnc1swXSA9IDA7CisJCXJlZ3NbMV0gPSAweGZmYzAwMDAwOworCQlyZWdzWzJdID0gMHgwMDQwMDAwMDsKKwkJc2V0cHJvcChkZXZwLCAicmVnIiwgcmVncywgc2l6ZW9mKHJlZ3MpKTsKKwkJCisJCS8qIFRoZW4gdGhlIG9mZnNldHMgKi8KKwkJZGV2cCA9IGZpbmRkZXZpY2UoIi9wbGIvZWJjL25vcl9mbGFzaEAwL3BhcnRpdGlvbkAwIik7CisJCWlmICghZGV2cCkKKwkJCWZhdGFsKCJDYW4ndCBmaW5kIEZEVCBub2RlIGZvciBwYXJ0aXRpb25AMCIpOworCQlnZXRwcm9wKGRldnAsICJyZWciLCByZWdzLCAyKnNpemVvZih1MzIpKTsKKwkJcmVnc1swXSAtPSAweDQwMDAwMDsKKwkJc2V0cHJvcChkZXZwLCAicmVnIiwgcmVncywgIDIqc2l6ZW9mKHUzMikpOworCisJCWRldnAgPSBmaW5kZGV2aWNlKCIvcGxiL2ViYy9ub3JfZmxhc2hAMC9wYXJ0aXRpb25AMSIpOworCQlpZiAoIWRldnApCisJCQlmYXRhbCgiQ2FuJ3QgZmluZCBGRFQgbm9kZSBmb3IgcGFydGl0aW9uQDEiKTsKKwkJZ2V0cHJvcChkZXZwLCAicmVnIiwgcmVncywgMipzaXplb2YodTMyKSk7CisJCXJlZ3NbMF0gLT0gMHg0MDAwMDA7CisJCXNldHByb3AoZGV2cCwgInJlZyIsIHJlZ3MsICAyKnNpemVvZih1MzIpKTsKKworCQlkZXZwID0gZmluZGRldmljZSgiL3BsYi9lYmMvbm9yX2ZsYXNoQDAvcGFydGl0aW9uQDIiKTsKKwkJaWYgKCFkZXZwKQorCQkJZmF0YWwoIkNhbid0IGZpbmQgRkRUIG5vZGUgZm9yIHBhcnRpdGlvbkAyIik7CisJCWdldHByb3AoZGV2cCwgInJlZyIsIHJlZ3MsIDIqc2l6ZW9mKHUzMikpOworCQlyZWdzWzBdIC09IDB4NDAwMDAwOworCQlzZXRwcm9wKGRldnAsICJyZWciLCByZWdzLCAgMipzaXplb2YodTMyKSk7CisKKwkJZGV2cCA9IGZpbmRkZXZpY2UoIi9wbGIvZWJjL25vcl9mbGFzaEAwL3BhcnRpdGlvbkAzIik7CisJCWlmICghZGV2cCkKKwkJCWZhdGFsKCJDYW4ndCBmaW5kIEZEVCBub2RlIGZvciBwYXJ0aXRpb25AMyIpOworCQlnZXRwcm9wKGRldnAsICJyZWciLCByZWdzLCAyKnNpemVvZih1MzIpKTsKKwkJcmVnc1swXSAtPSAweDQwMDAwMDsKKwkJc2V0cHJvcChkZXZwLCAicmVnIiwgcmVncywgIDIqc2l6ZW9mKHUzMikpOworCisJCWRldnAgPSBmaW5kZGV2aWNlKCIvcGxiL2ViYy9ub3JfZmxhc2hAMC9wYXJ0aXRpb25ANCIpOworCQlpZiAoIWRldnApCisJCQlmYXRhbCgiQ2FuJ3QgZmluZCBGRFQgbm9kZSBmb3IgcGFydGl0aW9uQDQiKTsKKwkJZ2V0cHJvcChkZXZwLCAicmVnIiwgcmVncywgMipzaXplb2YodTMyKSk7CisJCXJlZ3NbMF0gLT0gMHg0MDAwMDA7CisJCXNldHByb3AoZGV2cCwgInJlZyIsIHJlZ3MsICAyKnNpemVvZih1MzIpKTsKKworCQlkZXZwID0gZmluZGRldmljZSgiL3BsYi9lYmMvbm9yX2ZsYXNoQDAvcGFydGl0aW9uQDYiKTsKKwkJaWYgKCFkZXZwKQorCQkJZmF0YWwoIkNhbid0IGZpbmQgRkRUIG5vZGUgZm9yIHBhcnRpdGlvbkA2Iik7CisJCWdldHByb3AoZGV2cCwgInJlZyIsIHJlZ3MsIDIqc2l6ZW9mKHUzMikpOworCQlyZWdzWzBdIC09IDB4NDAwMDAwOworCQlzZXRwcm9wKGRldnAsICJyZWciLCByZWdzLCAgMipzaXplb2YodTMyKSk7CisKKwkJLyogRGVsZXRlIHRoZSBGZWF0RlMgbm9kZSAqLworCQlkZXZwID0gZmluZGRldmljZSgiL3BsYi9lYmMvbm9yX2ZsYXNoQDAvcGFydGl0aW9uQDUiKTsKKwkJaWYgKCFkZXZwKQorCQkJZmF0YWwoIkNhbid0IGZpbmQgRkRUIG5vZGUgZm9yIHBhcnRpdGlvbkA1Iik7CisJCWRlbF9ub2RlKGRldnApOworCX0KK30KKwordm9pZCBwbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCSAgIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpCit7CisJQ1VCT09UX0lOSVQoKTsKKwlwbGF0Zm9ybV9vcHMuZml4dXBzID0gaG90Zm9vdF9maXh1cHM7CisgICAgICAgIHBsYXRmb3JtX29wcy5leGl0ID0gaWJtNDB4X2RiY3JfcmVzZXQ7CisJZmR0X2luaXQoX2R0Yl9zdGFydCk7CisJc2VyaWFsX2NvbnNvbGVfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LWtpbGF1ZWEuYyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1raWxhdWVhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjZGFkNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1raWxhdWVhLmMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIE9sZCBVLWJvb3QgY29tcGF0aWJpbGl0eSBmb3IgUFBDNDA1RVguIFRoaXMgaW1hZ2UgaXMgYWxyZWFkeSBpbmNsdWRlZAorICogYSBkdGIuCisgKgorICogQXV0aG9yOiBUaWVqdW4gQ2hlbiA8dGllanVuLmNoZW5Ad2luZHJpdmVyLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAiaW8uaCIKKyNpbmNsdWRlICJkY3IuaCIKKyNpbmNsdWRlICJzdGRpby5oIgorI2luY2x1ZGUgIjR4eC5oIgorI2luY2x1ZGUgIjQ0eC5oIgorI2luY2x1ZGUgImN1Ym9vdC5oIgorCisjZGVmaW5lIFRBUkdFVF80eHgKKyNkZWZpbmUgVEFSR0VUXzQ0eAorI2luY2x1ZGUgInBwY2Jvb3QuaCIKKworI2RlZmluZSBLSUxBVUVBX1NZU19FWFRfU0VSSUFMX0NMT0NLICAgICAxMTA1OTIwMCAgICAgICAgLyogZXh0LiAxMS4wNTlNSHogY2xrICovCisKK3N0YXRpYyBiZF90IGJkOworCitzdGF0aWMgdm9pZCBraWxhdWVhX2ZpeHVwcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3lzY2xrID0gMzMzMzMzMzM7CisKKwlpYm00MDVleF9maXh1cF9jbG9ja3Moc3lzY2xrLCBLSUxBVUVBX1NZU19FWFRfU0VSSUFMX0NMT0NLKTsKKwlkdF9maXh1cF9tZW1vcnkoYmQuYmlfbWVtc3RhcnQsIGJkLmJpX21lbXNpemUpOworCWlibTR4eF9maXh1cF9lYmNfcmFuZ2VzKCIvcGxiL29wYi9lYmMiKTsKKwlkdF9maXh1cF9tYWNfYWRkcmVzc19ieV9hbGlhcygiZXRoZXJuZXQwIiwgYmQuYmlfZW5ldGFkZHIpOworCWR0X2ZpeHVwX21hY19hZGRyZXNzX2J5X2FsaWFzKCJldGhlcm5ldDEiLCBiZC5iaV9lbmV0MWFkZHIpOworfQorCit2b2lkIHBsYXRmb3JtX2luaXQodW5zaWduZWQgbG9uZyByMywgdW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNykKK3sKKwlDVUJPT1RfSU5JVCgpOworCXBsYXRmb3JtX29wcy5maXh1cHMgPSBraWxhdWVhX2ZpeHVwczsKKwlwbGF0Zm9ybV9vcHMuZXhpdCA9IGlibTQweF9kYmNyX3Jlc2V0OworCWZkdF9pbml0KF9kdGJfc3RhcnQpOworCXNlcmlhbF9jb25zb2xlX2luaXQoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2Rjci5oIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZGNyLmgKaW5kZXggOTViOWY1My4uNjQ1YTdjOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZGNyLmgKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZGNyLmgKQEAgLTE1Myw5ICsxNTMsNyBAQAogI2RlZmluZSBEQ1JOX0NQQzBfUExMTVIxICAweGY0CiAjZGVmaW5lIERDUk5fQ1BDMF9VQ1IgICAgIDB4ZjUKIAotLyogNDQwR1ggQ2xvY2sgY29udHJvbCBldGMgKi8KLQotCisvKiA0NDBHWC80MDVFWCBDbG9jayBDb250cm9sIHJlZyAqLwogI2RlZmluZSBEQ1JOX0NQUjBfQ0xLVVBECQkJCTB4MDIwCiAjZGVmaW5lIERDUk5fQ1BSMF9QTExDCQkJCQkweDA0MAogI2RlZmluZSBEQ1JOX0NQUjBfUExMRAkJCQkJMHgwNjAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hcmNoZXMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FyY2hlcy5kdHMKaW5kZXggZDkxMTNiMS4uNDE0ZWY4YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FyY2hlcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FyY2hlcy5kdHMKQEAgLTEyNCw2ICsxMjQsMTYgQEAKIAkJZGNyLXJlZyA9IDwweDAwYyAweDAwMj47CiAJfTsKIAorCUwyQzA6IGwyYyB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGwyLWNhY2hlLTQ2MGd0IiwgImlibSxsMi1jYWNoZSI7CisJCWRjci1yZWcgPSA8MHgwMjAgMHgwMDgJCS8qIEludGVybmFsIFNSQU0gRENSJ3MgKi8KKwkJCSAgIDB4MDMwIDB4MDA4PjsJLyogTDIgY2FjaGUgRENSJ3MgKi8KKwkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJCS8qIDMyIGJ5dGVzICovCisJCWNhY2hlLXNpemUgPSA8MjYyMTQ0PjsJCS8qIEwyLCAyNTZLICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQlpbnRlcnJ1cHRzID0gPDExIDE+OworCX07CisKIAlwbGIgewogCQljb21wYXRpYmxlID0gImlibSxwbGItNDYwZ3QiLCAiaWJtLHBsYjQiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKQEAgLTE2OCw2ICsxNzgsMzggQEAKIAkJCQkvKiByYW5nZXMgcHJvcGVydHkgaXMgc3VwcGxpZWQgYnkgVS1Cb290ICovCiAJCQkJaW50ZXJydXB0cyA9IDwweDYgMHg0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKworCQkJCW5vcl9mbGFzaEAwLDAgeworCQkJCQljb21wYXRpYmxlID0gImFtZCxzMjlnbDI1Nm4iLCAiY2ZpLWZsYXNoIjsKKwkJCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAyMDAwMDAwPjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDFlMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAxZTAwMDAgeworCQkJCQkJbGFiZWwgPSAiZHRiIjsKKwkJCQkJCXJlZyA9IDwweDAwMWUwMDAwIDB4MDAwMjAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMjAwMDAwIHsKKwkJCQkJCWxhYmVsID0gInJvb3QiOworCQkJCQkJcmVnID0gPDB4MDAyMDAwMDAgMHgwMDIwMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkA0MDAwMDAgeworCQkJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJCQlyZWcgPSA8MHgwMDQwMDAwMCAweDAxYjYwMDAwPjsKKwkJCQkJfTsKKwkJCQkJcGFydGl0aW9uQDFmNjAwMDAgeworCQkJCQkJbGFiZWwgPSAiZW52IjsKKwkJCQkJCXJlZyA9IDwweDAxZjYwMDAwIDB4MDAwNDAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMWZhMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJCQkJcmVnID0gPDB4MDFmYTAwMDAgMHgwMDA2MDAwMD47CisJCQkJCX07CisJCQkJfTsKIAkJCX07CiAKIAkJCVVBUlQwOiBzZXJpYWxAZWY2MDAzMDAgewpAQCAtMTg2LDYgKzIyOCwxNCBAQAogCQkJCXJlZyA9IDwweGVmNjAwNzAwIDB4MDAwMDAwMTQ+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OwogCQkJCWludGVycnVwdHMgPSA8MHgyIDB4ND47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJc3R0bUA0YSB7CisJCQkJCWNvbXBhdGlibGUgPSAiYWQsYWQ3NDE0IjsKKwkJCQkJcmVnID0gPDB4NGE+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDAgMHg4PjsKKwkJCQl9OwogCQkJfTsKIAogCQkJSUlDMTogaTJjQGVmNjAwODAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCmluZGV4IDVmZDFhZDAuLmM5MjAxNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIEFNQ0MgQ2FueW9ubGFuZHMgKDQ2MEVYKQogICoKLSAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0CkBAIC0xNDksMTkgKzE0OSwxOSBAQAogCQkJCQkvKlJYREUqLyAgMHg1IDB4ND47CiAJCX07CiAKLSAgICAgICAgICAgICAgICBVU0IwOiBlaGNpQGJmZmQwNDAwIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAiaWJtLHVzYi1laGNpLTQ2MGV4IiwgInVzYi1laGNpIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSA8JlVJQzI+OwotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDwweDFkIDQ+OwotICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDQgMHhiZmZkMDQwMCAweDkwIDQgMHhiZmZkMDQ5MCAweDcwPjsKLSAgICAgICAgICAgICAgICB9OworCQlVU0IwOiBlaGNpQGJmZmQwNDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLHVzYi1laGNpLTQ2MGV4IiwgInVzYi1laGNpIjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzI+OworCQkJaW50ZXJydXB0cyA9IDwweDFkIDQ+OworCQkJcmVnID0gPDQgMHhiZmZkMDQwMCAweDkwIDQgMHhiZmZkMDQ5MCAweDcwPjsKKwkJfTsKIAotICAgICAgICAgICAgICAgIFVTQjE6IHVzYkBiZmZkMDAwMCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm9oY2ktbGUiOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDQgMHhiZmZkMDAwMCAweDYwPjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSA8JlVJQzI+OwotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDwweDFlIDQ+OwotICAgICAgICAgICAgICAgIH07CisJCVVTQjE6IHVzYkBiZmZkMDAwMCB7CisJCQljb21wYXRpYmxlID0gIm9oY2ktbGUiOworCQkJcmVnID0gPDQgMHhiZmZkMDAwMCAweDYwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzI+OworCQkJaW50ZXJydXB0cyA9IDwweDFlIDQ+OworCQl9OwogCiAJCVBPQjA6IG9wYiB7CiAJCQljb21wYXRpYmxlID0gImlibSxvcGItNDYwZXgiLCAiaWJtLG9wYiI7CkBAIC0yMTUsNiArMjE1LDI5IEBACiAJCQkJCQlyZWcgPSA8MHgwM2ZhMDAwMCAweDAwMDYwMDAwPjsKIAkJCQkJfTsKIAkJCQl9OworCisJCQkJbmRmY0AzLDAgeworCQkJCQljb21wYXRpYmxlID0gImlibSxuZGZjIjsKKwkJCQkJcmVnID0gPDB4MDAwMDAwMDMgMHgwMDAwMDAwMCAweDAwMDAyMDAwPjsKKwkJCQkJY2NyID0gPDB4MDAwMDEwMDA+OworCQkJCQliYW5rLXNldHRpbmdzID0gPDB4ODAwMDIyMjI+OworCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJCQkJbmFuZCB7CisJCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCQkJbGFiZWwgPSAidS1ib290IjsKKwkJCQkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMTAwMDAwPjsKKwkJCQkJCX07CisJCQkJCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCQkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAzZjAwMDAwPjsKKwkJCQkJCX07CisJCQkJCX07CisJCQkJfTsKIAkJCX07CiAKIAkJCVVBUlQwOiBzZXJpYWxAZWY2MDAzMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2VpZ2VyLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9laWdlci5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhOTM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9laWdlci5kdHMKQEAgLTAsMCArMSw0MjEgQEAKKy8qCisgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIEFNQ0MgKEFwcGxpZWRNaWNybykgRWlnZXIoNDYwU1gpCisgKgorICogQ29weXJpZ2h0IDIwMDkgQU1DQyAoQXBwbGllZE1pY3JvKSA8dHRuZ3V5ZW5AYW1jYy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworL2R0cy12MS87CisKKy8geworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDE+OworCW1vZGVsID0gImFtY2MsZWlnZXIiOworCWNvbXBhdGlibGUgPSAiYW1jYyxlaWdlciI7CisJZGNyLXBhcmVudCA9IDwmey9jcHVzL2NwdUAwfT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJkVNQUMwOworCQlldGhlcm5ldDEgPSAmRU1BQzE7CisJCWV0aGVybmV0MiA9ICZFTUFDMjsKKwkJZXRoZXJuZXQzID0gJkVNQUMzOworCQlzZXJpYWwwID0gJlVBUlQwOworCQlzZXJpYWwxID0gJlVBUlQxOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQltb2RlbCA9ICJQb3dlclBDLDQ2MFNYIjsKKwkJCXJlZyA9IDwweDAwMDAwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OworCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsKKwkJCWRjci1jb250cm9sbGVyOworCQkJZGNyLWFjY2Vzcy1tZXRob2QgPSAibmF0aXZlIjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCX07CisKKwlVSUMwOiBpbnRlcnJ1cHQtY29udHJvbGxlcjAgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDYwc3giLCJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8MD47CisJCWRjci1yZWcgPSA8MHgwYzAgMHgwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCVVJQzE6IGludGVycnVwdC1jb250cm9sbGVyMSB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBzeCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwxPjsKKwkJZGNyLXJlZyA9IDwweDBkMCAweDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0cyA9IDwweDFlIDB4NCAweDFmIDB4ND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCVVJQzI6IGludGVycnVwdC1jb250cm9sbGVyMiB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBzeCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwyPjsKKwkJZGNyLXJlZyA9IDwweDBlMCAweDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0cyA9IDwweGEgMHg0IDB4YiAweDQ+OyAvKiBjYXNjYWRlICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCX07CisKKwlVSUMzOiBpbnRlcnJ1cHQtY29udHJvbGxlcjMgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDYwc3giLCJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8Mz47CisJCWRjci1yZWcgPSA8MHgwZjAgMHgwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8MHgxMCAweDQgMHgxMSAweDQ+OyAvKiBjYXNjYWRlICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCX07CisKKwlTRFIwOiBzZHIgeworCQljb21wYXRpYmxlID0gImlibSxzZHItNDYwc3giOworCQlkY3ItcmVnID0gPDB4MDBlIDB4MDAyPjsKKwl9OworCisJQ1BSMDogY3ByIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sY3ByLTQ2MHN4IjsKKwkJZGNyLXJlZyA9IDwweDAwYyAweDAwMj47CisJfTsKKworCXBsYiB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHBsYi00NjBzeCIsICJpYm0scGxiNCI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKworCQlTRFJBTTA6IHNkcmFtIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLHNkcmFtLTQ2MHN4IiwgImlibSxzZHJhbS00MDVncCI7CisJCQlkY3ItcmVnID0gPDB4MDEwIDB4MDAyPjsKKwkJfTsKKworCQlNQUwwOiBtY21hbCB7CisJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NjBzeCIsICJpYm0sbWNtYWwyIjsKKwkJCWRjci1yZWcgPSA8MHgxODAgMHg2Mj47CisJCQludW0tdHgtY2hhbnMgPSA8ND47CisJCQludW0tcngtY2hhbnMgPSA8MzI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJaW50ZXJydXB0cyA9IDwJLypUWEVPQiovIDB4NiAweDQKKwkJCQkJLypSWEVPQiovIDB4NyAweDQKKwkJCQkJLypTRVJSKi8gIDB4MSAweDQKKwkJCQkJLypUWERFKi8gIDB4MiAweDQKKwkJCQkJLypSWERFKi8gIDB4MyAweDQKKwkJCQkJLypDT0FMIFRYMCovIDB4MTggMHgyCisJCQkJCS8qQ09BTCBUWDEqLyAweDE5IDB4MgorCQkJCQkvKkNPQUwgVFgyKi8gMHgxYSAweDIKKwkJCQkJLypDT0FMIFRYMyovIDB4MWIgMHgyCisJCQkJCS8qQ09BTCBSWDAqLyAweDFjIDB4MgorCQkJCQkvKkNPQUwgUlgxKi8gMHgxZCAweDIKKwkJCQkJLypDT0FMIFJYMiovIDB4MWUgMHgyCisJCQkJCS8qQ09BTCBSWDMqLyAweDFmIDB4Mj47CisJCX07CisKKwkJUE9CMDogb3BiIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLG9wYi00NjBzeCIsICJpYm0sb3BiIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXMgPSA8MHhiMDAwMDAwMCAweDAwMDAwMDA0IDB4YjAwMDAwMDAgMHg1MDAwMDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKworCQkJRUJDMDogZWJjIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxlYmMtNDYwc3giLCAiaWJtLGViYyI7CisJCQkJZGNyLXJlZyA9IDwweDAxMiAweDAwMj47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJLyogcmFuZ2VzIHByb3BlcnR5IGlzIHN1cHBsaWVkIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdHMgPSA8MHg2IDB4ND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisKKwkJCQlub3JfZmxhc2hAMCwwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhbWQsczI5Z2w1MTJuIiwgImNmaS1mbGFzaCI7CisJCQkJCWJhbmstd2lkdGggPSA8Mj47CisJCQkJCS8qIHJlZyBwcm9wZXJ0eSBpcyBzdXBwbGllZCBpbiBieSBVLUJvb3QgKi8KKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDFlMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAxZTAwMDAgeworCQkJCQkJbGFiZWwgPSAiZHRiIjsKKwkJCQkJCXJlZyA9IDwweDAwMWUwMDAwIDB4MDAwMjAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMjAwMDAwIHsKKwkJCQkJCWxhYmVsID0gInJhbWRpc2siOworCQkJCQkJcmVnID0gPDB4MDAyMDAwMDAgMHgwMTQwMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAxNjAwMDAwIHsKKwkJCQkJCWxhYmVsID0gImpmZnMyIjsKKwkJCQkJCXJlZyA9IDwweDAxNjAwMDAwIDB4MDA0MDAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMWEwMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQkJCXJlZyA9IDwweDAxYTAwMDAwIDB4MDI1NjAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AM2Y2MDAwMCB7CisJCQkJCQlsYWJlbCA9ICJlbnYiOworCQkJCQkJcmVnID0gPDB4MDNmNjAwMDAgMHgwMDA0MDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAzZmEwMDAwIHsKKwkJCQkJCWxhYmVsID0gInUtYm9vdCI7CisJCQkJCQlyZWcgPSA8MHgwM2ZhMDAwMCAweDAwMDYwMDAwPjsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJbmRmY0AxLDAgeworCQkJCQljb21wYXRpYmxlID0gImlibSxuZGZjIjsKKwkJCQkJLyogcmVnIHByb3BlcnR5IGlzIHN1cHBsaWVkIGJ5IFUtYm9vdCAqLworCQkJCQljY3IgPSA8MHgwMDAwMzAwMD47CisJCQkJCWJhbmstc2V0dGluZ3MgPSA8MHg4MDAwMjIyMj47CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJCQluYW5kIHsKKwkJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCQkJbGFiZWwgPSAidWJvb3QiOworCQkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAyMDAwMDA+OworCQkJCQkJfTsKKwkJCQkJCXBhcnRpdGlvbkAyMDAwMDAgeworCQkJCQkJCWxhYmVsID0gInVib290LWVudmlyb25tZW50IjsKKwkJCQkJCQlyZWcgPSA8MHgwMDIwMDAwMCAweDAwMTAwMDAwPjsKKwkJCQkJCX07CisJCQkJCQlwYXJ0aXRpb25AMzAwMDAwIHsKKwkJCQkJCQlsYWJlbCA9ICJsaW51eCI7CisJCQkJCQkJcmVnID0gPDB4MDAzMDAwMDAgMHgwMDMwMDAwMD47CisJCQkJCQl9OworCQkJCQkJcGFydGl0aW9uQDYwMDAwMCB7CisJCQkJCQkJbGFiZWwgPSAicm9vdC1maWxlLXN5c3RlbSI7CisJCQkJCQkJcmVnID0gPDB4MDA2MDAwMDAgMHgwMTkwMDAwMD47CisJCQkJCQl9OworCQkJCQkJcGFydGl0aW9uQDFmMDAwMDAgeworCQkJCQkJCWxhYmVsID0gImRldmljZS10cmVlIjsKKwkJCQkJCQlyZWcgPSA8MHgwMWYwMDAwMCAweDAwMDIwMDAwPjsKKwkJCQkJCX07CisJCQkJCQlwYXJ0aXRpb25AMWYyMDAwMCB7CisJCQkJCQkJbGFiZWwgPSAiZGF0YSI7CisJCQkJCQkJcmVnID0gPDB4MDFmMjAwMDAgMHgwNjBFMDAwMD47CisJCQkJCQl9OworCQkJCQl9OworCQkJCX07CisJCQl9OworCisJCQlVQVJUMDogc2VyaWFsQGVmNjAwMjAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQkJcmVnID0gPDB4ZWY2MDAyMDAgMHgwMDAwMDAwOD47CisJCQkJdmlydHVhbC1yZWcgPSA8MHhlZjYwMDIwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MHgwIDB4ND47CisJCQl9OworCisJCQlVQVJUMTogc2VyaWFsQGVmNjAwMzAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQkJcmVnID0gPDB4ZWY2MDAzMDAgMHgwMDAwMDAwOD47CisJCQkJdmlydHVhbC1yZWcgPSA8MHhlZjYwMDMwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MHgxIDB4ND47CisJCQl9OworCisJCQlJSUMwOiBpMmNAZWY2MDA0MDAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NjBzeCIsICJpYm0saWljIjsKKwkJCQlyZWcgPSA8MHhlZjYwMDQwMCAweDAwMDAwMDE0PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MiAweDQ+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWluZGV4ID0gPDA+OworCQkJfTsKKworCQkJSUlDMTogaTJjQGVmNjAwNTAwIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDYwc3giLCAiaWJtLGlpYyI7CisJCQkJcmVnID0gPDB4ZWY2MDA1MDAgMHgwMDAwMDAxND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDwweDMgMHg0PjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlpbmRleCA9IDwxPjsKKwkJCX07CisKKwkJCVJHTUlJMDogZW1hYy1yZ21paUBlZjYwMDkwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0scmdtaWktNDYwc3giLCAiaWJtLHJnbWlpIjsKKwkJCQlyZWcgPSA8MHhlZjYwMDkwMCAweDAwMDAwMDA4PjsKKwkJCQloYXMtbWRpbzsKKwkJCX07CisKKwkJCVJHTUlJMTogZW1hYy1yZ21paUBlZjYwMDkyMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0scmdtaWktNDYwc3giLCAiaWJtLHJnbWlpIjsKKwkJCQlyZWcgPSA8MHhlZjYwMDkyMCAweDAwMDAwMDA4PjsKKwkJCQloYXMtbWRpbzsKKwkJCX07CisKKwkJCVRBSDA6IGVtYWMtdGFoQGVmNjAwZTUwIHsKKwkJCQljb21wYXRpYmxlID0gImlibSx0YWgtNDYwc3giLCAiaWJtLHRhaCI7CisJCQkJcmVnID0gPDB4ZWY2MDBlNTAgMHgwMDAwMDAzMD47CisJCQl9OworCisJCQlUQUgxOiBlbWFjLXRhaEBlZjYwMGY1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sdGFoLTQ2MHN4IiwgImlibSx0YWgiOworCQkJCXJlZyA9IDwweGVmNjAwZjUwIDB4MDAwMDAwMzA+OworCQkJfTsKKworCQkJRU1BQzA6IGV0aGVybmV0QGVmNjAwYTAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MHN4IiwgImlibSxlbWFjNCI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzA+OworCQkJCWludGVycnVwdHMgPSA8MHgwIDB4MT47CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtbWFwID0gPC8qU3RhdHVzKi8gMHgwICZVSUMwIDB4MTMgMHg0CisJCQkJCQkgLypXYWtlKi8gICAweDEgJlVJQzIgMHgxZCAweDQ+OworCQkJCXJlZyA9IDwweGVmNjAwYTAwIDB4MDAwMDAwNzA+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwMDAwMDAwMDAwMF07IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQltYWwtZGV2aWNlID0gPCZNQUwwPjsKKwkJCQltYWwtdHgtY2hhbm5lbCA9IDwwPjsKKwkJCQltYWwtcngtY2hhbm5lbCA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKKwkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcGh5LW1vZGUgPSAicmdtaWkiOworCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CisJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTA+OworCQkJCXJnbWlpLWNoYW5uZWwgPSA8MD47CisJCQkJdGFoLWRldmljZSA9IDwmVEFIMD47CisJCQkJdGFoLWNoYW5uZWwgPSA8MD47CisJCQkJaGFzLWludmVydGVkLXN0YWNyLW9jOworCQkJCWhhcy1uZXctc3RhY3Itc3Rhb3BjOworCQkJfTsKKworCQkJRU1BQzE6IGV0aGVybmV0QGVmNjAwYjAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MHN4IiwgImlibSxlbWFjNCI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzE+OworCQkJCWludGVycnVwdHMgPSA8MHgwIDB4MT47CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtbWFwID0gPC8qU3RhdHVzKi8gMHgwICZVSUMwIDB4MTQgMHg0CisJCQkJCQkgLypXYWtlKi8gICAweDEgJlVJQzIgMHgxZCAweDQ+OworCQkJCXJlZyA9IDwweGVmNjAwYjAwIDB4MDAwMDAwNzA+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwMDAwMDAwMDAwMF07IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQltYWwtZGV2aWNlID0gPCZNQUwwPjsKKwkJCQltYWwtdHgtY2hhbm5lbCA9IDwxPjsKKwkJCQltYWwtcngtY2hhbm5lbCA9IDw4PjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKKwkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcGh5LW1vZGUgPSAicmdtaWkiOworCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CisJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTA+OworCQkJCXJnbWlpLWNoYW5uZWwgPSA8MT47CisJCQkJdGFoLWRldmljZSA9IDwmVEFIMT47CisJCQkJdGFoLWNoYW5uZWwgPSA8MT47CisJCQkJaGFzLWludmVydGVkLXN0YWNyLW9jOworCQkJCWhhcy1uZXctc3RhY3Itc3Rhb3BjOworCQkJCW1kaW8tZGV2aWNlID0gPCZFTUFDMD47CisJCQl9OworCisJCQlFTUFDMjogZXRoZXJuZXRAZWY2MDBjMDAgeworCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDYwc3giLCAiaWJtLGVtYWM0IjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMj47CisJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzAgMHgxNSAweDQKKwkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDFkIDB4ND47CisJCQkJcmVnID0gPDB4ZWY2MDBjMDAgMHgwMDAwMDA3MD47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OworCQkJCW1hbC10eC1jaGFubmVsID0gPDI+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDE2PjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKKwkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcGh5LW1vZGUgPSAicmdtaWkiOworCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CisJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTE+OworCQkJCXJnbWlpLWNoYW5uZWwgPSA8MD47CisJCQkJaGFzLWludmVydGVkLXN0YWNyLW9jOworCQkJCWhhcy1uZXctc3RhY3Itc3Rhb3BjOworCQkJCW1kaW8tZGV2aWNlID0gPCZFTUFDMD47CisJCQl9OworCisJCQlFTUFDMzogZXRoZXJuZXRAZWY2MDBkMDAgeworCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDYwc3giLCAiaWJtLGVtYWM0IjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMz47CisJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzAgMHgxNiAweDQKKwkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDFkIDB4ND47CisJCQkJcmVnID0gPDB4ZWY2MDBkMDAgMHgwMDAwMDA3MD47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OworCQkJCW1hbC10eC1jaGFubmVsID0gPDM+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDI0PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKKwkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcGh5LW1vZGUgPSAicmdtaWkiOworCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CisJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTE+OworCQkJCXJnbWlpLWNoYW5uZWwgPSA8MT47CisJCQkJaGFzLWludmVydGVkLXN0YWNyLW9jOworCQkJCWhhcy1uZXctc3RhY3Itc3Rhb3BjOworCQkJCW1kaW8tZGV2aWNlID0gPCZFTUFDMD47CisJCQl9OworCQl9OworCisJfTsKKwljaG9zZW4geworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICIvcGxiL29wYi9zZXJpYWxAZWY2MDAyMDAiOworCX07CisKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMKaW5kZXggMGY0YzllYy4uMjEwN2QzYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmMzMTAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cwpAQCAtODMsMzQgKzgzLDM0IEBACiAKIAkJLyogZmxhc2hAMCwwIGlzIGEgbWlycm9yIG9mIHBhcnQgb2YgdGhlIG1lbW9yeSBpbiBmbGFzaEAxLDAKIAkJZmxhc2hAMCwwIHsKLQkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKLQkJCXJlZyA9IDwwIDAgMHgwMTAwMDAwMD47CisJCQljb21wYXRpYmxlID0gImdlZixzYmMzMTAtZmlybXdhcmUtbWlycm9yIiwgImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4MCAweDAxMDAwMDAwPjsKIAkJCWJhbmstd2lkdGggPSA8Mj47CiAJCQlkZXZpY2Utd2lkdGggPSA8Mj47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJcGFydGl0aW9uQDAgewogCQkJCWxhYmVsID0gImZpcm13YXJlIjsKLQkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAxMDAwMDAwPjsKKwkJCQlyZWcgPSA8MHgwIDB4MDEwMDAwMDA+OwogCQkJCXJlYWQtb25seTsKIAkJCX07CiAJCX07CiAJCSovCiAKIAkJZmxhc2hAMSwwIHsKLQkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKLQkJCXJlZyA9IDwxIDAgMHg4MDAwMDAwPjsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHNiYzMxMC1wYWdlZC1mbGFzaCIsICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MSAweDAgMHg4MDAwMDAwPjsKIAkJCWJhbmstd2lkdGggPSA8Mj47CiAJCQlkZXZpY2Utd2lkdGggPSA8Mj47CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJcGFydGl0aW9uQDAgewogCQkJCWxhYmVsID0gInVzZXIiOwotCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDc4MDAwMDA+OworCQkJCXJlZyA9IDwweDAgMHg3ODAwMDAwPjsKIAkJCX07CiAJCQlwYXJ0aXRpb25ANzgwMDAwMCB7CiAJCQkJbGFiZWwgPSAiZmlybXdhcmUiOwotCQkJCXJlZyA9IDwweDA3ODAwMDAwIDB4MDA4MDAwMDA+OworCQkJCXJlZyA9IDwweDc4MDAwMDAgMHg4MDAwMDA+OwogCQkJCXJlYWQtb25seTsKIAkJCX07CiAJCX07CkBAIC0xMjEsMTggKzEyMSwxNiBAQAogCQl9OwogCiAJCXdkdEA0LDIwMDAgewotCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCWRldmljZV90eXBlID0gIndhdGNoZG9nIjsKLQkJCWNvbXBhdGlibGUgPSAiZ2VmLGZwZ2Etd2R0IjsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHNiYzMxMC1mcGdhLXdkdCIsICJnZWYsZnBnYS13ZHQtMS4wMCIsCisJCQkJImdlZixmcGdhLXdkdCI7CiAJCQlyZWcgPSA8MHg0IDB4MjAwMCAweDg+OwogCQkJaW50ZXJydXB0cyA9IDwweDFhIDB4ND47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKIAkJfTsKIC8qCiAJCXdkdEA0LDIwMTAgewotCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCWRldmljZV90eXBlID0gIndhdGNoZG9nIjsKLQkJCWNvbXBhdGlibGUgPSAiZ2VmLGZwZ2Etd2R0IjsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHNiYzMxMC1mcGdhLXdkdCIsICJnZWYsZnBnYS13ZHQtMS4wMCIsCisJCQkJImdlZixmcGdhLXdkdCI7CiAJCQlyZWcgPSA8MHg0IDB4MjAxMCAweDg+OwogCQkJaW50ZXJydXB0cyA9IDwweDFiIDB4ND47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKQEAgLTE0MSw3ICsxMzksNyBAQAogCQlnZWZfcGljOiBwaWNANCw0MDAwIHsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJCWNvbXBhdGlibGUgPSAiZ2VmLGZwZ2EtcGljIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHNiYzMxMC1mcGdhLXBpYyIsICJnZWYsZnBnYS1waWMiOwogCQkJcmVnID0gPDB4NCAweDQwMDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDB4OAogCQkJCSAgICAgIDB4OT47CkBAIC0xNjEsNyArMTU5LDcgQEAKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCWRldmljZV90eXBlID0gInNvYyI7Ci0JCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtc29jIiwgInNpbXBsZS1idXMiOwogCQlyYW5nZXMgPSA8MHgwIDB4ZmVmMDAwMDAgMHgwMDEwMDAwMD47CiAJCWJ1cy1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwogCkBAIC0zNzYsNCArMzc0LDQwIEBACiAJCQkJICAweDAgMHgwMDQwMDAwMD47CiAJCX07CiAJfTsKKworCXBjaTE6IHBjaWVAZmVmMDkwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGZlZjA5MDAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwweDAgMHhmZj47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweGMwMDAwMDAwIDB4YzAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGZlNDAwMDAwIDB4MCAweDAwNDAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MHgxOSAweDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCTB4MDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDQgMHgyCisJCQkweDAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHg1IDB4MgorCQkJMHgwMDAwIDB4MCAweDAgMHgzICZtcGljIDB4NiAweDIKKwkJCTB4MDAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDcgMHgyCisJCQk+OworCisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MCAweDAwNDAwMDAwPjsKKwkJfTsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9ob3Rmb290LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9ob3Rmb290LmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWQ5YzM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2hvdGZvb3QuZHRzCkBAIC0wLDAgKzEsMjk0IEBACisvKgorICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBFU1RlZW0gMTk1RSBIb3Rmb290CisgKgorICogQ29weXJpZ2h0IDIwMDkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIDxzb2xvbW9uQGxpbnV4LXdsYW4uY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0CisgKiBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwltb2RlbCA9ICJlc3QsaG90Zm9vdCI7CisJY29tcGF0aWJsZSA9ICJlc3QsaG90Zm9vdCI7CisJZGNyLXBhcmVudCA9IDwmey9jcHVzL2NwdUAwfT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJkVNQUMwOworCQlldGhlcm5ldDEgPSAmRU1BQzE7CisJCXNlcmlhbDAgPSAmVUFSVDA7CisJCXNlcmlhbDEgPSAmVUFSVDE7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCW1vZGVsID0gIlBvd2VyUEMsNDA1RVAiOworCQkJcmVnID0gPDB4MDAwMDAwMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgekltYWdlICovCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSB6SW1hZ2UgKi8KKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDB4MjA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MHgyMD47CisJCQlpLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDQwMDA+OworCQkJZGNyLWNvbnRyb2xsZXI7CisJCQlkY3ItYWNjZXNzLW1ldGhvZCA9ICJuYXRpdmUiOworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMDAwMDAwPjsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLworCX07CisKKwlVSUMwOiBpbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDA+OworCQlkY3ItcmVnID0gPDB4MGMwIDB4MDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlwbGIgeworCQljb21wYXRpYmxlID0gImlibSxwbGIzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLworCisJCVNEUkFNMDogbWVtb3J5LWNvbnRyb2xsZXIgeworCQkJY29tcGF0aWJsZSA9ICJpYm0sc2RyYW0tNDA1ZXAiOworCQkJZGNyLXJlZyA9IDwweDAxMCAweDAwMj47CisJCX07CisKKwkJTUFMOiBtY21hbCB7CisJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00MDVlcCIsICJpYm0sbWNtYWwiOworCQkJZGNyLXJlZyA9IDwweDE4MCAweDA2Mj47CisJCQludW0tdHgtY2hhbnMgPSA8ND47CisJCQludW0tcngtY2hhbnMgPSA8Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCWludGVycnVwdHMgPSA8CisJCQkJMHhiIDB4NCAvKiBUWEVPQiAqLworCQkJCTB4YyAweDQgLyogUlhFT0IgKi8KKwkJCQkweGEgMHg0IC8qIFNFUlIgKi8KKwkJCQkweGQgMHg0IC8qIFRYREUgKi8KKwkJCQkweGUgMHg0IC8qIFJYREUgKi8+OworCQl9OworCisJCVBPQjA6IG9wYiB7CisJCQljb21wYXRpYmxlID0gImlibSxvcGItNDA1ZXAiLCAiaWJtLG9wYiI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzID0gPDB4ZWY2MDAwMDAgMHhlZjYwMDAwMCAweDAwYTAwMDAwPjsKKwkJCWRjci1yZWcgPSA8MHgwYTAgMHgwMDU+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgekltYWdlICovCisKKwkJCS8qIEhvdGZvb3QgaGFzIFVBUlQwL1VBUlQxIHN3YXBwZWQgKi8KKworCQkJVUFSVDA6IHNlcmlhbEBlZjYwMDQwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDwweGVmNjAwNDAwIDB4MDAwMDAwMDg+OworCQkJCXZpcnR1YWwtcmVnID0gPDB4ZWY2MDA0MDA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MHg5NjAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MSAweDQ+OworCQkJfTsKKworCQkJVUFSVDE6IHNlcmlhbEBlZjYwMDMwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDwweGVmNjAwMzAwIDB4MDAwMDAwMDg+OworCQkJCXZpcnR1YWwtcmVnID0gPDB4ZWY2MDAzMDA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MHg5NjAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MCAweDQ+OworCQkJfTsKKworCQkJSUlDOiBpMmNAZWY2MDA1MDAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00MDVlcCIsICJpYm0saWljIjsKKwkJCQlyZWcgPSA8MHhlZjYwMDUwMCAweDAwMDAwMDExPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MiAweDQ+OworCisJCQkJcnRjQDY4IHsKKwkJCQkJLyogQWN0dWFsbHkgYSBEUzEzMzkgKi8KKwkJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzA3IjsKKwkJCQkJcmVnID0gPDB4Njg+OworCQkJCX07CisKKwkJCQl0ZW1wQDRhIHsKKwkJCQkJLyogTm90IHByZXNlbnQgb24gYWxsIGJvYXJkcyAqLworCQkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCQlyZWcgPSA8MHg0YT47CisJCQkJfTsKKwkJCX07CisKKwkJCUdQSU86IGdwaW9AZWY2MDA3MDAgeworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAiaWJtLHBwYzR4eC1ncGlvIjsKKwkJCQlyZWcgPSA8MHhlZjYwMDcwMCAweDAwMDAwMDIwPjsKKwkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQl9OworCisJCQlncGlvLWxlZHMgeworCQkJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKwkJCQlzdGF0dXMgeworCQkJCQlsYWJlbCA9ICJTdGF0dXMiOworCQkJCQlncGlvcyA9IDwmR1BJTyAxIDA+OworCQkJCX07CisJCQkJcmFkaW9yeCB7CisJCQkJCWxhYmVsID0gIlJ4IjsKKwkJCQkJZ3Bpb3MgPSA8JkdQSU8gMHhlIDA+OworCQkJCX07CisJCQl9OworCisJCQlFTUFDMDogZXRoZXJuZXRAZWY2MDA4MDAgeworCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MHgwPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQwNWVwIiwgImlibSxlbWFjIjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPAorCQkJCQkweGYgMHg0IC8qIEV0aGVybmV0ICovCisJCQkJCTB4OSAweDQgLyogRXRoZXJuZXQgV2FrZSBVcCAqLz47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLworCQkJCXJlZyA9IDwweGVmNjAwODAwIDB4MDAwMDAwNzA+OworCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTD47CisJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MD47CisJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQltYXgtZnJhbWUtc2l6ZSA9IDwweDVkYz47CisJCQkJcngtZmlmby1zaXplID0gPDB4MTAwMD47CisJCQkJdHgtZmlmby1zaXplID0gPDB4ODAwPjsKKwkJCQlwaHktbW9kZSA9ICJtaWkiOworCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CisJCQl9OworCisJCQlFTUFDMTogZXRoZXJuZXRAZWY2MDA5MDAgeworCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MHgxPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQwNWVwIiwgImlibSxlbWFjIjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPAorCQkJCQkweDExIDB4NCAvKiBFdGhlcm5ldCAqLworCQkJCQkweDkgMHg0IC8qIEV0aGVybmV0IFdha2UgVXAgKi8+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwMDAwMDAwMDAwMF07IC8qIEZpbGxlZCBpbiBieSB6SW1hZ2UgKi8KKwkJCQlyZWcgPSA8MHhlZjYwMDkwMCAweDAwMDAwMDcwPjsKKwkJCQltYWwtZGV2aWNlID0gPCZNQUw+OworCQkJCW1hbC10eC1jaGFubmVsID0gPDI+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDE+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8MHg1ZGM+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDwweDEwMDA+OworCQkJCXR4LWZpZm8tc2l6ZSA9IDwweDgwMD47CisJCQkJbWRpby1kZXZpY2UgPSA8JkVNQUMwPjsKKwkJCQlwaHktbW9kZSA9ICJtaWkiOworCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAxPjsKKwkJCX07CisJCX07CisKKwkJRUJDMDogZWJjIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLGViYy00MDVlcCIsICJpYm0sZWJjIjsKKwkJCWRjci1yZWcgPSA8MHgwMTIgMHgwMDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJLyogVGhlIHJhbmdlcyBwcm9wZXJ0eSBpcyBzdXBwbGllZCBieSB0aGUgYm9vdHdyYXBwZXIKKwkJCSAqIGFuZCBpcyBiYXNlZCBvbiB0aGUgZmlybXdhcmUncyBjb25maWd1cmF0aW9uIG9mIHRoZQorCQkJICogRUJDIGJyaWRnZQorCQkJICovCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSB6SW1hZ2UgKi8KKworCQkJbm9yX2ZsYXNoQDAgeworCQkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCQliYW5rLXdpZHRoID0gPDI+OworCQkJCXJlZyA9IDwweDAgMHhmZjgwMDAwMCAweDAwODAwMDAwPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJCS8qIFRoaXMgbWFwcGluZyBpcyBmb3IgdGhlIDhNIGZsYXNoCisJCQkJICAgNE0gZmxhc2ggaGFzIGFsbCBvZnNzZXRzIC09IDRNLAorCQkJCSAgIGFuZCBGZWF0RlMgcGFydGl0aW9uIGlzIG5vdCBwcmVzZW50ICovCisJCQkJcGFydGl0aW9uQDAgeworCQkJCQlsYWJlbCA9ICJCb290bG9hZGVyIjsKKwkJCQkJcmVnID0gPDB4N2MwMDAwIDB4NDAwMDA+OworCQkJCQkvKiByZWFkLW9ubHk7ICovCisJCQkJfTsKKwkJCQlwYXJ0aXRpb25AMSB7CisJCQkJCWxhYmVsID0gIkVudl9hbmRfQ29uZmlnX1ByaW1hcnkiOworCQkJCQlyZWcgPSA8MHg0MDAwMDAgMHgxMDAwMD47CisJCQkJfTsKKwkJCQlwYXJ0aXRpb25AMiB7CisJCQkJCWxhYmVsID0gIktlcm5lbCI7CisJCQkJCXJlZyA9IDwweDQyMDAwMCAweDEwMDAwMD47CisJCQkJfTsKKwkJCQlwYXJ0aXRpb25AMyB7CisJCQkJCWxhYmVsID0gIkZpbGVzeXN0ZW0iOworCQkJCQlyZWcgPSA8MHg1MjAwMDAgMHgyYTAwMDA+OworCQkJCX07CisJCQkJcGFydGl0aW9uQDQgeworCQkJCQlsYWJlbCA9ICJFbnZfYW5kX0NvbmZpZ19TZWNvbmRhcnkiOworCQkJCQlyZWcgPSA8MHg0MTAwMDAgMHgxMDAwMD47CisJCQkJfTsKKwkJCQlwYXJ0aXRpb25ANSB7CisJCQkJCWxhYmVsID0gIkZlYXRGUyI7CisJCQkJCXJlZyA9IDwweDAwMDAwMCAweDQwMDAwMD47CisJCQkJfTsKKwkJCQlwYXJ0aXRpb25ANiB7CisJCQkJCWxhYmVsID0gIkJvb3Rsb2FkZXJfRW52IjsKKwkJCQkJcmVnID0gPDB4N2QwMDAwIDB4MTAwMDA+OworCQkJCX07CisJCQl9OworCQl9OworCisJCVBDSTA6IHBjaUBlYzAwMDAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQljb21wYXRpYmxlID0gImlibSxwbGI0MDVlcC1wY2kiLCAiaWJtLHBsYi1wY2kiOworCQkJcHJpbWFyeTsKKwkJCXJlZyA9IDwweGVlYzAwMDAwIDB4MDAwMDAwMDggICAgLyogQ29uZmlnIHNwYWNlIGFjY2VzcyAqLworCQkJCTB4ZWVkODAwMDAgMHgwMDAwMDAwNCAgICAvKiBJQUNLICovCisJCQkJMHhlZWQ4MDAwMCAweDAwMDAwMDA0ICAgIC8qIFNwZWNpYWwgY3ljbGUgKi8KKwkJCQkweGVmNDgwMDAwIDB4MDAwMDAwNDA+OyAgLyogSW50ZXJuYWwgcmVnaXN0ZXJzICovCisKKwkJCS8qIE91dGJvdW5kIHJhbmdlcywgb25lIG1lbW9yeSBhbmQgb25lIElPLAorCQkJICogbGF0ZXIgY2Fubm90IGJlIGNoYW5nZWQuIENoaXAgc3VwcG9ydHMgYSBzZWNvbmQKKwkJCSAqIElPIHJhbmdlIGJ1dCB3ZSBkb24ndCB1c2UgaXQgZm9yIG5vdworCQkJICovCisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAwMDAwMDAwIDB4MjAwMDAwMDAKKwkJCQkweDAxMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweGU4MDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAxMDAwMD47CisKKwkJCS8qIEluYm91bmQgMkdCIHJhbmdlIHN0YXJ0aW5nIGF0IDAgKi8KKwkJCWRtYS1yYW5nZXMgPSA8MHg0MjAwMDAwMCAweDAgMHgwIDB4MCAweDAgMHg4MDAwMDAwMD47CisKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJCS8qIElEU0VMIDMgLS0gc2xvdDEgKG9wdGlvbmFsKSAyNy8yOSBBL0IgSVJRMi80ICovCisJCQkJMHgxODAwIDB4MCAweDAgMHgxICZVSUMwIDB4MWIgMHg4CisJCQkJMHgxODAwIDB4MCAweDAgMHgyICZVSUMwIDB4MWQgMHg4CisKKwkJCQkvKiBJRFNFTCA0IC0tIHNsb3QwLCAyNi8yOCBBL0IgSVJRMS8zICovCisJCQkJMHgyMDAwIDB4MCAweDAgMHgxICZVSUMwIDB4MWEgMHg4CisJCQkJMHgyMDAwIDB4MCAweDAgMHgyICZVSUMwIDB4MWMgMHg4CisJCQkJPjsKKwkJfTsKKwl9OworCisJY2hvc2VuIHsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAmVUFSVDA7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMKaW5kZXggNWU2YjA4Zi4uYzQ2NTYxNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tpbGF1ZWEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9raWxhdWVhLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIEFNQ0MgS2lsYXVlYSAoNDA1RVgpCiAgKgotICogQ29weXJpZ2h0IDIwMDcgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQKQEAgLTE1MCw3ICsxNTAsMTEgQEAKIAkJCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQkJCXBhcnRpdGlvbkAwIHsKIAkJCQkJCWxhYmVsID0gImtlcm5lbCI7Ci0JCQkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMjAwMDAwPjsKKwkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAxZTAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMWUwMDAwIHsKKwkJCQkJCWxhYmVsID0gImR0YiI7CisJCQkJCQlyZWcgPSA8MHgwMDFlMDAwMCAweDAwMDIwMDAwPjsKIAkJCQkJfTsKIAkJCQkJcGFydGl0aW9uQDIwMDAwMCB7CiAJCQkJCQlsYWJlbCA9ICJyb290IjsKQEAgLTE2OSw2ICsxNzMsMjkgQEAKIAkJCQkJCXJlZyA9IDwweDAzZmEwMDAwIDB4MDAwNjAwMDA+OwogCQkJCQl9OwogCQkJCX07CisKKwkJCQluZGZjQDEsMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiaWJtLG5kZmMiOworCQkJCQlyZWcgPSA8MHgwMDAwMDAwMSAweDAwMDAwMDAwIDB4MDAwMDIwMDA+OworCQkJCQljY3IgPSA8MHgwMDAwMTAwMD47CisJCQkJCWJhbmstc2V0dGluZ3MgPSA8MHg4MDAwMjIyMj47CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJCQluYW5kIHsKKwkJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJCQkJCXBhcnRpdGlvbkAwIHsKKwkJCQkJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAxMDAwMDA+OworCQkJCQkJfTsKKwkJCQkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCQkJCWxhYmVsID0gInVzZXIiOworCQkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDNmMDAwMDA+OworCQkJCQkJfTsKKwkJCQkJfTsKKwkJCQl9OwogCQkJfTsKIAogCQkJVUFSVDA6IHNlcmlhbEBlZjYwMDIwMCB7CkBAIC0xOTgsNiArMjI1LDE4IEBACiAJCQkJcmVnID0gPDB4ZWY2MDA0MDAgMHgwMDAwMDAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CiAJCQkJaW50ZXJydXB0cyA9IDwweDIgMHg0PjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOCI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQl9OworCisJCQkJZHR0QDQ4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxNzc1IjsKKwkJCQkJcmVnID0gPDB4NDg+OworCQkJCX07CiAJCQl9OwogCiAJCQlJSUMxOiBpMmNAZWY2MDA1MDAgewpAQCAtMjA3LDcgKzI0Niw2IEBACiAJCQkJaW50ZXJydXB0cyA9IDwweDcgMHg0PjsKIAkJCX07CiAKLQogCQkJUkdNSUkwOiBlbWFjLXJnbWlpQGVmNjAwYjAwIHsKIAkJCQljb21wYXRpYmxlID0gImlibSxyZ21paS00MDVleCIsICJpYm0scmdtaWkiOwogCQkJCXJlZyA9IDwweGVmNjAwYjAwIDB4MDAwMDAxMDQ+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21nY29nZS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWdjb2dlLmR0cwppbmRleCA2MzMyNTVhLi4wY2U5NjY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWdjb2dlLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWdjb2dlLmR0cwpAQCAtMTYyLDYgKzE2Miw1OSBAQAogCQkJCWZpeGVkLWxpbmsgPSA8MCAwIDEwIDAgMD47CiAJCQl9OwogCisJCQlpMmNAMTE4NjAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNzItaTJjIiwKKwkJCQkJICAgICAiZnNsLGNwbTItaTJjIjsKKwkJCQlyZWcgPSA8MHgxMTg2MCAweDIwIDB4OGFmYyAweDI+OworCQkJCWludGVycnVwdHMgPSA8MSA4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDI5NjAwMDAwPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCX07CisKKwkJCW1kaW9AMTBkNDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbTItbWRpby1iaXRiYW5nIjsKKwkJCQlyZWcgPSA8MHgxMGQwMCAweDE0PjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlmc2wsbWRpby1waW4gPSA8MTI+OworCQkJCWZzbCxtZGMtcGluID0gPDEzPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJcmVnID0gPDB4MD47CisJCQkJfTsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJfTsKKwkJCX07CisKKwkJCS8qIEZDQzEgbWFuYWdlbWVudCB0byBzd2l0Y2ggKi8KKwkJCWV0aGVybmV0QDExMzAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxjcG0yLWZjYy1lbmV0IjsKKwkJCQlyZWcgPSA8MHgxMTMwMCAweDIwIDB4ODQwMCAweDEwMCAweDExMzkwIDB4MT47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAxIDAyIDAzIDA0IDA3IF07CisJCQkJaW50ZXJydXB0cyA9IDwzMiA4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OworCQkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MT47CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4MTIwMDAzMDA+OworCQkJfTsKKworCQkJLyogRkNDMiB0byByZWR1bmRhbnQgY29yZSB1bml0IG92ZXIgYmFja3BsYW5lICovCisJCQlldGhlcm5ldEAxMTMyMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsY3BtMi1mY2MtZW5ldCI7CisJCQkJcmVnID0gPDB4MTEzMjAgMHgyMCAweDg1MDAgMHgxMDAgMHgxMTNiMCAweDE+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMSAwMiAwMyAwNCAwOCBdOworCQkJCWludGVycnVwdHMgPSA8MzMgOD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKwkJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKwkJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDI+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDE2MjAwMzAwPjsKKwkJCX07CiAJCX07CiAKIAkJUElDOiBpbnRlcnJ1cHQtY29udHJvbGxlckAxMGMwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODI3MmFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODI3MmFkcy5kdHMKaW5kZXggNjBmMzMyNy4uZTgwMmViZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgyNzJhZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MjcyYWRzLmR0cwpAQCAtMTczLDYgKzE3MywxNCBAQAogCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweGNlMDAwMDA+OwogCQkJfTsKIAorCQkJdXNiQDExYjYwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjcyLWNwbS11c2IiOworCQkJCXJlZyA9IDwweDExYjYwIDB4NDAgMHg4YjAwIDB4MTAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDExIDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47CisJCQkJbW9kZSA9ICJwZXJpcGhlcmFsIjsKKwkJCX07CisKIAkJCW1kaW9AMTBkNDAgewogCQkJCWRldmljZV90eXBlID0gIm1kaW8iOwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNzJhZHMtbWRpby1iaXRiYW5nIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzCmluZGV4IDRmMDZkYmMuLjI4ZTAyMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KLQkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDExMTExMTExMT47CiAJCQl9OwogCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N193bGFuLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3dsYW4uZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZWJjNGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N193bGFuLmR0cwpAQCAtMCwwICsxLDQ2NCBAQAorLyoKKyAqIE1QQzgzNzdFIFdMQU4gRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3N3dsYW4iOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZlbmV0MDsKKwkJZXRoZXJuZXQxID0gJmVuZXQxOworCQlzZXJpYWwwID0gJnNlcmlhbDA7CisJCXNlcmlhbDEgPSAmc2VyaWFsMTsKKwkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CisJCXBjaTIgPSAmcGNpMjsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDgzNzdAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OworCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MjAwMDAwMDA+OwkvLyA1MTJNQiBhdCAwCisJfTsKKworCWxvY2FsYnVzQGUwMDA1MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWVsYmMiLCAiZnNsLGVsYmMiLCAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweGUwMDA1MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8NzcgMHg4PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCXJhbmdlcyA9IDwweDAgMHgwIDB4ZmMwMDAwMDAgMHgwNDAwMDAwMD47CisKKwkJZmxhc2hAMCwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4MCAweDQwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwxPjsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCXJlZyA9IDwwIDB4ODAwMD47CisJCQkJbGFiZWwgPSAidS1ib290IjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AYTAwMDAgeworCQkJCXJlZyA9IDwweGEwMDAwIDB4MzAwMDAwPjsKKwkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJfTsKKworCQkJcGFydGl0aW9uQDNhMDAwMCB7CisJCQkJcmVnID0gPDB4M2EwMDAwIDB4M2M2MDAwMD47CisJCQkJbGFiZWwgPSAicm9vdGZzIjsKKwkJCX07CisJCX07CisJfTsKKworCWltbXJAZTAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCXJhbmdlcyA9IDwweDAgMHhlMDAwMDAwMCAweDAwMTAwMDAwPjsKKwkJcmVnID0gPDB4ZTAwMDAwMDAgMHgwMDAwMDIwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CisKKwkJd2R0QDIwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJ3YXRjaGRvZyI7CisJCQljb21wYXRpYmxlID0gIm1wYzgzeHhfd2R0IjsKKwkJCXJlZyA9IDwweDIwMCAweDEwMD47CisJCX07CisKKwkJZ3BpbzE6IGdwaW8tY29udHJvbGxlckBjMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJZ3BpbzI6IGdwaW8tY29udHJvbGxlckBkMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhkMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NSAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJc2xlZXAtbmV4dXMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MGMwMDAwMDA+OworCQkJcmFuZ2VzOworCisJCQlpMmNAMzAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlkZnNycjsKKworCQkJCWF0MjRANTAgeworCQkJCQljb21wYXRpYmxlID0gImF0MjQsMjRjMjU2IjsKKwkJCQkJcmVnID0gPDB4NTA+OworCQkJCX07CisKKwkJCQlydGNANjggeworCQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOworCQkJCQlyZWcgPSA8MHg2OD47CisJCQkJfTsKKwkJCX07CisKKwkJCXNkaGNpQDJlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWVzZGhjIiwgImZzbCxlc2RoYyI7CisJCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMzMzMzMzMz47CisJCQl9OworCQl9OworCisJCWkyY0AzMTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwxNSAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlkZnNycjsKKwkJfTsKKworCQlzcGlANzAwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsc3BpIjsKKwkJCXJlZyA9IDwweDcwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJbW9kZSA9ICJjcHUiOworCQl9OworCisJCWRtYUA4MmE4IHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWRtYSIsICJmc2wsZWxvLWRtYSI7CisJCQlyZWcgPSA8MHg4MmE4IDQ+OworCQkJcmFuZ2VzID0gPDAgMHg4MTAwIDB4MWE4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEA4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCWludGVycnVwdHMgPSA8NzEgOD47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCWludGVycnVwdHMgPSA8NzEgOD47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCWludGVycnVwdHMgPSA8NzEgOD47CisJCQl9OworCQl9OworCisJCXVzYkAyMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbC11c2IyLWRyIjsKKwkJCXJlZyA9IDwweDIzMDAwIDB4MTAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDM4IDB4OD47CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMGMwMDAwMD47CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CisJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXNsZWVwID0gPCZwbWMgMHhjMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OworCQkJc2xlZXAgPSA8JnBtYyAweDMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDUwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDkgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQl9OworCisJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwxMCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCX07CisKKwkJY3J5cHRvQDMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYzMuMCIsICJmc2wsc2VjMi40IiwgImZzbCxzZWMyLjIiLAorCQkJCSAgICAgImZzbCxzZWMyLjEiLCAiZnNsLHNlYzIuMCI7CisJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MTEgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJZnNsLG51bS1jaGFubmVscyA9IDw0PjsKKwkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKKwkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OworCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQkJc2xlZXAgPSA8JnBtYyAweDAzMDAwMDAwPjsKKwkJfTsKKworCQlzYXRhQDE4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctc2F0YSIsICJmc2wscHEtc2F0YSI7CisJCQlyZWcgPSA8MHgxODAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDw0NCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwYzA+OworCQl9OworCisJCXNhdGFAMTkwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1zYXRhIiwgImZzbCxwcS1zYXRhIjsKKwkJCXJlZyA9IDwweDE5MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQ1IDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAzMD47CisJCX07CisKKwkJLyogSVBJQworCQkgKiBpbnRlcnJ1cHRzIGNlbGwgPSA8aW50ciAjLCBzZW5zZT4KKwkJICogc2Vuc2UgdmFsdWVzIG1hdGNoIGxpbnV4IElPUkVTT1VSQ0VfSVJRXyogZGVmaW5lczoKKwkJICogc2Vuc2UgPT0gODogTGV2ZWwsIGxvdyBhc3NlcnRpb24KKwkJICogc2Vuc2UgPT0gMjogRWRnZSwgaGlnaC10by1sb3cgY2hhbmdlCisJCSAqLworCQlpcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckA3MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsaXBpYyI7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDcwMCAweDEwMD47CisJCX07CisKKwkJcG1jOiBwb3dlckBiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1wbWMiLCAiZnNsLG1wYzgzNDktcG1jIjsKKwkJCXJlZyA9IDwweGIwMCAweDEwMCAweGEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDgwIDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpQGUwMDA4NTAwIHsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkJLyogSVJRNSA9IDIxID0gMHgxNSwgSVJRNiA9IDB4MTYsIElSUTcgPSAyMyA9IDB4MTcgKi8KKworCQkJCS8qIElEU0VMIEFEMTQgSVJRNiBpbnRhICovCisJCQkJIDB4NzAwMCAweDAgMHgwIDB4MSAmaXBpYyAyMiAweDgKKworCQkJCS8qIElEU0VMIEFEMTUgSVJRNSBpbnRhICovCisJCQkJIDB4NzgwMCAweDAgMHgwIDB4MSAmaXBpYyAyMSAweDg+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJaW50ZXJydXB0cyA9IDw2NiAweDg+OworCQlidXMtcmFuZ2UgPSA8MCAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAweDAgMHgxMDAwMDAwMAorCQkgICAgICAgICAgMHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCisJCSAgICAgICAgICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTAzMDAwMDAgMHgwIDB4MDAxMDAwMDA+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwMTAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NjY2NjY2NjY+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwl9OworCisJcGNpMTogcGNpZUBlMDAwOTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwOTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwIDB4YTgwMDAwMDAgMCAweDEwMDAwMDAwCisJCSAgICAgICAgICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGI4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMSA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMzAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhhODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKKworCXBjaTI6IHBjaWVAZTAwMGEwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMGEwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjODAwMDAwMCAweGM4MDAwMDAwIDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGQ4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMiA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMGMwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhjODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cwppbmRleCBhYWJmMzQzLi5hMTFlYWQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCi0JCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMTExMTExMTE+OwogCQkJfTsKIAkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMKaW5kZXggOWIxZGE4Ni4uZTM1ZGZiYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwotCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MTExMTExMTExPjsKIAkJCX07CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKaW5kZXggZTc4MWFkMi4uODE1Y2ViYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKQEAgLTE0LDggKzE0LDggQEAKIC8gewogCW1vZGVsID0gImZzbCxtcGM4NTM2ZHMiOwogCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1MzZkcyI7Ci0JI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JI3NpemUtY2VsbHMgPSA8MT47CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8Mj47CiAKIAlhbGlhc2VzIHsKIAkJZXRoZXJuZXQwID0gJmVuZXQwOwpAQCAtNDIsNyArNDIsNyBAQAogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJcmVnID0gPDAwMDAwMDAwIDAwMDAwMDAwPjsJLy8gRmlsbGVkIGJ5IFUtQm9vdAorCQlyZWcgPSA8MCAwIDAgMD47CS8vIEZpbGxlZCBieSBVLUJvb3QKIAl9OwogCiAJc29jQGZmZTAwMDAwIHsKQEAgLTUwLDcgKzUwLDcgQEAKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCWRldmljZV90eXBlID0gInNvYyI7CiAJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7Ci0JCXJhbmdlcyA9IDwweDAgMHhmZmUwMDAwMCAweDEwMDAwMD47CisJCXJhbmdlcyA9IDwweDAgMCAweGZmZTAwMDAwIDB4MTAwMDAwPjsKIAkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZpbGxlZCBvdXQgYnkgdWJvb3QuCiAKIAkJZWNtLWxhd0AwIHsKQEAgLTI1MCw2ICsyNTAsMTQgQEAKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCisJCXNkaGNpQDJlMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1MzYtZXNkaGMiLCAiZnNsLGVzZGhjIjsKKwkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDcyIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwyNTAwMDAwMDA+OworCQl9OworCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwpAQCAtMzQ3LDEzICszNTUsMTMgQEAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWludGVycnVwdHMgPSA8MjQgMHgyPjsKIAkJYnVzLXJhbmdlID0gPDAgMHhmZj47Ci0JCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDAgMHgxMDAwMDAwMAotCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGZmYzAwMDAwIDAgMHgwMDAxMDAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHg4MDAwMDAwMCAwIDB4ODAwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDAgMHhmZmMwMDAwMCAwIDB4MDAwMTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8NjY2NjY2NjY+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGZmZTA4MDAwIDB4MTAwMD47CisJCXJlZyA9IDwwIDB4ZmZlMDgwMDAgMCAweDEwMDA+OwogCX07CiAKIAlwY2kxOiBwY2llQGZmZTA5MDAwIHsKQEAgLTM2MiwxMCArMzcwLDEwIEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZmZlMDkwMDAgMHgxMDAwPjsKKwkJcmVnID0gPDAgMHhmZmUwOTAwMCAwIDB4MTAwMD47CiAJCWJ1cy1yYW5nZSA9IDwwIDB4ZmY+OwotCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4OTgwMDAwMDAgMHg5ODAwMDAwMCAwIDB4MDgwMDAwMDAKLQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhmZmMyMDAwMCAwIDB4MDAwMTAwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4OTgwMDAwMDAgMCAweDk4MDAwMDAwIDAgMHgwODAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAwIDB4ZmZjMjAwMDAgMCAweDAwMDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWludGVycnVwdHMgPSA8MjUgMHgyPjsKQEAgLTM5OCwxMCArNDA2LDEwIEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZmZlMGEwMDAgMHgxMDAwPjsKKwkJcmVnID0gPDAgMHhmZmUwYTAwMCAwIDB4MTAwMD47CiAJCWJ1cy1yYW5nZSA9IDwwIDB4ZmY+OwotCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAwIDB4MDgwMDAwMDAKLQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhmZmMxMDAwMCAwIDB4MDAwMTAwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4OTAwMDAwMDAgMCAweDkwMDAwMDAwIDAgMHgwODAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAwIDB4ZmZjMTAwMDAgMCAweDAwMDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWludGVycnVwdHMgPSA8MjYgMHgyPjsKQEAgLTQzNCwxMCArNDQyLDEwIEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZmZlMGIwMDAgMHgxMDAwPjsKKwkJcmVnID0gPDAgMHhmZmUwYjAwMCAwIDB4MTAwMD47CiAJCWJ1cy1yYW5nZSA9IDwwIDB4ZmY+OwotCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAwIDB4MjAwMDAwMDAKLQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhmZmMzMDAwMCAwIDB4MDAwMTAwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAgMCAweGEwMDAwMDAwIDAgMHgyMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAwIDB4ZmZjMzAwMDAgMCAweDAwMDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWludGVycnVwdHMgPSA8MjcgMHgyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHNfMzZiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHNfMzZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTViMjYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkc18zNmIuZHRzCkBAIC0wLDAgKzEsNDc1IEBACisvKgorICogTVBDODUzNiBEUyBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAiZnNsLG1wYzg1MzZkcyI7CisJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNmRzIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkjc2l6ZS1jZWxscyA9IDwyPjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmZW5ldDA7CisJCWV0aGVybmV0MSA9ICZlbmV0MTsKKwkJc2VyaWFsMCA9ICZzZXJpYWwwOworCQlzZXJpYWwxID0gJnNlcmlhbDE7CisJCXBjaTAgPSAmcGNpMDsKKwkJcGNpMSA9ICZwY2kxOworCQlwY2kyID0gJnBjaTI7CisJCXBjaTMgPSAmcGNpMzsKKwl9OworCisJY3B1cyB7CisJCSNjcHVzID0gPDE+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NTM2QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDAgMCAwIDA+OwkvLyBGaWxsZWQgYnkgVS1Cb290CisJfTsKKworCXNvY0BmZmZlMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCXJhbmdlcyA9IDwweDAgMHhmIDB4ZmZlMDAwMDAgMHgxMDAwMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRmlsbGVkIG91dCBieSB1Ym9vdC4KKworCQllY20tbGF3QDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsZWNtLWxhdyI7CisJCQlyZWcgPSA8MHgwIDB4MTAwMD47CisJCQlmc2wsbnVtLWxhd3MgPSA8MTI+OworCQl9OworCisJCWVjbUAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1MzYtZWNtIiwgImZzbCxlY20iOworCQkJcmVnID0gPDB4MTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwxNyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi1tZW1vcnktY29udHJvbGxlciI7CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTggMHgyPjsKKwkJfTsKKworCQlMMjogbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTM2LWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwxNiAweDI+OworCQl9OworCisJCWkyY0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKwkJfTsKKworCQlpMmNAMzEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCQlydGNANjggeworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMzIzMiI7CisJCQkJcmVnID0gPDB4Njg+OworCQkJCWludGVycnVwdHMgPSA8MCAweDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJfTsKKwkJfTsKKworCQlkbWFAMjEzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1MzYtZG1hIiwgImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHgyMTMwMCA0PjsKKwkJCXJhbmdlcyA9IDwwIDB4MjExMDAgMHgyMDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRtYS1jaGFubmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1MzYtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjAgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1MzYtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDE4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OworCQkJfTsKKwkJfTsKKworCQl1c2JAMjIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi11c2IyLW1waCIsICJmc2wtdXNiMi1tcGgiOworCQkJcmVnID0gPDB4MjIwMDAgMHgxMDAwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MjggMHgyPjsKKwkJCXBoeV90eXBlID0gInVscGkiOworCQl9OworCisJCXVzYkAyMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTM2LXVzYjItbXBoIiwgImZzbC11c2IyLW1waCI7CisJCQlyZWcgPSA8MHgyMzAwMCAweDEwMDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDw0NiAweDI+OworCQkJcGh5X3R5cGUgPSAidWxwaSI7CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CisJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDB4MT47CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMHgxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OworCQl9OworCisJCXVzYkAyYjAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTM2LXVzYjItZHIiLCAiZnNsLXVzYjItZHIiOworCQkJcmVnID0gPDB4MmIwMDAgMHgxMDAwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8NjAgMHgyPjsKKwkJCWRyX21vZGUgPSAicGVyaXBoZXJhbCI7CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJfTsKKworCQlzZGhjaUAyZTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTM2LWVzZGhjIiwgImZzbCxlc2RoYyI7CisJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDw3MiAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MjUwMDAwMDAwPjsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw0MiAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJY3J5cHRvQDMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYzMuMCIsICJmc2wsc2VjMi40IiwgImZzbCxzZWMyLjIiLAorCQkJCSAgICAgImZzbCxzZWMyLjEiLCAiZnNsLHNlYzIuMCI7CisJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NDUgMiA1OCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZnNsLG51bS1jaGFubmVscyA9IDw0PjsKKwkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKKwkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OworCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQl9OworCisJCXNhdGFAMTgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi1zYXRhIiwgImZzbCxwcS1zYXRhIjsKKwkJCXJlZyA9IDwweDE4MDAwIDB4MTAwMD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJaW50ZXJydXB0cyA9IDw3NCAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJc2F0YUAxOTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTM2LXNhdGEiLCAiZnNsLHBxLXNhdGEiOworCQkJcmVnID0gPDB4MTkwMDAgMHgxMDAwPjsKKwkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQlpbnRlcnJ1cHRzID0gPDQxIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsJLy9nbG9iYWwgdXRpbGl0aWVzIGJsb2NrCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LWd1dHMiOworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKwkJCWZzbCxoYXMtcnN0Y3I7CisJCX07CisKKwkJbXBpYzogcGljQDQwMDAwIHsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CisJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOworCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOworCQkJYmlnLWVuZGlhbjsKKwkJfTsKKworCQltc2lANDE2MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi1tc2kiLCAiZnNsLG1waWMtbXNpIjsKKwkJCXJlZyA9IDwweDQxNjAwIDB4ODA+OworCQkJbXNpLWF2YWlsYWJsZS1yYW5nZXMgPSA8MCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPAorCQkJCTB4ZTAgMAorCQkJCTB4ZTEgMAorCQkJCTB4ZTIgMAorCQkJCTB4ZTMgMAorCQkJCTB4ZTQgMAorCQkJCTB4ZTUgMAorCQkJCTB4ZTYgMAorCQkJCTB4ZTcgMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpQGZmZmUwODAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtcGNpIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisKKwkJCS8qIElEU0VMIDB4MTEgSjE3IFNsb3QgMSAqLworCQkJMHg4ODAwIDAgMCAxICZtcGljIDEgMQorCQkJMHg4ODAwIDAgMCAyICZtcGljIDIgMQorCQkJMHg4ODAwIDAgMCAzICZtcGljIDMgMQorCQkJMHg4ODAwIDAgMCA0ICZtcGljIDQgMT47CisKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjQgMHgyPjsKKwkJYnVzLXJhbmdlID0gPDAgMHhmZj47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhmMDAwMDAwMCAweGMgMHgwMDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhmIDB4ZmZjMDAwMDAgMCAweDAwMDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDY2NjY2NjY2PjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhmIDB4ZmZlMDgwMDAgMCAweDEwMDA+OworCX07CisKKwlwY2kxOiBwY2llQGZmZmUwOTAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZiAweGZmZTA5MDAwIDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMHhmZj47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhmODAwMDAwMCAweGMgMHgxODAwMDAwMCAwIDB4MDgwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhmIDB4ZmZjMjAwMDAgMCAweDAwMDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjUgMHgyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDAgKi8KKwkJCTAwMDAgMCAwIDEgJm1waWMgNCAxCisJCQkwMDAwIDAgMCAyICZtcGljIDUgMQorCQkJMDAwMCAwIDAgMyAmbXBpYyA2IDEKKwkJCTAwMDAgMCAwIDQgJm1waWMgNyAxCisJCQk+OworCQlwY2llQDAgeworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhmODAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4ZjgwMDAwMDAKKwkJCQkgIDAgMHgwODAwMDAwMAorCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDAxMDAwMD47CisJCX07CisJfTsKKworCXBjaTI6IHBjaWVAZmZmZTBhMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhmIDB4ZmZlMGEwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAweGZmPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGY4MDAwMDAwIDB4YyAweDEwMDAwMDAwIDAgMHgwODAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGYgMHhmZmMxMDAwMCAwIDB4MDAwMTAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwyNiAweDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MCAqLworCQkJMDAwMCAwIDAgMSAmbXBpYyAwIDEKKwkJCTAwMDAgMCAwIDIgJm1waWMgMSAxCisJCQkwMDAwIDAgMCAzICZtcGljIDIgMQorCQkJMDAwMCAwIDAgNCAmbXBpYyAzIDEKKwkJCT47CisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGY4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhmODAwMDAwMAorCQkJCSAgMCAweDA4MDAwMDAwCisKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwMDEwMDAwPjsKKwkJfTsKKwl9OworCisJcGNpMzogcGNpZUBmZmZlMGIwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGYgMHhmZmUwYjAwMCAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4ZTAwMDAwMDAgMHhjIDB4MjAwMDAwMDAgMCAweDIwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4ZiAweGZmYzMwMDAwIDAgMHgwMDAxMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDI3IDB4Mj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgwICovCisJCQkwMDAwIDAgMCAxICZtcGljIDggMQorCQkJMDAwMCAwIDAgMiAmbXBpYyA5IDEKKwkJCTAwMDAgMCAwIDMgJm1waWMgMTAgMQorCQkJMDAwMCAwIDAgNCAmbXBpYyAxMSAxCisJCQk+OworCisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGUwMDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhlMDAwMDAwMAorCQkJCSAgMCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwMTAwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cwppbmRleCA0NzViZTE0My4uNDE3M2FmMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDhjZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cwpAQCAtMTAwLDYgKzEwMCwyMSBAQAogCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CisKKwkJCWVlcHJvbUA1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCwyNGM2NCI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKworCQkJZWVwcm9tQDU2IHsKKwkJCQljb21wYXRpYmxlID0gImF0bWVsLDI0YzY0IjsKKwkJCQlyZWcgPSA8MHg1Nj47CisJCQl9OworCisJCQllZXByb21ANTcgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsMjRjNjQiOworCQkJCXJlZyA9IDwweDU3PjsKKwkJCX07CiAJCX07CiAKIAkJaTJjQDMxMDAgewpAQCAtMTExLDYgKzEyNiwxMSBAQAogCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CisKKwkJCWVlcHJvbUA1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdG1lbCwyNGM2NCI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKIAkJfTsKIAogCQlkbWFAMjEzMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjltZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjltZHMuZHRzCmluZGV4IDllNGNlOTkuLjA2MzMyZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY5bWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OW1kcy5kdHMKQEAgLTk5LDggKzk5LDE4IEBACiAJCX07CiAKIAkJYmNzckAxLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjltZHMtYmNzciI7CiAJCQlyZWcgPSA8MSAwIDB4ODAwMD47CisJCQlyYW5nZXMgPSA8MCAxIDAgMHg4MDAwPjsKKworCQkJYmNzcjE3OiBncGlvLWNvbnRyb2xsZXJAMTEgeworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjltZHMtYmNzci1ncGlvIjsKKwkJCQlyZWcgPSA8MHgxMSAweDE+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCX07CiAJCX07CiAKIAkJbmFuZEAzLDAgewpAQCAtMzE1LDYgKzMyNSwxNCBAQAogCQkJCWdwaW8tY29udHJvbGxlcjsKIAkJCX07CiAKKwkJCXFlX3Bpb19mOiBncGlvLWNvbnRyb2xsZXJAYTAgeworCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjktcWUtcGFyaW8tYmFuayIsCisJCQkJCSAgICAgImZzbCxtcGM4MzIzLXFlLXBhcmlvLWJhbmsiOworCQkJCXJlZyA9IDwweGEwIDB4MTg+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCX07CisKIAkJCXBpbzE6IHVjY19waW5AMDEgewogCQkJCXBpby1tYXAgPSA8CiAJCQkvKiBwb3J0ICBwaW4gIGRpciAgb3Blbl9kcmFpbiAgYXNzaWdubWVudCAgaGFzX2lycSAqLwpAQCAtNDE5LDYgKzQzNywxNiBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKKwkJdGltZXJANDQwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjktcWUtZ3RtIiwKKwkJCQkgICAgICJmc2wscWUtZ3RtIiwgImZzbCxndG0iOworCQkJcmVnID0gPDB4NDQwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxMiAxMyAxNCAxNT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZxZWljPjsKKwkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJfTsKKwogCQlzcGlANGMwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC00NDYsNiArNDc0LDIzIEBACiAJCQltb2RlID0gImNwdSI7CiAJCX07CiAKKwkJdXNiQDZjMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY5LXFlLXVzYiIsCisJCQkJICAgICAiZnNsLG1wYzgzMjMtcWUtdXNiIjsKKwkJCXJlZyA9IDwweDZjMCAweDQwIDB4OGIwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDExPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JnFlaWM+OworCQkJZnNsLGZ1bGxzcGVlZC1jbG9jayA9ICJjbGs1IjsKKwkJCWZzbCxsb3dzcGVlZC1jbG9jayA9ICJicmcxMCI7CisJCQlncGlvcyA9IDwmcWVfcGlvX2YgMyAwICAgLyogVVNCT0UgKi8KKwkJCQkgJnFlX3Bpb19mIDQgMCAgIC8qIFVTQlRQICovCisJCQkJICZxZV9waW9fZiA1IDAgICAvKiBVU0JUTiAqLworCQkJCSAmcWVfcGlvX2YgNiAwICAgLyogVVNCUlAgKi8KKwkJCQkgJnFlX3Bpb19mIDggMCAgIC8qIFVTQlJOICovCisJCQkJICZiY3NyMTcgICA2IDAgICAvKiBTUEVFRCAqLworCQkJCSAmYmNzcjE3ICAgNSAxPjsgLyogUE9XRVIgKi8KKwkJfTsKKwogCQllbmV0MDogdWNjQDIwMDAgewogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gInVjY19nZXRoIjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMHJkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNGNiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGIuZHRzCkBAIC0wLDAgKzEsNTg2IEBACisvKgorICogUDIwMjAgUkRCIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAyMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworLyB7CisJbW9kZWwgPSAiZnNsLFAyMDIwIjsKKwljb21wYXRpYmxlID0gImZzbCxQMjAyMFJEQiI7CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8Mj47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmVuZXQwOworCQlldGhlcm5ldDEgPSAmZW5ldDE7CisJCWV0aGVybmV0MiA9ICZlbmV0MjsKKwkJc2VyaWFsMCA9ICZzZXJpYWwwOworCQlzZXJpYWwxID0gJnNlcmlhbDE7CisJCXBjaTAgPSAmcGNpMDsKKwkJcGNpMSA9ICZwY2kxOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsUDIwMjBAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4MD47CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisKKwkJUG93ZXJQQyxQMjAyMEAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgxPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwl9OworCisJbG9jYWxidXNAZmZlMDUwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWVsYmMiLCAiZnNsLGVsYmMiLCAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwwIDB4ZmZlMDUwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDE5IDI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKworCQkvKiBOT1IgYW5kIE5BTkQgRmxhc2hlcyAqLworCQlyYW5nZXMgPSA8MHgwIDB4MCAweDAgMHhlZjAwMDAwMCAweDAxMDAwMDAwCisJCQkgIDB4MSAweDAgMHgwIDB4ZmZhMDAwMDAgMHgwMDA0MDAwMAorCQkJICAweDIgMHgwIDB4MCAweGZmYjAwMDAwIDB4MDAwMjAwMDA+OworCisJCW5vckAwLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDAgMHgwIDB4MTAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDE+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJLyogVGhpcyBsb2NhdGlvbiBtdXN0IG5vdCBiZSBhbHRlcmVkICAqLworCQkJCS8qIDI1NktCIGZvciBWaXRlc3NlIDczODUgU3dpdGNoIGZpcm13YXJlICovCisJCQkJcmVnID0gPDB4MCAweDAwMDQwMDAwPjsKKwkJCQlsYWJlbCA9ICJOT1IgKFJPKSBWaXRlc3NlLTczODUgRmlybXdhcmUiOworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkA0MDAwMCB7CisJCQkJLyogMjU2S0IgZm9yIERUQiBJbWFnZSAqLworCQkJCXJlZyA9IDwweDAwMDQwMDAwIDB4MDAwNDAwMDA+OworCQkJCWxhYmVsID0gIk5PUiAoUk8pIERUQiBJbWFnZSI7CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDgwMDAwIHsKKwkJCQkvKiAzLjUgTUIgZm9yIExpbnV4IEtlcm5lbCBJbWFnZSAqLworCQkJCXJlZyA9IDwweDAwMDgwMDAwIDB4MDAzODAwMDA+OworCQkJCWxhYmVsID0gIk5PUiAoUk8pIExpbnV4IEtlcm5lbCBJbWFnZSI7CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDQwMDAwMCB7CisJCQkJLyogMTFNQiBmb3IgSkZGUzIgYmFzZWQgUm9vdCBmaWxlIFN5c3RlbSAqLworCQkJCXJlZyA9IDwweDAwNDAwMDAwIDB4MDBiMDAwMDA+OworCQkJCWxhYmVsID0gIk5PUiAoUlcpIEpGRlMyIFJvb3QgRmlsZSBTeXN0ZW0iOworCQkJfTsKKworCQkJcGFydGl0aW9uQGYwMDAwMCB7CisJCQkJLyogVGhpcyBsb2NhdGlvbiBtdXN0IG5vdCBiZSBhbHRlcmVkICAqLworCQkJCS8qIDUxMktCIGZvciB1LWJvb3QgQm9vdGxvYWRlciBJbWFnZSAqLworCQkJCS8qIDUxMktCIGZvciB1LWJvb3QgRW52aXJvbm1lbnQgVmFyaWFibGVzICovCisJCQkJcmVnID0gPDB4MDBmMDAwMDAgMHgwMDEwMDAwMD47CisJCQkJbGFiZWwgPSAiTk9SIChSTykgVS1Cb290IEltYWdlIjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCisJCW5hbmRAMSwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1mY20tbmFuZCIsCisJCQkJICAgICAiZnNsLGVsYmMtZmNtLW5hbmQiOworCQkJcmVnID0gPDB4MSAweDAgMHg0MDAwMD47CisKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQkvKiBUaGlzIGxvY2F0aW9uIG11c3Qgbm90IGJlIGFsdGVyZWQgICovCisJCQkJLyogMU1CIGZvciB1LWJvb3QgQm9vdGxvYWRlciBJbWFnZSAqLworCQkJCXJlZyA9IDwweDAgMHgwMDEwMDAwMD47CisJCQkJbGFiZWwgPSAiTkFORCAoUk8pIFUtQm9vdCBJbWFnZSI7CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJLyogMU1CIGZvciBEVEIgSW1hZ2UgKi8KKwkJCQlyZWcgPSA8MHgwMDEwMDAwMCAweDAwMTAwMDAwPjsKKwkJCQlsYWJlbCA9ICJOQU5EIChSTykgRFRCIEltYWdlIjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMjAwMDAwIHsKKwkJCQkvKiA0TUIgZm9yIExpbnV4IEtlcm5lbCBJbWFnZSAqLworCQkJCXJlZyA9IDwweDAwMjAwMDAwIDB4MDA0MDAwMDA+OworCQkJCWxhYmVsID0gIk5BTkQgKFJPKSBMaW51eCBLZXJuZWwgSW1hZ2UiOworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkA2MDAwMDAgeworCQkJCS8qIDRNQiBmb3IgQ29tcHJlc3NlZCBSb290IGZpbGUgU3lzdGVtIEltYWdlICovCisJCQkJcmVnID0gPDB4MDA2MDAwMDAgMHgwMDQwMDAwMD47CisJCQkJbGFiZWwgPSAiTkFORCAoUk8pIENvbXByZXNzZWQgUkZTIEltYWdlIjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AYTAwMDAwIHsKKwkJCQkvKiA3TUIgZm9yIEpGRlMyIGJhc2VkIFJvb3QgZmlsZSBTeXN0ZW0gKi8KKwkJCQlyZWcgPSA8MHgwMGEwMDAwMCAweDAwNzAwMDAwPjsKKwkJCQlsYWJlbCA9ICJOQU5EIChSVykgSkZGUzIgUm9vdCBGaWxlIFN5c3RlbSI7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMTEwMDAwMCB7CisJCQkJLyogMTVNQiBmb3IgSkZGUzIgYmFzZWQgUm9vdCBmaWxlIFN5c3RlbSAqLworCQkJCXJlZyA9IDwweDAxMTAwMDAwIDB4MDBmMDAwMDA+OworCQkJCWxhYmVsID0gIk5BTkQgKFJXKSBXcml0YWJsZSBVc2VyIGFyZWEiOworCQkJfTsKKwkJfTsKKworCQlMMnN3aXRjaEAyLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAidml0ZXNzZS03Mzg1IjsKKwkJCXJlZyA9IDwweDIgMHgwIDB4MjAwMDA+OworCQl9OworCisJfTsKKworCXNvY0BmZmUwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtaW1tciIsICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzID0gPDB4MCAgMHgwIDB4ZmZlMDAwMDAgMHgxMDAwMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRmlsbGVkIG91dCBieSB1Ym9vdC4KKworCQllY20tbGF3QDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsZWNtLWxhdyI7CisJCQlyZWcgPSA8MHgwIDB4MTAwMD47CisJCQlmc2wsbnVtLWxhd3MgPSA8MTI+OworCQl9OworCisJCWVjbUAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWVjbSIsICJmc2wsZWNtIjsKKwkJCXJlZyA9IDwweDEwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MTcgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLW1lbW9yeS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKKwkJfTsKKworCQlpMmNAMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQkJcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCX07CisJCX07CisKKwkJaTJjQDMxMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzcGlANzAwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVzcGkiOworCQkJcmVnID0gPDB4NzAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDw1OSAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQltb2RlID0gImNwdSI7CisKKwkJCWZzbF9tMjVwODBAMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZXNwaS1mbGFzaCI7CisJCQkJcmVnID0gPDA+OworCQkJCWxpbnV4LG1vZGFsaWFzID0gImZzbF9tMjVwODAiOworCQkJCW1vZGFsID0gInMyNXNsMTI4YiI7CisJCQkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OworCQkJCW1vZGUgPSA8MD47CisKKwkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCS8qIDUxMktCIGZvciB1LWJvb3QgQm9vdGxvYWRlciBJbWFnZSAqLworCQkJCQlyZWcgPSA8MHgwIDB4MDAwODAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJPKSBVLUJvb3QgSW1hZ2UiOworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkA4MDAwMCB7CisJCQkJCS8qIDUxMktCIGZvciBEVEIgSW1hZ2UgKi8KKwkJCQkJcmVnID0gPDB4MDAwODAwMDAgMHgwMDA4MDAwMD47CisJCQkJCWxhYmVsID0gIlNQSSAoUk8pIERUQiBJbWFnZSI7CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCisJCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJCS8qIDRNQiBmb3IgTGludXggS2VybmVsIEltYWdlICovCisJCQkJCXJlZyA9IDwweDAwMTAwMDAwIDB4MDA0MDAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJPKSBMaW51eCBLZXJuZWwgSW1hZ2UiOworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkA1MDAwMDAgeworCQkJCQkvKiA0TUIgZm9yIENvbXByZXNzZWQgUkZTIEltYWdlICovCisJCQkJCXJlZyA9IDwweDAwNTAwMDAwIDB4MDA0MDAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJPKSBDb21wcmVzc2VkIFJGUyBJbWFnZSI7CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCisJCQkJcGFydGl0aW9uQDkwMDAwMCB7CisJCQkJCS8qIDdNQiBmb3IgSkZGUzIgYmFzZWQgUkZTICovCisJCQkJCXJlZyA9IDwweDAwOTAwMDAwIDB4MDA3MDAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJXKSBKRkZTMiBSRlMiOworCQkJCX07CisJCQl9OworCQl9OworCisJCWRtYUBjMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHhjMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4YzEwMCAweDIwMD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZG1hLWNoYW5uZWxAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8NzYgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw3NyAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8NzggMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDc5IDI+OworCQkJfTsKKwkJfTsKKworCQlncGlvOiBncGlvLWNvbnRyb2xsZXJAZjAwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZ3BpbyI7CisJCQlyZWcgPSA8MHhmMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDcgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQljYWNoZS1zaXplID0gPDB4ODAwMDA+OyAvLyBMMiw1MTJLCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCX07CisKKwkJZG1hQDIxMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHgyMTMwMCAweDQ+OworCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEA4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjMgMj47CisJCQl9OworCQl9OworCisJCXVzYkAyMjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciI7CisJCQlyZWcgPSA8MHgyMjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDI4IDB4Mj47CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlmaXhlZC1saW5rID0gPDEgMSAxMDAwIDAgMD47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwzIDE+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MyAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAic2dtaWkiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OworCQl9OworCisJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisJCX07CisKKwkJc2RoY2lAMmUwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtZXNkaGMiLCAiZnNsLGVzZGhjIjsKKwkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDcyIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJfTsKKworCQljcnlwdG9AMzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjMy4xIiwgImZzbCxzZWMzLjAiLCAiZnNsLHNlYzIuNCIsCisJCQkJICAgICAiZnNsLHNlYzIuMiIsICJmc2wsc2VjMi4xIiwgImZzbCxzZWMyLjAiOworCQkJcmVnID0gPDB4MzAwMDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQ1IDIgNTggMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWZzbCxudW0tY2hhbm5lbHMgPSA8ND47CisJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CisJCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4YmZlPjsKKwkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKKwkJfTsKKworCQltcGljOiBwaWNANDAwMDAgeworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKKwkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7CisJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CisJCX07CisKKwkJbXNpQDQxNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLW1zaSIsICJmc2wsbXBpYy1tc2kiOworCQkJcmVnID0gPDB4NDE2MDAgMHg4MD47CisJCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8CisJCQkJMHhlMCAwCisJCQkJMHhlMSAwCisJCQkJMHhlMiAwCisJCQkJMHhlMyAwCisJCQkJMHhlNCAwCisJCQkJMHhlNSAwCisJCQkJMHhlNiAwCisJCQkJMHhlNyAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewkvL2dsb2JhbCB1dGlsaXRpZXMgYmxvY2sKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWd1dHMiOworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKwkJCWZzbCxoYXMtcnN0Y3I7CisJCX07CisJfTsKKworCXBjaTA6IHBjaWVAZmZlMDkwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwwIDB4ZmZlMDkwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDAgMHhhMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzMwMDAwIDB4MCAweDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjUgMj47CisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDAgMHgxMDAwMDA+OworCQl9OworCX07CisKKwlwY2kxOiBwY2llQGZmZTBhMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MCAweGZmZTBhMDAwIDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMCAwIDB4YzAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMyMDAwMCAweDAgMHgxMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDI2IDI+OworCQlwY2llQDAgeworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4MzQ5LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4MzQ5LmR0cwppbmRleCAyZDlmYTY4Li4wZGM5MGY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODM0OS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzgzNDkuZHRzCkBAIC0xNDYsMTggKzE0Niw2IEBACiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKIAkJCXBvcnQwOwogCQl9OwotCQkvKiBwaHkgdHlwZSAoVUxQSSwgVVRNSSwgVVRNSV9XSURFLCBTRVJJQUwpICovCi0JCXVzYkAyMzAwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJ1c2IiOwotCQkJY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciI7Ci0JCQlyZWcgPSA8MHgyMzAwMCAweDEwMDA+OwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwotCQkJZHJfbW9kZSA9ICJvdGciOwotCQkJcGh5X3R5cGUgPSAidWxwaSI7Ci0JCX07CiAKIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMjc3LDE1ICsyNjUsNTUgQEAKIAkJfTsKIAl9OwogCisJbG9jYWxidXNAZTAwMDUwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktbG9jYWxidXMiLCAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweGUwMDA1MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8NzcgMHg4PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCXJhbmdlcyA9IDwweDAgMHgwIDB4ZmY4MDAwMDAgMHgwMDgwMDAwMAkJLyogOE1CIEZsYXNoICovCisJCQkgIDB4MSAweDAgMHhmODAwMDAwMCAweDAwMDAyMDAwCQkvKiA4S0IgRUVQUk9NICovCisJCQkgIDB4MiAweDAgMHgxMDAwMDAwMCAweDA0MDAwMDAwCQkvKiA2NE1CIFNEUkFNICovCisJCQkgIDB4MyAweDAgMHgxMDAwMDAwMCAweDA0MDAwMDAwPjsJLyogNjRNQiBTRFJBTSAqLworCisJCWZsYXNoQDAsMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJpbnRlbCwyOEY2NDBKM0EiLCAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDAgMHgwIDB4ODAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAwNDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkA0MDAwMCB7CisJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJcmVnID0gPDB4MDAwNDAwMDAgMHgwMDZjMDAwMD47CisJCQl9OworCisJCQlwYXJ0aXRpb25ANzAwMDAwIHsKKwkJCQlsYWJlbCA9ICJsZWdhY3kgdS1ib290IjsKKwkJCQlyZWcgPSA8MHgwMDcwMDAwMCAweDAwMTAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCX07CisJfTsKKwogCXBjaTA6IHBjaUBlMDAwODUwMCB7CiAJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OwogCQlpbnRlcnJ1cHQtbWFwID0gPAogCiAJCQkJLyogSURTRUwgMHgxMSAqLwotCQkJCSAweDg4MDAgMHgwIDB4MCAweDEgJmlwaWMgMjAgMHg4Ci0JCQkJIDB4ODgwMCAweDAgMHgwIDB4MiAmaXBpYyAyMSAweDgKLQkJCQkgMHg4ODAwIDB4MCAweDAgMHgzICZpcGljIDIyIDB4OAotCQkJCSAweDg4MDAgMHgwIDB4MCAweDQgJmlwaWMgMjMgMHg4PjsKKwkJCQkgMHg4ODAwIDB4MCAweDAgMHgxICZpcGljIDQ4IDB4OAorCQkJCSAweDg4MDAgMHgwIDB4MCAweDIgJmlwaWMgMTcgMHg4CisJCQkJIDB4ODgwMCAweDAgMHgwIDB4MyAmaXBpYyAxOCAweDgKKwkJCQkgMHg4ODAwIDB4MCAweDAgMHg0ICZpcGljIDE5IDB4OD47CiAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCWludGVycnVwdHMgPSA8MHg0MiAweDg+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NjAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NjAuZHRzCmluZGV4IDIzOWQ1N2EuLjllMTNlZDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTYwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU2MC5kdHMKQEAgLTMwMyw3ICszMDMsNiBAQAogCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjAtZ3V0cyI7CiAJCQlyZWcgPSA8MHhlMDAwMCAweDEwMDA+OwotCQkJZnNsLGhhcy1yc3RjcjsKIAkJfTsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9ta3RyZWUuYyBiL2FyY2gvcG93ZXJwYy9ib290L21rdHJlZS5jCmluZGV4IGMyYmFhZTAuLmUyYWUyNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L21rdHJlZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L21rdHJlZS5jCkBAIC0zNiw3ICszNiw3IEBACiB9IGJvb3RfYmxvY2tfdDsKIAogI2RlZmluZSBJTUdCTEsJNTEyCi1jaGFyCXRtcGJ1ZltJTUdCTEtdOwordW5zaWduZWQgaW50CXRtcGJ1ZltJTUdCTEsgLyBzaXplb2YodW5zaWduZWQgaW50KV07CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CkBAIC05NSwxMyArOTUsMTMgQEAKIAogCS8qIEFzc3VtZSB6SW1hZ2UgaXMgYW4gRUxGIGZpbGUsIGFuZCBza2lwIHRoZSA2NEsgaGVhZGVyLgogCSovCi0JaWYgKHJlYWQoaW5fZmQsIHRtcGJ1ZiwgSU1HQkxLKSAhPSBJTUdCTEspIHsKKwlpZiAocmVhZChpbl9mZCwgdG1wYnVmLCBzaXplb2YodG1wYnVmKSkgIT0gc2l6ZW9mKHRtcGJ1ZikpIHsKIAkJZnByaW50ZihzdGRlcnIsICIlcyBpcyB0b28gc21hbGwgdG8gYmUgYW4gRUxGIGltYWdlXG4iLAogCQkJCWFyZ3ZbMV0pOwogCQlleGl0KDQpOwogCX0KIAotCWlmICgoKih1bnNpZ25lZCBpbnQgKil0bXBidWYpICE9IGh0b25sKDB4N2Y0NTRjNDYpKSB7CisJaWYgKHRtcGJ1ZlswXSAhPSBodG9ubCgweDdmNDU0YzQ2KSkgewogCQlmcHJpbnRmKHN0ZGVyciwgIiVzIGlzIG5vdCBhbiBFTEYgaW1hZ2VcbiIsIGFyZ3ZbMV0pOwogCQlleGl0KDQpOwogCX0KQEAgLTEyMSwxMSArMTIxLDExIEBACiAJfQogCiAJd2hpbGUgKG5ibGtzLS0gPiAwKSB7Ci0JCWlmIChyZWFkKGluX2ZkLCB0bXBidWYsIElNR0JMSykgPCAwKSB7CisJCWlmIChyZWFkKGluX2ZkLCB0bXBidWYsIHNpemVvZih0bXBidWYpKSA8IDApIHsKIAkJCXBlcnJvcigiekltYWdlIHJlYWQiKTsKIAkJCWV4aXQoNSk7CiAJCX0KLQkJY3AgPSAodW5zaWduZWQgaW50ICopdG1wYnVmOworCQljcCA9IHRtcGJ1ZjsKIAkJZm9yIChpID0gMDsgaSA8IHNpemVvZih0bXBidWYpIC8gc2l6ZW9mKHVuc2lnbmVkIGludCk7IGkrKykKIAkJCWNrc3VtICs9ICpjcCsrOwogCQlpZiAod3JpdGUob3V0X2ZkLCB0bXBidWYsIHNpemVvZih0bXBidWYpKSAhPSBzaXplb2YodG1wYnVmKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvcHBjYm9vdC1ob3Rmb290LmggYi9hcmNoL3Bvd2VycGMvYm9vdC9wcGNib290LWhvdGZvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTNlODBiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvcHBjYm9vdC1ob3Rmb290LmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIFUtYm9vdHMgKk9OTFkqLgorICogUGxlYXNlIGRvIG5vdCBpbWl0YXRlIG9yIGV4dGVuZCB0aGlzLgorICovCisKKy8qIAorICogVW5mb3J0dW5hdGVseSwgdGhlIEVTVGVlbSBIb3Rmb290IGJvYXJkIHVzZXMgYSBtYW5nbGVkIHZlcnNpb24gb2YgCisgKiBwcGNib290LmggZm9yIGhpc3RvcmljYWwgcmVhc29ucywgYW5kIGluIHRoZSBpbnRlcmVzdCBvZiBoYXZpbmcgYSAKKyAqIG1haW5saW5lIGtlcm5lbCBib290IG9uIHRoZSBwcm9kdWN0aW9uIGJvYXJkK2Jvb3Rsb2FkZXIsIHRoaXMgd2FzIHRoZSAKKyAqIGxlYXN0LW9mZmVuc2l2ZSBzb2x1dGlvbi4gIFBsZWFzZSBkaXJlY3QgYWxsIGZsYW1lcyB0bzoKKyAqCisgKiAgU29sb21vbiBQZWFjaHkgPHNvbG9tb25AbGludXgtd2xhbi5jb20+CisgKgorICogKFRoaXMgaGVhZGVyIGlzIGlkZW50aWNhbCB0byBwcGNib290LmggZXhjZXB0IGZvciB0aGUgCisgKiAgVEFSR0VUX0hPVEZPT1QgYml0cykKKyAqLworCisvKgorICogKEMpIENvcHlyaWdodCAyMDAwLCAyMDAxCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19QUENCT09UX0hfXworI2RlZmluZSBfX1BQQ0JPT1RfSF9fCisKKy8qCisgKiBCb2FyZCBpbmZvcm1hdGlvbiBwYXNzZWQgdG8ga2VybmVsIGZyb20gUFBDQm9vdAorICoKKyAqIGluY2x1ZGUvYXNtLXBwYy9wcGNib290LmgKKyAqLworCisjaW5jbHVkZSAidHlwZXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgYmRfaW5mbyB7CisJdW5zaWduZWQgbG9uZwliaV9tZW1zdGFydDsJLyogc3RhcnQgb2YgRFJBTSBtZW1vcnkgKi8KKwl1bnNpZ25lZCBsb25nCWJpX21lbXNpemU7CS8qIHNpemUJIG9mIERSQU0gbWVtb3J5IGluIGJ5dGVzICovCisJdW5zaWduZWQgbG9uZwliaV9mbGFzaHN0YXJ0OwkvKiBzdGFydCBvZiBGTEFTSCBtZW1vcnkgKi8KKwl1bnNpZ25lZCBsb25nCWJpX2ZsYXNoc2l6ZTsJLyogc2l6ZQkgb2YgRkxBU0ggbWVtb3J5ICovCisJdW5zaWduZWQgbG9uZwliaV9mbGFzaG9mZnNldDsgLyogcmVzZXJ2ZWQgYXJlYSBmb3Igc3RhcnR1cCBtb25pdG9yICovCisJdW5zaWduZWQgbG9uZwliaV9zcmFtc3RhcnQ7CS8qIHN0YXJ0IG9mIFNSQU0gbWVtb3J5ICovCisJdW5zaWduZWQgbG9uZwliaV9zcmFtc2l6ZTsJLyogc2l6ZQkgb2YgU1JBTSBtZW1vcnkgKi8KKyNpZiBkZWZpbmVkKFRBUkdFVF84eHgpIHx8IGRlZmluZWQoVEFSR0VUX0NQTTIpIHx8IGRlZmluZWQoVEFSR0VUXzg1eHgpIHx8XAorCWRlZmluZWQoVEFSR0VUXzgzeHgpCisJdW5zaWduZWQgbG9uZwliaV9pbW1yX2Jhc2U7CS8qIGJhc2Ugb2YgSU1NUiByZWdpc3RlciAqLworI2VuZGlmCisjaWYgZGVmaW5lZChUQVJHRVRfUFBDX01QQzUyeHgpCisJdW5zaWduZWQgbG9uZyAgIGJpX21iYXJfYmFzZTsgICAvKiBiYXNlIG9mIGludGVybmFsIHJlZ2lzdGVycyAqLworI2VuZGlmCisJdW5zaWduZWQgbG9uZwliaV9ib290ZmxhZ3M7CS8qIGJvb3QgLyByZWJvb3QgZmxhZyAoZm9yIEx5bnhPUykgKi8KKwl1bnNpZ25lZCBsb25nCWJpX2lwX2FkZHI7CS8qIElQIEFkZHJlc3MgKi8KKwl1bnNpZ25lZCBjaGFyCWJpX2VuZXRhZGRyWzZdOwkvKiBFdGhlcm5ldCBhZGRyZXNzICovCisjaWYgZGVmaW5lZChUQVJHRVRfSE9URk9PVCkKKwkvKiBzZWNvbmQgb25ib2FyZCBldGhlcm5ldCBwb3J0ICovCisJdW5zaWduZWQgY2hhcgliaV9lbmV0MWFkZHJbNl07CisjZGVmaW5lIEhBVkVfRU5FVDFBRERSCisjZW5kaWYgLyogVEFSR0VUX0hPT1RGT09UICovCisJdW5zaWduZWQgc2hvcnQJYmlfZXRoc3BlZWQ7CS8qIEV0aGVybmV0IHNwZWVkIGluIE1icHMgKi8KKwl1bnNpZ25lZCBsb25nCWJpX2ludGZyZXE7CS8qIEludGVybmFsIEZyZXEsIGluIE1IeiAqLworCXVuc2lnbmVkIGxvbmcJYmlfYnVzZnJlcTsJLyogQnVzIEZyZXEsIGluIE1IeiAqLworI2lmIGRlZmluZWQoVEFSR0VUX0NQTTIpCisJdW5zaWduZWQgbG9uZwliaV9jcG1mcmVxOwkvKiBDUE1fQ0xLIEZyZXEsIGluIE1IeiAqLworCXVuc2lnbmVkIGxvbmcJYmlfYnJnZnJlcTsJLyogQlJHX0NMSyBGcmVxLCBpbiBNSHogKi8KKwl1bnNpZ25lZCBsb25nCWJpX3NjY2ZyZXE7CS8qIFNDQ19DTEsgRnJlcSwgaW4gTUh6ICovCisJdW5zaWduZWQgbG9uZwliaV92Y287CQkvKiBWQ08gT3V0IGZyb20gUExMLCBpbiBNSHogKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoVEFSR0VUX1BQQ19NUEM1Mnh4KQorCXVuc2lnbmVkIGxvbmcgICBiaV9pcGJmcmVxOyAgICAgLyogSVBCIEJ1cyBGcmVxLCBpbiBNSHogKi8KKwl1bnNpZ25lZCBsb25nICAgYmlfcGNpZnJlcTsgICAgIC8qIFBDSSBCdXMgRnJlcSwgaW4gTUh6ICovCisjZW5kaWYKKwl1bnNpZ25lZCBsb25nCWJpX2JhdWRyYXRlOwkvKiBDb25zb2xlIEJhdWRyYXRlICovCisjaWYgZGVmaW5lZChUQVJHRVRfNHh4KQorCXVuc2lnbmVkIGNoYXIJYmlfc192ZXJzaW9uWzRdOwkvKiBWZXJzaW9uIG9mIHRoaXMgc3RydWN0dXJlICovCisJdW5zaWduZWQgY2hhcgliaV9yX3ZlcnNpb25bMzJdOwkvKiBWZXJzaW9uIG9mIHRoZSBST00gKElCTSkgKi8KKwl1bnNpZ25lZCBpbnQJYmlfcHJvY2ZyZXE7CS8qIENQVSAoSW50ZXJuYWwpIEZyZXEsIGluIEh6ICovCisJdW5zaWduZWQgaW50CWJpX3BsYl9idXNmcmVxOwkvKiBQTEIgQnVzIHNwZWVkLCBpbiBIeiAqLworCXVuc2lnbmVkIGludAliaV9wY2lfYnVzZnJlcTsJLyogUENJIEJ1cyBzcGVlZCwgaW4gSHogKi8KKwl1bnNpZ25lZCBjaGFyCWJpX3BjaV9lbmV0YWRkcls2XTsJLyogUENJIEV0aGVybmV0IE1BQyBhZGRyZXNzICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKFRBUkdFVF9IT1RGT09UKQorCXVuc2lnbmVkIGludCAgICAgYmlfcGxsb3V0YV9mcmVxOyAgICAgICAvKiBQTEwgT1VUQSBzcGVlZCwgaW4gSHogKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoVEFSR0VUX0hZTU9EKQorCWh5bW9kX2NvbmZfdAliaV9oeW1vZF9jb25mOwkvKiBoeW1vZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKFRBUkdFVF9FVkI2NDI2MCkgfHwgZGVmaW5lZChUQVJHRVRfNDA1RVApIHx8IGRlZmluZWQoVEFSR0VUXzQ0eCkgfHwgXAorCWRlZmluZWQoVEFSR0VUXzg1eHgpIHx8CWRlZmluZWQoVEFSR0VUXzgzeHgpIHx8IGRlZmluZWQoVEFSR0VUX0hBU19FVEgxKQorCS8qIHNlY29uZCBvbmJvYXJkIGV0aGVybmV0IHBvcnQgKi8KKwl1bnNpZ25lZCBjaGFyCWJpX2VuZXQxYWRkcls2XTsKKyNkZWZpbmUgSEFWRV9FTkVUMUFERFIKKyNlbmRpZgorI2lmIGRlZmluZWQoVEFSR0VUX0VWQjY0MjYwKSB8fCBkZWZpbmVkKFRBUkdFVF80NDBHWCkgfHwgXAorICAgIGRlZmluZWQoVEFSR0VUXzg1eHgpIHx8IGRlZmluZWQoVEFSR0VUX0hBU19FVEgyKQorCS8qIHRoaXJkIG9uYm9hcmQgZXRoZXJuZXQgcG9ydHMgKi8KKwl1bnNpZ25lZCBjaGFyCWJpX2VuZXQyYWRkcls2XTsKKyNkZWZpbmUgSEFWRV9FTkVUMkFERFIKKyNlbmRpZgorI2lmIGRlZmluZWQoVEFSR0VUXzQ0MEdYKSB8fCBkZWZpbmVkKFRBUkdFVF9IQVNfRVRIMykKKwkvKiBmb3VydGggb25ib2FyZCBldGhlcm5ldCBwb3J0cyAqLworCXVuc2lnbmVkIGNoYXIJYmlfZW5ldDNhZGRyWzZdOworI2RlZmluZSBIQVZFX0VORVQzQUREUgorI2VuZGlmCisjaWYgZGVmaW5lZChUQVJHRVRfSE9URk9PVCkKKyAgICAgICAgaW50ICAgICAgICAgICAgIGJpX3BoeW51bVsyXTsgICAgICAgICAgIC8qIERldGVybWluZXMgcGh5IG1hcHBpbmcgKi8KKyAgICAgICAgaW50ICAgICAgICAgICAgIGJpX3BoeW1vZGVbMl07ICAgICAgICAgIC8qIERldGVybWluZXMgcGh5IG1vZGUgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoVEFSR0VUXzR4eCkKKwl1bnNpZ25lZCBpbnQJYmlfb3BiZnJlcTsJCS8qIE9CIGNsb2NrIGluIEh6ICovCisJaW50CQliaV9paWNfZmFzdFsyXTsJCS8qIFVzZSBmYXN0IGkyYyBtb2RlICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKFRBUkdFVF80NDBHWCkKKwlpbnQJCWJpX3BoeW51bVs0XTsJCS8qIHBoeSBtYXBwaW5nICovCisJaW50CQliaV9waHltb2RlWzRdOwkJLyogcGh5IG1vZGUgKi8KKyNlbmRpZgorfSBiZF90OworCisjZGVmaW5lIGJpX3RiZnJlcQliaV9pbnRmcmVxCisKKyNlbmRpZgkvKiBfX1BQQ0JPT1RfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgppbmRleCA0ZGI0ODdkLi5hYzllOWE1IDEwMDc1NQotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKQEAgLTQ2LDYgKzQ2LDcgQEAKICMgZGlyZWN0b3J5IGZvciBvYmplY3QgYW5kIG90aGVyIGZpbGVzIHVzZWQgYnkgdGhpcyBzY3JpcHQKIG9iamVjdD1hcmNoL3Bvd2VycGMvYm9vdAogb2JqYmluPSRvYmplY3QKK2R0Yz1zY3JpcHRzL2R0Yy9kdGMKIAogIyBkaXJlY3RvcnkgZm9yIHdvcmtpbmcgZmlsZXMKIHRtcGRpcj0uCkBAIC0xMjQsNyArMTI1LDcgQEAKICAgICBpZiBbIC16ICIkZHRiIiBdOyB0aGVuCiAJZHRiPSIkcGxhdGZvcm0uZHRiIgogICAgIGZpCi0gICAgJG9iamVjdC9kdGMgLU8gZHRiIC1vICIkZHRiIiAtYiAwICIkZHRzIgorICAgICRkdGMgLU8gZHRiIC1vICIkZHRiIiAtYiAwICIkZHRzIgogZmkKIAogaWYgWyAteiAiJGtlcm5lbCIgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2tpbGF1ZWFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2tpbGF1ZWFfZGVmY29uZmlnCmluZGV4IDg2NTcyNWUuLjlhMDVlYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9raWxhdWVhX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2lsYXVlYV9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTQgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzcKLSMgV2VkIEp1biAgMyAxMDoxODoxNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0CisjIFdlZCBKdWwgMjkgMTM6Mjg6MzcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi0jIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKIENPTkZJR180MHg9eQpAQCAtMzIsMTEgKzMyLDExIEBACiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01Nyw2ICs1Nyw3IEBACiBDT05GSUdfUFBDX0RDUj15CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTEwOCw3ICsxMDksNiBAQAogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTEyMSw5ICsxMjEsMTYgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKQEAgLTEzNyw2ICsxNDQsMTEgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ5LDcgKzE2MSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjIwLDYgKzIzMiw3IEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQpAQCAtMjM5LDkgKzI1Miw5IEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDQsNiArMzU3LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zOTMsOSArNDA3LDggQEAKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9bQotQ09ORklHX01URF9CTE9DSz1tCi0jIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldApAQCAtNDUyLDcgKzQ2NSwxNyBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0VDQ19TTUM9eQorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKK0NPTkZJR19NVERfTkFORF9OREZDPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwpAQCAtNDY1LDYgKzQ4OCw3IEBACiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNTA0LDE0ICs1MjgsMTcgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTQ2LDYgKzU3Myw3IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKQEAgLTYyMSwyMCArNjQ5LDE1MCBAQAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19JQk1fSUlDPXkKKyMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTc1PXkKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjQ5LDI0ICs4MDcsMTUgQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTY5MSwxMCArODQwLDY5IEBACiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTcwOCwxMSArOTE2LDEyIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC04MTgsNiArMTAyNyw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTg0OCw2ICsxMDU4LDkgQEAKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtODU5LDcgKzEwNzIsNiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldApAQCAtODczLDE2ICsxMDg1LDE1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKQEAgLTg5MSw2ICsxMTAyLDkgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZwppbmRleCBmN2ZkMzJjLi42Zjk3NmI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBUdWUgSmFuIDIwIDA4OjIyOjMxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzUKKyMgVGh1IEF1ZyAxMyAxNDoxNDowNyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKQEAgLTMxLDE1ICszMSwxNiBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUzLDExICs1NCwxNCBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTcxLDkgKzc1LDE5IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NCw4ICs5OCwxMiBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQpAQCAtOTUsMjMgKzExMywzMCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTE5LDYgKzE0NCwxMiBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMzAsOCArMTYxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0NywxMSArMTc3LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKIApAQCAtMTcyLDYgKzE5Nyw3IEBACiBDT05GSUdfQVJDSEVTPXkKICMgQ09ORklHX0NBTllPTkxBTkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dMQUNJRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVEV09PRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAogQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQpAQCAtMjE0LDYgKzI0MCw3IEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQpAQCAtMjMzLDEwICsyNjAsMTQgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19TVERCSU5VVElMUz15CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKQEAgLTI2MSw2ICsyOTIsNyBAQAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldApAQCAtMjc4LDE0ICszMTAsMTIgQEAKIENPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAogQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKIENPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAogQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zMzUsNiArMzY1LDggQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM0Nyw3ICszNzksNiBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKQEAgLTM3MSw4ICs0MDIsOTIgQEAKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQogQ09ORklHX1BST0NfRVZFTlRTPXkKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTQxMiw3ICs1MjcsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC00MzMsNiArNTUyLDggQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKQEAgLTQ1MSw2ICs1NzIsNyBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CkBAIC00NjEsNyArNTgzLDYgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTUzMywxMyArNjU0LDE0MyBAQAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0lCTV9JSUM9eQorIyBDT05GSUdfSTJDX01QQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19BRDc0MTQ9eQorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldApAQCAtNTU2LDI0ICs4MDcsMTUgQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC02MDAsNyArODQyLDEyIEBACiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTYxNCwxMSArODYxLDEyIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC02MjgsNiArODc2LDExIEBACiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtNjYwLDYgKzkxMywxNyBAQAogIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQogIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CkBAIC02NzAsNiArOTM0LDcgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtNjgxLDcgKzk0Niw2IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTY5Nyw2ICs5NjEsNyBAQAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15CiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTcxMSwxMSArOTc2LDE0IEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTczMyw2ICsxMDAxLDkgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CkBAIC03NDMsNiArMTAxNCw5IEBACiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTc1NCw3ICsxMDI4LDYgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKQEAgLTc2MiwyNyArMTAzNSwzNiBAQAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcKaW5kZXggNWU4NTQxMi4uYjMxMmIxNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMwotIyBNb24gRmViICAyIDEzOjEzOjA0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKKyMgV2VkIEp1bCAyOSAxNzoyNzoyMCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLSMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKQEAgLTMxLDE1ICszMSwxNiBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUzLDExICs1NCwxNCBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAogQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0RDUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTcxLDYgKzc1LDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKQEAgLTkzLDggKzk4LDEyIEBACiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CkBAIC0xMDQsMjMgKzExMywzMCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTI4LDYgKzE0NCwxMiBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMzksOCArMTYxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3Niw2ICsxOTcsNyBAQAogIyBDT05GSUdfQVJDSEVTIGlzIG5vdCBzZXQKIENPTkZJR19DQU5ZT05MQU5EUz15CiAjIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAogIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAogIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0NHhfU0lNUExFPXkKQEAgLTIxOCw2ICsyNDAsNyBAQAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKQEAgLTIzNywxMCArMjYwLDE0IEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfU1REQklOVVRJTFM9eQogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0NNRExJTkVfQk9PTD15CkBAIC0yNjUsNiArMjkyLDcgQEAKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKQEAgLTI4MiwxNCArMzEwLDEyIEBACiBDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCiBDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKIENPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzM5LDYgKzM2NSw4IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNTEsNyArMzc5LDYgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CkBAIC0zNzUsNyArNDAyLDEwMSBAQAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfUFJPQ19FVkVOVFM9eQotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9FQ0NfU01DPXkKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CitDT05GSUdfTVREX05BTkRfTkRGQz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldApAQCAtNDE4LDcgKzUzOSwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTQzOSw2ICs1NjQsOCBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JQk1fTkVXX0VNQUM9eQpAQCAtNDU3LDYgKzU4NCw3IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKQEAgLTQ2Nyw3ICs1OTUsNiBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNTQyLDcgKzY2OSw2IEBACiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC02MDgsMTQgKzczNCwxNyBAQAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTY0MCw2ICs3NjksNyBAQAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNjU0LDExICs3ODQsMTQgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKQEAgLTY2Niw2ICs3OTksNyBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtNzAwLDI0ICs4MzQsOSBAQAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTc1OSw2ICs4NzgsNyBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKQEAgLTc2Nyw5ICs4ODcsOSBAQAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CkBAIC03ODksMTEgKzkwOSwxMSBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX0xJQlVTVUFMPXkKIApAQCAtODIxLDcgKzk0MSw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtODM3LDYgKzk1Niw3IEBACiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTg0NCw5ICs5NjQsNzAgQEAKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTTQxVDgwPXkKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwX1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTg2MCwxMSArMTA0MSwxMiBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtODc0LDYgKzEwNTYsMTEgQEAKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CkBAIC05MDYsNiArMTA5Myw3IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTkxNiw2ICsxMTA0LDcgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtOTI3LDcgKzExMTYsNiBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC05NDEsOCArMTEyOSw0OCBAQAogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtOTU3LDExICsxMTg1LDEzIEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC05NzksNiArMTIwOSw5IEBACiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAogQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldApAQCAtOTg5LDYgKzEyMjIsOSBAQAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMDAwLDcgKzEyMzYsNiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldApAQCAtMTAwOCwyNyArMTI0MywzNiBAQAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2VpZ2VyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9laWdlcl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3ZjNiZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9laWdlcl9kZWZjb25maWcKQEAgLTAsMCArMSwxMjUyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2CisjIFdlZCBBdWcgMTkgMTM6MDY6NTAgMjAwOQorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKK0NPTkZJR180NHg9eQorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfNHh4PXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfUFRFXzY0QklUPXkKK0NPTkZJR19QSFlTXzY0QklUPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUj15CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCREFGPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTTQ0MEVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUVVPSUEgaXMgbm90IHNldAorIyBDT05GSUdfVEFJU0hBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAorIyBDT05GSUdfUkFJTklFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0CisjIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAorQ09ORklHX0VJR0VSPXkKKyMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfUFBDNDR4X1NJTVBMRT15CisjIENPTkZJR19QUEM0eHhfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfNDYwU1g9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAorQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1NUREJJTlVUSUxTPXkKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9IiIKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHXzR4eF9TT0M9eQorQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CitDT05GSUdfUENJRVBPUlRCVVM9eQorQ09ORklHX1BDSUVBRVI9eQorIyBDT05GSUdfUENJRV9FQ1JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSUVBRVJfSU5KRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCitDT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9eQorQ09ORklHX1BST0NfRVZFTlRTPXkKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfRUNDX1NNQz15CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorQ09ORklHX01URF9OQU5EX05ERkM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU0FTX0FUVFJTPXkKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX0ZVU0lPTj15CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CitDT05GSUdfRlVTSU9OX1NBUz15CitDT05GSUdfRlVTSU9OX01BWF9TR0U9MTI4CisjIENPTkZJR19GVVNJT05fQ1RMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CitDT05GSUdfSTJPPXkKK0NPTkZJR19JMk9fTENUX05PVElGWV9PTl9DSEFOR0VTPXkKK0NPTkZJR19JMk9fRVhUX0FEQVBURUM9eQorIyBDT05GSUdfSTJPX0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JMk9fQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyT19CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JMk9fU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19JMk9fUFJPQyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCitDT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAorIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15CitDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfVEFIPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQ9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDBFPXkKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9MTF9URU1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfSUJNX0lJQz15CisjIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfREVCVUdfQ09SRT15CitDT05GSUdfSTJDX0RFQlVHX0FMR089eQorQ09ORklHX0kyQ19ERUJVR19CVVM9eQorQ09ORklHX0kyQ19ERUJVR19DSElQPXkKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19ETUFERVZJQ0VTPXkKKworIworIyBETUEgRGV2aWNlcworIworIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRD15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORz15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPXkKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKK0NPTkZJR19DUllQVE9fQ1JZUFREPXkKK0NPTkZJR19DUllQVE9fQVVUSEVOQz15CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCitDT05GSUdfQ1JZUFRPX0NDTT15CitDT05GSUdfQ1JZUFRPX0dDTT15CitDT05GSUdfQ1JZUFRPX1NFUUlWPXkKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19DVFI9eQorQ09ORklHX0NSWVBUT19DVFM9eQorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19MUlc9eQorQ09ORklHX0NSWVBUT19QQ0JDPXkKK0NPTkZJR19DUllQVE9fWFRTPXkKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPXkKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDQ9eQorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKK0NPTkZJR19DUllQVE9fU0hBMjU2PXkKK0NPTkZJR19DUllQVE9fU0hBNTEyPXkKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz15CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND15CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPXkKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZwppbmRleCBhNTkyYjVlLi4zYTY4Zjg2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNQorIyBUdWUgQXVnIDExIDE5OjU3OjUxIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtNDIwLDcgKzQyMCw5MCBAQAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQogQ09ORklHX09GX0kyQz15CiBDT05GSUdfT0ZfTURJTz15CkBAIC00MzYsNiArNTE5LDcgQEAKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CkBAIC00NjgsOSArNTUyLDM4IEBACiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CkBAIC01NzgsMTEgKzY5MSwyMSBAQAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldApAQCAtNjMzLDkgKzc1Niw5IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTcwMCw2ICs4MjMsNyBAQAogIwogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwpAQCAtODE0LDYgKzkzOCwxMSBAQAogIwogIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwpAQCAtODU2LDEyICs5ODUsMTM0IEBACiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCisjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCiAjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisKKyMKICMgU3BlY2lhbCBISUQgZHJpdmVycwogIwotIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfRlNMPXkKK0NPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC04ODIsOSArMTEzMywxNCBAQAogIwogIyBGaWxlIHN5c3RlbXMKICMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKQEAgLTk0MCw2ICsxMTk2LDcgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CkBAIC05NzcsNyArMTIzNCw0NiBAQAogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETE0gaXMgbm90IHNldAogIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnCmluZGV4IGU5NDkxYzEuLjMwYjY4YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1MSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM1CisjIEZyaSBBdWcgIDcgMDg6MTk6MTUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNTgsNiArMTU4LDcgQEAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKIENPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCkBAIC01MDYsNiArNTA3LDcgQEAKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfR1BJTz15CitDT05GSUdfT0ZfSTJDPXkKIENPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQpAQCAtNTgyLDcgKzU4NCw4IEBACiAjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfRklYRURfUEhZPXkKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTURJT19CSVRCQU5HPXkKKyMgQ09ORklHX01ESU9fR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogIyBDT05GSUdfTUFDRSBpcyBub3Qgc2V0CkBAIC02MDgsOCArNjExLDggQEAKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15Ci0jIENPTkZJR19GU19FTkVUX0hBU19GQ0MgaXMgbm90IHNldAotIyBDT05GSUdfRlNfRU5FVF9NRElPX0ZDQyBpcyBub3Qgc2V0CitDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKK0NPTkZJR19GU19FTkVUX01ESU9fRkNDPXkKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CkBAIC02ODAsNyArNjgzLDY4IEBACiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIENPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIE1hYyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BPV0VSTUFDIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfQ1BNPXkKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CiAKICMKQEAgLTY5OSw2ICs3NjMsOSBAQAogIwogIyBJMkMgR1BJTyBleHBhbmRlcnM6CiAjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CiAKICMKICMgUENJIEdQSU8gZXhwYW5kZXJzOgpAQCAtNzI3LDcgKzc5NCwxNCBAQAogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwppbmRleCBhZGE1OTU4Li5lZTZhY2M2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZwpAQCAtMjAzLDYgKzIwMyw3IEBACiBDT05GSUdfTVBDODV4eF9NRFM9eQogQ09ORklHX01QQzg1MzZfRFM9eQogQ09ORklHX01QQzg1eHhfRFM9eQorQ09ORklHX01QQzg1eHhfUkRCPXkKIENPTkZJR19TT0NSQVRFUz15CiBDT05GSUdfS1NJODU2MD15CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYWdwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYWdwLmgKaW5kZXggODY0NTVjNC4uNDE2ZTEyYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2FncC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hZ3AuaApAQCAtOCwxMCArOCw2IEBACiAjZGVmaW5lIHVubWFwX3BhZ2VfZnJvbV9hZ3AocGFnZSkKICNkZWZpbmUgZmx1c2hfYWdwX2NhY2hlKCkgbWIoKQogCi0vKiBDb252ZXJ0IGEgcGh5c2ljYWwgYWRkcmVzcyB0byBhbiBhZGRyZXNzIHN1aXRhYmxlIGZvciB0aGUgR0FSVC4gKi8KLSNkZWZpbmUgcGh5c190b19nYXJ0KHgpICh4KQotI2RlZmluZSBnYXJ0X3RvX3BoeXMoeCkgKHgpCi0KIC8qIEdBVFQgYWxsb2NhdGlvbi4gUmV0dXJucy9hY2NlcHRzIEdBVFQga2VybmVsIHZpcnR1YWwgYWRkcmVzcy4gKi8KICNkZWZpbmUgYWxsb2NfZ2F0dF9wYWdlcyhvcmRlcikJCVwKIAkoKGNoYXIgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIChvcmRlcikpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDg5N2VhZGUuLjU2ZjJmMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTU2LDE3NCArNTYsMTAyIEBACiAjZGVmaW5lIEJJVE9QX1dPUkQobnIpCQkoKG5yKSAvIEJJVFNfUEVSX0xPTkcpCiAjZGVmaW5lIEJJVE9QX0xFX1NXSVpaTEUJKChCSVRTX1BFUl9MT05HLTEpICYgfjB4NykKIAorLyogTWFjcm8gZm9yIGdlbmVyYXRpbmcgdGhlICoqKl9iaXRzKCkgZnVuY3Rpb25zICovCisjZGVmaW5lIERFRklORV9CSVRPUChmbiwgb3AsIHByZWZpeCwgcG9zdGZpeCkJXAorc3RhdGljIF9faW5saW5lX18gdm9pZCBmbih1bnNpZ25lZCBsb25nIG1hc2ssCVwKKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqX3ApCVwKK3sJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBvbGQ7CQkJXAorCXVuc2lnbmVkIGxvbmcgKnAgPSAodW5zaWduZWQgbG9uZyAqKV9wOwlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCVwKKwlwcmVmaXgJCQkJCVwKKyIxOiIJUFBDX0xMQVJYICIlMCwwLCUzXG4iCQkJXAorCXN0cmluZ2lmeV9pbl9jKG9wKSAiJTAsJTAsJTJcbiIJCVwKKwlQUEM0MDVfRVJSNzcoMCwlMykJCQlcCisJUFBDX1NUTENYICIlMCwwLCUzXG4iCQkJXAorCSJibmUtIDFiXG4iCQkJCVwKKwlwb3N0Zml4CQkJCQlcCisJOiAiPSZyIiAob2xkKSwgIittIiAoKnApCQlcCisJOiAiciIgKG1hc2spLCAiciIgKHApCQkJXAorCTogImNjIiwgIm1lbW9yeSIpOwkJCVwKK30KKworREVGSU5FX0JJVE9QKHNldF9iaXRzLCBvciwgIiIsICIiKQorREVGSU5FX0JJVE9QKGNsZWFyX2JpdHMsIGFuZGMsICIiLCAiIikKK0RFRklORV9CSVRPUChjbGVhcl9iaXRzX3VubG9jaywgYW5kYywgTFdTWU5DX09OX1NNUCwgIiIpCitERUZJTkVfQklUT1AoY2hhbmdlX2JpdHMsIHhvciwgIiIsICIiKQorCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCXVuc2lnbmVkIGxvbmcgb2xkOwotCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVE9QX01BU0sobnIpOwotCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCVBQQ19MTEFSWCAiJTAsMCwlMwkjIHNldF9iaXRcbiIKLQkib3IJJTAsJTAsJTJcbiIKLQlQUEM0MDVfRVJSNzcoMCwlMykKLQlQUENfU1RMQ1ggIiUwLDAsJTNcbiIKLQkiYm5lLQkxYiIKLQk6ICI9JnIiIChvbGQpLCAiK20iICgqcCkKLQk6ICJyIiAobWFzayksICJyIiAocCkKLQk6ICJjYyIgKTsKKwlzZXRfYml0cyhCSVRPUF9NQVNLKG5yKSwgYWRkciArIEJJVE9QX1dPUkQobnIpKTsKIH0KIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBjbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCXVuc2lnbmVkIGxvbmcgb2xkOwotCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVE9QX01BU0sobnIpOwotCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCVBQQ19MTEFSWCAiJTAsMCwlMwkjIGNsZWFyX2JpdFxuIgotCSJhbmRjCSUwLCUwLCUyXG4iCi0JUFBDNDA1X0VSUjc3KDAsJTMpCi0JUFBDX1NUTENYICIlMCwwLCUzXG4iCi0JImJuZS0JMWIiCi0JOiAiPSZyIiAob2xkKSwgIittIiAoKnApCi0JOiAiciIgKG1hc2spLCAiciIgKHApCi0JOiAiY2MiICk7CisJY2xlYXJfYml0cyhCSVRPUF9NQVNLKG5yKSwgYWRkciArIEJJVE9QX1dPUkQobnIpKTsKIH0KIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBjbGVhcl9iaXRfdW5sb2NrKGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIG9sZDsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSBCSVRPUF9NQVNLKG5yKTsKLQl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRPUF9XT1JEKG5yKTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKLSIxOiIJUFBDX0xMQVJYICIlMCwwLCUzCSMgY2xlYXJfYml0X3VubG9ja1xuIgotCSJhbmRjCSUwLCUwLCUyXG4iCi0JUFBDNDA1X0VSUjc3KDAsJTMpCi0JUFBDX1NUTENYICIlMCwwLCUzXG4iCi0JImJuZS0JMWIiCi0JOiAiPSZyIiAob2xkKSwgIittIiAoKnApCi0JOiAiciIgKG1hc2spLCAiciIgKHApCi0JOiAiY2MiLCAibWVtb3J5Iik7CisJY2xlYXJfYml0c191bmxvY2soQklUT1BfTUFTSyhuciksIGFkZHIgKyBCSVRPUF9XT1JEKG5yKSk7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBvbGQ7Ci0JdW5zaWduZWQgbG9uZyBtYXNrID0gQklUT1BfTUFTSyhucik7Ci0JdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgQklUT1BfV09SRChucik7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJUFBDX0xMQVJYICIlMCwwLCUzCSMgY2hhbmdlX2JpdFxuIgotCSJ4b3IJJTAsJTAsJTJcbiIKLQlQUEM0MDVfRVJSNzcoMCwlMykKLQlQUENfU1RMQ1ggIiUwLDAsJTNcbiIKLQkiYm5lLQkxYiIKLQk6ICI9JnIiIChvbGQpLCAiK20iICgqcCkKLQk6ICJyIiAobWFzayksICJyIiAocCkKLQk6ICJjYyIgKTsKKwljaGFuZ2VfYml0cyhCSVRPUF9NQVNLKG5yKSwgYWRkciArIEJJVE9QX1dPUkQobnIpKTsKIH0KIAorLyogTGlrZSBERUZJTkVfQklUT1AoKSwgd2l0aCBjaGFuZ2VzIHRvIHRoZSBhcmd1bWVudHMgdG8gJ29wJyBhbmQgdGhlIG91dHB1dAorICogb3BlcmFuZHMuICovCisjZGVmaW5lIERFRklORV9URVNUT1AoZm4sIG9wLCBwcmVmaXgsIHBvc3RmaXgpCVwKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZm4oCQlcCisJCXVuc2lnbmVkIGxvbmcgbWFzaywJCVwKKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqX3ApCVwKK3sJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBvbGQsIHQ7CQkJXAorCXVuc2lnbmVkIGxvbmcgKnAgPSAodW5zaWduZWQgbG9uZyAqKV9wOwlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCVwKKwlwcmVmaXgJCQkJCVwKKyIxOiIJUFBDX0xMQVJYICIlMCwwLCUzXG4iCQkJXAorCXN0cmluZ2lmeV9pbl9jKG9wKSAiJTEsJTAsJTJcbiIJCVwKKwlQUEM0MDVfRVJSNzcoMCwlMykJCQlcCisJUFBDX1NUTENYICIlMSwwLCUzXG4iCQkJXAorCSJibmUtIDFiXG4iCQkJCVwKKwlwb3N0Zml4CQkJCQlcCisJOiAiPSZyIiAob2xkKSwgIj0mciIgKHQpCQlcCisJOiAiciIgKG1hc2spLCAiciIgKHApCQkJXAorCTogImNjIiwgIm1lbW9yeSIpOwkJCVwKKwlyZXR1cm4gKG9sZCAmIG1hc2spOwkJCVwKK30KKworREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9zZXRfYml0cywgb3IsIExXU1lOQ19PTl9TTVAsIElTWU5DX09OX1NNUCkKK0RFRklORV9URVNUT1AodGVzdF9hbmRfc2V0X2JpdHNfbG9jaywgb3IsICIiLCBJU1lOQ19PTl9TTVApCitERUZJTkVfVEVTVE9QKHRlc3RfYW5kX2NsZWFyX2JpdHMsIGFuZGMsIExXU1lOQ19PTl9TTVAsIElTWU5DX09OX1NNUCkKK0RFRklORV9URVNUT1AodGVzdF9hbmRfY2hhbmdlX2JpdHMsIHhvciwgTFdTWU5DX09OX1NNUCwgSVNZTkNfT05fU01QKQorCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfc2V0X2JpdCh1bnNpZ25lZCBsb25nIG5yLAogCQkJCSAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCXVuc2lnbmVkIGxvbmcgb2xkLCB0OwotCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVE9QX01BU0sobnIpOwotCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAotIjE6IglQUENfTExBUlggIiUwLDAsJTMJCSMgdGVzdF9hbmRfc2V0X2JpdFxuIgotCSJvcgklMSwlMCwlMiBcbiIKLQlQUEM0MDVfRVJSNzcoMCwlMykKLQlQUENfU1RMQ1ggIiUxLDAsJTMgXG4iCi0JImJuZS0JMWIiCi0JSVNZTkNfT05fU01QCi0JOiAiPSZyIiAob2xkKSwgIj0mciIgKHQpCi0JOiAiciIgKG1hc2spLCAiciIgKHApCi0JOiAiY2MiLCAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gKG9sZCAmIG1hc2spICE9IDA7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXRzKEJJVE9QX01BU0sobnIpLCBhZGRyICsgQklUT1BfV09SRChucikpICE9IDA7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9zZXRfYml0X2xvY2sodW5zaWduZWQgbG9uZyBuciwKIAkJCQkgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIG9sZCwgdDsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSBCSVRPUF9NQVNLKG5yKTsKLQl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRPUF9XT1JEKG5yKTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglQUENfTExBUlggIiUwLDAsJTMJCSMgdGVzdF9hbmRfc2V0X2JpdF9sb2NrXG4iCi0JIm9yCSUxLCUwLCUyIFxuIgotCVBQQzQwNV9FUlI3NygwLCUzKQotCVBQQ19TVExDWCAiJTEsMCwlMyBcbiIKLQkiYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKLQk6ICI9JnIiIChvbGQpLCAiPSZyIiAodCkKLQk6ICJyIiAobWFzayksICJyIiAocCkKLQk6ICJjYyIsICJtZW1vcnkiKTsKLQotCXJldHVybiAob2xkICYgbWFzaykgIT0gMDsKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdHNfbG9jayhCSVRPUF9NQVNLKG5yKSwKKwkJCQlhZGRyICsgQklUT1BfV09SRChucikpICE9IDA7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQodW5zaWduZWQgbG9uZyBuciwKIAkJCQkJIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBvbGQsIHQ7Ci0JdW5zaWduZWQgbG9uZyBtYXNrID0gQklUT1BfTUFTSyhucik7Ci0JdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgQklUT1BfV09SRChucik7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCi0iMToiCVBQQ19MTEFSWCAiJTAsMCwlMwkJIyB0ZXN0X2FuZF9jbGVhcl9iaXRcbiIKLQkiYW5kYwklMSwlMCwlMiBcbiIKLQlQUEM0MDVfRVJSNzcoMCwlMykKLQlQUENfU1RMQ1ggIiUxLDAsJTMgXG4iCi0JImJuZS0JMWIiCi0JSVNZTkNfT05fU01QCi0JOiAiPSZyIiAob2xkKSwgIj0mciIgKHQpCi0JOiAiciIgKG1hc2spLCAiciIgKHApCi0JOiAiY2MiLCAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gKG9sZCAmIG1hc2spICE9IDA7CisJcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdHMoQklUT1BfTUFTSyhuciksIGFkZHIgKyBCSVRPUF9XT1JEKG5yKSkgIT0gMDsKIH0KIAogc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQodW5zaWduZWQgbG9uZyBuciwKIAkJCQkJICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCXVuc2lnbmVkIGxvbmcgb2xkLCB0OwotCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVE9QX01BU0sobnIpOwotCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAotIjE6IglQUENfTExBUlggIiUwLDAsJTMJCSMgdGVzdF9hbmRfY2hhbmdlX2JpdFxuIgotCSJ4b3IJJTEsJTAsJTIgXG4iCi0JUFBDNDA1X0VSUjc3KDAsJTMpCi0JUFBDX1NUTENYICIlMSwwLCUzIFxuIgotCSJibmUtCTFiIgotCUlTWU5DX09OX1NNUAotCTogIj0mciIgKG9sZCksICI9JnIiICh0KQotCTogInIiIChtYXNrKSwgInIiIChwKQotCTogImNjIiwgIm1lbW9yeSIpOwotCi0JcmV0dXJuIChvbGQgJiBtYXNrKSAhPSAwOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9iaXRzKHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBvbGQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJUFBDX0xMQVJYICIlMCwwLCUzICAgICAgICAgIyBzZXRfYml0c1xuIgotCSJvcgklMCwlMCwlMlxuIgotCVBQQ19TVExDWCAiJTAsMCwlM1xuIgotCSJibmUtCTFiIgotCTogIj0mciIgKG9sZCksICIrbSIgKCphZGRyKQotCTogInIiIChtYXNrKSwgInIiIChhZGRyKQotCTogImNjIik7CisJcmV0dXJuIHRlc3RfYW5kX2NoYW5nZV9iaXRzKEJJVE9QX01BU0sobnIpLCBhZGRyICsgQklUT1BfV09SRChucikpICE9IDA7CiB9CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NlbGwtcmVncy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NlbGwtcmVncy5oCmluZGV4IGZkNmZkMDAuLmZkZjY0ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jZWxsLXJlZ3MuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY2VsbC1yZWdzLmgKQEAgLTMwMyw2ICszMDMsMTcgQEAKIGV4dGVybiBzdHJ1Y3QgY2JlX21pY190bV9yZWdzIF9faW9tZW0gKmNiZV9nZXRfbWljX3RtX3JlZ3Moc3RydWN0IGRldmljZV9ub2RlICpucCk7CiBleHRlcm4gc3RydWN0IGNiZV9taWNfdG1fcmVncyBfX2lvbWVtICpjYmVfZ2V0X2NwdV9taWNfdG1fcmVncyhpbnQgY3B1KTsKIAorCisvKiBDZWxsIHBhZ2UgdGFibGUgZW50cmllcyAqLworI2RlZmluZSBDQkVfSU9QVEVfUFBfVwkJMHg4MDAwMDAwMDAwMDAwMDAwdWwgLyogcHJvdGVjdGlvbjogd3JpdGUgKi8KKyNkZWZpbmUgQ0JFX0lPUFRFX1BQX1IJCTB4NDAwMDAwMDAwMDAwMDAwMHVsIC8qIHByb3RlY3Rpb246IHJlYWQgKi8KKyNkZWZpbmUgQ0JFX0lPUFRFX00JCTB4MjAwMDAwMDAwMDAwMDAwMHVsIC8qIGNvaGVyZW5jeSByZXF1aXJlZCAqLworI2RlZmluZSBDQkVfSU9QVEVfU09fUgkJMHgxMDAwMDAwMDAwMDAwMDAwdWwgLyogb3JkZXJpbmc6IHdyaXRlcyAqLworI2RlZmluZSBDQkVfSU9QVEVfU09fUlcJCTB4MTgwMDAwMDAwMDAwMDAwMHVsIC8qIG9yZGVyaW5nOiByICYgdyAqLworI2RlZmluZSBDQkVfSU9QVEVfUlBOX01hc2sJMHgwN2ZmZmZmZmZmZmZmMDAwdWwgLyogUlBOICovCisjZGVmaW5lIENCRV9JT1BURV9ICQkweDAwMDAwMDAwMDAwMDA4MDB1bCAvKiBjYWNoZSBoaW50ICovCisjZGVmaW5lIENCRV9JT1BURV9JT0lEX01hc2sJMHgwMDAwMDAwMDAwMDAwN2ZmdWwgLyogaW9pZCAqLworCiAvKiBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIHRvIGRlYWwgd2l0aCBTTVQgKi8KIGV4dGVybiB1MzIgY2JlX2dldF9od190aHJlYWRfaWQoaW50IGNwdSk7CiBleHRlcm4gdTMyIGNiZV9jcHVfdG9fbm9kZShpbnQgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aHJlYWRzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGhyZWFkcy5oCmluZGV4IGZiMTFiMGMuLmE4ZTE4NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aHJlYWRzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRocmVhZHMuaApAQCAtNSw2ICs1LDE1IEBACiAKIC8qCiAgKiBNYXBwaW5nIG9mIHRocmVhZHMgdG8gY29yZXMKKyAqCisgKiBOb3RlOiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGxpbWl0ZWQgdG8gYSBwb3dlciBvZiAyIG51bWJlciBvZgorICogdGhyZWFkcyBwZXIgY29yZSBhbmQgdGhlIHNhbWUgbnVtYmVyIGZvciBlYWNoIGNvcmUgaW4gdGhlIHN5c3RlbQorICogKHRob3VnaCBpdCB3b3VsZCB3b3JrIGlmIHNvbWUgcHJvY2Vzc29ycyBoYWQgbGVzcyB0aHJlYWRzIGFzIGxvbmcKKyAqIGFzIHRoZSBDUFUgbnVtYmVycyBhcmUgc3RpbGwgYWxsb2NhdGVkLCBqdXN0IG5vdCBicm91Z2h0IG9mZmxpbmUpLgorICoKKyAqIEhvd2V2ZXIsIHRoZSBBUEkgYWxsb3dzIGZvciBhIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgZnV0dXJlCisgKiBpZiBuZWVkZWQsIGFzIGxvbmcgYXMgeW91IG9ubHkgdXNlIHRoZSBmdW5jdGlvbnMgYW5kIG5vdCB0aGUgdmFyaWFibGVzCisgKiBkaXJlY3RseS4KICAqLwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNjcsNSArNzYsMTIgQEAKIAlyZXR1cm4gY3B1ICYgfih0aHJlYWRzX3Blcl9jb3JlIC0gMSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9sYXN0X3RocmVhZF9pbl9jb3JlKGludCBjcHUpCit7CisJcmV0dXJuIGNwdSB8ICh0aHJlYWRzX3Blcl9jb3JlIC0gMSk7Cit9CisKKworCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0NQVVRIUkVBRFNfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGV2aWNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGV2aWNlLmgKaW5kZXggN2QyMjc3Yy4uOWRhZGUxNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RldmljZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaApAQCAtNiw3ICs2LDcgQEAKICNpZm5kZWYgX0FTTV9QT1dFUlBDX0RFVklDRV9ICiAjZGVmaW5lIF9BU01fUE9XRVJQQ19ERVZJQ0VfSAogCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzOworc3RydWN0IGRtYV9tYXBfb3BzOwogc3RydWN0IGRldmljZV9ub2RlOwogCiBzdHJ1Y3QgZGV2X2FyY2hkYXRhIHsKQEAgLTE0LDggKzE0LDExIEBACiAJc3RydWN0IGRldmljZV9ub2RlCSpvZl9ub2RlOwogCiAJLyogRE1BIG9wZXJhdGlvbnMgb24gdGhhdCBkZXZpY2UgKi8KLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzCSpkbWFfb3BzOworCXN0cnVjdCBkbWFfbWFwX29wcwkqZG1hX29wczsKIAl2b2lkCQkJKmRtYV9kYXRhOworI2lmZGVmIENPTkZJR19TV0lPVExCCisJZG1hX2FkZHJfdAkJbWF4X2RpcmVjdF9kbWFfYWRkcjsKKyNlbmRpZgogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGRldl9hcmNoZGF0YV9zZXRfbm9kZShzdHJ1Y3QgZGV2X2FyY2hkYXRhICphZCwKQEAgLTMwLDQgKzMzLDcgQEAKIAlyZXR1cm4gYWQtPm9mX25vZGU7CiB9CiAKK3N0cnVjdCBwZGV2X2FyY2hkYXRhIHsKK307CisKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggYjQ0YWFhYi4uY2IyY2E0MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLWF0dHJzLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWRlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N3aW90bGIuaD4KIApAQCAtNjQsNTggKzY1LDE0IEBACiB9CiAKIC8qCi0gKiBETUEgb3BlcmF0aW9ucyBhcmUgYWJzdHJhY3RlZCBmb3IgRzUgdnMuIGkvcFNlcmllcywgUENJIHZzLiBWSU8KLSAqLwotc3RydWN0IGRtYV9tYXBwaW5nX29wcyB7Ci0Jdm9pZCAqCQkoKmFsbG9jX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpOwotCXZvaWQJCSgqZnJlZV9jb2hlcmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQl2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKLQlpbnQJCSgqbWFwX3NnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOwotCXZvaWQJCSgqdW5tYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCQlpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7Ci0JaW50CQkoKmRtYV9zdXBwb3J0ZWQpKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spOwotCWludAkJKCpzZXRfZG1hX21hc2spKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKTsKLQlkbWFfYWRkcl90IAkoKm1hcF9wYWdlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOwotCXZvaWQJCSgqdW5tYXBfcGFnZSkoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAotCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7Ci0JaW50CQkoKmFkZHJfbmVlZHNfbWFwKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwKLQkJCQlzaXplX3Qgc2l6ZSk7Ci0jaWZkZWYgQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJc2l6ZV90IHNpemUsCi0JCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCXNpemVfdCBzaXplLAotCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zZ19mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zZ19mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Ci0jZW5kaWYKLX07Ci0KLS8qCiAgKiBBdmFpbGFibGUgZ2VuZXJpYyBzZXRzIG9mIG9wZXJhdGlvbnMKICAqLwogI2lmZGVmIENPTkZJR19QUEM2NAotZXh0ZXJuIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2lvbW11X29wczsKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcF9vcHMgZG1hX2lvbW11X29wczsKICNlbmRpZgotZXh0ZXJuIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2RpcmVjdF9vcHM7CitleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzIGRtYV9kaXJlY3Rfb3BzOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmdldF9kbWFfb3BzKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9tYXBfb3BzICpnZXRfZG1hX29wcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJLyogV2UgZG9uJ3QgaGFuZGxlIHRoZSBOVUxMIGRldiBjYXNlIGZvciBJU0EgZm9yIG5vdy4gV2UgY291bGQKIAkgKiBkbyBpdCB2aWEgYW4gb3V0IG9mIGxpbmUgY2FsbCBidXQgaXQgaXMgbm90IG5lZWRlZCBmb3Igbm93LiBUaGUKQEAgLTEyOCwxNCArODUsMTkgQEAKIAlyZXR1cm4gZGV2LT5hcmNoZGF0YS5kbWFfb3BzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcykKIHsKIAlkZXYtPmFyY2hkYXRhLmRtYV9vcHMgPSBvcHM7CiB9CiAKKy8qIHRoaXMgd2lsbCBiZSByZW1vdmVkIHNvb24gKi8KKyNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1jb21tb24uaD4KKwogc3RhdGljIGlubGluZSBpbnQgZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKIAlpZiAodW5saWtlbHkoZG1hX29wcyA9PSBOVUxMKSkKIAkJcmV0dXJuIDA7CkBAIC0xNDksNyArMTExLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKIAlpZiAodW5saWtlbHkoZG1hX29wcyA9PSBOVUxMKSkKIAkJcmV0dXJuIC1FSU87CkBAIC0xNjEsMjYyICsxMjMsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIG1hcF8vdW5tYXBfc2luZ2xlIGFjdHVhbGx5IGNhbGwgdGhyb3VnaCB0byBtYXAvdW5tYXBfcGFnZSBub3cgdGhhdCBhbGwgdGhlCi0gKiBkbWFfbWFwcGluZ19vcHMgaGF2ZSBiZWVuIGNvbnZlcnRlZCBvdmVyLiBXZSBqdXN0IGhhdmUgdG8gZ2V0IHRoZSBwYWdlIGFuZAotICogb2Zmc2V0IHRvIHBhc3MgdGhyb3VnaCB0byBtYXBfcGFnZQotICovCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgICAgICB2b2lkICpjcHVfYWRkciwKLQkJCQkJICAgICAgc2l6ZV90IHNpemUsCi0JCQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7Ci0KLQlCVUdfT04oIWRtYV9vcHMpOwotCi0JcmV0dXJuIGRtYV9vcHMtPm1hcF9wYWdlKGRldiwgdmlydF90b19wYWdlKGNwdV9hZGRyKSwKLQkJCQkgKHVuc2lnbmVkIGxvbmcpY3B1X2FkZHIgJSBQQUdFX1NJWkUsIHNpemUsCi0JCQkJIGRpcmVjdGlvbiwgYXR0cnMpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCQkJICBzaXplX3Qgc2l6ZSwKLQkJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJCSAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7Ci0KLQlCVUdfT04oIWRtYV9vcHMpOwotCi0JZG1hX29wcy0+dW5tYXBfcGFnZShkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXJlY3Rpb24sIGF0dHJzKTsKLX0KLQotc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkJCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOwotCi0JQlVHX09OKCFkbWFfb3BzKTsKLQotCXJldHVybiBkbWFfb3BzLT5tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uLCBhdHRycyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfcGFnZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsCi0JCQkJCXNpemVfdCBzaXplLAotCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOwotCi0JQlVHX09OKCFkbWFfb3BzKTsKLQotCWRtYV9vcHMtPnVubWFwX3BhZ2UoZGV2LCBkbWFfYWRkcmVzcywgc2l6ZSwgZGlyZWN0aW9uLCBhdHRycyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCSAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOwotCi0JQlVHX09OKCFkbWFfb3BzKTsKLQlyZXR1cm4gZG1hX29wcy0+bWFwX3NnKGRldiwgc2csIG5lbnRzLCBkaXJlY3Rpb24sIGF0dHJzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCQkgICAgICBpbnQgbmh3ZW50cmllcywKLQkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7Ci0KLQlCVUdfT04oIWRtYV9vcHMpOwotCWRtYV9vcHMtPnVubWFwX3NnKGRldiwgc2csIG5od2VudHJpZXMsIGRpcmVjdGlvbiwgYXR0cnMpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJCSAgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CisJdm9pZCAqY3B1X2FkZHI7CiAKIAlCVUdfT04oIWRtYV9vcHMpOwotCXJldHVybiBkbWFfb3BzLT5hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGZsYWcpOworCisJY3B1X2FkZHIgPSBkbWFfb3BzLT5hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGZsYWcpOworCisJZGVidWdfZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgKmRtYV9oYW5kbGUsIGNwdV9hZGRyKTsKKworCXJldHVybiBjcHVfYWRkcjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkJICAgICB2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKIAlCVUdfT04oIWRtYV9vcHMpOworCisJZGVidWdfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBjcHVfYWRkciwgZG1hX2hhbmRsZSk7CisKIAlkbWFfb3BzLT5mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgY3B1X2FkZHIsIGRtYV9oYW5kbGUpOwogfQogCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKLQkJCQkJc2l6ZV90IHNpemUsCi0JCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlyZXR1cm4gZG1hX21hcF9zaW5nbGVfYXR0cnMoZGV2LCBjcHVfYWRkciwgc2l6ZSwgZGlyZWN0aW9uLCBOVUxMKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAotCQkJCSAgICBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCWRtYV91bm1hcF9zaW5nbGVfYXR0cnMoZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyZWN0aW9uLCBOVUxMKTsKLX0KLQotc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JcmV0dXJuIGRtYV9tYXBfcGFnZV9hdHRycyhkZXYsIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uLCBOVUxMKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKLQkJCQkgIHNpemVfdCBzaXplLAotCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCWRtYV91bm1hcF9wYWdlX2F0dHJzKGRldiwgZG1hX2FkZHJlc3MsIHNpemUsIGRpcmVjdGlvbiwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJICAgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlyZXR1cm4gZG1hX21hcF9zZ19hdHRycyhkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uLCBOVUxMKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJaW50IG5od2VudHJpZXMsCi0JCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCWRtYV91bm1hcF9zZ19hdHRycyhkZXYsIHNnLCBuaHdlbnRyaWVzLCBkaXJlY3Rpb24sIE5VTEwpOwotfQotCi0jaWZkZWYgQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUwotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOwotCi0JQlVHX09OKCFkbWFfb3BzKTsKLQotCWlmIChkbWFfb3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KQotCQlkbWFfb3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KGRldiwgZG1hX2hhbmRsZSwgMCwKLQkJCQkJICAgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOwotCi0JQlVHX09OKCFkbWFfb3BzKTsKLQotCWlmIChkbWFfb3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKQotCQlkbWFfb3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKGRldiwgZG1hX2hhbmRsZSwKLQkJCQkJICAgICAgMCwgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbnRzLAotCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7Ci0KLQlCVUdfT04oIWRtYV9vcHMpOwotCi0JaWYgKGRtYV9vcHMtPnN5bmNfc2dfZm9yX2NwdSkKLQkJZG1hX29wcy0+c3luY19zZ19mb3JfY3B1KGRldiwgc2dsLCBuZW50cywgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbnRzLAotCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7Ci0KLQlCVUdfT04oIWRtYV9vcHMpOwotCi0JaWYgKGRtYV9vcHMtPnN5bmNfc2dfZm9yX2RldmljZSkKLQkJZG1hX29wcy0+c3luY19zZ19mb3JfZGV2aWNlKGRldiwgc2dsLCBuZW50cywgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCi0JCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKLQotCUJVR19PTighZG1hX29wcyk7Ci0KLQlpZiAoZG1hX29wcy0+c3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSkKLQkJZG1hX29wcy0+c3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShkZXYsIGRtYV9oYW5kbGUsCi0JCQkJCSAgIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCi0JCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKLQotCUJVR19PTighZG1hX29wcyk7Ci0KLQlpZiAoZG1hX29wcy0+c3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSkKLQkJZG1hX29wcy0+c3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShkZXYsIGRtYV9oYW5kbGUsIG9mZnNldCwKLQkJCQkJICAgICAgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLSNlbHNlIC8qIENPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBpbnQgbmVudHMsCi0JCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbnRzLAotCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci19Ci0jZW5kaWYKLQogc3RhdGljIGlubGluZSBpbnQgZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQogeworCXN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CisKKwlpZiAoZG1hX29wcy0+bWFwcGluZ19lcnJvcikKKwkJcmV0dXJuIGRtYV9vcHMtPm1hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcik7CisKICNpZmRlZiBDT05GSUdfUFBDNjQKIAlyZXR1cm4gKGRtYV9hZGRyID09IERNQV9FUlJPUl9DT0RFKTsKICNlbHNlCkBAIC00MjQsNiArMTY0LDMxIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGlubGluZSBib29sIGRtYV9jYXBhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSkKK3sKKyNpZmRlZiBDT05GSUdfU1dJT1RMQgorCXN0cnVjdCBkZXZfYXJjaGRhdGEgKnNkID0gJmRldi0+YXJjaGRhdGE7CisKKwlpZiAoc2QtPm1heF9kaXJlY3RfZG1hX2FkZHIgJiYgYWRkciArIHNpemUgPiBzZC0+bWF4X2RpcmVjdF9kbWFfYWRkcikKKwkJcmV0dXJuIDA7CisjZW5kaWYKKworCWlmICghZGV2LT5kbWFfbWFzaykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYWRkciArIHNpemUgPD0gKmRldi0+ZG1hX21hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBwaHlzX3RvX2RtYShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBoeXNfYWRkcl90IHBhZGRyKQoreworCXJldHVybiBwYWRkciArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworfQorCitzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IGRtYV90b19waHlzKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkYWRkcikKK3sKKwlyZXR1cm4gZGFkZHIgLSBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKK30KKwogI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCiAjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCiAjaWZkZWYgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi02NGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9leGNlcHRpb24tNjRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ1M2YzMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9leGNlcHRpb24tNjRlLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiAgRGVmaW5pdGlvbnMgZm9yIHVzZSBieSBleGNlcHRpb24gY29kZSBvbiBCb29rMy1FCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBCZW4uIEhlcnJlbnNjaG1pZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZyksIElCTSBDb3JwLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9BU01fUE9XRVJQQ19FWENFUFRJT05fNjRFX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0VYQ0VQVElPTl82NEVfSAorCisvKgorICogU1BSR3MgdXNhZ2UgYW4gb3RoZXIgY29uc2lkZXJhdGlvbnMuLi4KKyAqCisgKiBTaW5jZSBUTEIgbWlzcyBhbmQgb3RoZXIgc3RhbmRhcmQgZXhjZXB0aW9ucyBjYW4gYmUgaW50ZXJydXB0ZWQgYnkKKyAqIGNyaXRpY2FsIGV4Y2VwdGlvbnMgd2hpY2ggY2FuIHRoZW1zZWx2ZXMgYmUgaW50ZXJydXB0ZWQgYnkgbWFjaGluZQorICogY2hlY2tzLCBhbmQgc2luY2UgdGhlIHR3byBsYXRlciBjYW4gdGhlbXNlbHZlcyBjYXVzZSBhIFRMQiBtaXNzIHdoZW4KKyAqIGhpdHRpbmcgdGhlIGxpbmVhciBtYXBwaW5nIGZvciB0aGUga2VybmVsIHN0YWNrcywgd2UgbmVlZCB0byBiZSBhIGJpdAorICogY3JlYXRpdmUgb24gaG93IHdlIHVzZSBTUFJHcy4KKyAqCisgKiBUaGUgYmFzZSBpZGVhIGlzIHRoYXQgd2UgaGF2ZSBvbmUgU1JQRyByZXNlcnZlZCBmb3IgY3JpdGljYWwgYW5kIG9uZQorICogZm9yIG1hY2hpbmUgY2hlY2sgaW50ZXJydXB0cy4gVGhvc2UgYXJlIHVzZWQgdG8gc2F2ZSBhIEdQUiB0aGF0IGNhbgorICogdGhlbiBiZSB1c2VkIHRvIGdldCB0aGUgUEFDQSwgYW5kIHN0b3JlIGFzIG11Y2ggY29udGV4dCBhcyB3ZSBuZWVkCisgKiB0byBzYXZlIGluIHRoZXJlLiBUaGF0IGluY2x1ZGVzIHNhdmluZyB0aGUgU1BSR3MgdXNlZCBieSB0aGUgVExCIG1pc3MKKyAqIGhhbmRsZXIgZm9yIGxpbmVhciBtYXBwaW5nIG1pc3NlcyBhbmQgdGhlIGFzc29jaWF0ZWQgU1JSMC8xIGR1ZSB0bworICogdGhlIGFib3ZlIHJlLWVudHJhbmN5IGlzc3VlLgorICoKKyAqIFNvIGhlcmUncyB0aGUgY3VycmVudCB1c2FnZSBwYXR0ZXJuLiBJdCdzIGRvbmUgcmVnYXJkbGVzcyBvZiB3aGljaAorICogU1BSR3MgYXJlIHVzZXItcmVhZGFibGUgdGhvdWdoLCB0aHVzIHdlIG1pZ2h0IGhhdmUgdG8gY2hhbmdlIHNvbWUgb2YKKyAqIHRoaXMgbGF0ZXIuIEluIG9yZGVyIHRvIGRvIHRoYXQgbW9yZSBlYXNpbHksIHdlIHVzZSBzcGVjaWFsIGNvbnN0YW50cworICogZm9yIG5hbWluZyB0aGVtCisgKgorICogV0FSTklORzogU29tZSBvZiB0aGVzZSBTUFJHcyBhcmUgdXNlciByZWFkYWJsZS4gV2UgbmVlZCB0byBkbyBzb21ldGhpbmcKKyAqIGFib3V0IGl0IGFzIHNvbWUgcG9pbnQgYnkgbWFraW5nIHN1cmUgdGhleSBjYW4ndCBiZSB1c2VkIHRvIGxlYWsga2VybmVsCisgKiBjcml0aWNhbCBkYXRhCisgKi8KKworCisvKiBXZSBhcmUgb3V0IG9mIFNQUkdzIHNvIHdlIHNhdmUgc29tZSB0aGluZ3MgaW4gdGhlIFBBQ0EuIFRoZSBub3JtYWwKKyAqIGV4Y2VwdGlvbiBmcmFtZSBpcyBzbWFsbGVyIHRoYW4gdGhlIENSSVQgb3IgTUMgb25lIHRob3VnaAorICovCisjZGVmaW5lIEVYX1IxCQkoMCAqIDgpCisjZGVmaW5lIEVYX0NSCQkoMSAqIDgpCisjZGVmaW5lIEVYX1IxMAkJKDIgKiA4KQorI2RlZmluZSBFWF9SMTEJCSgzICogOCkKKyNkZWZpbmUgRVhfUjE0CQkoNCAqIDgpCisjZGVmaW5lIEVYX1IxNQkJKDUgKiA4KQorCisvKiBUaGUgVExCIG1pc3MgZXhjZXB0aW9uIHVzZXMgZGlmZmVyZW50IHNsb3RzICovCisKKyNkZWZpbmUgRVhfVExCX1IxMAkoIDAgKiA4KQorI2RlZmluZSBFWF9UTEJfUjExCSggMSAqIDgpCisjZGVmaW5lIEVYX1RMQl9SMTIJKCAyICogOCkKKyNkZWZpbmUgRVhfVExCX1IxMwkoIDMgKiA4KQorI2RlZmluZSBFWF9UTEJfUjE0CSggNCAqIDgpCisjZGVmaW5lIEVYX1RMQl9SMTUJKCA1ICogOCkKKyNkZWZpbmUgRVhfVExCX1IxNgkoIDYgKiA4KQorI2RlZmluZSBFWF9UTEJfQ1IJKCA3ICogOCkKKyNkZWZpbmUgRVhfVExCX0RFQVIJKCA4ICogOCkgLyogTGV2ZWwgMCBhbmQgMiBvbmx5ICovCisjZGVmaW5lIEVYX1RMQl9FU1IJKCA5ICogOCkgLyogTGV2ZWwgMCBhbmQgMiBvbmx5ICovCisjZGVmaW5lIEVYX1RMQl9TUlIwCSgxMCAqIDgpCisjZGVmaW5lIEVYX1RMQl9TUlIxCSgxMSAqIDgpCisjZGVmaW5lIEVYX1RMQl9NTVVDUjAJKDEyICogOCkgLyogTGV2ZWwgMCAqLworI2RlZmluZSBFWF9UTEJfTUFTMQkoMTIgKiA4KSAvKiBMZXZlbCAwICovCisjZGVmaW5lIEVYX1RMQl9NQVMyCSgxMyAqIDgpIC8qIExldmVsIDAgKi8KKyNpZmRlZiBDT05GSUdfQk9PSzNFX01NVV9UTEJfU1RBVFMKKyNkZWZpbmUgRVhfVExCX1I4CSgxNCAqIDgpCisjZGVmaW5lIEVYX1RMQl9SOQkoMTUgKiA4KQorI2RlZmluZSBFWF9UTEJfTFIJKDE2ICogOCkKKyNkZWZpbmUgRVhfVExCX1NJWkUJKDE3ICogOCkKKyNlbHNlCisjZGVmaW5lIEVYX1RMQl9TSVpFCSgxNCAqIDgpCisjZW5kaWYKKworI2RlZmluZQlTVEFSVF9FWENFUFRJT04obGFiZWwpCQkJCQkJXAorCS5nbG9ibCBleGNfIyNsYWJlbCMjX2Jvb2szZTsJCQkJCVwKK2V4Y18jI2xhYmVsIyNfYm9vazNlOgorCisvKiBUTEIgbWlzcyBleGNlcHRpb24gcHJvbG9nCisgKgorICogVGhpcyBwcm9sb2cgaGFuZGxlcyByZS1lbnRyYW5jeSAodXAgdG8gMyBsZXZlbHMgc3VwcG9ydGVkIGluIHRoZSBQQUNBCisgKiB0aG91Z2ggd2UgY3VycmVudGx5IGRvbid0IHRlc3QgZm9yIG92ZXJmbG93KS4gSXQgcHJvdmlkZXMgeW91IHdpdGggYQorICogcmUtZW50cmFuY3kgc2FmZSB3b3JraW5nIHNwYWNlIG9mIHIxMC4uLnIxNiBhbmQgQ1Igd2l0aCByMTIgYmVpbmcgdXNlZAorICogYXMgdGhlIGV4Y2VwdGlvbiBhcmVhIHBvaW50ZXIgaW4gdGhlIFBBQ0EgZm9yIHRoYXQgbGV2ZWwgb2YgcmUtZW50cmFuY3kKKyAqIGFuZCByMTMgY29udGFpbmluZyB0aGUgUEFDQSBwb2ludGVyLgorICoKKyAqIFNSUjAgYW5kIFNSUjEgYXJlIHNhdmVkLCBidXQgREVBUiBhbmQgRVNSIGFyZSBub3QsIHNpbmNlIHRoZXkgZG9uJ3QgYXBwbHkKKyAqIGFzLWlzIGZvciBpbnN0cnVjdGlvbiBleGNlcHRpb25zLiBJdCdzIHVwIHRvIHRoZSBhY3R1YWwgZXhjZXB0aW9uIGNvZGUKKyAqIHRvIHNhdmUgdGhlbSBhcyB3ZWxsIGlmIHJlcXVpcmVkLgorICovCisjZGVmaW5lIFRMQl9NSVNTX1BST0xPRwkJCQkJCQkgICAgXAorCW10c3ByCVNQUk5fU1BSR19UTEJfU0NSQVRDSCxyMTI7CQkJCSAgICBcCisJbWZzcHIJcjEyLFNQUk5fU1BSR19UTEJfRVhGUkFNRTsJCQkJICAgIFwKKwlzdGQJcjEwLEVYX1RMQl9SMTAocjEyKTsJCQkJCSAgICBcCisJbWZjcglyMTA7CQkJCQkJCSAgICBcCisJc3RkCXIxMSxFWF9UTEJfUjExKHIxMik7CQkJCQkgICAgXAorCW1mc3ByCXIxMSxTUFJOX1NQUkdfVExCX1NDUkFUQ0g7CQkJCSAgICBcCisJc3RkCXIxMyxFWF9UTEJfUjEzKHIxMik7CQkJCQkgICAgXAorCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQTsJCQkJCSAgICBcCisJc3RkCXIxNCxFWF9UTEJfUjE0KHIxMik7CQkJCQkgICAgXAorCWFkZGkJcjE0LHIxMixFWF9UTEJfU0laRTsJCQkJCSAgICBcCisJc3RkCXIxNSxFWF9UTEJfUjE1KHIxMik7CQkJCQkgICAgXAorCW1mc3ByCXIxNSxTUFJOX1NSUjE7CQkJCQkJICAgIFwKKwlzdGQJcjE2LEVYX1RMQl9SMTYocjEyKTsJCQkJCSAgICBcCisJbWZzcHIJcjE2LFNQUk5fU1JSMDsJCQkJCQkgICAgXAorCXN0ZAlyMTAsRVhfVExCX0NSKHIxMik7CQkJCQkgICAgXAorCXN0ZAlyMTEsRVhfVExCX1IxMihyMTIpOwkJCQkJICAgIFwKKwltdHNwcglTUFJOX1NQUkdfVExCX0VYRlJBTUUscjE0OwkJCQkgICAgXAorCXN0ZAlyMTUsRVhfVExCX1NSUjEocjEyKTsJCQkJCSAgICBcCisJc3RkCXIxNixFWF9UTEJfU1JSMChyMTIpOwkJCQkJICAgIFwKKwlUTEJfTUlTU19QUk9MT0dfU1RBVFMKKworLyogQW5kIHRoZXNlIGFyZSB0aGUgbWF0Y2hpbmcgZXBpbG9ncyB0aGF0IHJlc3RvcmVzIHRoaW5ncworICoKKyAqIFRoZXJlIGFyZSAzIGVwaWxvZ3M6CisgKgorICogLSBTVUNDRVNTICAgICAgIDogVW53aW5kcyBvbmUgbGV2ZWwKKyAqIC0gRVJST1IgICAgICAgICA6IHJlc3RvcmUgZnJvbSBsZXZlbCAwIGFuZCByZXNldAorICogLSBFUlJPUl9TUEVDSUFMIDogcmVzdG9yZSBmcm9tIGN1cnJlbnQgbGV2ZWwgYW5kIHJlc2V0CisgKgorICogTm9ybWFsIGVycm9ycyB1c2UgRVJST1IsIHRoYXQgaXMsIHRoZXkgcmVzdG9yZSB0aGUgaW5pdGlhbCBmYXVsdCBjb250ZXh0CisgKiBhbmQgdHJpZ2dlciBhIGZhdWx0LiBIb3dldmVyLCB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgbGluZWFyIG1hcHBpbmcKKyAqIGVycm9ycy4gVGhvc2Ugc2hvdWxkIGJhc2ljYWxseSBuZXZlciBoYXBwZW4sIGJ1dCBpZiB0aGV5IGRvIGhhcHBlbiwgd2UKKyAqIHdhbnQgdGhlIGVycm9yIHRvIHBvaW50IG91dCB0aGUgY29udGV4dCB0aGF0IGRpZCB0aGF0IGxpbmVhciBtYXBwaW5nCisgKiBmYXVsdCwgbm90IHRoZSBpbml0aWFsIGxldmVsIDAgKGJhc2ljYWxseSwgd2UgZ290IGEgYm9ndXMgUEdGIG9yIHNvbWV0aGluZworICogbGlrZSB0aGF0KS4gRm9yIHVzZXJsYW5kIGVycm9ycyBvbiB0aGUgbGluZWFyIG1hcHBpbmcsIHRoZXJlIGlzIG5vCisgKiBkaWZmZXJlbmNlIHNpbmNlIHRob3NlIGFyZSBhbHdheXMgbGV2ZWwgMCBhbnl3YXkKKyAqLworCisjZGVmaW5lIFRMQl9NSVNTX1JFU1RPUkUoZnJlZykJCQkJCQkgICAgXAorCWxkCXIxNCxFWF9UTEJfQ1IocjEyKTsJCQkJCSAgICBcCisJbGQJcjEwLEVYX1RMQl9SMTAocjEyKTsJCQkJCSAgICBcCisJbGQJcjE1LEVYX1RMQl9TUlIwKHIxMik7CQkJCQkgICAgXAorCWxkCXIxNixFWF9UTEJfU1JSMShyMTIpOwkJCQkJICAgIFwKKwltdHNwcglTUFJOX1NQUkdfVExCX0VYRlJBTUUsZnJlZzsJCQkJICAgIFwKKwlsZAlyMTEsRVhfVExCX1IxMShyMTIpOwkJCQkJICAgIFwKKwltdGNyCXIxNDsJCQkJCQkJICAgIFwKKwlsZAlyMTMsRVhfVExCX1IxMyhyMTIpOwkJCQkJICAgIFwKKwlsZAlyMTQsRVhfVExCX1IxNChyMTIpOwkJCQkJICAgIFwKKwltdHNwcglTUFJOX1NSUjAscjE1OwkJCQkJCSAgICBcCisJbGQJcjE1LEVYX1RMQl9SMTUocjEyKTsJCQkJCSAgICBcCisJbXRzcHIJU1BSTl9TUlIxLHIxNjsJCQkJCQkgICAgXAorCVRMQl9NSVNTX1JFU1RPUkVfU1RBVFMJCQkJCQkgICAgXAorCWxkCXIxNixFWF9UTEJfUjE2KHIxMik7CQkJCQkgICAgXAorCWxkCXIxMixFWF9UTEJfUjEyKHIxMik7CQkJCQkgICAgXAorCisjZGVmaW5lIFRMQl9NSVNTX0VQSUxPR19TVUNDRVNTCQkJCQkJICAgIFwKKwlUTEJfTUlTU19SRVNUT1JFKHIxMikKKworI2RlZmluZSBUTEJfTUlTU19FUElMT0dfRVJST1IJCQkJCQkgICAgXAorCWFkZGkJcjEyLHIxMyxQQUNBX0VYVExCOwkJCQkJICAgIFwKKwlUTEJfTUlTU19SRVNUT1JFKHIxMikKKworI2RlZmluZSBUTEJfTUlTU19FUElMT0dfRVJST1JfU1BFQ0lBTAkJCQkJICAgIFwKKwlhZGRpCXIxMSxyMTMsUEFDQV9FWFRMQjsJCQkJCSAgICBcCisJVExCX01JU1NfUkVTVE9SRShyMTEpCisKKyNpZmRlZiBDT05GSUdfQk9PSzNFX01NVV9UTEJfU1RBVFMKKyNkZWZpbmUgVExCX01JU1NfUFJPTE9HX1NUQVRTCQkJCQkJICAgIFwKKwltZmxyCXIxMDsJCQkJCQkJICAgIFwKKwlzdGQJcjgsRVhfVExCX1I4KHIxMik7CQkJCQkgICAgXAorCXN0ZAlyOSxFWF9UTEJfUjkocjEyKTsJCQkJCSAgICBcCisJc3RkCXIxMCxFWF9UTEJfTFIocjEyKTsKKyNkZWZpbmUgVExCX01JU1NfUkVTVE9SRV9TVEFUUwkJCQkJICAgICAgICAgICAgXAorCWxkCXIxNixFWF9UTEJfTFIocjEyKTsJCQkJCSAgICBcCisJbGQJcjksRVhfVExCX1I5KHIxMik7CQkJCQkgICAgXAorCWxkCXI4LEVYX1RMQl9SOChyMTIpOwkJCQkJICAgIFwKKwltdGxyCXIxNjsKKyNkZWZpbmUgVExCX01JU1NfU1RBVFNfRChuYW1lKQkJCQkJCSAgICBcCisJYWRkaQlyOSxyMTMsTU1TVEFUX0RTVEFUUytuYW1lOwkJCQkgICAgXAorCWJsCS50bGJfc3RhdF9pbmM7CisjZGVmaW5lIFRMQl9NSVNTX1NUQVRTX0kobmFtZSkJCQkJCQkgICAgXAorCWFkZGkJcjkscjEzLE1NU1RBVF9JU1RBVFMrbmFtZTsJCQkJICAgIFwKKwlibAkudGxiX3N0YXRfaW5jOworI2RlZmluZSBUTEJfTUlTU19TVEFUU19YKG5hbWUpCQkJCQkJICAgIFwKKwlsZAlyOCxQQUNBX0VYVExCK0VYX1RMQl9FU1IocjEzKTsJCQkJICAgIFwKKwljbXBkaQljcjIscjgsLTE7CQkJCQkJICAgIFwKKwliZXEJY3IyLDYxZjsJCQkJCQkgICAgXAorCWFkZGkJcjkscjEzLE1NU1RBVF9EU1RBVFMrbmFtZTsJCQkJICAgIFwKKwliCTYyZjsJCQkJCQkJICAgIFwKKzYxOglhZGRpCXI5LHIxMyxNTVNUQVRfSVNUQVRTK25hbWU7CQkJCSAgICBcCis2MjoJYmwJLnRsYl9zdGF0X2luYzsKKyNkZWZpbmUgVExCX01JU1NfU1RBVFNfU0FWRV9JTkZPCQkJCQkgICAgXAorCXN0ZAlyMTQsRVhfVExCX0VTUihyMTIpOwkvKiBzYXZlIEVTUiAqLwkJCSAgICBcCisKKworI2Vsc2UKKyNkZWZpbmUgVExCX01JU1NfUFJPTE9HX1NUQVRTCisjZGVmaW5lIFRMQl9NSVNTX1JFU1RPUkVfU1RBVFMKKyNkZWZpbmUgVExCX01JU1NfU1RBVFNfRChuYW1lKQorI2RlZmluZSBUTEJfTUlTU19TVEFUU19JKG5hbWUpCisjZGVmaW5lIFRMQl9NSVNTX1NUQVRTX1gobmFtZSkKKyNkZWZpbmUgVExCX01JU1NfU1RBVFNfWShuYW1lKQorI2RlZmluZSBUTEJfTUlTU19TVEFUU19TQVZFX0lORk8KKyNlbmRpZgorCisjZGVmaW5lIFNFVF9JVk9SKHZlY3Rvcl9udW1iZXIsIHZlY3Rvcl9vZmZzZXQpCVwKKwlsaQlyMyx2ZWN0b3Jfb2Zmc2V0QGw7IAkJXAorCW9yaQlyMyxyMyxpbnRlcnJ1cHRfYmFzZV9ib29rM2VAbDsJXAorCW10c3ByCVNQUk5fSVZPUiMjdmVjdG9yX251bWJlcixyMzsKKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19FWENFUFRJT05fNjRFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi02NHMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9leGNlcHRpb24tNjRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4NjUzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9leGNlcHRpb24tNjRzLmgKQEAgLTAsMCArMSwyODIgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0VYQ0VQVElPTl9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19FWENFUFRJT05fSAorLyoKKyAqIEV4dHJhY3RlZCBmcm9tIGhlYWRfNjQuUworICoKKyAqICBQb3dlclBDIHZlcnNpb24KKyAqICAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk2IEdhcnkgVGhvbWFzIChnZHRAbGludXhwcGMub3JnKQorICoKKyAqICBSZXdyaXR0ZW4gYnkgQ29ydCBEb3VnYW4gKGNvcnRAY3Mubm10LmVkdSkgZm9yIFBSZVAKKyAqICAgIENvcHlyaWdodCAoQykgMTk5NiBDb3J0IERvdWdhbiA8Y29ydEBjcy5ubXQuZWR1PgorICogIEFkYXB0ZWQgZm9yIFBvd2VyIE1hY2ludG9zaCBieSBQYXVsIE1hY2tlcnJhcy4KKyAqICBMb3ctbGV2ZWwgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZCBNTVUgc3VwcG9ydAorICogIHJld3JpdHRlbiBieSBQYXVsIE1hY2tlcnJhcy4KKyAqICAgIENvcHlyaWdodCAoQykgMTk5NiBQYXVsIE1hY2tlcnJhcy4KKyAqCisgKiAgQWRhcHRlZCBmb3IgNjRiaXQgUG93ZXJQQyBieSBEYXZlIEVuZ2VicmV0c2VuLCBQZXRlciBCZXJnbmVyLCBhbmQKKyAqICAgIE1pa2UgQ29ycmlnYW4ge2VuZ2VicmV0fGJlcmduZXJ8bWlrZWpjfUB1cy5pYm0uY29tCisgKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbG93LWxldmVsIHN1cHBvcnQgYW5kIHNldHVwIGZvciB0aGUKKyAqICBQb3dlclBDLTY0IHBsYXRmb3JtLCBpbmNsdWRpbmcgdHJhcCBhbmQgaW50ZXJydXB0IGRpc3BhdGNoLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisvKgorICogVGhlIGZvbGxvd2luZyBtYWNyb3MgZGVmaW5lIHRoZSBjb2RlIHRoYXQgYXBwZWFycyBhcworICogdGhlIHByb2xvZ3VlIHRvIGVhY2ggb2YgdGhlIGV4Y2VwdGlvbiBoYW5kbGVycy4gIFRoZXkKKyAqIGFyZSBzcGxpdCBpbnRvIHR3byBwYXJ0cyB0byBhbGxvdyBhIHNpbmdsZSBrZXJuZWwgYmluYXJ5CisgKiB0byBiZSB1c2VkIGZvciBwU2VyaWVzIGFuZCBpU2VyaWVzLgorICoKKyAqIFdlIG1ha2UgYXMgbXVjaCBvZiB0aGUgZXhjZXB0aW9uIGNvZGUgY29tbW9uIGJldHdlZW4gbmF0aXZlCisgKiBleGNlcHRpb24gaGFuZGxlcnMgKGluY2x1ZGluZyBwU2VyaWVzIExQQVIpIGFuZCBpU2VyaWVzIExQQVIKKyAqIGltcGxlbWVudGF0aW9ucyBhcyBwb3NzaWJsZS4KKyAqLworCisjZGVmaW5lIEVYX1I5CQkwCisjZGVmaW5lIEVYX1IxMAkJOAorI2RlZmluZSBFWF9SMTEJCTE2CisjZGVmaW5lIEVYX1IxMgkJMjQKKyNkZWZpbmUgRVhfUjEzCQkzMgorI2RlZmluZSBFWF9TUlIwCQk0MAorI2RlZmluZSBFWF9EQVIJCTQ4CisjZGVmaW5lIEVYX0RTSVNSCTU2CisjZGVmaW5lIEVYX0NDUgkJNjAKKyNkZWZpbmUgRVhfUjMJCTY0CisjZGVmaW5lIEVYX0xSCQk3MgorCisvKgorICogV2UncmUgc2hvcnQgb24gc3BhY2UgYW5kIHRpbWUgaW4gdGhlIGV4Y2VwdGlvbiBwcm9sb2csIHNvIHdlIGNhbid0CisgKiB1c2UgdGhlIG5vcm1hbCBTRVRfUkVHX0lNTUVESUFURSBtYWNyby4gTm9ybWFsbHkgd2UganVzdCBuZWVkIHRoZQorICogbG93IGhhbGZ3b3JkIG9mIHRoZSBhZGRyZXNzLCBidXQgZm9yIEtkdW1wIHdlIG5lZWQgdGhlIHdob2xlIGxvdworICogd29yZC4KKyAqLworI2RlZmluZSBMT0FEX0hBTkRMRVIocmVnLCBsYWJlbCkJCQkJCVwKKwlhZGRpCXJlZyxyZWcsKGxhYmVsKS1fc3RleHQ7CS8qIHZpcnQgYWRkciBvZiBoYW5kbGVyIC4uLiAqLworCisjZGVmaW5lIEVYQ0VQVElPTl9QUk9MT0dfMShhcmVhKQkJCQlcCisJbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBOwkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCVwKKwlzdGQJcjksYXJlYStFWF9SOShyMTMpOwkvKiBzYXZlIHI5IC0gcjEyICovCQlcCisJc3RkCXIxMCxhcmVhK0VYX1IxMChyMTMpOwkJCQkJXAorCXN0ZAlyMTEsYXJlYStFWF9SMTEocjEzKTsJCQkJCVwKKwlzdGQJcjEyLGFyZWErRVhfUjEyKHIxMyk7CQkJCQlcCisJbWZzcHIJcjksU1BSTl9TUFJHX1NDUkFUQ0gwOwkJCQkJXAorCXN0ZAlyOSxhcmVhK0VYX1IxMyhyMTMpOwkJCQkJXAorCW1mY3IJcjkKKworI2RlZmluZSBFWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfMShsYWJlbCkJCQkJXAorCWxkCXIxMixQQUNBS0JBU0UocjEzKTsJLyogZ2V0IGhpZ2ggcGFydCBvZiAmbGFiZWwgKi8JXAorCWxkCXIxMCxQQUNBS01TUihyMTMpOwkvKiBnZXQgTVNSIHZhbHVlIGZvciBrZXJuZWwgKi8JXAorCW1mc3ByCXIxMSxTUFJOX1NSUjA7CQkvKiBzYXZlIFNSUjAgKi8JCQlcCisJTE9BRF9IQU5ETEVSKHIxMixsYWJlbCkJCQkJCQlcCisJbXRzcHIJU1BSTl9TUlIwLHIxMjsJCQkJCQlcCisJbWZzcHIJcjEyLFNQUk5fU1JSMTsJCS8qIGFuZCBTUlIxICovCQkJXAorCW10c3ByCVNQUk5fU1JSMSxyMTA7CQkJCQkJXAorCXJmaWQ7CQkJCQkJCQlcCisJYgkuCS8qIHByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uICovCisKKyNkZWZpbmUgRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKGFyZWEsIGxhYmVsKQkJCQlcCisJRVhDRVBUSU9OX1BST0xPR18xKGFyZWEpOwkJCQkJXAorCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFU18xKGxhYmVsKTsKKworLyoKKyAqIFRoZSBjb21tb24gZXhjZXB0aW9uIHByb2xvZyBpcyB1c2VkIGZvciBhbGwgZXhjZXB0IGEgZmV3IGV4Y2VwdGlvbnMKKyAqIHN1Y2ggYXMgYSBzZWdtZW50IG1pc3Mgb24gYSBrZXJuZWwgYWRkcmVzcy4gIFdlIGhhdmUgdG8gYmUgcHJlcGFyZWQKKyAqIHRvIHRha2UgYW5vdGhlciBleGNlcHRpb24gZnJvbSB0aGUgcG9pbnQgd2hlcmUgd2UgZmlyc3QgdG91Y2ggdGhlCisgKiBrZXJuZWwgc3RhY2sgb253YXJkcy4KKyAqCisgKiBPbiBlbnRyeSByMTMgcG9pbnRzIHRvIHRoZSBwYWNhLCByOS1yMTMgYXJlIHNhdmVkIGluIHRoZSBwYWNhLAorICogcjkgY29udGFpbnMgdGhlIHNhdmVkIENSLCByMTEgYW5kIHIxMiBjb250YWluIHRoZSBzYXZlZCBTUlIwIGFuZAorICogU1JSMSwgYW5kIHJlbG9jYXRpb24gaXMgb24uCisgKi8KKyNkZWZpbmUgRVhDRVBUSU9OX1BST0xPR19DT01NT04obiwgYXJlYSkJCQkJICAgXAorCWFuZGkuCXIxMCxyMTIsTVNSX1BSOwkJLyogU2VlIGlmIGNvbWluZyBmcm9tIHVzZXIJKi8gXAorCW1yCXIxMCxyMTsJCQkvKiBTYXZlIHIxCQkJKi8gXAorCXN1YmkJcjEscjEsSU5UX0ZSQU1FX1NJWkU7CS8qIGFsbG9jIGZyYW1lIG9uIGtlcm5lbCBzdGFjawkqLyBcCisJYmVxLQkxZjsJCQkJCQkJICAgXAorCWxkCXIxLFBBQ0FLU0FWRShyMTMpOwkvKiBrZXJuZWwgc3RhY2sgdG8gdXNlCQkqLyBcCisxOgljbXBkaQljcjEscjEsMDsJCS8qIGNoZWNrIGlmIHIxIGlzIGluIHVzZXJzcGFjZQkqLyBcCisJYmdlLQljcjEsMmY7CQkJLyogYWJvcnQgaWYgaXQgaXMJCSovIFwKKwliCTNmOwkJCQkJCQkgICBcCisyOglsaQlyMSwobik7CQkJLyogd2lsbCBiZSByZWxvYWRlZCBsYXRlcgkqLyBcCisJc3RoCXIxLFBBQ0FfVFJBUF9TQVZFKHIxMyk7CQkJCQkgICBcCisJYgliYWRfc3RhY2s7CQkJCQkJICAgXAorMzoJc3RkCXI5LF9DQ1IocjEpOwkJLyogc2F2ZSBDUiBpbiBzdGFja2ZyYW1lCSovIFwKKwlzdGQJcjExLF9OSVAocjEpOwkJLyogc2F2ZSBTUlIwIGluIHN0YWNrZnJhbWUJKi8gXAorCXN0ZAlyMTIsX01TUihyMSk7CQkvKiBzYXZlIFNSUjEgaW4gc3RhY2tmcmFtZQkqLyBcCisJc3RkCXIxMCwwKHIxKTsJCS8qIG1ha2Ugc3RhY2sgY2hhaW4gcG9pbnRlcgkqLyBcCisJc3RkCXIwLEdQUjAocjEpOwkJLyogc2F2ZSByMCBpbiBzdGFja2ZyYW1lCSovIFwKKwlzdGQJcjEwLEdQUjEocjEpOwkJLyogc2F2ZSByMSBpbiBzdGFja2ZyYW1lCSovIFwKKwlBQ0NPVU5UX0NQVV9VU0VSX0VOVFJZKHI5LCByMTApOwkJCQkgICBcCisJc3RkCXIyLEdQUjIocjEpOwkJLyogc2F2ZSByMiBpbiBzdGFja2ZyYW1lCSovIFwKKwlTQVZFXzRHUFJTKDMsIHIxKTsJCS8qIHNhdmUgcjMgLSByNiBpbiBzdGFja2ZyYW1lCSovIFwKKwlTQVZFXzJHUFJTKDcsIHIxKTsJCS8qIHNhdmUgcjcsIHI4IGluIHN0YWNrZnJhbWUJKi8gXAorCWxkCXI5LGFyZWErRVhfUjkocjEzKTsJLyogbW92ZSByOSwgcjEwIHRvIHN0YWNrZnJhbWUJKi8gXAorCWxkCXIxMCxhcmVhK0VYX1IxMChyMTMpOwkJCQkJICAgXAorCXN0ZAlyOSxHUFI5KHIxKTsJCQkJCQkgICBcCisJc3RkCXIxMCxHUFIxMChyMSk7CQkJCQkJICAgXAorCWxkCXI5LGFyZWErRVhfUjExKHIxMyk7CS8qIG1vdmUgcjExIC0gcjEzIHRvIHN0YWNrZnJhbWUJKi8gXAorCWxkCXIxMCxhcmVhK0VYX1IxMihyMTMpOwkJCQkJICAgXAorCWxkCXIxMSxhcmVhK0VYX1IxMyhyMTMpOwkJCQkJICAgXAorCXN0ZAlyOSxHUFIxMShyMSk7CQkJCQkJICAgXAorCXN0ZAlyMTAsR1BSMTIocjEpOwkJCQkJCSAgIFwKKwlzdGQJcjExLEdQUjEzKHIxKTsJCQkJCQkgICBcCisJbGQJcjIsUEFDQVRPQyhyMTMpOwkvKiBnZXQga2VybmVsIFRPQyBpbnRvIHIyCSovIFwKKwltZmxyCXI5OwkJCS8qIHNhdmUgTFIgaW4gc3RhY2tmcmFtZQkqLyBcCisJc3RkCXI5LF9MSU5LKHIxKTsJCQkJCQkgICBcCisJbWZjdHIJcjEwOwkJCS8qIHNhdmUgQ1RSIGluIHN0YWNrZnJhbWUJKi8gXAorCXN0ZAlyMTAsX0NUUihyMSk7CQkJCQkJICAgXAorCWxieglyMTAsUEFDQVNPRlRJUlFFTihyMTMpOwkJCQkgICBcCisJbWZzcHIJcjExLFNQUk5fWEVSOwkJLyogc2F2ZSBYRVIgaW4gc3RhY2tmcmFtZQkqLyBcCisJc3RkCXIxMCxTT0ZURShyMSk7CQkJCQkJICAgXAorCXN0ZAlyMTEsX1hFUihyMSk7CQkJCQkJICAgXAorCWxpCXI5LChuKSsxOwkJCQkJCSAgIFwKKwlzdGQJcjksX1RSQVAocjEpOwkJLyogc2V0IHRyYXAgbnVtYmVyCQkqLyBcCisJbGkJcjEwLDA7CQkJCQkJCSAgIFwKKwlsZAlyMTEsZXhjZXB0aW9uX21hcmtlckB0b2MocjIpOwkJCQkgICBcCisJc3RkCXIxMCxSRVNVTFQocjEpOwkJLyogY2xlYXIgcmVncy0+cmVzdWx0CQkqLyBcCisJc3RkCXIxMSxTVEFDS19GUkFNRV9PVkVSSEVBRC0xNihyMSk7IC8qIG1hcmsgdGhlIGZyYW1lCSovCisKKy8qCisgKiBFeGNlcHRpb24gdmVjdG9ycy4KKyAqLworI2RlZmluZSBTVERfRVhDRVBUSU9OX1BTRVJJRVMobiwgbGFiZWwpCQkJXAorCS4gPSBuOwkJCQkJCVwKKwkuZ2xvYmwgbGFiZWwjI19wU2VyaWVzOwkJCQlcCitsYWJlbCMjX3BTZXJpZXM6CQkJCQlcCisJSE1UX01FRElVTTsJCQkJCVwKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzOwkJLyogc2F2ZSByMTMgKi8JXAorCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBsYWJlbCMjX2NvbW1vbikKKworI2RlZmluZSBIU1REX0VYQ0VQVElPTl9QU0VSSUVTKG4sIGxhYmVsKQkJXAorCS4gPSBuOwkJCQkJCVwKKwkuZ2xvYmwgbGFiZWwjI19wU2VyaWVzOwkJCQlcCitsYWJlbCMjX3BTZXJpZXM6CQkJCQlcCisJSE1UX01FRElVTTsJCQkJCVwKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjIwOwkvKiBzYXZlIHIyMCAqLwlcCisJbWZzcHIJcjIwLFNQUk5fSFNSUjA7CQkvKiBjb3B5IEhTUlIwIHRvIFNSUjAgKi8gXAorCW10c3ByCVNQUk5fU1JSMCxyMjA7CQkJCVwKKwltZnNwcglyMjAsU1BSTl9IU1JSMTsJCS8qIGNvcHkgSFNSUjAgdG8gU1JSMCAqLyBcCisJbXRzcHIJU1BSTl9TUlIxLHIyMDsJCQkJXAorCW1mc3ByCXIyMCxTUFJOX1NQUkdfU0NSQVRDSDA7CS8qIHJlc3RvcmUgcjIwICovIFwKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzOwkJLyogc2F2ZSByMTMgKi8JXAorCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBsYWJlbCMjX2NvbW1vbikKKworCisjZGVmaW5lIE1BU0tBQkxFX0VYQ0VQVElPTl9QU0VSSUVTKG4sIGxhYmVsKQkJCQlcCisJLiA9IG47CQkJCQkJCQlcCisJLmdsb2JsIGxhYmVsIyNfcFNlcmllczsJCQkJCQlcCitsYWJlbCMjX3BTZXJpZXM6CQkJCQkJCVwKKwlITVRfTUVESVVNOwkJCQkJCQlcCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLHIxMzsJLyogc2F2ZSByMTMgKi8JCQlcCisJbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBOwkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCVwKKwlzdGQJcjksUEFDQV9FWEdFTitFWF9SOShyMTMpOwkvKiBzYXZlIHI5LCByMTAgKi8JXAorCXN0ZAlyMTAsUEFDQV9FWEdFTitFWF9SMTAocjEzKTsJCQkJXAorCWxieglyMTAsUEFDQVNPRlRJUlFFTihyMTMpOwkJCQkJXAorCW1mY3IJcjk7CQkJCQkJCVwKKwljbXB3aQlyMTAsMDsJCQkJCQkJXAorCWJlcQltYXNrZWRfaW50ZXJydXB0OwkJCQkJXAorCW1mc3ByCXIxMCxTUFJOX1NQUkdfU0NSQVRDSDA7CQkJCQlcCisJc3RkCXIxMCxQQUNBX0VYR0VOK0VYX1IxMyhyMTMpOwkJCQlcCisJc3RkCXIxMSxQQUNBX0VYR0VOK0VYX1IxMShyMTMpOwkJCQlcCisJc3RkCXIxMixQQUNBX0VYR0VOK0VYX1IxMihyMTMpOwkJCQlcCisJbGQJcjEyLFBBQ0FLQkFTRShyMTMpOwkvKiBnZXQgaGlnaCBwYXJ0IG9mICZsYWJlbCAqLwlcCisJbGQJcjEwLFBBQ0FLTVNSKHIxMyk7CS8qIGdldCBNU1IgdmFsdWUgZm9yIGtlcm5lbCAqLwlcCisJbWZzcHIJcjExLFNQUk5fU1JSMDsJCS8qIHNhdmUgU1JSMCAqLwkJCVwKKwlMT0FEX0hBTkRMRVIocjEyLGxhYmVsIyNfY29tbW9uKQkJCQlcCisJbXRzcHIJU1BSTl9TUlIwLHIxMjsJCQkJCQlcCisJbWZzcHIJcjEyLFNQUk5fU1JSMTsJCS8qIGFuZCBTUlIxICovCQkJXAorCW10c3ByCVNQUk5fU1JSMSxyMTA7CQkJCQkJXAorCXJmaWQ7CQkJCQkJCQlcCisJYgkuCS8qIHByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uICovCisKKyNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKKyNkZWZpbmUgRElTQUJMRV9JTlRTCQkJCVwKKwlsaQlyMTEsMDsJCQkJXAorCXN0YglyMTEsUEFDQVNPRlRJUlFFTihyMTMpOwkJXAorQkVHSU5fRldfRlRSX1NFQ1RJT047CQkJCVwKKwlzdGIJcjExLFBBQ0FIQVJESVJRRU4ocjEzKTsJCVwKK0VORF9GV19GVFJfU0VDVElPTl9JRkNMUihGV19GRUFUVVJFX0lTRVJJRVMpOwlcCisJVFJBQ0VfRElTQUJMRV9JTlRTOwkJCVwKK0JFR0lOX0ZXX0ZUUl9TRUNUSU9OOwkJCQlcCisJbWZtc3IJcjEwOwkJCQlcCisJb3JpCXIxMCxyMTAsTVNSX0VFOwkJCVwKKwltdG1zcmQJcjEwLDE7CQkJCVwKK0VORF9GV19GVFJfU0VDVElPTl9JRlNFVChGV19GRUFUVVJFX0lTRVJJRVMpCisjZWxzZQorI2RlZmluZSBESVNBQkxFX0lOVFMJCQkJXAorCWxpCXIxMSwwOwkJCQlcCisJc3RiCXIxMSxQQUNBU09GVElSUUVOKHIxMyk7CQlcCisJc3RiCXIxMSxQQUNBSEFSRElSUUVOKHIxMyk7CQlcCisJVFJBQ0VfRElTQUJMRV9JTlRTCisjZW5kaWYgLyogQ09ORklHX1BQQ19JU0VSSUVTICovCisKKyNkZWZpbmUgRU5BQkxFX0lOVFMJCQkJXAorCWxkCXIxMixfTVNSKHIxKTsJCQlcCisJbWZtc3IJcjExOwkJCQlcCisJcmx3aW1pCXIxMSxyMTIsMCxNU1JfRUU7CQlcCisJbXRtc3JkCXIxMSwxCisKKyNkZWZpbmUgU1REX0VYQ0VQVElPTl9DT01NT04odHJhcCwgbGFiZWwsIGhkbHIpCQlcCisJLmFsaWduCTc7CQkJCQlcCisJLmdsb2JsIGxhYmVsIyNfY29tbW9uOwkJCQlcCitsYWJlbCMjX2NvbW1vbjoJCQkJCQlcCisJRVhDRVBUSU9OX1BST0xPR19DT01NT04odHJhcCwgUEFDQV9FWEdFTik7CVwKKwlESVNBQkxFX0lOVFM7CQkJCQlcCisJYmwJLnNhdmVfbnZncHJzOwkJCQlcCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsJCVwKKwlibAloZGxyOwkJCQkJXAorCWIJLnJldF9mcm9tX2V4Y2VwdAorCisvKgorICogTGlrZSBTVERfRVhDRVBUSU9OX0NPTU1PTiwgYnV0IGZvciBleGNlcHRpb25zIHRoYXQgY2FuIG9jY3VyCisgKiBpbiB0aGUgaWRsZSB0YXNrIGFuZCB0aGVyZWZvcmUgbmVlZCB0aGUgc3BlY2lhbCBpZGxlIGhhbmRsaW5nLgorICovCisjZGVmaW5lIFNURF9FWENFUFRJT05fQ09NTU9OX0lETEUodHJhcCwgbGFiZWwsIGhkbHIpCVwKKwkuYWxpZ24JNzsJCQkJCVwKKwkuZ2xvYmwgbGFiZWwjI19jb21tb247CQkJCVwKK2xhYmVsIyNfY29tbW9uOgkJCQkJCVwKKwlFWENFUFRJT05fUFJPTE9HX0NPTU1PTih0cmFwLCBQQUNBX0VYR0VOKTsJXAorCUZJTklTSF9OQVA7CQkJCQlcCisJRElTQUJMRV9JTlRTOwkJCQkJXAorCWJsCS5zYXZlX252Z3ByczsJCQkJXAorCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQlcCisJYmwJaGRscjsJCQkJCVwKKwliCS5yZXRfZnJvbV9leGNlcHQKKworI2RlZmluZSBTVERfRVhDRVBUSU9OX0NPTU1PTl9MSVRFKHRyYXAsIGxhYmVsLCBoZGxyKQlcCisJLmFsaWduCTc7CQkJCQlcCisJLmdsb2JsIGxhYmVsIyNfY29tbW9uOwkJCQlcCitsYWJlbCMjX2NvbW1vbjoJCQkJCQlcCisJRVhDRVBUSU9OX1BST0xPR19DT01NT04odHJhcCwgUEFDQV9FWEdFTik7CVwKKwlGSU5JU0hfTkFQOwkJCQkJXAorCURJU0FCTEVfSU5UUzsJCQkJCVwKK0JFR0lOX0ZUUl9TRUNUSU9OCQkJCQlcCisJYmwJLnBwYzY0X3J1bmxhdGNoX29uOwkJCVwKK0VORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0NUUkwpCQkJXAorCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQlcCisJYmwJaGRscjsJCQkJCVwKKwliCS5yZXRfZnJvbV9leGNlcHRfbGl0ZQorCisvKgorICogV2hlbiB0aGUgaWRsZSBjb2RlIGluIHBvd2VyNF9pZGxlIHB1dHMgdGhlIENQVSBpbnRvIE5BUCBtb2RlLAorICogaXQgaGFzIHRvIGRvIHNvIGluIGEgbG9vcCwgYW5kIHJlbGllcyBvbiB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0CisgKiBhbmQgZGVjcmVtZW50ZXIgaW50ZXJydXB0IGVudHJ5IGNvZGUgdG8gZ2V0IGl0IG91dCBvZiB0aGUgbG9vcC4KKyAqIEl0IHNldHMgdGhlIF9UTEZfTkFQUElORyBiaXQgaW4gY3VycmVudF90aHJlYWRfaW5mbygpLT5sb2NhbF9mbGFncworICogdG8gc2lnbmFsIHRoYXQgaXQgaXMgaW4gdGhlIGxvb3AgYW5kIG5lZWRzIGhlbHAgdG8gZ2V0IG91dC4KKyAqLworI2lmZGVmIENPTkZJR19QUENfOTcwX05BUAorI2RlZmluZSBGSU5JU0hfTkFQCQkJCVwKK0JFR0lOX0ZUUl9TRUNUSU9OCQkJCVwKKwljbHJyZGkJcjExLHIxLFRIUkVBRF9TSElGVDsJCVwKKwlsZAlyOSxUSV9MT0NBTF9GTEFHUyhyMTEpOwkJXAorCWFuZGkuCXIxMCxyOSxfVExGX05BUFBJTkc7CQlcCisJYm5lbAlwb3dlcjRfZml4dXBfbmFwOwkJXAorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQ0FOX05BUCkKKyNlbHNlCisjZGVmaW5lIEZJTklTSF9OQVAKKyNlbmRpZgorCisjZW5kaWYJLyogX0FTTV9QT1dFUlBDX0VYQ0VQVElPTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZXhjZXB0aW9uLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZXhjZXB0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZDQ1MzQuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjc5ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX0VYQ0VQVElPTl9ICi0jZGVmaW5lIF9BU01fUE9XRVJQQ19FWENFUFRJT05fSAotLyoKLSAqIEV4dHJhY3RlZCBmcm9tIGhlYWRfNjQuUwotICoKLSAqICBQb3dlclBDIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk2IEdhcnkgVGhvbWFzIChnZHRAbGludXhwcGMub3JnKQotICoKLSAqICBSZXdyaXR0ZW4gYnkgQ29ydCBEb3VnYW4gKGNvcnRAY3Mubm10LmVkdSkgZm9yIFBSZVAKLSAqICAgIENvcHlyaWdodCAoQykgMTk5NiBDb3J0IERvdWdhbiA8Y29ydEBjcy5ubXQuZWR1PgotICogIEFkYXB0ZWQgZm9yIFBvd2VyIE1hY2ludG9zaCBieSBQYXVsIE1hY2tlcnJhcy4KLSAqICBMb3ctbGV2ZWwgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZCBNTVUgc3VwcG9ydAotICogIHJld3JpdHRlbiBieSBQYXVsIE1hY2tlcnJhcy4KLSAqICAgIENvcHlyaWdodCAoQykgMTk5NiBQYXVsIE1hY2tlcnJhcy4KLSAqCi0gKiAgQWRhcHRlZCBmb3IgNjRiaXQgUG93ZXJQQyBieSBEYXZlIEVuZ2VicmV0c2VuLCBQZXRlciBCZXJnbmVyLCBhbmQKLSAqICAgIE1pa2UgQ29ycmlnYW4ge2VuZ2VicmV0fGJlcmduZXJ8bWlrZWpjfUB1cy5pYm0uY29tCi0gKgotICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbG93LWxldmVsIHN1cHBvcnQgYW5kIHNldHVwIGZvciB0aGUKLSAqICBQb3dlclBDLTY0IHBsYXRmb3JtLCBpbmNsdWRpbmcgdHJhcCBhbmQgaW50ZXJydXB0IGRpc3BhdGNoLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0vKgotICogVGhlIGZvbGxvd2luZyBtYWNyb3MgZGVmaW5lIHRoZSBjb2RlIHRoYXQgYXBwZWFycyBhcwotICogdGhlIHByb2xvZ3VlIHRvIGVhY2ggb2YgdGhlIGV4Y2VwdGlvbiBoYW5kbGVycy4gIFRoZXkKLSAqIGFyZSBzcGxpdCBpbnRvIHR3byBwYXJ0cyB0byBhbGxvdyBhIHNpbmdsZSBrZXJuZWwgYmluYXJ5Ci0gKiB0byBiZSB1c2VkIGZvciBwU2VyaWVzIGFuZCBpU2VyaWVzLgotICoKLSAqIFdlIG1ha2UgYXMgbXVjaCBvZiB0aGUgZXhjZXB0aW9uIGNvZGUgY29tbW9uIGJldHdlZW4gbmF0aXZlCi0gKiBleGNlcHRpb24gaGFuZGxlcnMgKGluY2x1ZGluZyBwU2VyaWVzIExQQVIpIGFuZCBpU2VyaWVzIExQQVIKLSAqIGltcGxlbWVudGF0aW9ucyBhcyBwb3NzaWJsZS4KLSAqLwotCi0jZGVmaW5lIEVYX1I5CQkwCi0jZGVmaW5lIEVYX1IxMAkJOAotI2RlZmluZSBFWF9SMTEJCTE2Ci0jZGVmaW5lIEVYX1IxMgkJMjQKLSNkZWZpbmUgRVhfUjEzCQkzMgotI2RlZmluZSBFWF9TUlIwCQk0MAotI2RlZmluZSBFWF9EQVIJCTQ4Ci0jZGVmaW5lIEVYX0RTSVNSCTU2Ci0jZGVmaW5lIEVYX0NDUgkJNjAKLSNkZWZpbmUgRVhfUjMJCTY0Ci0jZGVmaW5lIEVYX0xSCQk3MgotCi0vKgotICogV2UncmUgc2hvcnQgb24gc3BhY2UgYW5kIHRpbWUgaW4gdGhlIGV4Y2VwdGlvbiBwcm9sb2csIHNvIHdlIGNhbid0Ci0gKiB1c2UgdGhlIG5vcm1hbCBTRVRfUkVHX0lNTUVESUFURSBtYWNyby4gTm9ybWFsbHkgd2UganVzdCBuZWVkIHRoZQotICogbG93IGhhbGZ3b3JkIG9mIHRoZSBhZGRyZXNzLCBidXQgZm9yIEtkdW1wIHdlIG5lZWQgdGhlIHdob2xlIGxvdwotICogd29yZC4KLSAqLwotI2RlZmluZSBMT0FEX0hBTkRMRVIocmVnLCBsYWJlbCkJCQkJCVwKLQlhZGRpCXJlZyxyZWcsKGxhYmVsKS1fc3RleHQ7CS8qIHZpcnQgYWRkciBvZiBoYW5kbGVyIC4uLiAqLwotCi0jZGVmaW5lIEVYQ0VQVElPTl9QUk9MT0dfMShhcmVhKQkJCQlcCi0JbWZzcHIJcjEzLFNQUk5fU1BSRzM7CQkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCVwKLQlzdGQJcjksYXJlYStFWF9SOShyMTMpOwkvKiBzYXZlIHI5IC0gcjEyICovCQlcCi0Jc3RkCXIxMCxhcmVhK0VYX1IxMChyMTMpOwkJCQkJXAotCXN0ZAlyMTEsYXJlYStFWF9SMTEocjEzKTsJCQkJCVwKLQlzdGQJcjEyLGFyZWErRVhfUjEyKHIxMyk7CQkJCQlcCi0JbWZzcHIJcjksU1BSTl9TUFJHMTsJCQkJCQlcCi0Jc3RkCXI5LGFyZWErRVhfUjEzKHIxMyk7CQkJCQlcCi0JbWZjcglyOQotCi0jZGVmaW5lIEVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhhcmVhLCBsYWJlbCkJCQkJXAotCUVYQ0VQVElPTl9QUk9MT0dfMShhcmVhKTsJCQkJCVwKLQlsZAlyMTIsUEFDQUtCQVNFKHIxMyk7CS8qIGdldCBoaWdoIHBhcnQgb2YgJmxhYmVsICovCVwKLQlsZAlyMTAsUEFDQUtNU1IocjEzKTsJLyogZ2V0IE1TUiB2YWx1ZSBmb3Iga2VybmVsICovCVwKLQltZnNwcglyMTEsU1BSTl9TUlIwOwkJLyogc2F2ZSBTUlIwICovCQkJXAotCUxPQURfSEFORExFUihyMTIsbGFiZWwpCQkJCQkJXAotCW10c3ByCVNQUk5fU1JSMCxyMTI7CQkJCQkJXAotCW1mc3ByCXIxMixTUFJOX1NSUjE7CQkvKiBhbmQgU1JSMSAqLwkJCVwKLQltdHNwcglTUFJOX1NSUjEscjEwOwkJCQkJCVwKLQlyZmlkOwkJCQkJCQkJXAotCWIJLgkvKiBwcmV2ZW50IHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiAqLwotCi0vKgotICogVGhlIGNvbW1vbiBleGNlcHRpb24gcHJvbG9nIGlzIHVzZWQgZm9yIGFsbCBleGNlcHQgYSBmZXcgZXhjZXB0aW9ucwotICogc3VjaCBhcyBhIHNlZ21lbnQgbWlzcyBvbiBhIGtlcm5lbCBhZGRyZXNzLiAgV2UgaGF2ZSB0byBiZSBwcmVwYXJlZAotICogdG8gdGFrZSBhbm90aGVyIGV4Y2VwdGlvbiBmcm9tIHRoZSBwb2ludCB3aGVyZSB3ZSBmaXJzdCB0b3VjaCB0aGUKLSAqIGtlcm5lbCBzdGFjayBvbndhcmRzLgotICoKLSAqIE9uIGVudHJ5IHIxMyBwb2ludHMgdG8gdGhlIHBhY2EsIHI5LXIxMyBhcmUgc2F2ZWQgaW4gdGhlIHBhY2EsCi0gKiByOSBjb250YWlucyB0aGUgc2F2ZWQgQ1IsIHIxMSBhbmQgcjEyIGNvbnRhaW4gdGhlIHNhdmVkIFNSUjAgYW5kCi0gKiBTUlIxLCBhbmQgcmVsb2NhdGlvbiBpcyBvbi4KLSAqLwotI2RlZmluZSBFWENFUFRJT05fUFJPTE9HX0NPTU1PTihuLCBhcmVhKQkJCQkgICBcCi0JYW5kaS4JcjEwLHIxMixNU1JfUFI7CQkvKiBTZWUgaWYgY29taW5nIGZyb20gdXNlcgkqLyBcCi0JbXIJcjEwLHIxOwkJCS8qIFNhdmUgcjEJCQkqLyBcCi0Jc3ViaQlyMSxyMSxJTlRfRlJBTUVfU0laRTsJLyogYWxsb2MgZnJhbWUgb24ga2VybmVsIHN0YWNrCSovIFwKLQliZXEtCTFmOwkJCQkJCQkgICBcCi0JbGQJcjEsUEFDQUtTQVZFKHIxMyk7CS8qIGtlcm5lbCBzdGFjayB0byB1c2UJCSovIFwKLTE6CWNtcGRpCWNyMSxyMSwwOwkJLyogY2hlY2sgaWYgcjEgaXMgaW4gdXNlcnNwYWNlCSovIFwKLQliZ2UtCWNyMSwyZjsJCQkvKiBhYm9ydCBpZiBpdCBpcwkJKi8gXAotCWIJM2Y7CQkJCQkJCSAgIFwKLTI6CWxpCXIxLChuKTsJCQkvKiB3aWxsIGJlIHJlbG9hZGVkIGxhdGVyCSovIFwKLQlzdGgJcjEsUEFDQV9UUkFQX1NBVkUocjEzKTsJCQkJCSAgIFwKLQliCWJhZF9zdGFjazsJCQkJCQkgICBcCi0zOglzdGQJcjksX0NDUihyMSk7CQkvKiBzYXZlIENSIGluIHN0YWNrZnJhbWUJKi8gXAotCXN0ZAlyMTEsX05JUChyMSk7CQkvKiBzYXZlIFNSUjAgaW4gc3RhY2tmcmFtZQkqLyBcCi0Jc3RkCXIxMixfTVNSKHIxKTsJCS8qIHNhdmUgU1JSMSBpbiBzdGFja2ZyYW1lCSovIFwKLQlzdGQJcjEwLDAocjEpOwkJLyogbWFrZSBzdGFjayBjaGFpbiBwb2ludGVyCSovIFwKLQlzdGQJcjAsR1BSMChyMSk7CQkvKiBzYXZlIHIwIGluIHN0YWNrZnJhbWUJKi8gXAotCXN0ZAlyMTAsR1BSMShyMSk7CQkvKiBzYXZlIHIxIGluIHN0YWNrZnJhbWUJKi8gXAotCUFDQ09VTlRfQ1BVX1VTRVJfRU5UUlkocjksIHIxMCk7CQkJCSAgIFwKLQlzdGQJcjIsR1BSMihyMSk7CQkvKiBzYXZlIHIyIGluIHN0YWNrZnJhbWUJKi8gXAotCVNBVkVfNEdQUlMoMywgcjEpOwkJLyogc2F2ZSByMyAtIHI2IGluIHN0YWNrZnJhbWUJKi8gXAotCVNBVkVfMkdQUlMoNywgcjEpOwkJLyogc2F2ZSByNywgcjggaW4gc3RhY2tmcmFtZQkqLyBcCi0JbGQJcjksYXJlYStFWF9SOShyMTMpOwkvKiBtb3ZlIHI5LCByMTAgdG8gc3RhY2tmcmFtZQkqLyBcCi0JbGQJcjEwLGFyZWErRVhfUjEwKHIxMyk7CQkJCQkgICBcCi0Jc3RkCXI5LEdQUjkocjEpOwkJCQkJCSAgIFwKLQlzdGQJcjEwLEdQUjEwKHIxKTsJCQkJCQkgICBcCi0JbGQJcjksYXJlYStFWF9SMTEocjEzKTsJLyogbW92ZSByMTEgLSByMTMgdG8gc3RhY2tmcmFtZQkqLyBcCi0JbGQJcjEwLGFyZWErRVhfUjEyKHIxMyk7CQkJCQkgICBcCi0JbGQJcjExLGFyZWErRVhfUjEzKHIxMyk7CQkJCQkgICBcCi0Jc3RkCXI5LEdQUjExKHIxKTsJCQkJCQkgICBcCi0Jc3RkCXIxMCxHUFIxMihyMSk7CQkJCQkJICAgXAotCXN0ZAlyMTEsR1BSMTMocjEpOwkJCQkJCSAgIFwKLQlsZAlyMixQQUNBVE9DKHIxMyk7CS8qIGdldCBrZXJuZWwgVE9DIGludG8gcjIJKi8gXAotCW1mbHIJcjk7CQkJLyogc2F2ZSBMUiBpbiBzdGFja2ZyYW1lCSovIFwKLQlzdGQJcjksX0xJTksocjEpOwkJCQkJCSAgIFwKLQltZmN0cglyMTA7CQkJLyogc2F2ZSBDVFIgaW4gc3RhY2tmcmFtZQkqLyBcCi0Jc3RkCXIxMCxfQ1RSKHIxKTsJCQkJCQkgICBcCi0JbGJ6CXIxMCxQQUNBU09GVElSUUVOKHIxMyk7CQkJCSAgIFwKLQltZnNwcglyMTEsU1BSTl9YRVI7CQkvKiBzYXZlIFhFUiBpbiBzdGFja2ZyYW1lCSovIFwKLQlzdGQJcjEwLFNPRlRFKHIxKTsJCQkJCQkgICBcCi0Jc3RkCXIxMSxfWEVSKHIxKTsJCQkJCQkgICBcCi0JbGkJcjksKG4pKzE7CQkJCQkJICAgXAotCXN0ZAlyOSxfVFJBUChyMSk7CQkvKiBzZXQgdHJhcCBudW1iZXIJCSovIFwKLQlsaQlyMTAsMDsJCQkJCQkJICAgXAotCWxkCXIxMSxleGNlcHRpb25fbWFya2VyQHRvYyhyMik7CQkJCSAgIFwKLQlzdGQJcjEwLFJFU1VMVChyMSk7CQkvKiBjbGVhciByZWdzLT5yZXN1bHQJCSovIFwKLQlzdGQJcjExLFNUQUNLX0ZSQU1FX09WRVJIRUFELTE2KHIxKTsgLyogbWFyayB0aGUgZnJhbWUJKi8KLQotLyoKLSAqIEV4Y2VwdGlvbiB2ZWN0b3JzLgotICovCi0jZGVmaW5lIFNURF9FWENFUFRJT05fUFNFUklFUyhuLCBsYWJlbCkJCQlcCi0JLiA9IG47CQkJCQkJXAotCS5nbG9ibCBsYWJlbCMjX3BTZXJpZXM7CQkJCVwKLWxhYmVsIyNfcFNlcmllczoJCQkJCVwKLQlITVRfTUVESVVNOwkJCQkJXAotCW10c3ByCVNQUk5fU1BSRzEscjEzOwkJLyogc2F2ZSByMTMgKi8JXAotCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBsYWJlbCMjX2NvbW1vbikKLQotI2RlZmluZSBIU1REX0VYQ0VQVElPTl9QU0VSSUVTKG4sIGxhYmVsKQkJXAotCS4gPSBuOwkJCQkJCVwKLQkuZ2xvYmwgbGFiZWwjI19wU2VyaWVzOwkJCQlcCi1sYWJlbCMjX3BTZXJpZXM6CQkJCQlcCi0JSE1UX01FRElVTTsJCQkJCVwKLQltdHNwcglTUFJOX1NQUkcxLHIyMDsJCS8qIHNhdmUgcjIwICovCVwKLQltZnNwcglyMjAsU1BSTl9IU1JSMDsJCS8qIGNvcHkgSFNSUjAgdG8gU1JSMCAqLyBcCi0JbXRzcHIJU1BSTl9TUlIwLHIyMDsJCQkJXAotCW1mc3ByCXIyMCxTUFJOX0hTUlIxOwkJLyogY29weSBIU1JSMCB0byBTUlIwICovIFwKLQltdHNwcglTUFJOX1NSUjEscjIwOwkJCQlcCi0JbWZzcHIJcjIwLFNQUk5fU1BSRzE7CQkvKiByZXN0b3JlIHIyMCAqLyBcCi0JbXRzcHIJU1BSTl9TUFJHMSxyMTM7CQkvKiBzYXZlIHIxMyAqLwlcCi0JRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhHRU4sIGxhYmVsIyNfY29tbW9uKQotCi0KLSNkZWZpbmUgTUFTS0FCTEVfRVhDRVBUSU9OX1BTRVJJRVMobiwgbGFiZWwpCQkJCVwKLQkuID0gbjsJCQkJCQkJCVwKLQkuZ2xvYmwgbGFiZWwjI19wU2VyaWVzOwkJCQkJCVwKLWxhYmVsIyNfcFNlcmllczoJCQkJCQkJXAotCUhNVF9NRURJVU07CQkJCQkJCVwKLQltdHNwcglTUFJOX1NQUkcxLHIxMzsJCS8qIHNhdmUgcjEzICovCQkJXAotCW1mc3ByCXIxMyxTUFJOX1NQUkczOwkJLyogZ2V0IHBhY2EgYWRkcmVzcyBpbnRvIHIxMyAqLwlcCi0Jc3RkCXI5LFBBQ0FfRVhHRU4rRVhfUjkocjEzKTsJLyogc2F2ZSByOSwgcjEwICovCVwKLQlzdGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEwKHIxMyk7CQkJCVwKLQlsYnoJcjEwLFBBQ0FTT0ZUSVJRRU4ocjEzKTsJCQkJCVwKLQltZmNyCXI5OwkJCQkJCQlcCi0JY21wd2kJcjEwLDA7CQkJCQkJCVwKLQliZXEJbWFza2VkX2ludGVycnVwdDsJCQkJCVwKLQltZnNwcglyMTAsU1BSTl9TUFJHMTsJCQkJCQlcCi0Jc3RkCXIxMCxQQUNBX0VYR0VOK0VYX1IxMyhyMTMpOwkJCQlcCi0Jc3RkCXIxMSxQQUNBX0VYR0VOK0VYX1IxMShyMTMpOwkJCQlcCi0Jc3RkCXIxMixQQUNBX0VYR0VOK0VYX1IxMihyMTMpOwkJCQlcCi0JbGQJcjEyLFBBQ0FLQkFTRShyMTMpOwkvKiBnZXQgaGlnaCBwYXJ0IG9mICZsYWJlbCAqLwlcCi0JbGQJcjEwLFBBQ0FLTVNSKHIxMyk7CS8qIGdldCBNU1IgdmFsdWUgZm9yIGtlcm5lbCAqLwlcCi0JbWZzcHIJcjExLFNQUk5fU1JSMDsJCS8qIHNhdmUgU1JSMCAqLwkJCVwKLQlMT0FEX0hBTkRMRVIocjEyLGxhYmVsIyNfY29tbW9uKQkJCQlcCi0JbXRzcHIJU1BSTl9TUlIwLHIxMjsJCQkJCQlcCi0JbWZzcHIJcjEyLFNQUk5fU1JSMTsJCS8qIGFuZCBTUlIxICovCQkJXAotCW10c3ByCVNQUk5fU1JSMSxyMTA7CQkJCQkJXAotCXJmaWQ7CQkJCQkJCQlcCi0JYgkuCS8qIHByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uICovCi0KLSNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKLSNkZWZpbmUgRElTQUJMRV9JTlRTCQkJCVwKLQlsaQlyMTEsMDsJCQkJXAotCXN0YglyMTEsUEFDQVNPRlRJUlFFTihyMTMpOwkJXAotQkVHSU5fRldfRlRSX1NFQ1RJT047CQkJCVwKLQlzdGIJcjExLFBBQ0FIQVJESVJRRU4ocjEzKTsJCVwKLUVORF9GV19GVFJfU0VDVElPTl9JRkNMUihGV19GRUFUVVJFX0lTRVJJRVMpOwlcCi0JVFJBQ0VfRElTQUJMRV9JTlRTOwkJCVwKLUJFR0lOX0ZXX0ZUUl9TRUNUSU9OOwkJCQlcCi0JbWZtc3IJcjEwOwkJCQlcCi0Jb3JpCXIxMCxyMTAsTVNSX0VFOwkJCVwKLQltdG1zcmQJcjEwLDE7CQkJCVwKLUVORF9GV19GVFJfU0VDVElPTl9JRlNFVChGV19GRUFUVVJFX0lTRVJJRVMpCi0jZWxzZQotI2RlZmluZSBESVNBQkxFX0lOVFMJCQkJXAotCWxpCXIxMSwwOwkJCQlcCi0Jc3RiCXIxMSxQQUNBU09GVElSUUVOKHIxMyk7CQlcCi0Jc3RiCXIxMSxQQUNBSEFSRElSUUVOKHIxMyk7CQlcCi0JVFJBQ0VfRElTQUJMRV9JTlRTCi0jZW5kaWYgLyogQ09ORklHX1BQQ19JU0VSSUVTICovCi0KLSNkZWZpbmUgRU5BQkxFX0lOVFMJCQkJXAotCWxkCXIxMixfTVNSKHIxKTsJCQlcCi0JbWZtc3IJcjExOwkJCQlcCi0Jcmx3aW1pCXIxMSxyMTIsMCxNU1JfRUU7CQlcCi0JbXRtc3JkCXIxMSwxCi0KLSNkZWZpbmUgU1REX0VYQ0VQVElPTl9DT01NT04odHJhcCwgbGFiZWwsIGhkbHIpCQlcCi0JLmFsaWduCTc7CQkJCQlcCi0JLmdsb2JsIGxhYmVsIyNfY29tbW9uOwkJCQlcCi1sYWJlbCMjX2NvbW1vbjoJCQkJCQlcCi0JRVhDRVBUSU9OX1BST0xPR19DT01NT04odHJhcCwgUEFDQV9FWEdFTik7CVwKLQlESVNBQkxFX0lOVFM7CQkJCQlcCi0JYmwJLnNhdmVfbnZncHJzOwkJCQlcCi0JYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsJCVwKLQlibAloZGxyOwkJCQkJXAotCWIJLnJldF9mcm9tX2V4Y2VwdAotCi0vKgotICogTGlrZSBTVERfRVhDRVBUSU9OX0NPTU1PTiwgYnV0IGZvciBleGNlcHRpb25zIHRoYXQgY2FuIG9jY3VyCi0gKiBpbiB0aGUgaWRsZSB0YXNrIGFuZCB0aGVyZWZvcmUgbmVlZCB0aGUgc3BlY2lhbCBpZGxlIGhhbmRsaW5nLgotICovCi0jZGVmaW5lIFNURF9FWENFUFRJT05fQ09NTU9OX0lETEUodHJhcCwgbGFiZWwsIGhkbHIpCVwKLQkuYWxpZ24JNzsJCQkJCVwKLQkuZ2xvYmwgbGFiZWwjI19jb21tb247CQkJCVwKLWxhYmVsIyNfY29tbW9uOgkJCQkJCVwKLQlFWENFUFRJT05fUFJPTE9HX0NPTU1PTih0cmFwLCBQQUNBX0VYR0VOKTsJXAotCUZJTklTSF9OQVA7CQkJCQlcCi0JRElTQUJMRV9JTlRTOwkJCQkJXAotCWJsCS5zYXZlX252Z3ByczsJCQkJXAotCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQlcCi0JYmwJaGRscjsJCQkJCVwKLQliCS5yZXRfZnJvbV9leGNlcHQKLQotI2RlZmluZSBTVERfRVhDRVBUSU9OX0NPTU1PTl9MSVRFKHRyYXAsIGxhYmVsLCBoZGxyKQlcCi0JLmFsaWduCTc7CQkJCQlcCi0JLmdsb2JsIGxhYmVsIyNfY29tbW9uOwkJCQlcCi1sYWJlbCMjX2NvbW1vbjoJCQkJCQlcCi0JRVhDRVBUSU9OX1BST0xPR19DT01NT04odHJhcCwgUEFDQV9FWEdFTik7CVwKLQlGSU5JU0hfTkFQOwkJCQkJXAotCURJU0FCTEVfSU5UUzsJCQkJCVwKLUJFR0lOX0ZUUl9TRUNUSU9OCQkJCQlcCi0JYmwJLnBwYzY0X3J1bmxhdGNoX29uOwkJCVwKLUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0NUUkwpCQkJXAotCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQlcCi0JYmwJaGRscjsJCQkJCVwKLQliCS5yZXRfZnJvbV9leGNlcHRfbGl0ZQotCi0vKgotICogV2hlbiB0aGUgaWRsZSBjb2RlIGluIHBvd2VyNF9pZGxlIHB1dHMgdGhlIENQVSBpbnRvIE5BUCBtb2RlLAotICogaXQgaGFzIHRvIGRvIHNvIGluIGEgbG9vcCwgYW5kIHJlbGllcyBvbiB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0Ci0gKiBhbmQgZGVjcmVtZW50ZXIgaW50ZXJydXB0IGVudHJ5IGNvZGUgdG8gZ2V0IGl0IG91dCBvZiB0aGUgbG9vcC4KLSAqIEl0IHNldHMgdGhlIF9UTEZfTkFQUElORyBiaXQgaW4gY3VycmVudF90aHJlYWRfaW5mbygpLT5sb2NhbF9mbGFncwotICogdG8gc2lnbmFsIHRoYXQgaXQgaXMgaW4gdGhlIGxvb3AgYW5kIG5lZWRzIGhlbHAgdG8gZ2V0IG91dC4KLSAqLwotI2lmZGVmIENPTkZJR19QUENfOTcwX05BUAotI2RlZmluZSBGSU5JU0hfTkFQCQkJCVwKLUJFR0lOX0ZUUl9TRUNUSU9OCQkJCVwKLQljbHJyZGkJcjExLHIxLFRIUkVBRF9TSElGVDsJCVwKLQlsZAlyOSxUSV9MT0NBTF9GTEFHUyhyMTEpOwkJXAotCWFuZGkuCXIxMCxyOSxfVExGX05BUFBJTkc7CQlcCi0JYm5lbAlwb3dlcjRfZml4dXBfbmFwOwkJXAotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQ0FOX05BUCkKLSNlbHNlCi0jZGVmaW5lIEZJTklTSF9OQVAKLSNlbmRpZgotCi0jZW5kaWYJLyogX0FTTV9QT1dFUlBDX0VYQ0VQVElPTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCAyODhlMTRkLi5mYjNjMDVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTEsMjkgKzEgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX0hBUkRJUlFfSAotI2RlZmluZSBfQVNNX1BPV0VSUENfSEFSRElSUV9ICi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9idWcuaD4KLQotLyogVGhlIF9fbGFzdF9qaWZmeV9zdGFtcCBmaWVsZCBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgbm8gZGVjcmVtZW50ZXIKLSAqIGludGVycnVwdCBpcyBsb3N0IG9uIFNNUCBtYWNoaW5lcy4gU2luY2Ugb24gbW9zdCBDUFVzIGl0IGlzIGluIHRoZSBzYW1lCi0gKiBjYWNoZSBsaW5lIGFzIGxvY2FsX2lycV9jb3VudCwgaXQgaXMgY2hlYXAgdG8gYWNjZXNzIGFuZCBpcyBhbHNvIHVzZWQgb24gVVAKLSAqIGZvciB1bmlmb3JtaXR5LgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwkvKiBzZXRfYml0IGlzIHVzZWQgb24gdGhpcyAqLwotCXVuc2lnbmVkIGludCBfX2xhc3RfamlmZnlfc3RhbXA7Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwotCi0jaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KLQotI2RlZmluZSBsYXN0X2ppZmZ5X3N0YW1wKGNwdSkgX19JUlFfU1RBVCgoY3B1KSwgX19sYXN0X2ppZmZ5X3N0YW1wKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWNrX2JhZF9pcnEoaW50IGlycSkKLXsKLQlwcmludGsoS0VSTl9DUklUICJpbGxlZ2FsIHZlY3RvciAlZCByZWNlaXZlZCFcbiIsIGlycSk7Ci0JQlVHKCk7Ci19Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0jZW5kaWYgLyogX0FTTV9QT1dFUlBDX0hBUkRJUlFfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hhcmRpcnEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9od19pcnEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9od19pcnEuaAppbmRleCA4YjUwNWVhLi5lNzNkNTU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfaXJxLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h3X2lycS5oCkBAIC00OSw4ICs0OSwxMyBAQAogI2RlZmluZSByYXdfaXJxc19kaXNhYmxlZCgpCQkobG9jYWxfZ2V0X2ZsYWdzKCkgPT0gMCkKICNkZWZpbmUgcmF3X2lycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpCSgoZmxhZ3MpID09IDApCiAKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorI2RlZmluZSBfX2hhcmRfaXJxX2VuYWJsZSgpCV9fYXNtX18gX192b2xhdGlsZV9fKCJ3cnRlZWkgMSI6IDogOiJtZW1vcnkiKTsKKyNkZWZpbmUgX19oYXJkX2lycV9kaXNhYmxlKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oIndydGVlaSAwIjogOiA6Im1lbW9yeSIpOworI2Vsc2UKICNkZWZpbmUgX19oYXJkX2lycV9lbmFibGUoKQlfX210bXNyZChtZm1zcigpIHwgTVNSX0VFLCAxKQogI2RlZmluZSBfX2hhcmRfaXJxX2Rpc2FibGUoKQlfX210bXNyZChtZm1zcigpICYgfk1TUl9FRSwgMSkKKyNlbmRpZgogCiAjZGVmaW5lICBoYXJkX2lycV9kaXNhYmxlKCkJCQlcCiAJZG8gewkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaAppbmRleCA3ZWFkN2MxLi43NDY0YzBkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaApAQCAtMzUsMTYgKzM1LDYgQEAKICNkZWZpbmUgSU9NTVVfUEFHRV9NQVNLICAgICAgICh+KCgxIDw8IElPTU1VX1BBR0VfU0hJRlQpIC0gMSkpCiAjZGVmaW5lIElPTU1VX1BBR0VfQUxJR04oYWRkcikgX0FMSUdOX1VQKGFkZHIsIElPTU1VX1BBR0VfU0laRSkKIAotLyogQ2VsbCBwYWdlIHRhYmxlIGVudHJpZXMgKi8KLSNkZWZpbmUgQ0JFX0lPUFRFX1BQX1cJCTB4ODAwMDAwMDAwMDAwMDAwMHVsIC8qIHByb3RlY3Rpb246IHdyaXRlICovCi0jZGVmaW5lIENCRV9JT1BURV9QUF9SCQkweDQwMDAwMDAwMDAwMDAwMDB1bCAvKiBwcm90ZWN0aW9uOiByZWFkICovCi0jZGVmaW5lIENCRV9JT1BURV9NCQkweDIwMDAwMDAwMDAwMDAwMDB1bCAvKiBjb2hlcmVuY3kgcmVxdWlyZWQgKi8KLSNkZWZpbmUgQ0JFX0lPUFRFX1NPX1IJCTB4MTAwMDAwMDAwMDAwMDAwMHVsIC8qIG9yZGVyaW5nOiB3cml0ZXMgKi8KLSNkZWZpbmUgQ0JFX0lPUFRFX1NPX1JXCQkweDE4MDAwMDAwMDAwMDAwMDB1bCAvKiBvcmRlcmluZzogciAmIHcgKi8KLSNkZWZpbmUgQ0JFX0lPUFRFX1JQTl9NYXNrCTB4MDdmZmZmZmZmZmZmZjAwMHVsIC8qIFJQTiAqLwotI2RlZmluZSBDQkVfSU9QVEVfSAkJMHgwMDAwMDAwMDAwMDAwODAwdWwgLyogY2FjaGUgaGludCAqLwotI2RlZmluZSBDQkVfSU9QVEVfSU9JRF9NYXNrCTB4MDAwMDAwMDAwMDAwMDdmZnVsIC8qIGlvaWQgKi8KLQogLyogQm9vdCB0aW1lIGZsYWdzICovCiBleHRlcm4gaW50IGlvbW11X2lzX29mZjsKIGV4dGVybiBpbnQgaW9tbXVfZm9yY2Vfb247CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggMGE1MTM3Ni4uYmJjZDFhYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMzAyLDcgKzMwMiw4IEBACiAKIC8qIC0tIE9GIGhlbHBlcnMgLS0gKi8KIAotLyogaXJxX2NyZWF0ZV9vZl9tYXBwaW5nIC0gTWFwIGEgaGFyZHdhcmUgaW50ZXJydXB0IGludG8gbGludXggdmlycSBzcGFjZQorLyoqCisgKiBpcnFfY3JlYXRlX29mX21hcHBpbmcgLSBNYXAgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgaW50byBsaW51eCB2aXJxIHNwYWNlCiAgKiBAY29udHJvbGxlcjogRGV2aWNlIG5vZGUgb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyCiAgKiBAaW5zcGVjOiBJbnRlcnJ1cHQgc3BlY2lmaWVyIGZyb20gdGhlIGRldmljZS10cmVlCiAgKiBAaW50c2l6ZTogU2l6ZSBvZiB0aGUgaW50ZXJydXB0IHNwZWNpZmllciBmcm9tIHRoZSBkZXZpY2UtdHJlZQpAQCAtMzE0LDggKzMxNSw4IEBACiBleHRlcm4gdW5zaWduZWQgaW50IGlycV9jcmVhdGVfb2ZfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbnRyb2xsZXIsCiAJCQkJCSAgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSk7CiAKLQotLyogaXJxX29mX3BhcnNlX2FuZF9tYXAgLSBQYXJzZSBuYWQgTWFwIGFuIGludGVycnVwdCBpbnRvIGxpbnV4IHZpcnEgc3BhY2UKKy8qKgorICogaXJxX29mX3BhcnNlX2FuZF9tYXAgLSBQYXJzZSBhbmQgTWFwIGFuIGludGVycnVwdCBpbnRvIGxpbnV4IHZpcnEgc3BhY2UKICAqIEBkZXZpY2U6IERldmljZSBub2RlIG9mIHRoZSBkZXZpY2Ugd2hvc2UgaW50ZXJydXB0IGlzIHRvIGJlIG1hcHBlZAogICogQGluZGV4OiBJbmRleCBvZiB0aGUgaW50ZXJydXB0IHRvIG1hcAogICoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggZmRkYzNlZC4uYzljOTMwZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTM0LDcgKzM0LDggQEAKICNkZWZpbmUgS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUIDEKIAogLyogV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgbGFyZ2UgcGFnZXMuICovCi0jZGVmaW5lIEtWTV9QQUdFU19QRVJfSFBBR0UgKDFVTCA8PCAzMSkKKyNkZWZpbmUgS1ZNX05SX1BBR0VfU0laRVMJMQorI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFKHgpCSgxVUw8PDMxKQogCiBzdHJ1Y3Qga3ZtOwogc3RydWN0IGt2bV9ydW47CkBAIC0xNTMsNyArMTU0LDYgQEAKIAl1MzIgcGlkOwogCXUzMiBzd2FwX3BpZDsKIAotCXUzMiBwdnI7CiAJdTMyIGNjcjA7CiAJdTMyIGNjcjE7CiAJdTMyIGRiY3IwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKaW5kZXggMTFkMWZjM2EuLjllZmEyYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaApAQCAtMjA5LDE0ICsyMDksMTQgQEAKIAkvKgogCSAqIG9wdGlvbmFsIFBDSSAiaG9va3MiCiAJICovCi0JLyogQ2FsbGVkIGluIGluZGlyZWN0XyogdG8gYXZvaWQgdG91Y2hpbmcgZGV2aWNlcyAqLwotCWludCAoKnBjaV9leGNsdWRlX2RldmljZSkoc3RydWN0IHBjaV9jb250cm9sbGVyICosIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIpOwotCiAJLyogQ2FsbGVkIGF0IHRoZW4gdmVyeSBlbmQgb2YgcGNpYmlvc19pbml0KCkgKi8KIAl2b2lkICgqcGNpYmlvc19hZnRlcl9pbml0KSh2b2lkKTsKIAogI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLwogCisJLyogQ2FsbGVkIGluIGluZGlyZWN0XyogdG8gYXZvaWQgdG91Y2hpbmcgZGV2aWNlcyAqLworCWludCAoKnBjaV9leGNsdWRlX2RldmljZSkoc3RydWN0IHBjaV9jb250cm9sbGVyICosIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIpOworCiAJLyogQ2FsbGVkIGFmdGVyIFBQQyBnZW5lcmljIHJlc291cmNlIGZpeHVwIHRvIHBlcmZvcm0KIAkgICBtYWNoaW5lIHNwZWNpZmljIGZpeHVwcyAqLwogCXZvaWQgKCpwY2liaW9zX2ZpeHVwX3Jlc291cmNlcykoc3RydWN0IHBjaV9kZXYgKik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LTQweC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS00MHguaAppbmRleCA3NzZmNDE1YS4uMzQ5MTY4NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS00MHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LTQweC5oCkBAIC02MSw0ICs2MSw3IEBACiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKKyNkZWZpbmUgbW11X3ZpcnR1YWxfcHNpemUJTU1VX1BBR0VfNEsKKyNkZWZpbmUgbW11X2xpbmVhcl9wc2l6ZQlNTVVfUEFHRV8yNTZNCisKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfTU1VXzQwWF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS00NHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtNDR4LmgKaW5kZXggM2M4NjU3Ni4uMDM3MjY2OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS00NHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LTQ0eC5oCkBAIC03OSwxNiArNzksMjIgQEAKIAogI2lmIChQQUdFX1NISUZUID09IDEyKQogI2RlZmluZSBQUEM0NHhfVExCRV9TSVpFCVBQQzQ0eF9UTEJfNEsKKyNkZWZpbmUgbW11X3ZpcnR1YWxfcHNpemUJTU1VX1BBR0VfNEsKICNlbGlmIChQQUdFX1NISUZUID09IDE0KQogI2RlZmluZSBQUEM0NHhfVExCRV9TSVpFCVBQQzQ0eF9UTEJfMTZLCisjZGVmaW5lIG1tdV92aXJ0dWFsX3BzaXplCU1NVV9QQUdFXzE2SwogI2VsaWYgKFBBR0VfU0hJRlQgPT0gMTYpCiAjZGVmaW5lIFBQQzQ0eF9UTEJFX1NJWkUJUFBDNDR4X1RMQl82NEsKKyNkZWZpbmUgbW11X3ZpcnR1YWxfcHNpemUJTU1VX1BBR0VfNjRLCiAjZWxpZiAoUEFHRV9TSElGVCA9PSAxOCkKICNkZWZpbmUgUFBDNDR4X1RMQkVfU0laRQlQUEM0NHhfVExCXzI1NksKKyNkZWZpbmUgbW11X3ZpcnR1YWxfcHNpemUJTU1VX1BBR0VfMjU2SwogI2Vsc2UKICNlcnJvciAiVW5zdXBwb3J0ZWQgUEFHRV9TSVpFIgogI2VuZGlmCiAKKyNkZWZpbmUgbW11X2xpbmVhcl9wc2l6ZQlNTVVfUEFHRV8yNTZNCisKICNkZWZpbmUgUFBDNDR4X1BHRF9PRkZfU0hJRlQJKDMyIC0gUEdESVJfU0hJRlQgKyBQR0RfVF9MT0cyKQogI2RlZmluZSBQUEM0NHhfUEdEX09GRl9NQVNLX0JJVAkoUEdESVJfU0hJRlQgLSBQR0RfVF9MT0cyKQogI2RlZmluZSBQUEM0NHhfUFRFX0FERF9TSElGVAkoMzIgLSBQR0RJUl9TSElGVCArIFBURV9TSElGVCArIFBURV9UX0xPRzIpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LTh4eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS04eHguaAppbmRleCAwNzg2NWEzLi4zZDExZDNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LTh4eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtOHh4LmgKQEAgLTE0Myw0ICsxNDMsNyBAQAogfSBtbV9jb250ZXh0X3Q7CiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCisjZGVmaW5lIG1tdV92aXJ0dWFsX3BzaXplCU1NVV9QQUdFXzRLCisjZGVmaW5lIG1tdV9saW5lYXJfcHNpemUJTU1VX1BBR0VfOE0KKwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19NTVVfOFhYX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaAppbmRleCA3ZTc0Y2ZmLi43NDY5NTgxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKQEAgLTM4LDU4ICszOCwxNDAgQEAKICNkZWZpbmUgQk9PSzNFX1BBR0VTWl8xVEIJMzAKICNkZWZpbmUgQk9PSzNFX1BBR0VTWl8yVEIJMzEKIAotI2RlZmluZSBNQVMwX1RMQlNFTCh4KQkoKHggPDwgMjgpICYgMHgzMDAwMDAwMCkKLSNkZWZpbmUgTUFTMF9FU0VMKHgpCSgoeCA8PCAxNikgJiAweDBGRkYwMDAwKQotI2RlZmluZSBNQVMwX05WKHgpCSgoeCkgJiAweDAwMDAwRkZGKQorLyogTUFTIHJlZ2lzdGVycyBiaXQgZGVmaW5pdGlvbnMgKi8KIAotI2RlZmluZSBNQVMxX1ZBTElEIAkweDgwMDAwMDAwCi0jZGVmaW5lIE1BUzFfSVBST1QJMHg0MDAwMDAwMAotI2RlZmluZSBNQVMxX1RJRCh4KQkoKHggPDwgMTYpICYgMHgzRkZGMDAwMCkKLSNkZWZpbmUgTUFTMV9JTkQJMHgwMDAwMjAwMAotI2RlZmluZSBNQVMxX1RTCQkweDAwMDAxMDAwCi0jZGVmaW5lIE1BUzFfVFNJWkUoeCkJKCh4IDw8IDcpICYgMHgwMDAwMEY4MCkKKyNkZWZpbmUgTUFTMF9UTEJTRUwoeCkJCSgoeCA8PCAyOCkgJiAweDMwMDAwMDAwKQorI2RlZmluZSBNQVMwX0VTRUwoeCkJCSgoeCA8PCAxNikgJiAweDBGRkYwMDAwKQorI2RlZmluZSBNQVMwX05WKHgpCQkoKHgpICYgMHgwMDAwMEZGRikKKyNkZWZpbmUgTUFTMF9IRVMJCTB4MDAwMDQwMDAKKyNkZWZpbmUgTUFTMF9XUV9BTExXQVlTCQkweDAwMDAwMDAwCisjZGVmaW5lIE1BUzBfV1FfQ09ORAkJMHgwMDAwMTAwMAorI2RlZmluZSBNQVMwX1dRX0NMUl9SU1JWICAgICAgIAkweDAwMDAyMDAwCiAKLSNkZWZpbmUgTUFTMl9FUE4JMHhGRkZGRjAwMAotI2RlZmluZSBNQVMyX1gwCQkweDAwMDAwMDQwCi0jZGVmaW5lIE1BUzJfWDEJCTB4MDAwMDAwMjAKLSNkZWZpbmUgTUFTMl9XCQkweDAwMDAwMDEwCi0jZGVmaW5lIE1BUzJfSQkJMHgwMDAwMDAwOAotI2RlZmluZSBNQVMyX00JCTB4MDAwMDAwMDQKLSNkZWZpbmUgTUFTMl9HCQkweDAwMDAwMDAyCi0jZGVmaW5lIE1BUzJfRQkJMHgwMDAwMDAwMQorI2RlZmluZSBNQVMxX1ZBTElECQkweDgwMDAwMDAwCisjZGVmaW5lIE1BUzFfSVBST1QJCTB4NDAwMDAwMDAKKyNkZWZpbmUgTUFTMV9USUQoeCkJCSgoeCA8PCAxNikgJiAweDNGRkYwMDAwKQorI2RlZmluZSBNQVMxX0lORAkJMHgwMDAwMjAwMAorI2RlZmluZSBNQVMxX1RTCQkJMHgwMDAwMTAwMAorI2RlZmluZSBNQVMxX1RTSVpFX01BU0sJCTB4MDAwMDBmODAKKyNkZWZpbmUgTUFTMV9UU0laRV9TSElGVAk3CisjZGVmaW5lIE1BUzFfVFNJWkUoeCkJCSgoeCA8PCBNQVMxX1RTSVpFX1NISUZUKSAmIE1BUzFfVFNJWkVfTUFTSykKKworI2RlZmluZSBNQVMyX0VQTgkJMHhGRkZGRjAwMAorI2RlZmluZSBNQVMyX1gwCQkJMHgwMDAwMDA0MAorI2RlZmluZSBNQVMyX1gxCQkJMHgwMDAwMDAyMAorI2RlZmluZSBNQVMyX1cJCQkweDAwMDAwMDEwCisjZGVmaW5lIE1BUzJfSQkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTUFTMl9NCQkJMHgwMDAwMDAwNAorI2RlZmluZSBNQVMyX0cJCQkweDAwMDAwMDAyCisjZGVmaW5lIE1BUzJfRQkJCTB4MDAwMDAwMDEKICNkZWZpbmUgTUFTMl9FUE5fTUFTSyhzaXplKQkJKH4wIDw8IChzaXplICsgMTApKQogI2RlZmluZSBNQVMyX1ZBTChhZGRyLCBzaXplLCBmbGFncykJKChhZGRyKSAmIE1BUzJfRVBOX01BU0soc2l6ZSkgfCAoZmxhZ3MpKQogCi0jZGVmaW5lIE1BUzNfUlBOCTB4RkZGRkYwMDAKLSNkZWZpbmUgTUFTM19VMAkJMHgwMDAwMDIwMAotI2RlZmluZSBNQVMzX1UxCQkweDAwMDAwMTAwCi0jZGVmaW5lIE1BUzNfVTIJCTB4MDAwMDAwODAKLSNkZWZpbmUgTUFTM19VMwkJMHgwMDAwMDA0MAotI2RlZmluZSBNQVMzX1VYCQkweDAwMDAwMDIwCi0jZGVmaW5lIE1BUzNfU1gJCTB4MDAwMDAwMTAKLSNkZWZpbmUgTUFTM19VVwkJMHgwMDAwMDAwOAotI2RlZmluZSBNQVMzX1NXCQkweDAwMDAwMDA0Ci0jZGVmaW5lIE1BUzNfVVIJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTUFTM19TUgkJMHgwMDAwMDAwMQorI2RlZmluZSBNQVMzX1JQTgkJMHhGRkZGRjAwMAorI2RlZmluZSBNQVMzX1UwCQkJMHgwMDAwMDIwMAorI2RlZmluZSBNQVMzX1UxCQkJMHgwMDAwMDEwMAorI2RlZmluZSBNQVMzX1UyCQkJMHgwMDAwMDA4MAorI2RlZmluZSBNQVMzX1UzCQkJMHgwMDAwMDA0MAorI2RlZmluZSBNQVMzX1VYCQkJMHgwMDAwMDAyMAorI2RlZmluZSBNQVMzX1NYCQkJMHgwMDAwMDAxMAorI2RlZmluZSBNQVMzX1VXCQkJMHgwMDAwMDAwOAorI2RlZmluZSBNQVMzX1NXCQkJMHgwMDAwMDAwNAorI2RlZmluZSBNQVMzX1VSCQkJMHgwMDAwMDAwMgorI2RlZmluZSBNQVMzX1NSCQkJMHgwMDAwMDAwMQorI2RlZmluZSBNQVMzX1NQU0laRQkJMHgwMDAwMDAzZQorI2RlZmluZSBNQVMzX1NQU0laRV9TSElGVAkxCiAKLSNkZWZpbmUgTUFTNF9UTEJTRUxEKHgpIE1BUzBfVExCU0VMKHgpCi0jZGVmaW5lIE1BUzRfSU5ERAkweDAwMDA4MDAwCi0jZGVmaW5lIE1BUzRfVFNJWkVEKHgpCU1BUzFfVFNJWkUoeCkKLSNkZWZpbmUgTUFTNF9YMEQJMHgwMDAwMDA0MAotI2RlZmluZSBNQVM0X1gxRAkweDAwMDAwMDIwCi0jZGVmaW5lIE1BUzRfV0QJCTB4MDAwMDAwMTAKLSNkZWZpbmUgTUFTNF9JRAkJMHgwMDAwMDAwOAotI2RlZmluZSBNQVM0X01ECQkweDAwMDAwMDA0Ci0jZGVmaW5lIE1BUzRfR0QJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTUFTNF9FRAkJMHgwMDAwMDAwMQorI2RlZmluZSBNQVM0X1RMQlNFTEQoeCkgCU1BUzBfVExCU0VMKHgpCisjZGVmaW5lIE1BUzRfSU5ERAkJMHgwMDAwODAwMAkvKiBEZWZhdWx0IElORCAqLworI2RlZmluZSBNQVM0X1RTSVpFRCh4KQkJTUFTMV9UU0laRSh4KQorI2RlZmluZSBNQVM0X1gwRAkJMHgwMDAwMDA0MAorI2RlZmluZSBNQVM0X1gxRAkJMHgwMDAwMDAyMAorI2RlZmluZSBNQVM0X1dECQkJMHgwMDAwMDAxMAorI2RlZmluZSBNQVM0X0lECQkJMHgwMDAwMDAwOAorI2RlZmluZSBNQVM0X01ECQkJMHgwMDAwMDAwNAorI2RlZmluZSBNQVM0X0dECQkJMHgwMDAwMDAwMgorI2RlZmluZSBNQVM0X0VECQkJMHgwMDAwMDAwMQorI2RlZmluZSBNQVM0X1dJTUdFRF9NQVNLCTB4MDAwMDAwMWYJLyogRGVmYXVsdCBXSU1HRSAqLworI2RlZmluZSBNQVM0X1dJTUdFRF9TSElGVAkwCisjZGVmaW5lIE1BUzRfVkxFRAkJTUFTNF9YMUQJLyogRGVmYXVsdCBWTEUgKi8KKyNkZWZpbmUgTUFTNF9BQ01ECQkweDAwMDAwMGMwCS8qIERlZmF1bHQgQUNNICovCisjZGVmaW5lIE1BUzRfQUNNRF9TSElGVAkJNgorI2RlZmluZSBNQVM0X1RTSVpFRF9NQVNLCTB4MDAwMDBmODAJLyogRGVmYXVsdCBUU0laRSAqLworI2RlZmluZSBNQVM0X1RTSVpFRF9TSElGVAk3CiAKLSNkZWZpbmUgTUFTNl9TUElEMAkweDNGRkYwMDAwCi0jZGVmaW5lIE1BUzZfU1BJRDEJMHgwMDAwN0ZGRQotI2RlZmluZSBNQVM2X0lTSVpFKHgpCU1BUzFfVFNJWkUoeCkKLSNkZWZpbmUgTUFTNl9TQVMJMHgwMDAwMDAwMQotI2RlZmluZSBNQVM2X1NQSUQJTUFTNl9TUElEMAorI2RlZmluZSBNQVM2X1NQSUQwCQkweDNGRkYwMDAwCisjZGVmaW5lIE1BUzZfU1BJRDEJCTB4MDAwMDdGRkUKKyNkZWZpbmUgTUFTNl9JU0laRSh4KQkJTUFTMV9UU0laRSh4KQorI2RlZmluZSBNQVM2X1NBUwkJMHgwMDAwMDAwMQorI2RlZmluZSBNQVM2X1NQSUQJCU1BUzZfU1BJRDAKKyNkZWZpbmUgTUFTNl9TSU5EIAkJMHgwMDAwMDAwMgkvKiBJbmRpcmVjdCBwYWdlICovCisjZGVmaW5lIE1BUzZfU0lORF9TSElGVAkJMQorI2RlZmluZSBNQVM2X1NQSURfTUFTSwkJMHgzZmZmMDAwMAorI2RlZmluZSBNQVM2X1NQSURfU0hJRlQJCTE2CisjZGVmaW5lIE1BUzZfSVNJWkVfTUFTSwkJMHgwMDAwMGY4MAorI2RlZmluZSBNQVM2X0lTSVpFX1NISUZUCTcKIAotI2RlZmluZSBNQVM3X1JQTgkweEZGRkZGRkZGCisjZGVmaW5lIE1BUzdfUlBOCQkweEZGRkZGRkZGCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgTU1VQ1NSMCAqLworI2RlZmluZSBNTVVDU1IwX1RMQjFGSQkweDAwMDAwMDAyCS8qIFRMQjEgRmxhc2ggaW52YWxpZGF0ZSAqLworI2RlZmluZSBNTVVDU1IwX1RMQjBGSQkweDAwMDAwMDA0CS8qIFRMQjAgRmxhc2ggaW52YWxpZGF0ZSAqLworI2RlZmluZSBNTVVDU1IwX1RMQjJGSQkweDAwMDAwMDQwCS8qIFRMQjIgRmxhc2ggaW52YWxpZGF0ZSAqLworI2RlZmluZSBNTVVDU1IwX1RMQjNGSQkweDAwMDAwMDIwCS8qIFRMQjMgRmxhc2ggaW52YWxpZGF0ZSAqLworI2RlZmluZSBNTVVDU1IwX1RMQkZJCShNTVVDU1IwX1RMQjBGSSB8IE1NVUNTUjBfVExCMUZJIHwgXAorCQkJIE1NVUNTUjBfVExCMkZJIHwgTU1VQ1NSMF9UTEIzRkkpCisjZGVmaW5lIE1NVUNTUjBfVExCMFBTCTB4MDAwMDA3ODAJLyogVExCMCBQYWdlIFNpemUgKi8KKyNkZWZpbmUgTU1VQ1NSMF9UTEIxUFMJMHgwMDAwNzgwMAkvKiBUTEIxIFBhZ2UgU2l6ZSAqLworI2RlZmluZSBNTVVDU1IwX1RMQjJQUwkweDAwMDc4MDAwCS8qIFRMQjIgUGFnZSBTaXplICovCisjZGVmaW5lIE1NVUNTUjBfVExCM1BTCTB4MDA3ODAwMDAJLyogVExCMyBQYWdlIFNpemUgKi8KKworLyogVExCbkNGRyBlbmNvZGluZyAqLworI2RlZmluZSBUTEJuQ0ZHX05fRU5UUlkJCTB4MDAwMDBmZmYJLyogbnVtYmVyIG9mIGVudHJpZXMgKi8KKyNkZWZpbmUgVExCbkNGR19IRVMJCTB4MDAwMDIwMDAJLyogSFcgc2VsZWN0IHN1cHBvcnRlZCAqLworI2RlZmluZSBUTEJuQ0ZHX0lQUk9UCQkweDAwMDA4MDAwCS8qIElQUk9UIHN1cHBvcnRlZCAqLworI2RlZmluZSBUTEJuQ0ZHX0dUV0UJCTB4MDAwMTAwMDAJLyogR3Vlc3QgY2FuIHdyaXRlICovCisjZGVmaW5lIFRMQm5DRkdfSU5ECQkweDAwMDIwMDAwCS8qIElORCBlbnRyaWVzIHN1cHBvcnRlZCAqLworI2RlZmluZSBUTEJuQ0ZHX1BUCQkweDAwMDQwMDAwCS8qIENhbiBsb2FkIGZyb20gcGFnZSB0YWJsZSAqLworI2RlZmluZSBUTEJuQ0ZHX0FTU09DCQkweGZmMDAwMDAwCS8qIEFzc29jaWF0aXZpdHkgKi8KKworLyogVExCblBTIGVuY29kaW5nICovCisjZGVmaW5lIFRMQm5QU180SwkJMHgwMDAwMDAwNAorI2RlZmluZSBUTEJuUFNfOEsJCTB4MDAwMDAwMDgKKyNkZWZpbmUgVExCblBTXzE2SwkJMHgwMDAwMDAxMAorI2RlZmluZSBUTEJuUFNfMzJLCQkweDAwMDAwMDIwCisjZGVmaW5lIFRMQm5QU182NEsJCTB4MDAwMDAwNDAKKyNkZWZpbmUgVExCblBTXzEyOEsJCTB4MDAwMDAwODAKKyNkZWZpbmUgVExCblBTXzI1NksJCTB4MDAwMDAxMDAKKyNkZWZpbmUgVExCblBTXzUxMksJCTB4MDAwMDAyMDAKKyNkZWZpbmUgVExCblBTXzFNIAkJMHgwMDAwMDQwMAorI2RlZmluZSBUTEJuUFNfMk0gCQkweDAwMDAwODAwCisjZGVmaW5lIFRMQm5QU180TSAJCTB4MDAwMDEwMDAKKyNkZWZpbmUgVExCblBTXzhNIAkJMHgwMDAwMjAwMAorI2RlZmluZSBUTEJuUFNfMTZNCQkweDAwMDA0MDAwCisjZGVmaW5lIFRMQm5QU18zMk0JCTB4MDAwMDgwMDAKKyNkZWZpbmUgVExCblBTXzY0TQkJMHgwMDAxMDAwMAorI2RlZmluZSBUTEJuUFNfMTI4TQkJMHgwMDAyMDAwMAorI2RlZmluZSBUTEJuUFNfMjU2TQkJMHgwMDA0MDAwMAorI2RlZmluZSBUTEJuUFNfNTEyTQkJMHgwMDA4MDAwMAorI2RlZmluZSBUTEJuUFNfMUcJCTB4MDAxMDAwMDAKKyNkZWZpbmUgVExCblBTXzJHCQkweDAwMjAwMDAwCisjZGVmaW5lIFRMQm5QU180RwkJMHgwMDQwMDAwMAorI2RlZmluZSBUTEJuUFNfOEcJCTB4MDA4MDAwMDAKKyNkZWZpbmUgVExCblBTXzE2RwkJMHgwMTAwMDAwMAorI2RlZmluZSBUTEJuUFNfMzJHCQkweDAyMDAwMDAwCisjZGVmaW5lIFRMQm5QU182NEcJCTB4MDQwMDAwMDAKKyNkZWZpbmUgVExCblBTXzEyOEcJCTB4MDgwMDAwMDAKKyNkZWZpbmUgVExCblBTXzI1NkcJCTB4MTAwMDAwMDAKKworLyogdGxiaWx4IGFjdGlvbiBlbmNvZGluZyAqLworI2RlZmluZSBUTEJJTFhfVF9BTEwJCQkwCisjZGVmaW5lIFRMQklMWF9UX1RJRAkJCTEKKyNkZWZpbmUgVExCSUxYX1RfRlVMTE1BVENICQkzCisjZGVmaW5lIFRMQklMWF9UX0NMQVNTMAkJCTQKKyNkZWZpbmUgVExCSUxYX1RfQ0xBU1MxCQkJNQorI2RlZmluZSBUTEJJTFhfVF9DTEFTUzIJCQk2CisjZGVmaW5lIFRMQklMWF9UX0NMQVNTMwkJCTcKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtMTAwLDYgKzE4MiwzNCBAQAogCXVuc2lnbmVkIGludAlhY3RpdmU7CiAJdW5zaWduZWQgbG9uZwl2ZHNvX2Jhc2U7CiB9IG1tX2NvbnRleHRfdDsKKworLyogUGFnZSBzaXplIGRlZmluaXRpb25zLCBjb21tb24gYmV0d2VlbiAzMiBhbmQgNjQtYml0CisgKgorICogICAgc2hpZnQgOiBpcyB0aGUgIlBBR0VfU0hJRlQiIHZhbHVlIGZvciB0aGF0IHBhZ2Ugc2l6ZQorICogICAgcGVuYyAgOiBpcyB0aGUgcHRlIGVuY29kaW5nIG1hc2sKKyAqCisgKi8KK3N0cnVjdCBtbXVfcHNpemVfZGVmCit7CisJdW5zaWduZWQgaW50CXNoaWZ0OwkvKiBudW1iZXIgb2YgYml0cyAqLworCXVuc2lnbmVkIGludAllbmM7CS8qIFBURSBlbmNvZGluZyAqLworfTsKK2V4dGVybiBzdHJ1Y3QgbW11X3BzaXplX2RlZiBtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV9DT1VOVF07CisKKy8qIFRoZSBwYWdlIHNpemVzIHVzZSB0aGUgc2FtZSBuYW1lcyBhcyA2NC1iaXQgaGFzaCBidXQgYXJlCisgKiBjb25zdGFudHMKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX1BQQ180S19QQUdFUykKKyNkZWZpbmUgbW11X3ZpcnR1YWxfcHNpemUJTU1VX1BBR0VfNEsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ182NEtfUEFHRVMpCisjZGVmaW5lIG1tdV92aXJ0dWFsX3BzaXplCU1NVV9QQUdFXzY0SworI2Vsc2UKKyNlcnJvciBVbnN1cHBvcnRlZCBwYWdlIHNpemUKKyNlbmRpZgorCitleHRlcm4gaW50IG1tdV9saW5lYXJfcHNpemU7CitleHRlcm4gaW50IG1tdV92bWVtbWFwX3BzaXplOworCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX01NVV9CT09LM0VfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDMyLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2gzMi5oCmluZGV4IDE2YjFhMWUuLjE2ZjUxM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDMyLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoMzIuaApAQCAtNTUsMjEgKzU1LDI1IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLS8qIEhhcmR3YXJlIFBhZ2UgVGFibGUgRW50cnkgKi8KKy8qCisgKiBIYXJkd2FyZSBQYWdlIFRhYmxlIEVudHJ5CisgKiBOb3RlIHRoYXQgdGhlIHhwbiBhbmQgeCBiaXRmaWVsZHMgYXJlIHVzZWQgb25seSBieSBwcm9jZXNzb3JzIHRoYXQKKyAqIHN1cHBvcnQgZXh0ZW5kZWQgYWRkcmVzc2luZzsgb3RoZXJ3aXNlLCB0aG9zZSBiaXRzIGFyZSByZXNlcnZlZC4KKyAqLwogc3RydWN0IGhhc2hfcHRlIHsKIAl1bnNpZ25lZCBsb25nIHY6MTsJLyogRW50cnkgaXMgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIHZzaWQ6MjQ7CS8qIFZpcnR1YWwgc2VnbWVudCBpZGVudGlmaWVyICovCiAJdW5zaWduZWQgbG9uZyBoOjE7CS8qIEhhc2ggYWxnb3JpdGhtIGluZGljYXRvciAqLwogCXVuc2lnbmVkIGxvbmcgYXBpOjY7CS8qIEFiYnJldmlhdGVkIHBhZ2UgaW5kZXggKi8KIAl1bnNpZ25lZCBsb25nIHJwbjoyMDsJLyogUmVhbCAocGh5c2ljYWwpIHBhZ2UgbnVtYmVyICovCi0JdW5zaWduZWQgbG9uZyAgICA6MzsJLyogVW51c2VkICovCisJdW5zaWduZWQgbG9uZyB4cG46MzsJLyogUmVhbCBwYWdlIG51bWJlciBiaXRzIDAtMiwgb3B0aW9uYWwgKi8KIAl1bnNpZ25lZCBsb25nIHI6MTsJLyogUmVmZXJlbmNlZCAqLwogCXVuc2lnbmVkIGxvbmcgYzoxOwkvKiBDaGFuZ2VkICovCiAJdW5zaWduZWQgbG9uZyB3OjE7CS8qIFdyaXRlLXRocnUgY2FjaGUgbW9kZSAqLwogCXVuc2lnbmVkIGxvbmcgaToxOwkvKiBDYWNoZSBpbmhpYml0ZWQgKi8KIAl1bnNpZ25lZCBsb25nIG06MTsJLyogTWVtb3J5IGNvaGVyZW5jZSAqLwogCXVuc2lnbmVkIGxvbmcgZzoxOwkvKiBHdWFyZGVkICovCi0JdW5zaWduZWQgbG9uZyAgOjE7CS8qIFVudXNlZCAqLworCXVuc2lnbmVkIGxvbmcgeDoxOwkvKiBSZWFsIHBhZ2UgbnVtYmVyIGJpdCAzLCBvcHRpb25hbCAqLwogCXVuc2lnbmVkIGxvbmcgcHA6MjsJLyogUGFnZSBwcm90ZWN0aW9uICovCiB9OwogCkBAIC04MCw0ICs4NCwxMCBAQAogCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCisvKiBXZSBoYXBwaWx5IGlnbm9yZSB0aGUgc21hbGxlciBCQVRzIG9uIDYwMSwgd2UgZG9uJ3QgYWN0dWFsbHkgdXNlCisgKiB0aG9zZSBkZWZpbml0aW9ucyBvbiBoYXNoMzIgYXQgdGhlIG1vbWVudCBhbnl3YXkKKyAqLworI2RlZmluZSBtbXVfdmlydHVhbF9wc2l6ZQlNTVVfUEFHRV80SworI2RlZmluZSBtbXVfbGluZWFyX3BzaXplCU1NVV9QQUdFXzI1Nk0KKwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19NTVVfSEFTSDMyX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaAppbmRleCA5OGMxMDRhLi5iZWJlMzFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmgKQEAgLTQxLDYgKzQxLDcgQEAKIAogI2RlZmluZSBTTEJfTlVNX0JPTFRFRAkJMwogI2RlZmluZSBTTEJfQ0FDSEVfRU5UUklFUwk4CisjZGVmaW5lIFNMQl9NSU5fU0laRQkJMzIKIAogLyogQml0cyBpbiB0aGUgU0xCIEVTSUQgd29yZCAqLwogI2RlZmluZSBTTEJfRVNJRF9WCQlBU01fQ09OU1QoMHgwMDAwMDAwMDA4MDAwMDAwKSAvKiB2YWxpZCAqLwpAQCAtMTM5LDI2ICsxNDAsNiBAQAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAvKgotICogVGhlIGtlcm5lbCB1c2UgdGhlIGNvbnN0YW50cyBiZWxvdyB0byBpbmRleCBpbiB0aGUgcGFnZSBzaXplcyBhcnJheS4KLSAqIFRoZSB1c2Ugb2YgZml4ZWQgY29uc3RhbnRzIGZvciB0aGlzIHB1cnBvc2UgaXMgYmV0dGVyIGZvciBwZXJmb3JtYW5jZXMKLSAqIG9mIHRoZSBsb3cgbGV2ZWwgaGFzaCByZWZpbGwgaGFuZGxlcnMuCi0gKgotICogQSBub24gc3VwcG9ydGVkIHBhZ2Ugc2l6ZSBoYXMgYSAic2hpZnQiIGZpZWxkIHNldCB0byAwCi0gKgotICogQW55IG5ldyBwYWdlIHNpemUgYmVpbmcgaW1wbGVtZW50ZWQgY2FuIGdldCBhIG5ldyBlbnRyeSBpbiBoZXJlLiBXaGV0aGVyCi0gKiB0aGUga2VybmVsIHdpbGwgdXNlIGl0IG9yIG5vdCBpcyBhIGRpZmZlcmVudCBtYXR0ZXIgdGhvdWdoLiBUaGUgYWN0dWFsIHBhZ2UKLSAqIHNpemUgdXNlZCBieSBodWdldGxiZnMgaXMgbm90IGRlZmluZWQgaGVyZSBhbmQgbWF5IGJlIG1hZGUgdmFyaWFibGUKLSAqLwotCi0jZGVmaW5lIE1NVV9QQUdFXzRLCQkwCS8qIDRLICovCi0jZGVmaW5lIE1NVV9QQUdFXzY0SwkJMQkvKiA2NEsgKi8KLSNkZWZpbmUgTU1VX1BBR0VfNjRLX0FQCQkyCS8qIDY0SyBBZG1peGVkIChpbiBhIDRLIHNlZ21lbnQpICovCi0jZGVmaW5lIE1NVV9QQUdFXzFNCQkzCS8qIDFNICovCi0jZGVmaW5lIE1NVV9QQUdFXzE2TQkJNAkvKiAxNk0gKi8KLSNkZWZpbmUgTU1VX1BBR0VfMTZHCQk1CS8qIDE2RyAqLwotI2RlZmluZSBNTVVfUEFHRV9DT1VOVAkJNgotCi0vKgogICogU2VnbWVudCBzaXplcy4KICAqIFRoZXNlIGFyZSB0aGUgdmFsdWVzIHVzZWQgYnkgaGFyZHdhcmUgaW4gdGhlIEIgZmllbGQgb2YKICAqIFNMQiBlbnRyaWVzIGFuZCB0aGUgZmlyc3QgZHdvcmQgb2YgTU1VIGhhc2h0YWJsZSBlbnRyaWVzLgpAQCAtMjk2LDYgKzI3Nyw3IEBACiBleHRlcm4gdm9pZCBzdGFiX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBzdGFiKTsKIAogZXh0ZXJuIHZvaWQgc2xiX3ZtYWxsb2NfdXBkYXRlKHZvaWQpOworZXh0ZXJuIHZvaWQgc2xiX3NldF9zaXplKHUxNiBzaXplKTsKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaAppbmRleCBmYjU3ZGVkLi43ZmZiYjY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oCkBAIC0xNyw2ICsxNyw3IEBACiAjZGVmaW5lIE1NVV9GVFJfVFlQRV80MHgJCUFTTV9DT05TVCgweDAwMDAwMDA0KQogI2RlZmluZSBNTVVfRlRSX1RZUEVfNDR4CQlBU01fQ09OU1QoMHgwMDAwMDAwOCkKICNkZWZpbmUgTU1VX0ZUUl9UWVBFX0ZTTF9FCQlBU01fQ09OU1QoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTU1VX0ZUUl9UWVBFXzNFCQkJQVNNX0NPTlNUKDB4MDAwMDAwMjApCiAKIC8qCiAgKiBUaGlzIGlzIGluZGl2aWR1YWwgZmVhdHVyZXMKQEAgLTU3LDYgKzU4LDE1IEBACiAgKi8KICNkZWZpbmUgTU1VX0ZUUl9UTEJJRV8yMDYJCUFTTV9DT05TVCgweDAwNDAwMDAwKQogCisvKiBFbmFibGUgdXNlIG9mIFRMQiByZXNlcnZhdGlvbi4gIFByb2Nlc3NvciBzaG91bGQgc3VwcG9ydCB0bGJzcnguCisgKiBpbnN0cnVjdGlvbiBhbmQgTUFTMFtXUV0uCisgKi8KKyNkZWZpbmUgTU1VX0ZUUl9VU0VfVExCUlNSVgkJQVNNX0NPTlNUKDB4MDA4MDAwMDApCisKKy8qIFVzZSBwYWlyZWQgTUFTIHJlZ2lzdGVycyAoTUFTN3x8TUFTMywgZXRjLikKKyAqLworI2RlZmluZSBNTVVfRlRSX1VTRV9QQUlSRURfTUFTCQlBU01fQ09OU1QoMHgwMTAwMDAwMCkKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KIApAQCAtNzMsNiArODMsNDEgQEAKIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAorLyogVGhlIGtlcm5lbCB1c2UgdGhlIGNvbnN0YW50cyBiZWxvdyB0byBpbmRleCBpbiB0aGUgcGFnZSBzaXplcyBhcnJheS4KKyAqIFRoZSB1c2Ugb2YgZml4ZWQgY29uc3RhbnRzIGZvciB0aGlzIHB1cnBvc2UgaXMgYmV0dGVyIGZvciBwZXJmb3JtYW5jZXMKKyAqIG9mIHRoZSBsb3cgbGV2ZWwgaGFzaCByZWZpbGwgaGFuZGxlcnMuCisgKgorICogQSBub24gc3VwcG9ydGVkIHBhZ2Ugc2l6ZSBoYXMgYSAic2hpZnQiIGZpZWxkIHNldCB0byAwCisgKgorICogQW55IG5ldyBwYWdlIHNpemUgYmVpbmcgaW1wbGVtZW50ZWQgY2FuIGdldCBhIG5ldyBlbnRyeSBpbiBoZXJlLiBXaGV0aGVyCisgKiB0aGUga2VybmVsIHdpbGwgdXNlIGl0IG9yIG5vdCBpcyBhIGRpZmZlcmVudCBtYXR0ZXIgdGhvdWdoLiBUaGUgYWN0dWFsIHBhZ2UKKyAqIHNpemUgdXNlZCBieSBodWdldGxiZnMgaXMgbm90IGRlZmluZWQgaGVyZSBhbmQgbWF5IGJlIG1hZGUgdmFyaWFibGUKKyAqCisgKiBOb3RlOiBUaGlzIGFycmF5IGVuZGVkIHVwIGJlaW5nIGEgZmFsc2UgZ29vZCBpZGVhIGFzIGl0J3MgZ3Jvd2luZyB0byB0aGUKKyAqIHBvaW50IHdoZXJlIEkgd29uZGVyIGlmIHdlIHNob3VsZCByZXBsYWNlIGl0IHdpdGggc29tZXRoaW5nIGRpZmZlcmVudCwKKyAqIHRvIHRoaW5rIGFib3V0LCBmZWVkYmFjayB3ZWxjb21lLiAtLUJlbkguCisgKi8KKworLyogVGhlcmUgYXJlICNkZWZpbmUgYXMgdGhleSBoYXZlIHRvIGJlIHVzZWQgaW4gYXNzZW1ibHkKKyAqCisgKiBXQVJOSU5HOiBJZiB5b3UgY2hhbmdlIHRoaXMgbGlzdCwgbWFrZSBzdXJlIHRvIHVwZGF0ZSB0aGUgYXJyYXkgb2YKKyAqIG5hbWVzIGN1cnJlbnRseSBpbiBhcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYyBvciBiYWQgdGhpbmdzIHdpbGwKKyAqIGhhcHBlbgorICovCisjZGVmaW5lIE1NVV9QQUdFXzRLCTAKKyNkZWZpbmUgTU1VX1BBR0VfMTZLCTEKKyNkZWZpbmUgTU1VX1BBR0VfNjRLCTIKKyNkZWZpbmUgTU1VX1BBR0VfNjRLX0FQCTMJLyogIkFkbWl4ZWQgcGFnZXMiIChoYXNoNjQgb25seSkgKi8KKyNkZWZpbmUgTU1VX1BBR0VfMjU2Swk0CisjZGVmaW5lIE1NVV9QQUdFXzFNCTUKKyNkZWZpbmUgTU1VX1BBR0VfOE0JNgorI2RlZmluZSBNTVVfUEFHRV8xNk0JNworI2RlZmluZSBNTVVfUEFHRV8yNTZNCTgKKyNkZWZpbmUgTU1VX1BBR0VfMUcJOQorI2RlZmluZSBNTVVfUEFHRV8xNkcJMTAKKyNkZWZpbmUgTU1VX1BBR0VfNjRHCTExCisjZGVmaW5lIE1NVV9QQUdFX0NPVU5UCTEyCisKIAogI2lmIGRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VXzY0KQogLyogNjQtYml0IGNsYXNzaWMgaGFzaCB0YWJsZSBNTVUgKi8KQEAgLTk0LDUgKzEzOSw2IEBACiAjICBpbmNsdWRlIDxhc20vbW11LTh4eC5oPgogI2VuZGlmCiAKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfTU1VX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IGI3MDYzNjYuLmIzNGU5NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0xNCw3ICsxNCw2IEBACiAvKgogICogTW9zdCBpZiB0aGUgY29udGV4dCBtYW5hZ2VtZW50IGlzIG91dCBvZiBsaW5lCiAgKi8KLWV4dGVybiB2b2lkIG1tdV9jb250ZXh0X2luaXQodm9pZCk7CiBleHRlcm4gaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIGV4dGVybiB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiAKQEAgLTIzLDYgKzIyLDEyIEBACiBleHRlcm4gdm9pZCBzd2l0Y2hfc2xiKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiBleHRlcm4gdm9pZCBzZXRfY29udGV4dCh1bnNpZ25lZCBsb25nIGlkLCBwZ2RfdCAqcGdkKTsKIAorI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CitzdGF0aWMgaW5saW5lIHZvaWQgbW11X2NvbnRleHRfaW5pdCh2b2lkKSB7IH0KKyNlbHNlCitleHRlcm4gdm9pZCBtbXVfY29udGV4dF9pbml0KHZvaWQpOworI2VuZGlmCisKIC8qCiAgKiBzd2l0Y2hfbW0gaXMgdGhlIGVudHJ5IHBvaW50IGNhbGxlZCBmcm9tIHRoZSBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQKICAqIGNvZGUgaW4ga2VybmVsL3NjaGVkLmMKQEAgLTM4LDYgKzQzLDEwIEBACiAJdHNrLT50aHJlYWQucGdkaXIgPSBuZXh0LT5wZ2Q7CiAjZW5kaWYgLyogQ09ORklHX1BQQzMyICovCiAKKwkvKiA2NC1iaXQgQm9vazNFIGtlZXBzIHRyYWNrIG9mIGN1cnJlbnQgUEdEIGluIHRoZSBQQUNBICovCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0VfNjQKKwlnZXRfcGFjYSgpLT5wZ2QgPSBuZXh0LT5wZ2Q7CisjZW5kaWYKIAkvKiBOb3RoaW5nIGVsc2UgdG8gZG8gaWYgd2UgYXJlbid0IGFjdHVhbGx5IHN3aXRjaGluZyAqLwogCWlmIChwcmV2ID09IG5leHQpCiAJCXJldHVybjsKQEAgLTg0LDYgKzkzLDEwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKKwkvKiA2NC1iaXQgQm9vazNFIGtlZXBzIHRyYWNrIG9mIGN1cnJlbnQgUEdEIGluIHRoZSBQQUNBICovCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0VfNjQKKwlnZXRfcGFjYSgpLT5wZ2QgPSBOVUxMOworI2VuZGlmCiB9CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbnZyYW0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9udnJhbS5oCmluZGV4IGVmZGU1YWMuLjZjNTg3ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9udnJhbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9udnJhbS5oCkBAIC0xMDcsNiArMTA3LDkgQEAKIC8qIFN5bmNocm9uaXplIE5WUkFNICovCiBleHRlcm4gdm9pZAludnJhbV9zeW5jKHZvaWQpOwogCisvKiBEZXRlcm1pbmUgTlZSQU0gc2l6ZSAqLworZXh0ZXJuIHNzaXplX3QgbnZyYW1fZ2V0X3NpemUodm9pZCk7CisKIC8qIE5vcm1hbCBhY2Nlc3MgdG8gTlZSQU0gKi8KIGV4dGVybiB1bnNpZ25lZCBjaGFyIG52cmFtX3JlYWRfYnl0ZShpbnQgaSk7CiBleHRlcm4gdm9pZCBudnJhbV93cml0ZV9ieXRlKHVuc2lnbmVkIGNoYXIgYywgaW50IGkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWNhLmgKaW5kZXggYzhhM2NiZi4uYjYzNDQ1NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oCkBAIC0xNCw5ICsxNCwxMSBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfUEFDQV9ICiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZQk8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZQk8YXNtL2xwcGFjYS5oPgotI2luY2x1ZGUJPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbHBwYWNhLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbi02NGUuaD4KIAogcmVnaXN0ZXIgc3RydWN0IHBhY2Ffc3RydWN0ICpsb2NhbF9wYWNhIGFzbSgicjEzIik7CiAKQEAgLTkxLDYgKzkzLDIxIEBACiAJdTE2IHNsYl9jYWNoZVtTTEJfQ0FDSEVfRU5UUklFU107CiAjZW5kaWYgLyogQ09ORklHX1BQQ19TVERfTU1VXzY0ICovCiAKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorCXBnZF90ICpwZ2Q7CQkJLyogQ3VycmVudCBQR0QgKi8KKwlwZ2RfdCAqa2VybmVsX3BnZDsJCS8qIEtlcm5lbCBQR0QgKi8KKwl1NjQgZXhnZW5bOF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgweDgwKSkpOworCXU2NCBleHRsYltFWF9UTEJfU0laRSozXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDB4ODApKSk7CisJdTY0IGV4bWNbOF07CQkvKiB1c2VkIGZvciBtYWNoaW5lIGNoZWNrcyAqLworCXU2NCBleGNyaXRbOF07CQkvKiB1c2VkIGZvciBjcml0IGludGVycnVwdHMgKi8KKwl1NjQgZXhkYmdbOF07CQkvKiB1c2VkIGZvciBkZWJ1ZyBpbnRlcnJ1cHRzICovCisKKwkvKiBLZXJuZWwgc3RhY2sgcG9pbnRlcnMgZm9yIHVzZSBieSBzcGVjaWFsIGV4Y2VwdGlvbnMgKi8KKwl2b2lkICptY19rc3RhY2s7CisJdm9pZCAqY3JpdF9rc3RhY2s7CisJdm9pZCAqZGJnX2tzdGFjazsKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0JPT0szRSAqLworCiAJbW1fY29udGV4dF90IGNvbnRleHQ7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggNDk0MDY2Mi4uZmYyNDI1NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMzksNyArMTM5LDExIEBACiAgKiBEb24ndCBjb21wYXJlIHRoaW5ncyB3aXRoIEtFUk5FTEJBU0Ugb3IgUEFHRV9PRkZTRVQgdG8gdGVzdCBmb3IKICAqICJrZXJuZWxuZXNzIiwgdXNlIGlzX2tlcm5lbF9hZGRyKCkgLSBpdCBzaG91bGQgZG8gd2hhdCB5b3Ugd2FudC4KICAqLworI2lmZGVmIENPTkZJR19QUENfQk9PSzNFXzY0CisjZGVmaW5lIGlzX2tlcm5lbF9hZGRyKHgpCSgoeCkgPj0gMHg4MDAwMDAwMDAwMDAwMDAwdWwpCisjZWxzZQogI2RlZmluZSBpc19rZXJuZWxfYWRkcih4KQkoKHgpID49IFBBR0VfT0ZGU0VUKQorI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzY0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV82NC5oCmluZGV4IDU4MTdhM2IuLjNmMTdiODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzY0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaApAQCAtMTM1LDEyICsxMzUsMjIgQEAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbHNlCiAjZGVmaW5lIHNsaWNlX2luaXQoKQorI2lmZGVmIENPTkZJR19QUENfU1REX01NVV82NAogI2RlZmluZSBnZXRfc2xpY2VfcHNpemUobW0sIGFkZHIpCSgobW0pLT5jb250ZXh0LnVzZXJfcHNpemUpCiAjZGVmaW5lIHNsaWNlX3NldF91c2VyX3BzaXplKG1tLCBwc2l6ZSkJCVwKIGRvIHsJCQkJCQlcCiAJKG1tKS0+Y29udGV4dC51c2VyX3BzaXplID0gKHBzaXplKTsJXAogCShtbSktPmNvbnRleHQuc2xscCA9IFNMQl9WU0lEX1VTRVIgfCBtbXVfcHNpemVfZGVmc1socHNpemUpXS5zbGxwOyBcCiB9IHdoaWxlICgwKQorI2Vsc2UgLyogQ09ORklHX1BQQ19TVERfTU1VXzY0ICovCisjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKKyNkZWZpbmUgZ2V0X3NsaWNlX3BzaXplKG1tLCBhZGRyKQlNTVVfUEFHRV82NEsKKyNlbHNlIC8qIENPTkZJR19QUENfNjRLX1BBR0VTICovCisjZGVmaW5lIGdldF9zbGljZV9wc2l6ZShtbSwgYWRkcikJTU1VX1BBR0VfNEsKKyNlbmRpZiAvKiAhQ09ORklHX1BQQ182NEtfUEFHRVMgKi8KKyNkZWZpbmUgc2xpY2Vfc2V0X3VzZXJfcHNpemUobW0sIHBzaXplKQlkbyB7IEJVRygpOyB9IHdoaWxlKDApCisjZW5kaWYgLyogIUNPTkZJR19QUENfU1REX01NVV82NCAqLworCiAjZGVmaW5lIHNsaWNlX3NldF9yYW5nZV9wc2l6ZShtbSwgc3RhcnQsIGxlbiwgcHNpemUpCVwKIAlzbGljZV9zZXRfdXNlcl9wc2l6ZSgobW0pLCAocHNpemUpKQogI2RlZmluZSBzbGljZV9tbV9uZXdfY29udGV4dChtbSkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmgKaW5kZXggNGM2MWZhMC4uNzZlMWYzMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLWJyaWRnZS5oCkBAIC03Nyw5ICs3Nyw3IEBACiAKIAlpbnQgZmlyc3RfYnVzbm87CiAJaW50IGxhc3RfYnVzbm87Ci0jaWZuZGVmIENPTkZJR19QUEM2NAogCWludCBzZWxmX2J1c25vOwotI2VuZGlmCiAKIAl2b2lkIF9faW9tZW0gKmlvX2Jhc2VfdmlydDsKICNpZmRlZiBDT05GSUdfUFBDNjQKQEAgLTEwNCw3ICsxMDIsNiBAQAogCXVuc2lnbmVkIGludCBfX2lvbWVtICpjZmdfYWRkcjsKIAl2b2lkIF9faW9tZW0gKmNmZ19kYXRhOwogCi0jaWZuZGVmIENPTkZJR19QUEM2NAogCS8qCiAJICogVXNlZCBmb3IgdmFyaWFudHMgb2YgUENJIGluZGlyZWN0IGhhbmRsaW5nIGFuZCBwb3NzaWJsZSBxdWlya3M6CiAJICogIFNFVF9DRkdfVFlQRSAtIHVzZWQgb24gNHh4IG9yIGFueSBQSEIgdGhhdCBkb2VzIGV4cGxpY2l0IHR5cGUwLzEKQEAgLTEyOCw3ICsxMjUsNiBAQAogI2RlZmluZSBQUENfSU5ESVJFQ1RfVFlQRV9CSUdfRU5ESUFOCQkweDAwMDAwMDEwCiAjZGVmaW5lIFBQQ19JTkRJUkVDVF9UWVBFX0JST0tFTl9NUk0JCTB4MDAwMDAwMjAKIAl1MzIgaW5kaXJlY3RfdHlwZTsKLSNlbmRpZgkvKiAhQ09ORklHX1BQQzY0ICovCiAJLyogQ3VycmVudGx5LCB3ZSBsaW1pdCBvdXJzZWx2ZXMgdG8gMSBJTyByYW5nZSBhbmQgMyBtZW0KIAkgKiByYW5nZXMgc2luY2UgdGhlIGNvbW1vbiBwY2lfYnVzIHN0cnVjdHVyZSBjYW4ndCBoYW5kbGUgbW9yZQogCSAqLwpAQCAtMTQ2LDIxICsxNDIsNiBAQAogI2VuZGlmCS8qIENPTkZJR19QUEM2NCAqLwogfTsKIAotI2lmbmRlZiBDT05GSUdfUFBDNjQKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBjaV9idXNfdG9faG9zdChjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCXJldHVybiBidXMtPnN5c2RhdGE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzYV92YWRkcl9pc19pb3BvcnQodm9pZCBfX2lvbWVtICphZGRyZXNzKQotewotCS8qIE5vIHNwZWNpZmljIElTQSBoYW5kbGluZyBvbiBwcGMzMiBhdCB0aGlzIHN0YWdlLCBpdAotCSAqIGFsbCBnb2VzIHRocm91Z2ggUENJCi0JICovCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIFRoZXNlIGFyZSB1c2VkIGZvciBjb25maWcgYWNjZXNzIGJlZm9yZSBhbGwgdGhlIFBDSSBwcm9iaW5nCiAgICBoYXMgYmVlbiBkb25lLiAqLwogZXh0ZXJuIGludCBlYXJseV9yZWFkX2NvbmZpZ19ieXRlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgaW50IGJ1cywKQEAgLTE4Miw2ICsxNjMsMjIgQEAKIGV4dGVybiB2b2lkIHNldHVwX2luZGlyZWN0X3BjaShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIqIGhvc2UsCiAJCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90IGNmZ19hZGRyLAogCQkJICAgICAgIHJlc291cmNlX3NpemVfdCBjZmdfZGF0YSwgdTMyIGZsYWdzKTsKKworI2lmbmRlZiBDT05GSUdfUFBDNjQKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBjaV9idXNfdG9faG9zdChjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXJldHVybiBidXMtPnN5c2RhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzYV92YWRkcl9pc19pb3BvcnQodm9pZCBfX2lvbWVtICphZGRyZXNzKQoreworCS8qIE5vIHNwZWNpZmljIElTQSBoYW5kbGluZyBvbiBwcGMzMiBhdCB0aGlzIHN0YWdlLCBpdAorCSAqIGFsbCBnb2VzIHRocm91Z2ggUENJCisJICovCisJcmV0dXJuIDA7Cit9CisKICNlbHNlCS8qIENPTkZJR19QUEM2NCAqLwogCiAvKgpAQCAtMjg0LDExICsyODEsNiBAQAogZXh0ZXJuIGludCBwY2liaW9zX3VubWFwX2lvX3NwYWNlKHN0cnVjdCBwY2lfYnVzICpidXMpOwogZXh0ZXJuIGludCBwY2liaW9zX21hcF9pb19zcGFjZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIAotLyogUmV0dXJuIHZhbHVlcyBmb3IgcHBjX21kLnBjaV9wcm9iZV9tb2RlIGZ1bmN0aW9uICovCi0jZGVmaW5lIFBDSV9QUk9CRV9OT05FCQktMQkvKiBEb24ndCBsb29rIGF0IHRoaXMgYnVzIGF0IGFsbCAqLwotI2RlZmluZSBQQ0lfUFJPQkVfTk9STUFMCTAJLyogRG8gbm9ybWFsIFBDSSBwcm9iaW5nICovCi0jZGVmaW5lIFBDSV9QUk9CRV9ERVZUUkVFCTEJLyogSW5zdGFudGlhdGUgZnJvbSBkZXZpY2UgdHJlZSAqLwotCiAjaWZkZWYgQ09ORklHX05VTUEKICNkZWZpbmUgUEhCX1NFVF9OT0RFKFBIQiwgTk9ERSkJCSgoUEhCKS0+bm9kZSA9IChOT0RFKSkKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggMzYwNTdjOC4uYjVlYTYyNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2kuaApAQCAtMjIsNiArMjIsMTEgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS1kbWEtY29tcGF0Lmg+CiAKKy8qIFJldHVybiB2YWx1ZXMgZm9yIHBwY19tZC5wY2lfcHJvYmVfbW9kZSBmdW5jdGlvbiAqLworI2RlZmluZSBQQ0lfUFJPQkVfTk9ORQkJLTEJLyogRG9uJ3QgbG9vayBhdCB0aGlzIGJ1cyBhdCBhbGwgKi8KKyNkZWZpbmUgUENJX1BST0JFX05PUk1BTAkwCS8qIERvIG5vcm1hbCBQQ0kgcHJvYmluZyAqLworI2RlZmluZSBQQ0lfUFJPQkVfREVWVFJFRQkxCS8qIEluc3RhbnRpYXRlIGZyb20gZGV2aWNlIHRyZWUgKi8KKwogI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJMHgxMDAwCiAjZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJMHgxMDAwMDAwMAogCkBAIC02MCw4ICs2NSw4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUENJCi1leHRlcm4gdm9pZCBzZXRfcGNpX2RtYV9vcHMoc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyk7Ci1leHRlcm4gc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZ2V0X3BjaV9kbWFfb3BzKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0X3BjaV9kbWFfb3BzKHN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wcyk7CitleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzICpnZXRfcGNpX2RtYV9vcHModm9pZCk7CiAjZWxzZQkvKiBDT05GSUdfUENJICovCiAjZGVmaW5lIHNldF9wY2lfZG1hX29wcyhkKQogI2RlZmluZSBnZXRfcGNpX2RtYV9vcHMoKQlOVUxMCkBAIC0yMjcsNiArMjMyLDggQEAKIAogZXh0ZXJuIHZvaWQgcGNpYmlvc19zZXR1cF9idXNfZGV2aWNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIGV4dGVybiB2b2lkIHBjaWJpb3Nfc2V0dXBfYnVzX3NlbGYoc3RydWN0IHBjaV9idXMgKmJ1cyk7CitleHRlcm4gdm9pZCBwY2liaW9zX3NldHVwX3BoYl9pb19zcGFjZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpOworZXh0ZXJuIHZvaWQgcGNpYmlvc19zY2FuX3BoYihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHZvaWQgKnN5c2RhdGEpOwogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1BPV0VSUENfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDE3MzBlNWUuLmYyZTgxMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtNCw2ICs0LDE1IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKK2V4dGVybiB2b2lkIHRsYl9mbHVzaF9wZ3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CisjZWxzZSAvKiBDT05GSUdfUFBDX0JPT0szRSAqLworc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9wZ3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7Cit9CisjZW5kaWYgLyogIUNPTkZJR19QUENfQk9PSzNFICovCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB0ZV90ICpwdGUpCiB7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXB0ZSk7CkBAIC0xOSw3ICsyOCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgdmFsOwogfSBwZ3RhYmxlX2ZyZWVfdDsKIAotI2RlZmluZSBQR0ZfQ0FDSEVOVU1fTUFTSwkweDcKKy8qIFRoaXMgbmVlZHMgdG8gYmUgYmlnIGVub3VnaCB0byBhbGxvdyBmb3IgTU1VX1BBR0VfQ09VTlQgKyAyIHRvIGJlIHN0b3JlZAorICogYW5kIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gdGhlIGxvdyBiaXRzIG9mIGFueSBuYXR1cmFsbHkgYWxpZ25lZCBwYWdlCisgKiB0YWJsZSBjYWNoZSBlbnRyeS4gQXJiaXRyYXJpbHkgc2V0IHRvIDB4MWYsIHRoYXQgc2hvdWxkIGdpdmUgdXMgc29tZQorICogcm9vbSB0byBncm93CisgKi8KKyNkZWZpbmUgUEdGX0NBQ0hFTlVNX01BU0sJMHgxZgogCiBzdGF0aWMgaW5saW5lIHBndGFibGVfZnJlZV90IHBndGFibGVfZnJlZV9jYWNoZSh2b2lkICpwLCBpbnQgY2FjaGVudW0sCiAJCQkJCQl1bnNpZ25lZCBsb25nIG1hc2spCkBAIC0zNSwxOSArNDksMjcgQEAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy0zMi5oPgogI2VuZGlmCiAKLWV4dGVybiB2b2lkIHBndGFibGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV9mcmVlX3QgcGdmKTsKLQogI2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLHB0ZXBhZ2UsYWRkcmVzcykJCVwKLWRvIHsgXAotCXBndGFibGVfcGFnZV9kdG9yKHB0ZXBhZ2UpOyBcCi0JcGd0YWJsZV9mcmVlX3RsYih0bGIsIHBndGFibGVfZnJlZV9jYWNoZShwYWdlX2FkZHJlc3MocHRlcGFnZSksIFwKLQkJCQkJUFRFX05PTkNBQ0hFX05VTSwgUFRFX1RBQkxFX1NJWkUtMSkpOyBcCi19IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHJlc3MpCXB0ZV9mcmVlKCh0bGIpLT5tbSwgKHB0ZSkpCi0jZW5kaWYKK2V4dGVybiB2b2lkIHBndGFibGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV9mcmVlX3QgcGdmKTsKK2V4dGVybiB2b2lkIHB0ZV9mcmVlX2ZpbmlzaCh2b2lkKTsKKyNlbHNlIC8qIENPTkZJR19TTVAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfZnJlZV90IHBnZikKK3sKKwlwZ3RhYmxlX2ZyZWUocGdmKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9maW5pc2godm9pZCkgeyB9CisjZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KIAorc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwdGVwYWdlLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXBndGFibGVfZnJlZV90IHBnZiA9IHBndGFibGVfZnJlZV9jYWNoZShwYWdlX2FkZHJlc3MocHRlcGFnZSksCisJCQkJCQlQVEVfTk9OQ0FDSEVfTlVNLAorCQkJCQkJUFRFX1RBQkxFX1NJWkUtMSk7CisJdGxiX2ZsdXNoX3BndGFibGUodGxiLCBhZGRyZXNzKTsKKwlwZ3RhYmxlX3BhZ2VfZHRvcihwdGVwYWdlKTsKKwlwZ3RhYmxlX2ZyZWVfdGxiKHRsYiwgcGdmKTsKK30KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaAppbmRleCBjOWZmOWQ3Li41NTY0NmFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzMyLmgKQEAgLTExMSw2ICsxMTEsOCBAQAogI2luY2x1ZGUgPGFzbS9wdGUtNDB4Lmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR180NHgpCiAjaW5jbHVkZSA8YXNtL3B0ZS00NHguaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX0ZTTF9CT09LRSkgJiYgZGVmaW5lZChDT05GSUdfUFRFXzY0QklUKQorI2luY2x1ZGUgPGFzbS9wdGUtYm9vazNlLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19GU0xfQk9PS0UpCiAjaW5jbHVkZSA8YXNtL3B0ZS1mc2wtYm9va2UuaD4KICNlbGlmIGRlZmluZWQoQ09ORklHXzh4eCkKQEAgLTE4Niw3ICsxODgsNyBAQAogI2VuZGlmIC8qICFQVEVfQVRPTUlDX1VQREFURVMgKi8KIAogI2lmZGVmIENPTkZJR180NHgKLQlpZiAoKG9sZCAmIF9QQUdFX1VTRVIpICYmIChvbGQgJiBfUEFHRV9IV0VYRUMpKQorCWlmICgob2xkICYgX1BBR0VfVVNFUikgJiYgKG9sZCAmIF9QQUdFX0VYRUMpKQogCQlpY2FjaGVfNDR4X25lZWRfZmx1c2ggPSAxOwogI2VuZGlmCiAJcmV0dXJuIG9sZDsKQEAgLTIxNyw3ICsyMTksNyBAQAogI2VuZGlmIC8qICFQVEVfQVRPTUlDX1VQREFURVMgKi8KIAogI2lmZGVmIENPTkZJR180NHgKLQlpZiAoKG9sZCAmIF9QQUdFX1VTRVIpICYmIChvbGQgJiBfUEFHRV9IV0VYRUMpKQorCWlmICgob2xkICYgX1BBR0VfVVNFUikgJiYgKG9sZCAmIF9QQUdFX0VYRUMpKQogCQlpY2FjaGVfNDR4X25lZWRfZmx1c2ggPSAxOwogI2VuZGlmCiAJcmV0dXJuIG9sZDsKQEAgLTI2Nyw4ICsyNjksNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSkKIHsKIAl1bnNpZ25lZCBsb25nIGJpdHMgPSBwdGVfdmFsKGVudHJ5KSAmCi0JCShfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUlcgfAotCQkgX1BBR0VfSFdFWEVDIHwgX1BBR0VfRVhFQyk7CisJCShfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUlcgfCBfUEFHRV9FWEVDKTsKIAlwdGVfdXBkYXRlKHB0ZXAsIDAsIGJpdHMpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC02NGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTY0ay5oCmluZGV4IDZjYzA4NWIuLjkwNTMzZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTY0ay5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTY0ay5oCkBAIC0xMCwxMCArMTAsMTAgQEAKICNkZWZpbmUgUEdEX0lOREVYX1NJWkUgIDQKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLQogI2RlZmluZSBQVEVfVEFCTEVfU0laRQkoc2l6ZW9mKHJlYWxfcHRlX3QpIDw8IFBURV9JTkRFWF9TSVpFKQogI2RlZmluZSBQTURfVEFCTEVfU0laRQkoc2l6ZW9mKHBtZF90KSA8PCBQTURfSU5ERVhfU0laRSkKICNkZWZpbmUgUEdEX1RBQkxFX1NJWkUJKHNpemVvZihwZ2RfdCkgPDwgUEdEX0lOREVYX1NJWkUpCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCiAKICNkZWZpbmUgUFRSU19QRVJfUFRFCSgxIDw8IFBURV9JTkRFWF9TSVpFKQogI2RlZmluZSBQVFJTX1BFUl9QTUQJKDEgPDwgUE1EX0lOREVYX1NJWkUpCkBAIC0zMiw4ICszMiw2IEBACiAjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKICNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQogCi0jZW5kaWYJLyogX19BU1NFTUJMWV9fICovCi0KIC8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBNRCB0byBnZXQgdG8gdGhlIFBURSBwYWdlICovCiAjZGVmaW5lIFBNRF9NQVNLRURfQklUUwkJMHgxZmYKIC8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBHRC9QVUQgdG8gZ2V0IHRvIHRoZSBQTUQgcGFnZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmgKaW5kZXggOGNkMDgzYy4uODA2YWJlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oCkBAIC01LDExICs1LDYgQEAKICAqIHRoZSBwcGM2NCBoYXNoZWQgcGFnZSB0YWJsZS4KICAqLwogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCiAjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKICNpbmNsdWRlIDxhc20vcGd0YWJsZS1wcGM2NC02NGsuaD4KICNlbHNlCkBAIC0zOCwyNiArMzMsNDcgQEAKICNlbmRpZgogCiAvKgotICogRGVmaW5lIHRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSB2bWFsbG9jIFZNIGFyZWEuCisgKiBEZWZpbmUgdGhlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIGtlcm5lbCBub24tbGluZWFyIHZpcnR1YWwgYXJlYQogICovCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQgQVNNX0NPTlNUKDB4RDAwMDAwMDAwMDAwMDAwMCkKLSNkZWZpbmUgVk1BTExPQ19TSVpFICAoUEdUQUJMRV9SQU5HRSA+PiAxKQotI2RlZmluZSBWTUFMTE9DX0VORCAgIChWTUFMTE9DX1NUQVJUICsgVk1BTExPQ19TSVpFKQorCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKKyNkZWZpbmUgS0VSTl9WSVJUX1NUQVJUIEFTTV9DT05TVCgweDgwMDAwMDAwMDAwMDAwMDApCisjZWxzZQorI2RlZmluZSBLRVJOX1ZJUlRfU1RBUlQgQVNNX0NPTlNUKDB4RDAwMDAwMDAwMDAwMDAwMCkKKyNlbmRpZgorI2RlZmluZSBLRVJOX1ZJUlRfU0laRQlQR1RBQkxFX1JBTkdFCiAKIC8qCi0gKiBEZWZpbmUgdGhlIGFkZHJlc3MgcmFuZ2VzIGZvciBNTUlPIGFuZCBJTyBzcGFjZSA6CisgKiBUaGUgdm1hbGxvYyBzcGFjZSBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGF0IHJlZ2lvbiwgYW5kCisgKiBvY2N1cGllcyBoYWxmIG9mIGl0IG9uIGhhc2ggQ1BVcyBhbmQgYSBxdWFydGVyIG9mIGl0IG9uIEJvb2szRQorICogKHdlIGtlZXAgYSBxdWFydGVyIGZvciB0aGUgdmlydHVhbCBtZW1tYXApCisgKi8KKyNkZWZpbmUgVk1BTExPQ19TVEFSVAlLRVJOX1ZJUlRfU1RBUlQKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorI2RlZmluZSBWTUFMTE9DX1NJWkUJKEtFUk5fVklSVF9TSVpFID4+IDIpCisjZWxzZQorI2RlZmluZSBWTUFMTE9DX1NJWkUJKEtFUk5fVklSVF9TSVpFID4+IDEpCisjZW5kaWYKKyNkZWZpbmUgVk1BTExPQ19FTkQJKFZNQUxMT0NfU1RBUlQgKyBWTUFMTE9DX1NJWkUpCisKKy8qCisgKiBUaGUgc2Vjb25kIGhhbGYgb2YgdGhlIGtlcm5lbCB2aXJ0dWFsIHNwYWNlIGlzIHVzZWQgZm9yIElPIG1hcHBpbmdzLAorICogaXQncyBpdHNlbGYgY2FydmVkIGludG8gdGhlIFBJTyByZWdpb24gKElTQSBhbmQgUEhCIElPIHNwYWNlKSBhbmQKKyAqIHRoZSBpb3JlbWFwIHNwYWNlCiAgKgotICogIElTQV9JT19CQVNFID0gVk1BTExPQ19FTkQsIDY0SyByZXNlcnZlZCBhcmVhCisgKiAgSVNBX0lPX0JBU0UgPSBLRVJOX0lPX1NUQVJULCA2NEsgcmVzZXJ2ZWQgYXJlYQogICogIFBIQl9JT19CQVNFID0gSVNBX0lPX0JBU0UgKyA2NEsgdG8gSVNBX0lPX0JBU0UgKyAyRywgUEhCIElPIHNwYWNlcwogICogSU9SRU1BUF9CQVNFID0gSVNBX0lPX0JBU0UgKyAyRyB0byBWTUFMTE9DX1NUQVJUICsgUEdUQUJMRV9SQU5HRQogICovCisjZGVmaW5lIEtFUk5fSU9fU1RBUlQJKEtFUk5fVklSVF9TVEFSVCArIChLRVJOX1ZJUlRfU0laRSA+PiAxKSkKICNkZWZpbmUgRlVMTF9JT19TSVpFCTB4ODAwMDAwMDB1bAotI2RlZmluZSAgSVNBX0lPX0JBU0UJKFZNQUxMT0NfRU5EKQotI2RlZmluZSAgSVNBX0lPX0VORAkoVk1BTExPQ19FTkQgKyAweDEwMDAwdWwpCisjZGVmaW5lICBJU0FfSU9fQkFTRQkoS0VSTl9JT19TVEFSVCkKKyNkZWZpbmUgIElTQV9JT19FTkQJKEtFUk5fSU9fU1RBUlQgKyAweDEwMDAwdWwpCiAjZGVmaW5lICBQSEJfSU9fQkFTRQkoSVNBX0lPX0VORCkKLSNkZWZpbmUgIFBIQl9JT19FTkQJKFZNQUxMT0NfRU5EICsgRlVMTF9JT19TSVpFKQorI2RlZmluZSAgUEhCX0lPX0VORAkoS0VSTl9JT19TVEFSVCArIEZVTExfSU9fU0laRSkKICNkZWZpbmUgSU9SRU1BUF9CQVNFCShQSEJfSU9fRU5EKQotI2RlZmluZSBJT1JFTUFQX0VORAkoVk1BTExPQ19TVEFSVCArIFBHVEFCTEVfUkFOR0UpCisjZGVmaW5lIElPUkVNQVBfRU5ECShLRVJOX1ZJUlRfU1RBUlQgKyBLRVJOX1ZJUlRfU0laRSkKKwogCiAvKgogICogUmVnaW9uIElEcwpAQCAtNjgsMjMgKzg0LDMyIEBACiAKICNkZWZpbmUgVk1BTExPQ19SRUdJT05fSUQJKFJFR0lPTl9JRChWTUFMTE9DX1NUQVJUKSkKICNkZWZpbmUgS0VSTkVMX1JFR0lPTl9JRAkoUkVHSU9OX0lEKFBBR0VfT0ZGU0VUKSkKLSNkZWZpbmUgVk1FTU1BUF9SRUdJT05fSUQJKDB4ZlVMKQorI2RlZmluZSBWTUVNTUFQX1JFR0lPTl9JRAkoMHhmVUwpCS8qIFNlcnZlciBvbmx5ICovCiAjZGVmaW5lIFVTRVJfUkVHSU9OX0lECQkoMFVMKQogCiAvKgotICogRGVmaW5lcyB0aGUgYWRkcmVzcyBvZiB0aGUgdm1lbWFwIGFyZWEsIGluIGl0cyBvd24gcmVnaW9uCisgKiBEZWZpbmVzIHRoZSBhZGRyZXNzIG9mIHRoZSB2bWVtYXAgYXJlYSwgaW4gaXRzIG93biByZWdpb24gb24KKyAqIGhhc2ggdGFibGUgQ1BVcyBhbmQgYWZ0ZXIgdGhlIHZtYWxsb2Mgc3BhY2Ugb24gQm9vazNFCiAgKi8KKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorI2RlZmluZSBWTUVNTUFQX0JBU0UJCVZNQUxMT0NfRU5ECisjZGVmaW5lIFZNRU1NQVBfRU5ECQlLRVJOX0lPX1NUQVJUCisjZWxzZQogI2RlZmluZSBWTUVNTUFQX0JBU0UJCShWTUVNTUFQX1JFR0lPTl9JRCA8PCBSRUdJT05fU0hJRlQpCisjZW5kaWYKICNkZWZpbmUgdm1lbW1hcAkJCSgoc3RydWN0IHBhZ2UgKilWTUVNTUFQX0JBU0UpCiAKIAogLyoKICAqIEluY2x1ZGUgdGhlIFBURSBiaXRzIGRlZmluaXRpb25zCiAgKi8KKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szUwogI2luY2x1ZGUgPGFzbS9wdGUtaGFzaDY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS9wdGUtYm9vazNlLmg+CisjZW5kaWYKICNpbmNsdWRlIDxhc20vcHRlLWNvbW1vbi5oPgogCi0KICNpZmRlZiBDT05GSUdfUFBDX01NX1NMSUNFUwogI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQogI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQV9UT1BET1dOCkBAIC05Miw2ICsxMTcsOSBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKIC8qCiAgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHZhcmlvdXMgUFRFIGFjY2Vzc29ycywgaXQncwogICogdXNlZCBpbiBhbGwgY2FzZXMgZXhjZXB0IEJvb2szUyB3aXRoIDY0SyBwYWdlcyB3aGVyZSB3ZSBoYXZlIGEKQEAgLTI4NSw4ICszMTMsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSkKIHsKIAl1bnNpZ25lZCBsb25nIGJpdHMgPSBwdGVfdmFsKGVudHJ5KSAmCi0JCShfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUlcgfAotCQkgX1BBR0VfRVhFQyB8IF9QQUdFX0hXRVhFQyk7CisJCShfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUlcgfCBfUEFHRV9FWEVDKTsKIAogI2lmZGVmIFBURV9BVE9NSUNfVVBEQVRFUwogCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBlYjE3ZGE3Li4yYTVkYTA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTEwNCw4ICsxMDQsOCBAQAogCWVsc2UKIAkJcHRlX3VwZGF0ZShwdGVwLCB+X1BBR0VfSEFTSFBURSwgcHRlX3ZhbChwdGUpKTsKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmIGRlZmluZWQoQ09ORklHX1BURV82NEJJVCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQotCS8qIFNlY29uZCBjYXNlIGlzIDMyLWJpdCB3aXRoIDY0LWJpdCBQVEUgaW4gU01QIG1vZGUuIEluIHRoaXMgY2FzZSwgd2UKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiBkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpCisJLyogU2Vjb25kIGNhc2UgaXMgMzItYml0IHdpdGggNjQtYml0IFBURS4gIEluIHRoaXMgY2FzZSwgd2UKIAkgKiBjYW4ganVzdCBzdG9yZSBhcyBsb25nIGFzIHdlIGRvIHRoZSB0d28gaGFsdmVzIGluIHRoZSByaWdodCBvcmRlcgogCSAqIHdpdGggYSBiYXJyaWVyIGluIGJldHdlZW4uIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSB3ZSB0YWtlIGNhcmUsCiAJICogaW4gdGhlIGhhc2ggY29kZSwgdG8gcHJlLWludmFsaWRhdGUgaWYgdGhlIFBURSB3YXMgYWxyZWFkeSBoYXNoZWQsCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogI2Vsc2UKIAkvKiBBbnl0aGluZyBlbHNlIGp1c3Qgc3RvcmVzIHRoZSBQVEUgbm9ybWFsbHkuIFRoYXQgY292ZXJzIGFsbCA2NC1iaXQKLQkgKiBjYXNlcywgYW5kIDMyLWJpdCBub24taGFzaCB3aXRoIDY0LWJpdCBQVEVzIGluIFVQIG1vZGUKKwkgKiBjYXNlcywgYW5kIDMyLWJpdCBub24taGFzaCB3aXRoIDMyLWJpdCBQVEVzLgogCSAqLwogCSpwdGVwID0gcHRlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1jLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1jLmgKaW5kZXggZDZhNjE2YS4uY2NjNjhiNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWMuaApAQCAtMjcsMTAgKzI3LDIyIEBACiAKIGludCByZXNlcnZlX3BtY19oYXJkd2FyZShwZXJmX2lycV90IG5ld19wZXJmX2lycSk7CiB2b2lkIHJlbGVhc2VfcG1jX2hhcmR3YXJlKHZvaWQpOwordm9pZCBwcGNfZW5hYmxlX3BtY3Modm9pZCk7CiAKICNpZmRlZiBDT05GSUdfUFBDNjQKLXZvaWQgcG93ZXI0X2VuYWJsZV9wbWNzKHZvaWQpOwotdm9pZCBwYXNlbWlfZW5hYmxlX3BtY3Modm9pZCk7CisjaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgcHBjX3NldF9wbXVfaW51c2UoaW50IGludXNlKQoreworCWdldF9scHBhY2EoKS0+cG1jcmVnc19pbl91c2UgPSBpbnVzZTsKK30KKworZXh0ZXJuIHZvaWQgcG93ZXI0X2VuYWJsZV9wbWNzKHZvaWQpOworCisjZWxzZSAvKiBDT05GSUdfUFBDNjQgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHBwY19zZXRfcG11X2ludXNlKGludCBpbnVzZSkgeyB9CisKICNlbmRpZgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmgKaW5kZXggYjc0ZjE2ZC4uZWY5YWE4NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oCkBAIC00OCw2ICs0OCw4IEBACiAjZGVmaW5lIFBQQ19JTlNUX1RMQklFCQkJMHg3YzAwMDI2NAogI2RlZmluZSBQUENfSU5TVF9UTEJJTFgJCQkweDdjMDAwMDI0CiAjZGVmaW5lIFBQQ19JTlNUX1dBSVQJCQkweDdjMDAwMDdjCisjZGVmaW5lIFBQQ19JTlNUX1RMQklWQVgJCTB4N2MwMDA2MjQKKyNkZWZpbmUgUFBDX0lOU1RfVExCU1JYX0RPVAkJMHg3YzAwMDZhNQogCiAvKiBtYWNyb3MgdG8gaW5zZXJ0IGZpZWxkcyBpbnRvIG9wY29kZXMgKi8KICNkZWZpbmUgX19QUENfUkEoYSkJKCgoYSkgJiAweDFmKSA8PCAxNikKQEAgLTc2LDYgKzc4LDEwIEBACiAJCQkJCV9fUFBDX1dDKHcpKQogI2RlZmluZSBQUENfVExCSUUobHAsYSkgCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX1RMQklFIHwgXAogCQkJCQkgICAgICAgX19QUENfUkIoYSkgfCBfX1BQQ19SUyhscCkpCisjZGVmaW5lIFBQQ19UTEJTUlhfRE9UKGEsYikJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfVExCU1JYX0RPVCB8IFwKKwkJCQkJX19QUENfUkEoYSkgfCBfX1BQQ19SQihiKSkKKyNkZWZpbmUgUFBDX1RMQklWQVgoYSxiKQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9UTEJJVkFYIHwgXAorCQkJCQlfX1BQQ19SQShhKSB8IF9fUFBDX1JCKGIpKQogCiAvKgogICogRGVmaW5lIHdoYXQgdGhlIFZTWCBYWDEgZm9ybSBpbnN0cnVjdGlvbnMgd2lsbCBsb29rIGxpa2UsIHRoZW4gYWRkCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLXBjaS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1wY2kuaAppbmRleCA4NTRhYjcxLi4yODI4ZjlkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLXBjaS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtcGNpLmgKQEAgLTM5LDcgKzM5LDYgQEAKIAogZXh0ZXJuIHZvaWQgcGNpX2RldnNfcGhiX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBwY2lfZGV2c19waGJfaW5pdF9keW5hbWljKHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiKTsKLWV4dGVybiB2b2lkIHNjYW5fcGhiKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSk7CiAKIC8qIEZyb20gcnRhc19wY2kuaCAqLwogZXh0ZXJuIHZvaWQgaW5pdF9wY2lfY29uZmlnX3Rva2VucyAodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjX2FzbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaAppbmRleCBmOTcyOTUyLi40OThmZTA5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjX2FzbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGNfYXNtLmgKQEAgLTk4LDEzICs5OCwxMyBAQAogI2RlZmluZSBSRVNUXzE2RlBSUyhuLCBiYXNlKQlSRVNUXzhGUFJTKG4sIGJhc2UpOyBSRVNUXzhGUFJTKG4rOCwgYmFzZSkKICNkZWZpbmUgUkVTVF8zMkZQUlMobiwgYmFzZSkJUkVTVF8xNkZQUlMobiwgYmFzZSk7IFJFU1RfMTZGUFJTKG4rMTYsIGJhc2UpCiAKLSNkZWZpbmUgU0FWRV9WUihuLGIsYmFzZSkJbGkgYixUSFJFQURfVlIwKygxNioobikpOyAgc3R2eCBuLGIsYmFzZQorI2RlZmluZSBTQVZFX1ZSKG4sYixiYXNlKQlsaSBiLFRIUkVBRF9WUjArKDE2KihuKSk7ICBzdHZ4IG4sYmFzZSxiCiAjZGVmaW5lIFNBVkVfMlZSUyhuLGIsYmFzZSkJU0FWRV9WUihuLGIsYmFzZSk7IFNBVkVfVlIobisxLGIsYmFzZSkKICNkZWZpbmUgU0FWRV80VlJTKG4sYixiYXNlKQlTQVZFXzJWUlMobixiLGJhc2UpOyBTQVZFXzJWUlMobisyLGIsYmFzZSkKICNkZWZpbmUgU0FWRV84VlJTKG4sYixiYXNlKQlTQVZFXzRWUlMobixiLGJhc2UpOyBTQVZFXzRWUlMobis0LGIsYmFzZSkKICNkZWZpbmUgU0FWRV8xNlZSUyhuLGIsYmFzZSkJU0FWRV84VlJTKG4sYixiYXNlKTsgU0FWRV84VlJTKG4rOCxiLGJhc2UpCiAjZGVmaW5lIFNBVkVfMzJWUlMobixiLGJhc2UpCVNBVkVfMTZWUlMobixiLGJhc2UpOyBTQVZFXzE2VlJTKG4rMTYsYixiYXNlKQotI2RlZmluZSBSRVNUX1ZSKG4sYixiYXNlKQlsaSBiLFRIUkVBRF9WUjArKDE2KihuKSk7IGx2eCBuLGIsYmFzZQorI2RlZmluZSBSRVNUX1ZSKG4sYixiYXNlKQlsaSBiLFRIUkVBRF9WUjArKDE2KihuKSk7IGx2eCBuLGJhc2UsYgogI2RlZmluZSBSRVNUXzJWUlMobixiLGJhc2UpCVJFU1RfVlIobixiLGJhc2UpOyBSRVNUX1ZSKG4rMSxiLGJhc2UpCiAjZGVmaW5lIFJFU1RfNFZSUyhuLGIsYmFzZSkJUkVTVF8yVlJTKG4sYixiYXNlKTsgUkVTVF8yVlJTKG4rMixiLGJhc2UpCiAjZGVmaW5lIFJFU1RfOFZSUyhuLGIsYmFzZSkJUkVTVF80VlJTKG4sYixiYXNlKTsgUkVTVF80VlJTKG4rNCxiLGJhc2UpCkBAIC0xMTIsMjYgKzExMiwyNiBAQAogI2RlZmluZSBSRVNUXzMyVlJTKG4sYixiYXNlKQlSRVNUXzE2VlJTKG4sYixiYXNlKTsgUkVTVF8xNlZSUyhuKzE2LGIsYmFzZSkKIAogLyogU2F2ZSB0aGUgbG93ZXIgMzIgVlNScyBpbiB0aGUgdGhyZWFkIFZTUiByZWdpb24gKi8KLSNkZWZpbmUgU0FWRV9WU1IobixiLGJhc2UpCWxpIGIsVEhSRUFEX1ZTUjArKDE2KihuKSk7ICBTVFhWRDJYKG4sYixiYXNlKQorI2RlZmluZSBTQVZFX1ZTUihuLGIsYmFzZSkJbGkgYixUSFJFQURfVlNSMCsoMTYqKG4pKTsgIFNUWFZEMlgobixiYXNlLGIpCiAjZGVmaW5lIFNBVkVfMlZTUlMobixiLGJhc2UpCVNBVkVfVlNSKG4sYixiYXNlKTsgU0FWRV9WU1IobisxLGIsYmFzZSkKICNkZWZpbmUgU0FWRV80VlNSUyhuLGIsYmFzZSkJU0FWRV8yVlNSUyhuLGIsYmFzZSk7IFNBVkVfMlZTUlMobisyLGIsYmFzZSkKICNkZWZpbmUgU0FWRV84VlNSUyhuLGIsYmFzZSkJU0FWRV80VlNSUyhuLGIsYmFzZSk7IFNBVkVfNFZTUlMobis0LGIsYmFzZSkKICNkZWZpbmUgU0FWRV8xNlZTUlMobixiLGJhc2UpCVNBVkVfOFZTUlMobixiLGJhc2UpOyBTQVZFXzhWU1JTKG4rOCxiLGJhc2UpCiAjZGVmaW5lIFNBVkVfMzJWU1JTKG4sYixiYXNlKQlTQVZFXzE2VlNSUyhuLGIsYmFzZSk7IFNBVkVfMTZWU1JTKG4rMTYsYixiYXNlKQotI2RlZmluZSBSRVNUX1ZTUihuLGIsYmFzZSkJbGkgYixUSFJFQURfVlNSMCsoMTYqKG4pKTsgTFhWRDJYKG4sYixiYXNlKQorI2RlZmluZSBSRVNUX1ZTUihuLGIsYmFzZSkJbGkgYixUSFJFQURfVlNSMCsoMTYqKG4pKTsgTFhWRDJYKG4sYmFzZSxiKQogI2RlZmluZSBSRVNUXzJWU1JTKG4sYixiYXNlKQlSRVNUX1ZTUihuLGIsYmFzZSk7IFJFU1RfVlNSKG4rMSxiLGJhc2UpCiAjZGVmaW5lIFJFU1RfNFZTUlMobixiLGJhc2UpCVJFU1RfMlZTUlMobixiLGJhc2UpOyBSRVNUXzJWU1JTKG4rMixiLGJhc2UpCiAjZGVmaW5lIFJFU1RfOFZTUlMobixiLGJhc2UpCVJFU1RfNFZTUlMobixiLGJhc2UpOyBSRVNUXzRWU1JTKG4rNCxiLGJhc2UpCiAjZGVmaW5lIFJFU1RfMTZWU1JTKG4sYixiYXNlKQlSRVNUXzhWU1JTKG4sYixiYXNlKTsgUkVTVF84VlNSUyhuKzgsYixiYXNlKQogI2RlZmluZSBSRVNUXzMyVlNSUyhuLGIsYmFzZSkJUkVTVF8xNlZTUlMobixiLGJhc2UpOyBSRVNUXzE2VlNSUyhuKzE2LGIsYmFzZSkKIC8qIFNhdmUgdGhlIHVwcGVyIDMyIFZTUnMgKDMyLTYzKSBpbiB0aGUgdGhyZWFkIFZTWCByZWdpb24gKDAtMzEpICovCi0jZGVmaW5lIFNBVkVfVlNSVShuLGIsYmFzZSkJbGkgYixUSFJFQURfVlIwKygxNioobikpOyAgU1RYVkQyWChuKzMyLGIsYmFzZSkKKyNkZWZpbmUgU0FWRV9WU1JVKG4sYixiYXNlKQlsaSBiLFRIUkVBRF9WUjArKDE2KihuKSk7ICBTVFhWRDJYKG4rMzIsYmFzZSxiKQogI2RlZmluZSBTQVZFXzJWU1JTVShuLGIsYmFzZSkJU0FWRV9WU1JVKG4sYixiYXNlKTsgU0FWRV9WU1JVKG4rMSxiLGJhc2UpCiAjZGVmaW5lIFNBVkVfNFZTUlNVKG4sYixiYXNlKQlTQVZFXzJWU1JTVShuLGIsYmFzZSk7IFNBVkVfMlZTUlNVKG4rMixiLGJhc2UpCiAjZGVmaW5lIFNBVkVfOFZTUlNVKG4sYixiYXNlKQlTQVZFXzRWU1JTVShuLGIsYmFzZSk7IFNBVkVfNFZTUlNVKG4rNCxiLGJhc2UpCiAjZGVmaW5lIFNBVkVfMTZWU1JTVShuLGIsYmFzZSkJU0FWRV84VlNSU1UobixiLGJhc2UpOyBTQVZFXzhWU1JTVShuKzgsYixiYXNlKQogI2RlZmluZSBTQVZFXzMyVlNSU1UobixiLGJhc2UpCVNBVkVfMTZWU1JTVShuLGIsYmFzZSk7IFNBVkVfMTZWU1JTVShuKzE2LGIsYmFzZSkKLSNkZWZpbmUgUkVTVF9WU1JVKG4sYixiYXNlKQlsaSBiLFRIUkVBRF9WUjArKDE2KihuKSk7IExYVkQyWChuKzMyLGIsYmFzZSkKKyNkZWZpbmUgUkVTVF9WU1JVKG4sYixiYXNlKQlsaSBiLFRIUkVBRF9WUjArKDE2KihuKSk7IExYVkQyWChuKzMyLGJhc2UsYikKICNkZWZpbmUgUkVTVF8yVlNSU1UobixiLGJhc2UpCVJFU1RfVlNSVShuLGIsYmFzZSk7IFJFU1RfVlNSVShuKzEsYixiYXNlKQogI2RlZmluZSBSRVNUXzRWU1JTVShuLGIsYmFzZSkJUkVTVF8yVlNSU1UobixiLGJhc2UpOyBSRVNUXzJWU1JTVShuKzIsYixiYXNlKQogI2RlZmluZSBSRVNUXzhWU1JTVShuLGIsYmFzZSkJUkVTVF80VlNSU1UobixiLGJhc2UpOyBSRVNUXzRWU1JTVShuKzQsYixiYXNlKQpAQCAtMzc1LDggKzM3NSwxNSBAQAogI2RlZmluZSBQUEM0NDBFUF9FUlI0MgogI2VuZGlmCiAKLQotI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQorLyoKKyAqIHRvcmVhbC9mcm9tcmVhbC90b3BoeXMvdG92aXJ0IG1hY3Jvcy4gMzItYml0IEJvb2tFIG1ha2VzIHRoZW0KKyAqIGtlZXAgdGhlIGFkZHJlc3MgaW50YWN0IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBjb2RlIHNoYXJlZCB3aXRoCisgKiAzMi1iaXQgY2xhc3NpYy4KKyAqCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgSSBmaW5kIGl0IHVzZWZ1bCB0byBoYXZlIHRoZW0gYmVoYXZlIGFzIGV4cGVjdGVkCisgKiBieSB0aGVpciBuYW1lIChpZSBhbHdheXMgZG8gdGhlIGFkZGl0aW9uKSBvbiA2NC1iaXQgQm9va0UKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDNjQpCiAjZGVmaW5lIHRvcmVhbChyZCkKICNkZWZpbmUgZnJvbXJlYWwocmQpCiAKQEAgLTQyNiwxMCArNDMzLDkgQEAKIAkucHJldmlvdXMKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BQQzY0CisjaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKICNkZWZpbmUgUkZJCQlyZmlkCiAjZGVmaW5lIE1UTVNSRChyKQltdG1zcmQJcgotCiAjZWxzZQogI2RlZmluZSBGSVhfU1JSMShyYSwgcmIpCiAjaWZuZGVmIENPTkZJR180MHgKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDB4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQweC5oCmluZGV4IDA3NjMwZmEuLjZjM2UxZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDB4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00MHguaApAQCAtNDYsNyArNDYsNyBAQAogI2RlZmluZQlfUEFHRV9SVwkweDA0MAkvKiBzb2Z0d2FyZTogV3JpdGVzIHBlcm1pdHRlZCAqLwogI2RlZmluZQlfUEFHRV9ESVJUWQkweDA4MAkvKiBzb2Z0d2FyZTogZGlydHkgcGFnZSAqLwogI2RlZmluZSBfUEFHRV9IV1dSSVRFCTB4MTAwCS8qIGhhcmR3YXJlOiBEaXJ0eSAmIFJXLCBzZXQgaW4gZXhjZXB0aW9uICovCi0jZGVmaW5lIF9QQUdFX0hXRVhFQwkweDIwMAkvKiBoYXJkd2FyZTogRVggcGVybWlzc2lvbiAqLworI2RlZmluZSBfUEFHRV9FWEVDCTB4MjAwCS8qIGhhcmR3YXJlOiBFWCBwZXJtaXNzaW9uICovCiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4NDAwCS8qIHNvZnR3YXJlOiBSOiBwYWdlIHJlZmVyZW5jZWQgKi8KIAogI2RlZmluZSBfUE1EX1BSRVNFTlQJMHg0MDAJLyogUE1EIHBvaW50cyB0byBwYWdlIG9mIFBURXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDR4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQ0eC5oCmluZGV4IDM3ZTk4YmMuLjQxOTJiOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDR4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00NHguaApAQCAtNzgsNyArNzgsNyBAQAogI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMDAwMDEJCS8qIFM6IFBURSB2YWxpZCAqLwogI2RlZmluZSBfUEFHRV9SVwkweDAwMDAwMDAyCQkvKiBTOiBXcml0ZSBwZXJtaXNzaW9uICovCiAjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAwMDAwNAkJLyogUzogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLwotI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgwMDAwMDAwNAkJLyogSDogRXhlY3V0ZSBwZXJtaXNzaW9uICovCisjZGVmaW5lIF9QQUdFX0VYRUMJMHgwMDAwMDAwNAkJLyogSDogRXhlY3V0ZSBwZXJtaXNzaW9uICovCiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMDAwMDgJCS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLwogI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMDAwMDEwCQkvKiBTOiBQYWdlIGRpcnR5ICovCiAjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDAwMDAyMAkJLyogUzogU3BlY2lhbCBwYWdlICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaAppbmRleCA4YzZlMzEyLi45NGU5Nzk3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmgKQEAgLTM2LDcgKzM2LDYgQEAKIC8qIFRoZXNlIGZpdmUgc29mdHdhcmUgYml0cyBtdXN0IGJlIG1hc2tlZCBvdXQgd2hlbiB0aGUgZW50cnkgaXMgbG9hZGVkCiAgKiBpbnRvIHRoZSBUTEIuCiAgKi8KLSNkZWZpbmUgX1BBR0VfRVhFQwkweDAwMDgJLyogc29mdHdhcmU6IGktY2FjaGUgY29oZXJlbmN5IHJlcXVpcmVkICovCiAjZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDEwCS8qIHNvZnR3YXJlOiBndWFyZGVkIGFjY2VzcyAqLwogI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMjAJLyogc29mdHdhcmU6IHBhZ2UgY2hhbmdlZCAqLwogI2RlZmluZSBfUEFHRV9SVwkweDAwNDAJLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtYm9vazNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWJvb2szZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MmQ1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWJvb2szZS5oCkBAIC0wLDAgKzEsODQgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BURV9CT09LM0VfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUFRFX0JPT0szRV9ICisjaWZkZWYgX19LRVJORUxfXworCisvKiBQVEUgYml0IGRlZmluaXRpb25zIGZvciBwcm9jZXNzb3JzIGNvbXBsaWFudCB0byB0aGUgQm9vazNFCisgKiBhcmNoaXRlY3R1cmUgMi4wNiBvciBsYXRlci4gVGhlIHBvc2l0aW9uIG9mIHRoZSBQVEUgYml0cworICogbWF0Y2hlcyB0aGUgSFcgZGVmaW5pdGlvbiBvZiB0aGUgb3B0aW9uYWwgRW1iZWRkZWQgUGFnZSBUYWJsZQorICogY2F0ZWdvcnkuCisgKi8KKworLyogQXJjaGl0ZWN0ZWQgYml0cyAqLworI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMDAxIC8qIHNvZnR3YXJlOiBwdGUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAwMDAyIC8qICghcHJlc2VudCBvbmx5KSBzb2Z0d2FyZTogcHRlIGhvbGRzIGZpbGUgb2Zmc2V0ICovCisjZGVmaW5lIF9QQUdFX1NXMQkweDAwMDAwMgorI2RlZmluZSBfUEFHRV9CQVBfU1IJMHgwMDAwMDQKKyNkZWZpbmUgX1BBR0VfQkFQX1VSCTB4MDAwMDA4CisjZGVmaW5lIF9QQUdFX0JBUF9TVwkweDAwMDAxMAorI2RlZmluZSBfUEFHRV9CQVBfVVcJMHgwMDAwMjAKKyNkZWZpbmUgX1BBR0VfQkFQX1NYCTB4MDAwMDQwCisjZGVmaW5lIF9QQUdFX0JBUF9VWAkweDAwMDA4MAorI2RlZmluZSBfUEFHRV9QU0laRV9NU0sJMHgwMDBmMDAKKyNkZWZpbmUgX1BBR0VfUFNJWkVfNEsJMHgwMDAyMDAKKyNkZWZpbmUgX1BBR0VfUFNJWkVfOEsJMHgwMDAzMDAKKyNkZWZpbmUgX1BBR0VfUFNJWkVfMTZLCTB4MDAwNDAwCisjZGVmaW5lIF9QQUdFX1BTSVpFXzMySwkweDAwMDUwMAorI2RlZmluZSBfUEFHRV9QU0laRV82NEsJMHgwMDA2MDAKKyNkZWZpbmUgX1BBR0VfUFNJWkVfMTI4SwkweDAwMDcwMAorI2RlZmluZSBfUEFHRV9QU0laRV8yNTZLCTB4MDAwODAwCisjZGVmaW5lIF9QQUdFX1BTSVpFXzUxMksJMHgwMDA5MDAKKyNkZWZpbmUgX1BBR0VfUFNJWkVfMU0JMHgwMDBhMDAKKyNkZWZpbmUgX1BBR0VfUFNJWkVfMk0JMHgwMDBiMDAKKyNkZWZpbmUgX1BBR0VfUFNJWkVfNE0JMHgwMDBjMDAKKyNkZWZpbmUgX1BBR0VfUFNJWkVfOE0JMHgwMDBkMDAKKyNkZWZpbmUgX1BBR0VfUFNJWkVfMTZNCTB4MDAwZTAwCisjZGVmaW5lIF9QQUdFX1BTSVpFXzMyTQkweDAwMGYwMAorI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMTAwMCAvKiBDOiBwYWdlIGNoYW5nZWQgKi8KKyNkZWZpbmUgX1BBR0VfU1cwCTB4MDAyMDAwCisjZGVmaW5lIF9QQUdFX1UzCTB4MDA0MDAwCisjZGVmaW5lIF9QQUdFX1UyCTB4MDA4MDAwCisjZGVmaW5lIF9QQUdFX1UxCTB4MDEwMDAwCisjZGVmaW5lIF9QQUdFX1UwCTB4MDIwMDAwCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDQwMDAwCisjZGVmaW5lIF9QQUdFX0xFTkRJQU4JMHgwODAwMDAKKyNkZWZpbmUgX1BBR0VfR1VBUkRFRAkweDEwMDAwMAorI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDIwMDAwMCAvKiBNOiBlbmZvcmNlIG1lbW9yeSBjb2hlcmVuY2UgKi8KKyNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHg0MDAwMDAgLyogSTogY2FjaGUgaW5oaWJpdCAqLworI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMHg4MDAwMDAgLyogVzogY2FjaGUgd3JpdGUtdGhyb3VnaCAqLworCisvKiAiSGlnaGVyIGxldmVsIiBsaW51eCBiaXQgY29tYmluYXRpb25zICovCisjZGVmaW5lIF9QQUdFX0VYRUMJCV9QQUdFX0JBUF9VWCAvKiAuLiBhbmQgd2FzIGNhY2hlIGNsZWFuZWQgKi8KKyNkZWZpbmUgX1BBR0VfUlcJCShfUEFHRV9CQVBfU1cgfCBfUEFHRV9CQVBfVVcpIC8qIFVzZXIgd3JpdGUgcGVybWlzc2lvbiAqLworI2RlZmluZSBfUEFHRV9LRVJORUxfUlcJCShfUEFHRV9CQVBfU1cgfCBfUEFHRV9CQVBfU1IgfCBfUEFHRV9ESVJUWSkKKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JPCQkoX1BBR0VfQkFQX1NSKQorI2RlZmluZSBfUEFHRV9LRVJORUxfUldYCShfUEFHRV9CQVBfU1cgfCBfUEFHRV9CQVBfU1IgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0JBUF9TWCkKKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JPWAkoX1BBR0VfQkFQX1NSIHwgX1BBR0VfQkFQX1NYKQorI2RlZmluZSBfUEFHRV9VU0VSCQkoX1BBR0VfQkFQX1VSIHwgX1BBR0VfQkFQX1NSKSAvKiBDYW4gYmUgcmVhZCAqLworCisjZGVmaW5lIF9QQUdFX0hBU0hQVEUJMAorI2RlZmluZSBfUEFHRV9CVVNZCTAKKworI2RlZmluZSBfUEFHRV9TUEVDSUFMCV9QQUdFX1NXMAorCisvKiBGbGFncyB0byBiZSBwcmVzZXJ2ZWQgb24gUFRFIG1vZGlmaWNhdGlvbnMgKi8KKyNkZWZpbmUgX1BBR0VfSFBURUZMQUdTCV9QQUdFX0JVU1kKKworLyogQmFzZSBwYWdlIHNpemUgKi8KKyNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUworI2RlZmluZSBfUEFHRV9QU0laRQlfUEFHRV9QU0laRV82NEsKKyNkZWZpbmUgUFRFX1JQTl9TSElGVAkoMjgpCisjZWxzZQorI2RlZmluZSBfUEFHRV9QU0laRQlfUEFHRV9QU0laRV80SworI2RlZmluZQlQVEVfUlBOX1NISUZUCSgyNCkKKyNlbmRpZgorCisvKiBPbiAzMi1iaXQsIHdlIG5ldmVyIGNsZWFyIHRoZSB0b3AgcGFydCBvZiB0aGUgUFRFICovCisjaWZkZWYgQ09ORklHX1BQQzMyCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLCTB4ZmZmZmZmZmYwMDAwMDAwMFVMTAorI2RlZmluZSBfUE1EX1BSRVNFTlQJMAorI2RlZmluZSBfUE1EX1BSRVNFTlRfTUFTSyAoUEFHRV9NQVNLKQorI2RlZmluZSBfUE1EX0JBRAkoflBBR0VfTUFTSykKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qICBfQVNNX1BPV0VSUENfUFRFX0ZTTF9CT09LRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaAppbmRleCBhN2UyMTBiLi5jM2I2NTA3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmgKQEAgLTEzLDkgKzEzLDYgQEAKICNpZm5kZWYgX1BBR0VfSFdXUklURQogI2RlZmluZSBfUEFHRV9IV1dSSVRFCTAKICNlbmRpZgotI2lmbmRlZiBfUEFHRV9IV0VYRUMKLSNkZWZpbmUgX1BBR0VfSFdFWEVDCTAKLSNlbmRpZgogI2lmbmRlZiBfUEFHRV9FWEVDCiAjZGVmaW5lIF9QQUdFX0VYRUMJMAogI2VuZGlmCkBAIC0zNCw2ICszMSw5IEBACiAjaWZuZGVmIF9QQUdFXzRLX1BGTgogI2RlZmluZSBfUEFHRV80S19QRk4JCTAKICNlbmRpZgorI2lmbmRlZiBfUEFHRV9TQU8KKyNkZWZpbmUgX1BBR0VfU0FPCTAKKyNlbmRpZgogI2lmbmRlZiBfUEFHRV9QU0laRQogI2RlZmluZSBfUEFHRV9QU0laRQkJMAogI2VuZGlmCkBAIC00NSwxMCArNDUsMTYgQEAKICNkZWZpbmUgUE1EX1BBR0VfU0laRShwbWQpCWJhZF9jYWxsX3RvX1BNRF9QQUdFX1NJWkUoKQogI2VuZGlmCiAjaWZuZGVmIF9QQUdFX0tFUk5FTF9STwotI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JMAorI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9LRVJORUxfUk9YCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9ST1gJKF9QQUdFX0VYRUMpCiAjZW5kaWYKICNpZm5kZWYgX1BBR0VfS0VSTkVMX1JXCi0jZGVmaW5lIF9QQUdFX0tFUk5FTF9SVwkoX1BBR0VfRElSVFkgfCBfUEFHRV9SVyB8IF9QQUdFX0hXV1JJVEUpCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9SVwkJKF9QQUdFX0RJUlRZIHwgX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKQorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0tFUk5FTF9SV1gKKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JXWAkoX1BBR0VfRElSVFkgfCBfUEFHRV9SVyB8IF9QQUdFX0hXV1JJVEUgfCBfUEFHRV9FWEVDKQogI2VuZGlmCiAjaWZuZGVmIF9QQUdFX0hQVEVGTEFHUwogI2RlZmluZSBfUEFHRV9IUFRFRkxBR1MgX1BBR0VfSEFTSFBURQpAQCAtOTMsOCArOTksNyBAQAogI2RlZmluZSBQQUdFX1BST1RfQklUUwkoX1BBR0VfR1VBUkRFRCB8IF9QQUdFX0NPSEVSRU5UIHwgX1BBR0VfTk9fQ0FDSEUgfCBcCiAJCQkgX1BBR0VfV1JJVEVUSFJVIHwgX1BBR0VfRU5ESUFOIHwgX1BBR0VfNEtfUEZOIHwgXAogCQkJIF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IFwKLQkJCSBfUEFHRV9SVyB8IF9QQUdFX0hXV1JJVEUgfCBfUEFHRV9ESVJUWSB8IFwKLQkJCSBfUEFHRV9FWEVDIHwgX1BBR0VfSFdFWEVDKQorCQkJIF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfRVhFQykKIAogLyoKICAqIFdlIGRlZmluZSAyIHNldHMgb2YgYmFzZSBwcm90IGJpdHMsIG9uZSBmb3IgYmFzaWMgcGFnZXMgKGllLApAQCAtMTUxLDExICsxNTYsOSBAQAogCQkJCSBfUEFHRV9OT19DQUNIRSkKICNkZWZpbmUgUEFHRV9LRVJORUxfTkNHCV9fcGdwcm90KF9QQUdFX0JBU0VfTkMgfCBfUEFHRV9LRVJORUxfUlcgfCBcCiAJCQkJIF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCkKLSNkZWZpbmUgUEFHRV9LRVJORUxfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfS0VSTkVMX1JXIHwgX1BBR0VfRVhFQyB8IFwKLQkJCQkgX1BBR0VfSFdFWEVDKQorI2RlZmluZSBQQUdFX0tFUk5FTF9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9LRVJORUxfUldYKQogI2RlZmluZSBQQUdFX0tFUk5FTF9STwlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfS0VSTkVMX1JPKQotI2RlZmluZSBQQUdFX0tFUk5FTF9ST1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX0tFUk5FTF9STyB8IF9QQUdFX0VYRUMgfCBcCi0JCQkJIF9QQUdFX0hXRVhFQykKKyNkZWZpbmUgUEFHRV9LRVJORUxfUk9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9LRVJORUxfUk9YKQogCiAvKiBQcm90ZWN0aW9uIHVzZWQgZm9yIGtlcm5lbCB0ZXh0LiBXZSB3YW50IHRoZSBkZWJ1Z2dlcnMgdG8gYmUgYWJsZSB0bwogICogc2V0IGJyZWFrcG9pbnRzIGFueXdoZXJlLCBzbyBkb24ndCB3cml0ZSBwcm90ZWN0IHRoZSBrZXJuZWwgdGV4dApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1mc2wtYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtZnNsLWJvb2tlLmgKaW5kZXggMTA4MjBmNS4uMmMxMmJlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1mc2wtYm9va2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWZzbC1ib29rZS5oCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAwMgkvKiBTOiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCiAjZGVmaW5lIF9QQUdFX1JXCTB4MDAwMDQJLyogUzogV3JpdGUgcGVybWlzc2lvbiAoU1cpICovCiAjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDAwMDgJLyogUzogUGFnZSBkaXJ0eSAqLwotI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgwMDAxMAkvKiBIOiBTWCBwZXJtaXNzaW9uICovCisjZGVmaW5lIF9QQUdFX0VYRUMJMHgwMDAxMAkvKiBIOiBTWCBwZXJtaXNzaW9uICovCiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMjAJLyogUzogUGFnZSByZWZlcmVuY2VkICovCiAKICNkZWZpbmUgX1BBR0VfRU5ESUFOCTB4MDAwNDAJLyogSDogRSBiaXQgKi8KQEAgLTMzLDEzICszMyw2IEBACiAjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDAwNDAwCS8qIEg6IFcgYml0ICovCiAjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDgwMCAvKiBTOiBTcGVjaWFsIHBhZ2UgKi8KIAotI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKLS8qIEVSUE4gaW4gYSBQVEUgbmV2ZXIgZ2V0cyBjbGVhcmVkLCBpZ25vcmUgaXQgKi8KLSNkZWZpbmUgX1BURV9OT05FX01BU0sJMHhmZmZmZmZmZmZmZmYwMDAwVUxMCi0vKiBXZSBleHRlbmQgdGhlIHNpemUgb2YgdGhlIFBURSBmbGFncyBhcmVhIHdoZW4gdXNpbmcgNjQtYml0IFBURXMgKi8KLSNkZWZpbmUgUFRFX1JQTl9TSElGVAkoUEFHRV9TSElGVCArIDgpCi0jZW5kaWYKLQogI2RlZmluZSBfUE1EX1BSRVNFTlQJMAogI2RlZmluZSBfUE1EX1BSRVNFTlRfTUFTSyAoUEFHRV9NQVNLKQogI2RlZmluZSBfUE1EX0JBRAkoflBBR0VfTUFTSykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDMyLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2gzMi5oCmluZGV4IDE2ZTU3MWMuLjRhYWQ0MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDMyLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoMzIuaApAQCAtMjYsNyArMjYsNiBAQAogI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMHgwNDAJLyogVzogY2FjaGUgd3JpdGUtdGhyb3VnaCAqLwogI2RlZmluZSBfUEFHRV9ESVJUWQkweDA4MAkvKiBDOiBwYWdlIGNoYW5nZWQgKi8KICNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgxMDAJLyogUjogcGFnZSByZWZlcmVuY2VkICovCi0jZGVmaW5lIF9QQUdFX0VYRUMJMHgyMDAJLyogc29mdHdhcmU6IGktY2FjaGUgY29oZXJlbmN5IHJlcXVpcmVkICovCiAjZGVmaW5lIF9QQUdFX1JXCTB4NDAwCS8qIHNvZnR3YXJlOiB1c2VyIHdyaXRlIGFjY2VzcyBhbGxvd2VkICovCiAjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHg4MDAJLyogc29mdHdhcmU6IFNwZWNpYWwgcGFnZSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcWUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9xZS5oCmluZGV4IDE1N2M1Y2EuLmYzODhmMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9xZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9xZS5oCkBAIC0xNTQsNiArMTU0LDcgQEAKIHZvaWQgcWVfcHV0X3NudW0odTggc251bSk7CiB1bnNpZ25lZCBpbnQgcWVfZ2V0X251bV9vZl9yaXNjKHZvaWQpOwogdW5zaWduZWQgaW50IHFlX2dldF9udW1fb2Zfc251bXModm9pZCk7CitpbnQgcWVfYWxpdmVfZHVyaW5nX3NsZWVwKHZvaWQpOwogCiAvKiB3ZSBhY3R1YWxseSB1c2UgY3BtX211cmFtIGltcGxlbWVudGF0aW9uLCBkZWZpbmUgdGhpcyBmb3IgY29udmVuaWVuY2UgKi8KICNkZWZpbmUgcWVfbXVyYW1faW5pdCBjcG1fbXVyYW1faW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCmluZGV4IDExNzAyNjcuLjYzMTVlZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKQEAgLTk4LDE5ICs5OCwxNSBAQAogI2RlZmluZSBNU1JfUkkJCV9fTUFTSyhNU1JfUklfTEcpCS8qIFJlY292ZXJhYmxlIEV4Y2VwdGlvbiAqLwogI2RlZmluZSBNU1JfTEUJCV9fTUFTSyhNU1JfTEVfTEcpCS8qIExpdHRsZSBFbmRpYW4gKi8KIAotI2lmZGVmIENPTkZJR19QUEM2NAorI2lmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM1NfNjQpCisvKiBTZXJ2ZXIgdmFyaWFudCAqLwogI2RlZmluZSBNU1JfCQlNU1JfTUUgfCBNU1JfUkkgfCBNU1JfSVIgfCBNU1JfRFIgfCBNU1JfSVNGIHxNU1JfSFYKICNkZWZpbmUgTVNSX0tFUk5FTCAgICAgIE1TUl8gfCBNU1JfU0YKLQogI2RlZmluZSBNU1JfVVNFUjMyCU1TUl8gfCBNU1JfUFIgfCBNU1JfRUUKICNkZWZpbmUgTVNSX1VTRVI2NAlNU1JfVVNFUjMyIHwgTVNSX1NGCi0KLSNlbHNlIC8qIDMyLWJpdCAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX0JPT0szU18zMikgfHwgZGVmaW5lZChDT05GSUdfOHh4KQogLyogRGVmYXVsdCBNU1IgZm9yIGtlcm5lbCBtb2RlLiAqLwotI2lmbmRlZiBNU1JfS0VSTkVMCS8qIHJlZ19ib29rZS5oIGFsc28gZGVmaW5lcyB0aGlzICovCiAjZGVmaW5lIE1TUl9LRVJORUwJKE1TUl9NRXxNU1JfUkl8TVNSX0lSfE1TUl9EUikKLSNlbmRpZgotCiAjZGVmaW5lIE1TUl9VU0VSCShNU1JfS0VSTkVMfE1TUl9QUnxNU1JfRUUpCiAjZW5kaWYKIApAQCAtNjQ2LDYgKzY0MiwxMzcgQEAKICNlbmRpZgogCiAvKgorICogU1BSRyB1c2FnZToKKyAqCisgKiBBbGwgNjQtYml0OgorICoJLSBTUFJHMSBzdG9yZXMgUEFDQSBwb2ludGVyCisgKgorICogNjQtYml0IHNlcnZlcjoKKyAqCS0gU1BSRzAgdW51c2VkIChyZXNlcnZlZCBmb3IgSFYgb24gUG93ZXI0KQorICoJLSBTUFJHMiBzY3JhdGNoIGZvciBleGNlcHRpb24gdmVjdG9ycworICoJLSBTUFJHMyB1bnVzZWQgKHVzZXIgdmlzaWJsZSkKKyAqCisgKiA2NC1iaXQgZW1iZWRkZWQKKyAqCS0gU1BSRzAgZ2VuZXJpYyBleGNlcHRpb24gc2NyYXRjaAorICoJLSBTUFJHMiBUTEIgZXhjZXB0aW9uIHN0YWNrCisgKgktIFNQUkczIHVudXNlZCAodXNlciB2aXNpYmxlKQorICoJLSBTUFJHNCB1bnVzZWQgKHVzZXIgdmlzaWJsZSkKKyAqCS0gU1BSRzYgVExCIG1pc3Mgc2NyYXRjaCAodXNlciB2aXNpYmxlLCBzb3JyeSAhKQorICoJLSBTUFJHNyBjcml0aWNhbCBleGNlcHRpb24gc2NyYXRjaAorICoJLSBTUFJHOCBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbiBzY3JhdGNoCisgKgktIFNQUkc5IGRlYnVnIGV4Y2VwdGlvbiBzY3JhdGNoCisgKgorICogQWxsIDMyLWJpdDoKKyAqCS0gU1BSRzMgY3VycmVudCB0aHJlYWRfaW5mbyBwb2ludGVyCisgKiAgICAgICAgKHZpcnR1YWwgb24gQm9va0UsIHBoeXNpY2FsIG9uIG90aGVycykKKyAqCisgKiAzMi1iaXQgY2xhc3NpYzoKKyAqCS0gU1BSRzAgc2NyYXRjaCBmb3IgZXhjZXB0aW9uIHZlY3RvcnMKKyAqCS0gU1BSRzEgc2NyYXRjaCBmb3IgZXhjZXB0aW9uIHZlY3RvcnMKKyAqCS0gU1BSRzIgaW5kaWNhdG9yIHRoYXQgd2UgYXJlIGluIFJUQVMKKyAqCS0gU1BSRzQgKDYwMyBvbmx5KSBwc2V1ZG8gVExCIExSVSBkYXRhCisgKgorICogMzItYml0IDQweDoKKyAqCS0gU1BSRzAgc2NyYXRjaCBmb3IgZXhjZXB0aW9uIHZlY3RvcnMKKyAqCS0gU1BSRzEgc2NyYXRjaCBmb3IgZXhjZXB0aW9uIHZlY3RvcnMKKyAqCS0gU1BSRzIgc2NyYXRjaCBmb3IgZXhjZXB0aW9uIHZlY3RvcnMKKyAqCS0gU1BSRzQgc2NyYXRjaCBmb3IgZXhjZXB0aW9uIHZlY3RvcnMgKG5vdCA0MDMpCisgKgktIFNQUkc1IHNjcmF0Y2ggZm9yIGV4Y2VwdGlvbiB2ZWN0b3JzIChub3QgNDAzKQorICoJLSBTUFJHNiBzY3JhdGNoIGZvciBleGNlcHRpb24gdmVjdG9ycyAobm90IDQwMykKKyAqCS0gU1BSRzcgc2NyYXRjaCBmb3IgZXhjZXB0aW9uIHZlY3RvcnMgKG5vdCA0MDMpCisgKgorICogMzItYml0IDQ0MCBhbmQgRlNMIEJvb2tFOgorICoJLSBTUFJHMCBzY3JhdGNoIGZvciBleGNlcHRpb24gdmVjdG9ycworICoJLSBTUFJHMSBzY3JhdGNoIGZvciBleGNlcHRpb24gdmVjdG9ycyAoKikKKyAqCS0gU1BSRzIgc2NyYXRjaCBmb3IgY3JpdCBpbnRlcnJ1cHRzIGhhbmRsZXIKKyAqCS0gU1BSRzQgc2NyYXRjaCBmb3IgZXhjZXB0aW9uIHZlY3RvcnMKKyAqCS0gU1BSRzUgc2NyYXRjaCBmb3IgZXhjZXB0aW9uIHZlY3RvcnMKKyAqCS0gU1BSRzYgc2NyYXRjaCBmb3IgbWFjaGluZSBjaGVjayBoYW5kbGVyCisgKgktIFNQUkc3IHNjcmF0Y2ggZm9yIGV4Y2VwdGlvbiB2ZWN0b3JzCisgKgktIFNQUkc5IHNjcmF0Y2ggZm9yIGRlYnVnIHZlY3RvcnMgKGU1MDAgb25seSkKKyAqCisgKiAgICAgIEFkZGl0aW9uYWxseSwgQm9va0Ugc2VwYXJhdGVzICJyZWFkIiBhbmQgIndyaXRlIgorICogICAgICBvZiB0aG9zZSByZWdpc3RlcnMuIFRoYXQgYWxsb3dzIHRvIHVzZSB0aGUgdXNlcnNwYWNlCisgKiAgICAgIHJlYWRhYmxlIHZhcmlhbnQgZm9yIHJlYWRzLCB3aGljaCBjYW4gYXZvaWQgYSBmYXVsdAorICogICAgICB3aXRoIEtWTSB0eXBlIHZpcnR1YWxpemF0aW9uLgorICoKKyAqICAgICAgKCopIFVuZGVyIEtWTSwgdGhlIGhvc3QgU1BSRzEgaXMgdXNlZCB0byBwb2ludCB0bworICogICAgICB0aGUgY3VycmVudCBWQ1BVIGRhdGEgc3RydWN0dXJlCisgKgorICogMzItYml0IDh4eDoKKyAqCS0gU1BSRzAgc2NyYXRjaCBmb3IgZXhjZXB0aW9uIHZlY3RvcnMKKyAqCS0gU1BSRzEgc2NyYXRjaCBmb3IgZXhjZXB0aW9uIHZlY3RvcnMKKyAqCS0gU1BSRzIgYXBwYXJlbnRseSB1bnVzZWQgYnV0IGluaXRpYWxpemVkCisgKgorICovCisjaWZkZWYgQ09ORklHX1BQQzY0CisjZGVmaW5lIFNQUk5fU1BSR19QQUNBIAkJU1BSTl9TUFJHMQorI2Vsc2UKKyNkZWZpbmUgU1BSTl9TUFJHX1RIUkVBRCAJU1BSTl9TUFJHMworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAorI2RlZmluZSBTUFJOX1NQUkdfU0NSQVRDSDAJU1BSTl9TUFJHMgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRV82NAorI2RlZmluZSBTUFJOX1NQUkdfTUNfU0NSQVRDSAlTUFJOX1NQUkc4CisjZGVmaW5lIFNQUk5fU1BSR19DUklUX1NDUkFUQ0gJU1BSTl9TUFJHNworI2RlZmluZSBTUFJOX1NQUkdfREJHX1NDUkFUQ0gJU1BSTl9TUFJHOQorI2RlZmluZSBTUFJOX1NQUkdfVExCX0VYRlJBTUUJU1BSTl9TUFJHMgorI2RlZmluZSBTUFJOX1NQUkdfVExCX1NDUkFUQ0gJU1BSTl9TUFJHNgorI2RlZmluZSBTUFJOX1NQUkdfR0VOX1NDUkFUQ0gJU1BSTl9TUFJHMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szU18zMgorI2RlZmluZSBTUFJOX1NQUkdfU0NSQVRDSDAJU1BSTl9TUFJHMAorI2RlZmluZSBTUFJOX1NQUkdfU0NSQVRDSDEJU1BSTl9TUFJHMQorI2RlZmluZSBTUFJOX1NQUkdfUlRBUwkJU1BSTl9TUFJHMgorI2RlZmluZSBTUFJOX1NQUkdfNjAzX0xSVQlTUFJOX1NQUkc0CisjZW5kaWYKKworI2lmZGVmIENPTkZJR180MHgKKyNkZWZpbmUgU1BSTl9TUFJHX1NDUkFUQ0gwCVNQUk5fU1BSRzAKKyNkZWZpbmUgU1BSTl9TUFJHX1NDUkFUQ0gxCVNQUk5fU1BSRzEKKyNkZWZpbmUgU1BSTl9TUFJHX1NDUkFUQ0gyCVNQUk5fU1BSRzIKKyNkZWZpbmUgU1BSTl9TUFJHX1NDUkFUQ0gzCVNQUk5fU1BSRzQKKyNkZWZpbmUgU1BSTl9TUFJHX1NDUkFUQ0g0CVNQUk5fU1BSRzUKKyNkZWZpbmUgU1BSTl9TUFJHX1NDUkFUQ0g1CVNQUk5fU1BSRzYKKyNkZWZpbmUgU1BSTl9TUFJHX1NDUkFUQ0g2CVNQUk5fU1BSRzcKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0JPT0tFCisjZGVmaW5lIFNQUk5fU1BSR19SU0NSQVRDSDAJU1BSTl9TUFJHMAorI2RlZmluZSBTUFJOX1NQUkdfV1NDUkFUQ0gwCVNQUk5fU1BSRzAKKyNkZWZpbmUgU1BSTl9TUFJHX1JTQ1JBVENIMQlTUFJOX1NQUkcxCisjZGVmaW5lIFNQUk5fU1BSR19XU0NSQVRDSDEJU1BSTl9TUFJHMQorI2RlZmluZSBTUFJOX1NQUkdfUlNDUkFUQ0hfQ1JJVAlTUFJOX1NQUkcyCisjZGVmaW5lIFNQUk5fU1BSR19XU0NSQVRDSF9DUklUCVNQUk5fU1BSRzIKKyNkZWZpbmUgU1BSTl9TUFJHX1JTQ1JBVENIMglTUFJOX1NQUkc0UgorI2RlZmluZSBTUFJOX1NQUkdfV1NDUkFUQ0gyCVNQUk5fU1BSRzRXCisjZGVmaW5lIFNQUk5fU1BSR19SU0NSQVRDSDMJU1BSTl9TUFJHNVIKKyNkZWZpbmUgU1BSTl9TUFJHX1dTQ1JBVENIMwlTUFJOX1NQUkc1VworI2RlZmluZSBTUFJOX1NQUkdfUlNDUkFUQ0hfTUMJU1BSTl9TUFJHNlIKKyNkZWZpbmUgU1BSTl9TUFJHX1dTQ1JBVENIX01DCVNQUk5fU1BSRzZXCisjZGVmaW5lIFNQUk5fU1BSR19SU0NSQVRDSDQJU1BSTl9TUFJHN1IKKyNkZWZpbmUgU1BSTl9TUFJHX1dTQ1JBVENINAlTUFJOX1NQUkc3VworI2lmZGVmIENPTkZJR19FMjAwCisjZGVmaW5lIFNQUk5fU1BSR19SU0NSQVRDSF9EQkcJU1BSTl9TUFJHNlIKKyNkZWZpbmUgU1BSTl9TUFJHX1dTQ1JBVENIX0RCRwlTUFJOX1NQUkc2VworI2Vsc2UKKyNkZWZpbmUgU1BSTl9TUFJHX1JTQ1JBVENIX0RCRwlTUFJOX1NQUkc5CisjZGVmaW5lIFNQUk5fU1BSR19XU0NSQVRDSF9EQkcJU1BSTl9TUFJHOQorI2VuZGlmCisjZGVmaW5lIFNQUk5fU1BSR19SVkNQVQkJU1BSTl9TUFJHMQorI2RlZmluZSBTUFJOX1NQUkdfV1ZDUFUJCVNQUk5fU1BSRzEKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHXzh4eAorI2RlZmluZSBTUFJOX1NQUkdfU0NSQVRDSDAJU1BSTl9TUFJHMAorI2RlZmluZSBTUFJOX1NQUkdfU0NSQVRDSDEJU1BSTl9TUFJHMQorI2VuZGlmCisKKy8qCiAgKiBBbiBtdGZzZiBpbnN0cnVjdGlvbiB3aXRoIHRoZSBMIGJpdCBzZXQuIE9uIENQVXMgdGhhdCBzdXBwb3J0IHRoaXMgYQogICogZnVsbCA2NGJpdHMgb2YgRlBTQ1IgaXMgcmVzdG9yZWQgYW5kIG9uIG90aGVyIENQVXMgdGhlIEwgYml0IGlzIGlnbm9yZWQuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCmluZGV4IDZiY2YzNjQuLjNiZjc4MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKQEAgLTE4LDE4ICsxOCwyNiBAQAogI2RlZmluZSBNU1JfSVMJCU1TUl9JUgkvKiBJbnN0cnVjdGlvbiBTcGFjZSAqLwogI2RlZmluZSBNU1JfRFMJCU1TUl9EUgkvKiBEYXRhIFNwYWNlICovCiAjZGVmaW5lIE1TUl9QTU0JCSgxPDwyKQkvKiBQZXJmb3JtYW5jZSBtb25pdG9yIG1hcmsgYml0ICovCisjZGVmaW5lIE1TUl9DTQkJKDE8PDMxKSAvKiBDb21wdXRhdGlvbiBNb2RlICgwPTMyLWJpdCwgMT02NC1iaXQpICovCiAKLS8qIERlZmF1bHQgTVNSIGZvciBrZXJuZWwgbW9kZS4gKi8KLSNpZiBkZWZpbmVkIChDT05GSUdfNDB4KQorI2lmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM0VfNjQpCisjZGVmaW5lIE1TUl8JCU1TUl9NRSB8IE1TUl9DRQorI2RlZmluZSBNU1JfS0VSTkVMICAgICAgTVNSXyB8IE1TUl9DTQorI2RlZmluZSBNU1JfVVNFUjMyCU1TUl8gfCBNU1JfUFIgfCBNU1JfRUUKKyNkZWZpbmUgTVNSX1VTRVI2NAlNU1JfVVNFUjMyIHwgTVNSX0NNCisjZWxpZiBkZWZpbmVkIChDT05GSUdfNDB4KQogI2RlZmluZSBNU1JfS0VSTkVMCShNU1JfTUV8TVNSX1JJfE1TUl9JUnxNU1JfRFJ8TVNSX0NFKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjZGVmaW5lIE1TUl9VU0VSCShNU1JfS0VSTkVMfE1TUl9QUnxNU1JfRUUpCisjZWxzZQogI2RlZmluZSBNU1JfS0VSTkVMCShNU1JfTUV8TVNSX1JJfE1TUl9DRSkKKyNkZWZpbmUgTVNSX1VTRVIJKE1TUl9LRVJORUx8TVNSX1BSfE1TUl9FRSkKICNlbmRpZgogCiAvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXJzIChTUFJOcykqLwogI2RlZmluZSBTUFJOX0RFQ0FSCTB4MDM2CS8qIERlY3JlbWVudGVyIEF1dG8gUmVsb2FkIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fSVZQUgkweDAzRgkvKiBJbnRlcnJ1cHQgVmVjdG9yIFByZWZpeCBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX1VTUFJHMAkweDEwMAkvKiBVc2VyIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDAgKi8KKyNkZWZpbmUgU1BSTl9TUFJHM1IJMHgxMDMJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgMyBSZWFkICovCiAjZGVmaW5lIFNQUk5fU1BSRzRSCTB4MTA0CS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDQgUmVhZCAqLwogI2RlZmluZSBTUFJOX1NQUkc1UgkweDEwNQkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCA1IFJlYWQgKi8KICNkZWZpbmUgU1BSTl9TUFJHNlIJMHgxMDYJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgNiBSZWFkICovCkBAIC0zOCwxMSArNDYsMTggQEAKICNkZWZpbmUgU1BSTl9TUFJHNVcJMHgxMTUJLyogU3BlY2lhbCBQdXJwb3NlIFJlZ2lzdGVyIEdlbmVyYWwgNSBXcml0ZSAqLwogI2RlZmluZSBTUFJOX1NQUkc2VwkweDExNgkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCA2IFdyaXRlICovCiAjZGVmaW5lIFNQUk5fU1BSRzdXCTB4MTE3CS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDcgV3JpdGUgKi8KKyNkZWZpbmUgU1BSTl9FUENSCTB4MTMzCS8qIEVtYmVkZGVkIFByb2Nlc3NvciBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fREJDUjIJMHgxMzYJLyogRGVidWcgQ29udHJvbCBSZWdpc3RlciAyICovCiAjZGVmaW5lIFNQUk5fSUFDMwkweDEzQQkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgMyAqLwogI2RlZmluZSBTUFJOX0lBQzQJMHgxM0IJLyogSW5zdHJ1Y3Rpb24gQWRkcmVzcyBDb21wYXJlIDQgKi8KICNkZWZpbmUgU1BSTl9EVkMxCTB4MTNFCS8qIERhdGEgVmFsdWUgQ29tcGFyZSBSZWdpc3RlciAxICovCiAjZGVmaW5lIFNQUk5fRFZDMgkweDEzRgkvKiBEYXRhIFZhbHVlIENvbXBhcmUgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBTUFJOX01BUzgJMHgxNTUJLyogTU1VIEFzc2lzdCBSZWdpc3RlciA4ICovCisjZGVmaW5lIFNQUk5fVExCMFBTCTB4MTU4CS8qIFRMQiAwIFBhZ2UgU2l6ZSBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX01BUzVfTUFTNgkweDE1YwkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDUgfHwgNiAqLworI2RlZmluZSBTUFJOX01BUzhfTUFTMQkweDE1ZAkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDggfHwgMSAqLworI2RlZmluZSBTUFJOX01BUzdfTUFTMwkweDE3NAkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDcgfHwgMyAqLworI2RlZmluZSBTUFJOX01BUzBfTUFTMQkweDE3NQkvKiBNTVUgQXNzaXN0IFJlZ2lzdGVyIDAgfHwgMSAqLwogI2RlZmluZSBTUFJOX0lWT1IwCTB4MTkwCS8qIEludGVycnVwdCBWZWN0b3IgT2Zmc2V0IFJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgU1BSTl9JVk9SMQkweDE5MQkvKiBJbnRlcnJ1cHQgVmVjdG9yIE9mZnNldCBSZWdpc3RlciAxICovCiAjZGVmaW5lIFNQUk5fSVZPUjIJMHgxOTIJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMiAqLwpAQCAtOTMsNiArMTA4LDggQEAKICNkZWZpbmUgU1BSTl9QSUQyCTB4MjdBCS8qIFByb2Nlc3MgSUQgUmVnaXN0ZXIgMiAqLwogI2RlZmluZSBTUFJOX1RMQjBDRkcJMHgyQjAJLyogVExCIDAgQ29uZmlnIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fVExCMUNGRwkweDJCMQkvKiBUTEIgMSBDb25maWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9UTEIyQ0ZHCTB4MkIyCS8qIFRMQiAyIENvbmZpZyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1RMQjNDRkcJMHgyQjMJLyogVExCIDMgQ29uZmlnIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fRVBSCTB4MkJFCS8qIEV4dGVybmFsIFByb3h5IFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fQ0NSMQkweDM3OAkvKiBDb3JlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLwogI2RlZmluZSBTUFJOX1pQUgkweDNCMAkvKiBab25lIFByb3RlY3Rpb24gUmVnaXN0ZXIgKDQweCkgKi8KQEAgLTQxNSwxNiArNDMyLDMxIEBACiAjZGVmaW5lIEwyQ1NSMF9MMkxPQQkweDAwMDAwMDgwCS8qIEwyIENhY2hlIExvY2sgT3ZlcmZsb3cgQWxsb2NhdGUgKi8KICNkZWZpbmUgTDJDU1IwX0wyTE8JMHgwMDAwMDAyMAkvKiBMMiBDYWNoZSBMb2NrIE92ZXJmbG93ICovCiAKLS8qIEJpdCBkZWZpbml0aW9ucyBmb3IgTU1VQ1NSMCAqLwotI2RlZmluZSBNTVVDU1IwX1RMQjFGSQkweDAwMDAwMDAyCS8qIFRMQjEgRmxhc2ggaW52YWxpZGF0ZSAqLwotI2RlZmluZSBNTVVDU1IwX1RMQjBGSQkweDAwMDAwMDA0CS8qIFRMQjAgRmxhc2ggaW52YWxpZGF0ZSAqLwotI2RlZmluZSBNTVVDU1IwX1RMQjJGSQkweDAwMDAwMDQwCS8qIFRMQjIgRmxhc2ggaW52YWxpZGF0ZSAqLwotI2RlZmluZSBNTVVDU1IwX1RMQjNGSQkweDAwMDAwMDIwCS8qIFRMQjMgRmxhc2ggaW52YWxpZGF0ZSAqLwotCiAvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIFNHUi4gKi8KICNkZWZpbmUgU0dSX05PUk1BTAkwCQkvKiBTcGVjdWxhdGl2ZSBmZXRjaGluZyBhbGxvd2VkLiAqLwogI2RlZmluZSBTR1JfR1VBUkRFRAkxCQkvKiBTcGVjdWxhdGl2ZSBmZXRjaGluZyBkaXNhbGxvd2VkLiAqLwogCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIEVQQ1IgKi8KKyNkZWZpbmUgU1BSTl9FUENSX0VYVEdTCQkweDgwMDAwMDAwCS8qIEV4dGVybmFsIElucHV0IGludGVycnVwdAorCQkJCQkJICogZGlyZWN0ZWQgdG8gR3Vlc3Qgc3RhdGUgKi8KKyNkZWZpbmUgU1BSTl9FUENSX0RUTEJHUwkweDQwMDAwMDAwCS8qIERhdGEgVExCIEVycm9yIGludGVycnVwdAorCQkJCQkJICogZGlyZWN0ZWQgdG8gZ3Vlc3Qgc3RhdGUgKi8KKyNkZWZpbmUgU1BSTl9FUENSX0lUTEJHUwkweDIwMDAwMDAwCS8qIEluc3RyLiBUTEIgZXJyb3IgaW50ZXJydXB0CisJCQkJCQkgKiBkaXJlY3RlZCB0byBndWVzdCBzdGF0ZSAqLworI2RlZmluZSBTUFJOX0VQQ1JfRFNJR1MJCTB4MTAwMDAwMDAJLyogRGF0YSBTdG9yYWdlIGludGVycnVwdAorCQkJCQkJICogZGlyZWN0ZWQgdG8gZ3Vlc3Qgc3RhdGUgKi8KKyNkZWZpbmUgU1BSTl9FUENSX0lTSUdTCQkweDA4MDAwMDAwCS8qIEluc3RyLiBTdG9yYWdlIGludGVycnVwdAorCQkJCQkJICogZGlyZWN0ZWQgdG8gZ3Vlc3Qgc3RhdGUgKi8KKyNkZWZpbmUgU1BSTl9FUENSX0RVVkQJCTB4MDQwMDAwMDAJLyogRGlzYWJsZSBIeXBlcnZpc29yIERlYnVnICovCisjZGVmaW5lIFNQUk5fRVBDUl9JQ00JCTB4MDIwMDAwMDAJLyogSW50ZXJydXB0IGNvbXB1dGF0aW9uIG1vZGUKKwkJCQkJCSAqIChjb3BpZWQgdG8gTVNSOkNNIG9uIGludHIpICovCisjZGVmaW5lIFNQUk5fRVBDUl9HSUNNCQkweDAxMDAwMDAwCS8qIEd1ZXN0IEludGVycnVwdCBDb21wLiBtb2RlICovCisjZGVmaW5lIFNQUk5fRVBDUl9ER1RNSQkJMHgwMDgwMDAwMAkvKiBEaXNhYmxlIFRMQiBHdWVzdCBNYW5hZ2VtZW50CisJCQkJCQkgKiBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgU1BSTl9FUENSX0RNSVVICQkweDAwNDAwMDAwCS8qIERpc2FibGUgTUFTIEludGVycnVwdCB1cGRhdGVzCisJCQkJCQkgKiBmb3IgaHlwZXJ2aXNvciAqLworCisKIC8qCiAgKiBUaGUgSUJNLTQwMyBpcyBhbiBldmVuIG1vcmUgb2RkIHNwZWNpYWwgY2FzZSwgYXMgaXQgaXMgbXVjaAogICogb2xkZXIgdGhhbiB0aGUgSUJNLTQwNSBzZXJpZXMuICBXZSBwdXQgdGhlc2UgZG93biBoZXJlIGluY2FzZSBzb21lb25lCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDgxN2ZhYzAuLmRhZTE5MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0xLDYgKzEsNiBAQAogI2lmbmRlZiBfQVNNX1BPV0VSUENfU0VUVVBfSAogI2RlZmluZSBfQVNNX1BPV0VSUENfU0VUVVBfSAogCi0jZGVmaW5lIENPTU1BTkRfTElORV9TSVpFCTUxMgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NldHVwLmg+CiAKICNlbmRpZgkvKiBfQVNNX1BPV0VSUENfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IGMyNWY3M2QuLmMwZDNiOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc21wLmgKQEAgLTE0OCw2ICsxNDgsMTYgQEAKIGV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSk7CiBleHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkoY3B1bWFza190IG1hc2spOwogCisvKiBEZWZpbml0aW9ucyByZWxhdGl2ZSB0byB0aGUgc2Vjb25kYXJ5IENQVSBzcGluIGxvb3AKKyAqIGFuZCBlbnRyeSBwb2ludC4gTm90IGFsbCBvZiB0aGVtIGV4aXN0IG9uIGJvdGggMzIgYW5kCisgKiA2NC1iaXQgYnV0IGRlZmluaW5nIHRoZW0gYWxsIGhlcmUgZG9lc24ndCBoYXJtCisgKi8KK2V4dGVybiB2b2lkIGdlbmVyaWNfc2Vjb25kYXJ5X3NtcF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZ2VuZXJpY19zZWNvbmRhcnlfdGhyZWFkX2luaXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZTsKK2V4dGVybiBjaGFyIF9fc2Vjb25kYXJ5X2hvbGQ7CisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCAxZTVjZmFkLi4zYWI4YjNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC02NCw0ICs2NCw3IEBACiAjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKICNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKIAorI2RlZmluZSBTT19QUk9UT0NPTAkJMzgKKyNkZWZpbmUgU09fRE9NQUlOCQkzOQorCiAjZW5kaWYJLyogX0FTTV9QT1dFUlBDX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IGMzYjE5MzEuLjE5ODI2NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC01NCw3ICs1NCw3IEBACiAgKiBUaGlzIHJldHVybnMgdGhlIG9sZCB2YWx1ZSBpbiB0aGUgbG9jaywgc28gd2Ugc3VjY2VlZGVkCiAgKiBpbiBnZXR0aW5nIHRoZSBsb2NrIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgMC4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFyY2hfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCXVuc2lnbmVkIGxvbmcgdG1wLCB0b2tlbjsKIApAQCAtNzYsNyArNzYsNyBAQAogc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQogewogCUNMRUFSX0lPX1NZTkM7Ci0JcmV0dXJuIF9fc3Bpbl90cnlsb2NrKGxvY2spID09IDA7CisJcmV0dXJuIGFyY2hfc3Bpbl90cnlsb2NrKGxvY2spID09IDA7CiB9CiAKIC8qCkBAIC0xMDgsNyArMTA4LDcgQEAKIHsKIAlDTEVBUl9JT19TWU5DOwogCXdoaWxlICgxKSB7Ci0JCWlmIChsaWtlbHkoX19zcGluX3RyeWxvY2sobG9jaykgPT0gMCkpCisJCWlmIChsaWtlbHkoYXJjaF9zcGluX3RyeWxvY2sobG9jaykgPT0gMCkpCiAJCQlicmVhazsKIAkJZG8gewogCQkJSE1UX2xvdygpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAKIAlDTEVBUl9JT19TWU5DOwogCXdoaWxlICgxKSB7Ci0JCWlmIChsaWtlbHkoX19zcGluX3RyeWxvY2sobG9jaykgPT0gMCkpCisJCWlmIChsaWtlbHkoYXJjaF9zcGluX3RyeWxvY2sobG9jaykgPT0gMCkpCiAJCQlicmVhazsKIAkJbG9jYWxfc2F2ZV9mbGFncyhmbGFnc19kaXMpOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0xODEsNyArMTgxLDcgQEAKICAqIFRoaXMgcmV0dXJucyB0aGUgb2xkIHZhbHVlIGluIHRoZSBsb2NrICsgMSwKICAqIHNvIHdlIGdvdCBhIHJlYWQgbG9jayBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzID4gMC4KICAqLwotc3RhdGljIGlubGluZSBsb25nIF9fcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIGxvbmcgYXJjaF9yZWFkX3RyeWxvY2socmF3X3J3bG9ja190ICpydykKIHsKIAlsb25nIHRtcDsKIApAQCAtMjA1LDcgKzIwNSw3IEBACiAgKiBUaGlzIHJldHVybnMgdGhlIG9sZCB2YWx1ZSBpbiB0aGUgbG9jaywKICAqIHNvIHdlIGdvdCB0aGUgd3JpdGUgbG9jayBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIDAuCiAgKi8KLXN0YXRpYyBpbmxpbmUgbG9uZyBfX3dyaXRlX3RyeWxvY2socmF3X3J3bG9ja190ICpydykKK3N0YXRpYyBpbmxpbmUgbG9uZyBhcmNoX3dyaXRlX3RyeWxvY2socmF3X3J3bG9ja190ICpydykKIHsKIAlsb25nIHRtcCwgdG9rZW47CiAKQEAgLTIyOCw3ICsyMjgsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQogewogCXdoaWxlICgxKSB7Ci0JCWlmIChsaWtlbHkoX19yZWFkX3RyeWxvY2socncpID4gMCkpCisJCWlmIChsaWtlbHkoYXJjaF9yZWFkX3RyeWxvY2socncpID4gMCkpCiAJCQlicmVhazsKIAkJZG8gewogCQkJSE1UX2xvdygpOwpAQCAtMjQyLDcgKzI0Miw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQogewogCXdoaWxlICgxKSB7Ci0JCWlmIChsaWtlbHkoX193cml0ZV90cnlsb2NrKHJ3KSA9PSAwKSkKKwkJaWYgKGxpa2VseShhcmNoX3dyaXRlX3RyeWxvY2socncpID09IDApKQogCQkJYnJlYWs7CiAJCWRvIHsKIAkJCUhNVF9sb3coKTsKQEAgLTI1NSwxMiArMjU1LDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3JlYWRfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQogewotCXJldHVybiBfX3JlYWRfdHJ5bG9jayhydykgPiAwOworCXJldHVybiBhcmNoX3JlYWRfdHJ5bG9jayhydykgPiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBfX3Jhd193cml0ZV90cnlsb2NrKHJhd19yd2xvY2tfdCAqcncpCiB7Ci0JcmV0dXJuIF9fd3JpdGVfdHJ5bG9jayhydykgPT0gMDsKKwlyZXR1cm4gYXJjaF93cml0ZV90cnlsb2NrKHJ3KSA9PSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZF91bmxvY2socmF3X3J3bG9ja190ICpydykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zd2lvdGxiLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3dpb3RsYi5oCmluZGV4IDMwODkxZDYuLjg5NzlkNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zd2lvdGxiLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N3aW90bGIuaApAQCAtMTMsMTUgKzEzLDEzIEBACiAKICNpbmNsdWRlIDxsaW51eC9zd2lvdGxiLmg+CiAKLWV4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIHN3aW90bGJfZG1hX29wczsKLWV4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIHN3aW90bGJfcGNpX2RtYV9vcHM7Ci0KLWludCBzd2lvdGxiX2FyY2hfYWRkcmVzc19uZWVkc19tYXBwaW5nKHN0cnVjdCBkZXZpY2UgKiwgZG1hX2FkZHJfdCwKLQkJCQkgICAgICAgc2l6ZV90IHNpemUpOworZXh0ZXJuIHN0cnVjdCBkbWFfbWFwX29wcyBzd2lvdGxiX2RtYV9vcHM7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfbWFya19jbGVhbih2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkge30KIAogZXh0ZXJuIHVuc2lnbmVkIGludCBwcGNfc3dpb3RsYl9lbmFibGU7CiBpbnQgX19pbml0IHN3aW90bGJfc2V0dXBfYnVzX25vdGlmaWVyKHZvaWQpOwogCitleHRlcm4gdm9pZCBwY2lfZG1hX2Rldl9zZXR1cF9zd2lvdGxiKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKwogI2VuZGlmIC8qIF9fQVNNX1NXSU9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCmluZGV4IDM3MDYwMGNhLi5lZDI0YmQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCkBAIC05NSw4ICs5NSw4IEBACiBTWVNYKHN5c19uaV9zeXNjYWxsLGNvbXBhdF9zeXNfb2xkX3JlYWRkaXIsc3lzX29sZF9yZWFkZGlyKQogU1lTQ0FMTF9TUFUobW1hcCkKIFNZU0NBTExfU1BVKG11bm1hcCkKLVNZU0NBTExfU1BVKHRydW5jYXRlKQotU1lTQ0FMTF9TUFUoZnRydW5jYXRlKQorQ09NUEFUX1NZU19TUFUodHJ1bmNhdGUpCitDT01QQVRfU1lTX1NQVShmdHJ1bmNhdGUpCiBTWVNDQUxMX1NQVShmY2htb2QpCiBTWVNDQUxMX1NQVShmY2hvd24pCiBDT01QQVRfU1lTX1NQVShnZXRwcmlvcml0eSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90bGIuaAppbmRleCBlMjBmZjc1Li5lMmI0MjhiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0yNSw1NyArMjUsMjUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KIAotc3RydWN0IG1tdV9nYXRoZXI7Ci0KICNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJZG8geyB9IHdoaWxlICgwKQogCi0jaWYgIWRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VKQotCi0jZGVmaW5lIHRsYl9mbHVzaCh0bGIpCQkJZmx1c2hfdGxiX21tKCh0bGIpLT5tbSkKLQotI2VsaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQotCi1leHRlcm4gdm9pZCBwdGVfZnJlZV9maW5pc2godm9pZCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKLXsKLQlzdHJ1Y3QgcHBjNjRfdGxiX2JhdGNoICp0bGJiYXRjaCA9ICZfX2dldF9jcHVfdmFyKHBwYzY0X3RsYl9iYXRjaCk7Ci0KLQkvKiBJZiB0aGVyZSdzIGEgVExCIGJhdGNoIHBlbmRpbmcsIHRoZW4gd2UgbXVzdCBmbHVzaCBpdCBiZWNhdXNlIHRoZQotCSAqIHBhZ2VzIGFyZSBnb2luZyB0byBiZSBmcmVlZCBhbmQgd2UgcmVhbGx5IGRvbid0IHdhbnQgdG8gaGF2ZSBhIENQVQotCSAqIGFjY2VzcyBhIGZyZWVkIHBhZ2UgYmVjYXVzZSBpdCBoYXMgYSBzdGFsZSBUTEIKLQkgKi8KLQlpZiAodGxiYmF0Y2gtPmluZGV4KQotCQlfX2ZsdXNoX3RsYl9wZW5kaW5nKHRsYmJhdGNoKTsKLQotCXB0ZV9mcmVlX2ZpbmlzaCgpOwotfQotCi0jZWxzZQotCiBleHRlcm4gdm9pZCB0bGJfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYik7CiAKLSNlbmRpZgotCiAvKiBHZXQgdGhlIGdlbmVyaWMgYml0cy4uLiAqLwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RsYi5oPgogCi0jaWYgIWRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VKSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCi0KLSNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZSwgYWRkcmVzcykgZG8geyB9IHdoaWxlICgwKQotCi0jZWxzZQogZXh0ZXJuIHZvaWQgZmx1c2hfaGFzaF9lbnRyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHRlX3QgKnB0ZXAsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGVwLAotCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCisJCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogeworI2lmZGVmIENPTkZJR19QUENfU1REX01NVV8zMgogCWlmIChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0hBU0hQVEUpCiAJCWZsdXNoX2hhc2hfZW50cnkodGxiLT5tbSwgcHRlcCwgYWRkcmVzcyk7CisjZW5kaWYKIH0KIAotI2VuZGlmCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1BPV0VSUENfVExCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90bGJmbHVzaC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggYWJiZTM0MS4uZDUwYTM4MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKQEAgLTYsNyArNiw3IEBACiAgKgogICogIC0gZmx1c2hfdGxiX21tKG1tKSBmbHVzaGVzIHRoZSBzcGVjaWZpZWQgbW0gY29udGV4dCBUTEIncwogICogIC0gZmx1c2hfdGxiX3BhZ2Uodm1hLCB2bWFkZHIpIGZsdXNoZXMgb25lIHBhZ2UKLSAqICAtIGxvY2FsX2ZsdXNoX3RsYl9tbShtbSkgZmx1c2hlcyB0aGUgc3BlY2lmaWVkIG1tIGNvbnRleHQgb24KKyAqICAtIGxvY2FsX2ZsdXNoX3RsYl9tbShtbSwgZnVsbCkgZmx1c2hlcyB0aGUgc3BlY2lmaWVkIG1tIGNvbnRleHQgb24KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxvY2FsIHByb2Nlc3NvcgogICogIC0gbG9jYWxfZmx1c2hfdGxiX3BhZ2Uodm1hLCB2bWFkZHIpIGZsdXNoZXMgb25lIHBhZ2Ugb24gdGhlIGxvY2FsIHByb2Nlc3NvcgogICogIC0gZmx1c2hfdGxiX3BhZ2Vfbm9oYXNoKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlIGlmIFNXIGxvYWRlZCBUTEIKQEAgLTI5LDcgKzI5LDggQEAKICAqIHNwZWNpZmljIHRsYmllJ3MKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CiAKICNkZWZpbmUgTU1VX05PX0NPTlRFWFQgICAgICAJKCh1bnNpZ25lZCBpbnQpLTEpCiAKQEAgLTQwLDEyICs0MSwxOCBAQAogZXh0ZXJuIHZvaWQgbG9jYWxfZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIGV4dGVybiB2b2lkIGxvY2FsX2ZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZtYWRkcik7CiAKK2V4dGVybiB2b2lkIF9fbG9jYWxfZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyLAorCQkJCSAgIGludCB0c2l6ZSwgaW50IGluZCk7CisKICNpZmRlZiBDT05GSUdfU01QCiBleHRlcm4gdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdm1hZGRyKTsKK2V4dGVybiB2b2lkIF9fZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyLAorCQkJICAgICBpbnQgdHNpemUsIGludCBpbmQpOwogI2Vsc2UKICNkZWZpbmUgZmx1c2hfdGxiX21tKG1tKQkJbG9jYWxfZmx1c2hfdGxiX21tKG1tKQogI2RlZmluZSBmbHVzaF90bGJfcGFnZSh2bWEsYWRkcikJbG9jYWxfZmx1c2hfdGxiX3BhZ2Uodm1hLGFkZHIpCisjZGVmaW5lIF9fZmx1c2hfdGxiX3BhZ2UobW0sYWRkcixwLGkpCV9fbG9jYWxfZmx1c2hfdGxiX3BhZ2UobW0sYWRkcixwLGkpCiAjZW5kaWYKICNkZWZpbmUgZmx1c2hfdGxiX3BhZ2Vfbm9oYXNoKHZtYSxhZGRyKQlmbHVzaF90bGJfcGFnZSh2bWEsYWRkcikKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Zkc28uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS92ZHNvLmgKaW5kZXggMjZmYzQ0OS4uZGMwNDE5YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Zkc28uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdmRzby5oCkBAIC03LDkgKzcsOCBAQAogI2RlZmluZSBWRFNPMzJfTEJBU0UJMHgxMDAwMDAKICNkZWZpbmUgVkRTTzY0X0xCQVNFCTB4MTAwMDAwCiAKLS8qIERlZmF1bHQgbWFwIGFkZHJlc3NlcyAqLworLyogRGVmYXVsdCBtYXAgYWRkcmVzc2VzIGZvciAzMmJpdCB2RFNPICovCiAjZGVmaW5lIFZEU08zMl9NQkFTRQlWRFNPMzJfTEJBU0UKLSNkZWZpbmUgVkRTTzY0X01CQVNFCVZEU082NF9MQkFTRQogCiAjZGVmaW5lIFZEU09fVkVSU0lPTl9TVFJJTkcJTElOVVhfMi42LjE1CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCmluZGV4IGI3MzM5NmIuLjU2OWY3OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMzMsMTAgKzMzLDEwIEBACiBvYmoteQkJCQkrPSB2ZHNvMzIvCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSBzZXR1cF82NC5vIHN5c19wcGMzMi5vIFwKIAkJCQkgICBzaWduYWxfNjQubyBwdHJhY2UzMi5vIFwKLQkJCQkgICBwYWNhLm8gY3B1X3NldHVwX3BwYzk3MC5vIFwKLQkJCQkgICBjcHVfc2V0dXBfcGE2dC5vIFwKLQkJCQkgICBmaXJtd2FyZS5vIG52cmFtXzY0Lm8KKwkJCQkgICBwYWNhLm8gbnZyYW1fNjQubyBmaXJtd2FyZS5vCitvYmotJChDT05GSUdfUFBDX0JPT0szU182NCkJKz0gY3B1X3NldHVwX3BwYzk3MC5vIGNwdV9zZXR1cF9wYTZ0Lm8KIG9iajY0LSQoQ09ORklHX1JFTE9DQVRBQkxFKQkrPSByZWxvY182NC5vCitvYmotJChDT05GSUdfUFBDX0JPT0szRV82NCkJKz0gZXhjZXB0aW9ucy02NGUubwogb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gdmRzbzY0Lwogb2JqLSQoQ09ORklHX0FMVElWRUMpCQkrPSB2ZWNlbXUubwogb2JqLSQoQ09ORklHX1BQQ185NzBfTkFQKQkrPSBpZGxlX3Bvd2VyNC5vCkBAIC02Myw4ICs2Myw4IEBACiBvYmotJChDT05GSUdfNDR4KQkJKz0gY3B1X3NldHVwXzQ0eC5vCiBvYmotJChDT05GSUdfRlNMX0JPT0tFKQkJKz0gY3B1X3NldHVwX2ZzbF9ib29rZS5vIGRiZWxsLm8KIAotZXh0cmEtJChDT05GSUdfUFBDX1NURF9NTVUpCTo9IGhlYWRfMzIubwotZXh0cmEtJChDT05GSUdfUFBDNjQpCQk6PSBoZWFkXzY0Lm8KK2V4dHJhLXkJCQkJOj0gaGVhZF8kKENPTkZJR19XT1JEX1NJWkUpLm8KK2V4dHJhLSQoQ09ORklHX1BQQ19CT09LM0VfMzIpCTo9IGhlYWRfbmV3X2Jvb2tlLm8KIGV4dHJhLSQoQ09ORklHXzQweCkJCTo9IGhlYWRfNDB4Lm8KIGV4dHJhLSQoQ09ORklHXzQ0eCkJCTo9IGhlYWRfNDR4Lm8KIGV4dHJhLSQoQ09ORklHX0ZTTF9CT09LRSkJOj0gaGVhZF9mc2xfYm9va2UubwpAQCAtODgsNyArODgsNyBAQAogCiBwY2k2NC0kKENPTkZJR19QUEM2NCkJCSs9IHBjaV9kbi5vIGlzYS1icmlkZ2Uubwogb2JqLSQoQ09ORklHX1BDSSkJCSs9IHBjaV8kKENPTkZJR19XT1JEX1NJWkUpLm8gJChwY2k2NC15KSBcCi0JCQkJICAgcGNpLWNvbW1vbi5vCisJCQkJICAgcGNpLWNvbW1vbi5vIHBjaV9vZl9zY2FuLm8KIG9iai0kKENPTkZJR19QQ0lfTVNJKQkJKz0gbXNpLm8KIG9iai0kKENPTkZJR19LRVhFQykJCSs9IG1hY2hpbmVfa2V4ZWMubyBjcmFzaC5vIFwKIAkJCQkgICBtYWNoaW5lX2tleGVjXyQoQ09ORklHX1dPUkRfU0laRSkubwpAQCAtOTcsNyArOTcsNyBAQAogCiBvYmotJChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCSs9IGZ0cmFjZS5vCiBvYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKQkrPSBmdHJhY2Uubwotb2JqLSQoQ09ORklHX1BQQ19QRVJGX0NUUlMpCSs9IHBlcmZfY291bnRlci5vCitvYmotJChDT05GSUdfUFBDX1BFUkZfQ1RSUykJKz0gcGVyZl9jb3VudGVyLm8gcGVyZl9jYWxsY2hhaW4ubwogb2JqNjQtJChDT05GSUdfUFBDX1BFUkZfQ1RSUykJKz0gcG93ZXI0LXBtdS5vIHBwYzk3MC1wbXUubyBwb3dlcjUtcG11Lm8gXAogCQkJCSAgIHBvd2VyNSstcG11Lm8gcG93ZXI2LXBtdS5vIHBvd2VyNy1wbXUubwogb2JqMzItJChDT05GSUdfUFBDX1BFUkZfQ1RSUykJKz0gbXBjNzQ1MC1wbXUubwpAQCAtMTE1LDYgKzExNSwxMyBAQAogb2JqLXkJCQkJKz0gcHBjX3NhdmVfcmVncy5vCiBlbmRpZgogCisjIERpc2FibGUgR0NPViBpbiBvZGQgb3Igc2Vuc2l0aXZlIGNvZGUKK0dDT1ZfUFJPRklMRV9wcm9tX2luaXQubyA6PSBuCitHQ09WX1BST0ZJTEVfZnRyYWNlLm8gOj0gbgorR0NPVl9QUk9GSUxFX21hY2hpbmVfa2V4ZWNfNjQubyA6PSBuCitHQ09WX1BST0ZJTEVfbWFjaGluZV9rZXhlY18zMi5vIDo9IG4KK0dDT1ZfUFJPRklMRV9rcHJvYmVzLm8gOj0gbgorCiBleHRyYS0kKENPTkZJR19QUENfRlBVKQkJKz0gZnB1Lm8KIGV4dHJhLSQoQ09ORklHX0FMVElWRUMpCQkrPSB2ZWN0b3IubwogZXh0cmEtJChDT05GSUdfUFBDNjQpCQkrPSBlbnRyeV82NC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNTYxYjY0Ni4uZjBkZjI4NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNTIsOSArNTIsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUFBDMzIKICNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkgfHwgZGVmaW5lZChDT05GSUdfNDB4KQogI2luY2x1ZGUgImhlYWRfYm9va2UuaCIKICNlbmRpZgorI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19GU0xfQk9PS0UpCiAjaW5jbHVkZSAiLi4vbW0vbW11X2RlY2wuaCIKQEAgLTY3LDYgKzY5LDggQEAKIAlERUZJTkUoTU1DT05URVhUSUQsIG9mZnNldG9mKHN0cnVjdCBtbV9zdHJ1Y3QsIGNvbnRleHQuaWQpKTsKICNpZmRlZiBDT05GSUdfUFBDNjQKIAlERUZJTkUoQVVESVRDT05URVhULCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIGF1ZGl0X2NvbnRleHQpKTsKKwlERUZJTkUoU0lHU0VHViwgU0lHU0VHVik7CisJREVGSU5FKE5NSV9NQVNLLCBOTUlfTUFTSyk7CiAjZWxzZQogCURFRklORShUSFJFQURfSU5GTywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFjaykpOwogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwpAQCAtMTM4LDYgKzE0MiwyMCBAQAogCQkJCQkgICAgY29udGV4dC5oaWdoX3NsaWNlc19wc2l6ZSkpOwogCURFRklORShNTVVQU0laRURFRlNJWkUsIHNpemVvZihzdHJ1Y3QgbW11X3BzaXplX2RlZikpOwogI2VuZGlmIC8qIENPTkZJR19QUENfTU1fU0xJQ0VTICovCisKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorCURFRklORShQQUNBUEdELCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHBnZCkpOworCURFRklORShQQUNBX0tFUk5FTFBHRCwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBrZXJuZWxfcGdkKSk7CisJREVGSU5FKFBBQ0FfRVhHRU4sIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgZXhnZW4pKTsKKwlERUZJTkUoUEFDQV9FWFRMQiwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBleHRsYikpOworCURFRklORShQQUNBX0VYTUMsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgZXhtYykpOworCURFRklORShQQUNBX0VYQ1JJVCwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBleGNyaXQpKTsKKwlERUZJTkUoUEFDQV9FWERCRywgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBleGRiZykpOworCURFRklORShQQUNBX01DX1NUQUNLLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIG1jX2tzdGFjaykpOworCURFRklORShQQUNBX0NSSVRfU1RBQ0ssIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgY3JpdF9rc3RhY2spKTsKKwlERUZJTkUoUEFDQV9EQkdfU1RBQ0ssIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgZGJnX2tzdGFjaykpOworI2VuZGlmIC8qIENPTkZJR19QUENfQk9PSzNFICovCisKICNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfNjQKIAlERUZJTkUoUEFDQVNUQUJSRUFMLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHN0YWJfcmVhbCkpOwogCURFRklORShQQUNBU1RBQlZJUlQsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc3RhYl9hZGRyKSk7CkBAIC0yNjAsNiArMjc4LDcgQEAKIAlERUZJTkUoX1NSUjEsIFNUQUNLX0ZSQU1FX09WRVJIRUFEK3NpemVvZihzdHJ1Y3QgcHRfcmVncykrOCk7CiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikKICNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkgfHwgZGVmaW5lZChDT05GSUdfNDB4KQogCURFRklORShFWENfTFZMX1NJWkUsIFNUQUNLX0VYQ19MVkxfRlJBTUVfU0laRSk7CiAJREVGSU5FKE1BUzAsIFNUQUNLX0lOVF9GUkFNRV9TSVpFK29mZnNldG9mKHN0cnVjdCBleGNlcHRpb25fcmVncywgbWFzMCkpOwpAQCAtMjc4LDcgKzI5Nyw3IEBACiAJREVGSU5FKF9EU1JSMSwgU1RBQ0tfSU5UX0ZSQU1FX1NJWkUrb2Zmc2V0b2Yoc3RydWN0IGV4Y2VwdGlvbl9yZWdzLCBkc3JyMSkpOwogCURFRklORShTQVZFRF9LU1BfTElNSVQsIFNUQUNLX0lOVF9GUkFNRV9TSVpFK29mZnNldG9mKHN0cnVjdCBleGNlcHRpb25fcmVncywgc2F2ZWRfa3NwX2xpbWl0KSk7CiAjZW5kaWYKLQorI2VuZGlmCiAJREVGSU5FKENMT05FX1ZNLCBDTE9ORV9WTSk7CiAJREVGSU5FKENMT05FX1VOVFJBQ0VELCBDTE9ORV9VTlRSQUNFRCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKaW5kZXggMWU5OTQ5ZS4uNTVjYmE0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKQEAgLTIxLDcgKzIxLDcgQEAKIAltZmxyCXI0CiBCRUdJTl9NTVVfRlRSX1NFQ1RJT04KIAlsaQlyMTAsMAotCW10c3ByCVNQUk5fU1BSRzQscjEwCQkvKiBpbml0IFNXIExSVSB0cmFja2luZyAqLworCW10c3ByCVNQUk5fU1BSR182MDNfTFJVLHIxMAkJLyogaW5pdCBTVyBMUlUgdHJhY2tpbmcgKi8KIEVORF9NTVVfRlRSX1NFQ1RJT05fSUZTRVQoTU1VX0ZUUl9ORUVEX0RUTEJfU1dfTFJVKQogQkVHSU5fRlRSX1NFQ1RJT04KIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDRhMjRhMmYuLjBiOWM5MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTg5LDExICs4OSwxNSBAQAogI2RlZmluZSBDT01NT05fVVNFUl9QQTZUCShDT01NT05fVVNFUl9QUEM2NCB8IFBQQ19GRUFUVVJFX1BBNlQgfFwKIAkJCQkgUFBDX0ZFQVRVUkVfVFJVRV9MRSB8IFwKIAkJCQkgUFBDX0ZFQVRVUkVfSEFTX0FMVElWRUNfQ09NUCkKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRV82NAorI2RlZmluZSBDT01NT05fVVNFUl9CT09LRQkoQ09NTU9OX1VTRVJfUFBDNjQgfCBQUENfRkVBVFVSRV9CT09LRSkKKyNlbHNlCiAjZGVmaW5lIENPTU1PTl9VU0VSX0JPT0tFCShQUENfRkVBVFVSRV8zMiB8IFBQQ19GRUFUVVJFX0hBU19NTVUgfCBcCiAJCQkJIFBQQ19GRUFUVVJFX0JPT0tFKQorI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgY3B1X3NwZWMgX19pbml0ZGF0YSBjcHVfc3BlY3NbXSA9IHsKLSNpZmRlZiBDT05GSUdfUFBDNjQKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAogCXsJLyogUG93ZXIzICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLAogCQkucHZyX3ZhbHVlCQk9IDB4MDA0MDAwMDAsCkBAIC01MDgsNyArNTEyLDggQEAKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBvd2VyNCIsCiAJfQotI2VuZGlmCS8qIENPTkZJR19QUEM2NCAqLworI2VuZGlmCS8qIENPTkZJR19QUENfQk9PSzNTXzY0ICovCisKICNpZmRlZiBDT05GSUdfUFBDMzIKICNpZiBDTEFTU0lDX1BQQwogCXsJLyogNjAxICovCkBAIC0xNjMwLDcgKzE2MzUsNyBAQAogCQkucGxhdGZvcm0JCT0gInBwYzQ0MCIsCiAJfSwKIAl7IC8qIDQ2MEVYICovCi0JCS5wdnJfbWFzawkJPSAweGZmZmYwMDAyLAorCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwNiwKIAkJLnB2cl92YWx1ZQkJPSAweDEzMDIwMDAyLAogCQkuY3B1X25hbWUJCT0gIjQ2MEVYIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU180NDB4NiwKQEAgLTE2NDIsOCArMTY0NywyMSBAQAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrXzQ0MEEsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNDQwIiwKIAl9LAorCXsgLyogNDYwRVggUmV2IEIgKi8KKwkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDcsCisJCS5wdnJfdmFsdWUJCT0gMHgxMzAyMDAwNCwKKwkJLmNwdV9uYW1lCQk9ICI0NjBFWCBSZXYuIEIiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTXzQ0MHg2LAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9CT09LRSB8IFBQQ19GRUFUVVJFX0hBU19GUFUsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9UWVBFXzQ0eCwKKwkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKKwkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV80NjBleCwKKwkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja180NDBBLAorCQkucGxhdGZvcm0JCT0gInBwYzQ0MCIsCisJfSwKIAl7IC8qIDQ2MEdUICovCi0JCS5wdnJfbWFzawkJPSAweGZmZmYwMDAyLAorCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwNiwKIAkJLnB2cl92YWx1ZQkJPSAweDEzMDIwMDAwLAogCQkuY3B1X25hbWUJCT0gIjQ2MEdUIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU180NDB4NiwKQEAgLTE2NTUsNiArMTY3MywxOSBAQAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrXzQ0MEEsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNDQwIiwKIAl9LAorCXsgLyogNDYwR1QgUmV2IEIgKi8KKwkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDcsCisJCS5wdnJfdmFsdWUJCT0gMHgxMzAyMDAwNSwKKwkJLmNwdV9uYW1lCQk9ICI0NjBHVCBSZXYuIEIiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTXzQ0MHg2LAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9CT09LRSB8IFBQQ19GRUFUVVJFX0hBU19GUFUsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9UWVBFXzQ0eCwKKwkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKKwkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV80NjBndCwKKwkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja180NDBBLAorCQkucGxhdGZvcm0JCT0gInBwYzQ0MCIsCisJfSwKIAl7IC8qIDQ2MFNYICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmZmZjAwLAogCQkucHZyX3ZhbHVlCQk9IDB4MTM1NDE4MDAsCkBAIC0xNzk3LDYgKzE4MjgsMjkgQEAKIAl9CiAjZW5kaWYgLyogQ09ORklHX0U1MDAgKi8KICNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KKworI2lmZGVmIENPTkZJR19QUENfQk9PSzNFXzY0CisJewkvKiBUaGlzIGlzIGEgZGVmYXVsdCBlbnRyeSB0byBnZXQgZ29pbmcsIHRvIGJlIHJlcGxhY2VkIGJ5CisJCSAqIGEgcmVhbCBvbmUgYXQgc29tZSBzdGFnZQorCQkgKi8KKyNkZWZpbmUgQ1BVX0ZUUlNfQkFTRV9CT09LM0UJKENQVV9GVFJfVVNFX1RCIHwgXAorCSAgICBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX1NNVCB8IFwKKwkgICAgQ1BVX0ZUUl9OT0RTSVNSQUxJR04gfCBDUFVfRlRSX05PRVhFQ1VURSkKKwkJLnB2cl9tYXNrCQk9IDB4MDAwMDAwMDAsCisJCS5wdnJfdmFsdWUJCT0gMHgwMDAwMDAwMCwKKwkJLmNwdV9uYW1lCQk9ICJCb29rM0UiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX0JBU0VfQk9PSzNFLAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1RZUEVfM0UgfCBNTVVfRlRSX1VTRV9UTEJJTFggfAorCQkJCQkgIE1NVV9GVFJfVVNFX1RMQklWQVhfQkNBU1QgfAorCQkJCQkgIE1NVV9GVFJfTE9DS19CQ0FTVF9JTlZBTCwKKwkJLmljYWNoZV9ic2l6ZQkJPSA2NCwKKwkJLmRjYWNoZV9ic2l6ZQkJPSA2NCwKKwkJLm51bV9wbWNzCQk9IDAsCisJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKKwkJLnBsYXRmb3JtCQk9ICJwb3dlcjYiLAorCX0sCisjZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY3B1X3NwZWMgdGhlX2NwdV9zcGVjOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLWlvbW11LmMKaW5kZXggMjk4M2FkYS4uODdkZGIzZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jCkBAIC04OSw3ICs4OSw3IEBACiAJCXJldHVybiAxOwogfQogCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGRtYV9pb21tdV9vcHMgPSB7CitzdHJ1Y3QgZG1hX21hcF9vcHMgZG1hX2lvbW11X29wcyA9IHsKIAkuYWxsb2NfY29oZXJlbnQJPSBkbWFfaW9tbXVfYWxsb2NfY29oZXJlbnQsCiAJLmZyZWVfY29oZXJlbnQJPSBkbWFfaW9tbXVfZnJlZV9jb2hlcmVudCwKIAkubWFwX3NnCQk9IGRtYV9pb21tdV9tYXBfc2csCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1zd2lvdGxiLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1zd2lvdGxiLmMKaW5kZXggNjhjY2YxMS4uZTk2Y2JiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtc3dpb3RsYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLXN3aW90bGIuYwpAQCAtMjQsNzEgKzI0LDYgQEAKIGludCBzd2lvdGxiIF9fcmVhZF9tb3N0bHk7CiB1bnNpZ25lZCBpbnQgcHBjX3N3aW90bGJfZW5hYmxlOwogCi12b2lkICpzd2lvdGxiX2J1c190b192aXJ0KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGFkZHIpCi17Ci0JdW5zaWduZWQgbG9uZyBwZm4gPSBQRk5fRE9XTihzd2lvdGxiX2J1c190b19waHlzKGh3ZGV2LCBhZGRyKSk7Ci0Jdm9pZCAqcGFnZWFkZHIgPSBwYWdlX2FkZHJlc3MocGZuX3RvX3BhZ2UocGZuKSk7Ci0KLQlpZiAocGFnZWFkZHIgIT0gTlVMTCkKLQkJcmV0dXJuIHBhZ2VhZGRyICsgKGFkZHIgJSBQQUdFX1NJWkUpOwotCXJldHVybiBOVUxMOwotfQotCi1kbWFfYWRkcl90IHN3aW90bGJfcGh5c190b19idXMoc3RydWN0IGRldmljZSAqaHdkZXYsIHBoeXNfYWRkcl90IHBhZGRyKQotewotCXJldHVybiBwYWRkciArIGdldF9kbWFfZGlyZWN0X29mZnNldChod2Rldik7Ci19Ci0KLXBoeXNfYWRkcl90IHN3aW90bGJfYnVzX3RvX3BoeXMoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgYmFkZHIpCi0KLXsKLQlyZXR1cm4gYmFkZHIgLSBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoaHdkZXYpOwotfQotCi0vKgotICogRGV0ZXJtaW5lIGlmIGFuIGFkZHJlc3MgbmVlZHMgYm91bmNlIGJ1ZmZlcmluZyB2aWEgc3dpb3RsYi4KLSAqIEdvaW5nIGZvcndhcmQgSSBleHBlY3QgdGhlIHN3aW90bGIgY29kZSB0byBnZW5lcmFsaXplIG9uIHVzaW5nCi0gKiBhIGRtYV9vcHMtPmFkZHJfbmVlZHNfbWFwLCBhbmQgdGhpcyBmdW5jdGlvbiB3aWxsIG1vdmUgZnJvbSBoZXJlIHRvIHRoZQotICogZ2VuZXJpYyBzd2lvdGxiIGNvZGUuCi0gKi8KLWludAotc3dpb3RsYl9hcmNoX2FkZHJlc3NfbmVlZHNfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBhZGRyLAotCQkJCSAgIHNpemVfdCBzaXplKQotewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhod2Rldik7Ci0KLQlCVUdfT04oIWRtYV9vcHMpOwotCXJldHVybiBkbWFfb3BzLT5hZGRyX25lZWRzX21hcChod2RldiwgYWRkciwgc2l6ZSk7Ci19Ci0KLS8qCi0gKiBEZXRlcm1pbmUgaWYgYW4gYWRkcmVzcyBpcyByZWFjaGFibGUgYnkgYSBwY2kgZGV2aWNlLCBvciBpZiB3ZSBtdXN0IGJvdW5jZS4KLSAqLwotc3RhdGljIGludAotc3dpb3RsYl9wY2lfYWRkcl9uZWVkc19tYXAoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUpCi17Ci0JdTY0IG1hc2sgPSBkbWFfZ2V0X21hc2soaHdkZXYpOwotCWRtYV9hZGRyX3QgbWF4OwotCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaHdkZXYpOwotCi0JaG9zZSA9IHBjaV9idXNfdG9faG9zdChwZGV2LT5idXMpOwotCW1heCA9IGhvc2UtPmRtYV93aW5kb3dfYmFzZV9jdXIgKyBob3NlLT5kbWFfd2luZG93X3NpemU7Ci0KLQkvKiBjaGVjayB0aGF0IHdlJ3JlIHdpdGhpbiBtYXBwZWQgcGNpIHdpbmRvdyBzcGFjZSAqLwotCWlmICgoYWRkciArIHNpemUgPiBtYXgpIHwgKGFkZHIgPCBob3NlLT5kbWFfd2luZG93X2Jhc2VfY3VyKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gIWlzX2J1ZmZlcl9kbWFfY2FwYWJsZShtYXNrLCBhZGRyLCBzaXplKTsKLX0KLQotc3RhdGljIGludAotc3dpb3RsYl9hZGRyX25lZWRzX21hcChzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSkKLXsKLQlyZXR1cm4gIWlzX2J1ZmZlcl9kbWFfY2FwYWJsZShkbWFfZ2V0X21hc2soaHdkZXYpLCBhZGRyLCBzaXplKTsKLX0KLQotCiAvKgogICogQXQgdGhlIG1vbWVudCwgYWxsIHBsYXRmb3JtcyB0aGF0IHVzZSB0aGlzIGNvZGUgb25seSByZXF1aXJlCiAgKiBzd2lvdGxiIHRvIGJlIHVzZWQgaWYgd2UncmUgb3BlcmF0aW5nIG9uIEhJR0hNRU0uICBTaW5jZQpAQCAtOTYsNyArMzEsNyBAQAogICogbWFwX3BhZ2UsIGFuZCB1bm1hcF9wYWdlIG9uIGhpZ2htZW0sIHVzZSBub3JtYWwgZG1hX29wcwogICogZm9yIGV2ZXJ5dGhpbmcgZWxzZS4KICAqLwotc3RydWN0IGRtYV9tYXBwaW5nX29wcyBzd2lvdGxiX2RtYV9vcHMgPSB7CitzdHJ1Y3QgZG1hX21hcF9vcHMgc3dpb3RsYl9kbWFfb3BzID0gewogCS5hbGxvY19jb2hlcmVudCA9IGRtYV9kaXJlY3RfYWxsb2NfY29oZXJlbnQsCiAJLmZyZWVfY29oZXJlbnQgPSBkbWFfZGlyZWN0X2ZyZWVfY29oZXJlbnQsCiAJLm1hcF9zZyA9IHN3aW90bGJfbWFwX3NnX2F0dHJzLApAQCAtMTA0LDM3ICszOSwzNyBAQAogCS5kbWFfc3VwcG9ydGVkID0gc3dpb3RsYl9kbWFfc3VwcG9ydGVkLAogCS5tYXBfcGFnZSA9IHN3aW90bGJfbWFwX3BhZ2UsCiAJLnVubWFwX3BhZ2UgPSBzd2lvdGxiX3VubWFwX3BhZ2UsCi0JLmFkZHJfbmVlZHNfbWFwID0gc3dpb3RsYl9hZGRyX25lZWRzX21hcCwKIAkuc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSA9IHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSwKIAkuc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSwKIAkuc3luY19zZ19mb3JfY3B1ID0gc3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUsCi0JLnN5bmNfc2dfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zZ19mb3JfZGV2aWNlCisJLnN5bmNfc2dfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zZ19mb3JfZGV2aWNlLAorCS5tYXBwaW5nX2Vycm9yID0gc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvciwKIH07CiAKLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgc3dpb3RsYl9wY2lfZG1hX29wcyA9IHsKLQkuYWxsb2NfY29oZXJlbnQgPSBkbWFfZGlyZWN0X2FsbG9jX2NvaGVyZW50LAotCS5mcmVlX2NvaGVyZW50ID0gZG1hX2RpcmVjdF9mcmVlX2NvaGVyZW50LAotCS5tYXBfc2cgPSBzd2lvdGxiX21hcF9zZ19hdHRycywKLQkudW5tYXBfc2cgPSBzd2lvdGxiX3VubWFwX3NnX2F0dHJzLAotCS5kbWFfc3VwcG9ydGVkID0gc3dpb3RsYl9kbWFfc3VwcG9ydGVkLAotCS5tYXBfcGFnZSA9IHN3aW90bGJfbWFwX3BhZ2UsCi0JLnVubWFwX3BhZ2UgPSBzd2lvdGxiX3VubWFwX3BhZ2UsCi0JLmFkZHJfbmVlZHNfbWFwID0gc3dpb3RsYl9wY2lfYWRkcl9uZWVkc19tYXAsCi0JLnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUgPSBzd2lvdGxiX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUsCi0JLnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UgPSBzd2lvdGxiX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UsCi0JLnN5bmNfc2dfZm9yX2NwdSA9IHN3aW90bGJfc3luY19zZ19mb3JfY3B1LAotCS5zeW5jX3NnX2Zvcl9kZXZpY2UgPSBzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZQotfTsKK3ZvaWQgcGNpX2RtYV9kZXZfc2V0dXBfc3dpb3RsYihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CisJc3RydWN0IGRldl9hcmNoZGF0YSAqc2Q7CisKKwlob3NlID0gcGNpX2J1c190b19ob3N0KHBkZXYtPmJ1cyk7CisJc2QgPSAmcGRldi0+ZGV2LmFyY2hkYXRhOworCXNkLT5tYXhfZGlyZWN0X2RtYV9hZGRyID0KKwkJaG9zZS0+ZG1hX3dpbmRvd19iYXNlX2N1ciArIGhvc2UtPmRtYV93aW5kb3dfc2l6ZTsKK30KIAogc3RhdGljIGludCBwcGNfc3dpb3RsYl9idXNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOworCXN0cnVjdCBkZXZfYXJjaGRhdGEgKnNkOwogCiAJLyogV2UgYXJlIG9ubHkgaW50ZXJldGVkIGluIGRldmljZSBhZGRpdGlvbiAqLwogCWlmIChhY3Rpb24gIT0gQlVTX05PVElGWV9BRERfREVWSUNFKQogCQlyZXR1cm4gMDsKIAorCXNkID0gJmRldi0+YXJjaGRhdGE7CisJc2QtPm1heF9kaXJlY3RfZG1hX2FkZHIgPSAwOworCiAJLyogTWF5IG5lZWQgdG8gYm91bmNlIGlmIHRoZSBkZXZpY2UgY2FuJ3QgYWRkcmVzcyBhbGwgb2YgRFJBTSAqLwogCWlmIChkbWFfZ2V0X21hc2soZGV2KSA8IGxtYl9lbmRfb2ZfRFJBTSgpKQogCQlzZXRfZG1hX29wcyhkZXYsICZzd2lvdGxiX2RtYV9vcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLmMKaW5kZXggY2NmMTI5ZC4uMjFiNzg0ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jCkBAIC03LDYgKzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9sbWIuaD4KICNpbmNsdWRlIDxhc20vYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CkBAIC0xNDAsNyArMTQxLDcgQEAKIH0KICNlbmRpZgogCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGRtYV9kaXJlY3Rfb3BzID0geworc3RydWN0IGRtYV9tYXBfb3BzIGRtYV9kaXJlY3Rfb3BzID0gewogCS5hbGxvY19jb2hlcmVudAk9IGRtYV9kaXJlY3RfYWxsb2NfY29oZXJlbnQsCiAJLmZyZWVfY29oZXJlbnQJPSBkbWFfZGlyZWN0X2ZyZWVfY29oZXJlbnQsCiAJLm1hcF9zZwkJPSBkbWFfZGlyZWN0X21hcF9zZywKQEAgLTE1NiwzICsxNTcsMTMgQEAKICNlbmRpZgogfTsKIEVYUE9SVF9TWU1CT0woZG1hX2RpcmVjdF9vcHMpOworCisjZGVmaW5lIFBSRUFMTE9DX0RNQV9ERUJVR19FTlRSSUVTICgxIDw8IDE2KQorCitzdGF0aWMgaW50IF9faW5pdCBkbWFfaW5pdCh2b2lkKQoreworICAgICAgIGRtYV9kZWJ1Z19pbml0KFBSRUFMTE9DX0RNQV9ERUJVR19FTlRSSUVTKTsKKworICAgICAgIHJldHVybiAwOworfQorZnNfaW5pdGNhbGwoZG1hX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IDNjYWRiYTYuLjExNzVhODUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKQEAgLTg4LDcgKzg4LDcgQEAKIAltZnNwcglyMCxTUFJOX1NSUjEKIAlzdHcJcjAsX1NSUjEocjExKQogCi0JbWZzcHIJcjgsU1BSTl9TUFJHMworCW1mc3ByCXI4LFNQUk5fU1BSR19USFJFQUQKIAlsd3oJcjAsS1NQX0xJTUlUKHI4KQogCXN0dwlyMCxTQVZFRF9LU1BfTElNSVQocjExKQogCXJsd2ltaQlyMCxyMSwwLDAsKDMxLVRIUkVBRF9TSElGVCkKQEAgLTEwOCw3ICsxMDgsNyBAQAogCW1mc3ByCXIwLFNQUk5fU1JSMQogCXN0dwlyMCxjcml0X3NycjFAbCgwKQogCi0JbWZzcHIJcjgsU1BSTl9TUFJHMworCW1mc3ByCXI4LFNQUk5fU1BSR19USFJFQUQKIAlsd3oJcjAsS1NQX0xJTUlUKHI4KQogCXN0dwlyMCxzYXZlZF9rc3BfbGltaXRAbCgwKQogCXJsd2ltaQlyMCxyMSwwLDAsKDMxLVRIUkVBRF9TSElGVCkKQEAgLTEzOCw3ICsxMzgsNyBAQAogCW1mc3ByCXIyLFNQUk5fWEVSCiAJc3R3CXIxMixfQ1RSKHIxMSkKIAlzdHcJcjIsX1hFUihyMTEpCi0JbWZzcHIJcjEyLFNQUk5fU1BSRzMKKwltZnNwcglyMTIsU1BSTl9TUFJHX1RIUkVBRAogCWFkZGkJcjIscjEyLC1USFJFQUQKIAl0b3ZpcnQocjIscjIpCQkJLyogc2V0IHIyIHRvIGN1cnJlbnQgKi8KIAliZXEJMmYJCQkvKiBpZiBmcm9tIHVzZXIsIGZpeCB1cCBUSFJFQUQucmVncyAqLwpAQCAtNjgwLDcgKzY4MCw3IEBACiAKIAl0b3BoeXMocjAscjQpCiAJQ0xSX1RPUDMyKHIwKQotCW10c3ByCVNQUk5fU1BSRzMscjAJLyogVXBkYXRlIGN1cnJlbnQgVEhSRUFEIHBoeXMgYWRkciAqLworCW10c3ByCVNQUk5fU1BSR19USFJFQUQscjAJLyogVXBkYXRlIGN1cnJlbnQgVEhSRUFEIHBoeXMgYWRkciAqLwogCWx3eglyMSxLU1AocjQpCS8qIExvYWQgbmV3IHN0YWNrIHBvaW50ZXIgKi8KIAogCS8qIHNhdmUgdGhlIG9sZCBjdXJyZW50ICdsYXN0JyBmb3IgcmV0dXJuIHZhbHVlICovCkBAIC0xMDU3LDcgKzEwNTcsNyBAQAogI2lmZGVmIENPTkZJR180MHgKIAkuZ2xvYmwJcmV0X2Zyb21fY3JpdF9leGMKIHJldF9mcm9tX2NyaXRfZXhjOgotCW1mc3ByCXI5LFNQUk5fU1BSRzMKKwltZnNwcglyOSxTUFJOX1NQUkdfVEhSRUFECiAJbGlzCXIxMCxzYXZlZF9rc3BfbGltaXRAaGE7CiAJbHd6CXIxMCxzYXZlZF9rc3BfbGltaXRAbChyMTApOwogCXRvdmlydChyOSxyOSk7CkBAIC0xMDc0LDcgKzEwNzQsNyBAQAogI2lmZGVmIENPTkZJR19CT09LRQogCS5nbG9ibAlyZXRfZnJvbV9jcml0X2V4YwogcmV0X2Zyb21fY3JpdF9leGM6Ci0JbWZzcHIJcjksU1BSTl9TUFJHMworCW1mc3ByCXI5LFNQUk5fU1BSR19USFJFQUQKIAlsd3oJcjEwLFNBVkVEX0tTUF9MSU1JVChyMSkKIAlzdHcJcjEwLEtTUF9MSU1JVChyOSkKIAlSRVNUT1JFX3hTUlIoU1JSMCxTUlIxKTsKQEAgLTEwODMsNyArMTA4Myw3IEBACiAKIAkuZ2xvYmwJcmV0X2Zyb21fZGVidWdfZXhjCiByZXRfZnJvbV9kZWJ1Z19leGM6Ci0JbWZzcHIJcjksU1BSTl9TUFJHMworCW1mc3ByCXI5LFNQUk5fU1BSR19USFJFQUQKIAlsd3oJcjEwLFNBVkVEX0tTUF9MSU1JVChyMSkKIAlzdHcJcjEwLEtTUF9MSU1JVChyOSkKIAlsd3oJcjksVEhSRUFEX0lORk8tVEhSRUFEKHI5KQpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKIAogCS5nbG9ibAlyZXRfZnJvbV9tY2hlY2tfZXhjCiByZXRfZnJvbV9tY2hlY2tfZXhjOgotCW1mc3ByCXI5LFNQUk5fU1BSRzMKKwltZnNwcglyOSxTUFJOX1NQUkdfVEhSRUFECiAJbHd6CXIxMCxTQVZFRF9LU1BfTElNSVQocjEpCiAJc3R3CXIxMCxLU1BfTElNSVQocjkpCiAJUkVTVE9SRV94U1JSKFNSUjAsU1JSMSk7CkBAIC0xMjU1LDcgKzEyNTUsNyBAQAogCU1UTVNSRChyMCkJCS8qIGRvbid0IGdldCB0cmFzaGVkICovCiAJbGkJcjksTVNSX0tFUk5FTCAmIH4oTVNSX0lSfE1TUl9EUikKIAltdGxyCXI2Ci0JbXRzcHIJU1BSTl9TUFJHMixyNworCW10c3ByCVNQUk5fU1BSR19SVEFTLHI3CiAJbXRzcHIJU1BSTl9TUlIwLHI4CiAJbXRzcHIJU1BSTl9TUlIxLHI5CiAJUkZJCkBAIC0xMjY1LDcgKzEyNjUsNyBAQAogCUZJWF9TUlIxKHI5LHIwKQogCWFkZGkJcjEscjEsSU5UX0ZSQU1FX1NJWkUKIAlsaQlyMCwwCi0JbXRzcHIJU1BSTl9TUFJHMixyMAorCW10c3ByCVNQUk5fU1BSR19SVEFTLHIwCiAJbXRzcHIJU1BSTl9TUlIwLHI4CiAJbXRzcHIJU1BSTl9TUlIxLHI5CiAJUkZJCQkJLyogcmV0dXJuIHRvIGNhbGxlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDQzZTA3MzQuLjY2YmNkYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTEyMCw5ICsxMjAsMTUgQEAKIDI6CiBFTkRfRldfRlRSX1NFQ1RJT05fSUZTRVQoRldfRkVBVFVSRV9JU0VSSUVTKQogI2VuZGlmIC8qIENPTkZJR19QUENfSVNFUklFUyAqLworCisJLyogSGFyZCBlbmFibGUgaW50ZXJydXB0cyAqLworI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCisJd3J0ZWVpCTEKKyNlbHNlCiAJbWZtc3IJcjExCiAJb3JpCXIxMSxyMTEsTVNSX0VFCiAJbXRtc3JkCXIxMSwxCisjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0UgKi8KIAogI2lmZGVmIFNIT1dfU1lTQ0FMTFMKIAlibAkuZG9fc2hvd19zeXNjYWxsCkBAIC0xNjgsMTUgKzE3NCwyNSBAQAogI2VuZGlmCiAJY2xycmRpCXIxMixyMSxUSFJFQURfU0hJRlQKIAotCS8qIGRpc2FibGUgaW50ZXJydXB0cyBzbyBjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzIGNhbid0IGNoYW5nZSwKLQkgICBhbmQgc28gdGhhdCB3ZSBkb24ndCBnZXQgaW50ZXJydXB0ZWQgYWZ0ZXIgbG9hZGluZyBTUlIwLzEuICovCiAJbGQJcjgsX01TUihyMSkKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szUworCS8qIE5vIE1TUjpSSSBvbiBCb29rRSAqLwogCWFuZGkuCXIxMCxyOCxNU1JfUkkKIAliZXEtCXVucmVjb3ZfcmVzdG9yZQorI2VuZGlmCisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgc28gY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncyBjYW4ndCBjaGFuZ2UsCisJICogYW5kIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGludGVycnVwdGVkIGFmdGVyIGxvYWRpbmcgU1JSMC8xLgorCSAqLworI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCisJd3J0ZWVpCTAKKyNlbHNlCiAJbWZtc3IJcjEwCiAJcmxkaWNsCXIxMCxyMTAsNDgsMQogCXJvdGxkaQlyMTAscjEwLDE2CiAJbXRtc3JkCXIxMCwxCisjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0UgKi8KKwogCWxkCXI5LFRJX0ZMQUdTKHIxMikKIAlsaQlyMTEsLV9MQVNUX0VSUk5PCiAJYW5kaS4JcjAscjksKF9USUZfU1lTQ0FMTF9UX09SX0F8X1RJRl9TSU5HTEVTVEVQfF9USUZfVVNFUl9XT1JLX01BU0t8X1RJRl9QRVJTWVNDQUxMX01BU0spCkBAIC0xOTQsOSArMjEwLDEzIEBACiAJICogdXNlcnNwYWNlIGFuZCB3ZSB0YWtlIGFuIGV4Y2VwdGlvbiBhZnRlciByZXN0b3JpbmcgcjEzLAogCSAqIHdlIGVuZCB1cCBjb3JydXB0aW5nIHRoZSB1c2Vyc3BhY2UgcjEzIHZhbHVlLgogCSAqLworI2lmZGVmIENPTkZJR19QUENfQk9PSzNTCisJLyogTm8gTVNSOlJJIG9uIEJvb2tFICovCiAJbGkJcjEyLE1TUl9SSQogCWFuZGMJcjExLHIxMCxyMTIKIAltdG1zcmQJcjExLDEJCQkvKiBjbGVhciBNU1IuUkkgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFBDX0JPT0szUyAqLworCiAJYmVxLQkxZgogCUFDQ09VTlRfQ1BVX1VTRVJfRVhJVChyMTEsIHIxMikKIAlsZAlyMTMsR1BSMTMocjEpCS8qIG9ubHkgcmVzdG9yZSByMTMgaWYgcmV0dXJuaW5nIHRvIHVzZXJtb2RlICovCkBAIC0yMDYsNyArMjI2LDcgQEAKIAltdGNyCXI1CiAJbXRzcHIJU1BSTl9TUlIwLHI3CiAJbXRzcHIJU1BSTl9TUlIxLHI4Ci0JcmZpZAorCVJGSQogCWIJLgkvKiBwcmV2ZW50IHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiAqLwogCiBzeXNjYWxsX2Vycm9yOgkKQEAgLTI3Niw5ICsyOTYsMTMgQEAKIAliZXEJLnJldF9mcm9tX2V4Y2VwdF9saXRlCiAKIAkvKiBSZS1lbmFibGUgaW50ZXJydXB0cyAqLworI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCisJd3J0ZWVpCTEKKyNlbHNlCiAJbWZtc3IJcjEwCiAJb3JpCXIxMCxyMTAsTVNSX0VFCiAJbXRtc3JkCXIxMCwxCisjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0UgKi8KIAogCWJsCS5zYXZlX252Z3BycwogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKQEAgLTM4MCw3ICs0MDQsNyBAQAogCWFuZC4JcjAscjAscjIyCiAJYmVxKwkxZgogCWFuZGMJcjIyLHIyMixyMAotCW10bXNyZAlyMjIKKwlNVE1TUkQocjIyKQogCWlzeW5jCiAxOglzdGQJcjIwLF9OSVAocjEpCiAJbWZjcglyMjMKQEAgLTM5OSw2ICs0MjMsNyBAQAogCXN0ZAlyNixQQUNBQ1VSUkVOVChyMTMpCS8qIFNldCBuZXcgJ2N1cnJlbnQnICovCiAKIAlsZAlyOCxLU1AocjQpCS8qIG5ldyBzdGFjayBwb2ludGVyICovCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM1MKIEJFR0lOX0ZUUl9TRUNUSU9OCiAgIEJFR0lOX0ZUUl9TRUNUSU9OX05FU1RFRCg5NSkKIAljbHJyZGkJcjYscjgsMjgJLyogZ2V0IGl0cyBFU0lEICovCkBAIC00NDUsOCArNDcwLDkgQEAKIAlzbGJpZQlyNgkJLyogV29ya2Fyb3VuZCBQT1dFUjUgPCBERDIuMSBpc3N1ZSAqLwogCXNsYm10ZQlyNyxyMAogCWlzeW5jCi0KIDI6CisjZW5kaWYgLyogIUNPTkZJR19QUENfQk9PSzNTICovCisKIAljbHJyZGkJcjcscjgsVEhSRUFEX1NISUZUCS8qIGJhc2Ugb2YgbmV3IHN0YWNrICovCiAJLyogTm90ZTogdGhpcyB1c2VzIFNXSVRDSF9GUkFNRV9TSVpFIHJhdGhlciB0aGFuIElOVF9GUkFNRV9TSVpFCiAJICAgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRvIGxlYXZlIHRoZSAyODgtYnl0ZSBBQkkgZ2FwIGF0IHRoZQpAQCAtNDkwLDEwICs1MTYsMTQgQEAKIAkgKiBjYW4ndCBjaGFuZ2UgYmV0d2VlbiB3aGVuIHdlIHRlc3QgaXQgYW5kIHdoZW4gd2UgcmV0dXJuCiAJICogZnJvbSB0aGUgaW50ZXJydXB0LgogCSAqLworI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCisJd3J0ZWVpCTAKKyNlbHNlCiAJbWZtc3IJcjEwCQkvKiBHZXQgY3VycmVudCBpbnRlcnJ1cHQgc3RhdGUgKi8KIAlybGRpY2wJcjkscjEwLDQ4LDEJLyogY2xlYXIgTVNSX0VFICovCiAJcm90bGRpCXI5LHI5LDE2CiAJbXRtc3JkCXI5LDEJCS8qIFVwZGF0ZSBtYWNoaW5lIHN0YXRlICovCisjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0UgKi8KIAogI2lmZGVmIENPTkZJR19QUkVFTVBUCiAJY2xycmRpCXI5LHIxLFRIUkVBRF9TSElGVAkvKiBjdXJyZW50X3RocmVhZF9pbmZvKCkgKi8KQEAgLTU0MCw2ICs1NzAsOSBAQAogCXJsZGljbAlyNCxyMyw0OSw2MwkJLyogcjAgPSAocjMgPj4gMTUpICYgMSAqLwogCXN0YglyNCxQQUNBSEFSRElSUUVOKHIxMykKIAorI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCisJYgkuZXhjZXB0aW9uX3JldHVybl9ib29rM2UKKyNlbHNlCiAJbGQJcjQsX0NUUihyMSkKIAlsZAlyMCxfTElOSyhyMSkKIAltdGN0cglyNApAQCAtNTg4LDYgKzYyMSw4IEBACiAJcmZpZAogCWIJLgkvKiBwcmV2ZW50IHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiAqLwogCisjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0UgKi8KKwogaXNlcmllc19jaGVja19wZW5kaW5nX2lycXM6CiAjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCiAJbGQJcjUsU09GVEUocjEpCkBAIC02MzgsNiArNjczLDExIEBACiAJbGkJcjAsMQogCXN0YglyMCxQQUNBU09GVElSUUVOKHIxMykKIAlzdGIJcjAsUEFDQUhBUkRJUlFFTihyMTMpCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKKwl3cnRlZWkJMQorCWJsCS5wcmVlbXB0X3NjaGVkdWxlCisJd3J0ZWVpCTAKKyNlbHNlCiAJb3JpCXIxMCxyMTAsTVNSX0VFCiAJbXRtc3JkCXIxMCwxCQkvKiByZWVuYWJsZSBpbnRlcnJ1cHRzICovCiAJYmwJLnByZWVtcHRfc2NoZWR1bGUKQEAgLTY0Niw2ICs2ODYsNyBAQAogCXJsZGljbAlyMTAscjEwLDQ4LDEJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGFnYWluICovCiAJcm90bGRpCXIxMCxyMTAsMTYKIAltdG1zcmQJcjEwLDEKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0JPT0szRSAqLwogCWxkCXI0LFRJX0ZMQUdTKHI5KQogCWFuZGkuCXIwLHI0LF9USUZfTkVFRF9SRVNDSEVECiAJYm5lCTFiCkBAIC02NTQsOCArNjk1LDEyIEBACiB1c2VyX3dvcms6CiAjZW5kaWYKIAkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCisJd3J0ZWVpCTEKKyNlbHNlCiAJb3JpCXIxMCxyMTAsTVNSX0VFCiAJbXRtc3JkCXIxMCwxCisjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0UgKi8KIAogCWFuZGkuCXIwLHI0LF9USUZfTkVFRF9SRVNDSEVECiAJYmVxCTFmCkBAIC03NjIsNyArODA3LDcgQEAKIAogX1NUQVRJQyhydGFzX3JldHVybl9sb2MpCiAJLyogcmVsb2NhdGlvbiBpcyBvZmYgYXQgdGhpcyBwb2ludCAqLwotCW1mc3ByCXI0LFNQUk5fU1BSRzMJICAgICAgICAvKiBHZXQgUEFDQSAqLworCW1mc3ByCXI0LFNQUk5fU1BSR19QQUNBCS8qIEdldCBQQUNBICovCiAJY2xybGRpCXI0LHI0LDIJCQkvKiBjb252ZXJ0IHRvIHJlYWxtb2RlIGFkZHJlc3MgKi8KIAogCWJjbAkyMCwzMSwkKzQKQEAgLTc5Myw3ICs4MzgsNyBAQAogCVJFU1RfOEdQUlMoMTQsIHIxKQkJLyogUmVzdG9yZSB0aGUgbm9uLXZvbGF0aWxlcyAqLwogCVJFU1RfMTBHUFJTKDIyLCByMSkJCS8qIGRpdHRvICovCiAKLQltZnNwcglyMTMsU1BSTl9TUFJHMworCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQQogCiAJbGQJcjQsX0NDUihyMSkKIAltdGNyCXI0CkBAIC04MjMsMzMgKzg2OCwyNCBAQAogCSAqIG9mIGFsbCByZWdpc3RlcnMgdGhhdCBpdCBzYXZlcy4gIFdlIHRoZXJlZm9yZSBzYXZlIHRob3NlIHJlZ2lzdGVycwogCSAqIFBST00gbWlnaHQgdG91Y2ggdG8gdGhlIHN0YWNrLiAgKHIwLCByMy1yMTMgYXJlIGNhbGxlciBzYXZlZCkKICAgIAkgKi8KLQlTQVZFXzhHUFJTKDIsIHIxKQorCVNBVkVfR1BSKDIsIHIxKQogCVNBVkVfR1BSKDEzLCByMSkKIAlTQVZFXzhHUFJTKDE0LCByMSkKIAlTQVZFXzEwR1BSUygyMiwgcjEpCi0JbWZjcglyNAotCXN0ZAlyNCxfQ0NSKHIxKQotCW1mY3RyCXI1Ci0Jc3RkCXI1LF9DVFIocjEpCi0JbWZzcHIJcjYsU1BSTl9YRVIKLQlzdGQJcjYsX1hFUihyMSkKLQltZmRhcglyNwotCXN0ZAlyNyxfREFSKHIxKQotCW1mZHNpc3IJcjgKLQlzdGQJcjgsX0RTSVNSKHIxKQotCW1mc3JyMAlyOQotCXN0ZAlyOSxfU1JSMChyMSkKLQltZnNycjEJcjEwCi0Jc3RkCXIxMCxfU1JSMShyMSkKKwltZmNyCXIxMAogCW1mbXNyCXIxMQorCXN0ZAlyMTAsX0NDUihyMSkKIAlzdGQJcjExLF9NU1IocjEpCiAKIAkvKiBHZXQgdGhlIFBST00gZW50cnlwb2ludCAqLwotCWxkCXIwLEdQUjQocjEpCi0JbXRscglyMAorCW10bHIJcjQKIAogCS8qIFN3aXRjaCBNU1IgdG8gMzIgYml0cyBtb2RlCiAJICovCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKKwlybHdpbm0JcjExLHIxMSwwLDEsMzEKKwltdG1zcglyMTEKKyNlbHNlIC8qIENPTkZJR19QUENfQk9PSzNFICovCiAgICAgICAgIG1mbXNyICAgcjExCiAgICAgICAgIGxpICAgICAgcjEyLDEKICAgICAgICAgcmxkaWNyICByMTIscjEyLE1TUl9TRl9MRywoNjMtTVNSX1NGX0xHKQpAQCAtODU4LDEwICs4OTQsMTAgQEAKICAgICAgICAgcmxkaWNyICByMTIscjEyLE1TUl9JU0ZfTEcsKDYzLU1TUl9JU0ZfTEcpCiAgICAgICAgIGFuZGMgICAgcjExLHIxMSxyMTIKICAgICAgICAgbXRtc3JkICByMTEKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0JPT0szRSAqLwogICAgICAgICBpc3luYwogCi0JLyogUmVzdG9yZSBhcmd1bWVudHMgJiBlbnRlciBQUk9NIGhlcmUuLi4gKi8KLQlsZAlyMyxHUFIzKHIxKQorCS8qIEVudGVyIFBST00gaGVyZS4uLiAqLwogCWJscmwKIAogCS8qIEp1c3QgbWFrZSBzdXJlIHRoYXQgcjEgdG9wIDMyIGJpdHMgZGlkbid0IGdldApAQCAtODcxLDcgKzkwNyw3IEBACiAKIAkvKiBSZXN0b3JlIHRoZSBNU1IgKGJhY2sgdG8gNjQgYml0cykgKi8KIAlsZAlyMCxfTVNSKHIxKQotCW10bXNyZAlyMAorCU1UTVNSRChyMCkKICAgICAgICAgaXN5bmMKIAogCS8qIFJlc3RvcmUgb3RoZXIgcmVnaXN0ZXJzICovCkBAIC04ODEsMTggKzkxNyw2IEBACiAJUkVTVF8xMEdQUlMoMjIsIHIxKQogCWxkCXI0LF9DQ1IocjEpCiAJbXRjcglyNAotCWxkCXI1LF9DVFIocjEpCi0JbXRjdHIJcjUKLQlsZAlyNixfWEVSKHIxKQotCW10c3ByCVNQUk5fWEVSLHI2Ci0JbGQJcjcsX0RBUihyMSkKLQltdGRhcglyNwotCWxkCXI4LF9EU0lTUihyMSkKLQltdGRzaXNyCXI4Ci0JbGQJcjksX1NSUjAocjEpCi0JbXRzcnIwCXI5Ci0JbGQJcjEwLF9TUlIxKHIxKQotCW10c3JyMQlyMTAKIAkKICAgICAgICAgYWRkaQlyMSxyMSxQUk9NX0ZSQU1FX1NJWkUKIAlsZAlyMCwxNihyMSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDQ4Zjk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0ZS5TCkBAIC0wLDAgKzEsMTAwMSBAQAorLyoKKyAqICBCb290IGNvZGUgYW5kIGV4Y2VwdGlvbiB2ZWN0b3JzIGZvciBCb29rM0UgcHJvY2Vzc29ycworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQmVuLiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLCBJQk0gQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9leGNlcHRpb24tNjRlLmg+CisjaW5jbHVkZSA8YXNtL2J1Zy5oPgorI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vcHBjLW9wY29kZS5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKworLyogWFhYIFRoaXMgd2lsbCB1bHRpbWF0ZWx5IGFkZCBzcGFjZSBmb3IgYSBzcGVjaWFsIGV4Y2VwdGlvbiBzYXZlCisgKiAgICAgc3RydWN0dXJlIHVzZWQgdG8gc2F2ZSB0aGluZ3MgbGlrZSBTUlIwL1NSUjEsIFNQUkdzLCBNQVMsIGV0Yy4uLgorICogICAgIHdoZW4gdGFraW5nIHNwZWNpYWwgaW50ZXJydXB0cy4gRm9yIG5vdyB3ZSBkb24ndCBzdXBwb3J0IHRoYXQsCisgKiAgICAgc3BlY2lhbCBpbnRlcnJ1cHRzIGZyb20gd2l0aGluIGEgbm9uLXN0YW5kYXJkIGxldmVsIHdpbGwgcHJvYmFibHkKKyAqICAgICBibG93IHlvdSB1cAorICovCisjZGVmaW5lCVNQRUNJQUxfRVhDX0ZSQU1FX1NJWkUJSU5UX0ZSQU1FX1NJWkUKKworLyogRXhjZXB0aW9uIHByb2xvZyBjb2RlIGZvciBhbGwgZXhjZXB0aW9ucyAqLworI2RlZmluZSBFWENFUFRJT05fUFJPTE9HKG4sIHR5cGUsIGFkZGl0aW9uKQkJCQkgICAgXAorCW10c3ByCVNQUk5fU1BSR18jI3R5cGUjI19TQ1JBVENILHIxMzsJLyogZ2V0IHNwYXJlIHJlZ2lzdGVycyAqLyAgIFwKKwltZnNwcglyMTMsU1BSTl9TUFJHX1BBQ0E7CS8qIGdldCBQQUNBICovCQkJICAgIFwKKwlzdGQJcjEwLFBBQ0FfRVgjI3R5cGUrRVhfUjEwKHIxMyk7CQkJCSAgICBcCisJc3RkCXIxMSxQQUNBX0VYIyN0eXBlK0VYX1IxMShyMTMpOwkJCQkgICAgXAorCW1mY3IJcjEwOwkJCS8qIHNhdmUgQ1IgKi8JCQkgICAgXAorCWFkZGl0aW9uOwkJCS8qIGFkZGl0aW9uYWwgY29kZSBmb3IgdGhhdCBleGMuICovIFwKKwlzdGQJcjEsUEFDQV9FWCMjdHlwZStFWF9SMShyMTMpOyAvKiBzYXZlIG9sZCByMSBpbiB0aGUgUEFDQSAqLyAgXAorCXN0dwlyMTAsUEFDQV9FWCMjdHlwZStFWF9DUihyMTMpOyAvKiBzYXZlIG9sZCBDUiBpbiB0aGUgUEFDQSAqLyBcCisJbWZzcHIJcjExLFNQUk5fIyN0eXBlIyNfU1JSMTsvKiB3aGF0IGFyZSB3ZSBjb21pbmcgZnJvbSAqLwkgICAgXAorCXR5cGUjI19TRVRfS1NUQUNLOwkJLyogZ2V0IHNwZWNpYWwgc3RhY2sgaWYgbmVjZXNzYXJ5ICovXAorCWFuZGkuCXIxMCxyMTEsTVNSX1BSOwkJLyogc2F2ZSBzdGFjayBwb2ludGVyICovCSAgICBcCisJYmVxCTFmOwkJCS8qIGJyYW5jaCBhcm91bmQgaWYgc3VwZXJ2aXNvciAqLyAgIFwKKwlsZAlyMSxQQUNBS1NBVkUocjEzKTsJLyogZ2V0IGtlcm5lbCBzdGFjayBjb21pbmcgZnJvbSB1c3IgKi9cCisxOgljbXBkaQljcjEscjEsMDsJCS8qIGNoZWNrIGlmIFNQIG1ha2VzIHNlbnNlICovCSAgICBcCisJYmdlLQljcjEsZXhjXyMjbiMjX2JhZF9zdGFjazsvKiBiYWQgc3RhY2sgKFRPRE86IG91dCBvZiBsaW5lKSAqLyBcCisJbWZzcHIJcjEwLFNQUk5fIyN0eXBlIyNfU1JSMDsJLyogcmVhZCBTUlIwIGJlZm9yZSB0b3VjaGluZyBzdGFjayAqLworCisvKiBFeGNlcHRpb24gdHlwZS1zcGVjaWZpYyBtYWNyb3MgKi8KKyNkZWZpbmUJR0VOX1NFVF9LU1RBQ0sJCQkJCQkJICAgIFwKKwlzdWJpCXIxLHIxLElOVF9GUkFNRV9TSVpFOwkvKiBhbGxvYyBmcmFtZSBvbiBrZXJuZWwgc3RhY2sgKi8KKyNkZWZpbmUgU1BSTl9HRU5fU1JSMAlTUFJOX1NSUjAKKyNkZWZpbmUgU1BSTl9HRU5fU1JSMQlTUFJOX1NSUjEKKworI2RlZmluZSBDUklUX1NFVF9LU1RBQ0sJCQkJCQkgICAgICAgICAgICBcCisJbGQJcjEsUEFDQV9DUklUX1NUQUNLKHIxMyk7CQkJCSAgICBcCisJc3ViaQlyMSxyMSxTUEVDSUFMX0VYQ19GUkFNRV9TSVpFOworI2RlZmluZSBTUFJOX0NSSVRfU1JSMAlTUFJOX0NTUlIwCisjZGVmaW5lIFNQUk5fQ1JJVF9TUlIxCVNQUk5fQ1NSUjEKKworI2RlZmluZSBEQkdfU0VUX0tTVEFDSwkJCQkJCSAgICAgICAgICAgIFwKKwlsZAlyMSxQQUNBX0RCR19TVEFDSyhyMTMpOwkJCQkJICAgIFwKKwlzdWJpCXIxLHIxLFNQRUNJQUxfRVhDX0ZSQU1FX1NJWkU7CisjZGVmaW5lIFNQUk5fREJHX1NSUjAJU1BSTl9EU1JSMAorI2RlZmluZSBTUFJOX0RCR19TUlIxCVNQUk5fRFNSUjEKKworI2RlZmluZSBNQ19TRVRfS1NUQUNLCQkJCQkJICAgICAgICAgICAgXAorCWxkCXIxLFBBQ0FfTUNfU1RBQ0socjEzKTsJCQkJCSAgICBcCisJc3ViaQlyMSxyMSxTUEVDSUFMX0VYQ19GUkFNRV9TSVpFOworI2RlZmluZSBTUFJOX01DX1NSUjAJU1BSTl9NQ1NSUjAKKyNkZWZpbmUgU1BSTl9NQ19TUlIxCVNQUk5fTUNTUlIxCisKKyNkZWZpbmUgTk9STUFMX0VYQ0VQVElPTl9QUk9MT0cobiwgYWRkaXRpb24pCQkJCSAgICBcCisJRVhDRVBUSU9OX1BST0xPRyhuLCBHRU4sIGFkZGl0aW9uIyNfR0VOKQorCisjZGVmaW5lIENSSVRfRVhDRVBUSU9OX1BST0xPRyhuLCBhZGRpdGlvbikJCQkJICAgIFwKKwlFWENFUFRJT05fUFJPTE9HKG4sIENSSVQsIGFkZGl0aW9uIyNfQ1JJVCkKKworI2RlZmluZSBEQkdfRVhDRVBUSU9OX1BST0xPRyhuLCBhZGRpdGlvbikJCQkJICAgIFwKKwlFWENFUFRJT05fUFJPTE9HKG4sIERCRywgYWRkaXRpb24jI19EQkcpCisKKyNkZWZpbmUgTUNfRVhDRVBUSU9OX1BST0xPRyhuLCBhZGRpdGlvbikJCQkJICAgIFwKKwlFWENFUFRJT05fUFJPTE9HKG4sIE1DLCBhZGRpdGlvbiMjX01DKQorCisKKy8qIFZhcmlhbnRzIG9mIHRoZSAiYWRkaXRpb24iIGFyZ3VtZW50IGZvciB0aGUgcHJvbG9nCisgKi8KKyNkZWZpbmUgUFJPTE9HX0FERElUSU9OX05PTkVfR0VOCisjZGVmaW5lIFBST0xPR19BRERJVElPTl9OT05FX0NSSVQKKyNkZWZpbmUgUFJPTE9HX0FERElUSU9OX05PTkVfREJHCisjZGVmaW5lIFBST0xPR19BRERJVElPTl9OT05FX01DCisKKyNkZWZpbmUgUFJPTE9HX0FERElUSU9OX01BU0tBQkxFX0dFTgkJCQkJICAgIFwKKwlsYnoJcjExLFBBQ0FTT0ZUSVJRRU4ocjEzKTsgLyogYXJlIGlycXMgc29mdC1kaXNhYmxlZCA/ICovCSAgICBcCisJY21wd2kJY3IwLHIxMSwwOwkJLyogeWVzIC0+IGdvIG91dCBvZiBsaW5lICovCSAgICBcCisJYmVxCW1hc2tlZF9pbnRlcnJ1cHRfYm9vazNlOworCisjZGVmaW5lIFBST0xPR19BRERJVElPTl8yUkVHU19HRU4JCQkJCSAgICBcCisJc3RkCXIxNCxQQUNBX0VYR0VOK0VYX1IxNChyMTMpOwkJCQkgICAgXAorCXN0ZAlyMTUsUEFDQV9FWEdFTitFWF9SMTUocjEzKQorCisjZGVmaW5lIFBST0xPR19BRERJVElPTl8xUkVHX0dFTgkJCQkJICAgIFwKKwlzdGQJcjE0LFBBQ0FfRVhHRU4rRVhfUjE0KHIxMyk7CisKKyNkZWZpbmUgUFJPTE9HX0FERElUSU9OXzJSRUdTX0NSSVQJCQkJCSAgICBcCisJc3RkCXIxNCxQQUNBX0VYQ1JJVCtFWF9SMTQocjEzKTsJCQkJICAgIFwKKwlzdGQJcjE1LFBBQ0FfRVhDUklUK0VYX1IxNShyMTMpCisKKyNkZWZpbmUgUFJPTE9HX0FERElUSU9OXzJSRUdTX0RCRwkJCQkJICAgIFwKKwlzdGQJcjE0LFBBQ0FfRVhEQkcrRVhfUjE0KHIxMyk7CQkJCSAgICBcCisJc3RkCXIxNSxQQUNBX0VYREJHK0VYX1IxNShyMTMpCisKKyNkZWZpbmUgUFJPTE9HX0FERElUSU9OXzJSRUdTX01DCQkJCQkgICAgXAorCXN0ZAlyMTQsUEFDQV9FWE1DK0VYX1IxNChyMTMpOwkJCQkgICAgXAorCXN0ZAlyMTUsUEFDQV9FWE1DK0VYX1IxNShyMTMpCisKKy8qIENvcmUgZXhjZXB0aW9uIGNvZGUgZm9yIGFsbCBleGNlcHRpb25zIGV4Y2VwdCBUTEIgbWlzc2VzLgorICogWFhYOiBOZWVkcyB0byBtYWtlIFNQUk5fU1BSR19HRU4gZGVwZW5kIG9uIGV4Y2VwdGlvbiB0eXBlCisgKi8KKyNkZWZpbmUgRVhDRVBUSU9OX0NPTU1PTihuLCBleGNmLCBpbnRzKQkJCQkJICAgIFwKKwlzdGQJcjAsR1BSMChyMSk7CQkvKiBzYXZlIHIwIGluIHN0YWNrZnJhbWUgKi8JICAgIFwKKwlzdGQJcjIsR1BSMihyMSk7CQkvKiBzYXZlIHIyIGluIHN0YWNrZnJhbWUgKi8JICAgIFwKKwlTQVZFXzRHUFJTKDMsIHIxKTsJCS8qIHNhdmUgcjMgLSByNiBpbiBzdGFja2ZyYW1lICovICAgIFwKKwlTQVZFXzJHUFJTKDcsIHIxKTsJCS8qIHNhdmUgcjcsIHI4IGluIHN0YWNrZnJhbWUgKi8JICAgIFwKKwlzdGQJcjksR1BSOShyMSk7CQkvKiBzYXZlIHI5IGluIHN0YWNrZnJhbWUgKi8JICAgIFwKKwlzdGQJcjEwLF9OSVAocjEpOwkJLyogc2F2ZSBTUlIwIHRvIHN0YWNrZnJhbWUgKi8JICAgIFwKKwlzdGQJcjExLF9NU1IocjEpOwkJLyogc2F2ZSBTUlIxIHRvIHN0YWNrZnJhbWUgKi8JICAgIFwKKwlBQ0NPVU5UX0NQVV9VU0VSX0VOVFJZKHIxMCxyMTEpOy8qIGFjY291bnRpbmcgKHVzZXMgY3IwK2VxKSAqLwkgICAgXAorCWxkCXIzLGV4Y2YrRVhfUjEwKHIxMyk7CS8qIGdldCBiYWNrIHIxMCAqLwkJICAgIFwKKwlsZAlyNCxleGNmK0VYX1IxMShyMTMpOwkvKiBnZXQgYmFjayByMTEgKi8JCSAgICBcCisJbWZzcHIJcjUsU1BSTl9TUFJHX0dFTl9TQ1JBVENIOy8qIGdldCBiYWNrIHIxMyAqLwkJICAgIFwKKwlzdGQJcjEyLEdQUjEyKHIxKTsJCS8qIHNhdmUgcjEyIGluIHN0YWNrZnJhbWUgKi8JICAgIFwKKwlsZAlyMixQQUNBVE9DKHIxMyk7CS8qIGdldCBrZXJuZWwgVE9DIGludG8gcjIgKi8JICAgIFwKKwltZmxyCXI2OwkJCS8qIHNhdmUgTFIgaW4gc3RhY2tmcmFtZSAqLwkgICAgXAorCW1mY3RyCXI3OwkJCS8qIHNhdmUgQ1RSIGluIHN0YWNrZnJhbWUgKi8JICAgIFwKKwltZnNwcglyOCxTUFJOX1hFUjsJCS8qIHNhdmUgWEVSIGluIHN0YWNrZnJhbWUgKi8JICAgIFwKKwlsZAlyOSxleGNmK0VYX1IxKHIxMyk7CS8qIGxvYWQgb3JpZyByMSBiYWNrIGZyb20gUEFDQSAqLyAgIFwKKwlsd3oJcjEwLGV4Y2YrRVhfQ1IocjEzKTsJLyogbG9hZCBvcmlnIENSIGJhY2sgZnJvbSBQQUNBCSovICBcCisJbGJ6CXIxMSxQQUNBU09GVElSUUVOKHIxMyk7CS8qIGdldCBjdXJyZW50IElSUSBzb2Z0ZSAqLwkgICAgXAorCWxkCXIxMixleGNlcHRpb25fbWFya2VyQHRvYyhyMik7CQkJCSAgICBcCisJbGkJcjAsMDsJCQkJCQkJICAgIFwKKwlzdGQJcjMsR1BSMTAocjEpOwkJLyogc2F2ZSByMTAgdG8gc3RhY2tmcmFtZSAqLwkgICAgXAorCXN0ZAlyNCxHUFIxMShyMSk7CQkvKiBzYXZlIHIxMSB0byBzdGFja2ZyYW1lICovCSAgICBcCisJc3RkCXI1LEdQUjEzKHIxKTsJCS8qIHNhdmUgaXQgdG8gc3RhY2tmcmFtZSAqLwkgICAgXAorCXN0ZAlyNixfTElOSyhyMSk7CQkJCQkJICAgIFwKKwlzdGQJcjcsX0NUUihyMSk7CQkJCQkJICAgIFwKKwlzdGQJcjgsX1hFUihyMSk7CQkJCQkJICAgIFwKKwlsaQlyMywobikrMTsJCS8qIGluZGljYXRlIHBhcnRpYWwgcmVncyBpbiB0cmFwICovIFwKKwlzdGQJcjksMChyMSk7CQkvKiBzdG9yZSBzdGFjayBmcmFtZSBiYWNrIGxpbmsgKi8gICBcCisJc3RkCXIxMCxfQ0NSKHIxKTsJCS8qIHN0b3JlIG9yaWcgQ1IgaW4gc3RhY2tmcmFtZSAqLyAgIFwKKwlzdGQJcjksR1BSMShyMSk7CQkvKiBzdG9yZSBzdGFjayBmcmFtZSBiYWNrIGxpbmsgKi8gICBcCisJc3RkCXIxMSxTT0ZURShyMSk7CQkvKiBhbmQgc2F2ZSBpdCB0byBzdGFja2ZyYW1lICovICAgICBcCisJc3RkCXIxMixTVEFDS19GUkFNRV9PVkVSSEVBRC0xNihyMSk7IC8qIG1hcmsgdGhlIGZyYW1lICovCSAgICBcCisJc3RkCXIzLF9UUkFQKHIxKTsJCS8qIHNldCB0cmFwIG51bWJlcgkJKi8gIFwKKwlzdGQJcjAsUkVTVUxUKHIxKTsJCS8qIGNsZWFyIHJlZ3MtPnJlc3VsdCAqLwkgICAgXAorCWludHM7CisKKy8qIFZhcmlhbnRzIGZvciB0aGUgImludHMiIGFyZ3VtZW50ICovCisjZGVmaW5lIElOVFNfS0VFUAorI2RlZmluZSBJTlRTX0RJU0FCTEVfU09GVAkJCQkJCSAgICBcCisJc3RiCXIwLFBBQ0FTT0ZUSVJRRU4ocjEzKTsJLyogbWFyayBpbnRlcnJ1cHRzIHNvZnQtZGlzYWJsZWQgKi8gXAorCVRSQUNFX0RJU0FCTEVfSU5UUzsKKyNkZWZpbmUgSU5UU19ESVNBQkxFX0hBUkQJCQkJCQkgICAgXAorCXN0YglyMCxQQUNBSEFSRElSUUVOKHIxMyk7IC8qIGFuZCBoYXJkIGRpc2FibGVkICovCisjZGVmaW5lIElOVFNfRElTQUJMRV9BTEwJCQkJCQkgICAgXAorCUlOVFNfRElTQUJMRV9TT0ZUCQkJCQkJICAgIFwKKwlJTlRTX0RJU0FCTEVfSEFSRAorCisvKiBUaGlzIGlzIGNhbGxlZCBieSBleGNlcHRpb25zIHRoYXQgdXNlZCBJTlRTX0tFRVAgKHRoYXQgaXMgZGlkIG5vdCBjbGVhcgorICogbmVpdGhlciBzb2Z0IG5vciBoYXJkIElSUSBpbmRpY2F0b3JzIGluIHRoZSBQQUNBLiBUaGlzIHdpbGwgcmVzdG9yZSBNU1I6RUUKKyAqIHRvIGl0J3MgcHJldmlvdXMgdmFsdWUKKyAqCisgKiBYWFggSW4gdGhlIGxvbmcgcnVuLCB3ZSBtYXkgd2FudCB0byBvcGVuLWNvZGUgaXQgaW4gb3JkZXIgdG8gc2VwYXJhdGUgdGhlCisgKiAgICAgbG9hZCBmcm9tIHRoZSB3cnRlZSwgdGh1cyBsaW1pdGluZyB0aGUgbGF0ZW5jeSBjYXVzZWQgYnkgdGhlIGRlcGVuZGVuY3kKKyAqICAgICBidXQgYXQgdGhpcyBwb2ludCwgSSdsbCBmYXZvciBjb2RlIGNsYXJpdHkgdW50aWwgd2UgaGF2ZSBhIG5lYXIgdG8gZmluYWwKKyAqICAgICBpbXBsZW1lbnRhdGlvbgorICovCisjZGVmaW5lIElOVFNfUkVTVE9SRV9IQVJECQkJCQkJICAgIFwKKwlsZAlyMTEsX01TUihyMSk7CQkJCQkJICAgIFwKKwl3cnRlZQlyMTE7CisKKy8qIFhYWCBGSVhNRTogUmVzdG9yZSByMTQvcjE1IHdoZW4gbmVjZXNzYXJ5ICovCisjZGVmaW5lIEJBRF9TVEFDS19UUkFNUE9MSU5FKG4pCQkJCQkJICAgIFwKK2V4Y18jI24jI19iYWRfc3RhY2s6CQkJCQkJCSAgICBcCisJbGkJcjEsKG4pOwkJCS8qIGdldCBleGNlcHRpb24gbnVtYmVyICovCSAgICBcCisJc3RoCXIxLFBBQ0FfVFJBUF9TQVZFKHIxMyk7CS8qIHN0b3JlIHRyYXAgKi8JCSAgICBcCisJYgliYWRfc3RhY2tfYm9vazNlOwkvKiBiYWQgc3RhY2sgZXJyb3IgKi8KKworI2RlZmluZQlFWENFUFRJT05fU1RVQihsb2MsIGxhYmVsKQkJCQkJXAorCS4gPSBpbnRlcnJ1cHRfYmFzZV9ib29rM2UgKyBsb2M7CQkJCVwKKwlub3A7CS8qIFRvIG1ha2UgZGVidWcgaW50ZXJydXB0cyBoYXBweSAqLwkJCVwKKwliCWV4Y18jI2xhYmVsIyNfYm9vazNlOworCisjZGVmaW5lIEFDS19OT05FKHIpCisjZGVmaW5lIEFDS19ERUMocikJCQkJCQkJXAorCWxpcwlyLFRTUl9ESVNAaDsJCQkJCQlcCisJbXRzcHIJU1BSTl9UU1IscgorI2RlZmluZSBBQ0tfRklUKHIpCQkJCQkJCVwKKwlsaXMJcixUU1JfRklTQGg7CQkJCQkJXAorCW10c3ByCVNQUk5fVFNSLHIKKworI2RlZmluZSBNQVNLQUJMRV9FWENFUFRJT04odHJhcG51bSwgbGFiZWwsIGhkbHIsIGFjaykJCQlcCisJU1RBUlRfRVhDRVBUSU9OKGxhYmVsKTsJCQkJCQlcCisJTk9STUFMX0VYQ0VQVElPTl9QUk9MT0codHJhcG51bSwgUFJPTE9HX0FERElUSU9OX01BU0tBQkxFKQlcCisJRVhDRVBUSU9OX0NPTU1PTih0cmFwbnVtLCBQQUNBX0VYR0VOLCBJTlRTX0RJU0FCTEVfQUxMKQkJXAorCWFjayhyOCk7CQkJCQkJCVwKKwlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFEOwkJCQlcCisJYmwJaGRscjsJCQkJCQkJXAorCWIJLnJldF9mcm9tX2V4Y2VwdF9saXRlOworCisvKiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gbWFyayBleGNlcHRpb24gZnJhbWVzIG9uIHRoZSBzdGFjay4gKi8KKwkuc2VjdGlvbgkiLnRvYyIsImF3IgorZXhjZXB0aW9uX21hcmtlcjoKKwkudGMJSURfRVhDX01BUktFUltUQ10sU1RBQ0tfRlJBTUVfUkVHU19NQVJLRVIKKworCisvKgorICogQW5kIGhlcmUgd2UgaGF2ZSB0aGUgZXhjZXB0aW9uIHZlY3RvcnMgIQorICovCisKKwkudGV4dAorCS5iYWxpZ24JMHgxMDAwCisJLmdsb2JsIGludGVycnVwdF9iYXNlX2Jvb2szZQoraW50ZXJydXB0X2Jhc2VfYm9vazNlOgkJCQkJLyogZmFrZSB0cmFwICovCisJLyogTm90ZTogSWYgcmVhbCBkZWJ1ZyBleGNlcHRpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIEhXLCB0aGUgdmVjdG9yCisJICogYmVsb3cgd2lsbCBoYXZlIHRvIGJlIHBhdGNoZWQgdXAgdG8gcG9pbnQgdG8gYW4gYXBwcm9wcmlhdGUgaGFuZGxlcgorCSAqLworCUVYQ0VQVElPTl9TVFVCKDB4MDAwLCBtYWNoaW5lX2NoZWNrKQkJLyogMHgwMjAwICovCisJRVhDRVBUSU9OX1NUVUIoMHgwMjAsIGNyaXRpY2FsX2lucHV0KQkJLyogMHgwNTgwICovCisJRVhDRVBUSU9OX1NUVUIoMHgwNDAsIGRlYnVnX2NyaXQpCQkvKiAweDBkMDAgKi8KKwlFWENFUFRJT05fU1RVQigweDA2MCwgZGF0YV9zdG9yYWdlKQkJLyogMHgwMzAwICovCisJRVhDRVBUSU9OX1NUVUIoMHgwODAsIGluc3RydWN0aW9uX3N0b3JhZ2UpCS8qIDB4MDQwMCAqLworCUVYQ0VQVElPTl9TVFVCKDB4MGEwLCBleHRlcm5hbF9pbnB1dCkJCS8qIDB4MDUwMCAqLworCUVYQ0VQVElPTl9TVFVCKDB4MGMwLCBhbGlnbm1lbnQpCQkvKiAweDA2MDAgKi8KKwlFWENFUFRJT05fU1RVQigweDBlMCwgcHJvZ3JhbSkJCQkvKiAweDA3MDAgKi8KKwlFWENFUFRJT05fU1RVQigweDEwMCwgZnBfdW5hdmFpbGFibGUpCQkvKiAweDA4MDAgKi8KKwlFWENFUFRJT05fU1RVQigweDEyMCwgc3lzdGVtX2NhbGwpCQkvKiAweDBjMDAgKi8KKwlFWENFUFRJT05fU1RVQigweDE0MCwgYXBfdW5hdmFpbGFibGUpCQkvKiAweDBmMjAgKi8KKwlFWENFUFRJT05fU1RVQigweDE2MCwgZGVjcmVtZW50ZXIpCQkvKiAweDA5MDAgKi8KKwlFWENFUFRJT05fU1RVQigweDE4MCwgZml4ZWRfaW50ZXJ2YWwpCQkvKiAweDA5ODAgKi8KKwlFWENFUFRJT05fU1RVQigweDFhMCwgd2F0Y2hkb2cpCQkJLyogMHgwOWYwICovCisJRVhDRVBUSU9OX1NUVUIoMHgxYzAsIGRhdGFfdGxiX21pc3MpCisJRVhDRVBUSU9OX1NUVUIoMHgxZTAsIGluc3RydWN0aW9uX3RsYl9taXNzKQorCisjaWYgMAorCUVYQ0VQVElPTl9TVFVCKDB4MjgwLCBwcm9jZXNzb3JfZG9vcmJlbGwpCisJRVhDRVBUSU9OX1NUVUIoMHgyMjAsIHByb2Nlc3Nvcl9kb29yYmVsbF9jcml0KQorI2VuZGlmCisJLmdsb2JsIGludGVycnVwdF9lbmRfYm9vazNlCitpbnRlcnJ1cHRfZW5kX2Jvb2szZToKKworLyogQ3JpdGljYWwgSW5wdXQgSW50ZXJydXB0ICovCisJU1RBUlRfRVhDRVBUSU9OKGNyaXRpY2FsX2lucHV0KTsKKwlDUklUX0VYQ0VQVElPTl9QUk9MT0coMHgxMDAsIFBST0xPR19BRERJVElPTl9OT05FKQorLy8JRVhDRVBUSU9OX0NPTU1PTigweDEwMCwgUEFDQV9FWENSSVQsIElOVFNfRElTQUJMRV9BTEwpCisvLwlibAlzcGVjaWFsX3JlZ19zYXZlX2NyaXQKKy8vCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKy8vCWJsCS5jcml0aWNhbF9leGNlcHRpb24KKy8vCWIJcmV0X2Zyb21fY3JpdF9leGNlcHQKKwliCS4KKworLyogTWFjaGluZSBDaGVjayBJbnRlcnJ1cHQgKi8KKwlTVEFSVF9FWENFUFRJT04obWFjaGluZV9jaGVjayk7CisJQ1JJVF9FWENFUFRJT05fUFJPTE9HKDB4MjAwLCBQUk9MT0dfQURESVRJT05fTk9ORSkKKy8vCUVYQ0VQVElPTl9DT01NT04oMHgyMDAsIFBBQ0FfRVhNQywgSU5UU19ESVNBQkxFX0FMTCkKKy8vCWJsCXNwZWNpYWxfcmVnX3NhdmVfbWMKKy8vCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKy8vCWJsCS5tYWNoaW5lX2NoZWNrX2V4Y2VwdGlvbgorLy8JYglyZXRfZnJvbV9tY19leGNlcHQKKwliCS4KKworLyogRGF0YSBTdG9yYWdlIEludGVycnVwdCAqLworCVNUQVJUX0VYQ0VQVElPTihkYXRhX3N0b3JhZ2UpCisJTk9STUFMX0VYQ0VQVElPTl9QUk9MT0coMHgzMDAsIFBST0xPR19BRERJVElPTl8yUkVHUykKKwltZnNwcglyMTQsU1BSTl9ERUFSCisJbWZzcHIJcjE1LFNQUk5fRVNSCisJRVhDRVBUSU9OX0NPTU1PTigweDMwMCwgUEFDQV9FWEdFTiwgSU5UU19LRUVQKQorCWIJc3RvcmFnZV9mYXVsdF9jb21tb24KKworLyogSW5zdHJ1Y3Rpb24gU3RvcmFnZSBJbnRlcnJ1cHQgKi8KKwlTVEFSVF9FWENFUFRJT04oaW5zdHJ1Y3Rpb25fc3RvcmFnZSk7CisJTk9STUFMX0VYQ0VQVElPTl9QUk9MT0coMHg0MDAsIFBST0xPR19BRERJVElPTl8yUkVHUykKKwlsaQlyMTUsMAorCW1yCXIxNCxyMTAKKwlFWENFUFRJT05fQ09NTU9OKDB4NDAwLCBQQUNBX0VYR0VOLCBJTlRTX0tFRVApCisJYglzdG9yYWdlX2ZhdWx0X2NvbW1vbgorCisvKiBFeHRlcm5hbCBJbnB1dCBJbnRlcnJ1cHQgKi8KKwlNQVNLQUJMRV9FWENFUFRJT04oMHg1MDAsIGV4dGVybmFsX2lucHV0LCAuZG9fSVJRLCBBQ0tfTk9ORSkKKworLyogQWxpZ25tZW50ICovCisJU1RBUlRfRVhDRVBUSU9OKGFsaWdubWVudCk7CisJTk9STUFMX0VYQ0VQVElPTl9QUk9MT0coMHg2MDAsIFBST0xPR19BRERJVElPTl8yUkVHUykKKwltZnNwcglyMTQsU1BSTl9ERUFSCisJbWZzcHIJcjE1LFNQUk5fRVNSCisJRVhDRVBUSU9OX0NPTU1PTigweDYwMCwgUEFDQV9FWEdFTiwgSU5UU19LRUVQKQorCWIJYWxpZ25tZW50X21vcmUJLyogbm8gcm9vbSwgZ28gb3V0IG9mIGxpbmUgKi8KKworLyogUHJvZ3JhbSBJbnRlcnJ1cHQgKi8KKwlTVEFSVF9FWENFUFRJT04ocHJvZ3JhbSk7CisJTk9STUFMX0VYQ0VQVElPTl9QUk9MT0coMHg3MDAsIFBST0xPR19BRERJVElPTl8xUkVHKQorCW1mc3ByCXIxNCxTUFJOX0VTUgorCUVYQ0VQVElPTl9DT01NT04oMHg3MDAsIFBBQ0FfRVhHRU4sIElOVFNfRElTQUJMRV9TT0ZUKQorCXN0ZAlyMTQsX0RTSVNSKHIxKQorCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKwlsZAlyMTQsUEFDQV9FWEdFTitFWF9SMTQocjEzKQorCWJsCS5zYXZlX252Z3BycworCUlOVFNfUkVTVE9SRV9IQVJECisJYmwJLnByb2dyYW1fY2hlY2tfZXhjZXB0aW9uCisJYgkucmV0X2Zyb21fZXhjZXB0CisKKy8qIEZsb2F0aW5nIFBvaW50IFVuYXZhaWxhYmxlIEludGVycnVwdCAqLworCVNUQVJUX0VYQ0VQVElPTihmcF91bmF2YWlsYWJsZSk7CisJTk9STUFMX0VYQ0VQVElPTl9QUk9MT0coMHg4MDAsIFBST0xPR19BRERJVElPTl9OT05FKQorCS8qIHdlIGNhbiBwcm9iYWJseSBkbyBhIHNob3J0ZXIgZXhjZXB0aW9uIGVudHJ5IGZvciB0aGF0IG9uZS4uLiAqLworCUVYQ0VQVElPTl9DT01NT04oMHg4MDAsIFBBQ0FfRVhHRU4sIElOVFNfS0VFUCkKKwlibmUJMWYJCQkvKiBpZiBmcm9tIHVzZXIsIGp1c3QgbG9hZCBpdCB1cCAqLworCWJsCS5zYXZlX252Z3BycworCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKwlJTlRTX1JFU1RPUkVfSEFSRAorCWJsCS5rZXJuZWxfZnBfdW5hdmFpbGFibGVfZXhjZXB0aW9uCisJQlVHX09QQ09ERQorMToJbGQJcjEyLF9NU1IocjEpCisJYmwJLmxvYWRfdXBfZnB1CisJYglmYXN0X2V4Y2VwdGlvbl9yZXR1cm4KKworLyogRGVjcmVtZW50ZXIgSW50ZXJydXB0ICovCisJTUFTS0FCTEVfRVhDRVBUSU9OKDB4OTAwLCBkZWNyZW1lbnRlciwgLnRpbWVyX2ludGVycnVwdCwgQUNLX0RFQykKKworLyogRml4ZWQgSW50ZXJ2YWwgVGltZXIgSW50ZXJydXB0ICovCisJTUFTS0FCTEVfRVhDRVBUSU9OKDB4OTgwLCBmaXhlZF9pbnRlcnZhbCwgLnVua25vd25fZXhjZXB0aW9uLCBBQ0tfRklUKQorCisvKiBXYXRjaGRvZyBUaW1lciBJbnRlcnJ1cHQgKi8KKwlTVEFSVF9FWENFUFRJT04od2F0Y2hkb2cpOworCUNSSVRfRVhDRVBUSU9OX1BST0xPRygweDlmMCwgUFJPTE9HX0FERElUSU9OX05PTkUpCisvLwlFWENFUFRJT05fQ09NTU9OKDB4OWYwLCBQQUNBX0VYQ1JJVCwgSU5UU19ESVNBQkxFX0FMTCkKKy8vCWJsCXNwZWNpYWxfcmVnX3NhdmVfY3JpdAorLy8JYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorLy8JYmwJLnVua25vd25fZXhjZXB0aW9uCisvLwliCXJldF9mcm9tX2NyaXRfZXhjZXB0CisJYgkuCisKKy8qIFN5c3RlbSBDYWxsIEludGVycnVwdCAqLworCVNUQVJUX0VYQ0VQVElPTihzeXN0ZW1fY2FsbCkKKwltcglyOSxyMTMJCQkvKiBrZWVwIGEgY29weSBvZiB1c2VybGFuZCByMTMgKi8KKwltZnNwcglyMTEsU1BSTl9TUlIwCQkvKiBnZXQgcmV0dXJuIGFkZHJlc3MgKi8KKwltZnNwcglyMTIsU1BSTl9TUlIxCQkvKiBnZXQgcHJldmlvdXMgTVNSICovCisJbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBCS8qIGdldCBvdXIgUEFDQSAqLworCWIJc3lzdGVtX2NhbGxfY29tbW9uCisKKy8qIEF1eGlsbGFyeSBQcm9jZXNzb3IgVW5hdmFpbGFibGUgSW50ZXJydXB0ICovCisJU1RBUlRfRVhDRVBUSU9OKGFwX3VuYXZhaWxhYmxlKTsKKwlOT1JNQUxfRVhDRVBUSU9OX1BST0xPRygweGYyMCwgUFJPTE9HX0FERElUSU9OX05PTkUpCisJRVhDRVBUSU9OX0NPTU1PTigweGYyMCwgUEFDQV9FWEdFTiwgSU5UU19LRUVQKQorCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKwlibAkuc2F2ZV9udmdwcnMKKwlJTlRTX1JFU1RPUkVfSEFSRAorCWJsCS51bmtub3duX2V4Y2VwdGlvbgorCWIJLnJldF9mcm9tX2V4Y2VwdAorCisvKiBEZWJ1ZyBleGNlcHRpb24gYXMgYSBjcml0aWNhbCBpbnRlcnJ1cHQqLworCVNUQVJUX0VYQ0VQVElPTihkZWJ1Z19jcml0KTsKKwlDUklUX0VYQ0VQVElPTl9QUk9MT0coMHhkMDAsIFBST0xPR19BRERJVElPTl8yUkVHUykKKworCS8qCisJICogSWYgdGhlcmUgaXMgYSBzaW5nbGUgc3RlcCBvciBicmFuY2gtdGFrZW4gZXhjZXB0aW9uIGluIGFuCisJICogZXhjZXB0aW9uIGVudHJ5IHNlcXVlbmNlLCBpdCB3YXMgcHJvYmFibHkgbWVhbnQgdG8gYXBwbHkgdG8KKwkgKiB0aGUgY29kZSB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIChzaW5jZSBleGNlcHRpb24gZW50cnkKKwkgKiBkb2Vzbid0IHR1cm4gb2ZmIERFIGF1dG9tYXRpY2FsbHkpLiAgV2Ugc2ltdWxhdGUgdGhlIGVmZmVjdAorCSAqIG9mIHR1cm5pbmcgb2ZmIERFIG9uIGVudHJ5IHRvIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIGJ5IHR1cm5pbmcKKwkgKiBvZmYgREUgaW4gdGhlIENTUlIxIHZhbHVlIGFuZCBjbGVhcmluZyB0aGUgZGVidWcgc3RhdHVzLgorCSAqLworCisJbWZzcHIJcjE0LFNQUk5fREJTUgkJLyogY2hlY2sgc2luZ2xlLXN0ZXAvYnJhbmNoIHRha2VuICovCisJYW5kaXMuCXIxNSxyMTQsREJTUl9JQ0BoCisJYmVxKwkxZgorCisJTE9BRF9SRUdfSU1NRURJQVRFKHIxNCxpbnRlcnJ1cHRfYmFzZV9ib29rM2UpCisJTE9BRF9SRUdfSU1NRURJQVRFKHIxNSxpbnRlcnJ1cHRfZW5kX2Jvb2szZSkKKwljbXBsZAljcjAscjEwLHIxNAorCWNtcGxkCWNyMSxyMTAscjE1CisJYmx0KwljcjAsMWYKKwliZ2UrCWNyMSwxZgorCisJLyogaGVyZSBpdCBsb29rcyBsaWtlIHdlIGdvdCBhbiBpbmFwcHJvcHJpYXRlIGRlYnVnIGV4Y2VwdGlvbi4gKi8KKwlsaXMJcjE0LERCU1JfSUNAaAkJLyogY2xlYXIgdGhlIElDIGV2ZW50ICovCisJcmx3aW5tCXIxMSxyMTEsMCx+TVNSX0RFCS8qIGNsZWFyIERFIGluIHRoZSBDU1JSMSB2YWx1ZSAqLworCW10c3ByCVNQUk5fREJTUixyMTQKKwltdHNwcglTUFJOX0NTUlIxLHIxMQorCWx3eglyMTAsUEFDQV9FWENSSVQrRVhfQ1IocjEzKQkvKiByZXN0b3JlIHJlZ2lzdGVycyAqLworCWxkCXIxLFBBQ0FfRVhDUklUK0VYX1IxKHIxMykKKwlsZAlyMTQsUEFDQV9FWENSSVQrRVhfUjE0KHIxMykKKwlsZAlyMTUsUEFDQV9FWENSSVQrRVhfUjE1KHIxMykKKwltdGNyCXIxMAorCWxkCXIxMCxQQUNBX0VYQ1JJVCtFWF9SMTAocjEzKQkvKiByZXN0b3JlIHJlZ2lzdGVycyAqLworCWxkCXIxMSxQQUNBX0VYQ1JJVCtFWF9SMTEocjEzKQorCW1mc3ByCXIxMyxTUFJOX1NQUkdfQ1JJVF9TQ1JBVENICisJcmZjaQorCisJLyogTm9ybWFsIGRlYnVnIGV4Y2VwdGlvbiAqLworCS8qIFhYWCBXZSBvbmx5IGhhbmRsZSBjb21pbmcgZnJvbSB1c2Vyc3BhY2UgZm9yIG5vdyBzaW5jZSB3ZSBjYW4ndAorCSAqICAgICBxdWl0ZSBzYXZlIHByb3Blcmx5IGFuIGludGVycnVwdGVkIGtlcm5lbCBzdGF0ZSB5ZXQKKwkgKi8KKzE6CWFuZGkuCXIxNCxyMTEsTVNSX1BSOwkJLyogY2hlY2sgZm9yIHVzZXJzcGFjZSBhZ2FpbiAqLworCWJlcQlrZXJuZWxfZGJnX2V4YzsJCS8qIGlmIGZyb20ga2VybmVsIG1vZGUgKi8KKworCS8qIE5vdyB3ZSBtYXNoIHVwIHRoaW5ncyB0byBtYWtlIGl0IGxvb2sgbGlrZSB3ZSBhcmUgY29taW5nIG9uIGEKKwkgKiBub3JtYWwgZXhjZXB0aW9uCisJICovCisJbWZzcHIJcjE1LFNQUk5fU1BSR19DUklUX1NDUkFUQ0gKKwltdHNwcglTUFJOX1NQUkdfR0VOX1NDUkFUQ0gscjE1CisJbWZzcHIJcjE0LFNQUk5fREJTUgorCUVYQ0VQVElPTl9DT01NT04oMHhkMDAsIFBBQ0FfRVhDUklULCBJTlRTX0RJU0FCTEVfQUxMKQorCXN0ZAlyMTQsX0RTSVNSKHIxKQorCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKwltcglyNCxyMTQKKwlsZAlyMTQsUEFDQV9FWENSSVQrRVhfUjE0KHIxMykKKwlsZAlyMTUsUEFDQV9FWENSSVQrRVhfUjE1KHIxMykKKwlibAkuc2F2ZV9udmdwcnMKKwlibAkuRGVidWdFeGNlcHRpb24KKwliCS5yZXRfZnJvbV9leGNlcHQKKwora2VybmVsX2RiZ19leGM6CisJYgkuCS8qIE5ZSSAqLworCisKKy8qCisgKiBBbiBpbnRlcnJ1cHQgY2FtZSBpbiB3aGlsZSBzb2Z0LWRpc2FibGVkOyBjbGVhciBFRSBpbiBTUlIxLAorICogY2xlYXIgcGFjYS0+aGFyZF9lbmFibGVkIGFuZCByZXR1cm4uCisgKi8KK21hc2tlZF9pbnRlcnJ1cHRfYm9vazNlOgorCW10Y3IJcjEwCisJc3RiCXIxMSxQQUNBSEFSRElSUUVOKHIxMykKKwltZnNwcglyMTAsU1BSTl9TUlIxCisJcmxkaWNsCXIxMSxyMTAsNDgsMQkJLyogY2xlYXIgTVNSX0VFICovCisJcm90bGRpCXIxMCxyMTEsMTYKKwltdHNwcglTUFJOX1NSUjEscjEwCisJbGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEwKHIxMyk7CS8qIHJlc3RvcmUgcmVnaXN0ZXJzICovCisJbGQJcjExLFBBQ0FfRVhHRU4rRVhfUjExKHIxMyk7CisJbWZzcHIJcjEzLFNQUk5fU1BSR19HRU5fU0NSQVRDSDsKKwlyZmkKKwliCS4KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gMHgzMDAgYW5kIDB4NDAwIGhhbmRsZXJzIGFmdGVyIHRoZSBwcm9sb2dzIHdpdGgKKyAqIHIxNCBhbmQgcjE1IGNvbnRhaW5pbmcgdGhlIGZhdWx0IGFkZHJlc3MgYW5kIGVycm9yIGNvZGUsIHdpdGggdGhlCisgKiBvcmlnaW5hbCB2YWx1ZXMgc3Rhc2hlZCBhd2F5IGluIHRoZSBQQUNBCisgKi8KK3N0b3JhZ2VfZmF1bHRfY29tbW9uOgorCXN0ZAlyMTQsX0RBUihyMSkKKwlzdGQJcjE1LF9EU0lTUihyMSkKKwlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECisJbXIJcjQscjE0CisJbXIJcjUscjE1CisJbGQJcjE0LFBBQ0FfRVhHRU4rRVhfUjE0KHIxMykKKwlsZAlyMTUsUEFDQV9FWEdFTitFWF9SMTUocjEzKQorCUlOVFNfUkVTVE9SRV9IQVJECisJYmwJLmRvX3BhZ2VfZmF1bHQKKwljbXBkaQlyMywwCisJYm5lLQkxZgorCWIJLnJldF9mcm9tX2V4Y2VwdF9saXRlCisxOglibAkuc2F2ZV9udmdwcnMKKwltcglyNSxyMworCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKwlsZAlyNCxfREFSKHIxKQorCWJsCS5iYWRfcGFnZV9mYXVsdAorCWIJLnJldF9mcm9tX2V4Y2VwdAorCisvKgorICogQWxpZ25tZW50IGV4Y2VwdGlvbiBkb2Vzbid0IGZpdCBlbnRpcmVseSBpbiB0aGUgMHgxMDAgYnl0ZXMgc28gaXQKKyAqIGNvbnRpbnVlcyBoZXJlLgorICovCithbGlnbm1lbnRfbW9yZToKKwlzdGQJcjE0LF9EQVIocjEpCisJc3RkCXIxNSxfRFNJU1IocjEpCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorCWxkCXIxNCxQQUNBX0VYR0VOK0VYX1IxNChyMTMpCisJbGQJcjE1LFBBQ0FfRVhHRU4rRVhfUjE1KHIxMykKKwlibAkuc2F2ZV9udmdwcnMKKwlJTlRTX1JFU1RPUkVfSEFSRAorCWJsCS5hbGlnbm1lbnRfZXhjZXB0aW9uCisJYgkucmV0X2Zyb21fZXhjZXB0CisKKy8qCisgKiBXZSBicmFuY2ggaGVyZSBmcm9tIGVudHJ5XzY0LlMgZm9yIHRoZSBsYXN0IHN0YWdlIG9mIHRoZSBleGNlcHRpb24KKyAqIHJldHVybiBjb2RlIHBhdGguIE1TUjpFRSBpcyBleHBlY3RlZCB0byBiZSBvZmYgYXQgdGhhdCBwb2ludAorICovCitfR0xPQkFMKGV4Y2VwdGlvbl9yZXR1cm5fYm9vazNlKQorCWIJMWYKKworLyogVGhpcyBpcyB0aGUgcmV0dXJuIGZyb20gbG9hZF91cF9mcHUgZmFzdCBwYXRoIHdoaWNoIGNvdWxkIGRvIHdpdGgKKyAqIGxlc3MgR1BSIHJlc3RvcmVzIGluIGZhY3QsIGJ1dCBmb3Igbm93IHdlIGhhdmUgYSBzaW5nbGUgcmV0dXJuIHBhdGgKKyAqLworCS5nbG9ibCBmYXN0X2V4Y2VwdGlvbl9yZXR1cm4KK2Zhc3RfZXhjZXB0aW9uX3JldHVybjoKKwl3cnRlZWkJMAorMToJbXIJcjAscjEzCisJbGQJcjEwLF9NU1IocjEpCisJUkVTVF80R1BSUygyLCByMSkKKwlhbmRpLglyNixyMTAsTVNSX1BSCisJUkVTVF8yR1BSUyg2LCByMSkKKwliZXEJMWYKKwlBQ0NPVU5UX0NQVV9VU0VSX0VYSVQocjEwLCByMTEpCisJbGQJcjAsR1BSMTMocjEpCisKKzE6CXN0ZGN4LglyMCwwLHIxCQkvKiB0byBjbGVhciB0aGUgcmVzZXJ2YXRpb24gKi8KKworCWxkCXI4LF9DQ1IocjEpCisJbGQJcjksX0xJTksocjEpCisJbGQJcjEwLF9DVFIocjEpCisJbGQJcjExLF9YRVIocjEpCisJbXRjcglyOAorCW10bHIJcjkKKwltdGN0cglyMTAKKwltdHhlcglyMTEKKwlSRVNUXzJHUFJTKDgsIHIxKQorCWxkCXIxMCxHUFIxMChyMSkKKwlsZAlyMTEsR1BSMTEocjEpCisJbGQJcjEyLEdQUjEyKHIxKQorCW10c3ByCVNQUk5fU1BSR19HRU5fU0NSQVRDSCxyMAorCisJc3RkCXIxMCxQQUNBX0VYR0VOK0VYX1IxMChyMTMpOworCXN0ZAlyMTEsUEFDQV9FWEdFTitFWF9SMTEocjEzKTsKKwlsZAlyMTAsX05JUChyMSkKKwlsZAlyMTEsX01TUihyMSkKKwlsZAlyMCxHUFIwKHIxKQorCWxkCXIxLEdQUjEocjEpCisJbXRzcHIJU1BSTl9TUlIwLHIxMAorCW10c3ByCVNQUk5fU1JSMSxyMTEKKwlsZAlyMTAsUEFDQV9FWEdFTitFWF9SMTAocjEzKQorCWxkCXIxMSxQQUNBX0VYR0VOK0VYX1IxMShyMTMpCisJbWZzcHIJcjEzLFNQUk5fU1BSR19HRU5fU0NSQVRDSAorCXJmaQorCisvKgorICogVHJhbXBvbGluZXMgdXNlZCB3aGVuIHNwb3R0aW5nIGEgYmFkIGtlcm5lbCBzdGFjayBwb2ludGVyIGluCisgKiB0aGUgZXhjZXB0aW9uIGVudHJ5IGNvZGUuCisgKgorICogVE9ETzogbW92ZSBzb21lIGJpdHMgbGlrZSBTUlIwIHJlYWQgdG8gdHJhbXBvbGluZSwgcGFzcyBQQUNBCisgKiBpbmRleCBhcm91bmQsIGV0Yy4uLiB0byBoYW5kbGUgY3JpdCAmIG1jaGVjaworICovCitCQURfU1RBQ0tfVFJBTVBPTElORSgweDAwMCkKK0JBRF9TVEFDS19UUkFNUE9MSU5FKDB4MTAwKQorQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHgyMDApCitCQURfU1RBQ0tfVFJBTVBPTElORSgweDMwMCkKK0JBRF9TVEFDS19UUkFNUE9MSU5FKDB4NDAwKQorQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHg1MDApCitCQURfU1RBQ0tfVFJBTVBPTElORSgweDYwMCkKK0JBRF9TVEFDS19UUkFNUE9MSU5FKDB4NzAwKQorQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHg4MDApCitCQURfU1RBQ0tfVFJBTVBPTElORSgweDkwMCkKK0JBRF9TVEFDS19UUkFNUE9MSU5FKDB4OTgwKQorQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHg5ZjApCitCQURfU1RBQ0tfVFJBTVBPTElORSgweGEwMCkKK0JBRF9TVEFDS19UUkFNUE9MSU5FKDB4YjAwKQorQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHhjMDApCitCQURfU1RBQ0tfVFJBTVBPTElORSgweGQwMCkKK0JBRF9TVEFDS19UUkFNUE9MSU5FKDB4ZTAwKQorQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHhmMDApCitCQURfU1RBQ0tfVFJBTVBPTElORSgweGYyMCkKKworCS5nbG9ibAliYWRfc3RhY2tfYm9vazNlCitiYWRfc3RhY2tfYm9vazNlOgorCS8qIFhYWDogTmVlZHMgdG8gbWFrZSBTUFJOX1NQUkdfR0VOIGRlcGVuZCBvbiBleGNlcHRpb24gdHlwZSAqLworCW1mc3ByCXIxMCxTUFJOX1NSUjA7CQkgIC8qIHJlYWQgU1JSMCBiZWZvcmUgdG91Y2hpbmcgc3RhY2sgKi8KKwlsZAlyMSxQQUNBRU1FUkdTUChyMTMpCisJc3ViaQlyMSxyMSw2NCtJTlRfRlJBTUVfU0laRQorCXN0ZAlyMTAsX05JUChyMSkKKwlzdGQJcjExLF9NU1IocjEpCisJbGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEocjEzKSAvKiBGSVhNRSBmb3IgY3JpdCAmIG1jaGVjayAqLworCWx3eglyMTEsUEFDQV9FWEdFTitFWF9DUihyMTMpIC8qIEZJWE1FIGZvciBjcml0ICYgbWNoZWNrICovCisJc3RkCXIxMCxHUFIxKHIxKQorCXN0ZAlyMTEsX0NDUihyMSkKKwltZnNwcglyMTAsU1BSTl9ERUFSCisJbWZzcHIJcjExLFNQUk5fRVNSCisJc3RkCXIxMCxfREFSKHIxKQorCXN0ZAlyMTEsX0RTSVNSKHIxKQorCXN0ZAlyMCxHUFIwKHIxKTsJCS8qIHNhdmUgcjAgaW4gc3RhY2tmcmFtZSAqLwkgICAgXAorCXN0ZAlyMixHUFIyKHIxKTsJCS8qIHNhdmUgcjIgaW4gc3RhY2tmcmFtZSAqLwkgICAgXAorCVNBVkVfNEdQUlMoMywgcjEpOwkJLyogc2F2ZSByMyAtIHI2IGluIHN0YWNrZnJhbWUgKi8gICAgXAorCVNBVkVfMkdQUlMoNywgcjEpOwkJLyogc2F2ZSByNywgcjggaW4gc3RhY2tmcmFtZSAqLwkgICAgXAorCXN0ZAlyOSxHUFI5KHIxKTsJCS8qIHNhdmUgcjkgaW4gc3RhY2tmcmFtZSAqLwkgICAgXAorCWxkCXIzLFBBQ0FfRVhHRU4rRVhfUjEwKHIxMyk7LyogZ2V0IGJhY2sgcjEwICovCQkgICAgXAorCWxkCXI0LFBBQ0FfRVhHRU4rRVhfUjExKHIxMyk7LyogZ2V0IGJhY2sgcjExICovCQkgICAgXAorCW1mc3ByCXI1LFNQUk5fU1BSR19HRU5fU0NSQVRDSDsvKiBnZXQgYmFjayByMTMgWFhYIGNhbiBiZSB3cm9uZyAqLyBcCisJc3RkCXIzLEdQUjEwKHIxKTsJCS8qIHNhdmUgcjEwIHRvIHN0YWNrZnJhbWUgKi8JICAgIFwKKwlzdGQJcjQsR1BSMTEocjEpOwkJLyogc2F2ZSByMTEgdG8gc3RhY2tmcmFtZSAqLwkgICAgXAorCXN0ZAlyMTIsR1BSMTIocjEpOwkJLyogc2F2ZSByMTIgaW4gc3RhY2tmcmFtZSAqLwkgICAgXAorCXN0ZAlyNSxHUFIxMyhyMSk7CQkvKiBzYXZlIGl0IHRvIHN0YWNrZnJhbWUgKi8JICAgIFwKKwltZmxyCXIxMAorCW1mY3RyCXIxMQorCW1meGVyCXIxMgorCXN0ZAlyMTAsX0xJTksocjEpCisJc3RkCXIxMSxfQ1RSKHIxKQorCXN0ZAlyMTIsX1hFUihyMSkKKwlTQVZFXzEwR1BSUygxNCxyMSkKKwlTQVZFXzhHUFJTKDI0LHIxKQorCWxoeglyMTIsUEFDQV9UUkFQX1NBVkUocjEzKQorCXN0ZAlyMTIsX1RSQVAocjEpCisJYWRkaQlyMTEscjEsSU5UX0ZSQU1FX1NJWkUKKwlzdGQJcjExLDAocjEpCisJbGkJcjEyLDAKKwlzdGQJcjEyLDAocjExKQorCWxkCXIyLFBBQ0FUT0MocjEzKQorMToJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorCWJsCS5rZXJuZWxfYmFkX3N0YWNrCisJYgkxYgorCisvKgorICogU2V0dXAgdGhlIGluaXRpYWwgVExCIGZvciBhIGNvcmUuIFRoaXMgY3VycmVudCBpbXBsZW1lbnRhdGlvbgorICogYXNzdW1lIHRoYXQgd2hhdGV2ZXIgd2UgYXJlIHJ1bm5pbmcgb2ZmIHdpbGwgbm90IGNvbmZsaWN0IHdpdGgKKyAqIHRoZSBuZXcgbWFwcGluZyBhdCBQQUdFX09GRlNFVC4KKyAqLworX0dMT0JBTChpbml0aWFsX3RsYl9ib29rM2UpCisKKwkvKiBMb29rIGZvciB0aGUgZmlyc3QgVExCIHdpdGggSVBST1Qgc2V0ICovCisJbWZzcHIJcjQsU1BSTl9UTEIwQ0ZHCisJYW5kaS4JcjMscjQsVExCbkNGR19JUFJPVAorCWxpcwlyMyxNQVMwX1RMQlNFTCgwKUBoCisJYm5lCWZvdW5kX2lwcm90CisKKwltZnNwcglyNCxTUFJOX1RMQjFDRkcKKwlhbmRpLglyMyxyNCxUTEJuQ0ZHX0lQUk9UCisJbGlzCXIzLE1BUzBfVExCU0VMKDEpQGgKKwlibmUJZm91bmRfaXByb3QKKworCW1mc3ByCXI0LFNQUk5fVExCMkNGRworCWFuZGkuCXIzLHI0LFRMQm5DRkdfSVBST1QKKwlsaXMJcjMsTUFTMF9UTEJTRUwoMilAaAorCWJuZQlmb3VuZF9pcHJvdAorCisJbGlzCXIzLE1BUzBfVExCU0VMKDMpQGgKKwltZnNwcglyNCxTUFJOX1RMQjNDRkcKKwkvKiBmYWxsIHRocm91Z2ggKi8KKworZm91bmRfaXByb3Q6CisJYW5kaS4JcjUscjQsVExCbkNGR19IRVMKKwlibmUJaGF2ZV9oZXMKKworCW1mbHIJcjgJCQkJLyogc2F2ZSBMUiAqLworLyogMS4gRmluZCB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IHdlJ3JlIGV4ZWN1dGluZyBpbgorICoKKyAqIHIzID0gTUFTMF9UTEJTRUwgKGZvciB0aGUgaXByb3QgYXJyYXkpCisgKiByNCA9IFNQUk5fVExCbkNGRworICovCisJYmwJaW52c3RyCQkJCS8qIEZpbmQgb3VyIGFkZHJlc3MgKi8KK2ludnN0cjoJbWZscglyNgkJCQkvKiBNYWtlIGl0IGFjY2Vzc2libGUgKi8KKwltZm1zcglyNworCXJsd2lubQlyNSxyNywyNywzMSwzMQkJCS8qIGV4dHJhY3QgTVNSW0lTXSAqLworCW1mc3ByCXI3LFNQUk5fUElECisJc2x3aQlyNyxyNywxNgorCW9yCXI3LHI3LHI1CisJbXRzcHIJU1BSTl9NQVM2LHI3CisJdGxic3gJMCxyNgkJCQkvKiBzZWFyY2ggTVNSW0lTXSwgU1BJRD1QSUQgKi8KKworCW1mc3ByCXIzLFNQUk5fTUFTMAorCXJsd2lubQlyNSxyMywxNiwyMCwzMQkJCS8qIEV4dHJhY3QgTUFTMChFbnRyeSkgKi8KKworCW1mc3ByCXI3LFNQUk5fTUFTMQkJCS8qIEluc3VyZSBJUFJPVCBzZXQgKi8KKwlvcmlzCXI3LHI3LE1BUzFfSVBST1RAaAorCW10c3ByCVNQUk5fTUFTMSxyNworCXRsYndlCisKKy8qIDIuIEludmFsaWRhdGUgYWxsIGVudHJpZXMgZXhjZXB0IHRoZSBlbnRyeSB3ZSdyZSBleGVjdXRpbmcgaW4KKyAqCisgKiByMyA9IE1BUzAgdy9UTEJTRUwgJiBFU0VMIGZvciB0aGUgZW50cnkgd2UgYXJlIHJ1bm5pbmcgaW4KKyAqIHI0ID0gU1BSTl9UTEJuQ0ZHCisgKiByNSA9IEVTRUwgb2YgZW50cnkgd2UgYXJlIHJ1bm5pbmcgaW4KKyAqLworCWFuZGkuCXI0LHI0LFRMQm5DRkdfTl9FTlRSWQkJLyogRXh0cmFjdCAjIGVudHJpZXMgKi8KKwlsaQlyNiwwCQkJCS8qIFNldCBFbnRyeSBjb3VudGVyIHRvIDAgKi8KKzE6CW1yCXI3LHIzCQkJCS8qIFNldCBNQVMwKFRMQlNFTCkgKi8KKwlybHdpbWkJcjcscjYsMTYsNCwxNQkJCS8qIFNldHVwIE1BUzAgPSBUTEJTRUwgfCBFU0VMKHI2KSAqLworCW10c3ByCVNQUk5fTUFTMCxyNworCXRsYnJlCisJbWZzcHIJcjcsU1BSTl9NQVMxCisJcmx3aW5tCXI3LHI3LDAsMiwzMQkJCS8qIENsZWFyIE1BUzEgVmFsaWQgYW5kIElQUk9UICovCisJY21wdwlyNSxyNgorCWJlcQlza3BpbnYJCQkJLyogRG9udCB1cGRhdGUgdGhlIGN1cnJlbnQgZXhlY3V0aW9uIFRMQiAqLworCW10c3ByCVNQUk5fTUFTMSxyNworCXRsYndlCisJaXN5bmMKK3NrcGludjoJYWRkaQlyNixyNiwxCQkJCS8qIEluY3JlbWVudCAqLworCWNtcHcJcjYscjQJCQkJLyogQXJlIHdlIGRvbmU/ICovCisJYm5lCTFiCQkJCS8qIElmIG5vdCwgcmVwZWF0ICovCisKKwkvKiBJbnZhbGlkYXRlIGFsbCBUTEJzICovCisJUFBDX1RMQklMWF9BTEwoMCwwKQorCXN5bmMKKwlpc3luYworCisvKiAzLiBTZXR1cCBhIHRlbXAgbWFwcGluZyBhbmQganVtcCB0byBpdAorICoKKyAqIHIzID0gTUFTMCB3L1RMQlNFTCAmIEVTRUwgZm9yIHRoZSBlbnRyeSB3ZSBhcmUgcnVubmluZyBpbgorICogcjUgPSBFU0VMIG9mIGVudHJ5IHdlIGFyZSBydW5uaW5nIGluCisgKi8KKwlhbmRpLglyNyxyNSwweDEJLyogRmluZCBhbiBlbnRyeSBub3QgdXNlZCBhbmQgaXMgbm9uLXplcm8gKi8KKwlhZGRpCXI3LHI3LDB4MQorCW1yCXI0LHIzCQkvKiBTZXQgTUFTMChUTEJTRUwpID0gMSAqLworCW10c3ByCVNQUk5fTUFTMCxyNAorCXRsYnJlCisKKwlybHdpbWkJcjQscjcsMTYsNCwxNQkvKiBTZXR1cCBNQVMwID0gVExCU0VMIHwgRVNFTChyNykgKi8KKwltdHNwcglTUFJOX01BUzAscjQKKworCW1mc3ByCXI3LFNQUk5fTUFTMQorCXhvcmkJcjYscjcsTUFTMV9UUwkJLyogU2V0dXAgVE1QIG1hcHBpbmcgaW4gdGhlIG90aGVyIEFkZHJlc3Mgc3BhY2UgKi8KKwltdHNwcglTUFJOX01BUzEscjYKKworCXRsYndlCisKKwltZm1zcglyNgorCXhvcmkJcjYscjYsTVNSX0lTCisJbXRzcHIJU1BSTl9TUlIxLHI2CisJYmwJMWYJCS8qIEZpbmQgb3VyIGFkZHJlc3MgKi8KKzE6CW1mbHIJcjYKKwlhZGRpCXI2LHI2LCgyZiAtIDFiKQorCW10c3ByCVNQUk5fU1JSMCxyNgorCXJmaQorMjoKKworLyogNC4gQ2xlYXIgb3V0IFBJRHMgJiBTZWFyY2ggaW5mbworICoKKyAqIHIzID0gTUFTMCB3L1RMQlNFTCAmIEVTRUwgZm9yIHRoZSBlbnRyeSB3ZSBzdGFydGVkIGluCisgKiByNCA9IE1BUzAgdy9UTEJTRUwgJiBFU0VMIGZvciB0aGUgdGVtcCBtYXBwaW5nCisgKiByNSA9IE1BUzMKKyAqLworCWxpCXI2LDAKKwltdHNwciAgIFNQUk5fTUFTNixyNgorCW10c3ByCVNQUk5fUElELHI2CisKKy8qIDUuIEludmFsaWRhdGUgbWFwcGluZyB3ZSBzdGFydGVkIGluCisgKgorICogcjMgPSBNQVMwIHcvVExCU0VMICYgRVNFTCBmb3IgdGhlIGVudHJ5IHdlIHN0YXJ0ZWQgaW4KKyAqIHI0ID0gTUFTMCB3L1RMQlNFTCAmIEVTRUwgZm9yIHRoZSB0ZW1wIG1hcHBpbmcKKyAqIHI1ID0gTUFTMworICovCisJbXRzcHIJU1BSTl9NQVMwLHIzCisJdGxicmUKKwltZnNwcglyNixTUFJOX01BUzEKKwlybHdpbm0JcjYscjYsMCwyLDAJLyogY2xlYXIgSVBST1QgKi8KKwltdHNwcglTUFJOX01BUzEscjYKKwl0bGJ3ZQorCisJLyogSW52YWxpZGF0ZSBUTEIxICovCisJUFBDX1RMQklMWF9BTEwoMCwwKQorCXN5bmMKKwlpc3luYworCisvKiBUaGUgbWFwcGluZyBvbmx5IG5lZWRzIHRvIGJlIGNhY2hlLWNvaGVyZW50IG9uIFNNUCAqLworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgTV9JRl9TTVAJTUFTMl9NCisjZWxzZQorI2RlZmluZSBNX0lGX1NNUAkwCisjZW5kaWYKKworLyogNi4gU2V0dXAgS0VSTkVMQkFTRSBtYXBwaW5nIGluIFRMQlswXQorICoKKyAqIHIzID0gTUFTMCB3L1RMQlNFTCAmIEVTRUwgZm9yIHRoZSBlbnRyeSB3ZSBzdGFydGVkIGluCisgKiByNCA9IE1BUzAgdy9UTEJTRUwgJiBFU0VMIGZvciB0aGUgdGVtcCBtYXBwaW5nCisgKiByNSA9IE1BUzMKKyAqLworCXJsd2lubQlyMyxyMywwLDE2LDMJLyogY2xlYXIgRVNFTCAqLworCW10c3ByCVNQUk5fTUFTMCxyMworCWxpcwlyNiwoTUFTMV9WQUxJRHxNQVMxX0lQUk9UKUBoCisJb3JpCXI2LHI2LChNQVMxX1RTSVpFKEJPT0szRV9QQUdFU1pfMUdCKSlAbAorCW10c3ByCVNQUk5fTUFTMSxyNgorCisJTE9BRF9SRUdfSU1NRURJQVRFKHI2LCBQQUdFX09GRlNFVCB8IE1fSUZfU01QKQorCW10c3ByCVNQUk5fTUFTMixyNgorCisJcmx3aW5tCXI1LHI1LDAsMCwyNQorCW9yaQlyNSxyNSxNQVMzX1NSIHwgTUFTM19TVyB8IE1BUzNfU1gKKwltdHNwcglTUFJOX01BUzMscjUKKwlsaQlyNSwtMQorCXJsd2lubQlyNSxyNSwwLDAsMjUKKworCXRsYndlCisKKy8qIDcuIEp1bXAgdG8gS0VSTkVMQkFTRSBtYXBwaW5nCisgKgorICogcjQgPSBNQVMwIHcvVExCU0VMICYgRVNFTCBmb3IgdGhlIHRlbXAgbWFwcGluZworICovCisJLyogTm93IHdlIGJyYW5jaCB0aGUgbmV3IHZpcnR1YWwgYWRkcmVzcyBtYXBwZWQgYnkgdGhpcyBlbnRyeSAqLworCUxPQURfUkVHX0lNTUVESUFURShyNiwyZikKKwlsaXMJcjcsTVNSX0tFUk5FTEBoCisJb3JpCXI3LHI3LE1TUl9LRVJORUxAbAorCW10c3ByCVNQUk5fU1JSMCxyNgorCW10c3ByCVNQUk5fU1JSMSxyNworCXJmaQkJCQkvKiBzdGFydCBleGVjdXRpb24gb3V0IG9mIFRMQjFbMF0gZW50cnkgKi8KKzI6CisKKy8qIDguIENsZWFyIG91dCB0aGUgdGVtcCBtYXBwaW5nCisgKgorICogcjQgPSBNQVMwIHcvVExCU0VMICYgRVNFTCBmb3IgdGhlIGVudHJ5IHdlIGFyZSBydW5uaW5nIGluCisgKi8KKwltdHNwcglTUFJOX01BUzAscjQKKwl0bGJyZQorCW1mc3ByCXI1LFNQUk5fTUFTMQorCXJsd2lubQlyNSxyNSwwLDIsMAkvKiBjbGVhciBJUFJPVCAqLworCW10c3ByCVNQUk5fTUFTMSxyNQorCXRsYndlCisKKwkvKiBJbnZhbGlkYXRlIFRMQjEgKi8KKwlQUENfVExCSUxYX0FMTCgwLDApCisJc3luYworCWlzeW5jCisKKwkvKiBXZSB0cmFuc2xhdGUgTFIgYW5kIHJldHVybiAqLworCXRvdmlydChyOCxyOCkKKwltdGxyCXI4CisJYmxyCisKK2hhdmVfaGVzOgorCS8qIFNldHVwIE1BUyAwLDEsMiwzIGFuZCA3IGZvciB0bGJ3ZSBvZiBhIDFHIGVudHJ5IHRoYXQgbWFwcyB0aGUKKwkgKiBrZXJuZWwgbGluZWFyIG1hcHBpbmcuIFdlIGFsc28gc2V0IE1BUzggb25jZSBmb3IgYWxsIGhlcmUgdGhvdWdoCisJICogdGhhdCB3aWxsIGhhdmUgdG8gYmUgbWFkZSBkZXBlbmRlbnQgb24gd2hldGhlciB3ZSBhcmUgcnVubmluZyB1bmRlcgorCSAqIGEgaHlwZXJ2aXNvciBJIHN1cHBvc2UuCisJICovCisJb3JpCXIzLHIzLE1BUzBfSEVTIHwgTUFTMF9XUV9BTExXQVlTCisJbXRzcHIJU1BSTl9NQVMwLHIzCisJbGlzCXIzLChNQVMxX1ZBTElEIHwgTUFTMV9JUFJPVClAaAorCW9yaQlyMyxyMyxCT09LM0VfUEFHRVNaXzFHQiA8PCBNQVMxX1RTSVpFX1NISUZUCisJbXRzcHIJU1BSTl9NQVMxLHIzCisJTE9BRF9SRUdfSU1NRURJQVRFKHIzLCBQQUdFX09GRlNFVCB8IE1BUzJfTSkKKwltdHNwcglTUFJOX01BUzIscjMKKwlsaQlyMyxNQVMzX1NSIHwgTUFTM19TVyB8IE1BUzNfU1gKKwltdHNwcglTUFJOX01BUzdfTUFTMyxyMworCWxpCXIzLDAKKwltdHNwcglTUFJOX01BUzgscjMKKworCS8qIFdyaXRlIHRoZSBUTEIgZW50cnkgKi8KKwl0bGJ3ZQorCisJLyogTm93IHdlIGJyYW5jaCB0aGUgbmV3IHZpcnR1YWwgYWRkcmVzcyBtYXBwZWQgYnkgdGhpcyBlbnRyeSAqLworCUxPQURfUkVHX0lNTUVESUFURShyMywxZikKKwltdGN0cglyMworCWJjdHIKKworMToJLyogV2UgYXJlIG5vdyBydW5uaW5nIGF0IFBBR0VfT0ZGU0VULCBjbGVhbiB0aGUgVExCIG9mIGV2ZXJ5dGhpbmcKKwkgKiBlbHNlIChYWFggd2Ugc2hvdWxkIHNjYW4gZm9yIGJvbHRlZCBjcmFwIGZyb20gdGhlIGZpcm13YXJlIHRvbykKKwkgKi8KKwlQUENfVExCSUxYKDAsMCwwKQorCXN5bmMKKwlpc3luYworCisJLyogV2UgdHJhbnNsYXRlIExSIGFuZCByZXR1cm4gKi8KKwltZmxyCXIzCisJdG92aXJ0KHIzLHIzKQorCW10bHIJcjMKKwlibHIKKworLyoKKyAqIE1haW4gZW50cnkgKGJvb3QgQ1BVLCB0aHJlYWQgMCkKKyAqCisgKiBXZSBlbnRlciBoZXJlIGZyb20gaGVhZF82NC5TLCBwb3NzaWJseSBhZnRlciB0aGUgcHJvbV9pbml0IHRyYW1wb2xpbmUKKyAqIHdpdGggcjMgYW5kIHI0IGFscmVhZHkgc2F2ZWQgdG8gcjMxIGFuZCAzMCByZXNwZWN0aXZlbHkgYW5kIGluIDY0IGJpdHMKKyAqIG1vZGUuIEFueXRoaW5nIGVsc2UgaXMgYXMgaXQgd2FzIGxlZnQgYnkgdGhlIGJvb3Rsb2FkZXIKKyAqCisgKiBJbml0aWFsIHJlcXVpcmVtZW50cyBvZiB0aGlzIHBvcnQ6CisgKgorICogLSBLZXJuZWwgbG9hZGVkIGF0IDAgcGh5c2ljYWwKKyAqIC0gQSBnb29kIGx1bXAgb2YgbWVtb3J5IG1hcHBlZCAwOjAgYnkgVVRMQiBlbnRyeSAwCisgKiAtIE1TUjpJUyAmIE1TUjpEUyBzZXQgdG8gMAorICoKKyAqIE5vdGUgdGhhdCBzb21lIG9mIHRoZSBhYm92ZSByZXF1aXJlbWVudHMgd2lsbCBiZSByZWxheGVkIGluIHRoZSBmdXR1cmUKKyAqIGFzIHRoZSBrZXJuZWwgYmVjb21lcyBzbWFydGVyIGF0IGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgaW5pdGlhbCBjb25kaXRpb25zCisgKiBidXQgZm9yIG5vdyB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsCisgKi8KK19HTE9CQUwoc3RhcnRfaW5pdGlhbGl6YXRpb25fYm9vazNlKQorCW1mbHIJcjI4CisKKwkvKiBGaXJzdCwgd2UgbmVlZCB0byBzZXR1cCBzb21lIGluaXRpYWwgVExCcyB0byBtYXAgdGhlIGtlcm5lbAorCSAqIHRleHQsIGRhdGEgYW5kIGJzcyBhdCBQQUdFX09GRlNFVC4gV2UgZG9uJ3QgaGF2ZSBhIHJlYWwgbW9kZQorCSAqIGFuZCBhbHdheXMgdXNlIEFTIDAsIHNvIHdlIGp1c3Qgc2V0IGl0IHVwIHRvIG1hdGNoIG91ciBsaW5rCisJICogYWRkcmVzcyBhbmQgbmV2ZXIgdXNlIDAgYmFzZWQgYWRkcmVzc2VzLgorCSAqLworCWJsCS5pbml0aWFsX3RsYl9ib29rM2UKKworCS8qIEluaXQgZ2xvYmFsIGNvcmUgYml0cyAqLworCWJsCS5pbml0X2NvcmVfYm9vazNlCisKKwkvKiBJbml0IHBlci10aHJlYWQgYml0cyAqLworCWJsCS5pbml0X3RocmVhZF9ib29rM2UKKworCS8qIFJldHVybiB0byBjb21tb24gaW5pdCBjb2RlICovCisJdG92aXJ0KHIyOCxyMjgpCisJbXRscglyMjgKKwlibHIKKworCisvKgorICogU2Vjb25kYXJ5IGNvcmUvcHJvY2Vzc29yIGVudHJ5CisgKgorICogVGhpcyBpcyBlbnRlcmVkIGZvciB0aHJlYWQgMCBvZiBhIHNlY29uZGFyeSBjb3JlLCBhbGwgb3RoZXIgdGhyZWFkcworICogYXJlIGV4cGVjdGVkIHRvIGJlIHN0b3BwZWQuIEl0J3Mgc2ltaWxhciB0byBzdGFydF9pbml0aWFsaXphdGlvbl9ib29rM2UKKyAqIGV4Y2VwdCB0aGF0IGl0J3MgZ2VuZXJhbGx5IGVudGVyZWQgZnJvbSB0aGUgaG9sZGluZyBsb29wIGluIGhlYWRfNjQuUworICogYWZ0ZXIgQ1BVcyBoYXZlIGJlZW4gZ2F0aGVyZWQgYnkgT3BlbiBGaXJtd2FyZS4KKyAqCisgKiBXZSBhc3N1bWUgd2UgYXJlIGluIDMyIGJpdHMgbW9kZSBydW5uaW5nIHdpdGggd2hhdGV2ZXIgVExCIGVudHJ5IHdhcworICogc2V0IGZvciB1cyBieSB0aGUgZmlybXdhcmUgb3IgUE9SIGVuZ2luZS4KKyAqLworX0dMT0JBTChib29rM2Vfc2Vjb25kYXJ5X2NvcmVfaW5pdF90bGJfc2V0KQorCWxpCXI0LDEKKwliCS5nZW5lcmljX3NlY29uZGFyeV9zbXBfaW5pdAorCitfR0xPQkFMKGJvb2szZV9zZWNvbmRhcnlfY29yZV9pbml0KQorCW1mbHIJcjI4CisKKwkvKiBEbyB3ZSBuZWVkIHRvIHNldHVwIGluaXRpYWwgVExCIGVudHJ5ID8gKi8KKwljbXBsd2kJcjQsMAorCWJuZQkyZgorCisJLyogU2V0dXAgVExCIGZvciB0aGlzIGNvcmUgKi8KKwlibAkuaW5pdGlhbF90bGJfYm9vazNlCisKKwkvKiBXZSBjYW4gcmV0dXJuIGZyb20gdGhlIGFib3ZlIHJ1bm5pbmcgYXQgYSBkaWZmZXJlbnQKKwkgKiBhZGRyZXNzLCBzbyByZWNhbGN1bGF0ZSByMiAoVE9DKQorCSAqLworCWJsCS5yZWxhdGl2ZV90b2MKKworCS8qIEluaXQgZ2xvYmFsIGNvcmUgYml0cyAqLworMjoJYmwJLmluaXRfY29yZV9ib29rM2UKKworCS8qIEluaXQgcGVyLXRocmVhZCBiaXRzICovCiszOglibAkuaW5pdF90aHJlYWRfYm9vazNlCisKKwkvKiBSZXR1cm4gdG8gY29tbW9uIGluaXQgY29kZSBhdCBwcm9wZXIgdmlydHVhbCBhZGRyZXNzLgorCSAqCisJICogRHVlIHRvIHZhcmlvdXMgcHJldmlvdXMgYXNzdW1wdGlvbnMsIHdlIGtub3cgd2UgZW50ZXJlZCB0aGlzCisJICogZnVuY3Rpb24gYXQgZWl0aGVyIHRoZSBmaW5hbCBQQUdFX09GRlNFVCBtYXBwaW5nIG9yIHVzaW5nIGEKKwkgKiAxOjEgbWFwcGluZyBhdCAwLCBzbyB3ZSBkb24ndCBib3RoZXIgZG9pbmcgYSBjb21wbGljYXRlZCBjaGVjaworCSAqIGhlcmUsIHdlIGp1c3QgZW5zdXJlIHRoZSByZXR1cm4gYWRkcmVzcyBoYXMgdGhlIHJpZ2h0IHRvcCBiaXRzLgorCSAqCisJICogTm90ZSB0aGF0IGlmIHdlIGV2ZXIgd2FudCB0byBiZSBzbWFydGVyIGFib3V0IHdoZXJlIHdlIGNhbiBiZQorCSAqIHN0YXJ0ZWQgZnJvbSwgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIHRoYXQgYnkgdGhlIHRpbWUgd2UgcmVhY2gKKwkgKiB0aGUgY29kZSBiZWxvdyB3ZSBtYXkgYWxyZWFkeSBiZSBydW5uaW5nIGF0IGEgZGlmZmVyZW50IGxvY2F0aW9uCisJICogdGhhbiB0aGUgb25lIHdlIHdlcmUgY2FsbGVkIGZyb20gc2luY2UgaW5pdGlhbF90bGJfYm9vazNlIGNhbgorCSAqIGhhdmUgbW92ZWQgdXMgYWxyZWFkeS4KKwkgKi8KKwljbXBkaQljcjAscjI4LDAKKwlibHQJMWYKKwlsaXMJcjMsUEFHRV9PRkZTRVRAaGlnaGVzdAorCXNsZGkJcjMscjMsMzIKKwlvcglyMjgscjI4LHIzCisxOgltdGxyCXIyOAorCWJscgorCitfR0xPQkFMKGJvb2szZV9zZWNvbmRhcnlfdGhyZWFkX2luaXQpCisJbWZscglyMjgKKwliCTNiCisKK19TVEFUSUMoaW5pdF9jb3JlX2Jvb2szZSkKKwkvKiBFc3RhYmxpc2ggdGhlIGludGVycnVwdCB2ZWN0b3IgYmFzZSAqLworCUxPQURfUkVHX0lNTUVESUFURShyMywgaW50ZXJydXB0X2Jhc2VfYm9vazNlKQorCW10c3ByCVNQUk5fSVZQUixyMworCXN5bmMKKwlibHIKKworX1NUQVRJQyhpbml0X3RocmVhZF9ib29rM2UpCisJbGlzCXIzLChTUFJOX0VQQ1JfSUNNIHwgU1BSTl9FUENSX0dJQ00pQGgKKwltdHNwcglTUFJOX0VQQ1IscjMKKworCS8qIE1ha2Ugc3VyZSBpbnRlcnJ1cHRzIGFyZSBvZmYgKi8KKwl3cnRlZWkJMAorCisJLyogZGlzYWJsZSBhbGwgdGltZXJzIGFuZCBjbGVhciBvdXQgc3RhdHVzICovCisJbGkJcjMsMAorCW10c3ByCVNQUk5fVENSLHIzCisJbWZzcHIJcjMsU1BSTl9UU1IKKwltdHNwcglTUFJOX1RTUixyMworCisJYmxyCisKK19HTE9CQUwoX19zZXR1cF9iYXNlX2l2b3JzKQorCVNFVF9JVk9SKDAsIDB4MDIwKSAvKiBDcml0aWNhbCBJbnB1dCAqLworCVNFVF9JVk9SKDEsIDB4MDAwKSAvKiBNYWNoaW5lIENoZWNrICovCisJU0VUX0lWT1IoMiwgMHgwNjApIC8qIERhdGEgU3RvcmFnZSAqLyAKKwlTRVRfSVZPUigzLCAweDA4MCkgLyogSW5zdHJ1Y3Rpb24gU3RvcmFnZSAqLworCVNFVF9JVk9SKDQsIDB4MGEwKSAvKiBFeHRlcm5hbCBJbnB1dCAqLyAKKwlTRVRfSVZPUig1LCAweDBjMCkgLyogQWxpZ25tZW50ICovIAorCVNFVF9JVk9SKDYsIDB4MGUwKSAvKiBQcm9ncmFtICovIAorCVNFVF9JVk9SKDcsIDB4MTAwKSAvKiBGUCBVbmF2YWlsYWJsZSAqLyAKKwlTRVRfSVZPUig4LCAweDEyMCkgLyogU3lzdGVtIENhbGwgKi8gCisJU0VUX0lWT1IoOSwgMHgxNDApIC8qIEF1eGlsaWFyeSBQcm9jZXNzb3IgVW5hdmFpbGFibGUgKi8gCisJU0VUX0lWT1IoMTAsIDB4MTYwKSAvKiBEZWNyZW1lbnRlciAqLyAKKwlTRVRfSVZPUigxMSwgMHgxODApIC8qIEZpeGVkIEludGVydmFsIFRpbWVyICovIAorCVNFVF9JVk9SKDEyLCAweDFhMCkgLyogV2F0Y2hkb2cgVGltZXIgKi8gCisJU0VUX0lWT1IoMTMsIDB4MWMwKSAvKiBEYXRhIFRMQiBFcnJvciAqLyAKKwlTRVRfSVZPUigxNCwgMHgxZTApIC8qIEluc3RydWN0aW9uIFRMQiBFcnJvciAqLworCVNFVF9JVk9SKDE1LCAweDA0MCkgLyogRGVidWcgKi8KKworCXN5bmMKKworCWJscgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TCmluZGV4IGViODk4MTEuLjE4MDg4NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRzLlMKQEAgLTEyLDYgKzEyLDggQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGFzbS9leGNlcHRpb24tNjRzLmg+CisKIC8qCiAgKiBXZSBsYXlvdXQgcGh5c2ljYWwgbWVtb3J5IGFzIGZvbGxvd3M6CiAgKiAweDAwMDAgLSAweDAwZmYgOiBTZWNvbmRhcnkgcHJvY2Vzc29yIHNwaW4gY29kZQpAQCAtMjIsMTggKzI0LDYgQEAKICAqIDB4ODAwMCAtICAgICAgICA6IEVhcmx5IGluaXQgYW5kIHN1cHBvcnQgY29kZQogICovCiAKLQotLyoKLSAqICAgU1BSRyBVc2FnZQotICoKLSAqICAgUmVnaXN0ZXIJRGVmaW5pdGlvbgotICoKLSAqICAgU1BSRzAJcmVzZXJ2ZWQgZm9yIGh5cGVydmlzb3IKLSAqICAgU1BSRzEJdGVtcCAtIHVzZWQgdG8gc2F2ZSBncHIKLSAqICAgU1BSRzIJdGVtcCAtIHVzZWQgdG8gc2F2ZSBncHIKLSAqICAgU1BSRzMJdmlydCBhZGRyIG9mIHBhY2EKLSAqLwotCiAvKgogICogVGhpcyBpcyB0aGUgc3RhcnQgb2YgdGhlIGludGVycnVwdCBoYW5kbGVycyBmb3IgcFNlcmllcwogICogVGhpcyBjb2RlIHJ1bnMgd2l0aCByZWxvY2F0aW9uIG9mZi4KQEAgLTUxLDM0ICs0MSw0NCBAQAogCS4gPSAweDIwMAogX21hY2hpbmVfY2hlY2tfcFNlcmllczoKIAlITVRfTUVESVVNCi0JbXRzcHIJU1BSTl9TUFJHMSxyMTMJCS8qIHNhdmUgcjEzICovCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLHIxMwkJLyogc2F2ZSByMTMgKi8KIAlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWE1DLCBtYWNoaW5lX2NoZWNrX2NvbW1vbikKIAogCS4gPSAweDMwMAogCS5nbG9ibCBkYXRhX2FjY2Vzc19wU2VyaWVzCiBkYXRhX2FjY2Vzc19wU2VyaWVzOgogCUhNVF9NRURJVU0KLQltdHNwcglTUFJOX1NQUkcxLHIxMworCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyMTMKIEJFR0lOX0ZUUl9TRUNUSU9OCi0JbXRzcHIJU1BSTl9TUFJHMixyMTIKLQltZnNwcglyMTMsU1BSTl9EQVIKLQltZnNwcglyMTIsU1BSTl9EU0lTUgotCXNyZGkJcjEzLHIxMyw2MAotCXJsd2ltaQlyMTMscjEyLDE2LDB4MjAKLQltZmNyCXIxMgotCWNtcHdpCXIxMywweDJjCisJbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBCisJc3RkCXI5LFBBQ0FfRVhTTEIrRVhfUjkocjEzKQorCXN0ZAlyMTAsUEFDQV9FWFNMQitFWF9SMTAocjEzKQorCW1mc3ByCXIxMCxTUFJOX0RBUgorCW1mc3ByCXI5LFNQUk5fRFNJU1IKKwlzcmRpCXIxMCxyMTAsNjAKKwlybHdpbWkJcjEwLHI5LDE2LDB4MjAKKwltZmNyCXI5CisJY21wd2kJcjEwLDB4MmMKIAliZXEJZG9fc3RhYl9ib2x0ZWRfcFNlcmllcwotCW10Y3JmCTB4ODAscjEyCi0JbWZzcHIJcjEyLFNQUk5fU1BSRzIKLUVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX1NMQikKKwlsZAlyMTAsUEFDQV9FWFNMQitFWF9SMTAocjEzKQorCXN0ZAlyMTEsUEFDQV9FWEdFTitFWF9SMTEocjEzKQorCWxkCXIxMSxQQUNBX0VYU0xCK0VYX1I5KHIxMykKKwlzdGQJcjEyLFBBQ0FfRVhHRU4rRVhfUjEyKHIxMykKKwltZnNwcglyMTIsU1BSTl9TUFJHX1NDUkFUQ0gwCisJc3RkCXIxMCxQQUNBX0VYR0VOK0VYX1IxMChyMTMpCisJc3RkCXIxMSxQQUNBX0VYR0VOK0VYX1I5KHIxMykKKwlzdGQJcjEyLFBBQ0FfRVhHRU4rRVhfUjEzKHIxMykKKwlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfMShkYXRhX2FjY2Vzc19jb21tb24pCitGVFJfU0VDVElPTl9FTFNFCiAJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhHRU4sIGRhdGFfYWNjZXNzX2NvbW1vbikKK0FMVF9GVFJfU0VDVElPTl9FTkRfSUZDTFIoQ1BVX0ZUUl9TTEIpCiAKIAkuID0gMHgzODAKIAkuZ2xvYmwgZGF0YV9hY2Nlc3Nfc2xiX3BTZXJpZXMKIGRhdGFfYWNjZXNzX3NsYl9wU2VyaWVzOgogCUhNVF9NRURJVU0KLQltdHNwcglTUFJOX1NQUkcxLHIxMwotCW1mc3ByCXIxMyxTUFJOX1NQUkczCQkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLHIxMworCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQQkJLyogZ2V0IHBhY2EgYWRkcmVzcyBpbnRvIHIxMyAqLwogCXN0ZAlyMyxQQUNBX0VYU0xCK0VYX1IzKHIxMykKIAltZnNwcglyMyxTUFJOX0RBUgogCXN0ZAlyOSxQQUNBX0VYU0xCK0VYX1I5KHIxMykJLyogc2F2ZSByOSAtIHIxMiAqLwpAQCAtOTEsNyArOTEsNyBAQAogCXN0ZAlyMTAsUEFDQV9FWFNMQitFWF9SMTAocjEzKQogCXN0ZAlyMTEsUEFDQV9FWFNMQitFWF9SMTEocjEzKQogCXN0ZAlyMTIsUEFDQV9FWFNMQitFWF9SMTIocjEzKQotCW1mc3ByCXIxMCxTUFJOX1NQUkcxCisJbWZzcHIJcjEwLFNQUk5fU1BSR19TQ1JBVENIMAogCXN0ZAlyMTAsUEFDQV9FWFNMQitFWF9SMTMocjEzKQogCW1mc3ByCXIxMixTUFJOX1NSUjEJCS8qIGFuZCBTUlIxICovCiAjaWZuZGVmIENPTkZJR19SRUxPQ0FUQUJMRQpAQCAtMTE1LDggKzExNSw4IEBACiAJLmdsb2JsIGluc3RydWN0aW9uX2FjY2Vzc19zbGJfcFNlcmllcwogaW5zdHJ1Y3Rpb25fYWNjZXNzX3NsYl9wU2VyaWVzOgogCUhNVF9NRURJVU0KLQltdHNwcglTUFJOX1NQUkcxLHIxMwotCW1mc3ByCXIxMyxTUFJOX1NQUkczCQkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLHIxMworCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQQkJLyogZ2V0IHBhY2EgYWRkcmVzcyBpbnRvIHIxMyAqLwogCXN0ZAlyMyxQQUNBX0VYU0xCK0VYX1IzKHIxMykKIAltZnNwcglyMyxTUFJOX1NSUjAJCS8qIFNSUjAgaXMgZmF1bHRpbmcgYWRkcmVzcyAqLwogCXN0ZAlyOSxQQUNBX0VYU0xCK0VYX1I5KHIxMykJLyogc2F2ZSByOSAtIHIxMiAqLwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJc3RkCXIxMCxQQUNBX0VYU0xCK0VYX1IxMChyMTMpCiAJc3RkCXIxMSxQQUNBX0VYU0xCK0VYX1IxMShyMTMpCiAJc3RkCXIxMixQQUNBX0VYU0xCK0VYX1IxMihyMTMpCi0JbWZzcHIJcjEwLFNQUk5fU1BSRzEKKwltZnNwcglyMTAsU1BSTl9TUFJHX1NDUkFUQ0gwCiAJc3RkCXIxMCxQQUNBX0VYU0xCK0VYX1IxMyhyMTMpCiAJbWZzcHIJcjEyLFNQUk5fU1JSMQkJLyogYW5kIFNSUjEgKi8KICNpZm5kZWYgQ09ORklHX1JFTE9DQVRBQkxFCkBAIC0xNTksNyArMTU5LDcgQEAKIAliZXEtCTFmCiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9SRUFMX0xFKQogCW1yCXI5LHIxMwotCW1mc3ByCXIxMyxTUFJOX1NQUkczCisJbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBCiAJbWZzcHIJcjExLFNQUk5fU1JSMAogCWxkCXIxMixQQUNBS0JBU0UocjEzKQogCWxkCXIxMCxQQUNBS01TUihyMTMpCkBAIC0yMjgsMTUgKzIyOCwxNyBAQAogCXJvdGxkaQlyMTAscjEwLDE2CiAJbXRzcHIJU1BSTl9TUlIxLHIxMAogCWxkCXIxMCxQQUNBX0VYR0VOK0VYX1IxMChyMTMpCi0JbWZzcHIJcjEzLFNQUk5fU1BSRzEKKwltZnNwcglyMTMsU1BSTl9TUFJHX1NDUkFUQ0gwCiAJcmZpZAogCWIJLgogCiAJLmFsaWduCTcKIGRvX3N0YWJfYm9sdGVkX3BTZXJpZXM6Ci0JbXRjcmYJMHg4MCxyMTIKLQltZnNwcglyMTIsU1BSTl9TUFJHMgotCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYU0xCLCAuZG9fc3RhYl9ib2x0ZWQpCisJc3RkCXIxMSxQQUNBX0VYU0xCK0VYX1IxMShyMTMpCisJc3RkCXIxMixQQUNBX0VYU0xCK0VYX1IxMihyMTMpCisJbWZzcHIJcjEwLFNQUk5fU1BSR19TQ1JBVENIMAorCXN0ZAlyMTAsUEFDQV9FWFNMQitFWF9SMTMocjEzKQorCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFU18xKC5kb19zdGFiX2JvbHRlZCkKIAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwogLyoKQEAgLTI0NiwxNCArMjQ4LDE0IEBACiAgICAgICAuYWxpZ24gNwogc3lzdGVtX3Jlc2V0X2Z3bm1pOgogCUhNVF9NRURJVU0KLQltdHNwcglTUFJOX1NQUkcxLHIxMwkJLyogc2F2ZSByMTMgKi8KKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzCQkvKiBzYXZlIHIxMyAqLwogCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBzeXN0ZW1fcmVzZXRfY29tbW9uKQogCiAJLmdsb2JsIG1hY2hpbmVfY2hlY2tfZndubWkKICAgICAgIC5hbGlnbiA3CiBtYWNoaW5lX2NoZWNrX2Z3bm1pOgogCUhNVF9NRURJVU0KLQltdHNwcglTUFJOX1NQUkcxLHIxMwkJLyogc2F2ZSByMTMgKi8KKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzCQkvKiBzYXZlIHIxMyAqLwogCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYTUMsIG1hY2hpbmVfY2hlY2tfY29tbW9uKQogCiAjZW5kaWYgLyogQ09ORklHX1BQQ19QU0VSSUVTICovCkBAIC0yNjgsNyArMjcwLDcgQEAKIAlzdGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEwKHIxMykKIAlzdGQJcjExLFBBQ0FfRVhHRU4rRVhfUjExKHIxMykKIAlzdGQJcjEyLFBBQ0FfRVhHRU4rRVhfUjEyKHIxMykKLQltZnNwcglyMTAsU1BSRzEKKwltZnNwcglyMTAsU1BSR19TQ1JBVENIMAogCWxkCXIxMSxQQUNBX0VYU0xCK0VYX1I5KHIxMykKIAlsZAlyMTIsUEFDQV9FWFNMQitFWF9SMyhyMTMpCiAJc3RkCXIxMCxQQUNBX0VYR0VOK0VYX1IxMyhyMTMpCkBAIC03MjksNiArNzMxLDExIEBACiAJYm5lLQlkb19zdGVfYWxsb2MJCS8qIElmIHNvIGhhbmRsZSBpdCAqLwogRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfU0xCKQogCisJY2xycmRpCXIxMSxyMSxUSFJFQURfU0hJRlQKKwlsd3oJcjAsVElfUFJFRU1QVChyMTEpCS8qIElmIHdlJ3JlIGluIGFuICJOTUkiICovCisJYW5kaXMuCXIwLHIwLE5NSV9NQVNLQGgJLyogKGkuZS4gYW4gaXJxIHdoZW4gc29mdC1kaXNhYmxlZCkgKi8KKwlibmUJNzdmCQkJLyogdGhlbiBkb24ndCBjYWxsIGhhc2hfcGFnZSBub3cgKi8KKwogCS8qCiAJICogT24gaVNlcmllcywgd2Ugc29mdC1kaXNhYmxlIGludGVycnVwdHMgaGVyZSwgdGhlbgogCSAqIGhhcmQtZW5hYmxlIGludGVycnVwdHMgc28gdGhhdCB0aGUgaGFzaF9wYWdlIGNvZGUgY2FuIHNwaW4gb24KQEAgLTgzMyw2ICs4NDAsMjAgQEAKIAlibAkubG93X2hhc2hfZmF1bHQKIAliCS5yZXRfZnJvbV9leGNlcHQKIAorLyoKKyAqIFdlIGNvbWUgaGVyZSBhcyBhIHJlc3VsdCBvZiBhIERTSSBhdCBhIHBvaW50IHdoZXJlIHdlIGRvbid0IHdhbnQKKyAqIHRvIGNhbGwgaGFzaF9wYWdlLCBzdWNoIGFzIHdoZW4gd2UgYXJlIGFjY2Vzc2luZyBtZW1vcnkgKHBvc3NpYmx5CisgKiB1c2VyIG1lbW9yeSkgaW5zaWRlIGEgUE1VIGludGVycnVwdCB0aGF0IG9jY3VycmVkIHdoaWxlIGludGVycnVwdHMKKyAqIHdlcmUgc29mdC1kaXNhYmxlZC4gIFdlIHdhbnQgdG8gaW52b2tlIHRoZSBleGNlcHRpb24gaGFuZGxlciBmb3IKKyAqIHRoZSBhY2Nlc3MsIG9yIHBhbmljIGlmIHRoZXJlIGlzbid0IGEgaGFuZGxlci4KKyAqLworNzc6CWJsCS5zYXZlX252Z3BycworCW1yCXI0LHIzCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorCWxpCXI1LFNJR1NFR1YKKwlibAkuYmFkX3BhZ2VfZmF1bHQKKwliCS5yZXRfZnJvbV9leGNlcHQKKwogCS8qIGhlcmUgd2UgaGF2ZSBhIHNlZ21lbnQgbWlzcyAqLwogZG9fc3RlX2FsbG9jOgogCWJsCS5zdGVfYWxsb2NhdGUJCS8qIHRyeSB0byBpbnNlcnQgc3RhYiBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9mcHUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnB1LlMKaW5kZXggMjQzNmRmMy4uZmM4ZjViMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9mcHUuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2ZwdS5TCkBAIC05MSw3ICs5MSw3IEBACiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCS8qIGVuYWJsZSB1c2Ugb2YgRlAgYWZ0ZXIgcmV0dXJuICovCiAjaWZkZWYgQ09ORklHX1BQQzMyCi0JbWZzcHIJcjUsU1BSTl9TUFJHMwkJLyogY3VycmVudCB0YXNrJ3MgVEhSRUFEIChwaHlzKSAqLworCW1mc3ByCXI1LFNQUk5fU1BSR19USFJFQUQJCS8qIGN1cnJlbnQgdGFzaydzIFRIUkVBRCAocGh5cykgKi8KIAlsd3oJcjQsVEhSRUFEX0ZQRVhDX01PREUocjUpCiAJb3JpCXI5LHI5LE1TUl9GUAkJLyogZW5hYmxlIEZQIGZvciBjdXJyZW50ICovCiAJb3IJcjkscjkscjQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggZmMyMTMyOS4uODI5YzNmZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKQEAgLTI0NCw4ICsyNDQsOCBAQAogICogdGFzaydzIHRocmVhZF9zdHJ1Y3QuCiAgKi8KICNkZWZpbmUgRVhDRVBUSU9OX1BST0xPRwlcCi0JbXRzcHIJU1BSTl9TUFJHMCxyMTA7CVwKLQltdHNwcglTUFJOX1NQUkcxLHIxMTsJXAorCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyMTA7CVwKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDEscjExOwlcCiAJbWZjcglyMTA7CQlcCiAJRVhDRVBUSU9OX1BST0xPR18xOwlcCiAJRVhDRVBUSU9OX1BST0xPR18yCkBAIC0yNTUsNyArMjU1LDcgQEAKIAlhbmRpLglyMTEscjExLE1TUl9QUjsJXAogCXRvcGh5cyhyMTEscjEpOwkJCS8qIHVzZSB0b3BoeXMocjEpIGlmIGtlcm5lbCAqLyBcCiAJYmVxCTFmOwkJXAotCW1mc3ByCXIxMSxTUFJOX1NQUkczOwlcCisJbWZzcHIJcjExLFNQUk5fU1BSR19USFJFQUQ7CVwKIAlsd3oJcjExLFRIUkVBRF9JTkZPLVRIUkVBRChyMTEpOwlcCiAJYWRkaQlyMTEscjExLFRIUkVBRF9TSVpFOwlcCiAJdG9waHlzKHIxMSxyMTEpOwlcCkBAIC0yNjcsOSArMjY3LDkgQEAKIAlzdHcJcjEwLF9DQ1IocjExKTsJCS8qIHNhdmUgcmVnaXN0ZXJzICovIFwKIAlzdHcJcjEyLEdQUjEyKHIxMSk7CVwKIAlzdHcJcjksR1BSOShyMTEpOwlcCi0JbWZzcHIJcjEwLFNQUk5fU1BSRzA7CVwKKwltZnNwcglyMTAsU1BSTl9TUFJHX1NDUkFUQ0gwOwlcCiAJc3R3CXIxMCxHUFIxMChyMTEpOwlcCi0JbWZzcHIJcjEyLFNQUk5fU1BSRzE7CVwKKwltZnNwcglyMTIsU1BSTl9TUFJHX1NDUkFUQ0gxOwlcCiAJc3R3CXIxMixHUFIxMShyMTEpOwlcCiAJbWZscglyMTA7CQlcCiAJc3R3CXIxMCxfTElOSyhyMTEpOwlcCkBAIC0zNTUsMTEgKzM1NSwxMSBAQAogICoJLS0gcGF1bHVzLgogICovCiAJLiA9IDB4MjAwCi0JbXRzcHIJU1BSTl9TUFJHMCxyMTAKLQltdHNwcglTUFJOX1NQUkcxLHIxMQorCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyMTAKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDEscjExCiAJbWZjcglyMTAKICNpZmRlZiBDT05GSUdfUFBDX0NIUlAKLQltZnNwcglyMTEsU1BSTl9TUFJHMgorCW1mc3ByCXIxMSxTUFJOX1NQUkdfUlRBUwogCWNtcHdpCTAscjExLDAKIAlibmUJN2YKICNlbmRpZiAvKiBDT05GSUdfUFBDX0NIUlAgKi8KQEAgLTM2Nyw3ICszNjcsNyBAQAogNzoJRVhDRVBUSU9OX1BST0xPR18yCiAJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAogI2lmZGVmIENPTkZJR19QUENfQ0hSUAotCW1mc3ByCXI0LFNQUk5fU1BSRzIKKwltZnNwcglyNCxTUFJOX1NQUkdfUlRBUwogCWNtcHdpCWNyMSxyNCwwCiAJYm5lCWNyMSwxZgogI2VuZGlmCkBAIC00ODUsNyArNDg1LDcgQEAKIAltZnNwcglyMyxTUFJOX0lNSVNTCiAJbGlzCXIxLFBBR0VfT0ZGU0VUQGgJCS8qIGNoZWNrIGlmIGtlcm5lbCBhZGRyZXNzICovCiAJY21wbHcJMCxyMSxyMwotCW1mc3ByCXIyLFNQUk5fU1BSRzMKKwltZnNwcglyMixTUFJOX1NQUkdfVEhSRUFECiAJbGkJcjEsX1BBR0VfVVNFUnxfUEFHRV9QUkVTRU5UIC8qIGxvdyBhZGRyZXNzZXMgdGVzdGVkIGFzIHVzZXIgKi8KIAlsd3oJcjIsUEdESVIocjIpCiAJYmdlLQkxMTJmCkBAIC01NTksNyArNTU5LDcgQEAKIAltZnNwcglyMyxTUFJOX0RNSVNTCiAJbGlzCXIxLFBBR0VfT0ZGU0VUQGgJCS8qIGNoZWNrIGlmIGtlcm5lbCBhZGRyZXNzICovCiAJY21wbHcJMCxyMSxyMwotCW1mc3ByCXIyLFNQUk5fU1BSRzMKKwltZnNwcglyMixTUFJOX1NQUkdfVEhSRUFECiAJbGkJcjEsX1BBR0VfVVNFUnxfUEFHRV9QUkVTRU5UIC8qIGxvdyBhZGRyZXNzZXMgdGVzdGVkIGFzIHVzZXIgKi8KIAlsd3oJcjIsUEdESVIocjIpCiAJYmdlLQkxMTJmCkBAIC01OTgsMTIgKzU5OCwxMiBAQAogCW10Y3JmCTB4ODAscjIKIEJFR0lOX01NVV9GVFJfU0VDVElPTgogCWxpCXIwLDEKLQltZnNwcglyMSxTUFJOX1NQUkc0CisJbWZzcHIJcjEsU1BSTl9TUFJHXzYwM19MUlUKIAlybHdpbm0JcjIscjMsMjAsMjcsMzEJCS8qIEdldCBBZGRyZXNzIGJpdHMgMTU6MTkgKi8KIAlzbHcJcjAscjAscjIKIAl4b3IJcjEscjAscjEKIAlzcncJcjAscjEscjIKLQltdHNwciAgIFNQUk5fU1BSRzQscjEKKwltdHNwciAgIFNQUk5fU1BSR182MDNfTFJVLHIxCiAJbWZzcHIJcjIsU1BSTl9TUlIxCiAJcmx3aW1pCXIyLHIwLDMxLTE0LDE0LDE0CiAJbXRzcHIgICBTUFJOX1NSUjEscjIKQEAgLTY0Myw3ICs2NDMsNyBAQAogCW1mc3ByCXIzLFNQUk5fRE1JU1MKIAlsaXMJcjEsUEFHRV9PRkZTRVRAaAkJLyogY2hlY2sgaWYga2VybmVsIGFkZHJlc3MgKi8KIAljbXBsdwkwLHIxLHIzCi0JbWZzcHIJcjIsU1BSTl9TUFJHMworCW1mc3ByCXIyLFNQUk5fU1BSR19USFJFQUQKIAlsaQlyMSxfUEFHRV9SV3xfUEFHRV9VU0VSfF9QQUdFX1BSRVNFTlQgLyogYWNjZXNzIGZsYWdzICovCiAJbHd6CXIyLFBHRElSKHIyKQogCWJnZS0JMTEyZgpAQCAtNjc4LDEyICs2NzgsMTIgQEAKIAltdGNyZgkweDgwLHIyCiBCRUdJTl9NTVVfRlRSX1NFQ1RJT04KIAlsaQlyMCwxCi0JbWZzcHIJcjEsU1BSTl9TUFJHNAorCW1mc3ByCXIxLFNQUk5fU1BSR182MDNfTFJVCiAJcmx3aW5tCXIyLHIzLDIwLDI3LDMxCQkvKiBHZXQgQWRkcmVzcyBiaXRzIDE1OjE5ICovCiAJc2x3CXIwLHIwLHIyCiAJeG9yCXIxLHIwLHIxCiAJc3J3CXIwLHIxLHIyCi0JbXRzcHIgICBTUFJOX1NQUkc0LHIxCisJbXRzcHIgICBTUFJOX1NQUkdfNjAzX0xSVSxyMQogCW1mc3ByCXIyLFNQUk5fU1JSMQogCXJsd2ltaQlyMixyMCwzMS0xNCwxNCwxNAogCW10c3ByICAgU1BSTl9TUlIxLHIyCkBAIC04NjQsOSArODY0LDkgQEAKIAl0b3BoeXMocjQscjIpCiAJYWRkaQlyNCxyNCxUSFJFQUQJLyogcGh5cyBhZGRyZXNzIG9mIG91ciB0aHJlYWRfc3RydWN0ICovCiAJQ0xSX1RPUDMyKHI0KQotCW10c3ByCVNQUk5fU1BSRzMscjQKKwltdHNwcglTUFJOX1NQUkdfVEhSRUFELHI0CiAJbGkJcjMsMAotCW10c3ByCVNQUk5fU1BSRzIscjMJLyogMCA9PiBub3QgaW4gUlRBUyAqLworCW10c3ByCVNQUk5fU1BSR19SVEFTLHIzCS8qIDAgPT4gbm90IGluIFJUQVMgKi8KIAogCS8qIGVuYWJsZSBNTVUgYW5kIGp1bXAgdG8gc3RhcnRfc2Vjb25kYXJ5ICovCiAJbGkJcjQsTVNSX0tFUk5FTApAQCAtOTQ3LDkgKzk0Nyw5IEBACiAJdG9waHlzKHI0LHIyKQogCWFkZGkJcjQscjQsVEhSRUFECS8qIGluaXQgdGFzaydzIFRIUkVBRCAqLwogCUNMUl9UT1AzMihyNCkKLQltdHNwcglTUFJOX1NQUkczLHI0CisJbXRzcHIJU1BSTl9TUFJHX1RIUkVBRCxyNAogCWxpCXIzLDAKLQltdHNwcglTUFJOX1NQUkcyLHIzCS8qIDAgPT4gbm90IGluIFJUQVMgKi8KKwltdHNwcglTUFJOX1NQUkdfUlRBUyxyMwkvKiAwID0+IG5vdCBpbiBSVEFTICovCiAKIAkvKiBzdGFjayAqLwogCWxpcwlyMSxpbml0X3RocmVhZF91bmlvbkBoYQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQweC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQweC5TCmluZGV4IDBjOTY5MTEuLmE5MDYyNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80MHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDB4LlMKQEAgLTEwMywyMSArMTAzLDIxIEBACiAKIC8qCiAgKiBFeGNlcHRpb24gdmVjdG9yIGVudHJ5IGNvZGUuIFRoaXMgY29kZSBydW5zIHdpdGggYWRkcmVzcyB0cmFuc2xhdGlvbgotICogdHVybmVkIG9mZiAoaS5lLiB1c2luZyBwaHlzaWNhbCBhZGRyZXNzZXMpLiBXZSBhc3N1bWUgU1BSRzMgaGFzIHRoZQotICogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY3VycmVudCB0YXNrIHRocmVhZF9zdHJ1Y3QuCisgKiB0dXJuZWQgb2ZmIChpLmUuIHVzaW5nIHBoeXNpY2FsIGFkZHJlc3NlcykuIFdlIGFzc3VtZSBTUFJHX1RIUkVBRCBoYXMKKyAqIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IHRhc2sgdGhyZWFkX3N0cnVjdC4KICAqIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGhhdmUgZGVjcmVtZW50ZWQgcjEgYmVmb3JlIHdlIHdyaXRlIHRvIGFueSBmaWVsZHMKICAqIG9mIHRoZSBleGNlcHRpb24gZnJhbWUsIHNpbmNlIGEgY3JpdGljYWwgaW50ZXJydXB0IGNvdWxkIG9jY3VyIGF0IGFueQogICogdGltZSwgYW5kIGl0IHdpbGwgd3JpdGUgdG8gdGhlIGFyZWEgaW1tZWRpYXRlbHkgYmVsb3cgdGhlIGN1cnJlbnQgcjEuCiAgKi8KICNkZWZpbmUgTk9STUFMX0VYQ0VQVElPTl9QUk9MT0cJCQkJCQkgICAgIFwKLQltdHNwcglTUFJOX1NQUkcwLHIxMDsJCS8qIHNhdmUgdHdvIHJlZ2lzdGVycyB0byB3b3JrIHdpdGggKi9cCi0JbXRzcHIJU1BSTl9TUFJHMSxyMTE7CQkJCQkJICAgICBcCi0JbXRzcHIJU1BSTl9TUFJHMixyMTsJCQkJCQkgICAgIFwKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEwOwkvKiBzYXZlIHR3byByZWdpc3RlcnMgdG8gd29yayB3aXRoICovXAorCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMSxyMTE7CQkJCQkgICAgIFwKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDIscjE7CQkJCQkgICAgIFwKIAltZmNyCXIxMDsJCQkvKiBzYXZlIENSIGluIHIxMCBmb3Igbm93CSAgICovXAogCW1mc3ByCXIxMSxTUFJOX1NSUjE7CQkvKiBjaGVjayB3aGV0aGVyIHVzZXIgb3Iga2VybmVsICAgICovXAogCWFuZGkuCXIxMSxyMTEsTVNSX1BSOwkJCQkJCSAgICAgXAogCWJlcQkxZjsJCQkJCQkJICAgICBcCi0JbWZzcHIJcjEsU1BSTl9TUFJHMzsJCS8qIGlmIGZyb20gdXNlciwgc3RhcnQgYXQgdG9wIG9mICAgKi9cCisJbWZzcHIJcjEsU1BSTl9TUFJHX1RIUkVBRDsJLyogaWYgZnJvbSB1c2VyLCBzdGFydCBhdCB0b3Agb2YgICAqL1wKIAlsd3oJcjEsVEhSRUFEX0lORk8tVEhSRUFEKHIxKTsgLyogdGhpcyB0aHJlYWQncyBrZXJuZWwgc3RhY2sgICAqL1wKIAlhZGRpCXIxLHIxLFRIUkVBRF9TSVpFOwkJCQkJICAgICBcCiAxOglzdWJpCXIxLHIxLElOVF9GUkFNRV9TSVpFOwkvKiBBbGxvY2F0ZSBhbiBleGNlcHRpb24gZnJhbWUgICAgICovXApAQCAtMTI1LDEzICsxMjUsMTMgQEAKIAlzdHcJcjEwLF9DQ1IocjExKTsgICAgICAgICAgLyogc2F2ZSB2YXJpb3VzIHJlZ2lzdGVycwkgICAqL1wKIAlzdHcJcjEyLEdQUjEyKHIxMSk7CQkJCQkJICAgICBcCiAJc3R3CXI5LEdQUjkocjExKTsJCQkJCQkgICAgIFwKLQltZnNwcglyMTAsU1BSTl9TUFJHMDsJCQkJCQkgICAgIFwKKwltZnNwcglyMTAsU1BSTl9TUFJHX1NDUkFUQ0gwOwkJCQkJICAgICBcCiAJc3R3CXIxMCxHUFIxMChyMTEpOwkJCQkJCSAgICAgXAotCW1mc3ByCXIxMixTUFJOX1NQUkcxOwkJCQkJCSAgICAgXAorCW1mc3ByCXIxMixTUFJOX1NQUkdfU0NSQVRDSDE7CQkJCQkgICAgIFwKIAlzdHcJcjEyLEdQUjExKHIxMSk7CQkJCQkJICAgICBcCiAJbWZscglyMTA7CQkJCQkJCSAgICAgXAogCXN0dwlyMTAsX0xJTksocjExKTsJCQkJCQkgICAgIFwKLQltZnNwcglyMTAsU1BSTl9TUFJHMjsJCQkJCQkgICAgIFwKKwltZnNwcglyMTAsU1BSTl9TUFJHX1NDUkFUQ0gyOwkJCQkJICAgICBcCiAJbWZzcHIJcjEyLFNQUk5fU1JSMDsJCQkJCQkgICAgIFwKIAlzdHcJcjEwLEdQUjEocjExKTsJCQkJCQkgICAgIFwKIAltZnNwcglyOSxTUFJOX1NSUjE7CQkJCQkJICAgICBcCkBAIC0xNjAsNyArMTYwLDcgQEAKIAlsd3oJcjExLGNyaXRpcnFfY3R4QGwocjExKTsJCQkJCSAgICAgXAogCWJlcQkxZjsJCQkJCQkJICAgICBcCiAJLyogQ09NSU5HIEZST00gVVNFUiBNT0RFICovCQkJCQkgICAgIFwKLQltZnNwcglyMTEsU1BSTl9TUFJHMzsJCS8qIGlmIGZyb20gdXNlciwgc3RhcnQgYXQgdG9wIG9mICAgKi9cCisJbWZzcHIJcjExLFNQUk5fU1BSR19USFJFQUQ7CS8qIGlmIGZyb20gdXNlciwgc3RhcnQgYXQgdG9wIG9mICAgKi9cCiAJbHd6CXIxMSxUSFJFQURfSU5GTy1USFJFQUQocjExKTsgLyogdGhpcyB0aHJlYWQncyBrZXJuZWwgc3RhY2sgKi9cCiAxOglhZGRpCXIxMSxyMTEsVEhSRUFEX1NJWkUtSU5UX0ZSQU1FX1NJWkU7IC8qIEFsbG9jIGFuIGV4Y3B0IGZybSAgKi9cCiAJdG9waHlzKHIxMSxyMTEpOwkJCQkJCSAgICAgXApAQCAtMjY1LDggKzI2NSw4IEBACiAgKiBhbmQgZXhpdC4gIE90aGVyd2lzZSwgd2UgY2FsbCBoZWF2eXdpZ2h0IGZ1bmN0aW9ucyB0byBkbyB0aGUgd29yay4KICAqLwogCVNUQVJUX0VYQ0VQVElPTigweDAzMDAsCURhdGFTdG9yYWdlKQotCW10c3ByCVNQUk5fU1BSRzAsIHIxMAkJLyogU2F2ZSBzb21lIHdvcmtpbmcgcmVnaXN0ZXJzICovCi0JbXRzcHIJU1BSTl9TUFJHMSwgcjExCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLCByMTAgLyogU2F2ZSBzb21lIHdvcmtpbmcgcmVnaXN0ZXJzICovCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gxLCByMTEKICNpZmRlZiBDT05GSUdfNDAzR0NYCiAJc3R3ICAgICByMTIsIDAocjApCiAJc3R3ICAgICByOSwgNChyMCkKQEAgLTI3NSwxMiArMjc1LDEyIEBACiAJc3R3ICAgICByMTEsIDgocjApCiAJc3R3ICAgICByMTIsIDEyKHIwKQogI2Vsc2UKLQltdHNwcglTUFJOX1NQUkc0LCByMTIKLQltdHNwcglTUFJOX1NQUkc1LCByOQorCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMywgcjEyCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0g0LCByOQogCW1mY3IJcjExCiAJbWZzcHIJcjEyLCBTUFJOX1BJRAotCW10c3ByCVNQUk5fU1BSRzcsIHIxMQotCW10c3ByCVNQUk5fU1BSRzYsIHIxMgorCW10c3ByCVNQUk5fU1BSR19TQ1JBVENINiwgcjExCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0g1LCByMTIKICNlbmRpZgogCiAJLyogRmlyc3QsIGNoZWNrIGlmIGl0IHdhcyBhIHpvbmUgZmF1bHQgKHdoaWNoIG1lYW5zIGEgdXNlcgpAQCAtMzA4LDcgKzMwOCw3IEBACiAJLyogR2V0IHRoZSBQR0QgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4KIAkgKi8KIDM6Ci0JbWZzcHIJcjExLFNQUk5fU1BSRzMKKwltZnNwcglyMTEsU1BSTl9TUFJHX1RIUkVBRAogCWx3eglyMTEsUEdESVIocjExKQogNDoKIAl0b3BoeXMocjExLCByMTEpCkBAIC0zNTUsMTUgKzM1NSwxNSBAQAogCWx3eiAgICAgcjksIDQocjApCiAJbHd6ICAgICByMTIsIDAocjApCiAjZWxzZQotCW1mc3ByCXIxMiwgU1BSTl9TUFJHNgotCW1mc3ByCXIxMSwgU1BSTl9TUFJHNworCW1mc3ByCXIxMiwgU1BSTl9TUFJHX1NDUkFUQ0g1CisJbWZzcHIJcjExLCBTUFJOX1NQUkdfU0NSQVRDSDYKIAltdHNwcglTUFJOX1BJRCwgcjEyCiAJbXRjcglyMTEKLQltZnNwcglyOSwgU1BSTl9TUFJHNQotCW1mc3ByCXIxMiwgU1BSTl9TUFJHNAorCW1mc3ByCXI5LCBTUFJOX1NQUkdfU0NSQVRDSDQKKwltZnNwcglyMTIsIFNQUk5fU1BSR19TQ1JBVENIMwogI2VuZGlmCi0JbWZzcHIJcjExLCBTUFJOX1NQUkcxCi0JbWZzcHIJcjEwLCBTUFJOX1NQUkcwCisJbWZzcHIJcjExLCBTUFJOX1NQUkdfU0NSQVRDSDEKKwltZnNwcglyMTAsIFNQUk5fU1BSR19TQ1JBVENIMAogCVBQQzQwNV9FUlI3N19TWU5DCiAJcmZpCQkJLyogU2hvdWxkIHN5bmMgc2hhZG93IFRMQnMgKi8KIAliCS4JCS8qIHByZXZlbnQgcHJlZmV0Y2ggcGFzdCByZmkgKi8KQEAgLTM4MCwxNSArMzgwLDE1IEBACiAJbHd6ICAgICByOSwgNChyMCkKIAlsd3ogICAgIHIxMiwgMChyMCkKICNlbHNlCi0JbWZzcHIJcjEyLCBTUFJOX1NQUkc2Ci0JbWZzcHIJcjExLCBTUFJOX1NQUkc3CisJbWZzcHIJcjEyLCBTUFJOX1NQUkdfU0NSQVRDSDUKKwltZnNwcglyMTEsIFNQUk5fU1BSR19TQ1JBVENINgogCW10c3ByCVNQUk5fUElELCByMTIKIAltdGNyCXIxMQotCW1mc3ByCXI5LCBTUFJOX1NQUkc1Ci0JbWZzcHIJcjEyLCBTUFJOX1NQUkc0CisJbWZzcHIJcjksIFNQUk5fU1BSR19TQ1JBVENINAorCW1mc3ByCXIxMiwgU1BSTl9TUFJHX1NDUkFUQ0gzCiAjZW5kaWYKLQltZnNwcglyMTEsIFNQUk5fU1BSRzEKLQltZnNwcglyMTAsIFNQUk5fU1BSRzAKKwltZnNwcglyMTEsIFNQUk5fU1BSR19TQ1JBVENIMQorCW1mc3ByCXIxMCwgU1BSTl9TUFJHX1NDUkFUQ0gwCiAJYglEYXRhQWNjZXNzCiAKIC8qCkBAIC00NjYsOCArNDY2LDggQEAKICAqIGxvYWQgVExCIGVudHJpZXMgZnJvbSB0aGUgcGFnZSB0YWJsZSBpZiB0aGV5IGV4aXN0LgogICovCiAJU1RBUlRfRVhDRVBUSU9OKDB4MTEwMCwJRFRMQk1pc3MpCi0JbXRzcHIJU1BSTl9TUFJHMCwgcjEwCQkvKiBTYXZlIHNvbWUgd29ya2luZyByZWdpc3RlcnMgKi8KLQltdHNwcglTUFJOX1NQUkcxLCByMTEKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAsIHIxMCAvKiBTYXZlIHNvbWUgd29ya2luZyByZWdpc3RlcnMgKi8KKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDEsIHIxMQogI2lmZGVmIENPTkZJR180MDNHQ1gKIAlzdHcgICAgIHIxMiwgMChyMCkKIAlzdHcgICAgIHI5LCA0KHIwKQpAQCAtNDc2LDEyICs0NzYsMTIgQEAKIAlzdHcgICAgIHIxMSwgOChyMCkKIAlzdHcgICAgIHIxMiwgMTIocjApCiAjZWxzZQotCW10c3ByCVNQUk5fU1BSRzQsIHIxMgotCW10c3ByCVNQUk5fU1BSRzUsIHI5CisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gzLCByMTIKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDQsIHI5CiAJbWZjcglyMTEKIAltZnNwcglyMTIsIFNQUk5fUElECi0JbXRzcHIJU1BSTl9TUFJHNywgcjExCi0JbXRzcHIJU1BSTl9TUFJHNiwgcjEyCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0g2LCByMTEKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDUsIHIxMgogI2VuZGlmCiAJbWZzcHIJcjEwLCBTUFJOX0RFQVIJCS8qIEdldCBmYXVsdGluZyBhZGRyZXNzICovCiAKQEAgLTUwMCw3ICs1MDAsNyBAQAogCS8qIEdldCB0aGUgUEdEIGZvciB0aGUgY3VycmVudCB0aHJlYWQuCiAJICovCiAzOgotCW1mc3ByCXIxMSxTUFJOX1NQUkczCisJbWZzcHIJcjExLFNQUk5fU1BSR19USFJFQUQKIAlsd3oJcjExLFBHRElSKHIxMSkKIDQ6CiAJdG9waHlzKHIxMSwgcjExKQpAQCAtNTUwLDE1ICs1NTAsMTUgQEAKIAlsd3ogICAgIHI5LCA0KHIwKQogCWx3eiAgICAgcjEyLCAwKHIwKQogI2Vsc2UKLQltZnNwcglyMTIsIFNQUk5fU1BSRzYKLQltZnNwcglyMTEsIFNQUk5fU1BSRzcKKwltZnNwcglyMTIsIFNQUk5fU1BSR19TQ1JBVENINQorCW1mc3ByCXIxMSwgU1BSTl9TUFJHX1NDUkFUQ0g2CiAJbXRzcHIJU1BSTl9QSUQsIHIxMgogCW10Y3IJcjExCi0JbWZzcHIJcjksIFNQUk5fU1BSRzUKLQltZnNwcglyMTIsIFNQUk5fU1BSRzQKKwltZnNwcglyOSwgU1BSTl9TUFJHX1NDUkFUQ0g0CisJbWZzcHIJcjEyLCBTUFJOX1NQUkdfU0NSQVRDSDMKICNlbmRpZgotCW1mc3ByCXIxMSwgU1BSTl9TUFJHMQotCW1mc3ByCXIxMCwgU1BSTl9TUFJHMAorCW1mc3ByCXIxMSwgU1BSTl9TUFJHX1NDUkFUQ0gxCisJbWZzcHIJcjEwLCBTUFJOX1NQUkdfU0NSQVRDSDAKIAliCURhdGFBY2Nlc3MKIAogLyogMHgxMjAwIC0gSW5zdHJ1Y3Rpb24gVExCIE1pc3MgRXhjZXB0aW9uCkBAIC01NjYsOCArNTY2LDggQEAKICAqIHJlZ2lzdGVycyBhbmQgYmFpbG91dCB0byBhIGRpZmZlcmVudCBwb2ludC4KICAqLwogCVNUQVJUX0VYQ0VQVElPTigweDEyMDAsCUlUTEJNaXNzKQotCW10c3ByCVNQUk5fU1BSRzAsIHIxMAkJLyogU2F2ZSBzb21lIHdvcmtpbmcgcmVnaXN0ZXJzICovCi0JbXRzcHIJU1BSTl9TUFJHMSwgcjExCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLCByMTAJIC8qIFNhdmUgc29tZSB3b3JraW5nIHJlZ2lzdGVycyAqLworCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMSwgcjExCiAjaWZkZWYgQ09ORklHXzQwM0dDWAogCXN0dyAgICAgcjEyLCAwKHIwKQogCXN0dyAgICAgcjksIDQocjApCkBAIC01NzYsMTIgKzU3NiwxMiBAQAogCXN0dyAgICAgcjExLCA4KHIwKQogCXN0dyAgICAgcjEyLCAxMihyMCkKICNlbHNlCi0JbXRzcHIJU1BSTl9TUFJHNCwgcjEyCi0JbXRzcHIJU1BSTl9TUFJHNSwgcjkKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDMsIHIxMgorCW10c3ByCVNQUk5fU1BSR19TQ1JBVENINCwgcjkKIAltZmNyCXIxMQogCW1mc3ByCXIxMiwgU1BSTl9QSUQKLQltdHNwcglTUFJOX1NQUkc3LCByMTEKLQltdHNwcglTUFJOX1NQUkc2LCByMTIKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDYsIHIxMQorCW10c3ByCVNQUk5fU1BSR19TQ1JBVENINSwgcjEyCiAjZW5kaWYKIAltZnNwcglyMTAsIFNQUk5fU1JSMAkJLyogR2V0IGZhdWx0aW5nIGFkZHJlc3MgKi8KIApAQCAtNjAwLDcgKzYwMCw3IEBACiAJLyogR2V0IHRoZSBQR0QgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4KIAkgKi8KIDM6Ci0JbWZzcHIJcjExLFNQUk5fU1BSRzMKKwltZnNwcglyMTEsU1BSTl9TUFJHX1RIUkVBRAogCWx3eglyMTEsUEdESVIocjExKQogNDoKIAl0b3BoeXMocjExLCByMTEpCkBAIC02NTAsMTUgKzY1MCwxNSBAQAogCWx3eiAgICAgcjksIDQocjApCiAJbHd6ICAgICByMTIsIDAocjApCiAjZWxzZQotCW1mc3ByCXIxMiwgU1BSTl9TUFJHNgotCW1mc3ByCXIxMSwgU1BSTl9TUFJHNworCW1mc3ByCXIxMiwgU1BSTl9TUFJHX1NDUkFUQ0g1CisJbWZzcHIJcjExLCBTUFJOX1NQUkdfU0NSQVRDSDYKIAltdHNwcglTUFJOX1BJRCwgcjEyCiAJbXRjcglyMTEKLQltZnNwcglyOSwgU1BSTl9TUFJHNQotCW1mc3ByCXIxMiwgU1BSTl9TUFJHNAorCW1mc3ByCXI5LCBTUFJOX1NQUkdfU0NSQVRDSDQKKwltZnNwcglyMTIsIFNQUk5fU1BSR19TQ1JBVENIMwogI2VuZGlmCi0JbWZzcHIJcjExLCBTUFJOX1NQUkcxCi0JbWZzcHIJcjEwLCBTUFJOX1NQUkcwCisJbWZzcHIJcjExLCBTUFJOX1NQUkdfU0NSQVRDSDEKKwltZnNwcglyMTAsIFNQUk5fU1BSR19TQ1JBVENIMAogCWIJSW5zdHJ1Y3Rpb25BY2Nlc3MKIAogCUVYQ0VQVElPTigweDEzMDAsIFRyYXBfMTMsIHVua25vd25fZXhjZXB0aW9uLCBFWENfWEZFUl9FRSkKQEAgLTgwMywxNSArODAzLDE1IEBACiAJbHd6ICAgICByOSwgNChyMCkKIAlsd3ogICAgIHIxMiwgMChyMCkKICNlbHNlCi0JbWZzcHIJcjEyLCBTUFJOX1NQUkc2Ci0JbWZzcHIJcjExLCBTUFJOX1NQUkc3CisJbWZzcHIJcjEyLCBTUFJOX1NQUkdfU0NSQVRDSDUKKwltZnNwcglyMTEsIFNQUk5fU1BSR19TQ1JBVENINgogCW10c3ByCVNQUk5fUElELCByMTIKIAltdGNyCXIxMQotCW1mc3ByCXI5LCBTUFJOX1NQUkc1Ci0JbWZzcHIJcjEyLCBTUFJOX1NQUkc0CisJbWZzcHIJcjksIFNQUk5fU1BSR19TQ1JBVENINAorCW1mc3ByCXIxMiwgU1BSTl9TUFJHX1NDUkFUQ0gzCiAjZW5kaWYKLQltZnNwcglyMTEsIFNQUk5fU1BSRzEKLQltZnNwcglyMTAsIFNQUk5fU1BSRzAKKwltZnNwcglyMTEsIFNQUk5fU1BSR19TQ1JBVENIMQorCW1mc3ByCXIxMCwgU1BSTl9TUFJHX1NDUkFUQ0gwCiAJUFBDNDA1X0VSUjc3X1NZTkMKIAlyZmkJCQkvKiBTaG91bGQgc3luYyBzaGFkb3cgVExCcyAqLwogCWIJLgkJLyogcHJldmVudCBwcmVmZXRjaCBwYXN0IHJmaSAqLwpAQCAtODM1LDcgKzgzNSw3IEBACiAJLyogcHRyIHRvIHBoeXMgY3VycmVudCB0aHJlYWQgKi8KIAl0b3BoeXMocjQscjIpCiAJYWRkaQlyNCxyNCxUSFJFQUQJLyogaW5pdCB0YXNrJ3MgVEhSRUFEICovCi0JbXRzcHIJU1BSTl9TUFJHMyxyNAorCW10c3ByCVNQUk5fU1BSR19USFJFQUQscjQKIAogCS8qIHN0YWNrICovCiAJbGlzCXIxLGluaXRfdGhyZWFkX3VuaW9uQGhhCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDR4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDR4LlMKaW5kZXggMThkOGExNi4uNzExMzY4YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQ0eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80NHguUwpAQCAtMjM5LDcgKzIzOSw3IEBACiAKIAkvKiBwdHIgdG8gY3VycmVudCB0aHJlYWQgKi8KIAlhZGRpCXI0LHIyLFRIUkVBRAkvKiBpbml0IHRhc2sncyBUSFJFQUQgKi8KLQltdHNwcglTUFJOX1NQUkczLHI0CisJbXRzcHIJU1BSTl9TUFJHX1RIUkVBRCxyNAogCiAJLyogc3RhY2sgKi8KIAlsaXMJcjEsaW5pdF90aHJlYWRfdW5pb25AaApAQCAtMzUwLDEyICszNTAsMTIgQEAKIAogCS8qIERhdGEgVExCIEVycm9yIEludGVycnVwdCAqLwogCVNUQVJUX0VYQ0VQVElPTihEYXRhVExCRXJyb3IpCi0JbXRzcHIJU1BSTl9TUFJHMCwgcjEwCQkvKiBTYXZlIHNvbWUgd29ya2luZyByZWdpc3RlcnMgKi8KLQltdHNwcglTUFJOX1NQUkcxLCByMTEKLQltdHNwcglTUFJOX1NQUkc0VywgcjEyCi0JbXRzcHIJU1BSTl9TUFJHNVcsIHIxMworCW10c3ByCVNQUk5fU1BSR19XU0NSQVRDSDAsIHIxMAkJLyogU2F2ZSBzb21lIHdvcmtpbmcgcmVnaXN0ZXJzICovCisJbXRzcHIJU1BSTl9TUFJHX1dTQ1JBVENIMSwgcjExCisJbXRzcHIJU1BSTl9TUFJHX1dTQ1JBVENIMiwgcjEyCisJbXRzcHIJU1BSTl9TUFJHX1dTQ1JBVENIMywgcjEzCiAJbWZjcglyMTEKLQltdHNwcglTUFJOX1NQUkc3VywgcjExCisJbXRzcHIJU1BSTl9TUFJHX1dTQ1JBVENINCwgcjExCiAJbWZzcHIJcjEwLCBTUFJOX0RFQVIJCS8qIEdldCBmYXVsdGluZyBhZGRyZXNzICovCiAKIAkvKiBJZiB3ZSBhcmUgZmF1bHRpbmcgYSBrZXJuZWwgYWRkcmVzcywgd2UgaGF2ZSB0byB1c2UgdGhlCkBAIC0zNzQsNyArMzc0LDcgQEAKIAogCS8qIEdldCB0aGUgUEdEIGZvciB0aGUgY3VycmVudCB0aHJlYWQgKi8KIDM6Ci0JbWZzcHIJcjExLFNQUk5fU1BSRzMKKwltZnNwcglyMTEsU1BSTl9TUFJHX1RIUkVBRAogCWx3eglyMTEsUEdESVIocjExKQogCiAJLyogTG9hZCBQSUQgaW50byBNTVVDUiBUSUQgKi8KQEAgLTQ0NiwxMiArNDQ2LDEyIEBACiAJLyogVGhlIGJhaWxvdXQuICBSZXN0b3JlIHJlZ2lzdGVycyB0byBwcmUtZXhjZXB0aW9uIGNvbmRpdGlvbnMKIAkgKiBhbmQgY2FsbCB0aGUgaGVhdnl3ZWlnaHRzIHRvIGhlbHAgdXMgb3V0LgogCSAqLwotCW1mc3ByCXIxMSwgU1BSTl9TUFJHN1IKKwltZnNwcglyMTEsIFNQUk5fU1BSR19SU0NSQVRDSDQKIAltdGNyCXIxMQotCW1mc3ByCXIxMywgU1BSTl9TUFJHNVIKLQltZnNwcglyMTIsIFNQUk5fU1BSRzRSCi0JbWZzcHIJcjExLCBTUFJOX1NQUkcxCi0JbWZzcHIJcjEwLCBTUFJOX1NQUkcwCisJbWZzcHIJcjEzLCBTUFJOX1NQUkdfUlNDUkFUQ0gzCisJbWZzcHIJcjEyLCBTUFJOX1NQUkdfUlNDUkFUQ0gyCisJbWZzcHIJcjExLCBTUFJOX1NQUkdfUlNDUkFUQ0gxCisJbWZzcHIJcjEwLCBTUFJOX1NQUkdfUlNDUkFUQ0gwCiAJYglEYXRhU3RvcmFnZQogCiAJLyogSW5zdHJ1Y3Rpb24gVExCIEVycm9yIEludGVycnVwdCAqLwpAQCAtNDYxLDEyICs0NjEsMTIgQEAKIAkgKiB0byBhIGRpZmZlcmVudCBwb2ludC4KIAkgKi8KIAlTVEFSVF9FWENFUFRJT04oSW5zdHJ1Y3Rpb25UTEJFcnJvcikKLQltdHNwcglTUFJOX1NQUkcwLCByMTAJCS8qIFNhdmUgc29tZSB3b3JraW5nIHJlZ2lzdGVycyAqLwotCW10c3ByCVNQUk5fU1BSRzEsIHIxMQotCW10c3ByCVNQUk5fU1BSRzRXLCByMTIKLQltdHNwcglTUFJOX1NQUkc1VywgcjEzCisJbXRzcHIJU1BSTl9TUFJHX1dTQ1JBVENIMCwgcjEwIC8qIFNhdmUgc29tZSB3b3JraW5nIHJlZ2lzdGVycyAqLworCW10c3ByCVNQUk5fU1BSR19XU0NSQVRDSDEsIHIxMQorCW10c3ByCVNQUk5fU1BSR19XU0NSQVRDSDIsIHIxMgorCW10c3ByCVNQUk5fU1BSR19XU0NSQVRDSDMsIHIxMwogCW1mY3IJcjExCi0JbXRzcHIJU1BSTl9TUFJHN1csIHIxMQorCW10c3ByCVNQUk5fU1BSR19XU0NSQVRDSDQsIHIxMQogCW1mc3ByCXIxMCwgU1BSTl9TUlIwCQkvKiBHZXQgZmF1bHRpbmcgYWRkcmVzcyAqLwogCiAJLyogSWYgd2UgYXJlIGZhdWx0aW5nIGEga2VybmVsIGFkZHJlc3MsIHdlIGhhdmUgdG8gdXNlIHRoZQpAQCAtNDg1LDcgKzQ4NSw3IEBACiAKIAkvKiBHZXQgdGhlIFBHRCBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkICovCiAzOgotCW1mc3ByCXIxMSxTUFJOX1NQUkczCisJbWZzcHIJcjExLFNQUk5fU1BSR19USFJFQUQKIAlsd3oJcjExLFBHRElSKHIxMSkKIAogCS8qIExvYWQgUElEIGludG8gTU1VQ1IgVElEICovCkBAIC00OTcsNyArNDk3LDcgQEAKIAltdHNwcglTUFJOX01NVUNSLHIxMgogCiAJLyogTWFrZSB1cCB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMgKi8KLQlsaQlyMTMsX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfSFdFWEVDCisJbGkJcjEzLF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0VYRUMKIAogCS8qIENvbXB1dGUgcGdkaXIvcG1kIG9mZnNldCAqLwogCXJsd2lubSAJcjEyLCByMTAsIFBQQzQ0eF9QR0RfT0ZGX1NISUZULCBQUEM0NHhfUEdEX09GRl9NQVNLX0JJVCwgMjkKQEAgLTU0MiwxMiArNTQyLDEyIEBACiAJLyogVGhlIGJhaWxvdXQuICBSZXN0b3JlIHJlZ2lzdGVycyB0byBwcmUtZXhjZXB0aW9uIGNvbmRpdGlvbnMKIAkgKiBhbmQgY2FsbCB0aGUgaGVhdnl3ZWlnaHRzIHRvIGhlbHAgdXMgb3V0LgogCSAqLwotCW1mc3ByCXIxMSwgU1BSTl9TUFJHN1IKKwltZnNwcglyMTEsIFNQUk5fU1BSR19SU0NSQVRDSDQKIAltdGNyCXIxMQotCW1mc3ByCXIxMywgU1BSTl9TUFJHNVIKLQltZnNwcglyMTIsIFNQUk5fU1BSRzRSCi0JbWZzcHIJcjExLCBTUFJOX1NQUkcxCi0JbWZzcHIJcjEwLCBTUFJOX1NQUkcwCisJbWZzcHIJcjEzLCBTUFJOX1NQUkdfUlNDUkFUQ0gzCisJbWZzcHIJcjEyLCBTUFJOX1NQUkdfUlNDUkFUQ0gyCisJbWZzcHIJcjExLCBTUFJOX1NQUkdfUlNDUkFUQ0gxCisJbWZzcHIJcjEwLCBTUFJOX1NQUkdfUlNDUkFUQ0gwCiAJYglJbnN0cnVjdGlvblN0b3JhZ2UKIAogCS8qIERlYnVnIEludGVycnVwdCAqLwpAQCAtNTkzLDEyICs1OTMsMTIgQEAKIAogCS8qIERvbmUuLi5yZXN0b3JlIHJlZ2lzdGVycyBhbmQgZ2V0IG91dCBvZiBoZXJlLgogCSovCi0JbWZzcHIJcjExLCBTUFJOX1NQUkc3UgorCW1mc3ByCXIxMSwgU1BSTl9TUFJHX1JTQ1JBVENINAogCW10Y3IJcjExCi0JbWZzcHIJcjEzLCBTUFJOX1NQUkc1UgotCW1mc3ByCXIxMiwgU1BSTl9TUFJHNFIKLQltZnNwcglyMTEsIFNQUk5fU1BSRzEKLQltZnNwcglyMTAsIFNQUk5fU1BSRzAKKwltZnNwcglyMTMsIFNQUk5fU1BSR19SU0NSQVRDSDMKKwltZnNwcglyMTIsIFNQUk5fU1BSR19SU0NSQVRDSDIKKwltZnNwcglyMTEsIFNQUk5fU1BSR19SU0NSQVRDSDEKKwltZnNwcglyMTAsIFNQUk5fU1BSR19SU0NSQVRDSDAKIAlyZmkJCQkJCS8qIEZvcmNlIGNvbnRleHQgY2hhbmdlICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCmluZGV4IDAxMjUwNWUuLmMzOGFmZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2VfNjQuaD4KLSNpbmNsdWRlIDxhc20vZXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8YXNtL2lycWZsYWdzLmg+CiAKIC8qIFRoZSBwaHlzaWNhbCBtZW1vcnkgaXMgbGF5ZWQgb3V0IHN1Y2ggdGhhdCB0aGUgc2Vjb25kYXJ5IHByb2Nlc3NvcgpAQCAtMTIyLDEwICsxMjEsMTEgQEAKICAqLwogCS5nbG9ibAlfX3NlY29uZGFyeV9ob2xkCiBfX3NlY29uZGFyeV9ob2xkOgorI2lmbmRlZiBDT05GSUdfUFBDX0JPT0szRQogCW1mbXNyCXIyNAogCW9yaQlyMjQscjI0LE1TUl9SSQogCW10bXNyZAlyMjQJCQkvKiBSSSBvbiAqLwotCisjZW5kaWYKIAkvKiBHcmFiIG91ciBwaHlzaWNhbCBjcHUgbnVtYmVyICovCiAJbXIJcjI0LHIzCiAKQEAgLTE0NCw2ICsxNDQsNyBAQAogCWxkCXI0LDAocjQpCQkvKiBkZXJlZiBmdW5jdGlvbiBkZXNjcmlwdG9yICovCiAJbXRjdHIJcjQKIAltcglyMyxyMjQKKwlsaQlyNCwwCiAJYmN0cgogI2Vsc2UKIAlCVUdfT1BDT0RFCkBAIC0xNjQsMjEgKzE2NSw0OSBAQAogI2luY2x1ZGUgImV4Y2VwdGlvbnMtNjRzLlMiCiAjZW5kaWYKIAorX0dMT0JBTChnZW5lcmljX3NlY29uZGFyeV90aHJlYWRfaW5pdCkKKwltcglyMjQscjMKKworCS8qIHR1cm4gb24gNjQtYml0IG1vZGUgKi8KKwlibAkuZW5hYmxlXzY0Yl9tb2RlCisKKwkvKiBnZXQgYSB2YWxpZCBUT0MgcG9pbnRlciwgd2hlcmV2ZXIgd2UncmUgbWFwcGVkIGF0ICovCisJYmwJLnJlbGF0aXZlX3RvYworCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKKwkvKiBCb29rM0UgaW5pdGlhbGl6YXRpb24gKi8KKwltcglyMyxyMjQKKwlibAkuYm9vazNlX3NlY29uZGFyeV90aHJlYWRfaW5pdAorI2VuZGlmCisJYglnZW5lcmljX3NlY29uZGFyeV9jb21tb25faW5pdAogCiAvKgogICogT24gcFNlcmllcyBhbmQgbW9zdCBvdGhlciBwbGF0Zm9ybXMsIHNlY29uZGFyeSBwcm9jZXNzb3JzIHNwaW4KICAqIGluIHRoZSBmb2xsb3dpbmcgY29kZS4KICAqIEF0IGVudHJ5LCByMyA9IHRoaXMgcHJvY2Vzc29yJ3MgbnVtYmVyIChwaHlzaWNhbCBjcHUgaWQpCisgKgorICogT24gQm9vazNFLCByNCA9IDEgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaW5pdGlhbCBUTEIgZW50cnkgZm9yCisgKiB0aGlzIGNvcmUgYWxyZWFkeSBleGlzdHMgKHNldHVwIHZpYSBzb21lIG90aGVyIG1lY2hhbmlzbSBzdWNoCisgKiBhcyBTQ09NIGJlZm9yZSBlbnRyeSkuCiAgKi8KIF9HTE9CQUwoZ2VuZXJpY19zZWNvbmRhcnlfc21wX2luaXQpCiAJbXIJcjI0LHIzCi0JCisJbXIJcjI1LHI0CisKIAkvKiB0dXJuIG9uIDY0LWJpdCBtb2RlICovCiAJYmwJLmVuYWJsZV82NGJfbW9kZQogCi0JLyogZ2V0IHRoZSBUT0MgcG9pbnRlciAocmVhbCBhZGRyZXNzKSAqLworCS8qIGdldCBhIHZhbGlkIFRPQyBwb2ludGVyLCB3aGVyZXZlciB3ZSdyZSBtYXBwZWQgYXQgKi8KIAlibAkucmVsYXRpdmVfdG9jCiAKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorCS8qIEJvb2szRSBpbml0aWFsaXphdGlvbiAqLworCW1yCXIzLHIyNAorCW1yCXI0LHIyNQorCWJsCS5ib29rM2Vfc2Vjb25kYXJ5X2NvcmVfaW5pdAorI2VuZGlmCisKK2dlbmVyaWNfc2Vjb25kYXJ5X2NvbW1vbl9pbml0OgogCS8qIFNldCB1cCBhIHBhY2EgdmFsdWUgZm9yIHRoaXMgcHJvY2Vzc29yLiBTaW5jZSB3ZSBoYXZlIHRoZQogCSAqIHBoeXNpY2FsIGNwdSBpZCBpbiByMjQsIHdlIG5lZWQgdG8gc2VhcmNoIHRoZSBwYWNhcyB0byBmaW5kCiAJICogd2hpY2ggbG9naWNhbCBpZCBtYXBzIHRvIG91ciBwaHlzaWNhbCBvbmUuCkBAIC0xOTYsNyArMjI1LDEyIEBACiAJbXIJcjMscjI0CQkJLyogbm90IGZvdW5kLCBjb3B5IHBoeXMgdG8gcjMJICovCiAJYgkua2V4ZWNfd2FpdAkJLyogbmV4dCBrZXJuZWwgbWlnaHQgZG8gYmV0dGVyCSAqLwogCi0yOgltdHNwcglTUFJOX1NQUkczLHIxMwkJLyogU2F2ZSB2YWRkciBvZiBwYWNhIGluIFNQUkczCSAqLworMjoJbXRzcHIJU1BSTl9TUFJHX1BBQ0EscjEzCS8qIFNhdmUgdmFkZHIgb2YgcGFjYSBpbiBhbiBTUFJHICovCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKKwlhZGRpCXIxMixyMTMsUEFDQV9FWFRMQgkvKiBhbmQgVExCIGV4YyBmcmFtZSBpbiBhbm90aGVyICAqLworCW10c3ByCVNQUk5fU1BSR19UTEJfRVhGUkFNRSxyMTIKKyNlbmRpZgorCiAJLyogRnJvbSBub3cgb24sIHIyNCBpcyBleHBlY3RlZCB0byBiZSBsb2dpY2FsIGNwdWlkICovCiAJbXIJcjI0LHI1CiAzOglITVRfTE9XCkBAIC0yMzIsNiArMjY2LDcgQEAKICAqIFR1cm4gdGhlIE1NVSBvZmYuCiAgKiBBc3N1bWVzIHdlJ3JlIG1hcHBlZCBFQSA9PSBSQSBpZiB0aGUgTU1VIGlzIG9uLgogICovCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM1MKIF9TVEFUSUMoX19tbXVfb2ZmKQogCW1mbXNyCXIzCiAJYW5kaS4JcjAscjMsTVNSX0lSfE1TUl9EUgpAQCAtMjQzLDYgKzI3OCw3IEBACiAJc3luYwogCXJmaWQKIAliCS4JLyogcHJldmVudCBzcGVjdWxhdGl2ZSBleGVjdXRpb24gKi8KKyNlbmRpZgogCiAKIC8qCkBAIC0yODAsNiArMzE2LDEwIEBACiAJbXIJcjMxLHIzCiAJbXIJcjMwLHI0CiAKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorCWJsCS5zdGFydF9pbml0aWFsaXphdGlvbl9ib29rM2UKKwliCS5fX2FmdGVyX3Byb21fc3RhcnQKKyNlbHNlCiAJLyogU2V0dXAgc29tZSBjcml0aWNhbCA5NzAgU1BScyBiZWZvcmUgc3dpdGNoaW5nIE1NVSBvZmYgKi8KIAltZnNwcglyMCxTUFJOX1BWUgogCXNyd2kJcjAscjAsMTYKQEAgLTI5Nyw2ICszMzcsNyBAQAogCS8qIFN3aXRjaCBvZmYgTU1VIGlmIG5vdCBhbHJlYWR5IG9mZiAqLwogCWJsCS5fX21tdV9vZmYKIAliCS5fX2FmdGVyX3Byb21fc3RhcnQKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0JPT0szRSAqLwogCiBfSU5JVF9TVEFUSUMoX19ib290X2Zyb21fcHJvbSkKICNpZmRlZiBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORQpAQCAtMzU5LDEwICs0MDAsMTYgQEAKICAqIE5vdGU6IFRoaXMgcHJvY2VzcyBvdmVyd3JpdGVzIHRoZSBPRiBleGNlcHRpb24gdmVjdG9ycy4KICAqLwogCWxpCXIzLDAJCQkvKiB0YXJnZXQgYWRkciAqLworI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCisJdG92aXJ0KHIzLHIzKQkJCS8qIG9uIGJvb2tlLCB3ZSBhbHJlYWR5IHJ1biBhdCBQQUdFX09GRlNFVCAqLworI2VuZGlmCiAJbXIuCXI0LHIyNgkJCS8qIEluIHNvbWUgY2FzZXMgdGhlIGxvYWRlciBtYXkgICovCiAJYmVxCTlmCQkJLyogaGF2ZSBhbHJlYWR5IHB1dCB1cyBhdCB6ZXJvICovCiAJbGkJcjYsMHgxMDAJCS8qIFN0YXJ0IG9mZnNldCwgdGhlIGZpcnN0IDB4MTAwICovCiAJCQkJCS8qIGJ5dGVzIHdlcmUgY29waWVkIGVhcmxpZXIuCSAqLworI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCisJdG92aXJ0KHI2LHI2KQkJCS8qIG9uIGJvb2tlLCB3ZSBhbHJlYWR5IHJ1biBhdCBQQUdFX09GRlNFVCAqLworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAogLyoKQEAgLTQ4NSw3ICs1MzIsNyBAQAogCUxPQURfUkVHX0FERFIocjQscGFjYSkJCS8qIEdldCBiYXNlIHZhZGRyIG9mIHBhY2EgYXJyYXkJKi8KIAltdWxsaQlyMTMscjI0LFBBQ0FfU0laRQkvKiBDYWxjdWxhdGUgdmFkZHIgb2YgcmlnaHQgcGFjYSAqLwogCWFkZAlyMTMscjEzLHI0CQkvKiBmb3IgdGhpcyBwcm9jZXNzb3IuCQkqLwotCW10c3ByCVNQUk5fU1BSRzMscjEzCQkvKiBTYXZlIHZhZGRyIG9mIHBhY2EgaW4gU1BSRzMJKi8KKwltdHNwcglTUFJOX1NQUkdfUEFDQSxyMTMJLyogU2F2ZSB2YWRkciBvZiBwYWNhIGluIGFuIFNQUkcqLwogCiAJLyogQ3JlYXRlIGEgdGVtcCBrZXJuZWwgc3RhY2sgZm9yIHVzZSBiZWZvcmUgcmVsb2NhdGlvbiBpcyBvbi4JKi8KIAlsZAlyMSxQQUNBRU1FUkdTUChyMTMpCkBAIC01MDMsMTEgKzU1MCwxNCBAQAogICogICAxLiBQcm9jZXNzb3IgbnVtYmVyCiAgKiAgIDIuIFNlZ21lbnQgdGFibGUgcG9pbnRlciAodmlydHVhbCBhZGRyZXNzKQogICogT24gZW50cnkgdGhlIGZvbGxvd2luZyBhcmUgc2V0OgotICogICByMQk9IHN0YWNrIHBvaW50ZXIuICB2YWRkciBmb3IgaVNlcmllcywgcmFkZHIgKHRlbXAgc3RhY2spIGZvciBwU2VyaWVzCi0gKiAgIHIyNCAgID0gY3B1IyAoaW4gTGludXggdGVybXMpCi0gKiAgIHIxMyAgID0gcGFjYSB2aXJ0dWFsIGFkZHJlc3MKLSAqICAgU1BSRzMgPSBwYWNhIHZpcnR1YWwgYWRkcmVzcworICogICByMQkgICAgICAgPSBzdGFjayBwb2ludGVyLiAgdmFkZHIgZm9yIGlTZXJpZXMsIHJhZGRyICh0ZW1wIHN0YWNrKSBmb3IgcFNlcmllcworICogICByMjQgICAgICAgPSBjcHUjIChpbiBMaW51eCB0ZXJtcykKKyAqICAgcjEzICAgICAgID0gcGFjYSB2aXJ0dWFsIGFkZHJlc3MKKyAqICAgU1BSR19QQUNBID0gcGFjYSB2aXJ0dWFsIGFkZHJlc3MKICAqLworCS5zZWN0aW9uICIudGV4dCI7CisJLmFsaWduIDIgOworCiAJLmdsb2JsCV9fc2Vjb25kYXJ5X3N0YXJ0CiBfX3NlY29uZGFyeV9zdGFydDoKIAkvKiBTZXQgdGhyZWFkIHByaW9yaXR5IHRvIE1FRElVTSAqLwpAQCAtNTQ0LDcgKzU5NCw3IEBACiAKIAltdHNwcglTUFJOX1NSUjAscjMKIAltdHNwcglTUFJOX1NSUjEscjQKLQlyZmlkCisJUkZJCiAJYgkuCS8qIHByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uICovCiAKIC8qIApAQCAtNTY1LDExICs2MTUsMTYgQEAKICAqLwogX0dMT0JBTChlbmFibGVfNjRiX21vZGUpCiAJbWZtc3IJcjExCQkJLyogZ3JhYiB0aGUgY3VycmVudCBNU1IgKi8KKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorCW9yaXMJcjExLHIxMSwweDgwMDAJCS8qIENNIGJpdCBzZXQsIHdlJ2xsIHNldCBJQ00gbGF0ZXIgKi8KKwltdG1zcglyMTEKKyNlbHNlIC8qIENPTkZJR19QUENfQk9PSzNFICovCiAJbGkJcjEyLChNU1JfU0YgfCBNU1JfSVNGKUBoaWdoZXN0CiAJc2xkaQlyMTIscjEyLDQ4CiAJb3IJcjExLHIxMSxyMTIKIAltdG1zcmQJcjExCiAJaXN5bmMKKyNlbmRpZgogCWJscgogCiAvKgpAQCAtNjEzLDkgKzY2OCwxMSBAQAogCWJkbnoJM2IKIDQ6CiAKKyNpZm5kZWYgQ09ORklHX1BQQ19CT09LM0UKIAltZm1zcglyNgogCW9yaQlyNixyNixNU1JfUkkKIAltdG1zcmQJcjYJCQkvKiBSSSBvbiAqLworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKIAkvKiBTYXZlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHdlJ3JlIHJ1bm5pbmcgYXQgaW4ga2VybnN0YXJ0X2FkZHIgKi8KQEAgLTY0MiwxMyArNjk5LDEzIEBACiAKIAkvKiBSZXN0b3JlIHBhcmFtZXRlcnMgcGFzc2VkIGZyb20gcHJvbV9pbml0L2tleGVjICovCiAJbXIJcjMscjMxCi0JYmwJLmVhcmx5X3NldHVwCQkvKiBhbHNvIHNldHMgcjEzIGFuZCBTUFJHMyAqLworCWJsCS5lYXJseV9zZXR1cAkJLyogYWxzbyBzZXRzIHIxMyBhbmQgU1BSR19QQUNBICovCiAKIAlMT0FEX1JFR19BRERSKHIzLCAuc3RhcnRfaGVyZV9jb21tb24pCiAJbGQJcjQsUEFDQUtNU1IocjEzKQogCW10c3ByCVNQUk5fU1JSMCxyMwogCW10c3ByCVNQUk5fU1JSMSxyNAotCXJmaWQKKwlSRkkKIAliCS4JLyogcHJldmVudCBzcGVjdWxhdGl2ZSBleGVjdXRpb24gKi8KIAkKIAkvKiBUaGlzIGlzIHdoZXJlIGFsbCBwbGF0Zm9ybXMgY29udmVyZ2UgZXhlY3V0aW9uICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfOHh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfOHh4LlMKaW5kZXggNTJmZjhjNS4uNmRlZDE5ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzh4eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84eHguUwpAQCAtMTEwLDggKzExMCw4IEBACiAgKiB0YXNrJ3MgdGhyZWFkX3N0cnVjdC4KICAqLwogI2RlZmluZSBFWENFUFRJT05fUFJPTE9HCVwKLQltdHNwcglTUFJOX1NQUkcwLHIxMDsJXAotCW10c3ByCVNQUk5fU1BSRzEscjExOwlcCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLHIxMDsJXAorCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMSxyMTE7CVwKIAltZmNyCXIxMDsJCVwKIAlFWENFUFRJT05fUFJPTE9HXzE7CVwKIAlFWENFUFRJT05fUFJPTE9HXzIKQEAgLTEyMSw3ICsxMjEsNyBAQAogCWFuZGkuCXIxMSxyMTEsTVNSX1BSOwlcCiAJdG9waHlzKHIxMSxyMSk7CQkJLyogdXNlIHRvcGh5cyhyMSkgaWYga2VybmVsICovIFwKIAliZXEJMWY7CQlcCi0JbWZzcHIJcjExLFNQUk5fU1BSRzM7CVwKKwltZnNwcglyMTEsU1BSTl9TUFJHX1RIUkVBRDsJXAogCWx3eglyMTEsVEhSRUFEX0lORk8tVEhSRUFEKHIxMSk7CVwKIAlhZGRpCXIxMSxyMTEsVEhSRUFEX1NJWkU7CVwKIAl0b3BoeXMocjExLHIxMSk7CVwKQEAgLTEzMyw5ICsxMzMsOSBAQAogCXN0dwlyMTAsX0NDUihyMTEpOwkJLyogc2F2ZSByZWdpc3RlcnMgKi8gXAogCXN0dwlyMTIsR1BSMTIocjExKTsJXAogCXN0dwlyOSxHUFI5KHIxMSk7CVwKLQltZnNwcglyMTAsU1BSTl9TUFJHMDsJXAorCW1mc3ByCXIxMCxTUFJOX1NQUkdfU0NSQVRDSDA7CVwKIAlzdHcJcjEwLEdQUjEwKHIxMSk7CVwKLQltZnNwcglyMTIsU1BSTl9TUFJHMTsJXAorCW1mc3ByCXIxMixTUFJOX1NQUkdfU0NSQVRDSDE7CVwKIAlzdHcJcjEyLEdQUjExKHIxMSk7CVwKIAltZmxyCXIxMDsJCVwKIAlzdHcJcjEwLF9MSU5LKHIxMSk7CVwKQEAgLTYwMyw4ICs2MDMsOSBAQAogCS8qIHB0ciB0byBwaHlzIGN1cnJlbnQgdGhyZWFkICovCiAJdG9waHlzKHI0LHIyKQogCWFkZGkJcjQscjQsVEhSRUFECS8qIGluaXQgdGFzaydzIFRIUkVBRCAqLwotCW10c3ByCVNQUk5fU1BSRzMscjQKKwltdHNwcglTUFJOX1NQUkdfVEhSRUFELHI0CiAJbGkJcjMsMAorCS8qIFhYWCBXaGF0IGlzIHRoYXQgZm9yID8gU1BSRzIgYXBwZWFycyBvdGhlcndpc2UgdW51c2VkIG9uIDh4eCAqLwogCW10c3ByCVNQUk5fU1BSRzIscjMJLyogMCA9PiByMSBoYXMga2VybmVsIHNwICovCiAKIAkvKiBzdGFjayAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2Jvb2tlLmggYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfYm9va2UuaAppbmRleCA1ZjlmZWJjLi41MDUwNGFlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfYm9va2UuaAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfYm9va2UuaApAQCAtMjAsMTQgKzIwLDE0IEBACiAjZW5kaWYKIAogI2RlZmluZSBOT1JNQUxfRVhDRVBUSU9OX1BST0xPRwkJCQkJCSAgICAgXAotCW10c3ByCVNQUk5fU1BSRzAscjEwOwkJLyogc2F2ZSB0d28gcmVnaXN0ZXJzIHRvIHdvcmsgd2l0aCAqL1wKLQltdHNwcglTUFJOX1NQUkcxLHIxMTsJCQkJCQkgICAgIFwKLQltdHNwcglTUFJOX1NQUkc0VyxyMTsJCQkJCQkgICAgIFwKKwltdHNwcglTUFJOX1NQUkdfV1NDUkFUQ0gwLHIxMDsvKiBzYXZlIHR3byByZWdpc3RlcnMgdG8gd29yayB3aXRoICovXAorCW10c3ByCVNQUk5fU1BSR19XU0NSQVRDSDEscjExOwkJCQkgICAgIFwKKwltdHNwcglTUFJOX1NQUkdfV1NDUkFUQ0gyLHIxOwkJCQkJICAgICBcCiAJbWZjcglyMTA7CQkJLyogc2F2ZSBDUiBpbiByMTAgZm9yIG5vdwkgICAqL1wKIAltZnNwcglyMTEsU1BSTl9TUlIxOwkJLyogY2hlY2sgd2hldGhlciB1c2VyIG9yIGtlcm5lbCAgICAqL1wKIAlhbmRpLglyMTEscjExLE1TUl9QUjsJCQkJCQkgICAgIFwKIAliZXEJMWY7CQkJCQkJCSAgICAgXAotCW1mc3ByCXIxLFNQUk5fU1BSRzM7CQkvKiBpZiBmcm9tIHVzZXIsIHN0YXJ0IGF0IHRvcCBvZiAgICovXAorCW1mc3ByCXIxLFNQUk5fU1BSR19USFJFQUQ7CS8qIGlmIGZyb20gdXNlciwgc3RhcnQgYXQgdG9wIG9mICAgKi9cCiAJbHd6CXIxLFRIUkVBRF9JTkZPLVRIUkVBRChyMSk7IC8qIHRoaXMgdGhyZWFkJ3Mga2VybmVsIHN0YWNrICAgKi9cCiAJQUxMT0NfU1RBQ0tfRlJBTUUocjEsIFRIUkVBRF9TSVpFKTsJCQkJICAgICBcCiAxOglzdWJpCXIxLHIxLElOVF9GUkFNRV9TSVpFOwkvKiBBbGxvY2F0ZSBhbiBleGNlcHRpb24gZnJhbWUgICAgICovXApAQCAtMzUsMTMgKzM1LDEzIEBACiAJc3R3CXIxMCxfQ0NSKHIxMSk7ICAgICAgICAgIC8qIHNhdmUgdmFyaW91cyByZWdpc3RlcnMJICAgKi9cCiAJc3R3CXIxMixHUFIxMihyMTEpOwkJCQkJCSAgICAgXAogCXN0dwlyOSxHUFI5KHIxMSk7CQkJCQkJICAgICBcCi0JbWZzcHIJcjEwLFNQUk5fU1BSRzA7CQkJCQkJICAgICBcCisJbWZzcHIJcjEwLFNQUk5fU1BSR19SU0NSQVRDSDA7CQkJCQlcCiAJc3R3CXIxMCxHUFIxMChyMTEpOwkJCQkJCSAgICAgXAotCW1mc3ByCXIxMixTUFJOX1NQUkcxOwkJCQkJCSAgICAgXAorCW1mc3ByCXIxMixTUFJOX1NQUkdfUlNDUkFUQ0gxOwkJCQkgICAgIFwKIAlzdHcJcjEyLEdQUjExKHIxMSk7CQkJCQkJICAgICBcCiAJbWZscglyMTA7CQkJCQkJCSAgICAgXAogCXN0dwlyMTAsX0xJTksocjExKTsJCQkJCQkgICAgIFwKLQltZnNwcglyMTAsU1BSTl9TUFJHNFI7CQkJCQkgICAgIFwKKwltZnNwcglyMTAsU1BSTl9TUFJHX1JTQ1JBVENIMjsJCQkJICAgICBcCiAJbWZzcHIJcjEyLFNQUk5fU1JSMDsJCQkJCQkgICAgIFwKIAlzdHcJcjEwLEdQUjEocjExKTsJCQkJCQkgICAgIFwKIAltZnNwcglyOSxTUFJOX1NSUjE7CQkJCQkJICAgICBcCkBAIC02OSwyMSArNjksMTEgQEAKICAqIHByb3ZpZGluZyBjb25maWd1cmF0aW9ucyB0aGF0IG1pY3JvLW9wdGltaXplIHNwYWNlIHVzYWdlLgogICovCiAKLS8qIENSSVRfU1BSRyBvbmx5IHVzZWQgaW4gY3JpdGljYWwgZXhjZXB0aW9uIGhhbmRsaW5nICovCi0jZGVmaW5lIENSSVRfU1BSRwlTUFJOX1NQUkcyCi0vKiBNQ0hFQ0tfU1BSRyBvbmx5IHVzZWQgaW4gbWFjaGluZSBjaGVjayBleGNlcHRpb24gaGFuZGxpbmcgKi8KLSNkZWZpbmUgTUNIRUNLX1NQUkcJU1BSTl9TUFJHNlcKLQotI2RlZmluZSBNQ0hFQ0tfU1RBQ0tfQkFTRQltY2hlY2tpcnFfY3R4CisjZGVmaW5lIE1DX1NUQUNLX0JBU0UJCW1jaGVja2lycV9jdHgKICNkZWZpbmUgQ1JJVF9TVEFDS19CQVNFCQljcml0aXJxX2N0eAogCiAvKiBvbmx5IG9uIGU1MDBtYy9lMjAwICovCi0jZGVmaW5lIERFQlVHX1NUQUNLX0JBU0UJZGJnaXJxX2N0eAotI2lmZGVmIENPTkZJR19FMjAwCi0jZGVmaW5lIERFQlVHX1NQUkcJCVNQUk5fU1BSRzZXCi0jZWxzZQotI2RlZmluZSBERUJVR19TUFJHCQlTUFJOX1NQUkc5Ci0jZW5kaWYKKyNkZWZpbmUgREJHX1NUQUNLX0JBU0UJCWRiZ2lycV9jdHgKIAogI2RlZmluZSBFWENfTFZMX0ZSQU1FX09WRVJIRUFECShUSFJFQURfU0laRSAtIElOVF9GUkFNRV9TSVpFIC0gRVhDX0xWTF9TSVpFKQogCkBAIC0xMTAsNyArMTAwLDcgQEAKICAqIGNyaXRpY2FsL21hY2hpbmUgY2hlY2sgZXhjZXB0aW9uIHN0YWNrIGF0IGxvdyBwaHlzaWNhbCBhZGRyZXNzZXMuCiAgKi8KICNkZWZpbmUgRVhDX0xFVkVMX0VYQ0VQVElPTl9QUk9MT0coZXhjX2xldmVsLCBleGNfbGV2ZWxfc3JyMCwgZXhjX2xldmVsX3NycjEpIFwKLQltdHNwcglleGNfbGV2ZWwjI19TUFJHLHI4OwkJCQkJICAgICBcCisJbXRzcHIJU1BSTl9TUFJHX1dTQ1JBVENIXyMjZXhjX2xldmVsLHI4OwkJCSAgICAgXAogCUJPT0tFX0xPQURfRVhDX0xFVkVMX1NUQUNLKGV4Y19sZXZlbCk7LyogcjggcG9pbnRzIHRvIHRoZSBleGNfbGV2ZWwgc3RhY2sqLyBcCiAJc3R3CXI5LEdQUjkocjgpOwkJLyogc2F2ZSB2YXJpb3VzIHJlZ2lzdGVycwkgICAqL1wKIAltZmNyCXI5OwkJCS8qIHNhdmUgQ1IgaW4gcjkgZm9yIG5vdwkgICAqL1wKQEAgLTExOSw3ICsxMDksNyBAQAogCXN0dwlyOSxfQ0NSKHI4KTsJCS8qIHNhdmUgQ1Igb24gc3RhY2sJCSAgICovXAogCW1mc3ByCXIxMCxleGNfbGV2ZWxfc3JyMTsJLyogY2hlY2sgd2hldGhlciB1c2VyIG9yIGtlcm5lbCAgICAqL1wKIAlhbmRpLglyMTAscjEwLE1TUl9QUjsJCQkJCQkgICAgIFwKLQltZnNwcglyMTEsU1BSTl9TUFJHMzsJCS8qIGlmIGZyb20gdXNlciwgc3RhcnQgYXQgdG9wIG9mICAgKi9cCisJbWZzcHIJcjExLFNQUk5fU1BSR19USFJFQUQ7CS8qIGlmIGZyb20gdXNlciwgc3RhcnQgYXQgdG9wIG9mICAgKi9cCiAJbHd6CXIxMSxUSFJFQURfSU5GTy1USFJFQUQocjExKTsgLyogdGhpcyB0aHJlYWQncyBrZXJuZWwgc3RhY2sgKi9cCiAJYWRkaQlyMTEscjExLEVYQ19MVkxfRlJBTUVfT1ZFUkhFQUQ7CS8qIGFsbG9jYXRlIHN0YWNrIGZyYW1lICAgICovXAogCWJlcQkxZjsJCQkJCQkJICAgICBcCkBAIC0xNDAsNyArMTMwLDcgQEAKIAlsd3oJcjksVElfVEFTSy1FWENfTFZMX0ZSQU1FX09WRVJIRUFEKHIxMSk7CQkJICAgICBcCiAJc3R3CXI5LFRJX1RBU0stRVhDX0xWTF9GUkFNRV9PVkVSSEVBRChyOCk7CQkJICAgICBcCiAJbXIJcjExLHI4OwkJCQkJCQkgICAgIFwKLTI6CW1mc3ByCXI4LGV4Y19sZXZlbCMjX1NQUkc7CQkJCQkgICAgIFwKKzI6CW1mc3ByCXI4LFNQUk5fU1BSR19SU0NSQVRDSF8jI2V4Y19sZXZlbDsJCQkgICAgIFwKIAlzdHcJcjEyLEdQUjEyKHIxMSk7CQkvKiBzYXZlIHZhcmlvdXMgcmVnaXN0ZXJzCSAgICovXAogCW1mbHIJcjEwOwkJCQkJCQkgICAgIFwKIAlzdHcJcjEwLF9MSU5LKHIxMSk7CQkJCQkJICAgICBcCkBAIC0xNjEsOSArMTUxLDkgQEAKICNkZWZpbmUgQ1JJVElDQUxfRVhDRVBUSU9OX1BST0xPRyBcCiAJCUVYQ19MRVZFTF9FWENFUFRJT05fUFJPTE9HKENSSVQsIFNQUk5fQ1NSUjAsIFNQUk5fQ1NSUjEpCiAjZGVmaW5lIERFQlVHX0VYQ0VQVElPTl9QUk9MT0cgXAotCQlFWENfTEVWRUxfRVhDRVBUSU9OX1BST0xPRyhERUJVRywgU1BSTl9EU1JSMCwgU1BSTl9EU1JSMSkKKwkJRVhDX0xFVkVMX0VYQ0VQVElPTl9QUk9MT0coREJHLCBTUFJOX0RTUlIwLCBTUFJOX0RTUlIxKQogI2RlZmluZSBNQ0hFQ0tfRVhDRVBUSU9OX1BST0xPRyBcCi0JCUVYQ19MRVZFTF9FWENFUFRJT05fUFJPTE9HKE1DSEVDSywgU1BSTl9NQ1NSUjAsIFNQUk5fTUNTUlIxKQorCQlFWENfTEVWRUxfRVhDRVBUSU9OX1BST0xPRyhNQywgU1BSTl9NQ1NSUjAsIFNQUk5fTUNTUlIxKQogCiAvKgogICogRXhjZXB0aW9uIHZlY3RvcnMuCkBAIC0yODIsMTMgKzI3MiwxMyBAQAogCW10c3ByCVNQUk5fRFNSUjEscjk7CQkJCQkJICAgICAgXAogCWx3eglyOSxHUFI5KHIxMSk7CQkJCQkJICAgICAgXAogCWx3eglyMTIsR1BSMTIocjExKTsJCQkJCQkgICAgICBcCi0JbXRzcHIJREVCVUdfU1BSRyxyODsJCQkJCQkgICAgICBcCi0JQk9PS0VfTE9BRF9FWENfTEVWRUxfU1RBQ0soREVCVUcpOyAvKiByOCBwb2ludHMgdG8gdGhlIGRlYnVnIHN0YWNrICovIFwKKwltdHNwcglTUFJOX1NQUkdfV1NDUkFUQ0hfREJHLHI4OwkJCQkgICAgICBcCisJQk9PS0VfTE9BRF9FWENfTEVWRUxfU1RBQ0soREJHKTsgLyogcjggcG9pbnRzIHRvIHRoZSBkZWJ1ZyBzdGFjayAqLyBcCiAJbHd6CXIxMCxHUFIxMChyOCk7CQkJCQkJICAgICAgXAogCWx3eglyMTEsR1BSMTEocjgpOwkJCQkJCSAgICAgIFwKLQltZnNwcglyOCxERUJVR19TUFJHOwkJCQkJCSAgICAgIFwKKwltZnNwcglyOCxTUFJOX1NQUkdfUlNDUkFUQ0hfREJHOwkJCQkgICAgICBcCiAJCQkJCQkJCQkgICAgICBcCi0JUFBDX1JGREk7CQkJCQkJCQkgICAgICBcCisJUFBDX1JGREk7CQkJCQkJCSAgICAgIFwKIAliCS47CQkJCQkJCSAgICAgIFwKIAkJCQkJCQkJCSAgICAgIFwKIAkvKiBjb250aW51ZSBub3JtYWwgaGFuZGxpbmcgZm9yIGEgZGVidWcgZXhjZXB0aW9uLi4uICovCQkgICAgICBcCkBAIC0zMzUsMTEgKzMyNSwxMSBAQAogCW10c3ByCVNQUk5fQ1NSUjEscjk7CQkJCQkJICAgICAgXAogCWx3eglyOSxHUFI5KHIxMSk7CQkJCQkJICAgICAgXAogCWx3eglyMTIsR1BSMTIocjExKTsJCQkJCQkgICAgICBcCi0JbXRzcHIJQ1JJVF9TUFJHLHI4OwkJCQkJCSAgICAgIFwKKwltdHNwcglTUFJOX1NQUkdfV1NDUkFUQ0hfQ1JJVCxyODsJCQkJICAgICAgXAogCUJPT0tFX0xPQURfRVhDX0xFVkVMX1NUQUNLKENSSVQpOyAvKiByOCBwb2ludHMgdG8gdGhlIGRlYnVnIHN0YWNrICovICBcCiAJbHd6CXIxMCxHUFIxMChyOCk7CQkJCQkJICAgICAgXAogCWx3eglyMTEsR1BSMTEocjgpOwkJCQkJCSAgICAgIFwKLQltZnNwcglyOCxDUklUX1NQUkc7CQkJCQkJICAgICAgXAorCW1mc3ByCXI4LFNQUk5fU1BSR19SU0NSQVRDSF9DUklUOwkJCQkgICAgICBcCiAJCQkJCQkJCQkgICAgICBcCiAJcmZjaTsJCQkJCQkJCSAgICAgIFwKIAliCS47CQkJCQkJCSAgICAgIFwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUwppbmRleCA1YmRjYzA2Li45NzU3ODhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCkBAIC0zNjEsNyArMzYxLDcgQEAKIAogCS8qIHB0ciB0byBjdXJyZW50IHRocmVhZCAqLwogCWFkZGkJcjQscjIsVEhSRUFECS8qIGluaXQgdGFzaydzIFRIUkVBRCAqLwotCW10c3ByCVNQUk5fU1BSRzMscjQKKwltdHNwcglTUFJOX1NQUkdfVEhSRUFELHI0CiAKIAkvKiBzdGFjayAqLwogCWxpcwlyMSxpbml0X3RocmVhZF91bmlvbkBoCkBAIC01MzIsMTIgKzUzMiwxMiBAQAogCiAJLyogRGF0YSBUTEIgRXJyb3IgSW50ZXJydXB0ICovCiAJU1RBUlRfRVhDRVBUSU9OKERhdGFUTEJFcnJvcikKLQltdHNwcglTUFJOX1NQUkcwLCByMTAJCS8qIFNhdmUgc29tZSB3b3JraW5nIHJlZ2lzdGVycyAqLwotCW10c3ByCVNQUk5fU1BSRzEsIHIxMQotCW10c3ByCVNQUk5fU1BSRzRXLCByMTIKLQltdHNwcglTUFJOX1NQUkc1VywgcjEzCisJbXRzcHIJU1BSTl9TUFJHX1dTQ1JBVENIMCwgcjEwIC8qIFNhdmUgc29tZSB3b3JraW5nIHJlZ2lzdGVycyAqLworCW10c3ByCVNQUk5fU1BSR19XU0NSQVRDSDEsIHIxMQorCW10c3ByCVNQUk5fU1BSR19XU0NSQVRDSDIsIHIxMgorCW10c3ByCVNQUk5fU1BSR19XU0NSQVRDSDMsIHIxMwogCW1mY3IJcjExCi0JbXRzcHIJU1BSTl9TUFJHN1csIHIxMQorCW10c3ByCVNQUk5fU1BSR19XU0NSQVRDSDQsIHIxMQogCW1mc3ByCXIxMCwgU1BSTl9ERUFSCQkvKiBHZXQgZmF1bHRpbmcgYWRkcmVzcyAqLwogCiAJLyogSWYgd2UgYXJlIGZhdWx0aW5nIGEga2VybmVsIGFkZHJlc3MsIHdlIGhhdmUgdG8gdXNlIHRoZQpAQCAtNTU3LDcgKzU1Nyw3IEBACiAKIAkvKiBHZXQgdGhlIFBHRCBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkICovCiAzOgotCW1mc3ByCXIxMSxTUFJOX1NQUkczCisJbWZzcHIJcjExLFNQUk5fU1BSR19USFJFQUQKIAlsd3oJcjExLFBHRElSKHIxMSkKIAogNDoKQEAgLTU3NSw3ICs1NzUsMTIgQEAKIAkgKiAgICAgICBwbGFjZSBvciBjYW4gd2Ugc2F2ZSBhIGNvdXBsZSBvZiBpbnN0cnVjdGlvbnMgaGVyZSA/CiAJICovCiAJbWZzcHIJcjEyLFNQUk5fRVNSCisjaWZkZWYgQ09ORklHX1BURV82NEJJVAorCWxpCXIxMyxfUEFHRV9QUkVTRU5UCisJb3JpcwlyMTMscjEzLF9QQUdFX0FDQ0VTU0VEQGgKKyNlbHNlCiAJbGkJcjEzLF9QQUdFX1BSRVNFTlR8X1BBR0VfQUNDRVNTRUQKKyNlbmRpZgogCXJsd2ltaQlyMTMscjEyLDExLDI5LDI5CiAKIAlGSU5EX1BURQpAQCAtNTk4LDEyICs2MDMsMTIgQEAKIAkvKiBUaGUgYmFpbG91dC4gIFJlc3RvcmUgcmVnaXN0ZXJzIHRvIHByZS1leGNlcHRpb24gY29uZGl0aW9ucwogCSAqIGFuZCBjYWxsIHRoZSBoZWF2eXdlaWdodHMgdG8gaGVscCB1cyBvdXQuCiAJICovCi0JbWZzcHIJcjExLCBTUFJOX1NQUkc3UgorCW1mc3ByCXIxMSwgU1BSTl9TUFJHX1JTQ1JBVENINAogCW10Y3IJcjExCi0JbWZzcHIJcjEzLCBTUFJOX1NQUkc1UgotCW1mc3ByCXIxMiwgU1BSTl9TUFJHNFIKLQltZnNwcglyMTEsIFNQUk5fU1BSRzEKLQltZnNwcglyMTAsIFNQUk5fU1BSRzAKKwltZnNwcglyMTMsIFNQUk5fU1BSR19SU0NSQVRDSDMKKwltZnNwcglyMTIsIFNQUk5fU1BSR19SU0NSQVRDSDIKKwltZnNwcglyMTEsIFNQUk5fU1BSR19SU0NSQVRDSDEKKwltZnNwcglyMTAsIFNQUk5fU1BSR19SU0NSQVRDSDAKIAliCURhdGFTdG9yYWdlCiAKIAkvKiBJbnN0cnVjdGlvbiBUTEIgRXJyb3IgSW50ZXJydXB0ICovCkBAIC02MTMsMTIgKzYxOCwxMiBAQAogCSAqIHRvIGEgZGlmZmVyZW50IHBvaW50LgogCSAqLwogCVNUQVJUX0VYQ0VQVElPTihJbnN0cnVjdGlvblRMQkVycm9yKQotCW10c3ByCVNQUk5fU1BSRzAsIHIxMAkJLyogU2F2ZSBzb21lIHdvcmtpbmcgcmVnaXN0ZXJzICovCi0JbXRzcHIJU1BSTl9TUFJHMSwgcjExCi0JbXRzcHIJU1BSTl9TUFJHNFcsIHIxMgotCW10c3ByCVNQUk5fU1BSRzVXLCByMTMKKwltdHNwcglTUFJOX1NQUkdfV1NDUkFUQ0gwLCByMTAgLyogU2F2ZSBzb21lIHdvcmtpbmcgcmVnaXN0ZXJzICovCisJbXRzcHIJU1BSTl9TUFJHX1dTQ1JBVENIMSwgcjExCisJbXRzcHIJU1BSTl9TUFJHX1dTQ1JBVENIMiwgcjEyCisJbXRzcHIJU1BSTl9TUFJHX1dTQ1JBVENIMywgcjEzCiAJbWZjcglyMTEKLQltdHNwcglTUFJOX1NQUkc3VywgcjExCisJbXRzcHIJU1BSTl9TUFJHX1dTQ1JBVENINCwgcjExCiAJbWZzcHIJcjEwLCBTUFJOX1NSUjAJCS8qIEdldCBmYXVsdGluZyBhZGRyZXNzICovCiAKIAkvKiBJZiB3ZSBhcmUgZmF1bHRpbmcgYSBrZXJuZWwgYWRkcmVzcywgd2UgaGF2ZSB0byB1c2UgdGhlCkBAIC02MzgsMTIgKzY0MywxNyBAQAogCiAJLyogR2V0IHRoZSBQR0QgZm9yIHRoZSBjdXJyZW50IHRocmVhZCAqLwogMzoKLQltZnNwcglyMTEsU1BSTl9TUFJHMworCW1mc3ByCXIxMSxTUFJOX1NQUkdfVEhSRUFECiAJbHd6CXIxMSxQR0RJUihyMTEpCiAKIDQ6CiAJLyogTWFrZSB1cCB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMgKi8KLQlsaQlyMTMsX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfSFdFWEVDCisjaWZkZWYgQ09ORklHX1BURV82NEJJVAorCWxpCXIxMyxfUEFHRV9QUkVTRU5UIHwgX1BBR0VfRVhFQworCW9yaXMJcjEzLHIxMyxfUEFHRV9BQ0NFU1NFREBoCisjZWxzZQorCWxpCXIxMyxfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9FWEVDCisjZW5kaWYKIAogCUZJTkRfUFRFCiAJYW5kYy4JcjEzLHIxMyxyMTEJCS8qIENoZWNrIHBlcm1pc3Npb24gKi8KQEAgLTY2NiwxMiArNjc2LDEyIEBACiAJLyogVGhlIGJhaWxvdXQuICBSZXN0b3JlIHJlZ2lzdGVycyB0byBwcmUtZXhjZXB0aW9uIGNvbmRpdGlvbnMKIAkgKiBhbmQgY2FsbCB0aGUgaGVhdnl3ZWlnaHRzIHRvIGhlbHAgdXMgb3V0LgogCSAqLwotCW1mc3ByCXIxMSwgU1BSTl9TUFJHN1IKKwltZnNwcglyMTEsIFNQUk5fU1BSR19SU0NSQVRDSDQKIAltdGNyCXIxMQotCW1mc3ByCXIxMywgU1BSTl9TUFJHNVIKLQltZnNwcglyMTIsIFNQUk5fU1BSRzRSCi0JbWZzcHIJcjExLCBTUFJOX1NQUkcxCi0JbWZzcHIJcjEwLCBTUFJOX1NQUkcwCisJbWZzcHIJcjEzLCBTUFJOX1NQUkdfUlNDUkFUQ0gzCisJbWZzcHIJcjEyLCBTUFJOX1NQUkdfUlNDUkFUQ0gyCisJbWZzcHIJcjExLCBTUFJOX1NQUkdfUlNDUkFUQ0gxCisJbWZzcHIJcjEwLCBTUFJOX1NQUkdfUlNDUkFUQ0gwCiAJYglJbnN0cnVjdGlvblN0b3JhZ2UKIAogI2lmZGVmIENPTkZJR19TUEUKQEAgLTczMyw3ICs3NDMsNyBAQAogCiAJbWZzcHIJcjEyLCBTUFJOX01BUzIKICNpZmRlZiBDT05GSUdfUFRFXzY0QklUCi0Jcmx3aW1pCXIxMiwgcjExLCAyNiwgMjQsIDMxCS8qIGV4dHJhY3QgLi4uV0lNR0UgZnJvbSBwdGUgKi8KKwlybHdpbWkJcjEyLCByMTEsIDMyLTE5LCAyNywgMzEJLyogZXh0cmFjdCBXSU1HRSBmcm9tIHB0ZSAqLwogI2Vsc2UKIAlybHdpbWkJcjEyLCByMTEsIDI2LCAyNywgMzEJLyogZXh0cmFjdCBXSU1HRSBmcm9tIHB0ZSAqLwogI2VuZGlmCkBAIC03NDIsMjMgKzc1MiwyNyBAQAogI2VuZGlmCiAJbXRzcHIJU1BSTl9NQVMyLCByMTIKIAotCWxpCXIxMCwgKF9QQUdFX0hXRVhFQyB8IF9QQUdFX1BSRVNFTlQpCisjaWZkZWYgQ09ORklHX1BURV82NEJJVAorCXJsd2lubQlyMTIsIHIxMSwgMzItMiwgMjYsIDMxCS8qIE1vdmUgaW4gcGVybSBiaXRzICovCisJYW5kaS4JcjEwLCByMTEsIF9QQUdFX0RJUlRZCisJYm5lCTFmCisJbGkJcjEwLCBNQVMzX1NXIHwgTUFTM19VVworCWFuZGMJcjEyLCByMTIsIHIxMAorMToJcmx3aW1pCXIxMiwgcjEzLCAyMCwgMCwgMTEJLyogZ3JhYiBSUE5bMzI6NDNdICovCisJcmx3aW1pCXIxMiwgcjExLCAyMCwgMTIsIDE5CS8qIGdyYWIgUlBOWzQ0OjUxXSAqLworCW10c3ByCVNQUk5fTUFTMywgcjEyCitCRUdJTl9NTVVfRlRSX1NFQ1RJT04KKwlzcndpCXIxMCwgcjEzLCAxMgkJLyogZ3JhYiBSUE5bMTI6MzFdICovCisJbXRzcHIJU1BSTl9NQVM3LCByMTAKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZTRVQoTU1VX0ZUUl9CSUdfUEhZUykKKyNlbHNlCisJbGkJcjEwLCAoX1BBR0VfRVhFQyB8IF9QQUdFX1BSRVNFTlQpCiAJcmx3aW1pCXIxMCwgcjExLCAzMSwgMjksIDI5CS8qIGV4dHJhY3QgX1BBR0VfRElSVFkgaW50byBTVyAqLwogCWFuZAlyMTIsIHIxMSwgcjEwCiAJYW5kaS4JcjEwLCByMTEsIF9QQUdFX1VTRVIJLyogVGVzdCBmb3IgX1BBR0VfVVNFUiAqLwogCXNsd2kJcjEwLCByMTIsIDEKIAlvcglyMTAsIHIxMCwgcjEyCiAJaXNlbGVxCXIxMiwgcjEyLCByMTAKLQkKLSNpZmRlZiBDT05GSUdfUFRFXzY0QklUCi0Jcmx3aW1pCXIxMiwgcjEzLCAyNCwgMCwgNwkvKiBncmFiIFJQTlszMjozOV0gKi8KLQlybHdpbWkJcjEyLCByMTEsIDI0LCA4LCAxOQkvKiBncmFiIFJQTls0MDo1MV0gKi8KLQltdHNwcglTUFJOX01BUzMsIHIxMgotQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCi0Jc3J3aQlyMTAsIHIxMywgOAkJLyogZ3JhYiBSUE5bODozMV0gKi8KLQltdHNwcglTUFJOX01BUzcsIHIxMAotRU5EX01NVV9GVFJfU0VDVElPTl9JRlNFVChNTVVfRlRSX0JJR19QSFlTKQotI2Vsc2UKIAlybHdpbWkJcjExLCByMTIsIDAsIDIwLCAzMQkvKiBFeHRyYWN0IFJQTiBmcm9tIFBURSBhbmQgbWVyZ2Ugd2l0aCBwZXJtcyAqLwogCW10c3ByCVNQUk5fTUFTMywgcjExCiAjZW5kaWYKQEAgLTc5MCwxMiArODA0LDEyIEBACiAJdGxid2UKIAogCS8qIERvbmUuLi5yZXN0b3JlIHJlZ2lzdGVycyBhbmQgZ2V0IG91dCBvZiBoZXJlLiAgKi8KLQltZnNwcglyMTEsIFNQUk5fU1BSRzdSCisJbWZzcHIJcjExLCBTUFJOX1NQUkdfUlNDUkFUQ0g0CiAJbXRjcglyMTEKLQltZnNwcglyMTMsIFNQUk5fU1BSRzVSCi0JbWZzcHIJcjEyLCBTUFJOX1NQUkc0UgotCW1mc3ByCXIxMSwgU1BSTl9TUFJHMQotCW1mc3ByCXIxMCwgU1BSTl9TUFJHMAorCW1mc3ByCXIxMywgU1BSTl9TUFJHX1JTQ1JBVENIMworCW1mc3ByCXIxMiwgU1BSTl9TUFJHX1JTQ1JBVENIMgorCW1mc3ByCXIxMSwgU1BSTl9TUFJHX1JTQ1JBVENIMQorCW1mc3ByCXIxMCwgU1BSTl9TUFJHX1JTQ1JBVENIMAogCXJmaQkJCQkJLyogRm9yY2UgY29udGV4dCBjaGFuZ2UgKi8KIAogI2lmZGVmIENPTkZJR19TUEUKQEAgLTgzOSw3ICs4NTMsNyBAQAogI2VuZGlmIC8qICFDT05GSUdfU01QICovCiAJLyogZW5hYmxlIHVzZSBvZiBTUEUgYWZ0ZXIgcmV0dXJuICovCiAJb3JpcwlyOSxyOSxNU1JfU1BFQGgKLQltZnNwcglyNSxTUFJOX1NQUkczCQkvKiBjdXJyZW50IHRhc2sncyBUSFJFQUQgKHBoeXMpICovCisJbWZzcHIJcjUsU1BSTl9TUFJHX1RIUkVBRAkvKiBjdXJyZW50IHRhc2sncyBUSFJFQUQgKHBoeXMpICovCiAJbGkJcjQsMQogCWxpCXIxMCxUSFJFQURfQUNDCiAJc3R3CXI0LFRIUkVBRF9VU0VEX1NQRShyNSkKQEAgLTExMTgsNyArMTEzMiw3IEBACiAKIAkvKiBwdHIgdG8gY3VycmVudCB0aHJlYWQgKi8KIAlhZGRpCXI0LHIyLFRIUkVBRAkvKiBhZGRyZXNzIG9mIG91ciB0aHJlYWRfc3RydWN0ICovCi0JbXRzcHIJU1BSTl9TUFJHMyxyNAorCW10c3ByCVNQUk5fU1BSR19USFJFQUQscjQKIAogCS8qIFNldHVwIHRoZSBkZWZhdWx0cyBmb3IgVExCIGVudHJpZXMgKi8KIAlsaQlyNCwoTUFTNF9UU0laRUQoQk9PSzNFX1BBR0VTWl80SykpQGwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pYm1lYnVzLmMKaW5kZXggNmUzZjYyNC4uYTRjOGIzOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pYm1lYnVzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pYm1lYnVzLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyBpYm1lYnVzX2RtYV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGRtYV9tYXBfb3BzIGlibWVidXNfZG1hX29wcyA9IHsKIAkuYWxsb2NfY29oZXJlbnQgPSBpYm1lYnVzX2FsbG9jX2NvaGVyZW50LAogCS5mcmVlX2NvaGVyZW50ICA9IGlibWVidXNfZnJlZV9jb2hlcmVudCwKIAkubWFwX3NnICAgICAgICAgPSBpYm1lYnVzX21hcF9zZywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKaW5kZXggMjQxOWNjNy4uZWQwYWM0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3Zpby5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAogI2RlZmluZSBNT0RVTEVfVkVSUyAiMS44IgogI2RlZmluZSBNT0RVTEVfTkFNRSAibHBhcmNmZyIKQEAgLTUzNyw2ICs1MzgsOCBAQAogCiAJc2VxX3ByaW50ZihtLCAic2hhcmVkX3Byb2Nlc3Nvcl9tb2RlPSVkXG4iLCBscHBhY2FbMF0uc2hhcmVkX3Byb2MpOwogCisJc2VxX3ByaW50ZihtLCAic2xiX3NpemU9JWRcbiIsIG1tdV9zbGJfc2l6ZSk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwppbmRleCAxNWYyOGUwLi5kYTljMGM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwpAQCAtMzQyLDEwICszNDIsMTcgQEAKIAlhZGRpCXIzLHIzLEwxX0NBQ0hFX0JZVEVTCiAJYmRuegkxYgogCXN5bmMJCQkJLyogd2FpdCBmb3IgZGNic3QncyB0byBnZXQgdG8gcmFtICovCisjaWZuZGVmIENPTkZJR180NHgKIAltdGN0cglyNAogMjoJaWNiaQkwLHI2CiAJYWRkaQlyNixyNixMMV9DQUNIRV9CWVRFUwogCWJkbnoJMmIKKyNlbHNlCisJLyogRmxhc2ggaW52YWxpZGF0ZSBvbiA0NHggYmVjYXVzZSB3ZSBhcmUgcGFzc2VkIGttYXBwZWQgYWRkcmVzc2VzIGFuZAorCSAgIHRoaXMgZG9lc24ndCB3b3JrIGZvciB1c2Vyc3BhY2UgcGFnZXMgZHVlIHRvIHRoZSB2aXJ0dWFsbHkgdGFnZ2VkCisJICAgaWNhY2hlLiAgU2lnaC4gKi8KKwlpY2NjaQkwLCByMAorI2VuZGlmCiAJc3luYwkJCQkvKiBhZGRpdGlvbmFsIHN5bmMgbmVlZGVkIG9uIGc0ICovCiAJaXN5bmMKIAlibHIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfcGxhdGZvcm0uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfcGxhdGZvcm0uYwppbmRleCA4N2RmNDI4Li4xYTRmYzBkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCkBAIC0yNzYsNyArMjc2LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfRUVIICovCiAKIAkvKiBTY2FuIHRoZSBidXMgKi8KLQlzY2FuX3BoYihwaGIpOworCXBjaWJpb3Nfc2Nhbl9waGIocGhiLCBkZXYtPm5vZGUpOwogCWlmIChwaGItPmJ1cyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOWElPOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCmluZGV4IGU5OTYyYzcuLmQxNmIxZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAogLyogVGhpcyBzeW1ib2wgaXMgcHJvdmlkZWQgYnkgdGhlIGxpbmtlciAtIGxldCBpdCBmaWxsIGluIHRoZSBwYWNhCiAgKiBmaWVsZCBjb3JyZWN0bHkgKi8KQEAgLTg3LDYgKzg4LDggQEAKIAogI2lmZGVmIENPTkZJR19QUENfQk9PSzNTCiAJCW5ld19wYWNhLT5scHBhY2FfcHRyID0gJmxwcGFjYVtjcHVdOworI2Vsc2UKKwkJbmV3X3BhY2EtPmtlcm5lbF9wZ2QgPSBzd2FwcGVyX3BnX2RpcjsKICNlbmRpZgogCQluZXdfcGFjYS0+bG9ja190b2tlbiA9IDB4ODAwMDsKIAkJbmV3X3BhY2EtPnBhY2FfaW5kZXggPSBjcHU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCmluZGV4IDVhNTZlOTcuLmU5ZjQ4NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCkBAIC01MCwxNCArNTAsMTQgQEAKIHVuc2lnbmVkIGludCBwcGNfcGNpX2ZsYWdzID0gMDsKIAogCi1zdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqcGNpX2RtYV9vcHMgPSAmZG1hX2RpcmVjdF9vcHM7CitzdGF0aWMgc3RydWN0IGRtYV9tYXBfb3BzICpwY2lfZG1hX29wcyA9ICZkbWFfZGlyZWN0X29wczsKIAotdm9pZCBzZXRfcGNpX2RtYV9vcHMoc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcykKK3ZvaWQgc2V0X3BjaV9kbWFfb3BzKHN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wcykKIHsKIAlwY2lfZG1hX29wcyA9IGRtYV9vcHM7CiB9CiAKLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmdldF9wY2lfZG1hX29wcyh2b2lkKQorc3RydWN0IGRtYV9tYXBfb3BzICpnZXRfcGNpX2RtYV9vcHModm9pZCkKIHsKIAlyZXR1cm4gcGNpX2RtYV9vcHM7CiB9CkBAIC0xNzYsOCArMTc2LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNpX2RvbWFpbl9ucik7CiAKLSNpZmRlZiBDT05GSUdfUFBDX09GCi0KIC8qIFRoaXMgcm91dGluZSBpcyBtZWFudCB0byBiZSB1c2VkIGVhcmx5IGR1cmluZyBib290LCB3aGVuIHRoZQogICogUENJIGJ1cyBudW1iZXJzIGhhdmUgbm90IHlldCBiZWVuIGFzc2lnbmVkLCBhbmQgeW91IG5lZWQgdG8KICAqIGlzc3VlIFBDSSBjb25maWcgY3ljbGVzIHRvIGFuIE9GIGRldmljZS4KQEAgLTIxMCwxNyArMjA4LDExIEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXMiLCBucC0+ZnVsbF9uYW1lKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihkZXZzcGVjLCBTX0lSVUdPLCBwY2lfc2hvd19kZXZzcGVjLCBOVUxMKTsKLSNlbmRpZiAvKiBDT05GSUdfUFBDX09GICovCiAKIC8qIEFkZCBzeXNmcyBwcm9wZXJ0aWVzICovCiBpbnQgcGNpYmlvc19hZGRfcGxhdGZvcm1fZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLSNpZmRlZiBDT05GSUdfUFBDX09GCiAJcmV0dXJuIGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZGV2c3BlYyk7Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmIC8qIENPTkZJR19QUENfT0YgKi8KLQogfQogCiBjaGFyIF9fZGV2aW5pdCAqcGNpYmlvc19zZXR1cChjaGFyICpzdHIpCkBAIC0xNjI2LDMgKzE2MTgsMTIyIEBACiAKIH0KIAorLyoKKyAqIE51bGwgUENJIGNvbmZpZyBhY2Nlc3MgZnVuY3Rpb25zLCBmb3IgdGhlIGNhc2Ugd2hlbiB3ZSBjYW4ndAorICogZmluZCBhIGhvc2UuCisgKi8KKyNkZWZpbmUgTlVMTF9QQ0lfT1AocncsIHNpemUsIHR5cGUpCQkJCQlcCitzdGF0aWMgaW50CQkJCQkJCQlcCitudWxsXyMjcncjI19jb25maWdfIyNzaXplKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBvZmZzZXQsIHR5cGUgdmFsKQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7ICAgIAkJCQlcCit9CisKK3N0YXRpYyBpbnQKK251bGxfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgb2Zmc2V0LAorCQkgaW50IGxlbiwgdTMyICp2YWwpCit7CisJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKK30KKworc3RhdGljIGludAorbnVsbF93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgb2Zmc2V0LAorCQkgIGludCBsZW4sIHUzMiB2YWwpCit7CisJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfb3BzIG51bGxfcGNpX29wcyA9Cit7CisJLnJlYWQgPSBudWxsX3JlYWRfY29uZmlnLAorCS53cml0ZSA9IG51bGxfd3JpdGVfY29uZmlnLAorfTsKKworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBlYXJseSBvbiBiZWZvcmUgUENJIHNjYW5uaW5nIGlzIGRvbmUKKyAqIGFuZCBhbGwgb2YgdGhlIHBjaV9kZXYgYW5kIHBjaV9idXMgc3RydWN0dXJlcyBoYXZlIGJlZW4gY3JlYXRlZC4KKyAqLworc3RhdGljIHN0cnVjdCBwY2lfYnVzICoKK2Zha2VfcGNpX2J1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIGludCBidXNucikKK3sKKwlzdGF0aWMgc3RydWN0IHBjaV9idXMgYnVzOworCisJaWYgKGhvc2UgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGZpbmQgaG9zZSBmb3IgUENJIGJ1cyAlZCFcbiIsIGJ1c25yKTsKKwl9CisJYnVzLm51bWJlciA9IGJ1c25yOworCWJ1cy5zeXNkYXRhID0gaG9zZTsKKwlidXMub3BzID0gaG9zZT8gaG9zZS0+b3BzOiAmbnVsbF9wY2lfb3BzOworCXJldHVybiAmYnVzOworfQorCisjZGVmaW5lIEVBUkxZX1BDSV9PUChydywgc2l6ZSwgdHlwZSkJCQkJCVwKK2ludCBlYXJseV8jI3J3IyNfY29uZmlnXyMjc2l6ZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIGludCBidXMsCVwKKwkJCSAgICAgICBpbnQgZGV2Zm4sIGludCBvZmZzZXQsIHR5cGUgdmFsdWUpCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIHBjaV9idXNfIyNydyMjX2NvbmZpZ18jI3NpemUoZmFrZV9wY2lfYnVzKGhvc2UsIGJ1cyksCVwKKwkJCQkJICAgIGRldmZuLCBvZmZzZXQsIHZhbHVlKTsJXAorfQorCitFQVJMWV9QQ0lfT1AocmVhZCwgYnl0ZSwgdTggKikKK0VBUkxZX1BDSV9PUChyZWFkLCB3b3JkLCB1MTYgKikKK0VBUkxZX1BDSV9PUChyZWFkLCBkd29yZCwgdTMyICopCitFQVJMWV9QQ0lfT1Aod3JpdGUsIGJ5dGUsIHU4KQorRUFSTFlfUENJX09QKHdyaXRlLCB3b3JkLCB1MTYpCitFQVJMWV9QQ0lfT1Aod3JpdGUsIGR3b3JkLCB1MzIpCisKK2V4dGVybiBpbnQgcGNpX2J1c19maW5kX2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IGNhcCk7CitpbnQgZWFybHlfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgaW50IGJ1cywgaW50IGRldmZuLAorCQkJICBpbnQgY2FwKQoreworCXJldHVybiBwY2lfYnVzX2ZpbmRfY2FwYWJpbGl0eShmYWtlX3BjaV9idXMoaG9zZSwgYnVzKSwgZGV2Zm4sIGNhcCk7Cit9CisKKy8qKgorICogcGNpX3NjYW5fcGhiIC0gR2l2ZW4gYSBwY2lfY29udHJvbGxlciwgc2V0dXAgYW5kIHNjYW4gdGhlIFBDSSBidXMKKyAqIEBob3NlOiBQb2ludGVyIHRvIHRoZSBQQ0kgaG9zdCBjb250cm9sbGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICogQHN5c2RhdGE6IHZhbHVlIHRvIHVzZSBmb3Igc3lzZGF0YSBwb2ludGVyLiAgcHBjMzIgYW5kIHBwYzY0IGRpZmZlciBoZXJlCisgKgorICogTm90ZTogdGhlICdkYXRhJyBwb2ludGVyIGlzIGEgdGVtcG9yYXJ5IG1lYXN1cmUuICBBcyAzMiBhbmQgNjQgYml0CisgKiBwY2kgY29kZSBnZXRzIG1lcmdlZCwgdGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlY29tZSB1bm5lY2Vzc2FyeSBiZWNhdXNlCisgKiBib3RoIHdpbGwgdXNlIHRoZSBzYW1lIHZhbHVlLgorICovCit2b2lkIF9fZGV2aW5pdCBwY2liaW9zX3NjYW5fcGhiKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgdm9pZCAqc3lzZGF0YSkKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IGhvc2UtPmRuOworCWludCBtb2RlOworCisJcHJfZGVidWcoIlBDSTogU2Nhbm5pbmcgUEhCICVzXG4iLAorCQkgbm9kZSA/IG5vZGUtPmZ1bGxfbmFtZSA6ICI8Tk8gTkFNRT4iKTsKKworCS8qIENyZWF0ZSBhbiBlbXB0eSBidXMgZm9yIHRoZSB0b3BsZXZlbCAqLworCWJ1cyA9IHBjaV9jcmVhdGVfYnVzKGhvc2UtPnBhcmVudCwgaG9zZS0+Zmlyc3RfYnVzbm8sIGhvc2UtPm9wcywKKwkJCSAgICAgc3lzZGF0YSk7CisJaWYgKGJ1cyA9PSBOVUxMKSB7CisJCXByX2VycigiRmFpbGVkIHRvIGNyZWF0ZSBidXMgZm9yIFBDSSBkb21haW4gJTA0eFxuIiwKKwkJCWhvc2UtPmdsb2JhbF9udW1iZXIpOworCQlyZXR1cm47CisJfQorCWJ1cy0+c2Vjb25kYXJ5ID0gaG9zZS0+Zmlyc3RfYnVzbm87CisJaG9zZS0+YnVzID0gYnVzOworCisJLyogR2V0IHNvbWUgSU8gc3BhY2UgZm9yIHRoZSBuZXcgUEhCICovCisJcGNpYmlvc19zZXR1cF9waGJfaW9fc3BhY2UoaG9zZSk7CisKKwkvKiBXaXJlIHVwIFBIQiBidXMgcmVzb3VyY2VzICovCisJcGNpYmlvc19zZXR1cF9waGJfcmVzb3VyY2VzKGhvc2UpOworCisJLyogR2V0IHByb2JlIG1vZGUgYW5kIHBlcmZvcm0gc2NhbiAqLworCW1vZGUgPSBQQ0lfUFJPQkVfTk9STUFMOworCWlmIChub2RlICYmIHBwY19tZC5wY2lfcHJvYmVfbW9kZSkKKwkJbW9kZSA9IHBwY19tZC5wY2lfcHJvYmVfbW9kZShidXMpOworCXByX2RlYnVnKCIgICAgcHJvYmUgbW9kZTogJWRcbiIsIG1vZGUpOworCWlmIChtb2RlID09IFBDSV9QUk9CRV9ERVZUUkVFKSB7CisJCWJ1cy0+c3Vib3JkaW5hdGUgPSBob3NlLT5sYXN0X2J1c25vOworCQlvZl9zY2FuX2J1cyhub2RlLCBidXMpOworCX0KKworCWlmIChtb2RlID09IFBDSV9QUk9CRV9OT1JNQUwpCisJCWhvc2UtPmxhc3RfYnVzbm8gPSBidXMtPnN1Ym9yZGluYXRlID0gcGNpX3NjYW5fY2hpbGRfYnVzKGJ1cyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYwppbmRleCAzYWUxYzY2Li5jMTM2NjhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMKQEAgLTM0LDkgKzM0LDcgQEAKIHZvaWQgcGNpYmlvc19tYWtlX09GX2J1c19tYXAodm9pZCk7CiAKIHN0YXRpYyB2b2lkIGZpeHVwX2NwYzcxMF9wY2k2NChzdHJ1Y3QgcGNpX2RldiogZGV2KTsKLSNpZmRlZiBDT05GSUdfUFBDX09GCiBzdGF0aWMgdTgqIHBjaV90b19PRl9idXNfbWFwOwotI2VuZGlmCiAKIC8qIEJ5IGRlZmF1bHQsIHdlIGRvbid0IHJlLWFzc2lnbiBidXMgbnVtYmVycy4gV2UgZG8gdGhpcyBvbmx5IG9uCiAgKiBzb21lIHBtYWNzCkBAIC04Myw3ICs4MSw2IEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JQk0sCVBDSV9ERVZJQ0VfSURfSUJNX0NQQzcxMF9QQ0k2NCwJZml4dXBfY3BjNzEwX3BjaTY0KTsKIAotI2lmZGVmIENPTkZJR19QUENfT0YKIC8qCiAgKiBGdW5jdGlvbnMgYmVsb3cgYXJlIHVzZWQgb24gT3BlbkZpcm13YXJlIG1hY2hpbmVzLgogICovCkBAIC0zNTcsNDIgKzM1NCwxNSBAQAogCX0KIH0KIAotI2Vsc2UgLyogQ09ORklHX1BQQ19PRiAqLwotdm9pZCBwY2liaW9zX21ha2VfT0ZfYnVzX21hcCh2b2lkKQordm9pZCBfX2RldmluaXQgcGNpYmlvc19zZXR1cF9waGJfaW9fc3BhY2Uoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQogewotfQotI2VuZGlmIC8qIENPTkZJR19QUENfT0YgKi8KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaWJpb3Nfc2Nhbl9waGIoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCXN0cnVjdCBwY2lfYnVzICpidXM7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gaG9zZS0+ZG47CiAJdW5zaWduZWQgbG9uZyBpb19vZmZzZXQ7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSAmaG9zZS0+aW9fcmVzb3VyY2U7CiAKLQlwcl9kZWJ1ZygiUENJOiBTY2FubmluZyBQSEIgJXNcbiIsCi0JCSBub2RlID8gbm9kZS0+ZnVsbF9uYW1lIDogIjxOTyBOQU1FPiIpOwotCi0JLyogQ3JlYXRlIGFuIGVtcHR5IGJ1cyBmb3IgdGhlIHRvcGxldmVsICovCi0JYnVzID0gcGNpX2NyZWF0ZV9idXMoaG9zZS0+cGFyZW50LCBob3NlLT5maXJzdF9idXNubywgaG9zZS0+b3BzLCBob3NlKTsKLQlpZiAoYnVzID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gY3JlYXRlIGJ1cyBmb3IgUENJIGRvbWFpbiAlMDR4XG4iLAotCQkgICAgICAgaG9zZS0+Z2xvYmFsX251bWJlcik7Ci0JCXJldHVybjsKLQl9Ci0JYnVzLT5zZWNvbmRhcnkgPSBob3NlLT5maXJzdF9idXNubzsKLQlob3NlLT5idXMgPSBidXM7Ci0KIAkvKiBGaXh1cCBJTyBzcGFjZSBvZmZzZXQgKi8KIAlpb19vZmZzZXQgPSAodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBpc2FfaW9fYmFzZTsKIAlyZXMtPnN0YXJ0ID0gKHJlcy0+c3RhcnQgKyBpb19vZmZzZXQpICYgMHhmZmZmZmZmZnU7CiAJcmVzLT5lbmQgPSAocmVzLT5lbmQgKyBpb19vZmZzZXQpICYgMHhmZmZmZmZmZnU7Ci0KLQkvKiBXaXJlIHVwIFBIQiBidXMgcmVzb3VyY2VzICovCi0JcGNpYmlvc19zZXR1cF9waGJfcmVzb3VyY2VzKGhvc2UpOwotCi0JLyogU2NhbiBjaGlsZHJlbiAqLwotCWhvc2UtPmxhc3RfYnVzbm8gPSBidXMtPnN1Ym9yZGluYXRlID0gcGNpX3NjYW5fY2hpbGRfYnVzKGJ1cyk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHBjaWJpb3NfaW5pdCh2b2lkKQpAQCAtNDEwLDcgKzM4MCw3IEBACiAJCWlmIChwY2lfYXNzaWduX2FsbF9idXNlcykKIAkJCWhvc2UtPmZpcnN0X2J1c25vID0gbmV4dF9idXNubzsKIAkJaG9zZS0+bGFzdF9idXNubyA9IDB4ZmY7Ci0JCXBjaWJpb3Nfc2Nhbl9waGIoaG9zZSk7CisJCXBjaWJpb3Nfc2Nhbl9waGIoaG9zZSwgaG9zZSk7CiAJCXBjaV9idXNfYWRkX2RldmljZXMoaG9zZS0+YnVzKTsKIAkJaWYgKHBjaV9hc3NpZ25fYWxsX2J1c2VzIHx8IG5leHRfYnVzbm8gPD0gaG9zZS0+bGFzdF9idXNubykKIAkJCW5leHRfYnVzbm8gPSBob3NlLT5sYXN0X2J1c25vICsgcGNpYmlvc19hc3NpZ25fYnVzX29mZnNldDsKQEAgLTQ3OCw3NSArNDQ4LDQgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0vKgotICogTnVsbCBQQ0kgY29uZmlnIGFjY2VzcyBmdW5jdGlvbnMsIGZvciB0aGUgY2FzZSB3aGVuIHdlIGNhbid0Ci0gKiBmaW5kIGEgaG9zZS4KLSAqLwotI2RlZmluZSBOVUxMX1BDSV9PUChydywgc2l6ZSwgdHlwZSkJCQkJCVwKLXN0YXRpYyBpbnQJCQkJCQkJCVwKLW51bGxfIyNydyMjX2NvbmZpZ18jI3NpemUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG9mZnNldCwgdHlwZSB2YWwpCVwKLXsJCQkJCQkJCQlcCi0JcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsgICAgCQkJCVwKLX0KIAotc3RhdGljIGludAotbnVsbF9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsCi0JCSBpbnQgbGVuLCB1MzIgKnZhbCkKLXsKLQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotfQotCi1zdGF0aWMgaW50Ci1udWxsX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsCi0JCSAgaW50IGxlbiwgdTMyIHZhbCkKLXsKLQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotfQotCi1zdGF0aWMgc3RydWN0IHBjaV9vcHMgbnVsbF9wY2lfb3BzID0KLXsKLQkucmVhZCA9IG51bGxfcmVhZF9jb25maWcsCi0JLndyaXRlID0gbnVsbF93cml0ZV9jb25maWcsCi19OwotCi0vKgotICogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGVhcmx5IG9uIGJlZm9yZSBQQ0kgc2Nhbm5pbmcgaXMgZG9uZQotICogYW5kIGFsbCBvZiB0aGUgcGNpX2RldiBhbmQgcGNpX2J1cyBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiBjcmVhdGVkLgotICovCi1zdGF0aWMgc3RydWN0IHBjaV9idXMgKgotZmFrZV9wY2lfYnVzKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgaW50IGJ1c25yKQotewotCXN0YXRpYyBzdHJ1Y3QgcGNpX2J1cyBidXM7Ci0KLQlpZiAoaG9zZSA9PSAwKSB7Ci0JCWhvc2UgPSBwY2lfYnVzX3RvX2hvc2UoYnVzbnIpOwotCQlpZiAoaG9zZSA9PSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBmaW5kIGhvc2UgZm9yIFBDSSBidXMgJWQhXG4iLCBidXNucik7Ci0JfQotCWJ1cy5udW1iZXIgPSBidXNucjsKLQlidXMuc3lzZGF0YSA9IGhvc2U7Ci0JYnVzLm9wcyA9IGhvc2U/IGhvc2UtPm9wczogJm51bGxfcGNpX29wczsKLQlyZXR1cm4gJmJ1czsKLX0KLQotI2RlZmluZSBFQVJMWV9QQ0lfT1AocncsIHNpemUsIHR5cGUpCQkJCQlcCi1pbnQgZWFybHlfIyNydyMjX2NvbmZpZ18jI3NpemUoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgYnVzLAlcCi0JCQkgICAgICAgaW50IGRldmZuLCBpbnQgb2Zmc2V0LCB0eXBlIHZhbHVlKQlcCi17CQkJCQkJCQkJXAotCXJldHVybiBwY2lfYnVzXyMjcncjI19jb25maWdfIyNzaXplKGZha2VfcGNpX2J1cyhob3NlLCBidXMpLAlcCi0JCQkJCSAgICBkZXZmbiwgb2Zmc2V0LCB2YWx1ZSk7CVwKLX0KLQotRUFSTFlfUENJX09QKHJlYWQsIGJ5dGUsIHU4ICopCi1FQVJMWV9QQ0lfT1AocmVhZCwgd29yZCwgdTE2ICopCi1FQVJMWV9QQ0lfT1AocmVhZCwgZHdvcmQsIHUzMiAqKQotRUFSTFlfUENJX09QKHdyaXRlLCBieXRlLCB1OCkKLUVBUkxZX1BDSV9PUCh3cml0ZSwgd29yZCwgdTE2KQotRUFSTFlfUENJX09QKHdyaXRlLCBkd29yZCwgdTMyKQotCi1leHRlcm4gaW50IHBjaV9idXNfZmluZF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCBjYXApOwotaW50IGVhcmx5X2ZpbmRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIGludCBidXMsIGludCBkZXZmbiwKLQkJCSAgaW50IGNhcCkKLXsKLQlyZXR1cm4gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoZmFrZV9wY2lfYnVzKGhvc2UsIGJ1cyksIGRldmZuLCBjYXApOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKaW5kZXggYjZlOWVhNC4uYmE5NDlhMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCkBAIC00MywzMzUgKzQzLDYgQEAKIHVuc2lnbmVkIGxvbmcgcGNpX2lvX2Jhc2UgPSBJU0FfSU9fQkFTRTsKIEVYUE9SVF9TWU1CT0wocGNpX2lvX2Jhc2UpOwogCi1zdGF0aWMgdTMyIGdldF9pbnRfcHJvcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpuYW1lLCB1MzIgZGVmKQotewotCWNvbnN0IHUzMiAqcHJvcDsKLQlpbnQgbGVuOwotCi0JcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgbmFtZSwgJmxlbik7Ci0JaWYgKHByb3AgJiYgbGVuID49IDQpCi0JCXJldHVybiAqcHJvcDsKLQlyZXR1cm4gZGVmOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHBjaV9wYXJzZV9vZl9mbGFncyh1MzIgYWRkcjAsIGludCBicmlkZ2UpCi17Ci0JdW5zaWduZWQgaW50IGZsYWdzID0gMDsKLQotCWlmIChhZGRyMCAmIDB4MDIwMDAwMDApIHsKLQkJZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfTUVNT1JZOwotCQlmbGFncyB8PSAoYWRkcjAgPj4gMjIpICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NDsKLQkJZmxhZ3MgfD0gKGFkZHIwID4+IDI4KSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfMU07Ci0JCWlmIChhZGRyMCAmIDB4NDAwMDAwMDApCi0JCQlmbGFncyB8PSBJT1JFU09VUkNFX1BSRUZFVENICi0JCQkJIHwgUENJX0JBU0VfQUREUkVTU19NRU1fUFJFRkVUQ0g7Ci0JCS8qIE5vdGU6IFdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgUk9NIGhhcyBiZWVuIGxlZnQgZW5hYmxlZAotCQkgKiBieSB0aGUgZmlybXdhcmUgb3Igbm90LiBXZSBtYXJrIGl0IGFzIGRpc2FibGVkIChpZSwgd2UgZG8KLQkJICogbm90IHNldCB0aGUgSU9SRVNPVVJDRV9ST01fRU5BQkxFIGZsYWcpIGZvciBub3cgcmF0aGVyIHRoYW4KLQkJICogZG8gYSBjb25maWcgc3BhY2UgcmVhZCwgaXQgd2lsbCBiZSBmb3JjZS1lbmFibGVkIGlmIG5lZWRlZAotCQkgKi8KLQkJaWYgKCFicmlkZ2UgJiYgKGFkZHIwICYgMHhmZikgPT0gMHgzMCkKLQkJCWZsYWdzIHw9IElPUkVTT1VSQ0VfUkVBRE9OTFk7Ci0JfSBlbHNlIGlmIChhZGRyMCAmIDB4MDEwMDAwMDApCi0JCWZsYWdzID0gSU9SRVNPVVJDRV9JTyB8IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU87Ci0JaWYgKGZsYWdzKQotCQlmbGFncyB8PSBJT1JFU09VUkNFX1NJWkVBTElHTjsKLQlyZXR1cm4gZmxhZ3M7Ci19Ci0KLQotc3RhdGljIHZvaWQgcGNpX3BhcnNlX29mX2FkZHJzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQl1NjQgYmFzZSwgc2l6ZTsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JY29uc3QgdTMyICphZGRyczsKLQl1MzIgaTsKLQlpbnQgcHJvcGxlbjsKLQotCWFkZHJzID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJhc3NpZ25lZC1hZGRyZXNzZXMiLCAmcHJvcGxlbik7Ci0JaWYgKCFhZGRycykKLQkJcmV0dXJuOwotCXByX2RlYnVnKCIgICAgcGFyc2UgYWRkcmVzc2VzICglZCBieXRlcykgQCAlcFxuIiwgcHJvcGxlbiwgYWRkcnMpOwotCWZvciAoOyBwcm9wbGVuID49IDIwOyBwcm9wbGVuIC09IDIwLCBhZGRycyArPSA1KSB7Ci0JCWZsYWdzID0gcGNpX3BhcnNlX29mX2ZsYWdzKGFkZHJzWzBdLCAwKTsKLQkJaWYgKCFmbGFncykKLQkJCWNvbnRpbnVlOwotCQliYXNlID0gb2ZfcmVhZF9udW1iZXIoJmFkZHJzWzFdLCAyKTsKLQkJc2l6ZSA9IG9mX3JlYWRfbnVtYmVyKCZhZGRyc1szXSwgMik7Ci0JCWlmICghc2l6ZSkKLQkJCWNvbnRpbnVlOwotCQlpID0gYWRkcnNbMF0gJiAweGZmOwotCQlwcl9kZWJ1ZygiICBiYXNlOiAlbGx4LCBzaXplOiAlbGx4LCBpOiAleFxuIiwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKWJhc2UsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplLCBpKTsKLQotCQlpZiAoUENJX0JBU0VfQUREUkVTU18wIDw9IGkgJiYgaSA8PSBQQ0lfQkFTRV9BRERSRVNTXzUpIHsKLQkJCXJlcyA9ICZkZXYtPnJlc291cmNlWyhpIC0gUENJX0JBU0VfQUREUkVTU18wKSA+PiAyXTsKLQkJfSBlbHNlIGlmIChpID09IGRldi0+cm9tX2Jhc2VfcmVnKSB7Ci0JCQlyZXMgPSAmZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXTsKLQkJCWZsYWdzIHw9IElPUkVTT1VSQ0VfUkVBRE9OTFkgfCBJT1JFU09VUkNFX0NBQ0hFQUJMRTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBiYWQgY2ZnIHJlZyBudW0gMHgleFxuIiwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlyZXMtPnN0YXJ0ID0gYmFzZTsKLQkJcmVzLT5lbmQgPSBiYXNlICsgc2l6ZSAtIDE7Ci0JCXJlcy0+ZmxhZ3MgPSBmbGFnczsKLQkJcmVzLT5uYW1lID0gcGNpX25hbWUoZGV2KTsKLQl9Ci19Ci0KLXN0cnVjdCBwY2lfZGV2ICpvZl9jcmVhdGVfcGNpX2RldihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCi0JCQkJIHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBkZXZmbikKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCWNvbnN0IGNoYXIgKnR5cGU7Ci0KLQlkZXYgPSBhbGxvY19wY2lfZGV2KCk7Ci0JaWYgKCFkZXYpCi0JCXJldHVybiBOVUxMOwotCXR5cGUgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7Ci0JaWYgKHR5cGUgPT0gTlVMTCkKLQkJdHlwZSA9ICIiOwotCi0JcHJfZGVidWcoIiAgICBjcmVhdGUgZGV2aWNlLCBkZXZmbjogJXgsIHR5cGU6ICVzXG4iLCBkZXZmbiwgdHlwZSk7Ci0KLQlkZXYtPmJ1cyA9IGJ1czsKLQlkZXYtPnN5c2RhdGEgPSBub2RlOwotCWRldi0+ZGV2LnBhcmVudCA9IGJ1cy0+YnJpZGdlOwotCWRldi0+ZGV2LmJ1cyA9ICZwY2lfYnVzX3R5cGU7Ci0JZGV2LT5kZXZmbiA9IGRldmZuOwotCWRldi0+bXVsdGlmdW5jdGlvbiA9IDA7CQkvKiBtYXliZSBhIGxpZT8gKi8KLQlkZXYtPm5lZWRzX2ZyZXNldCA9IDA7ICAgICAgIC8qIHBjaWUgZnVuZGFtZW50YWwgcmVzZXQgcmVxdWlyZWQgKi8KLQotCWRldi0+dmVuZG9yID0gZ2V0X2ludF9wcm9wKG5vZGUsICJ2ZW5kb3ItaWQiLCAweGZmZmYpOwotCWRldi0+ZGV2aWNlID0gZ2V0X2ludF9wcm9wKG5vZGUsICJkZXZpY2UtaWQiLCAweGZmZmYpOwotCWRldi0+c3Vic3lzdGVtX3ZlbmRvciA9IGdldF9pbnRfcHJvcChub2RlLCAic3Vic3lzdGVtLXZlbmRvci1pZCIsIDApOwotCWRldi0+c3Vic3lzdGVtX2RldmljZSA9IGdldF9pbnRfcHJvcChub2RlLCAic3Vic3lzdGVtLWlkIiwgMCk7Ci0KLQlkZXYtPmNmZ19zaXplID0gcGNpX2NmZ19zcGFjZV9zaXplKGRldik7Ci0KLQlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiJTA0eDolMDJ4OiUwMnguJWQiLCBwY2lfZG9tYWluX25yKGJ1cyksCi0JCWRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKGRldmZuKSwgUENJX0ZVTkMoZGV2Zm4pKTsKLQlkZXYtPmNsYXNzID0gZ2V0X2ludF9wcm9wKG5vZGUsICJjbGFzcy1jb2RlIiwgMCk7Ci0JZGV2LT5yZXZpc2lvbiA9IGdldF9pbnRfcHJvcChub2RlLCAicmV2aXNpb24taWQiLCAwKTsKLQotCXByX2RlYnVnKCIgICAgY2xhc3M6IDB4JXhcbiIsIGRldi0+Y2xhc3MpOwotCXByX2RlYnVnKCIgICAgcmV2aXNpb246IDB4JXhcbiIsIGRldi0+cmV2aXNpb24pOwotCi0JZGV2LT5jdXJyZW50X3N0YXRlID0gNDsJCS8qIHVua25vd24gcG93ZXIgc3RhdGUgKi8KLQlkZXYtPmVycm9yX3N0YXRlID0gcGNpX2NoYW5uZWxfaW9fbm9ybWFsOwotCWRldi0+ZG1hX21hc2sgPSAweGZmZmZmZmZmOwotCi0JaWYgKCFzdHJjbXAodHlwZSwgInBjaSIpIHx8ICFzdHJjbXAodHlwZSwgInBjaWV4IikpIHsKLQkJLyogYSBQQ0ktUENJIGJyaWRnZSAqLwotCQlkZXYtPmhkcl90eXBlID0gUENJX0hFQURFUl9UWVBFX0JSSURHRTsKLQkJZGV2LT5yb21fYmFzZV9yZWcgPSBQQ0lfUk9NX0FERFJFU1MxOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBlLCAiY2FyZGJ1cyIpKSB7Ci0JCWRldi0+aGRyX3R5cGUgPSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUzsKLQl9IGVsc2UgewotCQlkZXYtPmhkcl90eXBlID0gUENJX0hFQURFUl9UWVBFX05PUk1BTDsKLQkJZGV2LT5yb21fYmFzZV9yZWcgPSBQQ0lfUk9NX0FERFJFU1M7Ci0JCS8qIE1heWJlIGRvIGEgZGVmYXVsdCBPRiBtYXBwaW5nIGhlcmUgKi8KLQkJZGV2LT5pcnEgPSBOT19JUlE7Ci0JfQotCi0JcGNpX3BhcnNlX29mX2FkZHJzKG5vZGUsIGRldik7Ci0KLQlwcl9kZWJ1ZygiICAgIGFkZGluZyB0byBzeXN0ZW0gLi4uXG4iKTsKLQotCXBjaV9kZXZpY2VfYWRkKGRldiwgYnVzKTsKLQotCXJldHVybiBkZXY7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX2NyZWF0ZV9wY2lfZGV2KTsKLQotc3RhdGljIHZvaWQgX19kZXZpbml0IF9fb2Zfc2Nhbl9idXMoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCSAgICBzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgcmVzY2FuX2V4aXN0aW5nKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7Ci0JY29uc3QgdTMyICpyZWc7Ci0JaW50IHJlZ2xlbiwgZGV2Zm47Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQotCXByX2RlYnVnKCJvZl9zY2FuX2J1cyglcykgYnVzIG5vICVkLi4uIFxuIiwKLQkJIG5vZGUtPmZ1bGxfbmFtZSwgYnVzLT5udW1iZXIpOwotCi0JLyogU2NhbiBkaXJlY3QgY2hpbGRyZW4gKi8KLQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5vZGUsIGNoaWxkKSB7Ci0JCXByX2RlYnVnKCIgICogJXNcbiIsIGNoaWxkLT5mdWxsX25hbWUpOwotCQlyZWcgPSBvZl9nZXRfcHJvcGVydHkoY2hpbGQsICJyZWciLCAmcmVnbGVuKTsKLQkJaWYgKHJlZyA9PSBOVUxMIHx8IHJlZ2xlbiA8IDIwKQotCQkJY29udGludWU7Ci0JCWRldmZuID0gKHJlZ1swXSA+PiA4KSAmIDB4ZmY7Ci0KLQkJLyogY3JlYXRlIGEgbmV3IHBjaV9kZXYgZm9yIHRoaXMgZGV2aWNlICovCi0JCWRldiA9IG9mX2NyZWF0ZV9wY2lfZGV2KGNoaWxkLCBidXMsIGRldmZuKTsKLQkJaWYgKCFkZXYpCi0JCQljb250aW51ZTsKLQkJcHJfZGVidWcoIiAgICBkZXYgaGVhZGVyIHR5cGU6ICV4XG4iLCBkZXYtPmhkcl90eXBlKTsKLQl9Ci0KLQkvKiBBcHBseSBhbGwgZml4dXBzIG5lY2Vzc2FyeS4gV2UgZG9uJ3QgZml4dXAgdGhlIGJ1cyAic2VsZiIKLQkgKiBmb3IgYW4gZXhpc3RpbmcgYnJpZGdlIHRoYXQgaXMgYmVpbmcgcmVzY2FubmVkCi0JICovCi0JaWYgKCFyZXNjYW5fZXhpc3RpbmcpCi0JCXBjaWJpb3Nfc2V0dXBfYnVzX3NlbGYoYnVzKTsKLQlwY2liaW9zX3NldHVwX2J1c19kZXZpY2VzKGJ1cyk7Ci0KLQkvKiBOb3cgc2NhbiBjaGlsZCBidXNzZXMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQkJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSB8fAotCQkgICAgZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykgewotCQkJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwotCQkJaWYgKGRldikKLQkJCQlvZl9zY2FuX3BjaV9icmlkZ2UoY2hpbGQsIGRldik7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgX19kZXZpbml0IG9mX3NjYW5fYnVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKLQkJCSAgIHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0JX19vZl9zY2FuX2J1cyhub2RlLCBidXMsIDApOwotfQotRVhQT1JUX1NZTUJPTF9HUEwob2Zfc2Nhbl9idXMpOwotCi12b2lkIF9fZGV2aW5pdCBvZl9yZXNjYW5fYnVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKLQkJCSAgICAgc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlfX29mX3NjYW5fYnVzKG5vZGUsIGJ1cywgMSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChvZl9yZXNjYW5fYnVzKTsKLQotdm9pZCBfX2RldmluaXQgb2Zfc2Nhbl9wY2lfYnJpZGdlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKLQkJCQkgIHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IHBjaV9idXMgKmJ1czsKLQljb25zdCB1MzIgKmJ1c3JhbmdlLCAqcmFuZ2VzOwotCWludCBsZW4sIGksIG1vZGU7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JdW5zaWduZWQgaW50IGZsYWdzOwotCXU2NCBzaXplOwotCi0JcHJfZGVidWcoIm9mX3NjYW5fcGNpX2JyaWRnZSglcylcbiIsIG5vZGUtPmZ1bGxfbmFtZSk7Ci0KLQkvKiBwYXJzZSBidXMtcmFuZ2UgcHJvcGVydHkgKi8KLQlidXNyYW5nZSA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAiYnVzLXJhbmdlIiwgJmxlbik7Ci0JaWYgKGJ1c3JhbmdlID09IE5VTEwgfHwgbGVuICE9IDgpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNhbid0IGdldCBidXMtcmFuZ2UgZm9yIFBDSS1QQ0kgYnJpZGdlICVzXG4iLAotCQkgICAgICAgbm9kZS0+ZnVsbF9uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlyYW5nZXMgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgInJhbmdlcyIsICZsZW4pOwotCWlmIChyYW5nZXMgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiQ2FuJ3QgZ2V0IHJhbmdlcyBmb3IgUENJLVBDSSBicmlkZ2UgJXNcbiIsCi0JCSAgICAgICBub2RlLT5mdWxsX25hbWUpOwotCQlyZXR1cm47Ci0JfQotCi0JYnVzID0gcGNpX2FkZF9uZXdfYnVzKGRldi0+YnVzLCBkZXYsIGJ1c3JhbmdlWzBdKTsKLQlpZiAoIWJ1cykgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBjcmVhdGUgcGNpIGJ1cyBmb3IgJXNcbiIsCi0JCSAgICAgICBub2RlLT5mdWxsX25hbWUpOwotCQlyZXR1cm47Ci0JfQotCi0JYnVzLT5wcmltYXJ5ID0gZGV2LT5idXMtPm51bWJlcjsKLQlidXMtPnN1Ym9yZGluYXRlID0gYnVzcmFuZ2VbMV07Ci0JYnVzLT5icmlkZ2VfY3RsID0gMDsKLQlidXMtPnN5c2RhdGEgPSBub2RlOwotCi0JLyogcGFyc2UgcmFuZ2VzIHByb3BlcnR5ICovCi0JLyogUENJICNhZGRyZXNzLWNlbGxzID09IDMgYW5kICNzaXplLWNlbGxzID09IDIgYWx3YXlzICovCi0JcmVzID0gJmRldi0+cmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRVNdOwotCWZvciAoaSA9IDA7IGkgPCBQQ0lfTlVNX1JFU09VUkNFUyAtIFBDSV9CUklER0VfUkVTT1VSQ0VTOyArK2kpIHsKLQkJcmVzLT5mbGFncyA9IDA7Ci0JCWJ1cy0+cmVzb3VyY2VbaV0gPSByZXM7Ci0JCSsrcmVzOwotCX0KLQlpID0gMTsKLQlmb3IgKDsgbGVuID49IDMyOyBsZW4gLT0gMzIsIHJhbmdlcyArPSA4KSB7Ci0JCWZsYWdzID0gcGNpX3BhcnNlX29mX2ZsYWdzKHJhbmdlc1swXSwgMSk7Ci0JCXNpemUgPSBvZl9yZWFkX251bWJlcigmcmFuZ2VzWzZdLCAyKTsKLQkJaWYgKGZsYWdzID09IDAgfHwgc2l6ZSA9PSAwKQotCQkJY29udGludWU7Ci0JCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJCXJlcyA9IGJ1cy0+cmVzb3VyY2VbMF07Ci0JCQlpZiAocmVzLT5mbGFncykgewotCQkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBpZ25vcmluZyBleHRyYSBJL08gcmFuZ2UiCi0JCQkJICAgICAgICIgZm9yIGJyaWRnZSAlc1xuIiwgbm9kZS0+ZnVsbF9uYW1lKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChpID49IFBDSV9OVU1fUkVTT1VSQ0VTIC0gUENJX0JSSURHRV9SRVNPVVJDRVMpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIlBDSTogdG9vIG1hbnkgbWVtb3J5IHJhbmdlcyIKLQkJCQkgICAgICAgIiBmb3IgYnJpZGdlICVzXG4iLCBub2RlLT5mdWxsX25hbWUpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJcmVzID0gYnVzLT5yZXNvdXJjZVtpXTsKLQkJCSsraTsKLQkJfQotCQlyZXMtPnN0YXJ0ID0gb2ZfcmVhZF9udW1iZXIoJnJhbmdlc1sxXSwgMik7Ci0JCXJlcy0+ZW5kID0gcmVzLT5zdGFydCArIHNpemUgLSAxOwotCQlyZXMtPmZsYWdzID0gZmxhZ3M7Ci0JfQotCXNwcmludGYoYnVzLT5uYW1lLCAiUENJIEJ1cyAlMDR4OiUwMngiLCBwY2lfZG9tYWluX25yKGJ1cyksCi0JCWJ1cy0+bnVtYmVyKTsKLQlwcl9kZWJ1ZygiICAgIGJ1cyBuYW1lOiAlc1xuIiwgYnVzLT5uYW1lKTsKLQotCW1vZGUgPSBQQ0lfUFJPQkVfTk9STUFMOwotCWlmIChwcGNfbWQucGNpX3Byb2JlX21vZGUpCi0JCW1vZGUgPSBwcGNfbWQucGNpX3Byb2JlX21vZGUoYnVzKTsKLQlwcl9kZWJ1ZygiICAgIHByb2JlIG1vZGU6ICVkXG4iLCBtb2RlKTsKLQotCWlmIChtb2RlID09IFBDSV9QUk9CRV9ERVZUUkVFKQotCQlvZl9zY2FuX2J1cyhub2RlLCBidXMpOwotCWVsc2UgaWYgKG1vZGUgPT0gUENJX1BST0JFX05PUk1BTCkKLQkJcGNpX3NjYW5fY2hpbGRfYnVzKGJ1cyk7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX3NjYW5fcGNpX2JyaWRnZSk7Ci0KLXZvaWQgX19kZXZpbml0IHNjYW5fcGhiKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IGhvc2UtPmRuOwotCWludCBtb2RlOwotCi0JcHJfZGVidWcoIlBDSTogU2Nhbm5pbmcgUEhCICVzXG4iLAotCQkgbm9kZSA/IG5vZGUtPmZ1bGxfbmFtZSA6ICI8Tk8gTkFNRT4iKTsKLQotCS8qIENyZWF0ZSBhbiBlbXB0eSBidXMgZm9yIHRoZSB0b3BsZXZlbCAqLwotCWJ1cyA9IHBjaV9jcmVhdGVfYnVzKGhvc2UtPnBhcmVudCwgaG9zZS0+Zmlyc3RfYnVzbm8sIGhvc2UtPm9wcywgbm9kZSk7Ci0JaWYgKGJ1cyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGNyZWF0ZSBidXMgZm9yIFBDSSBkb21haW4gJTA0eFxuIiwKLQkJICAgICAgIGhvc2UtPmdsb2JhbF9udW1iZXIpOwotCQlyZXR1cm47Ci0JfQotCWJ1cy0+c2Vjb25kYXJ5ID0gaG9zZS0+Zmlyc3RfYnVzbm87Ci0JaG9zZS0+YnVzID0gYnVzOwotCi0JLyogR2V0IHNvbWUgSU8gc3BhY2UgZm9yIHRoZSBuZXcgUEhCICovCi0JcGNpYmlvc19tYXBfaW9fc3BhY2UoYnVzKTsKLQotCS8qIFdpcmUgdXAgUEhCIGJ1cyByZXNvdXJjZXMgKi8KLQlwY2liaW9zX3NldHVwX3BoYl9yZXNvdXJjZXMoaG9zZSk7Ci0KLQkvKiBHZXQgcHJvYmUgbW9kZSBhbmQgcGVyZm9ybSBzY2FuICovCi0JbW9kZSA9IFBDSV9QUk9CRV9OT1JNQUw7Ci0JaWYgKG5vZGUgJiYgcHBjX21kLnBjaV9wcm9iZV9tb2RlKQotCQltb2RlID0gcHBjX21kLnBjaV9wcm9iZV9tb2RlKGJ1cyk7Ci0JcHJfZGVidWcoIiAgICBwcm9iZSBtb2RlOiAlZFxuIiwgbW9kZSk7Ci0JaWYgKG1vZGUgPT0gUENJX1BST0JFX0RFVlRSRUUpIHsKLQkJYnVzLT5zdWJvcmRpbmF0ZSA9IGhvc2UtPmxhc3RfYnVzbm87Ci0JCW9mX3NjYW5fYnVzKG5vZGUsIGJ1cyk7Ci0JfQotCi0JaWYgKG1vZGUgPT0gUENJX1BST0JFX05PUk1BTCkKLQkJaG9zZS0+bGFzdF9idXNubyA9IGJ1cy0+c3Vib3JkaW5hdGUgPSBwY2lfc2Nhbl9jaGlsZF9idXMoYnVzKTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgcGNpYmlvc19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCAqdG1wOwpAQCAtMzkzLDcgKzY0LDcgQEAKIAogCS8qIFNjYW4gYWxsIG9mIHRoZSByZWNvcmRlZCBQQ0kgY29udHJvbGxlcnMuICAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob3NlLCB0bXAsICZob3NlX2xpc3QsIGxpc3Rfbm9kZSkgewotCQlzY2FuX3BoYihob3NlKTsKKwkJcGNpYmlvc19zY2FuX3BoYihob3NlLCBob3NlLT5kbik7CiAJCXBjaV9idXNfYWRkX2RldmljZXMoaG9zZS0+YnVzKTsKIAl9CiAKQEAgLTUyNyw2ICsxOTgsMTEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjaWJpb3NfbWFwX2lvX3NwYWNlKTsKIAordm9pZCBfX2RldmluaXQgcGNpYmlvc19zZXR1cF9waGJfaW9fc3BhY2Uoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQoreworCXBjaWJpb3NfbWFwX2lvX3NwYWNlKGhvc2UtPmJ1cyk7Cit9CisKICNkZWZpbmUgSU9CQVNFX0JSSURHRV9OVU1CRVIJMAogI2RlZmluZSBJT0JBU0VfTUVNT1JZCQkxCiAjZGVmaW5lIElPQkFTRV9JTwkJMgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfb2Zfc2Nhbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfb2Zfc2Nhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMTFmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9vZl9zY2FuLmMKQEAgLTAsMCArMSwzNTkgQEAKKy8qCisgKiBIZWxwZXIgcm91dGluZXMgdG8gc2NhbiB0aGUgZGV2aWNlIHRyZWUgZm9yIFBDSSBkZXZpY2VzIGFuZCBidXNzZXMKKyAqCisgKiBNaWdyYXRlZCBvdXQgb2YgUG93ZXJQQyBhcmNoaXRlY3R1cmUgcGNpXzY0LmMgZmlsZSBieSBHcmFudCBMaWtlbHkKKyAqIDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPiBzbyB0aGF0IHRoZXNlIHJvdXRpbmVzIGFyZSBhdmFpbGFibGUgZm9yCisgKiAzMiBiaXQgYWxzby4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQW50b24gQmxhbmNoYXJkIDxhbnRvbkBhdS5pYm0uY29tPiwgSUJNCisgKiAgIFJld29yaywgYmFzZWQgb24gYWxwaGEgUENJIGNvZGUuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKworLyoqCisgKiBnZXRfaW50X3Byb3AgLSBEZWNvZGUgYSB1MzIgZnJvbSBhIGRldmljZSB0cmVlIHByb3BlcnR5CisgKi8KK3N0YXRpYyB1MzIgZ2V0X2ludF9wcm9wKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBkZWYpCit7CisJY29uc3QgdTMyICpwcm9wOworCWludCBsZW47CisKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCBuYW1lLCAmbGVuKTsKKwlpZiAocHJvcCAmJiBsZW4gPj0gNCkKKwkJcmV0dXJuICpwcm9wOworCXJldHVybiBkZWY7Cit9CisKKy8qKgorICogcGNpX3BhcnNlX29mX2ZsYWdzIC0gUGFyc2UgdGhlIGZsYWdzIGNlbGwgb2YgYSBkZXZpY2UgdHJlZSBQQ0kgYWRkcmVzcworICogQGFkZHIwOiB2YWx1ZSBvZiAxc3QgY2VsbCBvZiBhIGRldmljZSB0cmVlIFBDSSBhZGRyZXNzLgorICogQGJyaWRnZTogU2V0IHRoaXMgZmxhZyBpZiB0aGUgYWRkcmVzcyBpcyBmcm9tIGEgYnJpZGdlICdyYW5nZXMnIHByb3BlcnR5CisgKi8KK3Vuc2lnbmVkIGludCBwY2lfcGFyc2Vfb2ZfZmxhZ3ModTMyIGFkZHIwLCBpbnQgYnJpZGdlKQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CisKKwlpZiAoYWRkcjAgJiAweDAyMDAwMDAwKSB7CisJCWZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfCBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX01FTU9SWTsKKwkJZmxhZ3MgfD0gKGFkZHIwID4+IDIyKSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfNjQ7CisJCWZsYWdzIHw9IChhZGRyMCA+PiAyOCkgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzFNOworCQlpZiAoYWRkcjAgJiAweDQwMDAwMDAwKQorCQkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9QUkVGRVRDSAorCQkJCSB8IFBDSV9CQVNFX0FERFJFU1NfTUVNX1BSRUZFVENIOworCQkvKiBOb3RlOiBXZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIFJPTSBoYXMgYmVlbiBsZWZ0IGVuYWJsZWQKKwkJICogYnkgdGhlIGZpcm13YXJlIG9yIG5vdC4gV2UgbWFyayBpdCBhcyBkaXNhYmxlZCAoaWUsIHdlIGRvCisJCSAqIG5vdCBzZXQgdGhlIElPUkVTT1VSQ0VfUk9NX0VOQUJMRSBmbGFnKSBmb3Igbm93IHJhdGhlciB0aGFuCisJCSAqIGRvIGEgY29uZmlnIHNwYWNlIHJlYWQsIGl0IHdpbGwgYmUgZm9yY2UtZW5hYmxlZCBpZiBuZWVkZWQKKwkJICovCisJCWlmICghYnJpZGdlICYmIChhZGRyMCAmIDB4ZmYpID09IDB4MzApCisJCQlmbGFncyB8PSBJT1JFU09VUkNFX1JFQURPTkxZOworCX0gZWxzZSBpZiAoYWRkcjAgJiAweDAxMDAwMDAwKQorCQlmbGFncyA9IElPUkVTT1VSQ0VfSU8gfCBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPOworCWlmIChmbGFncykKKwkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9TSVpFQUxJR047CisJcmV0dXJuIGZsYWdzOworfQorCisvKioKKyAqIG9mX3BjaV9wYXJzZV9hZGRycyAtIFBhcnNlIFBDSSBhZGRyZXNzZXMgYXNzaWduZWQgaW4gdGhlIGRldmljZSB0cmVlIG5vZGUKKyAqIEBub2RlOiBkZXZpY2UgdHJlZSBub2RlIGZvciB0aGUgUENJIGRldmljZQorICogQGRldjogcGNpX2RldiBzdHJ1Y3R1cmUgZm9yIHRoZSBkZXZpY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgJ2Fzc2lnbmVkLWFkZHJlc3NlcycgcHJvcGVydHkgb2YgYSBQQ0kgZGV2aWNlcycKKyAqIGRldmljZSB0cmVlIG5vZGUgYW5kIHdyaXRlcyB0aGVtIGludG8gdGhlIGFzc29jaWF0ZWQgcGNpX2RldiBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyB2b2lkIG9mX3BjaV9wYXJzZV9hZGRycyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdTY0IGJhc2UsIHNpemU7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWNvbnN0IHUzMiAqYWRkcnM7CisJdTMyIGk7CisJaW50IHByb3BsZW47CisKKwlhZGRycyA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAiYXNzaWduZWQtYWRkcmVzc2VzIiwgJnByb3BsZW4pOworCWlmICghYWRkcnMpCisJCXJldHVybjsKKwlwcl9kZWJ1ZygiICAgIHBhcnNlIGFkZHJlc3NlcyAoJWQgYnl0ZXMpIEAgJXBcbiIsIHByb3BsZW4sIGFkZHJzKTsKKwlmb3IgKDsgcHJvcGxlbiA+PSAyMDsgcHJvcGxlbiAtPSAyMCwgYWRkcnMgKz0gNSkgeworCQlmbGFncyA9IHBjaV9wYXJzZV9vZl9mbGFncyhhZGRyc1swXSwgMCk7CisJCWlmICghZmxhZ3MpCisJCQljb250aW51ZTsKKwkJYmFzZSA9IG9mX3JlYWRfbnVtYmVyKCZhZGRyc1sxXSwgMik7CisJCXNpemUgPSBvZl9yZWFkX251bWJlcigmYWRkcnNbM10sIDIpOworCQlpZiAoIXNpemUpCisJCQljb250aW51ZTsKKwkJaSA9IGFkZHJzWzBdICYgMHhmZjsKKwkJcHJfZGVidWcoIiAgYmFzZTogJWxseCwgc2l6ZTogJWxseCwgaTogJXhcbiIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpc2l6ZSwgaSk7CisKKwkJaWYgKFBDSV9CQVNFX0FERFJFU1NfMCA8PSBpICYmIGkgPD0gUENJX0JBU0VfQUREUkVTU181KSB7CisJCQlyZXMgPSAmZGV2LT5yZXNvdXJjZVsoaSAtIFBDSV9CQVNFX0FERFJFU1NfMCkgPj4gMl07CisJCX0gZWxzZSBpZiAoaSA9PSBkZXYtPnJvbV9iYXNlX3JlZykgeworCQkJcmVzID0gJmRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV07CisJCQlmbGFncyB8PSBJT1JFU09VUkNFX1JFQURPTkxZIHwgSU9SRVNPVVJDRV9DQUNIRUFCTEU7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlBDSTogYmFkIGNmZyByZWcgbnVtIDB4JXhcbiIsIGkpOworCQkJY29udGludWU7CisJCX0KKwkJcmVzLT5zdGFydCA9IGJhc2U7CisJCXJlcy0+ZW5kID0gYmFzZSArIHNpemUgLSAxOworCQlyZXMtPmZsYWdzID0gZmxhZ3M7CisJCXJlcy0+bmFtZSA9IHBjaV9uYW1lKGRldik7CisJfQorfQorCisvKioKKyAqIG9mX2NyZWF0ZV9wY2lfZGV2IC0gR2l2ZW4gYSBkZXZpY2UgdHJlZSBub2RlIG9uIGEgcGNpIGJ1cywgY3JlYXRlIGEgcGNpX2RldgorICogQG5vZGU6IGRldmljZSB0cmVlIG5vZGUgcG9pbnRlcgorICogQGJ1czogYnVzIHRoZSBkZXZpY2UgaXMgc2l0dGluZyBvbgorICogQGRldmZuOiBQQ0kgZnVuY3Rpb24gbnVtYmVyLCBleHRyYWN0ZWQgZnJvbSBkZXZpY2UgdHJlZSBieSBjYWxsZXIuCisgKi8KK3N0cnVjdCBwY2lfZGV2ICpvZl9jcmVhdGVfcGNpX2RldihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJIHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBkZXZmbikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWNvbnN0IGNoYXIgKnR5cGU7CisKKwlkZXYgPSBhbGxvY19wY2lfZGV2KCk7CisJaWYgKCFkZXYpCisJCXJldHVybiBOVUxMOworCXR5cGUgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7CisJaWYgKHR5cGUgPT0gTlVMTCkKKwkJdHlwZSA9ICIiOworCisJcHJfZGVidWcoIiAgICBjcmVhdGUgZGV2aWNlLCBkZXZmbjogJXgsIHR5cGU6ICVzXG4iLCBkZXZmbiwgdHlwZSk7CisKKwlkZXYtPmJ1cyA9IGJ1czsKKwlkZXYtPnN5c2RhdGEgPSBub2RlOworCWRldi0+ZGV2LnBhcmVudCA9IGJ1cy0+YnJpZGdlOworCWRldi0+ZGV2LmJ1cyA9ICZwY2lfYnVzX3R5cGU7CisJZGV2LT5kZXZmbiA9IGRldmZuOworCWRldi0+bXVsdGlmdW5jdGlvbiA9IDA7CQkvKiBtYXliZSBhIGxpZT8gKi8KKwlkZXYtPm5lZWRzX2ZyZXNldCA9IDA7CQkvKiBwY2llIGZ1bmRhbWVudGFsIHJlc2V0IHJlcXVpcmVkICovCisKKwlkZXYtPnZlbmRvciA9IGdldF9pbnRfcHJvcChub2RlLCAidmVuZG9yLWlkIiwgMHhmZmZmKTsKKwlkZXYtPmRldmljZSA9IGdldF9pbnRfcHJvcChub2RlLCAiZGV2aWNlLWlkIiwgMHhmZmZmKTsKKwlkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPSBnZXRfaW50X3Byb3Aobm9kZSwgInN1YnN5c3RlbS12ZW5kb3ItaWQiLCAwKTsKKwlkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPSBnZXRfaW50X3Byb3Aobm9kZSwgInN1YnN5c3RlbS1pZCIsIDApOworCisJZGV2LT5jZmdfc2l6ZSA9IHBjaV9jZmdfc3BhY2Vfc2l6ZShkZXYpOworCisJZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgIiUwNHg6JTAyeDolMDJ4LiVkIiwgcGNpX2RvbWFpbl9ucihidXMpLAorCQlkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChkZXZmbiksIFBDSV9GVU5DKGRldmZuKSk7CisJZGV2LT5jbGFzcyA9IGdldF9pbnRfcHJvcChub2RlLCAiY2xhc3MtY29kZSIsIDApOworCWRldi0+cmV2aXNpb24gPSBnZXRfaW50X3Byb3Aobm9kZSwgInJldmlzaW9uLWlkIiwgMCk7CisKKwlwcl9kZWJ1ZygiICAgIGNsYXNzOiAweCV4XG4iLCBkZXYtPmNsYXNzKTsKKwlwcl9kZWJ1ZygiICAgIHJldmlzaW9uOiAweCV4XG4iLCBkZXYtPnJldmlzaW9uKTsKKworCWRldi0+Y3VycmVudF9zdGF0ZSA9IDQ7CQkvKiB1bmtub3duIHBvd2VyIHN0YXRlICovCisJZGV2LT5lcnJvcl9zdGF0ZSA9IHBjaV9jaGFubmVsX2lvX25vcm1hbDsKKwlkZXYtPmRtYV9tYXNrID0gMHhmZmZmZmZmZjsKKworCWlmICghc3RyY21wKHR5cGUsICJwY2kiKSB8fCAhc3RyY21wKHR5cGUsICJwY2lleCIpKSB7CisJCS8qIGEgUENJLVBDSSBicmlkZ2UgKi8KKwkJZGV2LT5oZHJfdHlwZSA9IFBDSV9IRUFERVJfVFlQRV9CUklER0U7CisJCWRldi0+cm9tX2Jhc2VfcmVnID0gUENJX1JPTV9BRERSRVNTMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgImNhcmRidXMiKSkgeworCQlkZXYtPmhkcl90eXBlID0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVM7CisJfSBlbHNlIHsKKwkJZGV2LT5oZHJfdHlwZSA9IFBDSV9IRUFERVJfVFlQRV9OT1JNQUw7CisJCWRldi0+cm9tX2Jhc2VfcmVnID0gUENJX1JPTV9BRERSRVNTOworCQkvKiBNYXliZSBkbyBhIGRlZmF1bHQgT0YgbWFwcGluZyBoZXJlICovCisJCWRldi0+aXJxID0gTk9fSVJROworCX0KKworCW9mX3BjaV9wYXJzZV9hZGRycyhub2RlLCBkZXYpOworCisJcHJfZGVidWcoIiAgICBhZGRpbmcgdG8gc3lzdGVtIC4uLlxuIik7CisKKwlwY2lfZGV2aWNlX2FkZChkZXYsIGJ1cyk7CisKKwlyZXR1cm4gZGV2OworfQorRVhQT1JUX1NZTUJPTChvZl9jcmVhdGVfcGNpX2Rldik7CisKKy8qKgorICogb2Zfc2Nhbl9wY2lfYnJpZGdlIC0gU2V0IHVwIGEgUENJIGJyaWRnZSBhbmQgc2NhbiBmb3IgY2hpbGQgbm9kZXMKKyAqIEBub2RlOiBkZXZpY2UgdHJlZSBub2RlIG9mIGJyaWRnZQorICogQGRldjogcGNpX2RldiBzdHJ1Y3R1cmUgZm9yIHRoZSBicmlkZ2UKKyAqCisgKiBvZl9zY2FuX2J1cygpIGNhbGxzIHRoaXMgcm91dGluZSBmb3IgZWFjaCBQQ0kgYnJpZGdlIHRoYXQgaXQgZmluZHMsIGFuZAorICogdGhpcyByb3V0aW5lIGluIHR1cm4gY2FsbCBvZl9zY2FuX2J1cygpIHJlY3VzaXZlbHkgdG8gc2NhbiBmb3IgbW9yZSBjaGlsZAorICogZGV2aWNlcy4KKyAqLwordm9pZCBfX2RldmluaXQgb2Zfc2Nhbl9wY2lfYnJpZGdlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkgIHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKwljb25zdCB1MzIgKmJ1c3JhbmdlLCAqcmFuZ2VzOworCWludCBsZW4sIGksIG1vZGU7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXU2NCBzaXplOworCisJcHJfZGVidWcoIm9mX3NjYW5fcGNpX2JyaWRnZSglcylcbiIsIG5vZGUtPmZ1bGxfbmFtZSk7CisKKwkvKiBwYXJzZSBidXMtcmFuZ2UgcHJvcGVydHkgKi8KKwlidXNyYW5nZSA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAiYnVzLXJhbmdlIiwgJmxlbik7CisJaWYgKGJ1c3JhbmdlID09IE5VTEwgfHwgbGVuICE9IDgpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNhbid0IGdldCBidXMtcmFuZ2UgZm9yIFBDSS1QQ0kgYnJpZGdlICVzXG4iLAorCQkgICAgICAgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlyYW5nZXMgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgInJhbmdlcyIsICZsZW4pOworCWlmIChyYW5nZXMgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiQ2FuJ3QgZ2V0IHJhbmdlcyBmb3IgUENJLVBDSSBicmlkZ2UgJXNcbiIsCisJCSAgICAgICBub2RlLT5mdWxsX25hbWUpOworCQlyZXR1cm47CisJfQorCisJYnVzID0gcGNpX2FkZF9uZXdfYnVzKGRldi0+YnVzLCBkZXYsIGJ1c3JhbmdlWzBdKTsKKwlpZiAoIWJ1cykgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBjcmVhdGUgcGNpIGJ1cyBmb3IgJXNcbiIsCisJCSAgICAgICBub2RlLT5mdWxsX25hbWUpOworCQlyZXR1cm47CisJfQorCisJYnVzLT5wcmltYXJ5ID0gZGV2LT5idXMtPm51bWJlcjsKKwlidXMtPnN1Ym9yZGluYXRlID0gYnVzcmFuZ2VbMV07CisJYnVzLT5icmlkZ2VfY3RsID0gMDsKKwlidXMtPnN5c2RhdGEgPSBub2RlOworCisJLyogcGFyc2UgcmFuZ2VzIHByb3BlcnR5ICovCisJLyogUENJICNhZGRyZXNzLWNlbGxzID09IDMgYW5kICNzaXplLWNlbGxzID09IDIgYWx3YXlzICovCisJcmVzID0gJmRldi0+cmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRVNdOworCWZvciAoaSA9IDA7IGkgPCBQQ0lfTlVNX1JFU09VUkNFUyAtIFBDSV9CUklER0VfUkVTT1VSQ0VTOyArK2kpIHsKKwkJcmVzLT5mbGFncyA9IDA7CisJCWJ1cy0+cmVzb3VyY2VbaV0gPSByZXM7CisJCSsrcmVzOworCX0KKwlpID0gMTsKKwlmb3IgKDsgbGVuID49IDMyOyBsZW4gLT0gMzIsIHJhbmdlcyArPSA4KSB7CisJCWZsYWdzID0gcGNpX3BhcnNlX29mX2ZsYWdzKHJhbmdlc1swXSwgMSk7CisJCXNpemUgPSBvZl9yZWFkX251bWJlcigmcmFuZ2VzWzZdLCAyKTsKKwkJaWYgKGZsYWdzID09IDAgfHwgc2l6ZSA9PSAwKQorCQkJY29udGludWU7CisJCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKKwkJCXJlcyA9IGJ1cy0+cmVzb3VyY2VbMF07CisJCQlpZiAocmVzLT5mbGFncykgeworCQkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBpZ25vcmluZyBleHRyYSBJL08gcmFuZ2UiCisJCQkJICAgICAgICIgZm9yIGJyaWRnZSAlc1xuIiwgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChpID49IFBDSV9OVU1fUkVTT1VSQ0VTIC0gUENJX0JSSURHRV9SRVNPVVJDRVMpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIlBDSTogdG9vIG1hbnkgbWVtb3J5IHJhbmdlcyIKKwkJCQkgICAgICAgIiBmb3IgYnJpZGdlICVzXG4iLCBub2RlLT5mdWxsX25hbWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcmVzID0gYnVzLT5yZXNvdXJjZVtpXTsKKwkJCSsraTsKKwkJfQorCQlyZXMtPnN0YXJ0ID0gb2ZfcmVhZF9udW1iZXIoJnJhbmdlc1sxXSwgMik7CisJCXJlcy0+ZW5kID0gcmVzLT5zdGFydCArIHNpemUgLSAxOworCQlyZXMtPmZsYWdzID0gZmxhZ3M7CisJfQorCXNwcmludGYoYnVzLT5uYW1lLCAiUENJIEJ1cyAlMDR4OiUwMngiLCBwY2lfZG9tYWluX25yKGJ1cyksCisJCWJ1cy0+bnVtYmVyKTsKKwlwcl9kZWJ1ZygiICAgIGJ1cyBuYW1lOiAlc1xuIiwgYnVzLT5uYW1lKTsKKworCW1vZGUgPSBQQ0lfUFJPQkVfTk9STUFMOworCWlmIChwcGNfbWQucGNpX3Byb2JlX21vZGUpCisJCW1vZGUgPSBwcGNfbWQucGNpX3Byb2JlX21vZGUoYnVzKTsKKwlwcl9kZWJ1ZygiICAgIHByb2JlIG1vZGU6ICVkXG4iLCBtb2RlKTsKKworCWlmIChtb2RlID09IFBDSV9QUk9CRV9ERVZUUkVFKQorCQlvZl9zY2FuX2J1cyhub2RlLCBidXMpOworCWVsc2UgaWYgKG1vZGUgPT0gUENJX1BST0JFX05PUk1BTCkKKwkJcGNpX3NjYW5fY2hpbGRfYnVzKGJ1cyk7Cit9CitFWFBPUlRfU1lNQk9MKG9mX3NjYW5fcGNpX2JyaWRnZSk7CisKKy8qKgorICogX19vZl9zY2FuX2J1cyAtIGdpdmVuIGEgUENJIGJ1cyBub2RlLCBzZXR1cCBidXMgYW5kIHNjYW4gZm9yIGNoaWxkIGRldmljZXMKKyAqIEBub2RlOiBkZXZpY2UgdHJlZSBub2RlIGZvciB0aGUgUENJIGJ1cworICogQGJ1czogcGNpX2J1cyBzdHJ1Y3R1cmUgZm9yIHRoZSBQQ0kgYnVzCisgKiBAcmVzY2FuX2V4aXN0aW5nOiBGbGFnIGluZGljYXRpbmcgYnVzIGhhcyBhbHJlYWR5IGJlZW4gc2V0IHVwCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBfX29mX3NjYW5fYnVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkgICAgc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IHJlc2Nhbl9leGlzdGluZykKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOworCWNvbnN0IHUzMiAqcmVnOworCWludCByZWdsZW4sIGRldmZuOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwlwcl9kZWJ1Zygib2Zfc2Nhbl9idXMoJXMpIGJ1cyBubyAlZC4uLiBcbiIsCisJCSBub2RlLT5mdWxsX25hbWUsIGJ1cy0+bnVtYmVyKTsKKworCS8qIFNjYW4gZGlyZWN0IGNoaWxkcmVuICovCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShub2RlLCBjaGlsZCkgeworCQlwcl9kZWJ1ZygiICAqICVzXG4iLCBjaGlsZC0+ZnVsbF9uYW1lKTsKKwkJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgJnJlZ2xlbik7CisJCWlmIChyZWcgPT0gTlVMTCB8fCByZWdsZW4gPCAyMCkKKwkJCWNvbnRpbnVlOworCQlkZXZmbiA9IChyZWdbMF0gPj4gOCkgJiAweGZmOworCisJCS8qIGNyZWF0ZSBhIG5ldyBwY2lfZGV2IGZvciB0aGlzIGRldmljZSAqLworCQlkZXYgPSBvZl9jcmVhdGVfcGNpX2RldihjaGlsZCwgYnVzLCBkZXZmbik7CisJCWlmICghZGV2KQorCQkJY29udGludWU7CisJCXByX2RlYnVnKCIgICAgZGV2IGhlYWRlciB0eXBlOiAleFxuIiwgZGV2LT5oZHJfdHlwZSk7CisJfQorCisJLyogQXBwbHkgYWxsIGZpeHVwcyBuZWNlc3NhcnkuIFdlIGRvbid0IGZpeHVwIHRoZSBidXMgInNlbGYiCisJICogZm9yIGFuIGV4aXN0aW5nIGJyaWRnZSB0aGF0IGlzIGJlaW5nIHJlc2Nhbm5lZAorCSAqLworCWlmICghcmVzY2FuX2V4aXN0aW5nKQorCQlwY2liaW9zX3NldHVwX2J1c19zZWxmKGJ1cyk7CisJcGNpYmlvc19zZXR1cF9idXNfZGV2aWNlcyhidXMpOworCisJLyogTm93IHNjYW4gY2hpbGQgYnVzc2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCWlmIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UgfHwKKwkJICAgIGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpIHsKKwkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKKwkJCWlmIChkZXYpCisJCQkJb2Zfc2Nhbl9wY2lfYnJpZGdlKGNoaWxkLCBkZXYpOworCQl9CisJfQorfQorCisvKioKKyAqIG9mX3NjYW5fYnVzIC0gZ2l2ZW4gYSBQQ0kgYnVzIG5vZGUsIHNldHVwIGJ1cyBhbmQgc2NhbiBmb3IgY2hpbGQgZGV2aWNlcworICogQG5vZGU6IGRldmljZSB0cmVlIG5vZGUgZm9yIHRoZSBQQ0kgYnVzCisgKiBAYnVzOiBwY2lfYnVzIHN0cnVjdHVyZSBmb3IgdGhlIFBDSSBidXMKKyAqLwordm9pZCBfX2RldmluaXQgb2Zfc2Nhbl9idXMoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJICAgc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlfX29mX3NjYW5fYnVzKG5vZGUsIGJ1cywgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvZl9zY2FuX2J1cyk7CisKKy8qKgorICogb2ZfcmVzY2FuX2J1cyAtIGdpdmVuIGEgUENJIGJ1cyBub2RlLCBzY2FuIGZvciBjaGlsZCBkZXZpY2VzCisgKiBAbm9kZTogZGV2aWNlIHRyZWUgbm9kZSBmb3IgdGhlIFBDSSBidXMKKyAqIEBidXM6IHBjaV9idXMgc3RydWN0dXJlIGZvciB0aGUgUENJIGJ1cworICoKKyAqIFNhbWUgYXMgb2Zfc2Nhbl9idXMsIGJ1dCBmb3IgYSBwY2lfYnVzIHN0cnVjdHVyZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4KKyAqIHNldHVwLgorICovCit2b2lkIF9fZGV2aW5pdCBvZl9yZXNjYW5fYnVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCSAgICAgc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlfX29mX3NjYW5fYnVzKG5vZGUsIGJ1cywgMSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvZl9yZXNjYW5fYnVzKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NGI2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKQEAgLTAsMCArMSw1MjcgQEAKKy8qCisgKiBQZXJmb3JtYW5jZSBjb3VudGVyIGNhbGxjaGFpbiBzdXBwb3J0IC0gcG93ZXJwYyBhcmNoaXRlY3R1cmUgY29kZQorICoKKyAqIENvcHlyaWdodCDCqSAyMDA5IFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vdWNvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vdmRzby5oPgorI2lmZGVmIENPTkZJR19QUEM2NAorI2luY2x1ZGUgInBwYzMyLmgiCisjZW5kaWYKKworLyoKKyAqIFN0b3JlIGFub3RoZXIgdmFsdWUgaW4gYSBjYWxsY2hhaW5fZW50cnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWxsY2hhaW5fc3RvcmUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSwgdTY0IGlwKQoreworCXVuc2lnbmVkIGludCBuciA9IGVudHJ5LT5ucjsKKworCWlmIChuciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKSB7CisJCWVudHJ5LT5pcFtucl0gPSBpcDsKKwkJZW50cnktPm5yID0gbnIgKyAxOworCX0KK30KKworLyoKKyAqIElzIHNwIHZhbGlkIGFzIHRoZSBhZGRyZXNzIG9mIHRoZSBuZXh0IGtlcm5lbCBzdGFjayBmcmFtZSBhZnRlciBwcmV2X3NwPworICogVGhlIG5leHQgZnJhbWUgbWF5IGJlIGluIGEgZGlmZmVyZW50IHN0YWNrIGFyZWEgYnV0IHNob3VsZCBub3QgZ28KKyAqIGJhY2sgZG93biBpbiB0aGUgc2FtZSBzdGFjayBhcmVhLgorICovCitzdGF0aWMgaW50IHZhbGlkX25leHRfc3AodW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBwcmV2X3NwKQoreworCWlmIChzcCAmIDB4ZikKKwkJcmV0dXJuIDA7CQkvKiBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25lZCAqLworCWlmICghdmFsaWRhdGVfc3Aoc3AsIGN1cnJlbnQsIFNUQUNLX0ZSQU1FX09WRVJIRUFEKSkKKwkJcmV0dXJuIDA7CisJaWYgKHNwID49IHByZXZfc3AgKyBTVEFDS19GUkFNRV9PVkVSSEVBRCkKKwkJcmV0dXJuIDE7CisJLyoKKwkgKiBzcCBjb3VsZCBkZWNyZWFzZSB3aGVuIHdlIGp1bXAgb2ZmIGFuIGludGVycnVwdCBzdGFjaworCSAqIGJhY2sgdG8gdGhlIHJlZ3VsYXIgcHJvY2VzcyBzdGFjay4KKwkgKi8KKwlpZiAoKHNwICYgfihUSFJFQURfU0laRSAtIDEpKSAhPSAocHJldl9zcCAmIH4oVEhSRUFEX1NJWkUgLSAxKSkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwZXJmX2NhbGxjaGFpbl9rZXJuZWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgc3AsIG5leHRfc3A7CisJdW5zaWduZWQgbG9uZyBuZXh0X2lwOworCXVuc2lnbmVkIGxvbmcgbHI7CisJbG9uZyBsZXZlbCA9IDA7CisJdW5zaWduZWQgbG9uZyAqZnA7CisKKwlsciA9IHJlZ3MtPmxpbms7CisJc3AgPSByZWdzLT5ncHJbMV07CisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBQRVJGX0NPTlRFWFRfS0VSTkVMKTsKKwljYWxsY2hhaW5fc3RvcmUoZW50cnksIHJlZ3MtPm5pcCk7CisKKwlpZiAoIXZhbGlkYXRlX3NwKHNwLCBjdXJyZW50LCBTVEFDS19GUkFNRV9PVkVSSEVBRCkpCisJCXJldHVybjsKKworCWZvciAoOzspIHsKKwkJZnAgPSAodW5zaWduZWQgbG9uZyAqKSBzcDsKKwkJbmV4dF9zcCA9IGZwWzBdOworCisJCWlmIChuZXh0X3NwID09IHNwICsgU1RBQ0tfSU5UX0ZSQU1FX1NJWkUgJiYKKwkJICAgIGZwW1NUQUNLX0ZSQU1FX01BUktFUl0gPT0gU1RBQ0tfRlJBTUVfUkVHU19NQVJLRVIpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGxvb2tzIGxpa2UgYW4gaW50ZXJydXB0IGZyYW1lIGZvciBhbgorCQkJICogaW50ZXJydXB0IHRoYXQgb2NjdXJyZWQgaW4gdGhlIGtlcm5lbAorCQkJICovCisJCQlyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopKHNwICsgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQpOworCQkJbmV4dF9pcCA9IHJlZ3MtPm5pcDsKKwkJCWxyID0gcmVncy0+bGluazsKKwkJCWxldmVsID0gMDsKKwkJCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgUEVSRl9DT05URVhUX0tFUk5FTCk7CisKKwkJfSBlbHNlIHsKKwkJCWlmIChsZXZlbCA9PSAwKQorCQkJCW5leHRfaXAgPSBscjsKKwkJCWVsc2UKKwkJCQluZXh0X2lwID0gZnBbU1RBQ0tfRlJBTUVfTFJfU0FWRV07CisKKwkJCS8qCisJCQkgKiBXZSBjYW4ndCB0ZWxsIHdoaWNoIG9mIHRoZSBmaXJzdCB0d28gYWRkcmVzc2VzCisJCQkgKiB3ZSBnZXQgYXJlIHZhbGlkLCBidXQgd2UgY2FuIGZpbHRlciBvdXQgdGhlCisJCQkgKiBvYnZpb3VzbHkgYm9ndXMgb25lcyBoZXJlLiAgV2UgcmVwbGFjZSB0aGVtCisJCQkgKiB3aXRoIDAgcmF0aGVyIHRoYW4gcmVtb3ZpbmcgdGhlbSBlbnRpcmVseSBzbworCQkJICogdGhhdCB1c2Vyc3BhY2UgY2FuIHRlbGwgd2hpY2ggaXMgd2hpY2guCisJCQkgKi8KKwkJCWlmICgobGV2ZWwgPT0gMSAmJiBuZXh0X2lwID09IGxyKSB8fAorCQkJICAgIChsZXZlbCA8PSAxICYmICFrZXJuZWxfdGV4dF9hZGRyZXNzKG5leHRfaXApKSkKKwkJCQluZXh0X2lwID0gMDsKKworCQkJKytsZXZlbDsKKwkJfQorCisJCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgbmV4dF9pcCk7CisJCWlmICghdmFsaWRfbmV4dF9zcChuZXh0X3NwLCBzcCkpCisJCQlyZXR1cm47CisJCXNwID0gbmV4dF9zcDsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKyNkZWZpbmUgaXNfaHVnZV9wc2l6ZShwYWdlc2l6ZSkJKEhQQUdFX1NISUZUICYmIG1tdV9odWdlX3BzaXplc1twYWdlc2l6ZV0pCisjZWxzZQorI2RlZmluZSBpc19odWdlX3BzaXplKHBhZ2VzaXplKQkwCisjZW5kaWYKKworLyoKKyAqIE9uIDY0LWJpdCB3ZSBkb24ndCB3YW50IHRvIGludm9rZSBoYXNoX3BhZ2Ugb24gdXNlciBhZGRyZXNzZXMgZnJvbQorICogaW50ZXJydXB0IGNvbnRleHQsIHNvIGlmIHRoZSBhY2Nlc3MgZmF1bHRzLCB3ZSByZWFkIHRoZSBwYWdlIHRhYmxlcworICogdG8gZmluZCB3aGljaCBwYWdlIChpZiBhbnkpIGlzIG1hcHBlZCBhbmQgYWNjZXNzIGl0IGRpcmVjdGx5LgorICovCitzdGF0aWMgaW50IHJlYWRfdXNlcl9zdGFja19zbG93KHZvaWQgX191c2VyICpwdHIsIHZvaWQgKnJldCwgaW50IG5iKQoreworCXBnZF90ICpwZ2RpcjsKKwlwdGVfdCAqcHRlcCwgcHRlOworCWludCBwYWdlc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgcGZuOworCXZvaWQgKmthZGRyOworCisJcGdkaXIgPSBjdXJyZW50LT5tbS0+cGdkOworCWlmICghcGdkaXIpCisJCXJldHVybiAtRUZBVUxUOworCisJcGFnZXNpemUgPSBnZXRfc2xpY2VfcHNpemUoY3VycmVudC0+bW0sIGFkZHIpOworCisJLyogYWxpZ24gYWRkcmVzcyB0byBwYWdlIGJvdW5kYXJ5ICovCisJb2Zmc2V0ID0gYWRkciAmICgoMXVsIDw8IG1tdV9wc2l6ZV9kZWZzW3BhZ2VzaXplXS5zaGlmdCkgLSAxKTsKKwlhZGRyIC09IG9mZnNldDsKKworCWlmIChpc19odWdlX3BzaXplKHBhZ2VzaXplKSkKKwkJcHRlcCA9IGh1Z2VfcHRlX29mZnNldChjdXJyZW50LT5tbSwgYWRkcik7CisJZWxzZQorCQlwdGVwID0gZmluZF9saW51eF9wdGUocGdkaXIsIGFkZHIpOworCisJaWYgKHB0ZXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcHRlID0gKnB0ZXA7CisJaWYgKCFwdGVfcHJlc2VudChwdGUpIHx8ICEocHRlX3ZhbChwdGUpICYgX1BBR0VfVVNFUikpCisJCXJldHVybiAtRUZBVUxUOworCXBmbiA9IHB0ZV9wZm4ocHRlKTsKKwlpZiAoIXBhZ2VfaXNfcmFtKHBmbikpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogbm8gaGlnaG1lbSB0byB3b3JyeSBhYm91dCBoZXJlICovCisJa2FkZHIgPSBwZm5fdG9fa2FkZHIocGZuKTsKKwltZW1jcHkocmV0LCBrYWRkciArIG9mZnNldCwgbmIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfdXNlcl9zdGFja182NCh1bnNpZ25lZCBsb25nIF9fdXNlciAqcHRyLCB1bnNpZ25lZCBsb25nICpyZXQpCit7CisJaWYgKCh1bnNpZ25lZCBsb25nKXB0ciA+IFRBU0tfU0laRSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSB8fAorCSAgICAoKHVuc2lnbmVkIGxvbmcpcHRyICYgNykpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKCFfX2dldF91c2VyX2luYXRvbWljKCpyZXQsIHB0cikpCisJCXJldHVybiAwOworCisJcmV0dXJuIHJlYWRfdXNlcl9zdGFja19zbG93KHB0ciwgcmV0LCA4KTsKK30KKworc3RhdGljIGludCByZWFkX3VzZXJfc3RhY2tfMzIodW5zaWduZWQgaW50IF9fdXNlciAqcHRyLCB1bnNpZ25lZCBpbnQgKnJldCkKK3sKKwlpZiAoKHVuc2lnbmVkIGxvbmcpcHRyID4gVEFTS19TSVpFIC0gc2l6ZW9mKHVuc2lnbmVkIGludCkgfHwKKwkgICAgKCh1bnNpZ25lZCBsb25nKXB0ciAmIDMpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICghX19nZXRfdXNlcl9pbmF0b21pYygqcmV0LCBwdHIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiByZWFkX3VzZXJfc3RhY2tfc2xvdyhwdHIsIHJldCwgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZhbGlkX3VzZXJfc3AodW5zaWduZWQgbG9uZyBzcCwgaW50IGlzXzY0KQoreworCWlmICghc3AgfHwgKHNwICYgNykgfHwgc3AgPiAoaXNfNjQgPyBUQVNLX1NJWkUgOiAweDEwMDAwMDAwMFVMKSAtIDMyKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIDY0LWJpdCB1c2VyIHByb2Nlc3NlcyB1c2UgdGhlIHNhbWUgc3RhY2sgZnJhbWUgZm9yIFJUIGFuZCBub24tUlQgc2lnbmFscy4KKyAqLworc3RydWN0IHNpZ25hbF9mcmFtZV82NCB7CisJY2hhcgkJZHVtbXlbX19TSUdOQUxfRlJBTUVTSVpFXTsKKwlzdHJ1Y3QgdWNvbnRleHQJdWM7CisJdW5zaWduZWQgbG9uZwl1bnVzZWRbMl07CisJdW5zaWduZWQgaW50CXRyYW1wWzZdOworCXN0cnVjdCBzaWdpbmZvCSpwaW5mbzsKKwl2b2lkCQkqcHVjOworCXN0cnVjdCBzaWdpbmZvCWluZm87CisJY2hhcgkJYWJpZ2FwWzI4OF07Cit9OworCitzdGF0aWMgaW50IGlzX3NpZ3JldHVybl82NF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgbmlwLCB1bnNpZ25lZCBsb25nIGZwKQoreworCWlmIChuaXAgPT0gZnAgKyBvZmZzZXRvZihzdHJ1Y3Qgc2lnbmFsX2ZyYW1lXzY0LCB0cmFtcCkpCisJCXJldHVybiAxOworCWlmICh2ZHNvNjRfcnRfc2lndHJhbXAgJiYgY3VycmVudC0+bW0tPmNvbnRleHQudmRzb19iYXNlICYmCisJICAgIG5pcCA9PSBjdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgKyB2ZHNvNjRfcnRfc2lndHJhbXApCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogRG8gc29tZSBzYW5pdHkgY2hlY2tpbmcgb24gdGhlIHNpZ25hbCBmcmFtZSBwb2ludGVkIHRvIGJ5IHNwLgorICogV2UgY2hlY2sgdGhlIHBpbmZvIGFuZCBwdWMgcG9pbnRlcnMgaW4gdGhlIGZyYW1lLgorICovCitzdGF0aWMgaW50IHNhbmVfc2lnbmFsXzY0X2ZyYW1lKHVuc2lnbmVkIGxvbmcgc3ApCit7CisJc3RydWN0IHNpZ25hbF9mcmFtZV82NCBfX3VzZXIgKnNmOworCXVuc2lnbmVkIGxvbmcgcGluZm8sIHB1YzsKKworCXNmID0gKHN0cnVjdCBzaWduYWxfZnJhbWVfNjQgX191c2VyICopIHNwOworCWlmIChyZWFkX3VzZXJfc3RhY2tfNjQoKHVuc2lnbmVkIGxvbmcgX191c2VyICopICZzZi0+cGluZm8sICZwaW5mbykgfHwKKwkgICAgcmVhZF91c2VyX3N0YWNrXzY0KCh1bnNpZ25lZCBsb25nIF9fdXNlciAqKSAmc2YtPnB1YywgJnB1YykpCisJCXJldHVybiAwOworCXJldHVybiBwaW5mbyA9PSAodW5zaWduZWQgbG9uZykgJnNmLT5pbmZvICYmCisJCXB1YyA9PSAodW5zaWduZWQgbG9uZykgJnNmLT51YzsKK30KKworc3RhdGljIHZvaWQgcGVyZl9jYWxsY2hhaW5fdXNlcl82NChzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgc3AsIG5leHRfc3A7CisJdW5zaWduZWQgbG9uZyBuZXh0X2lwOworCXVuc2lnbmVkIGxvbmcgbHI7CisJbG9uZyBsZXZlbCA9IDA7CisJc3RydWN0IHNpZ25hbF9mcmFtZV82NCBfX3VzZXIgKnNpZ2ZyYW1lOworCXVuc2lnbmVkIGxvbmcgX191c2VyICpmcCwgKnVyZWdzOworCisJbmV4dF9pcCA9IHJlZ3MtPm5pcDsKKwlsciA9IHJlZ3MtPmxpbms7CisJc3AgPSByZWdzLT5ncHJbMV07CisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBQRVJGX0NPTlRFWFRfVVNFUik7CisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBuZXh0X2lwKTsKKworCWZvciAoOzspIHsKKwkJZnAgPSAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgc3A7CisJCWlmICghdmFsaWRfdXNlcl9zcChzcCwgMSkgfHwgcmVhZF91c2VyX3N0YWNrXzY0KGZwLCAmbmV4dF9zcCkpCisJCQlyZXR1cm47CisJCWlmIChsZXZlbCA+IDAgJiYgcmVhZF91c2VyX3N0YWNrXzY0KCZmcFsyXSwgJm5leHRfaXApKQorCQkJcmV0dXJuOworCisJCS8qCisJCSAqIE5vdGU6IHRoZSBuZXh0X3NwIC0gc3AgPj0gc2lnbmFsIGZyYW1lIHNpemUgY2hlY2sKKwkJICogaXMgdHJ1ZSB3aGVuIG5leHRfc3AgPCBzcCwgd2hpY2ggY2FuIGhhcHBlbiB3aGVuCisJCSAqIHRyYW5zaXRpb25pbmcgZnJvbSBhbiBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIHRvIHRoZQorCQkgKiBub3JtYWwgc3RhY2suCisJCSAqLworCQlpZiAobmV4dF9zcCAtIHNwID49IHNpemVvZihzdHJ1Y3Qgc2lnbmFsX2ZyYW1lXzY0KSAmJgorCQkgICAgKGlzX3NpZ3JldHVybl82NF9hZGRyZXNzKG5leHRfaXAsIHNwKSB8fAorCQkgICAgIChsZXZlbCA8PSAxICYmIGlzX3NpZ3JldHVybl82NF9hZGRyZXNzKGxyLCBzcCkpKSAmJgorCQkgICAgc2FuZV9zaWduYWxfNjRfZnJhbWUoc3ApKSB7CisJCQkvKgorCQkJICogVGhpcyBsb29rcyBsaWtlIGFuIHNpZ25hbCBmcmFtZQorCQkJICovCisJCQlzaWdmcmFtZSA9IChzdHJ1Y3Qgc2lnbmFsX2ZyYW1lXzY0IF9fdXNlciAqKSBzcDsKKwkJCXVyZWdzID0gc2lnZnJhbWUtPnVjLnVjX21jb250ZXh0LmdwX3JlZ3M7CisJCQlpZiAocmVhZF91c2VyX3N0YWNrXzY0KCZ1cmVnc1tQVF9OSVBdLCAmbmV4dF9pcCkgfHwKKwkJCSAgICByZWFkX3VzZXJfc3RhY2tfNjQoJnVyZWdzW1BUX0xOS10sICZscikgfHwKKwkJCSAgICByZWFkX3VzZXJfc3RhY2tfNjQoJnVyZWdzW1BUX1IxXSwgJnNwKSkKKwkJCQlyZXR1cm47CisJCQlsZXZlbCA9IDA7CisJCQljYWxsY2hhaW5fc3RvcmUoZW50cnksIFBFUkZfQ09OVEVYVF9VU0VSKTsKKwkJCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgbmV4dF9pcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChsZXZlbCA9PSAwKQorCQkJbmV4dF9pcCA9IGxyOworCQljYWxsY2hhaW5fc3RvcmUoZW50cnksIG5leHRfaXApOworCQkrK2xldmVsOworCQlzcCA9IG5leHRfc3A7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzXzY0Yml0KHZvaWQpCit7CisJLyoKKwkgKiBXZSBjYW4ndCB1c2UgdGVzdF90aHJlYWRfZmxhZygpIGhlcmUgYmVjYXVzZSB3ZSBtYXkgYmUgb24gYW4KKwkgKiBpbnRlcnJ1cHQgc3RhY2ssIGFuZCB0aGUgdGhyZWFkIGZsYWdzIGRvbid0IGdldCBjb3BpZWQgb3ZlcgorCSAqIGZyb20gdGhlIHRocmVhZF9pbmZvIG9uIHRoZSBtYWluIHN0YWNrIHRvIHRoZSBpbnRlcnJ1cHQgc3RhY2suCisJICovCisJcmV0dXJuICF0ZXN0X3RpX3RocmVhZF9mbGFnKHRhc2tfdGhyZWFkX2luZm8oY3VycmVudCksIFRJRl8zMkJJVCk7Cit9CisKKyNlbHNlICAvKiBDT05GSUdfUFBDNjQgKi8KKy8qCisgKiBPbiAzMi1iaXQgd2UganVzdCBhY2Nlc3MgdGhlIGFkZHJlc3MgYW5kIGxldCBoYXNoX3BhZ2UgY3JlYXRlIGEKKyAqIEhQVEUgaWYgbmVjZXNzYXJ5LCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGZhbGwgYmFjayB0byByZWFkaW5nCisgKiB0aGUgcGFnZSB0YWJsZXMuICBTaW5jZSB0aGlzIGlzIGNhbGxlZCBhdCBpbnRlcnJ1cHQgbGV2ZWwsCisgKiBkb19wYWdlX2ZhdWx0KCkgd29uJ3QgdHJlYXQgYSBEU0kgYXMgYSBwYWdlIGZhdWx0LgorICovCitzdGF0aWMgaW50IHJlYWRfdXNlcl9zdGFja18zMih1bnNpZ25lZCBpbnQgX191c2VyICpwdHIsIHVuc2lnbmVkIGludCAqcmV0KQoreworCWlmICgodW5zaWduZWQgbG9uZylwdHIgPiBUQVNLX1NJWkUgLSBzaXplb2YodW5zaWduZWQgaW50KSB8fAorCSAgICAoKHVuc2lnbmVkIGxvbmcpcHRyICYgMykpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIF9fZ2V0X3VzZXJfaW5hdG9taWMoKnJldCwgcHRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBlcmZfY2FsbGNoYWluX3VzZXJfNjQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc182NGJpdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB2YWxpZF91c2VyX3NwKHVuc2lnbmVkIGxvbmcgc3AsIGludCBpc182NCkKK3sKKwlpZiAoIXNwIHx8IChzcCAmIDcpIHx8IHNwID4gVEFTS19TSVpFIC0gMzIpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisjZGVmaW5lIF9fU0lHTkFMX0ZSQU1FU0laRTMyCV9fU0lHTkFMX0ZSQU1FU0laRQorI2RlZmluZSBzaWdjb250ZXh0MzIJCXNpZ2NvbnRleHQKKyNkZWZpbmUgbWNvbnRleHQzMgkJbWNvbnRleHQKKyNkZWZpbmUgdWNvbnRleHQzMgkJdWNvbnRleHQKKyNkZWZpbmUgY29tcGF0X3NpZ2luZm9fdAlzdHJ1Y3Qgc2lnaW5mbworCisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisKKy8qCisgKiBMYXlvdXQgZm9yIG5vbi1SVCBzaWduYWwgZnJhbWVzCisgKi8KK3N0cnVjdCBzaWduYWxfZnJhbWVfMzIgeworCWNoYXIJCQlkdW1teVtfX1NJR05BTF9GUkFNRVNJWkUzMl07CisJc3RydWN0IHNpZ2NvbnRleHQzMglzY3R4OworCXN0cnVjdCBtY29udGV4dDMyCW1jdHg7CisJaW50CQkJYWJpZ2FwWzU2XTsKK307CisKKy8qCisgKiBMYXlvdXQgZm9yIFJUIHNpZ25hbCBmcmFtZXMKKyAqLworc3RydWN0IHJ0X3NpZ25hbF9mcmFtZV8zMiB7CisJY2hhcgkJCWR1bW15W19fU0lHTkFMX0ZSQU1FU0laRTMyICsgMTZdOworCWNvbXBhdF9zaWdpbmZvX3QJaW5mbzsKKwlzdHJ1Y3QgdWNvbnRleHQzMgl1YzsKKwlpbnQJCQlhYmlnYXBbNTZdOworfTsKKworc3RhdGljIGludCBpc19zaWdyZXR1cm5fMzJfYWRkcmVzcyh1bnNpZ25lZCBpbnQgbmlwLCB1bnNpZ25lZCBpbnQgZnApCit7CisJaWYgKG5pcCA9PSBmcCArIG9mZnNldG9mKHN0cnVjdCBzaWduYWxfZnJhbWVfMzIsIG1jdHgubWNfcGFkKSkKKwkJcmV0dXJuIDE7CisJaWYgKHZkc28zMl9zaWd0cmFtcCAmJiBjdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgJiYKKwkgICAgbmlwID09IGN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSArIHZkc28zMl9zaWd0cmFtcCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfcnRfc2lncmV0dXJuXzMyX2FkZHJlc3ModW5zaWduZWQgaW50IG5pcCwgdW5zaWduZWQgaW50IGZwKQoreworCWlmIChuaXAgPT0gZnAgKyBvZmZzZXRvZihzdHJ1Y3QgcnRfc2lnbmFsX2ZyYW1lXzMyLAorCQkJCSB1Yy51Y19tY29udGV4dC5tY19wYWQpKQorCQlyZXR1cm4gMTsKKwlpZiAodmRzbzMyX3J0X3NpZ3RyYW1wICYmIGN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSAmJgorCSAgICBuaXAgPT0gY3VycmVudC0+bW0tPmNvbnRleHQudmRzb19iYXNlICsgdmRzbzMyX3J0X3NpZ3RyYW1wKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYW5lX3NpZ25hbF8zMl9mcmFtZSh1bnNpZ25lZCBpbnQgc3ApCit7CisJc3RydWN0IHNpZ25hbF9mcmFtZV8zMiBfX3VzZXIgKnNmOworCXVuc2lnbmVkIGludCByZWdzOworCisJc2YgPSAoc3RydWN0IHNpZ25hbF9mcmFtZV8zMiBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIHNwOworCWlmIChyZWFkX3VzZXJfc3RhY2tfMzIoKHVuc2lnbmVkIGludCBfX3VzZXIgKikgJnNmLT5zY3R4LnJlZ3MsICZyZWdzKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHJlZ3MgPT0gKHVuc2lnbmVkIGxvbmcpICZzZi0+bWN0eDsKK30KKworc3RhdGljIGludCBzYW5lX3J0X3NpZ25hbF8zMl9mcmFtZSh1bnNpZ25lZCBpbnQgc3ApCit7CisJc3RydWN0IHJ0X3NpZ25hbF9mcmFtZV8zMiBfX3VzZXIgKnNmOworCXVuc2lnbmVkIGludCByZWdzOworCisJc2YgPSAoc3RydWN0IHJ0X3NpZ25hbF9mcmFtZV8zMiBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIHNwOworCWlmIChyZWFkX3VzZXJfc3RhY2tfMzIoKHVuc2lnbmVkIGludCBfX3VzZXIgKikgJnNmLT51Yy51Y19yZWdzLCAmcmVncykpCisJCXJldHVybiAwOworCXJldHVybiByZWdzID09ICh1bnNpZ25lZCBsb25nKSAmc2YtPnVjLnVjX21jb250ZXh0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9fdXNlciAqc2lnbmFsX2ZyYW1lXzMyX3JlZ3ModW5zaWduZWQgaW50IHNwLAorCQkJCXVuc2lnbmVkIGludCBuZXh0X3NwLCB1bnNpZ25lZCBpbnQgbmV4dF9pcCkKK3sKKwlzdHJ1Y3QgbWNvbnRleHQzMiBfX3VzZXIgKm1jdHggPSBOVUxMOworCXN0cnVjdCBzaWduYWxfZnJhbWVfMzIgX191c2VyICpzZjsKKwlzdHJ1Y3QgcnRfc2lnbmFsX2ZyYW1lXzMyIF9fdXNlciAqcnRfc2Y7CisKKwkvKgorCSAqIE5vdGU6IHRoZSBuZXh0X3NwIC0gc3AgPj0gc2lnbmFsIGZyYW1lIHNpemUgY2hlY2sKKwkgKiBpcyB0cnVlIHdoZW4gbmV4dF9zcCA8IHNwLCBmb3IgZXhhbXBsZSwgd2hlbgorCSAqIHRyYW5zaXRpb25pbmcgZnJvbSBhbiBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIHRvIHRoZQorCSAqIG5vcm1hbCBzdGFjay4KKwkgKi8KKwlpZiAobmV4dF9zcCAtIHNwID49IHNpemVvZihzdHJ1Y3Qgc2lnbmFsX2ZyYW1lXzMyKSAmJgorCSAgICBpc19zaWdyZXR1cm5fMzJfYWRkcmVzcyhuZXh0X2lwLCBzcCkgJiYKKwkgICAgc2FuZV9zaWduYWxfMzJfZnJhbWUoc3ApKSB7CisJCXNmID0gKHN0cnVjdCBzaWduYWxfZnJhbWVfMzIgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBzcDsKKwkJbWN0eCA9ICZzZi0+bWN0eDsKKwl9CisKKwlpZiAoIW1jdHggJiYgbmV4dF9zcCAtIHNwID49IHNpemVvZihzdHJ1Y3QgcnRfc2lnbmFsX2ZyYW1lXzMyKSAmJgorCSAgICBpc19ydF9zaWdyZXR1cm5fMzJfYWRkcmVzcyhuZXh0X2lwLCBzcCkgJiYKKwkgICAgc2FuZV9ydF9zaWduYWxfMzJfZnJhbWUoc3ApKSB7CisJCXJ0X3NmID0gKHN0cnVjdCBydF9zaWduYWxfZnJhbWVfMzIgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBzcDsKKwkJbWN0eCA9ICZydF9zZi0+dWMudWNfbWNvbnRleHQ7CisJfQorCisJaWYgKCFtY3R4KQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gbWN0eC0+bWNfZ3JlZ3M7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfY2FsbGNoYWluX3VzZXJfMzIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKK3sKKwl1bnNpZ25lZCBpbnQgc3AsIG5leHRfc3A7CisJdW5zaWduZWQgaW50IG5leHRfaXA7CisJdW5zaWduZWQgaW50IGxyOworCWxvbmcgbGV2ZWwgPSAwOworCXVuc2lnbmVkIGludCBfX3VzZXIgKmZwLCAqdXJlZ3M7CisKKwluZXh0X2lwID0gcmVncy0+bmlwOworCWxyID0gcmVncy0+bGluazsKKwlzcCA9IHJlZ3MtPmdwclsxXTsKKwljYWxsY2hhaW5fc3RvcmUoZW50cnksIFBFUkZfQ09OVEVYVF9VU0VSKTsKKwljYWxsY2hhaW5fc3RvcmUoZW50cnksIG5leHRfaXApOworCisJd2hpbGUgKGVudHJ5LT5uciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKSB7CisJCWZwID0gKHVuc2lnbmVkIGludCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIHNwOworCQlpZiAoIXZhbGlkX3VzZXJfc3Aoc3AsIDApIHx8IHJlYWRfdXNlcl9zdGFja18zMihmcCwgJm5leHRfc3ApKQorCQkJcmV0dXJuOworCQlpZiAobGV2ZWwgPiAwICYmIHJlYWRfdXNlcl9zdGFja18zMigmZnBbMV0sICZuZXh0X2lwKSkKKwkJCXJldHVybjsKKworCQl1cmVncyA9IHNpZ25hbF9mcmFtZV8zMl9yZWdzKHNwLCBuZXh0X3NwLCBuZXh0X2lwKTsKKwkJaWYgKCF1cmVncyAmJiBsZXZlbCA8PSAxKQorCQkJdXJlZ3MgPSBzaWduYWxfZnJhbWVfMzJfcmVncyhzcCwgbmV4dF9zcCwgbHIpOworCQlpZiAodXJlZ3MpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGxvb2tzIGxpa2UgYW4gc2lnbmFsIGZyYW1lLCBzbyByZXN0YXJ0CisJCQkgKiB0aGUgc3RhY2sgdHJhY2Ugd2l0aCB0aGUgdmFsdWVzIGluIGl0LgorCQkJICovCisJCQlpZiAocmVhZF91c2VyX3N0YWNrXzMyKCZ1cmVnc1tQVF9OSVBdLCAmbmV4dF9pcCkgfHwKKwkJCSAgICByZWFkX3VzZXJfc3RhY2tfMzIoJnVyZWdzW1BUX0xOS10sICZscikgfHwKKwkJCSAgICByZWFkX3VzZXJfc3RhY2tfMzIoJnVyZWdzW1BUX1IxXSwgJnNwKSkKKwkJCQlyZXR1cm47CisJCQlsZXZlbCA9IDA7CisJCQljYWxsY2hhaW5fc3RvcmUoZW50cnksIFBFUkZfQ09OVEVYVF9VU0VSKTsKKwkJCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgbmV4dF9pcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChsZXZlbCA9PSAwKQorCQkJbmV4dF9pcCA9IGxyOworCQljYWxsY2hhaW5fc3RvcmUoZW50cnksIG5leHRfaXApOworCQkrK2xldmVsOworCQlzcCA9IG5leHRfc3A7CisJfQorfQorCisvKgorICogU2luY2Ugd2UgY2FuJ3QgZ2V0IFBNVSBpbnRlcnJ1cHRzIGluc2lkZSBhIFBNVSBpbnRlcnJ1cHQgaGFuZGxlciwKKyAqIHdlIGRvbid0IG5lZWQgc2VwYXJhdGUgaXJxIGFuZCBubWkgZW50cmllcyBoZXJlLgorICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5LCBjYWxsY2hhaW4pOworCitzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKnBlcmZfY2FsbGNoYWluKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkgPSAmX19nZXRfY3B1X3ZhcihjYWxsY2hhaW4pOworCisJZW50cnktPm5yID0gMDsKKworCWlmIChjdXJyZW50LT5waWQgPT0gMCkJCS8qIGlkbGUgdGFzaz8gKi8KKwkJcmV0dXJuIGVudHJ5OworCisJaWYgKCF1c2VyX21vZGUocmVncykpIHsKKwkJcGVyZl9jYWxsY2hhaW5fa2VybmVsKHJlZ3MsIGVudHJ5KTsKKwkJaWYgKGN1cnJlbnQtPm1tKQorCQkJcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKKwkJZWxzZQorCQkJcmVncyA9IE5VTEw7CisJfQorCisJaWYgKHJlZ3MpIHsKKwkJaWYgKGN1cnJlbnRfaXNfNjRiaXQoKSkKKwkJCXBlcmZfY2FsbGNoYWluX3VzZXJfNjQocmVncywgZW50cnkpOworCQllbHNlCisJCQlwZXJmX2NhbGxjaGFpbl91c2VyXzMyKHJlZ3MsIGVudHJ5KTsKKwl9CisKKwlyZXR1cm4gZW50cnk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY291bnRlci5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NvdW50ZXIuYwppbmRleCA3MGUxZjU3Li43Y2VlZmFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY291bnRlci5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9jb3VudGVyLmMKQEAgLTMyLDYgKzMyLDkgQEAKIAl1bnNpZ25lZCBsb25nIG1tY3JbM107CiAJc3RydWN0IHBlcmZfY291bnRlciAqbGltaXRlZF9jb3VudGVyW01BWF9MSU1JVEVEX0hXQ09VTlRFUlNdOwogCXU4ICBsaW1pdGVkX2h3aWR4W01BWF9MSU1JVEVEX0hXQ09VTlRFUlNdOworCXU2NCBhbHRlcm5hdGl2ZXNbTUFYX0hXQ09VTlRFUlNdW01BWF9FVkVOVF9BTFRFUk5BVElWRVNdOworCXVuc2lnbmVkIGxvbmcgYW1hc2tzW01BWF9IV0NPVU5URVJTXVtNQVhfRVZFTlRfQUxURVJOQVRJVkVTXTsKKwl1bnNpZ25lZCBsb25nIGF2YWx1ZXNbTUFYX0hXQ09VTlRFUlNdW01BWF9FVkVOVF9BTFRFUk5BVElWRVNdOwogfTsKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfaHdfY291bnRlcnMsIGNwdV9od19jb3VudGVycyk7CiAKQEAgLTYyLDcgKzY1LDYgQEAKIHsKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX3NldF9wbXVfaW51c2UoaW50IGludXNlKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2dldF9kYXRhX2FkZHIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCAqYWRkcnApIHsgfQogc3RhdGljIGlubGluZSB1MzIgcGVyZl9nZXRfbWlzY19mbGFncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKQEAgLTkzLDExICs5NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX3NldF9wbXVfaW51c2UoaW50IGludXNlKQotewotCWdldF9scHBhY2EoKS0+cG1jcmVnc19pbl91c2UgPSBpbnVzZTsKLX0KLQogLyoKICAqIFRoZSB1c2VyIHdhbnRzIGEgZGF0YSBhZGRyZXNzIHJlY29yZGVkLgogICogSWYgd2UncmUgbm90IGRvaW5nIGluc3RydWN0aW9uIHNhbXBsaW5nLCBnaXZlIHRoZW0gdGhlIFNEQVIKQEAgLTI0NSwxMyArMjQyLDExIEBACiAgKiBhbmQgc2VlIGlmIGFueSBjb21iaW5hdGlvbiBvZiBhbHRlcm5hdGl2ZSBjb2RlcyBpcyBmZWFzaWJsZS4KICAqIFRoZSBmZWFzaWJsZSBzZXQgaXMgcmV0dXJuZWQgaW4gZXZlbnRbXS4KICAqLwotc3RhdGljIGludCBwb3dlcl9jaGVja19jb25zdHJhaW50cyh1NjQgZXZlbnRbXSwgdW5zaWduZWQgaW50IGNmbGFnc1tdLAorc3RhdGljIGludCBwb3dlcl9jaGVja19jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVodywKKwkJCQkgICB1NjQgZXZlbnRbXSwgdW5zaWduZWQgaW50IGNmbGFnc1tdLAogCQkJCSAgIGludCBuX2V2KQogewogCXVuc2lnbmVkIGxvbmcgbWFzaywgdmFsdWUsIG52OwotCXU2NCBhbHRlcm5hdGl2ZXNbTUFYX0hXQ09VTlRFUlNdW01BWF9FVkVOVF9BTFRFUk5BVElWRVNdOwotCXVuc2lnbmVkIGxvbmcgYW1hc2tzW01BWF9IV0NPVU5URVJTXVtNQVhfRVZFTlRfQUxURVJOQVRJVkVTXTsKLQl1bnNpZ25lZCBsb25nIGF2YWx1ZXNbTUFYX0hXQ09VTlRFUlNdW01BWF9FVkVOVF9BTFRFUk5BVElWRVNdOwogCXVuc2lnbmVkIGxvbmcgc21hc2tzW01BWF9IV0NPVU5URVJTXSwgc3ZhbHVlc1tNQVhfSFdDT1VOVEVSU107CiAJaW50IG5fYWx0W01BWF9IV0NPVU5URVJTXSwgY2hvaWNlW01BWF9IV0NPVU5URVJTXTsKIAlpbnQgaSwgajsKQEAgLTI2NiwyMSArMjYxLDIzIEBACiAJCWlmICgoY2ZsYWdzW2ldICYgUFBNVV9MSU1JVEVEX1BNQ19SRVFEKQogCQkgICAgJiYgIXBwbXUtPmxpbWl0ZWRfcG1jX2V2ZW50KGV2ZW50W2ldKSkgewogCQkJcHBtdS0+Z2V0X2FsdGVybmF0aXZlcyhldmVudFtpXSwgY2ZsYWdzW2ldLAotCQkJCQkgICAgICAgYWx0ZXJuYXRpdmVzW2ldKTsKLQkJCWV2ZW50W2ldID0gYWx0ZXJuYXRpdmVzW2ldWzBdOworCQkJCQkgICAgICAgY3B1aHctPmFsdGVybmF0aXZlc1tpXSk7CisJCQlldmVudFtpXSA9IGNwdWh3LT5hbHRlcm5hdGl2ZXNbaV1bMF07CiAJCX0KLQkJaWYgKHBwbXUtPmdldF9jb25zdHJhaW50KGV2ZW50W2ldLCAmYW1hc2tzW2ldWzBdLAotCQkJCQkgJmF2YWx1ZXNbaV1bMF0pKQorCQlpZiAocHBtdS0+Z2V0X2NvbnN0cmFpbnQoZXZlbnRbaV0sICZjcHVody0+YW1hc2tzW2ldWzBdLAorCQkJCQkgJmNwdWh3LT5hdmFsdWVzW2ldWzBdKSkKIAkJCXJldHVybiAtMTsKIAl9CiAJdmFsdWUgPSBtYXNrID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgbl9ldjsgKytpKSB7Ci0JCW52ID0gKHZhbHVlIHwgYXZhbHVlc1tpXVswXSkgKyAodmFsdWUgJiBhdmFsdWVzW2ldWzBdICYgYWRkZik7CisJCW52ID0gKHZhbHVlIHwgY3B1aHctPmF2YWx1ZXNbaV1bMF0pICsKKwkJCSh2YWx1ZSAmIGNwdWh3LT5hdmFsdWVzW2ldWzBdICYgYWRkZik7CiAJCWlmICgoKChudiArIHRhZGQpIF4gdmFsdWUpICYgbWFzaykgIT0gMCB8fAotCQkgICAgKCgobnYgKyB0YWRkKSBeIGF2YWx1ZXNbaV1bMF0pICYgYW1hc2tzW2ldWzBdKSAhPSAwKQorCQkgICAgKCgobnYgKyB0YWRkKSBeIGNwdWh3LT5hdmFsdWVzW2ldWzBdKSAmCisJCSAgICAgY3B1aHctPmFtYXNrc1tpXVswXSkgIT0gMCkKIAkJCWJyZWFrOwogCQl2YWx1ZSA9IG52OwotCQltYXNrIHw9IGFtYXNrc1tpXVswXTsKKwkJbWFzayB8PSBjcHVody0+YW1hc2tzW2ldWzBdOwogCX0KIAlpZiAoaSA9PSBuX2V2KQogCQlyZXR1cm4gMDsJLyogYWxsIE9LICovCkBAIC0yOTEsMTAgKzI4OCwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBuX2V2OyArK2kpIHsKIAkJY2hvaWNlW2ldID0gMDsKIAkJbl9hbHRbaV0gPSBwcG11LT5nZXRfYWx0ZXJuYXRpdmVzKGV2ZW50W2ldLCBjZmxhZ3NbaV0sCi0JCQkJCQkgIGFsdGVybmF0aXZlc1tpXSk7CisJCQkJCQkgIGNwdWh3LT5hbHRlcm5hdGl2ZXNbaV0pOwogCQlmb3IgKGogPSAxOyBqIDwgbl9hbHRbaV07ICsraikKLQkJCXBwbXUtPmdldF9jb25zdHJhaW50KGFsdGVybmF0aXZlc1tpXVtqXSwKLQkJCQkJICAgICAmYW1hc2tzW2ldW2pdLCAmYXZhbHVlc1tpXVtqXSk7CisJCQlwcG11LT5nZXRfY29uc3RyYWludChjcHVody0+YWx0ZXJuYXRpdmVzW2ldW2pdLAorCQkJCQkgICAgICZjcHVody0+YW1hc2tzW2ldW2pdLAorCQkJCQkgICAgICZjcHVody0+YXZhbHVlc1tpXVtqXSk7CiAJfQogCiAJLyogZW51bWVyYXRlIGFsbCBwb3NzaWJpbGl0aWVzIGFuZCBzZWUgaWYgYW55IHdpbGwgd29yayAqLwpAQCAtMzEzLDExICszMTEsMTEgQEAKIAkJICogd2hlcmUgayA+IGosIHdpbGwgc2F0aXNmeSB0aGUgY29uc3RyYWludHMuCiAJCSAqLwogCQl3aGlsZSAoKytqIDwgbl9hbHRbaV0pIHsKLQkJCW52ID0gKHZhbHVlIHwgYXZhbHVlc1tpXVtqXSkgKwotCQkJCSh2YWx1ZSAmIGF2YWx1ZXNbaV1bal0gJiBhZGRmKTsKKwkJCW52ID0gKHZhbHVlIHwgY3B1aHctPmF2YWx1ZXNbaV1bal0pICsKKwkJCQkodmFsdWUgJiBjcHVody0+YXZhbHVlc1tpXVtqXSAmIGFkZGYpOwogCQkJaWYgKCgoKG52ICsgdGFkZCkgXiB2YWx1ZSkgJiBtYXNrKSA9PSAwICYmCi0JCQkgICAgKCgobnYgKyB0YWRkKSBeIGF2YWx1ZXNbaV1bal0pCi0JCQkgICAgICYgYW1hc2tzW2ldW2pdKSA9PSAwKQorCQkJICAgICgoKG52ICsgdGFkZCkgXiBjcHVody0+YXZhbHVlc1tpXVtqXSkKKwkJCSAgICAgJiBjcHVody0+YW1hc2tzW2ldW2pdKSA9PSAwKQogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChqID49IG5fYWx0W2ldKSB7CkBAIC0zMzksNyArMzM3LDcgQEAKIAkJCXN2YWx1ZXNbaV0gPSB2YWx1ZTsKIAkJCXNtYXNrc1tpXSA9IG1hc2s7CiAJCQl2YWx1ZSA9IG52OwotCQkJbWFzayB8PSBhbWFza3NbaV1bal07CisJCQltYXNrIHw9IGNwdWh3LT5hbWFza3NbaV1bal07CiAJCQkrK2k7CiAJCQlqID0gLTE7CiAJCX0KQEAgLTM0Nyw3ICszNDUsNyBAQAogCiAJLyogT0ssIHdlIGhhdmUgYSBmZWFzaWJsZSBjb21iaW5hdGlvbiwgdGVsbCB0aGUgY2FsbGVyIHRoZSBzb2x1dGlvbiAqLwogCWZvciAoaSA9IDA7IGkgPCBuX2V2OyArK2kpCi0JCWV2ZW50W2ldID0gYWx0ZXJuYXRpdmVzW2ldW2Nob2ljZVtpXV07CisJCWV2ZW50W2ldID0gY3B1aHctPmFsdGVybmF0aXZlc1tpXVtjaG9pY2VbaV1dOwogCXJldHVybiAwOwogfQogCkBAIC01MzEsOCArNTI5LDcgQEAKIAkJICogQ2hlY2sgaWYgd2UgZXZlciBlbmFibGVkIHRoZSBQTVUgb24gdGhpcyBjcHUuCiAJCSAqLwogCQlpZiAoIWNwdWh3LT5wbWNzX2VuYWJsZWQpIHsKLQkJCWlmIChwcGNfbWQuZW5hYmxlX3BtY3MpCi0JCQkJcHBjX21kLmVuYWJsZV9wbWNzKCk7CisJCQlwcGNfZW5hYmxlX3BtY3MoKTsKIAkJCWNwdWh3LT5wbWNzX2VuYWJsZWQgPSAxOwogCQl9CiAKQEAgLTU5NCw3ICs1OTEsNyBAQAogCQltdHNwcihTUFJOX01NQ1JBLCBjcHVody0+bW1jclsyXSAmIH5NTUNSQV9TQU1QTEVfRU5BQkxFKTsKIAkJbXRzcHIoU1BSTl9NTUNSMSwgY3B1aHctPm1tY3JbMV0pOwogCQlpZiAoY3B1aHctPm5fY291bnRlcnMgPT0gMCkKLQkJCXBlcmZfc2V0X3BtdV9pbnVzZSgwKTsKKwkJCXBwY19zZXRfcG11X2ludXNlKDApOwogCQlnb3RvIG91dF9lbmFibGU7CiAJfQogCkBAIC02MjcsNyArNjI0LDcgQEAKIAkgKiBiaXQgc2V0IGFuZCBzZXQgdGhlIGhhcmR3YXJlIGNvdW50ZXJzIHRvIHRoZWlyIGluaXRpYWwgdmFsdWVzLgogCSAqIFRoZW4gdW5mcmVlemUgdGhlIGNvdW50ZXJzLgogCSAqLwotCXBlcmZfc2V0X3BtdV9pbnVzZSgxKTsKKwlwcGNfc2V0X3BtdV9pbnVzZSgxKTsKIAltdHNwcihTUFJOX01NQ1JBLCBjcHVody0+bW1jclsyXSAmIH5NTUNSQV9TQU1QTEVfRU5BQkxFKTsKIAltdHNwcihTUFJOX01NQ1IxLCBjcHVody0+bW1jclsxXSk7CiAJbXRzcHIoU1BSTl9NTUNSMCwgKGNwdWh3LT5tbWNyWzBdICYgfihNTUNSMF9QTUMxQ0UgfCBNTUNSMF9QTUNqQ0UpKQpAQCAtNzUyLDcgKzc0OSw3IEBACiAJCXJldHVybiAtRUFHQUlOOwogCWlmIChjaGVja19leGNsdWRlcyhjcHVody0+Y291bnRlciwgY3B1aHctPmZsYWdzLCBuMCwgbikpCiAJCXJldHVybiAtRUFHQUlOOwotCWkgPSBwb3dlcl9jaGVja19jb25zdHJhaW50cyhjcHVody0+ZXZlbnRzLCBjcHVody0+ZmxhZ3MsIG4gKyBuMCk7CisJaSA9IHBvd2VyX2NoZWNrX2NvbnN0cmFpbnRzKGNwdWh3LCBjcHVody0+ZXZlbnRzLCBjcHVody0+ZmxhZ3MsIG4gKyBuMCk7CiAJaWYgKGkgPCAwKQogCQlyZXR1cm4gLUVBR0FJTjsKIAljcHVody0+bl9jb3VudGVycyA9IG4wICsgbjsKQEAgLTgwNyw3ICs4MDQsNyBAQAogCWNwdWh3LT5mbGFnc1tuMF0gPSBjb3VudGVyLT5ody5jb3VudGVyX2Jhc2U7CiAJaWYgKGNoZWNrX2V4Y2x1ZGVzKGNwdWh3LT5jb3VudGVyLCBjcHVody0+ZmxhZ3MsIG4wLCAxKSkKIAkJZ290byBvdXQ7Ci0JaWYgKHBvd2VyX2NoZWNrX2NvbnN0cmFpbnRzKGNwdWh3LT5ldmVudHMsIGNwdWh3LT5mbGFncywgbjAgKyAxKSkKKwlpZiAocG93ZXJfY2hlY2tfY29uc3RyYWludHMoY3B1aHcsIGNwdWh3LT5ldmVudHMsIGNwdWh3LT5mbGFncywgbjAgKyAxKSkKIAkJZ290byBvdXQ7CiAKIAljb3VudGVyLT5ody5jb25maWcgPSBjcHVody0+ZXZlbnRzW24wXTsKQEAgLTEwMTIsNiArMTAwOSw3IEBACiAJdW5zaWduZWQgaW50IGNmbGFnc1tNQVhfSFdDT1VOVEVSU107CiAJaW50IG47CiAJaW50IGVycjsKKwlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVodzsKIAogCWlmICghcHBtdSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOWElPKTsKQEAgLTEwOTAsNyArMTA4OCwxMSBAQAogCWNmbGFnc1tuXSA9IGZsYWdzOwogCWlmIChjaGVja19leGNsdWRlcyhjdHJzLCBjZmxhZ3MsIG4sIDEpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQlpZiAocG93ZXJfY2hlY2tfY29uc3RyYWludHMoZXZlbnRzLCBjZmxhZ3MsIG4gKyAxKSkKKworCWNwdWh3ID0gJmdldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7CisJZXJyID0gcG93ZXJfY2hlY2tfY29uc3RyYWludHMoY3B1aHcsIGV2ZW50cywgY2ZsYWdzLCBuICsgMSk7CisJcHV0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwlpZiAoZXJyKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAogCWNvdW50ZXItPmh3LmNvbmZpZyA9IGV2ZW50c1tuXTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggODkyYTlmMi4uMGEzMjE2NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTI4NCwxMyArMjg0LDEyIEBACiAJCXJldHVybiBwcGNfbWQuc2V0X2RhYnIoZGFicik7CiAKIAkvKiBYWFggc2hvdWxkIHdlIGhhdmUgYSBDUFVfRlRSX0hBU19EQUJSID8gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkgfHwgZGVmaW5lZChDT05GSUdfNnh4KQorI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQorCW10c3ByKFNQUk5fREFDMSwgZGFicik7CisjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNTKQogCW10c3ByKFNQUk5fREFCUiwgZGFicik7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQotCW10c3ByKFNQUk5fREFDMSwgZGFicik7Ci0jZW5kaWYKIAogCXJldHVybiAwOwogfQpAQCAtMzcyLDE1ICszNzEsMTYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotCWlmICh1bmxpa2VseShfX2dldF9jcHVfdmFyKGN1cnJlbnRfZGFicikgIT0gbmV3LT50aHJlYWQuZGFicikpCi0JCXNldF9kYWJyKG5ldy0+dGhyZWFkLmRhYnIpOwotCiAjaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCiAJLyogSWYgbmV3IHRocmVhZCBEQUMgKEhXIGJyZWFrcG9pbnQpIGlzIHRoZSBzYW1lIHRoZW4gbGVhdmUgaXQgKi8KIAlpZiAobmV3LT50aHJlYWQuZGFicikKIAkJc2V0X2RhYnIobmV3LT50aHJlYWQuZGFicik7CisjZWxzZQorCWlmICh1bmxpa2VseShfX2dldF9jcHVfdmFyKGN1cnJlbnRfZGFicikgIT0gbmV3LT50aHJlYWQuZGFicikpCisJCXNldF9kYWJyKG5ldy0+dGhyZWFkLmRhYnIpOwogI2VuZGlmCiAKKwogCW5ld190aHJlYWQgPSAmbmV3LT50aHJlYWQ7CiAJb2xkX3RocmVhZCA9ICZjdXJyZW50LT50aHJlYWQ7CiAKQEAgLTY2NCw2ICs2NjQsNyBAQAogCQlzcF92c2lkIHw9IFNMQl9WU0lEX0tFUk5FTCB8IGxscDsKIAkJcC0+dGhyZWFkLmtzcF92c2lkID0gc3BfdnNpZDsKIAl9CisjZW5kaWYgLyogQ09ORklHX1BQQ19TVERfTU1VXzY0ICovCiAKIAkvKgogCSAqIFRoZSBQUEM2NCBBQkkgbWFrZXMgdXNlIG9mIGEgVE9DIHRvIGNvbnRhaW4gZnVuY3Rpb24gCkBAIC02NzEsNiArNjcyLDcgQEAKIAkgKiB0byB0aGUgVE9DIGVudHJ5LiAgVGhlIGZpcnN0IGVudHJ5IGlzIGEgcG9pbnRlciB0byB0aGUgYWN0dWFsCiAJICogZnVuY3Rpb24uCiAgCSAqLworI2lmZGVmIENPTkZJR19QUEM2NAogCWtyZWdzLT5uaXAgPSAqKCh1bnNpZ25lZCBsb25nICopcmV0X2Zyb21fZm9yayk7CiAjZWxzZQogCWtyZWdzLT5uaXAgPSAodW5zaWduZWQgbG9uZylyZXRfZnJvbV9mb3JrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggYTUzODgyNC4uODY0MzM0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCkBAIC0xOTAsNiArMTkwLDggQEAKIAogc3RhdGljIGNoYXIgX19pbml0ZGF0YSBwcm9tX2NtZF9saW5lW0NPTU1BTkRfTElORV9TSVpFXTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBwcm9tX21lbW9yeV9saW1pdDsKKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBhbGxvY190b3A7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIGFsbG9jX3RvcF9oaWdoOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBhbGxvY19ib3R0b207CkBAIC00ODQsNiArNDg2LDY3IEBACiAJcmV0dXJuIGNhbGxfcHJvbSgiaW50ZXJwcmV0IiwgMSwgMSwgKHUzMikodW5zaWduZWQgbG9uZykgY21kKTsKIH0KIAorLyogV2UgY2FuJ3QgdXNlIHRoZSBzdGFuZGFyZCB2ZXJzaW9ucyBiZWNhdXNlIG9mIFJFTE9DIGhlYWRhY2hlcy4gKi8KKyNkZWZpbmUgaXN4ZGlnaXQoYykJKCgnMCcgPD0gKGMpICYmIChjKSA8PSAnOScpIFwKKwkJCSB8fCAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2YnKSBcCisJCQkgfHwgKCdBJyA8PSAoYykgJiYgKGMpIDw9ICdGJykpCisKKyNkZWZpbmUgaXNkaWdpdChjKQkoJzAnIDw9IChjKSAmJiAoYykgPD0gJzknKQorI2RlZmluZSBpc2xvd2VyKGMpCSgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjZGVmaW5lIHRvdXBwZXIoYykJKGlzbG93ZXIoYykgPyAoKGMpIC0gJ2EnICsgJ0EnKSA6IChjKSkKKwordW5zaWduZWQgbG9uZyBwcm9tX3N0cnRvdWwoY29uc3QgY2hhciAqY3AsIGNvbnN0IGNoYXIgKiplbmRwKQoreworCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMCwgYmFzZSA9IDEwLCB2YWx1ZTsKKworCWlmICgqY3AgPT0gJzAnKSB7CisJCWJhc2UgPSA4OworCQljcCsrOworCQlpZiAodG91cHBlcigqY3ApID09ICdYJykgeworCQkJY3ArKzsKKwkJCWJhc2UgPSAxNjsKKwkJfQorCX0KKworCXdoaWxlIChpc3hkaWdpdCgqY3ApICYmCisJICAgICAgICh2YWx1ZSA9IGlzZGlnaXQoKmNwKSA/ICpjcCAtICcwJyA6IHRvdXBwZXIoKmNwKSAtICdBJyArIDEwKSA8IGJhc2UpIHsKKwkJcmVzdWx0ID0gcmVzdWx0ICogYmFzZSArIHZhbHVlOworCQljcCsrOworCX0KKworCWlmIChlbmRwKQorCQkqZW5kcCA9IGNwOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwordW5zaWduZWQgbG9uZyBwcm9tX21lbXBhcnNlKGNvbnN0IGNoYXIgKnB0ciwgY29uc3QgY2hhciAqKnJldHB0cikKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IHByb21fc3RydG91bChwdHIsIHJldHB0cik7CisJaW50IHNoaWZ0ID0gMDsKKworCS8qCisJICogV2UgY2FuJ3QgdXNlIGEgc3dpdGNoIGhlcmUgYmVjYXVzZSBHQ0MgKm1heSogZ2VuZXJhdGUgYQorCSAqIGp1bXAgdGFibGUgd2hpY2ggd29uJ3Qgd29yaywgYmVjYXVzZSB3ZSdyZSBub3QgcnVubmluZyBhdAorCSAqIHRoZSBhZGRyZXNzIHdlJ3JlIGxpbmtlZCBhdC4KKwkgKi8KKwlpZiAoJ0cnID09ICoqcmV0cHRyIHx8ICdnJyA9PSAqKnJldHB0cikKKwkJc2hpZnQgPSAzMDsKKworCWlmICgnTScgPT0gKipyZXRwdHIgfHwgJ20nID09ICoqcmV0cHRyKQorCQlzaGlmdCA9IDIwOworCisJaWYgKCdLJyA9PSAqKnJldHB0ciB8fCAnaycgPT0gKipyZXRwdHIpCisJCXNoaWZ0ID0gMTA7CisKKwlpZiAoc2hpZnQpIHsKKwkJcmV0IDw8PSBzaGlmdDsKKwkJKCpyZXRwdHIpKys7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIEVhcmx5IHBhcnNpbmcgb2YgdGhlIGNvbW1hbmQgbGluZSBwYXNzZWQgdG8gdGhlIGtlcm5lbCwgdXNlZCBmb3IKICAqICJtZW09eCIgYW5kIHRoZSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBpb21tdQpAQCAtNDkxLDkgKzU1NCw4IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfY21kbGluZV9wYXJzZSh2b2lkKQogewogCXN0cnVjdCBwcm9tX3QgKl9wcm9tID0gJlJFTE9DKHByb20pOwotI2lmZGVmIENPTkZJR19QUEM2NAogCWNvbnN0IGNoYXIgKm9wdDsKLSNlbmRpZgorCiAJY2hhciAqcDsKIAlpbnQgbCA9IDA7CiAKQEAgLTUyMSw2ICs1ODMsMTUgQEAKIAkJCVJFTE9DKHByb21faW9tbXVfZm9yY2Vfb24pID0gMTsKIAl9CiAjZW5kaWYKKwlvcHQgPSBzdHJzdHIoUkVMT0MocHJvbV9jbWRfbGluZSksIFJFTE9DKCJtZW09IikpOworCWlmIChvcHQpIHsKKwkJb3B0ICs9IDQ7CisJCVJFTE9DKHByb21fbWVtb3J5X2xpbWl0KSA9IHByb21fbWVtcGFyc2Uob3B0LCAoY29uc3QgY2hhciAqKikmb3B0KTsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwkJLyogQWxpZ24gdG8gMTYgTUIgPT0gc2l6ZSBvZiBwcGM2NCBsYXJnZSBwYWdlICovCisJCVJFTE9DKHByb21fbWVtb3J5X2xpbWl0KSA9IEFMSUdOKFJFTE9DKHByb21fbWVtb3J5X2xpbWl0KSwgMHgxMDAwMDAwKTsKKyNlbmRpZgorCX0KIH0KIAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwpAQCAtMTAyNyw2ICsxMDk4LDI5IEBACiAJfQogCiAJLyoKKwkgKiBJZiBwcm9tX21lbW9yeV9saW1pdCBpcyBzZXQgd2UgcmVkdWNlIHRoZSB1cHBlciBsaW1pdHMgKmV4Y2VwdCogZm9yCisJICogYWxsb2NfdG9wX2hpZ2guIFRoaXMgbXVzdCBiZSB0aGUgcmVhbCB0b3Agb2YgUkFNIHNvIHdlIGNhbiBwdXQKKwkgKiBUQ0UncyB1cCB0aGVyZS4KKwkgKi8KKworCVJFTE9DKGFsbG9jX3RvcF9oaWdoKSA9IFJFTE9DKHJhbV90b3ApOworCisJaWYgKFJFTE9DKHByb21fbWVtb3J5X2xpbWl0KSkgeworCQlpZiAoUkVMT0MocHJvbV9tZW1vcnlfbGltaXQpIDw9IFJFTE9DKGFsbG9jX2JvdHRvbSkpIHsKKwkJCXByb21fcHJpbnRmKCJJZ25vcmluZyBtZW09JXggPD0gYWxsb2NfYm90dG9tLlxuIiwKKwkJCQlSRUxPQyhwcm9tX21lbW9yeV9saW1pdCkpOworCQkJUkVMT0MocHJvbV9tZW1vcnlfbGltaXQpID0gMDsKKwkJfSBlbHNlIGlmIChSRUxPQyhwcm9tX21lbW9yeV9saW1pdCkgPj0gUkVMT0MocmFtX3RvcCkpIHsKKwkJCXByb21fcHJpbnRmKCJJZ25vcmluZyBtZW09JXggPj0gcmFtX3RvcC5cbiIsCisJCQkJUkVMT0MocHJvbV9tZW1vcnlfbGltaXQpKTsKKwkJCVJFTE9DKHByb21fbWVtb3J5X2xpbWl0KSA9IDA7CisJCX0gZWxzZSB7CisJCQlSRUxPQyhyYW1fdG9wKSA9IFJFTE9DKHByb21fbWVtb3J5X2xpbWl0KTsKKwkJCVJFTE9DKHJtb190b3ApID0gbWluKFJFTE9DKHJtb190b3ApLCBSRUxPQyhwcm9tX21lbW9yeV9saW1pdCkpOworCQl9CisJfQorCisJLyoKIAkgKiBTZXR1cCBvdXIgdG9wIGFsbG9jIHBvaW50LCB0aGF0IGlzIHRvcCBvZiBSTU8gb3IgdG9wIG9mCiAJICogc2VnbWVudCAwIHdoZW4gcnVubmluZyBub24tTFBBUi4KIAkgKiBTb21lIFJTNjQgbWFjaGluZXMgaGF2ZSBidWdneSBmaXJtd2FyZSB3aGVyZSBjbGFpbXMgdXAgYXQKQEAgLTEwNDEsNiArMTEzNSw3IEBACiAJUkVMT0MoYWxsb2NfdG9wX2hpZ2gpID0gUkVMT0MocmFtX3RvcCk7CiAKIAlwcm9tX3ByaW50ZigibWVtb3J5IGxheW91dCBhdCBpbml0OlxuIik7CisJcHJvbV9wcmludGYoIiAgbWVtb3J5X2xpbWl0IDogJXggKDE2IE1CIGFsaWduZWQpXG4iLCBSRUxPQyhwcm9tX21lbW9yeV9saW1pdCkpOwogCXByb21fcHJpbnRmKCIgIGFsbG9jX2JvdHRvbSA6ICV4XG4iLCBSRUxPQyhhbGxvY19ib3R0b20pKTsKIAlwcm9tX3ByaW50ZigiICBhbGxvY190b3AgICAgOiAleFxuIiwgUkVMT0MoYWxsb2NfdG9wKSk7CiAJcHJvbV9wcmludGYoIiAgYWxsb2NfdG9wX2hpIDogJXhcbiIsIFJFTE9DKGFsbG9jX3RvcF9oaWdoKSk7CkBAIC0xMjU5LDEwICsxMzU0LDYgQEAKICAqCiAgKiAtLSBDb3J0CiAgKi8KLWV4dGVybiBjaGFyIF9fc2Vjb25kYXJ5X2hvbGQ7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZTsKLQogLyoKICAqIFdlIHdhbnQgdG8gcmVmZXJlbmNlIHRoZSBjb3B5IG9mIF9fc2Vjb25kYXJ5X2hvbGRfKiBpbiB0aGUKICAqIDAgLSAweDEwMCBhZGRyZXNzIHJhbmdlCkBAIC0yMzk5LDYgKzI0OTAsMTAgQEAKIAkvKgogCSAqIEZpbGwgaW4gc29tZSBpbmZvcyBmb3IgdXNlIGJ5IHRoZSBrZXJuZWwgbGF0ZXIgb24KIAkgKi8KKwlpZiAoUkVMT0MocHJvbV9tZW1vcnlfbGltaXQpKQorCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgIi9jaG9zZW4iLCAibGludXgsbWVtb3J5LWxpbWl0IiwKKwkJCSAgICAgJlJFTE9DKHByb21fbWVtb3J5X2xpbWl0KSwKKwkJCSAgICAgc2l6ZW9mKHByb21fbWVtb3J5X2xpbWl0KSk7CiAjaWZkZWYgQ09ORklHX1BQQzY0CiAJaWYgKFJFTE9DKHByb21faW9tbXVfb2ZmKSkKIAkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICIvY2hvc2VuIiwgImxpbnV4LGlvbW11LW9mZiIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCmluZGV4IGM0MzQ4MjMuLmJmOTAzNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAogc3RydWN0IHJ0YXNfdCBydGFzID0gewogCS5sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VECkBAIC03MTMsNiArNzE0LDcgQEAKIHsKIAlsb25nIHJjID0gSF9TVUNDRVNTOwogCXVuc2lnbmVkIGxvbmcgbXNyX3NhdmU7CisJdTE2IHNsYl9zaXplID0gbW11X3NsYl9zaXplOwogCWludCBjcHU7CiAJc3RydWN0IHJ0YXNfc3VzcGVuZF9tZV9kYXRhICpkYXRhID0KIAkJKHN0cnVjdCBydGFzX3N1c3BlbmRfbWVfZGF0YSAqKWluZm87CkBAIC03MzUsMTMgKzczNywxNiBAQAogCQkvKiBBbGwgb3RoZXIgY3B1cyBhcmUgaW4gSF9KT0lOLCB0aGlzIGNwdSBkb2VzCiAJCSAqIHRoZSBzdXNwZW5kLgogCQkgKi8KKwkJc2xiX3NldF9zaXplKFNMQl9NSU5fU0laRSk7CiAJCXByaW50ayhLRVJOX0RFQlVHICJjYWxsaW5nIGlibSxzdXNwZW5kLW1lIG9uIGNwdSAlaVxuIiwKIAkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJCWRhdGEtPmVycm9yID0gcnRhc19jYWxsKGRhdGEtPnRva2VuLCAwLCAxLCBOVUxMKTsKIAotCQlpZiAoZGF0YS0+ZXJyb3IpCisJCWlmIChkYXRhLT5lcnJvcikgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgImlibSxzdXNwZW5kLW1lIHJldHVybmVkICVkXG4iLAogCQkJICAgICAgIGRhdGEtPmVycm9yKTsKKwkJCXNsYl9zZXRfc2l6ZShzbGJfc2l6ZSk7CisJCX0KIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIkhfSk9JTiBvbiBjcHUgJWkgZmFpbGVkIHdpdGggcmMgPSAlbGRcbiIsCiAJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIHJjKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCBlMWUzMDU5Li41M2JjZjNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC0yMTAsNiArMjEwLDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MKG52cmFtX3dyaXRlX2J5dGUpOwogCitzc2l6ZV90IG52cmFtX2dldF9zaXplKHZvaWQpCit7CisJaWYgKHBwY19tZC5udnJhbV9zaXplKQorCQlyZXR1cm4gcHBjX21kLm52cmFtX3NpemUoKTsKKwlyZXR1cm4gLTE7Cit9CitFWFBPUlRfU1lNQk9MKG52cmFtX2dldF9zaXplKTsKKwogdm9pZCBudnJhbV9zeW5jKHZvaWQpCiB7CiAJaWYgKHBwY19tZC5udnJhbV9zeW5jKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IDFmNjgxNjAuLjc5N2VhOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKQEAgLTU3LDExICs1NywxMyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9tbXUtaGFzaDY0Lmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgogI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgogI2luY2x1ZGUgPGFzbS9zd2lvdGxiLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKICNpbmNsdWRlICJzZXR1cC5oIgogCkBAIC0xNDIsMTEgKzE0NCwxNCBAQAogI2RlZmluZSBjaGVja19zbXRfZW5hYmxlZCgpCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi0vKiBQdXQgdGhlIHBhY2EgcG9pbnRlciBpbnRvIHIxMyBhbmQgU1BSRzMgKi8KKy8qIFB1dCB0aGUgcGFjYSBwb2ludGVyIGludG8gcjEzIGFuZCBTUFJHX1BBQ0EgKi8KIHZvaWQgX19pbml0IHNldHVwX3BhY2EoaW50IGNwdSkKIHsKIAlsb2NhbF9wYWNhID0gJnBhY2FbY3B1XTsKLQltdHNwcihTUFJOX1NQUkczLCBsb2NhbF9wYWNhKTsKKwltdHNwcihTUFJOX1NQUkdfUEFDQSwgbG9jYWxfcGFjYSk7CisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKKwltdHNwcihTUFJOX1NQUkdfVExCX0VYRlJBTUUsIGxvY2FsX3BhY2EtPmV4dGxiKTsKKyNlbmRpZgogfQogCiAvKgpAQCAtMjMwLDkgKzIzNSw2IEBACiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3A7Ci1leHRlcm4gdm9pZCBnZW5lcmljX3NlY29uZGFyeV9zbXBfaW5pdCh2b2lkKTsKLQogdm9pZCBzbXBfcmVsZWFzZV9jcHVzKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyAqcHRyOwpAQCAtNDUzLDYgKzQ1NSwyNCBAQAogI2RlZmluZSBpcnFzdGFja19lYXJseV9pbml0KCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKK3N0YXRpYyB2b2lkIF9faW5pdCBleGNfbHZsX2Vhcmx5X2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCWNyaXRpcnFfY3R4W2ldID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQorCQkJX192YShsbWJfYWxsb2MoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKSk7CisJCWRiZ2lycV9jdHhbaV0gPSAoc3RydWN0IHRocmVhZF9pbmZvICopCisJCQlfX3ZhKGxtYl9hbGxvYyhUSFJFQURfU0laRSwgVEhSRUFEX1NJWkUpKTsKKwkJbWNoZWNraXJxX2N0eFtpXSA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKikKKwkJCV9fdmEobG1iX2FsbG9jKFRIUkVBRF9TSVpFLCBUSFJFQURfU0laRSkpOworCX0KK30KKyNlbHNlCisjZGVmaW5lIGV4Y19sdmxfZWFybHlfaW5pdCgpCisjZW5kaWYKKwogLyoKICAqIFN0YWNrIHNwYWNlIHVzZWQgd2hlbiB3ZSBkZXRlY3QgYSBiYWQga2VybmVsIHN0YWNrIHBvaW50ZXIsIGFuZAogICogZWFybHkgaW4gU01QIGJvb3RzIGJlZm9yZSByZWxvY2F0aW9uIGlzIGVuYWJsZWQuCkBAIC01MTIsNiArNTMyLDcgQEAKIAlpbml0X21tLmJyayA9IGtsaW1pdDsKIAkKIAlpcnFzdGFja19lYXJseV9pbml0KCk7CisJZXhjX2x2bF9lYXJseV9pbml0KCk7CiAJZW1lcmdlbmN5X3N0YWNrX2luaXQoKTsKIAogI2lmZGVmIENPTkZJR19QUENfU1REX01NVV82NApAQCAtNTM0LDYgKzU1NSwxMCBAQAogI2VuZGlmCiAKIAlwYWdpbmdfaW5pdCgpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgTU1VIGNvbnRleHQgbWFuYWdlbWVudCBzdHVmZiAqLworCW1tdV9jb250ZXh0X2luaXQoKTsKKwogCXBwYzY0X2Jvb3RfbXNnKDB4MTUsICJTZXR1cCBEb25lIik7CiB9CiAKQEAgLTU2OSwyNSArNTk0LDUzIEBACiB9CiAKICNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIFBDUFVfRFlOX1NJWkUJCSgpCisKK3N0YXRpYyB2b2lkICogX19pbml0IHBjcHVfZmNfYWxsb2ModW5zaWduZWQgaW50IGNwdSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbikKK3sKKwlyZXR1cm4gX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKGNwdV90b19ub2RlKGNwdSkpLCBzaXplLCBhbGlnbiwKKwkJCQkgICAgX19wYShNQVhfRE1BX0FERFJFU1MpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHBjcHVfZmNfZnJlZSh2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworCWZyZWVfYm9vdG1lbShfX3BhKHB0ciksIHNpemUpOworfQorCitzdGF0aWMgaW50IHBjcHVfY3B1X2Rpc3RhbmNlKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pCit7CisJaWYgKGNwdV90b19ub2RlKGZyb20pID09IGNwdV90b19ub2RlKHRvKSkKKwkJcmV0dXJuIExPQ0FMX0RJU1RBTkNFOworCWVsc2UKKwkJcmV0dXJuIFJFTU9URV9ESVNUQU5DRTsKK30KKwogdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKQogewotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQljaGFyICpwdHI7CisJY29uc3Qgc2l6ZV90IGR5bl9zaXplID0gUEVSQ1BVX01PRFVMRV9SRVNFUlZFICsgUEVSQ1BVX0RZTkFNSUNfUkVTRVJWRTsKKwlzaXplX3QgYXRvbV9zaXplOworCXVuc2lnbmVkIGxvbmcgZGVsdGE7CisJdW5zaWduZWQgaW50IGNwdTsKKwlpbnQgcmM7CiAKLQkvKiBDb3B5IHNlY3Rpb24gZm9yIGVhY2ggQ1BVICh3ZSBkaXNjYXJkIHRoZSBvcmlnaW5hbCkgKi8KLQlzaXplID0gQUxJR04oX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCwgUEFHRV9TSVpFKTsKLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotCWlmIChzaXplIDwgUEVSQ1BVX0VOT1VHSF9ST09NKQotCQlzaXplID0gUEVSQ1BVX0VOT1VHSF9ST09NOwotI2VuZGlmCisJLyoKKwkgKiBMaW5lYXIgbWFwcGluZyBpcyBvbmUgb2YgNEssIDFNIGFuZCAxNk0uICBGb3IgNEssIG5vIG5lZWQKKwkgKiB0byBncm91cCB1bml0cy4gIEZvciBsYXJnZXIgbWFwcGluZ3MsIHVzZSAxTSBhdG9tIHdoaWNoCisJICogc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBjb250YWluIGEgbnVtYmVyIG9mIHVuaXRzLgorCSAqLworCWlmIChtbXVfbGluZWFyX3BzaXplID09IE1NVV9QQUdFXzRLKQorCQlhdG9tX3NpemUgPSBQQUdFX1NJWkU7CisJZWxzZQorCQlhdG9tX3NpemUgPSAxIDw8IDIwOwogCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJcHRyID0gYWxsb2NfYm9vdG1lbV9wYWdlc19ub2RlKE5PREVfREFUQShjcHVfdG9fbm9kZShpKSksIHNpemUpOworCXJjID0gcGNwdV9lbWJlZF9maXJzdF9jaHVuaygwLCBkeW5fc2l6ZSwgYXRvbV9zaXplLCBwY3B1X2NwdV9kaXN0YW5jZSwKKwkJCQkgICAgcGNwdV9mY19hbGxvYywgcGNwdV9mY19mcmVlKTsKKwlpZiAocmMgPCAwKQorCQlwYW5pYygiY2Fubm90IGluaXRpYWxpemUgcGVyY3B1IGFyZWEgKGVycj0lZCkiLCByYyk7CiAKLQkJcGFjYVtpXS5kYXRhX29mZnNldCA9IHB0ciAtIF9fcGVyX2NwdV9zdGFydDsKLQkJbWVtY3B5KHB0ciwgX19wZXJfY3B1X3N0YXJ0LCBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0KTsKLQl9CisJZGVsdGEgPSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkciAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQlwYWNhW2NwdV0uZGF0YV9vZmZzZXQgPSBkZWx0YSArIHBjcHVfdW5pdF9vZmZzZXRzW2NwdV07CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKaW5kZXggMGI0N2RlMC4uZDM4N2IzOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCkBAIC0yNjksNyArMjY5LDEwIEBACiAJY3B1X2NhbGxpbl9tYXBbYm9vdF9jcHVpZF0gPSAxOwogCiAJaWYgKHNtcF9vcHMpCi0JCW1heF9jcHVzID0gc21wX29wcy0+cHJvYmUoKTsKKwkJaWYgKHNtcF9vcHMtPnByb2JlKQorCQkJbWF4X2NwdXMgPSBzbXBfb3BzLT5wcm9iZSgpOworCQllbHNlCisJCQltYXhfY3B1cyA9IE5SX0NQVVM7CiAJZWxzZQogCQltYXhfY3B1cyA9IDE7CiAgCkBAIC00MTIsOSArNDE1LDggQEAKIAkJICogQ1BVcyBjYW4gdGFrZSBtdWNoIGxvbmdlciB0byBjb21lIHVwIGluIHRoZQogCQkgKiBob3RwbHVnIGNhc2UuICBXYWl0IGZpdmUgc2Vjb25kcy4KIAkJICovCi0JCWZvciAoYyA9IDI1OyBjICYmICFjcHVfY2FsbGluX21hcFtjcHVdOyBjLS0pIHsKLQkJCW1zbGVlcCgyMDApOwotCQl9CisJCWZvciAoYyA9IDUwMDA7IGMgJiYgIWNwdV9jYWxsaW5fbWFwW2NwdV07IGMtLSkKKwkJCW1zbGVlcCgxKTsKICNlbmRpZgogCiAJaWYgKCFjcHVfY2FsbGluX21hcFtjcHVdKSB7CkBAIC00OTQsNyArNDk2LDggQEAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAljcHVfY2FsbGluX21hcFtjcHVdID0gMTsKIAotCXNtcF9vcHMtPnNldHVwX2NwdShjcHUpOworCWlmIChzbXBfb3BzLT5zZXR1cF9jcHUpCisJCXNtcF9vcHMtPnNldHVwX2NwdShjcHUpOwogCWlmIChzbXBfb3BzLT50YWtlX3RpbWViYXNlKQogCQlzbXBfb3BzLT50YWtlX3RpbWViYXNlKCk7CiAKQEAgLTU1Nyw3ICs1NjAsNyBAQAogCW9sZF9tYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwogCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1bWFza19vZl9jcHUoYm9vdF9jcHVpZCkpOwogCQotCWlmIChzbXBfb3BzKQorCWlmIChzbXBfb3BzICYmIHNtcF9vcHMtPnNldHVwX2NwdSkKIAkJc21wX29wcy0+c2V0dXBfY3B1KGJvb3RfY3B1aWQpOwogCiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBvbGRfbWFzayk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYwppbmRleCBiYjFjZmNmLi4xY2M1ZTllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzX3BwYzMyLmMKQEAgLTM0Myw2ICszNDMsMTggQEAKIAlyZXR1cm4gc3lzX2xzZWVrKGZkLCAoaW50KW9mZnNldCwgb3JpZ2luKTsKIH0KIAorbG9uZyBjb21wYXRfc3lzX3RydW5jYXRlKGNvbnN0IGNoYXIgX191c2VyICogcGF0aCwgdTMyIGxlbmd0aCkKK3sKKwkvKiBzaWduIGV4dGVuZCBsZW5ndGggKi8KKwlyZXR1cm4gc3lzX3RydW5jYXRlKHBhdGgsIChpbnQpbGVuZ3RoKTsKK30KKworbG9uZyBjb21wYXRfc3lzX2Z0cnVuY2F0ZShpbnQgZmQsIHUzMiBsZW5ndGgpCit7CisJLyogc2lnbiBleHRlbmQgbGVuZ3RoICovCisJcmV0dXJuIHN5c19mdHJ1bmNhdGUoZmQsIChpbnQpbGVuZ3RoKTsKK30KKwogLyogTm90ZTogaXQgaXMgbmVjZXNzYXJ5IHRvIHRyZWF0IGJ1ZnNpeiBhcyBhbiB1bnNpZ25lZCBpbnQsCiAgKiB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGNhc3QgdG8gYSBzaWduZWQgaW50IHRvIGluc3VyZSB0aGF0IHRoZSAKICAqIHByb3BlciBjb252ZXJzaW9uIChzaWduIGV4dGVuc2lvbikgYmV0d2VlbiB0aGUgcmVnaXN0ZXIgcmVwcmVzZW50YXRpb24gb2YgYSBzaWduZWQgaW50IChtc3IgaW4gMzItYml0IG1vZGUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKaW5kZXggZjQxYWVjOC4uOTU2YWIzMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL3BtYy5oPgogCiAjaW5jbHVkZSAiY2FjaGVpbmZvLmgiCiAKQEAgLTEyMyw2ICsxMjQsOCBAQAogCiB2b2lkIHBwY19lbmFibGVfcG1jcyh2b2lkKQogeworCXBwY19zZXRfcG11X2ludXNlKDEpOworCiAJLyogT25seSBuZWVkIHRvIGVuYWJsZSB0aGVtIG9uY2UgKi8KIAlpZiAoX19nZXRfY3B1X3ZhcihwbWNzX2VuYWJsZWQpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCmluZGV4IGVhZTQ1MTEuLmExODBiNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCkBAIC00NzksNyArNDc5LDggQEAKIAkJdW5zaWduZWQgbG9uZyB0Yl90aWNrcyA9IHRiIC0gaVNlcmllc19yZWNhbF90YjsKIAkJdW5zaWduZWQgbG9uZyB0aXRhbl91c2VjID0gKHRpdGFuIC0gaVNlcmllc19yZWNhbF90aXRhbikgPj4gMTI7CiAJCXVuc2lnbmVkIGxvbmcgbmV3X3RiX3RpY2tzX3Blcl9zZWMgICA9ICh0Yl90aWNrcyAqIFVTRUNfUEVSX1NFQykvdGl0YW5fdXNlYzsKLQkJdW5zaWduZWQgbG9uZyBuZXdfdGJfdGlja3NfcGVyX2ppZmZ5ID0gKG5ld190Yl90aWNrc19wZXJfc2VjKyhIWi8yKSkvSFo7CisJCXVuc2lnbmVkIGxvbmcgbmV3X3RiX3RpY2tzX3Blcl9qaWZmeSA9CisJCQlESVZfUk9VTkRfQ0xPU0VTVChuZXdfdGJfdGlja3NfcGVyX3NlYywgSFopOwogCQlsb25nIHRpY2tfZGlmZiA9IG5ld190Yl90aWNrc19wZXJfamlmZnkgLSB0Yl90aWNrc19wZXJfamlmZnk7CiAJCWNoYXIgc2lnbiA9ICcrJzsJCQogCQkvKiBtYWtlIHN1cmUgdGJfdGlja3NfcGVyX3NlYyBhbmQgdGJfdGlja3NfcGVyX2ppZmZ5IGFyZSBjb25zaXN0ZW50ICovCkBAIC03MjYsNiArNzI3LDE4IEBACiAJcmV0dXJuIGZvdW5kOwogfQogCisvKiBzaG91bGQgYmVjb21lIF9fY3B1aW5pdCB3aGVuIHNlY29uZGFyeV9jcHVfdGltZV9pbml0IGFsc28gaXMgKi8KK3ZvaWQgc3RhcnRfY3B1X2RlY3JlbWVudGVyKHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpIHx8IGRlZmluZWQoQ09ORklHXzQweCkKKwkvKiBDbGVhciBhbnkgcGVuZGluZyB0aW1lciBpbnRlcnJ1cHRzICovCisJbXRzcHIoU1BSTl9UU1IsIFRTUl9FTlcgfCBUU1JfV0lTIHwgVFNSX0RJUyB8IFRTUl9GSVMpOworCisJLyogRW5hYmxlIGRlY3JlbWVudGVyIGludGVycnVwdCAqLworCW10c3ByKFNQUk5fVENSLCBUQ1JfRElFKTsKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19CT09LRSkgfHwgZGVmaW5lZChDT05GSUdfNDB4KSAqLworfQorCiB2b2lkIF9faW5pdCBnZW5lcmljX2NhbGlicmF0ZV9kZWNyKHZvaWQpCiB7CiAJcHBjX3RiX2ZyZXEgPSBERUZBVUxUX1RCX0ZSRVE7CQkvKiBoYXJkY29kZWQgZGVmYXVsdCAqLwpAQCAtNzQ1LDE0ICs3NTgsNiBAQAogCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkc6IEVzdGltYXRpbmcgcHJvY2Vzc29yIGZyZXF1ZW5jeSAiCiAJCQkJIihub3QgZm91bmQpXG4iKTsKIAl9Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkgfHwgZGVmaW5lZChDT05GSUdfNDB4KQotCS8qIENsZWFyIGFueSBwZW5kaW5nIHRpbWVyIGludGVycnVwdHMgKi8KLQltdHNwcihTUFJOX1RTUiwgVFNSX0VOVyB8IFRTUl9XSVMgfCBUU1JfRElTIHwgVFNSX0ZJUyk7Ci0KLQkvKiBFbmFibGUgZGVjcmVtZW50ZXIgaW50ZXJydXB0ICovCi0JbXRzcHIoU1BSTl9UQ1IsIFRDUl9ESUUpOwotI2VuZGlmCiB9CiAKIGludCB1cGRhdGVfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgbm93KQpAQCAtOTEzLDYgKzkxOCwxMSBAQAogCiB2b2lkIHNlY29uZGFyeV9jcHVfdGltZV9pbml0KHZvaWQpCiB7CisJLyogU3RhcnQgdGhlIGRlY3JlbWVudGVyIG9uIENQVXMgdGhhdCBoYXZlIG1hbnVhbCBjb250cm9sCisJICogc3VjaCBhcyBCb29rRQorCSAqLworCXN0YXJ0X2NwdV9kZWNyZW1lbnRlcigpOworCiAJLyogRklNRTogU2hvdWxkIG1ha2UgdW5yZWxhdHJlZCBjaGFuZ2UgdG8gbW92ZSBzbmFwc2hvdF90aW1lYmFzZQogCSAqIGNhbGwgaGVyZSAhICovCiAJcmVnaXN0ZXJfZGVjcmVtZW50ZXJfY2xvY2tldmVudChzbXBfcHJvY2Vzc29yX2lkKCkpOwpAQCAtMTAxNiw2ICsxMDI2LDExIEBACiAKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCisJLyogU3RhcnQgdGhlIGRlY3JlbWVudGVyIG9uIENQVXMgdGhhdCBoYXZlIG1hbnVhbCBjb250cm9sCisJICogc3VjaCBhcyBCb29rRQorCSAqLworCXN0YXJ0X2NwdV9kZWNyZW1lbnRlcigpOworCiAJLyogUmVnaXN0ZXIgdGhlIGNsb2Nrc291cmNlLCBpZiB3ZSdyZSBub3QgcnVubmluZyBvbiBpU2VyaWVzICovCiAJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQogCQljbG9ja3NvdXJjZV9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCmluZGV4IGFkMDZkNWMuLmEwYWJjZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCkBAIC0yMDMsNyArMjAzLDEyIEBACiAJfSBlbHNlIHsKIAkJdmRzb19wYWdlbGlzdCA9IHZkc282NF9wYWdlbGlzdDsKIAkJdmRzb19wYWdlcyA9IHZkc282NF9wYWdlczsKLQkJdmRzb19iYXNlID0gVkRTTzY0X01CQVNFOworCQkvKgorCQkgKiBPbiA2NGJpdCB3ZSBkb24ndCBoYXZlIGEgcHJlZmVycmVkIG1hcCBhZGRyZXNzLiBUaGlzCisJCSAqIGFsbG93cyBnZXRfdW5tYXBwZWRfYXJlYSB0byBmaW5kIGFuIGFyZWEgbmVhciBvdGhlciBtbWFwcworCQkgKiBhbmQgbW9zdCBsaWtlbHkgc2hhcmUgYSBTTEIgZW50cnkuCisJCSAqLworCQl2ZHNvX2Jhc2UgPSAwOwogCX0KICNlbHNlCiAJdmRzb19wYWdlbGlzdCA9IHZkc28zMl9wYWdlbGlzdDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUKaW5kZXggYzNkNTdiZC4uYjU0YjgxNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUKQEAgLTEyLDYgKzEyLDcgQEAKIHRhcmdldHMgOj0gJChvYmotdmRzbzMyKSB2ZHNvMzIuc28gdmRzbzMyLnNvLmRiZwogb2JqLXZkc28zMiA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCAkKG9iai12ZHNvMzIpKQogCitHQ09WX1BST0ZJTEUgOj0gbgogCiBFWFRSQV9DRkxBR1MgOj0gLXNoYXJlZCAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4KIEVYVFJBX0NGTEFHUyArPSAtbm9zdGRsaWIgLVdsLC1zb25hbWU9bGludXgtdmRzbzMyLnNvLjEgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9NYWtlZmlsZQppbmRleCBmYTdmMWI4Li5kZDBjOGU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9NYWtlZmlsZQpAQCAtNyw2ICs3LDggQEAKIHRhcmdldHMgOj0gJChvYmotdmRzbzY0KSB2ZHNvNjQuc28gdmRzbzY0LnNvLmRiZwogb2JqLXZkc282NCA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCAkKG9iai12ZHNvNjQpKQogCitHQ09WX1BST0ZJTEUgOj0gbgorCiBFWFRSQV9DRkxBR1MgOj0gLXNoYXJlZCAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4KIEVYVFJBX0NGTEFHUyArPSAtbm9zdGRsaWIgLVdsLC1zb25hbWU9bGludXgtdmRzbzY0LnNvLjEgXAogCQkkKGNhbGwgbGQtb3B0aW9uLCAtV2wkKGNvbW1hKS0taGFzaC1zdHlsZT1zeXN2KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZWN0b3IuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmVjdG9yLlMKaW5kZXggZWE0ZDY0Ni4uNjdiNjkxNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZWN0b3IuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZlY3Rvci5TCkBAIC02NSw3ICs2NSw3IEBACiAxOgogCS8qIGVuYWJsZSB1c2Ugb2YgVk1YIGFmdGVyIHJldHVybiAqLwogI2lmZGVmIENPTkZJR19QUEMzMgotCW1mc3ByCXI1LFNQUk5fU1BSRzMJCS8qIGN1cnJlbnQgdGFzaydzIFRIUkVBRCAocGh5cykgKi8KKwltZnNwcglyNSxTUFJOX1NQUkdfVEhSRUFECQkvKiBjdXJyZW50IHRhc2sncyBUSFJFQUQgKHBoeXMpICovCiAJb3JpcwlyOSxyOSxNU1JfVkVDQGgKICNlbHNlCiAJbGQJcjQsUEFDQUNVUlJFTlQocjEzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKaW5kZXggODE5ZTU5Zi4uYmM3YjQxZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCkBAIC02MDEsNyArNjAxLDcgQEAKIAl2aW9fY21vX2RlYWxsb2ModmlvZGV2LCBhbGxvY19zaXplKTsKIH0KIAotc3RydWN0IGRtYV9tYXBwaW5nX29wcyB2aW9fZG1hX21hcHBpbmdfb3BzID0geworc3RydWN0IGRtYV9tYXBfb3BzIHZpb19kbWFfbWFwcGluZ19vcHMgPSB7CiAJLmFsbG9jX2NvaGVyZW50ID0gdmlvX2RtYV9pb21tdV9hbGxvY19jb2hlcmVudCwKIAkuZnJlZV9jb2hlcmVudCAgPSB2aW9fZG1hX2lvbW11X2ZyZWVfY29oZXJlbnQsCiAJLm1hcF9zZyAgICAgICAgID0gdmlvX2RtYV9pb21tdV9tYXBfc2csCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggOGVmOGExNC4uNThkYTQwNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMzcsMTIgKzM3LDYgQEAKICNlbmRpZgogU0VDVElPTlMKIHsKLQkvKiBTZWN0aW9ucyB0byBiZSBkaXNjYXJkZWQuICovCi0JL0RJU0NBUkQvIDogewotCSooLmV4aXRjYWxsLmV4aXQpCi0JRVhJVF9EQVRBCi0JfQotCiAJLiA9IEtFUk5FTEJBU0U7CiAKIC8qCkBAIC0yNDUsMTAgKzIzOSw2IEBACiAJfQogI2VuZGlmCiAKLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQlfZWRhdGEgID0gIC47Ci0JUFJPVklERTMyIChlZGF0YSA9IC4pOwotCiAJLyogVGhlIGluaXRpYWwgdGFzayBhbmQga2VybmVsIHN0YWNrICovCiAjaWZkZWYgQ09ORklHX1BQQzMyCiAJLiA9IEFMSUdOKDgxOTIpOwpAQCAtMjgyLDYgKzI3MiwxMCBAQAogCQlfX25vc2F2ZV9lbmQgPSAuOwogCX0KIAorCS4gPSBBTElHTihQQUdFX1NJWkUpOworCV9lZGF0YSAgPSAgLjsKKwlQUk9WSURFMzIgKGVkYXRhID0gLik7CisKIC8qCiAgKiBBbmQgZmluYWxseSB0aGUgYnNzCiAgKi8KQEAgLTI5OCw0ICsyOTIsNyBAQAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9lbmQgPSAuIDsKIAlQUk9WSURFMzIgKGVuZCA9IC4pOworCisJLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkLiAqLworCURJU0NBUkRTCiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eC5jIGIvYXJjaC9wb3dlcnBjL2t2bS80NHguYwppbmRleCAwY2VmODA5Li5mNGQxYjU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4LmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCWttZW1fY2FjaGVfZnJlZShrdm1fdmNwdV9jYWNoZSwgdmNwdV80NHgpOwogfQogCi1zdGF0aWMgaW50IGt2bXBwY180NHhfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQga3ZtcHBjXzQ0eF9pbml0KHZvaWQpCiB7CiAJaW50IHI7CiAKQEAgLTE0OSw3ICsxNDksNyBAQAogCXJldHVybiBrdm1faW5pdChOVUxMLCBzaXplb2Yoc3RydWN0IGt2bXBwY192Y3B1XzQ0eCksIFRISVNfTU9EVUxFKTsKIH0KIAotc3RhdGljIHZvaWQga3ZtcHBjXzQ0eF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQga3ZtcHBjXzQ0eF9leGl0KHZvaWQpCiB7CiAJa3ZtcHBjX2Jvb2tlX2V4aXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMKaW5kZXggNGExNmY0Ny4uZmYzY2I2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJ0aW1pbmcuaCIKIAogI2luY2x1ZGUgIjQ0eF90bGIuaCIKKyNpbmNsdWRlICJ0cmFjZS5oIgogCiAjaWZuZGVmIFBQQzQ0eF9UTEJFX1NJWkUKICNkZWZpbmUgUFBDNDR4X1RMQkVfU0laRQlQUEM0NHhfVExCXzRLCkBAIC0yNjMsNyArMjY0LDcgQEAKIAogCS8qIFhYWCBzZXQgdGxiXzQ0eF9pbmRleCB0byBzdGxiX2luZGV4PyAqLwogCi0JS1ZNVFJBQ0VfMUQoU1RMQl9JTlZBTCwgJnZjcHVfNDR4LT52Y3B1LCBzdGxiX2luZGV4LCBoYW5kbGVyKTsKKwl0cmFjZV9rdm1fc3RsYl9pbnZhbChzdGxiX2luZGV4KTsKIH0KIAogdm9pZCBrdm1wcGNfbW11X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMzY1LDggKzM2Niw4IEBACiAJLyogSW5zZXJ0IHNoYWRvdyBtYXBwaW5nIGludG8gaGFyZHdhcmUgVExCLiAqLwogCWt2bXBwY180NHhfdGxiZV9zZXRfbW9kaWZpZWQodmNwdV80NHgsIHZpY3RpbSk7CiAJa3ZtcHBjXzQ0eF90bGJ3ZSh2aWN0aW0sICZzdGxiZSk7Ci0JS1ZNVFJBQ0VfNUQoU1RMQl9XUklURSwgdmNwdSwgdmljdGltLCBzdGxiZS50aWQsIHN0bGJlLndvcmQwLCBzdGxiZS53b3JkMSwKLQkgICAgICAgICAgICBzdGxiZS53b3JkMiwgaGFuZGxlcik7CisJdHJhY2Vfa3ZtX3N0bGJfd3JpdGUodmljdGltLCBzdGxiZS50aWQsIHN0bGJlLndvcmQwLCBzdGxiZS53b3JkMSwKKwkJCSAgICAgc3RsYmUud29yZDIpOwogfQogCiAvKiBGb3IgYSBwYXJ0aWN1bGFyIGd1ZXN0IFRMQiBlbnRyeSwgaW52YWxpZGF0ZSB0aGUgY29ycmVzcG9uZGluZyBob3N0IFRMQgpAQCAtNDg1LDggKzQ4Niw4IEBACiAJCWt2bXBwY19tbXVfbWFwKHZjcHUsIGVhZGRyLCBncGFkZHIsIGd0bGJfaW5kZXgpOwogCX0KIAotCUtWTVRSQUNFXzVEKEdUTEJfV1JJVEUsIHZjcHUsIGd0bGJfaW5kZXgsIHRsYmUtPnRpZCwgdGxiZS0+d29yZDAsCi0JICAgICAgICAgICAgdGxiZS0+d29yZDEsIHRsYmUtPndvcmQyLCBoYW5kbGVyKTsKKwl0cmFjZV9rdm1fZ3RsYl93cml0ZShndGxiX2luZGV4LCB0bGJlLT50aWQsIHRsYmUtPndvcmQwLCB0bGJlLT53b3JkMSwKKwkJCSAgICAgdGxiZS0+d29yZDIpOwogCiAJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfVExCV0VfRVhJVFMpOwogCXJldHVybiBFTVVMQVRFX0RPTkU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKaW5kZXggNWExNTJhNS4uYzI5OTI2OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwpAQCAtMiw4ICsyLDcgQEAKICMgS1ZNIGNvbmZpZ3VyYXRpb24KICMKIAotY29uZmlnIEhBVkVfS1ZNX0lSUUNISVAKLSAgICAgICBib29sCitzb3VyY2UgInZpcnQva3ZtL0tjb25maWciCiAKIG1lbnVjb25maWcgVklSVFVBTElaQVRJT04KIAlib29sICJWaXJ0dWFsaXphdGlvbiIKQEAgLTU5LDE3ICs1OCw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBLVk1fVFJBQ0UKLQlib29sICJLVk0gdHJhY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEtWTSAmJiBNQVJLRVJTICYmIFNZU0ZTCi0Jc2VsZWN0IFJFTEFZCi0Jc2VsZWN0IERFQlVHX0ZTCi0JZGVmYXVsdCBuCi0JLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gYWxsb3dzIHJlYWRpbmcgYSB0cmFjZSBvZiBrdm0tcmVsYXRlZCBldmVudHMgdGhyb3VnaAotCSAgcmVsYXlmcy4gIE5vdGUgdGhlIEFCSSBpcyBub3QgY29uc2lkZXJlZCBzdGFibGUgYW5kIHdpbGwgYmUKLQkgIG1vZGlmaWVkIGluIGZ1dHVyZSB1cGRhdGVzLgotCiBzb3VyY2UgZHJpdmVycy92aXJ0aW8vS2NvbmZpZwogCiBlbmRpZiAjIFZJUlRVQUxJWkFUSU9OCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQppbmRleCA0NTljN2VlLi4zNzY1NWZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKQEAgLTgsNyArOCw5IEBACiAKIGNvbW1vbi1vYmpzLXkgPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV9tYWluLm8gY29hbGVzY2VkX21taW8ubykKIAotY29tbW9uLW9ianMtJChDT05GSUdfS1ZNX1RSQUNFKSAgKz0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9rdm0vLCBrdm1fdHJhY2UubykKK0NGTEFHU180NHhfdGxiLm8gIDo9IC1JLgorQ0ZMQUdTX2U1MDBfdGxiLm8gOj0gLUkuCitDRkxBR1NfZW11bGF0ZS5vICA6PSAtSS4KIAoga3ZtLW9ianMgOj0gJChjb21tb24tb2Jqcy15KSBwb3dlcnBjLm8gZW11bGF0ZS5vCiBvYmotJChDT05GSUdfS1ZNX0VYSVRfVElNSU5HKSArPSB0aW1pbmcubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jCmluZGV4IDY0MmU0MjAuLmU3YmY0ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMKQEAgLTUyMCw3ICs1MjAsNyBAQAogCXJldHVybiBrdm1wcGNfY29yZV92Y3B1X3RyYW5zbGF0ZSh2Y3B1LCB0cik7CiB9CiAKLWludCBrdm1wcGNfYm9va2VfaW5pdCh2b2lkKQoraW50IF9faW5pdCBrdm1wcGNfYm9va2VfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgaXZvclsxNl07CiAJdW5zaWduZWQgbG9uZyBtYXhfaXZvciA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2ludGVycnVwdHMuUyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfaW50ZXJydXB0cy5TCmluZGV4IGQwYzZmODQuLjM4MGE3OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfaW50ZXJydXB0cy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfaW50ZXJydXB0cy5TCkBAIC01Niw4ICs1Niw4IEBACiAubWFjcm8gS1ZNX0hBTkRMRVIgaXZvcl9ucgogX0dMT0JBTChrdm1wcGNfaGFuZGxlcl9caXZvcl9ucikKIAkvKiBHZXQgcG9pbnRlciB0byB2Y3B1IGFuZCByZWNvcmQgZXhpdCBudW1iZXIuICovCi0JbXRzcHIJU1BSTl9TUFJHMCwgcjQKLQltZnNwcglyNCwgU1BSTl9TUFJHMQorCW10c3ByCVNQUk5fU1BSR19XU0NSQVRDSDAsIHI0CisJbWZzcHIJcjQsIFNQUk5fU1BSR19SVkNQVQogCXN0dwlyNSwgVkNQVV9HUFIocjUpKHI0KQogCXN0dwlyNiwgVkNQVV9HUFIocjYpKHI0KQogCW1mY3RyCXI1CkBAIC05NSw3ICs5NSw3IEBACiAKIAogLyogUmVnaXN0ZXJzOgotICogIFNQUkcwOiBndWVzdCByNAorICogIFNQUkdfU0NSQVRDSDA6IGd1ZXN0IHI0CiAgKiAgcjQ6IHZjcHUgcG9pbnRlcgogICogIHI1OiBLVk0gZXhpdCBudW1iZXIKICAqLwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJc3R3CXIzLCBWQ1BVX0xSKHI0KQogCW1meGVyCXIzCiAJc3R3CXIzLCBWQ1BVX1hFUihyNCkKLQltZnNwcglyMywgU1BSTl9TUFJHMAorCW1mc3ByCXIzLCBTUFJOX1NQUkdfUlNDUkFUQ0gwCiAJc3R3CXIzLCBWQ1BVX0dQUihyNCkocjQpCiAJbWZzcHIJcjMsIFNQUk5fU1JSMAogCXN0dwlyMywgVkNQVV9QQyhyNCkKQEAgLTM3NCw3ICszNzQsNyBAQAogCW10c3ByCVNQUk5fSVZQUiwgcjgKIAogCS8qIFNhdmUgdmNwdSBwb2ludGVyIGZvciB0aGUgZXhjZXB0aW9uIGhhbmRsZXJzLiAqLwotCW10c3ByCVNQUk5fU1BSRzEsIHI0CisJbXRzcHIJU1BSTl9TUFJHX1dWQ1BVLCByNAogCiAJLyogQ2FuJ3Qgc3dpdGNoIHRoZSBzdGFjayBwb2ludGVyIHVudGlsIGFmdGVyIElWUFIgaXMgc3dpdGNoZWQsCiAJICogYmVjYXVzZSBob3N0IGludGVycnVwdCBoYW5kbGVycyB3b3VsZCBnZXQgY29uZnVzZWQuICovCkBAIC0zODQsMTMgKzM4NCwxMyBAQAogCS8qIEhvc3QgaW50ZXJydXB0IGhhbmRsZXJzIG1heSBoYXZlIGNsb2JiZXJlZCB0aGVzZSBndWVzdC1yZWFkYWJsZQogCSAqIFNQUkdzLCBzbyB3ZSBuZWVkIHRvIHJlbG9hZCB0aGVtIGhlcmUgd2l0aCB0aGUgZ3Vlc3QncyB2YWx1ZXMuICovCiAJbHd6CXIzLCBWQ1BVX1NQUkc0KHI0KQotCW10c3ByCVNQUk5fU1BSRzQsIHIzCisJbXRzcHIJU1BSTl9TUFJHNFcsIHIzCiAJbHd6CXIzLCBWQ1BVX1NQUkc1KHI0KQotCW10c3ByCVNQUk5fU1BSRzUsIHIzCisJbXRzcHIJU1BSTl9TUFJHNVcsIHIzCiAJbHd6CXIzLCBWQ1BVX1NQUkc2KHI0KQotCW10c3ByCVNQUk5fU1BSRzYsIHIzCisJbXRzcHIJU1BSTl9TUFJHNlcsIHIzCiAJbHd6CXIzLCBWQ1BVX1NQUkc3KHI0KQotCW10c3ByCVNQUk5fU1BSRzcsIHIzCisJbXRzcHIJU1BSTl9TUFJHN1csIHIzCiAKICNpZmRlZiBDT05GSUdfS1ZNX0VYSVRfVElNSU5HCiAJLyogc2F2ZSBlbnRlciB0aW1lICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2U1MDAuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMC5jCmluZGV4IGQ4MDY3ZmQuLjY0OTQ5ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMC5jCkBAIC02MCw5ICs2MCw2IEBACiAKIAlrdm1wcGNfZTUwMF90bGJfc2V0dXAodmNwdV9lNTAwKTsKIAotCS8qIFVzZSB0aGUgc2FtZSBjb3JlIHZlcnRpb24gYXMgaG9zdCdzICovCi0JdmNwdS0+YXJjaC5wdnIgPSBtZnNwcihTUFJOX1BWUik7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMyLDcgKzEyOSw3IEBACiAJa21lbV9jYWNoZV9mcmVlKGt2bV92Y3B1X2NhY2hlLCB2Y3B1X2U1MDApOwogfQogCi1zdGF0aWMgaW50IGt2bXBwY19lNTAwX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGt2bXBwY19lNTAwX2luaXQodm9pZCkKIHsKIAlpbnQgciwgaTsKIAl1bnNpZ25lZCBsb25nIGl2b3JbM107CkBAIC0xNjAsNyArMTU3LDcgQEAKIAlyZXR1cm4ga3ZtX2luaXQoTlVMTCwgc2l6ZW9mKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwKSwgVEhJU19NT0RVTEUpOwogfQogCi1zdGF0aWMgdm9pZCBrdm1wcGNfZTUwMF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQga3ZtcHBjX2U1MDBfZXhpdCh2b2lkKQogewogCWt2bXBwY19ib29rZV9leGl0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfZW11bGF0ZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX2VtdWxhdGUuYwppbmRleCAzZjc2MDQxLi5iZTk1YjhkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfZW11bGF0ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMKQEAgLTE4MCw2ICsxODAsOSBAQAogCWNhc2UgU1BSTl9NTVVDU1IwOgogCQl2Y3B1LT5hcmNoLmdwcltydF0gPSAwOyBicmVhazsKIAorCWNhc2UgU1BSTl9NTVVDRkc6CisJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IG1mc3ByKFNQUk5fTU1VQ0ZHKTsgYnJlYWs7CisKIAkvKiBleHRyYSBleGNlcHRpb25zICovCiAJY2FzZSBTUFJOX0lWT1IzMjoKIAkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX1VOQVZBSUxdOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5jIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5jCmluZGV4IDBlNzczZmMuLmZiMWUxZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmMKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgIi4uL21tL21tdV9kZWNsLmgiCiAjaW5jbHVkZSAiZTUwMF90bGIuaCIKKyNpbmNsdWRlICJ0cmFjZS5oIgogCiAjZGVmaW5lIHRvX2h0bGIxX2VzZWwoZXNlbCkgKHRsYjFfZW50cnlfbnVtIC0gKGVzZWwpIC0gMSkKIApAQCAtMjI0LDkgKzIyNSw4IEBACiAKIAlrdm1wcGNfZTUwMF9zaGFkb3dfcmVsZWFzZSh2Y3B1X2U1MDAsIHRsYnNlbCwgZXNlbCk7CiAJc3RsYmUtPm1hczEgPSAwOwotCUtWTVRSQUNFXzVEKFNUTEJfSU5WQUwsICZ2Y3B1X2U1MDAtPnZjcHUsIGluZGV4X29mKHRsYnNlbCwgZXNlbCksCi0JCQlzdGxiZS0+bWFzMSwgc3RsYmUtPm1hczIsIHN0bGJlLT5tYXMzLCBzdGxiZS0+bWFzNywKLQkJCWhhbmRsZXIpOworCXRyYWNlX2t2bV9zdGxiX2ludmFsKGluZGV4X29mKHRsYnNlbCwgZXNlbCksIHN0bGJlLT5tYXMxLCBzdGxiZS0+bWFzMiwKKwkJCSAgICAgc3RsYmUtPm1hczMsIHN0bGJlLT5tYXM3KTsKIH0KIAogc3RhdGljIHZvaWQga3ZtcHBjX2U1MDBfdGxiMV9pbnZhbGlkYXRlKHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp2Y3B1X2U1MDAsCkBAIC0yNjksNyArMjY5LDcgQEAKIAl0bGJzZWwgPSAodmNwdV9lNTAwLT5tYXM0ID4+IDI4KSAmIDB4MTsKIAl2aWN0aW0gPSAodGxic2VsID09IDApID8gdGxiMF9nZXRfbmV4dF92aWN0aW0odmNwdV9lNTAwKSA6IDA7CiAJcGlkc2VsID0gKHZjcHVfZTUwMC0+bWFzNCA+PiAxNikgJiAweGY7Ci0JdHNpemVkID0gKHZjcHVfZTUwMC0+bWFzNCA+PiA4KSAmIDB4ZjsKKwl0c2l6ZWQgPSAodmNwdV9lNTAwLT5tYXM0ID4+IDcpICYgMHgxZjsKIAogCXZjcHVfZTUwMC0+bWFzMCA9IE1BUzBfVExCU0VMKHRsYnNlbCkgfCBNQVMwX0VTRUwodmljdGltKQogCQl8IE1BUzBfTlYodmNwdV9lNTAwLT5ndWVzdF90bGJfbnZbdGxic2VsXSk7CkBAIC0zMDksNyArMzA5LDcgQEAKIAl2Y3B1X2U1MDAtPnNoYWRvd19wYWdlc1t0bGJzZWxdW2VzZWxdID0gbmV3X3BhZ2U7CiAKIAkvKiBGb3JjZSBUUz0xIElQUk9UPTAgVFNJWkU9NEtCIGZvciBhbGwgZ3Vlc3QgbWFwcGluZ3MuICovCi0Jc3RsYmUtPm1hczEgPSBNQVMxX1RTSVpFKEJPT0tFX1BBR0VTWl80SykKKwlzdGxiZS0+bWFzMSA9IE1BUzFfVFNJWkUoQk9PSzNFX1BBR0VTWl80SykKIAkJfCBNQVMxX1RJRChnZXRfdGxiX3RpZChndGxiZSkpIHwgTUFTMV9UUyB8IE1BUzFfVkFMSUQ7CiAJc3RsYmUtPm1hczIgPSAoZ3ZhZGRyICYgTUFTMl9FUE4pCiAJCXwgZTUwMF9zaGFkb3dfbWFzMl9hdHRyaWIoZ3RsYmUtPm1hczIsCkBAIC0zMTksOSArMzE5LDggQEAKIAkJCQl2Y3B1X2U1MDAtPnZjcHUuYXJjaC5tc3IgJiBNU1JfUFIpOwogCXN0bGJlLT5tYXM3ID0gKGhwYWRkciA+PiAzMikgJiBNQVM3X1JQTjsKIAotCUtWTVRSQUNFXzVEKFNUTEJfV1JJVEUsICZ2Y3B1X2U1MDAtPnZjcHUsIGluZGV4X29mKHRsYnNlbCwgZXNlbCksCi0JCQlzdGxiZS0+bWFzMSwgc3RsYmUtPm1hczIsIHN0bGJlLT5tYXMzLCBzdGxiZS0+bWFzNywKLQkJCWhhbmRsZXIpOworCXRyYWNlX2t2bV9zdGxiX3dyaXRlKGluZGV4X29mKHRsYnNlbCwgZXNlbCksIHN0bGJlLT5tYXMxLCBzdGxiZS0+bWFzMiwKKwkJCSAgICAgc3RsYmUtPm1hczMsIHN0bGJlLT5tYXM3KTsKIH0KIAogLyogWFhYIG9ubHkgbWFwIHRoZSBvbmUtb25lIGNhc2UsIGZvciBub3cgdXNlIFRMQjAgKi8KQEAgLTUzNSw5ICs1MzQsOCBAQAogCWd0bGJlLT5tYXMzID0gdmNwdV9lNTAwLT5tYXMzOwogCWd0bGJlLT5tYXM3ID0gdmNwdV9lNTAwLT5tYXM3OwogCi0JS1ZNVFJBQ0VfNUQoR1RMQl9XUklURSwgdmNwdSwgdmNwdV9lNTAwLT5tYXMwLAotCQkJZ3RsYmUtPm1hczEsIGd0bGJlLT5tYXMyLCBndGxiZS0+bWFzMywgZ3RsYmUtPm1hczcsCi0JCQloYW5kbGVyKTsKKwl0cmFjZV9rdm1fZ3RsYl93cml0ZSh2Y3B1X2U1MDAtPm1hczAsIGd0bGJlLT5tYXMxLCBndGxiZS0+bWFzMiwKKwkJCSAgICAgZ3RsYmUtPm1hczMsIGd0bGJlLT5tYXM3KTsKIAogCS8qIEludmFsaWRhdGUgc2hhZG93IG1hcHBpbmdzIGZvciB0aGUgYWJvdXQtdG8tYmUtY2xvYmJlcmVkIFRMQkUuICovCiAJaWYgKHRsYmVfaXNfaG9zdF9zYWZlKHZjcHUsIGd0bGJlKSkgewpAQCAtNTQ1LDcgKzU0Myw3IEBACiAJCWNhc2UgMDoKIAkJCS8qIFRMQjAgKi8KIAkJCWd0bGJlLT5tYXMxICY9IH5NQVMxX1RTSVpFKH4wKTsKLQkJCWd0bGJlLT5tYXMxIHw9IE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzRLKTsKKwkJCWd0bGJlLT5tYXMxIHw9IE1BUzFfVFNJWkUoQk9PSzNFX1BBR0VTWl80Syk7CiAKIAkJCXN0bGJzZWwgPSAwOwogCQkJc2VzZWwgPSBrdm1wcGNfZTUwMF9zdGxiZV9tYXAodmNwdV9lNTAwLCAwLCBlc2VsKTsKQEAgLTY3OSwxNCArNjc3LDE0IEBACiAKIAkvKiBJbnNlcnQgbGFyZ2UgaW5pdGlhbCBtYXBwaW5nIGZvciBndWVzdC4gKi8KIAl0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzFdWzBdOwotCXRsYmUtPm1hczEgPSBNQVMxX1ZBTElEIHwgTUFTMV9UU0laRShCT09LRV9QQUdFU1pfMjU2TSk7CisJdGxiZS0+bWFzMSA9IE1BUzFfVkFMSUQgfCBNQVMxX1RTSVpFKEJPT0szRV9QQUdFU1pfMjU2TSk7CiAJdGxiZS0+bWFzMiA9IDA7CiAJdGxiZS0+bWFzMyA9IEU1MDBfVExCX1NVUEVSX1BFUk1fTUFTSzsKIAl0bGJlLT5tYXM3ID0gMDsKIAogCS8qIDRLIG1hcCBmb3Igc2VyaWFsIG91dHB1dC4gVXNlZCBieSBrZXJuZWwgd3JhcHBlci4gKi8KIAl0bGJlID0gJnZjcHVfZTUwMC0+Z3Vlc3RfdGxiWzFdWzFdOwotCXRsYmUtPm1hczEgPSBNQVMxX1ZBTElEIHwgTUFTMV9UU0laRShCT09LRV9QQUdFU1pfNEspOworCXRsYmUtPm1hczEgPSBNQVMxX1ZBTElEIHwgTUFTMV9UU0laRShCT09LM0VfUEFHRVNaXzRLKTsKIAl0bGJlLT5tYXMyID0gKDB4ZTAwMDQ1MDAgJiAweEZGRkZGMDAwKSB8IE1BUzJfSSB8IE1BUzJfRzsKIAl0bGJlLT5tYXMzID0gKDB4ZTAwMDQ1MDAgJiAweEZGRkZGMDAwKSB8IEU1MDBfVExCX1NVUEVSX1BFUk1fTUFTSzsKIAl0bGJlLT5tYXM3ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuaCBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuaAppbmRleCA0NWIwNjRiLi5kMjhlMzAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmgKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5oCkBAIC0xNiw3ICsxNiw3IEBACiAjZGVmaW5lIF9fS1ZNX0U1MDBfVExCX0hfXwogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KLSNpbmNsdWRlIDxhc20vbW11LWZzbC1ib29rZS5oPgorI2luY2x1ZGUgPGFzbS9tbXUtYm9vazNlLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS9rdm1fZTUwMC5oPgogCkBAIC01OSw3ICs1OSw3IEBACiAvKiBUTEIgaGVscGVyIGZ1bmN0aW9ucyAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3RsYl9zaXplKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQogewotCXJldHVybiAodGxiZS0+bWFzMSA+PiA4KSAmIDB4ZjsKKwlyZXR1cm4gKHRsYmUtPm1hczEgPj4gNykgJiAweDFmOwogfQogCiBzdGF0aWMgaW5saW5lIGd2YV90IGdldF90bGJfZWFkZHIoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCkBAIC03MCw3ICs3MCw3IEBACiBzdGF0aWMgaW5saW5lIHU2NCBnZXRfdGxiX2J5dGVzKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQogewogCXVuc2lnbmVkIGludCBwZ3NpemUgPSBnZXRfdGxiX3NpemUodGxiZSk7Ci0JcmV0dXJuIDFVTEwgPDwgMTAgPDwgKHBnc2l6ZSA8PCAxKTsKKwlyZXR1cm4gMVVMTCA8PCAxMCA8PCBwZ3NpemU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZ3ZhX3QgZ2V0X3RsYl9lbmQoY29uc3Qgc3RydWN0IHRsYmUgKnRsYmUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCmluZGV4IGE1NjFkNmUuLjc3MzcxNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KICNpbmNsdWRlIDxhc20vZGlzYXNzZW1ibGUuaD4KICNpbmNsdWRlICJ0aW1pbmcuaCIKKyNpbmNsdWRlICJ0cmFjZS5oIgogCiAjZGVmaW5lIE9QX1RSQVAgMwogCkBAIC0xODcsNyArMTg4LDkgQEAKIAkJCWNhc2UgU1BSTl9TUlIxOgogCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guc3JyMTsgYnJlYWs7CiAJCQljYXNlIFNQUk5fUFZSOgotCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2gucHZyOyBicmVhazsKKwkJCQl2Y3B1LT5hcmNoLmdwcltydF0gPSBtZnNwcihTUFJOX1BWUik7IGJyZWFrOworCQkJY2FzZSBTUFJOX1BJUjoKKwkJCQl2Y3B1LT5hcmNoLmdwcltydF0gPSBtZnNwcihTUFJOX1BJUik7IGJyZWFrOwogCiAJCQkvKiBOb3RlOiBtZnRiIGFuZCBUQlJML1RCV0wgYXJlIHVzZXItYWNjZXNzaWJsZSwgc28KIAkJCSAqIHRoZSBndWVzdCBjYW4gYWx3YXlzIGFjY2VzcyB0aGUgcmVhbCBUQiBhbnl3YXlzLgpAQCAtNDE3LDcgKzQyMCw3IEBACiAJCX0KIAl9CiAKLQlLVk1UUkFDRV8zRChQUENfSU5TVFIsIHZjcHUsIGluc3QsIChpbnQpdmNwdS0+YXJjaC5wYywgZW11bGF0ZWQsIGVudHJ5ZXhpdCk7CisJdHJhY2Vfa3ZtX3BwY19pbnN0cihpbnN0LCB2Y3B1LT5hcmNoLnBjLCBlbXVsYXRlZCk7CiAKIAlpZiAoYWR2YW5jZSkKIAkJdmNwdS0+YXJjaC5wYyArPSA0OyAvKiBBZHZhbmNlIHBhc3QgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24uICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCmluZGV4IDJjZjkxNWUuLjJhNDU1MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jCkBAIC0zMSwyNSArMzEsMTcgQEAKICNpbmNsdWRlICJ0aW1pbmcuaCIKICNpbmNsdWRlICIuLi9tbS9tbXVfZGVjbC5oIgogCisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlICJ0cmFjZS5oIgorCiBnZm5fdCB1bmFsaWFzX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKIHsKIAlyZXR1cm4gZ2ZuOwogfQogCi1pbnQga3ZtX2NwdV9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdikKLXsKLQlyZXR1cm4gISEodi0+YXJjaC5wZW5kaW5nX2V4Y2VwdGlvbnMpOwotfQotCi1pbnQga3ZtX2FyY2hfaW50ZXJydXB0X2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCS8qIGRvIHJlYWwgY2hlY2sgaGVyZSAqLwotCXJldHVybiAxOwotfQotCiBpbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiB7Ci0JcmV0dXJuICEodi0+YXJjaC5tc3IgJiBNU1JfV0UpOworCXJldHVybiAhKHYtPmFyY2gubXNyICYgTVNSX1dFKSB8fCAhISh2LT5hcmNoLnBlbmRpbmdfZXhjZXB0aW9ucyk7CiB9CiAKIApAQCAtMTIyLDEzICsxMTQsMTcgQEAKIHN0YXRpYyB2b2lkIGt2bXBwY19mcmVlX3ZjcHVzKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKSB7Ci0JCWlmIChrdm0tPnZjcHVzW2ldKSB7Ci0JCQlrdm1fYXJjaF92Y3B1X2ZyZWUoa3ZtLT52Y3B1c1tpXSk7Ci0JCQlrdm0tPnZjcHVzW2ldID0gTlVMTDsKLQkJfQotCX0KKwlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pCisJCWt2bV9hcmNoX3ZjcHVfZnJlZSh2Y3B1KTsKKworCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJZm9yIChpID0gMDsgaSA8IGF0b21pY19yZWFkKCZrdm0tPm9ubGluZV92Y3B1cyk7IGkrKykKKwkJa3ZtLT52Y3B1c1tpXSA9IE5VTEw7CisKKwlhdG9taWNfc2V0KCZrdm0tPm9ubGluZV92Y3B1cywgMCk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOwogfQogCiB2b2lkIGt2bV9hcmNoX3N5bmNfZXZlbnRzKHN0cnVjdCBrdm0gKmt2bSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vdHJhY2UuaCBiL2FyY2gvcG93ZXJwYy9rdm0vdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2YyMTlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS90cmFjZS5oCkBAIC0wLDAgKzEsMTA0IEBACisjaWYgIWRlZmluZWQoX1RSQUNFX0tWTV9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVFJBQ0VfS1ZNX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0ga3ZtCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfUEFUSCAuCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSB0cmFjZQorCisvKgorICogVHJhY2Vwb2ludCBmb3IgZ3Vlc3QgbW9kZSBlbnRyeS4KKyAqLworVFJBQ0VfRVZFTlQoa3ZtX3BwY19pbnN0ciwKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgaW5zdCwgdW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgaW50IGVtdWxhdGUpLAorCVRQX0FSR1MoaW5zdCwgcGMsIGVtdWxhdGUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAlpbnN0CQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXBjCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJZW11bGF0ZQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+aW5zdAkJPSBpbnN0OworCQlfX2VudHJ5LT5wYwkJPSBwYzsKKwkJX19lbnRyeS0+ZW11bGF0ZQk9IGVtdWxhdGU7CisJKSwKKworCVRQX3ByaW50aygiaW5zdCAldSBwYyAweCVseCBlbXVsYXRlICV1XG4iLAorCQkgIF9fZW50cnktPmluc3QsIF9fZW50cnktPnBjLCBfX2VudHJ5LT5lbXVsYXRlKQorKTsKKworVFJBQ0VfRVZFTlQoa3ZtX3N0bGJfaW52YWwsCisJVFBfUFJPVE8odW5zaWduZWQgaW50IHN0bGJfaW5kZXgpLAorCVRQX0FSR1Moc3RsYl9pbmRleCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCXN0bGJfaW5kZXgJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+c3RsYl9pbmRleAk9IHN0bGJfaW5kZXg7CisJKSwKKworCVRQX3ByaW50aygic3RsYl9pbmRleCAldSIsIF9fZW50cnktPnN0bGJfaW5kZXgpCispOworCitUUkFDRV9FVkVOVChrdm1fc3RsYl93cml0ZSwKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgdmljdGltLCB1bnNpZ25lZCBpbnQgdGlkLCB1bnNpZ25lZCBpbnQgd29yZDAsCisJCSB1bnNpZ25lZCBpbnQgd29yZDEsIHVuc2lnbmVkIGludCB3b3JkMiksCisJVFBfQVJHUyh2aWN0aW0sIHRpZCwgd29yZDAsIHdvcmQxLCB3b3JkMiksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCXZpY3RpbQkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCXRpZAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCXdvcmQwCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJd29yZDEJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAl3b3JkMgkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dmljdGltCQk9IHZpY3RpbTsKKwkJX19lbnRyeS0+dGlkCQk9IHRpZDsKKwkJX19lbnRyeS0+d29yZDAJCT0gd29yZDA7CisJCV9fZW50cnktPndvcmQxCQk9IHdvcmQxOworCQlfX2VudHJ5LT53b3JkMgkJPSB3b3JkMjsKKwkpLAorCisJVFBfcHJpbnRrKCJ2aWN0aW0gJXUgdGlkICV1IHcwICV1IHcxICV1IHcyICV1IiwKKwkJX19lbnRyeS0+dmljdGltLCBfX2VudHJ5LT50aWQsIF9fZW50cnktPndvcmQwLAorCQlfX2VudHJ5LT53b3JkMSwgX19lbnRyeS0+d29yZDIpCispOworCitUUkFDRV9FVkVOVChrdm1fZ3RsYl93cml0ZSwKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgZ3RsYl9pbmRleCwgdW5zaWduZWQgaW50IHRpZCwgdW5zaWduZWQgaW50IHdvcmQwLAorCQkgdW5zaWduZWQgaW50IHdvcmQxLCB1bnNpZ25lZCBpbnQgd29yZDIpLAorCVRQX0FSR1MoZ3RsYl9pbmRleCwgdGlkLCB3b3JkMCwgd29yZDEsIHdvcmQyKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJZ3RsYl9pbmRleAkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJdGlkCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJd29yZDAJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAl3b3JkMQkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCXdvcmQyCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5ndGxiX2luZGV4CT0gZ3RsYl9pbmRleDsKKwkJX19lbnRyeS0+dGlkCQk9IHRpZDsKKwkJX19lbnRyeS0+d29yZDAJCT0gd29yZDA7CisJCV9fZW50cnktPndvcmQxCQk9IHdvcmQxOworCQlfX2VudHJ5LT53b3JkMgkJPSB3b3JkMjsKKwkpLAorCisJVFBfcHJpbnRrKCJndGxiX2luZGV4ICV1IHRpZCAldSB3MCAldSB3MSAldSB3MiAldSIsCisJCV9fZW50cnktPmd0bGJfaW5kZXgsIF9fZW50cnktPnRpZCwgX19lbnRyeS0+d29yZDAsCisJCV9fZW50cnktPndvcmQxLCBfX2VudHJ5LT53b3JkMikKKyk7CisKKyNlbmRpZiAvKiBfVFJBQ0VfS1ZNX0ggKi8KKworLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vNDB4X21tdS5jIGIvYXJjaC9wb3dlcnBjL21tLzQweF9tbXUuYwppbmRleCAyOTk1NGRjLi5mNWU3YjljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vNDB4X21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS80MHhfbW11LmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiAJd2hpbGUgKHMgPj0gTEFSR0VfUEFHRV9TSVpFXzE2TSkgewogCQlwbWRfdCAqcG1kcDsKLQkJdW5zaWduZWQgbG9uZyB2YWwgPSBwIHwgX1BNRF9TSVpFXzE2TSB8IF9QQUdFX0hXRVhFQyB8IF9QQUdFX0hXV1JJVEU7CisJCXVuc2lnbmVkIGxvbmcgdmFsID0gcCB8IF9QTURfU0laRV8xNk0gfCBfUEFHRV9FWEVDIHwgX1BBR0VfSFdXUklURTsKIAogCQlwbWRwID0gcG1kX29mZnNldChwdWRfb2Zmc2V0KHBnZF9vZmZzZXRfayh2KSwgdiksIHYpOwogCQlwbWRfdmFsKCpwbWRwKyspID0gdmFsOwpAQCAtMTIwLDcgKzEyMCw3IEBACiAKIAl3aGlsZSAocyA+PSBMQVJHRV9QQUdFX1NJWkVfNE0pIHsKIAkJcG1kX3QgKnBtZHA7Ci0JCXVuc2lnbmVkIGxvbmcgdmFsID0gcCB8IF9QTURfU0laRV80TSB8IF9QQUdFX0hXRVhFQyB8IF9QQUdFX0hXV1JJVEU7CisJCXVuc2lnbmVkIGxvbmcgdmFsID0gcCB8IF9QTURfU0laRV80TSB8IF9QQUdFX0VYRUMgfCBfUEFHRV9IV1dSSVRFOwogCiAJCXBtZHAgPSBwbWRfb2Zmc2V0KHB1ZF9vZmZzZXQocGdkX29mZnNldF9rKHYpLCB2KSwgdik7CiAJCXBtZF92YWwoKnBtZHApID0gdmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlCmluZGV4IDNlNjgzNjMuLjZmYjhmYzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDcgQEAKIAkJCQkgICBwZ3RhYmxlXyQoQ09ORklHX1dPUkRfU0laRSkubwogb2JqLSQoQ09ORklHX1BQQ19NTVVfTk9IQVNIKQkrPSBtbXVfY29udGV4dF9ub2hhc2gubyB0bGJfbm9oYXNoLm8gXAogCQkJCSAgIHRsYl9ub2hhc2hfbG93Lm8KK29iai0kKENPTkZJR19QUENfQk9PSzNFKQkrPSB0bGJfbG93XyQoQ09ORklHX1dPUkRfU0laRSllLm8KIG9iai0kKENPTkZJR19QUEM2NCkJCSs9IG1tYXBfNjQubwogaGFzaDY0LSQoQ09ORklHX1BQQ19OQVRJVkUpCTo9IGhhc2hfbmF0aXZlXzY0Lm8KIG9iai0kKENPTkZJR19QUENfU1REX01NVV82NCkJKz0gaGFzaF91dGlsc182NC5vIFwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jCmluZGV4IGJiM2Q2NTkuLmRjOTNlOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJdW5zaWduZWQgbG9uZyB2aXJ0ID0gUEFHRV9PRkZTRVQ7CiAJcGh5c19hZGRyX3QgcGh5cyA9IG1lbXN0YXJ0X2FkZHI7CiAKLQl3aGlsZSAoY2FtW3RsYmNhbV9pbmRleF0gJiYgdGxiY2FtX2luZGV4IDwgQVJSQVlfU0laRShjYW0pKSB7CisJd2hpbGUgKHRsYmNhbV9pbmRleCA8IEFSUkFZX1NJWkUoY2FtKSAmJiBjYW1bdGxiY2FtX2luZGV4XSkgewogCQlzZXR0bGJjYW0odGxiY2FtX2luZGV4LCB2aXJ0LCBwaHlzLCBjYW1bdGxiY2FtX2luZGV4XSwgUEFHRV9LRVJORUxfWCwgMCk7CiAJCXZpcnQgKz0gY2FtW3RsYmNhbV9pbmRleF07CiAJCXBoeXMgKz0gY2FtW3RsYmNhbV9pbmRleF07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfMzIuUyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd18zMi5TCmluZGV4IDE0YWY4Y2UuLmIxM2Q1ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd18zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd18zMi5TCkBAIC00MCw3ICs0MCw3IEBACiAgKiBUaGUgYWRkcmVzcyBpcyBpbiByNCwgYW5kIHIzIGNvbnRhaW5zIGFuIGFjY2VzcyBmbGFnOgogICogX1BBR0VfUlcgKDB4NDAwKSBpZiBhIHdyaXRlLgogICogcjkgY29udGFpbnMgdGhlIFNSUjEgdmFsdWUsIGZyb20gd2hpY2ggd2UgdXNlIHRoZSBNU1JfUFIgYml0LgotICogU1BSRzMgY29udGFpbnMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgdGFzaydzIHRocmVhZC4KKyAqIFNQUkdfVEhSRUFEIGNvbnRhaW5zIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IHRhc2sncyB0aHJlYWQuCiAgKgogICogUmV0dXJucyB0byB0aGUgY2FsbGVyIGlmIHRoZSBhY2Nlc3MgaXMgaWxsZWdhbCBvciB0aGVyZSBpcyBubwogICogbWFwcGluZyBmb3IgdGhlIGFkZHJlc3MuICBPdGhlcndpc2UgaXQgcGxhY2VzIGFuIGFwcHJvcHJpYXRlIFBURQpAQCAtNjgsNyArNjgsNyBAQAogCS8qIEdldCBQVEUgKGxpbnV4LXN0eWxlKSBhbmQgY2hlY2sgYWNjZXNzICovCiAJbGlzCXIwLEtFUk5FTEJBU0VAaAkJLyogY2hlY2sgaWYga2VybmVsIGFkZHJlc3MgKi8KIAljbXBsdwkwLHI0LHIwCi0JbWZzcHIJcjgsU1BSTl9TUFJHMwkJLyogY3VycmVudCB0YXNrJ3MgVEhSRUFEIChwaHlzKSAqLworCW1mc3ByCXI4LFNQUk5fU1BSR19USFJFQUQJLyogY3VycmVudCB0YXNrJ3MgVEhSRUFEIChwaHlzKSAqLwogCW9yaQlyMyxyMyxfUEFHRV9VU0VSfF9QQUdFX1BSRVNFTlQgLyogdGVzdCBsb3cgYWRkcmVzc2VzIGFzIHVzZXIgKi8KIAlsd3oJcjUsUEdESVIocjgpCQkvKiB2aXJ0IHBhZ2UtdGFibGUgcm9vdCAqLwogCWJsdCsJMTEyZgkJCS8qIGFzc3VtZSB1c2VyIG1vcmUgbGlrZWx5ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCmluZGV4IGM0NmVmMmYuLjkwZGY2ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCkBAIC01Nyw4ICs1NywxMCBAQAogI2RlZmluZSBIVUdFUFRFX0NBQ0hFX05BTUUocHNpemUpCShodWdlX3BndGFibGVfY2FjaGVfbmFtZVtwc2l6ZV0pCiAKIHN0YXRpYyBjb25zdCBjaGFyICpodWdlX3BndGFibGVfY2FjaGVfbmFtZVtNTVVfUEFHRV9DT1VOVF0gPSB7Ci0JInVudXNlZF80SyIsICJodWdlcHRlX2NhY2hlXzY0SyIsICJ1bnVzZWRfNjRLX0FQIiwKLQkiaHVnZXB0ZV9jYWNoZV8xTSIsICJodWdlcHRlX2NhY2hlXzE2TSIsICJodWdlcHRlX2NhY2hlXzE2RyIKKwlbTU1VX1BBR0VfNjRLXQk9ICJodWdlcHRlX2NhY2hlXzY0SyIsCisJW01NVV9QQUdFXzFNXQk9ICJodWdlcHRlX2NhY2hlXzFNIiwKKwlbTU1VX1BBR0VfMTZNXQk9ICJodWdlcHRlX2NhY2hlXzE2TSIsCisJW01NVV9QQUdFXzE2R10JPSAiaHVnZXB0ZV9jYWNoZV8xNkciLAogfTsKIAogLyogRmxhZyB0byBtYXJrIGh1Z2UgUEQgcG9pbnRlcnMuICBUaGlzIG1lYW5zIHBtZF9iYWQoKSBhbmQgcHVkX2JhZCgpCkBAIC03MDAsNiArNzAyLDggQEAKIAkJaWYgKG1tdV9odWdlX3BzaXplc1twc2l6ZV0gfHwKIAkJICAgbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0ID09IFBBR0VfU0hJRlQpCiAJCQlyZXR1cm47CisJCWlmIChXQVJOX09OKEhVR0VQVEVfQ0FDSEVfTkFNRShwc2l6ZSkgPT0gTlVMTCkpCisJCQlyZXR1cm47CiAJCWh1Z2V0bGJfYWRkX2hzdGF0ZShtbXVfcHNpemVfZGVmc1twc2l6ZV0uc2hpZnQgLSBQQUdFX1NISUZUKTsKIAogCQlzd2l0Y2ggKG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKaW5kZXggM2RlNmEwZDkuLjNlZjUwODQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYwpAQCAtNTQsOCArNTQsNiBAQAogI2VuZGlmCiAjZGVmaW5lIE1BWF9MT1dfTUVNCUNPTkZJR19MT1dNRU1fU0laRQogCi1ERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOwotCiBwaHlzX2FkZHJfdCB0b3RhbF9tZW1vcnk7CiBwaHlzX2FkZHJfdCB0b3RhbF9sb3dtZW07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCmluZGV4IDY4YTgyMWEuLjMxNTgyMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwpAQCAtMjA1LDYgKzIwNSw0NyBAQAogCXJldHVybiAwOwogfQogCisvKiBPbiBoYXNoLWJhc2VkIENQVXMsIHRoZSB2bWVtbWFwIGlzIGJvbHRlZCBpbiB0aGUgaGFzaCB0YWJsZS4KKyAqCisgKiBPbiBCb29rM0UgQ1BVcywgdGhlIHZtZW1tYXAgaXMgY3VycmVudGx5IG1hcHBlZCBpbiB0aGUgdG9wIGhhbGYgb2YKKyAqIHRoZSB2bWFsbG9jIHNwYWNlIHVzaW5nIG5vcm1hbCBwYWdlIHRhYmxlcywgdGhvdWdoIHRoZSBzaXplIG9mCisgKiBwYWdlcyBlbmNvZGVkIGluIHRoZSBQVEVzIGNhbiBiZSBkaWZmZXJlbnQKKyAqLworCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKK3N0YXRpYyB2b2lkIF9fbWVtaW5pdCB2bWVtbWFwX2NyZWF0ZV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBwaHlzKQoreworCS8qIENyZWF0ZSBhIFBURSBlbmNvZGluZyB3aXRob3V0IHBhZ2Ugc2l6ZSAqLworCXVuc2lnbmVkIGxvbmcgaSwgZmxhZ3MgPSBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfAorCQlfUEFHRV9LRVJORUxfUlc7CisKKwkvKiBQVEVzIG9ubHkgY29udGFpbiBwYWdlIHNpemUgZW5jb2RpbmdzIHVwIHRvIDMyTSAqLworCUJVR19PTihtbXVfcHNpemVfZGVmc1ttbXVfdm1lbW1hcF9wc2l6ZV0uZW5jID4gMHhmKTsKKworCS8qIEVuY29kZSB0aGUgc2l6ZSBpbiB0aGUgUFRFICovCisJZmxhZ3MgfD0gbW11X3BzaXplX2RlZnNbbW11X3ZtZW1tYXBfcHNpemVdLmVuYyA8PCA4OworCisJLyogRm9yIGVhY2ggUFRFIGZvciB0aGF0IGFyZWEsIG1hcCB0aGluZ3MuIE5vdGUgdGhhdCB3ZSBkb24ndAorCSAqIGluY3JlbWVudCBwaHlzIGJlY2F1c2UgYWxsIFBURXMgYXJlIG9mIHRoZSBsYXJnZSBzaXplIGFuZAorCSAqIHRodXMgbXVzdCBoYXZlIHRoZSBsb3cgYml0cyBjbGVhcgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwYWdlX3NpemU7IGkgKz0gUEFHRV9TSVpFKQorCQlCVUdfT04obWFwX2tlcm5lbF9wYWdlKHN0YXJ0ICsgaSwgcGh5cywgZmxhZ3MpKTsKK30KKyNlbHNlIC8qIENPTkZJR19QUENfQk9PSzNFICovCitzdGF0aWMgdm9pZCBfX21lbWluaXQgdm1lbW1hcF9jcmVhdGVfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGh5cykKK3sKKwlpbnQgIG1hcHBlZCA9IGh0YWJfYm9sdF9tYXBwaW5nKHN0YXJ0LCBzdGFydCArIHBhZ2Vfc2l6ZSwgcGh5cywKKwkJCQkJUEFHRV9LRVJORUwsIG1tdV92bWVtbWFwX3BzaXplLAorCQkJCQltbXVfa2VybmVsX3NzaXplKTsKKwlCVUdfT04obWFwcGVkIDwgMCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0UgKi8KKwogaW50IF9fbWVtaW5pdCB2bWVtbWFwX3BvcHVsYXRlKHN0cnVjdCBwYWdlICpzdGFydF9wYWdlLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGludCBub2RlKQogewpAQCAtMjE1LDggKzI1NiwxMSBAQAogCS8qIEFsaWduIHRvIHRoZSBwYWdlIHNpemUgb2YgdGhlIGxpbmVhciBtYXBwaW5nLiAqLwogCXN0YXJ0ID0gX0FMSUdOX0RPV04oc3RhcnQsIHBhZ2Vfc2l6ZSk7CiAKKwlwcl9kZWJ1Zygidm1lbW1hcF9wb3B1bGF0ZSBwYWdlICVwLCAlbGQgcGFnZXMsIG5vZGUgJWRcbiIsCisJCSBzdGFydF9wYWdlLCBucl9wYWdlcywgbm9kZSk7CisJcHJfZGVidWcoIiAtPiBtYXAgJWx4Li4lbHhcbiIsIHN0YXJ0LCBlbmQpOworCiAJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBwYWdlX3NpemUpIHsKLQkJaW50IG1hcHBlZDsKIAkJdm9pZCAqcDsKIAogCQlpZiAodm1lbW1hcF9wb3B1bGF0ZWQoc3RhcnQsIHBhZ2Vfc2l6ZSkpCkBAIC0yMjYsMTMgKzI3MCwxMCBAQAogCQlpZiAoIXApCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCQlwcl9kZWJ1Zygidm1lbW1hcCAlMDhseCBhbGxvY2F0ZWQgYXQgJXAsIHBoeXNpY2FsICUwOGx4LlxuIiwKLQkJCXN0YXJ0LCBwLCBfX3BhKHApKTsKKwkJcHJfZGVidWcoIiAgICAgICogJTAxNmx4Li4lMDE2bHggYWxsb2NhdGVkIGF0ICVwXG4iLAorCQkJIHN0YXJ0LCBzdGFydCArIHBhZ2Vfc2l6ZSwgcCk7CiAKLQkJbWFwcGVkID0gaHRhYl9ib2x0X21hcHBpbmcoc3RhcnQsIHN0YXJ0ICsgcGFnZV9zaXplLCBfX3BhKHApLAotCQkJCQkgICBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKSwKLQkJCQkJICAgbW11X3ZtZW1tYXBfcHNpemUsIG1tdV9rZXJuZWxfc3NpemUpOwotCQlCVUdfT04obWFwcGVkIDwgMCk7CisJCXZtZW1tYXBfY3JlYXRlX21hcHBpbmcoc3RhcnQsIHBhZ2Vfc2l6ZSwgX19wYShwKSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKaW5kZXggYjFhNzI3ZC4uYzJmOTNkYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwpAQCAtMjUsMTAgKzI1LDIwIEBACiAgKiAgICAgYWxzbyBjbGVhciBtbS0+Y3B1X3ZtX21hc2sgYml0cyB3aGVuIHByb2Nlc3NlcyBhcmUgbWlncmF0ZWQKICAqLwogCi0jdW5kZWYgREVCVUcKLSNkZWZpbmUgREVCVUdfU1RFQUxfT05MWQotI3VuZGVmIERFQlVHX01BUF9DT05TSVNURU5DWQotLyojZGVmaW5lIERFQlVHX0NMQU1QX0xBU1RfQ09OVEVYVCAgIDE1ICovCisjZGVmaW5lIERFQlVHX01BUF9DT05TSVNURU5DWQorI2RlZmluZSBERUJVR19DTEFNUF9MQVNUX0NPTlRFWFQgICAzMQorLy8jZGVmaW5lIERFQlVHX0hBUkRFUgorCisvKiBXZSBkb24ndCB1c2UgREVCVUcgYmVjYXVzZSBpdCB0ZW5kcyB0byBiZSBjb21waWxlZCBpbiBhbHdheXMgbm93YWRheXMKKyAqIGFuZCB0aGlzIHdvdWxkIGdlbmVyYXRlIHdheSB0b28gbXVjaCBvdXRwdXQKKyAqLworI2lmZGVmIERFQlVHX0hBUkRFUgorI2RlZmluZSBwcl9oYXJkKGFyZ3MuLi4pCXByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCisjZGVmaW5lIHByX2hhcmRjb250KGFyZ3MuLi4pCXByaW50ayhLRVJOX0NPTlQgYXJncykKKyNlbHNlCisjZGVmaW5lIHByX2hhcmQoYXJncy4uLikJZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHByX2hhcmRjb250KGFyZ3MuLi4pCWRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtNzEsNyArODEsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzdGVhbF9jb250ZXh0X3NtcCh1bnNpZ25lZCBpbnQgaWQpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0JdW5zaWduZWQgaW50IGNwdSwgbWF4OworCXVuc2lnbmVkIGludCBjcHUsIG1heCwgaTsKIAogCW1heCA9IGxhc3RfY29udGV4dCAtIGZpcnN0X2NvbnRleHQ7CiAKQEAgLTg5LDE1ICs5OSwyMiBAQAogCQkJCWlkID0gZmlyc3RfY29udGV4dDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXByX2RldmVsKCJbJWRdIHN0ZWFsIGNvbnRleHQgJWQgZnJvbSBtbSBAJXBcbiIsCi0JCQkgc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZCwgbW0pOworCQlwcl9oYXJkY29udCgiIHwgc3RlYWwgJWQgZnJvbSAweCVwIiwgaWQsIG1tKTsKIAogCQkvKiBNYXJrIHRoaXMgbW0gaGFzIGhhdmluZyBubyBjb250ZXh0IGFueW1vcmUgKi8KIAkJbW0tPmNvbnRleHQuaWQgPSBNTVVfTk9fQ09OVEVYVDsKIAotCQkvKiBNYXJrIGl0IHN0YWxlIG9uIGFsbCBDUFVzIHRoYXQgdXNlZCB0aGlzIG1tICovCi0JCWZvcl9lYWNoX2NwdShjcHUsIG1tX2NwdW1hc2sobW0pKQotCQkJX19zZXRfYml0KGlkLCBzdGFsZV9tYXBbY3B1XSk7CisJCS8qIE1hcmsgaXQgc3RhbGUgb24gYWxsIENQVXMgdGhhdCB1c2VkIHRoaXMgbW0uIEZvciB0aHJlYWRlZAorCQkgKiBpbXBsZW1lbnRhdGlvbnMsIHdlIHNldCBpdCBvbiBhbGwgdGhyZWFkcyBvbiBlYWNoIGNvcmUKKwkJICogcmVwcmVzZW50ZWQgaW4gdGhlIG1hc2suIEEgZnV0dXJlIGltcGxlbWVudGF0aW9uIHdpbGwgdXNlCisJCSAqIGEgY29yZSBtYXAgaW5zdGVhZCBidXQgdGhpcyB3aWxsIGRvIGZvciBub3cuCisJCSAqLworCQlmb3JfZWFjaF9jcHUoY3B1LCBtbV9jcHVtYXNrKG1tKSkgeworCQkJZm9yIChpID0gY3B1X2ZpcnN0X3RocmVhZF9pbl9jb3JlKGNwdSk7CisJCQkgICAgIGkgPD0gY3B1X2xhc3RfdGhyZWFkX2luX2NvcmUoY3B1KTsgaSsrKQorCQkJCV9fc2V0X2JpdChpZCwgc3RhbGVfbWFwW2ldKTsKKwkJCWNwdSA9IGkgLSAxOworCQl9CiAJCXJldHVybiBpZDsKIAl9CiAKQEAgLTEyNiw3ICsxNDMsNyBAQAogCS8qIFBpY2sgdXAgdGhlIHZpY3RpbSBtbSAqLwogCW1tID0gY29udGV4dF9tbVtpZF07CiAKLQlwcl9kZXZlbCgiWyVkXSBzdGVhbCBjb250ZXh0ICVkIGZyb20gbW0gQCVwXG4iLCBjcHUsIGlkLCBtbSk7CisJcHJfaGFyZGNvbnQoIiB8IHN0ZWFsICVkIGZyb20gMHglcCIsIGlkLCBtbSk7CiAKIAkvKiBGbHVzaCB0aGUgVExCIGZvciB0aGF0IGNvbnRleHQgKi8KIAlsb2NhbF9mbHVzaF90bGJfbW0obW0pOwpAQCAtMTczLDI1ICsxOTAsMjAgQEAKIAogdm9pZCBzd2l0Y2hfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCkKIHsKLQl1bnNpZ25lZCBpbnQgaWQsIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBpbnQgaSwgaWQsIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl1bnNpZ25lZCBsb25nICptYXA7CiAKIAkvKiBObyBsb2NrbGVzcyBmYXN0IHBhdGggLi4geWV0ICovCiAJc3Bpbl9sb2NrKCZjb250ZXh0X2xvY2spOwogCi0jaWZuZGVmIERFQlVHX1NURUFMX09OTFkKLQlwcl9kZXZlbCgiWyVkXSBhY3RpdmF0aW5nIGNvbnRleHQgZm9yIG1tIEAlcCwgYWN0aXZlPSVkLCBpZD0lZFxuIiwKLQkJIGNwdSwgbmV4dCwgbmV4dC0+Y29udGV4dC5hY3RpdmUsIG5leHQtPmNvbnRleHQuaWQpOwotI2VuZGlmCisJcHJfaGFyZCgiWyVkXSBhY3RpdmF0aW5nIGNvbnRleHQgZm9yIG1tIEAlcCwgYWN0aXZlPSVkLCBpZD0lZCIsCisJCWNwdSwgbmV4dCwgbmV4dC0+Y29udGV4dC5hY3RpdmUsIG5leHQtPmNvbnRleHQuaWQpOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIE1hcmsgdXMgYWN0aXZlIGFuZCB0aGUgcHJldmlvdXMgb25lIG5vdCBhbnltb3JlICovCiAJbmV4dC0+Y29udGV4dC5hY3RpdmUrKzsKIAlpZiAocHJldikgewotI2lmbmRlZiBERUJVR19TVEVBTF9PTkxZCi0JCXByX2RldmVsKCIgb2xkIGNvbnRleHQgJXAgYWN0aXZlIHdhczogJWRcbiIsCi0JCQkgcHJldiwgcHJldi0+Y29udGV4dC5hY3RpdmUpOwotI2VuZGlmCisJCXByX2hhcmRjb250KCIgKG9sZD0weCVwIGE9JWQpIiwgcHJldiwgcHJldi0+Y29udGV4dC5hY3RpdmUpOwogCQlXQVJOX09OKHByZXYtPmNvbnRleHQuYWN0aXZlIDwgMSk7CiAJCXByZXYtPmNvbnRleHQuYWN0aXZlLS07CiAJfQpAQCAtMjAxLDggKzIxMywxNCBAQAogCiAJLyogSWYgd2UgYWxyZWFkeSBoYXZlIGEgdmFsaWQgYXNzaWduZWQgY29udGV4dCwgc2tpcCBhbGwgdGhhdCAqLwogCWlkID0gbmV4dC0+Y29udGV4dC5pZDsKLQlpZiAobGlrZWx5KGlkICE9IE1NVV9OT19DT05URVhUKSkKKwlpZiAobGlrZWx5KGlkICE9IE1NVV9OT19DT05URVhUKSkgeworI2lmZGVmIERFQlVHX01BUF9DT05TSVNURU5DWQorCQlpZiAoY29udGV4dF9tbVtpZF0gIT0gbmV4dCkKKwkJCXByX2VycigiTU1VOiBtbSAweCVwIGhhcyBpZCAlZCBidXQgY29udGV4dF9tbVslZF0gc2F5cyAweCVwXG4iLAorCQkJICAgICAgIG5leHQsIGlkLCBpZCwgY29udGV4dF9tbVtpZF0pOworI2VuZGlmCiAJCWdvdG8gY3R4dF9vazsKKwl9CiAKIAkvKiBXZSByZWFsbHkgZG9uJ3QgaGF2ZSBhIGNvbnRleHQsIGxldCdzIHRyeSB0byBhY3F1aXJlIG9uZSAqLwogCWlkID0gbmV4dF9jb250ZXh0OwpAQCAtMjM1LDExICsyNTMsNyBAQAogCW5leHRfY29udGV4dCA9IGlkICsgMTsKIAljb250ZXh0X21tW2lkXSA9IG5leHQ7CiAJbmV4dC0+Y29udGV4dC5pZCA9IGlkOwotCi0jaWZuZGVmIERFQlVHX1NURUFMX09OTFkKLQlwcl9kZXZlbCgiWyVkXSBwaWNrZWQgdXAgbmV3IGlkICVkLCBucmYgaXMgbm93ICVkXG4iLAotCQkgY3B1LCBpZCwgbnJfZnJlZV9jb250ZXh0cyk7Ci0jZW5kaWYKKwlwcl9oYXJkY29udCgiIHwgbmV3IGlkPSVkLG5yZj0lZCIsIGlkLCBucl9mcmVlX2NvbnRleHRzKTsKIAogCWNvbnRleHRfY2hlY2tfbWFwKCk7CiAgY3R4dF9vazoKQEAgLTI0OCwxNSArMjYyLDIxIEBACiAJICogbG9jYWwgVExCIGZvciBpdCBhbmQgdW5tYXJrIGl0IGJlZm9yZSB3ZSB1c2UgaXQKIAkgKi8KIAlpZiAodGVzdF9iaXQoaWQsIHN0YWxlX21hcFtjcHVdKSkgewotCQlwcl9kZXZlbCgiWyVkXSBmbHVzaGluZyBzdGFsZSBjb250ZXh0ICVkIGZvciBtbSBAJXAgIVxuIiwKLQkJCSBjcHUsIGlkLCBuZXh0KTsKKwkJcHJfaGFyZGNvbnQoIiB8IHN0YWxlIGZsdXNoICVkIFslZC4uJWRdIiwKKwkJCSAgICBpZCwgY3B1X2ZpcnN0X3RocmVhZF9pbl9jb3JlKGNwdSksCisJCQkgICAgY3B1X2xhc3RfdGhyZWFkX2luX2NvcmUoY3B1KSk7CisKIAkJbG9jYWxfZmx1c2hfdGxiX21tKG5leHQpOwogCiAJCS8qIFhYWCBUaGlzIGNsZWFyIHNob3VsZCB1bHRpbWF0ZWx5IGJlIHBhcnQgb2YgbG9jYWxfZmx1c2hfdGxiX21tICovCi0JCV9fY2xlYXJfYml0KGlkLCBzdGFsZV9tYXBbY3B1XSk7CisJCWZvciAoaSA9IGNwdV9maXJzdF90aHJlYWRfaW5fY29yZShjcHUpOworCQkgICAgIGkgPD0gY3B1X2xhc3RfdGhyZWFkX2luX2NvcmUoY3B1KTsgaSsrKSB7CisJCQlfX2NsZWFyX2JpdChpZCwgc3RhbGVfbWFwW2ldKTsKKwkJfQogCX0KIAogCS8qIEZsaWNrIHRoZSBNTVUgYW5kIHJlbGVhc2UgbG9jayAqLworCXByX2hhcmRjb250KCIgLT4gJWRcbiIsIGlkKTsKIAlzZXRfY29udGV4dChpZCwgbmV4dC0+cGdkKTsKIAlzcGluX3VubG9jaygmY29udGV4dF9sb2NrKTsKIH0KQEAgLTI2Niw2ICsyODYsOCBAQAogICovCiBpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogeworCXByX2hhcmQoImluaXRpbmcgY29udGV4dCBmb3IgbW0gQCVwXG4iLCBtbSk7CisKIAltbS0+Y29udGV4dC5pZCA9IE1NVV9OT19DT05URVhUOwogCW1tLT5jb250ZXh0LmFjdGl2ZSA9IDA7CiAKQEAgLTMwNSw3ICszMjcsOSBAQAogCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBpbnQpKGxvbmcpaGNwdTsKLQorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKyNlbmRpZgogCS8qIFdlIGRvbid0IHRvdWNoIENQVSAwIG1hcCwgaXQncyBhbGxvY2F0ZWQgYXQgYWJvb3QgYW5kIGtlcHQKIAkgKiBhcm91bmQgZm9yZXZlcgogCSAqLwpAQCAtMzI0LDggKzM0OCwxNiBAQAogCQlwcl9kZXZlbCgiTU1VOiBGcmVlaW5nIHN0YWxlIGNvbnRleHQgbWFwIGZvciBDUFUgJWRcbiIsIGNwdSk7CiAJCWtmcmVlKHN0YWxlX21hcFtjcHVdKTsKIAkJc3RhbGVfbWFwW2NwdV0gPSBOVUxMOwotCQlicmVhazsKLSNlbmRpZgorCisJCS8qIFdlIGFsc28gY2xlYXIgdGhlIGNwdV92bV9tYXNrIGJpdHMgb2YgQ1BVcyBnb2luZyBhd2F5ICovCisJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJCWZvcl9lYWNoX3Byb2Nlc3MocCkgeworCQkJaWYgKHAtPm1tKQorCQkJCWNwdV9tYXNrX2NsZWFyX2NwdShjcHUsIG1tX2NwdW1hc2socC0+bW0pKTsKKwkJfQorCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJYnJlYWs7CisjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAJfQogCXJldHVybiBOT1RJRllfT0s7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaCBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfZGVjbC5oCmluZGV4IGQxZjljNjIuLmQyZTUzMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfZGVjbC5oCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfZGVjbC5oCkBAIC0zNiwyMSArMzYsMzcgQEAKIHsKIAlhc20gdm9sYXRpbGUgKCJzeW5jOyB0bGJpYTsgaXN5bmMiIDogOiA6ICJtZW1vcnkiKTsKIH0KKyNkZWZpbmUgX3RsYmlsX3BpZF9ub2luZChwaWQpCV90bGJpbF9waWQocGlkKQorCiAjZWxzZSAvKiBDT05GSUdfNDB4IHx8IENPTkZJR184eHggKi8KIGV4dGVybiB2b2lkIF90bGJpbF9hbGwodm9pZCk7CiBleHRlcm4gdm9pZCBfdGxiaWxfcGlkKHVuc2lnbmVkIGludCBwaWQpOworI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCitleHRlcm4gdm9pZCBfdGxiaWxfcGlkX25vaW5kKHVuc2lnbmVkIGludCBwaWQpOworI2Vsc2UKKyNkZWZpbmUgX3RsYmlsX3BpZF9ub2luZChwaWQpCV90bGJpbF9waWQocGlkKQorI2VuZGlmCiAjZW5kaWYgLyogIShDT05GSUdfNDB4IHx8IENPTkZJR184eHgpICovCiAKIC8qCiAgKiBPbiA4eHgsIHdlIGRpcmVjdGx5IGlubGluZSB0bGJpZSwgb24gb3RoZXJzLCBpdCdzIGV4dGVybgogICovCiAjaWZkZWYgQ09ORklHXzh4eAotc3RhdGljIGlubGluZSB2b2lkIF90bGJpbF92YSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBwaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgX3RsYmlsX3ZhKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50IHBpZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHRzaXplLCB1bnNpZ25lZCBpbnQgaW5kKQogewogCWFzbSB2b2xhdGlsZSAoInRsYmllICUwOyBzeW5jIiA6IDogInIiIChhZGRyZXNzKSA6ICJtZW1vcnkiKTsKIH0KLSNlbHNlIC8qIENPTkZJR184eHggKi8KLWV4dGVybiB2b2lkIF90bGJpbF92YSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBwaWQpOworI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX0JPT0szRSkKK2V4dGVybiB2b2lkIF90bGJpbF92YSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBwaWQsCisJCSAgICAgIHVuc2lnbmVkIGludCB0c2l6ZSwgdW5zaWduZWQgaW50IGluZCk7CisjZWxzZQorZXh0ZXJuIHZvaWQgX190bGJpbF92YSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBwaWQpOworc3RhdGljIGlubGluZSB2b2lkIF90bGJpbF92YSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBwaWQsCisJCQkgICAgIHVuc2lnbmVkIGludCB0c2l6ZSwgdW5zaWduZWQgaW50IGluZCkKK3sKKwlfX3RsYmlsX3ZhKGFkZHJlc3MsIHBpZCk7Cit9CiAjZW5kaWYgLyogQ09OSUZHXzh4eCAqLwogCiAvKgpAQCAtNTgsMTAgKzc0LDE2IEBACiAgKiBpbXBsZW1lbnRhdGlvbi4gV2hlbiB0aGF0IGJlY29tZXMgdGhlIGNhc2UsIHRoaXMgd2lsbCBiZQogICogYW4gZXh0ZXJuLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX3RsYml2YXhfYmNhc3QodW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgcGlkKQorI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCitleHRlcm4gdm9pZCBfdGxiaXZheF9iY2FzdCh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBwaWQsCisJCQkgICB1bnNpZ25lZCBpbnQgdHNpemUsIHVuc2lnbmVkIGludCBpbmQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfdGxiaXZheF9iY2FzdCh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBwaWQsCisJCQkJICAgdW5zaWduZWQgaW50IHRzaXplLCB1bnNpZ25lZCBpbnQgaW5kKQogewogCUJVRygpOwogfQorI2VuZGlmCiAKICNlbHNlIC8qIENPTkZJR19QUENfTU1VX05PSEFTSCAqLwogCkBAIC05OSw3ICsxMjEsMTIgQEAKIHN0cnVjdCBoYXNoX3B0ZTsKIGV4dGVybiBzdHJ1Y3QgaGFzaF9wdGUgKkhhc2gsICpIYXNoX2VuZDsKIGV4dGVybiB1bnNpZ25lZCBsb25nIEhhc2hfc2l6ZSwgSGFzaF9tYXNrOwotI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KKworI2lmZGVmIENPTkZJR19QUEM2NAorZXh0ZXJuIGludCBtYXBfa2VybmVsX3BhZ2UodW5zaWduZWQgbG9uZyBlYSwgdW5zaWduZWQgbG9uZyBwYSwgaW50IGZsYWdzKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9yZW1hcF9ib3Q7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX21heF9sb3dfbWVtb3J5OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMKaW5kZXggNjI3NzY3ZC4uODNmMTU1MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jCkBAIC0zMCw2ICszMCwxNiBAQAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KIAorREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKKworI2lmZGVmIENPTkZJR19TTVAKKworLyoKKyAqIEhhbmRsZSBiYXRjaGluZyBvZiBwYWdlIHRhYmxlIGZyZWVpbmcgb24gU01QLiBQYWdlIHRhYmxlcyBhcmUKKyAqIHF1ZXVlZCB1cCBhbmQgc2VuZCB0byBiZSBmcmVlZCBsYXRlciBieSBSQ1UgaW4gb3JkZXIgdG8gYXZvaWQKKyAqIGZyZWVpbmcgYSBwYWdlIHRhYmxlIHBhZ2UgdGhhdCBpcyBiZWluZyB3YWxrZWQgd2l0aG91dCBsb2NrcworICovCisKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHRlX2ZyZWVsaXN0X2JhdGNoICosIHB0ZV9mcmVlbGlzdF9jdXIpOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcHRlX2ZyZWVsaXN0X2ZvcmNlZF9mcmVlOwogCkBAIC0xMTYsMjcgKzEyNiw3IEBACiAJKmJhdGNocCA9IE5VTEw7CiB9CiAKLS8qCi0gKiBIYW5kbGUgaS9kIGNhY2hlIGZsdXNoaW5nLCBjYWxsZWQgZnJvbSBzZXRfcHRlX2F0KCkgb3IgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKCkKLSAqLwotc3RhdGljIHB0ZV90IGRvX2RjYWNoZV9pY2FjaGVfY29oZXJlbmN5KHB0ZV90IHB0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCWlmICh1bmxpa2VseSghcGZuX3ZhbGlkKHBmbikpKQotCQlyZXR1cm4gcHRlOwotCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCi0JaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkgJiYgIXRlc3RfYml0KFBHX2FyY2hfMSwgJnBhZ2UtPmZsYWdzKSkgewotCQlwcl9kZXZlbCgiZG9fZGNhY2hlX2ljYWNoZV9jb2hlcmVuY3kuLi4gZmx1c2hpbmdcbiIpOwotCQlmbHVzaF9kY2FjaGVfaWNhY2hlX3BhZ2UocGFnZSk7Ci0JCXNldF9iaXQoUEdfYXJjaF8xLCAmcGFnZS0+ZmxhZ3MpOwotCX0KLQllbHNlCi0JCXByX2RldmVsKCJkb19kY2FjaGVfaWNhY2hlX2NvaGVyZW5jeS4uLiBhbHJlYWR5IGNsZWFuXG4iKTsKLQlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfSFdFWEVDKTsKLX0KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2V4ZWNfZmF1bHQodm9pZCkKIHsKQEAgLTE0NSw0OSArMTM1LDEzOSBAQAogCiAvKiBXZSBvbmx5IHRyeSB0byBkbyBpL2QgY2FjaGUgY29oZXJlbmN5IG9uIHN0dWZmIHRoYXQgbG9va3MgbGlrZQogICogcmVhc29uYWJseSAibm9ybWFsIiBQVEVzLiBXZSBjdXJyZW50bHkgcmVxdWlyZSBhIFBURSB0byBiZSBwcmVzZW50Ci0gKiBhbmQgd2UgYXZvaWQgX1BBR0VfU1BFQ0lBTCBhbmQgX1BBR0VfTk9fQ0FDSEUKKyAqIGFuZCB3ZSBhdm9pZCBfUEFHRV9TUEVDSUFMIGFuZCBfUEFHRV9OT19DQUNIRS4gV2UgYWxzbyBvbmx5IGRvIHRoYXQKKyAqIG9uIHVzZXJzcGFjZSBQVEVzCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9sb29rc19ub3JtYWwocHRlX3QgcHRlKQogewogCXJldHVybiAocHRlX3ZhbChwdGUpICYKLQkJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9TUEVDSUFMIHwgX1BBR0VfTk9fQ0FDSEUpKSA9PQotCQkoX1BBR0VfUFJFU0VOVCk7CisJICAgIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfU1BFQ0lBTCB8IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfVVNFUikpID09CisJICAgIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUik7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QUENfU1REX01NVSkKK3N0cnVjdCBwYWdlICogbWF5YmVfcHRlX3RvX3BhZ2UocHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGUpOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJaWYgKHVubGlrZWx5KCFwZm5fdmFsaWQocGZuKSkpCisJCXJldHVybiBOVUxMOworCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCisJCXJldHVybiBOVUxMOworCXJldHVybiBwYWdlOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX1NURF9NTVUpIHx8IF9QQUdFX0VYRUMgPT0gMAorCiAvKiBTZXJ2ZXItc3R5bGUgTU1VIGhhbmRsZXMgY29oZXJlbmN5IHdoZW4gaGFzaGluZyBpZiBIVyBleGVjIHBlcm1pc3Npb24KLSAqIGlzIHN1cHBvc2VkIHBlciBwYWdlIChjdXJyZW50bHkgNjQtYml0IG9ubHkpLiBFbHNlLCB3ZSBhbHdheXMgZmx1c2gKLSAqIHZhbGlkIFBURXMgaW4gc2V0X3B0ZS4KKyAqIGlzIHN1cHBvc2VkIHBlciBwYWdlIChjdXJyZW50bHkgNjQtYml0IG9ubHkpLiBJZiBub3QsIHRoZW4sIHdlIGFsd2F5cworICogZmx1c2ggdGhlIGNhY2hlIGZvciB2YWxpZCBQVEVzIGluIHNldF9wdGUuIEVtYmVkZGVkIENQVSB3aXRob3V0IEhXIGV4ZWMKKyAqIHN1cHBvcnQgZmFsbHMgaW50byB0aGUgc2FtZSBjYXRlZ29yeS4KICAqLwotc3RhdGljIGlubGluZSBpbnQgcHRlX25lZWRfZXhlY19mbHVzaChwdGVfdCBwdGUsIGludCBzZXRfcHRlKQorCitzdGF0aWMgcHRlX3Qgc2V0X3B0ZV9maWx0ZXIocHRlX3QgcHRlKQogewotCXJldHVybiBzZXRfcHRlICYmIHB0ZV9sb29rc19ub3JtYWwocHRlKSAmJgotCQkhKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSkgfHwKLQkJICBjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9OT0VYRUNVVEUpKTsKKwlwdGUgPSBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSFBURUZMQUdTKTsKKwlpZiAocHRlX2xvb2tzX25vcm1hbChwdGUpICYmICEoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFKSB8fAorCQkJCSAgICAgICBjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9OT0VYRUNVVEUpKSkgeworCQlzdHJ1Y3QgcGFnZSAqcGcgPSBtYXliZV9wdGVfdG9fcGFnZShwdGUpOworCQlpZiAoIXBnKQorCQkJcmV0dXJuIHB0ZTsKKwkJaWYgKCF0ZXN0X2JpdChQR19hcmNoXzEsICZwZy0+ZmxhZ3MpKSB7CisJCQlmbHVzaF9kY2FjaGVfaWNhY2hlX3BhZ2UocGcpOworCQkJc2V0X2JpdChQR19hcmNoXzEsICZwZy0+ZmxhZ3MpOworCQl9CisJfQorCXJldHVybiBwdGU7CiB9Ci0jZWxpZiBfUEFHRV9IV0VYRUMgPT0gMAotLyogRW1iZWRkZWQgdHlwZSBNTVUgd2l0aG91dCBIVyBleGVjIHN1cHBvcnQgKDh4eCBvbmx5IHNvIGZhciksIHdlIGZsdXNoCi0gKiB0aGUgY2FjaGUgZm9yIGFueSBwcmVzZW50IFBURQorCitzdGF0aWMgcHRlX3Qgc2V0X2FjY2Vzc19mbGFnc19maWx0ZXIocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgIGludCBkaXJ0eSkKK3sKKwlyZXR1cm4gcHRlOworfQorCisjZWxzZSAvKiBkZWZpbmVkKENPTkZJR19QUENfU1REX01NVSkgfHwgX1BBR0VfRVhFQyA9PSAwICovCisKKy8qIEVtYmVkZGVkIHR5cGUgTU1VIHdpdGggSFcgZXhlYyBzdXBwb3J0LiBUaGlzIGlzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQKKyAqIGFzIHdlIGRvbid0IGhhdmUgdHdvIGJpdHMgdG8gc3BhcmUgZm9yIF9QQUdFX0VYRUMgYW5kIF9QQUdFX0hXRVhFQyBzbworICogaW5zdGVhZCB3ZSAiZmlsdGVyIG91dCIgdGhlIGV4ZWMgcGVybWlzc2lvbiBmb3Igbm9uIGNsZWFuIHBhZ2VzLgogICovCi1zdGF0aWMgaW5saW5lIGludCBwdGVfbmVlZF9leGVjX2ZsdXNoKHB0ZV90IHB0ZSwgaW50IHNldF9wdGUpCitzdGF0aWMgcHRlX3Qgc2V0X3B0ZV9maWx0ZXIocHRlX3QgcHRlKQogewotCXJldHVybiBzZXRfcHRlICYmIHB0ZV9sb29rc19ub3JtYWwocHRlKTsKKwlzdHJ1Y3QgcGFnZSAqcGc7CisKKwkvKiBObyBleGVjIHBlcm1pc3Npb24gaW4gdGhlIGZpcnN0IHBsYWNlLCBtb3ZlIG9uICovCisJaWYgKCEocHRlX3ZhbChwdGUpICYgX1BBR0VfRVhFQykgfHwgIXB0ZV9sb29rc19ub3JtYWwocHRlKSkKKwkJcmV0dXJuIHB0ZTsKKworCS8qIElmIHlvdSBzZXQgX1BBR0VfRVhFQyBvbiB3ZWlyZCBwYWdlcyB5b3UncmUgb24geW91ciBvd24gKi8KKwlwZyA9IG1heWJlX3B0ZV90b19wYWdlKHB0ZSk7CisJaWYgKHVubGlrZWx5KCFwZykpCisJCXJldHVybiBwdGU7CisKKwkvKiBJZiB0aGUgcGFnZSBjbGVhbiwgd2UgbW92ZSBvbiAqLworCWlmICh0ZXN0X2JpdChQR19hcmNoXzEsICZwZy0+ZmxhZ3MpKQorCQlyZXR1cm4gcHRlOworCisJLyogSWYgaXQncyBhbiBleGVjIGZhdWx0LCB3ZSBmbHVzaCB0aGUgY2FjaGUgYW5kIG1ha2UgaXQgY2xlYW4gKi8KKwlpZiAoaXNfZXhlY19mYXVsdCgpKSB7CisJCWZsdXNoX2RjYWNoZV9pY2FjaGVfcGFnZShwZyk7CisJCXNldF9iaXQoUEdfYXJjaF8xLCAmcGctPmZsYWdzKTsKKwkJcmV0dXJuIHB0ZTsKKwl9CisKKwkvKiBFbHNlLCB3ZSBmaWx0ZXIgb3V0IF9QQUdFX0VYRUMgKi8KKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0VYRUMpOwogfQotI2Vsc2UKLS8qIE90aGVyIGVtYmVkZGVkIENQVXMgd2l0aCBIVyBleGVjIHN1cHBvcnQgcGVyLXBhZ2UsIHdlIGZsdXNoIG9uIGV4ZWMKLSAqIGZhdWx0IGlmIEhXRVhFQyBpcyBub3Qgc2V0Ci0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9uZWVkX2V4ZWNfZmx1c2gocHRlX3QgcHRlLCBpbnQgc2V0X3B0ZSkKKworc3RhdGljIHB0ZV90IHNldF9hY2Nlc3NfZmxhZ3NfZmlsdGVyKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgICBpbnQgZGlydHkpCiB7Ci0JcmV0dXJuIHB0ZV9sb29rc19ub3JtYWwocHRlKSAmJiBpc19leGVjX2ZhdWx0KCkgJiYKLQkJIShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9IV0VYRUMpOworCXN0cnVjdCBwYWdlICpwZzsKKworCS8qIFNvIGhlcmUsIHdlIG9ubHkgY2FyZSBhYm91dCBleGVjIGZhdWx0cywgYXMgd2UgdXNlIHRoZW0KKwkgKiB0byByZWNvdmVyIGxvc3QgX1BBR0VfRVhFQyBhbmQgcGVyZm9ybSBJJC9EJCBjb2hlcmVuY3kKKwkgKiBpZiBuZWNlc3NhcnkuIEFsc28gaWYgX1BBR0VfRVhFQyBpcyBhbHJlYWR5IHNldCwgc2FtZSBkZWFsLAorCSAqIHdlIGp1c3QgYmFpbCBvdXQKKwkgKi8KKwlpZiAoZGlydHkgfHwgKHB0ZV92YWwocHRlKSAmIF9QQUdFX0VYRUMpIHx8ICFpc19leGVjX2ZhdWx0KCkpCisJCXJldHVybiBwdGU7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfVk0KKwkvKiBTbyB0aGlzIGlzIGFuIGV4ZWMgZmF1bHQsIF9QQUdFX0VYRUMgaXMgbm90IHNldC4gSWYgaXQgd2FzCisJICogYW4gZXJyb3Igd2Ugd291bGQgaGF2ZSBiYWlsZWQgb3V0IGVhcmxpZXIgaW4gZG9fcGFnZV9mYXVsdCgpCisJICogYnV0IGxldCdzIG1ha2Ugc3VyZSBvZiBpdAorCSAqLworCWlmIChXQVJOX09OKCEodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpKSkKKwkJcmV0dXJuIHB0ZTsKKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfVk0gKi8KKworCS8qIElmIHlvdSBzZXQgX1BBR0VfRVhFQyBvbiB3ZWlyZCBwYWdlcyB5b3UncmUgb24geW91ciBvd24gKi8KKwlwZyA9IG1heWJlX3B0ZV90b19wYWdlKHB0ZSk7CisJaWYgKHVubGlrZWx5KCFwZykpCisJCWdvdG8gYmFpbDsKKworCS8qIElmIHRoZSBwYWdlIGlzIGFscmVhZHkgY2xlYW4sIHdlIG1vdmUgb24gKi8KKwlpZiAodGVzdF9iaXQoUEdfYXJjaF8xLCAmcGctPmZsYWdzKSkKKwkJZ290byBiYWlsOworCisJLyogQ2xlYW4gdGhlIHBhZ2UgYW5kIHNldCBQR19hcmNoXzEgKi8KKwlmbHVzaF9kY2FjaGVfaWNhY2hlX3BhZ2UocGcpOworCXNldF9iaXQoUEdfYXJjaF8xLCAmcGctPmZsYWdzKTsKKworIGJhaWw6CisJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0VYRUMpOwogfQotI2VuZGlmCisKKyNlbmRpZiAvKiAhKGRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VKSB8fCBfUEFHRV9FWEVDID09IDApICovCiAKIC8qCiAgKiBzZXRfcHRlIHN0b3JlcyBhIGxpbnV4IFBURSBpbnRvIHRoZSBsaW51eCBwYWdlIHRhYmxlLgogICovCi12b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3ZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwKKwkJcHRlX3QgcHRlKQogewogI2lmZGVmIENPTkZJR19ERUJVR19WTQogCVdBUk5fT04ocHRlX3ByZXNlbnQoKnB0ZXApKTsKQEAgLTE5Niw5ICsyNzYsNyBAQAogCSAqIHRoaXMgY29udGV4dCBtaWdodCBub3QgaGF2ZSBiZWVuIGFjdGl2YXRlZCB5ZXQgd2hlbiB0aGlzCiAJICogaXMgY2FsbGVkLgogCSAqLwotCXB0ZSA9IF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IUFRFRkxBR1MpOwotCWlmIChwdGVfbmVlZF9leGVjX2ZsdXNoKHB0ZSwgMSkpCi0JCXB0ZSA9IGRvX2RjYWNoZV9pY2FjaGVfY29oZXJlbmN5KHB0ZSk7CisJcHRlID0gc2V0X3B0ZV9maWx0ZXIocHRlKTsKIAogCS8qIFBlcmZvcm0gdGhlIHNldHRpbmcgb2YgdGhlIFBURSAqLwogCV9fc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlLCAwKTsKQEAgLTIxNSw4ICsyOTMsNyBAQAogCQkJICBwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnksIGludCBkaXJ0eSkKIHsKIAlpbnQgY2hhbmdlZDsKLQlpZiAoIWRpcnR5ICYmIHB0ZV9uZWVkX2V4ZWNfZmx1c2goZW50cnksIDApKQotCQllbnRyeSA9IGRvX2RjYWNoZV9pY2FjaGVfY29oZXJlbmN5KGVudHJ5KTsKKwllbnRyeSA9IHNldF9hY2Nlc3NfZmxhZ3NfZmlsdGVyKGVudHJ5LCB2bWEsIGRpcnR5KTsKIAljaGFuZ2VkID0gIXB0ZV9zYW1lKCoocHRlcCksIGVudHJ5KTsKIAlpZiAoY2hhbmdlZCkgewogCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fSFVHRVRMQikpCkBAIC0yNDIsNyArMzE5LDcgQEAKIAlCVUdfT04ocHVkX25vbmUoKnB1ZCkpOwogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKIAlCVUdfT04oIXBtZF9wcmVzZW50KCpwbWQpKTsKLQlCVUdfT04oIXNwaW5faXNfbG9ja2VkKHB0ZV9sb2NrcHRyKG1tLCBwbWQpKSk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKHB0ZV9sb2NrcHRyKG1tLCBwbWQpKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfREVCVUdfVk0gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKaW5kZXggNTQyMjE2OS4uY2I5NmNiMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkJZmxhZ3MgfD0gX1BBR0VfRElSVFkgfCBfUEFHRV9IV1dSSVRFOwogCiAJLyogd2UgZG9uJ3Qgd2FudCB0byBsZXQgX1BBR0VfVVNFUiBhbmQgX1BBR0VfRVhFQyBsZWFrIG91dCAqLwotCWZsYWdzICY9IH4oX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMgfCBfUEFHRV9IV0VYRUMpOworCWZsYWdzICY9IH4oX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpOwogCiAJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIoYWRkciwgc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYwppbmRleCBiZmE3ZGI2Li44NTNkNTU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9sbWIuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTU1LDE5ICs1NywzNiBAQAogCiB1bnNpZ25lZCBsb25nIGlvcmVtYXBfYm90ID0gSU9SRU1BUF9CQVNFOwogCisKKyNpZmRlZiBDT05GSUdfUFBDX01NVV9OT0hBU0gKK3N0YXRpYyB2b2lkICplYXJseV9hbGxvY19wZ3RhYmxlKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkICpwdDsKKworCWlmIChpbml0X2Jvb3RtZW1fZG9uZSkKKwkJcHQgPSBfX2FsbG9jX2Jvb3RtZW0oc2l6ZSwgc2l6ZSwgX19wYShNQVhfRE1BX0FERFJFU1MpKTsKKwllbHNlCisJCXB0ID0gX192YShsbWJfYWxsb2NfYmFzZShzaXplLCBzaXplLAorCQkJCQkgX19wYShNQVhfRE1BX0FERFJFU1MpKSk7CisJbWVtc2V0KHB0LCAwLCBzaXplKTsKKworCXJldHVybiBwdDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDX01NVV9OT0hBU0ggKi8KKwogLyoKLSAqIG1hcF9pb19wYWdlIGN1cnJlbnRseSBvbmx5IGNhbGxlZCBieSBfX2lvcmVtYXAKLSAqIG1hcF9pb19wYWdlIGFkZHMgYW4gZW50cnkgdG8gdGhlIGlvcmVtYXAgcGFnZSB0YWJsZQorICogbWFwX2tlcm5lbF9wYWdlIGN1cnJlbnRseSBvbmx5IGNhbGxlZCBieSBfX2lvcmVtYXAKKyAqIG1hcF9rZXJuZWxfcGFnZSBhZGRzIGFuIGVudHJ5IHRvIHRoZSBpb3JlbWFwIHBhZ2UgdGFibGUKICAqIGFuZCBhZGRzIGFuIGVudHJ5IHRvIHRoZSBIUFQsIHBvc3NpYmx5IGJvbHRpbmcgaXQKICAqLwotc3RhdGljIGludCBtYXBfaW9fcGFnZSh1bnNpZ25lZCBsb25nIGVhLCB1bnNpZ25lZCBsb25nIHBhLCBpbnQgZmxhZ3MpCitpbnQgbWFwX2tlcm5lbF9wYWdlKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgcGEsIGludCBmbGFncykKIHsKIAlwZ2RfdCAqcGdkcDsKIAlwdWRfdCAqcHVkcDsKIAlwbWRfdCAqcG1kcDsKIAlwdGVfdCAqcHRlcDsKIAotCWlmIChtZW1faW5pdF9kb25lKSB7CisJaWYgKHNsYWJfaXNfYXZhaWxhYmxlKCkpIHsKIAkJcGdkcCA9IHBnZF9vZmZzZXRfayhlYSk7CiAJCXB1ZHAgPSBwdWRfYWxsb2MoJmluaXRfbW0sIHBnZHAsIGVhKTsKIAkJaWYgKCFwdWRwKQpAQCAtODEsNiArMTAwLDM1IEBACiAJCXNldF9wdGVfYXQoJmluaXRfbW0sIGVhLCBwdGVwLCBwZm5fcHRlKHBhID4+IFBBR0VfU0hJRlQsCiAJCQkJCQkJICBfX3BncHJvdChmbGFncykpKTsKIAl9IGVsc2UgeworI2lmZGVmIENPTkZJR19QUENfTU1VX05PSEFTSAorCQkvKiBXYXJuaW5nICEgVGhpcyB3aWxsIGJsb3cgdXAgaWYgYm9vdG1lbSBpcyBub3QgaW5pdGlhbGl6ZWQKKwkJICogd2hpY2ggb3VyIHBwYzY0IGNvZGUgaXMga2VlbiB0byBkbyB0aGF0LCB3ZSdsbCBuZWVkIHRvCisJCSAqIGZpeCBpdCBhbmQvb3IgYmUgbW9yZSBjYXJlZnVsCisJCSAqLworCQlwZ2RwID0gcGdkX29mZnNldF9rKGVhKTsKKyNpZmRlZiBQVURfVEFCTEVfU0laRQorCQlpZiAocGdkX25vbmUoKnBnZHApKSB7CisJCQlwdWRwID0gZWFybHlfYWxsb2NfcGd0YWJsZShQVURfVEFCTEVfU0laRSk7CisJCQlCVUdfT04ocHVkcCA9PSBOVUxMKTsKKwkJCXBnZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcGdkcCwgcHVkcCk7CisJCX0KKyNlbmRpZiAvKiBQVURfVEFCTEVfU0laRSAqLworCQlwdWRwID0gcHVkX29mZnNldChwZ2RwLCBlYSk7CisJCWlmIChwdWRfbm9uZSgqcHVkcCkpIHsKKwkJCXBtZHAgPSBlYXJseV9hbGxvY19wZ3RhYmxlKFBNRF9UQUJMRV9TSVpFKTsKKwkJCUJVR19PTihwbWRwID09IE5VTEwpOworCQkJcHVkX3BvcHVsYXRlKCZpbml0X21tLCBwdWRwLCBwbWRwKTsKKwkJfQorCQlwbWRwID0gcG1kX29mZnNldChwdWRwLCBlYSk7CisJCWlmICghcG1kX3ByZXNlbnQoKnBtZHApKSB7CisJCQlwdGVwID0gZWFybHlfYWxsb2NfcGd0YWJsZShQQUdFX1NJWkUpOworCQkJQlVHX09OKHB0ZXAgPT0gTlVMTCk7CisJCQlwbWRfcG9wdWxhdGVfa2VybmVsKCZpbml0X21tLCBwbWRwLCBwdGVwKTsKKwkJfQorCQlwdGVwID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgZWEpOworCQlzZXRfcHRlX2F0KCZpbml0X21tLCBlYSwgcHRlcCwgcGZuX3B0ZShwYSA+PiBQQUdFX1NISUZULAorCQkJCQkJCSAgX19wZ3Byb3QoZmxhZ3MpKSk7CisjZWxzZSAvKiBDT05GSUdfUFBDX01NVV9OT0hBU0ggKi8KIAkJLyoKIAkJICogSWYgdGhlIG1tIHN1YnN5c3RlbSBpcyBub3QgZnVsbHkgdXAsIHdlIGNhbm5vdCBjcmVhdGUgYQogCQkgKiBsaW51eCBwYWdlIHRhYmxlIGVudHJ5IGZvciB0aGlzIG1hcHBpbmcuICBTaW1wbHkgYm9sdCBhbgpAQCAtOTMsNiArMTQxLDcgQEAKIAkJCSAgICAgICAibWVtb3J5IGF0ICUwMTZseCAhXG4iLCBwYSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQorI2VuZGlmIC8qICFDT05GSUdfUFBDX01NVV9OT0hBU0ggKi8KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjQsNyArMTczLDcgQEAKIAlXQVJOX09OKHNpemUgJiB+UEFHRV9NQVNLKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IFBBR0VfU0laRSkKLQkJaWYgKG1hcF9pb19wYWdlKCh1bnNpZ25lZCBsb25nKWVhK2ksIHBhK2ksIGZsYWdzKSkKKwkJaWYgKG1hcF9rZXJuZWxfcGFnZSgodW5zaWduZWQgbG9uZyllYStpLCBwYStpLCBmbGFncykpCiAJCQlyZXR1cm4gTlVMTDsKIAogCXJldHVybiAodm9pZCBfX2lvbWVtICopZWE7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vc2xiLmMgYi9hcmNoL3Bvd2VycGMvbW0vc2xiLmMKaW5kZXggNWI3MDM4Zi4uMWQ5OGVjYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3NsYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9zbGIuYwpAQCAtOTIsMTUgKzkyLDEzIEBACiAJCSAgICAgOiAibWVtb3J5IiApOwogfQogCi12b2lkIHNsYl9mbHVzaF9hbmRfcmVib2x0KHZvaWQpCitzdGF0aWMgdm9pZCBfX3NsYl9mbHVzaF9hbmRfcmVib2x0KHZvaWQpCiB7CiAJLyogSWYgeW91IGNoYW5nZSB0aGlzIG1ha2Ugc3VyZSB5b3UgY2hhbmdlIFNMQl9OVU1fQk9MVEVECiAJICogYXBwcm9wcmlhdGVseSB0b28uICovCiAJdW5zaWduZWQgbG9uZyBsaW5lYXJfbGxwLCB2bWFsbG9jX2xscCwgbGZsYWdzLCB2ZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBrc3BfZXNpZF9kYXRhLCBrc3BfdnNpZF9kYXRhOwogCi0JV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKLQogCWxpbmVhcl9sbHAgPSBtbXVfcHNpemVfZGVmc1ttbXVfbGluZWFyX3BzaXplXS5zbGxwOwogCXZtYWxsb2NfbGxwID0gbW11X3BzaXplX2RlZnNbbW11X3ZtYWxsb2NfcHNpemVdLnNsbHA7CiAJbGZsYWdzID0gU0xCX1ZTSURfS0VSTkVMIHwgbGluZWFyX2xscDsKQEAgLTExNywxMiArMTE1LDYgQEAKIAkJa3NwX3ZzaWRfZGF0YSA9IGdldF9zbGJfc2hhZG93KCktPnNhdmVfYXJlYVsyXS52c2lkOwogCX0KIAotCS8qCi0JICogV2UgY2FuJ3QgdGFrZSBhIFBNVSBleGNlcHRpb24gaW4gdGhlIGZvbGxvd2luZyBjb2RlLCBzbyBoYXJkCi0JICogZGlzYWJsZSBpbnRlcnJ1cHRzLgotCSAqLwotCWhhcmRfaXJxX2Rpc2FibGUoKTsKLQogCS8qIFdlIG5lZWQgdG8gZG8gdGhpcyBhbGwgaW4gYXNtLCBzbyB3ZSdyZSBzdXJlIHdlIGRvbid0IHRvdWNoCiAJICogdGhlIHN0YWNrIGJldHdlZW4gdGhlIHNsYmlhIGFuZCByZWJvbHRpbmcgaXQuICovCiAJYXNtIHZvbGF0aWxlKCJpc3luY1xuIgpAQCAtMTM5LDYgKzEzMSwyMSBAQAogCQkgICAgIDogIm1lbW9yeSIpOwogfQogCit2b2lkIHNsYl9mbHVzaF9hbmRfcmVib2x0KHZvaWQpCit7CisKKwlXQVJOX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCisJLyoKKwkgKiBXZSBjYW4ndCB0YWtlIGEgUE1VIGV4Y2VwdGlvbiBpbiB0aGUgZm9sbG93aW5nIGNvZGUsIHNvIGhhcmQKKwkgKiBkaXNhYmxlIGludGVycnVwdHMuCisJICovCisJaGFyZF9pcnFfZGlzYWJsZSgpOworCisJX19zbGJfZmx1c2hfYW5kX3JlYm9sdCgpOworCWdldF9wYWNhKCktPnNsYl9jYWNoZV9wdHIgPSAwOworfQorCiB2b2lkIHNsYl92bWFsbG9jX3VwZGF0ZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdmZsYWdzOwpAQCAtMTgwLDEyICsxODcsMjAgQEAKIC8qIEZsdXNoIGFsbCB1c2VyIGVudHJpZXMgZnJvbSB0aGUgc2VnbWVudCB0YWJsZSBvZiB0aGUgY3VycmVudCBwcm9jZXNzb3IuICovCiB2b2lkIHN3aXRjaF9zbGIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gZ2V0X3BhY2EoKS0+c2xiX2NhY2hlX3B0cjsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAl1bnNpZ25lZCBsb25nIHNsYmllX2RhdGEgPSAwOwogCXVuc2lnbmVkIGxvbmcgcGMgPSBLU1RLX0VJUCh0c2spOwogCXVuc2lnbmVkIGxvbmcgc3RhY2sgPSBLU1RLX0VTUCh0c2spOwotCXVuc2lnbmVkIGxvbmcgdW5tYXBwZWRfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGV4ZWNfYmFzZTsKIAorCS8qCisJICogV2UgbmVlZCBpbnRlcnJ1cHRzIGhhcmQtZGlzYWJsZWQgaGVyZSwgbm90IGp1c3Qgc29mdC1kaXNhYmxlZCwKKwkgKiBzbyB0aGF0IGEgUE1VIGludGVycnVwdCBjYW4ndCBvY2N1ciwgd2hpY2ggbWlnaHQgdHJ5IHRvIGFjY2VzcworCSAqIHVzZXIgbWVtb3J5ICh0byBnZXQgYSBzdGFjayB0cmFjZSkgYW5kIHBvc3NpYmxlIGNhdXNlIGFuIFNMQiBtaXNzCisJICogd2hpY2ggd291bGQgdXBkYXRlIHRoZSBzbGJfY2FjaGUvc2xiX2NhY2hlX3B0ciBmaWVsZHMgaW4gdGhlIFBBQ0EuCisJICovCisJaGFyZF9pcnFfZGlzYWJsZSgpOworCW9mZnNldCA9IGdldF9wYWNhKCktPnNsYl9jYWNoZV9wdHI7CiAJaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9OT19TTEJJRV9CKSAmJgogCSAgICBvZmZzZXQgPD0gU0xCX0NBQ0hFX0VOVFJJRVMpIHsKIAkJaW50IGk7CkBAIC0yMDAsNyArMjE1LDcgQEAKIAkJfQogCQlhc20gdm9sYXRpbGUoImlzeW5jIiA6IDogOiAibWVtb3J5Iik7CiAJfSBlbHNlIHsKLQkJc2xiX2ZsdXNoX2FuZF9yZWJvbHQoKTsKKwkJX19zbGJfZmx1c2hfYW5kX3JlYm9sdCgpOwogCX0KIAogCS8qIFdvcmthcm91bmQgUE9XRVI1IDwgREQyLjEgaXNzdWUgKi8KQEAgLTIxMiw0MiArMjI3LDQ0IEBACiAKIAkvKgogCSAqIHByZWxvYWQgc29tZSB1c2Vyc3BhY2Ugc2VnbWVudHMgaW50byB0aGUgU0xCLgorCSAqIEFsbW9zdCBhbGwgMzIgYW5kIDY0Yml0IFBvd2VyUEMgZXhlY3V0YWJsZXMgYXJlIGxpbmtlZCBhdAorCSAqIDB4MTAwMDAwMDAgc28gaXQgbWFrZXMgc2Vuc2UgdG8gcHJlbG9hZCB0aGlzIHNlZ21lbnQuCiAJICovCi0JaWYgKHRlc3RfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGXzMyQklUKSkKLQkJdW5tYXBwZWRfYmFzZSA9IFRBU0tfVU5NQVBQRURfQkFTRV9VU0VSMzI7Ci0JZWxzZQotCQl1bm1hcHBlZF9iYXNlID0gVEFTS19VTk1BUFBFRF9CQVNFX1VTRVI2NDsKKwlleGVjX2Jhc2UgPSAweDEwMDAwMDAwOwogCi0JaWYgKGlzX2tlcm5lbF9hZGRyKHBjKSkKKwlpZiAoaXNfa2VybmVsX2FkZHIocGMpIHx8IGlzX2tlcm5lbF9hZGRyKHN0YWNrKSB8fAorCSAgICBpc19rZXJuZWxfYWRkcihleGVjX2Jhc2UpKQogCQlyZXR1cm47CisKIAlzbGJfYWxsb2NhdGUocGMpOwogCi0JaWYgKGVzaWRzX21hdGNoKHBjLHN0YWNrKSkKLQkJcmV0dXJuOworCWlmICghZXNpZHNfbWF0Y2gocGMsIHN0YWNrKSkKKwkJc2xiX2FsbG9jYXRlKHN0YWNrKTsKIAotCWlmIChpc19rZXJuZWxfYWRkcihzdGFjaykpCi0JCXJldHVybjsKLQlzbGJfYWxsb2NhdGUoc3RhY2spOwotCi0JaWYgKGVzaWRzX21hdGNoKHBjLHVubWFwcGVkX2Jhc2UpIHx8IGVzaWRzX21hdGNoKHN0YWNrLHVubWFwcGVkX2Jhc2UpKQotCQlyZXR1cm47Ci0KLQlpZiAoaXNfa2VybmVsX2FkZHIodW5tYXBwZWRfYmFzZSkpCi0JCXJldHVybjsKLQlzbGJfYWxsb2NhdGUodW5tYXBwZWRfYmFzZSk7CisJaWYgKCFlc2lkc19tYXRjaChwYywgZXhlY19iYXNlKSAmJgorCSAgICAhZXNpZHNfbWF0Y2goc3RhY2ssIGV4ZWNfYmFzZSkpCisJCXNsYl9hbGxvY2F0ZShleGVjX2Jhc2UpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGF0Y2hfc2xiX2VuY29kaW5nKHVuc2lnbmVkIGludCAqaW5zbl9hZGRyLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBpbW1lZCkKIHsKLQkvKiBBc3N1bWUgdGhlIGluc3RydWN0aW9uIGhhZCBhICIwIiBpbW1lZGlhdGUgdmFsdWUsIGp1c3QKLQkgKiAib3IiIGluIHRoZSBuZXcgdmFsdWUKLQkgKi8KLQkqaW5zbl9hZGRyIHw9IGltbWVkOworCSppbnNuX2FkZHIgPSAoKmluc25fYWRkciAmIDB4ZmZmZjAwMDApIHwgaW1tZWQ7CiAJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWluc25fYWRkciwgNCsKIAkJCSAgICh1bnNpZ25lZCBsb25nKWluc25fYWRkcik7CiB9CiAKK3ZvaWQgc2xiX3NldF9zaXplKHUxNiBzaXplKQoreworCWV4dGVybiB1bnNpZ25lZCBpbnQgKnNsYl9jb21wYXJlX3JyX3RvX3NpemU7CisKKwlpZiAobW11X3NsYl9zaXplID09IHNpemUpCisJCXJldHVybjsKKworCW1tdV9zbGJfc2l6ZSA9IHNpemU7CisJcGF0Y2hfc2xiX2VuY29kaW5nKHNsYl9jb21wYXJlX3JyX3RvX3NpemUsIG1tdV9zbGJfc2l6ZSk7Cit9CisKIHZvaWQgc2xiX2luaXRpYWxpemUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGxpbmVhcl9sbHAsIHZtYWxsb2NfbGxwLCBpb19sbHA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jIGIvYXJjaC9wb3dlcnBjL21tL3N0YWIuYwppbmRleCA5OGNkMWRjLi42ODdmZGRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2RlZmluZSBOUl9TVEFCX0NBQ0hFX0VOVFJJRVMgOAogc3RhdGljIERFRklORV9QRVJfQ1BVKGxvbmcsIHN0YWJfY2FjaGVfcHRyKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShsb25nLCBzdGFiX2NhY2hlW05SX1NUQUJfQ0FDSEVfRU5UUklFU10pOworc3RhdGljIERFRklORV9QRVJfQ1BVKGxvbmcgW05SX1NUQUJfQ0FDSEVfRU5UUklFU10sIHN0YWJfY2FjaGUpOwogCiAvKgogICogQ3JlYXRlIGEgc2VnbWVudCB0YWJsZSBlbnRyeSBmb3IgdGhlIGdpdmVuIGVzaWQvdnNpZCBwYWlyLgpAQCAtMTY0LDcgKzE2NCw3IEBACiB7CiAJc3RydWN0IHN0YWJfZW50cnkgKnN0YWIgPSAoc3RydWN0IHN0YWJfZW50cnkgKikgZ2V0X3BhY2EoKS0+c3RhYl9hZGRyOwogCXN0cnVjdCBzdGFiX2VudHJ5ICpzdGU7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBfX2dldF9jcHVfdmFyKHN0YWJfY2FjaGVfcHRyKTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAl1bnNpZ25lZCBsb25nIHBjID0gS1NUS19FSVAodHNrKTsKIAl1bnNpZ25lZCBsb25nIHN0YWNrID0gS1NUS19FU1AodHNrKTsKIAl1bnNpZ25lZCBsb25nIHVubWFwcGVkX2Jhc2U7CkBAIC0xNzIsNiArMTcyLDE1IEBACiAJLyogRm9yY2UgcHJldmlvdXMgdHJhbnNsYXRpb25zIHRvIGNvbXBsZXRlLiBEUkVORyAqLwogCWFzbSB2b2xhdGlsZSgiaXN5bmMiIDogOiA6ICJtZW1vcnkiKTsKIAorCS8qCisJICogV2UgbmVlZCBpbnRlcnJ1cHRzIGhhcmQtZGlzYWJsZWQgaGVyZSwgbm90IGp1c3Qgc29mdC1kaXNhYmxlZCwKKwkgKiBzbyB0aGF0IGEgUE1VIGludGVycnVwdCBjYW4ndCBvY2N1ciwgd2hpY2ggbWlnaHQgdHJ5IHRvIGFjY2VzcworCSAqIHVzZXIgbWVtb3J5ICh0byBnZXQgYSBzdGFjayB0cmFjZSkgYW5kIHBvc3NpYmxlIGNhdXNlIGFuIFNUQUIgbWlzcworCSAqIHdoaWNoIHdvdWxkIHVwZGF0ZSB0aGUgc3RhYl9jYWNoZS9zdGFiX2NhY2hlX3B0ciBwZXItY3B1IHZhcmlhYmxlcy4KKwkgKi8KKwloYXJkX2lycV9kaXNhYmxlKCk7CisKKwlvZmZzZXQgPSBfX2dldF9jcHVfdmFyKHN0YWJfY2FjaGVfcHRyKTsKIAlpZiAob2Zmc2V0IDw9IE5SX1NUQUJfQ0FDSEVfRU5UUklFUykgewogCQlpbnQgaTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDMyLmMKaW5kZXggNjUxOTA1OC4uOGFhYThiNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2gzMi5jCkBAIC03MSw2ICs3MSw5IEBACiAJCSAqLwogCQlfdGxiaWEoKTsKIAl9CisKKwkvKiBQdXNoIG91dCBiYXRjaCBvZiBmcmVlZCBwYWdlIHRhYmxlcyAqLworCXB0ZV9mcmVlX2ZpbmlzaCgpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMKaW5kZXggOTM3ZWI5MC4uMmIyZjM1ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2g2NC5jCkBAIC0zMywxMSArMzMsNiBAQAogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHBjNjRfdGxiX2JhdGNoLCBwcGM2NF90bGJfYmF0Y2gpOwogCi0vKiBUaGlzIGlzIGRlY2xhcmVkIGFzIHdlIGFyZSB1c2luZyB0aGUgbW9yZSBvciBsZXNzIGdlbmVyaWMKLSAqIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90bGIuaCBmaWxlIC0tIHRnYWxsCi0gKi8KLURFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7Ci0KIC8qCiAgKiBBIGxpbnV4IFBURSB3YXMgY2hhbmdlZCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaGFzaCB0YWJsZSBlbnRyeQogICogbmVlc2QgdG8gYmUgZmx1c2hlZC4gVGhpcyBmdW5jdGlvbiB3aWxsIGVpdGhlciBwZXJmb3JtIHRoZSBmbHVzaApAQCAtMTU0LDYgKzE0OSwyMSBAQAogCWJhdGNoLT5pbmRleCA9IDA7CiB9CiAKK3ZvaWQgdGxiX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCit7CisJc3RydWN0IHBwYzY0X3RsYl9iYXRjaCAqdGxiYmF0Y2ggPSAmX19nZXRfY3B1X3ZhcihwcGM2NF90bGJfYmF0Y2gpOworCisJLyogSWYgdGhlcmUncyBhIFRMQiBiYXRjaCBwZW5kaW5nLCB0aGVuIHdlIG11c3QgZmx1c2ggaXQgYmVjYXVzZSB0aGUKKwkgKiBwYWdlcyBhcmUgZ29pbmcgdG8gYmUgZnJlZWQgYW5kIHdlIHJlYWxseSBkb24ndCB3YW50IHRvIGhhdmUgYSBDUFUKKwkgKiBhY2Nlc3MgYSBmcmVlZCBwYWdlIGJlY2F1c2UgaXQgaGFzIGEgc3RhbGUgVExCCisJICovCisJaWYgKHRsYmJhdGNoLT5pbmRleCkKKwkJX19mbHVzaF90bGJfcGVuZGluZyh0bGJiYXRjaCk7CisKKwkvKiBQdXNoIG91dCBiYXRjaCBvZiBmcmVlZCBwYWdlIHRhYmxlcyAqLworCXB0ZV9mcmVlX2ZpbmlzaCgpOworfQorCiAvKioKICAqIF9fZmx1c2hfaGFzaF90YWJsZV9yYW5nZSAtIEZsdXNoIGFsbCBIUFRFcyBmb3IgYSBnaXZlbiBhZGRyZXNzIHJhbmdlCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBoYXNoIHRhYmxlIChhbmQgdGhlIFRMQikuIEJ1dCBrZWVwcwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9sb3dfNjRlLlMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjFjY2NmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9sb3dfNjRlLlMKQEAgLTAsMCArMSw3NzAgQEAKKy8qCisgKiAgTG93IGxldmUgVExCIG1pc3MgaGFuZGxlcnMgZm9yIEJvb2szRQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOQorICogICAgICBCZW4uIEhlcnJlbnNjaG1pZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZyksIElCTSBDb3JwLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcmVnLmg+CisjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbi02NGUuaD4KKyNpbmNsdWRlIDxhc20vcHBjLW9wY29kZS5oPgorCisjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKKyNkZWZpbmUgVlBURV9QTURfU0hJRlQJKFBURV9JTkRFWF9TSVpFKzEpCisjZWxzZQorI2RlZmluZSBWUFRFX1BNRF9TSElGVAkoUFRFX0lOREVYX1NJWkUpCisjZW5kaWYKKyNkZWZpbmUgVlBURV9QVURfU0hJRlQJKFZQVEVfUE1EX1NISUZUICsgUE1EX0lOREVYX1NJWkUpCisjZGVmaW5lIFZQVEVfUEdEX1NISUZUCShWUFRFX1BVRF9TSElGVCArIFBVRF9JTkRFWF9TSVpFKQorI2RlZmluZSBWUFRFX0lOREVYX1NJWkUgKFZQVEVfUEdEX1NISUZUICsgUEdEX0lOREVYX1NJWkUpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUTEIgbWlzcyBoYW5kbGluZyBmb3IgQm9vazNFIHdpdGggVExCIHJlc2VydmF0aW9uIGFuZCBIRVMgc3VwcG9ydCAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qIERhdGEgVExCIG1pc3MgKi8KKwlTVEFSVF9FWENFUFRJT04oZGF0YV90bGJfbWlzcykKKwlUTEJfTUlTU19QUk9MT0cKKworCS8qIE5vdyB3ZSBoYW5kbGUgdGhlIGZhdWx0IHByb3Blci4gV2Ugb25seSBzYXZlIERFQVIgaW4gbm9ybWFsCisJICogZmF1bHQgY2FzZSBzaW5jZSB0aGF0J3MgdGhlIG9ubHkgaW50ZXJlc3RpbmcgdmFsdWVzIGhlcmUuCisJICogV2UgY291bGQgcHJvYmFibHkgYWxzbyBvcHRpbWl6ZSBieSBub3Qgc2F2aW5nIFNSUjAvMSBpbiB0aGUKKwkgKiBsaW5lYXIgbWFwcGluZyBjYXNlIGJ1dCBJJ2xsIGxlYXZlIHRoYXQgZm9yIGxhdGVyCisJICovCisJbWZzcHIJcjE0LFNQUk5fRVNSCisJbWZzcHIJcjE2LFNQUk5fREVBUgkJLyogZ2V0IGZhdWx0aW5nIGFkZHJlc3MgKi8KKwlzcmRpCXIxNSxyMTYsNjAJCS8qIGdldCByZWdpb24gKi8KKwljbXBsZGkJY3IwLHIxNSwweGMJCS8qIGxpbmVhciBtYXBwaW5nID8gKi8KKwlUTEJfTUlTU19TVEFUU19TQVZFX0lORk8KKwliZXEJdGxiX2xvYWRfbGluZWFyCQkvKiB5ZXMgLT4gZ28gdG8gbGluZWFyIG1hcCBsb2FkICovCisKKwkvKiBUaGUgcGFnZSB0YWJsZXMgYXJlIG1hcHBlZCB2aXJ0dWFsbHkgbGluZWFyLiBBdCB0aGlzIHBvaW50LCB0aG91Z2gsCisJICogd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGFyZSB0cnlpbmcgdG8gZmF1bHQgaW4gYSBmaXJzdCBsZXZlbAorCSAqIHZpcnR1YWwgYWRkcmVzcyBvciBhIHZpcnR1YWwgcGFnZSB0YWJsZSBhZGRyZXNzLiBXZSBjYW4gZ2V0IHRoYXQKKwkgKiBmcm9tIGJpdCAweDEgb2YgdGhlIHJlZ2lvbiBJRCB3aGljaCB3ZSBoYXZlIHNldCBmb3IgYSBwYWdlIHRhYmxlCisJICovCisJYW5kaS4JcjEwLHIxNSwweDEKKwlibmUtCXZpcnRfcGFnZV90YWJsZV90bGJfbWlzcworCisJc3RkCXIxNCxFWF9UTEJfRVNSKHIxMik7CS8qIHNhdmUgRVNSICovCisJc3RkCXIxNixFWF9UTEJfREVBUihyMTIpOwkvKiBzYXZlIERFQVIgKi8KKworCSAvKiBXZSBuZWVkIF9QQUdFX1BSRVNFTlQgYW5kICBfUEFHRV9BQ0NFU1NFRCBzZXQgKi8KKwlsaQlyMTEsX1BBR0VfUFJFU0VOVAorCW9yaXMJcjExLHIxMSxfUEFHRV9BQ0NFU1NFREBoCisKKwkvKiBXZSBkbyB0aGUgdXNlci9rZXJuZWwgdGVzdCBmb3IgdGhlIFBJRCBoZXJlIGFsb25nIHdpdGggdGhlIFJXIHRlc3QKKwkgKi8KKwljbXBsZGkJY3IwLHIxNSwwCQkvKiBDaGVjayBmb3IgdXNlciByZWdpb24gKi8KKworCS8qIFdlIHByZS10ZXN0IHNvbWUgY29tYmluYXRpb24gb2YgcGVybWlzc2lvbnMgdG8gYXZvaWQgZG91YmxlCisJICogZmF1bHRzOgorCSAqCisJICogV2UgbW92ZSB0aGUgRVNSOlNUIGJpdCBpbnRvIHRoZSBwb3NpdGlvbiBvZiBfUEFHRV9CQVBfU1cgaW4gdGhlIFBURQorCSAqIEVTUl9TVCAgIGlzIDB4MDA4MDAwMDAKKwkgKiBfUEFHRV9CQVBfU1cgaXMgMHgwMDAwMDAxMAorCSAqIFNvIHRoZSBzaGlmdCBpcyA+PiAxOS4gVGhpcyB0ZXN0cyBmb3Igc3VwZXJ2aXNvciB3cml0ZWFiaWxpdHkuCisJICogSWYgdGhlIHBhZ2UgaGFwcGVucyB0byBiZSBzdXBlcnZpc29yIHdyaXRlYWJsZSBhbmQgbm90IHVzZXIKKwkgKiB3cml0ZWFibGUsIHdlIHdpbGwgdGFrZSBhIG5ldyBmYXVsdCBsYXRlciwgYnV0IHRoYXQgc2hvdWxkIGJlCisJICogYSByYXJlIGVub3VnaCBjYXNlLgorCSAqCisJICogV2UgYWxzbyBtb3ZlIEVTUl9TVCBpbiBfUEFHRV9ESVJUWSBwb3NpdGlvbgorCSAqIF9QQUdFX0RJUlRZIGlzIDB4MDAwMDEwMDAgc28gdGhlIHNoaWZ0IGlzID4+IDExCisJICoKKwkgKiBNQVMxIGlzIHByZXNldCBmb3IgYWxsIHdlIG5lZWQgZXhjZXB0IGZvciBUSUQgdGhhdCBuZWVkcyB0bworCSAqIGJlIGNsZWFyZWQgZm9yIGtlcm5lbCB0cmFuc2xhdGlvbnMKKwkgKi8KKwlybHdpbWkJcjExLHIxNCwzMi0xOSwyNywyNworCXJsd2ltaQlyMTEscjE0LDMyLTE2LDE5LDE5CisJYmVxCW5vcm1hbF90bGJfbWlzcworCS8qIFhYWCByZXBsYWNlIHRoZSBSTVcgY3ljbGVzIHdpdGggaW1tZWRpYXRlIGxvYWRzICsgd3JpdGVzICovCisxOgltZnNwcglyMTAsU1BSTl9NQVMxCisJY21wbGRpCWNyMCxyMTUsOAkJLyogQ2hlY2sgZm9yIHZtYWxsb2MgcmVnaW9uICovCisJcmx3aW5tCXIxMCxyMTAsMCwxNiwxCQkvKiBDbGVhciBUSUQgKi8KKwltdHNwcglTUFJOX01BUzEscjEwCisJYmVxKwlub3JtYWxfdGxiX21pc3MKKworCS8qIFdlIGdvdCBhIGNyYXBweSBhZGRyZXNzLCBqdXN0IGZhdWx0IHdpdGggd2hhdGV2ZXIgREVBUiBhbmQgRVNSCisJICogYXJlIGhlcmUKKwkgKi8KKwlUTEJfTUlTU19TVEFUU19EKE1NU1RBVF9UTEJfTUlTU19OT1JNX0ZBVUxUKQorCVRMQl9NSVNTX0VQSUxPR19FUlJPUgorCWIJZXhjX2RhdGFfc3RvcmFnZV9ib29rM2UKKworLyogSW5zdHJ1Y3Rpb24gVExCIG1pc3MgKi8KKwlTVEFSVF9FWENFUFRJT04oaW5zdHJ1Y3Rpb25fdGxiX21pc3MpCisJVExCX01JU1NfUFJPTE9HCisKKwkvKiBJZiB3ZSB0YWtlIGEgcmVjdXJzaXZlIGZhdWx0LCB0aGUgc2Vjb25kIGxldmVsIGhhbmRsZXIgbWF5IG5lZWQKKwkgKiB0byBrbm93IHdoZXRoZXIgd2UgYXJlIGhhbmRsaW5nIGEgZGF0YSBvciBpbnN0cnVjdGlvbiBmYXVsdCBpbgorCSAqIG9yZGVyIHRvIGdldCB0byB0aGUgcmlnaHQgc3RvcmUgZmF1bHQgaGFuZGxlci4gV2UgcHJvdmlkZSB0aGF0CisJICogaW5mbyBieSB3cml0aW5nIGEgY3JhenkgdmFsdWUgaW4gRVNSIGluIG91ciBleGNlcHRpb24gZnJhbWUKKwkgKi8KKwlsaQlyMTQsLTEJLyogc3RvcmUgdG8gZXhjZXB0aW9uIGZyYW1lIGlzIGRvbmUgbGF0ZXIgKi8KKworCS8qIE5vdyB3ZSBoYW5kbGUgdGhlIGZhdWx0IHByb3Blci4gV2Ugb25seSBzYXZlIERFQVIgaW4gdGhlIG5vbgorCSAqIGxpbmVhciBtYXBwaW5nIGNhc2Ugc2luY2Ugd2Uga25vdyB0aGUgbGluZWFyIG1hcHBpbmcgY2FzZSB3aWxsCisJICogbm90IHJlLWVudGVyLiBXZSBjb3VsZCBpbmRlZWQgb3B0aW1pemUgYW5kIGFsc28gbm90IHNhdmUgU1JSMC8xCisJICogaW4gdGhlIGxpbmVhciBtYXBwaW5nIGNhc2UgYnV0IEknbGwgbGVhdmUgdGhhdCBmb3IgbGF0ZXIKKwkgKgorCSAqIEZhdWx0aW5nIGFkZHJlc3MgaXMgU1JSMCB3aGljaCBpcyBhbHJlYWR5IGluIHIxNgorCSAqLworCXNyZGkJcjE1LHIxNiw2MAkJLyogZ2V0IHJlZ2lvbiAqLworCWNtcGxkaQljcjAscjE1LDB4YwkJLyogbGluZWFyIG1hcHBpbmcgPyAqLworCVRMQl9NSVNTX1NUQVRTX1NBVkVfSU5GTworCWJlcQl0bGJfbG9hZF9saW5lYXIJCS8qIHllcyAtPiBnbyB0byBsaW5lYXIgbWFwIGxvYWQgKi8KKworCS8qIFdlIGRvIHRoZSB1c2VyL2tlcm5lbCB0ZXN0IGZvciB0aGUgUElEIGhlcmUgYWxvbmcgd2l0aCB0aGUgUlcgdGVzdAorCSAqLworCWxpCXIxMSxfUEFHRV9QUkVTRU5UfF9QQUdFX0VYRUMJLyogQmFzZSBwZXJtICovCisJb3JpcwlyMTEscjExLF9QQUdFX0FDQ0VTU0VEQGgKKworCWNtcGxkaQljcjAscjE1LDAJCQkvKiBDaGVjayBmb3IgdXNlciByZWdpb24gKi8KKwlzdGQJcjE0LEVYX1RMQl9FU1IocjEyKQkJLyogd3JpdGUgY3JhenkgLTEgdG8gZnJhbWUgKi8KKwliZXEJbm9ybWFsX3RsYl9taXNzCisJLyogWFhYIHJlcGxhY2UgdGhlIFJNVyBjeWNsZXMgd2l0aCBpbW1lZGlhdGUgbG9hZHMgKyB3cml0ZXMgKi8KKzE6CW1mc3ByCXIxMCxTUFJOX01BUzEKKwljbXBsZGkJY3IwLHIxNSw4CQkJLyogQ2hlY2sgZm9yIHZtYWxsb2MgcmVnaW9uICovCisJcmx3aW5tCXIxMCxyMTAsMCwxNiwxCQkJLyogQ2xlYXIgVElEICovCisJbXRzcHIJU1BSTl9NQVMxLHIxMAorCWJlcSsJbm9ybWFsX3RsYl9taXNzCisKKwkvKiBXZSBnb3QgYSBjcmFwcHkgYWRkcmVzcywganVzdCBmYXVsdCAqLworCVRMQl9NSVNTX1NUQVRTX0koTU1TVEFUX1RMQl9NSVNTX05PUk1fRkFVTFQpCisJVExCX01JU1NfRVBJTE9HX0VSUk9SCisJYglleGNfaW5zdHJ1Y3Rpb25fc3RvcmFnZV9ib29rM2UKKworLyoKKyAqIFRoaXMgaXMgdGhlIGd1dHMgb2YgdGhlIGZpcnN0LWxldmVsIFRMQiBtaXNzIGhhbmRsZXIgZm9yIGRpcmVjdAorICogbWlzc2VzLiBXZSBhcmUgZW50ZXJlZCB3aXRoOgorICoKKyAqIHIxNiA9IGZhdWx0aW5nIGFkZHJlc3MKKyAqIHIxNSA9IHJlZ2lvbiBJRAorICogcjE0ID0gY3JhcCAoZnJlZSB0byB1c2UpCisgKiByMTMgPSBQQUNBCisgKiByMTIgPSBUTEIgZXhjZXB0aW9uIGZyYW1lIGluIFBBQ0EKKyAqIHIxMSA9IFBURSBwZXJtaXNzaW9uIG1hc2sKKyAqIHIxMCA9IGNyYXAgKGZyZWUgdG8gdXNlKQorICovCitub3JtYWxfdGxiX21pc3M6CisJLyogU28gd2UgZmlyc3QgY29uc3RydWN0IHRoZSBwYWdlIHRhYmxlIGFkZHJlc3MuIFdlIGRvIHRoYXQgYnkKKwkgKiBzaGlmdGluZyB0aGUgYm90dG9tIG9mIHRoZSBhZGRyZXNzIChub3QgdGhlIHJlZ2lvbiBJRCkgYnkKKwkgKiBQQUdFX1NISUZULTMsIGNsZWFyaW5nIHRoZSBib3R0b20gMyBiaXRzIChnZXQgYSBQVEUgcHRyKSBhbmQKKwkgKiBvcidpbmcgdGhlIGZvdXJ0aCBoaWdoIGJpdC4KKwkgKgorCSAqIE5PVEU6IEZvciA2NEsgcGFnZXMsIHdlIGRvIHRoaW5ncyBzbGlnaHRseSBkaWZmZXJlbnRseSBpbgorCSAqIG9yZGVyIHRvIGhhbmRsZSB0aGUgd2VpcmQgcGFnZSB0YWJsZSBmb3JtYXQgdXNlZCBieSBsaW51eAorCSAqLworCW9yaQlyMTAscjE1LDB4MQorI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCisJLyogRm9yIHRoZSB0b3AgYml0cywgMTYgYnl0ZXMgcGVyIFBURSAqLworCXJsZGljbAlyMTQscjE2LDY0LShQQUdFX1NISUZULTQpLFBBR0VfU0hJRlQtNCs0CisJLyogTm93IGNyZWF0ZSB0aGUgYm90dG9tIGJpdHMgYXMgMCBpbiBwb3NpdGlvbiAweDgwMDAgYW5kCisJICogdGhlIHJlc3QgY2FsY3VsYXRlZCBmb3IgOCBieXRlcyBwZXIgUFRFCisJICovCisJcmxkaWNsCXIxNSxyMTYsNjQtKFBBR0VfU0hJRlQtMyksNjQtMTUKKwkvKiBJbnNlcnQgdGhlIGJvdHRvbSBiaXRzIGluICovCisJcmx3aW1pCXIxNCxyMTUsMCwxNiwzMQorI2Vsc2UKKwlybGRpY2wJcjE0LHIxNiw2NC0oUEFHRV9TSElGVC0zKSxQQUdFX1NISUZULTMrNAorI2VuZGlmCisJc2xkaQlyMTUscjEwLDYwCisJY2xycmRpCXIxNCxyMTQsMworCW9yCXIxMCxyMTUscjE0CisKK0JFR0lOX01NVV9GVFJfU0VDVElPTgorCS8qIFNldCB0aGUgVExCIHJlc2VydmF0aW9uIGFuZCBzZWFjaCBmb3IgZXhpc3RpbmcgZW50cnkuIFRoZW4gbG9hZAorCSAqIHRoZSBlbnRyeS4KKwkgKi8KKwlQUENfVExCU1JYX0RPVCgwLHIxNikKKwlsZAlyMTQsMChyMTApCisJYmVxCW5vcm1hbF90bGJfbWlzc19kb25lCitNTVVfRlRSX1NFQ1RJT05fRUxTRQorCWxkCXIxNCwwKHIxMCkKK0FMVF9NTVVfRlRSX1NFQ1RJT05fRU5EX0lGU0VUKE1NVV9GVFJfVVNFX1RMQlJTUlYpCisKK2ZpbmlzaF9ub3JtYWxfdGxiX21pc3M6CisJLyogQ2hlY2sgaWYgcmVxdWlyZWQgcGVybWlzc2lvbnMgYXJlIG1ldCAqLworCWFuZGMuCXIxNSxyMTEscjE0CisJYm5lLQlub3JtYWxfdGxiX21pc3NfYWNjZXNzX2ZhdWx0CisKKwkvKiBOb3cgd2UgYnVpbGQgdGhlIE1BUzoKKwkgKgorCSAqIE1BUyAwICAgOglGdWxseSBzZXR1cCB3aXRoIGRlZmF1bHRzIGluIE1BUzQgYW5kIFRMQm5DRkcKKwkgKiBNQVMgMSAgIDoJQWxtb3N0IGZ1bGx5IHNldHVwCisJICogICAgICAgICAgICAgICAtIFBJRCBhbHJlYWR5IHVwZGF0ZWQgYnkgY2FsbGVyIGlmIG5lY2Vzc2FyeQorCSAqICAgICAgICAgICAgICAgLSBUU0laRSBuZWVkIGNoYW5nZSBpZiAhYmFzZSBwYWdlIHNpemUsIG5vdAorCSAqICAgICAgICAgICAgICAgICB5ZXQgaW1wbGVtZW50ZWQgZm9yIG5vdworCSAqIE1BUyAyICAgOglEZWZhdWx0cyBub3QgdXNlZnVsLCBuZWVkIHRvIGJlIHJlZG9uZQorCSAqIE1BUyAzKzcgOglOZWVkcyB0byBiZSBkb25lCisJICoKKwkgKiBUT0RPOiBtaXggdXAgY29kZSBiZWxvdyBmb3IgYmV0dGVyIHNjaGVkdWxpbmcKKwkgKi8KKwljbHJyZGkJcjExLHIxNiwxMgkJLyogQ2xlYXIgbG93IGNyYXAgaW4gRUEgKi8KKwlybHdpbWkJcjExLHIxNCwzMi0xOSwyNywzMQkvKiBJbnNlcnQgV0lNR0UgKi8KKwltdHNwcglTUFJOX01BUzIscjExCisKKwkvKiBDaGVjayBwYWdlIHNpemUsIGlmIG5vdCBzdGFuZGFyZCwgdXBkYXRlIE1BUzEgKi8KKwlybGRpY2wJcjExLHIxNCw2NC04LDY0LTgKKyNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUworCWNtcGxkaQljcjAscjExLEJPT0szRV9QQUdFU1pfNjRLCisjZWxzZQorCWNtcGxkaQljcjAscjExLEJPT0szRV9QQUdFU1pfNEsKKyNlbmRpZgorCWJlcS0JMWYKKwltZnNwcglyMTEsU1BSTl9NQVMxCisJcmx3aW1pCXIxMSxyMTQsMzEsMjEsMjQKKwlybHdpbm0JcjExLHIxMSwwLDIxLDE5CisJbXRzcHIJU1BSTl9NQVMxLHIxMQorMToKKwkvKiBNb3ZlIFJQTiBpbiBwb3NpdGlvbiAqLworCXJsZGljcglyMTEscjE0LDY0LShQVEVfUlBOX1NISUZULVBBR0VfU0hJRlQpLDYzLVBBR0VfU0hJRlQKKwljbHJsZGkJcjE1LHIxMSwxMgkJLyogQ2xlYXIgY3JhcCBhdCB0aGUgdG9wICovCisJcmx3aW1pCXIxNSxyMTQsMzItOCwyMiwyNQkvKiBNb3ZlIGluIFUgYml0cyAqLworCXJsd2ltaQlyMTUscjE0LDMyLTIsMjYsMzEJLyogTW92ZSBpbiBCQVAgYml0cyAqLworCisJLyogTWFzayBvdXQgU1cgYW5kIFVXIGlmICFESVJUWSAoWFhYIG9wdGltaXplIHRoaXMgISkgKi8KKwlhbmRpLglyMTEscjE0LF9QQUdFX0RJUlRZCisJYm5lCTFmCisJbGkJcjExLE1BUzNfU1d8TUFTM19VVworCWFuZGMJcjE1LHIxNSxyMTEKKzE6CitCRUdJTl9NTVVfRlRSX1NFQ1RJT04KKwlzcmRpCXIxNixyMTUsMzIKKwltdHNwcglTUFJOX01BUzMscjE1CisJbXRzcHIJU1BSTl9NQVM3LHIxNgorTU1VX0ZUUl9TRUNUSU9OX0VMU0UKKwltdHNwcglTUFJOX01BUzdfTUFTMyxyMTUKK0FMVF9NTVVfRlRSX1NFQ1RJT05fRU5EX0lGQ0xSKE1NVV9GVFJfVVNFX1BBSVJFRF9NQVMpCisKKwl0bGJ3ZQorCitub3JtYWxfdGxiX21pc3NfZG9uZToKKwkvKiBXZSBkb24ndCBib3RoZXIgd2l0aCByZXN0b3JpbmcgREVBUiBvciBFU1Igc2luY2Ugd2Uga25vdyB3ZSBhcmUKKwkgKiBsZXZlbCAwIGFuZCBqdXN0IGdvaW5nIGJhY2sgdG8gdXNlcmxhbmQuIFRoZXkgYXJlIG9ubHkgbmVlZGVkCisJICogaWYgeW91IGFyZSBnb2luZyB0byB0YWtlIGFuIGFjY2VzcyBmYXVsdAorCSAqLworCVRMQl9NSVNTX1NUQVRTX1goTU1TVEFUX1RMQl9NSVNTX05PUk1fT0spCisJVExCX01JU1NfRVBJTE9HX1NVQ0NFU1MKKwlyZmkKKworbm9ybWFsX3RsYl9taXNzX2FjY2Vzc19mYXVsdDoKKwkvKiBXZSBuZWVkIHRvIGNoZWNrIGlmIGl0IHdhcyBhbiBpbnN0cnVjdGlvbiBtaXNzICovCisJYW5kaS4JcjEwLHIxMSxfUEFHRV9FWEVDCisJYm5lCTFmCisJbGQJcjE0LEVYX1RMQl9ERUFSKHIxMikKKwlsZAlyMTUsRVhfVExCX0VTUihyMTIpCisJbXRzcHIJU1BSTl9ERUFSLHIxNAorCW10c3ByCVNQUk5fRVNSLHIxNQorCVRMQl9NSVNTX1NUQVRTX0QoTU1TVEFUX1RMQl9NSVNTX05PUk1fRkFVTFQpCisJVExCX01JU1NfRVBJTE9HX0VSUk9SCisJYglleGNfZGF0YV9zdG9yYWdlX2Jvb2szZQorMToJVExCX01JU1NfU1RBVFNfSShNTVNUQVRfVExCX01JU1NfTk9STV9GQVVMVCkKKwlUTEJfTUlTU19FUElMT0dfRVJST1IKKwliCWV4Y19pbnN0cnVjdGlvbl9zdG9yYWdlX2Jvb2szZQorCisKKy8qCisgKiBUaGlzIGlzIHRoZSBndXRzIG9mIHRoZSBzZWNvbmQtbGV2ZWwgVExCIG1pc3MgaGFuZGxlciBmb3IgZGlyZWN0CisgKiBtaXNzZXMuIFdlIGFyZSBlbnRlcmVkIHdpdGg6CisgKgorICogcjE2ID0gdmlydHVhbCBwYWdlIHRhYmxlIGZhdWx0aW5nIGFkZHJlc3MKKyAqIHIxNSA9IHJlZ2lvbiAodG9wIDQgYml0cyBvZiBhZGRyZXNzKQorICogcjE0ID0gY3JhcCAoZnJlZSB0byB1c2UpCisgKiByMTMgPSBQQUNBCisgKiByMTIgPSBUTEIgZXhjZXB0aW9uIGZyYW1lIGluIFBBQ0EKKyAqIHIxMSA9IGNyYXAgKGZyZWUgdG8gdXNlKQorICogcjEwID0gY3JhcCAoZnJlZSB0byB1c2UpCisgKgorICogTm90ZSB0aGF0IHRoaXMgc2hvdWxkIG9ubHkgZXZlciBiZSBjYWxsZWQgYXMgYSBzZWNvbmQgbGV2ZWwgaGFuZGxlcgorICogd2l0aCB0aGUgY3VycmVudCBzY2hlbWUgd2hlbiB1c2luZyBTVyBsb2FkLgorICogVGhhdCBtZWFucyB3ZSBjYW4gYWx3YXlzIGdldCB0aGUgb3JpZ2luYWwgZmF1bHQgREVBUiBhdAorICogRVhfVExCX0RFQVItRVhfVExCX1NJWkUocjEyKQorICoKKyAqIEl0IGNhbiBiZSByZS1lbnRlcmVkIGJ5IHRoZSBsaW5lYXIgbWFwcGluZyBtaXNzIGhhbmRsZXIuIEhvd2V2ZXIsIHRvCisgKiBhdm9pZCB0b28gbXVjaCBjb21wbGljYXRpb24sIGl0IHdpbGwgcmVzdGFydCB0aGUgd2hvbGUgZmF1bHQgYXQgbGV2ZWwKKyAqIDAgc28gd2UgZG9uJ3QgY2FyZSB0b28gbXVjaCBhYm91dCBjbG9iYmVycworICoKKyAqIFhYWCBUaGF0IGNvZGUgd2FzIHdyaXR0ZW4gYmFjayB3aGVuIHdlIGNvdWxkbid0IGNsb2JiZXIgcjE0LiBXZSBjYW4gbm93LAorICogc28gd2UgY291bGQgcHJvYmFibHkgb3B0aW1pemUgdGhpbmdzIGEgYml0CisgKi8KK3ZpcnRfcGFnZV90YWJsZV90bGJfbWlzczoKKwkvKiBBcmUgd2UgaGl0dGluZyBhIGtlcm5lbCBwYWdlIHRhYmxlID8gKi8KKwlhbmRpLglyMTAscjE1LDB4OAorCisJLyogVGhlIGNvb2wgdGhpbmcgbm93IGlzIHRoYXQgcjEwIGNvbnRhaW5zIDAgZm9yIHVzZXIgYW5kIDggZm9yIGtlcm5lbCwKKwkgKiBhbmQgd2UgaGFwcGVuIHRvIGhhdmUgdGhlIHN3YXBwZXJfcGdfZGlyIGF0IG9mZnNldCA4IGZyb20gdGhlIHVzZXIKKwkgKiBwZ2RpciBpbiB0aGUgUEFDQSA6LSkuCisJICovCisJYWRkCXIxMSxyMTAscjEzCisKKwkvKiBJZiBrZXJuZWwsIHdlIG5lZWQgdG8gY2xlYXIgTUFTMSBUSUQgKi8KKwliZXEJMWYKKwkvKiBYWFggcmVwbGFjZSB0aGUgUk1XIGN5Y2xlcyB3aXRoIGltbWVkaWF0ZSBsb2FkcyArIHdyaXRlcyAqLworCW1mc3ByCXIxMCxTUFJOX01BUzEKKwlybHdpbm0JcjEwLHIxMCwwLDE2LDEJCQkvKiBDbGVhciBUSUQgKi8KKwltdHNwcglTUFJOX01BUzEscjEwCisxOgorQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCisJLyogU2VhcmNoIGlmIHdlIGFscmVhZHkgaGF2ZSBhIFRMQiBlbnRyeSBmb3IgdGhhdCB2aXJ0dWFsIGFkZHJlc3MsIGFuZAorCSAqIGlmIHdlIGRvLCBiYWlsIG91dC4KKwkgKi8KKwlQUENfVExCU1JYX0RPVCgwLHIxNikKKwliZXEJdmlydF9wYWdlX3RhYmxlX3RsYl9taXNzX2RvbmUKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZTRVQoTU1VX0ZUUl9VU0VfVExCUlNSVikKKworCS8qIE5vdywgd2UgbmVlZCB0byB3YWxrIHRoZSBwYWdlIHRhYmxlcy4gRmlyc3QgY2hlY2sgaWYgd2UgYXJlIGluCisJICogcmFuZ2UuCisJICovCisJcmxkaWNsLglyMTAscjE2LDY0LShWUFRFX0lOREVYX1NJWkUrMyksVlBURV9JTkRFWF9TSVpFKzMrNAorCWJuZS0JdmlydF9wYWdlX3RhYmxlX3RsYl9taXNzX2ZhdWx0CisKKwkvKiBHZXQgdGhlIFBHRCBwb2ludGVyICovCisJbGQJcjE1LFBBQ0FQR0QocjExKQorCWNtcGxkaQljcjAscjE1LDAKKwliZXEtCXZpcnRfcGFnZV90YWJsZV90bGJfbWlzc19mYXVsdAorCisJLyogR2V0IHRvIFBHRCBlbnRyeSAqLworCXJsZGljbAlyMTEscjE2LDY0LVZQVEVfUEdEX1NISUZULDY0LVBHRF9JTkRFWF9TSVpFLTMKKwljbHJyZGkJcjEwLHIxMSwzCisJbGR4CXIxNSxyMTAscjE1CisJY21wbGRpCWNyMCxyMTUsMAorCWJlcQl2aXJ0X3BhZ2VfdGFibGVfdGxiX21pc3NfZmF1bHQKKworI2lmbmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUworCS8qIEdldCB0byBQVUQgZW50cnkgKi8KKwlybGRpY2wJcjExLHIxNiw2NC1WUFRFX1BVRF9TSElGVCw2NC1QVURfSU5ERVhfU0laRS0zCisJY2xycmRpCXIxMCxyMTEsMworCWxkeAlyMTUscjEwLHIxNQorCWNtcGxkaQljcjAscjE1LDAKKwliZXEJdmlydF9wYWdlX3RhYmxlX3RsYl9taXNzX2ZhdWx0CisjZW5kaWYgLyogQ09ORklHX1BQQ182NEtfUEFHRVMgKi8KKworCS8qIEdldCB0byBQTUQgZW50cnkgKi8KKwlybGRpY2wJcjExLHIxNiw2NC1WUFRFX1BNRF9TSElGVCw2NC1QTURfSU5ERVhfU0laRS0zCisJY2xycmRpCXIxMCxyMTEsMworCWxkeAlyMTUscjEwLHIxNQorCWNtcGxkaQljcjAscjE1LDAKKwliZXEJdmlydF9wYWdlX3RhYmxlX3RsYl9taXNzX2ZhdWx0CisKKwkvKiBPaywgd2UncmUgYWxsIHJpZ2h0LCB3ZSBjYW4gbm93IGNyZWF0ZSBhIGtlcm5lbCB0cmFuc2xhdGlvbiBmb3IKKwkgKiBhIDRLIG9yIDY0SyBwYWdlIGZyb20gcjE2IC0+IHIxNS4KKwkgKi8KKwkvKiBOb3cgd2UgYnVpbGQgdGhlIE1BUzoKKwkgKgorCSAqIE1BUyAwICAgOglGdWxseSBzZXR1cCB3aXRoIGRlZmF1bHRzIGluIE1BUzQgYW5kIFRMQm5DRkcKKwkgKiBNQVMgMSAgIDoJQWxtb3N0IGZ1bGx5IHNldHVwCisJICogICAgICAgICAgICAgICAtIFBJRCBhbHJlYWR5IHVwZGF0ZWQgYnkgY2FsbGVyIGlmIG5lY2Vzc2FyeQorCSAqICAgICAgICAgICAgICAgLSBUU0laRSBmb3Igbm93IGlzIGJhc2UgcGFnZSBzaXplIGFsd2F5cworCSAqIE1BUyAyICAgOglVc2UgZGVmYXVsdHMKKwkgKiBNQVMgMys3IDoJTmVlZHMgdG8gYmUgZG9uZQorCSAqCisJICogU28gd2Ugb25seSBkbyBNQVMgMiBhbmQgMyBmb3Igbm93Li4uCisJICovCisJY2xybGRpCXIxMSxyMTUsNAkJLyogcmVtb3ZlIHJlZ2lvbiBJRCBmcm9tIFJQTiAqLworCW9yaQlyMTAscjExLDEJCS8qIE9yLWluIFNSICovCisKK0JFR0lOX01NVV9GVFJfU0VDVElPTgorCXNyZGkJcjE2LHIxMCwzMgorCW10c3ByCVNQUk5fTUFTMyxyMTAKKwltdHNwcglTUFJOX01BUzcscjE2CitNTVVfRlRSX1NFQ1RJT05fRUxTRQorCW10c3ByCVNQUk5fTUFTN19NQVMzLHIxMAorQUxUX01NVV9GVFJfU0VDVElPTl9FTkRfSUZDTFIoTU1VX0ZUUl9VU0VfUEFJUkVEX01BUykKKworCXRsYndlCisKK0JFR0lOX01NVV9GVFJfU0VDVElPTgordmlydF9wYWdlX3RhYmxlX3RsYl9taXNzX2RvbmU6CisKKwkvKiBXZSBoYXZlIG92ZXJyaWRlbiBNQVMyOkVQTiBidXQgY3VycmVudGx5IG91ciBwcmltYXJ5IFRMQiBtaXNzCisJICogaGFuZGxlciB3aWxsIGFsd2F5cyByZXN0b3JlIGl0IHNvIHRoYXQgc2hvdWxkIG5vdCBiZSBhbiBpc3N1ZSwKKwkgKiBpZiB3ZSBldmVyIG9wdGltaXplIHRoZSBwcmltYXJ5IGhhbmRsZXIgdG8gbm90IHdyaXRlIE1BUzIgb24KKwkgKiBzb21lIGNhc2VzLCB3ZSdsbCBoYXZlIHRvIHJlc3RvcmUgTUFTMjpFUE4gaGVyZSBiYXNlZCBvbiB0aGUKKwkgKiBvcmlnaW5hbCBmYXVsdCdzIERFQVIuIElmIHdlIGRvIHRoYXQgd2UgaGF2ZSB0byBtb2RpZnkgdGhlCisJICogSVRMQiBtaXNzIGhhbmRsZXIgdG8gYWxzbyBzdG9yZSBTUlIwIGluIHRoZSBleGNlcHRpb24gZnJhbWUKKwkgKiBhcyBERUFSLgorCSAqCisJICogSG93ZXZlciwgb25lIG5hc3R5IHRoaW5nIHdlIGRpZCBpcyB3ZSBjbGVhcmVkIHRoZSByZXNlcnZhdGlvbgorCSAqICh3ZWxsLCBwb3RlbnRpYWxseSB3ZSBkaWQpLiBXZSBkbyBhIHRyaWNrIGhlcmUgdGh1cyBpZiB3ZQorCSAqIGFyZSBub3QgYSBsZXZlbCAwIGV4Y2VwdGlvbiAod2UgaW50ZXJydXB0ZWQgdGhlIFRMQiBtaXNzKSB3ZQorCSAqIG9mZnNldCB0aGUgcmV0dXJuIGFkZHJlc3MgYnkgLTQgaW4gb3JkZXIgdG8gcmVwbGF5IHRoZSB0bGJzcngKKwkgKiBpbnN0cnVjdGlvbiB0aGVyZQorCSAqLworCXN1YmYJcjEwLHIxMyxyMTIKKwljbXBsZGkJY3IwLHIxMCxQQUNBX0VYVExCK0VYX1RMQl9TSVpFCisJYm5lLQkxZgorCWxkCXIxMSxQQUNBX0VYVExCK0VYX1RMQl9TSVpFK0VYX1RMQl9TUlIwKHIxMykKKwlhZGRpCXIxMCxyMTEsLTQKKwlzdGQJcjEwLFBBQ0FfRVhUTEIrRVhfVExCX1NJWkUrRVhfVExCX1NSUjAocjEzKQorMToKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZTRVQoTU1VX0ZUUl9VU0VfVExCUlNSVikKKwkvKiBSZXR1cm4gdG8gY2FsbGVyLCBub3JtYWwgY2FzZSAqLworCVRMQl9NSVNTX1NUQVRTX1goTU1TVEFUX1RMQl9NSVNTX1BUX09LKTsKKwlUTEJfTUlTU19FUElMT0dfU1VDQ0VTUworCXJmaQorCit2aXJ0X3BhZ2VfdGFibGVfdGxiX21pc3NfZmF1bHQ6CisJLyogSWYgd2UgZmF1bHQgaGVyZSwgdGhpbmdzIGFyZSBhIGxpdHRsZSBiaXQgdHJpY2t5LiBXZSBuZWVkIHRvIGNhbGwKKwkgKiBlaXRoZXIgZGF0YSBvciBpbnN0cnVjdGlvbiBzdG9yZSBmYXVsdCwgYW5kIHdlIG5lZWQgdG8gcmV0cmVpdmUKKwkgKiB0aGUgb3JpZ2luYWwgZmF1bHQgYWRkcmVzcyBhbmQgRVNSIChmb3IgZGF0YSkuCisJICoKKwkgKiBUaGUgdGhpbmcgaXMsIHdlIGtub3cgdGhhdCBpbiBub3JtYWwgY2lyY3Vtc3RhbmNlcywgdGhpcyBpcworCSAqIGFsd2F5cyBjYWxsZWQgYXMgYSBzZWNvbmQgbGV2ZWwgdGxiIG1pc3MgZm9yIFNXIGxvYWQgb3IgYXMgYSBmaXJzdAorCSAqIGxldmVsIFRMQiBtaXNzIGZvciBIVyBsb2FkLCBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBwZWVrIGF0IHRoZQorCSAqIHJlbGV2YW50IGluZm9ybWF0aW9ucyBpbiB0aGUgZmlyc3QgZXhjZXB0aW9uIGZyYW1lIGluIHRoZSBQQUNBLgorCSAqCisJICogSG93ZXZlciwgd2UgZG8gbmVlZCB0byBkb3VibGUgY2hlY2sgdGhhdCwgYmVjYXVzZSB3ZSBtYXkganVzdCBoaXQKKwkgKiBhIHN0cmF5IGtlcm5lbCBwb2ludGVyIG9yIGEgdXNlcmxhbmQgYXR0YWNrIHRyeWluZyB0byBoaXQgdGhvc2UKKwkgKiBhcmVhcy4gSWYgdGhhdCBpcyB0aGUgY2FzZSwgd2UgZG8gYSBkYXRhIGZhdWx0LiAoV2UgY2FuJ3QgZ2V0IGhlcmUKKwkgKiBmcm9tIGFuIGluc3RydWN0aW9uIHRsYiBtaXNzIGFueXdheSkuCisJICoKKwkgKiBOb3RlIGFsc28gdGhhdCB3aGVuIGdvaW5nIHRvIGEgZmF1bHQsIHdlIG11c3QgdW53aW5kIHRoZSBwcmV2aW91cworCSAqIGxldmVsIGFzIHdlbGwuIFNpbmNlIHdlIGFyZSBkb2luZyB0aGF0LCB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyIG9yCisJICogcmVzdG9yZSB0aGUgVExCIHJlc2VydmF0aW9uIG5laXRoZXIuCisJICovCisJc3ViZglyMTAscjEzLHIxMgorCWNtcGxkaQljcjAscjEwLFBBQ0FfRVhUTEIrRVhfVExCX1NJWkUKKwlibmUtCXZpcnRfcGFnZV90YWJsZV90bGJfbWlzc193aGFja29fZmF1bHQKKworCS8qIFdlIGRpZyB0aGUgb3JpZ2luYWwgREVBUiBhbmQgRVNSIGZyb20gc2xvdCAwICovCisJbGQJcjE1LEVYX1RMQl9ERUFSK1BBQ0FfRVhUTEIocjEzKQorCWxkCXIxNixFWF9UTEJfRVNSK1BBQ0FfRVhUTEIocjEzKQorCisJLyogV2UgY2hlY2sgZm9yIHRoZSAic3BlY2lhbCIgRVNSIHZhbHVlIGZvciBpbnN0cnVjdGlvbiBmYXVsdHMgKi8KKwljbXBkaQljcjAscjE2LC0xCisJYmVxCTFmCisJbXRzcHIJU1BSTl9ERUFSLHIxNQorCW10c3ByCVNQUk5fRVNSLHIxNgorCVRMQl9NSVNTX1NUQVRTX0QoTU1TVEFUX1RMQl9NSVNTX1BUX0ZBVUxUKTsKKwlUTEJfTUlTU19FUElMT0dfRVJST1IKKwliCWV4Y19kYXRhX3N0b3JhZ2VfYm9vazNlCisxOglUTEJfTUlTU19TVEFUU19JKE1NU1RBVF9UTEJfTUlTU19QVF9GQVVMVCk7CisJVExCX01JU1NfRVBJTE9HX0VSUk9SCisJYglleGNfaW5zdHJ1Y3Rpb25fc3RvcmFnZV9ib29rM2UKKwordmlydF9wYWdlX3RhYmxlX3RsYl9taXNzX3doYWNrb19mYXVsdDoKKwkvKiBUaGUgbGluZWFyIGZhdWx0IHdpbGwgcmVzdGFydCBldmVyeXRoaW5nIHNvIEVTUiBhbmQgREVBUiB3aWxsCisJICogbm90IGhhdmUgYmVlbiBjbG9iYmVyZWQsIGxldCdzIGp1c3QgZmF1bHQgd2l0aCB3aGF0IHdlIGhhdmUKKwkgKi8KKwlUTEJfTUlTU19TVEFUU19YKE1NU1RBVF9UTEJfTUlTU19QVF9GQVVMVCk7CisJVExCX01JU1NfRVBJTE9HX0VSUk9SCisJYglleGNfZGF0YV9zdG9yYWdlX2Jvb2szZQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUTEIgbWlzcyBoYW5kbGluZyBmb3IgQm9vazNFIHdpdGggaHcgcGFnZSB0YWJsZSBzdXBwb3J0ICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qIERhdGEgVExCIG1pc3MgKi8KKwlTVEFSVF9FWENFUFRJT04oZGF0YV90bGJfbWlzc19odHcpCisJVExCX01JU1NfUFJPTE9HCisKKwkvKiBOb3cgd2UgaGFuZGxlIHRoZSBmYXVsdCBwcm9wZXIuIFdlIG9ubHkgc2F2ZSBERUFSIGluIG5vcm1hbAorCSAqIGZhdWx0IGNhc2Ugc2luY2UgdGhhdCdzIHRoZSBvbmx5IGludGVyZXN0aW5nIHZhbHVlcyBoZXJlLgorCSAqIFdlIGNvdWxkIHByb2JhYmx5IGFsc28gb3B0aW1pemUgYnkgbm90IHNhdmluZyBTUlIwLzEgaW4gdGhlCisJICogbGluZWFyIG1hcHBpbmcgY2FzZSBidXQgSSdsbCBsZWF2ZSB0aGF0IGZvciBsYXRlcgorCSAqLworCW1mc3ByCXIxNCxTUFJOX0VTUgorCW1mc3ByCXIxNixTUFJOX0RFQVIJCS8qIGdldCBmYXVsdGluZyBhZGRyZXNzICovCisJc3JkaQlyMTEscjE2LDYwCQkvKiBnZXQgcmVnaW9uICovCisJY21wbGRpCWNyMCxyMTEsMHhjCQkvKiBsaW5lYXIgbWFwcGluZyA/ICovCisJVExCX01JU1NfU1RBVFNfU0FWRV9JTkZPCisJYmVxCXRsYl9sb2FkX2xpbmVhcgkJLyogeWVzIC0+IGdvIHRvIGxpbmVhciBtYXAgbG9hZCAqLworCisJLyogV2UgZG8gdGhlIHVzZXIva2VybmVsIHRlc3QgZm9yIHRoZSBQSUQgaGVyZSBhbG9uZyB3aXRoIHRoZSBSVyB0ZXN0CisJICovCisJY21wbGRpCWNyMCxyMTEsMAkJLyogQ2hlY2sgZm9yIHVzZXIgcmVnaW9uICovCisJbGQJcjE1LFBBQ0FQR0QocjEzKQkvKiBMb2FkIHVzZXIgcGdkaXIgKi8KKwliZXEJaHR3X3RsYl9taXNzCisKKwkvKiBYWFggcmVwbGFjZSB0aGUgUk1XIGN5Y2xlcyB3aXRoIGltbWVkaWF0ZSBsb2FkcyArIHdyaXRlcyAqLworMToJbWZzcHIJcjEwLFNQUk5fTUFTMQorCWNtcGxkaQljcjAscjExLDgJCS8qIENoZWNrIGZvciB2bWFsbG9jIHJlZ2lvbiAqLworCXJsd2lubQlyMTAscjEwLDAsMTYsMQkJLyogQ2xlYXIgVElEICovCisJbXRzcHIJU1BSTl9NQVMxLHIxMAorCWxkCXIxNSxQQUNBX0tFUk5FTFBHRChyMTMpCS8qIExvYWQga2VybmVsIHBnZGlyICovCisJYmVxKwlodHdfdGxiX21pc3MKKworCS8qIFdlIGdvdCBhIGNyYXBweSBhZGRyZXNzLCBqdXN0IGZhdWx0IHdpdGggd2hhdGV2ZXIgREVBUiBhbmQgRVNSCisJICogYXJlIGhlcmUKKwkgKi8KKwlUTEJfTUlTU19TVEFUU19EKE1NU1RBVF9UTEJfTUlTU19OT1JNX0ZBVUxUKQorCVRMQl9NSVNTX0VQSUxPR19FUlJPUgorCWIJZXhjX2RhdGFfc3RvcmFnZV9ib29rM2UKKworLyogSW5zdHJ1Y3Rpb24gVExCIG1pc3MgKi8KKwlTVEFSVF9FWENFUFRJT04oaW5zdHJ1Y3Rpb25fdGxiX21pc3NfaHR3KQorCVRMQl9NSVNTX1BST0xPRworCisJLyogSWYgd2UgdGFrZSBhIHJlY3Vyc2l2ZSBmYXVsdCwgdGhlIHNlY29uZCBsZXZlbCBoYW5kbGVyIG1heSBuZWVkCisJICogdG8ga25vdyB3aGV0aGVyIHdlIGFyZSBoYW5kbGluZyBhIGRhdGEgb3IgaW5zdHJ1Y3Rpb24gZmF1bHQgaW4KKwkgKiBvcmRlciB0byBnZXQgdG8gdGhlIHJpZ2h0IHN0b3JlIGZhdWx0IGhhbmRsZXIuIFdlIHByb3ZpZGUgdGhhdAorCSAqIGluZm8gYnkga2VlcGluZyBhIGNyYXp5IHZhbHVlIGZvciBFU1IgaW4gcjE0CisJICovCisJbGkJcjE0LC0xCS8qIHN0b3JlIHRvIGV4Y2VwdGlvbiBmcmFtZSBpcyBkb25lIGxhdGVyICovCisKKwkvKiBOb3cgd2UgaGFuZGxlIHRoZSBmYXVsdCBwcm9wZXIuIFdlIG9ubHkgc2F2ZSBERUFSIGluIHRoZSBub24KKwkgKiBsaW5lYXIgbWFwcGluZyBjYXNlIHNpbmNlIHdlIGtub3cgdGhlIGxpbmVhciBtYXBwaW5nIGNhc2Ugd2lsbAorCSAqIG5vdCByZS1lbnRlci4gV2UgY291bGQgaW5kZWVkIG9wdGltaXplIGFuZCBhbHNvIG5vdCBzYXZlIFNSUjAvMQorCSAqIGluIHRoZSBsaW5lYXIgbWFwcGluZyBjYXNlIGJ1dCBJJ2xsIGxlYXZlIHRoYXQgZm9yIGxhdGVyCisJICoKKwkgKiBGYXVsdGluZyBhZGRyZXNzIGlzIFNSUjAgd2hpY2ggaXMgYWxyZWFkeSBpbiByMTYKKwkgKi8KKwlzcmRpCXIxMSxyMTYsNjAJCS8qIGdldCByZWdpb24gKi8KKwljbXBsZGkJY3IwLHIxMSwweGMJCS8qIGxpbmVhciBtYXBwaW5nID8gKi8KKwlUTEJfTUlTU19TVEFUU19TQVZFX0lORk8KKwliZXEJdGxiX2xvYWRfbGluZWFyCQkvKiB5ZXMgLT4gZ28gdG8gbGluZWFyIG1hcCBsb2FkICovCisKKwkvKiBXZSBkbyB0aGUgdXNlci9rZXJuZWwgdGVzdCBmb3IgdGhlIFBJRCBoZXJlIGFsb25nIHdpdGggdGhlIFJXIHRlc3QKKwkgKi8KKwljbXBsZGkJY3IwLHIxMSwwCQkJLyogQ2hlY2sgZm9yIHVzZXIgcmVnaW9uICovCisJbGQJcjE1LFBBQ0FQR0QocjEzKQkJLyogTG9hZCB1c2VyIHBnZGlyICovCisJYmVxCWh0d190bGJfbWlzcworCisJLyogWFhYIHJlcGxhY2UgdGhlIFJNVyBjeWNsZXMgd2l0aCBpbW1lZGlhdGUgbG9hZHMgKyB3cml0ZXMgKi8KKzE6CW1mc3ByCXIxMCxTUFJOX01BUzEKKwljbXBsZGkJY3IwLHIxMSw4CQkJLyogQ2hlY2sgZm9yIHZtYWxsb2MgcmVnaW9uICovCisJcmx3aW5tCXIxMCxyMTAsMCwxNiwxCQkJLyogQ2xlYXIgVElEICovCisJbXRzcHIJU1BSTl9NQVMxLHIxMAorCWxkCXIxNSxQQUNBX0tFUk5FTFBHRChyMTMpCQkvKiBMb2FkIGtlcm5lbCBwZ2RpciAqLworCWJlcSsJaHR3X3RsYl9taXNzCisKKwkvKiBXZSBnb3QgYSBjcmFwcHkgYWRkcmVzcywganVzdCBmYXVsdCAqLworCVRMQl9NSVNTX1NUQVRTX0koTU1TVEFUX1RMQl9NSVNTX05PUk1fRkFVTFQpCisJVExCX01JU1NfRVBJTE9HX0VSUk9SCisJYglleGNfaW5zdHJ1Y3Rpb25fc3RvcmFnZV9ib29rM2UKKworCisvKgorICogVGhpcyBpcyB0aGUgZ3V0cyBvZiB0aGUgc2Vjb25kLWxldmVsIFRMQiBtaXNzIGhhbmRsZXIgZm9yIGRpcmVjdAorICogbWlzc2VzLiBXZSBhcmUgZW50ZXJlZCB3aXRoOgorICoKKyAqIHIxNiA9IHZpcnR1YWwgcGFnZSB0YWJsZSBmYXVsdGluZyBhZGRyZXNzCisgKiByMTUgPSBQR0QgcG9pbnRlcgorICogcjE0ID0gRVNSCisgKiByMTMgPSBQQUNBCisgKiByMTIgPSBUTEIgZXhjZXB0aW9uIGZyYW1lIGluIFBBQ0EKKyAqIHIxMSA9IGNyYXAgKGZyZWUgdG8gdXNlKQorICogcjEwID0gY3JhcCAoZnJlZSB0byB1c2UpCisgKgorICogSXQgY2FuIGJlIHJlLWVudGVyZWQgYnkgdGhlIGxpbmVhciBtYXBwaW5nIG1pc3MgaGFuZGxlci4gSG93ZXZlciwgdG8KKyAqIGF2b2lkIHRvbyBtdWNoIGNvbXBsaWNhdGlvbiwgaXQgd2lsbCBzYXZlL3Jlc3RvcmUgdGhpbmdzIGZvciB1cworICovCitodHdfdGxiX21pc3M6CisJLyogU2VhcmNoIGlmIHdlIGFscmVhZHkgaGF2ZSBhIFRMQiBlbnRyeSBmb3IgdGhhdCB2aXJ0dWFsIGFkZHJlc3MsIGFuZAorCSAqIGlmIHdlIGRvLCBiYWlsIG91dC4KKwkgKgorCSAqIE1BUzE6SU5EIHNob3VsZCBiZSBhbHJlYWR5IHNldCBiYXNlZCBvbiBNQVM0CisJICovCisJUFBDX1RMQlNSWF9ET1QoMCxyMTYpCisJYmVxCWh0d190bGJfbWlzc19kb25lCisKKwkvKiBOb3csIHdlIG5lZWQgdG8gd2FsayB0aGUgcGFnZSB0YWJsZXMuIEZpcnN0IGNoZWNrIGlmIHdlIGFyZSBpbgorCSAqIHJhbmdlLgorCSAqLworCXJsZGljbC4JcjEwLHIxNiw2NC1QR1RBQkxFX0VBRERSX1NJWkUsUEdUQUJMRV9FQUREUl9TSVpFKzQKKwlibmUtCWh0d190bGJfbWlzc19mYXVsdAorCisJLyogR2V0IHRoZSBQR0QgcG9pbnRlciAqLworCWNtcGxkaQljcjAscjE1LDAKKwliZXEtCWh0d190bGJfbWlzc19mYXVsdAorCisJLyogR2V0IHRvIFBHRCBlbnRyeSAqLworCXJsZGljbAlyMTEscjE2LDY0LShQR0RJUl9TSElGVC0zKSw2NC1QR0RfSU5ERVhfU0laRS0zCisJY2xycmRpCXIxMCxyMTEsMworCWxkeAlyMTUscjEwLHIxNQorCWNtcGxkaQljcjAscjE1LDAKKwliZXEJaHR3X3RsYl9taXNzX2ZhdWx0CisKKyNpZm5kZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKKwkvKiBHZXQgdG8gUFVEIGVudHJ5ICovCisJcmxkaWNsCXIxMSxyMTYsNjQtKFBVRF9TSElGVC0zKSw2NC1QVURfSU5ERVhfU0laRS0zCisJY2xycmRpCXIxMCxyMTEsMworCWxkeAlyMTUscjEwLHIxNQorCWNtcGxkaQljcjAscjE1LDAKKwliZXEJaHR3X3RsYl9taXNzX2ZhdWx0CisjZW5kaWYgLyogQ09ORklHX1BQQ182NEtfUEFHRVMgKi8KKworCS8qIEdldCB0byBQTUQgZW50cnkgKi8KKwlybGRpY2wJcjExLHIxNiw2NC0oUE1EX1NISUZULTMpLDY0LVBNRF9JTkRFWF9TSVpFLTMKKwljbHJyZGkJcjEwLHIxMSwzCisJbGR4CXIxNSxyMTAscjE1CisJY21wbGRpCWNyMCxyMTUsMAorCWJlcQlodHdfdGxiX21pc3NfZmF1bHQKKworCS8qIE9rLCB3ZSdyZSBhbGwgcmlnaHQsIHdlIGNhbiBub3cgY3JlYXRlIGFuIGluZGlyZWN0IGVudHJ5IGZvcgorCSAqIGEgMU0gb3IgMjU2TSBwYWdlLgorCSAqCisJICogVGhlIGxhc3QgdHJpY2sgaXMgbm93IHRoYXQgYmVjYXVzZSB3ZSB1c2UgImhhbGYiIHBhZ2VzIGZvcgorCSAqIHRoZSBIVFcgKDFNIElORCBpcyAySyBhbmQgMjU2TSBJTkQgaXMgMzJLKSB3ZSBuZWVkIHRvIGFjY291bnQKKwkgKiBmb3IgYW4gYWRkZWQgTFNCIGJpdCB0byB0aGUgUlBOLiBGb3IgNjRLIHBhZ2VzLCB0aGVyZSBpcyBubworCSAqIHByb2JsZW0gYXMgd2UgYWxyZWFkeSB1c2UgMzJLIGFycmF5cyAoaGFsZiBQVEUgcGFnZXMpLCBidXQgZm9yCisJICogNEsgcGFnZSB3ZSBuZWVkIHRvIGV4dHJhY3QgYSBiaXQgZnJvbSB0aGUgdmlydHVhbCBhZGRyZXNzIGFuZAorCSAqIGluc2VydCBpdCBpbnRvIHRoZSAiUEE1MiIgYml0IG9mIHRoZSBSUE4uCisJICovCisjaWZuZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCisJcmx3aW1pCXIxNSxyMTYsMzItOSwyMCwyMAorI2VuZGlmCisJLyogTm93IHdlIGJ1aWxkIHRoZSBNQVM6CisJICoKKwkgKiBNQVMgMCAgIDoJRnVsbHkgc2V0dXAgd2l0aCBkZWZhdWx0cyBpbiBNQVM0IGFuZCBUTEJuQ0ZHCisJICogTUFTIDEgICA6CUFsbW9zdCBmdWxseSBzZXR1cAorCSAqICAgICAgICAgICAgICAgLSBQSUQgYWxyZWFkeSB1cGRhdGVkIGJ5IGNhbGxlciBpZiBuZWNlc3NhcnkKKwkgKiAgICAgICAgICAgICAgIC0gVFNJWkUgZm9yIG5vdyBpcyBiYXNlIGluZCBwYWdlIHNpemUgYWx3YXlzCisJICogTUFTIDIgICA6CVVzZSBkZWZhdWx0cworCSAqIE1BUyAzKzcgOglOZWVkcyB0byBiZSBkb25lCisJICovCisjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKKwlvcmkJcjEwLHIxNSwoQk9PSzNFX1BBR0VTWl82NEsgPDwgTUFTM19TUFNJWkVfU0hJRlQpCisjZWxzZQorCW9yaQlyMTAscjE1LChCT09LM0VfUEFHRVNaXzRLIDw8IE1BUzNfU1BTSVpFX1NISUZUKQorI2VuZGlmCisKK0JFR0lOX01NVV9GVFJfU0VDVElPTgorCXNyZGkJcjE2LHIxMCwzMgorCW10c3ByCVNQUk5fTUFTMyxyMTAKKwltdHNwcglTUFJOX01BUzcscjE2CitNTVVfRlRSX1NFQ1RJT05fRUxTRQorCW10c3ByCVNQUk5fTUFTN19NQVMzLHIxMAorQUxUX01NVV9GVFJfU0VDVElPTl9FTkRfSUZDTFIoTU1VX0ZUUl9VU0VfUEFJUkVEX01BUykKKworCXRsYndlCisKK2h0d190bGJfbWlzc19kb25lOgorCS8qIFdlIGRvbid0IGJvdGhlciB3aXRoIHJlc3RvcmluZyBERUFSIG9yIEVTUiBzaW5jZSB3ZSBrbm93IHdlIGFyZQorCSAqIGxldmVsIDAgYW5kIGp1c3QgZ29pbmcgYmFjayB0byB1c2VybGFuZC4gVGhleSBhcmUgb25seSBuZWVkZWQKKwkgKiBpZiB5b3UgYXJlIGdvaW5nIHRvIHRha2UgYW4gYWNjZXNzIGZhdWx0CisJICovCisJVExCX01JU1NfU1RBVFNfWChNTVNUQVRfVExCX01JU1NfUFRfT0spCisJVExCX01JU1NfRVBJTE9HX1NVQ0NFU1MKKwlyZmkKKworaHR3X3RsYl9taXNzX2ZhdWx0OgorCS8qIFdlIG5lZWQgdG8gY2hlY2sgaWYgaXQgd2FzIGFuIGluc3RydWN0aW9uIG1pc3MuIFdlIGtub3cgdGhpcworCSAqIHRob3VnaCBiZWNhdXNlIHIxNCB3b3VsZCBjb250YWluIC0xCisJICovCisJY21wZGkJY3IwLHIxNCwtMQorCWJlcQkxZgorCW10c3ByCVNQUk5fREVBUixyMTYKKwltdHNwcglTUFJOX0VTUixyMTQKKwlUTEJfTUlTU19TVEFUU19EKE1NU1RBVF9UTEJfTUlTU19QVF9GQVVMVCkKKwlUTEJfTUlTU19FUElMT0dfRVJST1IKKwliCWV4Y19kYXRhX3N0b3JhZ2VfYm9vazNlCisxOglUTEJfTUlTU19TVEFUU19JKE1NU1RBVF9UTEJfTUlTU19QVF9GQVVMVCkKKwlUTEJfTUlTU19FUElMT0dfRVJST1IKKwliCWV4Y19pbnN0cnVjdGlvbl9zdG9yYWdlX2Jvb2szZQorCisvKgorICogVGhpcyBpcyB0aGUgZ3V0cyBvZiAiYW55IiBsZXZlbCBUTEIgbWlzcyBoYW5kbGVyIGZvciBrZXJuZWwgbGluZWFyCisgKiBtYXBwaW5nIG1pc3Nlcy4gV2UgYXJlIGVudGVyZWQgd2l0aDoKKyAqCisgKgorICogcjE2ID0gZmF1bHRpbmcgYWRkcmVzcworICogcjE1ID0gY3JhcCAoZnJlZSB0byB1c2UpCisgKiByMTQgPSBFU1IgKGRhdGEpIG9yIC0xIChpbnN0cnVjdGlvbikKKyAqIHIxMyA9IFBBQ0EKKyAqIHIxMiA9IFRMQiBleGNlcHRpb24gZnJhbWUgaW4gUEFDQQorICogcjExID0gY3JhcCAoZnJlZSB0byB1c2UpCisgKiByMTAgPSBjcmFwIChmcmVlIHRvIHVzZSkKKyAqCisgKiBJbiBhZGRpdGlvbiB3ZSBrbm93IHRoYXQgd2Ugd2lsbCBub3QgcmUtZW50ZXIsIHNvIGluIHRoZW9yeSwgd2UgY291bGQKKyAqIHVzZSBhIHNpbXBsZXIgZXBpbG9nIG5vdCByZXN0b3JpbmcgU1JSMC8xIGV0Yy4uIGJ1dCB3ZSdsbCBkbyB0aGF0IGxhdGVyLgorICoKKyAqIFdlIGFsc28gbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IE1BUyByZWdpc3RlcnMgaGVyZSAmIFRMQiByZXNlcnZhdGlvbiwKKyAqIGFzIHdlIGtub3cgd2UnbGwgaGF2ZSBjbG9iYmVyZWQgdGhlbSBpZiB3ZSBpbnRlcnJ1cHQgdGhlIG1haW4gVExCIG1pc3MKKyAqIGhhbmRsZXJzIGluIHdoaWNoIGNhc2Ugd2UgcHJvYmFibHkgd2FudCB0byBkbyBhIGZ1bGwgcmVzdGFydCBhdCBsZXZlbAorICogMCByYXRoZXIgdGhhbiBzYXZpbmcgLyByZXN0b3JpbmcgdGhlIE1BUy4KKyAqCisgKiBOb3RlOiBJZiB3ZSBjYXJlIGFib3V0IHBlcmZvcm1hbmNlIG9mIHRoYXQgY29yZSwgd2UgY2FuIGVhc2lseSBzaHVmZmxlCisgKiAgICAgICBhIGZldyB0aGluZ3MgYXJvdW5kCisgKi8KK3RsYl9sb2FkX2xpbmVhcjoKKwkvKiBGb3Igbm93LCB3ZSBhc3N1bWUgdGhlIGxpbmVhciBtYXBwaW5nIGlzIGNvbnRpZ3VvdXMgYW5kIHN0b3BzIGF0CisJICogbGluZWFyX21hcF90b3AuIFdlIGFsc28gYXNzdW1lIHRoZSBzaXplIGlzIGEgbXVsdGlwbGUgb2YgMUcsIHRodXMKKwkgKiB3ZSBvbmx5IHVzZSAxRyBwYWdlcyBmb3Igbm93LiBUaGF0IG1pZ2h0IGhhdmUgdG8gYmUgY2hhbmdlZCBpbiBhCisJICogZmluYWwgaW1wbGVtZW50YXRpb24sIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggaHlwZXJ2aXNvcnMKKwkgKi8KKwlsZAlyMTEsUEFDQVRPQyhyMTMpCisJbGQJcjExLGxpbmVhcl9tYXBfdG9wQGdvdChyMTEpCisJbGQJcjEwLDAocjExKQorCWNtcGxkCWNyMCxyMTAscjE2CisJYmdlCXRsYl9sb2FkX2xpbmVhcl9mYXVsdAorCisJLyogTUFTMSBuZWVkIHdob2xlIG5ldyBzZXR1cC4gKi8KKwlsaQlyMTUsKEJPT0szRV9QQUdFU1pfMUdCPDxNQVMxX1RTSVpFX1NISUZUKQorCW9yaXMJcjE1LHIxNSxNQVMxX1ZBTElEQGgJLyogTUFTMSBuZWVkcyBWIGFuZCBUU0laRSAqLworCW10c3ByCVNQUk5fTUFTMSxyMTUKKworCS8qIEFscmVhZHkgc29tZWJvZHkgdGhlcmUgPyAqLworCVBQQ19UTEJTUlhfRE9UKDAscjE2KQorCWJlcQl0bGJfbG9hZF9saW5lYXJfZG9uZQorCisJLyogTm93IHdlIGJ1aWxkIHRoZSByZW1haW5pbmcgTUFTLiBNQVMwIGFuZCAyIHNob3VsZCBiZSBmaW5lCisJICogd2l0aCB0aGVpciBkZWZhdWx0cywgd2hpY2ggbGVhdmVzIHVzIHdpdGggTUFTIDMgYW5kIDcuIFRoZQorCSAqIG1hcHBpbmcgaXMgbGluZWFyLCBzbyB3ZSBqdXN0IHRha2UgdGhlIGFkZHJlc3MsIGNsZWFyIHRoZQorCSAqIHJlZ2lvbiBiaXRzLCBhbmQgb3IgaW4gdGhlIHBlcm1pc3Npb24gYml0cyB3aGljaCBhcmUgY3VycmVudGx5CisJICogaGFyZCB3aXJlZAorCSAqLworCWNscnJkaQlyMTAscjE2LDMwCQkvKiAxRyBwYWdlIGluZGV4ICovCisJY2xybGRpCXIxMCxyMTAsNAkJLyogY2xlYXIgcmVnaW9uIGJpdHMgKi8KKwlvcmkJcjEwLHIxMCxNQVMzX1NSfE1BUzNfU1d8TUFTM19TWAorCitCRUdJTl9NTVVfRlRSX1NFQ1RJT04KKwlzcmRpCXIxNixyMTAsMzIKKwltdHNwcglTUFJOX01BUzMscjEwCisJbXRzcHIJU1BSTl9NQVM3LHIxNgorTU1VX0ZUUl9TRUNUSU9OX0VMU0UKKwltdHNwcglTUFJOX01BUzdfTUFTMyxyMTAKK0FMVF9NTVVfRlRSX1NFQ1RJT05fRU5EX0lGQ0xSKE1NVV9GVFJfVVNFX1BBSVJFRF9NQVMpCisKKwl0bGJ3ZQorCit0bGJfbG9hZF9saW5lYXJfZG9uZToKKwkvKiBXZSB1c2UgdGhlICJlcnJvciIgZXBpbG9nIGZvciBzdWNjZXNzIGFzIHdlIGRvIHdhbnQgdG8KKwkgKiByZXN0b3JlIHRvIHRoZSBpbml0aWFsIGZhdWx0aW5nIGNvbnRleHQsIHdoYXRldmVyIGl0IHdhcy4KKwkgKiBXZSBkbyB0aGF0IGJlY2F1c2Ugd2UgY2FuJ3QgcmVzdW1lIGEgZmF1bHQgd2l0aGluIGEgVExCCisJICogbWlzcyBoYW5kbGVyLCBkdWUgdG8gTUFTIGFuZCBUTEIgcmVzZXJ2YXRpb24gYmVpbmcgY2xvYmJlcmVkLgorCSAqLworCVRMQl9NSVNTX1NUQVRTX1goTU1TVEFUX1RMQl9NSVNTX0xJTkVBUikKKwlUTEJfTUlTU19FUElMT0dfRVJST1IKKwlyZmkKKwordGxiX2xvYWRfbGluZWFyX2ZhdWx0OgorCS8qIFdlIGtlZXAgdGhlIERFQVIgYW5kIEVTUiBhcm91bmQsIHRoaXMgc2hvdWxkbid0IGhhdmUgaGFwcGVuZWQgKi8KKwljbXBkaQljcjAscjE0LC0xCisJYmVxCTFmCisJVExCX01JU1NfRVBJTE9HX0VSUk9SX1NQRUNJQUwKKwliCWV4Y19kYXRhX3N0b3JhZ2VfYm9vazNlCisxOglUTEJfTUlTU19FUElMT0dfRVJST1JfU1BFQ0lBTAorCWIJZXhjX2luc3RydWN0aW9uX3N0b3JhZ2VfYm9vazNlCisKKworI2lmZGVmIENPTkZJR19CT09LM0VfTU1VX1RMQl9TVEFUUworLnRsYl9zdGF0X2luYzoKKzE6CWxkYXJ4CXI4LDAscjkKKwlhZGRpCXI4LHI4LDEKKwlzdGRjeC4JcjgsMCxyOQorCWJuZS0JMWIKKwlibHIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMKaW5kZXggYWQyZWI0ZC4uMmZiYzY4MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jCkBAIC03LDggKzcsOCBAQAogICoKICAqICAtLSBCZW5ICiAgKgotICogQ29weXJpZ2h0IDIwMDggQmVuIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KLSAqICAgICAgICAgICAgICAgIElCTSBDb3JwLgorICogQ29weXJpZ2h0IDIwMDgsMjAwOSBCZW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogICAgICAgICAgICAgICAgICAgICBJQk0gQ29ycC4KICAqCiAgKiAgRGVyaXZlZCBmcm9tIGFyY2gvcHBjL21tL2luaXQuYzoKICAqICAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk2IEdhcnkgVGhvbWFzIChnZHRAbGludXhwcGMub3JnKQpAQCAtMzQsMTIgKzM0LDcxIEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgorI2luY2x1ZGUgPGFzbS9jb2RlLXBhdGNoaW5nLmg+CiAKICNpbmNsdWRlICJtbXVfZGVjbC5oIgogCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKK3N0cnVjdCBtbXVfcHNpemVfZGVmIG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFX0NPVU5UXSA9IHsKKwlbTU1VX1BBR0VfNEtdID0geworCQkuc2hpZnQJPSAxMiwKKwkJLmVuYwk9IEJPT0szRV9QQUdFU1pfNEssCisJfSwKKwlbTU1VX1BBR0VfMTZLXSA9IHsKKwkJLnNoaWZ0CT0gMTQsCisJCS5lbmMJPSBCT09LM0VfUEFHRVNaXzE2SywKKwl9LAorCVtNTVVfUEFHRV82NEtdID0geworCQkuc2hpZnQJPSAxNiwKKwkJLmVuYwk9IEJPT0szRV9QQUdFU1pfNjRLLAorCX0sCisJW01NVV9QQUdFXzFNXSA9IHsKKwkJLnNoaWZ0CT0gMjAsCisJCS5lbmMJPSBCT09LM0VfUEFHRVNaXzFNLAorCX0sCisJW01NVV9QQUdFXzE2TV0gPSB7CisJCS5zaGlmdAk9IDI0LAorCQkuZW5jCT0gQk9PSzNFX1BBR0VTWl8xNk0sCisJfSwKKwlbTU1VX1BBR0VfMjU2TV0gPSB7CisJCS5zaGlmdAk9IDI4LAorCQkuZW5jCT0gQk9PSzNFX1BBR0VTWl8yNTZNLAorCX0sCisJW01NVV9QQUdFXzFHXSA9IHsKKwkJLnNoaWZ0CT0gMzAsCisJCS5lbmMJPSBCT09LM0VfUEFHRVNaXzFHQiwKKwl9LAorfTsKK3N0YXRpYyBpbmxpbmUgaW50IG1tdV9nZXRfdHNpemUoaW50IHBzaXplKQoreworCXJldHVybiBtbXVfcHNpemVfZGVmc1twc2l6ZV0uZW5jOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IG1tdV9nZXRfdHNpemUoaW50IHBzaXplKQoreworCS8qIFRoaXMgaXNuJ3QgdXNlZCBvbiAhQm9vazNFIGZvciBub3cgKi8KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKiBUaGUgdmFyaWFibGVzIGJlbG93IGFyZSBjdXJyZW50bHkgb25seSB1c2VkIG9uIDY0LWJpdCBCb29rM0UKKyAqIHRob3VnaCB0aGlzIHdpbGwgcHJvYmFibHkgYmUgbWFkZSBjb21tb24gd2l0aCBvdGhlciBub2hhc2gKKyAqIGltcGxlbWVudGF0aW9ucyBhdCBzb21lIHBvaW50CisgKi8KKyNpZmRlZiBDT05GSUdfUFBDNjQKKworaW50IG1tdV9saW5lYXJfcHNpemU7CQkvKiBQYWdlIHNpemUgdXNlZCBmb3IgdGhlIGxpbmVhciBtYXBwaW5nICovCitpbnQgbW11X3B0ZV9wc2l6ZTsJCS8qIFBhZ2Ugc2l6ZSB1c2VkIGZvciBQVEUgcGFnZXMgKi8KK2ludCBtbXVfdm1lbW1hcF9wc2l6ZTsJCS8qIFBhZ2Ugc2l6ZSB1c2VkIGZvciB0aGUgdmlydHVhbCBtZW0gbWFwICovCitpbnQgYm9vazNlX2h0d19lbmFibGVkOwkJLyogSXMgSFcgdGFibGV3YWxrIGVuYWJsZWQgPyAqLwordW5zaWduZWQgbG9uZyBsaW5lYXJfbWFwX3RvcDsJLyogVG9wIG9mIGxpbmVhciBtYXBwaW5nICovCisKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKwogLyoKICAqIEJhc2UgVExCIGZsdXNoaW5nIG9wZXJhdGlvbnM6CiAgKgpAQCAtNjcsMTggKzEyNiwyNCBAQAogfQogRVhQT1JUX1NZTUJPTChsb2NhbF9mbHVzaF90bGJfbW0pOwogCi12b2lkIGxvY2FsX2ZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZtYWRkcikKK3ZvaWQgX19sb2NhbF9mbHVzaF90bGJfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2bWFkZHIsCisJCQkgICAgaW50IHRzaXplLCBpbnQgaW5kKQogewogCXVuc2lnbmVkIGludCBwaWQ7CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlwaWQgPSB2bWEgPyB2bWEtPnZtX21tLT5jb250ZXh0LmlkIDogMDsKKwlwaWQgPSBtbSA/IG1tLT5jb250ZXh0LmlkIDogMDsKIAlpZiAocGlkICE9IE1NVV9OT19DT05URVhUKQotCQlfdGxiaWxfdmEodm1hZGRyLCBwaWQpOworCQlfdGxiaWxfdmEodm1hZGRyLCBwaWQsIHRzaXplLCBpbmQpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGxvY2FsX2ZsdXNoX3RsYl9wYWdlKTsKIAordm9pZCBsb2NhbF9mbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCit7CisJX19sb2NhbF9mbHVzaF90bGJfcGFnZSh2bWEgPyB2bWEtPnZtX21tIDogTlVMTCwgdm1hZGRyLAorCQkJICAgICAgIG1tdV9nZXRfdHNpemUobW11X3ZpcnR1YWxfcHNpemUpLCAwKTsKK30KK0VYUE9SVF9TWU1CT0wobG9jYWxfZmx1c2hfdGxiX3BhZ2UpOwogCiAvKgogICogQW5kIGhlcmUgYXJlIHRoZSBTTVAgbm9uLWxvY2FsIGltcGxlbWVudGF0aW9ucwpAQCAtODcsOSArMTUyLDE3IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGxiaXZheF9sb2NrKTsKIAorc3RhdGljIGludCBtbV9pc19jb3JlX2xvY2FsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiBjcHVtYXNrX3N1YnNldChtbV9jcHVtYXNrKG1tKSwKKwkJCSAgICAgIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKHNtcF9wcm9jZXNzb3JfaWQoKSkpOworfQorCiBzdHJ1Y3QgdGxiX2ZsdXNoX3BhcmFtIHsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJdW5zaWduZWQgaW50IHBpZDsKKwl1bnNpZ25lZCBpbnQgdHNpemU7CisJdW5zaWduZWQgaW50IGluZDsKIH07CiAKIHN0YXRpYyB2b2lkIGRvX2ZsdXNoX3RsYl9tbV9pcGkodm9pZCAqcGFyYW0pCkBAIC0xMDMsNyArMTc2LDcgQEAKIHsKIAlzdHJ1Y3QgdGxiX2ZsdXNoX3BhcmFtICpwID0gcGFyYW07CiAKLQlfdGxiaWxfdmEocC0+YWRkciwgcC0+cGlkKTsKKwlfdGxiaWxfdmEocC0+YWRkciwgcC0+cGlkLCBwLT50c2l6ZSwgcC0+aW5kKTsKIH0KIAogCkBAIC0xMzEsNyArMjA0LDcgQEAKIAlwaWQgPSBtbS0+Y29udGV4dC5pZDsKIAlpZiAodW5saWtlbHkocGlkID09IE1NVV9OT19DT05URVhUKSkKIAkJZ290byBub19jb250ZXh0OwotCWlmICghY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkgeworCWlmICghbW1faXNfY29yZV9sb2NhbChtbSkpIHsKIAkJc3RydWN0IHRsYl9mbHVzaF9wYXJhbSBwID0geyAucGlkID0gcGlkIH07CiAJCS8qIElnbm9yZXMgc21wX3Byb2Nlc3Nvcl9pZCgpIGV2ZW4gaWYgc2V0LiAqLwogCQlzbXBfY2FsbF9mdW5jdGlvbl9tYW55KG1tX2NwdW1hc2sobW0pLApAQCAtMTQzLDM3ICsyMTYsNDkgQEAKIH0KIEVYUE9SVF9TWU1CT0woZmx1c2hfdGxiX21tKTsKIAotdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCit2b2lkIF9fZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyLAorCQkgICAgICBpbnQgdHNpemUsIGludCBpbmQpCiB7CiAJc3RydWN0IGNwdW1hc2sgKmNwdV9tYXNrOwogCXVuc2lnbmVkIGludCBwaWQ7CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQlwaWQgPSB2bWEgPyB2bWEtPnZtX21tLT5jb250ZXh0LmlkIDogMDsKKwlwaWQgPSBtbSA/IG1tLT5jb250ZXh0LmlkIDogMDsKIAlpZiAodW5saWtlbHkocGlkID09IE1NVV9OT19DT05URVhUKSkKIAkJZ290byBiYWlsOwotCWNwdV9tYXNrID0gbW1fY3B1bWFzayh2bWEtPnZtX21tKTsKLQlpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X21hc2ssIGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKSkpIHsKKwljcHVfbWFzayA9IG1tX2NwdW1hc2sobW0pOworCWlmICghbW1faXNfY29yZV9sb2NhbChtbSkpIHsKIAkJLyogSWYgYnJvYWRjYXN0IHRsYml2YXggaXMgc3VwcG9ydGVkLCB1c2UgaXQgKi8KIAkJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX1VTRV9UTEJJVkFYX0JDQVNUKSkgewogCQkJaW50IGxvY2sgPSBtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9MT0NLX0JDQVNUX0lOVkFMKTsKIAkJCWlmIChsb2NrKQogCQkJCXNwaW5fbG9jaygmdGxiaXZheF9sb2NrKTsKLQkJCV90bGJpdmF4X2JjYXN0KHZtYWRkciwgcGlkKTsKKwkJCV90bGJpdmF4X2JjYXN0KHZtYWRkciwgcGlkLCB0c2l6ZSwgaW5kKTsKIAkJCWlmIChsb2NrKQogCQkJCXNwaW5fdW5sb2NrKCZ0bGJpdmF4X2xvY2spOwogCQkJZ290byBiYWlsOwogCQl9IGVsc2UgewotCQkJc3RydWN0IHRsYl9mbHVzaF9wYXJhbSBwID0geyAucGlkID0gcGlkLCAuYWRkciA9IHZtYWRkciB9OworCQkJc3RydWN0IHRsYl9mbHVzaF9wYXJhbSBwID0geworCQkJCS5waWQgPSBwaWQsCisJCQkJLmFkZHIgPSB2bWFkZHIsCisJCQkJLnRzaXplID0gdHNpemUsCisJCQkJLmluZCA9IGluZCwKKwkJCX07CiAJCQkvKiBJZ25vcmVzIHNtcF9wcm9jZXNzb3JfaWQoKSBldmVuIGlmIHNldCBpbiBjcHVfbWFzayAqLwogCQkJc21wX2NhbGxfZnVuY3Rpb25fbWFueShjcHVfbWFzaywKIAkJCQkJICAgICAgIGRvX2ZsdXNoX3RsYl9wYWdlX2lwaSwgJnAsIDEpOwogCQl9CiAJfQotCV90bGJpbF92YSh2bWFkZHIsIHBpZCk7CisJX3RsYmlsX3ZhKHZtYWRkciwgcGlkLCB0c2l6ZSwgaW5kKTsKICBiYWlsOgogCXByZWVtcHRfZW5hYmxlKCk7CiB9CisKK3ZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQoreworCV9fZmx1c2hfdGxiX3BhZ2Uodm1hID8gdm1hLT52bV9tbSA6IE5VTEwsIHZtYWRkciwKKwkJCSBtbXVfZ2V0X3RzaXplKG1tdV92aXJ0dWFsX3BzaXplKSwgMCk7Cit9CiBFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9wYWdlKTsKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KQEAgLTIwNywzICsyOTIsMTU2IEBACiAJZmx1c2hfdGxiX21tKHZtYS0+dm1fbW0pOwogfQogRVhQT1JUX1NZTUJPTChmbHVzaF90bGJfcmFuZ2UpOworCit2b2lkIHRsYl9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQoreworCWZsdXNoX3RsYl9tbSh0bGItPm1tKTsKKworCS8qIFB1c2ggb3V0IGJhdGNoIG9mIGZyZWVkIHBhZ2UgdGFibGVzICovCisJcHRlX2ZyZWVfZmluaXNoKCk7Cit9CisKKy8qCisgKiBCZWxvdyBhcmUgZnVuY3Rpb25zIHNwZWNpZmljIHRvIHRoZSA2NC1iaXQgdmFyaWFudCBvZiBCb29rM0UgdGhvdWdoIHRoYXQKKyAqIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZQorICovCisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKworLyoKKyAqIEhhbmRsaW5nIG9mIHZpcnR1YWwgbGluZWFyIHBhZ2UgdGFibGVzIG9yIGluZGlyZWN0IFRMQiBlbnRyaWVzCisgKiBmbHVzaGluZyB3aGVuIFBURSBwYWdlcyBhcmUgZnJlZWQKKyAqLwordm9pZCB0bGJfZmx1c2hfcGd0YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJaW50IHRzaXplID0gbW11X3BzaXplX2RlZnNbbW11X3B0ZV9wc2l6ZV0uZW5jOworCisJaWYgKGJvb2szZV9odHdfZW5hYmxlZCkgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcmVzcyAmIFBNRF9NQVNLOworCQl1bnNpZ25lZCBsb25nIGVuZCA9IGFkZHJlc3MgKyBQTURfU0laRTsKKwkJdW5zaWduZWQgbG9uZyBzaXplID0gMVVMIDw8IG1tdV9wc2l6ZV9kZWZzW21tdV9wdGVfcHNpemVdLnNoaWZ0OworCisJCS8qIFRoaXMgaXNuJ3QgdGhlIG1vc3Qgb3B0aW1hbCwgaWRlYWxseSB3ZSB3b3VsZCBmYWN0b3Igb3V0IHRoZQorCQkgKiB3aGlsZSBwcmVlbXB0ICYgQ1BVIG1hc2sgbXVja2luZyBhcm91bmQsIG9yIGV2ZW4gdGhlIElQSSBidXQKKwkJICogaXQgd2lsbCBkbyBmb3Igbm93CisJCSAqLworCQl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJCV9fZmx1c2hfdGxiX3BhZ2UodGxiLT5tbSwgc3RhcnQsIHRzaXplLCAxKTsKKwkJCXN0YXJ0ICs9IHNpemU7CisJCX0KKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIHJtYXNrID0gMHhmMDAwMDAwMDAwMDAwMDAwdWw7CisJCXVuc2lnbmVkIGxvbmcgcmlkID0gKGFkZHJlc3MgJiBybWFzaykgfCAweDEwMDAwMDAwMDAwMDAwMDB1bDsKKwkJdW5zaWduZWQgbG9uZyB2cHRlID0gYWRkcmVzcyAmIH5ybWFzazsKKworI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCisJCXZwdGUgPSAodnB0ZSA+PiAoUEFHRV9TSElGVCAtIDQpKSAmIH4weGZmZmZ1bDsKKyNlbHNlCisJCXZwdGUgPSAodnB0ZSA+PiAoUEFHRV9TSElGVCAtIDMpKSAmIH4weGZmZnVsOworI2VuZGlmCisJCXZwdGUgfD0gcmlkOworCQlfX2ZsdXNoX3RsYl9wYWdlKHRsYi0+bW0sIHZwdGUsIHRzaXplLCAwKTsKKwl9Cit9CisKKy8qCisgKiBFYXJseSBpbml0aWFsaXphdGlvbiBvZiB0aGUgTU1VIFRMQiBjb2RlCisgKi8KK3N0YXRpYyB2b2lkIF9fZWFybHlfaW5pdF9tbXUoaW50IGJvb3RfY3B1KQoreworCWV4dGVybiB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X2Jhc2VfYm9vazNlOworCWV4dGVybiB1bnNpZ25lZCBpbnQgZXhjX2RhdGFfdGxiX21pc3NfaHR3X2Jvb2szZTsKKwlleHRlcm4gdW5zaWduZWQgaW50IGV4Y19pbnN0cnVjdGlvbl90bGJfbWlzc19odHdfYm9vazNlOworCisJdW5zaWduZWQgaW50ICppYmFzZSA9ICZpbnRlcnJ1cHRfYmFzZV9ib29rM2U7CisJdW5zaWduZWQgaW50IG1hczQ7CisKKwkvKiBYWFggVGhpcyB3aWxsIGhhdmUgdG8gYmUgZGVjaWRlZCBhdCBydW50aW1lLCBidXQgcmlnaHQKKwkgKiBub3cgb3VyIGJvb3QgYW5kIFRMQiBtaXNzIGNvZGUgaGFyZCB3aXJlcyBpdC4gSWRlYWxseQorCSAqIHdlIHNob3VsZCBmaW5kIG91dCBhIHN1aXRhYmxlIHBhZ2Ugc2l6ZSBhbmQgcGF0Y2ggdGhlCisJICogVExCIG1pc3MgY29kZSAoZWl0aGVyIHRoYXQgb3IgdXNlIHRoZSBQQUNBIHRvIHN0b3JlCisJICogdGhlIHZhbHVlIHdlIHdhbnQpCisJICovCisJbW11X2xpbmVhcl9wc2l6ZSA9IE1NVV9QQUdFXzFHOworCisJLyogWFhYIFRoaXMgc2hvdWxkIGJlIGRlY2lkZWQgYXQgcnVudGltZSBiYXNlZCBvbiBzdXBwb3J0ZWQKKwkgKiBwYWdlIHNpemVzIGluIHRoZSBUTEIsIGJ1dCBmb3Igbm93IGxldCdzIGFzc3VtZSAxNk0gaXMKKwkgKiBhbHdheXMgdGhlcmUgYW5kIGEgZ29vZCBmaXQgKHdoaWNoIGl0IHByb2JhYmx5IGlzKQorCSAqLworCW1tdV92bWVtbWFwX3BzaXplID0gTU1VX1BBR0VfMTZNOworCisJLyogQ2hlY2sgaWYgSFcgdGFibGV3YWxrIGlzIHByZXNlbnQsIGFuZCBpZiB5ZXMsIGVuYWJsZSBpdCBieToKKwkgKgorCSAqIC0gcGF0Y2hpbmcgdGhlIFRMQiBtaXNzIGhhbmRsZXJzIHRvIGJyYW5jaCB0byB0aGUKKwkgKiAgIG9uZSBkZWRpY2F0ZXMgdG8gaXQKKwkgKgorCSAqIC0gc2V0dGluZyB0aGUgZ2xvYmFsIGJvb2szZV9odHdfZW5hYmxlZAorCSAqCisJICogLSBTZXQgTUFTNDpJTkREIGFuZCBkZWZhdWx0IHBhZ2Ugc2l6ZQorCSAqLworCisJLyogWFhYIFRoaXMgY29kZSBvbmx5IGNoZWNrcyBmb3IgVExCIDAgY2FwYWJpbGl0aWVzIGFuZCBkb2Vzbid0CisJICogICAgIGNoZWNrIHdoYXQgcGFnZSBzaXplIGNvbWJvcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBIVy4gSXQKKwkgKiAgICAgYWxzbyBkb2Vzbid0IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIHNlcGFyYXRlIGFycmF5IGhvbGRzCisJICogICAgIHRoZSBJTkQgZW50cmllcyBmcm9tIHRoZSBhcnJheSBsb2FkZWQgYnkgdGhlIFBULgorCSAqLworCWlmIChib290X2NwdSkgeworCQl1bnNpZ25lZCBpbnQgdGxiMGNmZyA9IG1mc3ByKFNQUk5fVExCMENGRyk7CisKKwkJLyogQ2hlY2sgaWYgSFcgbG9hZGVyIGlzIHN1cHBvcnRlZCAqLworCQlpZiAoKHRsYjBjZmcgJiBUTEJuQ0ZHX0lORCkgJiYKKwkJICAgICh0bGIwY2ZnICYgVExCbkNGR19QVCkpIHsKKwkJCXBhdGNoX2JyYW5jaChpYmFzZSArICgweDFjMCAvIDQpLAorCQkJICAgICAodW5zaWduZWQgbG9uZykmZXhjX2RhdGFfdGxiX21pc3NfaHR3X2Jvb2szZSwgMCk7CisJCQlwYXRjaF9icmFuY2goaWJhc2UgKyAoMHgxZTAgLyA0KSwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpJmV4Y19pbnN0cnVjdGlvbl90bGJfbWlzc19odHdfYm9vazNlLCAwKTsKKwkJCWJvb2szZV9odHdfZW5hYmxlZCA9IDE7CisJCX0KKwkJcHJfaW5mbygiTU1VOiBCb29rM0UgUGFnZSBUYWJsZXMgJXNcbiIsCisJCQlib29rM2VfaHR3X2VuYWJsZWQgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKTsKKwl9CisKKwkvKiBTZXQgTUFTNCBiYXNlZCBvbiBwYWdlIHRhYmxlIHNldHRpbmcgKi8KKworCW1hczQgPSAweDQgPDwgTUFTNF9XSU1HRURfU0hJRlQ7CisJaWYgKGJvb2szZV9odHdfZW5hYmxlZCkgeworCQltYXM0IHw9IG1hczQgfCBNQVM0X0lOREQ7CisjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKKwkJbWFzNCB8PQlCT09LM0VfUEFHRVNaXzI1Nk0gPDwgTUFTNF9UU0laRURfU0hJRlQ7CisJCW1tdV9wdGVfcHNpemUgPSBNTVVfUEFHRV8yNTZNOworI2Vsc2UKKwkJbWFzNCB8PQlCT09LM0VfUEFHRVNaXzFNIDw8IE1BUzRfVFNJWkVEX1NISUZUOworCQltbXVfcHRlX3BzaXplID0gTU1VX1BBR0VfMU07CisjZW5kaWYKKwl9IGVsc2UgeworI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCisJCW1hczQgfD0JQk9PSzNFX1BBR0VTWl82NEsgPDwgTUFTNF9UU0laRURfU0hJRlQ7CisjZWxzZQorCQltYXM0IHw9CUJPT0szRV9QQUdFU1pfNEsgPDwgTUFTNF9UU0laRURfU0hJRlQ7CisjZW5kaWYKKwkJbW11X3B0ZV9wc2l6ZSA9IG1tdV92aXJ0dWFsX3BzaXplOworCX0KKwltdHNwcihTUFJOX01BUzQsIG1hczQpOworCisJLyogU2V0IHRoZSBnbG9iYWwgY29udGFpbmluZyB0aGUgdG9wIG9mIHRoZSBsaW5lYXIgbWFwcGluZworCSAqIGZvciB1c2UgYnkgdGhlIFRMQiBtaXNzIGNvZGUKKwkgKi8KKwlsaW5lYXJfbWFwX3RvcCA9IGxtYl9lbmRfb2ZfRFJBTSgpOworCisJLyogQSBzeW5jIHdvbid0IGh1cnQgdXMgYWZ0ZXIgbXVja2luZyBhcm91bmQgd2l0aAorCSAqIHRoZSBNTVUgY29uZmlndXJhdGlvbgorCSAqLworCW1iKCk7Cit9CisKK3ZvaWQgX19pbml0IGVhcmx5X2luaXRfbW11KHZvaWQpCit7CisJX19lYXJseV9pbml0X21tdSgxKTsKK30KKwordm9pZCBfX2NwdWluaXQgZWFybHlfaW5pdF9tbXVfc2Vjb25kYXJ5KHZvaWQpCit7CisJX19lYXJseV9pbml0X21tdSgwKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2hfbG93LlMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaF9sb3cuUwppbmRleCAzMDM3OTExLi5iYmRjNWI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaF9sb3cuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaF9sb3cuUwpAQCAtMzksNyArMzksNyBAQAogLyoKICAqIDQweCBpbXBsZW1lbnRhdGlvbiBuZWVkcyBvbmx5IHRsYmlsX3ZhCiAgKi8KLV9HTE9CQUwoX3RsYmlsX3ZhKQorX0dMT0JBTChfX3RsYmlsX3ZhKQogCS8qIFdlIHJ1biB0aGUgc2VhcmNoIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBiZWNhdXNlIHdlIGhhdmUgdG8gY2hhbmdlCiAJICogdGhlIFBJRCBhbmQgSSBkb24ndCB3YW50IHRvIHByZWVtcHQgd2hlbiB0aGF0IGhhcHBlbnMuCiAJICovCkBAIC03MSw3ICs3MSw3IEBACiAgKiA0NDAgaW1wbGVtZW50YXRpb24gdXNlcyB0bGJzeC93ZSBmb3IgdGxiaWxfdmEgYW5kIGEgZnVsbCBzd2VlcAogICogb2YgdGhlIFRMQiBmb3IgZXZlcnl0aGluZyBlbHNlLgogICovCi1fR0xPQkFMKF90bGJpbF92YSkKK19HTE9CQUwoX190bGJpbF92YSkKIAltZnNwcglyNSxTUFJOX01NVUNSCiAJcmx3aW1pCXI1LHI0LDAsMjQsMzEJCQkvKiBTZXQgVElEICovCiAKQEAgLTEyNCw4ICsxMjQsNiBAQAogICogdG8gaGF2ZSB0aGUgbGFyZ2VyIGNvZGUgcGF0aCBiZWZvcmUgdGhlIF9TRUNUSU9OX0VMU0UKICAqLwogCi0jZGVmaW5lIE1NVUNTUjBfVExCRkkJKE1NVUNTUjBfVExCMEZJIHwgTU1VQ1NSMF9UTEIxRkkgfCBcCi0JCQkgTU1VQ1NSMF9UTEIyRkkgfCBNTVVDU1IwX1RMQjNGSSkKIC8qCiAgKiBGbHVzaCBNTVUgVExCIG9uIHRoZSBsb2NhbCBwcm9jZXNzb3IKICAqLwpAQCAtMTcwLDcgKzE2OCw3IEBACiAgKiBGbHVzaCBNTVUgVExCIGZvciBhIHBhcnRpY3VsYXIgYWRkcmVzcywgYnV0IG9ubHkgb24gdGhlIGxvY2FsIHByb2Nlc3NvcgogICogKG5vIGJyb2FkY2FzdCkKICAqLwotX0dMT0JBTChfdGxiaWxfdmEpCitfR0xPQkFMKF9fdGxiaWxfdmEpCiAJbWZtc3IJcjEwCiAJd3J0ZWVpCTAKIAlzbHdpCXI0LHI0LDE2CkBAIC0xOTEsNiArMTg5LDg1IEBACiAJaXN5bmMKIDE6CXdydGVlCXIxMAogCWJscgorI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX0JPT0szRSkKKy8qCisgKiBOZXcgQm9vazNFICg+PSAyLjA2KSBpbXBsZW1lbnRhdGlvbgorICoKKyAqIE5vdGU6IFdlIG1heSBiZSBhYmxlIHRvIGdldCBhd2F5IHdpdGhvdXQgdGhlIGludGVycnVwdCBtYXNraW5nIHN0dWZmCisgKiBpZiB3ZSBzYXZlL3Jlc3RvcmUgTUFTNiBvbiBleGNlcHRpb25zIHRoYXQgbWlnaHQgbW9kaWZ5IGl0CisgKi8KK19HTE9CQUwoX3RsYmlsX3BpZCkKKwlzbHdpCXI0LHIzLE1BUzZfU1BJRF9TSElGVAorCW1mbXNyCXIxMAorCXdydGVlaQkwCisJbXRzcHIJU1BSTl9NQVM2LHI0CisJUFBDX1RMQklMWF9QSUQoMCwwKQorCXdydGVlCXIxMAorCW1zeW5jCisJaXN5bmMKKwlibHIKKworX0dMT0JBTChfdGxiaWxfcGlkX25vaW5kKQorCXNsd2kJcjQscjMsTUFTNl9TUElEX1NISUZUCisJbWZtc3IJcjEwCisJb3JpCXI0LHI0LE1BUzZfU0lORAorCXdydGVlaQkwCisJbXRzcHIJU1BSTl9NQVM2LHI0CisJUFBDX1RMQklMWF9QSUQoMCwwKQorCXdydGVlCXIxMAorCW1zeW5jCisJaXN5bmMKKwlibHIKKworX0dMT0JBTChfdGxiaWxfYWxsKQorCVBQQ19UTEJJTFhfQUxMKDAsMCkKKwltc3luYworCWlzeW5jCisJYmxyCisKK19HTE9CQUwoX3RsYmlsX3ZhKQorCW1mbXNyCXIxMAorCXdydGVlaQkwCisJY21wd2kJY3IwLHI2LDAKKwlzbHdpCXI0LHI0LE1BUzZfU1BJRF9TSElGVAorCXJsd2ltaQlyNCxyNSxNQVM2X0lTSVpFX1NISUZULE1BUzZfSVNJWkVfTUFTSworCWJlcQkxZgorCXJsd2ltaQlyNCxyNixNQVM2X1NJTkRfU0hJRlQsTUFTNl9TSU5ECisxOgltdHNwcglTUFJOX01BUzYscjQJCS8qIGFzc3VtZSBBUz0wIGZvciBub3cgKi8KKwlQUENfVExCSUxYX1ZBKDAscjMpCisJbXN5bmMKKwlpc3luYworCXdydGVlCXIxMAorCWJscgorCitfR0xPQkFMKF90bGJpdmF4X2JjYXN0KQorCW1mbXNyCXIxMAorCXdydGVlaQkwCisJY21wd2kJY3IwLHI2LDAKKwlzbHdpCXI0LHI0LE1BUzZfU1BJRF9TSElGVAorCXJsd2ltaQlyNCxyNSxNQVM2X0lTSVpFX1NISUZULE1BUzZfSVNJWkVfTUFTSworCWJlcQkxZgorCXJsd2ltaQlyNCxyNixNQVM2X1NJTkRfU0hJRlQsTUFTNl9TSU5ECisxOgltdHNwcglTUFJOX01BUzYscjQJCS8qIGFzc3VtZSBBUz0wIGZvciBub3cgKi8KKwlQUENfVExCSVZBWCgwLHIzKQorCWVpZWlvCisJdGxic3luYworCXN5bmMKKwl3cnRlZQlyMTAKKwlibHIKKworX0dMT0JBTChzZXRfY29udGV4dCkKKyNpZmRlZiBDT05GSUdfQkRJX1NXSVRDSAorCS8qIENvbnRleHQgc3dpdGNoIHRoZSBQVEUgcG9pbnRlciBmb3IgdGhlIEFiYXRyb24gQkRJMjAwMC4KKwkgKiBUaGUgUEdESVIgaXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuCisJICovCisJbGlzCXI1LCBhYmF0cm9uX3B0ZXB0cnNAaAorCW9yaQlyNSwgcjUsIGFiYXRyb25fcHRlcHRyc0BsCisJc3R3CXI0LCAweDQocjUpCisjZW5kaWYKKwltdHNwcglTUFJOX1BJRCxyMworCWlzeW5jCQkJLyogRm9yY2UgY29udGV4dCBjaGFuZ2UgKi8KKwlibHIKICNlbHNlCiAjZXJyb3IgVW5zdXBwb3J0ZWQgcHJvY2Vzc29yIHR5cGUgIQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvS2NvbmZpZwppbmRleCBhNmU0M2NiLi5lYzY0MjY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L0tjb25maWcKQEAgLTQwLDYgKzQwLDE2IEBACiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTmVzdGFsIE1hc2NoaW5lbiBIQ1U0IGJvYXJkLgogCitjb25maWcgSE9URk9PVAorICAgICAgICBib29sICJIb3Rmb290IgorCWRlcGVuZHMgb24gNDB4CisJZGVmYXVsdCBuCisJc2VsZWN0IDQwNUVQCisJc2VsZWN0IFBQQzQweF9TSU1QTEUKKwlzZWxlY3QgUENJCisgICAgICAgIGhlbHAKKwkgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgRVNURUVNIDE5NUUgSG90Zm9vdCBib2FyZC4KKwogY29uZmlnIEtJTEFVRUEKIAlib29sICJLaWxhdWVhIgogCWRlcGVuZHMgb24gNDB4CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9wcGM0MHhfc2ltcGxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9wcGM0MHhfc2ltcGxlLmMKaW5kZXggNWZkNWE1OS4uNTQ2YmJjMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvcHBjNDB4X3NpbXBsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L3BwYzQweF9zaW1wbGUuYwpAQCAtNTQsNyArNTQsOCBAQAogCSJhbWNjLGFjYWRpYSIsCiAJImFtY2MsaGFsZWFrYWxhIiwKIAkiYW1jYyxraWxhdWVhIiwKLQkiYW1jYyxtYWthbHUiCisJImFtY2MsbWFrYWx1IiwKKwkiZXN0LGhvdGZvb3QiCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBwcGM0MHhfcHJvYmUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnCmluZGV4IDkwZTMxOTIuLjc0ODZiZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZwpAQCAtMTI5LDYgKzEyOSwxOCBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFNQ0MgUFBDNDYwU1ggUmVkd29vZCBib2FyZC4KIAorY29uZmlnIEVJR0VSCisJYm9vbCAiRWlnZXIiCisJZGVwZW5kcyBvbiA0NHgKKwlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQorCXNlbGVjdCA0NjBTWAorCXNlbGVjdCBQQ0kKKwlzZWxlY3QgUFBDNHh4X1BDSV9FWFBSRVNTCisJc2VsZWN0IElCTV9ORVdfRU1BQ19SR01JSQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFNQ0MgUFBDNDYwU1ggZXZhbHVhdGlvbiBib2FyZC4KKwogY29uZmlnIFlPU0VNSVRFCiAJYm9vbCAiWW9zZW1pdGUiCiAJZGVwZW5kcyBvbiA0NHgKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3BwYzQ0eF9zaW1wbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3BwYzQ0eF9zaW1wbGUuYwppbmRleCA1YmNkNDQxLi5lOGMyM2NjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9wcGM0NHhfc2ltcGxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcHBjNDR4X3NpbXBsZS5jCkBAIC01NSw2ICs1NSw3IEBACiAJImFtY2MsY2FueW9ubGFuZHMiLAogCSJhbWNjLGdsYWNpZXIiLAogCSJpYm0sZWJvbnkiLAorCSJhbWNjLGVpZ2VyIiwKIAkiYW1jYyxrYXRtYWkiLAogCSJhbWNjLHJhaW5pZXIiLAogCSJhbWNjLHJlZHdvb2QiLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L21nY29nZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L21nY29nZS5jCmluZGV4IGMyYWYxNjkuLjdhNWRlOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9tZ2NvZ2UuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvbWdjb2dlLmMKQEAgLTUwLDE2ICs1MCw2MyBAQAogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IGNwbV9waW4gbWdjb2dlX3BpbnNbXSA9IHsKIAogCS8qIFNNQzIgKi8KLQl7MSwgOCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCi0JezEsIDksIENQTV9QSU5fT1VUUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MCwgOCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezAsIDksIENQTV9QSU5fT1VUUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKIAogCS8qIFNDQzQgKi8KLQl7MywgMjUsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAotCXszLCAyNCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCi0JezMsICA5LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKLQl7MywgIDgsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAotCXs0LCAyMiwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCi0JezQsIDIxLCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezIsIDI1LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MiwgMjQsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXsyLCAgOSwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezIsICA4LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MywgMjIsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXszLCAyMSwgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCisJLyogRkNDMSAqLworCXswLCAxNCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezAsIDE1LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MCwgMTYsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXswLCAxNywgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezAsIDE4LCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezAsIDE5LCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezAsIDIwLCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezAsIDIxLCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezAsIDI2LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9TRUNPTkRBUll9LAorCXswLCAyNywgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fU0VDT05EQVJZfSwKKwl7MCwgMjgsIENQTV9QSU5fT1VUUFVUIHwgQ1BNX1BJTl9TRUNPTkRBUll9LAorCXswLCAyOSwgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1NFQ09OREFSWX0sCisJezAsIDMwLCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9TRUNPTkRBUll9LAorCXswLCAzMSwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fU0VDT05EQVJZfSwKKworCXsyLCAyMiwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezIsIDIzLCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKworCS8qIEZDQzIgKi8KKwl7MSwgMTgsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXsxLCAxOSwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezEsIDIwLCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MSwgMjEsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXsxLCAyMiwgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXsxLCAyMywgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXsxLCAyNCwgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXsxLCAyNSwgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXsxLCAyNiwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezEsIDI3LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MSwgMjgsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXsxLCAyOSwgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1NFQ09OREFSWX0sCisJezEsIDMwLCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MSwgMzEsIENQTV9QSU5fT1VUUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKworCXsyLCAxOCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezIsIDE5LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKworCS8qIE1EQyAqLworCXswLCAxMywgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX0dQSU99LAorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDX0NQTSkKKwkvKiBJMkMgKi8KKwl7MywgMTQsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1NFQ09OREFSWSB8IENQTV9QSU5fT1BFTkRSQUlOfSwKKwl7MywgMTUsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1NFQ09OREFSWSB8IENQTV9QSU5fT1BFTkRSQUlOfSwKKyNlbmRpZgogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfaW9wb3J0cyh2b2lkKQpAQCAtNjgsMTIgKzExNSwxNiBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWdjb2dlX3BpbnMpOyBpKyspIHsKIAkJY29uc3Qgc3RydWN0IGNwbV9waW4gKnBpbiA9ICZtZ2NvZ2VfcGluc1tpXTsKLQkJY3BtMl9zZXRfcGluKHBpbi0+cG9ydCAtIDEsIHBpbi0+cGluLCBwaW4tPmZsYWdzKTsKKwkJY3BtMl9zZXRfcGluKHBpbi0+cG9ydCwgcGluLT5waW4sIHBpbi0+ZmxhZ3MpOwogCX0KIAogCWNwbTJfc21jX2Nsa19zZXR1cChDUE1fQ0xLX1NNQzIsIENQTV9CUkc4KTsKIAljcG0yX2Nsa19zZXR1cChDUE1fQ0xLX1NDQzQsIENQTV9DTEs3LCBDUE1fQ0xLX1JYKTsKIAljcG0yX2Nsa19zZXR1cChDUE1fQ0xLX1NDQzQsIENQTV9DTEs4LCBDUE1fQ0xLX1RYKTsKKwljcG0yX2Nsa19zZXR1cChDUE1fQ0xLX0ZDQzEsIENQTV9DTEsxMCwgQ1BNX0NMS19SWCk7CisJY3BtMl9jbGtfc2V0dXAoQ1BNX0NMS19GQ0MxLCBDUE1fQ0xLOSwgIENQTV9DTEtfVFgpOworCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfRkNDMiwgQ1BNX0NMSzEzLCBDUE1fQ0xLX1JYKTsKKwljcG0yX2Nsa19zZXR1cChDUE1fQ0xLX0ZDQzIsIENQTV9DTEsxNCwgQ1BNX0NMS19UWCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtZ2NvZ2Vfc2V0dXBfYXJjaCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L21wYzgyNzJfYWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvbXBjODI3Ml9hZHMuYwppbmRleCA4MDU0YzY4Li4zMDM5NGI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvbXBjODI3Ml9hZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvbXBjODI3Ml9hZHMuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CiAjaW5jbHVkZSA8c3lzZGV2L2NwbTJfcGljLmg+CiAKLSNpbmNsdWRlICJwcTJhZHMuaCIKICNpbmNsdWRlICJwcTIuaCIKIAogc3RhdGljIHZvaWQgX19pbml0IG1wYzgyNzJfYWRzX3BpY19pbml0KHZvaWQpCkBAIC0xMDAsNiArOTksMTUgQEAKIAkvKiBJMkMgKi8KIAl7MywgMTQsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1NFQ09OREFSWSB8IENQTV9QSU5fT1BFTkRSQUlOfSwKIAl7MywgMTUsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1NFQ09OREFSWSB8IENQTV9QSU5fT1BFTkRSQUlOfSwKKworCS8qIFVTQiAqLworCXsyLCAxMCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezIsIDExLCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MiwgMjAsIENQTV9QSU5fT1VUUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MiwgMjQsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXszLCAyMywgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXszLCAyNCwgQ1BNX1BJTl9PVVRQVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXszLCAyNSwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9pb3BvcnRzKHZvaWQpCkBAIC0xMTMsNiArMTIxLDggQEAKIAogCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfU0NDMSwgQ1BNX0JSRzEsIENQTV9DTEtfUlgpOwogCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfU0NDMSwgQ1BNX0JSRzEsIENQTV9DTEtfVFgpOworCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfU0NDMywgQ1BNX0NMSzgsIENQTV9DTEtfUlgpOworCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfU0NDMywgQ1BNX0NMSzgsIENQTV9DTEtfVFgpOwogCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfU0NDNCwgQ1BNX0JSRzQsIENQTV9DTEtfUlgpOwogCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfU0NDNCwgQ1BNX0JSRzQsIENQTV9DTEtfVFgpOwogCWNwbTJfY2xrX3NldHVwKENQTV9DTEtfRkNDMSwgQ1BNX0NMSzExLCBDUE1fQ0xLX1JYKTsKQEAgLTE0NCwxMiArMTU0LDIyIEBACiAJCXJldHVybjsKIAl9CiAKKyNkZWZpbmUgQkNTUjFfRkVUSElFTgkJMHgwODAwMDAwMAorI2RlZmluZSBCQ1NSMV9GRVRIX1JTVAkJMHgwNDAwMDAwMAorI2RlZmluZSBCQ1NSMV9SUzIzMl9FTjEJCTB4MDIwMDAwMDAKKyNkZWZpbmUgQkNTUjFfUlMyMzJfRU4yCQkweDAxMDAwMDAwCisjZGVmaW5lIEJDU1IzX1VTQl9uRU4JCTB4ODAwMDAwMDAKKyNkZWZpbmUgQkNTUjNfRkVUSElFTjIJCTB4MTAwMDAwMDAKKyNkZWZpbmUgQkNTUjNfRkVUSDJfUlNUCQkweDA4MDAwMDAwCisKIAljbHJiaXRzMzIoJmJjc3JbMV0sIEJDU1IxX1JTMjMyX0VOMSB8IEJDU1IxX1JTMjMyX0VOMiB8IEJDU1IxX0ZFVEhJRU4pOwogCXNldGJpdHMzMigmYmNzclsxXSwgQkNTUjFfRkVUSF9SU1QpOwogCiAJY2xyYml0czMyKCZiY3NyWzNdLCBCQ1NSM19GRVRISUVOMik7CiAJc2V0Yml0czMyKCZiY3NyWzNdLCBCQ1NSM19GRVRIMl9SU1QpOwogCisJY2xyYml0czMyKCZiY3NyWzNdLCBCQ1NSM19VU0JfbkVOKTsKKwogCWlvdW5tYXAoYmNzcik7CiAKIAlpbml0X2lvcG9ydHMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKaW5kZXggMDgzZWJlZS4uZjQ5YTI1NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKQEAgLTc1LDExICs3NSwxMSBAQAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODM3eCBNRFMgUHJvY2Vzc29yIEJvYXJkLgogCiBjb25maWcgTVBDODM3eF9SREIKLQlib29sICJGcmVlc2NhbGUgTVBDODM3eCBSREIiCisJYm9vbCAiRnJlZXNjYWxlIE1QQzgzN3ggUkRCL1dMQU4iCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCiAJc2VsZWN0IFBQQ19NUEM4Mzd4CiAJaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODM3eCBSREIgQm9hcmQuCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4Mzd4IFJEQiBhbmQgV0xBTiBCb2FyZHMuCiAKIGNvbmZpZyBTQkM4MzR4CiAJYm9vbCAiV2luZCBSaXZlciBTQkM4MzR4IgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9yZGIuYwppbmRleCA3NmYzYjMyLi5hMTkwOGQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9yZGIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9yZGIuYwpAQCAtMTcsMTAgKzE3LDMyIEBACiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaXBpYy5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KICNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgogCiAjaW5jbHVkZSAibXBjODN4eC5oIgogCitzdGF0aWMgdm9pZCBtcGM4Mzd4X3JkYl9zZF9jZmcodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKmltOworCisJaW0gPSBpb3JlbWFwKGdldF9pbW1yYmFzZSgpLCAweDEwMDApOworCWlmICghaW0pIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogT24gUkRCIGJvYXJkcyAoaW4gY29udHJhc3QgdG8gTURTKSBVU0JCIHBpbnMgYXJlIHVzZWQgZm9yIFNEIG9ubHksCisJICogc28gd2UgY2FuIHNhZmVseSBtdXggdGhlbSBhd2F5IGZyb20gdGhlIFVTQiBibG9jay4KKwkgKi8KKwljbHJzZXRiaXRzX2JlMzIoaW0gKyBNUEM4M1hYX1NJQ1JMX09GRlMsIE1QQzgzN1hfU0lDUkxfVVNCQl9NQVNLLAorCQkJCQkJIE1QQzgzN1hfU0lDUkxfU0QpOworCWNscnNldGJpdHNfYmUzMihpbSArIE1QQzgzWFhfU0lDUkhfT0ZGUywgTVBDODM3WF9TSUNSSF9TUElfTUFTSywKKwkJCQkJCSBNUEM4MzdYX1NJQ1JIX1NEKTsKKwlpb3VubWFwKGltKTsKK30KKwogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU2V0dXAgdGhlIGFyY2hpdGVjdHVyZQpAQCAtNDIsNiArNjQsNyBAQAogCQltcGM4M3h4X2FkZF9icmlkZ2UobnApOwogI2VuZGlmCiAJbXBjODM3eF91c2JfY2ZnKCk7CisJbXBjODM3eF9yZGJfc2RfY2ZnKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzgzN3hfaWRzW10gPSB7CkBAIC04NiwxMSArMTA5LDEyIEBACiAKIAlyZXR1cm4gb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJmc2wsbXBjODM3N3JkYiIpIHx8CiAJICAgICAgIG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiZnNsLG1wYzgzNzhyZGIiKSB8fAotCSAgICAgICBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImZzbCxtcGM4Mzc5cmRiIik7CisJICAgICAgIG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiZnNsLG1wYzgzNzlyZGIiKSB8fAorCSAgICAgICBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImZzbCxtcGM4Mzc3d2xhbiIpOwogfQogCiBkZWZpbmVfbWFjaGluZShtcGM4Mzd4X3JkYikgewotCS5uYW1lCQkJPSAiTVBDODM3eCBSREIiLAorCS5uYW1lCQkJPSAiTVBDODM3eCBSREIvV0xBTiIsCiAJLnByb2JlCQkJPSBtcGM4Mzd4X3JkYl9wcm9iZSwKIAkuc2V0dXBfYXJjaAkJPSBtcGM4Mzd4X3JkYl9zZXR1cF9hcmNoLAogCS5pbml0X0lSUQkJPSBtcGM4Mzd4X3JkYl9pbml0X0lSUSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4M3h4LmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODN4eC5oCmluZGV4IGQxZGM1YjAuLjBmZWE4ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4M3h4LmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzeHguaApAQCAtMzAsNiArMzAsOCBAQAogI2RlZmluZSBNUEM4MzE1X1NJQ1JMX1VTQl9VTFBJICAgICAweDAwMDAwMDU0CiAjZGVmaW5lIE1QQzgzN1hfU0lDUkxfVVNCX01BU0sgICAgIDB4ZjAwMDAwMDAKICNkZWZpbmUgTVBDODM3WF9TSUNSTF9VU0JfVUxQSSAgICAgMHg1MDAwMDAwMAorI2RlZmluZSBNUEM4MzdYX1NJQ1JMX1VTQkJfTUFTSyAgICAweDMwMDAwMDAwCisjZGVmaW5lIE1QQzgzN1hfU0lDUkxfU0QgICAgICAgICAgIDB4MjAwMDAwMDAKIAogLyogc3lzdGVtIGkvbyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGhpZ2ggKi8KICNkZWZpbmUgTVBDODNYWF9TSUNSSF9PRkZTICAgICAgICAgMHgxMTgKQEAgLTM4LDYgKzQwLDggQEAKICNkZWZpbmUgTVBDODMxWF9TSUNSSF9VU0JfVUxQSSAgICAgMHgwMDAwMDBhMAogI2RlZmluZSBNUEM4MzE1X1NJQ1JIX1VTQl9NQVNLICAgICAweDAwMDBmZjAwCiAjZGVmaW5lIE1QQzgzMTVfU0lDUkhfVVNCX1VMUEkgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTVBDODM3WF9TSUNSSF9TUElfTUFTSyAgICAgMHgwMDAwMDAwMworI2RlZmluZSBNUEM4MzdYX1NJQ1JIX1NEICAgICAgICAgICAweDAwMDAwMDAxCiAKIC8qIFVTQiBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIEZTTF9VU0IyX0NPTlRST0xfT0ZGUyAgICAgIDB4NTAwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCmluZGV4IGE5YjQxNjYuLmQzYTk3NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCkBAIC01NSw2ICs1NSwxNSBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1QQzg1eHggRFMgKE1QQzg1NDQgRFMpIGJvYXJkCiAKK2NvbmZpZyBNUEM4NXh4X1JEQgorCWJvb2wgIkZyZWVzY2FsZSBNUEM4NXh4IFJEQiIKKwlzZWxlY3QgUFBDX0k4MjU5CisJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisJc2VsZWN0IEZTTF9VTEkxNTc1CisJc2VsZWN0IFNXSU9UTEIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NXh4IFJEQiAoUDIwMjAgUkRCKSBib2FyZAorCiBjb25maWcgU09DUkFURVMKIAlib29sICJTb2NyYXRlcyIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQppbmRleCA4MzU3MzNmLi45MDk4YWVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L01ha2VmaWxlCkBAIC05LDEwICs5LDExIEBACiBvYmotJChDT05GSUdfTVBDODUzNl9EUykgICs9IG1wYzg1MzZfZHMubwogb2JqLSQoQ09ORklHX01QQzg1eHhfRFMpICArPSBtcGM4NXh4X2RzLm8KIG9iai0kKENPTkZJR19NUEM4NXh4X01EUykgKz0gbXBjODV4eF9tZHMubworb2JqLSQoQ09ORklHX01QQzg1eHhfUkRCKSArPSBtcGM4NXh4X3JkYi5vCiBvYmotJChDT05GSUdfU1RYX0dQMykJICArPSBzdHhfZ3AzLm8KIG9iai0kKENPTkZJR19UUU04NXh4KQkgICs9IHRxbTg1eHgubwogb2JqLSQoQ09ORklHX1NCQzg1NjApICAgICArPSBzYmM4NTYwLm8KIG9iai0kKENPTkZJR19TQkM4NTQ4KSAgICAgKz0gc2JjODU0OC5vCiBvYmotJChDT05GSUdfU09DUkFURVMpICAgICs9IHNvY3JhdGVzLm8gc29jcmF0ZXNfZnBnYV9waWMubwogb2JqLSQoQ09ORklHX0tTSTg1NjApCSAgKz0ga3NpODU2MC5vCi1vYmotJChDT05GSUdfWEVTX01QQzg1eHgpICs9IHhlc19tcGM4NXh4Lm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitvYmotJChDT05GSUdfWEVTX01QQzg1eHgpICs9IHhlc19tcGM4NXh4Lm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTM2X2RzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODUzNl9kcy5jCmluZGV4IDA1NWZmNDEuLjAwNGI3ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTM2X2RzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1MzZfZHMuYwpAQCAtOTYsNyArOTYsOCBAQAogI2lmZGVmIENPTkZJR19TV0lPVExCCiAJaWYgKGxtYl9lbmRfb2ZfRFJBTSgpID4gbWF4KSB7CiAJCXBwY19zd2lvdGxiX2VuYWJsZSA9IDE7Ci0JCXNldF9wY2lfZG1hX29wcygmc3dpb3RsYl9wY2lfZG1hX29wcyk7CisJCXNldF9wY2lfZG1hX29wcygmc3dpb3RsYl9kbWFfb3BzKTsKKwkJcHBjX21kLnBjaV9kbWFfZGV2X3NldHVwID0gcGNpX2RtYV9kZXZfc2V0dXBfc3dpb3RsYjsKIAl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2RzLmMKaW5kZXggODQ5YzBhYy4uNTQ0MDExYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9kcy5jCkBAIC0xOTIsNyArMTkyLDggQEAKICNpZmRlZiBDT05GSUdfU1dJT1RMQgogCWlmIChsbWJfZW5kX29mX0RSQU0oKSA+IG1heCkgewogCQlwcGNfc3dpb3RsYl9lbmFibGUgPSAxOwotCQlzZXRfcGNpX2RtYV9vcHMoJnN3aW90bGJfcGNpX2RtYV9vcHMpOworCQlzZXRfcGNpX2RtYV9vcHMoJnN3aW90bGJfZG1hX29wcyk7CisJCXBwY19tZC5wY2lfZG1hX2Rldl9zZXR1cCA9IHBjaV9kbWFfZGV2X3NldHVwX3N3aW90bGI7CiAJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKaW5kZXggYmZiMzI4My4uMzkwOWQ1NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxhc20vdWRiZy5oPgogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CiAjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KKyNpbmNsdWRlIDxzeXNkZXYvc2ltcGxlX2dwaW8uaD4KICNpbmNsdWRlIDxhc20vcWUuaD4KICNpbmNsdWRlIDxhc20vcWVfaWMuaD4KICNpbmNsdWRlIDxhc20vbXBpYy5oPgpAQCAtMjU0LDcgKzI1NSw4IEBACiAjaWZkZWYgQ09ORklHX1NXSU9UTEIKIAlpZiAobG1iX2VuZF9vZl9EUkFNKCkgPiBtYXgpIHsKIAkJcHBjX3N3aW90bGJfZW5hYmxlID0gMTsKLQkJc2V0X3BjaV9kbWFfb3BzKCZzd2lvdGxiX3BjaV9kbWFfb3BzKTsKKwkJc2V0X3BjaV9kbWFfb3BzKCZzd2lvdGxiX2RtYV9vcHMpOworCQlwcGNfbWQucGNpX2RtYV9kZXZfc2V0dXAgPSBwY2lfZG1hX2Rldl9zZXR1cF9zd2lvdGxiOwogCX0KICNlbmRpZgogfQpAQCAtMzA0LDYgKzMwNiw5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG1wYzg1eHhfcHVibGlzaF9kZXZpY2VzKHZvaWQpCiB7CisJaWYgKG1hY2hpbmVfaXMobXBjODU2OV9tZHMpKQorCQlzaW1wbGVfZ3Bpb2NoaXBfaW5pdCgiZnNsLG1wYzg1NjltZHMtYmNzci1ncGlvIik7CisKIAkvKiBQdWJsaXNoIHRoZSBRRSBkZXZpY2VzICovCiAJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG1wYzg1eHhfaWRzLCBOVUxMKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfcmRiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9yZGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODQ2OGRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfcmRiLmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBNUEM4NXh4IFJEQiBCb2FyZCBTZXR1cAorICoKKyAqIENvcHlyaWdodCAyMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxtbS9tbXVfZGVjbC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKyNpbmNsdWRlIDxhc20vbXBpYy5oPgorCisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgorCisjdW5kZWYgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm10LCBfX2Z1bmNfXywgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pCisjZW5kaWYKKworCit2b2lkIF9faW5pdCBtcGM4NXh4X3JkYl9waWNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBtcGljICptcGljOworCXN0cnVjdCByZXNvdXJjZSByOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJvcGVuLXBpYyIpOworCWlmIChucCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGZpbmQgb3Blbi1waWMgbm9kZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIG1hcCBtcGljIHJlZ2lzdGVyIHNwYWNlXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfQorCisJbXBpYyA9IG1waWNfYWxsb2MobnAsIHIuc3RhcnQsCisJCSAgTVBJQ19QUklNQVJZIHwgTVBJQ19XQU5UU19SRVNFVCB8CisJCSAgTVBJQ19CSUdfRU5ESUFOIHwgTVBJQ19CUk9LRU5fRlJSX05JUlFTIHwKKwkJICBNUElDX1NJTkdMRV9ERVNUX0NQVSwKKwkJICAwLCAyNTYsICIgT3BlblBJQyAgIik7CisKKwlCVUdfT04obXBpYyA9PSBOVUxMKTsKKwlvZl9ub2RlX3B1dChucCk7CisKKwltcGljX2luaXQobXBpYyk7CisKK30KKworLyoKKyAqIFNldHVwIHRoZSBhcmNoaXRlY3R1cmUKKyAqLworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB2b2lkIF9faW5pdCBtcGM4NXh4X3NtcF9pbml0KHZvaWQpOworI2VuZGlmCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjODV4eF9yZGJfc2V0dXBfYXJjaCh2b2lkKQoreworI2lmZGVmIENPTkZJR19QQ0kKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworI2VuZGlmCisKKwlpZiAocHBjX21kLnByb2dyZXNzKQorCQlwcGNfbWQucHJvZ3Jlc3MoIm1wYzg1eHhfcmRiX3NldHVwX2FyY2goKSIsIDApOworCisjaWZkZWYgQ09ORklHX1BDSQorCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgInBjaSIpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLG1wYzg1NDgtcGNpZSIpKQorCQkJZnNsX2FkZF9icmlkZ2UobnAsIDApOworCX0KKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU01QCisJbXBjODV4eF9zbXBfaW5pdCgpOworI2VuZGlmCisKKwlwcmludGsoS0VSTl9JTkZPICJNUEM4NXh4IFJEQiBib2FyZCBmcm9tIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yXG4iKTsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBtcGM4NXh4cmRiX2lkc1tdID0geworCXsgLnR5cGUgPSAic29jIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAorCXt9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXBjODV4eHJkYl9wdWJsaXNoX2RldmljZXModm9pZCkKK3sKKwlyZXR1cm4gb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG1wYzg1eHhyZGJfaWRzLCBOVUxMKTsKK30KK21hY2hpbmVfZGV2aWNlX2luaXRjYWxsKHAyMDIwX3JkYiwgbXBjODV4eHJkYl9wdWJsaXNoX2RldmljZXMpOworCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHAyMDIwX3JkYl9wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKworCWlmIChvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImZzbCxQMjAyMFJEQiIpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworZGVmaW5lX21hY2hpbmUocDIwMjBfcmRiKSB7CisJLm5hbWUJCQk9ICJQMjAyMCBSREIiLAorCS5wcm9iZQkJCT0gcDIwMjBfcmRiX3Byb2JlLAorCS5zZXR1cF9hcmNoCQk9IG1wYzg1eHhfcmRiX3NldHVwX2FyY2gsCisJLmluaXRfSVJRCQk9IG1wYzg1eHhfcmRiX3BpY19pbml0LAorI2lmZGVmIENPTkZJR19QQ0kKKwkucGNpYmlvc19maXh1cF9idXMJPSBmc2xfcGNpYmlvc19maXh1cF9idXMsCisjZW5kaWYKKwkuZ2V0X2lycQkJPSBtcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gZnNsX3JzdGNyX3Jlc3RhcnQsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKaW5kZXggY2MyNzgwNy4uYTVhZDFjNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCkBAIC0yNjcsNiArMjY3LDQzIEBACiAKICNlbmRpZgkvKiBNNDhUNTkgKi8KIAorc3RhdGljIF9fdTggX19pb21lbSAqYnJzdGNyOworCitzdGF0aWMgaW50IF9faW5pdCBzYmM4NTYwX2JkcnN0Y3JfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IHJlc291cmNlIHJlczsKKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgIndycyxzYmM4NTYwLWJyc3RjciIpOworCWlmIChucCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInNiYzg1NjA6IE5vIGJvYXJkIHNwZWNpZmljIFJTVENSIGluIERUQi5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzKTsKKworCXByaW50ayhLRVJOX0lORk8gInNiYzg1NjA6IEZvdW5kIEJSU1RDUiBhdCBpL28gMHgleFxuIiwgcmVzLnN0YXJ0KTsKKworCWJyc3RjciA9IGlvcmVtYXAocmVzLnN0YXJ0LCByZXMuZW5kIC0gcmVzLnN0YXJ0KTsKKwlpZighYnJzdGNyKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJzYmM4NTYwOiBpb3JlbWFwIG9mIGJyc3RjciBmYWlsZWQuXG4iKTsKKworCW9mX25vZGVfcHV0KG5wKTsKKworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKHNiYzg1NjBfYmRyc3Rjcl9pbml0KTsKKwordm9pZCBzYmM4NTYwX3JzdGNyX3Jlc3RhcnQoY2hhciAqIGNtZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlmKGJyc3RjcikKKwkJY2xyYml0czgoYnJzdGNyLCAweDgwKTsKKworCXdoaWxlKDEpOworfQorCiBkZWZpbmVfbWFjaGluZShzYmM4NTYwKSB7CiAJLm5hbWUJCQk9ICJTQkM4NTYwIiwKIAkucHJvYmUJCQk9IHNiYzg1NjBfcHJvYmUsCkBAIC0yNzQsNyArMzExLDcgQEAKIAkuaW5pdF9JUlEJCT0gc2JjODU2MF9waWNfaW5pdCwKIAkuc2hvd19jcHVpbmZvCQk9IHNiYzg1NjBfc2hvd19jcHVpbmZvLAogCS5nZXRfaXJxCQk9IG1waWNfZ2V0X2lycSwKLQkucmVzdGFydAkJPSBmc2xfcnN0Y3JfcmVzdGFydCwKKwkucmVzdGFydAkJPSBzYmM4NTYwX3JzdGNyX3Jlc3RhcnQsCiAJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCiAJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jCmluZGV4IDYyYzU5MmVkZTYuLjA0MTYwYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMKQEAgLTI1LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CiAKLWV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9fc2Vjb25kYXJ5X2hvbGRfYWNrbm93bGVkZ2U7CiBleHRlcm4gdm9pZCBfX2Vhcmx5X3N0YXJ0KHZvaWQpOwogCiAjZGVmaW5lIEJPT1RfRU5UUllfQUREUl9VUFBFUgkwCkBAIC04MCw0NiArNzksMjQgQEAKIH0KIAogc3RhdGljIHZvaWQgX19pbml0Ci1zbXBfODV4eF9iYXNpY19zZXR1cChpbnQgY3B1X25yKQotewotCS8qIENsZWFyIGFueSBwZW5kaW5nIHRpbWVyIGludGVycnVwdHMgKi8KLQltdHNwcihTUFJOX1RTUiwgVFNSX0VOVyB8IFRTUl9XSVMgfCBUU1JfRElTIHwgVFNSX0ZJUyk7Ci0KLQkvKiBFbmFibGUgZGVjcmVtZW50ZXIgaW50ZXJydXB0ICovCi0JbXRzcHIoU1BSTl9UQ1IsIFRDUl9ESUUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQKIHNtcF84NXh4X3NldHVwX2NwdShpbnQgY3B1X25yKQogewogCW1waWNfc2V0dXBfdGhpc19jcHUoKTsKLQotCXNtcF84NXh4X2Jhc2ljX3NldHVwKGNwdV9ucik7CiB9CiAKIHN0cnVjdCBzbXBfb3BzX3Qgc21wXzg1eHhfb3BzID0gewogCS5raWNrX2NwdSA9IHNtcF84NXh4X2tpY2tfY3B1LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgc21wX2R1bW15X3Byb2JlKHZvaWQpCi17Ci0JcmV0dXJuIE5SX0NQVVM7Ci19Ci0KIHZvaWQgX19pbml0IG1wYzg1eHhfc21wX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCi0Jc21wXzg1eHhfb3BzLm1lc3NhZ2VfcGFzcyA9IE5VTEw7Ci0KIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJvcGVuLXBpYyIpOwogCWlmIChucCkgewogCQlzbXBfODV4eF9vcHMucHJvYmUgPSBzbXBfbXBpY19wcm9iZTsKIAkJc21wXzg1eHhfb3BzLnNldHVwX2NwdSA9IHNtcF84NXh4X3NldHVwX2NwdTsKIAkJc21wXzg1eHhfb3BzLm1lc3NhZ2VfcGFzcyA9IHNtcF9tcGljX21lc3NhZ2VfcGFzczsKLQl9IGVsc2UgewotCQlzbXBfODV4eF9vcHMucHJvYmUgPSBzbXBfZHVtbXlfcHJvYmU7Ci0JCXNtcF84NXh4X29wcy5zZXR1cF9jcHUgPSBzbXBfODV4eF9iYXNpY19zZXR1cDsKIAl9CiAKIAlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfREJFTEwpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9wcGM5YS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9wcGM5YS5jCmluZGV4IDJlZmEwNTIuLjI4N2Y3YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcHBjOWEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BwYzlhLmMKQEAgLTEwMiw4ICsxMDIsOCBAQAogewogCXVuc2lnbmVkIGludCByZWc7CiAKLQlyZWcgPSBpb3JlYWQzMihwcGM5YV9yZWdzKTsKLQlyZXR1cm4gKHJlZyA+PiA4KSAmIDB4ZmY7CisJcmVnID0gaW9yZWFkMzJiZShwcGM5YV9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAxNikgJiAweGZmOwogfQogCiAvKiBSZXR1cm4gdGhlIGJvYXJkIChzb2Z0d2FyZSkgcmV2aXNpb24gKi8KQEAgLTExMSw4ICsxMTEsOCBAQAogewogCXVuc2lnbmVkIGludCByZWc7CiAKLQlyZWcgPSBpb3JlYWQzMihwcGM5YV9yZWdzKTsKLQlyZXR1cm4gKHJlZyA+PiAxNikgJiAweGZmOworCXJlZyA9IGlvcmVhZDMyYmUocHBjOWFfcmVncyk7CisJcmV0dXJuIChyZWcgPj4gOCkgJiAweGZmOwogfQogCiAvKiBSZXR1cm4gdGhlIEZQR0EgcmV2aXNpb24gKi8KQEAgLTEyMCw4ICsxMjAsMjYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCi0JcmVnID0gaW9yZWFkMzIocHBjOWFfcmVncyk7Ci0JcmV0dXJuIChyZWcgPj4gMjQpICYgMHhmOworCXJlZyA9IGlvcmVhZDMyYmUocHBjOWFfcmVncyk7CisJcmV0dXJuIHJlZyAmIDB4ZjsKK30KKworLyogUmV0dXJuIFZNRSBHZW9ncmFwaGljYWwgQWRkcmVzcyAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZWZfcHBjOWFfZ2V0X3ZtZV9nZW9fYWRkcih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMmJlKHBwYzlhX3JlZ3MgKyAweDQpOworCXJldHVybiByZWcgJiAweDFmOworfQorCisvKiBSZXR1cm4gVk1FIFN5c3RlbSBDb250cm9sbGVyIFN0YXR1cyAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZWZfcHBjOWFfZ2V0X3ZtZV9pc19zeXNjb24odm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gaW9yZWFkMzJiZShwcGM5YV9yZWdzICsgMHg0KTsKKwlyZXR1cm4gKHJlZyA+PiA5KSAmIDB4MTsKIH0KIAogc3RhdGljIHZvaWQgZ2VmX3BwYzlhX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCkBAIC0xMzEsMTAgKzE0OSwxNSBAQAogCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3Jtc1xuIik7CiAKIAlzZXFfcHJpbnRmKG0sICJSZXZpc2lvblx0OiAldSVjXG4iLCBnZWZfcHBjOWFfZ2V0X3BjYl9yZXYoKSwKLQkJKCdBJyArIGdlZl9wcGM5YV9nZXRfYm9hcmRfcmV2KCkgLSAxKSk7CisJCSgnQScgKyBnZWZfcHBjOWFfZ2V0X2JvYXJkX3JldigpKSk7CiAJc2VxX3ByaW50ZihtLCAiRlBHQSBSZXZpc2lvblx0OiAldVxuIiwgZ2VmX3BwYzlhX2dldF9mcGdhX3JldigpKTsKIAogCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOworCisJc2VxX3ByaW50ZihtLCAiVk1FIGdlby4gYWRkclx0OiAldVxuIiwgZ2VmX3BwYzlhX2dldF92bWVfZ2VvX2FkZHIoKSk7CisKKwlzZXFfcHJpbnRmKG0sICJWTUUgc3lzY29uXHQ6ICVzXG4iLAorCQlnZWZfcHBjOWFfZ2V0X3ZtZV9pc19zeXNjb24oKSA/ICJ5ZXMiIDogIm5vIik7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBnZWZfcHBjOWFfbmVjX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCmluZGV4IDY2MzI3MDIuLjJhYTY5YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKQEAgLTEwNSw3ICsxMDUsOCBAQAogI2lmZGVmIENPTkZJR19TV0lPVExCCiAJaWYgKGxtYl9lbmRfb2ZfRFJBTSgpID4gbWF4KSB7CiAJCXBwY19zd2lvdGxiX2VuYWJsZSA9IDE7Ci0JCXNldF9wY2lfZG1hX29wcygmc3dpb3RsYl9wY2lfZG1hX29wcyk7CisJCXNldF9wY2lfZG1hX29wcygmc3dpb3RsYl9kbWFfb3BzKTsKKwkJcHBjX21kLnBjaV9kbWFfZGV2X3NldHVwID0gcGNpX2RtYV9kZXZfc2V0dXBfc3dpb3RsYjsKIAl9CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfc21wLmMKaW5kZXggZDg0YmJiNS4uZWFjZWEwZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfc21wLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJtcGM4Nnh4LmgiCiAKIGV4dGVybiB2b2lkIF9fc2Vjb25kYXJ5X3N0YXJ0X21wYzg2eHgodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX3NlY29uZGFyeV9ob2xkX2Fja25vd2xlZGdlOwogCiAjZGVmaW5lIE1DTV9QT1JUX0NPTkZJR19PRkZTRVQJMHgxMAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCmluZGV4IDYxMTg3YmUuLjllZmM4YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCkBAIC01NywxNSArNTcsMzUgQEAKIAogZW5kY2hvaWNlCiAKLWNvbmZpZyBQUENfQk9PSzNTXzY0Ci0JZGVmX2Jvb2wgeQorY2hvaWNlCisJcHJvbXB0ICJQcm9jZXNzb3IgVHlwZSIKIAlkZXBlbmRzIG9uIFBQQzY0CisJaGVscAorCSAgVGhlcmUgYXJlIHR3byBmYW1pbGllcyBvZiA2NCBiaXQgUG93ZXJQQyBjaGlwcyBzdXBwb3J0ZWQuCisJICBUaGUgbW9zdCBjb21tb24gb25lcyBhcmUgdGhlIGRlc2t0b3AgYW5kIHNlcnZlciBDUFVzCisJICAoUE9XRVIzLCBSUzY0LCBQT1dFUjQsIFBPV0VSNSwgUE9XRVI1KywgUE9XRVI2LCAuLi4pCisKKwkgIFRoZSBvdGhlciBhcmUgdGhlICJlbWJlZGRlZCIgcHJvY2Vzc29ycyBjb21wbGlhbnQgd2l0aCB0aGUKKwkgICJCb29rIDNFIiB2YXJpYW50IG9mIHRoZSBhcmNoaXRlY3R1cmUKKworY29uZmlnIFBQQ19CT09LM1NfNjQKKwlib29sICJTZXJ2ZXIgcHJvY2Vzc29ycyIKIAlzZWxlY3QgUFBDX0ZQVQogCitjb25maWcgUFBDX0JPT0szRV82NAorCWJvb2wgIkVtYmVkZGVkIHByb2Nlc3NvcnMiCisJc2VsZWN0IFBQQ19GUFUgIyBNYWtlIGl0IGEgY2hvaWNlID8KKworZW5kY2hvaWNlCisKIGNvbmZpZyBQUENfQk9PSzNTCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gUFBDX0JPT0szU18zMiB8fCBQUENfQk9PSzNTXzY0CiAKK2NvbmZpZyBQUENfQk9PSzNFCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gUFBDX0JPT0szRV82NAorCiBjb25maWcgUE9XRVI0X09OTFkKIAlib29sICJPcHRpbWl6ZSBmb3IgUE9XRVI0IgogCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwpAQCAtMTI1LDcgKzE0NSw3IEBACiAKIGNvbmZpZyBCT09LRQogCWJvb2wKLQlkZXBlbmRzIG9uIEUyMDAgfHwgRTUwMCB8fCA0NHgKKwlkZXBlbmRzIG9uIEUyMDAgfHwgRTUwMCB8fCA0NHggfHwgUFBDX0JPT0szRQogCWRlZmF1bHQgeQogCiBjb25maWcgRlNMX0JPT0tFCkBAIC0yMjMsOSArMjQzLDE3IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gIVBQQ19TVERfTU1VCiAKK2NvbmZpZyBQUENfTU1VX05PSEFTSF8zMgorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFBQQ19NTVVfTk9IQVNIICYmIFBQQzMyCisKK2NvbmZpZyBQUENfTU1VX05PSEFTSF82NAorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFBQQ19NTVVfTk9IQVNIICYmIFBQQzY0CisKIGNvbmZpZyBQUENfQk9PSzNFX01NVQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIEZTTF9CT09LRQorCWRlcGVuZHMgb24gRlNMX0JPT0tFIHx8IFBQQ19CT09LM0UKIAogY29uZmlnIFBQQ19NTV9TTElDRVMKIAlib29sCkBAIC0yNTcsNyArMjg1LDcgQEAKICAgICAgICAgIFRoaXMgZW5hYmxlcyB0aGUgcG93ZXJwYy1zcGVjaWZpYyBwZXJmX2NvdW50ZXIgYmFjay1lbmQuCiAKIGNvbmZpZyBTTVAKLQlkZXBlbmRzIG9uIFBQQ19TVERfTU1VIHx8IEZTTF9CT09LRQorCWRlcGVuZHMgb24gUFBDX0JPT0szUyB8fCBQUENfQk9PSzNFIHx8IEZTTF9CT09LRQogCWJvb2wgIlN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzaW5nIHN1cHBvcnQiCiAJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gb25lIENQVS4gSWYgeW91IGhhdmUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvc2V0dXAuYwppbmRleCA0NDMwMzUzLi45MjkwYTdhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9zZXR1cC5jCkBAIC0xMTAsMTMgKzExMCwxNiBAQAogCWlycV9zZXRfZGVmYXVsdF9ob3N0KGk4MjU5X2dldF9ob3N0KCkpOwogfQogCi12b2lkIF9faW5pdCBhbWlnYW9uZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCByZXF1ZXN0X2lzYV9yZWdpb25zKHZvaWQpCiB7CiAJcmVxdWVzdF9yZWdpb24oMHgwMCwgMHgyMCwgImRtYTEiKTsKIAlyZXF1ZXN0X3JlZ2lvbigweDQwLCAweDIwLCAidGltZXIiKTsKIAlyZXF1ZXN0X3JlZ2lvbigweDgwLCAweDEwLCAiZG1hIHBhZ2UgcmVnIik7CiAJcmVxdWVzdF9yZWdpb24oMHhjMCwgMHgyMCwgImRtYTIiKTsKKworCXJldHVybiAwOwogfQorbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwoYW1pZ2FvbmUsIHJlcXVlc3RfaXNhX3JlZ2lvbnMpOwogCiB2b2lkIGFtaWdhb25lX3Jlc3RhcnQoY2hhciAqY21kKQogewpAQCAtMTYxLDcgKzE2NCw2IEBACiAJLm5hbWUJCQk9ICJBbWlnYU9uZSIsCiAJLnByb2JlCQkJPSBhbWlnYW9uZV9wcm9iZSwKIAkuc2V0dXBfYXJjaAkJPSBhbWlnYW9uZV9zZXR1cF9hcmNoLAotCS5pbml0CQkJPSBhbWlnYW9uZV9pbml0LAogCS5zaG93X2NwdWluZm8JCT0gYW1pZ2FvbmVfc2hvd19jcHVpbmZvLAogCS5pbml0X0lSUQkJPSBhbWlnYW9uZV9pbml0X0lSUSwKIAkucmVzdGFydAkJPSBhbWlnYW9uZV9yZXN0YXJ0LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZwppbmRleCA1MGYxN2JkLi40OGNkN2QyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZwpAQCAtODAsMTMgKzgwLDYgQEAKIAkgIHVzZXMgNEsgcGFnZXMuIFRoaXMgY2FuIGltcHJvdmUgcGVyZm9ybWFuY2VzIG9mIGFwcGxpY2F0aW9ucwogCSAgdXNpbmcgbXVsdGlwbGUgU1BFcyBieSBsb3dlcmluZyB0aGUgVExCIHByZXNzdXJlIG9uIHRoZW0uCiAKLWNvbmZpZyBTUFVfVFJBQ0UKLQl0cmlzdGF0ZSAiU1BVIGV2ZW50IHRyYWNpbmcgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNQVV9GUyAmJiBNQVJLRVJTCi0JaGVscAotCSAgVGhpcyBvcHRpb24gYWxsb3dzIHJlYWRpbmcgYSB0cmFjZSBvZiBzcHUtcmVsYXRlZCBldmVudHMgdGhyb3VnaAotCSAgdGhlIHNwdXRyYWNlIGZpbGUgaW4gcHJvY2ZzLgotCiBjb25maWcgU1BVX0JBU0UKIAlib29sCiAJZGVmYXVsdCBuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2VsbGViX3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2VsbGViX3NldHVwLmMKaW5kZXggMDdjMjM0Zi4uZTUzODQ1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NlbGxlYl9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jZWxsZWJfc2V0dXAuYwpAQCAtODAsOCArODAsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjZWxsZWJfbWFjaGluZV90eXBlX2hhY2soY2hhciAqcHRyKQogewotCXN0cm5jcHkoY2VsbGViX21hY2hpbmVfdHlwZSwgcHRyLCBzaXplb2YoY2VsbGViX21hY2hpbmVfdHlwZSkpOwotCWNlbGxlYl9tYWNoaW5lX3R5cGVbc2l6ZW9mKGNlbGxlYl9tYWNoaW5lX3R5cGUpLTFdID0gMDsKKwlzdHJsY3B5KGNlbGxlYl9tYWNoaW5lX3R5cGUsIHB0ciwgc2l6ZW9mKGNlbGxlYl9tYWNoaW5lX3R5cGUpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYwppbmRleCA1YjM0ZmMyLi40MTZkYjE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYwpAQCAtNjQyLDcgKzY0Miw3IEBACiAKIHN0YXRpYyBpbnQgZG1hX3NldF9tYXNrX2FuZF9zd2l0Y2goc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spOwogCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGRtYV9pb21tdV9maXhlZF9vcHMgPSB7CitzdHJ1Y3QgZG1hX21hcF9vcHMgZG1hX2lvbW11X2ZpeGVkX29wcyA9IHsKIAkuYWxsb2NfY29oZXJlbnQgPSBkbWFfZml4ZWRfYWxsb2NfY29oZXJlbnQsCiAJLmZyZWVfY29oZXJlbnQgID0gZG1hX2ZpeGVkX2ZyZWVfY29oZXJlbnQsCiAJLm1hcF9zZyAgICAgICAgID0gZG1hX2ZpeGVkX21hcF9zZywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zbXAuYwppbmRleCBiYzk3ZmFkLi5mNzc0NTMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NtcC5jCkBAIC01OCw4ICs1OCw2IEBACiAgKi8KIHN0YXRpYyBjcHVtYXNrX3Qgb2Zfc3Bpbl9tYXA7CiAKLWV4dGVybiB2b2lkIGdlbmVyaWNfc2Vjb25kYXJ5X3NtcF9pbml0KHVuc2lnbmVkIGxvbmcpOwotCiAvKioKICAqIHNtcF9zdGFydHVwX2NwdSgpIC0gc3RhcnQgdGhlIGdpdmVuIGNwdQogICoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZQppbmRleCA5OTYxMGE2Li5iOTNmODc3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlCkBAIC00LDcgKzQsOCBAQAogc3B1ZnMteSArPSBzY2hlZC5vIGJhY2tpbmdfb3BzLm8gaHdfb3BzLm8gcnVuLm8gZ2FuZy5vCiBzcHVmcy15ICs9IHN3aXRjaC5vIGZhdWx0Lm8gbHNjc2FfYWxsb2MubwogCi1vYmotJChDT05GSUdfU1BVX1RSQUNFKQkrPSBzcHV0cmFjZS5vCisjIG1hZ2ljIGZvciB0aGUgdHJhY2UgZXZlbnRzCitDRkxBR1Nfc2NoZWQubyA6PSAtSSQoc3JjKQogCiAjIFJ1bGVzIHRvIGJ1aWxkIHN3aXRjaC5vIHdpdGggdGhlIGhlbHAgb2YgU1BVIHRvb2wgY2hhaW4KIFNQVV9DUk9TUwk6PSBzcHUtCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29udGV4dC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvbnRleHQuYwppbmRleCBkYjUzOThjLi4wYzg3YmNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29udGV4dC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb250ZXh0LmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxhc20vc3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3NwdV9jc2EuaD4KICNpbmNsdWRlICJzcHVmcy5oIgorI2luY2x1ZGUgInNwdXRyYWNlLmgiCiAKIAogYXRvbWljX3QgbnJfc3B1X2NvbnRleHRzID0gQVRPTUlDX0lOSVQoMCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwppbmRleCBkNmE1MTllLi5hYjhhZWY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAic3B1ZnMuaCIKKyNpbmNsdWRlICJzcHV0cmFjZS5oIgogCiAjZGVmaW5lIFNQVUZTX01NQVBfNEsgKFBBR0VfU0laRSA9PSAweDEwMDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKaW5kZXggZjA4NTM2OS4uYmI1Yjc3YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKQEAgLTQ3LDYgKzQ3LDggQEAKICNpbmNsdWRlIDxhc20vc3B1X2NzYS5oPgogI2luY2x1ZGUgPGFzbS9zcHVfcHJpdjEuaD4KICNpbmNsdWRlICJzcHVmcy5oIgorI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCisjaW5jbHVkZSAic3B1dHJhY2UuaCIKIAogc3RydWN0IHNwdV9wcmlvX2FycmF5IHsKIAlERUNMQVJFX0JJVE1BUChiaXRtYXAsIE1BWF9QUklPKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKaW5kZXggYWUzMTU3My4uYzQ0OGJhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKQEAgLTM3Myw5ICszNzMsNCBAQAogZXh0ZXJuIHZvaWQgc3B1Y3R4X3N3aXRjaF9zdGF0ZShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwKIAkJZW51bSBzcHVfdXRpbGl6YXRpb25fc3RhdGUgbmV3X3N0YXRlKTsKIAotI2RlZmluZSBzcHVfY29udGV4dF90cmFjZShuYW1lLCBjdHgsIHNwdSkgXAotCXRyYWNlX21hcmsobmFtZSwgImN0eCAlcCBzcHUgJXAiLCBjdHgsIHNwdSk7Ci0jZGVmaW5lIHNwdV9jb250ZXh0X25vc3B1X3RyYWNlKG5hbWUsIGN0eCkgXAotCXRyYWNlX21hcmsobmFtZSwgImN0eCAlcCIsIGN0eCk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdXRyYWNlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1dHJhY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBiMWYzZi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1dHJhY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDI3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJICi0gKglSZWxlYXNlZCB1bmRlciBHUEwgdjIuCi0gKgotICogUGFydGlhbGx5IGJhc2VkIG9uIG5ldC9pcHY0L3RjcF9wcm9iZS5jLgotICoKLSAqIFNpbXBsZSB0cmFjaW5nIGZhY2lsaXR5IGZvciBzcHUgY29udGV4dHMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21hcmtlci5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSAic3B1ZnMuaCIKLQotc3RydWN0IHNwdV9wcm9iZSB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQljb25zdCBjaGFyICpmb3JtYXQ7Ci0JbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlX2Z1bmM7Ci19OwotCi1zdHJ1Y3Qgc3B1dHJhY2UgewotCWt0aW1lX3QgdHN0YW1wOwotCWludCBvd25lcl90aWQ7IC8qIG93bmVyICovCi0JaW50IGN1cnJfdGlkOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JaW50IG51bWJlcjsKLX07Ci0KLXN0YXRpYyBpbnQgYnVmc2l6ZSBfX3JlYWRfbW9zdGx5ID0gMTYzODQ7Ci1NT0RVTEVfUEFSTV9ERVNDKGJ1ZnNpemUsICJMb2cgYnVmZmVyIHNpemUgKG51bWJlciBvZiByZWNvcmRzKSIpOwotbW9kdWxlX3BhcmFtKGJ1ZnNpemUsIGludCwgMCk7Ci0KLQotc3RhdGljIERFRklORV9TUElOTE9DSyhzcHV0cmFjZV9sb2NrKTsKLXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChzcHV0cmFjZV93YWl0KTsKLXN0YXRpYyBrdGltZV90IHNwdXRyYWNlX3N0YXJ0Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgc3B1dHJhY2VfaGVhZCwgc3B1dHJhY2VfdGFpbDsKLXN0YXRpYyBzdHJ1Y3Qgc3B1dHJhY2UgKnNwdXRyYWNlX2xvZzsKLXN0YXRpYyBpbnQgc3B1dHJhY2VfbG9nZ2luZzsKLQotc3RhdGljIGludCBzcHV0cmFjZV91c2VkKHZvaWQpCi17Ci0JcmV0dXJuIChzcHV0cmFjZV9oZWFkIC0gc3B1dHJhY2VfdGFpbCkgJSBidWZzaXplOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzcHV0cmFjZV9hdmFpbCh2b2lkKQotewotCXJldHVybiBidWZzaXplIC0gc3B1dHJhY2VfdXNlZCgpOwotfQotCi1zdGF0aWMgaW50IHNwdXRyYWNlX3NwcmludChjaGFyICp0YnVmLCBpbnQgbikKLXsKLQljb25zdCBzdHJ1Y3Qgc3B1dHJhY2UgKnQgPSBzcHV0cmFjZV9sb2cgKyBzcHV0cmFjZV90YWlsICUgYnVmc2l6ZTsKLQlzdHJ1Y3QgdGltZXNwZWMgdHYgPQotCQlrdGltZV90b190aW1lc3BlYyhrdGltZV9zdWIodC0+dHN0YW1wLCBzcHV0cmFjZV9zdGFydCkpOwotCi0JcmV0dXJuIHNucHJpbnRmKHRidWYsIG4sCi0JCSJbJWx1LiUwOWx1XSAlZDogJXMgKGN0eHRocmVhZCA9ICVkLCBzcHUgPSAlZClcbiIsCi0JCSh1bnNpZ25lZCBsb25nKSB0di50dl9zZWMsCi0JCSh1bnNpZ25lZCBsb25nKSB0di50dl9uc2VjLAotCQl0LT5jdXJyX3RpZCwKLQkJdC0+bmFtZSwKLQkJdC0+b3duZXJfdGlkLAotCQl0LT5udW1iZXIpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzcHV0cmFjZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAotCQlzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCi17Ci0JaW50IGVycm9yID0gMCwgY250ID0gMDsKLQotCWlmICghYnVmIHx8IGxlbiA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd2hpbGUgKGNudCA8IGxlbikgewotCQljaGFyIHRidWZbMTI4XTsKLQkJaW50IHdpZHRoOwotCi0JCS8qIElmIHdlIGhhdmUgZGF0YSByZWFkeSB0byByZXR1cm4sIGRvbid0IGJsb2NrIHdhaXRpbmcKLQkJICogZm9yIG1vcmUgKi8KLQkJaWYgKGNudCA+IDAgJiYgc3B1dHJhY2VfdXNlZCgpID09IDApCi0JCQlicmVhazsKLQotCQllcnJvciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzcHV0cmFjZV93YWl0LAotCQkJCQkJIHNwdXRyYWNlX3VzZWQoKSA+IDApOwotCQlpZiAoZXJyb3IpCi0JCQlicmVhazsKLQotCQlzcGluX2xvY2soJnNwdXRyYWNlX2xvY2spOwotCQlpZiAoc3B1dHJhY2VfaGVhZCA9PSBzcHV0cmFjZV90YWlsKSB7Ci0JCQlzcGluX3VubG9jaygmc3B1dHJhY2VfbG9jayk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXdpZHRoID0gc3B1dHJhY2Vfc3ByaW50KHRidWYsIHNpemVvZih0YnVmKSk7Ci0JCWlmICh3aWR0aCA8IGxlbikKLQkJCXNwdXRyYWNlX3RhaWwgPSAoc3B1dHJhY2VfdGFpbCArIDEpICUgYnVmc2l6ZTsKLQkJc3Bpbl91bmxvY2soJnNwdXRyYWNlX2xvY2spOwotCi0JCWlmICh3aWR0aCA+PSBsZW4pCi0JCQlicmVhazsKLQotCQllcnJvciA9IGNvcHlfdG9fdXNlcihidWYgKyBjbnQsIHRidWYsIHdpZHRoKTsKLQkJaWYgKGVycm9yKQotCQkJYnJlYWs7Ci0JCWNudCArPSB3aWR0aDsKLQl9Ci0KLQlyZXR1cm4gY250ID09IDAgPyBlcnJvciA6IGNudDsKLX0KLQotc3RhdGljIGludCBzcHV0cmFjZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWludCByYzsKLQotCXNwaW5fbG9jaygmc3B1dHJhY2VfbG9jayk7Ci0JaWYgKHNwdXRyYWNlX2xvZ2dpbmcpIHsKLQkJcmMgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXNwdXRyYWNlX2xvZ2dpbmcgPSAxOwotCXNwdXRyYWNlX2hlYWQgPSBzcHV0cmFjZV90YWlsID0gMDsKLQlzcHV0cmFjZV9zdGFydCA9IGt0aW1lX2dldCgpOwotCXJjID0gMDsKLQotb3V0OgotCXNwaW5fdW5sb2NrKCZzcHV0cmFjZV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgc3B1dHJhY2VfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzcGluX2xvY2soJnNwdXRyYWNlX2xvY2spOwotCXNwdXRyYWNlX2xvZ2dpbmcgPSAwOwotCXNwaW5fdW5sb2NrKCZzcHV0cmFjZV9sb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1dHJhY2VfZm9wcyA9IHsKLQkub3duZXIgICA9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgID0gc3B1dHJhY2Vfb3BlbiwKLQkucmVhZCAgICA9IHNwdXRyYWNlX3JlYWQsCi0JLnJlbGVhc2UgPSBzcHV0cmFjZV9yZWxlYXNlLAotfTsKLQotc3RhdGljIHZvaWQgc3B1dHJhY2VfbG9nX2l0ZW0oY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBzcHUgKnNwdSkKLXsKLQlzcGluX2xvY2soJnNwdXRyYWNlX2xvY2spOwotCi0JaWYgKCFzcHV0cmFjZV9sb2dnaW5nKSB7Ci0JCXNwaW5fdW5sb2NrKCZzcHV0cmFjZV9sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChzcHV0cmFjZV9hdmFpbCgpID4gMSkgewotCQlzdHJ1Y3Qgc3B1dHJhY2UgKnQgPSBzcHV0cmFjZV9sb2cgKyBzcHV0cmFjZV9oZWFkOwotCi0JCXQtPnRzdGFtcCA9IGt0aW1lX2dldCgpOwotCQl0LT5vd25lcl90aWQgPSBjdHgtPnRpZDsKLQkJdC0+bmFtZSA9IG5hbWU7Ci0JCXQtPmN1cnJfdGlkID0gY3VycmVudC0+cGlkOwotCQl0LT5udW1iZXIgPSBzcHUgPyBzcHUtPm51bWJlciA6IC0xOwotCi0JCXNwdXRyYWNlX2hlYWQgPSAoc3B1dHJhY2VfaGVhZCArIDEpICUgYnVmc2l6ZTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAic3B1dHJhY2U6IGxvc3Qgc2FtcGxlcyBkdWUgdG8gZnVsbCBidWZmZXIuXG4iKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJnNwdXRyYWNlX2xvY2spOwotCi0Jd2FrZV91cCgmc3B1dHJhY2Vfd2FpdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNwdV9jb250ZXh0X2V2ZW50KHZvaWQgKnByb2JlX3ByaXZhdGUsIHZvaWQgKmNhbGxfZGF0YSwKLQkJY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0ICphcmdzKQotewotCXN0cnVjdCBzcHVfcHJvYmUgKnAgPSBwcm9iZV9wcml2YXRlOwotCXN0cnVjdCBzcHVfY29udGV4dCAqY3R4OwotCXN0cnVjdCBzcHUgKnNwdTsKLQotCWN0eCA9IHZhX2FyZygqYXJncywgc3RydWN0IHNwdV9jb250ZXh0ICopOwotCXNwdSA9IHZhX2FyZygqYXJncywgc3RydWN0IHNwdSAqKTsKLQotCXNwdXRyYWNlX2xvZ19pdGVtKHAtPm5hbWUsIGN0eCwgc3B1KTsKLX0KLQotc3RhdGljIHZvaWQgc3B1X2NvbnRleHRfbm9zcHVfZXZlbnQodm9pZCAqcHJvYmVfcHJpdmF0ZSwgdm9pZCAqY2FsbF9kYXRhLAotCQljb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgKmFyZ3MpCi17Ci0Jc3RydWN0IHNwdV9wcm9iZSAqcCA9IHByb2JlX3ByaXZhdGU7Ci0Jc3RydWN0IHNwdV9jb250ZXh0ICpjdHg7Ci0KLQljdHggPSB2YV9hcmcoKmFyZ3MsIHN0cnVjdCBzcHVfY29udGV4dCAqKTsKLQotCXNwdXRyYWNlX2xvZ19pdGVtKHAtPm5hbWUsIGN0eCwgTlVMTCk7Ci19Ci0KLXN0cnVjdCBzcHVfcHJvYmUgc3B1X3Byb2Jlc1tdID0gewotCXsgInNwdV9iaW5kX2NvbnRleHRfX2VudGVyIiwgImN0eCAlcCBzcHUgJXAiLCBzcHVfY29udGV4dF9ldmVudCB9LAotCXsgInNwdV91bmJpbmRfY29udGV4dF9fZW50ZXIiLCAiY3R4ICVwIHNwdSAlcCIsIHNwdV9jb250ZXh0X2V2ZW50IH0sCi0JeyAic3B1X2dldF9pZGxlX19lbnRlciIsICJjdHggJXAiLCBzcHVfY29udGV4dF9ub3NwdV9ldmVudCB9LAotCXsgInNwdV9nZXRfaWRsZV9fZm91bmQiLCAiY3R4ICVwIHNwdSAlcCIsIHNwdV9jb250ZXh0X2V2ZW50IH0sCi0JeyAic3B1X2dldF9pZGxlX19ub3RfZm91bmQiLCAiY3R4ICVwIiwgc3B1X2NvbnRleHRfbm9zcHVfZXZlbnQgfSwKLQl7ICJzcHVfZmluZF92aWN0aW1fX2VudGVyIiwgImN0eCAlcCIsIHNwdV9jb250ZXh0X25vc3B1X2V2ZW50IH0sCi0JeyAic3B1c2NoZWRfdGlja19fcHJlZW1wdCIsICJjdHggJXAgc3B1ICVwIiwgc3B1X2NvbnRleHRfZXZlbnQgfSwKLQl7ICJzcHVzY2hlZF90aWNrX19uZXdzbGljZSIsICJjdHggJXAiLCBzcHVfY29udGV4dF9ub3NwdV9ldmVudCB9LAotCXsgInNwdV95aWVsZF9fZW50ZXIiLCAiY3R4ICVwIiwgc3B1X2NvbnRleHRfbm9zcHVfZXZlbnQgfSwKLQl7ICJzcHVfZGVhY3RpdmF0ZV9fZW50ZXIiLCAiY3R4ICVwIiwgc3B1X2NvbnRleHRfbm9zcHVfZXZlbnQgfSwKLQl7ICJfX3NwdV9kZWFjdGl2YXRlX191bmxvYWQiLCAiY3R4ICVwIHNwdSAlcCIsIHNwdV9jb250ZXh0X2V2ZW50IH0sCi0JeyAic3B1ZnNfcHNfZmF1bHRfX2VudGVyIiwgImN0eCAlcCIsIHNwdV9jb250ZXh0X25vc3B1X2V2ZW50IH0sCi0JeyAic3B1ZnNfcHNfZmF1bHRfX3NsZWVwIiwgImN0eCAlcCIsIHNwdV9jb250ZXh0X25vc3B1X2V2ZW50IH0sCi0JeyAic3B1ZnNfcHNfZmF1bHRfX3dha2UiLCAiY3R4ICVwIHNwdSAlcCIsIHNwdV9jb250ZXh0X2V2ZW50IH0sCi0JeyAic3B1ZnNfcHNfZmF1bHRfX2luc2VydCIsICJjdHggJXAgc3B1ICVwIiwgc3B1X2NvbnRleHRfZXZlbnQgfSwKLQl7ICJzcHVfYWNxdWlyZV9zYXZlZF9fZW50ZXIiLCAiY3R4ICVwIiwgc3B1X2NvbnRleHRfbm9zcHVfZXZlbnQgfSwKLQl7ICJkZXN0cm95X3NwdV9jb250ZXh0X19lbnRlciIsICJjdHggJXAiLCBzcHVfY29udGV4dF9ub3NwdV9ldmVudCB9LAotCXsgInNwdWZzX3N0b3BfY2FsbGJhY2tfX2VudGVyIiwgImN0eCAlcCBzcHUgJXAiLCBzcHVfY29udGV4dF9ldmVudCB9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc3B1dHJhY2VfaW5pdCh2b2lkKQotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7Ci0JaW50IGksIGVycm9yID0gLUVOT01FTTsKLQotCXNwdXRyYWNlX2xvZyA9IGtjYWxsb2MoYnVmc2l6ZSwgc2l6ZW9mKHN0cnVjdCBzcHV0cmFjZSksIEdGUF9LRVJORUwpOwotCWlmICghc3B1dHJhY2VfbG9nKQotCQlnb3RvIG91dDsKLQotCWVudHJ5ID0gcHJvY19jcmVhdGUoInNwdXRyYWNlIiwgU19JUlVTUiwgTlVMTCwgJnNwdXRyYWNlX2ZvcHMpOwotCWlmICghZW50cnkpCi0JCWdvdG8gb3V0X2ZyZWVfbG9nOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3B1X3Byb2Jlcyk7IGkrKykgewotCQlzdHJ1Y3Qgc3B1X3Byb2JlICpwID0gJnNwdV9wcm9iZXNbaV07Ci0KLQkJZXJyb3IgPSBtYXJrZXJfcHJvYmVfcmVnaXN0ZXIocC0+bmFtZSwgcC0+Zm9ybWF0LAotCQkJCQkgICAgICBwLT5wcm9iZV9mdW5jLCBwKTsKLQkJaWYgKGVycm9yKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiVW5hYmxlIHRvIHJlZ2lzdGVyIHByb2JlICVzXG4iLAotCQkJCQlwLT5uYW1lKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotb3V0X2ZyZWVfbG9nOgotCWtmcmVlKHNwdXRyYWNlX2xvZyk7Ci1vdXQ6Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzcHV0cmFjZV9leGl0KHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcHVfcHJvYmVzKTsgaSsrKQotCQltYXJrZXJfcHJvYmVfdW5yZWdpc3RlcihzcHVfcHJvYmVzW2ldLm5hbWUsCi0JCQlzcHVfcHJvYmVzW2ldLnByb2JlX2Z1bmMsICZzcHVfcHJvYmVzW2ldKTsKLQotCXJlbW92ZV9wcm9jX2VudHJ5KCJzcHV0cmFjZSIsIE5VTEwpOwotCWtmcmVlKHNwdXRyYWNlX2xvZyk7Ci0JbWFya2VyX3N5bmNocm9uaXplX3VucmVnaXN0ZXIoKTsKLX0KLQotbW9kdWxlX2luaXQoc3B1dHJhY2VfaW5pdCk7Ci1tb2R1bGVfZXhpdChzcHV0cmFjZV9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdXRyYWNlLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1dHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjI2NTZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdXRyYWNlLmgKQEAgLTAsMCArMSwzOSBAQAorI2lmICFkZWZpbmVkKF9UUkFDRV9TUFVGU19IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVFJBQ0VfU1BVRlNfSAorCisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBzcHVmcworCitUUkFDRV9FVkVOVChzcHVmc19jb250ZXh0LAorCVRQX1BST1RPKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBzdHJ1Y3Qgc3B1ICpzcHUsIGNvbnN0IGNoYXIgKm5hbWUpLAorCVRQX0FSR1MoY3R4LCBzcHUsIG5hbWUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChjb25zdCBjaGFyICosIG5hbWUpCisJCV9fZmllbGQoaW50LCBvd25lcl90aWQpCisJCV9fZmllbGQoaW50LCBudW1iZXIpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5uYW1lID0gbmFtZTsKKwkJX19lbnRyeS0+b3duZXJfdGlkID0gY3R4LT50aWQ7CisJCV9fZW50cnktPm51bWJlciA9IHNwdSA/IHNwdS0+bnVtYmVyIDogLTE7CisJKSwKKworCVRQX3ByaW50aygiJXMgKGN0eHRocmVhZCA9ICVkLCBzcHUgPSAlZCkiLAorCQlfX2VudHJ5LT5uYW1lLCBfX2VudHJ5LT5vd25lcl90aWQsIF9fZW50cnktPm51bWJlcikKKyk7CisKKyNkZWZpbmUgc3B1X2NvbnRleHRfdHJhY2UobmFtZSwgY3R4LCBzcHUpIFwKKwl0cmFjZV9zcHVmc19jb250ZXh0KGN0eCwgc3B1LCBfX3N0cmluZ2lmeShuYW1lKSkKKyNkZWZpbmUgc3B1X2NvbnRleHRfbm9zcHVfdHJhY2UobmFtZSwgY3R4KSBcCisJdHJhY2Vfc3B1ZnNfY29udGV4dChjdHgsIE5VTEwsIF9fc3RyaW5naWZ5KG5hbWUpKQorCisjZW5kaWYgLyogX1RSQUNFX1NQVUZTX0ggKi8KKworI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSAorI2RlZmluZSBUUkFDRV9JTkNMVURFX1BBVEggLgorI2RlZmluZSBUUkFDRV9JTkNMVURFX0ZJTEUgc3B1dHJhY2UKKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9leGNlcHRpb24uUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9leGNlcHRpb24uUwppbmRleCAyZjU4MTUyLi41MzY5NjUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZXhjZXB0aW9uLlMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2V4Y2VwdGlvbi5TCkBAIC00Nyw3ICs0Nyw3IEBACiAJTE9BRF9SRUdfQUREUihyMTMsIHBhY2EpCiAJbXVsbGkJcjAscjIzLFBBQ0FfU0laRQogCWFkZAlyMTMscjEzLHIwCi0JbXRzcHIJU1BSTl9TUFJHMyxyMTMJCS8qIFNhdmUgaXQgYXdheSBmb3IgdGhlIGZ1dHVyZSAqLworCW10c3ByCVNQUk5fU1BSR19QQUNBLHIxMwkvKiBTYXZlIGl0IGF3YXkgZm9yIHRoZSBmdXR1cmUgKi8KIAltZm1zcglyMjQKIAlvcmkJcjI0LHIyNCxNU1JfUkkKIAltdG1zcmQJcjI0CQkJLyogUkkgb24gKi8KQEAgLTExNiw3ICsxMTYsNyBAQAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAlsaQlyMCwtMQkJCS8qIHIwPS0xIGluZGljYXRlcyBhIEh5cGVydmlzb3IgY2FsbCAqLwogCXNjCQkJCS8qIEludm9rZSB0aGUgaHlwZXJ2aXNvciB2aWEgYSBzeXN0ZW0gY2FsbCAqLwotCW1mc3ByCXIxMyxTUFJOX1NQUkczCQkvKiBQdXQgcjEzIGJhY2sgPz8/PyAqLworCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQQkvKiBQdXQgcjEzIGJhY2sgPz8/PyAqLwogCWIJMmIJCQkvKiBJZiBTTVAgbm90IGNvbmZpZ3VyZWQsIHNlY29uZGFyaWVzCiAJCQkJCSAqIGxvb3AgZm9yZXZlciAqLwogCkBAIC0xMjYsMzQgKzEyNiw0NSBAQAogCiAJLmdsb2JsIGRhdGFfYWNjZXNzX2lTZXJpZXMKIGRhdGFfYWNjZXNzX2lTZXJpZXM6Ci0JbXRzcHIJU1BSTl9TUFJHMSxyMTMKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzCiBCRUdJTl9GVFJfU0VDVElPTgotCW10c3ByCVNQUk5fU1BSRzIscjEyCi0JbWZzcHIJcjEzLFNQUk5fREFSCi0JbWZzcHIJcjEyLFNQUk5fRFNJU1IKLQlzcmRpCXIxMyxyMTMsNjAKLQlybHdpbWkJcjEzLHIxMiwxNiwweDIwCi0JbWZjcglyMTIKLQljbXB3aQlyMTMsMHgyYworCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQQorCXN0ZAlyOSxQQUNBX0VYU0xCK0VYX1I5KHIxMykKKwlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfUjEwKHIxMykKKwltZnNwcglyMTAsU1BSTl9EQVIKKwltZnNwcglyOSxTUFJOX0RTSVNSCisJc3JkaQlyMTAscjEwLDYwCisJcmx3aW1pCXIxMCxyOSwxNiwweDIwCisJbWZjcglyOQorCWNtcHdpCXIxMCwweDJjCiAJYmVxCS5kb19zdGFiX2JvbHRlZF9pU2VyaWVzCi0JbXRjcmYJMHg4MCxyMTIKLQltZnNwcglyMTIsU1BSTl9TUFJHMgotRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfU0xCKQorCWxkCXIxMCxQQUNBX0VYU0xCK0VYX1IxMChyMTMpCisJc3RkCXIxMSxQQUNBX0VYR0VOK0VYX1IxMShyMTMpCisJbGQJcjExLFBBQ0FfRVhTTEIrRVhfUjkocjEzKQorCXN0ZAlyMTIsUEFDQV9FWEdFTitFWF9SMTIocjEzKQorCW1mc3ByCXIxMixTUFJOX1NQUkdfU0NSQVRDSDAKKwlzdGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEwKHIxMykKKwlzdGQJcjExLFBBQ0FfRVhHRU4rRVhfUjkocjEzKQorCXN0ZAlyMTIsUEFDQV9FWEdFTitFWF9SMTMocjEzKQorCUVYQ0VQVElPTl9QUk9MT0dfSVNFUklFU18xCitGVFJfU0VDVElPTl9FTFNFCiAJRVhDRVBUSU9OX1BST0xPR18xKFBBQ0FfRVhHRU4pCiAJRVhDRVBUSU9OX1BST0xPR19JU0VSSUVTXzEKK0FMVF9GVFJfU0VDVElPTl9FTkRfSUZDTFIoQ1BVX0ZUUl9TTEIpCiAJYglkYXRhX2FjY2Vzc19jb21tb24KIAogLmRvX3N0YWJfYm9sdGVkX2lTZXJpZXM6Ci0JbXRjcmYJMHg4MCxyMTIKLQltZnNwcglyMTIsU1BSTl9TUFJHMgotCUVYQ0VQVElPTl9QUk9MT0dfMShQQUNBX0VYU0xCKQorCXN0ZAlyMTEsUEFDQV9FWFNMQitFWF9SMTEocjEzKQorCXN0ZAlyMTIsUEFDQV9FWFNMQitFWF9SMTIocjEzKQorCW1mc3ByCXIxMCxTUFJOX1NQUkdfU0NSQVRDSDAKKwlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfUjEzKHIxMykKIAlFWENFUFRJT05fUFJPTE9HX0lTRVJJRVNfMQogCWIJLmRvX3N0YWJfYm9sdGVkCiAKIAkuZ2xvYmwJZGF0YV9hY2Nlc3Nfc2xiX2lTZXJpZXMKIGRhdGFfYWNjZXNzX3NsYl9pU2VyaWVzOgotCW10c3ByCVNQUk5fU1BSRzEscjEzCQkvKiBzYXZlIHIxMyAqLwotCW1mc3ByCXIxMyxTUFJOX1NQUkczCQkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLHIxMwkvKiBzYXZlIHIxMyAqLworCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQQkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCiAJc3RkCXIzLFBBQ0FfRVhTTEIrRVhfUjMocjEzKQogCW1mc3ByCXIzLFNQUk5fREFSCiAJc3RkCXI5LFBBQ0FfRVhTTEIrRVhfUjkocjEzKQpAQCAtMTY1LDcgKzE3Niw3IEBACiAJc3RkCXIxMCxQQUNBX0VYU0xCK0VYX1IxMChyMTMpCiAJc3RkCXIxMSxQQUNBX0VYU0xCK0VYX1IxMShyMTMpCiAJc3RkCXIxMixQQUNBX0VYU0xCK0VYX1IxMihyMTMpCi0JbWZzcHIJcjEwLFNQUk5fU1BSRzEKKwltZnNwcglyMTAsU1BSTl9TUFJHX1NDUkFUQ0gwCiAJc3RkCXIxMCxQQUNBX0VYU0xCK0VYX1IxMyhyMTMpCiAJbGQJcjEyLFBBQ0FMUFBBQ0FQVFIocjEzKQogCWxkCXIxMixMUFBBQ0FTUlIxKHIxMikKQEAgLTE3NSw4ICsxODYsOCBAQAogCiAJLmdsb2JsCWluc3RydWN0aW9uX2FjY2Vzc19zbGJfaVNlcmllcwogaW5zdHJ1Y3Rpb25fYWNjZXNzX3NsYl9pU2VyaWVzOgotCW10c3ByCVNQUk5fU1BSRzEscjEzCQkvKiBzYXZlIHIxMyAqLwotCW1mc3ByCXIxMyxTUFJOX1NQUkczCQkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLHIxMwkvKiBzYXZlIHIxMyAqLworCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQQkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCiAJc3RkCXIzLFBBQ0FfRVhTTEIrRVhfUjMocjEzKQogCWxkCXIzLFBBQ0FMUFBBQ0FQVFIocjEzKQogCWxkCXIzLExQUEFDQVNSUjAocjMpCS8qIGdldCBTUlIwIHZhbHVlICovCkBAIC0xODksNyArMjAwLDcgQEAKIAlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfUjEwKHIxMykKIAlzdGQJcjExLFBBQ0FfRVhTTEIrRVhfUjExKHIxMykKIAlzdGQJcjEyLFBBQ0FfRVhTTEIrRVhfUjEyKHIxMykKLQltZnNwcglyMTAsU1BSTl9TUFJHMQorCW1mc3ByCXIxMCxTUFJOX1NQUkdfU0NSQVRDSDAKIAlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfUjEzKHIxMykKIAlsZAlyMTIsUEFDQUxQUEFDQVBUUihyMTMpCiAJbGQJcjEyLExQUEFDQVNSUjEocjEyKQpAQCAtMjAwLDcgKzIxMSw3IEBACiAJc3RkCXIxMCxQQUNBX0VYR0VOK0VYX1IxMChyMTMpCiAJc3RkCXIxMSxQQUNBX0VYR0VOK0VYX1IxMShyMTMpCiAJc3RkCXIxMixQQUNBX0VYR0VOK0VYX1IxMihyMTMpCi0JbWZzcHIJcjEwLFNQUkcxCisJbWZzcHIJcjEwLFNQUkdfU0NSQVRDSDAKIAlsZAlyMTEsUEFDQV9FWFNMQitFWF9SOShyMTMpCiAJbGQJcjEyLFBBQ0FfRVhTTEIrRVhfUjMocjEzKQogCXN0ZAlyMTAsUEFDQV9FWEdFTitFWF9SMTMocjEzKQpAQCAtMjIxLDcgKzIzMiw3IEBACiAJLmdsb2JsCXN5c3RlbV9jYWxsX2lTZXJpZXMKIHN5c3RlbV9jYWxsX2lTZXJpZXM6CiAJbXIJcjkscjEzCi0JbWZzcHIJcjEzLFNQUk5fU1BSRzMKKwltZnNwcglyMTMsU1BSTl9TUFJHX1BBQ0EKIAlFWENFUFRJT05fUFJPTE9HX0lTRVJJRVNfMQogCWIJc3lzdGVtX2NhbGxfY29tbW9uCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9leGNlcHRpb24uaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9leGNlcHRpb24uaAppbmRleCBjZWQ0NWE4Li5iYWUzZmJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZXhjZXB0aW9uLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2V4Y2VwdGlvbi5oCkBAIC0yNCw3ICsyNCw3IEBACiAgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGFzbS9leGNlcHRpb24uaD4KKyNpbmNsdWRlIDxhc20vZXhjZXB0aW9uLTY0cy5oPgogCiAjZGVmaW5lIEVYQ0VQVElPTl9QUk9MT0dfSVNFUklFU18xCQkJCQlcCiAJbWZtc3IJcjEwOwkJCQkJCQlcCkBAIC0zOCw3ICszOCw3IEBACiAJLmdsb2JsIGxhYmVsIyNfaVNlcmllczsJCQkJCQlcCiBsYWJlbCMjX2lTZXJpZXM6CQkJCQkJCVwKIAlITVRfTUVESVVNOwkJCQkJCQlcCi0JbXRzcHIJU1BSTl9TUFJHMSxyMTM7CQkvKiBzYXZlIHIxMyAqLwkJCVwKKwltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzOwkvKiBzYXZlIHIxMyAqLwkJCVwKIAlFWENFUFRJT05fUFJPTE9HXzEoYXJlYSk7CQkJCQlcCiAJRVhDRVBUSU9OX1BST0xPR19JU0VSSUVTXzE7CQkJCQlcCiAJYglsYWJlbCMjX2NvbW1vbgpAQCAtNDcsNyArNDcsNyBAQAogCS5nbG9ibCBsYWJlbCMjX2lTZXJpZXM7CQkJCQkJXAogbGFiZWwjI19pU2VyaWVzOgkJCQkJCQlcCiAJSE1UX01FRElVTTsJCQkJCQkJXAotCW10c3ByCVNQUk5fU1BSRzEscjEzOwkJLyogc2F2ZSByMTMgKi8JCQlcCisJbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLHIxMzsJLyogc2F2ZSByMTMgKi8JCQlcCiAJRVhDRVBUSU9OX1BST0xPR18xKFBBQ0FfRVhHRU4pOwkJCQkJXAogCWxieglyMTAsUEFDQVNPRlRJUlFFTihyMTMpOwkJCQkJXAogCWNtcHdpCTAscjEwLDA7CQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYwppbmRleCBmZWY0ZDUxLi4wZDkzNDNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYwpAQCAtODcyLDcgKzg3Miw3IEBACiAJCWNvdW50ID0gMjU2IC0gb2ZmOwogCiAJZG1hX2FkZHIgPSBpc2VyaWVzX2h2X21hcChwYWdlLCBvZmYgKyBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKLQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoTlVMTCwgZG1hX2FkZHIpKQorCWlmIChkbWFfYWRkciA9PSBETUFfRVJST1JfQ09ERSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KHBhZ2UsIDAsIG9mZiArIGNvdW50KTsKIAltZW1zZXQoJnZzcF9jbWQsIDAsIHNpemVvZih2c3BfY21kKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pZGxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pZGxlLmMKaW5kZXggNDM5MTFkOC4uNzViMjk2YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaWRsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lkbGUuYwpAQCAtOTAsNyArOTAsNyBAQAogc3RhdGljIGludCBfX2luaXQgaWRsZV9wYXJhbShjaGFyICpwKQogewogCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YobW9kZXMpL3NpemVvZihzdHJ1Y3Qgc2xlZXBfbW9kZSk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1vZGVzKTsgaSsrKSB7CiAJCWlmICghc3RyY21wKG1vZGVzW2ldLm5hbWUsIHApKSB7CiAJCQljdXJyZW50X21vZGUgPSBpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfMzIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCmluZGV4IDY1YzU4NWIuLjA4ZDk0ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCkBAIC00NCwxNCArNDQsNiBAQAogICovCiAjdW5kZWYgREVCVUdfRlJFUQogCi0vKgotICogVGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIGNvcmUgY3B1ZnJlcSBjb2RlIG9uIFNNUCBrZXJuZWxzLAotICogaXQgd29uJ3QgcmVjYWxjdWxhdGUgdGhlIEJvZ29taXBzIHByb3Blcmx5Ci0gKi8KLSNpZmRlZiBDT05GSUdfU01QCi0jd2FybmluZyAiV0FSTklORywgQ1BVRlJFUSBub3QgcmVjb21tZW5kZWQgb24gU01QIGtlcm5lbHMiCi0jZW5kaWYKLQogZXh0ZXJuIHZvaWQgbG93X2Nob29zZV83NDQ3YV9kZnMoaW50IGRmcyk7CiBleHRlcm4gdm9pZCBsb3dfY2hvb3NlXzc1MGZ4X3BsbChpbnQgcGxsKTsKIGV4dGVybiB2b2lkIGxvd19zbGVlcF9oYW5kbGVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYwppbmRleCBlNmMwMDQwLi5mYmM5YmJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYwpAQCAtMjQxOSwxMyArMjQxOSwxMyBAQAogCWR0ID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImRldmljZS10cmVlIik7CiAJaWYgKGR0ICE9IE5VTEwpCiAJCW1vZGVsID0gb2ZfZ2V0X3Byb3BlcnR5KGR0LCAibW9kZWwiLCBOVUxMKTsKLQlmb3IoaT0wOyBtb2RlbCAmJiBpPChzaXplb2YocG1hY19tYl9kZWZzKS9zaXplb2Yoc3RydWN0IHBtYWNfbWJfZGVmKSk7IGkrKykgeworCWZvcihpPTA7IG1vZGVsICYmIGk8QVJSQVlfU0laRShwbWFjX21iX2RlZnMpOyBpKyspIHsKIAkgICAgaWYgKHN0cmNtcChtb2RlbCwgcG1hY19tYl9kZWZzW2ldLm1vZGVsX3N0cmluZykgPT0gMCkgewogCQlwbWFjX21iID0gcG1hY19tYl9kZWZzW2ldOwogCQlnb3RvIGZvdW5kOwogCSAgICB9CiAJfQotCWZvcihpPTA7IGk8KHNpemVvZihwbWFjX21iX2RlZnMpL3NpemVvZihzdHJ1Y3QgcG1hY19tYl9kZWYpKTsgaSsrKSB7CisJZm9yKGk9MDsgaTxBUlJBWV9TSVpFKHBtYWNfbWJfZGVmcyk7IGkrKykgewogCSAgICBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKHBtYWNfbWJfZGVmc1tpXS5tb2RlbF9zdHJpbmcpKSB7CiAJCXBtYWNfbWIgPSBwbWFjX21iX2RlZnNbaV07CiAJCWdvdG8gZm91bmQ7CkBAIC0yNTg5LDkgKzI1ODksMTYgQEAKIAlpZiAoYWRkcmVzcyA9PSAwKQogCQlyZXR1cm47CiAJdW5pbm9ydGhfYmFzZSA9IGlvcmVtYXAoYWRkcmVzcywgMHg0MDAwMCk7CisJaWYgKHVuaW5vcnRoX2Jhc2UgPT0gTlVMTCkKKwkJcmV0dXJuOwogCXVuaW5vcnRoX3JldiA9IGluX2JlMzIoVU5fUkVHKFVOSV9OX1ZFUlNJT04pKTsKLQlpZiAodW5pbm9ydGhfbWFqID09IDMgfHwgdW5pbm9ydGhfbWFqID09IDQpCisJaWYgKHVuaW5vcnRoX21haiA9PSAzIHx8IHVuaW5vcnRoX21haiA9PSA0KSB7CiAJCXUzX2h0X2Jhc2UgPSBpb3JlbWFwKGFkZHJlc3MgKyBVM19IVF9DT05GSUdfQkFTRSwgMHgxMDAwKTsKKwkJaWYgKHUzX2h0X2Jhc2UgPT0gTlVMTCkgeworCQkJaW91bm1hcCh1bmlub3J0aF9iYXNlKTsKKwkJCXJldHVybjsKKwkJfQorCX0KIAogCXByaW50ayhLRVJOX0lORk8gIkZvdW5kICVzIG1lbW9yeSBjb250cm9sbGVyICYgaG9zdCBicmlkZ2UiCiAJICAgICAgICIgQCAweCUwOHggcmV2aXNpb246IDB4JTAyeFxuIiwgdW5pbm9ydGhfbWFqID09IDMgPyAiVTMiIDoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCmluZGV4IDA0Y2RkMzIuLmU4MTQwM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYwpAQCAtMTI4NiwzICsxMjg2LDY0IEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywgMHgwMjQwLCBmaXh1cF9rMl9zYXRhKTsKIAorLyoKKyAqIE9uIFU0IChha2EgQ1BDOTQ1KSB0aGUgUENJZSByb290IGNvbXBsZXggIlAyUCIgYnJpZGdlIHJlc291cmNlIHJhbmdlcyBhcmVuJ3QKKyAqIGNvbmZpZ3VyZWQgYnkgdGhlIGZpcm13YXJlLiBUaGUgYnJpZGdlIGl0c2VsZiBzZWVtcyB0byBpZ25vcmUgdGhlbSBidXQgaXQKKyAqIGNhdXNlcyBwcm9ibGVtcyB3aXRoIExpbnV4IHdoaWNoIHRoZW4gcmUtYXNzaWducyBkZXZpY2VzIGJlbG93IHRoZSBicmlkZ2UsCisgKiB0aHVzIGNoYW5naW5nIGFkZHJlc3NlcyBvZiB0aG9zZSBkZXZpY2VzIGZyb20gd2hhdCB3YXMgaW4gdGhlIGRldmljZS10cmVlLAorICogd2hpY2ggc3Vja3Mgd2hlbiB0aG9zZSBhcmUgdmlkZW8gY2FyZHMgdXNpbmcgb2ZmYgorICoKKyAqIFdlIGNvdWxkIGp1c3QgbWFyayBpdCB0cmFuc3BhcmVudCBidXQgSSBwcmVmZXIgZml4aW5nIHVwIHRoZSByZXNvdXJjZXMgdG8KKyAqIHByb3Blcmx5IHNob3cgd2hhdCdzIGdvaW5nIG9uIGhlcmUsIGFzIEkgaGF2ZSBzb21lIGRvdWJ0cyBhYm91dCBoYXZpbmcgdGhlbQorICogYmFkbHkgY29uZmlndXJlZCBwb3RlbnRpYWxseSBiZWluZyBhbiBpc3N1ZSBmb3IgRE1BLgorICoKKyAqIFdlIGxlYXZlIFBJTyBhbG9uZSwgaXQgc2VlbXMgdG8gYmUgZmluZQorICoKKyAqIE9oIGFuZCB0aGVyZSdzIGFub3RoZXIgZnVubnkgYnVnLiBUaGUgT0YgcHJvcGVydGllcyBhZHZlcnRpemUgdGhlIHJlZ2lvbgorICogMHhmMTAwMDAwMC4uMHhmMWZmZmZmZiBhcyBiZWluZyBmb3J3YXJkZWQgYXMgbWVtb3J5IHNwYWNlLiBCdXQgdGhhdCdzCisgKiBhY3R1YWxseSBub3QgdHJ1ZSwgdGhpcyByZWdpb24gaXMgdGhlIG1lbW9yeSBtYXBwZWQgY29uZmlnIHNwYWNlLiBTbyB3ZQorICogYWxzbyBuZWVkIHRvIGZpbHRlciBpdCBvdXQgb3Igd2UnbGwgbWFwIHRoaW5ncyBpbiB0aGUgd3JvbmcgcGxhY2UuCisgKi8KK3N0YXRpYyB2b2lkIGZpeHVwX3U0X3BjaWUoc3RydWN0IHBjaV9kZXYqIGRldikKK3sKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc3QgPSBwY2lfYnVzX3RvX2hvc3QoZGV2LT5idXMpOworCXN0cnVjdCByZXNvdXJjZSAqcmVnaW9uID0gTlVMTDsKKwl1MzIgcmVnOworCWludCBpOworCisJLyogT25seSBkbyB0aGF0IG9uIFBvd2VyTWFjICovCisJaWYgKCFtYWNoaW5lX2lzKHBvd2VybWFjKSkKKwkJcmV0dXJuOworCisJLyogRmluZCB0aGUgbGFyZ2VzdCBNTUlPIHJlZ2lvbiAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJc3RydWN0IHJlc291cmNlICpyID0gJmhvc3QtPm1lbV9yZXNvdXJjZXNbaV07CisJCWlmICghKHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pKQorCQkJY29udGludWU7CisJCS8qIFNraXAgdGhlIDB4ZjB4eHh4eHguLmYyeHh4eHh4IHJlZ2lvbnMsIHdlIGtub3cgdGhleQorCQkgKiBhcmUgcmVzZXJ2ZWQgYnkgSFcgZm9yIG90aGVyIHRoaW5ncworCQkgKi8KKwkJaWYgKHItPnN0YXJ0ID49IDB4ZjAwMDAwMDAgJiYgci0+c3RhcnQgPCAweGYzMDAwMDAwKQorCQkJY29udGludWU7CisJCWlmICghcmVnaW9uIHx8IChyLT5lbmQgLSByLT5zdGFydCkgPgorCQkgICAgKHJlZ2lvbi0+ZW5kIC0gcmVnaW9uLT5zdGFydCkpCisJCQlyZWdpb24gPSByOworCX0KKwkvKiBOb3RoaW5nIGZvdW5kLCBiYWlsICovCisJaWYgKHJlZ2lvbiA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBQcmludCB0aGluZ3Mgb3V0ICovCisJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBGaXh1cCBVNCBQQ0llIGJyaWRnZSByYW5nZTogJXBSXG4iLCByZWdpb24pOworCisJLyogRml4dXAgYnJpZGdlIGNvbmZpZyBzcGFjZS4gV2Uga25vdyBpdCdzIGEgTWFjLCByZXNvdXJjZSBhcmVuJ3QKKwkgKiBvZmZzZXQgc28gbGV0J3MganVzdCBibGFzdCB0aGVtIGFzLWlzLiBXZSBhbHNvIGtub3cgdGhhdCB0aGV5CisJICogZml0IGluIDMyIGJpdHMKKwkgKi8KKwlyZWcgPSAoKHJlZ2lvbi0+c3RhcnQgPj4gMTYpICYgMHhmZmYwKSB8IChyZWdpb24tPmVuZCAmIDB4ZmZmMDAwMDApOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfTUVNT1JZX0JBU0UsIHJlZyk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9QUkVGX0JBU0VfVVBQRVIzMiwgMCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9QUkVGX0xJTUlUX1VQUEVSMzIsIDApOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfUFJFRl9NRU1PUllfQkFTRSwgMCk7Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BUFBMRSwgUENJX0RFVklDRV9JRF9BUFBMRV9VNF9QQ0lFLCBmaXh1cF91NF9wY2llKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCmluZGV4IDZkNGRhN2IuLjkzN2EzOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwpAQCAtNDA4LDcgKzQwOCw3IEBACiAJLyogcmVzZXQgdGhlIGVudHJ5IHBvaW50IHNvIGlmIHdlIGdldCBhbm90aGVyIGludHIgd2Ugd29uJ3QKIAkgKiB0cnkgdG8gc3RhcnR1cCBhZ2FpbiAqLwogCW91dF9iZTMyKHBzdXJnZV9zdGFydCwgMHgxMDApOwotCWlmIChzZXR1cF9pcnEoMzAsICZwc3VyZ2VfaXJxYWN0aW9uKSkKKwlpZiAoc2V0dXBfaXJxKGlycV9jcmVhdGVfbWFwcGluZyhOVUxMLCAzMCksICZwc3VyZ2VfaXJxYWN0aW9uKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBnZXQgcHJpbWFyeSBJUEkgaW50ZXJydXB0Iik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9tbS5jCmluZGV4IDg0NmViOGIuLjE4OWEyNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYwpAQCAtMjMsOCArMjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21lbW9yeV9ob3RwbHVnLmg+CiAjaW5jbHVkZSA8bGludXgvbG1iLmg+CiAKKyNpbmNsdWRlIDxhc20vY2VsbC1yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgogI2luY2x1ZGUgPGFzbS9sdjFjYWxsLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NtcC5jCmluZGV4IGY2ZTA0YmMuLjUxZmZkZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NtcC5jCkBAIC0zNyw3ICszNyw3IEBACiAgICovCiAKICNkZWZpbmUgTVNHX0NPVU5UIDQKLXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIHBzM19pcGlfdmlycXNbTVNHX0NPVU5UXSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50IFtNU0dfQ09VTlRdLCBwczNfaXBpX3ZpcnFzKTsKIAogc3RhdGljIHZvaWQgZG9fbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMKaW5kZXggM2Y3NjNjNS4uZTM0YjMwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3lzdGVtLWJ1cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAjaW5jbHVkZSA8YXNtL2x2MWNhbGwuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaW9tbXUuaD4KKyNpbmNsdWRlIDxhc20vY2VsbC1yZWdzLmg+CiAKICNpbmNsdWRlICJwbGF0Zm9ybS5oIgogCkBAIC02OTQsNyArNjk0LDcgQEAKIAlyZXR1cm4gbWFzayA+PSBETUFfQklUX01BU0soMzIpOwogfQogCi1zdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyBwczNfc2JfZG1hX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZG1hX21hcF9vcHMgcHMzX3NiX2RtYV9vcHMgPSB7CiAJLmFsbG9jX2NvaGVyZW50ID0gcHMzX2FsbG9jX2NvaGVyZW50LAogCS5mcmVlX2NvaGVyZW50ID0gcHMzX2ZyZWVfY29oZXJlbnQsCiAJLm1hcF9zZyA9IHBzM19zYl9tYXBfc2csCkBAIC03MDQsNyArNzA0LDcgQEAKIAkudW5tYXBfcGFnZSA9IHBzM191bm1hcF9wYWdlLAogfTsKIAotc3RhdGljIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgcHMzX2lvYzBfZG1hX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZG1hX21hcF9vcHMgcHMzX2lvYzBfZG1hX29wcyA9IHsKIAkuYWxsb2NfY29oZXJlbnQgPSBwczNfYWxsb2NfY29oZXJlbnQsCiAJLmZyZWVfY29oZXJlbnQgPSBwczNfZnJlZV9jb2hlcmVudCwKIAkubWFwX3NnID0gcHMzX2lvYzBfbWFwX3NnLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jCmluZGV4IGFkMTUyYTAuLmI2ZmEzZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCWlmIChkbi0+Y2hpbGQpCiAJCWVlaF9hZGRfZGV2aWNlX3RyZWVfZWFybHkoZG4pOwogCi0Jc2Nhbl9waGIocGhiKTsKKwlwY2liaW9zX3NjYW5fcGhiKHBoYiwgZG4pOwogCXBjaWJpb3NfZmluaXNoX2FkZGluZ190b19idXMocGhiLT5idXMpOwogCiAJcmV0dXJuIHBoYjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKaW5kZXggYjZmMWIxMy4uMmUyYmJlMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BTZXJpZXNfcmVjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CiAKIAogCkBAIC00MzksOSArNDQwLDE1IEBACiAJaWYgKCFuZXdwcm9wKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWlmICghc3RyY21wKG5hbWUsICJzbGItc2l6ZSIpIHx8ICFzdHJjbXAobmFtZSwgImlibSxzbGItc2l6ZSIpKQorCQlzbGJfc2V0X3NpemUoKihpbnQgKil2YWx1ZSk7CisKIAlvbGRwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShucCwgbmFtZSxOVUxMKTsKLQlpZiAoIW9sZHByb3ApCisJaWYgKCFvbGRwcm9wKSB7CisJCWlmIChzdHJsZW4obmFtZSkpCisJCQlyZXR1cm4gcHJvbV9hZGRfcHJvcGVydHkobnAsIG5ld3Byb3ApOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlyYyA9IHByb21fdXBkYXRlX3Byb3BlcnR5KG5wLCBuZXdwcm9wLCBvbGRwcm9wKTsKIAlpZiAocmMpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCmluZGV4IDhkNzVlYTIuLmNhNWYyZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCkBAIC0yMjMsMTAgKzIyMyw2IEBACiAJc2V0ID0gMVVMIDw8IDYzOwogCXJlc2V0ID0gMDsKIAlwbHBhcl9oY2FsbF9ub3JldHMoSF9QRVJGTU9OLCBzZXQsIHJlc2V0KTsKLQotCS8qIGluc3RydWN0IGh5cGVydmlzb3IgdG8gbWFpbnRhaW4gUE1DcyAqLwotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1NQTFBBUikpCi0JCWdldF9scHBhY2EoKS0+cG1jcmVnc19pbl91c2UgPSAxOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHNlcmllc19kaXNjb3Zlcl9waWModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwppbmRleCAxZjhmNmNmLi40NDAwMDBjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCkBAIC01Niw4ICs1Niw2IEBACiAgKi8KIHN0YXRpYyBjcHVtYXNrX3Qgb2Zfc3Bpbl9tYXA7CiAKLWV4dGVybiB2b2lkIGdlbmVyaWNfc2Vjb25kYXJ5X3NtcF9pbml0KHVuc2lnbmVkIGxvbmcpOwotCiAvKioKICAqIHNtcF9zdGFydHVwX2NwdSgpIC0gc3RhcnQgdGhlIGdpdmVuIGNwdQogICoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3Jpby5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcmlvLmMKaW5kZXggY2JiM2JlZC4uNzU3YTgzZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcmlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcmlvLmMKQEAgLTEwNTcsNiArMTA1NywxMCBAQAogCQkJbGF3X3N0YXJ0LCBsYXdfc2l6ZSk7CiAKIAlvcHMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmlvX29wcyksIEdGUF9LRVJORUwpOworCWlmICghb3BzKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3BzOworCX0KIAlvcHMtPmxjcmVhZCA9IGZzbF9sb2NhbF9jb25maWdfcmVhZDsKIAlvcHMtPmxjd3JpdGUgPSBmc2xfbG9jYWxfY29uZmlnX3dyaXRlOwogCW9wcy0+Y3JlYWQgPSBmc2xfcmlvX2NvbmZpZ19yZWFkOwpAQCAtMTA2NCw2ICsxMDY4LDEwIEBACiAJb3BzLT5kc2VuZCA9IGZzbF9yaW9fZG9vcmJlbGxfc2VuZDsKIAogCXBvcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmlvX21wb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0KSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfcG9ydDsKKwl9CiAJcG9ydC0+aWQgPSAwOwogCXBvcnQtPmluZGV4ID0gMDsKIApAQCAtMTA3MSw3ICsxMDc5LDcgQEAKIAlpZiAoIXByaXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBhbGxvYyBtZW1vcnkgZm9yICdwcml2J1xuIik7CiAJCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX3ByaXY7CiAJfQogCiAJSU5JVF9MSVNUX0hFQUQoJnBvcnQtPmRiZWxscyk7CkBAIC0xMTY5LDExICsxMTc3LDEzIEBACiAKIAlyZXR1cm4gMDsKIGVycjoKLQlpZiAocHJpdikKLQkJaW91bm1hcChwcml2LT5yZWdzX3dpbik7Ci0Ja2ZyZWUob3BzKTsKKwlpb3VubWFwKHByaXYtPnJlZ3Nfd2luKTsKIAlrZnJlZShwcml2KTsKK2Vycl9wcml2OgogCWtmcmVlKHBvcnQpOworZXJyX3BvcnQ6CisJa2ZyZWUob3BzKTsKK2Vycl9vcHM6CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCmluZGV4IDk1ZGJjNjQuLmFkY2E0YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CiAjaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KICNpbmNsdWRlIDxhc20vY3BtMi5oPgpAQCAtMzgzLDggKzM4NCw5IEBACiAJCWlmICghcnN0Y3IpCiAJCQlwcmludGsgKEtFUk5fRU1FUkcgIkVycm9yOiByZXNldCBjb250cm9sIHJlZ2lzdGVyICIKIAkJCQkJIm5vdCBtYXBwZWQhXG4iKTsKLQl9IGVsc2UKLQkJcHJpbnRrIChLRVJOX0lORk8gInJzdGNyIGNvbXBhdGlibGUgcmVnaXN0ZXIgZG9lcyBub3QgZXhpc3QhXG4iKTsKKwl9IGVsc2UgaWYgKHBwY19tZC5yZXN0YXJ0ID09IGZzbF9yc3Rjcl9yZXN0YXJ0KQorCQlwcmludGsoS0VSTl9FUlIgIk5vIFJTVENSIHJlZ2lzdGVyLCB3YXJtIHJlYm9vdCB3b24ndCB3b3JrXG4iKTsKKwogCWlmIChucCkKIAkJb2Zfbm9kZV9wdXQobnApOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwppbmRleCA2OWUyNjMwLi5jYjc2ODljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwpAQCAtNzM1LDggKzczNSwxMCBAQAogCWlwaWMtPmlycWhvc3QgPSBpcnFfYWxsb2NfaG9zdChub2RlLCBJUlFfSE9TVF9NQVBfTElORUFSLAogCQkJCSAgICAgICBOUl9JUElDX0lOVFMsCiAJCQkJICAgICAgICZpcGljX2hvc3Rfb3BzLCAwKTsKLQlpZiAoaXBpYy0+aXJxaG9zdCA9PSBOVUxMKQorCWlmIChpcGljLT5pcnFob3N0ID09IE5VTEwpIHsKKwkJa2ZyZWUoaXBpYyk7CiAJCXJldHVybiBOVUxMOworCX0KIAogCWlwaWMtPnJlZ3MgPSBpb3JlbWFwKHJlcy5zdGFydCwgcmVzLmVuZCAtIHJlcy5zdGFydCArIDEpOwogCkBAIC03ODEsNiArNzgzLDkgQEAKIAlwcmltYXJ5X2lwaWMgPSBpcGljOwogCWlycV9zZXRfZGVmYXVsdF9ob3N0KHByaW1hcnlfaXBpYy0+aXJxaG9zdCk7CiAKKwlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIElQSUNfU0lNU1JfSCwgMCk7CisJaXBpY193cml0ZShpcGljLT5yZWdzLCBJUElDX1NJTVNSX0wsIDApOworCiAJcHJpbnRrICgiSVBJQyAoJWQgSVJRIHNvdXJjZXMpIGF0ICVwXG4iLCBOUl9JUElDX0lOVFMsCiAJCQlwcmltYXJ5X2lwaWMtPnJlZ3MpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21taW9fbnZyYW0uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbW1pb19udnJhbS5jCmluZGV4IDdiNDk2MzNhLi4yMDczMjQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21taW9fbnZyYW0uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21taW9fbnZyYW0uYwpAQCAtNTMsNiArNTMsMjMgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG1taW9fbnZyYW1fcmVhZF92YWwoaW50IGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKworCWlmIChhZGRyID49IG1taW9fbnZyYW1fbGVuKQorCQlyZXR1cm4gMHhmZjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtbWlvX252cmFtX2xvY2ssIGZsYWdzKTsKKworCXZhbCA9IGlvcmVhZDgobW1pb19udnJhbV9zdGFydCArIGFkZHIpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW1pb19udnJhbV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdmFsOworfQorCiBzdGF0aWMgc3NpemVfdCBtbWlvX252cmFtX3dyaXRlKGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmluZGV4KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03Miw2ICs4OSwxOSBAQAogCXJldHVybiBjb3VudDsKIH0KIAordm9pZCBtbWlvX252cmFtX3dyaXRlX3ZhbChpbnQgYWRkciwgdW5zaWduZWQgY2hhciB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChhZGRyIDwgbW1pb19udnJhbV9sZW4pIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm1taW9fbnZyYW1fbG9jaywgZmxhZ3MpOworCisJCWlvd3JpdGU4KHZhbCwgbW1pb19udnJhbV9zdGFydCArIGFkZHIpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1taW9fbnZyYW1fbG9jaywgZmxhZ3MpOworCX0KK30KKwogc3RhdGljIHNzaXplX3QgbW1pb19udnJhbV9nZXRfc2l6ZSh2b2lkKQogewogCXJldHVybiBtbWlvX252cmFtX2xlbjsKQEAgLTExNCw2ICsxNDQsOCBAQAogCXByaW50ayhLRVJOX0lORk8gIm1taW8gTlZSQU0sICVsdWsgYXQgMHglbHggbWFwcGVkIHRvICVwXG4iLAogCSAgICAgICBtbWlvX252cmFtX2xlbiA+PiAxMCwgbnZyYW1fYWRkciwgbW1pb19udnJhbV9zdGFydCk7CiAKKwlwcGNfbWQubnZyYW1fcmVhZF92YWwJPSBtbWlvX252cmFtX3JlYWRfdmFsOworCXBwY19tZC5udnJhbV93cml0ZV92YWwJPSBtbWlvX252cmFtX3dyaXRlX3ZhbDsKIAlwcGNfbWQubnZyYW1fcmVhZAk9IG1taW9fbnZyYW1fcmVhZDsKIAlwcGNfbWQubnZyYW1fd3JpdGUJPSBtbWlvX252cmFtX3dyaXRlOwogCXBwY19tZC5udnJhbV9zaXplCT0gbW1pb19udnJhbV9nZXRfc2l6ZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKaW5kZXggMzk4MWFlNC4uMzBjNDRlNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKQEAgLTIzMCwxNCArMjMwLDE2IEBACiB7CiAJdW5zaWduZWQgaW50CWlzdSA9IHNyY19ubyA+PiBtcGljLT5pc3Vfc2hpZnQ7CiAJdW5zaWduZWQgaW50CWlkeCA9IHNyY19ubyAmIG1waWMtPmlzdV9tYXNrOworCXVuc2lnbmVkIGludAl2YWw7CiAKKwl2YWwgPSBfbXBpY19yZWFkKG1waWMtPnJlZ190eXBlLCAmbXBpYy0+aXN1c1tpc3VdLAorCQkJIHJlZyArIChpZHggKiBNUElDX0lORk8oSVJRX1NUUklERSkpKTsKICNpZmRlZiBDT05GSUdfTVBJQ19CUk9LRU5fUkVHUkVBRAogCWlmIChyZWcgPT0gMCkKLQkJcmV0dXJuIG1waWMtPmlzdV9yZWcwX3NoYWRvd1tpZHhdOwotCWVsc2UKKwkJdmFsID0gKHZhbCAmIChNUElDX1ZFQ1BSSV9NQVNLIHwgTVBJQ19WRUNQUklfQUNUSVZJVFkpKSB8CisJCQltcGljLT5pc3VfcmVnMF9zaGFkb3dbc3JjX25vXTsKICNlbmRpZgotCQlyZXR1cm4gX21waWNfcmVhZChtcGljLT5yZWdfdHlwZSwgJm1waWMtPmlzdXNbaXN1XSwKLQkJCQkgIHJlZyArIChpZHggKiBNUElDX0lORk8oSVJRX1NUUklERSkpKTsKKwlyZXR1cm4gdmFsOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX21waWNfaXJxX3dyaXRlKHN0cnVjdCBtcGljICptcGljLCB1bnNpZ25lZCBpbnQgc3JjX25vLApAQCAtMjUxLDcgKzI1Myw4IEBACiAKICNpZmRlZiBDT05GSUdfTVBJQ19CUk9LRU5fUkVHUkVBRAogCWlmIChyZWcgPT0gMCkKLQkJbXBpYy0+aXN1X3JlZzBfc2hhZG93W2lkeF0gPSB2YWx1ZTsKKwkJbXBpYy0+aXN1X3JlZzBfc2hhZG93W3NyY19ub10gPQorCQkJdmFsdWUgJiB+KE1QSUNfVkVDUFJJX01BU0sgfCBNUElDX1ZFQ1BSSV9BQ1RJVklUWSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvZ3Bpby5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvZ3Bpby5jCmluZGV4IDM0ODUyODguLjhlN2E3NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL2dwaW8uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9ncGlvLmMKQEAgLTEwNSwxNCArMTA1LDE0IEBACiAJc3RydWN0IHFlX2dwaW9fY2hpcCAqcWVfZ2MgPSB0b19xZV9ncGlvX2NoaXAobW1fZ2MpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlxZV9ncGlvX3NldChnYywgZ3BpbywgdmFsKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZxZV9nYy0+bG9jaywgZmxhZ3MpOwogCiAJX19wYXJfaW9fY29uZmlnX3BpbihtbV9nYy0+cmVncywgZ3BpbywgUUVfUElPX0RJUl9PVVQsIDAsIDAsIDApOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWVfZ2MtPmxvY2ssIGZsYWdzKTsKIAotCXFlX2dwaW9fc2V0KGdjLCBncGlvLCB2YWwpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZS5jCmluZGV4IDIzN2UzNjUuLjQ2NDI3MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYwpAQCAtNjUsNiArNjUsMTkgQEAKIAogc3RhdGljIHBoeXNfYWRkcl90IHFlYmFzZSA9IC0xOwogCitpbnQgcWVfYWxpdmVfZHVyaW5nX3NsZWVwKHZvaWQpCit7CisJc3RhdGljIGludCByZXQgPSAtMTsKKworCWlmIChyZXQgIT0gLTEpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSAhb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxtcGM4NTY5LXBtYyIpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocWVfYWxpdmVfZHVyaW5nX3NsZWVwKTsKKwogcGh5c19hZGRyX3QgZ2V0X3FlX2Jhc2Uodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnFlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMKaW5kZXggMDc0OTA1Yy4uM2ZhYTQyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jCkBAIC0zMzksOCArMzM5LDEwIEBACiAKIAlxZV9pYy0+aXJxaG9zdCA9IGlycV9hbGxvY19ob3N0KG5vZGUsIElSUV9IT1NUX01BUF9MSU5FQVIsCiAJCQkJCU5SX1FFX0lDX0lOVFMsICZxZV9pY19ob3N0X29wcywgMCk7Ci0JaWYgKHFlX2ljLT5pcnFob3N0ID09IE5VTEwpCisJaWYgKHFlX2ljLT5pcnFob3N0ID09IE5VTEwpIHsKKwkJa2ZyZWUocWVfaWMpOwogCQlyZXR1cm47CisJfQogCiAJcWVfaWMtPnJlZ3MgPSBpb3JlbWFwKHJlcy5zdGFydCwgcmVzLmVuZCAtIHJlcy5zdGFydCArIDEpOwogCkBAIC0zNTIsNiArMzU0LDcgQEAKIAogCWlmIChxZV9pYy0+dmlycV9sb3cgPT0gTk9fSVJRKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIG1hcCBRRV9JQyBsb3cgSVJRXG4iKTsKKwkJa2ZyZWUocWVfaWMpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy94bW9uL01ha2VmaWxlCmluZGV4IDg1YWI5N2EuLmZhYTgxYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL01ha2VmaWxlCkBAIC0yLDYgKzIsOCBAQAogCiBzdWJkaXItY2NmbGFncy0kKENPTkZJR19QUENfV0VSUk9SKSA6PSAtV2Vycm9yCiAKK0dDT1ZfUFJPRklMRSA6PSBuCisKIGlmZGVmIENPTkZJR19QUEM2NAogRVhUUkFfQ0ZMQUdTICs9IC1tbm8tbWluaW1hbC10b2MKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKaW5kZXggZTFmMzNhOC4uMGUwOWE0NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwpAQCAtMjU3MCw3ICsyNTcwLDcgQEAKIAlwcmludGYoIiVzIiwgYWZ0ZXIpOwogfQogCi0jaWZkZWYgQ09ORklHX1BQQzY0CisjaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKIHN0YXRpYyB2b2lkIGR1bXBfc2xiKHZvaWQpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDJhZTVkNzIuLjFjODY2ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC04NCw3ICs4NCw3IEBACiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1QKIAlzZWxlY3QgSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRAotCXNlbGVjdCBIQVZFX0ZUUkFDRV9TWVNDQUxMUworCXNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCXNlbGVjdCBIQVZFX0RFRkFVTFRfTk9fU1BJTl9NVVRFWEVTCkBAIC05NSw3ICs5NSw2IEBACiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKIAlzZWxlY3QgSU5JVF9BTExfUE9TU0lCTEUKIAlzZWxlY3QgSEFWRV9QRVJGX0NPVU5URVJTCi0Jc2VsZWN0IEdFTkVSSUNfQVRPTUlDNjQgaWYgITY0QklUCiAKIGNvbmZpZyBTQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVIKIAlib29sCkBAIC00ODEsMTMgKzQ4MCw2IEBACiAJICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIHRoZSBzcGVjaWFsIG1lc3NhZ2UgaW50ZXJmYWNlIHRvCiAJICB0aGUgY29vcGVyYXRpdmUgbWVtb3J5IG1hbmFnZW1lbnQuCiAKLWNvbmZpZyBQQUdFX1NUQVRFUwotCWJvb2wgIlVudXNlZCBwYWdlIG5vdGlmaWNhdGlvbiIKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgdGhlIG5vdGlmaWNhdGlvbiBvZiB1bnVzZWQgcGFnZXMgdG8gdGhlCi0JICBoeXBlcnZpc29yLiBUaGUgRVNTQSBpbnN0cnVjdGlvbiBpcyB1c2VkIHRvIGRvIHRoZSBzdGF0ZXMKLQkgIGNoYW5nZXMgYmV0d2VlbiBhIHBhZ2UgdGhhdCBoYXMgY29udGVudCBhbmQgdGhlIHVudXNlZCBzdGF0ZS4KLQogY29uZmlnIEFQUExEQVRBX0JBU0UKIAlib29sICJMaW51eCAtIFZNIE1vbml0b3IgU3RyZWFtLCBiYXNlIGluZnJhc3RydWN0dXJlIgogCWRlcGVuZHMgb24gUFJPQ19GUwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL01ha2VmaWxlIGIvYXJjaC9zMzkwL01ha2VmaWxlCmluZGV4IDBmZjM4N2MuLmZjOGZiMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAvTWFrZWZpbGUKQEAgLTg4LDggKzg4LDcgQEAKIGhlYWQteQkJOj0gYXJjaC9zMzkwL2tlcm5lbC9oZWFkLm8gYXJjaC9zMzkwL2tlcm5lbC9pbml0X3Rhc2subwogCiBjb3JlLXkJCSs9IGFyY2gvczM5MC9tbS8gYXJjaC9zMzkwL2tlcm5lbC8gYXJjaC9zMzkwL2NyeXB0by8gXAotCQkgICBhcmNoL3MzOTAvYXBwbGRhdGEvIGFyY2gvczM5MC9oeXBmcy8gYXJjaC9zMzkwL2t2bS8gXAotCQkgICBhcmNoL3MzOTAvcG93ZXIvCisJCSAgIGFyY2gvczM5MC9hcHBsZGF0YS8gYXJjaC9zMzkwL2h5cGZzLyBhcmNoL3MzOTAva3ZtLwogCiBsaWJzLXkJCSs9IGFyY2gvczM5MC9saWIvCiBkcml2ZXJzLXkJKz0gZHJpdmVycy9zMzkwLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9kZXNfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9kZXNfczM5MC5jCmluZGV4IDRhYmE4M2IuLjJiYzQ3OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vZGVzX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL2Rlc19zMzkwLmMKQEAgLTI1MCw4ICsyNTAsOSBAQAogCWNvbnN0IHU4ICp0ZW1wX2tleSA9IGtleTsKIAl1MzIgKmZsYWdzID0gJnRmbS0+Y3J0X2ZsYWdzOwogCi0JaWYgKCEobWVtY21wKGtleSwgJmtleVtERVNfS0VZX1NJWkVdLCBERVNfS0VZX1NJWkUpKSkgewotCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9TQ0hFRDsKKwlpZiAoIShtZW1jbXAoa2V5LCAma2V5W0RFU19LRVlfU0laRV0sIERFU19LRVlfU0laRSkpICYmCisJICAgICgqZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSkpIHsKKwkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX1dFQUtfS0VZOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKywgdGVtcF9rZXkgKz0gREVTX0tFWV9TSVpFKSB7CkBAIC00MTEsOSArNDEyLDkgQEAKIAogCWlmICghKG1lbWNtcChrZXksICZrZXlbREVTX0tFWV9TSVpFXSwgREVTX0tFWV9TSVpFKSAmJgogCSAgICBtZW1jbXAoJmtleVtERVNfS0VZX1NJWkVdLCAma2V5W0RFU19LRVlfU0laRSAqIDJdLAotCQkgICBERVNfS0VZX1NJWkUpKSkgewotCi0JCSpmbGFncyB8PSBDUllQVE9fVEZNX1JFU19CQURfS0VZX1NDSEVEOworCQkgICBERVNfS0VZX1NJWkUpKSAmJgorCSAgICAoKmZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfV0VBS19LRVkpKSB7CisJCSpmbGFncyB8PSBDUllQVE9fVEZNX1JFU19XRUFLX0tFWTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyssIHRlbXBfa2V5ICs9IERFU19LRVlfU0laRSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMKaW5kZXggZTg1YmEzNC4uZjZkZTc4MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jCkBAIC00NiwxMiArNDYsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzaGExX2V4cG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdm9pZCAqb3V0KQoreworCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwlzdHJ1Y3Qgc2hhMV9zdGF0ZSAqb2N0eCA9IG91dDsKKworCW9jdHgtPmNvdW50ID0gc2N0eC0+Y291bnQ7CisJbWVtY3B5KG9jdHgtPnN0YXRlLCBzY3R4LT5zdGF0ZSwgc2l6ZW9mKG9jdHgtPnN0YXRlKSk7CisJbWVtY3B5KG9jdHgtPmJ1ZmZlciwgc2N0eC0+YnVmLCBzaXplb2Yob2N0eC0+YnVmZmVyKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hhMV9pbXBvcnQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHZvaWQgKmluKQoreworCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwljb25zdCBzdHJ1Y3Qgc2hhMV9zdGF0ZSAqaWN0eCA9IGluOworCisJc2N0eC0+Y291bnQgPSBpY3R4LT5jb3VudDsKKwltZW1jcHkoc2N0eC0+c3RhdGUsIGljdHgtPnN0YXRlLCBzaXplb2YoaWN0eC0+c3RhdGUpKTsKKwltZW1jcHkoc2N0eC0+YnVmLCBpY3R4LT5idWZmZXIsIHNpemVvZihpY3R4LT5idWZmZXIpKTsKKwlzY3R4LT5mdW5jID0gS0lNRF9TSEFfMTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0gewogCS5kaWdlc3RzaXplCT0JU0hBMV9ESUdFU1RfU0laRSwKIAkuaW5pdAkJPQlzaGExX2luaXQsCiAJLnVwZGF0ZQkJPQlzMzkwX3NoYV91cGRhdGUsCiAJLmZpbmFsCQk9CXMzOTBfc2hhX2ZpbmFsLAorCS5leHBvcnQJCT0Jc2hhMV9leHBvcnQsCisJLmltcG9ydAkJPQlzaGExX2ltcG9ydCwKIAkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCisJLnN0YXRlc2l6ZQk9CXNpemVvZihzdHJ1Y3Qgc2hhMV9zdGF0ZSksCiAJLmJhc2UJCT0JewogCQkuY3JhX25hbWUJPQkic2hhMSIsCiAJCS5jcmFfZHJpdmVyX25hbWU9CSJzaGExLXMzOTAiLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jCmluZGV4IGY5ZmVmYzUuLjYxYTdkYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhMjU2X3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMKQEAgLTQyLDEyICs0MiwzOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNoYTI1Nl9leHBvcnQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHZvaWQgKm91dCkKK3sKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJc3RydWN0IHNoYTI1Nl9zdGF0ZSAqb2N0eCA9IG91dDsKKworCW9jdHgtPmNvdW50ID0gc2N0eC0+Y291bnQ7CisJbWVtY3B5KG9jdHgtPnN0YXRlLCBzY3R4LT5zdGF0ZSwgc2l6ZW9mKG9jdHgtPnN0YXRlKSk7CisJbWVtY3B5KG9jdHgtPmJ1Ziwgc2N0eC0+YnVmLCBzaXplb2Yob2N0eC0+YnVmKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hhMjU2X2ltcG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqaW4pCit7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqc2N0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCWNvbnN0IHN0cnVjdCBzaGEyNTZfc3RhdGUgKmljdHggPSBpbjsKKworCXNjdHgtPmNvdW50ID0gaWN0eC0+Y291bnQ7CisJbWVtY3B5KHNjdHgtPnN0YXRlLCBpY3R4LT5zdGF0ZSwgc2l6ZW9mKGljdHgtPnN0YXRlKSk7CisJbWVtY3B5KHNjdHgtPmJ1ZiwgaWN0eC0+YnVmLCBzaXplb2YoaWN0eC0+YnVmKSk7CisJc2N0eC0+ZnVuYyA9IEtJTURfU0hBXzI1NjsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0gewogCS5kaWdlc3RzaXplCT0JU0hBMjU2X0RJR0VTVF9TSVpFLAogCS5pbml0CQk9CXNoYTI1Nl9pbml0LAogCS51cGRhdGUJCT0JczM5MF9zaGFfdXBkYXRlLAogCS5maW5hbAkJPQlzMzkwX3NoYV9maW5hbCwKKwkuZXhwb3J0CQk9CXNoYTI1Nl9leHBvcnQsCisJLmltcG9ydAkJPQlzaGEyNTZfaW1wb3J0LAogCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkuc3RhdGVzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzaGEyNTZfc3RhdGUpLAogCS5iYXNlCQk9CXsKIAkJLmNyYV9uYW1lCT0JInNoYTI1NiIsCiAJCS5jcmFfZHJpdmVyX25hbWU9CSJzaGEyNTYtczM5MCIsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTUxMl9zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTUxMl9zMzkwLmMKaW5kZXggODMxOTJiZi4uNGJmNzNkMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYwpAQCAtMTMsNyArMTMsMTAgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgInNoYS5oIgpAQCAtMzcsMTIgKzQwLDQyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2hhNTEyX2V4cG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdm9pZCAqb3V0KQoreworCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwlzdHJ1Y3Qgc2hhNTEyX3N0YXRlICpvY3R4ID0gb3V0OworCisJb2N0eC0+Y291bnRbMF0gPSBzY3R4LT5jb3VudDsKKwlvY3R4LT5jb3VudFsxXSA9IDA7CisJbWVtY3B5KG9jdHgtPnN0YXRlLCBzY3R4LT5zdGF0ZSwgc2l6ZW9mKG9jdHgtPnN0YXRlKSk7CisJbWVtY3B5KG9jdHgtPmJ1Ziwgc2N0eC0+YnVmLCBzaXplb2Yob2N0eC0+YnVmKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hhNTEyX2ltcG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqaW4pCit7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqc2N0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCWNvbnN0IHN0cnVjdCBzaGE1MTJfc3RhdGUgKmljdHggPSBpbjsKKworCWlmICh1bmxpa2VseShpY3R4LT5jb3VudFsxXSkpCisJCXJldHVybiAtRVJBTkdFOworCXNjdHgtPmNvdW50ID0gaWN0eC0+Y291bnRbMF07CisKKwltZW1jcHkoc2N0eC0+c3RhdGUsIGljdHgtPnN0YXRlLCBzaXplb2YoaWN0eC0+c3RhdGUpKTsKKwltZW1jcHkoc2N0eC0+YnVmLCBpY3R4LT5idWYsIHNpemVvZihpY3R4LT5idWYpKTsKKwlzY3R4LT5mdW5jID0gS0lNRF9TSEFfNTEyOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBzaGE1MTJfYWxnID0gewogCS5kaWdlc3RzaXplCT0JU0hBNTEyX0RJR0VTVF9TSVpFLAogCS5pbml0CQk9CXNoYTUxMl9pbml0LAogCS51cGRhdGUJCT0JczM5MF9zaGFfdXBkYXRlLAogCS5maW5hbAkJPQlzMzkwX3NoYV9maW5hbCwKKwkuZXhwb3J0CQk9CXNoYTUxMl9leHBvcnQsCisJLmltcG9ydAkJPQlzaGE1MTJfaW1wb3J0LAogCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkuc3RhdGVzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzaGE1MTJfc3RhdGUpLAogCS5iYXNlCQk9CXsKIAkJLmNyYV9uYW1lCT0JInNoYTUxMiIsCiAJCS5jcmFfZHJpdmVyX25hbWU9CSJzaGE1MTItczM5MCIsCkBAIC03OCw3ICsxMTEsMTAgQEAKIAkuaW5pdAkJPQlzaGEzODRfaW5pdCwKIAkudXBkYXRlCQk9CXMzOTBfc2hhX3VwZGF0ZSwKIAkuZmluYWwJCT0JczM5MF9zaGFfZmluYWwsCisJLmV4cG9ydAkJPQlzaGE1MTJfZXhwb3J0LAorCS5pbXBvcnQJCT0Jc2hhNTEyX2ltcG9ydCwKIAkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCisJLnN0YXRlc2l6ZQk9CXNpemVvZihzdHJ1Y3Qgc2hhNTEyX3N0YXRlKSwKIAkuYmFzZQkJPQl7CiAJCS5jcmFfbmFtZQk9CSJzaGEzODQiLAogCQkuY3JhX2RyaXZlcl9uYW1lPQkic2hhMzg0LXMzOTAiLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2RlZmNvbmZpZyBiL2FyY2gvczM5MC9kZWZjb25maWcKaW5kZXggZmNiYTIwNi4uNGU5MWEyNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvZGVmY29uZmlnCkBAIC05MDAsNyArOTAwLDcgQEAKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9TWVNDQUxMUz15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwppbmRleCA1YTgwNWRmLi5iZDk5MTRiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwpAQCAtMzU1LDExICszNTUsNyBAQAogewogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBxc3RyIHFuYW1lOwogCi0JcW5hbWUubmFtZSA9IG5hbWU7Ci0JcW5hbWUubGVuID0gc3RybGVuKG5hbWUpOwotCXFuYW1lLmhhc2ggPSBmdWxsX25hbWVfaGFzaChuYW1lLCBxbmFtZS5sZW4pOwogCW11dGV4X2xvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmFtZSwgcGFyZW50LCBzdHJsZW4obmFtZSkpOwogCWlmIChJU19FUlIoZGVudHJ5KSkgewpAQCAtNDI2LDcgKzQyMiw3IEBACiAJY2hhciB0bXBbVE1QX1NJWkVdOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAotCXNucHJpbnRmKHRtcCwgVE1QX1NJWkUsICIlbGxkXG4iLCAodW5zaWduZWQgbG9uZyBsb25nIGludCl2YWx1ZSk7CisJc25wcmludGYodG1wLCBUTVBfU0laRSwgIiVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KXZhbHVlKTsKIAlidWZmZXIgPSBrc3RyZHVwKHRtcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWZmZXIpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IGM3ZDBhYmYuLmFlN2M4ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTEsMzMgKzEsMjMgQEAKICNpZm5kZWYgX19BUkNIX1MzOTBfQVRPTUlDX18KICNkZWZpbmUgX19BUkNIX1MzOTBfQVRPTUlDX18KIAorLyoKKyAqIENvcHlyaWdodCAxOTk5LDIwMDkgSUJNIENvcnAuCisgKiBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkgICAgICBEZW5pcyBKb3NlcGggQmFycm93LAorICoJICAgICAgQXJuZCBCZXJnbWFubiA8YXJuZGJAZGUuaWJtLmNvbT4sCisgKgorICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4KKyAqIFVzZWZ1bCBmb3IgcmVzb3VyY2UgY291bnRpbmcgZXRjLgorICogczM5MCB1c2VzICdDb21wYXJlIEFuZCBTd2FwJyBmb3IgYXRvbWljaXR5IGluIFNNUCBlbnZpcm9tZW50LgorICoKKyAqLworCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0vKgotICogIGluY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmgKLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSksCi0gKiAgICAgICAgICAgICAgIERlbmlzIEpvc2VwaCBCYXJyb3csCi0gKgkJIEFybmQgQmVyZ21hbm4gKGFybmRiQGRlLmlibS5jb20pCi0gKgotICogIERlcml2ZWQgZnJvbSAiaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaCIKLSAqICAgIENvcHlyaWdodCAoQykgMTk5MiwgTGludXMgVG9ydmFsZHMKLSAqCi0gKi8KLQotLyoKLSAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuICBVc2VmdWwgZm9yCi0gKiByZXNvdXJjZSBjb3VudGluZyBldGMuLgotICogUzM5MCB1c2VzICdDb21wYXJlIEFuZCBTd2FwJyBmb3IgYXRvbWljaXR5IGluIFNNUCBlbnZpcm9tZW50Ci0gKi8KLQogI2RlZmluZSBBVE9NSUNfSU5JVChpKSAgeyAoaSkgfQogCi0jaWZkZWYgX19LRVJORUxfXwotCiAjaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKIAogI2RlZmluZSBfX0NTX0xPT1AocHRyLCBvcF92YWwsIG9wX3N0cmluZykgKHsJCQkJXApAQCAtNzcsNyArNjcsNyBAQAogCWJhcnJpZXIoKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqIHYpCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCiB7CiAJcmV0dXJuIF9fQ1NfTE9PUCh2LCBpLCAiYXIiKTsKIH0KQEAgLTg3LDcgKzc3LDcgQEAKICNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4oX3YpCQlhdG9taWNfYWRkX3JldHVybigxLCBfdikKICNkZWZpbmUgYXRvbWljX2luY19hbmRfdGVzdChfdikJCShhdG9taWNfYWRkX3JldHVybigxLCBfdikgPT0gMCkKIAotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqIHYpCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCiB7CiAJcmV0dXJuIF9fQ1NfTE9PUCh2LCBpLCAic3IiKTsKIH0KQEAgLTk3LDE5ICs4NywxOSBAQAogI2RlZmluZSBhdG9taWNfZGVjX3JldHVybihfdikJCWF0b21pY19zdWJfcmV0dXJuKDEsIF92KQogI2RlZmluZSBhdG9taWNfZGVjX2FuZF90ZXN0KF92KQkJKGF0b21pY19zdWJfcmV0dXJuKDEsIF92KSA9PSAwKQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19jbGVhcl9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgYXRvbWljX3QgKiB2KQorc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19jbGVhcl9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgYXRvbWljX3QgKnYpCiB7Ci0JICAgICAgIF9fQ1NfTE9PUCh2LCB+bWFzaywgIm5yIik7CisJX19DU19MT09QKHYsIH5tYXNrLCAibnIiKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfc2V0X21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCBhdG9taWNfdCAqIHYpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3NldF9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgYXRvbWljX3QgKnYpCiB7Ci0JICAgICAgIF9fQ1NfTE9PUCh2LCBtYXNrLCAib3IiKTsKKwlfX0NTX0xPT1AodiwgbWFzaywgIm9yIik7CiB9CiAKICNkZWZpbmUgYXRvbWljX3hjaGcodiwgbmV3KSAoeGNoZygmKCh2KS0+Y291bnRlciksIG5ldykpCiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldykKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBpbnQgbmV3KQogewogI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCiAJYXNtIHZvbGF0aWxlKApAQCAtMTI3LDcgKzExNyw3IEBACiAJcmV0dXJuIG9sZDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQogewogCWludCBjLCBvbGQ7CiAJYyA9IGF0b21pY19yZWFkKHYpOwpAQCAtMTQ2LDkgKzEzNiwxMCBAQAogCiAjdW5kZWYgX19DU19MT09QCiAKLSNpZmRlZiBfX3MzOTB4X18KICNkZWZpbmUgQVRPTUlDNjRfSU5JVChpKSAgeyAoaSkgfQogCisjaWZkZWYgQ09ORklHXzY0QklUCisKICNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQogCiAjZGVmaW5lIF9fQ1NHX0xPT1AocHRyLCBvcF92YWwsIG9wX3N0cmluZykgKHsJCQkJXApAQCAtMTYyLDcgKzE1Myw3IEBACiAJCTogIj0mZCIgKG9sZF92YWwpLCAiPSZkIiAobmV3X3ZhbCksCQkJXAogCQkgICI9USIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCQkJXAogCQk6ICJkIiAob3BfdmFsKSwJIlEiICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQlcCi0JCTogImNjIiwgIm1lbW9yeSIgKTsJCQkJCVwKKwkJOiAiY2MiLCAibWVtb3J5Iik7CQkJCQlcCiAJbmV3X3ZhbDsJCQkJCQkJXAogfSkKIApAQCAtMTgwLDcgKzE3MSw3IEBACiAJCSAgIj1tIiAoKChhdG9taWNfdCAqKShwdHIpKS0+Y291bnRlcikJCQlcCiAJCTogImEiIChwdHIpLCAiZCIgKG9wX3ZhbCksCQkJCVwKIAkJICAibSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCQkJXAotCQk6ICJjYyIsICJtZW1vcnkiICk7CQkJCQlcCisJCTogImNjIiwgIm1lbW9yeSIpOwkJCQkJXAogCW5ld192YWw7CQkJCQkJCVwKIH0pCiAKQEAgLTE5OCwzOSArMTg5LDI5IEBACiAJYmFycmllcigpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgYXRvbWljNjRfYWRkX3JldHVybihsb25nIGxvbmcgaSwgYXRvbWljNjRfdCAqIHYpCitzdGF0aWMgaW5saW5lIGxvbmcgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgbG9uZyBpLCBhdG9taWM2NF90ICp2KQogewogCXJldHVybiBfX0NTR19MT09QKHYsIGksICJhZ3IiKTsKIH0KLSNkZWZpbmUgYXRvbWljNjRfYWRkKF9pLCBfdikJCWF0b21pYzY0X2FkZF9yZXR1cm4oX2ksIF92KQotI2RlZmluZSBhdG9taWM2NF9hZGRfbmVnYXRpdmUoX2ksIF92KQkoYXRvbWljNjRfYWRkX3JldHVybihfaSwgX3YpIDwgMCkKLSNkZWZpbmUgYXRvbWljNjRfaW5jKF92KQkJYXRvbWljNjRfYWRkX3JldHVybigxLCBfdikKLSNkZWZpbmUgYXRvbWljNjRfaW5jX3JldHVybihfdikJCWF0b21pYzY0X2FkZF9yZXR1cm4oMSwgX3YpCi0jZGVmaW5lIGF0b21pYzY0X2luY19hbmRfdGVzdChfdikJKGF0b21pYzY0X2FkZF9yZXR1cm4oMSwgX3YpID09IDApCiAKLXN0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBhdG9taWM2NF9zdWJfcmV0dXJuKGxvbmcgbG9uZyBpLCBhdG9taWM2NF90ICogdikKK3N0YXRpYyBpbmxpbmUgbG9uZyBsb25nIGF0b21pYzY0X3N1Yl9yZXR1cm4obG9uZyBsb25nIGksIGF0b21pYzY0X3QgKnYpCiB7CiAJcmV0dXJuIF9fQ1NHX0xPT1AodiwgaSwgInNnciIpOwogfQotI2RlZmluZSBhdG9taWM2NF9zdWIoX2ksIF92KQkJYXRvbWljNjRfc3ViX3JldHVybihfaSwgX3YpCi0jZGVmaW5lIGF0b21pYzY0X3N1Yl9hbmRfdGVzdChfaSwgX3YpCShhdG9taWM2NF9zdWJfcmV0dXJuKF9pLCBfdikgPT0gMCkKLSNkZWZpbmUgYXRvbWljNjRfZGVjKF92KQkJYXRvbWljNjRfc3ViX3JldHVybigxLCBfdikKLSNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybihfdikJCWF0b21pYzY0X3N1Yl9yZXR1cm4oMSwgX3YpCi0jZGVmaW5lIGF0b21pYzY0X2RlY19hbmRfdGVzdChfdikJKGF0b21pYzY0X3N1Yl9yZXR1cm4oMSwgX3YpID09IDApCiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljNjRfY2xlYXJfbWFzayh1bnNpZ25lZCBsb25nIG1hc2ssIGF0b21pYzY0X3QgKiB2KQorc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X2NsZWFyX21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCBhdG9taWM2NF90ICp2KQogewotCSAgICAgICBfX0NTR19MT09QKHYsIH5tYXNrLCAibmdyIik7CisJX19DU0dfTE9PUCh2LCB+bWFzaywgIm5nciIpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pYzY0X3NldF9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgYXRvbWljNjRfdCAqIHYpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfc2V0X21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCBhdG9taWM2NF90ICp2KQogewotCSAgICAgICBfX0NTR19MT09QKHYsIG1hc2ssICJvZ3IiKTsKKwlfX0NTR19MT09QKHYsIG1hc2ssICJvZ3IiKTsKIH0KIAogI2RlZmluZSBhdG9taWM2NF94Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCBuZXcpKQogCi1zdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LAorc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LAogCQkJCQkgICAgIGxvbmcgbG9uZyBvbGQsIGxvbmcgbG9uZyBuZXcpCiB7CiAjaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKQEAgLTI0OSw4ICsyMzAsMTEyIEBACiAJcmV0dXJuIG9sZDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pYzY0X2FkZF91bmxlc3MoYXRvbWljNjRfdCAqdiwKLQkJCQkJICBsb25nIGxvbmcgYSwgbG9uZyBsb25nIHUpCisjdW5kZWYgX19DU0dfTE9PUAorCisjZWxzZSAvKiBDT05GSUdfNjRCSVQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCWxvbmcgbG9uZyBjb3VudGVyOworfSBhdG9taWM2NF90OworCitzdGF0aWMgaW5saW5lIGxvbmcgbG9uZyBhdG9taWM2NF9yZWFkKGNvbnN0IGF0b21pYzY0X3QgKnYpCit7CisJcmVnaXN0ZXJfcGFpciBycDsKKworCWFzbSB2b2xhdGlsZSgKKwkJIglsbQklMCwlTjAsMCglMSkiCisJCTogIj0mZCIgKHJwKQorCQk6ICJhIiAoJnYtPmNvdW50ZXIpLCAibSIgKHYtPmNvdW50ZXIpCisJCSk7CisJcmV0dXJuIHJwLnBhaXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9zZXQoYXRvbWljNjRfdCAqdiwgbG9uZyBsb25nIGkpCit7CisJcmVnaXN0ZXJfcGFpciBycCA9IHsucGFpciA9IGl9OworCisJYXNtIHZvbGF0aWxlKAorCQkiCXN0bQklMSwlTjEsMCglMikiCisJCTogIj1tIiAodi0+Y291bnRlcikKKwkJOiAiZCIgKHJwKSwgImEiICgmdi0+Y291bnRlcikKKwkJKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICp2LCBsb25nIGxvbmcgbmV3KQoreworCXJlZ2lzdGVyX3BhaXIgcnBfbmV3ID0gey5wYWlyID0gbmV3fTsKKwlyZWdpc3Rlcl9wYWlyIHJwX29sZDsKKworCWFzbSB2b2xhdGlsZSgKKwkJIglsbQklMCwlTjAsMCglMilcbiIKKwkJIjA6CWNkcwklMCwlMywwKCUyKVxuIgorCQkiCWpsCTBiXG4iCisJCTogIj0mZCIgKHJwX29sZCksICIrbSIgKHYtPmNvdW50ZXIpCisJCTogImEiICgmdi0+Y291bnRlciksICJkIiAocnBfbmV3KQorCQk6ICJjYyIpOworCXJldHVybiBycF9vbGQucGFpcjsKK30KKworc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LAorCQkJCQkgbG9uZyBsb25nIG9sZCwgbG9uZyBsb25nIG5ldykKK3sKKwlyZWdpc3Rlcl9wYWlyIHJwX29sZCA9IHsucGFpciA9IG9sZH07CisJcmVnaXN0ZXJfcGFpciBycF9uZXcgPSB7LnBhaXIgPSBuZXd9OworCisJYXNtIHZvbGF0aWxlKAorCQkiCWNkcwklMCwlMywwKCUyKSIKKwkJOiAiKyZkIiAocnBfb2xkKSwgIittIiAodi0+Y291bnRlcikKKwkJOiAiYSIgKCZ2LT5jb3VudGVyKSwgImQiIChycF9uZXcpCisJCTogImNjIik7CisJcmV0dXJuIHJwX29sZC5wYWlyOworfQorCisKK3N0YXRpYyBpbmxpbmUgbG9uZyBsb25nIGF0b21pYzY0X2FkZF9yZXR1cm4obG9uZyBsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyBsb25nIG9sZCwgbmV3OworCisJZG8geworCQlvbGQgPSBhdG9taWM2NF9yZWFkKHYpOworCQluZXcgPSBvbGQgKyBpOworCX0gd2hpbGUgKGF0b21pYzY0X2NtcHhjaGcodiwgb2xkLCBuZXcpICE9IG9sZCk7CisJcmV0dXJuIG5ldzsKK30KKworc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfc3ViX3JldHVybihsb25nIGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIGxvbmcgb2xkLCBuZXc7CisKKwlkbyB7CisJCW9sZCA9IGF0b21pYzY0X3JlYWQodik7CisJCW5ldyA9IG9sZCAtIGk7CisJfSB3aGlsZSAoYXRvbWljNjRfY21weGNoZyh2LCBvbGQsIG5ldykgIT0gb2xkKTsKKwlyZXR1cm4gbmV3OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfc2V0X21hc2sodW5zaWduZWQgbG9uZyBsb25nIG1hc2ssIGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyBsb25nIG9sZCwgbmV3OworCisJZG8geworCQlvbGQgPSBhdG9taWM2NF9yZWFkKHYpOworCQluZXcgPSBvbGQgfCBtYXNrOworCX0gd2hpbGUgKGF0b21pYzY0X2NtcHhjaGcodiwgb2xkLCBuZXcpICE9IG9sZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9jbGVhcl9tYXNrKHVuc2lnbmVkIGxvbmcgbG9uZyBtYXNrLCBhdG9taWM2NF90ICp2KQoreworCWxvbmcgbG9uZyBvbGQsIG5ldzsKKworCWRvIHsKKwkJb2xkID0gYXRvbWljNjRfcmVhZCh2KTsKKwkJbmV3ID0gb2xkICYgbWFzazsKKwl9IHdoaWxlIChhdG9taWM2NF9jbXB4Y2hnKHYsIG9sZCwgbmV3KSAhPSBvbGQpOworfQorCisjZW5kaWYgLyogQ09ORklHXzY0QklUICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF91bmxlc3MoYXRvbWljNjRfdCAqdiwgbG9uZyBsb25nIGEsIGxvbmcgbG9uZyB1KQogewogCWxvbmcgbG9uZyBjLCBvbGQ7CiAJYyA9IGF0b21pYzY0X3JlYWQodik7CkBAIC0yNjUsMTUgKzM1MCwxNyBAQAogCXJldHVybiBjICE9IHU7CiB9CiAKLSNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpIGF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxLCAwKQotCi0jdW5kZWYgX19DU0dfTE9PUAotCi0jZWxzZSAvKiBfX3MzOTB4X18gKi8KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYzY0Lmg+Ci0KLSNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKyNkZWZpbmUgYXRvbWljNjRfYWRkKF9pLCBfdikJCWF0b21pYzY0X2FkZF9yZXR1cm4oX2ksIF92KQorI2RlZmluZSBhdG9taWM2NF9hZGRfbmVnYXRpdmUoX2ksIF92KQkoYXRvbWljNjRfYWRkX3JldHVybihfaSwgX3YpIDwgMCkKKyNkZWZpbmUgYXRvbWljNjRfaW5jKF92KQkJYXRvbWljNjRfYWRkX3JldHVybigxLCBfdikKKyNkZWZpbmUgYXRvbWljNjRfaW5jX3JldHVybihfdikJCWF0b21pYzY0X2FkZF9yZXR1cm4oMSwgX3YpCisjZGVmaW5lIGF0b21pYzY0X2luY19hbmRfdGVzdChfdikJKGF0b21pYzY0X2FkZF9yZXR1cm4oMSwgX3YpID09IDApCisjZGVmaW5lIGF0b21pYzY0X3N1YihfaSwgX3YpCQlhdG9taWM2NF9zdWJfcmV0dXJuKF9pLCBfdikKKyNkZWZpbmUgYXRvbWljNjRfc3ViX2FuZF90ZXN0KF9pLCBfdikJKGF0b21pYzY0X3N1Yl9yZXR1cm4oX2ksIF92KSA9PSAwKQorI2RlZmluZSBhdG9taWM2NF9kZWMoX3YpCQlhdG9taWM2NF9zdWJfcmV0dXJuKDEsIF92KQorI2RlZmluZSBhdG9taWM2NF9kZWNfcmV0dXJuKF92KQkJYXRvbWljNjRfc3ViX3JldHVybigxLCBfdikKKyNkZWZpbmUgYXRvbWljNjRfZGVjX2FuZF90ZXN0KF92KQkoYXRvbWljNjRfc3ViX3JldHVybigxLCBfdikgPT0gMCkKKyNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpCWF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCiAjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbWIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQlzbXBfbWIoKQpAQCAtMjgxLDUgKzM2OCw1IEBACiAjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCXNtcF9tYigpCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdG9taWMtbG9uZy5oPgotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwogI2VuZGlmIC8qIF9fQVJDSF9TMzkwX0FUT01JQ19fICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2hlY2tzdW0uaAppbmRleCBkNWE4ZTdjLi42YzAwZjY4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2hlY2tzdW0uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2hlY2tzdW0uaApAQCAtNzgsMjggKzc4LDExIEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKIHsKLSNpZm5kZWYgX19zMzkweF9fCi0JcmVnaXN0ZXJfcGFpciBycDsKKwl1MzIgY3N1bSA9IChfX2ZvcmNlIHUzMikgc3VtOwogCi0JYXNtIHZvbGF0aWxlKAotCQkiCXNscgklTjEsJU4xXG4iCS8qICUwID0gSCBMICovCi0JCSIJbHIJJTEsJTBcbiIJLyogJTAgPSBIIEwsICUxID0gSCBMIDAgMCAqLwotCQkiCXNyZGwJJTEsMTZcbiIJLyogJTAgPSBIIEwsICUxID0gMCBIIEwgMCAqLwotCQkiCWFscgklMSwlTjFcbiIJLyogJTAgPSBIIEwsICUxID0gTCBIIEwgMCAqLwotCQkiCWFscgklMCwlMVxuIgkvKiAlMCA9IEgrTCtDIEwrSCAqLwotCQkiCXNybAklMCwxNlxuIgkvKiAlMCA9IEgrTCtDICovCi0JCTogIismZCIgKHN1bSksICI9ZCIgKHJwKSA6IDogImNjIik7Ci0jZWxzZSAvKiBfX3MzOTB4X18gKi8KLQlhc20gdm9sYXRpbGUoCi0JCSIJc3IJMywzXG4iCQkvKiAlMCA9IEgqNjU1MzYgKyBMICovCi0JCSIJbHIJMiwlMFxuIgkJLyogJTAgPSBIIEwsIDIvMyA9IEggTCAvIDAgMCAqLwotCQkiCXNyZGwJMiwxNlxuIgkJLyogJTAgPSBIIEwsIDIvMyA9IDAgSCAvIEwgMCAqLwotCQkiCWFscgkyLDNcbiIJCS8qICUwID0gSCBMLCAyLzMgPSBMIEggLyBMIDAgKi8KLQkJIglhbHIJJTAsMlxuIgkJLyogJTAgPSBIK0wrQyBMK0ggKi8KLQkJIglzcmwJJTAsMTZcbiIJLyogJTAgPSBIK0wrQyAqLwotCQk6ICIrJmQiIChzdW0pIDogOiAiY2MiLCAiMiIsICIzIik7Ci0jZW5kaWYgLyogX19zMzkweF9fICovCi0JcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpIH5zdW07CisJY3N1bSArPSAoY3N1bSA+PiAxNikgKyAoY3N1bSA8PCAxNik7CisJY3N1bSA+Pj0gMTY7CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpIH5jc3VtOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Noc2MuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jaHNjLmgKaW5kZXggODA3OTk3Zi4uNDk0MzY1NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Noc2MuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2hzYy5oCkBAIC0xMjUsNCArMTI1LDMyIEBACiAjZGVmaW5lIENIU0NfSU5GT19DUEQgX0lPV1IoQ0hTQ19JT0NUTF9NQUdJQywgMHg4Nywgc3RydWN0IGNoc2NfY3BkX2luZm8pCiAjZGVmaW5lIENIU0NfSU5GT19EQ0FMIF9JT1dSKENIU0NfSU9DVExfTUFHSUMsIDB4ODgsIHN0cnVjdCBjaHNjX2RjYWwpCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBjc3NfZ2VuZXJhbF9jaGFyIHsKKwl1NjQgOiAxMjsKKwl1MzIgZHluaW8gOiAxOwkgLyogYml0IDEyICovCisJdTMyIDogMjg7CisJdTMyIGFpZiA6IDE7CSAvKiBiaXQgNDEgKi8KKwl1MzIgOiAzOworCXUzMiBtY3NzIDogMTsJIC8qIGJpdCA0NSAqLworCXUzMiBmY3MgOiAxOwkgLyogYml0IDQ2ICovCisJdTMyIDogMTsKKwl1MzIgZXh0X21iIDogMTsgIC8qIGJpdCA0OCAqLworCXUzMiA6IDc7CisJdTMyIGFpZl90ZGQgOiAxOyAvKiBiaXQgNTYgKi8KKwl1MzIgOiAxOworCXUzMiBxZWJzbSA6IDE7CSAvKiBiaXQgNTggKi8KKwl1MzIgOiA4OworCXUzMiBhaWZfb3NhIDogMTsgLyogYml0IDY3ICovCisJdTMyIDogMTQ7CisJdTMyIGNpYiA6IDE7CSAvKiBiaXQgODIgKi8KKwl1MzIgOiA1OworCXUzMiBmY3ggOiAxOwkgLyogYml0IDg4ICovCisJdTMyIDogNzsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworZXh0ZXJuIHN0cnVjdCBjc3NfZ2VuZXJhbF9jaGFyIGNzc19nZW5lcmFsX2NoYXJhY3RlcmlzdGljczsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oCmluZGV4IDYxOWJmOTQuLmU4NTY3OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2lvLmgKQEAgLTE1LDIyOCArMTUsNyBAQAogI2RlZmluZSBMUE1fQU5ZUEFUSCAweGZmCiAjZGVmaW5lIF9fTUFYX0NTU0lEIDAKIAotLyoqCi0gKiBzdHJ1Y3QgY21kX3Njc3cgLSBjb21tYW5kLW1vZGUgc3ViY2hhbm5lbCBzdGF0dXMgd29yZAotICogQGtleTogc3ViY2hhbm5lbCBrZXkKLSAqIEBzY3RsOiBzdXNwZW5kIGNvbnRyb2wKLSAqIEBlc3dmOiBlc3cgZm9ybWF0Ci0gKiBAY2M6IGRlZmVycmVkIGNvbmRpdGlvbiBjb2RlCi0gKiBAZm10OiBmb3JtYXQKLSAqIEBwZmNoOiBwcmVmZXRjaAotICogQGlzaWM6IGluaXRpYWwtc3RhdHVzIGludGVycnVwdGlvbiBjb250cm9sCi0gKiBAYWxjYzogYWRkcmVzcy1saW1pdCBjaGVja2luZyBjb250cm9sCi0gKiBAc3NpOiBzdXBwcmVzcy1zdXNwZW5kZWQgaW50ZXJydXB0aW9uCi0gKiBAemNjOiB6ZXJvIGNvbmRpdGlvbiBjb2RlCi0gKiBAZWN0bDogZXh0ZW5kZWQgY29udHJvbAotICogQHBubzogcGF0aCBub3Qgb3BlcmF0aW9uYWwKLSAqIEByZXM6IHJlc2VydmVkCi0gKiBAZmN0bDogZnVuY3Rpb24gY29udHJvbAotICogQGFjdGw6IGFjdGl2aXR5IGNvbnRyb2wKLSAqIEBzdGN0bDogc3RhdHVzIGNvbnRyb2wKLSAqIEBjcGE6IGNoYW5uZWwgcHJvZ3JhbSBhZGRyZXNzCi0gKiBAZHN0YXQ6IGRldmljZSBzdGF0dXMKLSAqIEBjc3RhdDogc3ViY2hhbm5lbCBzdGF0dXMKLSAqIEBjb3VudDogcmVzaWR1YWwgY291bnQKLSAqLwotc3RydWN0IGNtZF9zY3N3IHsKLQlfX3UzMiBrZXkgIDogNDsKLQlfX3UzMiBzY3RsIDogMTsKLQlfX3UzMiBlc3dmIDogMTsKLQlfX3UzMiBjYyAgIDogMjsKLQlfX3UzMiBmbXQgIDogMTsKLQlfX3UzMiBwZmNoIDogMTsKLQlfX3UzMiBpc2ljIDogMTsKLQlfX3UzMiBhbGNjIDogMTsKLQlfX3UzMiBzc2kgIDogMTsKLQlfX3UzMiB6Y2MgIDogMTsKLQlfX3UzMiBlY3RsIDogMTsKLQlfX3UzMiBwbm8gIDogMTsKLQlfX3UzMiByZXMgIDogMTsKLQlfX3UzMiBmY3RsIDogMzsKLQlfX3UzMiBhY3RsIDogNzsKLQlfX3UzMiBzdGN0bCA6IDU7Ci0JX191MzIgY3BhOwotCV9fdTMyIGRzdGF0IDogODsKLQlfX3UzMiBjc3RhdCA6IDg7Ci0JX191MzIgY291bnQgOiAxNjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCB0bV9zY3N3IC0gdHJhbnNwb3J0LW1vZGUgc3ViY2hhbm5lbCBzdGF0dXMgd29yZAotICogQGtleTogc3ViY2hhbm5lbCBrZXkKLSAqIEBlc3dmOiBlc3cgZm9ybWF0Ci0gKiBAY2M6IGRlZmVycmVkIGNvbmRpdGlvbiBjb2RlCi0gKiBAZm10OiBmb3JtYXQKLSAqIEB4OiBJUkItZm9ybWF0IGNvbnRyb2wKLSAqIEBxOiBpbnRlcnJvZ2F0ZS1jb21wbGV0ZQotICogQGVjdGw6IGV4dGVuZGVkIGNvbnRyb2wKLSAqIEBwbm86IHBhdGggbm90IG9wZXJhdGlvbmFsCi0gKiBAZmN0bDogZnVuY3Rpb24gY29udHJvbAotICogQGFjdGw6IGFjdGl2aXR5IGNvbnRyb2wKLSAqIEBzdGN0bDogc3RhdHVzIGNvbnRyb2wKLSAqIEB0Y3c6IFRDVyBhZGRyZXNzCi0gKiBAZHN0YXQ6IGRldmljZSBzdGF0dXMKLSAqIEBjc3RhdDogc3ViY2hhbm5lbCBzdGF0dXMKLSAqIEBmY3hzOiBGQ1ggc3RhdHVzCi0gKiBAc2NoeHM6IHN1YmNoYW5uZWwtZXh0ZW5kZWQgc3RhdHVzCi0gKi8KLXN0cnVjdCB0bV9zY3N3IHsKLQl1MzIga2V5OjQ7Ci0JdTMyIDoxOwotCXUzMiBlc3dmOjE7Ci0JdTMyIGNjOjI7Ci0JdTMyIGZtdDozOwotCXUzMiB4OjE7Ci0JdTMyIHE6MTsKLQl1MzIgOjE7Ci0JdTMyIGVjdGw6MTsKLQl1MzIgcG5vOjE7Ci0JdTMyIDoxOwotCXUzMiBmY3RsOjM7Ci0JdTMyIGFjdGw6NzsKLQl1MzIgc3RjdGw6NTsKLQl1MzIgdGN3OwotCXUzMiBkc3RhdDo4OwotCXUzMiBjc3RhdDo4OwotCXUzMiBmY3hzOjg7Ci0JdTMyIHNjaHhzOjg7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiB1bmlvbiBzY3N3IC0gc3ViY2hhbm5lbCBzdGF0dXMgd29yZAotICogQGNtZDogY29tbWFuZC1tb2RlIFNDU1cKLSAqIEB0bTogdHJhbnNwb3J0LW1vZGUgU0NTVwotICovCi11bmlvbiBzY3N3IHsKLQlzdHJ1Y3QgY21kX3Njc3cgY21kOwotCXN0cnVjdCB0bV9zY3N3IHRtOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWludCBzY3N3X2lzX3RtKHVuaW9uIHNjc3cgKnNjc3cpOwotdTMyIHNjc3dfa2V5KHVuaW9uIHNjc3cgKnNjc3cpOwotdTMyIHNjc3dfZXN3Zih1bmlvbiBzY3N3ICpzY3N3KTsKLXUzMiBzY3N3X2NjKHVuaW9uIHNjc3cgKnNjc3cpOwotdTMyIHNjc3dfZWN0bCh1bmlvbiBzY3N3ICpzY3N3KTsKLXUzMiBzY3N3X3Bubyh1bmlvbiBzY3N3ICpzY3N3KTsKLXUzMiBzY3N3X2ZjdGwodW5pb24gc2NzdyAqc2Nzdyk7Ci11MzIgc2Nzd19hY3RsKHVuaW9uIHNjc3cgKnNjc3cpOwotdTMyIHNjc3dfc3RjdGwodW5pb24gc2NzdyAqc2Nzdyk7Ci11MzIgc2Nzd19kc3RhdCh1bmlvbiBzY3N3ICpzY3N3KTsKLXUzMiBzY3N3X2NzdGF0KHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfaXNfc29saWNpdGVkKHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfaXNfdmFsaWRfa2V5KHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfaXNfdmFsaWRfZXN3Zih1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X2lzX3ZhbGlkX2NjKHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfaXNfdmFsaWRfZWN0bCh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X2lzX3ZhbGlkX3Bubyh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X2lzX3ZhbGlkX2ZjdGwodW5pb24gc2NzdyAqc2Nzdyk7Ci1pbnQgc2Nzd19pc192YWxpZF9hY3RsKHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfaXNfdmFsaWRfc3RjdGwodW5pb24gc2NzdyAqc2Nzdyk7Ci1pbnQgc2Nzd19pc192YWxpZF9kc3RhdCh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X2lzX3ZhbGlkX2NzdGF0KHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfY21kX2lzX3ZhbGlkX2tleSh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X2NtZF9pc192YWxpZF9zY3RsKHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfY21kX2lzX3ZhbGlkX2Vzd2YodW5pb24gc2NzdyAqc2Nzdyk7Ci1pbnQgc2Nzd19jbWRfaXNfdmFsaWRfY2ModW5pb24gc2NzdyAqc2Nzdyk7Ci1pbnQgc2Nzd19jbWRfaXNfdmFsaWRfZm10KHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfY21kX2lzX3ZhbGlkX3BmY2godW5pb24gc2NzdyAqc2Nzdyk7Ci1pbnQgc2Nzd19jbWRfaXNfdmFsaWRfaXNpYyh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X2NtZF9pc192YWxpZF9hbGNjKHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfY21kX2lzX3ZhbGlkX3NzaSh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X2NtZF9pc192YWxpZF96Y2ModW5pb24gc2NzdyAqc2Nzdyk7Ci1pbnQgc2Nzd19jbWRfaXNfdmFsaWRfZWN0bCh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X2NtZF9pc192YWxpZF9wbm8odW5pb24gc2NzdyAqc2Nzdyk7Ci1pbnQgc2Nzd19jbWRfaXNfdmFsaWRfZmN0bCh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X2NtZF9pc192YWxpZF9hY3RsKHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfY21kX2lzX3ZhbGlkX3N0Y3RsKHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfY21kX2lzX3ZhbGlkX2RzdGF0KHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfY21kX2lzX3ZhbGlkX2NzdGF0KHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfY21kX2lzX3NvbGljaXRlZCh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X3RtX2lzX3ZhbGlkX2tleSh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X3RtX2lzX3ZhbGlkX2Vzd2YodW5pb24gc2NzdyAqc2Nzdyk7Ci1pbnQgc2Nzd190bV9pc192YWxpZF9jYyh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X3RtX2lzX3ZhbGlkX2ZtdCh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X3RtX2lzX3ZhbGlkX3godW5pb24gc2NzdyAqc2Nzdyk7Ci1pbnQgc2Nzd190bV9pc192YWxpZF9xKHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfdG1faXNfdmFsaWRfZWN0bCh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X3RtX2lzX3ZhbGlkX3Bubyh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X3RtX2lzX3ZhbGlkX2ZjdGwodW5pb24gc2NzdyAqc2Nzdyk7Ci1pbnQgc2Nzd190bV9pc192YWxpZF9hY3RsKHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfdG1faXNfdmFsaWRfc3RjdGwodW5pb24gc2NzdyAqc2Nzdyk7Ci1pbnQgc2Nzd190bV9pc192YWxpZF9kc3RhdCh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X3RtX2lzX3ZhbGlkX2NzdGF0KHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfdG1faXNfdmFsaWRfZmN4cyh1bmlvbiBzY3N3ICpzY3N3KTsKLWludCBzY3N3X3RtX2lzX3ZhbGlkX3NjaHhzKHVuaW9uIHNjc3cgKnNjc3cpOwotaW50IHNjc3dfdG1faXNfc29saWNpdGVkKHVuaW9uIHNjc3cgKnNjc3cpOwotCi0jZGVmaW5lIFNDU1dfRkNUTF9DTEVBUl9GVU5DCSAweDEKLSNkZWZpbmUgU0NTV19GQ1RMX0hBTFRfRlVOQwkgMHgyCi0jZGVmaW5lIFNDU1dfRkNUTF9TVEFSVF9GVU5DCSAweDQKLQotI2RlZmluZSBTQ1NXX0FDVExfU1VTUEVOREVECSAweDEKLSNkZWZpbmUgU0NTV19BQ1RMX0RFVkFDVAkgMHgyCi0jZGVmaW5lIFNDU1dfQUNUTF9TQ0hBQ1QJIDB4NAotI2RlZmluZSBTQ1NXX0FDVExfQ0xFQVJfUEVORAkgMHg4Ci0jZGVmaW5lIFNDU1dfQUNUTF9IQUxUX1BFTkQJIDB4MTAKLSNkZWZpbmUgU0NTV19BQ1RMX1NUQVJUX1BFTkQJIDB4MjAKLSNkZWZpbmUgU0NTV19BQ1RMX1JFU1VNRV9QRU5ECSAweDQwCi0KLSNkZWZpbmUgU0NTV19TVENUTF9TVEFUVVNfUEVORAkgMHgxCi0jZGVmaW5lIFNDU1dfU1RDVExfU0VDX1NUQVRVUwkgMHgyCi0jZGVmaW5lIFNDU1dfU1RDVExfUFJJTV9TVEFUVVMJIDB4NAotI2RlZmluZSBTQ1NXX1NUQ1RMX0lOVEVSX1NUQVRVUwkgMHg4Ci0jZGVmaW5lIFNDU1dfU1RDVExfQUxFUlRfU1RBVFVTCSAweDEwCi0KLSNkZWZpbmUgREVWX1NUQVRfQVRURU5USU9OCSAweDgwCi0jZGVmaW5lIERFVl9TVEFUX1NUQVRfTU9ECSAweDQwCi0jZGVmaW5lIERFVl9TVEFUX0NVX0VORAkJIDB4MjAKLSNkZWZpbmUgREVWX1NUQVRfQlVTWQkJIDB4MTAKLSNkZWZpbmUgREVWX1NUQVRfQ0hOX0VORAkgMHgwOAotI2RlZmluZSBERVZfU1RBVF9ERVZfRU5ECSAweDA0Ci0jZGVmaW5lIERFVl9TVEFUX1VOSVRfQ0hFQ0sJIDB4MDIKLSNkZWZpbmUgREVWX1NUQVRfVU5JVF9FWENFUAkgMHgwMQotCi0jZGVmaW5lIFNDSE5fU1RBVF9QQ0kJCSAweDgwCi0jZGVmaW5lIFNDSE5fU1RBVF9JTkNPUlJfTEVOCSAweDQwCi0jZGVmaW5lIFNDSE5fU1RBVF9QUk9HX0NIRUNLCSAweDIwCi0jZGVmaW5lIFNDSE5fU1RBVF9QUk9UX0NIRUNLCSAweDEwCi0jZGVmaW5lIFNDSE5fU1RBVF9DSE5fREFUQV9DSEsJIDB4MDgKLSNkZWZpbmUgU0NITl9TVEFUX0NITl9DVFJMX0NISwkgMHgwNAotI2RlZmluZSBTQ0hOX1NUQVRfSU5URl9DVFJMX0NISwkgMHgwMgotI2RlZmluZSBTQ0hOX1NUQVRfQ0hBSU5fQ0hFQ0sJIDB4MDEKLQotLyoKLSAqIGFyY2hpdGVjdHVyZWQgdmFsdWVzIGZvciBmaXJzdCBzZW5zZSBieXRlCi0gKi8KLSNkZWZpbmUgU05TMF9DTURfUkVKRUNUCQkweDgwCi0jZGVmaW5lIFNOU19DTURfUkVKRUNUCQlTTlMwX0NNRF9SRUpFQwotI2RlZmluZSBTTlMwX0lOVEVSVkVOVElPTl9SRVEJMHg0MAotI2RlZmluZSBTTlMwX0JVU19PVVRfQ0hFQ0sJMHgyMAotI2RlZmluZSBTTlMwX0VRVUlQTUVOVF9DSEVDSwkweDEwCi0jZGVmaW5lIFNOUzBfREFUQV9DSEVDSwkJMHgwOAotI2RlZmluZSBTTlMwX09WRVJSVU4JCTB4MDQKLSNkZWZpbmUgU05TMF9JTkNPTVBMX0RPTUFJTgkweDAxCi0KLS8qCi0gKiBhcmNoaXRlY3R1cmVkIHZhbHVlcyBmb3Igc2Vjb25kIHNlbnNlIGJ5dGUKLSAqLwotI2RlZmluZSBTTlMxX1BFUk1fRVJSCQkweDgwCi0jZGVmaW5lIFNOUzFfSU5WX1RSQUNLX0ZPUk1BVAkweDQwCi0jZGVmaW5lIFNOUzFfRU9DCQkweDIwCi0jZGVmaW5lIFNOUzFfTUVTU0FHRV9UT19PUEVSCTB4MTAKLSNkZWZpbmUgU05TMV9OT19SRUNfRk9VTkQJMHgwOAotI2RlZmluZSBTTlMxX0ZJTEVfUFJPVEVDVEVECTB4MDQKLSNkZWZpbmUgU05TMV9XUklURV9JTkhJQklURUQJMHgwMgotI2RlZmluZSBTTlMxX0lOUFJFQ0lTRV9FTkQJMHgwMQotCi0vKgotICogYXJjaGl0ZWN0dXJlZCB2YWx1ZXMgZm9yIHRoaXJkIHNlbnNlIGJ5dGUKLSAqLwotI2RlZmluZSBTTlMyX1JFUV9JTkhfV1JJVEUJMHg4MAotI2RlZmluZSBTTlMyX0NPUlJFQ1RBQkxFCTB4NDAKLSNkZWZpbmUgU05TMl9GSVJTVF9MT0dfRVJSCTB4MjAKLSNkZWZpbmUgU05TMl9FTlZfREFUQV9QUkVTRU5UCTB4MTAKLSNkZWZpbmUgU05TMl9JTlBSRUNJU0VfRU5ECTB4MDQKKyNpbmNsdWRlIDxhc20vc2Nzdy5oPgogCiAvKioKICAqIHN0cnVjdCBjY3cxIC0gY2hhbm5lbCBjb21tYW5kIHdvcmQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzEyMzRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDAsMjAwOQorICogICAgQXV0aG9yKHMpOiBIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4sCisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4sCisgKgkJIENocmlzdGlhbiBFaHJoYXJkdCA8ZWhyaGFyZHRAZGUuaWJtLmNvbT4sCisgKi8KKworI2lmbmRlZiBfQVNNX1MzOTBfQ1BVX0gKKyNkZWZpbmUgX0FTTV9TMzkwX0NQVV9ICisKKyNkZWZpbmUgTUFYX0NQVV9BRERSRVNTIDI1NQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGNwdWlkCit7CisJdW5zaWduZWQgaW50IHZlcnNpb24gOgk4OworCXVuc2lnbmVkIGludCBpZGVudCAgIDogMjQ7CisJdW5zaWduZWQgaW50IG1hY2hpbmUgOiAxNjsKKwl1bnNpZ25lZCBpbnQgdW51c2VkICA6IDE2OworfSBfX3BhY2tlZDsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9BU01fUzM5MF9DUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdWlkLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1aWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc4MzZhMi4uMDAwMDAwMAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1aWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDAsMjAwOQotICogICAgQXV0aG9yKHMpOiBIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4sCi0gKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KLSAqCQkgQ2hyaXN0aWFuIEVocmhhcmR0IDxlaHJoYXJkdEBkZS5pYm0uY29tPgotICovCi0KLSNpZm5kZWYgX0FTTV9TMzkwX0NQVUlEX0hfCi0jZGVmaW5lIF9BU01fUzM5MF9DUFVJRF9IXwotCi0vKgotICogIENQVSB0eXBlIGFuZCBoYXJkd2FyZSBidWcgZmxhZ3MuIEtlcHQgc2VwYXJhdGVseSBmb3IgZWFjaCBDUFUuCi0gKiAgTWVtYmVycyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgcmVmZXJlbmNlZCBpbiBoZWFkLlMsIHNvIHRoaW5rIHR3aWNlCi0gKiAgYmVmb3JlIHRvdWNoaW5nIHRoZW0uIFttal0KLSAqLwotCi10eXBlZGVmIHN0cnVjdAotewotCXVuc2lnbmVkIGludCB2ZXJzaW9uIDoJODsKLQl1bnNpZ25lZCBpbnQgaWRlbnQgICA6IDI0OwotCXVuc2lnbmVkIGludCBtYWNoaW5lIDogMTY7Ci0JdW5zaWduZWQgaW50IHVudXNlZCAgOiAxNjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNwdWlkX3Q7Ci0KLSNlbmRpZiAvKiBfQVNNX1MzOTBfQ1BVSURfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kZWJ1Zy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RlYnVnLmgKaW5kZXggMzFlZDU2OC4uMTgxMjRiNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RlYnVnLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RlYnVnLmgKQEAgLTE2Nyw2ICsxNjcsMTAgQEAKICAgICAgICAgcmV0dXJuIGRlYnVnX2V2ZW50X2NvbW1vbihpZCxsZXZlbCx0eHQsc3RybGVuKHR4dCkpOwogfQogCisvKgorICogSU1QT1JUQU5UOiBVc2UgIiVzIiBpbiBzcHJpbnRmIGZvcm1hdCBzdHJpbmdzIHdpdGggY2FyZSEgT25seSBwb2ludGVycyBhcmUKKyAqIHN0b3JlZCBpbiB0aGUgczM5MGRiZi4gU2VlIERvY3VtZW50YXRpb24vczM5MC9zMzkwZGJmLnR4dCBmb3IgbW9yZSBkZXRhaWxzIQorICovCiBleHRlcm4gZGVidWdfZW50cnlfdCAqCiBkZWJ1Z19zcHJpbnRmX2V2ZW50KGRlYnVnX2luZm9fdCogaWQsaW50IGxldmVsLGNoYXIgKnN0cmluZywuLi4pCiAJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDMsIDQpKSk7CkBAIC0yMDYsNyArMjEwLDEwIEBACiAgICAgICAgIHJldHVybiBkZWJ1Z19leGNlcHRpb25fY29tbW9uKGlkLGxldmVsLHR4dCxzdHJsZW4odHh0KSk7CiB9CiAKLQorLyoKKyAqIElNUE9SVEFOVDogVXNlICIlcyIgaW4gc3ByaW50ZiBmb3JtYXQgc3RyaW5ncyB3aXRoIGNhcmUhIE9ubHkgcG9pbnRlcnMgYXJlCisgKiBzdG9yZWQgaW4gdGhlIHMzOTBkYmYuIFNlZSBEb2N1bWVudGF0aW9uL3MzOTAvczM5MGRiZi50eHQgZm9yIG1vcmUgZGV0YWlscyEKKyAqLwogZXh0ZXJuIGRlYnVnX2VudHJ5X3QgKgogZGVidWdfc3ByaW50Zl9leGNlcHRpb24oZGVidWdfaW5mb190KiBpZCxpbnQgbGV2ZWwsY2hhciAqc3RyaW5nLC4uLikKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMywgNCkpKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDg5ZWM3MDUuLjQ5OGJjMzggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMTgsMTMgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogCi0vKiBpcnFfY3B1c3RhdF90IGlzIHVudXNlZCBjdXJyZW50bHksIGJ1dCBjb3VsZCBiZSBjb252ZXJ0ZWQKLSAqIGludG8gYSBwZXJjcHUgdmFyaWFibGUgaW5zdGVhZCBvZiBzdG9yaW5nIHNvZnRpcnFfcGVuZGluZwotICogb24gdGhlIGxvd2NvcmUgKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Ci19IGlycV9jcHVzdGF0X3Q7Ci0KICNkZWZpbmUgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkgKFMzOTBfbG93Y29yZS5zb2Z0aXJxX3BlbmRpbmcpCiAKICNkZWZpbmUgX19BUkNIX0lSUV9TVEFUCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXBsLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXBsLmgKaW5kZXggMTE3MWU2ZC4uNWU5NWQ5NSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lwbC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pcGwuaApAQCAtNTcsNiArNTcsOCBAQAogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogI2RlZmluZSBESUFHMzA4X1ZNUEFSTV9TSVpFCTY0CisjZGVmaW5lIERJQUczMDhfU0NQREFUQV9TSVpFCShQQUdFX1NJWkUgLSAoc2l6ZW9mKHN0cnVjdCBpcGxfbGlzdF9oZHIpICsgXAorCQkJCSBvZmZzZXRvZihzdHJ1Y3QgaXBsX2Jsb2NrX2ZjcCwgc2NwX2RhdGEpKSkKIAogc3RydWN0IGlwbF9ibG9ja19jY3cgewogCXU4ICBsb2FkX3Bhcm1bOF07CkBAIC05MSw3ICs5Myw4IEBACiBleHRlcm4gdm9pZCBkb19wb2ZmKHZvaWQpOwogZXh0ZXJuIHZvaWQgaXBsX3NhdmVfcGFyYW1ldGVycyh2b2lkKTsKIGV4dGVybiB2b2lkIGlwbF91cGRhdGVfcGFyYW1ldGVycyh2b2lkKTsKLWV4dGVybiB2b2lkIGdldF9pcGxfdm1wYXJtKGNoYXIgKik7CitleHRlcm4gc2l6ZV90IGFwcGVuZF9pcGxfdm1wYXJtKGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBzaXplX3QgYXBwZW5kX2lwbF9zY3BkYXRhKGNoYXIgKiwgc2l6ZV90KTsKIAogZW51bSB7CiAJSVBMX0RFVk5PX1ZBTElECQk9IDEsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggMGIyZjgyOS4uM2RmY2FlYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm0uaApAQCAtMTUsMTUgKzE1LDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLS8qIGZvciBLVk1fR0VUX0lSUUNISVAgYW5kIEtWTV9TRVRfSVJRQ0hJUCAqLwotc3RydWN0IGt2bV9waWNfc3RhdGUgewotCS8qIG5vIFBJQyBmb3IgczM5MCAqLwotfTsKLQotc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUgewotCS8qIG5vIElPQVBJQyBmb3IgczM5MCAqLwotfTsKLQogLyogZm9yIEtWTV9HRVRfUkVHUyBhbmQgS1ZNX1NFVF9SRUdTICovCiBzdHJ1Y3Qga3ZtX3JlZ3MgewogCS8qIGdlbmVyYWwgcHVycG9zZSByZWdzIGZvciBzMzkwICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDFjZDAyZjYuLjI3NjA1YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGFzbS1zMzkwL2t2bV9ob3N0LmggLSBkZWZpbml0aW9uIGZvciBrZXJuZWwgdmlydHVhbCBtYWNoaW5lcyBvbiBzMzkwCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4CisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgsMjAwOQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIgb25seSkKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgotI2luY2x1ZGUgPGFzbS9jcHVpZC5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KIAogI2RlZmluZSBLVk1fTUFYX1ZDUFVTIDY0CiAjZGVmaW5lIEtWTV9NRU1PUllfU0xPVFMgMzIKQEAgLTQwLDcgKzQwLDExIEBACiAJc3RydWN0IHNjYV9lbnRyeSBjcHVbNjRdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFIDI1NgorI2RlZmluZSBLVk1fTlJfUEFHRV9TSVpFUyAyCisjZGVmaW5lIEtWTV9IUEFHRV9TSElGVCh4KSAoUEFHRV9TSElGVCArICgoeCkgLSAxKSAqIDgpCisjZGVmaW5lIEtWTV9IUEFHRV9TSVpFKHgpICgxVUwgPDwgS1ZNX0hQQUdFX1NISUZUKHgpKQorI2RlZmluZSBLVk1fSFBBR0VfTUFTSyh4KQkofihLVk1fSFBBR0VfU0laRSh4KSAtIDEpKQorI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFKHgpCShLVk1fSFBBR0VfU0laRSh4KSAvIFBBR0VfU0laRSkKIAogI2RlZmluZSBDUFVTVEFUX0hPU1QgICAgICAgMHg4MDAwMDAwMAogI2RlZmluZSBDUFVTVEFUX1dBSVQgICAgICAgMHgxMDAwMDAwMApAQCAtMTgyLDggKzE4Niw5IEBACiB9OwogCiAvKiBmb3IgbG9jYWxfaW50ZXJydXB0LmFjdGlvbl9mbGFncyAqLwotI2RlZmluZSBBQ1RJT05fU1RPUkVfT05fU1RPUCAxCi0jZGVmaW5lIEFDVElPTl9TVE9QX09OX1NUT1AgIDIKKyNkZWZpbmUgQUNUSU9OX1NUT1JFX09OX1NUT1AJCSgxPDwwKQorI2RlZmluZSBBQ1RJT05fU1RPUF9PTl9TVE9QCQkoMTw8MSkKKyNkZWZpbmUgQUNUSU9OX1JFTE9BRFZDUFVfT05fU1RPUAkoMTw8MikKIAogc3RydWN0IGt2bV9zMzkwX2xvY2FsX2ludGVycnVwdCB7CiAJc3BpbmxvY2tfdCBsb2NrOwpAQCAtMjE3LDggKzIyMiw4IEBACiAJc3RydWN0IGhydGltZXIgICAgY2tjX3RpbWVyOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OwogCXVuaW9uICB7Ci0JCWNwdWlkX3QJICBjcHVfaWQ7Ci0JCXU2NAkgIHN0aWRwX2RhdGE7CisJCXN0cnVjdCBjcHVpZAljcHVfaWQ7CisJCXU2NAkJc3RpZHBfZGF0YTsKIAl9OwogfTsKIApAQCAtMjI3LDggKzIzMiw2IEBACiB9OwogCiBzdHJ1Y3Qga3ZtX2FyY2h7Ci0JdW5zaWduZWQgbG9uZyBndWVzdF9vcmlnaW47Ci0JdW5zaWduZWQgbG9uZyBndWVzdF9tZW1zaXplOwogCXN0cnVjdCBzY2FfYmxvY2sgKnNjYTsKIAlkZWJ1Z19pbmZvX3QgKmRiZjsKIAlzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0IGZsb2F0X2ludDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgKaW5kZXggMmM1MDM3OS4uNjk2NGRiMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgKQEAgLTEzLDYgKzEzLDggQEAKICNpZm5kZWYgX19TMzkwX0tWTV9QQVJBX0gKICNkZWZpbmUgX19TMzkwX0tWTV9QQVJBX0gKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogLyoKICAqIEh5cGVyY2FsbHMgZm9yIEtWTSBvbiBzMzkwLiBUaGUgY2FsbGluZyBjb252ZW50aW9uIGlzIHNpbWlsYXIgdG8gdGhlCiAgKiBzMzkwIEFCSSwgc28gd2UgdXNlIFIyLVI2IGZvciBwYXJhbWV0ZXJzIDEtNS4gSW4gYWRkaXRpb24gd2UgdXNlIFIxCkBAIC0xNDcsNCArMTQ5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2VuZGlmCisKICNlbmRpZiAvKiBfX1MzOTBfS1ZNX1BBUkFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV92aXJ0aW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1fdmlydGlvLmgKaW5kZXggMDUwMzkzNi4uYWNkZmRmZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV92aXJ0aW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX3ZpcnRpby5oCkBAIC01NCwxNCArNTQsNCBAQAogICogVGhpcyBpcyBwYWdlc2l6ZSBmb3IgaGlzdG9yaWNhbCByZWFzb25zLiAqLwogI2RlZmluZSBLVk1fUzM5MF9WSVJUSU9fUklOR19BTElHTgk0MDk2CiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0vKiBlYXJseSB2aXJ0aW8gY29uc29sZSBzZXR1cCAqLwotI2lmZGVmIENPTkZJR19TMzkwX0dVRVNUCi1leHRlcm4gdm9pZCBzMzkwX3ZpcnRpb19jb25zb2xlX2luaXQodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHMzOTBfdmlydGlvX2NvbnNvbGVfaW5pdCh2b2lkKQotewotfQotI2VuZGlmIC8qIENPTkZJR19WSVJUSU9fQ09OU09MRSAqLwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKaW5kZXggNTA0NmFkNi4uNmJjOTQyNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCkBAIC0xMzIsNyArMTMyLDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGFzbS9jcHVpZC5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIApAQCAtMjc1LDcgKzI3NSw3IEBACiAJX191MzIJdXNlcl9leGVjX2FzY2U7CQkJLyogMHgwMmFjICovCiAKIAkvKiBTTVAgaW5mbyBhcmVhICovCi0JY3B1aWRfdAljcHVfaWQ7CQkJCS8qIDB4MDJiMCAqLworCXN0cnVjdCBjcHVpZCBjcHVfaWQ7CQkJLyogMHgwMmIwICovCiAJX191MzIJY3B1X25yOwkJCQkvKiAweDAyYjggKi8KIAlfX3UzMglzb2Z0aXJxX3BlbmRpbmc7CQkvKiAweDAyYmMgKi8KIAlfX3UzMglwZXJjcHVfb2Zmc2V0OwkJCS8qIDB4MDJjMCAqLwpAQCAtMzgwLDcgKzM4MCw3IEBACiAJX191NjQJdXNlcl9leGVjX2FzY2U7CQkJLyogMHgwMzE4ICovCiAKIAkvKiBTTVAgaW5mbyBhcmVhICovCi0JY3B1aWRfdAljcHVfaWQ7CQkJCS8qIDB4MDMyMCAqLworCXN0cnVjdCBjcHVpZCBjcHVfaWQ7CQkJLyogMHgwMzIwICovCiAJX191MzIJY3B1X25yOwkJCQkvKiAweDAzMjggKi8KIAlfX3UzMglzb2Z0aXJxX3BlbmRpbmc7CQkvKiAweDAzMmMgKi8KIAlfX3U2NAlwZXJjcHVfb2Zmc2V0OwkJCS8qIDB4MDMzMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IDNiNTkyMTYuLjAzYmU5OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11LmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9fTU1VX0gKIAogdHlwZWRlZiBzdHJ1Y3QgeworCXNwaW5sb2NrX3QgbGlzdF9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgY3JzdF9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgcGd0YWJsZV9saXN0OwogCXVuc2lnbmVkIGxvbmcgYXNjZV9iaXRzOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggM2UzNTk0ZC4uNWU5ZGFmNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMjUsOCArMTI1LDYgQEAKIAlyZXR1cm4gc2tleTsKIH0KIAotI2lmZGVmIENPTkZJR19QQUdFX1NUQVRFUwotCiBzdHJ1Y3QgcGFnZTsKIHZvaWQgYXJjaF9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcik7CiB2b2lkIGFyY2hfYWxsb2NfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKTsKQEAgLTEzNCw4ICsxMzIsNiBAQAogI2RlZmluZSBIQVZFX0FSQ0hfRlJFRV9QQUdFCiAjZGVmaW5lIEhBVkVfQVJDSF9BTExPQ19QQUdFCiAKLSNlbmRpZgotCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAjZGVmaW5lIF9fUEFHRV9PRkZTRVQgICAgICAgICAgIDB4MFVMCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGVyY3B1LmgKaW5kZXggNDA4ZDYwYi4uZjdhZDg3MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BlcmNwdS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtMSwzNyArMSwyMSBAQAogI2lmbmRlZiBfX0FSQ0hfUzM5MF9QRVJDUFVfXwogI2RlZmluZSBfX0FSQ0hfUzM5MF9QRVJDUFVfXwogCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgotCiAvKgogICogczM5MCB1c2VzIGl0cyBvd24gaW1wbGVtZW50YXRpb24gZm9yIHBlciBjcHUgZGF0YSwgdGhlIG9mZnNldCBvZgogICogdGhlIGNwdSBsb2NhbCBkYXRhIGFyZWEgaXMgY2FjaGVkIGluIHRoZSBjcHUncyBsb3djb3JlIG1lbW9yeS4KLSAqIEZvciA2NCBiaXQgbW9kdWxlIGNvZGUgczM5MCBmb3JjZXMgdGhlIHVzZSBvZiBhIEdPVCBzbG90IGZvciB0aGUKLSAqIGFkZHJlc3Mgb2YgdGhlIHBlciBjcHUgdmFyaWFibGUuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIG1vZHVsZQotICogbWF5IGJlIG1vcmUgdGhhbiA0RyBhYm92ZSB0aGUgcGVyIGNwdSBhcmVhLgogICovCi0jaWYgZGVmaW5lZChfX3MzOTB4X18pICYmIGRlZmluZWQoTU9EVUxFKQotCi0jZGVmaW5lIFNISUZUX1BFUkNQVV9QVFIocHRyLG9mZnNldCkgKCh7CQkJXAotCWV4dGVybiBpbnQgc2ltcGxlX2lkZW50aWZpZXJfIyN2YXIodm9pZCk7CVwKLQl1bnNpZ25lZCBsb25nICpfX3B0cjsJCQkJXAotCWFzbSAoICJsYXJsICUwLCAlMUBHT1RFTlQiCQlcCi0JICAgIDogIj1hIiAoX19wdHIpIDogIlgiIChwdHIpICk7CQlcCi0JKHR5cGVvZihwdHIpKSgoKl9fcHRyKSArIChvZmZzZXQpKTsJfSkpCi0KLSNlbHNlCi0KLSNkZWZpbmUgU0hJRlRfUEVSQ1BVX1BUUihwdHIsIG9mZnNldCkgKCh7CQkJCVwKLQlleHRlcm4gaW50IHNpbXBsZV9pZGVudGlmaWVyXyMjdmFyKHZvaWQpOwkJXAotCXVuc2lnbmVkIGxvbmcgX19wdHI7CQkJCQlcCi0JYXNtICggIiIgOiAiPWEiIChfX3B0cikgOiAiMCIgKHB0cikgKTsJCQlcCi0JKHR5cGVvZihwdHIpKSAoX19wdHIgKyAob2Zmc2V0KSk7IH0pKQotCi0jZW5kaWYKLQogI2RlZmluZSBfX215X2NwdV9vZmZzZXQgUzM5MF9sb3djb3JlLnBlcmNwdV9vZmZzZXQKIAorLyoKKyAqIEZvciA2NCBiaXQgbW9kdWxlIGNvZGUsIHRoZSBtb2R1bGUgbWF5IGJlIG1vcmUgdGhhbiA0RyBhYm92ZSB0aGUKKyAqIHBlciBjcHUgYXJlYSwgdXNlIHdlYWsgZGVmaW5pdGlvbnMgdG8gZm9yY2UgdGhlIGNvbXBpbGVyIHRvCisgKiBnZW5lcmF0ZSBleHRlcm5hbCByZWZlcmVuY2VzLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKF9fczM5MHhfXykgJiYgZGVmaW5lZChNT0RVTEUpCisjZGVmaW5lIEFSQ0hfTkVFRFNfV0VBS19QRVJfQ1BVCisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgogCiAjZW5kaWYgLyogX19BUkNIX1MzOTBfUEVSQ1BVX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IGIyNjU4YjkuLmRkYWQ1OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMTQwLDYgKzE0MCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKKwlzcGluX2xvY2tfaW5pdCgmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmbW0tPmNvbnRleHQuY3JzdF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmbW0tPmNvbnRleHQucGd0YWJsZV9saXN0KTsKIAlyZXR1cm4gKHBnZF90ICopIGNyc3RfdGFibGVfYWxsb2MobW0sIHMzOTBfbm9leGVjKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBjMTM5ZmE3Li5jZjhlZWQzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xNCw3ICsxNCw3IEBACiAjZGVmaW5lIF9fQVNNX1MzOTBfUFJPQ0VTU09SX0gKIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxhc20vY3B1aWQuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC0yNiw3ICsyNiw3IEBACiAgKi8KICNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyB2b2lkICpwYzsgYXNtKCJiYXNyICUwLDAiIDogIj1hIiAocGMpKTsgcGM7IH0pCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfY3B1X2lkKGNwdWlkX3QgKnB0cikKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfY3B1X2lkKHN0cnVjdCBjcHVpZCAqcHRyKQogewogCWFzbSB2b2xhdGlsZSgic3RpZHAgMCglMSkiIDogIj1tIiAoKnB0cikgOiAiYSIgKHB0cikpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAppbmRleCAyOWVjOGUyLi4zNWQ3ODZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaApAQCAtMSwxOSArMSBAQAotI2lmbmRlZiBfQVNNUzM5MF9TQ0FUVEVSTElTVF9ICi0jZGVmaW5lIF9BU01TMzkwX1NDQVRURVJMSVNUX0gKLQotc3RydWN0IHNjYXR0ZXJsaXN0IHsKLSNpZmRlZiBDT05GSUdfREVCVUdfU0cKLSAgICB1bnNpZ25lZCBsb25nIHNnX21hZ2ljOwotI2VuZGlmCi0gICAgdW5zaWduZWQgbG9uZyBwYWdlX2xpbms7Ci0gICAgdW5zaWduZWQgaW50IG9mZnNldDsKLSAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOwotfTsKLQotI2lmZGVmIF9fczM5MHhfXwotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAoMHhmZmZmZmZmZmZmZmZmZmZmVUwpCi0jZWxzZQotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAoMHhmZmZmZmZmZlVMKQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfQVNNUzM5MFhfU0NBVFRFUkxJU1RfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NjYXR0ZXJsaXN0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2Nzdy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Njc3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTM4OWNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Njc3cuaApAQCAtMCwwICsxLDk1NiBAQAorLyoKKyAqICBIZWxwZXIgZnVuY3Rpb25zIGZvciBzY3N3IGFjY2Vzcy4KKyAqCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgsMjAwOQorICogICAgQXV0aG9yKHMpOiBQZXRlciBPYmVycGFybGVpdGVyIDxwZXRlci5vYmVycGFybGVpdGVyQGRlLmlibS5jb20+CisgKi8KKworI2lmbmRlZiBfQVNNX1MzOTBfU0NTV19IXworI2RlZmluZSBfQVNNX1MzOTBfU0NTV19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vY2hzYy5oPgorI2luY2x1ZGUgPGFzbS9jaW8uaD4KKworLyoqCisgKiBzdHJ1Y3QgY21kX3Njc3cgLSBjb21tYW5kLW1vZGUgc3ViY2hhbm5lbCBzdGF0dXMgd29yZAorICogQGtleTogc3ViY2hhbm5lbCBrZXkKKyAqIEBzY3RsOiBzdXNwZW5kIGNvbnRyb2wKKyAqIEBlc3dmOiBlc3cgZm9ybWF0CisgKiBAY2M6IGRlZmVycmVkIGNvbmRpdGlvbiBjb2RlCisgKiBAZm10OiBmb3JtYXQKKyAqIEBwZmNoOiBwcmVmZXRjaAorICogQGlzaWM6IGluaXRpYWwtc3RhdHVzIGludGVycnVwdGlvbiBjb250cm9sCisgKiBAYWxjYzogYWRkcmVzcy1saW1pdCBjaGVja2luZyBjb250cm9sCisgKiBAc3NpOiBzdXBwcmVzcy1zdXNwZW5kZWQgaW50ZXJydXB0aW9uCisgKiBAemNjOiB6ZXJvIGNvbmRpdGlvbiBjb2RlCisgKiBAZWN0bDogZXh0ZW5kZWQgY29udHJvbAorICogQHBubzogcGF0aCBub3Qgb3BlcmF0aW9uYWwKKyAqIEByZXM6IHJlc2VydmVkCisgKiBAZmN0bDogZnVuY3Rpb24gY29udHJvbAorICogQGFjdGw6IGFjdGl2aXR5IGNvbnRyb2wKKyAqIEBzdGN0bDogc3RhdHVzIGNvbnRyb2wKKyAqIEBjcGE6IGNoYW5uZWwgcHJvZ3JhbSBhZGRyZXNzCisgKiBAZHN0YXQ6IGRldmljZSBzdGF0dXMKKyAqIEBjc3RhdDogc3ViY2hhbm5lbCBzdGF0dXMKKyAqIEBjb3VudDogcmVzaWR1YWwgY291bnQKKyAqLworc3RydWN0IGNtZF9zY3N3IHsKKwlfX3UzMiBrZXkgIDogNDsKKwlfX3UzMiBzY3RsIDogMTsKKwlfX3UzMiBlc3dmIDogMTsKKwlfX3UzMiBjYyAgIDogMjsKKwlfX3UzMiBmbXQgIDogMTsKKwlfX3UzMiBwZmNoIDogMTsKKwlfX3UzMiBpc2ljIDogMTsKKwlfX3UzMiBhbGNjIDogMTsKKwlfX3UzMiBzc2kgIDogMTsKKwlfX3UzMiB6Y2MgIDogMTsKKwlfX3UzMiBlY3RsIDogMTsKKwlfX3UzMiBwbm8gIDogMTsKKwlfX3UzMiByZXMgIDogMTsKKwlfX3UzMiBmY3RsIDogMzsKKwlfX3UzMiBhY3RsIDogNzsKKwlfX3UzMiBzdGN0bCA6IDU7CisJX191MzIgY3BhOworCV9fdTMyIGRzdGF0IDogODsKKwlfX3UzMiBjc3RhdCA6IDg7CisJX191MzIgY291bnQgOiAxNjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKioKKyAqIHN0cnVjdCB0bV9zY3N3IC0gdHJhbnNwb3J0LW1vZGUgc3ViY2hhbm5lbCBzdGF0dXMgd29yZAorICogQGtleTogc3ViY2hhbm5lbCBrZXkKKyAqIEBlc3dmOiBlc3cgZm9ybWF0CisgKiBAY2M6IGRlZmVycmVkIGNvbmRpdGlvbiBjb2RlCisgKiBAZm10OiBmb3JtYXQKKyAqIEB4OiBJUkItZm9ybWF0IGNvbnRyb2wKKyAqIEBxOiBpbnRlcnJvZ2F0ZS1jb21wbGV0ZQorICogQGVjdGw6IGV4dGVuZGVkIGNvbnRyb2wKKyAqIEBwbm86IHBhdGggbm90IG9wZXJhdGlvbmFsCisgKiBAZmN0bDogZnVuY3Rpb24gY29udHJvbAorICogQGFjdGw6IGFjdGl2aXR5IGNvbnRyb2wKKyAqIEBzdGN0bDogc3RhdHVzIGNvbnRyb2wKKyAqIEB0Y3c6IFRDVyBhZGRyZXNzCisgKiBAZHN0YXQ6IGRldmljZSBzdGF0dXMKKyAqIEBjc3RhdDogc3ViY2hhbm5lbCBzdGF0dXMKKyAqIEBmY3hzOiBGQ1ggc3RhdHVzCisgKiBAc2NoeHM6IHN1YmNoYW5uZWwtZXh0ZW5kZWQgc3RhdHVzCisgKi8KK3N0cnVjdCB0bV9zY3N3IHsKKwl1MzIga2V5OjQ7CisJdTMyIDoxOworCXUzMiBlc3dmOjE7CisJdTMyIGNjOjI7CisJdTMyIGZtdDozOworCXUzMiB4OjE7CisJdTMyIHE6MTsKKwl1MzIgOjE7CisJdTMyIGVjdGw6MTsKKwl1MzIgcG5vOjE7CisJdTMyIDoxOworCXUzMiBmY3RsOjM7CisJdTMyIGFjdGw6NzsKKwl1MzIgc3RjdGw6NTsKKwl1MzIgdGN3OworCXUzMiBkc3RhdDo4OworCXUzMiBjc3RhdDo4OworCXUzMiBmY3hzOjg7CisJdTMyIHNjaHhzOjg7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoqCisgKiB1bmlvbiBzY3N3IC0gc3ViY2hhbm5lbCBzdGF0dXMgd29yZAorICogQGNtZDogY29tbWFuZC1tb2RlIFNDU1cKKyAqIEB0bTogdHJhbnNwb3J0LW1vZGUgU0NTVworICovCit1bmlvbiBzY3N3IHsKKwlzdHJ1Y3QgY21kX3Njc3cgY21kOworCXN0cnVjdCB0bV9zY3N3IHRtOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgU0NTV19GQ1RMX0NMRUFSX0ZVTkMJIDB4MQorI2RlZmluZSBTQ1NXX0ZDVExfSEFMVF9GVU5DCSAweDIKKyNkZWZpbmUgU0NTV19GQ1RMX1NUQVJUX0ZVTkMJIDB4NAorCisjZGVmaW5lIFNDU1dfQUNUTF9TVVNQRU5ERUQJIDB4MQorI2RlZmluZSBTQ1NXX0FDVExfREVWQUNUCSAweDIKKyNkZWZpbmUgU0NTV19BQ1RMX1NDSEFDVAkgMHg0CisjZGVmaW5lIFNDU1dfQUNUTF9DTEVBUl9QRU5ECSAweDgKKyNkZWZpbmUgU0NTV19BQ1RMX0hBTFRfUEVORAkgMHgxMAorI2RlZmluZSBTQ1NXX0FDVExfU1RBUlRfUEVORAkgMHgyMAorI2RlZmluZSBTQ1NXX0FDVExfUkVTVU1FX1BFTkQJIDB4NDAKKworI2RlZmluZSBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5ECSAweDEKKyNkZWZpbmUgU0NTV19TVENUTF9TRUNfU1RBVFVTCSAweDIKKyNkZWZpbmUgU0NTV19TVENUTF9QUklNX1NUQVRVUwkgMHg0CisjZGVmaW5lIFNDU1dfU1RDVExfSU5URVJfU1RBVFVTCSAweDgKKyNkZWZpbmUgU0NTV19TVENUTF9BTEVSVF9TVEFUVVMJIDB4MTAKKworI2RlZmluZSBERVZfU1RBVF9BVFRFTlRJT04JIDB4ODAKKyNkZWZpbmUgREVWX1NUQVRfU1RBVF9NT0QJIDB4NDAKKyNkZWZpbmUgREVWX1NUQVRfQ1VfRU5ECQkgMHgyMAorI2RlZmluZSBERVZfU1RBVF9CVVNZCQkgMHgxMAorI2RlZmluZSBERVZfU1RBVF9DSE5fRU5ECSAweDA4CisjZGVmaW5lIERFVl9TVEFUX0RFVl9FTkQJIDB4MDQKKyNkZWZpbmUgREVWX1NUQVRfVU5JVF9DSEVDSwkgMHgwMgorI2RlZmluZSBERVZfU1RBVF9VTklUX0VYQ0VQCSAweDAxCisKKyNkZWZpbmUgU0NITl9TVEFUX1BDSQkJIDB4ODAKKyNkZWZpbmUgU0NITl9TVEFUX0lOQ09SUl9MRU4JIDB4NDAKKyNkZWZpbmUgU0NITl9TVEFUX1BST0dfQ0hFQ0sJIDB4MjAKKyNkZWZpbmUgU0NITl9TVEFUX1BST1RfQ0hFQ0sJIDB4MTAKKyNkZWZpbmUgU0NITl9TVEFUX0NITl9EQVRBX0NISwkgMHgwOAorI2RlZmluZSBTQ0hOX1NUQVRfQ0hOX0NUUkxfQ0hLCSAweDA0CisjZGVmaW5lIFNDSE5fU1RBVF9JTlRGX0NUUkxfQ0hLCSAweDAyCisjZGVmaW5lIFNDSE5fU1RBVF9DSEFJTl9DSEVDSwkgMHgwMQorCisvKgorICogYXJjaGl0ZWN0dXJlZCB2YWx1ZXMgZm9yIGZpcnN0IHNlbnNlIGJ5dGUKKyAqLworI2RlZmluZSBTTlMwX0NNRF9SRUpFQ1QJCTB4ODAKKyNkZWZpbmUgU05TX0NNRF9SRUpFQ1QJCVNOUzBfQ01EX1JFSkVDCisjZGVmaW5lIFNOUzBfSU5URVJWRU5USU9OX1JFUQkweDQwCisjZGVmaW5lIFNOUzBfQlVTX09VVF9DSEVDSwkweDIwCisjZGVmaW5lIFNOUzBfRVFVSVBNRU5UX0NIRUNLCTB4MTAKKyNkZWZpbmUgU05TMF9EQVRBX0NIRUNLCQkweDA4CisjZGVmaW5lIFNOUzBfT1ZFUlJVTgkJMHgwNAorI2RlZmluZSBTTlMwX0lOQ09NUExfRE9NQUlOCTB4MDEKKworLyoKKyAqIGFyY2hpdGVjdHVyZWQgdmFsdWVzIGZvciBzZWNvbmQgc2Vuc2UgYnl0ZQorICovCisjZGVmaW5lIFNOUzFfUEVSTV9FUlIJCTB4ODAKKyNkZWZpbmUgU05TMV9JTlZfVFJBQ0tfRk9STUFUCTB4NDAKKyNkZWZpbmUgU05TMV9FT0MJCTB4MjAKKyNkZWZpbmUgU05TMV9NRVNTQUdFX1RPX09QRVIJMHgxMAorI2RlZmluZSBTTlMxX05PX1JFQ19GT1VORAkweDA4CisjZGVmaW5lIFNOUzFfRklMRV9QUk9URUNURUQJMHgwNAorI2RlZmluZSBTTlMxX1dSSVRFX0lOSElCSVRFRAkweDAyCisjZGVmaW5lIFNOUzFfSU5QUkVDSVNFX0VORAkweDAxCisKKy8qCisgKiBhcmNoaXRlY3R1cmVkIHZhbHVlcyBmb3IgdGhpcmQgc2Vuc2UgYnl0ZQorICovCisjZGVmaW5lIFNOUzJfUkVRX0lOSF9XUklURQkweDgwCisjZGVmaW5lIFNOUzJfQ09SUkVDVEFCTEUJMHg0MAorI2RlZmluZSBTTlMyX0ZJUlNUX0xPR19FUlIJMHgyMAorI2RlZmluZSBTTlMyX0VOVl9EQVRBX1BSRVNFTlQJMHgxMAorI2RlZmluZSBTTlMyX0lOUFJFQ0lTRV9FTkQJMHgwNAorCisvKioKKyAqIHNjc3dfaXNfdG0gLSBjaGVjayBmb3IgdHJhbnNwb3J0IG1vZGUgc2NzdworICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgc3BlY2lmaWVkIHNjc3cgaXMgYSB0cmFuc3BvcnQgbW9kZSBzY3N3LCB6ZXJvCisgKiBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc3dfaXNfdG0odW5pb24gc2NzdyAqc2NzdykKK3sKKwlyZXR1cm4gY3NzX2dlbmVyYWxfY2hhcmFjdGVyaXN0aWNzLmZjeCAmJiAoc2Nzdy0+dG0ueCA9PSAxKTsKK30KKworLyoqCisgKiBzY3N3X2tleSAtIHJldHVybiBzY3N3IGtleSBmaWVsZAorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGtleSBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHNjc3csIHJlZ2FyZGxlc3Mgb2YKKyAqIHdoZXRoZXIgaXQgaXMgYSB0cmFuc3BvcnQgbW9kZSBvciBjb21tYW5kIG1vZGUgc2Nzdy4KKyAqLworc3RhdGljIGlubGluZSB1MzIgc2Nzd19rZXkodW5pb24gc2NzdyAqc2NzdykKK3sKKwlpZiAoc2Nzd19pc190bShzY3N3KSkKKwkJcmV0dXJuIHNjc3ctPnRtLmtleTsKKwllbHNlCisJCXJldHVybiBzY3N3LT5jbWQua2V5OworfQorCisvKioKKyAqIHNjc3dfZXN3ZiAtIHJldHVybiBzY3N3IGVzd2YgZmllbGQKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBlc3dmIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgc2NzdywgcmVnYXJkbGVzcyBvZgorICogd2hldGhlciBpdCBpcyBhIHRyYW5zcG9ydCBtb2RlIG9yIGNvbW1hbmQgbW9kZSBzY3N3LgorICovCitzdGF0aWMgaW5saW5lIHUzMiBzY3N3X2Vzd2YodW5pb24gc2NzdyAqc2NzdykKK3sKKwlpZiAoc2Nzd19pc190bShzY3N3KSkKKwkJcmV0dXJuIHNjc3ctPnRtLmVzd2Y7CisJZWxzZQorCQlyZXR1cm4gc2Nzdy0+Y21kLmVzd2Y7Cit9CisKKy8qKgorICogc2Nzd19jYyAtIHJldHVybiBzY3N3IGNjIGZpZWxkCisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY2MgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3LCByZWdhcmRsZXNzIG9mCisgKiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHNjc3dfY2ModW5pb24gc2NzdyAqc2NzdykKK3sKKwlpZiAoc2Nzd19pc190bShzY3N3KSkKKwkJcmV0dXJuIHNjc3ctPnRtLmNjOworCWVsc2UKKwkJcmV0dXJuIHNjc3ctPmNtZC5jYzsKK30KKworLyoqCisgKiBzY3N3X2VjdGwgLSByZXR1cm4gc2NzdyBlY3RsIGZpZWxkCisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZWN0bCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHNjc3csIHJlZ2FyZGxlc3Mgb2YKKyAqIHdoZXRoZXIgaXQgaXMgYSB0cmFuc3BvcnQgbW9kZSBvciBjb21tYW5kIG1vZGUgc2Nzdy4KKyAqLworc3RhdGljIGlubGluZSB1MzIgc2Nzd19lY3RsKHVuaW9uIHNjc3cgKnNjc3cpCit7CisJaWYgKHNjc3dfaXNfdG0oc2NzdykpCisJCXJldHVybiBzY3N3LT50bS5lY3RsOworCWVsc2UKKwkJcmV0dXJuIHNjc3ctPmNtZC5lY3RsOworfQorCisvKioKKyAqIHNjc3dfcG5vIC0gcmV0dXJuIHNjc3cgcG5vIGZpZWxkCisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcG5vIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgc2NzdywgcmVnYXJkbGVzcyBvZgorICogd2hldGhlciBpdCBpcyBhIHRyYW5zcG9ydCBtb2RlIG9yIGNvbW1hbmQgbW9kZSBzY3N3LgorICovCitzdGF0aWMgaW5saW5lIHUzMiBzY3N3X3Bubyh1bmlvbiBzY3N3ICpzY3N3KQoreworCWlmIChzY3N3X2lzX3RtKHNjc3cpKQorCQlyZXR1cm4gc2Nzdy0+dG0ucG5vOworCWVsc2UKKwkJcmV0dXJuIHNjc3ctPmNtZC5wbm87Cit9CisKKy8qKgorICogc2Nzd19mY3RsIC0gcmV0dXJuIHNjc3cgZmN0bCBmaWVsZAorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3LCByZWdhcmRsZXNzIG9mCisgKiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHNjc3dfZmN0bCh1bmlvbiBzY3N3ICpzY3N3KQoreworCWlmIChzY3N3X2lzX3RtKHNjc3cpKQorCQlyZXR1cm4gc2Nzdy0+dG0uZmN0bDsKKwllbHNlCisJCXJldHVybiBzY3N3LT5jbWQuZmN0bDsKK30KKworLyoqCisgKiBzY3N3X2FjdGwgLSByZXR1cm4gc2NzdyBhY3RsIGZpZWxkCisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYWN0bCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHNjc3csIHJlZ2FyZGxlc3Mgb2YKKyAqIHdoZXRoZXIgaXQgaXMgYSB0cmFuc3BvcnQgbW9kZSBvciBjb21tYW5kIG1vZGUgc2Nzdy4KKyAqLworc3RhdGljIGlubGluZSB1MzIgc2Nzd19hY3RsKHVuaW9uIHNjc3cgKnNjc3cpCit7CisJaWYgKHNjc3dfaXNfdG0oc2NzdykpCisJCXJldHVybiBzY3N3LT50bS5hY3RsOworCWVsc2UKKwkJcmV0dXJuIHNjc3ctPmNtZC5hY3RsOworfQorCisvKioKKyAqIHNjc3dfc3RjdGwgLSByZXR1cm4gc2NzdyBzdGN0bCBmaWVsZAorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHN0Y3RsIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgc2NzdywgcmVnYXJkbGVzcyBvZgorICogd2hldGhlciBpdCBpcyBhIHRyYW5zcG9ydCBtb2RlIG9yIGNvbW1hbmQgbW9kZSBzY3N3LgorICovCitzdGF0aWMgaW5saW5lIHUzMiBzY3N3X3N0Y3RsKHVuaW9uIHNjc3cgKnNjc3cpCit7CisJaWYgKHNjc3dfaXNfdG0oc2NzdykpCisJCXJldHVybiBzY3N3LT50bS5zdGN0bDsKKwllbHNlCisJCXJldHVybiBzY3N3LT5jbWQuc3RjdGw7Cit9CisKKy8qKgorICogc2Nzd19kc3RhdCAtIHJldHVybiBzY3N3IGRzdGF0IGZpZWxkCisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZHN0YXQgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3LCByZWdhcmRsZXNzIG9mCisgKiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHNjc3dfZHN0YXQodW5pb24gc2NzdyAqc2NzdykKK3sKKwlpZiAoc2Nzd19pc190bShzY3N3KSkKKwkJcmV0dXJuIHNjc3ctPnRtLmRzdGF0OworCWVsc2UKKwkJcmV0dXJuIHNjc3ctPmNtZC5kc3RhdDsKK30KKworLyoqCisgKiBzY3N3X2NzdGF0IC0gcmV0dXJuIHNjc3cgY3N0YXQgZmllbGQKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBjc3RhdCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHNjc3csIHJlZ2FyZGxlc3Mgb2YKKyAqIHdoZXRoZXIgaXQgaXMgYSB0cmFuc3BvcnQgbW9kZSBvciBjb21tYW5kIG1vZGUgc2Nzdy4KKyAqLworc3RhdGljIGlubGluZSB1MzIgc2Nzd19jc3RhdCh1bmlvbiBzY3N3ICpzY3N3KQoreworCWlmIChzY3N3X2lzX3RtKHNjc3cpKQorCQlyZXR1cm4gc2Nzdy0+dG0uY3N0YXQ7CisJZWxzZQorCQlyZXR1cm4gc2Nzdy0+Y21kLmNzdGF0OworfQorCisvKioKKyAqIHNjc3dfY21kX2lzX3ZhbGlkX2tleSAtIGNoZWNrIGtleSBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUga2V5IGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBtb2RlIHNjc3cgaXMKKyAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2Nzd19jbWRfaXNfdmFsaWRfa2V5KHVuaW9uIHNjc3cgKnNjc3cpCit7CisJcmV0dXJuIChzY3N3LT5jbWQuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKTsKK30KKworLyoqCisgKiBzY3N3X2NtZF9pc192YWxpZF9zY3RsIC0gY2hlY2sgZmN0bCBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgZmN0bCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgbW9kZSBzY3N3IGlzCisgKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc3dfY21kX2lzX3ZhbGlkX3NjdGwodW5pb24gc2NzdyAqc2NzdykKK3sKKwlyZXR1cm4gKHNjc3ctPmNtZC5mY3RsICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpOworfQorCisvKioKKyAqIHNjc3dfY21kX2lzX3ZhbGlkX2Vzd2YgLSBjaGVjayBlc3dmIGZpZWxkIHZhbGlkaXR5CisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBlc3dmIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBtb2RlIHNjc3cgaXMKKyAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2Nzd19jbWRfaXNfdmFsaWRfZXN3Zih1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAoc2Nzdy0+Y21kLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCk7Cit9CisKKy8qKgorICogc2Nzd19jbWRfaXNfdmFsaWRfY2MgLSBjaGVjayBjYyBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgY2MgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBjb21tYW5kIG1vZGUgc2NzdyBpcworICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2NtZF9pc192YWxpZF9jYyh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAoc2Nzdy0+Y21kLmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykgJiYKKwkgICAgICAgKHNjc3ctPmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpOworfQorCisvKioKKyAqIHNjc3dfY21kX2lzX3ZhbGlkX2ZtdCAtIGNoZWNrIGZtdCBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgZm10IGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBtb2RlIHNjc3cgaXMKKyAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2Nzd19jbWRfaXNfdmFsaWRfZm10KHVuaW9uIHNjc3cgKnNjc3cpCit7CisJcmV0dXJuIChzY3N3LT5jbWQuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKTsKK30KKworLyoqCisgKiBzY3N3X2NtZF9pc192YWxpZF9wZmNoIC0gY2hlY2sgcGZjaCBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgcGZjaCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgbW9kZSBzY3N3IGlzCisgKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc3dfY21kX2lzX3ZhbGlkX3BmY2godW5pb24gc2NzdyAqc2NzdykKK3sKKwlyZXR1cm4gKHNjc3ctPmNtZC5mY3RsICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpOworfQorCisvKioKKyAqIHNjc3dfY21kX2lzX3ZhbGlkX2lzaWMgLSBjaGVjayBpc2ljIGZpZWxkIHZhbGlkaXR5CisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBpc2ljIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBtb2RlIHNjc3cgaXMKKyAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2Nzd19jbWRfaXNfdmFsaWRfaXNpYyh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAoc2Nzdy0+Y21kLmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQyk7Cit9CisKKy8qKgorICogc2Nzd19jbWRfaXNfdmFsaWRfYWxjYyAtIGNoZWNrIGFsY2MgZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGFsY2MgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBjb21tYW5kIG1vZGUgc2NzdyBpcworICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2NtZF9pc192YWxpZF9hbGNjKHVuaW9uIHNjc3cgKnNjc3cpCit7CisJcmV0dXJuIChzY3N3LT5jbWQuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKTsKK30KKworLyoqCisgKiBzY3N3X2NtZF9pc192YWxpZF9zc2kgLSBjaGVjayBzc2kgZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIHNzaSBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgbW9kZSBzY3N3IGlzCisgKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc3dfY21kX2lzX3ZhbGlkX3NzaSh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAoc2Nzdy0+Y21kLmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQyk7Cit9CisKKy8qKgorICogc2Nzd19jbWRfaXNfdmFsaWRfemNjIC0gY2hlY2sgemNjIGZpZWxkIHZhbGlkaXR5CisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSB6Y2MgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBjb21tYW5kIG1vZGUgc2NzdyBpcworICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2NtZF9pc192YWxpZF96Y2ModW5pb24gc2NzdyAqc2NzdykKK3sKKwlyZXR1cm4gKHNjc3ctPmNtZC5mY3RsICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpICYmCisJICAgICAgIChzY3N3LT5jbWQuc3RjdGwgJiBTQ1NXX1NUQ1RMX0lOVEVSX1NUQVRVUyk7Cit9CisKKy8qKgorICogc2Nzd19jbWRfaXNfdmFsaWRfZWN0bCAtIGNoZWNrIGVjdGwgZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGVjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBjb21tYW5kIG1vZGUgc2NzdyBpcworICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2NtZF9pc192YWxpZF9lY3RsKHVuaW9uIHNjc3cgKnNjc3cpCit7CisJcmV0dXJuIChzY3N3LT5jbWQuc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSAmJgorCSAgICAgICAhKHNjc3ctPmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfSU5URVJfU1RBVFVTKSAmJgorCSAgICAgICAoc2Nzdy0+Y21kLnN0Y3RsICYgU0NTV19TVENUTF9BTEVSVF9TVEFUVVMpOworfQorCisvKioKKyAqIHNjc3dfY21kX2lzX3ZhbGlkX3BubyAtIGNoZWNrIHBubyBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgcG5vIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBtb2RlIHNjc3cgaXMKKyAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2Nzd19jbWRfaXNfdmFsaWRfcG5vKHVuaW9uIHNjc3cgKnNjc3cpCit7CisJcmV0dXJuIChzY3N3LT5jbWQuZmN0bCAhPSAwKSAmJgorCSAgICAgICAoc2Nzdy0+Y21kLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCkgJiYKKwkgICAgICAgKCEoc2Nzdy0+Y21kLnN0Y3RsICYgU0NTV19TVENUTF9JTlRFUl9TVEFUVVMpIHx8CisJCSAoKHNjc3ctPmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfSU5URVJfU1RBVFVTKSAmJgorCQkgIChzY3N3LT5jbWQuYWN0bCAmIFNDU1dfQUNUTF9TVVNQRU5ERUQpKSk7Cit9CisKKy8qKgorICogc2Nzd19jbWRfaXNfdmFsaWRfZmN0bCAtIGNoZWNrIGZjdGwgZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGZjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBjb21tYW5kIG1vZGUgc2NzdyBpcworICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2NtZF9pc192YWxpZF9mY3RsKHVuaW9uIHNjc3cgKnNjc3cpCit7CisJLyogT25seSB2YWxpZCBpZiBwbWN3LmRudiA9PSAxKi8KKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBzY3N3X2NtZF9pc192YWxpZF9hY3RsIC0gY2hlY2sgYWN0bCBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgYWN0bCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgbW9kZSBzY3N3IGlzCisgKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc3dfY21kX2lzX3ZhbGlkX2FjdGwodW5pb24gc2NzdyAqc2NzdykKK3sKKwkvKiBPbmx5IHZhbGlkIGlmIHBtY3cuZG52ID09IDEqLworCXJldHVybiAxOworfQorCisvKioKKyAqIHNjc3dfY21kX2lzX3ZhbGlkX3N0Y3RsIC0gY2hlY2sgc3RjdGwgZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIHN0Y3RsIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBtb2RlIHNjc3cgaXMKKyAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2Nzd19jbWRfaXNfdmFsaWRfc3RjdGwodW5pb24gc2NzdyAqc2NzdykKK3sKKwkvKiBPbmx5IHZhbGlkIGlmIHBtY3cuZG52ID09IDEqLworCXJldHVybiAxOworfQorCisvKioKKyAqIHNjc3dfY21kX2lzX3ZhbGlkX2RzdGF0IC0gY2hlY2sgZHN0YXQgZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGRzdGF0IGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBtb2RlIHNjc3cgaXMKKyAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2Nzd19jbWRfaXNfdmFsaWRfZHN0YXQodW5pb24gc2NzdyAqc2NzdykKK3sKKwlyZXR1cm4gKHNjc3ctPmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpICYmCisJICAgICAgIChzY3N3LT5jbWQuY2MgIT0gMyk7Cit9CisKKy8qKgorICogc2Nzd19jbWRfaXNfdmFsaWRfY3N0YXQgLSBjaGVjayBjc3RhdCBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgY3N0YXQgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBjb21tYW5kIG1vZGUgc2NzdyBpcworICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2NtZF9pc192YWxpZF9jc3RhdCh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAoc2Nzdy0+Y21kLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCkgJiYKKwkgICAgICAgKHNjc3ctPmNtZC5jYyAhPSAzKTsKK30KKworLyoqCisgKiBzY3N3X3RtX2lzX3ZhbGlkX2tleSAtIGNoZWNrIGtleSBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUga2V5IGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgdHJhbnNwb3J0IG1vZGUgc2NzdyBpcworICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X3RtX2lzX3ZhbGlkX2tleSh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAoc2Nzdy0+dG0uZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKTsKK30KKworLyoqCisgKiBzY3N3X3RtX2lzX3ZhbGlkX2Vzd2YgLSBjaGVjayBlc3dmIGZpZWxkIHZhbGlkaXR5CisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBlc3dmIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgdHJhbnNwb3J0IG1vZGUgc2NzdyBpcworICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X3RtX2lzX3ZhbGlkX2Vzd2YodW5pb24gc2NzdyAqc2NzdykKK3sKKwlyZXR1cm4gKHNjc3ctPnRtLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCk7Cit9CisKKy8qKgorICogc2Nzd190bV9pc192YWxpZF9jYyAtIGNoZWNrIGNjIGZpZWxkIHZhbGlkaXR5CisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBjYyBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHRyYW5zcG9ydCBtb2RlIHNjc3cgaXMKKyAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2Nzd190bV9pc192YWxpZF9jYyh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAoc2Nzdy0+dG0uZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgorCSAgICAgICAoc2Nzdy0+dG0uc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKTsKK30KKworLyoqCisgKiBzY3N3X3RtX2lzX3ZhbGlkX2ZtdCAtIGNoZWNrIGZtdCBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgZm10IGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgdHJhbnNwb3J0IG1vZGUgc2NzdyBpcworICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X3RtX2lzX3ZhbGlkX2ZtdCh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAxOworfQorCisvKioKKyAqIHNjc3dfdG1faXNfdmFsaWRfeCAtIGNoZWNrIHggZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIHggZmllbGQgb2YgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBzY3N3IGlzCisgKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc3dfdG1faXNfdmFsaWRfeCh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAxOworfQorCisvKioKKyAqIHNjc3dfdG1faXNfdmFsaWRfcSAtIGNoZWNrIHEgZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIHEgZmllbGQgb2YgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBzY3N3IGlzCisgKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc3dfdG1faXNfdmFsaWRfcSh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAxOworfQorCisvKioKKyAqIHNjc3dfdG1faXNfdmFsaWRfZWN0bCAtIGNoZWNrIGVjdGwgZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGVjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBzY3N3IGlzCisgKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc3dfdG1faXNfdmFsaWRfZWN0bCh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAoc2Nzdy0+dG0uc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSAmJgorCSAgICAgICAhKHNjc3ctPnRtLnN0Y3RsICYgU0NTV19TVENUTF9JTlRFUl9TVEFUVVMpICYmCisJICAgICAgIChzY3N3LT50bS5zdGN0bCAmIFNDU1dfU1RDVExfQUxFUlRfU1RBVFVTKTsKK30KKworLyoqCisgKiBzY3N3X3RtX2lzX3ZhbGlkX3BubyAtIGNoZWNrIHBubyBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgcG5vIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgdHJhbnNwb3J0IG1vZGUgc2NzdyBpcworICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X3RtX2lzX3ZhbGlkX3Bubyh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAoc2Nzdy0+dG0uZmN0bCAhPSAwKSAmJgorCSAgICAgICAoc2Nzdy0+dG0uc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSAmJgorCSAgICAgICAoIShzY3N3LT50bS5zdGN0bCAmIFNDU1dfU1RDVExfSU5URVJfU1RBVFVTKSB8fAorCQkgKChzY3N3LT50bS5zdGN0bCAmIFNDU1dfU1RDVExfSU5URVJfU1RBVFVTKSAmJgorCQkgIChzY3N3LT50bS5hY3RsICYgU0NTV19BQ1RMX1NVU1BFTkRFRCkpKTsKK30KKworLyoqCisgKiBzY3N3X3RtX2lzX3ZhbGlkX2ZjdGwgLSBjaGVjayBmY3RsIGZpZWxkIHZhbGlkaXR5CisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBmY3RsIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgdHJhbnNwb3J0IG1vZGUgc2NzdyBpcworICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X3RtX2lzX3ZhbGlkX2ZjdGwodW5pb24gc2NzdyAqc2NzdykKK3sKKwkvKiBPbmx5IHZhbGlkIGlmIHBtY3cuZG52ID09IDEqLworCXJldHVybiAxOworfQorCisvKioKKyAqIHNjc3dfdG1faXNfdmFsaWRfYWN0bCAtIGNoZWNrIGFjdGwgZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGFjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBzY3N3IGlzCisgKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc3dfdG1faXNfdmFsaWRfYWN0bCh1bmlvbiBzY3N3ICpzY3N3KQoreworCS8qIE9ubHkgdmFsaWQgaWYgcG1jdy5kbnYgPT0gMSovCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogc2Nzd190bV9pc192YWxpZF9zdGN0bCAtIGNoZWNrIHN0Y3RsIGZpZWxkIHZhbGlkaXR5CisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBzdGN0bCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHRyYW5zcG9ydCBtb2RlIHNjc3cgaXMKKyAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2Nzd190bV9pc192YWxpZF9zdGN0bCh1bmlvbiBzY3N3ICpzY3N3KQoreworCS8qIE9ubHkgdmFsaWQgaWYgcG1jdy5kbnYgPT0gMSovCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogc2Nzd190bV9pc192YWxpZF9kc3RhdCAtIGNoZWNrIGRzdGF0IGZpZWxkIHZhbGlkaXR5CisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBkc3RhdCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHRyYW5zcG9ydCBtb2RlIHNjc3cgaXMKKyAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2Nzd190bV9pc192YWxpZF9kc3RhdCh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAoc2Nzdy0+dG0uc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSAmJgorCSAgICAgICAoc2Nzdy0+dG0uY2MgIT0gMyk7Cit9CisKKy8qKgorICogc2Nzd190bV9pc192YWxpZF9jc3RhdCAtIGNoZWNrIGNzdGF0IGZpZWxkIHZhbGlkaXR5CisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBjc3RhdCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHRyYW5zcG9ydCBtb2RlIHNjc3cgaXMKKyAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2Nzd190bV9pc192YWxpZF9jc3RhdCh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAoc2Nzdy0+dG0uc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSAmJgorCSAgICAgICAoc2Nzdy0+dG0uY2MgIT0gMyk7Cit9CisKKy8qKgorICogc2Nzd190bV9pc192YWxpZF9mY3hzIC0gY2hlY2sgZmN4cyBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgZmN4cyBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHRyYW5zcG9ydCBtb2RlIHNjc3cgaXMKKyAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2Nzd190bV9pc192YWxpZF9mY3hzKHVuaW9uIHNjc3cgKnNjc3cpCit7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogc2Nzd190bV9pc192YWxpZF9zY2h4cyAtIGNoZWNrIHNjaHhzIGZpZWxkIHZhbGlkaXR5CisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBzY2h4cyBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHRyYW5zcG9ydCBtb2RlIHNjc3cgaXMKKyAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2Nzd190bV9pc192YWxpZF9zY2h4cyh1bmlvbiBzY3N3ICpzY3N3KQoreworCXJldHVybiAoc2Nzdy0+dG0uY3N0YXQgJiAoU0NITl9TVEFUX1BST0dfQ0hFQ0sgfAorCQkJCSAgU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsgfAorCQkJCSAgU0NITl9TVEFUX1BST1RfQ0hFQ0sgfAorCQkJCSAgU0NITl9TVEFUX0NITl9EQVRBX0NISykpOworfQorCisvKioKKyAqIHNjc3dfaXNfdmFsaWRfYWN0bCAtIGNoZWNrIGFjdGwgZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGFjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3IGlzIHZhbGlkLAorICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCisgKiBSZXR1cm4gemVybyBpZiB0aGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2lzX3ZhbGlkX2FjdGwodW5pb24gc2NzdyAqc2NzdykKK3sKKwlpZiAoc2Nzd19pc190bShzY3N3KSkKKwkJcmV0dXJuIHNjc3dfdG1faXNfdmFsaWRfYWN0bChzY3N3KTsKKwllbHNlCisJCXJldHVybiBzY3N3X2NtZF9pc192YWxpZF9hY3RsKHNjc3cpOworfQorCisvKioKKyAqIHNjc3dfaXNfdmFsaWRfY2MgLSBjaGVjayBjYyBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgY2MgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3IGlzIHZhbGlkLAorICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCisgKiBSZXR1cm4gemVybyBpZiB0aGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2lzX3ZhbGlkX2NjKHVuaW9uIHNjc3cgKnNjc3cpCit7CisJaWYgKHNjc3dfaXNfdG0oc2NzdykpCisJCXJldHVybiBzY3N3X3RtX2lzX3ZhbGlkX2NjKHNjc3cpOworCWVsc2UKKwkJcmV0dXJuIHNjc3dfY21kX2lzX3ZhbGlkX2NjKHNjc3cpOworfQorCisvKioKKyAqIHNjc3dfaXNfdmFsaWRfY3N0YXQgLSBjaGVjayBjc3RhdCBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgY3N0YXQgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3IGlzIHZhbGlkLAorICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCisgKiBSZXR1cm4gemVybyBpZiB0aGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2lzX3ZhbGlkX2NzdGF0KHVuaW9uIHNjc3cgKnNjc3cpCit7CisJaWYgKHNjc3dfaXNfdG0oc2NzdykpCisJCXJldHVybiBzY3N3X3RtX2lzX3ZhbGlkX2NzdGF0KHNjc3cpOworCWVsc2UKKwkJcmV0dXJuIHNjc3dfY21kX2lzX3ZhbGlkX2NzdGF0KHNjc3cpOworfQorCisvKioKKyAqIHNjc3dfaXNfdmFsaWRfZHN0YXQgLSBjaGVjayBkc3RhdCBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgZHN0YXQgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3IGlzIHZhbGlkLAorICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCisgKiBSZXR1cm4gemVybyBpZiB0aGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2lzX3ZhbGlkX2RzdGF0KHVuaW9uIHNjc3cgKnNjc3cpCit7CisJaWYgKHNjc3dfaXNfdG0oc2NzdykpCisJCXJldHVybiBzY3N3X3RtX2lzX3ZhbGlkX2RzdGF0KHNjc3cpOworCWVsc2UKKwkJcmV0dXJuIHNjc3dfY21kX2lzX3ZhbGlkX2RzdGF0KHNjc3cpOworfQorCisvKioKKyAqIHNjc3dfaXNfdmFsaWRfZWN0bCAtIGNoZWNrIGVjdGwgZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGVjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3IGlzIHZhbGlkLAorICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCisgKiBSZXR1cm4gemVybyBpZiB0aGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2lzX3ZhbGlkX2VjdGwodW5pb24gc2NzdyAqc2NzdykKK3sKKwlpZiAoc2Nzd19pc190bShzY3N3KSkKKwkJcmV0dXJuIHNjc3dfdG1faXNfdmFsaWRfZWN0bChzY3N3KTsKKwllbHNlCisJCXJldHVybiBzY3N3X2NtZF9pc192YWxpZF9lY3RsKHNjc3cpOworfQorCisvKioKKyAqIHNjc3dfaXNfdmFsaWRfZXN3ZiAtIGNoZWNrIGVzd2YgZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGVzd2YgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3IGlzIHZhbGlkLAorICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCisgKiBSZXR1cm4gemVybyBpZiB0aGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2lzX3ZhbGlkX2Vzd2YodW5pb24gc2NzdyAqc2NzdykKK3sKKwlpZiAoc2Nzd19pc190bShzY3N3KSkKKwkJcmV0dXJuIHNjc3dfdG1faXNfdmFsaWRfZXN3ZihzY3N3KTsKKwllbHNlCisJCXJldHVybiBzY3N3X2NtZF9pc192YWxpZF9lc3dmKHNjc3cpOworfQorCisvKioKKyAqIHNjc3dfaXNfdmFsaWRfZmN0bCAtIGNoZWNrIGZjdGwgZmllbGQgdmFsaWRpdHkKKyAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGZjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3IGlzIHZhbGlkLAorICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCisgKiBSZXR1cm4gemVybyBpZiB0aGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2lzX3ZhbGlkX2ZjdGwodW5pb24gc2NzdyAqc2NzdykKK3sKKwlpZiAoc2Nzd19pc190bShzY3N3KSkKKwkJcmV0dXJuIHNjc3dfdG1faXNfdmFsaWRfZmN0bChzY3N3KTsKKwllbHNlCisJCXJldHVybiBzY3N3X2NtZF9pc192YWxpZF9mY3RsKHNjc3cpOworfQorCisvKioKKyAqIHNjc3dfaXNfdmFsaWRfa2V5IC0gY2hlY2sga2V5IGZpZWxkIHZhbGlkaXR5CisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBrZXkgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3IGlzIHZhbGlkLAorICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCisgKiBSZXR1cm4gemVybyBpZiB0aGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2lzX3ZhbGlkX2tleSh1bmlvbiBzY3N3ICpzY3N3KQoreworCWlmIChzY3N3X2lzX3RtKHNjc3cpKQorCQlyZXR1cm4gc2Nzd190bV9pc192YWxpZF9rZXkoc2Nzdyk7CisJZWxzZQorCQlyZXR1cm4gc2Nzd19jbWRfaXNfdmFsaWRfa2V5KHNjc3cpOworfQorCisvKioKKyAqIHNjc3dfaXNfdmFsaWRfcG5vIC0gY2hlY2sgcG5vIGZpZWxkIHZhbGlkaXR5CisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBwbm8gZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3IGlzIHZhbGlkLAorICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCisgKiBSZXR1cm4gemVybyBpZiB0aGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2lzX3ZhbGlkX3Bubyh1bmlvbiBzY3N3ICpzY3N3KQoreworCWlmIChzY3N3X2lzX3RtKHNjc3cpKQorCQlyZXR1cm4gc2Nzd190bV9pc192YWxpZF9wbm8oc2Nzdyk7CisJZWxzZQorCQlyZXR1cm4gc2Nzd19jbWRfaXNfdmFsaWRfcG5vKHNjc3cpOworfQorCisvKioKKyAqIHNjc3dfaXNfdmFsaWRfc3RjdGwgLSBjaGVjayBzdGN0bCBmaWVsZCB2YWxpZGl0eQorICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgc3RjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3IGlzIHZhbGlkLAorICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCisgKiBSZXR1cm4gemVybyBpZiB0aGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2lzX3ZhbGlkX3N0Y3RsKHVuaW9uIHNjc3cgKnNjc3cpCit7CisJaWYgKHNjc3dfaXNfdG0oc2NzdykpCisJCXJldHVybiBzY3N3X3RtX2lzX3ZhbGlkX3N0Y3RsKHNjc3cpOworCWVsc2UKKwkJcmV0dXJuIHNjc3dfY21kX2lzX3ZhbGlkX3N0Y3RsKHNjc3cpOworfQorCisvKioKKyAqIHNjc3dfY21kX2lzX3NvbGljaXRlZCAtIGNoZWNrIGZvciBzb2xpY2l0ZWQgc2NzdworICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgY29tbWFuZCBtb2RlIHNjc3cgaW5kaWNhdGVzIHRoYXQgdGhlIGFzc29jaWF0ZWQKKyAqIHN0YXR1cyBjb25kaXRpb24gaXMgc29saWNpdGVkLCB6ZXJvIGlmIGl0IGlzIHVuc29saWNpdGVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2NtZF9pc19zb2xpY2l0ZWQodW5pb24gc2NzdyAqc2NzdykKK3sKKwlyZXR1cm4gKHNjc3ctPmNtZC5jYyAhPSAwKSB8fCAoc2Nzdy0+Y21kLnN0Y3RsICE9CisJCShTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EIHwgU0NTV19TVENUTF9BTEVSVF9TVEFUVVMpKTsKK30KKworLyoqCisgKiBzY3N3X3RtX2lzX3NvbGljaXRlZCAtIGNoZWNrIGZvciBzb2xpY2l0ZWQgc2NzdworICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdworICoKKyAqIFJldHVybiBub24temVybyBpZiB0aGUgdHJhbnNwb3J0IG1vZGUgc2NzdyBpbmRpY2F0ZXMgdGhhdCB0aGUgYXNzb2NpYXRlZAorICogc3RhdHVzIGNvbmRpdGlvbiBpcyBzb2xpY2l0ZWQsIHplcm8gaWYgaXQgaXMgdW5zb2xpY2l0ZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc3dfdG1faXNfc29saWNpdGVkKHVuaW9uIHNjc3cgKnNjc3cpCit7CisJcmV0dXJuIChzY3N3LT50bS5jYyAhPSAwKSB8fCAoc2Nzdy0+dG0uc3RjdGwgIT0KKwkJKFNDU1dfU1RDVExfU1RBVFVTX1BFTkQgfCBTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUykpOworfQorCisvKioKKyAqIHNjc3dfaXNfc29saWNpdGVkIC0gY2hlY2sgZm9yIHNvbGljaXRlZCBzY3N3CisgKiBAc2NzdzogcG9pbnRlciB0byBzY3N3CisgKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSB0cmFuc3BvcnQgb3IgY29tbWFuZCBtb2RlIHNjc3cgaW5kaWNhdGVzIHRoYXQgdGhlCisgKiBhc3NvY2lhdGVkIHN0YXR1cyBjb25kaXRpb24gaXMgc29saWNpdGVkLCB6ZXJvIGlmIGl0IGlzIHVuc29saWNpdGVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3N3X2lzX3NvbGljaXRlZCh1bmlvbiBzY3N3ICpzY3N3KQoreworCWlmIChzY3N3X2lzX3RtKHNjc3cpKQorCQlyZXR1cm4gc2Nzd190bV9pc19zb2xpY2l0ZWQoc2Nzdyk7CisJZWxzZQorCQlyZXR1cm4gc2Nzd19jbWRfaXNfc29saWNpdGVkKHNjc3cpOworfQorCisjZW5kaWYgLyogX0FTTV9TMzkwX1NDU1dfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggMzhiMGZjMi4uZTM3NDc4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTgsNyArOCw3IEBACiAjaWZuZGVmIF9BU01fUzM5MF9TRVRVUF9ICiAjZGVmaW5lIF9BU01fUzM5MF9TRVRVUF9ICiAKLSNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJMTAyNAorI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRQk0MDk2CiAKICNkZWZpbmUgQVJDSF9DT01NQU5EX0xJTkVfU0laRQk4OTYKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IDcyMTM3YmMuLmM5OTFmZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKQEAgLTUxLDMyICs1MSw3IEBACiAjZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJMjAJCS8qIFNjaGVkdWxlIHBlbmFsdHkgKi8KIAogI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCShTMzkwX2xvd2NvcmUuY3B1X25yKQotCi0vKgotICogcmV0dXJucyAxIGlmIGNwdSBpcyBpbiBzdG9wcGVkL2NoZWNrIHN0b3BwZWQgc3RhdGUgb3Igbm90IG9wZXJhdGlvbmFsCi0gKiByZXR1cm5zIDAgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1zbXBfY3B1X25vdF9ydW5uaW5nKGludCBjcHUpCi17Ci0JX191MzIgc3RhdHVzOwotCi0Jc3dpdGNoIChzaWduYWxfcHJvY2Vzc29yX3BzKCZzdGF0dXMsIDAsIGNwdSwgc2lncF9zZW5zZSkpIHsKLQljYXNlIHNpZ3Bfb3JkZXJfY29kZV9hY2NlcHRlZDoKLQljYXNlIHNpZ3Bfc3RhdHVzX3N0b3JlZDoKLQkJLyogQ2hlY2sgZm9yIHN0b3BwZWQgYW5kIGNoZWNrIHN0b3Agc3RhdGUgKi8KLQkJaWYgKHN0YXR1cyAmIDB4NTApCi0JCQlyZXR1cm4gMTsKLQkJYnJlYWs7Ci0JY2FzZSBzaWdwX25vdF9vcGVyYXRpb25hbDoKLQkJcmV0dXJuIDE7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIGNwdV9sb2dpY2FsX21hcChjcHUpIChjcHUpCisjZGVmaW5lIGNwdV9sb2dpY2FsX21hcChjcHUpCShjcHUpCiAKIGV4dGVybiBpbnQgX19jcHVfZGlzYWJsZSAodm9pZCk7CiBleHRlcm4gdm9pZCBfX2NwdV9kaWUgKHVuc2lnbmVkIGludCBjcHUpOwpAQCAtOTEsMTEgKzY2LDYgQEAKIAogI2VuZGlmCiAKLSNpZm5kZWYgQ09ORklHX1NNUAotI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQkJMAotI2RlZmluZSBzbXBfY3B1X25vdF9ydW5uaW5nKGNwdSkJMQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIGV4dGVybiBpbnQgc21wX3Jlc2Nhbl9jcHVzKHZvaWQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCAwMjMzMGM1Li5lNDJkZjg5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC02NSw0ICs2NSw3IEBACiAjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKICNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKIAorI2RlZmluZSBTT19QUk9UT0NPTAkJMzgKKyNkZWZpbmUgU09fRE9NQUlOCQkzOQorCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCBjOWFmMGQxOS4uNDFjZTY4NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTE5MSw0ICsxOTEsMzMgQEAKICNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKIAorI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fbG9jaworI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3JlYWRfbG9jaworI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3dyaXRlX2xvY2sKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX19zcGluX2xvY2tfYmgKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX19yZWFkX2xvY2tfYmgKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV9sb2NrX2JoCisjZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fc3Bpbl9sb2NrX2lycQorI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3JlYWRfbG9ja19pcnEKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV9sb2NrX2lycQorI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fbG9ja19pcnFzYXZlCisjZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fcmVhZF9sb2NrX2lycXNhdmUKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV9sb2NrX2lycXNhdmUKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX19zcGluX3RyeWxvY2sKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX19yZWFkX3RyeWxvY2sKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV90cnlsb2NrCisjZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fc3Bpbl90cnlsb2NrX2JoCisjZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fc3Bpbl91bmxvY2sKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX19yZWFkX3VubG9jaworI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3dyaXRlX3VubG9jaworI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fdW5sb2NrX2JoCisjZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fcmVhZF91bmxvY2tfYmgKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV91bmxvY2tfYmgKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX19zcGluX3VubG9ja19pcnEKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX19yZWFkX3VubG9ja19pcnEKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV91bmxvY2tfaXJxCisjZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZQorI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV91bmxvY2tfaXJxcmVzdG9yZQorCiAjZW5kaWYgLyogX19BU01fU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDRmYjgzYzEuLjM3OTY2MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTEwOSwxMSArMTA5LDcgQEAKICNkZWZpbmUgcGZhdWx0X2ZpbmkoKQkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmIC8qIENPTkZJR19QRkFVTFQgKi8KIAotI2lmZGVmIENPTkZJR19QQUdFX1NUQVRFUwogZXh0ZXJuIHZvaWQgY21tYV9pbml0KHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbW1hX2luaXQodm9pZCkgeyB9Ci0jZW5kaWYKIAogI2RlZmluZSBmaW5pc2hfYXJjaF9zd2l0Y2gocHJldikgZG8gewkJCQkJICAgICBcCiAJc2V0X2ZzKGN1cnJlbnQtPnRocmVhZC5tbV9zZWdtZW50KTsJCQkJICAgICBcCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGJhMWNhYjkuLjA3ZWI2MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC05Miw3ICs5Miw3IEBACiAjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFCTgJLyogc3lzY2FsbCB0cmFjZSBhY3RpdmUgKi8KICNkZWZpbmUgVElGX1NZU0NBTExfQVVESVQJOQkvKiBzeXNjYWxsIGF1ZGl0aW5nIGFjdGl2ZSAqLwogI2RlZmluZSBUSUZfU0VDQ09NUAkJMTAJLyogc2VjdXJlIGNvbXB1dGluZyAqLwotI2RlZmluZSBUSUZfU1lTQ0FMTF9GVFJBQ0UJMTEJLyogZnRyYWNlIHN5c2NhbGwgaW5zdHJ1bWVudGF0aW9uICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQJMTEJLyogc3lzY2FsbCB0cmFjZXBvaW50IGluc3RydW1lbnRhdGlvbiAqLwogI2RlZmluZSBUSUZfVVNFREZQVQkJMTYJLyogRlBVIHdhcyB1c2VkIGJ5IHRoaXMgdGFzayB0aGlzIHF1YW50dW0gKFNNUCkgKi8KICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE3CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyAKIAkJCQkJICAgVElGX05FRURfUkVTQ0hFRCAqLwpAQCAtMTExLDcgKzExMSw3IEBACiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMTw8VElGX1NZU0NBTExfQVVESVQpCiAjZGVmaW5lIF9USUZfU0VDQ09NUAkJKDE8PFRJRl9TRUNDT01QKQotI2RlZmluZSBfVElGX1NZU0NBTExfRlRSQUNFCSgxPDxUSUZfU1lTQ0FMTF9GVFJBQ0UpCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRVBPSU5UCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UKQogI2RlZmluZSBfVElGX1VTRURGUFUJCSgxPDxUSUZfVVNFREZQVSkKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQogI2RlZmluZSBfVElGXzMxQklUCQkoMTw8VElGXzMxQklUKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RpbWV4LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaAppbmRleCBjYzIxZTNlLi42OGQ5ZmVhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaApAQCAtODgsNiArODgsMjggQEAKIHZvaWQgaW5pdF9jcHVfdGltZXIodm9pZCk7CiB1bnNpZ25lZCBsb25nIGxvbmcgbW9ub3RvbmljX2Nsb2NrKHZvaWQpOwogCit2b2lkIHRvZF90b190aW1ldmFsKF9fdTY0LCBzdHJ1Y3QgdGltZXNwZWMgKik7CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgc3Rja190b190aW1lc3BlYyh1bnNpZ25lZCBsb25nIGxvbmcgc3Rjaywgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwl0b2RfdG9fdGltZXZhbChzdGNrIC0gVE9EX1VOSVhfRVBPQ0gsIHRzKTsKK30KKwogZXh0ZXJuIHU2NCBzY2hlZF9jbG9ja19iYXNlX2NjOwogCisvKioKKyAqIGdldF9jbG9ja19tb25vdG9uaWMgLSByZXR1cm5zIGN1cnJlbnQgdGltZSBpbiBjbG9jayByYXRlIHVuaXRzCisgKgorICogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHByZWVtcHRpb24gaXMgZGlzYWJsZWQuCisgKiBUaGUgY2xvY2sgYW5kIHNjaGVkX2Nsb2NrX2Jhc2UgZ2V0IGNoYW5nZWQgdmlhIHN0b3BfbWFjaGluZS4KKyAqIFRoZXJlZm9yZSBwcmVlbXB0aW9uIG11c3QgYmUgZGlzYWJsZWQgd2hlbiBjYWxsaW5nIHRoaXMKKyAqIGZ1bmN0aW9uLCBvdGhlcndpc2UgdGhlIHJldHVybmVkIHZhbHVlIGlzIG5vdCBndWFyYW50ZWVkIHRvCisgKiBiZSBtb25vdG9uaWMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGdldF9jbG9ja19tb25vdG9uaWModm9pZCkKK3sKKwlyZXR1cm4gZ2V0X2Nsb2NrX3h0KCkgLSBzY2hlZF9jbG9ja19iYXNlX2NjOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCmluZGV4IGM3NWVkNDMuLmM3YmU4ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQpAQCAtMzIsNyArMzIsNyBAQAogCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IHMzOTBfa3N5bXMubyBtb2R1bGUubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vIHRvcG9sb2d5Lm8KLQorb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKQkrPSBzdXNwZW5kLm8gc3dzdXNwX2FzbTY0Lm8KIG9iai0kKENPTkZJR19BVURJVCkJCSs9IGF1ZGl0Lm8KIGNvbXBhdC1vYmotJChDT05GSUdfQVVESVQpCSs9IGNvbXBhdF9hdWRpdC5vCiBvYmotJChDT05GSUdfQ09NUEFUKQkJKz0gY29tcGF0X2xpbnV4Lm8gY29tcGF0X3NpZ25hbC5vIFwKQEAgLTQxLDcgKzQxLDcgQEAKIAogb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2Uubwogb2JqLSQoQ09ORklHX0tQUk9CRVMpCQkrPSBrcHJvYmVzLm8KLW9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpCSs9IG1jb3VudC5vCitvYmotJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxtY291bnQ2NC5vLG1jb3VudC5vKQogb2JqLSQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKQkrPSBmdHJhY2Uubwogb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgKz0gZnRyYWNlLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCmluZGV4IGJlOGJjZWEuLjRjNTEyNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKQEAgLTYzLDggKzYzLDYgQEAKIH0gZGVidWdfc3ByaW50Zl9lbnRyeV90OwogCiAKLWV4dGVybiB2b2lkIHRvZF90b190aW1ldmFsKHVpbnQ2NF90IHRvZHZhbCwgc3RydWN0IHRpbWVzcGVjICp4dGltZSk7Ci0KIC8qIGludGVybmFsIGZ1bmN0aW9uIHByb3RvdHllcyAqLwogCiBzdGF0aWMgaW50IGRlYnVnX2luaXQodm9pZCk7CkBAIC0xNDUwLDE3ICsxNDQ4LDEzIEBACiAJCQkgaW50IGFyZWEsIGRlYnVnX2VudHJ5X3QgKiBlbnRyeSwgY2hhciAqb3V0X2J1ZikKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdGltZV9zcGVjOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lOwogCWNoYXIgKmV4Y2VwdF9zdHI7CiAJdW5zaWduZWQgbG9uZyBjYWxsZXI7CiAJaW50IHJjID0gMDsKIAl1bnNpZ25lZCBpbnQgbGV2ZWw7CiAKIAlsZXZlbCA9IGVudHJ5LT5pZC5maWVsZHMubGV2ZWw7Ci0JdGltZSA9IGVudHJ5LT5pZC5zdGNrOwotCS8qIGFkanVzdCB0b2RjbG9jayB0byAxOTcwICovCi0JdGltZSAtPSAweDgxMjZkNjBlNDYwMDAwMDBMTCAtICgweDNjMjY3MDBMTCAqIDEwMDAwMDAgKiA0MDk2KTsKLQl0b2RfdG9fdGltZXZhbCh0aW1lLCAmdGltZV9zcGVjKTsKKwlzdGNrX3RvX3RpbWVzcGVjKGVudHJ5LT5pZC5zdGNrLCAmdGltZV9zcGVjKTsKIAogCWlmIChlbnRyeS0+aWQuZmllbGRzLmV4Y2VwdGlvbikKIAkJZXhjZXB0X3N0ciA9ICIqIjsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYyBiL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYwppbmRleCBjYWUxNGM0Li5iZjhiNGFlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCkBAIC02LDYgKzYsOSBAQAogICoJCSBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJzZXR1cCIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0xNiw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vaXBsLmg+CiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KQEAgLTM1LDggKzM5LDYgQEAKIAogY2hhciBrZXJuZWxfbnNzX25hbWVbTlNTX05BTUVfU0laRSArIDFdOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBtYWNoaW5lX2ZsYWdzOwotCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb21tYW5kX2xpbmUodm9pZCk7CiAKIC8qCkBAIC04MSw2ICs4Myw4IEBACiAJIglicgkxNFxuIgogCSIJLnNpemUJc2F2ZXN5c19pcGxfbnNzLCAuLXNhdmVzeXNfaXBsX25zc1xuIik7CiAKK3N0YXRpYyBfX2luaXRkYXRhIGNoYXIgdXBwZXJfY29tbWFuZF9saW5lW0NPTU1BTkRfTElORV9TSVpFXTsKKwogc3RhdGljIG5vaW5saW5lIF9faW5pdCB2b2lkIGNyZWF0ZV9rZXJuZWxfbnNzKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGksIHN0ZXh0X3BmbiwgZXNoYXJlZF9wZm4sIGVuZF9wZm4sIG1pbl9zaXplOwpAQCAtOTAsNyArOTQsNiBAQAogCWludCByZXNwb25zZTsKIAlzaXplX3QgbGVuOwogCWNoYXIgKnNhdmVzeXNfcHRyOwotCWNoYXIgdXBwZXJfY29tbWFuZF9saW5lW0NPTU1BTkRfTElORV9TSVpFXTsKIAljaGFyIGRlZnN5c19jbWRbREVGU1lTX0NNRF9TSVpFXTsKIAljaGFyIHNhdmVzeXNfY21kW1NBVkVTWVNfQ01EX1NJWkVdOwogCkBAIC0xNDEsNiArMTQ0LDggQEAKIAlfX2NwY21kKGRlZnN5c19jbWQsIE5VTEwsIDAsICZyZXNwb25zZSk7CiAKIAlpZiAocmVzcG9uc2UgIT0gMCkgeworCQlwcl9lcnIoIkRlZmluaW5nIHRoZSBMaW51eCBrZXJuZWwgTlNTIGZhaWxlZCB3aXRoIHJjPSVkXG4iLAorCQkJcmVzcG9uc2UpOwogCQlrZXJuZWxfbnNzX25hbWVbMF0gPSAnXDAnOwogCQlyZXR1cm47CiAJfQpAQCAtMTUzLDggKzE1OCwxMSBAQAogCSAqCSAgICAgICBtYXggU0FWRVNZU19DTURfU0laRQogCSAqIE9uIGVycm9yOiByZXNwb25zZSBjb250YWlucyB0aGUgbnVtZXJpYyBwb3J0aW9uIG9mIGNwIGVycm9yIG1lc3NhZ2UuCiAJICoJICAgICBmb3IgU0FWRVNZUyBpdCB3aWxsIGJlID49IDI2MworCSAqCSAgICAgZm9yIG1pc3NpbmcgcHJpdmlsZWdlIGNsYXNzLCBpdCB3aWxsIGJlIDEKIAkgKi8KLQlpZiAocmVzcG9uc2UgPiBTQVZFU1lTX0NNRF9TSVpFKSB7CisJaWYgKHJlc3BvbnNlID4gU0FWRVNZU19DTURfU0laRSB8fCByZXNwb25zZSA9PSAxKSB7CisJCXByX2VycigiU2F2aW5nIHRoZSBMaW51eCBrZXJuZWwgTlNTIGZhaWxlZCB3aXRoIHJjPSVkXG4iLAorCQkJcmVzcG9uc2UpOwogCQlrZXJuZWxfbnNzX25hbWVbMF0gPSAnXDAnOwogCQlyZXR1cm47CiAJfQpAQCAtMjA1LDEyICsyMTMsOSBAQAogCiAJLyogUnVubmluZyB1bmRlciBLVk0/IElmIG5vdCB3ZSBhc3N1bWUgei9WTSAqLwogCWlmICghbWVtY21wKHZtbXMudm1bMF0uY3BpLCAiXHhkMlx4ZTVceGQ0IiwgMykpCi0JCW1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX0tWTTsKKwkJUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX0tWTTsKIAllbHNlCi0JCW1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX1ZNOwotCi0JLyogU3RvcmUgbWFjaGluZSBmbGFncyBmb3Igc2V0dGluZyB1cCBsb3djb3JlIGVhcmx5ICovCi0JUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgPSBtYWNoaW5lX2ZsYWdzOworCQlTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfVk07CiB9CiAKIHN0YXRpYyBfX2luaXQgdm9pZCBlYXJseV9wZ21fY2hlY2tfaGFuZGxlcih2b2lkKQpAQCAtMjQ1LDcgKzI1MCw3IEBACiAJZmFjaWxpdGllcyA9IHN0ZmwoKTsKIAlpZiAoIShmYWNpbGl0aWVzICYgKDFVTCA8PCAyMykpIHx8ICEoZmFjaWxpdGllcyAmICgxVUwgPDwgMjkpKSkKIAkJcmV0dXJuOwotCW1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX0hQQUdFOworCVMzOTBfbG93Y29yZS5tYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19IUEFHRTsKIAlfX2N0bF9zZXRfYml0KDAsIDIzKTsKICNlbmRpZgogfQpAQCAtMjYzLDcgKzI2OCw3IEBACiAJCUVYX1RBQkxFKDBiLDFiKQogCQk6ICI9ZCIgKHJjKSA6ICIwIiAoLUVPUE5PVFNVUFApLCAiYSIgKDApIDogIm1lbW9yeSIsICJjYyIsICIwIik7CiAJaWYgKCFyYykKLQkJbWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfTVZQRzsKKwkJUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX01WUEc7CiAjZW5kaWYKIH0KIApAQCAtMjc5LDcgKzI4NCw3IEBACiAJCUVYX1RBQkxFKDBiLDFiKQogCQk6ICI9ZCIgKHJjKSwgIj1kIiAodG1wKTogIjAiICgtRU9QTk9UU1VQUCkgOiAiY2MiKTsKIAlpZiAoIXJjKQotCQltYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19JRUVFOworCQlTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfSUVFRTsKICNlbmRpZgogfQogCkBAIC0yOTgsNyArMzAzLDcgQEAKIAkJRVhfVEFCTEUoMGIsMWIpCiAJCTogIj1kIiAocmMpIDogIjAiICgtRU9QTk9UU1VQUCkgOiAiY2MiLCAiMCIsICIxIiwgIjIiKTsKIAlpZiAoIXJjKQotCQltYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19DU1A7CisJCVMzOTBfbG93Y29yZS5tYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19DU1A7CiAjZW5kaWYKIH0KIApAQCAtMzE1LDcgKzMyMCw3IEBACiAJCUVYX1RBQkxFKDBiLDFiKQogCQk6ICI9ZCIgKHJjKSA6ICIwIiAoLUVPUE5PVFNVUFApLCAiZCIgKGNwdV9hZGRyZXNzKSA6ICJjYyIpOwogCWlmICghcmMpCi0JCW1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX0RJQUc5QzsKKwkJUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX0RJQUc5QzsKIH0KIAogc3RhdGljIF9faW5pdCB2b2lkIGRldGVjdF9kaWFnNDQodm9pZCkKQEAgLTMzMCw3ICszMzUsNyBAQAogCQlFWF9UQUJMRSgwYiwxYikKIAkJOiAiPWQiIChyYykgOiAiMCIgKC1FT1BOT1RTVVBQKSA6ICJjYyIpOwogCWlmICghcmMpCi0JCW1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX0RJQUc0NDsKKwkJUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX0RJQUc0NDsKICNlbmRpZgogfQogCkBAIC0zNDEsMTEgKzM0NiwxMSBAQAogCiAJZmFjaWxpdGllcyA9IHN0ZmwoKTsKIAlpZiAoZmFjaWxpdGllcyAmICgxIDw8IDI4KSkKLQkJbWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfSURURTsKKwkJUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX0lEVEU7CiAJaWYgKGZhY2lsaXRpZXMgJiAoMSA8PCAyMykpCi0JCW1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX1BGTUY7CisJCVMzOTBfbG93Y29yZS5tYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19QRk1GOwogCWlmIChmYWNpbGl0aWVzICYgKDEgPDwgNCkpCi0JCW1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX01WQ09TOworCQlTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfTVZDT1M7CiAjZW5kaWYKIH0KIApAQCAtMzY3LDIxICszNzIsMzUgQEAKIH0KIAogLyogU2V0IHVwIGJvb3QgY29tbWFuZCBsaW5lICovCitzdGF0aWMgdm9pZCBfX2luaXQgYXBwZW5kX3RvX2NtZGxpbmUoc2l6ZV90ICgqaXBsX2RhdGEpKGNoYXIgKiwgc2l6ZV90KSkKK3sKKwljaGFyICpwYXJtLCAqZGVsaW07CisJc2l6ZV90IHJjLCBsZW47CisKKwlsZW4gPSBzdHJsZW4oYm9vdF9jb21tYW5kX2xpbmUpOworCisJZGVsaW0gPSBib290X2NvbW1hbmRfbGluZSArIGxlbjsJLyogJ1wwJyBjaGFyYWN0ZXIgcG9zaXRpb24gKi8KKwlwYXJtICA9IGJvb3RfY29tbWFuZF9saW5lICsgbGVuICsgMTsJLyogYXBwZW5kIHJpZ2h0IGFmdGVyICdcMCcgKi8KKworCXJjID0gaXBsX2RhdGEocGFybSwgQ09NTUFORF9MSU5FX1NJWkUgLSBsZW4gLSAxKTsKKwlpZiAocmMpIHsKKwkJaWYgKCpwYXJtID09ICc9JykKKwkJCW1lbW1vdmUoYm9vdF9jb21tYW5kX2xpbmUsIHBhcm0gKyAxLCByYyk7CisJCWVsc2UKKwkJCSpkZWxpbSA9ICcgJzsJCS8qIHJlcGxhY2UgJ1wwJyB3aXRoIHNwYWNlICovCisJfQorfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb21tYW5kX2xpbmUodm9pZCkKIHsKLQljaGFyICpwYXJtID0gTlVMTDsKLQogCS8qIGNvcHkgYXJjaCBjb21tYW5kIGxpbmUgKi8KIAlzdHJsY3B5KGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkUsIEFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpOwogCiAJLyogYXBwZW5kIElQTCBQQVJNIGRhdGEgdG8gdGhlIGJvb3QgY29tbWFuZCBsaW5lICovCi0JaWYgKE1BQ0hJTkVfSVNfVk0pIHsKLQkJcGFybSA9IGJvb3RfY29tbWFuZF9saW5lICsgc3RybGVuKGJvb3RfY29tbWFuZF9saW5lKTsKLQkJKnBhcm0rKyA9ICcgJzsKLQkJZ2V0X2lwbF92bXBhcm0ocGFybSk7Ci0JCWlmIChwYXJtWzBdID09ICc9JykKLQkJCW1lbW1vdmUoYm9vdF9jb21tYW5kX2xpbmUsIHBhcm0gKyAxLCBzdHJsZW4ocGFybSkpOwotCX0KKwlpZiAoTUFDSElORV9JU19WTSkKKwkJYXBwZW5kX3RvX2NtZGxpbmUoYXBwZW5kX2lwbF92bXBhcm0pOworCisJYXBwZW5kX3RvX2NtZGxpbmUoYXBwZW5kX2lwbF9zY3BkYXRhKTsKIH0KIAogCkBAIC00MTMsNyArNDMyLDYgQEAKIAlzZXR1cF9ocGFnZSgpOwogCXNjbHBfZmFjaWxpdGllc19kZXRlY3QoKTsKIAlkZXRlY3RfbWVtb3J5X2xheW91dChtZW1vcnlfY2h1bmspOwotCVMzOTBfbG93Y29yZS5tYWNoaW5lX2ZsYWdzID0gbWFjaGluZV9mbGFnczsKICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKIAlTMzkwX2xvd2NvcmUuZnRyYWNlX2Z1bmMgPSAodW5zaWduZWQgbG9uZylmdHJhY2VfY2FsbGVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKaW5kZXggYzRjODBhMi4uZjQzZDJlZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwpAQCAtNTQsNyArNTQsNyBAQAogX1RJRl9XT1JLX0lOVCA9IChfVElGX1NJR1BFTkRJTkcgfCBfVElGX05PVElGWV9SRVNVTUUgfCBfVElGX05FRURfUkVTQ0hFRCB8IFwKIAkJIF9USUZfTUNDS19QRU5ESU5HKQogX1RJRl9TWVNDQUxMID0gKF9USUZfU1lTQ0FMTF9UUkFDRT4+OCB8IF9USUZfU1lTQ0FMTF9BVURJVD4+OCB8IFwKLQkJX1RJRl9TRUNDT01QPj44IHwgX1RJRl9TWVNDQUxMX0ZUUkFDRT4+OCkKKwkJX1RJRl9TRUNDT01QPj44IHwgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQ+PjgpCiAKIFNUQUNLX1NISUZUID0gUEFHRV9TSElGVCArIFRIUkVBRF9PUkRFUgogU1RBQ0tfU0laRSAgPSAxIDw8IFNUQUNLX1NISUZUCkBAIC0yNzgsNyArMjc4LDggQEAKIAlibnoJQkFTRUQoc3lzY193b3JrKSAgIyB0aGVyZSBpcyB3b3JrIHRvIGRvIChzaWduYWxzIGV0Yy4pCiBzeXNjX3Jlc3RvcmU6CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JbGEJJXIxLEJBU0VEKHN5c2NfcmVzdG9yZV90cmFjZV9wc3cpCisJbGEJJXIxLEJBU0VEKHN5c2NfcmVzdG9yZV90cmFjZV9wc3dfYWRkcikKKwlsCSVyMSwwKCVyMSkKIAlscHN3CTAoJXIxKQogc3lzY19yZXN0b3JlX3RyYWNlOgogCVRSQUNFX0lSUVNfQ0hFQ0sKQEAgLTI4OSwxMCArMjkwLDE1IEBACiBzeXNjX2RvbmU6CiAKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKK3N5c2NfcmVzdG9yZV90cmFjZV9wc3dfYWRkcjoKKwkubG9uZyBzeXNjX3Jlc3RvcmVfdHJhY2VfcHN3CisKKwkuc2VjdGlvbiAuZGF0YSwiYXciLEBwcm9nYml0cwogCS5hbGlnbgk4CiAJLmdsb2JsCXN5c2NfcmVzdG9yZV90cmFjZV9wc3cKIHN5c2NfcmVzdG9yZV90cmFjZV9wc3c6CiAJLmxvbmcJMCwgc3lzY19yZXN0b3JlX3RyYWNlICsgMHg4MDAwMDAwMAorCS5wcmV2aW91cwogI2VuZGlmCiAKICMKQEAgLTYwNiw3ICs2MTIsOCBAQAogCWJueglCQVNFRChpb193b3JrKQkJIyB0aGVyZSBpcyB3b3JrIHRvIGRvIChzaWduYWxzIGV0Yy4pCiBpb19yZXN0b3JlOgogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCWxhCSVyMSxCQVNFRChpb19yZXN0b3JlX3RyYWNlX3BzdykKKwlsYQklcjEsQkFTRUQoaW9fcmVzdG9yZV90cmFjZV9wc3dfYWRkcikKKwlsCSVyMSwwKCVyMSkKIAlscHN3CTAoJXIxKQogaW9fcmVzdG9yZV90cmFjZToKIAlUUkFDRV9JUlFTX0NIRUNLCkBAIC02MTcsMTAgKzYyNCwxNSBAQAogaW9fZG9uZToKIAogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworaW9fcmVzdG9yZV90cmFjZV9wc3dfYWRkcjoKKwkubG9uZyBpb19yZXN0b3JlX3RyYWNlX3BzdworCisJLnNlY3Rpb24gLmRhdGEsImF3IixAcHJvZ2JpdHMKIAkuYWxpZ24JOAogCS5nbG9ibAlpb19yZXN0b3JlX3RyYWNlX3BzdwogaW9fcmVzdG9yZV90cmFjZV9wc3c6CiAJLmxvbmcJMCwgaW9fcmVzdG9yZV90cmFjZSArIDB4ODAwMDAwMDAKKwkucHJldmlvdXMKICNlbmRpZgogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCmluZGV4IGY2NjE4ZTkuLmE2ZjdiMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCkBAIC01Nyw3ICs1Nyw3IEBACiBfVElGX1dPUktfSU5UID0gKF9USUZfU0lHUEVORElORyB8IF9USUZfTk9USUZZX1JFU1VNRSB8IF9USUZfTkVFRF9SRVNDSEVEIHwgXAogCQkgX1RJRl9NQ0NLX1BFTkRJTkcpCiBfVElGX1NZU0NBTEwgPSAoX1RJRl9TWVNDQUxMX1RSQUNFPj44IHwgX1RJRl9TWVNDQUxMX0FVRElUPj44IHwgXAotCQlfVElGX1NFQ0NPTVA+PjggfCBfVElGX1NZU0NBTExfRlRSQUNFPj44KQorCQlfVElGX1NFQ0NPTVA+PjggfCBfVElGX1NZU0NBTExfVFJBQ0VQT0lOVD4+OCkKIAogI2RlZmluZSBCQVNFRChuYW1lKSBuYW1lLXN5c3RlbV9jYWxsKCVyMTMpCiAKQEAgLTI4NCwxMCArMjg0LDEyIEBACiBzeXNjX2RvbmU6CiAKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwkuc2VjdGlvbiAuZGF0YSwiYXciLEBwcm9nYml0cwogCS5hbGlnbgk4CiAJLmdsb2JsIHN5c2NfcmVzdG9yZV90cmFjZV9wc3cKIHN5c2NfcmVzdG9yZV90cmFjZV9wc3c6CiAJLnF1YWQJMCwgc3lzY19yZXN0b3JlX3RyYWNlCisJLnByZXZpb3VzCiAjZW5kaWYKIAogIwpAQCAtNTk1LDEwICs1OTcsMTIgQEAKIGlvX2RvbmU6CiAKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwkuc2VjdGlvbiAuZGF0YSwiYXciLEBwcm9nYml0cwogCS5hbGlnbgk4CiAJLmdsb2JsIGlvX3Jlc3RvcmVfdHJhY2VfcHN3CiBpb19yZXN0b3JlX3RyYWNlX3BzdzoKIAkucXVhZAkwLCBpb19yZXN0b3JlX3RyYWNlCisJLnByZXZpb3VzCiAjZW5kaWYKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKaW5kZXggM2UyOThlNi4uNTdiZGNiMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCkBAIC0yMjAsNiArMjIwLDI5IEBACiAJcmV0dXJuIHN5c2NhbGxzX21ldGFkYXRhW25yXTsKIH0KIAoraW50IHN5c2NhbGxfbmFtZV90b19ucihjaGFyICpuYW1lKQoreworCWludCBpOworCisJaWYgKCFzeXNjYWxsc19tZXRhZGF0YSkKKwkJcmV0dXJuIC0xOworCWZvciAoaSA9IDA7IGkgPCBOUl9zeXNjYWxsczsgaSsrKQorCQlpZiAoc3lzY2FsbHNfbWV0YWRhdGFbaV0pCisJCQlpZiAoIXN0cmNtcChzeXNjYWxsc19tZXRhZGF0YVtpXS0+bmFtZSwgbmFtZSkpCisJCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0xOworfQorCit2b2lkIHNldF9zeXNjYWxsX2VudGVyX2lkKGludCBudW0sIGludCBpZCkKK3sKKwlzeXNjYWxsc19tZXRhZGF0YVtudW1dLT5lbnRlcl9pZCA9IGlkOworfQorCit2b2lkIHNldF9zeXNjYWxsX2V4aXRfaWQoaW50IG51bSwgaW50IGlkKQoreworCXN5c2NhbGxzX21ldGFkYXRhW251bV0tPmV4aXRfaWQgPSBpZDsKK30KKwogc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpmaW5kX3N5c2NhbGxfbWV0YSh1bnNpZ25lZCBsb25nIHN5c2NhbGwpCiB7CiAJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN0YXJ0OwpAQCAtMjM3LDI0ICsyNjAsMTkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCBhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCiB7CiAJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKm1ldGE7CiAJaW50IGk7Ci0Jc3RhdGljIGF0b21pY190IHJlZnM7Ci0KLQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnJlZnMpICE9IDEpCi0JCWdvdG8gb3V0OwogCXN5c2NhbGxzX21ldGFkYXRhID0ga3phbGxvYyhzaXplb2YoKnN5c2NhbGxzX21ldGFkYXRhKSAqIE5SX3N5c2NhbGxzLAogCQkJCSAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXN5c2NhbGxzX21ldGFkYXRhKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJZm9yIChpID0gMDsgaSA8IE5SX3N5c2NhbGxzOyBpKyspIHsKIAkJbWV0YSA9IGZpbmRfc3lzY2FsbF9tZXRhKCh1bnNpZ25lZCBsb25nKXN5c19jYWxsX3RhYmxlW2ldKTsKIAkJc3lzY2FsbHNfbWV0YWRhdGFbaV0gPSBtZXRhOwogCX0KLQlyZXR1cm47Ci1vdXQ6Ci0JYXRvbWljX2RlYygmcmVmcyk7CisJcmV0dXJuIDA7CiB9CithcmNoX2luaXRjYWxsKGFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2hlYWQuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TCmluZGV4IGVjNjg4MjMuLmM1MmI0ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAKICNpZmRlZiBDT05GSUdfNjRCSVQKICNkZWZpbmUgQVJDSF9PRkZTRVQJNApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKaW5kZXggMmNlZDg0Ni4uNjAyYjUwOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCkBAIC0yNCw2ICsyNCw3IEBACiAjIFNldHVwIHN0YWNrCiAjCiAJbAklcjE1LC5MaW5pdHR1LS5MUEcxKCVyMTMpCisJc3QJJXIxNSxfX0xDX1RIUkVBRF9JTkZPCSMgY2FjaGUgdGhyZWFkIGluZm8gaW4gbG93Y29yZQogCW12YwlfX0xDX0NVUlJFTlQoNCksX19USV90YXNrKCVyMTUpCiAJYWhpCSVyMTUsMTw8KFBBR0VfU0hJRlQrVEhSRUFEX09SREVSKSAjIGluaXRfdGFza191bmlvbitUSFJFQURfU0laRQogCXN0CSVyMTUsX19MQ19LRVJORUxfU1RBQ0sJIyBzZXQgZW5kIG9mIGtlcm5lbCBzdGFjawpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKaW5kZXggNjU2NjdiMi4uNmEyNTA4MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCkBAIC02Miw5ICs2Miw5IEBACiAJY2xyCSVyMTEsJXIxMgogCWplCTVmCQkJIyBubyBtb3JlIHNwYWNlIGluIHByZWZpeCBhcnJheQogNDoKLQlhaGkJJXI4LDEJCQkJIyBuZXh0IGNwdSAocjggKz0gMSkKLQljbAklcjgsLkxsYXN0X2NwdS0uTFBHMSglcjEzKQkjIGlzIGxhc3QgcG9zc2libGUgY3B1ID8KLQlqbAkxYgkJCQkjIGp1bXAgaWYgbm90IGxhc3QgY3B1CisJYWhpCSVyOCwxCQkJIyBuZXh0IGNwdSAocjggKz0gMSkKKwljaGkJJXI4LE1BWF9DUFVfQUREUkVTUwkjIGlzIGxhc3QgcG9zc2libGUgY3B1ID8KKwlqbGUJMWIJCQkjIGp1bXAgaWYgbm90IGxhc3QgY3B1CiA1OgogCWxoaQklcjEsMgkJCSMgbW9kZSAyID0gZXNhbWUgKGR1bXApCiAJagk2ZgpAQCAtOTIsNiArOTIsNyBAQAogIyBTZXR1cCBzdGFjawogIwogCWxhcmwJJXIxNSxpbml0X3RocmVhZF91bmlvbgorCXN0ZwklcjE1LF9fTENfVEhSRUFEX0lORk8JIyBjYWNoZSB0aHJlYWQgaW5mbyBpbiBsb3djb3JlCiAJbGcJJXIxNCxfX1RJX3Rhc2soJXIxNSkJIyBjYWNoZSBjdXJyZW50IGluIGxvd2NvcmUKIAlzdGcJJXIxNCxfX0xDX0NVUlJFTlQKIAlhZ2hpCSVyMTUsMTw8KFBBR0VfU0hJRlQrVEhSRUFEX09SREVSKSAjIGluaXRfdGFza191bmlvbiArIFRIUkVBRF9TSVpFCkBAIC0xMjksOCArMTMwLDYgQEAKICNpZmRlZiBDT05GSUdfWkZDUERVTVAKIC5MY3VycmVudF9jcHU6CiAJLmxvbmcgMHgwCi0uTGxhc3RfY3B1OgotCS5sb25nIDB4MDAwMGZmZmYKIC5McHJlZl9hcnJfcHRyOgogCS5sb25nIHpmY3BkdW1wX3ByZWZpeF9hcnJheQogI2VuZGlmIC8qIENPTkZJR19aRkNQRFVNUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggMzcxYTJkOC4uZWU1N2E0MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCkBAIC0yNzIsMTcgKzI3MiwxOCBAQAogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBzeXNfaXBsX3R5cGVfYXR0ciA9IF9fQVRUUl9STyhpcGxfdHlwZSk7CiAKIC8qIFZNIElQTCBQQVJNIHJvdXRpbmVzICovCi1zdGF0aWMgdm9pZCByZWlwbF9nZXRfYXNjaWlfdm1wYXJtKGNoYXIgKmRlc3QsCitzaXplX3QgcmVpcGxfZ2V0X2FzY2lpX3ZtcGFybShjaGFyICpkZXN0LCBzaXplX3Qgc2l6ZSwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBiKQogewogCWludCBpOwotCWludCBsZW4gPSAwOworCXNpemVfdCBsZW47CiAJY2hhciBoYXNfbG93ZXJjYXNlID0gMDsKIAorCWxlbiA9IDA7CiAJaWYgKChpcGItPmlwbF9pbmZvLmNjdy52bV9mbGFncyAmIERJQUczMDhfVk1fRkxBR1NfVlBfVkFMSUQpICYmCiAJICAgIChpcGItPmlwbF9pbmZvLmNjdy52bV9wYXJtX2xlbiA+IDApKSB7CiAKLQkJbGVuID0gaXBiLT5pcGxfaW5mby5jY3cudm1fcGFybV9sZW47CisJCWxlbiA9IG1pbl90KHNpemVfdCwgc2l6ZSAtIDEsIGlwYi0+aXBsX2luZm8uY2N3LnZtX3Bhcm1fbGVuKTsKIAkJbWVtY3B5KGRlc3QsIGlwYi0+aXBsX2luZm8uY2N3LnZtX3Bhcm0sIGxlbik7CiAJCS8qIElmIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgaXMgbG93ZXJjYXNlLCB3ZSBhc3N1bWUgbWl4ZWQKIAkJICogY2FzZTsgb3RoZXJ3aXNlIHdlIGNvbnZlcnQgZXZlcnl0aGluZyB0byBsb3dlcmNhc2UuCkBAIC0yOTksMTQgKzMwMCwyMCBAQAogCQlFQkNBU0MoZGVzdCwgbGVuKTsKIAl9CiAJZGVzdFtsZW5dID0gMDsKKworCXJldHVybiBsZW47CiB9CiAKLXZvaWQgZ2V0X2lwbF92bXBhcm0oY2hhciAqZGVzdCkKK3NpemVfdCBhcHBlbmRfaXBsX3ZtcGFybShjaGFyICpkZXN0LCBzaXplX3Qgc2l6ZSkKIHsKKwlzaXplX3QgcmM7CisKKwlyYyA9IDA7CiAJaWYgKGRpYWczMDhfc2V0X3dvcmtzICYmIChpcGxfYmxvY2suaGRyLnBidCA9PSBESUFHMzA4X0lQTF9UWVBFX0NDVykpCi0JCXJlaXBsX2dldF9hc2NpaV92bXBhcm0oZGVzdCwgJmlwbF9ibG9jayk7CisJCXJjID0gcmVpcGxfZ2V0X2FzY2lpX3ZtcGFybShkZXN0LCBzaXplLCAmaXBsX2Jsb2NrKTsKIAllbHNlCiAJCWRlc3RbMF0gPSAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIHNzaXplX3QgaXBsX3ZtX3Bhcm1fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTMxNCwxMCArMzIxLDY1IEBACiB7CiAJY2hhciBwYXJtW0RJQUczMDhfVk1QQVJNX1NJWkUgKyAxXSA9IHt9OwogCi0JZ2V0X2lwbF92bXBhcm0ocGFybSk7CisJYXBwZW5kX2lwbF92bXBhcm0ocGFybSwgc2l6ZW9mKHBhcm0pKTsKIAlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXNcbiIsIHBhcm0pOwogfQogCitzdGF0aWMgc2l6ZV90IHNjcGRhdGFfbGVuZ3RoKGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXdoaWxlIChjb3VudCkgeworCQlpZiAoYnVmW2NvdW50IC0gMV0gIT0gJ1wwJyAmJiBidWZbY291bnQgLSAxXSAhPSAnICcpCisJCQlicmVhazsKKwkJY291bnQtLTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzaXplX3QgcmVpcGxfYXBwZW5kX2FzY2lpX3NjcGRhdGEoY2hhciAqZGVzdCwgc2l6ZV90IHNpemUsCisJCQkJICBjb25zdCBzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBiKQoreworCXNpemVfdCBjb3VudDsKKwlzaXplX3QgaTsKKwlpbnQgaGFzX2xvd2VyY2FzZTsKKworCWNvdW50ID0gbWluKHNpemUgLSAxLCBzY3BkYXRhX2xlbmd0aChpcGItPmlwbF9pbmZvLmZjcC5zY3BfZGF0YSwKKwkJCQkJICAgICBpcGItPmlwbF9pbmZvLmZjcC5zY3BfZGF0YV9sZW4pKTsKKwlpZiAoIWNvdW50KQorCQlnb3RvIG91dDsKKworCWhhc19sb3dlcmNhc2UgPSAwOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmICghaXNhc2NpaShpcGItPmlwbF9pbmZvLmZjcC5zY3BfZGF0YVtpXSkpIHsKKwkJCWNvdW50ID0gMDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmICghaGFzX2xvd2VyY2FzZSAmJiBpc2xvd2VyKGlwYi0+aXBsX2luZm8uZmNwLnNjcF9kYXRhW2ldKSkKKwkJCWhhc19sb3dlcmNhc2UgPSAxOworCX0KKworCWlmIChoYXNfbG93ZXJjYXNlKQorCQltZW1jcHkoZGVzdCwgaXBiLT5pcGxfaW5mby5mY3Auc2NwX2RhdGEsIGNvdW50KTsKKwllbHNlCisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQkJZGVzdFtpXSA9IHRvbG93ZXIoaXBiLT5pcGxfaW5mby5mY3Auc2NwX2RhdGFbaV0pOworb3V0OgorCWRlc3RbY291bnRdID0gJ1wwJzsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3NpemVfdCBhcHBlbmRfaXBsX3NjcGRhdGEoY2hhciAqZGVzdCwgc2l6ZV90IGxlbikKK3sKKwlzaXplX3QgcmM7CisKKwlyYyA9IDA7CisJaWYgKGlwbF9ibG9jay5oZHIucGJ0ID09IERJQUczMDhfSVBMX1RZUEVfRkNQKQorCQlyYyA9IHJlaXBsX2FwcGVuZF9hc2NpaV9zY3BkYXRhKGRlc3QsIGxlbiwgJmlwbF9ibG9jayk7CisJZWxzZQorCQlkZXN0WzBdID0gMDsKKwlyZXR1cm4gcmM7Cit9CisKKwogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBzeXNfaXBsX3ZtX3Bhcm1fYXR0ciA9CiAJX19BVFRSKHBhcm0sIFNfSVJVR08sIGlwbF92bV9wYXJtX3Nob3csIE5VTEwpOwogCkBAIC01NTMsNyArNjE1LDcgQEAKIHsKIAljaGFyIHZtcGFybVtESUFHMzA4X1ZNUEFSTV9TSVpFICsgMV0gPSB7fTsKIAotCXJlaXBsX2dldF9hc2NpaV92bXBhcm0odm1wYXJtLCBpcGIpOworCXJlaXBsX2dldF9hc2NpaV92bXBhcm0odm1wYXJtLCBzaXplb2Yodm1wYXJtKSwgaXBiKTsKIAlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXNcbiIsIHZtcGFybSk7CiB9CiAKQEAgLTYyNiw2ICs2ODgsNTkgQEAKIAogLyogRkNQIHJlaXBsIGRldmljZSBhdHRyaWJ1dGVzICovCiAKK3N0YXRpYyBzc2l6ZV90IHJlaXBsX2ZjcF9zY3BkYXRhX3JlYWQoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJc2l6ZV90IHNpemUgPSByZWlwbF9ibG9ja19mY3AtPmlwbF9pbmZvLmZjcC5zY3BfZGF0YV9sZW47CisJdm9pZCAqc2NwX2RhdGEgPSByZWlwbF9ibG9ja19mY3AtPmlwbF9pbmZvLmZjcC5zY3BfZGF0YTsKKworCXJldHVybiBtZW1vcnlfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCAmb2ZmLCBzY3BfZGF0YSwgc2l6ZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlaXBsX2ZjcF9zY3BkYXRhX3dyaXRlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJc2l6ZV90IHBhZGRpbmc7CisJc2l6ZV90IHNjcGRhdGFfbGVuOworCisJaWYgKG9mZiA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9mZiA+PSBESUFHMzA4X1NDUERBVEFfU0laRSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoY291bnQgPiBESUFHMzA4X1NDUERBVEFfU0laRSAtIG9mZikKKwkJY291bnQgPSBESUFHMzA4X1NDUERBVEFfU0laRSAtIG9mZjsKKworCW1lbWNweShyZWlwbF9ibG9ja19mY3AtPmlwbF9pbmZvLmZjcC5zY3BfZGF0YSwgYnVmICsgb2ZmLCBjb3VudCk7CisJc2NwZGF0YV9sZW4gPSBvZmYgKyBjb3VudDsKKworCWlmIChzY3BkYXRhX2xlbiAlIDgpIHsKKwkJcGFkZGluZyA9IDggLSAoc2NwZGF0YV9sZW4gJSA4KTsKKwkJbWVtc2V0KHJlaXBsX2Jsb2NrX2ZjcC0+aXBsX2luZm8uZmNwLnNjcF9kYXRhICsgc2NwZGF0YV9sZW4sCisJCSAgICAgICAwLCBwYWRkaW5nKTsKKwkJc2NwZGF0YV9sZW4gKz0gcGFkZGluZzsKKwl9CisKKwlyZWlwbF9ibG9ja19mY3AtPmlwbF9pbmZvLmZjcC5zY3BfZGF0YV9sZW4gPSBzY3BkYXRhX2xlbjsKKwlyZWlwbF9ibG9ja19mY3AtPmhkci5sZW4gPSBJUExfUEFSTV9CTEtfRkNQX0xFTiArIHNjcGRhdGFfbGVuOworCXJlaXBsX2Jsb2NrX2ZjcC0+aGRyLmJsazBfbGVuID0gSVBMX1BBUk1fQkxLMF9GQ1BfTEVOICsgc2NwZGF0YV9sZW47CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBzeXNfcmVpcGxfZmNwX3NjcF9kYXRhX2F0dHIgPSB7CisJLmF0dHIgPSB7CisJCS5uYW1lID0gInNjcF9kYXRhIiwKKwkJLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiwKKwl9LAorCS5zaXplID0gUEFHRV9TSVpFLAorCS5yZWFkID0gcmVpcGxfZmNwX3NjcGRhdGFfcmVhZCwKKwkud3JpdGUgPSByZWlwbF9mY3Bfc2NwZGF0YV93cml0ZSwKK307CisKIERFRklORV9JUExfQVRUUl9SVyhyZWlwbF9mY3AsIHd3cG4sICIweCUwMTZsbHhcbiIsICIlMDE2bGx4XG4iLAogCQkgICByZWlwbF9ibG9ja19mY3AtPmlwbF9pbmZvLmZjcC53d3BuKTsKIERFRklORV9JUExfQVRUUl9SVyhyZWlwbF9mY3AsIGx1biwgIjB4JTAxNmxseFxuIiwgIiUwMTZsbHhcbiIsCkBAIC02NDcsNyArNzYyLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHJlaXBsX2ZjcF9hdHRyX2dyb3VwID0gewotCS5uYW1lICA9IElQTF9GQ1BfU1RSLAogCS5hdHRycyA9IHJlaXBsX2ZjcF9hdHRycywKIH07CiAKQEAgLTg5NSw2ICsxMDA5LDcgQEAKIAlfX0FUVFIocmVpcGxfdHlwZSwgMDY0NCwgcmVpcGxfdHlwZV9zaG93LCByZWlwbF90eXBlX3N0b3JlKTsKIAogc3RhdGljIHN0cnVjdCBrc2V0ICpyZWlwbF9rc2V0Oworc3RhdGljIHN0cnVjdCBrc2V0ICpyZWlwbF9mY3Bfa3NldDsKIAogc3RhdGljIHZvaWQgZ2V0X2lwbF9zdHJpbmcoY2hhciAqZHN0LCBzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBiLAogCQkJICAgY29uc3QgZW51bSBpcGxfbWV0aG9kIG0pCkBAIC05MDYsNyArMTAyMSw3IEBACiAKIAlyZWlwbF9nZXRfYXNjaWlfbG9hZHBhcm0obG9hZHBhcm0sIGlwYik7CiAJcmVpcGxfZ2V0X2FzY2lpX25zc19uYW1lKG5zc19uYW1lLCBpcGIpOwotCXJlaXBsX2dldF9hc2NpaV92bXBhcm0odm1wYXJtLCBpcGIpOworCXJlaXBsX2dldF9hc2NpaV92bXBhcm0odm1wYXJtLCBzaXplb2Yodm1wYXJtKSwgaXBiKTsKIAogCXN3aXRjaCAobSkgewogCWNhc2UgUkVJUExfTUVUSE9EX0NDV19WTToKQEAgLTEwNzYsMjMgKzExOTEsNDQgQEAKIAlpbnQgcmM7CiAKIAlpZiAoIWRpYWczMDhfc2V0X3dvcmtzKSB7Ci0JCWlmIChpcGxfaW5mby50eXBlID09IElQTF9UWVBFX0ZDUCkKKwkJaWYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQKSB7CiAJCQltYWtlX2F0dHJzX3JvKHJlaXBsX2ZjcF9hdHRycyk7Ci0JCWVsc2UKKwkJCXN5c19yZWlwbF9mY3Bfc2NwX2RhdGFfYXR0ci5hdHRyLm1vZGUgPSBTX0lSVUdPOworCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCX0KIAogCXJlaXBsX2Jsb2NrX2ZjcCA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIXJlaXBsX2Jsb2NrX2ZjcCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnJlaXBsX2tzZXQtPmtvYmosICZyZWlwbF9mY3BfYXR0cl9ncm91cCk7CisKKwkvKiBzeXNmczogY3JlYXRlIGZjcCBrc2V0IGZvciBtaXhpbmcgYXR0ciBncm91cCBhbmQgYmluIGF0dHJzICovCisJcmVpcGxfZmNwX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKElQTF9GQ1BfU1RSLCBOVUxMLAorCQkJCQkgICAgICZyZWlwbF9rc2V0LT5rb2JqKTsKKwlpZiAoIXJlaXBsX2tzZXQpIHsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSByZWlwbF9ibG9ja19mY3ApOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcmVpcGxfZmNwX2tzZXQtPmtvYmosICZyZWlwbF9mY3BfYXR0cl9ncm91cCk7CiAJaWYgKHJjKSB7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylyZWlwbF9ibG9ja19mY3ApOworCQlrc2V0X3VucmVnaXN0ZXIocmVpcGxfZmNwX2tzZXQpOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHJlaXBsX2Jsb2NrX2ZjcCk7CiAJCXJldHVybiByYzsKIAl9Ci0JaWYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfRkNQKSB7CisKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmcmVpcGxfZmNwX2tzZXQtPmtvYmosCisJCQkJICAgJnN5c19yZWlwbF9mY3Bfc2NwX2RhdGFfYXR0cik7CisJaWYgKHJjKSB7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcmVpcGxfZmNwX2tzZXQtPmtvYmosICZyZWlwbF9mY3BfYXR0cl9ncm91cCk7CisJCWtzZXRfdW5yZWdpc3RlcihyZWlwbF9mY3Bfa3NldCk7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcmVpcGxfYmxvY2tfZmNwKTsKKwkJcmV0dXJuIHJjOworCX0KKworCWlmIChpcGxfaW5mby50eXBlID09IElQTF9UWVBFX0ZDUCkKIAkJbWVtY3B5KHJlaXBsX2Jsb2NrX2ZjcCwgSVBMX1BBUk1CTE9DS19TVEFSVCwgUEFHRV9TSVpFKTsKLQl9IGVsc2UgeworCWVsc2UgewogCQlyZWlwbF9ibG9ja19mY3AtPmhkci5sZW4gPSBJUExfUEFSTV9CTEtfRkNQX0xFTjsKIAkJcmVpcGxfYmxvY2tfZmNwLT5oZHIudmVyc2lvbiA9IElQTF9QQVJNX0JMT0NLX1ZFUlNJT047CiAJCXJlaXBsX2Jsb2NrX2ZjcC0+aGRyLmJsazBfbGVuID0gSVBMX1BBUk1fQkxLMF9GQ1BfTEVOOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuUyBiL2FyY2gvczM5MC9rZXJuZWwvbWNvdW50LlMKaW5kZXggMmEwYTVlOS4uZGZlMDE1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TCkBAIC0xMSwxMTEgKzExLDI3IEBACiBmdHJhY2Vfc3R1YjoKIAlicgklcjE0CiAKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQotI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQotCiAJLmdsb2JsIF9tY291bnQKIF9tY291bnQ6Ci0JYnIJJXIxNAotCi0JLmdsb2JsIGZ0cmFjZV9jYWxsZXIKLWZ0cmFjZV9jYWxsZXI6Ci0JbGFybAklcjEsZnVuY3Rpb25fdHJhY2Vfc3RvcAotCWljbQklcjEsMHhmLDAoJXIxKQotCWJuenIJJXIxNAotCXN0bWcJJXIyLCVyNSwzMiglcjE1KQotCXN0ZwklcjE0LDExMiglcjE1KQotCWxncgklcjEsJXIxNQotCWFnaGkJJXIxNSwtMTYwCi0Jc3RnCSVyMSxfX1NGX0JBQ0tDSEFJTiglcjE1KQotCWxncgklcjIsJXIxNAotCWxnCSVyMywxNjgoJXIxNSkKLQlsYXJsCSVyMTQsZnRyYWNlX2R5bl9mdW5jCi0JbGcJJXIxNCwwKCVyMTQpCi0JYmFzcgklcjE0LCVyMTQKLSNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0JLmdsb2JsCWZ0cmFjZV9ncmFwaF9jYWxsZXIKLWZ0cmFjZV9ncmFwaF9jYWxsZXI6Ci0JIyBUaGlzIHVuY29uZGl0aW9uYWwgYnJhbmNoIGdldHMgcnVudGltZSBwYXRjaGVkLiBDaGFuZ2Ugb25seSBpZgotCSMgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBTZWUgZnRyYWNlX2VuYWJsZV9ncmFwaF9jYWxsZXIoKS4KLQlqCTBmCi0JbGcJJXIyLDI3MiglcjE1KQotCWxnCSVyMywxNjgoJXIxNSkKLQlicmFzbAklcjE0LHByZXBhcmVfZnRyYWNlX3JldHVybgotCXN0ZwklcjIsMTY4KCVyMTUpCi0wOgotI2VuZGlmCi0JYWdoaQklcjE1LDE2MAotCWxtZwklcjIsJXI1LDMyKCVyMTUpCi0JbGcJJXIxNCwxMTIoJXIxNSkKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKIAlicgklcjE0CiAKIAkuZGF0YQogCS5nbG9ibAlmdHJhY2VfZHluX2Z1bmMKIGZ0cmFjZV9keW5fZnVuYzoKLQkucXVhZAlmdHJhY2Vfc3R1YgorCS5sb25nCWZ0cmFjZV9zdHViCiAJLnByZXZpb3VzCiAKLSNlbHNlIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwotCi0JLmdsb2JsIF9tY291bnQKLV9tY291bnQ6Ci0JbGFybAklcjEsZnVuY3Rpb25fdHJhY2Vfc3RvcAotCWljbQklcjEsMHhmLDAoJXIxKQotCWJuenIJJXIxNAotCXN0bWcJJXIyLCVyNSwzMiglcjE1KQotCXN0ZwklcjE0LDExMiglcjE1KQotCWxncgklcjEsJXIxNQotCWFnaGkJJXIxNSwtMTYwCi0Jc3RnCSVyMSxfX1NGX0JBQ0tDSEFJTiglcjE1KQotCWxncgklcjIsJXIxNAotCWxnCSVyMywxNjgoJXIxNSkKLQlsYXJsCSVyMTQsZnRyYWNlX3RyYWNlX2Z1bmN0aW9uCi0JbGcJJXIxNCwwKCVyMTQpCi0JYmFzcgklcjE0LCVyMTQKLSNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0JbGcJJXIyLDI3MiglcjE1KQotCWxnCSVyMywxNjgoJXIxNSkKLQlicmFzbAklcjE0LHByZXBhcmVfZnRyYWNlX3JldHVybgotCXN0ZwklcjIsMTY4KCVyMTUpCi0jZW5kaWYKLQlhZ2hpCSVyMTUsMTYwCi0JbG1nCSVyMiwlcjUsMzIoJXIxNSkKLQlsZwklcjE0LDExMiglcjE1KQotCWJyCSVyMTQKLQotI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwotCi0jaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgotCi0JLmdsb2JsCXJldHVybl90b19oYW5kbGVyCi1yZXR1cm5fdG9faGFuZGxlcjoKLQlzdG1nCSVyMiwlcjUsMzIoJXIxNSkKLQlsZ3IJJXIxLCVyMTUKLQlhZ2hpCSVyMTUsLTE2MAotCXN0ZwklcjEsX19TRl9CQUNLQ0hBSU4oJXIxNSkKLQlicmFzbAklcjE0LGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcgotCWFnaGkJJXIxNSwxNjAKLQlsZ3IJJXIxNCwlcjIKLQlsbWcJJXIyLCVyNSwzMiglcjE1KQotCWJyCSVyMTQKLQotI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KLQotI2Vsc2UgLyogQ09ORklHXzY0QklUICovCi0KLSNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKLQotCS5nbG9ibCBfbWNvdW50Ci1fbWNvdW50OgotCWJyCSVyMTQKLQogCS5nbG9ibCBmdHJhY2VfY2FsbGVyCiBmdHJhY2VfY2FsbGVyOgorI2VuZGlmCiAJc3RtCSVyMiwlcjUsMTYoJXIxNSkKIAlicmFzCSVyMSwyZgorI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorMDoJLmxvbmcJZnRyYWNlX2R5bl9mdW5jCisjZWxzZQogMDoJLmxvbmcJZnRyYWNlX3RyYWNlX2Z1bmN0aW9uCisjZW5kaWYKIDE6CS5sb25nCWZ1bmN0aW9uX3RyYWNlX3N0b3AKIDI6CWwJJXIyLDFiLTBiKCVyMSkKIAlpY20JJXIyLDB4ZiwwKCVyMikKQEAgLTEzMSwxMSArNDcsMTMgQEAKIAlsCSVyMTQsMCglcjE0KQogCWJhc3IJJXIxNCwlcjE0CiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCS5nbG9ibAlmdHJhY2VfZ3JhcGhfY2FsbGVyCiBmdHJhY2VfZ3JhcGhfY2FsbGVyOgogCSMgVGhpcyB1bmNvbmRpdGlvbmFsIGJyYW5jaCBnZXRzIHJ1bnRpbWUgcGF0Y2hlZC4gQ2hhbmdlIG9ubHkgaWYKIAkjIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gU2VlIGZ0cmFjZV9lbmFibGVfZ3JhcGhfY2FsbGVyKCkuCiAJagkxZgorI2VuZGlmCiAJYnJhcwklcjEsMGYKIAkubG9uZwlwcmVwYXJlX2Z0cmFjZV9yZXR1cm4KIDA6CWwJJXIyLDE1MiglcjE1KQpAQCAtMTUwLDQ5ICs2OCw2IEBACiAzOglsbQklcjIsJXI1LDE2KCVyMTUpCiAJYnIJJXIxNAogCi0JLmRhdGEKLQkuZ2xvYmwJZnRyYWNlX2R5bl9mdW5jCi1mdHJhY2VfZHluX2Z1bmM6Ci0JLmxvbmcJZnRyYWNlX3N0dWIKLQkucHJldmlvdXMKLQotI2Vsc2UgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCi0KLQkuZ2xvYmwgX21jb3VudAotX21jb3VudDoKLQlzdG0JJXIyLCVyNSwxNiglcjE1KQotCWJyYXMJJXIxLDJmCi0wOgkubG9uZwlmdHJhY2VfdHJhY2VfZnVuY3Rpb24KLTE6CS5sb25nCWZ1bmN0aW9uX3RyYWNlX3N0b3AKLTI6CWwJJXIyLDFiLTBiKCVyMSkKLQlpY20JJXIyLDB4ZiwwKCVyMikKLQlqbnoJM2YKLQlzdAklcjE0LDU2KCVyMTUpCi0JbHIJJXIwLCVyMTUKLQlhaGkJJXIxNSwtOTYKLQlsCSVyMywxMDAoJXIxNSkKLQlsYQklcjIsMCglcjE0KQotCXN0CSVyMCxfX1NGX0JBQ0tDSEFJTiglcjE1KQotCWxhCSVyMywwKCVyMykKLQlsCSVyMTQsMGItMGIoJXIxKQotCWwJJXIxNCwwKCVyMTQpCi0JYmFzcgklcjE0LCVyMTQKLSNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0JYnJhcwklcjEsMGYKLQkubG9uZwlwcmVwYXJlX2Z0cmFjZV9yZXR1cm4KLTA6CWwJJXIyLDE1MiglcjE1KQotCWwJJXI0LDAoJXIxKQotCWwJJXIzLDEwMCglcjE1KQotCWJhc3IJJXIxNCwlcjQKLQlzdAklcjIsMTAwKCVyMTUpCi0jZW5kaWYKLQlhaGkJJXIxNSw5NgotCWwJJXIxNCw1NiglcjE1KQotMzoJbG0JJXIyLCVyNSwxNiglcjE1KQotCWJyCSVyMTQKLQotI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwotCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCiAJLmdsb2JsCXJldHVybl90b19oYW5kbGVyCkBAIC0yMTEsNiArODYsNCBAQAogCWxtCSVyMiwlcjUsMTYoJXIxNSkKIAlicgklcjE0CiAKLSNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCi0KLSNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQ2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzIxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAva2VybmVsL21jb3VudDY0LlMKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOCwyMDA5CisgKgorICogICBBdXRob3Iocyk6IEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorCisJLmdsb2JsIGZ0cmFjZV9zdHViCitmdHJhY2Vfc3R1YjoKKwlicgklcjE0CisKKwkuZ2xvYmwgX21jb3VudAorX21jb3VudDoKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKKwlicgklcjE0CisKKwkuZGF0YQorCS5nbG9ibAlmdHJhY2VfZHluX2Z1bmMKK2Z0cmFjZV9keW5fZnVuYzoKKwkucXVhZAlmdHJhY2Vfc3R1YgorCS5wcmV2aW91cworCisJLmdsb2JsIGZ0cmFjZV9jYWxsZXIKK2Z0cmFjZV9jYWxsZXI6CisjZW5kaWYKKwlsYXJsCSVyMSxmdW5jdGlvbl90cmFjZV9zdG9wCisJaWNtCSVyMSwweGYsMCglcjEpCisJYm56cgklcjE0CisJc3RtZwklcjIsJXI1LDMyKCVyMTUpCisJc3RnCSVyMTQsMTEyKCVyMTUpCisJbGdyCSVyMSwlcjE1CisJYWdoaQklcjE1LC0xNjAKKwlzdGcJJXIxLF9fU0ZfQkFDS0NIQUlOKCVyMTUpCisJbGdyCSVyMiwlcjE0CisJbGcJJXIzLDE2OCglcjE1KQorI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorCWxhcmwJJXIxNCxmdHJhY2VfZHluX2Z1bmMKKyNlbHNlCisJbGFybAklcjE0LGZ0cmFjZV90cmFjZV9mdW5jdGlvbgorI2VuZGlmCisJbGcJJXIxNCwwKCVyMTQpCisJYmFzcgklcjE0LCVyMTQKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCisJLmdsb2JsCWZ0cmFjZV9ncmFwaF9jYWxsZXIKK2Z0cmFjZV9ncmFwaF9jYWxsZXI6CisJIyBUaGlzIHVuY29uZGl0aW9uYWwgYnJhbmNoIGdldHMgcnVudGltZSBwYXRjaGVkLiBDaGFuZ2Ugb25seSBpZgorCSMgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBTZWUgZnRyYWNlX2VuYWJsZV9ncmFwaF9jYWxsZXIoKS4KKwlqCTBmCisjZW5kaWYKKwlsZwklcjIsMjcyKCVyMTUpCisJbGcJJXIzLDE2OCglcjE1KQorCWJyYXNsCSVyMTQscHJlcGFyZV9mdHJhY2VfcmV0dXJuCisJc3RnCSVyMiwxNjgoJXIxNSkKKzA6CisjZW5kaWYKKwlhZ2hpCSVyMTUsMTYwCisJbG1nCSVyMiwlcjUsMzIoJXIxNSkKKwlsZwklcjE0LDExMiglcjE1KQorCWJyCSVyMTQKKworI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKworCS5nbG9ibAlyZXR1cm5fdG9faGFuZGxlcgorcmV0dXJuX3RvX2hhbmRsZXI6CisJc3RtZwklcjIsJXI1LDMyKCVyMTUpCisJbGdyCSVyMSwlcjE1CisJYWdoaQklcjE1LC0xNjAKKwlzdGcJJXIxLF9fU0ZfQkFDS0NIQUlOKCVyMTUpCisJYnJhc2wJJXIxNCxmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIKKwlhZ2hpCSVyMTUsMTYwCisJbGdyCSVyMTQsJXIyCisJbG1nCSVyMiwlcjUsMzIoJXIxNSkKKwlicgklcjE0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNDNhY2Q3My4uZjNkZGQ3YSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCkBAIC01MSw2ICs1MSw5IEBACiAjaW5jbHVkZSAiY29tcGF0X3B0cmFjZS5oIgogI2VuZGlmCiAKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zeXNjYWxscy5oPgorCiBlbnVtIHMzOTBfcmVnc2V0IHsKIAlSRUdTRVRfR0VORVJBTCwKIAlSRUdTRVRfRlAsCkBAIC02NjEsOCArNjY0LDggQEAKIAkJcmV0ID0gLTE7CiAJfQogCi0JaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfRlRSQUNFKSkpCi0JCWZ0cmFjZV9zeXNjYWxsX2VudGVyKHJlZ3MpOworCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKSkKKwkJdHJhY2Vfc3lzX2VudGVyKHJlZ3MsIHJlZ3MtPmdwcnNbMl0pOwogCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQogCQlhdWRpdF9zeXNjYWxsX2VudHJ5KGlzX2NvbXBhdF90YXNrKCkgPwpAQCAtNjc5LDggKzY4Miw4IEBACiAJCWF1ZGl0X3N5c2NhbGxfZXhpdChBVURJVFNDX1JFU1VMVChyZWdzLT5ncHJzWzJdKSwKIAkJCQkgICByZWdzLT5ncHJzWzJdKTsKIAotCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX0ZUUkFDRSkpKQotCQlmdHJhY2Vfc3lzY2FsbF9leGl0KHJlZ3MpOworCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpKSkKKwkJdHJhY2Vfc3lzX2V4aXQocmVncywgcmVncy0+Z3Byc1syXSk7CiAKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCiAJCXRyYWNlaG9va19yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCmluZGV4IGNiYjg5N2IuLjllZDEzYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKQEAgLTE1NiwxNSArMTU2LDExIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXRfcHJlZmVycmVkX2NvbnNvbGUodm9pZCkKIHsKLQlpZiAoTUFDSElORV9JU19LVk0pIHsKKwlpZiAoTUFDSElORV9JU19LVk0pCiAJCWFkZF9wcmVmZXJyZWRfY29uc29sZSgiaHZjIiwgMCwgTlVMTCk7Ci0JCXMzOTBfdmlydGlvX2NvbnNvbGVfaW5pdCgpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKENPTlNPTEVfSVNfMzIxNSB8fCBDT05TT0xFX0lTX1NDTFApCisJZWxzZSBpZiAoQ09OU09MRV9JU18zMjE1IHx8IENPTlNPTEVfSVNfU0NMUCkKIAkJYWRkX3ByZWZlcnJlZF9jb25zb2xlKCJ0dHlTIiwgMCwgTlVMTCk7Ci0JaWYgKENPTlNPTEVfSVNfMzI3MCkKKwllbHNlIGlmIChDT05TT0xFX0lTXzMyNzApCiAJCWFkZF9wcmVmZXJyZWRfY29uc29sZSgidHR5MzI3MCIsIDAsIE5VTEwpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYwppbmRleCAwNjJiZDY0Li42YjRmZWY4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKQEAgLTUzNiw0ICs1MzYsNiBAQAogewogCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9OT1RJRllfUkVTVU1FKTsKIAl0cmFjZWhvb2tfbm90aWZ5X3Jlc3VtZShyZWdzKTsKKwlpZiAoY3VycmVudC0+cmVwbGFjZW1lbnRfc2Vzc2lvbl9rZXlyaW5nKQorCQlrZXlfcmVwbGFjZV9zZXNzaW9uX2tleXJpbmcoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IGJlMmNhZTAuLjU2YzE2ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGFzbS9zY2xwLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRpbWUuaD4KICNpbmNsdWRlIDxhc20vdmRzby5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlICJlbnRyeS5oIgogCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50X3NldFtOUl9DUFVTXTsKQEAgLTcwLDYgKzcxLDIzIEBACiAKIHN0YXRpYyB2b2lkIHNtcF9leHRfYml0Y2FsbChpbnQsIGVjX2JpdF9zaWcpOwogCitzdGF0aWMgaW50IGNwdV9zdG9wcGVkKGludCBjcHUpCit7CisJX191MzIgc3RhdHVzOworCisJc3dpdGNoIChzaWduYWxfcHJvY2Vzc29yX3BzKCZzdGF0dXMsIDAsIGNwdSwgc2lncF9zZW5zZSkpIHsKKwljYXNlIHNpZ3Bfb3JkZXJfY29kZV9hY2NlcHRlZDoKKwljYXNlIHNpZ3Bfc3RhdHVzX3N0b3JlZDoKKwkJLyogQ2hlY2sgZm9yIHN0b3BwZWQgYW5kIGNoZWNrIHN0b3Agc3RhdGUgKi8KKwkJaWYgKHN0YXR1cyAmIDB4NTApCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCiB2b2lkIHNtcF9zZW5kX3N0b3Aodm9pZCkKIHsKIAlpbnQgY3B1LCByYzsKQEAgLTg2LDcgKzEwNCw3IEBACiAJCQlyYyA9IHNpZ25hbF9wcm9jZXNzb3IoY3B1LCBzaWdwX3N0b3ApOwogCQl9IHdoaWxlIChyYyA9PSBzaWdwX2J1c3kpOwogCi0JCXdoaWxlICghc21wX2NwdV9ub3RfcnVubmluZyhjcHUpKQorCQl3aGlsZSAoIWNwdV9zdG9wcGVkKGNwdSkpCiAJCQljcHVfcmVsYXgoKTsKIAl9CiB9CkBAIC0yNjksMTkgKzI4Nyw2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfWkZDUERVTVAgKi8KIAotc3RhdGljIGludCBjcHVfc3RvcHBlZChpbnQgY3B1KQotewotCV9fdTMyIHN0YXR1czsKLQotCS8qIENoZWNrIGZvciBzdG9wcGVkIHN0YXRlICovCi0JaWYgKHNpZ25hbF9wcm9jZXNzb3JfcHMoJnN0YXR1cywgMCwgY3B1LCBzaWdwX3NlbnNlKSA9PQotCSAgICBzaWdwX3N0YXR1c19zdG9yZWQpIHsKLQkJaWYgKHN0YXR1cyAmIDB4NDApCi0JCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgY3B1X2tub3duKGludCBjcHVfaWQpCiB7CiAJaW50IGNwdTsKQEAgLTMwMCw3ICszMDUsNyBAQAogCWxvZ2ljYWxfY3B1ID0gY3B1bWFza19maXJzdCgmYXZhaWwpOwogCWlmIChsb2dpY2FsX2NwdSA+PSBucl9jcHVfaWRzKQogCQlyZXR1cm4gMDsKLQlmb3IgKGNwdV9pZCA9IDA7IGNwdV9pZCA8PSA2NTUzNTsgY3B1X2lkKyspIHsKKwlmb3IgKGNwdV9pZCA9IDA7IGNwdV9pZCA8PSBNQVhfQ1BVX0FERFJFU1M7IGNwdV9pZCsrKSB7CiAJCWlmIChjcHVfa25vd24oY3B1X2lkKSkKIAkJCWNvbnRpbnVlOwogCQlfX2NwdV9sb2dpY2FsX21hcFtsb2dpY2FsX2NwdV0gPSBjcHVfaWQ7CkBAIC0zNzksNyArMzg0LDcgQEAKIAkvKiBVc2Ugc2lncCBkZXRlY3Rpb24gYWxnb3JpdGhtIGlmIHNjbHAgZG9lc24ndCB3b3JrLiAqLwogCWlmIChzY2xwX2dldF9jcHVfaW5mbyhpbmZvKSkgewogCQlzbXBfdXNlX3NpZ3BfZGV0ZWN0aW9uID0gMTsKLQkJZm9yIChjcHUgPSAwOyBjcHUgPD0gNjU1MzU7IGNwdSsrKSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDw9IE1BWF9DUFVfQUREUkVTUzsgY3B1KyspIHsKIAkJCWlmIChjcHUgPT0gYm9vdF9jcHVfYWRkcikKIAkJCQljb250aW51ZTsKIAkJCV9fY3B1X2xvZ2ljYWxfbWFwW0NQVV9JTklUX05PXSA9IGNwdTsKQEAgLTYzNSw3ICs2NDAsNyBAQAogdm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKIHsKIAkvKiBXYWl0IHVudGlsIHRhcmdldCBjcHUgaXMgZG93biAqLwotCXdoaWxlICghc21wX2NwdV9ub3RfcnVubmluZyhjcHUpKQorCXdoaWxlICghY3B1X3N0b3BwZWQoY3B1KSkKIAkJY3B1X3JlbGF4KCk7CiAJc21wX2ZyZWVfbG93Y29yZShjcHUpOwogCXByX2luZm8oIlByb2Nlc3NvciAlZCBzdG9wcGVkXG4iLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zdXNwZW5kLmMgYi9hcmNoL3MzOTAva2VybmVsL3N1c3BlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODZiZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zdXNwZW5kLmMKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIFN1c3BlbmQgc3VwcG9ydCBzcGVjaWZpYyBmb3IgczM5MC4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDkKKyAqCisgKiBBdXRob3Iocyk6IEhhbnMtSm9hY2hpbSBQaWNodCA8aGFuc0BsaW51eC52bmV0LmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXBsLmg+CisKKy8qCisgKiBSZWZlcmVuY2VzIHRvIHNlY3Rpb24gYm91bmRhcmllcworICovCitleHRlcm4gY29uc3Qgdm9pZCBfX25vc2F2ZV9iZWdpbiwgX19ub3NhdmVfZW5kOworCisvKgorICogIGNoZWNrIGlmIGdpdmVuIHBmbiBpcyBpbiB0aGUgJ25vc2F2ZScgb3IgaW4gdGhlIHJlYWQgb25seSBOU1Mgc2VjdGlvbgorICovCitpbnQgcGZuX2lzX25vc2F2ZSh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwl1bnNpZ25lZCBsb25nIG5vc2F2ZV9iZWdpbl9wZm4gPSBfX3BhKCZfX25vc2F2ZV9iZWdpbikgPj4gUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIG5vc2F2ZV9lbmRfcGZuID0gUEFHRV9BTElHTihfX3BhKCZfX25vc2F2ZV9lbmQpKQorCQkJCQk+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgZXNoYXJlZF9wZm4gPSBQRk5fRE9XTihfX3BhKCZfZXNoYXJlZCkpIC0gMTsKKwl1bnNpZ25lZCBsb25nIHN0ZXh0X3BmbiA9IFBGTl9ET1dOKF9fcGEoJl9zdGV4dCkpOworCisJaWYgKHBmbiA+PSBub3NhdmVfYmVnaW5fcGZuICYmIHBmbiA8IG5vc2F2ZV9lbmRfcGZuKQorCQlyZXR1cm4gMTsKKwlpZiAocGZuID49IHN0ZXh0X3BmbiAmJiBwZm4gPD0gZXNoYXJlZF9wZm4pIHsKKwkJaWYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfTlNTKQorCQkJcmV0dXJuIDE7CisJfSBlbHNlIGlmICgodHByb3QocGZuICogUEFHRV9TSVpFKSAmJiBwZm4gPiAwKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2F2ZV9wcm9jZXNzb3Jfc3RhdGUodm9pZCkKK3sKKwkvKiBzd3N1c3BfYXJjaF9zdXNwZW5kKCkgYWN0dWFsbHkgc2F2ZXMgYWxsIGNwdSByZWdpc3RlciBjb250ZW50cy4KKwkgKiBNYWNoaW5lIGNoZWNrcyBtdXN0IGJlIGRpc2FibGVkIHNpbmNlIHN3c3VzcF9hcmNoX3N1c3BlbmQoKSBzdG9yZXMKKwkgKiByZWdpc3RlciBjb250ZW50cyB0byB0aGVpciBsb3djb3JlIHNhdmUgYXJlYXMuIFRoYXQncyB0aGUgc2FtZQorCSAqIHBsYWNlIHdoZXJlIHJlZ2lzdGVyIGNvbnRlbnRzIG9uIG1hY2hpbmUgY2hlY2tzIHdvdWxkIGJlIHNhdmVkLgorCSAqIFRvIGF2b2lkIHJlZ2lzdGVyIGNvcnJ1cHRpb24gZGlzYWJsZSBtYWNoaW5lIGNoZWNrcy4KKwkgKiBXZSBtdXN0IGFsc28gZGlzYWJsZSBtYWNoaW5lIGNoZWNrcyBpbiB0aGUgbmV3IHBzdyBtYXNrIGZvcgorCSAqIHByb2dyYW0gY2hlY2tzLCBzaW5jZSBzd3N1c3BfYXJjaF9zdXNwZW5kKCkgbWF5IGdlbmVyYXRlIHByb2dyYW0KKwkgKiBjaGVja3MuIERpc2FibGluZyBtYWNoaW5lIGNoZWNrcyBmb3IgYWxsIG90aGVyIG5ldyBwc3cgbWFza3MgaXMKKwkgKiBqdXN0IHBhcmFub2lhLgorCSAqLworCWxvY2FsX21jY2tfZGlzYWJsZSgpOworCS8qIERpc2FibGUgbG93Y29yZSBwcm90ZWN0aW9uICovCisJX19jdGxfY2xlYXJfYml0KDAsMjgpOworCVMzOTBfbG93Y29yZS5leHRlcm5hbF9uZXdfcHN3Lm1hc2sgJj0gflBTV19NQVNLX01DSEVDSzsKKwlTMzkwX2xvd2NvcmUuc3ZjX25ld19wc3cubWFzayAmPSB+UFNXX01BU0tfTUNIRUNLOworCVMzOTBfbG93Y29yZS5pb19uZXdfcHN3Lm1hc2sgJj0gflBTV19NQVNLX01DSEVDSzsKKwlTMzkwX2xvd2NvcmUucHJvZ3JhbV9uZXdfcHN3Lm1hc2sgJj0gflBTV19NQVNLX01DSEVDSzsKK30KKwordm9pZCByZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKQoreworCVMzOTBfbG93Y29yZS5leHRlcm5hbF9uZXdfcHN3Lm1hc2sgfD0gUFNXX01BU0tfTUNIRUNLOworCVMzOTBfbG93Y29yZS5zdmNfbmV3X3Bzdy5tYXNrIHw9IFBTV19NQVNLX01DSEVDSzsKKwlTMzkwX2xvd2NvcmUuaW9fbmV3X3Bzdy5tYXNrIHw9IFBTV19NQVNLX01DSEVDSzsKKwlTMzkwX2xvd2NvcmUucHJvZ3JhbV9uZXdfcHN3Lm1hc2sgfD0gUFNXX01BU0tfTUNIRUNLOworCS8qIEVuYWJsZSBsb3djb3JlIHByb3RlY3Rpb24gKi8KKwlfX2N0bF9zZXRfYml0KDAsMjgpOworCWxvY2FsX21jY2tfZW5hYmxlKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Q2YjA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIFMzOTAgNjQtYml0IHN3c3VzcCBpbXBsZW1lbnRhdGlvbgorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOQorICoKKyAqIEF1dGhvcihzKTogSGFucy1Kb2FjaGltIFBpY2h0IDxoYW5zQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqCSAgICAgIE1pY2hhZWwgSG9semhldSA8aG9semhldUBsaW51eC52bmV0LmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorCisvKgorICogU2F2ZSByZWdpc3RlciBjb250ZXh0IGluIGFic29sdXRlIDAgbG93Y29yZSBhbmQgY2FsbCBzd3N1c3Bfc2F2ZSgpIHRvCisgKiBjcmVhdGUgaW4tbWVtb3J5IGtlcm5lbCBpbWFnZS4gVGhlIGNvbnRleHQgaXMgc2F2ZWQgaW4gdGhlIGRlc2lnbmF0ZWQKKyAqICJzdG9yZSBzdGF0dXMiIG1lbW9yeSBsb2NhdGlvbnMgKHNlZSBQT1ApLgorICogV2UgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiB0d2ljZS4gVGhlIGZpcnN0IHRpbWUgZHVyaW5nIHRoZSBzdXNwZW5kIHRvCisgKiBkaXNrIHByb2Nlc3MuIFRoZSBzZWNvbmQgdGltZSB2aWEgdGhlIHN3c3VzcF9hcmNoX3Jlc3VtZSgpIGZ1bmN0aW9uCisgKiAoc2VlIGJlbG93KSBpbiB0aGUgcmVzdW1lIHByb2Nlc3MuCisgKiBUaGlzIGZ1bmN0aW9uIHJ1bnMgd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzLgorICovCisJLnNlY3Rpb24gLnRleHQKKwkuYWxpZ24JNAorCS5nbG9ibCBzd3N1c3BfYXJjaF9zdXNwZW5kCitzd3N1c3BfYXJjaF9zdXNwZW5kOgorCXN0bWcJJXI2LCVyMTUsX19TRl9HUFJTKCVyMTUpCisJbGdyCSVyMSwlcjE1CisJYWdoaQklcjE1LC1TVEFDS19GUkFNRV9PVkVSSEVBRAorCXN0ZwklcjEsX19TRl9CQUNLQ0hBSU4oJXIxNSkKKworCS8qIERlYWN0aXZhdGUgREFUICovCisJc3Ruc20JX19TRl9FTVBUWSglcjE1KSwweGZiCisKKwkvKiBTdG9yZSBwcmVmaXggcmVnaXN0ZXIgb24gc3RhY2sgKi8KKwlzdHB4CV9fU0ZfRU1QVFkoJXIxNSkKKworCS8qIFNhdmUgcHJlZml4IHJlZ2lzdGVyIGNvbnRlbnRzIGZvciBsb3djb3JlICovCisJbGxnZgklcjQsX19TRl9FTVBUWSglcjE1KQorCisJLyogR2V0IHBvaW50ZXIgdG8gc2F2ZSBhcmVhICovCisJbGdoaQklcjEsMHgxMDAwCisKKwkvKiBTdG9yZSByZWdpc3RlcnMgKi8KKwltdmMJMHgzMTgoNCwlcjEpLF9fU0ZfRU1QVFkoJXIxNSkJLyogbW92ZSBwcmVmaXggdG8gbG93Y29yZSAqLworCXN0ZnBjCTB4MzFjKCVyMSkJCQkvKiBzdG9yZSBmcHUgY29udHJvbCAqLworCXN0ZAkwLDB4MjAwKCVyMSkJCQkvKiBzdG9yZSBmMCAqLworCXN0ZAkxLDB4MjA4KCVyMSkJCQkvKiBzdG9yZSBmMSAqLworCXN0ZAkyLDB4MjEwKCVyMSkJCQkvKiBzdG9yZSBmMiAqLworCXN0ZAkzLDB4MjE4KCVyMSkJCQkvKiBzdG9yZSBmMyAqLworCXN0ZAk0LDB4MjIwKCVyMSkJCQkvKiBzdG9yZSBmNCAqLworCXN0ZAk1LDB4MjI4KCVyMSkJCQkvKiBzdG9yZSBmNSAqLworCXN0ZAk2LDB4MjMwKCVyMSkJCQkvKiBzdG9yZSBmNiAqLworCXN0ZAk3LDB4MjM4KCVyMSkJCQkvKiBzdG9yZSBmNyAqLworCXN0ZAk4LDB4MjQwKCVyMSkJCQkvKiBzdG9yZSBmOCAqLworCXN0ZAk5LDB4MjQ4KCVyMSkJCQkvKiBzdG9yZSBmOSAqLworCXN0ZAkxMCwweDI1MCglcjEpCQkJLyogc3RvcmUgZjEwICovCisJc3RkCTExLDB4MjU4KCVyMSkJCQkvKiBzdG9yZSBmMTEgKi8KKwlzdGQJMTIsMHgyNjAoJXIxKQkJCS8qIHN0b3JlIGYxMiAqLworCXN0ZAkxMywweDI2OCglcjEpCQkJLyogc3RvcmUgZjEzICovCisJc3RkCTE0LDB4MjcwKCVyMSkJCQkvKiBzdG9yZSBmMTQgKi8KKwlzdGQJMTUsMHgyNzgoJXIxKQkJCS8qIHN0b3JlIGYxNSAqLworCXN0YW0JJWEwLCVhMTUsMHgzNDAoJXIxKQkJLyogc3RvcmUgYWNjZXNzIHJlZ2lzdGVycyAqLworCXN0Y3RnCSVjMCwlYzE1LDB4MzgwKCVyMSkJCS8qIHN0b3JlIGNvbnRyb2wgcmVnaXN0ZXJzICovCisJc3RtZwklcjAsJXIxNSwweDI4MCglcjEpCQkvKiBzdG9yZSBnZW5lcmFsIHJlZ2lzdGVycyAqLworCisJc3RwdAkweDMyOCglcjEpCQkJLyogc3RvcmUgdGltZXIgKi8KKwlzdGNrYwkweDMzMCglcjEpCQkJLyogc3RvcmUgY2xvY2sgY29tcGFyYXRvciAqLworCisJLyogQWN0aXZhdGUgREFUICovCisJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDA0CisKKwkvKiBTZXQgcHJlZml4IHBhZ2UgdG8gemVybyAqLworCXhjCV9fU0ZfRU1QVFkoNCwlcjE1KSxfX1NGX0VNUFRZKCVyMTUpCisJc3B4CV9fU0ZfRU1QVFkoJXIxNSkKKworCWxnaGkJJXIyLDAKKwlsZ2hpCSVyMywyKlBBR0VfU0laRQorCWxnaGkJJXI1LDIqUEFHRV9TSVpFCisxOgltdmNsZQklcjIsJXI0LDAKKwlqbwkxYgorCisJLyogU2F2ZSBpbWFnZSAqLworCWJyYXNsCSVyMTQsc3dzdXNwX3NhdmUKKworCS8qIFJlc3RvcmUgcHJlZml4IHJlZ2lzdGVyIGFuZCByZXR1cm4gKi8KKwlsZ2hpCSVyMSwweDEwMDAKKwlzcHgJMHgzMTgoJXIxKQorCWxtZwklcjYsJXIxNSxTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fU0ZfR1BSUyglcjE1KQorCWxnaGkJJXIyLDAKKwlicgklcjE0CisKKy8qCisgKiBSZXN0b3JlIHNhdmVkIG1lbW9yeSBpbWFnZSB0byBjb3JyZWN0IHBsYWNlIGFuZCByZXN0b3JlIHJlZ2lzdGVyIGNvbnRleHQuCisgKiBUaGVuIHdlIHJldHVybiB0byB0aGUgZnVuY3Rpb24gdGhhdCBjYWxsZWQgc3dzdXNwX2FyY2hfc3VzcGVuZCgpLgorICogc3dzdXNwX2FyY2hfcmVzdW1lKCkgcnVucyB3aXRoIGRpc2FibGVkIGludGVycnVwdHMuCisgKi8KKwkuZ2xvYmwgc3dzdXNwX2FyY2hfcmVzdW1lCitzd3N1c3BfYXJjaF9yZXN1bWU6CisJc3RtZwklcjYsJXIxNSxfX1NGX0dQUlMoJXIxNSkKKwlsZ3IJJXIxLCVyMTUKKwlhZ2hpCSVyMTUsLVNUQUNLX0ZSQU1FX09WRVJIRUFECisJc3RnCSVyMSxfX1NGX0JBQ0tDSEFJTiglcjE1KQorCisjaWZkZWYgQ09ORklHX1NNUAorCS8qIFNhdmUgYm9vdCBjcHUgbnVtYmVyICovCisJYnJhc2wJJXIxNCxzbXBfZ2V0X3BoeXNfY3B1X2lkCisJbGdyCSVyMTAsJXIyCisjZW5kaWYKKwkvKiBEZWFjdGl2YXRlIERBVCAqLworCXN0bnNtCV9fU0ZfRU1QVFkoJXIxNSksMHhmYgorCisJLyogU2V0IHByZWZpeCBwYWdlIHRvIHplcm8gKi8KKwl4YwlfX1NGX0VNUFRZKDQsJXIxNSksX19TRl9FTVBUWSglcjE1KQorCXNweAlfX1NGX0VNUFRZKCVyMTUpCisKKwkvKiBSZXN0b3JlIHNhdmVkIGltYWdlICovCisJbGFybAklcjEscmVzdG9yZV9wYmxpc3QKKwlsZwklcjEsMCglcjEpCisJbHRncgklcjEsJXIxCisJanoJMmYKKzA6CisJbGcJJXIyLDgoJXIxKQorCWxnCSVyNCwwKCVyMSkKKwlsZ2hpCSVyMyxQQUdFX1NJWkUKKwlsZ2hpCSVyNSxQQUdFX1NJWkUKKzE6CisJbXZjbGUJJXIyLCVyNCwwCisJam8JMWIKKwlsZwklcjEsMTYoJXIxKQorCWx0Z3IJJXIxLCVyMQorCWpuegkwYgorMjoKKwlwdGxiCQkJCS8qIGZsdXNoIHRsYiAqLworCisJLyogUmVzdG9yZSByZWdpc3RlcnMgKi8KKwlsZ2hpCSVyMTMsMHgxMDAwCQkvKiAlcjEgPSBwb2ludGVyIHRvIHNhdmUgYXJhZSAqLworCisJc3B0CTB4MzI4KCVyMTMpCQkvKiByZXByb2dyYW0gdGltZXIgKi8KKwkvL3Nja2MJMHgzMzAoJXIxMykJCS8qIHNldCBjbG9jayBjb21wYXJhdG9yICovCisKKwlsY3RsZwklYzAsJWMxNSwweDM4MCglcjEzKQkvKiBsb2FkIGNvbnRyb2wgcmVnaXN0ZXJzICovCisJbGFtCSVhMCwlYTE1LDB4MzQwKCVyMTMpCS8qIGxvYWQgYWNjZXNzIHJlZ2lzdGVycyAqLworCisJbGZwYwkweDMxYyglcjEzKQkJLyogbG9hZCBmcHUgY29udHJvbCAqLworCWxkCTAsMHgyMDAoJXIxMykJCS8qIGxvYWQgZjAgKi8KKwlsZAkxLDB4MjA4KCVyMTMpCQkvKiBsb2FkIGYxICovCisJbGQJMiwweDIxMCglcjEzKQkJLyogbG9hZCBmMiAqLworCWxkCTMsMHgyMTgoJXIxMykJCS8qIGxvYWQgZjMgKi8KKwlsZAk0LDB4MjIwKCVyMTMpCQkvKiBsb2FkIGY0ICovCisJbGQJNSwweDIyOCglcjEzKQkJLyogbG9hZCBmNSAqLworCWxkCTYsMHgyMzAoJXIxMykJCS8qIGxvYWQgZjYgKi8KKwlsZAk3LDB4MjM4KCVyMTMpCQkvKiBsb2FkIGY3ICovCisJbGQJOCwweDI0MCglcjEzKQkJLyogbG9hZCBmOCAqLworCWxkCTksMHgyNDgoJXIxMykJCS8qIGxvYWQgZjkgKi8KKwlsZAkxMCwweDI1MCglcjEzKQkJLyogbG9hZCBmMTAgKi8KKwlsZAkxMSwweDI1OCglcjEzKQkJLyogbG9hZCBmMTEgKi8KKwlsZAkxMiwweDI2MCglcjEzKQkJLyogbG9hZCBmMTIgKi8KKwlsZAkxMywweDI2OCglcjEzKQkJLyogbG9hZCBmMTMgKi8KKwlsZAkxNCwweDI3MCglcjEzKQkJLyogbG9hZCBmMTQgKi8KKwlsZAkxNSwweDI3OCglcjEzKQkJLyogbG9hZCBmMTUgKi8KKworCS8qIExvYWQgb2xkIHN0YWNrICovCisJbGcJJXIxNSwweDJmOCglcjEzKQorCisJLyogUG9pbnRlciB0byBzYXZlIGFyZWEgKi8KKwlsZ2hpCSVyMTMsMHgxMDAwCisKKyNpZmRlZiBDT05GSUdfU01QCisJLyogU3dpdGNoIENQVXMgKi8KKwlsZ3IJJXIyLCVyMTAJCS8qIGdldCBjcHUgaWQgKi8KKwlsbGdmCSVyMywweDMxOCglcjEzKQorCWJyYXNsCSVyMTQsc21wX3N3aXRjaF9ib290X2NwdV9pbl9yZXN1bWUKKyNlbmRpZgorCS8qIFJlc3RvcmUgcHJlZml4IHJlZ2lzdGVyICovCisJc3B4CTB4MzE4KCVyMTMpCisKKwkvKiBBY3RpdmF0ZSBEQVQgKi8KKwlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDQKKworCS8qIFJldHVybiAwICovCisJbG1nCSVyNiwlcjE1LFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19TRl9HUFJTKCVyMTUpCisJbGdoaQklcjIsMAorCWJyCSVyMTQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKaW5kZXggZDRjOGU5Yy4uZTNkYzI4YiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNkZWZpbmUgVElDS19TSVpFIHRpY2sKIAogdTY0IHNjaGVkX2Nsb2NrX2Jhc2VfY2MgPSAtMTsJLyogRm9yY2UgdG8gZGF0YSBzZWN0aW9uLiAqLworRVhQT1JUX1NZTUJPTF9HUEwoc2NoZWRfY2xvY2tfYmFzZV9jYyk7CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlLCBjb21wYXJhdG9ycyk7CiAKQEAgLTY4LDcgKzY5LDcgQEAKICAqLwogdW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKIHsKLQlyZXR1cm4gKChnZXRfY2xvY2tfeHQoKSAtIHNjaGVkX2Nsb2NrX2Jhc2VfY2MpICogMTI1KSA+PiA5OworCXJldHVybiAoZ2V0X2Nsb2NrX21vbm90b25pYygpICogMTI1KSA+PiA5OwogfQogCiAvKgpAQCAtOTAsNiArOTEsNyBAQAogCXRvZHZhbCAtPSAoc2VjICogMTAwMDAwMCkgPDwgMTI7CiAJeHRpbWUtPnR2X25zZWMgPSAoKHRvZHZhbCAqIDEwMDApID4+IDEyKTsKIH0KK0VYUE9SVF9TWU1CT0wodG9kX3RvX3RpbWV2YWwpOwogCiB2b2lkIGNsb2NrX2NvbXBhcmF0b3Jfd29yayh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGE1M2RiMjMuLmJjMTVlZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTUyLDU1ICs1MiwxOCBAQAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9lc2hhcmVkID0gLjsJCS8qIEVuZCBvZiBzaGFyZWFibGUgZGF0YSAqLwogCi0JLiA9IEFMSUdOKDE2KTsJCS8qIEV4Y2VwdGlvbiB0YWJsZSAqLwotCV9fZXhfdGFibGUgOiB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0gOmRhdGEKKwlFWENFUFRJT05fVEFCTEUoMTYpIDpkYXRhCiAKLQkuZGF0YSA6IHsJCS8qIERhdGEgKi8KLQkJREFUQV9EQVRBCi0JCUNPTlNUUlVDVE9SUwotCX0KKwlSV19EQVRBX1NFQ1RJT04oMHgxMDAsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAKLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuZGF0YV9ub3NhdmUgOiB7Ci0JX19ub3NhdmVfYmVnaW4gPSAuOwotCQkqKC5kYXRhLm5vc2F2ZSkKLQl9Ci0JLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JX19ub3NhdmVfZW5kID0gLjsKLQotCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCS5kYXRhLnBhZ2VfYWxpZ25lZCA6IHsKLQkJKiguZGF0YS5pZHQpCi0JfQotCi0JLiA9IEFMSUdOKDB4MTAwKTsKLQkuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IHsKLQkJKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkKLQl9Ci0KLQkuID0gQUxJR04oMHgxMDApOwotCS5kYXRhLnJlYWRfbW9zdGx5IDogewotCQkqKC5kYXRhLnJlYWRfbW9zdGx5KQotCX0KIAlfZWRhdGEgPSAuOwkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCi0JLiA9IEFMSUdOKFRIUkVBRF9TSVpFKTsJLyogaW5pdF90YXNrICovCi0JLmRhdGEuaW5pdF90YXNrIDogewotCQkqKC5kYXRhLmluaXRfdGFzaykKLQl9Ci0KIAkvKiB3aWxsIGJlIGZyZWVkIGFmdGVyIGluaXQgKi8KIAkuID0gQUxJR04oUEFHRV9TSVpFKTsJLyogSW5pdCBjb2RlIGFuZCBkYXRhICovCiAJX19pbml0X2JlZ2luID0gLjsKLQkuaW5pdC50ZXh0IDogewotCQlfc2luaXR0ZXh0ID0gLjsKLQkJSU5JVF9URVhUCi0JCV9laW5pdHRleHQgPSAuOwotCX0KKworCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKKwogCS8qCiAJICogLmV4aXQudGV4dCBpcyBkaXNjYXJkZWQgYXQgcnVudGltZSwgbm90IGxpbmsgdGltZSwKIAkgKiB0byBkZWFsIHdpdGggcmVmZXJlbmNlcyBmcm9tIF9fYnVnX3RhYmxlCkBAIC0xMTEsNTkgKzc0LDIwIEBACiAKIAkvKiBlYXJseS5jIHVzZXMgc3RzaSwgd2hpY2ggcmVxdWlyZXMgcGFnZSBhbGlnbmVkIGRhdGEuICovCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JLmluaXQuZGF0YSA6IHsKLQkJSU5JVF9EQVRBCi0JfQotCS4gPSBBTElHTigweDEwMCk7Ci0JLmluaXQuc2V0dXAgOiB7Ci0JCV9fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX3NldHVwX2VuZCA9IC47Ci0JfQotCS5pbml0Y2FsbC5pbml0IDogewotCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJSU5JVENBTExTCi0JCV9faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0KLQkuY29uX2luaXRjYWxsLmluaXQgOiB7Ci0JCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fY29uX2luaXRjYWxsX2VuZCA9IC47Ci0JfQotCVNFQ1VSSVRZX0lOSVQKLQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCS4gPSBBTElHTigweDEwMCk7Ci0JLmluaXQucmFtZnMgOiB7Ci0JCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJLiA9IEFMSUdOKDIpOwotCQlfX2luaXRyYW1mc19lbmQgPSAuOwotCX0KLSNlbmRpZgorCUlOSVRfREFUQV9TRUNUSU9OKDB4MTAwKQogCiAJUEVSQ1BVKFBBR0VfU0laRSkKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlfX2luaXRfZW5kID0gLjsJCS8qIGZyZWVkIGFmdGVyIGluaXQgZW5kcyBoZXJlICovCiAKLQkvKiBCU1MgKi8KLQkuYnNzIDogewotCQlfX2Jzc19zdGFydCA9IC47Ci0JCSooLmJzcykKLQkJLiA9IEFMSUdOKDIpOwotCQlfX2Jzc19zdG9wID0gLjsKLQl9CisJQlNTX1NFQ1RJT04oMCwgMiwgMCkKIAogCV9lbmQgPSAuIDsKIAotCS8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLwotCS9ESVNDQVJELyA6IHsKLQkJRVhJVF9EQVRBCi0JCSooLmV4aXRjYWxsLmV4aXQpCi0JfQotCiAJLyogRGVidWdnaW5nIHNlY3Rpb25zLgkqLwogCVNUQUJTX0RFQlVHCiAJRFdBUkZfREVCVUcKKworCS8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLworCURJU0NBUkRTCiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL0tjb25maWcgYi9hcmNoL3MzOTAva3ZtL0tjb25maWcKaW5kZXggM2UyNjBiNy4uYmYxNjRmYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9rdm0vS2NvbmZpZwpAQCAtMSwxMSArMSw3IEBACiAjCiAjIEtWTSBjb25maWd1cmF0aW9uCiAjCi1jb25maWcgSEFWRV9LVk0KLSAgICAgICBib29sCi0KLWNvbmZpZyBIQVZFX0tWTV9JUlFDSElQCi0gICAgICAgYm9vbAorc291cmNlICJ2aXJ0L2t2bS9LY29uZmlnIgogCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCkBAIC0zOCw5ICszNCw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBLVk1fVFJBQ0UKLSAgICAgICBib29sCi0KICMgT0ssIGl0J3MgYSBsaXR0bGUgY291bnRlci1pbnR1aXRpdmUgdG8gZG8gdGhpcywgYnV0IGl0IHB1dHMgaXQgbmVhdGx5IHVuZGVyCiAjIHRoZSB2aXJ0dWFsaXphdGlvbiBtZW51Lgogc291cmNlIGRyaXZlcnMvdmlydGlvL0tjb25maWcKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vZ2FjY2Vzcy5oIGIvYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgKaW5kZXggZWQ2MGYzYS4uMDNjNzE2YSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgKKysrIGIvYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogZ2FjY2Vzcy5oIC0gIGFjY2VzcyBndWVzdCBtZW1vcnkKICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOCwyMDA5CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMiBvbmx5KQpAQCAtMTYsMTMgKzE2LDE0IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSAia3ZtLXMzOTAuaCIKIAogc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqX19ndWVzdGFkZHJfdG9fdXNlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGd1ZXN0YWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIHByZWZpeCAgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+cHJlZml4OwotCXVuc2lnbmVkIGxvbmcgb3JpZ2luICA9IHZjcHUtPmt2bS0+YXJjaC5ndWVzdF9vcmlnaW47Ci0JdW5zaWduZWQgbG9uZyBtZW1zaXplID0gdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X21lbXNpemU7CisJdW5zaWduZWQgbG9uZyBvcmlnaW4gID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc29yOworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZSA9IGt2bV9zMzkwX3ZjcHVfZ2V0X21lbXNpemUodmNwdSk7CiAKIAlpZiAoZ3Vlc3RhZGRyIDwgMiAqIFBBR0VfU0laRSkKIAkJZ3Vlc3RhZGRyICs9IHByZWZpeDsKQEAgLTE1OCw4ICsxNTksOCBAQAogCQkJCWNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKIAl1bnNpZ25lZCBsb25nIHByZWZpeCAgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+cHJlZml4OwotCXVuc2lnbmVkIGxvbmcgb3JpZ2luICA9IHZjcHUtPmt2bS0+YXJjaC5ndWVzdF9vcmlnaW47Ci0JdW5zaWduZWQgbG9uZyBtZW1zaXplID0gdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X21lbXNpemU7CisJdW5zaWduZWQgbG9uZyBvcmlnaW4gID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc29yOworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZSA9IGt2bV9zMzkwX3ZjcHVfZ2V0X21lbXNpemUodmNwdSk7CiAKIAlpZiAoKGd1ZXN0ZGVzdCA8IDIgKiBQQUdFX1NJWkUpICYmIChndWVzdGRlc3QgKyBuID4gMiAqIFBBR0VfU0laRSkpCiAJCWdvdG8gc2xvd3BhdGg7CkBAIC0yMDksOCArMjEwLDggQEAKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZ3Vlc3RzcmMsIHVuc2lnbmVkIGxvbmcgbikKIHsKIAl1bnNpZ25lZCBsb25nIHByZWZpeCAgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+cHJlZml4OwotCXVuc2lnbmVkIGxvbmcgb3JpZ2luICA9IHZjcHUtPmt2bS0+YXJjaC5ndWVzdF9vcmlnaW47Ci0JdW5zaWduZWQgbG9uZyBtZW1zaXplID0gdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X21lbXNpemU7CisJdW5zaWduZWQgbG9uZyBvcmlnaW4gID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc29yOworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZSA9IGt2bV9zMzkwX3ZjcHVfZ2V0X21lbXNpemUodmNwdSk7CiAKIAlpZiAoKGd1ZXN0c3JjIDwgMiAqIFBBR0VfU0laRSkgJiYgKGd1ZXN0c3JjICsgbiA+IDIgKiBQQUdFX1NJWkUpKQogCQlnb3RvIHNsb3dwYXRoOwpAQCAtMjQ0LDggKzI0NSw4IEBACiAJCQkJCSB1bnNpZ25lZCBsb25nIGd1ZXN0ZGVzdCwKIAkJCQkJIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKLQl1bnNpZ25lZCBsb25nIG9yaWdpbiAgPSB2Y3B1LT5rdm0tPmFyY2guZ3Vlc3Rfb3JpZ2luOwotCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZSA9IHZjcHUtPmt2bS0+YXJjaC5ndWVzdF9tZW1zaXplOworCXVuc2lnbmVkIGxvbmcgb3JpZ2luICA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5nbXNvcjsKKwl1bnNpZ25lZCBsb25nIG1lbXNpemUgPSBrdm1fczM5MF92Y3B1X2dldF9tZW1zaXplKHZjcHUpOwogCiAJaWYgKGd1ZXN0ZGVzdCArIG4gPiBtZW1zaXplKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTI2Miw4ICsyNjMsOCBAQAogCQkJCQkgICB1bnNpZ25lZCBsb25nIGd1ZXN0c3JjLAogCQkJCQkgICB1bnNpZ25lZCBsb25nIG4pCiB7Ci0JdW5zaWduZWQgbG9uZyBvcmlnaW4gID0gdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X29yaWdpbjsKLQl1bnNpZ25lZCBsb25nIG1lbXNpemUgPSB2Y3B1LT5rdm0tPmFyY2guZ3Vlc3RfbWVtc2l6ZTsKKwl1bnNpZ25lZCBsb25nIG9yaWdpbiAgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zb3I7CisJdW5zaWduZWQgbG9uZyBtZW1zaXplID0ga3ZtX3MzOTBfdmNwdV9nZXRfbWVtc2l6ZSh2Y3B1KTsKIAogCWlmIChndWVzdHNyYyArIG4gPiBtZW1zaXplKQogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCmluZGV4IDk4OTk3Y2MuLmJhOWQ4YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBpbnRlcmNlcHQuYyAtIGluLWtlcm5lbCBoYW5kbGluZyBmb3Igc2llIGludGVyY2VwdHMKICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOCwyMDA5CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMiBvbmx5KQpAQCAtMTI4LDcgKzEyOCw3IEBACiAKIHN0YXRpYyBpbnQgaGFuZGxlX3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWludCByYzsKKwlpbnQgcmMgPSAwOwogCiAJdmNwdS0+c3RhdC5leGl0X3N0b3BfcmVxdWVzdCsrOwogCWF0b21pY19jbGVhcl9tYXNrKENQVVNUQVRfUlVOTklORywgJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5jcHVmbGFncyk7CkBAIC0xNDEsMTIgKzE0MSwxOCBAQAogCQkJcmMgPSAtRU5PVFNVUFA7CiAJfQogCisJaWYgKHZjcHUtPmFyY2gubG9jYWxfaW50LmFjdGlvbl9iaXRzICYgQUNUSU9OX1JFTE9BRFZDUFVfT05fU1RPUCkgeworCQl2Y3B1LT5hcmNoLmxvY2FsX2ludC5hY3Rpb25fYml0cyAmPSB+QUNUSU9OX1JFTE9BRFZDUFVfT05fU1RPUDsKKwkJcmMgPSBTSUVfSU5URVJDRVBUX1JFUlVOVkNQVTsKKwkJdmNwdS0+cnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVFI7CisJfQorCiAJaWYgKHZjcHUtPmFyY2gubG9jYWxfaW50LmFjdGlvbl9iaXRzICYgQUNUSU9OX1NUT1BfT05fU1RPUCkgewogCQl2Y3B1LT5hcmNoLmxvY2FsX2ludC5hY3Rpb25fYml0cyAmPSB+QUNUSU9OX1NUT1BfT05fU1RPUDsKIAkJVkNQVV9FVkVOVCh2Y3B1LCAzLCAiJXMiLCAiY3B1IHN0b3BwZWQiKTsKIAkJcmMgPSAtRU5PVFNVUFA7Ci0JfSBlbHNlCi0JCXJjID0gMDsKKwl9CisKIAlzcGluX3VubG9ja19iaCgmdmNwdS0+YXJjaC5sb2NhbF9pbnQubG9jayk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMTU4LDkgKzE2NCw5IEBACiAKIAl2Y3B1LT5zdGF0LmV4aXRfdmFsaWRpdHkrKzsKIAlpZiAoKHZpd2h5ID09IDB4MzcpICYmICh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+cHJlZml4Ci0JCTw9IHZjcHUtPmt2bS0+YXJjaC5ndWVzdF9tZW1zaXplIC0gMipQQUdFX1NJWkUpKXsKKwkJPD0ga3ZtX3MzOTBfdmNwdV9nZXRfbWVtc2l6ZSh2Y3B1KSAtIDIqUEFHRV9TSVpFKSkgewogCQlyYyA9IGZhdWx0X2luX3BhZ2VzX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKikKLQkJCSB2Y3B1LT5rdm0tPmFyY2guZ3Vlc3Rfb3JpZ2luICsKKwkJCSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zb3IgKwogCQkJIHZjcHUtPmFyY2guc2llX2Jsb2NrLT5wcmVmaXgsCiAJCQkgMipQQUdFX1NJWkUpOwogCQlpZiAocmMpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwppbmRleCA0ZDYxMzQxLi4yYzJmOTgzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCisrKyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKQEAgLTI4Myw3ICsyODMsNyBAQAogCXJldHVybiAxOwogfQogCi1pbnQga3ZtX2NwdV9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyBpbnQga3ZtX2NwdV9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX3MzOTBfbG9jYWxfaW50ZXJydXB0ICpsaSA9ICZ2Y3B1LT5hcmNoLmxvY2FsX2ludDsKIAlzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaSA9IHZjcHUtPmFyY2gubG9jYWxfaW50LmZsb2F0X2ludDsKQEAgLTMyMCwxMiArMzIwLDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBrdm1fYXJjaF9pbnRlcnJ1cHRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JLyogZG8gcmVhbCBjaGVjayBoZXJlICovCi0JcmV0dXJuIDE7Ci19Ci0KIGludCBrdm1fY3B1X2hhc19wZW5kaW5nX3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCA5MGQ5ZDFiLi4wN2NlZDg5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHMzOTBob3N0LmMgLS0gIGhvc3RpbmcgelNlcmllcyBrZXJuZWwgdmlydHVhbCBtYWNoaW5lcwogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOAorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4LDIwMDkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyIG9ubHkpCkBAIC0xMCw2ICsxMCw3IEBACiAgKiAgICBBdXRob3Iocyk6IENhcnN0ZW4gT3R0ZSA8Y290dGVAZGUuaWJtLmNvbT4KICAqICAgICAgICAgICAgICAgQ2hyaXN0aWFuIEJvcm50cmFlZ2VyIDxib3JudHJhZWdlckBkZS5pYm0uY29tPgogICogICAgICAgICAgICAgICBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICAgICAgQ2hyaXN0aWFuIEVocmhhcmR0IDxlaHJoYXJkdEBkZS5pYm0uY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgpAQCAtMjEwLDEzICsyMTEsMTcgQEAKIHN0YXRpYyB2b2lkIGt2bV9mcmVlX3ZjcHVzKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKSB7Ci0JCWlmIChrdm0tPnZjcHVzW2ldKSB7Ci0JCQlrdm1fYXJjaF92Y3B1X2Rlc3Ryb3koa3ZtLT52Y3B1c1tpXSk7Ci0JCQlrdm0tPnZjcHVzW2ldID0gTlVMTDsKLQkJfQotCX0KKwlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pCisJCWt2bV9hcmNoX3ZjcHVfZGVzdHJveSh2Y3B1KTsKKworCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJZm9yIChpID0gMDsgaSA8IGF0b21pY19yZWFkKCZrdm0tPm9ubGluZV92Y3B1cyk7IGkrKykKKwkJa3ZtLT52Y3B1c1tpXSA9IE5VTEw7CisKKwlhdG9taWNfc2V0KCZrdm0tPm9ubGluZV92Y3B1cywgMCk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOwogfQogCiB2b2lkIGt2bV9hcmNoX3N5bmNfZXZlbnRzKHN0cnVjdCBrdm0gKmt2bSkKQEAgLTI3OCwxNiArMjgzLDEwIEBACiAJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdiZWEgPSAxOwogfQogCi0vKiBUaGUgY3VycmVudCBjb2RlIGNhbiBoYXZlIHVwIHRvIDI1NiBwYWdlcyBmb3IgdmlydGlvICovCi0jZGVmaW5lIFZJUlRJT0RFU0NTUEFDRSAoMjU2dWwgKiA0MDk2dWwpCi0KIGludCBrdm1fYXJjaF92Y3B1X3NldHVwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlhdG9taWNfc2V0KCZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y3B1ZmxhZ3MsIENQVVNUQVRfWkFSQ0gpOwotCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5nbXNsbSA9IHZjcHUtPmt2bS0+YXJjaC5ndWVzdF9tZW1zaXplICsKLQkJCQkgICAgICB2Y3B1LT5rdm0tPmFyY2guZ3Vlc3Rfb3JpZ2luICsKLQkJCQkgICAgICBWSVJUSU9ERVNDU1BBQ0UgLSAxdWw7Ci0JdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc29yID0gdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X29yaWdpbjsKKwlzZXRfYml0KEtWTV9SRVFfTU1VX1JFTE9BRCwgJnZjcHUtPnJlcXVlc3RzKTsKIAl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+ZWNiICAgPSAyOwogCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5lY2EgICA9IDB4QzEwMDIwMDFVOwogCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5mYWMgICA9IChpbnQpIChsb25nKSBmYWNpbGl0aWVzOwpAQCAtMzE5LDggKzMxOCw2IEBACiAJQlVHX09OKCFrdm0tPmFyY2guc2NhKTsKIAlpZiAoIWt2bS0+YXJjaC5zY2EtPmNwdVtpZF0uc2RhKQogCQlrdm0tPmFyY2guc2NhLT5jcHVbaWRdLnNkYSA9IChfX3U2NCkgdmNwdS0+YXJjaC5zaWVfYmxvY2s7Ci0JZWxzZQotCQlCVUdfT04oIWt2bS0+dmNwdXNbaWRdKTsgLyogdmNwdSBkb2VzIGFscmVhZHkgZXhpc3QgKi8KIAl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+c2Nhb2ggPSAoX191MzIpKCgoX191NjQpa3ZtLT5hcmNoLnNjYSkgPj4gMzIpOwogCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5zY2FvbCA9IChfX3UzMikoX191NjQpa3ZtLT5hcmNoLnNjYTsKIApAQCAtNDkwLDkgKzQ4NywxNSBAQAogCiAJdmNwdV9sb2FkKHZjcHUpOwogCityZXJ1bl92Y3B1OgorCWlmICh2Y3B1LT5yZXF1ZXN0cykKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX01NVV9SRUxPQUQsICZ2Y3B1LT5yZXF1ZXN0cykpCisJCQlrdm1fczM5MF92Y3B1X3NldF9tZW0odmNwdSk7CisKIAkvKiB2ZXJpZnksIHRoYXQgbWVtb3J5IGhhcyBiZWVuIHJlZ2lzdGVyZWQgKi8KLQlpZiAoIXZjcHUtPmt2bS0+YXJjaC5ndWVzdF9tZW1zaXplKSB7CisJaWYgKCF2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zbG0pIHsKIAkJdmNwdV9wdXQodmNwdSk7CisJCVZDUFVfRVZFTlQodmNwdSwgMywgIiVzIiwgIm5vIG1lbW9yeSByZWdpc3RlcmVkIHRvIHJ1biB2Y3B1Iik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTA5LDYgKzUxMiw3IEBACiAJCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LmFkZHIgPSBrdm1fcnVuLT5zMzkwX3NpZWljLmFkZHI7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0VYSVRfVU5LTk9XTjoKKwljYXNlIEtWTV9FWElUX0lOVFI6CiAJY2FzZSBLVk1fRVhJVF9TMzkwX1JFU0VUOgogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNTIyLDggKzUyNiwxMyBAQAogCQlyYyA9IGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdCh2Y3B1KTsKIAl9IHdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgJiYgIXJjKTsKIAotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJiAhcmMpCisJaWYgKHJjID09IFNJRV9JTlRFUkNFUFRfUkVSVU5WQ1BVKQorCQlnb3RvIHJlcnVuX3ZjcHU7CisKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgJiYgIXJjKSB7CisJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU5UUjsKIAkJcmMgPSAtRUlOVFI7CisJfQogCiAJaWYgKHJjID09IC1FTk9UU1VQUCkgewogCQkvKiBpbnRlcmNlcHQgY2Fubm90IGJlIGhhbmRsZWQgaW4ta2VybmVsLCBwcmVwYXJlIGt2bS1ydW4gKi8KQEAgLTY3Niw2ICs2ODUsNyBAQAogCQkJCWludCB1c2VyX2FsbG9jKQogewogCWludCBpOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAogCS8qIEEgZmV3IHNhbml0eSBjaGVja3MuIFdlIGNhbiBoYXZlIGV4YWN0bHkgb25lIG1lbW9yeSBzbG90IHdoaWNoIGhhcwogCSAgIHRvIHN0YXJ0IGF0IGd1ZXN0IHZpcnR1YWwgemVybyBhbmQgd2hpY2ggaGFzIHRvIGJlIGxvY2F0ZWQgYXQgYQpAQCAtNjg0LDcgKzY5NCw3IEBACiAJICAgdm1hcy4gSXQgaXMgb2theSB0byBtbWFwKCkgYW5kIG11bm1hcCgpIHN0dWZmIGluIHRoaXMgc2xvdCBhZnRlcgogCSAgIGRvaW5nIHRoaXMgY2FsbCBhdCBhbnkgdGltZSAqLwogCi0JaWYgKG1lbS0+c2xvdCB8fCBrdm0tPmFyY2guZ3Vlc3RfbWVtc2l6ZSkKKwlpZiAobWVtLT5zbG90KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChtZW0tPmd1ZXN0X3BoeXNfYWRkcikKQEAgLTY5OSwzNiArNzA5LDE0IEBACiAJaWYgKCF1c2VyX2FsbG9jKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIGxvY2sgYWxsIHZjcHVzICovCi0JZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7ICsraSkgewotCQlpZiAoIWt2bS0+dmNwdXNbaV0pCisJLyogcmVxdWVzdCB1cGRhdGUgb2Ygc2llIGNvbnRyb2wgYmxvY2sgZm9yIGFsbCBhdmFpbGFibGUgdmNwdXMgKi8KKwlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoS1ZNX1JFUV9NTVVfUkVMT0FELCAmdmNwdS0+cmVxdWVzdHMpKQogCQkJY29udGludWU7Ci0JCWlmICghbXV0ZXhfdHJ5bG9jaygma3ZtLT52Y3B1c1tpXS0+bXV0ZXgpKQotCQkJZ290byBmYWlsX291dDsKLQl9Ci0KLQlrdm0tPmFyY2guZ3Vlc3Rfb3JpZ2luID0gbWVtLT51c2Vyc3BhY2VfYWRkcjsKLQlrdm0tPmFyY2guZ3Vlc3RfbWVtc2l6ZSA9IG1lbS0+bWVtb3J5X3NpemU7Ci0KLQkvKiB1cGRhdGUgc2llIGNvbnRyb2wgYmxvY2tzLCBhbmQgdW5sb2NrIGFsbCB2Y3B1cyAqLwotCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyArK2kpIHsKLQkJaWYgKGt2bS0+dmNwdXNbaV0pIHsKLQkJCWt2bS0+dmNwdXNbaV0tPmFyY2guc2llX2Jsb2NrLT5nbXNvciA9Ci0JCQkJa3ZtLT5hcmNoLmd1ZXN0X29yaWdpbjsKLQkJCWt2bS0+dmNwdXNbaV0tPmFyY2guc2llX2Jsb2NrLT5nbXNsbSA9Ci0JCQkJa3ZtLT5hcmNoLmd1ZXN0X21lbXNpemUgKwotCQkJCWt2bS0+YXJjaC5ndWVzdF9vcmlnaW4gKwotCQkJCVZJUlRJT0RFU0NTUEFDRSAtIDF1bDsKLQkJCW11dGV4X3VubG9jaygma3ZtLT52Y3B1c1tpXS0+bXV0ZXgpOwotCQl9CisJCWt2bV9zMzkwX2luamVjdF9zaWdwX3N0b3AodmNwdSwgQUNUSU9OX1JFTE9BRFZDUFVfT05fU1RPUCk7CiAJfQogCiAJcmV0dXJuIDA7Ci0KLWZhaWxfb3V0OgotCWZvciAoOyBpID49IDA7IGktLSkKLQkJbXV0ZXhfdW5sb2NrKCZrdm0tPnZjcHVzW2ldLT5tdXRleCk7Ci0JcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93KHN0cnVjdCBrdm0gKmt2bSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaCBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAppbmRleCA3NDhmZWU4Li5lYzVlZWU3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGt2bV9zMzkwLmggLSAgZGVmaW5pdGlvbiBmb3Iga3ZtIG9uIHMzOTAKICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOCwyMDA5CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMiBvbmx5KQpAQCAtOSw2ICs5LDcgQEAKICAqCiAgKiAgICBBdXRob3Iocyk6IENhcnN0ZW4gT3R0ZSA8Y290dGVAZGUuaWJtLmNvbT4KICAqICAgICAgICAgICAgICAgQ2hyaXN0aWFuIEJvcm50cmFlZ2VyIDxib3JudHJhZWdlckBkZS5pYm0uY29tPgorICogICAgICAgICAgICAgICBDaHJpc3RpYW4gRWhyaGFyZHQgPGVocmhhcmR0QGRlLmlibS5jb20+CiAgKi8KIAogI2lmbmRlZiBBUkNIX1MzOTBfS1ZNX1MzOTBfSApAQCAtMTgsOCArMTksMTMgQEAKICNpbmNsdWRlIDxsaW51eC9rdm0uaD4KICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogCisvKiBUaGUgY3VycmVudCBjb2RlIGNhbiBoYXZlIHVwIHRvIDI1NiBwYWdlcyBmb3IgdmlydGlvICovCisjZGVmaW5lIFZJUlRJT0RFU0NTUEFDRSAoMjU2dWwgKiA0MDk2dWwpCisKIHR5cGVkZWYgaW50ICgqaW50ZXJjZXB0X2hhbmRsZXJfdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAorLyogbmVnYXRpdiB2YWx1ZXMgYXJlIGVycm9yIGNvZGVzLCBwb3NpdGl2ZSB2YWx1ZXMgZm9yIGludGVybmFsIGNvbmRpdGlvbnMgKi8KKyNkZWZpbmUgU0lFX0lOVEVSQ0VQVF9SRVJVTlZDUFUJCSgxPDwwKQogaW50IGt2bV9oYW5kbGVfc2llX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAjZGVmaW5lIFZNX0VWRU5UKGRfa3ZtLCBkX2xvZ2xldmVsLCBkX3N0cmluZywgZF9hcmdzLi4uKVwKQEAgLTUwLDYgKzU2LDMwIEBACiBpbnQga3ZtX3MzOTBfaW5qZWN0X3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQlzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0ICpzMzkwaW50KTsKIGludCBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgY29kZSk7CitpbnQga3ZtX3MzOTBfaW5qZWN0X3NpZ3Bfc3RvcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBhY3Rpb24pOworCitzdGF0aWMgaW5saW5lIGludCBrdm1fczM5MF92Y3B1X2dldF9tZW1zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc2xtCisJCS0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc29yCisJCS0gVklSVElPREVTQ1NQQUNFICsgMXVsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX3MzOTBfdmNwdV9zZXRfbWVtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW07CisKKwlkb3duX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJbWVtID0gJnZjcHUtPmt2bS0+bWVtc2xvdHNbMF07CisKKwl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zb3IgPSBtZW0tPnVzZXJzcGFjZV9hZGRyOworCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5nbXNsbSA9CisJCW1lbS0+dXNlcnNwYWNlX2FkZHIgKworCQkobWVtLT5ucGFnZXMgPDwgUEFHRV9TSElGVCkgKworCQlWSVJUSU9ERVNDU1BBQ0UgLSAxdWw7CisKKwl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOworfQogCiAvKiBpbXBsZW1lbnRlZCBpbiBwcml2LmMgKi8KIGludCBrdm1fczM5MF9oYW5kbGVfYjIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vc2lncC5jIGIvYXJjaC9zMzkwL2t2bS9zaWdwLmMKaW5kZXggMGVmODFkNi4uNDBjOGM2NyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9zaWdwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9zaWdwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogc2lncC5jIC0gaGFuZGxpbmdlIGludGVycHJvY2Vzc29yIGNvbW11bmljYXRpb24KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOCwyMDA5CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMiBvbmx5KQpAQCAtOSw2ICs5LDcgQEAKICAqCiAgKiAgICBBdXRob3Iocyk6IENhcnN0ZW4gT3R0ZSA8Y290dGVAZGUuaWJtLmNvbT4KICAqICAgICAgICAgICAgICAgQ2hyaXN0aWFuIEJvcm50cmFlZ2VyIDxib3JudHJhZWdlckBkZS5pYm0uY29tPgorICogICAgICAgICAgICAgICBDaHJpc3RpYW4gRWhyaGFyZHQgPGVocmhhcmR0QGRlLmlibS5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgpAQCAtMTA3LDQ2ICsxMDgsNTcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgX19zaWdwX3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgY3B1X2FkZHIsIGludCBzdG9yZSkKK3N0YXRpYyBpbnQgX19pbmplY3Rfc2lncF9zdG9wKHN0cnVjdCBrdm1fczM5MF9sb2NhbF9pbnRlcnJ1cHQgKmxpLCBpbnQgYWN0aW9uKQoreworCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aTsKKworCWludGkgPSBremFsbG9jKHNpemVvZigqaW50aSksIEdGUF9LRVJORUwpOworCWlmICghaW50aSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaW50aS0+dHlwZSA9IEtWTV9TMzkwX1NJR1BfU1RPUDsKKworCXNwaW5fbG9ja19iaCgmbGktPmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmludGktPmxpc3QsICZsaS0+bGlzdCk7CisJYXRvbWljX3NldCgmbGktPmFjdGl2ZSwgMSk7CisJYXRvbWljX3NldF9tYXNrKENQVVNUQVRfU1RPUF9JTlQsIGxpLT5jcHVmbGFncyk7CisJbGktPmFjdGlvbl9iaXRzIHw9IGFjdGlvbjsKKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmbGktPndxKSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZsaS0+d3EpOworCXNwaW5fdW5sb2NrX2JoKCZsaS0+bG9jayk7CisKKwlyZXR1cm4gMDsgLyogb3JkZXIgYWNjZXB0ZWQgKi8KK30KKworc3RhdGljIGludCBfX3NpZ3Bfc3RvcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBjcHVfYWRkciwgaW50IGFjdGlvbikKIHsKIAlzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0ICpmaSA9ICZ2Y3B1LT5rdm0tPmFyY2guZmxvYXRfaW50OwogCXN0cnVjdCBrdm1fczM5MF9sb2NhbF9pbnRlcnJ1cHQgKmxpOwotCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHRfaW5mbyAqaW50aTsKIAlpbnQgcmM7CiAKIAlpZiAoY3B1X2FkZHIgPj0gS1ZNX01BWF9WQ1BVUykKIAkJcmV0dXJuIDM7IC8qIG5vdCBvcGVyYXRpb25hbCAqLwogCi0JaW50aSA9IGt6YWxsb2Moc2l6ZW9mKCppbnRpKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbnRpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWludGktPnR5cGUgPSBLVk1fUzM5MF9TSUdQX1NUT1A7Ci0KIAlzcGluX2xvY2soJmZpLT5sb2NrKTsKIAlsaSA9IGZpLT5sb2NhbF9pbnRbY3B1X2FkZHJdOwogCWlmIChsaSA9PSBOVUxMKSB7CiAJCXJjID0gMzsgLyogbm90IG9wZXJhdGlvbmFsICovCi0JCWtmcmVlKGludGkpOwogCQlnb3RvIHVubG9jazsKIAl9Ci0Jc3Bpbl9sb2NrX2JoKCZsaS0+bG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmaW50aS0+bGlzdCwgJmxpLT5saXN0KTsKLQlhdG9taWNfc2V0KCZsaS0+YWN0aXZlLCAxKTsKLQlhdG9taWNfc2V0X21hc2soQ1BVU1RBVF9TVE9QX0lOVCwgbGktPmNwdWZsYWdzKTsKLQlpZiAoc3RvcmUpCi0JCWxpLT5hY3Rpb25fYml0cyB8PSBBQ1RJT05fU1RPUkVfT05fU1RPUDsKLQlsaS0+YWN0aW9uX2JpdHMgfD0gQUNUSU9OX1NUT1BfT05fU1RPUDsKLQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmbGktPndxKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZsaS0+d3EpOwotCXNwaW5fdW5sb2NrX2JoKCZsaS0+bG9jayk7Ci0JcmMgPSAwOyAvKiBvcmRlciBhY2NlcHRlZCAqLworCisJcmMgPSBfX2luamVjdF9zaWdwX3N0b3AobGksIGFjdGlvbik7CisKIHVubG9jazoKIAlzcGluX3VubG9jaygmZmktPmxvY2spOwogCVZDUFVfRVZFTlQodmNwdSwgNCwgInNlbnQgc2lncCBzdG9wIHRvIGNwdSAleCIsIGNwdV9hZGRyKTsKIAlyZXR1cm4gcmM7CiB9CiAKK2ludCBrdm1fczM5MF9pbmplY3Rfc2lncF9zdG9wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGFjdGlvbikKK3sKKwlzdHJ1Y3Qga3ZtX3MzOTBfbG9jYWxfaW50ZXJydXB0ICpsaSA9ICZ2Y3B1LT5hcmNoLmxvY2FsX2ludDsKKwlyZXR1cm4gX19pbmplY3Rfc2lncF9zdG9wKGxpLCBhY3Rpb24pOworfQorCiBzdGF0aWMgaW50IF9fc2lncF9zZXRfYXJjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBwYXJhbWV0ZXIpCiB7CiAJaW50IHJjOwpAQCAtMTc3LDkgKzE4OSw5IEBACiAJLyogbWFrZSBzdXJlIHRoYXQgdGhlIG5ldyB2YWx1ZSBpcyB2YWxpZCBtZW1vcnkgKi8KIAlhZGRyZXNzID0gYWRkcmVzcyAmIDB4N2ZmZmUwMDB1OwogCWlmICgoY29weV9mcm9tX2d1ZXN0KHZjcHUsICZ0bXAsCi0JCSh1NjQpIChhZGRyZXNzICsgdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X29yaWdpbikgLCAxKSkgfHwKKwkJKHU2NCkgKGFkZHJlc3MgKyB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zb3IpICwgMSkpIHx8CiAJICAgKGNvcHlfZnJvbV9ndWVzdCh2Y3B1LCAmdG1wLCAodTY0KSAoYWRkcmVzcyArCi0JCQl2Y3B1LT5rdm0tPmFyY2guZ3Vlc3Rfb3JpZ2luICsgUEFHRV9TSVpFKSwgMSkpKSB7CisJCQl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zb3IgKyBQQUdFX1NJWkUpLCAxKSkpIHsKIAkJKnJlZyB8PSBTSUdQX1NUQVRfSU5WQUxJRF9QQVJBTUVURVI7CiAJCXJldHVybiAxOyAvKiBpbnZhbGlkIHBhcmFtZXRlciAqLwogCX0KQEAgLTI2MiwxMSArMjc0LDExIEBACiAJCWJyZWFrOwogCWNhc2UgU0lHUF9TVE9QOgogCQl2Y3B1LT5zdGF0Lmluc3RydWN0aW9uX3NpZ3Bfc3RvcCsrOwotCQlyYyA9IF9fc2lncF9zdG9wKHZjcHUsIGNwdV9hZGRyLCAwKTsKKwkJcmMgPSBfX3NpZ3Bfc3RvcCh2Y3B1LCBjcHVfYWRkciwgQUNUSU9OX1NUT1BfT05fU1RPUCk7CiAJCWJyZWFrOwogCWNhc2UgU0lHUF9TVE9QX1NUT1JFX1NUQVRVUzoKIAkJdmNwdS0+c3RhdC5pbnN0cnVjdGlvbl9zaWdwX3N0b3ArKzsKLQkJcmMgPSBfX3NpZ3Bfc3RvcCh2Y3B1LCBjcHVfYWRkciwgMSk7CisJCXJjID0gX19zaWdwX3N0b3AodmNwdSwgY3B1X2FkZHIsIEFDVElPTl9TVE9SRV9PTl9TVE9QKTsKIAkJYnJlYWs7CiAJY2FzZSBTSUdQX1NFVF9BUkNIOgogCQl2Y3B1LT5zdGF0Lmluc3RydWN0aW9uX3NpZ3BfYXJjaCsrOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL01ha2VmaWxlIGIvYXJjaC9zMzkwL21tL01ha2VmaWxlCmluZGV4IGRiMDU2NjEuLmVlYzA1NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAvbW0vTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXggczM5MC1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZXIuCiAjCiAKLW9iai15CSA6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIHBndGFibGUubyBtYWNjZXNzLm8KK29iai15CSA6PSBpbml0Lm8gZmF1bHQubyBleHRtZW0ubyBtbWFwLm8gdm1lbS5vIHBndGFibGUubyBtYWNjZXNzLm8gXAorCSAgICBwYWdlLXN0YXRlcy5vCiBvYmotJChDT05GSUdfQ01NKSArPSBjbW0ubwogb2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgKz0gaHVnZXRsYnBhZ2Uubwotb2JqLSQoQ09ORklHX1BBR0VfU1RBVEVTKSArPSBwYWdlLXN0YXRlcy5vCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCmluZGV4IGU1ZTExOWYuLjFhYmJhZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC0xMCw2ICsxMCw3IEBACiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTUgIExpbnVzIFRvcnZhbGRzCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zMDUsNyArMzA2LDcgQEAKIAkgKiBpbnRlcnJ1cHRzIGFnYWluIGFuZCB0aGVuIHNlYXJjaCB0aGUgVk1BcwogCSAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKLQorCXBlcmZfc3djb3VudGVyX2V2ZW50KFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMsIDEsIDAsIHJlZ3MsIGFkZHJlc3MpOwogCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAogCXNpX2NvZGUgPSBTRUdWX01BUEVSUjsKQEAgLTM2MywxMSArMzY0LDE1IEBACiAJCX0KIAkJQlVHKCk7CiAJfQotCWlmIChmYXVsdCAmIFZNX0ZBVUxUX01BSk9SKQorCWlmIChmYXVsdCAmIFZNX0ZBVUxUX01BSk9SKSB7CiAJCXRzay0+bWFqX2ZsdCsrOwotCWVsc2UKKwkJcGVyZl9zd2NvdW50ZXJfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NQUosIDEsIDAsCisJCQkJICAgICByZWdzLCBhZGRyZXNzKTsKKwl9IGVsc2UgewogCQl0c2stPm1pbl9mbHQrKzsKLQorCQlwZXJmX3N3Y291bnRlcl9ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwKKwkJCQkgICAgIHJlZ3MsIGFkZHJlc3MpOworCX0KICAgICAgICAgdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkvKgogCSAqIFRoZSBpbnN0cnVjdGlvbiB0aGF0IGNhdXNlZCB0aGUgcHJvZ3JhbSBjaGVjayB3aWxsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGFnZS1zdGF0ZXMuYyBiL2FyY2gvczM5MC9tbS9wYWdlLXN0YXRlcy5jCmluZGV4IGZjMGFkNzMuLmY5MmVjMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wYWdlLXN0YXRlcy5jCisrKyBiL2FyY2gvczM5MC9tbS9wYWdlLXN0YXRlcy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvczM5MC9tbS9wYWdlLXN0YXRlcy5jCi0gKgogICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4CiAgKgogICogR3Vlc3QgcGFnZSBoaW50aW5nIGZvciB1bnVzZWQgcGFnZXMuCkBAIC0xNywxMSArMTUsMTIgQEAKICNkZWZpbmUgRVNTQV9TRVRfU1RBQkxFCQkxCiAjZGVmaW5lIEVTU0FfU0VUX1VOVVNFRAkJMgogCi1zdGF0aWMgaW50IGNtbWFfZmxhZzsKK3N0YXRpYyBpbnQgY21tYV9mbGFnID0gMTsKIAogc3RhdGljIGludCBfX2luaXQgY21tYShjaGFyICpzdHIpCiB7CiAJY2hhciAqcGFybTsKKwogCXBhcm0gPSBzdHJzdHJpcChzdHIpOwogCWlmIChzdHJjbXAocGFybSwgInllcyIpID09IDAgfHwgc3RyY21wKHBhcm0sICJvbiIpID09IDApIHsKIAkJY21tYV9mbGFnID0gMTsKQEAgLTMyLDcgKzMxLDYgQEAKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9Ci0KIF9fc2V0dXAoImNtbWE9IiwgY21tYSk7CiAKIHZvaWQgX19pbml0IGNtbWFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BndGFibGUuYyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKaW5kZXggNTY1NjY3Mi4uYzcwMjE1MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuYworKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCkBAIC03OCw5ICs3OCw5IEBACiAJCX0KIAkJcGFnZS0+aW5kZXggPSBwYWdlX3RvX3BoeXMoc2hhZG93KTsKIAl9Ci0Jc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlzcGluX2xvY2soJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7CiAJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LmNyc3RfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCXNwaW5fdW5sb2NrKCZtbS0+Y29udGV4dC5saXN0X2xvY2spOwogCXJldHVybiAodW5zaWduZWQgbG9uZyAqKSBwYWdlX3RvX3BoeXMocGFnZSk7CiB9CiAKQEAgLTg5LDkgKzg5LDkgQEAKIAl1bnNpZ25lZCBsb25nICpzaGFkb3cgPSBnZXRfc2hhZG93X3RhYmxlKHRhYmxlKTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZSh0YWJsZSk7CiAKLQlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCXNwaW5fbG9jaygmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKIAlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJc3Bpbl91bmxvY2soJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7CiAJaWYgKHNoYWRvdykKIAkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgc2hhZG93LCBBTExPQ19PUkRFUik7CiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgdGFibGUsIEFMTE9DX09SREVSKTsKQEAgLTE4Miw3ICsxODIsNyBAQAogCXVuc2lnbmVkIGxvbmcgYml0czsKIAogCWJpdHMgPSAobW0tPmNvbnRleHQubm9leGVjIHx8IG1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkgPyAzVUwgOiAxVUw7Ci0Jc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlzcGluX2xvY2soJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7CiAJcGFnZSA9IE5VTEw7CiAJaWYgKCFsaXN0X2VtcHR5KCZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpKSB7CiAJCXBhZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KCZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QsCkBAIC0xOTEsNyArMTkxLDcgQEAKIAkJCXBhZ2UgPSBOVUxMOwogCX0KIAlpZiAoIXBhZ2UpIHsKLQkJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCQlzcGluX3VubG9jaygmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKIAkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOwogCQlpZiAoIXBhZ2UpCiAJCQlyZXR1cm4gTlVMTDsKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQkJY2xlYXJfdGFibGVfcGdzdGVzKHRhYmxlKTsKIAkJZWxzZQogCQkJY2xlYXJfdGFibGUodGFibGUsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRSk7Ci0JCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJCXNwaW5fbG9jaygmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKIAkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7CiAJfQogCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgcGFnZV90b19waHlzKHBhZ2UpOwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJcGFnZS0+ZmxhZ3MgfD0gYml0czsKIAlpZiAoKHBhZ2UtPmZsYWdzICYgRlJBR19NQVNLKSA9PSAoKDFVTCA8PCBUQUJMRVNfUEVSX1BBR0UpIC0gMSkpCiAJCWxpc3RfbW92ZV90YWlsKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOwotCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlzcGluX3VubG9jaygmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKIAlyZXR1cm4gdGFibGU7CiB9CiAKQEAgLTIyNSw3ICsyMjUsNyBAQAogCWJpdHMgPSAobW0tPmNvbnRleHQubm9leGVjIHx8IG1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkgPyAzVUwgOiAxVUw7CiAJYml0cyA8PD0gKF9fcGEodGFibGUpICYgKFBBR0VfU0laRSAtIDEpKSAvIDI1NiAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsKIAlwYWdlID0gcGZuX3RvX3BhZ2UoX19wYSh0YWJsZSkgPj4gUEFHRV9TSElGVCk7Ci0Jc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlzcGluX2xvY2soJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7CiAJcGFnZS0+ZmxhZ3MgXj0gYml0czsKIAlpZiAocGFnZS0+ZmxhZ3MgJiBGUkFHX01BU0spIHsKIAkJLyogUGFnZSBub3cgaGFzIHNvbWUgZnJlZSBwZ3RhYmxlIGZyYWdtZW50cy4gKi8KQEAgLTIzNCw3ICsyMzQsNyBAQAogCX0gZWxzZQogCQkvKiBBbGwgZnJhZ21lbnRzIG9mIHRoZSA0SyBwYWdlIGhhdmUgYmVlbiBmcmVlZC4gKi8KIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0Jc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCXNwaW5fdW5sb2NrKCZtbS0+Y29udGV4dC5saXN0X2xvY2spOwogCWlmIChwYWdlKSB7CiAJCXBndGFibGVfcGFnZV9kdG9yKHBhZ2UpOwogCQlfX2ZyZWVfcGFnZShwYWdlKTsKQEAgLTI0NSw3ICsyNDUsNyBAQAogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCi0Jc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlzcGluX2xvY2soJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7CiAJLyogRnJlZSBzaGFkb3cgcmVnaW9uIGFuZCBzZWdtZW50IHRhYmxlcy4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsICZtbS0+Y29udGV4dC5jcnN0X2xpc3QsIGxydSkKIAkJaWYgKHBhZ2UtPmluZGV4KSB7CkBAIC0yNTUsNyArMjU1LDcgQEAKIAkvKiAiRnJlZSIgc2Vjb25kIGhhbHZlcyBvZiBwYWdlIHRhYmxlcy4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QsIGxydSkKIAkJcGFnZS0+ZmxhZ3MgJj0gflNFQ09ORF9IQUxWRVM7Ci0Jc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCXNwaW5fdW5sb2NrKCZtbS0+Y29udGV4dC5saXN0X2xvY2spOwogCW1tLT5jb250ZXh0Lm5vZXhlYyA9IDA7CiAJdXBkYXRlX21tKG1tLCB0c2spOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3ZtZW0uYyBiL2FyY2gvczM5MC9tbS92bWVtLmMKaW5kZXggZTQ4NjhiZi4uNWY5MWEzOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3ZtZW0uYworKysgYi9hcmNoL3MzOTAvbW0vdm1lbS5jCkBAIC0zMzEsNiArMzMxLDcgQEAKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAJaW50IGk7CiAKKwlzcGluX2xvY2tfaW5pdCgmaW5pdF9tbS5jb250ZXh0Lmxpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmluaXRfbW0uY29udGV4dC5jcnN0X2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZpbml0X21tLmNvbnRleHQucGd0YWJsZV9saXN0KTsKIAlpbml0X21tLmNvbnRleHQubm9leGVjID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9wb3dlci9NYWtlZmlsZSBiL2FyY2gvczM5MC9wb3dlci9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTczYmI0NS4uMDAwMDAwMAotLS0gYS9hcmNoL3MzOTAvcG93ZXIvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHMzOTAgUE0gc3VwcG9ydAotIwotCi1vYmotJChDT05GSUdfSElCRVJOQVRJT04pICs9IHN1c3BlbmQubwotb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKSArPSBzd3N1c3Aubwotb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKSArPSBzd3N1c3BfNjQubwotb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKSArPSBzd3N1c3BfYXNtNjQubwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL3Bvd2VyL3N1c3BlbmQuYyBiL2FyY2gvczM5MC9wb3dlci9zdXNwZW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMzUxZWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9zMzkwL3Bvd2VyL3N1c3BlbmQuYworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBTdXNwZW5kIHN1cHBvcnQgc3BlY2lmaWMgZm9yIHMzOTAuCi0gKgotICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA5Ci0gKgotICogQXV0aG9yKHMpOiBIYW5zLUpvYWNoaW0gUGljaHQgPGhhbnNAbGludXgudm5ldC5pYm0uY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KLSNpbmNsdWRlIDxsaW51eC9wZm4uaD4KLSNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vaXBsLmg+Ci0KLS8qCi0gKiBSZWZlcmVuY2VzIHRvIHNlY3Rpb24gYm91bmRhcmllcwotICovCi1leHRlcm4gY29uc3Qgdm9pZCBfX25vc2F2ZV9iZWdpbiwgX19ub3NhdmVfZW5kOwotCi0vKgotICogIGNoZWNrIGlmIGdpdmVuIHBmbiBpcyBpbiB0aGUgJ25vc2F2ZScgb3IgaW4gdGhlIHJlYWQgb25seSBOU1Mgc2VjdGlvbgotICovCi1pbnQgcGZuX2lzX25vc2F2ZSh1bnNpZ25lZCBsb25nIHBmbikKLXsKLQl1bnNpZ25lZCBsb25nIG5vc2F2ZV9iZWdpbl9wZm4gPSBfX3BhKCZfX25vc2F2ZV9iZWdpbikgPj4gUEFHRV9TSElGVDsKLQl1bnNpZ25lZCBsb25nIG5vc2F2ZV9lbmRfcGZuID0gUEFHRV9BTElHTihfX3BhKCZfX25vc2F2ZV9lbmQpKQotCQkJCQk+PiBQQUdFX1NISUZUOwotCXVuc2lnbmVkIGxvbmcgZXNoYXJlZF9wZm4gPSBQRk5fRE9XTihfX3BhKCZfZXNoYXJlZCkpIC0gMTsKLQl1bnNpZ25lZCBsb25nIHN0ZXh0X3BmbiA9IFBGTl9ET1dOKF9fcGEoJl9zdGV4dCkpOwotCi0JaWYgKHBmbiA+PSBub3NhdmVfYmVnaW5fcGZuICYmIHBmbiA8IG5vc2F2ZV9lbmRfcGZuKQotCQlyZXR1cm4gMTsKLQlpZiAocGZuID49IHN0ZXh0X3BmbiAmJiBwZm4gPD0gZXNoYXJlZF9wZm4pIHsKLQkJaWYgKGlwbF9pbmZvLnR5cGUgPT0gSVBMX1RZUEVfTlNTKQotCQkJcmV0dXJuIDE7Ci0JfSBlbHNlIGlmICgodHByb3QocGZuICogUEFHRV9TSVpFKSAmJiBwZm4gPiAwKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvcG93ZXIvc3dzdXNwLmMgYi9hcmNoL3MzOTAvcG93ZXIvc3dzdXNwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMWY1YzYuLjAwMDAwMDAKLS0tIGEvYXJjaC9zMzkwL3Bvd2VyL3N3c3VzcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIFN1cHBvcnQgZm9yIHN1c3BlbmQgYW5kIHJlc3VtZSBvbiBzMzkwCi0gKgotICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA5Ci0gKgotICogQXV0aG9yKHMpOiBIYW5zLUpvYWNoaW0gUGljaHQgPGhhbnNAbGludXgudm5ldC5pYm0uY29tPgotICoKLSAqLwotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotCi12b2lkIHNhdmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpCi17Ci0JLyogc3dzdXNwX2FyY2hfc3VzcGVuZCgpIGFjdHVhbGx5IHNhdmVzIGFsbCBjcHUgcmVnaXN0ZXIgY29udGVudHMuCi0JICogTWFjaGluZSBjaGVja3MgbXVzdCBiZSBkaXNhYmxlZCBzaW5jZSBzd3N1c3BfYXJjaF9zdXNwZW5kKCkgc3RvcmVzCi0JICogcmVnaXN0ZXIgY29udGVudHMgdG8gdGhlaXIgbG93Y29yZSBzYXZlIGFyZWFzLiBUaGF0J3MgdGhlIHNhbWUKLQkgKiBwbGFjZSB3aGVyZSByZWdpc3RlciBjb250ZW50cyBvbiBtYWNoaW5lIGNoZWNrcyB3b3VsZCBiZSBzYXZlZC4KLQkgKiBUbyBhdm9pZCByZWdpc3RlciBjb3JydXB0aW9uIGRpc2FibGUgbWFjaGluZSBjaGVja3MuCi0JICogV2UgbXVzdCBhbHNvIGRpc2FibGUgbWFjaGluZSBjaGVja3MgaW4gdGhlIG5ldyBwc3cgbWFzayBmb3IKLQkgKiBwcm9ncmFtIGNoZWNrcywgc2luY2Ugc3dzdXNwX2FyY2hfc3VzcGVuZCgpIG1heSBnZW5lcmF0ZSBwcm9ncmFtCi0JICogY2hlY2tzLiBEaXNhYmxpbmcgbWFjaGluZSBjaGVja3MgZm9yIGFsbCBvdGhlciBuZXcgcHN3IG1hc2tzIGlzCi0JICoganVzdCBwYXJhbm9pYS4KLQkgKi8KLQlsb2NhbF9tY2NrX2Rpc2FibGUoKTsKLQkvKiBEaXNhYmxlIGxvd2NvcmUgcHJvdGVjdGlvbiAqLwotCV9fY3RsX2NsZWFyX2JpdCgwLDI4KTsKLQlTMzkwX2xvd2NvcmUuZXh0ZXJuYWxfbmV3X3Bzdy5tYXNrICY9IH5QU1dfTUFTS19NQ0hFQ0s7Ci0JUzM5MF9sb3djb3JlLnN2Y19uZXdfcHN3Lm1hc2sgJj0gflBTV19NQVNLX01DSEVDSzsKLQlTMzkwX2xvd2NvcmUuaW9fbmV3X3Bzdy5tYXNrICY9IH5QU1dfTUFTS19NQ0hFQ0s7Ci0JUzM5MF9sb3djb3JlLnByb2dyYW1fbmV3X3Bzdy5tYXNrICY9IH5QU1dfTUFTS19NQ0hFQ0s7Ci19Ci0KLXZvaWQgcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUodm9pZCkKLXsKLQlTMzkwX2xvd2NvcmUuZXh0ZXJuYWxfbmV3X3Bzdy5tYXNrIHw9IFBTV19NQVNLX01DSEVDSzsKLQlTMzkwX2xvd2NvcmUuc3ZjX25ld19wc3cubWFzayB8PSBQU1dfTUFTS19NQ0hFQ0s7Ci0JUzM5MF9sb3djb3JlLmlvX25ld19wc3cubWFzayB8PSBQU1dfTUFTS19NQ0hFQ0s7Ci0JUzM5MF9sb3djb3JlLnByb2dyYW1fbmV3X3Bzdy5tYXNrIHw9IFBTV19NQVNLX01DSEVDSzsKLQkvKiBFbmFibGUgbG93Y29yZSBwcm90ZWN0aW9uICovCi0JX19jdGxfc2V0X2JpdCgwLDI4KTsKLQlsb2NhbF9tY2NrX2VuYWJsZSgpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL3Bvd2VyL3N3c3VzcF82NC5jIGIvYXJjaC9zMzkwL3Bvd2VyL3N3c3VzcF82NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTE2YTUxLi4wMDAwMDAwCi0tLSBhL2FyY2gvczM5MC9wb3dlci9zd3N1c3BfNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qCi0gKiBTdXBwb3J0IGZvciBzdXNwZW5kIGFuZCByZXN1bWUgb24gczM5MAotICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOQotICoKLSAqIEF1dGhvcihzKTogSGFucy1Kb2FjaGltIFBpY2h0IDxoYW5zQGxpbnV4LnZuZXQuaWJtLmNvbT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotdm9pZCBkb19hZnRlcl9jb3B5YmFjayh2b2lkKQotewotCW1iKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9wb3dlci9zd3N1c3BfYXNtNjQuUyBiL2FyY2gvczM5MC9wb3dlci9zd3N1c3BfYXNtNjQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2ZGY1Yy4uMDAwMDAwMAotLS0gYS9hcmNoL3MzOTAvcG93ZXIvc3dzdXNwX2FzbTY0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyoKLSAqIFMzOTAgNjQtYml0IHN3c3VzcCBpbXBsZW1lbnRhdGlvbgotICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOQotICoKLSAqIEF1dGhvcihzKTogSGFucy1Kb2FjaGltIFBpY2h0IDxoYW5zQGxpbnV4LnZuZXQuaWJtLmNvbT4KLSAqCSAgICAgIE1pY2hhZWwgSG9semhldSA8aG9semhldUBsaW51eC52bmV0LmlibS5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgotCi0vKgotICogU2F2ZSByZWdpc3RlciBjb250ZXh0IGluIGFic29sdXRlIDAgbG93Y29yZSBhbmQgY2FsbCBzd3N1c3Bfc2F2ZSgpIHRvCi0gKiBjcmVhdGUgaW4tbWVtb3J5IGtlcm5lbCBpbWFnZS4gVGhlIGNvbnRleHQgaXMgc2F2ZWQgaW4gdGhlIGRlc2lnbmF0ZWQKLSAqICJzdG9yZSBzdGF0dXMiIG1lbW9yeSBsb2NhdGlvbnMgKHNlZSBQT1ApLgotICogV2UgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiB0d2ljZS4gVGhlIGZpcnN0IHRpbWUgZHVyaW5nIHRoZSBzdXNwZW5kIHRvCi0gKiBkaXNrIHByb2Nlc3MuIFRoZSBzZWNvbmQgdGltZSB2aWEgdGhlIHN3c3VzcF9hcmNoX3Jlc3VtZSgpIGZ1bmN0aW9uCi0gKiAoc2VlIGJlbG93KSBpbiB0aGUgcmVzdW1lIHByb2Nlc3MuCi0gKiBUaGlzIGZ1bmN0aW9uIHJ1bnMgd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzLgotICovCi0JLnNlY3Rpb24gLnRleHQKLQkuYWxpZ24JMgotCS5nbG9ibCBzd3N1c3BfYXJjaF9zdXNwZW5kCi1zd3N1c3BfYXJjaF9zdXNwZW5kOgotCXN0bWcJJXI2LCVyMTUsX19TRl9HUFJTKCVyMTUpCi0JbGdyCSVyMSwlcjE1Ci0JYWdoaQklcjE1LC1TVEFDS19GUkFNRV9PVkVSSEVBRAotCXN0ZwklcjEsX19TRl9CQUNLQ0hBSU4oJXIxNSkKLQotCS8qIERlYWN0aXZhdGUgREFUICovCi0Jc3Ruc20JX19TRl9FTVBUWSglcjE1KSwweGZiCi0KLQkvKiBTdG9yZSBwcmVmaXggcmVnaXN0ZXIgb24gc3RhY2sgKi8KLQlzdHB4CV9fU0ZfRU1QVFkoJXIxNSkKLQotCS8qIFNhdmUgcHJlZml4IHJlZ2lzdGVyIGNvbnRlbnRzIGZvciBsb3djb3JlICovCi0JbGxnZgklcjQsX19TRl9FTVBUWSglcjE1KQotCi0JLyogR2V0IHBvaW50ZXIgdG8gc2F2ZSBhcmVhICovCi0JbGdoaQklcjEsMHgxMDAwCi0KLQkvKiBTdG9yZSByZWdpc3RlcnMgKi8KLQltdmMJMHgzMTgoNCwlcjEpLF9fU0ZfRU1QVFkoJXIxNSkJLyogbW92ZSBwcmVmaXggdG8gbG93Y29yZSAqLwotCXN0ZnBjCTB4MzFjKCVyMSkJCQkvKiBzdG9yZSBmcHUgY29udHJvbCAqLwotCXN0ZAkwLDB4MjAwKCVyMSkJCQkvKiBzdG9yZSBmMCAqLwotCXN0ZAkxLDB4MjA4KCVyMSkJCQkvKiBzdG9yZSBmMSAqLwotCXN0ZAkyLDB4MjEwKCVyMSkJCQkvKiBzdG9yZSBmMiAqLwotCXN0ZAkzLDB4MjE4KCVyMSkJCQkvKiBzdG9yZSBmMyAqLwotCXN0ZAk0LDB4MjIwKCVyMSkJCQkvKiBzdG9yZSBmNCAqLwotCXN0ZAk1LDB4MjI4KCVyMSkJCQkvKiBzdG9yZSBmNSAqLwotCXN0ZAk2LDB4MjMwKCVyMSkJCQkvKiBzdG9yZSBmNiAqLwotCXN0ZAk3LDB4MjM4KCVyMSkJCQkvKiBzdG9yZSBmNyAqLwotCXN0ZAk4LDB4MjQwKCVyMSkJCQkvKiBzdG9yZSBmOCAqLwotCXN0ZAk5LDB4MjQ4KCVyMSkJCQkvKiBzdG9yZSBmOSAqLwotCXN0ZAkxMCwweDI1MCglcjEpCQkJLyogc3RvcmUgZjEwICovCi0Jc3RkCTExLDB4MjU4KCVyMSkJCQkvKiBzdG9yZSBmMTEgKi8KLQlzdGQJMTIsMHgyNjAoJXIxKQkJCS8qIHN0b3JlIGYxMiAqLwotCXN0ZAkxMywweDI2OCglcjEpCQkJLyogc3RvcmUgZjEzICovCi0Jc3RkCTE0LDB4MjcwKCVyMSkJCQkvKiBzdG9yZSBmMTQgKi8KLQlzdGQJMTUsMHgyNzgoJXIxKQkJCS8qIHN0b3JlIGYxNSAqLwotCXN0YW0JJWEwLCVhMTUsMHgzNDAoJXIxKQkJLyogc3RvcmUgYWNjZXNzIHJlZ2lzdGVycyAqLwotCXN0Y3RnCSVjMCwlYzE1LDB4MzgwKCVyMSkJCS8qIHN0b3JlIGNvbnRyb2wgcmVnaXN0ZXJzICovCi0Jc3RtZwklcjAsJXIxNSwweDI4MCglcjEpCQkvKiBzdG9yZSBnZW5lcmFsIHJlZ2lzdGVycyAqLwotCi0Jc3RwdAkweDMyOCglcjEpCQkJLyogc3RvcmUgdGltZXIgKi8KLQlzdGNrYwkweDMzMCglcjEpCQkJLyogc3RvcmUgY2xvY2sgY29tcGFyYXRvciAqLwotCi0JLyogQWN0aXZhdGUgREFUICovCi0Jc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDA0Ci0KLQkvKiBTZXQgcHJlZml4IHBhZ2UgdG8gemVybyAqLwotCXhjCV9fU0ZfRU1QVFkoNCwlcjE1KSxfX1NGX0VNUFRZKCVyMTUpCi0Jc3B4CV9fU0ZfRU1QVFkoJXIxNSkKLQotCWxnaGkJJXIyLDAKLQlsZ2hpCSVyMywyKlBBR0VfU0laRQotCWxnaGkJJXI1LDIqUEFHRV9TSVpFCi0xOgltdmNsZQklcjIsJXI0LDAKLQlqbwkxYgotCi0JLyogU2F2ZSBpbWFnZSAqLwotCWJyYXNsCSVyMTQsc3dzdXNwX3NhdmUKLQotCS8qIFJlc3RvcmUgcHJlZml4IHJlZ2lzdGVyIGFuZCByZXR1cm4gKi8KLQlsZ2hpCSVyMSwweDEwMDAKLQlzcHgJMHgzMTgoJXIxKQotCWxtZwklcjYsJXIxNSxTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fU0ZfR1BSUyglcjE1KQotCWxnaGkJJXIyLDAKLQlicgklcjE0Ci0KLS8qCi0gKiBSZXN0b3JlIHNhdmVkIG1lbW9yeSBpbWFnZSB0byBjb3JyZWN0IHBsYWNlIGFuZCByZXN0b3JlIHJlZ2lzdGVyIGNvbnRleHQuCi0gKiBUaGVuIHdlIHJldHVybiB0byB0aGUgZnVuY3Rpb24gdGhhdCBjYWxsZWQgc3dzdXNwX2FyY2hfc3VzcGVuZCgpLgotICogc3dzdXNwX2FyY2hfcmVzdW1lKCkgcnVucyB3aXRoIGRpc2FibGVkIGludGVycnVwdHMuCi0gKi8KLQkuZ2xvYmwgc3dzdXNwX2FyY2hfcmVzdW1lCi1zd3N1c3BfYXJjaF9yZXN1bWU6Ci0Jc3RtZwklcjYsJXIxNSxfX1NGX0dQUlMoJXIxNSkKLQlsZ3IJJXIxLCVyMTUKLQlhZ2hpCSVyMTUsLVNUQUNLX0ZSQU1FX09WRVJIRUFECi0Jc3RnCSVyMSxfX1NGX0JBQ0tDSEFJTiglcjE1KQotCi0jaWZkZWYgQ09ORklHX1NNUAotCS8qIFNhdmUgYm9vdCBjcHUgbnVtYmVyICovCi0JYnJhc2wJJXIxNCxzbXBfZ2V0X3BoeXNfY3B1X2lkCi0JbGdyCSVyMTAsJXIyCi0jZW5kaWYKLQkvKiBEZWFjdGl2YXRlIERBVCAqLwotCXN0bnNtCV9fU0ZfRU1QVFkoJXIxNSksMHhmYgotCi0JLyogU2V0IHByZWZpeCBwYWdlIHRvIHplcm8gKi8KLQl4YwlfX1NGX0VNUFRZKDQsJXIxNSksX19TRl9FTVBUWSglcjE1KQotCXNweAlfX1NGX0VNUFRZKCVyMTUpCi0KLQkvKiBSZXN0b3JlIHNhdmVkIGltYWdlICovCi0JbGFybAklcjEscmVzdG9yZV9wYmxpc3QKLQlsZwklcjEsMCglcjEpCi0JbHRncgklcjEsJXIxCi0JanoJMmYKLTA6Ci0JbGcJJXIyLDgoJXIxKQotCWxnCSVyNCwwKCVyMSkKLQlsZ2hpCSVyMyxQQUdFX1NJWkUKLQlsZ2hpCSVyNSxQQUdFX1NJWkUKLTE6Ci0JbXZjbGUJJXIyLCVyNCwwCi0Jam8JMWIKLQlsZwklcjEsMTYoJXIxKQotCWx0Z3IJJXIxLCVyMQotCWpuegkwYgotMjoKLQlwdGxiCQkJCS8qIGZsdXNoIHRsYiAqLwotCi0JLyogUmVzdG9yZSByZWdpc3RlcnMgKi8KLQlsZ2hpCSVyMTMsMHgxMDAwCQkvKiAlcjEgPSBwb2ludGVyIHRvIHNhdmUgYXJhZSAqLwotCi0Jc3B0CTB4MzI4KCVyMTMpCQkvKiByZXByb2dyYW0gdGltZXIgKi8KLQkvL3Nja2MJMHgzMzAoJXIxMykJCS8qIHNldCBjbG9jayBjb21wYXJhdG9yICovCi0KLQlsY3RsZwklYzAsJWMxNSwweDM4MCglcjEzKQkvKiBsb2FkIGNvbnRyb2wgcmVnaXN0ZXJzICovCi0JbGFtCSVhMCwlYTE1LDB4MzQwKCVyMTMpCS8qIGxvYWQgYWNjZXNzIHJlZ2lzdGVycyAqLwotCi0JbGZwYwkweDMxYyglcjEzKQkJLyogbG9hZCBmcHUgY29udHJvbCAqLwotCWxkCTAsMHgyMDAoJXIxMykJCS8qIGxvYWQgZjAgKi8KLQlsZAkxLDB4MjA4KCVyMTMpCQkvKiBsb2FkIGYxICovCi0JbGQJMiwweDIxMCglcjEzKQkJLyogbG9hZCBmMiAqLwotCWxkCTMsMHgyMTgoJXIxMykJCS8qIGxvYWQgZjMgKi8KLQlsZAk0LDB4MjIwKCVyMTMpCQkvKiBsb2FkIGY0ICovCi0JbGQJNSwweDIyOCglcjEzKQkJLyogbG9hZCBmNSAqLwotCWxkCTYsMHgyMzAoJXIxMykJCS8qIGxvYWQgZjYgKi8KLQlsZAk3LDB4MjM4KCVyMTMpCQkvKiBsb2FkIGY3ICovCi0JbGQJOCwweDI0MCglcjEzKQkJLyogbG9hZCBmOCAqLwotCWxkCTksMHgyNDgoJXIxMykJCS8qIGxvYWQgZjkgKi8KLQlsZAkxMCwweDI1MCglcjEzKQkJLyogbG9hZCBmMTAgKi8KLQlsZAkxMSwweDI1OCglcjEzKQkJLyogbG9hZCBmMTEgKi8KLQlsZAkxMiwweDI2MCglcjEzKQkJLyogbG9hZCBmMTIgKi8KLQlsZAkxMywweDI2OCglcjEzKQkJLyogbG9hZCBmMTMgKi8KLQlsZAkxNCwweDI3MCglcjEzKQkJLyogbG9hZCBmMTQgKi8KLQlsZAkxNSwweDI3OCglcjEzKQkJLyogbG9hZCBmMTUgKi8KLQotCS8qIExvYWQgb2xkIHN0YWNrICovCi0JbGcJJXIxNSwweDJmOCglcjEzKQotCi0JLyogUG9pbnRlciB0byBzYXZlIGFyZWEgKi8KLQlsZ2hpCSVyMTMsMHgxMDAwCi0KLSNpZmRlZiBDT05GSUdfU01QCi0JLyogU3dpdGNoIENQVXMgKi8KLQlsZ3IJJXIyLCVyMTAJCS8qIGdldCBjcHUgaWQgKi8KLQlsbGdmCSVyMywweDMxOCglcjEzKQotCWJyYXNsCSVyMTQsc21wX3N3aXRjaF9ib290X2NwdV9pbl9yZXN1bWUKLSNlbmRpZgotCS8qIFJlc3RvcmUgcHJlZml4IHJlZ2lzdGVyICovCi0Jc3B4CTB4MzE4KCVyMTMpCi0KLQkvKiBBY3RpdmF0ZSBEQVQgKi8KLQlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDQKLQotCS8qIFJldHVybiAwICovCi0JbG1nCSVyNiwlcjE1LFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19TRl9HUFJTKCVyMTUpCi0JbGdoaQklcjIsMAotCWJyCSVyMTQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfZXRoLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX2V0aC5oCmluZGV4IGJiODMyNTguLmFjZjk5NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfZXRoLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaF9ldGguaApAQCAtNiw2ICs2LDkgQEAKIHN0cnVjdCBzaF9ldGhfcGxhdF9kYXRhIHsKIAlpbnQgcGh5OwogCWludCBlZG1hY19lbmRpYW47CisKKwl1bnNpZ25lZCBub19ldGhlcl9saW5rOjE7CisJdW5zaWduZWQgZXRoZXJfbGlua19hY3RpdmVfbG93OjE7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggYjVhZmJlYy4uMDRhMjE4OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTY0MCw1ICs2NDAsNyBAQAogCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIF9USUZfTk9USUZZX1JFU1VNRSkgewogCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfTk9USUZZX1JFU1VNRSk7CiAJCXRyYWNlaG9va19ub3RpZnlfcmVzdW1lKHJlZ3MpOworCQlpZiAoY3VycmVudC0+cmVwbGFjZW1lbnRfc2Vzc2lvbl9rZXlyaW5nKQorCQkJa2V5X3JlcGxhY2Vfc2Vzc2lvbl9rZXlyaW5nKCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCAwNjYzYTBlLi45ZTVjOWIxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtNzcyLDUgKzc3Miw3IEBACiAJaWYgKHRocmVhZF9pbmZvX2ZsYWdzICYgX1RJRl9OT1RJRllfUkVTVU1FKSB7CiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9OT1RJRllfUkVTVU1FKTsKIAkJdHJhY2Vob29rX25vdGlmeV9yZXN1bWUocmVncyk7CisJCWlmIChjdXJyZW50LT5yZXBsYWNlbWVudF9zZXNzaW9uX2tleXJpbmcpCisJCQlrZXlfcmVwbGFjZV9zZXNzaW9uX2tleXJpbmcoKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBmNTNjNzZhLi4wY2UyNTRiY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTYzLDE2ICsxNjMsMTQgQEAKIAkJX2VuZCA9IC4gOwogCX0KIAorCVNUQUJTX0RFQlVHCisJRFdBUkZfREVCVUcKKwogCS8qCiAJICogV2hlbiBzb21ldGhpbmcgaW4gdGhlIGtlcm5lbCBpcyBOT1QgY29tcGlsZWQgYXMgYSBtb2R1bGUsIHRoZQogCSAqIG1vZHVsZSBjbGVhbnVwIGNvZGUgYW5kIGRhdGEgYXJlIHB1dCBpbnRvIHRoZXNlIHNlZ21lbnRzLiBCb3RoCiAJICogY2FuIHRoZW4gYmUgdGhyb3duIGF3YXksIGFzIGNsZWFudXAgY29kZSBpcyBuZXZlciBjYWxsZWQgdW5sZXNzCiAJICogaXQncyBhIG1vZHVsZS4KIAkgKi8KLQkvRElTQ0FSRC8gOiB7Ci0JCSooLmV4aXRjYWxsLmV4aXQpCi0JfQotCi0JU1RBQlNfREVCVUcKLQlEV0FSRl9ERUJVRworCURJU0NBUkRTCiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggM2Y4YjZhOS4uODZiODIzNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtMjUsNiArMjUsOSBAQAogCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgogCXNlbGVjdCBSVENfQ0xBU1MKIAlzZWxlY3QgUlRDX0RSVl9NNDhUNTkKKwlzZWxlY3QgSEFWRV9QRVJGX0NPVU5URVJTCisJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCisJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCiBjb25maWcgU1BBUkMzMgogCWRlZl9ib29sICE2NEJJVApAQCAtNDQsNiArNDcsNyBAQAogCXNlbGVjdCBSVENfRFJWX0JRNDgwMgogCXNlbGVjdCBSVENfRFJWX1NVTjRWCiAJc2VsZWN0IFJUQ19EUlZfU1RBUkZJUkUKKwlzZWxlY3QgSEFWRV9QRVJGX0NPVU5URVJTCiAKIGNvbmZpZyBBUkNIX0RFRkNPTkZJRwogCXN0cmluZwpAQCAtOTUsNyArOTksNyBAQAogY29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBCiAJZGVmX2Jvb2wgeSBpZiBTUEFSQzY0CiAKLWNvbmZpZyBIQVZFX0RZTkFNSUNfUEVSX0NQVV9BUkVBCitjb25maWcgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LCiAJZGVmX2Jvb2wgeSBpZiBTUEFSQzY0CiAKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKQEAgLTQzNyw2ICs0NDEsMTcgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIFNQQVJDX0xFT04KKwlib29sICJTcGFyYyBMZW9uIHByb2Nlc3NvciBmYW1pbHkiCisJZGVwZW5kcyBvbiBTUEFSQzMyCisJLS0taGVscC0tLQorCSAgSWYgeW91IHNheSBZIGhlcmUgaWYgeW91IGFyZSBydW5uaW5nIG9uIGEgU1BBUkMtTEVPTiBwcm9jZXNzb3IuCisJICBUaGUgTEVPTiBwcm9jZXNzb3IgaXMgYSBzeW50aGVzaXphYmxlIFZIREwgbW9kZWwgb2YgdGhlCisJICBTUEFSQy12OCBzdGFuZGFyZC4gTEVPTiBpcyAgcGFydCBvZiB0aGUgR1JMSUIgY29sbGVjdGlvbiBvZgorCSAgSVAgY29yZXMgdGhhdCBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgR1BMLiBHUkxJQiBjYW4gYmUgZG93bmxvYWRlZAorCSAgZnJvbSB3d3cuZ2Fpc2xlci5jb20uIFlvdSBjYW4gZG93bmxvYWQgYSBzcGFyYy1saW51eCBjcm9zcy1jb21waWxhdGlvbgorCSAgdG9vbGNoYWluIGF0IHd3dy5nYWlzbGVyLmNvbS4KKwogZW5kbWVudQogCiBtZW51ICJCdXMgb3B0aW9ucyAoUENJIGV0Yy4pIgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9NYWtlZmlsZSBiL2FyY2gvc3BhcmMvTWFrZWZpbGUKaW5kZXggMjAwM2RlZC4uNDY3MjIxZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjL01ha2VmaWxlCkBAIC0zOCwxMCArMzgsNiBAQAogIyAgQWN0dWFsIGxpbmtpbmcgaXMgZG9uZSB3aXRoICJtYWtlIGltYWdlIi4KIExERkxBR1Nfdm1saW51eCA9IC1yCiAKLSMgRGVmYXVsdCB0YXJnZXQKLWFsbDogekltYWdlCi0KLQogZWxzZQogIyMjIyMKICMgc3BhcmM2NApAQCAtOTEsNiArODcsOSBAQAogCiBib290IDo9IGFyY2gvc3BhcmMvYm9vdAogCisjIERlZmF1bHQgdGFyZ2V0CithbGw6IHpJbWFnZQorCiBpbWFnZSB6SW1hZ2UgdGZ0cGJvb3QuaW1nIHZtbGludXguYW91dDogdm1saW51eAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgJChib290KS8kQAogCkBAIC0xMDksOCArMTA4LDkgQEAKIGVuZGVmCiBlbHNlCiBkZWZpbmUgYXJjaGhlbHAKLSAgZWNobyAgJyogdm1saW51eCAgICAgICAtIFN0YW5kYXJkIHNwYXJjNjQga2VybmVsJwotICBlY2hvICAnICB2bWxpbnV4LmFvdXQgIC0gYS5vdXQga2VybmVsIGZvciBzcGFyYzY0JworICBlY2hvICAnKiB2bWxpbnV4ICAgICAgLSBzdGFuZGFyZCBzcGFyYzY0IGtlcm5lbCcKKyAgZWNobyAgJyogekltYWdlICAgICAgIC0gc3RyaXBwZWQgYW5kIGNvbXByZXNzZWQgc3BhcmM2NCBrZXJuZWwgKCQoYm9vdCkvekltYWdlKScKKyAgZWNobyAgJyAgdm1saW51eC5hb3V0IC0gYS5vdXQga2VybmVsIGZvciBzcGFyYzY0JwogICBlY2hvICAnICB0ZnRwYm9vdC5pbWcgLSBpbWFnZSBwcmVwYXJlZCBmb3IgdGZ0cCcKIGVuZGVmCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9ib290L01ha2VmaWxlIGIvYXJjaC9zcGFyYy9ib290L01ha2VmaWxlCmluZGV4IDFmZjBmZDkuLjk3ZTNmZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjL2Jvb3QvTWFrZWZpbGUKQEAgLTc5LDYgKzc5LDkgQEAKIAkkKGNhbGwgaWZfY2hhbmdlZCxzdHJpcCkKIAlAZWNobyAnICBrZXJuZWw6ICRAIGlzIHJlYWR5JwogCiskKG9iaikvekltYWdlOiAkKG9iaikvaW1hZ2UKKwkkKGNhbGwgaWZfY2hhbmdlZCxnemlwKQorCiAkKG9iaikvdGZ0cGJvb3QuaW1nOiAkKG9iaikvaW1hZ2UgJChvYmopL3BpZ2d5YmFja182NCBTeXN0ZW0ubWFwICQoUk9PVF9JTUcpIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsZWxmdG9hb3V0KQogCSQoY2FsbCBpZl9jaGFuZ2VkLHBpZ2d5KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9hZ3AuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYWdwLmgKaW5kZXggYzI0NTY4Ny4uNzBmNTJjMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9hZ3AuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2FncC5oCkBAIC03LDEwICs3LDYgQEAKICNkZWZpbmUgdW5tYXBfcGFnZV9mcm9tX2FncChwYWdlKQogI2RlZmluZSBmbHVzaF9hZ3BfY2FjaGUoKSBtYigpCiAKLS8qIENvbnZlcnQgYSBwaHlzaWNhbCBhZGRyZXNzIHRvIGFuIGFkZHJlc3Mgc3VpdGFibGUgZm9yIHRoZSBHQVJULiAqLwotI2RlZmluZSBwaHlzX3RvX2dhcnQoeCkgKHgpCi0jZGVmaW5lIGdhcnRfdG9fcGh5cyh4KSAoeCkKLQogLyogR0FUVCBhbGxvY2F0aW9uLiBSZXR1cm5zL2FjY2VwdHMgR0FUVCBrZXJuZWwgdmlydHVhbCBhZGRyZXNzLiAqLwogI2RlZmluZSBhbGxvY19nYXR0X3BhZ2VzKG9yZGVyKQkJXAogCSgoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgKG9yZGVyKSkpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2FzaS5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9hc2kuaAppbmRleCA3NDcwM2M1Li5iMmUzZGI2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2FzaS5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYXNpLmgKQEAgLTQwLDcgKzQwLDExIEBACiAjZGVmaW5lIEFTSV9NX1VOQTAxICAgICAgICAgMHgwMSAgIC8qIFNhbWUgaGVyZS4uLiAqLwogI2RlZmluZSBBU0lfTV9NWENDICAgICAgICAgIDB4MDIgICAvKiBBY2Nlc3MgdG8gVEkgVklLSU5HIE1YQ0MgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEFTSV9NX0ZMVVNIX1BST0JFICAgMHgwMyAgIC8qIFJlZmVyZW5jZSBNTVUgRmx1c2gvUHJvYmU7IHJ3LCBzcyAqLworI2lmbmRlZiBDT05GSUdfU1BBUkNfTEVPTgogI2RlZmluZSBBU0lfTV9NTVVSRUdTICAgICAgIDB4MDQgICAvKiBNTVUgUmVnaXN0ZXJzOyBydywgc3MgKi8KKyNlbHNlCisjZGVmaW5lIEFTSV9NX01NVVJFR1MgICAgICAgMHgxOQorI2VuZGlmIC8qIENPTkZJR19TUEFSQ19MRU9OICovCiAjZGVmaW5lIEFTSV9NX1RMQkRJQUcgICAgICAgMHgwNSAgIC8qIE1NVSBUTEIgb25seSBEaWFnbm9zdGljcyAqLwogI2RlZmluZSBBU0lfTV9ESUFHUyAgICAgICAgIDB4MDYgICAvKiBSZWZlcmVuY2UgTU1VIERpYWdub3N0aWNzICovCiAjZGVmaW5lIEFTSV9NX0lPRElBRyAgICAgICAgMHgwNyAgIC8qIE1NVSBJL08gVExCIG9ubHkgRGlhZ25vc3RpY3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZGV2aWNlLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2RldmljZS5oCmluZGV4IDM3MDJlMDguLmYzYjg1YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZGV2aWNlLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9kZXZpY2UuaApAQCAtMzIsNCArMzIsNyBAQAogCXJldHVybiBhZC0+cHJvbV9ub2RlOwogfQogCitzdHJ1Y3QgcGRldl9hcmNoZGF0YSB7Cit9OworCiAjZW5kaWYgLyogX0FTTV9TUEFSQ19ERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDIwNGU0YmYuLjVhOGMzMDggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWRlYnVnLmg+CiAKICNkZWZpbmUgRE1BX0VSUk9SX0NPREUJKH4oZG1hX2FkZHJfdCkweDApCiAKQEAgLTEzLDE0MiArMTQsNDAgQEAKICNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKICNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkJKDEpCiAKLXN0cnVjdCBkbWFfb3BzIHsKLQl2b2lkICooKmFsbG9jX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpOwotCXZvaWQgKCpmcmVlX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJICAgICAgdm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7Ci0JZG1hX2FkZHJfdCAoKm1hcF9wYWdlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwotCXZvaWQgKCp1bm1hcF9wYWdlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCi0JCQkgICBzaXplX3Qgc2l6ZSwKLQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Ci0JaW50ICgqbWFwX3NnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKLQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKLQl2b2lkICgqdW5tYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSBpbnQgbmh3ZW50cmllcywKLQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwotCXZvaWQgKCpzeW5jX3NpbmdsZV9mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Ci0Jdm9pZCAoKnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKLQl2b2lkICgqc3luY19zZ19mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJaW50IG5lbGVtcywKLQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwotCXZvaWQgKCpzeW5jX3NnX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKLX07Ci1leHRlcm4gY29uc3Qgc3RydWN0IGRtYV9vcHMgKmRtYV9vcHM7CitleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzICpkbWFfb3BzLCBwY2kzMl9kbWFfb3BzOworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBwY2lfYnVzX3R5cGU7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9tYXBfb3BzICpnZXRfZG1hX29wcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisjaWYgZGVmaW5lZChDT05GSUdfU1BBUkMzMikgJiYgZGVmaW5lZChDT05GSUdfUENJKQorCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQorCQlyZXR1cm4gJnBjaTMyX2RtYV9vcHM7CisjZW5kaWYKKwlyZXR1cm4gZG1hX29wczsKK30KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1tYXBwaW5nLWNvbW1vbi5oPgogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJCSAgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQogewotCXJldHVybiBkbWFfb3BzLT5hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGZsYWcpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKKwl2b2lkICpjcHVfYWRkcjsKKworCWNwdV9hZGRyID0gb3BzLT5hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGZsYWcpOworCWRlYnVnX2RtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsICpkbWFfaGFuZGxlLCBjcHVfYWRkcik7CisJcmV0dXJuIGNwdV9hZGRyOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQkgICAgIHZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCiB7Ci0JZG1hX29wcy0+ZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlKTsKLX0KKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKLXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAotCQkJCQlzaXplX3Qgc2l6ZSwKLQkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCXJldHVybiBkbWFfb3BzLT5tYXBfcGFnZShkZXYsIHZpcnRfdG9fcGFnZShjcHVfYWRkciksCi0JCQkJICh1bnNpZ25lZCBsb25nKWNwdV9hZGRyICYgflBBR0VfTUFTSywgc2l6ZSwKLQkJCQkgZGlyZWN0aW9uKTsKKwlkZWJ1Z19kbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlKTsKKwlvcHMtPmZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBjcHVfYWRkciwgZG1hX2hhbmRsZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCQkgICAgc2l6ZV90IHNpemUsCi0JCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlkbWFfb3BzLT51bm1hcF9wYWdlKGRldiwgZG1hX2FkZHIsIHNpemUsIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCi0JCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCXJldHVybiBkbWFfb3BzLT5tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKLQkJCQkgIHNpemVfdCBzaXplLAotCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCWRtYV9vcHMtPnVubWFwX3BhZ2UoZGV2LCBkbWFfYWRkcmVzcywgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkgICAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCXJldHVybiBkbWFfb3BzLT5tYXBfc2coZGV2LCBzZywgbmVudHMsIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCWludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCWRtYV9vcHMtPnVubWFwX3NnKGRldiwgc2csIG5lbnRzLCBkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAotCQkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JZG1hX29wcy0+c3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJCQkJICAgICAgc2l6ZV90IHNpemUsCi0JCQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlpZiAoZG1hX29wcy0+c3luY19zaW5nbGVfZm9yX2RldmljZSkKLQkJZG1hX29wcy0+c3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9oYW5kbGUsIHNpemUsCi0JCQkJCQlkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCi0JCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlkbWFfb3BzLT5zeW5jX3NnX2Zvcl9jcHUoZGV2LCBzZywgbmVsZW1zLCBkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKLQkJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JaWYgKGRtYV9vcHMtPnN5bmNfc2dfZm9yX2RldmljZSkKLQkJZG1hX29wcy0+c3luY19zZ19mb3JfZGV2aWNlKGRldiwgc2csIG5lbGVtcywgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJCSBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJCQkgc2l6ZV90IHNpemUsCi0JCQkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotewotCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2hhbmRsZStvZmZzZXQsIHNpemUsIGRpcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCQkgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCQkJICAgIHNpemVfdCBzaXplLAotCQkJCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKLXsKLQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9oYW5kbGUrb2Zmc2V0LCBzaXplLCBkaXIpOwotfQotCi0KIHN0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKIHsKIAlyZXR1cm4gKGRtYV9hZGRyID09IERNQV9FUlJPUl9DT0RFKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV82NC5oCmluZGV4IDE5MzRmMmMuLmEwYjQ0M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfNjQuaApAQCAtODksOCArODksOCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXZvaWQgX190cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKHZvaWQpOwotI2RlZmluZSB0cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKCkgX190cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKCkKK3ZvaWQgYXJjaF90cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKHZvaWQpOworI2RlZmluZSBhcmNoX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UgYXJjaF90cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlCiAKIGV4dGVybiB2b2lkICpoYXJkaXJxX3N0YWNrW05SX0NQVVNdOwogZXh0ZXJuIHZvaWQgKnNvZnRpcnFfc3RhY2tbTlJfQ1BVU107CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb24uaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTQyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb24uaApAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBLb25yYWQgRWlzZWxlIChlaXNlbGVrZEB3ZWIuZGUsa29ucmFkQGdhaXNsZXIuY29tKSBHYWlzbGVyIFJlc2VhcmNoCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU3RlZmFuIEhvbHN0IChtYWlsQHMtaG9sc3QuZGUpIFVuaS1TdHV0dGdhcnQKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEYW5pZWwgSGVsbHN0cm9tIChkYW5pZWxAZ2Fpc2xlci5jb20pIEFlcm9mbGV4IEdhaXNsZXIgQUIKKyAqIENvcHlyaWdodCAoQykgMjAwOSBLb25yYWQgRWlzZWxlIChrb25yYWRAZ2Fpc2xlci5jb20pIEFlcm9mbGV4IEdhaXNsZXIgQUIKKyAqLworCisjaWZuZGVmIExFT05fSF9JTkNMVURFCisjZGVmaW5lIExFT05fSF9JTkNMVURFCisKKyNpZmRlZiBDT05GSUdfU1BBUkNfTEVPTgorCisjZGVmaW5lIEFTSV9MRU9OX05PQ0FDSEUJMHgwMQorCisjZGVmaW5lIEFTSV9MRU9OX0RDQUNIRV9NSVNTCTB4MQorCisjZGVmaW5lIEFTSV9MRU9OX0NBQ0hFUkVHUwkweDAyCisjZGVmaW5lIEFTSV9MRU9OX0lGTFVTSAkJMHgxMAorI2RlZmluZSBBU0lfTEVPTl9ERkxVU0gJCTB4MTEKKworI2RlZmluZSBBU0lfTEVPTl9NTVVGTFVTSAkweDE4CisjZGVmaW5lIEFTSV9MRU9OX01NVVJFR1MJMHgxOQorI2RlZmluZSBBU0lfTEVPTl9CWVBBU1MJCTB4MWMKKyNkZWZpbmUgQVNJX0xFT05fRkxVU0hfUEFHRQkweDEwCisKKy8qIG1tdSByZWdpc3RlciBhY2Nlc3MsIEFTSV9MRU9OX01NVVJFR1MgKi8KKyNkZWZpbmUgTEVPTl9DTlJfQ1RSTAkJMHgwMDAKKyNkZWZpbmUgTEVPTl9DTlJfQ1RYUAkJMHgxMDAKKyNkZWZpbmUgTEVPTl9DTlJfQ1RYCQkweDIwMAorI2RlZmluZSBMRU9OX0NOUl9GCQkweDMwMAorI2RlZmluZSBMRU9OX0NOUl9GQUREUgkJMHg0MDAKKworI2RlZmluZSBMRU9OX0NOUl9DVFhfTkNUWAkyNTYJLypudW1iZXIgb2YgTU1VIGN0eCAqLworCisjZGVmaW5lIExFT05fQ05SX0NUUkxfVExCRElTCTB4ODAwMDAwMDAKKworI2RlZmluZSBMRU9OX01NVVRMQl9FTlRfTUFYCTY0CisKKy8qCisgKiBkaWFnbm9zdGljIGFjY2VzcyBmcm9tIG1tdXRsYi52aGQ6CisgKiAwOiBwdGUgYWRkcmVzcworICogNDogcHRlCisgKiA4OiBhZGRpdGlvbmFsIGZsYWdzCisgKi8KKyNkZWZpbmUgTEVPTl9ESUFHRl9MVkwJCTB4MworI2RlZmluZSBMRU9OX0RJQUdGX1dSCQkweDgKKyNkZWZpbmUgTEVPTl9ESUFHRl9XUl9TSElGVAkzCisjZGVmaW5lIExFT05fRElBR0ZfSElUCQkweDEwCisjZGVmaW5lIExFT05fRElBR0ZfSElUX1NISUZUCTQKKyNkZWZpbmUgTEVPTl9ESUFHRl9DVFgJCTB4MWZlMAorI2RlZmluZSBMRU9OX0RJQUdGX0NUWF9TSElGVAk1CisjZGVmaW5lIExFT05fRElBR0ZfVkFMSUQJMHgyMDAwCisjZGVmaW5lIExFT05fRElBR0ZfVkFMSURfU0hJRlQJMTMKKworLyoKKyAqICBJbnRlcnJ1cHQgU291cmNlcworICoKKyAqICBUaGUgaW50ZXJydXB0IHNvdXJjZSBudW1iZXJzIGRpcmVjdGx5IG1hcCB0byB0aGUgdHJhcCB0eXBlIGFuZCB0bworICogIHRoZSBiaXRzIHVzZWQgaW4gdGhlIEludGVycnVwdCBDbGVhciwgSW50ZXJydXB0IEZvcmNlLCBJbnRlcnJ1cHQgTWFzaywKKyAqICBhbmQgdGhlIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBMRU9OX0lOVEVSUlVQVF9DT1JSRUNUQUJMRV9NRU1PUllfRVJST1IJMQorI2RlZmluZSBMRU9OX0lOVEVSUlVQVF9VQVJUXzFfUlhfVFgJCTIKKyNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfVUFSVF8wX1JYX1RYCQkzCisjZGVmaW5lIExFT05fSU5URVJSVVBUX0VYVEVSTkFMXzAJCTQKKyNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfRVhURVJOQUxfMQkJNQorI2RlZmluZSBMRU9OX0lOVEVSUlVQVF9FWFRFUk5BTF8yCQk2CisjZGVmaW5lIExFT05fSU5URVJSVVBUX0VYVEVSTkFMXzMJCTcKKyNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfVElNRVIxCQkJOAorI2RlZmluZSBMRU9OX0lOVEVSUlVQVF9USU1FUjIJCQk5CisjZGVmaW5lIExFT05fSU5URVJSVVBUX0VNUFRZMQkJCTEwCisjZGVmaW5lIExFT05fSU5URVJSVVBUX0VNUFRZMgkJCTExCisjZGVmaW5lIExFT05fSU5URVJSVVBUX09QRU5fRVRICQkJMTIKKyNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfRU1QVFk0CQkJMTMKKyNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfRU1QVFk1CQkJMTQKKyNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfRU1QVFk2CQkJMTUKKworLyogaXJxIG1hc2tzICovCisjZGVmaW5lIExFT05fSEFSRF9JTlQoeCkJKDEgPDwgKHgpKQkvKiBpcnEgMC0xNSAqLworI2RlZmluZSBMRU9OX0lSUU1BU0tfUgkJMHgwMDAwZmZmZQkvKiBiaXQgMTUtIDEgb2YgbHJlZ3MuaXJxbWFzayAqLworI2RlZmluZSBMRU9OX0lSUVBSSU9fUgkJMHhmZmZlMDAwMAkvKiBiaXQgMzEtMTcgb2YgbHJlZ3MuaXJxbWFzayAqLworCisvKiBsZW9uIHVhcnQgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTEVPTl9PRkZfVURBVEEJMHgwCisjZGVmaW5lIExFT05fT0ZGX1VTVEFUCTB4NAorI2RlZmluZSBMRU9OX09GRl9VQ1RSTAkweDgKKyNkZWZpbmUgTEVPTl9PRkZfVVNDQUwJMHhjCisKKyNkZWZpbmUgTEVPTl9VQ1RSTF9SRQkweDAxCisjZGVmaW5lIExFT05fVUNUUkxfVEUJMHgwMgorI2RlZmluZSBMRU9OX1VDVFJMX1JJCTB4MDQKKyNkZWZpbmUgTEVPTl9VQ1RSTF9USQkweDA4CisjZGVmaW5lIExFT05fVUNUUkxfUFMJMHgxMAorI2RlZmluZSBMRU9OX1VDVFJMX1BFCTB4MjAKKyNkZWZpbmUgTEVPTl9VQ1RSTF9GTAkweDQwCisjZGVmaW5lIExFT05fVUNUUkxfTEIJMHg4MAorCisjZGVmaW5lIExFT05fVVNUQVRfRFIJMHgwMQorI2RlZmluZSBMRU9OX1VTVEFUX1RTCTB4MDIKKyNkZWZpbmUgTEVPTl9VU1RBVF9USAkweDA0CisjZGVmaW5lIExFT05fVVNUQVRfQlIJMHgwOAorI2RlZmluZSBMRU9OX1VTVEFUX09WCTB4MTAKKyNkZWZpbmUgTEVPTl9VU1RBVF9QRQkweDIwCisjZGVmaW5lIExFT05fVVNUQVRfRkUJMHg0MAorCisjZGVmaW5lIExFT05fTUNGRzJfU1JBTURJUwkJMHgwMDAwMjAwMAorI2RlZmluZSBMRU9OX01DRkcyX1NEUkFNRU4JCTB4MDAwMDQwMDAKKyNkZWZpbmUgTEVPTl9NQ0ZHMl9TUkFNQkFOS1NaCQkweDAwMDAxZTAwCS8qIFsxMi05XSAqLworI2RlZmluZSBMRU9OX01DRkcyX1NSQU1CQU5LU1pfU0hJRlQJOQorI2RlZmluZSBMRU9OX01DRkcyX1NEUkFNQkFOS1NaCQkweDAzODAwMDAwCS8qIFsyNS0yM10gKi8KKyNkZWZpbmUgTEVPTl9NQ0ZHMl9TRFJBTUJBTktTWl9TSElGVAkyMworCisjZGVmaW5lIExFT05fVENOVDBfTUFTSwkweDdmZmZmZgorCisjZGVmaW5lIExFT05fVVNUQVRfRVJST1IgKExFT05fVVNUQVRfT1YgfCBMRU9OX1VTVEFUX1BFIHwgTEVPTl9VU1RBVF9GRSkKKy8qIG5vIGJyZWFrIHlldCAqLworCisjZGVmaW5lIEFTSV9MRU9OM19TWVNDVFJMCQkweDAyCisjZGVmaW5lIEFTSV9MRU9OM19TWVNDVFJMX0lDRkcJCTB4MDgKKyNkZWZpbmUgQVNJX0xFT04zX1NZU0NUUkxfRENGRwkJMHgwYworI2RlZmluZSBBU0lfTEVPTjNfU1lTQ1RSTF9DRkdfU05PT1BJTkcgKDEgPDwgMjcpCisjZGVmaW5lIEFTSV9MRU9OM19TWVNDVFJMX0NGR19TU0laRShjKSAoMSA8PCAoKGMgPj4gMjApICYgMHhmKSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogZG8gYSB2aXJ0dWFsIGFkZHJlc3MgcmVhZCB3aXRob3V0IGNhY2hlICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbGVvbl9yZWFkbm9idWZmZXJfcmVnKHVuc2lnbmVkIGxvbmcgcGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJTFdICUyLCAlMFxuXHQiIDoKKwkJCSAgICAgIj1yIihyZXR2YWwpIDogInIiKHBhZGRyKSwgImkiKEFTSV9MRU9OX05PQ0FDSEUpKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBkbyBhIHBoeXNpY2FsIGFkZHJlc3MgYnlwYXNzIHdyaXRlLCBpLmUuIGZvciAweDgwMDAwMDAwICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGVvbl9zdG9yZV9yZWcodW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUwLCBbJTFdICUyXG5cdCIgOiA6ICJyIih2YWx1ZSksICJyIihwYWRkciksCisJCQkgICAgICJpIihBU0lfTEVPTl9CWVBBU1MpIDogIm1lbW9yeSIpOworfQorCisvKiBkbyBhIHBoeXNpY2FsIGFkZHJlc3MgYnlwYXNzIGxvYWQsIGkuZS4gZm9yIDB4ODAwMDAwMDAgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsZW9uX2xvYWRfcmVnKHVuc2lnbmVkIGxvbmcgcGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJTFdICUyLCAlMFxuXHQiIDoKKwkJCSAgICAgIj1yIihyZXR2YWwpIDogInIiKHBhZGRyKSwgImkiKEFTSV9MRU9OX0JZUEFTUykpOworCXJldHVybiByZXR2YWw7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBsZW9uX3NybW11X2Rpc2FibGV0bGIodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0dmFsOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyUlZzBdICUyLCAlMFxuXHQiIDogIj1yIihyZXR2YWwpIDogInIiKDApLAorCQkJICAgICAiaSIoQVNJX0xFT05fTU1VUkVHUykpOworCXJldHZhbCB8PSBMRU9OX0NOUl9DVFJMX1RMQkRJUzsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUwLCBbJSVnMF0gJTJcblx0IiA6IDogInIiKHJldHZhbCksICJyIigwKSwKKwkJCSAgICAgImkiKEFTSV9MRU9OX01NVVJFR1MpIDogIm1lbW9yeSIpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgbGVvbl9zcm1tdV9lbmFibGV0bGIodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0dmFsOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyUlZzBdICUyLCAlMFxuXHQiIDogIj1yIihyZXR2YWwpIDogInIiKDApLAorCQkJICAgICAiaSIoQVNJX0xFT05fTU1VUkVHUykpOworCXJldHZhbCA9IHJldHZhbCAmIH5MRU9OX0NOUl9DVFJMX1RMQkRJUzsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUwLCBbJSVnMF0gJTJcblx0IiA6IDogInIiKHJldHZhbCksICJyIigwKSwKKwkJCSAgICAgImkiKEFTSV9MRU9OX01NVVJFR1MpIDogIm1lbW9yeSIpOworfQorCisvKiBtYWNybyBhY2Nlc3MgZm9yIGxlb25fbG9hZF9yZWcoKSBhbmQgbGVvbl9zdG9yZV9yZWcoKSAqLworI2RlZmluZSBMRU9OM19CWVBBU1NfTE9BRF9QQSh4KQkgICAgKGxlb25fbG9hZF9yZWcoKHVuc2lnbmVkIGxvbmcpKHgpKSkKKyNkZWZpbmUgTEVPTjNfQllQQVNTX1NUT1JFX1BBKHgsIHYpIChsZW9uX3N0b3JlX3JlZygodW5zaWduZWQgbG9uZykoeCksICh1bnNpZ25lZCBsb25nKSh2KSkpCisjZGVmaW5lIExFT04zX0JZUEFTU19BTkRJTl9QQSh4LCB2KSBMRU9OM19CWVBBU1NfU1RPUkVfUEEoeCwgTEVPTjNfQllQQVNTX0xPQURfUEEoeCkgJiB2KQorI2RlZmluZSBMRU9OM19CWVBBU1NfT1JJTl9QQSh4LCB2KSAgTEVPTjNfQllQQVNTX1NUT1JFX1BBKHgsIExFT04zX0JZUEFTU19MT0FEX1BBKHgpIHwgdikKKyNkZWZpbmUgTEVPTl9CWVBBU1NfTE9BRF9QQSh4KSAgICAgIGxlb25fbG9hZF9yZWcoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBMRU9OX0JZUEFTU19TVE9SRV9QQSh4LCB2KSAgbGVvbl9zdG9yZV9yZWcoKHVuc2lnbmVkIGxvbmcpKHgpLCAodW5zaWduZWQgbG9uZykodikpCisjZGVmaW5lIExFT05fUkVHTE9BRF9QQSh4KSAgICAgICAgICBsZW9uX2xvYWRfcmVnKCh1bnNpZ25lZCBsb25nKSh4KStMRU9OX1BSRUdTKQorI2RlZmluZSBMRU9OX1JFR1NUT1JFX1BBKHgsIHYpICAgICAgbGVvbl9zdG9yZV9yZWcoKHVuc2lnbmVkIGxvbmcpKHgpK0xFT05fUFJFR1MsICh1bnNpZ25lZCBsb25nKSh2KSkKKyNkZWZpbmUgTEVPTl9SRUdTVE9SRV9PUl9QQSh4LCB2KSAgIExFT05fUkVHU1RPUkVfUEEoeCwgTEVPTl9SRUdMT0FEX1BBKHgpIHwgKHVuc2lnbmVkIGxvbmcpKHYpKQorI2RlZmluZSBMRU9OX1JFR1NUT1JFX0FORF9QQSh4LCB2KSAgTEVPTl9SRUdTVE9SRV9QQSh4LCBMRU9OX1JFR0xPQURfUEEoeCkgJiAodW5zaWduZWQgbG9uZykodikpCisKKy8qIG1hY3JvIGFjY2VzcyBmb3IgbGVvbl9yZWFkbm9idWZmZXJfcmVnKCkgKi8KKyNkZWZpbmUgTEVPTl9CWVBBU1NDQUNIRV9MT0FEX1ZBKHgpIGxlb25fcmVhZG5vYnVmZmVyX3JlZygodW5zaWduZWQgbG9uZykoeCkpCisKK2V4dGVybiB2b2lkIHNwYXJjX2xlb25fZWlycV9yZWdpc3RlcihpbnQgZWlycSk7CitleHRlcm4gdm9pZCBsZW9uX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBsZW9uX3N3aXRjaF9tbSh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25faW5pdF9JUlEodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxhc3RfdmFsaWRfcGZuOworCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgc3BhcmNfbGVvbjNfZ2V0X2RjYWNoZWNmZyh2b2lkKQoreworCXVuc2lnbmVkIGludCByZXR2YWw7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJTFdICUyLCAlMFxuXHQiIDoKKwkJCSAgICAgIj1yIihyZXR2YWwpIDoKKwkJCSAgICAgInIiKEFTSV9MRU9OM19TWVNDVFJMX0RDRkcpLAorCQkJICAgICAiaSIoQVNJX0xFT04zX1NZU0NUUkwpKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBlbmFibGUgc25vb3BpbmcgKi8KK2V4dGVybiBpbmxpbmUgdm9pZCBzcGFyY19sZW9uM19lbmFibGVfc25vb3Bpbmcodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkYSBbJSVnMF0gMiwgJSVsMVxuXHQiCisJCQkgICJzZXQgMHg4MDAwMDAsICUlbDJcblx0IgorCQkJICAib3IgICUlbDIsICUlbDEsICUlbDJcblx0IgorCQkJICAic3RhICUlbDIsIFslJWcwXSAyXG5cdCIgOiA6IDogImwxIiwgImwyIik7Cit9OworCitleHRlcm4gaW5saW5lIHZvaWQgc3BhcmNfbGVvbjNfZGlzYWJsZV9jYWNoZSh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgibGRhIFslJWcwXSAyLCAlJWwxXG5cdCIKKwkJCSAgInNldCAweDAwMDAwZiwgJSVsMlxuXHQiCisJCQkgICJhbmRuICAlJWwyLCAlJWwxLCAlJWwyXG5cdCIKKwkJCSAgInN0YSAlJWwyLCBbJSVnMF0gMlxuXHQiIDogOiA6ICJsMSIsICJsMiIpOworfTsKKworI2VuZGlmIC8qIV9fQVNTRU1CTFlfXyovCisKKyNpZmRlZiBDT05GSUdfU01QCisjIGRlZmluZSBMRU9OM19JUlFfUkVTQ0hFRFVMRQkJMTMKKyMgZGVmaW5lIExFT04zX0lSUV9USUNLRVIJCShsZW9uX3BlcmNwdV90aW1lcl9kZXZbMF0uaXJxKQorIyBkZWZpbmUgTEVPTjNfSVJRX0NST1NTX0NBTEwJCTE1CisjZW5kaWYKKworI2lmIGRlZmluZWQoUEFHRV9TSVpFX0xFT05fOEspCisjZGVmaW5lIExFT05fUEFHRV9TSVpFX0xFT04gMQorI2VsaWYgZGVmaW5lZChQQUdFX1NJWkVfTEVPTl8xNkspCisjZGVmaW5lIExFT05fUEFHRV9TSVpFX0xFT04gMikKKyNlbHNlCisjZGVmaW5lIExFT05fUEFHRV9TSVpFX0xFT04gMAorI2VuZGlmCisKKyNpZiBMRU9OX1BBR0VfU0laRV9MRU9OID09IDAKKy8qIFsgOCwgNiwgNiBdICsgMTIgKi8KKyNkZWZpbmUgTEVPTl9QR0RfU0ggICAgMjQKKyNkZWZpbmUgTEVPTl9QR0RfTSAgICAgMHhmZgorI2RlZmluZSBMRU9OX1BNRF9TSCAgICAxOAorI2RlZmluZSBMRU9OX1BNRF9TSF9WICAoTEVPTl9QR0RfU0gtMikKKyNkZWZpbmUgTEVPTl9QTURfTSAgICAgMHgzZgorI2RlZmluZSBMRU9OX1BURV9TSCAgICAxMgorI2RlZmluZSBMRU9OX1BURV9NICAgICAweDNmCisjZWxpZiBMRU9OX1BBR0VfU0laRV9MRU9OID09IDEKKy8qIFsgNywgNiwgNiBdICsgMTMgKi8KKyNkZWZpbmUgTEVPTl9QR0RfU0ggICAgMjUKKyNkZWZpbmUgTEVPTl9QR0RfTSAgICAgMHg3ZgorI2RlZmluZSBMRU9OX1BNRF9TSCAgICAxOQorI2RlZmluZSBMRU9OX1BNRF9TSF9WICAoTEVPTl9QR0RfU0gtMSkKKyNkZWZpbmUgTEVPTl9QTURfTSAgICAgMHgzZgorI2RlZmluZSBMRU9OX1BURV9TSCAgICAxMworI2RlZmluZSBMRU9OX1BURV9NICAgICAweDNmCisjZWxpZiBMRU9OX1BBR0VfU0laRV9MRU9OID09IDIKKy8qIFsgNiwgNiwgNiBdICsgMTQgKi8KKyNkZWZpbmUgTEVPTl9QR0RfU0ggICAgMjYKKyNkZWZpbmUgTEVPTl9QR0RfTSAgICAgMHgzZgorI2RlZmluZSBMRU9OX1BNRF9TSCAgICAyMAorI2RlZmluZSBMRU9OX1BNRF9TSF9WICAoTEVPTl9QR0RfU0gtMCkKKyNkZWZpbmUgTEVPTl9QTURfTSAgICAgMHgzZgorI2RlZmluZSBMRU9OX1BURV9TSCAgICAxNAorI2RlZmluZSBMRU9OX1BURV9NICAgICAweDNmCisjZWxpZiBMRU9OX1BBR0VfU0laRV9MRU9OID09IDMKKy8qIFsgNCwgNywgNiBdICsgMTUgKi8KKyNkZWZpbmUgTEVPTl9QR0RfU0ggICAgMjgKKyNkZWZpbmUgTEVPTl9QR0RfTSAgICAgMHgwZgorI2RlZmluZSBMRU9OX1BNRF9TSCAgICAyMQorI2RlZmluZSBMRU9OX1BNRF9TSF9WICAoTEVPTl9QR0RfU0gtMCkKKyNkZWZpbmUgTEVPTl9QTURfTSAgICAgMHg3ZgorI2RlZmluZSBMRU9OX1BURV9TSCAgICAxNQorI2RlZmluZSBMRU9OX1BURV9NICAgICAweDNmCisjZWxzZQorI2Vycm9yIGNhbm5vdCBkZXRlcm1pbmUgTEVPTl9QQUdFX1NJWkVfTEVPTgorI2VuZGlmCisKKyNkZWZpbmUgUEFHRV9NSU5fU0hJRlQgICAoMTIpCisjZGVmaW5lIFBBR0VfTUlOX1NJWkUgICAgKDFVTCA8PCBQQUdFX01JTl9TSElGVCkKKworI2RlZmluZSBMRU9OM19YQ0NSX1NFVFNfTUFTSyAgMHgwNzAwMDAwMFVMCisjZGVmaW5lIExFT04zX1hDQ1JfU1NJWkVfTUFTSyAweDAwZjAwMDAwVUwKKworI2RlZmluZSBMRU9OMl9DQ1JfRFNFVFNfTUFTSyAweDAzMDAwMDAwVUwKKyNkZWZpbmUgTEVPTjJfQ0ZHX1NTSVpFX01BU0sgMHgwMDAwNzAwMFVMCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzcm1tdV9zd3Byb2JlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgKnBhZGRyKTsKK2V4dGVybiB2b2lkIGxlb25fZmx1c2hfaWNhY2hlX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25fZmx1c2hfZGNhY2hlX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25fZmx1c2hfY2FjaGVfYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgbGVvbl9mbHVzaF90bGJfYWxsKHZvaWQpOworZXh0ZXJuIGludCBsZW9uX2ZsdXNoX2R1cmluZ19zd2l0Y2g7CitleHRlcm4gaW50IGxlb25fZmx1c2hfbmVlZGVkKHZvaWQpOworCitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CitleHRlcm4gdm9pZCBsZW9uX2ZsdXNoX2ljYWNoZV9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBsZW9uX2ZsdXNoX2RjYWNoZV9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBsZW9uX2ZsdXNoX3BjYWNoZV9hbGwoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcGFnZSk7CitleHRlcm4gdm9pZCBsZW9uX2ZsdXNoX2NhY2hlX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25fZmx1c2hfdGxiX2FsbCh2b2lkKTsKK2V4dGVybiBpbnQgbGVvbl9mbHVzaF9kdXJpbmdfc3dpdGNoOworZXh0ZXJuIGludCBsZW9uX2ZsdXNoX25lZWRlZCh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25fZmx1c2hfcGNhY2hlX2FsbChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBwYWdlKTsKKworLyogc3RydWN0IHRoYXQgaG9sZCBMRU9OMyBjYWNoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLworc3RydWN0IGxlb24zX2NhY2hlcmVncyB7CisJdW5zaWduZWQgbG9uZyBjY3I7CS8qIDB4MDAgLSBDYWNoZSBDb250cm9sIFJlZ2lzdGVyICAqLworCXVuc2lnbmVkIGxvbmcgaWNjcjsgICAgIC8qIDB4MDggLSBJbnN0cnVjdGlvbiBDYWNoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZyBkY2NyOwkvKiAweDBjIC0gRGF0YSBDYWNoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCit9OworCisvKiBzdHJ1Y3QgdGhhdCBob2xkIExFT04yIGNhY2hlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKKyAqICYgY29uZmlndXJhdGlvbiByZWdpc3RlcgorICovCitzdHJ1Y3QgbGVvbjJfY2FjaGVyZWdzIHsKKwl1bnNpZ25lZCBsb25nIGNjciwgY2ZnOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCitzdHJ1Y3QgZGV2aWNlX25vZGU7CitleHRlcm4gaW50IHNwYXJjX2xlb25fZWlycV9nZXQoaW50IGVpcnEsIGludCBjcHUpOworZXh0ZXJuIGlycXJldHVybl90IHNwYXJjX2xlb25fZWlycV9pc3IoaW50IGR1bW15LCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgc3BhcmNfbGVvbl9laXJxX3JlZ2lzdGVyKGludCBlaXJxKTsKK2V4dGVybiB2b2lkIGxlb25fY2xlYXJfY2xvY2tfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgbGVvbl9sb2FkX3Byb2ZpbGVfaXJxKGludCBjcHUsIHVuc2lnbmVkIGludCBsaW1pdCk7CitleHRlcm4gdm9pZCBsZW9uX2luaXRfdGltZXJzKGlycV9oYW5kbGVyX3QgY291bnRlcl9mbik7CitleHRlcm4gdm9pZCBsZW9uX2NsZWFyX2Nsb2NrX2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25fbG9hZF9wcm9maWxlX2lycShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbGltaXQpOworZXh0ZXJuIHZvaWQgbGVvbl90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApOworZXh0ZXJuIHZvaWQgbGVvbl9ub2RlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgc3RydWN0IGRldmljZV9ub2RlICoqKm5leHRwKTsKK2V4dGVybiB2b2lkIGxlb25faW5pdF9JUlEodm9pZCk7CitleHRlcm4gdm9pZCBsZW9uX2luaXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzcm1tdV9zd3Byb2JlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgKnBhZGRyKTsKK2V4dGVybiB2b2lkIGluaXRfbGVvbih2b2lkKTsKK2V4dGVybiB2b2lkIHBva2VfbGVvbnNwYXJjKHZvaWQpOworZXh0ZXJuIHZvaWQgbGVvbjNfZ2V0Q2FjaGVSZWdzKHN0cnVjdCBsZW9uM19jYWNoZXJlZ3MgKnJlZ3MpOworZXh0ZXJuIGludCBsZW9uX2ZsdXNoX25lZWRlZCh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25fc3dpdGNoX21tKHZvaWQpOworZXh0ZXJuIGludCBzcm1tdV9zd3Byb2JlX3RyYWNlOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qIG1hY3JvcyB1c2VkIGluIGxlb25fbW0uYyAqLworI2RlZmluZSBQRk4oeCkgICAgICAgICAgICgoeCkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgX3Bmbl92YWxpZChwZm4pCSAoKHBmbiA8IGxhc3RfdmFsaWRfcGZuKSAmJiAocGZuID49IFBGTihwaHlzX2Jhc2UpKSkKKyNkZWZpbmUgX1NSTU1VX1BURV9QTUFTS19MRU9OIDB4ZmZmZmZmZmYKKworI2Vsc2UgLyogZGVmaW5lZChDT05GSUdfU1BBUkNfTEVPTikgKi8KKworLyogbm9wIGRlZmluaXRpb25zIGZvciAhTEVPTiBjYXNlICovCisjZGVmaW5lIGxlb25faW5pdCgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBsZW9uX3N3aXRjaF9tbSgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBsZW9uX2luaXRfSVJRKCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGluaXRfbGVvbigpIGRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1NQQVJDX0xFT04pICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uX2FtYmEuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbl9hbWJhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4ZTg4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbl9hbWJhLmgKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisqQ29weXJpZ2h0IChDKSAyMDA0IEtvbnJhZCBFaXNlbGUgKGVpc2VsZWtkQHdlYi5kZSxrb25yYWRAZ2Fpc2xlci5jb20pLCBHYWlzbGVyIFJlc2VhcmNoCisqQ29weXJpZ2h0IChDKSAyMDA0IFN0ZWZhbiBIb2xzdCAobWFpbEBzLWhvbHN0LmRlKSwgVW5pLVN0dXR0Z2FydAorKkNvcHlyaWdodCAoQykgMjAwOSBEYW5pZWwgSGVsbHN0cm9tIChkYW5pZWxAZ2Fpc2xlci5jb20pLEtvbnJhZCBFaXNlbGUgKGtvbnJhZEBnYWlzbGVyLmNvbSkgQWVyb2ZsZXggR2Fpc2xlciBBQgorKi8KKworI2lmbmRlZiBMRU9OX0FNQkFfSF9JTkNMVURFCisjZGVmaW5lIExFT05fQU1CQV9IX0lOQ0xVREUKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGFtYmFfcHJvbV9yZWdpc3RlcnMgeworCXVuc2lnbmVkIGludCBwaHlzX2FkZHI7CS8qIFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBpbnQgcmVnX3NpemU7CS8qIEhvdyBtYW55IGJ5dGVzIGRvZXMgdGhpcyByZWdpc3RlciB0YWtlIHVwPyAqLworfTsKKworI2VuZGlmCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIHRoZSBiaXRzIGluIHRoZSBMRU9OIFVBUlQgU3RhdHVzIFJlZ2lzdGVycy4KKyAqLworCisjZGVmaW5lIExFT05fUkVHX1VBUlRfU1RBVFVTX0RSICAgMHgwMDAwMDAwMQkvKiBEYXRhIFJlYWR5ICovCisjZGVmaW5lIExFT05fUkVHX1VBUlRfU1RBVFVTX1RTRSAgMHgwMDAwMDAwMgkvKiBUWCBTZW5kIFJlZ2lzdGVyIEVtcHR5ICovCisjZGVmaW5lIExFT05fUkVHX1VBUlRfU1RBVFVTX1RIRSAgMHgwMDAwMDAwNAkvKiBUWCBIb2xkIFJlZ2lzdGVyIEVtcHR5ICovCisjZGVmaW5lIExFT05fUkVHX1VBUlRfU1RBVFVTX0JSICAgMHgwMDAwMDAwOAkvKiBCcmVhayBFcnJvciAqLworI2RlZmluZSBMRU9OX1JFR19VQVJUX1NUQVRVU19PRSAgIDB4MDAwMDAwMTAJLyogUlggT3ZlcnJ1biBFcnJvciAqLworI2RlZmluZSBMRU9OX1JFR19VQVJUX1NUQVRVU19QRSAgIDB4MDAwMDAwMjAJLyogUlggUGFyaXR5IEVycm9yICovCisjZGVmaW5lIExFT05fUkVHX1VBUlRfU1RBVFVTX0ZFICAgMHgwMDAwMDA0MAkvKiBSWCBGcmFtaW5nIEVycm9yICovCisjZGVmaW5lIExFT05fUkVHX1VBUlRfU1RBVFVTX0VSUiAgMHgwMDAwMDA3OAkvKiBFcnJvciBNYXNrICovCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIHRoZSBiaXRzIGluIHRoZSBMRU9OIFVBUlQgQ3RybCBSZWdpc3RlcnMuCisgKi8KKworI2RlZmluZSBMRU9OX1JFR19VQVJUX0NUUkxfUkUgICAgIDB4MDAwMDAwMDEJLyogUmVjZWl2ZXIgZW5hYmxlICovCisjZGVmaW5lIExFT05fUkVHX1VBUlRfQ1RSTF9URSAgICAgMHgwMDAwMDAwMgkvKiBUcmFuc21pdHRlciBlbmFibGUgKi8KKyNkZWZpbmUgTEVPTl9SRUdfVUFSVF9DVFJMX1JJICAgICAweDAwMDAwMDA0CS8qIFJlY2VpdmVyIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgTEVPTl9SRUdfVUFSVF9DVFJMX1RJICAgICAweDAwMDAwMDA4CS8qIFRyYW5zbWl0dGVyIGlycSAqLworI2RlZmluZSBMRU9OX1JFR19VQVJUX0NUUkxfUFMgICAgIDB4MDAwMDAwMTAJLyogUGFyaXR5IHNlbGVjdCAqLworI2RlZmluZSBMRU9OX1JFR19VQVJUX0NUUkxfUEUgICAgIDB4MDAwMDAwMjAJLyogUGFyaXR5IGVuYWJsZSAqLworI2RlZmluZSBMRU9OX1JFR19VQVJUX0NUUkxfRkwgICAgIDB4MDAwMDAwNDAJLyogRmxvdyBjb250cm9sIGVuYWJsZSAqLworI2RlZmluZSBMRU9OX1JFR19VQVJUX0NUUkxfTEIgICAgIDB4MDAwMDAwODAJLyogTG9vcCBCYWNrIGVuYWJsZSAqLworCisjZGVmaW5lIExFT04zX0dQVElNRVJfRU4gMQorI2RlZmluZSBMRU9OM19HUFRJTUVSX1JMIDIKKyNkZWZpbmUgTEVPTjNfR1BUSU1FUl9MRCA0CisjZGVmaW5lIExFT04zX0dQVElNRVJfSVJRRU4gOAorI2RlZmluZSBMRU9OM19HUFRJTUVSX1NFUElSUSA4CisKKyNkZWZpbmUgTEVPTjIzX1JFR19USU1FUl9DT05UUk9MX0VOICAgIDB4MDAwMDAwMDEgLyogMSA9IGVuYWJsZSBjb3VudGluZyAqLworLyogMCA9IGhvbGQgc2NhbGFyIGFuZCBjb3VudGVyICovCisjZGVmaW5lIExFT04yM19SRUdfVElNRVJfQ09OVFJPTF9STCAgICAweDAwMDAwMDAyIC8qIDEgPSByZWxvYWQgYXQgMCAqLworCQkJCQkJICAvKiAwID0gc3RvcCBhdCAwICovCisjZGVmaW5lIExFT04yM19SRUdfVElNRVJfQ09OVFJPTF9MRCAgICAweDAwMDAwMDA0IC8qIDEgPSBsb2FkIGNvdW50ZXIgKi8KKwkJCQkJCSAgLyogMCA9IG5vIGZ1bmN0aW9uICovCisjZGVmaW5lIExFT04yM19SRUdfVElNRVJfQ09OVFJPTF9JUSAgICAweDAwMDAwMDA4IC8qIDEgPSBpcnEgZW5hYmxlICovCisJCQkJCQkgIC8qIDAgPSBubyBmdW5jdGlvbiAqLworCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyB0aGUgYml0cyBpbiB0aGUgTEVPTiBQUy8yIFN0YXR1cyBSZWdpc3RlcnMuCisgKi8KKworI2RlZmluZSBMRU9OX1JFR19QUzJfU1RBVFVTX0RSICAgMHgwMDAwMDAwMQkvKiBEYXRhIFJlYWR5ICovCisjZGVmaW5lIExFT05fUkVHX1BTMl9TVEFUVVNfUEUgICAweDAwMDAwMDAyCS8qIFBhcml0eSBlcnJvciAqLworI2RlZmluZSBMRU9OX1JFR19QUzJfU1RBVFVTX0ZFICAgMHgwMDAwMDAwNAkvKiBGcmFtaW5nIGVycm9yICovCisjZGVmaW5lIExFT05fUkVHX1BTMl9TVEFUVVNfS0kgICAweDAwMDAwMDA4CS8qIEtleWJvYXJkIGluaGliaXQgKi8KKyNkZWZpbmUgTEVPTl9SRUdfUFMyX1NUQVRVU19SRiAgIDB4MDAwMDAwMTAJLyogUlggYnVmZmVyIGZ1bGwgKi8KKyNkZWZpbmUgTEVPTl9SRUdfUFMyX1NUQVRVU19URiAgIDB4MDAwMDAwMjAJLyogVFggYnVmZmVyIGZ1bGwgKi8KKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgdGhlIGJpdHMgaW4gdGhlIExFT04gUFMvMiBDdHJsIFJlZ2lzdGVycy4KKyAqLworCisjZGVmaW5lIExFT05fUkVHX1BTMl9DVFJMX1JFIDB4MDAwMDAwMDEJLyogUmVjZWl2ZXIgZW5hYmxlICovCisjZGVmaW5lIExFT05fUkVHX1BTMl9DVFJMX1RFIDB4MDAwMDAwMDIJLyogVHJhbnNtaXR0ZXIgZW5hYmxlICovCisjZGVmaW5lIExFT05fUkVHX1BTMl9DVFJMX1JJIDB4MDAwMDAwMDQJLyogS2V5Ym9hcmQgcmVjZWl2ZSBpcnEgICovCisjZGVmaW5lIExFT05fUkVHX1BTMl9DVFJMX1RJIDB4MDAwMDAwMDgJLyogS2V5Ym9hcmQgdHJhbnNtaXQgaXJxICovCisKKyNkZWZpbmUgTEVPTjNfSVJRTVBTVEFUVVNfQ1BVTlIgICAgIDI4CisjZGVmaW5lIExFT04zX0lSUU1QU1RBVFVTX0JST0FEQ0FTVCAyNworCisjZGVmaW5lIEdQVElNRVJfQ09ORklHX0lSUU5UKGEpICAgICAgICAgICgoKGEpID4+IDMpICYgMHgxZikKKyNkZWZpbmUgR1BUSU1FUl9DT05GSUdfSVNTRVAoYSkgICAgICAgICAgKChhKSAmICgxIDw8IDgpKQorI2RlZmluZSBHUFRJTUVSX0NPTkZJR19OVElNRVJTKGEpICAgICAgICAoKGEpICYgKDB4NykpCisjZGVmaW5lIExFT04zX0dQVElNRVJfQ1RSTF9QRU5ESU5HICAgICAgIDB4MTAKKyNkZWZpbmUgTEVPTjNfR1BUSU1FUl9DT05GSUdfTlJUSU1FUlMoYykgKChjKS0+Y29uZmlnICYgMHg3KQorI2RlZmluZSBMRU9OM19HUFRJTUVSX0NUUkxfSVNQRU5ESU5HKHIpICAoKChyKSZMRU9OM19HUFRJTUVSX0NUUkxfUEVORElORykgPyAxIDogMCkKKworI2lmZGVmIENPTkZJR19TUEFSQ19MRU9OCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBsZW9uM19pcnFjdHJsX3JlZ3NfbWFwIHsKKwl1MzIgaWxldmVsOworCXUzMiBpcGVuZDsKKwl1MzIgaWZvcmNlOworCXUzMiBpY2xlYXI7CisJdTMyIG1wc3RhdHVzOworCXUzMiBtcGJyb2FkY2FzdDsKKwl1MzIgbm90dXNlZDAyOworCXUzMiBub3R1c2VkMDM7CisJdTMyIG5vdHVzZWQxMDsKKwl1MzIgbm90dXNlZDExOworCXUzMiBub3R1c2VkMTI7CisJdTMyIG5vdHVzZWQxMzsKKwl1MzIgbm90dXNlZDIwOworCXUzMiBub3R1c2VkMjE7CisJdTMyIG5vdHVzZWQyMjsKKwl1MzIgbm90dXNlZDIzOworCXUzMiBtYXNrWzE2XTsKKwl1MzIgZm9yY2VbMTZdOworCS8qIEV4dGVuZGVkIElSUSByZWdpc3RlcnMgKi8KKwl1MzIgaW50aWRbMTZdOwkvKiAweGMwICovCit9OworCitzdHJ1Y3QgbGVvbjNfYXBidWFydF9yZWdzX21hcCB7CisJdTMyIGRhdGE7CisJdTMyIHN0YXR1czsKKwl1MzIgY3RybDsKKwl1MzIgc2NhbGVyOworfTsKKworc3RydWN0IGxlb24zX2dwdGltZXJlbGVtX3JlZ3NfbWFwIHsKKwl1MzIgdmFsOworCXUzMiBybGQ7CisJdTMyIGN0cmw7CisJdTMyIHVudXNlZDsKK307CisKK3N0cnVjdCBsZW9uM19ncHRpbWVyX3JlZ3NfbWFwIHsKKwl1MzIgc2NhbGFyOworCXUzMiBzY2FsYXJfcmVsb2FkOworCXUzMiBjb25maWc7CisJdTMyIHVudXNlZDsKKwlzdHJ1Y3QgbGVvbjNfZ3B0aW1lcmVsZW1fcmVnc19tYXAgZVs4XTsKK307CisKKy8qCisgKiAgVHlwZXMgYW5kIHN0cnVjdHVyZSB1c2VkIGZvciBBTUJBIFBsdWcgJiBQbGF5IGJ1cyBzY2FubmluZworICovCisKKyNkZWZpbmUgQU1CQV9NQVhBUEJfREVWUyA2NAorI2RlZmluZSBBTUJBX01BWEFQQl9ERVZTX1BFUkJVUyAxNgorCitzdHJ1Y3QgYW1iYV9kZXZpY2VfdGFibGUgeworCWludCBkZXZucjsJCSAgIC8qIG51bWJlciBvZiBkZXZpY2VzIG9uIEFIQiBvciBBUEIgYnVzICovCisJdW5zaWduZWQgaW50ICphZGRyWzE2XTsgICAgLyogYWRkcmVzc2VzIHRvIHRoZSBkZXZpY2VzIGNvbmZpZ3VyYXRpb24gdGFibGVzICovCisJdW5zaWduZWQgaW50IGFsbG9jYml0c1sxXTsgLyogMD11bmFsbG9jYXRlZCwgMT1hbGxvY2F0ZWQgZHJpdmVyICovCit9OworCitzdHJ1Y3QgYW1iYV9hcGJzbHZfZGV2aWNlX3RhYmxlIHsKKwlpbnQgZGV2bnI7CQkgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGV2aWNlcyBvbiBBSEIgb3IgQVBCIGJ1cyAqLworCXVuc2lnbmVkIGludCAqYWRkcltBTUJBX01BWEFQQl9ERVZTXTsgICAgIC8qIGFkZHJlc3NlcyB0byB0aGUgZGV2aWNlcyBjb25maWd1cmF0aW9uIHRhYmxlcyAqLworCXVuc2lnbmVkIGludCBhcGJtc3RbQU1CQV9NQVhBUEJfREVWU107ICAgIC8qIGFwYiBtYXN0ZXIgaWYgYSBlbnRyeSBpcyBhIGFwYiBzbGF2ZSAqLworCXVuc2lnbmVkIGludCBhcGJtc3RpZHhbQU1CQV9NQVhBUEJfREVWU107IC8qIGFwYiBtYXN0ZXIgaWR4IGlmIGEgZW50cnkgaXMgYSBhcGIgc2xhdmUgKi8KKwl1bnNpZ25lZCBpbnQgYWxsb2NiaXRzWzRdOyAgICAgICAgICAgICAgICAvKiAwPXVuYWxsb2NhdGVkLCAxPWFsbG9jYXRlZCBkcml2ZXIgKi8KK307CisKK3N0cnVjdCBhbWJhX2NvbmZhcmVhX3R5cGUgeworCXN0cnVjdCBhbWJhX2NvbmZhcmVhX3R5cGUgKm5leHQ7LyogbmV4dCBidXMgaW4gY2hhaW4gKi8KKwlzdHJ1Y3QgYW1iYV9kZXZpY2VfdGFibGUgYWhibXN0OworCXN0cnVjdCBhbWJhX2RldmljZV90YWJsZSBhaGJzbHY7CisJc3RydWN0IGFtYmFfYXBic2x2X2RldmljZV90YWJsZSBhcGJzbHY7CisJdW5zaWduZWQgaW50IGFwYm1zdDsKK307CisKKy8qIGNvbGxlY3QgYXBiIHNsYXZlcyAqLworc3RydWN0IGFtYmFfYXBiX2RldmljZSB7CisJdW5zaWduZWQgaW50IHN0YXJ0LCBpcnEsIGJ1c19pZDsKKwlzdHJ1Y3QgYW1iYV9jb25mYXJlYV90eXBlICpidXM7Cit9OworCisvKiBjb2xsZWN0IGFoYiBzbGF2ZXMgKi8KK3N0cnVjdCBhbWJhX2FoYl9kZXZpY2UgeworCXVuc2lnbmVkIGludCBzdGFydFs0XSwgaXJxLCBidXNfaWQ7CisJc3RydWN0IGFtYmFfY29uZmFyZWFfdHlwZSAqYnVzOworfTsKKworc3RydWN0IGRldmljZV9ub2RlOwordm9pZCBfYW1iYV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKipuZXh0cCk7CisKK2V4dGVybiBzdHJ1Y3QgbGVvbjNfaXJxY3RybF9yZWdzX21hcCAqbGVvbjNfaXJxY3RybF9yZWdzOworZXh0ZXJuIHN0cnVjdCBsZW9uM19ncHRpbWVyX3JlZ3NfbWFwICpsZW9uM19ncHRpbWVyX3JlZ3M7CitleHRlcm4gc3RydWN0IGFtYmFfYXBiX2RldmljZSBsZW9uX3BlcmNwdV90aW1lcl9kZXZbMTZdOworZXh0ZXJuIGludCBsZW9uZGVidWdfaXJxX2Rpc2FibGU7CitleHRlcm4gaW50IGxlb25fZGVidWdfaXJxb3V0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbGVvbjNfZ3B0aW1lcl9pcnE7CitleHRlcm4gdW5zaWduZWQgaW50IHNwYXJjX2xlb25fZWlycTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIExFT04zX0lPX0FSRUEgMHhmZmYwMDAwMAorI2RlZmluZSBMRU9OM19DT05GX0FSRUEgMHhmZjAwMAorI2RlZmluZSBMRU9OM19BSEJfU0xBVkVfQ09ORl9BUkVBICgxIDw8IDExKQorCisjZGVmaW5lIExFT04zX0FIQl9DT05GX1dPUkRTIDgKKyNkZWZpbmUgTEVPTjNfQVBCX0NPTkZfV09SRFMgMgorI2RlZmluZSBMRU9OM19BSEJfTUFTVEVSUyAxNgorI2RlZmluZSBMRU9OM19BSEJfU0xBVkVTIDE2CisjZGVmaW5lIExFT04zX0FQQl9TTEFWRVMgMTYKKyNkZWZpbmUgTEVPTjNfQVBCVUFSVFMgOAorCisvKiBWZW5kb3IgY29kZXMgKi8KKyNkZWZpbmUgVkVORE9SX0dBSVNMRVIgICAxCisjZGVmaW5lIFZFTkRPUl9QRU5ERVIgICAgMgorI2RlZmluZSBWRU5ET1JfRVNBICAgICAgIDQKKyNkZWZpbmUgVkVORE9SX09QRU5DT1JFUyA4CisKKy8qIEdhaXNsZXIgUmVzZWFyY2ggZGV2aWNlIGlkJ3MgKi8KKyNkZWZpbmUgR0FJU0xFUl9MRU9OMyAgICAweDAwMworI2RlZmluZSBHQUlTTEVSX0xFT04zRFNVIDB4MDA0CisjZGVmaW5lIEdBSVNMRVJfRVRIQUhCICAgMHgwMDUKKyNkZWZpbmUgR0FJU0xFUl9BUEJNU1QgICAweDAwNgorI2RlZmluZSBHQUlTTEVSX0FIQlVBUlQgIDB4MDA3CisjZGVmaW5lIEdBSVNMRVJfU1JDVFJMICAgMHgwMDgKKyNkZWZpbmUgR0FJU0xFUl9TRENUUkwgICAweDAwOQorI2RlZmluZSBHQUlTTEVSX0FQQlVBUlQgIDB4MDBDCisjZGVmaW5lIEdBSVNMRVJfSVJRTVAgICAgMHgwMEQKKyNkZWZpbmUgR0FJU0xFUl9BSEJSQU0gICAweDAwRQorI2RlZmluZSBHQUlTTEVSX0dQVElNRVIgIDB4MDExCisjZGVmaW5lIEdBSVNMRVJfUENJVFJHICAgMHgwMTIKKyNkZWZpbmUgR0FJU0xFUl9QQ0lTQlJHICAweDAxMworI2RlZmluZSBHQUlTTEVSX1BDSUZCUkcgIDB4MDE0CisjZGVmaW5lIEdBSVNMRVJfUENJVFJBQ0UgMHgwMTUKKyNkZWZpbmUgR0FJU0xFUl9QQ0lETUEgICAweDAxNgorI2RlZmluZSBHQUlTTEVSX0FIQlRSQUNFIDB4MDE3CisjZGVmaW5lIEdBSVNMRVJfRVRIRFNVICAgMHgwMTgKKyNkZWZpbmUgR0FJU0xFUl9QSU9QT1JUICAweDAxQQorI2RlZmluZSBHQUlTTEVSX0dSR1BJTyAgIDB4MDFBCisjZGVmaW5lIEdBSVNMRVJfQUhCSlRBRyAgMHgwMWMKKyNkZWZpbmUgR0FJU0xFUl9FVEhNQUMgICAweDAxRAorI2RlZmluZSBHQUlTTEVSX0FIQjJBSEIgIDB4MDIwCisjZGVmaW5lIEdBSVNMRVJfVVNCREMgICAgMHgwMjEKKyNkZWZpbmUgR0FJU0xFUl9BVEFDVFJMICAweDAyNAorI2RlZmluZSBHQUlTTEVSX0REUlNQQSAgIDB4MDI1CisjZGVmaW5lIEdBSVNMRVJfVVNCRUhDICAgMHgwMjYKKyNkZWZpbmUgR0FJU0xFUl9VU0JVSEMgICAweDAyNworI2RlZmluZSBHQUlTTEVSX0kyQ01TVCAgIDB4MDI4CisjZGVmaW5lIEdBSVNMRVJfU1BJQ1RSTCAgMHgwMkQKKyNkZWZpbmUgR0FJU0xFUl9ERFIyU1BBICAweDAyRQorI2RlZmluZSBHQUlTTEVSX1NQSU1DVFJMIDB4MDQ1CisjZGVmaW5lIEdBSVNMRVJfTEVPTjQgICAgMHgwNDgKKyNkZWZpbmUgR0FJU0xFUl9MRU9ONERTVSAweDA0OQorI2RlZmluZSBHQUlTTEVSX0FIQlNUQVQgIDB4MDUyCisjZGVmaW5lIEdBSVNMRVJfRlRNQ1RSTCAgMHgwNTQKKyNkZWZpbmUgR0FJU0xFUl9LQkQgICAgICAweDA2MAorI2RlZmluZSBHQUlTTEVSX1ZHQSAgICAgIDB4MDYxCisjZGVmaW5lIEdBSVNMRVJfU1ZHQSAgICAgMHgwNjMKKyNkZWZpbmUgR0FJU0xFUl9HUlNZU01PTiAweDA2NgorI2RlZmluZSBHQUlTTEVSX0dSQUNFQ1RSTCAweDA2NworCisjZGVmaW5lIEdBSVNMRVJfTDJUSU1FICAgMHhmZmQJLyogaW50ZXJuYWwgZGV2aWNlOiBsZW9uMiB0aW1lciAqLworI2RlZmluZSBHQUlTTEVSX0wyQyAgICAgIDB4ZmZlCS8qIGludGVybmFsIGRldmljZTogbGVvbjJjb21wYXQgKi8KKyNkZWZpbmUgR0FJU0xFUl9QTFVHUExBWSAweGZmZgkvKiBpbnRlcm5hbCBkZXZpY2U6IHBsdWcgJiBwbGF5IGNvbmZpZ2FyZWEgKi8KKworI2RlZmluZSBhbWJhX3ZlbmRvcih4KSAoKCh4KSA+PiAyNCkgJiAweGZmKQorCisjZGVmaW5lIGFtYmFfZGV2aWNlKHgpICgoKHgpID4+IDEyKSAmIDB4ZmZmKQorCisjZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1NQQVJDX0xFT04pICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tYWNoaW5lcy5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tYWNoaW5lcy5oCmluZGV4IGMyOGMyZjIuLmNkOWMwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbWFjaGluZXMuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21hY2hpbmVzLmgKQEAgLTE1LDcgKzE1LDcgQEAKIC8qIEN1cnJlbnQgbnVtYmVyIG9mIG1hY2hpbmVzIHdlIGtub3cgYWJvdXQgdGhhdCBoYXMgYW4gSURQUk9NCiAgKiBtYWNodHlwZSBlbnRyeSBpbmNsdWRpbmcgb25lIGVudHJ5IGZvciB0aGUgMHg4MCBPQlAgbWFjaGluZXMuCiAgKi8KLSNkZWZpbmUgTlVNX1NVTl9NQUNISU5FUyAgIDE1CisjZGVmaW5lIE5VTV9TVU5fTUFDSElORVMgICAxNgogCiAvKiBUaGUgbWFjaGluZSB0eXBlIGluIHRoZSBpZHByb20gYXJlYSBsb29rcyBsaWtlIHRoaXM6CiAgKgpAQCAtMzAsNiArMzAsNyBAQAogCiAjZGVmaW5lIFNNX0FSQ0hfTUFTSyAgMHhmMAogI2RlZmluZSBTTV9TVU40ICAgICAgIDB4MjAKKyNkZWZpbmUgIE1fTEVPTiAgICAgICAweDMwCiAjZGVmaW5lIFNNX1NVTjRDICAgICAgMHg1MAogI2RlZmluZSBTTV9TVU40TSAgICAgIDB4NzAKICNkZWZpbmUgU01fU1VONE1fT0JQICAweDgwCkBAIC00MSw2ICs0Miw5IEBACiAjZGVmaW5lIFNNXzRfMzMwICAgICAgMHgwMyAgICAvKiBTdW4gNC8zMDAgc2VyaWVzICovCiAjZGVmaW5lIFNNXzRfNDcwICAgICAgMHgwNCAgICAvKiBTdW4gNC80MDAgc2VyaWVzICovCiAKKy8qIExlb24gbWFjaGluZXMgKi8KKyNkZWZpbmUgTV9MRU9OM19TT0MgICAweDAyICAgIC8qIExlb24zIFNvQyAqLworCiAvKiBTdW40YyBtYWNoaW5lcyAgICAgICAgICAgICAgICBGdWxsIE5hbWUgICAgICAgICAgICAgIC0gUFJPTSBOQU1FICovCiAjZGVmaW5lIFNNXzRDX1NTMSAgICAgMHgwMSAgICAvKiBTdW40YyBTcGFyY1N0YXRpb24gMSAgIC0gU3VuIDQvNjAgICovCiAjZGVmaW5lIFNNXzRDX0lQQyAgICAgMHgwMiAgICAvKiBTdW40YyBTcGFyY1N0YXRpb24gSVBDIC0gU3VuIDQvNDAgICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL25taS5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9ubWkuaAppbmRleCBmYmQ1NDZkLi43MmU2NTAwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL25taS5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbm1pLmgKQEAgLTUsNiArNSw5IEBACiBleHRlcm4gdm9pZCBwZXJmY3RyX2lycShpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBubWlfYWRqdXN0X2h6KHVuc2lnbmVkIGludCBuZXdfaHopOwogCi1leHRlcm4gaW50IG5taV91c2FibGU7CitleHRlcm4gYXRvbWljX3Qgbm1pX2FjdGl2ZTsKKworZXh0ZXJuIHZvaWQgc3RhcnRfbm1pX3dhdGNoZG9nKHZvaWQgKnVudXNlZCk7CitleHRlcm4gdm9pZCBzdG9wX25taV93YXRjaGRvZyh2b2lkICp1bnVzZWQpOwogCiAjZW5kaWYgLyogX19OTUlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggNmUxNGZkMS4uZDljMDMxZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC01LDQgKzUsNyBAQAogI2Vsc2UKICNpbmNsdWRlIDxhc20vcGNpXzMyLmg+CiAjZW5kaWYKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS1kbWEtY29tcGF0Lmg+CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpXzMyLmgKaW5kZXggODEwZDkyNC4uZTc2OWY2NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV8zMi5oCkBAIC0zMCw0MiArMzAsOCBAQAogICovCiAjZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMJKDApCiAKLSNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KLQogc3RydWN0IHBjaV9kZXY7CiAKLS8qIEFsbG9jYXRlIGFuZCBtYXAga2VybmVsIGJ1ZmZlciB1c2luZyBjb25zaXN0ZW50IG1vZGUgRE1BIGZvciBhIGRldmljZS4KLSAqIGh3ZGV2IHNob3VsZCBiZSB2YWxpZCBzdHJ1Y3QgcGNpX2RldiBwb2ludGVyIGZvciBQQ0kgZGV2aWNlcy4KLSAqLwotZXh0ZXJuIHZvaWQgKnBjaV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpOwotCi0vKiBGcmVlIGFuZCB1bm1hcCBhIGNvbnNpc3RlbnQgRE1BIGJ1ZmZlci4KLSAqIGNwdV9hZGRyIGlzIHdoYXQgd2FzIHJldHVybmVkIGZyb20gcGNpX2FsbG9jX2NvbnNpc3RlbnQsCi0gKiBzaXplIG11c3QgYmUgdGhlIHNhbWUgYXMgd2hhdCBhcyBwYXNzZWQgaW50byBwY2lfYWxsb2NfY29uc2lzdGVudCwKLSAqIGFuZCBsaWtld2lzZSBkbWFfYWRkciBtdXN0IGJlIHRoZSBzYW1lIGFzIHdoYXQgKmRtYV9hZGRycCB3YXMgc2V0IHRvLgotICoKLSAqIFJlZmVyZW5jZXMgdG8gdGhlIG1lbW9yeSBhbmQgbWFwcGluZ3MgYXNzb3NjaWF0ZWQgd2l0aCBjcHVfYWRkci9kbWFfYWRkcgotICogcGFzdCB0aGlzIGNhbGwgYXJlIGlsbGVnYWwuCi0gKi8KLWV4dGVybiB2b2lkIHBjaV9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7Ci0KLS8qIE1hcCBhIHNpbmdsZSBidWZmZXIgb2YgdGhlIGluZGljYXRlZCBzaXplIGZvciBETUEgaW4gc3RyZWFtaW5nIG1vZGUuCi0gKiBUaGUgMzItYml0IGJ1cyBhZGRyZXNzIHRvIHVzZSBpcyByZXR1cm5lZC4KLSAqCi0gKiBPbmNlIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gdGhlIGRtYSBhZGRyZXNzLCB0aGUgZGV2aWNlIG93bnMgdGhpcyBtZW1vcnkKLSAqIHVudGlsIGVpdGhlciBwY2lfdW5tYXBfc2luZ2xlIG9yIHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSBpcyBwZXJmb3JtZWQuCi0gKi8KLWV4dGVybiBkbWFfYWRkcl90IHBjaV9tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0KLS8qIFVubWFwIGEgc2luZ2xlIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbi4gIFRoZSBkbWFfYWRkciBhbmQgc2l6ZQotICogbXVzdCBtYXRjaCB3aGF0IHdhcyBwcm92aWRlZCBmb3IgaW4gYSBwcmV2aW91cyBwY2lfbWFwX3NpbmdsZSBjYWxsLiAgQWxsCi0gKiBvdGhlciB1c2FnZXMgYXJlIHVuZGVmaW5lZC4KLSAqCi0gKiBBZnRlciB0aGlzIGNhbGwsIHJlYWRzIGJ5IHRoZSBjcHUgdG8gdGhlIGJ1ZmZlciBhcmUgZ3VhcmFudGVlZCB0byBzZWUKLSAqIHdoYXRldmVyIHRoZSBkZXZpY2Ugd3JvdGUgdGhlcmUuCi0gKi8KLWV4dGVybiB2b2lkIHBjaV91bm1hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0KIC8qIHBjaV91bm1hcF97c2luZ2xlLHBhZ2V9IGlzIG5vdCBhIG5vcCwgdGh1cy4uLiAqLwogI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkJXAogCWRtYV9hZGRyX3QgQUREUl9OQU1FOwpAQCAtODAsNjkgKzQ2LDYgQEAKICNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKQkJXAogCSgoKFBUUiktPkxFTl9OQU1FKSA9IChWQUwpKQogCi0vKgotICogU2FtZSBhcyBhYm92ZSwgb25seSB3aXRoIHBhZ2VzIGluc3RlYWQgb2YgbWFwcGVkIGFkZHJlc3Nlcy4KLSAqLwotZXh0ZXJuIGRtYV9hZGRyX3QgcGNpX21hcF9wYWdlKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotZXh0ZXJuIHZvaWQgcGNpX3VubWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LAotCQkJZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCi0vKiBNYXAgYSBzZXQgb2YgYnVmZmVycyBkZXNjcmliZWQgYnkgc2NhdHRlcmxpc3QgaW4gc3RyZWFtaW5nCi0gKiBtb2RlIGZvciBETUEuICBUaGlzIGlzIHRoZSBzY2F0aGVyLWdhdGhlciB2ZXJzaW9uIG9mIHRoZQotICogYWJvdmUgcGNpX21hcF9zaW5nbGUgaW50ZXJmYWNlLiAgSGVyZSB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdAotICogZWxlbWVudHMgYXJlIGVhY2ggdGFnZ2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRtYSBhZGRyZXNzCi0gKiBhbmQgbGVuZ3RoLiAgVGhleSBhcmUgb2J0YWluZWQgdmlhIHNnX2RtYV97YWRkcmVzcyxsZW5ndGh9KFNHKS4KLSAqCi0gKiBOT1RFOiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgYWJsZSB0byB1c2UgYSBzbWFsbGVyIG51bWJlciBvZgotICogICAgICAgRE1BIGFkZHJlc3MvbGVuZ3RoIHBhaXJzIHRoYW4gdGhlcmUgYXJlIFNHIHRhYmxlIGVsZW1lbnRzLgotICogICAgICAgKGZvciBleGFtcGxlIHZpYSB2aXJ0dWFsIG1hcHBpbmcgY2FwYWJpbGl0aWVzKQotICogICAgICAgVGhlIHJvdXRpbmUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFkZHIvbGVuZ3RoIHBhaXJzIGFjdHVhbGx5Ci0gKiAgICAgICB1c2VkLCBhdCBtb3N0IG5lbnRzLgotICoKLSAqIERldmljZSBvd25lcnNoaXAgaXNzdWVzIGFzIG1lbnRpb25lZCBhYm92ZSBmb3IgcGNpX21hcF9zaW5nbGUgYXJlCi0gKiB0aGUgc2FtZSBoZXJlLgotICovCi1leHRlcm4gaW50IHBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pOwotCi0vKiBVbm1hcCBhIHNldCBvZiBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb25zLgotICogQWdhaW4sIGNwdSByZWFkIHJ1bGVzIGNvbmNlcm5pbmcgY2FsbHMgaGVyZSBhcmUgdGhlIHNhbWUgYXMgZm9yCi0gKiBwY2lfdW5tYXBfc2luZ2xlKCkgYWJvdmUuCi0gKi8KLWV4dGVybiB2b2lkIHBjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuaHdlbnRzLCBpbnQgZGlyZWN0aW9uKTsKLQotLyogTWFrZSBwaHlzaWNhbCBtZW1vcnkgY29uc2lzdGVudCBmb3IgYSBzaW5nbGUKLSAqIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbiBhZnRlciBhIHRyYW5zZmVyLgotICoKLSAqIElmIHlvdSBwZXJmb3JtIGEgcGNpX21hcF9zaW5nbGUoKSBidXQgd2lzaCB0byBpbnRlcnJvZ2F0ZSB0aGUKLSAqIGJ1ZmZlciB1c2luZyB0aGUgY3B1LCB5ZXQgZG8gbm90IHdpc2ggdG8gdGVhcmRvd24gdGhlIFBDSSBkbWEKLSAqIG1hcHBpbmcsIHlvdSBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgZG9pbmcgc28uICBBdCB0aGUKLSAqIG5leHQgcG9pbnQgeW91IGdpdmUgdGhlIFBDSSBkbWEgYWRkcmVzcyBiYWNrIHRvIHRoZSBjYXJkLCB5b3UKLSAqIG11c3QgZmlyc3QgcGVyZm9ybSBhIHBjaV9kbWFfc3luY19mb3JfZGV2aWNlLCBhbmQgdGhlbiB0aGUgZGV2aWNlCi0gKiBhZ2FpbiBvd25zIHRoZSBidWZmZXIuCi0gKi8KLWV4dGVybiB2b2lkIHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotZXh0ZXJuIHZvaWQgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0KLS8qIE1ha2UgcGh5c2ljYWwgbWVtb3J5IGNvbnNpc3RlbnQgZm9yIGEgc2V0IG9mIHN0cmVhbWluZwotICogbW9kZSBETUEgdHJhbnNsYXRpb25zIGFmdGVyIGEgdHJhbnNmZXIuCi0gKgotICogVGhlIHNhbWUgYXMgcGNpX2RtYV9zeW5jX3NpbmdsZV8qIGJ1dCBmb3IgYSBzY2F0dGVyLWdhdGhlciBsaXN0LAotICogc2FtZSBydWxlcyBhbmQgdXNhZ2UuCi0gKi8KLWV4dGVybiB2b2lkIHBjaV9kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbik7Ci1leHRlcm4gdm9pZCBwY2lfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pOwotCi0vKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gUENJIGRldmljZSBETUEgYWRkcmVzcyBtYXNrIGNhbgotICogYmUgc3VwcG9ydGVkIHByb3Blcmx5LiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgZGV2aWNlIGNhbgotICogb25seSBkcml2ZSB0aGUgbG93IDI0LWJpdHMgZHVyaW5nIFBDSSBidXMgbWFzdGVyaW5nLCB0aGVuCi0gKiB5b3Ugd291bGQgcGFzcyAweDAwZmZmZmZmIGFzIHRoZSBtYXNrIHRvIHRoaXMgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHBjaV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgdTY0IG1hc2spCi17Ci0JcmV0dXJuIDE7Ci19Ci0KICNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9idXJzdF9hZHZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCWVudW0gcGNpX2RtYV9idXJzdF9zdHJhdGVneSAqc3RyYXQsCkBAIC0xNTMsMTQgKzU2LDYgQEAKIH0KICNlbmRpZgogCi0jZGVmaW5lIFBDSV9ETUFfRVJST1JfQ09ERSAgICAgICh+KGRtYV9hZGRyX3QpMHgwKQotCi1zdGF0aWMgaW5saW5lIGludCBwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIpCi17Ci0gICAgICAgIHJldHVybiAoZG1hX2FkZHIgPT0gUENJX0RNQV9FUlJPUl9DT0RFKTsKLX0KLQogc3RydWN0IGRldmljZV9ub2RlOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGNpX2RldmljZV90b19PRl9ub2RlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpXzY0LmgKaW5kZXggYTMyOTcwOC4uYjYzZTUxYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV82NC5oCkBAIC0zNCwzNyArMzQsNiBAQAogICovCiAjZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMJKDApCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqcGNpX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzaXplLAotCQkJCQkgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSkKLXsKLQlyZXR1cm4gZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemUsIGRtYV9oYW5kbGUsIEdGUF9BVE9NSUMpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IHNpemUsCi0JCQkJICAgICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCi17Ci0JcmV0dXJuIGRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemUsIHZhZGRyLCBkbWFfaGFuZGxlKTsKLX0KLQotc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHBjaV9tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpwdHIsCi0JCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQotewotCXJldHVybiBkbWFfbWFwX3NpbmdsZSgmcGRldi0+ZGV2LCBwdHIsIHNpemUsCi0JCQkgICAgICAoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfdW5tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAotCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKLXsKLQlkbWFfdW5tYXBfc2luZ2xlKCZwZGV2LT5kZXYsIGRtYV9hZGRyLCBzaXplLAotCQkJIChlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKLX0KLQotI2RlZmluZSBwY2lfbWFwX3BhZ2UoZGV2LCBwYWdlLCBvZmYsIHNpemUsIGRpcikgXAotCXBjaV9tYXBfc2luZ2xlKGRldiwgKHBhZ2VfYWRkcmVzcyhwYWdlKSArIChvZmYpKSwgc2l6ZSwgZGlyKQotI2RlZmluZSBwY2lfdW5tYXBfcGFnZShkZXYsYWRkcixzeixkaXIpIFwKLQlwY2lfdW5tYXBfc2luZ2xlKGRldixhZGRyLHN6LGRpcikKLQogLyogcGNpX3VubWFwX3tzaW5nbGUscGFnZX0gaXMgbm90IGEgbm9wLCB0aHVzLi4uICovCiAjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQlcCiAJZG1hX2FkZHJfdCBBRERSX05BTUU7CkBAIC03OSw1NyArNDgsNiBAQAogI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCiAJKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCiAKLXN0YXRpYyBpbmxpbmUgaW50IHBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkgICAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKLXsKLQlyZXR1cm4gZG1hX21hcF9zZygmcGRldi0+ZGV2LCBzZywgbmVudHMsCi0JCQkgIChlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCQlpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCi17Ci0JZG1hX3VubWFwX3NnKCZwZGV2LT5kZXYsIHNnLCBuZW50cywKLQkJICAgICAoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCSAgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKLXsKLQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgmcGRldi0+ZGV2LCBkbWFfaGFuZGxlLCBzaXplLAotCQkJCShlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbikgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkJCSAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJCQkJICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKLXsKLQkvKiBObyBmbHVzaGluZyBuZWVkZWQgdG8gc3luYyBjcHUgd3JpdGVzIHRvIHRoZSBkZXZpY2UuICAqLwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJCSAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKLXsKLQlkbWFfc3luY19zZ19mb3JfY3B1KCZwZGV2LT5kZXYsIHNnLCBuZW50cywKLQkJCSAgICAoZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCQkJICAgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKLXsKLQkvKiBObyBmbHVzaGluZyBuZWVkZWQgdG8gc3luYyBjcHUgd3JpdGVzIHRvIHRoZSBkZXZpY2UuICAqLwotfQotCi0vKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gUENJIGRldmljZSBETUEgYWRkcmVzcyBtYXNrIGNhbgotICogYmUgc3VwcG9ydGVkIHByb3Blcmx5LiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgZGV2aWNlIGNhbgotICogb25seSBkcml2ZSB0aGUgbG93IDI0LWJpdHMgZHVyaW5nIFBDSSBidXMgbWFzdGVyaW5nLCB0aGVuCi0gKiB5b3Ugd291bGQgcGFzcyAweDAwZmZmZmZmIGFzIHRoZSBtYXNrIHRvIHRoaXMgZnVuY3Rpb24uCi0gKi8KLWV4dGVybiBpbnQgcGNpX2RtYV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB1NjQgbWFzayk7Ci0KIC8qIFBDSSBJT01NVSBtYXBwaW5nIGJ5cGFzcyBzdXBwb3J0LiAqLwogCiAvKiBQQ0kgNjQtYml0IGFkZHJlc3Npbmcgd29ya3MgZm9yIGFsbCBzbG90cyBvbiBhbGwgY29udHJvbGxlcgpAQCAtMTM5LDEyICs1Nyw2IEBACiAjZGVmaW5lIFBDSTY0X1JFUVVJUkVEX01BU0sJKH4oZG1hNjRfYWRkcl90KTApCiAjZGVmaW5lIFBDSTY0X0FERFJfQkFTRQkJMHhmZmZjMDAwMDAwMDAwMDAwVUwKIAotc3RhdGljIGlubGluZSBpbnQgcGNpX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCQlkbWFfYWRkcl90IGRtYV9hZGRyKQotewotCXJldHVybiBkbWFfbWFwcGluZ19lcnJvcigmcGRldi0+ZGV2LCBkbWFfYWRkcik7Ci19Ci0KICNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9idXJzdF9hZHZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCWVudW0gcGNpX2RtYV9idXJzdF9zdHJhdGVneSAqc3RyYXQsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDdhOGNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9fQVNNX1NQQVJDX1BFUkZfQ09VTlRFUl9ICisjZGVmaW5lIF9fQVNNX1NQQVJDX1BFUkZfQ09VTlRFUl9ICisKK2V4dGVybiB2b2lkIHNldF9wZXJmX2NvdW50ZXJfcGVuZGluZyh2b2lkKTsKKworI2RlZmluZQlQRVJGX0NPVU5URVJfSU5ERVhfT0ZGU0VUCTAKKworI2lmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCitleHRlcm4gdm9pZCBpbml0X2h3X3BlcmZfY291bnRlcnModm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGluaXRfaHdfcGVyZl9jb3VudGVycyh2b2lkKQl7IH0KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0c3JtbXUuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0c3JtbXUuaAppbmRleCA4MDg1NTVmLi4xNDA3YzA3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndHNybW11LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3Rzcm1tdS5oCkBAIC0yNjcsNiArMjY3LDcgQEAKIAogfQogCisjaWZuZGVmIENPTkZJR19TUEFSQ19MRU9OCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc3JtbXVfaHdwcm9iZSh1bnNpZ25lZCBsb25nIHZhZGRyKQogewogCXVuc2lnbmVkIGxvbmcgcmV0dmFsOwpAQCAtMjc4LDYgKzI3OSw5IEBACiAKIAlyZXR1cm4gcmV0dmFsOwogfQorI2Vsc2UKKyNkZWZpbmUgc3JtbXVfaHdwcm9iZShhZGRyKSAoc3JtbXVfc3dwcm9iZShhZGRyLCAwKSAmIFNSTU1VX1BURV9QTUFTSykKKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGludAogc3JtbXVfZ2V0X3B0ZSAodW5zaWduZWQgbG9uZyBhZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wcm9tLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Byb20uaAppbmRleCBiZThkN2FhLi44MmExOTBkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Byb20uaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Byb20uaApAQCAtMTE4LDUgKzExOCw4IEBACiBleHRlcm4gY2hhciAqb2ZfY29uc29sZV9wYXRoOwogZXh0ZXJuIGNoYXIgKm9mX2NvbnNvbGVfb3B0aW9uczsKIAorZXh0ZXJuIHZvaWQgKCpwcm9tX2J1aWxkX21vcmUpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKipuZXh0cCk7CitleHRlcm4gY2hhciAqYnVpbGRfZnVsbF9uYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApOworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9TUEFSQ19QUk9NX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDk4MmExMmYuLjNhNWFlM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtMjksNiArMjksOSBAQAogI2RlZmluZSBTT19SQ1ZCVUZGT1JDRQkweDEwMGIKICNkZWZpbmUgU09fRVJST1IJMHgxMDA3CiAjZGVmaW5lIFNPX1RZUEUJCTB4MTAwOAorI2RlZmluZSBTT19QUk9UT0NPTAkweDEwMjgKKyNkZWZpbmUgU09fRE9NQUlOCTB4MTAyOQorCiAKIC8qIExpbnV4IHNwZWNpZmljLCBrZWVwIHRoZSBzYW1lLiAqLwogI2RlZmluZSBTT19OT19DSEVDSwkweDAwMGIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaAppbmRleCA0NmY5MWFiLi44NTc2MzBjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja18zMi5oCkBAIC03Niw3ICs3Niw3IEBACiAgKgogICogVW5mb3J0dW5hdGVseSB0aGlzIHNjaGVtZSBsaW1pdHMgdXMgdG8gfjE2LDAwMCwwMDAgY3B1cy4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fcmVhZF9sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZWFkX2xvY2socmF3X3J3bG9ja190ICpydykKIHsKIAlyZWdpc3RlciByYXdfcndsb2NrX3QgKmxwIGFzbSgiZzEiKTsKIAlscCA9IHJ3OwpAQCAtOTIsMTEgKzkyLDExIEBACiAjZGVmaW5lIF9fcmF3X3JlYWRfbG9jayhsb2NrKSBcCiBkbyB7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7IFwKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7IFwKLQlfX3JlYWRfbG9jayhsb2NrKTsgXAorCWFyY2hfcmVhZF9sb2NrKGxvY2spOyBcCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyBcCiB9IHdoaWxlKDApCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3JlYWRfdW5sb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZWFkX3VubG9jayhyYXdfcndsb2NrX3QgKnJ3KQogewogCXJlZ2lzdGVyIHJhd19yd2xvY2tfdCAqbHAgYXNtKCJnMSIpOwogCWxwID0gcnc7CkBAIC0xMTIsNyArMTEyLDcgQEAKICNkZWZpbmUgX19yYXdfcmVhZF91bmxvY2sobG9jaykgXAogZG8gewl1bnNpZ25lZCBsb25nIGZsYWdzOyBcCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyBcCi0JX19yZWFkX3VubG9jayhsb2NrKTsgXAorCWFyY2hfcmVhZF91bmxvY2sobG9jayk7IFwKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKIH0gd2hpbGUoMCkKIApAQCAtMTUwLDcgKzE1MCw3IEBACiAJcmV0dXJuICh2YWwgPT0gMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqcncpCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3JlYWRfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQogewogCXJlZ2lzdGVyIHJhd19yd2xvY2tfdCAqbHAgYXNtKCJnMSIpOwogCXJlZ2lzdGVyIGludCByZXMgYXNtKCJvMCIpOwpAQCAtMTY5LDcgKzE2OSw3IEBACiAoewl1bnNpZ25lZCBsb25nIGZsYWdzOyBcCiAJaW50IHJlczsgXAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAotCXJlcyA9IF9fcmVhZF90cnlsb2NrKGxvY2spOyBcCisJcmVzID0gYXJjaF9yZWFkX3RyeWxvY2sobG9jayk7IFwKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKIAlyZXM7IFwKIH0pCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzY0LmgKaW5kZXggZjZiMmI5Mi4uNDNlNTE0NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja182NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfNjQuaApAQCAtOTIsNyArOTIsNyBAQAogCiAvKiBNdWx0aS1yZWFkZXIgbG9ja3MsIHRoZXNlIGFyZSBtdWNoIHNhbmVyIHRoYW4gdGhlIDMyLWJpdCBTcGFyYyBvbmVzLi4uICovCiAKLXN0YXRpYyB2b2lkIGlubGluZSBfX3JlYWRfbG9jayhyYXdfcndsb2NrX3QgKmxvY2spCitzdGF0aWMgdm9pZCBpbmxpbmUgYXJjaF9yZWFkX2xvY2socmF3X3J3bG9ja190ICpsb2NrKQogewogCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKIApAQCAtMTE1LDcgKzExNSw3IEBACiAJOiAibWVtb3J5Iik7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIF9fcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3N0YXRpYyBpbnQgaW5saW5lIGFyY2hfcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKIHsKIAlpbnQgdG1wMSwgdG1wMjsKIApAQCAtMTM2LDcgKzEzNiw3IEBACiAJcmV0dXJuIHRtcDE7CiB9CiAKLXN0YXRpYyB2b2lkIGlubGluZSBfX3JlYWRfdW5sb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3N0YXRpYyB2b2lkIGlubGluZSBhcmNoX3JlYWRfdW5sb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogCTogIm1lbW9yeSIpOwogfQogCi1zdGF0aWMgdm9pZCBpbmxpbmUgX193cml0ZV9sb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3N0YXRpYyB2b2lkIGlubGluZSBhcmNoX3dyaXRlX2xvY2socmF3X3J3bG9ja190ICpsb2NrKQogewogCXVuc2lnbmVkIGxvbmcgbWFzaywgdG1wMSwgdG1wMjsKIApAQCAtMTc3LDcgKzE3Nyw3IEBACiAJOiAibWVtb3J5Iik7CiB9CiAKLXN0YXRpYyB2b2lkIGlubGluZSBfX3dyaXRlX3VubG9jayhyYXdfcndsb2NrX3QgKmxvY2spCitzdGF0aWMgdm9pZCBpbmxpbmUgYXJjaF93cml0ZV91bmxvY2socmF3X3J3bG9ja190ICpsb2NrKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAogIglzdHcJCSUlZzAsIFslMF0iCkBAIC0xODYsNyArMTg2LDcgQEAKIAk6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGludCBpbmxpbmUgX193cml0ZV90cnlsb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3N0YXRpYyBpbnQgaW5saW5lIGFyY2hfd3JpdGVfdHJ5bG9jayhyYXdfcndsb2NrX3QgKmxvY2spCiB7CiAJdW5zaWduZWQgbG9uZyBtYXNrLCB0bXAxLCB0bXAyLCByZXN1bHQ7CiAKQEAgLTIxMCwxNCArMjEwLDE0IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotI2RlZmluZSBfX3Jhd19yZWFkX2xvY2socCkJX19yZWFkX2xvY2socCkKLSNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKHAsIGYpIF9fcmVhZF9sb2NrKHApCi0jZGVmaW5lIF9fcmF3X3JlYWRfdHJ5bG9jayhwKQlfX3JlYWRfdHJ5bG9jayhwKQotI2RlZmluZSBfX3Jhd19yZWFkX3VubG9jayhwKQlfX3JlYWRfdW5sb2NrKHApCi0jZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2socCkJX193cml0ZV9sb2NrKHApCi0jZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MocCwgZikgX193cml0ZV9sb2NrKHApCi0jZGVmaW5lIF9fcmF3X3dyaXRlX3VubG9jayhwKQlfX3dyaXRlX3VubG9jayhwKQotI2RlZmluZSBfX3Jhd193cml0ZV90cnlsb2NrKHApCV9fd3JpdGVfdHJ5bG9jayhwKQorI2RlZmluZSBfX3Jhd19yZWFkX2xvY2socCkJYXJjaF9yZWFkX2xvY2socCkKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKHAsIGYpIGFyY2hfcmVhZF9sb2NrKHApCisjZGVmaW5lIF9fcmF3X3JlYWRfdHJ5bG9jayhwKQlhcmNoX3JlYWRfdHJ5bG9jayhwKQorI2RlZmluZSBfX3Jhd19yZWFkX3VubG9jayhwKQlhcmNoX3JlYWRfdW5sb2NrKHApCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2socCkJYXJjaF93cml0ZV9sb2NrKHApCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MocCwgZikgYXJjaF93cml0ZV9sb2NrKHApCisjZGVmaW5lIF9fcmF3X3dyaXRlX3VubG9jayhwKQlhcmNoX3dyaXRlX3VubG9jayhwKQorI2RlZmluZSBfX3Jhd193cml0ZV90cnlsb2NrKHApCWFyY2hfd3JpdGVfdHJ5bG9jayhwKQogCiAjZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2socncpCQkoISgocncpLT5sb2NrICYgMHg4MDAwMDAwMFVMKSkKICNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2socncpCSghKHJ3KS0+bG9jaykKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCmluZGV4IDc1MWM4YzEuLjg5MDAzNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaApAQCAtMzIsNiArMzIsNyBAQAogICBzdW40dSAgICAgICA9IDB4MDUsIC8qIFY4IHBsb29zIHBsb29zICovCiAgIHN1bl91bmtub3duID0gMHgwNiwKICAgYXAxMDAwICAgICAgPSAweDA3LCAvKiBhbG1vc3QgYSBzdW40bSAqLworICBzcGFyY19sZW9uICA9IDB4MDgsIC8qIExlb24gU29DICovCiB9OwogCiAvKiBSZWFsbHksIHVzZXJsYW5kIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBhbnkgb2YgdGhpcy4uLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKaW5kZXggNmMwNzc4MS4uMjVlODQ4ZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCkBAIC0yOSw2ICsyOSwxMCBAQAogLyogVGhpcyBjYW5ub3QgZXZlciBiZSBhIHN1bjRjIDopIFRoYXQncyBqdXN0IGhpc3RvcnkuICovCiAjZGVmaW5lIEFSQ0hfU1VONEMgMAogCitleHRlcm4gY29uc3QgY2hhciAqc3BhcmNfY3B1X3R5cGU7CitleHRlcm4gY29uc3QgY2hhciAqc3BhcmNfZnB1X3R5cGU7CitleHRlcm4gY29uc3QgY2hhciAqc3BhcmNfcG11X3R5cGU7CisKIGV4dGVybiBjaGFyIHJlYm9vdF9jb21tYW5kW107CiAKIC8qIFRoZXNlIGFyZSBoZXJlIGluIGFuIGVmZm9ydCB0byBtb3JlIGZ1bGx5IHdvcmsgYXJvdW5kIFNwaXRmaXJlIEVycmF0YQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90eXBlcy5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90eXBlcy5oCmluZGV4IGRlNjcxZDcuLjA5Yzc5YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHlwZXMuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3R5cGVzLmgKQEAgLTgsOSArOCw4IEBACiAgKiBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gYXZvaWQgYSBuYW1lIGNsYXNoZXMuCiAgKi8KIAotI2lmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisjaWYgZGVmaW5lZChfX3NwYXJjX18pCiAKLS8qKiogU1BBUkMgNjQgYml0ICoqKi8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpAQCAtMjYsMzMgKzI1LDIxIEBACiAvKiBEbWEgYWRkcmVzc2VzIGNvbWUgaW4gZ2VuZXJpYyBhbmQgNjQtYml0IGZsYXZvdXJzLiAgKi8KIAogdHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKKworI2lmIGRlZmluZWQoX19hcmNoNjRfXykKKworLyoqKiBTUEFSQyA2NCBiaXQgKioqLwogdHlwZWRlZiB1NjQgZG1hNjRfYWRkcl90OwotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZWxzZQotCiAvKioqIFNQQVJDIDMyIGJpdCAqKiovCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OwotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXR5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7CiB0eXBlZGVmIHUzMiBkbWE2NF9hZGRyX3Q7CiAKKyNlbmRpZiAvKiBkZWZpbmVkKF9fYXJjaDY0X18pICovCisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAotI2VuZGlmIC8qIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pICovCisjZW5kaWYgLyogZGVmaW5lZChfX3NwYXJjX18pICovCiAKICNlbmRpZiAvKiBkZWZpbmVkKF9TUEFSQ19UWVBFU19IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAppbmRleCBhMzhjMDMyLi45ZWEyNzFlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaApAQCAtNyw4ICs3LDggQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vYXNpLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggYjJjNDA2ZC4uNzA2ZGY2NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zOTUsOCArMzk1LDkgQEAKICNkZWZpbmUgX19OUl9wcmVhZHYJCTMyNAogI2RlZmluZSBfX05SX3B3cml0ZXYJCTMyNQogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCTMyNgorI2RlZmluZSBfX05SX3BlcmZfY291bnRlcl9vcGVuCTMyNwogCi0jZGVmaW5lIE5SX1NZU0NBTExTCQkzMjcKKyNkZWZpbmUgTlJfU1lTQ0FMTFMJCTMyOAogCiAjaWZkZWYgX18zMmJpdF9zeXNjYWxsX251bWJlcnNfXwogLyogU3BhcmMgMzItYml0IG9ubHkgaGFzIHRoZSAic2V0cmVzdWlkMzIiLCAiZ2V0cmVzdWlkMzIiIHZhcmlhbnRzLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3NwYXJjL2tlcm5lbC9NYWtlZmlsZQppbmRleCA0NzVjZTQ2Li4yNDdjYzYyMCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTQxLDYgKzQxLDggQEAKIG9iai15ICAgICAgICAgICAgICAgICAgICs9IG9mX2RldmljZV8kKEJJVFMpLm8KIG9iai0kKENPTkZJR19TUEFSQzY0KSAgICs9IHByb21faXJxdHJhbnMubwogCitvYmotJChDT05GSUdfU1BBUkNfTEVPTikrPSBsZW9uX2tlcm5lbC5vCisKIG9iai0kKENPTkZJR19TUEFSQzY0KSAgICs9IHJlYm9vdC5vCiBvYmotJChDT05GSUdfU1BBUkM2NCkgICArPSBzeXNmcy5vCiBvYmotJChDT05GSUdfU1BBUkM2NCkgICArPSBpb21tdS5vCkBAIC02MSw3ICs2Myw3IEBACiBvYmotJChDT05GSUdfU1BBUkMzMikgICAgICs9IGRldnJlcy5vCiBkZXZyZXMteSAgICAgICAgICAgICAgICAgIDo9IC4uLy4uLy4uL2tlcm5lbC9pcnEvZGV2cmVzLm8KIAotb2JqLSQoQ09ORklHX1NQQVJDMzIpICAgICArPSBkbWEubworb2JqLXkgICAgICAgICAgICAgICAgICAgICArPSBkbWEubwogCiBvYmotJChDT05GSUdfU1BBUkMzMl9QQ0kpICs9IHBjaWMubwogCkBAIC0xMDEsMyArMTAzLDYgQEAKIG9iai0kKENPTkZJR19BVURJVCkgICAgICs9IGF1ZGl0Lm8KIGF1ZGl0LS0kKENPTkZJR19BVURJVCkgIDo9IGNvbXBhdF9hdWRpdC5vCiBvYmotJChDT05GSUdfQ09NUEFUKSAgICArPSAkKGF1ZGl0LS15KQorCitwYy0tJChDT05GSUdfUEVSRl9DT1VOVEVSUykgOj0gcGVyZl9jb3VudGVyLm8KK29iai0kKENPTkZJR19TUEFSQzY0KQkrPSAkKHBjLS15KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYwppbmRleCBkODVjM2RjLi4xNDQ2ZGY5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYwpAQCAtMzEyLDcgKzMxMiwxMiBAQAogCiAJcHNyID0gZ2V0X3BzcigpOwogCXB1dF9wc3IocHNyIHwgUFNSX0VGKTsKKyNpZmRlZiBDT05GSUdfU1BBUkNfTEVPTgorCWZwdV92ZXJzID0gNzsKKyNlbHNlCiAJZnB1X3ZlcnMgPSAoKGdldF9mc3IoKSA+PiAxNykgJiAweDcpOworI2VuZGlmCisKIAlwdXRfcHNyKHBzcik7CiAKIAlzZXRfY3B1X2FuZF9mcHUocHNyX2ltcGwsIHBzcl92ZXJzLCBmcHVfdmVycyk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9kbWEuYyBiL2FyY2gvc3BhcmMva2VybmVsL2RtYS5jCmluZGV4IDUyNGMzMmYuLmUxYmE4ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2RtYS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2RtYS5jCkBAIC0xLDE3OCArMSwxMyBAQAotLyogZG1hLmM6IFBDSSBhbmQgU0JVUyBETUEgYWNjZXNzb3JzIGZvciAzMi1iaXQgc3BhcmMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KLSAqLwotCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWRlYnVnLmg+CiAKLSNpZmRlZiBDT05GSUdfUENJCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jZW5kaWYKKyNkZWZpbmUgUFJFQUxMT0NfRE1BX0RFQlVHX0VOVFJJRVMgICAgICAgKDEgPDwgMTUpCiAKLSNpbmNsdWRlICJkbWEuaCIKLQotaW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3N0YXRpYyBpbnQgX19pbml0IGRtYV9pbml0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1BDSQotCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQotCQlyZXR1cm4gcGNpX2RtYV9zdXBwb3J0ZWQodG9fcGNpX2RldihkZXYpLCBtYXNrKTsKLSNlbmRpZgorCWRtYV9kZWJ1Z19pbml0KFBSRUFMTE9DX0RNQV9ERUJVR19FTlRSSUVTKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZG1hX3N1cHBvcnRlZCk7Ci0KLWludCBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spCi17Ci0jaWZkZWYgQ09ORklHX1BDSQotCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQotCQlyZXR1cm4gcGNpX3NldF9kbWFfbWFzayh0b19wY2lfZGV2KGRldiksIGRtYV9tYXNrKTsKLSNlbmRpZgotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLUVYUE9SVF9TWU1CT0woZG1hX3NldF9tYXNrKTsKLQotc3RhdGljIHZvaWQgKmRtYTMyX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQotewotI2lmZGVmIENPTkZJR19QQ0kKLQlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkKLQkJcmV0dXJuIHBjaV9hbGxvY19jb25zaXN0ZW50KHRvX3BjaV9kZXYoZGV2KSwgc2l6ZSwgZG1hX2hhbmRsZSk7Ci0jZW5kaWYKLQlyZXR1cm4gc2J1c19hbGxvY19jb25zaXN0ZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYTMyX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQl2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQotewotI2lmZGVmIENPTkZJR19QQ0kKLQlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHRvX3BjaV9kZXYoZGV2KSwgc2l6ZSwKLQkJCQkgICAgY3B1X2FkZHIsIGRtYV9oYW5kbGUpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0Jc2J1c19mcmVlX2NvbnNpc3RlbnQoZGV2LCBzaXplLCBjcHVfYWRkciwgZG1hX2hhbmRsZSk7Ci19Ci0KLXN0YXRpYyBkbWFfYWRkcl90IGRtYTMyX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotI2lmZGVmIENPTkZJR19QQ0kKLQlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkKLQkJcmV0dXJuIHBjaV9tYXBfcGFnZSh0b19wY2lfZGV2KGRldiksIHBhZ2UsIG9mZnNldCwKLQkJCQkgICAgc2l6ZSwgKGludClkaXJlY3Rpb24pOwotI2VuZGlmCi0JcmV0dXJuIHNidXNfbWFwX3NpbmdsZShkZXYsIHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwKLQkJCSAgICAgICBzaXplLCAoaW50KWRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYTMyX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLAotCQkJICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotI2lmZGVmIENPTkZJR19QQ0kKLQlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkgewotCQlwY2lfdW5tYXBfcGFnZSh0b19wY2lfZGV2KGRldiksIGRtYV9hZGRyZXNzLAotCQkJICAgICAgIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCXNidXNfdW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHJlc3MsIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGludCBkbWEzMl9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0jaWZkZWYgQ09ORklHX1BDSQotCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQotCQlyZXR1cm4gcGNpX21hcF9zZyh0b19wY2lfZGV2KGRldiksIHNnLCBuZW50cywgKGludClkaXJlY3Rpb24pOwotI2VuZGlmCi0JcmV0dXJuIHNidXNfbWFwX3NnKGRldiwgc2csIG5lbnRzLCBkaXJlY3Rpb24pOwotfQotCi12b2lkIGRtYTMyX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJICAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotI2lmZGVmIENPTkZJR19QQ0kKLQlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkgewotCQlwY2lfdW5tYXBfc2codG9fcGNpX2RldihkZXYpLCBzZywgbmVudHMsIChpbnQpZGlyZWN0aW9uKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCXNidXNfdW5tYXBfc2coZGV2LCBzZywgbmVudHMsIChpbnQpZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIHZvaWQgZG1hMzJfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJCQkgICAgICBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0jaWZkZWYgQ09ORklHX1BDSQotCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKSB7Ci0JCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSh0b19wY2lfZGV2KGRldiksIGRtYV9oYW5kbGUsCi0JCQkJCSAgICBzaXplLCAoaW50KWRpcmVjdGlvbik7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQlzYnVzX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgKGludCkgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIHZvaWQgZG1hMzJfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAotCQkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotI2lmZGVmIENPTkZJR19QQ0kKLQlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkgewotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UodG9fcGNpX2RldihkZXYpLCBkbWFfaGFuZGxlLAotCQkJCQkgICAgICAgc2l6ZSwgKGludClkaXJlY3Rpb24pOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0Jc2J1c19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIChpbnQpIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYTMyX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0jaWZkZWYgQ09ORklHX1BDSQotCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKSB7Ci0JCXBjaV9kbWFfc3luY19zZ19mb3JfY3B1KHRvX3BjaV9kZXYoZGV2KSwgc2csCi0JCQkJCW5lbGVtcywgKGludClkaXJlY3Rpb24pOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0JQlVHKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYTMyX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotI2lmZGVmIENPTkZJR19QQ0kKLQlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkgewotCQlwY2lfZG1hX3N5bmNfc2dfZm9yX2RldmljZSh0b19wY2lfZGV2KGRldiksIHNnLAotCQkJCQkgICBuZWxlbXMsIChpbnQpZGlyZWN0aW9uKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCUJVRygpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9vcHMgZG1hMzJfZG1hX29wcyA9IHsKLQkuYWxsb2NfY29oZXJlbnQJCT0gZG1hMzJfYWxsb2NfY29oZXJlbnQsCi0JLmZyZWVfY29oZXJlbnQJCT0gZG1hMzJfZnJlZV9jb2hlcmVudCwKLQkubWFwX3BhZ2UJCT0gZG1hMzJfbWFwX3BhZ2UsCi0JLnVubWFwX3BhZ2UJCT0gZG1hMzJfdW5tYXBfcGFnZSwKLQkubWFwX3NnCQkJPSBkbWEzMl9tYXBfc2csCi0JLnVubWFwX3NnCQk9IGRtYTMyX3VubWFwX3NnLAotCS5zeW5jX3NpbmdsZV9mb3JfY3B1CT0gZG1hMzJfc3luY19zaW5nbGVfZm9yX2NwdSwKLQkuc3luY19zaW5nbGVfZm9yX2RldmljZQk9IGRtYTMyX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UsCi0JLnN5bmNfc2dfZm9yX2NwdQk9IGRtYTMyX3N5bmNfc2dfZm9yX2NwdSwKLQkuc3luY19zZ19mb3JfZGV2aWNlCT0gZG1hMzJfc3luY19zZ19mb3JfZGV2aWNlLAotfTsKLQotY29uc3Qgc3RydWN0IGRtYV9vcHMgKmRtYV9vcHMgPSAmZG1hMzJfZG1hX29wczsKLUVYUE9SVF9TWU1CT0woZG1hX29wcyk7Citmc19pbml0Y2FsbChkbWFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9kbWEuaCBiL2FyY2gvc3BhcmMva2VybmVsL2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGQ4OTUxLi4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2RtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotdm9pZCAqc2J1c19hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgbG9uZyBsZW4sIHUzMiAqZG1hX2FkZHJwKTsKLXZvaWQgc2J1c19mcmVlX2NvbnNpc3RlbnQoc3RydWN0IGRldmljZSAqZGV2LCBsb25nIG4sIHZvaWQgKnAsIHUzMiBiYSk7Ci1kbWFfYWRkcl90IHNidXNfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhLAotCQkJICAgc2l6ZV90IGxlbiwgaW50IGRpcmVjdGlvbik7Ci12b2lkIHNidXNfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBiYSwKLQkJICAgICAgIHNpemVfdCBuLCBpbnQgZGlyZWN0aW9uKTsKLWludCBzYnVzX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCWludCBuLCBpbnQgZGlyZWN0aW9uKTsKLXZvaWQgc2J1c191bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCSAgIGludCBuLCBpbnQgZGlyZWN0aW9uKTsKLXZvaWQgc2J1c19kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmEsCi0JCQkJICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci12b2lkIHNidXNfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJhLAotCQkJCSAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IDZiNGQ4YWMuLjQzOWQ4MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzMyLlMKQEAgLTgwOSw2ICs4MDksMTEgQEAKIAkJIG5vcAogCiBnb3RfcHJvcDoKKyNpZmRlZiBDT05GSUdfU1BBUkNfTEVPTgorCSAgICAgICAgLyogbm8gY3B1LXR5cGUgY2hlY2sgaXMgbmVlZGVkLCBpdCBpcyBhIFNQQVJDLUxFT04gKi8KKwkJYmEgc3VuNGNfY29udGludWVfYm9vdAorCQkgbm9wCisjZW5kaWYKIAkJc2V0CWNwdXR5cHZhbCwgJW8yCiAJCWxkdWIJWyVvMiArIDB4NF0sICVsMQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pZHByb20uYyBiL2FyY2gvc3BhcmMva2VybmVsL2lkcHJvbS5jCmluZGV4IDU3OTIyZjYuLjUyYTE1ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lkcHJvbS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lkcHJvbS5jCkBAIC0zMSw2ICszMSw4IEBACiB7IC5uYW1lID0gIlN1biA0LzIwMCBTZXJpZXMiLCAgICAgICAgLmlkX21hY2h0eXBlID0gKFNNX1NVTjQgfCBTTV80XzI2MCkgfSwKIHsgLm5hbWUgPSAiU3VuIDQvMzAwIFNlcmllcyIsICAgICAgICAuaWRfbWFjaHR5cGUgPSAoU01fU1VONCB8IFNNXzRfMzMwKSB9LAogeyAubmFtZSA9ICJTdW4gNC80MDAgU2VyaWVzIiwgICAgICAgIC5pZF9tYWNodHlwZSA9IChTTV9TVU40IHwgU01fNF80NzApIH0sCisvKiBOb3cgTGVvbiAqLworeyAubmFtZSA9ICJMZW9uMyBTeXN0ZW0tb24tYS1DaGlwIiwgIC5pZF9tYWNodHlwZSA9IChNX0xFT04gfCBNX0xFT04zX1NPQykgfSwKIC8qIE5vdywgU3VuNGMncyAqLwogeyAubmFtZSA9ICJTdW40YyBTcGFyY1N0YXRpb24gMSIsICAgIC5pZF9tYWNodHlwZSA9IChTTV9TVU40QyB8IFNNXzRDX1NTMSkgfSwKIHsgLm5hbWUgPSAiU3VuNGMgU3BhcmNTdGF0aW9uIElQQyIsICAuaWRfbWFjaHR5cGUgPSAoU01fU1VONEMgfCBTTV80Q19JUEMpIH0sCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9tbXUuYwppbmRleCAwYWVhZWZlLi43NjkwY2MyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lvbW11LmMKQEAgLTM1Myw3ICszNTMsOCBAQAogCiBzdGF0aWMgZG1hX2FkZHJfdCBkbWFfNHVfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc3osCi0JCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCisJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAlzdHJ1Y3QgaW9tbXUgKmlvbW11OwogCXN0cnVjdCBzdHJidWYgKnN0cmJ1ZjsKQEAgLTQ3NCw3ICs0NzUsOCBAQAogfQogCiBzdGF0aWMgdm9pZCBkbWFfNHVfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYnVzX2FkZHIsCi0JCQkgICAgICBzaXplX3Qgc3osIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKKwkJCSAgICAgIHNpemVfdCBzeiwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IGlvbW11ICppb21tdTsKIAlzdHJ1Y3Qgc3RyYnVmICpzdHJidWY7CkBAIC01MjAsNyArNTIyLDggQEAKIH0KIAogc3RhdGljIGludCBkbWFfNHVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCi0JCQkgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCQkJIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCSBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnMsICpvdXRzLCAqc2Vnc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgaGFuZGxlLCBwcm90LCBjdHg7CkBAIC02OTEsNyArNjk0LDggQEAKIH0KIAogc3RhdGljIHZvaWQgZG1hXzR1X3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCi0JCQkgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorCQkJICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCSAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBjdHg7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKQEAgLTgyMiw3ICs4MjYsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX29wcyBzdW40dV9kbWFfb3BzID0geworc3RhdGljIHN0cnVjdCBkbWFfbWFwX29wcyBzdW40dV9kbWFfb3BzID0gewogCS5hbGxvY19jb2hlcmVudAkJPSBkbWFfNHVfYWxsb2NfY29oZXJlbnQsCiAJLmZyZWVfY29oZXJlbnQJCT0gZG1hXzR1X2ZyZWVfY29oZXJlbnQsCiAJLm1hcF9wYWdlCQk9IGRtYV80dV9tYXBfcGFnZSwKQEAgLTgzMyw5ICs4MzcsMTEgQEAKIAkuc3luY19zZ19mb3JfY3B1CT0gZG1hXzR1X3N5bmNfc2dfZm9yX2NwdSwKIH07CiAKLWNvbnN0IHN0cnVjdCBkbWFfb3BzICpkbWFfb3BzID0gJnN1bjR1X2RtYV9vcHM7CitzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHMgPSAmc3VuNHVfZG1hX29wczsKIEVYUE9SVF9TWU1CT0woZG1hX29wcyk7CiAKK2V4dGVybiBpbnQgcGNpNjRfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTY0IGRldmljZV9tYXNrKTsKKwogaW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZGV2aWNlX21hc2spCiB7CiAJc3RydWN0IGlvbW11ICppb21tdSA9IGRldi0+YXJjaGRhdGEuaW9tbXU7CkBAIC04NDksNyArODU1LDcgQEAKIAogI2lmZGVmIENPTkZJR19QQ0kKIAlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkKLQkJcmV0dXJuIHBjaV9kbWFfc3VwcG9ydGVkKHRvX3BjaV9kZXYoZGV2KSwgZGV2aWNlX21hc2spOworCQlyZXR1cm4gcGNpNjRfZG1hX3N1cHBvcnRlZCh0b19wY2lfZGV2KGRldiksIGRldmljZV9tYXNrKTsKICNlbmRpZgogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCmluZGV4IDg3ZWEwZDAuLjlmNjFmZDggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgkJLyogc3RydWN0IHBjaV9kZXYgKi8KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogCkBAIC00OCw4ICs0OSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLXVuaXQuaD4KIAotI2luY2x1ZGUgImRtYS5oIgotCiAjZGVmaW5lIG1tdV9pbnZhbF9kbWFfYXJlYShwLCBsKQkvKiBBbnRvbiBwdWxsZWQgaXQgb3V0IGZvciAyLjQuMC14eCAqLwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlICpfc3BhcmNfZmluZF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnIsCkBAIC0yNDYsNyArMjQ1LDggQEAKICAqIFR5cGljYWxseSBkZXZpY2VzIHVzZSB0aGVtIGZvciBjb250cm9sIGJsb2Nrcy4KICAqIENQVSBtYXkgYWNjZXNzIHRoZW0gd2l0aG91dCBhbnkgZXhwbGljaXQgZmx1c2hpbmcuCiAgKi8KLXZvaWQgKnNidXNfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGxvbmcgbGVuLCB1MzIgKmRtYV9hZGRycCkKK3N0YXRpYyB2b2lkICpzYnVzX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IGxlbiwKKwkJCQkgZG1hX2FkZHJfdCAqZG1hX2FkZHJwLCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IG9mX2RldmljZSAqb3AgPSB0b19vZl9kZXZpY2UoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGxlbl90b3RhbCA9IChsZW4gKyBQQUdFX1NJWkUtMSkgJiBQQUdFX01BU0s7CkBAIC0yOTksNyArMjk5LDggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCBzYnVzX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGxvbmcgbiwgdm9pZCAqcCwgdTMyIGJhKQorc3RhdGljIHZvaWQgc2J1c19mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IG4sIHZvaWQgKnAsCisJCQkgICAgICAgZG1hX2FkZHJfdCBiYSkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgcGFnZSAqcGd2OwpAQCAtMzE3LDcgKzMxOCw3IEBACiAKIAluID0gKG4gKyBQQUdFX1NJWkUtMSkgJiBQQUdFX01BU0s7CiAJaWYgKChyZXMtPmVuZC1yZXMtPnN0YXJ0KSsxICE9IG4pIHsKLQkJcHJpbnRrKCJzYnVzX2ZyZWVfY29uc2lzdGVudDogcmVnaW9uIDB4JWx4IGFza2VkIDB4JWx4XG4iLAorCQlwcmludGsoInNidXNfZnJlZV9jb25zaXN0ZW50OiByZWdpb24gMHglbHggYXNrZWQgMHglenhcbiIsCiAJCSAgICAobG9uZykoKHJlcy0+ZW5kLXJlcy0+c3RhcnQpKzEpLCBuKTsKIAkJcmV0dXJuOwogCX0KQEAgLTMzNyw4ICszMzgsMTMgQEAKICAqIENQVSB2aWV3IG9mIHRoaXMgbWVtb3J5IG1heSBiZSBpbmNvbnNpc3RlbnQgd2l0aAogICogYSBkZXZpY2UgdmlldyBhbmQgZXhwbGljaXQgZmx1c2hpbmcgaXMgbmVjZXNzYXJ5LgogICovCi1kbWFfYWRkcl90IHNidXNfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhLCBzaXplX3QgbGVuLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIGRtYV9hZGRyX3Qgc2J1c19tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3QgbGVuLAorCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKKwl2b2lkICp2YSA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKKwogCS8qIFhYWCB3aHkgYXJlIHNvbWUgbGVuZ3RocyBzaWduZWQsIG90aGVycyB1bnNpZ25lZD8gKi8KIAlpZiAobGVuIDw9IDApIHsKIAkJcmV0dXJuIDA7CkBAIC0zNTAsMTIgKzM1NiwxNCBAQAogCXJldHVybiBtbXVfZ2V0X3Njc2lfb25lKGRldiwgdmEsIGxlbik7CiB9CiAKLXZvaWQgc2J1c191bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJhLCBzaXplX3QgbiwgaW50IGRpcmVjdGlvbikKK3N0YXRpYyB2b2lkIHNidXNfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmEsIHNpemVfdCBuLAorCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJbW11X3JlbGVhc2Vfc2NzaV9vbmUoZGV2LCBiYSwgbik7CiB9CiAKLWludCBzYnVzX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIGludCBzYnVzX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuLAorCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAltbXVfZ2V0X3Njc2lfc2dsKGRldiwgc2csIG4pOwogCkBAIC0zNjYsMTkgKzM3NCwzOCBAQAogCXJldHVybiBuOwogfQogCi12b2lkIHNidXNfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbiwgaW50IGRpcmVjdGlvbikKK3N0YXRpYyB2b2lkIHNidXNfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbiwKKwkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAltbXVfcmVsZWFzZV9zY3NpX3NnbChkZXYsIHNnLCBuKTsKIH0KIAotdm9pZCBzYnVzX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBiYSwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCitzdGF0aWMgdm9pZCBzYnVzX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJIGludCBuLAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CisJQlVHKCk7CiB9CiAKLXZvaWQgc2J1c19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmEsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgc2J1c19zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCSAgICBpbnQgbiwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogeworCUJVRygpOwogfQogCitzdHJ1Y3QgZG1hX21hcF9vcHMgc2J1c19kbWFfb3BzID0geworCS5hbGxvY19jb2hlcmVudAkJPSBzYnVzX2FsbG9jX2NvaGVyZW50LAorCS5mcmVlX2NvaGVyZW50CQk9IHNidXNfZnJlZV9jb2hlcmVudCwKKwkubWFwX3BhZ2UJCT0gc2J1c19tYXBfcGFnZSwKKwkudW5tYXBfcGFnZQkJPSBzYnVzX3VubWFwX3BhZ2UsCisJLm1hcF9zZwkJCT0gc2J1c19tYXBfc2csCisJLnVubWFwX3NnCQk9IHNidXNfdW5tYXBfc2csCisJLnN5bmNfc2dfZm9yX2NwdQk9IHNidXNfc3luY19zZ19mb3JfY3B1LAorCS5zeW5jX3NnX2Zvcl9kZXZpY2UJPSBzYnVzX3N5bmNfc2dfZm9yX2RldmljZSwKK307CisKK3N0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wcyA9ICZzYnVzX2RtYV9vcHM7CitFWFBPUlRfU1lNQk9MKGRtYV9vcHMpOworCiBzdGF0aWMgaW50IF9faW5pdCBzcGFyY19yZWdpc3Rlcl9pb3BvcnQodm9pZCkKIHsKIAlyZWdpc3Rlcl9wcm9jX3NwYXJjX2lvcG9ydCgpOwpAQCAtMzk1LDcgKzQyMiw4IEBACiAvKiBBbGxvY2F0ZSBhbmQgbWFwIGtlcm5lbCBidWZmZXIgdXNpbmcgY29uc2lzdGVudCBtb2RlIERNQSBmb3IgYSBkZXZpY2UuCiAgKiBod2RldiBzaG91bGQgYmUgdmFsaWQgc3RydWN0IHBjaV9kZXYgcG9pbnRlciBmb3IgUENJIGRldmljZXMuCiAgKi8KLXZvaWQgKnBjaV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3QgbGVuLCBkbWFfYWRkcl90ICpwYmEpCitzdGF0aWMgdm9pZCAqcGNpMzJfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3QgbGVuLAorCQkJCSAgZG1hX2FkZHJfdCAqcGJhLCBnZnBfdCBnZnApCiB7CiAJdW5zaWduZWQgbG9uZyBsZW5fdG90YWwgPSAobGVuICsgUEFHRV9TSVpFLTEpICYgUEFHRV9NQVNLOwogCXVuc2lnbmVkIGxvbmcgdmE7CkBAIC00MzksNyArNDY3LDYgQEAKIAkqcGJhID0gdmlydF90b19waHlzKHZhKTsgLyogZXF1YWxzIHZpcnRfdG9fYnVzIChSLkkuUC4pIGZvciB1cy4gKi8KIAlyZXR1cm4gKHZvaWQgKikgcmVzLT5zdGFydDsKIH0KLUVYUE9SVF9TWU1CT0wocGNpX2FsbG9jX2NvbnNpc3RlbnQpOwogCiAvKiBGcmVlIGFuZCB1bm1hcCBhIGNvbnNpc3RlbnQgRE1BIGJ1ZmZlci4KICAqIGNwdV9hZGRyIGlzIHdoYXQgd2FzIHJldHVybmVkIGZyb20gcGNpX2FsbG9jX2NvbnNpc3RlbnQsCkBAIC00NDksNyArNDc2LDggQEAKICAqIFJlZmVyZW5jZXMgdG8gdGhlIG1lbW9yeSBhbmQgbWFwcGluZ3MgYXNzb2NpYXRlZCB3aXRoIGNwdV9hZGRyL2RtYV9hZGRyCiAgKiBwYXN0IHRoaXMgY2FsbCBhcmUgaWxsZWdhbC4KICAqLwotdm9pZCBwY2lfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgbiwgdm9pZCAqcCwgZG1hX2FkZHJfdCBiYSkKK3N0YXRpYyB2b2lkIHBjaTMyX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgbiwgdm9pZCAqcCwKKwkJCQlkbWFfYWRkcl90IGJhKQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXVuc2lnbmVkIGxvbmcgcGdwOwpAQCAtNDgxLDYwICs1MDksMTggQEAKIAogCWZyZWVfcGFnZXMocGdwLCBnZXRfb3JkZXIobikpOwogfQotRVhQT1JUX1NZTUJPTChwY2lfZnJlZV9jb25zaXN0ZW50KTsKLQotLyogTWFwIGEgc2luZ2xlIGJ1ZmZlciBvZiB0aGUgaW5kaWNhdGVkIHNpemUgZm9yIERNQSBpbiBzdHJlYW1pbmcgbW9kZS4KLSAqIFRoZSAzMi1iaXQgYnVzIGFkZHJlc3MgdG8gdXNlIGlzIHJldHVybmVkLgotICoKLSAqIE9uY2UgdGhlIGRldmljZSBpcyBnaXZlbiB0aGUgZG1hIGFkZHJlc3MsIHRoZSBkZXZpY2Ugb3ducyB0aGlzIG1lbW9yeQotICogdW50aWwgZWl0aGVyIHBjaV91bm1hcF9zaW5nbGUgb3IgcGNpX2RtYV9zeW5jX3NpbmdsZV8qIGlzIHBlcmZvcm1lZC4KLSAqLwotZG1hX2FkZHJfdCBwY2lfbWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCi0gICAgaW50IGRpcmVjdGlvbikKLXsKLQlCVUdfT04oZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSk7Ci0JLyogSUllcCBpcyB3cml0ZS10aHJvdWdoLCBub3QgZmx1c2hpbmcuICovCi0JcmV0dXJuIHZpcnRfdG9fcGh5cyhwdHIpOwotfQotRVhQT1JUX1NZTUJPTChwY2lfbWFwX3NpbmdsZSk7Ci0KLS8qIFVubWFwIGEgc2luZ2xlIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbi4gIFRoZSBkbWFfYWRkciBhbmQgc2l6ZQotICogbXVzdCBtYXRjaCB3aGF0IHdhcyBwcm92aWRlZCBmb3IgaW4gYSBwcmV2aW91cyBwY2lfbWFwX3NpbmdsZSBjYWxsLiAgQWxsCi0gKiBvdGhlciB1c2FnZXMgYXJlIHVuZGVmaW5lZC4KLSAqCi0gKiBBZnRlciB0aGlzIGNhbGwsIHJlYWRzIGJ5IHRoZSBjcHUgdG8gdGhlIGJ1ZmZlciBhcmUgZ3VhcmFudGVlZCB0byBzZWUKLSAqIHdoYXRldmVyIHRoZSBkZXZpY2Ugd3JvdGUgdGhlcmUuCi0gKi8KLXZvaWQgcGNpX3VubWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgYmEsIHNpemVfdCBzaXplLAotICAgIGludCBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwotCWlmIChkaXJlY3Rpb24gIT0gUENJX0RNQV9UT0RFVklDRSkgewotCQltbXVfaW52YWxfZG1hX2FyZWEoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KGJhKSwKLQkJICAgIChzaXplICsgUEFHRV9TSVpFLTEpICYgUEFHRV9NQVNLKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKHBjaV91bm1hcF9zaW5nbGUpOwogCiAvKgogICogU2FtZSBhcyBwY2lfbWFwX3NpbmdsZSwgYnV0IHdpdGggcGFnZXMuCiAgKi8KLWRtYV9hZGRyX3QgcGNpX21hcF9wYWdlKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCitzdGF0aWMgZG1hX2FkZHJfdCBwY2kzMl9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwogCS8qIElJZXAgaXMgd3JpdGUtdGhyb3VnaCwgbm90IGZsdXNoaW5nLiAqLwogCXJldHVybiBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjaV9tYXBfcGFnZSk7Ci0KLXZvaWQgcGNpX3VubWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LAotCQkJZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwotCS8qIG1tdV9pbnZhbF9kbWFfYXJlYSBYWFggKi8KLX0KLUVYUE9SVF9TWU1CT0wocGNpX3VubWFwX3BhZ2UpOwogCiAvKiBNYXAgYSBzZXQgb2YgYnVmZmVycyBkZXNjcmliZWQgYnkgc2NhdHRlcmxpc3QgaW4gc3RyZWFtaW5nCiAgKiBtb2RlIGZvciBETUEuICBUaGlzIGlzIHRoZSBzY2F0aGVyLWdhdGhlciB2ZXJzaW9uIG9mIHRoZQpAQCAtNTUxLDEzICs1MzcsMTMgQEAKICAqIERldmljZSBvd25lcnNoaXAgaXNzdWVzIGFzIG1lbnRpb25lZCBhYm92ZSBmb3IgcGNpX21hcF9zaW5nbGUgYXJlCiAgKiB0aGUgc2FtZSBoZXJlLgogICovCi1pbnQgcGNpX21hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBpbnQgbmVudHMsCi0gICAgaW50IGRpcmVjdGlvbikKK3N0YXRpYyBpbnQgcGNpMzJfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCQlpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJaW50IG47CiAKLQlCVUdfT04oZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSk7CiAJLyogSUllcCBpcyB3cml0ZS10aHJvdWdoLCBub3QgZmx1c2hpbmcuICovCiAJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVudHMsIG4pIHsKIAkJQlVHX09OKHBhZ2VfYWRkcmVzcyhzZ19wYWdlKHNnKSkgPT0gTlVMTCk7CkBAIC01NjYsMjAgKzU1MiwxOSBAQAogCX0KIAlyZXR1cm4gbmVudHM7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjaV9tYXBfc2cpOwogCiAvKiBVbm1hcCBhIHNldCBvZiBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb25zLgogICogQWdhaW4sIGNwdSByZWFkIHJ1bGVzIGNvbmNlcm5pbmcgY2FsbHMgaGVyZSBhcmUgdGhlIHNhbWUgYXMgZm9yCiAgKiBwY2lfdW5tYXBfc2luZ2xlKCkgYWJvdmUuCiAgKi8KLXZvaWQgcGNpX3VubWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIGludCBuZW50cywKLSAgICBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgcGNpMzJfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJCSAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAlpbnQgbjsKIAotCUJVR19PTihkaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKTsKLQlpZiAoZGlyZWN0aW9uICE9IFBDSV9ETUFfVE9ERVZJQ0UpIHsKKwlpZiAoZGlyICE9IFBDSV9ETUFfVE9ERVZJQ0UpIHsKIAkJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVudHMsIG4pIHsKIAkJCUJVR19PTihwYWdlX2FkZHJlc3Moc2dfcGFnZShzZykpID09IE5VTEwpOwogCQkJbW11X2ludmFsX2RtYV9hcmVhKApAQCAtNTg4LDcgKzU3Myw2IEBACiAJCX0KIAl9CiB9Ci1FWFBPUlRfU1lNQk9MKHBjaV91bm1hcF9zZyk7CiAKIC8qIE1ha2UgcGh5c2ljYWwgbWVtb3J5IGNvbnNpc3RlbnQgZm9yIGEgc2luZ2xlCiAgKiBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb24gYmVmb3JlIG9yIGFmdGVyIGEgdHJhbnNmZXIuCkBAIC02MDAsMjUgKzU4NCwyMyBAQAogICogbXVzdCBmaXJzdCBwZXJmb3JtIGEgcGNpX2RtYV9zeW5jX2Zvcl9kZXZpY2UsIGFuZCB0aGVuIHRoZQogICogZGV2aWNlIGFnYWluIG93bnMgdGhlIGJ1ZmZlci4KICAqLwotdm9pZCBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBkbWFfYWRkcl90IGJhLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3N0YXRpYyB2b2lkIHBjaTMyX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJhLAorCQkJCSAgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0JQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwotCWlmIChkaXJlY3Rpb24gIT0gUENJX0RNQV9UT0RFVklDRSkgeworCWlmIChkaXIgIT0gUENJX0RNQV9UT0RFVklDRSkgewogCQltbXVfaW52YWxfZG1hX2FyZWEoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KGJhKSwKIAkJICAgIChzaXplICsgUEFHRV9TSVpFLTEpICYgUEFHRV9NQVNLKTsKIAl9CiB9Ci1FWFBPUlRfU1lNQk9MKHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSk7CiAKLXZvaWQgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBiYSwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCitzdGF0aWMgdm9pZCBwY2kzMl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBiYSwKKwkJCQkJIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0JQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwotCWlmIChkaXJlY3Rpb24gIT0gUENJX0RNQV9UT0RFVklDRSkgeworCWlmIChkaXIgIT0gUENJX0RNQV9UT0RFVklDRSkgewogCQltbXVfaW52YWxfZG1hX2FyZWEoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KGJhKSwKIAkJICAgIChzaXplICsgUEFHRV9TSVpFLTEpICYgUEFHRV9NQVNLKTsKIAl9CiB9Ci1FWFBPUlRfU1lNQk9MKHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSk7CiAKIC8qIE1ha2UgcGh5c2ljYWwgbWVtb3J5IGNvbnNpc3RlbnQgZm9yIGEgc2V0IG9mIHN0cmVhbWluZwogICogbW9kZSBETUEgdHJhbnNsYXRpb25zIGFmdGVyIGEgdHJhbnNmZXIuCkBAIC02MjYsMTMgKzYwOCwxMyBAQAogICogVGhlIHNhbWUgYXMgcGNpX2RtYV9zeW5jX3NpbmdsZV8qIGJ1dCBmb3IgYSBzY2F0dGVyLWdhdGhlciBsaXN0LAogICogc2FtZSBydWxlcyBhbmQgdXNhZ2UuCiAgKi8KLXZvaWQgcGNpX2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgcGNpMzJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCQkJICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCWludCBuOwogCi0JQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwotCWlmIChkaXJlY3Rpb24gIT0gUENJX0RNQV9UT0RFVklDRSkgeworCWlmIChkaXIgIT0gUENJX0RNQV9UT0RFVklDRSkgewogCQlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZW50cywgbikgewogCQkJQlVHX09OKHBhZ2VfYWRkcmVzcyhzZ19wYWdlKHNnKSkgPT0gTlVMTCk7CiAJCQltbXVfaW52YWxfZG1hX2FyZWEoCkBAIC02NDEsMTUgKzYyMywxNCBAQAogCQl9CiAJfQogfQotRVhQT1JUX1NZTUJPTChwY2lfZG1hX3N5bmNfc2dfZm9yX2NwdSk7CiAKLXZvaWQgcGNpX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgcGNpMzJfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCQkJICAgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCWludCBuOwogCi0JQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwotCWlmIChkaXJlY3Rpb24gIT0gUENJX0RNQV9UT0RFVklDRSkgeworCWlmIChkaXIgIT0gUENJX0RNQV9UT0RFVklDRSkgewogCQlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZW50cywgbikgewogCQkJQlVHX09OKHBhZ2VfYWRkcmVzcyhzZ19wYWdlKHNnKSkgPT0gTlVMTCk7CiAJCQltbXVfaW52YWxfZG1hX2FyZWEoCkBAIC02NTgsMzEgKzYzOSw3OCBAQAogCQl9CiAJfQogfQotRVhQT1JUX1NZTUJPTChwY2lfZG1hX3N5bmNfc2dfZm9yX2RldmljZSk7CisKK3N0cnVjdCBkbWFfbWFwX29wcyBwY2kzMl9kbWFfb3BzID0geworCS5hbGxvY19jb2hlcmVudAkJPSBwY2kzMl9hbGxvY19jb2hlcmVudCwKKwkuZnJlZV9jb2hlcmVudAkJPSBwY2kzMl9mcmVlX2NvaGVyZW50LAorCS5tYXBfcGFnZQkJPSBwY2kzMl9tYXBfcGFnZSwKKwkubWFwX3NnCQkJPSBwY2kzMl9tYXBfc2csCisJLnVubWFwX3NnCQk9IHBjaTMyX3VubWFwX3NnLAorCS5zeW5jX3NpbmdsZV9mb3JfY3B1CT0gcGNpMzJfc3luY19zaW5nbGVfZm9yX2NwdSwKKwkuc3luY19zaW5nbGVfZm9yX2RldmljZQk9IHBjaTMyX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UsCisJLnN5bmNfc2dfZm9yX2NwdQk9IHBjaTMyX3N5bmNfc2dfZm9yX2NwdSwKKwkuc3luY19zZ19mb3JfZGV2aWNlCT0gcGNpMzJfc3luY19zZ19mb3JfZGV2aWNlLAorfTsKK0VYUE9SVF9TWU1CT0wocGNpMzJfZG1hX29wcyk7CisKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKKy8qCisgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gUENJIGRldmljZSBETUEgYWRkcmVzcyBtYXNrIGNhbiBiZQorICogc3VwcG9ydGVkIHByb3Blcmx5LiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgZGV2aWNlIGNhbiBvbmx5IGRyaXZlIHRoZQorICogbG93IDI0LWJpdHMgZHVyaW5nIFBDSSBidXMgbWFzdGVyaW5nLCB0aGVuIHlvdSB3b3VsZCBwYXNzCisgKiAweDAwZmZmZmZmIGFzIHRoZSBtYXNrIHRvIHRoaXMgZnVuY3Rpb24uCisgKi8KK2ludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisjaWZkZWYgQ09ORklHX1BDSQorCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkbWFfc3VwcG9ydGVkKTsKKworaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzaykKK3sKKyNpZmRlZiBDT05GSUdfUENJCisJaWYgKGRldi0+YnVzID09ICZwY2lfYnVzX3R5cGUpCisJCXJldHVybiBwY2lfc2V0X2RtYV9tYXNrKHRvX3BjaV9kZXYoZGV2KSwgZG1hX21hc2spOworI2VuZGlmCisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorRVhQT1JUX1NZTUJPTChkbWFfc2V0X21hc2spOworCisKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCi1zdGF0aWMgaW50Ci1fc3BhcmNfaW9fZ2V0X2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IGZwb3MsIGludCBsZW5ndGgsIGludCAqZW9mLAotICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHNwYXJjX2lvX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JY2hhciAqcCA9IGJ1ZiwgKmUgPSBidWYgKyBsZW5ndGg7Ci0Jc3RydWN0IHJlc291cmNlICpyOworCXN0cnVjdCByZXNvdXJjZSAqcm9vdCA9IG0tPnByaXZhdGUsICpyOwogCWNvbnN0IGNoYXIgKm5tOwogCi0JZm9yIChyID0gKChzdHJ1Y3QgcmVzb3VyY2UgKilkYXRhKS0+Y2hpbGQ7IHIgIT0gTlVMTDsgciA9IHItPnNpYmxpbmcpIHsKLQkJaWYgKHAgKyAzMiA+PSBlKQkvKiBCZXR0ZXIgdGhhbiBub3RoaW5nICovCi0JCQlicmVhazsKKwlmb3IgKHIgPSByb290LT5jaGlsZDsgciAhPSBOVUxMOyByID0gci0+c2libGluZykgewogCQlpZiAoKG5tID0gci0+bmFtZSkgPT0gMCkgbm0gPSAiPz8/IjsKLQkJcCArPSBzcHJpbnRmKHAsICIlMDE2bGx4LSUwMTZsbHg6ICVzXG4iLAorCQlzZXFfcHJpbnRmKG0sICIlMDE2bGx4LSUwMTZsbHg6ICVzXG4iLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpci0+c3RhcnQsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyLT5lbmQsIG5tKTsKIAl9CiAKLQlyZXR1cm4gcC1idWY7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3BhcmNfaW9fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzcGFyY19pb19wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcGFyY19pb19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHNwYXJjX2lvX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCiAvKgpAQCAtNzA3LDcgKzczNSw3IEBACiBzdGF0aWMgdm9pZCByZWdpc3Rlcl9wcm9jX3NwYXJjX2lvcG9ydCh2b2lkKQogewogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiaW9fbWFwIiwwLE5VTEwsX3NwYXJjX2lvX2dldF9pbmZvLCZzcGFyY19pb21hcCk7Ci0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiZHZtYV9tYXAiLDAsTlVMTCxfc3BhcmNfaW9fZ2V0X2luZm8sJl9zcGFyY19kdm1hKTsKKwlwcm9jX2NyZWF0ZV9kYXRhKCJpb19tYXAiLCAwLCBOVUxMLCAmc3BhcmNfaW9fcHJvY19mb3BzLCAmc3BhcmNfaW9tYXApOworCXByb2NfY3JlYXRlX2RhdGEoImR2bWFfbWFwIiwgMCwgTlVMTCwgJnNwYXJjX2lvX3Byb2NfZm9wcywgJl9zcGFyY19kdm1hKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYwppbmRleCBhZDgwMGI4Li5lMWFmNDM3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGFzbS9wY2ljLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vbGVvbi5oPgogCiAjaW5jbHVkZSAia2VybmVsLmgiCiAjaW5jbHVkZSAiaXJxLmgiCkBAIC02NjEsNiArNjYyLDEwIEBACiAJCXN1bjRkX2luaXRfSVJRKCk7CiAJCWJyZWFrOwogCisJY2FzZSBzcGFyY19sZW9uOgorCQlsZW9uX2luaXRfSVJRKCk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcHJvbV9wcmludGYoIkNhbm5vdCBpbml0aWFsaXplIElSUXMgb24gdGhpcyBTdW4gbWFjaGluZS4uLiIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2xlb25fa2VybmVsLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZDhhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERhbmllbCBIZWxsc3Ryb20gKGRhbmllbEBnYWlzbGVyLmNvbSkgQWVyb2ZsZXggR2Fpc2xlciBBQgorICogQ29weXJpZ2h0IChDKSAyMDA5IEtvbnJhZCBFaXNlbGUgKGtvbnJhZEBnYWlzbGVyLmNvbSkgQWVyb2ZsZXggR2Fpc2xlciBBQgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9sZW9uLmg+CisjaW5jbHVkZSA8YXNtL2xlb25fYW1iYS5oPgorCisjaW5jbHVkZSAicHJvbS5oIgorI2luY2x1ZGUgImlycS5oIgorCitzdHJ1Y3QgbGVvbjNfaXJxY3RybF9yZWdzX21hcCAqbGVvbjNfaXJxY3RybF9yZWdzOyAvKiBpbnRlcnJ1cHQgY29udHJvbGxlciBiYXNlIGFkZHJlc3MsIGluaXRpYWxpemVkIGJ5IGFtYmFfaW5pdCgpICovCitzdHJ1Y3QgbGVvbjNfZ3B0aW1lcl9yZWdzX21hcCAqbGVvbjNfZ3B0aW1lcl9yZWdzOyAvKiB0aW1lciBjb250cm9sbGVyIGJhc2UgYWRkcmVzcywgaW5pdGlhbGl6ZWQgYnkgYW1iYV9pbml0KCkgKi8KK3N0cnVjdCBhbWJhX2FwYl9kZXZpY2UgbGVvbl9wZXJjcHVfdGltZXJfZGV2WzE2XTsKKworaW50IGxlb25kZWJ1Z19pcnFfZGlzYWJsZTsKK2ludCBsZW9uX2RlYnVnX2lycW91dDsKK3N0YXRpYyBpbnQgZHVtbXlfbWFzdGVyX2wxMF9jb3VudGVyOworCit1bnNpZ25lZCBsb25nIGxlb24zX2dwdGltZXJfaXJxOyAvKiBpbnRlcnJ1cHQgY29udHJvbGxlciBpcnEgbnVtYmVyLCBpbml0aWFsaXplZCBieSBhbWJhX2luaXQoKSAqLwordW5zaWduZWQgaW50IHNwYXJjX2xlb25fZWlycTsKKyNkZWZpbmUgTEVPTl9JTUFTSyAoKCZsZW9uM19pcnFjdHJsX3JlZ3MtPm1hc2tbMF0pKQorCisvKiBSZXR1cm4gdGhlIElSUSBvZiB0aGUgcGVuZGluZyBJUlEgb24gdGhlIGV4dGVuZGVkIElSUSBjb250cm9sbGVyICovCitpbnQgc3BhcmNfbGVvbl9laXJxX2dldChpbnQgZWlycSwgaW50IGNwdSkKK3sKKwlyZXR1cm4gTEVPTjNfQllQQVNTX0xPQURfUEEoJmxlb24zX2lycWN0cmxfcmVncy0+aW50aWRbY3B1XSkgJiAweDFmOworfQorCitpcnFyZXR1cm5fdCBzcGFyY19sZW9uX2VpcnFfaXNyKGludCBkdW1teSwgdm9pZCAqZGV2X2lkKQoreworCXByaW50ayhLRVJOX0VSUiAic3BhcmNfbGVvbl9laXJxX2lzcjogRVJST1IgRVhURU5ERUQgSVJRXG4iKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIFRoZSBleHRlbmRlZCBJUlEgY29udHJvbGxlciBoYXMgYmVlbiBmb3VuZCwgdGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgaXQgKi8KK3ZvaWQgc3BhcmNfbGVvbl9laXJxX3JlZ2lzdGVyKGludCBlaXJxKQoreworCWludCBpcnE7CisKKwkvKiBSZWdpc3RlciBhICJCQUQiIGhhbmRsZXIgZm9yIHRoaXMgaW50ZXJydXB0LCBpdCBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJaXJxID0gcmVxdWVzdF9pcnEoZWlycSwgc3BhcmNfbGVvbl9laXJxX2lzciwKKwkJCSAgKElSUUZfRElTQUJMRUQgfCBTQV9TVEFUSUNfQUxMT0MpLCAiZXh0aXJxIiwgTlVMTCk7CisKKwlpZiAoaXJxKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgInNwYXJjX2xlb25fZWlycV9yZWdpc3RlcjogdW5hYmxlIHRvIGF0dGFjaCBJUlElZFxuIiwKKwkJICAgICAgIGVpcnEpOworCX0gZWxzZSB7CisJCXNwYXJjX2xlb25fZWlycSA9IGVpcnE7CisJfQorCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfaXJxbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCWlmICghaXJxIHx8ICgoaXJxID4gMHhmKSAmJiAhc3BhcmNfbGVvbl9laXJxKQorCSAgICB8fCAoKGlycSA+IDB4MWYpICYmIHNwYXJjX2xlb25fZWlycSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibGVvbl9nZXRfaXJxbWFzazogZmFsc2UgaXJxIG51bWJlcjogJWRcbiIsIGlycSk7CisJCW1hc2sgPSAwOworCX0gZWxzZSB7CisJCW1hc2sgPSBMRU9OX0hBUkRfSU5UKGlycSk7CisJfQorCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgdm9pZCBsZW9uX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycV9ucikKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2ssIGZsYWdzOworCW1hc2sgPSBnZXRfaXJxbWFzayhpcnFfbnIpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlMRU9OM19CWVBBU1NfU1RPUkVfUEEoTEVPTl9JTUFTSywKKwkJCSAgICAgIChMRU9OM19CWVBBU1NfTE9BRF9QQShMRU9OX0lNQVNLKSB8IChtYXNrKSkpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbGVvbl9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIGxvbmcgbWFzaywgZmxhZ3M7CisJbWFzayA9IGdldF9pcnFtYXNrKGlycV9ucik7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCUxFT04zX0JZUEFTU19TVE9SRV9QQShMRU9OX0lNQVNLLAorCQkJICAgICAgKExFT04zX0JZUEFTU19MT0FEX1BBKExFT05fSU1BU0spICYgfihtYXNrKSkpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworfQorCit2b2lkIF9faW5pdCBsZW9uX2luaXRfdGltZXJzKGlycV9oYW5kbGVyX3QgY291bnRlcl9mbikKK3sKKwlpbnQgaXJxOworCisJbGVvbmRlYnVnX2lycV9kaXNhYmxlID0gMDsKKwlsZW9uX2RlYnVnX2lycW91dCA9IDA7CisJbWFzdGVyX2wxMF9jb3VudGVyID0gKHVuc2lnbmVkIGludCAqKSZkdW1teV9tYXN0ZXJfbDEwX2NvdW50ZXI7CisJZHVtbXlfbWFzdGVyX2wxMF9jb3VudGVyID0gMDsKKworCWlmIChsZW9uM19ncHRpbWVyX3JlZ3MgJiYgbGVvbjNfaXJxY3RybF9yZWdzKSB7CisJCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lWzBdLnZhbCwgMCk7CisJCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lWzBdLnJsZCwKKwkJCQkgICAgICAoKCgxMDAwMDAwIC8gMTAwKSAtIDEpKSk7CisJCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lWzBdLmN0cmwsIDApOworCisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJObyBUaW1lci9pcnFjdHJsIGZvdW5kXG4iKTsKKwkJQlVHKCk7CisJfQorCisJaXJxID0gcmVxdWVzdF9pcnEobGVvbjNfZ3B0aW1lcl9pcnEsCisJCQkgIGNvdW50ZXJfZm4sCisJCQkgIChJUlFGX0RJU0FCTEVEIHwgU0FfU1RBVElDX0FMTE9DKSwgInRpbWVyIiwgTlVMTCk7CisKKwlpZiAoaXJxKSB7CisJCXByaW50ayhLRVJOX0VSUiAibGVvbl90aW1lX2luaXQ6IHVuYWJsZSB0byBhdHRhY2ggSVJRJWRcbiIsCisJCSAgICAgICBMRU9OX0lOVEVSUlVQVF9USU1FUjEpOworCQlwcm9tX2hhbHQoKTsKKwl9CisKKwlpZiAobGVvbjNfZ3B0aW1lcl9yZWdzKSB7CisJCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lWzBdLmN0cmwsCisJCQkJICAgICAgTEVPTjNfR1BUSU1FUl9FTiB8CisJCQkJICAgICAgTEVPTjNfR1BUSU1FUl9STCB8CisJCQkJICAgICAgTEVPTjNfR1BUSU1FUl9MRCB8IExFT04zX0dQVElNRVJfSVJRRU4pOworCX0KK30KKwordm9pZCBsZW9uX2NsZWFyX2Nsb2NrX2lycSh2b2lkKQoreworfQorCit2b2lkIGxlb25fbG9hZF9wcm9maWxlX2lycShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbGltaXQpCit7CisJQlVHKCk7Cit9CisKKworCisKK3ZvaWQgX19pbml0IGxlb25fdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQoreworCWlmIChzdHJjbXAoZHAtPnR5cGUsICJjcHUiKSA9PSAwICYmIHN0cmNtcChkcC0+bmFtZSwgIjxOVUxMPiIpID09IDApIHsKKwkJc3RydWN0IHByb3BlcnR5ICpwOworCQlwID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgIm1pZCIsICh2b2lkICopMCk7CisJCWlmIChwKSB7CisJCQlpbnQgbWlkOworCQkJZHAtPm5hbWUgPSBwcm9tX2Vhcmx5X2FsbG9jKDUgKyAxKTsKKwkJCW1lbWNweSgmbWlkLCBwLT52YWx1ZSwgcC0+bGVuZ3RoKTsKKwkJCXNwcmludGYoKGNoYXIgKilkcC0+bmFtZSwgImNwdSUuMmQiLCBtaWQpOworCQl9CisJfQorfQorCit2b2lkIF9faW5pdGRhdGEgKCpwcm9tX2FtYmFfaW5pdCkoc3RydWN0IGRldmljZV9ub2RlICpkcCwgc3RydWN0IGRldmljZV9ub2RlICoqKm5leHRwKSA9IDA7CisKK3ZvaWQgX19pbml0IGxlb25fbm9kZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKipuZXh0cCkKK3sKKwlpZiAocHJvbV9hbWJhX2luaXQgJiYKKwkgICAgc3RyY21wKGRwLT50eXBlLCAiYW1iYXBwIikgPT0gMCAmJgorCSAgICBzdHJjbXAoZHAtPm5hbWUsICJhbWJhcHAwIikgPT0gMCkgeworCQlwcm9tX2FtYmFfaW5pdChkcCwgbmV4dHApOworCX0KK30KKwordm9pZCBfX2luaXQgbGVvbl9pbml0X0lSUSh2b2lkKQoreworCXNwYXJjX2luaXRfdGltZXJzID0gbGVvbl9pbml0X3RpbWVyczsKKworCUJURklYVVBTRVRfQ0FMTChlbmFibGVfaXJxLCBsZW9uX2VuYWJsZV9pcnEsIEJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChkaXNhYmxlX2lycSwgbGVvbl9kaXNhYmxlX2lycSwgQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKGVuYWJsZV9waWxfaXJxLCBsZW9uX2VuYWJsZV9pcnEsIEJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChkaXNhYmxlX3BpbF9pcnEsIGxlb25fZGlzYWJsZV9pcnEsIEJURklYVVBDQUxMX05PUk0pOworCisJQlRGSVhVUFNFVF9DQUxMKGNsZWFyX2Nsb2NrX2lycSwgbGVvbl9jbGVhcl9jbG9ja19pcnEsCisJCQlCVEZJWFVQQ0FMTF9OT1JNKTsKKwlCVEZJWFVQU0VUX0NBTEwobG9hZF9wcm9maWxlX2lycSwgbGVvbl9sb2FkX3Byb2ZpbGVfaXJxLAorCQkJQlRGSVhVUENBTExfTk9QKTsKKworI2lmZGVmIENPTkZJR19TTVAKKwlCVEZJWFVQU0VUX0NBTEwoc2V0X2NwdV9pbnQsIGxlb25fc2V0X2NwdV9pbnQsIEJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChjbGVhcl9jcHVfaW50LCBsZW9uX2NsZWFyX2lwaSwgQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKHNldF9pcnFfdWR0LCBsZW9uX3NldF91ZHQsIEJURklYVVBDQUxMX05PUk0pOworI2VuZGlmCisKK30KKwordm9pZCBfX2luaXQgbGVvbl9pbml0KHZvaWQpCit7CisJcHJvbV9idWlsZF9tb3JlID0gJmxlb25fbm9kZV9pbml0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYwppbmRleCBiNzViZjUwLi4zNzhlYjUzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKKyNpbmNsdWRlIDxhc20vcGVyZl9jb3VudGVyLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgogI2luY2x1ZGUgPGFzbS9wY3IuaD4KQEAgLTMxLDEzICszMiwxOSBAQAogICogbGV2ZWwgMTQgYXMgb3VyIElSUSBvZmYgbGV2ZWwuCiAgKi8KIAotc3RhdGljIGludCBubWlfd2F0Y2hkb2dfYWN0aXZlOwogc3RhdGljIGludCBwYW5pY19vbl90aW1lb3V0OwogCi1pbnQgbm1pX3VzYWJsZTsKLUVYUE9SVF9TWU1CT0xfR1BMKG5taV91c2FibGUpOworLyogbm1pX2FjdGl2ZToKKyAqID4wOiB0aGUgTk1JIHdhdGNoZG9nIGlzIGFjdGl2ZSwgYnV0IGNhbiBiZSBkaXNhYmxlZAorICogPDA6IHRoZSBOTUkgd2F0Y2hkb2cgaGFzIG5vdCBiZWVuIHNldCB1cCwgYW5kIGNhbm5vdCBiZSBlbmFibGVkCisgKiAgMDogdGhlIE5NSSB3YXRjaGRvZyBpcyBkaXNhYmxlZCwgYnV0IGNhbiBiZSBlbmFibGVkCisgKi8KK2F0b21pY190IG5taV9hY3RpdmUgPSBBVE9NSUNfSU5JVCgwKTsJCS8qIG9wcm9maWxlIHVzZXMgdGhpcyAqLworRVhQT1JUX1NZTUJPTChubWlfYWN0aXZlKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBubWlfaHogPSBIWjsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzaG9ydCwgd2RfZW5hYmxlZCk7CitzdGF0aWMgaW50IGVuZGZsYWcgX19pbml0ZGF0YTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgbGFzdF9pcnFfc3VtKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShsb2NhbF90LCBhbGVydF9jb3VudGVyKTsKQEAgLTQ1LDcgKzUyLDcgQEAKIAogdm9pZCB0b3VjaF9ubWlfd2F0Y2hkb2codm9pZCkKIHsKLQlpZiAobm1pX3dhdGNoZG9nX2FjdGl2ZSkgeworCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkpIHsKIAkJaW50IGNwdTsKIAogCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKQEAgLTc4LDYgKzg1LDcgQEAKIAlpZiAoZG9fcGFuaWMgfHwgcGFuaWNfb25fb29wcykKIAkJcGFuaWMoIk5vbiBtYXNrYWJsZSBpbnRlcnJ1cHQiKTsKIAorCW5taV9leGl0KCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCWRvX2V4aXQoU0lHQlVTKTsKIH0KQEAgLTkyLDYgKzEwMCw4IEBACiAKIAlsb2NhbF9jcHVfZGF0YSgpLl9fbm1pX2NvdW50Kys7CiAKKwlubWlfZW50ZXIoKTsKKwogCWlmIChub3RpZnlfZGllKERJRV9OTUksICJubWkiLCByZWdzLCAwLAogCQkgICAgICAgcHRfcmVnc190cmFwX3R5cGUocmVncyksIFNJR0lOVCkgPT0gTk9USUZZX1NUT1ApCiAJCXRvdWNoZWQgPSAxOwpAQCAtMTEwLDEwICsxMjAsMTIgQEAKIAkJX19nZXRfY3B1X3ZhcihsYXN0X2lycV9zdW0pID0gc3VtOwogCQlsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIoYWxlcnRfY291bnRlciksIDApOwogCX0KLQlpZiAobm1pX3VzYWJsZSkgeworCWlmIChfX2dldF9jcHVfdmFyKHdkX2VuYWJsZWQpKSB7CiAJCXdyaXRlX3BpYyhwaWNsX3ZhbHVlKG5taV9oeikpOwogCQlwY3Jfb3BzLT53cml0ZShwY3JfZW5hYmxlKTsKIAl9CisKKwlubWlfZXhpdCgpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfbm1pX2NvdW50KGludCBjcHUpCkBAIC0xMjEsOCArMTMzLDYgQEAKIAlyZXR1cm4gY3B1X2RhdGEoY3B1KS5fX25taV9jb3VudDsKIH0KIAotc3RhdGljIGludCBlbmRmbGFnIF9faW5pdGRhdGE7Ci0KIHN0YXRpYyBfX2luaXQgdm9pZCBubWlfY3B1X2J1c3kodm9pZCAqZGF0YSkKIHsKIAlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKQEAgLTE0MywxMiArMTUzLDE1IEBACiAJcHJpbnRrKEtFUk5fV0FSTklORwogCQkiYW5kIGF0dGFjaCB0aGUgb3V0cHV0IG9mIHRoZSAnZG1lc2cnIGNvbW1hbmQuXG4iKTsKIAotCW5taV91c2FibGUgPSAwOworCXBlcl9jcHUod2RfZW5hYmxlZCwgY3B1KSA9IDA7CisJYXRvbWljX2RlYygmbm1pX2FjdGl2ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3Bfd2F0Y2hkb2codm9pZCAqdW51c2VkKQordm9pZCBzdG9wX25taV93YXRjaGRvZyh2b2lkICp1bnVzZWQpCiB7CiAJcGNyX29wcy0+d3JpdGUoUENSX1BJQ19QUklWKTsKKwlfX2dldF9jcHVfdmFyKHdkX2VuYWJsZWQpID0gMDsKKwlhdG9taWNfZGVjKCZubWlfYWN0aXZlKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgY2hlY2tfbm1pX3dhdGNoZG9nKHZvaWQpCkBAIC0xNTYsNiArMTY5LDkgQEAKIAl1bnNpZ25lZCBpbnQgKnByZXZfbm1pX2NvdW50OwogCWludCBjcHUsIGVycjsKIAorCWlmICghYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpKQorCQlyZXR1cm4gMDsKKwogCXByZXZfbm1pX2NvdW50ID0ga21hbGxvYyhucl9jcHVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGludCksIEdGUF9LRVJORUwpOwogCWlmICghcHJldl9ubWlfY291bnQpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTE3MiwxMiArMTg4LDE1IEBACiAJbWRlbGF5KCgyMCAqIDEwMDApIC8gbm1pX2h6KTsgLyogd2FpdCAyMCB0aWNrcyAqLwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaWYgKCFwZXJfY3B1KHdkX2VuYWJsZWQsIGNwdSkpCisJCQljb250aW51ZTsKIAkJaWYgKGdldF9ubWlfY291bnQoY3B1KSAtIHByZXZfbm1pX2NvdW50W2NwdV0gPD0gNSkKIAkJCXJlcG9ydF9icm9rZW5fbm1pKGNwdSwgcHJldl9ubWlfY291bnQpOwogCX0KIAllbmRmbGFnID0gMTsKLQlpZiAoIW5taV91c2FibGUpIHsKKwlpZiAoIWF0b21pY19yZWFkKCZubWlfYWN0aXZlKSkgewogCQlrZnJlZShwcmV2X25taV9jb3VudCk7CisJCWF0b21pY19zZXQoJm5taV9hY3RpdmUsIC0xKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0xODgsMTIgKzIwNywyNiBAQAogCWtmcmVlKHByZXZfbm1pX2NvdW50KTsKIAlyZXR1cm4gMDsKIGVycm9yOgotCW9uX2VhY2hfY3B1KHN0b3Bfd2F0Y2hkb2csIE5VTEwsIDEpOworCW9uX2VhY2hfY3B1KHN0b3Bfbm1pX3dhdGNoZG9nLCBOVUxMLCAxKTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBzdGFydF93YXRjaGRvZyh2b2lkICp1bnVzZWQpCit2b2lkIHN0YXJ0X25taV93YXRjaGRvZyh2b2lkICp1bnVzZWQpCiB7CisJX19nZXRfY3B1X3Zhcih3ZF9lbmFibGVkKSA9IDE7CisJYXRvbWljX2luYygmbm1pX2FjdGl2ZSk7CisKKwlwY3Jfb3BzLT53cml0ZShQQ1JfUElDX1BSSVYpOworCXdyaXRlX3BpYyhwaWNsX3ZhbHVlKG5taV9oeikpOworCisJcGNyX29wcy0+d3JpdGUocGNyX2VuYWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIG5taV9hZGp1c3RfaHpfb25lKHZvaWQgKnVudXNlZCkKK3sKKwlpZiAoIV9fZ2V0X2NwdV92YXIod2RfZW5hYmxlZCkpCisJCXJldHVybjsKKwogCXBjcl9vcHMtPndyaXRlKFBDUl9QSUNfUFJJVik7CiAJd3JpdGVfcGljKHBpY2xfdmFsdWUobm1pX2h6KSk7CiAKQEAgLTIwMywxMyArMjM2LDEzIEBACiB2b2lkIG5taV9hZGp1c3RfaHoodW5zaWduZWQgaW50IG5ld19oeikKIHsKIAlubWlfaHogPSBuZXdfaHo7Ci0Jb25fZWFjaF9jcHUoc3RhcnRfd2F0Y2hkb2csIE5VTEwsIDEpOworCW9uX2VhY2hfY3B1KG5taV9hZGp1c3RfaHpfb25lLCBOVUxMLCAxKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5taV9hZGp1c3RfaHopOwogCiBzdGF0aWMgaW50IG5taV9zaHV0ZG93bihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqcCkKIHsKLQlvbl9lYWNoX2NwdShzdG9wX3dhdGNoZG9nLCBOVUxMLCAxKTsKKwlvbl9lYWNoX2NwdShzdG9wX25taV93YXRjaGRvZywgTlVMTCwgMSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMSwxOCArMjU0LDE5IEBACiB7CiAJaW50IGVycjsKIAotCW5taV91c2FibGUgPSAxOwotCi0Jb25fZWFjaF9jcHUoc3RhcnRfd2F0Y2hkb2csIE5VTEwsIDEpOworCW9uX2VhY2hfY3B1KHN0YXJ0X25taV93YXRjaGRvZywgTlVMTCwgMSk7CiAKIAllcnIgPSBjaGVja19ubWlfd2F0Y2hkb2coKTsKIAlpZiAoIWVycikgewogCQllcnIgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJm5taV9yZWJvb3Rfbm90aWZpZXIpOwogCQlpZiAoZXJyKSB7Ci0JCQlubWlfdXNhYmxlID0gMDsKLQkJCW9uX2VhY2hfY3B1KHN0b3Bfd2F0Y2hkb2csIE5VTEwsIDEpOworCQkJb25fZWFjaF9jcHUoc3RvcF9ubWlfd2F0Y2hkb2csIE5VTEwsIDEpOworCQkJYXRvbWljX3NldCgmbm1pX2FjdGl2ZSwgLTEpOwogCQl9CiAJfQorCWlmICghZXJyKQorCQlpbml0X2h3X3BlcmZfY291bnRlcnMoKTsKKwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKaW5kZXggOTAzOTY3MC4uNGMyNmViNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKQEAgLTksNiArOSw4IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vbGVvbi5oPgorI2luY2x1ZGUgPGFzbS9sZW9uX2FtYmEuaD4KIAogI2luY2x1ZGUgIm9mX2RldmljZV9jb21tb24uaCIKIApAQCAtOTcsNiArOTksMzUgQEAKIAlyZXR1cm4gSU9SRVNPVVJDRV9NRU07CiB9CiAKKyAvKgorICogQU1CQVBQIGJ1cyBzcGVjaWZpYyB0cmFuc2xhdG9yCisgKi8KKworc3RhdGljIGludCBvZl9idXNfYW1iYXBwX21hdGNoKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJcmV0dXJuICFzdHJjbXAobnAtPm5hbWUsICJhbWJhcHAiKTsKK30KKworc3RhdGljIHZvaWQgb2ZfYnVzX2FtYmFwcF9jb3VudF9jZWxscyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLAorCQkJCSAgICAgIGludCAqYWRkcmMsIGludCAqc2l6ZWMpCit7CisJaWYgKGFkZHJjKQorCQkqYWRkcmMgPSAxOworCWlmIChzaXplYykKKwkJKnNpemVjID0gMTsKK30KKworc3RhdGljIGludCBvZl9idXNfYW1iYXBwX21hcCh1MzIgKmFkZHIsIGNvbnN0IHUzMiAqcmFuZ2UsCisJCQkgICAgIGludCBuYSwgaW50IG5zLCBpbnQgcG5hKQoreworCXJldHVybiBvZl9idXNfZGVmYXVsdF9tYXAoYWRkciwgcmFuZ2UsIG5hLCBucywgcG5hKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgb2ZfYnVzX2FtYmFwcF9nZXRfZmxhZ3MoY29uc3QgdTMyICphZGRyLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIElPUkVTT1VSQ0VfTUVNOworfQogCiAvKgogICogQXJyYXkgb2YgYnVzIHNwZWNpZmljIHRyYW5zbGF0b3JzCkBAIC0xMjEsNiArMTUyLDE1IEBACiAJCS5tYXAgPSBvZl9idXNfZGVmYXVsdF9tYXAsCiAJCS5nZXRfZmxhZ3MgPSBvZl9idXNfc2J1c19nZXRfZmxhZ3MsCiAJfSwKKwkvKiBBTUJBICovCisJeworCQkubmFtZSA9ICJhbWJhcHAiLAorCQkuYWRkcl9wcm9wX25hbWUgPSAicmVnIiwKKwkJLm1hdGNoID0gb2ZfYnVzX2FtYmFwcF9tYXRjaCwKKwkJLmNvdW50X2NlbGxzID0gb2ZfYnVzX2FtYmFwcF9jb3VudF9jZWxscywKKwkJLm1hcCA9IG9mX2J1c19hbWJhcHBfbWFwLAorCQkuZ2V0X2ZsYWdzID0gb2ZfYnVzX2FtYmFwcF9nZXRfZmxhZ3MsCisJfSwKIAkvKiBEZWZhdWx0ICovCiAJewogCQkubmFtZSA9ICJkZWZhdWx0IiwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMKaW5kZXggNTc4NTlhZC4uYzY4NjQ4NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMKQEAgLTEwMzksNyArMTAzOSw3IEBACiAJcGNpX2Rldl9wdXQoYWxpX2lzYV9icmlkZ2UpOwogfQogCi1pbnQgcGNpX2RtYV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU2NCBkZXZpY2VfbWFzaykKK2ludCBwY2k2NF9kbWFfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1NjQgZGV2aWNlX21hc2spCiB7CiAJdTY0IGRtYV9hZGRyX21hc2s7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zdW40di5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3N1bjR2LmMKaW5kZXggMjQ4NWVhYS4uMjNjMzNmZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3N1bjR2LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3N1bjR2LmMKQEAgLTIzMiw3ICsyMzIsOCBAQAogCiBzdGF0aWMgZG1hX2FkZHJfdCBkbWFfNHZfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc3osCi0JCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCisJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAlzdHJ1Y3QgaW9tbXUgKmlvbW11OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG5wYWdlcywgb2FkZHI7CkBAIC0yOTYsNyArMjk3LDggQEAKIH0KIAogc3RhdGljIHZvaWQgZG1hXzR2X3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJ1c19hZGRyLAotCQkJICAgICAgc2l6ZV90IHN6LCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCisJCQkgICAgICBzaXplX3Qgc3osIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCSAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibTsKIAlzdHJ1Y3QgaW9tbXUgKmlvbW11OwpAQCAtMzM2LDcgKzMzOCw4IEBACiB9CiAKIHN0YXRpYyBpbnQgZG1hXzR2X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQkJIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKKwkJCSBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzLCAqb3V0cywgKnNlZ3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGhhbmRsZSwgcHJvdDsKQEAgLTQ3OCw3ICs0ODEsOCBAQAogfQogCiBzdGF0aWMgdm9pZCBkbWFfNHZfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKLQkJCSAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCisJCQkgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwpAQCAtNTIxLDI5ICs1MjUsMTMgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBkbWFfNHZfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgICAgIGRtYV9hZGRyX3QgYnVzX2FkZHIsIHNpemVfdCBzeiwKLQkJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCS8qIE5vdGhpbmcgdG8gZG8uLi4gKi8KLX0KLQotc3RhdGljIHZvaWQgZG1hXzR2X3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsCi0JCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCS8qIE5vdGhpbmcgdG8gZG8uLi4gKi8KLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfb3BzIHN1bjR2X2RtYV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGRtYV9tYXBfb3BzIHN1bjR2X2RtYV9vcHMgPSB7CiAJLmFsbG9jX2NvaGVyZW50CQkJPSBkbWFfNHZfYWxsb2NfY29oZXJlbnQsCiAJLmZyZWVfY29oZXJlbnQJCQk9IGRtYV80dl9mcmVlX2NvaGVyZW50LAogCS5tYXBfcGFnZQkJCT0gZG1hXzR2X21hcF9wYWdlLAogCS51bm1hcF9wYWdlCQkJPSBkbWFfNHZfdW5tYXBfcGFnZSwKIAkubWFwX3NnCQkJCT0gZG1hXzR2X21hcF9zZywKIAkudW5tYXBfc2cJCQk9IGRtYV80dl91bm1hcF9zZywKLQkuc3luY19zaW5nbGVfZm9yX2NwdQkJPSBkbWFfNHZfc3luY19zaW5nbGVfZm9yX2NwdSwKLQkuc3luY19zZ19mb3JfY3B1CQk9IGRtYV80dl9zeW5jX3NnX2Zvcl9jcHUsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpX3N1bjR2X3NjYW5fYnVzKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Bjci5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMKaW5kZXggMWFlOGNkZC4uNjhmZjAwMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMKQEAgLTcsNiArNyw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCisjaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisKICNpbmNsdWRlIDxhc20vcGlsLmg+CiAjaW5jbHVkZSA8YXNtL3Bjci5oPgogI2luY2x1ZGUgPGFzbS9ubWkuaD4KQEAgLTM0LDEwICszNiwyMCBAQAogICovCiB2b2lkIGRlZmVycmVkX3Bjcl93b3JrX2lycShpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3M7CisKIAljbGVhcl9zb2Z0aW50KDEgPDwgUElMX0RFRkVSUkVEX1BDUl9XT1JLKTsKKworCW9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOworCWlycV9lbnRlcigpOworI2lmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCisJcGVyZl9jb3VudGVyX2RvX3BlbmRpbmcoKTsKKyNlbmRpZgorCWlycV9leGl0KCk7CisJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKIH0KIAotdm9pZCBzY2hlZHVsZV9kZWZlcnJlZF9wY3Jfd29yayh2b2lkKQordm9pZCBzZXRfcGVyZl9jb3VudGVyX3BlbmRpbmcodm9pZCkKIHsKIAlzZXRfc29mdGludCgxIDw8IFBJTF9ERUZFUlJFRF9QQ1JfV09SSyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2NvdW50ZXIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfY291bnRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZGU0MDM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9jb3VudGVyLmMKQEAgLTAsMCArMSw1NTcgQEAKKy8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydCBmb3Igc3BhcmM2NC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBhbG1vc3QgZW50aXJlbHkgdXBvbiB0aGUgeDg2IHBlcmYgY291bnRlcgorICogY29kZSwgd2hpY2ggaXM6CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgorICogIENvcHlyaWdodCAoQykgMjAwOSBKYXN3aW5kZXIgU2luZ2ggUmFqcHV0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4sIFJvYmVydCBSaWNodGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisjaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgorI2luY2x1ZGUgPGFzbS9wY3IuaD4KKworLyogU3BhcmM2NCBjaGlwcyBoYXZlIHR3byBwZXJmb3JtYW5jZSBjb3VudGVycywgMzItYml0cyBlYWNoLCB3aXRoCisgKiBvdmVyZmxvdyBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBvbiB0cmFuc2l0aW9uIGZyb20gMHhmZmZmZmZmZiB0byAwLgorICogVGhlIGNvdW50ZXJzIGFyZSBhY2Nlc3NlZCBpbiBvbmUgZ28gdXNpbmcgYSA2NC1iaXQgcmVnaXN0ZXIuCisgKgorICogQm90aCBjb3VudGVycyBhcmUgY29udHJvbGxlZCB1c2luZyBhIHNpbmdsZSBjb250cm9sIHJlZ2lzdGVyLiAgVGhlCisgKiBvbmx5IHdheSB0byBzdG9wIGFsbCBzYW1wbGluZyBpcyB0byBjbGVhciBhbGwgb2YgdGhlIGNvbnRleHQgKHVzZXIsCisgKiBzdXBlcnZpc29yLCBoeXBlcnZpc29yKSBzYW1wbGluZyBlbmFibGUgYml0cy4gIEJ1dCB0aGVzZSBiaXRzIGFwcGx5CisgKiB0byBib3RoIGNvdW50ZXJzLCB0aHVzIHRoZSB0d28gY291bnRlcnMgY2FuJ3QgYmUgZW5hYmxlZC9kaXNhYmxlZAorICogaW5kaXZpZHVhbGx5LgorICoKKyAqIFRoZSBjb250cm9sIHJlZ2lzdGVyIGhhcyB0d28gZXZlbnQgZmllbGRzLCBvbmUgZm9yIGVhY2ggb2YgdGhlIHR3bworICogY291bnRlcnMuICBJdCdzIHRodXMgbmVhcmx5IGltcG9zc2libGUgdG8gaGF2ZSBvbmUgY291bnRlciBnb2luZworICogd2hpbGUga2VlcGluZyB0aGUgb3RoZXIgb25lIHN0b3BwZWQuICBUaGVyZWZvcmUgaXQgaXMgcG9zc2libGUgdG8KKyAqIGdldCBvdmVyZmxvdyBpbnRlcnJ1cHRzIGZvciBjb3VudGVycyBub3QgY3VycmVudGx5ICJpbiB1c2UiIGFuZAorICogdGhhdCBjb25kaXRpb24gbXVzdCBiZSBjaGVja2VkIGluIHRoZSBvdmVyZmxvdyBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqCisgKiBTbyB3ZSB1c2UgYSBoYWNrLCBpbiB0aGF0IHdlIHByb2dyYW0gaW5hY3RpdmUgY291bnRlcnMgd2l0aCB0aGUKKyAqICJzd19jb3VudDAiIGFuZCAic3dfY291bnQxIiBldmVudHMuICBUaGVzZSBjb3VudCBob3cgbWFueSB0aW1lcworICogdGhlIGluc3RydWN0aW9uICJzZXRoaSAlaGkoMHhmYzAwMCksICVnMCIgaXMgZXhlY3V0ZWQuICBJdCdzIGFuCisgKiB1bnVzdWFsIHdheSB0byBlbmNvZGUgYSBOT1AgYW5kIHRoZXJlZm9yZSB3aWxsIG5vdCB0cmlnZ2VyIGluCisgKiBub3JtYWwgY29kZS4KKyAqLworCisjZGVmaW5lIE1BWF9IV0NPVU5URVJTCQkJMgorI2RlZmluZSBNQVhfUEVSSU9ECQkJKCgxVUwgPDwgMzIpIC0gMSkKKworI2RlZmluZSBQSUNfVVBQRVJfSU5ERVgJCQkwCisjZGVmaW5lIFBJQ19MT1dFUl9JTkRFWAkJCTEKKworc3RydWN0IGNwdV9od19jb3VudGVycyB7CisJc3RydWN0IHBlcmZfY291bnRlcgkqY291bnRlcnNbTUFYX0hXQ09VTlRFUlNdOworCXVuc2lnbmVkIGxvbmcJCXVzZWRfbWFza1tCSVRTX1RPX0xPTkdTKE1BWF9IV0NPVU5URVJTKV07CisJdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhNQVhfSFdDT1VOVEVSUyldOworCWludCBlbmFibGVkOworfTsKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfaHdfY291bnRlcnMsIGNwdV9od19jb3VudGVycykgPSB7IC5lbmFibGVkID0gMSwgfTsKKworc3RydWN0IHBlcmZfZXZlbnRfbWFwIHsKKwl1MTYJZW5jb2Rpbmc7CisJdTgJcGljX21hc2s7CisjZGVmaW5lIFBJQ19OT05FCTB4MDAKKyNkZWZpbmUgUElDX1VQUEVSCTB4MDEKKyNkZWZpbmUgUElDX0xPV0VSCTB4MDIKK307CisKK3N0cnVjdCBzcGFyY19wbXUgeworCWNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcAkqKCpldmVudF9tYXApKGludCk7CisJaW50CQkJCW1heF9ldmVudHM7CisJaW50CQkJCXVwcGVyX3NoaWZ0OworCWludAkJCQlsb3dlcl9zaGlmdDsKKwlpbnQJCQkJZXZlbnRfbWFzazsKKwlpbnQJCQkJaHZfYml0OworCWludAkJCQlpcnFfYml0OworCWludAkJCQl1cHBlcl9ub3A7CisJaW50CQkJCWxvd2VyX25vcDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgdWx0cmEzaV9wZXJmbW9uX2V2ZW50X21hcFtdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdID0geyAweDAwMDAsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LAorCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10gPSB7IDB4MDAwMSwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gPSB7IDB4MDAwOSwgUElDX0xPV0VSIH0sCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXSA9IHsgMHgwMDA5LCBQSUNfVVBQRVIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKnVsdHJhM2lfZXZlbnRfbWFwKGludCBldmVudCkKK3sKKwlyZXR1cm4gJnVsdHJhM2lfcGVyZm1vbl9ldmVudF9tYXBbZXZlbnRdOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwYXJjX3BtdSB1bHRyYTNpX3BtdSA9IHsKKwkuZXZlbnRfbWFwCT0gdWx0cmEzaV9ldmVudF9tYXAsCisJLm1heF9ldmVudHMJPSBBUlJBWV9TSVpFKHVsdHJhM2lfcGVyZm1vbl9ldmVudF9tYXApLAorCS51cHBlcl9zaGlmdAk9IDExLAorCS5sb3dlcl9zaGlmdAk9IDQsCisJLmV2ZW50X21hc2sJPSAweDNmLAorCS51cHBlcl9ub3AJPSAweDFjLAorCS5sb3dlcl9ub3AJPSAweDE0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCBuaWFnYXJhMl9wZXJmbW9uX2V2ZW50X21hcFtdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdID0geyAweDAyZmYsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LAorCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10gPSB7IDB4MDJmZiwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gPSB7IDB4MDIwOCwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXSA9IHsgMHgwMzAyLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKKwlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXSA9IHsgMHgwMjAxLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKKwlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXSA9IHsgMHgwMjAyLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKm5pYWdhcmEyX2V2ZW50X21hcChpbnQgZXZlbnQpCit7CisJcmV0dXJuICZuaWFnYXJhMl9wZXJmbW9uX2V2ZW50X21hcFtldmVudF07Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BhcmNfcG11IG5pYWdhcmEyX3BtdSA9IHsKKwkuZXZlbnRfbWFwCT0gbmlhZ2FyYTJfZXZlbnRfbWFwLAorCS5tYXhfZXZlbnRzCT0gQVJSQVlfU0laRShuaWFnYXJhMl9wZXJmbW9uX2V2ZW50X21hcCksCisJLnVwcGVyX3NoaWZ0CT0gMTksCisJLmxvd2VyX3NoaWZ0CT0gNiwKKwkuZXZlbnRfbWFzawk9IDB4ZmZmLAorCS5odl9iaXQJCT0gMHg4LAorCS5pcnFfYml0CT0gMHgwMywKKwkudXBwZXJfbm9wCT0gMHgyMjAsCisJLmxvd2VyX25vcAk9IDB4MjIwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGFyY19wbXUgKnNwYXJjX3BtdSBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgdTY0IGV2ZW50X2VuY29kaW5nKHU2NCBldmVudCwgaW50IGlkeCkKK3sKKwlpZiAoaWR4ID09IFBJQ19VUFBFUl9JTkRFWCkKKwkJZXZlbnQgPDw9IHNwYXJjX3BtdS0+dXBwZXJfc2hpZnQ7CisJZWxzZQorCQlldmVudCA8PD0gc3BhcmNfcG11LT5sb3dlcl9zaGlmdDsKKwlyZXR1cm4gZXZlbnQ7Cit9CisKK3N0YXRpYyB1NjQgbWFza19mb3JfaW5kZXgoaW50IGlkeCkKK3sKKwlyZXR1cm4gZXZlbnRfZW5jb2Rpbmcoc3BhcmNfcG11LT5ldmVudF9tYXNrLCBpZHgpOworfQorCitzdGF0aWMgdTY0IG5vcF9mb3JfaW5kZXgoaW50IGlkeCkKK3sKKwlyZXR1cm4gZXZlbnRfZW5jb2RpbmcoaWR4ID09IFBJQ19VUFBFUl9JTkRFWCA/CisJCQkgICAgICBzcGFyY19wbXUtPnVwcGVyX25vcCA6CisJCQkgICAgICBzcGFyY19wbXUtPmxvd2VyX25vcCwgaWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNwYXJjX3BtdV9lbmFibGVfY291bnRlcihzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsCisJCQkJCSAgICBpbnQgaWR4KQoreworCXU2NCB2YWwsIG1hc2sgPSBtYXNrX2Zvcl9pbmRleChpZHgpOworCisJdmFsID0gcGNyX29wcy0+cmVhZCgpOworCXBjcl9vcHMtPndyaXRlKCh2YWwgJiB+bWFzaykgfCBod2MtPmNvbmZpZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGFyY19wbXVfZGlzYWJsZV9jb3VudGVyKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywKKwkJCQkJICAgICBpbnQgaWR4KQoreworCXU2NCBtYXNrID0gbWFza19mb3JfaW5kZXgoaWR4KTsKKwl1NjQgbm9wID0gbm9wX2Zvcl9pbmRleChpZHgpOworCXU2NCB2YWwgPSBwY3Jfb3BzLT5yZWFkKCk7CisKKwlwY3Jfb3BzLT53cml0ZSgodmFsICYgfm1hc2spIHwgbm9wKTsKK30KKwordm9pZCBod19wZXJmX2VuYWJsZSh2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOworCXU2NCB2YWw7CisJaW50IGk7CisKKwlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJY3B1Yy0+ZW5hYmxlZCA9IDE7CisJYmFycmllcigpOworCisJdmFsID0gcGNyX29wcy0+cmVhZCgpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9IV0NPVU5URVJTOyBpKyspIHsKKwkJc3RydWN0IHBlcmZfY291bnRlciAqY3AgPSBjcHVjLT5jb3VudGVyc1tpXTsKKwkJc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjOworCisJCWlmICghY3ApCisJCQljb250aW51ZTsKKwkJaHdjID0gJmNwLT5odzsKKwkJdmFsIHw9IGh3Yy0+Y29uZmlnX2Jhc2U7CisJfQorCisJcGNyX29wcy0+d3JpdGUodmFsKTsKK30KKwordm9pZCBod19wZXJmX2Rpc2FibGUodm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwl1NjQgdmFsOworCisJaWYgKCFjcHVjLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwljcHVjLT5lbmFibGVkID0gMDsKKworCXZhbCA9IHBjcl9vcHMtPnJlYWQoKTsKKwl2YWwgJj0gfihQQ1JfVVRSQUNFIHwgUENSX1NUUkFDRSB8CisJCSBzcGFyY19wbXUtPmh2X2JpdCB8IHNwYXJjX3BtdS0+aXJxX2JpdCk7CisJcGNyX29wcy0+d3JpdGUodmFsKTsKK30KKworc3RhdGljIHUzMiByZWFkX3BtYyhpbnQgaWR4KQoreworCXU2NCB2YWw7CisKKwlyZWFkX3BpYyh2YWwpOworCWlmIChpZHggPT0gUElDX1VQUEVSX0lOREVYKQorCQl2YWwgPj49IDMyOworCisJcmV0dXJuIHZhbCAmIDB4ZmZmZmZmZmY7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3BtYyhpbnQgaWR4LCB1NjQgdmFsKQoreworCXU2NCBzaGlmdCwgbWFzaywgcGljOworCisJc2hpZnQgPSAwOworCWlmIChpZHggPT0gUElDX1VQUEVSX0lOREVYKQorCQlzaGlmdCA9IDMyOworCisJbWFzayA9ICgodTY0KSAweGZmZmZmZmZmKSA8PCBzaGlmdDsKKwl2YWwgPDw9IHNoaWZ0OworCisJcmVhZF9waWMocGljKTsKKwlwaWMgJj0gfm1hc2s7CisJcGljIHw9IHZhbDsKKwl3cml0ZV9waWMocGljKTsKK30KKworc3RhdGljIGludCBzcGFyY19wZXJmX2NvdW50ZXJfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAorCQkJCQkgc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjLCBpbnQgaWR4KQoreworCXM2NCBsZWZ0ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CisJczY0IHBlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh1bmxpa2VseShsZWZ0IDw9IC1wZXJpb2QpKSB7CisJCWxlZnQgPSBwZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CisJCXJldCA9IDE7CisJfQorCisJaWYgKHVubGlrZWx5KGxlZnQgPD0gMCkpIHsKKwkJbGVmdCArPSBwZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CisJCXJldCA9IDE7CisJfQorCWlmIChsZWZ0ID4gTUFYX1BFUklPRCkKKwkJbGVmdCA9IE1BWF9QRVJJT0Q7CisKKwlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgKHU2NCktbGVmdCk7CisKKwl3cml0ZV9wbWMoaWR4LCAodTY0KSgtbGVmdCkgJiAweGZmZmZmZmZmKTsKKworCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UoY291bnRlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNwYXJjX3BtdV9lbmFibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3sKKwlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7CisJaW50IGlkeCA9IGh3Yy0+aWR4OworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXNwYXJjX3BtdV9kaXNhYmxlX2NvdW50ZXIoaHdjLCBpZHgpOworCisJY3B1Yy0+Y291bnRlcnNbaWR4XSA9IGNvdW50ZXI7CisJc2V0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKTsKKworCXNwYXJjX3BlcmZfY291bnRlcl9zZXRfcGVyaW9kKGNvdW50ZXIsIGh3YywgaWR4KTsKKwlzcGFyY19wbXVfZW5hYmxlX2NvdW50ZXIoaHdjLCBpZHgpOworCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UoY291bnRlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1NjQgc3BhcmNfcGVyZl9jb3VudGVyX3VwZGF0ZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAorCQkJCSAgICAgc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjLCBpbnQgaWR4KQoreworCWludCBzaGlmdCA9IDY0IC0gMzI7CisJdTY0IHByZXZfcmF3X2NvdW50LCBuZXdfcmF3X2NvdW50OworCXM2NCBkZWx0YTsKKworYWdhaW46CisJcHJldl9yYXdfY291bnQgPSBhdG9taWM2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOworCW5ld19yYXdfY291bnQgPSByZWFkX3BtYyhpZHgpOworCisJaWYgKGF0b21pYzY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldl9yYXdfY291bnQsCisJCQkgICAgIG5ld19yYXdfY291bnQpICE9IHByZXZfcmF3X2NvdW50KQorCQlnb3RvIGFnYWluOworCisJZGVsdGEgPSAobmV3X3Jhd19jb3VudCA8PCBzaGlmdCkgLSAocHJldl9yYXdfY291bnQgPDwgc2hpZnQpOworCWRlbHRhID4+PSBzaGlmdDsKKworCWF0b21pYzY0X2FkZChkZWx0YSwgJmNvdW50ZXItPmNvdW50KTsKKwlhdG9taWM2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKKworCXJldHVybiBuZXdfcmF3X2NvdW50OworfQorCitzdGF0aWMgdm9pZCBzcGFyY19wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQoreworCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOworCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YyA9ICZjb3VudGVyLT5odzsKKwlpbnQgaWR4ID0gaHdjLT5pZHg7CisKKwljbGVhcl9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7CisJc3BhcmNfcG11X2Rpc2FibGVfY291bnRlcihod2MsIGlkeCk7CisKKwliYXJyaWVyKCk7CisKKwlzcGFyY19wZXJmX2NvdW50ZXJfdXBkYXRlKGNvdW50ZXIsIGh3YywgaWR4KTsKKwljcHVjLT5jb3VudGVyc1tpZHhdID0gTlVMTDsKKwljbGVhcl9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spOworCisJcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKK30KKworc3RhdGljIHZvaWQgc3BhcmNfcG11X3JlYWQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7CisJc3BhcmNfcGVyZl9jb3VudGVyX3VwZGF0ZShjb3VudGVyLCBod2MsIGh3Yy0+aWR4KTsKK30KKworc3RhdGljIHZvaWQgc3BhcmNfcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7CisJc3BhcmNfcG11X2VuYWJsZV9jb3VudGVyKGh3YywgaHdjLT5pZHgpOworfQorCitzdGF0aWMgYXRvbWljX3QgYWN0aXZlX2NvdW50ZXJzID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHBtY19ncmFiX211dGV4KTsKKwordm9pZCBwZXJmX2NvdW50ZXJfZ3JhYl9wbWModm9pZCkKK3sKKwlpZiAoYXRvbWljX2luY19ub3RfemVybygmYWN0aXZlX2NvdW50ZXJzKSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcG1jX2dyYWJfbXV0ZXgpOworCWlmIChhdG9taWNfcmVhZCgmYWN0aXZlX2NvdW50ZXJzKSA9PSAwKSB7CisJCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgPiAwKSB7CisJCQlvbl9lYWNoX2NwdShzdG9wX25taV93YXRjaGRvZywgTlVMTCwgMSk7CisJCQlCVUdfT04oYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpICE9IDApOworCQl9CisJCWF0b21pY19pbmMoJmFjdGl2ZV9jb3VudGVycyk7CisJfQorCW11dGV4X3VubG9jaygmcG1jX2dyYWJfbXV0ZXgpOworfQorCit2b2lkIHBlcmZfY291bnRlcl9yZWxlYXNlX3BtYyh2b2lkKQoreworCWlmIChhdG9taWNfZGVjX2FuZF9tdXRleF9sb2NrKCZhY3RpdmVfY291bnRlcnMsICZwbWNfZ3JhYl9tdXRleCkpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSA9PSAwKQorCQkJb25fZWFjaF9jcHUoc3RhcnRfbm1pX3dhdGNoZG9nLCBOVUxMLCAxKTsKKwkJbXV0ZXhfdW5sb2NrKCZwbWNfZ3JhYl9tdXRleCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBod19wZXJmX2NvdW50ZXJfZGVzdHJveShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQoreworCXBlcmZfY291bnRlcl9yZWxlYXNlX3BtYygpOworfQorCitzdGF0aWMgaW50IF9faHdfcGVyZl9jb3VudGVyX2luaXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3sKKwlzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmF0dHIgPSAmY291bnRlci0+YXR0cjsKKwlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7CisJY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICpwbWFwOworCXU2NCBlbmM7CisKKwlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoYXR0ci0+dHlwZSAhPSBQRVJGX1RZUEVfSEFSRFdBUkUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChhdHRyLT5jb25maWcgPj0gc3BhcmNfcG11LT5tYXhfZXZlbnRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBlcmZfY291bnRlcl9ncmFiX3BtYygpOworCWNvdW50ZXItPmRlc3Ryb3kgPSBod19wZXJmX2NvdW50ZXJfZGVzdHJveTsKKworCS8qIFdlIHNhdmUgdGhlIGVuYWJsZSBiaXRzIGluIHRoZSBjb25maWdfYmFzZS4gIFNvIHRvCisJICogdHVybiBvZmYgc2FtcGxpbmcganVzdCB3cml0ZSAnY29uZmlnJywgYW5kIHRvIGVuYWJsZQorCSAqIHRoaW5ncyB3cml0ZSAnY29uZmlnIHwgY29uZmlnX2Jhc2UnLgorCSAqLworCWh3Yy0+Y29uZmlnX2Jhc2UgPSBzcGFyY19wbXUtPmlycV9iaXQ7CisJaWYgKCFhdHRyLT5leGNsdWRlX3VzZXIpCisJCWh3Yy0+Y29uZmlnX2Jhc2UgfD0gUENSX1VUUkFDRTsKKwlpZiAoIWF0dHItPmV4Y2x1ZGVfa2VybmVsKQorCQlod2MtPmNvbmZpZ19iYXNlIHw9IFBDUl9TVFJBQ0U7CisJaWYgKCFhdHRyLT5leGNsdWRlX2h2KQorCQlod2MtPmNvbmZpZ19iYXNlIHw9IHNwYXJjX3BtdS0+aHZfYml0OworCisJaWYgKCFod2MtPnNhbXBsZV9wZXJpb2QpIHsKKwkJaHdjLT5zYW1wbGVfcGVyaW9kID0gTUFYX1BFUklPRDsKKwkJaHdjLT5sYXN0X3BlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKKwkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBod2MtPnNhbXBsZV9wZXJpb2QpOworCX0KKworCXBtYXAgPSBzcGFyY19wbXUtPmV2ZW50X21hcChhdHRyLT5jb25maWcpOworCisJZW5jID0gcG1hcC0+ZW5jb2Rpbmc7CisJaWYgKHBtYXAtPnBpY19tYXNrICYgUElDX1VQUEVSKSB7CisJCWh3Yy0+aWR4ID0gUElDX1VQUEVSX0lOREVYOworCQllbmMgPDw9IHNwYXJjX3BtdS0+dXBwZXJfc2hpZnQ7CisJfSBlbHNlIHsKKwkJaHdjLT5pZHggPSBQSUNfTE9XRVJfSU5ERVg7CisJCWVuYyA8PD0gc3BhcmNfcG11LT5sb3dlcl9zaGlmdDsKKwl9CisKKwlod2MtPmNvbmZpZyB8PSBlbmM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11IHBtdSA9IHsKKwkuZW5hYmxlCQk9IHNwYXJjX3BtdV9lbmFibGUsCisJLmRpc2FibGUJPSBzcGFyY19wbXVfZGlzYWJsZSwKKwkucmVhZAkJPSBzcGFyY19wbXVfcmVhZCwKKwkudW50aHJvdHRsZQk9IHNwYXJjX3BtdV91bnRocm90dGxlLAorfTsKKworY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9jb3VudGVyX2luaXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3sKKwlpbnQgZXJyID0gX19od19wZXJmX2NvdW50ZXJfaW5pdChjb3VudGVyKTsKKworCWlmIChlcnIpCisJCXJldHVybiBFUlJfUFRSKGVycik7CisJcmV0dXJuICZwbXU7Cit9CisKK3ZvaWQgcGVyZl9jb3VudGVyX3ByaW50X2RlYnVnKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1NjQgcGNyLCBwaWM7CisJaW50IGNwdTsKKworCWlmICghc3BhcmNfcG11KQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlwY3IgPSBwY3Jfb3BzLT5yZWFkKCk7CisJcmVhZF9waWMocGljKTsKKworCXByX2luZm8oIlxuIik7CisJcHJfaW5mbygiQ1BVIyVkOiBQQ1JbJTAxNmxseF0gUElDWyUwMTZsbHhdXG4iLAorCQljcHUsIHBjciwgcGljKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGludCBfX2twcm9iZXMgcGVyZl9jb3VudGVyX25taV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKl9fYXJncykKK3sKKwlzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MgPSBfX2FyZ3M7CisJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWludCBpZHg7CisKKwlpZiAoIWF0b21pY19yZWFkKCZhY3RpdmVfY291bnRlcnMpKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRElFX05NSToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJfQorCisJcmVncyA9IGFyZ3MtPnJlZ3M7CisKKwlkYXRhLnJlZ3MgPSByZWdzOworCWRhdGEuYWRkciA9IDA7CisKKwljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9IV0NPVU5URVJTOyBpZHgrKykgeworCQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gY3B1Yy0+Y291bnRlcnNbaWR4XTsKKwkJc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjOworCQl1NjQgdmFsOworCisJCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCQljb250aW51ZTsKKwkJaHdjID0gJmNvdW50ZXItPmh3OworCQl2YWwgPSBzcGFyY19wZXJmX2NvdW50ZXJfdXBkYXRlKGNvdW50ZXIsIGh3YywgaWR4KTsKKwkJaWYgKHZhbCAmICgxVUxMIDw8IDMxKSkKKwkJCWNvbnRpbnVlOworCisJCWRhdGEucGVyaW9kID0gY291bnRlci0+aHcubGFzdF9wZXJpb2Q7CisJCWlmICghc3BhcmNfcGVyZl9jb3VudGVyX3NldF9wZXJpb2QoY291bnRlciwgaHdjLCBpZHgpKQorCQkJY29udGludWU7CisKKwkJaWYgKHBlcmZfY291bnRlcl9vdmVyZmxvdyhjb3VudGVyLCAxLCAmZGF0YSkpCisJCQlzcGFyY19wbXVfZGlzYWJsZV9jb3VudGVyKGh3YywgaWR4KTsKKwl9CisKKwlyZXR1cm4gTk9USUZZX1NUT1A7Cit9CisKK3N0YXRpYyBfX3JlYWRfbW9zdGx5IHN0cnVjdCBub3RpZmllcl9ibG9jayBwZXJmX2NvdW50ZXJfbm1pX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsCQk9IHBlcmZfY291bnRlcl9ubWlfaGFuZGxlciwKK307CisKK3N0YXRpYyBib29sIF9faW5pdCBzdXBwb3J0ZWRfcG11KHZvaWQpCit7CisJaWYgKCFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJ1bHRyYTNpIikpIHsKKwkJc3BhcmNfcG11ID0gJnVsdHJhM2lfcG11OworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKCFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJuaWFnYXJhMiIpKSB7CisJCXNwYXJjX3BtdSA9ICZuaWFnYXJhMl9wbXU7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgX19pbml0IGluaXRfaHdfcGVyZl9jb3VudGVycyh2b2lkKQoreworCXByX2luZm8oIlBlcmZvcm1hbmNlIGNvdW50ZXJzOiAiKTsKKworCWlmICghc3VwcG9ydGVkX3BtdSgpKSB7CisJCXByX2NvbnQoIk5vIHN1cHBvcnQgZm9yIFBNVSB0eXBlICclcydcbiIsIHNwYXJjX3BtdV90eXBlKTsKKwkJcmV0dXJuOworCX0KKworCXByX2NvbnQoIlN1cHBvcnRlZCBQTVUgdHlwZSBpcyAnJXMnXG4iLCBzcGFyY19wbXVfdHlwZSk7CisKKwkvKiBBbGwgc3BhcmM2NCBQTVVzIGN1cnJlbnRseSBoYXZlIDIgY291bnRlcnMuICBCdXQgdGhpcyBzaW1wbGUKKwkgKiBkcml2ZXIgb25seSBzdXBwb3J0cyBvbmUgYWN0aXZlIGNvdW50ZXIgYXQgYSB0aW1lLgorCSAqLworCXBlcmZfbWF4X2NvdW50ZXJzID0gMTsKKworCXJlZ2lzdGVyX2RpZV9ub3RpZmllcigmcGVyZl9jb3VudGVyX25taV9ub3RpZmllcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggNDA0MWY5NC4uMThkNjc4NSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMjUxLDcgKzI1MSw3IEBACiAJfQogfQogCi12b2lkIF9fdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSh2b2lkKQordm9pZCBhcmNoX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2Uodm9pZCkKIHsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRwID0gY3VycmVudF90aHJlYWRfaW5mbygpOwogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZ2V0X2lycV9yZWdzKCk7CkBAIC0zMDQsNyArMzA0LDcgQEAKIAogc3RhdGljIHZvaWQgc3lzcnFfaGFuZGxlX2dsb2JyZWcoaW50IGtleSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlfX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UoKTsKKwlhcmNoX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3BhcmNfZ2xvYmFscmVnX29wID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jCmluZGV4IGZlNDNlODAuLjBhMzdlOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmMKQEAgLTI0LDYgKzI0LDggQEAKIAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL2xlb24uaD4KKyNpbmNsdWRlIDxhc20vbGVvbl9hbWJhLmg+CiAKICNpbmNsdWRlICJwcm9tLmgiCiAKQEAgLTEzMSw2ICsxMzMsMzUgQEAKIAkJcmVncy0+d2hpY2hfaW8sIHJlZ3MtPnBoeXNfYWRkcik7CiB9CiAKKy8qICJuYW1lOnZlbmRvcjpkZXZpY2VAaXJxLGFkZHJsbyIgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBhbWJhcHBfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY2hhciAqdG1wX2J1ZikKK3sKKwlzdHJ1Y3QgYW1iYV9wcm9tX3JlZ2lzdGVycyAqcmVnczsgdW5zaWduZWQgaW50ICppbnRyOworCXVuc2lnbmVkIGludCAqZGV2aWNlLCAqdmVuZG9yOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisJcmVncyA9IHByb3AtPnZhbHVlOworCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAiaW50ZXJydXB0cyIsIE5VTEwpOworCWlmICghcHJvcCkKKwkJcmV0dXJuOworCWludHIgPSBwcm9wLT52YWx1ZTsKKwlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgInZlbmRvciIsIE5VTEwpOworCWlmICghcHJvcCkKKwkJcmV0dXJuOworCXZlbmRvciA9IHByb3AtPnZhbHVlOworCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAiZGV2aWNlIiwgTlVMTCk7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisJZGV2aWNlID0gcHJvcC0+dmFsdWU7CisKKwlzcHJpbnRmKHRtcF9idWYsICIlczolZDolZEAleCwleCIsCisJCWRwLT5uYW1lLCAqdmVuZG9yLCAqZGV2aWNlLAorCQkqaW50ciwgcmVncy0+cGh5c19hZGRyKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IF9fYnVpbGRfcGF0aF9jb21wb25lbnQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgY2hhciAqdG1wX2J1ZikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCA9IGRwLT5wYXJlbnQ7CkBAIC0xNDMsNiArMTc0LDggQEAKIAkJCXJldHVybiBzYnVzX3BhdGhfY29tcG9uZW50KGRwLCB0bXBfYnVmKTsKIAkJaWYgKCFzdHJjbXAocGFyZW50LT50eXBlLCAiZWJ1cyIpKQogCQkJcmV0dXJuIGVidXNfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOworCQlpZiAoIXN0cmNtcChwYXJlbnQtPnR5cGUsICJhbWJhcHAiKSkKKwkJCXJldHVybiBhbWJhcHBfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOwogCiAJCS8qICJpc2EiIGlzIGhhbmRsZWQgd2l0aCBwbGF0Zm9ybSBuYW1pbmcgKi8KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYwppbmRleCAwZmI1Nzg5Li4xMzg5MTBjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKQEAgLTIyLDkgKzIyLDEyIEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9sZW9uLmg+CiAKICNpbmNsdWRlICJwcm9tLmgiCiAKK3ZvaWQgKCpwcm9tX2J1aWxkX21vcmUpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKipuZXh0cCk7CisKIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY29uc29sZV9kZXZpY2U7CiBFWFBPUlRfU1lNQk9MKG9mX2NvbnNvbGVfZGV2aWNlKTsKIApAQCAtMTYxLDcgKzE2NCw3IEBACiAJCQluYW1lID0gcHJvbV9uZXh0cHJvcChub2RlLCBwcmV2LCBwLT5uYW1lKTsKIAkJfQogCi0JCWlmIChzdHJsZW4obmFtZSkgPT0gMCkgeworCQlpZiAoIW5hbWUgfHwgc3RybGVuKG5hbWUpID09IDApIHsKIAkJCXRtcCA9IHA7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtMjQyLDcgKzI0NSw3IEBACiAJcmV0dXJuIGRwOwogfQogCi1zdGF0aWMgY2hhciAqIF9faW5pdCBidWlsZF9mdWxsX25hbWUoc3RydWN0IGRldmljZV9ub2RlICpkcCkKK2NoYXIgKiBfX2luaXQgYnVpbGRfZnVsbF9uYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCiB7CiAJaW50IGxlbiwgb3VybGVuLCBwbGVuOwogCWNoYXIgKm47CkBAIC0yODksNiArMjkyLDkgQEAKIAogCQlkcC0+Y2hpbGQgPSBwcm9tX2J1aWxkX3RyZWUoZHAsIHByb21fZ2V0Y2hpbGQobm9kZSksIG5leHRwKTsKIAorCQlpZiAocHJvbV9idWlsZF9tb3JlKQorCQkJcHJvbV9idWlsZF9tb3JlKGRwLCBuZXh0cCk7CisKIAkJbm9kZSA9IHByb21fZ2V0c2libGluZyhub2RlKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jCmluZGV4IDk5OGNhZGIuLjE2YTQ3ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYwpAQCAtMjM1LDYgKzIzNSw4IEBACiAJCXNwYXJjX2NwdV9tb2RlbCA9IHN1bjRlOwogCWlmICghc3RyY21wKCZjcHV0eXB2YWwsInN1bjR1IikpCiAJCXNwYXJjX2NwdV9tb2RlbCA9IHN1bjR1OworCWlmICghc3RybmNtcCgmY3B1dHlwdmFsLCAibGVvbiIgLCA0KSkKKwkJc3BhcmNfY3B1X21vZGVsID0gc3BhcmNfbGVvbjsKIAogCXByaW50aygiQVJDSDogIik7CiAJc3dpdGNoKHNwYXJjX2NwdV9tb2RlbCkgewpAQCAtMjU2LDYgKzI1OCw5IEBACiAJY2FzZSBzdW40dToKIAkJcHJpbnRrKCJTVU40VVxuIik7CiAJCWJyZWFrOworCWNhc2Ugc3BhcmNfbGVvbjoKKwkJcHJpbnRrKCJMRU9OXG4iKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKCJVTktOT1dOIVxuIik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCAxODFkMDY5Li43Y2UxYTEwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zaWduYWxfMzIuYwpAQCAtNTkwLDYgKzU5MCw4IEBACiAJaWYgKHRocmVhZF9pbmZvX2ZsYWdzICYgX1RJRl9OT1RJRllfUkVTVU1FKSB7CiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9OT1RJRllfUkVTVU1FKTsKIAkJdHJhY2Vob29rX25vdGlmeV9yZXN1bWUocmVncyk7CisJCWlmIChjdXJyZW50LT5yZXBsYWNlbWVudF9zZXNzaW9uX2tleXJpbmcpCisJCQlrZXlfcmVwbGFjZV9zZXNzaW9uX2tleXJpbmcoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NpZ25hbF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsXzY0LmMKaW5kZXggZWM4MmQ3Ni4uNjQ3YWZiZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2lnbmFsXzY0LmMKQEAgLTYxMyw1ICs2MTMsOCBAQAogCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIF9USUZfTk9USUZZX1JFU1VNRSkgewogCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfTk9USUZZX1JFU1VNRSk7CiAJCXRyYWNlaG9va19ub3RpZnlfcmVzdW1lKHJlZ3MpOworCQlpZiAoY3VycmVudC0+cmVwbGFjZW1lbnRfc2Vzc2lvbl9rZXlyaW5nKQorCQkJa2V5X3JlcGxhY2Vfc2Vzc2lvbl9rZXlyaW5nKCk7CiAJfQogfQorCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCmluZGV4IDM2OTE5MDcuLmZmNjgzNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCkBAIC0xMzg5LDggKzEzODksOCBAQAogICogUkVUVVJOUzoKICAqIFBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KICAqLwotc3RhdGljIHZvaWQgKiBfX2luaXQgcGNwdV9hbGxvY19ib290bWVtKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkJdW5zaWduZWQgbG9uZyBhbGlnbikKK3N0YXRpYyB2b2lkICogX19pbml0IHBjcHVfYWxsb2NfYm9vdG1lbSh1bnNpZ25lZCBpbnQgY3B1LCBzaXplX3Qgc2l6ZSwKKwkJCQkJc2l6ZV90IGFsaWduKQogewogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZ29hbCA9IF9fcGEoTUFYX0RNQV9BRERSRVNTKTsKICNpZmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwpAQCAtMTQxNSwxMjcgKzE0MTUsMzUgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgc2l6ZV90IHBjcHVyX3NpemUgX19pbml0ZGF0YTsKLXN0YXRpYyB2b2lkICoqcGNwdXJfcHRycyBfX2luaXRkYXRhOwotCi1zdGF0aWMgc3RydWN0IHBhZ2UgKiBfX2luaXQgcGNwdXJfZ2V0X3BhZ2UodW5zaWduZWQgaW50IGNwdSwgaW50IHBhZ2VubykKK3N0YXRpYyB2b2lkIF9faW5pdCBwY3B1X2ZyZWVfYm9vdG1lbSh2b2lkICpwdHIsIHNpemVfdCBzaXplKQogewotCXNpemVfdCBvZmYgPSAoc2l6ZV90KXBhZ2VubyA8PCBQQUdFX1NISUZUOwotCi0JaWYgKG9mZiA+PSBwY3B1cl9zaXplKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiB2aXJ0X3RvX3BhZ2UocGNwdXJfcHRyc1tjcHVdICsgb2ZmKTsKKwlmcmVlX2Jvb3RtZW0oX19wYShwdHIpLCBzaXplKTsKIH0KIAotI2RlZmluZSBQQ1BVX0NIVU5LX1NJWkUgKDRVTCAqIDEwMjRVTCAqIDEwMjRVTCkKLQotc3RhdGljIHZvaWQgX19pbml0IHBjcHVfbWFwX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJCSAgc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgaW50IHBjcHVfY3B1X2Rpc3RhbmNlKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pCiB7Ci0JdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKLQl1bnNpZ25lZCBsb25nIHB0ZV9iYXNlOwotCi0JQlVHX09OKChwZm48PFBBR0VfU0hJRlQpJihQQ1BVX0NIVU5LX1NJWkUgLSAxVUwpKTsKLQotCXB0ZV9iYXNlID0gKF9QQUdFX1ZBTElEIHwgX1BBR0VfU1o0TUJfNFUgfAotCQkgICAgX1BBR0VfQ1BfNFUgfCBfUEFHRV9DVl80VSB8Ci0JCSAgICBfUEFHRV9QXzRVIHwgX1BBR0VfV180VSk7Ci0JaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpCi0JCXB0ZV9iYXNlID0gKF9QQUdFX1ZBTElEIHwgX1BBR0VfU1o0TUJfNFYgfAotCQkJICAgIF9QQUdFX0NQXzRWIHwgX1BBR0VfQ1ZfNFYgfAotCQkJICAgIF9QQUdFX1BfNFYgfCBfUEFHRV9XXzRWKTsKLQotCXdoaWxlIChzdGFydCA8IGVuZCkgewotCQlwZ2RfdCAqcGdkID0gcGdkX29mZnNldF9rKHN0YXJ0KTsKLQkJdW5zaWduZWQgbG9uZyB0aGlzX2VuZDsKLQkJcHVkX3QgKnB1ZDsKLQkJcG1kX3QgKnBtZDsKLQkJcHRlX3QgKnB0ZTsKLQotCQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgc3RhcnQpOwotCQlpZiAocHVkX25vbmUoKnB1ZCkpIHsKLQkJCXBtZF90ICpuZXc7Ci0KLQkJCW5ldyA9IF9fYWxsb2NfYm9vdG1lbShQQUdFX1NJWkUsIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKLQkJCXB1ZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcHVkLCBuZXcpOwotCQl9Ci0KLQkJcG1kID0gcG1kX29mZnNldChwdWQsIHN0YXJ0KTsKLQkJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSkgewotCQkJcHRlX3QgKm5ldzsKLQotCQkJbmV3ID0gX19hbGxvY19ib290bWVtKFBBR0VfU0laRSwgUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwotCQkJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBuZXcpOwotCQl9Ci0KLQkJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBzdGFydCk7Ci0JCXRoaXNfZW5kID0gKHN0YXJ0ICsgUE1EX1NJWkUpICYgUE1EX01BU0s7Ci0JCWlmICh0aGlzX2VuZCA+IGVuZCkKLQkJCXRoaXNfZW5kID0gZW5kOwotCi0JCXdoaWxlIChzdGFydCA8IHRoaXNfZW5kKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHBhZGRyID0gcGZuIDw8IFBBR0VfU0hJRlQ7Ci0KLQkJCXB0ZV92YWwoKnB0ZSkgPSAocGFkZHIgfCBwdGVfYmFzZSk7Ci0KLQkJCXN0YXJ0ICs9IFBBR0VfU0laRTsKLQkJCXB0ZSsrOwotCQkJcGZuKys7Ci0JCX0KLQl9CisJaWYgKGNwdV90b19ub2RlKGZyb20pID09IGNwdV90b19ub2RlKHRvKSkKKwkJcmV0dXJuIExPQ0FMX0RJU1RBTkNFOworCWVsc2UKKwkJcmV0dXJuIFJFTU9URV9ESVNUQU5DRTsKIH0KIAogdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKQogewotCXNpemVfdCBkeW5fc2l6ZSwgc3RhdGljX3NpemUgPSBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0OwotCXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0IHZtOwotCXVuc2lnbmVkIGxvbmcgZGVsdGEsIGNwdTsKLQlzaXplX3QgcGNwdV91bml0X3NpemU7Ci0Jc2l6ZV90IHB0cnNfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGRlbHRhOworCXVuc2lnbmVkIGludCBjcHU7CisJaW50IHJjOwogCi0JcGNwdXJfc2l6ZSA9IFBGTl9BTElHTihzdGF0aWNfc2l6ZSArIFBFUkNQVV9NT0RVTEVfUkVTRVJWRSArCi0JCQkgICAgICAgUEVSQ1BVX0RZTkFNSUNfUkVTRVJWRSk7Ci0JZHluX3NpemUgPSBwY3B1cl9zaXplIC0gc3RhdGljX3NpemUgLSBQRVJDUFVfTU9EVUxFX1JFU0VSVkU7Ci0KLQotCXB0cnNfc2l6ZSA9IFBGTl9BTElHTihucl9jcHVfaWRzICogc2l6ZW9mKHBjcHVyX3B0cnNbMF0pKTsKLQlwY3B1cl9wdHJzID0gYWxsb2NfYm9vdG1lbShwdHJzX3NpemUpOwotCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlwY3B1cl9wdHJzW2NwdV0gPSBwY3B1X2FsbG9jX2Jvb3RtZW0oY3B1LCBQQ1BVX0NIVU5LX1NJWkUsCi0JCQkJCQkgICAgIFBDUFVfQ0hVTktfU0laRSk7Ci0KLQkJZnJlZV9ib290bWVtKF9fcGEocGNwdXJfcHRyc1tjcHVdICsgcGNwdXJfc2l6ZSksCi0JCQkgICAgIFBDUFVfQ0hVTktfU0laRSAtIHBjcHVyX3NpemUpOwotCi0JCW1lbWNweShwY3B1cl9wdHJzW2NwdV0sIF9fcGVyX2NwdV9sb2FkLCBzdGF0aWNfc2l6ZSk7Ci0JfQotCi0JLyogYWxsb2NhdGUgYWRkcmVzcyBhbmQgbWFwICovCi0Jdm0uZmxhZ3MgPSBWTV9BTExPQzsKLQl2bS5zaXplID0gbnJfY3B1X2lkcyAqIFBDUFVfQ0hVTktfU0laRTsKLQl2bV9hcmVhX3JlZ2lzdGVyX2Vhcmx5KCZ2bSwgUENQVV9DSFVOS19TSVpFKTsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJdW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKSB2bS5hZGRyOwotCQl1bnNpZ25lZCBsb25nIGVuZDsKLQotCQlzdGFydCArPSBjcHUgKiBQQ1BVX0NIVU5LX1NJWkU7Ci0JCWVuZCA9IHN0YXJ0ICsgUENQVV9DSFVOS19TSVpFOwotCQlwY3B1X21hcF9yYW5nZShzdGFydCwgZW5kLCB2aXJ0X3RvX3BhZ2UocGNwdXJfcHRyc1tjcHVdKSk7Ci0JfQotCi0JcGNwdV91bml0X3NpemUgPSBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKHBjcHVyX2dldF9wYWdlLCBzdGF0aWNfc2l6ZSwKLQkJCQkJCVBFUkNQVV9NT0RVTEVfUkVTRVJWRSwgZHluX3NpemUsCi0JCQkJCQlQQ1BVX0NIVU5LX1NJWkUsIHZtLmFkZHIsIE5VTEwpOwotCi0JZnJlZV9ib290bWVtKF9fcGEocGNwdXJfcHRycyksIHB0cnNfc2l6ZSk7CisJcmMgPSBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwKKwkJCQkgICAgUEVSQ1BVX0RZTkFNSUNfUkVTRVJWRSwgNCA8PCAyMCwKKwkJCQkgICAgcGNwdV9jcHVfZGlzdGFuY2UsIHBjcHVfYWxsb2NfYm9vdG1lbSwKKwkJCQkgICAgcGNwdV9mcmVlX2Jvb3RtZW0pOworCWlmIChyYykKKwkJcGFuaWMoImZhaWxlZCB0byBpbml0aWFsaXplIGZpcnN0IGNodW5rICglZCkiLCByYyk7CiAKIAlkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0OwotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJX19wZXJfY3B1X29mZnNldChjcHUpID0gZGVsdGEgKyBjcHUgKiBwY3B1X3VuaXRfc2l6ZTsKLQl9CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJX19wZXJfY3B1X29mZnNldChjcHUpID0gZGVsdGEgKyBwY3B1X3VuaXRfb2Zmc2V0c1tjcHVdOwogCiAJLyogU2V0dXAgJWc1IGZvciB0aGUgYm9vdCBjcHUuICAqLwogCV9fbG9jYWxfcGVyX2NwdV9vZmZzZXQgPSBfX3Blcl9jcHVfb2Zmc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXMzMi5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzMzIuUwppbmRleCBhZWQ5NDg2Li5lNzA2MTEzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXMzMi5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5czMyLlMKQEAgLTEyMSw3ICsxMjEsNyBAQAogU0lHTjEoc3lzMzJfdW1hc2ssIHN5c191bWFzaywgJW8wKQogU0lHTjMoc3lzMzJfdGdraWxsLCBzeXNfdGdraWxsLCAlbzAsICVvMSwgJW8yKQogU0lHTjEoc3lzMzJfc2VuZHRvLCBzeXNfc2VuZHRvLCAlbzApCi1TSUdOMShzeXMzMl9yZWN2ZnJvbSwgc3lzX3JlY3Zmcm9tLCAlbzApCitTSUdOMShzeXMzMl9yZWN2ZnJvbSwgY29tcGF0X3N5c19yZWN2ZnJvbSwgJW8wKQogU0lHTjMoc3lzMzJfc29ja2V0LCBzeXNfc29ja2V0LCAlbzAsICVvMSwgJW8yKQogU0lHTjIoc3lzMzJfY29ubmVjdCwgc3lzX2Nvbm5lY3QsICVvMCwgJW8yKQogU0lHTjIoc3lzMzJfYmluZCwgc3lzX2JpbmQsICVvMCwgJW8yKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzZnMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c2ZzLmMKaW5kZXggZDI4ZjQ5Ni4uY2EzOWM2MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzZnMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNmcy5jCkBAIC0yLDYgKzIsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNyBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CiAgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc18zMi5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc18zMi5TCmluZGV4IDY5MDkwMTYuLjA0MTgxNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzMyLlMKQEAgLTgyLDUgKzgyLDUgQEAKIC8qMzEwKi8JLmxvbmcgc3lzX3V0aW1lbnNhdCwgc3lzX3NpZ25hbGZkLCBzeXNfdGltZXJmZF9jcmVhdGUsIHN5c19ldmVudGZkLCBzeXNfZmFsbG9jYXRlCiAvKjMxNSovCS5sb25nIHN5c190aW1lcmZkX3NldHRpbWUsIHN5c190aW1lcmZkX2dldHRpbWUsIHN5c19zaWduYWxmZDQsIHN5c19ldmVudGZkMiwgc3lzX2Vwb2xsX2NyZWF0ZTEKIC8qMzIwKi8JLmxvbmcgc3lzX2R1cDMsIHN5c19waXBlMiwgc3lzX2lub3RpZnlfaW5pdDEsIHN5c19hY2NlcHQ0LCBzeXNfcHJlYWR2Ci0vKjMyNSovCS5sb25nIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8KKy8qMzI1Ki8JLmxvbmcgc3lzX3B3cml0ZXYsIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbywgc3lzX3BlcmZfY291bnRlcl9vcGVuCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUwppbmRleCAyZWU3MjUwLi45MWIwNmI3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCkBAIC04Myw3ICs4Myw3IEBACiAvKjMxMCovCS53b3JkIGNvbXBhdF9zeXNfdXRpbWVuc2F0LCBjb21wYXRfc3lzX3NpZ25hbGZkLCBzeXNfdGltZXJmZF9jcmVhdGUsIHN5c19ldmVudGZkLCBjb21wYXRfc3lzX2ZhbGxvY2F0ZQogCS53b3JkIGNvbXBhdF9zeXNfdGltZXJmZF9zZXR0aW1lLCBjb21wYXRfc3lzX3RpbWVyZmRfZ2V0dGltZSwgY29tcGF0X3N5c19zaWduYWxmZDQsIHN5c19ldmVudGZkMiwgc3lzX2Vwb2xsX2NyZWF0ZTEKIC8qMzIwKi8JLndvcmQgc3lzX2R1cDMsIHN5c19waXBlMiwgc3lzX2lub3RpZnlfaW5pdDEsIHN5c19hY2NlcHQ0LCBjb21wYXRfc3lzX3ByZWFkdgotCS53b3JkIGNvbXBhdF9zeXNfcHdyaXRldiwgY29tcGF0X3N5c19ydF90Z3NpZ3F1ZXVlaW5mbworCS53b3JkIGNvbXBhdF9zeXNfcHdyaXRldiwgY29tcGF0X3N5c19ydF90Z3NpZ3F1ZXVlaW5mbywgc3lzX3BlcmZfY291bnRlcl9vcGVuCiAKICNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCiAKQEAgLTE1OCw0ICsxNTgsNCBAQAogLyozMTAqLwkud29yZCBzeXNfdXRpbWVuc2F0LCBzeXNfc2lnbmFsZmQsIHN5c190aW1lcmZkX2NyZWF0ZSwgc3lzX2V2ZW50ZmQsIHN5c19mYWxsb2NhdGUKIAkud29yZCBzeXNfdGltZXJmZF9zZXR0aW1lLCBzeXNfdGltZXJmZF9nZXR0aW1lLCBzeXNfc2lnbmFsZmQ0LCBzeXNfZXZlbnRmZDIsIHN5c19lcG9sbF9jcmVhdGUxCiAvKjMyMCovCS53b3JkIHN5c19kdXAzLCBzeXNfcGlwZTIsIHN5c19pbm90aWZ5X2luaXQxLCBzeXNfYWNjZXB0NCwgc3lzX3ByZWFkdgotCS53b3JkIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8KKwkud29yZCBzeXNfcHdyaXRldiwgc3lzX3J0X3Rnc2lncXVldWVpbmZvLCBzeXNfcGVyZl9jb3VudGVyX29wZW4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGZjYmJkMDAuLjg2NjM5MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTcxLDEyICsxNzEsOCBAQAogCX0KIAlfZW5kID0gLiA7CiAKLQkvRElTQ0FSRC8gOiB7Ci0JCUVYSVRfVEVYVAotCQlFWElUX0RBVEEKLQkJKiguZXhpdGNhbGwuZXhpdCkKLQl9Ci0KIAlTVEFCU19ERUJVRwogCURXQVJGX0RFQlVHCisKKwlESVNDQVJEUwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9NYWtlZmlsZSBiL2FyY2gvc3BhcmMvbW0vTWFrZWZpbGUKaW5kZXggNjgxYWJlMC4uNzk4MzZhNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjL21tL01ha2VmaWxlCkBAIC0xMSw2ICsxMSw3IEBACiBvYmoteSAgICAgICAgICAgICAgICAgICArPSBnZW5lcmljXyQoQklUUykubwogb2JqLSQoQ09ORklHX1NQQVJDMzIpICAgKz0gZXh0YWJsZS5vIGJ0Zml4dXAubyBzcm1tdS5vIGlvbW11Lm8gaW8tdW5pdC5vCiBvYmotJChDT05GSUdfU1BBUkMzMikgICArPSBoeXBlcnNwYXJjLm8gdmlraW5nLm8gdHN1bmFtaS5vIHN3aWZ0Lm8KK29iai0kKENPTkZJR19TUEFSQ19MRU9OKSs9IGxlb25fbW0ubwogCiAjIE9ubHkgdXNlZCBieSBzcGFyYzY0CiBvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKSArPSBodWdldGxicGFnZS5vCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXRfMzIuYyBiL2FyY2gvc3BhcmMvbW0vaW5pdF8zMi5jCmluZGV4IDI2YmIzOTEuLjU0MTE0YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdF8zMi5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4JLyogYnVnIGluIGFzbS1nZW5lcmljL3RsYi5oOiBjaGVja19wZ3RfY2FjaGUgKi8KICNpbmNsdWRlIDxhc20vdGxiLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vbGVvbi5oPgogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOwogCkBAIC0zMjYsNiArMzI3LDkgQEAKIAkJc3BhcmNfdW5tYXBwZWRfYmFzZSA9IDB4ZTAwMDAwMDA7CiAJCUJURklYVVBTRVRfU0VUSEkoc3BhcmNfdW5tYXBwZWRfYmFzZSwgMHhlMDAwMDAwMCk7CiAJCWJyZWFrOworCWNhc2Ugc3BhcmNfbGVvbjoKKwkJbGVvbl9pbml0KCk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2Ugc3VuNG06CiAJY2FzZSBzdW40ZDoKIAkJc3JtbXVfcGFnaW5nX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vbGVvbl9tbS5jIGIvYXJjaC9zcGFyYy9tbS9sZW9uX21tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlMDEyOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmMvbW0vbGVvbl9tbS5jCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICogIGxpbnV4L2FyY2gvc3BhcmMvbW0vbGVvbl9tLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgS29ucmFkIEVpc2VsZSAoZWlzZWxla2RAd2ViLmRlLCBrb25yYWRAZ2Fpc2xlci5jb20pIEdhaXNsZXIgUmVzZWFyY2gKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEYW5pZWwgSGVsbHN0cm9tIChkYW5pZWxAZ2Fpc2xlci5jb20pIEFlcm9mbGV4IEdhaXNsZXIgQUIKKyAqIENvcHlyaWdodCAoQykgMjAwOSBLb25yYWQgRWlzZWxlIChrb25yYWRAZ2Fpc2xlci5jb20pIEFlcm9mbGV4IEdhaXNsZXIgQUIKKyAqCisgKiBkbyBzcm1tdSBwcm9iZSBpbiBzb2Z0d2FyZQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vYXNpLmg+CisjaW5jbHVkZSA8YXNtL2xlb24uaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworaW50IGxlb25fZmx1c2hfZHVyaW5nX3N3aXRjaCA9IDE7CitpbnQgc3JtbXVfc3dwcm9iZV90cmFjZTsKKwordW5zaWduZWQgbG9uZyBzcm1tdV9zd3Byb2JlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgKnBhZGRyKQoreworCisJdW5zaWduZWQgaW50IGN0eHRibDsKKwl1bnNpZ25lZCBpbnQgcGdkLCBwbWQsIHBlZDsKKwl1bnNpZ25lZCBpbnQgcHRyOworCXVuc2lnbmVkIGludCBsdmwsIHB0ZSwgcGFkZHJiYXNlOworCXVuc2lnbmVkIGludCBjdHg7CisJdW5zaWduZWQgaW50IHBhZGRyX2NhbGM7CisKKwlwYWRkcmJhc2UgPSAwOworCisJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6IHRyYWNlIG9uXG4iKTsKKworCWN0eHRibCA9IHNybW11X2dldF9jdGFibGVfcHRyKCk7CisJaWYgKCEoY3R4dGJsKSkgeworCQlpZiAoc3JtbXVfc3dwcm9iZV90cmFjZSkKKwkJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6IHNybW11X2dldF9jdGFibGVfcHRyIHJldHVybmVkIDA9PjBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFfcGZuX3ZhbGlkKFBGTihjdHh0YmwpKSkgeworCQlpZiAoc3JtbXVfc3dwcm9iZV90cmFjZSkKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAic3dwcm9iZTogIV9wZm5fdmFsaWQoJXgpPT4wXG4iLAorCQkJICAgICAgIFBGTihjdHh0YmwpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY3R4ID0gc3JtbXVfZ2V0X2NvbnRleHQoKTsKKwlpZiAoc3JtbXVfc3dwcm9iZV90cmFjZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAic3dwcm9iZTogIC0tLSBjdHggKCV4KSAtLS1cbiIsIGN0eCk7CisKKwlwZ2QgPSBMRU9OX0JZUEFTU19MT0FEX1BBKGN0eHRibCArIChjdHggKiA0KSk7CisKKwlpZiAoKChwZ2QgJiBTUk1NVV9FVF9NQVNLKSA9PSBTUk1NVV9FVF9QVEUpKSB7CisJCWlmIChzcm1tdV9zd3Byb2JlX3RyYWNlKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAic3dwcm9iZTogcGdkIGlzIGVudHJ5IGxldmVsIDNcbiIpOworCQlsdmwgPSAzOworCQlwdGUgPSBwZ2Q7CisJCXBhZGRyYmFzZSA9IHBnZCAmIF9TUk1NVV9QVEVfUE1BU0tfTEVPTjsKKwkJZ290byByZWFkeTsKKwl9CisJaWYgKCgocGdkICYgU1JNTVVfRVRfTUFTSykgIT0gU1JNTVVfRVRfUFREKSkgeworCQlpZiAoc3JtbXVfc3dwcm9iZV90cmFjZSkKKwkJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6IHBnZCBpcyBpbnZhbGlkID0+IDBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3JtbXVfc3dwcm9iZV90cmFjZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAic3dwcm9iZTogIC0tLSBwZ2QgKCV4KSAtLS1cbiIsIHBnZCk7CisKKwlwdHIgPSAocGdkICYgU1JNTVVfUFREX1BNQVNLKSA8PCA0OworCXB0ciArPSAoKCgodmFkZHIpID4+IExFT05fUEdEX1NIKSAmIExFT05fUEdEX00pICogNCk7CisJaWYgKCFfcGZuX3ZhbGlkKFBGTihwdHIpKSkKKwkJcmV0dXJuIDA7CisKKwlwbWQgPSBMRU9OX0JZUEFTU19MT0FEX1BBKHB0cik7CisJaWYgKCgocG1kICYgU1JNTVVfRVRfTUFTSykgPT0gU1JNTVVfRVRfUFRFKSkgeworCQlpZiAoc3JtbXVfc3dwcm9iZV90cmFjZSkKKwkJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6IHBtZCBpcyBlbnRyeSBsZXZlbCAyXG4iKTsKKwkJbHZsID0gMjsKKwkJcHRlID0gcG1kOworCQlwYWRkcmJhc2UgPSBwbWQgJiBfU1JNTVVfUFRFX1BNQVNLX0xFT047CisJCWdvdG8gcmVhZHk7CisJfQorCWlmICgoKHBtZCAmIFNSTU1VX0VUX01BU0spICE9IFNSTU1VX0VUX1BURCkpIHsKKwkJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCQlwcmludGsoS0VSTl9JTkZPICJzd3Byb2JlOiBwbWQgaXMgaW52YWxpZCA9PiAwXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6ICAtLS0gcG1kICgleCkgLS0tXG4iLCBwbWQpOworCisJcHRyID0gKHBtZCAmIFNSTU1VX1BURF9QTUFTSykgPDwgNDsKKwlwdHIgKz0gKCgodmFkZHIgPj4gTEVPTl9QTURfU0gpICYgTEVPTl9QTURfTSkgKiA0KTsKKwlpZiAoIV9wZm5fdmFsaWQoUEZOKHB0cikpKSB7CisJCWlmIChzcm1tdV9zd3Byb2JlX3RyYWNlKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAic3dwcm9iZTogIV9wZm5fdmFsaWQoJXgpPT4wXG4iLAorCQkJICAgICAgIFBGTihwdHIpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcGVkID0gTEVPTl9CWVBBU1NfTE9BRF9QQShwdHIpOworCisJaWYgKCgocGVkICYgU1JNTVVfRVRfTUFTSykgPT0gU1JNTVVfRVRfUFRFKSkgeworCQlpZiAoc3JtbXVfc3dwcm9iZV90cmFjZSkKKwkJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6IHBlZCBpcyBlbnRyeSBsZXZlbCAxXG4iKTsKKwkJbHZsID0gMTsKKwkJcHRlID0gcGVkOworCQlwYWRkcmJhc2UgPSBwZWQgJiBfU1JNTVVfUFRFX1BNQVNLX0xFT047CisJCWdvdG8gcmVhZHk7CisJfQorCWlmICgoKHBlZCAmIFNSTU1VX0VUX01BU0spICE9IFNSTU1VX0VUX1BURCkpIHsKKwkJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCQlwcmludGsoS0VSTl9JTkZPICJzd3Byb2JlOiBwZWQgaXMgaW52YWxpZCA9PiAwXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6ICAtLS0gcGVkICgleCkgLS0tXG4iLCBwZWQpOworCisJcHRyID0gKHBlZCAmIFNSTU1VX1BURF9QTUFTSykgPDwgNDsKKwlwdHIgKz0gKCgodmFkZHIgPj4gTEVPTl9QVEVfU0gpICYgTEVPTl9QVEVfTSkgKiA0KTsKKwlpZiAoIV9wZm5fdmFsaWQoUEZOKHB0cikpKQorCQlyZXR1cm4gMDsKKworCXB0ciA9IExFT05fQllQQVNTX0xPQURfUEEocHRyKTsKKwlpZiAoKChwdHIgJiBTUk1NVV9FVF9NQVNLKSA9PSBTUk1NVV9FVF9QVEUpKSB7CisJCWlmIChzcm1tdV9zd3Byb2JlX3RyYWNlKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAic3dwcm9iZTogcHRyIGlzIGVudHJ5IGxldmVsIDBcbiIpOworCQlsdmwgPSAwOworCQlwdGUgPSBwdHI7CisJCXBhZGRyYmFzZSA9IHB0ciAmIF9TUk1NVV9QVEVfUE1BU0tfTEVPTjsKKwkJZ290byByZWFkeTsKKwl9CisJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6IHB0ciBpcyBpbnZhbGlkID0+IDBcbiIpOworCXJldHVybiAwOworCityZWFkeToKKwlzd2l0Y2ggKGx2bCkgeworCWNhc2UgMDoKKwkJcGFkZHJfY2FsYyA9CisJCSAgICAodmFkZHIgJiB+KC0xIDw8IExFT05fUFRFX1NIKSkgfCAoKHB0ZSAmIH4weGZmKSA8PCA0KTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwYWRkcl9jYWxjID0KKwkJICAgICh2YWRkciAmIH4oLTEgPDwgTEVPTl9QTURfU0gpKSB8ICgocHRlICYgfjB4ZmYpIDw8IDQpOworCQlicmVhazsKKwljYXNlIDI6CisJCXBhZGRyX2NhbGMgPQorCQkgICAgKHZhZGRyICYgfigtMSA8PCBMRU9OX1BHRF9TSCkpIHwgKChwdGUgJiB+MHhmZikgPDwgNCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSAzOgorCQlwYWRkcl9jYWxjID0gdmFkZHI7CisJCWJyZWFrOworCX0KKwlpZiAoc3JtbXVfc3dwcm9iZV90cmFjZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAic3dwcm9iZTogcGFkZGUgJXhcbiIsIHBhZGRyX2NhbGMpOworCWlmIChwYWRkcikKKwkJKnBhZGRyID0gcGFkZHJfY2FsYzsKKwlyZXR1cm4gcGFkZHJiYXNlOworfQorCit2b2lkIGxlb25fZmx1c2hfaWNhY2hlX2FsbCh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCIgZmx1c2ggIik7CS8qaWZsdXNoKi8KK30KKwordm9pZCBsZW9uX2ZsdXNoX2RjYWNoZV9hbGwodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslJWcwXSAlMFxuXHQiIDogOgorCQkJICAgICAiaSIoQVNJX0xFT05fREZMVVNIKSA6ICJtZW1vcnkiKTsKK30KKwordm9pZCBsZW9uX2ZsdXNoX3BjYWNoZV9hbGwoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCisJCWxlb25fZmx1c2hfaWNhY2hlX2FsbCgpOworCWxlb25fZmx1c2hfZGNhY2hlX2FsbCgpOworfQorCit2b2lkIGxlb25fZmx1c2hfY2FjaGVfYWxsKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIiBmbHVzaCAiKTsJLyppZmx1c2gqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUlZzBdICUwXG5cdCIgOiA6CisJCQkgICAgICJpIihBU0lfTEVPTl9ERkxVU0gpIDogIm1lbW9yeSIpOworfQorCit2b2lkIGxlb25fZmx1c2hfdGxiX2FsbCh2b2lkKQoreworCWxlb25fZmx1c2hfY2FjaGVfYWxsKCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJTBdICUxXG5cdCIgOiA6ICJyIigweDQwMCksCisJCQkgICAgICJpIihBU0lfTEVPTl9NTVVGTFVTSCkgOiAibWVtb3J5Iik7Cit9CisKKy8qIGdldCBhbGwgY2FjaGUgcmVncyAqLwordm9pZCBsZW9uM19nZXRDYWNoZVJlZ3Moc3RydWN0IGxlb24zX2NhY2hlcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGNjciwgaWNjciwgZGNjcjsKKworCWlmICghcmVncykKKwkJcmV0dXJuOworCS8qIEdldCBDYWNoZSByZWdzIGZyb20gIkNhY2hlIEFTSSIgYWRkcmVzcyAweDAsIDB4OCBhbmQgMHhDICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJSVnMF0gJTMsICUwXG5cdCIKKwkJCSAgICAgIm1vdiAweDA4LCAlJWcxXG5cdCIKKwkJCSAgICAgImxkYSBbJSVnMV0gJTMsICUxXG5cdCIKKwkJCSAgICAgIm1vdiAweDBjLCAlJWcxXG5cdCIKKwkJCSAgICAgImxkYSBbJSVnMV0gJTMsICUyXG5cdCIKKwkJCSAgICAgOiAiPXIiKGNjciksICI9ciIoaWNjciksICI9ciIoZGNjcikKKwkJCSAgICAgICAvKiBvdXRwdXQgKi8KKwkJCSAgICAgOiAiaSIoQVNJX0xFT05fQ0FDSEVSRUdTKQkvKiBpbnB1dCAqLworCQkJICAgICA6ICJnMSIJLyogY2xvYmJlciBsaXN0ICovCisJICAgICk7CisJcmVncy0+Y2NyID0gY2NyOworCXJlZ3MtPmljY3IgPSBpY2NyOworCXJlZ3MtPmRjY3IgPSBkY2NyOworfQorCisvKiBEdWUgdG8gdmlydHVhbCBjYWNoZSB3ZSBuZWVkIHRvIGNoZWNrIGNhY2hlIGNvbmZpZ3VyYXRpb24gaWYKKyAqIGl0IGlzIHBvc3NpYmxlIHRvIHNraXAgZmx1c2hpbmcgaW4gc29tZSBjYXNlcy4KKyAqCisgKiBMZW9uMiBhbmQgTGVvbjMgZGlmZmVyIGluIHRoZWlyIHdheSBvZiB0ZWxsaW5nIGNhY2hlIGluZm9ybWF0aW9uCisgKgorICovCitpbnQgbGVvbl9mbHVzaF9uZWVkZWQodm9pZCkKK3sKKwlpbnQgZmx1c2hfbmVlZGVkID0gLTE7CisJdW5zaWduZWQgaW50IHNzaXplLCBzZXRzOworCWNoYXIgKnNldFN0cls0XSA9CisJICAgIHsgImRpcmVjdCBtYXBwZWQiLCAiMi13YXkgYXNzb2NpYXRpdmUiLCAiMy13YXkgYXNzb2NpYXRpdmUiLAorCQkiNC13YXkgYXNzb2NpYXRpdmUiCisJfTsKKwkvKiBsZW9uIDMgKi8KKwlzdHJ1Y3QgbGVvbjNfY2FjaGVyZWdzIGNyZWdzOworCWxlb24zX2dldENhY2hlUmVncygmY3JlZ3MpOworCXNldHMgPSAoY3JlZ3MuZGNjciAmIExFT04zX1hDQ1JfU0VUU19NQVNLKSA+PiAyNDsKKwkvKiAoc3NpemU9PnJlYWxzaXplKSAwPT4xaywgMT0+MmssIDI9PjRrLCAzPT44ayAuLi4gKi8KKwlzc2l6ZSA9IDEgPDwgKChjcmVncy5kY2NyICYgTEVPTjNfWENDUl9TU0laRV9NQVNLKSA+PiAyMCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJDQUNIRTogJXMgY2FjaGUsIHNldCBzaXplICVka1xuIiwKKwkgICAgICAgc2V0cyA+IDMgPyAidW5rbm93biIgOiBzZXRTdHJbc2V0c10sIHNzaXplKTsKKwlpZiAoKHNzaXplIDw9IChQQUdFX1NJWkUgLyAxMDI0KSkgJiYgKHNldHMgPT0gMCkpIHsKKwkJLyogU2V0IFNpemUgPD0gUGFnZSBzaXplICA9PT4KKwkJICAgZmx1c2ggb24gZXZlcnkgY29udGV4dCBzd2l0Y2ggbm90IG5lZWRlZC4gKi8KKwkJZmx1c2hfbmVlZGVkID0gMDsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ0FDSEU6IG5vdCBmbHVzaGluZyBvbiBldmVyeSBjb250ZXh0IHN3aXRjaFxuIik7CisJfQorCXJldHVybiBmbHVzaF9uZWVkZWQ7Cit9CisKK3ZvaWQgbGVvbl9zd2l0Y2hfbW0odm9pZCkKK3sKKwlmbHVzaF90bGJfbW0oKHZvaWQgKikwKTsKKwlpZiAobGVvbl9mbHVzaF9kdXJpbmdfc3dpdGNoKQorCQlsZW9uX2ZsdXNoX2NhY2hlX2FsbCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9sb2FkbW11LmMgYi9hcmNoL3NwYXJjL21tL2xvYWRtbXUuYwppbmRleCA2NTJiZTA1Li44MmVjOGY2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2xvYWRtbXUuYworKysgYi9hcmNoL3NwYXJjL21tL2xvYWRtbXUuYwpAQCAtMzMsNiArMzMsNyBAQAogCQlicmVhazsKIAljYXNlIHN1bjRtOgogCWNhc2Ugc3VuNGQ6CisJY2FzZSBzcGFyY19sZW9uOgogCQlsZF9tbXVfc3JtbXUoKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwppbmRleCBhZGU0ZWIzLi41MDliMWZmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL3NybW11LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8YXNtL3RzdW5hbWkuaD4KICNpbmNsdWRlIDxhc20vc3dpZnQuaD4KICNpbmNsdWRlIDxhc20vdHVyYm9zcGFyYy5oPgorI2luY2x1ZGUgPGFzbS9sZW9uLmg+CiAKICNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgogCkBAIC01NjksNiArNTcwLDkgQEAKIAkJc3JtbXVfY3R4ZF9zZXQoJnNybW11X2NvbnRleHRfdGFibGVbbW0tPmNvbnRleHRdLCBtbS0+cGdkKTsKIAl9CiAKKwlpZiAoc3BhcmNfY3B1X21vZGVsID09IHNwYXJjX2xlb24pCisJCWxlb25fc3dpdGNoX21tKCk7CisKIAlpZiAoaXNfaHlwZXJzcGFyYykKIAkJaHlwZXJfZmx1c2hfd2hvbGVfaWNhY2hlKCk7CiAKQEAgLTE5NzcsNiArMTk4MSw0NSBAQAogCXBva2Vfc3JtbXUgPSBwb2tlX3Zpa2luZzsKIH0KIAorI2lmZGVmIENPTkZJR19TUEFSQ19MRU9OCisKK3ZvaWQgX19pbml0IHBva2VfbGVvbnNwYXJjKHZvaWQpCit7Cit9CisKK3ZvaWQgX19pbml0IGluaXRfbGVvbih2b2lkKQoreworCisJc3JtbXVfbmFtZSA9ICJMZW9uIjsKKworCUJURklYVVBTRVRfQ0FMTChmbHVzaF9jYWNoZV9hbGwsIGxlb25fZmx1c2hfY2FjaGVfYWxsLAorCQkJQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKGZsdXNoX2NhY2hlX21tLCBsZW9uX2ZsdXNoX2NhY2hlX2FsbCwKKwkJCUJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChmbHVzaF9jYWNoZV9wYWdlLCBsZW9uX2ZsdXNoX3BjYWNoZV9hbGwsCisJCQlCVEZJWFVQQ0FMTF9OT1JNKTsKKwlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfY2FjaGVfcmFuZ2UsIGxlb25fZmx1c2hfY2FjaGVfYWxsLAorCQkJQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKGZsdXNoX3BhZ2VfZm9yX2RtYSwgbGVvbl9mbHVzaF9kY2FjaGVfYWxsLAorCQkJQlRGSVhVUENBTExfTk9STSk7CisKKwlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfdGxiX2FsbCwgbGVvbl9mbHVzaF90bGJfYWxsLCBCVEZJWFVQQ0FMTF9OT1JNKTsKKwlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfdGxiX21tLCBsZW9uX2ZsdXNoX3RsYl9hbGwsIEJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChmbHVzaF90bGJfcGFnZSwgbGVvbl9mbHVzaF90bGJfYWxsLCBCVEZJWFVQQ0FMTF9OT1JNKTsKKwlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfdGxiX3JhbmdlLCBsZW9uX2ZsdXNoX3RsYl9hbGwsIEJURklYVVBDQUxMX05PUk0pOworCisJQlRGSVhVUFNFVF9DQUxMKF9fZmx1c2hfcGFnZV90b19yYW0sIGxlb25fZmx1c2hfY2FjaGVfYWxsLAorCQkJQlRGSVhVUENBTExfTk9QKTsKKwlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfc2lnX2luc25zLCBsZW9uX2ZsdXNoX2NhY2hlX2FsbCwgQlRGSVhVUENBTExfTk9QKTsKKworCXBva2Vfc3JtbXUgPSBwb2tlX2xlb25zcGFyYzsKKworCXNybW11X2NhY2hlX3BhZ2V0YWJsZXMgPSAwOworCisJbGVvbl9mbHVzaF9kdXJpbmdfc3dpdGNoID0gbGVvbl9mbHVzaF9uZWVkZWQoKTsKK30KKyNlbmRpZgorCiAvKiBQcm9iZSBmb3IgdGhlIHNybW11IGNoaXAgdmVyc2lvbi4gKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBnZXRfc3JtbXVfdHlwZSh2b2lkKQogewpAQCAtMTk5Miw3ICsyMDM1LDE1IEBACiAJcHNyX3R5cCA9IChwc3IgPj4gMjgpICYgMHhmOwogCXBzcl92ZXJzID0gKHBzciA+PiAyNCkgJiAweGY7CiAKLQkvKiBGaXJzdCwgY2hlY2sgZm9yIEh5cGVyU3BhcmMgb3IgQ3lwcmVzcy4gKi8KKwkvKiBGaXJzdCwgY2hlY2sgZm9yIHNwYXJjLWxlb24uICovCisJaWYgKHNwYXJjX2NwdV9tb2RlbCA9PSBzcGFyY19sZW9uKSB7CisJCXBzcl90eXAgPSAweGY7CS8qIGhhcmRjb2RlZCBpZHMgZm9yIG9sZGVyIG1vZGVscy9zaW11bGF0b3JzICovCisJCXBzcl92ZXJzID0gMjsKKwkJaW5pdF9sZW9uKCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBTZWNvbmQsIGNoZWNrIGZvciBIeXBlclNwYXJjIG9yIEN5cHJlc3MuICovCiAJaWYobW9kX3R5cCA9PSAxKSB7CiAJCXN3aXRjaChtb2RfcmV2KSB7CiAJCWNhc2UgNzoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jIGIvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKaW5kZXggZDE3MmY4Ni4uZjk3Y2I4YiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKKysrIGIvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKQEAgLTIxLDcgKzIxLDcgQEAKIHN0YXRpYyBpbnQgcHJvZmlsZV90aW1lcl9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkJCSAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IChzdHJ1Y3QgZGllX2FyZ3MgKilkYXRhOworCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IGRhdGE7CiAJaW50IHJldCA9IE5PVElGWV9ET05FOwogCiAJc3dpdGNoICh2YWwpIHsKQEAgLTU3LDcgKzU3LDcgQEAKIAogc3RhdGljIGludCBvcF9ubWlfdGltZXJfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKQogewotCWlmICghbm1pX3VzYWJsZSkKKwlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpIDw9IDApCiAJCXJldHVybiAtRU5PREVWOwogCiAJb3BzLT5zdGFydCA9IHRpbWVyX3N0YXJ0OwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwppbmRleCAzYjQ0YjQ3Li5mMTE0ODEzIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCB1bWxfbmV0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjg1LDcgKzI4NSw3IEBACiAJc3RyY3B5KGluZm8tPnZlcnNpb24sICI0MiIpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHVtbF9uZXRfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHVtbF9uZXRfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCT0gdW1sX25ldF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsJPSBldGh0b29sX29wX2dldF9saW5rLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vY29tbW9uLmxkcy5TIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9jb21tb24ubGRzLlMKaW5kZXggY2IwMjQ4Ni4uMzdlY2M1NSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9jb21tb24ubGRzLlMKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9jb21tb24ubGRzLlMKQEAgLTEyMyw4ICsxMjMsMyBAQAogCV9faW5pdHJhbWZzX2VuZCA9IC47CiAgIH0KIAotICAvKiBTZWN0aW9ucyB0byBiZSBkaXNjYXJkZWQgKi8KLSAgL0RJU0NBUkQvIDogewotIAkqKC5leGl0Y2FsbC5leGl0KQotICB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUyBiL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUwppbmRleCA5OTc1ZTFhLi43MTVhMTg4IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9keW4ubGRzLlMKKysrIGIvYXJjaC91bS9rZXJuZWwvZHluLmxkcy5TCkBAIC0xNTYsNCArMTU2LDYgQEAKICAgU1RBQlNfREVCVUcKIAogICBEV0FSRl9ERUJVRworCisgIERJU0NBUkRTCiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC91bWwubGRzLlMgYi9hcmNoL3VtL2tlcm5lbC91bWwubGRzLlMKaW5kZXggMTFiODM1Mi4uMmViZDM5NyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TCisrKyBiL2FyY2gvdW0va2VybmVsL3VtbC5sZHMuUwpAQCAtMTAwLDQgKzEwMCw2IEBACiAgIFNUQUJTX0RFQlVHCiAKICAgRFdBUkZfREVCVUcKKworICBESVNDQVJEUwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggMTNmZmE1ZC4uZTk4ZTgxYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0zOCw3ICszOCw3IEBACiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfRlBfVEVTVAogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCiAJc2VsZWN0IEhBVkVfRlRSQUNFX05NSV9FTlRFUiBpZiBEWU5BTUlDX0ZUUkFDRQotCXNlbGVjdCBIQVZFX0ZUUkFDRV9TWVNDQUxMUworCXNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIAlzZWxlY3QgSEFWRV9LVk0KIAlzZWxlY3QgSEFWRV9BUkNIX0tHREIKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwpAQCAtMTUwLDcgKzE1MCwxMCBAQAogY29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgSEFWRV9EWU5BTUlDX1BFUl9DUFVfQVJFQQorY29uZmlnIE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSworCWRlZl9ib29sIHkKKworY29uZmlnIE5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LCiAJZGVmX2Jvb2wgeQogCiBjb25maWcgSEFWRV9DUFVNQVNLX09GX0NQVV9NQVAKQEAgLTE3OSw2ICsxODIsMTAgQEAKIGNvbmZpZyBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQwogCWRlZl9ib29sIHkKIAorY29uZmlnIEhBVkVfSU5URUxfVFhUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIERNQVIgJiYgQUNQSQorCiAjIFVzZSB0aGUgZ2VuZXJpYyBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSBpbiBrZXJuZWwvaXJxLzoKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTCiAJYm9vbApAQCAtNTg2LDcgKzU5Myw2IEBACiAJYm9vbCAiR0FSVCBJT01NVSBzdXBwb3J0IiBpZiBFTUJFRERFRAogCWRlZmF1bHQgeQogCXNlbGVjdCBTV0lPVExCCi0Jc2VsZWN0IEFHUAogCWRlcGVuZHMgb24gWDg2XzY0ICYmIFBDSQogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIGZ1bGwgRE1BIGFjY2VzcyBvZiBkZXZpY2VzIHdpdGggMzJiaXQgbWVtb3J5IGFjY2VzcyBvbmx5CkBAIC0xNDE0LDYgKzE0MjAsMTAgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIEFSQ0hfVVNFU19QR19VTkNBQ0hFRAorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFg4Nl9QQVQKKwogY29uZmlnIEVGSQogCWJvb2wgIkVGSSBydW50aW1lIHNlcnZpY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFDUEkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuY3B1IGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKaW5kZXggODEzMDMzNC4uNTI3NTE5YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKQEAgLTI2Miw2ICsyNjIsMTUgQEAKIAkgIGZhbWlseSBpbiAvcHJvYy9jcHVpbmZvLiBOZXdlciBvbmVzIGhhdmUgNiBhbmQgb2xkZXIgb25lcyAxNQogCSAgKG5vdCBhIHR5cG8pCiAKK2NvbmZpZyBNQVRPTQorCWJvb2wgIkludGVsIEF0b20iCisJLS0taGVscC0tLQorCisJICBTZWxlY3QgdGhpcyBmb3IgdGhlIEludGVsIEF0b20gcGxhdGZvcm0uIEludGVsIEF0b20gQ1BVcyBoYXZlIGFuCisJICBpbi1vcmRlciBwaXBlbGluaW5nIGFyY2hpdGVjdHVyZSBhbmQgdGh1cyBjYW4gYmVuZWZpdCBmcm9tCisJICBhY2NvcmRpbmdseSBvcHRpbWl6ZWQgY29kZS4gVXNlIGEgcmVjZW50IEdDQyB3aXRoIHNwZWNpZmljIEF0b20KKwkgIHN1cHBvcnQgaW4gb3JkZXIgdG8gZnVsbHkgYmVuZWZpdCBmcm9tIHNlbGVjdGluZyB0aGlzIG9wdGlvbi4KKwogY29uZmlnIEdFTkVSSUNfQ1BVCiAJYm9vbCAiR2VuZXJpYy14ODYtNjQiCiAJZGVwZW5kcyBvbiBYODZfNjQKQEAgLTI5NSw3ICszMDQsNyBAQAogY29uZmlnIFg4Nl9MMV9DQUNIRV9CWVRFUwogCWludAogCWRlZmF1bHQgIjEyOCIgaWYgTVBTQwotCWRlZmF1bHQgIjY0IiBpZiBHRU5FUklDX0NQVSB8fCBNSzggfHwgTUNPUkUyIHx8IFg4Nl8zMgorCWRlZmF1bHQgIjY0IiBpZiBHRU5FUklDX0NQVSB8fCBNSzggfHwgTUNPUkUyIHx8IE1BVE9NIHx8IFg4Nl8zMgogCiBjb25maWcgWDg2X0lOVEVSTk9ERV9DQUNIRV9CWVRFUwogCWludApAQCAtMzEwLDcgKzMxOSw3IEBACiAJZGVmYXVsdCAiNyIgaWYgTVBFTlRJVU00IHx8IE1QU0MKIAlkZWZhdWx0ICI0IiBpZiBYODZfRUxBTiB8fCBNNDg2IHx8IE0zODYgfHwgTUdFT0RFR1gxCiAJZGVmYXVsdCAiNSIgaWYgTVdJTkNISVAzRCB8fCBNV0lOQ0hJUEM2IHx8IE1DUlVTT0UgfHwgTUVGRklDRU9OIHx8IE1DWVJJWElJSSB8fCBNSzYgfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNNTg2IHx8IE1WSUFDM18yIHx8IE1HRU9ERV9MWAotCWRlZmF1bHQgIjYiIGlmIE1LNyB8fCBNSzggfHwgTVBFTlRJVU1NIHx8IE1DT1JFMiB8fCBNVklBQzcgfHwgWDg2X0dFTkVSSUMgfHwgR0VORVJJQ19DUFUKKwlkZWZhdWx0ICI2IiBpZiBNSzcgfHwgTUs4IHx8IE1QRU5USVVNTSB8fCBNQ09SRTIgfHwgTUFUT00gfHwgTVZJQUM3IHx8IFg4Nl9HRU5FUklDIHx8IEdFTkVSSUNfQ1BVCiAKIGNvbmZpZyBYODZfWEFERAogCWRlZl9ib29sIHkKQEAgLTM1OSw3ICszNjgsNyBAQAogCiBjb25maWcgWDg2X1VTRV9QUFJPX0NIRUNLU1VNCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gTVdJTkNISVAzRCB8fCBNV0lOQ0hJUEM2IHx8IE1DWVJJWElJSSB8fCBNSzcgfHwgTUs2IHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE1LOCB8fCBNVklBQzNfMiB8fCBNRUZGSUNFT04gfHwgTUdFT0RFX0xYIHx8IE1DT1JFMgorCWRlcGVuZHMgb24gTVdJTkNISVAzRCB8fCBNV0lOQ0hJUEM2IHx8IE1DWVJJWElJSSB8fCBNSzcgfHwgTUs2IHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE1LOCB8fCBNVklBQzNfMiB8fCBNRUZGSUNFT04gfHwgTUdFT0RFX0xYIHx8IE1DT1JFMiB8fCBNQVRPTQogCiBjb25maWcgWDg2X1VTRV8zRE5PVwogCWRlZl9ib29sIHkKQEAgLTM4Nyw3ICszOTYsNyBAQAogCiBjb25maWcgWDg2X1RTQwogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uICgoTVdJTkNISVAzRCB8fCBNQ1JVU09FIHx8IE1FRkZJQ0VPTiB8fCBNQ1lSSVhJSUkgfHwgTUs3IHx8IE1LNiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTUs4IHx8IE1WSUFDM18yIHx8IE1WSUFDNyB8fCBNR0VPREVHWDEgfHwgTUdFT0RFX0xYIHx8IE1DT1JFMikgJiYgIVg4Nl9OVU1BUSkgfHwgWDg2XzY0CisJZGVwZW5kcyBvbiAoKE1XSU5DSElQM0QgfHwgTUNSVVNPRSB8fCBNRUZGSUNFT04gfHwgTUNZUklYSUlJIHx8IE1LNyB8fCBNSzYgfHwgTVBFTlRJVU00IHx8IE1QRU5USVVNTSB8fCBNUEVOVElVTUlJSSB8fCBNUEVOVElVTUlJIHx8IE02ODYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE1LOCB8fCBNVklBQzNfMiB8fCBNVklBQzcgfHwgTUdFT0RFR1gxIHx8IE1HRU9ERV9MWCB8fCBNQ09SRTIgfHwgTUFUT00pICYmICFYODZfTlVNQVEpIHx8IFg4Nl82NAogCiBjb25maWcgWDg2X0NNUFhDSEc2NAogCWRlZl9ib29sIHkKQEAgLTM5Nyw3ICs0MDYsNyBAQAogIyBnZW5lcmF0ZXMgY21vdi4KIGNvbmZpZyBYODZfQ01PVgogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIChNSzggfHwgTUs3IHx8IE1DT1JFMiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNVklBQzNfMiB8fCBNVklBQzcgfHwgTUNSVVNPRSB8fCBNRUZGSUNFT04gfHwgWDg2XzY0KQorCWRlcGVuZHMgb24gKE1LOCB8fCBNSzcgfHwgTUNPUkUyIHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE1WSUFDM18yIHx8IE1WSUFDNyB8fCBNQ1JVU09FIHx8IE1FRkZJQ0VPTiB8fCBYODZfNjQgfHwgTUFUT00pCiAKIGNvbmZpZyBYODZfTUlOSU1VTV9DUFVfRkFNSUxZCiAJaW50CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9NYWtlZmlsZSBiL2FyY2gveDg2L01ha2VmaWxlCmluZGV4IDFiNjg2NTkuLjc5ODNjNDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L01ha2VmaWxlCkBAIC0zMiw4ICszMiw4IEBACiAKICAgICAgICAgIyBEaXNhYmxlIHVuaXQtYXQtYS10aW1lIG1vZGUgb24gcHJlLWdjYy00LjAgY29tcGlsZXJzLCBpdCBtYWtlcyBnY2MgdXNlCiAgICAgICAgICMgYSBsb3QgbW9yZSBzdGFjayBkdWUgdG8gdGhlIGxhY2sgb2Ygc2hhcmluZyBvZiBzdGFja2xvdHM6Ci0gICAgICAgIEtCVUlMRF9DRkxBR1MgKz0gJChzaGVsbCBpZiBbICQoY2FsbCBjYy12ZXJzaW9uKSAtbHQgMDQwMCBdIDsgdGhlbiBcCi0gICAgICAgICAgICAgICAgZWNobyAkKGNhbGwgY2Mtb3B0aW9uLC1mbm8tdW5pdC1hdC1hLXRpbWUpOyBmaSA7KQorICAgICAgICBLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1pZnZlcnNpb24sIC1sdCwgMDQwMCwgXAorCQkJCSQoY2FsbCBjYy1vcHRpb24sLWZuby11bml0LWF0LWEtdGltZSkpCiAKICAgICAgICAgIyBDUFUtc3BlY2lmaWMgdHVuaW5nLiBBbnl0aGluZyB3aGljaCBjYW4gYmUgc2hhcmVkIHdpdGggVU1MIHNob3VsZCBnbyBoZXJlLgogICAgICAgICBpbmNsdWRlICQoc3JjdHJlZSkvYXJjaC94ODYvTWFrZWZpbGVfMzIuY3B1CkBAIC01NSw2ICs1NSw4IEBACiAKICAgICAgICAgY2ZsYWdzLSQoQ09ORklHX01DT1JFMikgKz0gXAogICAgICAgICAgICAgICAgICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPWNvcmUyLCQoY2FsbCBjYy1vcHRpb24sLW10dW5lPWdlbmVyaWMpKQorCWNmbGFncy0kKENPTkZJR19NQVRPTSkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9YXRvbSkgXAorCQkkKGNhbGwgY2Mtb3B0aW9uLC1tdHVuZT1hdG9tLCQoY2FsbCBjYy1vcHRpb24sLW10dW5lPWdlbmVyaWMpKQogICAgICAgICBjZmxhZ3MtJChDT05GSUdfR0VORVJJQ19DUFUpICs9ICQoY2FsbCBjYy1vcHRpb24sLW10dW5lPWdlbmVyaWMpCiAgICAgICAgIEtCVUlMRF9DRkxBR1MgKz0gJChjZmxhZ3MteSkKIApAQCAtNzIsNyArNzQsNyBAQAogCiBpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKIAljY19oYXNfc3AgOj0gJChzcmN0cmVlKS9zY3JpcHRzL2djYy14ODZfJChCSVRTKS1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCi0gICAgICAgIGlmZXEgKCQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2NfaGFzX3NwKSAkKENDKSkseSkKKyAgICAgICAgaWZlcSAoJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjY19oYXNfc3ApICQoQ0MpICQoYmlhcmNoKSkseSkKICAgICAgICAgICAgICAgICBzdGFja3AteSA6PSAtZnN0YWNrLXByb3RlY3RvcgogICAgICAgICAgICAgICAgIHN0YWNrcC0kKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUl9BTEwpICs9IC1mc3RhY2stcHJvdGVjdG9yLWFsbAogICAgICAgICAgICAgICAgIEtCVUlMRF9DRkxBR1MgKz0gJChzdGFja3AteSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L01ha2VmaWxlXzMyLmNwdSBiL2FyY2gveDg2L01ha2VmaWxlXzMyLmNwdQppbmRleCA4MDE3N2VjLi4zMGU5YTI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZV8zMi5jcHUKKysrIGIvYXJjaC94ODYvTWFrZWZpbGVfMzIuY3B1CkBAIC0zMyw2ICszMyw4IEBACiBjZmxhZ3MtJChDT05GSUdfTVZJQUMzXzIpCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPWMzLTIsLW1hcmNoPWk2ODYpCiBjZmxhZ3MtJChDT05GSUdfTVZJQUM3KQkJKz0gLW1hcmNoPWk2ODYKIGNmbGFncy0kKENPTkZJR19NQ09SRTIpCQkrPSAtbWFyY2g9aTY4NiAkKGNhbGwgdHVuZSxjb3JlMikKK2NmbGFncy0kKENPTkZJR19NQVRPTSkJCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPWF0b20sJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9Y29yZTIsLW1hcmNoPWk2ODYpKSBcCisJJChjYWxsIGNjLW9wdGlvbiwtbXR1bmU9YXRvbSwkKGNhbGwgY2Mtb3B0aW9uLC1tdHVuZT1nZW5lcmljKSkKIAogIyBBTUQgRWxhbiBzdXBwb3J0CiBjZmxhZ3MtJChDT05GSUdfWDg2X0VMQU4pCSs9IC1tYXJjaD1pNDg2CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmVzYS5jCmluZGV4IDI3NWRkMTcuLjExZThjNmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmVzYS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmVzYS5jCkBAIC0zMSw3ICszMSw2IEBACiAKIHN0YXRpYyBpbnQgdmVzYV9wcm9iZSh2b2lkKQogewotI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1ZFU0EpIHx8IGRlZmluZWQoQ09ORklHX0ZJUk1XQVJFX0VESUQpCiAJc3RydWN0IGJpb3NyZWdzIGlyZWcsIG9yZWc7CiAJdTE2IG1vZGU7CiAJYWRkcl90IG1vZGVfcHRyOwpAQCAtNDksOCArNDgsNyBAQAogCSAgICB2Z2luZm8uc2lnbmF0dXJlICE9IFZFU0FfTUFHSUMgfHwKIAkgICAgdmdpbmZvLnZlcnNpb24gPCAweDAxMDIpCiAJCXJldHVybiAwOwkvKiBOb3QgcHJlc2VudCAqLwotI2VuZGlmIC8qIENPTkZJR19WSURFT19WRVNBIHx8IENPTkZJR19GSVJNV0FSRV9FRElEICovCi0jaWZkZWYgQ09ORklHX1ZJREVPX1ZFU0EKKwogCXNldF9mcyh2Z2luZm8udmlkZW9fbW9kZV9wdHIuc2VnKTsKIAltb2RlX3B0ciA9IHZnaW5mby52aWRlb19tb2RlX3B0ci5vZmY7CiAKQEAgLTEwMiw5ICsxMDAsNiBAQAogCX0KIAogCXJldHVybiBubW9kZXM7Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmIC8qIENPTkZJR19WSURFT19WRVNBICovCiB9CiAKIHN0YXRpYyBpbnQgdmVzYV9zZXRfbW9kZShzdHJ1Y3QgbW9kZV9pbmZvICptb2RlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMKaW5kZXggOGY4ZDgyNy4uODE5Y2FhMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYworKysgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jCkBAIC00NywxNCArNDcsNiBAQAogCiAJaW5pdHJlZ3MoJmlyZWcpOwogCi0jaWZkZWYgQ09ORklHX1ZJREVPXzQwMF9IQUNLCi0JaWYgKGFkYXB0ZXIgPj0gQURBUFRFUl9WR0EpIHsKLQkJaXJlZy5heCA9IDB4MTIwMjsKLQkJaXJlZy5ieCA9IDB4MDAzMDsKLQkJaW50Y2FsbCgweDEwLCAmaXJlZywgTlVMTCk7Ci0JfQotI2VuZGlmCi0KIAlheCA9IDB4MGYwMDsKIAlpbnRjYWxsKDB4MTAsICZpcmVnLCAmb3JlZyk7CiAJbW9kZSA9IG9yZWcuYWw7CkBAIC02MiwxMSArNTQsOSBAQAogCXNldF9mcygwKTsKIAlyb3dzID0gcmRmczgoMHg0ODQpOwkvKiByb3dzIG1pbnVzIG9uZSAqLwogCi0jaWZuZGVmIENPTkZJR19WSURFT180MDBfSEFDSwogCWlmICgob3JlZy5heCA9PSAweDUwMDMgfHwgb3JlZy5heCA9PSAweDUwMDcpICYmCiAJICAgIChyb3dzID09IDAgfHwgcm93cyA9PSAyNCkpCiAJCXJldHVybiBtb2RlOwotI2VuZGlmCiAKIAlpZiAobW9kZSAhPSAzICYmIG1vZGUgIT0gNykKIAkJbW9kZSA9IDM7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLmMKaW5kZXggYmFkNzI4Yi4uZDQyZGEzOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92aWRlby5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8uYwpAQCAtMjIxLDcgKzIyMSw2IEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1ZJREVPX1JFVEFJTgogLyogU2F2ZSBzY3JlZW4gY29udGVudCB0byB0aGUgaGVhcCAqLwogc3RhdGljIHN0cnVjdCBzYXZlZF9zY3JlZW4gewogCWludCB4LCB5OwpAQCAtMjk5LDEwICsyOTgsNiBAQAogCWlyZWcuZGwgPSBzYXZlZC5jdXJ4OwogCWludGNhbGwoMHgxMCwgJmlyZWcsIE5VTEwpOwogfQotI2Vsc2UKLSNkZWZpbmUgc2F2ZV9zY3JlZW4oKQkJKCh2b2lkKTApCi0jZGVmaW5lIHJlc3RvcmVfc2NyZWVuKCkJKCh2b2lkKTApCi0jZW5kaWYKIAogdm9pZCBzZXRfdmlkZW8odm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvdmlkZW8uaCBiL2FyY2gveDg2L2Jvb3QvdmlkZW8uaAppbmRleCA1YmIxNzRhLi5mZjMzOWM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZpZGVvLmgKKysrIGIvYXJjaC94ODYvYm9vdC92aWRlby5oCkBAIC0xNywxOSArMTcsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotLyogRW5hYmxlIGF1dG9kZXRlY3Rpb24gb2YgU1ZHQSBhZGFwdGVycyBhbmQgbW9kZXMuICovCi0jdW5kZWYgQ09ORklHX1ZJREVPX1NWR0EKLQotLyogRW5hYmxlIGF1dG9kZXRlY3Rpb24gb2YgVkVTQSBtb2RlcyAqLwotI2RlZmluZSBDT05GSUdfVklERU9fVkVTQQotCi0vKiBSZXRhaW4gc2NyZWVuIGNvbnRlbnRzIHdoZW4gc3dpdGNoaW5nIG1vZGVzICovCi0jZGVmaW5lIENPTkZJR19WSURFT19SRVRBSU4KLQotLyogRm9yY2UgNDAwIHNjYW4gbGluZXMgZm9yIHN0YW5kYXJkIG1vZGVzIChoYWNrIHRvIGZpeCBiYWQgQklPUyBiZWhhdmlvdXIgKi8KLSN1bmRlZiBDT05GSUdfVklERU9fNDAwX0hBQ0sKLQotLyogVGhpcyBjb2RlIHVzZXMgYW4gZXh0ZW5kZWQgc2V0IG9mIHZpZGVvIG1vZGUgbnVtYmVycy4gVGhlc2UgaW5jbHVkZToKKy8qCisgKiBUaGlzIGNvZGUgdXNlcyBhbiBleHRlbmRlZCBzZXQgb2YgdmlkZW8gbW9kZSBudW1iZXJzLiBUaGVzZSBpbmNsdWRlOgogICogQWxpYXNlcyBmb3Igc3RhbmRhcmQgbW9kZXMKICAqICAgICAgTk9STUFMX1ZHQSAoLTEpCiAgKiAgICAgIEVYVEVOREVEX1ZHQSAoLTIpCkBAIC02NywxMyArNTYsOCBAQAogLyogVGhlICJyZWNhbGN1bGF0ZSB0aW1pbmdzIiBmbGFnICovCiAjZGVmaW5lIFZJREVPX1JFQ0FMQyAweDgwMDAKIAotLyogRGVmaW5lIERPX1NUT1JFIGFjY29yZGluZyB0byBDT05GSUdfVklERU9fUkVUQUlOICovCi0jaWZkZWYgQ09ORklHX1ZJREVPX1JFVEFJTgogdm9pZCBzdG9yZV9zY3JlZW4odm9pZCk7CiAjZGVmaW5lIERPX1NUT1JFKCkgc3RvcmVfc2NyZWVuKCkKLSNlbHNlCi0jZGVmaW5lIERPX1NUT1JFKCkgKCh2b2lkKTApCi0jZW5kaWYgLyogQ09ORklHX1ZJREVPX1JFVEFJTiAqLwogCiAvKgogICogTW9kZSB0YWJsZSBzdHJ1Y3R1cmVzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnIGIvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZwppbmRleCBlZGI5OTJlLi5kMjhmYWQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCisrKyBiL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKQEAgLTIzNTUsNyArMjM1NSw3IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfSEFWRV9IV19CUkFOQ0hfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9TWVNDQUxMUz15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZyBiL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZwppbmRleCBjZWUxZGQyLi42Yzg2YWNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcKKysrIGIvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnCkBAIC0yMzI5LDcgKzIzMjksNyBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX0hBVkVfSFdfQlJBTkNIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYwppbmRleCBjNTgwYzVlLi41ODVlZGViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKQEAgLTU5LDEzICs1OSw2IEBACiBhc21saW5rYWdlIHZvaWQgYWVzbmlfY2JjX2RlYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKIAkJCSAgICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IGxlbiwgdTggKml2KTsKIAotc3RhdGljIGlubGluZSBpbnQga2VybmVsX2ZwdV91c2luZyh2b2lkKQotewotCWlmIChpbl9pbnRlcnJ1cHQoKSAmJiAhKHJlYWRfY3IwKCkgJiBYODZfQ1IwX1RTKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19hZXNfY3R4ICphZXNfY3R4KHZvaWQgKnJhd19jdHgpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcmF3X2N0eDsKQEAgLTg5LDcgKzgyLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkKKwlpZiAoaXJxX2ZwdV91c2FibGUoKSkKIAkJZXJyID0gY3J5cHRvX2Flc19leHBhbmRfa2V5KGN0eCwgaW5fa2V5LCBrZXlfbGVuKTsKIAllbHNlIHsKIAkJa2VybmVsX2ZwdV9iZWdpbigpOwpAQCAtMTEwLDcgKzEwMyw3IEBACiB7CiAJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b190Zm1fY3R4KHRmbSkpOwogCi0JaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkKKwlpZiAoaXJxX2ZwdV91c2FibGUoKSkKIAkJY3J5cHRvX2Flc19lbmNyeXB0X3g4NihjdHgsIGRzdCwgc3JjKTsKIAllbHNlIHsKIAkJa2VybmVsX2ZwdV9iZWdpbigpOwpAQCAtMTIzLDcgKzExNiw3IEBACiB7CiAJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b190Zm1fY3R4KHRmbSkpOwogCi0JaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkKKwlpZiAoaXJxX2ZwdV91c2FibGUoKSkKIAkJY3J5cHRvX2Flc19kZWNyeXB0X3g4NihjdHgsIGRzdCwgc3JjKTsKIAllbHNlIHsKIAkJa2VybmVsX2ZwdV9iZWdpbigpOwpAQCAtMzQ5LDcgKzM0Miw3IEBACiAJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0ocmVxKTsKIAlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CiAKLQlpZiAoa2VybmVsX2ZwdV91c2luZygpKSB7CisJaWYgKGlycV9mcHVfdXNhYmxlKCkpIHsKIAkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqY3J5cHRkX3JlcSA9CiAJCQlhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CiAJCW1lbWNweShjcnlwdGRfcmVxLCByZXEsIHNpemVvZigqcmVxKSk7CkBAIC0zNzAsNyArMzYzLDcgQEAKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOwogCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKIAotCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpIHsKKwlpZiAoaXJxX2ZwdV91c2FibGUoKSkgewogCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpjcnlwdGRfcmVxID0KIAkJCWFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKIAkJbWVtY3B5KGNyeXB0ZF9yZXEsIHJlcSwgc2l6ZW9mKCpyZXEpKTsKQEAgLTYzNiw3ICs2MjksNyBAQAogCWludCBlcnI7CiAKIAlpZiAoIWNwdV9oYXNfYWVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucyBhcmUgbm90IGRldGVjdGVkLlxuIik7CisJCXByaW50ayhLRVJOX0lORk8gIkludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMgYXJlIG5vdCBkZXRlY3RlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhZXNuaV9hbGcpKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IGU1OTAyNjEuLmJhMzMxYmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwpAQCAtNTM3LDcgKzUzNyw3IEBACiAJLnF1YWQgc3lzX21rZGlyCiAJLnF1YWQgc3lzX3JtZGlyCQkvKiA0MCAqLwogCS5xdWFkIHN5c19kdXAKLQkucXVhZCBzeXMzMl9waXBlCisJLnF1YWQgc3lzX3BpcGUKIAkucXVhZCBjb21wYXRfc3lzX3RpbWVzCiAJLnF1YWQgcXVpZXRfbmlfc3lzY2FsbAkJCS8qIG9sZCBwcm9mIHN5c2NhbGwgaG9sZGVyICovCiAJLnF1YWQgc3lzX2JyawkJLyogNDUgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYyBiL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYwppbmRleCAwODVhOGMzLi45ZjU1MjcxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMKKysrIGIvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jCkBAIC0xODksMjAgKzE4OSw2IEBACiAJcmV0dXJuIHN5c19tcHJvdGVjdChzdGFydCwgbGVuLCBwcm90KTsKIH0KIAotYXNtbGlua2FnZSBsb25nIHN5czMyX3BpcGUoaW50IF9fdXNlciAqZmQpCi17Ci0JaW50IHJldHZhbDsKLQlpbnQgZmRzWzJdOwotCi0JcmV0dmFsID0gZG9fcGlwZV9mbGFncyhmZHMsIDApOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gb3V0OwotCWlmIChjb3B5X3RvX3VzZXIoZmQsIGZkcywgc2l6ZW9mKGZkcykpKQotCQlyZXR2YWwgPSAtRUZBVUxUOwotb3V0OgotCXJldHVybiByZXR2YWw7Ci19Ci0KIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9ydF9zaWdhY3Rpb24oaW50IHNpZywgc3RydWN0IHNpZ2FjdGlvbjMyIF9fdXNlciAqYWN0LAogCQkJCSAgIHN0cnVjdCBzaWdhY3Rpb24zMiBfX3VzZXIgKm9hY3QsCiAJCQkJICAgdW5zaWduZWQgaW50IHNpZ3NldHNpemUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hZ3AuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FncC5oCmluZGV4IDk4MjVjZDYuLmVlYzJhNzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FncC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FncC5oCkBAIC0yMiwxMCArMjIsNiBAQAogICovCiAjZGVmaW5lIGZsdXNoX2FncF9jYWNoZSgpIHdiaW52ZCgpCiAKLS8qIENvbnZlcnQgYSBwaHlzaWNhbCBhZGRyZXNzIHRvIGFuIGFkZHJlc3Mgc3VpdGFibGUgZm9yIHRoZSBHQVJULiAqLwotI2RlZmluZSBwaHlzX3RvX2dhcnQoeCkgKHgpCi0jZGVmaW5lIGdhcnRfdG9fcGh5cyh4KSAoeCkKLQogLyogR0FUVCBhbGxvY2F0aW9uLiBSZXR1cm5zL2FjY2VwdHMgR0FUVCBrZXJuZWwgdmlydHVhbCBhZGRyZXNzLiAqLwogI2RlZmluZSBhbGxvY19nYXR0X3BhZ2VzKG9yZGVyKQkJXAogCSgoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgKG9yZGVyKSkpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaAppbmRleCAxYTM3YmNkLi5jMjQwZWZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKQEAgLTczLDggKzczLDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaChpbnQgc21wKSB7fQogI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KIAotY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgKmZpbmRfbm9wX3RhYmxlKHZvaWQpOwotCiAvKiBhbHRlcm5hdGl2ZSBhc3NlbWJseSBwcmltaXRpdmU6ICovCiAjZGVmaW5lIEFMVEVSTkFUSVZFKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSkJCQlcCiAJCQkJCQkJCQlcCkBAIC0xNDQsOCArMTQyLDYgQEAKICNkZWZpbmUgX19wYXJhaW5zdHJ1Y3Rpb25zX2VuZAlOVUxMCiAjZW5kaWYKIAotZXh0ZXJuIHZvaWQgYWRkX25vcHModm9pZCAqaW5zbnMsIHVuc2lnbmVkIGludCBsZW4pOwotCiAvKgogICogQ2xlYXIgYW5kIHJlc3RvcmUgdGhlIGtlcm5lbCB3cml0ZS1wcm90ZWN0aW9uIGZsYWcgb24gdGhlIGxvY2FsIENQVS4KICAqIEFsbG93cyB0aGUga2VybmVsIHRvIGVkaXQgcmVhZC1vbmx5IHBhZ2VzLgpAQCAtMTYxLDEwICsxNTcsNyBAQAogICogSW50ZWwncyBlcnJhdGEuCiAgKiBPbiB0aGUgbG9jYWwgQ1BVIHlvdSBuZWVkIHRvIGJlIHByb3RlY3RlZCBhZ2FpbiBOTUkgb3IgTUNFIGhhbmRsZXJzIHNlZWluZyBhbgogICogaW5jb25zaXN0ZW50IGluc3RydWN0aW9uIHdoaWxlIHlvdSBwYXRjaC4KLSAqIFRoZSBfZWFybHkgdmVyc2lvbiBleHBlY3RzIHRoZSBtZW1vcnkgdG8gYWxyZWFkeSBiZSBSVy4KICAqLwotCiBleHRlcm4gdm9pZCAqdGV4dF9wb2tlKHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbik7Ci1leHRlcm4gdm9pZCAqdGV4dF9wb2tlX2Vhcmx5KHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbik7CiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9BTFRFUk5BVElWRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdS5oCmluZGV4IGJkZjk2ZjEuLmFjOTU5OTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZkZWYgQ09ORklHX0FNRF9JT01NVQogZXh0ZXJuIGludCBhbWRfaW9tbXVfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgYW1kX2lvbW11X2luaXRfZG1hX29wcyh2b2lkKTsKK2V4dGVybiBpbnQgYW1kX2lvbW11X2luaXRfcGFzc3Rocm91Z2godm9pZCk7CiBleHRlcm4gdm9pZCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpOwogZXh0ZXJuIGlycXJldHVybl90IGFtZF9pb21tdV9pbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKTsKIGV4dGVybiB2b2lkIGFtZF9pb21tdV9mbHVzaF9hbGxfZG9tYWlucyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3R5cGVzLmgKaW5kZXggMGM4NzhjYS4uMmEyY2M3YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3R5cGVzLmgKQEAgLTE0MywyMiArMTQzLDI5IEBACiAjZGVmaW5lIEVWVF9CVUZGRVJfU0laRQkJODE5MiAvKiA1MTIgZW50cmllcyAqLwogI2RlZmluZSBFVlRfTEVOX01BU0sJCSgweDlVTEwgPDwgNTYpCiAKKyNkZWZpbmUgUEFHRV9NT0RFX05PTkUgICAgMHgwMAogI2RlZmluZSBQQUdFX01PREVfMV9MRVZFTCAweDAxCiAjZGVmaW5lIFBBR0VfTU9ERV8yX0xFVkVMIDB4MDIKICNkZWZpbmUgUEFHRV9NT0RFXzNfTEVWRUwgMHgwMworI2RlZmluZSBQQUdFX01PREVfNF9MRVZFTCAweDA0CisjZGVmaW5lIFBBR0VfTU9ERV81X0xFVkVMIDB4MDUKKyNkZWZpbmUgUEFHRV9NT0RFXzZfTEVWRUwgMHgwNgogCi0jZGVmaW5lIElPTU1VX1BERV9OTF8wICAgMHgwMDBVTEwKLSNkZWZpbmUgSU9NTVVfUERFX05MXzEgICAweDIwMFVMTAotI2RlZmluZSBJT01NVV9QREVfTkxfMiAgIDB4NDAwVUxMCi0jZGVmaW5lIElPTU1VX1BERV9OTF8zICAgMHg2MDBVTEwKKyNkZWZpbmUgUE1fTEVWRUxfU0hJRlQoeCkJKDEyICsgKCh4KSAqIDkpKQorI2RlZmluZSBQTV9MRVZFTF9TSVpFKHgpCSgoKHgpIDwgNikgPyBcCisJCQkJICAoKDFVTEwgPDwgUE1fTEVWRUxfU0hJRlQoKHgpKSkgLSAxKTogXAorCQkJCSAgICgweGZmZmZmZmZmZmZmZmZmZmZVTEwpKQorI2RlZmluZSBQTV9MRVZFTF9JTkRFWCh4LCBhKQkoKChhKSA+PiBQTV9MRVZFTF9TSElGVCgoeCkpKSAmIDB4MWZmVUxMKQorI2RlZmluZSBQTV9MRVZFTF9FTkMoeCkJCSgoKHgpIDw8IDkpICYgMHhlMDBVTEwpCisjZGVmaW5lIFBNX0xFVkVMX1BERSh4LCBhKQkoKGEpIHwgUE1fTEVWRUxfRU5DKCh4KSkgfCBcCisJCQkJIElPTU1VX1BURV9QIHwgSU9NTVVfUFRFX0lSIHwgSU9NTVVfUFRFX0lXKQorI2RlZmluZSBQTV9QVEVfTEVWRUwocHRlKQkoKChwdGUpID4+IDkpICYgMHg3VUxMKQogCi0jZGVmaW5lIElPTU1VX1BURV9MMl9JTkRFWChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiAzMCkgJiAweDFmZlVMTCkKLSNkZWZpbmUgSU9NTVVfUFRFX0wxX0lOREVYKGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IDIxKSAmIDB4MWZmVUxMKQotI2RlZmluZSBJT01NVV9QVEVfTDBfSU5ERVgoYWRkcmVzcykgKCgoYWRkcmVzcykgPj4gMTIpICYgMHgxZmZVTEwpCi0KLSNkZWZpbmUgSU9NTVVfTUFQX1NJWkVfTDEgKDFVTEwgPDwgMjEpCi0jZGVmaW5lIElPTU1VX01BUF9TSVpFX0wyICgxVUxMIDw8IDMwKQotI2RlZmluZSBJT01NVV9NQVBfU0laRV9MMyAoMVVMTCA8PCAzOSkKKyNkZWZpbmUgUE1fTUFQXzRrCQkwCisjZGVmaW5lIFBNX0FERFJfTUFTSwkJMHgwMDBmZmZmZmZmZmZmMDAwVUxMCisjZGVmaW5lIFBNX01BUF9NQVNLKGx2bCkJKFBNX0FERFJfTUFTSyAmIFwKKwkJCQkofigoMVVMTCA8PCAoMTIgKyAoKGx2bCkgKiA5KSkpIC0gMSkpKQorI2RlZmluZSBQTV9BTElHTkVEKGx2bCwgYWRkcikJKChQTV9NQVBfTUFTSyhsdmwpICYgKGFkZHIpKSA9PSAoYWRkcikpCiAKICNkZWZpbmUgSU9NTVVfUFRFX1AgICgxVUxMIDw8IDApCiAjZGVmaW5lIElPTU1VX1BURV9UViAoMVVMTCA8PCAxKQpAQCAtMTY3LDExICsxNzQsNiBAQAogI2RlZmluZSBJT01NVV9QVEVfSVIgKDFVTEwgPDwgNjEpCiAjZGVmaW5lIElPTU1VX1BURV9JVyAoMVVMTCA8PCA2MikKIAotI2RlZmluZSBJT01NVV9MMV9QREUoYWRkcmVzcykgXAotCSgoYWRkcmVzcykgfCBJT01NVV9QREVfTkxfMSB8IElPTU1VX1BURV9QIHwgSU9NTVVfUFRFX0lSIHwgSU9NTVVfUFRFX0lXKQotI2RlZmluZSBJT01NVV9MMl9QREUoYWRkcmVzcykgXAotCSgoYWRkcmVzcykgfCBJT01NVV9QREVfTkxfMiB8IElPTU1VX1BURV9QIHwgSU9NTVVfUFRFX0lSIHwgSU9NTVVfUFRFX0lXKQotCiAjZGVmaW5lIElPTU1VX1BBR0VfTUFTSyAoKCgxVUxMIDw8IDUyKSAtIDEpICYgfjB4ZmZmVUxMKQogI2RlZmluZSBJT01NVV9QVEVfUFJFU0VOVChwdGUpICgocHRlKSAmIElPTU1VX1BURV9QKQogI2RlZmluZSBJT01NVV9QVEVfUEFHRShwdGUpIChwaHlzX3RvX3ZpcnQoKHB0ZSkgJiBJT01NVV9QQUdFX01BU0spKQpAQCAtMTk0LDExICsxOTYsMTQgQEAKICNkZWZpbmUgUERfRE1BX09QU19NQVNLCQkoMVVMIDw8IDApIC8qIGRvbWFpbiB1c2VkIGZvciBkbWFfb3BzICovCiAjZGVmaW5lIFBEX0RFRkFVTFRfTUFTSwkJKDFVTCA8PCAxKSAvKiBkb21haW4gaXMgYSBkZWZhdWx0IGRtYV9vcHMKIAkJCQkJICAgICAgZG9tYWluIGZvciBhbiBJT01NVSAqLworI2RlZmluZSBQRF9QQVNTVEhST1VHSF9NQVNLCSgxVUwgPDwgMikgLyogZG9tYWluIGhhcyBubyBwYWdlCisJCQkJCSAgICAgIHRyYW5zbGF0aW9uICovCisKIGV4dGVybiBib29sIGFtZF9pb21tdV9kdW1wOwogI2RlZmluZSBEVU1QX3ByaW50ayhmb3JtYXQsIGFyZy4uLikJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCWlmIChhbWRfaW9tbXVfZHVtcCkJCQkJCQlcCi0JCQlwcmludGsoS0VSTl9JTkZPICJBTUQgSU9NTVU6ICIgZm9ybWF0LCAjIyBhcmcpOwlcCisJCQlwcmludGsoS0VSTl9JTkZPICJBTUQtVmk6ICIgZm9ybWF0LCAjIyBhcmcpOwlcCiAJfSB3aGlsZSgwKTsKIAogLyoKQEAgLTIyNiw2ICsyMzEsNyBAQAogCWludCBtb2RlOwkJLyogcGFnaW5nIG1vZGUgKDAtNiBsZXZlbHMpICovCiAJdTY0ICpwdF9yb290OwkJLyogcGFnZSB0YWJsZSByb290IHBvaW50ZXIgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwkvKiBmbGFncyB0byBmaW5kIG91dCB0eXBlIG9mIGRvbWFpbiAqLworCWJvb2wgdXBkYXRlZDsJCS8qIGNvbXBsZXRlIGRvbWFpbiBmbHVzaCByZXF1aXJlZCAqLwogCXVuc2lnbmVkIGRldl9jbnQ7CS8qIGRldmljZXMgYXNzaWduZWQgdG8gdGhpcyBkb21haW4gKi8KIAl2b2lkICpwcml2OwkJLyogcHJpdmF0ZSBkYXRhICovCiB9OwpAQCAtMzM3LDYgKzM0Myw5IEBACiAJLyogaWYgb25lLCB3ZSBuZWVkIHRvIHNlbmQgYSBjb21wbGV0aW9uIHdhaXQgY29tbWFuZCAqLwogCWJvb2wgbmVlZF9zeW5jOwogCisJLyogYmVjb21lcyB0cnVlIGlmIGEgY29tbWFuZCBidWZmZXIgcmVzZXQgaXMgcnVubmluZyAqLworCWJvb2wgcmVzZXRfaW5fcHJvZ3Jlc3M7CisKIAkvKiBkZWZhdWx0IGRtYV9vcHMgZG9tYWluIGZvciB0aGF0IElPTU1VICovCiAJc3RydWN0IGRtYV9vcHNfZG9tYWluICpkZWZhdWx0X2RvbTsKIH07CkBAIC00NTcsNCArNDY2LDcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19BTURfSU9NTVVfU1RBVFMgKi8KIAorLyogc29tZSBmdW5jdGlvbiBwcm90b3R5cGVzICovCitleHRlcm4gdm9pZCBhbWRfaW9tbXVfcmVzZXRfY21kX2J1ZmZlcihzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSk7CisKICNlbmRpZiAvKiBfQVNNX1g4Nl9BTURfSU9NTVVfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCmluZGV4IGJiN2Q0NzkuLjU4NmI3YWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKQEAgLTE4Myw2ICsxODMsMTAgQEAKIH0KIAogI2RlZmluZSB4MmFwaWNfc3VwcG9ydGVkKCkJKGNwdV9oYXNfeDJhcGljKQorc3RhdGljIGlubGluZSB2b2lkIHgyYXBpY19mb3JjZV9waHlzKHZvaWQpCit7CisJeDJhcGljX3BoeXMgPSAxOworfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja194MmFwaWModm9pZCkKIHsKQEAgLTE5NCw2ICsxOTgsOSBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSB2b2lkIHgyYXBpY19mb3JjZV9waHlzKHZvaWQpCit7Cit9CiAKICNkZWZpbmUJeDJhcGljX3ByZWVuYWJsZWQgMAogI2RlZmluZQl4MmFwaWNfc3VwcG9ydGVkKCkJMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oCmluZGV4IDdkZGIzNmEuLjNiNjJkYTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmgKQEAgLTgsMTIgKzgsMTQgQEAKICAqIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPiwgMTk5OSwgMjAwMAogICovCiAKLSNkZWZpbmUJQVBJQ19ERUZBVUxUX1BIWVNfQkFTRQkweGZlZTAwMDAwCisjZGVmaW5lIElPX0FQSUNfREVGQVVMVF9QSFlTX0JBU0UJMHhmZWMwMDAwMAorI2RlZmluZQlBUElDX0RFRkFVTFRfUEhZU19CQVNFCQkweGZlZTAwMDAwCiAKICNkZWZpbmUJQVBJQ19JRAkJMHgyMAogCiAjZGVmaW5lCUFQSUNfTFZSCTB4MzAKICNkZWZpbmUJCUFQSUNfTFZSX01BU0sJCTB4RkYwMEZGCisjZGVmaW5lCQlBUElDX0xWUl9ESVJFQ1RFRF9FT0kJKDEgPDwgMjQpCiAjZGVmaW5lCQlHRVRfQVBJQ19WRVJTSU9OKHgpCSgoeCkgJiAweEZGdSkKICNkZWZpbmUJCUdFVF9BUElDX01BWExWVCh4KQkoKCh4KSA+PiAxNikgJiAweEZGdSkKICNpZmRlZiBDT05GSUdfWDg2XzMyCkBAIC00MCw2ICs0Miw3IEBACiAjZGVmaW5lCQlBUElDX0RGUl9DTFVTVEVSCQkweDBGRkZGRkZGdWwKICNkZWZpbmUJCUFQSUNfREZSX0ZMQVQJCQkweEZGRkZGRkZGdWwKICNkZWZpbmUJQVBJQ19TUElWCTB4RjAKKyNkZWZpbmUJCUFQSUNfU1BJVl9ESVJFQ1RFRF9FT0kJCSgxIDw8IDEyKQogI2RlZmluZQkJQVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVECSgxIDw8IDkpCiAjZGVmaW5lCQlBUElDX1NQSVZfQVBJQ19FTkFCTEVECQkoMSA8PCA4KQogI2RlZmluZQlBUElDX0lTUgkweDEwMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXNtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hc20uaAppbmRleCA1NmJlNzhmLi5iM2VkMWUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hc20uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hc20uaApAQCAtMyw3ICszLDcgQEAKIAogI2lmZGVmIF9fQVNTRU1CTFlfXwogIyBkZWZpbmUgX19BU01fRk9STSh4KQl4Ci0jIGRlZmluZSBfX0FTTV9FWF9TRUMJLnNlY3Rpb24gX19leF90YWJsZQorIyBkZWZpbmUgX19BU01fRVhfU0VDCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgogI2Vsc2UKICMgZGVmaW5lIF9fQVNNX0ZPUk0oeCkJIiAiICN4ICIgIgogIyBkZWZpbmUgX19BU01fRVhfU0VDCSIgLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgpAQCAtMzgsMTAgKzM4LDE4IEBACiAjZGVmaW5lIF9BU01fREkJCV9fQVNNX1JFRyhkaSkKIAogLyogRXhjZXB0aW9uIHRhYmxlIGVudHJ5ICovCisjaWZkZWYgX19BU1NFTUJMWV9fCisjIGRlZmluZSBfQVNNX0VYVEFCTEUoZnJvbSx0bykJICAgIFwKKwlfX0FTTV9FWF9TRUMgOwkJICAgIFwKKwlfQVNNX0FMSUdOIDsJCSAgICBcCisJX0FTTV9QVFIgZnJvbSAsIHRvIDsJICAgIFwKKwkucHJldmlvdXMKKyNlbHNlCiAjIGRlZmluZSBfQVNNX0VYVEFCTEUoZnJvbSx0bykgXAogCV9fQVNNX0VYX1NFQwlcCiAJX0FTTV9BTElHTiAiXG4iIFwKIAlfQVNNX1BUUiAjZnJvbSAiLCIgI3RvICJcbiIgXAogCSIgLnByZXZpb3VzXG4iCisjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X0FTTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ib290cGFyYW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3RwYXJhbS5oCmluZGV4IDE3MjRlOGQuLjZjYTIwMjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3RwYXJhbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3RwYXJhbS5oCkBAIC04NSw3ICs4NSw4IEBACiBzdHJ1Y3QgYm9vdF9wYXJhbXMgewogCXN0cnVjdCBzY3JlZW5faW5mbyBzY3JlZW5faW5mbzsJCQkvKiAweDAwMCAqLwogCXN0cnVjdCBhcG1fYmlvc19pbmZvIGFwbV9iaW9zX2luZm87CQkvKiAweDA0MCAqLwotCV9fdTggIF9wYWQyWzEyXTsJCQkJLyogMHgwNTQgKi8KKwlfX3U4ICBfcGFkMls0XTsJCQkJCS8qIDB4MDU0ICovCisJX191NjQgIHRib290X2FkZHI7CQkJCS8qIDB4MDU4ICovCiAJc3RydWN0IGlzdF9pbmZvIGlzdF9pbmZvOwkJCS8qIDB4MDYwICovCiAJX191OCAgX3BhZDNbMTZdOwkJCQkvKiAweDA3MCAqLwogCV9fdTggIGhkMF9pbmZvWzE2XTsJLyogb2Jzb2xldGUhICovCQkvKiAweDA4MCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IGU1NWRmYzEuLmI1NGY2YWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTQzLDggKzQzLDU4IEBACiAJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwogfQogCi0jZGVmaW5lIFBHX25vbl9XQgkJCQlQR19hcmNoXzEKLVBBR0VGTEFHKE5vbldCLCBub25fV0IpCisjZGVmaW5lIFBHX1dDCQkJCVBHX2FyY2hfMQorUEFHRUZMQUcoV0MsIFdDKQorCisjaWZkZWYgQ09ORklHX1g4Nl9QQVQKKy8qCisgKiBYODYgUEFUIHVzZXMgcGFnZSBmbGFncyBXQyBhbmQgVW5jYWNoZWQgdG9nZXRoZXIgdG8ga2VlcCB0cmFjayBvZgorICogbWVtb3J5IHR5cGUgb2YgcGFnZXMgdGhhdCBoYXZlIGJhY2tpbmcgcGFnZSBzdHJ1Y3QuIFg4NiBQQVQgc3VwcG9ydHMgMworICogZGlmZmVyZW50IG1lbW9yeSB0eXBlcywgX1BBR0VfQ0FDSEVfV0IsIF9QQUdFX0NBQ0hFX1dDIGFuZAorICogX1BBR0VfQ0FDSEVfVUNfTUlOVVMgYW5kIGZvdXJ0aCBzdGF0ZSB3aGVyZSBwYWdlJ3MgbWVtb3J5IHR5cGUgaGFzIG5vdAorICogYmVlbiBjaGFuZ2VkIGZyb20gaXRzIGRlZmF1bHQgKHZhbHVlIG9mIC0xIHVzZWQgdG8gZGVub3RlIHRoaXMpLgorICogTm90ZSB3ZSBkbyBub3Qgc3VwcG9ydCBfUEFHRV9DQUNIRV9VQyBoZXJlLgorICoKKyAqIENhbGxlciBtdXN0IGhvbGQgbWVtdHlwZV9sb2NrIGZvciBhdG9taWNpdHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfcGFnZV9tZW10eXBlKHN0cnVjdCBwYWdlICpwZykKK3sKKwlpZiAoIVBhZ2VVbmNhY2hlZChwZykgJiYgIVBhZ2VXQyhwZykpCisJCXJldHVybiAtMTsKKwllbHNlIGlmICghUGFnZVVuY2FjaGVkKHBnKSAmJiBQYWdlV0MocGcpKQorCQlyZXR1cm4gX1BBR0VfQ0FDSEVfV0M7CisJZWxzZSBpZiAoUGFnZVVuY2FjaGVkKHBnKSAmJiAhUGFnZVdDKHBnKSkKKwkJcmV0dXJuIF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCWVsc2UKKwkJcmV0dXJuIF9QQUdFX0NBQ0hFX1dCOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbWVtdHlwZShzdHJ1Y3QgcGFnZSAqcGcsIHVuc2lnbmVkIGxvbmcgbWVtdHlwZSkKK3sKKwlzd2l0Y2ggKG1lbXR5cGUpIHsKKwljYXNlIF9QQUdFX0NBQ0hFX1dDOgorCQlDbGVhclBhZ2VVbmNhY2hlZChwZyk7CisJCVNldFBhZ2VXQyhwZyk7CisJCWJyZWFrOworCWNhc2UgX1BBR0VfQ0FDSEVfVUNfTUlOVVM6CisJCVNldFBhZ2VVbmNhY2hlZChwZyk7CisJCUNsZWFyUGFnZVdDKHBnKTsKKwkJYnJlYWs7CisJY2FzZSBfUEFHRV9DQUNIRV9XQjoKKwkJU2V0UGFnZVVuY2FjaGVkKHBnKTsKKwkJU2V0UGFnZVdDKHBnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIC0xOgorCQlDbGVhclBhZ2VVbmNhY2hlZChwZyk7CisJCUNsZWFyUGFnZVdDKHBnKTsKKwkJYnJlYWs7CisJfQorfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfcGFnZV9tZW10eXBlKHN0cnVjdCBwYWdlICpwZykgeyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9tZW10eXBlKHN0cnVjdCBwYWdlICpwZywgdW5zaWduZWQgbG9uZyBtZW10eXBlKSB7IH0KKyNlbmRpZgogCiAvKgogICogVGhlIHNldF9tZW1vcnlfKiBBUEkgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHZhcmlvdXMgYXR0cmlidXRlcyBvZiBhIHZpcnR1YWwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAppbmRleCA0YTI4ZDIyLi44NDdmZWU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCkBAIC05NSw2ICs5NSw3IEBACiAjZGVmaW5lIFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDCSgzKjMyKzI0KSAvKiBUU0MgZG9lcyBub3Qgc3RvcCBpbiBDIHN0YXRlcyAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9DTEZMVVNIX01PTklUT1IgKDMqMzIrMjUpIC8qICIiIGNsZmx1c2ggcmVxZCB3aXRoIG1vbml0b3IgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfRVhURF9BUElDSUQJKDMqMzIrMjYpIC8qIGhhcyBleHRlbmRlZCBBUElDSUQgKDggYml0cykgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQU1EX0RDTSAgICAgKDMqMzIrMjcpIC8qIG11bHRpLW5vZGUgcHJvY2Vzc29yICovCiAKIC8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDAxIChlY3gpLCB3b3JkIDQgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NMwkoNCozMisgMCkgLyogInBuaSIgU1NFLTMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2N1cnJlbnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2N1cnJlbnQuaAppbmRleCBjNjhjMzYxLi40ZDQ0N2I3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jdXJyZW50LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3VycmVudC5oCkBAIC0xMSw3ICsxMSw3IEBACiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKQogewotCXJldHVybiBwZXJjcHVfcmVhZChjdXJyZW50X3Rhc2spOworCXJldHVybiBwZXJjcHVfcmVhZF9zdGFibGUoY3VycmVudF90YXNrKTsKIH0KIAogI2RlZmluZSBjdXJyZW50IGdldF9jdXJyZW50KCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaAppbmRleCBjOTkzZTllLi5lOGRlMmY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCkBAIC0yOTEsMTEgKzI5MSwyNCBAQAogCXJldHVybiBkZXNjLT5iYXNlMCB8ICgoZGVzYy0+YmFzZTEpIDw8IDE2KSB8ICgoZGVzYy0+YmFzZTIpIDw8IDI0KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHNldF9kZXNjX2Jhc2Uoc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjLCB1bnNpZ25lZCBsb25nIGJhc2UpCit7CisJZGVzYy0+YmFzZTAgPSBiYXNlICYgMHhmZmZmOworCWRlc2MtPmJhc2UxID0gKGJhc2UgPj4gMTYpICYgMHhmZjsKKwlkZXNjLT5iYXNlMiA9IChiYXNlID4+IDI0KSAmIDB4ZmY7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZGVzY19saW1pdChjb25zdCBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2MpCiB7CiAJcmV0dXJuIGRlc2MtPmxpbWl0MCB8IChkZXNjLT5saW1pdCA8PCAxNik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZGVzY19saW1pdChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2MsIHVuc2lnbmVkIGxvbmcgbGltaXQpCit7CisJZGVzYy0+bGltaXQwID0gbGltaXQgJiAweGZmZmY7CisJZGVzYy0+bGltaXQgPSAobGltaXQgPj4gMTYpICYgMHhmOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgX3NldF9nYXRlKGludCBnYXRlLCB1bnNpZ25lZCB0eXBlLCB2b2lkICphZGRyLAogCQkJICAgICB1bnNpZ25lZCBkcGwsIHVuc2lnbmVkIGlzdCwgdW5zaWduZWQgc2VnKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzY19kZWZzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjX2RlZnMuaAppbmRleCBhNmFkZWZhLi45ZDY2ODQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjX2RlZnMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjX2RlZnMuaApAQCAtMzQsNiArMzQsMTIgQEAKIAl9OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorI2RlZmluZSBHRFRfRU5UUllfSU5JVChmbGFncywgYmFzZSwgbGltaXQpIHsgeyB7IFwKKwkJLmEgPSAoKGxpbWl0KSAmIDB4ZmZmZikgfCAoKChiYXNlKSAmIDB4ZmZmZikgPDwgMTYpLCBcCisJCS5iID0gKCgoYmFzZSkgJiAweGZmMDAwMCkgPj4gMTYpIHwgKCgoZmxhZ3MpICYgMHhmMGZmKSA8PCA4KSB8IFwKKwkJCSgobGltaXQpICYgMHhmMDAwMCkgfCAoKGJhc2UpICYgMHhmZjAwMDAwMCksIFwKKwl9IH0gfQorCiBlbnVtIHsKIAlHQVRFX0lOVEVSUlVQVCA9IDB4RSwKIAlHQVRFX1RSQVAgPSAweEYsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RldmljZS5oCmluZGV4IDQ5OTRhMjAuLmNlZTM0ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RldmljZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RldmljZS5oCkBAIC0xMyw0ICsxMyw3IEBACiAjZW5kaWYKIH07CiAKK3N0cnVjdCBwZGV2X2FyY2hkYXRhIHsKK307CisKICNlbmRpZiAvKiBfQVNNX1g4Nl9ERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggMWMzZjk0My4uMGVlNzcwZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC01NSw2ICs1NSwyNCBAQAogZXh0ZXJuIHZvaWQgKmRtYV9nZW5lcmljX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkJCWRtYV9hZGRyX3QgKmRtYV9hZGRyLCBnZnBfdCBmbGFnKTsKIAorc3RhdGljIGlubGluZSBib29sIGRtYV9jYXBhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoIWRldi0+ZG1hX21hc2spCisJCXJldHVybiAwOworCisJcmV0dXJuIGFkZHIgKyBzaXplIDw9ICpkZXYtPmRtYV9tYXNrOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGh5c190b19kbWEoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwYWRkcikKK3sKKwlyZXR1cm4gcGFkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGh5c19hZGRyX3QgZG1hX3RvX3BoeXMoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRhZGRyKQoreworCXJldHVybiBkYWRkcjsKK30KKwogc3RhdGljIGlubGluZSB2b2lkCiBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kd2FyZjIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2R3YXJmMi5oCmluZGV4IDNhZmM1ZTguLmFlNjI1M2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2R3YXJmMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2R3YXJmMi5oCkBAIC04Nyw5ICs4NywyNSBAQAogCUNGSV9SRVNUT1JFIFxyZWcKIAkuZW5kbQogI2Vsc2UgLyohQ09ORklHX1g4Nl82NCovCisJLm1hY3JvIHB1c2hsX2NmaSByZWcKKwlwdXNobCBccmVnCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwkuZW5kbQogCi0JLyogMzJiaXQgZGVmZW5pdGlvbnMgYXJlIG1pc3NlZCB5ZXQgKi8KKwkubWFjcm8gcG9wbF9jZmkgcmVnCisJcG9wbCBccmVnCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CisJLmVuZG0KIAorCS5tYWNybyBtb3ZsX2NmaSByZWcgb2Zmc2V0PTAKKwltb3ZsICVccmVnLCBcb2Zmc2V0KCVlc3ApCisJQ0ZJX1JFTF9PRkZTRVQgXHJlZywgXG9mZnNldAorCS5lbmRtCisKKwkubWFjcm8gbW92bF9jZmlfcmVzdG9yZSBvZmZzZXQgcmVnCisJbW92bCBcb2Zmc2V0KCVlc3ApLCAlXHJlZworCUNGSV9SRVNUT1JFIFxyZWcKKwkuZW5kbQogI2VuZGlmIC8qIUNPTkZJR19YODZfNjQqLwogI2VuZGlmIC8qX19BU1NFTUJMWV9fKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaAppbmRleCA3YjJkNzFkLi4xNGY5ODkwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtMTMyLDYgKzEzMiw5IEBACiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCUZJWF9XUF9URVNULAogI2VuZGlmCisjaWZkZWYgQ09ORklHX0lOVEVMX1RYVAorCUZJWF9UQk9PVF9CQVNFLAorI2VuZGlmCiAJX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oCmluZGV4IGJkMmM2NTEuLmRiMjRjMjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0yOCwxMyArMjgsNiBAQAogCiAjZW5kaWYKIAotLyogRklYTUU6IEkgZG9uJ3Qgd2FudCB0byBzdGF5IGhhcmRjb2RlZCAqLwotI2lmZGVmIENPTkZJR19YODZfNjQKLSMgZGVmaW5lIEZUUkFDRV9TWVNDQUxMX01BWCAgICAgMjk2Ci0jZWxzZQotIyBkZWZpbmUgRlRSQUNFX1NZU0NBTExfTUFYICAgICAzMzMKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogI2RlZmluZSBNQ09VTlRfQUREUgkJKChsb25nKShtY291bnQpKQogI2RlZmluZSBNQ09VTlRfSU5TTl9TSVpFCTUgLyogc2l6ZW9mIG1jb3VudCBjYWxsICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKaW5kZXggMTc1YWRmNS4uMGIyMGJiYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaApAQCAtMjYsNiArMjYsNyBAQAogZXh0ZXJuIHZvaWQgbXhjc3JfZmVhdHVyZV9tYXNrX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGluaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBtYXRoX3N0YXRlX3Jlc3RvcmUodm9pZCk7CitleHRlcm4gdm9pZCBfX21hdGhfc3RhdGVfcmVzdG9yZSh2b2lkKTsKIGV4dGVybiB2b2lkIGluaXRfdGhyZWFkX3hzdGF0ZSh2b2lkKTsKIGV4dGVybiBpbnQgZHVtcF9mcHUoc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgKik7CiAKQEAgLTMwMSw2ICszMDIsMTQgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaXJxX2ZwdV91c2FibGUodm9pZCkKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKworCXJldHVybiAhaW5faW50ZXJydXB0KCkgfHwgIShyZWdzID0gZ2V0X2lycV9yZWdzKCkpIHx8IFwKKwkJdXNlcl9tb2RlKHJlZ3MpIHx8IChyZWFkX2NyMCgpICYgWDg2X0NSMF9UUyk7Cit9CisKIC8qCiAgKiBTb21lIGluc3RydWN0aW9ucyBsaWtlIFZJQSdzIHBhZGxvY2sgaW5zdHJ1Y3Rpb25zIGdlbmVyYXRlIGEgc3B1cmlvdXMKICAqIEROQSBmYXVsdCBidXQgZG9uJ3QgbW9kaWZ5IFNTRSByZWdpc3RlcnMuIEFuZCB0aGVzZSBpbnN0cnVjdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAppbmRleCAzMzBlZTgwLi44NTIzMmQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCkBAIC0xNTAsMTEgKzE1MCwxMCBAQAogI2RlZmluZSBpb19hcGljX2Fzc2lnbl9wY2lfaXJxcyBcCiAJKG1wX2lycV9lbnRyaWVzICYmICFza2lwX2lvYXBpY19zZXR1cCAmJiBpb19hcGljX2lycXMpCiAKLSNpZmRlZiBDT05GSUdfQUNQSQorZXh0ZXJuIHU4IGlvX2FwaWNfdW5pcXVlX2lkKHU4IGlkKTsKIGV4dGVybiBpbnQgaW9fYXBpY19nZXRfdW5pcXVlX2lkKGludCBpb2FwaWMsIGludCBhcGljX2lkKTsKIGV4dGVybiBpbnQgaW9fYXBpY19nZXRfdmVyc2lvbihpbnQgaW9hcGljKTsKIGV4dGVybiBpbnQgaW9fYXBpY19nZXRfcmVkaXJfZW50cmllcyhpbnQgaW9hcGljKTsKLSNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLwogCiBzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0cjsKIGV4dGVybiBpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXJxLApAQCAtMTc3LDYgKzE3NiwxNiBAQAogCQkJICAgICAgaW50IHBvbGFyaXR5LCBpbnQgdmVjdG9yLCBpbnQgcGluKTsKIGV4dGVybiB2b2lkIGlvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwKIAkJCSAgICAgICBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKTsKKworc3RydWN0IG1wX2lvYXBpY19nc2l7CisJaW50IGdzaV9iYXNlOworCWludCBnc2lfZW5kOworfTsKK2V4dGVybiBzdHJ1Y3QgbXBfaW9hcGljX2dzaSAgbXBfZ3NpX3JvdXRpbmdbXTsKK2ludCBtcF9maW5kX2lvYXBpYyhpbnQgZ3NpKTsKK2ludCBtcF9maW5kX2lvYXBpY19waW4oaW50IGlvYXBpYywgaW50IGdzaSk7Cit2b2lkIF9faW5pdCBtcF9yZWdpc3Rlcl9pb2FwaWMoaW50IGlkLCB1MzIgYWRkcmVzcywgdTMyIGdzaV9iYXNlKTsKKwogI2Vsc2UgIC8qICFDT05GSUdfWDg2X0lPX0FQSUMgKi8KICNkZWZpbmUgaW9fYXBpY19hc3NpZ25fcGNpX2lycXMgMAogc3RhdGljIGNvbnN0IGludCB0aW1lcl90aHJvdWdoXzgyNTkgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9jdGxzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb2N0bHMuaAppbmRleCAwZDViMjNiNy4uZWMzNGM3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9jdGxzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9jdGxzLmgKQEAgLTEsOTQgKzEgQEAKLSNpZm5kZWYgX0FTTV9YODZfSU9DVExTX0gKLSNkZWZpbmUgX0FTTV9YODZfSU9DVExTX0gKLQotI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgotCi0vKiAweDU0IGlzIGp1c3QgYSBtYWdpYyBudW1iZXIgdG8gbWFrZSB0aGVzZSByZWxhdGl2ZWx5IHVuaXF1ZSAoJ1QnKSAqLwotCi0jZGVmaW5lIFRDR0VUUwkJMHg1NDAxCi0jZGVmaW5lIFRDU0VUUwkJMHg1NDAyIC8qIENsYXNoZXMgd2l0aCBTTkRDVExfVE1SX1NUQVJUIHNvdW5kIGlvY3RsICovCi0jZGVmaW5lIFRDU0VUU1cJCTB4NTQwMwotI2RlZmluZSBUQ1NFVFNGCQkweDU0MDQKLSNkZWZpbmUgVENHRVRBCQkweDU0MDUKLSNkZWZpbmUgVENTRVRBCQkweDU0MDYKLSNkZWZpbmUgVENTRVRBVwkJMHg1NDA3Ci0jZGVmaW5lIFRDU0VUQUYJCTB4NTQwOAotI2RlZmluZSBUQ1NCUksJCTB4NTQwOQotI2RlZmluZSBUQ1hPTkMJCTB4NTQwQQotI2RlZmluZSBUQ0ZMU0gJCTB4NTQwQgotI2RlZmluZSBUSU9DRVhDTAkweDU0MEMKLSNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECi0jZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKLSNkZWZpbmUgVElPQ0dQR1JQCTB4NTQwRgotI2RlZmluZSBUSU9DU1BHUlAJMHg1NDEwCi0jZGVmaW5lIFRJT0NPVVRRCTB4NTQxMQotI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKLSNkZWZpbmUgVElPQ0dXSU5TWgkweDU0MTMKLSNkZWZpbmUgVElPQ1NXSU5TWgkweDU0MTQKLSNkZWZpbmUgVElPQ01HRVQJMHg1NDE1Ci0jZGVmaW5lIFRJT0NNQklTCTB4NTQxNgotI2RlZmluZSBUSU9DTUJJQwkweDU0MTcKLSNkZWZpbmUgVElPQ01TRVQJMHg1NDE4Ci0jZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKLSNkZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQotI2RlZmluZSBGSU9OUkVBRAkweDU0MUIKLSNkZWZpbmUgVElPQ0lOUQkJRklPTlJFQUQKLSNkZWZpbmUgVElPQ0xJTlVYCTB4NTQxQwotI2RlZmluZSBUSU9DQ09OUwkweDU0MUQKLSNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCi0jZGVmaW5lIFRJT0NTU0VSSUFMCTB4NTQxRgotI2RlZmluZSBUSU9DUEtUCQkweDU0MjAKLSNkZWZpbmUgRklPTkJJTwkJMHg1NDIxCi0jZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKLSNkZWZpbmUgVElPQ1NFVEQJMHg1NDIzCi0jZGVmaW5lIFRJT0NHRVRECTB4NTQyNAotI2RlZmluZSBUQ1NCUktQCQkweDU0MjUJLyogTmVlZGVkIGZvciBQT1NJWCB0Y3NlbmRicmVhaygpICovCi0vKiAjZGVmaW5lIFRJT0NUVFlHU1RSVUNUIDB4NTQyNiAtIEZvcm1lciBkZWJ1Z2dpbmctb25seSBpb2N0bCAqLwotI2RlZmluZSBUSU9DU0JSSwkweDU0MjcgIC8qIEJTRCBjb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lIFRJT0NDQlJLCTB4NTQyOCAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgVElPQ0dTSUQJMHg1NDI5ICAvKiBSZXR1cm4gdGhlIHNlc3Npb24gSUQgb2YgRkQgKi8KLSNkZWZpbmUgVENHRVRTMgkJX0lPUignVCcsIDB4MkEsIHN0cnVjdCB0ZXJtaW9zMikKLSNkZWZpbmUgVENTRVRTMgkJX0lPVygnVCcsIDB4MkIsIHN0cnVjdCB0ZXJtaW9zMikKLSNkZWZpbmUgVENTRVRTVzIJX0lPVygnVCcsIDB4MkMsIHN0cnVjdCB0ZXJtaW9zMikKLSNkZWZpbmUgVENTRVRTRjIJX0lPVygnVCcsIDB4MkQsIHN0cnVjdCB0ZXJtaW9zMikKLSNkZWZpbmUgVElPQ0dSUzQ4NQkweDU0MkUKLSNkZWZpbmUgVElPQ1NSUzQ4NQkweDU0MkYKLSNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsIDB4MzAsIHVuc2lnbmVkIGludCkKLQkJCQkvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCi0jZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsIDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLwotI2RlZmluZSBUQ0dFVFgJCTB4NTQzMiAvKiBTWVM1IFRDR0VUWCBjb21wYXRpYmlsaXR5ICovCi0jZGVmaW5lIFRDU0VUWAkJMHg1NDMzCi0jZGVmaW5lIFRDU0VUWEYJCTB4NTQzNAotI2RlZmluZSBUQ1NFVFhXCQkweDU0MzUKLQotI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAKLSNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCi0jZGVmaW5lIEZJT0FTWU5DCTB4NTQ1MgotI2RlZmluZSBUSU9DU0VSQ09ORklHCTB4NTQ1MwotI2RlZmluZSBUSU9DU0VSR1dJTEQJMHg1NDU0Ci0jZGVmaW5lIFRJT0NTRVJTV0lMRAkweDU0NTUKLSNkZWZpbmUgVElPQ0dMQ0tUUk1JT1MJMHg1NDU2Ci0jZGVmaW5lIFRJT0NTTENLVFJNSU9TCTB4NTQ1NwotI2RlZmluZSBUSU9DU0VSR1NUUlVDVAkweDU0NTggLyogRm9yIGRlYnVnZ2luZyBvbmx5ICovCi0jZGVmaW5lIFRJT0NTRVJHRVRMU1IgICAweDU0NTkgLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIFRJT0NTRVJHRVRNVUxUSSAweDU0NUEgLyogR2V0IG11bHRpcG9ydCBjb25maWcgICovCi0jZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSAweDU0NUIgLyogU2V0IG11bHRpcG9ydCBjb25maWcgKi8KLQotI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QwkvKiB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLwotI2RlZmluZSBUSU9DR0lDT1VOVAkweDU0NUQJLyogcmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLwotI2RlZmluZSBUSU9DR0hBWUVTRVNQICAgMHg1NDVFICAvKiBHZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgVElPQ1NIQVlFU0VTUCAgIDB4NTQ1RiAgLyogU2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIEZJT1FTSVpFCTB4NTQ2MAotCi0vKiBVc2VkIGZvciBwYWNrZXQgbW9kZSAqLwotI2RlZmluZSBUSU9DUEtUX0RBVEEJCSAwCi0jZGVmaW5lIFRJT0NQS1RfRkxVU0hSRUFECSAxCi0jZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURQkgMgotI2RlZmluZSBUSU9DUEtUX1NUT1AJCSA0Ci0jZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4Ci0jZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgotI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKLQotI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCi0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9JT0NUTFNfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvY3Rscy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tYXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvbWFwLmgKaW5kZXggMGU5ZmUxZC4uZjM1ZWI0NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tYXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21hcC5oCkBAIC0yNiwxMyArMjYsMTYgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCi1pbnQKLWlzX2lvX21hcHBpbmdfcG9zc2libGUocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci0KIHZvaWQgKgogaW9tYXBfYXRvbWljX3Byb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSwgcGdwcm90X3QgcHJvdCk7CiAKIHZvaWQKIGlvdW5tYXBfYXRvbWljKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpOwogCitpbnQKK2lvbWFwX2NyZWF0ZV93YyhyZXNvdXJjZV9zaXplX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCAqcHJvdCk7CisKK3ZvaWQKK2lvbWFwX2ZyZWUocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKICNlbmRpZiAvKiBfQVNNX1g4Nl9JT01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcGNidWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lwY2J1Zi5oCmluZGV4IGVlNjc4ZmQuLjg0YzdlNTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lwY2J1Zi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lwY2J1Zi5oCkBAIC0xLDI4ICsxIEBACi0jaWZuZGVmIF9BU01fWDg2X0lQQ0JVRl9ICi0jZGVmaW5lIF9BU01fWDg2X0lQQ0JVRl9ICi0KLS8qCi0gKiBUaGUgaXBjNjRfcGVybSBzdHJ1Y3R1cmUgZm9yIHg4NiBhcmNoaXRlY3R1cmUuCi0gKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKLSAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgotICoKLSAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKLSAqIC0gMzItYml0IG1vZGVfdCBhbmQgc2VxCi0gKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCi0gKi8KLQotc3RydWN0IGlwYzY0X3Blcm0gewotCV9fa2VybmVsX2tleV90CQlrZXk7Ci0JX19rZXJuZWxfdWlkMzJfdAl1aWQ7Ci0JX19rZXJuZWxfZ2lkMzJfdAlnaWQ7Ci0JX19rZXJuZWxfdWlkMzJfdAljdWlkOwotCV9fa2VybmVsX2dpZDMyX3QJY2dpZDsKLQlfX2tlcm5lbF9tb2RlX3QJCW1vZGU7Ci0JdW5zaWduZWQgc2hvcnQJCV9fcGFkMTsKLQl1bnNpZ25lZCBzaG9ydAkJc2VxOwotCXVuc2lnbmVkIHNob3J0CQlfX3BhZDI7Ci0JdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOwotCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKLX07Ci0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9JUENCVUZfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lwY2J1Zi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKaW5kZXggYzZjY2JlNy4uOWUyYjk1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCkBAIC0xMywxNCArMTMsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKLQkgKiBOb3RlOiB0aGlzIG5lZWRzIHRvIGJlICI9ciIgbm90ICI9cm0iLCBiZWNhdXNlIHdlIGhhdmUgdGhlCi0JICogc3RhY2sgb2Zmc2V0IGZyb20gd2hhdCBnY2MgZXhwZWN0cyBhdCB0aGUgdGltZSB0aGUgInBvcCIgaXMKLQkgKiBleGVjdXRlZCwgYW5kIHNvIGEgbWVtb3J5IHJlZmVyZW5jZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHN0YWNrCi0JICogd291bGQgZW5kIHVwIHVzaW5nIHRoZSB3cm9uZyBhZGRyZXNzLgorCSAqICI9cm0iIGlzIHNhZmUgaGVyZSwgYmVjYXVzZSAicG9wIiBhZGp1c3RzIHRoZSBzdGFjayBiZWZvcmUKKwkgKiBpdCBldmFsdWF0ZXMgaXRzIGVmZmVjdGl2ZSBhZGRyZXNzIC0tIHRoaXMgaXMgcGFydCBvZiB0aGUKKwkgKiBkb2N1bWVudGVkIGJlaGF2aW9yIG9mIHRoZSAicG9wIiBpbnN0cnVjdGlvbi4KIAkgKi8KIAlhc20gdm9sYXRpbGUoIiMgX19yYXdfc2F2ZV9mbGFnc1xuXHQiCiAJCSAgICAgInB1c2hmIDsgcG9wICUwIgotCQkgICAgIDogIj1yIiAoZmxhZ3MpCisJCSAgICAgOiAiPXJtIiAoZmxhZ3MpCiAJCSAgICAgOiAvKiBubyBpbnB1dCAqLwogCQkgICAgIDogIm1lbW9yeSIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oCmluZGV4IDEyNWJlOGIuLjRhNWZlOTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oCkBAIC0xNyw2ICsxNyw4IEBACiAjZGVmaW5lIF9fS1ZNX0hBVkVfVVNFUl9OTUkKICNkZWZpbmUgX19LVk1fSEFWRV9HVUVTVF9ERUJVRwogI2RlZmluZSBfX0tWTV9IQVZFX01TSVgKKyNkZWZpbmUgX19LVk1fSEFWRV9NQ0UKKyNkZWZpbmUgX19LVk1fSEFWRV9QSVRfU1RBVEUyCiAKIC8qIEFyY2hpdGVjdHVyYWwgaW50ZXJydXB0IGxpbmUgY291bnQuICovCiAjZGVmaW5lIEtWTV9OUl9JTlRFUlJVUFRTIDI1NgpAQCAtMjM2LDYgKzIzOCwxNCBAQAogCXN0cnVjdCBrdm1fcGl0X2NoYW5uZWxfc3RhdGUgY2hhbm5lbHNbM107CiB9OwogCisjZGVmaW5lIEtWTV9QSVRfRkxBR1NfSFBFVF9MRUdBQ1kgIDB4MDAwMDAwMDEKKworc3RydWN0IGt2bV9waXRfc3RhdGUyIHsKKwlzdHJ1Y3Qga3ZtX3BpdF9jaGFubmVsX3N0YXRlIGNoYW5uZWxzWzNdOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHJlc2VydmVkWzldOworfTsKKwogc3RydWN0IGt2bV9yZWluamVjdF9jb250cm9sIHsKIAlfX3U4IHBpdF9yZWluamVjdDsKIAlfX3U4IHJlc2VydmVkWzMxXTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV94ODZfZW11bGF0ZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3g4Nl9lbXVsYXRlLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGVhYmRjMWMuLjNiZTAwMDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9rdm0uaD4KICNpbmNsdWRlIDxsaW51eC9rdm1fcGFyYS5oPgpAQCAtMzcsMTIgKzM4LDE0IEBACiAjZGVmaW5lIENSM19MX01PREVfUkVTRVJWRURfQklUUyAoQ1IzX05PTlBBRV9SRVNFUlZFRF9CSVRTIHwJXAogCQkJCSAgMHhGRkZGRkYwMDAwMDAwMDAwVUxMKQogCi0jZGVmaW5lIEtWTV9HVUVTVF9DUjBfTUFTSwkJCQkgICBcCi0JKFg4Nl9DUjBfUEcgfCBYODZfQ1IwX1BFIHwgWDg2X0NSMF9XUCB8IFg4Nl9DUjBfTkUgXAotCSB8IFg4Nl9DUjBfTlcgfCBYODZfQ1IwX0NEKQorI2RlZmluZSBLVk1fR1VFU1RfQ1IwX01BU0tfVU5SRVNUUklDVEVEX0dVRVNUCQkJCVwKKwkoWDg2X0NSMF9XUCB8IFg4Nl9DUjBfTkUgfCBYODZfQ1IwX05XIHwgWDg2X0NSMF9DRCkKKyNkZWZpbmUgS1ZNX0dVRVNUX0NSMF9NQVNLCQkJCQkJXAorCShLVk1fR1VFU1RfQ1IwX01BU0tfVU5SRVNUUklDVEVEX0dVRVNUIHwgWDg2X0NSMF9QRyB8IFg4Nl9DUjBfUEUpCisjZGVmaW5lIEtWTV9WTV9DUjBfQUxXQVlTX09OX1VOUkVTVFJJQ1RFRF9HVUVTVAkJCQlcCisJKFg4Nl9DUjBfV1AgfCBYODZfQ1IwX05FIHwgWDg2X0NSMF9UUyB8IFg4Nl9DUjBfTVApCiAjZGVmaW5lIEtWTV9WTV9DUjBfQUxXQVlTX09OCQkJCQkJXAotCShYODZfQ1IwX1BHIHwgWDg2X0NSMF9QRSB8IFg4Nl9DUjBfV1AgfCBYODZfQ1IwX05FIHwgWDg2X0NSMF9UUyBcCi0JIHwgWDg2X0NSMF9NUCkKKwkoS1ZNX1ZNX0NSMF9BTFdBWVNfT05fVU5SRVNUUklDVEVEX0dVRVNUIHwgWDg2X0NSMF9QRyB8IFg4Nl9DUjBfUEUpCiAjZGVmaW5lIEtWTV9HVUVTVF9DUjRfTUFTSwkJCQkJCVwKIAkoWDg2X0NSNF9WTUUgfCBYODZfQ1I0X1BTRSB8IFg4Nl9DUjRfUEFFIHwgWDg2X0NSNF9QR0UgfCBYODZfQ1I0X1ZNWEUpCiAjZGVmaW5lIEtWTV9QTU9ERV9WTV9DUjRfQUxXQVlTX09OIChYODZfQ1I0X1BBRSB8IFg4Nl9DUjRfVk1YRSkKQEAgLTUxLDEyICs1NCwxMiBAQAogI2RlZmluZSBJTlZBTElEX1BBR0UgKH4oaHBhX3QpMCkKICNkZWZpbmUgVU5NQVBQRURfR1ZBICh+KGdwYV90KTApCiAKLS8qIHNoYWRvdyB0YWJsZXMgYXJlIFBBRSBldmVuIG9uIG5vbi1QQUUgaG9zdHMgKi8KLSNkZWZpbmUgS1ZNX0hQQUdFX1NISUZUIDIxCi0jZGVmaW5lIEtWTV9IUEFHRV9TSVpFICgxVUwgPDwgS1ZNX0hQQUdFX1NISUZUKQotI2RlZmluZSBLVk1fSFBBR0VfTUFTSyAofihLVk1fSFBBR0VfU0laRSAtIDEpKQotCi0jZGVmaW5lIEtWTV9QQUdFU19QRVJfSFBBR0UgKEtWTV9IUEFHRV9TSVpFIC8gUEFHRV9TSVpFKQorLyogS1ZNIEh1Z2VwYWdlIGRlZmluaXRpb25zIGZvciB4ODYgKi8KKyNkZWZpbmUgS1ZNX05SX1BBR0VfU0laRVMJMworI2RlZmluZSBLVk1fSFBBR0VfU0hJRlQoeCkJKFBBR0VfU0hJRlQgKyAoKCh4KSAtIDEpICogOSkpCisjZGVmaW5lIEtWTV9IUEFHRV9TSVpFKHgpCSgxVUwgPDwgS1ZNX0hQQUdFX1NISUZUKHgpKQorI2RlZmluZSBLVk1fSFBBR0VfTUFTSyh4KQkofihLVk1fSFBBR0VfU0laRSh4KSAtIDEpKQorI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFKHgpCShLVk1fSFBBR0VfU0laRSh4KSAvIFBBR0VfU0laRSkKIAogI2RlZmluZSBERV9WRUNUT1IgMAogI2RlZmluZSBEQl9WRUNUT1IgMQpAQCAtMTIwLDYgKzEyMywxMCBAQAogCU5SX1ZDUFVfUkVHUwogfTsKIAorZW51bSBrdm1fcmVnX2V4IHsKKwlWQ1BVX0VYUkVHX1BEUFRSID0gTlJfVkNQVV9SRUdTLAorfTsKKwogZW51bSB7CiAJVkNQVV9TUkVHX0VTLAogCVZDUFVfU1JFR19DUywKQEAgLTEzMSw3ICsxMzgsNyBAQAogCVZDUFVfU1JFR19MRFRSLAogfTsKIAotI2luY2x1ZGUgPGFzbS9rdm1feDg2X2VtdWxhdGUuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2VtdWxhdGUuaD4KIAogI2RlZmluZSBLVk1fTlJfTUVNX09CSlMgNDAKIApAQCAtMzA4LDcgKzMxNSw2IEBACiAJc3RydWN0IHsKIAkJZ2ZuX3QgZ2ZuOwkvKiBwcmVzdW1lZCBnZm4gZHVyaW5nIGd1ZXN0IHB0ZSB1cGRhdGUgKi8KIAkJcGZuX3QgcGZuOwkvKiBwZm4gY29ycmVzcG9uZGluZyB0byB0aGF0IGdmbiAqLwotCQlpbnQgbGFyZ2VwYWdlOwogCQl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiAJfSB1cGRhdGVfcHRlOwogCkBAIC0zMzQsMTYgKzM0MCw2IEBACiAJCXU4IG5yOwogCX0gaW50ZXJydXB0OwogCi0Jc3RydWN0IHsKLQkJaW50IHZtODZfYWN0aXZlOwotCQl1OCBzYXZlX2lvcGw7Ci0JCXN0cnVjdCBrdm1fc2F2ZV9zZWdtZW50IHsKLQkJCXUxNiBzZWxlY3RvcjsKLQkJCXVuc2lnbmVkIGxvbmcgYmFzZTsKLQkJCXUzMiBsaW1pdDsKLQkJCXUzMiBhcjsKLQkJfSB0ciwgZXMsIGRzLCBmcywgZ3M7Ci0JfSBybW9kZTsKIAlpbnQgaGFsdF9yZXF1ZXN0OyAvKiByZWFsIG1vZGUgb24gSW50ZWwgb25seSAqLwogCiAJaW50IGNwdWlkX25lbnQ7CkBAIC0zNjYsMTMgKzM2MiwxNSBAQAogCXUzMiBwYXQ7CiAKIAlpbnQgc3dpdGNoX2RiX3JlZ3M7Ci0JdW5zaWduZWQgbG9uZyBob3N0X2RiW0tWTV9OUl9EQl9SRUdTXTsKLQl1bnNpZ25lZCBsb25nIGhvc3RfZHI2OwotCXVuc2lnbmVkIGxvbmcgaG9zdF9kcjc7CiAJdW5zaWduZWQgbG9uZyBkYltLVk1fTlJfREJfUkVHU107CiAJdW5zaWduZWQgbG9uZyBkcjY7CiAJdW5zaWduZWQgbG9uZyBkcjc7CiAJdW5zaWduZWQgbG9uZyBlZmZfZGJbS1ZNX05SX0RCX1JFR1NdOworCisJdTY0IG1jZ19jYXA7CisJdTY0IG1jZ19zdGF0dXM7CisJdTY0IG1jZ19jdGw7CisJdTY0ICptY2VfYmFua3M7CiB9OwogCiBzdHJ1Y3Qga3ZtX21lbV9hbGlhcyB7CkBAIC00MDksNiArNDA3LDcgQEAKIAogCXN0cnVjdCBwYWdlICplcHRfaWRlbnRpdHlfcGFnZXRhYmxlOwogCWJvb2wgZXB0X2lkZW50aXR5X3BhZ2V0YWJsZV9kb25lOworCWdwYV90IGVwdF9pZGVudGl0eV9tYXBfYWRkcjsKIAogCXVuc2lnbmVkIGxvbmcgaXJxX3NvdXJjZXNfYml0bWFwOwogCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXRlc1tLVk1fSU9BUElDX05VTV9QSU5TXTsKQEAgLTUyNiw2ICs1MjUsOSBAQAogCWludCAoKnNldF90c3NfYWRkcikoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgYWRkcik7CiAJaW50ICgqZ2V0X3RkcF9sZXZlbCkodm9pZCk7CiAJdTY0ICgqZ2V0X210X21hc2spKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBib29sIGlzX21taW8pOworCWJvb2wgKCpnYl9wYWdlX2VuYWJsZSkodm9pZCk7CisKKwljb25zdCBzdHJ1Y3QgdHJhY2VfcHJpbnRfZmxhZ3MgKmV4aXRfcmVhc29uc19zdHI7CiB9OwogCiBleHRlcm4gc3RydWN0IGt2bV94ODZfb3BzICprdm1feDg2X29wczsKQEAgLTYxOCw2ICs2MjAsNyBAQAogdm9pZCBrdm1fcXVldWVfZXhjZXB0aW9uX2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBuciwgdTMyIGVycm9yX2NvZGUpOwogdm9pZCBrdm1faW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMiwKIAkJCSAgIHUzMiBlcnJvcl9jb2RlKTsKK2Jvb2wga3ZtX3JlcXVpcmVfY3BsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHJlcXVpcmVkX2NwbCk7CiAKIGludCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwogCkBAIC03NTIsOCArNzU1LDYgQEAKIAlrdm1fcXVldWVfZXhjZXB0aW9uX2UodmNwdSwgR1BfVkVDVE9SLCBlcnJvcl9jb2RlKTsKIH0KIAotI2RlZmluZSBNU1JfSUEzMl9USU1FX1NUQU1QX0NPVU5URVIJCTB4MDEwCi0KICNkZWZpbmUgVFNTX0lPUEJfQkFTRV9PRkZTRVQgMHg2NgogI2RlZmluZSBUU1NfQkFTRV9TSVpFIDB4NjgKICNkZWZpbmUgVFNTX0lPUEJfU0laRSAoNjU1MzYgLyA4KQpAQCAtNzk2LDUgKzc5Nyw4IEBACiBpbnQga3ZtX3VubWFwX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhKTsKIGludCBrdm1fYWdlX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhKTsKIGludCBjcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitpbnQga3ZtX2NwdV9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitpbnQga3ZtX2FyY2hfaW50ZXJydXB0X2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1fY3B1X2dldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KTsKIAogI2VuZGlmIC8qIF9BU01fWDg2X0tWTV9IT1NUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oCmluZGV4IGI4YTMzMDUuLmM1ODQwNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0FTTV9YODZfS1ZNX1BBUkFfSAogI2RlZmluZSBfQVNNX1g4Nl9LVk1fUEFSQV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBUaGlzIENQVUlEIHJldHVybnMgdGhlIHNpZ25hdHVyZSAnS1ZNS1ZNS1ZNJyBpbiBlYngsIGVjeCwgYW5kIGVkeC4gIEl0CiAgKiBzaG91bGQgYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhhdCBhIFZNIGlzIHJ1bm5pbmcgdW5kZXIgS1ZNLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sZ3Vlc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xndWVzdC5oCmluZGV4IDUxMzZkYWQuLjBkOTdkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xndWVzdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xndWVzdC5oCkBAIC05MCw4ICs5MCw5IEBACiB9CiAKIC8qIEZ1bGwgNEcgc2VnbWVudCBkZXNjcmlwdG9ycywgc3VpdGFibGUgZm9yIENTIGFuZCBEUy4gKi8KLSNkZWZpbmUgRlVMTF9FWEVDX1NFR01FTlQgKChzdHJ1Y3QgZGVzY19zdHJ1Y3QpeyB7IHsweDAwMDBmZmZmLCAweDAwY2Y5YjAwfSB9IH0pCi0jZGVmaW5lIEZVTExfU0VHTUVOVCAoKHN0cnVjdCBkZXNjX3N0cnVjdCl7IHsgezB4MDAwMGZmZmYsIDB4MDBjZjkzMDB9IH0gfSkKKyNkZWZpbmUgRlVMTF9FWEVDX1NFR01FTlQgXAorCSgoc3RydWN0IGRlc2Nfc3RydWN0KUdEVF9FTlRSWV9JTklUKDB4YzA5YiwgMCwgMHhmZmZmZikpCisjZGVmaW5lIEZVTExfU0VHTUVOVCAoKHN0cnVjdCBkZXNjX3N0cnVjdClHRFRfRU5UUllfSU5JVCgweGMwOTMsIDAsIDB4ZmZmZmYpKQogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCA3NTFhZjI1Li41OTNlNTFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0xLDIwICsxLDggQEAKICNpZm5kZWYgX0FTTV9YODZfTU1BTl9ICiAjZGVmaW5lIF9BU01fWDg2X01NQU5fSAogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaD4KLQogI2RlZmluZSBNQVBfMzJCSVQJMHg0MAkJLyogb25seSBnaXZlIG91dCAzMmJpdCBhZGRyZXNzZXMgKi8KIAotI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCi0jZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCi0jZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCi0jZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCi0jZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCi0jZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwotI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCi0jZGVmaW5lIE1BUF9TVEFDSwkweDIwMDAwCQkvKiBnaXZlIG91dCBhbiBhZGRyZXNzIHRoYXQgaXMgYmVzdCBzdWl0ZWQgZm9yIHByb2Nlc3MvdGhyZWFkIHN0YWNrcyAqLwotCi0jZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KLSNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLmg+CiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9NTUFOX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggNDdkNjI3NC4uM2UyY2U1OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW9kdWxlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW9kdWxlLmgKQEAgLTEsMTggKzEsNyBAQAogI2lmbmRlZiBfQVNNX1g4Nl9NT0RVTEVfSAogI2RlZmluZSBfQVNNX1g4Nl9NT0RVTEVfSAogCi0vKiB4ODZfMzIvNjQgYXJlIHNpbXBsZSAqLwotc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHt9OwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBkZWZpbmUgRWxmX1NoZHIgRWxmMzJfU2hkcgotIyBkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KLSMgZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKLSNlbHNlCi0jIGRlZmluZSBFbGZfU2hkciBFbGY2NF9TaGRyCi0jIGRlZmluZSBFbGZfU3ltIEVsZjY0X1N5bQotIyBkZWZpbmUgRWxmX0VoZHIgRWxmNjRfRWhkcgotI2VuZGlmCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW9kdWxlLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAvKiBYODZfNjQgZG9lcyBub3QgZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAqLwpAQCAtMjgsNiArMTcsOCBAQAogI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIjU4Nk1NWCAiCiAjZWxpZiBkZWZpbmVkIENPTkZJR19NQ09SRTIKICNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJDT1JFMiAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NQVRPTQorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIkFUT00gIgogI2VsaWYgZGVmaW5lZCBDT05GSUdfTTY4NgogI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIjY4NiAiCiAjZWxpZiBkZWZpbmVkIENPTkZJR19NUEVOVElVTUlJCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc2didWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zZ2J1Zi5oCmluZGV4IDdlNGU5NDguLjgwOTEzNGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zZ2J1Zi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zZ2J1Zi5oCkBAIC0xLDM5ICsxIEBACi0jaWZuZGVmIF9BU01fWDg2X01TR0JVRl9ICi0jZGVmaW5lIF9BU01fWDg2X01TR0JVRl9ICi0KLS8qCi0gKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIGkzODYgYXJjaGl0ZWN0dXJlLgotICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCi0gKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KLSAqCi0gKiBQYWQgc3BhY2Ugb24gaTM4NiBpcyBsZWZ0IGZvcjoKLSAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCi0gKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCi0gKgotICogUGFkIHNwYWNlIG9uIHg4NjY0IGlzIGxlZnQgZm9yOgotICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcwotICovCi1zdHJ1Y3QgbXNxaWQ2NF9kcyB7Ci0Jc3RydWN0IGlwYzY0X3Blcm0gbXNnX3Blcm07Ci0JX19rZXJuZWxfdGltZV90IG1zZ19zdGltZTsJLyogbGFzdCBtc2dzbmQgdGltZSAqLwotI2lmZGVmIF9faTM4Nl9fCi0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7Ci0jZW5kaWYKLQlfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCi0jaWZkZWYgX19pMzg2X18KLQl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKLSNlbmRpZgotCV9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KLSNpZmRlZiBfX2kzODZfXwotCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOwotI2VuZGlmCi0JdW5zaWduZWQgbG9uZyAgbXNnX2NieXRlczsJLyogY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KLQl1bnNpZ25lZCBsb25nICBtc2dfcW51bTsJLyogbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHF1ZXVlICovCi0JdW5zaWduZWQgbG9uZyAgbXNnX3FieXRlczsJLyogbWF4IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLwotCV9fa2VybmVsX3BpZF90IG1zZ19sc3BpZDsJLyogcGlkIG9mIGxhc3QgbXNnc25kICovCi0JX19rZXJuZWxfcGlkX3QgbXNnX2xycGlkOwkvKiBsYXN0IHJlY2VpdmUgcGlkICovCi0JdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0OwotCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNTsKLX07Ci0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9NU0dCVUZfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21zZ2J1Zi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAppbmRleCA2YmU3ZmMyLi5iZDU1NDkwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaApAQCAtMzc0LDYgKzM3NCw3IEBACiAvKiBBTUQtViBNU1JzICovCiAKICNkZWZpbmUgTVNSX1ZNX0NSICAgICAgICAgICAgICAgICAgICAgICAweGMwMDEwMTE0CisjZGVmaW5lIE1TUl9WTV9JR05ORSAgICAgICAgICAgICAgICAgICAgMHhjMDAxMDExNQogI2RlZmluZSBNU1JfVk1fSFNBVkVfUEEgICAgICAgICAgICAgICAgIDB4YzAwMTAxMTcKIAogI2VuZGlmIC8qIF9BU01fWDg2X01TUl9JTkRFWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCmluZGV4IDQ4YWQ5ZDIuLjdlMmI2YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCkBAIC0zLDEwICszLDE2IEBACiAKICNpbmNsdWRlIDxhc20vbXNyLWluZGV4Lmg+CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIFg4Nl9JT0NfUkRNU1JfUkVHUwlfSU9XUignYycsIDB4QTAsIF9fdTMyWzhdKQorI2RlZmluZSBYODZfSU9DX1dSTVNSX1JFR1MJX0lPV1IoJ2MnLCAweEExLCBfX3UzMls4XSkKKworI2lmZGVmIF9fS0VSTkVMX18KKwogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vY3B1bWFzay5oPgpAQCAtNjcsMjMgKzczLDcgQEAKIAkJICAgICAiLnByZXZpb3VzXG5cdCIKIAkJICAgICBfQVNNX0VYVEFCTEUoMmIsIDNiKQogCQkgICAgIDogW2Vycl0gIj1yIiAoKmVyciksIEVBWF9FRFhfUkVUKHZhbCwgbG93LCBoaWdoKQotCQkgICAgIDogImMiIChtc3IpLCBbZmF1bHRdICJpIiAoLUVGQVVMVCkpOwotCXJldHVybiBFQVhfRURYX1ZBTCh2YWwsIGxvdywgaGlnaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZV9yZWFkX21zcl9hbWRfc2FmZSh1bnNpZ25lZCBpbnQgbXNyLAotCQkJCQkJICAgICAgaW50ICplcnIpCi17Ci0JREVDTEFSRV9BUkdTKHZhbCwgbG93LCBoaWdoKTsKLQotCWFzbSB2b2xhdGlsZSgiMjogcmRtc3IgOyB4b3IgJTAsJTBcbiIKLQkJICAgICAiMTpcblx0IgotCQkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG5cdCIKLQkJICAgICAiMzogIG1vdiAlMywlMCA7IGptcCAxYlxuXHQiCi0JCSAgICAgIi5wcmV2aW91c1xuXHQiCi0JCSAgICAgX0FTTV9FWFRBQkxFKDJiLCAzYikKLQkJICAgICA6ICI9ciIgKCplcnIpLCBFQVhfRURYX1JFVCh2YWwsIGxvdywgaGlnaCkKLQkJICAgICA6ICJjIiAobXNyKSwgIkQiICgweDljNWEyMDNhKSwgImkiICgtRUZBVUxUKSk7CisJCSAgICAgOiAiYyIgKG1zciksIFtmYXVsdF0gImkiICgtRUlPKSk7CiAJcmV0dXJuIEVBWF9FRFhfVkFMKHZhbCwgbG93LCBoaWdoKTsKIH0KIApAQCAtMTA2LDEzICs5NiwxNiBAQAogCQkgICAgIF9BU01fRVhUQUJMRSgyYiwgM2IpCiAJCSAgICAgOiBbZXJyXSAiPWEiIChlcnIpCiAJCSAgICAgOiAiYyIgKG1zciksICIwIiAobG93KSwgImQiIChoaWdoKSwKLQkJICAgICAgIFtmYXVsdF0gImkiICgtRUZBVUxUKQorCQkgICAgICAgW2ZhdWx0XSAiaSIgKC1FSU8pCiAJCSAgICAgOiAibWVtb3J5Iik7CiAJcmV0dXJuIGVycjsKIH0KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfcmVhZF90c2Modm9pZCk7CiAKK2V4dGVybiBpbnQgbmF0aXZlX3JkbXNyX3NhZmVfcmVncyh1MzIgcmVnc1s4XSk7CitleHRlcm4gaW50IG5hdGl2ZV93cm1zcl9zYWZlX3JlZ3ModTMyIHJlZ3NbOF0pOworCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBfX25hdGl2ZV9yZWFkX3RzYyh2b2lkKQogewogCURFQ0xBUkVfQVJHUyh2YWwsIGxvdywgaGlnaCk7CkBAIC0xODEsMTQgKzE3NCw0NCBAQAogCSpwID0gbmF0aXZlX3JlYWRfbXNyX3NhZmUobXNyLCAmZXJyKTsKIAlyZXR1cm4gZXJyOwogfQorCiBzdGF0aWMgaW5saW5lIGludCByZG1zcmxfYW1kX3NhZmUodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnApCiB7CisJdTMyIGdwcnNbOF0gPSB7IDAgfTsKIAlpbnQgZXJyOwogCi0JKnAgPSBuYXRpdmVfcmVhZF9tc3JfYW1kX3NhZmUobXNyLCAmZXJyKTsKKwlncHJzWzFdID0gbXNyOworCWdwcnNbN10gPSAweDljNWEyMDNhOworCisJZXJyID0gbmF0aXZlX3JkbXNyX3NhZmVfcmVncyhncHJzKTsKKworCSpwID0gZ3Byc1swXSB8ICgodTY0KWdwcnNbMl0gPDwgMzIpOworCiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgd3Jtc3JsX2FtZF9zYWZlKHVuc2lnbmVkIG1zciwgdW5zaWduZWQgbG9uZyBsb25nIHZhbCkKK3sKKwl1MzIgZ3Byc1s4XSA9IHsgMCB9OworCisJZ3Byc1swXSA9ICh1MzIpdmFsOworCWdwcnNbMV0gPSBtc3I7CisJZ3Byc1syXSA9IHZhbCA+PiAzMjsKKwlncHJzWzddID0gMHg5YzVhMjAzYTsKKworCXJldHVybiBuYXRpdmVfd3Jtc3Jfc2FmZV9yZWdzKGdwcnMpOworfQorCitzdGF0aWMgaW5saW5lIGludCByZG1zcl9zYWZlX3JlZ3ModTMyIHJlZ3NbOF0pCit7CisJcmV0dXJuIG5hdGl2ZV9yZG1zcl9zYWZlX3JlZ3MocmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdybXNyX3NhZmVfcmVncyh1MzIgcmVnc1s4XSkKK3sKKwlyZXR1cm4gbmF0aXZlX3dybXNyX3NhZmVfcmVncyhyZWdzKTsKK30KKwogI2RlZmluZSByZHRzY2wobG93KQkJCQkJCVwKIAkoKGxvdykgPSAodTMyKV9fbmF0aXZlX3JlYWRfdHNjKCkpCiAKQEAgLTIyOCw2ICsyNTEsOCBAQAogdm9pZCB3cm1zcl9vbl9jcHVzKGNvbnN0IGNwdW1hc2tfdCAqbWFzaywgdTMyIG1zcl9ubywgc3RydWN0IG1zciAqbXNycyk7CiBpbnQgcmRtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpOwogaW50IHdybXNyX3NhZmVfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiBsLCB1MzIgaCk7CitpbnQgcmRtc3Jfc2FmZV9yZWdzX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgcmVnc1s4XSk7CitpbnQgd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgcmVnc1s4XSk7CiAjZWxzZSAgLyogIENPTkZJR19TTVAgICovCiBzdGF0aWMgaW5saW5lIGludCByZG1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpCiB7CkBAIC0yNTgsNyArMjgzLDE1IEBACiB7CiAJcmV0dXJuIHdybXNyX3NhZmUobXNyX25vLCBsLCBoKTsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHJkbXNyX3NhZmVfcmVnc19vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIHJlZ3NbOF0pCit7CisJcmV0dXJuIHJkbXNyX3NhZmVfcmVncyhyZWdzKTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHdybXNyX3NhZmVfcmVnc19vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIHJlZ3NbOF0pCit7CisJcmV0dXJuIHdybXNyX3NhZmVfcmVncyhyZWdzKTsKK30KICNlbmRpZiAgLyogQ09ORklHX1NNUCAqLwotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfQVNNX1g4Nl9NU1JfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXRyci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXRyci5oCmluZGV4IGE1MWFkYTguLjQzNjVmZmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL210cnIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tdHJyLmgKQEAgLTEyMSw2ICsxMjEsOSBAQAogZXh0ZXJuIHZvaWQgbXRycl9jZW50YXVyX3JlcG9ydF9tY3IoaW50IG1jciwgdTMyIGxvLCB1MzIgaGkpOwogZXh0ZXJuIHZvaWQgbXRycl9hcF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbXRycl9icF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0X210cnJfYXBzX2RlbGF5ZWRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG10cnJfYXBzX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBtdHJyX2JwX3Jlc3RvcmUodm9pZCk7CiBleHRlcm4gaW50IG10cnJfdHJpbV91bmNhY2hlZF9tZW1vcnkodW5zaWduZWQgbG9uZyBlbmRfcGZuKTsKIGV4dGVybiBpbnQgYW1kX3NwZWNpYWxfZGVmYXVsdF9tdHJyKHZvaWQpOwogIyAgZWxzZQpAQCAtMTYxLDYgKzE2NCw5IEBACiAKICNkZWZpbmUgbXRycl9hcF9pbml0KCkgZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lIG10cnJfYnBfaW5pdCgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBzZXRfbXRycl9hcHNfZGVsYXllZF9pbml0KCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIG10cnJfYXBzX2luaXQoKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgbXRycl9icF9yZXN0b3JlKCkgZG8ge30gd2hpbGUgKDApCiAjICBlbmRpZgogCiAjaWZkZWYgQ09ORklHX0NPTVBBVApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ubWkuaAppbmRleCBjODZlNWVkNC4uZTYzY2Y3ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmgKQEAgLTQ1LDggKzQ1LDggQEAKIAkJCXZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7CiBleHRlcm4gaW50IHVua25vd25fbm1pX3BhbmljOwogCi12b2lkIF9fdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSh2b2lkKTsKLSNkZWZpbmUgdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSgpIF9fdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSgpCit2b2lkIGFyY2hfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSh2b2lkKTsKKyNkZWZpbmUgYXJjaF90cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlIGFyY2hfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxpc2Vfbm1pX3dhdGNoZG9nKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYW0uaAppbmRleCA2ZjBkMDQyLi45NjVkNDU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmFtLmgKQEAgLTEsMjIgKzEgQEAKLSNpZm5kZWYgX0FTTV9YODZfUEFSQU1fSAotI2RlZmluZSBfQVNNX1g4Nl9QQVJBTV9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jIGRlZmluZSBIWgkJQ09ORklHX0haCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KLSMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgKi8KLSMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKSAgICAgICAvKiBpbiAidGlja3MiIGxpa2UgdGltZXMoKSAqLwotI2VuZGlmCi0KLSNpZm5kZWYgSFoKLSNkZWZpbmUgSFogMTAwCi0jZW5kaWYKLQotI2RlZmluZSBFWEVDX1BBR0VTSVpFCTQwOTYKLQotI2lmbmRlZiBOT0dST1VQCi0jZGVmaW5lIE5PR1JPVVAJCSgtMSkKLSNlbmRpZgotCi0jZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KLQotI2VuZGlmIC8qIF9BU01fWDg2X1BBUkFNX0ggKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYXJhbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKaW5kZXggNGZiMzdjOC4uNDBkNjU4NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCkBAIC03LDY4OSArNywxMSBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS5oPgogCi0vKiBCaXRtYXNrIG9mIHdoYXQgY2FuIGJlIGNsb2JiZXJlZDogdXN1YWxseSBhdCBsZWFzdCBlYXguICovCi0jZGVmaW5lIENMQlJfTk9ORSAwCi0jZGVmaW5lIENMQlJfRUFYICAoMSA8PCAwKQotI2RlZmluZSBDTEJSX0VDWCAgKDEgPDwgMSkKLSNkZWZpbmUgQ0xCUl9FRFggICgxIDw8IDIpCi0jZGVmaW5lIENMQlJfRURJICAoMSA8PCAzKQotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotLyogQ0xCUl9BTlkgc2hvdWxkIG1hdGNoIGFsbCByZWdzIHBsYXRmb3JtIGhhcy4gRm9yIGkzODYsIHRoYXQncyBqdXN0IGl0ICovCi0jZGVmaW5lIENMQlJfQU5ZICAoKDEgPDwgNCkgLSAxKQotCi0jZGVmaW5lIENMQlJfQVJHX1JFR1MJKENMQlJfRUFYIHwgQ0xCUl9FRFggfCBDTEJSX0VDWCkKLSNkZWZpbmUgQ0xCUl9SRVRfUkVHCShDTEJSX0VBWCB8IENMQlJfRURYKQotI2RlZmluZSBDTEJSX1NDUkFUQ0gJKDApCi0jZWxzZQotI2RlZmluZSBDTEJSX1JBWCAgQ0xCUl9FQVgKLSNkZWZpbmUgQ0xCUl9SQ1ggIENMQlJfRUNYCi0jZGVmaW5lIENMQlJfUkRYICBDTEJSX0VEWAotI2RlZmluZSBDTEJSX1JESSAgQ0xCUl9FREkKLSNkZWZpbmUgQ0xCUl9SU0kgICgxIDw8IDQpCi0jZGVmaW5lIENMQlJfUjggICAoMSA8PCA1KQotI2RlZmluZSBDTEJSX1I5ICAgKDEgPDwgNikKLSNkZWZpbmUgQ0xCUl9SMTAgICgxIDw8IDcpCi0jZGVmaW5lIENMQlJfUjExICAoMSA8PCA4KQotCi0jZGVmaW5lIENMQlJfQU5ZICAoKDEgPDwgOSkgLSAxKQotCi0jZGVmaW5lIENMQlJfQVJHX1JFR1MJKENMQlJfUkRJIHwgQ0xCUl9SU0kgfCBDTEJSX1JEWCB8IFwKLQkJCSBDTEJSX1JDWCB8IENMQlJfUjggfCBDTEJSX1I5KQotI2RlZmluZSBDTEJSX1JFVF9SRUcJKENMQlJfUkFYKQotI2RlZmluZSBDTEJSX1NDUkFUQ0gJKENMQlJfUjEwIHwgQ0xCUl9SMTEpCi0KLSNpbmNsdWRlIDxhc20vZGVzY19kZWZzLmg+Ci0jZW5kaWYgLyogWDg2XzY0ICovCi0KLSNkZWZpbmUgQ0xCUl9DQUxMRUVfU0FWRSAoKENMQlJfQVJHX1JFR1MgfCBDTEJSX1NDUkFUQ0gpICYgfkNMQlJfUkVUX1JFRykKKyNpbmNsdWRlIDxhc20vcGFyYXZpcnRfdHlwZXMuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9kZXNjX2RlZnMuaD4KLQotc3RydWN0IHBhZ2U7Ci1zdHJ1Y3QgdGhyZWFkX3N0cnVjdDsKLXN0cnVjdCBkZXNjX3B0cjsKLXN0cnVjdCB0c3Nfc3RydWN0Owotc3RydWN0IG1tX3N0cnVjdDsKLXN0cnVjdCBkZXNjX3N0cnVjdDsKLXN0cnVjdCB0YXNrX3N0cnVjdDsKLQotLyoKLSAqIFdyYXBwZXIgdHlwZSBmb3IgcG9pbnRlcnMgdG8gY29kZSB3aGljaCB1c2VzIHRoZSBub24tc3RhbmRhcmQKLSAqIGNhbGxpbmcgY29udmVudGlvbi4gIFNlZSBQVl9DQUxMX1NBVkVfUkVHU19USFVOSyBiZWxvdy4KLSAqLwotc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHsKLQl2b2lkICpmdW5jOwotfTsKLQotLyogZ2VuZXJhbCBpbmZvICovCi1zdHJ1Y3QgcHZfaW5mbyB7Ci0JdW5zaWduZWQgaW50IGtlcm5lbF9ycGw7Ci0JaW50IHNoYXJlZF9rZXJuZWxfcG1kOwotCWludCBwYXJhdmlydF9lbmFibGVkOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci19OwotCi1zdHJ1Y3QgcHZfaW5pdF9vcHMgewotCS8qCi0JICogUGF0Y2ggbWF5IHJlcGxhY2Ugb25lIG9mIHRoZSBkZWZpbmVkIGNvZGUgc2VxdWVuY2VzIHdpdGgKLQkgKiBhcmJpdHJhcnkgY29kZSwgc3ViamVjdCB0byB0aGUgc2FtZSByZWdpc3RlciBjb25zdHJhaW50cy4KLQkgKiBUaGlzIGdlbmVyYWxseSBtZWFucyB0aGUgY29kZSBpcyBub3QgZnJlZSB0byBjbG9iYmVyIGFueQotCSAqIHJlZ2lzdGVycyBvdGhlciB0aGFuIEVBWC4gIFRoZSBwYXRjaCBmdW5jdGlvbiBzaG91bGQgcmV0dXJuCi0JICogdGhlIG51bWJlciBvZiBieXRlcyBvZiBjb2RlIGdlbmVyYXRlZCwgYXMgd2Ugbm9wIHBhZCB0aGUKLQkgKiByZXN0IGluIGdlbmVyaWMgY29kZS4KLQkgKi8KLQl1bnNpZ25lZCAoKnBhdGNoKSh1OCB0eXBlLCB1MTYgY2xvYmJlciwgdm9pZCAqaW5zbmJ1ZiwKLQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsZW4pOwotCi0JLyogQmFzaWMgYXJjaC1zcGVjaWZpYyBzZXR1cCAqLwotCXZvaWQgKCphcmNoX3NldHVwKSh2b2lkKTsKLQljaGFyICooKm1lbW9yeV9zZXR1cCkodm9pZCk7Ci0Jdm9pZCAoKnBvc3RfYWxsb2NhdG9yX2luaXQpKHZvaWQpOwotCi0JLyogUHJpbnQgYSBiYW5uZXIgdG8gaWRlbnRpZnkgdGhlIGVudmlyb25tZW50ICovCi0Jdm9pZCAoKmJhbm5lcikodm9pZCk7Ci19OwotCi0KLXN0cnVjdCBwdl9sYXp5X29wcyB7Ci0JLyogU2V0IGRlZmVycmVkIHVwZGF0ZSBtb2RlLCB1c2VkIGZvciBiYXRjaGluZyBvcGVyYXRpb25zLiAqLwotCXZvaWQgKCplbnRlcikodm9pZCk7Ci0Jdm9pZCAoKmxlYXZlKSh2b2lkKTsKLX07Ci0KLXN0cnVjdCBwdl90aW1lX29wcyB7Ci0Jdm9pZCAoKnRpbWVfaW5pdCkodm9pZCk7Ci0KLQkvKiBTZXQgYW5kIHNldCB0aW1lIG9mIGRheSAqLwotCXVuc2lnbmVkIGxvbmcgKCpnZXRfd2FsbGNsb2NrKSh2b2lkKTsKLQlpbnQgKCpzZXRfd2FsbGNsb2NrKSh1bnNpZ25lZCBsb25nKTsKLQotCXVuc2lnbmVkIGxvbmcgbG9uZyAoKnNjaGVkX2Nsb2NrKSh2b2lkKTsKLQl1bnNpZ25lZCBsb25nICgqZ2V0X3RzY19raHopKHZvaWQpOwotfTsKLQotc3RydWN0IHB2X2NwdV9vcHMgewotCS8qIGhvb2tzIGZvciB2YXJpb3VzIHByaXZpbGVnZWQgaW5zdHJ1Y3Rpb25zICovCi0JdW5zaWduZWQgbG9uZyAoKmdldF9kZWJ1Z3JlZykoaW50IHJlZ25vKTsKLQl2b2lkICgqc2V0X2RlYnVncmVnKShpbnQgcmVnbm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpOwotCi0Jdm9pZCAoKmNsdHMpKHZvaWQpOwotCi0JdW5zaWduZWQgbG9uZyAoKnJlYWRfY3IwKSh2b2lkKTsKLQl2b2lkICgqd3JpdGVfY3IwKSh1bnNpZ25lZCBsb25nKTsKLQotCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyNF9zYWZlKSh2b2lkKTsKLQl1bnNpZ25lZCBsb25nICgqcmVhZF9jcjQpKHZvaWQpOwotCXZvaWQgKCp3cml0ZV9jcjQpKHVuc2lnbmVkIGxvbmcpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyOCkodm9pZCk7Ci0Jdm9pZCAoKndyaXRlX2NyOCkodW5zaWduZWQgbG9uZyk7Ci0jZW5kaWYKLQotCS8qIFNlZ21lbnQgZGVzY3JpcHRvciBoYW5kbGluZyAqLwotCXZvaWQgKCpsb2FkX3RyX2Rlc2MpKHZvaWQpOwotCXZvaWQgKCpsb2FkX2dkdCkoY29uc3Qgc3RydWN0IGRlc2NfcHRyICopOwotCXZvaWQgKCpsb2FkX2lkdCkoY29uc3Qgc3RydWN0IGRlc2NfcHRyICopOwotCXZvaWQgKCpzdG9yZV9nZHQpKHN0cnVjdCBkZXNjX3B0ciAqKTsKLQl2b2lkICgqc3RvcmVfaWR0KShzdHJ1Y3QgZGVzY19wdHIgKik7Ci0Jdm9pZCAoKnNldF9sZHQpKGNvbnN0IHZvaWQgKmRlc2MsIHVuc2lnbmVkIGVudHJpZXMpOwotCXVuc2lnbmVkIGxvbmcgKCpzdG9yZV90cikodm9pZCk7Ci0Jdm9pZCAoKmxvYWRfdGxzKShzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCwgdW5zaWduZWQgaW50IGNwdSk7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXZvaWQgKCpsb2FkX2dzX2luZGV4KSh1bnNpZ25lZCBpbnQgaWR4KTsKLSNlbmRpZgotCXZvaWQgKCp3cml0ZV9sZHRfZW50cnkpKHN0cnVjdCBkZXNjX3N0cnVjdCAqbGR0LCBpbnQgZW50cnludW0sCi0JCQkJY29uc3Qgdm9pZCAqZGVzYyk7Ci0Jdm9pZCAoKndyaXRlX2dkdF9lbnRyeSkoc3RydWN0IGRlc2Nfc3RydWN0ICosCi0JCQkJaW50IGVudHJ5bnVtLCBjb25zdCB2b2lkICpkZXNjLCBpbnQgc2l6ZSk7Ci0Jdm9pZCAoKndyaXRlX2lkdF9lbnRyeSkoZ2F0ZV9kZXNjICosCi0JCQkJaW50IGVudHJ5bnVtLCBjb25zdCBnYXRlX2Rlc2MgKmdhdGUpOwotCXZvaWQgKCphbGxvY19sZHQpKHN0cnVjdCBkZXNjX3N0cnVjdCAqbGR0LCB1bnNpZ25lZCBlbnRyaWVzKTsKLQl2b2lkICgqZnJlZV9sZHQpKHN0cnVjdCBkZXNjX3N0cnVjdCAqbGR0LCB1bnNpZ25lZCBlbnRyaWVzKTsKLQotCXZvaWQgKCpsb2FkX3NwMCkoc3RydWN0IHRzc19zdHJ1Y3QgKnRzcywgc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQpOwotCi0Jdm9pZCAoKnNldF9pb3BsX21hc2spKHVuc2lnbmVkIG1hc2spOwotCi0Jdm9pZCAoKndiaW52ZCkodm9pZCk7Ci0Jdm9pZCAoKmlvX2RlbGF5KSh2b2lkKTsKLQotCS8qIGNwdWlkIGVtdWxhdGlvbiwgbW9zdGx5IHNvIHRoYXQgY2FwcyBiaXRzIGNhbiBiZSBkaXNhYmxlZCAqLwotCXZvaWQgKCpjcHVpZCkodW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAotCQkgICAgICB1bnNpZ25lZCBpbnQgKmVjeCwgdW5zaWduZWQgaW50ICplZHgpOwotCi0JLyogTVNSLCBQTUMgYW5kIFRTUiBvcGVyYXRpb25zLgotCSAgIGVyciA9IDAvLUVGQVVMVC4gIHdybXNyIHJldHVybnMgMC8tRUZBVUxULiAqLwotCXU2NCAoKnJlYWRfbXNyX2FtZCkodW5zaWduZWQgaW50IG1zciwgaW50ICplcnIpOwotCXU2NCAoKnJlYWRfbXNyKSh1bnNpZ25lZCBpbnQgbXNyLCBpbnQgKmVycik7Ci0JaW50ICgqd3JpdGVfbXNyKSh1bnNpZ25lZCBpbnQgbXNyLCB1bnNpZ25lZCBsb3csIHVuc2lnbmVkIGhpZ2gpOwotCi0JdTY0ICgqcmVhZF90c2MpKHZvaWQpOwotCXU2NCAoKnJlYWRfcG1jKShpbnQgY291bnRlcik7Ci0JdW5zaWduZWQgbG9uZyBsb25nICgqcmVhZF90c2NwKSh1bnNpZ25lZCBpbnQgKmF1eCk7Ci0KLQkvKgotCSAqIEF0b21pY2FsbHkgZW5hYmxlIGludGVycnVwdHMgYW5kIHJldHVybiB0byB1c2Vyc3BhY2UuICBUaGlzCi0JICogaXMgb25seSBldmVyIHVzZWQgdG8gcmV0dXJuIHRvIDMyLWJpdCBwcm9jZXNzZXM7IGluIGEKLQkgKiA2NC1iaXQga2VybmVsLCBpdCdzIHVzZWQgZm9yIDMyLW9uLTY0IGNvbXBhdCBwcm9jZXNzZXMsIGJ1dAotCSAqIG5ldmVyIG5hdGl2ZSA2NC1iaXQgcHJvY2Vzc2VzLiAgKEp1bXAsIG5vdCBjYWxsLikKLQkgKi8KLQl2b2lkICgqaXJxX2VuYWJsZV9zeXNleGl0KSh2b2lkKTsKLQotCS8qCi0JICogU3dpdGNoIHRvIHVzZXJtb2RlIGdzIGFuZCByZXR1cm4gdG8gNjQtYml0IHVzZXJtb2RlIHVzaW5nCi0JICogc3lzcmV0LiAgT25seSB1c2VkIGluIDY0LWJpdCBrZXJuZWxzIHRvIHJldHVybiB0byA2NC1iaXQKLQkgKiBwcm9jZXNzZXMuICBVc2VybW9kZSByZWdpc3RlciBzdGF0ZSwgaW5jbHVkaW5nICVyc3AsIG11c3QKLQkgKiBhbHJlYWR5IGJlIHJlc3RvcmVkLgotCSAqLwotCXZvaWQgKCp1c2VyZ3Nfc3lzcmV0NjQpKHZvaWQpOwotCi0JLyoKLQkgKiBTd2l0Y2ggdG8gdXNlcm1vZGUgZ3MgYW5kIHJldHVybiB0byAzMi1iaXQgdXNlcm1vZGUgdXNpbmcKLQkgKiBzeXNyZXQuICBVc2VkIHRvIHJldHVybiB0byAzMi1vbi02NCBjb21wYXQgcHJvY2Vzc2VzLgotCSAqIE90aGVyIHVzZXJtb2RlIHJlZ2lzdGVyIHN0YXRlLCBpbmNsdWRpbmcgJWVzcCwgbXVzdCBhbHJlYWR5Ci0JICogYmUgcmVzdG9yZWQuCi0JICovCi0Jdm9pZCAoKnVzZXJnc19zeXNyZXQzMikodm9pZCk7Ci0KLQkvKiBOb3JtYWwgaXJldC4gIEp1bXAgdG8gdGhpcyB3aXRoIHRoZSBzdGFuZGFyZCBpcmV0IHN0YWNrCi0JICAgZnJhbWUgc2V0IHVwLiAqLwotCXZvaWQgKCppcmV0KSh2b2lkKTsKLQotCXZvaWQgKCpzd2FwZ3MpKHZvaWQpOwotCi0Jdm9pZCAoKnN0YXJ0X2NvbnRleHRfc3dpdGNoKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpOwotCXZvaWQgKCplbmRfY29udGV4dF9zd2l0Y2gpKHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCk7Ci19OwotCi1zdHJ1Y3QgcHZfaXJxX29wcyB7Ci0Jdm9pZCAoKmluaXRfSVJRKSh2b2lkKTsKLQotCS8qCi0JICogR2V0L3NldCBpbnRlcnJ1cHQgc3RhdGUuICBzYXZlX2ZsIGFuZCByZXN0b3JlX2ZsIGFyZSBvbmx5Ci0JICogZXhwZWN0ZWQgdG8gdXNlIFg4Nl9FRkxBR1NfSUY7IGFsbCBvdGhlciBiaXRzCi0JICogcmV0dXJuZWQgZnJvbSBzYXZlX2ZsIGFyZSB1bmRlZmluZWQsIGFuZCBtYXkgYmUgaWdub3JlZCBieQotCSAqIHJlc3RvcmVfZmwuCi0JICoKLQkgKiBOT1RFOiBUaGVzZSBmdW5jdGlvbnMgY2FsbGVycyBleHBlY3QgdGhlIGNhbGxlZSB0byBwcmVzZXJ2ZQotCSAqIG1vcmUgcmVnaXN0ZXJzIHRoYW4gdGhlIHN0YW5kYXJkIEMgY2FsbGluZyBjb252ZW50aW9uLgotCSAqLwotCXN0cnVjdCBwYXJhdmlydF9jYWxsZWVfc2F2ZSBzYXZlX2ZsOwotCXN0cnVjdCBwYXJhdmlydF9jYWxsZWVfc2F2ZSByZXN0b3JlX2ZsOwotCXN0cnVjdCBwYXJhdmlydF9jYWxsZWVfc2F2ZSBpcnFfZGlzYWJsZTsKLQlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgaXJxX2VuYWJsZTsKLQotCXZvaWQgKCpzYWZlX2hhbHQpKHZvaWQpOwotCXZvaWQgKCpoYWx0KSh2b2lkKTsKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLQl2b2lkICgqYWRqdXN0X2V4Y2VwdGlvbl9mcmFtZSkodm9pZCk7Ci0jZW5kaWYKLX07Ci0KLXN0cnVjdCBwdl9hcGljX29wcyB7Ci0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0Jdm9pZCAoKnNldHVwX2Jvb3RfY2xvY2spKHZvaWQpOwotCXZvaWQgKCpzZXR1cF9zZWNvbmRhcnlfY2xvY2spKHZvaWQpOwotCi0Jdm9pZCAoKnN0YXJ0dXBfaXBpX2hvb2spKGludCBwaHlzX2FwaWNpZCwKLQkJCQkgdW5zaWduZWQgbG9uZyBzdGFydF9laXAsCi0JCQkJIHVuc2lnbmVkIGxvbmcgc3RhcnRfZXNwKTsKLSNlbmRpZgotfTsKLQotc3RydWN0IHB2X21tdV9vcHMgewotCS8qCi0JICogQ2FsbGVkIGJlZm9yZS9hZnRlciBpbml0X21tIHBhZ2V0YWJsZSBzZXR1cC4gc2V0dXBfc3RhcnQKLQkgKiBtYXkgcmVzZXQgJWNyMywgYW5kIG1heSBwcmUtaW5zdGFsbCBwYXJ0cyBvZiB0aGUgcGFnZXRhYmxlOwotCSAqIHBhZ2V0YWJsZSBzZXR1cCBpcyBleHBlY3RlZCB0byBwcmVzZXJ2ZSBhbnkgZXhpc3RpbmcKLQkgKiBtYXBwaW5nLgotCSAqLwotCXZvaWQgKCpwYWdldGFibGVfc2V0dXBfc3RhcnQpKHBnZF90ICpwZ2RfYmFzZSk7Ci0Jdm9pZCAoKnBhZ2V0YWJsZV9zZXR1cF9kb25lKShwZ2RfdCAqcGdkX2Jhc2UpOwotCi0JdW5zaWduZWQgbG9uZyAoKnJlYWRfY3IyKSh2b2lkKTsKLQl2b2lkICgqd3JpdGVfY3IyKSh1bnNpZ25lZCBsb25nKTsKLQotCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyMykodm9pZCk7Ci0Jdm9pZCAoKndyaXRlX2NyMykodW5zaWduZWQgbG9uZyk7Ci0KLQkvKgotCSAqIEhvb2tzIGZvciBpbnRlcmNlcHRpbmcgdGhlIGNyZWF0aW9uL3VzZS9kZXN0cnVjdGlvbiBvZiBhbgotCSAqIG1tX3N0cnVjdC4KLQkgKi8KLQl2b2lkICgqYWN0aXZhdGVfbW0pKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsCi0JCQkgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCk7Ci0Jdm9pZCAoKmR1cF9tbWFwKShzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwKLQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Ci0Jdm9pZCAoKmV4aXRfbW1hcCkoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotCi0KLQkvKiBUTEIgb3BlcmF0aW9ucyAqLwotCXZvaWQgKCpmbHVzaF90bGJfdXNlcikodm9pZCk7Ci0Jdm9pZCAoKmZsdXNoX3RsYl9rZXJuZWwpKHZvaWQpOwotCXZvaWQgKCpmbHVzaF90bGJfc2luZ2xlKSh1bnNpZ25lZCBsb25nIGFkZHIpOwotCXZvaWQgKCpmbHVzaF90bGJfb3RoZXJzKShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywKLQkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJIHVuc2lnbmVkIGxvbmcgdmEpOwotCi0JLyogSG9va3MgZm9yIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwYWdldGFibGUgdG9wLWxldmVsICovCi0JaW50ICAoKnBnZF9hbGxvYykoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotCXZvaWQgKCpwZ2RfZnJlZSkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpOwotCi0JLyoKLQkgKiBIb29rcyBmb3IgYWxsb2NhdGluZy9yZWxlYXNpbmcgcGFnZXRhYmxlIHBhZ2VzIHdoZW4gdGhleSdyZQotCSAqIGF0dGFjaGVkIHRvIGEgcGFnZXRhYmxlCi0JICovCi0Jdm9pZCAoKmFsbG9jX3B0ZSkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKTsKLQl2b2lkICgqYWxsb2NfcG1kKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pOwotCXZvaWQgKCphbGxvY19wbWRfY2xvbmUpKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGNsb25lcGZuLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQl2b2lkICgqYWxsb2NfcHVkKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pOwotCXZvaWQgKCpyZWxlYXNlX3B0ZSkodW5zaWduZWQgbG9uZyBwZm4pOwotCXZvaWQgKCpyZWxlYXNlX3BtZCkodW5zaWduZWQgbG9uZyBwZm4pOwotCXZvaWQgKCpyZWxlYXNlX3B1ZCkodW5zaWduZWQgbG9uZyBwZm4pOwotCi0JLyogUGFnZXRhYmxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKi8KLQl2b2lkICgqc2V0X3B0ZSkocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCk7Ci0Jdm9pZCAoKnNldF9wdGVfYXQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKTsKLQl2b2lkICgqc2V0X3BtZCkocG1kX3QgKnBtZHAsIHBtZF90IHBtZHZhbCk7Ci0Jdm9pZCAoKnB0ZV91cGRhdGUpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICBwdGVfdCAqcHRlcCk7Ci0Jdm9pZCAoKnB0ZV91cGRhdGVfZGVmZXIpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKLQotCXB0ZV90ICgqcHRlcF9tb2RpZnlfcHJvdF9zdGFydCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkJcHRlX3QgKnB0ZXApOwotCXZvaWQgKCpwdGVwX21vZGlmeV9wcm90X2NvbW1pdCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkJcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7Ci0KLQlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcHRlX3ZhbDsKLQlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgbWFrZV9wdGU7Ci0KLQlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcGdkX3ZhbDsKLQlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgbWFrZV9wZ2Q7Ci0KLSNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKLSNpZmRlZiBDT05GSUdfWDg2X1BBRQotCXZvaWQgKCpzZXRfcHRlX2F0b21pYykocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCk7Ci0Jdm9pZCAoKnB0ZV9jbGVhcikoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgcHRlX3QgKnB0ZXApOwotCXZvaWQgKCpwbWRfY2xlYXIpKHBtZF90ICpwbWRwKTsKLQotI2VuZGlmCS8qIENPTkZJR19YODZfUEFFICovCi0KLQl2b2lkICgqc2V0X3B1ZCkocHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZHZhbCk7Ci0KLQlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcG1kX3ZhbDsKLQlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgbWFrZV9wbWQ7Ci0KLSNpZiBQQUdFVEFCTEVfTEVWRUxTID09IDQKLQlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcHVkX3ZhbDsKLQlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgbWFrZV9wdWQ7Ci0KLQl2b2lkICgqc2V0X3BnZCkocGdkX3QgKnB1ZHAsIHBnZF90IHBnZHZhbCk7Ci0jZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA9PSA0ICovCi0jZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA+PSAzICovCi0KLSNpZmRlZiBDT05GSUdfSElHSFBURQotCXZvaWQgKigqa21hcF9hdG9taWNfcHRlKShzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpOwotI2VuZGlmCi0KLQlzdHJ1Y3QgcHZfbGF6eV9vcHMgbGF6eV9tb2RlOwotCi0JLyogZG9tMCBvcHMgKi8KLQotCS8qIFNvbWV0aW1lcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpcyBhIHBmbiwgYW5kIHNvbWV0aW1lcyBpdHMKLQkgICBhbiBtZm4uICBXZSBjYW4gdGVsbCB3aGljaCBpcyB3aGljaCBmcm9tIHRoZSBpbmRleC4gKi8KLQl2b2lkICgqc2V0X2ZpeG1hcCkodW5zaWduZWQgLyogZW51bSBmaXhlZF9hZGRyZXNzZXMgKi8gaWR4LAotCQkJICAgcGh5c19hZGRyX3QgcGh5cywgcGdwcm90X3QgZmxhZ3MpOwotfTsKLQotc3RydWN0IHJhd19zcGlubG9jazsKLXN0cnVjdCBwdl9sb2NrX29wcyB7Ci0JaW50ICgqc3Bpbl9pc19sb2NrZWQpKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spOwotCWludCAoKnNwaW5faXNfY29udGVuZGVkKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKLQl2b2lkICgqc3Bpbl9sb2NrKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKLQl2b2lkICgqc3Bpbl9sb2NrX2ZsYWdzKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLQlpbnQgKCpzcGluX3RyeWxvY2spKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spOwotCXZvaWQgKCpzcGluX3VubG9jaykoc3RydWN0IHJhd19zcGlubG9jayAqbG9jayk7Ci19OwotCi0vKiBUaGlzIGNvbnRhaW5zIGFsbCB0aGUgcGFyYXZpcnQgc3RydWN0dXJlczogd2UgZ2V0IGEgY29udmVuaWVudAotICogbnVtYmVyIGZvciBlYWNoIGZ1bmN0aW9uIHVzaW5nIHRoZSBvZmZzZXQgd2hpY2ggd2UgdXNlIHRvIGluZGljYXRlCi0gKiB3aGF0IHRvIHBhdGNoLiAqLwotc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3RlbXBsYXRlIHsKLQlzdHJ1Y3QgcHZfaW5pdF9vcHMgcHZfaW5pdF9vcHM7Ci0Jc3RydWN0IHB2X3RpbWVfb3BzIHB2X3RpbWVfb3BzOwotCXN0cnVjdCBwdl9jcHVfb3BzIHB2X2NwdV9vcHM7Ci0Jc3RydWN0IHB2X2lycV9vcHMgcHZfaXJxX29wczsKLQlzdHJ1Y3QgcHZfYXBpY19vcHMgcHZfYXBpY19vcHM7Ci0Jc3RydWN0IHB2X21tdV9vcHMgcHZfbW11X29wczsKLQlzdHJ1Y3QgcHZfbG9ja19vcHMgcHZfbG9ja19vcHM7Ci19OwotCi1leHRlcm4gc3RydWN0IHB2X2luZm8gcHZfaW5mbzsKLWV4dGVybiBzdHJ1Y3QgcHZfaW5pdF9vcHMgcHZfaW5pdF9vcHM7Ci1leHRlcm4gc3RydWN0IHB2X3RpbWVfb3BzIHB2X3RpbWVfb3BzOwotZXh0ZXJuIHN0cnVjdCBwdl9jcHVfb3BzIHB2X2NwdV9vcHM7Ci1leHRlcm4gc3RydWN0IHB2X2lycV9vcHMgcHZfaXJxX29wczsKLWV4dGVybiBzdHJ1Y3QgcHZfYXBpY19vcHMgcHZfYXBpY19vcHM7Ci1leHRlcm4gc3RydWN0IHB2X21tdV9vcHMgcHZfbW11X29wczsKLWV4dGVybiBzdHJ1Y3QgcHZfbG9ja19vcHMgcHZfbG9ja19vcHM7Ci0KLSNkZWZpbmUgUEFSQVZJUlRfUEFUQ0goeCkJCQkJCVwKLQkob2Zmc2V0b2Yoc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3RlbXBsYXRlLCB4KSAvIHNpemVvZih2b2lkICopKQotCi0jZGVmaW5lIHBhcmF2aXJ0X3R5cGUob3ApCQkJCVwKLQlbcGFyYXZpcnRfdHlwZW51bV0gImkiIChQQVJBVklSVF9QQVRDSChvcCkpLAlcCi0JW3BhcmF2aXJ0X29wcHRyXSAiaSIgKCYob3ApKQotI2RlZmluZSBwYXJhdmlydF9jbG9iYmVyKGNsb2JiZXIpCQlcCi0JW3BhcmF2aXJ0X2Nsb2JiZXJdICJpIiAoY2xvYmJlcikKLQotLyoKLSAqIEdlbmVyYXRlIHNvbWUgY29kZSwgYW5kIG1hcmsgaXQgYXMgcGF0Y2hhYmxlIGJ5IHRoZQotICogYXBwbHlfcGFyYXZpcnQoKSBhbHRlcm5hdGUgaW5zdHJ1Y3Rpb24gcGF0Y2hlci4KLSAqLwotI2RlZmluZSBfcGFyYXZpcnRfYWx0KGluc25fc3RyaW5nLCB0eXBlLCBjbG9iYmVyKQlcCi0JIjc3MTpcblx0IiBpbnNuX3N0cmluZyAiXG4iICI3NzI6XG4iCQlcCi0JIi5wdXNoc2VjdGlvbiAucGFyYWluc3RydWN0aW9ucyxcImFcIlxuIglcCi0JX0FTTV9BTElHTiAiXG4iCQkJCQlcCi0JX0FTTV9QVFIgIiA3NzFiXG4iCQkJCVwKLQkiICAuYnl0ZSAiIHR5cGUgIlxuIgkJCQlcCi0JIiAgLmJ5dGUgNzcyYi03NzFiXG4iCQkJCVwKLQkiICAuc2hvcnQgIiBjbG9iYmVyICJcbiIJCQlcCi0JIi5wb3BzZWN0aW9uXG4iCi0KLS8qIEdlbmVyYXRlIHBhdGNoYWJsZSBjb2RlLCB3aXRoIHRoZSBkZWZhdWx0IGFzbSBwYXJhbWV0ZXJzLiAqLwotI2RlZmluZSBwYXJhdmlydF9hbHQoaW5zbl9zdHJpbmcpCQkJCQlcCi0JX3BhcmF2aXJ0X2FsdChpbnNuX3N0cmluZywgIiVjW3BhcmF2aXJ0X3R5cGVudW1dIiwgIiVjW3BhcmF2aXJ0X2Nsb2JiZXJdIikKLQotLyogU2ltcGxlIGluc3RydWN0aW9uIHBhdGNoaW5nIGNvZGUuICovCi0jZGVmaW5lIERFRl9OQVRJVkUob3BzLCBuYW1lLCBjb2RlKSAJCQkJCVwKLQlleHRlcm4gY29uc3QgY2hhciBzdGFydF8jI29wcyMjXyMjbmFtZVtdLCBlbmRfIyNvcHMjI18jI25hbWVbXTsJXAotCWFzbSgic3RhcnRfIiAjb3BzICJfIiAjbmFtZSAiOiAiIGNvZGUgIjsgZW5kXyIgI29wcyAiXyIgI25hbWUgIjoiKQotCi11bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9ub3Aodm9pZCk7Ci11bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9pZGVudF8zMih2b2lkICppbnNuYnVmLCB1bnNpZ25lZCBsZW4pOwotdW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfaWRlbnRfNjQodm9pZCAqaW5zbmJ1ZiwgdW5zaWduZWQgbGVuKTsKLXVuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2lnbm9yZSh1bnNpZ25lZCBsZW4pOwotdW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfY2FsbCh2b2lkICppbnNuYnVmLAotCQkJICAgICBjb25zdCB2b2lkICp0YXJnZXQsIHUxNiB0Z3RfY2xvYmJlcnMsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdTE2IHNpdGVfY2xvYmJlcnMsCi0JCQkgICAgIHVuc2lnbmVkIGxlbik7Ci11bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9qbXAodm9pZCAqaW5zbmJ1ZiwgY29uc3Qgdm9pZCAqdGFyZ2V0LAotCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbGVuKTsKLXVuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2RlZmF1bHQodTggdHlwZSwgdTE2IGNsb2JiZXJzLCB2b2lkICppbnNuYnVmLAotCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbGVuKTsKLQotdW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfaW5zbnModm9pZCAqaW5zbmJ1ZiwgdW5zaWduZWQgbGVuLAotCQkJICAgICAgY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVuZCk7Ci0KLXVuc2lnbmVkIG5hdGl2ZV9wYXRjaCh1OCB0eXBlLCB1MTYgY2xvYmJlcnMsIHZvaWQgKmlidWYsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbGVuKTsKLQotaW50IHBhcmF2aXJ0X2Rpc2FibGVfaW9zcGFjZSh2b2lkKTsKLQotLyoKLSAqIFRoaXMgZ2VuZXJhdGVzIGFuIGluZGlyZWN0IGNhbGwgYmFzZWQgb24gdGhlIG9wZXJhdGlvbiB0eXBlIG51bWJlci4KLSAqIFRoZSB0eXBlIG51bWJlciwgY29tcHV0ZWQgaW4gUEFSQVZJUlRfUEFUQ0gsIGlzIGRlcml2ZWQgZnJvbSB0aGUKLSAqIG9mZnNldCBpbnRvIHRoZSBwYXJhdmlydF9wYXRjaF90ZW1wbGF0ZSBzdHJ1Y3R1cmUsIGFuZCBjYW4gdGhlcmVmb3JlIGJlCi0gKiBmcmVlbHkgY29udmVydGVkIGJhY2sgaW50byBhIHN0cnVjdHVyZSBvZmZzZXQuCi0gKi8KLSNkZWZpbmUgUEFSQVZJUlRfQ0FMTAkiY2FsbCAqJWNbcGFyYXZpcnRfb3BwdHJdOyIKLQotLyoKLSAqIFRoZXNlIG1hY3JvcyBhcmUgaW50ZW5kZWQgdG8gd3JhcCBjYWxscyB0aHJvdWdoIG9uZSBvZiB0aGUgcGFyYXZpcnQKLSAqIG9wcyBzdHJ1Y3RzLCBzbyB0aGF0IHRoZXkgY2FuIGJlIGxhdGVyIGlkZW50aWZpZWQgYW5kIHBhdGNoZWQgYXQKLSAqIHJ1bnRpbWUuCi0gKgotICogTm9ybWFsbHksIGEgY2FsbCB0byBhIHB2X29wIGZ1bmN0aW9uIGlzIGEgc2ltcGxlIGluZGlyZWN0IGNhbGw6Ci0gKiAocHZfb3Bfc3RydWN0Lm9wZXJhdGlvbnMpKGFyZ3MuLi4pLgotICoKLSAqIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgYSByZWxhdGl2ZWx5IHNsb3cgb3BlcmF0aW9uIGZvciBtb2Rlcm4gQ1BVcywKLSAqIGJlY2F1c2UgaXQgY2Fubm90IG5lY2Vzc2FyaWx5IGRldGVybWluZSB3aGF0IHRoZSBkZXN0aW5hdGlvbgotICogYWRkcmVzcyBpcy4gIEluIHRoaXMgY2FzZSwgdGhlIGFkZHJlc3MgaXMgYSBydW50aW1lIGNvbnN0YW50LCBzbyBhdAotICogdGhlIHZlcnkgbGVhc3Qgd2UgY2FuIHBhdGNoIHRoZSBjYWxsIHRvIGUgYSBzaW1wbGUgZGlyZWN0IGNhbGwsIG9yCi0gKiBpZGVhbGx5LCBwYXRjaCBhbiBpbmxpbmUgaW1wbGVtZW50YXRpb24gaW50byB0aGUgY2FsbHNpdGUuICAoRGlyZWN0Ci0gKiBjYWxscyBhcmUgZXNzZW50aWFsbHkgZnJlZSwgYmVjYXVzZSB0aGUgY2FsbCBhbmQgcmV0dXJuIGFkZHJlc3NlcwotICogYXJlIGNvbXBsZXRlbHkgcHJlZGljdGFibGUuKQotICoKLSAqIEZvciBpMzg2LCB0aGVzZSBtYWNyb3MgcmVseSBvbiB0aGUgc3RhbmRhcmQgZ2NjICJyZWdwYXJtKDMpIiBjYWxsaW5nCi0gKiBjb252ZW50aW9uLCBpbiB3aGljaCB0aGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIGFyZSBwbGFjZWQgaW4gJWVheCwKLSAqICVlZHgsICVlY3ggKGluIHRoYXQgb3JkZXIpLCBhbmQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHBsYWNlZAotICogb24gdGhlIHN0YWNrLiAgQWxsIGNhbGxlci1zYXZlIHJlZ2lzdGVycyAoZWF4LGVkeCxlY3gpIGFyZSBleHBlY3RlZAotICogdG8gYmUgbW9kaWZpZWQgKGVpdGhlciBjbG9iYmVyZWQgb3IgdXNlZCBmb3IgcmV0dXJuIHZhbHVlcykuCi0gKiBYODZfNjQsIG9uIHRoZSBvdGhlciBoYW5kLCBhbHJlYWR5IHNwZWNpZmllcyBhIHJlZ2lzdGVyLWJhc2VkIGNhbGxpbmcKLSAqIGNvbnZlbnRpb25zLCByZXR1cm5pbmcgYXQgJXJheCwgd2l0aCBwYXJhbWV0ZXJlcyBnb2luZyBvbiAlcmRpLCAlcnNpLAotICogJXJkeCwgYW5kICVyY3guIE5vdGUgdGhhdCBmb3IgdGhpcyByZWFzb24sIHg4Nl82NCBkb2VzIG5vdCBuZWVkIGFueQotICogc3BlY2lhbCBoYW5kbGluZyBmb3IgZGVhbGluZyB3aXRoIDQgYXJndW1lbnRzLCB1bmxpa2UgaTM4Ni4KLSAqIEhvd2V2ZXIsIHg4Nl82NCBhbHNvIGhhdmUgdG8gY2xvYmJlciBhbGwgY2FsbGVyIHNhdmVkIHJlZ2lzdGVycywgd2hpY2gKLSAqIHVuZm9ydHVuYXRlbHksIGFyZSBxdWl0ZSBhIGJpdCAocjggLSByMTEpCi0gKgotICogVGhlIGNhbGwgaW5zdHJ1Y3Rpb24gaXRzZWxmIGlzIG1hcmtlZCBieSBwbGFjaW5nIGl0cyBzdGFydCBhZGRyZXNzCi0gKiBhbmQgc2l6ZSBpbnRvIHRoZSAucGFyYWluc3RydWN0aW9ucyBzZWN0aW9uLCBzbyB0aGF0Ci0gKiBhcHBseV9wYXJhdmlydCgpIGluIGFyY2gvaTM4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBjYW4gZG8gdGhlCi0gKiBhcHByb3ByaWF0ZSBwYXRjaGluZyB1bmRlciB0aGUgY29udHJvbCBvZiB0aGUgYmFja2VuZCBwdl9pbml0X29wcwotICogaW1wbGVtZW50YXRpb24uCi0gKgotICogVW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byBnZXQgZ2NjIHRvIGdlbmVyYXRlIHRoZSBhcmdzIHNldHVwCi0gKiBmb3IgdGhlIGNhbGwsIGFuZCB0aGVuIGFsbG93IHRoZSBjYWxsIGl0c2VsZiB0byBiZSBnZW5lcmF0ZWQgYnkgYW4KLSAqIGlubGluZSBhc20uICBCZWNhdXNlIG9mIHRoaXMsIHdlIG11c3QgZG8gdGhlIGNvbXBsZXRlIGFyZyBzZXR1cCBhbmQKLSAqIHJldHVybiB2YWx1ZSBoYW5kbGluZyBmcm9tIHdpdGhpbiB0aGVzZSBtYWNyb3MuICBUaGlzIGlzIGZhaXJseQotICogY3VtYmVyc29tZS4KLSAqCi0gKiBUaGVyZSBhcmUgNSBzZXRzIG9mIFBWT1BfKiBtYWNyb3MgZm9yIGRlYWxpbmcgd2l0aCAwLTQgYXJndW1lbnRzLgotICogSXQgY291bGQgYmUgZXh0ZW5kZWQgdG8gbW9yZSBhcmd1bWVudHMsIGJ1dCB0aGVyZSB3b3VsZCBiZSBsaXR0bGUKLSAqIHRvIGJlIGdhaW5lZCBmcm9tIHRoYXQuICBGb3IgZWFjaCBudW1iZXIgb2YgYXJndW1lbnRzLCB0aGVyZSBhcmUKLSAqIHRoZSB0d28gVkNBTEwgYW5kIENBTEwgdmFyaWFudHMgZm9yIHZvaWQgYW5kIG5vbi12b2lkIGZ1bmN0aW9ucy4KLSAqCi0gKiBXaGVuIHRoZXJlIGlzIGEgcmV0dXJuIHZhbHVlLCB0aGUgaW52b2tlciBvZiB0aGUgbWFjcm8gbXVzdCBzcGVjaWZ5Ci0gKiB0aGUgcmV0dXJuIHR5cGUuICBUaGUgbWFjcm8gdGhlbiB1c2VzIHNpemVvZigpIG9uIHRoYXQgdHlwZSB0bwotICogZGV0ZXJtaW5lIHdoZXRoZXIgaXRzIGEgMzIgb3IgNjQgYml0IHZhbHVlLCBhbmQgcGxhY2VzIHRoZSByZXR1cm4KLSAqIGluIHRoZSByaWdodCByZWdpc3RlcihzKSAoanVzdCAlZWF4IGZvciAzMi1iaXQsIGFuZCAlZWR4OiVlYXggZm9yCi0gKiA2NC1iaXQpLiBGb3IgeDg2XzY0IG1hY2hpbmVzLCBpdCBqdXN0IHJldHVybnMgYXQgJXJheCByZWdhcmRsZXNzIG9mCi0gKiB0aGUgcmV0dXJuIHZhbHVlIHNpemUuCi0gKgotICogNjQtYml0IGFyZ3VtZW50cyBhcmUgcGFzc2VkIGFzIGEgcGFpciBvZiBhZGphY2VudCAzMi1iaXQgYXJndW1lbnRzCi0gKiBpMzg2IGFsc28gcGFzc2VzIDY0LWJpdCBhcmd1bWVudHMgYXMgYSBwYWlyIG9mIGFkamFjZW50IDMyLWJpdCBhcmd1bWVudHMKLSAqIGluIGxvdyxoaWdoIG9yZGVyCi0gKgotICogU21hbGwgc3RydWN0dXJlcyBhcmUgcGFzc2VkIGFuZCByZXR1cm5lZCBpbiByZWdpc3RlcnMuICBUaGUgbWFjcm8KLSAqIGNhbGxpbmcgY29udmVudGlvbiBjYW4ndCBkaXJlY3RseSBkZWFsIHdpdGggdGhpcywgc28gdGhlIHdyYXBwZXIKLSAqIGZ1bmN0aW9ucyBtdXN0IGRvIHRoaXMuCi0gKgotICogVGhlc2UgUFZPUF8qIG1hY3JvcyBhcmUgb25seSBkZWZpbmVkIHdpdGhpbiB0aGlzIGhlYWRlci4gIFRoaXMKLSAqIG1lYW5zIHRoYXQgYWxsIHVzZXMgbXVzdCBiZSB3cmFwcGVkIGluIGlubGluZSBmdW5jdGlvbnMuICBUaGlzIGFsc28KLSAqIG1ha2VzIHN1cmUgdGhlIGluY29taW5nIGFuZCBvdXRnb2luZyB0eXBlcyBhcmUgYWx3YXlzIGNvcnJlY3QuCi0gKi8KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIFBWT1BfVkNBTExfQVJHUwkJCQlcCi0JdW5zaWduZWQgbG9uZyBfX2VheCA9IF9fZWF4LCBfX2VkeCA9IF9fZWR4LCBfX2VjeCA9IF9fZWN4Ci0jZGVmaW5lIFBWT1BfQ0FMTF9BUkdTCQkJUFZPUF9WQ0FMTF9BUkdTCi0KLSNkZWZpbmUgUFZPUF9DQUxMX0FSRzEoeCkJCSJhIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQotI2RlZmluZSBQVk9QX0NBTExfQVJHMih4KQkJImQiICgodW5zaWduZWQgbG9uZykoeCkpCi0jZGVmaW5lIFBWT1BfQ0FMTF9BUkczKHgpCQkiYyIgKCh1bnNpZ25lZCBsb25nKSh4KSkKLQotI2RlZmluZSBQVk9QX1ZDQUxMX0NMT0JCRVJTCQkiPWEiIChfX2VheCksICI9ZCIgKF9fZWR4KSwJXAotCQkJCQkiPWMiIChfX2VjeCkKLSNkZWZpbmUgUFZPUF9DQUxMX0NMT0JCRVJTCQlQVk9QX1ZDQUxMX0NMT0JCRVJTCi0KLSNkZWZpbmUgUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCQkiPWEiIChfX2VheCksICI9ZCIgKF9fZWR4KQotI2RlZmluZSBQVk9QX0NBTExFRV9DTE9CQkVSUwkJUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCi0KLSNkZWZpbmUgRVhUUkFfQ0xPQkJFUlMKLSNkZWZpbmUgVkVYVFJBX0NMT0JCRVJTCi0jZWxzZSAgLyogQ09ORklHX1g4Nl82NCAqLwotI2RlZmluZSBQVk9QX1ZDQUxMX0FSR1MJCQkJCVwKLQl1bnNpZ25lZCBsb25nIF9fZWRpID0gX19lZGksIF9fZXNpID0gX19lc2ksCVwKLQkJX19lZHggPSBfX2VkeCwgX19lY3ggPSBfX2VjeAotI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJUFZPUF9WQ0FMTF9BUkdTLCBfX2VheAotCi0jZGVmaW5lIFBWT1BfQ0FMTF9BUkcxKHgpCQkiRCIgKCh1bnNpZ25lZCBsb25nKSh4KSkKLSNkZWZpbmUgUFZPUF9DQUxMX0FSRzIoeCkJCSJTIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQotI2RlZmluZSBQVk9QX0NBTExfQVJHMyh4KQkJImQiICgodW5zaWduZWQgbG9uZykoeCkpCi0jZGVmaW5lIFBWT1BfQ0FMTF9BUkc0KHgpCQkiYyIgKCh1bnNpZ25lZCBsb25nKSh4KSkKLQotI2RlZmluZSBQVk9QX1ZDQUxMX0NMT0JCRVJTCSI9RCIgKF9fZWRpKSwJCQkJXAotCQkJCSI9UyIgKF9fZXNpKSwgIj1kIiAoX19lZHgpLAkJXAotCQkJCSI9YyIgKF9fZWN4KQotI2RlZmluZSBQVk9QX0NBTExfQ0xPQkJFUlMJUFZPUF9WQ0FMTF9DTE9CQkVSUywgIj1hIiAoX19lYXgpCi0KLSNkZWZpbmUgUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCSI9YSIgKF9fZWF4KQotI2RlZmluZSBQVk9QX0NBTExFRV9DTE9CQkVSUwlQVk9QX1ZDQUxMRUVfQ0xPQkJFUlMKLQotI2RlZmluZSBFWFRSQV9DTE9CQkVSUwkgLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIKLSNkZWZpbmUgVkVYVFJBX0NMT0JCRVJTCSAsICJyYXgiLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIKLSNlbmRpZgkvKiBDT05GSUdfWDg2XzMyICovCi0KLSNpZmRlZiBDT05GSUdfUEFSQVZJUlRfREVCVUcKLSNkZWZpbmUgUFZPUF9URVNUX05VTEwob3ApCUJVR19PTihvcCA9PSBOVUxMKQotI2Vsc2UKLSNkZWZpbmUgUFZPUF9URVNUX05VTEwob3ApCSgodm9pZClvcCkKLSNlbmRpZgotCi0jZGVmaW5lIF9fX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsIGNsYnIsIGNhbGxfY2xiciwgZXh0cmFfY2xiciwJCVwKLQkJICAgICAgcHJlLCBwb3N0LCAuLi4pCQkJCQlcCi0JKHsJCQkJCQkJCVwKLQkJcmV0dHlwZSBfX3JldDsJCQkJCQlcCi0JCVBWT1BfQ0FMTF9BUkdTOwkJCQkJCVwKLQkJUFZPUF9URVNUX05VTEwob3ApOwkJCQkJXAotCQkvKiBUaGlzIGlzIDMyLWJpdCBzcGVjaWZpYywgYnV0IGlzIG9rYXkgaW4gNjQtYml0ICovCVwKLQkJLyogc2luY2UgdGhpcyBjb25kaXRpb24gd2lsbCBuZXZlciBob2xkICovCQlcCi0JCWlmIChzaXplb2YocmV0dHlwZSkgPiBzaXplb2YodW5zaWduZWQgbG9uZykpIHsJCVwKLQkJCWFzbSB2b2xhdGlsZShwcmUJCQkJXAotCQkJCSAgICAgcGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCVwKLQkJCQkgICAgIHBvc3QJCQkJXAotCQkJCSAgICAgOiBjYWxsX2NsYnIJCQlcCi0JCQkJICAgICA6IHBhcmF2aXJ0X3R5cGUob3ApLAkJXAotCQkJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKGNsYnIpLAkJXAotCQkJCSAgICAgICAjI19fVkFfQVJHU19fCQkJXAotCQkJCSAgICAgOiAibWVtb3J5IiwgImNjIiBleHRyYV9jbGJyKTsJXAotCQkJX19yZXQgPSAocmV0dHlwZSkoKCgodTY0KV9fZWR4KSA8PCAzMikgfCBfX2VheCk7IFwKLQkJfSBlbHNlIHsJCQkJCQlcCi0JCQlhc20gdm9sYXRpbGUocHJlCQkJCVwKLQkJCQkgICAgIHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQlcCi0JCQkJICAgICBwb3N0CQkJCVwKLQkJCQkgICAgIDogY2FsbF9jbGJyCQkJXAotCQkJCSAgICAgOiBwYXJhdmlydF90eXBlKG9wKSwJCVwKLQkJCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihjbGJyKSwJCVwKLQkJCQkgICAgICAgIyNfX1ZBX0FSR1NfXwkJCVwKLQkJCQkgICAgIDogIm1lbW9yeSIsICJjYyIgZXh0cmFfY2xicik7CVwKLQkJCV9fcmV0ID0gKHJldHR5cGUpX19lYXg7CQkJCVwKLQkJfQkJCQkJCQlcCi0JCV9fcmV0OwkJCQkJCQlcCi0JfSkKLQotI2RlZmluZSBfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgcHJlLCBwb3N0LCAuLi4pCQkJXAotCV9fX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsIENMQlJfQU5ZLCBQVk9QX0NBTExfQ0xPQkJFUlMsCVwKLQkJICAgICAgRVhUUkFfQ0xPQkJFUlMsIHByZSwgcG9zdCwgIyNfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBfX1BWT1BfQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgcHJlLCBwb3N0LCAuLi4pCQkJXAotCV9fX19QVk9QX0NBTEwocmV0dHlwZSwgb3AuZnVuYywgQ0xCUl9SRVRfUkVHLAkJCVwKLQkJICAgICAgUFZPUF9DQUxMRUVfQ0xPQkJFUlMsICwJCQkJXAotCQkgICAgICBwcmUsIHBvc3QsICMjX19WQV9BUkdTX18pCi0KLQotI2RlZmluZSBfX19fUFZPUF9WQ0FMTChvcCwgY2xiciwgY2FsbF9jbGJyLCBleHRyYV9jbGJyLCBwcmUsIHBvc3QsIC4uLikJXAotCSh7CQkJCQkJCQlcCi0JCVBWT1BfVkNBTExfQVJHUzsJCQkJCVwKLQkJUFZPUF9URVNUX05VTEwob3ApOwkJCQkJXAotCQlhc20gdm9sYXRpbGUocHJlCQkJCQlcCi0JCQkgICAgIHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQkJXAotCQkJICAgICBwb3N0CQkJCQlcCi0JCQkgICAgIDogY2FsbF9jbGJyCQkJCVwKLQkJCSAgICAgOiBwYXJhdmlydF90eXBlKG9wKSwJCQlcCi0JCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihjbGJyKSwJCQlcCi0JCQkgICAgICAgIyNfX1ZBX0FSR1NfXwkJCQlcCi0JCQkgICAgIDogIm1lbW9yeSIsICJjYyIgZXh0cmFfY2xicik7CQlcCi0JfSkKLQotI2RlZmluZSBfX1BWT1BfVkNBTEwob3AsIHByZSwgcG9zdCwgLi4uKQkJCQlcCi0JX19fX1BWT1BfVkNBTEwob3AsIENMQlJfQU5ZLCBQVk9QX1ZDQUxMX0NMT0JCRVJTLAkJXAotCQkgICAgICAgVkVYVFJBX0NMT0JCRVJTLAkJCQkJXAotCQkgICAgICAgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQotCi0jZGVmaW5lIF9fUFZPUF9WQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgcHJlLCBwb3N0LCAuLi4pCQkJXAotCV9fX19QVk9QX0NBTEwocmV0dHlwZSwgb3AuZnVuYywgQ0xCUl9SRVRfUkVHLAkJCVwKLQkJICAgICAgUFZPUF9WQ0FMTEVFX0NMT0JCRVJTLCAsCQkJCVwKLQkJICAgICAgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQotCi0KLQotI2RlZmluZSBQVk9QX0NBTEwwKHJldHR5cGUsIG9wKQkJCQkJCVwKLQlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiKQotI2RlZmluZSBQVk9QX1ZDQUxMMChvcCkJCQkJCQkJXAotCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiKQotCi0jZGVmaW5lIFBWT1BfQ0FMTEVFMChyZXR0eXBlLCBvcCkJCQkJCVwKLQlfX1BWT1BfQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgIiIsICIiKQotI2RlZmluZSBQVk9QX1ZDQUxMRUUwKG9wKQkJCQkJCVwKLQlfX1BWT1BfVkNBTExFRVNBVkUob3AsICIiLCAiIikKLQotCi0jZGVmaW5lIFBWT1BfQ0FMTDEocmV0dHlwZSwgb3AsIGFyZzEpCQkJCQlcCi0JX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSkpCi0jZGVmaW5lIFBWT1BfVkNBTEwxKG9wLCBhcmcxKQkJCQkJCVwKLQlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSkpCi0KLSNkZWZpbmUgUFZPUF9DQUxMRUUxKHJldHR5cGUsIG9wLCBhcmcxKQkJCQkJXAotCV9fUFZPUF9DQUxMRUVTQVZFKHJldHR5cGUsIG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpKQotI2RlZmluZSBQVk9QX1ZDQUxMRUUxKG9wLCBhcmcxKQkJCQkJCVwKLQlfX1BWT1BfVkNBTExFRVNBVkUob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSkpCi0KLQotI2RlZmluZSBQVk9QX0NBTEwyKHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyKQkJCQlcCi0JX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSksCQlcCi0JCSAgICBQVk9QX0NBTExfQVJHMihhcmcyKSkKLSNkZWZpbmUgUFZPUF9WQ0FMTDIob3AsIGFyZzEsIGFyZzIpCQkJCQlcCi0JX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLAkJCVwKLQkJICAgICBQVk9QX0NBTExfQVJHMihhcmcyKSkKLQotI2RlZmluZSBQVk9QX0NBTExFRTIocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIpCQkJCVwKLQlfX1BWT1BfQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJXAotCQkJICBQVk9QX0NBTExfQVJHMihhcmcyKSkKLSNkZWZpbmUgUFZPUF9WQ0FMTEVFMihvcCwgYXJnMSwgYXJnMikJCQkJCVwKLQlfX1BWT1BfVkNBTExFRVNBVkUob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSksCQlcCi0JCQkgICBQVk9QX0NBTExfQVJHMihhcmcyKSkKLQotCi0jZGVmaW5lIFBWT1BfQ0FMTDMocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIsIGFyZzMpCQkJXAotCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLAkJXAotCQkgICAgUFZPUF9DQUxMX0FSRzIoYXJnMiksIFBWT1BfQ0FMTF9BUkczKGFyZzMpKQotI2RlZmluZSBQVk9QX1ZDQUxMMyhvcCwgYXJnMSwgYXJnMiwgYXJnMykJCQkJXAotCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJCQlcCi0JCSAgICAgUFZPUF9DQUxMX0FSRzIoYXJnMiksIFBWT1BfQ0FMTF9BUkczKGFyZzMpKQotCi0vKiBUaGlzIGlzIHRoZSBvbmx5IGRpZmZlcmVuY2UgaW4geDg2XzY0LiBXZSBjYW4gbWFrZSBpdCBtdWNoIHNpbXBsZXIgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIFBWT1BfQ0FMTDQocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpCQkJXAotCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLAkJCQkJXAotCQkgICAgInB1c2ggJVtfYXJnNF07IiwgImxlYSA0KCUlZXNwKSwlJWVzcDsiLAkJXAotCQkgICAgUFZPUF9DQUxMX0FSRzEoYXJnMSksIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLAkJXAotCQkgICAgUFZPUF9DQUxMX0FSRzMoYXJnMyksIFtfYXJnNF0gIm1yIiAoKHUzMikoYXJnNCkpKQotI2RlZmluZSBQVk9QX1ZDQUxMNChvcCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkJCQkJXAotCV9fUFZPUF9WQ0FMTChvcCwJCQkJCQlcCi0JCSAgICAicHVzaCAlW19hcmc0XTsiLCAibGVhIDQoJSVlc3ApLCUlZXNwOyIsCQlcCi0JCSAgICAiMCIgKCh1MzIpKGFyZzEpKSwgIjEiICgodTMyKShhcmcyKSksCQlcCi0JCSAgICAiMiIgKCh1MzIpKGFyZzMpKSwgW19hcmc0XSAibXIiICgodTMyKShhcmc0KSkpCi0jZWxzZQotI2RlZmluZSBQVk9QX0NBTEw0KHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQkJCVwKLQlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiLAkJCQlcCi0JCSAgICBQVk9QX0NBTExfQVJHMShhcmcxKSwgUFZPUF9DQUxMX0FSRzIoYXJnMiksCQlcCi0JCSAgICBQVk9QX0NBTExfQVJHMyhhcmczKSwgUFZPUF9DQUxMX0FSRzQoYXJnNCkpCi0jZGVmaW5lIFBWT1BfVkNBTEw0KG9wLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQkJCQlcCi0JX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsCQkJCQlcCi0JCSAgICAgUFZPUF9DQUxMX0FSRzEoYXJnMSksIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLAlcCi0JCSAgICAgUFZPUF9DQUxMX0FSRzMoYXJnMyksIFBWT1BfQ0FMTF9BUkc0KGFyZzQpKQotI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IHBhcmF2aXJ0X2VuYWJsZWQodm9pZCkKIHsKQEAgLTgyMCwxNSArMTQyLDIyIEBACiB7CiAJcmV0dXJuIFBWT1BfQ0FMTDIodTY0LCBwdl9jcHVfb3BzLnJlYWRfbXNyLCBtc3IsIGVycik7CiB9Ci1zdGF0aWMgaW5saW5lIHU2NCBwYXJhdmlydF9yZWFkX21zcl9hbWQodW5zaWduZWQgbXNyLCBpbnQgKmVycikKKworc3RhdGljIGlubGluZSBpbnQgcGFyYXZpcnRfcmRtc3JfcmVncyh1MzIgKnJlZ3MpCiB7Ci0JcmV0dXJuIFBWT1BfQ0FMTDIodTY0LCBwdl9jcHVfb3BzLnJlYWRfbXNyX2FtZCwgbXNyLCBlcnIpOworCXJldHVybiBQVk9QX0NBTEwxKGludCwgcHZfY3B1X29wcy5yZG1zcl9yZWdzLCByZWdzKTsKIH0KKwogc3RhdGljIGlubGluZSBpbnQgcGFyYXZpcnRfd3JpdGVfbXNyKHVuc2lnbmVkIG1zciwgdW5zaWduZWQgbG93LCB1bnNpZ25lZCBoaWdoKQogewogCXJldHVybiBQVk9QX0NBTEwzKGludCwgcHZfY3B1X29wcy53cml0ZV9tc3IsIG1zciwgbG93LCBoaWdoKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcGFyYXZpcnRfd3Jtc3JfcmVncyh1MzIgKnJlZ3MpCit7CisJcmV0dXJuIFBWT1BfQ0FMTDEoaW50LCBwdl9jcHVfb3BzLndybXNyX3JlZ3MsIHJlZ3MpOworfQorCiAvKiBUaGVzZSBzaG91bGQgYWxsIGRvIEJVR19PTihfZXJyKSwgYnV0IG91ciBoZWFkZXJzIGFyZSB0b28gdGFuZ2xlZC4gKi8KICNkZWZpbmUgcmRtc3IobXNyLCB2YWwxLCB2YWwyKQkJCVwKIGRvIHsJCQkJCQlcCkBAIC04NjIsNiArMTkxLDkgQEAKIAlfZXJyOwkJCQkJXAogfSkKIAorI2RlZmluZSByZG1zcl9zYWZlX3JlZ3MocmVncykJcGFyYXZpcnRfcmRtc3JfcmVncyhyZWdzKQorI2RlZmluZSB3cm1zcl9zYWZlX3JlZ3MocmVncykJcGFyYXZpcnRfd3Jtc3JfcmVncyhyZWdzKQorCiBzdGF0aWMgaW5saW5lIGludCByZG1zcmxfc2FmZSh1bnNpZ25lZCBtc3IsIHVuc2lnbmVkIGxvbmcgbG9uZyAqcCkKIHsKIAlpbnQgZXJyOwpAQCAtODcxLDEyICsyMDMsMzEgQEAKIH0KIHN0YXRpYyBpbmxpbmUgaW50IHJkbXNybF9hbWRfc2FmZSh1bnNpZ25lZCBtc3IsIHVuc2lnbmVkIGxvbmcgbG9uZyAqcCkKIHsKKwl1MzIgZ3Byc1s4XSA9IHsgMCB9OwogCWludCBlcnI7CiAKLQkqcCA9IHBhcmF2aXJ0X3JlYWRfbXNyX2FtZChtc3IsICZlcnIpOworCWdwcnNbMV0gPSBtc3I7CisJZ3Byc1s3XSA9IDB4OWM1YTIwM2E7CisKKwllcnIgPSBwYXJhdmlydF9yZG1zcl9yZWdzKGdwcnMpOworCisJKnAgPSBncHJzWzBdIHwgKCh1NjQpZ3Byc1syXSA8PCAzMik7CisKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW5saW5lIGludCB3cm1zcmxfYW1kX3NhZmUodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsKQoreworCXUzMiBncHJzWzhdID0geyAwIH07CisKKwlncHJzWzBdID0gKHUzMil2YWw7CisJZ3Byc1sxXSA9IG1zcjsKKwlncHJzWzJdID0gdmFsID4+IDMyOworCWdwcnNbN10gPSAweDljNWEyMDNhOworCisJcmV0dXJuIHBhcmF2aXJ0X3dybXNyX3JlZ3MoZ3Bycyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTY0IHBhcmF2aXJ0X3JlYWRfdHNjKHZvaWQpCiB7CiAJcmV0dXJuIFBWT1BfQ0FMTDAodTY0LCBwdl9jcHVfb3BzLnJlYWRfdHNjKTsKQEAgLTEzOTMsMjAgKzc0NCw2IEBACiB9CiAjZW5kaWYJLyogQ09ORklHX1g4Nl9QQUUgKi8KIAotLyogTGF6eSBtb2RlIGZvciBiYXRjaGluZyB1cGRhdGVzIC8gY29udGV4dCBzd2l0Y2ggKi8KLWVudW0gcGFyYXZpcnRfbGF6eV9tb2RlIHsKLQlQQVJBVklSVF9MQVpZX05PTkUsCi0JUEFSQVZJUlRfTEFaWV9NTVUsCi0JUEFSQVZJUlRfTEFaWV9DUFUsCi19OwotCi1lbnVtIHBhcmF2aXJ0X2xhenlfbW9kZSBwYXJhdmlydF9nZXRfbGF6eV9tb2RlKHZvaWQpOwotdm9pZCBwYXJhdmlydF9zdGFydF9jb250ZXh0X3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpOwotdm9pZCBwYXJhdmlydF9lbmRfY29udGV4dF9zd2l0Y2goc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KTsKLQotdm9pZCBwYXJhdmlydF9lbnRlcl9sYXp5X21tdSh2b2lkKTsKLXZvaWQgcGFyYXZpcnRfbGVhdmVfbGF6eV9tbXUodm9pZCk7Ci0KICNkZWZpbmUgIF9fSEFWRV9BUkNIX1NUQVJUX0NPTlRFWFRfU1dJVENICiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zdGFydF9jb250ZXh0X3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpCiB7CkBAIC0xNDM3LDEyICs3NzQsNiBAQAogCXB2X21tdV9vcHMuc2V0X2ZpeG1hcChpZHgsIHBoeXMsIGZsYWdzKTsKIH0KIAotdm9pZCBfcGFyYXZpcnRfbm9wKHZvaWQpOwotdTMyIF9wYXJhdmlydF9pZGVudF8zMih1MzIpOwotdTY0IF9wYXJhdmlydF9pZGVudF82NCh1NjQpOwotCi0jZGVmaW5lIHBhcmF2aXJ0X25vcAkoKHZvaWQgKilfcGFyYXZpcnRfbm9wKQotCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19QQVJBVklSVF9TUElOTE9DS1MpCiAKIHN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spCkBAIC0xNDc5LDE3ICs4MTAsNiBAQAogCiAjZW5kaWYKIAotLyogVGhlc2UgYWxsIHNpdCBpbiB0aGUgLnBhcmFpbnN0cnVjdGlvbnMgc2VjdGlvbiB0byB0ZWxsIHVzIHdoYXQgdG8gcGF0Y2guICovCi1zdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZSB7Ci0JdTggKmluc3RyOyAJCS8qIG9yaWdpbmFsIGluc3RydWN0aW9ucyAqLwotCXU4IGluc3RydHlwZTsJCS8qIHR5cGUgb2YgdGhpcyBpbnN0cnVjdGlvbiAqLwotCXU4IGxlbjsJCQkvKiBsZW5ndGggb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KLQl1MTYgY2xvYmJlcnM7CQkvKiB3aGF0IHJlZ2lzdGVycyB5b3UgbWF5IGNsb2JiZXIgKi8KLX07Ci0KLWV4dGVybiBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZSBfX3BhcmFpbnN0cnVjdGlvbnNbXSwKLQlfX3BhcmFpbnN0cnVjdGlvbnNfZW5kW107Ci0KICNpZmRlZiBDT05GSUdfWDg2XzMyCiAjZGVmaW5lIFBWX1NBVkVfUkVHUyAicHVzaGwgJWVjeDsgcHVzaGwgJWVkeDsiCiAjZGVmaW5lIFBWX1JFU1RPUkVfUkVHUyAicG9wbCAlZWR4OyBwb3BsICVlY3g7IgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU0MDJkMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKQEAgLTAsMCArMSw3MjEgQEAKKyNpZm5kZWYgX0FTTV9YODZfUEFSQVZJUlRfVFlQRVNfSAorI2RlZmluZSBfQVNNX1g4Nl9QQVJBVklSVF9UWVBFU19ICisKKy8qIEJpdG1hc2sgb2Ygd2hhdCBjYW4gYmUgY2xvYmJlcmVkOiB1c3VhbGx5IGF0IGxlYXN0IGVheC4gKi8KKyNkZWZpbmUgQ0xCUl9OT05FIDAKKyNkZWZpbmUgQ0xCUl9FQVggICgxIDw8IDApCisjZGVmaW5lIENMQlJfRUNYICAoMSA8PCAxKQorI2RlZmluZSBDTEJSX0VEWCAgKDEgPDwgMikKKyNkZWZpbmUgQ0xCUl9FREkgICgxIDw8IDMpCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKiBDTEJSX0FOWSBzaG91bGQgbWF0Y2ggYWxsIHJlZ3MgcGxhdGZvcm0gaGFzLiBGb3IgaTM4NiwgdGhhdCdzIGp1c3QgaXQgKi8KKyNkZWZpbmUgQ0xCUl9BTlkgICgoMSA8PCA0KSAtIDEpCisKKyNkZWZpbmUgQ0xCUl9BUkdfUkVHUwkoQ0xCUl9FQVggfCBDTEJSX0VEWCB8IENMQlJfRUNYKQorI2RlZmluZSBDTEJSX1JFVF9SRUcJKENMQlJfRUFYIHwgQ0xCUl9FRFgpCisjZGVmaW5lIENMQlJfU0NSQVRDSAkoMCkKKyNlbHNlCisjZGVmaW5lIENMQlJfUkFYICBDTEJSX0VBWAorI2RlZmluZSBDTEJSX1JDWCAgQ0xCUl9FQ1gKKyNkZWZpbmUgQ0xCUl9SRFggIENMQlJfRURYCisjZGVmaW5lIENMQlJfUkRJICBDTEJSX0VESQorI2RlZmluZSBDTEJSX1JTSSAgKDEgPDwgNCkKKyNkZWZpbmUgQ0xCUl9SOCAgICgxIDw8IDUpCisjZGVmaW5lIENMQlJfUjkgICAoMSA8PCA2KQorI2RlZmluZSBDTEJSX1IxMCAgKDEgPDwgNykKKyNkZWZpbmUgQ0xCUl9SMTEgICgxIDw8IDgpCisKKyNkZWZpbmUgQ0xCUl9BTlkgICgoMSA8PCA5KSAtIDEpCisKKyNkZWZpbmUgQ0xCUl9BUkdfUkVHUwkoQ0xCUl9SREkgfCBDTEJSX1JTSSB8IENMQlJfUkRYIHwgXAorCQkJIENMQlJfUkNYIHwgQ0xCUl9SOCB8IENMQlJfUjkpCisjZGVmaW5lIENMQlJfUkVUX1JFRwkoQ0xCUl9SQVgpCisjZGVmaW5lIENMQlJfU0NSQVRDSAkoQ0xCUl9SMTAgfCBDTEJSX1IxMSkKKworI2VuZGlmIC8qIFg4Nl82NCAqLworCisjZGVmaW5lIENMQlJfQ0FMTEVFX1NBVkUgKChDTEJSX0FSR19SRUdTIHwgQ0xCUl9TQ1JBVENIKSAmIH5DTEJSX1JFVF9SRUcpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxhc20vZGVzY19kZWZzLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKworc3RydWN0IHBhZ2U7CitzdHJ1Y3QgdGhyZWFkX3N0cnVjdDsKK3N0cnVjdCBkZXNjX3B0cjsKK3N0cnVjdCB0c3Nfc3RydWN0Oworc3RydWN0IG1tX3N0cnVjdDsKK3N0cnVjdCBkZXNjX3N0cnVjdDsKK3N0cnVjdCB0YXNrX3N0cnVjdDsKK3N0cnVjdCBjcHVtYXNrOworCisvKgorICogV3JhcHBlciB0eXBlIGZvciBwb2ludGVycyB0byBjb2RlIHdoaWNoIHVzZXMgdGhlIG5vbi1zdGFuZGFyZAorICogY2FsbGluZyBjb252ZW50aW9uLiAgU2VlIFBWX0NBTExfU0FWRV9SRUdTX1RIVU5LIGJlbG93LgorICovCitzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgeworCXZvaWQgKmZ1bmM7Cit9OworCisvKiBnZW5lcmFsIGluZm8gKi8KK3N0cnVjdCBwdl9pbmZvIHsKKwl1bnNpZ25lZCBpbnQga2VybmVsX3JwbDsKKwlpbnQgc2hhcmVkX2tlcm5lbF9wbWQ7CisJaW50IHBhcmF2aXJ0X2VuYWJsZWQ7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0cnVjdCBwdl9pbml0X29wcyB7CisJLyoKKwkgKiBQYXRjaCBtYXkgcmVwbGFjZSBvbmUgb2YgdGhlIGRlZmluZWQgY29kZSBzZXF1ZW5jZXMgd2l0aAorCSAqIGFyYml0cmFyeSBjb2RlLCBzdWJqZWN0IHRvIHRoZSBzYW1lIHJlZ2lzdGVyIGNvbnN0cmFpbnRzLgorCSAqIFRoaXMgZ2VuZXJhbGx5IG1lYW5zIHRoZSBjb2RlIGlzIG5vdCBmcmVlIHRvIGNsb2JiZXIgYW55CisJICogcmVnaXN0ZXJzIG90aGVyIHRoYW4gRUFYLiAgVGhlIHBhdGNoIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4KKwkgKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGNvZGUgZ2VuZXJhdGVkLCBhcyB3ZSBub3AgcGFkIHRoZQorCSAqIHJlc3QgaW4gZ2VuZXJpYyBjb2RlLgorCSAqLworCXVuc2lnbmVkICgqcGF0Y2gpKHU4IHR5cGUsIHUxNiBjbG9iYmVyLCB2b2lkICppbnNuYnVmLAorCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxlbik7CisKKwkvKiBCYXNpYyBhcmNoLXNwZWNpZmljIHNldHVwICovCisJdm9pZCAoKmFyY2hfc2V0dXApKHZvaWQpOworCWNoYXIgKigqbWVtb3J5X3NldHVwKSh2b2lkKTsKKwl2b2lkICgqcG9zdF9hbGxvY2F0b3JfaW5pdCkodm9pZCk7CisKKwkvKiBQcmludCBhIGJhbm5lciB0byBpZGVudGlmeSB0aGUgZW52aXJvbm1lbnQgKi8KKwl2b2lkICgqYmFubmVyKSh2b2lkKTsKK307CisKKworc3RydWN0IHB2X2xhenlfb3BzIHsKKwkvKiBTZXQgZGVmZXJyZWQgdXBkYXRlIG1vZGUsIHVzZWQgZm9yIGJhdGNoaW5nIG9wZXJhdGlvbnMuICovCisJdm9pZCAoKmVudGVyKSh2b2lkKTsKKwl2b2lkICgqbGVhdmUpKHZvaWQpOworfTsKKworc3RydWN0IHB2X3RpbWVfb3BzIHsKKwl2b2lkICgqdGltZV9pbml0KSh2b2lkKTsKKworCS8qIFNldCBhbmQgc2V0IHRpbWUgb2YgZGF5ICovCisJdW5zaWduZWQgbG9uZyAoKmdldF93YWxsY2xvY2spKHZvaWQpOworCWludCAoKnNldF93YWxsY2xvY2spKHVuc2lnbmVkIGxvbmcpOworCisJdW5zaWduZWQgbG9uZyBsb25nICgqc2NoZWRfY2xvY2spKHZvaWQpOworCXVuc2lnbmVkIGxvbmcgKCpnZXRfdHNjX2toeikodm9pZCk7Cit9OworCitzdHJ1Y3QgcHZfY3B1X29wcyB7CisJLyogaG9va3MgZm9yIHZhcmlvdXMgcHJpdmlsZWdlZCBpbnN0cnVjdGlvbnMgKi8KKwl1bnNpZ25lZCBsb25nICgqZ2V0X2RlYnVncmVnKShpbnQgcmVnbm8pOworCXZvaWQgKCpzZXRfZGVidWdyZWcpKGludCByZWdubywgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CisKKwl2b2lkICgqY2x0cykodm9pZCk7CisKKwl1bnNpZ25lZCBsb25nICgqcmVhZF9jcjApKHZvaWQpOworCXZvaWQgKCp3cml0ZV9jcjApKHVuc2lnbmVkIGxvbmcpOworCisJdW5zaWduZWQgbG9uZyAoKnJlYWRfY3I0X3NhZmUpKHZvaWQpOworCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyNCkodm9pZCk7CisJdm9pZCAoKndyaXRlX2NyNCkodW5zaWduZWQgbG9uZyk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJdW5zaWduZWQgbG9uZyAoKnJlYWRfY3I4KSh2b2lkKTsKKwl2b2lkICgqd3JpdGVfY3I4KSh1bnNpZ25lZCBsb25nKTsKKyNlbmRpZgorCisJLyogU2VnbWVudCBkZXNjcmlwdG9yIGhhbmRsaW5nICovCisJdm9pZCAoKmxvYWRfdHJfZGVzYykodm9pZCk7CisJdm9pZCAoKmxvYWRfZ2R0KShjb25zdCBzdHJ1Y3QgZGVzY19wdHIgKik7CisJdm9pZCAoKmxvYWRfaWR0KShjb25zdCBzdHJ1Y3QgZGVzY19wdHIgKik7CisJdm9pZCAoKnN0b3JlX2dkdCkoc3RydWN0IGRlc2NfcHRyICopOworCXZvaWQgKCpzdG9yZV9pZHQpKHN0cnVjdCBkZXNjX3B0ciAqKTsKKwl2b2lkICgqc2V0X2xkdCkoY29uc3Qgdm9pZCAqZGVzYywgdW5zaWduZWQgZW50cmllcyk7CisJdW5zaWduZWQgbG9uZyAoKnN0b3JlX3RyKSh2b2lkKTsKKwl2b2lkICgqbG9hZF90bHMpKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LCB1bnNpZ25lZCBpbnQgY3B1KTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJdm9pZCAoKmxvYWRfZ3NfaW5kZXgpKHVuc2lnbmVkIGludCBpZHgpOworI2VuZGlmCisJdm9pZCAoKndyaXRlX2xkdF9lbnRyeSkoc3RydWN0IGRlc2Nfc3RydWN0ICpsZHQsIGludCBlbnRyeW51bSwKKwkJCQljb25zdCB2b2lkICpkZXNjKTsKKwl2b2lkICgqd3JpdGVfZ2R0X2VudHJ5KShzdHJ1Y3QgZGVzY19zdHJ1Y3QgKiwKKwkJCQlpbnQgZW50cnludW0sIGNvbnN0IHZvaWQgKmRlc2MsIGludCBzaXplKTsKKwl2b2lkICgqd3JpdGVfaWR0X2VudHJ5KShnYXRlX2Rlc2MgKiwKKwkJCQlpbnQgZW50cnludW0sIGNvbnN0IGdhdGVfZGVzYyAqZ2F0ZSk7CisJdm9pZCAoKmFsbG9jX2xkdCkoc3RydWN0IGRlc2Nfc3RydWN0ICpsZHQsIHVuc2lnbmVkIGVudHJpZXMpOworCXZvaWQgKCpmcmVlX2xkdCkoc3RydWN0IGRlc2Nfc3RydWN0ICpsZHQsIHVuc2lnbmVkIGVudHJpZXMpOworCisJdm9pZCAoKmxvYWRfc3AwKShzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzLCBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCk7CisKKwl2b2lkICgqc2V0X2lvcGxfbWFzaykodW5zaWduZWQgbWFzayk7CisKKwl2b2lkICgqd2JpbnZkKSh2b2lkKTsKKwl2b2lkICgqaW9fZGVsYXkpKHZvaWQpOworCisJLyogY3B1aWQgZW11bGF0aW9uLCBtb3N0bHkgc28gdGhhdCBjYXBzIGJpdHMgY2FuIGJlIGRpc2FibGVkICovCisJdm9pZCAoKmNwdWlkKSh1bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCisJCSAgICAgIHVuc2lnbmVkIGludCAqZWN4LCB1bnNpZ25lZCBpbnQgKmVkeCk7CisKKwkvKiBNU1IsIFBNQyBhbmQgVFNSIG9wZXJhdGlvbnMuCisJICAgZXJyID0gMC8tRUZBVUxULiAgd3Jtc3IgcmV0dXJucyAwLy1FRkFVTFQuICovCisJdTY0ICgqcmVhZF9tc3IpKHVuc2lnbmVkIGludCBtc3IsIGludCAqZXJyKTsKKwlpbnQgKCpyZG1zcl9yZWdzKSh1MzIgKnJlZ3MpOworCWludCAoKndyaXRlX21zcikodW5zaWduZWQgaW50IG1zciwgdW5zaWduZWQgbG93LCB1bnNpZ25lZCBoaWdoKTsKKwlpbnQgKCp3cm1zcl9yZWdzKSh1MzIgKnJlZ3MpOworCisJdTY0ICgqcmVhZF90c2MpKHZvaWQpOworCXU2NCAoKnJlYWRfcG1jKShpbnQgY291bnRlcik7CisJdW5zaWduZWQgbG9uZyBsb25nICgqcmVhZF90c2NwKSh1bnNpZ25lZCBpbnQgKmF1eCk7CisKKwkvKgorCSAqIEF0b21pY2FsbHkgZW5hYmxlIGludGVycnVwdHMgYW5kIHJldHVybiB0byB1c2Vyc3BhY2UuICBUaGlzCisJICogaXMgb25seSBldmVyIHVzZWQgdG8gcmV0dXJuIHRvIDMyLWJpdCBwcm9jZXNzZXM7IGluIGEKKwkgKiA2NC1iaXQga2VybmVsLCBpdCdzIHVzZWQgZm9yIDMyLW9uLTY0IGNvbXBhdCBwcm9jZXNzZXMsIGJ1dAorCSAqIG5ldmVyIG5hdGl2ZSA2NC1iaXQgcHJvY2Vzc2VzLiAgKEp1bXAsIG5vdCBjYWxsLikKKwkgKi8KKwl2b2lkICgqaXJxX2VuYWJsZV9zeXNleGl0KSh2b2lkKTsKKworCS8qCisJICogU3dpdGNoIHRvIHVzZXJtb2RlIGdzIGFuZCByZXR1cm4gdG8gNjQtYml0IHVzZXJtb2RlIHVzaW5nCisJICogc3lzcmV0LiAgT25seSB1c2VkIGluIDY0LWJpdCBrZXJuZWxzIHRvIHJldHVybiB0byA2NC1iaXQKKwkgKiBwcm9jZXNzZXMuICBVc2VybW9kZSByZWdpc3RlciBzdGF0ZSwgaW5jbHVkaW5nICVyc3AsIG11c3QKKwkgKiBhbHJlYWR5IGJlIHJlc3RvcmVkLgorCSAqLworCXZvaWQgKCp1c2VyZ3Nfc3lzcmV0NjQpKHZvaWQpOworCisJLyoKKwkgKiBTd2l0Y2ggdG8gdXNlcm1vZGUgZ3MgYW5kIHJldHVybiB0byAzMi1iaXQgdXNlcm1vZGUgdXNpbmcKKwkgKiBzeXNyZXQuICBVc2VkIHRvIHJldHVybiB0byAzMi1vbi02NCBjb21wYXQgcHJvY2Vzc2VzLgorCSAqIE90aGVyIHVzZXJtb2RlIHJlZ2lzdGVyIHN0YXRlLCBpbmNsdWRpbmcgJWVzcCwgbXVzdCBhbHJlYWR5CisJICogYmUgcmVzdG9yZWQuCisJICovCisJdm9pZCAoKnVzZXJnc19zeXNyZXQzMikodm9pZCk7CisKKwkvKiBOb3JtYWwgaXJldC4gIEp1bXAgdG8gdGhpcyB3aXRoIHRoZSBzdGFuZGFyZCBpcmV0IHN0YWNrCisJICAgZnJhbWUgc2V0IHVwLiAqLworCXZvaWQgKCppcmV0KSh2b2lkKTsKKworCXZvaWQgKCpzd2FwZ3MpKHZvaWQpOworCisJdm9pZCAoKnN0YXJ0X2NvbnRleHRfc3dpdGNoKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYpOworCXZvaWQgKCplbmRfY29udGV4dF9zd2l0Y2gpKHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCk7Cit9OworCitzdHJ1Y3QgcHZfaXJxX29wcyB7CisJdm9pZCAoKmluaXRfSVJRKSh2b2lkKTsKKworCS8qCisJICogR2V0L3NldCBpbnRlcnJ1cHQgc3RhdGUuICBzYXZlX2ZsIGFuZCByZXN0b3JlX2ZsIGFyZSBvbmx5CisJICogZXhwZWN0ZWQgdG8gdXNlIFg4Nl9FRkxBR1NfSUY7IGFsbCBvdGhlciBiaXRzCisJICogcmV0dXJuZWQgZnJvbSBzYXZlX2ZsIGFyZSB1bmRlZmluZWQsIGFuZCBtYXkgYmUgaWdub3JlZCBieQorCSAqIHJlc3RvcmVfZmwuCisJICoKKwkgKiBOT1RFOiBUaGVzZSBmdW5jdGlvbnMgY2FsbGVycyBleHBlY3QgdGhlIGNhbGxlZSB0byBwcmVzZXJ2ZQorCSAqIG1vcmUgcmVnaXN0ZXJzIHRoYW4gdGhlIHN0YW5kYXJkIEMgY2FsbGluZyBjb252ZW50aW9uLgorCSAqLworCXN0cnVjdCBwYXJhdmlydF9jYWxsZWVfc2F2ZSBzYXZlX2ZsOworCXN0cnVjdCBwYXJhdmlydF9jYWxsZWVfc2F2ZSByZXN0b3JlX2ZsOworCXN0cnVjdCBwYXJhdmlydF9jYWxsZWVfc2F2ZSBpcnFfZGlzYWJsZTsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgaXJxX2VuYWJsZTsKKworCXZvaWQgKCpzYWZlX2hhbHQpKHZvaWQpOworCXZvaWQgKCpoYWx0KSh2b2lkKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwl2b2lkICgqYWRqdXN0X2V4Y2VwdGlvbl9mcmFtZSkodm9pZCk7CisjZW5kaWYKK307CisKK3N0cnVjdCBwdl9hcGljX29wcyB7CisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJdm9pZCAoKnNldHVwX2Jvb3RfY2xvY2spKHZvaWQpOworCXZvaWQgKCpzZXR1cF9zZWNvbmRhcnlfY2xvY2spKHZvaWQpOworCisJdm9pZCAoKnN0YXJ0dXBfaXBpX2hvb2spKGludCBwaHlzX2FwaWNpZCwKKwkJCQkgdW5zaWduZWQgbG9uZyBzdGFydF9laXAsCisJCQkJIHVuc2lnbmVkIGxvbmcgc3RhcnRfZXNwKTsKKyNlbmRpZgorfTsKKworc3RydWN0IHB2X21tdV9vcHMgeworCS8qCisJICogQ2FsbGVkIGJlZm9yZS9hZnRlciBpbml0X21tIHBhZ2V0YWJsZSBzZXR1cC4gc2V0dXBfc3RhcnQKKwkgKiBtYXkgcmVzZXQgJWNyMywgYW5kIG1heSBwcmUtaW5zdGFsbCBwYXJ0cyBvZiB0aGUgcGFnZXRhYmxlOworCSAqIHBhZ2V0YWJsZSBzZXR1cCBpcyBleHBlY3RlZCB0byBwcmVzZXJ2ZSBhbnkgZXhpc3RpbmcKKwkgKiBtYXBwaW5nLgorCSAqLworCXZvaWQgKCpwYWdldGFibGVfc2V0dXBfc3RhcnQpKHBnZF90ICpwZ2RfYmFzZSk7CisJdm9pZCAoKnBhZ2V0YWJsZV9zZXR1cF9kb25lKShwZ2RfdCAqcGdkX2Jhc2UpOworCisJdW5zaWduZWQgbG9uZyAoKnJlYWRfY3IyKSh2b2lkKTsKKwl2b2lkICgqd3JpdGVfY3IyKSh1bnNpZ25lZCBsb25nKTsKKworCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyMykodm9pZCk7CisJdm9pZCAoKndyaXRlX2NyMykodW5zaWduZWQgbG9uZyk7CisKKwkvKgorCSAqIEhvb2tzIGZvciBpbnRlcmNlcHRpbmcgdGhlIGNyZWF0aW9uL3VzZS9kZXN0cnVjdGlvbiBvZiBhbgorCSAqIG1tX3N0cnVjdC4KKwkgKi8KKwl2b2lkICgqYWN0aXZhdGVfbW0pKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsCisJCQkgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCk7CisJdm9pZCAoKmR1cF9tbWFwKShzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwKKwkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisJdm9pZCAoKmV4aXRfbW1hcCkoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworCisKKwkvKiBUTEIgb3BlcmF0aW9ucyAqLworCXZvaWQgKCpmbHVzaF90bGJfdXNlcikodm9pZCk7CisJdm9pZCAoKmZsdXNoX3RsYl9rZXJuZWwpKHZvaWQpOworCXZvaWQgKCpmbHVzaF90bGJfc2luZ2xlKSh1bnNpZ25lZCBsb25nIGFkZHIpOworCXZvaWQgKCpmbHVzaF90bGJfb3RoZXJzKShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywKKwkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJIHVuc2lnbmVkIGxvbmcgdmEpOworCisJLyogSG9va3MgZm9yIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwYWdldGFibGUgdG9wLWxldmVsICovCisJaW50ICAoKnBnZF9hbGxvYykoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworCXZvaWQgKCpwZ2RfZnJlZSkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpOworCisJLyoKKwkgKiBIb29rcyBmb3IgYWxsb2NhdGluZy9yZWxlYXNpbmcgcGFnZXRhYmxlIHBhZ2VzIHdoZW4gdGhleSdyZQorCSAqIGF0dGFjaGVkIHRvIGEgcGFnZXRhYmxlCisJICovCisJdm9pZCAoKmFsbG9jX3B0ZSkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKTsKKwl2b2lkICgqYWxsb2NfcG1kKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pOworCXZvaWQgKCphbGxvY19wbWRfY2xvbmUpKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIGNsb25lcGZuLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKKwl2b2lkICgqYWxsb2NfcHVkKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pOworCXZvaWQgKCpyZWxlYXNlX3B0ZSkodW5zaWduZWQgbG9uZyBwZm4pOworCXZvaWQgKCpyZWxlYXNlX3BtZCkodW5zaWduZWQgbG9uZyBwZm4pOworCXZvaWQgKCpyZWxlYXNlX3B1ZCkodW5zaWduZWQgbG9uZyBwZm4pOworCisJLyogUGFnZXRhYmxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKi8KKwl2b2lkICgqc2V0X3B0ZSkocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCk7CisJdm9pZCAoKnNldF9wdGVfYXQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKTsKKwl2b2lkICgqc2V0X3BtZCkocG1kX3QgKnBtZHAsIHBtZF90IHBtZHZhbCk7CisJdm9pZCAoKnB0ZV91cGRhdGUpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICBwdGVfdCAqcHRlcCk7CisJdm9pZCAoKnB0ZV91cGRhdGVfZGVmZXIpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKKworCXB0ZV90ICgqcHRlcF9tb2RpZnlfcHJvdF9zdGFydCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJcHRlX3QgKnB0ZXApOworCXZvaWQgKCpwdGVwX21vZGlmeV9wcm90X2NvbW1pdCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7CisKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcHRlX3ZhbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgbWFrZV9wdGU7CisKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcGdkX3ZhbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgbWFrZV9wZ2Q7CisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorCXZvaWQgKCpzZXRfcHRlX2F0b21pYykocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCk7CisJdm9pZCAoKnB0ZV9jbGVhcikoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgcHRlX3QgKnB0ZXApOworCXZvaWQgKCpwbWRfY2xlYXIpKHBtZF90ICpwbWRwKTsKKworI2VuZGlmCS8qIENPTkZJR19YODZfUEFFICovCisKKwl2b2lkICgqc2V0X3B1ZCkocHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZHZhbCk7CisKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcG1kX3ZhbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgbWFrZV9wbWQ7CisKKyNpZiBQQUdFVEFCTEVfTEVWRUxTID09IDQKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcHVkX3ZhbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgbWFrZV9wdWQ7CisKKwl2b2lkICgqc2V0X3BnZCkocGdkX3QgKnB1ZHAsIHBnZF90IHBnZHZhbCk7CisjZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA9PSA0ICovCisjZW5kaWYJLyogUEFHRVRBQkxFX0xFVkVMUyA+PSAzICovCisKKyNpZmRlZiBDT05GSUdfSElHSFBURQorCXZvaWQgKigqa21hcF9hdG9taWNfcHRlKShzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpOworI2VuZGlmCisKKwlzdHJ1Y3QgcHZfbGF6eV9vcHMgbGF6eV9tb2RlOworCisJLyogZG9tMCBvcHMgKi8KKworCS8qIFNvbWV0aW1lcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpcyBhIHBmbiwgYW5kIHNvbWV0aW1lcyBpdHMKKwkgICBhbiBtZm4uICBXZSBjYW4gdGVsbCB3aGljaCBpcyB3aGljaCBmcm9tIHRoZSBpbmRleC4gKi8KKwl2b2lkICgqc2V0X2ZpeG1hcCkodW5zaWduZWQgLyogZW51bSBmaXhlZF9hZGRyZXNzZXMgKi8gaWR4LAorCQkJICAgcGh5c19hZGRyX3QgcGh5cywgcGdwcm90X3QgZmxhZ3MpOworfTsKKworc3RydWN0IHJhd19zcGlubG9jazsKK3N0cnVjdCBwdl9sb2NrX29wcyB7CisJaW50ICgqc3Bpbl9pc19sb2NrZWQpKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spOworCWludCAoKnNwaW5faXNfY29udGVuZGVkKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKKwl2b2lkICgqc3Bpbl9sb2NrKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKKwl2b2lkICgqc3Bpbl9sb2NrX2ZsYWdzKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwlpbnQgKCpzcGluX3RyeWxvY2spKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spOworCXZvaWQgKCpzcGluX3VubG9jaykoc3RydWN0IHJhd19zcGlubG9jayAqbG9jayk7Cit9OworCisvKiBUaGlzIGNvbnRhaW5zIGFsbCB0aGUgcGFyYXZpcnQgc3RydWN0dXJlczogd2UgZ2V0IGEgY29udmVuaWVudAorICogbnVtYmVyIGZvciBlYWNoIGZ1bmN0aW9uIHVzaW5nIHRoZSBvZmZzZXQgd2hpY2ggd2UgdXNlIHRvIGluZGljYXRlCisgKiB3aGF0IHRvIHBhdGNoLiAqLworc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3RlbXBsYXRlIHsKKwlzdHJ1Y3QgcHZfaW5pdF9vcHMgcHZfaW5pdF9vcHM7CisJc3RydWN0IHB2X3RpbWVfb3BzIHB2X3RpbWVfb3BzOworCXN0cnVjdCBwdl9jcHVfb3BzIHB2X2NwdV9vcHM7CisJc3RydWN0IHB2X2lycV9vcHMgcHZfaXJxX29wczsKKwlzdHJ1Y3QgcHZfYXBpY19vcHMgcHZfYXBpY19vcHM7CisJc3RydWN0IHB2X21tdV9vcHMgcHZfbW11X29wczsKKwlzdHJ1Y3QgcHZfbG9ja19vcHMgcHZfbG9ja19vcHM7Cit9OworCitleHRlcm4gc3RydWN0IHB2X2luZm8gcHZfaW5mbzsKK2V4dGVybiBzdHJ1Y3QgcHZfaW5pdF9vcHMgcHZfaW5pdF9vcHM7CitleHRlcm4gc3RydWN0IHB2X3RpbWVfb3BzIHB2X3RpbWVfb3BzOworZXh0ZXJuIHN0cnVjdCBwdl9jcHVfb3BzIHB2X2NwdV9vcHM7CitleHRlcm4gc3RydWN0IHB2X2lycV9vcHMgcHZfaXJxX29wczsKK2V4dGVybiBzdHJ1Y3QgcHZfYXBpY19vcHMgcHZfYXBpY19vcHM7CitleHRlcm4gc3RydWN0IHB2X21tdV9vcHMgcHZfbW11X29wczsKK2V4dGVybiBzdHJ1Y3QgcHZfbG9ja19vcHMgcHZfbG9ja19vcHM7CisKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0goeCkJCQkJCVwKKwkob2Zmc2V0b2Yoc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3RlbXBsYXRlLCB4KSAvIHNpemVvZih2b2lkICopKQorCisjZGVmaW5lIHBhcmF2aXJ0X3R5cGUob3ApCQkJCVwKKwlbcGFyYXZpcnRfdHlwZW51bV0gImkiIChQQVJBVklSVF9QQVRDSChvcCkpLAlcCisJW3BhcmF2aXJ0X29wcHRyXSAiaSIgKCYob3ApKQorI2RlZmluZSBwYXJhdmlydF9jbG9iYmVyKGNsb2JiZXIpCQlcCisJW3BhcmF2aXJ0X2Nsb2JiZXJdICJpIiAoY2xvYmJlcikKKworLyoKKyAqIEdlbmVyYXRlIHNvbWUgY29kZSwgYW5kIG1hcmsgaXQgYXMgcGF0Y2hhYmxlIGJ5IHRoZQorICogYXBwbHlfcGFyYXZpcnQoKSBhbHRlcm5hdGUgaW5zdHJ1Y3Rpb24gcGF0Y2hlci4KKyAqLworI2RlZmluZSBfcGFyYXZpcnRfYWx0KGluc25fc3RyaW5nLCB0eXBlLCBjbG9iYmVyKQlcCisJIjc3MTpcblx0IiBpbnNuX3N0cmluZyAiXG4iICI3NzI6XG4iCQlcCisJIi5wdXNoc2VjdGlvbiAucGFyYWluc3RydWN0aW9ucyxcImFcIlxuIglcCisJX0FTTV9BTElHTiAiXG4iCQkJCQlcCisJX0FTTV9QVFIgIiA3NzFiXG4iCQkJCVwKKwkiICAuYnl0ZSAiIHR5cGUgIlxuIgkJCQlcCisJIiAgLmJ5dGUgNzcyYi03NzFiXG4iCQkJCVwKKwkiICAuc2hvcnQgIiBjbG9iYmVyICJcbiIJCQlcCisJIi5wb3BzZWN0aW9uXG4iCisKKy8qIEdlbmVyYXRlIHBhdGNoYWJsZSBjb2RlLCB3aXRoIHRoZSBkZWZhdWx0IGFzbSBwYXJhbWV0ZXJzLiAqLworI2RlZmluZSBwYXJhdmlydF9hbHQoaW5zbl9zdHJpbmcpCQkJCQlcCisJX3BhcmF2aXJ0X2FsdChpbnNuX3N0cmluZywgIiVjW3BhcmF2aXJ0X3R5cGVudW1dIiwgIiVjW3BhcmF2aXJ0X2Nsb2JiZXJdIikKKworLyogU2ltcGxlIGluc3RydWN0aW9uIHBhdGNoaW5nIGNvZGUuICovCisjZGVmaW5lIERFRl9OQVRJVkUob3BzLCBuYW1lLCBjb2RlKSAJCQkJCVwKKwlleHRlcm4gY29uc3QgY2hhciBzdGFydF8jI29wcyMjXyMjbmFtZVtdLCBlbmRfIyNvcHMjI18jI25hbWVbXTsJXAorCWFzbSgic3RhcnRfIiAjb3BzICJfIiAjbmFtZSAiOiAiIGNvZGUgIjsgZW5kXyIgI29wcyAiXyIgI25hbWUgIjoiKQorCit1bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9ub3Aodm9pZCk7Cit1bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9pZGVudF8zMih2b2lkICppbnNuYnVmLCB1bnNpZ25lZCBsZW4pOwordW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfaWRlbnRfNjQodm9pZCAqaW5zbmJ1ZiwgdW5zaWduZWQgbGVuKTsKK3Vuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2lnbm9yZSh1bnNpZ25lZCBsZW4pOwordW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfY2FsbCh2b2lkICppbnNuYnVmLAorCQkJICAgICBjb25zdCB2b2lkICp0YXJnZXQsIHUxNiB0Z3RfY2xvYmJlcnMsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdTE2IHNpdGVfY2xvYmJlcnMsCisJCQkgICAgIHVuc2lnbmVkIGxlbik7Cit1bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9qbXAodm9pZCAqaW5zbmJ1ZiwgY29uc3Qgdm9pZCAqdGFyZ2V0LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbGVuKTsKK3Vuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2RlZmF1bHQodTggdHlwZSwgdTE2IGNsb2JiZXJzLCB2b2lkICppbnNuYnVmLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbGVuKTsKKwordW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfaW5zbnModm9pZCAqaW5zbmJ1ZiwgdW5zaWduZWQgbGVuLAorCQkJICAgICAgY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVuZCk7CisKK3Vuc2lnbmVkIG5hdGl2ZV9wYXRjaCh1OCB0eXBlLCB1MTYgY2xvYmJlcnMsIHZvaWQgKmlidWYsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbGVuKTsKKworaW50IHBhcmF2aXJ0X2Rpc2FibGVfaW9zcGFjZSh2b2lkKTsKKworLyoKKyAqIFRoaXMgZ2VuZXJhdGVzIGFuIGluZGlyZWN0IGNhbGwgYmFzZWQgb24gdGhlIG9wZXJhdGlvbiB0eXBlIG51bWJlci4KKyAqIFRoZSB0eXBlIG51bWJlciwgY29tcHV0ZWQgaW4gUEFSQVZJUlRfUEFUQ0gsIGlzIGRlcml2ZWQgZnJvbSB0aGUKKyAqIG9mZnNldCBpbnRvIHRoZSBwYXJhdmlydF9wYXRjaF90ZW1wbGF0ZSBzdHJ1Y3R1cmUsIGFuZCBjYW4gdGhlcmVmb3JlIGJlCisgKiBmcmVlbHkgY29udmVydGVkIGJhY2sgaW50byBhIHN0cnVjdHVyZSBvZmZzZXQuCisgKi8KKyNkZWZpbmUgUEFSQVZJUlRfQ0FMTAkiY2FsbCAqJWNbcGFyYXZpcnRfb3BwdHJdOyIKKworLyoKKyAqIFRoZXNlIG1hY3JvcyBhcmUgaW50ZW5kZWQgdG8gd3JhcCBjYWxscyB0aHJvdWdoIG9uZSBvZiB0aGUgcGFyYXZpcnQKKyAqIG9wcyBzdHJ1Y3RzLCBzbyB0aGF0IHRoZXkgY2FuIGJlIGxhdGVyIGlkZW50aWZpZWQgYW5kIHBhdGNoZWQgYXQKKyAqIHJ1bnRpbWUuCisgKgorICogTm9ybWFsbHksIGEgY2FsbCB0byBhIHB2X29wIGZ1bmN0aW9uIGlzIGEgc2ltcGxlIGluZGlyZWN0IGNhbGw6CisgKiAocHZfb3Bfc3RydWN0Lm9wZXJhdGlvbnMpKGFyZ3MuLi4pLgorICoKKyAqIFVuZm9ydHVuYXRlbHksIHRoaXMgaXMgYSByZWxhdGl2ZWx5IHNsb3cgb3BlcmF0aW9uIGZvciBtb2Rlcm4gQ1BVcywKKyAqIGJlY2F1c2UgaXQgY2Fubm90IG5lY2Vzc2FyaWx5IGRldGVybWluZSB3aGF0IHRoZSBkZXN0aW5hdGlvbgorICogYWRkcmVzcyBpcy4gIEluIHRoaXMgY2FzZSwgdGhlIGFkZHJlc3MgaXMgYSBydW50aW1lIGNvbnN0YW50LCBzbyBhdAorICogdGhlIHZlcnkgbGVhc3Qgd2UgY2FuIHBhdGNoIHRoZSBjYWxsIHRvIGUgYSBzaW1wbGUgZGlyZWN0IGNhbGwsIG9yCisgKiBpZGVhbGx5LCBwYXRjaCBhbiBpbmxpbmUgaW1wbGVtZW50YXRpb24gaW50byB0aGUgY2FsbHNpdGUuICAoRGlyZWN0CisgKiBjYWxscyBhcmUgZXNzZW50aWFsbHkgZnJlZSwgYmVjYXVzZSB0aGUgY2FsbCBhbmQgcmV0dXJuIGFkZHJlc3NlcworICogYXJlIGNvbXBsZXRlbHkgcHJlZGljdGFibGUuKQorICoKKyAqIEZvciBpMzg2LCB0aGVzZSBtYWNyb3MgcmVseSBvbiB0aGUgc3RhbmRhcmQgZ2NjICJyZWdwYXJtKDMpIiBjYWxsaW5nCisgKiBjb252ZW50aW9uLCBpbiB3aGljaCB0aGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIGFyZSBwbGFjZWQgaW4gJWVheCwKKyAqICVlZHgsICVlY3ggKGluIHRoYXQgb3JkZXIpLCBhbmQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHBsYWNlZAorICogb24gdGhlIHN0YWNrLiAgQWxsIGNhbGxlci1zYXZlIHJlZ2lzdGVycyAoZWF4LGVkeCxlY3gpIGFyZSBleHBlY3RlZAorICogdG8gYmUgbW9kaWZpZWQgKGVpdGhlciBjbG9iYmVyZWQgb3IgdXNlZCBmb3IgcmV0dXJuIHZhbHVlcykuCisgKiBYODZfNjQsIG9uIHRoZSBvdGhlciBoYW5kLCBhbHJlYWR5IHNwZWNpZmllcyBhIHJlZ2lzdGVyLWJhc2VkIGNhbGxpbmcKKyAqIGNvbnZlbnRpb25zLCByZXR1cm5pbmcgYXQgJXJheCwgd2l0aCBwYXJhbWV0ZXJlcyBnb2luZyBvbiAlcmRpLCAlcnNpLAorICogJXJkeCwgYW5kICVyY3guIE5vdGUgdGhhdCBmb3IgdGhpcyByZWFzb24sIHg4Nl82NCBkb2VzIG5vdCBuZWVkIGFueQorICogc3BlY2lhbCBoYW5kbGluZyBmb3IgZGVhbGluZyB3aXRoIDQgYXJndW1lbnRzLCB1bmxpa2UgaTM4Ni4KKyAqIEhvd2V2ZXIsIHg4Nl82NCBhbHNvIGhhdmUgdG8gY2xvYmJlciBhbGwgY2FsbGVyIHNhdmVkIHJlZ2lzdGVycywgd2hpY2gKKyAqIHVuZm9ydHVuYXRlbHksIGFyZSBxdWl0ZSBhIGJpdCAocjggLSByMTEpCisgKgorICogVGhlIGNhbGwgaW5zdHJ1Y3Rpb24gaXRzZWxmIGlzIG1hcmtlZCBieSBwbGFjaW5nIGl0cyBzdGFydCBhZGRyZXNzCisgKiBhbmQgc2l6ZSBpbnRvIHRoZSAucGFyYWluc3RydWN0aW9ucyBzZWN0aW9uLCBzbyB0aGF0CisgKiBhcHBseV9wYXJhdmlydCgpIGluIGFyY2gvaTM4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBjYW4gZG8gdGhlCisgKiBhcHByb3ByaWF0ZSBwYXRjaGluZyB1bmRlciB0aGUgY29udHJvbCBvZiB0aGUgYmFja2VuZCBwdl9pbml0X29wcworICogaW1wbGVtZW50YXRpb24uCisgKgorICogVW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byBnZXQgZ2NjIHRvIGdlbmVyYXRlIHRoZSBhcmdzIHNldHVwCisgKiBmb3IgdGhlIGNhbGwsIGFuZCB0aGVuIGFsbG93IHRoZSBjYWxsIGl0c2VsZiB0byBiZSBnZW5lcmF0ZWQgYnkgYW4KKyAqIGlubGluZSBhc20uICBCZWNhdXNlIG9mIHRoaXMsIHdlIG11c3QgZG8gdGhlIGNvbXBsZXRlIGFyZyBzZXR1cCBhbmQKKyAqIHJldHVybiB2YWx1ZSBoYW5kbGluZyBmcm9tIHdpdGhpbiB0aGVzZSBtYWNyb3MuICBUaGlzIGlzIGZhaXJseQorICogY3VtYmVyc29tZS4KKyAqCisgKiBUaGVyZSBhcmUgNSBzZXRzIG9mIFBWT1BfKiBtYWNyb3MgZm9yIGRlYWxpbmcgd2l0aCAwLTQgYXJndW1lbnRzLgorICogSXQgY291bGQgYmUgZXh0ZW5kZWQgdG8gbW9yZSBhcmd1bWVudHMsIGJ1dCB0aGVyZSB3b3VsZCBiZSBsaXR0bGUKKyAqIHRvIGJlIGdhaW5lZCBmcm9tIHRoYXQuICBGb3IgZWFjaCBudW1iZXIgb2YgYXJndW1lbnRzLCB0aGVyZSBhcmUKKyAqIHRoZSB0d28gVkNBTEwgYW5kIENBTEwgdmFyaWFudHMgZm9yIHZvaWQgYW5kIG5vbi12b2lkIGZ1bmN0aW9ucy4KKyAqCisgKiBXaGVuIHRoZXJlIGlzIGEgcmV0dXJuIHZhbHVlLCB0aGUgaW52b2tlciBvZiB0aGUgbWFjcm8gbXVzdCBzcGVjaWZ5CisgKiB0aGUgcmV0dXJuIHR5cGUuICBUaGUgbWFjcm8gdGhlbiB1c2VzIHNpemVvZigpIG9uIHRoYXQgdHlwZSB0bworICogZGV0ZXJtaW5lIHdoZXRoZXIgaXRzIGEgMzIgb3IgNjQgYml0IHZhbHVlLCBhbmQgcGxhY2VzIHRoZSByZXR1cm4KKyAqIGluIHRoZSByaWdodCByZWdpc3RlcihzKSAoanVzdCAlZWF4IGZvciAzMi1iaXQsIGFuZCAlZWR4OiVlYXggZm9yCisgKiA2NC1iaXQpLiBGb3IgeDg2XzY0IG1hY2hpbmVzLCBpdCBqdXN0IHJldHVybnMgYXQgJXJheCByZWdhcmRsZXNzIG9mCisgKiB0aGUgcmV0dXJuIHZhbHVlIHNpemUuCisgKgorICogNjQtYml0IGFyZ3VtZW50cyBhcmUgcGFzc2VkIGFzIGEgcGFpciBvZiBhZGphY2VudCAzMi1iaXQgYXJndW1lbnRzCisgKiBpMzg2IGFsc28gcGFzc2VzIDY0LWJpdCBhcmd1bWVudHMgYXMgYSBwYWlyIG9mIGFkamFjZW50IDMyLWJpdCBhcmd1bWVudHMKKyAqIGluIGxvdyxoaWdoIG9yZGVyCisgKgorICogU21hbGwgc3RydWN0dXJlcyBhcmUgcGFzc2VkIGFuZCByZXR1cm5lZCBpbiByZWdpc3RlcnMuICBUaGUgbWFjcm8KKyAqIGNhbGxpbmcgY29udmVudGlvbiBjYW4ndCBkaXJlY3RseSBkZWFsIHdpdGggdGhpcywgc28gdGhlIHdyYXBwZXIKKyAqIGZ1bmN0aW9ucyBtdXN0IGRvIHRoaXMuCisgKgorICogVGhlc2UgUFZPUF8qIG1hY3JvcyBhcmUgb25seSBkZWZpbmVkIHdpdGhpbiB0aGlzIGhlYWRlci4gIFRoaXMKKyAqIG1lYW5zIHRoYXQgYWxsIHVzZXMgbXVzdCBiZSB3cmFwcGVkIGluIGlubGluZSBmdW5jdGlvbnMuICBUaGlzIGFsc28KKyAqIG1ha2VzIHN1cmUgdGhlIGluY29taW5nIGFuZCBvdXRnb2luZyB0eXBlcyBhcmUgYWx3YXlzIGNvcnJlY3QuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjZGVmaW5lIFBWT1BfVkNBTExfQVJHUwkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2VheCA9IF9fZWF4LCBfX2VkeCA9IF9fZWR4LCBfX2VjeCA9IF9fZWN4CisjZGVmaW5lIFBWT1BfQ0FMTF9BUkdTCQkJUFZPUF9WQ0FMTF9BUkdTCisKKyNkZWZpbmUgUFZPUF9DQUxMX0FSRzEoeCkJCSJhIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBQVk9QX0NBTExfQVJHMih4KQkJImQiICgodW5zaWduZWQgbG9uZykoeCkpCisjZGVmaW5lIFBWT1BfQ0FMTF9BUkczKHgpCQkiYyIgKCh1bnNpZ25lZCBsb25nKSh4KSkKKworI2RlZmluZSBQVk9QX1ZDQUxMX0NMT0JCRVJTCQkiPWEiIChfX2VheCksICI9ZCIgKF9fZWR4KSwJXAorCQkJCQkiPWMiIChfX2VjeCkKKyNkZWZpbmUgUFZPUF9DQUxMX0NMT0JCRVJTCQlQVk9QX1ZDQUxMX0NMT0JCRVJTCisKKyNkZWZpbmUgUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCQkiPWEiIChfX2VheCksICI9ZCIgKF9fZWR4KQorI2RlZmluZSBQVk9QX0NBTExFRV9DTE9CQkVSUwkJUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCisKKyNkZWZpbmUgRVhUUkFfQ0xPQkJFUlMKKyNkZWZpbmUgVkVYVFJBX0NMT0JCRVJTCisjZWxzZSAgLyogQ09ORklHX1g4Nl82NCAqLworI2RlZmluZSBQVk9QX1ZDQUxMX0FSR1MJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZWRpID0gX19lZGksIF9fZXNpID0gX19lc2ksCVwKKwkJX19lZHggPSBfX2VkeCwgX19lY3ggPSBfX2VjeAorI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJUFZPUF9WQ0FMTF9BUkdTLCBfX2VheAorCisjZGVmaW5lIFBWT1BfQ0FMTF9BUkcxKHgpCQkiRCIgKCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgUFZPUF9DQUxMX0FSRzIoeCkJCSJTIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBQVk9QX0NBTExfQVJHMyh4KQkJImQiICgodW5zaWduZWQgbG9uZykoeCkpCisjZGVmaW5lIFBWT1BfQ0FMTF9BUkc0KHgpCQkiYyIgKCh1bnNpZ25lZCBsb25nKSh4KSkKKworI2RlZmluZSBQVk9QX1ZDQUxMX0NMT0JCRVJTCSI9RCIgKF9fZWRpKSwJCQkJXAorCQkJCSI9UyIgKF9fZXNpKSwgIj1kIiAoX19lZHgpLAkJXAorCQkJCSI9YyIgKF9fZWN4KQorI2RlZmluZSBQVk9QX0NBTExfQ0xPQkJFUlMJUFZPUF9WQ0FMTF9DTE9CQkVSUywgIj1hIiAoX19lYXgpCisKKyNkZWZpbmUgUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCSI9YSIgKF9fZWF4KQorI2RlZmluZSBQVk9QX0NBTExFRV9DTE9CQkVSUwlQVk9QX1ZDQUxMRUVfQ0xPQkJFUlMKKworI2RlZmluZSBFWFRSQV9DTE9CQkVSUwkgLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIKKyNkZWZpbmUgVkVYVFJBX0NMT0JCRVJTCSAsICJyYXgiLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIKKyNlbmRpZgkvKiBDT05GSUdfWDg2XzMyICovCisKKyNpZmRlZiBDT05GSUdfUEFSQVZJUlRfREVCVUcKKyNkZWZpbmUgUFZPUF9URVNUX05VTEwob3ApCUJVR19PTihvcCA9PSBOVUxMKQorI2Vsc2UKKyNkZWZpbmUgUFZPUF9URVNUX05VTEwob3ApCSgodm9pZClvcCkKKyNlbmRpZgorCisjZGVmaW5lIF9fX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsIGNsYnIsIGNhbGxfY2xiciwgZXh0cmFfY2xiciwJCVwKKwkJICAgICAgcHJlLCBwb3N0LCAuLi4pCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJcmV0dHlwZSBfX3JldDsJCQkJCQlcCisJCVBWT1BfQ0FMTF9BUkdTOwkJCQkJCVwKKwkJUFZPUF9URVNUX05VTEwob3ApOwkJCQkJXAorCQkvKiBUaGlzIGlzIDMyLWJpdCBzcGVjaWZpYywgYnV0IGlzIG9rYXkgaW4gNjQtYml0ICovCVwKKwkJLyogc2luY2UgdGhpcyBjb25kaXRpb24gd2lsbCBuZXZlciBob2xkICovCQlcCisJCWlmIChzaXplb2YocmV0dHlwZSkgPiBzaXplb2YodW5zaWduZWQgbG9uZykpIHsJCVwKKwkJCWFzbSB2b2xhdGlsZShwcmUJCQkJXAorCQkJCSAgICAgcGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCVwKKwkJCQkgICAgIHBvc3QJCQkJXAorCQkJCSAgICAgOiBjYWxsX2NsYnIJCQlcCisJCQkJICAgICA6IHBhcmF2aXJ0X3R5cGUob3ApLAkJXAorCQkJCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKGNsYnIpLAkJXAorCQkJCSAgICAgICAjI19fVkFfQVJHU19fCQkJXAorCQkJCSAgICAgOiAibWVtb3J5IiwgImNjIiBleHRyYV9jbGJyKTsJXAorCQkJX19yZXQgPSAocmV0dHlwZSkoKCgodTY0KV9fZWR4KSA8PCAzMikgfCBfX2VheCk7IFwKKwkJfSBlbHNlIHsJCQkJCQlcCisJCQlhc20gdm9sYXRpbGUocHJlCQkJCVwKKwkJCQkgICAgIHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQlcCisJCQkJICAgICBwb3N0CQkJCVwKKwkJCQkgICAgIDogY2FsbF9jbGJyCQkJXAorCQkJCSAgICAgOiBwYXJhdmlydF90eXBlKG9wKSwJCVwKKwkJCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihjbGJyKSwJCVwKKwkJCQkgICAgICAgIyNfX1ZBX0FSR1NfXwkJCVwKKwkJCQkgICAgIDogIm1lbW9yeSIsICJjYyIgZXh0cmFfY2xicik7CVwKKwkJCV9fcmV0ID0gKHJldHR5cGUpX19lYXg7CQkJCVwKKwkJfQkJCQkJCQlcCisJCV9fcmV0OwkJCQkJCQlcCisJfSkKKworI2RlZmluZSBfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgcHJlLCBwb3N0LCAuLi4pCQkJXAorCV9fX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsIENMQlJfQU5ZLCBQVk9QX0NBTExfQ0xPQkJFUlMsCVwKKwkJICAgICAgRVhUUkFfQ0xPQkJFUlMsIHByZSwgcG9zdCwgIyNfX1ZBX0FSR1NfXykKKworI2RlZmluZSBfX1BWT1BfQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgcHJlLCBwb3N0LCAuLi4pCQkJXAorCV9fX19QVk9QX0NBTEwocmV0dHlwZSwgb3AuZnVuYywgQ0xCUl9SRVRfUkVHLAkJCVwKKwkJICAgICAgUFZPUF9DQUxMRUVfQ0xPQkJFUlMsICwJCQkJXAorCQkgICAgICBwcmUsIHBvc3QsICMjX19WQV9BUkdTX18pCisKKworI2RlZmluZSBfX19fUFZPUF9WQ0FMTChvcCwgY2xiciwgY2FsbF9jbGJyLCBleHRyYV9jbGJyLCBwcmUsIHBvc3QsIC4uLikJXAorCSh7CQkJCQkJCQlcCisJCVBWT1BfVkNBTExfQVJHUzsJCQkJCVwKKwkJUFZPUF9URVNUX05VTEwob3ApOwkJCQkJXAorCQlhc20gdm9sYXRpbGUocHJlCQkJCQlcCisJCQkgICAgIHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQkJXAorCQkJICAgICBwb3N0CQkJCQlcCisJCQkgICAgIDogY2FsbF9jbGJyCQkJCVwKKwkJCSAgICAgOiBwYXJhdmlydF90eXBlKG9wKSwJCQlcCisJCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihjbGJyKSwJCQlcCisJCQkgICAgICAgIyNfX1ZBX0FSR1NfXwkJCQlcCisJCQkgICAgIDogIm1lbW9yeSIsICJjYyIgZXh0cmFfY2xicik7CQlcCisJfSkKKworI2RlZmluZSBfX1BWT1BfVkNBTEwob3AsIHByZSwgcG9zdCwgLi4uKQkJCQlcCisJX19fX1BWT1BfVkNBTEwob3AsIENMQlJfQU5ZLCBQVk9QX1ZDQUxMX0NMT0JCRVJTLAkJXAorCQkgICAgICAgVkVYVFJBX0NMT0JCRVJTLAkJCQkJXAorCQkgICAgICAgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQorCisjZGVmaW5lIF9fUFZPUF9WQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgcHJlLCBwb3N0LCAuLi4pCQkJXAorCV9fX19QVk9QX0NBTEwocmV0dHlwZSwgb3AuZnVuYywgQ0xCUl9SRVRfUkVHLAkJCVwKKwkJICAgICAgUFZPUF9WQ0FMTEVFX0NMT0JCRVJTLCAsCQkJCVwKKwkJICAgICAgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQorCisKKworI2RlZmluZSBQVk9QX0NBTEwwKHJldHR5cGUsIG9wKQkJCQkJCVwKKwlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiKQorI2RlZmluZSBQVk9QX1ZDQUxMMChvcCkJCQkJCQkJXAorCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiKQorCisjZGVmaW5lIFBWT1BfQ0FMTEVFMChyZXR0eXBlLCBvcCkJCQkJCVwKKwlfX1BWT1BfQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgIiIsICIiKQorI2RlZmluZSBQVk9QX1ZDQUxMRUUwKG9wKQkJCQkJCVwKKwlfX1BWT1BfVkNBTExFRVNBVkUob3AsICIiLCAiIikKKworCisjZGVmaW5lIFBWT1BfQ0FMTDEocmV0dHlwZSwgb3AsIGFyZzEpCQkJCQlcCisJX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSkpCisjZGVmaW5lIFBWT1BfVkNBTEwxKG9wLCBhcmcxKQkJCQkJCVwKKwlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSkpCisKKyNkZWZpbmUgUFZPUF9DQUxMRUUxKHJldHR5cGUsIG9wLCBhcmcxKQkJCQkJXAorCV9fUFZPUF9DQUxMRUVTQVZFKHJldHR5cGUsIG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpKQorI2RlZmluZSBQVk9QX1ZDQUxMRUUxKG9wLCBhcmcxKQkJCQkJCVwKKwlfX1BWT1BfVkNBTExFRVNBVkUob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSkpCisKKworI2RlZmluZSBQVk9QX0NBTEwyKHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyKQkJCQlcCisJX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSksCQlcCisJCSAgICBQVk9QX0NBTExfQVJHMihhcmcyKSkKKyNkZWZpbmUgUFZPUF9WQ0FMTDIob3AsIGFyZzEsIGFyZzIpCQkJCQlcCisJX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLAkJCVwKKwkJICAgICBQVk9QX0NBTExfQVJHMihhcmcyKSkKKworI2RlZmluZSBQVk9QX0NBTExFRTIocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIpCQkJCVwKKwlfX1BWT1BfQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJXAorCQkJICBQVk9QX0NBTExfQVJHMihhcmcyKSkKKyNkZWZpbmUgUFZPUF9WQ0FMTEVFMihvcCwgYXJnMSwgYXJnMikJCQkJCVwKKwlfX1BWT1BfVkNBTExFRVNBVkUob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSksCQlcCisJCQkgICBQVk9QX0NBTExfQVJHMihhcmcyKSkKKworCisjZGVmaW5lIFBWT1BfQ0FMTDMocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIsIGFyZzMpCQkJXAorCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLAkJXAorCQkgICAgUFZPUF9DQUxMX0FSRzIoYXJnMiksIFBWT1BfQ0FMTF9BUkczKGFyZzMpKQorI2RlZmluZSBQVk9QX1ZDQUxMMyhvcCwgYXJnMSwgYXJnMiwgYXJnMykJCQkJXAorCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJCQlcCisJCSAgICAgUFZPUF9DQUxMX0FSRzIoYXJnMiksIFBWT1BfQ0FMTF9BUkczKGFyZzMpKQorCisvKiBUaGlzIGlzIHRoZSBvbmx5IGRpZmZlcmVuY2UgaW4geDg2XzY0LiBXZSBjYW4gbWFrZSBpdCBtdWNoIHNpbXBsZXIgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjZGVmaW5lIFBWT1BfQ0FMTDQocmV0dHlwZSwgb3AsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpCQkJXAorCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLAkJCQkJXAorCQkgICAgInB1c2ggJVtfYXJnNF07IiwgImxlYSA0KCUlZXNwKSwlJWVzcDsiLAkJXAorCQkgICAgUFZPUF9DQUxMX0FSRzEoYXJnMSksIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLAkJXAorCQkgICAgUFZPUF9DQUxMX0FSRzMoYXJnMyksIFtfYXJnNF0gIm1yIiAoKHUzMikoYXJnNCkpKQorI2RlZmluZSBQVk9QX1ZDQUxMNChvcCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkJCQkJXAorCV9fUFZPUF9WQ0FMTChvcCwJCQkJCQlcCisJCSAgICAicHVzaCAlW19hcmc0XTsiLCAibGVhIDQoJSVlc3ApLCUlZXNwOyIsCQlcCisJCSAgICAiMCIgKCh1MzIpKGFyZzEpKSwgIjEiICgodTMyKShhcmcyKSksCQlcCisJCSAgICAiMiIgKCh1MzIpKGFyZzMpKSwgW19hcmc0XSAibXIiICgodTMyKShhcmc0KSkpCisjZWxzZQorI2RlZmluZSBQVk9QX0NBTEw0KHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQkJCVwKKwlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiLAkJCQlcCisJCSAgICBQVk9QX0NBTExfQVJHMShhcmcxKSwgUFZPUF9DQUxMX0FSRzIoYXJnMiksCQlcCisJCSAgICBQVk9QX0NBTExfQVJHMyhhcmczKSwgUFZPUF9DQUxMX0FSRzQoYXJnNCkpCisjZGVmaW5lIFBWT1BfVkNBTEw0KG9wLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQkJCQlcCisJX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsCQkJCQlcCisJCSAgICAgUFZPUF9DQUxMX0FSRzEoYXJnMSksIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLAlcCisJCSAgICAgUFZPUF9DQUxMX0FSRzMoYXJnMyksIFBWT1BfQ0FMTF9BUkc0KGFyZzQpKQorI2VuZGlmCisKKy8qIExhenkgbW9kZSBmb3IgYmF0Y2hpbmcgdXBkYXRlcyAvIGNvbnRleHQgc3dpdGNoICovCitlbnVtIHBhcmF2aXJ0X2xhenlfbW9kZSB7CisJUEFSQVZJUlRfTEFaWV9OT05FLAorCVBBUkFWSVJUX0xBWllfTU1VLAorCVBBUkFWSVJUX0xBWllfQ1BVLAorfTsKKworZW51bSBwYXJhdmlydF9sYXp5X21vZGUgcGFyYXZpcnRfZ2V0X2xhenlfbW9kZSh2b2lkKTsKK3ZvaWQgcGFyYXZpcnRfc3RhcnRfY29udGV4dF9zd2l0Y2goc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KTsKK3ZvaWQgcGFyYXZpcnRfZW5kX2NvbnRleHRfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCk7CisKK3ZvaWQgcGFyYXZpcnRfZW50ZXJfbGF6eV9tbXUodm9pZCk7Cit2b2lkIHBhcmF2aXJ0X2xlYXZlX2xhenlfbW11KHZvaWQpOworCit2b2lkIF9wYXJhdmlydF9ub3Aodm9pZCk7Cit1MzIgX3BhcmF2aXJ0X2lkZW50XzMyKHUzMik7Cit1NjQgX3BhcmF2aXJ0X2lkZW50XzY0KHU2NCk7CisKKyNkZWZpbmUgcGFyYXZpcnRfbm9wCSgodm9pZCAqKV9wYXJhdmlydF9ub3ApCisKKy8qIFRoZXNlIGFsbCBzaXQgaW4gdGhlIC5wYXJhaW5zdHJ1Y3Rpb25zIHNlY3Rpb24gdG8gdGVsbCB1cyB3aGF0IHRvIHBhdGNoLiAqLworc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgeworCXU4ICppbnN0cjsgCQkvKiBvcmlnaW5hbCBpbnN0cnVjdGlvbnMgKi8KKwl1OCBpbnN0cnR5cGU7CQkvKiB0eXBlIG9mIHRoaXMgaW5zdHJ1Y3Rpb24gKi8KKwl1OCBsZW47CQkJLyogbGVuZ3RoIG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJdTE2IGNsb2JiZXJzOwkJLyogd2hhdCByZWdpc3RlcnMgeW91IG1heSBjbG9iYmVyICovCit9OworCitleHRlcm4gc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgX19wYXJhaW5zdHJ1Y3Rpb25zW10sCisJX19wYXJhaW5zdHJ1Y3Rpb25zX2VuZFtdOworCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZgkvKiBfQVNNX1g4Nl9QQVJBVklSVF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCmluZGV4IDdhZjE0ZTUuLmUyYzE2NjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCkBAIC0xOSw0ICsxOSw5IEBACiBleHRlcm4gaW50IGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHU2NCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCXVuc2lnbmVkIGxvbmcgZmxhZyk7CiAKK2ludCBpb19yZXNlcnZlX21lbXR5cGUocmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3QgZW5kLAorCQkJdW5zaWduZWQgbG9uZyAqdHlwZSk7CisKK3ZvaWQgaW9fZnJlZV9tZW10eXBlKHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IGVuZCk7CisKICNlbmRpZiAvKiBfQVNNX1g4Nl9QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAppbmRleCAxMDNmMWRkLi5iNjVhMzZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtNDksNyArNDksNyBAQAogI2RlZmluZSBfX3BlcmNwdV9hcmcoeCkJCSIlJSJfX3N0cmluZ2lmeShfX3BlcmNwdV9zZWcpIjolUCIgI3gKICNkZWZpbmUgX19teV9jcHVfb2Zmc2V0CQlwZXJjcHVfcmVhZCh0aGlzX2NwdV9vZmYpCiAjZWxzZQotI2RlZmluZSBfX3BlcmNwdV9hcmcoeCkJCSIlIiAjeAorI2RlZmluZSBfX3BlcmNwdV9hcmcoeCkJCSIlUCIgI3gKICNlbmRpZgogCiAvKgpAQCAtMTA0LDM2ICsxMDQsNDggQEAKIAl9CQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBwZXJjcHVfZnJvbV9vcChvcCwgdmFyKQkJCQlcCisjZGVmaW5lIHBlcmNwdV9mcm9tX29wKG9wLCB2YXIsIGNvbnN0cmFpbnQpCQlcCiAoewkJCQkJCQlcCiAJdHlwZW9mKHZhcikgcmV0X187CQkJCVwKIAlzd2l0Y2ggKHNpemVvZih2YXIpKSB7CQkJCVwKIAljYXNlIDE6CQkJCQkJXAogCQlhc20ob3AgImIgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9cSIgKHJldF9fKQkJCVwKLQkJICAgIDogIm0iICh2YXIpKTsJCQlcCisJCSAgICA6IGNvbnN0cmFpbnQpOwkJCVwKIAkJYnJlYWs7CQkJCQlcCiAJY2FzZSAyOgkJCQkJCVwKIAkJYXNtKG9wICJ3ICJfX3BlcmNwdV9hcmcoMSkiLCUwIgkJXAogCQkgICAgOiAiPXIiIChyZXRfXykJCQlcCi0JCSAgICA6ICJtIiAodmFyKSk7CQkJXAorCQkgICAgOiBjb25zdHJhaW50KTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgNDoJCQkJCQlcCiAJCWFzbShvcCAibCAiX19wZXJjcHVfYXJnKDEpIiwlMCIJCVwKIAkJICAgIDogIj1yIiAocmV0X18pCQkJXAotCQkgICAgOiAibSIgKHZhcikpOwkJCVwKKwkJICAgIDogY29uc3RyYWludCk7CQkJXAogCQlicmVhazsJCQkJCVwKIAljYXNlIDg6CQkJCQkJXAogCQlhc20ob3AgInEgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKLQkJICAgIDogIm0iICh2YXIpKTsJCQlcCisJCSAgICA6IGNvbnN0cmFpbnQpOwkJCVwKIAkJYnJlYWs7CQkJCQlcCiAJZGVmYXVsdDogX19iYWRfcGVyY3B1X3NpemUoKTsJCQlcCiAJfQkJCQkJCVwKIAlyZXRfXzsJCQkJCQlcCiB9KQogCi0jZGVmaW5lIHBlcmNwdV9yZWFkKHZhcikJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyKQorLyoKKyAqIHBlcmNwdV9yZWFkKCkgbWFrZXMgZ2NjIGxvYWQgdGhlIHBlcmNwdSB2YXJpYWJsZSBldmVyeSB0aW1lIGl0IGlzCisgKiBhY2Nlc3NlZCB3aGlsZSBwZXJjcHVfcmVhZF9zdGFibGUoKSBhbGxvd3MgdGhlIHZhbHVlIHRvIGJlIGNhY2hlZC4KKyAqIHBlcmNwdV9yZWFkX3N0YWJsZSgpIGlzIG1vcmUgZWZmaWNpZW50IGFuZCBjYW4gYmUgdXNlZCBpZiBpdHMgdmFsdWUKKyAqIGlzIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgYWNyb3NzIGNwdXMuICBUaGUgY3VycmVudCB1c2VycyBpbmNsdWRlCisgKiBnZXRfY3VycmVudCgpIGFuZCBnZXRfdGhyZWFkX2luZm8oKSBib3RoIG9mIHdoaWNoIGFyZSBhY3R1YWxseQorICogcGVyLXRocmVhZCB2YXJpYWJsZXMgaW1wbGVtZW50ZWQgYXMgcGVyLWNwdSB2YXJpYWJsZXMgYW5kIHRodXMKKyAqIHN0YWJsZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZXNwZWN0aXZlIHRhc2suCisgKi8KKyNkZWZpbmUgcGVyY3B1X3JlYWQodmFyKQlwZXJjcHVfZnJvbV9vcCgibW92IiwgcGVyX2NwdV9fIyN2YXIsCVwKKwkJCQkJICAgICAgICJtIiAocGVyX2NwdV9fIyN2YXIpKQorI2RlZmluZSBwZXJjcHVfcmVhZF9zdGFibGUodmFyKQlwZXJjcHVfZnJvbV9vcCgibW92IiwgcGVyX2NwdV9fIyN2YXIsCVwKKwkJCQkJICAgICAgICJwIiAoJnBlcl9jcHVfXyMjdmFyKSkKICNkZWZpbmUgcGVyY3B1X3dyaXRlKHZhciwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCiAjZGVmaW5lIHBlcmNwdV9hZGQodmFyLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKICNkZWZpbmUgcGVyY3B1X3N1Yih2YXIsIHZhbCkJcGVyY3B1X3RvX29wKCJzdWIiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQpAQCAtMTU2LDE1ICsxNjgsNiBAQAogLyogV2UgY2FuIHVzZSB0aGlzIGRpcmVjdGx5IGZvciBsb2NhbCBDUFUgKGZhc3RlcikuICovCiBERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdGhpc19jcHVfb2ZmKTsKIAotI2lmZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCi12b2lkICpwY3B1X2xwYWdlX3JlbWFwcGVkKHZvaWQgKmthZGRyKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgKnBjcHVfbHBhZ2VfcmVtYXBwZWQodm9pZCAqa2FkZHIpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYKLQogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfY291bnRlci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmgKaW5kZXggZmE2NGU0MC4uZTdiN2M5MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmgKQEAgLTg0LDYgKzg0LDE2IEBACiAjZGVmaW5lIE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMgkJCTB4MzBiCiAjZGVmaW5lIFg4Nl9QTUNfSURYX0ZJWEVEX0JVU19DWUNMRVMJCQkoWDg2X1BNQ19JRFhfRklYRUQgKyAyKQogCisvKgorICogV2UgbW9kZWwgQlRTIHRyYWNpbmcgYXMgYW5vdGhlciBmaXhlZC1tb2RlIFBNQy4KKyAqCisgKiBXZSBjaG9vc2UgYSB2YWx1ZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBmaXhlZCBjb3VudGVyIHJhbmdlLCBzaW5jZSBsb3dlcgorICogdmFsdWVzIGFyZSB1c2VkIGJ5IGFjdHVhbCBmaXhlZCBjb3VudGVycyBhbmQgaGlnaGVyIHZhbHVlcyBhcmUgdXNlZAorICogdG8gaW5kaWNhdGUgb3RoZXIgb3ZlcmZsb3cgY29uZGl0aW9ucyBpbiB0aGUgUEVSRl9HTE9CQUxfU1RBVFVTIG1zci4KKyAqLworI2RlZmluZSBYODZfUE1DX0lEWF9GSVhFRF9CVFMJCQkJKFg4Nl9QTUNfSURYX0ZJWEVEICsgMTYpCisKKwogI2lmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCiBleHRlcm4gdm9pZCBpbml0X2h3X3BlcmZfY291bnRlcnModm9pZCk7CiBleHRlcm4gdm9pZCBwZXJmX2NvdW50ZXJzX2xhcGljX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMTY3NDgwNy4uNGM1YjUxZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTM1LDYgKzEzNSwxMSBAQAogCXJldHVybiAocHRlX3ZhbChwdGUpICYgUFRFX1BGTl9NQVNLKSA+PiBQQUdFX1NISUZUOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX3BmbihwbWRfdCBwbWQpCit7CisJcmV0dXJuIChwbWRfdmFsKHBtZCkgJiBQVEVfUEZOX01BU0spID4+IFBBR0VfU0hJRlQ7Cit9CisKICNkZWZpbmUgcHRlX3BhZ2UocHRlKQlwZm5fdG9fcGFnZShwdGVfcGZuKHB0ZSkpCiAKIHN0YXRpYyBpbmxpbmUgaW50IHBtZF9sYXJnZShwbWRfdCBwdGUpCkBAIC0zNTksNyArMzY0LDcgQEAKICAqIHRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwbWQgcGFnZSB3aGljaCB3b3VsZAogICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgcG1kX2luZGV4KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwbWRfaW5kZXgodW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXJldHVybiAoYWRkcmVzcyA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRCAtIDEpOwogfQpAQCAtMzc5LDcgKzM4NCw3IEBACiAgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSBpbiB0aGUgcHRlIHBhZ2Ugd2hpY2ggd291bGQKICAqIGNvbnRyb2wgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcwogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHB0ZV9pbmRleCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX2luZGV4KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlyZXR1cm4gKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSk7CiB9CkBAIC00MzAsMTEgKzQzNSw2IEBACiAJcmV0dXJuIChwbWRfdCAqKXB1ZF9wYWdlX3ZhZGRyKCpwdWQpICsgcG1kX2luZGV4KGFkZHJlc3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX3BmbihwbWRfdCBwbWQpCi17Ci0JcmV0dXJuIChwbWRfdmFsKHBtZCkgJiBQVEVfUEZOX01BU0spID4+IFBBR0VfU0hJRlQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHB1ZF9sYXJnZShwdWRfdCBwdWQpCiB7CiAJcmV0dXJuIChwdWRfdmFsKHB1ZCkgJiAoX1BBR0VfUFNFIHwgX1BBR0VfUFJFU0VOVCkpID09CkBAIC00NzAsNyArNDcwLDcgQEAKICNkZWZpbmUgcGdkX3BhZ2UocGdkKQkJcGZuX3RvX3BhZ2UocGdkX3ZhbChwZ2QpID4+IFBBR0VfU0hJRlQpCiAKIC8qIHRvIGZpbmQgYW4gZW50cnkgaW4gYSBwYWdlLXRhYmxlLWRpcmVjdG9yeS4gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgcHVkX2luZGV4KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdWRfaW5kZXgodW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXJldHVybiAoYWRkcmVzcyA+PiBQVURfU0hJRlQpICYgKFBUUlNfUEVSX1BVRCAtIDEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBjNzc2ODI2Li5lMDhlYTA0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtNDAzLDcgKzQwMywxNyBAQAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBpZ25vcmVfc3lzcmV0KHZvaWQpOwogI2Vsc2UJLyogWDg2XzY0ICovCiAjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCi1ERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc3RhY2tfY2FuYXJ5KTsKKy8qCisgKiBNYWtlIHN1cmUgc3RhY2sgY2FuYXJ5IHNlZ21lbnQgYmFzZSBpcyBjYWNoZWQtYWxpZ25lZDoKKyAqICAgIkZvciBJbnRlbCBBdG9tIHByb2Nlc3NvcnMsIGF2b2lkIG5vbiB6ZXJvIHNlZ21lbnQgYmFzZSBhZGRyZXNzCisgKiAgICB0aGF0IGlzIG5vdCBhbGlnbmVkIHRvIGNhY2hlIGxpbmUgYm91bmRhcnkgYXQgYWxsIGNvc3QuIgorICogKE9wdGltIFJlZiBNYW51YWwgQXNzZW1ibHkvQ29tcGlsZXIgQ29kaW5nIFJ1bGUgMTUuKQorICovCitzdHJ1Y3Qgc3RhY2tfY2FuYXJ5IHsKKwljaGFyIF9fcGFkWzIwXTsJCS8qIGNhbmFyeSBhdCAlZ3M6MjAgKi8KKwl1bnNpZ25lZCBsb25nIGNhbmFyeTsKK307CitERUNMQVJFX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3Qgc3RhY2tfY2FuYXJ5LCBzdGFja19jYW5hcnkpOwogI2VuZGlmCiAjZW5kaWYJLyogWDg2XzY0ICovCiAKQEAgLTcwMywxMyArNzEzLDIzIEBACiAJcmVwX25vcCgpOwogfQogCi0vKiBTdG9wIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbjogKi8KKy8qIFN0b3Agc3BlY3VsYXRpdmUgZXhlY3V0aW9uIGFuZCBwcmVmZXRjaGluZyBvZiBtb2RpZmllZCBjb2RlLiAqLwogc3RhdGljIGlubGluZSB2b2lkIHN5bmNfY29yZSh2b2lkKQogewogCWludCB0bXA7CiAKLQlhc20gdm9sYXRpbGUoImNwdWlkIiA6ICI9YSIgKHRtcCkgOiAiMCIgKDEpCi0JCSAgICAgOiAiZWJ4IiwgImVjeCIsICJlZHgiLCAibWVtb3J5Iik7CisjaWYgZGVmaW5lZChDT05GSUdfTTM4NikgfHwgZGVmaW5lZChDT05GSUdfTTQ4NikKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPCA1KQorCQkvKiBUaGVyZSBpcyBubyBzcGVjdWxhdGl2ZSBleGVjdXRpb24uCisJCSAqIGptcCBpcyBhIGJhcnJpZXIgdG8gcHJlZmV0Y2hpbmcuICovCisJCWFzbSB2b2xhdGlsZSgiam1wIDFmXG4xOlxuIiA6OjogIm1lbW9yeSIpOworCWVsc2UKKyNlbmRpZgorCQkvKiBjcHVpZCBpcyBhIGJhcnJpZXIgdG8gc3BlY3VsYXRpdmUgZXhlY3V0aW9uLgorCQkgKiBQcmVmZXRjaGVkIGluc3RydWN0aW9ucyBhcmUgYXV0b21hdGljYWxseQorCQkgKiBpbnZhbGlkYXRlZCB3aGVuIG1vZGlmaWVkLiAqLworCQlhc20gdm9sYXRpbGUoImNwdWlkIiA6ICI9YSIgKHRtcCkgOiAiMCIgKDEpCisJCQkgICAgIDogImVieCIsICJlY3giLCAiZWR4IiwgIm1lbW9yeSIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19tb25pdG9yKGNvbnN0IHZvaWQgKmVheCwgdW5zaWduZWQgbG9uZyBlY3gsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAppbmRleCAyNjNkMzk3Li43NWFmNTkyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTEsMzMgKzEsOCBAQAogI2lmbmRlZiBfQVNNX1g4Nl9TQ0FUVEVSTElTVF9ICiAjZGVmaW5lIF9BU01fWDg2X1NDQVRURVJMSVNUX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi1zdHJ1Y3Qgc2NhdHRlcmxpc3QgewotI2lmZGVmIENPTkZJR19ERUJVR19TRwotCXVuc2lnbmVkIGxvbmcJc2dfbWFnaWM7Ci0jZW5kaWYKLQl1bnNpZ25lZCBsb25nCXBhZ2VfbGluazsKLQl1bnNpZ25lZCBpbnQJb2Zmc2V0OwotCXVuc2lnbmVkIGludAlsZW5ndGg7Ci0JZG1hX2FkZHJfdAlkbWFfYWRkcmVzczsKLQl1bnNpZ25lZCBpbnQJZG1hX2xlbmd0aDsKLX07Ci0KLSNkZWZpbmUgQVJDSF9IQVNfU0dfQ0hBSU4KICNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4MDBmZmZmZmYpCiAKLS8qCi0gKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQgYWZ0ZXIgYSBwY2lfbWFwX3NnIGNhbGwgaGFzIGJlZW4gZG9uZQotICogdG8gZ2V0IGJ1cyBhZGRyZXNzZXMgb2YgZWFjaCBvZiB0aGUgU0cgZW50cmllcyBhbmQgdGhlaXIgbGVuZ3Rocy4KLSAqIFlvdSBzaG91bGQgb25seSB3b3JrIHdpdGggdGhlIG51bWJlciBvZiBzZyBlbnRyaWVzIHBjaV9tYXBfc2cKLSAqIHJldHVybnMuCi0gKi8KLSNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGRlZmluZSBzZ19kbWFfbGVuKHNnKQkJKChzZyktPmxlbmd0aCkKLSNlbHNlCi0jIGRlZmluZSBzZ19kbWFfbGVuKHNnKQkJKChzZyktPmRtYV9sZW5ndGgpCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zY2F0dGVybGlzdC5oPgogCiAjZW5kaWYgLyogX0FTTV9YODZfU0NBVFRFUkxJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2htYnVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaG1idWYuaAppbmRleCBiNTE0MTNiLi44M2MwNWZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaG1idWYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zaG1idWYuaApAQCAtMSw1MSArMSBAQAotI2lmbmRlZiBfQVNNX1g4Nl9TSE1CVUZfSAotI2RlZmluZSBfQVNNX1g4Nl9TSE1CVUZfSAotCi0vKgotICogVGhlIHNobWlkNjRfZHMgc3RydWN0dXJlIGZvciB4ODYgYXJjaGl0ZWN0dXJlLgotICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCi0gKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KLSAqCi0gKiBQYWQgc3BhY2Ugb24gMzIgYml0IGlzIGxlZnQgZm9yOgotICogLSA2NC1iaXQgdGltZV90IHRvIHNvbHZlIHkyMDM4IHByb2JsZW0KLSAqIC0gMiBtaXNjZWxsYW5lb3VzIDMyLWJpdCB2YWx1ZXMKLSAqCi0gKiBQYWQgc3BhY2Ugb24gNjQgYml0IGlzIGxlZnQgZm9yOgotICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcwotICovCi0KLXN0cnVjdCBzaG1pZDY0X2RzIHsKLQlzdHJ1Y3QgaXBjNjRfcGVybQlzaG1fcGVybTsJLyogb3BlcmF0aW9uIHBlcm1zICovCi0Jc2l6ZV90CQkJc2htX3NlZ3N6OwkvKiBzaXplIG9mIHNlZ21lbnQgKGJ5dGVzKSAqLwotCV9fa2VybmVsX3RpbWVfdAkJc2htX2F0aW1lOwkvKiBsYXN0IGF0dGFjaCB0aW1lICovCi0jaWZkZWYgX19pMzg2X18KLQl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDE7Ci0jZW5kaWYKLQlfX2tlcm5lbF90aW1lX3QJCXNobV9kdGltZTsJLyogbGFzdCBkZXRhY2ggdGltZSAqLwotI2lmZGVmIF9faTM4Nl9fCi0JdW5zaWduZWQgbG9uZwkJX191bnVzZWQyOwotI2VuZGlmCi0JX19rZXJuZWxfdGltZV90CQlzaG1fY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KLSNpZmRlZiBfX2kzODZfXwotCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMzsKLSNlbmRpZgotCV9fa2VybmVsX3BpZF90CQlzaG1fY3BpZDsJLyogcGlkIG9mIGNyZWF0b3IgKi8KLQlfX2tlcm5lbF9waWRfdAkJc2htX2xwaWQ7CS8qIHBpZCBvZiBsYXN0IG9wZXJhdG9yICovCi0JdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsJLyogbm8uIG9mIGN1cnJlbnQgYXR0YWNoZXMgKi8KLQl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDQ7Ci0JdW5zaWduZWQgbG9uZwkJX191bnVzZWQ1OwotfTsKLQotc3RydWN0IHNobWluZm82NCB7Ci0JdW5zaWduZWQgbG9uZwlzaG1tYXg7Ci0JdW5zaWduZWQgbG9uZwlzaG1taW47Ci0JdW5zaWduZWQgbG9uZwlzaG1tbmk7Ci0JdW5zaWduZWQgbG9uZwlzaG1zZWc7Ci0JdW5zaWduZWQgbG9uZwlzaG1hbGw7Ci0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7Ci0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7Ci0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDM7Ci0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDQ7Ci19OwotCi0jZW5kaWYgLyogX0FTTV9YODZfU0hNQlVGX0ggKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaG1idWYuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggY2E4YmYyYy4uNmI3MTM4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTEsNjAgKzEgQEAKLSNpZm5kZWYgX0FTTV9YODZfU09DS0VUX0gKLSNkZWZpbmUgX0FTTV9YODZfU09DS0VUX0gKLQotI2luY2x1ZGUgPGFzbS9zb2NraW9zLmg+Ci0KLS8qIEZvciBzZXRzb2Nrb3B0KDIpICovCi0jZGVmaW5lIFNPTF9TT0NLRVQJMQotCi0jZGVmaW5lIFNPX0RFQlVHCTEKLSNkZWZpbmUgU09fUkVVU0VBRERSCTIKLSNkZWZpbmUgU09fVFlQRQkJMwotI2RlZmluZSBTT19FUlJPUgk0Ci0jZGVmaW5lIFNPX0RPTlRST1VURQk1Ci0jZGVmaW5lIFNPX0JST0FEQ0FTVAk2Ci0jZGVmaW5lIFNPX1NOREJVRgk3Ci0jZGVmaW5lIFNPX1JDVkJVRgk4Ci0jZGVmaW5lIFNPX1NOREJVRkZPUkNFCTMyCi0jZGVmaW5lIFNPX1JDVkJVRkZPUkNFCTMzCi0jZGVmaW5lIFNPX0tFRVBBTElWRQk5Ci0jZGVmaW5lIFNPX09PQklOTElORQkxMAotI2RlZmluZSBTT19OT19DSEVDSwkxMQotI2RlZmluZSBTT19QUklPUklUWQkxMgotI2RlZmluZSBTT19MSU5HRVIJMTMKLSNkZWZpbmUgU09fQlNEQ09NUEFUCTE0Ci0vKiBUbyBhZGQgOiNkZWZpbmUgU09fUkVVU0VQT1JUIDE1ICovCi0jZGVmaW5lIFNPX1BBU1NDUkVECTE2Ci0jZGVmaW5lIFNPX1BFRVJDUkVECTE3Ci0jZGVmaW5lIFNPX1JDVkxPV0FUCTE4Ci0jZGVmaW5lIFNPX1NORExPV0FUCTE5Ci0jZGVmaW5lIFNPX1JDVlRJTUVPCTIwCi0jZGVmaW5lIFNPX1NORFRJTUVPCTIxCi0KLS8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCi0jZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkyMgotI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAkyMwotI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksJCTI0Ci0KLSNkZWZpbmUgU09fQklORFRPREVWSUNFCTI1Ci0KLS8qIFNvY2tldCBmaWx0ZXJpbmcgKi8KLSNkZWZpbmUgU09fQVRUQUNIX0ZJTFRFUiAgICAgICAgMjYKLSNkZWZpbmUgU09fREVUQUNIX0ZJTFRFUiAgICAgICAgMjcKLQotI2RlZmluZSBTT19QRUVSTkFNRQkJMjgKLSNkZWZpbmUgU09fVElNRVNUQU1QCQkyOQotI2RlZmluZSBTQ01fVElNRVNUQU1QCQlTT19USU1FU1RBTVAKLQotI2RlZmluZSBTT19BQ0NFUFRDT05OCQkzMAotCi0jZGVmaW5lIFNPX1BFRVJTRUMJCTMxCi0jZGVmaW5lIFNPX1BBU1NTRUMJCTM0Ci0jZGVmaW5lIFNPX1RJTUVTVEFNUE5TCQkzNQotI2RlZmluZSBTQ01fVElNRVNUQU1QTlMJCVNPX1RJTUVTVEFNUE5TCi0KLSNkZWZpbmUgU09fTUFSSwkJCTM2Ci0KLSNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNwotI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORwotCi0jZW5kaWYgLyogX0FTTV9YODZfU09DS0VUX0ggKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zb2NrZXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NvY2tpb3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NvY2tpb3MuaAppbmRleCA0OWNjNzJiLi5kZWY2ZDQ3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NraW9zLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2lvcy5oCkBAIC0xLDEzICsxIEBACi0jaWZuZGVmIF9BU01fWDg2X1NPQ0tJT1NfSAotI2RlZmluZSBfQVNNX1g4Nl9TT0NLSU9TX0gKLQotLyogU29ja2V0LWxldmVsIEkvTyBjb250cm9sIGNhbGxzLiAqLwotI2RlZmluZSBGSU9TRVRPV04JMHg4OTAxCi0jZGVmaW5lIFNJT0NTUEdSUAkweDg5MDIKLSNkZWZpbmUgRklPR0VUT1dOCTB4ODkwMwotI2RlZmluZSBTSU9DR1BHUlAJMHg4OTA0Ci0jZGVmaW5lIFNJT0NBVE1BUksJMHg4OTA1Ci0jZGVmaW5lIFNJT0NHU1RBTVAJMHg4OTA2CQkvKiBHZXQgc3RhbXAgKHRpbWV2YWwpICovCi0jZGVmaW5lIFNJT0NHU1RBTVBOUwkweDg5MDcJCS8qIEdldCBzdGFtcCAodGltZXNwZWMpICovCi0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9TT0NLSU9TX0ggKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zb2NraW9zLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3Byb3RlY3Rvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2twcm90ZWN0b3IuaAppbmRleCBjMmQ3NDJjLi4xNTc1MTc3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3Byb3RlY3Rvci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrcHJvdGVjdG9yLmgKQEAgLTQ4LDcgKzQ4LDcgQEAKICAqIGhlYWRfMzIgZm9yIGJvb3QgQ1BVIGFuZCBzZXR1cF9wZXJfY3B1X2FyZWFzKCkgZm9yIG90aGVycy4KICAqLwogI2RlZmluZSBHRFRfU1RBQ0tfQ0FOQVJZX0lOSVQJCQkJCQlcCi0JW0dEVF9FTlRSWV9TVEFDS19DQU5BUlldID0geyB7IHsgMHgwMDAwMDAxOCwgMHgwMDQwOTAwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX1NUQUNLX0NBTkFSWV0gPSBHRFRfRU5UUllfSU5JVCgweDQwOTAsIDAsIDB4MTgpLAogCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgc3RhY2twcm90ZWN0b3IgY2FuYXJ5IHZhbHVlLgpAQCAtNzgsMjEgKzc4LDE5IEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCXBlcmNwdV93cml0ZShpcnFfc3RhY2tfdW5pb24uc3RhY2tfY2FuYXJ5LCBjYW5hcnkpOwogI2Vsc2UKLQlwZXJjcHVfd3JpdGUoc3RhY2tfY2FuYXJ5LCBjYW5hcnkpOworCXBlcmNwdV93cml0ZShzdGFja19jYW5hcnkuY2FuYXJ5LCBjYW5hcnkpOwogI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9zdGFja19jYW5hcnlfc2VnbWVudChpbnQgY3B1KQogewogI2lmZGVmIENPTkZJR19YODZfMzIKLQl1bnNpZ25lZCBsb25nIGNhbmFyeSA9ICh1bnNpZ25lZCBsb25nKSZwZXJfY3B1KHN0YWNrX2NhbmFyeSwgY3B1KSAtIDIwOworCXVuc2lnbmVkIGxvbmcgY2FuYXJ5ID0gKHVuc2lnbmVkIGxvbmcpJnBlcl9jcHUoc3RhY2tfY2FuYXJ5LCBjcHUpOwogCXN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0X3RhYmxlID0gZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKIAlzdHJ1Y3QgZGVzY19zdHJ1Y3QgZGVzYzsKIAogCWRlc2MgPSBnZHRfdGFibGVbR0RUX0VOVFJZX1NUQUNLX0NBTkFSWV07Ci0JZGVzYy5iYXNlMCA9IGNhbmFyeSAmIDB4ZmZmZjsKLQlkZXNjLmJhc2UxID0gKGNhbmFyeSA+PiAxNikgJiAweGZmOwotCWRlc2MuYmFzZTIgPSAoY2FuYXJ5ID4+IDI0KSAmIDB4ZmY7CisJc2V0X2Rlc2NfYmFzZSgmZGVzYywgY2FuYXJ5KTsKIAl3cml0ZV9nZHRfZW50cnkoZ2R0X3RhYmxlLCBHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZLCAmZGVzYywgREVTQ1RZUEVfUyk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggNjQzYzU5Yi4uZjA4Zjk3MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAkibW92bCAlUFt0YXNrX2NhbmFyeV0oJVtuZXh0XSksICUlZWJ4XG5cdCIJCQlcCiAJIm1vdmwgJSVlYngsICJfX3BlcmNwdV9hcmcoW3N0YWNrX2NhbmFyeV0pIlxuXHQiCiAjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeV9vcGFyYW0JCQkJCQlcCi0JLCBbc3RhY2tfY2FuYXJ5XSAiPW0iIChwZXJfY3B1X3ZhcihzdGFja19jYW5hcnkpKQorCSwgW3N0YWNrX2NhbmFyeV0gIj1tIiAocGVyX2NwdV92YXIoc3RhY2tfY2FuYXJ5LmNhbmFyeSkpCiAjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeV9pcGFyYW0JCQkJCQlcCiAJLCBbdGFza19jYW5hcnldICJpIiAob2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFja19jYW5hcnkpKQogI2Vsc2UJLyogQ0NfU1RBQ0tQUk9URUNUT1IgKi8KQEAgLTE1MCwzMyArMTUwLDYgQEAKICNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBfc2V0X2Jhc2UoYWRkciwgYmFzZSkgZG8geyB1bnNpZ25lZCBsb25nIF9fcHI7IFwKLV9fYXNtX18gX192b2xhdGlsZV9fICgibW92dyAlJWR4LCUxXG5cdCIgXAotCSJyb3JsICQxNiwlJWVkeFxuXHQiIFwKLQkibW92YiAlJWRsLCUyXG5cdCIgXAotCSJtb3ZiICUlZGgsJTMiIFwKLQk6Ij0mZCIgKF9fcHIpIFwKLQk6Im0iICgqKChhZGRyKSsyKSksIFwKLQkgIm0iICgqKChhZGRyKSs0KSksIFwKLQkgIm0iICgqKChhZGRyKSs3KSksIFwKLQkgIjAiIChiYXNlKSBcCi0JKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfc2V0X2xpbWl0KGFkZHIsIGxpbWl0KSBkbyB7IHVuc2lnbmVkIGxvbmcgX19scjsgXAotX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3Z3ICUlZHgsJTFcblx0IiBcCi0JInJvcmwgJDE2LCUlZWR4XG5cdCIgXAotCSJtb3ZiICUyLCUlZGhcblx0IiBcCi0JImFuZGIgJDB4ZjAsJSVkaFxuXHQiIFwKLQkib3JiICUlZGgsJSVkbFxuXHQiIFwKLQkibW92YiAlJWRsLCUyIiBcCi0JOiI9JmQiIChfX2xyKSBcCi0JOiJtIiAoKihhZGRyKSksIFwKLQkgIm0iICgqKChhZGRyKSs2KSksIFwKLQkgIjAiIChsaW1pdCkgXAotCSk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgc2V0X2Jhc2UobGR0LCBiYXNlKSBfc2V0X2Jhc2UoKChjaGFyICopJihsZHQpKSAsIChiYXNlKSkKLSNkZWZpbmUgc2V0X2xpbWl0KGxkdCwgbGltaXQpIF9zZXRfbGltaXQoKChjaGFyICopJihsZHQpKSAsICgobGltaXQpLTEpKQogCiBleHRlcm4gdm9pZCBuYXRpdmVfbG9hZF9nc19pbmRleCh1bnNpZ25lZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCmluZGV4IGFmMWI3MGUuLjM5MzViMTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGVybWJpdHMuaApAQCAtMSwxOTggKzEgQEAKLSNpZm5kZWYgX0FTTV9YODZfVEVSTUJJVFNfSAotI2RlZmluZSBfQVNNX1g4Nl9URVJNQklUU19ICi0KLSNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIJY2NfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50CXNwZWVkX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludAl0Y2ZsYWdfdDsKLQotI2RlZmluZSBOQ0NTIDE5Ci1zdHJ1Y3QgdGVybWlvcyB7Ci0JdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KLQl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KLQl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KLQljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KLQljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KLX07Ci0KLXN0cnVjdCB0ZXJtaW9zMiB7Ci0JdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KLQl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KLQl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KLQljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KLQljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KLQlzcGVlZF90IGNfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KLQlzcGVlZF90IGNfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCi19OwotCi1zdHJ1Y3Qga3Rlcm1pb3MgewotCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLwotCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCi0JY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCi0JY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCi0Jc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCi0Jc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLwotfTsKLQotLyogY19jYyBjaGFyYWN0ZXJzICovCi0jZGVmaW5lIFZJTlRSIDAKLSNkZWZpbmUgVlFVSVQgMQotI2RlZmluZSBWRVJBU0UgMgotI2RlZmluZSBWS0lMTCAzCi0jZGVmaW5lIFZFT0YgNAotI2RlZmluZSBWVElNRSA1Ci0jZGVmaW5lIFZNSU4gNgotI2RlZmluZSBWU1dUQyA3Ci0jZGVmaW5lIFZTVEFSVCA4Ci0jZGVmaW5lIFZTVE9QIDkKLSNkZWZpbmUgVlNVU1AgMTAKLSNkZWZpbmUgVkVPTCAxMQotI2RlZmluZSBWUkVQUklOVCAxMgotI2RlZmluZSBWRElTQ0FSRCAxMwotI2RlZmluZSBWV0VSQVNFIDE0Ci0jZGVmaW5lIFZMTkVYVCAxNQotI2RlZmluZSBWRU9MMiAxNgotCi0vKiBjX2lmbGFnIGJpdHMgKi8KLSNkZWZpbmUgSUdOQlJLCTAwMDAwMDEKLSNkZWZpbmUgQlJLSU5UCTAwMDAwMDIKLSNkZWZpbmUgSUdOUEFSCTAwMDAwMDQKLSNkZWZpbmUgUEFSTVJLCTAwMDAwMTAKLSNkZWZpbmUgSU5QQ0sJMDAwMDAyMAotI2RlZmluZSBJU1RSSVAJMDAwMDA0MAotI2RlZmluZSBJTkxDUgkwMDAwMTAwCi0jZGVmaW5lIElHTkNSCTAwMDAyMDAKLSNkZWZpbmUgSUNSTkwJMDAwMDQwMAotI2RlZmluZSBJVUNMQwkwMDAxMDAwCi0jZGVmaW5lIElYT04JMDAwMjAwMAotI2RlZmluZSBJWEFOWQkwMDA0MDAwCi0jZGVmaW5lIElYT0ZGCTAwMTAwMDAKLSNkZWZpbmUgSU1BWEJFTAkwMDIwMDAwCi0jZGVmaW5lIElVVEY4CTAwNDAwMDAKLQotLyogY19vZmxhZyBiaXRzICovCi0jZGVmaW5lIE9QT1NUCTAwMDAwMDEKLSNkZWZpbmUgT0xDVUMJMDAwMDAwMgotI2RlZmluZSBPTkxDUgkwMDAwMDA0Ci0jZGVmaW5lIE9DUk5MCTAwMDAwMTAKLSNkZWZpbmUgT05PQ1IJMDAwMDAyMAotI2RlZmluZSBPTkxSRVQJMDAwMDA0MAotI2RlZmluZSBPRklMTAkwMDAwMTAwCi0jZGVmaW5lIE9GREVMCTAwMDAyMDAKLSNkZWZpbmUgTkxETFkJMDAwMDQwMAotI2RlZmluZSAgIE5MMAkwMDAwMDAwCi0jZGVmaW5lICAgTkwxCTAwMDA0MDAKLSNkZWZpbmUgQ1JETFkJMDAwMzAwMAotI2RlZmluZSAgIENSMAkwMDAwMDAwCi0jZGVmaW5lICAgQ1IxCTAwMDEwMDAKLSNkZWZpbmUgICBDUjIJMDAwMjAwMAotI2RlZmluZSAgIENSMwkwMDAzMDAwCi0jZGVmaW5lIFRBQkRMWQkwMDE0MDAwCi0jZGVmaW5lICAgVEFCMAkwMDAwMDAwCi0jZGVmaW5lICAgVEFCMQkwMDA0MDAwCi0jZGVmaW5lICAgVEFCMgkwMDEwMDAwCi0jZGVmaW5lICAgVEFCMwkwMDE0MDAwCi0jZGVmaW5lICAgWFRBQlMJMDAxNDAwMAotI2RlZmluZSBCU0RMWQkwMDIwMDAwCi0jZGVmaW5lICAgQlMwCTAwMDAwMDAKLSNkZWZpbmUgICBCUzEJMDAyMDAwMAotI2RlZmluZSBWVERMWQkwMDQwMDAwCi0jZGVmaW5lICAgVlQwCTAwMDAwMDAKLSNkZWZpbmUgICBWVDEJMDA0MDAwMAotI2RlZmluZSBGRkRMWQkwMTAwMDAwCi0jZGVmaW5lICAgRkYwCTAwMDAwMDAKLSNkZWZpbmUgICBGRjEJMDEwMDAwMAotCi0vKiBjX2NmbGFnIGJpdCBtZWFuaW5nICovCi0jZGVmaW5lIENCQVVECTAwMTAwMTcKLSNkZWZpbmUgIEIwCTAwMDAwMDAJCS8qIGhhbmcgdXAgKi8KLSNkZWZpbmUgIEI1MAkwMDAwMDAxCi0jZGVmaW5lICBCNzUJMDAwMDAwMgotI2RlZmluZSAgQjExMAkwMDAwMDAzCi0jZGVmaW5lICBCMTM0CTAwMDAwMDQKLSNkZWZpbmUgIEIxNTAJMDAwMDAwNQotI2RlZmluZSAgQjIwMAkwMDAwMDA2Ci0jZGVmaW5lICBCMzAwCTAwMDAwMDcKLSNkZWZpbmUgIEI2MDAJMDAwMDAxMAotI2RlZmluZSAgQjEyMDAJMDAwMDAxMQotI2RlZmluZSAgQjE4MDAJMDAwMDAxMgotI2RlZmluZSAgQjI0MDAJMDAwMDAxMwotI2RlZmluZSAgQjQ4MDAJMDAwMDAxNAotI2RlZmluZSAgQjk2MDAJMDAwMDAxNQotI2RlZmluZSAgQjE5MjAwCTAwMDAwMTYKLSNkZWZpbmUgIEIzODQwMAkwMDAwMDE3Ci0jZGVmaW5lIEVYVEEgQjE5MjAwCi0jZGVmaW5lIEVYVEIgQjM4NDAwCi0jZGVmaW5lIENTSVpFCTAwMDAwNjAKLSNkZWZpbmUgICBDUzUJMDAwMDAwMAotI2RlZmluZSAgIENTNgkwMDAwMDIwCi0jZGVmaW5lICAgQ1M3CTAwMDAwNDAKLSNkZWZpbmUgICBDUzgJMDAwMDA2MAotI2RlZmluZSBDU1RPUEIJMDAwMDEwMAotI2RlZmluZSBDUkVBRAkwMDAwMjAwCi0jZGVmaW5lIFBBUkVOQgkwMDAwNDAwCi0jZGVmaW5lIFBBUk9ERAkwMDAxMDAwCi0jZGVmaW5lIEhVUENMCTAwMDIwMDAKLSNkZWZpbmUgQ0xPQ0FMCTAwMDQwMDAKLSNkZWZpbmUgQ0JBVURFWCAwMDEwMDAwCi0jZGVmaW5lCSAgIEJPVEhFUiAwMDEwMDAwCQkvKiBub24gc3RhbmRhcmQgcmF0ZSAqLwotI2RlZmluZSAgICBCNTc2MDAgMDAxMDAwMQotI2RlZmluZSAgIEIxMTUyMDAgMDAxMDAwMgotI2RlZmluZSAgIEIyMzA0MDAgMDAxMDAwMwotI2RlZmluZSAgIEI0NjA4MDAgMDAxMDAwNAotI2RlZmluZSAgIEI1MDAwMDAgMDAxMDAwNQotI2RlZmluZSAgIEI1NzYwMDAgMDAxMDAwNgotI2RlZmluZSAgIEI5MjE2MDAgMDAxMDAwNwotI2RlZmluZSAgQjEwMDAwMDAgMDAxMDAxMAotI2RlZmluZSAgQjExNTIwMDAgMDAxMDAxMQotI2RlZmluZSAgQjE1MDAwMDAgMDAxMDAxMgotI2RlZmluZSAgQjIwMDAwMDAgMDAxMDAxMwotI2RlZmluZSAgQjI1MDAwMDAgMDAxMDAxNAotI2RlZmluZSAgQjMwMDAwMDAgMDAxMDAxNQotI2RlZmluZSAgQjM1MDAwMDAgMDAxMDAxNgotI2RlZmluZSAgQjQwMDAwMDAgMDAxMDAxNwotI2RlZmluZSBDSUJBVUQJICAwMDIwMDM2MDAwMDAJLyogaW5wdXQgYmF1ZCByYXRlICovCi0jZGVmaW5lIENNU1BBUgkgIDAxMDAwMDAwMDAwMAkvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCi0jZGVmaW5lIENSVFNDVFMJICAwMjAwMDAwMDAwMDAJLyogZmxvdyBjb250cm9sICovCi0KLSNkZWZpbmUgSUJTSElGVAkgIDE2CQkvKiBTaGlmdCBmcm9tIENCQVVEIHRvIENJQkFVRCAqLwotCi0vKiBjX2xmbGFnIGJpdHMgKi8KLSNkZWZpbmUgSVNJRwkwMDAwMDAxCi0jZGVmaW5lIElDQU5PTgkwMDAwMDAyCi0jZGVmaW5lIFhDQVNFCTAwMDAwMDQKLSNkZWZpbmUgRUNITwkwMDAwMDEwCi0jZGVmaW5lIEVDSE9FCTAwMDAwMjAKLSNkZWZpbmUgRUNIT0sJMDAwMDA0MAotI2RlZmluZSBFQ0hPTkwJMDAwMDEwMAotI2RlZmluZSBOT0ZMU0gJMDAwMDIwMAotI2RlZmluZSBUT1NUT1AJMDAwMDQwMAotI2RlZmluZSBFQ0hPQ1RMCTAwMDEwMDAKLSNkZWZpbmUgRUNIT1BSVAkwMDAyMDAwCi0jZGVmaW5lIEVDSE9LRQkwMDA0MDAwCi0jZGVmaW5lIEZMVVNITwkwMDEwMDAwCi0jZGVmaW5lIFBFTkRJTgkwMDQwMDAwCi0jZGVmaW5lIElFWFRFTgkwMTAwMDAwCi0KLS8qIHRjZmxvdygpIGFuZCBUQ1hPTkMgdXNlIHRoZXNlICovCi0jZGVmaW5lCVRDT09GRgkJMAotI2RlZmluZQlUQ09PTgkJMQotI2RlZmluZQlUQ0lPRkYJCTIKLSNkZWZpbmUJVENJT04JCTMKLQotLyogdGNmbHVzaCgpIGFuZCBUQ0ZMU0ggdXNlIHRoZXNlICovCi0jZGVmaW5lCVRDSUZMVVNICTAKLSNkZWZpbmUJVENPRkxVU0gJMQotI2RlZmluZQlUQ0lPRkxVU0gJMgotCi0vKiB0Y3NldGF0dHIgdXNlcyB0aGVzZSAqLwotI2RlZmluZQlUQ1NBTk9XCQkwCi0jZGVmaW5lCVRDU0FEUkFJTgkxCi0jZGVmaW5lCVRDU0FGTFVTSAkyCi0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9URVJNQklUU19IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGVybWJpdHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Rlcm1pb3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Rlcm1pb3MuaAppbmRleCBjNGVlODA1Li4yODBkNzhhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXJtaW9zLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGVybWlvcy5oCkBAIC0xLDExNCArMSBAQAotI2lmbmRlZiBfQVNNX1g4Nl9URVJNSU9TX0gKLSNkZWZpbmUgX0FTTV9YODZfVEVSTUlPU19ICi0KLSNpbmNsdWRlIDxhc20vdGVybWJpdHMuaD4KLSNpbmNsdWRlIDxhc20vaW9jdGxzLmg+Ci0KLXN0cnVjdCB3aW5zaXplIHsKLQl1bnNpZ25lZCBzaG9ydCB3c19yb3c7Ci0JdW5zaWduZWQgc2hvcnQgd3NfY29sOwotCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKLQl1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Ci19OwotCi0jZGVmaW5lIE5DQyA4Ci1zdHJ1Y3QgdGVybWlvIHsKLQl1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLwotCXVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLwotCXVuc2lnbmVkIHNob3J0IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLwotCXVuc2lnbmVkIGNoYXIgY19saW5lOwkJLyogbGluZSBkaXNjaXBsaW5lICovCi0JdW5zaWduZWQgY2hhciBjX2NjW05DQ107CS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLwotfTsKLQotLyogbW9kZW0gbGluZXMgKi8KLSNkZWZpbmUgVElPQ01fTEUJMHgwMDEKLSNkZWZpbmUgVElPQ01fRFRSCTB4MDAyCi0jZGVmaW5lIFRJT0NNX1JUUwkweDAwNAotI2RlZmluZSBUSU9DTV9TVAkweDAwOAotI2RlZmluZSBUSU9DTV9TUgkweDAxMAotI2RlZmluZSBUSU9DTV9DVFMJMHgwMjAKLSNkZWZpbmUgVElPQ01fQ0FSCTB4MDQwCi0jZGVmaW5lIFRJT0NNX1JORwkweDA4MAotI2RlZmluZSBUSU9DTV9EU1IJMHgxMDAKLSNkZWZpbmUgVElPQ01fQ0QJVElPQ01fQ0FSCi0jZGVmaW5lIFRJT0NNX1JJCVRJT0NNX1JORwotI2RlZmluZSBUSU9DTV9PVVQxCTB4MjAwMAotI2RlZmluZSBUSU9DTV9PVVQyCTB4NDAwMAotI2RlZmluZSBUSU9DTV9MT09QCTB4ODAwMAotCi0vKiBpb2N0bCAoZmQsIFRJT0NTRVJHRVRMU1IsICZyZXN1bHQpIHdoZXJlIHJlc3VsdCBtYXkgYmUgYXMgYmVsb3cgKi8KLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLS8qCWludHI9XkMJCXF1aXQ9XlwJCWVyYXNlPWRlbAlraWxsPV5VCi0JZW9mPV5ECQl2dGltZT1cMAl2bWluPVwxCQlzeHRjPVwwCi0Jc3RhcnQ9XlEJc3RvcD1eUwkJc3VzcD1eWgkJZW9sPVwwCi0JcmVwcmludD1eUglkaXNjYXJkPV5VCXdlcmFzZT1eVwlsbmV4dD1eVgotCWVvbDI9XDAKLSovCi0jZGVmaW5lIElOSVRfQ19DQyAiXDAwM1wwMzRcMTc3XDAyNVwwMDRcMFwxXDBcMDIxXDAyM1wwMzJcMFwwMjJcMDE3XDAyN1wwMjZcMCIKLQotLyoKLSAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW8iIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pb3MiLiBVZ2guCi0gKi8KLSNkZWZpbmUgU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCB4KSB7IFwKLQl1bnNpZ25lZCBzaG9ydCBfX3RtcDsgXAotCWdldF91c2VyKF9fdG1wLCYodGVybWlvKS0+eCk7IFwKLQkqKHVuc2lnbmVkIHNob3J0ICopICYodGVybWlvcyktPnggPSBfX3RtcDsgXAotfQotCi1zdGF0aWMgaW5saW5lIGludCB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyhzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCi0JCQkJCQlzdHJ1Y3QgdGVybWlvIF9fdXNlciAqdGVybWlvKQotewotCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19pZmxhZyk7Ci0JU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX29mbGFnKTsKLQlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfY2ZsYWcpOwotCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19sZmxhZyk7Ci0JZ2V0X3VzZXIodGVybWlvcy0+Y19saW5lLCAmdGVybWlvLT5jX2xpbmUpOwotCXJldHVybiBjb3B5X2Zyb21fdXNlcih0ZXJtaW9zLT5jX2NjLCB0ZXJtaW8tPmNfY2MsIE5DQyk7Ci19Ci0KLS8qCi0gKiBUcmFuc2xhdGUgYSAidGVybWlvcyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvIi4gVWdoLgotICovCi1zdGF0aWMgaW5saW5lIGludCBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pbyhzdHJ1Y3QgdGVybWlvIF9fdXNlciAqdGVybWlvLAotCQkJCQkgICAgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zKQotewotCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19pZmxhZywgJih0ZXJtaW8pLT5jX2lmbGFnKTsKLQlwdXRfdXNlcigodGVybWlvcyktPmNfb2ZsYWcsICYodGVybWlvKS0+Y19vZmxhZyk7Ci0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NmbGFnLCAmKHRlcm1pbyktPmNfY2ZsYWcpOwotCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19sZmxhZywgJih0ZXJtaW8pLT5jX2xmbGFnKTsKLQlwdXRfdXNlcigodGVybWlvcyktPmNfbGluZSwgICYodGVybWlvKS0+Y19saW5lKTsKLQlyZXR1cm4gY29weV90b191c2VyKCh0ZXJtaW8pLT5jX2NjLCAodGVybWlvcyktPmNfY2MsIE5DQyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcyhzdHJ1Y3Qga3Rlcm1pb3MgKmssCi0JCQkJCQkgc3RydWN0IHRlcm1pb3MyIF9fdXNlciAqdSkKLXsKLQlyZXR1cm4gY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zMikpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3Moc3RydWN0IHRlcm1pb3MyIF9fdXNlciAqdSwKLQkJCQkJCSBzdHJ1Y3Qga3Rlcm1pb3MgKmspCi17Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MyKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvc18xKHN0cnVjdCBrdGVybWlvcyAqaywKLQkJCQkJCSAgIHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqdSkKLXsKLQlyZXR1cm4gY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvc18xKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqdSwKLQkJCQkJCSAgIHN0cnVjdCBrdGVybWlvcyAqaykKLXsKLQlyZXR1cm4gY29weV90b191c2VyKHUsIGssIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpOwotfQotCi0jZW5kaWYJLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogX0FTTV9YODZfVEVSTUlPU19IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGVybWlvcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggZmFkN2Q0MC4uZDI3ZDBhMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC05NSw3ICs5NSw3IEBACiAjZGVmaW5lIFRJRl9ERUJVR0NUTE1TUgkJMjUJLyogdXNlcyB0aHJlYWRfc3RydWN0LmRlYnVnY3RsbXNyICovCiAjZGVmaW5lIFRJRl9EU19BUkVBX01TUgkJMjYgICAgICAvKiB1c2VzIHRocmVhZF9zdHJ1Y3QuZHNfYXJlYV9tc3IgKi8KICNkZWZpbmUgVElGX0xBWllfTU1VX1VQREFURVMJMjcJLyogdGFzayBpcyB1cGRhdGluZyB0aGUgbW11IGxhemlseSAqLwotI2RlZmluZSBUSUZfU1lTQ0FMTF9GVFJBQ0UJMjgJLyogZm9yIGZ0cmFjZSBzeXNjYWxsIGluc3RydW1lbnRhdGlvbiAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRVBPSU5UCTI4CS8qIHN5c2NhbGwgdHJhY2Vwb2ludCBpbnN0cnVtZW50YXRpb24gKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMSA8PCBUSUZfTk9USUZZX1JFU1VNRSkKQEAgLTExOCwxNyArMTE4LDE3IEBACiAjZGVmaW5lIF9USUZfREVCVUdDVExNU1IJKDEgPDwgVElGX0RFQlVHQ1RMTVNSKQogI2RlZmluZSBfVElGX0RTX0FSRUFfTVNSCSgxIDw8IFRJRl9EU19BUkVBX01TUikKICNkZWZpbmUgX1RJRl9MQVpZX01NVV9VUERBVEVTCSgxIDw8IFRJRl9MQVpZX01NVV9VUERBVEVTKQotI2RlZmluZSBfVElGX1NZU0NBTExfRlRSQUNFCSgxIDw8IFRJRl9TWVNDQUxMX0ZUUkFDRSkKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0VQT0lOVCkKIAogLyogd29yayB0byBkbyBpbiBzeXNjYWxsX3RyYWNlX2VudGVyKCkgKi8KICNkZWZpbmUgX1RJRl9XT1JLX1NZU0NBTExfRU5UUlkJXAotCShfVElGX1NZU0NBTExfVFJBQ0UgfCBfVElGX1NZU0NBTExfRU1VIHwgX1RJRl9TWVNDQUxMX0ZUUkFDRSB8CVwKLQkgX1RJRl9TWVNDQUxMX0FVRElUIHwgX1RJRl9TRUNDT01QIHwgX1RJRl9TSU5HTEVTVEVQKQorCShfVElGX1NZU0NBTExfVFJBQ0UgfCBfVElGX1NZU0NBTExfRU1VIHwgX1RJRl9TWVNDQUxMX0FVRElUIHwJXAorCSBfVElGX1NFQ0NPTVAgfCBfVElGX1NJTkdMRVNURVAgfCBfVElGX1NZU0NBTExfVFJBQ0VQT0lOVCkKIAogLyogd29yayB0byBkbyBpbiBzeXNjYWxsX3RyYWNlX2xlYXZlKCkgKi8KICNkZWZpbmUgX1RJRl9XT1JLX1NZU0NBTExfRVhJVAlcCiAJKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IF9USUZfU0lOR0xFU1RFUCB8CVwKLQkgX1RJRl9TWVNDQUxMX0ZUUkFDRSkKKwkgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQpCiAKIC8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCQkJCQkJXApAQCAtMTM3LDcgKzEzNyw4IEBACiAJICAgX1RJRl9TSU5HTEVTVEVQfF9USUZfU0VDQ09NUHxfVElGX1NZU0NBTExfRU1VKSkKIAogLyogd29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHVzZXIgc3BhY2UgKi8KLSNkZWZpbmUgX1RJRl9BTExXT1JLX01BU0sgKCgweDAwMDBGRkZGICYgfl9USUZfU0VDQ09NUCkgfCBfVElGX1NZU0NBTExfRlRSQUNFKQorI2RlZmluZSBfVElGX0FMTFdPUktfTUFTSwkJCQkJCVwKKwkoKDB4MDAwMEZGRkYgJiB+X1RJRl9TRUNDT01QKSB8IF9USUZfU1lTQ0FMTF9UUkFDRVBPSU5UKQogCiAvKiBPbmx5IHVzZWQgZm9yIDY0IGJpdCAqLwogI2RlZmluZSBfVElGX0RPX05PVElGWV9NQVNLCQkJCQkJXApAQCAtMjEzLDcgKzIxNCw3IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7Ci0JdGkgPSAodm9pZCAqKShwZXJjcHVfcmVhZChrZXJuZWxfc3RhY2spICsKKwl0aSA9ICh2b2lkICopKHBlcmNwdV9yZWFkX3N0YWJsZShrZXJuZWxfc3RhY2spICsKIAkJICAgICAgS0VSTkVMX1NUQUNLX09GRlNFVCAtIFRIUkVBRF9TSVpFKTsKIAlyZXR1cm4gdGk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCAwNjZlZjU5Li4yNmQwNmUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTEyOSwyNSArMTI5LDM0IEBACiAjZW5kaWYKIAogLyogc2NoZWRfZG9tYWlucyBTRF9OT0RFX0lOSVQgZm9yIE5VTUEgbWFjaGluZXMgKi8KLSNkZWZpbmUgU0RfTk9ERV9JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQlcCi0JLm1pbl9pbnRlcnZhbAkJPSA4LAkJCVwKLQkubWF4X2ludGVydmFsCQk9IDMyLAkJCVwKLQkuYnVzeV9mYWN0b3IJCT0gMzIsCQkJXAotCS5pbWJhbGFuY2VfcGN0CQk9IDEyNSwJCQlcCi0JLmNhY2hlX25pY2VfdHJpZXMJPSBTRF9DQUNIRV9OSUNFX1RSSUVTLAlcCi0JLmJ1c3lfaWR4CQk9IDMsCQkJXAotCS5pZGxlX2lkeAkJPSBTRF9JRExFX0lEWCwJCVwKLQkubmV3aWRsZV9pZHgJCT0gU0RfTkVXSURMRV9JRFgsCVwKLQkud2FrZV9pZHgJCT0gMSwJCQlcCi0JLmZvcmtleGVjX2lkeAkJPSBTRF9GT1JLRVhFQ19JRFgsCVwKLQkuZmxhZ3MJCQk9IFNEX0xPQURfQkFMQU5DRQlcCi0JCQkJfCBTRF9CQUxBTkNFX0VYRUMJXAotCQkJCXwgU0RfQkFMQU5DRV9GT1JLCVwKLQkJCQl8IFNEX1dBS0VfQUZGSU5FCVwKLQkJCQl8IFNEX1dBS0VfQkFMQU5DRQlcCi0JCQkJfCBTRF9TRVJJQUxJWkUsCQlcCi0JLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJXAotCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQlcCisjZGVmaW5lIFNEX05PREVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJCQlcCisJLm1pbl9pbnRlcnZhbAkJPSA4LAkJCQkJXAorCS5tYXhfaW50ZXJ2YWwJCT0gMzIsCQkJCQlcCisJLmJ1c3lfZmFjdG9yCQk9IDMyLAkJCQkJXAorCS5pbWJhbGFuY2VfcGN0CQk9IDEyNSwJCQkJCVwKKwkuY2FjaGVfbmljZV90cmllcwk9IFNEX0NBQ0hFX05JQ0VfVFJJRVMsCQkJXAorCS5idXN5X2lkeAkJPSAzLAkJCQkJXAorCS5pZGxlX2lkeAkJPSBTRF9JRExFX0lEWCwJCQkJXAorCS5uZXdpZGxlX2lkeAkJPSBTRF9ORVdJRExFX0lEWCwJCQlcCisJLndha2VfaWR4CQk9IDEsCQkJCQlcCisJLmZvcmtleGVjX2lkeAkJPSBTRF9GT1JLRVhFQ19JRFgsCQkJXAorCQkJCQkJCQkJXAorCS5mbGFncwkJCT0gMSpTRF9MT0FEX0JBTEFOQ0UJCQlcCisJCQkJfCAxKlNEX0JBTEFOQ0VfTkVXSURMRQkJCVwKKwkJCQl8IDEqU0RfQkFMQU5DRV9FWEVDCQkJXAorCQkJCXwgMSpTRF9CQUxBTkNFX0ZPUksJCQlcCisJCQkJfCAwKlNEX1dBS0VfSURMRQkJCVwKKwkJCQl8IDEqU0RfV0FLRV9BRkZJTkUJCQlcCisJCQkJfCAxKlNEX1dBS0VfQkFMQU5DRQkJCVwKKwkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCisJCQkJfCAwKlNEX1BPV0VSU0FWSU5HU19CQUxBTkNFCQlcCisJCQkJfCAwKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKKwkJCQl8IDEqU0RfU0VSSUFMSVpFCQkJXAorCQkJCXwgMSpTRF9XQUtFX0lETEVfRkFSCQkJXAorCQkJCXwgMCpTRF9QUkVGRVJfU0lCTElORwkJCVwKKwkJCQksCQkJCQlcCisJLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJCQlcCisJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCQkJXAogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl82NF9BQ1BJX05VTUEKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFwcy5oCmluZGV4IGJmZDc0YzAuLjRkYTkxYWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhcHMuaApAQCAtODEsOSArODEsNyBAQAogCiB2b2lkIG1hdGhfZXJyb3Iodm9pZCBfX3VzZXIgKik7CiB2b2lkIG1hdGhfZW11bGF0ZShzdHJ1Y3QgbWF0aF9lbXVfaW5mbyAqKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi11bnNpZ25lZCBsb25nIHBhdGNoX2VzcGZpeF9kZXNjKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotI2Vsc2UKKyNpZm5kZWYgQ09ORklHX1g4Nl8zMgogYXNtbGlua2FnZSB2b2lkIHNtcF90aGVybWFsX2ludGVycnVwdCh2b2lkKTsKIGFzbWxpbmthZ2Ugdm9pZCBtY2VfdGhyZXNob2xkX2ludGVycnVwdCh2b2lkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggMDliOTc3NC4uZGYxZGEyMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90eXBlcy5oCkBAIC0xLDE5ICsxLDExIEBACiAjaWZuZGVmIF9BU01fWDg2X1RZUEVTX0gKICNkZWZpbmUgX0FTTV9YODZfVFlQRVNfSAogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KKyNkZWZpbmUgZG1hX2FkZHJfdAlkbWFfYWRkcl90CiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdHlwZXMuaD4KIAotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OwotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLS8qCi0gKiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQgb3V0c2lkZSB0aGUga2VybmVsIHRvIGF2b2lkIG5hbWUgc3BhY2UgY2xhc2hlcwotICovCiAjaWZkZWYgX19LRVJORUxfXwotCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiB0eXBlZGVmIHU2NCBkbWE2NF9hZGRyX3Q7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91Y29udGV4dC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWNvbnRleHQuaAppbmRleCA4NzMyNGNmLi5iN2MyOWM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91Y29udGV4dC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKQEAgLTcsMTIgKzcsNiBAQAogCQkJCSAqIHNpZ2NvbnRleHQgc3RydWN0ICh1Y19tY29udGV4dCkuCiAJCQkJICovCiAKLXN0cnVjdCB1Y29udGV4dCB7Ci0JdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOwotCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7Ci0Jc3RhY2tfdAkJICB1Y19zdGFjazsKLQlzdHJ1Y3Qgc2lnY29udGV4dCB1Y19tY29udGV4dDsKLQlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLwotfTsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy91Y29udGV4dC5oPgogCiAjZW5kaWYgLyogX0FTTV9YODZfVUNPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaAppbmRleCA3MzJhMzA3MC4uOGRlYWFkYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKQEAgLTM0NSw2ICszNDUsOCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjZGVmaW5lIE5SX3N5c2NhbGxzIDMzNworCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCmluZGV4IDkwMGUxNjEuLmI5ZjNjNjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCkBAIC02ODgsNiArNjg4LDEyIEBACiAjZW5kaWYJLyogX19OT19TVFVCUyAqLwogCiAjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIENPTVBJTEVfT0ZGU0VUUworI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2RlZmluZSBOUl9zeXNjYWxscyAoX19OUl9zeXNjYWxsX21heCArIDEpCisjZW5kaWYKKwogLyoKICAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKICAqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oCmluZGV4IDExYmU1YWQuLjI3MjUxNGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oCkBAIC01NSw2ICs1NSw3IEBACiAjZGVmaW5lIFNFQ09OREFSWV9FWEVDX0VOQUJMRV9FUFQgICAgICAgICAgICAgICAweDAwMDAwMDAyCiAjZGVmaW5lIFNFQ09OREFSWV9FWEVDX0VOQUJMRV9WUElEICAgICAgICAgICAgICAweDAwMDAwMDIwCiAjZGVmaW5lIFNFQ09OREFSWV9FWEVDX1dCSU5WRF9FWElUSU5HCQkweDAwMDAwMDQwCisjZGVmaW5lIFNFQ09OREFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVTVAkweDAwMDAwMDgwCiAKIAogI2RlZmluZSBQSU5fQkFTRURfRVhUX0lOVFJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQpAQCAtMzUxLDkgKzM1MiwxNiBAQAogI2RlZmluZSBWTVhfRVBUX0VYVEVOVF9JTkRJVklEVUFMX0FERFIJCTAKICNkZWZpbmUgVk1YX0VQVF9FWFRFTlRfQ09OVEVYVAkJCTEKICNkZWZpbmUgVk1YX0VQVF9FWFRFTlRfR0xPQkFMCQkJMgorCisjZGVmaW5lIFZNWF9FUFRfRVhFQ1VURV9PTkxZX0JJVAkJKDF1bGwpCisjZGVmaW5lIFZNWF9FUFRfUEFHRV9XQUxLXzRfQklUCQkJKDF1bGwgPDwgNikKKyNkZWZpbmUgVk1YX0VQVFBfVUNfQklUCQkJCSgxdWxsIDw8IDgpCisjZGVmaW5lIFZNWF9FUFRQX1dCX0JJVAkJCQkoMXVsbCA8PCAxNCkKKyNkZWZpbmUgVk1YX0VQVF8yTUJfUEFHRV9CSVQJCQkoMXVsbCA8PCAxNikKICNkZWZpbmUgVk1YX0VQVF9FWFRFTlRfSU5ESVZJRFVBTF9CSVQJCSgxdWxsIDw8IDI0KQogI2RlZmluZSBWTVhfRVBUX0VYVEVOVF9DT05URVhUX0JJVAkJKDF1bGwgPDwgMjUpCiAjZGVmaW5lIFZNWF9FUFRfRVhURU5UX0dMT0JBTF9CSVQJCSgxdWxsIDw8IDI2KQorCiAjZGVmaW5lIFZNWF9FUFRfREVGQVVMVF9HQVcJCQkzCiAjZGVmaW5lIFZNWF9FUFRfTUFYX0dBVwkJCQkweDQKICNkZWZpbmUgVk1YX0VQVF9NVF9FUFRFX1NISUZUCQkJMwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IDQzMGQ1YjIuLjgzMmNiODMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTUyLDYgKzUyLDcgQEAKIG9iai0kKENPTkZJR19YODZfMzIpCQkrPSB0bHMubwogb2JqLSQoQ09ORklHX0lBMzJfRU1VTEFUSU9OKQkrPSB0bHMubwogb2JqLXkJCQkJKz0gc3RlcC5vCitvYmotJChDT05GSUdfSU5URUxfVFhUKQkJKz0gdGJvb3Qubwogb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2Uubwogb2JqLXkJCQkJKz0gY3B1Lwogb2JqLXkJCQkJKz0gYWNwaS8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCA2YjhjYTNhLi42N2U5MjliIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC04MzMsMTA2ICs4MzMsNiBAQAogZXh0ZXJuIGludCBlczcwMDBfcGxhdDsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHsKLQlpbnQgZ3NpX2Jhc2U7Ci0JaW50IGdzaV9lbmQ7Ci19IG1wX2lvYXBpY19yb3V0aW5nW01BWF9JT19BUElDU107Ci0KLWludCBtcF9maW5kX2lvYXBpYyhpbnQgZ3NpKQotewotCWludCBpID0gMDsKLQotCS8qIEZpbmQgdGhlIElPQVBJQyB0aGF0IG1hbmFnZXMgdGhpcyBHU0kuICovCi0JZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewotCQlpZiAoKGdzaSA+PSBtcF9pb2FwaWNfcm91dGluZ1tpXS5nc2lfYmFzZSkKLQkJICAgICYmIChnc2kgPD0gbXBfaW9hcGljX3JvdXRpbmdbaV0uZ3NpX2VuZCkpCi0JCQlyZXR1cm4gaTsKLQl9Ci0KLQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBVbmFibGUgdG8gbG9jYXRlIElPQVBJQyBmb3IgR1NJICVkXG4iLCBnc2kpOwotCXJldHVybiAtMTsKLX0KLQotaW50IG1wX2ZpbmRfaW9hcGljX3BpbihpbnQgaW9hcGljLCBpbnQgZ3NpKQotewotCWlmIChXQVJOX09OKGlvYXBpYyA9PSAtMSkpCi0JCXJldHVybiAtMTsKLQlpZiAoV0FSTl9PTihnc2kgPiBtcF9pb2FwaWNfcm91dGluZ1tpb2FwaWNdLmdzaV9lbmQpKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gZ3NpIC0gbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5nc2lfYmFzZTsKLX0KLQotc3RhdGljIHU4IF9faW5pdCB1bmlxX2lvYXBpY19pZCh1OCBpZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgJiYKLQkgICAgIUFQSUNfWEFQSUMoYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF0pKQotCQlyZXR1cm4gaW9fYXBpY19nZXRfdW5pcXVlX2lkKG5yX2lvYXBpY3MsIGlkKTsKLQllbHNlCi0JCXJldHVybiBpZDsKLSNlbHNlCi0JaW50IGk7Ci0JREVDTEFSRV9CSVRNQVAodXNlZCwgMjU2KTsKLQliaXRtYXBfemVybyh1c2VkLCAyNTYpOwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKLQkJc3RydWN0IG1wY19pb2FwaWMgKmlhID0gJm1wX2lvYXBpY3NbaV07Ci0JCV9fc2V0X2JpdChpYS0+YXBpY2lkLCB1c2VkKTsKLQl9Ci0JaWYgKCF0ZXN0X2JpdChpZCwgdXNlZCkpCi0JCXJldHVybiBpZDsKLQlyZXR1cm4gZmluZF9maXJzdF96ZXJvX2JpdCh1c2VkLCAyNTYpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgYmFkX2lvYXBpYyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0JaWYgKG5yX2lvYXBpY3MgPj0gTUFYX0lPX0FQSUNTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IE1heCAjIG9mIEkvTyBBUElDcyAoJWQpIGV4Y2VlZGVkICIKLQkJICAgICAgICIoZm91bmQgJWQpXG4iLCBNQVhfSU9fQVBJQ1MsIG5yX2lvYXBpY3MpOwotCQlwYW5pYygiUmVjb21waWxlIGtlcm5lbCB3aXRoIGJpZ2dlciBNQVhfSU9fQVBJQ1MhXG4iKTsKLQl9Ci0JaWYgKCFhZGRyZXNzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORzogQm9ndXMgKHplcm8pIEkvTyBBUElDIGFkZHJlc3MiCi0JCSAgICAgICAiIGZvdW5kIGluIHRhYmxlLCBza2lwcGluZyFcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19pbml0IG1wX3JlZ2lzdGVyX2lvYXBpYyhpbnQgaWQsIHUzMiBhZGRyZXNzLCB1MzIgZ3NpX2Jhc2UpCi17Ci0JaW50IGlkeCA9IDA7Ci0KLQlpZiAoYmFkX2lvYXBpYyhhZGRyZXNzKSkKLQkJcmV0dXJuOwotCi0JaWR4ID0gbnJfaW9hcGljczsKLQotCW1wX2lvYXBpY3NbaWR4XS50eXBlID0gTVBfSU9BUElDOwotCW1wX2lvYXBpY3NbaWR4XS5mbGFncyA9IE1QQ19BUElDX1VTQUJMRTsKLQltcF9pb2FwaWNzW2lkeF0uYXBpY2FkZHIgPSBhZGRyZXNzOwotCi0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9JT19BUElDX0JBU0VfMCArIGlkeCwgYWRkcmVzcyk7Ci0JbXBfaW9hcGljc1tpZHhdLmFwaWNpZCA9IHVuaXFfaW9hcGljX2lkKGlkKTsKLQltcF9pb2FwaWNzW2lkeF0uYXBpY3ZlciA9IGlvX2FwaWNfZ2V0X3ZlcnNpb24oaWR4KTsKLQotCS8qCi0JICogQnVpbGQgYmFzaWMgR1NJIGxvb2t1cCB0YWJsZSB0byBmYWNpbGl0YXRlIGdzaS0+aW9fYXBpYyBsb29rdXBzCi0JICogYW5kIHRvIHByZXZlbnQgcmVwcm9ncmFtbWluZyBvZiBJT0FQSUMgcGlucyAoUENJIEdTSXMpLgotCSAqLwotCW1wX2lvYXBpY19yb3V0aW5nW2lkeF0uZ3NpX2Jhc2UgPSBnc2lfYmFzZTsKLQltcF9pb2FwaWNfcm91dGluZ1tpZHhdLmdzaV9lbmQgPSBnc2lfYmFzZSArCi0JICAgIGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaWR4KTsKLQotCXByaW50ayhLRVJOX0lORk8gIklPQVBJQ1slZF06IGFwaWNfaWQgJWQsIHZlcnNpb24gJWQsIGFkZHJlc3MgMHgleCwgIgotCSAgICAgICAiR1NJICVkLSVkXG4iLCBpZHgsIG1wX2lvYXBpY3NbaWR4XS5hcGljaWQsCi0JICAgICAgIG1wX2lvYXBpY3NbaWR4XS5hcGljdmVyLCBtcF9pb2FwaWNzW2lkeF0uYXBpY2FkZHIsCi0JICAgICAgIG1wX2lvYXBpY19yb3V0aW5nW2lkeF0uZ3NpX2Jhc2UsIG1wX2lvYXBpY19yb3V0aW5nW2lkeF0uZ3NpX2VuZCk7Ci0KLQlucl9pb2FwaWNzKys7Ci19Ci0KIGludCBfX2luaXQgYWNwaV9wcm9iZV9nc2kodm9pZCkKIHsKIAlpbnQgaWR4OwpAQCAtOTQ3LDcgKzg0Nyw3IEBACiAKIAltYXhfZ3NpID0gMDsKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IG5yX2lvYXBpY3M7IGlkeCsrKSB7Ci0JCWdzaSA9IG1wX2lvYXBpY19yb3V0aW5nW2lkeF0uZ3NpX2VuZDsKKwkJZ3NpID0gbXBfZ3NpX3JvdXRpbmdbaWR4XS5nc2lfZW5kOwogCiAJCWlmIChnc2kgPiBtYXhfZ3NpKQogCQkJbWF4X2dzaSA9IGdzaTsKQEAgLTExNzksOSArMTA3OSw4IEBACiAJICogSWYgTVBTIGlzIHByZXNlbnQsIGl0IHdpbGwgaGFuZGxlIHRoZW0sCiAJICogb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gd2lsbCBzdGF5IGluIFBJQyBtb2RlCiAJICovCi0JaWYgKGFjcGlfZGlzYWJsZWQgfHwgYWNwaV9ub2lycSkgeworCWlmIChhY3BpX2Rpc2FibGVkIHx8IGFjcGlfbm9pcnEpCiAJCXJldHVybiAtRU5PREVWOwotCX0KIAogCWlmICghY3B1X2hhc19hcGljKQogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKaW5kZXggZjU3NjU4Ny4uZGU3MzUzYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKQEAgLTIsNiArMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CkBAIC0zMiw3ICszMyw3IEBACiAjZGVmaW5lIHNtcF9hbHRfb25jZSAxCiAjZW5kaWYKIAotc3RhdGljIGludCBkZWJ1Z19hbHRlcm5hdGl2ZTsKK3N0YXRpYyBpbnQgX19pbml0ZGF0YV9vcl9tb2R1bGUgZGVidWdfYWx0ZXJuYXRpdmU7CiAKIHN0YXRpYyBpbnQgX19pbml0IGRlYnVnX2FsdChjaGFyICpzdHIpCiB7CkBAIC01MSw3ICs1Miw3IEBACiBfX3NldHVwKCJub3JlcGxhY2Utc21wIiwgc2V0dXBfbm9yZXBsYWNlX3NtcCk7CiAKICNpZmRlZiBDT05GSUdfUEFSQVZJUlQKLXN0YXRpYyBpbnQgbm9yZXBsYWNlX3BhcmF2aXJ0ID0gMDsKK3N0YXRpYyBpbnQgX19pbml0ZGF0YV9vcl9tb2R1bGUgbm9yZXBsYWNlX3BhcmF2aXJ0ID0gMDsKIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfbm9yZXBsYWNlX3BhcmF2aXJ0KGNoYXIgKnN0cikKIHsKQEAgLTY0LDE2ICs2NSwxNyBAQAogI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikgaWYgKGRlYnVnX2FsdGVybmF0aXZlKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgZm10LCBhcmdzKQogCi0jaWZkZWYgR0VORVJJQ19OT1AxCisjaWYgZGVmaW5lZChHRU5FUklDX05PUDEpICYmICFkZWZpbmVkKENPTkZJR19YODZfNjQpCiAvKiBVc2UgaW5saW5lIGFzc2VtYmx5IHRvIGRlZmluZSB0aGlzIGJlY2F1c2UgdGhlIG5vcHMgYXJlIGRlZmluZWQKICAgIGFzIGlubGluZSBhc3NlbWJseSBzdHJpbmdzIGluIHRoZSBpbmNsdWRlIGZpbGVzIGFuZCB3ZSBjYW5ub3QKICAgIGdldCB0aGVtIGVhc2lseSBpbnRvIHN0cmluZ3MuICovCi1hc20oIlx0LnNlY3Rpb24gLnJvZGF0YSwgXCJhXCJcbmludGVsbm9wczogIgorYXNtKCJcdCIgX19zdHJpbmdpZnkoX19JTklUUk9EQVRBX09SX01PRFVMRSkgIlxuaW50ZWxub3BzOiAiCiAJR0VORVJJQ19OT1AxIEdFTkVSSUNfTk9QMiBHRU5FUklDX05PUDMgR0VORVJJQ19OT1A0IEdFTkVSSUNfTk9QNSBHRU5FUklDX05PUDYKIAlHRU5FUklDX05PUDcgR0VORVJJQ19OT1A4CiAgICAgIlx0LnByZXZpb3VzIik7CiBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBpbnRlbG5vcHNbXTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBpbnRlbF9ub3BzW0FTTV9OT1BfTUFYKzFdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0IF9faW5pdGNvbnN0X29yX21vZHVsZQoraW50ZWxfbm9wc1tBU01fTk9QX01BWCsxXSA9IHsKIAlOVUxMLAogCWludGVsbm9wcywKIAlpbnRlbG5vcHMgKyAxLApAQCAtODcsMTIgKzg5LDEzIEBACiAjZW5kaWYKIAogI2lmZGVmIEs4X05PUDEKLWFzbSgiXHQuc2VjdGlvbiAucm9kYXRhLCBcImFcIlxuazhub3BzOiAiCithc20oIlx0IiBfX3N0cmluZ2lmeShfX0lOSVRST0RBVEFfT1JfTU9EVUxFKSAiXG5rOG5vcHM6ICIKIAlLOF9OT1AxIEs4X05PUDIgSzhfTk9QMyBLOF9OT1A0IEs4X05PUDUgSzhfTk9QNgogCUs4X05PUDcgSzhfTk9QOAogICAgICJcdC5wcmV2aW91cyIpOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgazhub3BzW107Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3Qgazhfbm9wc1tBU01fTk9QX01BWCsxXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBfX2luaXRjb25zdF9vcl9tb2R1bGUKK2s4X25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CiAJTlVMTCwKIAlrOG5vcHMsCiAJazhub3BzICsgMSwKQEAgLTEwNSwxMyArMTA4LDE0IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBLN19OT1AxCi1hc20oIlx0LnNlY3Rpb24gLnJvZGF0YSwgXCJhXCJcbms3bm9wczogIgorI2lmIGRlZmluZWQoSzdfTk9QMSkgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl82NCkKK2FzbSgiXHQiIF9fc3RyaW5naWZ5KF9fSU5JVFJPREFUQV9PUl9NT0RVTEUpICJcbms3bm9wczogIgogCUs3X05PUDEgSzdfTk9QMiBLN19OT1AzIEs3X05PUDQgSzdfTk9QNSBLN19OT1A2CiAJSzdfTk9QNyBLN19OT1A4CiAgICAgIlx0LnByZXZpb3VzIik7CiBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBrN25vcHNbXTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBrN19ub3BzW0FTTV9OT1BfTUFYKzFdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0IF9faW5pdGNvbnN0X29yX21vZHVsZQorazdfbm9wc1tBU01fTk9QX01BWCsxXSA9IHsKIAlOVUxMLAogCWs3bm9wcywKIAlrN25vcHMgKyAxLApAQCAtMTI1LDEyICsxMjksMTMgQEAKICNlbmRpZgogCiAjaWZkZWYgUDZfTk9QMQotYXNtKCJcdC5zZWN0aW9uIC5yb2RhdGEsIFwiYVwiXG5wNm5vcHM6ICIKK2FzbSgiXHQiIF9fc3RyaW5naWZ5KF9fSU5JVFJPREFUQV9PUl9NT0RVTEUpICJcbnA2bm9wczogIgogCVA2X05PUDEgUDZfTk9QMiBQNl9OT1AzIFA2X05PUDQgUDZfTk9QNSBQNl9OT1A2CiAJUDZfTk9QNyBQNl9OT1A4CiAgICAgIlx0LnByZXZpb3VzIik7CiBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBwNm5vcHNbXTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBwNl9ub3BzW0FTTV9OT1BfTUFYKzFdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0IF9faW5pdGNvbnN0X29yX21vZHVsZQorcDZfbm9wc1tBU01fTk9QX01BWCsxXSA9IHsKIAlOVUxMLAogCXA2bm9wcywKIAlwNm5vcHMgKyAxLApAQCAtMTQ2LDcgKzE1MSw3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCiBleHRlcm4gY2hhciBfX3ZzeXNjYWxsXzA7Ci1jb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCAqZmluZF9ub3BfdGFibGUodm9pZCkKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCAqX19pbml0X29yX21vZHVsZSBmaW5kX25vcF90YWJsZSh2b2lkKQogewogCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCAmJgogCSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTk9QTCkpCkBAIC0xNTcsNyArMTYyLDcgQEAKIAogI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLwogCi1jb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCAqZmluZF9ub3BfdGFibGUodm9pZCkKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCAqX19pbml0X29yX21vZHVsZSBmaW5kX25vcF90YWJsZSh2b2lkKQogewogCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSzgpKQogCQlyZXR1cm4gazhfbm9wczsKQEAgLTE3Miw3ICsxNzcsNyBAQAogI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KIAogLyogVXNlIHRoaXMgdG8gYWRkIG5vcHMgdG8gYSBidWZmZXIsIHRoZW4gdGV4dF9wb2tlIHRoZSB3aG9sZSBidWZmZXIuICovCi12b2lkIGFkZF9ub3BzKHZvaWQgKmluc25zLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgX19pbml0X29yX21vZHVsZSBhZGRfbm9wcyh2b2lkICppbnNucywgdW5zaWduZWQgaW50IGxlbikKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCAqbm9wdGFibGUgPSBmaW5kX25vcF90YWJsZSgpOwogCkBAIC0xODUsMTAgKzE5MCwxMCBAQAogCQlsZW4gLT0gbm9wbGVuOwogCX0KIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGFkZF9ub3BzKTsKIAogZXh0ZXJuIHN0cnVjdCBhbHRfaW5zdHIgX19hbHRfaW5zdHJ1Y3Rpb25zW10sIF9fYWx0X2luc3RydWN0aW9uc19lbmRbXTsKIGV4dGVybiB1OCAqX19zbXBfbG9ja3NbXSwgKl9fc21wX2xvY2tzX2VuZFtdOworc3RhdGljIHZvaWQgKnRleHRfcG9rZV9lYXJseSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pOwogCiAvKiBSZXBsYWNlIGluc3RydWN0aW9ucyB3aXRoIGJldHRlciBhbHRlcm5hdGl2ZXMgZm9yIHRoaXMgQ1BVIHR5cGUuCiAgICBUaGlzIHJ1bnMgYmVmb3JlIFNNUCBpcyBpbml0aWFsaXplZCB0byBhdm9pZCBTTVAgcHJvYmxlbXMgd2l0aApAQCAtMTk2LDcgKzIwMSw4IEBACiAgICBBUHMgaGF2ZSBsZXNzIGNhcGFiaWxpdGllcyB0aGFuIHRoZSBib290IHByb2Nlc3NvciBhcmUgbm90IGhhbmRsZWQuCiAgICBUb3VnaC4gTWFrZSBzdXJlIHlvdSBkaXNhYmxlIHN1Y2ggZmVhdHVyZXMgYnkgaGFuZC4gKi8KIAotdm9pZCBhcHBseV9hbHRlcm5hdGl2ZXMoc3RydWN0IGFsdF9pbnN0ciAqc3RhcnQsIHN0cnVjdCBhbHRfaW5zdHIgKmVuZCkKK3ZvaWQgX19pbml0X29yX21vZHVsZSBhcHBseV9hbHRlcm5hdGl2ZXMoc3RydWN0IGFsdF9pbnN0ciAqc3RhcnQsCisJCQkJCSBzdHJ1Y3QgYWx0X2luc3RyICplbmQpCiB7CiAJc3RydWN0IGFsdF9pbnN0ciAqYTsKIAljaGFyIGluc25idWZbTUFYX1BBVENIX0xFTl07CkBAIC0yNzksOSArMjg1LDEwIEBACiBzdGF0aWMgREVGSU5FX01VVEVYKHNtcF9hbHQpOwogc3RhdGljIGludCBzbXBfbW9kZSA9IDE7CS8qIHByb3RlY3RlZCBieSBzbXBfYWx0ICovCiAKLXZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfYWRkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAqbmFtZSwKLQkJCQkgdm9pZCAqbG9ja3MsIHZvaWQgKmxvY2tzX2VuZCwKLQkJCQkgdm9pZCAqdGV4dCwgIHZvaWQgKnRleHRfZW5kKQordm9pZCBfX2luaXRfb3JfbW9kdWxlIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2FkZChzdHJ1Y3QgbW9kdWxlICptb2QsCisJCQkJCQkgIGNoYXIgKm5hbWUsCisJCQkJCQkgIHZvaWQgKmxvY2tzLCB2b2lkICpsb2Nrc19lbmQsCisJCQkJCQkgIHZvaWQgKnRleHQsICB2b2lkICp0ZXh0X2VuZCkKIHsKIAlzdHJ1Y3Qgc21wX2FsdF9tb2R1bGUgKnNtcDsKIApAQCAtMzE3LDcgKzMyNCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZzbXBfYWx0KTsKIH0KIAotdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKQordm9pZCBfX2luaXRfb3JfbW9kdWxlIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2RlbChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAJc3RydWN0IHNtcF9hbHRfbW9kdWxlICppdGVtOwogCkBAIC0zODYsOCArMzkzLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCi12b2lkIGFwcGx5X3BhcmF2aXJ0KHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlICpzdGFydCwKLQkJICAgIHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlICplbmQpCit2b2lkIF9faW5pdF9vcl9tb2R1bGUgYXBwbHlfcGFyYXZpcnQoc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgKnN0YXJ0LAorCQkJCSAgICAgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgKmVuZCkKIHsKIAlzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZSAqcDsKIAljaGFyIGluc25idWZbTUFYX1BBVENIX0xFTl07CkBAIC00ODUsMTMgKzQ5MiwxNCBAQAogICogaW5zdHJ1Y3Rpb25zLiBBbmQgb24gdGhlIGxvY2FsIENQVSB5b3UgbmVlZCB0byBiZSBwcm90ZWN0ZWQgYWdhaW4gTk1JIG9yIE1DRQogICogaGFuZGxlcnMgc2VlaW5nIGFuIGluY29uc2lzdGVudCBpbnN0cnVjdGlvbiB3aGlsZSB5b3UgcGF0Y2guCiAgKi8KLXZvaWQgKnRleHRfcG9rZV9lYXJseSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pCitzdGF0aWMgdm9pZCAqX19pbml0X29yX21vZHVsZSB0ZXh0X3Bva2VfZWFybHkodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLAorCQkJCQkgICAgICBzaXplX3QgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCW1lbWNweShhZGRyLCBvcGNvZGUsIGxlbik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXN5bmNfY29yZSgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkvKiBDb3VsZCBhbHNvIGRvIGEgQ0xGTFVTSCBoZXJlIHRvIHNwZWVkIHVwIENQVSByZWNvdmVyeTsgYnV0CiAJICAgdGhhdCBjYXVzZXMgaGFuZ3Mgb24gc29tZSBWSUEgQ1BVcy4gKi8KIAlyZXR1cm4gYWRkcjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCA2Yzk5ZjUwLi45OGYyMzBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC00MSw5ICs0MSwxMyBAQAogc3RhdGljIExJU1RfSEVBRChpb21tdV9wZF9saXN0KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaW9tbXVfcGRfbGlzdF9sb2NrKTsKIAotI2lmZGVmIENPTkZJR19JT01NVV9BUEkKKy8qCisgKiBEb21haW4gZm9yIHVudHJhbnNsYXRlZCBkZXZpY2VzIC0gb25seSBhbGxvY2F0ZWQKKyAqIGlmIGlvbW11PXB0IHBhc3NlZCBvbiBrZXJuZWwgY21kIGxpbmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKnB0X2RvbWFpbjsKKwogc3RhdGljIHN0cnVjdCBpb21tdV9vcHMgYW1kX2lvbW11X29wczsKLSNlbmRpZgogCiAvKgogICogZ2VuZXJhbCBzdHJ1Y3QgdG8gbWFuYWdlIGNvbW1hbmRzIHNlbmQgdG8gYW4gSU9NTVUKQEAgLTU1LDE2ICs1OSwxNiBAQAogc3RhdGljIGludCBkbWFfb3BzX3VuaXR5X21hcChzdHJ1Y3QgZG1hX29wc19kb21haW4gKmRtYV9kb20sCiAJCQkgICAgIHN0cnVjdCB1bml0eV9tYXBfZW50cnkgKmUpOwogc3RhdGljIHN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZmluZF9wcm90ZWN0aW9uX2RvbWFpbih1MTYgZGV2aWQpOwotc3RhdGljIHU2NCogYWxsb2NfcHRlKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tLAotCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHU2NAotCQkgICAgICAqKnB0ZV9wYWdlLCBnZnBfdCBnZnApOworc3RhdGljIHU2NCAqYWxsb2NfcHRlKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBlbmRfbHZsLAorCQkgICAgICB1NjQgKipwdGVfcGFnZSwgZ2ZwX3QgZ2ZwKTsKIHN0YXRpYyB2b2lkIGRtYV9vcHNfcmVzZXJ2ZV9hZGRyZXNzZXMoc3RydWN0IGRtYV9vcHNfZG9tYWluICpkb20sCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wYWdlLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBwYWdlcyk7Ci0KLSNpZm5kZWYgQlVTX05PVElGWV9VTkJPVU5EX0RSSVZFUgotI2RlZmluZSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSIDB4MDAwNQotI2VuZGlmCitzdGF0aWMgdm9pZCByZXNldF9pb21tdV9jb21tYW5kX2J1ZmZlcihzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSk7CitzdGF0aWMgdTY0ICpmZXRjaF9wdGUoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4sCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IG1hcF9zaXplKTsKK3N0YXRpYyB2b2lkIHVwZGF0ZV9kb21haW4oc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pOwogCiAjaWZkZWYgQ09ORklHX0FNRF9JT01NVV9TVEFUUwogCkBAIC0xMzgsNyArMTQyLDI1IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGlvbW11X3ByaW50X2V2ZW50KHZvaWQgKl9fZXZ0KQorc3RhdGljIHZvaWQgZHVtcF9kdGVfZW50cnkodTE2IGRldmlkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJcHJfZXJyKCJBTUQtVmk6IERURVslZF06ICUwOHhcbiIsIGksCisJCQlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhW2ldKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9jb21tYW5kKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyKQoreworCXN0cnVjdCBpb21tdV9jbWQgKmNtZCA9IHBoeXNfdG9fdmlydChwaHlzX2FkZHIpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJcHJfZXJyKCJBTUQtVmk6IENNRFslZF06ICUwOHhcbiIsIGksIGNtZC0+ZGF0YVtpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGlvbW11X3ByaW50X2V2ZW50KHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB2b2lkICpfX2V2dCkKIHsKIAl1MzIgKmV2ZW50ID0gX19ldnQ7CiAJaW50IHR5cGUgID0gKGV2ZW50WzFdID4+IEVWRU5UX1RZUEVfU0hJRlQpICAmIEVWRU5UX1RZUEVfTUFTSzsKQEAgLTE0Nyw3ICsxNjksNyBAQAogCWludCBmbGFncyA9IChldmVudFsxXSA+PiBFVkVOVF9GTEFHU19TSElGVCkgJiBFVkVOVF9GTEFHU19NQVNLOwogCXU2NCBhZGRyZXNzID0gKHU2NCkoKCh1NjQpZXZlbnRbM10pIDw8IDMyKSB8IGV2ZW50WzJdOwogCi0JcHJpbnRrKEtFUk5fRVJSICJBTUQgSU9NTVU6IEV2ZW50IGxvZ2dlZCBbIik7CisJcHJpbnRrKEtFUk5fRVJSICJBTUQtVmk6IEV2ZW50IGxvZ2dlZCBbIik7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEVWRU5UX1RZUEVfSUxMX0RFVjoKQEAgLTE1NSw2ICsxNzcsNyBAQAogCQkgICAgICAgImFkZHJlc3M9MHglMDE2bGx4IGZsYWdzPTB4JTA0eF1cbiIsCiAJCSAgICAgICBQQ0lfQlVTKGRldmlkKSwgUENJX1NMT1QoZGV2aWQpLCBQQ0lfRlVOQyhkZXZpZCksCiAJCSAgICAgICBhZGRyZXNzLCBmbGFncyk7CisJCWR1bXBfZHRlX2VudHJ5KGRldmlkKTsKIAkJYnJlYWs7CiAJY2FzZSBFVkVOVF9UWVBFX0lPX0ZBVUxUOgogCQlwcmludGsoIklPX1BBR0VfRkFVTFQgZGV2aWNlPSUwMng6JTAyeC4leCAiCkBAIC0xNzYsNiArMTk5LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBFVkVOVF9UWVBFX0lMTF9DTUQ6CiAJCXByaW50aygiSUxMRUdBTF9DT01NQU5EX0VSUk9SIGFkZHJlc3M9MHglMDE2bGx4XVxuIiwgYWRkcmVzcyk7CisJCXJlc2V0X2lvbW11X2NvbW1hbmRfYnVmZmVyKGlvbW11KTsKKwkJZHVtcF9jb21tYW5kKGFkZHJlc3MpOwogCQlicmVhazsKIAljYXNlIEVWRU5UX1RZUEVfQ01EX0hBUkRfRVJSOgogCQlwcmludGsoIkNPTU1BTkRfSEFSRFdBUkVfRVJST1IgYWRkcmVzcz0weCUwMTZsbHggIgpAQCAtMjA5LDcgKzIzNCw3IEBACiAJdGFpbCA9IHJlYWRsKGlvbW11LT5tbWlvX2Jhc2UgKyBNTUlPX0VWVF9UQUlMX09GRlNFVCk7CiAKIAl3aGlsZSAoaGVhZCAhPSB0YWlsKSB7Ci0JCWlvbW11X3ByaW50X2V2ZW50KGlvbW11LT5ldnRfYnVmICsgaGVhZCk7CisJCWlvbW11X3ByaW50X2V2ZW50KGlvbW11LCBpb21tdS0+ZXZ0X2J1ZiArIGhlYWQpOwogCQloZWFkID0gKGhlYWQgKyBFVkVOVF9FTlRSWV9TSVpFKSAlIGlvbW11LT5ldnRfYnVmX3NpemU7CiAJfQogCkBAIC0yOTYsOCArMzIxLDExIEBACiAJc3RhdHVzICY9IH5NTUlPX1NUQVRVU19DT01fV0FJVF9JTlRfTUFTSzsKIAl3cml0ZWwoc3RhdHVzLCBpb21tdS0+bW1pb19iYXNlICsgTU1JT19TVEFUVVNfT0ZGU0VUKTsKIAotCWlmICh1bmxpa2VseShpID09IEVYSVRfTE9PUF9DT1VOVCkpCi0JCXBhbmljKCJBTUQgSU9NTVU6IENvbXBsZXRpb24gd2FpdCBsb29wIGZhaWxlZFxuIik7CisJaWYgKHVubGlrZWx5KGkgPT0gRVhJVF9MT09QX0NPVU5UKSkgeworCQlzcGluX3VubG9jaygmaW9tbXUtPmxvY2spOworCQlyZXNldF9pb21tdV9jb21tYW5kX2J1ZmZlcihpb21tdSk7CisJCXNwaW5fbG9jaygmaW9tbXUtPmxvY2spOworCX0KIH0KIAogLyoKQEAgLTQ0NSw0NyArNDczLDc4IEBACiB9CiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZmx1c2ggdGhlIElPL1RMQiBmb3IgYSBnaXZlbiBwcm90ZWN0aW9uIGRvbWFpbgotICogb24gZXZlcnkgSU9NTVUgaW4gdGhlIHN5c3RlbQorICogVGhpcyBmdW5jdGlvbiBmbHVzaGVzIG9uZSBkb21haW4gb24gb25lIElPTU1VCiAgKi8KLXN0YXRpYyB2b2lkIGlvbW11X2ZsdXNoX2RvbWFpbih1MTYgZG9taWQpCitzdGF0aWMgdm9pZCBmbHVzaF9kb21haW5fb25faW9tbXUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHUxNiBkb21pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwogCXN0cnVjdCBpb21tdV9jbWQgY21kOwotCi0JSU5DX1NUQVRTX0NPVU5URVIoZG9tYWluX2ZsdXNoX2FsbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCV9faW9tbXVfYnVpbGRfaW52X2lvbW11X3BhZ2VzKCZjbWQsIENNRF9JTlZfSU9NTVVfQUxMX1BBR0VTX0FERFJFU1MsCiAJCQkJICAgICAgZG9taWQsIDEsIDEpOwogCi0JZm9yX2VhY2hfaW9tbXUoaW9tbXUpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5sb2NrLCBmbGFncyk7Ci0JCV9faW9tbXVfcXVldWVfY29tbWFuZChpb21tdSwgJmNtZCk7Ci0JCV9faW9tbXVfY29tcGxldGlvbl93YWl0KGlvbW11KTsKLQkJX19pb21tdV93YWl0X2Zvcl9jb21wbGV0aW9uKGlvbW11KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKLQl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CisJX19pb21tdV9xdWV1ZV9jb21tYW5kKGlvbW11LCAmY21kKTsKKwlfX2lvbW11X2NvbXBsZXRpb25fd2FpdChpb21tdSk7CisJX19pb21tdV93YWl0X2Zvcl9jb21wbGV0aW9uKGlvbW11KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwogfQogCi12b2lkIGFtZF9pb21tdV9mbHVzaF9hbGxfZG9tYWlucyh2b2lkKQorc3RhdGljIHZvaWQgZmx1c2hfYWxsX2RvbWFpbnNfb25faW9tbXUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAxOyBpIDwgTUFYX0RPTUFJTl9JRDsgKytpKSB7CiAJCWlmICghdGVzdF9iaXQoaSwgYW1kX2lvbW11X3BkX2FsbG9jX2JpdG1hcCkpCiAJCQljb250aW51ZTsKLQkJaW9tbXVfZmx1c2hfZG9tYWluKGkpOworCQlmbHVzaF9kb21haW5fb25faW9tbXUoaW9tbXUsIGkpOworCX0KKworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGZsdXNoIHRoZSBJTy9UTEIgZm9yIGEgZ2l2ZW4gcHJvdGVjdGlvbiBkb21haW4KKyAqIG9uIGV2ZXJ5IElPTU1VIGluIHRoZSBzeXN0ZW0KKyAqLworc3RhdGljIHZvaWQgaW9tbXVfZmx1c2hfZG9tYWluKHUxNiBkb21pZCkKK3sKKwlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKKworCUlOQ19TVEFUU19DT1VOVEVSKGRvbWFpbl9mbHVzaF9hbGwpOworCisJZm9yX2VhY2hfaW9tbXUoaW9tbXUpCisJCWZsdXNoX2RvbWFpbl9vbl9pb21tdShpb21tdSwgZG9taWQpOworfQorCit2b2lkIGFtZF9pb21tdV9mbHVzaF9hbGxfZG9tYWlucyh2b2lkKQoreworCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OworCisJZm9yX2VhY2hfaW9tbXUoaW9tbXUpCisJCWZsdXNoX2FsbF9kb21haW5zX29uX2lvbW11KGlvbW11KTsKK30KKworc3RhdGljIHZvaWQgZmx1c2hfYWxsX2RldmljZXNfZm9yX2lvbW11KHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8PSBhbWRfaW9tbXVfbGFzdF9iZGY7ICsraSkgeworCQlpZiAoaW9tbXUgIT0gYW1kX2lvbW11X3Jsb29rdXBfdGFibGVbaV0pCisJCQljb250aW51ZTsKKworCQlpb21tdV9xdWV1ZV9pbnZfZGV2X2VudHJ5KGlvbW11LCBpKTsKKwkJaW9tbXVfY29tcGxldGlvbl93YWl0KGlvbW11KTsKIAl9CiB9CiAKLXZvaWQgYW1kX2lvbW11X2ZsdXNoX2FsbF9kZXZpY2VzKHZvaWQpCitzdGF0aWMgdm9pZCBmbHVzaF9kZXZpY2VzX2J5X2RvbWFpbihzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKIHsKIAlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPD0gYW1kX2lvbW11X2xhc3RfYmRmOyArK2kpIHsKLQkJaWYgKGFtZF9pb21tdV9wZF90YWJsZVtpXSA9PSBOVUxMKQorCQlpZiAoKGRvbWFpbiA9PSBOVUxMICYmIGFtZF9pb21tdV9wZF90YWJsZVtpXSA9PSBOVUxMKSB8fAorCQkgICAgKGFtZF9pb21tdV9wZF90YWJsZVtpXSAhPSBkb21haW4pKQogCQkJY29udGludWU7CiAKIAkJaW9tbXUgPSBhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtpXTsKQEAgLTQ5Nyw2ICs1NTYsMjcgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHJlc2V0X2lvbW11X2NvbW1hbmRfYnVmZmVyKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQoreworCXByX2VycigiQU1ELVZpOiBSZXNldHRpbmcgSU9NTVUgY29tbWFuZCBidWZmZXJcbiIpOworCisJaWYgKGlvbW11LT5yZXNldF9pbl9wcm9ncmVzcykKKwkJcGFuaWMoIkFNRC1WaTogSUxMRUdBTF9DT01NQU5EX0VSUk9SIHdoaWxlIHJlc2V0dGluZyBjb21tYW5kIGJ1ZmZlclxuIik7CisKKwlpb21tdS0+cmVzZXRfaW5fcHJvZ3Jlc3MgPSB0cnVlOworCisJYW1kX2lvbW11X3Jlc2V0X2NtZF9idWZmZXIoaW9tbXUpOworCWZsdXNoX2FsbF9kZXZpY2VzX2Zvcl9pb21tdShpb21tdSk7CisJZmx1c2hfYWxsX2RvbWFpbnNfb25faW9tbXUoaW9tbXUpOworCisJaW9tbXUtPnJlc2V0X2luX3Byb2dyZXNzID0gZmFsc2U7Cit9CisKK3ZvaWQgYW1kX2lvbW11X2ZsdXNoX2FsbF9kZXZpY2VzKHZvaWQpCit7CisJZmx1c2hfZGV2aWNlc19ieV9kb21haW4oTlVMTCk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgdXNlZCB0aGUgY3JlYXRlIHRoZSBwYWdlIHRhYmxlIG1hcHBpbmdzIGZvcgpAQCAtNTE0LDE4ICs1OTQsMjEgQEAKIHN0YXRpYyBpbnQgaW9tbXVfbWFwX3BhZ2Uoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb20sCiAJCQkgIHVuc2lnbmVkIGxvbmcgYnVzX2FkZHIsCiAJCQkgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAotCQkJICBpbnQgcHJvdCkKKwkJCSAgaW50IHByb3QsCisJCQkgIGludCBtYXBfc2l6ZSkKIHsKIAl1NjQgX19wdGUsICpwdGU7CiAKIAlidXNfYWRkciAgPSBQQUdFX0FMSUdOKGJ1c19hZGRyKTsKIAlwaHlzX2FkZHIgPSBQQUdFX0FMSUdOKHBoeXNfYWRkcik7CiAKLQkvKiBvbmx5IHN1cHBvcnQgNTEyR0IgYWRkcmVzcyBzcGFjZXMgZm9yIG5vdyAqLwotCWlmIChidXNfYWRkciA+IElPTU1VX01BUF9TSVpFX0wzIHx8ICEocHJvdCAmIElPTU1VX1BST1RfTUFTSykpCisJQlVHX09OKCFQTV9BTElHTkVEKG1hcF9zaXplLCBidXNfYWRkcikpOworCUJVR19PTighUE1fQUxJR05FRChtYXBfc2l6ZSwgcGh5c19hZGRyKSk7CisKKwlpZiAoIShwcm90ICYgSU9NTVVfUFJPVF9NQVNLKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwdGUgPSBhbGxvY19wdGUoZG9tLCBidXNfYWRkciwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcHRlID0gYWxsb2NfcHRlKGRvbSwgYnVzX2FkZHIsIG1hcF9zaXplLCBOVUxMLCBHRlBfS0VSTkVMKTsKIAogCWlmIChJT01NVV9QVEVfUFJFU0VOVCgqcHRlKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTUzOCwyOSArNjIxLDE4IEBACiAKIAkqcHRlID0gX19wdGU7CiAKKwl1cGRhdGVfZG9tYWluKGRvbSk7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaW9tbXVfdW5tYXBfcGFnZShzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbSwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBidXNfYWRkcikKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBidXNfYWRkciwgaW50IG1hcF9zaXplKQogewotCXU2NCAqcHRlOworCXU2NCAqcHRlID0gZmV0Y2hfcHRlKGRvbSwgYnVzX2FkZHIsIG1hcF9zaXplKTsKIAotCXB0ZSA9ICZkb20tPnB0X3Jvb3RbSU9NTVVfUFRFX0wyX0lOREVYKGJ1c19hZGRyKV07Ci0KLQlpZiAoIUlPTU1VX1BURV9QUkVTRU5UKCpwdGUpKQotCQlyZXR1cm47Ci0KLQlwdGUgPSBJT01NVV9QVEVfUEFHRSgqcHRlKTsKLQlwdGUgPSAmcHRlW0lPTU1VX1BURV9MMV9JTkRFWChidXNfYWRkcildOwotCi0JaWYgKCFJT01NVV9QVEVfUFJFU0VOVCgqcHRlKSkKLQkJcmV0dXJuOwotCi0JcHRlID0gSU9NTVVfUFRFX1BBR0UoKnB0ZSk7Ci0JcHRlID0gJnB0ZVtJT01NVV9QVEVfTDFfSU5ERVgoYnVzX2FkZHIpXTsKLQotCSpwdGUgPSAwOworCWlmIChwdGUpCisJCSpwdGUgPSAwOwogfQogCiAvKgpAQCAtNjE1LDcgKzY4Nyw4IEBACiAKIAlmb3IgKGFkZHIgPSBlLT5hZGRyZXNzX3N0YXJ0OyBhZGRyIDwgZS0+YWRkcmVzc19lbmQ7CiAJICAgICBhZGRyICs9IFBBR0VfU0laRSkgewotCQlyZXQgPSBpb21tdV9tYXBfcGFnZSgmZG1hX2RvbS0+ZG9tYWluLCBhZGRyLCBhZGRyLCBlLT5wcm90KTsKKwkJcmV0ID0gaW9tbXVfbWFwX3BhZ2UoJmRtYV9kb20tPmRvbWFpbiwgYWRkciwgYWRkciwgZS0+cHJvdCwKKwkJCQkgICAgIFBNX01BUF80ayk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQkvKgpAQCAtNjcwLDI0ICs3NDMsMjkgQEAKICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZXJlIGlzIGEgUFRFIGZvciBhIGdpdmVuIGRtYSBhZGRyZXNzLiBJZgogICogdGhlcmUgaXMgb25lLCBpdCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIGl0LgogICovCi1zdGF0aWMgdTY0KiBmZXRjaF9wdGUoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4sCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3N0YXRpYyB1NjQgKmZldGNoX3B0ZShzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbiwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgbWFwX3NpemUpCiB7CisJaW50IGxldmVsOwogCXU2NCAqcHRlOwogCi0JcHRlID0gJmRvbWFpbi0+cHRfcm9vdFtJT01NVV9QVEVfTDJfSU5ERVgoYWRkcmVzcyldOworCWxldmVsID0gIGRvbWFpbi0+bW9kZSAtIDE7CisJcHRlICAgPSAmZG9tYWluLT5wdF9yb290W1BNX0xFVkVMX0lOREVYKGxldmVsLCBhZGRyZXNzKV07CiAKLQlpZiAoIUlPTU1VX1BURV9QUkVTRU5UKCpwdGUpKQotCQlyZXR1cm4gTlVMTDsKKwl3aGlsZSAobGV2ZWwgPiBtYXBfc2l6ZSkgeworCQlpZiAoIUlPTU1VX1BURV9QUkVTRU5UKCpwdGUpKQorCQkJcmV0dXJuIE5VTEw7CiAKLQlwdGUgPSBJT01NVV9QVEVfUEFHRSgqcHRlKTsKLQlwdGUgPSAmcHRlW0lPTU1VX1BURV9MMV9JTkRFWChhZGRyZXNzKV07CisJCWxldmVsIC09IDE7CiAKLQlpZiAoIUlPTU1VX1BURV9QUkVTRU5UKCpwdGUpKQotCQlyZXR1cm4gTlVMTDsKKwkJcHRlID0gSU9NTVVfUFRFX1BBR0UoKnB0ZSk7CisJCXB0ZSA9ICZwdGVbUE1fTEVWRUxfSU5ERVgobGV2ZWwsIGFkZHJlc3MpXTsKIAotCXB0ZSA9IElPTU1VX1BURV9QQUdFKCpwdGUpOwotCXB0ZSA9ICZwdGVbSU9NTVVfUFRFX0wwX0lOREVYKGFkZHJlc3MpXTsKKwkJaWYgKChQTV9QVEVfTEVWRUwoKnB0ZSkgPT0gMCkgJiYgbGV2ZWwgIT0gbWFwX3NpemUpIHsKKwkJCXB0ZSA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCX0KIAogCXJldHVybiBwdGU7CiB9CkBAIC03MjcsNyArODA1LDcgQEAKIAkJdTY0ICpwdGUsICpwdGVfcGFnZTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3B0ZXM7ICsraSkgewotCQkJcHRlID0gYWxsb2NfcHRlKCZkbWFfZG9tLT5kb21haW4sIGFkZHJlc3MsCisJCQlwdGUgPSBhbGxvY19wdGUoJmRtYV9kb20tPmRvbWFpbiwgYWRkcmVzcywgUE1fTUFQXzRrLAogCQkJCQkmcHRlX3BhZ2UsIGdmcCk7CiAJCQlpZiAoIXB0ZSkKIAkJCQlnb3RvIG91dF9mcmVlOwpAQCAtNzYwLDE2ICs4MzgsMjAgQEAKIAlmb3IgKGkgPSBkbWFfZG9tLT5hcGVydHVyZVtpbmRleF0tPm9mZnNldDsKIAkgICAgIGkgPCBkbWFfZG9tLT5hcGVydHVyZV9zaXplOwogCSAgICAgaSArPSBQQUdFX1NJWkUpIHsKLQkJdTY0ICpwdGUgPSBmZXRjaF9wdGUoJmRtYV9kb20tPmRvbWFpbiwgaSk7CisJCXU2NCAqcHRlID0gZmV0Y2hfcHRlKCZkbWFfZG9tLT5kb21haW4sIGksIFBNX01BUF80ayk7CiAJCWlmICghcHRlIHx8ICFJT01NVV9QVEVfUFJFU0VOVCgqcHRlKSkKIAkJCWNvbnRpbnVlOwogCiAJCWRtYV9vcHNfcmVzZXJ2ZV9hZGRyZXNzZXMoZG1hX2RvbSwgaSA8PCBQQUdFX1NISUZULCAxKTsKIAl9CiAKKwl1cGRhdGVfZG9tYWluKCZkbWFfZG9tLT5kb21haW4pOworCiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlOgorCXVwZGF0ZV9kb21haW4oJmRtYV9kb20tPmRvbWFpbik7CisKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZG1hX2RvbS0+YXBlcnR1cmVbaW5kZXhdLT5iaXRtYXApOwogCiAJa2ZyZWUoZG1hX2RvbS0+YXBlcnR1cmVbaW5kZXhdKTsKQEAgLTEwMDksNyArMTA5MSw3IEBACiAJZG1hX2RvbS0+ZG9tYWluLmlkID0gZG9tYWluX2lkX2FsbG9jKCk7CiAJaWYgKGRtYV9kb20tPmRvbWFpbi5pZCA9PSAwKQogCQlnb3RvIGZyZWVfZG1hX2RvbTsKLQlkbWFfZG9tLT5kb21haW4ubW9kZSA9IFBBR0VfTU9ERV8zX0xFVkVMOworCWRtYV9kb20tPmRvbWFpbi5tb2RlID0gUEFHRV9NT0RFXzJfTEVWRUw7CiAJZG1hX2RvbS0+ZG9tYWluLnB0X3Jvb3QgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlkbWFfZG9tLT5kb21haW4uZmxhZ3MgPSBQRF9ETUFfT1BTX01BU0s7CiAJZG1hX2RvbS0+ZG9tYWluLnByaXYgPSBkbWFfZG9tOwpAQCAtMTA2Myw2ICsxMTQ1LDQxIEBACiAJcmV0dXJuIGRvbTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X2R0ZV9lbnRyeSh1MTYgZGV2aWQsIHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluKQoreworCXU2NCBwdGVfcm9vdCA9IHZpcnRfdG9fcGh5cyhkb21haW4tPnB0X3Jvb3QpOworCisJcHRlX3Jvb3QgfD0gKGRvbWFpbi0+bW9kZSAmIERFVl9FTlRSWV9NT0RFX01BU0spCisJCSAgICA8PCBERVZfRU5UUllfTU9ERV9TSElGVDsKKwlwdGVfcm9vdCB8PSBJT01NVV9QVEVfSVIgfCBJT01NVV9QVEVfSVcgfCBJT01NVV9QVEVfUCB8IElPTU1VX1BURV9UVjsKKworCWFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLmRhdGFbMl0gPSBkb21haW4tPmlkOworCWFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLmRhdGFbMV0gPSB1cHBlcl8zMl9iaXRzKHB0ZV9yb290KTsKKwlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzBdID0gbG93ZXJfMzJfYml0cyhwdGVfcm9vdCk7CisKKwlhbWRfaW9tbXVfcGRfdGFibGVbZGV2aWRdID0gZG9tYWluOworfQorCisvKgorICogSWYgYSBkZXZpY2UgaXMgbm90IHlldCBhc3NvY2lhdGVkIHdpdGggYSBkb21haW4sIHRoaXMgZnVuY3Rpb24gZG9lcworICogYXNzaWducyBpdCB2aXNpYmxlIGZvciB0aGUgaGFyZHdhcmUKKyAqLworc3RhdGljIHZvaWQgX19hdHRhY2hfZGV2aWNlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LAorCQkJICAgIHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluLAorCQkJICAgIHUxNiBkZXZpZCkKK3sKKwkvKiBsb2NrIGRvbWFpbiAqLworCXNwaW5fbG9jaygmZG9tYWluLT5sb2NrKTsKKworCS8qIHVwZGF0ZSBEVEUgZW50cnkgKi8KKwlzZXRfZHRlX2VudHJ5KGRldmlkLCBkb21haW4pOworCisJZG9tYWluLT5kZXZfY250ICs9IDE7CisKKwkvKiByZWFkeSAqLworCXNwaW5fdW5sb2NrKCZkb21haW4tPmxvY2spOworfQorCiAvKgogICogSWYgYSBkZXZpY2UgaXMgbm90IHlldCBhc3NvY2lhdGVkIHdpdGggYSBkb21haW4sIHRoaXMgZnVuY3Rpb24gZG9lcwogICogYXNzaWducyBpdCB2aXNpYmxlIGZvciB0aGUgaGFyZHdhcmUKQEAgLTEwNzIsMjcgKzExODksMTYgQEAKIAkJCSAgdTE2IGRldmlkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTY0IHB0ZV9yb290ID0gdmlydF90b19waHlzKGRvbWFpbi0+cHRfcm9vdCk7Ci0KLQlkb21haW4tPmRldl9jbnQgKz0gMTsKLQotCXB0ZV9yb290IHw9IChkb21haW4tPm1vZGUgJiBERVZfRU5UUllfTU9ERV9NQVNLKQotCQkgICAgPDwgREVWX0VOVFJZX01PREVfU0hJRlQ7Ci0JcHRlX3Jvb3QgfD0gSU9NTVVfUFRFX0lSIHwgSU9NTVVfUFRFX0lXIHwgSU9NTVVfUFRFX1AgfCBJT01NVV9QVEVfVFY7CiAKIAl3cml0ZV9sb2NrX2lycXNhdmUoJmFtZF9pb21tdV9kZXZ0YWJsZV9sb2NrLCBmbGFncyk7Ci0JYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVswXSA9IGxvd2VyXzMyX2JpdHMocHRlX3Jvb3QpOwotCWFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLmRhdGFbMV0gPSB1cHBlcl8zMl9iaXRzKHB0ZV9yb290KTsKLQlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzJdID0gZG9tYWluLT5pZDsKLQotCWFtZF9pb21tdV9wZF90YWJsZVtkZXZpZF0gPSBkb21haW47CisJX19hdHRhY2hfZGV2aWNlKGlvbW11LCBkb21haW4sIGRldmlkKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2lvbW11X2RldnRhYmxlX2xvY2ssIGZsYWdzKTsKIAotICAgICAgIC8qCi0gICAgICAgICogV2UgbWlnaHQgYm9vdCBpbnRvIGEgY3Jhc2gta2VybmVsIGhlcmUuIFRoZSBjcmFzaGVkIGtlcm5lbAotICAgICAgICAqIGxlZnQgdGhlIGNhY2hlcyBpbiB0aGUgSU9NTVUgZGlydHkuIFNvIHdlIGhhdmUgdG8gZmx1c2gKLSAgICAgICAgKiBoZXJlIHRvIGV2aWN0IGFsbCBkaXJ0eSBzdHVmZi4KLSAgICAgICAgKi8KKwkvKgorCSAqIFdlIG1pZ2h0IGJvb3QgaW50byBhIGNyYXNoLWtlcm5lbCBoZXJlLiBUaGUgY3Jhc2hlZCBrZXJuZWwKKwkgKiBsZWZ0IHRoZSBjYWNoZXMgaW4gdGhlIElPTU1VIGRpcnR5LiBTbyB3ZSBoYXZlIHRvIGZsdXNoCisJICogaGVyZSB0byBldmljdCBhbGwgZGlydHkgc3R1ZmYuCisJICovCiAJaW9tbXVfcXVldWVfaW52X2Rldl9lbnRyeShpb21tdSwgZGV2aWQpOwogCWlvbW11X2ZsdXNoX3RsYl9wZGUoaW9tbXUsIGRvbWFpbi0+aWQpOwogfQpAQCAtMTExOSw2ICsxMjI1LDE1IEBACiAKIAkvKiByZWFkeSAqLwogCXNwaW5fdW5sb2NrKCZkb21haW4tPmxvY2spOworCisJLyoKKwkgKiBJZiB3ZSBydW4gaW4gcGFzc3Rocm91Z2ggbW9kZSB0aGUgZGV2aWNlIG11c3QgYmUgYXNzaWduZWQgdG8gdGhlCisJICogcGFzc3Rocm91Z2ggZG9tYWluIGlmIGl0IGlzIGRldGFjaGVkIGZyb20gYW55IG90aGVyIGRvbWFpbgorCSAqLworCWlmIChpb21tdV9wYXNzX3Rocm91Z2gpIHsKKwkJc3RydWN0IGFtZF9pb21tdSAqaW9tbXUgPSBhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF07CisJCV9fYXR0YWNoX2RldmljZShpb21tdSwgcHRfZG9tYWluLCBkZXZpZCk7CisJfQogfQogCiAvKgpAQCAtMTE2NCw2ICsxMjc5LDggQEAKIAljYXNlIEJVU19OT1RJRllfVU5CT1VORF9EUklWRVI6CiAJCWlmICghZG9tYWluKQogCQkJZ290byBvdXQ7CisJCWlmIChpb21tdV9wYXNzX3Rocm91Z2gpCisJCQlicmVhazsKIAkJZGV0YWNoX2RldmljZShkb21haW4sIGRldmlkKTsKIAkJYnJlYWs7CiAJY2FzZSBCVVNfTk9USUZZX0FERF9ERVZJQ0U6CkBAIC0xMjkyLDQwICsxNDA5LDkyIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIHVwZGF0ZV9kZXZpY2VfdGFibGUoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPD0gYW1kX2lvbW11X2xhc3RfYmRmOyArK2kpIHsKKwkJaWYgKGFtZF9pb21tdV9wZF90YWJsZVtpXSAhPSBkb21haW4pCisJCQljb250aW51ZTsKKwkJd3JpdGVfbG9ja19pcnFzYXZlKCZhbWRfaW9tbXVfZGV2dGFibGVfbG9jaywgZmxhZ3MpOworCQlzZXRfZHRlX2VudHJ5KGksIGRvbWFpbik7CisJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhbWRfaW9tbXVfZGV2dGFibGVfbG9jaywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2RvbWFpbihzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKK3sKKwlpZiAoIWRvbWFpbi0+dXBkYXRlZCkKKwkJcmV0dXJuOworCisJdXBkYXRlX2RldmljZV90YWJsZShkb21haW4pOworCWZsdXNoX2RldmljZXNfYnlfZG9tYWluKGRvbWFpbik7CisJaW9tbXVfZmx1c2hfZG9tYWluKGRvbWFpbi0+aWQpOworCisJZG9tYWluLT51cGRhdGVkID0gZmFsc2U7Cit9CisKIC8qCi0gKiBJZiB0aGUgcHRlX3BhZ2UgaXMgbm90IHlldCBhbGxvY2F0ZWQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBhZGQgYW5vdGhlciBsZXZlbCB0byBhbiBJTyBwYWdlIHRhYmxlLiBBZGRpbmcKKyAqIGFub3RoZXIgbGV2ZWwgaW5jcmVhc2VzIHRoZSBzaXplIG9mIHRoZSBhZGRyZXNzIHNwYWNlIGJ5IDkgYml0cyB0byBhIHNpemUgdXAKKyAqIHRvIDY0IGJpdHMuCiAgKi8KLXN0YXRpYyB1NjQqIGFsbG9jX3B0ZShzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbSwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1NjQgKipwdGVfcGFnZSwgZ2ZwX3QgZ2ZwKQorc3RhdGljIGJvb2wgaW5jcmVhc2VfYWRkcmVzc19zcGFjZShzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbiwKKwkJCQkgICBnZnBfdCBnZnApCit7CisJdTY0ICpwdGU7CisKKwlpZiAoZG9tYWluLT5tb2RlID09IFBBR0VfTU9ERV82X0xFVkVMKQorCQkvKiBhZGRyZXNzIHNwYWNlIGFscmVhZHkgNjQgYml0IGxhcmdlICovCisJCXJldHVybiBmYWxzZTsKKworCXB0ZSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKGdmcCk7CisJaWYgKCFwdGUpCisJCXJldHVybiBmYWxzZTsKKworCSpwdGUgICAgICAgICAgICAgPSBQTV9MRVZFTF9QREUoZG9tYWluLT5tb2RlLAorCQkJCQl2aXJ0X3RvX3BoeXMoZG9tYWluLT5wdF9yb290KSk7CisJZG9tYWluLT5wdF9yb290ICA9IHB0ZTsKKwlkb21haW4tPm1vZGUgICAgKz0gMTsKKwlkb21haW4tPnVwZGF0ZWQgID0gdHJ1ZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdTY0ICphbGxvY19wdGUoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4sCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJICAgICAgaW50IGVuZF9sdmwsCisJCSAgICAgIHU2NCAqKnB0ZV9wYWdlLAorCQkgICAgICBnZnBfdCBnZnApCiB7CiAJdTY0ICpwdGUsICpwYWdlOworCWludCBsZXZlbDsKIAotCXB0ZSA9ICZkb20tPnB0X3Jvb3RbSU9NTVVfUFRFX0wyX0lOREVYKGFkZHJlc3MpXTsKKwl3aGlsZSAoYWRkcmVzcyA+IFBNX0xFVkVMX1NJWkUoZG9tYWluLT5tb2RlKSkKKwkJaW5jcmVhc2VfYWRkcmVzc19zcGFjZShkb21haW4sIGdmcCk7CiAKLQlpZiAoIUlPTU1VX1BURV9QUkVTRU5UKCpwdGUpKSB7Ci0JCXBhZ2UgPSAodTY0ICopZ2V0X3plcm9lZF9wYWdlKGdmcCk7Ci0JCWlmICghcGFnZSkKLQkJCXJldHVybiBOVUxMOwotCQkqcHRlID0gSU9NTVVfTDJfUERFKHZpcnRfdG9fcGh5cyhwYWdlKSk7CisJbGV2ZWwgPSAgZG9tYWluLT5tb2RlIC0gMTsKKwlwdGUgICA9ICZkb21haW4tPnB0X3Jvb3RbUE1fTEVWRUxfSU5ERVgobGV2ZWwsIGFkZHJlc3MpXTsKKworCXdoaWxlIChsZXZlbCA+IGVuZF9sdmwpIHsKKwkJaWYgKCFJT01NVV9QVEVfUFJFU0VOVCgqcHRlKSkgeworCQkJcGFnZSA9ICh1NjQgKilnZXRfemVyb2VkX3BhZ2UoZ2ZwKTsKKwkJCWlmICghcGFnZSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCSpwdGUgPSBQTV9MRVZFTF9QREUobGV2ZWwsIHZpcnRfdG9fcGh5cyhwYWdlKSk7CisJCX0KKworCQlsZXZlbCAtPSAxOworCisJCXB0ZSA9IElPTU1VX1BURV9QQUdFKCpwdGUpOworCisJCWlmIChwdGVfcGFnZSAmJiBsZXZlbCA9PSBlbmRfbHZsKQorCQkJKnB0ZV9wYWdlID0gcHRlOworCisJCXB0ZSA9ICZwdGVbUE1fTEVWRUxfSU5ERVgobGV2ZWwsIGFkZHJlc3MpXTsKIAl9CiAKLQlwdGUgPSBJT01NVV9QVEVfUEFHRSgqcHRlKTsKLQlwdGUgPSAmcHRlW0lPTU1VX1BURV9MMV9JTkRFWChhZGRyZXNzKV07Ci0KLQlpZiAoIUlPTU1VX1BURV9QUkVTRU5UKCpwdGUpKSB7Ci0JCXBhZ2UgPSAodTY0ICopZ2V0X3plcm9lZF9wYWdlKGdmcCk7Ci0JCWlmICghcGFnZSkKLQkJCXJldHVybiBOVUxMOwotCQkqcHRlID0gSU9NTVVfTDFfUERFKHZpcnRfdG9fcGh5cyhwYWdlKSk7Ci0JfQotCi0JcHRlID0gSU9NTVVfUFRFX1BBR0UoKnB0ZSk7Ci0KLQlpZiAocHRlX3BhZ2UpCi0JCSpwdGVfcGFnZSA9IHB0ZTsKLQotCXB0ZSA9ICZwdGVbSU9NTVVfUFRFX0wwX0lOREVYKGFkZHJlc3MpXTsKLQogCXJldHVybiBwdGU7CiB9CiAKQEAgLTEzNDQsMTAgKzE1MTMsMTMgQEAKIAogCXB0ZSA9IGFwZXJ0dXJlLT5wdGVfcGFnZXNbQVBFUlRVUkVfUEFHRV9JTkRFWChhZGRyZXNzKV07CiAJaWYgKCFwdGUpIHsKLQkJcHRlID0gYWxsb2NfcHRlKCZkb20tPmRvbWFpbiwgYWRkcmVzcywgJnB0ZV9wYWdlLCBHRlBfQVRPTUlDKTsKKwkJcHRlID0gYWxsb2NfcHRlKCZkb20tPmRvbWFpbiwgYWRkcmVzcywgUE1fTUFQXzRrLCAmcHRlX3BhZ2UsCisJCQkJR0ZQX0FUT01JQyk7CiAJCWFwZXJ0dXJlLT5wdGVfcGFnZXNbQVBFUlRVUkVfUEFHRV9JTkRFWChhZGRyZXNzKV0gPSBwdGVfcGFnZTsKIAl9IGVsc2UKLQkJcHRlICs9IElPTU1VX1BURV9MMF9JTkRFWChhZGRyZXNzKTsKKwkJcHRlICs9IFBNX0xFVkVMX0lOREVYKDAsIGFkZHJlc3MpOworCisJdXBkYXRlX2RvbWFpbigmZG9tLT5kb21haW4pOwogCiAJcmV0dXJuIHB0ZTsKIH0KQEAgLTE0MDksNyArMTU4MSw3IEBACiAJaWYgKCFwdGUpCiAJCXJldHVybjsKIAotCXB0ZSArPSBJT01NVV9QVEVfTDBfSU5ERVgoYWRkcmVzcyk7CisJcHRlICs9IFBNX0xFVkVMX0lOREVYKDAsIGFkZHJlc3MpOwogCiAJV0FSTl9PTighKnB0ZSk7CiAKQEAgLTE5ODgsMTkgKzIxNjAsNDcgQEAKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2lvbW11X2RldnRhYmxlX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBhbWRfaW9tbXVfZG9tYWluX2luaXQoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tKQorc3RhdGljIHZvaWQgcHJvdGVjdGlvbl9kb21haW5fZnJlZShzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKK3sKKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuOworCisJaWYgKGRvbWFpbi0+aWQpCisJCWRvbWFpbl9pZF9mcmVlKGRvbWFpbi0+aWQpOworCisJa2ZyZWUoZG9tYWluKTsKK30KKworc3RhdGljIHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqcHJvdGVjdGlvbl9kb21haW5fYWxsb2Modm9pZCkKIHsKIAlzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbjsKIAogCWRvbWFpbiA9IGt6YWxsb2Moc2l6ZW9mKCpkb21haW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRvbWFpbikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCiAJc3Bpbl9sb2NrX2luaXQoJmRvbWFpbi0+bG9jayk7Ci0JZG9tYWluLT5tb2RlID0gUEFHRV9NT0RFXzNfTEVWRUw7CiAJZG9tYWluLT5pZCA9IGRvbWFpbl9pZF9hbGxvYygpOwogCWlmICghZG9tYWluLT5pZCkKKwkJZ290byBvdXRfZXJyOworCisJcmV0dXJuIGRvbWFpbjsKKworb3V0X2VycjoKKwlrZnJlZShkb21haW4pOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgYW1kX2lvbW11X2RvbWFpbl9pbml0KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbSkKK3sKKwlzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbjsKKworCWRvbWFpbiA9IHByb3RlY3Rpb25fZG9tYWluX2FsbG9jKCk7CisJaWYgKCFkb21haW4pCiAJCWdvdG8gb3V0X2ZyZWU7CisKKwlkb21haW4tPm1vZGUgICAgPSBQQUdFX01PREVfM19MRVZFTDsKIAlkb21haW4tPnB0X3Jvb3QgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWRvbWFpbi0+cHRfcm9vdCkKIAkJZ290byBvdXRfZnJlZTsKQEAgLTIwMTAsNyArMjIxMCw3IEBACiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlOgotCWtmcmVlKGRvbWFpbik7CisJcHJvdGVjdGlvbl9kb21haW5fZnJlZShkb21haW4pOwogCiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC0yMTE1LDcgKzIzMTUsNyBAQAogCXBhZGRyICY9IFBBR0VfTUFTSzsKIAogCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7ICsraSkgewotCQlyZXQgPSBpb21tdV9tYXBfcGFnZShkb21haW4sIGlvdmEsIHBhZGRyLCBwcm90KTsKKwkJcmV0ID0gaW9tbXVfbWFwX3BhZ2UoZG9tYWluLCBpb3ZhLCBwYWRkciwgcHJvdCwgUE1fTUFQXzRrKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKQEAgLTIxMzYsNyArMjMzNiw3IEBACiAJaW92YSAgJj0gUEFHRV9NQVNLOwogCiAJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgKytpKSB7Ci0JCWlvbW11X3VubWFwX3BhZ2UoZG9tYWluLCBpb3ZhKTsKKwkJaW9tbXVfdW5tYXBfcGFnZShkb21haW4sIGlvdmEsIFBNX01BUF80ayk7CiAJCWlvdmEgICs9IFBBR0VfU0laRTsKIAl9CiAKQEAgLTIxNTEsMjEgKzIzNTEsOSBAQAogCXBoeXNfYWRkcl90IHBhZGRyOwogCXU2NCAqcHRlOwogCi0JcHRlID0gJmRvbWFpbi0+cHRfcm9vdFtJT01NVV9QVEVfTDJfSU5ERVgoaW92YSldOworCXB0ZSA9IGZldGNoX3B0ZShkb21haW4sIGlvdmEsIFBNX01BUF80ayk7CiAKLQlpZiAoIUlPTU1VX1BURV9QUkVTRU5UKCpwdGUpKQotCQlyZXR1cm4gMDsKLQotCXB0ZSA9IElPTU1VX1BURV9QQUdFKCpwdGUpOwotCXB0ZSA9ICZwdGVbSU9NTVVfUFRFX0wxX0lOREVYKGlvdmEpXTsKLQotCWlmICghSU9NTVVfUFRFX1BSRVNFTlQoKnB0ZSkpCi0JCXJldHVybiAwOwotCi0JcHRlID0gSU9NTVVfUFRFX1BBR0UoKnB0ZSk7Ci0JcHRlID0gJnB0ZVtJT01NVV9QVEVfTDBfSU5ERVgoaW92YSldOwotCi0JaWYgKCFJT01NVV9QVEVfUFJFU0VOVCgqcHRlKSkKKwlpZiAoIXB0ZSB8fCAhSU9NTVVfUFRFX1BSRVNFTlQoKnB0ZSkpCiAJCXJldHVybiAwOwogCiAJcGFkZHIgID0gKnB0ZSAmIElPTU1VX1BBR0VfTUFTSzsKQEAgLTIxOTEsMyArMjM3OSw0NiBAQAogCS5kb21haW5faGFzX2NhcCA9IGFtZF9pb21tdV9kb21haW5faGFzX2NhcCwKIH07CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoZSBuZXh0IGZ1bmN0aW9ucyBkbyBhIGJhc2ljIGluaXRpYWxpemF0aW9uIG9mIElPTU1VIGZvciBwYXNzIHRocm91Z2gKKyAqIG1vZGUKKyAqCisgKiBJbiBwYXNzdGhyb3VnaCBtb2RlIHRoZSBJT01NVSBpcyBpbml0aWFsaXplZCBhbmQgZW5hYmxlZCBidXQgbm90IHVzZWQgZm9yCisgKiBETUEtQVBJIHRyYW5zbGF0aW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IF9faW5pdCBhbWRfaW9tbXVfaW5pdF9wYXNzdGhyb3VnaCh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOworCXUxNiBkZXZpZCwgZGV2aWQyOworCisJLyogYWxsb2NhdGUgcGFzc3Rocm91ZyBkb21haW4gKi8KKwlwdF9kb21haW4gPSBwcm90ZWN0aW9uX2RvbWFpbl9hbGxvYygpOworCWlmICghcHRfZG9tYWluKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXB0X2RvbWFpbi0+bW9kZSB8PSBQQUdFX01PREVfTk9ORTsKKworCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgeworCQlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKKworCQlkZXZpZCA9IGNhbGNfZGV2aWQoZGV2LT5idXMtPm51bWJlciwgZGV2LT5kZXZmbik7CisJCWlmIChkZXZpZCA+IGFtZF9pb21tdV9sYXN0X2JkZikKKwkJCWNvbnRpbnVlOworCisJCWRldmlkMiA9IGFtZF9pb21tdV9hbGlhc190YWJsZVtkZXZpZF07CisKKwkJaW9tbXUgPSBhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZDJdOworCQlpZiAoIWlvbW11KQorCQkJY29udGludWU7CisKKwkJX19hdHRhY2hfZGV2aWNlKGlvbW11LCBwdF9kb21haW4sIGRldmlkKTsKKwkJX19hdHRhY2hfZGV2aWNlKGlvbW11LCBwdF9kb21haW4sIGRldmlkMik7CisJfQorCisJcHJfaW5mbygiQU1ELVZpOiBJbml0aWFsaXplZCBmb3IgUGFzc3Rocm91Z2ggTW9kZVxuIik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKaW5kZXggYzFiMTdlOS4uYjRiNjFkNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKQEAgLTI1Miw3ICsyNTIsNyBAQAogLyogRnVuY3Rpb24gdG8gZW5hYmxlIHRoZSBoYXJkd2FyZSAqLwogc3RhdGljIHZvaWQgaW9tbXVfZW5hYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQogewotCXByaW50ayhLRVJOX0lORk8gIkFNRCBJT01NVTogRW5hYmxpbmcgSU9NTVUgYXQgJXMgY2FwIDB4JWh4XG4iLAorCXByaW50ayhLRVJOX0lORk8gIkFNRC1WaTogRW5hYmxpbmcgSU9NTVUgYXQgJXMgY2FwIDB4JWh4XG4iLAogCSAgICAgICBkZXZfbmFtZSgmaW9tbXUtPmRldi0+ZGV2KSwgaW9tbXUtPmNhcF9wdHIpOwogCiAJaW9tbXVfZmVhdHVyZV9lbmFibGUoaW9tbXUsIENPTlRST0xfSU9NTVVfRU4pOwpAQCAtNDM1LDYgKzQzNSwyMCBAQAogfQogCiAvKgorICogVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIGNvbW1hbmQgYnVmZmVyIGlmIHRoZSBJT01NVSBzdG9wcGVkIGZldGNoaW5nCisgKiBjb21tYW5kcyBmcm9tIGl0LgorICovCit2b2lkIGFtZF9pb21tdV9yZXNldF9jbWRfYnVmZmVyKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQoreworCWlvbW11X2ZlYXR1cmVfZGlzYWJsZShpb21tdSwgQ09OVFJPTF9DTURCVUZfRU4pOworCisJd3JpdGVsKDB4MDAsIGlvbW11LT5tbWlvX2Jhc2UgKyBNTUlPX0NNRF9IRUFEX09GRlNFVCk7CisJd3JpdGVsKDB4MDAsIGlvbW11LT5tbWlvX2Jhc2UgKyBNTUlPX0NNRF9UQUlMX09GRlNFVCk7CisKKwlpb21tdV9mZWF0dXJlX2VuYWJsZShpb21tdSwgQ09OVFJPTF9DTURCVUZfRU4pOworfQorCisvKgogICogVGhpcyBmdW5jdGlvbiB3cml0ZXMgdGhlIGNvbW1hbmQgYnVmZmVyIGFkZHJlc3MgdG8gdGhlIGhhcmR3YXJlIGFuZAogICogZW5hYmxlcyBpdC4KICAqLwpAQCAtNDUwLDExICs0NjQsNyBAQAogCW1lbWNweV90b2lvKGlvbW11LT5tbWlvX2Jhc2UgKyBNTUlPX0NNRF9CVUZfT0ZGU0VULAogCQkgICAgJmVudHJ5LCBzaXplb2YoZW50cnkpKTsKIAotCS8qIHNldCBoZWFkIGFuZCB0YWlsIHRvIHplcm8gbWFudWFsbHkgKi8KLQl3cml0ZWwoMHgwMCwgaW9tbXUtPm1taW9fYmFzZSArIE1NSU9fQ01EX0hFQURfT0ZGU0VUKTsKLQl3cml0ZWwoMHgwMCwgaW9tbXUtPm1taW9fYmFzZSArIE1NSU9fQ01EX1RBSUxfT0ZGU0VUKTsKLQotCWlvbW11X2ZlYXR1cmVfZW5hYmxlKGlvbW11LCBDT05UUk9MX0NNREJVRl9FTik7CisJYW1kX2lvbW11X3Jlc2V0X2NtZF9idWZmZXIoaW9tbXUpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgZnJlZV9jb21tYW5kX2J1ZmZlcihzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKQEAgLTg1OCw3ICs4NjgsNyBAQAogCQlzd2l0Y2ggKCpwKSB7CiAJCWNhc2UgQUNQSV9JVkhEX1RZUEU6CiAKLQkJCURVTVBfcHJpbnRrKCJJT01NVTogZGV2aWNlOiAlMDJ4OiUwMnguJTAxeCBjYXA6ICUwNHggIgorCQkJRFVNUF9wcmludGsoImRldmljZTogJTAyeDolMDJ4LiUwMXggY2FwOiAlMDR4ICIKIAkJCQkgICAgInNlZzogJWQgZmxhZ3M6ICUwMXggaW5mbyAlMDR4XG4iLAogCQkJCSAgICBQQ0lfQlVTKGgtPmRldmlkKSwgUENJX1NMT1QoaC0+ZGV2aWQpLAogCQkJCSAgICBQQ0lfRlVOQyhoLT5kZXZpZCksIGgtPmNhcF9wdHIsCkBAIC05MDIsNyArOTEyLDcgQEAKIAogCXIgPSByZXF1ZXN0X2lycShpb21tdS0+ZGV2LT5pcnEsIGFtZF9pb21tdV9pbnRfaGFuZGxlciwKIAkJCUlSUUZfU0FNUExFX1JBTkRPTSwKLQkJCSJBTUQgSU9NTVUiLAorCQkJIkFNRC1WaSIsCiAJCQlOVUxMKTsKIAogCWlmIChyKSB7CkBAIC0xMTUwLDcgKzExNjAsNyBAQAogCiAKIAlpZiAobm9faW9tbXUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIElPTU1VIGRpc2FibGVkIGJ5IGtlcm5lbCBjb21tYW5kIGxpbmVcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJBTUQtVmkgZGlzYWJsZWQgYnkga2VybmVsIGNvbW1hbmQgbGluZVxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTI0MiwyMiArMTI1MiwyOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZnJlZTsKIAotCXJldCA9IGFtZF9pb21tdV9pbml0X2RtYV9vcHMoKTsKKwlpZiAoaW9tbXVfcGFzc190aHJvdWdoKQorCQlyZXQgPSBhbWRfaW9tbXVfaW5pdF9wYXNzdGhyb3VnaCgpOworCWVsc2UKKwkJcmV0ID0gYW1kX2lvbW11X2luaXRfZG1hX29wcygpOwogCWlmIChyZXQpCiAJCWdvdG8gZnJlZTsKIAogCWVuYWJsZV9pb21tdXMoKTsKIAotCXByaW50ayhLRVJOX0lORk8gIkFNRCBJT01NVTogZGV2aWNlIGlzb2xhdGlvbiAiKTsKKwlpZiAoaW9tbXVfcGFzc190aHJvdWdoKQorCQlnb3RvIG91dDsKKworCXByaW50ayhLRVJOX0lORk8gIkFNRC1WaTogZGV2aWNlIGlzb2xhdGlvbiAiKTsKIAlpZiAoYW1kX2lvbW11X2lzb2xhdGUpCiAJCXByaW50aygiZW5hYmxlZFxuIik7CiAJZWxzZQogCQlwcmludGsoImRpc2FibGVkXG4iKTsKIAogCWlmIChhbWRfaW9tbXVfdW5tYXBfZmx1c2gpCi0JCXByaW50ayhLRVJOX0lORk8gIkFNRCBJT01NVTogSU8vVExCIGZsdXNoIG9uIHVubWFwIGVuYWJsZWRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJBTUQtVmk6IElPL1RMQiBmbHVzaCBvbiB1bm1hcCBlbmFibGVkXG4iKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX0lORk8gIkFNRCBJT01NVTogTGF6eSBJTy9UTEIgZmx1c2hpbmcgZW5hYmxlZFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gIkFNRC1WaTogTGF6eSBJTy9UTEIgZmx1c2hpbmcgZW5hYmxlZFxuIik7CiAKIG91dDoKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYwppbmRleCA2NzZkZWJmLi4xMjgxMTFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CkBAIC05NCw2ICs5NSwxMSBAQAogCSAqIGNvZGUgZm9yIHNhZmUKIAkgKi8KIAlwID0gX19hbGxvY19ib290bWVtX25vcGFuaWMoYXBlcl9zaXplLCBhcGVyX3NpemUsIDUxMlVMTDw8MjApOworCS8qCisJICogS21lbWxlYWsgc2hvdWxkIG5vdCBzY2FuIHRoaXMgYmxvY2sgYXMgaXQgbWF5IG5vdCBiZSBtYXBwZWQgdmlhIHRoZQorCSAqIGtlcm5lbCBkaXJlY3QgbWFwcGluZy4KKwkgKi8KKwlrbWVtbGVha19pZ25vcmUocCk7CiAJaWYgKCFwIHx8IF9fcGEocCkrYXBlcl9zaXplID4gMHhmZmZmZmZmZikgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJDYW5ub3QgYWxsb2NhdGUgYXBlcnR1cmUgbWVtb3J5IGhvbGUgKCVwLCV1SylcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggMGExYzI4My4uMTU5NzQwZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgPGFzbS9tY2UuaD4KKyNpbmNsdWRlIDxhc20va3ZtX3BhcmEuaD4KIAogdW5zaWduZWQgaW50IG51bV9wcm9jZXNzb3JzOwogCkBAIC0xMzYxLDUyICsxMzYyLDgwIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1g4Nl9YMkFQSUMgKi8KIAotdm9pZCBfX2luaXQgZW5hYmxlX0lSX3gyYXBpYyh2b2lkKQoraW50IF9faW5pdCBlbmFibGVfSVIodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKmlvYXBpY19lbnRyaWVzID0gTlVMTDsKLQotCXJldCA9IGRtYXJfdGFibGVfaW5pdCgpOwotCWlmIChyZXQpIHsKLQkJcHJfZGVidWcoImRtYXJfdGFibGVfaW5pdCgpIGZhaWxlZCB3aXRoICVkOlxuIiwgcmV0KTsKLQkJZ290byBpcl9mYWlsZWQ7Ci0JfQotCiAJaWYgKCFpbnRyX3JlbWFwcGluZ19zdXBwb3J0ZWQoKSkgewogCQlwcl9kZWJ1ZygiaW50ci1yZW1hcHBpbmcgbm90IHN1cHBvcnRlZFxuIik7Ci0JCWdvdG8gaXJfZmFpbGVkOworCQlyZXR1cm4gMDsKIAl9CiAKLQogCWlmICgheDJhcGljX3ByZWVuYWJsZWQgJiYgc2tpcF9pb2FwaWNfc2V0dXApIHsKIAkJcHJfaW5mbygiU2tpcHBlZCBlbmFibGluZyBpbnRyLXJlbWFwIGJlY2F1c2Ugb2Ygc2tpcHBpbmcgIgogCQkJImlvLWFwaWMgc2V0dXBcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAwOwogCX0KIAorCWlmIChlbmFibGVfaW50cl9yZW1hcHBpbmcoeDJhcGljX3N1cHBvcnRlZCgpKSkKKwkJcmV0dXJuIDA7CisKKwlwcl9pbmZvKCJFbmFibGVkIEludGVycnVwdC1yZW1hcHBpbmdcbiIpOworCisJcmV0dXJuIDE7CisKKyNlbmRpZgorCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBlbmFibGVfSVJfeDJhcGljKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKmlvYXBpY19lbnRyaWVzID0gTlVMTDsKKwlpbnQgcmV0LCB4MmFwaWNfZW5hYmxlZCA9IDA7CisJaW50IGRtYXJfdGFibGVfaW5pdF9yZXQgPSAwOworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlkbWFyX3RhYmxlX2luaXRfcmV0ID0gZG1hcl90YWJsZV9pbml0KCk7CisJaWYgKGRtYXJfdGFibGVfaW5pdF9yZXQpCisJCXByX2RlYnVnKCJkbWFyX3RhYmxlX2luaXQoKSBmYWlsZWQgd2l0aCAlZDpcbiIsCisJCQkJZG1hcl90YWJsZV9pbml0X3JldCk7CisjZW5kaWYKKwogCWlvYXBpY19lbnRyaWVzID0gYWxsb2NfaW9hcGljX2VudHJpZXMoKTsKIAlpZiAoIWlvYXBpY19lbnRyaWVzKSB7Ci0JCXByX2luZm8oIkFsbG9jYXRlIGlvYXBpY19lbnRyaWVzIGZhaWxlZDogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZW5kOworCQlwcl9lcnIoIkFsbG9jYXRlIGlvYXBpY19lbnRyaWVzIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OwogCX0KIAogCXJldCA9IHNhdmVfSU9fQVBJQ19zZXR1cChpb2FwaWNfZW50cmllcyk7CiAJaWYgKHJldCkgewogCQlwcl9pbmZvKCJTYXZpbmcgSU8tQVBJQyBzdGF0ZSBmYWlsZWQ6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVuZDsKKwkJZ290byBvdXQ7CiAJfQogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2tfSU9fQVBJQ19zZXR1cChpb2FwaWNfZW50cmllcyk7CiAJbWFza184MjU5QSgpOworCW1hc2tfSU9fQVBJQ19zZXR1cChpb2FwaWNfZW50cmllcyk7CiAKLQlyZXQgPSBlbmFibGVfaW50cl9yZW1hcHBpbmcoeDJhcGljX3N1cHBvcnRlZCgpKTsKLQlpZiAocmV0KQotCQlnb3RvIGVuZF9yZXN0b3JlOworCWlmIChkbWFyX3RhYmxlX2luaXRfcmV0KQorCQlyZXQgPSAwOworCWVsc2UKKwkJcmV0ID0gZW5hYmxlX0lSKCk7CiAKLQlwcl9pbmZvKCJFbmFibGVkIEludGVycnVwdC1yZW1hcHBpbmdcbiIpOworCWlmICghcmV0KSB7CisJCS8qIElSIGlzIHJlcXVpcmVkIGlmIHRoZXJlIGlzIEFQSUMgSUQgPiAyNTUgZXZlbiB3aGVuIHJ1bm5pbmcKKwkJICogdW5kZXIgS1ZNCisJCSAqLworCQlpZiAobWF4X3BoeXNpY2FsX2FwaWNpZCA+IDI1NSB8fCAha3ZtX3BhcmFfYXZhaWxhYmxlKCkpCisJCQlnb3RvIG5veDJhcGljOworCQkvKgorCQkgKiB3aXRob3V0IElSIGFsbCBDUFVzIGNhbiBiZSBhZGRyZXNzZWQgYnkgSU9BUElDL01TSQorCQkgKiBvbmx5IGluIHBoeXNpY2FsIG1vZGUKKwkJICovCisJCXgyYXBpY19mb3JjZV9waHlzKCk7CisJfQorCisJeDJhcGljX2VuYWJsZWQgPSAxOwogCiAJaWYgKHgyYXBpY19zdXBwb3J0ZWQoKSAmJiAheDJhcGljX21vZGUpIHsKIAkJeDJhcGljX21vZGUgPSAxOwpAQCAtMTQxNCw0MSArMTQ0MywyNSBAQAogCQlwcl9pbmZvKCJFbmFibGVkIHgyYXBpY1xuIik7CiAJfQogCi1lbmRfcmVzdG9yZToKLQlpZiAocmV0KQotCQkvKgotCQkgKiBJUiBlbmFibGluZyBmYWlsZWQKLQkJICovCitub3gyYXBpYzoKKwlpZiAoIXJldCkgLyogSVIgZW5hYmxpbmcgZmFpbGVkICovCiAJCXJlc3RvcmVfSU9fQVBJQ19zZXR1cChpb2FwaWNfZW50cmllcyk7Ci0KIAl1bm1hc2tfODI1OUEoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLWVuZDoKK291dDoKIAlpZiAoaW9hcGljX2VudHJpZXMpCiAJCWZyZWVfaW9hcGljX2VudHJpZXMoaW9hcGljX2VudHJpZXMpOwogCi0JaWYgKCFyZXQpCisJaWYgKHgyYXBpY19lbmFibGVkKQogCQlyZXR1cm47CiAKLWlyX2ZhaWxlZDoKIAlpZiAoeDJhcGljX3ByZWVuYWJsZWQpCi0JCXBhbmljKCJ4MmFwaWMgZW5hYmxlZCBieSBiaW9zLiBCdXQgSVIgZW5hYmxpbmcgZmFpbGVkIik7CisJCXBhbmljKCJ4MmFwaWM6IGVuYWJsZWQgYnkgQklPUyBidXQga2VybmVsIGluaXQgZmFpbGVkLiIpOwogCWVsc2UgaWYgKGNwdV9oYXNfeDJhcGljKQotCQlwcl9pbmZvKCJOb3QgZW5hYmxpbmcgeDJhcGljLEludHItcmVtYXBwaW5nXG4iKTsKLSNlbHNlCi0JaWYgKCFjcHVfaGFzX3gyYXBpYykKLQkJcmV0dXJuOwotCi0JaWYgKHgyYXBpY19wcmVlbmFibGVkKQotCQlwYW5pYygieDJhcGljIGVuYWJsZWQgcHJpb3IgT1MgaGFuZG92ZXIsIgotCQkgICAgICAiIGVuYWJsZSBDT05GSUdfWDg2X1gyQVBJQywgQ09ORklHX0lOVFJfUkVNQVAiKTsKLSNlbmRpZgotCi0JcmV0dXJuOworCQlwcl9pbmZvKCJOb3QgZW5hYmxpbmcgeDJhcGljLCBJbnRyLXJlbWFwcGluZyBpbml0IGZhaWxlZC5cbiIpOwogfQogCi0KICNpZmRlZiBDT05GSUdfWDg2XzY0CiAvKgogICogRGV0ZWN0IGFuZCBlbmFibGUgbG9jYWwgQVBJQ3Mgb24gbm9uLVNNUCBib2FyZHMuCkBAIC0xNTQ5LDggKzE1NjIsNiBAQAogI2lmZGVmIENPTkZJR19YODZfNjQKIHZvaWQgX19pbml0IGVhcmx5X2luaXRfbGFwaWNfbWFwcGluZyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOwotCiAJLyoKIAkgKiBJZiBubyBsb2NhbCBBUElDIGNhbiBiZSBmb3VuZCB0aGVuIGdvIG91dAogCSAqIDogaXQgbWVhbnMgdGhlcmUgaXMgbm8gbXBhdGFibGUgYW5kIE1BRFQKQEAgLTE1NTgsMTEgKzE1NjksOSBAQAogCWlmICghc21wX2ZvdW5kX2NvbmZpZykKIAkJcmV0dXJuOwogCi0JcGh5c19hZGRyID0gbXBfbGFwaWNfYWRkcjsKLQotCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBwaHlzX2FkZHIpOworCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBtcF9sYXBpY19hZGRyKTsKIAlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJtYXBwZWQgQVBJQyB0byAlMTZseCAoJTE2bHgpXG4iLAotCQkgICAgQVBJQ19CQVNFLCBwaHlzX2FkZHIpOworCQkgICAgQVBJQ19CQVNFLCBtcF9sYXBpY19hZGRyKTsKIAogCS8qCiAJICogRmV0Y2ggdGhlIEFQSUMgSUQgb2YgdGhlIEJTUCBpbiBjYXNlIHdlIGhhdmUgYQpAQCAtMTY1MSw3ICsxNjYwLDYgQEAKIAkgICAgQVBJQ19JTlRFR1JBVEVEKGFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdKSkgewogCQlwcl9lcnIoIkJJT1MgYnVnLCBsb2NhbCBBUElDIDB4JXggbm90IGRldGVjdGVkIS4uLlxuIiwKIAkJCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7Ci0JCWNsZWFyX2NwdV9jYXAoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FQSUMpOwogCQlyZXR1cm4gLTE7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9lczcwMDBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCmluZGV4IDg5NTJhNTguLjg5MTc0ZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIHsKIAkvKiBNUEVOVElVTUlJSSAqLwogCWlmIChib290X2NwdV9kYXRhLng4NiA9PSA2ICYmCi0JICAgIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA+PSA3IHx8IGJvb3RfY3B1X2RhdGEueDg2X21vZGVsIDw9IDExKSkKKwkgICAgKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID49IDcgJiYgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPD0gMTEpKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCmluZGV4IGQyZWQ2YzUuLjNjOGY5ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKQEAgLTY2LDYgKzY2LDggQEAKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogCiAjZGVmaW5lIF9fYXBpY2RlYnVnaW5pdCh0eXBlKSBzdGF0aWMgdHlwZSBfX2luaXQKKyNkZWZpbmUgZm9yX2VhY2hfaXJxX3BpbihlbnRyeSwgaGVhZCkgXAorCWZvciAoZW50cnkgPSBoZWFkOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bmV4dCkKIAogLyoKICAqICAgICAgSXMgdGhlIFNpUyBBUElDIHJtdyBidWcgcHJlc2VudCA/CkBAIC04NSw2ICs4Nyw5IEBACiBzdHJ1Y3QgbXBjX2lvYXBpYyBtcF9pb2FwaWNzW01BWF9JT19BUElDU107CiBpbnQgbnJfaW9hcGljczsKIAorLyogSU8gQVBJQyBnc2kgcm91dGluZyBpbmZvICovCitzdHJ1Y3QgbXBfaW9hcGljX2dzaSAgbXBfZ3NpX3JvdXRpbmdbTUFYX0lPX0FQSUNTXTsKKwogLyogTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCiBzdHJ1Y3QgbXBjX2ludHNyYyBtcF9pcnFzW01BWF9JUlFfU09VUkNFU107CiAKQEAgLTExNiwxNSArMTIxLDYgQEAKIH0KIGVhcmx5X3BhcmFtKCJub2FwaWMiLCBwYXJzZV9ub2FwaWMpOwogCi1zdHJ1Y3QgaXJxX3Bpbl9saXN0OwotCi0vKgotICogVGhpcyBpcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgd2Ugd2FudCB0byBkbyBpdCBPKDEpCi0gKgotICogdGhlIGluZGV4aW5nIG9yZGVyIG9mIHRoaXMgYXJyYXkgZmF2b3JzIDE6MSBtYXBwaW5ncwotICogYmV0d2VlbiBwaW5zIGFuZCBJUlFzLgotICovCi0KIHN0cnVjdCBpcnFfcGluX2xpc3QgewogCWludCBhcGljLCBwaW47CiAJc3RydWN0IGlycV9waW5fbGlzdCAqbmV4dDsKQEAgLTEzOSw2ICsxMzUsMTEgQEAKIAlyZXR1cm4gcGluOwogfQogCisvKgorICogVGhpcyBpcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgd2Ugd2FudCB0byBkbyBpdCBPKDEpCisgKgorICogTW9zdCBpcnFzIGFyZSBtYXBwZWQgMToxIHdpdGggcGlucy4KKyAqLwogc3RydWN0IGlycV9jZmcgewogCXN0cnVjdCBpcnFfcGluX2xpc3QgKmlycV8yX3BpbjsKIAljcHVtYXNrX3Zhcl90IGRvbWFpbjsKQEAgLTQxNCwxMyArNDE1LDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47Ci0JZm9yICg7OykgeworCWZvcl9lYWNoX2lycV9waW4oZW50cnksIGNmZy0+aXJxXzJfcGluKSB7CiAJCXVuc2lnbmVkIGludCByZWc7CiAJCWludCBwaW47CiAKLQkJaWYgKCFlbnRyeSkKLQkJCWJyZWFrOwogCQlwaW4gPSBlbnRyeS0+cGluOwogCQlyZWcgPSBpb19hcGljX3JlYWQoZW50cnktPmFwaWMsIDB4MTAgKyBwaW4qMik7CiAJCS8qIElzIHRoZSByZW1vdGUgSVJSIGJpdCBzZXQ/ICovCkBAIC00MjgsOSArNDI2LDYgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQotCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJYnJlYWs7Ci0JCWVudHJ5ID0gZW50cnktPm5leHQ7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAKQEAgLTQ5OCw3MiArNDkzLDY4IEBACiAgKiBzaGFyZWQgSVNBLXNwYWNlIElSUXMsIHNvIHdlIGhhdmUgdG8gc3VwcG9ydCB0aGVtLiBXZSBhcmUgc3VwZXIKICAqIGZhc3QgaW4gdGhlIGNvbW1vbiBjYXNlLCBhbmQgZmFzdCBmb3Igc2hhcmVkIElTQS1zcGFjZSBJUlFzLgogICovCi1zdGF0aWMgdm9pZCBhZGRfcGluX3RvX2lycV9ub2RlKHN0cnVjdCBpcnFfY2ZnICpjZmcsIGludCBub2RlLCBpbnQgYXBpYywgaW50IHBpbikKK3N0YXRpYyBpbnQKK2FkZF9waW5fdG9faXJxX25vZGVfbm9wYW5pYyhzdHJ1Y3QgaXJxX2NmZyAqY2ZnLCBpbnQgbm9kZSwgaW50IGFwaWMsIGludCBwaW4pCiB7Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CisJc3RydWN0IGlycV9waW5fbGlzdCAqKmxhc3QsICplbnRyeTsKIAotCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47Ci0JaWYgKCFlbnRyeSkgewotCQllbnRyeSA9IGdldF9vbmVfZnJlZV9pcnFfMl9waW4obm9kZSk7Ci0JCWlmICghZW50cnkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvYyBpcnFfMl9waW4gdG8gYWRkICVkIC0gJWRcbiIsCi0JCQkJCWFwaWMsIHBpbik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY2ZnLT5pcnFfMl9waW4gPSBlbnRyeTsKLQkJZW50cnktPmFwaWMgPSBhcGljOwotCQllbnRyeS0+cGluID0gcGluOwotCQlyZXR1cm47Ci0JfQotCi0Jd2hpbGUgKGVudHJ5LT5uZXh0KSB7Ci0JCS8qIG5vdCBhZ2FpbiwgcGxlYXNlICovCisJLyogZG9uJ3QgYWxsb3cgZHVwbGljYXRlcyAqLworCWxhc3QgPSAmY2ZnLT5pcnFfMl9waW47CisJZm9yX2VhY2hfaXJxX3BpbihlbnRyeSwgY2ZnLT5pcnFfMl9waW4pIHsKIAkJaWYgKGVudHJ5LT5hcGljID09IGFwaWMgJiYgZW50cnktPnBpbiA9PSBwaW4pCi0JCQlyZXR1cm47Ci0KLQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKKwkJCXJldHVybiAwOworCQlsYXN0ID0gJmVudHJ5LT5uZXh0OwogCX0KIAotCWVudHJ5LT5uZXh0ID0gZ2V0X29uZV9mcmVlX2lycV8yX3Bpbihub2RlKTsKLQllbnRyeSA9IGVudHJ5LT5uZXh0OworCWVudHJ5ID0gZ2V0X29uZV9mcmVlX2lycV8yX3Bpbihub2RlKTsKKwlpZiAoIWVudHJ5KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvYyBpcnFfcGluX2xpc3QgKCVkLCVkLCVkKVxuIiwKKwkJCQlub2RlLCBhcGljLCBwaW4pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJZW50cnktPmFwaWMgPSBhcGljOwogCWVudHJ5LT5waW4gPSBwaW47CisKKwkqbGFzdCA9IGVudHJ5OworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGRfcGluX3RvX2lycV9ub2RlKHN0cnVjdCBpcnFfY2ZnICpjZmcsIGludCBub2RlLCBpbnQgYXBpYywgaW50IHBpbikKK3sKKwlpZiAoYWRkX3Bpbl90b19pcnFfbm9kZV9ub3BhbmljKGNmZywgbm9kZSwgYXBpYywgcGluKSkKKwkJcGFuaWMoIklPLUFQSUM6IGZhaWxlZCB0byBhZGQgaXJxLXBpbi4gQ2FuIG5vdCBwcm9jZWVkXG4iKTsKIH0KIAogLyoKICAqIFJlcm91dGUgYW4gSVJRIHRvIGEgZGlmZmVyZW50IHBpbi4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IHJlcGxhY2VfcGluX2F0X2lycV9ub2RlKHN0cnVjdCBpcnFfY2ZnICpjZmcsIGludCBub2RlLAotCQkJCSAgICAgIGludCBvbGRhcGljLCBpbnQgb2xkcGluLAotCQkJCSAgICAgIGludCBuZXdhcGljLCBpbnQgbmV3cGluKQorCQkJCQkgICBpbnQgb2xkYXBpYywgaW50IG9sZHBpbiwKKwkJCQkJICAgaW50IG5ld2FwaWMsIGludCBuZXdwaW4pCiB7Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBjZmctPmlycV8yX3BpbjsKLQlpbnQgcmVwbGFjZWQgPSAwOworCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OwogCi0Jd2hpbGUgKGVudHJ5KSB7CisJZm9yX2VhY2hfaXJxX3BpbihlbnRyeSwgY2ZnLT5pcnFfMl9waW4pIHsKIAkJaWYgKGVudHJ5LT5hcGljID09IG9sZGFwaWMgJiYgZW50cnktPnBpbiA9PSBvbGRwaW4pIHsKIAkJCWVudHJ5LT5hcGljID0gbmV3YXBpYzsKIAkJCWVudHJ5LT5waW4gPSBuZXdwaW47Ci0JCQlyZXBsYWNlZCA9IDE7CiAJCQkvKiBldmVyeSBvbmUgaXMgZGlmZmVyZW50LCByaWdodD8gKi8KLQkJCWJyZWFrOworCQkJcmV0dXJuOwogCQl9Ci0JCWVudHJ5ID0gZW50cnktPm5leHQ7CiAJfQogCi0JLyogd2h5PyBjYWxsIHJlcGxhY2UgYmVmb3JlIGFkZD8gKi8KLQlpZiAoIXJlcGxhY2VkKQotCQlhZGRfcGluX3RvX2lycV9ub2RlKGNmZywgbm9kZSwgbmV3YXBpYywgbmV3cGluKTsKKwkvKiBvbGQgYXBpYy9waW4gZGlkbid0IGV4aXN0LCBzbyBqdXN0IGFkZCBuZXcgb25lcyAqLworCWFkZF9waW5fdG9faXJxX25vZGUoY2ZnLCBub2RlLCBuZXdhcGljLCBuZXdwaW4pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnlfaXJxKHN0cnVjdCBpcnFfY2ZnICpjZmcsCi0JCQkJaW50IG1hc2tfYW5kLCBpbnQgbWFza19vciwKLQkJCQl2b2lkICgqZmluYWwpKHN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5KSkKK3N0YXRpYyB2b2lkIGlvX2FwaWNfbW9kaWZ5X2lycShzdHJ1Y3QgaXJxX2NmZyAqY2ZnLAorCQkJICAgICAgIGludCBtYXNrX2FuZCwgaW50IG1hc2tfb3IsCisJCQkgICAgICAgdm9pZCAoKmZpbmFsKShzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSkpCiB7CiAJaW50IHBpbjsKIAlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKIAotCWZvciAoZW50cnkgPSBjZmctPmlycV8yX3BpbjsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBlbnRyeS0+bmV4dCkgeworCWZvcl9lYWNoX2lycV9waW4oZW50cnksIGNmZy0+aXJxXzJfcGluKSB7CiAJCXVuc2lnbmVkIGludCByZWc7CiAJCXBpbiA9IGVudHJ5LT5waW47CiAJCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbiAqIDIpOwpAQCAtNTgwLDcgKzU3MSw2IEBACiAJaW9fYXBpY19tb2RpZnlfaXJxKGNmZywgfklPX0FQSUNfUkVESVJfTUFTS0VELCAwLCBOVUxMKTsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfNjQKIHN0YXRpYyB2b2lkIGlvX2FwaWNfc3luYyhzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSkKIHsKIAkvKgpAQCAtNTk2LDExICs1ODYsNiBAQAogewogCWlvX2FwaWNfbW9kaWZ5X2lycShjZmcsIH4wLCBJT19BUElDX1JFRElSX01BU0tFRCwgJmlvX2FwaWNfc3luYyk7CiB9Ci0jZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCi1zdGF0aWMgdm9pZCBfX21hc2tfSU9fQVBJQ19pcnEoc3RydWN0IGlycV9jZmcgKmNmZykKLXsKLQlpb19hcGljX21vZGlmeV9pcnEoY2ZnLCB+MCwgSU9fQVBJQ19SRURJUl9NQVNLRUQsIE5VTEwpOwotfQogCiBzdGF0aWMgdm9pZCBfX21hc2tfYW5kX2VkZ2VfSU9fQVBJQ19pcnEoc3RydWN0IGlycV9jZmcgKmNmZykKIHsKQEAgLTYxMyw3ICs1OTgsNiBAQAogCWlvX2FwaWNfbW9kaWZ5X2lycShjZmcsIH5JT19BUElDX1JFRElSX01BU0tFRCwKIAkJCUlPX0FQSUNfUkVESVJfTEVWRUxfVFJJR0dFUiwgTlVMTCk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCiBzdGF0aWMgdm9pZCBtYXNrX0lPX0FQSUNfaXJxX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjKQogewpAQCAtMTcwMiwxMiArMTY4Niw4IEBACiAJCWlmICghZW50cnkpCiAJCQljb250aW51ZTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIklSUSVkICIsIGlycSk7Ci0JCWZvciAoOzspIHsKKwkJZm9yX2VhY2hfaXJxX3BpbihlbnRyeSwgY2ZnLT5pcnFfMl9waW4pCiAJCQlwcmludGsoIi0+ICVkOiVkIiwgZW50cnktPmFwaWMsIGVudHJ5LT5waW4pOwotCQkJaWYgKCFlbnRyeS0+bmV4dCkKLQkJCQlicmVhazsKLQkJCWVudHJ5ID0gZW50cnktPm5leHQ7Ci0JCX0KIAkJcHJpbnRrKCJcbiIpOwogCX0KIApAQCAtMjIxMSw3ICsyMTkxLDYgQEAKIAlyZXR1cm4gd2FzX3BlbmRpbmc7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0CiBzdGF0aWMgaW50IGlvYXBpY19yZXRyaWdnZXJfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAKQEAgLTIyMjQsMTQgKzIyMDMsNiBAQAogCiAJcmV0dXJuIDE7CiB9Ci0jZWxzZQotc3RhdGljIGludCBpb2FwaWNfcmV0cmlnZ2VyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWFwaWMtPnNlbmRfSVBJX3NlbGYoaXJxX2NmZyhpcnEpLT52ZWN0b3IpOwotCi0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKIAogLyoKICAqIExldmVsIGFuZCBlZGdlIHRyaWdnZXJlZCBJTy1BUElDIGludGVycnVwdHMgbmVlZCBkaWZmZXJlbnQgaGFuZGxpbmcsCkBAIC0yMjY5LDEzICsyMjQwLDkgQEAKIAlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKIAl1OCB2ZWN0b3IgPSBjZmctPnZlY3RvcjsKIAotCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47Ci0JZm9yICg7OykgeworCWZvcl9lYWNoX2lycV9waW4oZW50cnksIGNmZy0+aXJxXzJfcGluKSB7CiAJCXVuc2lnbmVkIGludCByZWc7CiAKLQkJaWYgKCFlbnRyeSkKLQkJCWJyZWFrOwotCiAJCWFwaWMgPSBlbnRyeS0+YXBpYzsKIAkJcGluID0gZW50cnktPnBpbjsKIAkJLyoKQEAgLTIyODgsOSArMjI1NSw2IEBACiAJCXJlZyAmPSB+SU9fQVBJQ19SRURJUl9WRUNUT1JfTUFTSzsKIAkJcmVnIHw9IHZlY3RvcjsKIAkJaW9fYXBpY19tb2RpZnkoYXBpYywgMHgxMCArIHBpbioyLCByZWcpOwotCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJYnJlYWs7Ci0JCWVudHJ5ID0gZW50cnktPm5leHQ7CiAJfQogfQogCkBAIC0yNTE1LDExICsyNDc5LDggQEAKIHN0YXRpYyB2b2lkIGFja19hcGljX2xldmVsKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKIAl1bnNpZ25lZCBsb25nIHY7CiAJaW50IGk7Ci0jZW5kaWYKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCWludCBkb191bm1hc2tfaXJxID0gMDsKIApAQCAtMjUzMiwzMSArMjQ5MywyOCBAQAogCX0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgogCS8qCi0JKiBJdCBhcHBlYXJzIHRoZXJlIGlzIGFuIGVycmF0dW0gd2hpY2ggYWZmZWN0cyBhdCBsZWFzdCB2ZXJzaW9uIDB4MTEKLQkqIG9mIEkvTyBBUElDICh0aGF0J3MgdGhlIDgyMDkzQUEgYW5kIGNvcmVzIGludGVncmF0ZWQgaW50byB2YXJpb3VzCi0JKiBjaGlwc2V0cykuICBVbmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IGlzCi0JKiBlcnJvbmVvdXNseSBkZWxpdmVyZWQgYXMgZWRnZS10cmlnZ2VyZWQgb25lIGJ1dCB0aGUgcmVzcGVjdGl2ZSBJUlIKLQkqIGJpdCBnZXRzIHNldCBuZXZlcnRoZWxlc3MuICBBcyBhIHJlc3VsdCB0aGUgSS9PIHVuaXQgZXhwZWN0cyBhbiBFT0kKLQkqIG1lc3NhZ2UgYnV0IGl0IHdpbGwgbmV2ZXIgYXJyaXZlIGFuZCBmdXJ0aGVyIGludGVycnVwdHMgYXJlIGJsb2NrZWQKLQkqIGZyb20gdGhlIHNvdXJjZS4gIFRoZSBleGFjdCByZWFzb24gaXMgc28gZmFyIHVua25vd24sIGJ1dCB0aGUKLQkqIHBoZW5vbWVub24gd2FzIG9ic2VydmVkIHdoZW4gdHdvIGNvbnNlY3V0aXZlIGludGVycnVwdCByZXF1ZXN0cwotCSogZnJvbSBhIGdpdmVuIHNvdXJjZSBnZXQgZGVsaXZlcmVkIHRvIHRoZSBzYW1lIENQVSBhbmQgdGhlIHNvdXJjZSBpcwotCSogdGVtcG9yYXJpbHkgZGlzYWJsZWQgaW4gYmV0d2Vlbi4KLQkqCi0JKiBBIHdvcmthcm91bmQgaXMgdG8gc2ltdWxhdGUgYW4gRU9JIG1lc3NhZ2UgbWFudWFsbHkuICBXZSBhY2hpZXZlIGl0Ci0JKiBieSBzZXR0aW5nIHRoZSB0cmlnZ2VyIG1vZGUgdG8gZWRnZSBhbmQgdGhlbiB0byBsZXZlbCB3aGVuIHRoZSBlZGdlCi0JKiB0cmlnZ2VyIG1vZGUgZ2V0cyBkZXRlY3RlZCBpbiB0aGUgVE1SIG9mIGEgbG9jYWwgQVBJQyBmb3IgYQotCSogbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdC4gIFdlIG1hc2sgdGhlIHNvdXJjZSBmb3IgdGhlIHRpbWUgb2YgdGhlCi0JKiBvcGVyYXRpb24gdG8gcHJldmVudCBhbiBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgZXNjYXBpbmcgbWVhbndoaWxlLgotCSogVGhlIGlkZWEgaXMgZnJvbSBNYW5mcmVkIFNwcmF1bC4gIC0tbWFjcm8KLQkqLworCSAqIEl0IGFwcGVhcnMgdGhlcmUgaXMgYW4gZXJyYXR1bSB3aGljaCBhZmZlY3RzIGF0IGxlYXN0IHZlcnNpb24gMHgxMQorCSAqIG9mIEkvTyBBUElDICh0aGF0J3MgdGhlIDgyMDkzQUEgYW5kIGNvcmVzIGludGVncmF0ZWQgaW50byB2YXJpb3VzCisJICogY2hpcHNldHMpLiAgVW5kZXIgY2VydGFpbiBjb25kaXRpb25zIGEgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdCBpcworCSAqIGVycm9uZW91c2x5IGRlbGl2ZXJlZCBhcyBlZGdlLXRyaWdnZXJlZCBvbmUgYnV0IHRoZSByZXNwZWN0aXZlIElSUgorCSAqIGJpdCBnZXRzIHNldCBuZXZlcnRoZWxlc3MuICBBcyBhIHJlc3VsdCB0aGUgSS9PIHVuaXQgZXhwZWN0cyBhbiBFT0kKKwkgKiBtZXNzYWdlIGJ1dCBpdCB3aWxsIG5ldmVyIGFycml2ZSBhbmQgZnVydGhlciBpbnRlcnJ1cHRzIGFyZSBibG9ja2VkCisJICogZnJvbSB0aGUgc291cmNlLiAgVGhlIGV4YWN0IHJlYXNvbiBpcyBzbyBmYXIgdW5rbm93biwgYnV0IHRoZQorCSAqIHBoZW5vbWVub24gd2FzIG9ic2VydmVkIHdoZW4gdHdvIGNvbnNlY3V0aXZlIGludGVycnVwdCByZXF1ZXN0cworCSAqIGZyb20gYSBnaXZlbiBzb3VyY2UgZ2V0IGRlbGl2ZXJlZCB0byB0aGUgc2FtZSBDUFUgYW5kIHRoZSBzb3VyY2UgaXMKKwkgKiB0ZW1wb3JhcmlseSBkaXNhYmxlZCBpbiBiZXR3ZWVuLgorCSAqCisJICogQSB3b3JrYXJvdW5kIGlzIHRvIHNpbXVsYXRlIGFuIEVPSSBtZXNzYWdlIG1hbnVhbGx5LiAgV2UgYWNoaWV2ZSBpdAorCSAqIGJ5IHNldHRpbmcgdGhlIHRyaWdnZXIgbW9kZSB0byBlZGdlIGFuZCB0aGVuIHRvIGxldmVsIHdoZW4gdGhlIGVkZ2UKKwkgKiB0cmlnZ2VyIG1vZGUgZ2V0cyBkZXRlY3RlZCBpbiB0aGUgVE1SIG9mIGEgbG9jYWwgQVBJQyBmb3IgYQorCSAqIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQuICBXZSBtYXNrIHRoZSBzb3VyY2UgZm9yIHRoZSB0aW1lIG9mIHRoZQorCSAqIG9wZXJhdGlvbiB0byBwcmV2ZW50IGFuIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBlc2NhcGluZyBtZWFud2hpbGUuCisJICogVGhlIGlkZWEgaXMgZnJvbSBNYW5mcmVkIFNwcmF1bC4gIC0tbWFjcm8KKwkgKi8KIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CiAJaSA9IGNmZy0+dmVjdG9yOwotCiAJdiA9IGFwaWNfcmVhZChBUElDX1RNUiArICgoaSAmIH4weDFmKSA+PiAxKSk7Ci0jZW5kaWYKIAogCS8qCiAJICogV2UgbXVzdCBhY2tub3dsZWRnZSB0aGUgaXJxIGJlZm9yZSB3ZSBtb3ZlIGl0IG9yIHRoZSBhY2tub3dsZWRnZSB3aWxsCkBAIC0yNTk4LDcgKzI1NTYsNyBAQAogCQl1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyogVGFpbCBlbmQgb2YgdmVyc2lvbiAweDExIEkvTyBBUElDIGJ1ZyB3b3JrYXJvdW5kICovCiAJaWYgKCEodiAmICgxIDw8IChpICYgMHgxZikpKSkgewogCQlhdG9taWNfaW5jKCZpcnFfbWlzX2NvdW50KTsKIAkJc3Bpbl9sb2NrKCZpb2FwaWNfbG9jayk7CkBAIC0yNjA2LDI2ICsyNTY0LDE1IEBACiAJCV9fdW5tYXNrX2FuZF9sZXZlbF9JT19BUElDX2lycShjZmcpOwogCQlzcGluX3VubG9jaygmaW9hcGljX2xvY2spOwogCX0KLSNlbmRpZgogfQogCiAjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIHN0YXRpYyB2b2lkIF9fZW9pX2lvYXBpY19pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9jZmcgKmNmZykKIHsKLQlpbnQgYXBpYywgcGluOwogCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OwogCi0JZW50cnkgPSBjZmctPmlycV8yX3BpbjsKLQlmb3IgKDs7KSB7Ci0KLQkJaWYgKCFlbnRyeSkKLQkJCWJyZWFrOwotCi0JCWFwaWMgPSBlbnRyeS0+YXBpYzsKLQkJcGluID0gZW50cnktPnBpbjsKLQkJaW9fYXBpY19lb2koYXBpYywgcGluKTsKLQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKLQl9CisJZm9yX2VhY2hfaXJxX3BpbihlbnRyeSwgY2ZnLT5pcnFfMl9waW4pCisJCWlvX2FwaWNfZW9pKGVudHJ5LT5hcGljLCBlbnRyeS0+cGluKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTMyNDEsOCArMzE4OCw3IEBACiAJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwogCWR5bmFtaWNfaXJxX2NsZWFudXAoaXJxKTsKIAkvKiBjb25uZWN0IGJhY2sgaXJxX2NmZyAqLwotCWlmIChkZXNjKQotCQlkZXNjLT5jaGlwX2RhdGEgPSBjZmc7CisJZGVzYy0+Y2hpcF9kYXRhID0gY2ZnOwogCiAJZnJlZV9pcnRlKGlycSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CkBAIC0zOTEyLDcgKzM4NTgsMTEgQEAKIAkgKi8KIAlpZiAoaXJxID49IE5SX0lSUVNfTEVHQUNZKSB7CiAJCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQkJYWRkX3Bpbl90b19pcnFfbm9kZShjZmcsIG5vZGUsIGlvYXBpYywgcGluKTsKKwkJaWYgKGFkZF9waW5fdG9faXJxX25vZGVfbm9wYW5pYyhjZmcsIG5vZGUsIGlvYXBpYywgcGluKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2FuIG5vdCBhZGQgcGluICVkIGZvciBpcnEgJWRcbiIsCisJCQkJcGluLCBpcnEpOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlzZXR1cF9JT19BUElDX2lycShpb2FwaWMsIHBpbiwgaXJxLCBkZXNjLCB0cmlnZ2VyLCBwb2xhcml0eSk7CkBAIC0zOTQxLDExICszODkxLDI4IEBACiAJcmV0dXJuIF9faW9fYXBpY19zZXRfcGNpX3JvdXRpbmcoZGV2LCBpcnEsIGlycV9hdHRyKTsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSS1iYXNlZCBJT0FQSUMgQ29uZmlndXJhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3U4IF9faW5pdCBpb19hcGljX3VuaXF1ZV9pZCh1OCBpZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgJiYKKwkgICAgIUFQSUNfWEFQSUMoYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF0pKQorCQlyZXR1cm4gaW9fYXBpY19nZXRfdW5pcXVlX2lkKG5yX2lvYXBpY3MsIGlkKTsKKwllbHNlCisJCXJldHVybiBpZDsKKyNlbHNlCisJaW50IGk7CisJREVDTEFSRV9CSVRNQVAodXNlZCwgMjU2KTsKIAotI2lmZGVmIENPTkZJR19BQ1BJCisJYml0bWFwX3plcm8odXNlZCwgMjU2KTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CisJCXN0cnVjdCBtcGNfaW9hcGljICppYSA9ICZtcF9pb2FwaWNzW2ldOworCQlfX3NldF9iaXQoaWEtPmFwaWNpZCwgdXNlZCk7CisJfQorCWlmICghdGVzdF9iaXQoaWQsIHVzZWQpKQorCQlyZXR1cm4gaWQ7CisJcmV0dXJuIGZpbmRfZmlyc3RfemVyb19iaXQodXNlZCwgMjU2KTsKKyNlbmRpZgorfQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogaW50IF9faW5pdCBpb19hcGljX2dldF91bmlxdWVfaWQoaW50IGlvYXBpYywgaW50IGFwaWNfaWQpCkBAIC00MDU0LDggKzQwMjEsNiBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KLQogLyoKICAqIFRoaXMgZnVuY3Rpb24gY3VycmVudGx5IGlzIG9ubHkgYSBoZWxwZXIgZm9yIHRoZSBpMzg2IHNtcCBib290IHByb2Nlc3Mgd2hlcmUKICAqIHdlIG5lZWQgdG8gcmVwcm9ncmFtIHRoZSBpb3JlZHRibHMgdG8gY2F0ZXIgZm9yIHRoZSBjcHVzIHdoaWNoIGhhdmUgY29tZSBvbmxpbmUKQEAgLTQxMDksNyArNDA3NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmlvYXBpY19yZXNvdXJjZXM7CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKiBfX2luaXQgaW9hcGljX3NldHVwX3Jlc291cmNlcyh2b2lkKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqIF9faW5pdCBpb2FwaWNfc2V0dXBfcmVzb3VyY2VzKGludCBucl9pb2FwaWNzKQogewogCXVuc2lnbmVkIGxvbmcgbjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTQxMjUsMTUgKzQwOTAsMTMgQEAKIAltZW0gPSBhbGxvY19ib290bWVtKG4pOwogCXJlcyA9ICh2b2lkICopbWVtOwogCi0JaWYgKG1lbSAhPSBOVUxMKSB7Ci0JCW1lbSArPSBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIG5yX2lvYXBpY3M7CisJbWVtICs9IHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogbnJfaW9hcGljczsKIAotCQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7Ci0JCQlyZXNbaV0ubmFtZSA9IG1lbTsKLQkJCXJlc1tpXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOwotCQkJc3ByaW50ZihtZW0sICAiSU9BUElDICV1IiwgaSk7Ci0JCQltZW0gKz0gSU9BUElDX1JFU09VUkNFX05BTUVfU0laRTsKLQkJfQorCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKKwkJcmVzW2ldLm5hbWUgPSBtZW07CisJCXJlc1tpXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOworCQlzcHJpbnRmKG1lbSwgICJJT0FQSUMgJXUiLCBpKTsKKwkJbWVtICs9IElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkU7CiAJfQogCiAJaW9hcGljX3Jlc291cmNlcyA9IHJlczsKQEAgLTQxNDcsNyArNDExMCw3IEBACiAJc3RydWN0IHJlc291cmNlICppb2FwaWNfcmVzOwogCWludCBpOwogCi0JaW9hcGljX3JlcyA9IGlvYXBpY19zZXR1cF9yZXNvdXJjZXMoKTsKKwlpb2FwaWNfcmVzID0gaW9hcGljX3NldHVwX3Jlc291cmNlcyhucl9pb2FwaWNzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CiAJCWlmIChzbXBfZm91bmRfY29uZmlnKSB7CiAJCQlpb2FwaWNfcGh5cyA9IG1wX2lvYXBpY3NbaV0uYXBpY2FkZHI7CkBAIC00MTc2LDExICs0MTM5LDkgQEAKIAkJCSAgICBfX2ZpeF90b192aXJ0KGlkeCksIGlvYXBpY19waHlzKTsKIAkJaWR4Kys7CiAKLQkJaWYgKGlvYXBpY19yZXMgIT0gTlVMTCkgewotCQkJaW9hcGljX3Jlcy0+c3RhcnQgPSBpb2FwaWNfcGh5czsKLQkJCWlvYXBpY19yZXMtPmVuZCA9IGlvYXBpY19waHlzICsgKDQgKiAxMDI0KSAtIDE7Ci0JCQlpb2FwaWNfcmVzKys7Ci0JCX0KKwkJaW9hcGljX3Jlcy0+c3RhcnQgPSBpb2FwaWNfcGh5czsKKwkJaW9hcGljX3Jlcy0+ZW5kID0gaW9hcGljX3BoeXMgKyAoNCAqIDEwMjQpIC0gMTsKKwkJaW9hcGljX3JlcysrOwogCX0KIH0KIApAQCAtNDIwMSwzICs0MTYyLDc2IEBACiAJCXIrKzsKIAl9CiB9CisKK2ludCBtcF9maW5kX2lvYXBpYyhpbnQgZ3NpKQoreworCWludCBpID0gMDsKKworCS8qIEZpbmQgdGhlIElPQVBJQyB0aGF0IG1hbmFnZXMgdGhpcyBHU0kuICovCisJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgeworCQlpZiAoKGdzaSA+PSBtcF9nc2lfcm91dGluZ1tpXS5nc2lfYmFzZSkKKwkJICAgICYmIChnc2kgPD0gbXBfZ3NpX3JvdXRpbmdbaV0uZ3NpX2VuZCkpCisJCQlyZXR1cm4gaTsKKwl9CisKKwlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBVbmFibGUgdG8gbG9jYXRlIElPQVBJQyBmb3IgR1NJICVkXG4iLCBnc2kpOworCXJldHVybiAtMTsKK30KKworaW50IG1wX2ZpbmRfaW9hcGljX3BpbihpbnQgaW9hcGljLCBpbnQgZ3NpKQoreworCWlmIChXQVJOX09OKGlvYXBpYyA9PSAtMSkpCisJCXJldHVybiAtMTsKKwlpZiAoV0FSTl9PTihnc2kgPiBtcF9nc2lfcm91dGluZ1tpb2FwaWNdLmdzaV9lbmQpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZ3NpIC0gbXBfZ3NpX3JvdXRpbmdbaW9hcGljXS5nc2lfYmFzZTsKK30KKworc3RhdGljIGludCBiYWRfaW9hcGljKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlpZiAobnJfaW9hcGljcyA+PSBNQVhfSU9fQVBJQ1MpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSSU5HOiBNYXggIyBvZiBJL08gQVBJQ3MgKCVkKSBleGNlZWRlZCAiCisJCSAgICAgICAiKGZvdW5kICVkKSwgc2tpcHBpbmdcbiIsIE1BWF9JT19BUElDUywgbnJfaW9hcGljcyk7CisJCXJldHVybiAxOworCX0KKwlpZiAoIWFkZHJlc3MpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogQm9ndXMgKHplcm8pIEkvTyBBUElDIGFkZHJlc3MiCisJCSAgICAgICAiIGZvdW5kIGluIHRhYmxlLCBza2lwcGluZyFcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19pbml0IG1wX3JlZ2lzdGVyX2lvYXBpYyhpbnQgaWQsIHUzMiBhZGRyZXNzLCB1MzIgZ3NpX2Jhc2UpCit7CisJaW50IGlkeCA9IDA7CisKKwlpZiAoYmFkX2lvYXBpYyhhZGRyZXNzKSkKKwkJcmV0dXJuOworCisJaWR4ID0gbnJfaW9hcGljczsKKworCW1wX2lvYXBpY3NbaWR4XS50eXBlID0gTVBfSU9BUElDOworCW1wX2lvYXBpY3NbaWR4XS5mbGFncyA9IE1QQ19BUElDX1VTQUJMRTsKKwltcF9pb2FwaWNzW2lkeF0uYXBpY2FkZHIgPSBhZGRyZXNzOworCisJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9JT19BUElDX0JBU0VfMCArIGlkeCwgYWRkcmVzcyk7CisJbXBfaW9hcGljc1tpZHhdLmFwaWNpZCA9IGlvX2FwaWNfdW5pcXVlX2lkKGlkKTsKKwltcF9pb2FwaWNzW2lkeF0uYXBpY3ZlciA9IGlvX2FwaWNfZ2V0X3ZlcnNpb24oaWR4KTsKKworCS8qCisJICogQnVpbGQgYmFzaWMgR1NJIGxvb2t1cCB0YWJsZSB0byBmYWNpbGl0YXRlIGdzaS0+aW9fYXBpYyBsb29rdXBzCisJICogYW5kIHRvIHByZXZlbnQgcmVwcm9ncmFtbWluZyBvZiBJT0FQSUMgcGlucyAoUENJIEdTSXMpLgorCSAqLworCW1wX2dzaV9yb3V0aW5nW2lkeF0uZ3NpX2Jhc2UgPSBnc2lfYmFzZTsKKwltcF9nc2lfcm91dGluZ1tpZHhdLmdzaV9lbmQgPSBnc2lfYmFzZSArCisJICAgIGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaWR4KTsKKworCXByaW50ayhLRVJOX0lORk8gIklPQVBJQ1slZF06IGFwaWNfaWQgJWQsIHZlcnNpb24gJWQsIGFkZHJlc3MgMHgleCwgIgorCSAgICAgICAiR1NJICVkLSVkXG4iLCBpZHgsIG1wX2lvYXBpY3NbaWR4XS5hcGljaWQsCisJICAgICAgIG1wX2lvYXBpY3NbaWR4XS5hcGljdmVyLCBtcF9pb2FwaWNzW2lkeF0uYXBpY2FkZHIsCisJICAgICAgIG1wX2dzaV9yb3V0aW5nW2lkeF0uZ3NpX2Jhc2UsIG1wX2dzaV9yb3V0aW5nW2lkeF0uZ3NpX2VuZCk7CisKKwlucl9pb2FwaWNzKys7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pcGkuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lwaS5jCmluZGV4IDZlZjAwYmEuLjA4Mzg1ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lwaS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lwaS5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIHsKIAlpbnQgYXBpY2lkLCBjcHVpZDsKIAotCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FQSUMpKQorCWlmICghY3B1X2hhc19hcGljKQogCQlyZXR1cm4gMDsKIAogCWFwaWNpZCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYwppbmRleCBiMzAyNWI0Li5kYjcyMjAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYwpAQCAtMzksNyArMzksNyBAQAogaW50IHVua25vd25fbm1pX3BhbmljOwogaW50IG5taV93YXRjaGRvZ19lbmFibGVkOwogCi1zdGF0aWMgY3B1bWFza192YXJfdCBiYWNrdHJhY2VfbWFzazsKK3N0YXRpYyBjcHVtYXNrX3QgYmFja3RyYWNlX21hc2sgX19yZWFkX21vc3RseTsKIAogLyogbm1pX2FjdGl2ZToKICAqID4wOiB0aGUgbGFwaWMgTk1JIHdhdGNoZG9nIGlzIGFjdGl2ZSwgYnV0IGNhbiBiZSBkaXNhYmxlZApAQCAtMTM4LDcgKzEzOCw2IEBACiAJaWYgKCFwcmV2X25taV9jb3VudCkKIAkJZ290byBlcnJvcjsKIAotCWFsbG9jX2NwdW1hc2tfdmFyKCZiYWNrdHJhY2VfbWFzaywgR0ZQX0tFUk5FTHxfX0dGUF9aRVJPKTsKIAlwcmludGsoS0VSTl9JTkZPICJUZXN0aW5nIE5NSSB3YXRjaGRvZyAuLi4gIik7CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC00MTUsMTQgKzQxNCwxNyBAQAogCX0KIAogCS8qIFdlIGNhbiBiZSBjYWxsZWQgYmVmb3JlIGNoZWNrX25taV93YXRjaGRvZywgaGVuY2UgTlVMTCBjaGVjay4gKi8KLQlpZiAoYmFja3RyYWNlX21hc2sgIT0gTlVMTCAmJiBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgYmFja3RyYWNlX21hc2spKSB7CisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmYmFja3RyYWNlX21hc2spKSB7CiAJCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9jayk7CS8qIFNlcmlhbGlzZSB0aGUgcHJpbnRrcyAqLwogCiAJCXNwaW5fbG9jaygmbG9jayk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5NSSBiYWNrdHJhY2UgZm9yIGNwdSAlZFxuIiwgY3B1KTsKKwkJc2hvd19yZWdzKHJlZ3MpOwogCQlkdW1wX3N0YWNrKCk7CiAJCXNwaW5fdW5sb2NrKCZsb2NrKTsKLQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBiYWNrdHJhY2VfbWFzayk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgJmJhY2t0cmFjZV9tYXNrKTsKKworCQlyYyA9IDE7CiAJfQogCiAJLyogQ291bGQgY2hlY2sgb29wc19pbl9wcm9ncmVzcyBoZXJlIHRvbywgYnV0IGl0J3Mgc2FmZXIgbm90IHRvICovCkBAIC01NTIsMTQgKzU1NCwxOCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSh2b2lkKQordm9pZCBhcmNoX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2Uodm9pZCkKIHsKIAlpbnQgaTsKIAotCWNwdW1hc2tfY29weShiYWNrdHJhY2VfbWFzaywgY3B1X29ubGluZV9tYXNrKTsKKwljcHVtYXNrX2NvcHkoJmJhY2t0cmFjZV9tYXNrLCBjcHVfb25saW5lX21hc2spOworCisJcHJpbnRrKEtFUk5fSU5GTyAic2VuZGluZyBOTUkgdG8gYWxsIENQVXM6XG4iKTsKKwlhcGljLT5zZW5kX0lQSV9hbGwoTk1JX1ZFQ1RPUik7CisKIAkvKiBXYWl0IGZvciB1cCB0byAxMCBzZWNvbmRzIGZvciBhbGwgQ1BVcyB0byBkbyB0aGUgYmFja3RyYWNlICovCiAJZm9yIChpID0gMDsgaSA8IDEwICogMTAwMDsgaSsrKSB7Ci0JCWlmIChjcHVtYXNrX2VtcHR5KGJhY2t0cmFjZV9tYXNrKSkKKwkJaWYgKGNwdW1hc2tfZW1wdHkoJmJhY2t0cmFjZV9tYXNrKSkKIAkJCWJyZWFrOwogCQltZGVsYXkoMSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMKaW5kZXggZmNlYzJmMS4uNjVlZGMxOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jCkBAIC01NSwxMSArNTUsMTEgQEAKIHZvaWQgX19pbml0IGRlZmF1bHRfc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKLQlpZiAoeDJhcGljX21vZGUgJiYgKGFwaWMgIT0gJmFwaWNfeDJhcGljX3BoeXMgJiYKKwlpZiAoeDJhcGljX21vZGUKICNpZmRlZiBDT05GSUdfWDg2X1VWCi0JCSAgICAgICBhcGljICE9ICZhcGljX3gyYXBpY191dl94ICYmCisJCSAgICAgICAmJiBhcGljICE9ICZhcGljX3gyYXBpY191dl94CiAjZW5kaWYKLQkJICAgICAgIGFwaWMgIT0gJmFwaWNfeDJhcGljX2NsdXN0ZXIpKSB7CisJCSAgICAgICApIHsKIAkJaWYgKHgyYXBpY19waHlzKQogCQkJYXBpYyA9ICZhcGljX3gyYXBpY19waHlzOwogCQllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKaW5kZXggNDQyYjU1MC4uMTUxYWNlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwpAQCAtNDAzLDcgKzQwMywxNSBAQAogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGFwbV9zdXNwZW5kX3dhaXRxdWV1ZSk7CiBzdGF0aWMgc3RydWN0IGFwbV91c2VyICp1c2VyX2xpc3Q7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHVzZXJfbGlzdF9sb2NrKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVzY19zdHJ1Y3QJYmFkX2Jpb3NfZGVzYyA9IHsgeyB7IDAsIDB4MDA0MDkyMDAgfSB9IH07CisKKy8qCisgKiBTZXQgdXAgYSBzZWdtZW50IHRoYXQgcmVmZXJlbmNlcyB0aGUgcmVhbCBtb2RlIHNlZ21lbnQgMHg0MAorICogdGhhdCBleHRlbmRzIHVwIHRvIHRoZSBlbmQgb2YgcGFnZSB6ZXJvICh0aGF0IHdlIGhhdmUgcmVzZXJ2ZWQpLgorICogVGhpcyBpcyBmb3IgYnVnZ3kgQklPUydzIHRoYXQgcmVmZXIgdG8gKHJlYWwgbW9kZSkgc2VnbWVudCAweDQwCisgKiBldmVuIHRob3VnaCB0aGV5IGFyZSBjYWxsZWQgaW4gcHJvdGVjdGVkIG1vZGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVzY19zdHJ1Y3QgYmFkX2Jpb3NfZGVzYyA9IEdEVF9FTlRSWV9JTklUKDB4NDA5MiwKKwkJCSh1bnNpZ25lZCBsb25nKV9fdmEoMHg0MDBVTCksIFBBR0VfU0laRSAtIDB4NDAwIC0gMSk7CiAKIHN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl92ZXJzaW9uW10gPSAiMS4xNmFjIjsJLyogbm8gc3BhY2VzICovCiAKQEAgLTIzMzIsMTUgKzIzNDAsNiBAQAogCXBtX2ZsYWdzIHw9IFBNX0FQTTsKIAogCS8qCi0JICogU2V0IHVwIGEgc2VnbWVudCB0aGF0IHJlZmVyZW5jZXMgdGhlIHJlYWwgbW9kZSBzZWdtZW50IDB4NDAKLQkgKiB0aGF0IGV4dGVuZHMgdXAgdG8gdGhlIGVuZCBvZiBwYWdlIHplcm8gKHRoYXQgd2UgaGF2ZSByZXNlcnZlZCkuCi0JICogVGhpcyBpcyBmb3IgYnVnZ3kgQklPUydzIHRoYXQgcmVmZXIgdG8gKHJlYWwgbW9kZSkgc2VnbWVudCAweDQwCi0JICogZXZlbiB0aG91Z2ggdGhleSBhcmUgY2FsbGVkIGluIHByb3RlY3RlZCBtb2RlLgotCSAqLwotCXNldF9iYXNlKGJhZF9iaW9zX2Rlc2MsIF9fdmEoKHVuc2lnbmVkIGxvbmcpMHg0MCA8PCA0KSk7Ci0JX3NldF9saW1pdCgoY2hhciAqKSZiYWRfYmlvc19kZXNjLCA0MDk1IC0gKDB4NDAgPDwgNCkpOwotCi0JLyoKIAkgKiBTZXQgdXAgdGhlIGxvbmcganVtcCBlbnRyeSBwb2ludCB0byB0aGUgQVBNIEJJT1MsIHdoaWNoIGlzIGNhbGxlZAogCSAqIGZyb20gaW5saW5lIGFzc2VtYmx5LgogCSAqLwpAQCAtMjM1OCwxMiArMjM1NywxMiBAQAogCSAqIGNvZGUgdG8gdGhhdCBDUFUuCiAJICovCiAJZ2R0ID0gZ2V0X2NwdV9nZHRfdGFibGUoMCk7Ci0Jc2V0X2Jhc2UoZ2R0W0FQTV9DUyA+PiAzXSwKLQkJIF9fdmEoKHVuc2lnbmVkIGxvbmcpYXBtX2luZm8uYmlvcy5jc2VnIDw8IDQpKTsKLQlzZXRfYmFzZShnZHRbQVBNX0NTXzE2ID4+IDNdLAotCQkgX192YSgodW5zaWduZWQgbG9uZylhcG1faW5mby5iaW9zLmNzZWdfMTYgPDwgNCkpOwotCXNldF9iYXNlKGdkdFtBUE1fRFMgPj4gM10sCi0JCSBfX3ZhKCh1bnNpZ25lZCBsb25nKWFwbV9pbmZvLmJpb3MuZHNlZyA8PCA0KSk7CisJc2V0X2Rlc2NfYmFzZSgmZ2R0W0FQTV9DUyA+PiAzXSwKKwkJICh1bnNpZ25lZCBsb25nKV9fdmEoKHVuc2lnbmVkIGxvbmcpYXBtX2luZm8uYmlvcy5jc2VnIDw8IDQpKTsKKwlzZXRfZGVzY19iYXNlKCZnZHRbQVBNX0NTXzE2ID4+IDNdLAorCQkgKHVuc2lnbmVkIGxvbmcpX192YSgodW5zaWduZWQgbG9uZylhcG1faW5mby5iaW9zLmNzZWdfMTYgPDwgNCkpOworCXNldF9kZXNjX2Jhc2UoJmdkdFtBUE1fRFMgPj4gM10sCisJCSAodW5zaWduZWQgbG9uZylfX3ZhKCh1bnNpZ25lZCBsb25nKWFwbV9pbmZvLmJpb3MuZHNlZyA8PCA0KSk7CiAKIAlwcm9jX2NyZWF0ZSgiYXBtIiwgMCwgTlVMTCwgJmFwbV9maWxlX29wcyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMKaW5kZXggODk4ZWNjNC4uNGE2YWVlZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMKQEAgLTMsNiArMyw3IEBACiAgKiBUaGlzIGNvZGUgZ2VuZXJhdGVzIHJhdyBhc20gb3V0cHV0IHdoaWNoIGlzIHBvc3QtcHJvY2Vzc2VkIHRvIGV4dHJhY3QKICAqIGFuZCBmb3JtYXQgdGhlIHJlcXVpcmVkIGRhdGEuCiAgKi8KKyNkZWZpbmUgQ09NUElMRV9PRkZTRVRTCiAKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDYzZmRkY2QwLi4yMmE0N2M4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTIsNyArMiw3IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgpAQCAtNDUsOCArNDUsOCBAQAogI2RlZmluZSBDQkFSX0VOQgkoMHg4MDAwMDAwMCkKICNkZWZpbmUgQ0JBUl9LRVkJKDBYMDAwMDAwQ0IpCiAJaWYgKGMtPng4Nl9tb2RlbCA9PSA5IHx8IGMtPng4Nl9tb2RlbCA9PSAxMCkgewotCQlpZiAoaW5sIChDQkFSKSAmIENCQVJfRU5CKQotCQkJb3V0bCAoMCB8IENCQVJfS0VZLCBDQkFSKTsKKwkJaWYgKGlubChDQkFSKSAmIENCQVJfRU5CKQorCQkJb3V0bCgwIHwgQ0JBUl9LRVksIENCQVIpOwogCX0KIH0KIApAQCAtODcsOSArODcsMTAgQEAKIAkJZCA9IGQyLWQ7CiAKIAkJaWYgKGQgPiAyMCpLNl9CVUdfTE9PUCkKLQkJCXByaW50aygic3lzdGVtIHN0YWJpbGl0eSBtYXkgYmUgaW1wYWlyZWQgd2hlbiBtb3JlIHRoYW4gMzIgTUIgYXJlIHVzZWQuXG4iKTsKKwkJCXByaW50ayhLRVJOX0NPTlQKKwkJCQkic3lzdGVtIHN0YWJpbGl0eSBtYXkgYmUgaW1wYWlyZWQgd2hlbiBtb3JlIHRoYW4gMzIgTUIgYXJlIHVzZWQuXG4iKTsKIAkJZWxzZQotCQkJcHJpbnRrKCJwcm9iYWJseSBPSyAoYWZ0ZXIgQjk3MzB4eHh4KS5cbiIpOworCQkJcHJpbnRrKEtFUk5fQ09OVCAicHJvYmFibHkgT0sgKGFmdGVyIEI5NzMweHh4eCkuXG4iKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUGxlYXNlIHNlZSBodHRwOi8vbWVtYnJlcy5seWNvcy5mci9wb3Vsb3QvazZidWcuaHRtbFxuIik7CiAJfQogCkBAIC0yMTksOCArMjIwLDkgQEAKIAlpZiAoKGMtPng4Nl9tb2RlbCA9PSA4ICYmIGMtPng4Nl9tYXNrID49IDEpIHx8IChjLT54ODZfbW9kZWwgPiA4KSkgewogCQlyZG1zcihNU1JfSzdfQ0xLX0NUTCwgbCwgaCk7CiAJCWlmICgobCAmIDB4ZmZmMDAwMDApICE9IDB4MjAwMDAwMDApIHsKLQkJCXByaW50ayAoIkNQVTogQ0xLX0NUTCBNU1Igd2FzICV4LiBSZXByb2dyYW1taW5nIHRvICV4XG4iLCBsLAotCQkJCSgobCAmIDB4MDAwZmZmZmYpfDB4MjAwMDAwMDApKTsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAiQ1BVOiBDTEtfQ1RMIE1TUiB3YXMgJXguIFJlcHJvZ3JhbW1pbmcgdG8gJXhcbiIsCisJCQkJCWwsICgobCAmIDB4MDAwZmZmZmYpfDB4MjAwMDAwMDApKTsKIAkJCXdybXNyKE1TUl9LN19DTEtfQ1RMLCAobCAmIDB4MDAwZmZmZmYpfDB4MjAwMDAwMDAsIGgpOwogCQl9CiAJfQpAQCAtMjUxLDYgKzI1Myw2NCBAQAogI2VuZGlmCiAKIC8qCisgKiBGaXh1cCBjb3JlIHRvcG9sb2d5IGluZm9ybWF0aW9uIGZvciBBTUQgbXVsdGktbm9kZSBwcm9jZXNzb3JzLgorICogQXNzdW1wdGlvbiAxOiBOdW1iZXIgb2YgY29yZXMgaW4gZWFjaCBpbnRlcm5hbCBub2RlIGlzIHRoZSBzYW1lLgorICogQXNzdW1wdGlvbiAyOiBNaXhlZCBzeXN0ZW1zIHdpdGggYm90aCBzaW5nbGUtbm9kZSBhbmQgZHVhbC1ub2RlCisgKiAgICAgICAgICAgICAgIHByb2Nlc3NvcnMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2X0hUCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgYW1kX2ZpeHVwX2RjbShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCit7CisjaWZkZWYgQ09ORklHX1BDSQorCXUzMiB0LCBjcG47CisJdTggbiwgbl9pZDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyogZml4dXAgdG9wb2xvZ3kgaW5mb3JtYXRpb24gb25seSBvbmNlIGZvciBhIGNvcmUgKi8KKwlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BTURfRENNKSkKKwkJcmV0dXJuOworCisJLyogY2hlY2sgZm9yIG11bHRpLW5vZGUgcHJvY2Vzc29yIG9uIGJvb3QgY3B1ICovCisJdCA9IHJlYWRfcGNpX2NvbmZpZygwLCAyNCwgMywgMHhlOCk7CisJaWYgKCEodCAmICgxIDw8IDI5KSkpCisJCXJldHVybjsKKworCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0FNRF9EQ00pOworCisJLyogY29yZXMgcGVyIG5vZGU6IGVhY2ggaW50ZXJuYWwgbm9kZSBoYXMgaGFsZiB0aGUgbnVtYmVyIG9mIGNvcmVzICovCisJY3BuID0gYy0+eDg2X21heF9jb3JlcyA+PiAxOworCisJLyogZXZlbi1udW1iZXJlZCBOQl9pZCBvZiB0aGlzIGR1YWwtbm9kZSBwcm9jZXNzb3IgKi8KKwluID0gYy0+cGh5c19wcm9jX2lkIDw8IDE7CisKKwkvKgorCSAqIGRldGVybWluZSBpbnRlcm5hbCBub2RlIGlkIGFuZCBhc3NpZ24gY29yZXMgZmlmdHktZmlmdHkgdG8KKwkgKiBlYWNoIG5vZGUgb2YgdGhlIGR1YWwtbm9kZSBwcm9jZXNzb3IKKwkgKi8KKwl0ID0gcmVhZF9wY2lfY29uZmlnKDAsIDI0ICsgbiwgMywgMHhlOCk7CisJbiA9ICh0Pj4zMCkgJiAweDM7CisJaWYgKG4gPT0gMCkgeworCQlpZiAoYy0+Y3B1X2NvcmVfaWQgPCBjcG4pCisJCQluX2lkID0gMDsKKwkJZWxzZQorCQkJbl9pZCA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKGMtPmNwdV9jb3JlX2lkIDwgY3BuKQorCQkJbl9pZCA9IDE7CisJCWVsc2UKKwkJCW5faWQgPSAwOworCX0KKworCS8qIGNvbXB1dGUgZW50aXJlIE5vZGVJRCwgdXNlIGxsY19zaGFyZWRfbWFwIHRvIHN0b3JlIHNpYmxpbmcgaW5mbyAqLworCXBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSA9IChjLT5waHlzX3Byb2NfaWQgPDwgMSkgKyBuX2lkOworCisJLyogZml4dXAgY29yZSBpZCB0byBiZSBpbiByYW5nZSBmcm9tIDAgdG8gY3BuICovCisJYy0+Y3B1X2NvcmVfaWQgPSBjLT5jcHVfY29yZV9pZCAlIGNwbjsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qCiAgKiBPbiBhIEFNRCBkdWFsIGNvcmUgc2V0dXAgdGhlIGxvd2VyIGJpdHMgb2YgdGhlIEFQSUMgaWQgZGlzdGluZ3VzaCB0aGUgY29yZXMuCiAgKiBBc3N1bWVzIG51bWJlciBvZiBjb3JlcyBpcyBhIHBvd2VyIG9mIHR3by4KICAqLwpAQCAtMjY3LDYgKzMyNyw5IEBACiAJYy0+cGh5c19wcm9jX2lkID0gYy0+aW5pdGlhbF9hcGljaWQgPj4gYml0czsKIAkvKiB1c2Ugc29ja2V0IElEIGFsc28gZm9yIGxhc3QgbGV2ZWwgY2FjaGUgKi8KIAlwZXJfY3B1KGNwdV9sbGNfaWQsIGNwdSkgPSBjLT5waHlzX3Byb2NfaWQ7CisJLyogZml4dXAgdG9wb2xvZ3kgaW5mb3JtYXRpb24gb24gbXVsdGktbm9kZSBwcm9jZXNzb3JzICovCisJaWYgKChjLT54ODYgPT0gMHgxMCkgJiYgKGMtPng4Nl9tb2RlbCA9PSA5KSkKKwkJYW1kX2ZpeHVwX2RjbShjKTsKICNlbmRpZgogfQogCkBAIC0yNzUsOSArMzM4LDEwIEBACiAjaWYgZGVmaW5lZChDT05GSUdfTlVNQSkgJiYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IG5vZGU7Ci0JdW5zaWduZWQgYXBpY2lkID0gY3B1X2hhc19hcGljID8gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkgOiBjLT5hcGljaWQ7CisJdW5zaWduZWQgYXBpY2lkID0gYy0+YXBpY2lkOwogCi0Jbm9kZSA9IGMtPnBoeXNfcHJvY19pZDsKKwlub2RlID0gcGVyX2NwdShjcHVfbGxjX2lkLCBjcHUpOworCiAJaWYgKGFwaWNpZF90b19ub2RlW2FwaWNpZF0gIT0gTlVNQV9OT19OT0RFKQogCQlub2RlID0gYXBpY2lkX3RvX25vZGVbYXBpY2lkXTsKIAlpZiAoIW5vZGVfb25saW5lKG5vZGUpKSB7CkBAIC0zOTgsMTggKzQ2MiwzMCBAQAogCQl1MzIgbGV2ZWw7CiAKIAkJbGV2ZWwgPSBjcHVpZF9lYXgoMSk7Ci0JCWlmKChsZXZlbCA+PSAweDBmNDggJiYgbGV2ZWwgPCAweDBmNTApIHx8IGxldmVsID49IDB4MGY1OCkKKwkJaWYgKChsZXZlbCA+PSAweDBmNDggJiYgbGV2ZWwgPCAweDBmNTApIHx8IGxldmVsID49IDB4MGY1OCkKIAkJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1JFUF9HT09EKTsKIAogCQkvKgogCQkgKiBTb21lIEJJT1NlcyBpbmNvcnJlY3RseSBmb3JjZSB0aGlzIGZlYXR1cmUsIGJ1dCBvbmx5IEs4CiAJCSAqIHJldmlzaW9uIEQgKG1vZGVsID0gMHgxNCkgYW5kIGxhdGVyIGFjdHVhbGx5IHN1cHBvcnQgaXQuCisJCSAqIChBTUQgRXJyYXR1bSAjMTEwLCBkb2NJZDogMjU3NTkpLgogCQkgKi8KLQkJaWYgKGMtPng4Nl9tb2RlbCA8IDB4MTQpCisJCWlmIChjLT54ODZfbW9kZWwgPCAweDE0ICYmIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfTEFIRl9MTSkpIHsKKwkJCXU2NCB2YWw7CisKIAkJCWNsZWFyX2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfTEFIRl9MTSk7CisJCQlpZiAoIXJkbXNybF9hbWRfc2FmZSgweGMwMDExMDBkLCAmdmFsKSkgeworCQkJCXZhbCAmPSB+KDFVTEwgPDwgMzIpOworCQkJCXdybXNybF9hbWRfc2FmZSgweGMwMDExMDBkLCB2YWwpOworCQkJfQorCQl9CisKIAl9CiAJaWYgKGMtPng4NiA9PSAweDEwIHx8IGMtPng4NiA9PSAweDExKQogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9SRVBfR09PRCk7CisKKwkvKiBnZXQgYXBpY2lkIGluc3RlYWQgb2YgaW5pdGlhbCBhcGljIGlkIGZyb20gY3B1aWQgKi8KKwljLT5hcGljaWQgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKICNlbHNlCiAKIAkvKgpAQCAtNDk0LDI3ICs1NzAsMzAgQEAKIAkJICogYmVuZWZpdCBpbiBkb2luZyBzby4KIAkJICovCiAJCWlmICghcmRtc3JsX3NhZmUoTVNSX0s4X1RTRUdfQUREUiwgJnRzZWcpKSB7Ci0JCSAgICBwcmludGsoS0VSTl9ERUJVRyAidHNlZzogJTAxMGxseFxuIiwgdHNlZyk7Ci0JCSAgICBpZiAoKHRzZWc+PlBNRF9TSElGVCkgPAorCQkJcHJpbnRrKEtFUk5fREVCVUcgInRzZWc6ICUwMTBsbHhcbiIsIHRzZWcpOworCQkJaWYgKCh0c2VnPj5QTURfU0hJRlQpIDwKIAkJCQkobWF4X2xvd19wZm5fbWFwcGVkPj4oUE1EX1NISUZULVBBR0VfU0hJRlQpKSB8fAotCQkJKCh0c2VnPj5QTURfU0hJRlQpIDwKKwkJCQkoKHRzZWc+PlBNRF9TSElGVCkgPAogCQkJCShtYXhfcGZuX21hcHBlZD4+KFBNRF9TSElGVC1QQUdFX1NISUZUKSkgJiYKLQkJCSAodHNlZz4+UE1EX1NISUZUKSA+PSAoMVVMTDw8KDMyIC0gUE1EX1NISUZUKSkpKQotCQkJc2V0X21lbW9yeV80aygodW5zaWduZWQgbG9uZylfX3ZhKHRzZWcpLCAxKTsKKwkJCQkodHNlZz4+UE1EX1NISUZUKSA+PSAoMVVMTDw8KDMyIC0gUE1EX1NISUZUKSkpKQorCQkJCXNldF9tZW1vcnlfNGsoKHVuc2lnbmVkIGxvbmcpX192YSh0c2VnKSwgMSk7CiAJCX0KIAl9CiAjZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19YODZfMzIKLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19jcHVpbml0IGFtZF9zaXplX2NhY2hlKHN0cnVjdCBjcHVpbmZvX3g4NiAqYywgdW5zaWduZWQgaW50IHNpemUpCitzdGF0aWMgdW5zaWduZWQgaW50IF9fY3B1aW5pdCBhbWRfc2l6ZV9jYWNoZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMsCisJCQkJCQkJdW5zaWduZWQgaW50IHNpemUpCiB7CiAJLyogQU1EIGVycmF0YSBUMTMgKG9yZGVyICMyMTkyMikgKi8KIAlpZiAoKGMtPng4NiA9PSA2KSkgewotCQlpZiAoYy0+eDg2X21vZGVsID09IDMgJiYgYy0+eDg2X21hc2sgPT0gMCkJLyogRHVyb24gUmV2IEEwICovCisJCS8qIER1cm9uIFJldiBBMCAqLworCQlpZiAoYy0+eDg2X21vZGVsID09IDMgJiYgYy0+eDg2X21hc2sgPT0gMCkKIAkJCXNpemUgPSA2NDsKKwkJLyogVGJpcmQgcmV2IEExL0EyICovCiAJCWlmIChjLT54ODZfbW9kZWwgPT0gNCAmJgotCQkgICAgKGMtPng4Nl9tYXNrID09IDAgfHwgYy0+eDg2X21hc2sgPT0gMSkpCS8qIFRiaXJkIHJldiBBMS9BMiAqLworCQkJKGMtPng4Nl9tYXNrID09IDAgfHwgYy0+eDg2X21hc2sgPT0gMSkpCiAJCQlzaXplID0gMjU2OwogCX0KIAlyZXR1cm4gc2l6ZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMKaW5kZXggYzhlMzE1Zi4uMDFhMjY1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAogCWJvb3RfY3B1X2RhdGEuZmRpdl9idWcgPSBmZGl2X2J1ZzsKIAlpZiAoYm9vdF9jcHVfZGF0YS5mZGl2X2J1ZykKLQkJcHJpbnRrKCJIbW0sIEZQVSB3aXRoIEZESVYgYnVnLlxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkhtbSwgRlBVIHdpdGggRkRJViBidWcuXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2hsdCh2b2lkKQpAQCAtOTgsNyArOTgsNyBAQAogCWhhbHQoKTsKIAloYWx0KCk7CiAJaGFsdCgpOwotCXByaW50aygiT0suXG4iKTsKKwlwcmludGsoS0VSTl9DT05UICJPSy5cbiIpOwogfQogCiAvKgpAQCAtMTIyLDkgKzEyMiw5IEBACiAJICogQ1BVIGhhcmQuIFRvbyBiYWQuCiAJICovCiAJaWYgKHJlcyAhPSAxMjM0NTY3OCkKLQkJcHJpbnRrKCJCdWdneS5cbiIpOworCQlwcmludGsoS0VSTl9DT05UICJCdWdneS5cbiIpOwogCWVsc2UKLQkJcHJpbnRrKCJPSy5cbiIpOworCQlwcmludGsoS0VSTl9DT05UICJPSy5cbiIpOwogI2VuZGlmCiB9CiAKQEAgLTE1Niw3ICsxNTYsNyBAQAogewogCWlkZW50aWZ5X2Jvb3RfY3B1KCk7CiAjaWZuZGVmIENPTkZJR19TTVAKLQlwcmludGsoIkNQVTogIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVOiAiKTsKIAlwcmludF9jcHVfaW5mbygmYm9vdF9jcHVfZGF0YSk7CiAjZW5kaWYKIAljaGVja19jb25maWcoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVnc182NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzXzY0LmMKaW5kZXggOWEzZWQwNi4uMDRmMGZlNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzXzY0LmMKQEAgLTE1LDcgKzE1LDcgQEAKIHsKIAlpZGVudGlmeV9ib290X2NwdSgpOwogI2lmICFkZWZpbmVkKENPTkZJR19TTVApCi0JcHJpbnRrKCJDUFU6ICIpOworCXByaW50ayhLRVJOX0lORk8gIkNQVTogIik7CiAJcHJpbnRfY3B1X2luZm8oJmJvb3RfY3B1X2RhdGEpOwogI2VuZGlmCiAJYWx0ZXJuYXRpdmVfaW5zdHJ1Y3Rpb25zKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCA1Y2U2MGE4Li4yMDU1ZmMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vdG9wb2xvZ3kuaD4KLSNpbmNsdWRlIDxhc20vY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgpAQCAtMjgsMTMgKzI4LDEzIEBACiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vaTM4Ny5oPgogI2luY2x1ZGUgPGFzbS9tdHJyLmg+Ci0jaW5jbHVkZSA8YXNtL251bWEuaD4KKyNpbmNsdWRlIDxsaW51eC9udW1hLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vbWNlLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9wYXQuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKICNpbmNsdWRlIDxhc20vdXYvdXYuaD4KQEAgLTk0LDQ1ICs5NCw0NSBAQAogCSAqIFRMUyBkZXNjcmlwdG9ycyBhcmUgY3VycmVudGx5IGF0IGEgZGlmZmVyZW50IHBsYWNlIGNvbXBhcmVkIHRvIGkzODYuCiAJICogSG9wZWZ1bGx5IG5vYm9keSBleHBlY3RzIHRoZW0gYXQgYSBmaXhlZCBwbGFjZSAoV2luZT8pCiAJICovCi0JW0dEVF9FTlRSWV9LRVJORUwzMl9DU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOWIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0tFUk5FTF9DU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGFmOWIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0tFUk5FTF9EU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTMwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUjMyX0NTXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmZiMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFNdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZjMwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9DU10JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwYWZmYjAwIH0gfSB9LAorCVtHRFRfRU5UUllfS0VSTkVMMzJfQ1NdCQk9IEdEVF9FTlRSWV9JTklUKDB4YzA5YiwgMCwgMHhmZmZmZiksCisJW0dEVF9FTlRSWV9LRVJORUxfQ1NdCQk9IEdEVF9FTlRSWV9JTklUKDB4YTA5YiwgMCwgMHhmZmZmZiksCisJW0dEVF9FTlRSWV9LRVJORUxfRFNdCQk9IEdEVF9FTlRSWV9JTklUKDB4YzA5MywgMCwgMHhmZmZmZiksCisJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVIzMl9DU10JPSBHRFRfRU5UUllfSU5JVCgweGMwZmIsIDAsIDB4ZmZmZmYpLAorCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0RTXQk9IEdEVF9FTlRSWV9JTklUKDB4YzBmMywgMCwgMHhmZmZmZiksCisJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1NdCT0gR0RUX0VOVFJZX0lOSVQoMHhhMGZiLCAwLCAweGZmZmZmKSwKICNlbHNlCi0JW0dEVF9FTlRSWV9LRVJORUxfQ1NdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjlhMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9LRVJORUxfRFNdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkyMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1NdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZmEwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EU10JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2ZmMjAwIH0gfSB9LAorCVtHRFRfRU5UUllfS0VSTkVMX0NTXQkJPSBHRFRfRU5UUllfSU5JVCgweGMwOWEsIDAsIDB4ZmZmZmYpLAorCVtHRFRfRU5UUllfS0VSTkVMX0RTXQkJPSBHRFRfRU5UUllfSU5JVCgweGMwOTIsIDAsIDB4ZmZmZmYpLAorCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0NTXQk9IEdEVF9FTlRSWV9JTklUKDB4YzBmYSwgMCwgMHhmZmZmZiksCisJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFNdCT0gR0RUX0VOVFJZX0lOSVQoMHhjMGYyLCAwLCAweGZmZmZmKSwKIAkvKgogCSAqIFNlZ21lbnRzIHVzZWQgZm9yIGNhbGxpbmcgUG5QIEJJT1MgaGF2ZSBieXRlIGdyYW51bGFyaXR5LgogCSAqIFRoZXkgY29kZSBzZWdtZW50cyBhbmQgZGF0YSBzZWdtZW50cyBoYXZlIGZpeGVkIDY0ayBsaW1pdHMsCiAJICogdGhlIHRyYW5zZmVyIHNlZ21lbnQgc2l6ZXMgYXJlIHNldCBhdCBydW4gdGltZS4KIAkgKi8KIAkvKiAzMi1iaXQgY29kZSAqLwotCVtHRFRfRU5UUllfUE5QQklPU19DUzMyXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDlhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9QTlBCSU9TX0NTMzJdCT0gR0RUX0VOVFJZX0lOSVQoMHg0MDlhLCAwLCAweGZmZmYpLAogCS8qIDE2LWJpdCBjb2RlICovCi0JW0dEVF9FTlRSWV9QTlBCSU9TX0NTMTZdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDAwOWEwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX1BOUEJJT1NfQ1MxNl0JPSBHRFRfRU5UUllfSU5JVCgweDAwOWEsIDAsIDB4ZmZmZiksCiAJLyogMTYtYml0IGRhdGEgKi8KLQlbR0RUX0VOVFJZX1BOUEJJT1NfRFNdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDAwMDkyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9QTlBCSU9TX0RTXQkJPSBHRFRfRU5UUllfSU5JVCgweDAwOTIsIDAsIDB4ZmZmZiksCiAJLyogMTYtYml0IGRhdGEgKi8KLQlbR0RUX0VOVFJZX1BOUEJJT1NfVFMxXQkJPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwMDA5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfUE5QQklPU19UUzFdCQk9IEdEVF9FTlRSWV9JTklUKDB4MDA5MiwgMCwgMCksCiAJLyogMTYtYml0IGRhdGEgKi8KLQlbR0RUX0VOVFJZX1BOUEJJT1NfVFMyXQkJPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwMDA5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfUE5QQklPU19UUzJdCQk9IEdEVF9FTlRSWV9JTklUKDB4MDA5MiwgMCwgMCksCiAJLyoKIAkgKiBUaGUgQVBNIHNlZ21lbnRzIGhhdmUgYnl0ZSBncmFudWxhcml0eSBhbmQgdGhlaXIgYmFzZXMKIAkgKiBhcmUgc2V0IGF0IHJ1biB0aW1lLiAgQWxsIGhhdmUgNjRrIGxpbWl0cy4KIAkgKi8KIAkvKiAzMi1iaXQgY29kZSAqLwotCVtHRFRfRU5UUllfQVBNQklPU19CQVNFXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDlhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0VdCT0gR0RUX0VOVFJZX0lOSVQoMHg0MDlhLCAwLCAweGZmZmYpLAogCS8qIDE2LWJpdCBjb2RlICovCi0JW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0UrMV0JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwMDA5YTAwIH0gfSB9LAorCVtHRFRfRU5UUllfQVBNQklPU19CQVNFKzFdCT0gR0RUX0VOVFJZX0lOSVQoMHgwMDlhLCAwLCAweGZmZmYpLAogCS8qIGRhdGEgKi8KLQlbR0RUX0VOVFJZX0FQTUJJT1NfQkFTRSsyXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDkyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0UrMl0JPSBHRFRfRU5UUllfSU5JVCgweDQwOTIsIDAsIDB4ZmZmZiksCiAKLQlbR0RUX0VOVFJZX0VTUEZJWF9TU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX1BFUkNQVV0JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0VTUEZJWF9TU10JCT0gR0RUX0VOVFJZX0lOSVQoMHhjMDkyLCAwLCAweGZmZmZmKSwKKwlbR0RUX0VOVFJZX1BFUkNQVV0JCT0gR0RUX0VOVFJZX0lOSVQoMHhjMDkyLCAwLCAweGZmZmZmKSwKIAlHRFRfU1RBQ0tfQ0FOQVJZX0lOSVQKICNlbmRpZgogfSB9OwpAQCAtOTgyLDE4ICs5ODIsMjYgQEAKIF9fc2V0dXAoImNsZWFyY3B1aWQ9Iiwgc2V0dXBfZGlzYWJsZWNwdWlkKTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKLXN0cnVjdCBkZXNjX3B0ciBpZHRfZGVzY3IgPSB7IDI1NiAqIDE2IC0gMSwgKHVuc2lnbmVkIGxvbmcpIGlkdF90YWJsZSB9Oworc3RydWN0IGRlc2NfcHRyIGlkdF9kZXNjciA9IHsgTlJfVkVDVE9SUyAqIDE2IC0gMSwgKHVuc2lnbmVkIGxvbmcpIGlkdF90YWJsZSB9OwogCiBERUZJTkVfUEVSX0NQVV9GSVJTVCh1bmlvbiBpcnFfc3RhY2tfdW5pb24sCiAJCSAgICAgaXJxX3N0YWNrX3VuaW9uKSBfX2FsaWduZWQoUEFHRV9TSVpFKTsKIAotREVGSU5FX1BFUl9DUFUoY2hhciAqLCBpcnFfc3RhY2tfcHRyKSA9Ci0JaW5pdF9wZXJfY3B1X3ZhcihpcnFfc3RhY2tfdW5pb24uaXJxX3N0YWNrKSArIElSUV9TVEFDS19TSVpFIC0gNjQ7CisvKgorICogVGhlIGZvbGxvd2luZyBmb3VyIHBlcmNwdSB2YXJpYWJsZXMgYXJlIGhvdC4gIEFsaWduIGN1cnJlbnRfdGFzayB0bworICogY2FjaGVsaW5lIHNpemUgc3VjaCB0aGF0IGFsbCBmb3VyIGZhbGwgaW4gdGhlIHNhbWUgY2FjaGVsaW5lLgorICovCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgY3VycmVudF90YXNrKSBfX19fY2FjaGVsaW5lX2FsaWduZWQgPQorCSZpbml0X3Rhc2s7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woY3VycmVudF90YXNrKTsKIAogREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywga2VybmVsX3N0YWNrKSA9CiAJKHVuc2lnbmVkIGxvbmcpJmluaXRfdGhyZWFkX3VuaW9uIC0gS0VSTkVMX1NUQUNLX09GRlNFVCArIFRIUkVBRF9TSVpFOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGtlcm5lbF9zdGFjayk7CiAKK0RFRklORV9QRVJfQ1BVKGNoYXIgKiwgaXJxX3N0YWNrX3B0cikgPQorCWluaXRfcGVyX2NwdV92YXIoaXJxX3N0YWNrX3VuaW9uLmlycV9zdGFjaykgKyBJUlFfU1RBQ0tfU0laRSAtIDY0OworCiBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGlycV9jb3VudCkgPSAtMTsKIAogLyoKQEAgLTEwMDgsOCArMTAxNiw3IEBACiB9OwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFVfUEFHRV9BTElHTkVEKGNoYXIsIGV4Y2VwdGlvbl9zdGFja3MKLQlbKE5fRVhDRVBUSU9OX1NUQUNLUyAtIDEpICogRVhDRVBUSU9OX1NUS1NaICsgREVCVUdfU1RLU1pdKQotCV9fYWxpZ25lZChQQUdFX1NJWkUpOworCVsoTl9FWENFUFRJT05fU1RBQ0tTIC0gMSkgKiBFWENFUFRJT05fU1RLU1ogKyBERUJVR19TVEtTWl0pOwogCiAvKiBNYXkgbm90IGJlIG1hcmtlZCBfX2luaXQ6IHVzZWQgYnkgc29mdHdhcmUgc3VzcGVuZCAqLwogdm9pZCBzeXNjYWxsX2luaXQodm9pZCkKQEAgLTEwNDIsOCArMTA0OSwxMSBAQAogCiAjZWxzZQkvKiBDT05GSUdfWDg2XzY0ICovCiAKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBjdXJyZW50X3Rhc2spID0gJmluaXRfdGFzazsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChjdXJyZW50X3Rhc2spOworCiAjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCi1ERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBzdGFja19jYW5hcnkpOworREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3Qgc3RhY2tfY2FuYXJ5LCBzdGFja19jYW5hcnkpOwogI2VuZGlmCiAKIC8qIE1ha2Ugc3VyZSAlZnMgYW5kICVncyBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgaW4gaWRsZSB0aHJlYWRzICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdV9kZWJ1Zy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVfZGVidWcuYwppbmRleCA2YjJhNTJkLi5kY2EzMjVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdV9kZWJ1Zy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1X2RlYnVnLmMKQEAgLTMwLDggKzMwLDggQEAKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2NwdVhfYmFzZSwgY3B1X2FycltDUFVfUkVHX0FMTF9CSVRdKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X3ByaXZhdGUgKiwgcHJpdl9hcnJbTUFYX0NQVV9GSUxFU10pOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfY3B1WF9iYXNlIFtDUFVfUkVHX0FMTF9CSVRdLCBjcHVfYXJyKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X3ByaXZhdGUgKiBbTUFYX0NQVV9GSUxFU10sIHByaXZfYXJyKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGNwdV9wcml2X2NvdW50KTsKIAogc3RhdGljIERFRklORV9NVVRFWChjcHVfZGVidWdfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2N5cml4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2N5cml4LmMKaW5kZXggNTkzMTcxZS4uMTk4MDdiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jeXJpeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3lyaXguYwpAQCAtMywxMCArMywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1jeXJpeC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KLSNpbmNsdWRlIDxhc20vdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9wY2ktZGlyZWN0Lmg+CiAjaW5jbHVkZSA8YXNtL3RzYy5oPgogCkBAIC0yODIsNyArMjgyLDggQEAKIAkJICogIFRoZSA1NTEwLzU1MjAgY29tcGFuaW9uIGNoaXBzIGhhdmUgYSBmdW5reSBQSVQuCiAJCSAqLwogCQlpZiAodmVuZG9yID09IFBDSV9WRU5ET1JfSURfQ1lSSVggJiYKLQkgKGRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MTAgfHwgZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUyMCkpCisJCQkoZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUxMCB8fAorCQkJCQlkZXZpY2UgPT0gUENJX0RFVklDRV9JRF9DWVJJWF81NTIwKSkKIAkJCW1hcmtfdHNjX3Vuc3RhYmxlKCJjeXJpeCA1NTEwLzU1MjAgZGV0ZWN0ZWQiKTsKIAl9CiAjZW5kaWYKQEAgLTI5OSw3ICszMDAsOCBAQAogCQkJICogID8gIDogMHg3eAogCQkJICogR1gxIDogMHg4eCAgICAgICAgICBHWDEgIGRhdGFzaGVldCA1NgogCQkJICovCi0JCQlpZiAoKDB4MzAgPD0gZGlyMSAmJiBkaXIxIDw9IDB4NmYpIHx8ICgweDgwIDw9IGRpcjEgJiYgZGlyMSA8PSAweDhmKSkKKwkJCWlmICgoMHgzMCA8PSBkaXIxICYmIGRpcjEgPD0gMHg2ZikgfHwKKwkJCQkJKDB4ODAgPD0gZGlyMSAmJiBkaXIxIDw9IDB4OGYpKQogCQkJCWdlb2RlX2NvbmZpZ3VyZSgpOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgeyAvKiBNZWRpYUdYICovCkBAIC00MjcsOSArNDI5LDEyIEBACiAJCQlwcmludGsoS0VSTl9JTkZPICJFbmFibGluZyBDUFVJRCBvbiBDeXJpeCBwcm9jZXNzb3IuXG4iKTsKIAkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJCWNjcjMgPSBnZXRDeDg2KENYODZfQ0NSMyk7Ci0JCQlzZXRDeDg2KENYODZfQ0NSMywgKGNjcjMgJiAweDBmKSB8IDB4MTApOyAgICAgICAvKiBlbmFibGUgTUFQRU4gICovCi0JCQlzZXRDeDg2X29sZChDWDg2X0NDUjQsIGdldEN4ODZfb2xkKENYODZfQ0NSNCkgfCAweDgwKTsgIC8qIGVuYWJsZSBjcHVpZCAgKi8KLQkJCXNldEN4ODYoQ1g4Nl9DQ1IzLCBjY3IzKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2FibGUgTUFQRU4gKi8KKwkJCS8qIGVuYWJsZSBNQVBFTiAgKi8KKwkJCXNldEN4ODYoQ1g4Nl9DQ1IzLCAoY2NyMyAmIDB4MGYpIHwgMHgxMCk7CisJCQkvKiBlbmFibGUgY3B1aWQgICovCisJCQlzZXRDeDg2X29sZChDWDg2X0NDUjQsIGdldEN4ODZfb2xkKENYODZfQ0NSNCkgfCAweDgwKTsKKwkJCS8qIGRpc2FibGUgTUFQRU4gKi8KKwkJCXNldEN4ODYoQ1g4Nl9DQ1IzLCBjY3IzKTsKIAkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaHlwZXJ2aXNvci5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9oeXBlcnZpc29yLmMKaW5kZXggZmI1Yjg2YS4uOTNiYThlZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9oeXBlcnZpc29yLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9oeXBlcnZpc29yLmMKQEAgLTI4LDExICsyOCwxMCBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fY3B1aW5pdAogZGV0ZWN0X2h5cGVydmlzb3JfdmVuZG9yKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQlpZiAodm13YXJlX3BsYXRmb3JtKCkpIHsKKwlpZiAodm13YXJlX3BsYXRmb3JtKCkpCiAJCWMtPng4Nl9oeXBlcl92ZW5kb3IgPSBYODZfSFlQRVJfVkVORE9SX1ZNV0FSRTsKLQl9IGVsc2UgeworCWVsc2UKIAkJYy0+eDg2X2h5cGVyX3ZlbmRvciA9IFg4Nl9IWVBFUl9WRU5ET1JfTk9ORTsKLQl9CiB9CiAKIHVuc2lnbmVkIGxvbmcgZ2V0X2h5cGVydmlzb3JfdHNjX2ZyZXEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwppbmRleCAzMjYwYWIwLi44MGE3MjJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCkBAIC03LDE3ICs3LDE3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9kcy5oPgogI2luY2x1ZGUgPGFzbS9idWdzLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotI2luY2x1ZGUgPGFzbS90b3BvbG9neS5oPgorI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CiAjaW5jbHVkZSA8YXNtL251bWFfNjQuaD4KICNlbmRpZgogCkBAIC0xNzQsNyArMTc0LDggQEAKICNpZmRlZiBDT05GSUdfWDg2X0YwMEZfQlVHCiAJLyoKIAkgKiBBbGwgY3VycmVudCBtb2RlbHMgb2YgUGVudGl1bSBhbmQgUGVudGl1bSB3aXRoIE1NWCB0ZWNobm9sb2d5IENQVXMKLQkgKiBoYXZlIHRoZSBGMCAwRiBidWcsIHdoaWNoIGxldHMgbm9ucHJpdmlsZWdlZCB1c2VycyBsb2NrIHVwIHRoZSBzeXN0ZW0uCisJICogaGF2ZSB0aGUgRjAgMEYgYnVnLCB3aGljaCBsZXRzIG5vbnByaXZpbGVnZWQgdXNlcnMgbG9jayB1cCB0aGUKKwkgKiBzeXN0ZW0uCiAJICogTm90ZSB0aGF0IHRoZSB3b3JrYXJvdW5kIG9ubHkgc2hvdWxkIGJlIGluaXRpYWxpemVkIG9uY2UuLi4KIAkgKi8KIAljLT5mMDBmX2J1ZyA9IDA7CkBAIC0yMDcsNyArMjA4LDcgQEAKIAkJCXByaW50ayAoS0VSTl9JTkZPICJDUFU6IEMwIHN0ZXBwaW5nIFA0IFhlb24gZGV0ZWN0ZWQuXG4iKTsKIAkJCXByaW50ayAoS0VSTl9JTkZPICJDUFU6IERpc2FibGluZyBoYXJkd2FyZSBwcmVmZXRjaGluZyAoRXJyYXRhIDAzNylcbiIpOwogCQkJbG8gfD0gTVNSX0lBMzJfTUlTQ19FTkFCTEVfUFJFRkVUQ0hfRElTQUJMRTsKLQkJCXdybXNyIChNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbG8sIGhpKTsKKwkJCXdybXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsbywgaGkpOwogCQl9CiAJfQogCkBAIC0yODMsNyArMjg0LDcgQEAKIAkvKiBJbnRlbCBoYXMgYSBub24tc3RhbmRhcmQgZGVwZW5kZW5jeSBvbiAlZWN4IGZvciB0aGlzIENQVUlEIGxldmVsLiAqLwogCWNwdWlkX2NvdW50KDQsIDAsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwogCWlmIChlYXggJiAweDFmKQotCQlyZXR1cm4gKChlYXggPj4gMjYpICsgMSk7CisJCXJldHVybiAoZWF4ID4+IDI2KSArIDE7CiAJZWxzZQogCQlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IDc4OWVmZTIuLjgwNGM0MGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKglDaGFuZ2VzOgogICoJVmVua2F0ZXNoIFBhbGxpcGFkaQk6IEFkZGluZyBjYWNoZSBpZGVudGlmaWNhdGlvbiB0aHJvdWdoIGNwdWlkKDQpCi0gKgkJQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPjogV29yayB3aXRoIENQVSBob3RwbHVnIGluZnJhc3RydWN0dXJlLgorICoJQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPjogV29yayB3aXRoIENQVSBob3RwbHVnIGluZnJhc3RydWN0dXJlLgogICoJQW5kaSBLbGVlbiAvIEFuZHJlYXMgSGVycm1hbm4JOiBDUFVJRDQgZW11bGF0aW9uIG9uIEFNRC4KICAqLwogCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGFzbS9rOC5oPgogCiAjZGVmaW5lIExWTF8xX0lOU1QJMQpAQCAtMjUsMTQgKzI1LDE1IEBACiAjZGVmaW5lIExWTF8zCQk0CiAjZGVmaW5lIExWTF9UUkFDRQk1CiAKLXN0cnVjdCBfY2FjaGVfdGFibGUKLXsKK3N0cnVjdCBfY2FjaGVfdGFibGUgewogCXVuc2lnbmVkIGNoYXIgZGVzY3JpcHRvcjsKIAljaGFyIGNhY2hlX3R5cGU7CiAJc2hvcnQgc2l6ZTsKIH07CiAKLS8qIGFsbCB0aGUgY2FjaGUgZGVzY3JpcHRvciB0eXBlcyB3ZSBjYXJlIGFib3V0IChubyBUTEIgb3IgdHJhY2UgY2FjaGUgZW50cmllcykgKi8KKy8qIEFsbCB0aGUgY2FjaGUgZGVzY3JpcHRvciB0eXBlcyB3ZSBjYXJlIGFib3V0IChubyBUTEIgb3IKKyAgIHRyYWNlIGNhY2hlIGVudHJpZXMpICovCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgX2NhY2hlX3RhYmxlIF9fY3B1aW5pdGNvbnN0IGNhY2hlX3RhYmxlW10gPQogewogCXsgMHgwNiwgTFZMXzFfSU5TVCwgOCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCkBAIC0xMDUsOCArMTA2LDcgQEAKIH07CiAKIAotZW51bSBfY2FjaGVfdHlwZQoteworZW51bSBfY2FjaGVfdHlwZSB7CiAJQ0FDSEVfVFlQRV9OVUxMCT0gMCwKIAlDQUNIRV9UWVBFX0RBVEEgPSAxLAogCUNBQ0hFX1RZUEVfSU5TVCA9IDIsCkBAIC0xNzAsMzEgKzE3MCwzMSBAQAogICAgTWF5YmUgbGF0ZXIgKi8KIHVuaW9uIGwxX2NhY2hlIHsKIAlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsaW5lX3NpemUgOiA4OwotCQl1bnNpZ25lZCBsaW5lc19wZXJfdGFnIDogODsKLQkJdW5zaWduZWQgYXNzb2MgOiA4OwotCQl1bnNpZ25lZCBzaXplX2luX2tiIDogODsKKwkJdW5zaWduZWQgbGluZV9zaXplOjg7CisJCXVuc2lnbmVkIGxpbmVzX3Blcl90YWc6ODsKKwkJdW5zaWduZWQgYXNzb2M6ODsKKwkJdW5zaWduZWQgc2l6ZV9pbl9rYjo4OwogCX07CiAJdW5zaWduZWQgdmFsOwogfTsKIAogdW5pb24gbDJfY2FjaGUgewogCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGxpbmVfc2l6ZSA6IDg7Ci0JCXVuc2lnbmVkIGxpbmVzX3Blcl90YWcgOiA0OwotCQl1bnNpZ25lZCBhc3NvYyA6IDQ7Ci0JCXVuc2lnbmVkIHNpemVfaW5fa2IgOiAxNjsKKwkJdW5zaWduZWQgbGluZV9zaXplOjg7CisJCXVuc2lnbmVkIGxpbmVzX3Blcl90YWc6NDsKKwkJdW5zaWduZWQgYXNzb2M6NDsKKwkJdW5zaWduZWQgc2l6ZV9pbl9rYjoxNjsKIAl9OwogCXVuc2lnbmVkIHZhbDsKIH07CiAKIHVuaW9uIGwzX2NhY2hlIHsKIAlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsaW5lX3NpemUgOiA4OwotCQl1bnNpZ25lZCBsaW5lc19wZXJfdGFnIDogNDsKLQkJdW5zaWduZWQgYXNzb2MgOiA0OwotCQl1bnNpZ25lZCByZXMgOiAyOwotCQl1bnNpZ25lZCBzaXplX2VuY29kZWQgOiAxNDsKKwkJdW5zaWduZWQgbGluZV9zaXplOjg7CisJCXVuc2lnbmVkIGxpbmVzX3Blcl90YWc6NDsKKwkJdW5zaWduZWQgYXNzb2M6NDsKKwkJdW5zaWduZWQgcmVzOjI7CisJCXVuc2lnbmVkIHNpemVfZW5jb2RlZDoxNDsKIAl9OwogCXVuc2lnbmVkIHZhbDsKIH07CkBAIC0yNDEsNyArMjQxLDcgQEAKIAljYXNlIDA6CiAJCWlmICghbDEtPnZhbCkKIAkJCXJldHVybjsKLQkJYXNzb2MgPSBsMS0+YXNzb2M7CisJCWFzc29jID0gYXNzb2NzW2wxLT5hc3NvY107CiAJCWxpbmVfc2l6ZSA9IGwxLT5saW5lX3NpemU7CiAJCWxpbmVzX3Blcl90YWcgPSBsMS0+bGluZXNfcGVyX3RhZzsKIAkJc2l6ZV9pbl9rYiA9IGwxLT5zaXplX2luX2tiOwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJY2FzZSAyOgogCQlpZiAoIWwyLnZhbCkKIAkJCXJldHVybjsKLQkJYXNzb2MgPSBsMi5hc3NvYzsKKwkJYXNzb2MgPSBhc3NvY3NbbDIuYXNzb2NdOwogCQlsaW5lX3NpemUgPSBsMi5saW5lX3NpemU7CiAJCWxpbmVzX3Blcl90YWcgPSBsMi5saW5lc19wZXJfdGFnOwogCQkvKiBjcHVfZGF0YSBoYXMgZXJyYXRhIGNvcnJlY3Rpb25zIGZvciBLNyBhcHBsaWVkICovCkBAIC0yNTgsMTAgKzI1OCwxNCBAQAogCWNhc2UgMzoKIAkJaWYgKCFsMy52YWwpCiAJCQlyZXR1cm47Ci0JCWFzc29jID0gbDMuYXNzb2M7CisJCWFzc29jID0gYXNzb2NzW2wzLmFzc29jXTsKIAkJbGluZV9zaXplID0gbDMubGluZV9zaXplOwogCQlsaW5lc19wZXJfdGFnID0gbDMubGluZXNfcGVyX3RhZzsKIAkJc2l6ZV9pbl9rYiA9IGwzLnNpemVfZW5jb2RlZCAqIDUxMjsKKwkJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BTURfRENNKSkgeworCQkJc2l6ZV9pbl9rYiA9IHNpemVfaW5fa2IgPj4gMTsKKwkJCWFzc29jID0gYXNzb2MgPj4gMTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm47CkBAIC0yNzAsMTggKzI3NCwxNCBAQAogCWVheC0+c3BsaXQuaXNfc2VsZl9pbml0aWFsaXppbmcgPSAxOwogCWVheC0+c3BsaXQudHlwZSA9IHR5cGVzW2xlYWZdOwogCWVheC0+c3BsaXQubGV2ZWwgPSBsZXZlbHNbbGVhZl07Ci0JaWYgKGxlYWYgPT0gMykKLQkJZWF4LT5zcGxpdC5udW1fdGhyZWFkc19zaGFyaW5nID0KLQkJCWN1cnJlbnRfY3B1X2RhdGEueDg2X21heF9jb3JlcyAtIDE7Ci0JZWxzZQotCQllYXgtPnNwbGl0Lm51bV90aHJlYWRzX3NoYXJpbmcgPSAwOworCWVheC0+c3BsaXQubnVtX3RocmVhZHNfc2hhcmluZyA9IDA7CiAJZWF4LT5zcGxpdC5udW1fY29yZXNfb25fZGllID0gY3VycmVudF9jcHVfZGF0YS54ODZfbWF4X2NvcmVzIC0gMTsKIAogCi0JaWYgKGFzc29jID09IDB4ZikKKwlpZiAoYXNzb2MgPT0gMHhmZmZmKQogCQllYXgtPnNwbGl0LmlzX2Z1bGx5X2Fzc29jaWF0aXZlID0gMTsKIAllYngtPnNwbGl0LmNvaGVyZW5jeV9saW5lX3NpemUgPSBsaW5lX3NpemUgLSAxOwotCWVieC0+c3BsaXQud2F5c19vZl9hc3NvY2lhdGl2aXR5ID0gYXNzb2NzW2Fzc29jXSAtIDE7CisJZWJ4LT5zcGxpdC53YXlzX29mX2Fzc29jaWF0aXZpdHkgPSBhc3NvYyAtIDE7CiAJZWJ4LT5zcGxpdC5waHlzaWNhbF9saW5lX3BhcnRpdGlvbiA9IGxpbmVzX3Blcl90YWcgLSAxOwogCWVjeC0+c3BsaXQubnVtYmVyX29mX3NldHMgPSAoc2l6ZV9pbl9rYiAqIDEwMjQpIC8gbGluZV9zaXplIC8KIAkJKGVieC0+c3BsaXQud2F5c19vZl9hc3NvY2lhdGl2aXR5ICsgMSkgLSAxOwpAQCAtMzUwLDcgKzM1MCw4IEBACiAKIHVuc2lnbmVkIGludCBfX2NwdWluaXQgaW5pdF9pbnRlbF9jYWNoZWluZm8oc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCXVuc2lnbmVkIGludCB0cmFjZSA9IDAsIGwxaSA9IDAsIGwxZCA9IDAsIGwyID0gMCwgbDMgPSAwOyAvKiBDYWNoZSBzaXplcyAqLworCS8qIENhY2hlIHNpemVzICovCisJdW5zaWduZWQgaW50IHRyYWNlID0gMCwgbDFpID0gMCwgbDFkID0gMCwgbDIgPSAwLCBsMyA9IDA7CiAJdW5zaWduZWQgaW50IG5ld19sMWQgPSAwLCBuZXdfbDFpID0gMDsgLyogQ2FjaGUgc2l6ZXMgZnJvbSBjcHVpZCg0KSAqLwogCXVuc2lnbmVkIGludCBuZXdfbDIgPSAwLCBuZXdfbDMgPSAwLCBpOyAvKiBDYWNoZSBzaXplcyBmcm9tIGNwdWlkKDQpICovCiAJdW5zaWduZWQgaW50IGwyX2lkID0gMCwgbDNfaWQgPSAwLCBudW1fdGhyZWFkc19zaGFyaW5nLCBpbmRleF9tc2I7CkBAIC0zNzcsOCArMzc4LDggQEAKIAogCQkJcmV0dmFsID0gY3B1aWQ0X2NhY2hlX2xvb2t1cF9yZWdzKGksICZ0aGlzX2xlYWYpOwogCQkJaWYgKHJldHZhbCA+PSAwKSB7Ci0JCQkJc3dpdGNoKHRoaXNfbGVhZi5lYXguc3BsaXQubGV2ZWwpIHsKLQkJCQkgICAgY2FzZSAxOgorCQkJCXN3aXRjaCAodGhpc19sZWFmLmVheC5zcGxpdC5sZXZlbCkgeworCQkJCWNhc2UgMToKIAkJCQkJaWYgKHRoaXNfbGVhZi5lYXguc3BsaXQudHlwZSA9PQogCQkJCQkJCUNBQ0hFX1RZUEVfREFUQSkKIAkJCQkJCW5ld19sMWQgPSB0aGlzX2xlYWYuc2l6ZS8xMDI0OwpAQCAtMzg2LDE5ICszODcsMjAgQEAKIAkJCQkJCQlDQUNIRV9UWVBFX0lOU1QpCiAJCQkJCQluZXdfbDFpID0gdGhpc19sZWFmLnNpemUvMTAyNDsKIAkJCQkJYnJlYWs7Ci0JCQkJICAgIGNhc2UgMjoKKwkJCQljYXNlIDI6CiAJCQkJCW5ld19sMiA9IHRoaXNfbGVhZi5zaXplLzEwMjQ7CiAJCQkJCW51bV90aHJlYWRzX3NoYXJpbmcgPSAxICsgdGhpc19sZWFmLmVheC5zcGxpdC5udW1fdGhyZWFkc19zaGFyaW5nOwogCQkJCQlpbmRleF9tc2IgPSBnZXRfY291bnRfb3JkZXIobnVtX3RocmVhZHNfc2hhcmluZyk7CiAJCQkJCWwyX2lkID0gYy0+YXBpY2lkID4+IGluZGV4X21zYjsKIAkJCQkJYnJlYWs7Ci0JCQkJICAgIGNhc2UgMzoKKwkJCQljYXNlIDM6CiAJCQkJCW5ld19sMyA9IHRoaXNfbGVhZi5zaXplLzEwMjQ7CiAJCQkJCW51bV90aHJlYWRzX3NoYXJpbmcgPSAxICsgdGhpc19sZWFmLmVheC5zcGxpdC5udW1fdGhyZWFkc19zaGFyaW5nOwotCQkJCQlpbmRleF9tc2IgPSBnZXRfY291bnRfb3JkZXIobnVtX3RocmVhZHNfc2hhcmluZyk7CisJCQkJCWluZGV4X21zYiA9IGdldF9jb3VudF9vcmRlcigKKwkJCQkJCQludW1fdGhyZWFkc19zaGFyaW5nKTsKIAkJCQkJbDNfaWQgPSBjLT5hcGljaWQgPj4gaW5kZXhfbXNiOwogCQkJCQlicmVhazsKLQkJCQkgICAgZGVmYXVsdDoKKwkJCQlkZWZhdWx0OgogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC00MjEsMjIgKzQyMywyMSBAQAogCQkvKiBOdW1iZXIgb2YgdGltZXMgdG8gaXRlcmF0ZSAqLwogCQluID0gY3B1aWRfZWF4KDIpICYgMHhGRjsKIAotCQlmb3IgKCBpID0gMCA7IGkgPCBuIDsgaSsrICkgeworCQlmb3IgKGkgPSAwIDsgaSA8IG4gOyBpKyspIHsKIAkJCWNwdWlkKDIsICZyZWdzWzBdLCAmcmVnc1sxXSwgJnJlZ3NbMl0sICZyZWdzWzNdKTsKIAogCQkJLyogSWYgYml0IDMxIGlzIHNldCwgdGhpcyBpcyBhbiB1bmtub3duIGZvcm1hdCAqLwotCQkJZm9yICggaiA9IDAgOyBqIDwgMyA7IGorKyApIHsKLQkJCQlpZiAocmVnc1tqXSAmICgxIDw8IDMxKSkgcmVnc1tqXSA9IDA7Ci0JCQl9CisJCQlmb3IgKGogPSAwIDsgaiA8IDMgOyBqKyspCisJCQkJaWYgKHJlZ3Nbal0gJiAoMSA8PCAzMSkpCisJCQkJCXJlZ3Nbal0gPSAwOwogCiAJCQkvKiBCeXRlIDAgaXMgbGV2ZWwgY291bnQsIG5vdCBhIGRlc2NyaXB0b3IgKi8KLQkJCWZvciAoIGogPSAxIDsgaiA8IDE2IDsgaisrICkgeworCQkJZm9yIChqID0gMSA7IGogPCAxNiA7IGorKykgewogCQkJCXVuc2lnbmVkIGNoYXIgZGVzID0gZHBbal07CiAJCQkJdW5zaWduZWQgY2hhciBrID0gMDsKIAogCQkJCS8qIGxvb2sgdXAgdGhpcyBkZXNjcmlwdG9yIGluIHRoZSB0YWJsZSAqLwotCQkJCXdoaWxlIChjYWNoZV90YWJsZVtrXS5kZXNjcmlwdG9yICE9IDApCi0JCQkJeworCQkJCXdoaWxlIChjYWNoZV90YWJsZVtrXS5kZXNjcmlwdG9yICE9IDApIHsKIAkJCQkJaWYgKGNhY2hlX3RhYmxlW2tdLmRlc2NyaXB0b3IgPT0gZGVzKSB7CiAJCQkJCQlpZiAob25seV90cmFjZSAmJiBjYWNoZV90YWJsZVtrXS5jYWNoZV90eXBlICE9IExWTF9UUkFDRSkKIAkJCQkJCQlicmVhazsKQEAgLTQ4OCwxNCArNDg5LDE0IEBACiAJfQogCiAJaWYgKHRyYWNlKQotCQlwcmludGsgKEtFUk5fSU5GTyAiQ1BVOiBUcmFjZSBjYWNoZTogJWRLIHVvcHMiLCB0cmFjZSk7Ci0JZWxzZSBpZiAoIGwxaSApCi0JCXByaW50ayAoS0VSTl9JTkZPICJDUFU6IEwxIEkgY2FjaGU6ICVkSyIsIGwxaSk7CisJCXByaW50ayhLRVJOX0lORk8gIkNQVTogVHJhY2UgY2FjaGU6ICVkSyB1b3BzIiwgdHJhY2UpOworCWVsc2UgaWYgKGwxaSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVOiBMMSBJIGNhY2hlOiAlZEsiLCBsMWkpOwogCiAJaWYgKGwxZCkKLQkJcHJpbnRrKCIsIEwxIEQgY2FjaGU6ICVkS1xuIiwgbDFkKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiLCBMMSBEIGNhY2hlOiAlZEtcbiIsIGwxZCk7CiAJZWxzZQotCQlwcmludGsoIlxuIik7CisJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAKIAlpZiAobDIpCiAJCXByaW50ayhLRVJOX0lORk8gIkNQVTogTDIgY2FjaGU6ICVkS1xuIiwgbDIpOwpAQCAtNTIyLDYgKzUyMywxOCBAQAogCWludCBpbmRleF9tc2IsIGk7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7CiAKKwlpZiAoKGluZGV4ID09IDMpICYmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSkgeworCQlzdHJ1Y3QgY3B1aW5mb194ODYgKmQ7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQkJaWYgKCFwZXJfY3B1KGNwdWlkNF9pbmZvLCBpKSkKKwkJCQljb250aW51ZTsKKwkJCWQgPSAmY3B1X2RhdGEoaSk7CisJCQl0aGlzX2xlYWYgPSBDUFVJRDRfSU5GT19JRFgoaSwgaW5kZXgpOworCQkJY3B1bWFza19jb3B5KHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCksCisJCQkJICAgICBkLT5sbGNfc2hhcmVkX21hcCk7CisJCX0KKwkJcmV0dXJuOworCX0KIAl0aGlzX2xlYWYgPSBDUFVJRDRfSU5GT19JRFgoY3B1LCBpbmRleCk7CiAJbnVtX3RocmVhZHNfc2hhcmluZyA9IDEgKyB0aGlzX2xlYWYtPmVheC5zcGxpdC5udW1fdGhyZWFkc19zaGFyaW5nOwogCkBAIC01NTgsOCArNTcxLDEzIEBACiAJfQogfQogI2Vsc2UKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBjYWNoZV9zaGFyZWRfY3B1X21hcF9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgaW5kZXgpIHt9Ci1zdGF0aWMgdm9pZCBfX2NwdWluaXQgY2FjaGVfcmVtb3ZlX3NoYXJlZF9jcHVfbWFwKHVuc2lnbmVkIGludCBjcHUsIGludCBpbmRleCkge30KK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBjYWNoZV9zaGFyZWRfY3B1X21hcF9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgaW5kZXgpCit7Cit9CisKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBjYWNoZV9yZW1vdmVfc2hhcmVkX2NwdV9tYXAodW5zaWduZWQgaW50IGNwdSwgaW50IGluZGV4KQoreworfQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBmcmVlX2NhY2hlX2F0dHJpYnV0ZXModW5zaWduZWQgaW50IGNwdSkKQEAgLTY0NSw3ICs2NjMsNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd18jI2ZpbGVfbmFtZQkJCQkJCVwKIAkJCShzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJWx1XG4iLCAodW5zaWduZWQgbG9uZyl0aGlzX2xlYWYtPm9iamVjdCArIHZhbCk7IFwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsICh1bnNpZ25lZCBsb25nKXRoaXNfbGVhZi0+b2JqZWN0ICsgdmFsKTsgXAogfQogCiBzaG93X29uZV9wbHVzKGxldmVsLCBlYXguc3BsaXQubGV2ZWwsIDApOwpAQCAtNjU2LDcgKzY3NCw3IEBACiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc2l6ZShzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJWx1S1xuIiwgdGhpc19sZWFmLT5zaXplIC8gMTAyNCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1S1xuIiwgdGhpc19sZWFmLT5zaXplIC8gMTAyNCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc2hhcmVkX2NwdV9tYXBfZnVuYyhzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsCkBAIC02NjksNyArNjg3LDcgQEAKIAkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2s7CiAKIAkJbWFzayA9IHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCk7Ci0JCW4gPSB0eXBlPworCQluID0gdHlwZSA/CiAJCQljcHVsaXN0X3NjbnByaW50ZihidWYsIGxlbi0yLCBtYXNrKSA6CiAJCQljcHVtYXNrX3NjbnByaW50ZihidWYsIGxlbi0yLCBtYXNrKTsKIAkJYnVmW24rK10gPSAnXG4nOwpAQCAtODAwLDcgKzgxOCw3IEBACiBzdGF0aWMgc3RydWN0IF9jYWNoZV9hdHRyIGNhY2hlX2Rpc2FibGVfMSA9IF9fQVRUUihjYWNoZV9kaXNhYmxlXzEsIDA2NDQsCiAJCXNob3dfY2FjaGVfZGlzYWJsZV8xLCBzdG9yZV9jYWNoZV9kaXNhYmxlXzEpOwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGRlZmF1bHRfYXR0cnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7CiAJJnR5cGUuYXR0ciwKIAkmbGV2ZWwuYXR0ciwKIAkmY29oZXJlbmN5X2xpbmVfc2l6ZS5hdHRyLApAQCAtODE1LDcgKzgzMyw3IEBACiAJTlVMTAogfTsKIAotc3RhdGljIHNzaXplX3Qgc2hvdyhzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyLCBjaGFyICogYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBfY2FjaGVfYXR0ciAqZmF0dHIgPSB0b19hdHRyKGF0dHIpOwogCXN0cnVjdCBfaW5kZXhfa29iamVjdCAqdGhpc19sZWFmID0gdG9fb2JqZWN0KGtvYmopOwpAQCAtODI4LDggKzg0Niw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3RvcmUoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwKLQkJICAgICBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBzdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgX2NhY2hlX2F0dHIgKmZhdHRyID0gdG9fYXR0cihhdHRyKTsKIAlzdHJ1Y3QgX2luZGV4X2tvYmplY3QgKnRoaXNfbGVhZiA9IHRvX29iamVjdChrb2JqKTsKQEAgLTg4Myw3ICs5MDEsNyBAQAogCQlnb3RvIGVycl9vdXQ7CiAKIAlwZXJfY3B1KGluZGV4X2tvYmplY3QsIGNwdSkgPSBremFsbG9jKAotCSAgICBzaXplb2Yoc3RydWN0IF9pbmRleF9rb2JqZWN0ICkgKiBudW1fY2FjaGVfbGVhdmVzLCBHRlBfS0VSTkVMKTsKKwkgICAgc2l6ZW9mKHN0cnVjdCBfaW5kZXhfa29iamVjdCkgKiBudW1fY2FjaGVfbGVhdmVzLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkocGVyX2NwdShpbmRleF9rb2JqZWN0LCBjcHUpID09IE5VTEwpKQogCQlnb3RvIGVycl9vdXQ7CiAKQEAgLTkxNyw3ICs5MzUsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBudW1fY2FjaGVfbGVhdmVzOyBpKyspIHsKLQkJdGhpc19vYmplY3QgPSBJTkRFWF9LT0JKRUNUX1BUUihjcHUsaSk7CisJCXRoaXNfb2JqZWN0ID0gSU5ERVhfS09CSkVDVF9QVFIoY3B1LCBpKTsKIAkJdGhpc19vYmplY3QtPmNwdSA9IGNwdTsKIAkJdGhpc19vYmplY3QtPmluZGV4ID0gaTsKIAkJcmV0dmFsID0ga29iamVjdF9pbml0X2FuZF9hZGQoJih0aGlzX29iamVjdC0+a29iaiksCkBAIC05MjUsOSArOTQzLDggQEAKIAkJCQkJICAgICAgcGVyX2NwdShjYWNoZV9rb2JqZWN0LCBjcHUpLAogCQkJCQkgICAgICAiaW5kZXglMWx1IiwgaSk7CiAJCWlmICh1bmxpa2VseShyZXR2YWwpKSB7Ci0JCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0JCQkJa29iamVjdF9wdXQoJihJTkRFWF9LT0JKRUNUX1BUUihjcHUsaiktPmtvYmopKTsKLQkJCX0KKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQkJa29iamVjdF9wdXQoJihJTkRFWF9LT0JKRUNUX1BUUihjcHUsIGopLT5rb2JqKSk7CiAJCQlrb2JqZWN0X3B1dChwZXJfY3B1KGNhY2hlX2tvYmplY3QsIGNwdSkpOwogCQkJY3B1aWQ0X2NhY2hlX3N5c2ZzX2V4aXQoY3B1KTsKIAkJCXJldHVybiByZXR2YWw7CkBAIC05NTIsNyArOTY5LDcgQEAKIAljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHRvX2NwdW1hc2soY2FjaGVfZGV2X21hcCkpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9jYWNoZV9sZWF2ZXM7IGkrKykKLQkJa29iamVjdF9wdXQoJihJTkRFWF9LT0JKRUNUX1BUUihjcHUsaSktPmtvYmopKTsKKwkJa29iamVjdF9wdXQoJihJTkRFWF9LT0JKRUNUX1BUUihjcHUsIGkpLT5rb2JqKSk7CiAJa29iamVjdF9wdXQocGVyX2NwdShjYWNoZV9rb2JqZWN0LCBjcHUpKTsKIAljcHVpZDRfY2FjaGVfc3lzZnNfZXhpdChjcHUpOwogfQpAQCAtOTc3LDggKzk5NCw3IEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIGNhY2hlaW5mb19jcHVfbm90aWZpZXIgPQoteworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIGNhY2hlaW5mb19jcHVfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBjYWNoZWluZm9fY3B1X2NhbGxiYWNrLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwppbmRleCAwMTIxMzA0Li5mZGQ1MWI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwpAQCAtMTgzLDYgKzE4MywxMSBAQAogCXNldF9iaXQoMCwgJm1jZV9uZWVkX25vdGlmeSk7CiB9CiAKK3ZvaWQgX193ZWFrIGRlY29kZV9tY2Uoc3RydWN0IG1jZSAqbSkKK3sKKwlyZXR1cm47Cit9CisKIHN0YXRpYyB2b2lkIHByaW50X21jZShzdHJ1Y3QgbWNlICptKQogewogCXByaW50ayhLRVJOX0VNRVJHCkBAIC0yMDUsNiArMjEwLDggQEAKIAlwcmludGsoS0VSTl9FTUVSRyAiUFJPQ0VTU09SICV1OiV4IFRJTUUgJWxsdSBTT0NLRVQgJXUgQVBJQyAleFxuIiwKIAkJCW0tPmNwdXZlbmRvciwgbS0+Y3B1aWQsIG0tPnRpbWUsIG0tPnNvY2tldGlkLAogCQkJbS0+YXBpY2lkKTsKKworCWRlY29kZV9tY2UobSk7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X21jZV9oZWFkKHZvaWQpCkBAIC0yMTUsNyArMjIyLDEwIEBACiBzdGF0aWMgdm9pZCBwcmludF9tY2VfdGFpbCh2b2lkKQogewogCXByaW50ayhLRVJOX0VNRVJHICJUaGlzIGlzIG5vdCBhIHNvZnR3YXJlIHByb2JsZW0hXG4iCi0JICAgICAgICJSdW4gdGhyb3VnaCBtY2Vsb2cgLS1hc2NpaSB0byBkZWNvZGUgYW5kIGNvbnRhY3QgeW91ciBoYXJkd2FyZSB2ZW5kb3JcbiIpOworI2lmICghZGVmaW5lZChDT05GSUdfRURBQykgfHwgIWRlZmluZWQoQ09ORklHX0NQVV9TVVBfQU1EKSkKKwkgICAgICAgIlJ1biB0aHJvdWdoIG1jZWxvZyAtLWFzY2lpIHRvIGRlY29kZSBhbmQgY29udGFjdCB5b3VyIGhhcmR3YXJlIHZlbmRvclxuIgorI2VuZGlmCisJICAgICAgICk7CiB9CiAKICNkZWZpbmUgUEFOSUNfVElNRU9VVCA1IC8qIDUgc2Vjb25kcyAqLwpAQCAtMTA5MSw3ICsxMTAxLDcgQEAKICAqLwogc3RhdGljIGludCBjaGVja19pbnRlcnZhbCA9IDUgKiA2MDsgLyogNSBtaW51dGVzICovCiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIG5leHRfaW50ZXJ2YWwpOyAvKiBpbiBqaWZmaWVzICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBtY2VfbmV4dF9pbnRlcnZhbCk7IC8qIGluIGppZmZpZXMgKi8KIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGltZXJfbGlzdCwgbWNlX3RpbWVyKTsKIAogc3RhdGljIHZvaWQgbWNoZWNrX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTExMTAsNyArMTEyMCw3IEBACiAJICogQWxlcnQgdXNlcnNwYWNlIGlmIG5lZWRlZC4gIElmIHdlIGxvZ2dlZCBhbiBNQ0UsIHJlZHVjZSB0aGUKIAkgKiBwb2xsaW5nIGludGVydmFsLCBvdGhlcndpc2UgaW5jcmVhc2UgdGhlIHBvbGxpbmcgaW50ZXJ2YWwuCiAJICovCi0JbiA9ICZfX2dldF9jcHVfdmFyKG5leHRfaW50ZXJ2YWwpOworCW4gPSAmX19nZXRfY3B1X3ZhcihtY2VfbmV4dF9pbnRlcnZhbCk7CiAJaWYgKG1jZV9ub3RpZnlfaXJxKCkpCiAJCSpuID0gbWF4KCpuLzIsIEhaLzEwMCk7CiAJZWxzZQpAQCAtMTMyNSw3ICsxMzM1LDcgQEAKIHN0YXRpYyB2b2lkIG1jZV9pbml0X3RpbWVyKHZvaWQpCiB7CiAJc3RydWN0IHRpbWVyX2xpc3QgKnQgPSAmX19nZXRfY3B1X3ZhcihtY2VfdGltZXIpOwotCWludCAqbiA9ICZfX2dldF9jcHVfdmFyKG5leHRfaW50ZXJ2YWwpOworCWludCAqbiA9ICZfX2dldF9jcHVfdmFyKG1jZV9uZXh0X2ludGVydmFsKTsKIAogCWlmIChtY2VfaWdub3JlX2NlKQogCQlyZXR1cm47CkBAIC0xOTI1LDcgKzE5MzUsNyBAQAogCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgogCWNhc2UgQ1BVX0RPV05fRkFJTEVEX0ZST1pFTjoKIAkJdC0+ZXhwaXJlcyA9IHJvdW5kX2ppZmZpZXMoamlmZmllcyArCi0JCQkJCQlfX2dldF9jcHVfdmFyKG5leHRfaW50ZXJ2YWwpKTsKKwkJCQkJICAgX19nZXRfY3B1X3ZhcihtY2VfbmV4dF9pbnRlcnZhbCkpOwogCQlhZGRfdGltZXJfb24odCwgY3B1KTsKIAkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgbWNlX3JlZW5hYmxlX2NwdSwgJmFjdGlvbiwgMSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jCmluZGV4IGRkYWUyMTYuLjhjZDUyMjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAlzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrCSpibG9ja3M7CiAJY3B1bWFza192YXJfdAkJY3B1czsKIH07Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRocmVzaG9sZF9iYW5rICosIHRocmVzaG9sZF9iYW5rc1tOUl9CQU5LU10pOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0aHJlc2hvbGRfYmFuayAqIFtOUl9CQU5LU10sIHRocmVzaG9sZF9iYW5rcyk7CiAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgdW5zaWduZWQgY2hhciBzaGFyZWRfYmFua1tOUl9CQU5LU10gPSB7CkBAIC00ODksMTIgKzQ4OSwxNCBAQAogCWludCBpLCBlcnIgPSAwOwogCXN0cnVjdCB0aHJlc2hvbGRfYmFuayAqYiA9IE5VTEw7CiAJY2hhciBuYW1lWzMyXTsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKKwogCiAJc3ByaW50ZihuYW1lLCAidGhyZXNob2xkX2JhbmslaSIsIGJhbmspOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChjcHVfZGF0YShjcHUpLmNwdV9jb3JlX2lkICYmIHNoYXJlZF9iYW5rW2JhbmtdKSB7CS8qIHN5bWxpbmsgKi8KLQkJaSA9IGNwdW1hc2tfZmlyc3QoY3B1X2NvcmVfbWFzayhjcHUpKTsKKwkJaSA9IGNwdW1hc2tfZmlyc3QoYy0+bGxjX3NoYXJlZF9tYXApOwogCiAJCS8qIGZpcnN0IGNvcmUgbm90IHVwIHlldCAqLwogCQlpZiAoY3B1X2RhdGEoaSkuY3B1X2NvcmVfaWQpCkBAIC01MTQsNyArNTE2LDcgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCi0JCWNwdW1hc2tfY29weShiLT5jcHVzLCBjcHVfY29yZV9tYXNrKGNwdSkpOworCQljcHVtYXNrX2NvcHkoYi0+Y3B1cywgYy0+bGxjX3NoYXJlZF9tYXApOwogCQlwZXJfY3B1KHRocmVzaG9sZF9iYW5rcywgY3B1KVtiYW5rXSA9IGI7CiAKIAkJZ290byBvdXQ7CkBAIC01MzksNyArNTQxLDcgQEAKICNpZm5kZWYgQ09ORklHX1NNUAogCWNwdW1hc2tfc2V0YWxsKGItPmNwdXMpOwogI2Vsc2UKLQljcHVtYXNrX2NvcHkoYi0+Y3B1cywgY3B1X2NvcmVfbWFzayhjcHUpKTsKKwljcHVtYXNrX2NvcHkoYi0+Y3B1cywgYy0+bGxjX3NoYXJlZF9tYXApOwogI2VuZGlmCiAKIAlwZXJfY3B1KHRocmVzaG9sZF9iYW5rcywgY3B1KVtiYW5rXSA9IGI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvYW1kLmMKaW5kZXggZWUyMzMxYi4uMzNhZjE0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9hbWQuYwpAQCAtNywxNSArNywxNSBAQAogCiBzdGF0aWMgdm9pZAogYW1kX2dldF9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgKmJhc2UsCi0JICAgICB1bnNpZ25lZCBsb25nICpzaXplLCBtdHJyX3R5cGUgKiB0eXBlKQorCSAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZSwgbXRycl90eXBlICp0eXBlKQogewogCXVuc2lnbmVkIGxvbmcgbG93LCBoaWdoOwogCiAJcmRtc3IoTVNSX0s2X1VXQ0NSLCBsb3csIGhpZ2gpOwotCS8qICBVcHBlciBkd29yZCBpcyByZWdpb24gMSwgbG93ZXIgaXMgcmVnaW9uIDAgICovCisJLyogVXBwZXIgZHdvcmQgaXMgcmVnaW9uIDEsIGxvd2VyIGlzIHJlZ2lvbiAwICovCiAJaWYgKHJlZyA9PSAxKQogCQlsb3cgPSBoaWdoOwotCS8qICBUaGUgYmFzZSBtYXNrcyBvZmYgb24gdGhlIHJpZ2h0IGFsaWdubWVudCAgKi8KKwkvKiBUaGUgYmFzZSBtYXNrcyBvZmYgb24gdGhlIHJpZ2h0IGFsaWdubWVudCAqLwogCSpiYXNlID0gKGxvdyAmIDB4RkZGRTAwMDApID4+IFBBR0VfU0hJRlQ7CiAJKnR5cGUgPSAwOwogCWlmIChsb3cgJiAxKQpAQCAtMjcsNzQgKzI3LDgxIEBACiAJCXJldHVybjsKIAl9CiAJLyoKLQkgKiAgVGhpcyBuZWVkcyBhIGxpdHRsZSBleHBsYWluaW5nLiBUaGUgc2l6ZSBpcyBzdG9yZWQgYXMgYW4KLQkgKiAgaW52ZXJ0ZWQgbWFzayBvZiBiaXRzIG9mIDEyOEsgZ3JhbnVsYXJpdHkgMTUgYml0cyBsb25nIG9mZnNldAotCSAqICAyIGJpdHMKKwkgKiBUaGlzIG5lZWRzIGEgbGl0dGxlIGV4cGxhaW5pbmcuIFRoZSBzaXplIGlzIHN0b3JlZCBhcyBhbgorCSAqIGludmVydGVkIG1hc2sgb2YgYml0cyBvZiAxMjhLIGdyYW51bGFyaXR5IDE1IGJpdHMgbG9uZyBvZmZzZXQKKwkgKiAyIGJpdHMuCiAJICoKLQkgKiAgU28gdG8gZ2V0IGEgc2l6ZSB3ZSBkbyBpbnZlcnQgdGhlIG1hc2sgYW5kIGFkZCAxIHRvIHRoZSBsb3dlc3QKLQkgKiAgbWFzayBiaXQgKDQgYXMgaXRzIDIgYml0cyBpbikuIFRoaXMgZ2l2ZXMgdXMgYSBzaXplIHdlIHRoZW4gc2hpZnQKLQkgKiAgdG8gdHVybiBpbnRvIDEyOEsgYmxvY2tzCisJICogU28gdG8gZ2V0IGEgc2l6ZSB3ZSBkbyBpbnZlcnQgdGhlIG1hc2sgYW5kIGFkZCAxIHRvIHRoZSBsb3dlc3QKKwkgKiBtYXNrIGJpdCAoNCBhcyBpdHMgMiBiaXRzIGluKS4gVGhpcyBnaXZlcyB1cyBhIHNpemUgd2UgdGhlbiBzaGlmdAorCSAqIHRvIHR1cm4gaW50byAxMjhLIGJsb2Nrcy4KIAkgKgotCSAqICBlZyAgICAgICAgICAgICAgMTExIDExMTEgMTExMSAxMTAwICAgICAgaXMgNTEySworCSAqIGVnICAgICAgICAgICAgICAxMTEgMTExMSAxMTExIDExMDAgICAgICBpcyA1MTJLCiAJICoKLQkgKiAgaW52ZXJ0ICAgICAgICAgIDAwMCAwMDAwIDAwMDAgMDAxMQotCSAqICArMSAgICAgICAgICAgICAgMDAwIDAwMDAgMDAwMCAwMTAwCi0JICogICoxMjhLICAgLi4uCisJICogaW52ZXJ0ICAgICAgICAgIDAwMCAwMDAwIDAwMDAgMDAxMQorCSAqICsxICAgICAgICAgICAgICAwMDAgMDAwMCAwMDAwIDAxMDAKKwkgKiAqMTI4SyAgIC4uLgogCSAqLwogCWxvdyA9ICh+bG93KSAmIDB4MUZGRkM7CiAJKnNpemUgPSAobG93ICsgNCkgPDwgKDE1IC0gUEFHRV9TSElGVCk7Ci0JcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBhbWRfc2V0X210cnIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLAotCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSwgbXRycl90eXBlIHR5cGUpCi0vKiAgW1NVTU1BUlldIFNldCB2YXJpYWJsZSBNVFJSIHJlZ2lzdGVyIG9uIHRoZSBsb2NhbCBDUFUuCi0gICAgPHJlZz4gVGhlIHJlZ2lzdGVyIHRvIHNldC4KLSAgICA8YmFzZT4gVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVnaW9uLgotICAgIDxzaXplPiBUaGUgc2l6ZSBvZiB0aGUgcmVnaW9uLiBJZiB0aGlzIGlzIDAgdGhlIHJlZ2lvbiBpcyBkaXNhYmxlZC4KLSAgICA8dHlwZT4gVGhlIHR5cGUgb2YgdGhlIHJlZ2lvbi4KLSAgICBbUkVUVVJOU10gTm90aGluZy4KLSovCisvKioKKyAqIGFtZF9zZXRfbXRyciAtIFNldCB2YXJpYWJsZSBNVFJSIHJlZ2lzdGVyIG9uIHRoZSBsb2NhbCBDUFUuCisgKgorICogQHJlZyBUaGUgcmVnaXN0ZXIgdG8gc2V0LgorICogQGJhc2UgVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVnaW9uLgorICogQHNpemUgVGhlIHNpemUgb2YgdGhlIHJlZ2lvbi4gSWYgdGhpcyBpcyAwIHRoZSByZWdpb24gaXMgZGlzYWJsZWQuCisgKiBAdHlwZSBUaGUgdHlwZSBvZiB0aGUgcmVnaW9uLgorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK2FtZF9zZXRfbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgbXRycl90eXBlIHR5cGUpCiB7CiAJdTMyIHJlZ3NbMl07CiAKIAkvKgotCSAqICBMb3cgaXMgTVRSUjAgLCBIaWdoIE1UUlIgMQorCSAqIExvdyBpcyBNVFJSMCwgSGlnaCBNVFJSIDEKIAkgKi8KIAlyZG1zcihNU1JfSzZfVVdDQ1IsIHJlZ3NbMF0sIHJlZ3NbMV0pOwogCS8qCi0JICogIEJsYW5rIHRvIGRpc2FibGUKKwkgKiBCbGFuayB0byBkaXNhYmxlCiAJICovCi0JaWYgKHNpemUgPT0gMCkKKwlpZiAoc2l6ZSA9PSAwKSB7CiAJCXJlZ3NbcmVnXSA9IDA7Ci0JZWxzZQotCQkvKiBTZXQgdGhlIHJlZ2lzdGVyIHRvIHRoZSBiYXNlLCB0aGUgdHlwZSAob2ZmIGJ5IG9uZSkgYW5kIGFuCi0JCSAgIGludmVydGVkIGJpdG1hc2sgb2YgdGhlIHNpemUgVGhlIHNpemUgaXMgdGhlIG9ubHkgb2RkCi0JCSAgIGJpdC4gV2UgYXJlIGZlZCBzYXkgNTEySyBXZSBpbnZlcnQgdGhpcyBhbmQgd2UgZ2V0IDExMSAxMTExCi0JCSAgIDExMTEgMTAxMSBidXQgaWYgeW91IHN1YnRyYWN0IG9uZSBhbmQgaW52ZXJ0IHlvdSBnZXQgdGhlICAgCi0JCSAgIGRlc2lyZWQgMTExIDExMTEgMTExMSAxMTAwIG1hc2sKLQotCQkgICBCdXQgfih4IC0gMSkgPT0gfnggKyAxID09IC14LiBUd28ncyBjb21wbGVtZW50IHJvY2tzISAgKi8KKwl9IGVsc2UgeworCQkvKgorCQkgKiBTZXQgdGhlIHJlZ2lzdGVyIHRvIHRoZSBiYXNlLCB0aGUgdHlwZSAob2ZmIGJ5IG9uZSkgYW5kIGFuCisJCSAqIGludmVydGVkIGJpdG1hc2sgb2YgdGhlIHNpemUgVGhlIHNpemUgaXMgdGhlIG9ubHkgb2RkCisJCSAqIGJpdC4gV2UgYXJlIGZlZCBzYXkgNTEySyBXZSBpbnZlcnQgdGhpcyBhbmQgd2UgZ2V0IDExMSAxMTExCisJCSAqIDExMTEgMTAxMSBidXQgaWYgeW91IHN1YnRyYWN0IG9uZSBhbmQgaW52ZXJ0IHlvdSBnZXQgdGhlCisJCSAqIGRlc2lyZWQgMTExIDExMTEgMTExMSAxMTAwIG1hc2sKKwkJICoKKwkJICogIEJ1dCB+KHggLSAxKSA9PSB+eCArIDEgPT0gLXguIFR3bydzIGNvbXBsZW1lbnQgcm9ja3MhCisJCSAqLwogCQlyZWdzW3JlZ10gPSAoLXNpemUgPj4gKDE1IC0gUEFHRV9TSElGVCkgJiAweDAwMDFGRkZDKQogCQkgICAgfCAoYmFzZSA8PCBQQUdFX1NISUZUKSB8ICh0eXBlICsgMSk7CisJfQogCiAJLyoKLQkgKiAgVGhlIHdyaXRlYmFjayBydWxlIGlzIHF1aXRlIHNwZWNpZmljLiBTZWUgdGhlIG1hbnVhbC4gSXRzCi0JICogIGRpc2FibGUgbG9jYWwgaW50ZXJydXB0cywgd3JpdGUgYmFjayB0aGUgY2FjaGUsIHNldCB0aGUgbXRycgorCSAqIFRoZSB3cml0ZWJhY2sgcnVsZSBpcyBxdWl0ZSBzcGVjaWZpYy4gU2VlIHRoZSBtYW51YWwuIEl0cworCSAqIGRpc2FibGUgbG9jYWwgaW50ZXJydXB0cywgd3JpdGUgYmFjayB0aGUgY2FjaGUsIHNldCB0aGUgbXRycgogCSAqLwogCXdiaW52ZCgpOwogCXdybXNyKE1TUl9LNl9VV0NDUiwgcmVnc1swXSwgcmVnc1sxXSk7CiB9CiAKLXN0YXRpYyBpbnQgYW1kX3ZhbGlkYXRlX2FkZF9wYWdlKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3N0YXRpYyBpbnQKK2FtZF92YWxpZGF0ZV9hZGRfcGFnZSh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHR5cGUpCiB7Ci0JLyogQXBwbHkgdGhlIEs2IGJsb2NrIGFsaWdubWVudCBhbmQgc2l6ZSBydWxlcwotCSAgIEluIG9yZGVyCi0JICAgbyBVbmNhY2hlZCBvciBnYXRoZXJpbmcgb25seQotCSAgIG8gMTI4SyBvciBiaWdnZXIgYmxvY2sKLQkgICBvIFBvd2VyIG9mIDIgYmxvY2sKLQkgICBvIGJhc2Ugc3VpdGFibHkgYWxpZ25lZCB0byB0aGUgcG93ZXIKLQkqLworCS8qCisJICogQXBwbHkgdGhlIEs2IGJsb2NrIGFsaWdubWVudCBhbmQgc2l6ZSBydWxlcworCSAqIEluIG9yZGVyCisJICogbyBVbmNhY2hlZCBvciBnYXRoZXJpbmcgb25seQorCSAqIG8gMTI4SyBvciBiaWdnZXIgYmxvY2sKKwkgKiBvIFBvd2VyIG9mIDIgYmxvY2sKKwkgKiBvIGJhc2Ugc3VpdGFibHkgYWxpZ25lZCB0byB0aGUgcG93ZXIKKwkgKi8KIAlpZiAodHlwZSA+IE1UUlJfVFlQRV9XUkNPTUIgfHwgc2l6ZSA8ICgxIDw8ICgxNyAtIFBBR0VfU0hJRlQpKQogCSAgICB8fCAoc2l6ZSAmIH4oc2l6ZSAtIDEpKSAtIHNpemUgfHwgKGJhc2UgJiAoc2l6ZSAtIDEpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTUsNSArMTIyLDMgQEAKIAlzZXRfbXRycl9vcHMoJmFtZF9tdHJyX29wcyk7CiAJcmV0dXJuIDA7CiB9Ci0KLS8vYXJjaF9pbml0Y2FsbChhbWRfbXRycl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jZW50YXVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2VudGF1ci5jCmluZGV4IGNiOWFhM2EuLmRlODlmMTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jZW50YXVyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NlbnRhdXIuYwpAQCAtMSw3ICsxLDkgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKwogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgorCiAjaW5jbHVkZSAibXRyci5oIgogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTEyLDI1ICsxNCwyNSBAQAogc3RhdGljIHU4IGNlbnRhdXJfbWNyX3Jlc2VydmVkOwogc3RhdGljIHU4IGNlbnRhdXJfbWNyX3R5cGU7CS8qIDAgZm9yIHdpbmNoaXAsIDEgZm9yIHdpbmNoaXAyICovCiAKLS8qCi0gKglSZXBvcnQgYm9vdCB0aW1lIE1DUiBzZXR1cHMgCisvKioKKyAqIGNlbnRhdXJfZ2V0X2ZyZWVfcmVnaW9uIC0gR2V0IGEgZnJlZSBNVFJSLgorICoKKyAqIEBiYXNlOiBUaGUgc3RhcnRpbmcgKGJhc2UpIGFkZHJlc3Mgb2YgdGhlIHJlZ2lvbi4KKyAqIEBzaXplOiBUaGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSByZWdpb24uCisgKgorICogUmV0dXJuczogdGhlIGluZGV4IG9mIHRoZSByZWdpb24gb24gc3VjY2VzcywgZWxzZSAtMSBvbiBlcnJvci4KICAqLwotCiBzdGF0aWMgaW50CiBjZW50YXVyX2dldF9mcmVlX3JlZ2lvbih1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IHJlcGxhY2VfcmVnKQotLyogIFtTVU1NQVJZXSBHZXQgYSBmcmVlIE1UUlIuCi0gICAgPGJhc2U+IFRoZSBzdGFydGluZyAoYmFzZSkgYWRkcmVzcyBvZiB0aGUgcmVnaW9uLgotICAgIDxzaXplPiBUaGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSByZWdpb24uCi0gICAgW1JFVFVSTlNdIFRoZSBpbmRleCBvZiB0aGUgcmVnaW9uIG9uIHN1Y2Nlc3MsIGVsc2UgLTEgb24gZXJyb3IuCi0qLwogewotCWludCBpLCBtYXg7Ci0JbXRycl90eXBlIGx0eXBlOwogCXVuc2lnbmVkIGxvbmcgbGJhc2UsIGxzaXplOworCW10cnJfdHlwZSBsdHlwZTsKKwlpbnQgaSwgbWF4OwogCiAJbWF4ID0gbnVtX3Zhcl9yYW5nZXM7CiAJaWYgKHJlcGxhY2VfcmVnID49IDAgJiYgcmVwbGFjZV9yZWcgPCBtYXgpCiAJCXJldHVybiByZXBsYWNlX3JlZzsKKwogCWZvciAoaSA9IDA7IGkgPCBtYXg7ICsraSkgewogCQlpZiAoY2VudGF1cl9tY3JfcmVzZXJ2ZWQgJiAoMSA8PCBpKSkKIAkJCWNvbnRpbnVlOwpAQCAtMzgsMTEgKzQwLDE0IEBACiAJCWlmIChsc2l6ZSA9PSAwKQogCQkJcmV0dXJuIGk7CiAJfQorCiAJcmV0dXJuIC1FTk9TUEM7CiB9CiAKLXZvaWQKLW10cnJfY2VudGF1cl9yZXBvcnRfbWNyKGludCBtY3IsIHUzMiBsbywgdTMyIGhpKQorLyoKKyAqIFJlcG9ydCBib290IHRpbWUgTUNSIHNldHVwcworICovCit2b2lkIG10cnJfY2VudGF1cl9yZXBvcnRfbWNyKGludCBtY3IsIHUzMiBsbywgdTMyIGhpKQogewogCWNlbnRhdXJfbWNyW21jcl0ubG93ID0gbG87CiAJY2VudGF1cl9tY3JbbWNyXS5oaWdoID0gaGk7CkBAIC01NCwzMyArNTksMzUgQEAKIHsKIAkqYmFzZSA9IGNlbnRhdXJfbWNyW3JlZ10uaGlnaCA+PiBQQUdFX1NISUZUOwogCSpzaXplID0gLShjZW50YXVyX21jcltyZWddLmxvdyAmIDB4ZmZmZmYwMDApID4+IFBBR0VfU0hJRlQ7Ci0JKnR5cGUgPSBNVFJSX1RZUEVfV1JDT01COwkvKiAgSWYgaXQgaXMgdGhlcmUsIGl0IGlzIHdyaXRlLWNvbWJpbmluZyAgKi8KKwkqdHlwZSA9IE1UUlJfVFlQRV9XUkNPTUI7CQkvKiB3cml0ZS1jb21iaW5pbmcgICovCisKIAlpZiAoY2VudGF1cl9tY3JfdHlwZSA9PSAxICYmICgoY2VudGF1cl9tY3JbcmVnXS5sb3cgJiAzMSkgJiAyKSkKIAkJKnR5cGUgPSBNVFJSX1RZUEVfVU5DQUNIQUJMRTsKIAlpZiAoY2VudGF1cl9tY3JfdHlwZSA9PSAxICYmIChjZW50YXVyX21jcltyZWddLmxvdyAmIDMxKSA9PSAyNSkKIAkJKnR5cGUgPSBNVFJSX1RZUEVfV1JCQUNLOwogCWlmIChjZW50YXVyX21jcl90eXBlID09IDAgJiYgKGNlbnRhdXJfbWNyW3JlZ10ubG93ICYgMzEpID09IDMxKQogCQkqdHlwZSA9IE1UUlJfVFlQRV9XUkJBQ0s7Ci0KIH0KIAotc3RhdGljIHZvaWQgY2VudGF1cl9zZXRfbWNyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUsIG10cnJfdHlwZSB0eXBlKQorc3RhdGljIHZvaWQKK2NlbnRhdXJfc2V0X21jcih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsCisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgbXRycl90eXBlIHR5cGUpCiB7CiAJdW5zaWduZWQgbG9uZyBsb3csIGhpZ2g7CiAKIAlpZiAoc2l6ZSA9PSAwKSB7Ci0JCS8qICBEaXNhYmxlICAqLworCQkvKiBEaXNhYmxlICovCiAJCWhpZ2ggPSBsb3cgPSAwOwogCX0gZWxzZSB7CiAJCWhpZ2ggPSBiYXNlIDw8IFBBR0VfU0hJRlQ7Ci0JCWlmIChjZW50YXVyX21jcl90eXBlID09IDApCi0JCQlsb3cgPSAtc2l6ZSA8PCBQQUdFX1NISUZUIHwgMHgxZjsJLyogb25seSBzdXBwb3J0IHdyaXRlLWNvbWJpbmluZy4uLiAqLwotCQllbHNlIHsKKwkJaWYgKGNlbnRhdXJfbWNyX3R5cGUgPT0gMCkgeworCQkJLyogT25seSBzdXBwb3J0IHdyaXRlLWNvbWJpbmluZy4uLiAqLworCQkJbG93ID0gLXNpemUgPDwgUEFHRV9TSElGVCB8IDB4MWY7CisJCX0gZWxzZSB7CiAJCQlpZiAodHlwZSA9PSBNVFJSX1RZUEVfVU5DQUNIQUJMRSkKLQkJCQlsb3cgPSAtc2l6ZSA8PCBQQUdFX1NISUZUIHwgMHgwMjsJLyogTkMgKi8KKwkJCQlsb3cgPSAtc2l6ZSA8PCBQQUdFX1NISUZUIHwgMHgwMjsgLyogTkMgKi8KIAkJCWVsc2UKLQkJCQlsb3cgPSAtc2l6ZSA8PCBQQUdFX1NISUZUIHwgMHgwOTsJLyogV1dPLFdDICovCisJCQkJbG93ID0gLXNpemUgPDwgUEFHRV9TSElGVCB8IDB4MDk7IC8qIFdXTywgV0MgKi8KIAkJfQogCX0KIAljZW50YXVyX21jcltyZWddLmhpZ2ggPSBoaWdoOwpAQCAtODgsMTE4ICs5NSwxNiBAQAogCXdybXNyKE1TUl9JRFRfTUNSMCArIHJlZywgbG93LCBoaWdoKTsKIH0KIAotI2lmIDAKLS8qCi0gKglJbml0aWFsaXNlIHRoZSBsYXRlciAoc2FuZXIpIFdpbmNoaXAgTUNSIHZhcmlhbnQuIEluIHRoaXMgdmVyc2lvbgotICoJdGhlIEJJT1MgY2FuIHBhc3MgdXMgdGhlIHJlZ2lzdGVycyBpdCBoYXMgdXNlZCAoYnV0IG5vdCB0aGVpciB2YWx1ZXMpCi0gKglhbmQgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgaXMgcmVhZC93cml0ZQotICovCi0KLXN0YXRpYyB2b2lkIF9faW5pdAotY2VudGF1cl9tY3IxX2luaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBpOwotCXUzMiBsbywgaGk7Ci0KLQkvKiBVbmZvcnR1bmF0ZWx5LCBNQ1IncyBhcmUgcmVhZC1vbmx5LCBzbyB0aGVyZSBpcyBubyB3YXkgdG8KLQkgKiBmaW5kIG91dCB3aGF0IHRoZSBiaW9zIG1pZ2h0IGhhdmUgZG9uZS4KLQkgKi8KLQotCXJkbXNyKE1TUl9JRFRfTUNSX0NUUkwsIGxvLCBoaSk7Ci0JaWYgKCgobG8gPj4gMTcpICYgNykgPT0gMSkgewkvKiBUeXBlIDEgV2luY2hpcDIgTUNSICovCi0JCWxvICY9IH4weDFDMDsJLyogY2xlYXIga2V5ICovCi0JCWxvIHw9IDB4MDQwOwkvKiBzZXQga2V5IHRvIDEgKi8KLQkJd3Jtc3IoTVNSX0lEVF9NQ1JfQ1RSTCwgbG8sIGhpKTsJLyogdW5sb2NrIE1DUiAqLwotCX0KLQotCWNlbnRhdXJfbWNyX3R5cGUgPSAxOwotCi0JLyoKLQkgKiAgQ2xlYXIgYW55IHVuY29uZmlndXJlZCBNQ1Incy4KLQkgKi8KLQotCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKLQkJaWYgKGNlbnRhdXJfbWNyW2ldLmhpZ2ggPT0gMCAmJiBjZW50YXVyX21jcltpXS5sb3cgPT0gMCkgewotCQkJaWYgKCEobG8gJiAoMSA8PCAoOSArIGkpKSkpCi0JCQkJd3Jtc3IoTVNSX0lEVF9NQ1IwICsgaSwgMCwgMCk7Ci0JCQllbHNlCi0JCQkJLyoKLQkJCQkgKiAgICAgIElmIHRoZSBCSU9TIHNldCB1cCBhbiBNQ1Igd2UgY2Fubm90IHNlZSBpdAotCQkJCSAqICAgICAgYnV0IHdlIGRvbid0IHdpc2ggdG8gb2JsaXRlcmF0ZSBpdAotCQkJCSAqLwotCQkJCWNlbnRhdXJfbWNyX3Jlc2VydmVkIHw9ICgxIDw8IGkpOwotCQl9Ci0JfQotCS8qICAKLQkgKiAgVGhyb3cgdGhlIG1haW4gd3JpdGUtY29tYmluaW5nIHN3aXRjaC4uLiAKLQkgKiAgSG93ZXZlciBpZiBPT1NUT1JFIGlzIGVuYWJsZWQgdGhlbiBwZW9wbGUgaGF2ZSBhbHJlYWR5IGRvbmUgZmFyCi0JICogIGNsZXZlcmVyIHRoaW5ncyBhbmQgd2Ugc2hvdWxkIGJlaGF2ZS4gCi0JICovCi0KLQlsbyB8PSAxNTsJCS8qIFdyaXRlIGNvbWJpbmUgZW5hYmxlcyAqLwotCXdybXNyKE1TUl9JRFRfTUNSX0NUUkwsIGxvLCBoaSk7Ci19Ci0KLS8qCi0gKglJbml0aWFsaXNlIHRoZSBvcmlnaW5hbCB3aW5jaGlwIHdpdGggcmVhZCBvbmx5IE1DUiByZWdpc3RlcnMKLSAqCW5vIHVzZWQgYml0bWFzayBmb3IgdGhlIEJJT1MgdG8gcGFzcyBvbiBhbmQgd3JpdGUgb25seSBjb250cm9sCi0gKi8KLQotc3RhdGljIHZvaWQgX19pbml0Ci1jZW50YXVyX21jcjBfaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGk7Ci0KLQkvKiBVbmZvcnR1bmF0ZWx5LCBNQ1IncyBhcmUgcmVhZC1vbmx5LCBzbyB0aGVyZSBpcyBubyB3YXkgdG8KLQkgKiBmaW5kIG91dCB3aGF0IHRoZSBiaW9zIG1pZ2h0IGhhdmUgZG9uZS4KLQkgKi8KLQotCS8qIENsZWFyIGFueSB1bmNvbmZpZ3VyZWQgTUNSJ3MuCi0JICogVGhpcyB3YXkgd2UgYXJlIHN1cmUgdGhhdCB0aGUgY2VudGF1cl9tY3IgYXJyYXkgY29udGFpbnMgdGhlIGFjdHVhbAotCSAqIHZhbHVlcy4gVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IGFueSBCSU9TIHR3ZWFrcyBhcmUgdGh1cyB1bmRvbmUuCi0JICoKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7Ci0JCWlmIChjZW50YXVyX21jcltpXS5oaWdoID09IDAgJiYgY2VudGF1cl9tY3JbaV0ubG93ID09IDApCi0JCQl3cm1zcihNU1JfSURUX01DUjAgKyBpLCAwLCAwKTsKLQl9Ci0KLQl3cm1zcihNU1JfSURUX01DUl9DVFJMLCAweDAxRjAwMDFGLCAwKTsJLyogV3JpdGUgb25seSAqLwotfQotCi0vKgotICoJSW5pdGlhbGlzZSBXaW5jaGlwIHNlcmllcyBNQ1IgcmVnaXN0ZXJzCi0gKi8KLQotc3RhdGljIHZvaWQgX19pbml0Ci1jZW50YXVyX21jcl9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHNldF9tdHJyX2NvbnRleHQgY3R4dDsKLQotCXNldF9tdHJyX3ByZXBhcmVfc2F2ZSgmY3R4dCk7Ci0Jc2V0X210cnJfY2FjaGVfZGlzYWJsZSgmY3R4dCk7Ci0KLQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gNCkKLQkJY2VudGF1cl9tY3IwX2luaXQoKTsKLQllbHNlIGlmIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSA4IHx8IGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID09IDkpCi0JCWNlbnRhdXJfbWNyMV9pbml0KCk7Ci0KLQlzZXRfbXRycl9kb25lKCZjdHh0KTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGNlbnRhdXJfdmFsaWRhdGVfYWRkX3BhZ2UodW5zaWduZWQgbG9uZyBiYXNlLCAKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHR5cGUpCitzdGF0aWMgaW50CitjZW50YXVyX3ZhbGlkYXRlX2FkZF9wYWdlKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKIAkvKgotCSAqICBGSVhNRTogV2luY2hpcDIgc3VwcG9ydHMgdW5jYWNoZWQKKwkgKiBGSVhNRTogV2luY2hpcDIgc3VwcG9ydHMgdW5jYWNoZWQKIAkgKi8KLQlpZiAodHlwZSAhPSBNVFJSX1RZUEVfV1JDT01CICYmIAorCWlmICh0eXBlICE9IE1UUlJfVFlQRV9XUkNPTUIgJiYKIAkgICAgKGNlbnRhdXJfbWNyX3R5cGUgPT0gMCB8fCB0eXBlICE9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAibXRycjogb25seSB3cml0ZS1jb21iaW5pbmclcyBzdXBwb3J0ZWRcbiIsCi0JCSAgICAgICBjZW50YXVyX21jcl90eXBlID8gIiBhbmQgdW5jYWNoZWFibGUgYXJlIgotCQkgICAgICAgOiAiIGlzIik7CisJCXByX3dhcm5pbmcoIm10cnI6IG9ubHkgd3JpdGUtY29tYmluaW5nJXMgc3VwcG9ydGVkXG4iLAorCQkJICAgY2VudGF1cl9tY3JfdHlwZSA/ICIgYW5kIHVuY2FjaGVhYmxlIGFyZSIgOiAiIGlzIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTIwNyw3ICsxMTIsNiBAQAogCiBzdGF0aWMgc3RydWN0IG10cnJfb3BzIGNlbnRhdXJfbXRycl9vcHMgPSB7CiAJLnZlbmRvciAgICAgICAgICAgID0gWDg2X1ZFTkRPUl9DRU5UQVVSLAotLy8JLmluaXQgICAgICAgICAgICAgID0gY2VudGF1cl9tY3JfaW5pdCwKIAkuc2V0ICAgICAgICAgICAgICAgPSBjZW50YXVyX3NldF9tY3IsCiAJLmdldCAgICAgICAgICAgICAgID0gY2VudGF1cl9nZXRfbWNyLAogCS5nZXRfZnJlZV9yZWdpb24gICA9IGNlbnRhdXJfZ2V0X2ZyZWVfcmVnaW9uLApAQCAtMjIwLDUgKzEyNCwzIEBACiAJc2V0X210cnJfb3BzKCZjZW50YXVyX210cnJfb3BzKTsKIAlyZXR1cm4gMDsKIH0KLQotLy9hcmNoX2luaXRjYWxsKGNlbnRhdXJfaW5pdF9tdHJyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCmluZGV4IDFkNTg0YTEuLjMxNTczOGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYwpAQCAtMSw1MSArMSw3NSBAQAotLyogIE1UUlIgKE1lbW9yeSBUeXBlIFJhbmdlIFJlZ2lzdGVyKSBjbGVhbnVwCi0KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDkgWWluZ2hhaSBMdQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qLwotCisvKgorICogTVRSUiAoTWVtb3J5IFR5cGUgUmFuZ2UgUmVnaXN0ZXIpIGNsZWFudXAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFlpbmdoYWkgTHUKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9rdm1fcGFyYS5oPgogCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL2t2bV9wYXJhLmg+CisKICNpbmNsdWRlICJtdHJyLmgiCiAKLS8qIHNob3VsZCBiZSByZWxhdGVkIHRvIE1UUlJfVkFSX1JBTkdFUyBudW1zICovCi0jZGVmaW5lIFJBTkdFX05VTSAyNTYKLQogc3RydWN0IHJlc19yYW5nZSB7Ci0JdW5zaWduZWQgbG9uZyBzdGFydDsKLQl1bnNpZ25lZCBsb25nIGVuZDsKKwl1bnNpZ25lZCBsb25nCXN0YXJ0OworCXVuc2lnbmVkIGxvbmcJZW5kOwogfTsKIAorc3RydWN0IHZhcl9tdHJyX3JhbmdlX3N0YXRlIHsKKwl1bnNpZ25lZCBsb25nCWJhc2VfcGZuOworCXVuc2lnbmVkIGxvbmcJc2l6ZV9wZm47CisJbXRycl90eXBlCXR5cGU7Cit9OworCitzdHJ1Y3QgdmFyX210cnJfc3RhdGUgeworCXVuc2lnbmVkIGxvbmcJcmFuZ2Vfc3RhcnRrOworCXVuc2lnbmVkIGxvbmcJcmFuZ2Vfc2l6ZWs7CisJdW5zaWduZWQgbG9uZwljaHVua19zaXplazsKKwl1bnNpZ25lZCBsb25nCWdyYW5fc2l6ZWs7CisJdW5zaWduZWQgaW50CXJlZzsKK307CisKKy8qIFNob3VsZCBiZSByZWxhdGVkIHRvIE1UUlJfVkFSX1JBTkdFUyBudW1zICovCisjZGVmaW5lIFJBTkdFX05VTQkJCQkyNTYKKworc3RhdGljIHN0cnVjdCByZXNfcmFuZ2UgX19pbml0ZGF0YQkJcmFuZ2VbUkFOR0VfTlVNXTsKK3N0YXRpYyBpbnQgX19pbml0ZGF0YQkJCQlucl9yYW5nZTsKKworc3RhdGljIHN0cnVjdCB2YXJfbXRycl9yYW5nZV9zdGF0ZSBfX2luaXRkYXRhCXJhbmdlX3N0YXRlW1JBTkdFX05VTV07CisKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBkZWJ1Z19wcmludDsKKyNkZWZpbmUgRHByaW50ayh4Li4uKSBkbyB7IGlmIChkZWJ1Z19wcmludCkgcHJpbnRrKEtFUk5fREVCVUcgeCk7IH0gd2hpbGUgKDApCisKKwogc3RhdGljIGludCBfX2luaXQKLWFkZF9yYW5nZShzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpCithZGRfcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwKKwkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCS8qIG91dCBvZiBzbG90cyAqLworCS8qIE91dCBvZiBzbG90czogKi8KIAlpZiAobnJfcmFuZ2UgPj0gUkFOR0VfTlVNKQogCQlyZXR1cm4gbnJfcmFuZ2U7CiAKQEAgLTU4LDEyICs4MiwxMiBAQAogfQogCiBzdGF0aWMgaW50IF9faW5pdAotYWRkX3JhbmdlX3dpdGhfbWVyZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQorYWRkX3JhbmdlX3dpdGhfbWVyZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwKKwkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlpbnQgaTsKIAotCS8qIHRyeSB0byBtZXJnZSBpdCB3aXRoIG9sZCBvbmUgKi8KKwkvKiBUcnkgdG8gbWVyZ2UgaXQgd2l0aCBvbGQgb25lOiAqLwogCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKIAkJdW5zaWduZWQgbG9uZyBjb21tb25fc3RhcnQsIGNvbW1vbl9lbmQ7CkBAIC04NCw3ICsxMDgsNyBAQAogCQlyZXR1cm4gbnJfcmFuZ2U7CiAJfQogCi0JLyogbmVlZCB0byBhZGQgdGhhdCAqLworCS8qIE5lZWQgdG8gYWRkIGl0OiAqLwogCXJldHVybiBhZGRfcmFuZ2UocmFuZ2UsIG5yX3JhbmdlLCBzdGFydCwgZW5kKTsKIH0KIApAQCAtMTE3LDcgKzE0MSw3IEBACiAJCX0KIAogCQlpZiAoc3RhcnQgPiByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQpIHsKLQkJCS8qIGZpbmQgdGhlIG5ldyBzcGFyZSAqLworCQkJLyogRmluZCB0aGUgbmV3IHNwYXJlOiAqLwogCQkJZm9yIChpID0gMDsgaSA8IFJBTkdFX05VTTsgaSsrKSB7CiAJCQkJaWYgKHJhbmdlW2ldLmVuZCA9PSAwKQogCQkJCQlicmVhazsKQEAgLTE0NiwxNCArMTcwLDggQEAKIAlyZXR1cm4gc3RhcnQxIC0gc3RhcnQyOwogfQogCi1zdHJ1Y3QgdmFyX210cnJfcmFuZ2Vfc3RhdGUgewotCXVuc2lnbmVkIGxvbmcgYmFzZV9wZm47Ci0JdW5zaWduZWQgbG9uZyBzaXplX3BmbjsKLQltdHJyX3R5cGUgdHlwZTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdmFyX210cnJfcmFuZ2Vfc3RhdGUgX19pbml0ZGF0YSByYW5nZV9zdGF0ZVtSQU5HRV9OVU1dOwotc3RhdGljIGludCBfX2luaXRkYXRhIGRlYnVnX3ByaW50OworI2RlZmluZSBCSU9TX0JVR19NU0cgS0VSTl9XQVJOSU5HIFwKKwkiV0FSTklORzogQklPUyBidWc6IFZBUiBNVFJSICVkIGNvbnRhaW5zIHN0cmFuZ2UgVUMgZW50cnkgdW5kZXIgMU0sIGNoZWNrIHdpdGggeW91ciBzeXN0ZW0gdmVuZG9yIVxuIgogCiBzdGF0aWMgaW50IF9faW5pdAogeDg2X2dldF9tdHJyX21lbV9yYW5nZShzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlLApAQCAtMTgwLDcgKzE5OCw3IEBACiAJCQkJIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgKyAxKTsKIAl9CiAKLQkvKiB0YWtlIG91dCBVQyByYW5nZXMgKi8KKwkvKiBUYWtlIG91dCBVQyByYW5nZXM6ICovCiAJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKIAkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7CiAJCWlmICh0eXBlICE9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFICYmCkBAIC0xOTMsOSArMjExLDcgQEAKIAkJaWYgKGJhc2UgPCAoMTw8KDIwLVBBR0VfU0hJRlQpKSAmJiBtdHJyX3N0YXRlLmhhdmVfZml4ZWQgJiYKIAkJICAgIChtdHJyX3N0YXRlLmVuYWJsZWQgJiAxKSkgewogCQkJLyogVmFyIE1UUlIgY29udGFpbnMgVUMgZW50cnkgYmVsb3cgMU0/IFNraXAgaXQ6ICovCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBCSU9TIGJ1ZzogVkFSIE1UUlIgJWQgIgotCQkJCSJjb250YWlucyBzdHJhbmdlIFVDIGVudHJ5IHVuZGVyIDFNLCBjaGVjayAiCi0JCQkJIndpdGggeW91ciBzeXN0ZW0gdmVuZG9yIVxuIiwgaSk7CisJCQlwcmludGsoQklPU19CVUdfTVNHLCBpKTsKIAkJCWlmIChiYXNlICsgc2l6ZSA8PSAoMTw8KDIwLVBBR0VfU0hJRlQpKSkKIAkJCQljb250aW51ZTsKIAkJCXNpemUgLT0gKDE8PCgyMC1QQUdFX1NISUZUKSkgLSBiYXNlOwpAQCAtMjM3LDE3ICsyNTMsMTMgQEAKIAlyZXR1cm4gbnJfcmFuZ2U7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzX3JhbmdlIF9faW5pdGRhdGEgcmFuZ2VbUkFOR0VfTlVNXTsKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBucl9yYW5nZTsKLQogI2lmZGVmIENPTkZJR19NVFJSX1NBTklUSVpFUgogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgc3VtX3JhbmdlcyhzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlKQogewotCXVuc2lnbmVkIGxvbmcgc3VtOworCXVuc2lnbmVkIGxvbmcgc3VtID0gMDsKIAlpbnQgaTsKIAotCXN1bSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCiAJCXN1bSArPSByYW5nZVtpXS5lbmQgKyAxIC0gcmFuZ2VbaV0uc3RhcnQ7CiAKQEAgLTI3OCwxNyArMjkwLDkgQEAKIH0KIGVhcmx5X3BhcmFtKCJtdHJyX2NsZWFudXBfZGVidWciLCBtdHJyX2NsZWFudXBfZGVidWdfc2V0dXApOwogCi1zdHJ1Y3QgdmFyX210cnJfc3RhdGUgewotCXVuc2lnbmVkIGxvbmcJcmFuZ2Vfc3RhcnRrOwotCXVuc2lnbmVkIGxvbmcJcmFuZ2Vfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZwljaHVua19zaXplazsKLQl1bnNpZ25lZCBsb25nCWdyYW5fc2l6ZWs7Ci0JdW5zaWduZWQgaW50CXJlZzsKLX07Ci0KIHN0YXRpYyB2b2lkIF9faW5pdAogc2V0X3Zhcl9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZWssIHVuc2lnbmVkIGxvbmcgc2l6ZWssCi0JCXVuc2lnbmVkIGNoYXIgdHlwZSwgdW5zaWduZWQgaW50IGFkZHJlc3NfYml0cykKKwkgICAgIHVuc2lnbmVkIGNoYXIgdHlwZSwgdW5zaWduZWQgaW50IGFkZHJlc3NfYml0cykKIHsKIAl1MzIgYmFzZV9sbywgYmFzZV9oaSwgbWFza19sbywgbWFza19oaTsKIAl1NjQgYmFzZSwgbWFzazsKQEAgLTMwMSw3ICszMDUsNyBAQAogCW1hc2sgPSAoMVVMTCA8PCBhZGRyZXNzX2JpdHMpIC0gMTsKIAltYXNrICY9IH4oKCgodTY0KXNpemVrKSA8PCAxMCkgLSAxKTsKIAotCWJhc2UgID0gKCh1NjQpYmFzZWspIDw8IDEwOworCWJhc2UgPSAoKHU2NCliYXNlaykgPDwgMTA7CiAKIAliYXNlIHw9IHR5cGU7CiAJbWFzayB8PSAweDgwMDsKQEAgLTMxNywxNSArMzIxLDE0IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdAogc2F2ZV92YXJfbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2VrLCB1bnNpZ25lZCBsb25nIHNpemVrLAotCQl1bnNpZ25lZCBjaGFyIHR5cGUpCisJICAgICAgdW5zaWduZWQgY2hhciB0eXBlKQogewogCXJhbmdlX3N0YXRlW3JlZ10uYmFzZV9wZm4gPSBiYXNlayA+PiAoUEFHRV9TSElGVCAtIDEwKTsKIAlyYW5nZV9zdGF0ZVtyZWddLnNpemVfcGZuID0gc2l6ZWsgPj4gKFBBR0VfU0hJRlQgLSAxMCk7CiAJcmFuZ2Vfc3RhdGVbcmVnXS50eXBlID0gdHlwZTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0Ci1zZXRfdmFyX210cnJfYWxsKHVuc2lnbmVkIGludCBhZGRyZXNzX2JpdHMpCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X3Zhcl9tdHJyX2FsbCh1bnNpZ25lZCBpbnQgYWRkcmVzc19iaXRzKQogewogCXVuc2lnbmVkIGxvbmcgYmFzZWssIHNpemVrOwogCXVuc2lnbmVkIGNoYXIgdHlwZTsKQEAgLTM0MiwxMSArMzQ1LDExIEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRvX3NpemVfZmFjdG9yKHVuc2lnbmVkIGxvbmcgc2l6ZWssIGNoYXIgKmZhY3RvcnApCiB7Ci0JY2hhciBmYWN0b3I7CiAJdW5zaWduZWQgbG9uZyBiYXNlID0gc2l6ZWs7CisJY2hhciBmYWN0b3I7CiAKIAlpZiAoYmFzZSAmICgoMTw8MTApIC0gMSkpIHsKLQkJLyogbm90IE1CIGFsaWdubWVudCAqLworCQkvKiBOb3QgTUItYWxpZ25lZDogKi8KIAkJZmFjdG9yID0gJ0snOwogCX0gZWxzZSBpZiAoYmFzZSAmICgoMTw8MjApIC0gMSkpIHsKIAkJZmFjdG9yID0gJ00nOwpAQCAtMzcyLDExICszNzUsMTIgQEAKIAkJdW5zaWduZWQgbG9uZyBtYXhfYWxpZ24sIGFsaWduOwogCQl1bnNpZ25lZCBsb25nIHNpemVrOwogCi0JCS8qIENvbXB1dGUgdGhlIG1heGltdW0gc2l6ZSBJIGNhbiBtYWtlIGEgcmFuZ2UgKi8KKwkJLyogQ29tcHV0ZSB0aGUgbWF4aW11bSBzaXplIHdpdGggd2hpY2ggd2UgY2FuIG1ha2UgYSByYW5nZTogKi8KIAkJaWYgKHJhbmdlX3N0YXJ0aykKIAkJCW1heF9hbGlnbiA9IGZmcyhyYW5nZV9zdGFydGspIC0gMTsKIAkJZWxzZQogCQkJbWF4X2FsaWduID0gMzI7CisKIAkJYWxpZ24gPSBmbHMocmFuZ2Vfc2l6ZWspIC0gMTsKIAkJaWYgKGFsaWduID4gbWF4X2FsaWduKQogCQkJYWxpZ24gPSBtYXhfYWxpZ247CkBAIC0zODYsMTEgKzM5MCwxMCBAQAogCQkJY2hhciBzdGFydF9mYWN0b3IgPSAnSycsIHNpemVfZmFjdG9yID0gJ0snOwogCQkJdW5zaWduZWQgbG9uZyBzdGFydF9iYXNlLCBzaXplX2Jhc2U7CiAKLQkJCXN0YXJ0X2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyYW5nZV9zdGFydGssCi0JCQkJCQkJICZzdGFydF9mYWN0b3IpLAotCQkJc2l6ZV9iYXNlID0gdG9fc2l6ZV9mYWN0b3Ioc2l6ZWssICZzaXplX2ZhY3RvciksCisJCQlzdGFydF9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmFuZ2Vfc3RhcnRrLCAmc3RhcnRfZmFjdG9yKTsKKwkJCXNpemVfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHNpemVrLCAmc2l6ZV9mYWN0b3IpOwogCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiU2V0dGluZyB2YXJpYWJsZSBNVFJSICVkLCAiCisJCQlEcHJpbnRrKCJTZXR0aW5nIHZhcmlhYmxlIE1UUlIgJWQsICIKIAkJCQkiYmFzZTogJWxkJWNCLCByYW5nZTogJWxkJWNCLCB0eXBlICVzXG4iLAogCQkJCXJlZywgc3RhcnRfYmFzZSwgc3RhcnRfZmFjdG9yLAogCQkJCXNpemVfYmFzZSwgc2l6ZV9mYWN0b3IsCkBAIC00MjUsMTAgKzQyOCwxMSBAQAogCWNodW5rX3NpemVrID0gc3RhdGUtPmNodW5rX3NpemVrOwogCWdyYW5fc2l6ZWsgPSBzdGF0ZS0+Z3Jhbl9zaXplazsKIAotCS8qIGFsaWduIHdpdGggZ3JhbiBzaXplLCBwcmV2ZW50IHNtYWxsIGJsb2NrIHVzZWQgdXAgTVRSUnMgKi8KKwkvKiBBbGlnbiB3aXRoIGdyYW4gc2l6ZSwgcHJldmVudCBzbWFsbCBibG9jayB1c2VkIHVwIE1UUlJzOiAqLwogCXJhbmdlX2Jhc2VrID0gQUxJR04oc3RhdGUtPnJhbmdlX3N0YXJ0aywgZ3Jhbl9zaXplayk7CiAJaWYgKChyYW5nZV9iYXNlayA+IGJhc2VrKSAmJiBiYXNlaykKIAkJcmV0dXJuIHNlY29uZF9zaXplazsKKwogCXN0YXRlLT5yYW5nZV9zaXplayAtPSAocmFuZ2VfYmFzZWsgLSBzdGF0ZS0+cmFuZ2Vfc3RhcnRrKTsKIAlyYW5nZV9zaXplayA9IEFMSUdOKHN0YXRlLT5yYW5nZV9zaXplaywgZ3Jhbl9zaXplayk7CiAKQEAgLTQzOSwyMiArNDQzLDIxIEBACiAJfQogCXN0YXRlLT5yYW5nZV9zaXplayA9IHJhbmdlX3NpemVrOwogCi0JLyogdHJ5IHRvIGFwcGVuZCBzb21lIHNtYWxsIGhvbGUgKi8KKwkvKiBUcnkgdG8gYXBwZW5kIHNvbWUgc21hbGwgaG9sZTogKi8KIAlyYW5nZTBfYmFzZWsgPSBzdGF0ZS0+cmFuZ2Vfc3RhcnRrOwogCXJhbmdlMF9zaXplayA9IEFMSUdOKHN0YXRlLT5yYW5nZV9zaXplaywgY2h1bmtfc2l6ZWspOwogCi0JLyogbm8gaW5jcmVhc2UgKi8KKwkvKiBObyBpbmNyZWFzZTogKi8KIAlpZiAocmFuZ2UwX3NpemVrID09IHN0YXRlLT5yYW5nZV9zaXplaykgewotCQlpZiAoZGVidWdfcHJpbnQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAicmFuZ2VYOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJcmFuZ2UwX2Jhc2VrPDwxMCwKLQkJCQkocmFuZ2UwX2Jhc2VrICsgc3RhdGUtPnJhbmdlX3NpemVrKTw8MTApOworCQlEcHJpbnRrKCJyYW5nZVg6ICUwMTZseCAtICUwMTZseFxuIiwKKwkJCXJhbmdlMF9iYXNlazw8MTAsCisJCQkocmFuZ2UwX2Jhc2VrICsgc3RhdGUtPnJhbmdlX3NpemVrKTw8MTApOwogCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCByYW5nZTBfYmFzZWssCiAJCQkJc3RhdGUtPnJhbmdlX3NpemVrLCBNVFJSX1RZUEVfV1JCQUNLKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogb25seSBjdXQgYmFjaywgd2hlbiBpdCBpcyBub3QgdGhlIGxhc3QgKi8KKwkvKiBPbmx5IGN1dCBiYWNrIHdoZW4gaXQgaXMgbm90IHRoZSBsYXN0OiAqLwogCWlmIChzaXplaykgewogCQl3aGlsZSAocmFuZ2UwX2Jhc2VrICsgcmFuZ2UwX3NpemVrID4gKGJhc2VrICsgc2l6ZWspKSB7CiAJCQlpZiAocmFuZ2UwX3NpemVrID49IGNodW5rX3NpemVrKQpAQCAtNDcwLDE2ICs0NzMsMTYgQEAKIHNlY29uZF90cnk6CiAJcmFuZ2VfYmFzZWsgPSByYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWs7CiAKLQkvKiBvbmUgaG9sZSBpbiB0aGUgbWlkZGxlICovCisJLyogT25lIGhvbGUgaW4gdGhlIG1pZGRsZTogKi8KIAlpZiAocmFuZ2VfYmFzZWsgPiBiYXNlayAmJiByYW5nZV9iYXNlayA8PSAoYmFzZWsgKyBzaXplaykpCiAJCXNlY29uZF9zaXplayA9IHJhbmdlX2Jhc2VrIC0gYmFzZWs7CiAKIAlpZiAocmFuZ2UwX3NpemVrID4gc3RhdGUtPnJhbmdlX3NpemVrKSB7CiAKLQkJLyogb25lIGhvbGUgaW4gbWlkZGxlIG9yIGF0IGVuZCAqLworCQkvKiBPbmUgaG9sZSBpbiBtaWRkbGUgb3IgYXQgdGhlIGVuZDogKi8KIAkJaG9sZV9zaXplayA9IHJhbmdlMF9zaXplayAtIHN0YXRlLT5yYW5nZV9zaXplayAtIHNlY29uZF9zaXplazsKIAotCQkvKiBob2xlIHNpemUgc2hvdWxkIGJlIGxlc3MgdGhhbiBoYWxmIG9mIHJhbmdlMCBzaXplICovCisJCS8qIEhvbGUgc2l6ZSBzaG91bGQgYmUgbGVzcyB0aGFuIGhhbGYgb2YgcmFuZ2UwIHNpemU6ICovCiAJCWlmIChob2xlX3NpemVrID49IChyYW5nZTBfc2l6ZWsgPj4gMSkgJiYKIAkJICAgIHJhbmdlMF9zaXplayA+PSBjaHVua19zaXplaykgewogCQkJcmFuZ2UwX3NpemVrIC09IGNodW5rX3NpemVrOwpAQCAtNDkxLDMyICs0OTQsMzAgQEAKIAl9CiAKIAlpZiAocmFuZ2UwX3NpemVrKSB7Ci0JCWlmIChkZWJ1Z19wcmludCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJyYW5nZTA6ICUwMTZseCAtICUwMTZseFxuIiwKLQkJCQlyYW5nZTBfYmFzZWs8PDEwLAotCQkJCShyYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWspPDwxMCk7CisJCURwcmludGsoInJhbmdlMDogJTAxNmx4IC0gJTAxNmx4XG4iLAorCQkJcmFuZ2UwX2Jhc2VrPDwxMCwKKwkJCShyYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWspPDwxMCk7CiAJCXN0YXRlLT5yZWcgPSByYW5nZV90b19tdHJyKHN0YXRlLT5yZWcsIHJhbmdlMF9iYXNlaywKIAkJCQlyYW5nZTBfc2l6ZWssIE1UUlJfVFlQRV9XUkJBQ0spOwogCX0KIAogCWlmIChyYW5nZTBfc2l6ZWsgPCBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKLQkJLyogbmVlZCB0byBoYW5kbGUgbGVmdCBvdmVyICovCisJCS8qIE5lZWQgdG8gaGFuZGxlIGxlZnQgb3ZlciByYW5nZTogKi8KIAkJcmFuZ2Vfc2l6ZWsgPSBzdGF0ZS0+cmFuZ2Vfc2l6ZWsgLSByYW5nZTBfc2l6ZWs7CiAKLQkJaWYgKGRlYnVnX3ByaW50KQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInJhbmdlOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJIHJhbmdlX2Jhc2VrPDwxMCwKLQkJCQkgKHJhbmdlX2Jhc2VrICsgcmFuZ2Vfc2l6ZWspPDwxMCk7CisJCURwcmludGsoInJhbmdlOiAlMDE2bHggLSAlMDE2bHhcbiIsCisJCQkgcmFuZ2VfYmFzZWs8PDEwLAorCQkJIChyYW5nZV9iYXNlayArIHJhbmdlX3NpemVrKTw8MTApOworCiAJCXN0YXRlLT5yZWcgPSByYW5nZV90b19tdHJyKHN0YXRlLT5yZWcsIHJhbmdlX2Jhc2VrLAogCQkJCSByYW5nZV9zaXplaywgTVRSUl9UWVBFX1dSQkFDSyk7CiAJfQogCiAJaWYgKGhvbGVfc2l6ZWspIHsKIAkJaG9sZV9iYXNlayA9IHJhbmdlX2Jhc2VrIC0gaG9sZV9zaXplayAtIHNlY29uZF9zaXplazsKLQkJaWYgKGRlYnVnX3ByaW50KQotCQkJcHJpbnRrKEtFUk5fREVCVUcgImhvbGU6ICUwMTZseCAtICUwMTZseFxuIiwKLQkJCQkgaG9sZV9iYXNlazw8MTAsCi0JCQkJIChob2xlX2Jhc2VrICsgaG9sZV9zaXplayk8PDEwKTsKKwkJRHByaW50aygiaG9sZTogJTAxNmx4IC0gJTAxNmx4XG4iLAorCQkJIGhvbGVfYmFzZWs8PDEwLAorCQkJIChob2xlX2Jhc2VrICsgaG9sZV9zaXplayk8PDEwKTsKIAkJc3RhdGUtPnJlZyA9IHJhbmdlX3RvX210cnIoc3RhdGUtPnJlZywgaG9sZV9iYXNlaywKIAkJCQkgaG9sZV9zaXplaywgTVRSUl9UWVBFX1VOQ0FDSEFCTEUpOwogCX0KQEAgLTUzNywyMyArNTM4LDIzIEBACiAJYmFzZWsgPSBiYXNlX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKIAlzaXplayA9IHNpemVfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwogCi0JLyogU2VlIGlmIEkgY2FuIG1lcmdlIHdpdGggdGhlIGxhc3QgcmFuZ2UgKi8KKwkvKiBTZWUgaWYgSSBjYW4gbWVyZ2Ugd2l0aCB0aGUgbGFzdCByYW5nZTogKi8KIAlpZiAoKGJhc2VrIDw9IDEwMjQpIHx8CiAJICAgIChzdGF0ZS0+cmFuZ2Vfc3RhcnRrICsgc3RhdGUtPnJhbmdlX3NpemVrID09IGJhc2VrKSkgewogCQl1bnNpZ25lZCBsb25nIGVuZGsgPSBiYXNlayArIHNpemVrOwogCQlzdGF0ZS0+cmFuZ2Vfc2l6ZWsgPSBlbmRrIC0gc3RhdGUtPnJhbmdlX3N0YXJ0azsKIAkJcmV0dXJuOwogCX0KLQkvKiBXcml0ZSB0aGUgcmFuZ2UgbXRycnMgKi8KKwkvKiBXcml0ZSB0aGUgcmFuZ2UgbXRycnM6ICovCiAJaWYgKHN0YXRlLT5yYW5nZV9zaXplayAhPSAwKQogCQlzZWNvbmRfc2l6ZWsgPSByYW5nZV90b19tdHJyX3dpdGhfaG9sZShzdGF0ZSwgYmFzZWssIHNpemVrKTsKIAotCS8qIEFsbG9jYXRlIGFuIG1zciAqLworCS8qIEFsbG9jYXRlIGFuIG1zcjogKi8KIAlzdGF0ZS0+cmFuZ2Vfc3RhcnRrID0gYmFzZWsgKyBzZWNvbmRfc2l6ZWs7CiAJc3RhdGUtPnJhbmdlX3NpemVrICA9IHNpemVrIC0gc2Vjb25kX3NpemVrOwogfQogCi0vKiBtaW5pbnVtIHNpemUgb2YgbXRyciBibG9jayB0aGF0IGNhbiB0YWtlIGhvbGUgKi8KKy8qIE1pbmludW0gc2l6ZSBvZiBtdHJyIGJsb2NrIHRoYXQgY2FuIHRha2UgaG9sZTogKi8KIHN0YXRpYyB1NjQgbXRycl9jaHVua19zaXplIF9faW5pdGRhdGEgPSAoMjU2VUxMPDwyMCk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHBhcnNlX210cnJfY2h1bmtfc2l6ZV9vcHQoY2hhciAqcCkKQEAgLTU2NSw3ICs1NjYsNyBAQAogfQogZWFybHlfcGFyYW0oIm10cnJfY2h1bmtfc2l6ZSIsIHBhcnNlX210cnJfY2h1bmtfc2l6ZV9vcHQpOwogCi0vKiBncmFuaXR5IG9mIG10cnIgb2YgYmxvY2sgKi8KKy8qIEdyYW51bGFyaXR5IG9mIG10cnIgb2YgYmxvY2s6ICovCiBzdGF0aWMgdTY0IG10cnJfZ3Jhbl9zaXplIF9faW5pdGRhdGE7CiAKIHN0YXRpYyBpbnQgX19pbml0IHBhcnNlX210cnJfZ3Jhbl9zaXplX29wdChjaGFyICpwKQpAQCAtNTc3LDcgKzU3OCw3IEBACiB9CiBlYXJseV9wYXJhbSgibXRycl9ncmFuX3NpemUiLCBwYXJzZV9tdHJyX2dyYW5fc2l6ZV9vcHQpOwogCi1zdGF0aWMgaW50IG5yX210cnJfc3BhcmVfcmVnIF9faW5pdGRhdGEgPQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbnJfbXRycl9zcGFyZV9yZWcgX19pbml0ZGF0YSA9CiAJCQkJIENPTkZJR19NVFJSX1NBTklUSVpFUl9TUEFSRV9SRUdfTlJfREVGQVVMVDsKIAogc3RhdGljIGludCBfX2luaXQgcGFyc2VfbXRycl9zcGFyZV9yZWcoY2hhciAqYXJnKQpAQCAtNTg2LDcgKzU4Nyw2IEBACiAJCW5yX210cnJfc3BhcmVfcmVnID0gc2ltcGxlX3N0cnRvdWwoYXJnLCBOVUxMLCAwKTsKIAlyZXR1cm4gMDsKIH0KLQogZWFybHlfcGFyYW0oIm10cnJfc3BhcmVfcmVnX25yIiwgcGFyc2VfbXRycl9zcGFyZV9yZWcpOwogCiBzdGF0aWMgaW50IF9faW5pdApAQCAtNTk0LDggKzU5NCw4IEBACiAJCSAgICB1NjQgY2h1bmtfc2l6ZSwgdTY0IGdyYW5fc2l6ZSkKIHsKIAlzdHJ1Y3QgdmFyX210cnJfc3RhdGUgdmFyX3N0YXRlOwotCWludCBpOwogCWludCBudW1fcmVnOworCWludCBpOwogCiAJdmFyX3N0YXRlLnJhbmdlX3N0YXJ0awk9IDA7CiAJdmFyX3N0YXRlLnJhbmdlX3NpemVrCT0gMDsKQEAgLTYwNSwxNyArNjA1LDE4IEBACiAKIAltZW1zZXQocmFuZ2Vfc3RhdGUsIDAsIHNpemVvZihyYW5nZV9zdGF0ZSkpOwogCi0JLyogV3JpdGUgdGhlIHJhbmdlIGV0YyAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQorCS8qIFdyaXRlIHRoZSByYW5nZTogKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykgewogCQlzZXRfdmFyX210cnJfcmFuZ2UoJnZhcl9zdGF0ZSwgcmFuZ2VbaV0uc3RhcnQsCiAJCQkJICAgcmFuZ2VbaV0uZW5kIC0gcmFuZ2VbaV0uc3RhcnQgKyAxKTsKKwl9CiAKLQkvKiBXcml0ZSB0aGUgbGFzdCByYW5nZSAqLworCS8qIFdyaXRlIHRoZSBsYXN0IHJhbmdlOiAqLwogCWlmICh2YXJfc3RhdGUucmFuZ2Vfc2l6ZWsgIT0gMCkKIAkJcmFuZ2VfdG9fbXRycl93aXRoX2hvbGUoJnZhcl9zdGF0ZSwgMCwgMCk7CiAKIAludW1fcmVnID0gdmFyX3N0YXRlLnJlZzsKLQkvKiBDbGVhciBvdXQgdGhlIGV4dHJhIE1UUlIncyAqLworCS8qIENsZWFyIG91dCB0aGUgZXh0cmEgTVRSUidzOiAqLwogCXdoaWxlICh2YXJfc3RhdGUucmVnIDwgbnVtX3Zhcl9yYW5nZXMpIHsKIAkJc2F2ZV92YXJfbXRycih2YXJfc3RhdGUucmVnLCAwLCAwLCAwKTsKIAkJdmFyX3N0YXRlLnJlZysrOwpAQCAtNjI1LDExICs2MjYsMTEgQEAKIH0KIAogc3RydWN0IG10cnJfY2xlYW51cF9yZXN1bHQgewotCXVuc2lnbmVkIGxvbmcgZ3Jhbl9zaXplazsKLQl1bnNpZ25lZCBsb25nIGNodW5rX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgbG9zZV9jb3Zlcl9zaXplazsKLQl1bnNpZ25lZCBpbnQgbnVtX3JlZzsKLQlpbnQgYmFkOworCXVuc2lnbmVkIGxvbmcJZ3Jhbl9zaXplazsKKwl1bnNpZ25lZCBsb25nCWNodW5rX3NpemVrOworCXVuc2lnbmVkIGxvbmcJbG9zZV9jb3Zlcl9zaXplazsKKwl1bnNpZ25lZCBpbnQJbnVtX3JlZzsKKwlpbnQJCWJhZDsKIH07CiAKIC8qCkBAIC02NDUsMTAgKzY0NiwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfb3V0X210cnJfcmFuZ2Vfc3RhdGUodm9pZCkKIHsKLQlpbnQgaTsKIAljaGFyIHN0YXJ0X2ZhY3RvciA9ICdLJywgc2l6ZV9mYWN0b3IgPSAnSyc7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9iYXNlLCBzaXplX2Jhc2U7CiAJbXRycl90eXBlIHR5cGU7CisJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewogCkBAIC02NzYsMTAgKzY3NywxMCBAQAogCWludCBpOwogCW10cnJfdHlwZSB0eXBlOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQkvKiBleHRyYSBvbmUgZm9yIGFsbCAwICovCisJLyogRXh0cmEgb25lIGZvciBhbGwgMDogKi8KIAlpbnQgbnVtW01UUlJfTlVNX1RZUEVTICsgMV07CiAKLQkvKiBjaGVjayBlbnRyaWVzIG51bWJlciAqLworCS8qIENoZWNrIGVudHJpZXMgbnVtYmVyOiAqLwogCW1lbXNldChudW0sIDAsIHNpemVvZihudW0pKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewogCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKQEAgLTY5Myw4OCArNjk0LDg2IEBACiAJCW51bVt0eXBlXSsrOwogCX0KIAotCS8qIGNoZWNrIGlmIHdlIGdvdCBVQyBlbnRyaWVzICovCisJLyogQ2hlY2sgaWYgd2UgZ290IFVDIGVudHJpZXM6ICovCiAJaWYgKCFudW1bTVRSUl9UWVBFX1VOQ0FDSEFCTEVdKQogCQlyZXR1cm4gMDsKIAotCS8qIGNoZWNrIGlmIHdlIG9ubHkgaGFkIFdCIGFuZCBVQyAqLworCS8qIENoZWNrIGlmIHdlIG9ubHkgaGFkIFdCIGFuZCBVQyAqLwogCWlmIChudW1bTVRSUl9UWVBFX1dSQkFDS10gKyBudW1bTVRSUl9UWVBFX1VOQ0FDSEFCTEVdICE9Ci0JCW51bV92YXJfcmFuZ2VzIC0gbnVtW01UUlJfTlVNX1RZUEVTXSkKKwkgICAgbnVtX3Zhcl9yYW5nZXMgLSBudW1bTVRSUl9OVU1fVFlQRVNdKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHJhbmdlX3N1bXM7Ci1zdGF0aWMgdm9pZCBfX2luaXQgbXRycl9jYWxjX3JhbmdlX3N0YXRlKHU2NCBjaHVua19zaXplLCB1NjQgZ3Jhbl9zaXplLAotCQkJCQkgdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfYmFzZSwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX3NpemUsCi0JCQkJCSBpbnQgaSkKKworc3RhdGljIHZvaWQgX19pbml0CittdHJyX2NhbGNfcmFuZ2Vfc3RhdGUodTY0IGNodW5rX3NpemUsIHU2NCBncmFuX3NpemUsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgeF9yZW1vdmVfYmFzZSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyB4X3JlbW92ZV9zaXplLCBpbnQgaSkKIHsKLQlpbnQgbnVtX3JlZzsKIAlzdGF0aWMgc3RydWN0IHJlc19yYW5nZSByYW5nZV9uZXdbUkFOR0VfTlVNXTsKLQlzdGF0aWMgaW50IG5yX3JhbmdlX25ldzsKIAl1bnNpZ25lZCBsb25nIHJhbmdlX3N1bXNfbmV3OworCXN0YXRpYyBpbnQgbnJfcmFuZ2VfbmV3OworCWludCBudW1fcmVnOwogCi0JLyogY29udmVydCByYW5nZXMgdG8gdmFyIHJhbmdlcyBzdGF0ZSAqLwotCW51bV9yZWcgPSB4ODZfc2V0dXBfdmFyX210cnJzKHJhbmdlLCBucl9yYW5nZSwKLQkJCQkJCWNodW5rX3NpemUsIGdyYW5fc2l6ZSk7CisJLyogQ29udmVydCByYW5nZXMgdG8gdmFyIHJhbmdlcyBzdGF0ZTogKi8KKwludW1fcmVnID0geDg2X3NldHVwX3Zhcl9tdHJycyhyYW5nZSwgbnJfcmFuZ2UsIGNodW5rX3NpemUsIGdyYW5fc2l6ZSk7CiAKLQkvKiB3ZSBnb3QgbmV3IHNldHRpbmcgaW4gcmFuZ2Vfc3RhdGUsIGNoZWNrIGl0ICovCisJLyogV2UgZ290IG5ldyBzZXR0aW5nIGluIHJhbmdlX3N0YXRlLCBjaGVjayBpdDogKi8KIAltZW1zZXQocmFuZ2VfbmV3LCAwLCBzaXplb2YocmFuZ2VfbmV3KSk7CiAJbnJfcmFuZ2VfbmV3ID0geDg2X2dldF9tdHJyX21lbV9yYW5nZShyYW5nZV9uZXcsIDAsCi0JCQkJZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplKTsKKwkJCQl4X3JlbW92ZV9iYXNlLCB4X3JlbW92ZV9zaXplKTsKIAlyYW5nZV9zdW1zX25ldyA9IHN1bV9yYW5nZXMocmFuZ2VfbmV3LCBucl9yYW5nZV9uZXcpOwogCiAJcmVzdWx0W2ldLmNodW5rX3NpemVrID0gY2h1bmtfc2l6ZSA+PiAxMDsKIAlyZXN1bHRbaV0uZ3Jhbl9zaXplayA9IGdyYW5fc2l6ZSA+PiAxMDsKIAlyZXN1bHRbaV0ubnVtX3JlZyA9IG51bV9yZWc7CisKIAlpZiAocmFuZ2Vfc3VtcyA8IHJhbmdlX3N1bXNfbmV3KSB7Ci0JCXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrID0KLQkJCShyYW5nZV9zdW1zX25ldyAtIHJhbmdlX3N1bXMpIDw8IFBTSElGVDsKKwkJcmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWsgPSAocmFuZ2Vfc3Vtc19uZXcgLSByYW5nZV9zdW1zKSA8PCBQU0hJRlQ7CiAJCXJlc3VsdFtpXS5iYWQgPSAxOwotCX0gZWxzZQotCQlyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplayA9Ci0JCQkocmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3KSA8PCBQU0hJRlQ7CisJfSBlbHNlIHsKKwkJcmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWsgPSAocmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3KSA8PCBQU0hJRlQ7CisJfQogCi0JLyogZG91YmxlIGNoZWNrIGl0ICovCisJLyogRG91YmxlIGNoZWNrIGl0OiAqLwogCWlmICghcmVzdWx0W2ldLmJhZCAmJiAhcmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWspIHsKLQkJaWYgKG5yX3JhbmdlX25ldyAhPSBucl9yYW5nZSB8fAotCQkJbWVtY21wKHJhbmdlLCByYW5nZV9uZXcsIHNpemVvZihyYW5nZSkpKQotCQkJCXJlc3VsdFtpXS5iYWQgPSAxOworCQlpZiAobnJfcmFuZ2VfbmV3ICE9IG5yX3JhbmdlIHx8IG1lbWNtcChyYW5nZSwgcmFuZ2VfbmV3LCBzaXplb2YocmFuZ2UpKSkKKwkJCXJlc3VsdFtpXS5iYWQgPSAxOwogCX0KIAotCWlmICghcmVzdWx0W2ldLmJhZCAmJiAocmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3IDwKLQkJCQltaW5fbG9zc19wZm5bbnVtX3JlZ10pKSB7Ci0JCW1pbl9sb3NzX3BmbltudW1fcmVnXSA9Ci0JCQlyYW5nZV9zdW1zIC0gcmFuZ2Vfc3Vtc19uZXc7Ci0JfQorCWlmICghcmVzdWx0W2ldLmJhZCAmJiAocmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3IDwgbWluX2xvc3NfcGZuW251bV9yZWddKSkKKwkJbWluX2xvc3NfcGZuW251bV9yZWddID0gcmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3OwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpbnQgaSkKIHsKLQljaGFyIGdyYW5fZmFjdG9yLCBjaHVua19mYWN0b3IsIGxvc2VfZmFjdG9yOwogCXVuc2lnbmVkIGxvbmcgZ3Jhbl9iYXNlLCBjaHVua19iYXNlLCBsb3NlX2Jhc2U7CisJY2hhciBncmFuX2ZhY3RvciwgY2h1bmtfZmFjdG9yLCBsb3NlX2ZhY3RvcjsKIAogCWdyYW5fYmFzZSA9IHRvX3NpemVfZmFjdG9yKHJlc3VsdFtpXS5ncmFuX3NpemVrLCAmZ3Jhbl9mYWN0b3IpLAogCWNodW5rX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyZXN1bHRbaV0uY2h1bmtfc2l6ZWssICZjaHVua19mYWN0b3IpLAogCWxvc2VfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrLCAmbG9zZV9mYWN0b3IpLAotCXByaW50ayhLRVJOX0lORk8gIiVzZ3Jhbl9zaXplOiAlbGQlYyBcdGNodW5rX3NpemU6ICVsZCVjIFx0IiwKLQkJCXJlc3VsdFtpXS5iYWQgPyAiKkJBRCoiIDogIiAiLAotCQkJZ3Jhbl9iYXNlLCBncmFuX2ZhY3RvciwgY2h1bmtfYmFzZSwgY2h1bmtfZmFjdG9yKTsKLQlwcmludGsoS0VSTl9DT05UICJudW1fcmVnOiAlZCAgXHRsb3NlIGNvdmVyIFJBTTogJXMlbGQlY1xuIiwKLQkJCXJlc3VsdFtpXS5udW1fcmVnLCByZXN1bHRbaV0uYmFkID8gIi0iIDogIiIsCi0JCQlsb3NlX2Jhc2UsIGxvc2VfZmFjdG9yKTsKKworCXByX2luZm8oIiVzZ3Jhbl9zaXplOiAlbGQlYyBcdGNodW5rX3NpemU6ICVsZCVjIFx0IiwKKwkJcmVzdWx0W2ldLmJhZCA/ICIqQkFEKiIgOiAiICIsCisJCWdyYW5fYmFzZSwgZ3Jhbl9mYWN0b3IsIGNodW5rX2Jhc2UsIGNodW5rX2ZhY3Rvcik7CisJcHJfY29udCgibnVtX3JlZzogJWQgIFx0bG9zZSBjb3ZlciBSQU06ICVzJWxkJWNcbiIsCisJCXJlc3VsdFtpXS5udW1fcmVnLCByZXN1bHRbaV0uYmFkID8gIi0iIDogIiIsCisJCWxvc2VfYmFzZSwgbG9zZV9mYWN0b3IpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBtdHJyX3NlYXJjaF9vcHRpbWFsX2luZGV4KHZvaWQpCiB7Ci0JaW50IGk7CiAJaW50IG51bV9yZWdfZ29vZDsKIAlpbnQgaW5kZXhfZ29vZDsKKwlpbnQgaTsKIAogCWlmIChucl9tdHJyX3NwYXJlX3JlZyA+PSBudW1fdmFyX3JhbmdlcykKIAkJbnJfbXRycl9zcGFyZV9yZWcgPSBudW1fdmFyX3JhbmdlcyAtIDE7CisKIAludW1fcmVnX2dvb2QgPSAtMTsKIAlmb3IgKGkgPSBudW1fdmFyX3JhbmdlcyAtIG5yX210cnJfc3BhcmVfcmVnOyBpID4gMDsgaS0tKSB7CiAJCWlmICghbWluX2xvc3NfcGZuW2ldKQpAQCAtNzk2LDI0ICs3OTUsMjQgQEAKIAlyZXR1cm4gaW5kZXhfZ29vZDsKIH0KIAotCiBpbnQgX19pbml0IG10cnJfY2xlYW51cCh1bnNpZ25lZCBhZGRyZXNzX2JpdHMpCiB7Ci0JdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemU7CisJdW5zaWduZWQgbG9uZyB4X3JlbW92ZV9iYXNlLCB4X3JlbW92ZV9zaXplOwogCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZSwgZGVmLCBkdW1teTsKLQltdHJyX3R5cGUgdHlwZTsKIAl1NjQgY2h1bmtfc2l6ZSwgZ3Jhbl9zaXplOworCW10cnJfdHlwZSB0eXBlOwogCWludCBpbmRleF9nb29kOwogCWludCBpOwogCiAJaWYgKCFpc19jcHUoSU5URUwpIHx8IGVuYWJsZV9tdHJyX2NsZWFudXAgPCAxKQogCQlyZXR1cm4gMDsKKwogCXJkbXNyKE1TUl9NVFJSZGVmVHlwZSwgZGVmLCBkdW1teSk7CiAJZGVmICY9IDB4ZmY7CiAJaWYgKGRlZiAhPSBNVFJSX1RZUEVfVU5DQUNIQUJMRSkKIAkJcmV0dXJuIDA7CiAKLQkvKiBnZXQgaXQgYW5kIHN0b3JlIGl0IGFzaWRlICovCisJLyogR2V0IGl0IGFuZCBzdG9yZSBpdCBhc2lkZTogKi8KIAltZW1zZXQocmFuZ2Vfc3RhdGUsIDAsIHNpemVvZihyYW5nZV9zdGF0ZSkpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CiAJCW10cnJfaWYtPmdldChpLCAmYmFzZSwgJnNpemUsICZ0eXBlKTsKQEAgLTgyMiwyOSArODIxLDI4IEBACiAJCXJhbmdlX3N0YXRlW2ldLnR5cGUgPSB0eXBlOwogCX0KIAotCS8qIGNoZWNrIGlmIHdlIG5lZWQgaGFuZGxlIGl0IGFuZCBjYW4gaGFuZGxlIGl0ICovCisJLyogQ2hlY2sgaWYgd2UgbmVlZCBoYW5kbGUgaXQgYW5kIGNhbiBoYW5kbGUgaXQ6ICovCiAJaWYgKCFtdHJyX25lZWRfY2xlYW51cCgpKQogCQlyZXR1cm4gMDsKIAotCS8qIHByaW50IG9yaWdpbmFsIHZhciBNVFJScyBhdCBmaXJzdCwgZm9yIGRlYnVnZ2luZzogKi8KKwkvKiBQcmludCBvcmlnaW5hbCB2YXIgTVRSUnMgYXQgZmlyc3QsIGZvciBkZWJ1Z2dpbmc6ICovCiAJcHJpbnRrKEtFUk5fREVCVUcgIm9yaWdpbmFsIHZhcmlhYmxlIE1UUlJzXG4iKTsKIAlwcmludF9vdXRfbXRycl9yYW5nZV9zdGF0ZSgpOwogCiAJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YocmFuZ2UpKTsKLQlleHRyYV9yZW1vdmVfc2l6ZSA9IDA7Ci0JZXh0cmFfcmVtb3ZlX2Jhc2UgPSAxIDw8ICgzMiAtIFBBR0VfU0hJRlQpOworCXhfcmVtb3ZlX3NpemUgPSAwOworCXhfcmVtb3ZlX2Jhc2UgPSAxIDw8ICgzMiAtIFBBR0VfU0hJRlQpOwogCWlmIChtdHJyX3RvbTIpCi0JCWV4dHJhX3JlbW92ZV9zaXplID0KLQkJCShtdHJyX3RvbTIgPj4gUEFHRV9TSElGVCkgLSBleHRyYV9yZW1vdmVfYmFzZTsKLQlucl9yYW5nZSA9IHg4Nl9nZXRfbXRycl9tZW1fcmFuZ2UocmFuZ2UsIDAsIGV4dHJhX3JlbW92ZV9iYXNlLAotCQkJCQkgIGV4dHJhX3JlbW92ZV9zaXplKTsKKwkJeF9yZW1vdmVfc2l6ZSA9IChtdHJyX3RvbTIgPj4gUEFHRV9TSElGVCkgLSB4X3JlbW92ZV9iYXNlOworCisJbnJfcmFuZ2UgPSB4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHJhbmdlLCAwLCB4X3JlbW92ZV9iYXNlLCB4X3JlbW92ZV9zaXplKTsKIAkvKgotCSAqIFswLCAxTSkgc2hvdWxkIGFsd2F5cyBiZSBjb3ZlcnJlZCBieSB2YXIgbXRyciB3aXRoIFdCCi0JICogYW5kIGZpeGVkIG10cnJzIHNob3VsZCB0YWtlIGVmZmVjdGl2ZSBiZWZvcmUgdmFyIG10cnIgZm9yIGl0CisJICogWzAsIDFNKSBzaG91bGQgYWx3YXlzIGJlIGNvdmVyZWQgYnkgdmFyIG10cnIgd2l0aCBXQgorCSAqIGFuZCBmaXhlZCBtdHJycyBzaG91bGQgdGFrZSBlZmZlY3QgYmVmb3JlIHZhciBtdHJyIGZvciBpdDoKIAkgKi8KIAlucl9yYW5nZSA9IGFkZF9yYW5nZV93aXRoX21lcmdlKHJhbmdlLCBucl9yYW5nZSwgMCwKIAkJCQkJKDFVTEw8PCgyMCAtIFBBR0VfU0hJRlQpKSAtIDEpOwotCS8qIHNvcnQgdGhlIHJhbmdlcyAqLworCS8qIFNvcnQgdGhlIHJhbmdlczogKi8KIAlzb3J0KHJhbmdlLCBucl9yYW5nZSwgc2l6ZW9mKHN0cnVjdCByZXNfcmFuZ2UpLCBjbXBfcmFuZ2UsIE5VTEwpOwogCiAJcmFuZ2Vfc3VtcyA9IHN1bV9yYW5nZXMocmFuZ2UsIG5yX3JhbmdlKTsKQEAgLTg1NCw3ICs4NTIsNyBAQAogCWlmIChtdHJyX2NodW5rX3NpemUgJiYgbXRycl9ncmFuX3NpemUpIHsKIAkJaSA9IDA7CiAJCW10cnJfY2FsY19yYW5nZV9zdGF0ZShtdHJyX2NodW5rX3NpemUsIG10cnJfZ3Jhbl9zaXplLAotCQkJCSAgICAgIGV4dHJhX3JlbW92ZV9iYXNlLCBleHRyYV9yZW1vdmVfc2l6ZSwgaSk7CisJCQkJICAgICAgeF9yZW1vdmVfYmFzZSwgeF9yZW1vdmVfc2l6ZSwgaSk7CiAKIAkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKIApAQCAtODgwLDcgKzg3OCw3IEBACiAJCQkJY29udGludWU7CiAKIAkJCW10cnJfY2FsY19yYW5nZV9zdGF0ZShjaHVua19zaXplLCBncmFuX3NpemUsCi0JCQkJICAgICAgZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplLCBpKTsKKwkJCQkgICAgICB4X3JlbW92ZV9iYXNlLCB4X3JlbW92ZV9zaXplLCBpKTsKIAkJCWlmIChkZWJ1Z19wcmludCkgewogCQkJCW10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaSk7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKQEAgLTg5MCw3ICs4ODgsNyBAQAogCQl9CiAJfQogCi0JLyogdHJ5IHRvIGZpbmQgdGhlIG9wdGltYWwgaW5kZXggKi8KKwkvKiBUcnkgdG8gZmluZCB0aGUgb3B0aW1hbCBpbmRleDogKi8KIAlpbmRleF9nb29kID0gbXRycl9zZWFyY2hfb3B0aW1hbF9pbmRleCgpOwogCiAJaWYgKGluZGV4X2dvb2QgIT0gLTEpIHsKQEAgLTg5OCw3ICs4OTYsNyBAQAogCQlpID0gaW5kZXhfZ29vZDsKIAkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKIAotCQkvKiBjb252ZXJ0IHJhbmdlcyB0byB2YXIgcmFuZ2VzIHN0YXRlICovCisJCS8qIENvbnZlcnQgcmFuZ2VzIHRvIHZhciByYW5nZXMgc3RhdGU6ICovCiAJCWNodW5rX3NpemUgPSByZXN1bHRbaV0uY2h1bmtfc2l6ZWs7CiAJCWNodW5rX3NpemUgPDw9IDEwOwogCQlncmFuX3NpemUgPSByZXN1bHRbaV0uZ3Jhbl9zaXplazsKQEAgLTk0MSw4ICs5MzksOCBAQAogICogTm90ZSB0aGlzIHdvbid0IGNoZWNrIGlmIHRoZSBNVFJScyA8IDRHQiB3aGVyZSB0aGUgbWFnaWMgYml0IGRvZXNuJ3QKICAqIGFwcGx5IHRvIGFyZSB3cm9uZywgYnV0IHNvIGZhciB3ZSBkb24ndCBrbm93IG9mIGFueSBzdWNoIGNhc2UgaW4gdGhlIHdpbGQuCiAgKi8KLSNkZWZpbmUgVG9tMkVuYWJsZWQgKDFVIDw8IDIxKQotI2RlZmluZSBUb20yRm9yY2VNZW1UeXBlV0IgKDFVIDw8IDIyKQorI2RlZmluZSBUb20yRW5hYmxlZAkJKDFVIDw8IDIxKQorI2RlZmluZSBUb20yRm9yY2VNZW1UeXBlV0IJKDFVIDw8IDIyKQogCiBpbnQgX19pbml0IGFtZF9zcGVjaWFsX2RlZmF1bHRfbXRycih2b2lkKQogewpAQCAtOTUyLDcgKzk1MCw3IEBACiAJCXJldHVybiAwOwogCWlmIChib290X2NwdV9kYXRhLng4NiA8IDB4ZiB8fCBib290X2NwdV9kYXRhLng4NiA+IDB4MTEpCiAJCXJldHVybiAwOwotCS8qIEluIGNhc2Ugc29tZSBoeXBlcnZpc29yIGRvZXNuJ3QgcGFzcyBTWVNDRkcgdGhyb3VnaCAqLworCS8qIEluIGNhc2Ugc29tZSBoeXBlcnZpc29yIGRvZXNuJ3QgcGFzcyBTWVNDRkcgdGhyb3VnaDogKi8KIAlpZiAocmRtc3Jfc2FmZShNU1JfSzhfU1lTQ0ZHLCAmbCwgJmgpIDwgMCkKIAkJcmV0dXJuIDA7CiAJLyoKQEAgLTk2NSwxOSArOTYzLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1NjQgX19pbml0IHJlYWxfdHJpbV9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JCQkJICAgdW5zaWduZWQgbG9uZyBsaW1pdF9wZm4pCitzdGF0aWMgdTY0IF9faW5pdAorcmVhbF90cmltX21lbW9yeSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBsaW1pdF9wZm4pCiB7CiAJdTY0IHRyaW1fc3RhcnQsIHRyaW1fc2l6ZTsKKwogCXRyaW1fc3RhcnQgPSBzdGFydF9wZm47CiAJdHJpbV9zdGFydCA8PD0gUEFHRV9TSElGVDsKKwogCXRyaW1fc2l6ZSA9IGxpbWl0X3BmbjsKIAl0cmltX3NpemUgPDw9IFBBR0VfU0hJRlQ7CiAJdHJpbV9zaXplIC09IHRyaW1fc3RhcnQ7CiAKLQlyZXR1cm4gZTgyMF91cGRhdGVfcmFuZ2UodHJpbV9zdGFydCwgdHJpbV9zaXplLCBFODIwX1JBTSwKLQkJCQlFODIwX1JFU0VSVkVEKTsKKwlyZXR1cm4gZTgyMF91cGRhdGVfcmFuZ2UodHJpbV9zdGFydCwgdHJpbV9zaXplLCBFODIwX1JBTSwgRTgyMF9SRVNFUlZFRCk7CiB9CisKIC8qKgogICogbXRycl90cmltX3VuY2FjaGVkX21lbW9yeSAtIHRyaW0gUkFNIG5vdCBjb3ZlcmVkIGJ5IE1UUlJzCiAgKiBAZW5kX3BmbjogZW5kaW5nIHBhZ2UgZnJhbWUgbnVtYmVyCkBAIC05ODUsNyArOTg1LDcgQEAKICAqIFNvbWUgYnVnZ3kgQklPU2VzIGRvbid0IHNldHVwIHRoZSBNVFJScyBwcm9wZXJseSBmb3Igc3lzdGVtcyB3aXRoIGNlcnRhaW4KICAqIG1lbW9yeSBjb25maWd1cmF0aW9ucy4gIFRoaXMgcm91dGluZSBjaGVja3MgdGhhdCB0aGUgaGlnaGVzdCBNVFJSIG1hdGNoZXMKICAqIHRoZSBlbmQgb2YgbWVtb3J5LCB0byBtYWtlIHN1cmUgdGhlIE1UUlJzIGhhdmluZyBhIHdyaXRlIGJhY2sgdHlwZSBjb3ZlcgotICogYWxsIG9mIHRoZSBtZW1vcnkgdGhlIGtlcm5lbCBpcyBpbnRlbmRpbmcgdG8gdXNlLiBJZiBub3QsIGl0J2xsIHRyaW0gYW55CisgKiBhbGwgb2YgdGhlIG1lbW9yeSB0aGUga2VybmVsIGlzIGludGVuZGluZyB0byB1c2UuICBJZiBub3QsIGl0J2xsIHRyaW0gYW55CiAgKiBtZW1vcnkgb2ZmIHRoZSBlbmQgYnkgYWRqdXN0aW5nIGVuZF9wZm4sIHJlbW92aW5nIGl0IGZyb20gdGhlIGtlcm5lbCdzCiAgKiBhbGxvY2F0aW9uIHBvb2xzLCB3YXJuaW5nIHRoZSB1c2VyIHdpdGggYW4gb2Jub3hpb3VzIG1lc3NhZ2UuCiAgKi8KQEAgLTk5NCwyMSArOTk0LDIyIEBACiAJdW5zaWduZWQgbG9uZyBpLCBiYXNlLCBzaXplLCBoaWdoZXN0X3BmbiA9IDAsIGRlZiwgZHVtbXk7CiAJbXRycl90eXBlIHR5cGU7CiAJdTY0IHRvdGFsX3RyaW1fc2l6ZTsKLQogCS8qIGV4dHJhIG9uZSBmb3IgYWxsIDAgKi8KIAlpbnQgbnVtW01UUlJfTlVNX1RZUEVTICsgMV07CisKIAkvKgogCSAqIE1ha2Ugc3VyZSB3ZSBvbmx5IHRyaW0gdW5jYWNoYWJsZSBtZW1vcnkgb24gbWFjaGluZXMgdGhhdAogCSAqIHN1cHBvcnQgdGhlIEludGVsIE1UUlIgYXJjaGl0ZWN0dXJlOgogCSAqLwogCWlmICghaXNfY3B1KElOVEVMKSB8fCBkaXNhYmxlX210cnJfdHJpbSkKIAkJcmV0dXJuIDA7CisKIAlyZG1zcihNU1JfTVRSUmRlZlR5cGUsIGRlZiwgZHVtbXkpOwogCWRlZiAmPSAweGZmOwogCWlmIChkZWYgIT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpCiAJCXJldHVybiAwOwogCi0JLyogZ2V0IGl0IGFuZCBzdG9yZSBpdCBhc2lkZSAqLworCS8qIEdldCBpdCBhbmQgc3RvcmUgaXQgYXNpZGU6ICovCiAJbWVtc2V0KHJhbmdlX3N0YXRlLCAwLCBzaXplb2YocmFuZ2Vfc3RhdGUpKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewogCQltdHJyX2lmLT5nZXQoaSwgJmJhc2UsICZzaXplLCAmdHlwZSk7CkBAIC0xMDE3LDcgKzEwMTgsNyBAQAogCQlyYW5nZV9zdGF0ZVtpXS50eXBlID0gdHlwZTsKIAl9CiAKLQkvKiBGaW5kIGhpZ2hlc3QgY2FjaGVkIHBmbiAqLworCS8qIEZpbmQgaGlnaGVzdCBjYWNoZWQgcGZuOiAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CiAJCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOwogCQlpZiAodHlwZSAhPSBNVFJSX1RZUEVfV1JCQUNLKQpAQCAtMTAyOCwxMyArMTAyOSwxMyBAQAogCQkJaGlnaGVzdF9wZm4gPSBiYXNlICsgc2l6ZTsKIAl9CiAKLQkvKiBrdm0vcWVtdSBkb2Vzbid0IGhhdmUgbXRyciBzZXQgcmlnaHQsIGRvbid0IHRyaW0gdGhlbSBhbGwgKi8KKwkvKiBrdm0vcWVtdSBkb2Vzbid0IGhhdmUgbXRyciBzZXQgcmlnaHQsIGRvbid0IHRyaW0gdGhlbSBhbGw6ICovCiAJaWYgKCFoaWdoZXN0X3BmbikgewogCQlwcmludGsoS0VSTl9JTkZPICJDUFUgTVRSUnMgYWxsIGJsYW5rIC0gdmlydHVhbGl6ZWQgc3lzdGVtLlxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCS8qIGNoZWNrIGVudHJpZXMgbnVtYmVyICovCisJLyogQ2hlY2sgZW50cmllcyBudW1iZXI6ICovCiAJbWVtc2V0KG51bSwgMCwgc2l6ZW9mKG51bSkpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CiAJCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOwpAQCAtMTA0NiwxMSArMTA0NywxMSBAQAogCQludW1bdHlwZV0rKzsKIAl9CiAKLQkvKiBubyBlbnRyeSBmb3IgV0I/ICovCisJLyogTm8gZW50cnkgZm9yIFdCPyAqLwogCWlmICghbnVtW01UUlJfVFlQRV9XUkJBQ0tdKQogCQlyZXR1cm4gMDsKIAotCS8qIGNoZWNrIGlmIHdlIG9ubHkgaGFkIFdCIGFuZCBVQyAqLworCS8qIENoZWNrIGlmIHdlIG9ubHkgaGFkIFdCIGFuZCBVQzogKi8KIAlpZiAobnVtW01UUlJfVFlQRV9XUkJBQ0tdICsgbnVtW01UUlJfVFlQRV9VTkNBQ0hBQkxFXSAhPQogCQludW1fdmFyX3JhbmdlcyAtIG51bVtNVFJSX05VTV9UWVBFU10pCiAJCXJldHVybiAwOwpAQCAtMTA2NiwzMSArMTA2NywzMSBAQAogCX0KIAlucl9yYW5nZSA9IHg4Nl9nZXRfbXRycl9tZW1fcmFuZ2UocmFuZ2UsIG5yX3JhbmdlLCAwLCAwKTsKIAorCS8qIENoZWNrIHRoZSBoZWFkOiAqLwogCXRvdGFsX3RyaW1fc2l6ZSA9IDA7Ci0JLyogY2hlY2sgdGhlIGhlYWQgKi8KIAlpZiAocmFuZ2VbMF0uc3RhcnQpCiAJCXRvdGFsX3RyaW1fc2l6ZSArPSByZWFsX3RyaW1fbWVtb3J5KDAsIHJhbmdlWzBdLnN0YXJ0KTsKLQkvKiBjaGVjayB0aGUgaG9sZXMgKi8KKworCS8qIENoZWNrIHRoZSBob2xlczogKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2UgLSAxOyBpKyspIHsKIAkJaWYgKHJhbmdlW2ldLmVuZCArIDEgPCByYW5nZVtpKzFdLnN0YXJ0KQogCQkJdG90YWxfdHJpbV9zaXplICs9IHJlYWxfdHJpbV9tZW1vcnkocmFuZ2VbaV0uZW5kICsgMSwKIAkJCQkJCQkgICAgcmFuZ2VbaSsxXS5zdGFydCk7CiAJfQotCS8qIGNoZWNrIHRoZSB0b3AgKi8KKworCS8qIENoZWNrIHRoZSB0b3A6ICovCiAJaSA9IG5yX3JhbmdlIC0gMTsKIAlpZiAocmFuZ2VbaV0uZW5kICsgMSA8IGVuZF9wZm4pCiAJCXRvdGFsX3RyaW1fc2l6ZSArPSByZWFsX3RyaW1fbWVtb3J5KHJhbmdlW2ldLmVuZCArIDEsCiAJCQkJCQkJIGVuZF9wZm4pOwogCiAJaWYgKHRvdGFsX3RyaW1fc2l6ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBCSU9TIGJ1ZzogQ1BVIE1UUlJzIGRvbid0IGNvdmVyIgotCQkJIiBhbGwgb2YgbWVtb3J5LCBsb3NpbmcgJWxsdU1CIG9mIFJBTS5cbiIsCi0JCQl0b3RhbF90cmltX3NpemUgPj4gMjApOworCQlwcl93YXJuaW5nKCJXQVJOSU5HOiBCSU9TIGJ1ZzogQ1BVIE1UUlJzIGRvbid0IGNvdmVyIGFsbCBvZiBtZW1vcnksIGxvc2luZyAlbGx1TUIgb2YgUkFNLlxuIiwgdG90YWxfdHJpbV9zaXplID4+IDIwKTsKIAogCQlpZiAoIWNoYW5nZWRfYnlfbXRycl9jbGVhbnVwKQogCQkJV0FSTl9PTigxKTsKIAotCQlwcmludGsoS0VSTl9JTkZPICJ1cGRhdGUgZTgyMCBmb3IgbXRyclxuIik7CisJCXByX2luZm8oInVwZGF0ZSBlODIwIGZvciBtdHJyXG4iKTsKIAkJdXBkYXRlX2U4MjAoKTsKIAogCQlyZXR1cm4gMTsKQEAgLTEwOTgsNCArMTA5OSwzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2N5cml4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYwppbmRleCBmZjE0YzMyLi4yMjhkOTgyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYwpAQCAtMSwzOCArMSw0MCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWN5cml4Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgorI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorCiAjaW5jbHVkZSAibXRyci5oIgogCiBzdGF0aWMgdm9pZAogY3lyaXhfZ2V0X2Fycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nICpiYXNlLAogCSAgICAgIHVuc2lnbmVkIGxvbmcgKnNpemUsIG10cnJfdHlwZSAqIHR5cGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIGFyciwgY2NyMywgcmNyLCBzaGlmdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYXJyID0gQ1g4Nl9BUlJfQkFTRSArIChyZWcgPDwgMSkgKyByZWc7CS8qIGF2b2lkIG11bHRpcGxpY2F0aW9uIGJ5IDMgKi8KIAotCS8qIFNhdmUgZmxhZ3MgYW5kIGRpc2FibGUgaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCWNjcjMgPSBnZXRDeDg2KENYODZfQ0NSMyk7CiAJc2V0Q3g4NihDWDg2X0NDUjMsIChjY3IzICYgMHgwZikgfCAweDEwKTsJLyogZW5hYmxlIE1BUEVOICovCi0JKCh1bnNpZ25lZCBjaGFyICopIGJhc2UpWzNdID0gZ2V0Q3g4NihhcnIpOwotCSgodW5zaWduZWQgY2hhciAqKSBiYXNlKVsyXSA9IGdldEN4ODYoYXJyICsgMSk7Ci0JKCh1bnNpZ25lZCBjaGFyICopIGJhc2UpWzFdID0gZ2V0Q3g4NihhcnIgKyAyKTsKKwkoKHVuc2lnbmVkIGNoYXIgKiliYXNlKVszXSA9IGdldEN4ODYoYXJyKTsKKwkoKHVuc2lnbmVkIGNoYXIgKiliYXNlKVsyXSA9IGdldEN4ODYoYXJyICsgMSk7CisJKCh1bnNpZ25lZCBjaGFyICopYmFzZSlbMV0gPSBnZXRDeDg2KGFyciArIDIpOwogCXJjciA9IGdldEN4ODYoQ1g4Nl9SQ1JfQkFTRSArIHJlZyk7Ci0Jc2V0Q3g4NihDWDg2X0NDUjMsIGNjcjMpOwkvKiBkaXNhYmxlIE1BUEVOICovCisJc2V0Q3g4NihDWDg2X0NDUjMsIGNjcjMpOwkJCS8qIGRpc2FibGUgTUFQRU4gKi8KIAotCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGlmIGl0IHdhcyBlbmFibGVkIHByZXZpb3VzbHkgKi8KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAlzaGlmdCA9ICgodW5zaWduZWQgY2hhciAqKSBiYXNlKVsxXSAmIDB4MGY7CiAJKmJhc2UgPj49IFBBR0VfU0hJRlQ7CiAKLQkvKiBQb3dlciBvZiB0d28sIGF0IGxlYXN0IDRLIG9uIEFSUjAtQVJSNiwgMjU2SyBvbiBBUlI3CisJLyoKKwkgKiBQb3dlciBvZiB0d28sIGF0IGxlYXN0IDRLIG9uIEFSUjAtQVJSNiwgMjU2SyBvbiBBUlI3CiAJICogTm90ZTogc2hpZnQ9PTB4ZiBtZWFucyA0RywgdGhpcyBpcyB1bnN1cHBvcnRlZC4KIAkgKi8KIAlpZiAoc2hpZnQpCkBAIC03NiwxNyArNzgsMjAgQEAKIAl9CiB9CiAKKy8qCisgKiBjeXJpeF9nZXRfZnJlZV9yZWdpb24gLSBnZXQgYSBmcmVlIEFSUi4KKyAqCisgKiBAYmFzZTogdGhlIHN0YXJ0aW5nIChiYXNlKSBhZGRyZXNzIG9mIHRoZSByZWdpb24uCisgKiBAc2l6ZTogdGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgcmVnaW9uLgorICoKKyAqIFJldHVybnM6IHRoZSBpbmRleCBvZiB0aGUgcmVnaW9uIG9uIHN1Y2Nlc3MsIGVsc2UgLTEgb24gZXJyb3IuCisqLwogc3RhdGljIGludAogY3lyaXhfZ2V0X2ZyZWVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgcmVwbGFjZV9yZWcpCi0vKiAgW1NVTU1BUlldIEdldCBhIGZyZWUgQVJSLgotICAgIDxiYXNlPiBUaGUgc3RhcnRpbmcgKGJhc2UpIGFkZHJlc3Mgb2YgdGhlIHJlZ2lvbi4KLSAgICA8c2l6ZT4gVGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgcmVnaW9uLgotICAgIFtSRVRVUk5TXSBUaGUgaW5kZXggb2YgdGhlIHJlZ2lvbiBvbiBzdWNjZXNzLCBlbHNlIC0xIG9uIGVycm9yLgotKi8KIHsKLQlpbnQgaTsKLQltdHJyX3R5cGUgbHR5cGU7CiAJdW5zaWduZWQgbG9uZyBsYmFzZSwgbHNpemU7CisJbXRycl90eXBlIGx0eXBlOworCWludCBpOwogCiAJc3dpdGNoIChyZXBsYWNlX3JlZykgewogCWNhc2UgNzoKQEAgLTEwNywxNCArMTEyLDE3IEBACiAJCWN5cml4X2dldF9hcnIoNywgJmxiYXNlLCAmbHNpemUsICZsdHlwZSk7CiAJCWlmIChsc2l6ZSA9PSAwKQogCQkJcmV0dXJuIDc7Ci0JCS8qICBFbHNlIHRyeSBBUlIwLUFSUjYgZmlyc3QgICovCisJCS8qIEVsc2UgdHJ5IEFSUjAtQVJSNiBmaXJzdCAgKi8KIAl9IGVsc2UgewogCQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7CiAJCQljeXJpeF9nZXRfYXJyKGksICZsYmFzZSwgJmxzaXplLCAmbHR5cGUpOwogCQkJaWYgKGxzaXplID09IDApCiAJCQkJcmV0dXJuIGk7CiAJCX0KLQkJLyogQVJSMC1BUlI2IGlzbid0IGZyZWUsIHRyeSBBUlI3IGJ1dCBpdHMgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDI1NksgKi8KKwkJLyoKKwkJICogQVJSMC1BUlI2IGlzbid0IGZyZWUKKwkJICogdHJ5IEFSUjcgYnV0IGl0cyBzaXplIG11c3QgYmUgYXQgbGVhc3QgMjU2SworCQkgKi8KIAkJY3lyaXhfZ2V0X2FycihpLCAmbGJhc2UsICZsc2l6ZSwgJmx0eXBlKTsKIAkJaWYgKChsc2l6ZSA9PSAwKSAmJiAoc2l6ZSA+PSAweDQwKSkKIAkJCXJldHVybiBpOwpAQCAtMTIyLDIxICsxMzAsMjIgQEAKIAlyZXR1cm4gLUVOT1NQQzsKIH0KIAotc3RhdGljIHUzMiBjcjQgPSAwOwotc3RhdGljIHUzMiBjY3IzOworc3RhdGljIHUzMiBjcjQsIGNjcjM7CiAKIHN0YXRpYyB2b2lkIHByZXBhcmVfc2V0KHZvaWQpCiB7CiAJdTMyIGNyMDsKIAogCS8qICBTYXZlIHZhbHVlIG9mIENSNCBhbmQgY2xlYXIgUGFnZSBHbG9iYWwgRW5hYmxlIChiaXQgNykgICovCi0JaWYgKCBjcHVfaGFzX3BnZSApIHsKKwlpZiAoY3B1X2hhc19wZ2UpIHsKIAkJY3I0ID0gcmVhZF9jcjQoKTsKIAkJd3JpdGVfY3I0KGNyNCAmIH5YODZfQ1I0X1BHRSk7CiAJfQogCi0JLyogIERpc2FibGUgYW5kIGZsdXNoIGNhY2hlcy4gTm90ZSB0aGF0IHdiaW52ZCBmbHVzaGVzIHRoZSBUTEJzIGFzCi0JICAgIGEgc2lkZS1lZmZlY3QgICovCisJLyoKKwkgKiBEaXNhYmxlIGFuZCBmbHVzaCBjYWNoZXMuCisJICogTm90ZSB0aGF0IHdiaW52ZCBmbHVzaGVzIHRoZSBUTEJzIGFzIGEgc2lkZS1lZmZlY3QKKwkgKi8KIAljcjAgPSByZWFkX2NyMCgpIHwgWDg2X0NSMF9DRDsKIAl3YmludmQoKTsKIAl3cml0ZV9jcjAoY3IwKTsKQEAgLTE0NywyMiArMTU2LDIxIEBACiAKIAkvKiBDeXJpeCBBUlJzIC0gZXZlcnl0aGluZyBlbHNlIHdhcyBleGNsdWRlZCBhdCB0aGUgdG9wICovCiAJc2V0Q3g4NihDWDg2X0NDUjMsIChjY3IzICYgMHgwZikgfCAweDEwKTsKLQogfQogCiBzdGF0aWMgdm9pZCBwb3N0X3NldCh2b2lkKQogewotCS8qICBGbHVzaCBjYWNoZXMgYW5kIFRMQnMgICovCisJLyogRmx1c2ggY2FjaGVzIGFuZCBUTEJzICovCiAJd2JpbnZkKCk7CiAKIAkvKiBDeXJpeCBBUlJzIC0gZXZlcnl0aGluZyBlbHNlIHdhcyBleGNsdWRlZCBhdCB0aGUgdG9wICovCiAJc2V0Q3g4NihDWDg2X0NDUjMsIGNjcjMpOwotCQkKLQkvKiAgRW5hYmxlIGNhY2hlcyAgKi8KKworCS8qIEVuYWJsZSBjYWNoZXMgKi8KIAl3cml0ZV9jcjAocmVhZF9jcjAoKSAmIDB4YmZmZmZmZmYpOwogCi0JLyogIFJlc3RvcmUgdmFsdWUgb2YgQ1I0ICAqLwotCWlmICggY3B1X2hhc19wZ2UgKQorCS8qIFJlc3RvcmUgdmFsdWUgb2YgQ1I0ICovCisJaWYgKGNwdV9oYXNfcGdlKQogCQl3cml0ZV9jcjQoY3I0KTsKIH0KIApAQCAtMTc4LDcgKzE4Niw4IEBACiAJCXNpemUgPj49IDY7CiAKIAlzaXplICY9IDB4N2ZmZjsJCS8qIG1ha2Ugc3VyZSBhcnJfc2l6ZSA8PSAxNCAqLwotCWZvciAoYXJyX3NpemUgPSAwOyBzaXplOyBhcnJfc2l6ZSsrLCBzaXplID4+PSAxKSA7CisJZm9yIChhcnJfc2l6ZSA9IDA7IHNpemU7IGFycl9zaXplKyssIHNpemUgPj49IDEpCisJCTsKIAogCWlmIChyZWcgPCA3KSB7CiAJCXN3aXRjaCAodHlwZSkgewpAQCAtMjE1LDE4ICsyMjQsMTggQEAKIAlwcmVwYXJlX3NldCgpOwogCiAJYmFzZSA8PD0gUEFHRV9TSElGVDsKLQlzZXRDeDg2KGFyciwgKCh1bnNpZ25lZCBjaGFyICopICZiYXNlKVszXSk7Ci0Jc2V0Q3g4NihhcnIgKyAxLCAoKHVuc2lnbmVkIGNoYXIgKikgJmJhc2UpWzJdKTsKLQlzZXRDeDg2KGFyciArIDIsICgoKHVuc2lnbmVkIGNoYXIgKikgJmJhc2UpWzFdKSB8IGFycl9zaXplKTsKKwlzZXRDeDg2KGFyciArIDAsICAoKHVuc2lnbmVkIGNoYXIgKikmYmFzZSlbM10pOworCXNldEN4ODYoYXJyICsgMSwgICgodW5zaWduZWQgY2hhciAqKSZiYXNlKVsyXSk7CisJc2V0Q3g4NihhcnIgKyAyLCAoKCh1bnNpZ25lZCBjaGFyICopJmJhc2UpWzFdKSB8IGFycl9zaXplKTsKIAlzZXRDeDg2KENYODZfUkNSX0JBU0UgKyByZWcsIGFycl90eXBlKTsKIAogCXBvc3Rfc2V0KCk7CiB9CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGJhc2U7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCW10cnJfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcJYmFzZTsKKwl1bnNpZ25lZCBsb25nCXNpemU7CisJbXRycl90eXBlCXR5cGU7CiB9IGFycl9zdGF0ZV90OwogCiBzdGF0aWMgYXJyX3N0YXRlX3QgYXJyX3N0YXRlWzhdID0gewpAQCAtMjQ3LDE2ICsyNTYsMTcgQEAKIAkJc2V0Q3g4NihDWDg2X0NDUjAgKyBpLCBjY3Jfc3RhdGVbaV0pOwogCWZvciAoOyBpIDwgNzsgaSsrKQogCQlzZXRDeDg2KENYODZfQ0NSNCArIGksIGNjcl9zdGF0ZVtpXSk7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJY3lyaXhfc2V0X2FycihpLCBhcnJfc3RhdGVbaV0uYmFzZSwgCisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWN5cml4X3NldF9hcnIoaSwgYXJyX3N0YXRlW2ldLmJhc2UsCiAJCQkgICAgICBhcnJfc3RhdGVbaV0uc2l6ZSwgYXJyX3N0YXRlW2ldLnR5cGUpOworCX0KIAogCXBvc3Rfc2V0KCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbXRycl9vcHMgY3lyaXhfbXRycl9vcHMgPSB7CiAJLnZlbmRvciAgICAgICAgICAgID0gWDg2X1ZFTkRPUl9DWVJJWCwKLS8vCS5pbml0ICAgICAgICAgICAgICA9IGN5cml4X2Fycl9pbml0LAogCS5zZXRfYWxsCSAgID0gY3lyaXhfc2V0X2FsbCwKIAkuc2V0ICAgICAgICAgICAgICAgPSBjeXJpeF9zZXRfYXJyLAogCS5nZXQgICAgICAgICAgICAgICA9IGN5cml4X2dldF9hcnIsCkBAIC0yNzAsNSArMjgwLDMgQEAKIAlzZXRfbXRycl9vcHMoJmN5cml4X210cnJfb3BzKTsKIAlyZXR1cm4gMDsKIH0KLQotLy9hcmNoX2luaXRjYWxsKGN5cml4X2luaXRfbXRycik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYwppbmRleCAwNTQzZjY5Li41NWRhMGM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKQEAgLTEsMjggKzEsMzQgQEAKLS8qIFRoaXMgb25seSBoYW5kbGVzIDMyYml0IE1UUlIgb24gMzJiaXQgaG9zdHMuIFRoaXMgaXMgc3RyaWN0bHkgd3JvbmcKLSAgIGJlY2F1c2UgTVRSUnMgY2FuIHNwYW4gdXB0byA0MCBiaXRzICgzNmJpdHMgb24gbW9zdCBtb2Rlcm4geDg2KSAqLyAKKy8qCisgKiBUaGlzIG9ubHkgaGFuZGxlcyAzMmJpdCBNVFJSIG9uIDMyYml0IGhvc3RzLiBUaGlzIGlzIHN0cmljdGx5IHdyb25nCisgKiBiZWNhdXNlIE1UUlJzIGNhbiBzcGFuIHVwdG8gNDAgYml0cyAoMzZiaXRzIG9uIG1vc3QgbW9kZXJuIHg4NikKKyAqLworI2RlZmluZSBERUJVRworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9wYXQuaD4KKwogI2luY2x1ZGUgIm10cnIuaCIKIAogc3RydWN0IGZpeGVkX3JhbmdlX2Jsb2NrIHsKLQlpbnQgYmFzZV9tc3I7IC8qIHN0YXJ0IGFkZHJlc3Mgb2YgYW4gTVRSUiBibG9jayAqLwotCWludCByYW5nZXM7ICAgLyogbnVtYmVyIG9mIE1UUlJzIGluIHRoaXMgYmxvY2sgICovCisJaW50IGJhc2VfbXNyOwkJLyogc3RhcnQgYWRkcmVzcyBvZiBhbiBNVFJSIGJsb2NrICovCisJaW50IHJhbmdlczsJCS8qIG51bWJlciBvZiBNVFJScyBpbiB0aGlzIGJsb2NrICAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBmaXhlZF9yYW5nZV9ibG9jayBmaXhlZF9yYW5nZV9ibG9ja3NbXSA9IHsKLQl7IE1TUl9NVFJSZml4NjRLXzAwMDAwLCAxIH0sIC8qIG9uZSAgNjRrIE1UUlIgICovCi0JeyBNU1JfTVRSUmZpeDE2S184MDAwMCwgMiB9LCAvKiB0d28gIDE2ayBNVFJScyAqLwotCXsgTVNSX01UUlJmaXg0S19DMDAwMCwgIDggfSwgLyogZWlnaHQgNGsgTVRSUnMgKi8KKwl7IE1TUl9NVFJSZml4NjRLXzAwMDAwLCAxIH0sIC8qIG9uZSAgIDY0ayBNVFJSICAqLworCXsgTVNSX01UUlJmaXgxNktfODAwMDAsIDIgfSwgLyogdHdvICAgMTZrIE1UUlJzICovCisJeyBNU1JfTVRSUmZpeDRLX0MwMDAwLCAgOCB9LCAvKiBlaWdodCAgNGsgTVRSUnMgKi8KIAl7fQogfTsKIApAQCAtMzAsMTAgKzM2LDEwIEBACiBzdGF0aWMgaW50IG10cnJfc3RhdGVfc2V0OwogdTY0IG10cnJfdG9tMjsKIAotc3RydWN0IG10cnJfc3RhdGVfdHlwZSBtdHJyX3N0YXRlID0ge307CitzdHJ1Y3QgbXRycl9zdGF0ZV90eXBlIG10cnJfc3RhdGU7CiBFWFBPUlRfU1lNQk9MX0dQTChtdHJyX3N0YXRlKTsKIAotLyoqCisvKgogICogQklPUyBpcyBleHBlY3RlZCB0byBjbGVhciBNdHJyRml4RHJhbU1vZEVuIGJpdCwgc2VlIGZvciBleGFtcGxlCiAgKiAiQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGZvciB0aGUgQU1EIEF0aGxvbiA2NCBhbmQgQU1ECiAgKiBPcHRlcm9uIFByb2Nlc3NvcnMiICgyNjA5NCBSZXYuIDMuMzAgRmVicnVhcnkgMjAwNiksIHNlY3Rpb24KQEAgLTEwNCw5ICsxMTAsOCBAQAogCSAqIExvb2sgb2YgbXVsdGlwbGUgcmFuZ2VzIG1hdGNoaW5nIHRoaXMgYWRkcmVzcyBhbmQgcGljayB0eXBlCiAJICogYXMgcGVyIE1UUlIgcHJlY2VkZW5jZQogCSAqLwotCWlmICghKG10cnJfc3RhdGUuZW5hYmxlZCAmIDIpKSB7CisJaWYgKCEobXRycl9zdGF0ZS5lbmFibGVkICYgMikpCiAJCXJldHVybiBtdHJyX3N0YXRlLmRlZl90eXBlOwotCX0KIAogCXByZXZfbWF0Y2ggPSAweEZGOwogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgKytpKSB7CkBAIC0xMjUsOSArMTMwLDggQEAKIAkJaWYgKHN0YXJ0X3N0YXRlICE9IGVuZF9zdGF0ZSkKIAkJCXJldHVybiAweEZFOwogCi0JCWlmICgoc3RhcnQgJiBtYXNrKSAhPSAoYmFzZSAmIG1hc2spKSB7CisJCWlmICgoc3RhcnQgJiBtYXNrKSAhPSAoYmFzZSAmIG1hc2spKQogCQkJY29udGludWU7Ci0JCX0KIAogCQljdXJyX21hdGNoID0gbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfbG8gJiAweGZmOwogCQlpZiAocHJldl9tYXRjaCA9PSAweEZGKSB7CkBAIC0xNDgsOSArMTUyLDggQEAKIAkJCWN1cnJfbWF0Y2ggPSBNVFJSX1RZUEVfV1JUSFJPVUdIOwogCQl9CiAKLQkJaWYgKHByZXZfbWF0Y2ggIT0gY3Vycl9tYXRjaCkgeworCQlpZiAocHJldl9tYXRjaCAhPSBjdXJyX21hdGNoKQogCQkJcmV0dXJuIE1UUlJfVFlQRV9VTkNBQ0hBQkxFOwotCQl9CiAJfQogCiAJaWYgKG10cnJfdG9tMikgewpAQCAtMTY0LDcgKzE2Nyw3IEBACiAJcmV0dXJuIG10cnJfc3RhdGUuZGVmX3R5cGU7CiB9CiAKLS8qICBHZXQgdGhlIE1TUiBwYWlyIHJlbGF0aW5nIHRvIGEgdmFyIHJhbmdlICAqLworLyogR2V0IHRoZSBNU1IgcGFpciByZWxhdGluZyB0byBhIHZhciByYW5nZSAqLwogc3RhdGljIHZvaWQKIGdldF9tdHJyX3Zhcl9yYW5nZSh1bnNpZ25lZCBpbnQgaW5kZXgsIHN0cnVjdCBtdHJyX3Zhcl9yYW5nZSAqdnIpCiB7CkBAIC0xNzIsNyArMTc1LDcgQEAKIAlyZG1zcihNVFJScGh5c01hc2tfTVNSKGluZGV4KSwgdnItPm1hc2tfbG8sIHZyLT5tYXNrX2hpKTsKIH0KIAotLyogIGZpbGwgdGhlIE1TUiBwYWlyIHJlbGF0aW5nIHRvIGEgdmFyIHJhbmdlICAqLworLyogRmlsbCB0aGUgTVNSIHBhaXIgcmVsYXRpbmcgdG8gYSB2YXIgcmFuZ2UgKi8KIHZvaWQgZmlsbF9tdHJyX3Zhcl9yYW5nZSh1bnNpZ25lZCBpbnQgaW5kZXgsCiAJCXUzMiBiYXNlX2xvLCB1MzIgYmFzZV9oaSwgdTMyIG1hc2tfbG8sIHUzMiBtYXNrX2hpKQogewpAQCAtMTg2LDEwICsxODksOSBAQAogCXZyW2luZGV4XS5tYXNrX2hpID0gbWFza19oaTsKIH0KIAotc3RhdGljIHZvaWQKLWdldF9maXhlZF9yYW5nZXMobXRycl90eXBlICogZnJzKQorc3RhdGljIHZvaWQgZ2V0X2ZpeGVkX3JhbmdlcyhtdHJyX3R5cGUgKmZycykKIHsKLQl1bnNpZ25lZCBpbnQgKnAgPSAodW5zaWduZWQgaW50ICopIGZyczsKKwl1bnNpZ25lZCBpbnQgKnAgPSAodW5zaWduZWQgaW50ICopZnJzOwogCWludCBpOwogCiAJazhfY2hlY2tfc3lzY2ZnX2RyYW1fbW9kX2VuKCk7CkBAIC0yMTcsMjIgKzIxOSwyMiBAQAogCWlmICghbGFzdF9maXhlZF9lbmQpCiAJCXJldHVybjsKIAotCXByaW50ayhLRVJOX0RFQlVHICIgICUwNVgtJTA1WCAlc1xuIiwgbGFzdF9maXhlZF9zdGFydCwKLQkJbGFzdF9maXhlZF9lbmQgLSAxLCBtdHJyX2F0dHJpYl90b19zdHIobGFzdF9maXhlZF90eXBlKSk7CisJcHJfZGVidWcoIiAgJTA1WC0lMDVYICVzXG4iLCBsYXN0X2ZpeGVkX3N0YXJ0LAorCQkgbGFzdF9maXhlZF9lbmQgLSAxLCBtdHJyX2F0dHJpYl90b19zdHIobGFzdF9maXhlZF90eXBlKSk7CiAKIAlsYXN0X2ZpeGVkX2VuZCA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB1cGRhdGVfZml4ZWRfbGFzdCh1bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBlbmQsCi0JCQkJICAgICAgIG10cnJfdHlwZSB0eXBlKQorCQkJCSAgICAgbXRycl90eXBlIHR5cGUpCiB7CiAJbGFzdF9maXhlZF9zdGFydCA9IGJhc2U7CiAJbGFzdF9maXhlZF9lbmQgPSBlbmQ7CiAJbGFzdF9maXhlZF90eXBlID0gdHlwZTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHByaW50X2ZpeGVkKHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIHN0ZXAsCi0JCQkgICAgICAgY29uc3QgbXRycl90eXBlICp0eXBlcykKK3N0YXRpYyB2b2lkIF9faW5pdAorcHJpbnRfZml4ZWQodW5zaWduZWQgYmFzZSwgdW5zaWduZWQgc3RlcCwgY29uc3QgbXRycl90eXBlICp0eXBlcykKIHsKIAl1bnNpZ25lZCBpOwogCkBAIC0yNTksNTQgKzI2MSw1NSBAQAogCXVuc2lnbmVkIGludCBpOwogCWludCBoaWdoX3dpZHRoOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgZGVmYXVsdCB0eXBlOiAlc1xuIiwKLQkJCSBtdHJyX2F0dHJpYl90b19zdHIobXRycl9zdGF0ZS5kZWZfdHlwZSkpOworCXByX2RlYnVnKCJNVFJSIGRlZmF1bHQgdHlwZTogJXNcbiIsCisJCSBtdHJyX2F0dHJpYl90b19zdHIobXRycl9zdGF0ZS5kZWZfdHlwZSkpOwogCWlmIChtdHJyX3N0YXRlLmhhdmVfZml4ZWQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgZml4ZWQgcmFuZ2VzICVzYWJsZWQ6XG4iLAotCQkgICAgICAgbXRycl9zdGF0ZS5lbmFibGVkICYgMSA/ICJlbiIgOiAiZGlzIik7CisJCXByX2RlYnVnKCJNVFJSIGZpeGVkIHJhbmdlcyAlc2FibGVkOlxuIiwKKwkJCSBtdHJyX3N0YXRlLmVuYWJsZWQgJiAxID8gImVuIiA6ICJkaXMiKTsKIAkJcHJpbnRfZml4ZWQoMHgwMDAwMCwgMHgxMDAwMCwgbXRycl9zdGF0ZS5maXhlZF9yYW5nZXMgKyAwKTsKIAkJZm9yIChpID0gMDsgaSA8IDI7ICsraSkKLQkJCXByaW50X2ZpeGVkKDB4ODAwMDAgKyBpICogMHgyMDAwMCwgMHgwNDAwMCwgbXRycl9zdGF0ZS5maXhlZF9yYW5nZXMgKyAoaSArIDEpICogOCk7CisJCQlwcmludF9maXhlZCgweDgwMDAwICsgaSAqIDB4MjAwMDAsIDB4MDQwMDAsCisJCQkJICAgIG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzICsgKGkgKyAxKSAqIDgpOwogCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQotCQkJcHJpbnRfZml4ZWQoMHhDMDAwMCArIGkgKiAweDA4MDAwLCAweDAxMDAwLCBtdHJyX3N0YXRlLmZpeGVkX3JhbmdlcyArIChpICsgMykgKiA4KTsKKwkJCXByaW50X2ZpeGVkKDB4QzAwMDAgKyBpICogMHgwODAwMCwgMHgwMTAwMCwKKwkJCQkgICAgbXRycl9zdGF0ZS5maXhlZF9yYW5nZXMgKyAoaSArIDMpICogOCk7CiAKIAkJLyogdGFpbCAqLwogCQlwcmludF9maXhlZF9sYXN0KCk7CiAJfQotCXByaW50ayhLRVJOX0RFQlVHICJNVFJSIHZhcmlhYmxlIHJhbmdlcyAlc2FibGVkOlxuIiwKLQkgICAgICAgbXRycl9zdGF0ZS5lbmFibGVkICYgMiA/ICJlbiIgOiAiZGlzIik7CisJcHJfZGVidWcoIk1UUlIgdmFyaWFibGUgcmFuZ2VzICVzYWJsZWQ6XG4iLAorCQkgbXRycl9zdGF0ZS5lbmFibGVkICYgMiA/ICJlbiIgOiAiZGlzIik7CiAJaWYgKHNpemVfb3JfbWFzayAmIDB4ZmZmZmZmZmZVTCkKIAkJaGlnaF93aWR0aCA9IGZmcyhzaXplX29yX21hc2sgJiAweGZmZmZmZmZmVUwpIC0gMTsKIAllbHNlCiAJCWhpZ2hfd2lkdGggPSBmZnMoc2l6ZV9vcl9tYXNrPj4zMikgKyAzMiAtIDE7CiAJaGlnaF93aWR0aCA9IChoaWdoX3dpZHRoIC0gKDMyIC0gUEFHRV9TSElGVCkgKyAzKSAvIDQ7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7ICsraSkgewogCQlpZiAobXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfbG8gJiAoMSA8PCAxMSkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiICAldSBiYXNlICUwKlglMDVYMDAwIG1hc2sgJTAqWCUwNVgwMDAgJXNcbiIsCi0JCQkgICAgICAgaSwKLQkJCSAgICAgICBoaWdoX3dpZHRoLAotCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2hpLAotCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2xvID4+IDEyLAotCQkJICAgICAgIGhpZ2hfd2lkdGgsCi0JCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfaGksCi0JCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfbG8gPj4gMTIsCi0JCQkgICAgICAgbXRycl9hdHRyaWJfdG9fc3RyKG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2xvICYgMHhmZikpOworCQkJcHJfZGVidWcoIiAgJXUgYmFzZSAlMCpYJTA1WDAwMCBtYXNrICUwKlglMDVYMDAwICVzXG4iLAorCQkJCSBpLAorCQkJCSBoaWdoX3dpZHRoLAorCQkJCSBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0uYmFzZV9oaSwKKwkJCQkgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfbG8gPj4gMTIsCisJCQkJIGhpZ2hfd2lkdGgsCisJCQkJIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5tYXNrX2hpLAorCQkJCSBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0ubWFza19sbyA+PiAxMiwKKwkJCQkgbXRycl9hdHRyaWJfdG9fc3RyKG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2xvICYgMHhmZikpOwogCQllbHNlCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiICAldSBkaXNhYmxlZFxuIiwgaSk7CisJCQlwcl9kZWJ1ZygiICAldSBkaXNhYmxlZFxuIiwgaSk7CiAJfQotCWlmIChtdHJyX3RvbTIpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlRPTTI6ICUwMTZsbHggYWthICVsbGRNXG4iLAotCQkJCSAgbXRycl90b20yLCBtdHJyX3RvbTI+PjIwKTsKLQl9CisJaWYgKG10cnJfdG9tMikKKwkJcHJfZGVidWcoIlRPTTI6ICUwMTZsbHggYWthICVsbGRNXG4iLCBtdHJyX3RvbTIsIG10cnJfdG9tMj4+MjApOwogfQogCi0vKiAgR3JhYiBhbGwgb2YgdGhlIE1UUlIgc3RhdGUgZm9yIHRoaXMgQ1BVIGludG8gKnN0YXRlICAqLworLyogR3JhYiBhbGwgb2YgdGhlIE1UUlIgc3RhdGUgZm9yIHRoaXMgQ1BVIGludG8gKnN0YXRlICovCiB2b2lkIF9faW5pdCBnZXRfbXRycl9zdGF0ZSh2b2lkKQogewotCXVuc2lnbmVkIGludCBpOwogCXN0cnVjdCBtdHJyX3Zhcl9yYW5nZSAqdnJzOwotCXVuc2lnbmVkIGxvLCBkdW1teTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvLCBkdW1teTsKKwl1bnNpZ25lZCBpbnQgaTsKIAogCXZycyA9IG10cnJfc3RhdGUudmFyX3JhbmdlczsKIApAQCAtMzI0LDYgKzMyNyw3IEBACiAKIAlpZiAoYW1kX3NwZWNpYWxfZGVmYXVsdF9tdHJyKCkpIHsKIAkJdW5zaWduZWQgbG93LCBoaWdoOworCiAJCS8qIFRPUF9NRU0yICovCiAJCXJkbXNyKE1TUl9LOF9UT1BfTUVNMiwgbG93LCBoaWdoKTsKIAkJbXRycl90b20yID0gaGlnaDsKQEAgLTM0NCwxMCArMzQ4LDkgQEAKIAogCXBvc3Rfc2V0KCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCiB9CiAKLS8qICBTb21lIEJJT1MncyBhcmUgZnVja2VkIGFuZCBkb24ndCBzZXQgYWxsIE1UUlJzIHRoZSBzYW1lISAgKi8KKy8qIFNvbWUgQklPUydzIGFyZSBtZXNzZWQgdXAgYW5kIGRvbid0IHNldCBhbGwgTVRSUnMgdGhlIHNhbWUhICovCiB2b2lkIF9faW5pdCBtdHJyX3N0YXRlX3dhcm4odm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIG1hc2sgPSBzbXBfY2hhbmdlc19tYXNrOwpAQCAtMzU1LDI4ICszNTgsMzMgQEAKIAlpZiAoIW1hc2spCiAJCXJldHVybjsKIAlpZiAobWFzayAmIE1UUlJfQ0hBTkdFX01BU0tfRklYRUQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm10cnI6IHlvdXIgQ1BVcyBoYWQgaW5jb25zaXN0ZW50IGZpeGVkIE1UUlIgc2V0dGluZ3NcbiIpOworCQlwcl93YXJuaW5nKCJtdHJyOiB5b3VyIENQVXMgaGFkIGluY29uc2lzdGVudCBmaXhlZCBNVFJSIHNldHRpbmdzXG4iKTsKIAlpZiAobWFzayAmIE1UUlJfQ0hBTkdFX01BU0tfVkFSSUFCTEUpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm10cnI6IHlvdXIgQ1BVcyBoYWQgaW5jb25zaXN0ZW50IHZhcmlhYmxlIE1UUlIgc2V0dGluZ3NcbiIpOworCQlwcl93YXJuaW5nKCJtdHJyOiB5b3VyIENQVXMgaGFkIGluY29uc2lzdGVudCB2YXJpYWJsZSBNVFJSIHNldHRpbmdzXG4iKTsKIAlpZiAobWFzayAmIE1UUlJfQ0hBTkdFX01BU0tfREVGVFlQRSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRycjogeW91ciBDUFVzIGhhZCBpbmNvbnNpc3RlbnQgTVRSUmRlZlR5cGUgc2V0dGluZ3NcbiIpOworCQlwcl93YXJuaW5nKCJtdHJyOiB5b3VyIENQVXMgaGFkIGluY29uc2lzdGVudCBNVFJSZGVmVHlwZSBzZXR0aW5nc1xuIik7CisKIAlwcmludGsoS0VSTl9JTkZPICJtdHJyOiBwcm9iYWJseSB5b3VyIEJJT1MgZG9lcyBub3Qgc2V0dXAgYWxsIENQVXMuXG4iKTsKIAlwcmludGsoS0VSTl9JTkZPICJtdHJyOiBjb3JyZWN0ZWQgY29uZmlndXJhdGlvbi5cbiIpOwogfQogCi0vKiBEb2Vzbid0IGF0dGVtcHQgdG8gcGFzcyBhbiBlcnJvciBvdXQgdG8gTVRSUiB1c2VycwotICAgYmVjYXVzZSBpdCdzIHF1aXRlIGNvbXBsaWNhdGVkIGluIHNvbWUgY2FzZXMgYW5kIHByb2JhYmx5IG5vdAotICAgd29ydGggaXQgYmVjYXVzZSB0aGUgYmVzdCBlcnJvciBoYW5kbGluZyBpcyB0byBpZ25vcmUgaXQuICovCisvKgorICogRG9lc24ndCBhdHRlbXB0IHRvIHBhc3MgYW4gZXJyb3Igb3V0IHRvIE1UUlIgdXNlcnMKKyAqIGJlY2F1c2UgaXQncyBxdWl0ZSBjb21wbGljYXRlZCBpbiBzb21lIGNhc2VzIGFuZCBwcm9iYWJseSBub3QKKyAqIHdvcnRoIGl0IGJlY2F1c2UgdGhlIGJlc3QgZXJyb3IgaGFuZGxpbmcgaXMgdG8gaWdub3JlIGl0LgorICovCiB2b2lkIG10cnJfd3Jtc3IodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBhLCB1bnNpZ25lZCBiKQogewotCWlmICh3cm1zcl9zYWZlKG1zciwgYSwgYikgPCAwKQorCWlmICh3cm1zcl9zYWZlKG1zciwgYSwgYikgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJIk1UUlI6IENQVSAldTogV3JpdGluZyBNU1IgJXggdG8gJXg6JXggZmFpbGVkXG4iLAogCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBtc3IsIGEsIGIpOworCX0KIH0KIAogLyoqCi0gKiBzZXRfZml4ZWRfcmFuZ2UgLSBjaGVja3MgJiB1cGRhdGVzIGEgZml4ZWQtcmFuZ2UgTVRSUiBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHZhbHVlIGl0IHNob3VsZCBoYXZlCisgKiBzZXRfZml4ZWRfcmFuZ2UgLSBjaGVja3MgJiB1cGRhdGVzIGEgZml4ZWQtcmFuZ2UgTVRSUiBpZiBpdAorICoJCSAgICAgZGlmZmVycyBmcm9tIHRoZSB2YWx1ZSBpdCBzaG91bGQgaGF2ZQogICogQG1zcjogTVNSIGFkZHJlc3Mgb2YgdGhlIE1UVFIgd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQgYW5kIHVwZGF0ZWQKICAqIEBjaGFuZ2VkOiBwb2ludGVyIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIHRoZSBNVFJSIG5lZWRlZCB0byBiZSBjaGFuZ2VkCiAgKiBAbXNyd29yZHM6IHBvaW50ZXIgdG8gdGhlIE1TUiB2YWx1ZXMgd2hpY2ggdGhlIE1TUiBzaG91bGQgaGF2ZQpAQCAtNDAxLDIwICs0MDksMjMgQEAKICAqCiAgKiBSZXR1cm5zOiBUaGUgaW5kZXggb2YgdGhlIHJlZ2lvbiBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIG9uIGVycm9yLgogICovCi1pbnQgZ2VuZXJpY19nZXRfZnJlZV9yZWdpb24odW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCByZXBsYWNlX3JlZykKK2ludAorZ2VuZXJpY19nZXRfZnJlZV9yZWdpb24odW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCByZXBsYWNlX3JlZykKIHsKLQlpbnQgaSwgbWF4OwotCW10cnJfdHlwZSBsdHlwZTsKIAl1bnNpZ25lZCBsb25nIGxiYXNlLCBsc2l6ZTsKKwltdHJyX3R5cGUgbHR5cGU7CisJaW50IGksIG1heDsKIAogCW1heCA9IG51bV92YXJfcmFuZ2VzOwogCWlmIChyZXBsYWNlX3JlZyA+PSAwICYmIHJlcGxhY2VfcmVnIDwgbWF4KQogCQlyZXR1cm4gcmVwbGFjZV9yZWc7CisKIAlmb3IgKGkgPSAwOyBpIDwgbWF4OyArK2kpIHsKIAkJbXRycl9pZi0+Z2V0KGksICZsYmFzZSwgJmxzaXplLCAmbHR5cGUpOwogCQlpZiAobHNpemUgPT0gMCkKIAkJCXJldHVybiBpOwogCX0KKwogCXJldHVybiAtRU5PU1BDOwogfQogCkBAIC00MzQsNyArNDQ1LDcgQEAKIAlyZG1zcihNVFJScGh5c01hc2tfTVNSKHJlZyksIG1hc2tfbG8sIG1hc2tfaGkpOwogCiAJaWYgKChtYXNrX2xvICYgMHg4MDApID09IDApIHsKLQkJLyogIEludmFsaWQgKGkuZS4gZnJlZSkgcmFuZ2UgICovCisJCS8qICBJbnZhbGlkIChpLmUuIGZyZWUpIHJhbmdlICovCiAJCSpiYXNlID0gMDsKIAkJKnNpemUgPSAwOwogCQkqdHlwZSA9IDA7CkBAIC00NzEsMjcgKzQ4MiwzMSBAQAogfQogCiAvKioKLSAqIHNldF9maXhlZF9yYW5nZXMgLSBjaGVja3MgJiB1cGRhdGVzIHRoZSBmaXhlZC1yYW5nZSBNVFJScyBpZiB0aGV5IGRpZmZlciBmcm9tIHRoZSBzYXZlZCBzZXQKKyAqIHNldF9maXhlZF9yYW5nZXMgLSBjaGVja3MgJiB1cGRhdGVzIHRoZSBmaXhlZC1yYW5nZSBNVFJScyBpZiB0aGV5CisgKgkJICAgICAgZGlmZmVyIGZyb20gdGhlIHNhdmVkIHNldAogICogQGZyczogcG9pbnRlciB0byBmaXhlZC1yYW5nZSBNVFJSIHZhbHVlcywgc2F2ZWQgYnkgZ2V0X2ZpeGVkX3JhbmdlcygpCiAgKi8KLXN0YXRpYyBpbnQgc2V0X2ZpeGVkX3JhbmdlcyhtdHJyX3R5cGUgKiBmcnMpCitzdGF0aWMgaW50IHNldF9maXhlZF9yYW5nZXMobXRycl90eXBlICpmcnMpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nICpzYXZlZCA9ICh1bnNpZ25lZCBsb25nIGxvbmcgKikgZnJzOworCXVuc2lnbmVkIGxvbmcgbG9uZyAqc2F2ZWQgPSAodW5zaWduZWQgbG9uZyBsb25nICopZnJzOwogCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCWludCBibG9jaz0tMSwgcmFuZ2U7CisJaW50IGJsb2NrID0gLTEsIHJhbmdlOwogCiAJazhfY2hlY2tfc3lzY2ZnX2RyYW1fbW9kX2VuKCk7CiAKLQl3aGlsZSAoZml4ZWRfcmFuZ2VfYmxvY2tzWysrYmxvY2tdLnJhbmdlcykKLQkgICAgZm9yIChyYW5nZT0wOyByYW5nZSA8IGZpeGVkX3JhbmdlX2Jsb2Nrc1tibG9ja10ucmFuZ2VzOyByYW5nZSsrKQotCQlzZXRfZml4ZWRfcmFuZ2UoZml4ZWRfcmFuZ2VfYmxvY2tzW2Jsb2NrXS5iYXNlX21zciArIHJhbmdlLAotCQkgICAgJmNoYW5nZWQsICh1bnNpZ25lZCBpbnQgKikgc2F2ZWQrKyk7CisJd2hpbGUgKGZpeGVkX3JhbmdlX2Jsb2Nrc1srK2Jsb2NrXS5yYW5nZXMpIHsKKwkJZm9yIChyYW5nZSA9IDA7IHJhbmdlIDwgZml4ZWRfcmFuZ2VfYmxvY2tzW2Jsb2NrXS5yYW5nZXM7IHJhbmdlKyspCisJCQlzZXRfZml4ZWRfcmFuZ2UoZml4ZWRfcmFuZ2VfYmxvY2tzW2Jsb2NrXS5iYXNlX21zciArIHJhbmdlLAorCQkJCQkmY2hhbmdlZCwgKHVuc2lnbmVkIGludCAqKXNhdmVkKyspOworCX0KIAogCXJldHVybiBjaGFuZ2VkOwogfQogCi0vKiAgU2V0IHRoZSBNU1IgcGFpciByZWxhdGluZyB0byBhIHZhciByYW5nZS4gUmV0dXJucyBUUlVFIGlmCi0gICAgY2hhbmdlcyBhcmUgbWFkZSAgKi8KKy8qCisgKiBTZXQgdGhlIE1TUiBwYWlyIHJlbGF0aW5nIHRvIGEgdmFyIHJhbmdlLgorICogUmV0dXJucyB0cnVlIGlmIGNoYW5nZXMgYXJlIG1hZGUuCisgKi8KIHN0YXRpYyBib29sIHNldF9tdHJyX3Zhcl9yYW5nZXModW5zaWduZWQgaW50IGluZGV4LCBzdHJ1Y3QgbXRycl92YXJfcmFuZ2UgKnZyKQogewogCXVuc2lnbmVkIGludCBsbywgaGk7CkBAIC01MDEsNiArNTE2LDcgQEAKIAlpZiAoKHZyLT5iYXNlX2xvICYgMHhmZmZmZjBmZlVMKSAhPSAobG8gJiAweGZmZmZmMGZmVUwpCiAJICAgIHx8ICh2ci0+YmFzZV9oaSAmIChzaXplX2FuZF9tYXNrID4+ICgzMiAtIFBBR0VfU0hJRlQpKSkgIT0KIAkJKGhpICYgKHNpemVfYW5kX21hc2sgPj4gKDMyIC0gUEFHRV9TSElGVCkpKSkgeworCiAJCW10cnJfd3Jtc3IoTVRSUnBoeXNCYXNlX01TUihpbmRleCksIHZyLT5iYXNlX2xvLCB2ci0+YmFzZV9oaSk7CiAJCWNoYW5nZWQgPSB0cnVlOwogCX0KQEAgLTUyNiwyMSArNTQyLDI2IEBACiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9tdHJyX3N0YXRlKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgbG9uZyBjaGFuZ2VfbWFzayA9IDA7CisJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewogCQlpZiAoc2V0X210cnJfdmFyX3JhbmdlcyhpLCAmbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldKSkKIAkJCWNoYW5nZV9tYXNrIHw9IE1UUlJfQ0hBTkdFX01BU0tfVkFSSUFCTEU7CisJfQogCiAJaWYgKG10cnJfc3RhdGUuaGF2ZV9maXhlZCAmJiBzZXRfZml4ZWRfcmFuZ2VzKG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzKSkKIAkJY2hhbmdlX21hc2sgfD0gTVRSUl9DSEFOR0VfTUFTS19GSVhFRDsKIAotCS8qICBTZXRfbXRycl9yZXN0b3JlIHJlc3RvcmVzIHRoZSBvbGQgdmFsdWUgb2YgTVRSUmRlZlR5cGUsCi0JICAgc28gdG8gc2V0IGl0IHdlIGZpZGRsZSB3aXRoIHRoZSBzYXZlZCB2YWx1ZSAgKi8KKwkvKgorCSAqIFNldF9tdHJyX3Jlc3RvcmUgcmVzdG9yZXMgdGhlIG9sZCB2YWx1ZSBvZiBNVFJSZGVmVHlwZSwKKwkgKiBzbyB0byBzZXQgaXQgd2UgZmlkZGxlIHdpdGggdGhlIHNhdmVkIHZhbHVlOgorCSAqLwogCWlmICgoZGVmdHlwZV9sbyAmIDB4ZmYpICE9IG10cnJfc3RhdGUuZGVmX3R5cGUKIAkgICAgfHwgKChkZWZ0eXBlX2xvICYgMHhjMDApID4+IDEwKSAhPSBtdHJyX3N0YXRlLmVuYWJsZWQpIHsKLQkJZGVmdHlwZV9sbyA9IChkZWZ0eXBlX2xvICYgfjB4Y2ZmKSB8IG10cnJfc3RhdGUuZGVmX3R5cGUgfCAobXRycl9zdGF0ZS5lbmFibGVkIDw8IDEwKTsKKworCQlkZWZ0eXBlX2xvID0gKGRlZnR5cGVfbG8gJiB+MHhjZmYpIHwgbXRycl9zdGF0ZS5kZWZfdHlwZSB8CisJCQkgICAgIChtdHJyX3N0YXRlLmVuYWJsZWQgPDwgMTApOwogCQljaGFuZ2VfbWFzayB8PSBNVFJSX0NIQU5HRV9NQVNLX0RFRlRZUEU7CiAJfQogCkBAIC01NDgsMzMgKzU2OSwzNiBAQAogfQogCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNyNCA9IDA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBjcjQ7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNldF9hdG9taWNpdHlfbG9jayk7CiAKIC8qCi0gKiBTaW5jZSB3ZSBhcmUgZGlzYWJsaW5nIHRoZSBjYWNoZSBkb24ndCBhbGxvdyBhbnkgaW50ZXJydXB0cyAtIHRoZXkKLSAqIHdvdWxkIHJ1biBleHRyZW1lbHkgc2xvdyBhbmQgd291bGQgb25seSBpbmNyZWFzZSB0aGUgcGFpbi4gIFRoZSBjYWxsZXIgbXVzdAotICogZW5zdXJlIHRoYXQgbG9jYWwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgYW5kIGFyZSByZWVuYWJsZWQgYWZ0ZXIgcG9zdF9zZXQoKQotICogaGFzIGJlZW4gY2FsbGVkLgorICogU2luY2Ugd2UgYXJlIGRpc2FibGluZyB0aGUgY2FjaGUgZG9uJ3QgYWxsb3cgYW55IGludGVycnVwdHMsCisgKiB0aGV5IHdvdWxkIHJ1biBleHRyZW1lbHkgc2xvdyBhbmQgd291bGQgb25seSBpbmNyZWFzZSB0aGUgcGFpbi4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgbG9jYWwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgYW5kCisgKiBhcmUgcmVlbmFibGVkIGFmdGVyIHBvc3Rfc2V0KCkgaGFzIGJlZW4gY2FsbGVkLgogICovCi0KIHN0YXRpYyB2b2lkIHByZXBhcmVfc2V0KHZvaWQpIF9fYWNxdWlyZXMoc2V0X2F0b21pY2l0eV9sb2NrKQogewogCXVuc2lnbmVkIGxvbmcgY3IwOwogCi0JLyogIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBpZGVhbCwgc2luY2UgdGhlIGNhY2hlIGlzIG9ubHkgZmx1c2hlZC9kaXNhYmxlZAotCSAgIGZvciB0aGlzIENQVSB3aGlsZSB0aGUgTVRSUnMgYXJlIGNoYW5nZWQsIGJ1dCBjaGFuZ2luZyB0aGlzIHJlcXVpcmVzCi0JICAgbW9yZSBpbnZhc2l2ZSBjaGFuZ2VzIHRvIHRoZSB3YXkgdGhlIGtlcm5lbCBib290cyAgKi8KKwkvKgorCSAqIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBpZGVhbAorCSAqIHNpbmNlIHRoZSBjYWNoZSBpcyBvbmx5IGZsdXNoZWQvZGlzYWJsZWQgZm9yIHRoaXMgQ1BVIHdoaWxlIHRoZQorCSAqIE1UUlJzIGFyZSBjaGFuZ2VkLCBidXQgY2hhbmdpbmcgdGhpcyByZXF1aXJlcyBtb3JlIGludmFzaXZlCisJICogY2hhbmdlcyB0byB0aGUgd2F5IHRoZSBrZXJuZWwgYm9vdHMKKwkgKi8KIAogCXNwaW5fbG9jaygmc2V0X2F0b21pY2l0eV9sb2NrKTsKIAotCS8qICBFbnRlciB0aGUgbm8tZmlsbCAoQ0Q9MSwgTlc9MCkgY2FjaGUgbW9kZSBhbmQgZmx1c2ggY2FjaGVzLiAqLworCS8qIEVudGVyIHRoZSBuby1maWxsIChDRD0xLCBOVz0wKSBjYWNoZSBtb2RlIGFuZCBmbHVzaCBjYWNoZXMuICovCiAJY3IwID0gcmVhZF9jcjAoKSB8IFg4Nl9DUjBfQ0Q7CiAJd3JpdGVfY3IwKGNyMCk7CiAJd2JpbnZkKCk7CiAKLQkvKiAgU2F2ZSB2YWx1ZSBvZiBDUjQgYW5kIGNsZWFyIFBhZ2UgR2xvYmFsIEVuYWJsZSAoYml0IDcpICAqLwotCWlmICggY3B1X2hhc19wZ2UgKSB7CisJLyogU2F2ZSB2YWx1ZSBvZiBDUjQgYW5kIGNsZWFyIFBhZ2UgR2xvYmFsIEVuYWJsZSAoYml0IDcpICovCisJaWYgKGNwdV9oYXNfcGdlKSB7CiAJCWNyNCA9IHJlYWRfY3I0KCk7CiAJCXdyaXRlX2NyNChjcjQgJiB+WDg2X0NSNF9QR0UpOwogCX0KQEAgLTU4MiwyNiArNjA2LDI2IEBACiAJLyogRmx1c2ggYWxsIFRMQnMgdmlhIGEgbW92ICVjcjMsICVyZWc7IG1vdiAlcmVnLCAlY3IzICovCiAJX19mbHVzaF90bGIoKTsKIAotCS8qICBTYXZlIE1UUlIgc3RhdGUgKi8KKwkvKiBTYXZlIE1UUlIgc3RhdGUgKi8KIAlyZG1zcihNU1JfTVRSUmRlZlR5cGUsIGRlZnR5cGVfbG8sIGRlZnR5cGVfaGkpOwogCi0JLyogIERpc2FibGUgTVRSUnMsIGFuZCBzZXQgdGhlIGRlZmF1bHQgdHlwZSB0byB1bmNhY2hlZCAgKi8KKwkvKiBEaXNhYmxlIE1UUlJzLCBhbmQgc2V0IHRoZSBkZWZhdWx0IHR5cGUgdG8gdW5jYWNoZWQgKi8KIAltdHJyX3dybXNyKE1TUl9NVFJSZGVmVHlwZSwgZGVmdHlwZV9sbyAmIH4weGNmZiwgZGVmdHlwZV9oaSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBvc3Rfc2V0KHZvaWQpIF9fcmVsZWFzZXMoc2V0X2F0b21pY2l0eV9sb2NrKQogewotCS8qICBGbHVzaCBUTEJzIChubyBuZWVkIHRvIGZsdXNoIGNhY2hlcyAtIHRoZXkgYXJlIGRpc2FibGVkKSAgKi8KKwkvKiBGbHVzaCBUTEJzIChubyBuZWVkIHRvIGZsdXNoIGNhY2hlcyAtIHRoZXkgYXJlIGRpc2FibGVkKSAqLwogCV9fZmx1c2hfdGxiKCk7CiAKIAkvKiBJbnRlbCAoUDYpIHN0YW5kYXJkIE1UUlJzICovCiAJbXRycl93cm1zcihNU1JfTVRSUmRlZlR5cGUsIGRlZnR5cGVfbG8sIGRlZnR5cGVfaGkpOwotCQkKLQkvKiAgRW5hYmxlIGNhY2hlcyAgKi8KKworCS8qIEVuYWJsZSBjYWNoZXMgKi8KIAl3cml0ZV9jcjAocmVhZF9jcjAoKSAmIDB4YmZmZmZmZmYpOwogCi0JLyogIFJlc3RvcmUgdmFsdWUgb2YgQ1I0ICAqLwotCWlmICggY3B1X2hhc19wZ2UgKQorCS8qIFJlc3RvcmUgdmFsdWUgb2YgQ1I0ICovCisJaWYgKGNwdV9oYXNfcGdlKQogCQl3cml0ZV9jcjQoY3I0KTsKIAlzcGluX3VubG9jaygmc2V0X2F0b21pY2l0eV9sb2NrKTsKIH0KQEAgLTYyMywyNCArNjQ3LDI3IEBACiAJcG9zdF9zZXQoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQkvKiAgVXNlIHRoZSBhdG9taWMgYml0b3BzIHRvIHVwZGF0ZSB0aGUgZ2xvYmFsIG1hc2sgICovCisJLyogVXNlIHRoZSBhdG9taWMgYml0b3BzIHRvIHVwZGF0ZSB0aGUgZ2xvYmFsIG1hc2sgKi8KIAlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBzaXplb2YgbWFzayAqIDg7ICsrY291bnQpIHsKIAkJaWYgKG1hc2sgJiAweDAxKQogCQkJc2V0X2JpdChjb3VudCwgJnNtcF9jaGFuZ2VzX21hc2spOwogCQltYXNrID4+PSAxOwogCX0KLQkKKwogfQogCisvKioKKyAqIGdlbmVyaWNfc2V0X210cnIgLSBzZXQgdmFyaWFibGUgTVRSUiByZWdpc3RlciBvbiB0aGUgbG9jYWwgQ1BVLgorICoKKyAqIEByZWc6IFRoZSByZWdpc3RlciB0byBzZXQuCisgKiBAYmFzZTogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVnaW9uLgorICogQHNpemU6IFRoZSBzaXplIG9mIHRoZSByZWdpb24uIElmIHRoaXMgaXMgMCB0aGUgcmVnaW9uIGlzIGRpc2FibGVkLgorICogQHR5cGU6IFRoZSB0eXBlIG9mIHRoZSByZWdpb24uCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCiBzdGF0aWMgdm9pZCBnZW5lcmljX3NldF9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZSwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBtdHJyX3R5cGUgdHlwZSkKLS8qICBbU1VNTUFSWV0gU2V0IHZhcmlhYmxlIE1UUlIgcmVnaXN0ZXIgb24gdGhlIGxvY2FsIENQVS4KLSAgICA8cmVnPiBUaGUgcmVnaXN0ZXIgdG8gc2V0LgotICAgIDxiYXNlPiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSByZWdpb24uCi0gICAgPHNpemU+IFRoZSBzaXplIG9mIHRoZSByZWdpb24uIElmIHRoaXMgaXMgMCB0aGUgcmVnaW9uIGlzIGRpc2FibGVkLgotICAgIDx0eXBlPiBUaGUgdHlwZSBvZiB0aGUgcmVnaW9uLgotICAgIFtSRVRVUk5TXSBOb3RoaW5nLgotKi8KIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBtdHJyX3Zhcl9yYW5nZSAqdnI7CkBAIC02NTEsOCArNjc4LDEwIEBACiAJcHJlcGFyZV9zZXQoKTsKIAogCWlmIChzaXplID09IDApIHsKLQkJLyogVGhlIGludmFsaWQgYml0IGlzIGtlcHQgaW4gdGhlIG1hc2ssIHNvIHdlIHNpbXBseSBjbGVhciB0aGUKLQkJICAgcmVsZXZhbnQgbWFzayByZWdpc3RlciB0byBkaXNhYmxlIGEgcmFuZ2UuICovCisJCS8qCisJCSAqIFRoZSBpbnZhbGlkIGJpdCBpcyBrZXB0IGluIHRoZSBtYXNrLCBzbyB3ZSBzaW1wbHkKKwkJICogY2xlYXIgdGhlIHJlbGV2YW50IG1hc2sgcmVnaXN0ZXIgdG8gZGlzYWJsZSBhIHJhbmdlLgorCQkgKi8KIAkJbXRycl93cm1zcihNVFJScGh5c01hc2tfTVNSKHJlZyksIDAsIDApOwogCQltZW1zZXQodnIsIDAsIHNpemVvZihzdHJ1Y3QgbXRycl92YXJfcmFuZ2UpKTsKIAl9IGVsc2UgewpAQCAtNjY5LDQ2ICs2OTgsNTAgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLWludCBnZW5lcmljX3ZhbGlkYXRlX2FkZF9wYWdlKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgdHlwZSkKK2ludCBnZW5lcmljX3ZhbGlkYXRlX2FkZF9wYWdlKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgICAgdW5zaWduZWQgaW50IHR5cGUpCiB7CiAJdW5zaWduZWQgbG9uZyBsYmFzZSwgbGFzdDsKIAotCS8qICBGb3IgSW50ZWwgUFBybyBzdGVwcGluZyA8PSA3LCBtdXN0IGJlIDQgTWlCIGFsaWduZWQgCi0JICAgIGFuZCBub3QgdG91Y2ggMHg3MDAwMDAwMC0+MHg3MDAzRkZGRiAqLworCS8qCisJICogRm9yIEludGVsIFBQcm8gc3RlcHBpbmcgPD0gNworCSAqIG11c3QgYmUgNCBNaUIgYWxpZ25lZCBhbmQgbm90IHRvdWNoIDB4NzAwMDAwMDAgLT4gMHg3MDAzRkZGRgorCSAqLwogCWlmIChpc19jcHUoSU5URUwpICYmIGJvb3RfY3B1X2RhdGEueDg2ID09IDYgJiYKIAkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gMSAmJgogCSAgICBib290X2NwdV9kYXRhLng4Nl9tYXNrIDw9IDcpIHsKIAkJaWYgKGJhc2UgJiAoKDEgPDwgKDIyIC0gUEFHRV9TSElGVCkpIC0gMSkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm10cnI6IGJhc2UoMHglbHgwMDApIGlzIG5vdCA0IE1pQiBhbGlnbmVkXG4iLCBiYXNlKTsKKwkJCXByX3dhcm5pbmcoIm10cnI6IGJhc2UoMHglbHgwMDApIGlzIG5vdCA0IE1pQiBhbGlnbmVkXG4iLCBiYXNlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmICghKGJhc2UgKyBzaXplIDwgMHg3MDAwMCB8fCBiYXNlID4gMHg3MDAzRikgJiYKIAkJICAgICh0eXBlID09IE1UUlJfVFlQRV9XUkNPTUIKIAkJICAgICB8fCB0eXBlID09IE1UUlJfVFlQRV9XUkJBQ0spKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJtdHJyOiB3cml0YWJsZSBtdHJyIGJldHdlZW4gMHg3MDAwMDAwMCBhbmQgMHg3MDAzRkZGRiBtYXkgaGFuZyB0aGUgQ1BVLlxuIik7CisJCQlwcl93YXJuaW5nKCJtdHJyOiB3cml0YWJsZSBtdHJyIGJldHdlZW4gMHg3MDAwMDAwMCBhbmQgMHg3MDAzRkZGRiBtYXkgaGFuZyB0aGUgQ1BVLlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAotCS8qICBDaGVjayB1cHBlciBiaXRzIG9mIGJhc2UgYW5kIGxhc3QgYXJlIGVxdWFsIGFuZCBsb3dlciBiaXRzIGFyZSAwCi0JICAgIGZvciBiYXNlIGFuZCAxIGZvciBsYXN0ICAqLworCS8qCisJICogQ2hlY2sgdXBwZXIgYml0cyBvZiBiYXNlIGFuZCBsYXN0IGFyZSBlcXVhbCBhbmQgbG93ZXIgYml0cyBhcmUgMAorCSAqIGZvciBiYXNlIGFuZCAxIGZvciBsYXN0CisJICovCiAJbGFzdCA9IGJhc2UgKyBzaXplIC0gMTsKIAlmb3IgKGxiYXNlID0gYmFzZTsgIShsYmFzZSAmIDEpICYmIChsYXN0ICYgMSk7Ci0JICAgICBsYmFzZSA9IGxiYXNlID4+IDEsIGxhc3QgPSBsYXN0ID4+IDEpIDsKKwkgICAgIGxiYXNlID0gbGJhc2UgPj4gMSwgbGFzdCA9IGxhc3QgPj4gMSkKKwkJOwogCWlmIChsYmFzZSAhPSBsYXN0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm10cnI6IGJhc2UoMHglbHgwMDApIGlzIG5vdCBhbGlnbmVkIG9uIGEgc2l6ZSgweCVseDAwMCkgYm91bmRhcnlcbiIsCi0JCSAgICAgICBiYXNlLCBzaXplKTsKKwkJcHJfd2FybmluZygibXRycjogYmFzZSgweCVseDAwMCkgaXMgbm90IGFsaWduZWQgb24gYSBzaXplKDB4JWx4MDAwKSBib3VuZGFyeVxuIiwgYmFzZSwgc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IGdlbmVyaWNfaGF2ZV93cmNvbWIodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGNvbmZpZywgZHVtbXk7CiAJcmRtc3IoTVNSX01UUlJjYXAsIGNvbmZpZywgZHVtbXkpOwotCXJldHVybiAoY29uZmlnICYgKDEgPDwgMTApKTsKKwlyZXR1cm4gY29uZmlnICYgKDEgPDwgMTApOwogfQogCiBpbnQgcG9zaXRpdmVfaGF2ZV93cmNvbWIodm9pZCkKQEAgLTcxNiwxNCArNzQ5LDE1IEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qIGdlbmVyaWMgc3RydWN0dXJlLi4uCisvKgorICogR2VuZXJpYyBzdHJ1Y3R1cmUuLi4KICAqLwogc3RydWN0IG10cnJfb3BzIGdlbmVyaWNfbXRycl9vcHMgPSB7Ci0JLnVzZV9pbnRlbF9pZiAgICAgID0gMSwKLQkuc2V0X2FsbAkgICA9IGdlbmVyaWNfc2V0X2FsbCwKLQkuZ2V0ICAgICAgICAgICAgICAgPSBnZW5lcmljX2dldF9tdHJyLAotCS5nZXRfZnJlZV9yZWdpb24gICA9IGdlbmVyaWNfZ2V0X2ZyZWVfcmVnaW9uLAotCS5zZXQgICAgICAgICAgICAgICA9IGdlbmVyaWNfc2V0X210cnIsCi0JLnZhbGlkYXRlX2FkZF9wYWdlID0gZ2VuZXJpY192YWxpZGF0ZV9hZGRfcGFnZSwKLQkuaGF2ZV93cmNvbWIgICAgICAgPSBnZW5lcmljX2hhdmVfd3Jjb21iLAorCS51c2VfaW50ZWxfaWYJCT0gMSwKKwkuc2V0X2FsbAkJPSBnZW5lcmljX3NldF9hbGwsCisJLmdldAkJCT0gZ2VuZXJpY19nZXRfbXRyciwKKwkuZ2V0X2ZyZWVfcmVnaW9uCT0gZ2VuZXJpY19nZXRfZnJlZV9yZWdpb24sCisJLnNldAkJCT0gZ2VuZXJpY19zZXRfbXRyciwKKwkudmFsaWRhdGVfYWRkX3BhZ2UJPSBnZW5lcmljX3ZhbGlkYXRlX2FkZF9wYWdlLAorCS5oYXZlX3dyY29tYgkJPSBnZW5lcmljX2hhdmVfd3Jjb21iLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKaW5kZXggZmI3M2E1Mi4uMDhiNmVhNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKQEAgLTEsMjcgKzEsMjggQEAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjZGVmaW5lIExJTkVfU0laRSA4MAogCiAjaW5jbHVkZSA8YXNtL210cnIuaD4KKwogI2luY2x1ZGUgIm10cnIuaCIKIAogI2RlZmluZSBGSUxFX0ZDT1VOVChmKSAoKChzdHJ1Y3Qgc2VxX2ZpbGUgKikoKGYpLT5wcml2YXRlX2RhdGEpKS0+cHJpdmF0ZSkKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG10cnJfc3RyaW5nc1tNVFJSX05VTV9UWVBFU10gPQogewotICAgICJ1bmNhY2hhYmxlIiwgICAgICAgICAgICAgICAvKiAwICovCi0gICAgIndyaXRlLWNvbWJpbmluZyIsICAgICAgICAgIC8qIDEgKi8KLSAgICAiPyIsICAgICAgICAgICAgICAgICAgICAgICAgLyogMiAqLwotICAgICI/IiwgICAgICAgICAgICAgICAgICAgICAgICAvKiAzICovCi0gICAgIndyaXRlLXRocm91Z2giLCAgICAgICAgICAgIC8qIDQgKi8KLSAgICAid3JpdGUtcHJvdGVjdCIsICAgICAgICAgICAgLyogNSAqLwotICAgICJ3cml0ZS1iYWNrIiwgICAgICAgICAgICAgICAvKiA2ICovCisJInVuY2FjaGFibGUiLAkJLyogMCAqLworCSJ3cml0ZS1jb21iaW5pbmciLAkvKiAxICovCisJIj8iLAkJCS8qIDIgKi8KKwkiPyIsCQkJLyogMyAqLworCSJ3cml0ZS10aHJvdWdoIiwJLyogNCAqLworCSJ3cml0ZS1wcm90ZWN0IiwJLyogNSAqLworCSJ3cml0ZS1iYWNrIiwJCS8qIDYgKi8KIH07CiAKIGNvbnN0IGNoYXIgKm10cnJfYXR0cmliX3RvX3N0cihpbnQgeCkKQEAgLTM1LDggKzM2LDggQEAKIG10cnJfZmlsZV9hZGQodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJICAgICAgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wgaW5jcmVtZW50LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IHBhZ2UpCiB7CisJdW5zaWduZWQgaW50ICpmY291bnQgPSBGSUxFX0ZDT1VOVChmaWxlKTsKIAlpbnQgcmVnLCBtYXg7Ci0JdW5zaWduZWQgaW50ICpmY291bnQgPSBGSUxFX0ZDT1VOVChmaWxlKTsgCiAKIAltYXggPSBudW1fdmFyX3JhbmdlczsKIAlpZiAoZmNvdW50ID09IE5VTEwpIHsKQEAgLTYxLDggKzYyLDggQEAKIG10cnJfZmlsZV9kZWwodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJICAgICAgc3RydWN0IGZpbGUgKmZpbGUsIGludCBwYWdlKQogewotCWludCByZWc7CiAJdW5zaWduZWQgaW50ICpmY291bnQgPSBGSUxFX0ZDT1VOVChmaWxlKTsKKwlpbnQgcmVnOwogCiAJaWYgKCFwYWdlKSB7CiAJCWlmICgoYmFzZSAmIChQQUdFX1NJWkUgLSAxKSkgfHwgKHNpemUgJiAoUEFHRV9TSVpFIC0gMSkpKQpAQCAtODEsMTMgKzgyLDE0IEBACiAJcmV0dXJuIHJlZzsKIH0KIAotLyogUkVELVBFTjogc2VxX2ZpbGUgY2FuIHNlZWsgbm93LiB0aGlzIGlzIGlnbm9yZWQuICovCisvKgorICogc2VxX2ZpbGUgY2FuIHNlZWsgYnV0IHdlIGlnbm9yZSBpdC4KKyAqCisgKiBGb3JtYXQgb2YgY29udHJvbCBsaW5lOgorICogICAgImJhc2U9JUx4IHNpemU9JUx4IHR5cGU9JXMiIG9yICJkaXNhYmxlPSVkIgorICovCiBzdGF0aWMgc3NpemVfdAogbXRycl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICogcHBvcykKLS8qICBGb3JtYXQgb2YgY29udHJvbCBsaW5lOgotICAgICJiYXNlPSVMeCBzaXplPSVMeCB0eXBlPSVzIiAgICAgT1I6Ci0gICAgImRpc2FibGU9JWQiCi0qLwogewogCWludCBpLCBlcnI7CiAJdW5zaWduZWQgbG9uZyByZWc7CkBAIC0xMDAsMTUgKzEwMiwxOCBAQAogCQlyZXR1cm4gLUVQRVJNOwogCWlmICghbGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKKwogCW1lbXNldChsaW5lLCAwLCBMSU5FX1NJWkUpOwogCWlmIChsZW4gPiBMSU5FX1NJWkUpCiAJCWxlbiA9IExJTkVfU0laRTsKIAlpZiAoY29weV9mcm9tX3VzZXIobGluZSwgYnVmLCBsZW4gLSAxKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CisKIAlsaW5lbGVuID0gc3RybGVuKGxpbmUpOwogCXB0ciA9IGxpbmUgKyBsaW5lbGVuIC0gMTsKIAlpZiAobGluZWxlbiAmJiAqcHRyID09ICdcbicpCiAJCSpwdHIgPSAnXDAnOworCiAJaWYgKCFzdHJuY21wKGxpbmUsICJkaXNhYmxlPSIsIDgpKSB7CiAJCXJlZyA9IHNpbXBsZV9zdHJ0b3VsKGxpbmUgKyA4LCAmcHRyLCAwKTsKIAkJZXJyID0gbXRycl9kZWxfcGFnZShyZWcsIDAsIDApOwpAQCAtMTE2LDI4ICsxMjEsMzUgQEAKIAkJCXJldHVybiBlcnI7CiAJCXJldHVybiBsZW47CiAJfQorCiAJaWYgKHN0cm5jbXAobGluZSwgImJhc2U9IiwgNSkpCiAJCXJldHVybiAtRUlOVkFMOworCiAJYmFzZSA9IHNpbXBsZV9zdHJ0b3VsbChsaW5lICsgNSwgJnB0ciwgMCk7Ci0JZm9yICg7IGlzc3BhY2UoKnB0cik7ICsrcHRyKSA7CisJZm9yICg7IGlzc3BhY2UoKnB0cik7ICsrcHRyKQorCQk7CisKIAlpZiAoc3RybmNtcChwdHIsICJzaXplPSIsIDUpKQogCQlyZXR1cm4gLUVJTlZBTDsKKwogCXNpemUgPSBzaW1wbGVfc3RydG91bGwocHRyICsgNSwgJnB0ciwgMCk7CiAJaWYgKChiYXNlICYgMHhmZmYpIHx8IChzaXplICYgMHhmZmYpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlmb3IgKDsgaXNzcGFjZSgqcHRyKTsgKytwdHIpIDsKKwlmb3IgKDsgaXNzcGFjZSgqcHRyKTsgKytwdHIpCisJCTsKKwogCWlmIChzdHJuY21wKHB0ciwgInR5cGU9IiwgNSkpCiAJCXJldHVybiAtRUlOVkFMOwogCXB0ciArPSA1OwotCWZvciAoOyBpc3NwYWNlKCpwdHIpOyArK3B0cikgOworCWZvciAoOyBpc3NwYWNlKCpwdHIpOyArK3B0cikKKwkJOworCiAJZm9yIChpID0gMDsgaSA8IE1UUlJfTlVNX1RZUEVTOyArK2kpIHsKIAkJaWYgKHN0cmNtcChwdHIsIG10cnJfc3RyaW5nc1tpXSkpCiAJCQljb250aW51ZTsKIAkJYmFzZSA+Pj0gUEFHRV9TSElGVDsKIAkJc2l6ZSA+Pj0gUEFHRV9TSElGVDsKLQkJZXJyID0KLQkJICAgIG10cnJfYWRkX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJhc2UsICh1bnNpZ25lZCBsb25nKSBzaXplLCBpLAotCQkJCSAgdHJ1ZSk7CisJCWVyciA9IG10cnJfYWRkX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYmFzZSwgKHVuc2lnbmVkIGxvbmcpc2l6ZSwgaSwgdHJ1ZSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAkJcmV0dXJuIGxlbjsKQEAgLTE4MSw3ICsxOTMsOSBAQAogCWNhc2UgTVRSUklPQzMyX1NFVF9QQUdFX0VOVFJZOgogCWNhc2UgTVRSUklPQzMyX0RFTF9QQUdFX0VOVFJZOgogCWNhc2UgTVRSUklPQzMyX0tJTExfUEFHRV9FTlRSWTogewotCQlzdHJ1Y3QgbXRycl9zZW50cnkzMiBfX3VzZXIgKnMzMiA9IChzdHJ1Y3QgbXRycl9zZW50cnkzMiBfX3VzZXIgKilfX2FyZzsKKwkJc3RydWN0IG10cnJfc2VudHJ5MzIgX191c2VyICpzMzI7CisKKwkJczMyID0gKHN0cnVjdCBtdHJyX3NlbnRyeTMyIF9fdXNlciAqKV9fYXJnOwogCQllcnIgPSBnZXRfdXNlcihzZW50cnkuYmFzZSwgJnMzMi0+YmFzZSk7CiAJCWVyciB8PSBnZXRfdXNlcihzZW50cnkuc2l6ZSwgJnMzMi0+c2l6ZSk7CiAJCWVyciB8PSBnZXRfdXNlcihzZW50cnkudHlwZSwgJnMzMi0+dHlwZSk7CkBAIC0xOTEsNyArMjA1LDkgQEAKIAl9CiAJY2FzZSBNVFJSSU9DMzJfR0VUX0VOVFJZOgogCWNhc2UgTVRSUklPQzMyX0dFVF9QQUdFX0VOVFJZOiB7Ci0JCXN0cnVjdCBtdHJyX2dlbnRyeTMyIF9fdXNlciAqZzMyID0gKHN0cnVjdCBtdHJyX2dlbnRyeTMyIF9fdXNlciAqKV9fYXJnOworCQlzdHJ1Y3QgbXRycl9nZW50cnkzMiBfX3VzZXIgKmczMjsKKworCQlnMzIgPSAoc3RydWN0IG10cnJfZ2VudHJ5MzIgX191c2VyICopX19hcmc7CiAJCWVyciA9IGdldF91c2VyKGdlbnRyeS5yZWdudW0sICZnMzItPnJlZ251bSk7CiAJCWVyciB8PSBnZXRfdXNlcihnZW50cnkuYmFzZSwgJmczMi0+YmFzZSk7CiAJCWVyciB8PSBnZXRfdXNlcihnZW50cnkuc2l6ZSwgJmczMi0+c2l6ZSk7CkBAIC0zMTQsNyArMzMwLDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0Jc3dpdGNoKGNtZCkgeworCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBNVFJSSU9DX0dFVF9FTlRSWToKIAljYXNlIE1UUlJJT0NfR0VUX1BBR0VfRU5UUlk6CiAJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZ2VudHJ5LCBzaXplb2YgZ2VudHJ5KSkKQEAgLTMyMyw3ICszMzksOSBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAljYXNlIE1UUlJJT0MzMl9HRVRfRU5UUlk6CiAJY2FzZSBNVFJSSU9DMzJfR0VUX1BBR0VfRU5UUlk6IHsKLQkJc3RydWN0IG10cnJfZ2VudHJ5MzIgX191c2VyICpnMzIgPSAoc3RydWN0IG10cnJfZ2VudHJ5MzIgX191c2VyICopX19hcmc7CisJCXN0cnVjdCBtdHJyX2dlbnRyeTMyIF9fdXNlciAqZzMyOworCisJCWczMiA9IChzdHJ1Y3QgbXRycl9nZW50cnkzMiBfX3VzZXIgKilfX2FyZzsKIAkJZXJyID0gcHV0X3VzZXIoZ2VudHJ5LmJhc2UsICZnMzItPmJhc2UpOwogCQllcnIgfD0gcHV0X3VzZXIoZ2VudHJ5LnNpemUsICZnMzItPnNpemUpOwogCQllcnIgfD0gcHV0X3VzZXIoZ2VudHJ5LnJlZ251bSwgJmczMi0+cmVnbnVtKTsKQEAgLTMzNSwxMSArMzUzLDEwIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludAotbXRycl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IG10cnJfY2xvc2Uoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBpLCBtYXg7CiAJdW5zaWduZWQgaW50ICpmY291bnQgPSBGSUxFX0ZDT1VOVChmaWxlKTsKKwlpbnQgaSwgbWF4OwogCiAJaWYgKGZjb3VudCAhPSBOVUxMKSB7CiAJCW1heCA9IG51bV92YXJfcmFuZ2VzOwpAQCAtMzU5LDIyICszNzYsMjIgQEAKIAogc3RhdGljIGludCBtdHJyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaWYgKCFtdHJyX2lmKSAKKwlpZiAoIW10cnJfaWYpCiAJCXJldHVybiAtRUlPOwotCWlmICghbXRycl9pZi0+Z2V0KSAKLQkJcmV0dXJuIC1FTlhJTzsgCisJaWYgKCFtdHJyX2lmLT5nZXQpCisJCXJldHVybiAtRU5YSU87CiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG10cnJfc2VxX3Nob3csIE5VTEwpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtdHJyX2ZvcHMgPSB7Ci0JLm93bmVyICAgPSBUSElTX01PRFVMRSwKLQkub3BlbgkgPSBtdHJyX29wZW4sIAotCS5yZWFkICAgID0gc2VxX3JlYWQsCi0JLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLndyaXRlICAgPSBtdHJyX3dyaXRlLAotCS51bmxvY2tlZF9pb2N0bCA9IG10cnJfaW9jdGwsCi0JLmNvbXBhdF9pb2N0bCA9IG10cnJfaW9jdGwsCi0JLnJlbGVhc2UgPSBtdHJyX2Nsb3NlLAorCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCQk9IG10cnJfb3BlbiwKKwkucmVhZAkJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJCT0gc2VxX2xzZWVrLAorCS53cml0ZQkJCT0gbXRycl93cml0ZSwKKwkudW5sb2NrZWRfaW9jdGwJCT0gbXRycl9pb2N0bCwKKwkuY29tcGF0X2lvY3RsCQk9IG10cnJfaW9jdGwsCisJLnJlbGVhc2UJCT0gbXRycl9jbG9zZSwKIH07CiAKIHN0YXRpYyBpbnQgbXRycl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQpAQCAtMzg4LDIzICs0MDUsMjQgQEAKIAltYXggPSBudW1fdmFyX3JhbmdlczsKIAlmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKIAkJbXRycl9pZi0+Z2V0KGksICZiYXNlLCAmc2l6ZSwgJnR5cGUpOwotCQlpZiAoc2l6ZSA9PSAwKQorCQlpZiAoc2l6ZSA9PSAwKSB7CiAJCQltdHJyX3VzYWdlX3RhYmxlW2ldID0gMDsKLQkJZWxzZSB7Ci0JCQlpZiAoc2l6ZSA8ICgweDEwMDAwMCA+PiBQQUdFX1NISUZUKSkgewotCQkJCS8qIGxlc3MgdGhhbiAxTUIgKi8KLQkJCQlmYWN0b3IgPSAnSyc7Ci0JCQkJc2l6ZSA8PD0gUEFHRV9TSElGVCAtIDEwOwotCQkJfSBlbHNlIHsKLQkJCQlmYWN0b3IgPSAnTSc7Ci0JCQkJc2l6ZSA+Pj0gMjAgLSBQQUdFX1NISUZUOwotCQkJfQotCQkJLyogUkVELVBFTjogYmFzZSBjYW4gYmUgPiAzMmJpdCAqLyAKLQkJCWxlbiArPSBzZXFfcHJpbnRmKHNlcSwgCi0JCQkJICAgInJlZyUwMmk6IGJhc2U9MHglMDZseDAwMCAoJTVsdU1CKSwgc2l6ZT0lNWx1JWNCLCBjb3VudD0lZDogJXNcbiIsCi0JCQkgICAgIGksIGJhc2UsIGJhc2UgPj4gKDIwIC0gUEFHRV9TSElGVCksIHNpemUsIGZhY3RvciwKLQkJCSAgICAgbXRycl91c2FnZV90YWJsZVtpXSwgbXRycl9hdHRyaWJfdG9fc3RyKHR5cGUpKTsKKwkJCWNvbnRpbnVlOwogCQl9CisJCWlmIChzaXplIDwgKDB4MTAwMDAwID4+IFBBR0VfU0hJRlQpKSB7CisJCQkvKiBsZXNzIHRoYW4gMU1CICovCisJCQlmYWN0b3IgPSAnSyc7CisJCQlzaXplIDw8PSBQQUdFX1NISUZUIC0gMTA7CisJCX0gZWxzZSB7CisJCQlmYWN0b3IgPSAnTSc7CisJCQlzaXplID4+PSAyMCAtIFBBR0VfU0hJRlQ7CisJCX0KKwkJLyogQmFzZSBjYW4gYmUgPiAzMmJpdCAqLworCQlsZW4gKz0gc2VxX3ByaW50ZihzZXEsICJyZWclMDJpOiBiYXNlPTB4JTA2bHgwMDAgIgorCQkJIiglNWx1TUIpLCBzaXplPSU1bHUlY0IsIGNvdW50PSVkOiAlc1xuIiwKKwkJCWksIGJhc2UsIGJhc2UgPj4gKDIwIC0gUEFHRV9TSElGVCksIHNpemUsCisJCQlmYWN0b3IsIG10cnJfdXNhZ2VfdGFibGVbaV0sCisJCQltdHJyX2F0dHJpYl90b19zdHIodHlwZSkpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQyMiw2ICs0NDAsNSBAQAogCXByb2NfY3JlYXRlKCJtdHJyIiwgU19JV1VTUiB8IFNfSVJVR08sIE5VTEwsICZtdHJyX2ZvcHMpOwogCXJldHVybiAwOwogfQotCiBhcmNoX2luaXRjYWxsKG10cnJfaWZfaW5pdCk7CiAjZW5kaWYJCQkvKiAgQ09ORklHX1BST0NfRlMgICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwppbmRleCA4ZmMyNDhiLi44NGU4M2RlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKQEAgLTI1LDQzICsyNSw0OSBAQAogICAgIE9wZXJhdGluZyBTeXN0ZW0gV3JpdGVyJ3MgR3VpZGUiIChJbnRlbCBkb2N1bWVudCBudW1iZXIgMjQyNjkyKSwKICAgICBzZWN0aW9uIDExLjExLjcKIAotICAgIFRoaXMgd2FzIGNsZWFuZWQgYW5kIG1hZGUgcmVhZGFibGUgYnkgUGF0cmljayBNb2NoZWwgPG1vY2hlbEBvc2RsLm9yZz4gCi0gICAgb24gNi03IE1hcmNoIDIwMDIuIAotICAgIFNvdXJjZTogSW50ZWwgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlIERldmVsb3BlcnMgTWFudWFsLCBWb2x1bWUgMzogCisgICAgVGhpcyB3YXMgY2xlYW5lZCBhbmQgbWFkZSByZWFkYWJsZSBieSBQYXRyaWNrIE1vY2hlbCA8bW9jaGVsQG9zZGwub3JnPgorICAgIG9uIDYtNyBNYXJjaCAyMDAyLgorICAgIFNvdXJjZTogSW50ZWwgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlIERldmVsb3BlcnMgTWFudWFsLCBWb2x1bWUgMzoKICAgICBTeXN0ZW0gUHJvZ3JhbW1pbmcgR3VpZGU7IFNlY3Rpb24gOS4xMS4gKDE5OTcgZWRpdGlvbiAtIFBQcm8pLgogKi8KIAorI2RlZmluZSBERUJVRworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4gLyogRklYTUU6IGt2bV9wYXJhLmggbmVlZHMgdGhpcyAqLworCisjaW5jbHVkZSA8bGludXgva3ZtX3BhcmEuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvc29ydC5oPgogCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL2t2bV9wYXJhLmg+CisKICNpbmNsdWRlICJtdHJyLmgiCiAKLXUzMiBudW1fdmFyX3JhbmdlcyA9IDA7Cit1MzIgbnVtX3Zhcl9yYW5nZXM7CiAKIHVuc2lnbmVkIGludCBtdHJyX3VzYWdlX3RhYmxlW01UUlJfTUFYX1ZBUl9SQU5HRVNdOwogc3RhdGljIERFRklORV9NVVRFWChtdHJyX211dGV4KTsKIAogdTY0IHNpemVfb3JfbWFzaywgc2l6ZV9hbmRfbWFzazsKK3N0YXRpYyBib29sIG10cnJfYXBzX2RlbGF5ZWRfaW5pdDsKIAotc3RhdGljIHN0cnVjdCBtdHJyX29wcyAqIG10cnJfb3BzW1g4Nl9WRU5ET1JfTlVNXSA9IHt9Oworc3RhdGljIHN0cnVjdCBtdHJyX29wcyAqbXRycl9vcHNbWDg2X1ZFTkRPUl9OVU1dOwogCi1zdHJ1Y3QgbXRycl9vcHMgKiBtdHJyX2lmID0gTlVMTDsKK3N0cnVjdCBtdHJyX29wcyAqbXRycl9pZjsKIAogc3RhdGljIHZvaWQgc2V0X210cnIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgbXRycl90eXBlIHR5cGUpOwogCi12b2lkIHNldF9tdHJyX29wcyhzdHJ1Y3QgbXRycl9vcHMgKiBvcHMpCit2b2lkIHNldF9tdHJyX29wcyhzdHJ1Y3QgbXRycl9vcHMgKm9wcykKIHsKIAlpZiAob3BzLT52ZW5kb3IgJiYgb3BzLT52ZW5kb3IgPCBYODZfVkVORE9SX05VTSkKIAkJbXRycl9vcHNbb3BzLT52ZW5kb3JdID0gb3BzOwpAQCAtNzIsMzAgKzc4LDM2IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAl1OCByZXY7Ci0JCi0JaWYgKChkZXYgPSBwY2lfZ2V0X2NsYXNzKFBDSV9DTEFTU19CUklER0VfSE9TVCA8PCA4LCBOVUxMKSkgIT0gTlVMTCkgewotCQkvKiBTZXJ2ZXJXb3JrcyBMRSBjaGlwc2V0cyA8IHJldiA2IGhhdmUgcHJvYmxlbXMgd2l0aCB3cml0ZS1jb21iaW5pbmcKLQkJICAgRG9uJ3QgYWxsb3cgaXQgYW5kIGxlYXZlIHJvb20gZm9yIG90aGVyIGNoaXBzZXRzIHRvIGJlIHRhZ2dlZCAqLworCisJZGV2ID0gcGNpX2dldF9jbGFzcyhQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgPDwgOCwgTlVMTCk7CisJaWYgKGRldiAhPSBOVUxMKSB7CisJCS8qCisJCSAqIFNlcnZlcldvcmtzIExFIGNoaXBzZXRzIDwgcmV2IDYgaGF2ZSBwcm9ibGVtcyB3aXRoCisJCSAqIHdyaXRlLWNvbWJpbmluZy4gRG9uJ3QgYWxsb3cgaXQgYW5kIGxlYXZlIHJvb20gZm9yIG90aGVyCisJCSAqIGNoaXBzZXRzIHRvIGJlIHRhZ2dlZAorCQkgKi8KIAkJaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MgJiYKIAkJICAgIGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfTEUpIHsKIAkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmcmV2KTsKIAkJCWlmIChyZXYgPD0gNSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIm10cnI6IFNlcnZlcndvcmtzIExFIHJldiA8IDYgZGV0ZWN0ZWQuIFdyaXRlLWNvbWJpbmluZyBkaXNhYmxlZC5cbiIpOworCQkJCXByX2luZm8oIm10cnI6IFNlcnZlcndvcmtzIExFIHJldiA8IDYgZGV0ZWN0ZWQuIFdyaXRlLWNvbWJpbmluZyBkaXNhYmxlZC5cbiIpOwogCQkJCXBjaV9kZXZfcHV0KGRldik7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCX0KLQkJLyogSW50ZWwgNDUwTlggZXJyYXRhICMgMjMuIE5vbiBhc2NlbmRpbmcgY2FjaGVsaW5lIGV2aWN0aW9ucyB0bwotCQkgICB3cml0ZSBjb21iaW5pbmcgbWVtb3J5IG1heSByZXN1bHRpbmcgaW4gZGF0YSBjb3JydXB0aW9uICovCisJCS8qCisJCSAqIEludGVsIDQ1ME5YIGVycmF0YSAjIDIzLiBOb24gYXNjZW5kaW5nIGNhY2hlbGluZSBldmljdGlvbnMgdG8KKwkJICogd3JpdGUgY29tYmluaW5nIG1lbW9yeSBtYXkgcmVzdWx0aW5nIGluIGRhdGEgY29ycnVwdGlvbgorCQkgKi8KIAkJaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwgJiYKIAkJICAgIGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTFOWCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAibXRycjogSW50ZWwgNDUwTlggTU1DIGRldGVjdGVkLiBXcml0ZS1jb21iaW5pbmcgZGlzYWJsZWQuXG4iKTsKKwkJCXByX2luZm8oIm10cnI6IEludGVsIDQ1ME5YIE1NQyBkZXRlY3RlZC4gV3JpdGUtY29tYmluaW5nIGRpc2FibGVkLlxuIik7CiAJCQlwY2lfZGV2X3B1dChkZXYpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcGNpX2Rldl9wdXQoZGV2KTsKLQl9CQkKLQlyZXR1cm4gKG10cnJfaWYtPmhhdmVfd3Jjb21iID8gbXRycl9pZi0+aGF2ZV93cmNvbWIoKSA6IDApOworCX0KKwlyZXR1cm4gbXRycl9pZi0+aGF2ZV93cmNvbWIgPyBtdHJyX2lmLT5oYXZlX3dyY29tYigpIDogMDsKIH0KIAogLyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHZhcmlhYmxlIE1UUlJzICAqLwpAQCAtMTAzLDEyICsxMTUsMTMgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGNvbmZpZyA9IDAsIGR1bW15OwogCi0JaWYgKHVzZV9pbnRlbCgpKSB7CisJaWYgKHVzZV9pbnRlbCgpKQogCQlyZG1zcihNU1JfTVRSUmNhcCwgY29uZmlnLCBkdW1teSk7Ci0JfSBlbHNlIGlmIChpc19jcHUoQU1EKSkKKwllbHNlIGlmIChpc19jcHUoQU1EKSkKIAkJY29uZmlnID0gMjsKIAllbHNlIGlmIChpc19jcHUoQ1lSSVgpIHx8IGlzX2NwdShDRU5UQVVSKSkKIAkJY29uZmlnID0gODsKKwogCW51bV92YXJfcmFuZ2VzID0gY29uZmlnICYgMHhmZjsKIH0KIApAQCAtMTMwLDEwICsxNDMsMTIgQEAKIAltdHJyX3R5cGUJc21wX3R5cGU7CiB9OwogCisvKioKKyAqIGlwaV9oYW5kbGVyIC0gU3luY2hyb25pc2F0aW9uIGhhbmRsZXIuIEV4ZWN1dGVkIGJ5ICJvdGhlciIgQ1BVcy4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KIHN0YXRpYyB2b2lkIGlwaV9oYW5kbGVyKHZvaWQgKmluZm8pCi0vKiAgW1NVTU1BUlldIFN5bmNocm9uaXNhdGlvbiBoYW5kbGVyLiBFeGVjdXRlZCBieSAib3RoZXIiIENQVXMuCi0gICAgW1JFVFVSTlNdIE5vdGhpbmcuCi0qLwogewogI2lmZGVmIENPTkZJR19TTVAKIAlzdHJ1Y3Qgc2V0X210cnJfZGF0YSAqZGF0YSA9IGluZm87CkBAIC0xNDIsMTggKzE1NywyMiBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCWF0b21pY19kZWMoJmRhdGEtPmNvdW50KTsKLQl3aGlsZSghYXRvbWljX3JlYWQoJmRhdGEtPmdhdGUpKQorCXdoaWxlICghYXRvbWljX3JlYWQoJmRhdGEtPmdhdGUpKQogCQljcHVfcmVsYXgoKTsKIAogCS8qICBUaGUgbWFzdGVyIGhhcyBjbGVhcmVkIG1lIHRvIGV4ZWN1dGUgICovCi0JaWYgKGRhdGEtPnNtcF9yZWcgIT0gfjBVKSAKLQkJbXRycl9pZi0+c2V0KGRhdGEtPnNtcF9yZWcsIGRhdGEtPnNtcF9iYXNlLCAKKwlpZiAoZGF0YS0+c21wX3JlZyAhPSB+MFUpIHsKKwkJbXRycl9pZi0+c2V0KGRhdGEtPnNtcF9yZWcsIGRhdGEtPnNtcF9iYXNlLAogCQkJICAgICBkYXRhLT5zbXBfc2l6ZSwgZGF0YS0+c21wX3R5cGUpOwotCWVsc2UKKwl9IGVsc2UgaWYgKG10cnJfYXBzX2RlbGF5ZWRfaW5pdCkgeworCQkvKgorCQkgKiBJbml0aWFsaXplIHRoZSBNVFJScyBpbmFkZGl0aW9uIHRvIHRoZSBzeW5jaHJvbmlzYXRpb24uCisJCSAqLwogCQltdHJyX2lmLT5zZXRfYWxsKCk7CisJfQogCiAJYXRvbWljX2RlYygmZGF0YS0+Y291bnQpOwotCXdoaWxlKGF0b21pY19yZWFkKCZkYXRhLT5nYXRlKSkKKwl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEtPmdhdGUpKQogCQljcHVfcmVsYXgoKTsKIAogCWF0b21pY19kZWMoJmRhdGEtPmNvdW50KTsKQEAgLTE2MSw3ICsxODAsOCBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHR5cGVzX2NvbXBhdGlibGUobXRycl90eXBlIHR5cGUxLCBtdHJyX3R5cGUgdHlwZTIpIHsKK3N0YXRpYyBpbmxpbmUgaW50IHR5cGVzX2NvbXBhdGlibGUobXRycl90eXBlIHR5cGUxLCBtdHJyX3R5cGUgdHlwZTIpCit7CiAJcmV0dXJuIHR5cGUxID09IE1UUlJfVFlQRV9VTkNBQ0hBQkxFIHx8CiAJICAgICAgIHR5cGUyID09IE1UUlJfVFlQRV9VTkNBQ0hBQkxFIHx8CiAJICAgICAgICh0eXBlMSA9PSBNVFJSX1RZUEVfV1JUSFJPVUdIICYmIHR5cGUyID09IE1UUlJfVFlQRV9XUkJBQ0spIHx8CkBAIC0xNzYsMTAgKzE5NiwxMCBAQAogICogQHR5cGU6CW10cnIgdHlwZQogICoKICAqIFRoaXMgaXMga2luZGEgdHJpY2t5LCBidXQgZm9ydHVuYXRlbHksIEludGVsIHNwZWxsZWQgaXQgb3V0IGZvciB1cyBjbGVhbmx5OgotICogCisgKgogICogMS4gU2VuZCBJUEkgdG8gZG8gdGhlIGZvbGxvd2luZzoKICAqIDIuIERpc2FibGUgSW50ZXJydXB0cwotICogMy4gV2FpdCBmb3IgYWxsIHByb2NzIHRvIGRvIHNvIAorICogMy4gV2FpdCBmb3IgYWxsIHByb2NzIHRvIGRvIHNvCiAgKiA0LiBFbnRlciBuby1maWxsIGNhY2hlIG1vZGUKICAqIDUuIEZsdXNoIGNhY2hlcwogICogNi4gQ2xlYXIgUEdFIGJpdApAQCAtMTg5LDI2ICsyMDksMjcgQEAKICAqIDEwLiBFbmFibGUgYWxsIHJhbmdlIHJlZ2lzdGVycwogICogMTEuIEZsdXNoIGFsbCBUTEJzIGFuZCBjYWNoZXMgYWdhaW4KICAqIDEyLiBFbnRlciBub3JtYWwgY2FjaGUgbW9kZSBhbmQgcmVlbmFibGUgY2FjaGluZwotICogMTMuIFNldCBQR0UgCisgKiAxMy4gU2V0IFBHRQogICogMTQuIFdhaXQgZm9yIGJ1ZGRpZXMgdG8gY2F0Y2ggdXAKICAqIDE1LiBFbmFibGUgaW50ZXJydXB0cy4KLSAqIAorICoKICAqIFdoYXQgZG9lcyB0aGF0IG1lYW4gZm9yIHVzPyBXZWxsLCBmaXJzdCB3ZSBzZXQgZGF0YS5jb3VudCB0byB0aGUgbnVtYmVyCiAgKiBvZiBDUFVzLiBBcyBlYWNoIENQVSBkaXNhYmxlcyBpbnRlcnJ1cHRzLCBpdCdsbCBkZWNyZW1lbnQgaXQgb25jZS4gV2Ugd2FpdAogICogdW50aWwgaXQgaGl0cyAwIGFuZCBwcm9jZWVkLiBXZSBzZXQgdGhlIGRhdGEuZ2F0ZSBmbGFnIGFuZCByZXNldCBkYXRhLmNvdW50LgotICogTWVhbndoaWxlLCB0aGV5IGFyZSB3YWl0aW5nIGZvciB0aGF0IGZsYWcgdG8gYmUgc2V0LiBPbmNlIGl0J3Mgc2V0LCBlYWNoIAotICogQ1BVIGdvZXMgdGhyb3VnaCB0aGUgdHJhbnNpdGlvbiBvZiB1cGRhdGluZyBNVFJScy4gVGhlIENQVSB2ZW5kb3JzIG1heSBlYWNoIGRvIGl0IAotICogZGlmZmVyZW50bHksIHNvIHdlIGNhbGwgbXRycl9pZi0+c2V0KCkgY2FsbGJhY2sgYW5kIGxldCB0aGVtIHRha2UgY2FyZSBvZiBpdC4KLSAqIFdoZW4gdGhleSdyZSBkb25lLCB0aGV5IGFnYWluIGRlY3JlbWVudCBkYXRhLT5jb3VudCBhbmQgd2FpdCBmb3IgZGF0YS5nYXRlIHRvIAotICogYmUgcmVzZXQuIAotICogV2hlbiB3ZSBmaW5pc2gsIHdlIHdhaXQgZm9yIGRhdGEuY291bnQgdG8gaGl0IDAgYW5kIHRvZ2dsZSB0aGUgZGF0YS5nYXRlIGZsYWcuCisgKiBNZWFud2hpbGUsIHRoZXkgYXJlIHdhaXRpbmcgZm9yIHRoYXQgZmxhZyB0byBiZSBzZXQuIE9uY2UgaXQncyBzZXQsIGVhY2gKKyAqIENQVSBnb2VzIHRocm91Z2ggdGhlIHRyYW5zaXRpb24gb2YgdXBkYXRpbmcgTVRSUnMuCisgKiBUaGUgQ1BVIHZlbmRvcnMgbWF5IGVhY2ggZG8gaXQgZGlmZmVyZW50bHksCisgKiBzbyB3ZSBjYWxsIG10cnJfaWYtPnNldCgpIGNhbGxiYWNrIGFuZCBsZXQgdGhlbSB0YWtlIGNhcmUgb2YgaXQuCisgKiBXaGVuIHRoZXkncmUgZG9uZSwgdGhleSBhZ2FpbiBkZWNyZW1lbnQgZGF0YS0+Y291bnQgYW5kIHdhaXQgZm9yIGRhdGEuZ2F0ZQorICogdG8gYmUgcmVzZXQuCisgKiBXaGVuIHdlIGZpbmlzaCwgd2Ugd2FpdCBmb3IgZGF0YS5jb3VudCB0byBoaXQgMCBhbmQgdG9nZ2xlIHRoZSBkYXRhLmdhdGUgZmxhZwogICogRXZlcnlvbmUgdGhlbiBlbmFibGVzIGludGVycnVwdHMgYW5kIHdlIGFsbCBjb250aW51ZSBvbi4KICAqCiAgKiBOb3RlIHRoYXQgdGhlIG1lY2hhbmlzbSBpcyB0aGUgc2FtZSBmb3IgVVAgc3lzdGVtcywgdG9vOyBhbGwgdGhlIFNNUCBzdHVmZgogICogYmVjb21lcyBub3BzLgogICovCi1zdGF0aWMgdm9pZCBzZXRfbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBtdHJyX3R5cGUgdHlwZSkKK3N0YXRpYyB2b2lkCitzZXRfbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgbXRycl90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHNldF9tdHJyX2RhdGEgZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjE4LDEyMSArMjM5LDEyNCBAQAogCWRhdGEuc21wX3NpemUgPSBzaXplOwogCWRhdGEuc21wX3R5cGUgPSB0eXBlOwogCWF0b21pY19zZXQoJmRhdGEuY291bnQsIG51bV9ib290aW5nX2NwdXMoKSAtIDEpOwotCS8qIG1ha2Ugc3VyZSBkYXRhLmNvdW50IGlzIHZpc2libGUgYmVmb3JlIHVubGVhc2hpbmcgb3RoZXIgQ1BVcyAqLwotCXNtcF93bWIoKTsKLQlhdG9taWNfc2V0KCZkYXRhLmdhdGUsMCk7CiAKLQkvKiAgU3RhcnQgdGhlIGJhbGwgcm9sbGluZyBvbiBvdGhlciBDUFVzICAqLworCS8qIE1ha2Ugc3VyZSBkYXRhLmNvdW50IGlzIHZpc2libGUgYmVmb3JlIHVubGVhc2hpbmcgb3RoZXIgQ1BVcyAqLworCXNtcF93bWIoKTsKKwlhdG9taWNfc2V0KCZkYXRhLmdhdGUsIDApOworCisJLyogU3RhcnQgdGhlIGJhbGwgcm9sbGluZyBvbiBvdGhlciBDUFVzICovCiAJaWYgKHNtcF9jYWxsX2Z1bmN0aW9uKGlwaV9oYW5kbGVyLCAmZGF0YSwgMCkgIT0gMCkKIAkJcGFuaWMoIm10cnI6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBvdGhlciBDUFVzXG4iKTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCXdoaWxlKGF0b21pY19yZWFkKCZkYXRhLmNvdW50KSkKKwl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuY291bnQpKQogCQljcHVfcmVsYXgoKTsKIAotCS8qIG9rLCByZXNldCBjb3VudCBhbmQgdG9nZ2xlIGdhdGUgKi8KKwkvKiBPaywgcmVzZXQgY291bnQgYW5kIHRvZ2dsZSBnYXRlICovCiAJYXRvbWljX3NldCgmZGF0YS5jb3VudCwgbnVtX2Jvb3RpbmdfY3B1cygpIC0gMSk7CiAJc21wX3dtYigpOwotCWF0b21pY19zZXQoJmRhdGEuZ2F0ZSwxKTsKKwlhdG9taWNfc2V0KCZkYXRhLmdhdGUsIDEpOwogCi0JLyogZG8gb3VyIE1UUlIgYnVzaW5lc3MgKi8KKwkvKiBEbyBvdXIgTVRSUiBidXNpbmVzcyAqLwogCi0JLyogSEFDSyEKKwkvKgorCSAqIEhBQ0shCiAJICogV2UgdXNlIHRoaXMgc2FtZSBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBtdHJycyBvbiBib290LgogCSAqIFRoZSBzdGF0ZSBvZiB0aGUgYm9vdCBjcHUncyBtdHJycyBoYXMgYmVlbiBzYXZlZCwgYW5kIHdlIHdhbnQKLQkgKiB0byByZXBsaWNhdGUgYWNyb3NzIGFsbCB0aGUgQVBzLiAKKwkgKiB0byByZXBsaWNhdGUgYWNyb3NzIGFsbCB0aGUgQVBzLgogCSAqIElmIHdlJ3JlIGRvaW5nIHRoYXQgQHJlZyBpcyBzZXQgdG8gc29tZXRoaW5nIHNwZWNpYWwuLi4KIAkgKi8KLQlpZiAocmVnICE9IH4wVSkgCi0JCW10cnJfaWYtPnNldChyZWcsYmFzZSxzaXplLHR5cGUpOworCWlmIChyZWcgIT0gfjBVKQorCQltdHJyX2lmLT5zZXQocmVnLCBiYXNlLCBzaXplLCB0eXBlKTsKKwllbHNlIGlmICghbXRycl9hcHNfZGVsYXllZF9pbml0KQorCQltdHJyX2lmLT5zZXRfYWxsKCk7CiAKLQkvKiB3YWl0IGZvciB0aGUgb3RoZXJzICovCi0Jd2hpbGUoYXRvbWljX3JlYWQoJmRhdGEuY291bnQpKQorCS8qIFdhaXQgZm9yIHRoZSBvdGhlcnMgKi8KKwl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuY291bnQpKQogCQljcHVfcmVsYXgoKTsKIAogCWF0b21pY19zZXQoJmRhdGEuY291bnQsIG51bV9ib290aW5nX2NwdXMoKSAtIDEpOwogCXNtcF93bWIoKTsKLQlhdG9taWNfc2V0KCZkYXRhLmdhdGUsMCk7CisJYXRvbWljX3NldCgmZGF0YS5nYXRlLCAwKTsKIAogCS8qCiAJICogV2FpdCBoZXJlIGZvciBldmVyeW9uZSB0byBoYXZlIHNlZW4gdGhlIGdhdGUgY2hhbmdlCiAJICogU28gd2UncmUgdGhlIGxhc3Qgb25lcyB0byB0b3VjaCAnZGF0YScKIAkgKi8KLQl3aGlsZShhdG9taWNfcmVhZCgmZGF0YS5jb3VudCkpCisJd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLmNvdW50KSkKIAkJY3B1X3JlbGF4KCk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIC8qKgotICoJbXRycl9hZGRfcGFnZSAtIEFkZCBhIG1lbW9yeSB0eXBlIHJlZ2lvbgotICoJQGJhc2U6IFBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiByZWdpb24gaW4gcGFnZXMgKGluIHVuaXRzIG9mIDQga0IhKQotICoJQHNpemU6IFBoeXNpY2FsIHNpemUgb2YgcmVnaW9uIGluIHBhZ2VzICg0IGtCKQotICoJQHR5cGU6IFR5cGUgb2YgTVRSUiBkZXNpcmVkCi0gKglAaW5jcmVtZW50OiBJZiB0aGlzIGlzIHRydWUgZG8gdXNhZ2UgY291bnRpbmcgb24gdGhlIHJlZ2lvbgorICogbXRycl9hZGRfcGFnZSAtIEFkZCBhIG1lbW9yeSB0eXBlIHJlZ2lvbgorICogQGJhc2U6IFBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiByZWdpb24gaW4gcGFnZXMgKGluIHVuaXRzIG9mIDQga0IhKQorICogQHNpemU6IFBoeXNpY2FsIHNpemUgb2YgcmVnaW9uIGluIHBhZ2VzICg0IGtCKQorICogQHR5cGU6IFR5cGUgb2YgTVRSUiBkZXNpcmVkCisgKiBAaW5jcmVtZW50OiBJZiB0aGlzIGlzIHRydWUgZG8gdXNhZ2UgY291bnRpbmcgb24gdGhlIHJlZ2lvbgogICoKLSAqCU1lbW9yeSB0eXBlIHJlZ2lvbiByZWdpc3RlcnMgY29udHJvbCB0aGUgY2FjaGluZyBvbiBuZXdlciBJbnRlbCBhbmQKLSAqCW5vbiBJbnRlbCBwcm9jZXNzb3JzLiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBkcml2ZXJzIHRvIHJlcXVlc3QgYW4KLSAqCU1UUlIgaXMgYWRkZWQuIFRoZSBkZXRhaWxzIGFuZCBoYXJkd2FyZSBzcGVjaWZpY3Mgb2YgZWFjaCBwcm9jZXNzb3IncwotICoJaW1wbGVtZW50YXRpb24gYXJlIGhpZGRlbiBmcm9tIHRoZSBjYWxsZXIsIGJ1dCBuZXZlcnRoZWxlc3MgdGhlIAotICoJY2FsbGVyIHNob3VsZCBleHBlY3QgdG8gbmVlZCB0byBwcm92aWRlIGEgcG93ZXIgb2YgdHdvIHNpemUgb24gYW4KLSAqCWVxdWl2YWxlbnQgcG93ZXIgb2YgdHdvIGJvdW5kYXJ5LgorICogTWVtb3J5IHR5cGUgcmVnaW9uIHJlZ2lzdGVycyBjb250cm9sIHRoZSBjYWNoaW5nIG9uIG5ld2VyIEludGVsIGFuZAorICogbm9uIEludGVsIHByb2Nlc3NvcnMuIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGRyaXZlcnMgdG8gcmVxdWVzdCBhbgorICogTVRSUiBpcyBhZGRlZC4gVGhlIGRldGFpbHMgYW5kIGhhcmR3YXJlIHNwZWNpZmljcyBvZiBlYWNoIHByb2Nlc3NvcidzCisgKiBpbXBsZW1lbnRhdGlvbiBhcmUgaGlkZGVuIGZyb20gdGhlIGNhbGxlciwgYnV0IG5ldmVydGhlbGVzcyB0aGUKKyAqIGNhbGxlciBzaG91bGQgZXhwZWN0IHRvIG5lZWQgdG8gcHJvdmlkZSBhIHBvd2VyIG9mIHR3byBzaXplIG9uIGFuCisgKiBlcXVpdmFsZW50IHBvd2VyIG9mIHR3byBib3VuZGFyeS4KICAqCi0gKglJZiB0aGUgcmVnaW9uIGNhbm5vdCBiZSBhZGRlZCBlaXRoZXIgYmVjYXVzZSBhbGwgcmVnaW9ucyBhcmUgaW4gdXNlCi0gKglvciB0aGUgQ1BVIGNhbm5vdCBzdXBwb3J0IGl0IGEgbmVnYXRpdmUgdmFsdWUgaXMgcmV0dXJuZWQuIE9uIHN1Y2Nlc3MKLSAqCXRoZSByZWdpc3RlciBudW1iZXIgZm9yIHRoaXMgZW50cnkgaXMgcmV0dXJuZWQsIGJ1dCBzaG91bGQgYmUgdHJlYXRlZAotICoJYXMgYSBjb29raWUgb25seS4KKyAqIElmIHRoZSByZWdpb24gY2Fubm90IGJlIGFkZGVkIGVpdGhlciBiZWNhdXNlIGFsbCByZWdpb25zIGFyZSBpbiB1c2UKKyAqIG9yIHRoZSBDUFUgY2Fubm90IHN1cHBvcnQgaXQgYSBuZWdhdGl2ZSB2YWx1ZSBpcyByZXR1cm5lZC4gT24gc3VjY2VzcworICogdGhlIHJlZ2lzdGVyIG51bWJlciBmb3IgdGhpcyBlbnRyeSBpcyByZXR1cm5lZCwgYnV0IHNob3VsZCBiZSB0cmVhdGVkCisgKiBhcyBhIGNvb2tpZSBvbmx5LgogICoKLSAqCU9uIGEgbXVsdGlwcm9jZXNzb3IgbWFjaGluZSB0aGUgY2hhbmdlcyBhcmUgbWFkZSB0byBhbGwgcHJvY2Vzc29ycy4KLSAqCVRoaXMgaXMgcmVxdWlyZWQgb24geDg2IGJ5IHRoZSBJbnRlbCBwcm9jZXNzb3JzLgorICogT24gYSBtdWx0aXByb2Nlc3NvciBtYWNoaW5lIHRoZSBjaGFuZ2VzIGFyZSBtYWRlIHRvIGFsbCBwcm9jZXNzb3JzLgorICogVGhpcyBpcyByZXF1aXJlZCBvbiB4ODYgYnkgdGhlIEludGVsIHByb2Nlc3NvcnMuCiAgKgotICoJVGhlIGF2YWlsYWJsZSB0eXBlcyBhcmUKKyAqIFRoZSBhdmFpbGFibGUgdHlwZXMgYXJlCiAgKgotICoJJU1UUlJfVFlQRV9VTkNBQ0hBQkxFCS0JTm8gY2FjaGluZworICogJU1UUlJfVFlQRV9VTkNBQ0hBQkxFIC0gTm8gY2FjaGluZwogICoKLSAqCSVNVFJSX1RZUEVfV1JCQUNLCS0JV3JpdGUgZGF0YSBiYWNrIGluIGJ1cnN0cyB3aGVuZXZlcgorICogJU1UUlJfVFlQRV9XUkJBQ0sgLSBXcml0ZSBkYXRhIGJhY2sgaW4gYnVyc3RzIHdoZW5ldmVyCiAgKgotICoJJU1UUlJfVFlQRV9XUkNPTUIJLQlXcml0ZSBkYXRhIGJhY2sgc29vbiBidXQgYWxsb3cgYnVyc3RzCisgKiAlTVRSUl9UWVBFX1dSQ09NQiAtIFdyaXRlIGRhdGEgYmFjayBzb29uIGJ1dCBhbGxvdyBidXJzdHMKICAqCi0gKgklTVRSUl9UWVBFX1dSVEhST1VHSAktCUNhY2hlIHJlYWRzIGJ1dCBub3Qgd3JpdGVzCisgKiAlTVRSUl9UWVBFX1dSVEhST1VHSCAtIENhY2hlIHJlYWRzIGJ1dCBub3Qgd3JpdGVzCiAgKgotICoJQlVHUzogTmVlZHMgYSBxdWlldCBmbGFnIGZvciB0aGUgY2FzZXMgd2hlcmUgZHJpdmVycyBkbyBub3QgbWluZAotICoJZmFpbHVyZXMgYW5kIGRvIG5vdCB3aXNoIHN5c3RlbSBsb2cgbWVzc2FnZXMgdG8gYmUgc2VudC4KKyAqIEJVR1M6IE5lZWRzIGEgcXVpZXQgZmxhZyBmb3IgdGhlIGNhc2VzIHdoZXJlIGRyaXZlcnMgZG8gbm90IG1pbmQKKyAqIGZhaWx1cmVzIGFuZCBkbyBub3Qgd2lzaCBzeXN0ZW0gbG9nIG1lc3NhZ2VzIHRvIGJlIHNlbnQuCiAgKi8KLQotaW50IG10cnJfYWRkX3BhZ2UodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsIAoraW50IG10cnJfYWRkX3BhZ2UodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCSAgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wgaW5jcmVtZW50KQogeworCXVuc2lnbmVkIGxvbmcgbGJhc2UsIGxzaXplOwogCWludCBpLCByZXBsYWNlLCBlcnJvcjsKIAltdHJyX3R5cGUgbHR5cGU7Ci0JdW5zaWduZWQgbG9uZyBsYmFzZSwgbHNpemU7CiAKIAlpZiAoIW10cnJfaWYpCiAJCXJldHVybiAtRU5YSU87Ci0JCQotCWlmICgoZXJyb3IgPSBtdHJyX2lmLT52YWxpZGF0ZV9hZGRfcGFnZShiYXNlLHNpemUsdHlwZSkpKQorCisJZXJyb3IgPSBtdHJyX2lmLT52YWxpZGF0ZV9hZGRfcGFnZShiYXNlLCBzaXplLCB0eXBlKTsKKwlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogCWlmICh0eXBlID49IE1UUlJfTlVNX1RZUEVTKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm10cnI6IHR5cGU6ICV1IGludmFsaWRcbiIsIHR5cGUpOworCQlwcl93YXJuaW5nKCJtdHJyOiB0eXBlOiAldSBpbnZhbGlkXG4iLCB0eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogIElmIHRoZSB0eXBlIGlzIFdDLCBjaGVjayB0aGF0IHRoaXMgcHJvY2Vzc29yIHN1cHBvcnRzIGl0ICAqLworCS8qIElmIHRoZSB0eXBlIGlzIFdDLCBjaGVjayB0aGF0IHRoaXMgcHJvY2Vzc29yIHN1cHBvcnRzIGl0ICovCiAJaWYgKCh0eXBlID09IE1UUlJfVFlQRV9XUkNPTUIpICYmICFoYXZlX3dyY29tYigpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJtdHJyOiB5b3VyIHByb2Nlc3NvciBkb2Vzbid0IHN1cHBvcnQgd3JpdGUtY29tYmluaW5nXG4iKTsKKwkJcHJfd2FybmluZygibXRycjogeW91ciBwcm9jZXNzb3IgZG9lc24ndCBzdXBwb3J0IHdyaXRlLWNvbWJpbmluZ1xuIik7CiAJCXJldHVybiAtRU5PU1lTOwogCX0KIAogCWlmICghc2l6ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtdHJyOiB6ZXJvIHNpemVkIHJlcXVlc3RcbiIpOworCQlwcl93YXJuaW5nKCJtdHJyOiB6ZXJvIHNpemVkIHJlcXVlc3RcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoYmFzZSAmIHNpemVfb3JfbWFzayB8fCBzaXplICYgc2l6ZV9vcl9tYXNrKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm10cnI6IGJhc2Ugb3Igc2l6ZSBleGNlZWRzIHRoZSBNVFJSIHdpZHRoXG4iKTsKKwkJcHJfd2FybmluZygibXRycjogYmFzZSBvciBzaXplIGV4Y2VlZHMgdGhlIE1UUlIgd2lkdGhcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTM0MSwzNiArMzY1LDQwIEBACiAKIAkvKiBObyBDUFUgaG90cGx1ZyB3aGVuIHdlIGNoYW5nZSBNVFJSIGVudHJpZXMgKi8KIAlnZXRfb25saW5lX2NwdXMoKTsKLQkvKiAgU2VhcmNoIGZvciBleGlzdGluZyBNVFJSICAqLworCisJLyogU2VhcmNoIGZvciBleGlzdGluZyBNVFJSICAqLwogCW11dGV4X2xvY2soJm10cnJfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgKytpKSB7CiAJCW10cnJfaWYtPmdldChpLCAmbGJhc2UsICZsc2l6ZSwgJmx0eXBlKTsKLQkJaWYgKCFsc2l6ZSB8fCBiYXNlID4gbGJhc2UgKyBsc2l6ZSAtIDEgfHwgYmFzZSArIHNpemUgLSAxIDwgbGJhc2UpCisJCWlmICghbHNpemUgfHwgYmFzZSA+IGxiYXNlICsgbHNpemUgLSAxIHx8CisJCSAgICBiYXNlICsgc2l6ZSAtIDEgPCBsYmFzZSkKIAkJCWNvbnRpbnVlOwotCQkvKiAgQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoZXJlIGlzIHNvbWUga2luZCBvZiBvdmVybGFwL2VuY2xvc3VyZSAgKi8KKwkJLyoKKwkJICogQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoZXJlIGlzIHNvbWUga2luZCBvZgorCQkgKiBvdmVybGFwL2VuY2xvc3VyZQorCQkgKi8KIAkJaWYgKGJhc2UgPCBsYmFzZSB8fCBiYXNlICsgc2l6ZSAtIDEgPiBsYmFzZSArIGxzaXplIC0gMSkgewotCQkJaWYgKGJhc2UgPD0gbGJhc2UgJiYgYmFzZSArIHNpemUgLSAxID49IGxiYXNlICsgbHNpemUgLSAxKSB7CisJCQlpZiAoYmFzZSA8PSBsYmFzZSAmJgorCQkJICAgIGJhc2UgKyBzaXplIC0gMSA+PSBsYmFzZSArIGxzaXplIC0gMSkgewogCQkJCS8qICBOZXcgcmVnaW9uIGVuY2xvc2VzIGFuIGV4aXN0aW5nIHJlZ2lvbiAgKi8KIAkJCQlpZiAodHlwZSA9PSBsdHlwZSkgewogCQkJCQlyZXBsYWNlID0gcmVwbGFjZSA9PSAtMSA/IGkgOiAtMjsKIAkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKHR5cGVzX2NvbXBhdGlibGUodHlwZSwgbHR5cGUpKQorCQkJCX0gZWxzZSBpZiAodHlwZXNfY29tcGF0aWJsZSh0eXBlLCBsdHlwZSkpCiAJCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJtdHJyOiAweCVseDAwMCwweCVseDAwMCBvdmVybGFwcyBleGlzdGluZyIKLQkJCSAgICAgICAiIDB4JWx4MDAwLDB4JWx4MDAwXG4iLCBiYXNlLCBzaXplLCBsYmFzZSwKLQkJCSAgICAgICBsc2l6ZSk7CisJCQlwcl93YXJuaW5nKCJtdHJyOiAweCVseDAwMCwweCVseDAwMCBvdmVybGFwcyBleGlzdGluZyIKKwkJCQkiIDB4JWx4MDAwLDB4JWx4MDAwXG4iLCBiYXNlLCBzaXplLCBsYmFzZSwKKwkJCQlsc2l6ZSk7CiAJCQlnb3RvIG91dDsKIAkJfQotCQkvKiAgTmV3IHJlZ2lvbiBpcyBlbmNsb3NlZCBieSBhbiBleGlzdGluZyByZWdpb24gICovCisJCS8qIE5ldyByZWdpb24gaXMgZW5jbG9zZWQgYnkgYW4gZXhpc3RpbmcgcmVnaW9uICovCiAJCWlmIChsdHlwZSAhPSB0eXBlKSB7CiAJCQlpZiAodHlwZXNfY29tcGF0aWJsZSh0eXBlLCBsdHlwZSkpCiAJCQkJY29udGludWU7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAibXRycjogdHlwZSBtaXNtYXRjaCBmb3IgJWx4MDAwLCVseDAwMCBvbGQ6ICVzIG5ldzogJXNcbiIsCi0JCQkgICAgIGJhc2UsIHNpemUsIG10cnJfYXR0cmliX3RvX3N0cihsdHlwZSksCi0JCQkgICAgIG10cnJfYXR0cmliX3RvX3N0cih0eXBlKSk7CisJCQlwcl93YXJuaW5nKCJtdHJyOiB0eXBlIG1pc21hdGNoIGZvciAlbHgwMDAsJWx4MDAwIG9sZDogJXMgbmV3OiAlc1xuIiwKKwkJCQliYXNlLCBzaXplLCBtdHJyX2F0dHJpYl90b19zdHIobHR5cGUpLAorCQkJCW10cnJfYXR0cmliX3RvX3N0cih0eXBlKSk7CiAJCQlnb3RvIG91dDsKIAkJfQogCQlpZiAoaW5jcmVtZW50KQpAQCAtMzc4LDcgKzQwNiw3IEBACiAJCWVycm9yID0gaTsKIAkJZ290byBvdXQ7CiAJfQotCS8qICBTZWFyY2ggZm9yIGFuIGVtcHR5IE1UUlIgICovCisJLyogU2VhcmNoIGZvciBhbiBlbXB0eSBNVFJSICovCiAJaSA9IG10cnJfaWYtPmdldF9mcmVlX3JlZ2lvbihiYXNlLCBzaXplLCByZXBsYWNlKTsKIAlpZiAoaSA+PSAwKSB7CiAJCXNldF9tdHJyKGksIGJhc2UsIHNpemUsIHR5cGUpOwpAQCAtMzkzLDggKzQyMSw5IEBACiAJCQkJbXRycl91c2FnZV90YWJsZVtyZXBsYWNlXSA9IDA7CiAJCQl9CiAJCX0KLQl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fSU5GTyAibXRycjogbm8gbW9yZSBNVFJScyBhdmFpbGFibGVcbiIpOworCX0gZWxzZSB7CisJCXByX2luZm8oIm10cnI6IG5vIG1vcmUgTVRSUnMgYXZhaWxhYmxlXG4iKTsKKwl9CiAJZXJyb3IgPSBpOwogIG91dDoKIAltdXRleF91bmxvY2soJm10cnJfbXV0ZXgpOwpAQCAtNDA1LDEwICs0MzQsOCBAQAogc3RhdGljIGludCBtdHJyX2NoZWNrKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCWlmICgoYmFzZSAmIChQQUdFX1NJWkUgLSAxKSkgfHwgKHNpemUgJiAoUEFHRV9TSVpFIC0gMSkpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJtdHJyOiBzaXplIGFuZCBiYXNlIG11c3QgYmUgbXVsdGlwbGVzIG9mIDQga2lCXG4iKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCSJtdHJyOiBzaXplOiAweCVseCAgYmFzZTogMHglbHhcbiIsIHNpemUsIGJhc2UpOworCQlwcl93YXJuaW5nKCJtdHJyOiBzaXplIGFuZCBiYXNlIG11c3QgYmUgbXVsdGlwbGVzIG9mIDQga2lCXG4iKTsKKwkJcHJfZGVidWcoIm10cnI6IHNpemU6IDB4JWx4ICBiYXNlOiAweCVseFxuIiwgc2l6ZSwgYmFzZSk7CiAJCWR1bXBfc3RhY2soKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTQxNiw2NiArNDQzLDY0IEBACiB9CiAKIC8qKgotICoJbXRycl9hZGQgLSBBZGQgYSBtZW1vcnkgdHlwZSByZWdpb24KLSAqCUBiYXNlOiBQaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2YgcmVnaW9uCi0gKglAc2l6ZTogUGh5c2ljYWwgc2l6ZSBvZiByZWdpb24KLSAqCUB0eXBlOiBUeXBlIG9mIE1UUlIgZGVzaXJlZAotICoJQGluY3JlbWVudDogSWYgdGhpcyBpcyB0cnVlIGRvIHVzYWdlIGNvdW50aW5nIG9uIHRoZSByZWdpb24KKyAqIG10cnJfYWRkIC0gQWRkIGEgbWVtb3J5IHR5cGUgcmVnaW9uCisgKiBAYmFzZTogUGh5c2ljYWwgYmFzZSBhZGRyZXNzIG9mIHJlZ2lvbgorICogQHNpemU6IFBoeXNpY2FsIHNpemUgb2YgcmVnaW9uCisgKiBAdHlwZTogVHlwZSBvZiBNVFJSIGRlc2lyZWQKKyAqIEBpbmNyZW1lbnQ6IElmIHRoaXMgaXMgdHJ1ZSBkbyB1c2FnZSBjb3VudGluZyBvbiB0aGUgcmVnaW9uCiAgKgotICoJTWVtb3J5IHR5cGUgcmVnaW9uIHJlZ2lzdGVycyBjb250cm9sIHRoZSBjYWNoaW5nIG9uIG5ld2VyIEludGVsIGFuZAotICoJbm9uIEludGVsIHByb2Nlc3NvcnMuIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGRyaXZlcnMgdG8gcmVxdWVzdCBhbgotICoJTVRSUiBpcyBhZGRlZC4gVGhlIGRldGFpbHMgYW5kIGhhcmR3YXJlIHNwZWNpZmljcyBvZiBlYWNoIHByb2Nlc3NvcidzCi0gKglpbXBsZW1lbnRhdGlvbiBhcmUgaGlkZGVuIGZyb20gdGhlIGNhbGxlciwgYnV0IG5ldmVydGhlbGVzcyB0aGUgCi0gKgljYWxsZXIgc2hvdWxkIGV4cGVjdCB0byBuZWVkIHRvIHByb3ZpZGUgYSBwb3dlciBvZiB0d28gc2l6ZSBvbiBhbgotICoJZXF1aXZhbGVudCBwb3dlciBvZiB0d28gYm91bmRhcnkuCisgKiBNZW1vcnkgdHlwZSByZWdpb24gcmVnaXN0ZXJzIGNvbnRyb2wgdGhlIGNhY2hpbmcgb24gbmV3ZXIgSW50ZWwgYW5kCisgKiBub24gSW50ZWwgcHJvY2Vzc29ycy4gVGhpcyBmdW5jdGlvbiBhbGxvd3MgZHJpdmVycyB0byByZXF1ZXN0IGFuCisgKiBNVFJSIGlzIGFkZGVkLiBUaGUgZGV0YWlscyBhbmQgaGFyZHdhcmUgc3BlY2lmaWNzIG9mIGVhY2ggcHJvY2Vzc29yJ3MKKyAqIGltcGxlbWVudGF0aW9uIGFyZSBoaWRkZW4gZnJvbSB0aGUgY2FsbGVyLCBidXQgbmV2ZXJ0aGVsZXNzIHRoZQorICogY2FsbGVyIHNob3VsZCBleHBlY3QgdG8gbmVlZCB0byBwcm92aWRlIGEgcG93ZXIgb2YgdHdvIHNpemUgb24gYW4KKyAqIGVxdWl2YWxlbnQgcG93ZXIgb2YgdHdvIGJvdW5kYXJ5LgogICoKLSAqCUlmIHRoZSByZWdpb24gY2Fubm90IGJlIGFkZGVkIGVpdGhlciBiZWNhdXNlIGFsbCByZWdpb25zIGFyZSBpbiB1c2UKLSAqCW9yIHRoZSBDUFUgY2Fubm90IHN1cHBvcnQgaXQgYSBuZWdhdGl2ZSB2YWx1ZSBpcyByZXR1cm5lZC4gT24gc3VjY2VzcwotICoJdGhlIHJlZ2lzdGVyIG51bWJlciBmb3IgdGhpcyBlbnRyeSBpcyByZXR1cm5lZCwgYnV0IHNob3VsZCBiZSB0cmVhdGVkCi0gKglhcyBhIGNvb2tpZSBvbmx5LgorICogSWYgdGhlIHJlZ2lvbiBjYW5ub3QgYmUgYWRkZWQgZWl0aGVyIGJlY2F1c2UgYWxsIHJlZ2lvbnMgYXJlIGluIHVzZQorICogb3IgdGhlIENQVSBjYW5ub3Qgc3VwcG9ydCBpdCBhIG5lZ2F0aXZlIHZhbHVlIGlzIHJldHVybmVkLiBPbiBzdWNjZXNzCisgKiB0aGUgcmVnaXN0ZXIgbnVtYmVyIGZvciB0aGlzIGVudHJ5IGlzIHJldHVybmVkLCBidXQgc2hvdWxkIGJlIHRyZWF0ZWQKKyAqIGFzIGEgY29va2llIG9ubHkuCiAgKgotICoJT24gYSBtdWx0aXByb2Nlc3NvciBtYWNoaW5lIHRoZSBjaGFuZ2VzIGFyZSBtYWRlIHRvIGFsbCBwcm9jZXNzb3JzLgotICoJVGhpcyBpcyByZXF1aXJlZCBvbiB4ODYgYnkgdGhlIEludGVsIHByb2Nlc3NvcnMuCisgKiBPbiBhIG11bHRpcHJvY2Vzc29yIG1hY2hpbmUgdGhlIGNoYW5nZXMgYXJlIG1hZGUgdG8gYWxsIHByb2Nlc3NvcnMuCisgKiBUaGlzIGlzIHJlcXVpcmVkIG9uIHg4NiBieSB0aGUgSW50ZWwgcHJvY2Vzc29ycy4KICAqCi0gKglUaGUgYXZhaWxhYmxlIHR5cGVzIGFyZQorICogVGhlIGF2YWlsYWJsZSB0eXBlcyBhcmUKICAqCi0gKgklTVRSUl9UWVBFX1VOQ0FDSEFCTEUJLQlObyBjYWNoaW5nCisgKiAlTVRSUl9UWVBFX1VOQ0FDSEFCTEUgLSBObyBjYWNoaW5nCiAgKgotICoJJU1UUlJfVFlQRV9XUkJBQ0sJLQlXcml0ZSBkYXRhIGJhY2sgaW4gYnVyc3RzIHdoZW5ldmVyCisgKiAlTVRSUl9UWVBFX1dSQkFDSyAtIFdyaXRlIGRhdGEgYmFjayBpbiBidXJzdHMgd2hlbmV2ZXIKICAqCi0gKgklTVRSUl9UWVBFX1dSQ09NQgktCVdyaXRlIGRhdGEgYmFjayBzb29uIGJ1dCBhbGxvdyBidXJzdHMKKyAqICVNVFJSX1RZUEVfV1JDT01CIC0gV3JpdGUgZGF0YSBiYWNrIHNvb24gYnV0IGFsbG93IGJ1cnN0cwogICoKLSAqCSVNVFJSX1RZUEVfV1JUSFJPVUdICS0JQ2FjaGUgcmVhZHMgYnV0IG5vdCB3cml0ZXMKKyAqICVNVFJSX1RZUEVfV1JUSFJPVUdIIC0gQ2FjaGUgcmVhZHMgYnV0IG5vdCB3cml0ZXMKICAqCi0gKglCVUdTOiBOZWVkcyBhIHF1aWV0IGZsYWcgZm9yIHRoZSBjYXNlcyB3aGVyZSBkcml2ZXJzIGRvIG5vdCBtaW5kCi0gKglmYWlsdXJlcyBhbmQgZG8gbm90IHdpc2ggc3lzdGVtIGxvZyBtZXNzYWdlcyB0byBiZSBzZW50LgorICogQlVHUzogTmVlZHMgYSBxdWlldCBmbGFnIGZvciB0aGUgY2FzZXMgd2hlcmUgZHJpdmVycyBkbyBub3QgbWluZAorICogZmFpbHVyZXMgYW5kIGRvIG5vdCB3aXNoIHN5c3RlbSBsb2cgbWVzc2FnZXMgdG8gYmUgc2VudC4KICAqLwotCi1pbnQKLW10cnJfYWRkKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkgYm9vbCBpbmNyZW1lbnQpCitpbnQgbXRycl9hZGQodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCB0eXBlLAorCSAgICAgYm9vbCBpbmNyZW1lbnQpCiB7CiAJaWYgKG10cnJfY2hlY2soYmFzZSwgc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBtdHJyX2FkZF9wYWdlKGJhc2UgPj4gUEFHRV9TSElGVCwgc2l6ZSA+PiBQQUdFX1NISUZULCB0eXBlLAogCQkJICAgICBpbmNyZW1lbnQpOwogfQorRVhQT1JUX1NZTUJPTChtdHJyX2FkZCk7CiAKIC8qKgotICoJbXRycl9kZWxfcGFnZSAtIGRlbGV0ZSBhIG1lbW9yeSB0eXBlIHJlZ2lvbgotICoJQHJlZzogUmVnaXN0ZXIgcmV0dXJuZWQgYnkgbXRycl9hZGQKLSAqCUBiYXNlOiBQaHlzaWNhbCBiYXNlIGFkZHJlc3MKLSAqCUBzaXplOiBTaXplIG9mIHJlZ2lvbgorICogbXRycl9kZWxfcGFnZSAtIGRlbGV0ZSBhIG1lbW9yeSB0eXBlIHJlZ2lvbgorICogQHJlZzogUmVnaXN0ZXIgcmV0dXJuZWQgYnkgbXRycl9hZGQKKyAqIEBiYXNlOiBQaHlzaWNhbCBiYXNlIGFkZHJlc3MKKyAqIEBzaXplOiBTaXplIG9mIHJlZ2lvbgogICoKLSAqCUlmIHJlZ2lzdGVyIGlzIHN1cHBsaWVkIHRoZW4gYmFzZSBhbmQgc2l6ZSBhcmUgaWdub3JlZC4gVGhpcyBpcwotICoJaG93IGRyaXZlcnMgc2hvdWxkIGNhbGwgaXQuCisgKiBJZiByZWdpc3RlciBpcyBzdXBwbGllZCB0aGVuIGJhc2UgYW5kIHNpemUgYXJlIGlnbm9yZWQuIFRoaXMgaXMKKyAqIGhvdyBkcml2ZXJzIHNob3VsZCBjYWxsIGl0LgogICoKLSAqCVJlbGVhc2VzIGFuIE1UUlIgcmVnaW9uLiBJZiB0aGUgdXNhZ2UgY291bnQgZHJvcHMgdG8gemVybyB0aGUgCi0gKglyZWdpc3RlciBpcyBmcmVlZCBhbmQgdGhlIHJlZ2lvbiByZXR1cm5zIHRvIGRlZmF1bHQgc3RhdGUuCi0gKglPbiBzdWNjZXNzIHRoZSByZWdpc3RlciBpcyByZXR1cm5lZCwgb24gZmFpbHVyZSBhIG5lZ2F0aXZlIGVycm9yCi0gKgljb2RlLgorICogUmVsZWFzZXMgYW4gTVRSUiByZWdpb24uIElmIHRoZSB1c2FnZSBjb3VudCBkcm9wcyB0byB6ZXJvIHRoZQorICogcmVnaXN0ZXIgaXMgZnJlZWQgYW5kIHRoZSByZWdpb24gcmV0dXJucyB0byBkZWZhdWx0IHN0YXRlLgorICogT24gc3VjY2VzcyB0aGUgcmVnaXN0ZXIgaXMgcmV0dXJuZWQsIG9uIGZhaWx1cmUgYSBuZWdhdGl2ZSBlcnJvcgorICogY29kZS4KICAqLwotCiBpbnQgbXRycl9kZWxfcGFnZShpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpbnQgaSwgbWF4OwpAQCAtNTAwLDIyICs1MjUsMjIgQEAKIAkJCX0KIAkJfQogCQlpZiAocmVnIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIm10cnI6IG5vIE1UUlIgZm9yICVseDAwMCwlbHgwMDAgZm91bmRcbiIsIGJhc2UsCi0JCQkgICAgICAgc2l6ZSk7CisJCQlwcl9kZWJ1ZygibXRycjogbm8gTVRSUiBmb3IgJWx4MDAwLCVseDAwMCBmb3VuZFxuIiwKKwkJCQkgYmFzZSwgc2l6ZSk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAlpZiAocmVnID49IG1heCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtdHJyOiByZWdpc3RlcjogJWQgdG9vIGJpZ1xuIiwgcmVnKTsKKwkJcHJfd2FybmluZygibXRycjogcmVnaXN0ZXI6ICVkIHRvbyBiaWdcbiIsIHJlZyk7CiAJCWdvdG8gb3V0OwogCX0KIAltdHJyX2lmLT5nZXQocmVnLCAmbGJhc2UsICZsc2l6ZSwgJmx0eXBlKTsKIAlpZiAobHNpemUgPCAxKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm10cnI6IE1UUlIgJWQgbm90IHVzZWRcbiIsIHJlZyk7CisJCXByX3dhcm5pbmcoIm10cnI6IE1UUlIgJWQgbm90IHVzZWRcbiIsIHJlZyk7CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAobXRycl91c2FnZV90YWJsZVtyZWddIDwgMSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtdHJyOiByZWc6ICVkIGhhcyBjb3VudD0wXG4iLCByZWcpOworCQlwcl93YXJuaW5nKCJtdHJyOiByZWc6ICVkIGhhcyBjb3VudD0wXG4iLCByZWcpOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKC0tbXRycl91c2FnZV90YWJsZVtyZWddIDwgMSkKQEAgLTUyNiwzMyArNTUxLDMxIEBACiAJcHV0X29ubGluZV9jcHVzKCk7CiAJcmV0dXJuIGVycm9yOwogfQotLyoqCi0gKgltdHJyX2RlbCAtIGRlbGV0ZSBhIG1lbW9yeSB0eXBlIHJlZ2lvbgotICoJQHJlZzogUmVnaXN0ZXIgcmV0dXJuZWQgYnkgbXRycl9hZGQKLSAqCUBiYXNlOiBQaHlzaWNhbCBiYXNlIGFkZHJlc3MKLSAqCUBzaXplOiBTaXplIG9mIHJlZ2lvbgotICoKLSAqCUlmIHJlZ2lzdGVyIGlzIHN1cHBsaWVkIHRoZW4gYmFzZSBhbmQgc2l6ZSBhcmUgaWdub3JlZC4gVGhpcyBpcwotICoJaG93IGRyaXZlcnMgc2hvdWxkIGNhbGwgaXQuCi0gKgotICoJUmVsZWFzZXMgYW4gTVRSUiByZWdpb24uIElmIHRoZSB1c2FnZSBjb3VudCBkcm9wcyB0byB6ZXJvIHRoZSAKLSAqCXJlZ2lzdGVyIGlzIGZyZWVkIGFuZCB0aGUgcmVnaW9uIHJldHVybnMgdG8gZGVmYXVsdCBzdGF0ZS4KLSAqCU9uIHN1Y2Nlc3MgdGhlIHJlZ2lzdGVyIGlzIHJldHVybmVkLCBvbiBmYWlsdXJlIGEgbmVnYXRpdmUgZXJyb3IKLSAqCWNvZGUuCi0gKi8KIAotaW50Ci1tdHJyX2RlbChpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKKy8qKgorICogbXRycl9kZWwgLSBkZWxldGUgYSBtZW1vcnkgdHlwZSByZWdpb24KKyAqIEByZWc6IFJlZ2lzdGVyIHJldHVybmVkIGJ5IG10cnJfYWRkCisgKiBAYmFzZTogUGh5c2ljYWwgYmFzZSBhZGRyZXNzCisgKiBAc2l6ZTogU2l6ZSBvZiByZWdpb24KKyAqCisgKiBJZiByZWdpc3RlciBpcyBzdXBwbGllZCB0aGVuIGJhc2UgYW5kIHNpemUgYXJlIGlnbm9yZWQuIFRoaXMgaXMKKyAqIGhvdyBkcml2ZXJzIHNob3VsZCBjYWxsIGl0LgorICoKKyAqIFJlbGVhc2VzIGFuIE1UUlIgcmVnaW9uLiBJZiB0aGUgdXNhZ2UgY291bnQgZHJvcHMgdG8gemVybyB0aGUKKyAqIHJlZ2lzdGVyIGlzIGZyZWVkIGFuZCB0aGUgcmVnaW9uIHJldHVybnMgdG8gZGVmYXVsdCBzdGF0ZS4KKyAqIE9uIHN1Y2Nlc3MgdGhlIHJlZ2lzdGVyIGlzIHJldHVybmVkLCBvbiBmYWlsdXJlIGEgbmVnYXRpdmUgZXJyb3IKKyAqIGNvZGUuCisgKi8KK2ludCBtdHJyX2RlbChpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpZiAobXRycl9jaGVjayhiYXNlLCBzaXplKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIG10cnJfZGVsX3BhZ2UocmVnLCBiYXNlID4+IFBBR0VfU0hJRlQsIHNpemUgPj4gUEFHRV9TSElGVCk7CiB9Ci0KLUVYUE9SVF9TWU1CT0wobXRycl9hZGQpOwogRVhQT1JUX1NZTUJPTChtdHJyX2RlbCk7CiAKLS8qIEhBQ0sgQUxFUlQhCisvKgorICogSEFDSyBBTEVSVCEKICAqIFRoZXNlIHNob3VsZCBiZSBjYWxsZWQgaW1wbGljaXRseSwgYnV0IHdlIGNhbid0IHlldCB1bnRpbCBhbGwgdGhlIGluaXRjYWxsCiAgKiBzdHVmZiBpcyBkb25lLi4uCiAgKi8KQEAgLTU3NiwyOSArNTk5LDI4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbXRycl92YWx1ZSBtdHJyX3ZhbHVlW01UUlJfTUFYX1ZBUl9SQU5HRVNdOwogCi1zdGF0aWMgaW50IG10cnJfc2F2ZShzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBtdHJyX3NhdmUoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJbXRycl9pZi0+Z2V0KGksCi0JCQkgICAgICZtdHJyX3ZhbHVlW2ldLmxiYXNlLAotCQkJICAgICAmbXRycl92YWx1ZVtpXS5sc2l6ZSwKLQkJCSAgICAgJm10cnJfdmFsdWVbaV0ubHR5cGUpOworCQltdHJyX2lmLT5nZXQoaSwgJm10cnJfdmFsdWVbaV0ubGJhc2UsCisJCQkJJm10cnJfdmFsdWVbaV0ubHNpemUsCisJCQkJJm10cnJfdmFsdWVbaV0ubHR5cGUpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdHJyX3Jlc3RvcmUoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYpCitzdGF0aWMgaW50IG10cnJfcmVzdG9yZShzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJaWYgKG10cnJfdmFsdWVbaV0ubHNpemUpCi0JCQlzZXRfbXRycihpLAotCQkJCSBtdHJyX3ZhbHVlW2ldLmxiYXNlLAotCQkJCSBtdHJyX3ZhbHVlW2ldLmxzaXplLAotCQkJCSBtdHJyX3ZhbHVlW2ldLmx0eXBlKTsKKwkJaWYgKG10cnJfdmFsdWVbaV0ubHNpemUpIHsKKwkJCXNldF9tdHJyKGksIG10cnJfdmFsdWVbaV0ubGJhc2UsCisJCQkJICAgIG10cnJfdmFsdWVbaV0ubHNpemUsCisJCQkJICAgIG10cnJfdmFsdWVbaV0ubHR5cGUpOworCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtNjE1LDI2ICs2MzcsMjkgQEAKIC8qKgogICogbXRycl9icF9pbml0IC0gaW5pdGlhbGl6ZSBtdHJycyBvbiB0aGUgYm9vdCBDUFUKICAqCi0gKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBlYXJseTsgYmVmb3JlIGFueSBvZiB0aGUgb3RoZXIgQ1BVcyBhcmUgCisgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBlYXJseTsgYmVmb3JlIGFueSBvZiB0aGUgb3RoZXIgQ1BVcyBhcmUKICAqIGluaXRpYWxpemVkIChpLmUuIGJlZm9yZSBzbXBfaW5pdCgpKS4KLSAqIAorICoKICAqLwogdm9pZCBfX2luaXQgbXRycl9icF9pbml0KHZvaWQpCiB7CiAJdTMyIHBoeXNfYWRkcjsKKwogCWluaXRfaWZzKCk7CiAKIAlwaHlzX2FkZHIgPSAzMjsKIAogCWlmIChjcHVfaGFzX210cnIpIHsKIAkJbXRycl9pZiA9ICZnZW5lcmljX210cnJfb3BzOwotCQlzaXplX29yX21hc2sgPSAweGZmMDAwMDAwOwkvKiAzNiBiaXRzICovCisJCXNpemVfb3JfbWFzayA9IDB4ZmYwMDAwMDA7CQkJLyogMzYgYml0cyAqLwogCQlzaXplX2FuZF9tYXNrID0gMHgwMGYwMDAwMDsKIAkJcGh5c19hZGRyID0gMzY7CiAKLQkJLyogVGhpcyBpcyBhbiBBTUQgc3BlY2lmaWMgTVNSLCBidXQgd2UgYXNzdW1lKGhvcGU/KSB0aGF0Ci0JCSAgIEludGVsIHdpbGwgaW1wbGVtZW50IGl0IHRvIHdoZW4gdGhleSBleHRlbmQgdGhlIGFkZHJlc3MKLQkJICAgYnVzIG9mIHRoZSBYZW9uLiAqLworCQkvKgorCQkgKiBUaGlzIGlzIGFuIEFNRCBzcGVjaWZpYyBNU1IsIGJ1dCB3ZSBhc3N1bWUoaG9wZT8pIHRoYXQKKwkJICogSW50ZWwgd2lsbCBpbXBsZW1lbnQgaXQgdG8gd2hlbiB0aGV5IGV4dGVuZCB0aGUgYWRkcmVzcworCQkgKiBidXMgb2YgdGhlIFhlb24uCisJCSAqLwogCQlpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDgpIHsKIAkJCXBoeXNfYWRkciA9IGNwdWlkX2VheCgweDgwMDAwMDA4KSAmIDB4ZmY7CiAJCQkvKiBDUFVJRCB3b3JrYXJvdW5kIGZvciBJbnRlbCAwRjMzLzBGMzQgQ1BVICovCkBAIC02NDksOSArNjc0LDExIEBACiAJCQlzaXplX2FuZF9tYXNrID0gfnNpemVfb3JfbWFzayAmIDB4ZmZmZmYwMDAwMFVMTDsKIAkJfSBlbHNlIGlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9DRU5UQVVSICYmCiAJCQkgICBib290X2NwdV9kYXRhLng4NiA9PSA2KSB7Ci0JCQkvKiBWSUEgQyogZmFtaWx5IGhhdmUgSW50ZWwgc3R5bGUgTVRSUnMsIGJ1dAotCQkJICAgZG9uJ3Qgc3VwcG9ydCBQQUUgKi8KLQkJCXNpemVfb3JfbWFzayA9IDB4ZmZmMDAwMDA7CS8qIDMyIGJpdHMgKi8KKwkJCS8qCisJCQkgKiBWSUEgQyogZmFtaWx5IGhhdmUgSW50ZWwgc3R5bGUgTVRSUnMsCisJCQkgKiBidXQgZG9uJ3Qgc3VwcG9ydCBQQUUKKwkJCSAqLworCQkJc2l6ZV9vcl9tYXNrID0gMHhmZmYwMDAwMDsJCS8qIDMyIGJpdHMgKi8KIAkJCXNpemVfYW5kX21hc2sgPSAwOwogCQkJcGh5c19hZGRyID0gMzI7CiAJCX0KQEAgLTY5NCwzMCArNzIxLDI4IEBACiAJCQkJY2hhbmdlZF9ieV9tdHJyX2NsZWFudXAgPSAxOwogCQkJCW10cnJfaWYtPnNldF9hbGwoKTsKIAkJCX0KLQogCQl9CiAJfQogfQogCiB2b2lkIG10cnJfYXBfaW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIW10cnJfaWYgfHwgIXVzZV9pbnRlbCgpKQorCWlmICghdXNlX2ludGVsKCkgfHwgbXRycl9hcHNfZGVsYXllZF9pbml0KQogCQlyZXR1cm47CiAJLyoKLQkgKiBJZGVhbGx5IHdlIHNob3VsZCBob2xkIG10cnJfbXV0ZXggaGVyZSB0byBhdm9pZCBtdHJyIGVudHJpZXMgY2hhbmdlZCwKLQkgKiBidXQgdGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGluIGNwdSBib290IHRpbWUsIGhvbGRpbmcgdGhlIGxvY2sKLQkgKiBicmVha3MgaXQuIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgaW4gdHdvIGNhc2VzOiAxLnZlcnkgZWFyaWx5IHRpbWUKLQkgKiBvZiBzb2Z0d2FyZSByZXN1bWUsIHdoZW4gdGhlcmUgYWJzb2x1dGVseSBpc24ndCBtdHJyIGVudHJ5IGNoYW5nZXM7Ci0JICogMi5jcHUgaG90YWRkIHRpbWUuIFdlIGxldCBtdHJyX2FkZC9kZWxfcGFnZSBob2xkIGNwdWhvdHBsdWcgbG9jayB0bwotCSAqIHByZXZlbnQgbXRyciBlbnRyeSBjaGFuZ2VzCisJICogSWRlYWxseSB3ZSBzaG91bGQgaG9sZCBtdHJyX211dGV4IGhlcmUgdG8gYXZvaWQgbXRyciBlbnRyaWVzCisJICogY2hhbmdlZCwgYnV0IHRoaXMgcm91dGluZSB3aWxsIGJlIGNhbGxlZCBpbiBjcHUgYm9vdCB0aW1lLAorCSAqIGhvbGRpbmcgdGhlIGxvY2sgYnJlYWtzIGl0LgorCSAqCisJICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBpbiB0d28gY2FzZXM6CisJICoKKwkgKiAgIDEuIHZlcnkgZWFyaWx5IHRpbWUgb2Ygc29mdHdhcmUgcmVzdW1lLCB3aGVuIHRoZXJlIGFic29sdXRlbHkKKwkgKiAgICAgIGlzbid0IG10cnIgZW50cnkgY2hhbmdlczsKKwkgKgorCSAqICAgMi4gY3B1IGhvdGFkZCB0aW1lLiBXZSBsZXQgbXRycl9hZGQvZGVsX3BhZ2UgaG9sZCBjcHVob3RwbHVnCisJICogICAgICBsb2NrIHRvIHByZXZlbnQgbXRyciBlbnRyeSBjaGFuZ2VzCiAJICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JbXRycl9pZi0+c2V0X2FsbCgpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXNldF9tdHJyKH4wVSwgMCwgMCwgMCk7CiB9CiAKIC8qKgpAQCAtNzI4LDIzICs3NTMsNTUgQEAKIAlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoMCwgbXRycl9zYXZlX2ZpeGVkX3JhbmdlcywgTlVMTCwgMSk7CiB9CiAKK3ZvaWQgc2V0X210cnJfYXBzX2RlbGF5ZWRfaW5pdCh2b2lkKQoreworCWlmICghdXNlX2ludGVsKCkpCisJCXJldHVybjsKKworCW10cnJfYXBzX2RlbGF5ZWRfaW5pdCA9IHRydWU7Cit9CisKKy8qCisgKiBNVFJSIGluaXRpYWxpemF0aW9uIGZvciBhbGwgQVAncworICovCit2b2lkIG10cnJfYXBzX2luaXQodm9pZCkKK3sKKwlpZiAoIXVzZV9pbnRlbCgpKQorCQlyZXR1cm47CisKKwlzZXRfbXRycih+MFUsIDAsIDAsIDApOworCW10cnJfYXBzX2RlbGF5ZWRfaW5pdCA9IGZhbHNlOworfQorCit2b2lkIG10cnJfYnBfcmVzdG9yZSh2b2lkKQoreworCWlmICghdXNlX2ludGVsKCkpCisJCXJldHVybjsKKworCW10cnJfaWYtPnNldF9hbGwoKTsKK30KKwogc3RhdGljIGludCBfX2luaXQgbXRycl9pbml0X2ZpbmlhbGl6ZSh2b2lkKQogewogCWlmICghbXRycl9pZikKIAkJcmV0dXJuIDA7CisKIAlpZiAodXNlX2ludGVsKCkpIHsKIAkJaWYgKCFjaGFuZ2VkX2J5X210cnJfY2xlYW51cCkKIAkJCW10cnJfc3RhdGVfd2FybigpOwotCX0gZWxzZSB7Ci0JCS8qIFRoZSBDUFVzIGhhdmVuJ3QgTVRSUiBhbmQgc2VlbSB0byBub3Qgc3VwcG9ydCBTTVAuIFRoZXkgaGF2ZQotCQkgKiBzcGVjaWZpYyBkcml2ZXJzLCB3ZSB1c2UgYSB0cmlja3kgbWV0aG9kIHRvIHN1cHBvcnQKLQkJICogc3VzcGVuZC9yZXN1bWUgZm9yIHRoZW0uCi0JCSAqIFRCRDogaXMgdGhlcmUgYW55IHN5c3RlbSB3aXRoIHN1Y2ggQ1BVIHdoaWNoIHN1cHBvcnRzCi0JCSAqIHN1c3BlbmQvcmVzdW1lPyAgaWYgbm8sIHdlIHNob3VsZCByZW1vdmUgdGhlIGNvZGUuCi0JCSAqLwotCQlzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZjcHVfc3lzZGV2X2NsYXNzLAotCQkJJm10cnJfc3lzZGV2X2RyaXZlcik7CisJCXJldHVybiAwOwogCX0KKworCS8qCisJICogVGhlIENQVSBoYXMgbm8gTVRSUiBhbmQgc2VlbXMgdG8gbm90IHN1cHBvcnQgU01QLiBUaGV5IGhhdmUKKwkgKiBzcGVjaWZpYyBkcml2ZXJzLCB3ZSB1c2UgYSB0cmlja3kgbWV0aG9kIHRvIHN1cHBvcnQKKwkgKiBzdXNwZW5kL3Jlc3VtZSBmb3IgdGhlbS4KKwkgKgorCSAqIFRCRDogaXMgdGhlcmUgYW55IHN5c3RlbSB3aXRoIHN1Y2ggQ1BVIHdoaWNoIHN1cHBvcnRzCisJICogc3VzcGVuZC9yZXN1bWU/IElmIG5vLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBjb2RlLgorCSAqLworCXN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJmNwdV9zeXNkZXZfY2xhc3MsICZtdHJyX3N5c2Rldl9kcml2ZXIpOworCiAJcmV0dXJuIDA7CiB9CiBzdWJzeXNfaW5pdGNhbGwobXRycl9pbml0X2ZpbmlhbGl6ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaAppbmRleCA3NTM4Yjc2Li5hNTAxZGVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogbG9jYWwgbXRyciBkZWZpbmVzLgorICogbG9jYWwgTVRSUiBkZWZpbmVzLgogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMTQsMTMgKzE0LDEyIEBACiBzdHJ1Y3QgbXRycl9vcHMgewogCXUzMgl2ZW5kb3I7CiAJdTMyCXVzZV9pbnRlbF9pZjsKLS8vCXZvaWQJKCppbml0KSh2b2lkKTsKIAl2b2lkCSgqc2V0KSh1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIG10cnJfdHlwZSB0eXBlKTsKIAl2b2lkCSgqc2V0X2FsbCkodm9pZCk7CiAKIAl2b2lkCSgqZ2V0KSh1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nICpiYXNlLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZSwgbXRycl90eXBlICogdHlwZSk7CisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzaXplLCBtdHJyX3R5cGUgKnR5cGUpOwogCWludAkoKmdldF9mcmVlX3JlZ2lvbikodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgaW50IHJlcGxhY2VfcmVnKTsKIAlpbnQJKCp2YWxpZGF0ZV9hZGRfcGFnZSkodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCkBAIC0zOSwxMSArMzgsMTEgQEAKIAogLyogbGlicmFyeSBmdW5jdGlvbnMgZm9yIHByb2Nlc3Nvci1zcGVjaWZpYyByb3V0aW5lcyAqLwogc3RydWN0IHNldF9tdHJyX2NvbnRleHQgewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBjcjR2YWw7Ci0JdTMyIGRlZnR5cGVfbG87Ci0JdTMyIGRlZnR5cGVfaGk7Ci0JdTMyIGNjcjM7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl1bnNpZ25lZCBsb25nCWNyNHZhbDsKKwl1MzIJCWRlZnR5cGVfbG87CisJdTMyCQlkZWZ0eXBlX2hpOworCXUzMgkJY2NyMzsKIH07CiAKIHZvaWQgc2V0X210cnJfZG9uZShzdHJ1Y3Qgc2V0X210cnJfY29udGV4dCAqY3R4dCk7CkBAIC01NCwxMCArNTMsMTAgQEAKIAkJdTMyIGJhc2VfbG8sIHUzMiBiYXNlX2hpLCB1MzIgbWFza19sbywgdTMyIG1hc2tfaGkpOwogdm9pZCBnZXRfbXRycl9zdGF0ZSh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgc2V0X210cnJfb3BzKHN0cnVjdCBtdHJyX29wcyAqIG9wcyk7CitleHRlcm4gdm9pZCBzZXRfbXRycl9vcHMoc3RydWN0IG10cnJfb3BzICpvcHMpOwogCiBleHRlcm4gdTY0IHNpemVfb3JfbWFzaywgc2l6ZV9hbmRfbWFzazsKLWV4dGVybiBzdHJ1Y3QgbXRycl9vcHMgKiBtdHJyX2lmOworZXh0ZXJuIHN0cnVjdCBtdHJyX29wcyAqbXRycl9pZjsKIAogI2RlZmluZSBpc19jcHUodm5kKQkobXRycl9pZiAmJiBtdHJyX2lmLT52ZW5kb3IgPT0gWDg2X1ZFTkRPUl8jI3ZuZCkKICNkZWZpbmUgdXNlX2ludGVsKCkJKG10cnJfaWYgJiYgbXRycl9pZi0+dXNlX2ludGVsX2lmID09IDEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvc3RhdGUuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9zdGF0ZS5jCmluZGV4IDFmNWZiMTUuLmRmYzgwYjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9zdGF0ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9zdGF0ZS5jCkBAIC0xLDI0ICsxLDI1IEBACi0jaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1jeXJpeC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KKyNpbmNsdWRlIDxhc20vbXRyci5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKwogI2luY2x1ZGUgIm10cnIuaCIKIAotCi0vKiAgUHV0IHRoZSBwcm9jZXNzb3IgaW50byBhIHN0YXRlIHdoZXJlIE1UUlJzIGNhbiBiZSBzYWZlbHkgc2V0ICAqLworLyogUHV0IHRoZSBwcm9jZXNzb3IgaW50byBhIHN0YXRlIHdoZXJlIE1UUlJzIGNhbiBiZSBzYWZlbHkgc2V0ICovCiB2b2lkIHNldF9tdHJyX3ByZXBhcmVfc2F2ZShzdHJ1Y3Qgc2V0X210cnJfY29udGV4dCAqY3R4dCkKIHsKIAl1bnNpZ25lZCBpbnQgY3IwOwogCi0JLyogIERpc2FibGUgaW50ZXJydXB0cyBsb2NhbGx5ICAqLworCS8qIERpc2FibGUgaW50ZXJydXB0cyBsb2NhbGx5ICovCiAJbG9jYWxfaXJxX3NhdmUoY3R4dC0+ZmxhZ3MpOwogCiAJaWYgKHVzZV9pbnRlbCgpIHx8IGlzX2NwdShDWVJJWCkpIHsKIAotCQkvKiAgU2F2ZSB2YWx1ZSBvZiBDUjQgYW5kIGNsZWFyIFBhZ2UgR2xvYmFsIEVuYWJsZSAoYml0IDcpICAqLworCQkvKiBTYXZlIHZhbHVlIG9mIENSNCBhbmQgY2xlYXIgUGFnZSBHbG9iYWwgRW5hYmxlIChiaXQgNykgKi8KIAkJaWYgKGNwdV9oYXNfcGdlKSB7CiAJCQljdHh0LT5jcjR2YWwgPSByZWFkX2NyNCgpOwogCQkJd3JpdGVfY3I0KGN0eHQtPmNyNHZhbCAmIH5YODZfQ1I0X1BHRSk7CkBAIC0zMyw1MCArMzQsNjEgQEAKIAkJd3JpdGVfY3IwKGNyMCk7CiAJCXdiaW52ZCgpOwogCi0JCWlmICh1c2VfaW50ZWwoKSkKLQkJCS8qICBTYXZlIE1UUlIgc3RhdGUgKi8KKwkJaWYgKHVzZV9pbnRlbCgpKSB7CisJCQkvKiBTYXZlIE1UUlIgc3RhdGUgKi8KIAkJCXJkbXNyKE1TUl9NVFJSZGVmVHlwZSwgY3R4dC0+ZGVmdHlwZV9sbywgY3R4dC0+ZGVmdHlwZV9oaSk7Ci0JCWVsc2UKLQkJCS8qIEN5cml4IEFSUnMgLSBldmVyeXRoaW5nIGVsc2Ugd2VyZSBleGNsdWRlZCBhdCB0aGUgdG9wICovCisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQ3lyaXggQVJScyAtCisJCQkgKiBldmVyeXRoaW5nIGVsc2Ugd2VyZSBleGNsdWRlZCBhdCB0aGUgdG9wCisJCQkgKi8KIAkJCWN0eHQtPmNjcjMgPSBnZXRDeDg2KENYODZfQ0NSMyk7CisJCX0KIAl9CiB9CiAKIHZvaWQgc2V0X210cnJfY2FjaGVfZGlzYWJsZShzdHJ1Y3Qgc2V0X210cnJfY29udGV4dCAqY3R4dCkKIHsKLQlpZiAodXNlX2ludGVsKCkpCi0JCS8qICBEaXNhYmxlIE1UUlJzLCBhbmQgc2V0IHRoZSBkZWZhdWx0IHR5cGUgdG8gdW5jYWNoZWQgICovCisJaWYgKHVzZV9pbnRlbCgpKSB7CisJCS8qIERpc2FibGUgTVRSUnMsIGFuZCBzZXQgdGhlIGRlZmF1bHQgdHlwZSB0byB1bmNhY2hlZCAqLwogCQltdHJyX3dybXNyKE1TUl9NVFJSZGVmVHlwZSwgY3R4dC0+ZGVmdHlwZV9sbyAmIDB4ZjMwMFVMLAogCQkgICAgICBjdHh0LT5kZWZ0eXBlX2hpKTsKLQllbHNlIGlmIChpc19jcHUoQ1lSSVgpKQotCQkvKiBDeXJpeCBBUlJzIC0gZXZlcnl0aGluZyBlbHNlIHdlcmUgZXhjbHVkZWQgYXQgdGhlIHRvcCAqLwotCQlzZXRDeDg2KENYODZfQ0NSMywgKGN0eHQtPmNjcjMgJiAweDBmKSB8IDB4MTApOworCX0gZWxzZSB7CisJCWlmIChpc19jcHUoQ1lSSVgpKSB7CisJCQkvKiBDeXJpeCBBUlJzIC0gZXZlcnl0aGluZyBlbHNlIHdlcmUgZXhjbHVkZWQgYXQgdGhlIHRvcCAqLworCQkJc2V0Q3g4NihDWDg2X0NDUjMsIChjdHh0LT5jY3IzICYgMHgwZikgfCAweDEwKTsKKwkJfQorCX0KIH0KIAotLyogIFJlc3RvcmUgdGhlIHByb2Nlc3NvciBhZnRlciBhIHNldF9tdHJyX3ByZXBhcmUgICovCisvKiBSZXN0b3JlIHRoZSBwcm9jZXNzb3IgYWZ0ZXIgYSBzZXRfbXRycl9wcmVwYXJlICovCiB2b2lkIHNldF9tdHJyX2RvbmUoc3RydWN0IHNldF9tdHJyX2NvbnRleHQgKmN0eHQpCiB7CiAJaWYgKHVzZV9pbnRlbCgpIHx8IGlzX2NwdShDWVJJWCkpIHsKIAotCQkvKiAgRmx1c2ggY2FjaGVzIGFuZCBUTEJzICAqLworCQkvKiBGbHVzaCBjYWNoZXMgYW5kIFRMQnMgKi8KIAkJd2JpbnZkKCk7CiAKLQkJLyogIFJlc3RvcmUgTVRSUmRlZlR5cGUgICovCi0JCWlmICh1c2VfaW50ZWwoKSkKKwkJLyogUmVzdG9yZSBNVFJSZGVmVHlwZSAqLworCQlpZiAodXNlX2ludGVsKCkpIHsKIAkJCS8qIEludGVsIChQNikgc3RhbmRhcmQgTVRSUnMgKi8KLQkJCW10cnJfd3Jtc3IoTVNSX01UUlJkZWZUeXBlLCBjdHh0LT5kZWZ0eXBlX2xvLCBjdHh0LT5kZWZ0eXBlX2hpKTsKLQkJZWxzZQotCQkJLyogQ3lyaXggQVJScyAtIGV2ZXJ5dGhpbmcgZWxzZSB3YXMgZXhjbHVkZWQgYXQgdGhlIHRvcCAqLworCQkJbXRycl93cm1zcihNU1JfTVRSUmRlZlR5cGUsIGN0eHQtPmRlZnR5cGVfbG8sCisJCQkJICAgY3R4dC0+ZGVmdHlwZV9oaSk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQ3lyaXggQVJScyAtCisJCQkgKiBldmVyeXRoaW5nIGVsc2Ugd2FzIGV4Y2x1ZGVkIGF0IHRoZSB0b3AKKwkJCSAqLwogCQkJc2V0Q3g4NihDWDg2X0NDUjMsIGN0eHQtPmNjcjMpOworCQl9CiAKLQkJLyogIEVuYWJsZSBjYWNoZXMgICovCisJCS8qIEVuYWJsZSBjYWNoZXMgKi8KIAkJd3JpdGVfY3IwKHJlYWRfY3IwKCkgJiAweGJmZmZmZmZmKTsKIAotCQkvKiAgUmVzdG9yZSB2YWx1ZSBvZiBDUjQgICovCisJCS8qIFJlc3RvcmUgdmFsdWUgb2YgQ1I0ICovCiAJCWlmIChjcHVfaGFzX3BnZSkKIAkJCXdyaXRlX2NyNChjdHh0LT5jcjR2YWwpOwogCX0KLQkvKiAgUmUtZW5hYmxlIGludGVycnVwdHMgbG9jYWxseSAoaWYgZW5hYmxlZCBwcmV2aW91c2x5KSAgKi8KKwkvKiBSZS1lbmFibGUgaW50ZXJydXB0cyBsb2NhbGx5IChpZiBlbmFibGVkIHByZXZpb3VzbHkpICovCiAJbG9jYWxfaXJxX3Jlc3RvcmUoY3R4dC0+ZmxhZ3MpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfY291bnRlci5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2NvdW50ZXIuYwppbmRleCA5MDAzMzJiLi4yNzMyZTJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfY291bnRlci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9jb3VudGVyLmMKQEAgLTYsNiArNiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEphc3dpbmRlciBTaW5naCBSYWpwdXQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiwgUm9iZXJ0IFJpY2h0ZXIKICAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24sIDxtYXJrdXMudC5tZXR6Z2VyQGludGVsLmNvbT4KICAqCiAgKiAgRm9yIGxpY2VuY2luZyBkZXRhaWxzIHNlZSBrZXJuZWwtYmFzZS9DT1BZSU5HCiAgKi8KQEAgLTIwLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CkBAIC0yNywxMiArMjksNTIgQEAKIAogc3RhdGljIHU2NCBwZXJmX2NvdW50ZXJfbWFzayBfX3JlYWRfbW9zdGx5OwogCisvKiBUaGUgbWF4aW1hbCBudW1iZXIgb2YgUEVCUyBjb3VudGVyczogKi8KKyNkZWZpbmUgTUFYX1BFQlNfQ09VTlRFUlMJNAorCisvKiBUaGUgc2l6ZSBvZiBhIEJUUyByZWNvcmQgaW4gYnl0ZXM6ICovCisjZGVmaW5lIEJUU19SRUNPUkRfU0laRQkJMjQKKworLyogVGhlIHNpemUgb2YgYSBwZXItY3B1IEJUUyBidWZmZXIgaW4gYnl0ZXM6ICovCisjZGVmaW5lIEJUU19CVUZGRVJfU0laRQkJKEJUU19SRUNPUkRfU0laRSAqIDEwMjQpCisKKy8qIFRoZSBCVFMgb3ZlcmZsb3cgdGhyZXNob2xkIGluIGJ5dGVzIGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyOiAqLworI2RlZmluZSBCVFNfT1ZGTF9USAkJKEJUU19SRUNPUkRfU0laRSAqIDY0KQorCisKKy8qCisgKiBCaXRzIGluIHRoZSBkZWJ1Z2N0bG1zciBjb250cm9sbGluZyBicmFuY2ggdHJhY2luZy4KKyAqLworI2RlZmluZSBYODZfREVCVUdDVExfVFIJCQkoMSA8PCA2KQorI2RlZmluZSBYODZfREVCVUdDVExfQlRTCQkoMSA8PCA3KQorI2RlZmluZSBYODZfREVCVUdDVExfQlRJTlQJCSgxIDw8IDgpCisjZGVmaW5lIFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX09TCQkoMSA8PCA5KQorI2RlZmluZSBYODZfREVCVUdDVExfQlRTX09GRl9VU1IJKDEgPDwgMTApCisKKy8qCisgKiBBIGRlYnVnIHN0b3JlIGNvbmZpZ3VyYXRpb24uCisgKgorICogV2Ugb25seSBzdXBwb3J0IGFyY2hpdGVjdHVyZXMgdGhhdCB1c2UgNjRiaXQgZmllbGRzLgorICovCitzdHJ1Y3QgZGVidWdfc3RvcmUgeworCXU2NAlidHNfYnVmZmVyX2Jhc2U7CisJdTY0CWJ0c19pbmRleDsKKwl1NjQJYnRzX2Fic29sdXRlX21heGltdW07CisJdTY0CWJ0c19pbnRlcnJ1cHRfdGhyZXNob2xkOworCXU2NAlwZWJzX2J1ZmZlcl9iYXNlOworCXU2NAlwZWJzX2luZGV4OworCXU2NAlwZWJzX2Fic29sdXRlX21heGltdW07CisJdTY0CXBlYnNfaW50ZXJydXB0X3RocmVzaG9sZDsKKwl1NjQJcGVic19jb3VudGVyX3Jlc2V0W01BWF9QRUJTX0NPVU5URVJTXTsKK307CisKIHN0cnVjdCBjcHVfaHdfY291bnRlcnMgewogCXN0cnVjdCBwZXJmX2NvdW50ZXIJKmNvdW50ZXJzW1g4Nl9QTUNfSURYX01BWF07CiAJdW5zaWduZWQgbG9uZwkJdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoWDg2X1BNQ19JRFhfTUFYKV07CiAJdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhYODZfUE1DX0lEWF9NQVgpXTsKIAl1bnNpZ25lZCBsb25nCQlpbnRlcnJ1cHRzOwogCWludAkJCWVuYWJsZWQ7CisJc3RydWN0IGRlYnVnX3N0b3JlCSpkczsKIH07CiAKIC8qCkBAIC01OCw2ICsxMDAsOCBAQAogCWludAkJYXBpYzsKIAl1NjQJCW1heF9wZXJpb2Q7CiAJdTY0CQlpbnRlbF9jdHJsOworCXZvaWQJCSgqZW5hYmxlX2J0cykodTY0IGNvbmZpZyk7CisJdm9pZAkJKCpkaXNhYmxlX2J0cykodm9pZCk7CiB9OwogCiBzdGF0aWMgc3RydWN0IHg4Nl9wbXUgeDg2X3BtdSBfX3JlYWRfbW9zdGx5OwpAQCAtNTc3LDYgKzYyMSw5IEBACiAJdTY0IHByZXZfcmF3X2NvdW50LCBuZXdfcmF3X2NvdW50OwogCXM2NCBkZWx0YTsKIAorCWlmIChpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKQorCQlyZXR1cm4gMDsKKwogCS8qCiAJICogQ2FyZWZ1bDogYW4gTk1JIG1pZ2h0IG1vZGlmeSB0aGUgcHJldmlvdXMgY291bnRlciB2YWx1ZS4KIAkgKgpAQCAtNjY2LDEwICs3MTMsMTEwIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGlubGluZSBib29sIGJ0c19hdmFpbGFibGUodm9pZCkKK3sKKwlyZXR1cm4geDg2X3BtdS5lbmFibGVfYnRzICE9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2RlYnVnX3N0b3JlX29uX2NwdShpbnQgY3B1KQoreworCXN0cnVjdCBkZWJ1Z19zdG9yZSAqZHMgPSBwZXJfY3B1KGNwdV9od19jb3VudGVycywgY3B1KS5kczsKKworCWlmICghZHMpCisJCXJldHVybjsKKworCXdybXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX0RTX0FSRUEsCisJCSAgICAgKHUzMikoKHU2NCkodW5zaWduZWQgbG9uZylkcyksCisJCSAgICAgKHUzMikoKHU2NCkodW5zaWduZWQgbG9uZylkcyA+PiAzMikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmluaV9kZWJ1Z19zdG9yZV9vbl9jcHUoaW50IGNwdSkKK3sKKwlpZiAoIXBlcl9jcHUoY3B1X2h3X2NvdW50ZXJzLCBjcHUpLmRzKQorCQlyZXR1cm47CisKKwl3cm1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9EU19BUkVBLCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9idHNfaGFyZHdhcmUodm9pZCkKK3sKKwlpbnQgY3B1OworCisJaWYgKCFidHNfYXZhaWxhYmxlKCkpCisJCXJldHVybjsKKworCWdldF9vbmxpbmVfY3B1cygpOworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCWZpbmlfZGVidWdfc3RvcmVfb25fY3B1KGNwdSk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXN0cnVjdCBkZWJ1Z19zdG9yZSAqZHMgPSBwZXJfY3B1KGNwdV9od19jb3VudGVycywgY3B1KS5kczsKKworCQlpZiAoIWRzKQorCQkJY29udGludWU7CisKKwkJcGVyX2NwdShjcHVfaHdfY291bnRlcnMsIGNwdSkuZHMgPSBOVUxMOworCisJCWtmcmVlKCh2b2lkICopKHVuc2lnbmVkIGxvbmcpZHMtPmJ0c19idWZmZXJfYmFzZSk7CisJCWtmcmVlKGRzKTsKKwl9CisKKwlwdXRfb25saW5lX2NwdXMoKTsKK30KKworc3RhdGljIGludCByZXNlcnZlX2J0c19oYXJkd2FyZSh2b2lkKQoreworCWludCBjcHUsIGVyciA9IDA7CisKKwlpZiAoIWJ0c19hdmFpbGFibGUoKSkKKwkJcmV0dXJuIDA7CisKKwlnZXRfb25saW5lX2NwdXMoKTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJc3RydWN0IGRlYnVnX3N0b3JlICpkczsKKwkJdm9pZCAqYnVmZmVyOworCisJCWVyciA9IC1FTk9NRU07CisJCWJ1ZmZlciA9IGt6YWxsb2MoQlRTX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHVubGlrZWx5KCFidWZmZXIpKQorCQkJYnJlYWs7CisKKwkJZHMgPSBremFsbG9jKHNpemVvZigqZHMpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHVubGlrZWx5KCFkcykpIHsKKwkJCWtmcmVlKGJ1ZmZlcik7CisJCQlicmVhazsKKwkJfQorCisJCWRzLT5idHNfYnVmZmVyX2Jhc2UgPSAodTY0KSh1bnNpZ25lZCBsb25nKWJ1ZmZlcjsKKwkJZHMtPmJ0c19pbmRleCA9IGRzLT5idHNfYnVmZmVyX2Jhc2U7CisJCWRzLT5idHNfYWJzb2x1dGVfbWF4aW11bSA9CisJCQlkcy0+YnRzX2J1ZmZlcl9iYXNlICsgQlRTX0JVRkZFUl9TSVpFOworCQlkcy0+YnRzX2ludGVycnVwdF90aHJlc2hvbGQgPQorCQkJZHMtPmJ0c19hYnNvbHV0ZV9tYXhpbXVtIC0gQlRTX09WRkxfVEg7CisKKwkJcGVyX2NwdShjcHVfaHdfY291bnRlcnMsIGNwdSkuZHMgPSBkczsKKwkJZXJyID0gMDsKKwl9CisKKwlpZiAoZXJyKQorCQlyZWxlYXNlX2J0c19oYXJkd2FyZSgpOworCWVsc2UgeworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJCWluaXRfZGVidWdfc3RvcmVfb25fY3B1KGNwdSk7CisJfQorCisJcHV0X29ubGluZV9jcHVzKCk7CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgdm9pZCBod19wZXJmX2NvdW50ZXJfZGVzdHJveShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQogewogCWlmIChhdG9taWNfZGVjX2FuZF9tdXRleF9sb2NrKCZhY3RpdmVfY291bnRlcnMsICZwbWNfcmVzZXJ2ZV9tdXRleCkpIHsKIAkJcmVsZWFzZV9wbWNfaGFyZHdhcmUoKTsKKwkJcmVsZWFzZV9idHNfaGFyZHdhcmUoKTsKIAkJbXV0ZXhfdW5sb2NrKCZwbWNfcmVzZXJ2ZV9tdXRleCk7CiAJfQogfQpAQCAtNzEyLDYgKzg1OSw0MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2J0cyh1NjQgY29uZmlnKQoreworCXVuc2lnbmVkIGxvbmcgZGVidWdjdGxtc3I7CisKKwlkZWJ1Z2N0bG1zciA9IGdldF9kZWJ1Z2N0bG1zcigpOworCisJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX1RSOworCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVFM7CisJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUSU5UOworCisJaWYgKCEoY29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TKSkKKwkJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUU19PRkZfT1M7CisKKwlpZiAoIShjb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSKSkKKwkJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUU19PRkZfVVNSOworCisJdXBkYXRlX2RlYnVnY3RsbXNyKGRlYnVnY3RsbXNyKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcG11X2Rpc2FibGVfYnRzKHZvaWQpCit7CisJc3RydWN0IGNwdV9od19jb3VudGVycyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycyk7CisJdW5zaWduZWQgbG9uZyBkZWJ1Z2N0bG1zcjsKKworCWlmICghY3B1Yy0+ZHMpCisJCXJldHVybjsKKworCWRlYnVnY3RsbXNyID0gZ2V0X2RlYnVnY3RsbXNyKCk7CisKKwlkZWJ1Z2N0bG1zciAmPQorCQl+KFg4Nl9ERUJVR0NUTF9UUiB8IFg4Nl9ERUJVR0NUTF9CVFMgfCBYODZfREVCVUdDVExfQlRJTlQgfAorCQkgIFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX09TIHwgWDg2X0RFQlVHQ1RMX0JUU19PRkZfVVNSKTsKKworCXVwZGF0ZV9kZWJ1Z2N0bG1zcihkZWJ1Z2N0bG1zcik7Cit9CisKIC8qCiAgKiBTZXR1cCB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBhdHRyX3R5cGUKICAqLwpAQCAtNzI4LDkgKzkxMSwxMyBAQAogCWVyciA9IDA7CiAJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZhY3RpdmVfY291bnRlcnMpKSB7CiAJCW11dGV4X2xvY2soJnBtY19yZXNlcnZlX211dGV4KTsKLQkJaWYgKGF0b21pY19yZWFkKCZhY3RpdmVfY291bnRlcnMpID09IDAgJiYgIXJlc2VydmVfcG1jX2hhcmR3YXJlKCkpCi0JCQllcnIgPSAtRUJVU1k7Ci0JCWVsc2UKKwkJaWYgKGF0b21pY19yZWFkKCZhY3RpdmVfY291bnRlcnMpID09IDApIHsKKwkJCWlmICghcmVzZXJ2ZV9wbWNfaGFyZHdhcmUoKSkKKwkJCQllcnIgPSAtRUJVU1k7CisJCQllbHNlCisJCQkJZXJyID0gcmVzZXJ2ZV9idHNfaGFyZHdhcmUoKTsKKwkJfQorCQlpZiAoIWVycikKIAkJCWF0b21pY19pbmMoJmFjdGl2ZV9jb3VudGVycyk7CiAJCW11dGV4X3VubG9jaygmcG1jX3Jlc2VydmVfbXV0ZXgpOwogCX0KQEAgLTc5Myw2ICs5ODAsMjAgQEAKIAlpZiAoY29uZmlnID09IC0xTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyoKKwkgKiBCcmFuY2ggdHJhY2luZzoKKwkgKi8KKwlpZiAoKGF0dHItPmNvbmZpZyA9PSBQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMpICYmCisJICAgIChod2MtPnNhbXBsZV9wZXJpb2QgPT0gMSkpIHsKKwkJLyogQlRTIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhcmNoaXRlY3R1cmUuICovCisJCWlmICghYnRzX2F2YWlsYWJsZSgpKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJCS8qIEJUUyBpcyBjdXJyZW50bHkgb25seSBhbGxvd2VkIGZvciB1c2VyLW1vZGUuICovCisJCWlmIChod2MtPmNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUykKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKIAlod2MtPmNvbmZpZyB8PSBjb25maWc7CiAKIAlyZXR1cm4gMDsKQEAgLTgxNyw3ICsxMDE4LDE4IEBACiAKIHN0YXRpYyB2b2lkIGludGVsX3BtdV9kaXNhYmxlX2FsbCh2b2lkKQogeworCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOworCisJaWYgKCFjcHVjLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwljcHVjLT5lbmFibGVkID0gMDsKKwliYXJyaWVyKCk7CisKIAl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgMCk7CisKKwlpZiAodGVzdF9iaXQoWDg2X1BNQ19JRFhfRklYRURfQlRTLCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCWludGVsX3BtdV9kaXNhYmxlX2J0cygpOwogfQogCiBzdGF0aWMgdm9pZCBhbWRfcG11X2Rpc2FibGVfYWxsKHZvaWQpCkBAIC04NzUsNyArMTA4NywyNSBAQAogCiBzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2FsbCh2b2lkKQogeworCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOworCisJaWYgKGNwdWMtPmVuYWJsZWQpCisJCXJldHVybjsKKworCWNwdWMtPmVuYWJsZWQgPSAxOworCWJhcnJpZXIoKTsKKwogCXdybXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9DVFJMLCB4ODZfcG11LmludGVsX2N0cmwpOworCisJaWYgKHRlc3RfYml0KFg4Nl9QTUNfSURYX0ZJWEVEX0JUUywgY3B1Yy0+YWN0aXZlX21hc2spKSB7CisJCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPQorCQkJY3B1Yy0+Y291bnRlcnNbWDg2X1BNQ19JRFhfRklYRURfQlRTXTsKKworCQlpZiAoV0FSTl9PTl9PTkNFKCFjb3VudGVyKSkKKwkJCXJldHVybjsKKworCQlpbnRlbF9wbXVfZW5hYmxlX2J0cyhjb3VudGVyLT5ody5jb25maWcpOworCX0KIH0KIAogc3RhdGljIHZvaWQgYW1kX3BtdV9lbmFibGVfYWxsKHZvaWQpCkBAIC05NjIsNiArMTE5MiwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkCiBpbnRlbF9wbXVfZGlzYWJsZV9jb3VudGVyKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywgaW50IGlkeCkKIHsKKwlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpIHsKKwkJaW50ZWxfcG11X2Rpc2FibGVfYnRzKCk7CisJCXJldHVybjsKKwl9CisKIAlpZiAodW5saWtlbHkoaHdjLT5jb25maWdfYmFzZSA9PSBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUl9DVFJMKSkgewogCQlpbnRlbF9wbXVfZGlzYWJsZV9maXhlZChod2MsIGlkeCk7CiAJCXJldHVybjsKQEAgLTk3Niw3ICsxMjExLDcgQEAKIAl4ODZfcG11X2Rpc2FibGVfY291bnRlcihod2MsIGlkeCk7CiB9CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1NjQsIHByZXZfbGVmdFtYODZfUE1DX0lEWF9NQVhdKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1NjQgW1g4Nl9QTUNfSURYX01BWF0sIHBtY19wcmV2X2xlZnQpOwogCiAvKgogICogU2V0IHRoZSBuZXh0IElSUSBwZXJpb2QsIGJhc2VkIG9uIHRoZSBod2MtPnBlcmlvZF9sZWZ0IHZhbHVlLgpAQCAtOTkwLDYgKzEyMjUsOSBAQAogCXM2NCBwZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CiAJaW50IGVyciwgcmV0ID0gMDsKIAorCWlmIChpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKQorCQlyZXR1cm4gMDsKKwogCS8qCiAJICogSWYgd2UgYXJlIHdheSBvdXRzaWRlIGEgcmVhc29hYmxlIHJhbmdlIHRoZW4ganVzdCBza2lwIGZvcndhcmQ6CiAJICovCkBAIC0xMDE1LDcgKzEyNTMsNyBAQAogCWlmIChsZWZ0ID4geDg2X3BtdS5tYXhfcGVyaW9kKQogCQlsZWZ0ID0geDg2X3BtdS5tYXhfcGVyaW9kOwogCi0JcGVyX2NwdShwcmV2X2xlZnRbaWR4XSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IGxlZnQ7CisJcGVyX2NwdShwbWNfcHJldl9sZWZ0W2lkeF0sIHNtcF9wcm9jZXNzb3JfaWQoKSkgPSBsZWZ0OwogCiAJLyoKIAkgKiBUaGUgaHcgY291bnRlciBzdGFydHMgY291bnRpbmcgZnJvbSB0aGlzIGNvdW50ZXIgb2Zmc2V0LApAQCAtMTA3Miw2ICsxMzEwLDE0IEBACiAKIHN0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfY291bnRlcihzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsIGludCBpZHgpCiB7CisJaWYgKHVubGlrZWx5KGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpKSB7CisJCWlmICghX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpLmVuYWJsZWQpCisJCQlyZXR1cm47CisKKwkJaW50ZWxfcG11X2VuYWJsZV9idHMoaHdjLT5jb25maWcpOworCQlyZXR1cm47CisJfQorCiAJaWYgKHVubGlrZWx5KGh3Yy0+Y29uZmlnX2Jhc2UgPT0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTCkpIHsKIAkJaW50ZWxfcG11X2VuYWJsZV9maXhlZChod2MsIGlkeCk7CiAJCXJldHVybjsKQEAgLTEwOTMsMTEgKzEzMzksMTYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgZXZlbnQ7CiAKKwlldmVudCA9IGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UX01BU0s7CisKKwlpZiAodW5saWtlbHkoKGV2ZW50ID09CisJCSAgICAgIHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUykpICYmCisJCSAgICAgKGh3Yy0+c2FtcGxlX3BlcmlvZCA9PSAxKSkpCisJCXJldHVybiBYODZfUE1DX0lEWF9GSVhFRF9CVFM7CisKIAlpZiAoIXg4Nl9wbXUubnVtX2NvdW50ZXJzX2ZpeGVkKQogCQlyZXR1cm4gLTE7CiAKLQlldmVudCA9IGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UX01BU0s7Ci0KIAlpZiAodW5saWtlbHkoZXZlbnQgPT0geDg2X3BtdS5ldmVudF9tYXAoUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlMpKSkKIAkJcmV0dXJuIFg4Nl9QTUNfSURYX0ZJWEVEX0lOU1RSVUNUSU9OUzsKIAlpZiAodW5saWtlbHkoZXZlbnQgPT0geDg2X3BtdS5ldmVudF9tYXAoUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTKSkpCkBAIC0xMTE4LDcgKzEzNjksMTUgQEAKIAlpbnQgaWR4OwogCiAJaWR4ID0gZml4ZWRfbW9kZV9pZHgoY291bnRlciwgaHdjKTsKLQlpZiAoaWR4ID49IDApIHsKKwlpZiAoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykgeworCQkvKiBCVFMgaXMgYWxyZWFkeSBvY2N1cGllZC4gKi8KKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJaHdjLT5jb25maWdfYmFzZQk9IDA7CisJCWh3Yy0+Y291bnRlcl9iYXNlCT0gMDsKKwkJaHdjLT5pZHgJCT0gaWR4OworCX0gZWxzZSBpZiAoaWR4ID49IDApIHsKIAkJLyoKIAkJICogVHJ5IHRvIGdldCB0aGUgZml4ZWQgY291bnRlciwgaWYgdGhhdCBpcyBhbHJlYWR5IHRha2VuCiAJCSAqIHRoZW4gdHJ5IHRvIGdldCBhIGdlbmVyaWMgY291bnRlcjoKQEAgLTEyMTEsNyArMTQ3MCw3IEBACiAJCXJkbXNybCh4ODZfcG11LmV2ZW50c2VsICsgaWR4LCBwbWNfY3RybCk7CiAJCXJkbXNybCh4ODZfcG11LnBlcmZjdHIgICsgaWR4LCBwbWNfY291bnQpOwogCi0JCXByZXZfbGVmdCA9IHBlcl9jcHUocHJldl9sZWZ0W2lkeF0sIGNwdSk7CisJCXByZXZfbGVmdCA9IHBlcl9jcHUocG1jX3ByZXZfbGVmdFtpZHhdLCBjcHUpOwogCiAJCXByX2luZm8oIkNQVSMlZDogICBnZW4tUE1DJWQgY3RybDogICUwMTZsbHhcbiIsCiAJCQljcHUsIGlkeCwgcG1jX2N0cmwpOwpAQCAtMTIyOSw2ICsxNDg4LDQ0IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcihzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjLAorCQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGVidWdfc3RvcmUgKmRzID0gY3B1Yy0+ZHM7CisJc3RydWN0IGJ0c19yZWNvcmQgeworCQl1NjQJZnJvbTsKKwkJdTY0CXRvOworCQl1NjQJZmxhZ3M7CisJfTsKKwlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gY3B1Yy0+Y291bnRlcnNbWDg2X1BNQ19JRFhfRklYRURfQlRTXTsKKwl1bnNpZ25lZCBsb25nIG9yaWdfaXAgPSBkYXRhLT5yZWdzLT5pcDsKKwlzdHJ1Y3QgYnRzX3JlY29yZCAqYXQsICp0b3A7CisKKwlpZiAoIWNvdW50ZXIpCisJCXJldHVybjsKKworCWlmICghZHMpCisJCXJldHVybjsKKworCWF0ICA9IChzdHJ1Y3QgYnRzX3JlY29yZCAqKSh1bnNpZ25lZCBsb25nKWRzLT5idHNfYnVmZmVyX2Jhc2U7CisJdG9wID0gKHN0cnVjdCBidHNfcmVjb3JkICopKHVuc2lnbmVkIGxvbmcpZHMtPmJ0c19pbmRleDsKKworCWRzLT5idHNfaW5kZXggPSBkcy0+YnRzX2J1ZmZlcl9iYXNlOworCisJZm9yICg7IGF0IDwgdG9wOyBhdCsrKSB7CisJCWRhdGEtPnJlZ3MtPmlwCT0gYXQtPmZyb207CisJCWRhdGEtPmFkZHIJPSBhdC0+dG87CisKKwkJcGVyZl9jb3VudGVyX291dHB1dChjb3VudGVyLCAxLCBkYXRhKTsKKwl9CisKKwlkYXRhLT5yZWdzLT5pcAk9IG9yaWdfaXA7CisJZGF0YS0+YWRkcgk9IDA7CisKKwkvKiBUaGVyZSdzIG5ldyBkYXRhIGF2YWlsYWJsZS4gKi8KKwljb3VudGVyLT5wZW5kaW5nX2tpbGwgPSBQT0xMX0lOOworfQorCiBzdGF0aWMgdm9pZCB4ODZfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKIHsKIAlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKQEAgLTEyNTMsNiArMTU1MCwxNSBAQAogCSAqIHRoYXQgd2UgYXJlIGRpc2FibGluZzoKIAkgKi8KIAl4ODZfcGVyZl9jb3VudGVyX3VwZGF0ZShjb3VudGVyLCBod2MsIGlkeCk7CisKKwkvKiBEcmFpbiB0aGUgcmVtYWluaW5nIEJUUyByZWNvcmRzLiAqLworCWlmICh1bmxpa2VseShpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSkgeworCQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCQlzdHJ1Y3QgcHRfcmVncyByZWdzOworCisJCWRhdGEucmVncyA9ICZyZWdzOworCQlpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcihjcHVjLCAmZGF0YSk7CisJfQogCWNwdWMtPmNvdW50ZXJzW2lkeF0gPSBOVUxMOwogCWNsZWFyX2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzayk7CiAKQEAgLTEyODAsNiArMTU4Niw3IEBACiAKIHN0YXRpYyB2b2lkIGludGVsX3BtdV9yZXNldCh2b2lkKQogeworCXN0cnVjdCBkZWJ1Z19zdG9yZSAqZHMgPSBfX2dldF9jcHVfdmFyKGNwdV9od19jb3VudGVycykuZHM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaWR4OwogCkBAIC0xMjk3LDYgKzE2MDQsOCBAQAogCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fY291bnRlcnNfZml4ZWQ7IGlkeCsrKSB7CiAJCWNoZWNraW5nX3dybXNybChNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgKyBpZHgsIDB1bGwpOwogCX0KKwlpZiAoZHMpCisJCWRzLT5idHNfaW5kZXggPSBkcy0+YnRzX2J1ZmZlcl9iYXNlOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpAQCAtMTM2Miw2ICsxNjcxLDcgQEAKIAljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKIAogCXBlcmZfZGlzYWJsZSgpOworCWludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKGNwdWMsICZkYXRhKTsKIAlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOwogCWlmICghc3RhdHVzKSB7CiAJCXBlcmZfZW5hYmxlKCk7CkBAIC0xNTcxLDYgKzE4ODEsOCBAQAogCSAqIHRoZSBnZW5lcmljIGNvdW50ZXIgcGVyaW9kOgogCSAqLwogCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDMxKSAtIDEsCisJLmVuYWJsZV9idHMJCT0gaW50ZWxfcG11X2VuYWJsZV9idHMsCisJLmRpc2FibGVfYnRzCQk9IGludGVsX3BtdV9kaXNhYmxlX2J0cywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgeDg2X3BtdSBhbWRfcG11ID0gewpAQCAtMTc5OCw4ICsyMTEwLDggQEAKIAkJZW50cnktPmlwW2VudHJ5LT5ucisrXSA9IGlwOwogfQogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5LCBpcnFfZW50cnkpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSwgbm1pX2VudHJ5KTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnksIHBtY19pcnFfZW50cnkpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSwgcG1jX25taV9lbnRyeSk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBpbl9ubWlfZnJhbWUpOwogCiAKQEAgLTE5NTIsOSArMjI2NCw5IEBACiAJc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeTsKIAogCWlmIChpbl9ubWkoKSkKLQkJZW50cnkgPSAmX19nZXRfY3B1X3ZhcihubWlfZW50cnkpOworCQllbnRyeSA9ICZfX2dldF9jcHVfdmFyKHBtY19ubWlfZW50cnkpOwogCWVsc2UKLQkJZW50cnkgPSAmX19nZXRfY3B1X3ZhcihpcnFfZW50cnkpOworCQllbnRyeSA9ICZfX2dldF9jcHVfdmFyKHBtY19pcnFfZW50cnkpOwogCiAJZW50cnktPm5yID0gMDsKIApAQCAtMTk2MiwzICsyMjc0LDggQEAKIAogCXJldHVybiBlbnRyeTsKIH0KKwordm9pZCBod19wZXJmX2NvdW50ZXJfc2V0dXBfb25saW5lKGludCBjcHUpCit7CisJaW5pdF9kZWJ1Z19zdG9yZV9vbl9jcHUoY3B1KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKaW5kZXggZTYwZWQ3NC4uMzkyYmVhNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKQEAgLTY4LDE2ICs2OCwxNiBAQAogCS8qIHJldHVybnMgdGhlIGJpdCBvZmZzZXQgb2YgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgcmVnaXN0ZXIgKi8KIAlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewogCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCXJldHVybiAobXNyIC0gTVNSX0s3X1BFUkZDVFIwKTsKKwkJcmV0dXJuIG1zciAtIE1TUl9LN19QRVJGQ1RSMDsKIAljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CiAJCWlmIChjcHVfaGFzKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BUkNIX1BFUkZNT04pKQotCQkJcmV0dXJuIChtc3IgLSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwKTsKKwkJCXJldHVybiBtc3IgLSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwOwogCiAJCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODYpIHsKIAkJY2FzZSA2OgotCQkJcmV0dXJuIChtc3IgLSBNU1JfUDZfUEVSRkNUUjApOworCQkJcmV0dXJuIG1zciAtIE1TUl9QNl9QRVJGQ1RSMDsKIAkJY2FzZSAxNToKLQkJCXJldHVybiAobXNyIC0gTVNSX1A0X0JQVV9QRVJGQ1RSMCk7CisJCQlyZXR1cm4gbXNyIC0gTVNSX1A0X0JQVV9QRVJGQ1RSMDsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTkyLDE2ICs5MiwxNiBAQAogCS8qIHJldHVybnMgdGhlIGJpdCBvZmZzZXQgb2YgdGhlIGV2ZW50IHNlbGVjdGlvbiByZWdpc3RlciAqLwogCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CiAJY2FzZSBYODZfVkVORE9SX0FNRDoKLQkJcmV0dXJuIChtc3IgLSBNU1JfSzdfRVZOVFNFTDApOworCQlyZXR1cm4gbXNyIC0gTVNSX0s3X0VWTlRTRUwwOwogCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKIAkJaWYgKGNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FSQ0hfUEVSRk1PTikpCi0JCQlyZXR1cm4gKG1zciAtIE1TUl9BUkNIX1BFUkZNT05fRVZFTlRTRUwwKTsKKwkJCXJldHVybiBtc3IgLSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMDsKIAogCQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2KSB7CiAJCWNhc2UgNjoKLQkJCXJldHVybiAobXNyIC0gTVNSX1A2X0VWTlRTRUwwKTsKKwkJCXJldHVybiBtc3IgLSBNU1JfUDZfRVZOVFNFTDA7CiAJCWNhc2UgMTU6Ci0JCQlyZXR1cm4gKG1zciAtIE1TUl9QNF9CU1VfRVNDUjApOworCQkJcmV0dXJuIG1zciAtIE1TUl9QNF9CU1VfRVNDUjA7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0xMTMsNyArMTEzLDcgQEAKIHsKIAlCVUdfT04oY291bnRlciA+IE5NSV9NQVhfQ09VTlRFUl9CSVRTKTsKIAotCXJldHVybiAoIXRlc3RfYml0KGNvdW50ZXIsIHBlcmZjdHJfbm1pX293bmVyKSk7CisJcmV0dXJuICF0ZXN0X2JpdChjb3VudGVyLCBwZXJmY3RyX25taV9vd25lcik7CiB9CiAKIC8qIGNoZWNrcyB0aGUgYW4gbXNyIGZvciBhdmFpbGFiaWxpdHkgKi8KQEAgLTEyNCw3ICsxMjQsNyBAQAogCWNvdW50ZXIgPSBubWlfcGVyZmN0cl9tc3JfdG9fYml0KG1zcik7CiAJQlVHX09OKGNvdW50ZXIgPiBOTUlfTUFYX0NPVU5URVJfQklUUyk7CiAKLQlyZXR1cm4gKCF0ZXN0X2JpdChjb3VudGVyLCBwZXJmY3RyX25taV9vd25lcikpOworCXJldHVybiAhdGVzdF9iaXQoY291bnRlciwgcGVyZmN0cl9ubWlfb3duZXIpOwogfQogRVhQT1JUX1NZTUJPTChhdmFpbF90b19yZXNydl9wZXJmY3RyX25taV9iaXQpOwogCkBAIC0yMzcsNyArMjM3LDcgQEAKIAkgKi8KIAljb3VudGVyX3ZhbCA9ICh1NjQpY3B1X2toeiAqIDEwMDA7CiAJZG9fZGl2KGNvdW50ZXJfdmFsLCByZXR2YWwpOwotIAlpZiAoY291bnRlcl92YWwgPiAweDdmZmZmZmZmVUxMKSB7CisJaWYgKGNvdW50ZXJfdmFsID4gMHg3ZmZmZmZmZlVMTCkgewogCQl1NjQgY291bnQgPSAodTY0KWNwdV9raHogKiAxMDAwOwogCQlkb19kaXYoY291bnQsIDB4N2ZmZmZmZmZVTCk7CiAJCXJldHZhbCA9IGNvdW50ICsgMTsKQEAgLTI1MSw3ICsyNTEsNyBAQAogCXU2NCBjb3VudCA9ICh1NjQpY3B1X2toeiAqIDEwMDA7CiAKIAlkb19kaXYoY291bnQsIG5taV9oeik7Ci0JaWYoZGVzY3IpCisJaWYgKGRlc2NyKQogCQlwcl9kZWJ1Zygic2V0dGluZyAlcyB0byAtMHglMDhMeFxuIiwgZGVzY3IsIGNvdW50KTsKIAl3cm1zcmwocGVyZmN0cl9tc3IsIDAgLSBjb3VudCk7CiB9CkBAIC0yNjIsNyArMjYyLDcgQEAKIAl1NjQgY291bnQgPSAodTY0KWNwdV9raHogKiAxMDAwOwogCiAJZG9fZGl2KGNvdW50LCBubWlfaHopOwotCWlmKGRlc2NyKQorCWlmIChkZXNjcikKIAkJcHJfZGVidWcoInNldHRpbmcgJXMgdG8gLTB4JTA4THhcbiIsIGRlc2NyLCBjb3VudCk7CiAJd3Jtc3IocGVyZmN0cl9tc3IsICh1MzIpKC1jb3VudCksIDApOwogfQpAQCAtMjk2LDcgKzI5Niw3IEBACiAKIAkvKiBzZXR1cCB0aGUgdGltZXIgKi8KIAl3cm1zcihldm50c2VsX21zciwgZXZudHNlbCwgMCk7Ci0Jd3JpdGVfd2F0Y2hkb2dfY291bnRlcihwZXJmY3RyX21zciwgIks3X1BFUkZDVFIwIixubWlfaHopOworCXdyaXRlX3dhdGNoZG9nX2NvdW50ZXIocGVyZmN0cl9tc3IsICJLN19QRVJGQ1RSMCIsIG5taV9oeik7CiAKIAkvKiBpbml0aWFsaXplIHRoZSB3ZCBzdHJ1Y3QgYmVmb3JlIGVuYWJsaW5nICovCiAJd2QtPnBlcmZjdHJfbXNyID0gcGVyZmN0cl9tc3I7CkBAIC0zODcsNyArMzg3LDcgQEAKIAkvKiBzZXR1cCB0aGUgdGltZXIgKi8KIAl3cm1zcihldm50c2VsX21zciwgZXZudHNlbCwgMCk7CiAJbm1pX2h6ID0gYWRqdXN0X2Zvcl8zMmJpdF9jdHIobm1pX2h6KTsKLQl3cml0ZV93YXRjaGRvZ19jb3VudGVyMzIocGVyZmN0cl9tc3IsICJQNl9QRVJGQ1RSMCIsbm1pX2h6KTsKKwl3cml0ZV93YXRjaGRvZ19jb3VudGVyMzIocGVyZmN0cl9tc3IsICJQNl9QRVJGQ1RSMCIsIG5taV9oeik7CiAKIAkvKiBpbml0aWFsaXplIHRoZSB3ZCBzdHJ1Y3QgYmVmb3JlIGVuYWJsaW5nICovCiAJd2QtPnBlcmZjdHJfbXNyID0gcGVyZmN0cl9tc3I7CkBAIC00MTUsNyArNDE1LDcgQEAKIAlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKIAogCS8qIFA2L0FSQ0hfUEVSRk1PTiBoYXMgMzIgYml0IGNvdW50ZXIgd3JpdGUgKi8KLQl3cml0ZV93YXRjaGRvZ19jb3VudGVyMzIod2QtPnBlcmZjdHJfbXNyLCBOVUxMLG5taV9oeik7CisJd3JpdGVfd2F0Y2hkb2dfY291bnRlcjMyKHdkLT5wZXJmY3RyX21zciwgTlVMTCwgbm1pX2h6KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB3ZF9vcHMgcDZfd2Rfb3BzID0gewpAQCAtNDkwLDkgKzQ5MCw5IEBACiAJaWYgKHNtcF9udW1fc2libGluZ3MgPT0gMikgewogCQl1bnNpZ25lZCBpbnQgZWJ4LCBhcGljaWQ7CiAKLSAgICAgICAgCWVieCA9IGNwdWlkX2VieCgxKTsKLQkgICAgICAgIGFwaWNpZCA9IChlYnggPj4gMjQpICYgMHhmZjsKLSAgICAgICAgCWh0X251bSA9IGFwaWNpZCAmIDE7CisJCWVieCA9IGNwdWlkX2VieCgxKTsKKwkJYXBpY2lkID0gKGVieCA+PiAyNCkgJiAweGZmOworCQlodF9udW0gPSBhcGljaWQgJiAxOwogCX0gZWxzZQogI2VuZGlmCiAJCWh0X251bSA9IDA7CkBAIC01NDQsNyArNTQ0LDcgQEAKIAl9CiAKIAlldm50c2VsID0gUDRfRVNDUl9FVkVOVF9TRUxFQ1QoMHgzRikKLQkgCXwgUDRfRVNDUl9PUworCQl8IFA0X0VTQ1JfT1MKIAkJfCBQNF9FU0NSX1VTUjsKIAogCWNjY3JfdmFsIHw9IFA0X0NDQ1JfVEhSRVNIT0xEKDE1KQpAQCAtNjEyLDcgKzYxMiw3IEBACiB7CiAJdW5zaWduZWQgZHVtbXk7CiAJLyoKLSAJICogUDQgcXVpcmtzOgorCSAqIFA0IHF1aXJrczoKIAkgKiAtIEFuIG92ZXJmbG93biBwZXJmY3RyIHdpbGwgYXNzZXJ0IGl0cyBpbnRlcnJ1cHQKIAkgKiAgIHVudGlsIHRoZSBPVkYgZmxhZyBpbiBpdHMgQ0NDUiBpcyBjbGVhcmVkLgogCSAqIC0gTFZUUEMgaXMgbWFza2VkIG9uIGludGVycnVwdCBhbmQgbXVzdCBiZQpAQCAtNjYyLDcgKzY2Miw4IEBACiAJICogTk9URTogQ29ycmVzcG9uZGluZyBiaXQgPSAwIGluIGVieCBpbmRpY2F0ZXMgZXZlbnQgcHJlc2VudC4KIAkgKi8KIAljcHVpZCgxMCwgJihlYXguZnVsbCksICZlYngsICZ1bnVzZWQsICZ1bnVzZWQpOwotCWlmICgoZWF4LnNwbGl0Lm1hc2tfbGVuZ3RoIDwgKEFSQ0hfUEVSRk1PTl9VTkhBTFRFRF9DT1JFX0NZQ0xFU19JTkRFWCsxKSkgfHwKKwlpZiAoKGVheC5zcGxpdC5tYXNrX2xlbmd0aCA8CisJCQkoQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX0lOREVYKzEpKSB8fAogCSAgICAoZWJ4ICYgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX1BSRVNFTlQpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYwppbmRleCBkNWUzMDM5Li42MmFjOGNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYwpAQCAtMTE2LDExICsxMTYsOSBAQAogCQlzZXFfcHJpbnRmKG0sICJUTEIgc2l6ZVx0OiAlZCA0SyBwYWdlc1xuIiwgYy0+eDg2X3RsYnNpemUpOwogI2VuZGlmCiAJc2VxX3ByaW50ZihtLCAiY2xmbHVzaCBzaXplXHQ6ICV1XG4iLCBjLT54ODZfY2xmbHVzaF9zaXplKTsKLSNpZmRlZiBDT05GSUdfWDg2XzY0CiAJc2VxX3ByaW50ZihtLCAiY2FjaGVfYWxpZ25tZW50XHQ6ICVkXG4iLCBjLT54ODZfY2FjaGVfYWxpZ25tZW50KTsKIAlzZXFfcHJpbnRmKG0sICJhZGRyZXNzIHNpemVzXHQ6ICV1IGJpdHMgcGh5c2ljYWwsICV1IGJpdHMgdmlydHVhbFxuIiwKIAkJICAgYy0+eDg2X3BoeXNfYml0cywgYy0+eDg2X3ZpcnRfYml0cyk7Ci0jZW5kaWYKIAogCXNlcV9wcmludGYobSwgInBvd2VyIG1hbmFnZW1lbnQ6Iik7CiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKQEAgLTEyOCw3ICsxMjYsNyBAQAogCQkJaWYgKGkgPCBBUlJBWV9TSVpFKHg4Nl9wb3dlcl9mbGFncykgJiYKIAkJCSAgICB4ODZfcG93ZXJfZmxhZ3NbaV0pCiAJCQkJc2VxX3ByaW50ZihtLCAiJXMlcyIsCi0JCQkJCSAgIHg4Nl9wb3dlcl9mbGFnc1tpXVswXT8iICI6IiIsCisJCQkJCSAgIHg4Nl9wb3dlcl9mbGFnc1tpXVswXSA/ICIgIiA6ICIiLAogCQkJCQkgICB4ODZfcG93ZXJfZmxhZ3NbaV0pOwogCQkJZWxzZQogCQkJCXNlcV9wcmludGYobSwgIiBbJWRdIiwgaSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuYwppbmRleCAyODRjMzk5Li5iYzI0ZjUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdm13YXJlLmMKQEAgLTQ5LDE3ICs0OSwxNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3Ztd2FyZV9nZXRfdHNjX2toeih2b2lkKQogewotICAgICAgICB1aW50NjRfdCB0c2NfaHo7Ci0gICAgICAgIHVpbnQzMl90IGVheCwgZWJ4LCBlY3gsIGVkeDsKKwl1aW50NjRfdCB0c2NfaHo7CisJdWludDMyX3QgZWF4LCBlYngsIGVjeCwgZWR4OwogCi0gICAgICAgIFZNV0FSRV9QT1JUKEdFVEhaLCBlYXgsIGVieCwgZWN4LCBlZHgpOworCVZNV0FSRV9QT1JUKEdFVEhaLCBlYXgsIGVieCwgZWN4LCBlZHgpOwogCi0gICAgICAgIGlmIChlYnggPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRzY19oeiA9IGVheCB8ICgoKHVpbnQ2NF90KWVieCkgPDwgMzIpOwotICAgICAgICBkb19kaXYodHNjX2h6LCAxMDAwKTsKLSAgICAgICAgQlVHX09OKHRzY19oeiA+PiAzMik7Ci0gICAgICAgIHJldHVybiB0c2NfaHo7CisJaWYgKGVieCA9PSBVSU5UX01BWCkKKwkJcmV0dXJuIDA7CisJdHNjX2h6ID0gZWF4IHwgKCgodWludDY0X3QpZWJ4KSA8PCAzMik7CisJZG9fZGl2KHRzY19oeiwgMTAwMCk7CisJQlVHX09OKHRzY19oeiA+PiAzMik7CisJcmV0dXJuIHRzY19oejsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kb3VibGVmYXVsdF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2RvdWJsZWZhdWx0XzMyLmMKaW5kZXggYjRmMTRjNi4uMzcyNTBmZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2RvdWJsZWZhdWx0XzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2RvdWJsZWZhdWx0XzMyLmMKQEAgLTI3LDkgKzI3LDcgQEAKIAogCWlmIChwdHJfb2soZ2R0KSkgewogCQlnZHQgKz0gR0RUX0VOVFJZX1RTUyA8PCAzOwotCQl0c3MgPSAqKHUxNiAqKShnZHQrMik7Ci0JCXRzcyArPSAqKHU4ICopKGdkdCs0KSA8PCAxNjsKLQkJdHNzICs9ICoodTggKikoZ2R0KzcpIDw8IDI0OworCQl0c3MgPSBnZXRfZGVzY19iYXNlKChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKilnZHQpOwogCQlwcmludGsoS0VSTl9FTUVSRyAiZG91YmxlIGZhdWx0LCB0c3MgYXQgJTA4bHhcbiIsIHRzcyk7CiAKIAkJaWYgKHB0cl9vayh0c3MpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHMuYyBiL2FyY2gveDg2L2tlcm5lbC9kcy5jCmluZGV4IDQ4YmZlMTMuLmVmNDJhMDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kcy5jCkBAIC01MDksMTUgKzUwOSwxNSBAQAogCWJ0c19lc2NhcGUJCT0gKCh1bnNpZ25lZCBsb25nKS0xICYgfmJ0c19xdWFsX21hc2spCiB9OwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYnRzX2dldChjb25zdCBjaGFyICpiYXNlLCBlbnVtIGJ0c19maWVsZCBmaWVsZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBidHNfZ2V0KGNvbnN0IGNoYXIgKmJhc2UsIHVuc2lnbmVkIGxvbmcgZmllbGQpCiB7CiAJYmFzZSArPSAoZHNfY2ZnLnNpemVvZl9wdHJfZmllbGQgKiBmaWVsZCk7CiAJcmV0dXJuICoodW5zaWduZWQgbG9uZyAqKWJhc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBidHNfc2V0KGNoYXIgKmJhc2UsIGVudW0gYnRzX2ZpZWxkIGZpZWxkLCB1bnNpZ25lZCBsb25nIHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBidHNfc2V0KGNoYXIgKmJhc2UsIHVuc2lnbmVkIGxvbmcgZmllbGQsIHVuc2lnbmVkIGxvbmcgdmFsKQogewotCWJhc2UgKz0gKGRzX2NmZy5zaXplb2ZfcHRyX2ZpZWxkICogZmllbGQpOzsKKwliYXNlICs9IChkc19jZmcuc2l6ZW9mX3B0cl9maWVsZCAqIGZpZWxkKTsKIAkoKih1bnNpZ25lZCBsb25nICopYmFzZSkgPSB2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwppbmRleCBjODQwNTcxOC4uMmQ4YTM3MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwppbmRleCA1Y2I1NzI1Li4xNDcwMDVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogewogCWludCB4ID0gZTgyMHgtPm5yX21hcDsKIAotCWlmICh4ID09IEFSUkFZX1NJWkUoZTgyMHgtPm1hcCkpIHsKKwlpZiAoeCA+PSBBUlJBWV9TSVpFKGU4MjB4LT5tYXApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiT29vcHMhIFRvbyBtYW55IGVudHJpZXMgaW4gdGhlIG1lbW9yeSBtYXAhXG4iKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwppbmRleCBkOTRlMWVhLi45ZGJiNTI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCkBAIC00MTcsMTAgKzQxNyw2IEBACiAJdW5zaWduZWQgbG9uZyByZXR1cm5faG9va2VyID0gKHVuc2lnbmVkIGxvbmcpCiAJCQkJJnJldHVybl90b19oYW5kbGVyOwogCi0JLyogTm1pJ3MgYXJlIGN1cnJlbnRseSB1bnN1cHBvcnRlZCAqLwotCWlmICh1bmxpa2VseShpbl9ubWkoKSkpCi0JCXJldHVybjsKLQogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmY3VycmVudC0+dHJhY2luZ19ncmFwaF9wYXVzZSkpKQogCQlyZXR1cm47CiAKQEAgLTQ5OCwzNyArNDk0LDU2IEBACiAKIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNjYWxsX25yX3RvX21ldGEoaW50IG5yKQogewotCWlmICghc3lzY2FsbHNfbWV0YWRhdGEgfHwgbnIgPj0gRlRSQUNFX1NZU0NBTExfTUFYIHx8IG5yIDwgMCkKKwlpZiAoIXN5c2NhbGxzX21ldGFkYXRhIHx8IG5yID49IE5SX3N5c2NhbGxzIHx8IG5yIDwgMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gc3lzY2FsbHNfbWV0YWRhdGFbbnJdOwogfQogCi12b2lkIGFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKK2ludCBzeXNjYWxsX25hbWVfdG9fbnIoY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKworCWlmICghc3lzY2FsbHNfbWV0YWRhdGEpCisJCXJldHVybiAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9zeXNjYWxsczsgaSsrKSB7CisJCWlmIChzeXNjYWxsc19tZXRhZGF0YVtpXSkgeworCQkJaWYgKCFzdHJjbXAoc3lzY2FsbHNfbWV0YWRhdGFbaV0tPm5hbWUsIG5hbWUpKQorCQkJCXJldHVybiBpOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKwordm9pZCBzZXRfc3lzY2FsbF9lbnRlcl9pZChpbnQgbnVtLCBpbnQgaWQpCit7CisJc3lzY2FsbHNfbWV0YWRhdGFbbnVtXS0+ZW50ZXJfaWQgPSBpZDsKK30KKwordm9pZCBzZXRfc3lzY2FsbF9leGl0X2lkKGludCBudW0sIGludCBpZCkKK3sKKwlzeXNjYWxsc19tZXRhZGF0YVtudW1dLT5leGl0X2lkID0gaWQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqbWV0YTsKIAl1bnNpZ25lZCBsb25nICoqcHN5c19zeXNjYWxsX3RhYmxlID0gJnN5c19jYWxsX3RhYmxlOwotCXN0YXRpYyBhdG9taWNfdCByZWZzOwotCi0JaWYgKGF0b21pY19pbmNfcmV0dXJuKCZyZWZzKSAhPSAxKQotCQlnb3RvIGVuZDsKIAogCXN5c2NhbGxzX21ldGFkYXRhID0ga3phbGxvYyhzaXplb2YoKnN5c2NhbGxzX21ldGFkYXRhKSAqCi0JCQkJCUZUUkFDRV9TWVNDQUxMX01BWCwgR0ZQX0tFUk5FTCk7CisJCQkJCU5SX3N5c2NhbGxzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXN5c2NhbGxzX21ldGFkYXRhKSB7CiAJCVdBUk5fT04oMSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IEZUUkFDRV9TWVNDQUxMX01BWDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE5SX3N5c2NhbGxzOyBpKyspIHsKIAkJbWV0YSA9IGZpbmRfc3lzY2FsbF9tZXRhKHBzeXNfc3lzY2FsbF90YWJsZVtpXSk7CiAJCXN5c2NhbGxzX21ldGFkYXRhW2ldID0gbWV0YTsKIAl9Ci0JcmV0dXJuOwotCi0JLyogUGFyYW5vaWQ6IGF2b2lkIG92ZXJmbG93ICovCi1lbmQ6Ci0JYXRvbWljX2RlYygmcmVmcyk7CisJcmV0dXJuIDA7CiB9CithcmNoX2luaXRjYWxsKGFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwppbmRleCBjYzgyN2FjLi43ZmZlYzZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKQEAgLTQzOSw3ICs0MzksNiBAQAogCWpuZSAxZgogCW1vdmwgJHBlcl9jcHVfX2dkdF9wYWdlLCVlYXgKIAltb3ZsICRwZXJfY3B1X19zdGFja19jYW5hcnksJWVjeAotCXN1YmwgJDIwLCAlZWN4CiAJbW92dyAlY3gsIDggKiBHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZICsgMiglZWF4KQogCXNocmwgJDE2LCAlZWN4CiAJbW92YiAlY2wsIDggKiBHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZICsgNCglZWF4KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCmluZGV4IDNiMDk2MzQuLjdkMzVkMGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKQEAgLTIxOCw3ICsyMTgsNiBAQAogdm9pZCBmaXh1cF9pcnFzKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGlycTsKLQlzdGF0aWMgaW50IHdhcm5lZDsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKIAlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKQEAgLTIzNiw4ICsyMzUsOCBAQAogCQl9CiAJCWlmIChkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCiAJCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBhZmZpbml0eSk7Ci0JCWVsc2UgaWYgKGRlc2MtPmFjdGlvbiAmJiAhKHdhcm5lZCsrKSkKLQkJCXByaW50aygiQ2Fubm90IHNldCBhZmZpbml0eSBmb3IgaXJxICVpXG4iLCBpcnEpOworCQllbHNlIGlmIChkZXNjLT5hY3Rpb24pCisJCQlwcmludGtfb25jZSgiQ2Fubm90IHNldCBhZmZpbml0eSBmb3IgaXJxICVpXG4iLCBpcnEpOwogCX0KIAogI2lmIDAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rdm0uYyBiL2FyY2gveDg2L2tlcm5lbC9rdm0uYwppbmRleCBjNjY0ZDUxLi42M2IwZWM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2t2bS5jCkBAIC0zNCw3ICszNCw2IEBACiBzdHJ1Y3Qga3ZtX3BhcmFfc3RhdGUgewogCXU4IG1tdV9xdWV1ZVtNTVVfUVVFVUVfU0laRV07CiAJaW50IG1tdV9xdWV1ZV9sZW47Ci0JZW51bSBwYXJhdmlydF9sYXp5X21vZGUgbW9kZTsKIH07CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3ZtX3BhcmFfc3RhdGUsIHBhcmFfc3RhdGUpOwpAQCAtNzcsNyArNzYsNyBAQAogewogCXN0cnVjdCBrdm1fcGFyYV9zdGF0ZSAqc3RhdGUgPSBrdm1fcGFyYV9zdGF0ZSgpOwogCi0JaWYgKHN0YXRlLT5tb2RlICE9IFBBUkFWSVJUX0xBWllfTU1VKSB7CisJaWYgKHBhcmF2aXJ0X2dldF9sYXp5X21vZGUoKSAhPSBQQVJBVklSVF9MQVpZX01NVSkgewogCQlrdm1fbW11X29wKGJ1ZmZlciwgbGVuKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE4NSwxMCArMTg0LDcgQEAKIAogc3RhdGljIHZvaWQga3ZtX2VudGVyX2xhenlfbW11KHZvaWQpCiB7Ci0Jc3RydWN0IGt2bV9wYXJhX3N0YXRlICpzdGF0ZSA9IGt2bV9wYXJhX3N0YXRlKCk7Ci0KIAlwYXJhdmlydF9lbnRlcl9sYXp5X21tdSgpOwotCXN0YXRlLT5tb2RlID0gcGFyYXZpcnRfZ2V0X2xhenlfbW9kZSgpOwogfQogCiBzdGF0aWMgdm9pZCBrdm1fbGVhdmVfbGF6eV9tbXUodm9pZCkKQEAgLTE5Nyw3ICsxOTMsNiBAQAogCiAJbW11X3F1ZXVlX2ZsdXNoKHN0YXRlKTsKIAlwYXJhdmlydF9sZWF2ZV9sYXp5X21tdSgpOwotCXN0YXRlLT5tb2RlID0gcGFyYXZpcnRfZ2V0X2xhenlfbW9kZSgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFyYXZpcnRfb3BzX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYyBiL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCmluZGV4IDIyM2FmNDMuLmU1ZWZjZGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCkBAIC01MCw4ICs1MCw4IEBACiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCWludCBsb3csIGhpZ2g7CiAKLQlsb3cgPSAoaW50KV9fcGEoJndhbGxfY2xvY2spOwotCWhpZ2ggPSAoKHU2NClfX3BhKCZ3YWxsX2Nsb2NrKSA+PiAzMik7CisJbG93ID0gKGludClfX3BhX3N5bWJvbCgmd2FsbF9jbG9jayk7CisJaGlnaCA9ICgodTY0KV9fcGFfc3ltYm9sKCZ3YWxsX2Nsb2NrKSA+PiAzMik7CiAJbmF0aXZlX3dyaXRlX21zcihNU1JfS1ZNX1dBTExfQ0xPQ0ssIGxvdywgaGlnaCk7CiAKIAl2Y3B1X3RpbWUgPSAmZ2V0X2NwdV92YXIoaHZfY2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKaW5kZXggNjUxYzkzYi4uZmNkNTEzYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCkBAIC00ODIsMTEgKzQ4MiwxMSBAQAogCQlNUF9idXNfaW5mbygmYnVzKTsKIAl9CiAKLQlpb2FwaWMudHlwZSA9IE1QX0lPQVBJQzsKLQlpb2FwaWMuYXBpY2lkID0gMjsKLQlpb2FwaWMuYXBpY3ZlciA9IG1wY19kZWZhdWx0X3R5cGUgPiA0ID8gMHgxMCA6IDB4MDE7Ci0JaW9hcGljLmZsYWdzID0gTVBDX0FQSUNfVVNBQkxFOwotCWlvYXBpYy5hcGljYWRkciA9IDB4RkVDMDAwMDA7CisJaW9hcGljLnR5cGUJPSBNUF9JT0FQSUM7CisJaW9hcGljLmFwaWNpZAk9IDI7CisJaW9hcGljLmFwaWN2ZXIJPSBtcGNfZGVmYXVsdF90eXBlID4gNCA/IDB4MTAgOiAweDAxOworCWlvYXBpYy5mbGFncwk9IE1QQ19BUElDX1VTQUJMRTsKKwlpb2FwaWMuYXBpY2FkZHIJPSBJT19BUElDX0RFRkFVTFRfUEhZU19CQVNFOwogCU1QX2lvYXBpY19pbmZvKCZpb2FwaWMpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwppbmRleCA5OGZkNmNkLi43ZGQ5NTAwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21zci5jCkBAIC0xLDYgKzEsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgogICoKICAqICAgQ29weXJpZ2h0IDIwMDAtMjAwOCBILiBQZXRlciBBbnZpbiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICAgQ29weXJpZ2h0IDIwMDkgSW50ZWwgQ29ycG9yYXRpb247IGF1dGhvcjogSC4gUGV0ZXIgQW52aW4KICAqCiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC04MCwxMSArODEsOCBAQAogCiAJZm9yICg7IGNvdW50OyBjb3VudCAtPSA4KSB7CiAJCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGNwdSwgcmVnLCAmZGF0YVswXSwgJmRhdGFbMV0pOwotCQlpZiAoZXJyKSB7Ci0JCQlpZiAoZXJyID09IC1FRkFVTFQpIC8qIEZpeCBpZGlvdGljIGVycm9yIGNvZGUgKi8KLQkJCQllcnIgPSAtRUlPOworCQlpZiAoZXJyKQogCQkJYnJlYWs7Ci0JCX0KIAkJaWYgKGNvcHlfdG9fdXNlcih0bXAsICZkYXRhLCA4KSkgewogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWJyZWFrOwpAQCAtMTE1LDExICsxMTMsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJZXJyID0gd3Jtc3Jfc2FmZV9vbl9jcHUoY3B1LCByZWcsIGRhdGFbMF0sIGRhdGFbMV0pOwotCQlpZiAoZXJyKSB7Ci0JCQlpZiAoZXJyID09IC1FRkFVTFQpIC8qIEZpeCBpZGlvdGljIGVycm9yIGNvZGUgKi8KLQkJCQllcnIgPSAtRUlPOworCQlpZiAoZXJyKQogCQkJYnJlYWs7Ci0JCX0KIAkJdG1wICs9IDI7CiAJCWJ5dGVzICs9IDg7CiAJfQpAQCAtMTI3LDYgKzEyMiw1NCBAQAogCXJldHVybiBieXRlcyA/IGJ5dGVzIDogZXJyOwogfQogCitzdGF0aWMgbG9uZyBtc3JfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBpb2MsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXUzMiBfX3VzZXIgKnVyZWdzID0gKHUzMiBfX3VzZXIgKilhcmc7CisJdTMyIHJlZ3NbOF07CisJaW50IGNwdSA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwlpbnQgZXJyOworCisJc3dpdGNoIChpb2MpIHsKKwljYXNlIFg4Nl9JT0NfUkRNU1JfUkVHUzoKKwkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpIHsKKwkJCWVyciA9IC1FQkFERjsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcmVncywgdXJlZ3MsIHNpemVvZiByZWdzKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCWVyciA9IHJkbXNyX3NhZmVfcmVnc19vbl9jcHUoY3B1LCByZWdzKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCQlpZiAoY29weV90b191c2VyKHVyZWdzLCAmcmVncywgc2l6ZW9mIHJlZ3MpKQorCQkJZXJyID0gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFg4Nl9JT0NfV1JNU1JfUkVHUzoKKwkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKSB7CisJCQllcnIgPSAtRUJBREY7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY29weV9mcm9tX3VzZXIoJnJlZ3MsIHVyZWdzLCBzaXplb2YgcmVncykpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQllcnIgPSB3cm1zcl9zYWZlX3JlZ3Nfb25fY3B1KGNwdSwgcmVncyk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwkJaWYgKGNvcHlfdG9fdXNlcih1cmVncywgJnJlZ3MsIHNpemVvZiByZWdzKSkKKwkJCWVyciA9IC1FRkFVTFQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1RUWTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBtc3Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwpAQCAtMTU3LDYgKzIwMCw4IEBACiAJLnJlYWQgPSBtc3JfcmVhZCwKIAkud3JpdGUgPSBtc3Jfd3JpdGUsCiAJLm9wZW4gPSBtc3Jfb3BlbiwKKwkudW5sb2NrZWRfaW9jdGwgPSBtc3JfaW9jdGwsCisJLmNvbXBhdF9pb2N0bCA9IG1zcl9pb2N0bCwKIH07CiAKIHN0YXRpYyBpbnQgX19jcHVpbml0IG1zcl9kZXZpY2VfY3JlYXRlKGludCBjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCmluZGV4IDcwZWM5YjkuLmY1YjBiNGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCkBAIC0zNjIsOCArMzYyLDkgQEAKICNlbmRpZgogCS53YmludmQgPSBuYXRpdmVfd2JpbnZkLAogCS5yZWFkX21zciA9IG5hdGl2ZV9yZWFkX21zcl9zYWZlLAotCS5yZWFkX21zcl9hbWQgPSBuYXRpdmVfcmVhZF9tc3JfYW1kX3NhZmUsCisJLnJkbXNyX3JlZ3MgPSBuYXRpdmVfcmRtc3Jfc2FmZV9yZWdzLAogCS53cml0ZV9tc3IgPSBuYXRpdmVfd3JpdGVfbXNyX3NhZmUsCisJLndybXNyX3JlZ3MgPSBuYXRpdmVfd3Jtc3Jfc2FmZV9yZWdzLAogCS5yZWFkX3RzYyA9IG5hdGl2ZV9yZWFkX3RzYywKIAkucmVhZF9wbWMgPSBuYXRpdmVfcmVhZF9wbWMsCiAJLnJlYWRfdHNjcCA9IG5hdGl2ZV9yZWFkX3RzY3AsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwppbmRleCBhZTEzZTM0Li42NGI4MzhlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKQEAgLTMsNiArMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hci5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgpAQCAtMzIsNyArMzMsMTQgQEAKIC8qIFNldCB0aGlzIHRvIDEgaWYgdGhlcmUgaXMgYSBIVyBJT01NVSBpbiB0aGUgc3lzdGVtICovCiBpbnQgaW9tbXVfZGV0ZWN0ZWQgX19yZWFkX21vc3RseSA9IDA7CiAKLWludCBpb21tdV9wYXNzX3Rocm91Z2g7CisvKgorICogVGhpcyB2YXJpYWJsZSBiZWNvbWVzIDEgaWYgaW9tbXU9cHQgaXMgcGFzc2VkIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgorICogSWYgdGhpcyB2YXJpYWJsZSBpcyAxLCBJT01NVSBpbXBsZW1lbnRhdGlvbnMgZG8gbm8gRE1BIHJhbnNsYXRpb24gZm9yCisgKiBkZXZpY2VzIGFuZCBhbGxvdyBldmVyeSBkZXZpY2UgdG8gYWNjZXNzIHRvIHdob2xlIHBoeXNpY2FsIG1lbW9yeS4gVGhpcyBpcworICogdXNlZnVsIGlmIGEgdXNlciB3YW50IHRvIHVzZSBhbiBJT01NVSBvbmx5IGZvciBLVk0gZGV2aWNlIGFzc2lnbm1lbnQgdG8KKyAqIGd1ZXN0cyBhbmQgbm90IGZvciBkcml2ZXIgZG1hIHRyYW5zbGF0aW9uLgorICovCitpbnQgaW9tbXVfcGFzc190aHJvdWdoIF9fcmVhZF9tb3N0bHk7CiAKIGRtYV9hZGRyX3QgYmFkX2RtYV9hZGRyZXNzIF9fcmVhZF9tb3N0bHkgPSAwOwogRVhQT1JUX1NZTUJPTChiYWRfZG1hX2FkZHJlc3MpOwpAQCAtODgsNiArOTYsMTEgQEAKIAlzaXplID0gcm91bmR1cChkbWEzMl9ib290bWVtX3NpemUsIGFsaWduKTsKIAlkbWEzMl9ib290bWVtX3B0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHNpemUsIGFsaWduLAogCQkJCSA1MTJVTEw8PDIwKTsKKwkvKgorCSAqIEttZW1sZWFrIHNob3VsZCBub3Qgc2NhbiB0aGlzIGJsb2NrIGFzIGl0IG1heSBub3QgYmUgbWFwcGVkIHZpYSB0aGUKKwkgKiBrZXJuZWwgZGlyZWN0IG1hcHBpbmcuCisJICovCisJa21lbWxlYWtfaWdub3JlKGRtYTMyX2Jvb3RtZW1fcHRyKTsKIAlpZiAoZG1hMzJfYm9vdG1lbV9wdHIpCiAJCWRtYTMyX2Jvb3RtZW1fc2l6ZSA9IHNpemU7CiAJZWxzZQpAQCAtMTQ3LDcgKzE2MCw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsKLQlpZiAoIWlzX2J1ZmZlcl9kbWFfY2FwYWJsZShkbWFfbWFzaywgYWRkciwgc2l6ZSkpIHsKKwlpZiAoYWRkciArIHNpemUgPiBkbWFfbWFzaykgewogCQlfX2ZyZWVfcGFnZXMocGFnZSwgZ2V0X29yZGVyKHNpemUpKTsKIAogCQlpZiAoZG1hX21hc2sgPCBETUFfQklUX01BU0soMzIpICYmICEoZmxhZyAmIEdGUF9ETUEpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jCmluZGV4IGQyZTU2YjguLjk4YTgyN2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jCkBAIC0xOTAsMTQgKzE5MCwxMyBAQAogc3RhdGljIGlubGluZSBpbnQKIG5lZWRfaW9tbXUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBzaXplKQogewotCXJldHVybiBmb3JjZV9pb21tdSB8fAotCQkhaXNfYnVmZmVyX2RtYV9jYXBhYmxlKCpkZXYtPmRtYV9tYXNrLCBhZGRyLCBzaXplKTsKKwlyZXR1cm4gZm9yY2VfaW9tbXUgfHwgIWRtYV9jYXBhYmxlKGRldiwgYWRkciwgc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBub25mb3JjZWRfaW9tbXUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBzaXplKQogewotCXJldHVybiAhaXNfYnVmZmVyX2RtYV9jYXBhYmxlKCpkZXYtPmRtYV9tYXNrLCBhZGRyLCBzaXplKTsKKwlyZXR1cm4gIWRtYV9jYXBhYmxlKGRldiwgYWRkciwgc2l6ZSk7CiB9CiAKIC8qIE1hcCBhIHNpbmdsZSBjb250aW51b3VzIHBoeXNpY2FsIGFyZWEgaW50byB0aGUgSU9NTVUuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11LmMKaW5kZXggNzFkNDEyYS4uYTM5MzNkNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1ub21tdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktbm9tbXUuYwpAQCAtMTQsNyArMTQsNyBAQAogc3RhdGljIGludAogY2hlY2tfYWRkcihjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBidXMsIHNpemVfdCBzaXplKQogewotCWlmIChod2RldiAmJiAhaXNfYnVmZmVyX2RtYV9jYXBhYmxlKCpod2Rldi0+ZG1hX21hc2ssIGJ1cywgc2l6ZSkpIHsKKwlpZiAoaHdkZXYgJiYgIWRtYV9jYXBhYmxlKGh3ZGV2LCBidXMsIHNpemUpKSB7CiAJCWlmICgqaHdkZXYtPmRtYV9tYXNrID49IERNQV9CSVRfTUFTSygzMikpCiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAibm9tbXVfJXM6IG92ZXJmbG93ICVMeCslenUgb2YgZGV2aWNlIG1hc2sgJUx4XG4iLApAQCAtNzksMTIgKzc5LDI5IEBACiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgZ2V0X29yZGVyKHNpemUpKTsKIH0KIAorc3RhdGljIHZvaWQgbm9tbXVfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplLAorCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKK30KKworCitzdGF0aWMgdm9pZCBub21tdV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlmbHVzaF93cml0ZV9idWZmZXJzKCk7Cit9CisKIHN0cnVjdCBkbWFfbWFwX29wcyBub21tdV9kbWFfb3BzID0gewotCS5hbGxvY19jb2hlcmVudAk9IGRtYV9nZW5lcmljX2FsbG9jX2NvaGVyZW50LAotCS5mcmVlX2NvaGVyZW50CT0gbm9tbXVfZnJlZV9jb2hlcmVudCwKLQkubWFwX3NnCQk9IG5vbW11X21hcF9zZywKLQkubWFwX3BhZ2UJPSBub21tdV9tYXBfcGFnZSwKLQkuaXNfcGh5cwk9IDEsCisJLmFsbG9jX2NvaGVyZW50CQk9IGRtYV9nZW5lcmljX2FsbG9jX2NvaGVyZW50LAorCS5mcmVlX2NvaGVyZW50CQk9IG5vbW11X2ZyZWVfY29oZXJlbnQsCisJLm1hcF9zZwkJCT0gbm9tbXVfbWFwX3NnLAorCS5tYXBfcGFnZQkJPSBub21tdV9tYXBfcGFnZSwKKwkuc3luY19zaW5nbGVfZm9yX2RldmljZSA9IG5vbW11X3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UsCisJLnN5bmNfc2dfZm9yX2RldmljZQk9IG5vbW11X3N5bmNfc2dfZm9yX2RldmljZSwKKwkuaXNfcGh5cwkJPSAxLAogfTsKIAogdm9pZCBfX2luaXQgbm9faW9tbXVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1zd2lvdGxiLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGIuYwppbmRleCA2YWY5NmVlLi5lOGEzNTAxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGIuYwpAQCAtMTMsMzEgKzEzLDYgQEAKIAogaW50IHN3aW90bGIgX19yZWFkX21vc3RseTsKIAotdm9pZCAqIF9faW5pdCBzd2lvdGxiX2FsbG9jX2Jvb3Qoc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgbnNsYWJzKQotewotCXJldHVybiBhbGxvY19ib290bWVtX2xvd19wYWdlcyhzaXplKTsKLX0KLQotdm9pZCAqc3dpb3RsYl9hbGxvYyh1bnNpZ25lZCBvcmRlciwgdW5zaWduZWQgbG9uZyBuc2xhYnMpCi17Ci0JcmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfRE1BIHwgX19HRlBfTk9XQVJOLCBvcmRlcik7Ci19Ci0KLWRtYV9hZGRyX3Qgc3dpb3RsYl9waHlzX3RvX2J1cyhzdHJ1Y3QgZGV2aWNlICpod2RldiwgcGh5c19hZGRyX3QgcGFkZHIpCi17Ci0JcmV0dXJuIHBhZGRyOwotfQotCi1waHlzX2FkZHJfdCBzd2lvdGxiX2J1c190b19waHlzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGJhZGRyKQotewotCXJldHVybiBiYWRkcjsKLX0KLQotaW50IF9fd2VhayBzd2lvdGxiX2FyY2hfcmFuZ2VfbmVlZHNfbWFwcGluZyhwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkICp4ODZfc3dpb3RsYl9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCiAJCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggNTlmNDUyNC4uNGNmNzk1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC02MSw5ICs2MSw2IEBACiAKIGFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpIF9fYXNtX18oInJldF9mcm9tX2ZvcmsiKTsKIAotREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIGN1cnJlbnRfdGFzaykgPSAmaW5pdF90YXNrOwotRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGN1cnJlbnRfdGFzayk7Ci0KIC8qCiAgKiBSZXR1cm4gc2F2ZWQgUEMgb2YgYSBibG9ja2VkIHRocmVhZC4KICAqLwpAQCAtMzUwLDE0ICszNDcsMjEgQEAKIAkJCQkgKm5leHQgPSAmbmV4dF9wLT50aHJlYWQ7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7CisJYm9vbCBwcmVsb2FkX2ZwdTsKIAogCS8qIG5ldmVyIHB1dCBhIHByaW50ayBpbiBfX3N3aXRjaF90by4uLiBwcmludGsoKSBjYWxscyB3YWtlX3VwKigpIGluZGlyZWN0bHkgKi8KIAorCS8qCisJICogSWYgdGhlIHRhc2sgaGFzIHVzZWQgZnB1IHRoZSBsYXN0IDUgdGltZXNsaWNlcywganVzdCBkbyBhIGZ1bGwKKwkgKiByZXN0b3JlIG9mIHRoZSBtYXRoIHN0YXRlIGltbWVkaWF0ZWx5IHRvIGF2b2lkIHRoZSB0cmFwOyB0aGUKKwkgKiBjaGFuY2VzIG9mIG5lZWRpbmcgRlBVIHNvb24gYXJlIG9idmlvdXNseSBoaWdoIG5vdworCSAqLworCXByZWxvYWRfZnB1ID0gdHNrX3VzZWRfbWF0aChuZXh0X3ApICYmIG5leHRfcC0+ZnB1X2NvdW50ZXIgPiA1OworCiAJX191bmxhenlfZnB1KHByZXZfcCk7CiAKLQogCS8qIHdlJ3JlIGdvaW5nIHRvIHVzZSB0aGlzIHNvb24sIGFmdGVyIGEgZmV3IGV4cGVuc2l2ZSB0aGluZ3MgKi8KLQlpZiAobmV4dF9wLT5mcHVfY291bnRlciA+IDUpCisJaWYgKHByZWxvYWRfZnB1KQogCQlwcmVmZXRjaChuZXh0LT54c3RhdGUpOwogCiAJLyoKQEAgLTM5OCw2ICs0MDIsMTEgQEAKIAkJICAgICB0YXNrX3RocmVhZF9pbmZvKG5leHRfcCktPmZsYWdzICYgX1RJRl9XT1JLX0NUWFNXX05FWFQpKQogCQlfX3N3aXRjaF90b194dHJhKHByZXZfcCwgbmV4dF9wLCB0c3MpOwogCisJLyogSWYgd2UncmUgZ29pbmcgdG8gcHJlbG9hZCB0aGUgZnB1IGNvbnRleHQsIG1ha2Ugc3VyZSBjbHRzCisJICAgaXMgcnVuIHdoaWxlIHdlJ3JlIGJhdGNoaW5nIHRoZSBjcHUgc3RhdGUgdXBkYXRlcy4gKi8KKwlpZiAocHJlbG9hZF9mcHUpCisJCWNsdHMoKTsKKwogCS8qCiAJICogTGVhdmUgbGF6eSBtb2RlLCBmbHVzaGluZyBhbnkgaHlwZXJjYWxscyBtYWRlIGhlcmUuCiAJICogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHJlc3RvcmluZyBUTFMgc2VnbWVudHMgc28KQEAgLTQwNywxNSArNDE2LDggQEAKIAkgKi8KIAlhcmNoX2VuZF9jb250ZXh0X3N3aXRjaChuZXh0X3ApOwogCi0JLyogSWYgdGhlIHRhc2sgaGFzIHVzZWQgZnB1IHRoZSBsYXN0IDUgdGltZXNsaWNlcywganVzdCBkbyBhIGZ1bGwKLQkgKiByZXN0b3JlIG9mIHRoZSBtYXRoIHN0YXRlIGltbWVkaWF0ZWx5IHRvIGF2b2lkIHRoZSB0cmFwOyB0aGUKLQkgKiBjaGFuY2VzIG9mIG5lZWRpbmcgRlBVIHNvb24gYXJlIG9idmlvdXNseSBoaWdoIG5vdwotCSAqCi0JICogdHNrX3VzZWRfbWF0aCgpIGNoZWNrcyBwcmV2ZW50IGNhbGxpbmcgbWF0aF9zdGF0ZV9yZXN0b3JlKCksCi0JICogd2hpY2ggY2FuIHNsZWVwIGluIHRoZSBjYXNlIG9mICF0c2tfdXNlZF9tYXRoKCkKLQkgKi8KLQlpZiAodHNrX3VzZWRfbWF0aChuZXh0X3ApICYmIG5leHRfcC0+ZnB1X2NvdW50ZXIgPiA1KQotCQltYXRoX3N0YXRlX3Jlc3RvcmUoKTsKKwlpZiAocHJlbG9hZF9mcHUpCisJCV9fbWF0aF9zdGF0ZV9yZXN0b3JlKCk7CiAKIAkvKgogCSAqIFJlc3RvcmUgJWdzIGlmIG5lZWRlZCAod2hpY2ggaXMgY29tbW9uKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggZWJlZmI1NC4uYWQ1MzViNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCkBAIC01NSw5ICs1NSw2IEBACiAKIGFzbWxpbmthZ2UgZXh0ZXJuIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTsKIAotREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIGN1cnJlbnRfdGFzaykgPSAmaW5pdF90YXNrOwotRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGN1cnJlbnRfdGFzayk7Ci0KIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIG9sZF9yc3ApOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGNoYXIsIGlzX2lkbGUpOwogCkBAIC0zODYsOSArMzgzLDE3IEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7CiAJdW5zaWduZWQgZnNpbmRleCwgZ3NpbmRleDsKKwlib29sIHByZWxvYWRfZnB1OworCisJLyoKKwkgKiBJZiB0aGUgdGFzayBoYXMgdXNlZCBmcHUgdGhlIGxhc3QgNSB0aW1lc2xpY2VzLCBqdXN0IGRvIGEgZnVsbAorCSAqIHJlc3RvcmUgb2YgdGhlIG1hdGggc3RhdGUgaW1tZWRpYXRlbHkgdG8gYXZvaWQgdGhlIHRyYXA7IHRoZQorCSAqIGNoYW5jZXMgb2YgbmVlZGluZyBGUFUgc29vbiBhcmUgb2J2aW91c2x5IGhpZ2ggbm93CisJICovCisJcHJlbG9hZF9mcHUgPSB0c2tfdXNlZF9tYXRoKG5leHRfcCkgJiYgbmV4dF9wLT5mcHVfY291bnRlciA+IDU7CiAKIAkvKiB3ZSdyZSBnb2luZyB0byB1c2UgdGhpcyBzb29uLCBhZnRlciBhIGZldyBleHBlbnNpdmUgdGhpbmdzICovCi0JaWYgKG5leHRfcC0+ZnB1X2NvdW50ZXIgPiA1KQorCWlmIChwcmVsb2FkX2ZwdSkKIAkJcHJlZmV0Y2gobmV4dC0+eHN0YXRlKTsKIAogCS8qCkBAIC00MTksNiArNDI0LDEzIEBACiAKIAlsb2FkX1RMUyhuZXh0LCBjcHUpOwogCisJLyogTXVzdCBiZSBhZnRlciBEUyByZWxvYWQgKi8KKwl1bmxhenlfZnB1KHByZXZfcCk7CisKKwkvKiBNYWtlIHN1cmUgY3B1IGlzIHJlYWR5IGZvciBuZXcgY29udGV4dCAqLworCWlmIChwcmVsb2FkX2ZwdSkKKwkJY2x0cygpOworCiAJLyoKIAkgKiBMZWF2ZSBsYXp5IG1vZGUsIGZsdXNoaW5nIGFueSBoeXBlcmNhbGxzIG1hZGUgaGVyZS4KIAkgKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgcmVzdG9yaW5nIFRMUyBzZWdtZW50cyBzbwpAQCAtNDU5LDkgKzQ3MSw2IEBACiAJCXdybXNybChNU1JfS0VSTkVMX0dTX0JBU0UsIG5leHQtPmdzKTsKIAlwcmV2LT5nc2luZGV4ID0gZ3NpbmRleDsKIAotCS8qIE11c3QgYmUgYWZ0ZXIgRFMgcmVsb2FkICovCi0JdW5sYXp5X2ZwdShwcmV2X3ApOwotCiAJLyoKIAkgKiBTd2l0Y2ggdGhlIFBEQSBhbmQgRlBVIGNvbnRleHRzLgogCSAqLwpAQCAtNDgwLDE1ICs0ODksMTIgQEAKIAkJICAgICB0YXNrX3RocmVhZF9pbmZvKHByZXZfcCktPmZsYWdzICYgX1RJRl9XT1JLX0NUWFNXX1BSRVYpKQogCQlfX3N3aXRjaF90b194dHJhKHByZXZfcCwgbmV4dF9wLCB0c3MpOwogCi0JLyogSWYgdGhlIHRhc2sgaGFzIHVzZWQgZnB1IHRoZSBsYXN0IDUgdGltZXNsaWNlcywganVzdCBkbyBhIGZ1bGwKLQkgKiByZXN0b3JlIG9mIHRoZSBtYXRoIHN0YXRlIGltbWVkaWF0ZWx5IHRvIGF2b2lkIHRoZSB0cmFwOyB0aGUKLQkgKiBjaGFuY2VzIG9mIG5lZWRpbmcgRlBVIHNvb24gYXJlIG9idmlvdXNseSBoaWdoIG5vdwotCSAqCi0JICogdHNrX3VzZWRfbWF0aCgpIGNoZWNrcyBwcmV2ZW50IGNhbGxpbmcgbWF0aF9zdGF0ZV9yZXN0b3JlKCksCi0JICogd2hpY2ggY2FuIHNsZWVwIGluIHRoZSBjYXNlIG9mICF0c2tfdXNlZF9tYXRoKCkKKwkvKgorCSAqIFByZWxvYWQgdGhlIEZQVSBjb250ZXh0LCBub3cgdGhhdCB3ZSd2ZSBkZXRlcm1pbmVkIHRoYXQgdGhlCisJICogdGFzayBpcyBsaWtlbHkgdG8gYmUgdXNpbmcgaXQuIAogCSAqLwotCWlmICh0c2tfdXNlZF9tYXRoKG5leHRfcCkgJiYgbmV4dF9wLT5mcHVfY291bnRlciA+IDUpCi0JCW1hdGhfc3RhdGVfcmVzdG9yZSgpOworCWlmIChwcmVsb2FkX2ZwdSkKKwkJX19tYXRoX3N0YXRlX3Jlc3RvcmUoKTsKIAlyZXR1cm4gcHJldl9wOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMDllY2JkZS4uOGQ3ZDVjOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwpAQCAtMzUsMTAgKzM1LDExIEBACiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2RzLmg+CiAKLSNpbmNsdWRlIDx0cmFjZS9zeXNjYWxsLmg+Ci0KICNpbmNsdWRlICJ0bHMuaCIKIAorI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3N5c2NhbGxzLmg+CisKIGVudW0geDg2X3JlZ3NldCB7CiAJUkVHU0VUX0dFTkVSQUwsCiAJUkVHU0VUX0ZQLApAQCAtMTQ5Nyw4ICsxNDk4LDggQEAKIAkgICAgdHJhY2Vob29rX3JlcG9ydF9zeXNjYWxsX2VudHJ5KHJlZ3MpKQogCQlyZXQgPSAtMUw7CiAKLQlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9GVFJBQ0UpKSkKLQkJZnRyYWNlX3N5c2NhbGxfZW50ZXIocmVncyk7CisJaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0VQT0lOVCkpKQorCQl0cmFjZV9zeXNfZW50ZXIocmVncywgcmVncy0+b3JpZ19heCk7CiAKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpIHsKIAkJaWYgKElTX0lBMzIpCkBAIC0xNTIzLDggKzE1MjQsOCBAQAogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKIAkJYXVkaXRfc3lzY2FsbF9leGl0KEFVRElUU0NfUkVTVUxUKHJlZ3MtPmF4KSwgcmVncy0+YXgpOwogCi0JaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfRlRSQUNFKSkpCi0JCWZ0cmFjZV9zeXNjYWxsX2V4aXQocmVncyk7CisJaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0VQT0lOVCkpKQorCQl0cmFjZV9zeXNfZXhpdChyZWdzLCByZWdzLT5heCk7CiAKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCiAJCXRyYWNlaG9va19yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCmluZGV4IGEwNmU4ZDEuLjI3MzQ5ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9lZmkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC90Ym9vdC5oPgogI2luY2x1ZGUgPGFjcGkvcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KQEAgLTUwOCw2ICs1MDksOCBAQAogCWlmIChyZWJvb3RfZW1lcmdlbmN5KQogCQllbWVyZ2VuY3lfdm14X2Rpc2FibGVfYWxsKCk7CiAKKwl0Ym9vdF9zaHV0ZG93bihUQl9TSFVURE9XTl9SRUJPT1QpOworCiAJLyogVGVsbCB0aGUgQklPUyBpZiB3ZSB3YW50IGNvbGQgb3Igd2FybSByZWJvb3QgKi8KIAkqKCh1bnNpZ25lZCBzaG9ydCAqKV9fdmEoMHg0NzIpKSA9IHJlYm9vdF9tb2RlOwogCkBAIC02MzQsNiArNjM3LDggQEAKIAkvKiBzdG9wIG90aGVyIGNwdXMgYW5kIGFwaWNzICovCiAJbWFjaGluZV9zaHV0ZG93bigpOwogCisJdGJvb3Rfc2h1dGRvd24oVEJfU0hVVERPV05fSEFMVCk7CisKIAkvKiBzdG9wIHRoaXMgY3B1ICovCiAJc3RvcF90aGlzX2NwdShOVUxMKTsKIH0KQEAgLTY0NSw2ICs2NTAsOCBAQAogCQkJbWFjaGluZV9zaHV0ZG93bigpOwogCQlwbV9wb3dlcl9vZmYoKTsKIAl9CisJLyogYSBmYWxsYmFjayBpbiBjYXNlIHRoZXJlIGlzIG5vIFBNIGluZm8gYXZhaWxhYmxlICovCisJdGJvb3Rfc2h1dGRvd24oVEJfU0hVVERPV05fSEFMVCk7CiB9CiAKIHN0cnVjdCBtYWNoaW5lX29wcyBtYWNoaW5lX29wcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggNjNmMzJkMi4uMTlmMTVjNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTY2LDYgKzY2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KKyNpbmNsdWRlIDxsaW51eC90Ym9vdC5oPgogCiAjaW5jbHVkZSA8dmlkZW8vZWRpZC5oPgogCkBAIC03MTEsNiArNzEyLDIxIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiQ29tbWFuZCBsaW5lOiAlc1xuIiwgYm9vdF9jb21tYW5kX2xpbmUpOwogI2VuZGlmCiAKKwlzdHJsY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKKwkqY21kbGluZV9wID0gY29tbWFuZF9saW5lOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS8qCisJICogTXVzdCBjYWxsIHRoaXMgdHdpY2U6IE9uY2UganVzdCB0byBkZXRlY3Qgd2hldGhlciBoYXJkd2FyZSBkb2Vzbid0CisJICogc3VwcG9ydCBOWCAoc28gdGhhdCB0aGUgZWFybHkgRUhDSSBkZWJ1ZyBjb25zb2xlIHNldHVwIGNhbiBzYWZlbHkKKwkgKiBjYWxsIHNldF9maXhtYXAoKSwgYW5kIHRoZW4gYWdhaW4gYWZ0ZXIgcGFyc2luZyBlYXJseSBwYXJhbWV0ZXJzIHRvCisJICogaG9ub3IgdGhlIHJlc3BlY3RpdmUgY29tbWFuZCBsaW5lIG9wdGlvbi4KKwkgKi8KKwljaGVja19lZmVyKCk7CisjZW5kaWYKKworCXBhcnNlX2Vhcmx5X3BhcmFtKCk7CisKIAkvKiBWTUkgbWF5IHJlbG9jYXRlIHRoZSBmaXhtYXA7IGRvIHRoaXMgYmVmb3JlIHRvdWNoaW5nIGlvcmVtYXAgYXJlYSAqLwogCXZtaV9pbml0KCk7CiAKQEAgLTc5MywxMSArODA5LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLQlzdHJsY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKLQkqY21kbGluZV9wID0gY29tbWFuZF9saW5lOwotCi0JcGFyc2VfZWFybHlfcGFyYW0oKTsKLQogI2lmZGVmIENPTkZJR19YODZfNjQKIAljaGVja19lZmVyKCk7CiAjZW5kaWYKQEAgLTk3Nyw2ICs5ODgsOCBAQAogCXBhcmF2aXJ0X3BhZ2V0YWJsZV9zZXR1cF9kb25lKHN3YXBwZXJfcGdfZGlyKTsKIAlwYXJhdmlydF9wb3N0X2FsbG9jYXRvcl9pbml0KCk7CiAKKwl0Ym9vdF9wcm9iZSgpOworCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCW1hcF92c3lzY2FsbCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKaW5kZXggMDdkODE5MS4uZDU1OWFmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYwpAQCAtNTUsNiArNTUsNyBAQAogI2RlZmluZSBQRVJDUFVfRklSU1RfQ0hVTktfUkVTRVJWRQkwCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19YODZfMzIKIC8qKgogICogcGNwdV9uZWVkX251bWEgLSBkZXRlcm1pbmUgcGVyY3B1IGFsbG9jYXRpb24gbmVlZHMgdG8gY29uc2lkZXIgTlVNQQogICoKQEAgLTgzLDYgKzg0LDcgQEAKICNlbmRpZgogCXJldHVybiBmYWxzZTsKIH0KKyNlbmRpZgogCiAvKioKICAqIHBjcHVfYWxsb2NfYm9vdG1lbSAtIE5VTUEgZnJpZW5kbHkgYWxsb2NfYm9vdG1lbSB3cmFwcGVyIGZvciBwZXJjcHUKQEAgLTEyNCwzMDggKzEyNiwzNSBAQAogfQogCiAvKgotICogTGFyZ2UgcGFnZSByZW1hcCBhbGxvY2F0b3IKLSAqCi0gKiBUaGlzIGFsbG9jYXRvciB1c2VzIFBNRCBwYWdlIGFzIHVuaXQuICBBIFBNRCBwYWdlIGlzIGFsbG9jYXRlZCBmb3IKLSAqIGVhY2ggY3B1IGFuZCBlYWNoIGlzIHJlbWFwcGVkIGludG8gdm1hbGxvYyBhcmVhIHVzaW5nIFBNRCBtYXBwaW5nLgotICogQXMgUE1EIHBhZ2UgaXMgcXVpdGUgbGFyZ2UsIG9ubHkgcGFydCBvZiBpdCBpcyB1c2VkIGZvciB0aGUgZmlyc3QKLSAqIGNodW5rLiAgVW51c2VkIHBhcnQgaXMgcmV0dXJuZWQgdG8gdGhlIGJvb3RtZW0gYWxsb2NhdG9yLgotICoKLSAqIFNvLCB0aGUgUE1EIHBhZ2VzIGFyZSBtYXBwZWQgdHdpY2UgLSBvbmNlIHRvIHRoZSBwaHlzaWNhbCBtYXBwaW5nCi0gKiBhbmQgdG8gdGhlIHZtYWxsb2MgYXJlYSBmb3IgdGhlIGZpcnN0IHBlcmNwdSBjaHVuay4gIFRoZSBkb3VibGUKLSAqIG1hcHBpbmcgZG9lcyBhZGQgb25lIG1vcmUgUE1EIFRMQiBlbnRyeSBwcmVzc3VyZSBidXQgc3RpbGwgaXMgbXVjaAotICogYmV0dGVyIHRoYW4gb25seSB1c2luZyA0ayBtYXBwaW5ncyB3aGlsZSBzdGlsbCBiZWluZyBOVU1BIGZyaWVuZGx5LgorICogSGVscGVycyBmb3IgZmlyc3QgY2h1bmsgbWVtb3J5IGFsbG9jYXRpb24KICAqLworc3RhdGljIHZvaWQgKiBfX2luaXQgcGNwdV9mY19hbGxvYyh1bnNpZ25lZCBpbnQgY3B1LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKQoreworCXJldHVybiBwY3B1X2FsbG9jX2Jvb3RtZW0oY3B1LCBzaXplLCBhbGlnbik7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwY3B1X2ZjX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKwlmcmVlX2Jvb3RtZW0oX19wYShwdHIpLCBzaXplKTsKK30KKworc3RhdGljIGludCBfX2luaXQgcGNwdV9jcHVfZGlzdGFuY2UodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCB0bykKK3sKICNpZmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwotc3RydWN0IHBjcHVsX2VudCB7Ci0JdW5zaWduZWQgaW50CWNwdTsKLQl2b2lkCQkqcHRyOwotfTsKLQotc3RhdGljIHNpemVfdCBwY3B1bF9zaXplOwotc3RhdGljIHN0cnVjdCBwY3B1bF9lbnQgKnBjcHVsX21hcDsKLXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0IHBjcHVsX3ZtOwotCi1zdGF0aWMgc3RydWN0IHBhZ2UgKiBfX2luaXQgcGNwdWxfZ2V0X3BhZ2UodW5zaWduZWQgaW50IGNwdSwgaW50IHBhZ2VubykKLXsKLQlzaXplX3Qgb2ZmID0gKHNpemVfdClwYWdlbm8gPDwgUEFHRV9TSElGVDsKLQotCWlmIChvZmYgPj0gcGNwdWxfc2l6ZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gdmlydF90b19wYWdlKHBjcHVsX21hcFtjcHVdLnB0ciArIG9mZik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IF9faW5pdCBzZXR1cF9wY3B1X2xwYWdlKHNpemVfdCBzdGF0aWNfc2l6ZSwgYm9vbCBjaG9zZW4pCi17Ci0Jc2l6ZV90IG1hcF9zaXplLCBkeW5fc2l6ZTsKLQl1bnNpZ25lZCBpbnQgY3B1OwotCWludCBpLCBqOwotCXNzaXplX3QgcmV0OwotCi0JaWYgKCFjaG9zZW4pIHsKLQkJc2l6ZV90IHZtX3NpemUgPSBWTUFMTE9DX0VORCAtIFZNQUxMT0NfU1RBUlQ7Ci0JCXNpemVfdCB0b3Rfc2l6ZSA9IG5yX2NwdV9pZHMgKiBQTURfU0laRTsKLQotCQkvKiBvbiBub24tTlVNQSwgZW1iZWRkaW5nIGlzIGJldHRlciAqLwotCQlpZiAoIXBjcHVfbmVlZF9udW1hKCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBkb24ndCBjb25zdW1lIG1vcmUgdGhhbiAyMCUgb2Ygdm1hbGxvYyBhcmVhICovCi0JCWlmICh0b3Rfc2l6ZSA+IHZtX3NpemUgLyA1KSB7Ci0JCQlwcl9pbmZvKCJQRVJDUFU6IHRvbyBsYXJnZSBjaHVuayBzaXplICV6dU1CIGZvciAiCi0JCQkJImxhcmdlIHBhZ2UgcmVtYXBcbiIsIHRvdF9zaXplID4+IDIwKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JLyogbmVlZCBQU0UgKi8KLQlpZiAoIWNwdV9oYXNfcHNlKSB7Ci0JCXByX3dhcm5pbmcoIlBFUkNQVTogbHBhZ2UgYWxsb2NhdG9yIHJlcXVpcmVzIFBTRVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0JICogQ3VycmVudGx5IHN1cHBvcnRzIG9ubHkgc2luZ2xlIHBhZ2UuICBTdXBwb3J0aW5nIG11bHRpcGxlCi0JICogcGFnZXMgd29uJ3QgYmUgdG9vIGRpZmZpY3VsdCBpZiBpdCBldmVyIGJlY29tZXMgbmVjZXNzYXJ5LgotCSAqLwotCXBjcHVsX3NpemUgPSBQRk5fQUxJR04oc3RhdGljX3NpemUgKyBQRVJDUFVfTU9EVUxFX1JFU0VSVkUgKwotCQkJICAgICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUpOwotCWlmIChwY3B1bF9zaXplID4gUE1EX1NJWkUpIHsKLQkJcHJfd2FybmluZygiUEVSQ1BVOiBzdGF0aWMgZGF0YSBpcyBsYXJnZXIgdGhhbiBsYXJnZSBwYWdlLCAiCi0JCQkgICAiY2FuJ3QgdXNlIGxhcmdlIHBhZ2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JZHluX3NpemUgPSBwY3B1bF9zaXplIC0gc3RhdGljX3NpemUgLSBQRVJDUFVfRklSU1RfQ0hVTktfUkVTRVJWRTsKLQotCS8qIGFsbG9jYXRlIHBvaW50ZXIgYXJyYXkgYW5kIGFsbG9jIGxhcmdlIHBhZ2VzICovCi0JbWFwX3NpemUgPSBQRk5fQUxJR04obnJfY3B1X2lkcyAqIHNpemVvZihwY3B1bF9tYXBbMF0pKTsKLQlwY3B1bF9tYXAgPSBhbGxvY19ib290bWVtKG1hcF9zaXplKTsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJcGNwdWxfbWFwW2NwdV0uY3B1ID0gY3B1OwotCQlwY3B1bF9tYXBbY3B1XS5wdHIgPSBwY3B1X2FsbG9jX2Jvb3RtZW0oY3B1LCBQTURfU0laRSwKLQkJCQkJCQlQTURfU0laRSk7Ci0JCWlmICghcGNwdWxfbWFwW2NwdV0ucHRyKSB7Ci0JCQlwcl93YXJuaW5nKCJQRVJDUFU6IGZhaWxlZCB0byBhbGxvY2F0ZSBsYXJnZSBwYWdlICIKLQkJCQkgICAiZm9yIGNwdSV1XG4iLCBjcHUpOwotCQkJZ290byBlbm9tZW07Ci0JCX0KLQotCQkvKgotCQkgKiBPbmx5IHVzZSBwY3B1bF9zaXplIGJ5dGVzIGFuZCBnaXZlIGJhY2sgdGhlIHJlc3QuCi0JCSAqCi0JCSAqIEluZ286IFRoZSAyTUIgdXAtcm91bmRpbmcgYm9vdG1lbSBpcyBuZWVkZWQgdG8gbWFrZQotCQkgKiBzdXJlIHRoZSBwYXJ0aWFsIDJNQiBwYWdlIGlzIHN0aWxsIGZ1bGx5IFJBTSAtIGl0J3MKLQkJICogbm90IHdlbGwtc3BlY2lmaWVkIHRvIGhhdmUgYSBQQVQtaW5jb21wYXRpYmxlIGFyZWEKLQkJICogKHVubWFwcGVkIFJBTSwgZGV2aWNlIG1lbW9yeSwgZXRjLikgaW4gdGhhdCBob2xlLgotCQkgKi8KLQkJZnJlZV9ib290bWVtKF9fcGEocGNwdWxfbWFwW2NwdV0ucHRyICsgcGNwdWxfc2l6ZSksCi0JCQkgICAgIFBNRF9TSVpFIC0gcGNwdWxfc2l6ZSk7Ci0KLQkJbWVtY3B5KHBjcHVsX21hcFtjcHVdLnB0ciwgX19wZXJfY3B1X2xvYWQsIHN0YXRpY19zaXplKTsKLQl9Ci0KLQkvKiBhbGxvY2F0ZSBhZGRyZXNzIGFuZCBtYXAgKi8KLQlwY3B1bF92bS5mbGFncyA9IFZNX0FMTE9DOwotCXBjcHVsX3ZtLnNpemUgPSBucl9jcHVfaWRzICogUE1EX1NJWkU7Ci0Jdm1fYXJlYV9yZWdpc3Rlcl9lYXJseSgmcGNwdWxfdm0sIFBNRF9TSVpFKTsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJcG1kX3QgKnBtZCwgcG1kX3Y7Ci0KLQkJcG1kID0gcG9wdWxhdGVfZXh0cmFfcG1kKCh1bnNpZ25lZCBsb25nKXBjcHVsX3ZtLmFkZHIgKwotCQkJCQkgY3B1ICogUE1EX1NJWkUpOwotCQlwbWRfdiA9IHBmbl9wbWQocGFnZV90b19wZm4odmlydF90b19wYWdlKHBjcHVsX21hcFtjcHVdLnB0cikpLAotCQkJCVBBR0VfS0VSTkVMX0xBUkdFKTsKLQkJc2V0X3BtZChwbWQsIHBtZF92KTsKLQl9Ci0KLQkvKiB3ZSdyZSByZWFkeSwgY29tbWl0ICovCi0JcHJfaW5mbygiUEVSQ1BVOiBSZW1hcHBlZCBhdCAlcCB3aXRoIGxhcmdlIHBhZ2VzLCBzdGF0aWMgZGF0YSAiCi0JCSIlenUgYnl0ZXNcbiIsIHBjcHVsX3ZtLmFkZHIsIHN0YXRpY19zaXplKTsKLQotCXJldCA9IHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsocGNwdWxfZ2V0X3BhZ2UsIHN0YXRpY19zaXplLAotCQkJCSAgICAgUEVSQ1BVX0ZJUlNUX0NIVU5LX1JFU0VSVkUsIGR5bl9zaXplLAotCQkJCSAgICAgUE1EX1NJWkUsIHBjcHVsX3ZtLmFkZHIsIE5VTEwpOwotCi0JLyogc29ydCBwY3B1bF9tYXAgYXJyYXkgZm9yIHBjcHVfbHBhZ2VfcmVtYXBwZWQoKSAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9jcHVfaWRzIC0gMTsgaSsrKQotCQlmb3IgKGogPSBpICsgMTsgaiA8IG5yX2NwdV9pZHM7IGorKykKLQkJCWlmIChwY3B1bF9tYXBbaV0ucHRyID4gcGNwdWxfbWFwW2pdLnB0cikgewotCQkJCXN0cnVjdCBwY3B1bF9lbnQgdG1wID0gcGNwdWxfbWFwW2ldOwotCQkJCXBjcHVsX21hcFtpXSA9IHBjcHVsX21hcFtqXTsKLQkJCQlwY3B1bF9tYXBbal0gPSB0bXA7Ci0JCQl9Ci0KLQlyZXR1cm4gcmV0OwotCi1lbm9tZW06Ci0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKLQkJaWYgKHBjcHVsX21hcFtjcHVdLnB0cikKLQkJCWZyZWVfYm9vdG1lbShfX3BhKHBjcHVsX21hcFtjcHVdLnB0ciksIHBjcHVsX3NpemUpOwotCWZyZWVfYm9vdG1lbShfX3BhKHBjcHVsX21hcCksIG1hcF9zaXplKTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotLyoqCi0gKiBwY3B1X2xwYWdlX3JlbWFwcGVkIC0gZGV0ZXJtaW5lIHdoZXRoZXIgYSBrYWRkciBpcyBpbiBwY3B1bCByZWN5Y2xlZCBhcmVhCi0gKiBAa2FkZHI6IHRoZSBrZXJuZWwgYWRkcmVzcyBpbiBxdWVzdGlvbgotICoKLSAqIERldGVybWluZSB3aGV0aGVyIEBrYWRkciBmYWxscyBpbiB0aGUgcGNwdWwgcmVjeWNsZWQgYXJlYS4gIFRoaXMgaXMKLSAqIHVzZWQgYnkgcGFnZWF0dHIgdG8gZGV0ZWN0IFZNIGFsaWFzZXMgYW5kIGJyZWFrIHVwIHRoZSBwY3B1IFBNRAotICogbWFwcGluZyBzdWNoIHRoYXQgdGhlIHNhbWUgcGh5c2ljYWwgcGFnZSBpcyBub3QgbWFwcGVkIHVuZGVyCi0gKiBkaWZmZXJlbnQgYXR0cmlidXRlcy4KLSAqCi0gKiBUaGUgcmVjeWNsZWQgYXJlYSBpcyBhbHdheXMgYXQgdGhlIHRhaWwgb2YgYSBwYXJ0aWFsbHkgdXNlZCBQTUQKLSAqIHBhZ2UuCi0gKgotICogUkVUVVJOUzoKLSAqIEFkZHJlc3Mgb2YgY29ycmVzcG9uZGluZyByZW1hcHBlZCBwY3B1IGFkZHJlc3MgaWYgbWF0Y2ggaXMgZm91bmQ7Ci0gKiBvdGhlcndpc2UsIE5VTEwuCi0gKi8KLXZvaWQgKnBjcHVfbHBhZ2VfcmVtYXBwZWQodm9pZCAqa2FkZHIpCi17Ci0Jdm9pZCAqcG1kX2FkZHIgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZylrYWRkciAmIFBNRF9NQVNLKTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9ICh1bnNpZ25lZCBsb25nKWthZGRyICYgflBNRF9NQVNLOwotCWludCBsZWZ0ID0gMCwgcmlnaHQgPSBucl9jcHVfaWRzIC0gMTsKLQlpbnQgcG9zOwotCi0JLyogcGNwdWwgaW4gdXNlIGF0IGFsbD8gKi8KLQlpZiAoIXBjcHVsX21hcCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBva2F5LCBwZXJmb3JtIGJpbmFyeSBzZWFyY2ggKi8KLQl3aGlsZSAobGVmdCA8PSByaWdodCkgewotCQlwb3MgPSAobGVmdCArIHJpZ2h0KSAvIDI7Ci0KLQkJaWYgKHBjcHVsX21hcFtwb3NdLnB0ciA8IHBtZF9hZGRyKQotCQkJbGVmdCA9IHBvcyArIDE7Ci0JCWVsc2UgaWYgKHBjcHVsX21hcFtwb3NdLnB0ciA+IHBtZF9hZGRyKQotCQkJcmlnaHQgPSBwb3MgLSAxOwotCQllbHNlIHsKLQkJCS8qIGl0IHNob3VsZG4ndCBiZSBpbiB0aGUgYXJlYSBmb3IgdGhlIGZpcnN0IGNodW5rICovCi0JCQlXQVJOX09OKG9mZnNldCA8IHBjcHVsX3NpemUpOwotCi0JCQlyZXR1cm4gcGNwdWxfdm0uYWRkciArCi0JCQkJcGNwdWxfbWFwW3Bvc10uY3B1ICogUE1EX1NJWkUgKyBvZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KKwlpZiAoZWFybHlfY3B1X3RvX25vZGUoZnJvbSkgPT0gZWFybHlfY3B1X3RvX25vZGUodG8pKQorCQlyZXR1cm4gTE9DQUxfRElTVEFOQ0U7CisJZWxzZQorCQlyZXR1cm4gUkVNT1RFX0RJU1RBTkNFOwogI2Vsc2UKLXN0YXRpYyBzc2l6ZV90IF9faW5pdCBzZXR1cF9wY3B1X2xwYWdlKHNpemVfdCBzdGF0aWNfc2l6ZSwgYm9vbCBjaG9zZW4pCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19CisJcmV0dXJuIExPQ0FMX0RJU1RBTkNFOwogI2VuZGlmCi0KLS8qCi0gKiBFbWJlZGRpbmcgYWxsb2NhdG9yCi0gKgotICogVGhlIGZpcnN0IGNodW5rIGlzIHNpemVkIHRvIGp1c3QgY29udGFpbiB0aGUgc3RhdGljIGFyZWEgcGx1cwotICogbW9kdWxlIGFuZCBkeW5hbWljIHJlc2VydmVzIGFuZCBlbWJlZGRlZCBpbnRvIGxpbmVhciBwaHlzaWNhbAotICogbWFwcGluZyBzbyB0aGF0IGl0IGNhbiB1c2UgUE1EIG1hcHBpbmcgd2l0aG91dCBhZGRpdGlvbmFsIFRMQgotICogcHJlc3N1cmUuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IF9faW5pdCBzZXR1cF9wY3B1X2VtYmVkKHNpemVfdCBzdGF0aWNfc2l6ZSwgYm9vbCBjaG9zZW4pCi17Ci0Jc2l6ZV90IHJlc2VydmUgPSBQRVJDUFVfTU9EVUxFX1JFU0VSVkUgKyBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFOwotCi0JLyoKLQkgKiBJZiBsYXJnZSBwYWdlIGlzbid0IHN1cHBvcnRlZCwgdGhlcmUncyBubyBiZW5lZml0IGluIGRvaW5nCi0JICogdGhpcy4gIEFsc28sIGVtYmVkZGluZyBhbGxvY2F0aW9uIGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGgKLQkgKiBOVU1BLgotCSAqLwotCWlmICghY2hvc2VuICYmICghY3B1X2hhc19wc2UgfHwgcGNwdV9uZWVkX251bWEoKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoc3RhdGljX3NpemUsIFBFUkNQVV9GSVJTVF9DSFVOS19SRVNFUlZFLAotCQkJCSAgICAgIHJlc2VydmUgLSBQRVJDUFVfRklSU1RfQ0hVTktfUkVTRVJWRSwgLTEpOwogfQogCi0vKgotICogNGsgcGFnZSBhbGxvY2F0b3IKLSAqCi0gKiBUaGlzIGlzIHRoZSBiYXNpYyBhbGxvY2F0b3IuICBTdGF0aWMgcGVyY3B1IGFyZWEgaXMgYWxsb2NhdGVkCi0gKiBwYWdlLWJ5LXBhZ2UgYW5kIG1vc3Qgb2YgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSBieSB0aGUgZ2VuZXJpYwotICogc2V0dXAgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqKnBjcHU0a19wYWdlcyBfX2luaXRkYXRhOwotc3RhdGljIGludCBwY3B1NGtfbnJfc3RhdGljX3BhZ2VzIF9faW5pdGRhdGE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqIF9faW5pdCBwY3B1NGtfZ2V0X3BhZ2UodW5zaWduZWQgaW50IGNwdSwgaW50IHBhZ2VubykKLXsKLQlpZiAocGFnZW5vIDwgcGNwdTRrX25yX3N0YXRpY19wYWdlcykKLQkJcmV0dXJuIHBjcHU0a19wYWdlc1tjcHUgKiBwY3B1NGtfbnJfc3RhdGljX3BhZ2VzICsgcGFnZW5vXTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHBjcHU0a19wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIHZvaWQgX19pbml0IHBjcHVwX3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcG9wdWxhdGVfZXh0cmFfcHRlKGFkZHIpOwogfQogCi1zdGF0aWMgc3NpemVfdCBfX2luaXQgc2V0dXBfcGNwdV80ayhzaXplX3Qgc3RhdGljX3NpemUpCi17Ci0Jc2l6ZV90IHBhZ2VzX3NpemU7Ci0JdW5zaWduZWQgaW50IGNwdTsKLQlpbnQgaSwgajsKLQlzc2l6ZV90IHJldDsKLQotCXBjcHU0a19ucl9zdGF0aWNfcGFnZXMgPSBQRk5fVVAoc3RhdGljX3NpemUpOwotCi0JLyogdW5hbGlnbmVkIGFsbG9jYXRpb25zIGNhbid0IGJlIGZyZWVkLCByb3VuZCB1cCB0byBwYWdlIHNpemUgKi8KLQlwYWdlc19zaXplID0gUEZOX0FMSUdOKHBjcHU0a19ucl9zdGF0aWNfcGFnZXMgKiBucl9jcHVfaWRzCi0JCQkgICAgICAgKiBzaXplb2YocGNwdTRrX3BhZ2VzWzBdKSk7Ci0JcGNwdTRrX3BhZ2VzID0gYWxsb2NfYm9vdG1lbShwYWdlc19zaXplKTsKLQotCS8qIGFsbG9jYXRlIGFuZCBjb3B5ICovCi0JaiA9IDA7Ci0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKLQkJZm9yIChpID0gMDsgaSA8IHBjcHU0a19ucl9zdGF0aWNfcGFnZXM7IGkrKykgewotCQkJdm9pZCAqcHRyOwotCi0JCQlwdHIgPSBwY3B1X2FsbG9jX2Jvb3RtZW0oY3B1LCBQQUdFX1NJWkUsIFBBR0VfU0laRSk7Ci0JCQlpZiAoIXB0cikgewotCQkJCXByX3dhcm5pbmcoIlBFUkNQVTogZmFpbGVkIHRvIGFsbG9jYXRlICIKLQkJCQkJICAgIjRrIHBhZ2UgZm9yIGNwdSV1XG4iLCBjcHUpOwotCQkJCWdvdG8gZW5vbWVtOwotCQkJfQotCi0JCQltZW1jcHkocHRyLCBfX3Blcl9jcHVfbG9hZCArIGkgKiBQQUdFX1NJWkUsIFBBR0VfU0laRSk7Ci0JCQlwY3B1NGtfcGFnZXNbaisrXSA9IHZpcnRfdG9fcGFnZShwdHIpOwotCQl9Ci0KLQkvKiB3ZSdyZSByZWFkeSwgY29tbWl0ICovCi0JcHJfaW5mbygiUEVSQ1BVOiBBbGxvY2F0ZWQgJWQgNGsgcGFnZXMsIHN0YXRpYyBkYXRhICV6dSBieXRlc1xuIiwKLQkJcGNwdTRrX25yX3N0YXRpY19wYWdlcywgc3RhdGljX3NpemUpOwotCi0JcmV0ID0gcGNwdV9zZXR1cF9maXJzdF9jaHVuayhwY3B1NGtfZ2V0X3BhZ2UsIHN0YXRpY19zaXplLAotCQkJCSAgICAgUEVSQ1BVX0ZJUlNUX0NIVU5LX1JFU0VSVkUsIC0xLAotCQkJCSAgICAgLTEsIE5VTEwsIHBjcHU0a19wb3B1bGF0ZV9wdGUpOwotCWdvdG8gb3V0X2ZyZWVfYXI7Ci0KLWVub21lbToKLQl3aGlsZSAoLS1qID49IDApCi0JCWZyZWVfYm9vdG1lbShfX3BhKHBhZ2VfYWRkcmVzcyhwY3B1NGtfcGFnZXNbal0pKSwgUEFHRV9TSVpFKTsKLQlyZXQgPSAtRU5PTUVNOwotb3V0X2ZyZWVfYXI6Ci0JZnJlZV9ib290bWVtKF9fcGEocGNwdTRrX3BhZ2VzKSwgcGFnZXNfc2l6ZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogZm9yIGV4cGxpY2l0IGZpcnN0IGNodW5rIGFsbG9jYXRvciBzZWxlY3Rpb24gKi8KLXN0YXRpYyBjaGFyIHBjcHVfY2hvc2VuX2FsbG9jWzE2XSBfX2luaXRkYXRhOwotCi1zdGF0aWMgaW50IF9faW5pdCBwZXJjcHVfYWxsb2Nfc2V0dXAoY2hhciAqc3RyKQotewotCXN0cm5jcHkocGNwdV9jaG9zZW5fYWxsb2MsIHN0ciwgc2l6ZW9mKHBjcHVfY2hvc2VuX2FsbG9jKSAtIDEpOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oInBlcmNwdV9hbGxvYyIsIHBlcmNwdV9hbGxvY19zZXR1cCk7Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9wZXJjcHVfc2VnbWVudChpbnQgY3B1KQogewogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTQ0MSw1MiArMTcwLDQ5IEBACiAKIHZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZCkKIHsKLQlzaXplX3Qgc3RhdGljX3NpemUgPSBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0OwogCXVuc2lnbmVkIGludCBjcHU7CiAJdW5zaWduZWQgbG9uZyBkZWx0YTsKLQlzaXplX3QgcGNwdV91bml0X3NpemU7Ci0Jc3NpemVfdCByZXQ7CisJaW50IHJjOwogCiAJcHJfaW5mbygiTlJfQ1BVUzolZCBucl9jcHVtYXNrX2JpdHM6JWQgbnJfY3B1X2lkczolZCBucl9ub2RlX2lkczolZFxuIiwKIAkJTlJfQ1BVUywgbnJfY3B1bWFza19iaXRzLCBucl9jcHVfaWRzLCBucl9ub2RlX2lkcyk7CiAKIAkvKgotCSAqIEFsbG9jYXRlIHBlcmNwdSBhcmVhLiAgSWYgUFNFIGlzIHN1cHBvcnRlZCwgdHJ5IHRvIG1ha2UgdXNlCi0JICogb2YgbGFyZ2UgcGFnZSBtYXBwaW5ncy4gIFBsZWFzZSByZWFkIGNvbW1lbnRzIG9uIHRvcCBvZgotCSAqIGVhY2ggYWxsb2NhdG9yIGZvciBkZXRhaWxzLgorCSAqIEFsbG9jYXRlIHBlcmNwdSBhcmVhLiAgRW1iZWRkaW5nIGFsbG9jYXRvciBpcyBvdXIgZmF2b3JpdGU7CisJICogaG93ZXZlciwgb24gTlVNQSBjb25maWd1cmF0aW9ucywgaXQgY2FuIHJlc3VsdCBpbiB2ZXJ5CisJICogc3BhcnNlIHVuaXQgbWFwcGluZyBhbmQgdm1hbGxvYyBhcmVhIGlzbid0IHNwYWNpb3VzIGVub3VnaAorCSAqIG9uIDMyYml0LiAgVXNlIHBhZ2UgaW4gdGhhdCBjYXNlLgogCSAqLwotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKHN0cmxlbihwY3B1X2Nob3Nlbl9hbGxvYykpIHsKLQkJaWYgKHN0cmNtcChwY3B1X2Nob3Nlbl9hbGxvYywgIjRrIikpIHsKLQkJCWlmICghc3RyY21wKHBjcHVfY2hvc2VuX2FsbG9jLCAibHBhZ2UiKSkKLQkJCQlyZXQgPSBzZXR1cF9wY3B1X2xwYWdlKHN0YXRpY19zaXplLCB0cnVlKTsKLQkJCWVsc2UgaWYgKCFzdHJjbXAocGNwdV9jaG9zZW5fYWxsb2MsICJlbWJlZCIpKQotCQkJCXJldCA9IHNldHVwX3BjcHVfZW1iZWQoc3RhdGljX3NpemUsIHRydWUpOwotCQkJZWxzZQotCQkJCXByX3dhcm5pbmcoIlBFUkNQVTogdW5rbm93biBhbGxvY2F0b3IgJXMgIgotCQkJCQkgICAic3BlY2lmaWVkXG4iLCBwY3B1X2Nob3Nlbl9hbGxvYyk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlwcl93YXJuaW5nKCJQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCV6ZCksICIKLQkJCQkJICAgImZhbGxpbmcgYmFjayB0byA0a1xuIiwKLQkJCQkJICAgcGNwdV9jaG9zZW5fYWxsb2MsIHJldCk7Ci0JCX0KLQl9IGVsc2UgewotCQlyZXQgPSBzZXR1cF9wY3B1X2xwYWdlKHN0YXRpY19zaXplLCBmYWxzZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0ID0gc2V0dXBfcGNwdV9lbWJlZChzdGF0aWNfc2l6ZSwgZmFsc2UpOwotCX0KLQlpZiAocmV0IDwgMCkKLQkJcmV0ID0gc2V0dXBfcGNwdV80ayhzdGF0aWNfc2l6ZSk7Ci0JaWYgKHJldCA8IDApCi0JCXBhbmljKCJjYW5ub3QgYWxsb2NhdGUgc3RhdGljIHBlcmNwdSBhcmVhICglenUgYnl0ZXMsIGVycj0lemQpIiwKLQkJICAgICAgc3RhdGljX3NpemUsIHJldCk7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWlmIChwY3B1X2Nob3Nlbl9mYyA9PSBQQ1BVX0ZDX0FVVE8gJiYgcGNwdV9uZWVkX251bWEoKSkKKwkJcGNwdV9jaG9zZW5fZmMgPSBQQ1BVX0ZDX1BBR0U7CisjZW5kaWYKKwlyYyA9IC1FSU5WQUw7CisJaWYgKHBjcHVfY2hvc2VuX2ZjICE9IFBDUFVfRkNfUEFHRSkgeworCQljb25zdCBzaXplX3QgYXRvbV9zaXplID0gY3B1X2hhc19wc2UgPyBQTURfU0laRSA6IFBBR0VfU0laRTsKKwkJY29uc3Qgc2l6ZV90IGR5bl9zaXplID0gUEVSQ1BVX01PRFVMRV9SRVNFUlZFICsKKwkJCVBFUkNQVV9EWU5BTUlDX1JFU0VSVkUgLSBQRVJDUFVfRklSU1RfQ0hVTktfUkVTRVJWRTsKIAotCXBjcHVfdW5pdF9zaXplID0gcmV0OworCQlyYyA9IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoUEVSQ1BVX0ZJUlNUX0NIVU5LX1JFU0VSVkUsCisJCQkJCSAgICBkeW5fc2l6ZSwgYXRvbV9zaXplLAorCQkJCQkgICAgcGNwdV9jcHVfZGlzdGFuY2UsCisJCQkJCSAgICBwY3B1X2ZjX2FsbG9jLCBwY3B1X2ZjX2ZyZWUpOworCQlpZiAocmMgPCAwKQorCQkJcHJfd2FybmluZygiUEVSQ1BVOiAlcyBhbGxvY2F0b3IgZmFpbGVkICglZCksICIKKwkJCQkgICAiZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxuIiwKKwkJCQkgICBwY3B1X2ZjX25hbWVzW3BjcHVfY2hvc2VuX2ZjXSwgcmMpOworCX0KKwlpZiAocmMgPCAwKQorCQlyYyA9IHBjcHVfcGFnZV9maXJzdF9jaHVuayhQRVJDUFVfRklSU1RfQ0hVTktfUkVTRVJWRSwKKwkJCQkJICAgcGNwdV9mY19hbGxvYywgcGNwdV9mY19mcmVlLAorCQkJCQkgICBwY3B1cF9wb3B1bGF0ZV9wdGUpOworCWlmIChyYyA8IDApCisJCXBhbmljKCJjYW5ub3QgaW5pdGlhbGl6ZSBwZXJjcHUgYXJlYSAoZXJyPSVkKSIsIHJjKTsKIAogCS8qIGFscmlnaHR5LCBwZXJjcHUgYXJlYXMgdXAgYW5kIHJ1bm5pbmcgKi8KIAlkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0OwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJcGVyX2NwdV9vZmZzZXQoY3B1KSA9IGRlbHRhICsgY3B1ICogcGNwdV91bml0X3NpemU7CisJCXBlcl9jcHVfb2Zmc2V0KGNwdSkgPSBkZWx0YSArIHBjcHVfdW5pdF9vZmZzZXRzW2NwdV07CiAJCXBlcl9jcHUodGhpc19jcHVfb2ZmLCBjcHUpID0gcGVyX2NwdV9vZmZzZXQoY3B1KTsKIAkJcGVyX2NwdShjcHVfbnVtYmVyLCBjcHUpID0gY3B1OwogCQlzZXR1cF9wZXJjcHVfc2VnbWVudChjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCmluZGV4IDRjNTc4NzUuLjgxZTU4MjM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCkBAIC04NjksNiArODY5LDggQEAKIAlpZiAodGhyZWFkX2luZm9fZmxhZ3MgJiBfVElGX05PVElGWV9SRVNVTUUpIHsKIAkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX05PVElGWV9SRVNVTUUpOwogCQl0cmFjZWhvb2tfbm90aWZ5X3Jlc3VtZShyZWdzKTsKKwkJaWYgKGN1cnJlbnQtPnJlcGxhY2VtZW50X3Nlc3Npb25fa2V5cmluZykKKwkJCWtleV9yZXBsYWNlX3Nlc3Npb25fa2V5cmluZygpOwogCX0KIAogI2lmZGVmIENPTkZJR19YODZfMzIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDJmZWNkYTYuLmEyNWVlZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxsaW51eC90Ym9vdC5oPgogCiAjaW5jbHVkZSA8YXNtL2FjcGkuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgpAQCAtNDM0LDcgKzQzNSw4IEBACiAJICogRm9yIHBlcmYsIHdlIHJldHVybiBsYXN0IGxldmVsIGNhY2hlIHNoYXJlZCBtYXAuCiAJICogQW5kIGZvciBwb3dlciBzYXZpbmdzLCB3ZSByZXR1cm4gY3B1X2NvcmVfbWFwCiAJICovCi0JaWYgKHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MgfHwgc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MpCisJaWYgKChzY2hlZF9tY19wb3dlcl9zYXZpbmdzIHx8IHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzKSAmJgorCSAgICAhKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQU1EX0RDTSkpKQogCQlyZXR1cm4gY3B1X2NvcmVfbWFzayhjcHUpOwogCWVsc2UKIAkJcmV0dXJuIGMtPmxsY19zaGFyZWRfbWFwOwpAQCAtMTExNiw5ICsxMTE4LDIyIEBACiAKIAlpZiAoaXNfdXZfc3lzdGVtKCkpCiAJCXV2X3N5c3RlbV9pbml0KCk7CisKKwlzZXRfbXRycl9hcHNfZGVsYXllZF9pbml0KCk7CiBvdXQ6CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KKwordm9pZCBhcmNoX2VuYWJsZV9ub25ib290X2NwdXNfYmVnaW4odm9pZCkKK3sKKwlzZXRfbXRycl9hcHNfZGVsYXllZF9pbml0KCk7Cit9CisKK3ZvaWQgYXJjaF9lbmFibGVfbm9uYm9vdF9jcHVzX2VuZCh2b2lkKQoreworCW10cnJfYXBzX2luaXQoKTsKK30KKwogLyoKICAqIEVhcmx5IHNldHVwIHRvIG1ha2UgcHJpbnRrIHdvcmsuCiAgKi8KQEAgLTExNDAsNiArMTE1NSw3IEBACiAJc2V0dXBfaW9hcGljX2Rlc3QoKTsKICNlbmRpZgogCWNoZWNrX25taV93YXRjaGRvZygpOworCW10cnJfYXBzX2luaXQoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXRkYXRhIHNldHVwX3Bvc3NpYmxlX2NwdXMgPSAtMTsKQEAgLTEzMTcsNiArMTMzMyw3IEBACiB2b2lkIG5hdGl2ZV9wbGF5X2RlYWQodm9pZCkKIHsKIAlwbGF5X2RlYWRfY29tbW9uKCk7CisJdGJvb3Rfc2h1dGRvd24oVEJfU0hVVERPV05fV0ZTKTsKIAl3YmludmRfaGFsdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3RlcC5jIGIvYXJjaC94ODYva2VybmVsL3N0ZXAuYwppbmRleCBlOGI5ODYzLi4zMTQ5MDMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3RlcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zdGVwLmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAKIHVuc2lnbmVkIGxvbmcgY29udmVydF9pcF90b19saW5lYXIoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC0yMyw3ICsyNCw3IEBACiAJICogYW5kIEFQTSBiaW9zIG9uZXMgd2UganVzdCBpZ25vcmUgaGVyZS4KIAkgKi8KIAlpZiAoKHNlZyAmIFNFR01FTlRfVElfTUFTSykgPT0gU0VHTUVOVF9MRFQpIHsKLQkJdTMyICpkZXNjOworCQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2M7CiAJCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAogCQlzZWcgJj0gfjdVTDsKQEAgLTMzLDEyICszNCwxMCBAQAogCQkJYWRkciA9IC0xTDsgLyogYm9ndXMgc2VsZWN0b3IsIGFjY2VzcyB3b3VsZCBmYXVsdCAqLwogCQllbHNlIHsKIAkJCWRlc2MgPSBjaGlsZC0+bW0tPmNvbnRleHQubGR0ICsgc2VnOwotCQkJYmFzZSA9ICgoZGVzY1swXSA+PiAxNikgfAotCQkJCSgoZGVzY1sxXSAmIDB4ZmYpIDw8IDE2KSB8Ci0JCQkJKGRlc2NbMV0gJiAweGZmMDAwMDAwKSk7CisJCQliYXNlID0gZ2V0X2Rlc2NfYmFzZShkZXNjKTsKIAogCQkJLyogMTYtYml0IGNvZGUgc2VnbWVudD8gKi8KLQkJCWlmICghKChkZXNjWzFdID4+IDIyKSAmIDEpKQorCQkJaWYgKCFkZXNjLT5kKQogCQkJCWFkZHIgJj0gMHhmZmZmOwogCQkJYWRkciArPSBiYXNlOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jIGIvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYwppbmRleCA2YmMyMTFhLi40NWUwMGViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMKQEAgLTE4LDkgKzE4LDkgQEAKICNpbmNsdWRlIDxhc20vaWEzMi5oPgogI2luY2x1ZGUgPGFzbS9zeXNjYWxscy5oPgogCi1hc21saW5rYWdlIGxvbmcgc3lzX21tYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKLQkJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAotCQl1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIG9mZikKK1NZU0NBTExfREVGSU5FNihtbWFwLCB1bnNpZ25lZCBsb25nLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBsZW4sCisJCXVuc2lnbmVkIGxvbmcsIHByb3QsIHVuc2lnbmVkIGxvbmcsIGZsYWdzLAorCQl1bnNpZ25lZCBsb25nLCBmZCwgdW5zaWduZWQgbG9uZywgb2ZmKQogewogCWxvbmcgZXJyb3I7CiAJc3RydWN0IGZpbGUgKmZpbGU7CkBAIC0yMjYsNyArMjI2LDcgQEAKIH0KIAogCi1hc21saW5rYWdlIGxvbmcgc3lzX3VuYW1lKHN0cnVjdCBuZXdfdXRzbmFtZSBfX3VzZXIgKm5hbWUpCitTWVNDQUxMX0RFRklORTEodW5hbWUsIHN0cnVjdCBuZXdfdXRzbmFtZSBfX3VzZXIgKiwgbmFtZSkKIHsKIAlpbnQgZXJyOwogCWRvd25fcmVhZCgmdXRzX3NlbSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC90Ym9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YzlmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGJvb3QuYwpAQCAtMCwwICsxLDQ0NyBAQAorLyoKKyAqIHRib290LmM6IG1haW4gaW1wbGVtZW50YXRpb24gb2YgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IGtlcm5lbCBmb3IKKyAqICAgICAgICAgIHJ1bnRpbWUgc3VwcG9ydCBvZiBJbnRlbChSKSBUcnVzdGVkIEV4ZWN1dGlvbiBUZWNobm9sb2d5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDksIEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RtYV9yZW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0X3Rhc2suaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hci5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdGJvb3QuaD4KKworI2luY2x1ZGUgPGFzbS90cmFtcG9saW5lLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9ib290cGFyYW0uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9lODIwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJhY3BpL3JlYWxtb2RlL3dha2V1cC5oIgorCisvKiBHbG9iYWwgcG9pbnRlciB0byBzaGFyZWQgZGF0YTsgTlVMTCBtZWFucyBubyBtZWFzdXJlZCBsYXVuY2guICovCitzdHJ1Y3QgdGJvb3QgKnRib290IF9fcmVhZF9tb3N0bHk7CisKKy8qIHRpbWVvdXQgZm9yIEFQcyAoaW4gc2VjcykgdG8gZW50ZXIgd2FpdC1mb3ItU0lQSSBzdGF0ZSBkdXJpbmcgc2h1dGRvd24gKi8KKyNkZWZpbmUgQVBfV0FJVF9USU1FT1VUCQkxCisKKyN1bmRlZiBwcl9mbXQKKyNkZWZpbmUgcHJfZm10KGZtdCkJInRib290OiAiIGZtdAorCitzdGF0aWMgdTggdGJvb3RfdXVpZFsxNl0gX19pbml0ZGF0YSA9IFRCT09UX1VVSUQ7CisKK3ZvaWQgX19pbml0IHRib290X3Byb2JlKHZvaWQpCit7CisJLyogTG9vayBmb3IgdmFsaWQgcGFnZS1hbGlnbmVkIGFkZHJlc3MgZm9yIHNoYXJlZCBwYWdlLiAqLworCWlmICghYm9vdF9wYXJhbXMudGJvb3RfYWRkcikKKwkJcmV0dXJuOworCS8qCisJICogYWxzbyB2ZXJpZnkgdGhhdCBpdCBpcyBtYXBwZWQgYXMgd2UgZXhwZWN0IGl0IGJlZm9yZSBjYWxsaW5nCisJICogc2V0X2ZpeG1hcCgpLCB0byByZWR1Y2UgY2hhbmNlIG9mIGdhcmJhZ2UgdmFsdWUgY2F1c2luZyBjcmFzaAorCSAqLworCWlmICghZTgyMF9hbnlfbWFwcGVkKGJvb3RfcGFyYW1zLnRib290X2FkZHIsCisJCQkgICAgIGJvb3RfcGFyYW1zLnRib290X2FkZHIsIEU4MjBfUkVTRVJWRUQpKSB7CisJCXByX3dhcm5pbmcoIm5vbi0wIHRib290X2FkZHIgYnV0IGl0IGlzIG5vdCBvZiB0eXBlIEU4MjBfUkVTRVJWRURcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogb25seSBhIG5hdGl2ZWx5IGJvb3RlZCBrZXJuZWwgc2hvdWxkIGJlIHVzaW5nIFRYVCAqLworCWlmIChwYXJhdmlydF9lbmFibGVkKCkpIHsKKwkJcHJfd2FybmluZygibm9uLTAgdGJvb3RfYWRkciBidXQgcHZfb3BzIGlzIGVuYWJsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogTWFwIGFuZCBjaGVjayBmb3IgdGJvb3QgVVVJRC4gKi8KKwlzZXRfZml4bWFwKEZJWF9UQk9PVF9CQVNFLCBib290X3BhcmFtcy50Ym9vdF9hZGRyKTsKKwl0Ym9vdCA9IChzdHJ1Y3QgdGJvb3QgKilmaXhfdG9fdmlydChGSVhfVEJPT1RfQkFTRSk7CisJaWYgKG1lbWNtcCgmdGJvb3RfdXVpZCwgJnRib290LT51dWlkLCBzaXplb2YodGJvb3QtPnV1aWQpKSkgeworCQlwcl93YXJuaW5nKCJ0Ym9vdCBhdCAweCVsbHggaXMgaW52YWxpZFxuIiwKKwkJCSAgIGJvb3RfcGFyYW1zLnRib290X2FkZHIpOworCQl0Ym9vdCA9IE5VTEw7CisJCXJldHVybjsKKwl9CisJaWYgKHRib290LT52ZXJzaW9uIDwgNSkgeworCQlwcl93YXJuaW5nKCJ0Ym9vdCB2ZXJzaW9uIGlzIGludmFsaWQ6ICV1XG4iLCB0Ym9vdC0+dmVyc2lvbik7CisJCXRib290ID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCXByX2luZm8oImZvdW5kIHNoYXJlZCBwYWdlIGF0IHBoeXMgYWRkciAweCVsbHg6XG4iLAorCQlib290X3BhcmFtcy50Ym9vdF9hZGRyKTsKKwlwcl9kZWJ1ZygidmVyc2lvbjogJWRcbiIsIHRib290LT52ZXJzaW9uKTsKKwlwcl9kZWJ1ZygibG9nX2FkZHI6IDB4JTA4eFxuIiwgdGJvb3QtPmxvZ19hZGRyKTsKKwlwcl9kZWJ1Zygic2h1dGRvd25fZW50cnk6IDB4JXhcbiIsIHRib290LT5zaHV0ZG93bl9lbnRyeSk7CisJcHJfZGVidWcoInRib290X2Jhc2U6IDB4JTA4eFxuIiwgdGJvb3QtPnRib290X2Jhc2UpOworCXByX2RlYnVnKCJ0Ym9vdF9zaXplOiAweCV4XG4iLCB0Ym9vdC0+dGJvb3Rfc2l6ZSk7Cit9CisKK3N0YXRpYyBwZ2RfdCAqdGJvb3RfcGdfZGlyOworc3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgdGJvb3RfbW0gPSB7CisJLm1tX3JiICAgICAgICAgID0gUkJfUk9PVCwKKwkucGdkICAgICAgICAgICAgPSBzd2FwcGVyX3BnX2RpciwKKwkubW1fdXNlcnMgICAgICAgPSBBVE9NSUNfSU5JVCgyKSwKKwkubW1fY291bnQgICAgICAgPSBBVE9NSUNfSU5JVCgxKSwKKwkubW1hcF9zZW0gICAgICAgPSBfX1JXU0VNX0lOSVRJQUxJWkVSKGluaXRfbW0ubW1hcF9zZW0pLAorCS5wYWdlX3RhYmxlX2xvY2sgPSAgX19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spLAorCS5tbWxpc3QgICAgICAgICA9IExJU1RfSEVBRF9JTklUKGluaXRfbW0ubW1saXN0KSwKKwkuY3B1X3ZtX21hc2sgICAgPSBDUFVfTUFTS19BTEwsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX3RvX3Rib290X3B0KHZvaWQpCit7CisJd3JpdGVfY3IzKHZpcnRfdG9fcGh5cyh0Ym9vdF9wZ19kaXIpKTsKK30KKworc3RhdGljIGludCBtYXBfdGJvb3RfcGFnZSh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHBmbiwKKwkJCSAgcGdwcm90X3QgcHJvdCkKK3sKKwlwZ2RfdCAqcGdkOworCXB1ZF90ICpwdWQ7CisJcG1kX3QgKnBtZDsKKwlwdGVfdCAqcHRlOworCisJcGdkID0gcGdkX29mZnNldCgmdGJvb3RfbW0sIHZhZGRyKTsKKwlwdWQgPSBwdWRfYWxsb2MoJnRib290X21tLCBwZ2QsIHZhZGRyKTsKKwlpZiAoIXB1ZCkKKwkJcmV0dXJuIC0xOworCXBtZCA9IHBtZF9hbGxvYygmdGJvb3RfbW0sIHB1ZCwgdmFkZHIpOworCWlmICghcG1kKQorCQlyZXR1cm4gLTE7CisJcHRlID0gcHRlX2FsbG9jX21hcCgmdGJvb3RfbW0sIHBtZCwgdmFkZHIpOworCWlmICghcHRlKQorCQlyZXR1cm4gLTE7CisJc2V0X3B0ZV9hdCgmdGJvb3RfbW0sIHZhZGRyLCBwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7CisJcHRlX3VubWFwKHB0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFwX3Rib290X3BhZ2VzKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkJICAgdW5zaWduZWQgbG9uZyBucikKK3sKKwkvKiBSZXVzZSB0aGUgb3JpZ2luYWwga2VybmVsIG1hcHBpbmcgKi8KKwl0Ym9vdF9wZ19kaXIgPSBwZ2RfYWxsb2MoJnRib290X21tKTsKKwlpZiAoIXRib290X3BnX2RpcikKKwkJcmV0dXJuIC0xOworCisJZm9yICg7IG5yID4gMDsgbnItLSwgdmFkZHIgKz0gUEFHRV9TSVpFLCBzdGFydF9wZm4rKykgeworCQlpZiAobWFwX3Rib290X3BhZ2UodmFkZHIsIHN0YXJ0X3BmbiwgUEFHRV9LRVJORUxfRVhFQykpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRib290X2NyZWF0ZV90cmFtcG9saW5lKHZvaWQpCit7CisJdTMyIG1hcF9iYXNlLCBtYXBfc2l6ZTsKKworCS8qIENyZWF0ZSBpZGVudGl0eSBtYXAgZm9yIHRib290IHNodXRkb3duIGNvZGUuICovCisJbWFwX2Jhc2UgPSBQRk5fRE9XTih0Ym9vdC0+dGJvb3RfYmFzZSk7CisJbWFwX3NpemUgPSBQRk5fVVAodGJvb3QtPnRib290X3NpemUpOworCWlmIChtYXBfdGJvb3RfcGFnZXMobWFwX2Jhc2UgPDwgUEFHRV9TSElGVCwgbWFwX2Jhc2UsIG1hcF9zaXplKSkKKwkJcGFuaWMoInRib290OiBFcnJvciBtYXBwaW5nIHRib290IHBhZ2VzIChtZm5zKSBAIDB4JXgsIDB4JXhcbiIsCisJCSAgICAgIG1hcF9iYXNlLCBtYXBfc2l6ZSk7Cit9CisKKyNpZmRlZiBDT05GSUdfQUNQSV9TTEVFUAorCitzdGF0aWMgdm9pZCBhZGRfbWFjX3JlZ2lvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCB0Ym9vdF9tYWNfcmVnaW9uICptcjsKKwlwaHlzX2FkZHJfdCBlbmQgPSBzdGFydCArIHNpemU7CisKKwlpZiAoc3RhcnQgJiYgc2l6ZSkgeworCQltciA9ICZ0Ym9vdC0+bWFjX3JlZ2lvbnNbdGJvb3QtPm51bV9tYWNfcmVnaW9ucysrXTsKKwkJbXItPnN0YXJ0ID0gcm91bmRfZG93bihzdGFydCwgUEFHRV9TSVpFKTsKKwkJbXItPnNpemUgID0gcm91bmRfdXAoZW5kLCBQQUdFX1NJWkUpIC0gbXItPnN0YXJ0OworCX0KK30KKworc3RhdGljIGludCB0Ym9vdF9zZXR1cF9zbGVlcCh2b2lkKQoreworCXRib290LT5udW1fbWFjX3JlZ2lvbnMgPSAwOworCisJLyogUzMgcmVzdW1lIGNvZGUgKi8KKwlhZGRfbWFjX3JlZ2lvbihhY3BpX3dha2V1cF9hZGRyZXNzLCBXQUtFVVBfU0laRSk7CisKKyNpZmRlZiBDT05GSUdfWDg2X1RSQU1QT0xJTkUKKwkvKiBBUCB0cmFtcG9saW5lIGNvZGUgKi8KKwlhZGRfbWFjX3JlZ2lvbih2aXJ0X3RvX3BoeXModHJhbXBvbGluZV9iYXNlKSwgVFJBTVBPTElORV9TSVpFKTsKKyNlbmRpZgorCisJLyoga2VybmVsIGNvZGUgKyBkYXRhICsgYnNzICovCisJYWRkX21hY19yZWdpb24odmlydF90b19waHlzKF90ZXh0KSwgX2VuZCAtIF90ZXh0KTsKKworCXRib290LT5hY3BpX3NpbmZvLmtlcm5lbF9zM19yZXN1bWVfdmVjdG9yID0gYWNwaV93YWtldXBfYWRkcmVzczsKKworCXJldHVybiAwOworfQorCisjZWxzZSAvKiBubyBDT05GSUdfQUNQSV9TTEVFUCAqLworCitzdGF0aWMgaW50IHRib290X3NldHVwX3NsZWVwKHZvaWQpCit7CisJLyogUzMgc2h1dGRvd24gcmVxdWVzdGVkLCBidXQgUzMgbm90IHN1cHBvcnRlZCBieSB0aGUga2VybmVsLi4uICovCisJQlVHKCk7CisJcmV0dXJuIC0xOworfQorCisjZW5kaWYKKwordm9pZCB0Ym9vdF9zaHV0ZG93bih1MzIgc2h1dGRvd25fdHlwZSkKK3sKKwl2b2lkICgqc2h1dGRvd24pKHZvaWQpOworCisJaWYgKCF0Ym9vdF9lbmFibGVkKCkpCisJCXJldHVybjsKKworCS8qCisJICogaWYgd2UncmUgYmVpbmcgY2FsbGVkIGJlZm9yZSB0aGUgMToxIG1hcHBpbmcgaXMgc2V0IHVwIHRoZW4ganVzdAorCSAqIHJldHVybiBhbmQgbGV0IHRoZSBub3JtYWwgc2h1dGRvd24gaGFwcGVuOyB0aGlzIHNob3VsZCBvbmx5IGJlCisJICogZHVlIHRvIHZlcnkgZWFybHkgcGFuaWMoKQorCSAqLworCWlmICghdGJvb3RfcGdfZGlyKQorCQlyZXR1cm47CisKKwkvKiBpZiB0aGlzIGlzIFMzIHRoZW4gc2V0IHJlZ2lvbnMgdG8gTUFDICovCisJaWYgKHNodXRkb3duX3R5cGUgPT0gVEJfU0hVVERPV05fUzMpCisJCWlmICh0Ym9vdF9zZXR1cF9zbGVlcCgpKQorCQkJcmV0dXJuOworCisJdGJvb3QtPnNodXRkb3duX3R5cGUgPSBzaHV0ZG93bl90eXBlOworCisJc3dpdGNoX3RvX3Rib290X3B0KCk7CisKKwlzaHV0ZG93biA9ICh2b2lkKCopKHZvaWQpKSh1bnNpZ25lZCBsb25nKXRib290LT5zaHV0ZG93bl9lbnRyeTsKKwlzaHV0ZG93bigpOworCisJLyogc2hvdWxkIG5vdCByZWFjaCBoZXJlICovCisJd2hpbGUgKDEpCisJCWhhbHQoKTsKK30KKworc3RhdGljIHZvaWQgdGJvb3RfY29weV9mYWR0KGNvbnN0IHN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQgKmZhZHQpCit7CisjZGVmaW5lIFRCX0NPUFlfR0FTKHRiZywgZykJCQlcCisJdGJnLnNwYWNlX2lkICAgICA9IGcuc3BhY2VfaWQ7CQlcCisJdGJnLmJpdF93aWR0aCAgICA9IGcuYml0X3dpZHRoOwkJXAorCXRiZy5iaXRfb2Zmc2V0ICAgPSBnLmJpdF9vZmZzZXQ7CVwKKwl0YmcuYWNjZXNzX3dpZHRoID0gZy5hY2Nlc3Nfd2lkdGg7CVwKKwl0YmcuYWRkcmVzcyAgICAgID0gZy5hZGRyZXNzOworCisJVEJfQ09QWV9HQVModGJvb3QtPmFjcGlfc2luZm8ucG0xYV9jbnRfYmxrLCBmYWR0LT54cG0xYV9jb250cm9sX2Jsb2NrKTsKKwlUQl9DT1BZX0dBUyh0Ym9vdC0+YWNwaV9zaW5mby5wbTFiX2NudF9ibGssIGZhZHQtPnhwbTFiX2NvbnRyb2xfYmxvY2spOworCVRCX0NPUFlfR0FTKHRib290LT5hY3BpX3NpbmZvLnBtMWFfZXZ0X2JsaywgZmFkdC0+eHBtMWFfZXZlbnRfYmxvY2spOworCVRCX0NPUFlfR0FTKHRib290LT5hY3BpX3NpbmZvLnBtMWJfZXZ0X2JsaywgZmFkdC0+eHBtMWJfZXZlbnRfYmxvY2spOworCisJLyoKKwkgKiBXZSBuZWVkIHBoeXMgYWRkciBvZiB3YWtpbmcgdmVjdG9yLCBidXQgY2FuJ3QgdXNlIHZpcnRfdG9fcGh5cygpIG9uCisJICogJmFjcGlfZ2JsX0ZBQ1MgYmVjYXVzZSBpdCBpcyBpb3JlbWFwJ2VkLCBzbyBjYWxjIGZyb20gRkFDUyBwaHlzCisJICogYWRkci4KKwkgKi8KKwl0Ym9vdC0+YWNwaV9zaW5mby53YWtldXBfdmVjdG9yID0gZmFkdC0+ZmFjcyArCisJCW9mZnNldG9mKHN0cnVjdCBhY3BpX3RhYmxlX2ZhY3MsIGZpcm13YXJlX3dha2luZ192ZWN0b3IpOworfQorCit2b2lkIHRib290X3NsZWVwKHU4IHNsZWVwX3N0YXRlLCB1MzIgcG0xYV9jb250cm9sLCB1MzIgcG0xYl9jb250cm9sKQoreworCXN0YXRpYyB1MzIgYWNwaV9zaHV0ZG93bl9tYXBbQUNQSV9TX1NUQVRFX0NPVU5UXSA9IHsKKwkJLyogUzAsMSwyOiAqLyAtMSwgLTEsIC0xLAorCQkvKiBTMzogKi8gVEJfU0hVVERPV05fUzMsCisJCS8qIFM0OiAqLyBUQl9TSFVURE9XTl9TNCwKKwkJLyogUzU6ICovIFRCX1NIVVRET1dOX1M1IH07CisKKwlpZiAoIXRib290X2VuYWJsZWQoKSkKKwkJcmV0dXJuOworCisJdGJvb3RfY29weV9mYWR0KCZhY3BpX2dibF9GQURUKTsKKwl0Ym9vdC0+YWNwaV9zaW5mby5wbTFhX2NudF92YWwgPSBwbTFhX2NvbnRyb2w7CisJdGJvb3QtPmFjcGlfc2luZm8ucG0xYl9jbnRfdmFsID0gcG0xYl9jb250cm9sOworCS8qIHdlIGFsd2F5cyB1c2UgdGhlIDMyYiB3YWtldXAgdmVjdG9yICovCisJdGJvb3QtPmFjcGlfc2luZm8udmVjdG9yX3dpZHRoID0gMzI7CisKKwlpZiAoc2xlZXBfc3RhdGUgPj0gQUNQSV9TX1NUQVRFX0NPVU5UIHx8CisJICAgIGFjcGlfc2h1dGRvd25fbWFwW3NsZWVwX3N0YXRlXSA9PSAtMSkgeworCQlwcl93YXJuaW5nKCJ1bnN1cHBvcnRlZCBzbGVlcCBzdGF0ZSAweCV4XG4iLCBzbGVlcF9zdGF0ZSk7CisJCXJldHVybjsKKwl9CisKKwl0Ym9vdF9zaHV0ZG93bihhY3BpX3NodXRkb3duX21hcFtzbGVlcF9zdGF0ZV0pOworfQorCitzdGF0aWMgYXRvbWljX3QgYXBfd2ZzX2NvdW50OworCitzdGF0aWMgaW50IHRib290X3dhaXRfZm9yX2FwcyhpbnQgbnVtX2FwcykKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwl0aW1lb3V0ID0gQVBfV0FJVF9USU1FT1VUKkhaOworCXdoaWxlIChhdG9taWNfcmVhZCgoYXRvbWljX3QgKikmdGJvb3QtPm51bV9pbl93ZnMpICE9IG51bV9hcHMgJiYKKwkgICAgICAgdGltZW91dCkgeworCQltZGVsYXkoMSk7CisJCXRpbWVvdXQtLTsKKwl9CisKKwlpZiAodGltZW91dCkKKwkJcHJfd2FybmluZygidGJvb3Qgd2FpdCBmb3IgQVBzIHRpbWVvdXRcbiIpOworCisJcmV0dXJuICEoYXRvbWljX3JlYWQoKGF0b21pY190ICopJnRib290LT5udW1faW5fd2ZzKSA9PSBudW1fYXBzKTsKK30KKworc3RhdGljIGludCBfX2NwdWluaXQgdGJvb3RfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9EWUlORzoKKwkJYXRvbWljX2luYygmYXBfd2ZzX2NvdW50KTsKKwkJaWYgKG51bV9vbmxpbmVfY3B1cygpID09IDEpCisJCQlpZiAodGJvb3Rfd2FpdF9mb3JfYXBzKGF0b21pY19yZWFkKCZhcF93ZnNfY291bnQpKSkKKwkJCQlyZXR1cm4gTk9USUZZX0JBRDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdGJvb3RfY3B1X25vdGlmaWVyIF9fY3B1aW5pdGRhdGEgPQoreworCS5ub3RpZmllcl9jYWxsID0gdGJvb3RfY3B1X2NhbGxiYWNrLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgdGJvb3RfbGF0ZV9pbml0KHZvaWQpCit7CisJaWYgKCF0Ym9vdF9lbmFibGVkKCkpCisJCXJldHVybiAwOworCisJdGJvb3RfY3JlYXRlX3RyYW1wb2xpbmUoKTsKKworCWF0b21pY19zZXQoJmFwX3dmc19jb3VudCwgMCk7CisJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZ0Ym9vdF9jcHVfbm90aWZpZXIpOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKHRib290X2xhdGVfaW5pdCk7CisKKy8qCisgKiBUWFQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKG9mZnNldHMgZnJvbSBUWFRfe1BVQiwgUFJJVn1fQ09ORklHX1JFR1NfQkFTRSkKKyAqLworCisjZGVmaW5lIFRYVF9QVUJfQ09ORklHX1JFR1NfQkFTRSAgICAgICAweGZlZDMwMDAwCisjZGVmaW5lIFRYVF9QUklWX0NPTkZJR19SRUdTX0JBU0UgICAgICAweGZlZDIwMDAwCisKKy8qICMgcGFnZXMgZm9yIGVhY2ggY29uZmlnIHJlZ3Mgc3BhY2UgLSB1c2VkIGJ5IGZpeG1hcCAqLworI2RlZmluZSBOUl9UWFRfQ09ORklHX1BBR0VTICAgICAoKFRYVF9QVUJfQ09ORklHX1JFR1NfQkFTRSAtICAgICAgICAgICAgICAgIFwKKwkJCQkgIFRYVF9QUklWX0NPTkZJR19SRUdTX0JBU0UpID4+IFBBR0VfU0hJRlQpCisKKy8qIG9mZnNldHMgZnJvbSBwdWIvcHJpdiBjb25maWcgc3BhY2UgKi8KKyNkZWZpbmUgVFhUQ1JfSEVBUF9CQVNFICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBUWFRDUl9IRUFQX1NJWkUgICAgICAgICAgICAgMHgwMzA4CisKKyNkZWZpbmUgU0hBMV9TSVpFICAgICAgMjAKKworc3RydWN0IHNoYTFfaGFzaCB7CisJdTggaGFzaFtTSEExX1NJWkVdOworfTsKKworc3RydWN0IHNpbml0X21sZV9kYXRhIHsKKwl1MzIgICAgICAgICAgICAgICB2ZXJzaW9uOyAgICAgICAgICAgICAvKiBjdXJyZW50bHkgNiAqLworCXN0cnVjdCBzaGExX2hhc2ggIGJpb3NfYWNtX2lkOworCXUzMiAgICAgICAgICAgICAgIGVkeF9zZW50ZXJfZmxhZ3M7CisJdTY0ICAgICAgICAgICAgICAgbXNlZ192YWxpZDsKKwlzdHJ1Y3Qgc2hhMV9oYXNoICBzaW5pdF9oYXNoOworCXN0cnVjdCBzaGExX2hhc2ggIG1sZV9oYXNoOworCXN0cnVjdCBzaGExX2hhc2ggIHN0bV9oYXNoOworCXN0cnVjdCBzaGExX2hhc2ggIGxjcF9wb2xpY3lfaGFzaDsKKwl1MzIgICAgICAgICAgICAgICBsY3BfcG9saWN5X2NvbnRyb2w7CisJdTMyICAgICAgICAgICAgICAgcmxwX3dha2V1cF9hZGRyOworCXUzMiAgICAgICAgICAgICAgIHJlc2VydmVkOworCXUzMiAgICAgICAgICAgICAgIG51bV9tZHJzOworCXUzMiAgICAgICAgICAgICAgIG1kcnNfb2ZmOworCXUzMiAgICAgICAgICAgICAgIG51bV92dGRfZG1hcnM7CisJdTMyICAgICAgICAgICAgICAgdnRkX2RtYXJzX29mZjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGJvb3RfZ2V0X2RtYXJfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICpkbWFyX3RibCkKK3sKKwl2b2lkICpoZWFwX2Jhc2UsICpoZWFwX3B0ciwgKmNvbmZpZzsKKworCWlmICghdGJvb3RfZW5hYmxlZCgpKQorCQlyZXR1cm4gZG1hcl90Ymw7CisKKwkvKgorCSAqIEFDUEkgdGFibGVzIG1heSBub3QgYmUgRE1BIHByb3RlY3RlZCBieSB0Ym9vdCwgc28gdXNlIERNQVIgY29weQorCSAqIFNJTklUIHNhdmVkIGluIFNpbml0TWxlRGF0YSBpbiBUWFQgaGVhcCAod2hpY2ggaXMgRE1BIHByb3RlY3RlZCkKKwkgKi8KKworCS8qIG1hcCBjb25maWcgc3BhY2UgaW4gb3JkZXIgdG8gZ2V0IGhlYXAgYWRkciAqLworCWNvbmZpZyA9IGlvcmVtYXAoVFhUX1BVQl9DT05GSUdfUkVHU19CQVNFLCBOUl9UWFRfQ09ORklHX1BBR0VTICoKKwkJCSBQQUdFX1NJWkUpOworCWlmICghY29uZmlnKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIG5vdyBtYXAgVFhUIGhlYXAgKi8KKwloZWFwX2Jhc2UgPSBpb3JlbWFwKCoodTY0ICopKGNvbmZpZyArIFRYVENSX0hFQVBfQkFTRSksCisJCQkgICAgKih1NjQgKikoY29uZmlnICsgVFhUQ1JfSEVBUF9TSVpFKSk7CisJaW91bm1hcChjb25maWcpOworCWlmICghaGVhcF9iYXNlKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHdhbGsgaGVhcCB0byBTaW5pdE1sZURhdGEgKi8KKwkvKiBza2lwIEJpb3NEYXRhICovCisJaGVhcF9wdHIgPSBoZWFwX2Jhc2UgKyAqKHU2NCAqKWhlYXBfYmFzZTsKKwkvKiBza2lwIE9zTWxlRGF0YSAqLworCWhlYXBfcHRyICs9ICoodTY0ICopaGVhcF9wdHI7CisJLyogc2tpcCBPc1Npbml0RGF0YSAqLworCWhlYXBfcHRyICs9ICoodTY0ICopaGVhcF9wdHI7CisJLyogbm93IHBvaW50cyB0byBTaW5pdE1sZURhdGFTaXplOyBzZXQgdG8gU2luaXRNbGVEYXRhICovCisJaGVhcF9wdHIgKz0gc2l6ZW9mKHU2NCk7CisJLyogZ2V0IGFkZHIgb2YgRE1BUiB0YWJsZSAqLworCWRtYXJfdGJsID0gKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKShoZWFwX3B0ciArCisJCSAgICgoc3RydWN0IHNpbml0X21sZV9kYXRhICopaGVhcF9wdHIpLT52dGRfZG1hcnNfb2ZmIC0KKwkJICAgc2l6ZW9mKHU2NCkpOworCisJLyogZG9uJ3QgdW5tYXAgaGVhcCBiZWNhdXNlIGRtYXIuYyBuZWVkcyBhY2Nlc3MgdG8gdGhpcyAqLworCisJcmV0dXJuIGRtYXJfdGJsOworfQorCitpbnQgdGJvb3RfZm9yY2VfaW9tbXUodm9pZCkKK3sKKwlpZiAoIXRib290X2VuYWJsZWQoKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobm9faW9tbXUgfHwgc3dpb3RsYiB8fCBkbWFyX2Rpc2FibGVkKQorCQlwcl93YXJuaW5nKCJGb3JjaW5nIEludGVsLUlPTU1VIHRvIGVuYWJsZWRcbiIpOworCisJZG1hcl9kaXNhYmxlZCA9IDA7CisjaWZkZWYgQ09ORklHX1NXSU9UTEIKKwlzd2lvdGxiID0gMDsKKyNlbmRpZgorCW5vX2lvbW11ID0gMDsKKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RsYl91di5jIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCmluZGV4IDc3Yjk2ODkuLjUwM2MxZjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKQEAgLTY0MCwxMyArNjQwLDEzIEBACiAJaWYgKCFpc191dl9zeXN0ZW0oKSkKIAkJcmV0dXJuIDA7CiAKLQlwcm9jX3V2X3B0YyA9IGNyZWF0ZV9wcm9jX2VudHJ5KFVWX1BUQ19CQVNFTkFNRSwgMDQ0NCwgTlVMTCk7CisJcHJvY191dl9wdGMgPSBwcm9jX2NyZWF0ZShVVl9QVENfQkFTRU5BTUUsIDA0NDQsIE5VTEwsCisJCQkJICAmcHJvY191dl9wdGNfb3BlcmF0aW9ucyk7CiAJaWYgKCFwcm9jX3V2X3B0YykgewogCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBjcmVhdGUgJXMgcHJvYyBlbnRyeVxuIiwKIAkJICAgICAgIFVWX1BUQ19CQVNFTkFNRSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlwcm9jX3V2X3B0Yy0+cHJvY19mb3BzID0gJnByb2NfdXZfcHRjX29wZXJhdGlvbnM7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggNTIwNDMzMi4uODMyNjQ5MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTc2LDcgKzc2LDcgQEAKICAqIEYwIDBGIGJ1ZyB3b3JrYXJvdW5kLi4gV2UgaGF2ZSBhIHNwZWNpYWwgbGluayBzZWdtZW50CiAgKiBmb3IgdGhpcy4KICAqLwotZ2F0ZV9kZXNjIGlkdF90YWJsZVsyNTZdCitnYXRlX2Rlc2MgaWR0X3RhYmxlW05SX1ZFQ1RPUlNdCiAJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLmlkdCIpKSkgPSB7IHsgeyB7IDAsIDAgfSB9IH0sIH07CiAjZW5kaWYKIApAQCAtNzg2LDI3ICs3ODYsNiBAQAogI2VuZGlmCiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi11bnNpZ25lZCBsb25nIHBhdGNoX2VzcGZpeF9kZXNjKHVuc2lnbmVkIGxvbmcgdWVzcCwgdW5zaWduZWQgbG9uZyBrZXNwKQotewotCXN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0ID0gZ2V0X2NwdV9nZHRfdGFibGUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl1bnNpZ25lZCBsb25nIGJhc2UgPSAoa2VzcCAtIHVlc3ApICYgLVRIUkVBRF9TSVpFOwotCXVuc2lnbmVkIGxvbmcgbmV3X2tlc3AgPSBrZXNwIC0gYmFzZTsKLQl1bnNpZ25lZCBsb25nIGxpbV9wYWdlcyA9IChuZXdfa2VzcCB8IChUSFJFQURfU0laRSAtIDEpKSA+PiBQQUdFX1NISUZUOwotCV9fdTY0IGRlc2MgPSAqKF9fdTY0ICopJmdkdFtHRFRfRU5UUllfRVNQRklYX1NTXTsKLQotCS8qIFNldCB1cCBiYXNlIGZvciBlc3BmaXggc2VnbWVudCAqLwotCWRlc2MgJj0gMHgwMGYwZmYwMDAwMDAwMDAwVUxMOwotCWRlc2MgfD0JKCgoKF9fdTY0KWJhc2UpIDw8IDE2KSAmIDB4MDAwMDAwZmZmZmZmMDAwMFVMTCkgfAotCQkoKCgoX191NjQpYmFzZSkgPDwgMzIpICYgMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSB8Ci0JCSgoKChfX3U2NClsaW1fcGFnZXMpIDw8IDMyKSAmIDB4MDAwZjAwMDAwMDAwMDAwMFVMTCkgfAotCQkobGltX3BhZ2VzICYgMHhmZmZmKTsKLQkqKF9fdTY0ICopJmdkdFtHRFRfRU5UUllfRVNQRklYX1NTXSA9IGRlc2M7Ci0KLQlyZXR1cm4gbmV3X2tlc3A7Ci19Ci0jZW5kaWYKLQogYXNtbGlua2FnZSB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWspKSBzbXBfdGhlcm1hbF9pbnRlcnJ1cHQodm9pZCkKIHsKIH0KQEAgLTgxNiw2ICs3OTUsMjggQEAKIH0KIAogLyoKKyAqIF9fbWF0aF9zdGF0ZV9yZXN0b3JlIGFzc3VtZXMgdGhhdCBjcjAuVFMgaXMgYWxyZWFkeSBjbGVhciBhbmQgdGhlCisgKiBmcHUgc3RhdGUgaXMgYWxsIHJlYWR5IGZvciB1c2UuICBVc2VkIGR1cmluZyBjb250ZXh0IHN3aXRjaC4KKyAqLwordm9pZCBfX21hdGhfc3RhdGVfcmVzdG9yZSh2b2lkKQoreworCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gdGhyZWFkLT50YXNrOworCisJLyoKKwkgKiBQYXJhbm9pZCByZXN0b3JlLiBzZW5kIGEgU0lHU0VHViBpZiB3ZSBmYWlsIHRvIHJlc3RvcmUgdGhlIHN0YXRlLgorCSAqLworCWlmICh1bmxpa2VseShyZXN0b3JlX2ZwdV9jaGVja2luZyh0c2spKSkgeworCQlzdHRzKCk7CisJCWZvcmNlX3NpZyhTSUdTRUdWLCB0c2spOworCQlyZXR1cm47CisJfQorCisJdGhyZWFkLT5zdGF0dXMgfD0gVFNfVVNFREZQVTsJLyogU28gd2UgZm5zYXZlIG9uIHN3aXRjaF90bygpICovCisJdHNrLT5mcHVfY291bnRlcisrOworfQorCisvKgogICogJ21hdGhfc3RhdGVfcmVzdG9yZSgpJyBzYXZlcyB0aGUgY3VycmVudCBtYXRoIGluZm9ybWF0aW9uIGluIHRoZQogICogb2xkIG1hdGggc3RhdGUgYXJyYXksIGFuZCBnZXRzIHRoZSBuZXcgb25lcyBmcm9tIHRoZSBjdXJyZW50IHRhc2sKICAqCkBAIC04NDYsMTcgKzg0Nyw4IEBACiAJfQogCiAJY2x0cygpOwkJCQkvKiBBbGxvdyBtYXRocyBvcHMgKG9yIHdlIHJlY3Vyc2UpICovCi0JLyoKLQkgKiBQYXJhbm9pZCByZXN0b3JlLiBzZW5kIGEgU0lHU0VHViBpZiB3ZSBmYWlsIHRvIHJlc3RvcmUgdGhlIHN0YXRlLgotCSAqLwotCWlmICh1bmxpa2VseShyZXN0b3JlX2ZwdV9jaGVja2luZyh0c2spKSkgewotCQlzdHRzKCk7Ci0JCWZvcmNlX3NpZyhTSUdTRUdWLCB0c2spOwotCQlyZXR1cm47Ci0JfQogCi0JdGhyZWFkLT5zdGF0dXMgfD0gVFNfVVNFREZQVTsJLyogU28gd2UgZm5zYXZlIG9uIHN3aXRjaF90bygpICovCi0JdHNrLT5mcHVfY291bnRlcisrOworCV9fbWF0aF9zdGF0ZV9yZXN0b3JlKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtYXRoX3N0YXRlX3Jlc3RvcmUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDlmYzE3ODIuLjBjY2I1N2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0zNDgsMTUgKzM0OCwxMiBAQAogCQlfZW5kID0gLjsKIAl9CiAKLQkvKiBTZWN0aW9ucyB0byBiZSBkaXNjYXJkZWQgKi8KLQkvRElTQ0FSRC8gOiB7Ci0JCSooLmV4aXRjYWxsLmV4aXQpCi0JCSooLmVoX2ZyYW1lKQotCQkqKC5kaXNjYXJkKQotCX0KLQogICAgICAgICBTVEFCU19ERUJVRwogICAgICAgICBEV0FSRl9ERUJVRworCisJLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCisJRElTQ0FSRFMKKwkvRElTQ0FSRC8gOiB7ICooLmVoX2ZyYW1lKSB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwppbmRleCA4NjAwYTA5Li5iODRlNTcxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZworKysgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwpAQCAtMSwxMiArMSw4IEBACiAjCiAjIEtWTSBjb25maWd1cmF0aW9uCiAjCi1jb25maWcgSEFWRV9LVk0KLSAgICAgICBib29sCiAKLWNvbmZpZyBIQVZFX0tWTV9JUlFDSElQCi0gICAgICAgYm9vbAotICAgICAgIGRlZmF1bHQgeQorc291cmNlICJ2aXJ0L2t2bS9LY29uZmlnIgogCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCkBAIC0yOSw2ICsyNSw5IEBACiAJc2VsZWN0IFBSRUVNUFRfTk9USUZJRVJTCiAJc2VsZWN0IE1NVV9OT1RJRklFUgogCXNlbGVjdCBBTk9OX0lOT0RFUworCXNlbGVjdCBIQVZFX0tWTV9JUlFDSElQCisJc2VsZWN0IEhBVkVfS1ZNX0VWRU5URkQKKwlzZWxlY3QgS1ZNX0FQSUNfQVJDSElURUNUVVJFCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlCiAJICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnQKQEAgLTYzLDE4ICs2Miw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGt2bS1hbWQuCiAKLWNvbmZpZyBLVk1fVFJBQ0UKLQlib29sICJLVk0gdHJhY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEtWTSAmJiBTWVNGUwotCXNlbGVjdCBNQVJLRVJTCi0Jc2VsZWN0IFJFTEFZCi0Jc2VsZWN0IERFQlVHX0ZTCi0JZGVmYXVsdCBuCi0JLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gYWxsb3dzIHJlYWRpbmcgYSB0cmFjZSBvZiBrdm0tcmVsYXRlZCBldmVudHMgdGhyb3VnaAotCSAgcmVsYXlmcy4gIE5vdGUgdGhlIEFCSSBpcyBub3QgY29uc2lkZXJlZCBzdGFibGUgYW5kIHdpbGwgYmUKLQkgIG1vZGlmaWVkIGluIGZ1dHVyZSB1cGRhdGVzLgotCiAjIE9LLCBpdCdzIGEgbGl0dGxlIGNvdW50ZXItaW50dWl0aXZlIHRvIGRvIHRoaXMsIGJ1dCBpdCBwdXRzIGl0IG5lYXRseSB1bmRlcgogIyB0aGUgdmlydHVhbGl6YXRpb24gbWVudS4KIHNvdXJjZSBkcml2ZXJzL2xndWVzdC9LY29uZmlnCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKaW5kZXggYjQzYzRlZi4uMGU3ZmU3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2t2bS9NYWtlZmlsZQpAQCAtMSwyMiArMSwxOSBAQAotIwotIyBNYWtlZmlsZSBmb3IgS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSBtb2R1bGUKLSMKLQotY29tbW9uLW9ianMgPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV9tYWluLm8gaW9hcGljLm8gXAotICAgICAgICAgICAgICAgIGNvYWxlc2NlZF9tbWlvLm8gaXJxX2NvbW0ubykKLWlmZXEgKCQoQ09ORklHX0tWTV9UUkFDRSkseSkKLWNvbW1vbi1vYmpzICs9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywga3ZtX3RyYWNlLm8pCi1lbmRpZgotaWZlcSAoJChDT05GSUdfSU9NTVVfQVBJKSx5KQotY29tbW9uLW9ianMgKz0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9rdm0vLCBpb21tdS5vKQotZW5kaWYKIAogRVhUUkFfQ0ZMQUdTICs9IC1JdmlydC9rdm0gLUlhcmNoL3g4Ni9rdm0KIAota3ZtLW9ianMgOj0gJChjb21tb24tb2JqcykgeDg2Lm8gbW11Lm8geDg2X2VtdWxhdGUubyBpODI1OS5vIGlycS5vIGxhcGljLm8gXAotCWk4MjU0Lm8gdGltZXIubwotb2JqLSQoQ09ORklHX0tWTSkgKz0ga3ZtLm8KLWt2bS1pbnRlbC1vYmpzID0gdm14Lm8KLW9iai0kKENPTkZJR19LVk1fSU5URUwpICs9IGt2bS1pbnRlbC5vCi1rdm0tYW1kLW9ianMgPSBzdm0ubwotb2JqLSQoQ09ORklHX0tWTV9BTUQpICs9IGt2bS1hbWQubworQ0ZMQUdTX3g4Ni5vIDo9IC1JLgorQ0ZMQUdTX3N2bS5vIDo9IC1JLgorQ0ZMQUdTX3ZteC5vIDo9IC1JLgorCitrdm0teQkJCSs9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywga3ZtX21haW4ubyBpb2FwaWMubyBcCisJCQkJY29hbGVzY2VkX21taW8ubyBpcnFfY29tbS5vIGV2ZW50ZmQubykKK2t2bS0kKENPTkZJR19JT01NVV9BUEkpCSs9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywgaW9tbXUubykKKwora3ZtLXkJCQkrPSB4ODYubyBtbXUubyBlbXVsYXRlLm8gaTgyNTkubyBpcnEubyBsYXBpYy5vIFwKKwkJCSAgIGk4MjU0Lm8gdGltZXIubwora3ZtLWludGVsLXkJCSs9IHZteC5vCitrdm0tYW1kLXkJCSs9IHN2bS5vCisKK29iai0kKENPTkZJR19LVk0pCSs9IGt2bS5vCitvYmotJChDT05GSUdfS1ZNX0lOVEVMKQkrPSBrdm0taW50ZWwubworb2JqLSQoQ09ORklHX0tWTV9BTUQpCSs9IGt2bS1hbWQubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJlNWNkNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKQEAgLTAsMCArMSwyMzkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlbXVsYXRlLmMKKyAqCisgKiBHZW5lcmljIHg4NiAoMzItYml0IGFuZCA2NC1iaXQpIGluc3RydWN0aW9uIGRlY29kZXIgYW5kIGVtdWxhdG9yLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBLZWlyIEZyYXNlcgorICoKKyAqIExpbnV4IGNvZGluZyBzdHlsZSwgbW9kIHIvbSBkZWNvZGVyLCBzZWdtZW50IGJhc2UgZml4ZXMsIHJlYWwtbW9kZQorICogcHJpdmlsZWdlZCBpbnN0cnVjdGlvbnM6CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFF1bXJhbmV0CisgKgorICogICBBdmkgS2l2aXR5IDxhdmlAcXVtcmFuZXQuY29tPgorICogICBZYW5pdiBLYW1heSA8eWFuaXZAcXVtcmFuZXQuY29tPgorICoKKyAqIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMi4gIFNlZQorICogdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KKyAqCisgKiBGcm9tOiB4ZW4tdW5zdGFibGUgMTA2NzY6YWY5ODA5ZjUxZjgxYTNjNDNmMjc2ZjAwYzgxYTUyZWY1NThhZmRhNAorICovCisKKyNpZm5kZWYgX19LRVJORUxfXworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8cHVibGljL3hlbi5oPgorI2RlZmluZSBEUFJJTlRGKF9mLCBfYSAuLi4pIHByaW50ZihfZiAsICMjIF9hKQorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgImt2bV9jYWNoZV9yZWdzLmgiCisjZGVmaW5lIERQUklOVEYoeC4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2VtdWxhdGUuaD4KKworI2luY2x1ZGUgIm1tdS5oIgkJLyogZm9yIGlzX2xvbmdfbW9kZSgpICovCisKKy8qCisgKiBPcGNvZGUgZWZmZWN0aXZlLWFkZHJlc3MgZGVjb2RlIHRhYmxlcy4KKyAqIE5vdGUgdGhhdCB3ZSBvbmx5IGVtdWxhdGUgaW5zdHJ1Y3Rpb25zIHRoYXQgaGF2ZSBhdCBsZWFzdCBvbmUgbWVtb3J5CisgKiBvcGVyYW5kIChleGNsdWRpbmcgaW1wbGljaXQgc3RhY2sgcmVmZXJlbmNlcykuIFdlIGFzc3VtZSB0aGF0IHN0YWNrCisgKiByZWZlcmVuY2VzIGFuZCBpbnN0cnVjdGlvbiBmZXRjaGVzIHdpbGwgbmV2ZXIgb2NjdXIgaW4gc3BlY2lhbCBtZW1vcnkKKyAqIGFyZWFzIHRoYXQgcmVxdWlyZSBlbXVsYXRpb24uIFNvLCBmb3IgZXhhbXBsZSwgJ21vdiA8aW1tPiw8cmVnPicgbmVlZAorICogbm90IGJlIGhhbmRsZWQuCisgKi8KKworLyogT3BlcmFuZCBzaXplczogOC1iaXQgb3BlcmFuZHMgb3Igc3BlY2lmaWVkL292ZXJyaWRkZW4gc2l6ZS4gKi8KKyNkZWZpbmUgQnl0ZU9wICAgICAgKDE8PDApCS8qIDgtYml0IG9wZXJhbmRzLiAqLworLyogRGVzdGluYXRpb24gb3BlcmFuZCB0eXBlLiAqLworI2RlZmluZSBJbXBsaWNpdE9wcyAoMTw8MSkJLyogSW1wbGljaXQgaW4gb3Bjb2RlLiBObyBnZW5lcmljIGRlY29kZS4gKi8KKyNkZWZpbmUgRHN0UmVnICAgICAgKDI8PDEpCS8qIFJlZ2lzdGVyIG9wZXJhbmQuICovCisjZGVmaW5lIERzdE1lbSAgICAgICgzPDwxKQkvKiBNZW1vcnkgb3BlcmFuZC4gKi8KKyNkZWZpbmUgRHN0QWNjICAgICAgKDQ8PDEpICAgICAgLyogRGVzdGluYXRpb24gQWNjdW11bGF0b3IgKi8KKyNkZWZpbmUgRHN0TWFzayAgICAgKDc8PDEpCisvKiBTb3VyY2Ugb3BlcmFuZCB0eXBlLiAqLworI2RlZmluZSBTcmNOb25lICAgICAoMDw8NCkJLyogTm8gc291cmNlIG9wZXJhbmQuICovCisjZGVmaW5lIFNyY0ltcGxpY2l0ICgwPDw0KQkvKiBTb3VyY2Ugb3BlcmFuZCBpcyBpbXBsaWNpdCBpbiB0aGUgb3Bjb2RlLiAqLworI2RlZmluZSBTcmNSZWcgICAgICAoMTw8NCkJLyogUmVnaXN0ZXIgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjTWVtICAgICAgKDI8PDQpCS8qIE1lbW9yeSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNNZW0xNiAgICAoMzw8NCkJLyogTWVtb3J5IG9wZXJhbmQgKDE2LWJpdCkuICovCisjZGVmaW5lIFNyY01lbTMyICAgICg0PDw0KQkvKiBNZW1vcnkgb3BlcmFuZCAoMzItYml0KS4gKi8KKyNkZWZpbmUgU3JjSW1tICAgICAgKDU8PDQpCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1CeXRlICAoNjw8NCkJLyogOC1iaXQgc2lnbi1leHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjT25lICAgICAgKDc8PDQpCS8qIEltcGxpZWQgJzEnICovCisjZGVmaW5lIFNyY0ltbVVCeXRlICg4PDw0KSAgICAgIC8qIDgtYml0IHVuc2lnbmVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1VICAgICAoOTw8NCkgICAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQgKi8KKyNkZWZpbmUgU3JjTWFzayAgICAgKDB4Zjw8NCkKKy8qIEdlbmVyaWMgTW9kUk0gZGVjb2RlLiAqLworI2RlZmluZSBNb2RSTSAgICAgICAoMTw8OCkKKy8qIERlc3RpbmF0aW9uIGlzIG9ubHkgd3JpdHRlbjsgbmV2ZXIgcmVhZC4gKi8KKyNkZWZpbmUgTW92ICAgICAgICAgKDE8PDkpCisjZGVmaW5lIEJpdE9wICAgICAgICgxPDwxMCkKKyNkZWZpbmUgTWVtQWJzICAgICAgKDE8PDExKSAgICAgIC8qIE1lbW9yeSBvcGVyYW5kIGlzIGFic29sdXRlIGRpc3BsYWNlbWVudCAqLworI2RlZmluZSBTdHJpbmcgICAgICAoMTw8MTIpICAgICAvKiBTdHJpbmcgaW5zdHJ1Y3Rpb24gKHJlcCBjYXBhYmxlKSAqLworI2RlZmluZSBTdGFjayAgICAgICAoMTw8MTMpICAgICAvKiBTdGFjayBpbnN0cnVjdGlvbiAocHVzaC9wb3ApICovCisjZGVmaW5lIEdyb3VwICAgICAgICgxPDwxNCkgICAgIC8qIEJpdHMgMzo1IG9mIG1vZHJtIGJ5dGUgZXh0ZW5kIG9wY29kZSAqLworI2RlZmluZSBHcm91cER1YWwgICAoMTw8MTUpICAgICAvKiBBbHRlcm5hdGUgZGVjb2Rpbmcgb2YgbW9kID09IDMgKi8KKyNkZWZpbmUgR3JvdXBNYXNrICAgMHhmZiAgICAgICAgLyogR3JvdXAgbnVtYmVyIHN0b3JlZCBpbiBiaXRzIDA6NyAqLworLyogU291cmNlIDIgb3BlcmFuZCB0eXBlICovCisjZGVmaW5lIFNyYzJOb25lICAgICgwPDwyOSkKKyNkZWZpbmUgU3JjMkNMICAgICAgKDE8PDI5KQorI2RlZmluZSBTcmMySW1tQnl0ZSAoMjw8MjkpCisjZGVmaW5lIFNyYzJPbmUgICAgICgzPDwyOSkKKyNkZWZpbmUgU3JjMkltbTE2ICAgKDQ8PDI5KQorI2RlZmluZSBTcmMyTWFzayAgICAoNzw8MjkpCisKK2VudW0geworCUdyb3VwMV84MCwgR3JvdXAxXzgxLCBHcm91cDFfODIsIEdyb3VwMV84MywKKwlHcm91cDFBLCBHcm91cDNfQnl0ZSwgR3JvdXAzLCBHcm91cDQsIEdyb3VwNSwgR3JvdXA3LAorfTsKKworc3RhdGljIHUzMiBvcGNvZGVfdGFibGVbMjU2XSA9IHsKKwkvKiAweDAwIC0gMHgwNyAqLworCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKKwlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCisJQnl0ZU9wIHwgRHN0QWNjIHwgU3JjSW1tLCBEc3RBY2MgfCBTcmNJbW0sIDAsIDAsCisJLyogMHgwOCAtIDB4MEYgKi8KKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLAorCTAsIDAsIDAsIDAsCisJLyogMHgxMCAtIDB4MTcgKi8KKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdEFjYyB8IFNyY0ltbSwgRHN0QWNjIHwgU3JjSW1tLCAwLCAwLAorCS8qIDB4MTggLSAweDFGICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKKwlCeXRlT3AgfCBEc3RBY2MgfCBTcmNJbW0sIERzdEFjYyB8IFNyY0ltbSwgMCwgMCwKKwkvKiAweDIwIC0gMHgyNyAqLworCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKKwlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCisJRHN0QWNjIHwgU3JjSW1tQnl0ZSwgRHN0QWNjIHwgU3JjSW1tLCAwLCAwLAorCS8qIDB4MjggLSAweDJGICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKKwkwLCAwLCAwLCAwLAorCS8qIDB4MzAgLSAweDM3ICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKKwkwLCAwLCAwLCAwLAorCS8qIDB4MzggLSAweDNGICovCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKKwlCeXRlT3AgfCBEc3RBY2MgfCBTcmNJbW0sIERzdEFjYyB8IFNyY0ltbSwKKwkwLCAwLAorCS8qIDB4NDAgLSAweDQ3ICovCisJRHN0UmVnLCBEc3RSZWcsIERzdFJlZywgRHN0UmVnLCBEc3RSZWcsIERzdFJlZywgRHN0UmVnLCBEc3RSZWcsCisJLyogMHg0OCAtIDB4NEYgKi8KKwlEc3RSZWcsIERzdFJlZywgRHN0UmVnLCBEc3RSZWcsCURzdFJlZywgRHN0UmVnLCBEc3RSZWcsIERzdFJlZywKKwkvKiAweDUwIC0gMHg1NyAqLworCVNyY1JlZyB8IFN0YWNrLCBTcmNSZWcgfCBTdGFjaywgU3JjUmVnIHwgU3RhY2ssIFNyY1JlZyB8IFN0YWNrLAorCVNyY1JlZyB8IFN0YWNrLCBTcmNSZWcgfCBTdGFjaywgU3JjUmVnIHwgU3RhY2ssIFNyY1JlZyB8IFN0YWNrLAorCS8qIDB4NTggLSAweDVGICovCisJRHN0UmVnIHwgU3RhY2ssIERzdFJlZyB8IFN0YWNrLCBEc3RSZWcgfCBTdGFjaywgRHN0UmVnIHwgU3RhY2ssCisJRHN0UmVnIHwgU3RhY2ssIERzdFJlZyB8IFN0YWNrLCBEc3RSZWcgfCBTdGFjaywgRHN0UmVnIHwgU3RhY2ssCisJLyogMHg2MCAtIDB4NjcgKi8KKwkwLCAwLCAwLCBEc3RSZWcgfCBTcmNNZW0zMiB8IE1vZFJNIHwgTW92IC8qIG1vdnN4ZCAoeDg2LzY0KSAqLyAsCisJMCwgMCwgMCwgMCwKKwkvKiAweDY4IC0gMHg2RiAqLworCVNyY0ltbSB8IE1vdiB8IFN0YWNrLCAwLCBTcmNJbW1CeXRlIHwgTW92IHwgU3RhY2ssIDAsCisJU3JjTm9uZSAgfCBCeXRlT3AgIHwgSW1wbGljaXRPcHMsIFNyY05vbmUgIHwgSW1wbGljaXRPcHMsIC8qIGluc2IsIGluc3cvaW5zZCAqLworCVNyY05vbmUgIHwgQnl0ZU9wICB8IEltcGxpY2l0T3BzLCBTcmNOb25lICB8IEltcGxpY2l0T3BzLCAvKiBvdXRzYiwgb3V0c3cvb3V0c2QgKi8KKwkvKiAweDcwIC0gMHg3NyAqLworCVNyY0ltbUJ5dGUsIFNyY0ltbUJ5dGUsIFNyY0ltbUJ5dGUsIFNyY0ltbUJ5dGUsCisJU3JjSW1tQnl0ZSwgU3JjSW1tQnl0ZSwgU3JjSW1tQnl0ZSwgU3JjSW1tQnl0ZSwKKwkvKiAweDc4IC0gMHg3RiAqLworCVNyY0ltbUJ5dGUsIFNyY0ltbUJ5dGUsIFNyY0ltbUJ5dGUsIFNyY0ltbUJ5dGUsCisJU3JjSW1tQnl0ZSwgU3JjSW1tQnl0ZSwgU3JjSW1tQnl0ZSwgU3JjSW1tQnl0ZSwKKwkvKiAweDgwIC0gMHg4NyAqLworCUdyb3VwIHwgR3JvdXAxXzgwLCBHcm91cCB8IEdyb3VwMV84MSwKKwlHcm91cCB8IEdyb3VwMV84MiwgR3JvdXAgfCBHcm91cDFfODMsCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKKwkvKiAweDg4IC0gMHg4RiAqLworCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTW92LCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IE1vdiwKKwlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCisJRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBNb3YsIE1vZFJNIHwgRHN0UmVnLAorCURzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LCBHcm91cCB8IEdyb3VwMUEsCisJLyogMHg5MCAtIDB4OTcgKi8KKwlEc3RSZWcsIERzdFJlZywgRHN0UmVnLCBEc3RSZWcsCURzdFJlZywgRHN0UmVnLCBEc3RSZWcsIERzdFJlZywKKwkvKiAweDk4IC0gMHg5RiAqLworCTAsIDAsIFNyY0ltbSB8IFNyYzJJbW0xNiwgMCwKKwlJbXBsaWNpdE9wcyB8IFN0YWNrLCBJbXBsaWNpdE9wcyB8IFN0YWNrLCAwLCAwLAorCS8qIDB4QTAgLSAweEE3ICovCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW92IHwgTWVtQWJzLCBEc3RSZWcgfCBTcmNNZW0gfCBNb3YgfCBNZW1BYnMsCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW92IHwgTWVtQWJzLCBEc3RNZW0gfCBTcmNSZWcgfCBNb3YgfCBNZW1BYnMsCisJQnl0ZU9wIHwgSW1wbGljaXRPcHMgfCBNb3YgfCBTdHJpbmcsIEltcGxpY2l0T3BzIHwgTW92IHwgU3RyaW5nLAorCUJ5dGVPcCB8IEltcGxpY2l0T3BzIHwgU3RyaW5nLCBJbXBsaWNpdE9wcyB8IFN0cmluZywKKwkvKiAweEE4IC0gMHhBRiAqLworCTAsIDAsIEJ5dGVPcCB8IEltcGxpY2l0T3BzIHwgTW92IHwgU3RyaW5nLCBJbXBsaWNpdE9wcyB8IE1vdiB8IFN0cmluZywKKwlCeXRlT3AgfCBJbXBsaWNpdE9wcyB8IE1vdiB8IFN0cmluZywgSW1wbGljaXRPcHMgfCBNb3YgfCBTdHJpbmcsCisJQnl0ZU9wIHwgSW1wbGljaXRPcHMgfCBTdHJpbmcsIEltcGxpY2l0T3BzIHwgU3RyaW5nLAorCS8qIDB4QjAgLSAweEI3ICovCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCisJLyogMHhCOCAtIDB4QkYgKi8KKwlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwkvKiAweEMwIC0gMHhDNyAqLworCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sCisJMCwgSW1wbGljaXRPcHMgfCBTdGFjaywgMCwgMCwKKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSB8IE1vdiwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0gfCBNb3YsCisJLyogMHhDOCAtIDB4Q0YgKi8KKwkwLCAwLCAwLCBJbXBsaWNpdE9wcyB8IFN0YWNrLAorCUltcGxpY2l0T3BzLCBTcmNJbW1CeXRlLCBJbXBsaWNpdE9wcywgSW1wbGljaXRPcHMsCisJLyogMHhEMCAtIDB4RDcgKi8KKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbXBsaWNpdCB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbXBsaWNpdCB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltcGxpY2l0IHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltcGxpY2l0IHwgTW9kUk0sCisJMCwgMCwgMCwgMCwKKwkvKiAweEQ4IC0gMHhERiAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHhFMCAtIDB4RTcgKi8KKwkwLCAwLCAwLCAwLAorCUJ5dGVPcCB8IFNyY0ltbVVCeXRlLCBTcmNJbW1VQnl0ZSwKKwlCeXRlT3AgfCBTcmNJbW1VQnl0ZSwgU3JjSW1tVUJ5dGUsCisJLyogMHhFOCAtIDB4RUYgKi8KKwlTcmNJbW0gfCBTdGFjaywgU3JjSW1tIHwgSW1wbGljaXRPcHMsCisJU3JjSW1tVSB8IFNyYzJJbW0xNiwgU3JjSW1tQnl0ZSB8IEltcGxpY2l0T3BzLAorCVNyY05vbmUgfCBCeXRlT3AgfCBJbXBsaWNpdE9wcywgU3JjTm9uZSB8IEltcGxpY2l0T3BzLAorCVNyY05vbmUgfCBCeXRlT3AgfCBJbXBsaWNpdE9wcywgU3JjTm9uZSB8IEltcGxpY2l0T3BzLAorCS8qIDB4RjAgLSAweEY3ICovCisJMCwgMCwgMCwgMCwKKwlJbXBsaWNpdE9wcywgSW1wbGljaXRPcHMsIEdyb3VwIHwgR3JvdXAzX0J5dGUsIEdyb3VwIHwgR3JvdXAzLAorCS8qIDB4RjggLSAweEZGICovCisJSW1wbGljaXRPcHMsIDAsIEltcGxpY2l0T3BzLCBJbXBsaWNpdE9wcywKKwlJbXBsaWNpdE9wcywgSW1wbGljaXRPcHMsIEdyb3VwIHwgR3JvdXA0LCBHcm91cCB8IEdyb3VwNSwKK307CisKK3N0YXRpYyB1MzIgdHdvYnl0ZV90YWJsZVsyNTZdID0geworCS8qIDB4MDAgLSAweDBGICovCisJMCwgR3JvdXAgfCBHcm91cER1YWwgfCBHcm91cDcsIDAsIDAsIDAsIEltcGxpY2l0T3BzLCBJbXBsaWNpdE9wcywgMCwKKwlJbXBsaWNpdE9wcywgSW1wbGljaXRPcHMsIDAsIDAsIDAsIEltcGxpY2l0T3BzIHwgTW9kUk0sIDAsIDAsCisJLyogMHgxMCAtIDB4MUYgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCBJbXBsaWNpdE9wcyB8IE1vZFJNLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCS8qIDB4MjAgLSAweDJGICovCisJTW9kUk0gfCBJbXBsaWNpdE9wcywgTW9kUk0sIE1vZFJNIHwgSW1wbGljaXRPcHMsIE1vZFJNLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHgzMCAtIDB4M0YgKi8KKwlJbXBsaWNpdE9wcywgMCwgSW1wbGljaXRPcHMsIDAsCisJSW1wbGljaXRPcHMsIEltcGxpY2l0T3BzLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHg0MCAtIDB4NDcgKi8KKwlEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCisJRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LAorCURzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwKKwlEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCisJLyogMHg0OCAtIDB4NEYgKi8KKwlEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCisJRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LAorCURzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwKKwlEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCisJLyogMHg1MCAtIDB4NUYgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCS8qIDB4NjAgLSAweDZGICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkvKiAweDcwIC0gMHg3RiAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHg4MCAtIDB4OEYgKi8KKwlTcmNJbW0sIFNyY0ltbSwgU3JjSW1tLCBTcmNJbW0sIFNyY0ltbSwgU3JjSW1tLCBTcmNJbW0sIFNyY0ltbSwKKwlTcmNJbW0sIFNyY0ltbSwgU3JjSW1tLCBTcmNJbW0sIFNyY0ltbSwgU3JjSW1tLCBTcmNJbW0sIFNyY0ltbSwKKwkvKiAweDkwIC0gMHg5RiAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHhBMCAtIDB4QTcgKi8KKwkwLCAwLCAwLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IEJpdE9wLAorCURzdE1lbSB8IFNyY1JlZyB8IFNyYzJJbW1CeXRlIHwgTW9kUk0sCisJRHN0TWVtIHwgU3JjUmVnIHwgU3JjMkNMIHwgTW9kUk0sIDAsIDAsCisJLyogMHhBOCAtIDB4QUYgKi8KKwkwLCAwLCAwLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IEJpdE9wLAorCURzdE1lbSB8IFNyY1JlZyB8IFNyYzJJbW1CeXRlIHwgTW9kUk0sCisJRHN0TWVtIHwgU3JjUmVnIHwgU3JjMkNMIHwgTW9kUk0sCisJTW9kUk0sIDAsCisJLyogMHhCMCAtIDB4QjcgKi8KKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIDAsCisJICAgIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgQml0T3AsCisJMCwgMCwgQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCisJICAgIERzdFJlZyB8IFNyY01lbTE2IHwgTW9kUk0gfCBNb3YsCisJLyogMHhCOCAtIDB4QkYgKi8KKwkwLCAwLCBEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgQml0T3AsCisJMCwgMCwgQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCisJICAgIERzdFJlZyB8IFNyY01lbTE2IHwgTW9kUk0gfCBNb3YsCisJLyogMHhDMCAtIDB4Q0YgKi8KKwkwLCAwLCAwLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IE1vdiwgMCwgMCwgMCwgSW1wbGljaXRPcHMgfCBNb2RSTSwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCS8qIDB4RDAgLSAweERGICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkvKiAweEUwIC0gMHhFRiAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJLyogMHhGMCAtIDB4RkYgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCit9OworCitzdGF0aWMgdTMyIGdyb3VwX3RhYmxlW10gPSB7CisJW0dyb3VwMV84MCo4XSA9CisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIEJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwKKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIEJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAorCVtHcm91cDFfODEqOF0gPQorCURzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwKKwlEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sCisJRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAorCURzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwKKwlbR3JvdXAxXzgyKjhdID0KKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIEJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwKKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sCisJW0dyb3VwMV84Myo4XSA9CisJRHN0TWVtIHwgU3JjSW1tQnl0ZSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sCisJRHN0TWVtIHwgU3JjSW1tQnl0ZSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sCisJRHN0TWVtIHwgU3JjSW1tQnl0ZSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sCisJRHN0TWVtIHwgU3JjSW1tQnl0ZSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sCisJW0dyb3VwMUEqOF0gPQorCURzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSB8IE1vdiB8IFN0YWNrLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCVtHcm91cDNfQnl0ZSo4XSA9CisJQnl0ZU9wIHwgU3JjSW1tIHwgRHN0TWVtIHwgTW9kUk0sIDAsCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sCisJMCwgMCwgMCwgMCwKKwlbR3JvdXAzKjhdID0KKwlEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgMCwKKwlEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sIERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwKKwkwLCAwLCAwLCAwLAorCVtHcm91cDQqOF0gPQorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLAorCTAsIDAsIDAsIDAsIDAsIDAsCisJW0dyb3VwNSo4XSA9CisJRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sCisJU3JjTWVtIHwgTW9kUk0gfCBTdGFjaywgMCwKKwlTcmNNZW0gfCBNb2RSTSB8IFN0YWNrLCAwLCBTcmNNZW0gfCBNb2RSTSB8IFN0YWNrLCAwLAorCVtHcm91cDcqOF0gPQorCTAsIDAsIE1vZFJNIHwgU3JjTWVtLCBNb2RSTSB8IFNyY01lbSwKKwlTcmNOb25lIHwgTW9kUk0gfCBEc3RNZW0gfCBNb3YsIDAsCisJU3JjTWVtMTYgfCBNb2RSTSB8IE1vdiwgU3JjTWVtIHwgTW9kUk0gfCBCeXRlT3AsCit9OworCitzdGF0aWMgdTMyIGdyb3VwMl90YWJsZVtdID0geworCVtHcm91cDcqOF0gPQorCVNyY05vbmUgfCBNb2RSTSwgMCwgMCwgU3JjTm9uZSB8IE1vZFJNLAorCVNyY05vbmUgfCBNb2RSTSB8IERzdE1lbSB8IE1vdiwgMCwKKwlTcmNNZW0xNiB8IE1vZFJNIHwgTW92LCAwLAorfTsKKworLyogRUZMQUdTIGJpdCBkZWZpbml0aW9ucy4gKi8KKyNkZWZpbmUgRUZMR19WTSAoMTw8MTcpCisjZGVmaW5lIEVGTEdfUkYgKDE8PDE2KQorI2RlZmluZSBFRkxHX09GICgxPDwxMSkKKyNkZWZpbmUgRUZMR19ERiAoMTw8MTApCisjZGVmaW5lIEVGTEdfSUYgKDE8PDkpCisjZGVmaW5lIEVGTEdfU0YgKDE8PDcpCisjZGVmaW5lIEVGTEdfWkYgKDE8PDYpCisjZGVmaW5lIEVGTEdfQUYgKDE8PDQpCisjZGVmaW5lIEVGTEdfUEYgKDE8PDIpCisjZGVmaW5lIEVGTEdfQ0YgKDE8PDApCisKKy8qCisgKiBJbnN0cnVjdGlvbiBlbXVsYXRpb246CisgKiBNb3N0IGluc3RydWN0aW9ucyBhcmUgZW11bGF0ZWQgZGlyZWN0bHkgdmlhIGEgZnJhZ21lbnQgb2YgaW5saW5lIGFzc2VtYmx5CisgKiBjb2RlLiBUaGlzIGFsbG93cyB1cyB0byBzYXZlL3Jlc3RvcmUgRUZMQUdTIGFuZCB0aHVzIHZlcnkgZWFzaWx5IHBpY2sgdXAKKyAqIGFueSBtb2RpZmllZCBmbGFncy4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorI2RlZmluZSBfTE8zMiAiayIJCS8qIGZvcmNlIDMyLWJpdCBvcGVyYW5kICovCisjZGVmaW5lIF9TVEsgICIlJXJzcCIJCS8qIHN0YWNrIHBvaW50ZXIgKi8KKyNlbGlmIGRlZmluZWQoX19pMzg2X18pCisjZGVmaW5lIF9MTzMyICIiCQkvKiBmb3JjZSAzMi1iaXQgb3BlcmFuZCAqLworI2RlZmluZSBfU1RLICAiJSVlc3AiCQkvKiBzdGFjayBwb2ludGVyICovCisjZW5kaWYKKworLyoKKyAqIFRoZXNlIEVGTEFHUyBiaXRzIGFyZSByZXN0b3JlZCBmcm9tIHNhdmVkIHZhbHVlIGR1cmluZyBlbXVsYXRpb24sIGFuZAorICogYW55IGNoYW5nZXMgYXJlIHdyaXR0ZW4gYmFjayB0byB0aGUgc2F2ZWQgdmFsdWUgYWZ0ZXIgZW11bGF0aW9uLgorICovCisjZGVmaW5lIEVGTEFHU19NQVNLIChFRkxHX09GfEVGTEdfU0Z8RUZMR19aRnxFRkxHX0FGfEVGTEdfUEZ8RUZMR19DRikKKworLyogQmVmb3JlIGV4ZWN1dGluZyBpbnN0cnVjdGlvbjogcmVzdG9yZSBuZWNlc3NhcnkgYml0cyBpbiBFRkxBR1MuICovCisjZGVmaW5lIF9QUkVfRUZMQUdTKF9zYXYsIF9tc2ssIF90bXApCQkJCQlcCisJLyogRUZMQUdTID0gKF9zYXYgJiBfbXNrKSB8IChFRkxBR1MgJiB+X21zayk7IF9zYXYgJj0gfl9tc2s7ICovIFwKKwkibW92bCAlIl9zYXYiLCUiX0xPMzIgX3RtcCI7ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSJwdXNoICUiX3RtcCI7ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJInB1c2ggJSJfdG1wIjsgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkibW92bCAlIl9tc2siLCUiX0xPMzIgX3RtcCI7ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSJhbmRsICUiX0xPMzIgX3RtcCIsKCJfU1RLIik7ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJInB1c2hmOyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkibm90bCAlIl9MTzMyIF90bXAiOyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSJhbmRsICUiX0xPMzIgX3RtcCIsKCJfU1RLIik7ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJImFuZGwgJSJfTE8zMiBfdG1wIiwiX19zdHJpbmdpZnkoQklUU19QRVJfTE9ORy80KSIoIl9TVEsiKTsgIglcCisJInBvcCAgJSJfdG1wIjsgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkib3JsICAlIl9MTzMyIF90bXAiLCgiX1NUSyIpOyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSJwb3BmOyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJInBvcCAgJSJfc2F2IjsgIgorCisvKiBBZnRlciBleGVjdXRpbmcgaW5zdHJ1Y3Rpb246IHdyaXRlLWJhY2sgbmVjZXNzYXJ5IGJpdHMgaW4gRUZMQUdTLiAqLworI2RlZmluZSBfUE9TVF9FRkxBR1MoX3NhdiwgX21zaywgX3RtcCkgXAorCS8qIF9zYXYgfD0gRUZMQUdTICYgX21zazsgKi8JCVwKKwkicHVzaGY7ICIJCQkJXAorCSJwb3AgICUiX3RtcCI7ICIJCQlcCisJImFuZGwgJSJfbXNrIiwlIl9MTzMyIF90bXAiOyAiCQlcCisJIm9ybCAgJSJfTE8zMiBfdG1wIiwlIl9zYXYiOyAiCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIE9ONjQoeCkgeAorI2Vsc2UKKyNkZWZpbmUgT042NCh4KQorI2VuZGlmCisKKyNkZWZpbmUgX19fX2VtdWxhdGVfMm9wKF9vcCwgX3NyYywgX2RzdCwgX2VmbGFncywgX3gsIF95LCBfc3VmZml4KQlcCisJZG8gewkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQlcCisJCQlfUFJFX0VGTEFHUygiMCIsICI0IiwgIjIiKQkJCVwKKwkJCV9vcCBfc3VmZml4ICIgJSJfeCIzLCUxOyAiCQkJXAorCQkJX1BPU1RfRUZMQUdTKCIwIiwgIjQiLCAiMiIpCQkJXAorCQkJOiAiPW0iIChfZWZsYWdzKSwgIj1tIiAoKF9kc3QpLnZhbCksCQlcCisJCQkgICI9JnIiIChfdG1wKQkJCQkJXAorCQkJOiBfeSAoKF9zcmMpLnZhbCksICJpIiAoRUZMQUdTX01BU0spKTsJCVwKKwl9IHdoaWxlICgwKQorCisKKy8qIFJhdyBlbXVsYXRpb246IGluc3RydWN0aW9uIGhhcyB0d28gZXhwbGljaXQgb3BlcmFuZHMuICovCisjZGVmaW5lIF9fZW11bGF0ZV8yb3Bfbm9ieXRlKF9vcCxfc3JjLF9kc3QsX2VmbGFncyxfd3gsX3d5LF9seCxfbHksX3F4LF9xeSkgXAorCWRvIHsJCQkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyBfdG1wOwkJCQkJXAorCQkJCQkJCQkJXAorCQlzd2l0Y2ggKChfZHN0KS5ieXRlcykgewkJCQkJXAorCQljYXNlIDI6CQkJCQkJCVwKKwkJCV9fX19lbXVsYXRlXzJvcChfb3AsX3NyYyxfZHN0LF9lZmxhZ3MsX3d4LF93eSwidyIpOyBcCisJCQlicmVhazsJCQkJCQlcCisJCWNhc2UgNDoJCQkJCQkJXAorCQkJX19fX2VtdWxhdGVfMm9wKF9vcCxfc3JjLF9kc3QsX2VmbGFncyxfbHgsX2x5LCJsIik7IFwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJY2FzZSA4OgkJCQkJCQlcCisJCQlPTjY0KF9fX19lbXVsYXRlXzJvcChfb3AsX3NyYyxfZHN0LF9lZmxhZ3MsX3F4LF9xeSwicSIpKTsgXAorCQkJYnJlYWs7CQkJCQkJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fZW11bGF0ZV8yb3AoX29wLF9zcmMsX2RzdCxfZWZsYWdzLF9ieCxfYnksX3d4LF93eSxfbHgsX2x5LF9xeCxfcXkpIFwKKwlkbyB7CQkJCQkJCQkgICAgIFwKKwkJdW5zaWduZWQgbG9uZyBfdG1wOwkJCQkJICAgICBcCisJCXN3aXRjaCAoKF9kc3QpLmJ5dGVzKSB7CQkJCSAgICAgICAgICAgICBcCisJCWNhc2UgMToJCQkJCQkJICAgICBcCisJCQlfX19fZW11bGF0ZV8yb3AoX29wLF9zcmMsX2RzdCxfZWZsYWdzLF9ieCxfYnksImIiKTsgIFwKKwkJCWJyZWFrOwkJCQkJCSAgICAgXAorCQlkZWZhdWx0OgkJCQkJCSAgICAgXAorCQkJX19lbXVsYXRlXzJvcF9ub2J5dGUoX29wLCBfc3JjLCBfZHN0LCBfZWZsYWdzLAkgICAgIFwKKwkJCQkJICAgICBfd3gsIF93eSwgX2x4LCBfbHksIF9xeCwgX3F5KTsgIFwKKwkJCWJyZWFrOwkJCQkJCSAgICAgXAorCQl9CQkJCQkJCSAgICAgXAorCX0gd2hpbGUgKDApCisKKy8qIFNvdXJjZSBvcGVyYW5kIGlzIGJ5dGUtc2l6ZWQgYW5kIG1heSBiZSByZXN0cmljdGVkIHRvIGp1c3QgJWNsLiAqLworI2RlZmluZSBlbXVsYXRlXzJvcF9TcmNCKF9vcCwgX3NyYywgX2RzdCwgX2VmbGFncykgICAgICAgICAgICAgICAgICAgICAgXAorCV9fZW11bGF0ZV8yb3AoX29wLCBfc3JjLCBfZHN0LCBfZWZsYWdzLAkJCQlcCisJCSAgICAgICJiIiwgImMiLCAiYiIsICJjIiwgImIiLCAiYyIsICJiIiwgImMiKQorCisvKiBTb3VyY2Ugb3BlcmFuZCBpcyBieXRlLCB3b3JkLCBsb25nIG9yIHF1YWQgc2l6ZWQuICovCisjZGVmaW5lIGVtdWxhdGVfMm9wX1NyY1YoX29wLCBfc3JjLCBfZHN0LCBfZWZsYWdzKSAgICAgICAgICAgICAgICAgICAgICBcCisJX19lbXVsYXRlXzJvcChfb3AsIF9zcmMsIF9kc3QsIF9lZmxhZ3MsCQkJCVwKKwkJICAgICAgImIiLCAicSIsICJ3IiwgInIiLCBfTE8zMiwgInIiLCAiIiwgInIiKQorCisvKiBTb3VyY2Ugb3BlcmFuZCBpcyB3b3JkLCBsb25nIG9yIHF1YWQgc2l6ZWQuICovCisjZGVmaW5lIGVtdWxhdGVfMm9wX1NyY1Zfbm9ieXRlKF9vcCwgX3NyYywgX2RzdCwgX2VmbGFncykgICAgICAgICAgICAgICBcCisJX19lbXVsYXRlXzJvcF9ub2J5dGUoX29wLCBfc3JjLCBfZHN0LCBfZWZsYWdzLAkJCVwKKwkJCSAgICAgInciLCAiciIsIF9MTzMyLCAiciIsICIiLCAiciIpCisKKy8qIEluc3RydWN0aW9uIGhhcyB0aHJlZSBvcGVyYW5kcyBhbmQgb25lIG9wZXJhbmQgaXMgc3RvcmVkIGluIEVDWCByZWdpc3RlciAqLworI2RlZmluZSBfX2VtdWxhdGVfMm9wX2NsKF9vcCwgX2NsLCBfc3JjLCBfZHN0LCBfZWZsYWdzLCBfc3VmZml4LCBfdHlwZSkgCVwKKwlkbyB7CQkJCQkJCQkJXAorCQl1bnNpZ25lZCBsb25nIF90bXA7CQkJCQkJXAorCQlfdHlwZSBfY2x2ICA9IChfY2wpLnZhbDsgIAkJCQkJXAorCQlfdHlwZSBfc3JjdiA9IChfc3JjKS52YWw7ICAgIAkJCQkJXAorCQlfdHlwZSBfZHN0diA9IChfZHN0KS52YWw7CQkJCQlcCisJCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorCQkJX1BSRV9FRkxBR1MoIjAiLCAiNSIsICIyIikJCQkJXAorCQkJX29wIF9zdWZmaXggIiAlNCwlMSBcbiIJCQkJCVwKKwkJCV9QT1NUX0VGTEFHUygiMCIsICI1IiwgIjIiKQkJCQlcCisJCQk6ICI9bSIgKF9lZmxhZ3MpLCAiK3IiIChfZHN0diksICI9JnIiIChfdG1wKQkJXAorCQkJOiAiYyIgKF9jbHYpICwgInIiIChfc3JjdiksICJpIiAoRUZMQUdTX01BU0spCQlcCisJCQkpOyAJCQkJCQkJXAorCQkJCQkJCQkJCVwKKwkJKF9jbCkudmFsICA9ICh1bnNpZ25lZCBsb25nKSBfY2x2OwkJCQlcCisJCShfc3JjKS52YWwgPSAodW5zaWduZWQgbG9uZykgX3NyY3Y7CQkJCVwKKwkJKF9kc3QpLnZhbCA9ICh1bnNpZ25lZCBsb25nKSBfZHN0djsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgZW11bGF0ZV8yb3BfY2woX29wLCBfY2wsIF9zcmMsIF9kc3QsIF9lZmxhZ3MpCQkJCVwKKwlkbyB7CQkJCQkJCQkJXAorCQlzd2l0Y2ggKChfZHN0KS5ieXRlcykgewkJCQkJCVwKKwkJY2FzZSAyOgkJCQkJCQkJXAorCQkJX19lbXVsYXRlXzJvcF9jbChfb3AsIF9jbCwgX3NyYywgX2RzdCwgX2VmbGFncywgIAlcCisJCQkJCQkidyIsIHVuc2lnbmVkIHNob3J0KTsgICAgICAgICAJXAorCQkJYnJlYWs7CQkJCQkJCVwKKwkJY2FzZSA0OiAJCQkJCQkJXAorCQkJX19lbXVsYXRlXzJvcF9jbChfb3AsIF9jbCwgX3NyYywgX2RzdCwgX2VmbGFncywgIAlcCisJCQkJCQkibCIsIHVuc2lnbmVkIGludCk7ICAgICAgICAgICAJXAorCQkJYnJlYWs7CQkJCQkJCVwKKwkJY2FzZSA4OgkJCQkJCQkJXAorCQkJT042NChfX2VtdWxhdGVfMm9wX2NsKF9vcCwgX2NsLCBfc3JjLCBfZHN0LCBfZWZsYWdzLAlcCisJCQkJCQkicSIsIHVuc2lnbmVkIGxvbmcpKTsgIAkJXAorCQkJYnJlYWs7CQkJCQkJCVwKKwkJfQkJCQkJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19lbXVsYXRlXzFvcChfb3AsIF9kc3QsIF9lZmxhZ3MsIF9zdWZmaXgpCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyBfdG1wOwkJCQkJXAorCQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQlcCisJCQlfUFJFX0VGTEFHUygiMCIsICIzIiwgIjIiKQkJCVwKKwkJCV9vcCBfc3VmZml4ICIgJTE7ICIJCQkJXAorCQkJX1BPU1RfRUZMQUdTKCIwIiwgIjMiLCAiMiIpCQkJXAorCQkJOiAiPW0iIChfZWZsYWdzKSwgIittIiAoKF9kc3QpLnZhbCksCQlcCisJCQkgICI9JnIiIChfdG1wKQkJCQkJXAorCQkJOiAiaSIgKEVGTEFHU19NQVNLKSk7CQkJCVwKKwl9IHdoaWxlICgwKQorCisvKiBJbnN0cnVjdGlvbiBoYXMgb25seSBvbmUgZXhwbGljaXQgb3BlcmFuZCAobm8gc291cmNlIG9wZXJhbmQpLiAqLworI2RlZmluZSBlbXVsYXRlXzFvcChfb3AsIF9kc3QsIF9lZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRvIHsJCQkJCQkJCVwKKwkJc3dpdGNoICgoX2RzdCkuYnl0ZXMpIHsJCQkJICAgICAgICBcCisJCWNhc2UgMToJX19lbXVsYXRlXzFvcChfb3AsIF9kc3QsIF9lZmxhZ3MsICJiIik7IGJyZWFrOwlcCisJCWNhc2UgMjoJX19lbXVsYXRlXzFvcChfb3AsIF9kc3QsIF9lZmxhZ3MsICJ3Iik7IGJyZWFrOwlcCisJCWNhc2UgNDoJX19lbXVsYXRlXzFvcChfb3AsIF9kc3QsIF9lZmxhZ3MsICJsIik7IGJyZWFrOwlcCisJCWNhc2UgODoJT042NChfX2VtdWxhdGVfMW9wKF9vcCwgX2RzdCwgX2VmbGFncywgInEiKSk7IGJyZWFrOyBcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKKy8qIEZldGNoIG5leHQgcGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24gYmVpbmcgZW11bGF0ZWQuICovCisjZGVmaW5lIGluc25fZmV0Y2goX3R5cGUsIF9zaXplLCBfZWlwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoewl1bnNpZ25lZCBsb25nIF94OwkJCQkJCVwKKwlyYyA9IGRvX2luc25fZmV0Y2goY3R4dCwgb3BzLCAoX2VpcCksICZfeCwgKF9zaXplKSk7CQlcCisJaWYgKHJjICE9IDApCQkJCQkJCVwKKwkJZ290byBkb25lOwkJCQkJCVwKKwkoX2VpcCkgKz0gKF9zaXplKTsJCQkJCQlcCisJKF90eXBlKV94OwkJCQkJCQlcCit9KQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYWRfbWFzayhzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjKQoreworCXJldHVybiAoMVVMIDw8IChjLT5hZF9ieXRlcyA8PCAzKSkgLSAxOworfQorCisvKiBBY2Nlc3MvdXBkYXRlIGFkZHJlc3MgaGVsZCBpbiBhIHJlZ2lzdGVyLCBiYXNlZCBvbiBhZGRyZXNzaW5nIG1vZGUuICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2FkZHJlc3NfbWFzayhzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjLCB1bnNpZ25lZCBsb25nIHJlZykKK3sKKwlpZiAoYy0+YWRfYnl0ZXMgPT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXR1cm4gcmVnOworCWVsc2UKKwkJcmV0dXJuIHJlZyAmIGFkX21hc2soYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworcmVnaXN0ZXJfYWRkcmVzcyhzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgcmVnKQoreworCXJldHVybiBiYXNlICsgYWRkcmVzc19tYXNrKGMsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoc3RydWN0IGRlY29kZV9jYWNoZSAqYywgdW5zaWduZWQgbG9uZyAqcmVnLCBpbnQgaW5jKQoreworCWlmIChjLT5hZF9ieXRlcyA9PSBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCSpyZWcgKz0gaW5jOworCWVsc2UKKwkJKnJlZyA9ICgqcmVnICYgfmFkX21hc2soYykpIHwgKCgqcmVnICsgaW5jKSAmIGFkX21hc2soYykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgam1wX3JlbChzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjLCBpbnQgcmVsKQoreworCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5laXAsIHJlbCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9zZWdfb3ZlcnJpZGUoc3RydWN0IGRlY29kZV9jYWNoZSAqYywgaW50IHNlZykKK3sKKwljLT5oYXNfc2VnX292ZXJyaWRlID0gdHJ1ZTsKKwljLT5zZWdfb3ZlcnJpZGUgPSBzZWc7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlZ19iYXNlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgc2VnKQoreworCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQgJiYgc2VnIDwgVkNQVV9TUkVHX0ZTKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBrdm1feDg2X29wcy0+Z2V0X3NlZ21lbnRfYmFzZShjdHh0LT52Y3B1LCBzZWcpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZWdfb3ZlcnJpZGVfYmFzZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCQkgICAgICAgc3RydWN0IGRlY29kZV9jYWNoZSAqYykKK3sKKwlpZiAoIWMtPmhhc19zZWdfb3ZlcnJpZGUpCisJCXJldHVybiAwOworCisJcmV0dXJuIHNlZ19iYXNlKGN0eHQsIGMtPnNlZ19vdmVycmlkZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVzX2Jhc2Uoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJcmV0dXJuIHNlZ19iYXNlKGN0eHQsIFZDUFVfU1JFR19FUyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNzX2Jhc2Uoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJcmV0dXJuIHNlZ19iYXNlKGN0eHQsIFZDUFVfU1JFR19TUyk7Cit9CisKK3N0YXRpYyBpbnQgZG9fZmV0Y2hfaW5zbl9ieXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBsaW5lYXIsIHU4ICpkZXN0KQoreworCXN0cnVjdCBmZXRjaF9jYWNoZSAqZmMgPSAmY3R4dC0+ZGVjb2RlLmZldGNoOworCWludCByYzsKKwlpbnQgc2l6ZTsKKworCWlmIChsaW5lYXIgPCBmYy0+c3RhcnQgfHwgbGluZWFyID49IGZjLT5lbmQpIHsKKwkJc2l6ZSA9IG1pbigxNVVMLCBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShsaW5lYXIpKTsKKwkJcmMgPSBvcHMtPnJlYWRfc3RkKGxpbmVhciwgZmMtPmRhdGEsIHNpemUsIGN0eHQtPnZjcHUpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJCWZjLT5zdGFydCA9IGxpbmVhcjsKKwkJZmMtPmVuZCA9IGxpbmVhciArIHNpemU7CisJfQorCSpkZXN0ID0gZmMtPmRhdGFbbGluZWFyIC0gZmMtPnN0YXJ0XTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkb19pbnNuX2ZldGNoKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcywKKwkJCSB1bnNpZ25lZCBsb25nIGVpcCwgdm9pZCAqZGVzdCwgdW5zaWduZWQgc2l6ZSkKK3sKKwlpbnQgcmMgPSAwOworCisJZWlwICs9IGN0eHQtPmNzX2Jhc2U7CisJd2hpbGUgKHNpemUtLSkgeworCQlyYyA9IGRvX2ZldGNoX2luc25fYnl0ZShjdHh0LCBvcHMsIGVpcCsrLCBkZXN0KyspOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogR2l2ZW4gdGhlICdyZWcnIHBvcnRpb24gb2YgYSBNb2RSTSBieXRlLCBhbmQgYSByZWdpc3RlciBibG9jaywgcmV0dXJuIGEKKyAqIHBvaW50ZXIgaW50byB0aGUgYmxvY2sgdGhhdCBhZGRyZXNzZXMgdGhlIHJlbGV2YW50IHJlZ2lzdGVyLgorICogQGhpZ2hieXRlX3JlZ3Mgc3BlY2lmaWVzIHdoZXRoZXIgdG8gZGVjb2RlIEFILENILERILEJILgorICovCitzdGF0aWMgdm9pZCAqZGVjb2RlX3JlZ2lzdGVyKHU4IG1vZHJtX3JlZywgdW5zaWduZWQgbG9uZyAqcmVncywKKwkJCSAgICAgaW50IGhpZ2hieXRlX3JlZ3MpCit7CisJdm9pZCAqcDsKKworCXAgPSAmcmVnc1ttb2RybV9yZWddOworCWlmIChoaWdoYnl0ZV9yZWdzICYmIG1vZHJtX3JlZyA+PSA0ICYmIG1vZHJtX3JlZyA8IDgpCisJCXAgPSAodW5zaWduZWQgY2hhciAqKSZyZWdzW21vZHJtX3JlZyAmIDNdICsgMTsKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIGludCByZWFkX2Rlc2NyaXB0b3Ioc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsCisJCQkgICB2b2lkICpwdHIsCisJCQkgICB1MTYgKnNpemUsIHVuc2lnbmVkIGxvbmcgKmFkZHJlc3MsIGludCBvcF9ieXRlcykKK3sKKwlpbnQgcmM7CisKKwlpZiAob3BfYnl0ZXMgPT0gMikKKwkJb3BfYnl0ZXMgPSAzOworCSphZGRyZXNzID0gMDsKKwlyYyA9IG9wcy0+cmVhZF9zdGQoKHVuc2lnbmVkIGxvbmcpcHRyLCAodW5zaWduZWQgbG9uZyAqKXNpemUsIDIsCisJCQkgICBjdHh0LT52Y3B1KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IG9wcy0+cmVhZF9zdGQoKHVuc2lnbmVkIGxvbmcpcHRyICsgMiwgYWRkcmVzcywgb3BfYnl0ZXMsCisJCQkgICBjdHh0LT52Y3B1KTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9jYyh1bnNpZ25lZCBpbnQgY29uZGl0aW9uLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IHJjID0gMDsKKworCXN3aXRjaCAoKGNvbmRpdGlvbiAmIDE1KSA+PiAxKSB7CisJY2FzZSAwOiAvKiBvICovCisJCXJjIHw9IChmbGFncyAmIEVGTEdfT0YpOworCQlicmVhazsKKwljYXNlIDE6IC8qIGIvYy9uYWUgKi8KKwkJcmMgfD0gKGZsYWdzICYgRUZMR19DRik7CisJCWJyZWFrOworCWNhc2UgMjogLyogei9lICovCisJCXJjIHw9IChmbGFncyAmIEVGTEdfWkYpOworCQlicmVhazsKKwljYXNlIDM6IC8qIGJlL25hICovCisJCXJjIHw9IChmbGFncyAmIChFRkxHX0NGfEVGTEdfWkYpKTsKKwkJYnJlYWs7CisJY2FzZSA0OiAvKiBzICovCisJCXJjIHw9IChmbGFncyAmIEVGTEdfU0YpOworCQlicmVhazsKKwljYXNlIDU6IC8qIHAvcGUgKi8KKwkJcmMgfD0gKGZsYWdzICYgRUZMR19QRik7CisJCWJyZWFrOworCWNhc2UgNzogLyogbGUvbmcgKi8KKwkJcmMgfD0gKGZsYWdzICYgRUZMR19aRik7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgNjogLyogbC9uZ2UgKi8KKwkJcmMgfD0gKCEoZmxhZ3MgJiBFRkxHX1NGKSAhPSAhKGZsYWdzICYgRUZMR19PRikpOworCQlicmVhazsKKwl9CisKKwkvKiBPZGQgY29uZGl0aW9uIGlkZW50aWZpZXJzIChsc2IgPT0gMSkgaGF2ZSBpbnZlcnRlZCBzZW5zZS4gKi8KKwlyZXR1cm4gKCEhcmMgXiAoY29uZGl0aW9uICYgMSkpOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfcmVnaXN0ZXJfb3BlcmFuZChzdHJ1Y3Qgb3BlcmFuZCAqb3AsCisJCQkJICAgIHN0cnVjdCBkZWNvZGVfY2FjaGUgKmMsCisJCQkJICAgIGludCBpbmhpYml0X2J5dGVyZWcpCit7CisJdW5zaWduZWQgcmVnID0gYy0+bW9kcm1fcmVnOworCWludCBoaWdoYnl0ZV9yZWdzID0gYy0+cmV4X3ByZWZpeCA9PSAwOworCisJaWYgKCEoYy0+ZCAmIE1vZFJNKSkKKwkJcmVnID0gKGMtPmIgJiA3KSB8ICgoYy0+cmV4X3ByZWZpeCAmIDEpIDw8IDMpOworCW9wLT50eXBlID0gT1BfUkVHOworCWlmICgoYy0+ZCAmIEJ5dGVPcCkgJiYgIWluaGliaXRfYnl0ZXJlZykgeworCQlvcC0+cHRyID0gZGVjb2RlX3JlZ2lzdGVyKHJlZywgYy0+cmVncywgaGlnaGJ5dGVfcmVncyk7CisJCW9wLT52YWwgPSAqKHU4ICopb3AtPnB0cjsKKwkJb3AtPmJ5dGVzID0gMTsKKwl9IGVsc2UgeworCQlvcC0+cHRyID0gZGVjb2RlX3JlZ2lzdGVyKHJlZywgYy0+cmVncywgMCk7CisJCW9wLT5ieXRlcyA9IGMtPm9wX2J5dGVzOworCQlzd2l0Y2ggKG9wLT5ieXRlcykgeworCQljYXNlIDI6CisJCQlvcC0+dmFsID0gKih1MTYgKilvcC0+cHRyOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCW9wLT52YWwgPSAqKHUzMiAqKW9wLT5wdHI7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJb3AtPnZhbCA9ICoodTY0ICopIG9wLT5wdHI7CisJCQlicmVhazsKKwkJfQorCX0KKwlvcC0+b3JpZ192YWwgPSBvcC0+dmFsOworfQorCitzdGF0aWMgaW50IGRlY29kZV9tb2RybShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCXN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKK3sKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKKwl1OCBzaWI7CisJaW50IGluZGV4X3JlZyA9IDAsIGJhc2VfcmVnID0gMCwgc2NhbGU7CisJaW50IHJjID0gMDsKKworCWlmIChjLT5yZXhfcHJlZml4KSB7CisJCWMtPm1vZHJtX3JlZyA9IChjLT5yZXhfcHJlZml4ICYgNCkgPDwgMTsJLyogUkVYLlIgKi8KKwkJaW5kZXhfcmVnID0gKGMtPnJleF9wcmVmaXggJiAyKSA8PCAyOyAvKiBSRVguWCAqLworCQljLT5tb2RybV9ybSA9IGJhc2VfcmVnID0gKGMtPnJleF9wcmVmaXggJiAxKSA8PCAzOyAvKiBSRUcuQiAqLworCX0KKworCWMtPm1vZHJtID0gaW5zbl9mZXRjaCh1OCwgMSwgYy0+ZWlwKTsKKwljLT5tb2RybV9tb2QgfD0gKGMtPm1vZHJtICYgMHhjMCkgPj4gNjsKKwljLT5tb2RybV9yZWcgfD0gKGMtPm1vZHJtICYgMHgzOCkgPj4gMzsKKwljLT5tb2RybV9ybSB8PSAoYy0+bW9kcm0gJiAweDA3KTsKKwljLT5tb2RybV9lYSA9IDA7CisJYy0+dXNlX21vZHJtX2VhID0gMTsKKworCWlmIChjLT5tb2RybV9tb2QgPT0gMykgeworCQljLT5tb2RybV9wdHIgPSBkZWNvZGVfcmVnaXN0ZXIoYy0+bW9kcm1fcm0sCisJCQkJCSAgICAgICBjLT5yZWdzLCBjLT5kICYgQnl0ZU9wKTsKKwkJYy0+bW9kcm1fdmFsID0gKih1bnNpZ25lZCBsb25nICopYy0+bW9kcm1fcHRyOworCQlyZXR1cm4gcmM7CisJfQorCisJaWYgKGMtPmFkX2J5dGVzID09IDIpIHsKKwkJdW5zaWduZWQgYnggPSBjLT5yZWdzW1ZDUFVfUkVHU19SQlhdOworCQl1bnNpZ25lZCBicCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JCUF07CisJCXVuc2lnbmVkIHNpID0gYy0+cmVnc1tWQ1BVX1JFR1NfUlNJXTsKKwkJdW5zaWduZWQgZGkgPSBjLT5yZWdzW1ZDUFVfUkVHU19SREldOworCisJCS8qIDE2LWJpdCBNb2RSL00gZGVjb2RlLiAqLworCQlzd2l0Y2ggKGMtPm1vZHJtX21vZCkgeworCQljYXNlIDA6CisJCQlpZiAoYy0+bW9kcm1fcm0gPT0gNikKKwkJCQljLT5tb2RybV9lYSArPSBpbnNuX2ZldGNoKHUxNiwgMiwgYy0+ZWlwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQljLT5tb2RybV9lYSArPSBpbnNuX2ZldGNoKHM4LCAxLCBjLT5laXApOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWMtPm1vZHJtX2VhICs9IGluc25fZmV0Y2godTE2LCAyLCBjLT5laXApOworCQkJYnJlYWs7CisJCX0KKwkJc3dpdGNoIChjLT5tb2RybV9ybSkgeworCQljYXNlIDA6CisJCQljLT5tb2RybV9lYSArPSBieCArIHNpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWMtPm1vZHJtX2VhICs9IGJ4ICsgZGk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJYy0+bW9kcm1fZWEgKz0gYnAgKyBzaTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQljLT5tb2RybV9lYSArPSBicCArIGRpOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWMtPm1vZHJtX2VhICs9IHNpOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCWMtPm1vZHJtX2VhICs9IGRpOworCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCWlmIChjLT5tb2RybV9tb2QgIT0gMCkKKwkJCQljLT5tb2RybV9lYSArPSBicDsKKwkJCWJyZWFrOworCQljYXNlIDc6CisJCQljLT5tb2RybV9lYSArPSBieDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjLT5tb2RybV9ybSA9PSAyIHx8IGMtPm1vZHJtX3JtID09IDMgfHwKKwkJICAgIChjLT5tb2RybV9ybSA9PSA2ICYmIGMtPm1vZHJtX21vZCAhPSAwKSkKKwkJCWlmICghYy0+aGFzX3NlZ19vdmVycmlkZSkKKwkJCQlzZXRfc2VnX292ZXJyaWRlKGMsIFZDUFVfU1JFR19TUyk7CisJCWMtPm1vZHJtX2VhID0gKHUxNiljLT5tb2RybV9lYTsKKwl9IGVsc2UgeworCQkvKiAzMi82NC1iaXQgTW9kUi9NIGRlY29kZS4gKi8KKwkJaWYgKChjLT5tb2RybV9ybSAmIDcpID09IDQpIHsKKwkJCXNpYiA9IGluc25fZmV0Y2godTgsIDEsIGMtPmVpcCk7CisJCQlpbmRleF9yZWcgfD0gKHNpYiA+PiAzKSAmIDc7CisJCQliYXNlX3JlZyB8PSBzaWIgJiA3OworCQkJc2NhbGUgPSBzaWIgPj4gNjsKKworCQkJaWYgKChiYXNlX3JlZyAmIDcpID09IDUgJiYgYy0+bW9kcm1fbW9kID09IDApCisJCQkJYy0+bW9kcm1fZWEgKz0gaW5zbl9mZXRjaChzMzIsIDQsIGMtPmVpcCk7CisJCQllbHNlCisJCQkJYy0+bW9kcm1fZWEgKz0gYy0+cmVnc1tiYXNlX3JlZ107CisJCQlpZiAoaW5kZXhfcmVnICE9IDQpCisJCQkJYy0+bW9kcm1fZWEgKz0gYy0+cmVnc1tpbmRleF9yZWddIDw8IHNjYWxlOworCQl9IGVsc2UgaWYgKChjLT5tb2RybV9ybSAmIDcpID09IDUgJiYgYy0+bW9kcm1fbW9kID09IDApIHsKKwkJCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQpCisJCQkJYy0+cmlwX3JlbGF0aXZlID0gMTsKKwkJfSBlbHNlCisJCQljLT5tb2RybV9lYSArPSBjLT5yZWdzW2MtPm1vZHJtX3JtXTsKKwkJc3dpdGNoIChjLT5tb2RybV9tb2QpIHsKKwkJY2FzZSAwOgorCQkJaWYgKGMtPm1vZHJtX3JtID09IDUpCisJCQkJYy0+bW9kcm1fZWEgKz0gaW5zbl9mZXRjaChzMzIsIDQsIGMtPmVpcCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJYy0+bW9kcm1fZWEgKz0gaW5zbl9mZXRjaChzOCwgMSwgYy0+ZWlwKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQljLT5tb2RybV9lYSArPSBpbnNuX2ZldGNoKHMzMiwgNCwgYy0+ZWlwKTsKKwkJCWJyZWFrOworCQl9CisJfQorZG9uZToKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX2FicyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCWludCByYyA9IDA7CisKKwlzd2l0Y2ggKGMtPmFkX2J5dGVzKSB7CisJY2FzZSAyOgorCQljLT5tb2RybV9lYSA9IGluc25fZmV0Y2godTE2LCAyLCBjLT5laXApOworCQlicmVhazsKKwljYXNlIDQ6CisJCWMtPm1vZHJtX2VhID0gaW5zbl9mZXRjaCh1MzIsIDQsIGMtPmVpcCk7CisJCWJyZWFrOworCWNhc2UgODoKKwkJYy0+bW9kcm1fZWEgPSBpbnNuX2ZldGNoKHU2NCwgOCwgYy0+ZWlwKTsKKwkJYnJlYWs7CisJfQorZG9uZToKKwlyZXR1cm4gcmM7Cit9CisKK2ludAoreDg2X2RlY29kZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJaW50IHJjID0gMDsKKwlpbnQgbW9kZSA9IGN0eHQtPm1vZGU7CisJaW50IGRlZl9vcF9ieXRlcywgZGVmX2FkX2J5dGVzLCBncm91cDsKKworCS8qIFNoYWRvdyBjb3B5IG9mIHJlZ2lzdGVyIHN0YXRlLiBDb21taXR0ZWQgb24gc3VjY2Vzc2Z1bCBlbXVsYXRpb24uICovCisKKwltZW1zZXQoYywgMCwgc2l6ZW9mKHN0cnVjdCBkZWNvZGVfY2FjaGUpKTsKKwljLT5laXAgPSBrdm1fcmlwX3JlYWQoY3R4dC0+dmNwdSk7CisJY3R4dC0+Y3NfYmFzZSA9IHNlZ19iYXNlKGN0eHQsIFZDUFVfU1JFR19DUyk7CisJbWVtY3B5KGMtPnJlZ3MsIGN0eHQtPnZjcHUtPmFyY2gucmVncywgc2l6ZW9mIGMtPnJlZ3MpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBYODZFTVVMX01PREVfUkVBTDoKKwljYXNlIFg4NkVNVUxfTU9ERV9QUk9UMTY6CisJCWRlZl9vcF9ieXRlcyA9IGRlZl9hZF9ieXRlcyA9IDI7CisJCWJyZWFrOworCWNhc2UgWDg2RU1VTF9NT0RFX1BST1QzMjoKKwkJZGVmX29wX2J5dGVzID0gZGVmX2FkX2J5dGVzID0gNDsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWNhc2UgWDg2RU1VTF9NT0RFX1BST1Q2NDoKKwkJZGVmX29wX2J5dGVzID0gNDsKKwkJZGVmX2FkX2J5dGVzID0gODsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCisJYy0+b3BfYnl0ZXMgPSBkZWZfb3BfYnl0ZXM7CisJYy0+YWRfYnl0ZXMgPSBkZWZfYWRfYnl0ZXM7CisKKwkvKiBMZWdhY3kgcHJlZml4ZXMuICovCisJZm9yICg7OykgeworCQlzd2l0Y2ggKGMtPmIgPSBpbnNuX2ZldGNoKHU4LCAxLCBjLT5laXApKSB7CisJCWNhc2UgMHg2NjoJLyogb3BlcmFuZC1zaXplIG92ZXJyaWRlICovCisJCQkvKiBzd2l0Y2ggYmV0d2VlbiAyLzQgYnl0ZXMgKi8KKwkJCWMtPm9wX2J5dGVzID0gZGVmX29wX2J5dGVzIF4gNjsKKwkJCWJyZWFrOworCQljYXNlIDB4Njc6CS8qIGFkZHJlc3Mtc2l6ZSBvdmVycmlkZSAqLworCQkJaWYgKG1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NCkKKwkJCQkvKiBzd2l0Y2ggYmV0d2VlbiA0LzggYnl0ZXMgKi8KKwkJCQljLT5hZF9ieXRlcyA9IGRlZl9hZF9ieXRlcyBeIDEyOworCQkJZWxzZQorCQkJCS8qIHN3aXRjaCBiZXR3ZWVuIDIvNCBieXRlcyAqLworCQkJCWMtPmFkX2J5dGVzID0gZGVmX2FkX2J5dGVzIF4gNjsKKwkJCWJyZWFrOworCQljYXNlIDB4MjY6CS8qIEVTIG92ZXJyaWRlICovCisJCWNhc2UgMHgyZToJLyogQ1Mgb3ZlcnJpZGUgKi8KKwkJY2FzZSAweDM2OgkvKiBTUyBvdmVycmlkZSAqLworCQljYXNlIDB4M2U6CS8qIERTIG92ZXJyaWRlICovCisJCQlzZXRfc2VnX292ZXJyaWRlKGMsIChjLT5iID4+IDMpICYgMyk7CisJCQlicmVhazsKKwkJY2FzZSAweDY0OgkvKiBGUyBvdmVycmlkZSAqLworCQljYXNlIDB4NjU6CS8qIEdTIG92ZXJyaWRlICovCisJCQlzZXRfc2VnX292ZXJyaWRlKGMsIGMtPmIgJiA3KTsKKwkJCWJyZWFrOworCQljYXNlIDB4NDAgLi4uIDB4NGY6IC8qIFJFWCAqLworCQkJaWYgKG1vZGUgIT0gWDg2RU1VTF9NT0RFX1BST1Q2NCkKKwkJCQlnb3RvIGRvbmVfcHJlZml4ZXM7CisJCQljLT5yZXhfcHJlZml4ID0gYy0+YjsKKwkJCWNvbnRpbnVlOworCQljYXNlIDB4ZjA6CS8qIExPQ0sgKi8KKwkJCWMtPmxvY2tfcHJlZml4ID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDB4ZjI6CS8qIFJFUE5FL1JFUE5aICovCisJCQljLT5yZXBfcHJlZml4ID0gUkVQTkVfUFJFRklYOworCQkJYnJlYWs7CisJCWNhc2UgMHhmMzoJLyogUkVQL1JFUEUvUkVQWiAqLworCQkJYy0+cmVwX3ByZWZpeCA9IFJFUEVfUFJFRklYOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGRvbmVfcHJlZml4ZXM7CisJCX0KKworCQkvKiBBbnkgbGVnYWN5IHByZWZpeCBhZnRlciBhIFJFWCBwcmVmaXggbnVsbGlmaWVzIGl0cyBlZmZlY3QuICovCisKKwkJYy0+cmV4X3ByZWZpeCA9IDA7CisJfQorCitkb25lX3ByZWZpeGVzOgorCisJLyogUkVYIHByZWZpeC4gKi8KKwlpZiAoYy0+cmV4X3ByZWZpeCkKKwkJaWYgKGMtPnJleF9wcmVmaXggJiA4KQorCQkJYy0+b3BfYnl0ZXMgPSA4OwkvKiBSRVguVyAqLworCisJLyogT3Bjb2RlIGJ5dGUocykuICovCisJYy0+ZCA9IG9wY29kZV90YWJsZVtjLT5iXTsKKwlpZiAoYy0+ZCA9PSAwKSB7CisJCS8qIFR3by1ieXRlIG9wY29kZT8gKi8KKwkJaWYgKGMtPmIgPT0gMHgwZikgeworCQkJYy0+dHdvYnl0ZSA9IDE7CisJCQljLT5iID0gaW5zbl9mZXRjaCh1OCwgMSwgYy0+ZWlwKTsKKwkJCWMtPmQgPSB0d29ieXRlX3RhYmxlW2MtPmJdOworCQl9CisJfQorCisJaWYgKGMtPmQgJiBHcm91cCkgeworCQlncm91cCA9IGMtPmQgJiBHcm91cE1hc2s7CisJCWMtPm1vZHJtID0gaW5zbl9mZXRjaCh1OCwgMSwgYy0+ZWlwKTsKKwkJLS1jLT5laXA7CisKKwkJZ3JvdXAgPSAoZ3JvdXAgPDwgMykgKyAoKGMtPm1vZHJtID4+IDMpICYgNyk7CisJCWlmICgoYy0+ZCAmIEdyb3VwRHVhbCkgJiYgKGMtPm1vZHJtID4+IDYpID09IDMpCisJCQljLT5kID0gZ3JvdXAyX3RhYmxlW2dyb3VwXTsKKwkJZWxzZQorCQkJYy0+ZCA9IGdyb3VwX3RhYmxlW2dyb3VwXTsKKwl9CisKKwkvKiBVbnJlY29nbmlzZWQ/ICovCisJaWYgKGMtPmQgPT0gMCkgeworCQlEUFJJTlRGKCJDYW5ub3QgZW11bGF0ZSAlMDJ4XG4iLCBjLT5iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChtb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQgJiYgKGMtPmQgJiBTdGFjaykpCisJCWMtPm9wX2J5dGVzID0gODsKKworCS8qIE1vZFJNIGFuZCBTSUIgYnl0ZXMuICovCisJaWYgKGMtPmQgJiBNb2RSTSkKKwkJcmMgPSBkZWNvZGVfbW9kcm0oY3R4dCwgb3BzKTsKKwllbHNlIGlmIChjLT5kICYgTWVtQWJzKQorCQlyYyA9IGRlY29kZV9hYnMoY3R4dCwgb3BzKTsKKwlpZiAocmMpCisJCWdvdG8gZG9uZTsKKworCWlmICghYy0+aGFzX3NlZ19vdmVycmlkZSkKKwkJc2V0X3NlZ19vdmVycmlkZShjLCBWQ1BVX1NSRUdfRFMpOworCisJaWYgKCEoIWMtPnR3b2J5dGUgJiYgYy0+YiA9PSAweDhkKSkKKwkJYy0+bW9kcm1fZWEgKz0gc2VnX292ZXJyaWRlX2Jhc2UoY3R4dCwgYyk7CisKKwlpZiAoYy0+YWRfYnl0ZXMgIT0gOCkKKwkJYy0+bW9kcm1fZWEgPSAodTMyKWMtPm1vZHJtX2VhOworCS8qCisJICogRGVjb2RlIGFuZCBmZXRjaCB0aGUgc291cmNlIG9wZXJhbmQ6IHJlZ2lzdGVyLCBtZW1vcnkKKwkgKiBvciBpbW1lZGlhdGUuCisJICovCisJc3dpdGNoIChjLT5kICYgU3JjTWFzaykgeworCWNhc2UgU3JjTm9uZToKKwkJYnJlYWs7CisJY2FzZSBTcmNSZWc6CisJCWRlY29kZV9yZWdpc3Rlcl9vcGVyYW5kKCZjLT5zcmMsIGMsIDApOworCQlicmVhazsKKwljYXNlIFNyY01lbTE2OgorCQljLT5zcmMuYnl0ZXMgPSAyOworCQlnb3RvIHNyY21lbV9jb21tb247CisJY2FzZSBTcmNNZW0zMjoKKwkJYy0+c3JjLmJ5dGVzID0gNDsKKwkJZ290byBzcmNtZW1fY29tbW9uOworCWNhc2UgU3JjTWVtOgorCQljLT5zcmMuYnl0ZXMgPSAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDoKKwkJCQkJCQkgICBjLT5vcF9ieXRlczsKKwkJLyogRG9uJ3QgZmV0Y2ggdGhlIGFkZHJlc3MgZm9yIGludmxwZzogaXQgY291bGQgYmUgdW5tYXBwZWQuICovCisJCWlmIChjLT50d29ieXRlICYmIGMtPmIgPT0gMHgwMSAmJiBjLT5tb2RybV9yZWcgPT0gNykKKwkJCWJyZWFrOworCXNyY21lbV9jb21tb246CisJCS8qCisJCSAqIEZvciBpbnN0cnVjdGlvbnMgd2l0aCBhIE1vZFIvTSBieXRlLCBzd2l0Y2ggdG8gcmVnaXN0ZXIKKwkJICogYWNjZXNzIGlmIE1vZCA9IDMuCisJCSAqLworCQlpZiAoKGMtPmQgJiBNb2RSTSkgJiYgYy0+bW9kcm1fbW9kID09IDMpIHsKKwkJCWMtPnNyYy50eXBlID0gT1BfUkVHOworCQkJYy0+c3JjLnZhbCA9IGMtPm1vZHJtX3ZhbDsKKwkJCWMtPnNyYy5wdHIgPSBjLT5tb2RybV9wdHI7CisJCQlicmVhazsKKwkJfQorCQljLT5zcmMudHlwZSA9IE9QX01FTTsKKwkJYnJlYWs7CisJY2FzZSBTcmNJbW06CisJY2FzZSBTcmNJbW1VOgorCQljLT5zcmMudHlwZSA9IE9QX0lNTTsKKwkJYy0+c3JjLnB0ciA9ICh1bnNpZ25lZCBsb25nICopYy0+ZWlwOworCQljLT5zcmMuYnl0ZXMgPSAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDogYy0+b3BfYnl0ZXM7CisJCWlmIChjLT5zcmMuYnl0ZXMgPT0gOCkKKwkJCWMtPnNyYy5ieXRlcyA9IDQ7CisJCS8qIE5CLiBJbW1lZGlhdGVzIGFyZSBzaWduLWV4dGVuZGVkIGFzIG5lY2Vzc2FyeS4gKi8KKwkJc3dpdGNoIChjLT5zcmMuYnl0ZXMpIHsKKwkJY2FzZSAxOgorCQkJYy0+c3JjLnZhbCA9IGluc25fZmV0Y2goczgsIDEsIGMtPmVpcCk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJYy0+c3JjLnZhbCA9IGluc25fZmV0Y2goczE2LCAyLCBjLT5laXApOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWMtPnNyYy52YWwgPSBpbnNuX2ZldGNoKHMzMiwgNCwgYy0+ZWlwKTsKKwkJCWJyZWFrOworCQl9CisJCWlmICgoYy0+ZCAmIFNyY01hc2spID09IFNyY0ltbVUpIHsKKwkJCXN3aXRjaCAoYy0+c3JjLmJ5dGVzKSB7CisJCQljYXNlIDE6CisJCQkJYy0+c3JjLnZhbCAmPSAweGZmOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCWMtPnNyYy52YWwgJj0gMHhmZmZmOworCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCWMtPnNyYy52YWwgJj0gMHhmZmZmZmZmZjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFNyY0ltbUJ5dGU6CisJY2FzZSBTcmNJbW1VQnl0ZToKKwkJYy0+c3JjLnR5cGUgPSBPUF9JTU07CisJCWMtPnNyYy5wdHIgPSAodW5zaWduZWQgbG9uZyAqKWMtPmVpcDsKKwkJYy0+c3JjLmJ5dGVzID0gMTsKKwkJaWYgKChjLT5kICYgU3JjTWFzaykgPT0gU3JjSW1tQnl0ZSkKKwkJCWMtPnNyYy52YWwgPSBpbnNuX2ZldGNoKHM4LCAxLCBjLT5laXApOworCQllbHNlCisJCQljLT5zcmMudmFsID0gaW5zbl9mZXRjaCh1OCwgMSwgYy0+ZWlwKTsKKwkJYnJlYWs7CisJY2FzZSBTcmNPbmU6CisJCWMtPnNyYy5ieXRlcyA9IDE7CisJCWMtPnNyYy52YWwgPSAxOworCQlicmVhazsKKwl9CisKKwkvKgorCSAqIERlY29kZSBhbmQgZmV0Y2ggdGhlIHNlY29uZCBzb3VyY2Ugb3BlcmFuZDogcmVnaXN0ZXIsIG1lbW9yeQorCSAqIG9yIGltbWVkaWF0ZS4KKwkgKi8KKwlzd2l0Y2ggKGMtPmQgJiBTcmMyTWFzaykgeworCWNhc2UgU3JjMk5vbmU6CisJCWJyZWFrOworCWNhc2UgU3JjMkNMOgorCQljLT5zcmMyLmJ5dGVzID0gMTsKKwkJYy0+c3JjMi52YWwgPSBjLT5yZWdzW1ZDUFVfUkVHU19SQ1hdICYgMHg4OworCQlicmVhazsKKwljYXNlIFNyYzJJbW1CeXRlOgorCQljLT5zcmMyLnR5cGUgPSBPUF9JTU07CisJCWMtPnNyYzIucHRyID0gKHVuc2lnbmVkIGxvbmcgKiljLT5laXA7CisJCWMtPnNyYzIuYnl0ZXMgPSAxOworCQljLT5zcmMyLnZhbCA9IGluc25fZmV0Y2godTgsIDEsIGMtPmVpcCk7CisJCWJyZWFrOworCWNhc2UgU3JjMkltbTE2OgorCQljLT5zcmMyLnR5cGUgPSBPUF9JTU07CisJCWMtPnNyYzIucHRyID0gKHVuc2lnbmVkIGxvbmcgKiljLT5laXA7CisJCWMtPnNyYzIuYnl0ZXMgPSAyOworCQljLT5zcmMyLnZhbCA9IGluc25fZmV0Y2godTE2LCAyLCBjLT5laXApOworCQlicmVhazsKKwljYXNlIFNyYzJPbmU6CisJCWMtPnNyYzIuYnl0ZXMgPSAxOworCQljLT5zcmMyLnZhbCA9IDE7CisJCWJyZWFrOworCX0KKworCS8qIERlY29kZSBhbmQgZmV0Y2ggdGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQ6IHJlZ2lzdGVyIG9yIG1lbW9yeS4gKi8KKwlzd2l0Y2ggKGMtPmQgJiBEc3RNYXNrKSB7CisJY2FzZSBJbXBsaWNpdE9wczoKKwkJLyogU3BlY2lhbCBpbnN0cnVjdGlvbnMgZG8gdGhlaXIgb3duIG9wZXJhbmQgZGVjb2RpbmcuICovCisJCXJldHVybiAwOworCWNhc2UgRHN0UmVnOgorCQlkZWNvZGVfcmVnaXN0ZXJfb3BlcmFuZCgmYy0+ZHN0LCBjLAorCQkJIGMtPnR3b2J5dGUgJiYgKGMtPmIgPT0gMHhiNiB8fCBjLT5iID09IDB4YjcpKTsKKwkJYnJlYWs7CisJY2FzZSBEc3RNZW06CisJCWlmICgoYy0+ZCAmIE1vZFJNKSAmJiBjLT5tb2RybV9tb2QgPT0gMykgeworCQkJYy0+ZHN0LmJ5dGVzID0gKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzOworCQkJYy0+ZHN0LnR5cGUgPSBPUF9SRUc7CisJCQljLT5kc3QudmFsID0gYy0+ZHN0Lm9yaWdfdmFsID0gYy0+bW9kcm1fdmFsOworCQkJYy0+ZHN0LnB0ciA9IGMtPm1vZHJtX3B0cjsKKwkJCWJyZWFrOworCQl9CisJCWMtPmRzdC50eXBlID0gT1BfTUVNOworCQlicmVhazsKKwljYXNlIERzdEFjYzoKKwkJYy0+ZHN0LnR5cGUgPSBPUF9SRUc7CisJCWMtPmRzdC5ieXRlcyA9IGMtPm9wX2J5dGVzOworCQljLT5kc3QucHRyID0gJmMtPnJlZ3NbVkNQVV9SRUdTX1JBWF07CisJCXN3aXRjaCAoYy0+b3BfYnl0ZXMpIHsKKwkJCWNhc2UgMToKKwkJCQljLT5kc3QudmFsID0gKih1OCAqKWMtPmRzdC5wdHI7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJYy0+ZHN0LnZhbCA9ICoodTE2ICopYy0+ZHN0LnB0cjsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDoKKwkJCQljLT5kc3QudmFsID0gKih1MzIgKiljLT5kc3QucHRyOworCQkJCWJyZWFrOworCQl9CisJCWMtPmRzdC5vcmlnX3ZhbCA9IGMtPmRzdC52YWw7CisJCWJyZWFrOworCX0KKworCWlmIChjLT5yaXBfcmVsYXRpdmUpCisJCWMtPm1vZHJtX2VhICs9IGMtPmVpcDsKKworZG9uZToKKwlyZXR1cm4gKHJjID09IFg4NkVNVUxfVU5IQU5ETEVBQkxFKSA/IC0xIDogMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVtdWxhdGVfcHVzaChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKKworCWMtPmRzdC50eXBlICA9IE9QX01FTTsKKwljLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKKwljLT5kc3QudmFsID0gYy0+c3JjLnZhbDsKKwlyZWdpc3Rlcl9hZGRyZXNzX2luY3JlbWVudChjLCAmYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSwgLWMtPm9wX2J5dGVzKTsKKwljLT5kc3QucHRyID0gKHZvaWQgKikgcmVnaXN0ZXJfYWRkcmVzcyhjLCBzc19iYXNlKGN0eHQpLAorCQkJCQkgICAgICAgYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSk7Cit9CisKK3N0YXRpYyBpbnQgZW11bGF0ZV9wb3Aoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCSAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsCisJCSAgICAgICB2b2lkICpkZXN0LCBpbnQgbGVuKQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCWludCByYzsKKworCXJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKHJlZ2lzdGVyX2FkZHJlc3MoYywgc3NfYmFzZShjdHh0KSwKKwkJCQkJCSBjLT5yZWdzW1ZDUFVfUkVHU19SU1BdKSwKKwkJCQlkZXN0LCBsZW4sIGN0eHQtPnZjcHUpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwlyZWdpc3Rlcl9hZGRyZXNzX2luY3JlbWVudChjLCAmYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSwgbGVuKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGVtdWxhdGVfZ3JwMWEoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkJc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCWludCByYzsKKworCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmYy0+ZHN0LnZhbCwgYy0+ZHN0LmJ5dGVzKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZW11bGF0ZV9ncnAyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCXN3aXRjaCAoYy0+bW9kcm1fcmVnKSB7CisJY2FzZSAwOgkvKiByb2wgKi8KKwkJZW11bGF0ZV8yb3BfU3JjQigicm9sIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJCWJyZWFrOworCWNhc2UgMToJLyogcm9yICovCisJCWVtdWxhdGVfMm9wX1NyY0IoInJvciIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDI6CS8qIHJjbCAqLworCQllbXVsYXRlXzJvcF9TcmNCKCJyY2wiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSAzOgkvKiByY3IgKi8KKwkJZW11bGF0ZV8yb3BfU3JjQigicmNyIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJCWJyZWFrOworCWNhc2UgNDoJLyogc2FsL3NobCAqLworCWNhc2UgNjoJLyogc2FsL3NobCAqLworCQllbXVsYXRlXzJvcF9TcmNCKCJzYWwiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSA1OgkvKiBzaHIgKi8KKwkJZW11bGF0ZV8yb3BfU3JjQigic2hyIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJCWJyZWFrOworCWNhc2UgNzoJLyogc2FyICovCisJCWVtdWxhdGVfMm9wX1NyY0IoInNhciIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGVtdWxhdGVfZ3JwMyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCSAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJaW50IHJjID0gMDsKKworCXN3aXRjaCAoYy0+bW9kcm1fcmVnKSB7CisJY2FzZSAwIC4uLiAxOgkvKiB0ZXN0ICovCisJCWVtdWxhdGVfMm9wX1NyY1YoInRlc3QiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSAyOgkvKiBub3QgKi8KKwkJYy0+ZHN0LnZhbCA9IH5jLT5kc3QudmFsOworCQlicmVhazsKKwljYXNlIDM6CS8qIG5lZyAqLworCQllbXVsYXRlXzFvcCgibmVnIiwgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUFJJTlRGKCJDYW5ub3QgZW11bGF0ZSAlMDJ4XG4iLCBjLT5iKTsKKwkJcmMgPSBYODZFTVVMX1VOSEFORExFQUJMRTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZSBpbnQgZW11bGF0ZV9ncnA0NShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCSAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisKKwlzd2l0Y2ggKGMtPm1vZHJtX3JlZykgeworCWNhc2UgMDoJLyogaW5jICovCisJCWVtdWxhdGVfMW9wKCJpbmMiLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJCWJyZWFrOworCWNhc2UgMToJLyogZGVjICovCisJCWVtdWxhdGVfMW9wKCJkZWMiLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJCWJyZWFrOworCWNhc2UgMjogLyogY2FsbCBuZWFyIGFicyAqLyB7CisJCWxvbmcgaW50IG9sZF9laXA7CisJCW9sZF9laXAgPSBjLT5laXA7CisJCWMtPmVpcCA9IGMtPnNyYy52YWw7CisJCWMtPnNyYy52YWwgPSBvbGRfZWlwOworCQllbXVsYXRlX3B1c2goY3R4dCk7CisJCWJyZWFrOworCX0KKwljYXNlIDQ6IC8qIGptcCBhYnMgKi8KKwkJYy0+ZWlwID0gYy0+c3JjLnZhbDsKKwkJYnJlYWs7CisJY2FzZSA2OgkvKiBwdXNoICovCisJCWVtdWxhdGVfcHVzaChjdHh0KTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBlbXVsYXRlX2dycDkoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbWVtb3ApCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJdTY0IG9sZCwgbmV3OworCWludCByYzsKKworCXJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKG1lbW9wLCAmb2xkLCA4LCBjdHh0LT52Y3B1KTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJaWYgKCgodTMyKSAob2xkID4+IDApICE9ICh1MzIpIGMtPnJlZ3NbVkNQVV9SRUdTX1JBWF0pIHx8CisJICAgICgodTMyKSAob2xkID4+IDMyKSAhPSAodTMyKSBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdKSkgeworCisJCWMtPnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSAodTMyKSAob2xkID4+IDApOworCQljLT5yZWdzW1ZDUFVfUkVHU19SRFhdID0gKHUzMikgKG9sZCA+PiAzMik7CisJCWN0eHQtPmVmbGFncyAmPSB+RUZMR19aRjsKKworCX0gZWxzZSB7CisJCW5ldyA9ICgodTY0KWMtPnJlZ3NbVkNQVV9SRUdTX1JDWF0gPDwgMzIpIHwKKwkJICAgICAgICh1MzIpIGMtPnJlZ3NbVkNQVV9SRUdTX1JCWF07CisKKwkJcmMgPSBvcHMtPmNtcHhjaGdfZW11bGF0ZWQobWVtb3AsICZvbGQsICZuZXcsIDgsIGN0eHQtPnZjcHUpOworCQlpZiAocmMgIT0gMCkKKwkJCXJldHVybiByYzsKKwkJY3R4dC0+ZWZsYWdzIHw9IEVGTEdfWkY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVtdWxhdGVfcmV0X2ZhcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCSAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKK3sKKwlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyBjczsKKworCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmYy0+ZWlwLCBjLT5vcF9ieXRlcyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJaWYgKGMtPm9wX2J5dGVzID09IDQpCisJCWMtPmVpcCA9ICh1MzIpYy0+ZWlwOworCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmY3MsIGMtPm9wX2J5dGVzKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihjdHh0LT52Y3B1LCAodTE2KWNzLCAxLCBWQ1BVX1NSRUdfQ1MpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZSBpbnQgd3JpdGViYWNrKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKK3sKKwlpbnQgcmM7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisKKwlzd2l0Y2ggKGMtPmRzdC50eXBlKSB7CisJY2FzZSBPUF9SRUc6CisJCS8qIFRoZSA0LWJ5dGUgY2FzZSAqaXMqIGNvcnJlY3Q6CisJCSAqIGluIDY0LWJpdCBtb2RlIHdlIHplcm8tZXh0ZW5kLgorCQkgKi8KKwkJc3dpdGNoIChjLT5kc3QuYnl0ZXMpIHsKKwkJY2FzZSAxOgorCQkJKih1OCAqKWMtPmRzdC5wdHIgPSAodTgpYy0+ZHN0LnZhbDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQkqKHUxNiAqKWMtPmRzdC5wdHIgPSAodTE2KWMtPmRzdC52YWw7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJKmMtPmRzdC5wdHIgPSAodTMyKWMtPmRzdC52YWw7CisJCQlicmVhazsJLyogNjRiOiB6ZXJvLWV4dCAqLworCQljYXNlIDg6CisJCQkqYy0+ZHN0LnB0ciA9IGMtPmRzdC52YWw7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIE9QX01FTToKKwkJaWYgKGMtPmxvY2tfcHJlZml4KQorCQkJcmMgPSBvcHMtPmNtcHhjaGdfZW11bGF0ZWQoCisJCQkJCSh1bnNpZ25lZCBsb25nKWMtPmRzdC5wdHIsCisJCQkJCSZjLT5kc3Qub3JpZ192YWwsCisJCQkJCSZjLT5kc3QudmFsLAorCQkJCQljLT5kc3QuYnl0ZXMsCisJCQkJCWN0eHQtPnZjcHUpOworCQllbHNlCisJCQlyYyA9IG9wcy0+d3JpdGVfZW11bGF0ZWQoCisJCQkJCSh1bnNpZ25lZCBsb25nKWMtPmRzdC5wdHIsCisJCQkJCSZjLT5kc3QudmFsLAorCQkJCQljLT5kc3QuYnl0ZXMsCisJCQkJCWN0eHQtPnZjcHUpOworCQlpZiAocmMgIT0gMCkKKwkJCXJldHVybiByYzsKKwkJYnJlYWs7CisJY2FzZSBPUF9OT05FOgorCQkvKiBubyB3cml0ZWJhY2sgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0b2dnbGVfaW50ZXJydXB0aWJpbGl0eShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgdTMyIG1hc2spCit7CisJdTMyIGludF9zaGFkb3cgPSBrdm1feDg2X29wcy0+Z2V0X2ludGVycnVwdF9zaGFkb3coY3R4dC0+dmNwdSwgbWFzayk7CisJLyoKKwkgKiBhbiBzdGk7IHN0aTsgc2VxdWVuY2Ugb25seSBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoZSBmaXJzdAorCSAqIGluc3RydWN0aW9uLiBTbywgaWYgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24sIGJlIGl0IGVtdWxhdGVkIG9yCisJICogbm90LCBsZWZ0IHRoZSBzeXN0ZW0gd2l0aCB0aGUgSU5UX1NUSSBmbGFnIGVuYWJsZWQsIGl0CisJICogbWVhbnMgdGhhdCB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpcyBhbiBzdGkuIFdlIHNob3VsZCBub3QKKwkgKiBsZWF2ZSB0aGUgZmxhZyBvbiBpbiB0aGlzIGNhc2UuIFRoZSBzYW1lIGdvZXMgZm9yIG1vdiBzcworCSAqLworCWlmICghKGludF9zaGFkb3cgJiBtYXNrKSkKKwkJY3R4dC0+aW50ZXJydXB0aWJpbGl0eSA9IG1hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0dXBfc3lzY2FsbHNfc2VnbWVudHMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJc3RydWN0IGt2bV9zZWdtZW50ICpjcywgc3RydWN0IGt2bV9zZWdtZW50ICpzcykKK3sKKwltZW1zZXQoY3MsIDAsIHNpemVvZihzdHJ1Y3Qga3ZtX3NlZ21lbnQpKTsKKwlrdm1feDg2X29wcy0+Z2V0X3NlZ21lbnQoY3R4dC0+dmNwdSwgY3MsIFZDUFVfU1JFR19DUyk7CisJbWVtc2V0KHNzLCAwLCBzaXplb2Yoc3RydWN0IGt2bV9zZWdtZW50KSk7CisKKwljcy0+bCA9IDA7CQkvKiB3aWxsIGJlIGFkanVzdGVkIGxhdGVyICovCisJY3MtPmJhc2UgPSAwOwkJLyogZmxhdCBzZWdtZW50ICovCisJY3MtPmcgPSAxOwkJLyogNGtiIGdyYW51bGFyaXR5ICovCisJY3MtPmxpbWl0ID0gMHhmZmZmZmZmZjsJLyogNEdCIGxpbWl0ICovCisJY3MtPnR5cGUgPSAweDBiOwkvKiBSZWFkLCBFeGVjdXRlLCBBY2Nlc3NlZCAqLworCWNzLT5zID0gMTsKKwljcy0+ZHBsID0gMDsJCS8qIHdpbGwgYmUgYWRqdXN0ZWQgbGF0ZXIgKi8KKwljcy0+cHJlc2VudCA9IDE7CisJY3MtPmRiID0gMTsKKworCXNzLT51bnVzYWJsZSA9IDA7CisJc3MtPmJhc2UgPSAwOwkJLyogZmxhdCBzZWdtZW50ICovCisJc3MtPmxpbWl0ID0gMHhmZmZmZmZmZjsJLyogNEdCIGxpbWl0ICovCisJc3MtPmcgPSAxOwkJLyogNGtiIGdyYW51bGFyaXR5ICovCisJc3MtPnMgPSAxOworCXNzLT50eXBlID0gMHgwMzsJLyogUmVhZC9Xcml0ZSwgQWNjZXNzZWQgKi8KKwlzcy0+ZGIgPSAxOwkJLyogMzJiaXQgc3RhY2sgc2VnbWVudCAqLworCXNzLT5kcGwgPSAwOworCXNzLT5wcmVzZW50ID0gMTsKK30KKworc3RhdGljIGludAorZW11bGF0ZV9zeXNjYWxsKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCXN0cnVjdCBrdm1fc2VnbWVudCBjcywgc3M7CisJdTY0IG1zcl9kYXRhOworCisJLyogc3lzY2FsbCBpcyBub3QgYXZhaWxhYmxlIGluIHJlYWwgbW9kZSAqLworCWlmIChjLT5sb2NrX3ByZWZpeCB8fCBjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9SRUFMCisJCXx8ICEoY3R4dC0+dmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1BFKSkKKwkJcmV0dXJuIC0xOworCisJc2V0dXBfc3lzY2FsbHNfc2VnbWVudHMoY3R4dCwgJmNzLCAmc3MpOworCisJa3ZtX3g4Nl9vcHMtPmdldF9tc3IoY3R4dC0+dmNwdSwgTVNSX1NUQVIsICZtc3JfZGF0YSk7CisJbXNyX2RhdGEgPj49IDMyOworCWNzLnNlbGVjdG9yID0gKHUxNikobXNyX2RhdGEgJiAweGZmZmMpOworCXNzLnNlbGVjdG9yID0gKHUxNikobXNyX2RhdGEgKyA4KTsKKworCWlmIChpc19sb25nX21vZGUoY3R4dC0+dmNwdSkpIHsKKwkJY3MuZGIgPSAwOworCQljcy5sID0gMTsKKwl9CisJa3ZtX3g4Nl9vcHMtPnNldF9zZWdtZW50KGN0eHQtPnZjcHUsICZjcywgVkNQVV9TUkVHX0NTKTsKKwlrdm1feDg2X29wcy0+c2V0X3NlZ21lbnQoY3R4dC0+dmNwdSwgJnNzLCBWQ1BVX1NSRUdfU1MpOworCisJYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSA9IGMtPmVpcDsKKwlpZiAoaXNfbG9uZ19tb2RlKGN0eHQtPnZjcHUpKSB7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQljLT5yZWdzW1ZDUFVfUkVHU19SMTFdID0gY3R4dC0+ZWZsYWdzICYgfkVGTEdfUkY7CisKKwkJa3ZtX3g4Nl9vcHMtPmdldF9tc3IoY3R4dC0+dmNwdSwKKwkJCWN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NCA/CisJCQlNU1JfTFNUQVIgOiBNU1JfQ1NUQVIsICZtc3JfZGF0YSk7CisJCWMtPmVpcCA9IG1zcl9kYXRhOworCisJCWt2bV94ODZfb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsIE1TUl9TWVNDQUxMX01BU0ssICZtc3JfZGF0YSk7CisJCWN0eHQtPmVmbGFncyAmPSB+KG1zcl9kYXRhIHwgRUZMR19SRik7CisjZW5kaWYKKwl9IGVsc2UgeworCQkvKiBsZWdhY3kgbW9kZSAqLworCQlrdm1feDg2X29wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfU1RBUiwgJm1zcl9kYXRhKTsKKwkJYy0+ZWlwID0gKHUzMiltc3JfZGF0YTsKKworCQljdHh0LT5lZmxhZ3MgJj0gfihFRkxHX1ZNIHwgRUZMR19JRiB8IEVGTEdfUkYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitlbXVsYXRlX3N5c2VudGVyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCXN0cnVjdCBrdm1fc2VnbWVudCBjcywgc3M7CisJdTY0IG1zcl9kYXRhOworCisJLyogaW5qZWN0ICNVRCBpZiBMT0NLIHByZWZpeCBpcyB1c2VkICovCisJaWYgKGMtPmxvY2tfcHJlZml4KQorCQlyZXR1cm4gLTE7CisKKwkvKiBpbmplY3QgI0dQIGlmIGluIHJlYWwgbW9kZSBvciBwYWdpbmcgaXMgZGlzYWJsZWQgKi8KKwlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUkVBTCB8fAorCQkhKGN0eHQtPnZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkpIHsKKwkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFhYWCBzeXNlbnRlci9zeXNleGl0IGhhdmUgbm90IGJlZW4gdGVzdGVkIGluIDY0Yml0IG1vZGUuCisJKiBUaGVyZWZvcmUsIHdlIGluamVjdCBhbiAjVUQuCisJKi8KKwlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0KQorCQlyZXR1cm4gLTE7CisKKwlzZXR1cF9zeXNjYWxsc19zZWdtZW50cyhjdHh0LCAmY3MsICZzcyk7CisKKwlrdm1feDg2X29wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfSUEzMl9TWVNFTlRFUl9DUywgJm1zcl9kYXRhKTsKKwlzd2l0Y2ggKGN0eHQtPm1vZGUpIHsKKwljYXNlIFg4NkVNVUxfTU9ERV9QUk9UMzI6CisJCWlmICgobXNyX2RhdGEgJiAweGZmZmMpID09IDB4MCkgeworCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlicmVhazsKKwljYXNlIFg4NkVNVUxfTU9ERV9QUk9UNjQ6CisJCWlmIChtc3JfZGF0YSA9PSAweDApIHsKKwkJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYnJlYWs7CisJfQorCisJY3R4dC0+ZWZsYWdzICY9IH4oRUZMR19WTSB8IEVGTEdfSUYgfCBFRkxHX1JGKTsKKwljcy5zZWxlY3RvciA9ICh1MTYpbXNyX2RhdGE7CisJY3Muc2VsZWN0b3IgJj0gflNFTEVDVE9SX1JQTF9NQVNLOworCXNzLnNlbGVjdG9yID0gY3Muc2VsZWN0b3IgKyA4OworCXNzLnNlbGVjdG9yICY9IH5TRUxFQ1RPUl9SUExfTUFTSzsKKwlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0CisJCXx8IGlzX2xvbmdfbW9kZShjdHh0LT52Y3B1KSkgeworCQljcy5kYiA9IDA7CisJCWNzLmwgPSAxOworCX0KKworCWt2bV94ODZfb3BzLT5zZXRfc2VnbWVudChjdHh0LT52Y3B1LCAmY3MsIFZDUFVfU1JFR19DUyk7CisJa3ZtX3g4Nl9vcHMtPnNldF9zZWdtZW50KGN0eHQtPnZjcHUsICZzcywgVkNQVV9TUkVHX1NTKTsKKworCWt2bV94ODZfb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsIE1TUl9JQTMyX1NZU0VOVEVSX0VJUCwgJm1zcl9kYXRhKTsKKwljLT5laXAgPSBtc3JfZGF0YTsKKworCWt2bV94ODZfb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsIE1TUl9JQTMyX1NZU0VOVEVSX0VTUCwgJm1zcl9kYXRhKTsKKwljLT5yZWdzW1ZDUFVfUkVHU19SU1BdID0gbXNyX2RhdGE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZW11bGF0ZV9zeXNleGl0KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCXN0cnVjdCBrdm1fc2VnbWVudCBjcywgc3M7CisJdTY0IG1zcl9kYXRhOworCWludCB1c2VybW9kZTsKKworCS8qIGluamVjdCAjVUQgaWYgTE9DSyBwcmVmaXggaXMgdXNlZCAqLworCWlmIChjLT5sb2NrX3ByZWZpeCkKKwkJcmV0dXJuIC0xOworCisJLyogaW5qZWN0ICNHUCBpZiBpbiByZWFsIG1vZGUgb3IgcGFnaW5nIGlzIGRpc2FibGVkICovCisJaWYgKGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1JFQUwKKwkJfHwgIShjdHh0LT52Y3B1LT5hcmNoLmNyMCAmIFg4Nl9DUjBfUEUpKSB7CisJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBzeXNleGl0IG11c3QgYmUgY2FsbGVkIGZyb20gQ1BMIDAgKi8KKwlpZiAoa3ZtX3g4Nl9vcHMtPmdldF9jcGwoY3R4dC0+dmNwdSkgIT0gMCkgeworCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQlyZXR1cm4gLTE7CisJfQorCisJc2V0dXBfc3lzY2FsbHNfc2VnbWVudHMoY3R4dCwgJmNzLCAmc3MpOworCisJaWYgKChjLT5yZXhfcHJlZml4ICYgMHg4KSAhPSAweDApCisJCXVzZXJtb2RlID0gWDg2RU1VTF9NT0RFX1BST1Q2NDsKKwllbHNlCisJCXVzZXJtb2RlID0gWDg2RU1VTF9NT0RFX1BST1QzMjsKKworCWNzLmRwbCA9IDM7CisJc3MuZHBsID0gMzsKKwlrdm1feDg2X29wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfSUEzMl9TWVNFTlRFUl9DUywgJm1zcl9kYXRhKTsKKwlzd2l0Y2ggKHVzZXJtb2RlKSB7CisJY2FzZSBYODZFTVVMX01PREVfUFJPVDMyOgorCQljcy5zZWxlY3RvciA9ICh1MTYpKG1zcl9kYXRhICsgMTYpOworCQlpZiAoKG1zcl9kYXRhICYgMHhmZmZjKSA9PSAweDApIHsKKwkJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJc3Muc2VsZWN0b3IgPSAodTE2KShtc3JfZGF0YSArIDI0KTsKKwkJYnJlYWs7CisJY2FzZSBYODZFTVVMX01PREVfUFJPVDY0OgorCQljcy5zZWxlY3RvciA9ICh1MTYpKG1zcl9kYXRhICsgMzIpOworCQlpZiAobXNyX2RhdGEgPT0gMHgwKSB7CisJCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQkJcmV0dXJuIC0xOworCQl9CisJCXNzLnNlbGVjdG9yID0gY3Muc2VsZWN0b3IgKyA4OworCQljcy5kYiA9IDA7CisJCWNzLmwgPSAxOworCQlicmVhazsKKwl9CisJY3Muc2VsZWN0b3IgfD0gU0VMRUNUT1JfUlBMX01BU0s7CisJc3Muc2VsZWN0b3IgfD0gU0VMRUNUT1JfUlBMX01BU0s7CisKKwlrdm1feDg2X29wcy0+c2V0X3NlZ21lbnQoY3R4dC0+dmNwdSwgJmNzLCBWQ1BVX1NSRUdfQ1MpOworCWt2bV94ODZfb3BzLT5zZXRfc2VnbWVudChjdHh0LT52Y3B1LCAmc3MsIFZDUFVfU1JFR19TUyk7CisKKwljLT5laXAgPSBjdHh0LT52Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSA9IGN0eHQtPnZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXTsKKworCXJldHVybiAwOworfQorCitpbnQKK3g4Nl9lbXVsYXRlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKK3sKKwl1bnNpZ25lZCBsb25nIG1lbW9wID0gMDsKKwl1NjQgbXNyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBzYXZlZF9laXAgPSAwOworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCXVuc2lnbmVkIGludCBwb3J0OworCWludCBpb19kaXJfaW47CisJaW50IHJjID0gMDsKKworCWN0eHQtPmludGVycnVwdGliaWxpdHkgPSAwOworCisJLyogU2hhZG93IGNvcHkgb2YgcmVnaXN0ZXIgc3RhdGUuIENvbW1pdHRlZCBvbiBzdWNjZXNzZnVsIGVtdWxhdGlvbi4KKwkgKiBOT1RFOiB3ZSBjYW4gY29weSB0aGVtIGZyb20gdmNwdSBhcyB4ODZfZGVjb2RlX2luc24oKSBkb2Vzbid0CisJICogbW9kaWZ5IHRoZW0uCisJICovCisKKwltZW1jcHkoYy0+cmVncywgY3R4dC0+dmNwdS0+YXJjaC5yZWdzLCBzaXplb2YgYy0+cmVncyk7CisJc2F2ZWRfZWlwID0gYy0+ZWlwOworCisJaWYgKCgoYy0+ZCAmIE1vZFJNKSAmJiAoYy0+bW9kcm1fbW9kICE9IDMpKSB8fCAoYy0+ZCAmIE1lbUFicykpCisJCW1lbW9wID0gYy0+bW9kcm1fZWE7CisKKwlpZiAoYy0+cmVwX3ByZWZpeCAmJiAoYy0+ZCAmIFN0cmluZykpIHsKKwkJLyogQWxsIFJFUCBwcmVmaXhlcyBoYXZlIHRoZSBzYW1lIGZpcnN0IHRlcm1pbmF0aW9uIGNvbmRpdGlvbiAqLworCQlpZiAoYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSA9PSAwKSB7CisJCQlrdm1fcmlwX3dyaXRlKGN0eHQtPnZjcHUsIGMtPmVpcCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJLyogVGhlIHNlY29uZCB0ZXJtaW5hdGlvbiBjb25kaXRpb24gb25seSBhcHBsaWVzIGZvciBSRVBFCisJCSAqIGFuZCBSRVBORS4gVGVzdCBpZiB0aGUgcmVwZWF0IHN0cmluZyBvcGVyYXRpb24gcHJlZml4IGlzCisJCSAqIFJFUEUvUkVQWiBvciBSRVBORS9SRVBOWiBhbmQgaWYgaXQncyB0aGUgY2FzZSBpdCB0ZXN0cyB0aGUKKwkJICogY29ycmVzcG9uZGluZyB0ZXJtaW5hdGlvbiBjb25kaXRpb24gYWNjb3JkaW5nIHRvOgorCQkgKiAJLSBpZiBSRVBFL1JFUFogYW5kIFpGID0gMCB0aGVuIGRvbmUKKwkJICogCS0gaWYgUkVQTkUvUkVQTlogYW5kIFpGID0gMSB0aGVuIGRvbmUKKwkJICovCisJCWlmICgoYy0+YiA9PSAweGE2KSB8fCAoYy0+YiA9PSAweGE3KSB8fAorCQkJCShjLT5iID09IDB4YWUpIHx8IChjLT5iID09IDB4YWYpKSB7CisJCQlpZiAoKGMtPnJlcF9wcmVmaXggPT0gUkVQRV9QUkVGSVgpICYmCisJCQkJKChjdHh0LT5lZmxhZ3MgJiBFRkxHX1pGKSA9PSAwKSkgeworCQkJCQlrdm1fcmlwX3dyaXRlKGN0eHQtPnZjcHUsIGMtPmVpcCk7CisJCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCWlmICgoYy0+cmVwX3ByZWZpeCA9PSBSRVBORV9QUkVGSVgpICYmCisJCQkJKChjdHh0LT5lZmxhZ3MgJiBFRkxHX1pGKSA9PSBFRkxHX1pGKSkgeworCQkJCWt2bV9yaXBfd3JpdGUoY3R4dC0+dmNwdSwgYy0+ZWlwKTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCX0KKwkJYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXS0tOworCQljLT5laXAgPSBrdm1fcmlwX3JlYWQoY3R4dC0+dmNwdSk7CisJfQorCisJaWYgKGMtPnNyYy50eXBlID09IE9QX01FTSkgeworCQljLT5zcmMucHRyID0gKHVuc2lnbmVkIGxvbmcgKiltZW1vcDsKKwkJYy0+c3JjLnZhbCA9IDA7CisJCXJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKCh1bnNpZ25lZCBsb25nKWMtPnNyYy5wdHIsCisJCQkJCSZjLT5zcmMudmFsLAorCQkJCQljLT5zcmMuYnl0ZXMsCisJCQkJCWN0eHQtPnZjcHUpOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gZG9uZTsKKwkJYy0+c3JjLm9yaWdfdmFsID0gYy0+c3JjLnZhbDsKKwl9CisKKwlpZiAoKGMtPmQgJiBEc3RNYXNrKSA9PSBJbXBsaWNpdE9wcykKKwkJZ290byBzcGVjaWFsX2luc247CisKKworCWlmIChjLT5kc3QudHlwZSA9PSBPUF9NRU0pIHsKKwkJYy0+ZHN0LnB0ciA9ICh1bnNpZ25lZCBsb25nICopbWVtb3A7CisJCWMtPmRzdC5ieXRlcyA9IChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlczsKKwkJYy0+ZHN0LnZhbCA9IDA7CisJCWlmIChjLT5kICYgQml0T3ApIHsKKwkJCXVuc2lnbmVkIGxvbmcgbWFzayA9IH4oYy0+ZHN0LmJ5dGVzICogOCAtIDEpOworCisJCQljLT5kc3QucHRyID0gKHZvaWQgKiljLT5kc3QucHRyICsKKwkJCQkJCSAgIChjLT5zcmMudmFsICYgbWFzaykgLyA4OworCQl9CisJCWlmICghKGMtPmQgJiBNb3YpICYmCisJCQkJICAgLyogb3B0aW1pc2F0aW9uIC0gYXZvaWQgc2xvdyBlbXVsYXRlZCByZWFkICovCisJCSAgICAoKHJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKCh1bnNpZ25lZCBsb25nKWMtPmRzdC5wdHIsCisJCQkJCSAgICZjLT5kc3QudmFsLAorCQkJCQkgIGMtPmRzdC5ieXRlcywgY3R4dC0+dmNwdSkpICE9IDApKQorCQkJZ290byBkb25lOworCX0KKwljLT5kc3Qub3JpZ192YWwgPSBjLT5kc3QudmFsOworCitzcGVjaWFsX2luc246CisKKwlpZiAoYy0+dHdvYnl0ZSkKKwkJZ290byB0d29ieXRlX2luc247CisKKwlzd2l0Y2ggKGMtPmIpIHsKKwljYXNlIDB4MDAgLi4uIDB4MDU6CisJICAgICAgYWRkOgkJLyogYWRkICovCisJCWVtdWxhdGVfMm9wX1NyY1YoImFkZCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4MDggLi4uIDB4MGQ6CisJICAgICAgb3I6CQkvKiBvciAqLworCQllbXVsYXRlXzJvcF9TcmNWKCJvciIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4MTAgLi4uIDB4MTU6CisJICAgICAgYWRjOgkJLyogYWRjICovCisJCWVtdWxhdGVfMm9wX1NyY1YoImFkYyIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4MTggLi4uIDB4MWQ6CisJICAgICAgc2JiOgkJLyogc2JiICovCisJCWVtdWxhdGVfMm9wX1NyY1YoInNiYiIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4MjAgLi4uIDB4MjU6CisJICAgICAgYW5kOgkJLyogYW5kICovCisJCWVtdWxhdGVfMm9wX1NyY1YoImFuZCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4MjggLi4uIDB4MmQ6CisJICAgICAgc3ViOgkJLyogc3ViICovCisJCWVtdWxhdGVfMm9wX1NyY1YoInN1YiIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4MzAgLi4uIDB4MzU6CisJICAgICAgeG9yOgkJLyogeG9yICovCisJCWVtdWxhdGVfMm9wX1NyY1YoInhvciIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4MzggLi4uIDB4M2Q6CisJICAgICAgY21wOgkJLyogY21wICovCisJCWVtdWxhdGVfMm9wX1NyY1YoImNtcCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4NDAgLi4uIDB4NDc6IC8qIGluYyByMTYvcjMyICovCisJCWVtdWxhdGVfMW9wKCJpbmMiLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJCWJyZWFrOworCWNhc2UgMHg0OCAuLi4gMHg0ZjogLyogZGVjIHIxNi9yMzIgKi8KKwkJZW11bGF0ZV8xb3AoImRlYyIsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSAweDUwIC4uLiAweDU3OiAgLyogcHVzaCByZWcgKi8KKwkJZW11bGF0ZV9wdXNoKGN0eHQpOworCQlicmVhazsKKwljYXNlIDB4NTggLi4uIDB4NWY6IC8qIHBvcCByZWcgKi8KKwlwb3BfaW5zdHJ1Y3Rpb246CisJCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmYy0+ZHN0LnZhbCwgYy0+b3BfYnl0ZXMpOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gZG9uZTsKKwkJYnJlYWs7CisJY2FzZSAweDYzOgkJLyogbW92c3hkICovCisJCWlmIChjdHh0LT5tb2RlICE9IFg4NkVNVUxfTU9ERV9QUk9UNjQpCisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQljLT5kc3QudmFsID0gKHMzMikgYy0+c3JjLnZhbDsKKwkJYnJlYWs7CisJY2FzZSAweDY4OiAvKiBwdXNoIGltbSAqLworCWNhc2UgMHg2YTogLyogcHVzaCBpbW04ICovCisJCWVtdWxhdGVfcHVzaChjdHh0KTsKKwkJYnJlYWs7CisJY2FzZSAweDZjOgkJLyogaW5zYiAqLworCWNhc2UgMHg2ZDoJCS8qIGluc3cvaW5zZCAqLworCQkgaWYgKGt2bV9lbXVsYXRlX3Bpb19zdHJpbmcoY3R4dC0+dmNwdSwgTlVMTCwKKwkJCQkxLAorCQkJCShjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlcywKKwkJCQljLT5yZXBfcHJlZml4ID8KKwkJCQlhZGRyZXNzX21hc2soYywgYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSkgOiAxLAorCQkJCShjdHh0LT5lZmxhZ3MgJiBFRkxHX0RGKSwKKwkJCQlyZWdpc3Rlcl9hZGRyZXNzKGMsIGVzX2Jhc2UoY3R4dCksCisJCQkJCQkgYy0+cmVnc1tWQ1BVX1JFR1NfUkRJXSksCisJCQkJYy0+cmVwX3ByZWZpeCwKKwkJCQljLT5yZWdzW1ZDUFVfUkVHU19SRFhdKSA9PSAwKSB7CisJCQljLT5laXAgPSBzYXZlZF9laXA7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcmV0dXJuIDA7CisJY2FzZSAweDZlOgkJLyogb3V0c2IgKi8KKwljYXNlIDB4NmY6CQkvKiBvdXRzdy9vdXRzZCAqLworCQlpZiAoa3ZtX2VtdWxhdGVfcGlvX3N0cmluZyhjdHh0LT52Y3B1LCBOVUxMLAorCQkJCTAsCisJCQkJKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzLAorCQkJCWMtPnJlcF9wcmVmaXggPworCQkJCWFkZHJlc3NfbWFzayhjLCBjLT5yZWdzW1ZDUFVfUkVHU19SQ1hdKSA6IDEsCisJCQkJKGN0eHQtPmVmbGFncyAmIEVGTEdfREYpLAorCQkJCQkgcmVnaXN0ZXJfYWRkcmVzcyhjLAorCQkJCQkgIHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIGMpLAorCQkJCQkJIGMtPnJlZ3NbVkNQVV9SRUdTX1JTSV0pLAorCQkJCWMtPnJlcF9wcmVmaXgsCisJCQkJYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXSkgPT0gMCkgeworCQkJYy0+ZWlwID0gc2F2ZWRfZWlwOworCQkJcmV0dXJuIC0xOworCQl9CisJCXJldHVybiAwOworCWNhc2UgMHg3MCAuLi4gMHg3ZjogLyogamNjIChzaG9ydCkgKi8KKwkJaWYgKHRlc3RfY2MoYy0+YiwgY3R4dC0+ZWZsYWdzKSkKKwkJCWptcF9yZWwoYywgYy0+c3JjLnZhbCk7CisJCWJyZWFrOworCWNhc2UgMHg4MCAuLi4gMHg4MzoJLyogR3JwMSAqLworCQlzd2l0Y2ggKGMtPm1vZHJtX3JlZykgeworCQljYXNlIDA6CisJCQlnb3RvIGFkZDsKKwkJY2FzZSAxOgorCQkJZ290byBvcjsKKwkJY2FzZSAyOgorCQkJZ290byBhZGM7CisJCWNhc2UgMzoKKwkJCWdvdG8gc2JiOworCQljYXNlIDQ6CisJCQlnb3RvIGFuZDsKKwkJY2FzZSA1OgorCQkJZ290byBzdWI7CisJCWNhc2UgNjoKKwkJCWdvdG8geG9yOworCQljYXNlIDc6CisJCQlnb3RvIGNtcDsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4ODQgLi4uIDB4ODU6CisJCWVtdWxhdGVfMm9wX1NyY1YoInRlc3QiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSAweDg2IC4uLiAweDg3OgkvKiB4Y2hnICovCisJeGNoZzoKKwkJLyogV3JpdGUgYmFjayB0aGUgcmVnaXN0ZXIgc291cmNlLiAqLworCQlzd2l0Y2ggKGMtPmRzdC5ieXRlcykgeworCQljYXNlIDE6CisJCQkqKHU4ICopIGMtPnNyYy5wdHIgPSAodTgpIGMtPmRzdC52YWw7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJKih1MTYgKikgYy0+c3JjLnB0ciA9ICh1MTYpIGMtPmRzdC52YWw7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJKmMtPnNyYy5wdHIgPSAodTMyKSBjLT5kc3QudmFsOworCQkJYnJlYWs7CS8qIDY0YiByZWc6IHplcm8tZXh0ZW5kICovCisJCWNhc2UgODoKKwkJCSpjLT5zcmMucHRyID0gYy0+ZHN0LnZhbDsKKwkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIFdyaXRlIGJhY2sgdGhlIG1lbW9yeSBkZXN0aW5hdGlvbiB3aXRoIGltcGxpY2l0IExPQ0sKKwkJICogcHJlZml4LgorCQkgKi8KKwkJYy0+ZHN0LnZhbCA9IGMtPnNyYy52YWw7CisJCWMtPmxvY2tfcHJlZml4ID0gMTsKKwkJYnJlYWs7CisJY2FzZSAweDg4IC4uLiAweDhiOgkvKiBtb3YgKi8KKwkJZ290byBtb3Y7CisJY2FzZSAweDhjOiB7IC8qIG1vdiByL20sIHNyZWcgKi8KKwkJc3RydWN0IGt2bV9zZWdtZW50IHNlZ3JlZzsKKworCQlpZiAoYy0+bW9kcm1fcmVnIDw9IDUpCisJCQlrdm1fZ2V0X3NlZ21lbnQoY3R4dC0+dmNwdSwgJnNlZ3JlZywgYy0+bW9kcm1fcmVnKTsKKwkJZWxzZSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIweDhjOiBJbnZhbGlkIHNlZ3JlZyBpbiBtb2RybSBieXRlIDB4JTAyeFxuIiwKKwkJCSAgICAgICBjLT5tb2RybSk7CisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQl9CisJCWMtPmRzdC52YWwgPSBzZWdyZWcuc2VsZWN0b3I7CisJCWJyZWFrOworCX0KKwljYXNlIDB4OGQ6IC8qIGxlYSByMTYvcjMyLCBtICovCisJCWMtPmRzdC52YWwgPSBjLT5tb2RybV9lYTsKKwkJYnJlYWs7CisJY2FzZSAweDhlOiB7IC8qIG1vdiBzZWcsIHIvbTE2ICovCisJCXVpbnQxNl90IHNlbDsKKwkJaW50IHR5cGVfYml0czsKKwkJaW50IGVycjsKKworCQlzZWwgPSBjLT5zcmMudmFsOworCQlpZiAoYy0+bW9kcm1fcmVnID09IFZDUFVfU1JFR19TUykKKwkJCXRvZ2dsZV9pbnRlcnJ1cHRpYmlsaXR5KGN0eHQsIFg4Nl9TSEFET1dfSU5UX01PVl9TUyk7CisKKwkJaWYgKGMtPm1vZHJtX3JlZyA8PSA1KSB7CisJCQl0eXBlX2JpdHMgPSAoYy0+bW9kcm1fcmVnID09IDEpID8gOSA6IDE7CisJCQllcnIgPSBrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dC0+dmNwdSwgc2VsLAorCQkJCQkJCSAgdHlwZV9iaXRzLCBjLT5tb2RybV9yZWcpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiSW52YWxpZCBzZWdyZWcgaW4gbW9kcm0gYnl0ZSAweCUwMnhcbiIsCisJCQkJCWMtPm1vZHJtKTsKKwkJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisJCX0KKworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisKKwkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOyAgLyogRGlzYWJsZSB3cml0ZWJhY2suICovCisJCWJyZWFrOworCX0KKwljYXNlIDB4OGY6CQkvKiBwb3AgKHNvbGUgbWVtYmVyIG9mIEdycDFhKSAqLworCQlyYyA9IGVtdWxhdGVfZ3JwMWEoY3R4dCwgb3BzKTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIGRvbmU7CisJCWJyZWFrOworCWNhc2UgMHg5MDogLyogbm9wIC8geGNoZyByOCxyYXggKi8KKwkJaWYgKCEoYy0+cmV4X3ByZWZpeCAmIDEpKSB7IC8qIG5vcCAqLworCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOworCQkJYnJlYWs7CisJCX0KKwljYXNlIDB4OTEgLi4uIDB4OTc6IC8qIHhjaGcgcmVnLHJheCAqLworCQljLT5zcmMudHlwZSA9IGMtPmRzdC50eXBlID0gT1BfUkVHOworCQljLT5zcmMuYnl0ZXMgPSBjLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKKwkJYy0+c3JjLnB0ciA9ICh1bnNpZ25lZCBsb25nICopICZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOworCQljLT5zcmMudmFsID0gKihjLT5zcmMucHRyKTsKKwkJZ290byB4Y2hnOworCWNhc2UgMHg5YzogLyogcHVzaGYgKi8KKwkJYy0+c3JjLnZhbCA9ICAodW5zaWduZWQgbG9uZykgY3R4dC0+ZWZsYWdzOworCQllbXVsYXRlX3B1c2goY3R4dCk7CisJCWJyZWFrOworCWNhc2UgMHg5ZDogLyogcG9wZiAqLworCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKKwkJYy0+ZHN0LnB0ciA9ICh1bnNpZ25lZCBsb25nICopICZjdHh0LT5lZmxhZ3M7CisJCWMtPmRzdC5ieXRlcyA9IGMtPm9wX2J5dGVzOworCQlnb3RvIHBvcF9pbnN0cnVjdGlvbjsKKwljYXNlIDB4YTAgLi4uIDB4YTE6CS8qIG1vdiAqLworCQljLT5kc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKikmYy0+cmVnc1tWQ1BVX1JFR1NfUkFYXTsKKwkJYy0+ZHN0LnZhbCA9IGMtPnNyYy52YWw7CisJCWJyZWFrOworCWNhc2UgMHhhMiAuLi4gMHhhMzoJLyogbW92ICovCisJCWMtPmRzdC52YWwgPSAodW5zaWduZWQgbG9uZyljLT5yZWdzW1ZDUFVfUkVHU19SQVhdOworCQlicmVhazsKKwljYXNlIDB4YTQgLi4uIDB4YTU6CS8qIG1vdnMgKi8KKwkJYy0+ZHN0LnR5cGUgPSBPUF9NRU07CisJCWMtPmRzdC5ieXRlcyA9IChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlczsKKwkJYy0+ZHN0LnB0ciA9ICh1bnNpZ25lZCBsb25nICopcmVnaXN0ZXJfYWRkcmVzcyhjLAorCQkJCQkJICAgZXNfYmFzZShjdHh0KSwKKwkJCQkJCSAgIGMtPnJlZ3NbVkNQVV9SRUdTX1JESV0pOworCQlpZiAoKHJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKHJlZ2lzdGVyX2FkZHJlc3MoYywKKwkJCQkJICAgc2VnX292ZXJyaWRlX2Jhc2UoY3R4dCwgYyksCisJCQkJCWMtPnJlZ3NbVkNQVV9SRUdTX1JTSV0pLAorCQkJCQkmYy0+ZHN0LnZhbCwKKwkJCQkJYy0+ZHN0LmJ5dGVzLCBjdHh0LT52Y3B1KSkgIT0gMCkKKwkJCWdvdG8gZG9uZTsKKwkJcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoYywgJmMtPnJlZ3NbVkNQVV9SRUdTX1JTSV0sCisJCQkJICAgICAgIChjdHh0LT5lZmxhZ3MgJiBFRkxHX0RGKSA/IC1jLT5kc3QuYnl0ZXMKKwkJCQkJCQkgICA6IGMtPmRzdC5ieXRlcyk7CisJCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SREldLAorCQkJCSAgICAgICAoY3R4dC0+ZWZsYWdzICYgRUZMR19ERikgPyAtYy0+ZHN0LmJ5dGVzCisJCQkJCQkJICAgOiBjLT5kc3QuYnl0ZXMpOworCQlicmVhazsKKwljYXNlIDB4YTYgLi4uIDB4YTc6CS8qIGNtcHMgKi8KKwkJYy0+c3JjLnR5cGUgPSBPUF9OT05FOyAvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KKwkJYy0+c3JjLmJ5dGVzID0gKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzOworCQljLT5zcmMucHRyID0gKHVuc2lnbmVkIGxvbmcgKilyZWdpc3Rlcl9hZGRyZXNzKGMsCisJCQkJICAgICAgIHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIGMpLAorCQkJCQkJICAgYy0+cmVnc1tWQ1BVX1JFR1NfUlNJXSk7CisJCWlmICgocmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoKHVuc2lnbmVkIGxvbmcpYy0+c3JjLnB0ciwKKwkJCQkJCSZjLT5zcmMudmFsLAorCQkJCQkJYy0+c3JjLmJ5dGVzLAorCQkJCQkJY3R4dC0+dmNwdSkpICE9IDApCisJCQlnb3RvIGRvbmU7CisKKwkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOyAvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KKwkJYy0+ZHN0LmJ5dGVzID0gKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzOworCQljLT5kc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKilyZWdpc3Rlcl9hZGRyZXNzKGMsCisJCQkJCQkgICBlc19iYXNlKGN0eHQpLAorCQkJCQkJICAgYy0+cmVnc1tWQ1BVX1JFR1NfUkRJXSk7CisJCWlmICgocmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoKHVuc2lnbmVkIGxvbmcpYy0+ZHN0LnB0ciwKKwkJCQkJCSZjLT5kc3QudmFsLAorCQkJCQkJYy0+ZHN0LmJ5dGVzLAorCQkJCQkJY3R4dC0+dmNwdSkpICE9IDApCisJCQlnb3RvIGRvbmU7CisKKwkJRFBSSU5URigiY21wczogbWVtMT0weCVwIG1lbTI9MHglcFxuIiwgYy0+c3JjLnB0ciwgYy0+ZHN0LnB0cik7CisKKwkJZW11bGF0ZV8yb3BfU3JjVigiY21wIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisKKwkJcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoYywgJmMtPnJlZ3NbVkNQVV9SRUdTX1JTSV0sCisJCQkJICAgICAgIChjdHh0LT5lZmxhZ3MgJiBFRkxHX0RGKSA/IC1jLT5zcmMuYnl0ZXMKKwkJCQkJCQkJICA6IGMtPnNyYy5ieXRlcyk7CisJCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SREldLAorCQkJCSAgICAgICAoY3R4dC0+ZWZsYWdzICYgRUZMR19ERikgPyAtYy0+ZHN0LmJ5dGVzCisJCQkJCQkJCSAgOiBjLT5kc3QuYnl0ZXMpOworCisJCWJyZWFrOworCWNhc2UgMHhhYSAuLi4gMHhhYjoJLyogc3RvcyAqLworCQljLT5kc3QudHlwZSA9IE9QX01FTTsKKwkJYy0+ZHN0LmJ5dGVzID0gKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzOworCQljLT5kc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKilyZWdpc3Rlcl9hZGRyZXNzKGMsCisJCQkJCQkgICBlc19iYXNlKGN0eHQpLAorCQkJCQkJICAgYy0+cmVnc1tWQ1BVX1JFR1NfUkRJXSk7CisJCWMtPmRzdC52YWwgPSBjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOworCQlyZWdpc3Rlcl9hZGRyZXNzX2luY3JlbWVudChjLCAmYy0+cmVnc1tWQ1BVX1JFR1NfUkRJXSwKKwkJCQkgICAgICAgKGN0eHQtPmVmbGFncyAmIEVGTEdfREYpID8gLWMtPmRzdC5ieXRlcworCQkJCQkJCSAgIDogYy0+ZHN0LmJ5dGVzKTsKKwkJYnJlYWs7CisJY2FzZSAweGFjIC4uLiAweGFkOgkvKiBsb2RzICovCisJCWMtPmRzdC50eXBlID0gT1BfUkVHOworCQljLT5kc3QuYnl0ZXMgPSAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDogYy0+b3BfYnl0ZXM7CisJCWMtPmRzdC5wdHIgPSAodW5zaWduZWQgbG9uZyAqKSZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOworCQlpZiAoKHJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKHJlZ2lzdGVyX2FkZHJlc3MoYywKKwkJCQkJCSBzZWdfb3ZlcnJpZGVfYmFzZShjdHh0LCBjKSwKKwkJCQkJCSBjLT5yZWdzW1ZDUFVfUkVHU19SU0ldKSwKKwkJCQkJCSAmYy0+ZHN0LnZhbCwKKwkJCQkJCSBjLT5kc3QuYnl0ZXMsCisJCQkJCQkgY3R4dC0+dmNwdSkpICE9IDApCisJCQlnb3RvIGRvbmU7CisJCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SU0ldLAorCQkJCSAgICAgICAoY3R4dC0+ZWZsYWdzICYgRUZMR19ERikgPyAtYy0+ZHN0LmJ5dGVzCisJCQkJCQkJICAgOiBjLT5kc3QuYnl0ZXMpOworCQlicmVhazsKKwljYXNlIDB4YWUgLi4uIDB4YWY6CS8qIHNjYXMgKi8KKwkJRFBSSU5URigiVXJrISBJIGRvbid0IGhhbmRsZSBTQ0FTLlxuIik7CisJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisJY2FzZSAweGIwIC4uLiAweGJmOiAvKiBtb3YgciwgaW1tICovCisJCWdvdG8gbW92OworCWNhc2UgMHhjMCAuLi4gMHhjMToKKwkJZW11bGF0ZV9ncnAyKGN0eHQpOworCQlicmVhazsKKwljYXNlIDB4YzM6IC8qIHJldCAqLworCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKKwkJYy0+ZHN0LnB0ciA9ICZjLT5laXA7CisJCWMtPmRzdC5ieXRlcyA9IGMtPm9wX2J5dGVzOworCQlnb3RvIHBvcF9pbnN0cnVjdGlvbjsKKwljYXNlIDB4YzYgLi4uIDB4Yzc6CS8qIG1vdiAoc29sZSBtZW1iZXIgb2YgR3JwMTEpICovCisJbW92OgorCQljLT5kc3QudmFsID0gYy0+c3JjLnZhbDsKKwkJYnJlYWs7CisJY2FzZSAweGNiOgkJLyogcmV0IGZhciAqLworCQlyYyA9IGVtdWxhdGVfcmV0X2ZhcihjdHh0LCBvcHMpOworCQlpZiAocmMpCisJCQlnb3RvIGRvbmU7CisJCWJyZWFrOworCWNhc2UgMHhkMCAuLi4gMHhkMToJLyogR3JwMiAqLworCQljLT5zcmMudmFsID0gMTsKKwkJZW11bGF0ZV9ncnAyKGN0eHQpOworCQlicmVhazsKKwljYXNlIDB4ZDIgLi4uIDB4ZDM6CS8qIEdycDIgKi8KKwkJYy0+c3JjLnZhbCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JDWF07CisJCWVtdWxhdGVfZ3JwMihjdHh0KTsKKwkJYnJlYWs7CisJY2FzZSAweGU0OiAJLyogaW5iICovCisJY2FzZSAweGU1OiAJLyogaW4gKi8KKwkJcG9ydCA9IGMtPnNyYy52YWw7CisJCWlvX2Rpcl9pbiA9IDE7CisJCWdvdG8gZG9faW87CisJY2FzZSAweGU2OiAvKiBvdXRiICovCisJY2FzZSAweGU3OiAvKiBvdXQgKi8KKwkJcG9ydCA9IGMtPnNyYy52YWw7CisJCWlvX2Rpcl9pbiA9IDA7CisJCWdvdG8gZG9faW87CisJY2FzZSAweGU4OiAvKiBjYWxsIChuZWFyKSAqLyB7CisJCWxvbmcgaW50IHJlbCA9IGMtPnNyYy52YWw7CisJCWMtPnNyYy52YWwgPSAodW5zaWduZWQgbG9uZykgYy0+ZWlwOworCQlqbXBfcmVsKGMsIHJlbCk7CisJCWVtdWxhdGVfcHVzaChjdHh0KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgMHhlOTogLyogam1wIHJlbCAqLworCQlnb3RvIGptcDsKKwljYXNlIDB4ZWE6IC8qIGptcCBmYXIgKi8KKwkJaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihjdHh0LT52Y3B1LCBjLT5zcmMyLnZhbCwgOSwKKwkJCQkJVkNQVV9TUkVHX0NTKSA8IDApIHsKKwkJCURQUklOVEYoImptcCBmYXI6IEZhaWxlZCB0byBsb2FkIENTIGRlc2NyaXB0b3JcbiIpOworCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJfQorCisJCWMtPmVpcCA9IGMtPnNyYy52YWw7CisJCWJyZWFrOworCWNhc2UgMHhlYjoKKwkgICAgICBqbXA6CQkvKiBqbXAgcmVsIHNob3J0ICovCisJCWptcF9yZWwoYywgYy0+c3JjLnZhbCk7CisJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsgLyogRGlzYWJsZSB3cml0ZWJhY2suICovCisJCWJyZWFrOworCWNhc2UgMHhlYzogLyogaW4gYWwsZHggKi8KKwljYXNlIDB4ZWQ6IC8qIGluIChlL3IpYXgsZHggKi8KKwkJcG9ydCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWlvX2Rpcl9pbiA9IDE7CisJCWdvdG8gZG9faW87CisJY2FzZSAweGVlOiAvKiBvdXQgYWwsZHggKi8KKwljYXNlIDB4ZWY6IC8qIG91dCAoZS9yKWF4LGR4ICovCisJCXBvcnQgPSBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdOworCQlpb19kaXJfaW4gPSAwOworCWRvX2lvOglpZiAoa3ZtX2VtdWxhdGVfcGlvKGN0eHQtPnZjcHUsIE5VTEwsIGlvX2Rpcl9pbiwKKwkJCQkgICAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDogYy0+b3BfYnl0ZXMsCisJCQkJICAgcG9ydCkgIT0gMCkgeworCQkJYy0+ZWlwID0gc2F2ZWRfZWlwOworCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4ZjQ6ICAgICAgICAgICAgICAvKiBobHQgKi8KKwkJY3R4dC0+dmNwdS0+YXJjaC5oYWx0X3JlcXVlc3QgPSAxOworCQlicmVhazsKKwljYXNlIDB4ZjU6CS8qIGNtYyAqLworCQkvKiBjb21wbGVtZW50IGNhcnJ5IGZsYWcgZnJvbSBlZmxhZ3MgcmVnICovCisJCWN0eHQtPmVmbGFncyBePSBFRkxHX0NGOworCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIERpc2FibGUgd3JpdGViYWNrLiAqLworCQlicmVhazsKKwljYXNlIDB4ZjYgLi4uIDB4Zjc6CS8qIEdycDMgKi8KKwkJcmMgPSBlbXVsYXRlX2dycDMoY3R4dCwgb3BzKTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIGRvbmU7CisJCWJyZWFrOworCWNhc2UgMHhmODogLyogY2xjICovCisJCWN0eHQtPmVmbGFncyAmPSB+RUZMR19DRjsKKwkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KKwkJYnJlYWs7CisJY2FzZSAweGZhOiAvKiBjbGkgKi8KKwkJY3R4dC0+ZWZsYWdzICY9IH5YODZfRUZMQUdTX0lGOworCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIERpc2FibGUgd3JpdGViYWNrLiAqLworCQlicmVhazsKKwljYXNlIDB4ZmI6IC8qIHN0aSAqLworCQl0b2dnbGVfaW50ZXJydXB0aWJpbGl0eShjdHh0LCBYODZfU0hBRE9XX0lOVF9TVEkpOworCQljdHh0LT5lZmxhZ3MgfD0gWDg2X0VGTEFHU19JRjsKKwkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KKwkJYnJlYWs7CisJY2FzZSAweGZjOiAvKiBjbGQgKi8KKwkJY3R4dC0+ZWZsYWdzICY9IH5FRkxHX0RGOworCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIERpc2FibGUgd3JpdGViYWNrLiAqLworCQlicmVhazsKKwljYXNlIDB4ZmQ6IC8qIHN0ZCAqLworCQljdHh0LT5lZmxhZ3MgfD0gRUZMR19ERjsKKwkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KKwkJYnJlYWs7CisJY2FzZSAweGZlIC4uLiAweGZmOgkvKiBHcnA0L0dycDUgKi8KKwkJcmMgPSBlbXVsYXRlX2dycDQ1KGN0eHQsIG9wcyk7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byBkb25lOworCQlicmVhazsKKwl9CisKK3dyaXRlYmFjazoKKwlyYyA9IHdyaXRlYmFjayhjdHh0LCBvcHMpOworCWlmIChyYyAhPSAwKQorCQlnb3RvIGRvbmU7CisKKwkvKiBDb21taXQgc2hhZG93IHJlZ2lzdGVyIHN0YXRlLiAqLworCW1lbWNweShjdHh0LT52Y3B1LT5hcmNoLnJlZ3MsIGMtPnJlZ3MsIHNpemVvZiBjLT5yZWdzKTsKKwlrdm1fcmlwX3dyaXRlKGN0eHQtPnZjcHUsIGMtPmVpcCk7CisKK2RvbmU6CisJaWYgKHJjID09IFg4NkVNVUxfVU5IQU5ETEVBQkxFKSB7CisJCWMtPmVpcCA9IHNhdmVkX2VpcDsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKKwordHdvYnl0ZV9pbnNuOgorCXN3aXRjaCAoYy0+YikgeworCWNhc2UgMHgwMTogLyogbGdkdCwgbGlkdCwgbG1zdyAqLworCQlzd2l0Y2ggKGMtPm1vZHJtX3JlZykgeworCQkJdTE2IHNpemU7CisJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisKKwkJY2FzZSAwOiAvKiB2bWNhbGwgKi8KKwkJCWlmIChjLT5tb2RybV9tb2QgIT0gMyB8fCBjLT5tb2RybV9ybSAhPSAxKQorCQkJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisKKwkJCXJjID0ga3ZtX2ZpeF9oeXBlcmNhbGwoY3R4dC0+dmNwdSk7CisJCQlpZiAocmMpCisJCQkJZ290byBkb25lOworCisJCQkvKiBMZXQgdGhlIHByb2Nlc3NvciByZS1leGVjdXRlIHRoZSBmaXhlZCBoeXBlcmNhbGwgKi8KKwkJCWMtPmVpcCA9IGt2bV9yaXBfcmVhZChjdHh0LT52Y3B1KTsKKwkJCS8qIERpc2FibGUgd3JpdGViYWNrLiAqLworCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOworCQkJYnJlYWs7CisJCWNhc2UgMjogLyogbGdkdCAqLworCQkJcmMgPSByZWFkX2Rlc2NyaXB0b3IoY3R4dCwgb3BzLCBjLT5zcmMucHRyLAorCQkJCQkgICAgICZzaXplLCAmYWRkcmVzcywgYy0+b3BfYnl0ZXMpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gZG9uZTsKKwkJCXJlYWxtb2RlX2xnZHQoY3R4dC0+dmNwdSwgc2l6ZSwgYWRkcmVzcyk7CisJCQkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KKwkJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKKwkJCWJyZWFrOworCQljYXNlIDM6IC8qIGxpZHQvdm1tY2FsbCAqLworCQkJaWYgKGMtPm1vZHJtX21vZCA9PSAzKSB7CisJCQkJc3dpdGNoIChjLT5tb2RybV9ybSkgeworCQkJCWNhc2UgMToKKwkJCQkJcmMgPSBrdm1fZml4X2h5cGVyY2FsbChjdHh0LT52Y3B1KTsKKwkJCQkJaWYgKHJjKQorCQkJCQkJZ290byBkb25lOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJcmMgPSByZWFkX2Rlc2NyaXB0b3IoY3R4dCwgb3BzLCBjLT5zcmMucHRyLAorCQkJCQkJICAgICAmc2l6ZSwgJmFkZHJlc3MsCisJCQkJCQkgICAgIGMtPm9wX2J5dGVzKTsKKwkJCQlpZiAocmMpCisJCQkJCWdvdG8gZG9uZTsKKwkJCQlyZWFsbW9kZV9saWR0KGN0eHQtPnZjcHUsIHNpemUsIGFkZHJlc3MpOworCQkJfQorCQkJLyogRGlzYWJsZSB3cml0ZWJhY2suICovCisJCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CisJCQlicmVhazsKKwkJY2FzZSA0OiAvKiBzbXN3ICovCisJCQljLT5kc3QuYnl0ZXMgPSAyOworCQkJYy0+ZHN0LnZhbCA9IHJlYWxtb2RlX2dldF9jcihjdHh0LT52Y3B1LCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDY6IC8qIGxtc3cgKi8KKwkJCXJlYWxtb2RlX2xtc3coY3R4dC0+dmNwdSwgKHUxNiljLT5zcmMudmFsLAorCQkJCSAgICAgICZjdHh0LT5lZmxhZ3MpOworCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOworCQkJYnJlYWs7CisJCWNhc2UgNzogLyogaW52bHBnKi8KKwkJCWVtdWxhdGVfaW52bHBnKGN0eHQtPnZjcHUsIG1lbW9wKTsKKwkJCS8qIERpc2FibGUgd3JpdGViYWNrLiAqLworCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQl9CisJCWJyZWFrOworCWNhc2UgMHgwNTogCQkvKiBzeXNjYWxsICovCisJCWlmIChlbXVsYXRlX3N5c2NhbGwoY3R4dCkgPT0gLTEpCisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQllbHNlCisJCQlnb3RvIHdyaXRlYmFjazsKKwkJYnJlYWs7CisJY2FzZSAweDA2OgorCQllbXVsYXRlX2NsdHMoY3R4dC0+dmNwdSk7CisJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKKwkJYnJlYWs7CisJY2FzZSAweDA4OgkJLyogaW52ZCAqLworCWNhc2UgMHgwOToJCS8qIHdiaW52ZCAqLworCWNhc2UgMHgwZDoJCS8qIEdycFAgKHByZWZldGNoKSAqLworCWNhc2UgMHgxODoJCS8qIEdycDE2IChwcmVmZXRjaC9ub3ApICovCisJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKKwkJYnJlYWs7CisJY2FzZSAweDIwOiAvKiBtb3YgY3IsIHJlZyAqLworCQlpZiAoYy0+bW9kcm1fbW9kICE9IDMpCisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQljLT5yZWdzW2MtPm1vZHJtX3JtXSA9CisJCQkJcmVhbG1vZGVfZ2V0X2NyKGN0eHQtPnZjcHUsIGMtPm1vZHJtX3JlZyk7CisJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsJLyogbm8gd3JpdGViYWNrICovCisJCWJyZWFrOworCWNhc2UgMHgyMTogLyogbW92IGZyb20gZHIgdG8gcmVnICovCisJCWlmIChjLT5tb2RybV9tb2QgIT0gMykKKwkJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisJCXJjID0gZW11bGF0b3JfZ2V0X2RyKGN0eHQsIGMtPm1vZHJtX3JlZywgJmMtPnJlZ3NbYy0+bW9kcm1fcm1dKTsKKwkJaWYgKHJjKQorCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBubyB3cml0ZWJhY2sgKi8KKwkJYnJlYWs7CisJY2FzZSAweDIyOiAvKiBtb3YgcmVnLCBjciAqLworCQlpZiAoYy0+bW9kcm1fbW9kICE9IDMpCisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQlyZWFsbW9kZV9zZXRfY3IoY3R4dC0+dmNwdSwKKwkJCQljLT5tb2RybV9yZWcsIGMtPm1vZHJtX3ZhbCwgJmN0eHQtPmVmbGFncyk7CisJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKKwkJYnJlYWs7CisJY2FzZSAweDIzOiAvKiBtb3YgZnJvbSByZWcgdG8gZHIgKi8KKwkJaWYgKGMtPm1vZHJtX21vZCAhPSAzKQorCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJcmMgPSBlbXVsYXRvcl9zZXRfZHIoY3R4dCwgYy0+bW9kcm1fcmVnLAorCQkJCSAgICAgYy0+cmVnc1tjLT5tb2RybV9ybV0pOworCQlpZiAocmMpCisJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIG5vIHdyaXRlYmFjayAqLworCQlicmVhazsKKwljYXNlIDB4MzA6CisJCS8qIHdybXNyICovCisJCW1zcl9kYXRhID0gKHUzMiljLT5yZWdzW1ZDUFVfUkVHU19SQVhdCisJCQl8ICgodTY0KWMtPnJlZ3NbVkNQVV9SRUdTX1JEWF0gPDwgMzIpOworCQlyYyA9IGt2bV9zZXRfbXNyKGN0eHQtPnZjcHUsIGMtPnJlZ3NbVkNQVV9SRUdTX1JDWF0sIG1zcl9kYXRhKTsKKwkJaWYgKHJjKSB7CisJCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQkJYy0+ZWlwID0ga3ZtX3JpcF9yZWFkKGN0eHQtPnZjcHUpOworCQl9CisJCXJjID0gWDg2RU1VTF9DT05USU5VRTsKKwkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOworCQlicmVhazsKKwljYXNlIDB4MzI6CisJCS8qIHJkbXNyICovCisJCXJjID0ga3ZtX2dldF9tc3IoY3R4dC0+dmNwdSwgYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSwgJm1zcl9kYXRhKTsKKwkJaWYgKHJjKSB7CisJCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQkJYy0+ZWlwID0ga3ZtX3JpcF9yZWFkKGN0eHQtPnZjcHUpOworCQl9IGVsc2UgeworCQkJYy0+cmVnc1tWQ1BVX1JFR1NfUkFYXSA9ICh1MzIpbXNyX2RhdGE7CisJCQljLT5yZWdzW1ZDUFVfUkVHU19SRFhdID0gbXNyX2RhdGEgPj4gMzI7CisJCX0KKwkJcmMgPSBYODZFTVVMX0NPTlRJTlVFOworCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CisJCWJyZWFrOworCWNhc2UgMHgzNDoJCS8qIHN5c2VudGVyICovCisJCWlmIChlbXVsYXRlX3N5c2VudGVyKGN0eHQpID09IC0xKQorCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJZWxzZQorCQkJZ290byB3cml0ZWJhY2s7CisJCWJyZWFrOworCWNhc2UgMHgzNToJCS8qIHN5c2V4aXQgKi8KKwkJaWYgKGVtdWxhdGVfc3lzZXhpdChjdHh0KSA9PSAtMSkKKwkJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisJCWVsc2UKKwkJCWdvdG8gd3JpdGViYWNrOworCQlicmVhazsKKwljYXNlIDB4NDAgLi4uIDB4NGY6CS8qIGNtb3YgKi8KKwkJYy0+ZHN0LnZhbCA9IGMtPmRzdC5vcmlnX3ZhbCA9IGMtPnNyYy52YWw7CisJCWlmICghdGVzdF9jYyhjLT5iLCBjdHh0LT5lZmxhZ3MpKQorCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOyAvKiBubyB3cml0ZWJhY2sgKi8KKwkJYnJlYWs7CisJY2FzZSAweDgwIC4uLiAweDhmOiAvKiBqbnogcmVsLCBldGMqLworCQlpZiAodGVzdF9jYyhjLT5iLCBjdHh0LT5lZmxhZ3MpKQorCQkJam1wX3JlbChjLCBjLT5zcmMudmFsKTsKKwkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOworCQlicmVhazsKKwljYXNlIDB4YTM6CisJICAgICAgYnQ6CQkvKiBidCAqLworCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CisJCS8qIG9ubHkgc3Vid29yZCBvZmZzZXQgKi8KKwkJYy0+c3JjLnZhbCAmPSAoYy0+ZHN0LmJ5dGVzIDw8IDMpIC0gMTsKKwkJZW11bGF0ZV8yb3BfU3JjVl9ub2J5dGUoImJ0IiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJCWJyZWFrOworCWNhc2UgMHhhNDogLyogc2hsZCBpbW04LCByLCByL20gKi8KKwljYXNlIDB4YTU6IC8qIHNobGQgY2wsIHIsIHIvbSAqLworCQllbXVsYXRlXzJvcF9jbCgic2hsZCIsIGMtPnNyYzIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4YWI6CisJICAgICAgYnRzOgkJLyogYnRzICovCisJCS8qIG9ubHkgc3Vid29yZCBvZmZzZXQgKi8KKwkJYy0+c3JjLnZhbCAmPSAoYy0+ZHN0LmJ5dGVzIDw8IDMpIC0gMTsKKwkJZW11bGF0ZV8yb3BfU3JjVl9ub2J5dGUoImJ0cyIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4YWM6IC8qIHNocmQgaW1tOCwgciwgci9tICovCisJY2FzZSAweGFkOiAvKiBzaHJkIGNsLCByLCByL20gKi8KKwkJZW11bGF0ZV8yb3BfY2woInNocmQiLCBjLT5zcmMyLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSAweGFlOiAgICAgICAgICAgICAgLyogY2xmbHVzaCAqLworCQlicmVhazsKKwljYXNlIDB4YjAgLi4uIDB4YjE6CS8qIGNtcHhjaGcgKi8KKwkJLyoKKwkJICogU2F2ZSByZWFsIHNvdXJjZSB2YWx1ZSwgdGhlbiBjb21wYXJlIEVBWCBhZ2FpbnN0CisJCSAqIGRlc3RpbmF0aW9uLgorCQkgKi8KKwkJYy0+c3JjLm9yaWdfdmFsID0gYy0+c3JjLnZhbDsKKwkJYy0+c3JjLnZhbCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JBWF07CisJCWVtdWxhdGVfMm9wX1NyY1YoImNtcCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOworCQlpZiAoY3R4dC0+ZWZsYWdzICYgRUZMR19aRikgeworCQkJLyogU3VjY2Vzczogd3JpdGUgYmFjayB0byBtZW1vcnkuICovCisJCQljLT5kc3QudmFsID0gYy0+c3JjLm9yaWdfdmFsOworCQl9IGVsc2UgeworCQkJLyogRmFpbHVyZTogd3JpdGUgdGhlIHZhbHVlIHdlIHNhdyB0byBFQVguICovCisJCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKKwkJCWMtPmRzdC5wdHIgPSAodW5zaWduZWQgbG9uZyAqKSZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOworCQl9CisJCWJyZWFrOworCWNhc2UgMHhiMzoKKwkgICAgICBidHI6CQkvKiBidHIgKi8KKwkJLyogb25seSBzdWJ3b3JkIG9mZnNldCAqLworCQljLT5zcmMudmFsICY9IChjLT5kc3QuYnl0ZXMgPDwgMykgLSAxOworCQllbXVsYXRlXzJvcF9TcmNWX25vYnl0ZSgiYnRyIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CisJCWJyZWFrOworCWNhc2UgMHhiNiAuLi4gMHhiNzoJLyogbW92enggKi8KKwkJYy0+ZHN0LmJ5dGVzID0gYy0+b3BfYnl0ZXM7CisJCWMtPmRzdC52YWwgPSAoYy0+ZCAmIEJ5dGVPcCkgPyAodTgpIGMtPnNyYy52YWwKKwkJCQkJCSAgICAgICA6ICh1MTYpIGMtPnNyYy52YWw7CisJCWJyZWFrOworCWNhc2UgMHhiYToJCS8qIEdycDggKi8KKwkJc3dpdGNoIChjLT5tb2RybV9yZWcgJiAzKSB7CisJCWNhc2UgMDoKKwkJCWdvdG8gYnQ7CisJCWNhc2UgMToKKwkJCWdvdG8gYnRzOworCQljYXNlIDI6CisJCQlnb3RvIGJ0cjsKKwkJY2FzZSAzOgorCQkJZ290byBidGM7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAweGJiOgorCSAgICAgIGJ0YzoJCS8qIGJ0YyAqLworCQkvKiBvbmx5IHN1YndvcmQgb2Zmc2V0ICovCisJCWMtPnNyYy52YWwgJj0gKGMtPmRzdC5ieXRlcyA8PCAzKSAtIDE7CisJCWVtdWxhdGVfMm9wX1NyY1Zfbm9ieXRlKCJidGMiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSAweGJlIC4uLiAweGJmOgkvKiBtb3ZzeCAqLworCQljLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKKwkJYy0+ZHN0LnZhbCA9IChjLT5kICYgQnl0ZU9wKSA/IChzOCkgYy0+c3JjLnZhbCA6CisJCQkJCQkJKHMxNikgYy0+c3JjLnZhbDsKKwkJYnJlYWs7CisJY2FzZSAweGMzOgkJLyogbW92bnRpICovCisJCWMtPmRzdC5ieXRlcyA9IGMtPm9wX2J5dGVzOworCQljLT5kc3QudmFsID0gKGMtPm9wX2J5dGVzID09IDQpID8gKHUzMikgYy0+c3JjLnZhbCA6CisJCQkJCQkJKHU2NCkgYy0+c3JjLnZhbDsKKwkJYnJlYWs7CisJY2FzZSAweGM3OgkJLyogR3JwOSAoY21weGNoZzhiKSAqLworCQlyYyA9IGVtdWxhdGVfZ3JwOShjdHh0LCBvcHMsIG1lbW9wKTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIGRvbmU7CisJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKKwkJYnJlYWs7CisJfQorCWdvdG8gd3JpdGViYWNrOworCitjYW5ub3RfZW11bGF0ZToKKwlEUFJJTlRGKCJDYW5ub3QgZW11bGF0ZSAlMDJ4XG4iLCBjLT5iKTsKKwljLT5laXAgPSBzYXZlZF9laXA7CisJcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmMgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwppbmRleCAyMWY2OGUwLi44MmFkNTIzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYworKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiB7CiAJc3RydWN0IGt2bV9waXQgKnBpdCA9IHZjcHUtPmt2bS0+YXJjaC52cGl0OwogCi0JaWYgKHBpdCAmJiB2Y3B1LT52Y3B1X2lkID09IDAgJiYgcGl0LT5waXRfc3RhdGUuaXJxX2FjaykKKwlpZiAocGl0ICYmIGt2bV92Y3B1X2lzX2JzcCh2Y3B1KSAmJiBwaXQtPnBpdF9zdGF0ZS5pcnFfYWNrKQogCQlyZXR1cm4gYXRvbWljX3JlYWQoJnBpdC0+cGl0X3N0YXRlLnBpdF90aW1lci5wZW5kaW5nKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI1Miw3ICsyNTIsNyBAQAogCXN0cnVjdCBrdm1fcGl0ICpwaXQgPSB2Y3B1LT5rdm0tPmFyY2gudnBpdDsKIAlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7CiAKLQlpZiAodmNwdS0+dmNwdV9pZCAhPSAwIHx8ICFwaXQpCisJaWYgKCFrdm1fdmNwdV9pc19ic3AodmNwdSkgfHwgIXBpdCkKIAkJcmV0dXJuOwogCiAJdGltZXIgPSAmcGl0LT5waXRfc3RhdGUucGl0X3RpbWVyLnRpbWVyOwpAQCAtMjk0LDcgKzI5NCw3IEBACiAJcHQtPnRpbWVyLmZ1bmN0aW9uID0ga3ZtX3RpbWVyX2ZuOwogCXB0LT50X29wcyA9ICZrcGl0X29wczsKIAlwdC0+a3ZtID0gcHMtPnBpdC0+a3ZtOwotCXB0LT52Y3B1X2lkID0gMDsKKwlwdC0+dmNwdSA9IHB0LT5rdm0tPmJzcF92Y3B1OwogCiAJYXRvbWljX3NldCgmcHQtPnBlbmRpbmcsIDApOwogCXBzLT5pcnFfYWNrID0gMTsKQEAgLTMzMiwzMyArMzMyLDYyIEBACiAJY2FzZSAxOgogICAgICAgICAvKiBGSVhNRTogZW5oYW5jZSBtb2RlIDQgcHJlY2lzaW9uICovCiAJY2FzZSA0OgotCQljcmVhdGVfcGl0X3RpbWVyKHBzLCB2YWwsIDApOworCQlpZiAoIShwcy0+ZmxhZ3MgJiBLVk1fUElUX0ZMQUdTX0hQRVRfTEVHQUNZKSkgeworCQkJY3JlYXRlX3BpdF90aW1lcihwcywgdmFsLCAwKTsKKwkJfQogCQlicmVhazsKIAljYXNlIDI6CiAJY2FzZSAzOgotCQljcmVhdGVfcGl0X3RpbWVyKHBzLCB2YWwsIDEpOworCQlpZiAoIShwcy0+ZmxhZ3MgJiBLVk1fUElUX0ZMQUdTX0hQRVRfTEVHQUNZKSl7CisJCQljcmVhdGVfcGl0X3RpbWVyKHBzLCB2YWwsIDEpOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRlc3Ryb3lfcGl0X3RpbWVyKCZwcy0+cGl0X3RpbWVyKTsKIAl9CiB9CiAKLXZvaWQga3ZtX3BpdF9sb2FkX2NvdW50KHN0cnVjdCBrdm0gKmt2bSwgaW50IGNoYW5uZWwsIHUzMiB2YWwpCit2b2lkIGt2bV9waXRfbG9hZF9jb3VudChzdHJ1Y3Qga3ZtICprdm0sIGludCBjaGFubmVsLCB1MzIgdmFsLCBpbnQgaHBldF9sZWdhY3lfc3RhcnQpCiB7Ci0JbXV0ZXhfbG9jaygma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKLQlwaXRfbG9hZF9jb3VudChrdm0sIGNoYW5uZWwsIHZhbCk7Ci0JbXV0ZXhfdW5sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOworCXU4IHNhdmVkX21vZGU7CisJaWYgKGhwZXRfbGVnYWN5X3N0YXJ0KSB7CisJCS8qIHNhdmUgZXhpc3RpbmcgbW9kZSBmb3IgbGF0ZXIgcmVlbmFibGVtZW50ICovCisJCXNhdmVkX21vZGUgPSBrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmNoYW5uZWxzWzBdLm1vZGU7CisJCWt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUuY2hhbm5lbHNbMF0ubW9kZSA9IDB4ZmY7IC8qIGRpc2FibGUgdGltZXIgKi8KKwkJcGl0X2xvYWRfY291bnQoa3ZtLCBjaGFubmVsLCB2YWwpOworCQlrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmNoYW5uZWxzWzBdLm1vZGUgPSBzYXZlZF9tb2RlOworCX0gZWxzZSB7CisJCXBpdF9sb2FkX2NvdW50KGt2bSwgY2hhbm5lbCwgdmFsKTsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIHBpdF9pb3BvcnRfd3JpdGUoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCi0JCQkgICAgIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fcGl0ICpkZXZfdG9fcGl0KHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGt2bV9waXQgKnBpdCA9IChzdHJ1Y3Qga3ZtX3BpdCAqKXRoaXMtPnByaXZhdGU7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBrdm1fcGl0LCBkZXYpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fcGl0ICpzcGVha2VyX3RvX3BpdChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qga3ZtX3BpdCwgc3BlYWtlcl9kZXYpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwaXRfaW5fcmFuZ2UoZ3BhX3QgYWRkcikKK3sKKwlyZXR1cm4gKChhZGRyID49IEtWTV9QSVRfQkFTRV9BRERSRVNTKSAmJgorCQkoYWRkciA8IEtWTV9QSVRfQkFTRV9BRERSRVNTICsgS1ZNX1BJVF9NRU1fTEVOR1RIKSk7Cit9CisKK3N0YXRpYyBpbnQgcGl0X2lvcG9ydF93cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKKwkJCSAgICBncGFfdCBhZGRyLCBpbnQgbGVuLCBjb25zdCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBrdm1fcGl0ICpwaXQgPSBkZXZfdG9fcGl0KHRoaXMpOwogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcGl0X3N0YXRlID0gJnBpdC0+cGl0X3N0YXRlOwogCXN0cnVjdCBrdm0gKmt2bSA9IHBpdC0+a3ZtOwogCWludCBjaGFubmVsLCBhY2Nlc3M7CiAJc3RydWN0IGt2bV9rcGl0X2NoYW5uZWxfc3RhdGUgKnM7CiAJdTMyIHZhbCA9ICoodTMyICopIGRhdGE7CisJaWYgKCFwaXRfaW5fcmFuZ2UoYWRkcikpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXZhbCAgJj0gMHhmZjsKIAlhZGRyICY9IEtWTV9QSVRfQ0hBTk5FTF9NQVNLOwpAQCAtNDIxLDE2ICs0NTAsMTkgQEAKIAl9CiAKIAltdXRleF91bmxvY2soJnBpdF9zdGF0ZS0+bG9jayk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBpdF9pb3BvcnRfcmVhZChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKLQkJCSAgICBncGFfdCBhZGRyLCBpbnQgbGVuLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBwaXRfaW9wb3J0X3JlYWQoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCisJCQkgICBncGFfdCBhZGRyLCBpbnQgbGVuLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBrdm1fcGl0ICpwaXQgPSAoc3RydWN0IGt2bV9waXQgKil0aGlzLT5wcml2YXRlOworCXN0cnVjdCBrdm1fcGl0ICpwaXQgPSBkZXZfdG9fcGl0KHRoaXMpOwogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcGl0X3N0YXRlID0gJnBpdC0+cGl0X3N0YXRlOwogCXN0cnVjdCBrdm0gKmt2bSA9IHBpdC0+a3ZtOwogCWludCByZXQsIGNvdW50OwogCXN0cnVjdCBrdm1fa3BpdF9jaGFubmVsX3N0YXRlICpzOworCWlmICghcGl0X2luX3JhbmdlKGFkZHIpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlhZGRyICY9IEtWTV9QSVRfQ0hBTk5FTF9NQVNLOwogCXMgPSAmcGl0X3N0YXRlLT5jaGFubmVsc1thZGRyXTsKQEAgLTQ4NSwzNyArNTE3LDM2IEBACiAJbWVtY3B5KGRhdGEsIChjaGFyICopJnJldCwgbGVuKTsKIAogCW11dGV4X3VubG9jaygmcGl0X3N0YXRlLT5sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwaXRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsCi0JCQlpbnQgbGVuLCBpbnQgaXNfd3JpdGUpCitzdGF0aWMgaW50IHNwZWFrZXJfaW9wb3J0X3dyaXRlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAorCQkJCWdwYV90IGFkZHIsIGludCBsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCiB7Ci0JcmV0dXJuICgoYWRkciA+PSBLVk1fUElUX0JBU0VfQUREUkVTUykgJiYKLQkJKGFkZHIgPCBLVk1fUElUX0JBU0VfQUREUkVTUyArIEtWTV9QSVRfTUVNX0xFTkdUSCkpOwotfQotCi1zdGF0aWMgdm9pZCBzcGVha2VyX2lvcG9ydF93cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKLQkJCQkgZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qga3ZtX3BpdCAqcGl0ID0gKHN0cnVjdCBrdm1fcGl0ICopdGhpcy0+cHJpdmF0ZTsKKwlzdHJ1Y3Qga3ZtX3BpdCAqcGl0ID0gc3BlYWtlcl90b19waXQodGhpcyk7CiAJc3RydWN0IGt2bV9rcGl0X3N0YXRlICpwaXRfc3RhdGUgPSAmcGl0LT5waXRfc3RhdGU7CiAJc3RydWN0IGt2bSAqa3ZtID0gcGl0LT5rdm07CiAJdTMyIHZhbCA9ICoodTMyICopIGRhdGE7CisJaWYgKGFkZHIgIT0gS1ZNX1NQRUFLRVJfQkFTRV9BRERSRVNTKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAltdXRleF9sb2NrKCZwaXRfc3RhdGUtPmxvY2spOwogCXBpdF9zdGF0ZS0+c3BlYWtlcl9kYXRhX29uID0gKHZhbCA+PiAxKSAmIDE7CiAJcGl0X3NldF9nYXRlKGt2bSwgMiwgdmFsICYgMSk7CiAJbXV0ZXhfdW5sb2NrKCZwaXRfc3RhdGUtPmxvY2spOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzcGVha2VyX2lvcG9ydF9yZWFkKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAotCQkJCWdwYV90IGFkZHIsIGludCBsZW4sIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHNwZWFrZXJfaW9wb3J0X3JlYWQoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCisJCQkgICAgICAgZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3Qga3ZtX3BpdCAqcGl0ID0gKHN0cnVjdCBrdm1fcGl0ICopdGhpcy0+cHJpdmF0ZTsKKwlzdHJ1Y3Qga3ZtX3BpdCAqcGl0ID0gc3BlYWtlcl90b19waXQodGhpcyk7CiAJc3RydWN0IGt2bV9rcGl0X3N0YXRlICpwaXRfc3RhdGUgPSAmcGl0LT5waXRfc3RhdGU7CiAJc3RydWN0IGt2bSAqa3ZtID0gcGl0LT5rdm07CiAJdW5zaWduZWQgaW50IHJlZnJlc2hfY2xvY2s7CiAJaW50IHJldDsKKwlpZiAoYWRkciAhPSBLVk1fU1BFQUtFUl9CQVNFX0FERFJFU1MpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCS8qIFJlZnJlc2ggY2xvY2sgdG9nZ2xlcyBhdCBhYm91dCAxNXVzLiBXZSBhcHByb3hpbWF0ZSBhcyAyXjE0bnMuICovCiAJcmVmcmVzaF9jbG9jayA9ICgodW5zaWduZWQgaW50KWt0aW1lX3RvX25zKGt0aW1lX2dldCgpKSA+PiAxNCkgJiAxOwpAQCAtNTI3LDEyICs1NTgsNyBAQAogCQlsZW4gPSBzaXplb2YocmV0KTsKIAltZW1jcHkoZGF0YSwgKGNoYXIgKikmcmV0LCBsZW4pOwogCW11dGV4X3VubG9jaygmcGl0X3N0YXRlLT5sb2NrKTsKLX0KLQotc3RhdGljIGludCBzcGVha2VyX2luX3JhbmdlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyLAotCQkJICAgIGludCBsZW4sIGludCBpc193cml0ZSkKLXsKLQlyZXR1cm4gKGFkZHIgPT0gS1ZNX1NQRUFLRVJfQkFTRV9BRERSRVNTKTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBrdm1fcGl0X3Jlc2V0KHN0cnVjdCBrdm1fcGl0ICpwaXQpCkBAIC01NDEsNiArNTY3LDcgQEAKIAlzdHJ1Y3Qga3ZtX2twaXRfY2hhbm5lbF9zdGF0ZSAqYzsKIAogCW11dGV4X2xvY2soJnBpdC0+cGl0X3N0YXRlLmxvY2spOworCXBpdC0+cGl0X3N0YXRlLmZsYWdzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAJCWMgPSAmcGl0LT5waXRfc3RhdGUuY2hhbm5lbHNbaV07CiAJCWMtPm1vZGUgPSAweGZmOwpAQCAtNTYzLDEwICs1OTAsMjIgQEAKIAl9CiB9CiAKLXN0cnVjdCBrdm1fcGl0ICprdm1fY3JlYXRlX3BpdChzdHJ1Y3Qga3ZtICprdm0pCitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pb19kZXZpY2Vfb3BzIHBpdF9kZXZfb3BzID0geworCS5yZWFkICAgICA9IHBpdF9pb3BvcnRfcmVhZCwKKwkud3JpdGUgICAgPSBwaXRfaW9wb3J0X3dyaXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1faW9fZGV2aWNlX29wcyBzcGVha2VyX2Rldl9vcHMgPSB7CisJLnJlYWQgICAgID0gc3BlYWtlcl9pb3BvcnRfcmVhZCwKKwkud3JpdGUgICAgPSBzcGVha2VyX2lvcG9ydF93cml0ZSwKK307CisKKy8qIENhbGxlciBtdXN0IGhhdmUgd3JpdGVycyBsb2NrIG9uIHNsb3RzX2xvY2sgKi8KK3N0cnVjdCBrdm1fcGl0ICprdm1fY3JlYXRlX3BpdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBmbGFncykKIHsKIAlzdHJ1Y3Qga3ZtX3BpdCAqcGl0OwogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcGl0X3N0YXRlOworCWludCByZXQ7CiAKIAlwaXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX3BpdCksIEdGUF9LRVJORUwpOwogCWlmICghcGl0KQpAQCAtNTgyLDE5ICs2MjEsNiBAQAogCW11dGV4X2xvY2soJnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZwaXQtPnBpdF9zdGF0ZS5pbmplY3RfbG9jayk7CiAKLQkvKiBJbml0aWFsaXplIFBJTyBkZXZpY2UgKi8KLQlwaXQtPmRldi5yZWFkID0gcGl0X2lvcG9ydF9yZWFkOwotCXBpdC0+ZGV2LndyaXRlID0gcGl0X2lvcG9ydF93cml0ZTsKLQlwaXQtPmRldi5pbl9yYW5nZSA9IHBpdF9pbl9yYW5nZTsKLQlwaXQtPmRldi5wcml2YXRlID0gcGl0OwotCWt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KCZrdm0tPnBpb19idXMsICZwaXQtPmRldik7Ci0KLQlwaXQtPnNwZWFrZXJfZGV2LnJlYWQgPSBzcGVha2VyX2lvcG9ydF9yZWFkOwotCXBpdC0+c3BlYWtlcl9kZXYud3JpdGUgPSBzcGVha2VyX2lvcG9ydF93cml0ZTsKLQlwaXQtPnNwZWFrZXJfZGV2LmluX3JhbmdlID0gc3BlYWtlcl9pbl9yYW5nZTsKLQlwaXQtPnNwZWFrZXJfZGV2LnByaXZhdGUgPSBwaXQ7Ci0Ja3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoJmt2bS0+cGlvX2J1cywgJnBpdC0+c3BlYWtlcl9kZXYpOwotCiAJa3ZtLT5hcmNoLnZwaXQgPSBwaXQ7CiAJcGl0LT5rdm0gPSBrdm07CiAKQEAgLTYxMyw3ICs2MzksMzAgQEAKIAlwaXQtPm1hc2tfbm90aWZpZXIuZnVuYyA9IHBpdF9tYXNrX25vdGlmZXI7CiAJa3ZtX3JlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKGt2bSwgMCwgJnBpdC0+bWFza19ub3RpZmllcik7CiAKKwlrdm1faW9kZXZpY2VfaW5pdCgmcGl0LT5kZXYsICZwaXRfZGV2X29wcyk7CisJcmV0ID0gX19rdm1faW9fYnVzX3JlZ2lzdGVyX2Rldigma3ZtLT5waW9fYnVzLCAmcGl0LT5kZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlpZiAoZmxhZ3MgJiBLVk1fUElUX1NQRUFLRVJfRFVNTVkpIHsKKwkJa3ZtX2lvZGV2aWNlX2luaXQoJnBpdC0+c3BlYWtlcl9kZXYsICZzcGVha2VyX2Rldl9vcHMpOworCQlyZXQgPSBfX2t2bV9pb19idXNfcmVnaXN0ZXJfZGV2KCZrdm0tPnBpb19idXMsCisJCQkJCQkmcGl0LT5zcGVha2VyX2Rldik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsX3VucmVnaXN0ZXI7CisJfQorCiAJcmV0dXJuIHBpdDsKKworZmFpbF91bnJlZ2lzdGVyOgorCV9fa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldigma3ZtLT5waW9fYnVzLCAmcGl0LT5kZXYpOworCitmYWlsOgorCWlmIChwaXQtPmlycV9zb3VyY2VfaWQgPj0gMCkKKwkJa3ZtX2ZyZWVfaXJxX3NvdXJjZV9pZChrdm0sIHBpdC0+aXJxX3NvdXJjZV9pZCk7CisKKwlrZnJlZShwaXQpOworCXJldHVybiBOVUxMOwogfQogCiB2b2lkIGt2bV9mcmVlX3BpdChzdHJ1Y3Qga3ZtICprdm0pCkBAIC02MjMsNiArNjcyLDggQEAKIAlpZiAoa3ZtLT5hcmNoLnZwaXQpIHsKIAkJa3ZtX3VucmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoa3ZtLCAwLAogCQkJCQkgICAgICAgJmt2bS0+YXJjaC52cGl0LT5tYXNrX25vdGlmaWVyKTsKKwkJa3ZtX3VucmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihrdm0sCisJCQkJJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUuaXJxX2Fja19ub3RpZmllcik7CiAJCW11dGV4X2xvY2soJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUubG9jayk7CiAJCXRpbWVyID0gJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUucGl0X3RpbWVyLnRpbWVyOwogCQlocnRpbWVyX2NhbmNlbCh0aW1lcik7CkBAIC02MzcsMTAgKzY4OCwxMCBAQAogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlpbnQgaTsKIAotCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJbXV0ZXhfbG9jaygma3ZtLT5pcnFfbG9jayk7CiAJa3ZtX3NldF9pcnEoa3ZtLCBrdm0tPmFyY2gudnBpdC0+aXJxX3NvdXJjZV9pZCwgMCwgMSk7CiAJa3ZtX3NldF9pcnEoa3ZtLCBrdm0tPmFyY2gudnBpdC0+aXJxX3NvdXJjZV9pZCwgMCwgMCk7Ci0JbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCW11dGV4X3VubG9jaygma3ZtLT5pcnFfbG9jayk7CiAKIAkvKgogCSAqIFByb3ZpZGVzIE5NSSB3YXRjaGRvZyBzdXBwb3J0IHZpYSBWaXJ0dWFsIFdpcmUgbW9kZS4KQEAgLTY1MiwxMSArNzAzLDggQEAKIAkgKiBWQ1BVMCwgYW5kIG9ubHkgaWYgaXRzIExWVDAgaXMgaW4gRVhUSU5UIG1vZGUuCiAJICovCiAJaWYgKGt2bS0+YXJjaC52YXBpY3NfaW5fbm1pX21vZGUgPiAwKQotCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKSB7Ci0JCQl2Y3B1ID0ga3ZtLT52Y3B1c1tpXTsKLQkJCWlmICh2Y3B1KQotCQkJCWt2bV9hcGljX25taV93ZF9kZWxpdmVyKHZjcHUpOwotCQl9CisJCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKKwkJCWt2bV9hcGljX25taV93ZF9kZWxpdmVyKHZjcHUpOwogfQogCiB2b2lkIGt2bV9pbmplY3RfcGl0X3RpbWVyX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNjY1LDcgKzcxMyw3IEBACiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0+a3ZtOwogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcHM7CiAKLQlpZiAodmNwdSAmJiBwaXQpIHsKKwlpZiAocGl0KSB7CiAJCWludCBpbmplY3QgPSAwOwogCQlwcyA9ICZwaXQtPnBpdF9zdGF0ZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmggYi9hcmNoL3g4Ni9rdm0vaTgyNTQuaAppbmRleCBiYmQ4NjNmLi5kNGMxYzdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuaAorKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuaApAQCAtMjEsNiArMjEsNyBAQAogCiBzdHJ1Y3Qga3ZtX2twaXRfc3RhdGUgewogCXN0cnVjdCBrdm1fa3BpdF9jaGFubmVsX3N0YXRlIGNoYW5uZWxzWzNdOworCXUzMiBmbGFnczsKIAlzdHJ1Y3Qga3ZtX3RpbWVyIHBpdF90aW1lcjsKIAlib29sIGlzX3BlcmlvZGljOwogCXUzMiAgICBzcGVha2VyX2RhdGFfb247CkBAIC00OSw4ICs1MCw4IEBACiAjZGVmaW5lIEtWTV9QSVRfQ0hBTk5FTF9NQVNLCSAgICAweDMKIAogdm9pZCBrdm1faW5qZWN0X3BpdF90aW1lcl9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci12b2lkIGt2bV9waXRfbG9hZF9jb3VudChzdHJ1Y3Qga3ZtICprdm0sIGludCBjaGFubmVsLCB1MzIgdmFsKTsKLXN0cnVjdCBrdm1fcGl0ICprdm1fY3JlYXRlX3BpdChzdHJ1Y3Qga3ZtICprdm0pOwordm9pZCBrdm1fcGl0X2xvYWRfY291bnQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgY2hhbm5lbCwgdTMyIHZhbCwgaW50IGhwZXRfbGVnYWN5X3N0YXJ0KTsKK3N0cnVjdCBrdm1fcGl0ICprdm1fY3JlYXRlX3BpdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBmbGFncyk7CiB2b2lkIGt2bV9mcmVlX3BpdChzdHJ1Y3Qga3ZtICprdm0pOwogdm9pZCBrdm1fcGl0X3Jlc2V0KHN0cnVjdCBrdm1fcGl0ICpwaXQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTkuYyBiL2FyY2gveDg2L2t2bS9pODI1OS5jCmluZGV4IDFjY2I1MGMuLjAxZjE1MTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1OS5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1OS5jCkBAIC0zMCw1MCArMzAsMjQgQEAKICNpbmNsdWRlICJpcnEuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+Ci0KLXN0YXRpYyB2b2lkIHBpY19sb2NrKHN0cnVjdCBrdm1fcGljICpzKQotCV9fYWNxdWlyZXMoJnMtPmxvY2spCi17Ci0Jc3Bpbl9sb2NrKCZzLT5sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgcGljX3VubG9jayhzdHJ1Y3Qga3ZtX3BpYyAqcykKLQlfX3JlbGVhc2VzKCZzLT5sb2NrKQotewotCXN0cnVjdCBrdm0gKmt2bSA9IHMtPmt2bTsKLQl1bnNpZ25lZCBhY2tzID0gcy0+cGVuZGluZ19hY2tzOwotCWJvb2wgd2FrZXVwID0gcy0+d2FrZXVwX25lZWRlZDsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0KLQlzLT5wZW5kaW5nX2Fja3MgPSAwOwotCXMtPndha2V1cF9uZWVkZWQgPSBmYWxzZTsKLQotCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKLQotCXdoaWxlIChhY2tzKSB7Ci0JCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgU0VMRUNUX1BJQyhfX2ZmcyhhY2tzKSksCi0JCQkJICAgICBfX2ZmcyhhY2tzKSk7Ci0JCWFja3MgJj0gYWNrcyAtIDE7Ci0JfQotCi0JaWYgKHdha2V1cCkgewotCQl2Y3B1ID0gcy0+a3ZtLT52Y3B1c1swXTsKLQkJaWYgKHZjcHUpCi0JCQlrdm1fdmNwdV9raWNrKHZjcHUpOwotCX0KLX0KKyNpbmNsdWRlICJ0cmFjZS5oIgogCiBzdGF0aWMgdm9pZCBwaWNfY2xlYXJfaXNyKHN0cnVjdCBrdm1fa3BpY19zdGF0ZSAqcywgaW50IGlycSkKIHsKIAlzLT5pc3IgJj0gfigxIDw8IGlycSk7CiAJcy0+aXNyX2FjayB8PSAoMSA8PCBpcnEpOworCWlmIChzICE9ICZzLT5waWNzX3N0YXRlLT5waWNzWzBdKQorCQlpcnEgKz0gODsKKwlrdm1fbm90aWZ5X2Fja2VkX2lycShzLT5waWNzX3N0YXRlLT5rdm0sIFNFTEVDVF9QSUMoaXJxKSwgaXJxKTsKIH0KIAogdm9pZCBrdm1fcGljX2NsZWFyX2lzcl9hY2soc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBrdm1fcGljICpzID0gcGljX2lycWNoaXAoa3ZtKTsKKwlzcGluX2xvY2soJnMtPmxvY2spOwogCXMtPnBpY3NbMF0uaXNyX2FjayA9IDB4ZmY7CiAJcy0+cGljc1sxXS5pc3JfYWNrID0gMHhmZjsKKwlzcGluX3VubG9jaygmcy0+bG9jayk7CiB9CiAKIC8qCkBAIC0xNzQsOSArMTQ4LDkgQEAKIAogdm9pZCBrdm1fcGljX3VwZGF0ZV9pcnEoc3RydWN0IGt2bV9waWMgKnMpCiB7Ci0JcGljX2xvY2socyk7CisJc3Bpbl9sb2NrKCZzLT5sb2NrKTsKIAlwaWNfdXBkYXRlX2lycShzKTsKLQlwaWNfdW5sb2NrKHMpOworCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKIH0KIAogaW50IGt2bV9waWNfc2V0X2lycSh2b2lkICpvcGFxdWUsIGludCBpcnEsIGludCBsZXZlbCkKQEAgLTE4NCwxMiArMTU4LDE0IEBACiAJc3RydWN0IGt2bV9waWMgKnMgPSBvcGFxdWU7CiAJaW50IHJldCA9IC0xOwogCi0JcGljX2xvY2socyk7CisJc3Bpbl9sb2NrKCZzLT5sb2NrKTsKIAlpZiAoaXJxID49IDAgJiYgaXJxIDwgUElDX05VTV9QSU5TKSB7CiAJCXJldCA9IHBpY19zZXRfaXJxMSgmcy0+cGljc1tpcnEgPj4gM10sIGlycSAmIDcsIGxldmVsKTsKIAkJcGljX3VwZGF0ZV9pcnEocyk7CisJCXRyYWNlX2t2bV9waWNfc2V0X2lycShpcnEgPj4gMywgaXJxICYgNywgcy0+cGljc1tpcnEgPj4gM10uZWxjciwKKwkJCQkgICAgICBzLT5waWNzW2lycSA+PiAzXS5pbXIsIHJldCA9PSAwKTsKIAl9Ci0JcGljX3VubG9jayhzKTsKKwlzcGluX3VubG9jaygmcy0+bG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjE3LDcgKzE5Myw3IEBACiAJaW50IGlycSwgaXJxMiwgaW50bm87CiAJc3RydWN0IGt2bV9waWMgKnMgPSBwaWNfaXJxY2hpcChrdm0pOwogCi0JcGljX2xvY2socyk7CisJc3Bpbl9sb2NrKCZzLT5sb2NrKTsKIAlpcnEgPSBwaWNfZ2V0X2lycSgmcy0+cGljc1swXSk7CiAJaWYgKGlycSA+PSAwKSB7CiAJCXBpY19pbnRhY2soJnMtPnBpY3NbMF0sIGlycSk7CkBAIC0yNDIsOCArMjE4LDcgQEAKIAkJaW50bm8gPSBzLT5waWNzWzBdLmlycV9iYXNlICsgaXJxOwogCX0KIAlwaWNfdXBkYXRlX2lycShzKTsKLQlwaWNfdW5sb2NrKHMpOwotCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgU0VMRUNUX1BJQyhpcnEpLCBpcnEpOworCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKIAogCXJldHVybiBpbnRubzsKIH0KQEAgLTI1Miw3ICsyMjcsNyBAQAogewogCWludCBpcnEsIGlycWJhc2UsIG47CiAJc3RydWN0IGt2bSAqa3ZtID0gcy0+cGljc19zdGF0ZS0+aXJxX3JlcXVlc3Rfb3BhcXVlOwotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTAgPSBrdm0tPnZjcHVzWzBdOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTAgPSBrdm0tPmJzcF92Y3B1OwogCiAJaWYgKHMgPT0gJnMtPnBpY3Nfc3RhdGUtPnBpY3NbMF0pCiAJCWlycWJhc2UgPSAwOwpAQCAtMjYzLDcgKzIzOCw3IEBACiAJCWlmICh2Y3B1MCAmJiBrdm1fYXBpY19hY2NlcHRfcGljX2ludHIodmNwdTApKQogCQkJaWYgKHMtPmlyciAmICgxIDw8IGlycSkgfHwgcy0+aXNyICYgKDEgPDwgaXJxKSkgewogCQkJCW4gPSBpcnEgKyBpcnFiYXNlOwotCQkJCXMtPnBpY3Nfc3RhdGUtPnBlbmRpbmdfYWNrcyB8PSAxIDw8IG47CisJCQkJa3ZtX25vdGlmeV9hY2tlZF9pcnEoa3ZtLCBTRUxFQ1RfUElDKG4pLCBuKTsKIAkJCX0KIAl9CiAJcy0+bGFzdF9pcnIgPSAwOwpAQCAtNDI4LDggKzQwMyw3IEBACiAJcmV0dXJuIHMtPmVsY3I7CiB9CiAKLXN0YXRpYyBpbnQgcGljZGV2X2luX3JhbmdlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyLAotCQkJICAgaW50IGxlbiwgaW50IGlzX3dyaXRlKQorc3RhdGljIGludCBwaWNkZXZfaW5fcmFuZ2UoZ3BhX3QgYWRkcikKIHsKIAlzd2l0Y2ggKGFkZHIpIHsKIAljYXNlIDB4MjA6CkBAIC00NDQsMTggKzQxOCwyNSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcGljZGV2X3dyaXRlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAorc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX3BpYyAqdG9fcGljKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBrdm1fcGljLCBkZXYpOworfQorCitzdGF0aWMgaW50IHBpY2Rldl93cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKIAkJCSBncGFfdCBhZGRyLCBpbnQgbGVuLCBjb25zdCB2b2lkICp2YWwpCiB7Ci0Jc3RydWN0IGt2bV9waWMgKnMgPSB0aGlzLT5wcml2YXRlOworCXN0cnVjdCBrdm1fcGljICpzID0gdG9fcGljKHRoaXMpOwogCXVuc2lnbmVkIGNoYXIgZGF0YSA9ICoodW5zaWduZWQgY2hhciAqKXZhbDsKKwlpZiAoIXBpY2Rldl9pbl9yYW5nZShhZGRyKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGxlbiAhPSAxKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9FUlIgIlBJQzogbm9uIGJ5dGUgd3JpdGVcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAwOwogCX0KLQlwaWNfbG9jayhzKTsKKwlzcGluX2xvY2soJnMtPmxvY2spOwogCXN3aXRjaCAoYWRkcikgewogCWNhc2UgMHgyMDoKIAljYXNlIDB4MjE6CkBAIC00NjgsMjEgKzQ0OSwyNCBAQAogCQllbGNyX2lvcG9ydF93cml0ZSgmcy0+cGljc1thZGRyICYgMV0sIGFkZHIsIGRhdGEpOwogCQlicmVhazsKIAl9Ci0JcGljX3VubG9jayhzKTsKKwlzcGluX3VubG9jaygmcy0+bG9jayk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBpY2Rldl9yZWFkKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAotCQkJZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZCAqdmFsKQorc3RhdGljIGludCBwaWNkZXZfcmVhZChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKKwkJICAgICAgIGdwYV90IGFkZHIsIGludCBsZW4sIHZvaWQgKnZhbCkKIHsKLQlzdHJ1Y3Qga3ZtX3BpYyAqcyA9IHRoaXMtPnByaXZhdGU7CisJc3RydWN0IGt2bV9waWMgKnMgPSB0b19waWModGhpcyk7CiAJdW5zaWduZWQgY2hhciBkYXRhID0gMDsKKwlpZiAoIXBpY2Rldl9pbl9yYW5nZShhZGRyKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGxlbiAhPSAxKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9FUlIgIlBJQzogbm9uIGJ5dGUgcmVhZFxuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJfQotCXBpY19sb2NrKHMpOworCXNwaW5fbG9jaygmcy0+bG9jayk7CiAJc3dpdGNoIChhZGRyKSB7CiAJY2FzZSAweDIwOgogCWNhc2UgMHgyMToKQEAgLTQ5Niw3ICs0ODAsOCBAQAogCQlicmVhazsKIAl9CiAJKih1bnNpZ25lZCBjaGFyICopdmFsID0gZGF0YTsKLQlwaWNfdW5sb2NrKHMpOworCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTUwNSwyMCArNDkwLDI3IEBACiBzdGF0aWMgdm9pZCBwaWNfaXJxX3JlcXVlc3Qodm9pZCAqb3BhcXVlLCBpbnQgbGV2ZWwpCiB7CiAJc3RydWN0IGt2bSAqa3ZtID0gb3BhcXVlOwotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bS0+dmNwdXNbMF07CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtLT5ic3BfdmNwdTsKIAlzdHJ1Y3Qga3ZtX3BpYyAqcyA9IHBpY19pcnFjaGlwKGt2bSk7CiAJaW50IGlycSA9IHBpY19nZXRfaXJxKCZzLT5waWNzWzBdKTsKIAogCXMtPm91dHB1dCA9IGxldmVsOwogCWlmICh2Y3B1ICYmIGxldmVsICYmIChzLT5waWNzWzBdLmlzcl9hY2sgJiAoMSA8PCBpcnEpKSkgewogCQlzLT5waWNzWzBdLmlzcl9hY2sgJj0gfigxIDw8IGlycSk7Ci0JCXMtPndha2V1cF9uZWVkZWQgPSB0cnVlOworCQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1faW9fZGV2aWNlX29wcyBwaWNkZXZfb3BzID0geworCS5yZWFkICAgICA9IHBpY2Rldl9yZWFkLAorCS53cml0ZSAgICA9IHBpY2Rldl93cml0ZSwKK307CisKIHN0cnVjdCBrdm1fcGljICprdm1fY3JlYXRlX3BpYyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGt2bV9waWMgKnM7CisJaW50IHJldDsKKwogCXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX3BpYyksIEdGUF9LRVJORUwpOwogCWlmICghcykKIAkJcmV0dXJuIE5VTEw7CkBAIC01MzQsMTAgKzUyNiwxMiBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBQSU8gZGV2aWNlCiAJICovCi0Jcy0+ZGV2LnJlYWQgPSBwaWNkZXZfcmVhZDsKLQlzLT5kZXYud3JpdGUgPSBwaWNkZXZfd3JpdGU7Ci0Jcy0+ZGV2LmluX3JhbmdlID0gcGljZGV2X2luX3JhbmdlOwotCXMtPmRldi5wcml2YXRlID0gczsKLQlrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldigma3ZtLT5waW9fYnVzLCAmcy0+ZGV2KTsKKwlrdm1faW9kZXZpY2VfaW5pdCgmcy0+ZGV2LCAmcGljZGV2X29wcyk7CisJcmV0ID0ga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoa3ZtLCAma3ZtLT5waW9fYnVzLCAmcy0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJcmV0dXJuIHM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaXJxLmggYi9hcmNoL3g4Ni9rdm0vaXJxLmgKaW5kZXggOWY1OTMxOC4uN2Q2MDU4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2lycS5oCisrKyBiL2FyY2gveDg2L2t2bS9pcnEuaApAQCAtNjMsNyArNjMsNiBAQAogCiBzdHJ1Y3Qga3ZtX3BpYyB7CiAJc3BpbmxvY2tfdCBsb2NrOwotCWJvb2wgd2FrZXVwX25lZWRlZDsKIAl1bnNpZ25lZCBwZW5kaW5nX2Fja3M7CiAJc3RydWN0IGt2bSAqa3ZtOwogCXN0cnVjdCBrdm1fa3BpY19zdGF0ZSBwaWNzWzJdOyAvKiAwIGlzIG1hc3RlciBwaWMsIDEgaXMgc2xhdmUgcGljICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2NhY2hlX3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCmluZGV4IDFmZjgxOWQuLjdiY2M1YjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCisrKyBiL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCkBAIC0yOSw0ICsyOSwxMyBAQAogCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUklQLCB2YWwpOwogfQogCitzdGF0aWMgaW5saW5lIHU2NCBrdm1fcGRwdHJfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBpbmRleCkKK3sKKwlpZiAoIXRlc3RfYml0KFZDUFVfRVhSRUdfUERQVFIsCisJCSAgICAgICh1bnNpZ25lZCBsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCkpCisJCWt2bV94ODZfb3BzLT5jYWNoZV9yZWcodmNwdSwgVkNQVV9FWFJFR19QRFBUUik7CisKKwlyZXR1cm4gdmNwdS0+YXJjaC5wZHB0cnNbaW5kZXhdOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fc3ZtLmggYi9hcmNoL3g4Ni9rdm0va3ZtX3N2bS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDY2ZTRjLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2t2bS9rdm1fc3ZtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0jaWZuZGVmIF9fS1ZNX1NWTV9ICi0jZGVmaW5lIF9fS1ZNX1NWTV9ICi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgotI2luY2x1ZGUgPGFzbS9tc3IuaD4KLQotI2luY2x1ZGUgPGFzbS9zdm0uaD4KLQotc3RhdGljIGNvbnN0IHUzMiBob3N0X3NhdmVfdXNlcl9tc3JzW10gPSB7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCU1TUl9TVEFSLCBNU1JfTFNUQVIsIE1TUl9DU1RBUiwgTVNSX1NZU0NBTExfTUFTSywgTVNSX0tFUk5FTF9HU19CQVNFLAotCU1TUl9GU19CQVNFLAotI2VuZGlmCi0JTVNSX0lBMzJfU1lTRU5URVJfQ1MsIE1TUl9JQTMyX1NZU0VOVEVSX0VTUCwgTVNSX0lBMzJfU1lTRU5URVJfRUlQLAotfTsKLQotI2RlZmluZSBOUl9IT1NUX1NBVkVfVVNFUl9NU1JTIEFSUkFZX1NJWkUoaG9zdF9zYXZlX3VzZXJfbXNycykKLQotc3RydWN0IGt2bV92Y3B1OwotCi1zdHJ1Y3QgdmNwdV9zdm0gewotCXN0cnVjdCBrdm1fdmNwdSB2Y3B1OwotCXN0cnVjdCB2bWNiICp2bWNiOwotCXVuc2lnbmVkIGxvbmcgdm1jYl9wYTsKLQlzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzdm1fZGF0YTsKLQl1aW50NjRfdCBhc2lkX2dlbmVyYXRpb247Ci0KLQl1NjQgbmV4dF9yaXA7Ci0KLQl1NjQgaG9zdF91c2VyX21zcnNbTlJfSE9TVF9TQVZFX1VTRVJfTVNSU107Ci0JdTY0IGhvc3RfZ3NfYmFzZTsKLQl1bnNpZ25lZCBsb25nIGhvc3RfY3IyOwotCi0JdTMyICptc3JwbTsKLQlzdHJ1Y3Qgdm1jYiAqaHNhdmU7Ci0JdTY0IGhzYXZlX21zcjsKLQotCXU2NCBuZXN0ZWRfdm1jYjsKLQotCS8qIFRoZXNlIGFyZSB0aGUgbWVyZ2VkIHZlY3RvcnMgKi8KLQl1MzIgKm5lc3RlZF9tc3JwbTsKLQotCS8qIGdwYSBwb2ludGVycyB0byB0aGUgcmVhbCB2ZWN0b3JzICovCi0JdTY0IG5lc3RlZF92bWNiX21zcnBtOwotfTsKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fdGltZXIuaCBiL2FyY2gveDg2L2t2bS9rdm1fdGltZXIuaAppbmRleCAyNmJkNmJhLi41NWM3NTI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX3RpbWVyLmgKKysrIGIvYXJjaC94ODYva3ZtL2t2bV90aW1lci5oCkBAIC02LDcgKzYsNyBAQAogCWJvb2wgcmVpbmplY3Q7CiAJc3RydWN0IGt2bV90aW1lcl9vcHMgKnRfb3BzOwogCXN0cnVjdCBrdm0gKmt2bTsKLQlpbnQgdmNwdV9pZDsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiB9OwogCiBzdHJ1Y3Qga3ZtX3RpbWVyX29wcyB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCmluZGV4IGFlOTlkODMuLjFhZTVjZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9sYXBpYy5jCisrKyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCkBAIC0zMiw4ICszMiwxMSBAQAogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KICNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgogI2luY2x1ZGUgImlycS5oIgorI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAieDg2LmgiCiAKICNpZm5kZWYgQ09ORklHX1g4Nl82NAogI2RlZmluZSBtb2RfNjQoeCwgeSkgKCh4KSAtICh5KSAqIGRpdjY0X3U2NCh4LCB5KSkKQEAgLTE0MSw2ICsxNDQsMjYgQEAKIAlyZXR1cm4gKGx2dF92YWwgJiAoQVBJQ19NT0RFX01BU0sgfCBBUElDX0xWVF9NQVNLRUQpKSA9PSBBUElDX0RNX05NSTsKIH0KIAordm9pZCBrdm1fYXBpY19zZXRfdmVyc2lvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9sYXBpYyAqYXBpYyA9IHZjcHUtPmFyY2guYXBpYzsKKwlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZmVhdDsKKwl1MzIgdiA9IEFQSUNfVkVSU0lPTjsKKworCWlmICghaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSkKKwkJcmV0dXJuOworCisJZmVhdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KGFwaWMtPnZjcHUsIDB4MSwgMCk7CisJaWYgKGZlYXQgJiYgKGZlYXQtPmVjeCAmICgxIDw8IChYODZfRkVBVFVSRV9YMkFQSUMgJiAzMSkpKSkKKwkJdiB8PSBBUElDX0xWUl9ESVJFQ1RFRF9FT0k7CisJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfTFZSLCB2KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXBpY194MmFwaWNfbW9kZShzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQoreworCXJldHVybiBhcGljLT52Y3B1LT5hcmNoLmFwaWNfYmFzZSAmIFgyQVBJQ19FTkFCTEU7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXBpY19sdnRfbWFza1tBUElDX0xWVF9OVU1dID0gewogCUxWVF9NQVNLIHwgQVBJQ19MVlRfVElNRVJfUEVSSU9ESUMsCS8qIExWVFQgKi8KIAlMVlRfTUFTSyB8IEFQSUNfTU9ERV9NQVNLLAkvKiBMVlRUSE1SICovCkBAIC0xNjUsMzYgKzE4OCw1MiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhcGljX3Rlc3RfYW5kX3NldF9pcnIoaW50IHZlYywgc3RydWN0IGt2bV9sYXBpYyAqYXBpYykKIHsKKwlhcGljLT5pcnJfcGVuZGluZyA9IHRydWU7CiAJcmV0dXJuIGFwaWNfdGVzdF9hbmRfc2V0X3ZlY3Rvcih2ZWMsIGFwaWMtPnJlZ3MgKyBBUElDX0lSUik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2NsZWFyX2lycihpbnQgdmVjLCBzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQorc3RhdGljIGlubGluZSBpbnQgYXBpY19zZWFyY2hfaXJyKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMpCiB7Ci0JYXBpY19jbGVhcl92ZWN0b3IodmVjLCBhcGljLT5yZWdzICsgQVBJQ19JUlIpOworCXJldHVybiBmaW5kX2hpZ2hlc3RfdmVjdG9yKGFwaWMtPnJlZ3MgKyBBUElDX0lSUik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFwaWNfZmluZF9oaWdoZXN0X2lycihzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQogewogCWludCByZXN1bHQ7CiAKLQlyZXN1bHQgPSBmaW5kX2hpZ2hlc3RfdmVjdG9yKGFwaWMtPnJlZ3MgKyBBUElDX0lSUik7CisJaWYgKCFhcGljLT5pcnJfcGVuZGluZykKKwkJcmV0dXJuIC0xOworCisJcmVzdWx0ID0gYXBpY19zZWFyY2hfaXJyKGFwaWMpOwogCUFTU0VSVChyZXN1bHQgPT0gLTEgfHwgcmVzdWx0ID49IDE2KTsKIAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2NsZWFyX2lycihpbnQgdmVjLCBzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQoreworCWFwaWMtPmlycl9wZW5kaW5nID0gZmFsc2U7CisJYXBpY19jbGVhcl92ZWN0b3IodmVjLCBhcGljLT5yZWdzICsgQVBJQ19JUlIpOworCWlmIChhcGljX3NlYXJjaF9pcnIoYXBpYykgIT0gLTEpCisJCWFwaWMtPmlycl9wZW5kaW5nID0gdHJ1ZTsKK30KKwogaW50IGt2bV9sYXBpY19maW5kX2hpZ2hlc3RfaXJyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX2xhcGljICphcGljID0gdmNwdS0+YXJjaC5hcGljOwogCWludCBoaWdoZXN0X2lycjsKIAorCS8qIFRoaXMgbWF5IHJhY2Ugd2l0aCBzZXR0aW5nIG9mIGlyciBpbiBfX2FwaWNfYWNjZXB0X2lycSgpIGFuZAorCSAqIHZhbHVlIHJldHVybmVkIG1heSBiZSB3cm9uZywgYnV0IGt2bV92Y3B1X2tpY2soKSBpbiBfX2FwaWNfYWNjZXB0X2lycQorCSAqIHdpbGwgY2F1c2Ugdm1leGl0IGltbWVkaWF0ZWx5IGFuZCB0aGUgdmFsdWUgd2lsbCBiZSByZWNhbGN1bGF0ZWQKKwkgKiBvbiB0aGUgbmV4dCB2bWVudHJ5LgorCSAqLwogCWlmICghYXBpYykKIAkJcmV0dXJuIDA7CiAJaGlnaGVzdF9pcnIgPSBhcGljX2ZpbmRfaGlnaGVzdF9pcnIoYXBpYyk7CiAKIAlyZXR1cm4gaGlnaGVzdF9pcnI7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fbGFwaWNfZmluZF9oaWdoZXN0X2lycik7CiAKIHN0YXRpYyBpbnQgX19hcGljX2FjY2VwdF9pcnEoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsCiAJCQkgICAgIGludCB2ZWN0b3IsIGludCBsZXZlbCwgaW50IHRyaWdfbW9kZSk7CkBAIC0yNTEsNyArMjkwLDEyIEBACiBpbnQga3ZtX2FwaWNfbWF0Y2hfbG9naWNhbF9hZGRyKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIHU4IG1kYSkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKLQl1OCBsb2dpY2FsX2lkOworCXUzMiBsb2dpY2FsX2lkOworCisJaWYgKGFwaWNfeDJhcGljX21vZGUoYXBpYykpIHsKKwkJbG9naWNhbF9pZCA9IGFwaWNfZ2V0X3JlZyhhcGljLCBBUElDX0xEUik7CisJCXJldHVybiBsb2dpY2FsX2lkICYgbWRhOworCX0KIAogCWxvZ2ljYWxfaWQgPSBHRVRfQVBJQ19MT0dJQ0FMX0lEKGFwaWNfZ2V0X3JlZyhhcGljLCBBUElDX0xEUikpOwogCkBAIC0zMzEsNiArMzc1LDggQEAKIAkJCWJyZWFrOwogCiAJCXJlc3VsdCA9ICFhcGljX3Rlc3RfYW5kX3NldF9pcnIodmVjdG9yLCBhcGljKTsKKwkJdHJhY2Vfa3ZtX2FwaWNfYWNjZXB0X2lycSh2Y3B1LT52Y3B1X2lkLCBkZWxpdmVyeV9tb2RlLAorCQkJCQkgIHRyaWdfbW9kZSwgdmVjdG9yLCAhcmVzdWx0KTsKIAkJaWYgKCFyZXN1bHQpIHsKIAkJCWlmICh0cmlnX21vZGUpCiAJCQkJYXBpY19kZWJ1ZygibGV2ZWwgdHJpZyBtb2RlIHJlcGVhdGVkbHkgZm9yICIKQEAgLTQyNSw3ICs0NzEsMTEgQEAKIAkJdHJpZ2dlcl9tb2RlID0gSU9BUElDX0xFVkVMX1RSSUc7CiAJZWxzZQogCQl0cmlnZ2VyX21vZGUgPSBJT0FQSUNfRURHRV9UUklHOwotCWt2bV9pb2FwaWNfdXBkYXRlX2VvaShhcGljLT52Y3B1LT5rdm0sIHZlY3RvciwgdHJpZ2dlcl9tb2RlKTsKKwlpZiAoIShhcGljX2dldF9yZWcoYXBpYywgQVBJQ19TUElWKSAmIEFQSUNfU1BJVl9ESVJFQ1RFRF9FT0kpKSB7CisJCW11dGV4X2xvY2soJmFwaWMtPnZjcHUtPmt2bS0+aXJxX2xvY2spOworCQlrdm1faW9hcGljX3VwZGF0ZV9lb2koYXBpYy0+dmNwdS0+a3ZtLCB2ZWN0b3IsIHRyaWdnZXJfbW9kZSk7CisJCW11dGV4X3VubG9jaygmYXBpYy0+dmNwdS0+a3ZtLT5pcnFfbG9jayk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhcGljX3NlbmRfaXBpKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMpCkBAIC00NDAsNyArNDkwLDEyIEBACiAJaXJxLmxldmVsID0gaWNyX2xvdyAmIEFQSUNfSU5UX0FTU0VSVDsKIAlpcnEudHJpZ19tb2RlID0gaWNyX2xvdyAmIEFQSUNfSU5UX0xFVkVMVFJJRzsKIAlpcnEuc2hvcnRoYW5kID0gaWNyX2xvdyAmIEFQSUNfU0hPUlRfTUFTSzsKLQlpcnEuZGVzdF9pZCA9IEdFVF9BUElDX0RFU1RfRklFTEQoaWNyX2hpZ2gpOworCWlmIChhcGljX3gyYXBpY19tb2RlKGFwaWMpKQorCQlpcnEuZGVzdF9pZCA9IGljcl9oaWdoOworCWVsc2UKKwkJaXJxLmRlc3RfaWQgPSBHRVRfQVBJQ19ERVNUX0ZJRUxEKGljcl9oaWdoKTsKKworCXRyYWNlX2t2bV9hcGljX2lwaShpY3JfbG93LCBpcnEuZGVzdF9pZCk7CiAKIAlhcGljX2RlYnVnKCJpY3JfaGlnaCAweCV4LCBpY3JfbG93IDB4JXgsICIKIAkJICAgInNob3J0X2hhbmQgMHgleCwgZGVzdCAweCV4LCB0cmlnX21vZGUgMHgleCwgbGV2ZWwgMHgleCwgIgpAQCAtNDQ5LDcgKzUwNCw5IEBACiAJCSAgIGlycS50cmlnX21vZGUsIGlycS5sZXZlbCwgaXJxLmRlc3RfbW9kZSwgaXJxLmRlbGl2ZXJ5X21vZGUsCiAJCSAgIGlycS52ZWN0b3IpOwogCisJbXV0ZXhfbG9jaygmYXBpYy0+dmNwdS0+a3ZtLT5pcnFfbG9jayk7CiAJa3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGFwaWMtPnZjcHUtPmt2bSwgYXBpYywgJmlycSk7CisJbXV0ZXhfdW5sb2NrKCZhcGljLT52Y3B1LT5rdm0tPmlycV9sb2NrKTsKIH0KIAogc3RhdGljIHUzMiBhcGljX2dldF90bWNjdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQpAQCAtNDk1LDEyICs1NTIsMTYgQEAKIHsKIAl1MzIgdmFsID0gMDsKIAotCUtWTVRSQUNFXzFEKEFQSUNfQUNDRVNTLCBhcGljLT52Y3B1LCAodTMyKW9mZnNldCwgaGFuZGxlcik7Ci0KIAlpZiAob2Zmc2V0ID49IExBUElDX01NSU9fTEVOR1RIKQogCQlyZXR1cm4gMDsKIAogCXN3aXRjaCAob2Zmc2V0KSB7CisJY2FzZSBBUElDX0lEOgorCQlpZiAoYXBpY194MmFwaWNfbW9kZShhcGljKSkKKwkJCXZhbCA9IGt2bV9hcGljX2lkKGFwaWMpOworCQllbHNlCisJCQl2YWwgPSBrdm1fYXBpY19pZChhcGljKSA8PCAyNDsKKwkJYnJlYWs7CiAJY2FzZSBBUElDX0FSQlBSSToKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQWNjZXNzIEFQSUMgQVJCUFJJIHJlZ2lzdGVyICIKIAkJICAgICAgICJ3aGljaCBpcyBmb3IgUDZcbiIpOwpAQCAtNTIyLDIxICs1ODMsMzUgQEAKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgdm9pZCBhcGljX21taW9fcmVhZChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKLQkJCSAgIGdwYV90IGFkZHJlc3MsIGludCBsZW4sIHZvaWQgKmRhdGEpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fbGFwaWMgKnRvX2xhcGljKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGt2bV9sYXBpYyAqYXBpYyA9IChzdHJ1Y3Qga3ZtX2xhcGljICopdGhpcy0+cHJpdmF0ZTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gYWRkcmVzcyAtIGFwaWMtPmJhc2VfYWRkcmVzczsKKwlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGt2bV9sYXBpYywgZGV2KTsKK30KKworc3RhdGljIGludCBhcGljX3JlZ19yZWFkKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIHUzMiBvZmZzZXQsIGludCBsZW4sCisJCXZvaWQgKmRhdGEpCit7CiAJdW5zaWduZWQgY2hhciBhbGlnbm1lbnQgPSBvZmZzZXQgJiAweGY7CiAJdTMyIHJlc3VsdDsKKwkvKiB0aGlzIGJpdG1hc2sgaGFzIGEgYml0IGNsZWFyZWQgZm9yIGVhY2ggcmVzZXJ2ZXIgcmVnaXN0ZXIgKi8KKwlzdGF0aWMgY29uc3QgdTY0IHJtYXNrID0gMHg0M2ZmMDFmZmZmZmZlNzBjVUxMOwogCiAJaWYgKChhbGlnbm1lbnQgKyBsZW4pID4gNCkgewotCQlwcmludGsoS0VSTl9FUlIgIktWTV9BUElDX1JFQUQ6IGFsaWdubWVudCBlcnJvciAlbHggJWQiLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpYWRkcmVzcywgbGVuKTsKLQkJcmV0dXJuOworCQlhcGljX2RlYnVnKCJLVk1fQVBJQ19SRUFEOiBhbGlnbm1lbnQgZXJyb3IgJXggJWRcbiIsCisJCQkgICBvZmZzZXQsIGxlbik7CisJCXJldHVybiAxOwogCX0KKworCWlmIChvZmZzZXQgPiAweDNmMCB8fCAhKHJtYXNrICYgKDFVTEwgPDwgKG9mZnNldCA+PiA0KSkpKSB7CisJCWFwaWNfZGVidWcoIktWTV9BUElDX1JFQUQ6IHJlYWQgcmVzZXJ2ZWQgcmVnaXN0ZXIgJXhcbiIsCisJCQkgICBvZmZzZXQpOworCQlyZXR1cm4gMTsKKwl9CisKIAlyZXN1bHQgPSBfX2FwaWNfcmVhZChhcGljLCBvZmZzZXQgJiB+MHhmKTsKIAorCXRyYWNlX2t2bV9hcGljX3JlYWQob2Zmc2V0LCByZXN1bHQpOworCiAJc3dpdGNoIChsZW4pIHsKIAljYXNlIDE6CiAJY2FzZSAyOgpAQCAtNTQ4LDYgKzYyMywyOCBAQAogCQkgICAgICAgInNob3VsZCBiZSAxLDIsIG9yIDQgaW5zdGVhZFxuIiwgbGVuKTsKIAkJYnJlYWs7CiAJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwaWNfbW1pb19pbl9yYW5nZShzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBncGFfdCBhZGRyKQoreworCXJldHVybiBhcGljX2h3X2VuYWJsZWQoYXBpYykgJiYKKwkgICAgYWRkciA+PSBhcGljLT5iYXNlX2FkZHJlc3MgJiYKKwkgICAgYWRkciA8IGFwaWMtPmJhc2VfYWRkcmVzcyArIExBUElDX01NSU9fTEVOR1RIOworfQorCitzdGF0aWMgaW50IGFwaWNfbW1pb19yZWFkKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAorCQkJICAgZ3BhX3QgYWRkcmVzcywgaW50IGxlbiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qga3ZtX2xhcGljICphcGljID0gdG9fbGFwaWModGhpcyk7CisJdTMyIG9mZnNldCA9IGFkZHJlc3MgLSBhcGljLT5iYXNlX2FkZHJlc3M7CisKKwlpZiAoIWFwaWNfbW1pb19pbl9yYW5nZShhcGljLCBhZGRyZXNzKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJYXBpY19yZWdfcmVhZChhcGljLCBvZmZzZXQsIGxlbiwgZGF0YSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX2RpdmlkZV9jb3VudChzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQpAQCAtNTczLDYgKzY3MCwxNSBAQAogCiAJaWYgKCFhcGljLT5sYXBpY190aW1lci5wZXJpb2QpCiAJCXJldHVybjsKKwkvKgorCSAqIERvIG5vdCBhbGxvdyB0aGUgZ3Vlc3QgdG8gcHJvZ3JhbSBwZXJpb2RpYyB0aW1lcnMgd2l0aCBzbWFsbAorCSAqIGludGVydmFsLCBzaW5jZSB0aGUgaHJ0aW1lcnMgYXJlIG5vdCB0aHJvdHRsZWQgYnkgdGhlIGhvc3QKKwkgKiBzY2hlZHVsZXIuCisJICovCisJaWYgKGFwaWNfbHZ0dF9wZXJpb2QoYXBpYykpIHsKKwkJaWYgKGFwaWMtPmxhcGljX3RpbWVyLnBlcmlvZCA8IE5TRUNfUEVSX01TRUMvMikKKwkJCWFwaWMtPmxhcGljX3RpbWVyLnBlcmlvZCA9IE5TRUNfUEVSX01TRUMvMjsKKwl9CiAKIAlocnRpbWVyX3N0YXJ0KCZhcGljLT5sYXBpY190aW1lci50aW1lciwKIAkJICAgICAga3RpbWVfYWRkX25zKG5vdywgYXBpYy0+bGFwaWNfdGltZXIucGVyaW9kKSwKQEAgLTYwMyw0MCArNzA5LDE4IEBACiAJCWFwaWMtPnZjcHUtPmt2bS0+YXJjaC52YXBpY3NfaW5fbm1pX21vZGUtLTsKIH0KIAotc3RhdGljIHZvaWQgYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAotCQkJICAgIGdwYV90IGFkZHJlc3MsIGludCBsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGFwaWNfcmVnX3dyaXRlKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIHUzMiByZWcsIHUzMiB2YWwpCiB7Ci0Jc3RydWN0IGt2bV9sYXBpYyAqYXBpYyA9IChzdHJ1Y3Qga3ZtX2xhcGljICopdGhpcy0+cHJpdmF0ZTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gYWRkcmVzcyAtIGFwaWMtPmJhc2VfYWRkcmVzczsKLQl1bnNpZ25lZCBjaGFyIGFsaWdubWVudCA9IG9mZnNldCAmIDB4ZjsKLQl1MzIgdmFsOworCWludCByZXQgPSAwOwogCi0JLyoKLQkgKiBBUElDIHJlZ2lzdGVyIG11c3QgYmUgYWxpZ25lZCBvbiAxMjgtYml0cyBib3VuZGFyeS4KLQkgKiAzMi82NC8xMjggYml0cyByZWdpc3RlcnMgbXVzdCBiZSBhY2Nlc3NlZCB0aHJ1IDMyIGJpdHMuCi0JICogUmVmZXIgU0RNIDguNC4xCi0JICovCi0JaWYgKGxlbiAhPSA0IHx8IGFsaWdubWVudCkgewotCQkvKiBEb24ndCBzaG91dCBsb3VkLCAkaW5mYW1vdXNfb3Mgd291bGQgY2F1c2Ugb25seSBub2lzZS4gKi8KLQkJYXBpY19kZWJ1ZygiYXBpYyB3cml0ZTogYmFkIHNpemU9JWQgJWx4XG4iLAotCQkJICAgbGVuLCAobG9uZylhZGRyZXNzKTsKLQkJcmV0dXJuOwotCX0KKwl0cmFjZV9rdm1fYXBpY193cml0ZShyZWcsIHZhbCk7CiAKLQl2YWwgPSAqKHUzMiAqKSBkYXRhOwotCi0JLyogdG9vIGNvbW1vbiBwcmludGluZyAqLwotCWlmIChvZmZzZXQgIT0gQVBJQ19FT0kpCi0JCWFwaWNfZGVidWcoIiVzOiBvZmZzZXQgMHgleCB3aXRoIGxlbmd0aCAweCV4LCBhbmQgdmFsdWUgaXMgIgotCQkJICAgIjB4JXhcbiIsIF9fZnVuY19fLCBvZmZzZXQsIGxlbiwgdmFsKTsKLQotCW9mZnNldCAmPSAweGZmMDsKLQotCUtWTVRSQUNFXzFEKEFQSUNfQUNDRVNTLCBhcGljLT52Y3B1LCAodTMyKW9mZnNldCwgaGFuZGxlcik7Ci0KLQlzd2l0Y2ggKG9mZnNldCkgeworCXN3aXRjaCAocmVnKSB7CiAJY2FzZSBBUElDX0lEOgkJLyogTG9jYWwgQVBJQyBJRCAqLwotCQlhcGljX3NldF9yZWcoYXBpYywgQVBJQ19JRCwgdmFsKTsKKwkJaWYgKCFhcGljX3gyYXBpY19tb2RlKGFwaWMpKQorCQkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfSUQsIHZhbCk7CisJCWVsc2UKKwkJCXJldCA9IDE7CiAJCWJyZWFrOwogCiAJY2FzZSBBUElDX1RBU0tQUkk6CkBAIC02NDksMTUgKzczMywyNCBAQAogCQlicmVhazsKIAogCWNhc2UgQVBJQ19MRFI6Ci0JCWFwaWNfc2V0X3JlZyhhcGljLCBBUElDX0xEUiwgdmFsICYgQVBJQ19MRFJfTUFTSyk7CisJCWlmICghYXBpY194MmFwaWNfbW9kZShhcGljKSkKKwkJCWFwaWNfc2V0X3JlZyhhcGljLCBBUElDX0xEUiwgdmFsICYgQVBJQ19MRFJfTUFTSyk7CisJCWVsc2UKKwkJCXJldCA9IDE7CiAJCWJyZWFrOwogCiAJY2FzZSBBUElDX0RGUjoKLQkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfREZSLCB2YWwgfCAweDBGRkZGRkZGKTsKKwkJaWYgKCFhcGljX3gyYXBpY19tb2RlKGFwaWMpKQorCQkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfREZSLCB2YWwgfCAweDBGRkZGRkZGKTsKKwkJZWxzZQorCQkJcmV0ID0gMTsKIAkJYnJlYWs7CiAKLQljYXNlIEFQSUNfU1BJVjoKLQkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfU1BJViwgdmFsICYgMHgzZmYpOworCWNhc2UgQVBJQ19TUElWOiB7CisJCXUzMiBtYXNrID0gMHgzZmY7CisJCWlmIChhcGljX2dldF9yZWcoYXBpYywgQVBJQ19MVlIpICYgQVBJQ19MVlJfRElSRUNURURfRU9JKQorCQkJbWFzayB8PSBBUElDX1NQSVZfRElSRUNURURfRU9JOworCQlhcGljX3NldF9yZWcoYXBpYywgQVBJQ19TUElWLCB2YWwgJiBtYXNrKTsKIAkJaWYgKCEodmFsICYgQVBJQ19TUElWX0FQSUNfRU5BQkxFRCkpIHsKIAkJCWludCBpOwogCQkJdTMyIGx2dF92YWw7CkBAIC02NzIsNyArNzY1LDcgQEAKIAogCQl9CiAJCWJyZWFrOwotCisJfQogCWNhc2UgQVBJQ19JQ1I6CiAJCS8qIE5vIGRlbGF5IGhlcmUsIHNvIHdlIGFsd2F5cyBjbGVhciB0aGUgcGVuZGluZyBiaXQgKi8KIAkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfSUNSLCB2YWwgJiB+KDEgPDwgMTIpKTsKQEAgLTY4MCw3ICs3NzMsOSBAQAogCQlicmVhazsKIAogCWNhc2UgQVBJQ19JQ1IyOgotCQlhcGljX3NldF9yZWcoYXBpYywgQVBJQ19JQ1IyLCB2YWwgJiAweGZmMDAwMDAwKTsKKwkJaWYgKCFhcGljX3gyYXBpY19tb2RlKGFwaWMpKQorCQkJdmFsICY9IDB4ZmYwMDAwMDA7CisJCWFwaWNfc2V0X3JlZyhhcGljLCBBUElDX0lDUjIsIHZhbCk7CiAJCWJyZWFrOwogCiAJY2FzZSBBUElDX0xWVDA6CkBAIC02OTQsOCArNzg5LDggQEAKIAkJaWYgKCFhcGljX3N3X2VuYWJsZWQoYXBpYykpCiAJCQl2YWwgfD0gQVBJQ19MVlRfTUFTS0VEOwogCi0JCXZhbCAmPSBhcGljX2x2dF9tYXNrWyhvZmZzZXQgLSBBUElDX0xWVFQpID4+IDRdOwotCQlhcGljX3NldF9yZWcoYXBpYywgb2Zmc2V0LCB2YWwpOworCQl2YWwgJj0gYXBpY19sdnRfbWFza1socmVnIC0gQVBJQ19MVlRUKSA+PiA0XTsKKwkJYXBpY19zZXRfcmVnKGFwaWMsIHJlZywgdmFsKTsKIAogCQlicmVhazsKIApAQCAtNzAzLDcgKzc5OCw3IEBACiAJCWhydGltZXJfY2FuY2VsKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CiAJCWFwaWNfc2V0X3JlZyhhcGljLCBBUElDX1RNSUNULCB2YWwpOwogCQlzdGFydF9hcGljX3RpbWVyKGFwaWMpOwotCQlyZXR1cm47CisJCWJyZWFrOwogCiAJY2FzZSBBUElDX1REQ1I6CiAJCWlmICh2YWwgJiA0KQpAQCAtNzEyLDI3ICs4MDcsNTkgQEAKIAkJdXBkYXRlX2RpdmlkZV9jb3VudChhcGljKTsKIAkJYnJlYWs7CiAKKwljYXNlIEFQSUNfRVNSOgorCQlpZiAoYXBpY194MmFwaWNfbW9kZShhcGljKSAmJiB2YWwgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJLVk1fV1JJVEU6RVNSIG5vdCB6ZXJvICV4XG4iLCB2YWwpOworCQkJcmV0ID0gMTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQVBJQ19TRUxGX0lQSToKKwkJaWYgKGFwaWNfeDJhcGljX21vZGUoYXBpYykpIHsKKwkJCWFwaWNfcmVnX3dyaXRlKGFwaWMsIEFQSUNfSUNSLCAweDQwMDAwIHwgKHZhbCAmIDB4ZmYpKTsKKwkJfSBlbHNlCisJCQlyZXQgPSAxOworCQlicmVhazsKIAlkZWZhdWx0OgotCQlhcGljX2RlYnVnKCJMb2NhbCBBUElDIFdyaXRlIHRvIHJlYWQtb25seSByZWdpc3RlciAleFxuIiwKLQkJCSAgIG9mZnNldCk7CisJCXJldCA9IDE7CiAJCWJyZWFrOwogCX0KLQorCWlmIChyZXQpCisJCWFwaWNfZGVidWcoIkxvY2FsIEFQSUMgV3JpdGUgdG8gcmVhZC1vbmx5IHJlZ2lzdGVyICV4XG4iLCByZWcpOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYXBpY19tbWlvX3JhbmdlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyLAotCQkJICAgaW50IGxlbiwgaW50IHNpemUpCitzdGF0aWMgaW50IGFwaWNfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKKwkJCSAgICBncGFfdCBhZGRyZXNzLCBpbnQgbGVuLCBjb25zdCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBrdm1fbGFwaWMgKmFwaWMgPSAoc3RydWN0IGt2bV9sYXBpYyAqKXRoaXMtPnByaXZhdGU7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IGt2bV9sYXBpYyAqYXBpYyA9IHRvX2xhcGljKHRoaXMpOworCXVuc2lnbmVkIGludCBvZmZzZXQgPSBhZGRyZXNzIC0gYXBpYy0+YmFzZV9hZGRyZXNzOworCXUzMiB2YWw7CiAKKwlpZiAoIWFwaWNfbW1pb19pbl9yYW5nZShhcGljLCBhZGRyZXNzKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKGFwaWNfaHdfZW5hYmxlZChhcGljKSAmJgotCSAgICAoYWRkciA+PSBhcGljLT5iYXNlX2FkZHJlc3MpICYmCi0JICAgIChhZGRyIDwgKGFwaWMtPmJhc2VfYWRkcmVzcyArIExBUElDX01NSU9fTEVOR1RIKSkpCi0JCXJldCA9IDE7CisJLyoKKwkgKiBBUElDIHJlZ2lzdGVyIG11c3QgYmUgYWxpZ25lZCBvbiAxMjgtYml0cyBib3VuZGFyeS4KKwkgKiAzMi82NC8xMjggYml0cyByZWdpc3RlcnMgbXVzdCBiZSBhY2Nlc3NlZCB0aHJ1IDMyIGJpdHMuCisJICogUmVmZXIgU0RNIDguNC4xCisJICovCisJaWYgKGxlbiAhPSA0IHx8IChvZmZzZXQgJiAweGYpKSB7CisJCS8qIERvbid0IHNob3V0IGxvdWQsICRpbmZhbW91c19vcyB3b3VsZCBjYXVzZSBvbmx5IG5vaXNlLiAqLworCQlhcGljX2RlYnVnKCJhcGljIHdyaXRlOiBiYWQgc2l6ZT0lZCAlbHhcbiIsIGxlbiwgKGxvbmcpYWRkcmVzcyk7CisJCXJldHVybiAwOworCX0KIAotCXJldHVybiByZXQ7CisJdmFsID0gKih1MzIqKWRhdGE7CisKKwkvKiB0b28gY29tbW9uIHByaW50aW5nICovCisJaWYgKG9mZnNldCAhPSBBUElDX0VPSSkKKwkJYXBpY19kZWJ1ZygiJXM6IG9mZnNldCAweCV4IHdpdGggbGVuZ3RoIDB4JXgsIGFuZCB2YWx1ZSBpcyAiCisJCQkgICAiMHgleFxuIiwgX19mdW5jX18sIG9mZnNldCwgbGVuLCB2YWwpOworCisJYXBpY19yZWdfd3JpdGUoYXBpYywgb2Zmc2V0ICYgMHhmZjAsIHZhbCk7CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBrdm1fZnJlZV9sYXBpYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC03NjMsNyArODkwLDYgQEAKIAlhcGljX3NldF90cHIoYXBpYywgKChjcjggJiAweDBmKSA8PCA0KQogCQkgICAgIHwgKGFwaWNfZ2V0X3JlZyhhcGljLCBBUElDX1RBU0tQUkkpICYgNCkpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2xhcGljX3NldF90cHIpOwogCiB1NjQga3ZtX2xhcGljX2dldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewpAQCAtNzc2LDcgKzkwMiw2IEBACiAKIAlyZXR1cm4gKHRwciAmIDB4ZjApID4+IDQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fbGFwaWNfZ2V0X2NyOCk7CiAKIHZvaWQga3ZtX2xhcGljX3NldF9iYXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbHVlKQogewpAQCAtNzg3LDEwICs5MTIsMTYgQEAKIAkJdmNwdS0+YXJjaC5hcGljX2Jhc2UgPSB2YWx1ZTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoYXBpYy0+dmNwdS0+dmNwdV9pZCkKKworCWlmICgha3ZtX3ZjcHVfaXNfYnNwKGFwaWMtPnZjcHUpKQogCQl2YWx1ZSAmPSB+TVNSX0lBMzJfQVBJQ0JBU0VfQlNQOwogCiAJdmNwdS0+YXJjaC5hcGljX2Jhc2UgPSB2YWx1ZTsKKwlpZiAoYXBpY194MmFwaWNfbW9kZShhcGljKSkgeworCQl1MzIgaWQgPSBrdm1fYXBpY19pZChhcGljKTsKKwkJdTMyIGxkciA9ICgoaWQgJiB+MHhmKSA8PCAxNikgfCAoMSA8PCAoaWQgJiAweGYpKTsKKwkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfTERSLCBsZHIpOworCX0KIAlhcGljLT5iYXNlX2FkZHJlc3MgPSBhcGljLT52Y3B1LT5hcmNoLmFwaWNfYmFzZSAmCiAJCQkgICAgIE1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7CiAKQEAgLTgwMCwxMiArOTMxLDYgQEAKIAogfQogCi11NjQga3ZtX2xhcGljX2dldF9iYXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlyZXR1cm4gdmNwdS0+YXJjaC5hcGljX2Jhc2U7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fbGFwaWNfZ2V0X2Jhc2UpOwotCiB2b2lkIGt2bV9sYXBpY19yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV9sYXBpYyAqYXBpYzsKQEAgLTgyMSw3ICs5NDYsNyBAQAogCWhydGltZXJfY2FuY2VsKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CiAKIAlhcGljX3NldF9yZWcoYXBpYywgQVBJQ19JRCwgdmNwdS0+dmNwdV9pZCA8PCAyNCk7Ci0JYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfTFZSLCBBUElDX1ZFUlNJT04pOworCWt2bV9hcGljX3NldF92ZXJzaW9uKGFwaWMtPnZjcHUpOwogCiAJZm9yIChpID0gMDsgaSA8IEFQSUNfTFZUX05VTTsgaSsrKQogCQlhcGljX3NldF9yZWcoYXBpYywgQVBJQ19MVlRUICsgMHgxMCAqIGksIEFQSUNfTFZUX01BU0tFRCk7CkBAIC04NDIsOSArOTY3LDEwIEBACiAJCWFwaWNfc2V0X3JlZyhhcGljLCBBUElDX0lTUiArIDB4MTAgKiBpLCAwKTsKIAkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfVE1SICsgMHgxMCAqIGksIDApOwogCX0KKwlhcGljLT5pcnJfcGVuZGluZyA9IGZhbHNlOwogCXVwZGF0ZV9kaXZpZGVfY291bnQoYXBpYyk7CiAJYXRvbWljX3NldCgmYXBpYy0+bGFwaWNfdGltZXIucGVuZGluZywgMCk7Ci0JaWYgKHZjcHUtPnZjcHVfaWQgPT0gMCkKKwlpZiAoa3ZtX3ZjcHVfaXNfYnNwKHZjcHUpKQogCQl2Y3B1LT5hcmNoLmFwaWNfYmFzZSB8PSBNU1JfSUEzMl9BUElDQkFTRV9CU1A7CiAJYXBpY191cGRhdGVfcHByKGFwaWMpOwogCkBAIC04NTUsNyArOTgxLDYgQEAKIAkJICAgdmNwdSwga3ZtX2FwaWNfaWQoYXBpYyksCiAJCSAgIHZjcHUtPmFyY2guYXBpY19iYXNlLCBhcGljLT5iYXNlX2FkZHJlc3MpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2xhcGljX3Jlc2V0KTsKIAogYm9vbCBrdm1fYXBpY19wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKQEAgLTg2Niw3ICs5OTEsNiBAQAogewogCXJldHVybiBrdm1fYXBpY19wcmVzZW50KHZjcHUpICYmIGFwaWNfc3dfZW5hYmxlZCh2Y3B1LT5hcmNoLmFwaWMpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2xhcGljX2VuYWJsZWQpOwogCiAvKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05MTcsNiArMTA0MSwxMSBAQAogCS5pc19wZXJpb2RpYyA9IGxhcGljX2lzX3BlcmlvZGljLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1faW9fZGV2aWNlX29wcyBhcGljX21taW9fb3BzID0geworCS5yZWFkICAgICA9IGFwaWNfbW1pb19yZWFkLAorCS53cml0ZSAgICA9IGFwaWNfbW1pb193cml0ZSwKK307CisKIGludCBrdm1fY3JlYXRlX2xhcGljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX2xhcGljICphcGljOwpAQCAtOTQ1LDE2ICsxMDc0LDEzIEBACiAJYXBpYy0+bGFwaWNfdGltZXIudGltZXIuZnVuY3Rpb24gPSBrdm1fdGltZXJfZm47CiAJYXBpYy0+bGFwaWNfdGltZXIudF9vcHMgPSAmbGFwaWNfdGltZXJfb3BzOwogCWFwaWMtPmxhcGljX3RpbWVyLmt2bSA9IHZjcHUtPmt2bTsKLQlhcGljLT5sYXBpY190aW1lci52Y3B1X2lkID0gdmNwdS0+dmNwdV9pZDsKKwlhcGljLT5sYXBpY190aW1lci52Y3B1ID0gdmNwdTsKIAogCWFwaWMtPmJhc2VfYWRkcmVzcyA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7CiAJdmNwdS0+YXJjaC5hcGljX2Jhc2UgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOwogCiAJa3ZtX2xhcGljX3Jlc2V0KHZjcHUpOwotCWFwaWMtPmRldi5yZWFkID0gYXBpY19tbWlvX3JlYWQ7Ci0JYXBpYy0+ZGV2LndyaXRlID0gYXBpY19tbWlvX3dyaXRlOwotCWFwaWMtPmRldi5pbl9yYW5nZSA9IGFwaWNfbW1pb19yYW5nZTsKLQlhcGljLT5kZXYucHJpdmF0ZSA9IGFwaWM7CisJa3ZtX2lvZGV2aWNlX2luaXQoJmFwaWMtPmRldiwgJmFwaWNfbW1pb19vcHMpOwogCiAJcmV0dXJuIDA7CiBub21lbV9mcmVlX2FwaWM6CkBAIC05NjIsNyArMTA4OCw2IEBACiBub21lbToKIAlyZXR1cm4gLUVOT01FTTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9jcmVhdGVfbGFwaWMpOwogCiBpbnQga3ZtX2FwaWNfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CkBAIC05ODUsNyArMTExMCw3IEBACiAJdTMyIGx2dDAgPSBhcGljX2dldF9yZWcodmNwdS0+YXJjaC5hcGljLCBBUElDX0xWVDApOwogCWludCByID0gMDsKIAotCWlmICh2Y3B1LT52Y3B1X2lkID09IDApIHsKKwlpZiAoa3ZtX3ZjcHVfaXNfYnNwKHZjcHUpKSB7CiAJCWlmICghYXBpY19od19lbmFibGVkKHZjcHUtPmFyY2guYXBpYykpCiAJCQlyID0gMTsKIAkJaWYgKChsdnQwICYgQVBJQ19MVlRfTUFTS0VEKSA9PSAwICYmCkBAIC0xMDI1LDcgKzExNTAsOCBAQAogCiAJYXBpYy0+YmFzZV9hZGRyZXNzID0gdmNwdS0+YXJjaC5hcGljX2Jhc2UgJgogCQkJICAgICBNU1JfSUEzMl9BUElDQkFTRV9CQVNFOwotCWFwaWNfc2V0X3JlZyhhcGljLCBBUElDX0xWUiwgQVBJQ19WRVJTSU9OKTsKKwlrdm1fYXBpY19zZXRfdmVyc2lvbih2Y3B1KTsKKwogCWFwaWNfdXBkYXRlX3BwcihhcGljKTsKIAlocnRpbWVyX2NhbmNlbCgmYXBpYy0+bGFwaWNfdGltZXIudGltZXIpOwogCXVwZGF0ZV9kaXZpZGVfY291bnQoYXBpYyk7CkBAIC0xMDkyLDMgKzEyMTgsMzUgQEAKIAogCXZjcHUtPmFyY2guYXBpYy0+dmFwaWNfYWRkciA9IHZhcGljX2FkZHI7CiB9CisKK2ludCBrdm1feDJhcGljX21zcl93cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhKQoreworCXN0cnVjdCBrdm1fbGFwaWMgKmFwaWMgPSB2Y3B1LT5hcmNoLmFwaWM7CisJdTMyIHJlZyA9IChtc3IgLSBBUElDX0JBU0VfTVNSKSA8PCA0OworCisJaWYgKCFpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LT5rdm0pIHx8ICFhcGljX3gyYXBpY19tb2RlKGFwaWMpKQorCQlyZXR1cm4gMTsKKworCS8qIGlmIHRoaXMgaXMgSUNSIHdyaXRlIHZlY3RvciBiZWZvcmUgY29tbWFuZCAqLworCWlmIChtc3IgPT0gMHg4MzApCisJCWFwaWNfcmVnX3dyaXRlKGFwaWMsIEFQSUNfSUNSMiwgKHUzMikoZGF0YSA+PiAzMikpOworCXJldHVybiBhcGljX3JlZ193cml0ZShhcGljLCByZWcsICh1MzIpZGF0YSk7Cit9CisKK2ludCBrdm1feDJhcGljX21zcl9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpkYXRhKQoreworCXN0cnVjdCBrdm1fbGFwaWMgKmFwaWMgPSB2Y3B1LT5hcmNoLmFwaWM7CisJdTMyIHJlZyA9IChtc3IgLSBBUElDX0JBU0VfTVNSKSA8PCA0LCBsb3csIGhpZ2ggPSAwOworCisJaWYgKCFpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LT5rdm0pIHx8ICFhcGljX3gyYXBpY19tb2RlKGFwaWMpKQorCQlyZXR1cm4gMTsKKworCWlmIChhcGljX3JlZ19yZWFkKGFwaWMsIHJlZywgNCwgJmxvdykpCisJCXJldHVybiAxOworCWlmIChtc3IgPT0gMHg4MzApCisJCWFwaWNfcmVnX3JlYWQoYXBpYywgQVBJQ19JQ1IyLCA0LCAmaGlnaCk7CisKKwkqZGF0YSA9ICgoKHU2NCloaWdoKSA8PCAzMikgfCBsb3c7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5oIGIvYXJjaC94ODYva3ZtL2xhcGljLmgKaW5kZXggYTU4N2Y4My4uNDAwMTBiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmgKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmgKQEAgLTEyLDYgKzEyLDcgQEAKIAlzdHJ1Y3Qga3ZtX3RpbWVyIGxhcGljX3RpbWVyOwogCXUzMiBkaXZpZGVfY291bnQ7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCWJvb2wgaXJyX3BlbmRpbmc7CiAJc3RydWN0IHBhZ2UgKnJlZ3NfcGFnZTsKIAl2b2lkICpyZWdzOwogCWdwYV90IHZhcGljX2FkZHI7CkBAIC0yOCw2ICsyOSw3IEBACiB2b2lkIGt2bV9sYXBpY19zZXRfdHByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpOwogdm9pZCBrdm1fbGFwaWNfc2V0X2Jhc2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsdWUpOwogdTY0IGt2bV9sYXBpY19nZXRfYmFzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwordm9pZCBrdm1fYXBpY19zZXRfdmVyc2lvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBpbnQga3ZtX2FwaWNfbWF0Y2hfcGh5c2ljYWxfYWRkcihzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCB1MTYgZGVzdCk7CiBpbnQga3ZtX2FwaWNfbWF0Y2hfbG9naWNhbF9hZGRyKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIHU4IG1kYSk7CkBAIC00NCw0ICs0Niw2IEBACiB2b2lkIGt2bV9sYXBpY19zeW5jX2Zyb21fdmFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX2xhcGljX3N5bmNfdG9fdmFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAoraW50IGt2bV94MmFwaWNfbXNyX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEpOworaW50IGt2bV94MmFwaWNfbXNyX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKmRhdGEpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11LmMKaW5kZXggMGVmNWJiMi4uZWNhNDFhZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS5jCisrKyBiL2FyY2gveDg2L2t2bS9tbXUuYwpAQCAtMTgsNiArMTgsNyBAQAogICovCiAKICNpbmNsdWRlICJtbXUuaCIKKyNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMTA3LDYgKzEwOCw5IEBACiAKICNkZWZpbmUgUFQzMl9MRVZFTF9NQVNLKGxldmVsKSBcCiAJCSgoKDFVTEwgPDwgUFQzMl9MRVZFTF9CSVRTKSAtIDEpIDw8IFBUMzJfTEVWRUxfU0hJRlQobGV2ZWwpKQorI2RlZmluZSBQVDMyX0xWTF9PRkZTRVRfTUFTSyhsZXZlbCkgXAorCShQVDMyX0JBU0VfQUREUl9NQVNLICYgKCgxVUxMIDw8IChQQUdFX1NISUZUICsgKCgobGV2ZWwpIC0gMSkgXAorCQkJCQkJKiBQVDMyX0xFVkVMX0JJVFMpKSkgLSAxKSkKIAogI2RlZmluZSBQVDMyX0lOREVYKGFkZHJlc3MsIGxldmVsKVwKIAkoKChhZGRyZXNzKSA+PiBQVDMyX0xFVkVMX1NISUZUKGxldmVsKSkgJiAoKDEgPDwgUFQzMl9MRVZFTF9CSVRTKSAtIDEpKQpAQCAtMTE1LDEwICsxMTksMTkgQEAKICNkZWZpbmUgUFQ2NF9CQVNFX0FERFJfTUFTSyAoKCgxVUxMIDw8IDUyKSAtIDEpICYgfih1NjQpKFBBR0VfU0laRS0xKSkKICNkZWZpbmUgUFQ2NF9ESVJfQkFTRV9BRERSX01BU0sgXAogCShQVDY0X0JBU0VfQUREUl9NQVNLICYgfigoMVVMTCA8PCAoUEFHRV9TSElGVCArIFBUNjRfTEVWRUxfQklUUykpIC0gMSkpCisjZGVmaW5lIFBUNjRfTFZMX0FERFJfTUFTSyhsZXZlbCkgXAorCShQVDY0X0JBU0VfQUREUl9NQVNLICYgfigoMVVMTCA8PCAoUEFHRV9TSElGVCArICgoKGxldmVsKSAtIDEpIFwKKwkJCQkJCSogUFQ2NF9MRVZFTF9CSVRTKSkpIC0gMSkpCisjZGVmaW5lIFBUNjRfTFZMX09GRlNFVF9NQVNLKGxldmVsKSBcCisJKFBUNjRfQkFTRV9BRERSX01BU0sgJiAoKDFVTEwgPDwgKFBBR0VfU0hJRlQgKyAoKChsZXZlbCkgLSAxKSBcCisJCQkJCQkqIFBUNjRfTEVWRUxfQklUUykpKSAtIDEpKQogCiAjZGVmaW5lIFBUMzJfQkFTRV9BRERSX01BU0sgUEFHRV9NQVNLCiAjZGVmaW5lIFBUMzJfRElSX0JBU0VfQUREUl9NQVNLIFwKIAkoUEFHRV9NQVNLICYgfigoMVVMTCA8PCAoUEFHRV9TSElGVCArIFBUMzJfTEVWRUxfQklUUykpIC0gMSkpCisjZGVmaW5lIFBUMzJfTFZMX0FERFJfTUFTSyhsZXZlbCkgXAorCShQQUdFX01BU0sgJiB+KCgxVUxMIDw8IChQQUdFX1NISUZUICsgKCgobGV2ZWwpIC0gMSkgXAorCQkJCQkgICAgKiBQVDMyX0xFVkVMX0JJVFMpKSkgLSAxKSkKIAogI2RlZmluZSBQVDY0X1BFUk1fTUFTSyAoUFRfUFJFU0VOVF9NQVNLIHwgUFRfV1JJVEFCTEVfTUFTSyB8IFBUX1VTRVJfTUFTSyBcCiAJCQl8IFBUNjRfTlhfTUFTSykKQEAgLTEyOSw2ICsxNDIsNyBAQAogI2RlZmluZSBQRkVSUl9SU1ZEX01BU0sgKDFVIDw8IDMpCiAjZGVmaW5lIFBGRVJSX0ZFVENIX01BU0sgKDFVIDw8IDQpCiAKKyNkZWZpbmUgUFRfUERQRV9MRVZFTCAzCiAjZGVmaW5lIFBUX0RJUkVDVE9SWV9MRVZFTCAyCiAjZGVmaW5lIFBUX1BBR0VfVEFCTEVfTEVWRUwgMQogCkBAIC0xMzksMTAgKzE1MywxMyBAQAogI2RlZmluZSBBQ0NfVVNFUl9NQVNLICAgIFBUX1VTRVJfTUFTSwogI2RlZmluZSBBQ0NfQUxMICAgICAgICAgIChBQ0NfRVhFQ19NQVNLIHwgQUNDX1dSSVRFX01BU0sgfCBBQ0NfVVNFUl9NQVNLKQogCisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlICJtbXV0cmFjZS5oIgorCiAjZGVmaW5lIFNIQURPV19QVF9JTkRFWChhZGRyLCBsZXZlbCkgUFQ2NF9JTkRFWChhZGRyLCBsZXZlbCkKIAogc3RydWN0IGt2bV9ybWFwX2Rlc2MgewotCXU2NCAqc2hhZG93X3B0ZXNbUk1BUF9FWFRdOworCXU2NCAqc3B0ZXNbUk1BUF9FWFRdOwogCXN0cnVjdCBrdm1fcm1hcF9kZXNjICptb3JlOwogfTsKIApAQCAtMjM5LDE2ICsyNTYsMjUgQEAKIAlyZXR1cm4gcHRlICYgUFRfV1JJVEFCTEVfTUFTSzsKIH0KIAotc3RhdGljIGludCBpc19kaXJ0eV9wdGUodW5zaWduZWQgbG9uZyBwdGUpCitzdGF0aWMgaW50IGlzX2RpcnR5X2dwdGUodW5zaWduZWQgbG9uZyBwdGUpCiB7Ci0JcmV0dXJuIHB0ZSAmIHNoYWRvd19kaXJ0eV9tYXNrOworCXJldHVybiBwdGUgJiBQVF9ESVJUWV9NQVNLOwogfQogCi1zdGF0aWMgaW50IGlzX3JtYXBfcHRlKHU2NCBwdGUpCitzdGF0aWMgaW50IGlzX3JtYXBfc3B0ZSh1NjQgcHRlKQogewogCXJldHVybiBpc19zaGFkb3dfcHJlc2VudF9wdGUocHRlKTsKIH0KIAorc3RhdGljIGludCBpc19sYXN0X3NwdGUodTY0IHB0ZSwgaW50IGxldmVsKQoreworCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKQorCQlyZXR1cm4gMTsKKwlpZiAoaXNfbGFyZ2VfcHRlKHB0ZSkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgcGZuX3Qgc3B0ZV90b19wZm4odTY0IHB0ZSkKIHsKIAlyZXR1cm4gKHB0ZSAmIFBUNjRfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CkBAIC0yNjEsNyArMjg3LDcgQEAKIAlyZXR1cm4gKGdwdGUgJiBQVDMyX0RJUl9QU0UzNl9NQVNLKSA8PCBzaGlmdDsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3NoYWRvd19wdGUodTY0ICpzcHRlcCwgdTY0IHNwdGUpCitzdGF0aWMgdm9pZCBfX3NldF9zcHRlKHU2NCAqc3B0ZXAsIHU2NCBzcHRlKQogewogI2lmZGVmIENPTkZJR19YODZfNjQKIAlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKilzcHRlcCwgc3B0ZSk7CkBAIC0zODAsMzcgKzQwNiw1MiBAQAogICogUmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBsYXJnZXBhZ2Ugd3JpdGUgY291bnQgZm9yIGEgZ2l2ZW4KICAqIGdmbiwgaGFuZGxpbmcgc2xvdHMgdGhhdCBhcmUgbm90IGxhcmdlIHBhZ2UgYWxpZ25lZC4KICAqLwotc3RhdGljIGludCAqc2xvdF9sYXJnZXBhZ2VfaWR4KGdmbl90IGdmbiwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCkKK3N0YXRpYyBpbnQgKnNsb3RfbGFyZ2VwYWdlX2lkeChnZm5fdCBnZm4sCisJCQkgICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKKwkJCSAgICAgICBpbnQgbGV2ZWwpCiB7CiAJdW5zaWduZWQgbG9uZyBpZHg7CiAKLQlpZHggPSAoZ2ZuIC8gS1ZNX1BBR0VTX1BFUl9IUEFHRSkgLQotCSAgICAgIChzbG90LT5iYXNlX2dmbiAvIEtWTV9QQUdFU19QRVJfSFBBR0UpOwotCXJldHVybiAmc2xvdC0+bHBhZ2VfaW5mb1tpZHhdLndyaXRlX2NvdW50OworCWlkeCA9IChnZm4gLyBLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKSkgLQorCSAgICAgIChzbG90LT5iYXNlX2dmbiAvIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKTsKKwlyZXR1cm4gJnNsb3QtPmxwYWdlX2luZm9bbGV2ZWwgLSAyXVtpZHhdLndyaXRlX2NvdW50OwogfQogCiBzdGF0aWMgdm9pZCBhY2NvdW50X3NoYWRvd2VkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogeworCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJaW50ICp3cml0ZV9jb3VudDsKKwlpbnQgaTsKIAogCWdmbiA9IHVuYWxpYXNfZ2ZuKGt2bSwgZ2ZuKTsKLQl3cml0ZV9jb3VudCA9IHNsb3RfbGFyZ2VwYWdlX2lkeChnZm4sCi0JCQkJCSBnZm5fdG9fbWVtc2xvdF91bmFsaWFzZWQoa3ZtLCBnZm4pKTsKLQkqd3JpdGVfY291bnQgKz0gMTsKKworCXNsb3QgPSBnZm5fdG9fbWVtc2xvdF91bmFsaWFzZWQoa3ZtLCBnZm4pOworCWZvciAoaSA9IFBUX0RJUkVDVE9SWV9MRVZFTDsKKwkgICAgIGkgPCBQVF9QQUdFX1RBQkxFX0xFVkVMICsgS1ZNX05SX1BBR0VfU0laRVM7ICsraSkgeworCQl3cml0ZV9jb3VudCAgID0gc2xvdF9sYXJnZXBhZ2VfaWR4KGdmbiwgc2xvdCwgaSk7CisJCSp3cml0ZV9jb3VudCArPSAxOworCX0KIH0KIAogc3RhdGljIHZvaWQgdW5hY2NvdW50X3NoYWRvd2VkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogeworCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJaW50ICp3cml0ZV9jb3VudDsKKwlpbnQgaTsKIAogCWdmbiA9IHVuYWxpYXNfZ2ZuKGt2bSwgZ2ZuKTsKLQl3cml0ZV9jb3VudCA9IHNsb3RfbGFyZ2VwYWdlX2lkeChnZm4sCi0JCQkJCSBnZm5fdG9fbWVtc2xvdF91bmFsaWFzZWQoa3ZtLCBnZm4pKTsKLQkqd3JpdGVfY291bnQgLT0gMTsKLQlXQVJOX09OKCp3cml0ZV9jb3VudCA8IDApOworCWZvciAoaSA9IFBUX0RJUkVDVE9SWV9MRVZFTDsKKwkgICAgIGkgPCBQVF9QQUdFX1RBQkxFX0xFVkVMICsgS1ZNX05SX1BBR0VfU0laRVM7ICsraSkgeworCQlzbG90ICAgICAgICAgID0gZ2ZuX3RvX21lbXNsb3RfdW5hbGlhc2VkKGt2bSwgZ2ZuKTsKKwkJd3JpdGVfY291bnQgICA9IHNsb3RfbGFyZ2VwYWdlX2lkeChnZm4sIHNsb3QsIGkpOworCQkqd3JpdGVfY291bnQgLT0gMTsKKwkJV0FSTl9PTigqd3JpdGVfY291bnQgPCAwKTsKKwl9CiB9CiAKLXN0YXRpYyBpbnQgaGFzX3dycHJvdGVjdGVkX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCitzdGF0aWMgaW50IGhhc193cnByb3RlY3RlZF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQlnZm5fdCBnZm4sCisJCQkJaW50IGxldmVsKQogewogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJaW50ICpsYXJnZXBhZ2VfaWR4OwpAQCAtNDE4LDQ3ICs0NTksNjcgQEAKIAlnZm4gPSB1bmFsaWFzX2dmbihrdm0sIGdmbik7CiAJc2xvdCA9IGdmbl90b19tZW1zbG90X3VuYWxpYXNlZChrdm0sIGdmbik7CiAJaWYgKHNsb3QpIHsKLQkJbGFyZ2VwYWdlX2lkeCA9IHNsb3RfbGFyZ2VwYWdlX2lkeChnZm4sIHNsb3QpOworCQlsYXJnZXBhZ2VfaWR4ID0gc2xvdF9sYXJnZXBhZ2VfaWR4KGdmbiwgc2xvdCwgbGV2ZWwpOwogCQlyZXR1cm4gKmxhcmdlcGFnZV9pZHg7CiAJfQogCiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgaG9zdF9sYXJnZXBhZ2VfYmFja2VkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQorc3RhdGljIGludCBob3N0X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiB7CisJdW5zaWduZWQgbG9uZyBwYWdlX3NpemUgPSBQQUdFX1NJWkU7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwotCWludCByZXQgPSAwOworCWludCBpLCByZXQgPSAwOwogCiAJYWRkciA9IGdmbl90b19odmEoa3ZtLCBnZm4pOwogCWlmIChrdm1faXNfZXJyb3JfaHZhKGFkZHIpKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gcGFnZV9zaXplOwogCiAJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyKTsKLQlpZiAodm1hICYmIGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKQotCQlyZXQgPSAxOworCWlmICghdm1hKQorCQlnb3RvIG91dDsKKworCXBhZ2Vfc2l6ZSA9IHZtYV9rZXJuZWxfcGFnZXNpemUodm1hKTsKKworb3V0OgogCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKKwlmb3IgKGkgPSBQVF9QQUdFX1RBQkxFX0xFVkVMOworCSAgICAgaSA8IChQVF9QQUdFX1RBQkxFX0xFVkVMICsgS1ZNX05SX1BBR0VfU0laRVMpOyArK2kpIHsKKwkJaWYgKHBhZ2Vfc2l6ZSA+PSBLVk1fSFBBR0VfU0laRShpKSkKKwkJCXJldCA9IGk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaXNfbGFyZ2VwYWdlX2JhY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGxhcmdlX2dmbikKK3N0YXRpYyBpbnQgbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGxhcmdlX2dmbikKIHsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwotCi0JaWYgKGhhc193cnByb3RlY3RlZF9wYWdlKHZjcHUtPmt2bSwgbGFyZ2VfZ2ZuKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWhvc3RfbGFyZ2VwYWdlX2JhY2tlZCh2Y3B1LT5rdm0sIGxhcmdlX2dmbikpCi0JCXJldHVybiAwOworCWludCBob3N0X2xldmVsOworCWludCBsZXZlbCA9IFBUX1BBR0VfVEFCTEVfTEVWRUw7CiAKIAlzbG90ID0gZ2ZuX3RvX21lbXNsb3QodmNwdS0+a3ZtLCBsYXJnZV9nZm4pOwogCWlmIChzbG90ICYmIHNsb3QtPmRpcnR5X2JpdG1hcCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBQVF9QQUdFX1RBQkxFX0xFVkVMOwogCi0JcmV0dXJuIDE7CisJaG9zdF9sZXZlbCA9IGhvc3RfbWFwcGluZ19sZXZlbCh2Y3B1LT5rdm0sIGxhcmdlX2dmbik7CisKKwlpZiAoaG9zdF9sZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKQorCQlyZXR1cm4gaG9zdF9sZXZlbDsKKworCWZvciAobGV2ZWwgPSBQVF9ESVJFQ1RPUllfTEVWRUw7IGxldmVsIDw9IGhvc3RfbGV2ZWw7ICsrbGV2ZWwpIHsKKworCQlpZiAoaGFzX3dycHJvdGVjdGVkX3BhZ2UodmNwdS0+a3ZtLCBsYXJnZV9nZm4sIGxldmVsKSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBsZXZlbCAtIDE7CiB9CiAKIC8qCkBAIC00NjYsMTkgKzUyNywxOSBAQAogICogTm90ZTogZ2ZuIG11c3QgYmUgdW5hbGlhc2VkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGdldCBjYWxsZWQKICAqLwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAqZ2ZuX3RvX3JtYXAoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGludCBscGFnZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nICpnZm5fdG9fcm1hcChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgaW50IGxldmVsKQogewogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJdW5zaWduZWQgbG9uZyBpZHg7CiAKIAlzbG90ID0gZ2ZuX3RvX21lbXNsb3Qoa3ZtLCBnZm4pOwotCWlmICghbHBhZ2UpCisJaWYgKGxpa2VseShsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKSkKIAkJcmV0dXJuICZzbG90LT5ybWFwW2dmbiAtIHNsb3QtPmJhc2VfZ2ZuXTsKIAotCWlkeCA9IChnZm4gLyBLVk1fUEFHRVNfUEVSX0hQQUdFKSAtCi0JICAgICAgKHNsb3QtPmJhc2VfZ2ZuIC8gS1ZNX1BBR0VTX1BFUl9IUEFHRSk7CisJaWR4ID0gKGdmbiAvIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKSAtCisJCShzbG90LT5iYXNlX2dmbiAvIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKTsKIAotCXJldHVybiAmc2xvdC0+bHBhZ2VfaW5mb1tpZHhdLnJtYXBfcGRlOworCXJldHVybiAmc2xvdC0+bHBhZ2VfaW5mb1tsZXZlbCAtIDJdW2lkeF0ucm1hcF9wZGU7CiB9CiAKIC8qCkBAIC00OTQsNDIgKzU1NSw0MiBAQAogICogdGhlIHNwdGUgd2FzIG5vdCBhZGRlZC4KICAqCiAgKi8KLXN0YXRpYyBpbnQgcm1hcF9hZGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnNwdGUsIGdmbl90IGdmbiwgaW50IGxwYWdlKQorc3RhdGljIGludCBybWFwX2FkZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc3B0ZSwgZ2ZuX3QgZ2ZuKQogewogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwogCXN0cnVjdCBrdm1fcm1hcF9kZXNjICpkZXNjOwogCXVuc2lnbmVkIGxvbmcgKnJtYXBwOwogCWludCBpLCBjb3VudCA9IDA7CiAKLQlpZiAoIWlzX3JtYXBfcHRlKCpzcHRlKSkKKwlpZiAoIWlzX3JtYXBfc3B0ZSgqc3B0ZSkpCiAJCXJldHVybiBjb3VudDsKIAlnZm4gPSB1bmFsaWFzX2dmbih2Y3B1LT5rdm0sIGdmbik7CiAJc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGUpKTsKIAlzcC0+Z2Zuc1tzcHRlIC0gc3AtPnNwdF0gPSBnZm47Ci0Jcm1hcHAgPSBnZm5fdG9fcm1hcCh2Y3B1LT5rdm0sIGdmbiwgbHBhZ2UpOworCXJtYXBwID0gZ2ZuX3RvX3JtYXAodmNwdS0+a3ZtLCBnZm4sIHNwLT5yb2xlLmxldmVsKTsKIAlpZiAoISpybWFwcCkgewogCQlybWFwX3ByaW50aygicm1hcF9hZGQ6ICVwICVsbHggMC0+MVxuIiwgc3B0ZSwgKnNwdGUpOwogCQkqcm1hcHAgPSAodW5zaWduZWQgbG9uZylzcHRlOwogCX0gZWxzZSBpZiAoISgqcm1hcHAgJiAxKSkgewogCQlybWFwX3ByaW50aygicm1hcF9hZGQ6ICVwICVsbHggMS0+bWFueVxuIiwgc3B0ZSwgKnNwdGUpOwogCQlkZXNjID0gbW11X2FsbG9jX3JtYXBfZGVzYyh2Y3B1KTsKLQkJZGVzYy0+c2hhZG93X3B0ZXNbMF0gPSAodTY0ICopKnJtYXBwOwotCQlkZXNjLT5zaGFkb3dfcHRlc1sxXSA9IHNwdGU7CisJCWRlc2MtPnNwdGVzWzBdID0gKHU2NCAqKSpybWFwcDsKKwkJZGVzYy0+c3B0ZXNbMV0gPSBzcHRlOwogCQkqcm1hcHAgPSAodW5zaWduZWQgbG9uZylkZXNjIHwgMTsKIAl9IGVsc2UgewogCQlybWFwX3ByaW50aygicm1hcF9hZGQ6ICVwICVsbHggbWFueS0+bWFueVxuIiwgc3B0ZSwgKnNwdGUpOwogCQlkZXNjID0gKHN0cnVjdCBrdm1fcm1hcF9kZXNjICopKCpybWFwcCAmIH4xdWwpOwotCQl3aGlsZSAoZGVzYy0+c2hhZG93X3B0ZXNbUk1BUF9FWFQtMV0gJiYgZGVzYy0+bW9yZSkgeworCQl3aGlsZSAoZGVzYy0+c3B0ZXNbUk1BUF9FWFQtMV0gJiYgZGVzYy0+bW9yZSkgewogCQkJZGVzYyA9IGRlc2MtPm1vcmU7CiAJCQljb3VudCArPSBSTUFQX0VYVDsKIAkJfQotCQlpZiAoZGVzYy0+c2hhZG93X3B0ZXNbUk1BUF9FWFQtMV0pIHsKKwkJaWYgKGRlc2MtPnNwdGVzW1JNQVBfRVhULTFdKSB7CiAJCQlkZXNjLT5tb3JlID0gbW11X2FsbG9jX3JtYXBfZGVzYyh2Y3B1KTsKIAkJCWRlc2MgPSBkZXNjLT5tb3JlOwogCQl9Ci0JCWZvciAoaSA9IDA7IGRlc2MtPnNoYWRvd19wdGVzW2ldOyArK2kpCisJCWZvciAoaSA9IDA7IGRlc2MtPnNwdGVzW2ldOyArK2kpCiAJCQk7Ci0JCWRlc2MtPnNoYWRvd19wdGVzW2ldID0gc3B0ZTsKKwkJZGVzYy0+c3B0ZXNbaV0gPSBzcHRlOwogCX0KIAlyZXR1cm4gY291bnQ7CiB9CkBAIC01NDEsMTQgKzYwMiwxNCBAQAogewogCWludCBqOwogCi0JZm9yIChqID0gUk1BUF9FWFQgLSAxOyAhZGVzYy0+c2hhZG93X3B0ZXNbal0gJiYgaiA+IGk7IC0taikKKwlmb3IgKGogPSBSTUFQX0VYVCAtIDE7ICFkZXNjLT5zcHRlc1tqXSAmJiBqID4gaTsgLS1qKQogCQk7Ci0JZGVzYy0+c2hhZG93X3B0ZXNbaV0gPSBkZXNjLT5zaGFkb3dfcHRlc1tqXTsKLQlkZXNjLT5zaGFkb3dfcHRlc1tqXSA9IE5VTEw7CisJZGVzYy0+c3B0ZXNbaV0gPSBkZXNjLT5zcHRlc1tqXTsKKwlkZXNjLT5zcHRlc1tqXSA9IE5VTEw7CiAJaWYgKGogIT0gMCkKIAkJcmV0dXJuOwogCWlmICghcHJldl9kZXNjICYmICFkZXNjLT5tb3JlKQotCQkqcm1hcHAgPSAodW5zaWduZWQgbG9uZylkZXNjLT5zaGFkb3dfcHRlc1swXTsKKwkJKnJtYXBwID0gKHVuc2lnbmVkIGxvbmcpZGVzYy0+c3B0ZXNbMF07CiAJZWxzZQogCQlpZiAocHJldl9kZXNjKQogCQkJcHJldl9kZXNjLT5tb3JlID0gZGVzYy0+bW9yZTsKQEAgLTU2Niw3ICs2MjcsNyBAQAogCXVuc2lnbmVkIGxvbmcgKnJtYXBwOwogCWludCBpOwogCi0JaWYgKCFpc19ybWFwX3B0ZSgqc3B0ZSkpCisJaWYgKCFpc19ybWFwX3NwdGUoKnNwdGUpKQogCQlyZXR1cm47CiAJc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGUpKTsKIAlwZm4gPSBzcHRlX3RvX3Bmbigqc3B0ZSk7CkBAIC01NzYsNyArNjM3LDcgQEAKIAkJa3ZtX3JlbGVhc2VfcGZuX2RpcnR5KHBmbik7CiAJZWxzZQogCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKLQlybWFwcCA9IGdmbl90b19ybWFwKGt2bSwgc3AtPmdmbnNbc3B0ZSAtIHNwLT5zcHRdLCBpc19sYXJnZV9wdGUoKnNwdGUpKTsKKwlybWFwcCA9IGdmbl90b19ybWFwKGt2bSwgc3AtPmdmbnNbc3B0ZSAtIHNwLT5zcHRdLCBzcC0+cm9sZS5sZXZlbCk7CiAJaWYgKCEqcm1hcHApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJybWFwX3JlbW92ZTogJXAgJWxseCAwLT5CVUdcbiIsIHNwdGUsICpzcHRlKTsKIAkJQlVHKCk7CkBAIC01OTMsOCArNjU0LDggQEAKIAkJZGVzYyA9IChzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyAqKSgqcm1hcHAgJiB+MXVsKTsKIAkJcHJldl9kZXNjID0gTlVMTDsKIAkJd2hpbGUgKGRlc2MpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBSTUFQX0VYVCAmJiBkZXNjLT5zaGFkb3dfcHRlc1tpXTsgKytpKQotCQkJCWlmIChkZXNjLT5zaGFkb3dfcHRlc1tpXSA9PSBzcHRlKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgUk1BUF9FWFQgJiYgZGVzYy0+c3B0ZXNbaV07ICsraSkKKwkJCQlpZiAoZGVzYy0+c3B0ZXNbaV0gPT0gc3B0ZSkgewogCQkJCQlybWFwX2Rlc2NfcmVtb3ZlX2VudHJ5KHJtYXBwLAogCQkJCQkJCSAgICAgICBkZXNjLCBpLAogCQkJCQkJCSAgICAgICBwcmV2X2Rlc2MpOwpAQCAtNjI1LDEwICs2ODYsMTAgQEAKIAlwcmV2X2Rlc2MgPSBOVUxMOwogCXByZXZfc3B0ZSA9IE5VTEw7CiAJd2hpbGUgKGRlc2MpIHsKLQkJZm9yIChpID0gMDsgaSA8IFJNQVBfRVhUICYmIGRlc2MtPnNoYWRvd19wdGVzW2ldOyArK2kpIHsKKwkJZm9yIChpID0gMDsgaSA8IFJNQVBfRVhUICYmIGRlc2MtPnNwdGVzW2ldOyArK2kpIHsKIAkJCWlmIChwcmV2X3NwdGUgPT0gc3B0ZSkKLQkJCQlyZXR1cm4gZGVzYy0+c2hhZG93X3B0ZXNbaV07Ci0JCQlwcmV2X3NwdGUgPSBkZXNjLT5zaGFkb3dfcHRlc1tpXTsKKwkJCQlyZXR1cm4gZGVzYy0+c3B0ZXNbaV07CisJCQlwcmV2X3NwdGUgPSBkZXNjLT5zcHRlc1tpXTsKIAkJfQogCQlkZXNjID0gZGVzYy0+bW9yZTsKIAl9CkBAIC02MzksMTAgKzcwMCwxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgKnJtYXBwOwogCXU2NCAqc3B0ZTsKLQlpbnQgd3JpdGVfcHJvdGVjdGVkID0gMDsKKwlpbnQgaSwgd3JpdGVfcHJvdGVjdGVkID0gMDsKIAogCWdmbiA9IHVuYWxpYXNfZ2ZuKGt2bSwgZ2ZuKTsKLQlybWFwcCA9IGdmbl90b19ybWFwKGt2bSwgZ2ZuLCAwKTsKKwlybWFwcCA9IGdmbl90b19ybWFwKGt2bSwgZ2ZuLCBQVF9QQUdFX1RBQkxFX0xFVkVMKTsKIAogCXNwdGUgPSBybWFwX25leHQoa3ZtLCBybWFwcCwgTlVMTCk7CiAJd2hpbGUgKHNwdGUpIHsKQEAgLTY1MCw3ICs3MTEsNyBAQAogCQlCVUdfT04oISgqc3B0ZSAmIFBUX1BSRVNFTlRfTUFTSykpOwogCQlybWFwX3ByaW50aygicm1hcF93cml0ZV9wcm90ZWN0OiBzcHRlICVwICVsbHhcbiIsIHNwdGUsICpzcHRlKTsKIAkJaWYgKGlzX3dyaXRlYmxlX3B0ZSgqc3B0ZSkpIHsKLQkJCXNldF9zaGFkb3dfcHRlKHNwdGUsICpzcHRlICYgflBUX1dSSVRBQkxFX01BU0spOworCQkJX19zZXRfc3B0ZShzcHRlLCAqc3B0ZSAmIH5QVF9XUklUQUJMRV9NQVNLKTsKIAkJCXdyaXRlX3Byb3RlY3RlZCA9IDE7CiAJCX0KIAkJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBzcHRlKTsKQEAgLTY2NCwyMSArNzI1LDI0IEBACiAJfQogCiAJLyogY2hlY2sgZm9yIGh1Z2UgcGFnZSBtYXBwaW5ncyAqLwotCXJtYXBwID0gZ2ZuX3RvX3JtYXAoa3ZtLCBnZm4sIDEpOwotCXNwdGUgPSBybWFwX25leHQoa3ZtLCBybWFwcCwgTlVMTCk7Ci0Jd2hpbGUgKHNwdGUpIHsKLQkJQlVHX09OKCFzcHRlKTsKLQkJQlVHX09OKCEoKnNwdGUgJiBQVF9QUkVTRU5UX01BU0spKTsKLQkJQlVHX09OKCgqc3B0ZSAmIChQVF9QQUdFX1NJWkVfTUFTS3xQVF9QUkVTRU5UX01BU0spKSAhPSAoUFRfUEFHRV9TSVpFX01BU0t8UFRfUFJFU0VOVF9NQVNLKSk7Ci0JCXBncHJpbnRrKCJybWFwX3dyaXRlX3Byb3RlY3QobGFyZ2UpOiBzcHRlICVwICVsbHggJWxsZFxuIiwgc3B0ZSwgKnNwdGUsIGdmbik7Ci0JCWlmIChpc193cml0ZWJsZV9wdGUoKnNwdGUpKSB7Ci0JCQlybWFwX3JlbW92ZShrdm0sIHNwdGUpOwotCQkJLS1rdm0tPnN0YXQubHBhZ2VzOwotCQkJc2V0X3NoYWRvd19wdGUoc3B0ZSwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOwotCQkJc3B0ZSA9IE5VTEw7Ci0JCQl3cml0ZV9wcm90ZWN0ZWQgPSAxOworCWZvciAoaSA9IFBUX0RJUkVDVE9SWV9MRVZFTDsKKwkgICAgIGkgPCBQVF9QQUdFX1RBQkxFX0xFVkVMICsgS1ZNX05SX1BBR0VfU0laRVM7ICsraSkgeworCQlybWFwcCA9IGdmbl90b19ybWFwKGt2bSwgZ2ZuLCBpKTsKKwkJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBOVUxMKTsKKwkJd2hpbGUgKHNwdGUpIHsKKwkJCUJVR19PTighc3B0ZSk7CisJCQlCVUdfT04oISgqc3B0ZSAmIFBUX1BSRVNFTlRfTUFTSykpOworCQkJQlVHX09OKCgqc3B0ZSAmIChQVF9QQUdFX1NJWkVfTUFTS3xQVF9QUkVTRU5UX01BU0spKSAhPSAoUFRfUEFHRV9TSVpFX01BU0t8UFRfUFJFU0VOVF9NQVNLKSk7CisJCQlwZ3ByaW50aygicm1hcF93cml0ZV9wcm90ZWN0KGxhcmdlKTogc3B0ZSAlcCAlbGx4ICVsbGRcbiIsIHNwdGUsICpzcHRlLCBnZm4pOworCQkJaWYgKGlzX3dyaXRlYmxlX3B0ZSgqc3B0ZSkpIHsKKwkJCQlybWFwX3JlbW92ZShrdm0sIHNwdGUpOworCQkJCS0ta3ZtLT5zdGF0LmxwYWdlczsKKwkJCQlfX3NldF9zcHRlKHNwdGUsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJCQlzcHRlID0gTlVMTDsKKwkJCQl3cml0ZV9wcm90ZWN0ZWQgPSAxOworCQkJfQorCQkJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBzcHRlKTsKIAkJfQotCQlzcHRlID0gcm1hcF9uZXh0KGt2bSwgcm1hcHAsIHNwdGUpOwogCX0KIAogCXJldHVybiB3cml0ZV9wcm90ZWN0ZWQ7CkBAIC02OTMsNyArNzU3LDcgQEAKIAkJQlVHX09OKCEoKnNwdGUgJiBQVF9QUkVTRU5UX01BU0spKTsKIAkJcm1hcF9wcmludGsoImt2bV9ybWFwX3VubWFwX2h2YTogc3B0ZSAlcCAlbGx4XG4iLCBzcHRlLCAqc3B0ZSk7CiAJCXJtYXBfcmVtb3ZlKGt2bSwgc3B0ZSk7Ci0JCXNldF9zaGFkb3dfcHRlKHNwdGUsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJX19zZXRfc3B0ZShzcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CiAJCW5lZWRfdGxiX2ZsdXNoID0gMTsKIAl9CiAJcmV0dXJuIG5lZWRfdGxiX2ZsdXNoOwpAQCAtNzAyLDcgKzc2Niw3IEBACiBzdGF0aWMgaW50IGt2bV9oYW5kbGVfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEsCiAJCQkgIGludCAoKmhhbmRsZXIpKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHApKQogewotCWludCBpOworCWludCBpLCBqOwogCWludCByZXR2YWwgPSAwOwogCiAJLyoKQEAgLTcyMSwxMSArNzg1LDE1IEBACiAJCWVuZCA9IHN0YXJ0ICsgKG1lbXNsb3QtPm5wYWdlcyA8PCBQQUdFX1NISUZUKTsKIAkJaWYgKGh2YSA+PSBzdGFydCAmJiBodmEgPCBlbmQpIHsKIAkJCWdmbl90IGdmbl9vZmZzZXQgPSAoaHZhIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisKIAkJCXJldHZhbCB8PSBoYW5kbGVyKGt2bSwgJm1lbXNsb3QtPnJtYXBbZ2ZuX29mZnNldF0pOwotCQkJcmV0dmFsIHw9IGhhbmRsZXIoa3ZtLAotCQkJCQkgICZtZW1zbG90LT5scGFnZV9pbmZvWwotCQkJCQkJICBnZm5fb2Zmc2V0IC8KLQkJCQkJCSAgS1ZNX1BBR0VTX1BFUl9IUEFHRV0ucm1hcF9wZGUpOworCisJCQlmb3IgKGogPSAwOyBqIDwgS1ZNX05SX1BBR0VfU0laRVMgLSAxOyArK2opIHsKKwkJCQlpbnQgaWR4ID0gZ2ZuX29mZnNldDsKKwkJCQlpZHggLz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShQVF9ESVJFQ1RPUllfTEVWRUwgKyBqKTsKKwkJCQlyZXR2YWwgfD0gaGFuZGxlcihrdm0sCisJCQkJCSZtZW1zbG90LT5scGFnZV9pbmZvW2pdW2lkeF0ucm1hcF9wZGUpOworCQkJfQogCQl9CiAJfQogCkBAIC03NjMsMTIgKzgzMSwxNSBAQAogCiAjZGVmaW5lIFJNQVBfUkVDWUNMRV9USFJFU0hPTEQgMTAwMAogCi1zdGF0aWMgdm9pZCBybWFwX3JlY3ljbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGludCBscGFnZSkKK3N0YXRpYyB2b2lkIHJtYXBfcmVjeWNsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc3B0ZSwgZ2ZuX3QgZ2ZuKQogewogCXVuc2lnbmVkIGxvbmcgKnJtYXBwOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOworCisJc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGUpKTsKIAogCWdmbiA9IHVuYWxpYXNfZ2ZuKHZjcHUtPmt2bSwgZ2ZuKTsKLQlybWFwcCA9IGdmbl90b19ybWFwKHZjcHUtPmt2bSwgZ2ZuLCBscGFnZSk7CisJcm1hcHAgPSBnZm5fdG9fcm1hcCh2Y3B1LT5rdm0sIGdmbiwgc3AtPnJvbGUubGV2ZWwpOwogCiAJa3ZtX3VubWFwX3JtYXBwKHZjcHUtPmt2bSwgcm1hcHApOwogCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOwpAQCAtMTEwOSw2ICsxMTgwLDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCisJdHJhY2Vfa3ZtX21tdV9zeW5jX3BhZ2Uoc3ApOwogCWlmIChybWFwX3dyaXRlX3Byb3RlY3QodmNwdS0+a3ZtLCBzcC0+Z2ZuKSkKIAkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7CiAJa3ZtX3VubGlua191bnN5bmNfcGFnZSh2Y3B1LT5rdm0sIHNwKTsKQEAgLTEyMzEsOCArMTMwMyw2IEBACiAJCXF1YWRyYW50ICY9ICgxIDw8ICgoUFQzMl9QVF9CSVRTIC0gUFQ2NF9QVF9CSVRTKSAqIGxldmVsKSkgLSAxOwogCQlyb2xlLnF1YWRyYW50ID0gcXVhZHJhbnQ7CiAJfQotCXBncHJpbnRrKCIlczogbG9va2luZyBnZm4gJWx4IHJvbGUgJXhcbiIsIF9fZnVuY19fLAotCQkgZ2ZuLCByb2xlLndvcmQpOwogCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbik7CiAJYnVja2V0ID0gJnZjcHUtPmt2bS0+YXJjaC5tbXVfcGFnZV9oYXNoW2luZGV4XTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNwLCBub2RlLCB0bXAsIGJ1Y2tldCwgaGFzaF9saW5rKQpAQCAtMTI0OSwxNCArMTMxOSwxMyBAQAogCQkJCXNldF9iaXQoS1ZNX1JFUV9NTVVfU1lOQywgJnZjcHUtPnJlcXVlc3RzKTsKIAkJCQlrdm1fbW11X21hcmtfcGFyZW50c191bnN5bmModmNwdSwgc3ApOwogCQkJfQotCQkJcGdwcmludGsoIiVzOiBmb3VuZFxuIiwgX19mdW5jX18pOworCQkJdHJhY2Vfa3ZtX21tdV9nZXRfcGFnZShzcCwgZmFsc2UpOwogCQkJcmV0dXJuIHNwOwogCQl9CiAJKyt2Y3B1LT5rdm0tPnN0YXQubW11X2NhY2hlX21pc3M7CiAJc3AgPSBrdm1fbW11X2FsbG9jX3BhZ2UodmNwdSwgcGFyZW50X3B0ZSk7CiAJaWYgKCFzcCkKIAkJcmV0dXJuIHNwOwotCXBncHJpbnRrKCIlczogYWRkaW5nIGdmbiAlbHggcm9sZSAleFxuIiwgX19mdW5jX18sIGdmbiwgcm9sZS53b3JkKTsKIAlzcC0+Z2ZuID0gZ2ZuOwogCXNwLT5yb2xlID0gcm9sZTsKIAlobGlzdF9hZGRfaGVhZCgmc3AtPmhhc2hfbGluaywgYnVja2V0KTsKQEAgLTEyNjksNiArMTMzOCw3IEBACiAJCXZjcHUtPmFyY2gubW11LnByZWZldGNoX3BhZ2UodmNwdSwgc3ApOwogCWVsc2UKIAkJbm9ucGFnaW5nX3ByZWZldGNoX3BhZ2UodmNwdSwgc3ApOworCXRyYWNlX2t2bV9tbXVfZ2V0X3BhZ2Uoc3AsIHRydWUpOwogCXJldHVybiBzcDsKIH0KIApAQCAtMTI5Miw2ICsxMzYyLDExIEBACiB7CiAJaWYgKGl0ZXJhdG9yLT5sZXZlbCA8IFBUX1BBR0VfVEFCTEVfTEVWRUwpCiAJCXJldHVybiBmYWxzZTsKKworCWlmIChpdGVyYXRvci0+bGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkKKwkJaWYgKGlzX2xhcmdlX3B0ZSgqaXRlcmF0b3ItPnNwdGVwKSkKKwkJCXJldHVybiBmYWxzZTsKKwogCWl0ZXJhdG9yLT5pbmRleCA9IFNIQURPV19QVF9JTkRFWChpdGVyYXRvci0+YWRkciwgaXRlcmF0b3ItPmxldmVsKTsKIAlpdGVyYXRvci0+c3B0ZXAJPSAoKHU2NCAqKV9fdmEoaXRlcmF0b3ItPnNoYWRvd19hZGRyKSkgKyBpdGVyYXRvci0+aW5kZXg7CiAJcmV0dXJuIHRydWU7CkBAIC0xMzEyLDI1ICsxMzg3LDE3IEBACiAKIAlwdCA9IHNwLT5zcHQ7CiAKLQlpZiAoc3AtPnJvbGUubGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkgewotCQlmb3IgKGkgPSAwOyBpIDwgUFQ2NF9FTlRfUEVSX1BBR0U7ICsraSkgewotCQkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShwdFtpXSkpCi0JCQkJcm1hcF9yZW1vdmUoa3ZtLCAmcHRbaV0pOwotCQkJcHRbaV0gPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCiAJZm9yIChpID0gMDsgaSA8IFBUNjRfRU5UX1BFUl9QQUdFOyArK2kpIHsKIAkJZW50ID0gcHRbaV07CiAKIAkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShlbnQpKSB7Ci0JCQlpZiAoIWlzX2xhcmdlX3B0ZShlbnQpKSB7CisJCQlpZiAoIWlzX2xhc3Rfc3B0ZShlbnQsIHNwLT5yb2xlLmxldmVsKSkgewogCQkJCWVudCAmPSBQVDY0X0JBU0VfQUREUl9NQVNLOwogCQkJCW1tdV9wYWdlX3JlbW92ZV9wYXJlbnRfcHRlKHBhZ2VfaGVhZGVyKGVudCksCiAJCQkJCQkJICAgJnB0W2ldKTsKIAkJCX0gZWxzZSB7Ci0JCQkJLS1rdm0tPnN0YXQubHBhZ2VzOworCQkJCWlmIChpc19sYXJnZV9wdGUoZW50KSkKKwkJCQkJLS1rdm0tPnN0YXQubHBhZ2VzOwogCQkJCXJtYXBfcmVtb3ZlKGt2bSwgJnB0W2ldKTsKIAkJCX0KIAkJfQpAQCAtMTM0NiwxMCArMTQxMywxMCBAQAogc3RhdGljIHZvaWQga3ZtX21tdV9yZXNldF9sYXN0X3B0ZV91cGRhdGVkKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlpbnQgaTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKQotCQlpZiAoa3ZtLT52Y3B1c1tpXSkKLQkJCWt2bS0+dmNwdXNbaV0tPmFyY2gubGFzdF9wdGVfdXBkYXRlZCA9IE5VTEw7CisJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKQorCQl2Y3B1LT5hcmNoLmxhc3RfcHRlX3VwZGF0ZWQgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBrdm1fbW11X3VubGlua19wYXJlbnRzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCkBAIC0xMzY4LDcgKzE0MzUsNyBAQAogCQl9CiAJCUJVR19PTighcGFyZW50X3B0ZSk7CiAJCWt2bV9tbXVfcHV0X3BhZ2Uoc3AsIHBhcmVudF9wdGUpOwotCQlzZXRfc2hhZG93X3B0ZShwYXJlbnRfcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJCV9fc2V0X3NwdGUocGFyZW50X3B0ZSwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOwogCX0KIH0KIApAQCAtMTQwMCw2ICsxNDY3LDggQEAKIHN0YXRpYyBpbnQga3ZtX21tdV96YXBfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewogCWludCByZXQ7CisKKwl0cmFjZV9rdm1fbW11X3phcF9wYWdlKHNwKTsKIAkrK2t2bS0+c3RhdC5tbXVfc2hhZG93X3phcHBlZDsKIAlyZXQgPSBtbXVfemFwX3Vuc3luY19jaGlsZHJlbihrdm0sIHNwKTsKIAlrdm1fbW11X3BhZ2VfdW5saW5rX2NoaWxkcmVuKGt2bSwgc3ApOwpAQCAtMTUxNiw3ICsxNTg1LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBQVDY0X0VOVF9QRVJfUEFHRTsgKytpKSB7CiAJCWlmIChwdFtpXSA9PSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlKQotCQkJc2V0X3NoYWRvd19wdGUoJnB0W2ldLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJCQlfX3NldF9zcHRlKCZwdFtpXSwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOwogCX0KIH0KIApAQCAtMTY0Niw2ICsxNzE1LDcgQEAKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbjsKIAorCXRyYWNlX2t2bV9tbXVfdW5zeW5jX3BhZ2Uoc3ApOwogCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKHNwLT5nZm4pOwogCWJ1Y2tldCA9ICZ2Y3B1LT5rdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07CiAJLyogZG9uJ3QgdW5zeW5jIGlmIHBhZ2V0YWJsZSBpcyBzaGFkb3dlZCB3aXRoIG11bHRpcGxlIHJvbGVzICovCkBAIC0xNjgyLDkgKzE3NTIsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNldF9zcHRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpzaGFkb3dfcHRlLAorc3RhdGljIGludCBzZXRfc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc3B0ZXAsCiAJCSAgICB1bnNpZ25lZCBwdGVfYWNjZXNzLCBpbnQgdXNlcl9mYXVsdCwKLQkJICAgIGludCB3cml0ZV9mYXVsdCwgaW50IGRpcnR5LCBpbnQgbGFyZ2VwYWdlLAorCQkgICAgaW50IHdyaXRlX2ZhdWx0LCBpbnQgZGlydHksIGludCBsZXZlbCwKIAkJICAgIGdmbl90IGdmbiwgcGZuX3QgcGZuLCBib29sIHNwZWN1bGF0aXZlLAogCQkgICAgYm9vbCBjYW5fdW5zeW5jKQogewpAQCAtMTcwNyw3ICsxNzc3LDcgQEAKIAkJc3B0ZSB8PSBzaGFkb3dfbnhfbWFzazsKIAlpZiAocHRlX2FjY2VzcyAmIEFDQ19VU0VSX01BU0spCiAJCXNwdGUgfD0gc2hhZG93X3VzZXJfbWFzazsKLQlpZiAobGFyZ2VwYWdlKQorCWlmIChsZXZlbCA+IFBUX1BBR0VfVEFCTEVfTEVWRUwpCiAJCXNwdGUgfD0gUFRfUEFHRV9TSVpFX01BU0s7CiAJaWYgKHRkcF9lbmFibGVkKQogCQlzcHRlIHw9IGt2bV94ODZfb3BzLT5nZXRfbXRfbWFzayh2Y3B1LCBnZm4sCkBAIC0xNzE4LDcgKzE3ODgsOCBAQAogCWlmICgocHRlX2FjY2VzcyAmIEFDQ19XUklURV9NQVNLKQogCSAgICB8fCAod3JpdGVfZmF1bHQgJiYgIWlzX3dyaXRlX3Byb3RlY3Rpb24odmNwdSkgJiYgIXVzZXJfZmF1bHQpKSB7CiAKLQkJaWYgKGxhcmdlcGFnZSAmJiBoYXNfd3Jwcm90ZWN0ZWRfcGFnZSh2Y3B1LT5rdm0sIGdmbikpIHsKKwkJaWYgKGxldmVsID4gUFRfUEFHRV9UQUJMRV9MRVZFTCAmJgorCQkgICAgaGFzX3dycHJvdGVjdGVkX3BhZ2UodmNwdS0+a3ZtLCBnZm4sIGxldmVsKSkgewogCQkJcmV0ID0gMTsKIAkJCXNwdGUgPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKIAkJCWdvdG8gc2V0X3B0ZTsKQEAgLTE3MzIsNyArMTgwMyw3IEBACiAJCSAqIGlzIHJlc3BvbnNpYmlsaXR5IG9mIG1tdV9nZXRfcGFnZSAvIGt2bV9zeW5jX3BhZ2UuCiAJCSAqIFNhbWUgcmVhc29uaW5nIGNhbiBiZSBhcHBsaWVkIHRvIGRpcnR5IHBhZ2UgYWNjb3VudGluZy4KIAkJICovCi0JCWlmICghY2FuX3Vuc3luYyAmJiBpc193cml0ZWJsZV9wdGUoKnNoYWRvd19wdGUpKQorCQlpZiAoIWNhbl91bnN5bmMgJiYgaXNfd3JpdGVibGVfcHRlKCpzcHRlcCkpCiAJCQlnb3RvIHNldF9wdGU7CiAKIAkJaWYgKG1tdV9uZWVkX3dyaXRlX3Byb3RlY3QodmNwdSwgZ2ZuLCBjYW5fdW5zeW5jKSkgewpAQCAtMTc0OSw2NSArMTgyMCw2NyBAQAogCQltYXJrX3BhZ2VfZGlydHkodmNwdS0+a3ZtLCBnZm4pOwogCiBzZXRfcHRlOgotCXNldF9zaGFkb3dfcHRlKHNoYWRvd19wdGUsIHNwdGUpOworCV9fc2V0X3NwdGUoc3B0ZXAsIHNwdGUpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG1tdV9zZXRfc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc2hhZG93X3B0ZSwKK3N0YXRpYyB2b2lkIG1tdV9zZXRfc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc3B0ZXAsCiAJCQkgdW5zaWduZWQgcHRfYWNjZXNzLCB1bnNpZ25lZCBwdGVfYWNjZXNzLAogCQkJIGludCB1c2VyX2ZhdWx0LCBpbnQgd3JpdGVfZmF1bHQsIGludCBkaXJ0eSwKLQkJCSBpbnQgKnB0d3JpdGUsIGludCBsYXJnZXBhZ2UsIGdmbl90IGdmbiwKKwkJCSBpbnQgKnB0d3JpdGUsIGludCBsZXZlbCwgZ2ZuX3QgZ2ZuLAogCQkJIHBmbl90IHBmbiwgYm9vbCBzcGVjdWxhdGl2ZSkKIHsKIAlpbnQgd2FzX3JtYXBwZWQgPSAwOwotCWludCB3YXNfd3JpdGVibGUgPSBpc193cml0ZWJsZV9wdGUoKnNoYWRvd19wdGUpOworCWludCB3YXNfd3JpdGVibGUgPSBpc193cml0ZWJsZV9wdGUoKnNwdGVwKTsKIAlpbnQgcm1hcF9jb3VudDsKIAogCXBncHJpbnRrKCIlczogc3B0ZSAlbGx4IGFjY2VzcyAleCB3cml0ZV9mYXVsdCAlZCIKIAkJICIgdXNlcl9mYXVsdCAlZCBnZm4gJWx4XG4iLAotCQkgX19mdW5jX18sICpzaGFkb3dfcHRlLCBwdF9hY2Nlc3MsCisJCSBfX2Z1bmNfXywgKnNwdGVwLCBwdF9hY2Nlc3MsCiAJCSB3cml0ZV9mYXVsdCwgdXNlcl9mYXVsdCwgZ2ZuKTsKIAotCWlmIChpc19ybWFwX3B0ZSgqc2hhZG93X3B0ZSkpIHsKKwlpZiAoaXNfcm1hcF9zcHRlKCpzcHRlcCkpIHsKIAkJLyoKIAkJICogSWYgd2Ugb3ZlcndyaXRlIGEgUFRFIHBhZ2UgcG9pbnRlciB3aXRoIGEgMk1CIFBNRCwgdW5saW5rCiAJCSAqIHRoZSBwYXJlbnQgb2YgdGhlIG5vdyB1bnJlYWNoYWJsZSBQVEUuCiAJCSAqLwotCQlpZiAobGFyZ2VwYWdlICYmICFpc19sYXJnZV9wdGUoKnNoYWRvd19wdGUpKSB7CisJCWlmIChsZXZlbCA+IFBUX1BBR0VfVEFCTEVfTEVWRUwgJiYKKwkJICAgICFpc19sYXJnZV9wdGUoKnNwdGVwKSkgewogCQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqY2hpbGQ7Ci0JCQl1NjQgcHRlID0gKnNoYWRvd19wdGU7CisJCQl1NjQgcHRlID0gKnNwdGVwOwogCiAJCQljaGlsZCA9IHBhZ2VfaGVhZGVyKHB0ZSAmIFBUNjRfQkFTRV9BRERSX01BU0spOwotCQkJbW11X3BhZ2VfcmVtb3ZlX3BhcmVudF9wdGUoY2hpbGQsIHNoYWRvd19wdGUpOwotCQl9IGVsc2UgaWYgKHBmbiAhPSBzcHRlX3RvX3Bmbigqc2hhZG93X3B0ZSkpIHsKKwkJCW1tdV9wYWdlX3JlbW92ZV9wYXJlbnRfcHRlKGNoaWxkLCBzcHRlcCk7CisJCX0gZWxzZSBpZiAocGZuICE9IHNwdGVfdG9fcGZuKCpzcHRlcCkpIHsKIAkJCXBncHJpbnRrKCJoZm4gb2xkICVseCBuZXcgJWx4XG4iLAotCQkJCSBzcHRlX3RvX3Bmbigqc2hhZG93X3B0ZSksIHBmbik7Ci0JCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNoYWRvd19wdGUpOworCQkJCSBzcHRlX3RvX3Bmbigqc3B0ZXApLCBwZm4pOworCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7CiAJCX0gZWxzZQogCQkJd2FzX3JtYXBwZWQgPSAxOwogCX0KLQlpZiAoc2V0X3NwdGUodmNwdSwgc2hhZG93X3B0ZSwgcHRlX2FjY2VzcywgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCi0JCSAgICAgIGRpcnR5LCBsYXJnZXBhZ2UsIGdmbiwgcGZuLCBzcGVjdWxhdGl2ZSwgdHJ1ZSkpIHsKKworCWlmIChzZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgcHRlX2FjY2VzcywgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCisJCSAgICAgIGRpcnR5LCBsZXZlbCwgZ2ZuLCBwZm4sIHNwZWN1bGF0aXZlLCB0cnVlKSkgewogCQlpZiAod3JpdGVfZmF1bHQpCiAJCQkqcHR3cml0ZSA9IDE7CiAJCWt2bV94ODZfb3BzLT50bGJfZmx1c2godmNwdSk7CiAJfQogCi0JcGdwcmludGsoIiVzOiBzZXR0aW5nIHNwdGUgJWxseFxuIiwgX19mdW5jX18sICpzaGFkb3dfcHRlKTsKKwlwZ3ByaW50aygiJXM6IHNldHRpbmcgc3B0ZSAlbGx4XG4iLCBfX2Z1bmNfXywgKnNwdGVwKTsKIAlwZ3ByaW50aygiaW5zdGFudGlhdGluZyAlcyBQVEUgKCVzKSBhdCAlbGQgKCVsbHgpIGFkZHIgJXBcbiIsCi0JCSBpc19sYXJnZV9wdGUoKnNoYWRvd19wdGUpPyAiMk1CIiA6ICI0a0IiLAotCQkgaXNfcHJlc2VudF9wdGUoKnNoYWRvd19wdGUpPyJSVyI6IlIiLCBnZm4sCi0JCSAqc2hhZG93X3B0ZSwgc2hhZG93X3B0ZSk7Ci0JaWYgKCF3YXNfcm1hcHBlZCAmJiBpc19sYXJnZV9wdGUoKnNoYWRvd19wdGUpKQorCQkgaXNfbGFyZ2VfcHRlKCpzcHRlcCk/ICIyTUIiIDogIjRrQiIsCisJCSAqc3B0ZXAgJiBQVF9QUkVTRU5UX01BU0sgPyJSVyI6IlIiLCBnZm4sCisJCSAqc3B0ZXAsIHNwdGVwKTsKKwlpZiAoIXdhc19ybWFwcGVkICYmIGlzX2xhcmdlX3B0ZSgqc3B0ZXApKQogCQkrK3ZjcHUtPmt2bS0+c3RhdC5scGFnZXM7CiAKLQlwYWdlX2hlYWRlcl91cGRhdGVfc2xvdCh2Y3B1LT5rdm0sIHNoYWRvd19wdGUsIGdmbik7CisJcGFnZV9oZWFkZXJfdXBkYXRlX3Nsb3QodmNwdS0+a3ZtLCBzcHRlcCwgZ2ZuKTsKIAlpZiAoIXdhc19ybWFwcGVkKSB7Ci0JCXJtYXBfY291bnQgPSBybWFwX2FkZCh2Y3B1LCBzaGFkb3dfcHRlLCBnZm4sIGxhcmdlcGFnZSk7Ci0JCWlmICghaXNfcm1hcF9wdGUoKnNoYWRvd19wdGUpKQorCQlybWFwX2NvdW50ID0gcm1hcF9hZGQodmNwdSwgc3B0ZXAsIGdmbik7CisJCWlmICghaXNfcm1hcF9zcHRlKCpzcHRlcCkpCiAJCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKIAkJaWYgKHJtYXBfY291bnQgPiBSTUFQX1JFQ1lDTEVfVEhSRVNIT0xEKQotCQkJcm1hcF9yZWN5Y2xlKHZjcHUsIGdmbiwgbGFyZ2VwYWdlKTsKKwkJCXJtYXBfcmVjeWNsZSh2Y3B1LCBzcHRlcCwgZ2ZuKTsKIAl9IGVsc2UgewogCQlpZiAod2FzX3dyaXRlYmxlKQogCQkJa3ZtX3JlbGVhc2VfcGZuX2RpcnR5KHBmbik7CkBAIC0xODE1LDcgKzE4ODgsNyBAQAogCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CiAJfQogCWlmIChzcGVjdWxhdGl2ZSkgewotCQl2Y3B1LT5hcmNoLmxhc3RfcHRlX3VwZGF0ZWQgPSBzaGFkb3dfcHRlOworCQl2Y3B1LT5hcmNoLmxhc3RfcHRlX3VwZGF0ZWQgPSBzcHRlcDsKIAkJdmNwdS0+YXJjaC5sYXN0X3B0ZV9nZm4gPSBnZm47CiAJfQogfQpAQCAtMTgyNSw3ICsxODk4LDcgQEAKIH0KIAogc3RhdGljIGludCBfX2RpcmVjdF9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCB2LCBpbnQgd3JpdGUsCi0JCQlpbnQgbGFyZ2VwYWdlLCBnZm5fdCBnZm4sIHBmbl90IHBmbikKKwkJCWludCBsZXZlbCwgZ2ZuX3QgZ2ZuLCBwZm5fdCBwZm4pCiB7CiAJc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciBpdGVyYXRvcjsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKQEAgLTE4MzMsMTEgKzE5MDYsMTAgQEAKIAlnZm5fdCBwc2V1ZG9fZ2ZuOwogCiAJZm9yX2VhY2hfc2hhZG93X2VudHJ5KHZjcHUsICh1NjQpZ2ZuIDw8IFBBR0VfU0hJRlQsIGl0ZXJhdG9yKSB7Ci0JCWlmIChpdGVyYXRvci5sZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMCi0JCSAgICB8fCAobGFyZ2VwYWdlICYmIGl0ZXJhdG9yLmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkpIHsKKwkJaWYgKGl0ZXJhdG9yLmxldmVsID09IGxldmVsKSB7CiAJCQltbXVfc2V0X3NwdGUodmNwdSwgaXRlcmF0b3Iuc3B0ZXAsIEFDQ19BTEwsIEFDQ19BTEwsCiAJCQkJICAgICAwLCB3cml0ZSwgMSwgJnB0X3dyaXRlLAotCQkJCSAgICAgbGFyZ2VwYWdlLCBnZm4sIHBmbiwgZmFsc2UpOworCQkJCSAgICAgbGV2ZWwsIGdmbiwgcGZuLCBmYWxzZSk7CiAJCQkrK3ZjcHUtPnN0YXQucGZfZml4ZWQ7CiAJCQlicmVhazsKIAkJfQpAQCAtMTg1MywxMCArMTkyNSwxMCBAQAogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCi0JCQlzZXRfc2hhZG93X3B0ZShpdGVyYXRvci5zcHRlcCwKLQkJCQkgICAgICAgX19wYShzcC0+c3B0KQotCQkJCSAgICAgICB8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX1dSSVRBQkxFX01BU0sKLQkJCQkgICAgICAgfCBzaGFkb3dfdXNlcl9tYXNrIHwgc2hhZG93X3hfbWFzayk7CisJCQlfX3NldF9zcHRlKGl0ZXJhdG9yLnNwdGVwLAorCQkJCSAgIF9fcGEoc3AtPnNwdCkKKwkJCQkgICB8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX1dSSVRBQkxFX01BU0sKKwkJCQkgICB8IHNoYWRvd191c2VyX21hc2sgfCBzaGFkb3dfeF9tYXNrKTsKIAkJfQogCX0KIAlyZXR1cm4gcHRfd3JpdGU7CkBAIC0xODY1LDE0ICsxOTM3LDIwIEBACiBzdGF0aWMgaW50IG5vbnBhZ2luZ19tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2LCBpbnQgd3JpdGUsIGdmbl90IGdmbikKIHsKIAlpbnQgcjsKLQlpbnQgbGFyZ2VwYWdlID0gMDsKKwlpbnQgbGV2ZWw7CiAJcGZuX3QgcGZuOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIAotCWlmIChpc19sYXJnZXBhZ2VfYmFja2VkKHZjcHUsIGdmbiAmIH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKSkpIHsKLQkJZ2ZuICY9IH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKTsKLQkJbGFyZ2VwYWdlID0gMTsKLQl9CisJbGV2ZWwgPSBtYXBwaW5nX2xldmVsKHZjcHUsIGdmbik7CisKKwkvKgorCSAqIFRoaXMgcGF0aCBidWlsZHMgYSBQQUUgcGFnZXRhYmxlIC0gc28gd2UgY2FuIG1hcCAybWIgcGFnZXMgYXQKKwkgKiBtYXhpbXVtLiBUaGVyZWZvcmUgY2hlY2sgaWYgdGhlIGxldmVsIGlzIGxhcmdlciB0aGFuIHRoYXQuCisJICovCisJaWYgKGxldmVsID4gUFRfRElSRUNUT1JZX0xFVkVMKQorCQlsZXZlbCA9IFBUX0RJUkVDVE9SWV9MRVZFTDsKKworCWdmbiAmPSB+KEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpIC0gMSk7CiAKIAltbXVfc2VxID0gdmNwdS0+a3ZtLT5tbXVfbm90aWZpZXJfc2VxOwogCXNtcF9ybWIoKTsKQEAgLTE4ODgsNyArMTk2Niw3IEBACiAJaWYgKG1tdV9ub3RpZmllcl9yZXRyeSh2Y3B1LCBtbXVfc2VxKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCWt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHZjcHUpOwotCXIgPSBfX2RpcmVjdF9tYXAodmNwdSwgdiwgd3JpdGUsIGxhcmdlcGFnZSwgZ2ZuLCBwZm4pOworCXIgPSBfX2RpcmVjdF9tYXAodmNwdSwgdiwgd3JpdGUsIGxldmVsLCBnZm4sIHBmbik7CiAJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCiAKQEAgLTE5NTQsNiArMjAzMiw3IEBACiAJZ2ZuX3Qgcm9vdF9nZm47CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiAJaW50IGRpcmVjdCA9IDA7CisJdTY0IHBkcHRyOwogCiAJcm9vdF9nZm4gPSB2Y3B1LT5hcmNoLmNyMyA+PiBQQUdFX1NISUZUOwogCkBAIC0xOTgxLDExICsyMDYwLDEyIEBACiAKIAkJQVNTRVJUKCFWQUxJRF9QQUdFKHJvb3QpKTsKIAkJaWYgKHZjcHUtPmFyY2gubW11LnJvb3RfbGV2ZWwgPT0gUFQzMkVfUk9PVF9MRVZFTCkgewotCQkJaWYgKCFpc19wcmVzZW50X3B0ZSh2Y3B1LT5hcmNoLnBkcHRyc1tpXSkpIHsKKwkJCXBkcHRyID0ga3ZtX3BkcHRyX3JlYWQodmNwdSwgaSk7CisJCQlpZiAoIWlzX3ByZXNlbnRfZ3B0ZShwZHB0cikpIHsKIAkJCQl2Y3B1LT5hcmNoLm1tdS5wYWVfcm9vdFtpXSA9IDA7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlyb290X2dmbiA9IHZjcHUtPmFyY2gucGRwdHJzW2ldID4+IFBBR0VfU0hJRlQ7CisJCQlyb290X2dmbiA9IHBkcHRyID4+IFBBR0VfU0hJRlQ7CiAJCX0gZWxzZSBpZiAodmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbCA9PSAwKQogCQkJcm9vdF9nZm4gPSAwOwogCQlpZiAobW11X2NoZWNrX3Jvb3QodmNwdSwgcm9vdF9nZm4pKQpAQCAtMjA2Miw3ICsyMTQyLDcgQEAKIHsKIAlwZm5fdCBwZm47CiAJaW50IHI7Ci0JaW50IGxhcmdlcGFnZSA9IDA7CisJaW50IGxldmVsOwogCWdmbl90IGdmbiA9IGdwYSA+PiBQQUdFX1NISUZUOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIApAQCAtMjA3MywxMCArMjE1MywxMCBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCWlmIChpc19sYXJnZXBhZ2VfYmFja2VkKHZjcHUsIGdmbiAmIH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKSkpIHsKLQkJZ2ZuICY9IH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKTsKLQkJbGFyZ2VwYWdlID0gMTsKLQl9CisJbGV2ZWwgPSBtYXBwaW5nX2xldmVsKHZjcHUsIGdmbik7CisKKwlnZm4gJj0gfihLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKSAtIDEpOworCiAJbW11X3NlcSA9IHZjcHUtPmt2bS0+bW11X25vdGlmaWVyX3NlcTsKIAlzbXBfcm1iKCk7CiAJcGZuID0gZ2ZuX3RvX3Bmbih2Y3B1LT5rdm0sIGdmbik7CkBAIC0yMDg5LDcgKzIxNjksNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJa3ZtX21tdV9mcmVlX3NvbWVfcGFnZXModmNwdSk7CiAJciA9IF9fZGlyZWN0X21hcCh2Y3B1LCBncGEsIGVycm9yX2NvZGUgJiBQRkVSUl9XUklURV9NQVNLLAotCQkJIGxhcmdlcGFnZSwgZ2ZuLCBwZm4pOworCQkJIGxldmVsLCBnZm4sIHBmbik7CiAJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCiAJcmV0dXJuIHI7CkBAIC0yMjA2LDcgKzIyODYsOSBAQAogCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1swXVswXSA9IGV4Yl9iaXRfcnN2ZCB8CiAJCQlyc3ZkX2JpdHMobWF4cGh5YWRkciwgNTEpOwogCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1sxXVszXSA9IGNvbnRleHQtPnJzdmRfYml0c19tYXNrWzBdWzNdOwotCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1sxXVsyXSA9IGNvbnRleHQtPnJzdmRfYml0c19tYXNrWzBdWzJdOworCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1sxXVsyXSA9IGV4Yl9iaXRfcnN2ZCB8CisJCQlyc3ZkX2JpdHMobWF4cGh5YWRkciwgNTEpIHwKKwkJCXJzdmRfYml0cygxMywgMjkpOwogCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1sxXVsxXSA9IGV4Yl9iaXRfcnN2ZCB8CiAJCQlyc3ZkX2JpdHMobWF4cGh5YWRkciwgNTEpIHwKIAkJCXJzdmRfYml0cygxMywgMjApOwkJLyogbGFyZ2UgcGFnZSAqLwpAQCAtMjM1Nyw4ICsyNDM5LDggQEAKIAlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OworCS8qIHNldF9jcjMoKSBzaG91bGQgZW5zdXJlIFRMQiBoYXMgYmVlbiBmbHVzaGVkICovCiAJa3ZtX3g4Nl9vcHMtPnNldF9jcjModmNwdSwgdmNwdS0+YXJjaC5tbXUucm9vdF9ocGEpOwotCWt2bV9tbXVfZmx1c2hfdGxiKHZjcHUpOwogb3V0OgogCXJldHVybiByOwogfQpAQCAtMjM3OCwxNSArMjQ2MCwxNCBAQAogCiAJcHRlID0gKnNwdGU7CiAJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShwdGUpKSB7Ci0JCWlmIChzcC0+cm9sZS5sZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMIHx8Ci0JCSAgICBpc19sYXJnZV9wdGUocHRlKSkKKwkJaWYgKGlzX2xhc3Rfc3B0ZShwdGUsIHNwLT5yb2xlLmxldmVsKSkKIAkJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc3B0ZSk7CiAJCWVsc2UgewogCQkJY2hpbGQgPSBwYWdlX2hlYWRlcihwdGUgJiBQVDY0X0JBU0VfQUREUl9NQVNLKTsKIAkJCW1tdV9wYWdlX3JlbW92ZV9wYXJlbnRfcHRlKGNoaWxkLCBzcHRlKTsKIAkJfQogCX0KLQlzZXRfc2hhZG93X3B0ZShzcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJX19zZXRfc3B0ZShzcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CiAJaWYgKGlzX2xhcmdlX3B0ZShwdGUpKQogCQktLXZjcHUtPmt2bS0+c3RhdC5scGFnZXM7CiB9CkBAIC0yMzk3LDExICsyNDc4LDggQEAKIAkJCQkgIGNvbnN0IHZvaWQgKm5ldykKIHsKIAlpZiAoc3AtPnJvbGUubGV2ZWwgIT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkgewotCQlpZiAoIXZjcHUtPmFyY2gudXBkYXRlX3B0ZS5sYXJnZXBhZ2UgfHwKLQkJICAgIHNwLT5yb2xlLmdsZXZlbHMgPT0gUFQzMl9ST09UX0xFVkVMKSB7Ci0JCQkrK3ZjcHUtPmt2bS0+c3RhdC5tbXVfcGRlX3phcHBlZDsKLQkJCXJldHVybjsKLQkJfQorCQkrK3ZjcHUtPmt2bS0+c3RhdC5tbXVfcGRlX3phcHBlZDsKKwkJcmV0dXJuOwogICAgICAgICB9CiAKIAkrK3ZjcHUtPmt2bS0+c3RhdC5tbXVfcHRlX3VwZGF0ZWQ7CkBAIC0yNDQ3LDggKzI1MjUsNiBAQAogCXU2NCBncHRlID0gMDsKIAlwZm5fdCBwZm47CiAKLQl2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUubGFyZ2VwYWdlID0gMDsKLQogCWlmIChieXRlcyAhPSA0ICYmIGJ5dGVzICE9IDgpCiAJCXJldHVybjsKIApAQCAtMjQ3MiwxNCArMjU0OCwxMCBAQAogCQlpZiAoKGJ5dGVzID09IDQpICYmIChncGEgJSA0ID09IDApKQogCQkJbWVtY3B5KCh2b2lkICopJmdwdGUsIG5ldywgNCk7CiAJfQotCWlmICghaXNfcHJlc2VudF9wdGUoZ3B0ZSkpCisJaWYgKCFpc19wcmVzZW50X2dwdGUoZ3B0ZSkpCiAJCXJldHVybjsKIAlnZm4gPSAoZ3B0ZSAmIFBUNjRfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CiAKLQlpZiAoaXNfbGFyZ2VfcHRlKGdwdGUpICYmIGlzX2xhcmdlcGFnZV9iYWNrZWQodmNwdSwgZ2ZuKSkgewotCQlnZm4gJj0gfihLVk1fUEFHRVNfUEVSX0hQQUdFLTEpOwotCQl2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUubGFyZ2VwYWdlID0gMTsKLQl9CiAJdmNwdS0+YXJjaC51cGRhdGVfcHRlLm1tdV9zZXEgPSB2Y3B1LT5rdm0tPm1tdV9ub3RpZmllcl9zZXE7CiAJc21wX3JtYigpOwogCXBmbiA9IGdmbl90b19wZm4odmNwdS0+a3ZtLCBnZm4pOwpAQCAtMjYyMiw2ICsyNjk0LDkgQEAKIAlncGFfdCBncGE7CiAJaW50IHI7CiAKKwlpZiAodGRwX2VuYWJsZWQpCisJCXJldHVybiAwOworCiAJZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBndmEpOwogCiAJc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKQEAgLTI2MzMsNyArMjcwOCw4IEBACiAKIHZvaWQgX19rdm1fbW11X2ZyZWVfc29tZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jd2hpbGUgKHZjcHUtPmt2bS0+YXJjaC5uX2ZyZWVfbW11X3BhZ2VzIDwgS1ZNX1JFRklMTF9QQUdFUykgeworCXdoaWxlICh2Y3B1LT5rdm0tPmFyY2gubl9mcmVlX21tdV9wYWdlcyA8IEtWTV9SRUZJTExfUEFHRVMgJiYKKwkgICAgICAgIWxpc3RfZW1wdHkoJnZjcHUtPmt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzKSkgewogCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKIAogCQlzcCA9IGNvbnRhaW5lcl9vZih2Y3B1LT5rdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcy5wcmV2LApAQCAtMjY3MCw4ICsyNzQ2LDkgQEAKIAkJKyt2Y3B1LT5zdGF0Lm1taW9fZXhpdHM7CiAJCXJldHVybiAwOwogCWNhc2UgRU1VTEFURV9GQUlMOgotCQlrdm1fcmVwb3J0X2VtdWxhdGlvbl9mYWlsdXJlKHZjcHUsICJwYWdldGFibGUiKTsKLQkJcmV0dXJuIDE7CisJCXZjcHUtPnJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUjsKKwkJdmNwdS0+cnVuLT5pbnRlcm5hbC5zdWJlcnJvciA9IEtWTV9JTlRFUk5BTF9FUlJPUl9FTVVMQVRJT047CisJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KQEAgLTI3MTIsMTIgKzI3ODksNiBAQAogCiAJQVNTRVJUKHZjcHUpOwogCi0JaWYgKHZjcHUtPmt2bS0+YXJjaC5uX3JlcXVlc3RlZF9tbXVfcGFnZXMpCi0JCXZjcHUtPmt2bS0+YXJjaC5uX2ZyZWVfbW11X3BhZ2VzID0KLQkJCQkJdmNwdS0+a3ZtLT5hcmNoLm5fcmVxdWVzdGVkX21tdV9wYWdlczsKLQllbHNlCi0JCXZjcHUtPmt2bS0+YXJjaC5uX2ZyZWVfbW11X3BhZ2VzID0KLQkJCQkJdmNwdS0+a3ZtLT5hcmNoLm5fYWxsb2NfbW11X3BhZ2VzOwogCS8qCiAJICogV2hlbiBlbXVsYXRpbmcgMzItYml0IG1vZGUsIGNyMyBpcyBvbmx5IDMyIGJpdHMgZXZlbiBvbiB4ODZfNjQuCiAJICogVGhlcmVmb3JlIHdlIG5lZWQgdG8gYWxsb2NhdGUgc2hhZG93IHBhZ2UgdGFibGVzIGluIHRoZSBmaXJzdApAQCAtMzAyOSw2ICszMTAwLDI0IEBACiAJcmV0dXJuIHI7CiB9CiAKK2ludCBrdm1fbW11X2dldF9zcHRlX2hpZXJhcmNoeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLCB1NjQgc3B0ZXNbNF0pCit7CisJc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciBpdGVyYXRvcjsKKwlpbnQgbnJfc3B0ZXMgPSAwOworCisJc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKKwlmb3JfZWFjaF9zaGFkb3dfZW50cnkodmNwdSwgYWRkciwgaXRlcmF0b3IpIHsKKwkJc3B0ZXNbaXRlcmF0b3IubGV2ZWwtMV0gPSAqaXRlcmF0b3Iuc3B0ZXA7CisJCW5yX3NwdGVzKys7CisJCWlmICghaXNfc2hhZG93X3ByZXNlbnRfcHRlKCppdGVyYXRvci5zcHRlcCkpCisJCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOworCisJcmV0dXJuIG5yX3NwdGVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX21tdV9nZXRfc3B0ZV9oaWVyYXJjaHkpOworCiAjaWZkZWYgQVVESVQKIAogc3RhdGljIGNvbnN0IGNoYXIgKmF1ZGl0X21zZzsKQEAgLTMwNDEsNiArMzEzMCw1NCBAQAogCXJldHVybiBndmE7CiB9CiAKKwordHlwZWRlZiB2b2lkICgqaW5zcGVjdF9zcHRlX2ZuKSAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKKwkJCQkgdTY0ICpzcHRlcCk7CisKK3N0YXRpYyB2b2lkIF9fbW11X3NwdGVfd2FsayhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLAorCQkJICAgIGluc3BlY3Rfc3B0ZV9mbiBmbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQVDY0X0VOVF9QRVJfUEFHRTsgKytpKSB7CisJCXU2NCBlbnQgPSBzcC0+c3B0W2ldOworCisJCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoZW50KSkgeworCQkJaWYgKCFpc19sYXN0X3NwdGUoZW50LCBzcC0+cm9sZS5sZXZlbCkpIHsKKwkJCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpjaGlsZDsKKwkJCQljaGlsZCA9IHBhZ2VfaGVhZGVyKGVudCAmIFBUNjRfQkFTRV9BRERSX01BU0spOworCQkJCV9fbW11X3NwdGVfd2Fsayhrdm0sIGNoaWxkLCBmbik7CisJCQl9IGVsc2UKKwkJCQlmbihrdm0sIHNwLCAmc3AtPnNwdFtpXSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1tdV9zcHRlX3dhbGsoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnNwZWN0X3NwdGVfZm4gZm4pCit7CisJaW50IGk7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CisKKwlpZiAoIVZBTElEX1BBR0UodmNwdS0+YXJjaC5tbXUucm9vdF9ocGEpKQorCQlyZXR1cm47CisJaWYgKHZjcHUtPmFyY2gubW11LnNoYWRvd19yb290X2xldmVsID09IFBUNjRfUk9PVF9MRVZFTCkgeworCQlocGFfdCByb290ID0gdmNwdS0+YXJjaC5tbXUucm9vdF9ocGE7CisJCXNwID0gcGFnZV9oZWFkZXIocm9vdCk7CisJCV9fbW11X3NwdGVfd2Fsayh2Y3B1LT5rdm0sIHNwLCBmbik7CisJCXJldHVybjsKKwl9CisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgeworCQlocGFfdCByb290ID0gdmNwdS0+YXJjaC5tbXUucGFlX3Jvb3RbaV07CisKKwkJaWYgKHJvb3QgJiYgVkFMSURfUEFHRShyb290KSkgeworCQkJcm9vdCAmPSBQVDY0X0JBU0VfQUREUl9NQVNLOworCQkJc3AgPSBwYWdlX2hlYWRlcihyb290KTsKKwkJCV9fbW11X3NwdGVfd2Fsayh2Y3B1LT5rdm0sIHNwLCBmbik7CisJCX0KKwl9CisJcmV0dXJuOworfQorCiBzdGF0aWMgdm9pZCBhdWRpdF9tYXBwaW5nc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhZ2VfcHRlLAogCQkJCWd2YV90IHZhLCBpbnQgbGV2ZWwpCiB7CkBAIC0zMDU1LDIwICszMTkyLDE5IEBACiAJCQljb250aW51ZTsKIAogCQl2YSA9IGNhbm9uaWNhbGl6ZSh2YSk7Ci0JCWlmIChsZXZlbCA+IDEpIHsKLQkJCWlmIChlbnQgPT0gc2hhZG93X25vdHJhcF9ub25wcmVzZW50X3B0ZSkKLQkJCQlwcmludGsoS0VSTl9FUlIgImF1ZGl0OiAoJXMpIG5vbnRyYXBwaW5nIHB0ZSIKLQkJCQkgICAgICAgIiBpbiBub25sZWFmIGxldmVsOiBsZXZlbHMgJWQgZ3ZhICVseCIKLQkJCQkgICAgICAgIiBsZXZlbCAlZCBwdGUgJWxseFxuIiwgYXVkaXRfbXNnLAotCQkJCSAgICAgICB2Y3B1LT5hcmNoLm1tdS5yb290X2xldmVsLCB2YSwgbGV2ZWwsIGVudCk7Ci0JCQllbHNlCi0JCQkJYXVkaXRfbWFwcGluZ3NfcGFnZSh2Y3B1LCBlbnQsIHZhLCBsZXZlbCAtIDEpOwotCQl9IGVsc2UgeworCQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKGVudCkgJiYgIWlzX2xhc3Rfc3B0ZShlbnQsIGxldmVsKSkKKwkJCWF1ZGl0X21hcHBpbmdzX3BhZ2UodmNwdSwgZW50LCB2YSwgbGV2ZWwgLSAxKTsKKwkJZWxzZSB7CiAJCQlncGFfdCBncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIHZhKTsKIAkJCWdmbl90IGdmbiA9IGdwYSA+PiBQQUdFX1NISUZUOwogCQkJcGZuX3QgcGZuID0gZ2ZuX3RvX3Bmbih2Y3B1LT5rdm0sIGdmbik7CiAJCQlocGFfdCBocGEgPSAoaHBhX3QpcGZuIDw8IFBBR0VfU0hJRlQ7CiAKKwkJCWlmIChpc19lcnJvcl9wZm4ocGZuKSkgeworCQkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOworCQkJCWNvbnRpbnVlOworCQkJfQorCiAJCQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKGVudCkKIAkJCSAgICAmJiAoZW50ICYgUFQ2NF9CQVNFX0FERFJfTUFTSykgIT0gaHBhKQogCQkJCXByaW50ayhLRVJOX0VSUiAieHggYXVkaXQgZXJyb3I6ICglcykgbGV2ZWxzICVkIgpAQCAtMzEyMiw3ICszMjU4LDcgQEAKIAkJCWQgPSAoc3RydWN0IGt2bV9ybWFwX2Rlc2MgKikoKnJtYXBwICYgfjF1bCk7CiAJCQl3aGlsZSAoZCkgewogCQkJCWZvciAoayA9IDA7IGsgPCBSTUFQX0VYVDsgKytrKQotCQkJCQlpZiAoZC0+c2hhZG93X3B0ZXNba10pCisJCQkJCWlmIChkLT5zcHRlc1trXSkKIAkJCQkJCSsrbm1hcHM7CiAJCQkJCWVsc2UKIAkJCQkJCWJyZWFrOwpAQCAtMzEzMyw5ICszMjY5LDQ4IEBACiAJcmV0dXJuIG5tYXBzOwogfQogCi1zdGF0aWMgaW50IGNvdW50X3dyaXRhYmxlX21hcHBpbmdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3ZvaWQgaW5zcGVjdF9zcHRlX2hhc19ybWFwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHU2NCAqc3B0ZXApCiB7Ci0JaW50IG5tYXBzID0gMDsKKwl1bnNpZ25lZCBsb25nICpybWFwcDsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyZXZfc3A7CisJZ2ZuX3QgZ2ZuOworCisJaWYgKCpzcHRlcCAmIFBUX1dSSVRBQkxFX01BU0spIHsKKwkJcmV2X3NwID0gcGFnZV9oZWFkZXIoX19wYShzcHRlcCkpOworCQlnZm4gPSByZXZfc3AtPmdmbnNbc3B0ZXAgLSByZXZfc3AtPnNwdF07CisKKwkJaWYgKCFnZm5fdG9fbWVtc2xvdChrdm0sIGdmbikpIHsKKwkJCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCXJldHVybjsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIG1lbXNsb3QgZm9yIGdmbiAlbGRcbiIsCisJCQkJCSBhdWRpdF9tc2csIGdmbik7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbmRleCAlbGQgb2Ygc3AgKGdmbj0lbHgpXG4iLAorCQkJCQlhdWRpdF9tc2csIHNwdGVwIC0gcmV2X3NwLT5zcHQsCisJCQkJCXJldl9zcC0+Z2ZuKTsKKwkJCWR1bXBfc3RhY2soKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXJtYXBwID0gZ2ZuX3RvX3JtYXAoa3ZtLCByZXZfc3AtPmdmbnNbc3B0ZXAgLSByZXZfc3AtPnNwdF0sCisJCQkJICAgIGlzX2xhcmdlX3B0ZSgqc3B0ZXApKTsKKwkJaWYgKCEqcm1hcHApIHsKKwkJCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCXJldHVybjsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIHJtYXAgZm9yIHdyaXRhYmxlIHNwdGUgJWxseFxuIiwKKwkJCQkJIGF1ZGl0X21zZywgKnNwdGVwKTsKKwkJCWR1bXBfc3RhY2soKTsKKwkJfQorCX0KKworfQorCit2b2lkIGF1ZGl0X3dyaXRhYmxlX3NwdGVzX2hhdmVfcm1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCW1tdV9zcHRlX3dhbGsodmNwdSwgaW5zcGVjdF9zcHRlX2hhc19ybWFwKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfd3JpdGFibGVfbWFwcGluZ3Nfcm1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiAJaW50IGk7CiAKQEAgLTMxNTIsMjAgKzMzMjcsMTYgQEAKIAkJCQljb250aW51ZTsKIAkJCWlmICghKGVudCAmIFBUX1dSSVRBQkxFX01BU0spKQogCQkJCWNvbnRpbnVlOwotCQkJKytubWFwczsKKwkJCWluc3BlY3Rfc3B0ZV9oYXNfcm1hcCh2Y3B1LT5rdm0sIHNwLCAmcHRbaV0pOwogCQl9CiAJfQotCXJldHVybiBubWFwczsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGF1ZGl0X3JtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWludCBuX3JtYXAgPSBjb3VudF9ybWFwcyh2Y3B1KTsKLQlpbnQgbl9hY3R1YWwgPSBjb3VudF93cml0YWJsZV9tYXBwaW5ncyh2Y3B1KTsKLQotCWlmIChuX3JtYXAgIT0gbl9hY3R1YWwpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICglcykgcm1hcCAlZCBhY3R1YWwgJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgYXVkaXRfbXNnLCBuX3JtYXAsIG5fYWN0dWFsKTsKKwljaGVja193cml0YWJsZV9tYXBwaW5nc19ybWFwKHZjcHUpOworCWNvdW50X3JtYXBzKHZjcHUpOwogfQogCiBzdGF0aWMgdm9pZCBhdWRpdF93cml0ZV9wcm90ZWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTMxNzMsMjAgKzMzNDQsMjggQEAKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCXVuc2lnbmVkIGxvbmcgKnJtYXBwOworCXU2NCAqc3B0ZTsKIAlnZm5fdCBnZm47CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNwLCAmdmNwdS0+a3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMsIGxpbmspIHsKIAkJaWYgKHNwLT5yb2xlLmRpcmVjdCkKIAkJCWNvbnRpbnVlOworCQlpZiAoc3AtPnVuc3luYykKKwkJCWNvbnRpbnVlOwogCiAJCWdmbiA9IHVuYWxpYXNfZ2ZuKHZjcHUtPmt2bSwgc3AtPmdmbik7CiAJCXNsb3QgPSBnZm5fdG9fbWVtc2xvdF91bmFsaWFzZWQodmNwdS0+a3ZtLCBzcC0+Z2ZuKTsKIAkJcm1hcHAgPSAmc2xvdC0+cm1hcFtnZm4gLSBzbG90LT5iYXNlX2dmbl07Ci0JCWlmICgqcm1hcHApCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiAoJXMpIHNoYWRvdyBwYWdlIGhhcyB3cml0YWJsZSIKLQkJCSAgICAgICAiIG1hcHBpbmdzOiBnZm4gJWx4IHJvbGUgJXhcbiIsCisKKwkJc3B0ZSA9IHJtYXBfbmV4dCh2Y3B1LT5rdm0sIHJtYXBwLCBOVUxMKTsKKwkJd2hpbGUgKHNwdGUpIHsKKwkJCWlmICgqc3B0ZSAmIFBUX1dSSVRBQkxFX01BU0spCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogKCVzKSBzaGFkb3cgcGFnZSBoYXMgIgorCQkJCSJ3cml0YWJsZSBtYXBwaW5nczogZ2ZuICVseCByb2xlICV4XG4iLAogCQkJICAgICAgIF9fZnVuY19fLCBhdWRpdF9tc2csIHNwLT5nZm4sCiAJCQkgICAgICAgc3AtPnJvbGUud29yZCk7CisJCQlzcHRlID0gcm1hcF9uZXh0KHZjcHUtPmt2bSwgcm1hcHAsIHNwdGUpOworCQl9CiAJfQogfQogCkBAIC0zMTk4LDcgKzMzNzcsOSBAQAogCWF1ZGl0X21zZyA9IG1zZzsKIAlhdWRpdF9ybWFwKHZjcHUpOwogCWF1ZGl0X3dyaXRlX3Byb3RlY3Rpb24odmNwdSk7Ci0JYXVkaXRfbWFwcGluZ3ModmNwdSk7CisJaWYgKHN0cmNtcCgicHJlIHB0ZSB3cml0ZSIsIGF1ZGl0X21zZykgIT0gMCkKKwkJYXVkaXRfbWFwcGluZ3ModmNwdSk7CisJYXVkaXRfd3JpdGFibGVfc3B0ZXNfaGF2ZV9ybWFwcyh2Y3B1KTsKIAlkYmcgPSBvbGRkYmc7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuaCBiL2FyY2gveDg2L2t2bS9tbXUuaAppbmRleCAzNDk0YTJmLi42MWExYjM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmgKKysrIGIvYXJjaC94ODYva3ZtL21tdS5oCkBAIC0zNyw2ICszNyw4IEBACiAjZGVmaW5lIFBUMzJfUk9PVF9MRVZFTCAyCiAjZGVmaW5lIFBUMzJFX1JPT1RfTEVWRUwgMwogCitpbnQga3ZtX21tdV9nZXRfc3B0ZV9oaWVyYXJjaHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgdTY0IHNwdGVzWzRdKTsKKwogc3RhdGljIGlubGluZSB2b2lkIGt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpZiAodW5saWtlbHkodmNwdS0+a3ZtLT5hcmNoLm5fZnJlZV9tbXVfcGFnZXMgPCBLVk1fTUlOX0ZSRUVfTU1VX1BBR0VTKSkKQEAgLTc1LDcgKzc3LDcgQEAKIAlyZXR1cm4gdmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1BHOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpc19wcmVzZW50X3B0ZSh1bnNpZ25lZCBsb25nIHB0ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3ByZXNlbnRfZ3B0ZSh1bnNpZ25lZCBsb25nIHB0ZSkKIHsKIAlyZXR1cm4gcHRlICYgUFRfUFJFU0VOVF9NQVNLOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdXRyYWNlLmggYi9hcmNoL3g4Ni9rdm0vbW11dHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTRhNWM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva3ZtL21tdXRyYWNlLmgKQEAgLTAsMCArMSwyMjAgQEAKKyNpZiAhZGVmaW5lZChfVFJBQ0VfS1ZNTU1VX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9UUkFDRV9LVk1NTVVfSAorCisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZV9ldmVudC5oPgorCisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBrdm1tbXUKKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRIIC4KKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIG1tdXRyYWNlCisKKyNkZWZpbmUgS1ZNX01NVV9QQUdFX0ZJRUxEUyBcCisJX19maWVsZChfX3U2NCwgZ2ZuKSBcCisJX19maWVsZChfX3UzMiwgcm9sZSkgXAorCV9fZmllbGQoX191MzIsIHJvb3RfY291bnQpIFwKKwlfX2ZpZWxkKF9fdTMyLCB1bnN5bmMpCisKKyNkZWZpbmUgS1ZNX01NVV9QQUdFX0FTU0lHTihzcCkJCQkgICAgIFwKKwlfX2VudHJ5LT5nZm4gPSBzcC0+Z2ZuOwkJCSAgICAgXAorCV9fZW50cnktPnJvbGUgPSBzcC0+cm9sZS53b3JkOwkJICAgICBcCisJX19lbnRyeS0+cm9vdF9jb3VudCA9IHNwLT5yb290X2NvdW50OyAgICAgICAgXAorCV9fZW50cnktPnVuc3luYyA9IHNwLT51bnN5bmM7CisKKyNkZWZpbmUgS1ZNX01NVV9QQUdFX1BSSU5USygpICh7CQkJCSAgICAgICAgXAorCWNvbnN0IGNoYXIgKnJldCA9IHAtPmJ1ZmZlciArIHAtPmxlbjsJCQkJXAorCXN0YXRpYyBjb25zdCBjaGFyICphY2Nlc3Nfc3RyW10gPSB7CQkJICAgICAgICBcCisJCSItLS0iLCAiLS14IiwgInctLSIsICJ3LXgiLCAiLXUtIiwgIi11eCIsICJ3dS0iLCAid3V4IiAgXAorCX07CQkJCQkJCSAgICAgICAgXAorCXVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlIHJvbGU7CQkJCSAgICAgICAgXAorCQkJCQkJCQkgICAgICAgIFwKKwlyb2xlLndvcmQgPSBfX2VudHJ5LT5yb2xlOwkJCQkJXAorCQkJCQkJCQkJXAorCXRyYWNlX3NlcV9wcmludGYocCwgInNwIGdmbiAlbGx4ICV1LyV1IHEldSVzICVzJXMgJXNwZ2UiCVwKKwkJCSAiICVzbnhlIHJvb3QgJXUgJXMlYyIsCQkJCVwKKwkJCSBfX2VudHJ5LT5nZm4sIHJvbGUubGV2ZWwsIHJvbGUuZ2xldmVscywJXAorCQkJIHJvbGUucXVhZHJhbnQsCQkJCQlcCisJCQkgcm9sZS5kaXJlY3QgPyAiIGRpcmVjdCIgOiAiIiwJCQlcCisJCQkgYWNjZXNzX3N0cltyb2xlLmFjY2Vzc10sCQkJXAorCQkJIHJvbGUuaW52YWxpZCA/ICIgaW52YWxpZCIgOiAiIiwJCVwKKwkJCSByb2xlLmNyNF9wZ2UgPyAiIiA6ICIhIiwJCQlcCisJCQkgcm9sZS5ueGUgPyAiIiA6ICIhIiwJCQkJXAorCQkJIF9fZW50cnktPnJvb3RfY291bnQsCQkJCVwKKwkJCSBfX2VudHJ5LT51bnN5bmMgPyAidW5zeW5jIiA6ICJzeW5jIiwgMCk7CVwKKwlyZXQ7CQkJCQkJCQlcCisJCX0pCisKKyNkZWZpbmUga3ZtX21tdV90cmFjZV9wZmVycl9mbGFncyAgICAgICBcCisJeyBQRkVSUl9QUkVTRU5UX01BU0ssICJQIiB9LAlcCisJeyBQRkVSUl9XUklURV9NQVNLLCAiVyIgfSwJXAorCXsgUEZFUlJfVVNFUl9NQVNLLCAiVSIgfSwJXAorCXsgUEZFUlJfUlNWRF9NQVNLLCAiUlNWRCIgfSwJXAorCXsgUEZFUlJfRkVUQ0hfTUFTSywgIkYiIH0KKworLyoKKyAqIEEgcGFnZXRhYmxlIHdhbGsgaGFzIHN0YXJ0ZWQKKyAqLworVFJBQ0VfRVZFTlQoCisJa3ZtX21tdV9wYWdldGFibGVfd2FsaywKKwlUUF9QUk9UTyh1NjQgYWRkciwgaW50IHdyaXRlX2ZhdWx0LCBpbnQgdXNlcl9mYXVsdCwgaW50IGZldGNoX2ZhdWx0KSwKKwlUUF9BUkdTKGFkZHIsIHdyaXRlX2ZhdWx0LCB1c2VyX2ZhdWx0LCBmZXRjaF9mYXVsdCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fdTY0LCBhZGRyKQorCQlfX2ZpZWxkKF9fdTMyLCBwZmVycikKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmFkZHIgPSBhZGRyOworCQlfX2VudHJ5LT5wZmVyciA9ICghIXdyaXRlX2ZhdWx0IDw8IDEpIHwgKCEhdXNlcl9mYXVsdCA8PCAyKQorCQkgICAgICAgICAgICAgICAgIHwgKCEhZmV0Y2hfZmF1bHQgPDwgNCk7CisJKSwKKworCVRQX3ByaW50aygiYWRkciAlbGx4IHBmZXJyICV4ICVzIiwgX19lbnRyeS0+YWRkciwgX19lbnRyeS0+cGZlcnIsCisJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5wZmVyciwgInwiLCBrdm1fbW11X3RyYWNlX3BmZXJyX2ZsYWdzKSkKKyk7CisKKworLyogV2UganVzdCB3YWxrZWQgYSBwYWdpbmcgZWxlbWVudCAqLworVFJBQ0VfRVZFTlQoCisJa3ZtX21tdV9wYWdpbmdfZWxlbWVudCwKKwlUUF9QUk9UTyh1NjQgcHRlLCBpbnQgbGV2ZWwpLAorCVRQX0FSR1MocHRlLCBsZXZlbCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fdTY0LCBwdGUpCisJCV9fZmllbGQoX191MzIsIGxldmVsKQorCQkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnB0ZSA9IHB0ZTsKKwkJX19lbnRyeS0+bGV2ZWwgPSBsZXZlbDsKKwkJKSwKKworCVRQX3ByaW50aygicHRlICVsbHggbGV2ZWwgJXUiLCBfX2VudHJ5LT5wdGUsIF9fZW50cnktPmxldmVsKQorKTsKKworLyogV2Ugc2V0IGEgcHRlIGFjY2Vzc2VkIGJpdCAqLworVFJBQ0VfRVZFTlQoCisJa3ZtX21tdV9zZXRfYWNjZXNzZWRfYml0LAorCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgdGFibGVfZ2ZuLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgc2l6ZSksCisJVFBfQVJHUyh0YWJsZV9nZm4sIGluZGV4LCBzaXplKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoX191NjQsIGdwYSkKKwkJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5ncGEgPSAoKHU2NCl0YWJsZV9nZm4gPDwgUEFHRV9TSElGVCkKKwkJCQkrIGluZGV4ICogc2l6ZTsKKwkJKSwKKworCVRQX3ByaW50aygiZ3BhICVsbHgiLCBfX2VudHJ5LT5ncGEpCispOworCisvKiBXZSBzZXQgYSBwdGUgZGlydHkgYml0ICovCitUUkFDRV9FVkVOVCgKKwlrdm1fbW11X3NldF9kaXJ0eV9iaXQsCisJVFBfUFJPVE8odW5zaWduZWQgbG9uZyB0YWJsZV9nZm4sIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBzaXplKSwKKwlUUF9BUkdTKHRhYmxlX2dmbiwgaW5kZXgsIHNpemUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChfX3U2NCwgZ3BhKQorCQkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmdwYSA9ICgodTY0KXRhYmxlX2dmbiA8PCBQQUdFX1NISUZUKQorCQkJCSsgaW5kZXggKiBzaXplOworCQkpLAorCisJVFBfcHJpbnRrKCJncGEgJWxseCIsIF9fZW50cnktPmdwYSkKKyk7CisKK1RSQUNFX0VWRU5UKAorCWt2bV9tbXVfd2Fsa2VyX2Vycm9yLAorCVRQX1BST1RPKHUzMiBwZmVyciksCisJVFBfQVJHUyhwZmVyciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fdTMyLCBwZmVycikKKwkJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5wZmVyciA9IHBmZXJyOworCQkpLAorCisJVFBfcHJpbnRrKCJwZmVyciAleCAlcyIsIF9fZW50cnktPnBmZXJyLAorCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+cGZlcnIsICJ8Iiwga3ZtX21tdV90cmFjZV9wZmVycl9mbGFncykpCispOworCitUUkFDRV9FVkVOVCgKKwlrdm1fbW11X2dldF9wYWdlLAorCVRQX1BST1RPKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCBib29sIGNyZWF0ZWQpLAorCVRQX0FSR1Moc3AsIGNyZWF0ZWQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJS1ZNX01NVV9QQUdFX0ZJRUxEUworCQlfX2ZpZWxkKGJvb2wsIGNyZWF0ZWQpCisJCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJS1ZNX01NVV9QQUdFX0FTU0lHTihzcCkKKwkJX19lbnRyeS0+Y3JlYXRlZCA9IGNyZWF0ZWQ7CisJCSksCisKKwlUUF9wcmludGsoIiVzICVzIiwgS1ZNX01NVV9QQUdFX1BSSU5USygpLAorCQkgIF9fZW50cnktPmNyZWF0ZWQgPyAibmV3IiA6ICJleGlzdGluZyIpCispOworCitUUkFDRV9FVkVOVCgKKwlrdm1fbW11X3N5bmNfcGFnZSwKKwlUUF9QUk9UTyhzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCksCisJVFBfQVJHUyhzcCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlLVk1fTU1VX1BBR0VfRklFTERTCisJCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJS1ZNX01NVV9QQUdFX0FTU0lHTihzcCkKKwkJKSwKKworCVRQX3ByaW50aygiJXMiLCBLVk1fTU1VX1BBR0VfUFJJTlRLKCkpCispOworCitUUkFDRV9FVkVOVCgKKwlrdm1fbW11X3Vuc3luY19wYWdlLAorCVRQX1BST1RPKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKSwKKwlUUF9BUkdTKHNwKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUtWTV9NTVVfUEFHRV9GSUVMRFMKKwkJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlLVk1fTU1VX1BBR0VfQVNTSUdOKHNwKQorCQkpLAorCisJVFBfcHJpbnRrKCIlcyIsIEtWTV9NTVVfUEFHRV9QUklOVEsoKSkKKyk7CisKK1RSQUNFX0VWRU5UKAorCWt2bV9tbXVfemFwX3BhZ2UsCisJVFBfUFJPVE8oc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApLAorCVRQX0FSR1Moc3ApLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJS1ZNX01NVV9QQUdFX0ZJRUxEUworCQkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUtWTV9NTVVfUEFHRV9BU1NJR04oc3ApCisJCSksCisKKwlUUF9wcmludGsoIiVzIiwgS1ZNX01NVV9QQUdFX1BSSU5USygpKQorKTsKKworI2VuZGlmIC8qIF9UUkFDRV9LVk1NTVVfSCAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKaW5kZXggNjc3ODVmNi4uZDJmZWM5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKKysrIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKQEAgLTI3LDcgKzI3LDggQEAKIAkjZGVmaW5lIGd1ZXN0X3dhbGtlciBndWVzdF93YWxrZXI2NAogCSNkZWZpbmUgRk5BTUUobmFtZSkgcGFnaW5nIyM2NF8jI25hbWUKIAkjZGVmaW5lIFBUX0JBU0VfQUREUl9NQVNLIFBUNjRfQkFTRV9BRERSX01BU0sKLQkjZGVmaW5lIFBUX0RJUl9CQVNFX0FERFJfTUFTSyBQVDY0X0RJUl9CQVNFX0FERFJfTUFTSworCSNkZWZpbmUgUFRfTFZMX0FERFJfTUFTSyhsdmwpIFBUNjRfTFZMX0FERFJfTUFTSyhsdmwpCisJI2RlZmluZSBQVF9MVkxfT0ZGU0VUX01BU0sobHZsKSBQVDY0X0xWTF9PRkZTRVRfTUFTSyhsdmwpCiAJI2RlZmluZSBQVF9JTkRFWChhZGRyLCBsZXZlbCkgUFQ2NF9JTkRFWChhZGRyLCBsZXZlbCkKIAkjZGVmaW5lIFBUX0xFVkVMX01BU0sobGV2ZWwpIFBUNjRfTEVWRUxfTUFTSyhsZXZlbCkKIAkjZGVmaW5lIFBUX0xFVkVMX0JJVFMgUFQ2NF9MRVZFTF9CSVRTCkBAIC00Myw3ICs0NCw4IEBACiAJI2RlZmluZSBndWVzdF93YWxrZXIgZ3Vlc3Rfd2Fsa2VyMzIKIAkjZGVmaW5lIEZOQU1FKG5hbWUpIHBhZ2luZyMjMzJfIyNuYW1lCiAJI2RlZmluZSBQVF9CQVNFX0FERFJfTUFTSyBQVDMyX0JBU0VfQUREUl9NQVNLCi0JI2RlZmluZSBQVF9ESVJfQkFTRV9BRERSX01BU0sgUFQzMl9ESVJfQkFTRV9BRERSX01BU0sKKwkjZGVmaW5lIFBUX0xWTF9BRERSX01BU0sobHZsKSBQVDMyX0xWTF9BRERSX01BU0sobHZsKQorCSNkZWZpbmUgUFRfTFZMX09GRlNFVF9NQVNLKGx2bCkgUFQzMl9MVkxfT0ZGU0VUX01BU0sobHZsKQogCSNkZWZpbmUgUFRfSU5ERVgoYWRkciwgbGV2ZWwpIFBUMzJfSU5ERVgoYWRkciwgbGV2ZWwpCiAJI2RlZmluZSBQVF9MRVZFTF9NQVNLKGxldmVsKSBQVDMyX0xFVkVMX01BU0sobGV2ZWwpCiAJI2RlZmluZSBQVF9MRVZFTF9CSVRTIFBUMzJfTEVWRUxfQklUUwpAQCAtNTMsOCArNTUsOCBAQAogCSNlcnJvciBJbnZhbGlkIFBUVFlQRSB2YWx1ZQogI2VuZGlmCiAKLSNkZWZpbmUgZ3B0ZV90b19nZm4gRk5BTUUoZ3B0ZV90b19nZm4pCi0jZGVmaW5lIGdwdGVfdG9fZ2ZuX3BkZSBGTkFNRShncHRlX3RvX2dmbl9wZGUpCisjZGVmaW5lIGdwdGVfdG9fZ2ZuX2x2bCBGTkFNRShncHRlX3RvX2dmbl9sdmwpCisjZGVmaW5lIGdwdGVfdG9fZ2ZuKHB0ZSkgZ3B0ZV90b19nZm5fbHZsKChwdGUpLCBQVF9QQUdFX1RBQkxFX0xFVkVMKQogCiAvKgogICogVGhlIGd1ZXN0X3dhbGtlciBzdHJ1Y3R1cmUgZW11bGF0ZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBoYXJkd2FyZSBwYWdlCkBAIC03MSwxNCArNzMsOSBAQAogCXUzMiBlcnJvcl9jb2RlOwogfTsKIAotc3RhdGljIGdmbl90IGdwdGVfdG9fZ2ZuKHB0X2VsZW1lbnRfdCBncHRlKQorc3RhdGljIGdmbl90IGdwdGVfdG9fZ2ZuX2x2bChwdF9lbGVtZW50X3QgZ3B0ZSwgaW50IGx2bCkKIHsKLQlyZXR1cm4gKGdwdGUgJiBQVF9CQVNFX0FERFJfTUFTSykgPj4gUEFHRV9TSElGVDsKLX0KLQotc3RhdGljIGdmbl90IGdwdGVfdG9fZ2ZuX3BkZShwdF9lbGVtZW50X3QgZ3B0ZSkKLXsKLQlyZXR1cm4gKGdwdGUgJiBQVF9ESVJfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CisJcmV0dXJuIChncHRlICYgUFRfTFZMX0FERFJfTUFTSyhsdmwpKSA+PiBQQUdFX1NISUZUOwogfQogCiBzdGF0aWMgYm9vbCBGTkFNRShjbXB4Y2hnX2dwdGUpKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTEyNSwxNCArMTIyLDE2IEBACiAJZ3BhX3QgcHRlX2dwYTsKIAlpbnQgcnN2ZF9mYXVsdCA9IDA7CiAKLQlwZ3ByaW50aygiJXM6IGFkZHIgJWx4XG4iLCBfX2Z1bmNfXywgYWRkcik7CisJdHJhY2Vfa3ZtX21tdV9wYWdldGFibGVfd2FsayhhZGRyLCB3cml0ZV9mYXVsdCwgdXNlcl9mYXVsdCwKKwkJCQkgICAgIGZldGNoX2ZhdWx0KTsKIHdhbGs6CiAJd2Fsa2VyLT5sZXZlbCA9IHZjcHUtPmFyY2gubW11LnJvb3RfbGV2ZWw7CiAJcHRlID0gdmNwdS0+YXJjaC5jcjM7CiAjaWYgUFRUWVBFID09IDY0CiAJaWYgKCFpc19sb25nX21vZGUodmNwdSkpIHsKLQkJcHRlID0gdmNwdS0+YXJjaC5wZHB0cnNbKGFkZHIgPj4gMzApICYgM107Ci0JCWlmICghaXNfcHJlc2VudF9wdGUocHRlKSkKKwkJcHRlID0ga3ZtX3BkcHRyX3JlYWQodmNwdSwgKGFkZHIgPj4gMzApICYgMyk7CisJCXRyYWNlX2t2bV9tbXVfcGFnaW5nX2VsZW1lbnQocHRlLCB3YWxrZXItPmxldmVsKTsKKwkJaWYgKCFpc19wcmVzZW50X2dwdGUocHRlKSkKIAkJCWdvdG8gbm90X3ByZXNlbnQ7CiAJCS0td2Fsa2VyLT5sZXZlbDsKIAl9CkBAIC0xNTAsMTIgKzE0OSwxMSBAQAogCQlwdGVfZ3BhICs9IGluZGV4ICogc2l6ZW9mKHB0X2VsZW1lbnRfdCk7CiAJCXdhbGtlci0+dGFibGVfZ2ZuW3dhbGtlci0+bGV2ZWwgLSAxXSA9IHRhYmxlX2dmbjsKIAkJd2Fsa2VyLT5wdGVfZ3BhW3dhbGtlci0+bGV2ZWwgLSAxXSA9IHB0ZV9ncGE7Ci0JCXBncHJpbnRrKCIlczogdGFibGVfZ2ZuWyVkXSAlbHhcbiIsIF9fZnVuY19fLAotCQkJIHdhbGtlci0+bGV2ZWwgLSAxLCB0YWJsZV9nZm4pOwogCiAJCWt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgcHRlX2dwYSwgJnB0ZSwgc2l6ZW9mKHB0ZSkpOworCQl0cmFjZV9rdm1fbW11X3BhZ2luZ19lbGVtZW50KHB0ZSwgd2Fsa2VyLT5sZXZlbCk7CiAKLQkJaWYgKCFpc19wcmVzZW50X3B0ZShwdGUpKQorCQlpZiAoIWlzX3ByZXNlbnRfZ3B0ZShwdGUpKQogCQkJZ290byBub3RfcHJlc2VudDsKIAogCQlyc3ZkX2ZhdWx0ID0gaXNfcnN2ZF9iaXRzX3NldCh2Y3B1LCBwdGUsIHdhbGtlci0+bGV2ZWwpOwpAQCAtMTc1LDYgKzE3Myw4IEBACiAjZW5kaWYKIAogCQlpZiAoIShwdGUgJiBQVF9BQ0NFU1NFRF9NQVNLKSkgeworCQkJdHJhY2Vfa3ZtX21tdV9zZXRfYWNjZXNzZWRfYml0KHRhYmxlX2dmbiwgaW5kZXgsCisJCQkJCQkgICAgICAgc2l6ZW9mKHB0ZSkpOwogCQkJbWFya19wYWdlX2RpcnR5KHZjcHUtPmt2bSwgdGFibGVfZ2ZuKTsKIAkJCWlmIChGTkFNRShjbXB4Y2hnX2dwdGUpKHZjcHUtPmt2bSwgdGFibGVfZ2ZuLAogCQkJICAgIGluZGV4LCBwdGUsIHB0ZXxQVF9BQ0NFU1NFRF9NQVNLKSkKQEAgLTE4NiwxOCArMTg2LDI0IEBACiAKIAkJd2Fsa2VyLT5wdGVzW3dhbGtlci0+bGV2ZWwgLSAxXSA9IHB0ZTsKIAotCQlpZiAod2Fsa2VyLT5sZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKSB7Ci0JCQl3YWxrZXItPmdmbiA9IGdwdGVfdG9fZ2ZuKHB0ZSk7Ci0JCQlicmVhazsKLQkJfQorCQlpZiAoKHdhbGtlci0+bGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkgfHwKKwkJICAgICgod2Fsa2VyLT5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpICYmCisJCQkJKHB0ZSAmIFBUX1BBR0VfU0laRV9NQVNLKSAgJiYKKwkJCQkoUFRUWVBFID09IDY0IHx8IGlzX3BzZSh2Y3B1KSkpIHx8CisJCSAgICAoKHdhbGtlci0+bGV2ZWwgPT0gUFRfUERQRV9MRVZFTCkgJiYKKwkJCQkocHRlICYgUFRfUEFHRV9TSVpFX01BU0spICAmJgorCQkJCWlzX2xvbmdfbW9kZSh2Y3B1KSkpIHsKKwkJCWludCBsdmwgPSB3YWxrZXItPmxldmVsOwogCi0JCWlmICh3YWxrZXItPmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTAotCQkgICAgJiYgKHB0ZSAmIFBUX1BBR0VfU0laRV9NQVNLKQotCQkgICAgJiYgKFBUVFlQRSA9PSA2NCB8fCBpc19wc2UodmNwdSkpKSB7Ci0JCQl3YWxrZXItPmdmbiA9IGdwdGVfdG9fZ2ZuX3BkZShwdGUpOwotCQkJd2Fsa2VyLT5nZm4gKz0gUFRfSU5ERVgoYWRkciwgUFRfUEFHRV9UQUJMRV9MRVZFTCk7Ci0JCQlpZiAoUFRUWVBFID09IDMyICYmIGlzX2NwdWlkX1BTRTM2KCkpCisJCQl3YWxrZXItPmdmbiA9IGdwdGVfdG9fZ2ZuX2x2bChwdGUsIGx2bCk7CisJCQl3YWxrZXItPmdmbiArPSAoYWRkciAmIFBUX0xWTF9PRkZTRVRfTUFTSyhsdmwpKQorCQkJCQk+PiBQQUdFX1NISUZUOworCisJCQlpZiAoUFRUWVBFID09IDMyICYmCisJCQkgICAgd2Fsa2VyLT5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwgJiYKKwkJCSAgICBpc19jcHVpZF9QU0UzNigpKQogCQkJCXdhbGtlci0+Z2ZuICs9IHBzZTM2X2dmbl9kZWx0YShwdGUpOworCiAJCQlicmVhazsKIAkJfQogCkBAIC0yMDUsOSArMjExLDEwIEBACiAJCS0td2Fsa2VyLT5sZXZlbDsKIAl9CiAKLQlpZiAod3JpdGVfZmF1bHQgJiYgIWlzX2RpcnR5X3B0ZShwdGUpKSB7CisJaWYgKHdyaXRlX2ZhdWx0ICYmICFpc19kaXJ0eV9ncHRlKHB0ZSkpIHsKIAkJYm9vbCByZXQ7CiAKKwkJdHJhY2Vfa3ZtX21tdV9zZXRfZGlydHlfYml0KHRhYmxlX2dmbiwgaW5kZXgsIHNpemVvZihwdGUpKTsKIAkJbWFya19wYWdlX2RpcnR5KHZjcHUtPmt2bSwgdGFibGVfZ2ZuKTsKIAkJcmV0ID0gRk5BTUUoY21weGNoZ19ncHRlKSh2Y3B1LT5rdm0sIHRhYmxlX2dmbiwgaW5kZXgsIHB0ZSwKIAkJCSAgICBwdGV8UFRfRElSVFlfTUFTSyk7CkBAIC0yMzksNiArMjQ2LDcgQEAKIAkJd2Fsa2VyLT5lcnJvcl9jb2RlIHw9IFBGRVJSX0ZFVENIX01BU0s7CiAJaWYgKHJzdmRfZmF1bHQpCiAJCXdhbGtlci0+ZXJyb3JfY29kZSB8PSBQRkVSUl9SU1ZEX01BU0s7CisJdHJhY2Vfa3ZtX21tdV93YWxrZXJfZXJyb3Iod2Fsa2VyLT5lcnJvcl9jb2RlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ4LDEyICsyNTYsMTEgQEAKIAlwdF9lbGVtZW50X3QgZ3B0ZTsKIAl1bnNpZ25lZCBwdGVfYWNjZXNzOwogCXBmbl90IHBmbjsKLQlpbnQgbGFyZ2VwYWdlID0gdmNwdS0+YXJjaC51cGRhdGVfcHRlLmxhcmdlcGFnZTsKIAogCWdwdGUgPSAqKGNvbnN0IHB0X2VsZW1lbnRfdCAqKXB0ZTsKIAlpZiAofmdwdGUgJiAoUFRfUFJFU0VOVF9NQVNLIHwgUFRfQUNDRVNTRURfTUFTSykpIHsKLQkJaWYgKCFpc19wcmVzZW50X3B0ZShncHRlKSkKLQkJCXNldF9zaGFkb3dfcHRlKHNwdGUsIHNoYWRvd19ub3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQlpZiAoIWlzX3ByZXNlbnRfZ3B0ZShncHRlKSkKKwkJCV9fc2V0X3NwdGUoc3B0ZSwgc2hhZG93X25vdHJhcF9ub25wcmVzZW50X3B0ZSk7CiAJCXJldHVybjsKIAl9CiAJcGdwcmludGsoIiVzOiBncHRlICVsbHggc3B0ZSAlcFxuIiwgX19mdW5jX18sICh1NjQpZ3B0ZSwgc3B0ZSk7CkBAIC0yNjcsNyArMjc0LDcgQEAKIAkJcmV0dXJuOwogCWt2bV9nZXRfcGZuKHBmbik7CiAJbW11X3NldF9zcHRlKHZjcHUsIHNwdGUsIHBhZ2UtPnJvbGUuYWNjZXNzLCBwdGVfYWNjZXNzLCAwLCAwLAotCQkgICAgIGdwdGUgJiBQVF9ESVJUWV9NQVNLLCBOVUxMLCBsYXJnZXBhZ2UsCisJCSAgICAgZ3B0ZSAmIFBUX0RJUlRZX01BU0ssIE5VTEwsIFBUX1BBR0VfVEFCTEVfTEVWRUwsCiAJCSAgICAgZ3B0ZV90b19nZm4oZ3B0ZSksIHBmbiwgdHJ1ZSk7CiB9CiAKQEAgLTI3Niw3ICsyODMsNyBAQAogICovCiBzdGF0aWMgdTY0ICpGTkFNRShmZXRjaCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyLAogCQkJIHN0cnVjdCBndWVzdF93YWxrZXIgKmd3LAotCQkJIGludCB1c2VyX2ZhdWx0LCBpbnQgd3JpdGVfZmF1bHQsIGludCBsYXJnZXBhZ2UsCisJCQkgaW50IHVzZXJfZmF1bHQsIGludCB3cml0ZV9mYXVsdCwgaW50IGhsZXZlbCwKIAkJCSBpbnQgKnB0d3JpdGUsIHBmbl90IHBmbikKIHsKIAl1bnNpZ25lZCBhY2Nlc3MgPSBndy0+cHRfYWNjZXNzOwpAQCAtMjg5LDE5ICsyOTYsMTggQEAKIAlwdF9lbGVtZW50X3QgY3Vycl9wdGU7CiAJc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciBpdGVyYXRvcjsKIAotCWlmICghaXNfcHJlc2VudF9wdGUoZ3ctPnB0ZXNbZ3ctPmxldmVsIC0gMV0pKQorCWlmICghaXNfcHJlc2VudF9ncHRlKGd3LT5wdGVzW2d3LT5sZXZlbCAtIDFdKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlmb3JfZWFjaF9zaGFkb3dfZW50cnkodmNwdSwgYWRkciwgaXRlcmF0b3IpIHsKIAkJbGV2ZWwgPSBpdGVyYXRvci5sZXZlbDsKIAkJc3B0ZXAgPSBpdGVyYXRvci5zcHRlcDsKLQkJaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwKLQkJICAgIHx8IChsYXJnZXBhZ2UgJiYgbGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSkgeworCQlpZiAoaXRlcmF0b3IubGV2ZWwgPT0gaGxldmVsKSB7CiAJCQltbXVfc2V0X3NwdGUodmNwdSwgc3B0ZXAsIGFjY2VzcywKIAkJCQkgICAgIGd3LT5wdGVfYWNjZXNzICYgYWNjZXNzLAogCQkJCSAgICAgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCiAJCQkJICAgICBndy0+cHRlc1tndy0+bGV2ZWwtMV0gJiBQVF9ESVJUWV9NQVNLLAotCQkJCSAgICAgcHR3cml0ZSwgbGFyZ2VwYWdlLAorCQkJCSAgICAgcHR3cml0ZSwgbGV2ZWwsCiAJCQkJICAgICBndy0+Z2ZuLCBwZm4sIGZhbHNlKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zMTEsMTYgKzMxNywxOSBAQAogCiAJCWlmIChpc19sYXJnZV9wdGUoKnNwdGVwKSkgewogCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7Ci0JCQlzZXRfc2hhZG93X3B0ZShzcHRlcCwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQkJX19zZXRfc3B0ZShzcHRlcCwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOwogCQkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7CiAJCX0KIAotCQlpZiAobGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMCi0JCSAgICAmJiBndy0+bGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSB7CisJCWlmIChsZXZlbCA8PSBndy0+bGV2ZWwpIHsKKwkJCWludCBkZWx0YSA9IGxldmVsIC0gZ3ctPmxldmVsICsgMTsKIAkJCWRpcmVjdCA9IDE7Ci0JCQlpZiAoIWlzX2RpcnR5X3B0ZShndy0+cHRlc1tsZXZlbCAtIDFdKSkKKwkJCWlmICghaXNfZGlydHlfZ3B0ZShndy0+cHRlc1tsZXZlbCAtIGRlbHRhXSkpCiAJCQkJYWNjZXNzICY9IH5BQ0NfV1JJVEVfTUFTSzsKLQkJCXRhYmxlX2dmbiA9IGdwdGVfdG9fZ2ZuKGd3LT5wdGVzW2xldmVsIC0gMV0pOworCQkJdGFibGVfZ2ZuID0gZ3B0ZV90b19nZm4oZ3ctPnB0ZXNbbGV2ZWwgLSBkZWx0YV0pOworCQkJLyogYWR2YW5jZSB0YWJsZV9nZm4gd2hlbiBlbXVsYXRpbmcgMWdiIHBhZ2VzIHdpdGggNGsgKi8KKwkJCWlmIChkZWx0YSA9PSAwKQorCQkJCXRhYmxlX2dmbiArPSBQVF9JTkRFWChhZGRyLCBsZXZlbCk7CiAJCX0gZWxzZSB7CiAJCQlkaXJlY3QgPSAwOwogCQkJdGFibGVfZ2ZuID0gZ3ctPnRhYmxlX2dmbltsZXZlbCAtIDJdOwpAQCAtMzY5LDExICszNzgsMTEgQEAKIAlpbnQgdXNlcl9mYXVsdCA9IGVycm9yX2NvZGUgJiBQRkVSUl9VU0VSX01BU0s7CiAJaW50IGZldGNoX2ZhdWx0ID0gZXJyb3JfY29kZSAmIFBGRVJSX0ZFVENIX01BU0s7CiAJc3RydWN0IGd1ZXN0X3dhbGtlciB3YWxrZXI7Ci0JdTY0ICpzaGFkb3dfcHRlOworCXU2NCAqc3B0ZXA7CiAJaW50IHdyaXRlX3B0ID0gMDsKIAlpbnQgcjsKIAlwZm5fdCBwZm47Ci0JaW50IGxhcmdlcGFnZSA9IDA7CisJaW50IGxldmVsID0gUFRfUEFHRV9UQUJMRV9MRVZFTDsKIAl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiAKIAlwZ3ByaW50aygiJXM6IGFkZHIgJWx4IGVyciAleFxuIiwgX19mdW5jX18sIGFkZHIsIGVycm9yX2NvZGUpOwpAQCAtMzk5LDE0ICs0MDgsMTEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHdhbGtlci5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpIHsKLQkJZ2ZuX3QgbGFyZ2VfZ2ZuOwotCQlsYXJnZV9nZm4gPSB3YWxrZXIuZ2ZuICYgfihLVk1fUEFHRVNfUEVSX0hQQUdFLTEpOwotCQlpZiAoaXNfbGFyZ2VwYWdlX2JhY2tlZCh2Y3B1LCBsYXJnZV9nZm4pKSB7Ci0JCQl3YWxrZXIuZ2ZuID0gbGFyZ2VfZ2ZuOwotCQkJbGFyZ2VwYWdlID0gMTsKLQkJfQorCWlmICh3YWxrZXIubGV2ZWwgPj0gUFRfRElSRUNUT1JZX0xFVkVMKSB7CisJCWxldmVsID0gbWluKHdhbGtlci5sZXZlbCwgbWFwcGluZ19sZXZlbCh2Y3B1LCB3YWxrZXIuZ2ZuKSk7CisJCXdhbGtlci5nZm4gPSB3YWxrZXIuZ2ZuICYgfihLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKSAtIDEpOwogCX0KKwogCW1tdV9zZXEgPSB2Y3B1LT5rdm0tPm1tdV9ub3RpZmllcl9zZXE7CiAJc21wX3JtYigpOwogCXBmbiA9IGdmbl90b19wZm4odmNwdS0+a3ZtLCB3YWxrZXIuZ2ZuKTsKQEAgLTQyMiwxMSArNDI4LDEwIEBACiAJaWYgKG1tdV9ub3RpZmllcl9yZXRyeSh2Y3B1LCBtbXVfc2VxKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCWt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHZjcHUpOwotCXNoYWRvd19wdGUgPSBGTkFNRShmZXRjaCkodmNwdSwgYWRkciwgJndhbGtlciwgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCi0JCQkJICBsYXJnZXBhZ2UsICZ3cml0ZV9wdCwgcGZuKTsKLQorCXNwdGVwID0gRk5BTUUoZmV0Y2gpKHZjcHUsIGFkZHIsICZ3YWxrZXIsIHVzZXJfZmF1bHQsIHdyaXRlX2ZhdWx0LAorCQkJICAgICBsZXZlbCwgJndyaXRlX3B0LCBwZm4pOwogCXBncHJpbnRrKCIlczogc2hhZG93IHB0ZSAlcCAlbGx4IHB0d3JpdGUgJWRcbiIsIF9fZnVuY19fLAotCQkgc2hhZG93X3B0ZSwgKnNoYWRvd19wdGUsIHdyaXRlX3B0KTsKKwkJIHNwdGVwLCAqc3B0ZXAsIHdyaXRlX3B0KTsKIAogCWlmICghd3JpdGVfcHQpCiAJCXZjcHUtPmFyY2gubGFzdF9wdF93cml0ZV9jb3VudCA9IDA7IC8qIHJlc2V0IGZvcmsgZGV0ZWN0b3IgKi8KQEAgLTQ1OSw4ICs0NjQsOSBAQAogCQlzcHRlcCA9IGl0ZXJhdG9yLnNwdGVwOwogCiAJCS8qIEZJWE1FOiBwcm9wZXJseSBoYW5kbGUgaW52bHBnIG9uIGxhcmdlIGd1ZXN0IHBhZ2VzICovCi0JCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMIHx8Ci0JCSAgICAoKGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgJiYgaXNfbGFyZ2VfcHRlKCpzcHRlcCkpKSB7CisJCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMICB8fAorCQkgICAgKChsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwgJiYgaXNfbGFyZ2VfcHRlKCpzcHRlcCkpKSB8fAorCQkgICAgKChsZXZlbCA9PSBQVF9QRFBFX0xFVkVMICYmIGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSkpIHsKIAkJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwID0gcGFnZV9oZWFkZXIoX19wYShzcHRlcCkpOwogCiAJCQlwdGVfZ3BhID0gKHNwLT5nZm4gPDwgUEFHRV9TSElGVCk7CkBAIC00NzIsNyArNDc4LDcgQEAKIAkJCQkJLS12Y3B1LT5rdm0tPnN0YXQubHBhZ2VzOwogCQkJCW5lZWRfZmx1c2ggPSAxOwogCQkJfQotCQkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJCV9fc2V0X3NwdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTQ4OSw3ICs0OTUsNyBAQAogCWlmIChrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLCBwdGVfZ3BhLCAmZ3B0ZSwKIAkJCQkgIHNpemVvZihwdF9lbGVtZW50X3QpKSkKIAkJcmV0dXJuOwotCWlmIChpc19wcmVzZW50X3B0ZShncHRlKSAmJiAoZ3B0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKSB7CisJaWYgKGlzX3ByZXNlbnRfZ3B0ZShncHRlKSAmJiAoZ3B0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKSB7CiAJCWlmIChtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1KSkKIAkJCXJldHVybjsKIAkJa3ZtX21tdV9wdGVfd3JpdGUodmNwdSwgcHRlX2dwYSwgKGNvbnN0IHU4ICopJmdwdGUsCkBAIC01MzYsNyArNTQyLDcgQEAKIAkJciA9IGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sIHB0ZV9ncGEsIHB0LCBzaXplb2YgcHQpOwogCQlwdGVfZ3BhICs9IEFSUkFZX1NJWkUocHQpICogc2l6ZW9mKHB0X2VsZW1lbnRfdCk7CiAJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHB0KTsgKytqKQotCQkJaWYgKHIgfHwgaXNfcHJlc2VudF9wdGUocHRbal0pKQorCQkJaWYgKHIgfHwgaXNfcHJlc2VudF9ncHRlKHB0W2pdKSkKIAkJCQlzcC0+c3B0W2kral0gPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKIAkJCWVsc2UKIAkJCQlzcC0+c3B0W2kral0gPSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlOwpAQCAtNTc0LDIzICs1ODAsMjMgQEAKIAkJCQkJICBzaXplb2YocHRfZWxlbWVudF90KSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoZ3B0ZV90b19nZm4oZ3B0ZSkgIT0gZ2ZuIHx8ICFpc19wcmVzZW50X3B0ZShncHRlKSB8fAorCQlpZiAoZ3B0ZV90b19nZm4oZ3B0ZSkgIT0gZ2ZuIHx8ICFpc19wcmVzZW50X2dwdGUoZ3B0ZSkgfHwKIAkJICAgICEoZ3B0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKSB7CiAJCQl1NjQgbm9ucHJlc2VudDsKIAogCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCAmc3AtPnNwdFtpXSk7Ci0JCQlpZiAoaXNfcHJlc2VudF9wdGUoZ3B0ZSkpCisJCQlpZiAoaXNfcHJlc2VudF9ncHRlKGdwdGUpKQogCQkJCW5vbnByZXNlbnQgPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKIAkJCWVsc2UKIAkJCQlub25wcmVzZW50ID0gc2hhZG93X25vdHJhcF9ub25wcmVzZW50X3B0ZTsKLQkJCXNldF9zaGFkb3dfcHRlKCZzcC0+c3B0W2ldLCBub25wcmVzZW50KTsKKwkJCV9fc2V0X3NwdGUoJnNwLT5zcHRbaV0sIG5vbnByZXNlbnQpOwogCQkJY29udGludWU7CiAJCX0KIAogCQlucl9wcmVzZW50Kys7CiAJCXB0ZV9hY2Nlc3MgPSBzcC0+cm9sZS5hY2Nlc3MgJiBGTkFNRShncHRlX2FjY2VzcykodmNwdSwgZ3B0ZSk7CiAJCXNldF9zcHRlKHZjcHUsICZzcC0+c3B0W2ldLCBwdGVfYWNjZXNzLCAwLCAwLAotCQkJIGlzX2RpcnR5X3B0ZShncHRlKSwgMCwgZ2ZuLAorCQkJIGlzX2RpcnR5X2dwdGUoZ3B0ZSksIFBUX1BBR0VfVEFCTEVfTEVWRUwsIGdmbiwKIAkJCSBzcHRlX3RvX3BmbihzcC0+c3B0W2ldKSwgdHJ1ZSwgZmFsc2UpOwogCX0KIApAQCAtNjAzLDkgKzYwOSwxMCBAQAogI3VuZGVmIFBUX0JBU0VfQUREUl9NQVNLCiAjdW5kZWYgUFRfSU5ERVgKICN1bmRlZiBQVF9MRVZFTF9NQVNLCi0jdW5kZWYgUFRfRElSX0JBU0VfQUREUl9NQVNLCisjdW5kZWYgUFRfTFZMX0FERFJfTUFTSworI3VuZGVmIFBUX0xWTF9PRkZTRVRfTUFTSwogI3VuZGVmIFBUX0xFVkVMX0JJVFMKICN1bmRlZiBQVF9NQVhfRlVMTF9MRVZFTFMKICN1bmRlZiBncHRlX3RvX2dmbgotI3VuZGVmIGdwdGVfdG9fZ2ZuX3BkZQorI3VuZGVmIGdwdGVfdG9fZ2ZuX2x2bAogI3VuZGVmIENNUFhDSEcKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0uYwppbmRleCBiMWY2NThhLi45NDRjYzljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtLmMKKysrIGIvYXJjaC94ODYva3ZtL3N2bS5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogCi0jaW5jbHVkZSAia3ZtX3N2bS5oIgogI2luY2x1ZGUgImlycS5oIgogI2luY2x1ZGUgIm1tdS5oIgogI2luY2x1ZGUgImt2bV9jYWNoZV9yZWdzLmgiCkBAIC0yNiwxMCArMjUsMTIgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlX2V2ZW50Lmg+CiAKICNpbmNsdWRlIDxhc20vZGVzYy5oPgogCiAjaW5jbHVkZSA8YXNtL3ZpcnRleHQuaD4KKyNpbmNsdWRlICJ0cmFjZS5oIgogCiAjZGVmaW5lIF9fZXgoeCkgX19rdm1faGFuZGxlX2ZhdWx0X29uX3JlYm9vdCh4KQogCkBAIC00Niw2ICs0NywxMCBAQAogI2RlZmluZSBTVk1fRkVBVFVSRV9MQlJWICgxIDw8IDEpCiAjZGVmaW5lIFNWTV9GRUFUVVJFX1NWTUwgKDEgPDwgMikKIAorI2RlZmluZSBORVNURURfRVhJVF9IT1NUCTAJLyogRXhpdCBoYW5kbGVkIG9uIGhvc3QgbGV2ZWwgKi8KKyNkZWZpbmUgTkVTVEVEX0VYSVRfRE9ORQkxCS8qIEV4aXQgY2F1c2VkIG5lc3RlZCB2bWV4aXQgICovCisjZGVmaW5lIE5FU1RFRF9FWElUX0NPTlRJTlVFCTIJLyogRnVydGhlciBjaGVja3MgbmVlZGVkICAgICAgKi8KKwogI2RlZmluZSBERUJVR0NUTF9SRVNFUlZFRF9CSVRTICh+KDB4M2ZVTEwpKQogCiAvKiBUdXJuIG9uIHRvIGdldCBkZWJ1Z2dpbmcgb3V0cHV0Ki8KQEAgLTU3LDYgKzYyLDU4IEBACiAjZGVmaW5lIG5zdm1fcHJpbnRrKGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUoMCkKICNlbmRpZgogCitzdGF0aWMgY29uc3QgdTMyIGhvc3Rfc2F2ZV91c2VyX21zcnNbXSA9IHsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJTVNSX1NUQVIsIE1TUl9MU1RBUiwgTVNSX0NTVEFSLCBNU1JfU1lTQ0FMTF9NQVNLLCBNU1JfS0VSTkVMX0dTX0JBU0UsCisJTVNSX0ZTX0JBU0UsCisjZW5kaWYKKwlNU1JfSUEzMl9TWVNFTlRFUl9DUywgTVNSX0lBMzJfU1lTRU5URVJfRVNQLCBNU1JfSUEzMl9TWVNFTlRFUl9FSVAsCit9OworCisjZGVmaW5lIE5SX0hPU1RfU0FWRV9VU0VSX01TUlMgQVJSQVlfU0laRShob3N0X3NhdmVfdXNlcl9tc3JzKQorCitzdHJ1Y3Qga3ZtX3ZjcHU7CisKK3N0cnVjdCBuZXN0ZWRfc3RhdGUgeworCXN0cnVjdCB2bWNiICpoc2F2ZTsKKwl1NjQgaHNhdmVfbXNyOworCXU2NCB2bWNiOworCisJLyogVGhlc2UgYXJlIHRoZSBtZXJnZWQgdmVjdG9ycyAqLworCXUzMiAqbXNycG07CisKKwkvKiBncGEgcG9pbnRlcnMgdG8gdGhlIHJlYWwgdmVjdG9ycyAqLworCXU2NCB2bWNiX21zcnBtOworCisJLyogY2FjaGUgZm9yIGludGVyY2VwdHMgb2YgdGhlIGd1ZXN0ICovCisJdTE2IGludGVyY2VwdF9jcl9yZWFkOworCXUxNiBpbnRlcmNlcHRfY3Jfd3JpdGU7CisJdTE2IGludGVyY2VwdF9kcl9yZWFkOworCXUxNiBpbnRlcmNlcHRfZHJfd3JpdGU7CisJdTMyIGludGVyY2VwdF9leGNlcHRpb25zOworCXU2NCBpbnRlcmNlcHQ7CisKK307CisKK3N0cnVjdCB2Y3B1X3N2bSB7CisJc3RydWN0IGt2bV92Y3B1IHZjcHU7CisJc3RydWN0IHZtY2IgKnZtY2I7CisJdW5zaWduZWQgbG9uZyB2bWNiX3BhOworCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhOworCXVpbnQ2NF90IGFzaWRfZ2VuZXJhdGlvbjsKKwl1aW50NjRfdCBzeXNlbnRlcl9lc3A7CisJdWludDY0X3Qgc3lzZW50ZXJfZWlwOworCisJdTY0IG5leHRfcmlwOworCisJdTY0IGhvc3RfdXNlcl9tc3JzW05SX0hPU1RfU0FWRV9VU0VSX01TUlNdOworCXU2NCBob3N0X2dzX2Jhc2U7CisKKwl1MzIgKm1zcnBtOworCisJc3RydWN0IG5lc3RlZF9zdGF0ZSBuZXN0ZWQ7Cit9OworCiAvKiBlbmFibGUgTlBUIGZvciBBTUQ2NCBhbmQgWDg2IHdpdGggUEFFICovCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19YODZfUEFFKQogc3RhdGljIGJvb2wgbnB0X2VuYWJsZWQgPSB0cnVlOwpAQCAtNjcsMTUgKzEyNCwxNCBAQAogCiBtb2R1bGVfcGFyYW0obnB0LCBpbnQsIFNfSVJVR08pOwogCi1zdGF0aWMgaW50IG5lc3RlZCA9IDA7CitzdGF0aWMgaW50IG5lc3RlZCA9IDE7CiBtb2R1bGVfcGFyYW0obmVzdGVkLCBpbnQsIFNfSVJVR08pOwogCiBzdGF0aWMgdm9pZCBzdm1fZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitzdGF0aWMgdm9pZCBzdm1fY29tcGxldGVfaW50ZXJydXB0cyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7CiAKLXN0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGJvb2wga3ZtX292ZXJyaWRlKTsKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0pOwogc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7Ci1zdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICpuZXN0ZWRfdm1jYiwKLQkJCSAgICAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKTsKIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV9jaGVja19leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHVuc2lnbmVkIG5yLAogCQkJCSAgICAgIGJvb2wgaGFzX2Vycm9yX2NvZGUsIHUzMiBlcnJvcl9jb2RlKTsKIApAQCAtODYsNyArMTQyLDIyIEBACiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19uZXN0ZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7Ci0JcmV0dXJuIHN2bS0+bmVzdGVkX3ZtY2I7CisJcmV0dXJuIHN2bS0+bmVzdGVkLnZtY2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfZ2lmKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXN2bS0+dmNwdS5hcmNoLmhmbGFncyB8PSBIRl9HSUZfTUFTSzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfZ2lmKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXN2bS0+dmNwdS5hcmNoLmhmbGFncyAmPSB+SEZfR0lGX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBnaWZfc2V0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXJldHVybiAhIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9HSUZfTUFTSyk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlvcG1fYmFzZTsKQEAgLTE0NywxOSArMjE4LDYgQEAKIAlhc20gdm9sYXRpbGUgKF9fZXgoU1ZNX0lOVkxQR0EpIDo6ICJhIihhZGRyKSwgImMiKGFzaWQpKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2bV9yZWFkX2NyMih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY3IyOwotCi0JYXNtIHZvbGF0aWxlICgibW92ICUlY3IyLCAlMCIgOiAiPXIiIChjcjIpKTsKLQlyZXR1cm4gY3IyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3dyaXRlX2NyMih1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlY3IyIiA6OiAiciIgKHZhbCkpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZm9yY2VfbmV3X2FzaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXRvX3N2bSh2Y3B1KS0+YXNpZF9nZW5lcmF0aW9uLS07CkBAIC0yNjMsNyArMzIxLDcgQEAKIAogCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhOwogCXVpbnQ2NF90IGVmZXI7Ci0Jc3RydWN0IGRlc2NfcHRyIGdkdF9kZXNjcjsKKwlzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSBnZHRfZGVzY3I7CiAJc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQ7CiAJaW50IG1lID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIApAQCAtMjgzLDggKzM0MSw4IEBACiAJc3ZtX2RhdGEtPm1heF9hc2lkID0gY3B1aWRfZWJ4KFNWTV9DUFVJRF9GVU5DKSAtIDE7CiAJc3ZtX2RhdGEtPm5leHRfYXNpZCA9IHN2bV9kYXRhLT5tYXhfYXNpZCArIDE7CiAKLQlhc20gdm9sYXRpbGUgKCJzZ2R0ICUwIiA6ICI9bSIoZ2R0X2Rlc2NyKSk7Ci0JZ2R0ID0gKHN0cnVjdCBkZXNjX3N0cnVjdCAqKWdkdF9kZXNjci5hZGRyZXNzOworCWt2bV9nZXRfZ2R0KCZnZHRfZGVzY3IpOworCWdkdCA9IChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKilnZHRfZGVzY3IuYmFzZTsKIAlzdm1fZGF0YS0+dHNzX2Rlc2MgPSAoc3RydWN0IGt2bV9sZHR0c3NfZGVzYyAqKShnZHQgKyBHRFRfRU5UUllfVFNTKTsKIAogCXJkbXNybChNU1JfRUZFUiwgZWZlcik7CkBAIC0zNjcsOCArNDI1LDYgQEAKICNlbmRpZgogCXNldF9tc3JfaW50ZXJjZXB0aW9uKG1zcnBtLCBNU1JfSzZfU1RBUiwgMSwgMSk7CiAJc2V0X21zcl9pbnRlcmNlcHRpb24obXNycG0sIE1TUl9JQTMyX1NZU0VOVEVSX0NTLCAxLCAxKTsKLQlzZXRfbXNyX2ludGVyY2VwdGlvbihtc3JwbSwgTVNSX0lBMzJfU1lTRU5URVJfRVNQLCAxLCAxKTsKLQlzZXRfbXNyX2ludGVyY2VwdGlvbihtc3JwbSwgTVNSX0lBMzJfU1lTRU5URVJfRUlQLCAxLCAxKTsKIH0KIAogc3RhdGljIHZvaWQgc3ZtX2VuYWJsZV9sYnJ2KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQpAQCAtNTk1LDggKzY1MSwxMCBAQAogCX0KIAlmb3JjZV9uZXdfYXNpZCgmc3ZtLT52Y3B1KTsKIAotCXN2bS0+bmVzdGVkX3ZtY2IgPSAwOwotCXN2bS0+dmNwdS5hcmNoLmhmbGFncyA9IEhGX0dJRl9NQVNLOworCXN2bS0+bmVzdGVkLnZtY2IgPSAwOworCXN2bS0+dmNwdS5hcmNoLmhmbGFncyA9IDA7CisKKwllbmFibGVfZ2lmKHN2bSk7CiB9CiAKIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNjA1LDcgKzY2Myw3IEBACiAKIAlpbml0X3ZtY2Ioc3ZtKTsKIAotCWlmICh2Y3B1LT52Y3B1X2lkICE9IDApIHsKKwlpZiAoIWt2bV92Y3B1X2lzX2JzcCh2Y3B1KSkgewogCQlrdm1fcmlwX3dyaXRlKHZjcHUsIDApOwogCQlzdm0tPnZtY2ItPnNhdmUuY3MuYmFzZSA9IHN2bS0+dmNwdS5hcmNoLnNpcGlfdmVjdG9yIDw8IDEyOwogCQlzdm0tPnZtY2ItPnNhdmUuY3Muc2VsZWN0b3IgPSBzdm0tPnZjcHUuYXJjaC5zaXBpX3ZlY3RvciA8PCA4OwpAQCAtNjU2LDkgKzcxNCw5IEBACiAJaHNhdmVfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFoc2F2ZV9wYWdlKQogCQlnb3RvIHVuaW5pdDsKLQlzdm0tPmhzYXZlID0gcGFnZV9hZGRyZXNzKGhzYXZlX3BhZ2UpOworCXN2bS0+bmVzdGVkLmhzYXZlID0gcGFnZV9hZGRyZXNzKGhzYXZlX3BhZ2UpOwogCi0Jc3ZtLT5uZXN0ZWRfbXNycG0gPSBwYWdlX2FkZHJlc3MobmVzdGVkX21zcnBtX3BhZ2VzKTsKKwlzdm0tPm5lc3RlZC5tc3JwbSA9IHBhZ2VfYWRkcmVzcyhuZXN0ZWRfbXNycG1fcGFnZXMpOwogCiAJc3ZtLT52bWNiID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCWNsZWFyX3BhZ2Uoc3ZtLT52bWNiKTsKQEAgLTY2OSw3ICs3MjcsNyBAQAogCWZ4X2luaXQoJnN2bS0+dmNwdSk7CiAJc3ZtLT52Y3B1LmZwdV9hY3RpdmUgPSAxOwogCXN2bS0+dmNwdS5hcmNoLmFwaWNfYmFzZSA9IDB4ZmVlMDAwMDAgfCBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEU7Ci0JaWYgKHN2bS0+dmNwdS52Y3B1X2lkID09IDApCisJaWYgKGt2bV92Y3B1X2lzX2JzcCgmc3ZtLT52Y3B1KSkKIAkJc3ZtLT52Y3B1LmFyY2guYXBpY19iYXNlIHw9IE1TUl9JQTMyX0FQSUNCQVNFX0JTUDsKIAogCXJldHVybiAmc3ZtLT52Y3B1OwpAQCAtNjg4LDggKzc0Niw4IEBACiAKIAlfX2ZyZWVfcGFnZShwZm5fdG9fcGFnZShzdm0tPnZtY2JfcGEgPj4gUEFHRV9TSElGVCkpOwogCV9fZnJlZV9wYWdlcyh2aXJ0X3RvX3BhZ2Uoc3ZtLT5tc3JwbSksIE1TUlBNX0FMTE9DX09SREVSKTsKLQlfX2ZyZWVfcGFnZSh2aXJ0X3RvX3BhZ2Uoc3ZtLT5oc2F2ZSkpOwotCV9fZnJlZV9wYWdlcyh2aXJ0X3RvX3BhZ2Uoc3ZtLT5uZXN0ZWRfbXNycG0pLCBNU1JQTV9BTExPQ19PUkRFUik7CisJX19mcmVlX3BhZ2UodmlydF90b19wYWdlKHN2bS0+bmVzdGVkLmhzYXZlKSk7CisJX19mcmVlX3BhZ2VzKHZpcnRfdG9fcGFnZShzdm0tPm5lc3RlZC5tc3JwbSksIE1TUlBNX0FMTE9DX09SREVSKTsKIAlrdm1fdmNwdV91bmluaXQodmNwdSk7CiAJa21lbV9jYWNoZV9mcmVlKGt2bV92Y3B1X2NhY2hlLCBzdm0pOwogfQpAQCAtNzQwLDYgKzc5OCwxOCBAQAogCXRvX3N2bSh2Y3B1KS0+dm1jYi0+c2F2ZS5yZmxhZ3MgPSByZmxhZ3M7CiB9CiAKK3N0YXRpYyB2b2lkIHN2bV9jYWNoZV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGt2bV9yZWcgcmVnKQoreworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBWQ1BVX0VYUkVHX1BEUFRSOgorCQlCVUdfT04oIW5wdF9lbmFibGVkKTsKKwkJbG9hZF9wZHB0cnModmNwdSwgdmNwdS0+YXJjaC5jcjMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHN2bV9zZXRfdmludHIoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7CiAJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCB8PSAxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUjsKQEAgLTEwNjEsNyArMTEzMSw2IEBACiAJCXZhbCA9IDA7CiAJfQogCi0JS1ZNVFJBQ0VfMkQoRFJfUkVBRCwgdmNwdSwgKHUzMilkciwgKHUzMil2YWwsIGhhbmRsZXIpOwogCXJldHVybiB2YWw7CiB9CiAKQEAgLTEwNzAsOCArMTEzOSw2IEBACiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKLQlLVk1UUkFDRV8yRChEUl9XUklURSwgdmNwdSwgKHUzMilkciwgKHUzMil2YWx1ZSwgaGFuZGxlcik7Ci0KIAkqZXhjZXB0aW9uID0gMDsKIAogCXN3aXRjaCAoZHIpIHsKQEAgLTExMTksMjUgKzExODYsOSBAQAogCWZhdWx0X2FkZHJlc3MgID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18yOwogCWVycm9yX2NvZGUgPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzE7CiAKLQlpZiAoIW5wdF9lbmFibGVkKQotCQlLVk1UUkFDRV8zRChQQUdFX0ZBVUxULCAmc3ZtLT52Y3B1LCBlcnJvcl9jb2RlLAotCQkJICAgICh1MzIpZmF1bHRfYWRkcmVzcywgKHUzMikoZmF1bHRfYWRkcmVzcyA+PiAzMiksCi0JCQkgICAgaGFuZGxlcik7Ci0JZWxzZQotCQlLVk1UUkFDRV8zRChURFBfRkFVTFQsICZzdm0tPnZjcHUsIGVycm9yX2NvZGUsCi0JCQkgICAgKHUzMilmYXVsdF9hZGRyZXNzLCAodTMyKShmYXVsdF9hZGRyZXNzID4+IDMyKSwKLQkJCSAgICBoYW5kbGVyKTsKLQkvKgotCSAqIEZJWE1FOiBUaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBoZXJlLCBidXQgdGhlcmUgaXMgYSBmbHVzaAotCSAqIG1pc3NpbmcgaW4gdGhlIE1NVSBjb2RlLiBVbnRpbCB3ZSBmaW5kIHRoaXMgYnVnLCBmbHVzaCB0aGUKLQkgKiBjb21wbGV0ZSBUTEIgaGVyZSBvbiBhbiBOUEYKLQkgKi8KLQlpZiAobnB0X2VuYWJsZWQpCi0JCXN2bV9mbHVzaF90bGIoJnN2bS0+dmNwdSk7Ci0JZWxzZSB7Ci0JCWlmIChrdm1fZXZlbnRfbmVlZHNfcmVpbmplY3Rpb24oJnN2bS0+dmNwdSkpCi0JCQlrdm1fbW11X3VucHJvdGVjdF9wYWdlX3ZpcnQoJnN2bS0+dmNwdSwgZmF1bHRfYWRkcmVzcyk7Ci0JfQorCXRyYWNlX2t2bV9wYWdlX2ZhdWx0KGZhdWx0X2FkZHJlc3MsIGVycm9yX2NvZGUpOworCWlmICghbnB0X2VuYWJsZWQgJiYga3ZtX2V2ZW50X25lZWRzX3JlaW5qZWN0aW9uKCZzdm0tPnZjcHUpKQorCQlrdm1fbW11X3VucHJvdGVjdF9wYWdlX3ZpcnQoJnN2bS0+dmNwdSwgZmF1bHRfYWRkcmVzcyk7CiAJcmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCgmc3ZtLT52Y3B1LCBmYXVsdF9hZGRyZXNzLCBlcnJvcl9jb2RlKTsKIH0KIApAQCAtMTI1MywxNCArMTMwNCwxMiBAQAogCiBzdGF0aWMgaW50IG5taV9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewotCUtWTVRSQUNFXzBEKE5NSSwgJnN2bS0+dmNwdSwgaGFuZGxlcik7CiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgaW50cl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCSsrc3ZtLT52Y3B1LnN0YXQuaXJxX2V4aXRzOwotCUtWTVRSQUNFXzBEKElOVFIsICZzdm0tPnZjcHUsIGhhbmRsZXIpOwogCXJldHVybiAxOwogfQogCkBAIC0xMzAzLDQ0ICsxMzUyLDM5IEBACiBzdGF0aWMgaW50IG5lc3RlZF9zdm1fY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1bnNpZ25lZCBuciwKIAkJCQkgICAgICBib29sIGhhc19lcnJvcl9jb2RlLCB1MzIgZXJyb3JfY29kZSkKIHsKLQlpZiAoaXNfbmVzdGVkKHN2bSkpIHsKLQkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSA9IFNWTV9FWElUX0VYQ1BfQkFTRSArIG5yOwotCQlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlX2hpID0gMDsKLQkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xID0gZXJyb3JfY29kZTsKLQkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18yID0gc3ZtLT52Y3B1LmFyY2guY3IyOwotCQlpZiAobmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3ZtLCBmYWxzZSkpIHsKLQkJCW5zdm1fcHJpbnRrKCJWTWV4aXQgLT4gRVhDUCAweCV4XG4iLCBucik7CisJaWYgKCFpc19uZXN0ZWQoc3ZtKSkKKwkJcmV0dXJuIDA7CiAKLQkJCW5lc3RlZF9zdm1fdm1leGl0KHN2bSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlID0gU1ZNX0VYSVRfRVhDUF9CQVNFICsgbnI7CisJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZV9oaSA9IDA7CisJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xID0gZXJyb3JfY29kZTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzIgPSBzdm0tPnZjcHUuYXJjaC5jcjI7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gbmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3ZtKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbmVzdGVkX3N2bV9pbnRyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogewotCWlmIChpc19uZXN0ZWQoc3ZtKSkgewotCQlpZiAoIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9WSU5UUl9NQVNLKSkKLQkJCXJldHVybiAwOworCWlmICghaXNfbmVzdGVkKHN2bSkpCisJCXJldHVybiAwOwogCi0JCWlmICghKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX0hJRl9NQVNLKSkKLQkJCXJldHVybiAwOworCWlmICghKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX1ZJTlRSX01BU0spKQorCQlyZXR1cm4gMDsKIAotCQlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlID0gU1ZNX0VYSVRfSU5UUjsKKwlpZiAoIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9ISUZfTUFTSykpCisJCXJldHVybiAwOwogCi0JCWlmIChuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZChzdm0sIGZhbHNlKSkgewotCQkJbnN2bV9wcmludGsoIlZNZXhpdCAtPiBJTlRSXG4iKTsKLQkJCW5lc3RlZF9zdm1fdm1leGl0KHN2bSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQorCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUgPSBTVk1fRVhJVF9JTlRSOworCisJaWYgKG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkKHN2bSkpIHsKKwkJbnN2bV9wcmludGsoIlZNZXhpdCAtPiBJTlRSXG4iKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqbmVzdGVkX3N2bV9nZXRfcGFnZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IGdwYSkKK3N0YXRpYyB2b2lkICpuZXN0ZWRfc3ZtX21hcChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IGdwYSwgZW51bSBrbV90eXBlIGlkeCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIApAQCAtMTM0OCwxNDMgKzEzOTIsNDggQEAKIAlwYWdlID0gZ2ZuX3RvX3BhZ2Uoc3ZtLT52Y3B1Lmt2bSwgZ3BhID4+IFBBR0VfU0hJRlQpOwogCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKLQlpZiAoaXNfZXJyb3JfcGFnZShwYWdlKSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogY291bGQgbm90IGZpbmQgcGFnZSBhdCAweCVsbHhcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgZ3BhKTsKLQkJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTsKLQkJa3ZtX2luamVjdF9ncCgmc3ZtLT52Y3B1LCAwKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiBwYWdlOworCWlmIChpc19lcnJvcl9wYWdlKHBhZ2UpKQorCQlnb3RvIGVycm9yOworCisJcmV0dXJuIGttYXBfYXRvbWljKHBhZ2UsIGlkeCk7CisKK2Vycm9yOgorCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7CisJa3ZtX2luamVjdF9ncCgmc3ZtLT52Y3B1LCAwKTsKKworCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IG5lc3RlZF9zdm1fZG8oc3RydWN0IHZjcHVfc3ZtICpzdm0sCi0JCQkgdTY0IGFyZzFfZ3BhLCB1NjQgYXJnMl9ncGEsIHZvaWQgKm9wYXF1ZSwKLQkJCSBpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKLQkJCQkJdm9pZCAqYXJnMSwKLQkJCQkJdm9pZCAqYXJnMiwKLQkJCQkJdm9pZCAqb3BhcXVlKSkKK3N0YXRpYyB2b2lkIG5lc3RlZF9zdm1fdW5tYXAodm9pZCAqYWRkciwgZW51bSBrbV90eXBlIGlkeCkKIHsKLQlzdHJ1Y3QgcGFnZSAqYXJnMV9wYWdlOwotCXN0cnVjdCBwYWdlICphcmcyX3BhZ2UgPSBOVUxMOwotCXZvaWQgKmFyZzE7Ci0Jdm9pZCAqYXJnMiA9IE5VTEw7Ci0JaW50IHJldHZhbDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCWFyZzFfcGFnZSA9IG5lc3RlZF9zdm1fZ2V0X3BhZ2Uoc3ZtLCBhcmcxX2dwYSk7Ci0JaWYoYXJnMV9wYWdlID09IE5VTEwpCi0JCXJldHVybiAxOworCWlmICghYWRkcikKKwkJcmV0dXJuOwogCi0JaWYgKGFyZzJfZ3BhKSB7Ci0JCWFyZzJfcGFnZSA9IG5lc3RlZF9zdm1fZ2V0X3BhZ2Uoc3ZtLCBhcmcyX2dwYSk7Ci0JCWlmKGFyZzJfcGFnZSA9PSBOVUxMKSB7Ci0JCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKGFyZzFfcGFnZSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KKwlwYWdlID0ga21hcF9hdG9taWNfdG9fcGFnZShhZGRyKTsKIAotCWFyZzEgPSBrbWFwX2F0b21pYyhhcmcxX3BhZ2UsIEtNX1VTRVIwKTsKLQlpZiAoYXJnMl9ncGEpCi0JCWFyZzIgPSBrbWFwX2F0b21pYyhhcmcyX3BhZ2UsIEtNX1VTRVIxKTsKLQotCXJldHZhbCA9IGhhbmRsZXIoc3ZtLCBhcmcxLCBhcmcyLCBvcGFxdWUpOwotCi0Ja3VubWFwX2F0b21pYyhhcmcxLCBLTV9VU0VSMCk7Ci0JaWYgKGFyZzJfZ3BhKQotCQlrdW5tYXBfYXRvbWljKGFyZzIsIEtNX1VTRVIxKTsKLQotCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkoYXJnMV9wYWdlKTsKLQlpZiAoYXJnMl9ncGEpCi0JCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkoYXJnMl9wYWdlKTsKLQotCXJldHVybiByZXR2YWw7CisJa3VubWFwX2F0b21pYyhhZGRyLCBpZHgpOworCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkocGFnZSk7CiB9CiAKLXN0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWRfcmVhbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKLQkJCQkJdm9pZCAqYXJnMSwKLQkJCQkJdm9pZCAqYXJnMiwKLQkJCQkJdm9pZCAqb3BhcXVlKQorc3RhdGljIGJvb2wgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWRfbXNyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogewotCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYiA9IChzdHJ1Y3Qgdm1jYiAqKWFyZzE7Ci0JYm9vbCBrdm1fb3ZlcnJpZGVzID0gKihib29sICopb3BhcXVlOwotCXUzMiBleGl0X2NvZGUgPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlOwotCi0JaWYgKGt2bV9vdmVycmlkZXMpIHsKLQkJc3dpdGNoIChleGl0X2NvZGUpIHsKLQkJY2FzZSBTVk1fRVhJVF9JTlRSOgotCQljYXNlIFNWTV9FWElUX05NSToKLQkJCXJldHVybiAwOwotCQkvKiBGb3Igbm93IHdlIGFyZSBhbHdheXMgaGFuZGxpbmcgTlBGcyB3aGVuIHVzaW5nIHRoZW0gKi8KLQkJY2FzZSBTVk1fRVhJVF9OUEY6Ci0JCQlpZiAobnB0X2VuYWJsZWQpCi0JCQkJcmV0dXJuIDA7Ci0JCQlicmVhazsKLQkJLyogV2hlbiB3ZSdyZSBzaGFkb3dpbmcsIHRyYXAgUEZzICovCi0JCWNhc2UgU1ZNX0VYSVRfRVhDUF9CQVNFICsgUEZfVkVDVE9SOgotCQkJaWYgKCFucHRfZW5hYmxlZCkKLQkJCQlyZXR1cm4gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlzd2l0Y2ggKGV4aXRfY29kZSkgewotCWNhc2UgU1ZNX0VYSVRfUkVBRF9DUjAgLi4uIFNWTV9FWElUX1JFQURfQ1I4OiB7Ci0JCXUzMiBjcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfUkVBRF9DUjApOwotCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQgJiBjcl9iaXRzKQotCQkJcmV0dXJuIDE7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNWTV9FWElUX1dSSVRFX0NSMCAuLi4gU1ZNX0VYSVRfV1JJVEVfQ1I4OiB7Ci0JCXUzMiBjcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfV1JJVEVfQ1IwKTsKLQkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSAmIGNyX2JpdHMpCi0JCQlyZXR1cm4gMTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU1ZNX0VYSVRfUkVBRF9EUjAgLi4uIFNWTV9FWElUX1JFQURfRFI3OiB7Ci0JCXUzMiBkcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfUkVBRF9EUjApOwotCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQgJiBkcl9iaXRzKQotCQkJcmV0dXJuIDE7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNWTV9FWElUX1dSSVRFX0RSMCAuLi4gU1ZNX0VYSVRfV1JJVEVfRFI3OiB7Ci0JCXUzMiBkcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfV1JJVEVfRFIwKTsKLQkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl93cml0ZSAmIGRyX2JpdHMpCi0JCQlyZXR1cm4gMTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU1ZNX0VYSVRfRVhDUF9CQVNFIC4uLiBTVk1fRVhJVF9FWENQX0JBU0UgKyAweDFmOiB7Ci0JCXUzMiBleGNwX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9FWENQX0JBU0UpOwotCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgJiBleGNwX2JpdHMpCi0JCQlyZXR1cm4gMTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6IHsKLQkJdTY0IGV4aXRfYml0cyA9IDFVTEwgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX0lOVFIpOwotCQluc3ZtX3ByaW50aygiZXhpdCBjb2RlOiAweCV4XG4iLCBleGl0X2NvZGUpOwotCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0ICYgZXhpdF9iaXRzKQotCQkJcmV0dXJuIDE7Ci0JfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkX21zcihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKLQkJCQkgICAgICAgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMiwKLQkJCQkgICAgICAgdm9pZCAqb3BhcXVlKQotewotCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYiA9IChzdHJ1Y3Qgdm1jYiAqKWFyZzE7Ci0JdTggKm1zcnBtID0gKHU4ICopYXJnMjsKLSAgICAgICAgdTMyIHQwLCB0MTsKLQl1MzIgbXNyID0gc3ZtLT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXTsKIAl1MzIgcGFyYW0gPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzEgJiAxOworCXUzMiBtc3IgPSBzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SQ1hdOworCWJvb2wgcmV0ID0gZmFsc2U7CisJdTMyIHQwLCB0MTsKKwl1OCAqbXNycG07CiAKLQlpZiAoIShuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgJiAoMVVMTCA8PCBJTlRFUkNFUFRfTVNSX1BST1QpKSkKLQkJcmV0dXJuIDA7CisJaWYgKCEoc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0ICYgKDFVTEwgPDwgSU5URVJDRVBUX01TUl9QUk9UKSkpCisJCXJldHVybiBmYWxzZTsKIAotCXN3aXRjaChtc3IpIHsKKwltc3JwbSA9IG5lc3RlZF9zdm1fbWFwKHN2bSwgc3ZtLT5uZXN0ZWQudm1jYl9tc3JwbSwgS01fVVNFUjApOworCisJaWYgKCFtc3JwbSkKKwkJZ290byBvdXQ7CisKKwlzd2l0Y2ggKG1zcikgewogCWNhc2UgMCAuLi4gMHgxZmZmOgogCQl0MCA9IChtc3IgKiAyKSAlIDg7CiAJCXQxID0gbXNyIC8gODsKQEAgLTE1MDAsODQgKzE0NDksMTg5IEBACiAJCXQwICU9IDg7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAxOworCQlyZXQgPSB0cnVlOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBtc3JwbVt0MV0gJiAoKDEgPDwgcGFyYW0pIDw8IHQwKTsKKworb3V0OgorCW5lc3RlZF9zdm1fdW5tYXAobXNycG0sIEtNX1VTRVIwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X3NwZWNpYWwoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJdTMyIGV4aXRfY29kZSA9IHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGU7CisKKwlzd2l0Y2ggKGV4aXRfY29kZSkgeworCWNhc2UgU1ZNX0VYSVRfSU5UUjoKKwljYXNlIFNWTV9FWElUX05NSToKKwkJcmV0dXJuIE5FU1RFRF9FWElUX0hPU1Q7CisJCS8qIEZvciBub3cgd2UgYXJlIGFsd2F5cyBoYW5kbGluZyBOUEZzIHdoZW4gdXNpbmcgdGhlbSAqLworCWNhc2UgU1ZNX0VYSVRfTlBGOgorCQlpZiAobnB0X2VuYWJsZWQpCisJCQlyZXR1cm4gTkVTVEVEX0VYSVRfSE9TVDsKKwkJYnJlYWs7CisJLyogV2hlbiB3ZSdyZSBzaGFkb3dpbmcsIHRyYXAgUEZzICovCisJY2FzZSBTVk1fRVhJVF9FWENQX0JBU0UgKyBQRl9WRUNUT1I6CisJCWlmICghbnB0X2VuYWJsZWQpCisJCQlyZXR1cm4gTkVTVEVEX0VYSVRfSE9TVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotCWlmIChtc3JwbVt0MV0gJiAoKDEgPDwgcGFyYW0pIDw8IHQwKSkKLQkJcmV0dXJuIDE7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVTVEVEX0VYSVRfQ09OVElOVUU7CiB9CiAKLXN0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGJvb2wga3ZtX292ZXJyaWRlKQorLyoKKyAqIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGlzICN2bWV4aXQgd2FzIGFscmVhZHkgaGFuZGxlZAorICovCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogewotCWJvb2wgayA9IGt2bV9vdmVycmlkZTsKKwl1MzIgZXhpdF9jb2RlID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZTsKKwlpbnQgdm1leGl0ID0gTkVTVEVEX0VYSVRfSE9TVDsKIAotCXN3aXRjaCAoc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSkgeworCXN3aXRjaCAoZXhpdF9jb2RlKSB7CiAJY2FzZSBTVk1fRVhJVF9NU1I6Ci0JCXJldHVybiBuZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT5uZXN0ZWRfdm1jYiwKLQkJCQkgICAgIHN2bS0+bmVzdGVkX3ZtY2JfbXNycG0sIE5VTEwsCi0JCQkJICAgICBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZF9tc3IpOwotCWRlZmF1bHQ6IGJyZWFrOworCQl2bWV4aXQgPSBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZF9tc3Ioc3ZtKTsKKwkJYnJlYWs7CisJY2FzZSBTVk1fRVhJVF9SRUFEX0NSMCAuLi4gU1ZNX0VYSVRfUkVBRF9DUjg6IHsKKwkJdTMyIGNyX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9SRUFEX0NSMCk7CisJCWlmIChzdm0tPm5lc3RlZC5pbnRlcmNlcHRfY3JfcmVhZCAmIGNyX2JpdHMpCisJCQl2bWV4aXQgPSBORVNURURfRVhJVF9ET05FOworCQlicmVhazsKKwl9CisJY2FzZSBTVk1fRVhJVF9XUklURV9DUjAgLi4uIFNWTV9FWElUX1dSSVRFX0NSODogeworCQl1MzIgY3JfYml0cyA9IDEgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX1dSSVRFX0NSMCk7CisJCWlmIChzdm0tPm5lc3RlZC5pbnRlcmNlcHRfY3Jfd3JpdGUgJiBjcl9iaXRzKQorCQkJdm1leGl0ID0gTkVTVEVEX0VYSVRfRE9ORTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU1ZNX0VYSVRfUkVBRF9EUjAgLi4uIFNWTV9FWElUX1JFQURfRFI3OiB7CisJCXUzMiBkcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfUkVBRF9EUjApOworCQlpZiAoc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2RyX3JlYWQgJiBkcl9iaXRzKQorCQkJdm1leGl0ID0gTkVTVEVEX0VYSVRfRE9ORTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU1ZNX0VYSVRfV1JJVEVfRFIwIC4uLiBTVk1fRVhJVF9XUklURV9EUjc6IHsKKwkJdTMyIGRyX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9XUklURV9EUjApOworCQlpZiAoc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2RyX3dyaXRlICYgZHJfYml0cykKKwkJCXZtZXhpdCA9IE5FU1RFRF9FWElUX0RPTkU7CisJCWJyZWFrOworCX0KKwljYXNlIFNWTV9FWElUX0VYQ1BfQkFTRSAuLi4gU1ZNX0VYSVRfRVhDUF9CQVNFICsgMHgxZjogeworCQl1MzIgZXhjcF9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfRVhDUF9CQVNFKTsKKwkJaWYgKHN2bS0+bmVzdGVkLmludGVyY2VwdF9leGNlcHRpb25zICYgZXhjcF9iaXRzKQorCQkJdm1leGl0ID0gTkVTVEVEX0VYSVRfRE9ORTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6IHsKKwkJdTY0IGV4aXRfYml0cyA9IDFVTEwgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX0lOVFIpOworCQluc3ZtX3ByaW50aygiZXhpdCBjb2RlOiAweCV4XG4iLCBleGl0X2NvZGUpOworCQlpZiAoc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0ICYgZXhpdF9iaXRzKQorCQkJdm1leGl0ID0gTkVTVEVEX0VYSVRfRE9ORTsKKwl9CiAJfQogCi0JcmV0dXJuIG5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPm5lc3RlZF92bWNiLCAwLCAmaywKLQkJCSAgICAgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWRfcmVhbCk7CisJaWYgKHZtZXhpdCA9PSBORVNURURfRVhJVF9ET05FKSB7CisJCW5zdm1fcHJpbnRrKCIjVk1FWElUIHJlYXNvbj0lMDR4XG4iLCBleGl0X2NvZGUpOworCQluZXN0ZWRfc3ZtX3ZtZXhpdChzdm0pOworCX0KKworCXJldHVybiB2bWV4aXQ7CiB9CiAKLXN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXRfcmVhbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdm9pZCAqYXJnMSwKLQkJCQkgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3ZtY2JfY29udHJvbF9hcmVhKHN0cnVjdCB2bWNiICpkc3Rfdm1jYiwgc3RydWN0IHZtY2IgKmZyb21fdm1jYikKIHsKLQlzdHJ1Y3Qgdm1jYiAqbmVzdGVkX3ZtY2IgPSAoc3RydWN0IHZtY2IgKilhcmcxOwotCXN0cnVjdCB2bWNiICpoc2F2ZSA9IHN2bS0+aHNhdmU7Ci0JdTY0IG5lc3RlZF9zYXZlW10gPSB7IG5lc3RlZF92bWNiLT5zYXZlLmNyMCwKLQkJCSAgICAgIG5lc3RlZF92bWNiLT5zYXZlLmNyMywKLQkJCSAgICAgIG5lc3RlZF92bWNiLT5zYXZlLmNyNCwKLQkJCSAgICAgIG5lc3RlZF92bWNiLT5zYXZlLmVmZXIsCi0JCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZCwKLQkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSwKLQkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl9yZWFkLAotCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3dyaXRlLAotCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMsCi0JCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQsCi0JCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5tc3JwbV9iYXNlX3BhLAotCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW9wbV9iYXNlX3BhLAotCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wudHNjX29mZnNldCB9OworCXN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqZHN0ICA9ICZkc3Rfdm1jYi0+Y29udHJvbDsKKwlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmZyb20gPSAmZnJvbV92bWNiLT5jb250cm9sOworCisJZHN0LT5pbnRlcmNlcHRfY3JfcmVhZCAgICA9IGZyb20tPmludGVyY2VwdF9jcl9yZWFkOworCWRzdC0+aW50ZXJjZXB0X2NyX3dyaXRlICAgPSBmcm9tLT5pbnRlcmNlcHRfY3Jfd3JpdGU7CisJZHN0LT5pbnRlcmNlcHRfZHJfcmVhZCAgICA9IGZyb20tPmludGVyY2VwdF9kcl9yZWFkOworCWRzdC0+aW50ZXJjZXB0X2RyX3dyaXRlICAgPSBmcm9tLT5pbnRlcmNlcHRfZHJfd3JpdGU7CisJZHN0LT5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9IGZyb20tPmludGVyY2VwdF9leGNlcHRpb25zOworCWRzdC0+aW50ZXJjZXB0ICAgICAgICAgICAgPSBmcm9tLT5pbnRlcmNlcHQ7CisJZHN0LT5pb3BtX2Jhc2VfcGEgICAgICAgICA9IGZyb20tPmlvcG1fYmFzZV9wYTsKKwlkc3QtPm1zcnBtX2Jhc2VfcGEgICAgICAgID0gZnJvbS0+bXNycG1fYmFzZV9wYTsKKwlkc3QtPnRzY19vZmZzZXQgICAgICAgICAgID0gZnJvbS0+dHNjX29mZnNldDsKKwlkc3QtPmFzaWQgICAgICAgICAgICAgICAgID0gZnJvbS0+YXNpZDsKKwlkc3QtPnRsYl9jdGwgICAgICAgICAgICAgID0gZnJvbS0+dGxiX2N0bDsKKwlkc3QtPmludF9jdGwgICAgICAgICAgICAgID0gZnJvbS0+aW50X2N0bDsKKwlkc3QtPmludF92ZWN0b3IgICAgICAgICAgID0gZnJvbS0+aW50X3ZlY3RvcjsKKwlkc3QtPmludF9zdGF0ZSAgICAgICAgICAgID0gZnJvbS0+aW50X3N0YXRlOworCWRzdC0+ZXhpdF9jb2RlICAgICAgICAgICAgPSBmcm9tLT5leGl0X2NvZGU7CisJZHN0LT5leGl0X2NvZGVfaGkgICAgICAgICA9IGZyb20tPmV4aXRfY29kZV9oaTsKKwlkc3QtPmV4aXRfaW5mb18xICAgICAgICAgID0gZnJvbS0+ZXhpdF9pbmZvXzE7CisJZHN0LT5leGl0X2luZm9fMiAgICAgICAgICA9IGZyb20tPmV4aXRfaW5mb18yOworCWRzdC0+ZXhpdF9pbnRfaW5mbyAgICAgICAgPSBmcm9tLT5leGl0X2ludF9pbmZvOworCWRzdC0+ZXhpdF9pbnRfaW5mb19lcnIgICAgPSBmcm9tLT5leGl0X2ludF9pbmZvX2VycjsKKwlkc3QtPm5lc3RlZF9jdGwgICAgICAgICAgID0gZnJvbS0+bmVzdGVkX2N0bDsKKwlkc3QtPmV2ZW50X2luaiAgICAgICAgICAgID0gZnJvbS0+ZXZlbnRfaW5qOworCWRzdC0+ZXZlbnRfaW5qX2VyciAgICAgICAgPSBmcm9tLT5ldmVudF9pbmpfZXJyOworCWRzdC0+bmVzdGVkX2NyMyAgICAgICAgICAgPSBmcm9tLT5uZXN0ZWRfY3IzOworCWRzdC0+bGJyX2N0bCAgICAgICAgICAgICAgPSBmcm9tLT5sYnJfY3RsOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYjsKKwlzdHJ1Y3Qgdm1jYiAqaHNhdmUgPSBzdm0tPm5lc3RlZC5oc2F2ZTsKKwlzdHJ1Y3Qgdm1jYiAqdm1jYiA9IHN2bS0+dm1jYjsKKworCW5lc3RlZF92bWNiID0gbmVzdGVkX3N2bV9tYXAoc3ZtLCBzdm0tPm5lc3RlZC52bWNiLCBLTV9VU0VSMCk7CisJaWYgKCFuZXN0ZWRfdm1jYikKKwkJcmV0dXJuIDE7CiAKIAkvKiBHaXZlIHRoZSBjdXJyZW50IHZtY2IgdG8gdGhlIGd1ZXN0ICovCi0JbWVtY3B5KG5lc3RlZF92bWNiLCBzdm0tPnZtY2IsIHNpemVvZihzdHJ1Y3Qgdm1jYikpOwotCW5lc3RlZF92bWNiLT5zYXZlLmNyMCA9IG5lc3RlZF9zYXZlWzBdOwotCWlmICghbnB0X2VuYWJsZWQpCi0JCW5lc3RlZF92bWNiLT5zYXZlLmNyMyA9IG5lc3RlZF9zYXZlWzFdOwotCW5lc3RlZF92bWNiLT5zYXZlLmNyNCA9IG5lc3RlZF9zYXZlWzJdOwotCW5lc3RlZF92bWNiLT5zYXZlLmVmZXIgPSBuZXN0ZWRfc2F2ZVszXTsKLQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZCA9IG5lc3RlZF9zYXZlWzRdOwotCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSA9IG5lc3RlZF9zYXZlWzVdOwotCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl9yZWFkID0gbmVzdGVkX3NhdmVbNl07Ci0JbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3dyaXRlID0gbmVzdGVkX3NhdmVbN107Ci0JbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgPSBuZXN0ZWRfc2F2ZVs4XTsKLQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgPSBuZXN0ZWRfc2F2ZVs5XTsKLQluZXN0ZWRfdm1jYi0+Y29udHJvbC5tc3JwbV9iYXNlX3BhID0gbmVzdGVkX3NhdmVbMTBdOwotCW5lc3RlZF92bWNiLT5jb250cm9sLmlvcG1fYmFzZV9wYSA9IG5lc3RlZF9zYXZlWzExXTsKLQluZXN0ZWRfdm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ID0gbmVzdGVkX3NhdmVbMTJdOworCWRpc2FibGVfZ2lmKHN2bSk7CisKKwluZXN0ZWRfdm1jYi0+c2F2ZS5lcyAgICAgPSB2bWNiLT5zYXZlLmVzOworCW5lc3RlZF92bWNiLT5zYXZlLmNzICAgICA9IHZtY2ItPnNhdmUuY3M7CisJbmVzdGVkX3ZtY2ItPnNhdmUuc3MgICAgID0gdm1jYi0+c2F2ZS5zczsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5kcyAgICAgPSB2bWNiLT5zYXZlLmRzOworCW5lc3RlZF92bWNiLT5zYXZlLmdkdHIgICA9IHZtY2ItPnNhdmUuZ2R0cjsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5pZHRyICAgPSB2bWNiLT5zYXZlLmlkdHI7CisJaWYgKG5wdF9lbmFibGVkKQorCQluZXN0ZWRfdm1jYi0+c2F2ZS5jcjMgICAgPSB2bWNiLT5zYXZlLmNyMzsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5jcjIgICAgPSB2bWNiLT5zYXZlLmNyMjsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5yZmxhZ3MgPSB2bWNiLT5zYXZlLnJmbGFnczsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5yaXAgICAgPSB2bWNiLT5zYXZlLnJpcDsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5yc3AgICAgPSB2bWNiLT5zYXZlLnJzcDsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5yYXggICAgPSB2bWNiLT5zYXZlLnJheDsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5kcjcgICAgPSB2bWNiLT5zYXZlLmRyNzsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5kcjYgICAgPSB2bWNiLT5zYXZlLmRyNjsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5jcGwgICAgPSB2bWNiLT5zYXZlLmNwbDsKKworCW5lc3RlZF92bWNiLT5jb250cm9sLmludF9jdGwgICAgICAgICAgID0gdm1jYi0+Y29udHJvbC5pbnRfY3RsOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludF92ZWN0b3IgICAgICAgID0gdm1jYi0+Y29udHJvbC5pbnRfdmVjdG9yOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludF9zdGF0ZSAgICAgICAgID0gdm1jYi0+Y29udHJvbC5pbnRfc3RhdGU7CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlICAgICAgICAgPSB2bWNiLT5jb250cm9sLmV4aXRfY29kZTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5leGl0X2NvZGVfaGkgICAgICA9IHZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlX2hpOworCW5lc3RlZF92bWNiLT5jb250cm9sLmV4aXRfaW5mb18xICAgICAgID0gdm1jYi0+Y29udHJvbC5leGl0X2luZm9fMTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5leGl0X2luZm9fMiAgICAgICA9IHZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzI7CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mbyAgICAgPSB2bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm87CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnIgPSB2bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm9fZXJyOworCW5lc3RlZF92bWNiLT5jb250cm9sLnRsYl9jdGwgICAgICAgICAgID0gMDsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5ldmVudF9pbmogICAgICAgICA9IDA7CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qX2VyciAgICAgPSAwOwogCiAJLyogV2UgYWx3YXlzIHNldCBWX0lOVFJfTUFTS0lORyBhbmQgcmVtZW1iZXIgdGhlIG9sZCB2YWx1ZSBpbiBoZmxhZ3MgKi8KIAlpZiAoIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9WSU5UUl9NQVNLKSkKIAkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCAmPSB+Vl9JTlRSX01BU0tJTkdfTUFTSzsKIAotCWlmICgobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCAmIFZfSVJRX01BU0spICYmCi0JICAgIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfdmVjdG9yKSkgewotCQluc3ZtX3ByaW50aygiV0FSTklORzogSVJRIDB4JXggc3RpbGwgZW5hYmxlZCBvbiAjVk1FWElUXG4iLAotCQkJCW5lc3RlZF92bWNiLT5jb250cm9sLmludF92ZWN0b3IpOwotCX0KLQogCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGNvbnRyb2wgZW50cmllcyAqLwotCXN2bS0+dm1jYi0+Y29udHJvbCA9IGhzYXZlLT5jb250cm9sOworCWNvcHlfdm1jYl9jb250cm9sX2FyZWEodm1jYiwgaHNhdmUpOwogCiAJLyogS2lsbCBhbnkgcGVuZGluZyBleGNlcHRpb25zICovCiAJaWYgKHN2bS0+dmNwdS5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nID09IHRydWUpCiAJCW5zdm1fcHJpbnRrKCJXQVJOSU5HOiBQZW5kaW5nIEV4Y2VwdGlvblxuIik7Ci0Jc3ZtLT52Y3B1LmFyY2guZXhjZXB0aW9uLnBlbmRpbmcgPSBmYWxzZTsKKworCWt2bV9jbGVhcl9leGNlcHRpb25fcXVldWUoJnN2bS0+dmNwdSk7CisJa3ZtX2NsZWFyX2ludGVycnVwdF9xdWV1ZSgmc3ZtLT52Y3B1KTsKIAogCS8qIFJlc3RvcmUgc2VsZWN0ZWQgc2F2ZSBlbnRyaWVzICovCiAJc3ZtLT52bWNiLT5zYXZlLmVzID0gaHNhdmUtPnNhdmUuZXM7CkBAIC0xNjAzLDE5ICsxNjU3LDEwIEBACiAJc3ZtLT52bWNiLT5zYXZlLmNwbCA9IDA7CiAJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm8gPSAwOwogCi0Jc3ZtLT52Y3B1LmFyY2guaGZsYWdzICY9IH5IRl9HSUZfTUFTSzsKIAkvKiBFeGl0IG5lc3RlZCBTVk0gbW9kZSAqLwotCXN2bS0+bmVzdGVkX3ZtY2IgPSAwOworCXN2bS0+bmVzdGVkLnZtY2IgPSAwOwogCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXQoc3RydWN0IHZjcHVfc3ZtICpzdm0pCi17Ci0JbnN2bV9wcmludGsoIlZNZXhpdFxuIik7Ci0JaWYgKG5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPm5lc3RlZF92bWNiLCAwLAotCQkJICBOVUxMLCBuZXN0ZWRfc3ZtX3ZtZXhpdF9yZWFsKSkKLQkJcmV0dXJuIDE7CisJbmVzdGVkX3N2bV91bm1hcChuZXN0ZWRfdm1jYiwgS01fVVNFUjApOwogCiAJa3ZtX21tdV9yZXNldF9jb250ZXh0KCZzdm0tPnZjcHUpOwogCWt2bV9tbXVfbG9hZCgmc3ZtLT52Y3B1KTsKQEAgLTE2MjMsMzggKzE2NjgsNjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtcnVuX21zcnBtKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICphcmcxLAotCQkJCSAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQorc3RhdGljIGJvb2wgbmVzdGVkX3N2bV92bXJ1bl9tc3JwbShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIHsKKwl1MzIgKm5lc3RlZF9tc3JwbTsKIAlpbnQgaTsKLQl1MzIgKm5lc3RlZF9tc3JwbSA9ICh1MzIqKWFyZzE7Ci0JZm9yIChpPTA7IGk8IFBBR0VfU0laRSAqICgxIDw8IE1TUlBNX0FMTE9DX09SREVSKSAvIDQ7IGkrKykKLQkJc3ZtLT5uZXN0ZWRfbXNycG1baV0gPSBzdm0tPm1zcnBtW2ldIHwgbmVzdGVkX21zcnBtW2ldOwotCXN2bS0+dm1jYi0+Y29udHJvbC5tc3JwbV9iYXNlX3BhID0gX19wYShzdm0tPm5lc3RlZF9tc3JwbSk7CiAKLQlyZXR1cm4gMDsKKwluZXN0ZWRfbXNycG0gPSBuZXN0ZWRfc3ZtX21hcChzdm0sIHN2bS0+bmVzdGVkLnZtY2JfbXNycG0sIEtNX1VTRVIwKTsKKwlpZiAoIW5lc3RlZF9tc3JwbSkKKwkJcmV0dXJuIGZhbHNlOworCisJZm9yIChpPTA7IGk8IFBBR0VfU0laRSAqICgxIDw8IE1TUlBNX0FMTE9DX09SREVSKSAvIDQ7IGkrKykKKwkJc3ZtLT5uZXN0ZWQubXNycG1baV0gPSBzdm0tPm1zcnBtW2ldIHwgbmVzdGVkX21zcnBtW2ldOworCisJc3ZtLT52bWNiLT5jb250cm9sLm1zcnBtX2Jhc2VfcGEgPSBfX3BhKHN2bS0+bmVzdGVkLm1zcnBtKTsKKworCW5lc3RlZF9zdm1fdW5tYXAobmVzdGVkX21zcnBtLCBLTV9VU0VSMCk7CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtcnVuKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICphcmcxLAotCQkJICAgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSkKK3N0YXRpYyBib29sIG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7Ci0Jc3RydWN0IHZtY2IgKm5lc3RlZF92bWNiID0gKHN0cnVjdCB2bWNiICopYXJnMTsKLQlzdHJ1Y3Qgdm1jYiAqaHNhdmUgPSBzdm0tPmhzYXZlOworCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYjsKKwlzdHJ1Y3Qgdm1jYiAqaHNhdmUgPSBzdm0tPm5lc3RlZC5oc2F2ZTsKKwlzdHJ1Y3Qgdm1jYiAqdm1jYiA9IHN2bS0+dm1jYjsKKworCW5lc3RlZF92bWNiID0gbmVzdGVkX3N2bV9tYXAoc3ZtLCBzdm0tPnZtY2ItPnNhdmUucmF4LCBLTV9VU0VSMCk7CisJaWYgKCFuZXN0ZWRfdm1jYikKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyogbmVzdGVkX3ZtY2IgaXMgb3VyIGluZGljYXRvciBpZiBuZXN0ZWQgU1ZNIGlzIGFjdGl2YXRlZCAqLwotCXN2bS0+bmVzdGVkX3ZtY2IgPSBzdm0tPnZtY2ItPnNhdmUucmF4OworCXN2bS0+bmVzdGVkLnZtY2IgPSBzdm0tPnZtY2ItPnNhdmUucmF4OwogCiAJLyogQ2xlYXIgaW50ZXJuYWwgc3RhdHVzICovCi0Jc3ZtLT52Y3B1LmFyY2guZXhjZXB0aW9uLnBlbmRpbmcgPSBmYWxzZTsKKwlrdm1fY2xlYXJfZXhjZXB0aW9uX3F1ZXVlKCZzdm0tPnZjcHUpOworCWt2bV9jbGVhcl9pbnRlcnJ1cHRfcXVldWUoJnN2bS0+dmNwdSk7CiAKIAkvKiBTYXZlIHRoZSBvbGQgdm1jYiwgc28gd2UgZG9uJ3QgbmVlZCB0byBwaWNrIHdoYXQgd2Ugc2F2ZSwgYnV0CiAJICAgY2FuIHJlc3RvcmUgZXZlcnl0aGluZyB3aGVuIGEgVk1FWElUIG9jY3VycyAqLwotCW1lbWNweShoc2F2ZSwgc3ZtLT52bWNiLCBzaXplb2Yoc3RydWN0IHZtY2IpKTsKLQkvKiBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBvcmlnaW5hbCBDUjMgaW4gdGhlIFNQVCBjYXNlICovCi0JaWYgKCFucHRfZW5hYmxlZCkKLQkJaHNhdmUtPnNhdmUuY3IzID0gc3ZtLT52Y3B1LmFyY2guY3IzOwotCWhzYXZlLT5zYXZlLmNyNCA9IHN2bS0+dmNwdS5hcmNoLmNyNDsKLQloc2F2ZS0+c2F2ZS5yaXAgPSBzdm0tPm5leHRfcmlwOworCWhzYXZlLT5zYXZlLmVzICAgICA9IHZtY2ItPnNhdmUuZXM7CisJaHNhdmUtPnNhdmUuY3MgICAgID0gdm1jYi0+c2F2ZS5jczsKKwloc2F2ZS0+c2F2ZS5zcyAgICAgPSB2bWNiLT5zYXZlLnNzOworCWhzYXZlLT5zYXZlLmRzICAgICA9IHZtY2ItPnNhdmUuZHM7CisJaHNhdmUtPnNhdmUuZ2R0ciAgID0gdm1jYi0+c2F2ZS5nZHRyOworCWhzYXZlLT5zYXZlLmlkdHIgICA9IHZtY2ItPnNhdmUuaWR0cjsKKwloc2F2ZS0+c2F2ZS5lZmVyICAgPSBzdm0tPnZjcHUuYXJjaC5zaGFkb3dfZWZlcjsKKwloc2F2ZS0+c2F2ZS5jcjAgICAgPSBzdm0tPnZjcHUuYXJjaC5jcjA7CisJaHNhdmUtPnNhdmUuY3I0ICAgID0gc3ZtLT52Y3B1LmFyY2guY3I0OworCWhzYXZlLT5zYXZlLnJmbGFncyA9IHZtY2ItPnNhdmUucmZsYWdzOworCWhzYXZlLT5zYXZlLnJpcCAgICA9IHN2bS0+bmV4dF9yaXA7CisJaHNhdmUtPnNhdmUucnNwICAgID0gdm1jYi0+c2F2ZS5yc3A7CisJaHNhdmUtPnNhdmUucmF4ICAgID0gdm1jYi0+c2F2ZS5yYXg7CisJaWYgKG5wdF9lbmFibGVkKQorCQloc2F2ZS0+c2F2ZS5jcjMgICAgPSB2bWNiLT5zYXZlLmNyMzsKKwllbHNlCisJCWhzYXZlLT5zYXZlLmNyMyAgICA9IHN2bS0+dmNwdS5hcmNoLmNyMzsKKworCWNvcHlfdm1jYl9jb250cm9sX2FyZWEoaHNhdmUsIHZtY2IpOwogCiAJaWYgKHN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgJiBYODZfRUZMQUdTX0lGKQogCQlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgfD0gSEZfSElGX01BU0s7CkBAIC0xNjc5LDcgKzE3NDksNyBAQAogCQlrdm1fc2V0X2NyMygmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjMpOwogCQlrdm1fbW11X3Jlc2V0X2NvbnRleHQoJnN2bS0+dmNwdSk7CiAJfQotCXN2bS0+dm1jYi0+c2F2ZS5jcjIgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjI7CisJc3ZtLT52bWNiLT5zYXZlLmNyMiA9IHN2bS0+dmNwdS5hcmNoLmNyMiA9IG5lc3RlZF92bWNiLT5zYXZlLmNyMjsKIAlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JBWCwgbmVzdGVkX3ZtY2ItPnNhdmUucmF4KTsKIAlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JTUCwgbmVzdGVkX3ZtY2ItPnNhdmUucnNwKTsKIAlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JJUCwgbmVzdGVkX3ZtY2ItPnNhdmUucmlwKTsKQEAgLTE3MDYsNyArMTc3NiwxNSBAQAogCiAJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCB8PSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQ7CiAKLQlzdm0tPm5lc3RlZF92bWNiX21zcnBtID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wubXNycG1fYmFzZV9wYTsKKwlzdm0tPm5lc3RlZC52bWNiX21zcnBtID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wubXNycG1fYmFzZV9wYTsKKworCS8qIGNhY2hlIGludGVyY2VwdHMgKi8KKwlzdm0tPm5lc3RlZC5pbnRlcmNlcHRfY3JfcmVhZCAgICA9IG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkOworCXN2bS0+bmVzdGVkLmludGVyY2VwdF9jcl93cml0ZSAgID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlOworCXN2bS0+bmVzdGVkLmludGVyY2VwdF9kcl9yZWFkICAgID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQ7CisJc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2RyX3dyaXRlICAgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfd3JpdGU7CisJc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9uczsKKwlzdm0tPm5lc3RlZC5pbnRlcmNlcHQgICAgICAgICAgICA9IG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdDsKIAogCWZvcmNlX25ld19hc2lkKCZzdm0tPnZjcHUpOwogCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mbzsKQEAgLTE3MzQsMTIgKzE4MTIsMTQgQEAKIAlzdm0tPnZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qOwogCXN2bS0+dm1jYi0+Y29udHJvbC5ldmVudF9pbmpfZXJyID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qX2VycjsKIAotCXN2bS0+dmNwdS5hcmNoLmhmbGFncyB8PSBIRl9HSUZfTUFTSzsKKwluZXN0ZWRfc3ZtX3VubWFwKG5lc3RlZF92bWNiLCBLTV9VU0VSMCk7CiAKLQlyZXR1cm4gMDsKKwllbmFibGVfZ2lmKHN2bSk7CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUoc3RydWN0IHZtY2IgKmZyb21fdm1jYiwgc3RydWN0IHZtY2IgKnRvX3ZtY2IpCitzdGF0aWMgdm9pZCBuZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUoc3RydWN0IHZtY2IgKmZyb21fdm1jYiwgc3RydWN0IHZtY2IgKnRvX3ZtY2IpCiB7CiAJdG9fdm1jYi0+c2F2ZS5mcyA9IGZyb21fdm1jYi0+c2F2ZS5mczsKIAl0b192bWNiLT5zYXZlLmdzID0gZnJvbV92bWNiLT5zYXZlLmdzOwpAQCAtMTc1Myw0NCArMTgzMyw0NCBAQAogCXRvX3ZtY2ItPnNhdmUuc3lzZW50ZXJfY3MgPSBmcm9tX3ZtY2ItPnNhdmUuc3lzZW50ZXJfY3M7CiAJdG9fdm1jYi0+c2F2ZS5zeXNlbnRlcl9lc3AgPSBmcm9tX3ZtY2ItPnNhdmUuc3lzZW50ZXJfZXNwOwogCXRvX3ZtY2ItPnNhdmUuc3lzZW50ZXJfZWlwID0gZnJvbV92bWNiLT5zYXZlLnN5c2VudGVyX2VpcDsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1sb2FkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICpuZXN0ZWRfdm1jYiwKLQkJCSAgICAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQotewotCXJldHVybiBuZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUoKHN0cnVjdCB2bWNiICopbmVzdGVkX3ZtY2IsIHN2bS0+dm1jYik7Ci19Ci0KLXN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bXNhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHZvaWQgKm5lc3RlZF92bWNiLAotCQkJICAgICB2b2lkICphcmcyLCB2b2lkICpvcGFxdWUpCi17Ci0JcmV0dXJuIG5lc3RlZF9zdm1fdm1sb2Fkc2F2ZShzdm0tPnZtY2IsIChzdHJ1Y3Qgdm1jYiAqKW5lc3RlZF92bWNiKTsKIH0KIAogc3RhdGljIGludCB2bWxvYWRfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKKwlzdHJ1Y3Qgdm1jYiAqbmVzdGVkX3ZtY2I7CisKIAlpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdm0pKQogCQlyZXR1cm4gMTsKIAogCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOwogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CiAKLQluZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT52bWNiLT5zYXZlLnJheCwgMCwgTlVMTCwgbmVzdGVkX3N2bV92bWxvYWQpOworCW5lc3RlZF92bWNiID0gbmVzdGVkX3N2bV9tYXAoc3ZtLCBzdm0tPnZtY2ItPnNhdmUucmF4LCBLTV9VU0VSMCk7CisJaWYgKCFuZXN0ZWRfdm1jYikKKwkJcmV0dXJuIDE7CisKKwluZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUobmVzdGVkX3ZtY2IsIHN2bS0+dm1jYik7CisJbmVzdGVkX3N2bV91bm1hcChuZXN0ZWRfdm1jYiwgS01fVVNFUjApOwogCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CisJc3RydWN0IHZtY2IgKm5lc3RlZF92bWNiOworCiAJaWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3ZtKSkKIAkJcmV0dXJuIDE7CiAKIAlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKIAlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOwogCi0JbmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+dm1jYi0+c2F2ZS5yYXgsIDAsIE5VTEwsIG5lc3RlZF9zdm1fdm1zYXZlKTsKKwluZXN0ZWRfdm1jYiA9IG5lc3RlZF9zdm1fbWFwKHN2bSwgc3ZtLT52bWNiLT5zYXZlLnJheCwgS01fVVNFUjApOworCWlmICghbmVzdGVkX3ZtY2IpCisJCXJldHVybiAxOworCisJbmVzdGVkX3N2bV92bWxvYWRzYXZlKHN2bS0+dm1jYiwgbmVzdGVkX3ZtY2IpOworCW5lc3RlZF9zdm1fdW5tYXAobmVzdGVkX3ZtY2IsIEtNX1VTRVIwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTc5OCwxOSArMTg3OCwyOSBAQAogc3RhdGljIGludCB2bXJ1bl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCW5zdm1fcHJpbnRrKCJWTXJ1blxuIik7CisKIAlpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdm0pKQogCQlyZXR1cm4gMTsKIAogCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOwogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CiAKLQlpZiAobmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+dm1jYi0+c2F2ZS5yYXgsIDAsCi0JCQkgIE5VTEwsIG5lc3RlZF9zdm1fdm1ydW4pKQorCWlmICghbmVzdGVkX3N2bV92bXJ1bihzdm0pKQogCQlyZXR1cm4gMTsKIAotCWlmIChuZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT5uZXN0ZWRfdm1jYl9tc3JwbSwgMCwKLQkJICAgICAgTlVMTCwgbmVzdGVkX3N2bV92bXJ1bl9tc3JwbSkpCi0JCXJldHVybiAxOworCWlmICghbmVzdGVkX3N2bV92bXJ1bl9tc3JwbShzdm0pKQorCQlnb3RvIGZhaWxlZDsKKworCXJldHVybiAxOworCitmYWlsZWQ6CisKKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlICAgID0gU1ZNX0VYSVRfRVJSOworCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGVfaGkgPSAwOworCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMSAgPSAwOworCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMiAgPSAwOworCisJbmVzdGVkX3N2bV92bWV4aXQoc3ZtKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTgyMyw3ICsxOTEzLDcgQEAKIAlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKIAlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOwogCi0Jc3ZtLT52Y3B1LmFyY2guaGZsYWdzIHw9IEhGX0dJRl9NQVNLOworCWVuYWJsZV9naWYoc3ZtKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTgzNiw3ICsxOTI2LDcgQEAKIAlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKIAlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOwogCi0Jc3ZtLT52Y3B1LmFyY2guaGZsYWdzICY9IH5IRl9HSUZfTUFTSzsKKwlkaXNhYmxlX2dpZihzdm0pOwogCiAJLyogQWZ0ZXIgYSBDTEdJIG5vIGludGVycnVwdHMgc2hvdWxkIGNvbWUgKi8KIAlzdm1fY2xlYXJfdmludHIoc3ZtKTsKQEAgLTE4NDUsNiArMTkzNSwxOSBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGludmxwZ2FfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSAmc3ZtLT52Y3B1OworCW5zdm1fcHJpbnRrKCJJTlZMUEdBXG4iKTsKKworCS8qIExldCdzIHRyZWF0IElOVkxQR0EgdGhlIHNhbWUgYXMgSU5WTFBHIChjYW4gYmUgb3B0aW1pemVkISkgKi8KKwlrdm1fbW11X2ludmxwZyh2Y3B1LCB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0pOworCisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDM7CisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCBpbnZhbGlkX29wX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKQEAgLTE5NTMsNyArMjA1Niw3IEBACiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKIAlzd2l0Y2ggKGVjeCkgewotCWNhc2UgTVNSX0lBMzJfVElNRV9TVEFNUF9DT1VOVEVSOiB7CisJY2FzZSBNU1JfSUEzMl9UU0M6IHsKIAkJdTY0IHRzYzsKIAogCQlyZHRzY2xsKHRzYyk7CkBAIC0xOTgxLDEwICsyMDg0LDEwIEBACiAJCSpkYXRhID0gc3ZtLT52bWNiLT5zYXZlLnN5c2VudGVyX2NzOwogCQlicmVhazsKIAljYXNlIE1TUl9JQTMyX1NZU0VOVEVSX0VJUDoKLQkJKmRhdGEgPSBzdm0tPnZtY2ItPnNhdmUuc3lzZW50ZXJfZWlwOworCQkqZGF0YSA9IHN2bS0+c3lzZW50ZXJfZWlwOwogCQlicmVhazsKIAljYXNlIE1TUl9JQTMyX1NZU0VOVEVSX0VTUDoKLQkJKmRhdGEgPSBzdm0tPnZtY2ItPnNhdmUuc3lzZW50ZXJfZXNwOworCQkqZGF0YSA9IHN2bS0+c3lzZW50ZXJfZXNwOwogCQlicmVhazsKIAkvKiBOb2JvZHkgd2lsbCBjaGFuZ2UgdGhlIGZvbGxvd2luZyA1IHZhbHVlcyBpbiB0aGUgVk1DQiBzbwogCSAgIHdlIGNhbiBzYWZlbHkgcmV0dXJuIHRoZW0gb24gcmRtc3IuIFRoZXkgd2lsbCBhbHdheXMgYmUgMApAQCAtMjAwNSw3ICsyMTA4LDcgQEAKIAkJKmRhdGEgPSBzdm0tPnZtY2ItPnNhdmUubGFzdF9leGNwX3RvOwogCQlicmVhazsKIAljYXNlIE1TUl9WTV9IU0FWRV9QQToKLQkJKmRhdGEgPSBzdm0tPmhzYXZlX21zcjsKKwkJKmRhdGEgPSBzdm0tPm5lc3RlZC5oc2F2ZV9tc3I7CiAJCWJyZWFrOwogCWNhc2UgTVNSX1ZNX0NSOgogCQkqZGF0YSA9IDA7CkBAIC0yMDI3LDggKzIxMzAsNyBAQAogCWlmIChzdm1fZ2V0X21zcigmc3ZtLT52Y3B1LCBlY3gsICZkYXRhKSkKIAkJa3ZtX2luamVjdF9ncCgmc3ZtLT52Y3B1LCAwKTsKIAllbHNlIHsKLQkJS1ZNVFJBQ0VfM0QoTVNSX1JFQUQsICZzdm0tPnZjcHUsIGVjeCwgKHUzMilkYXRhLAotCQkJICAgICh1MzIpKGRhdGEgPj4gMzIpLCBoYW5kbGVyKTsKKwkJdHJhY2Vfa3ZtX21zcl9yZWFkKGVjeCwgZGF0YSk7CiAKIAkJc3ZtLT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSA9IGRhdGEgJiAweGZmZmZmZmZmOwogCQlzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdID0gZGF0YSA+PiAzMjsKQEAgLTIwNDMsNyArMjE0NSw3IEBACiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKIAlzd2l0Y2ggKGVjeCkgewotCWNhc2UgTVNSX0lBMzJfVElNRV9TVEFNUF9DT1VOVEVSOiB7CisJY2FzZSBNU1JfSUEzMl9UU0M6IHsKIAkJdTY0IHRzYzsKIAogCQlyZHRzY2xsKHRzYyk7CkBAIC0yMDcxLDkgKzIxNzMsMTEgQEAKIAkJc3ZtLT52bWNiLT5zYXZlLnN5c2VudGVyX2NzID0gZGF0YTsKIAkJYnJlYWs7CiAJY2FzZSBNU1JfSUEzMl9TWVNFTlRFUl9FSVA6CisJCXN2bS0+c3lzZW50ZXJfZWlwID0gZGF0YTsKIAkJc3ZtLT52bWNiLT5zYXZlLnN5c2VudGVyX2VpcCA9IGRhdGE7CiAJCWJyZWFrOwogCWNhc2UgTVNSX0lBMzJfU1lTRU5URVJfRVNQOgorCQlzdm0tPnN5c2VudGVyX2VzcCA9IGRhdGE7CiAJCXN2bS0+dm1jYi0+c2F2ZS5zeXNlbnRlcl9lc3AgPSBkYXRhOwogCQlicmVhazsKIAljYXNlIE1TUl9JQTMyX0RFQlVHQ1RMTVNSOgpAQCAtMjA5MSwyNCArMjE5NSwxMiBAQAogCQllbHNlCiAJCQlzdm1fZGlzYWJsZV9sYnJ2KHN2bSk7CiAJCWJyZWFrOwotCWNhc2UgTVNSX0s3X0VWTlRTRUwwOgotCWNhc2UgTVNSX0s3X0VWTlRTRUwxOgotCWNhc2UgTVNSX0s3X0VWTlRTRUwyOgotCWNhc2UgTVNSX0s3X0VWTlRTRUwzOgotCWNhc2UgTVNSX0s3X1BFUkZDVFIwOgotCWNhc2UgTVNSX0s3X1BFUkZDVFIxOgotCWNhc2UgTVNSX0s3X1BFUkZDVFIyOgotCWNhc2UgTVNSX0s3X1BFUkZDVFIzOgotCQkvKgotCQkgKiBKdXN0IGRpc2NhcmQgYWxsIHdyaXRlcyB0byB0aGUgcGVyZm9ybWFuY2UgY291bnRlcnM7IHRoaXMKLQkJICogc2hvdWxkIGtlZXAgYm90aCBvbGRlciBsaW51eCBhbmQgd2luZG93cyA2NC1iaXQgZ3Vlc3RzCi0JCSAqIGhhcHB5Ci0JCSAqLwotCQlwcl91bmltcGwodmNwdSwgInVuaW1wbGVtZW50ZWQgcGVyZmN0ciB3cm1zcjogMHgleCBkYXRhIDB4JWxseFxuIiwgZWN4LCBkYXRhKTsKLQotCQlicmVhazsKIAljYXNlIE1TUl9WTV9IU0FWRV9QQToKLQkJc3ZtLT5oc2F2ZV9tc3IgPSBkYXRhOworCQlzdm0tPm5lc3RlZC5oc2F2ZV9tc3IgPSBkYXRhOworCQlicmVhazsKKwljYXNlIE1TUl9WTV9DUjoKKwljYXNlIE1TUl9WTV9JR05ORToKKwkJcHJfdW5pbXBsKHZjcHUsICJ1bmltcGxlbWVudGVkIHdybXNyOiAweCV4IGRhdGEgMHglbGx4XG4iLCBlY3gsIGRhdGEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4ga3ZtX3NldF9tc3JfY29tbW9uKHZjcHUsIGVjeCwgZGF0YSk7CkBAIC0yMTIyLDggKzIyMTQsNyBAQAogCXU2NCBkYXRhID0gKHN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gJiAtMXUpCiAJCXwgKCh1NjQpKHN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF0gJiAtMXUpIDw8IDMyKTsKIAotCUtWTVRSQUNFXzNEKE1TUl9XUklURSwgJnN2bS0+dmNwdSwgZWN4LCAodTMyKWRhdGEsICh1MzIpKGRhdGEgPj4gMzIpLAotCQkgICAgaGFuZGxlcik7CisJdHJhY2Vfa3ZtX21zcl93cml0ZShlY3gsIGRhdGEpOwogCiAJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDI7CiAJaWYgKHN2bV9zZXRfbXNyKCZzdm0tPnZjcHUsIGVjeCwgZGF0YSkpCkBAIC0yMTQ0LDggKzIyMzUsNiBAQAogc3RhdGljIGludCBpbnRlcnJ1cHRfd2luZG93X2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKLQlLVk1UUkFDRV8wRChQRU5EX0lOVFIsICZzdm0tPnZjcHUsIGhhbmRsZXIpOwotCiAJc3ZtX2NsZWFyX3ZpbnRyKHN2bSk7CiAJc3ZtLT52bWNiLT5jb250cm9sLmludF9jdGwgJj0gflZfSVJRX01BU0s7CiAJLyoKQEAgLTIyMDEsNyArMjI5MCw3IEBACiAJW1NWTV9FWElUX0lOVkRdICAgICAgICAgICAgICAgICAgICAgICAgID0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0hMVF0JCQkJPSBoYWx0X2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfSU5WTFBHXQkJCT0gaW52bHBnX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfSU5WTFBHQV0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9JTlZMUEdBXQkJCT0gaW52bHBnYV9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0lPSU9dIAkJICAJPSBpb19pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX01TUl0JCQkJPSBtc3JfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9UQVNLX1NXSVRDSF0JCQk9IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbiwKQEAgLTIyMjQsMjAgKzIzMTMsMjYgQEAKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAl1MzIgZXhpdF9jb2RlID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZTsKIAotCUtWTVRSQUNFXzNEKFZNRVhJVCwgdmNwdSwgZXhpdF9jb2RlLCAodTMyKXN2bS0+dm1jYi0+c2F2ZS5yaXAsCi0JCSAgICAodTMyKSgodTY0KXN2bS0+dm1jYi0+c2F2ZS5yaXAgPj4gMzIpLCBlbnRyeWV4aXQpOworCXRyYWNlX2t2bV9leGl0KGV4aXRfY29kZSwgc3ZtLT52bWNiLT5zYXZlLnJpcCk7CiAKIAlpZiAoaXNfbmVzdGVkKHN2bSkpIHsKKwkJaW50IHZtZXhpdDsKKwogCQluc3ZtX3ByaW50aygibmVzdGVkIGhhbmRsZV9leGl0OiAweCV4IHwgMHglbHggfCAweCVseCB8IDB4JWx4XG4iLAogCQkJICAgIGV4aXRfY29kZSwgc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xLAogCQkJICAgIHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMiwgc3ZtLT52bWNiLT5zYXZlLnJpcCk7Ci0JCWlmIChuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZChzdm0sIHRydWUpKSB7Ci0JCQluZXN0ZWRfc3ZtX3ZtZXhpdChzdm0pOwotCQkJbnN2bV9wcmludGsoIi0+ICNWTUVYSVRcbiIpOworCisJCXZtZXhpdCA9IG5lc3RlZF9zdm1fZXhpdF9zcGVjaWFsKHN2bSk7CisKKwkJaWYgKHZtZXhpdCA9PSBORVNURURfRVhJVF9DT05USU5VRSkKKwkJCXZtZXhpdCA9IG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkKHN2bSk7CisKKwkJaWYgKHZtZXhpdCA9PSBORVNURURfRVhJVF9ET05FKQogCQkJcmV0dXJuIDE7Ci0JCX0KIAl9CiAKKwlzdm1fY29tcGxldGVfaW50ZXJydXB0cyhzdm0pOworCiAJaWYgKG5wdF9lbmFibGVkKSB7CiAJCWludCBtbXVfcmVsb2FkID0gMDsKIAkJaWYgKCh2Y3B1LT5hcmNoLmNyMCBeIHN2bS0+dm1jYi0+c2F2ZS5jcjApICYgWDg2X0NSMF9QRykgewpAQCAtMjI0NiwxMiArMjM0MSw2IEBACiAJCX0KIAkJdmNwdS0+YXJjaC5jcjAgPSBzdm0tPnZtY2ItPnNhdmUuY3IwOwogCQl2Y3B1LT5hcmNoLmNyMyA9IHN2bS0+dm1jYi0+c2F2ZS5jcjM7Ci0JCWlmIChpc19wYWdpbmcodmNwdSkgJiYgaXNfcGFlKHZjcHUpICYmICFpc19sb25nX21vZGUodmNwdSkpIHsKLQkJCWlmICghbG9hZF9wZHB0cnModmNwdSwgdmNwdS0+YXJjaC5jcjMpKSB7Ci0JCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJfQogCQlpZiAobW11X3JlbG9hZCkgewogCQkJa3ZtX21tdV9yZXNldF9jb250ZXh0KHZjcHUpOwogCQkJa3ZtX21tdV9sb2FkKHZjcHUpOwpAQCAtMjMxOSw3ICsyNDA4LDcgQEAKIHsKIAlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2w7CiAKLQlLVk1UUkFDRV8xRChJTkpfVklSUSwgJnN2bS0+dmNwdSwgKHUzMilpcnEsIGhhbmRsZXIpOworCXRyYWNlX2t2bV9pbmpfdmlycShpcnEpOwogCiAJKytzdm0tPnZjcHUuc3RhdC5pcnFfaW5qZWN0aW9uczsKIAljb250cm9sID0gJnN2bS0+dm1jYi0+Y29udHJvbDsKQEAgLTIzMjksMjEgKzI0MTgsMTQgQEAKIAkJKCgvKmNvbnRyb2wtPmludF92ZWN0b3IgPj4gNCovIDB4ZikgPDwgVl9JTlRSX1BSSU9fU0hJRlQpOwogfQogCi1zdGF0aWMgdm9pZCBzdm1fcXVldWVfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbnIpCi17Ci0Jc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7Ci0KLQlzdm0tPnZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qID0gbnIgfAotCQlTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX0lOVFI7Ci19Ci0KIHN0YXRpYyB2b2lkIHN2bV9zZXRfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAotCW5lc3RlZF9zdm1faW50cihzdm0pOworCUJVR19PTighKGdpZl9zZXQoc3ZtKSkpOwogCi0Jc3ZtX3F1ZXVlX2lycSh2Y3B1LCB2Y3B1LT5hcmNoLmludGVycnVwdC5ucik7CisJc3ZtLT52bWNiLT5jb250cm9sLmV2ZW50X2luaiA9IHZjcHUtPmFyY2guaW50ZXJydXB0Lm5yIHwKKwkJU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9JTlRSOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfY3I4X2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0cHIsIGludCBpcnIpCkBAIC0yMzcxLDEzICsyNDUzLDI1IEBACiAJc3RydWN0IHZtY2IgKnZtY2IgPSBzdm0tPnZtY2I7CiAJcmV0dXJuICh2bWNiLT5zYXZlLnJmbGFncyAmIFg4Nl9FRkxBR1NfSUYpICYmCiAJCSEodm1jYi0+Y29udHJvbC5pbnRfc3RhdGUgJiBTVk1fSU5URVJSVVBUX1NIQURPV19NQVNLKSAmJgotCQkoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfR0lGX01BU0spOworCQlnaWZfc2V0KHN2bSkgJiYKKwkJIShpc19uZXN0ZWQoc3ZtKSAmJiAoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfVklOVFJfTUFTSykpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfaXJxX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3ZtX3NldF92aW50cih0b19zdm0odmNwdSkpOwotCXN2bV9pbmplY3RfaXJxKHRvX3N2bSh2Y3B1KSwgMHgwKTsKKwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKKwluc3ZtX3ByaW50aygiVHJ5aW5nIHRvIG9wZW4gSVJRIHdpbmRvd1xuIik7CisKKwluZXN0ZWRfc3ZtX2ludHIoc3ZtKTsKKworCS8qIEluIGNhc2UgR0lGPTAgd2UgY2FuJ3QgcmVseSBvbiB0aGUgQ1BVIHRvIHRlbGwgdXMgd2hlbgorCSAqIEdJRiBiZWNvbWVzIDEsIGJlY2F1c2UgdGhhdCdzIGEgc2VwYXJhdGUgU1RHSS9WTVJVTiBpbnRlcmNlcHQuCisJICogVGhlIG5leHQgdGltZSB3ZSBnZXQgdGhhdCBpbnRlcmNlcHQsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZQorCSAqIGNhbGxlZCBhZ2FpbiB0aG91Z2ggYW5kIHdlJ2xsIGdldCB0aGUgdmludHIgaW50ZXJjZXB0LiAqLworCWlmIChnaWZfc2V0KHN2bSkpIHsKKwkJc3ZtX3NldF92aW50cihzdm0pOworCQlzdm1faW5qZWN0X2lycShzdm0sIDB4MCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfbm1pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yNDU2LDYgKzI1NTAsOCBAQAogCWNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQ6CiAJCS8qIEluIGNhc2Ugb2Ygc29mdHdhcmUgZXhjZXB0aW9uIGRvIG5vdCByZWluamVjdCBhbiBleGNlcHRpb24KIAkJICAgdmVjdG9yLCBidXQgcmUtZXhlY3V0ZSBhbmQgaW5zdHJ1Y3Rpb24gaW5zdGVhZCAqLworCQlpZiAoaXNfbmVzdGVkKHN2bSkpCisJCQlicmVhazsKIAkJaWYgKGt2bV9leGNlcHRpb25faXNfc29mdCh2ZWN0b3IpKQogCQkJYnJlYWs7CiAJCWlmIChleGl0aW50aW5mbyAmIFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIpIHsKQEAgLTI0OTgsOSArMjU5NCw3IEBACiAJZnNfc2VsZWN0b3IgPSBrdm1fcmVhZF9mcygpOwogCWdzX3NlbGVjdG9yID0ga3ZtX3JlYWRfZ3MoKTsKIAlsZHRfc2VsZWN0b3IgPSBrdm1fcmVhZF9sZHQoKTsKLQlzdm0tPmhvc3RfY3IyID0ga3ZtX3JlYWRfY3IyKCk7Ci0JaWYgKCFpc19uZXN0ZWQoc3ZtKSkKLQkJc3ZtLT52bWNiLT5zYXZlLmNyMiA9IHZjcHUtPmFyY2guY3IyOworCXN2bS0+dm1jYi0+c2F2ZS5jcjIgPSB2Y3B1LT5hcmNoLmNyMjsKIAkvKiByZXF1aXJlZCBmb3IgbGl2ZSBtaWdyYXRpb24gd2l0aCBOUFQgKi8KIAlpZiAobnB0X2VuYWJsZWQpCiAJCXN2bS0+dm1jYi0+c2F2ZS5jcjMgPSB2Y3B1LT5hcmNoLmNyMzsKQEAgLTI1ODUsOCArMjY3OSw2IEBACiAJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdID0gc3ZtLT52bWNiLT5zYXZlLnJzcDsKIAl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JJUF0gPSBzdm0tPnZtY2ItPnNhdmUucmlwOwogCi0Ja3ZtX3dyaXRlX2NyMihzdm0tPmhvc3RfY3IyKTsKLQogCWt2bV9sb2FkX2ZzKGZzX3NlbGVjdG9yKTsKIAlrdm1fbG9hZF9ncyhnc19zZWxlY3Rvcik7CiAJa3ZtX2xvYWRfbGR0KGxkdF9zZWxlY3Rvcik7CkBAIC0yNjAyLDcgKzI2OTQsMTAgQEAKIAogCXN2bS0+bmV4dF9yaXAgPSAwOwogCi0Jc3ZtX2NvbXBsZXRlX2ludGVycnVwdHMoc3ZtKTsKKwlpZiAobnB0X2VuYWJsZWQpIHsKKwkJdmNwdS0+YXJjaC5yZWdzX2F2YWlsICY9IH4oMSA8PCBWQ1BVX0VYUkVHX1BEUFRSKTsKKwkJdmNwdS0+YXJjaC5yZWdzX2RpcnR5ICY9IH4oMSA8PCBWQ1BVX0VYUkVHX1BEUFRSKTsKKwl9CiB9CiAKICN1bmRlZiBSCkBAIC0yNjczLDYgKzI3NjgsNjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB0cmFjZV9wcmludF9mbGFncyBzdm1fZXhpdF9yZWFzb25zX3N0cltdID0geworCXsgU1ZNX0VYSVRfUkVBRF9DUjAsICAgICAgICAgICAJCSJyZWFkX2NyMCIgfSwKKwl7IFNWTV9FWElUX1JFQURfQ1IzLAkgICAgICAJCSJyZWFkX2NyMyIgfSwKKwl7IFNWTV9FWElUX1JFQURfQ1I0LAkgICAgICAJCSJyZWFkX2NyNCIgfSwKKwl7IFNWTV9FWElUX1JFQURfQ1I4LCAgCSAgICAgIAkJInJlYWRfY3I4IiB9LAorCXsgU1ZNX0VYSVRfV1JJVEVfQ1IwLCAgICAgICAgICAJCSJ3cml0ZV9jcjAiIH0sCisJeyBTVk1fRVhJVF9XUklURV9DUjMsCSAgICAgIAkJIndyaXRlX2NyMyIgfSwKKwl7IFNWTV9FWElUX1dSSVRFX0NSNCwgICAgICAgICAgCQkid3JpdGVfY3I0IiB9LAorCXsgU1ZNX0VYSVRfV1JJVEVfQ1I4LCAJICAgICAgCQkid3JpdGVfY3I4IiB9LAorCXsgU1ZNX0VYSVRfUkVBRF9EUjAsIAkgICAgICAJCSJyZWFkX2RyMCIgfSwKKwl7IFNWTV9FWElUX1JFQURfRFIxLAkgICAgICAJCSJyZWFkX2RyMSIgfSwKKwl7IFNWTV9FWElUX1JFQURfRFIyLAkgICAgICAJCSJyZWFkX2RyMiIgfSwKKwl7IFNWTV9FWElUX1JFQURfRFIzLAkgICAgICAJCSJyZWFkX2RyMyIgfSwKKwl7IFNWTV9FWElUX1dSSVRFX0RSMCwJICAgICAgCQkid3JpdGVfZHIwIiB9LAorCXsgU1ZNX0VYSVRfV1JJVEVfRFIxLAkgICAgICAJCSJ3cml0ZV9kcjEiIH0sCisJeyBTVk1fRVhJVF9XUklURV9EUjIsCSAgICAgIAkJIndyaXRlX2RyMiIgfSwKKwl7IFNWTV9FWElUX1dSSVRFX0RSMywJICAgICAgCQkid3JpdGVfZHIzIiB9LAorCXsgU1ZNX0VYSVRfV1JJVEVfRFI1LAkgICAgICAJCSJ3cml0ZV9kcjUiIH0sCisJeyBTVk1fRVhJVF9XUklURV9EUjcsCSAgICAgIAkJIndyaXRlX2RyNyIgfSwKKwl7IFNWTV9FWElUX0VYQ1BfQkFTRSArIERCX1ZFQ1RPUiwJIkRCIGV4Y3AiIH0sCisJeyBTVk1fRVhJVF9FWENQX0JBU0UgKyBCUF9WRUNUT1IsCSJCUCBleGNwIiB9LAorCXsgU1ZNX0VYSVRfRVhDUF9CQVNFICsgVURfVkVDVE9SLAkiVUQgZXhjcCIgfSwKKwl7IFNWTV9FWElUX0VYQ1BfQkFTRSArIFBGX1ZFQ1RPUiwJIlBGIGV4Y3AiIH0sCisJeyBTVk1fRVhJVF9FWENQX0JBU0UgKyBOTV9WRUNUT1IsCSJOTSBleGNwIiB9LAorCXsgU1ZNX0VYSVRfRVhDUF9CQVNFICsgTUNfVkVDVE9SLAkiTUMgZXhjcCIgfSwKKwl7IFNWTV9FWElUX0lOVFIsCQkJImludGVycnVwdCIgfSwKKwl7IFNWTV9FWElUX05NSSwJCQkJIm5taSIgfSwKKwl7IFNWTV9FWElUX1NNSSwJCQkJInNtaSIgfSwKKwl7IFNWTV9FWElUX0lOSVQsCQkJImluaXQiIH0sCisJeyBTVk1fRVhJVF9WSU5UUiwJCQkidmludHIiIH0sCisJeyBTVk1fRVhJVF9DUFVJRCwJCQkiY3B1aWQiIH0sCisJeyBTVk1fRVhJVF9JTlZELAkJCSJpbnZkIiB9LAorCXsgU1ZNX0VYSVRfSExULAkJCQkiaGx0IiB9LAorCXsgU1ZNX0VYSVRfSU5WTFBHLAkJCSJpbnZscGciIH0sCisJeyBTVk1fRVhJVF9JTlZMUEdBLAkJCSJpbnZscGdhIiB9LAorCXsgU1ZNX0VYSVRfSU9JTywJCQkiaW8iIH0sCisJeyBTVk1fRVhJVF9NU1IsCQkJCSJtc3IiIH0sCisJeyBTVk1fRVhJVF9UQVNLX1NXSVRDSCwJCQkidGFza19zd2l0Y2giIH0sCisJeyBTVk1fRVhJVF9TSFVURE9XTiwJCQkic2h1dGRvd24iIH0sCisJeyBTVk1fRVhJVF9WTVJVTiwJCQkidm1ydW4iIH0sCisJeyBTVk1fRVhJVF9WTU1DQUxMLAkJCSJoeXBlcmNhbGwiIH0sCisJeyBTVk1fRVhJVF9WTUxPQUQsCQkJInZtbG9hZCIgfSwKKwl7IFNWTV9FWElUX1ZNU0FWRSwJCQkidm1zYXZlIiB9LAorCXsgU1ZNX0VYSVRfU1RHSSwJCQkic3RnaSIgfSwKKwl7IFNWTV9FWElUX0NMR0ksCQkJImNsZ2kiIH0sCisJeyBTVk1fRVhJVF9TS0lOSVQsCQkJInNraW5pdCIgfSwKKwl7IFNWTV9FWElUX1dCSU5WRCwJCQkid2JpbnZkIiB9LAorCXsgU1ZNX0VYSVRfTU9OSVRPUiwJCQkibW9uaXRvciIgfSwKKwl7IFNWTV9FWElUX01XQUlULAkJCSJtd2FpdCIgfSwKKwl7IFNWTV9FWElUX05QRiwJCQkJIm5wZiIgfSwKKwl7IC0xLCBOVUxMIH0KK307CisKK3N0YXRpYyBib29sIHN2bV9nYl9wYWdlX2VuYWJsZSh2b2lkKQoreworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzID0gewogCS5jcHVfaGFzX2t2bV9zdXBwb3J0ID0gaGFzX3N2bSwKIAkuZGlzYWJsZWRfYnlfYmlvcyA9IGlzX2Rpc2FibGVkLApAQCAtMjcxMCw2ICsyODYzLDcgQEAKIAkuc2V0X2dkdCA9IHN2bV9zZXRfZ2R0LAogCS5nZXRfZHIgPSBzdm1fZ2V0X2RyLAogCS5zZXRfZHIgPSBzdm1fc2V0X2RyLAorCS5jYWNoZV9yZWcgPSBzdm1fY2FjaGVfcmVnLAogCS5nZXRfcmZsYWdzID0gc3ZtX2dldF9yZmxhZ3MsCiAJLnNldF9yZmxhZ3MgPSBzdm1fc2V0X3JmbGFncywKIApAQCAtMjczMyw2ICsyODg3LDkgQEAKIAkuc2V0X3Rzc19hZGRyID0gc3ZtX3NldF90c3NfYWRkciwKIAkuZ2V0X3RkcF9sZXZlbCA9IGdldF9ucHRfbGV2ZWwsCiAJLmdldF9tdF9tYXNrID0gc3ZtX2dldF9tdF9tYXNrLAorCisJLmV4aXRfcmVhc29uc19zdHIgPSBzdm1fZXhpdF9yZWFzb25zX3N0ciwKKwkuZ2JfcGFnZV9lbmFibGUgPSBzdm1fZ2JfcGFnZV9lbmFibGUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzdm1faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3RpbWVyLmMgYi9hcmNoL3g4Ni9rdm0vdGltZXIuYwppbmRleCA4NmRiYWMwLi5lZWE0MDQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdGltZXIuYworKysgYi9hcmNoL3g4Ni9rdm0vdGltZXIuYwpAQCAtOSwxMiArOSwxNiBAQAogCWludCByZXN0YXJ0X3RpbWVyID0gMDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAqcSA9ICZ2Y3B1LT53cTsKIAotCS8qIEZJWE1FOiB0aGlzIGNvZGUgc2hvdWxkIG5vdCBrbm93IGFueXRoaW5nIGFib3V0IHZjcHVzICovCi0JaWYgKCFhdG9taWNfaW5jX2FuZF90ZXN0KCZrdGltZXItPnBlbmRpbmcpKQorCS8qCisJICogVGhlcmUgaXMgYSByYWNlIHdpbmRvdyBiZXR3ZWVuIHJlYWRpbmcgYW5kIGluY3JlbWVudGluZywgYnV0IHdlIGRvCisJICogbm90IGNhcmUgYWJvdXQgcG90ZW50aWFsbHkgbG9vc2luZyB0aW1lciBldmVudHMgaW4gdGhlICFyZWluamVjdAorCSAqIGNhc2UgYW55d2F5LgorCSAqLworCWlmIChrdGltZXItPnJlaW5qZWN0IHx8ICFhdG9taWNfcmVhZCgma3RpbWVyLT5wZW5kaW5nKSkgeworCQlhdG9taWNfaW5jKCZrdGltZXItPnBlbmRpbmcpOworCQkvKiBGSVhNRTogdGhpcyBjb2RlIHNob3VsZCBub3Qga25vdyBhbnl0aGluZyBhYm91dCB2Y3B1cyAqLwogCQlzZXRfYml0KEtWTV9SRVFfUEVORElOR19USU1FUiwgJnZjcHUtPnJlcXVlc3RzKTsKLQotCWlmICgha3RpbWVyLT5yZWluamVjdCkKLQkJYXRvbWljX3NldCgma3RpbWVyLT5wZW5kaW5nLCAxKTsKKwl9CiAKIAlpZiAod2FpdHF1ZXVlX2FjdGl2ZShxKSkKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHEpOwpAQCAtMzMsNyArMzcsNyBAQAogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlzdHJ1Y3Qga3ZtX3RpbWVyICprdGltZXIgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGt2bV90aW1lciwgdGltZXIpOwogCi0JdmNwdSA9IGt0aW1lci0+a3ZtLT52Y3B1c1trdGltZXItPnZjcHVfaWRdOworCXZjcHUgPSBrdGltZXItPnZjcHU7CiAJaWYgKCF2Y3B1KQogCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS90cmFjZS5oIGIvYXJjaC94ODYva3ZtL3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0ODBlNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2t2bS90cmFjZS5oCkBAIC0wLDAgKzEsMzU1IEBACisjaWYgIWRlZmluZWQoX1RSQUNFX0tWTV9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVFJBQ0VfS1ZNX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0ga3ZtCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfUEFUSCBhcmNoL3g4Ni9rdm0KKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIHRyYWNlCisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBndWVzdCBtb2RlIGVudHJ5LgorICovCitUUkFDRV9FVkVOVChrdm1fZW50cnksCisJVFBfUFJPVE8odW5zaWduZWQgaW50IHZjcHVfaWQpLAorCVRQX0FSR1ModmNwdV9pZCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCXZjcHVfaWQJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnZjcHVfaWQJPSB2Y3B1X2lkOworCSksCisKKwlUUF9wcmludGsoInZjcHUgJXUiLCBfX2VudHJ5LT52Y3B1X2lkKQorKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIGh5cGVyY2FsbC4KKyAqLworVFJBQ0VfRVZFTlQoa3ZtX2h5cGVyY2FsbCwKKwlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIGEwLCB1bnNpZ25lZCBsb25nIGExLAorCQkgdW5zaWduZWQgbG9uZyBhMiwgdW5zaWduZWQgbG9uZyBhMyksCisJVFBfQVJHUyhuciwgYTAsIGExLCBhMiwgYTMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywgCW5yCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWEwCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWExCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWEyCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWEzCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5ucgkJPSBucjsKKwkJX19lbnRyeS0+YTAJCT0gYTA7CisJCV9fZW50cnktPmExCQk9IGExOworCQlfX2VudHJ5LT5hMgkJPSBhMjsKKwkJX19lbnRyeS0+YTMJCT0gYTM7CisJKSwKKworCVRQX3ByaW50aygibnIgMHglbHggYTAgMHglbHggYTEgMHglbHggYTIgMHglbHggYTMgMHglbHgiLAorCQkgX19lbnRyeS0+bnIsIF9fZW50cnktPmEwLCBfX2VudHJ5LT5hMSwgIF9fZW50cnktPmEyLAorCQkgX19lbnRyeS0+YTMpCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3IgUElPLgorICovCitUUkFDRV9FVkVOVChrdm1fcGlvLAorCVRQX1BST1RPKHVuc2lnbmVkIGludCBydywgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBzaXplLAorCQkgdW5zaWduZWQgaW50IGNvdW50KSwKKwlUUF9BUkdTKHJ3LCBwb3J0LCBzaXplLCBjb3VudCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsIAlydwkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsIAlwb3J0CQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwgCXNpemUJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAljb3VudAkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+cncJCT0gcnc7CisJCV9fZW50cnktPnBvcnQJCT0gcG9ydDsKKwkJX19lbnRyeS0+c2l6ZQkJPSBzaXplOworCQlfX2VudHJ5LT5jb3VudAkJPSBjb3VudDsKKwkpLAorCisJVFBfcHJpbnRrKCJwaW9fJXMgYXQgMHgleCBzaXplICVkIGNvdW50ICVkIiwKKwkJICBfX2VudHJ5LT5ydyA/ICJ3cml0ZSIgOiAicmVhZCIsCisJCSAgX19lbnRyeS0+cG9ydCwgX19lbnRyeS0+c2l6ZSwgX19lbnRyeS0+Y291bnQpCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3IgY3B1aWQuCisgKi8KK1RSQUNFX0VWRU5UKGt2bV9jcHVpZCwKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIHVuc2lnbmVkIGxvbmcgcmF4LCB1bnNpZ25lZCBsb25nIHJieCwKKwkJIHVuc2lnbmVkIGxvbmcgcmN4LCB1bnNpZ25lZCBsb25nIHJkeCksCisJVFBfQVJHUyhmdW5jdGlvbiwgcmF4LCByYngsIHJjeCwgcmR4KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJZnVuY3Rpb24JKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlyYXgJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJcmJ4CQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXJjeAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlyZHgJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmZ1bmN0aW9uCT0gZnVuY3Rpb247CisJCV9fZW50cnktPnJheAkJPSByYXg7CisJCV9fZW50cnktPnJieAkJPSByYng7CisJCV9fZW50cnktPnJjeAkJPSByY3g7CisJCV9fZW50cnktPnJkeAkJPSByZHg7CisJKSwKKworCVRQX3ByaW50aygiZnVuYyAleCByYXggJWx4IHJieCAlbHggcmN4ICVseCByZHggJWx4IiwKKwkJICBfX2VudHJ5LT5mdW5jdGlvbiwgX19lbnRyeS0+cmF4LAorCQkgIF9fZW50cnktPnJieCwgX19lbnRyeS0+cmN4LCBfX2VudHJ5LT5yZHgpCispOworCisjZGVmaW5lIEFSRUcoeCkgeyBBUElDXyMjeCwgIkFQSUNfIiAjeCB9CisKKyNkZWZpbmUga3ZtX3RyYWNlX3N5bWJvbF9hcGljCQkJCQkJICAgIFwKKwlBUkVHKElEKSwgQVJFRyhMVlIpLCBBUkVHKFRBU0tQUkkpLCBBUkVHKEFSQlBSSSksIEFSRUcoUFJPQ1BSSSksICAgIFwKKwlBUkVHKEVPSSksIEFSRUcoUlJSKSwgQVJFRyhMRFIpLCBBUkVHKERGUiksIEFSRUcoU1BJViksIEFSRUcoSVNSKSwgIFwKKwlBUkVHKFRNUiksIEFSRUcoSVJSKSwgQVJFRyhFU1IpLCBBUkVHKElDUiksIEFSRUcoSUNSMiksIEFSRUcoTFZUVCksIFwKKwlBUkVHKExWVFRITVIpLCBBUkVHKExWVFBDKSwgQVJFRyhMVlQwKSwgQVJFRyhMVlQxKSwgQVJFRyhMVlRFUlIpLCAgIFwKKwlBUkVHKFRNSUNUKSwgQVJFRyhUTUNDVCksIEFSRUcoVERDUiksIEFSRUcoU0VMRl9JUEkpLCBBUkVHKEVGRUFUKSwgIFwKKwlBUkVHKEVDVFJMKQorLyoKKyAqIFRyYWNlcG9pbnQgZm9yIGFwaWMgYWNjZXNzLgorICovCitUUkFDRV9FVkVOVChrdm1fYXBpYywKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgcncsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpLAorCVRQX0FSR1MocncsIHJlZywgdmFsKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJcncJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAlyZWcJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAl2YWwJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnJ3CQk9IHJ3OworCQlfX2VudHJ5LT5yZWcJCT0gcmVnOworCQlfX2VudHJ5LT52YWwJCT0gdmFsOworCSksCisKKwlUUF9wcmludGsoImFwaWNfJXMgJXMgPSAweCV4IiwKKwkJICBfX2VudHJ5LT5ydyA/ICJ3cml0ZSIgOiAicmVhZCIsCisJCSAgX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LT5yZWcsIGt2bV90cmFjZV9zeW1ib2xfYXBpYyksCisJCSAgX19lbnRyeS0+dmFsKQorKTsKKworI2RlZmluZSB0cmFjZV9rdm1fYXBpY19yZWFkKHJlZywgdmFsKQkJdHJhY2Vfa3ZtX2FwaWMoMCwgcmVnLCB2YWwpCisjZGVmaW5lIHRyYWNlX2t2bV9hcGljX3dyaXRlKHJlZywgdmFsKQkJdHJhY2Vfa3ZtX2FwaWMoMSwgcmVnLCB2YWwpCisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBrdm0gZ3Vlc3QgZXhpdDoKKyAqLworVFJBQ0VfRVZFTlQoa3ZtX2V4aXQsCisJVFBfUFJPVE8odW5zaWduZWQgaW50IGV4aXRfcmVhc29uLCB1bnNpZ25lZCBsb25nIGd1ZXN0X3JpcCksCisJVFBfQVJHUyhleGl0X3JlYXNvbiwgZ3Vlc3RfcmlwKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJZXhpdF9yZWFzb24JKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlndWVzdF9yaXAJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZXhpdF9yZWFzb24JPSBleGl0X3JlYXNvbjsKKwkJX19lbnRyeS0+Z3Vlc3RfcmlwCT0gZ3Vlc3RfcmlwOworCSksCisKKwlUUF9wcmludGsoInJlYXNvbiAlcyByaXAgMHglbHgiLAorCQkgZnRyYWNlX3ByaW50X3N5bWJvbHNfc2VxKHAsIF9fZW50cnktPmV4aXRfcmVhc29uLAorCQkJCQkgIGt2bV94ODZfb3BzLT5leGl0X3JlYXNvbnNfc3RyKSwKKwkJIF9fZW50cnktPmd1ZXN0X3JpcCkKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBrdm0gaW50ZXJydXB0IGluamVjdGlvbjoKKyAqLworVFJBQ0VfRVZFTlQoa3ZtX2lual92aXJxLAorCVRQX1BST1RPKHVuc2lnbmVkIGludCBpcnEpLAorCVRQX0FSR1MoaXJxKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJaXJxCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5pcnEJCT0gaXJxOworCSksCisKKwlUUF9wcmludGsoImlycSAldSIsIF9fZW50cnktPmlycSkKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBwYWdlIGZhdWx0LgorICovCitUUkFDRV9FVkVOVChrdm1fcGFnZV9mYXVsdCwKKwlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHJlc3MsIHVuc2lnbmVkIGludCBlcnJvcl9jb2RlKSwKKwlUUF9BUkdTKGZhdWx0X2FkZHJlc3MsIGVycm9yX2NvZGUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJZmF1bHRfYWRkcmVzcwkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJZXJyb3JfY29kZQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5mYXVsdF9hZGRyZXNzCT0gZmF1bHRfYWRkcmVzczsKKwkJX19lbnRyeS0+ZXJyb3JfY29kZQk9IGVycm9yX2NvZGU7CisJKSwKKworCVRQX3ByaW50aygiYWRkcmVzcyAlbHggZXJyb3JfY29kZSAleCIsCisJCSAgX19lbnRyeS0+ZmF1bHRfYWRkcmVzcywgX19lbnRyeS0+ZXJyb3JfY29kZSkKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBndWVzdCBNU1IgYWNjZXNzLgorICovCitUUkFDRV9FVkVOVChrdm1fbXNyLAorCVRQX1BST1RPKHVuc2lnbmVkIGludCBydywgdW5zaWduZWQgaW50IGVjeCwgdW5zaWduZWQgbG9uZyBkYXRhKSwKKwlUUF9BUkdTKHJ3LCBlY3gsIGRhdGEpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAlydwkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCWVjeAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlkYXRhCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5ydwkJPSBydzsKKwkJX19lbnRyeS0+ZWN4CQk9IGVjeDsKKwkJX19lbnRyeS0+ZGF0YQkJPSBkYXRhOworCSksCisKKwlUUF9wcmludGsoIm1zcl8lcyAleCA9IDB4JWx4IiwKKwkJICBfX2VudHJ5LT5ydyA/ICJ3cml0ZSIgOiAicmVhZCIsCisJCSAgX19lbnRyeS0+ZWN4LCBfX2VudHJ5LT5kYXRhKQorKTsKKworI2RlZmluZSB0cmFjZV9rdm1fbXNyX3JlYWQoZWN4LCBkYXRhKQkJdHJhY2Vfa3ZtX21zcigwLCBlY3gsIGRhdGEpCisjZGVmaW5lIHRyYWNlX2t2bV9tc3Jfd3JpdGUoZWN4LCBkYXRhKQkJdHJhY2Vfa3ZtX21zcigxLCBlY3gsIGRhdGEpCisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBndWVzdCBDUiBhY2Nlc3MuCisgKi8KK1RSQUNFX0VWRU5UKGt2bV9jciwKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgcncsIHVuc2lnbmVkIGludCBjciwgdW5zaWduZWQgbG9uZyB2YWwpLAorCVRQX0FSR1MocncsIGNyLCB2YWwpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAlydwkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCWNyCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXZhbAkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+cncJCT0gcnc7CisJCV9fZW50cnktPmNyCQk9IGNyOworCQlfX2VudHJ5LT52YWwJCT0gdmFsOworCSksCisKKwlUUF9wcmludGsoImNyXyVzICV4ID0gMHglbHgiLAorCQkgIF9fZW50cnktPnJ3ID8gIndyaXRlIiA6ICJyZWFkIiwKKwkJICBfX2VudHJ5LT5jciwgX19lbnRyeS0+dmFsKQorKTsKKworI2RlZmluZSB0cmFjZV9rdm1fY3JfcmVhZChjciwgdmFsKQkJdHJhY2Vfa3ZtX2NyKDAsIGNyLCB2YWwpCisjZGVmaW5lIHRyYWNlX2t2bV9jcl93cml0ZShjciwgdmFsKQkJdHJhY2Vfa3ZtX2NyKDEsIGNyLCB2YWwpCisKK1RSQUNFX0VWRU5UKGt2bV9waWNfc2V0X2lycSwKKwkgICAgVFBfUFJPVE8oX191OCBjaGlwLCBfX3U4IHBpbiwgX191OCBlbGNyLCBfX3U4IGltciwgYm9vbCBjb2FsZXNjZWQpLAorCSAgICBUUF9BUkdTKGNoaXAsIHBpbiwgZWxjciwgaW1yLCBjb2FsZXNjZWQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJX191OCwJCWNoaXAJCSkKKwkJX19maWVsZCgJX191OCwJCXBpbgkJKQorCQlfX2ZpZWxkKAlfX3U4LAkJZWxjcgkJKQorCQlfX2ZpZWxkKAlfX3U4LAkJaW1yCQkpCisJCV9fZmllbGQoCWJvb2wsCQljb2FsZXNjZWQJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Y2hpcAkJPSBjaGlwOworCQlfX2VudHJ5LT5waW4JCT0gcGluOworCQlfX2VudHJ5LT5lbGNyCQk9IGVsY3I7CisJCV9fZW50cnktPmltcgkJPSBpbXI7CisJCV9fZW50cnktPmNvYWxlc2NlZAk9IGNvYWxlc2NlZDsKKwkpLAorCisJVFBfcHJpbnRrKCJjaGlwICV1IHBpbiAldSAoJXMlcyklcyIsCisJCSAgX19lbnRyeS0+Y2hpcCwgX19lbnRyeS0+cGluLAorCQkgIChfX2VudHJ5LT5lbGNyICYgKDEgPDwgX19lbnRyeS0+cGluKSkgPyAibGV2ZWwiOiJlZGdlIiwKKwkJICAoX19lbnRyeS0+aW1yICYgKDEgPDwgX19lbnRyeS0+cGluKSkgPyAifG1hc2tlZCI6IiIsCisJCSAgX19lbnRyeS0+Y29hbGVzY2VkID8gIiAoY29hbGVzY2VkKSIgOiAiIikKKyk7CisKKyNkZWZpbmUga3ZtX2FwaWNfZHN0X3Nob3J0aGFuZAkJXAorCXsweDAsICJkc3QifSwJCQlcCisJezB4MSwgInNlbGYifSwJCQlcCisJezB4MiwgImFsbCJ9LAkJCVwKKwl7MHgzLCAiYWxsLWJ1dC1zZWxmIn0KKworVFJBQ0VfRVZFTlQoa3ZtX2FwaWNfaXBpLAorCSAgICBUUF9QUk9UTyhfX3UzMiBpY3JfbG93LCBfX3UzMiBkZXN0X2lkKSwKKwkgICAgVFBfQVJHUyhpY3JfbG93LCBkZXN0X2lkKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCV9fdTMyLAkJaWNyX2xvdwkJKQorCQlfX2ZpZWxkKAlfX3UzMiwJCWRlc3RfaWQJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmljcl9sb3cJPSBpY3JfbG93OworCQlfX2VudHJ5LT5kZXN0X2lkCT0gZGVzdF9pZDsKKwkpLAorCisJVFBfcHJpbnRrKCJkc3QgJXggdmVjICV1ICglc3wlc3wlc3wlc3wlcykiLAorCQkgIF9fZW50cnktPmRlc3RfaWQsICh1OClfX2VudHJ5LT5pY3JfbG93LAorCQkgIF9fcHJpbnRfc3ltYm9saWMoKF9fZW50cnktPmljcl9sb3cgPj4gOCAmIDB4NyksCisJCQkJICAga3ZtX2RlbGl2ZXJfbW9kZSksCisJCSAgKF9fZW50cnktPmljcl9sb3cgJiAoMTw8MTEpKSA/ICJsb2dpY2FsIiA6ICJwaHlzaWNhbCIsCisJCSAgKF9fZW50cnktPmljcl9sb3cgJiAoMTw8MTQpKSA/ICJhc3NlcnQiIDogImRlLWFzc2VydCIsCisJCSAgKF9fZW50cnktPmljcl9sb3cgJiAoMTw8MTUpKSA/ICJsZXZlbCIgOiAiZWRnZSIsCisJCSAgX19wcmludF9zeW1ib2xpYygoX19lbnRyeS0+aWNyX2xvdyA+PiAxOCAmIDB4MyksCisJCQkJICAga3ZtX2FwaWNfZHN0X3Nob3J0aGFuZCkpCispOworCitUUkFDRV9FVkVOVChrdm1fYXBpY19hY2NlcHRfaXJxLAorCSAgICBUUF9QUk9UTyhfX3UzMiBhcGljaWQsIF9fdTE2IGRtLCBfX3U4IHRtLCBfX3U4IHZlYywgYm9vbCBjb2FsZXNjZWQpLAorCSAgICBUUF9BUkdTKGFwaWNpZCwgZG0sIHRtLCB2ZWMsIGNvYWxlc2NlZCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlfX3UzMiwJCWFwaWNpZAkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJCWRtCQkpCisJCV9fZmllbGQoCV9fdTgsCQl0bQkJKQorCQlfX2ZpZWxkKAlfX3U4LAkJdmVjCQkpCisJCV9fZmllbGQoCWJvb2wsCQljb2FsZXNjZWQJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+YXBpY2lkCQk9IGFwaWNpZDsKKwkJX19lbnRyeS0+ZG0JCT0gZG07CisJCV9fZW50cnktPnRtCQk9IHRtOworCQlfX2VudHJ5LT52ZWMJCT0gdmVjOworCQlfX2VudHJ5LT5jb2FsZXNjZWQJPSBjb2FsZXNjZWQ7CisJKSwKKworCVRQX3ByaW50aygiYXBpY2lkICV4IHZlYyAldSAoJXN8JXMpJXMiLAorCQkgIF9fZW50cnktPmFwaWNpZCwgX19lbnRyeS0+dmVjLAorCQkgIF9fcHJpbnRfc3ltYm9saWMoKF9fZW50cnktPmRtID4+IDggJiAweDcpLCBrdm1fZGVsaXZlcl9tb2RlKSwKKwkJICBfX2VudHJ5LT50bSA/ICJsZXZlbCIgOiAiZWRnZSIsCisJCSAgX19lbnRyeS0+Y29hbGVzY2VkID8gIiAoY29hbGVzY2VkKSIgOiAiIikKKyk7CisKKyNlbmRpZiAvKiBfVFJBQ0VfS1ZNX0ggKi8KKworLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14LmMKaW5kZXggMjlmOTEyOS4uZjM4MTIwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC5jCisrKyBiL2FyY2gveDg2L2t2bS92bXguYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlX2V2ZW50Lmg+CiAjaW5jbHVkZSAia3ZtX2NhY2hlX3JlZ3MuaCIKICNpbmNsdWRlICJ4ODYuaCIKIApAQCAtMzQsNiArMzUsOCBAQAogI2luY2x1ZGUgPGFzbS92aXJ0ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL21jZS5oPgogCisjaW5jbHVkZSAidHJhY2UuaCIKKwogI2RlZmluZSBfX2V4KHgpIF9fa3ZtX2hhbmRsZV9mYXVsdF9vbl9yZWJvb3QoeCkKIAogTU9EVUxFX0FVVEhPUigiUXVtcmFuZXQiKTsKQEAgLTUxLDYgKzU0LDEwIEBACiBzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgZW5hYmxlX2VwdCA9IDE7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZXB0LCBlbmFibGVfZXB0LCBib29sLCBTX0lSVUdPKTsKIAorc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IGVuYWJsZV91bnJlc3RyaWN0ZWRfZ3Vlc3QgPSAxOworbW9kdWxlX3BhcmFtX25hbWVkKHVucmVzdHJpY3RlZF9ndWVzdCwKKwkJCWVuYWJsZV91bnJlc3RyaWN0ZWRfZ3Vlc3QsIGJvb2wsIFNfSVJVR08pOworCiBzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlID0gMDsKIG1vZHVsZV9wYXJhbShlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUsIGJvb2wsIFNfSVJVR08pOwogCkBAIC04NCw2ICs5MSwxNCBAQAogCQlpbnQgICAgICAgICAgIGd1ZXN0X2VmZXJfbG9hZGVkOwogCX0gaG9zdF9zdGF0ZTsKIAlzdHJ1Y3QgeworCQlpbnQgdm04Nl9hY3RpdmU7CisJCXU4IHNhdmVfaW9wbDsKKwkJc3RydWN0IGt2bV9zYXZlX3NlZ21lbnQgeworCQkJdTE2IHNlbGVjdG9yOworCQkJdW5zaWduZWQgbG9uZyBiYXNlOworCQkJdTMyIGxpbWl0OworCQkJdTMyIGFyOworCQl9IHRyLCBlcywgZHMsIGZzLCBnczsKIAkJc3RydWN0IHsKIAkJCWJvb2wgcGVuZGluZzsKIAkJCXU4IHZlY3RvcjsKQEAgLTE2MSw2ICsxNzYsOCBAQAogCVZNWF9TRUdNRU5UX0ZJRUxEKExEVFIpLAogfTsKIAorc3RhdGljIHZvaWQgZXB0X3NhdmVfcGRwdHJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKIC8qCiAgKiBLZWVwIE1TUl9LNl9TVEFSIGF0IHRoZSBlbmQsIGFzIHNldHVwX21zcnMoKSB3aWxsIHRyeSB0byBvcHRpbWl6ZSBpdAogICogYXdheSBieSBkZWNyZW1lbnRpbmcgdGhlIGFycmF5IHNpemUuCkBAIC0yNTYsNiArMjczLDI2IEBACiAJCWNwdV9oYXNfdm14X3ZpcnR1YWxpemVfYXBpY19hY2Nlc3NlcygpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc192bXhfZXB0X2V4ZWN1dGVfb25seSh2b2lkKQoreworCXJldHVybiAhISh2bXhfY2FwYWJpbGl0eS5lcHQgJiBWTVhfRVBUX0VYRUNVVEVfT05MWV9CSVQpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc192bXhfZXB0cF91bmNhY2hlYWJsZSh2b2lkKQoreworCXJldHVybiAhISh2bXhfY2FwYWJpbGl0eS5lcHQgJiBWTVhfRVBUUF9VQ19CSVQpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc192bXhfZXB0cF93cml0ZWJhY2sodm9pZCkKK3sKKwlyZXR1cm4gISEodm14X2NhcGFiaWxpdHkuZXB0ICYgVk1YX0VQVFBfV0JfQklUKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfdm14X2VwdF8ybV9wYWdlKHZvaWQpCit7CisJcmV0dXJuICEhKHZteF9jYXBhYmlsaXR5LmVwdCAmIFZNWF9FUFRfMk1CX1BBR0VfQklUKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgY3B1X2hhc192bXhfaW52ZXB0X2luZGl2aWR1YWxfYWRkcih2b2lkKQogewogCXJldHVybiAhISh2bXhfY2FwYWJpbGl0eS5lcHQgJiBWTVhfRVBUX0VYVEVOVF9JTkRJVklEVUFMX0JJVCk7CkBAIC0yNzcsNiArMzE0LDEyIEBACiAJCVNFQ09OREFSWV9FWEVDX0VOQUJMRV9FUFQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9oYXNfdm14X3VucmVzdHJpY3RlZF9ndWVzdCh2b2lkKQoreworCXJldHVybiB2bWNzX2NvbmZpZy5jcHVfYmFzZWRfMm5kX2V4ZWNfY3RybCAmCisJCVNFQ09OREFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVTVDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgdm1fbmVlZF92aXJ0dWFsaXplX2FwaWNfYWNjZXNzZXMoc3RydWN0IGt2bSAqa3ZtKQogewogCXJldHVybiBmbGV4cHJpb3JpdHlfZW5hYmxlZCAmJgpAQCAtNDk3LDE0ICs1NDAsMTYgQEAKIAllYiA9ICgxdSA8PCBQRl9WRUNUT1IpIHwgKDF1IDw8IFVEX1ZFQ1RPUikgfCAoMXUgPDwgTUNfVkVDVE9SKTsKIAlpZiAoIXZjcHUtPmZwdV9hY3RpdmUpCiAJCWViIHw9IDF1IDw8IE5NX1ZFQ1RPUjsKKwkvKgorCSAqIFVuY29uZGl0aW9uYWxseSBpbnRlcmNlcHQgI0RCIHNvIHdlIGNhbiBtYWludGFpbiBkcjYgd2l0aG91dAorCSAqIHJlYWRpbmcgaXQgZXZlcnkgZXhpdC4KKwkgKi8KKwllYiB8PSAxdSA8PCBEQl9WRUNUT1I7CiAJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX0VOQUJMRSkgewotCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJgotCQkgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpCi0JCQllYiB8PSAxdSA8PCBEQl9WRUNUT1I7CiAJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfU1dfQlApCiAJCQllYiB8PSAxdSA8PCBCUF9WRUNUT1I7CiAJfQotCWlmICh2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlKQorCWlmICh0b192bXgodmNwdSktPnJtb2RlLnZtODZfYWN0aXZlKQogCQllYiA9IH4wOwogCWlmIChlbmFibGVfZXB0KQogCQllYiAmPSB+KDF1IDw8IFBGX1ZFQ1RPUik7IC8qIGJ5cGFzc19ndWVzdF9wZiA9IDAgKi8KQEAgLTUyOCwxMiArNTczLDE1IEBACiBzdGF0aWMgdm9pZCBsb2FkX3RyYW5zaXRpb25fZWZlcihzdHJ1Y3QgdmNwdV92bXggKnZteCkKIHsKIAlpbnQgZWZlcl9vZmZzZXQgPSB2bXgtPm1zcl9vZmZzZXRfZWZlcjsKLQl1NjQgaG9zdF9lZmVyID0gdm14LT5ob3N0X21zcnNbZWZlcl9vZmZzZXRdLmRhdGE7Ci0JdTY0IGd1ZXN0X2VmZXIgPSB2bXgtPmd1ZXN0X21zcnNbZWZlcl9vZmZzZXRdLmRhdGE7CisJdTY0IGhvc3RfZWZlcjsKKwl1NjQgZ3Vlc3RfZWZlcjsKIAl1NjQgaWdub3JlX2JpdHM7CiAKIAlpZiAoZWZlcl9vZmZzZXQgPCAwKQogCQlyZXR1cm47CisJaG9zdF9lZmVyID0gdm14LT5ob3N0X21zcnNbZWZlcl9vZmZzZXRdLmRhdGE7CisJZ3Vlc3RfZWZlciA9IHZteC0+Z3Vlc3RfbXNyc1tlZmVyX29mZnNldF0uZGF0YTsKKwogCS8qCiAJICogTlggaXMgZW11bGF0ZWQ7IExNQSBhbmQgTE1FIGhhbmRsZWQgYnkgaGFyZHdhcmU7IFNDRSBtZWFuaW5sZXNzCiAJICogb3V0c2lkZSBsb25nIG1vZGUKQEAgLTczNSwxMiArNzgzLDE3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZteF9nZXRfcmZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gdm1jc19yZWFkbChHVUVTVF9SRkxBR1MpOworCXVuc2lnbmVkIGxvbmcgcmZsYWdzOworCisJcmZsYWdzID0gdm1jc19yZWFkbChHVUVTVF9SRkxBR1MpOworCWlmICh0b192bXgodmNwdSktPnJtb2RlLnZtODZfYWN0aXZlKQorCQlyZmxhZ3MgJj0gfih1bnNpZ25lZCBsb25nKShYODZfRUZMQUdTX0lPUEwgfCBYODZfRUZMQUdTX1ZNKTsKKwlyZXR1cm4gcmZsYWdzOwogfQogCiBzdGF0aWMgdm9pZCB2bXhfc2V0X3JmbGFncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcmZsYWdzKQogewotCWlmICh2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlKQorCWlmICh0b192bXgodmNwdSktPnJtb2RlLnZtODZfYWN0aXZlKQogCQlyZmxhZ3MgfD0gWDg2X0VGTEFHU19JT1BMIHwgWDg2X0VGTEFHU19WTTsKIAl2bWNzX3dyaXRlbChHVUVTVF9SRkxBR1MsIHJmbGFncyk7CiB9CkBAIC03OTcsMTIgKzg1MCwxMyBAQAogCQlpbnRyX2luZm8gfD0gSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLOwogCX0KIAotCWlmICh2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlKSB7CisJaWYgKHZteC0+cm1vZGUudm04Nl9hY3RpdmUpIHsKIAkJdm14LT5ybW9kZS5pcnEucGVuZGluZyA9IHRydWU7CiAJCXZteC0+cm1vZGUuaXJxLnZlY3RvciA9IG5yOwogCQl2bXgtPnJtb2RlLmlycS5yaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7Ci0JCWlmIChuciA9PSBCUF9WRUNUT1IgfHwgbnIgPT0gT0ZfVkVDVE9SKQotCQkJdm14LT5ybW9kZS5pcnEucmlwKys7CisJCWlmIChrdm1fZXhjZXB0aW9uX2lzX3NvZnQobnIpKQorCQkJdm14LT5ybW9kZS5pcnEucmlwICs9CisJCQkJdm14LT52Y3B1LmFyY2guZXZlbnRfZXhpdF9pbnN0X2xlbjsKIAkJaW50cl9pbmZvIHw9IElOVFJfVFlQRV9TT0ZUX0lOVFI7CiAJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQsIGludHJfaW5mbyk7CiAJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlNUUlVDVElPTl9MRU4sIDEpOwpAQCAtOTQwLDcgKzk5NCw3IEBACiAJY2FzZSBNU1JfRUZFUjoKIAkJcmV0dXJuIGt2bV9nZXRfbXNyX2NvbW1vbih2Y3B1LCBtc3JfaW5kZXgsIHBkYXRhKTsKICNlbmRpZgotCWNhc2UgTVNSX0lBMzJfVElNRV9TVEFNUF9DT1VOVEVSOgorCWNhc2UgTVNSX0lBMzJfVFNDOgogCQlkYXRhID0gZ3Vlc3RfcmVhZF90c2MoKTsKIAkJYnJlYWs7CiAJY2FzZSBNU1JfSUEzMl9TWVNFTlRFUl9DUzoKQEAgLTk1Myw5ICsxMDA3LDkgQEAKIAkJZGF0YSA9IHZtY3NfcmVhZGwoR1VFU1RfU1lTRU5URVJfRVNQKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdm14X2xvYWRfaG9zdF9zdGF0ZSh0b192bXgodmNwdSkpOwogCQltc3IgPSBmaW5kX21zcl9lbnRyeSh0b192bXgodmNwdSksIG1zcl9pbmRleCk7CiAJCWlmIChtc3IpIHsKKwkJCXZteF9sb2FkX2hvc3Rfc3RhdGUodG9fdm14KHZjcHUpKTsKIAkJCWRhdGEgPSBtc3ItPmRhdGE7CiAJCQlicmVhazsKIAkJfQpAQCAtMTAwMCwyMiArMTA1NCwxMCBAQAogCWNhc2UgTVNSX0lBMzJfU1lTRU5URVJfRVNQOgogCQl2bWNzX3dyaXRlbChHVUVTVF9TWVNFTlRFUl9FU1AsIGRhdGEpOwogCQlicmVhazsKLQljYXNlIE1TUl9JQTMyX1RJTUVfU1RBTVBfQ09VTlRFUjoKKwljYXNlIE1TUl9JQTMyX1RTQzoKIAkJcmR0c2NsbChob3N0X3RzYyk7CiAJCWd1ZXN0X3dyaXRlX3RzYyhkYXRhLCBob3N0X3RzYyk7CiAJCWJyZWFrOwotCWNhc2UgTVNSX1A2X1BFUkZDVFIwOgotCWNhc2UgTVNSX1A2X1BFUkZDVFIxOgotCWNhc2UgTVNSX1A2X0VWTlRTRUwwOgotCWNhc2UgTVNSX1A2X0VWTlRTRUwxOgotCQkvKgotCQkgKiBKdXN0IGRpc2NhcmQgYWxsIHdyaXRlcyB0byB0aGUgcGVyZm9ybWFuY2UgY291bnRlcnM7IHRoaXMKLQkJICogc2hvdWxkIGtlZXAgYm90aCBvbGRlciBsaW51eCBhbmQgd2luZG93cyA2NC1iaXQgZ3Vlc3RzCi0JCSAqIGhhcHB5Ci0JCSAqLwotCQlwcl91bmltcGwodmNwdSwgInVuaW1wbGVtZW50ZWQgcGVyZmN0ciB3cm1zcjogMHgleCBkYXRhIDB4JWxseFxuIiwgbXNyX2luZGV4LCBkYXRhKTsKLQotCQlicmVhazsKIAljYXNlIE1TUl9JQTMyX0NSX1BBVDoKIAkJaWYgKHZtY3NfY29uZmlnLnZtZW50cnlfY3RybCAmIFZNX0VOVFJZX0xPQURfSUEzMl9QQVQpIHsKIAkJCXZtY3Nfd3JpdGU2NChHVUVTVF9JQTMyX1BBVCwgZGF0YSk7CkBAIC0xMDI0LDkgKzEwNjYsOSBAQAogCQl9CiAJCS8qIE90aGVyd2lzZSBmYWxscyB0aHJvdWdoIHRvIGt2bV9zZXRfbXNyX2NvbW1vbiAqLwogCWRlZmF1bHQ6Ci0JCXZteF9sb2FkX2hvc3Rfc3RhdGUodm14KTsKIAkJbXNyID0gZmluZF9tc3JfZW50cnkodm14LCBtc3JfaW5kZXgpOwogCQlpZiAobXNyKSB7CisJCQl2bXhfbG9hZF9ob3N0X3N0YXRlKHZteCk7CiAJCQltc3ItPmRhdGEgPSBkYXRhOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEwNDYsNiArMTA4OCwxMCBAQAogCWNhc2UgVkNQVV9SRUdTX1JJUDoKIAkJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SSVBdID0gdm1jc19yZWFkbChHVUVTVF9SSVApOwogCQlicmVhazsKKwljYXNlIFZDUFVfRVhSRUdfUERQVFI6CisJCWlmIChlbmFibGVfZXB0KQorCQkJZXB0X3NhdmVfcGRwdHJzKHZjcHUpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0xMjAzLDcgKzEyNDksOCBAQAogCQlvcHQyID0gU0VDT05EQVJZX0VYRUNfVklSVFVBTElaRV9BUElDX0FDQ0VTU0VTIHwKIAkJCVNFQ09OREFSWV9FWEVDX1dCSU5WRF9FWElUSU5HIHwKIAkJCVNFQ09OREFSWV9FWEVDX0VOQUJMRV9WUElEIHwKLQkJCVNFQ09OREFSWV9FWEVDX0VOQUJMRV9FUFQ7CisJCQlTRUNPTkRBUllfRVhFQ19FTkFCTEVfRVBUIHwKKwkJCVNFQ09OREFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVTVDsKIAkJaWYgKGFkanVzdF92bXhfY29udHJvbHMobWluMiwgb3B0MiwKIAkJCQkJTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTMiwKIAkJCQkJJl9jcHVfYmFzZWRfMm5kX2V4ZWNfY29udHJvbCkgPCAwKQpAQCAtMTIxNywxMiArMTI2NCw5IEBACiAJaWYgKF9jcHVfYmFzZWRfMm5kX2V4ZWNfY29udHJvbCAmIFNFQ09OREFSWV9FWEVDX0VOQUJMRV9FUFQpIHsKIAkJLyogQ1IzIGFjY2Vzc2VzIGFuZCBpbnZscGcgZG9uJ3QgbmVlZCB0byBjYXVzZSBWTSBFeGl0cyB3aGVuIEVQVAogCQkgICBlbmFibGVkICovCi0JCW1pbiAmPSB+KENQVV9CQVNFRF9DUjNfTE9BRF9FWElUSU5HIHwKLQkJCSBDUFVfQkFTRURfQ1IzX1NUT1JFX0VYSVRJTkcgfAotCQkJIENQVV9CQVNFRF9JTlZMUEdfRVhJVElORyk7Ci0JCWlmIChhZGp1c3Rfdm14X2NvbnRyb2xzKG1pbiwgb3B0LCBNU1JfSUEzMl9WTVhfUFJPQ0JBU0VEX0NUTFMsCi0JCQkJCSZfY3B1X2Jhc2VkX2V4ZWNfY29udHJvbCkgPCAwKQotCQkJcmV0dXJuIC1FSU87CisJCV9jcHVfYmFzZWRfZXhlY19jb250cm9sICY9IH4oQ1BVX0JBU0VEX0NSM19MT0FEX0VYSVRJTkcgfAorCQkJCQkgICAgIENQVV9CQVNFRF9DUjNfU1RPUkVfRVhJVElORyB8CisJCQkJCSAgICAgQ1BVX0JBU0VEX0lOVkxQR19FWElUSU5HKTsKIAkJcmRtc3IoTVNSX0lBMzJfVk1YX0VQVF9WUElEX0NBUCwKIAkJICAgICAgdm14X2NhcGFiaWxpdHkuZXB0LCB2bXhfY2FwYWJpbGl0eS52cGlkKTsKIAl9CkBAIC0xMzMzLDggKzEzNzcsMTMgQEAKIAlpZiAoIWNwdV9oYXNfdm14X3ZwaWQoKSkKIAkJZW5hYmxlX3ZwaWQgPSAwOwogCi0JaWYgKCFjcHVfaGFzX3ZteF9lcHQoKSkKKwlpZiAoIWNwdV9oYXNfdm14X2VwdCgpKSB7CiAJCWVuYWJsZV9lcHQgPSAwOworCQllbmFibGVfdW5yZXN0cmljdGVkX2d1ZXN0ID0gMDsKKwl9CisKKwlpZiAoIWNwdV9oYXNfdm14X3VucmVzdHJpY3RlZF9ndWVzdCgpKQorCQllbmFibGVfdW5yZXN0cmljdGVkX2d1ZXN0ID0gMDsKIAogCWlmICghY3B1X2hhc192bXhfZmxleHByaW9yaXR5KCkpCiAJCWZsZXhwcmlvcml0eV9lbmFibGVkID0gMDsKQEAgLTEzNDIsNiArMTM5MSw5IEBACiAJaWYgKCFjcHVfaGFzX3ZteF90cHJfc2hhZG93KCkpCiAJCWt2bV94ODZfb3BzLT51cGRhdGVfY3I4X2ludGVyY2VwdCA9IE5VTEw7CiAKKwlpZiAoZW5hYmxlX2VwdCAmJiAhY3B1X2hhc192bXhfZXB0XzJtX3BhZ2UoKSkKKwkJa3ZtX2Rpc2FibGVfbGFyZ2VwYWdlcygpOworCiAJcmV0dXJuIGFsbG9jX2t2bV9hcmVhKCk7CiB9CiAKQEAgLTEzNzIsMTUgKzE0MjQsMTUgQEAKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAogCXZteC0+ZW11bGF0aW9uX3JlcXVpcmVkID0gMTsKLQl2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlID0gMDsKKwl2bXgtPnJtb2RlLnZtODZfYWN0aXZlID0gMDsKIAotCXZtY3Nfd3JpdGVsKEdVRVNUX1RSX0JBU0UsIHZjcHUtPmFyY2gucm1vZGUudHIuYmFzZSk7Ci0Jdm1jc193cml0ZTMyKEdVRVNUX1RSX0xJTUlULCB2Y3B1LT5hcmNoLnJtb2RlLnRyLmxpbWl0KTsKLQl2bWNzX3dyaXRlMzIoR1VFU1RfVFJfQVJfQllURVMsIHZjcHUtPmFyY2gucm1vZGUudHIuYXIpOworCXZtY3Nfd3JpdGVsKEdVRVNUX1RSX0JBU0UsIHZteC0+cm1vZGUudHIuYmFzZSk7CisJdm1jc193cml0ZTMyKEdVRVNUX1RSX0xJTUlULCB2bXgtPnJtb2RlLnRyLmxpbWl0KTsKKwl2bWNzX3dyaXRlMzIoR1VFU1RfVFJfQVJfQllURVMsIHZteC0+cm1vZGUudHIuYXIpOwogCiAJZmxhZ3MgPSB2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUyk7CiAJZmxhZ3MgJj0gfihYODZfRUZMQUdTX0lPUEwgfCBYODZfRUZMQUdTX1ZNKTsKLQlmbGFncyB8PSAodmNwdS0+YXJjaC5ybW9kZS5zYXZlX2lvcGwgPDwgSU9QTF9TSElGVCk7CisJZmxhZ3MgfD0gKHZteC0+cm1vZGUuc2F2ZV9pb3BsIDw8IElPUExfU0hJRlQpOwogCXZtY3Nfd3JpdGVsKEdVRVNUX1JGTEFHUywgZmxhZ3MpOwogCiAJdm1jc193cml0ZWwoR1VFU1RfQ1I0LCAodm1jc19yZWFkbChHVUVTVF9DUjQpICYgflg4Nl9DUjRfVk1FKSB8CkBAIC0xMzkxLDEwICsxNDQzLDEwIEBACiAJaWYgKGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSkKIAkJcmV0dXJuOwogCi0JZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0VTLCAmdmNwdS0+YXJjaC5ybW9kZS5lcyk7Ci0JZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0RTLCAmdmNwdS0+YXJjaC5ybW9kZS5kcyk7Ci0JZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0dTLCAmdmNwdS0+YXJjaC5ybW9kZS5ncyk7Ci0JZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0ZTLCAmdmNwdS0+YXJjaC5ybW9kZS5mcyk7CisJZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0VTLCAmdm14LT5ybW9kZS5lcyk7CisJZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0RTLCAmdm14LT5ybW9kZS5kcyk7CisJZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0dTLCAmdm14LT5ybW9kZS5ncyk7CisJZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0ZTLCAmdm14LT5ybW9kZS5mcyk7CiAKIAl2bWNzX3dyaXRlMTYoR1VFU1RfU1NfU0VMRUNUT1IsIDApOwogCXZtY3Nfd3JpdGUzMihHVUVTVF9TU19BUl9CWVRFUywgMHg5Myk7CkBAIC0xNDMzLDIwICsxNDg1LDIzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAotCXZteC0+ZW11bGF0aW9uX3JlcXVpcmVkID0gMTsKLQl2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlID0gMTsKKwlpZiAoZW5hYmxlX3VucmVzdHJpY3RlZF9ndWVzdCkKKwkJcmV0dXJuOwogCi0JdmNwdS0+YXJjaC5ybW9kZS50ci5iYXNlID0gdm1jc19yZWFkbChHVUVTVF9UUl9CQVNFKTsKKwl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDE7CisJdm14LT5ybW9kZS52bTg2X2FjdGl2ZSA9IDE7CisKKwl2bXgtPnJtb2RlLnRyLmJhc2UgPSB2bWNzX3JlYWRsKEdVRVNUX1RSX0JBU0UpOwogCXZtY3Nfd3JpdGVsKEdVRVNUX1RSX0JBU0UsIHJtb2RlX3Rzc19iYXNlKHZjcHUtPmt2bSkpOwogCi0JdmNwdS0+YXJjaC5ybW9kZS50ci5saW1pdCA9IHZtY3NfcmVhZDMyKEdVRVNUX1RSX0xJTUlUKTsKKwl2bXgtPnJtb2RlLnRyLmxpbWl0ID0gdm1jc19yZWFkMzIoR1VFU1RfVFJfTElNSVQpOwogCXZtY3Nfd3JpdGUzMihHVUVTVF9UUl9MSU1JVCwgUk1PREVfVFNTX1NJWkUgLSAxKTsKIAotCXZjcHUtPmFyY2gucm1vZGUudHIuYXIgPSB2bWNzX3JlYWQzMihHVUVTVF9UUl9BUl9CWVRFUyk7CisJdm14LT5ybW9kZS50ci5hciA9IHZtY3NfcmVhZDMyKEdVRVNUX1RSX0FSX0JZVEVTKTsKIAl2bWNzX3dyaXRlMzIoR1VFU1RfVFJfQVJfQllURVMsIDB4MDA4Yik7CiAKIAlmbGFncyA9IHZtY3NfcmVhZGwoR1VFU1RfUkZMQUdTKTsKLQl2Y3B1LT5hcmNoLnJtb2RlLnNhdmVfaW9wbAorCXZteC0+cm1vZGUuc2F2ZV9pb3BsCiAJCT0gKGZsYWdzICYgWDg2X0VGTEFHU19JT1BMKSA+PiBJT1BMX1NISUZUOwogCiAJZmxhZ3MgfD0gWDg2X0VGTEFHU19JT1BMIHwgWDg2X0VGTEFHU19WTTsKQEAgLTE0NjgsMTAgKzE1MjMsMTAgQEAKIAkJdm1jc193cml0ZWwoR1VFU1RfQ1NfQkFTRSwgMHhmMDAwMCk7CiAJdm1jc193cml0ZTE2KEdVRVNUX0NTX1NFTEVDVE9SLCB2bWNzX3JlYWRsKEdVRVNUX0NTX0JBU0UpID4+IDQpOwogCi0JZml4X3Jtb2RlX3NlZyhWQ1BVX1NSRUdfRVMsICZ2Y3B1LT5hcmNoLnJtb2RlLmVzKTsKLQlmaXhfcm1vZGVfc2VnKFZDUFVfU1JFR19EUywgJnZjcHUtPmFyY2gucm1vZGUuZHMpOwotCWZpeF9ybW9kZV9zZWcoVkNQVV9TUkVHX0dTLCAmdmNwdS0+YXJjaC5ybW9kZS5ncyk7Ci0JZml4X3Jtb2RlX3NlZyhWQ1BVX1NSRUdfRlMsICZ2Y3B1LT5hcmNoLnJtb2RlLmZzKTsKKwlmaXhfcm1vZGVfc2VnKFZDUFVfU1JFR19FUywgJnZteC0+cm1vZGUuZXMpOworCWZpeF9ybW9kZV9zZWcoVkNQVV9TUkVHX0RTLCAmdm14LT5ybW9kZS5kcyk7CisJZml4X3Jtb2RlX3NlZyhWQ1BVX1NSRUdfR1MsICZ2bXgtPnJtb2RlLmdzKTsKKwlmaXhfcm1vZGVfc2VnKFZDUFVfU1JFR19GUywgJnZteC0+cm1vZGUuZnMpOwogCiBjb250aW51ZV9ybW9kZToKIAlrdm1fbW11X3Jlc2V0X2NvbnRleHQodmNwdSk7CkBAIC0xNTQ1LDExICsxNjAwLDExIEBACiAKIHN0YXRpYyB2b2lkIGVwdF9sb2FkX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CisJaWYgKCF0ZXN0X2JpdChWQ1BVX0VYUkVHX1BEUFRSLAorCQkgICAgICAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfZGlydHkpKQorCQlyZXR1cm47CisKIAlpZiAoaXNfcGFnaW5nKHZjcHUpICYmIGlzX3BhZSh2Y3B1KSAmJiAhaXNfbG9uZ19tb2RlKHZjcHUpKSB7Ci0JCWlmICghbG9hZF9wZHB0cnModmNwdSwgdmNwdS0+YXJjaC5jcjMpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkVQVDogRmFpbCB0byBsb2FkIHBkcHRycyFcbiIpOwotCQkJcmV0dXJuOwotCQl9CiAJCXZtY3Nfd3JpdGU2NChHVUVTVF9QRFBUUjAsIHZjcHUtPmFyY2gucGRwdHJzWzBdKTsKIAkJdm1jc193cml0ZTY0KEdVRVNUX1BEUFRSMSwgdmNwdS0+YXJjaC5wZHB0cnNbMV0pOwogCQl2bWNzX3dyaXRlNjQoR1VFU1RfUERQVFIyLCB2Y3B1LT5hcmNoLnBkcHRyc1syXSk7CkBAIC0xNTU3LDYgKzE2MTIsMjEgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGVwdF9zYXZlX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaWYgKGlzX3BhZ2luZyh2Y3B1KSAmJiBpc19wYWUodmNwdSkgJiYgIWlzX2xvbmdfbW9kZSh2Y3B1KSkgeworCQl2Y3B1LT5hcmNoLnBkcHRyc1swXSA9IHZtY3NfcmVhZDY0KEdVRVNUX1BEUFRSMCk7CisJCXZjcHUtPmFyY2gucGRwdHJzWzFdID0gdm1jc19yZWFkNjQoR1VFU1RfUERQVFIxKTsKKwkJdmNwdS0+YXJjaC5wZHB0cnNbMl0gPSB2bWNzX3JlYWQ2NChHVUVTVF9QRFBUUjIpOworCQl2Y3B1LT5hcmNoLnBkcHRyc1szXSA9IHZtY3NfcmVhZDY0KEdVRVNUX1BEUFRSMyk7CisJfQorCisJX19zZXRfYml0KFZDUFVfRVhSRUdfUERQVFIsCisJCSAgKHVuc2lnbmVkIGxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKTsKKwlfX3NldF9iaXQoVkNQVV9FWFJFR19QRFBUUiwKKwkJICAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfZGlydHkpOworfQorCiBzdGF0aWMgdm9pZCB2bXhfc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KTsKIAogc3RhdGljIHZvaWQgZXB0X3VwZGF0ZV9wYWdpbmdfbW9kZV9jcjAodW5zaWduZWQgbG9uZyAqaHdfY3IwLApAQCAtMTU3MSw4ICsxNjQxLDYgQEAKIAkJCSAgICAgIENQVV9CQVNFRF9DUjNfU1RPUkVfRVhJVElORykpOwogCQl2Y3B1LT5hcmNoLmNyMCA9IGNyMDsKIAkJdm14X3NldF9jcjQodmNwdSwgdmNwdS0+YXJjaC5jcjQpOwotCQkqaHdfY3IwIHw9IFg4Nl9DUjBfUEUgfCBYODZfQ1IwX1BHOwotCQkqaHdfY3IwICY9IH5YODZfQ1IwX1dQOwogCX0gZWxzZSBpZiAoIWlzX3BhZ2luZyh2Y3B1KSkgewogCQkvKiBGcm9tIG5vbnBhZ2luZyB0byBwYWdpbmcgKi8KIAkJdm1jc193cml0ZTMyKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsCkBAIC0xNTgxLDkgKzE2NDksMTAgQEAKIAkJCSAgICAgICBDUFVfQkFTRURfQ1IzX1NUT1JFX0VYSVRJTkcpKTsKIAkJdmNwdS0+YXJjaC5jcjAgPSBjcjA7CiAJCXZteF9zZXRfY3I0KHZjcHUsIHZjcHUtPmFyY2guY3I0KTsKLQkJaWYgKCEodmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1dQKSkKLQkJCSpod19jcjAgJj0gflg4Nl9DUjBfV1A7CiAJfQorCisJaWYgKCEoY3IwICYgWDg2X0NSMF9XUCkpCisJCSpod19jcjAgJj0gflg4Nl9DUjBfV1A7CiB9CiAKIHN0YXRpYyB2b2lkIGVwdF91cGRhdGVfcGFnaW5nX21vZGVfY3I0KHVuc2lnbmVkIGxvbmcgKmh3X2NyNCwKQEAgLTE1OTgsMTUgKzE2NjcsMjEgQEAKIAogc3RhdGljIHZvaWQgdm14X3NldF9jcjAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMCkKIHsKLQl1bnNpZ25lZCBsb25nIGh3X2NyMCA9IChjcjAgJiB+S1ZNX0dVRVNUX0NSMF9NQVNLKSB8Ci0JCQkJS1ZNX1ZNX0NSMF9BTFdBWVNfT047CisJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CisJdW5zaWduZWQgbG9uZyBod19jcjA7CisKKwlpZiAoZW5hYmxlX3VucmVzdHJpY3RlZF9ndWVzdCkKKwkJaHdfY3IwID0gKGNyMCAmIH5LVk1fR1VFU1RfQ1IwX01BU0tfVU5SRVNUUklDVEVEX0dVRVNUKQorCQkJfCBLVk1fVk1fQ1IwX0FMV0FZU19PTl9VTlJFU1RSSUNURURfR1VFU1Q7CisJZWxzZQorCQlod19jcjAgPSAoY3IwICYgfktWTV9HVUVTVF9DUjBfTUFTSykgfCBLVk1fVk1fQ1IwX0FMV0FZU19PTjsKIAogCXZteF9mcHVfZGVhY3RpdmF0ZSh2Y3B1KTsKIAotCWlmICh2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlICYmIChjcjAgJiBYODZfQ1IwX1BFKSkKKwlpZiAodm14LT5ybW9kZS52bTg2X2FjdGl2ZSAmJiAoY3IwICYgWDg2X0NSMF9QRSkpCiAJCWVudGVyX3Btb2RlKHZjcHUpOwogCi0JaWYgKCF2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlICYmICEoY3IwICYgWDg2X0NSMF9QRSkpCisJaWYgKCF2bXgtPnJtb2RlLnZtODZfYWN0aXZlICYmICEoY3IwICYgWDg2X0NSMF9QRSkpCiAJCWVudGVyX3Jtb2RlKHZjcHUpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NApAQCAtMTY1MCwxMCArMTcyNSw4IEBACiAJaWYgKGVuYWJsZV9lcHQpIHsKIAkJZXB0cCA9IGNvbnN0cnVjdF9lcHRwKGNyMyk7CiAJCXZtY3Nfd3JpdGU2NChFUFRfUE9JTlRFUiwgZXB0cCk7Ci0JCWVwdF9zeW5jX2NvbnRleHQoZXB0cCk7Ci0JCWVwdF9sb2FkX3BkcHRycyh2Y3B1KTsKIAkJZ3Vlc3RfY3IzID0gaXNfcGFnaW5nKHZjcHUpID8gdmNwdS0+YXJjaC5jcjMgOgotCQkJVk1YX0VQVF9JREVOVElUWV9QQUdFVEFCTEVfQUREUjsKKwkJCXZjcHUtPmt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfbWFwX2FkZHI7CiAJfQogCiAJdm14X2ZsdXNoX3RsYih2Y3B1KTsKQEAgLTE2NjQsNyArMTczNyw3IEBACiAKIHN0YXRpYyB2b2lkIHZteF9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpCiB7Ci0JdW5zaWduZWQgbG9uZyBod19jcjQgPSBjcjQgfCAodmNwdS0+YXJjaC5ybW9kZS52bTg2X2FjdGl2ZSA/CisJdW5zaWduZWQgbG9uZyBod19jcjQgPSBjcjQgfCAodG9fdm14KHZjcHUpLT5ybW9kZS52bTg2X2FjdGl2ZSA/CiAJCSAgICBLVk1fUk1PREVfVk1fQ1I0X0FMV0FZU19PTiA6IEtWTV9QTU9ERV9WTV9DUjRfQUxXQVlTX09OKTsKIAogCXZjcHUtPmFyY2guY3I0ID0gY3I0OwpAQCAtMTcwNywxNiArMTc4MCwxMyBAQAogCiBzdGF0aWMgaW50IHZteF9nZXRfY3BsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3Qga3ZtX3NlZ21lbnQga3ZtX3NlZzsKLQogCWlmICghKHZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkpIC8qIGlmIHJlYWwgbW9kZSAqLwogCQlyZXR1cm4gMDsKIAogCWlmICh2bXhfZ2V0X3JmbGFncyh2Y3B1KSAmIFg4Nl9FRkxBR1NfVk0pIC8qIGlmIHZpcnR1YWwgODA4NiAqLwogCQlyZXR1cm4gMzsKIAotCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAma3ZtX3NlZywgVkNQVV9TUkVHX0NTKTsKLQlyZXR1cm4ga3ZtX3NlZy5zZWxlY3RvciAmIDM7CisJcmV0dXJuIHZtY3NfcmVhZDE2KEdVRVNUX0NTX1NFTEVDVE9SKSAmIDM7CiB9CiAKIHN0YXRpYyB1MzIgdm14X3NlZ21lbnRfYWNjZXNzX3JpZ2h0cyhzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnZhcikKQEAgLTE3NDQsMjAgKzE4MTQsMjEgQEAKIHN0YXRpYyB2b2lkIHZteF9zZXRfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgc3RydWN0IGt2bV9zZWdtZW50ICp2YXIsIGludCBzZWcpCiB7CisJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAJc3RydWN0IGt2bV92bXhfc2VnbWVudF9maWVsZCAqc2YgPSAma3ZtX3ZteF9zZWdtZW50X2ZpZWxkc1tzZWddOwogCXUzMiBhcjsKIAotCWlmICh2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlICYmIHNlZyA9PSBWQ1BVX1NSRUdfVFIpIHsKLQkJdmNwdS0+YXJjaC5ybW9kZS50ci5zZWxlY3RvciA9IHZhci0+c2VsZWN0b3I7Ci0JCXZjcHUtPmFyY2gucm1vZGUudHIuYmFzZSA9IHZhci0+YmFzZTsKLQkJdmNwdS0+YXJjaC5ybW9kZS50ci5saW1pdCA9IHZhci0+bGltaXQ7Ci0JCXZjcHUtPmFyY2gucm1vZGUudHIuYXIgPSB2bXhfc2VnbWVudF9hY2Nlc3NfcmlnaHRzKHZhcik7CisJaWYgKHZteC0+cm1vZGUudm04Nl9hY3RpdmUgJiYgc2VnID09IFZDUFVfU1JFR19UUikgeworCQl2bXgtPnJtb2RlLnRyLnNlbGVjdG9yID0gdmFyLT5zZWxlY3RvcjsKKwkJdm14LT5ybW9kZS50ci5iYXNlID0gdmFyLT5iYXNlOworCQl2bXgtPnJtb2RlLnRyLmxpbWl0ID0gdmFyLT5saW1pdDsKKwkJdm14LT5ybW9kZS50ci5hciA9IHZteF9zZWdtZW50X2FjY2Vzc19yaWdodHModmFyKTsKIAkJcmV0dXJuOwogCX0KIAl2bWNzX3dyaXRlbChzZi0+YmFzZSwgdmFyLT5iYXNlKTsKIAl2bWNzX3dyaXRlMzIoc2YtPmxpbWl0LCB2YXItPmxpbWl0KTsKIAl2bWNzX3dyaXRlMTYoc2YtPnNlbGVjdG9yLCB2YXItPnNlbGVjdG9yKTsKLQlpZiAodmNwdS0+YXJjaC5ybW9kZS52bTg2X2FjdGl2ZSAmJiB2YXItPnMpIHsKKwlpZiAodm14LT5ybW9kZS52bTg2X2FjdGl2ZSAmJiB2YXItPnMpIHsKIAkJLyoKIAkJICogSGFjayByZWFsLW1vZGUgc2VnbWVudHMgaW50byB2bTg2IGNvbXBhdGliaWxpdHkuCiAJCSAqLwpAQCAtMTc2Niw2ICsxODM3LDIxIEBACiAJCWFyID0gMHhmMzsKIAl9IGVsc2UKIAkJYXIgPSB2bXhfc2VnbWVudF9hY2Nlc3NfcmlnaHRzKHZhcik7CisKKwkvKgorCSAqICAgRml4IHRoZSAiQWNjZXNzZWQiIGJpdCBpbiBBUiBmaWVsZCBvZiBzZWdtZW50IHJlZ2lzdGVycyBmb3Igb2xkZXIKKwkgKiBxZW11IGJpbmFyaWVzLgorCSAqICAgSUEzMiBhcmNoIHNwZWNpZmllcyB0aGF0IGF0IHRoZSB0aW1lIG9mIHByb2Nlc3NvciByZXNldCB0aGUKKwkgKiAiQWNjZXNzZWQiIGJpdCBpbiB0aGUgQVIgZmllbGQgb2Ygc2VnbWVudCByZWdpc3RlcnMgaXMgMS4gQW5kIHFlbXUKKwkgKiBpcyBzZXR0aW5nIGl0IHRvIDAgaW4gdGhlIHVzZWRsYW5kIGNvZGUuIFRoaXMgY2F1c2VzIGludmFsaWQgZ3Vlc3QKKwkgKiBzdGF0ZSB2bWV4aXQgd2hlbiAidW5yZXN0cmljdGVkIGd1ZXN0IiBtb2RlIGlzIHR1cm5lZCBvbi4KKwkgKiAgICBGaXggZm9yIHRoaXMgc2V0dXAgaXNzdWUgaW4gY3B1X3Jlc2V0IGlzIGJlaW5nIHB1c2hlZCBpbiB0aGUgcWVtdQorCSAqIHRyZWUuIE5ld2VyIHFlbXUgYmluYXJpZXMgd2l0aCB0aGF0IHFlbXUgZml4IHdvdWxkIG5vdCBuZWVkIHRoaXMKKwkgKiBrdm0gaGFjay4KKwkgKi8KKwlpZiAoZW5hYmxlX3VucmVzdHJpY3RlZF9ndWVzdCAmJiAoc2VnICE9IFZDUFVfU1JFR19MRFRSKSkKKwkJYXIgfD0gMHgxOyAvKiBBY2Nlc3NlZCAqLworCiAJdm1jc193cml0ZTMyKHNmLT5hcl9ieXRlcywgYXIpOwogfQogCkBAIC0yMDQwLDcgKzIxMjYsNyBAQAogCWlmIChsaWtlbHkoa3ZtLT5hcmNoLmVwdF9pZGVudGl0eV9wYWdldGFibGVfZG9uZSkpCiAJCXJldHVybiAxOwogCXJldCA9IDA7Ci0JaWRlbnRpdHlfbWFwX3BmbiA9IFZNWF9FUFRfSURFTlRJVFlfUEFHRVRBQkxFX0FERFIgPj4gUEFHRV9TSElGVDsKKwlpZGVudGl0eV9tYXBfcGZuID0ga3ZtLT5hcmNoLmVwdF9pZGVudGl0eV9tYXBfYWRkciA+PiBQQUdFX1NISUZUOwogCXIgPSBrdm1fY2xlYXJfZ3Vlc3RfcGFnZShrdm0sIGlkZW50aXR5X21hcF9wZm4sIDAsIFBBR0VfU0laRSk7CiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKQEAgLTIwNjIsMTEgKzIxNDgsMTkgQEAKIHN0YXRpYyB2b2lkIHNlZ19zZXR1cChpbnQgc2VnKQogewogCXN0cnVjdCBrdm1fdm14X3NlZ21lbnRfZmllbGQgKnNmID0gJmt2bV92bXhfc2VnbWVudF9maWVsZHNbc2VnXTsKKwl1bnNpZ25lZCBpbnQgYXI7CiAKIAl2bWNzX3dyaXRlMTYoc2YtPnNlbGVjdG9yLCAwKTsKIAl2bWNzX3dyaXRlbChzZi0+YmFzZSwgMCk7CiAJdm1jc193cml0ZTMyKHNmLT5saW1pdCwgMHhmZmZmKTsKLQl2bWNzX3dyaXRlMzIoc2YtPmFyX2J5dGVzLCAweGYzKTsKKwlpZiAoZW5hYmxlX3VucmVzdHJpY3RlZF9ndWVzdCkgeworCQlhciA9IDB4OTM7CisJCWlmIChzZWcgPT0gVkNQVV9TUkVHX0NTKQorCQkJYXIgfD0gMHgwODsgLyogY29kZSBzZWdtZW50ICovCisJfSBlbHNlCisJCWFyID0gMHhmMzsKKworCXZtY3Nfd3JpdGUzMihzZi0+YXJfYnl0ZXMsIGFyKTsKIH0KIAogc3RhdGljIGludCBhbGxvY19hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm0gKmt2bSkKQEAgLTIxMDEsMTQgKzIxOTUsMTUgQEAKIAkJZ290byBvdXQ7CiAJa3ZtX3VzZXJzcGFjZV9tZW0uc2xvdCA9IElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1Q7CiAJa3ZtX3VzZXJzcGFjZV9tZW0uZmxhZ3MgPSAwOwotCWt2bV91c2Vyc3BhY2VfbWVtLmd1ZXN0X3BoeXNfYWRkciA9IFZNWF9FUFRfSURFTlRJVFlfUEFHRVRBQkxFX0FERFI7CisJa3ZtX3VzZXJzcGFjZV9tZW0uZ3Vlc3RfcGh5c19hZGRyID0KKwkJa3ZtLT5hcmNoLmVwdF9pZGVudGl0eV9tYXBfYWRkcjsKIAlrdm1fdXNlcnNwYWNlX21lbS5tZW1vcnlfc2l6ZSA9IFBBR0VfU0laRTsKIAlyID0gX19rdm1fc2V0X21lbW9yeV9yZWdpb24oa3ZtLCAma3ZtX3VzZXJzcGFjZV9tZW0sIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCWt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfcGFnZXRhYmxlID0gZ2ZuX3RvX3BhZ2Uoa3ZtLAotCQkJVk1YX0VQVF9JREVOVElUWV9QQUdFVEFCTEVfQUREUiA+PiBQQUdFX1NISUZUKTsKKwkJCWt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfbWFwX2FkZHIgPj4gUEFHRV9TSElGVCk7CiBvdXQ6CiAJdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CiAJcmV0dXJuIHI7CkBAIC0yMjA5LDYgKzIzMDQsOCBAQAogCQkJZXhlY19jb250cm9sICY9IH5TRUNPTkRBUllfRVhFQ19FTkFCTEVfVlBJRDsKIAkJaWYgKCFlbmFibGVfZXB0KQogCQkJZXhlY19jb250cm9sICY9IH5TRUNPTkRBUllfRVhFQ19FTkFCTEVfRVBUOworCQlpZiAoIWVuYWJsZV91bnJlc3RyaWN0ZWRfZ3Vlc3QpCisJCQlleGVjX2NvbnRyb2wgJj0gflNFQ09OREFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVTVDsKIAkJdm1jc193cml0ZTMyKFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsIGV4ZWNfY29udHJvbCk7CiAJfQogCkBAIC0yMzI2LDE0ICsyNDIzLDE0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXZteC0+dmNwdS5hcmNoLnJtb2RlLnZtODZfYWN0aXZlID0gMDsKKwl2bXgtPnJtb2RlLnZtODZfYWN0aXZlID0gMDsKIAogCXZteC0+c29mdF92bm1pX2Jsb2NrZWQgPSAwOwogCiAJdm14LT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRYXSA9IGdldF9yZHhfaW5pdF92YWwoKTsKIAlrdm1fc2V0X2NyOCgmdm14LT52Y3B1LCAwKTsKIAltc3IgPSAweGZlZTAwMDAwIHwgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFOwotCWlmICh2bXgtPnZjcHUudmNwdV9pZCA9PSAwKQorCWlmIChrdm1fdmNwdV9pc19ic3AoJnZteC0+dmNwdSkpCiAJCW1zciB8PSBNU1JfSUEzMl9BUElDQkFTRV9CU1A7CiAJa3ZtX3NldF9hcGljX2Jhc2UoJnZteC0+dmNwdSwgbXNyKTsKIApAQCAtMjM0NCw3ICsyNDQxLDcgQEAKIAkgKiBHVUVTVF9DU19CQVNFIHNob3VsZCByZWFsbHkgYmUgMHhmZmZmMDAwMCwgYnV0IFZUIHZtODYgbW9kZQogCSAqIGluc2lzdHMgb24gaGF2aW5nIEdVRVNUX0NTX0JBU0UgPT0gR1VFU1RfQ1NfU0VMRUNUT1IgPDwgNC4gIFNpZ2guCiAJICovCi0JaWYgKHZteC0+dmNwdS52Y3B1X2lkID09IDApIHsKKwlpZiAoa3ZtX3ZjcHVfaXNfYnNwKCZ2bXgtPnZjcHUpKSB7CiAJCXZtY3Nfd3JpdGUxNihHVUVTVF9DU19TRUxFQ1RPUiwgMHhmMDAwKTsKIAkJdm1jc193cml0ZWwoR1VFU1RfQ1NfQkFTRSwgMHgwMDBmMDAwMCk7CiAJfSBlbHNlIHsKQEAgLTIzNzMsNyArMjQ3MCw3IEBACiAJdm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRUlQLCAwKTsKIAogCXZtY3Nfd3JpdGVsKEdVRVNUX1JGTEFHUywgMHgwMik7Ci0JaWYgKHZteC0+dmNwdS52Y3B1X2lkID09IDApCisJaWYgKGt2bV92Y3B1X2lzX2JzcCgmdm14LT52Y3B1KSkKIAkJa3ZtX3JpcF93cml0ZSh2Y3B1LCAweGZmZjApOwogCWVsc2UKIAkJa3ZtX3JpcF93cml0ZSh2Y3B1LCAwKTsKQEAgLTI0NjEsMTMgKzI1NTgsMTYgQEAKIAl1aW50MzJfdCBpbnRyOwogCWludCBpcnEgPSB2Y3B1LT5hcmNoLmludGVycnVwdC5ucjsKIAotCUtWTVRSQUNFXzFEKElOSl9WSVJRLCB2Y3B1LCAodTMyKWlycSwgaGFuZGxlcik7CisJdHJhY2Vfa3ZtX2lual92aXJxKGlycSk7CiAKIAkrK3ZjcHUtPnN0YXQuaXJxX2luamVjdGlvbnM7Ci0JaWYgKHZjcHUtPmFyY2gucm1vZGUudm04Nl9hY3RpdmUpIHsKKwlpZiAodm14LT5ybW9kZS52bTg2X2FjdGl2ZSkgewogCQl2bXgtPnJtb2RlLmlycS5wZW5kaW5nID0gdHJ1ZTsKIAkJdm14LT5ybW9kZS5pcnEudmVjdG9yID0gaXJxOwogCQl2bXgtPnJtb2RlLmlycS5yaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7CisJCWlmICh2Y3B1LT5hcmNoLmludGVycnVwdC5zb2Z0KQorCQkJdm14LT5ybW9kZS5pcnEucmlwICs9CisJCQkJdm14LT52Y3B1LmFyY2guZXZlbnRfZXhpdF9pbnN0X2xlbjsKIAkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKIAkJCSAgICAgaXJxIHwgSU5UUl9UWVBFX1NPRlRfSU5UUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKIAkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOU1RSVUNUSU9OX0xFTiwgMSk7CkBAIC0yNTAyLDcgKzI2MDIsNyBAQAogCX0KIAogCSsrdmNwdS0+c3RhdC5ubWlfaW5qZWN0aW9uczsKLQlpZiAodmNwdS0+YXJjaC5ybW9kZS52bTg2X2FjdGl2ZSkgeworCWlmICh2bXgtPnJtb2RlLnZtODZfYWN0aXZlKSB7CiAJCXZteC0+cm1vZGUuaXJxLnBlbmRpbmcgPSB0cnVlOwogCQl2bXgtPnJtb2RlLmlycS52ZWN0b3IgPSBOTUlfVkVDVE9SOwogCQl2bXgtPnJtb2RlLmlycS5yaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7CkBAIC0yNjU5LDE0ICsyNzU5LDE0IEBACiAJCWlmIChlbmFibGVfZXB0KQogCQkJQlVHKCk7CiAJCWNyMiA9IHZtY3NfcmVhZGwoRVhJVF9RVUFMSUZJQ0FUSU9OKTsKLQkJS1ZNVFJBQ0VfM0QoUEFHRV9GQVVMVCwgdmNwdSwgZXJyb3JfY29kZSwgKHUzMiljcjIsCi0JCQkgICAgKHUzMikoKHU2NCljcjIgPj4gMzIpLCBoYW5kbGVyKTsKKwkJdHJhY2Vfa3ZtX3BhZ2VfZmF1bHQoY3IyLCBlcnJvcl9jb2RlKTsKKwogCQlpZiAoa3ZtX2V2ZW50X25lZWRzX3JlaW5qZWN0aW9uKHZjcHUpKQogCQkJa3ZtX21tdV91bnByb3RlY3RfcGFnZV92aXJ0KHZjcHUsIGNyMik7CiAJCXJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgY3IyLCBlcnJvcl9jb2RlKTsKIAl9CiAKLQlpZiAodmNwdS0+YXJjaC5ybW9kZS52bTg2X2FjdGl2ZSAmJgorCWlmICh2bXgtPnJtb2RlLnZtODZfYWN0aXZlICYmCiAJICAgIGhhbmRsZV9ybW9kZV9leGNlcHRpb24odmNwdSwgaW50cl9pbmZvICYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLLAogCQkJCQkJCQllcnJvcl9jb2RlKSkgewogCQlpZiAodmNwdS0+YXJjaC5oYWx0X3JlcXVlc3QpIHsKQEAgLTI3MDcsNyArMjgwNyw2IEBACiAJCQkJICAgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAkrK3ZjcHUtPnN0YXQuaXJxX2V4aXRzOwotCUtWTVRSQUNFXzFEKElOVFIsIHZjcHUsIHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9JTkZPKSwgaGFuZGxlcik7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTI3NTUsNyArMjg1NCw3IEBACiAKIHN0YXRpYyBpbnQgaGFuZGxlX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb247CisJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sIHZhbDsKIAlpbnQgY3I7CiAJaW50IHJlZzsKIApAQCAtMjc2NCwyMSArMjg2MywxOSBAQAogCXJlZyA9IChleGl0X3F1YWxpZmljYXRpb24gPj4gOCkgJiAxNTsKIAlzd2l0Y2ggKChleGl0X3F1YWxpZmljYXRpb24gPj4gNCkgJiAzKSB7CiAJY2FzZSAwOiAvKiBtb3YgdG8gY3IgKi8KLQkJS1ZNVFJBQ0VfM0QoQ1JfV1JJVEUsIHZjcHUsICh1MzIpY3IsCi0JCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpLAotCQkJICAgICh1MzIpKCh1NjQpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgcmVnKSA+PiAzMiksCi0JCQkgICAgaGFuZGxlcik7CisJCXZhbCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZyk7CisJCXRyYWNlX2t2bV9jcl93cml0ZShjciwgdmFsKTsKIAkJc3dpdGNoIChjcikgewogCQljYXNlIDA6Ci0JCQlrdm1fc2V0X2NyMCh2Y3B1LCBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpKTsKKwkJCWt2bV9zZXRfY3IwKHZjcHUsIHZhbCk7CiAJCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgMzoKLQkJCWt2bV9zZXRfY3IzKHZjcHUsIGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZykpOworCQkJa3ZtX3NldF9jcjModmNwdSwgdmFsKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSA0OgotCQkJa3ZtX3NldF9jcjQodmNwdSwga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgcmVnKSk7CisJCQlrdm1fc2V0X2NyNCh2Y3B1LCB2YWwpOwogCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAkJCXJldHVybiAxOwogCQljYXNlIDg6IHsKQEAgLTI4MDAsMjMgKzI4OTcsMTkgQEAKIAkJdmNwdS0+YXJjaC5jcjAgJj0gflg4Nl9DUjBfVFM7CiAJCXZtY3Nfd3JpdGVsKENSMF9SRUFEX1NIQURPVywgdmNwdS0+YXJjaC5jcjApOwogCQl2bXhfZnB1X2FjdGl2YXRlKHZjcHUpOwotCQlLVk1UUkFDRV8wRChDTFRTLCB2Y3B1LCBoYW5kbGVyKTsKIAkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAkJcmV0dXJuIDE7CiAJY2FzZSAxOiAvKm1vdiBmcm9tIGNyKi8KIAkJc3dpdGNoIChjcikgewogCQljYXNlIDM6CiAJCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgcmVnLCB2Y3B1LT5hcmNoLmNyMyk7Ci0JCQlLVk1UUkFDRV8zRChDUl9SRUFELCB2Y3B1LCAodTMyKWNyLAotCQkJCSAgICAodTMyKWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZyksCi0JCQkJICAgICh1MzIpKCh1NjQpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgcmVnKSA+PiAzMiksCi0JCQkJICAgIGhhbmRsZXIpOworCQkJdHJhY2Vfa3ZtX2NyX3JlYWQoY3IsIHZjcHUtPmFyY2guY3IzKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSA4OgotCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIHJlZywga3ZtX2dldF9jcjgodmNwdSkpOwotCQkJS1ZNVFJBQ0VfMkQoQ1JfUkVBRCwgdmNwdSwgKHUzMiljciwKLQkJCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpLCBoYW5kbGVyKTsKKwkJCXZhbCA9IGt2bV9nZXRfY3I4KHZjcHUpOworCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIHJlZywgdmFsKTsKKwkJCXRyYWNlX2t2bV9jcl9yZWFkKGNyLCB2YWwpOwogCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAkJCXJldHVybiAxOwogCQl9CkBAIC0yODQxLDYgKzI5MzQsOCBAQAogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBkciwgcmVnOwogCisJaWYgKCFrdm1fcmVxdWlyZV9jcGwodmNwdSwgMCkpCisJCXJldHVybiAxOwogCWRyID0gdm1jc19yZWFkbChHVUVTVF9EUjcpOwogCWlmIChkciAmIERSN19HRCkgewogCQkvKgpAQCAtMjg4NCw3ICsyOTc5LDYgQEAKIAkJCXZhbCA9IDA7CiAJCX0KIAkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIHJlZywgdmFsKTsKLQkJS1ZNVFJBQ0VfMkQoRFJfUkVBRCwgdmNwdSwgKHUzMilkciwgKHUzMil2YWwsIGhhbmRsZXIpOwogCX0gZWxzZSB7CiAJCXZhbCA9IHZjcHUtPmFyY2gucmVnc1tyZWddOwogCQlzd2l0Y2ggKGRyKSB7CkBAIC0yOTE3LDcgKzMwMTEsNiBAQAogCQkJfQogCQkJYnJlYWs7CiAJCX0KLQkJS1ZNVFJBQ0VfMkQoRFJfV1JJVEUsIHZjcHUsICh1MzIpZHIsICh1MzIpdmFsLCBoYW5kbGVyKTsKIAl9CiAJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAlyZXR1cm4gMTsKQEAgLTI5MzksOCArMzAzMiw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCUtWTVRSQUNFXzNEKE1TUl9SRUFELCB2Y3B1LCBlY3gsICh1MzIpZGF0YSwgKHUzMikoZGF0YSA+PiAzMiksCi0JCSAgICBoYW5kbGVyKTsKKwl0cmFjZV9rdm1fbXNyX3JlYWQoZWN4LCBkYXRhKTsKIAogCS8qIEZJWE1FOiBoYW5kbGluZyBvZiBiaXRzIDMyOjYzIG9mIHJheCwgcmR4ICovCiAJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gZGF0YSAmIC0xdTsKQEAgLTI5NTUsOCArMzA0Nyw3IEBACiAJdTY0IGRhdGEgPSAodmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdICYgLTF1KQogCQl8ICgodTY0KSh2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF0gJiAtMXUpIDw8IDMyKTsKIAotCUtWTVRSQUNFXzNEKE1TUl9XUklURSwgdmNwdSwgZWN4LCAodTMyKWRhdGEsICh1MzIpKGRhdGEgPj4gMzIpLAotCQkgICAgaGFuZGxlcik7CisJdHJhY2Vfa3ZtX21zcl93cml0ZShlY3gsIGRhdGEpOwogCiAJaWYgKHZteF9zZXRfbXNyKHZjcHUsIGVjeCwgZGF0YSkgIT0gMCkgewogCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOwpAQCAtMjk4Myw3ICszMDc0LDYgQEAKIAljcHVfYmFzZWRfdm1fZXhlY19jb250cm9sICY9IH5DUFVfQkFTRURfVklSVFVBTF9JTlRSX1BFTkRJTkc7CiAJdm1jc193cml0ZTMyKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIGNwdV9iYXNlZF92bV9leGVjX2NvbnRyb2wpOwogCi0JS1ZNVFJBQ0VfMEQoUEVORF9JTlRSLCB2Y3B1LCBoYW5kbGVyKTsKIAkrK3ZjcHUtPnN0YXQuaXJxX3dpbmRvd19leGl0czsKIAogCS8qCkBAIC0zMDQ5LDcgKzMxMzksNyBAQAogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJGYWlsIHRvIGhhbmRsZSBhcGljIGFjY2VzcyB2bWV4aXQhIE9mZnNldCBpcyAweCVseFxuIiwKIAkJICAgICAgIG9mZnNldCk7Ci0JCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAtRU5PRVhFQzsKIAl9CiAJcmV0dXJuIDE7CiB9CkBAIC0zMTE4LDcgKzMyMDgsNyBAQAogCiAJaWYgKGV4aXRfcXVhbGlmaWNhdGlvbiAmICgxIDw8IDYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRVBUOiBHUEEgZXhjZWVkcyBHQVchXG4iKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJZ2xhX3ZhbGlkaXR5ID0gKGV4aXRfcXVhbGlmaWNhdGlvbiA+PiA3KSAmIDB4MzsKQEAgLTMxMzAsMTQgKzMyMjAsOTggQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJFUFQ6IEV4aXQgcXVhbGlmaWNhdGlvbiBpcyAweCVseFxuIiwKIAkJCShsb25nIHVuc2lnbmVkIGludClleGl0X3F1YWxpZmljYXRpb24pOwogCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX1VOS05PV047Ci0JCWt2bV9ydW4tPmh3LmhhcmR3YXJlX2V4aXRfcmVhc29uID0gMDsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJa3ZtX3J1bi0+aHcuaGFyZHdhcmVfZXhpdF9yZWFzb24gPSBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OOworCQlyZXR1cm4gMDsKIAl9CiAKIAlncGEgPSB2bWNzX3JlYWQ2NChHVUVTVF9QSFlTSUNBTF9BRERSRVNTKTsKKwl0cmFjZV9rdm1fcGFnZV9mYXVsdChncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7CiAJcmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEgJiBQQUdFX01BU0ssIDApOwogfQogCitzdGF0aWMgdTY0IGVwdF9yc3ZkX21hc2sodTY0IHNwdGUsIGludCBsZXZlbCkKK3sKKwlpbnQgaTsKKwl1NjQgbWFzayA9IDA7CisKKwlmb3IgKGkgPSA1MTsgaSA+IGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0czsgaS0tKQorCQltYXNrIHw9ICgxVUxMIDw8IGkpOworCisJaWYgKGxldmVsID4gMikKKwkJLyogYml0cyA3OjMgcmVzZXJ2ZWQgKi8KKwkJbWFzayB8PSAweGY4OworCWVsc2UgaWYgKGxldmVsID09IDIpIHsKKwkJaWYgKHNwdGUgJiAoMVVMTCA8PCA3KSkKKwkJCS8qIDJNQiByZWYsIGJpdHMgMjA6MTIgcmVzZXJ2ZWQgKi8KKwkJCW1hc2sgfD0gMHgxZmYwMDA7CisJCWVsc2UKKwkJCS8qIGJpdHMgNjozIHJlc2VydmVkICovCisJCQltYXNrIHw9IDB4Nzg7CisJfQorCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIGVwdF9taXNjb25maWdfaW5zcGVjdF9zcHRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNwdGUsCisJCQkJICAgICAgIGludCBsZXZlbCkKK3sKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBzcHRlIDB4JWxseCBsZXZlbCAlZFxuIiwgX19mdW5jX18sIHNwdGUsIGxldmVsKTsKKworCS8qIDAxMGIgKHdyaXRlLW9ubHkpICovCisJV0FSTl9PTigoc3B0ZSAmIDB4NykgPT0gMHgyKTsKKworCS8qIDExMGIgKHdyaXRlL2V4ZWN1dGUpICovCisJV0FSTl9PTigoc3B0ZSAmIDB4NykgPT0gMHg2KTsKKworCS8qIDEwMGIgKGV4ZWN1dGUtb25seSkgYW5kIHZhbHVlIG5vdCBzdXBwb3J0ZWQgYnkgbG9naWNhbCBwcm9jZXNzb3IgKi8KKwlpZiAoIWNwdV9oYXNfdm14X2VwdF9leGVjdXRlX29ubHkoKSkKKwkJV0FSTl9PTigoc3B0ZSAmIDB4NykgPT0gMHg0KTsKKworCS8qIG5vdCAwMDBiICovCisJaWYgKChzcHRlICYgMHg3KSkgeworCQl1NjQgcnN2ZF9iaXRzID0gc3B0ZSAmIGVwdF9yc3ZkX21hc2soc3B0ZSwgbGV2ZWwpOworCisJCWlmIChyc3ZkX2JpdHMgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcnN2ZF9iaXRzID0gMHglbGx4XG4iLAorCQkJCQkgX19mdW5jX18sIHJzdmRfYml0cyk7CisJCQlXQVJOX09OKDEpOworCQl9CisKKwkJaWYgKGxldmVsID09IDEgfHwgKGxldmVsID09IDIgJiYgKHNwdGUgJiAoMVVMTCA8PCA3KSkpKSB7CisJCQl1NjQgZXB0X21lbV90eXBlID0gKHNwdGUgJiAweDM4KSA+PiAzOworCisJCQlpZiAoZXB0X21lbV90eXBlID09IDIgfHwgZXB0X21lbV90eXBlID09IDMgfHwKKwkJCSAgICBlcHRfbWVtX3R5cGUgPT0gNykgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVwdF9tZW1fdHlwZT0weCVsbHhcbiIsCisJCQkJCQlfX2Z1bmNfXywgZXB0X21lbV90eXBlKTsKKwkJCQlXQVJOX09OKDEpOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgaW50IGhhbmRsZV9lcHRfbWlzY29uZmlnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJdTY0IHNwdGVzWzRdOworCWludCBucl9zcHRlcywgaTsKKwlncGFfdCBncGE7CisKKwlncGEgPSB2bWNzX3JlYWQ2NChHVUVTVF9QSFlTSUNBTF9BRERSRVNTKTsKKworCXByaW50ayhLRVJOX0VSUiAiRVBUOiBNaXNjb25maWd1cmF0aW9uLlxuIik7CisJcHJpbnRrKEtFUk5fRVJSICJFUFQ6IEdQQTogMHglbGx4XG4iLCBncGEpOworCisJbnJfc3B0ZXMgPSBrdm1fbW11X2dldF9zcHRlX2hpZXJhcmNoeSh2Y3B1LCBncGEsIHNwdGVzKTsKKworCWZvciAoaSA9IFBUNjRfUk9PVF9MRVZFTDsgaSA+IFBUNjRfUk9PVF9MRVZFTCAtIG5yX3NwdGVzOyAtLWkpCisJCWVwdF9taXNjb25maWdfaW5zcGVjdF9zcHRlKHZjcHUsIHNwdGVzW2ktMV0sIGkpOworCisJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9VTktOT1dOOworCWt2bV9ydW4tPmh3LmhhcmR3YXJlX2V4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRzsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGhhbmRsZV9ubWlfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJdTMyIGNwdV9iYXNlZF92bV9leGVjX2NvbnRyb2w7CkBAIC0zMjE3LDggKzMzOTEsOSBAQAogCVtFWElUX1JFQVNPTl9BUElDX0FDQ0VTU10gICAgICAgICAgICAgPSBoYW5kbGVfYXBpY19hY2Nlc3MsCiAJW0VYSVRfUkVBU09OX1dCSU5WRF0gICAgICAgICAgICAgICAgICA9IGhhbmRsZV93YmludmQsCiAJW0VYSVRfUkVBU09OX1RBU0tfU1dJVENIXSAgICAgICAgICAgICA9IGhhbmRsZV90YXNrX3N3aXRjaCwKLQlbRVhJVF9SRUFTT05fRVBUX1ZJT0xBVElPTl0JICAgICAgPSBoYW5kbGVfZXB0X3Zpb2xhdGlvbiwKIAlbRVhJVF9SRUFTT05fTUNFX0RVUklOR19WTUVOVFJZXSAgICAgID0gaGFuZGxlX21hY2hpbmVfY2hlY2ssCisJW0VYSVRfUkVBU09OX0VQVF9WSU9MQVRJT05dCSAgICAgID0gaGFuZGxlX2VwdF92aW9sYXRpb24sCisJW0VYSVRfUkVBU09OX0VQVF9NSVNDT05GSUddICAgICAgICAgICA9IGhhbmRsZV9lcHRfbWlzY29uZmlnLAogfTsKIAogc3RhdGljIGNvbnN0IGludCBrdm1fdm14X21heF9leGl0X2hhbmRsZXJzID0KQEAgLTMyMzQsOCArMzQwOSw3IEBACiAJdTMyIGV4aXRfcmVhc29uID0gdm14LT5leGl0X3JlYXNvbjsKIAl1MzIgdmVjdG9yaW5nX2luZm8gPSB2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbzsKIAotCUtWTVRSQUNFXzNEKFZNRVhJVCwgdmNwdSwgZXhpdF9yZWFzb24sICh1MzIpa3ZtX3JpcF9yZWFkKHZjcHUpLAotCQkgICAgKHUzMikoKHU2NClrdm1fcmlwX3JlYWQodmNwdSkgPj4gMzIpLCBlbnRyeWV4aXQpOworCXRyYWNlX2t2bV9leGl0KGV4aXRfcmVhc29uLCBrdm1fcmlwX3JlYWQodmNwdSkpOwogCiAJLyogSWYgd2UgbmVlZCB0byBlbXVsYXRlIGFuIE1NSU8gZnJvbSBoYW5kbGVfaW52YWxpZF9ndWVzdF9zdGF0ZQogCSAqIHdlIGp1c3QgcmV0dXJuIDAgKi8KQEAgLTMyNDcsMTAgKzM0MjEsOCBAQAogCiAJLyogQWNjZXNzIENSMyBkb24ndCBjYXVzZSBWTUV4aXQgaW4gcGFnaW5nIG1vZGUsIHNvIHdlIG5lZWQKIAkgKiB0byBzeW5jIHdpdGggZ3Vlc3QgcmVhbCBDUjMuICovCi0JaWYgKGVuYWJsZV9lcHQgJiYgaXNfcGFnaW5nKHZjcHUpKSB7CisJaWYgKGVuYWJsZV9lcHQgJiYgaXNfcGFnaW5nKHZjcHUpKQogCQl2Y3B1LT5hcmNoLmNyMyA9IHZtY3NfcmVhZGwoR1VFU1RfQ1IzKTsKLQkJZXB0X2xvYWRfcGRwdHJzKHZjcHUpOwotCX0KIAogCWlmICh1bmxpa2VseSh2bXgtPmZhaWwpKSB7CiAJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfRkFJTF9FTlRSWTsKQEAgLTMzMjYsMTAgKzM0OTgsOCBAQAogCiAJLyogV2UgbmVlZCB0byBoYW5kbGUgTk1JcyBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqLwogCWlmICgoZXhpdF9pbnRyX2luZm8gJiBJTlRSX0lORk9fSU5UUl9UWVBFX01BU0spID09IElOVFJfVFlQRV9OTUlfSU5UUiAmJgotCSAgICAoZXhpdF9pbnRyX2luZm8gJiBJTlRSX0lORk9fVkFMSURfTUFTSykpIHsKLQkJS1ZNVFJBQ0VfMEQoTk1JLCAmdm14LT52Y3B1LCBoYW5kbGVyKTsKKwkgICAgKGV4aXRfaW50cl9pbmZvICYgSU5UUl9JTkZPX1ZBTElEX01BU0spKQogCQlhc20oImludCAkMiIpOwotCX0KIAogCWlkdHZfaW5mb192YWxpZCA9IGlkdF92ZWN0b3JpbmdfaW5mbyAmIFZFQ1RPUklOR19JTkZPX1ZBTElEX01BU0s7CiAKQEAgLTM0MzQsNiArMzYwNCwxMCBAQAogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCisJaWYgKGVuYWJsZV9lcHQgJiYgaXNfcGFnaW5nKHZjcHUpKSB7CisJCXZtY3Nfd3JpdGVsKEdVRVNUX0NSMywgdmNwdS0+YXJjaC5jcjMpOworCQllcHRfbG9hZF9wZHB0cnModmNwdSk7CisJfQogCS8qIFJlY29yZCB0aGUgZ3Vlc3QncyBuZXQgdmNwdSB0aW1lIGZvciBlbmZvcmNlZCBOTUkgaW5qZWN0aW9ucy4gKi8KIAlpZiAodW5saWtlbHkoIWNwdV9oYXNfdmlydHVhbF9ubWlzKCkgJiYgdm14LT5zb2Z0X3ZubWlfYmxvY2tlZCkpCiAJCXZteC0+ZW50cnlfdGltZSA9IGt0aW1lX2dldCgpOwpAQCAtMzQ0OSwxMiArMzYyMywyMSBAQAogCWlmICh0ZXN0X2JpdChWQ1BVX1JFR1NfUklQLCAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfZGlydHkpKQogCQl2bWNzX3dyaXRlbChHVUVTVF9SSVAsIHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUklQXSk7CiAKKwkvKiBXaGVuIHNpbmdsZS1zdGVwcGluZyBvdmVyIFNUSSBhbmQgTU9WIFNTLCB3ZSBtdXN0IGNsZWFyIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0aWJpbGl0eSBiaXRzIGluIHRoZSBndWVzdCBzdGF0ZS4gT3RoZXJ3aXNlCisJICogdm1lbnRyeSBmYWlscyBhcyBpdCB0aGVuIGV4cGVjdHMgYml0IDE0IChCUykgaW4gcGVuZGluZyBkZWJ1ZworCSAqIGV4Y2VwdGlvbnMgYmVpbmcgc2V0LCBidXQgdGhhdCdzIG5vdCBjb3JyZWN0IGZvciB0aGUgZ3Vlc3QgZGVidWdnaW5nCisJICogY2FzZS4gKi8KKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCkKKwkJdm14X3NldF9pbnRlcnJ1cHRfc2hhZG93KHZjcHUsIDApOworCiAJLyoKIAkgKiBMb2FkaW5nIGd1ZXN0IGZwdSBtYXkgaGF2ZSBjbGVhcmVkIGhvc3QgY3IwLnRzCiAJICovCiAJdm1jc193cml0ZWwoSE9TVF9DUjAsIHJlYWRfY3IwKCkpOwogCi0Jc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZHI2LCA2KTsKKwlpZiAodmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncykKKwkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZHI2LCA2KTsKIAogCWFzbSgKIAkJLyogU3RvcmUgaG9zdCByZWdpc3RlcnMgKi8KQEAgLTM0NjUsMTEgKzM2NDgsMTYgQEAKIAkJIm1vdiAlJSJSInNwLCAlY1tob3N0X3JzcF0oJTApIFxuXHQiCiAJCV9fZXgoQVNNX1ZNWF9WTVdSSVRFX1JTUF9SRFgpICJcblx0IgogCQkiMTogXG5cdCIKKwkJLyogUmVsb2FkIGNyMiBpZiBjaGFuZ2VkICovCisJCSJtb3YgJWNbY3IyXSglMCksICUlIlIiYXggXG5cdCIKKwkJIm1vdiAlJWNyMiwgJSUiUiJkeCBcblx0IgorCQkiY21wICUlIlIiYXgsICUlIlIiZHggXG5cdCIKKwkJImplIDJmIFxuXHQiCisJCSJtb3YgJSUiUiJheCwgJSVjcjIgXG5cdCIKKwkJIjI6IFxuXHQiCiAJCS8qIENoZWNrIGlmIHZtbGF1bmNoIG9mIHZtcmVzdW1lIGlzIG5lZWRlZCAqLwogCQkiY21wbCAkMCwgJWNbbGF1bmNoZWRdKCUwKSBcblx0IgogCQkvKiBMb2FkIGd1ZXN0IHJlZ2lzdGVycy4gIERvbid0IGNsb2JiZXIgZmxhZ3MuICovCi0JCSJtb3YgJWNbY3IyXSglMCksICUlIlIiYXggXG5cdCIKLQkJIm1vdiAlJSJSImF4LCAlJWNyMiBcblx0IgogCQkibW92ICVjW3JheF0oJTApLCAlJSJSImF4IFxuXHQiCiAJCSJtb3YgJWNbcmJ4XSglMCksICUlIlIiYnggXG5cdCIKIAkJIm1vdiAlY1tyZHhdKCUwKSwgJSUiUiJkeCBcblx0IgpAQCAtMzU0NywxMCArMzczNSwxMiBAQAogI2VuZGlmCiAJICAgICAgKTsKIAotCXZjcHUtPmFyY2gucmVnc19hdmFpbCA9IH4oKDEgPDwgVkNQVV9SRUdTX1JJUCkgfCAoMSA8PCBWQ1BVX1JFR1NfUlNQKSk7CisJdmNwdS0+YXJjaC5yZWdzX2F2YWlsID0gfigoMSA8PCBWQ1BVX1JFR1NfUklQKSB8ICgxIDw8IFZDUFVfUkVHU19SU1ApCisJCQkJICB8ICgxIDw8IFZDUFVfRVhSRUdfUERQVFIpKTsKIAl2Y3B1LT5hcmNoLnJlZ3NfZGlydHkgPSAwOwogCi0JZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZHI2LCA2KTsKKwlpZiAodmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncykKKwkJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZHI2LCA2KTsKIAogCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvID0gdm1jc19yZWFkMzIoSURUX1ZFQ1RPUklOR19JTkZPX0ZJRUxEKTsKIAlpZiAodm14LT5ybW9kZS5pcnEucGVuZGluZykKQEAgLTM2MzMsOSArMzgyMywxMyBAQAogCQlpZiAoYWxsb2NfYXBpY19hY2Nlc3NfcGFnZShrdm0pICE9IDApCiAJCQlnb3RvIGZyZWVfdm1jczsKIAotCWlmIChlbmFibGVfZXB0KQorCWlmIChlbmFibGVfZXB0KSB7CisJCWlmICgha3ZtLT5hcmNoLmVwdF9pZGVudGl0eV9tYXBfYWRkcikKKwkJCWt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfbWFwX2FkZHIgPQorCQkJCVZNWF9FUFRfSURFTlRJVFlfUEFHRVRBQkxFX0FERFI7CiAJCWlmIChhbGxvY19pZGVudGl0eV9wYWdldGFibGUoa3ZtKSAhPSAwKQogCQkJZ290byBmcmVlX3ZtY3M7CisJfQogCiAJcmV0dXJuICZ2bXgtPnZjcHU7CiAKQEAgLTM2OTksNiArMzg5MywzNCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHJhY2VfcHJpbnRfZmxhZ3Mgdm14X2V4aXRfcmVhc29uc19zdHJbXSA9IHsKKwl7IEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUksICAgICAgICAgICAiZXhjZXB0aW9uIiB9LAorCXsgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBULCAgICAgICJleHRfaXJxIiB9LAorCXsgRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxULCAgICAgICAgICAgICJ0cmlwbGVfZmF1bHQiIH0sCisJeyBFWElUX1JFQVNPTl9OTUlfV0lORE9XLCAgICAgICAgICAgICAgIm5taV93aW5kb3ciIH0sCisJeyBFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiwgICAgICAgICAgImlvX2luc3RydWN0aW9uIiB9LAorCXsgRVhJVF9SRUFTT05fQ1JfQUNDRVNTLCAgICAgICAgICAgICAgICJjcl9hY2Nlc3MiIH0sCisJeyBFWElUX1JFQVNPTl9EUl9BQ0NFU1MsICAgICAgICAgICAgICAgImRyX2FjY2VzcyIgfSwKKwl7IEVYSVRfUkVBU09OX0NQVUlELCAgICAgICAgICAgICAgICAgICAiY3B1aWQiIH0sCisJeyBFWElUX1JFQVNPTl9NU1JfUkVBRCwgICAgICAgICAgICAgICAgInJkbXNyIiB9LAorCXsgRVhJVF9SRUFTT05fTVNSX1dSSVRFLCAgICAgICAgICAgICAgICJ3cm1zciIgfSwKKwl7IEVYSVRfUkVBU09OX1BFTkRJTkdfSU5URVJSVVBULCAgICAgICAiaW50ZXJydXB0X3dpbmRvdyIgfSwKKwl7IEVYSVRfUkVBU09OX0hMVCwgICAgICAgICAgICAgICAgICAgICAiaGFsdCIgfSwKKwl7IEVYSVRfUkVBU09OX0lOVkxQRywgICAgICAgICAgICAgICAgICAiaW52bHBnIiB9LAorCXsgRVhJVF9SRUFTT05fVk1DQUxMLCAgICAgICAgICAgICAgICAgICJoeXBlcmNhbGwiIH0sCisJeyBFWElUX1JFQVNPTl9UUFJfQkVMT1dfVEhSRVNIT0xELCAgICAgInRwcl9iZWxvd190aHJlcyIgfSwKKwl7IEVYSVRfUkVBU09OX0FQSUNfQUNDRVNTLCAgICAgICAgICAgICAiYXBpY19hY2Nlc3MiIH0sCisJeyBFWElUX1JFQVNPTl9XQklOVkQsICAgICAgICAgICAgICAgICAgIndiaW52ZCIgfSwKKwl7IEVYSVRfUkVBU09OX1RBU0tfU1dJVENILCAgICAgICAgICAgICAidGFza19zd2l0Y2giIH0sCisJeyBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OLCAgICAgICAgICAgImVwdF92aW9sYXRpb24iIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCitzdGF0aWMgYm9vbCB2bXhfZ2JfcGFnZV9lbmFibGUodm9pZCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdm14X3g4Nl9vcHMgPSB7CiAJLmNwdV9oYXNfa3ZtX3N1cHBvcnQgPSBjcHVfaGFzX2t2bV9zdXBwb3J0LAogCS5kaXNhYmxlZF9ieV9iaW9zID0gdm14X2Rpc2FibGVkX2J5X2Jpb3MsCkBAIC0zNzU4LDYgKzM5ODAsOSBAQAogCS5zZXRfdHNzX2FkZHIgPSB2bXhfc2V0X3Rzc19hZGRyLAogCS5nZXRfdGRwX2xldmVsID0gZ2V0X2VwdF9sZXZlbCwKIAkuZ2V0X210X21hc2sgPSB2bXhfZ2V0X210X21hc2ssCisKKwkuZXhpdF9yZWFzb25zX3N0ciA9IHZteF9leGl0X3JlYXNvbnNfc3RyLAorCS5nYl9wYWdlX2VuYWJsZSA9IHZteF9nYl9wYWdlX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHZteF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggM2Q0NTI5MC4uYmU0NTFlZTQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmMKKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jCkBAIC0zNywxMSArMzcsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rdm0uaD4KKyN1bmRlZiBUUkFDRV9JTkNMVURFX0ZJTEUKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgInRyYWNlLmgiCiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL21jZS5oPgogCiAjZGVmaW5lIE1BWF9JT19NU1JTIDI1NgogI2RlZmluZSBDUjBfUkVTRVJWRURfQklUUwkJCQkJCVwKQEAgLTU1LDYgKzYwLDEwIEBACiAJCQkgIHwgWDg2X0NSNF9PU1hNTUVYQ1BUIHwgWDg2X0NSNF9WTVhFKSkKIAogI2RlZmluZSBDUjhfUkVTRVJWRURfQklUUyAofih1bnNpZ25lZCBsb25nKVg4Nl9DUjhfVFBSKQorCisjZGVmaW5lIEtWTV9NQVhfTUNFX0JBTktTIDMyCisjZGVmaW5lIEtWTV9NQ0VfQ0FQX1NVUFBPUlRFRCBNQ0dfQ1RMX1AKKwogLyogRUZFUiBkZWZhdWx0czoKICAqIC0gZW5hYmxlIHN5c2NhbGwgcGVyIGRlZmF1bHQgYmVjYXVzZSBpdHMgZW11bGF0ZWQgYnkgS1ZNCiAgKiAtIGVuYWJsZSBMTUUgYW5kIExNQSBwZXIgZGVmYXVsdCBvbiA2NCBiaXQgS1ZNCkBAIC02OCwxNCArNzcsMTYgQEAKICNkZWZpbmUgVk1fU1RBVCh4KSBvZmZzZXRvZihzdHJ1Y3Qga3ZtLCBzdGF0LngpLCBLVk1fU1RBVF9WTQogI2RlZmluZSBWQ1BVX1NUQVQoeCkgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBzdGF0LngpLCBLVk1fU1RBVF9WQ1BVCiAKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jcjhfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfZ2V0X3N1cHBvcnRlZF9jcHVpZChzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsCiAJCQkJICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcyk7Ci1zdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqa3ZtX2ZpbmRfY3B1aWRfZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCQkgICAgICB1MzIgZnVuY3Rpb24sIHUzMiBpbmRleCk7CiAKIHN0cnVjdCBrdm1feDg2X29wcyAqa3ZtX3g4Nl9vcHM7CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1feDg2X29wcyk7CiAKK2ludCBpZ25vcmVfbXNycyA9IDA7Cittb2R1bGVfcGFyYW1fbmFtZWQoaWdub3JlX21zcnMsIGlnbm9yZV9tc3JzLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CisKIHN0cnVjdCBrdm1fc3RhdHNfZGVidWdmc19pdGVtIGRlYnVnZnNfZW50cmllc1tdID0gewogCXsgInBmX2ZpeGVkIiwgVkNQVV9TVEFUKHBmX2ZpeGVkKSB9LAogCXsgInBmX2d1ZXN0IiwgVkNQVV9TVEFUKHBmX2d1ZXN0KSB9LApAQCAtMTIyLDE4ICsxMzMsMTYgQEAKIAlpZiAoc2VsZWN0b3IgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlhc20oInNnZHQgJTAiIDogIj1tIihnZHQpKTsKKwlrdm1fZ2V0X2dkdCgmZ2R0KTsKIAl0YWJsZV9iYXNlID0gZ2R0LmJhc2U7CiAKIAlpZiAoc2VsZWN0b3IgJiA0KSB7ICAgICAgICAgICAvKiBmcm9tIGxkdCAqLwotCQl1MTYgbGR0X3NlbGVjdG9yOworCQl1MTYgbGR0X3NlbGVjdG9yID0ga3ZtX3JlYWRfbGR0KCk7CiAKLQkJYXNtKCJzbGR0ICUwIiA6ICI9ZyIobGR0X3NlbGVjdG9yKSk7CiAJCXRhYmxlX2Jhc2UgPSBzZWdtZW50X2Jhc2UobGR0X3NlbGVjdG9yKTsKIAl9CiAJZCA9IChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKikodGFibGVfYmFzZSArIChzZWxlY3RvciAmIH43KSk7Ci0JdiA9IGQtPmJhc2UwIHwgKCh1bnNpZ25lZCBsb25nKWQtPmJhc2UxIDw8IDE2KSB8Ci0JCSgodW5zaWduZWQgbG9uZylkLT5iYXNlMiA8PCAyNCk7CisJdiA9IGdldF9kZXNjX2Jhc2UoZCk7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWlmIChkLT5zID09IDAgJiYgKGQtPnR5cGUgPT0gMiB8fCBkLT50eXBlID09IDkgfHwgZC0+dHlwZSA9PSAxMSkpCiAJCXYgfD0gKCh1bnNpZ25lZCBsb25nKSgoc3RydWN0IGxkdHRzc19kZXNjNjQgKilkKS0+YmFzZTMpIDw8IDMyOwpAQCAtMTc2LDE2ICsxODUsMjIgQEAKIAkrK3ZjcHUtPnN0YXQucGZfZ3Vlc3Q7CiAKIAlpZiAodmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZykgewotCQlpZiAodmNwdS0+YXJjaC5leGNlcHRpb24ubnIgPT0gUEZfVkVDVE9SKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAia3ZtOiBpbmplY3RfcGFnZV9mYXVsdDoiCi0JCQkJCSIgZG91YmxlIGZhdWx0IDB4JWx4XG4iLCBhZGRyKTsKLQkJCXZjcHUtPmFyY2guZXhjZXB0aW9uLm5yID0gREZfVkVDVE9SOwotCQkJdmNwdS0+YXJjaC5leGNlcHRpb24uZXJyb3JfY29kZSA9IDA7Ci0JCX0gZWxzZSBpZiAodmNwdS0+YXJjaC5leGNlcHRpb24ubnIgPT0gREZfVkVDVE9SKSB7CisJCXN3aXRjaCh2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5ucikgeworCQljYXNlIERGX1ZFQ1RPUjoKIAkJCS8qIHRyaXBsZSBmYXVsdCAtPiBzaHV0ZG93biAqLwogCQkJc2V0X2JpdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgJnZjcHUtPnJlcXVlc3RzKTsKKwkJCXJldHVybjsKKwkJY2FzZSBQRl9WRUNUT1I6CisJCQl2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5uciA9IERGX1ZFQ1RPUjsKKwkJCXZjcHUtPmFyY2guZXhjZXB0aW9uLmVycm9yX2NvZGUgPSAwOworCQkJcmV0dXJuOworCQlkZWZhdWx0OgorCQkJLyogcmVwbGFjZSBwcmV2aW91cyBleGNlcHRpb24gd2l0aCBhIG5ldyBvbmUgaW4gYSBob3BlCisJCQkgICB0aGF0IGluc3RydWN0aW9uIHJlLWV4ZWN1dGlvbiB3aWxsIHJlZ2VuZXJhdGUgbG9zdAorCQkJICAgZXhjZXB0aW9uICovCisJCQl2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nID0gZmFsc2U7CisJCQlicmVhazsKIAkJfQotCQlyZXR1cm47CiAJfQogCXZjcHUtPmFyY2guY3IyID0gYWRkcjsKIAlrdm1fcXVldWVfZXhjZXB0aW9uX2UodmNwdSwgUEZfVkVDVE9SLCBlcnJvcl9jb2RlKTsKQEAgLTIwNywxMiArMjIyLDE4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcXVldWVfZXhjZXB0aW9uX2UpOwogCi1zdGF0aWMgdm9pZCBfX3F1ZXVlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCisvKgorICogQ2hlY2tzIGlmIGNwbCA8PSByZXF1aXJlZF9jcGw7IGlmIHRydWUsIHJldHVybiB0cnVlLiAgT3RoZXJ3aXNlIHF1ZXVlCisgKiBhICNHUCBhbmQgcmV0dXJuIGZhbHNlLgorICovCitib29sIGt2bV9yZXF1aXJlX2NwbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCByZXF1aXJlZF9jcGwpCiB7Ci0Ja3ZtX3g4Nl9vcHMtPnF1ZXVlX2V4Y2VwdGlvbih2Y3B1LCB2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5uciwKLQkJCQkgICAgIHZjcHUtPmFyY2guZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlLAotCQkJCSAgICAgdmNwdS0+YXJjaC5leGNlcHRpb24uZXJyb3JfY29kZSk7CisJaWYgKGt2bV94ODZfb3BzLT5nZXRfY3BsKHZjcHUpIDw9IHJlcXVpcmVkX2NwbCkKKwkJcmV0dXJuIHRydWU7CisJa3ZtX3F1ZXVlX2V4Y2VwdGlvbl9lKHZjcHUsIEdQX1ZFQ1RPUiwgMCk7CisJcmV0dXJuIGZhbHNlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3JlcXVpcmVfY3BsKTsKIAogLyoKICAqIExvYWQgdGhlIHBhZSBwZHB0cnMuICBSZXR1cm4gdHJ1ZSBpcyB0aGV5IGFyZSBhbGwgdmFsaWQuCkBAIC0yMzIsNyArMjUzLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkcHRlKTsgKytpKSB7Ci0JCWlmIChpc19wcmVzZW50X3B0ZShwZHB0ZVtpXSkgJiYKKwkJaWYgKGlzX3ByZXNlbnRfZ3B0ZShwZHB0ZVtpXSkgJiYKIAkJICAgIChwZHB0ZVtpXSAmIHZjcHUtPmFyY2gubW11LnJzdmRfYml0c19tYXNrWzBdWzJdKSkgewogCQkJcmV0ID0gMDsKIAkJCWdvdG8gb3V0OwpAQCAtMjQxLDYgKzI2MiwxMCBAQAogCXJldCA9IDE7CiAKIAltZW1jcHkodmNwdS0+YXJjaC5wZHB0cnMsIHBkcHRlLCBzaXplb2YodmNwdS0+YXJjaC5wZHB0cnMpKTsKKwlfX3NldF9iaXQoVkNQVV9FWFJFR19QRFBUUiwKKwkJICAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfYXZhaWwpOworCV9fc2V0X2JpdChWQ1BVX0VYUkVHX1BEUFRSLAorCQkgICh1bnNpZ25lZCBsb25nICopJnZjcHUtPmFyY2gucmVnc19kaXJ0eSk7CiBvdXQ6CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjU2LDYgKzI4MSwxMCBAQAogCWlmIChpc19sb25nX21vZGUodmNwdSkgfHwgIWlzX3BhZSh2Y3B1KSkKIAkJcmV0dXJuIGZhbHNlOwogCisJaWYgKCF0ZXN0X2JpdChWQ1BVX0VYUkVHX1BEUFRSLAorCQkgICAgICAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfYXZhaWwpKQorCQlyZXR1cm4gdHJ1ZTsKKwogCXIgPSBrdm1fcmVhZF9ndWVzdCh2Y3B1LT5rdm0sIHZjcHUtPmFyY2guY3IzICYgfjMxdSwgcGRwdGUsIHNpemVvZihwZHB0ZSkpOwogCWlmIChyIDwgMCkKIAkJZ290byBvdXQ7CkBAIC0zMjgsOSArMzU3LDYgQEAKIHZvaWQga3ZtX2xtc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIG1zdykKIHsKIAlrdm1fc2V0X2NyMCh2Y3B1LCAodmNwdS0+YXJjaC5jcjAgJiB+MHgwZnVsKSB8IChtc3cgJiAweDBmKSk7Ci0JS1ZNVFJBQ0VfMUQoTE1TVywgdmNwdSwKLQkJICAgICh1MzIpKCh2Y3B1LT5hcmNoLmNyMCAmIH4weDBmdWwpIHwgKG1zdyAmIDB4MGYpKSwKLQkJICAgIGhhbmRsZXIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2xtc3cpOwogCkBAIC00NjYsNyArNDkyLDcgQEAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJTVNSX0NTVEFSLCBNU1JfS0VSTkVMX0dTX0JBU0UsIE1TUl9TWVNDQUxMX01BU0ssIE1TUl9MU1RBUiwKICNlbmRpZgotCU1TUl9JQTMyX1RJTUVfU1RBTVBfQ09VTlRFUiwgTVNSX0tWTV9TWVNURU1fVElNRSwgTVNSX0tWTV9XQUxMX0NMT0NLLAorCU1TUl9JQTMyX1RTQywgTVNSX0tWTV9TWVNURU1fVElNRSwgTVNSX0tWTV9XQUxMX0NMT0NLLAogCU1TUl9JQTMyX1BFUkZfU1RBVFVTLCBNU1JfSUEzMl9DUl9QQVQsIE1TUl9WTV9IU0FWRV9QQQogfTsKIApAQCAtNjQ0LDggKzY3MCw3IEBACiAKIAkvKiBLZWVwIGlycSBkaXNhYmxlZCB0byBwcmV2ZW50IGNoYW5nZXMgdG8gdGhlIGNsb2NrICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWt2bV9nZXRfbXNyKHYsIE1TUl9JQTMyX1RJTUVfU1RBTVBfQ09VTlRFUiwKLQkJCSAgJnZjcHUtPmh2X2Nsb2NrLnRzY190aW1lc3RhbXApOworCWt2bV9nZXRfbXNyKHYsIE1TUl9JQTMyX1RTQywgJnZjcHUtPmh2X2Nsb2NrLnRzY190aW1lc3RhbXApOwogCWt0aW1lX2dldF90cygmdHMpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIApAQCAtNzc4LDIzICs4MDMsNjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZXRfbXNyX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhKQoreworCXU2NCBtY2dfY2FwID0gdmNwdS0+YXJjaC5tY2dfY2FwOworCXVuc2lnbmVkIGJhbmtfbnVtID0gbWNnX2NhcCAmIDB4ZmY7CisKKwlzd2l0Y2ggKG1zcikgeworCWNhc2UgTVNSX0lBMzJfTUNHX1NUQVRVUzoKKwkJdmNwdS0+YXJjaC5tY2dfc3RhdHVzID0gZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBNU1JfSUEzMl9NQ0dfQ1RMOgorCQlpZiAoIShtY2dfY2FwICYgTUNHX0NUTF9QKSkKKwkJCXJldHVybiAxOworCQlpZiAoZGF0YSAhPSAwICYmIGRhdGEgIT0gfih1NjQpMCkKKwkJCXJldHVybiAtMTsKKwkJdmNwdS0+YXJjaC5tY2dfY3RsID0gZGF0YTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKG1zciA+PSBNU1JfSUEzMl9NQzBfQ1RMICYmCisJCSAgICBtc3IgPCBNU1JfSUEzMl9NQzBfQ1RMICsgNCAqIGJhbmtfbnVtKSB7CisJCQl1MzIgb2Zmc2V0ID0gbXNyIC0gTVNSX0lBMzJfTUMwX0NUTDsKKwkJCS8qIG9ubHkgMCBvciBhbGwgMXMgY2FuIGJlIHdyaXR0ZW4gdG8gSUEzMl9NQ2lfQ1RMICovCisJCQlpZiAoKG9mZnNldCAmIDB4MykgPT0gMCAmJgorCQkJICAgIGRhdGEgIT0gMCAmJiBkYXRhICE9IH4odTY0KTApCisJCQkJcmV0dXJuIC0xOworCQkJdmNwdS0+YXJjaC5tY2VfYmFua3Nbb2Zmc2V0XSA9IGRhdGE7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIGludCBrdm1fc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSkKIHsKIAlzd2l0Y2ggKG1zcikgewogCWNhc2UgTVNSX0VGRVI6CiAJCXNldF9lZmVyKHZjcHUsIGRhdGEpOwogCQlicmVhazsKLQljYXNlIE1TUl9JQTMyX01DMF9TVEFUVVM6Ci0JCXByX3VuaW1wbCh2Y3B1LCAiJXM6IE1TUl9JQTMyX01DMF9TVEFUVVMgMHglbGx4LCBub3BcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgZGF0YSk7CisJY2FzZSBNU1JfSzdfSFdDUjoKKwkJZGF0YSAmPSB+KHU2NCkweDQwOwkvKiBpZ25vcmUgZmx1c2ggZmlsdGVyIGRpc2FibGUgKi8KKwkJaWYgKGRhdGEgIT0gMCkgeworCQkJcHJfdW5pbXBsKHZjcHUsICJ1bmltcGxlbWVudGVkIEhXQ1Igd3Jtc3I6IDB4JWxseFxuIiwKKwkJCQlkYXRhKTsKKwkJCXJldHVybiAxOworCQl9CiAJCWJyZWFrOwotCWNhc2UgTVNSX0lBMzJfTUNHX1NUQVRVUzoKLQkJcHJfdW5pbXBsKHZjcHUsICIlczogTVNSX0lBMzJfTUNHX1NUQVRVUyAweCVsbHgsIG5vcFxuIiwKLQkJCV9fZnVuY19fLCBkYXRhKTsKKwljYXNlIE1TUl9GQU0xMEhfTU1JT19DT05GX0JBU0U6CisJCWlmIChkYXRhICE9IDApIHsKKwkJCXByX3VuaW1wbCh2Y3B1LCAidW5pbXBsZW1lbnRlZCBNTUlPX0NPTkZfQkFTRSB3cm1zcjogIgorCQkJCSIweCVsbHhcbiIsIGRhdGEpOworCQkJcmV0dXJuIDE7CisJCX0KIAkJYnJlYWs7Ci0JY2FzZSBNU1JfSUEzMl9NQ0dfQ1RMOgotCQlwcl91bmltcGwodmNwdSwgIiVzOiBNU1JfSUEzMl9NQ0dfQ1RMIDB4JWxseCwgbm9wXG4iLAotCQkJX19mdW5jX18sIGRhdGEpOworCWNhc2UgTVNSX0FNRDY0X05CX0NGRzoKIAkJYnJlYWs7CiAJY2FzZSBNU1JfSUEzMl9ERUJVR0NUTE1TUjoKIAkJaWYgKCFkYXRhKSB7CkBAIC04MTEsMTIgKzg3MywxNSBAQAogCWNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgogCWNhc2UgTVNSX0lBMzJfVUNPREVfV1JJVEU6CiAJY2FzZSBNU1JfVk1fSFNBVkVfUEE6CisJY2FzZSBNU1JfQU1ENjRfUEFUQ0hfTE9BREVSOgogCQlicmVhazsKIAljYXNlIDB4MjAwIC4uLiAweDJmZjoKIAkJcmV0dXJuIHNldF9tc3JfbXRycih2Y3B1LCBtc3IsIGRhdGEpOwogCWNhc2UgTVNSX0lBMzJfQVBJQ0JBU0U6CiAJCWt2bV9zZXRfYXBpY19iYXNlKHZjcHUsIGRhdGEpOwogCQlicmVhazsKKwljYXNlIEFQSUNfQkFTRV9NU1IgLi4uIEFQSUNfQkFTRV9NU1IgKyAweDNmZjoKKwkJcmV0dXJuIGt2bV94MmFwaWNfbXNyX3dyaXRlKHZjcHUsIG1zciwgZGF0YSk7CiAJY2FzZSBNU1JfSUEzMl9NSVNDX0VOQUJMRToKIAkJdmNwdS0+YXJjaC5pYTMyX21pc2NfZW5hYmxlX21zciA9IGRhdGE7CiAJCWJyZWFrOwpAQCAtODUwLDkgKzkxNSw1MCBAQAogCQlrdm1fcmVxdWVzdF9ndWVzdF90aW1lX3VwZGF0ZSh2Y3B1KTsKIAkJYnJlYWs7CiAJfQorCWNhc2UgTVNSX0lBMzJfTUNHX0NUTDoKKwljYXNlIE1TUl9JQTMyX01DR19TVEFUVVM6CisJY2FzZSBNU1JfSUEzMl9NQzBfQ1RMIC4uLiBNU1JfSUEzMl9NQzBfQ1RMICsgNCAqIEtWTV9NQVhfTUNFX0JBTktTIC0gMToKKwkJcmV0dXJuIHNldF9tc3JfbWNlKHZjcHUsIG1zciwgZGF0YSk7CisKKwkvKiBQZXJmb3JtYW5jZSBjb3VudGVycyBhcmUgbm90IHByb3RlY3RlZCBieSBhIENQVUlEIGJpdCwKKwkgKiBzbyB3ZSBzaG91bGQgY2hlY2sgYWxsIG9mIHRoZW0gaW4gdGhlIGdlbmVyaWMgcGF0aCBmb3IgdGhlIHNha2Ugb2YKKwkgKiBjcm9zcyB2ZW5kb3IgbWlncmF0aW9uLgorCSAqIFdyaXRpbmcgYSB6ZXJvIGludG8gdGhlIGV2ZW50IHNlbGVjdCBNU1JzIGRpc2FibGVzIHRoZW0sCisJICogd2hpY2ggd2UgcGVyZmVjdGx5IGVtdWxhdGUgOy0pLiBBbnkgb3RoZXIgdmFsdWUgc2hvdWxkIGJlIGF0IGxlYXN0CisJICogcmVwb3J0ZWQsIHNvbWUgZ3Vlc3RzIGRlcGVuZCBvbiB0aGVtLgorCSAqLworCWNhc2UgTVNSX1A2X0VWTlRTRUwwOgorCWNhc2UgTVNSX1A2X0VWTlRTRUwxOgorCWNhc2UgTVNSX0s3X0VWTlRTRUwwOgorCWNhc2UgTVNSX0s3X0VWTlRTRUwxOgorCWNhc2UgTVNSX0s3X0VWTlRTRUwyOgorCWNhc2UgTVNSX0s3X0VWTlRTRUwzOgorCQlpZiAoZGF0YSAhPSAwKQorCQkJcHJfdW5pbXBsKHZjcHUsICJ1bmltcGxlbWVudGVkIHBlcmZjdHIgd3Jtc3I6ICIKKwkJCQkiMHgleCBkYXRhIDB4JWxseFxuIiwgbXNyLCBkYXRhKTsKKwkJYnJlYWs7CisJLyogYXQgbGVhc3QgUkhFTCA0IHVuY29uZGl0aW9uYWxseSB3cml0ZXMgdG8gdGhlIHBlcmZjdHIgcmVnaXN0ZXJzLAorCSAqIHNvIHdlIGlnbm9yZSB3cml0ZXMgdG8gbWFrZSBpdCBoYXBweS4KKwkgKi8KKwljYXNlIE1TUl9QNl9QRVJGQ1RSMDoKKwljYXNlIE1TUl9QNl9QRVJGQ1RSMToKKwljYXNlIE1TUl9LN19QRVJGQ1RSMDoKKwljYXNlIE1TUl9LN19QRVJGQ1RSMToKKwljYXNlIE1TUl9LN19QRVJGQ1RSMjoKKwljYXNlIE1TUl9LN19QRVJGQ1RSMzoKKwkJcHJfdW5pbXBsKHZjcHUsICJ1bmltcGxlbWVudGVkIHBlcmZjdHIgd3Jtc3I6ICIKKwkJCSIweCV4IGRhdGEgMHglbGx4XG4iLCBtc3IsIGRhdGEpOworCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcl91bmltcGwodmNwdSwgInVuaGFuZGxlZCB3cm1zcjogMHgleCBkYXRhICVsbHhcbiIsIG1zciwgZGF0YSk7Ci0JCXJldHVybiAxOworCQlpZiAoIWlnbm9yZV9tc3JzKSB7CisJCQlwcl91bmltcGwodmNwdSwgInVuaGFuZGxlZCB3cm1zcjogMHgleCBkYXRhICVsbHhcbiIsCisJCQkJbXNyLCBkYXRhKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJcHJfdW5pbXBsKHZjcHUsICJpZ25vcmVkIHdybXNyOiAweCV4IGRhdGEgJWxseFxuIiwKKwkJCQltc3IsIGRhdGEpOworCQkJYnJlYWs7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC05MDUsMjYgKzEwMTEsNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBnZXRfbXNyX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCAqcGRhdGEpCit7CisJdTY0IGRhdGE7CisJdTY0IG1jZ19jYXAgPSB2Y3B1LT5hcmNoLm1jZ19jYXA7CisJdW5zaWduZWQgYmFua19udW0gPSBtY2dfY2FwICYgMHhmZjsKKworCXN3aXRjaCAobXNyKSB7CisJY2FzZSBNU1JfSUEzMl9QNV9NQ19BRERSOgorCWNhc2UgTVNSX0lBMzJfUDVfTUNfVFlQRToKKwkJZGF0YSA9IDA7CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfTUNHX0NBUDoKKwkJZGF0YSA9IHZjcHUtPmFyY2gubWNnX2NhcDsKKwkJYnJlYWs7CisJY2FzZSBNU1JfSUEzMl9NQ0dfQ1RMOgorCQlpZiAoIShtY2dfY2FwICYgTUNHX0NUTF9QKSkKKwkJCXJldHVybiAxOworCQlkYXRhID0gdmNwdS0+YXJjaC5tY2dfY3RsOworCQlicmVhazsKKwljYXNlIE1TUl9JQTMyX01DR19TVEFUVVM6CisJCWRhdGEgPSB2Y3B1LT5hcmNoLm1jZ19zdGF0dXM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChtc3IgPj0gTVNSX0lBMzJfTUMwX0NUTCAmJgorCQkgICAgbXNyIDwgTVNSX0lBMzJfTUMwX0NUTCArIDQgKiBiYW5rX251bSkgeworCQkJdTMyIG9mZnNldCA9IG1zciAtIE1TUl9JQTMyX01DMF9DVEw7CisJCQlkYXRhID0gdmNwdS0+YXJjaC5tY2VfYmFua3Nbb2Zmc2V0XTsKKwkJCWJyZWFrOworCQl9CisJCXJldHVybiAxOworCX0KKwkqcGRhdGEgPSBkYXRhOworCXJldHVybiAwOworfQorCiBpbnQga3ZtX2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpwZGF0YSkKIHsKIAl1NjQgZGF0YTsKIAogCXN3aXRjaCAobXNyKSB7Ci0JY2FzZSAweGMwMDEwMDEwOiAvKiBTWVNDRkcgKi8KLQljYXNlIDB4YzAwMTAwMTU6IC8qIEhXQ1IgKi8KIAljYXNlIE1TUl9JQTMyX1BMQVRGT1JNX0lEOgotCWNhc2UgTVNSX0lBMzJfUDVfTUNfQUREUjoKLQljYXNlIE1TUl9JQTMyX1A1X01DX1RZUEU6Ci0JY2FzZSBNU1JfSUEzMl9NQzBfQ1RMOgotCWNhc2UgTVNSX0lBMzJfTUNHX1NUQVRVUzoKLQljYXNlIE1TUl9JQTMyX01DR19DQVA6Ci0JY2FzZSBNU1JfSUEzMl9NQ0dfQ1RMOgotCWNhc2UgTVNSX0lBMzJfTUMwX01JU0M6Ci0JY2FzZSBNU1JfSUEzMl9NQzBfTUlTQys0OgotCWNhc2UgTVNSX0lBMzJfTUMwX01JU0MrODoKLQljYXNlIE1TUl9JQTMyX01DMF9NSVNDKzEyOgotCWNhc2UgTVNSX0lBMzJfTUMwX01JU0MrMTY6Ci0JY2FzZSBNU1JfSUEzMl9NQzBfTUlTQysyMDoKIAljYXNlIE1TUl9JQTMyX1VDT0RFX1JFVjoKIAljYXNlIE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OOgogCWNhc2UgTVNSX0lBMzJfREVCVUdDVExNU1I6CkBAIC05MzIsMTAgKzEwNTksMTggQEAKIAljYXNlIE1TUl9JQTMyX0xBU1RCUkFOQ0hUT0lQOgogCWNhc2UgTVNSX0lBMzJfTEFTVElOVEZST01JUDoKIAljYXNlIE1TUl9JQTMyX0xBU1RJTlRUT0lQOgorCWNhc2UgTVNSX0s4X1NZU0NGRzoKKwljYXNlIE1TUl9LN19IV0NSOgogCWNhc2UgTVNSX1ZNX0hTQVZFX1BBOgorCWNhc2UgTVNSX1A2X1BFUkZDVFIwOgorCWNhc2UgTVNSX1A2X1BFUkZDVFIxOgogCWNhc2UgTVNSX1A2X0VWTlRTRUwwOgogCWNhc2UgTVNSX1A2X0VWTlRTRUwxOgogCWNhc2UgTVNSX0s3X0VWTlRTRUwwOgorCWNhc2UgTVNSX0s3X1BFUkZDVFIwOgorCWNhc2UgTVNSX0s4X0lOVF9QRU5ESU5HX01TRzoKKwljYXNlIE1TUl9BTUQ2NF9OQl9DRkc6CisJY2FzZSBNU1JfRkFNMTBIX01NSU9fQ09ORl9CQVNFOgogCQlkYXRhID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBNU1JfTVRSUmNhcDoKQEAgLTk0OSw2ICsxMDg0LDkgQEAKIAljYXNlIE1TUl9JQTMyX0FQSUNCQVNFOgogCQlkYXRhID0ga3ZtX2dldF9hcGljX2Jhc2UodmNwdSk7CiAJCWJyZWFrOworCWNhc2UgQVBJQ19CQVNFX01TUiAuLi4gQVBJQ19CQVNFX01TUiArIDB4M2ZmOgorCQlyZXR1cm4ga3ZtX3gyYXBpY19tc3JfcmVhZCh2Y3B1LCBtc3IsIHBkYXRhKTsKKwkJYnJlYWs7CiAJY2FzZSBNU1JfSUEzMl9NSVNDX0VOQUJMRToKIAkJZGF0YSA9IHZjcHUtPmFyY2guaWEzMl9taXNjX2VuYWJsZV9tc3I7CiAJCWJyZWFrOwpAQCAtOTY3LDkgKzExMDUsMjIgQEAKIAljYXNlIE1TUl9LVk1fU1lTVEVNX1RJTUU6CiAJCWRhdGEgPSB2Y3B1LT5hcmNoLnRpbWU7CiAJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfUDVfTUNfQUREUjoKKwljYXNlIE1TUl9JQTMyX1A1X01DX1RZUEU6CisJY2FzZSBNU1JfSUEzMl9NQ0dfQ0FQOgorCWNhc2UgTVNSX0lBMzJfTUNHX0NUTDoKKwljYXNlIE1TUl9JQTMyX01DR19TVEFUVVM6CisJY2FzZSBNU1JfSUEzMl9NQzBfQ1RMIC4uLiBNU1JfSUEzMl9NQzBfQ1RMICsgNCAqIEtWTV9NQVhfTUNFX0JBTktTIC0gMToKKwkJcmV0dXJuIGdldF9tc3JfbWNlKHZjcHUsIG1zciwgcGRhdGEpOwogCWRlZmF1bHQ6Ci0JCXByX3VuaW1wbCh2Y3B1LCAidW5oYW5kbGVkIHJkbXNyOiAweCV4XG4iLCBtc3IpOwotCQlyZXR1cm4gMTsKKwkJaWYgKCFpZ25vcmVfbXNycykgeworCQkJcHJfdW5pbXBsKHZjcHUsICJ1bmhhbmRsZWQgcmRtc3I6IDB4JXhcbiIsIG1zcik7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIHsKKwkJCXByX3VuaW1wbCh2Y3B1LCAiaWdub3JlZCByZG1zcjogMHgleFxuIiwgbXNyKTsKKwkJCWRhdGEgPSAwOworCQl9CisJCWJyZWFrOwogCX0KIAkqcGRhdGEgPSBkYXRhOwogCXJldHVybiAwOwpAQCAtMTA2OCw2ICsxMjE5LDExIEBACiAJY2FzZSBLVk1fQ0FQX1JFSU5KRUNUX0NPTlRST0w6CiAJY2FzZSBLVk1fQ0FQX0lSUV9JTkpFQ1RfU1RBVFVTOgogCWNhc2UgS1ZNX0NBUF9BU1NJR05fREVWX0lSUToKKwljYXNlIEtWTV9DQVBfSVJRRkQ6CisJY2FzZSBLVk1fQ0FQX0lPRVZFTlRGRDoKKwljYXNlIEtWTV9DQVBfUElUMjoKKwljYXNlIEtWTV9DQVBfUElUX1NUQVRFMjoKKwljYXNlIEtWTV9DQVBfU0VUX0lERU5USVRZX01BUF9BRERSOgogCQlyID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0FQX0NPQUxFU0NFRF9NTUlPOgpAQCAtMTA4OCw2ICsxMjQ0LDkgQEAKIAljYXNlIEtWTV9DQVBfSU9NTVU6CiAJCXIgPSBpb21tdV9mb3VuZCgpOwogCQlicmVhazsKKwljYXNlIEtWTV9DQVBfTUNFOgorCQlyID0gS1ZNX01BWF9NQ0VfQkFOS1M7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXIgPSAwOwogCQlicmVhazsKQEAgLTExNDcsNiArMTMwNiwxNiBAQAogCQlyID0gMDsKIAkJYnJlYWs7CiAJfQorCWNhc2UgS1ZNX1g4Nl9HRVRfTUNFX0NBUF9TVVBQT1JURUQ6IHsKKwkJdTY0IG1jZV9jYXA7CisKKwkJbWNlX2NhcCA9IEtWTV9NQ0VfQ0FQX1NVUFBPUlRFRDsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm1jZV9jYXAsIHNpemVvZiBtY2VfY2FwKSkKKwkJCWdvdG8gb3V0OworCQlyID0gMDsKKwkJYnJlYWs7CisJfQogCWRlZmF1bHQ6CiAJCXIgPSAtRUlOVkFMOwogCX0KQEAgLTEyMjcsNiArMTM5Niw3IEBACiAJdmNwdS0+YXJjaC5jcHVpZF9uZW50ID0gY3B1aWQtPm5lbnQ7CiAJY3B1aWRfZml4X254X2NhcCh2Y3B1KTsKIAlyID0gMDsKKwlrdm1fYXBpY19zZXRfdmVyc2lvbih2Y3B1KTsKIAogb3V0X2ZyZWU6CiAJdmZyZWUoY3B1aWRfZW50cmllcyk7CkBAIC0xMjQ4LDYgKzE0MTgsNyBAQAogCQkJICAgY3B1aWQtPm5lbnQgKiBzaXplb2Yoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIpKSkKIAkJZ290byBvdXQ7CiAJdmNwdS0+YXJjaC5jcHVpZF9uZW50ID0gY3B1aWQtPm5lbnQ7CisJa3ZtX2FwaWNfc2V0X3ZlcnNpb24odmNwdSk7CiAJcmV0dXJuIDA7CiAKIG91dDoKQEAgLTEyOTAsNiArMTQ2MSw3IEBACiAJCQkgdTMyIGluZGV4LCBpbnQgKm5lbnQsIGludCBtYXhuZW50KQogewogCXVuc2lnbmVkIGZfbnggPSBpc19lZmVyX254KCkgPyBGKE5YKSA6IDA7CisJdW5zaWduZWQgZl9nYnBhZ2VzID0ga3ZtX3g4Nl9vcHMtPmdiX3BhZ2VfZW5hYmxlKCkgPyBGKEdCUEFHRVMpIDogMDsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJdW5zaWduZWQgZl9sbSA9IEYoTE0pOwogI2Vsc2UKQEAgLTEzMTQsNyArMTQ4Niw3IEBACiAJCUYoTVRSUikgfCBGKFBHRSkgfCBGKE1DQSkgfCBGKENNT1YpIHwKIAkJRihQQVQpIHwgRihQU0UzNikgfCAwIC8qIFJlc2VydmVkICovIHwKIAkJZl9ueCB8IDAgLyogUmVzZXJ2ZWQgKi8gfCBGKE1NWEVYVCkgfCBGKE1NWCkgfAotCQlGKEZYU1IpIHwgRihGWFNSX09QVCkgfCAwIC8qIEdCUEFHRVMgKi8gfCAwIC8qIFJEVFNDUCAqLyB8CisJCUYoRlhTUikgfCBGKEZYU1JfT1BUKSB8IGZfZ2JwYWdlcyB8IDAgLyogUkRUU0NQICovIHwKIAkJMCAvKiBSZXNlcnZlZCAqLyB8IGZfbG0gfCBGKDNETk9XRVhUKSB8IEYoM0ROT1cpOwogCS8qIGNwdWlkIDEuZWN4ICovCiAJY29uc3QgdTMyIGt2bV9zdXBwb3J0ZWRfd29yZDRfeDg2X2ZlYXR1cmVzID0KQEAgLTEzMjMsNyArMTQ5NSw3IEBACiAJCTAgLyogVE0yICovIHwgRihTU1NFMykgfCAwIC8qIENOWFQtSUQgKi8gfCAwIC8qIFJlc2VydmVkICovIHwKIAkJMCAvKiBSZXNlcnZlZCAqLyB8IEYoQ1gxNikgfCAwIC8qIHhUUFIgVXBkYXRlLCBQRENNICovIHwKIAkJMCAvKiBSZXNlcnZlZCwgRENBICovIHwgRihYTU00XzEpIHwKLQkJRihYTU00XzIpIHwgMCAvKiB4MkFQSUMgKi8gfCBGKE1PVkJFKSB8IEYoUE9QQ05UKSB8CisJCUYoWE1NNF8yKSB8IEYoWDJBUElDKSB8IEYoTU9WQkUpIHwgRihQT1BDTlQpIHwKIAkJMCAvKiBSZXNlcnZlZCwgWFNBVkUsIE9TWFNBVkUgKi87CiAJLyogY3B1aWQgMHg4MDAwMDAwMS5lY3ggKi8KIAljb25zdCB1MzIga3ZtX3N1cHBvcnRlZF93b3JkNl94ODZfZmVhdHVyZXMgPQpAQCAtMTM0NCw2ICsxNTE2LDkgQEAKIAljYXNlIDE6CiAJCWVudHJ5LT5lZHggJj0ga3ZtX3N1cHBvcnRlZF93b3JkMF94ODZfZmVhdHVyZXM7CiAJCWVudHJ5LT5lY3ggJj0ga3ZtX3N1cHBvcnRlZF93b3JkNF94ODZfZmVhdHVyZXM7CisJCS8qIHdlIHN1cHBvcnQgeDJhcGljIGVtdWxhdGlvbiBldmVuIGlmIGhvc3QgZG9lcyBub3Qgc3VwcG9ydAorCQkgKiBpdCBzaW5jZSB3ZSBlbXVsYXRlIHgyYXBpYyBpbiBzb2Z0d2FyZSAqLworCQllbnRyeS0+ZWN4IHw9IEYoWDJBUElDKTsKIAkJYnJlYWs7CiAJLyogZnVuY3Rpb24gMiBlbnRyaWVzIGFyZSBTVEFURUZVTC4gVGhhdCBpcywgcmVwZWF0ZWQgY3B1aWQgY29tbWFuZHMKIAkgKiBtYXkgcmV0dXJuIGRpZmZlcmVudCB2YWx1ZXMuIFRoaXMgZm9yY2VzIHVzIHRvIGdldF9jcHUoKSBiZWZvcmUKQEAgLTE0MzUsNiArMTYxMCwxMCBAQAogCWZvciAoZnVuYyA9IDB4ODAwMDAwMDE7IGZ1bmMgPD0gbGltaXQgJiYgbmVudCA8IGNwdWlkLT5uZW50OyArK2Z1bmMpCiAJCWRvX2NwdWlkX2VudCgmY3B1aWRfZW50cmllc1tuZW50XSwgZnVuYywgMCwKIAkJCSAgICAgJm5lbnQsIGNwdWlkLT5uZW50KTsKKwlyID0gLUUyQklHOworCWlmIChuZW50ID49IGNwdWlkLT5uZW50KQorCQlnb3RvIG91dF9mcmVlOworCiAJciA9IC1FRkFVTFQ7CiAJaWYgKGNvcHlfdG9fdXNlcihlbnRyaWVzLCBjcHVpZF9lbnRyaWVzLAogCQkJIG5lbnQgKiBzaXplb2Yoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIpKSkKQEAgLTE0NjQsNiArMTY0Myw3IEBACiAJdmNwdV9sb2FkKHZjcHUpOwogCW1lbWNweSh2Y3B1LT5hcmNoLmFwaWMtPnJlZ3MsIHMtPnJlZ3MsIHNpemVvZiAqcyk7CiAJa3ZtX2FwaWNfcG9zdF9zdGF0ZV9yZXN0b3JlKHZjcHUpOworCXVwZGF0ZV9jcjhfaW50ZXJjZXB0KHZjcHUpOwogCXZjcHVfcHV0KHZjcHUpOwogCiAJcmV0dXJuIDA7CkBAIC0xNTAzLDYgKzE2ODMsODAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF94ODZfc2V0dXBfbWNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJdTY0IG1jZ19jYXApCit7CisJaW50IHI7CisJdW5zaWduZWQgYmFua19udW0gPSBtY2dfY2FwICYgMHhmZiwgYmFuazsKKworCXIgPSAtRUlOVkFMOworCWlmICghYmFua19udW0pCisJCWdvdG8gb3V0OworCWlmIChtY2dfY2FwICYgfihLVk1fTUNFX0NBUF9TVVBQT1JURUQgfCAweGZmIHwgMHhmZjAwMDApKQorCQlnb3RvIG91dDsKKwlyID0gMDsKKwl2Y3B1LT5hcmNoLm1jZ19jYXAgPSBtY2dfY2FwOworCS8qIEluaXQgSUEzMl9NQ0dfQ1RMIHRvIGFsbCAxcyAqLworCWlmIChtY2dfY2FwICYgTUNHX0NUTF9QKQorCQl2Y3B1LT5hcmNoLm1jZ19jdGwgPSB+KHU2NCkwOworCS8qIEluaXQgSUEzMl9NQ2lfQ1RMIHRvIGFsbCAxcyAqLworCWZvciAoYmFuayA9IDA7IGJhbmsgPCBiYW5rX251bTsgYmFuaysrKQorCQl2Y3B1LT5hcmNoLm1jZV9iYW5rc1tiYW5rKjRdID0gfih1NjQpMDsKK291dDoKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF94ODZfc2V0X21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICAgICAgc3RydWN0IGt2bV94ODZfbWNlICptY2UpCit7CisJdTY0IG1jZ19jYXAgPSB2Y3B1LT5hcmNoLm1jZ19jYXA7CisJdW5zaWduZWQgYmFua19udW0gPSBtY2dfY2FwICYgMHhmZjsKKwl1NjQgKmJhbmtzID0gdmNwdS0+YXJjaC5tY2VfYmFua3M7CisKKwlpZiAobWNlLT5iYW5rID49IGJhbmtfbnVtIHx8ICEobWNlLT5zdGF0dXMgJiBNQ0lfU1RBVFVTX1ZBTCkpCisJCXJldHVybiAtRUlOVkFMOworCS8qCisJICogaWYgSUEzMl9NQ0dfQ1RMIGlzIG5vdCBhbGwgMXMsIHRoZSB1bmNvcnJlY3RlZCBlcnJvcgorCSAqIHJlcG9ydGluZyBpcyBkaXNhYmxlZAorCSAqLworCWlmICgobWNlLT5zdGF0dXMgJiBNQ0lfU1RBVFVTX1VDKSAmJiAobWNnX2NhcCAmIE1DR19DVExfUCkgJiYKKwkgICAgdmNwdS0+YXJjaC5tY2dfY3RsICE9IH4odTY0KTApCisJCXJldHVybiAwOworCWJhbmtzICs9IDQgKiBtY2UtPmJhbms7CisJLyoKKwkgKiBpZiBJQTMyX01DaV9DVEwgaXMgbm90IGFsbCAxcywgdGhlIHVuY29ycmVjdGVkIGVycm9yCisJICogcmVwb3J0aW5nIGlzIGRpc2FibGVkIGZvciB0aGUgYmFuaworCSAqLworCWlmICgobWNlLT5zdGF0dXMgJiBNQ0lfU1RBVFVTX1VDKSAmJiBiYW5rc1swXSAhPSB+KHU2NCkwKQorCQlyZXR1cm4gMDsKKwlpZiAobWNlLT5zdGF0dXMgJiBNQ0lfU1RBVFVTX1VDKSB7CisJCWlmICgodmNwdS0+YXJjaC5tY2dfc3RhdHVzICYgTUNHX1NUQVRVU19NQ0lQKSB8fAorCQkgICAgISh2Y3B1LT5hcmNoLmNyNCAmIFg4Nl9DUjRfTUNFKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgImt2bTogc2V0X21jZTogIgorCQkJICAgICAgICJpbmplY3RzIG1jZSBleGNlcHRpb24gd2hpbGUgIgorCQkJICAgICAgICJwcmV2aW91cyBvbmUgaXMgaW4gcHJvZ3Jlc3MhXG4iKTsKKwkJCXNldF9iaXQoS1ZNX1JFUV9UUklQTEVfRkFVTFQsICZ2Y3B1LT5yZXF1ZXN0cyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoYmFua3NbMV0gJiBNQ0lfU1RBVFVTX1ZBTCkKKwkJCW1jZS0+c3RhdHVzIHw9IE1DSV9TVEFUVVNfT1ZFUjsKKwkJYmFua3NbMl0gPSBtY2UtPmFkZHI7CisJCWJhbmtzWzNdID0gbWNlLT5taXNjOworCQl2Y3B1LT5hcmNoLm1jZ19zdGF0dXMgPSBtY2UtPm1jZ19zdGF0dXM7CisJCWJhbmtzWzFdID0gbWNlLT5zdGF0dXM7CisJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgTUNfVkVDVE9SKTsKKwl9IGVsc2UgaWYgKCEoYmFua3NbMV0gJiBNQ0lfU1RBVFVTX1ZBTCkKKwkJICAgfHwgIShiYW5rc1sxXSAmIE1DSV9TVEFUVVNfVUMpKSB7CisJCWlmIChiYW5rc1sxXSAmIE1DSV9TVEFUVVNfVkFMKQorCQkJbWNlLT5zdGF0dXMgfD0gTUNJX1NUQVRVU19PVkVSOworCQliYW5rc1syXSA9IG1jZS0+YWRkcjsKKwkJYmFua3NbM10gPSBtY2UtPm1pc2M7CisJCWJhbmtzWzFdID0gbWNlLT5zdGF0dXM7CisJfSBlbHNlCisJCWJhbmtzWzFdIHw9IE1DSV9TVEFUVVNfT1ZFUjsKKwlyZXR1cm4gMDsKK30KKwogbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQkJIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0xNjM2LDYgKzE4OTAsMjQgQEAKIAkJa3ZtX2xhcGljX3NldF92YXBpY19hZGRyKHZjcHUsIHZhLnZhcGljX2FkZHIpOwogCQlicmVhazsKIAl9CisJY2FzZSBLVk1fWDg2X1NFVFVQX01DRTogeworCQl1NjQgbWNnX2NhcDsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZtY2dfY2FwLCBhcmdwLCBzaXplb2YgbWNnX2NhcCkpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXR1cF9tY2UodmNwdSwgbWNnX2NhcCk7CisJCWJyZWFrOworCX0KKwljYXNlIEtWTV9YODZfU0VUX01DRTogeworCQlzdHJ1Y3Qga3ZtX3g4Nl9tY2UgbWNlOworCisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJm1jZSwgYXJncCwgc2l6ZW9mIG1jZSkpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV92Y3B1X2lvY3RsX3g4Nl9zZXRfbWNlKHZjcHUsICZtY2UpOworCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJciA9IC1FSU5WQUw7CiAJfQpAQCAtMTY1NCw2ICsxOTI2LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X2lkZW50aXR5X21hcF9hZGRyKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkJICAgICAgdTY0IGlkZW50X2FkZHIpCit7CisJa3ZtLT5hcmNoLmVwdF9pZGVudGl0eV9tYXBfYWRkciA9IGlkZW50X2FkZHI7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3NldF9ucl9tbXVfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLAogCQkJCQkgIHUzMiBrdm1fbnJfbW11X3BhZ2VzKQogewpAQCAtMTc3NSwxOSArMjA1NCwyNSBAQAogCXIgPSAwOwogCXN3aXRjaCAoY2hpcC0+Y2hpcF9pZCkgewogCWNhc2UgS1ZNX0lSUUNISVBfUElDX01BU1RFUjoKKwkJc3Bpbl9sb2NrKCZwaWNfaXJxY2hpcChrdm0pLT5sb2NrKTsKIAkJbWVtY3B5KCZwaWNfaXJxY2hpcChrdm0pLT5waWNzWzBdLAogCQkJJmNoaXAtPmNoaXAucGljLAogCQkJc2l6ZW9mKHN0cnVjdCBrdm1fcGljX3N0YXRlKSk7CisJCXNwaW5fdW5sb2NrKCZwaWNfaXJxY2hpcChrdm0pLT5sb2NrKTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fSVJRQ0hJUF9QSUNfU0xBVkU6CisJCXNwaW5fbG9jaygmcGljX2lycWNoaXAoa3ZtKS0+bG9jayk7CiAJCW1lbWNweSgmcGljX2lycWNoaXAoa3ZtKS0+cGljc1sxXSwKIAkJCSZjaGlwLT5jaGlwLnBpYywKIAkJCXNpemVvZihzdHJ1Y3Qga3ZtX3BpY19zdGF0ZSkpOworCQlzcGluX3VubG9jaygmcGljX2lycWNoaXAoa3ZtKS0+bG9jayk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0lSUUNISVBfSU9BUElDOgorCQltdXRleF9sb2NrKCZrdm0tPmlycV9sb2NrKTsKIAkJbWVtY3B5KGlvYXBpY19pcnFjaGlwKGt2bSksCiAJCQkmY2hpcC0+Y2hpcC5pb2FwaWMsCiAJCQlzaXplb2Yoc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUpKTsKKwkJbXV0ZXhfdW5sb2NrKCZrdm0tPmlycV9sb2NrKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJciA9IC1FSU5WQUw7CkBAIC0xODAxLDcgKzIwODYsOSBAQAogewogCWludCByID0gMDsKIAorCW11dGV4X2xvY2soJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUubG9jayk7CiAJbWVtY3B5KHBzLCAma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZSwgc2l6ZW9mKHN0cnVjdCBrdm1fcGl0X3N0YXRlKSk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCXJldHVybiByOwogfQogCkBAIC0xODA5LDggKzIwOTYsMzkgQEAKIHsKIAlpbnQgciA9IDA7CiAKKwltdXRleF9sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCW1lbWNweSgma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZSwgcHMsIHNpemVvZihzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSkpOwotCWt2bV9waXRfbG9hZF9jb3VudChrdm0sIDAsIHBzLT5jaGFubmVsc1swXS5jb3VudCk7CisJa3ZtX3BpdF9sb2FkX2NvdW50KGt2bSwgMCwgcHMtPmNoYW5uZWxzWzBdLmNvdW50LCAwKTsKKwltdXRleF91bmxvY2soJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUubG9jayk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2dldF9waXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9waXRfc3RhdGUyICpwcykKK3sKKwlpbnQgciA9IDA7CisKKwltdXRleF9sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOworCW1lbWNweShwcy0+Y2hhbm5lbHMsICZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmNoYW5uZWxzLAorCQlzaXplb2YocHMtPmNoYW5uZWxzKSk7CisJcHMtPmZsYWdzID0ga3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5mbGFnczsKKwltdXRleF91bmxvY2soJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUubG9jayk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3NldF9waXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9waXRfc3RhdGUyICpwcykKK3sKKwlpbnQgciA9IDAsIHN0YXJ0ID0gMDsKKwl1MzIgcHJldl9sZWdhY3ksIGN1cl9sZWdhY3k7CisJbXV0ZXhfbG9jaygma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKKwlwcmV2X2xlZ2FjeSA9IGt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUuZmxhZ3MgJiBLVk1fUElUX0ZMQUdTX0hQRVRfTEVHQUNZOworCWN1cl9sZWdhY3kgPSBwcy0+ZmxhZ3MgJiBLVk1fUElUX0ZMQUdTX0hQRVRfTEVHQUNZOworCWlmICghcHJldl9sZWdhY3kgJiYgY3VyX2xlZ2FjeSkKKwkJc3RhcnQgPSAxOworCW1lbWNweSgma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5jaGFubmVscywgJnBzLT5jaGFubmVscywKKwkgICAgICAgc2l6ZW9mKGt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUuY2hhbm5lbHMpKTsKKwlrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmZsYWdzID0gcHMtPmZsYWdzOworCWt2bV9waXRfbG9hZF9jb3VudChrdm0sIDAsIGt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUuY2hhbm5lbHNbMF0uY291bnQsIHN0YXJ0KTsKKwltdXRleF91bmxvY2soJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUubG9jayk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE4MTksNyArMjEzNyw5IEBACiB7CiAJaWYgKCFrdm0tPmFyY2gudnBpdCkKIAkJcmV0dXJuIC1FTlhJTzsKKwltdXRleF9sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCWt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUucGl0X3RpbWVyLnJlaW5qZWN0ID0gY29udHJvbC0+cGl0X3JlaW5qZWN0OworCW11dGV4X3VubG9jaygma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg0NSw3ICsyMTY1LDYgQEAKIAkJc3Bpbl9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKIAkJa3ZtX21tdV9zbG90X3JlbW92ZV93cml0ZV9hY2Nlc3Moa3ZtLCBsb2ctPnNsb3QpOwogCQlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7Ci0JCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOwogCQltZW1zbG90ID0gJmt2bS0+bWVtc2xvdHNbbG9nLT5zbG90XTsKIAkJbiA9IEFMSUdOKG1lbXNsb3QtPm5wYWdlcywgQklUU19QRVJfTE9ORykgLyA4OwogCQltZW1zZXQobWVtc2xvdC0+ZGlydHlfYml0bWFwLCAwLCBuKTsKQEAgLTE4NjksNyArMjE4OCw5IEBACiAJICovCiAJdW5pb24gewogCQlzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSBwczsKKwkJc3RydWN0IGt2bV9waXRfc3RhdGUyIHBzMjsKIAkJc3RydWN0IGt2bV9tZW1vcnlfYWxpYXMgYWxpYXM7CisJCXN0cnVjdCBrdm1fcGl0X2NvbmZpZyBwaXRfY29uZmlnOwogCX0gdTsKIAogCXN3aXRjaCAoaW9jdGwpIHsKQEAgLTE4NzgsNiArMjE5OSwxNyBAQAogCQlpZiAociA8IDApCiAJCQlnb3RvIG91dDsKIAkJYnJlYWs7CisJY2FzZSBLVk1fU0VUX0lERU5USVRZX01BUF9BRERSOiB7CisJCXU2NCBpZGVudF9hZGRyOworCisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmlkZW50X2FkZHIsIGFyZ3AsIHNpemVvZiBpZGVudF9hZGRyKSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9pZGVudGl0eV9tYXBfYWRkcihrdm0sIGlkZW50X2FkZHIpOworCQlpZiAociA8IDApCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQogCWNhc2UgS1ZNX1NFVF9NRU1PUllfUkVHSU9OOiB7CiAJCXN0cnVjdCBrdm1fbWVtb3J5X3JlZ2lvbiBrdm1fbWVtOwogCQlzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uIGt2bV91c2Vyc3BhY2VfbWVtOwpAQCAtMTkzMCwxNiArMjI2MiwyNCBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0NSRUFURV9QSVQ6Ci0JCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJCXUucGl0X2NvbmZpZy5mbGFncyA9IEtWTV9QSVRfU1BFQUtFUl9EVU1NWTsKKwkJZ290byBjcmVhdGVfcGl0OworCWNhc2UgS1ZNX0NSRUFURV9QSVQyOgorCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1LnBpdF9jb25maWcsIGFyZ3AsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBrdm1fcGl0X2NvbmZpZykpKQorCQkJZ290byBvdXQ7CisJY3JlYXRlX3BpdDoKKwkJZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAkJciA9IC1FRVhJU1Q7CiAJCWlmIChrdm0tPmFyY2gudnBpdCkKIAkJCWdvdG8gY3JlYXRlX3BpdF91bmxvY2s7CiAJCXIgPSAtRU5PTUVNOwotCQlrdm0tPmFyY2gudnBpdCA9IGt2bV9jcmVhdGVfcGl0KGt2bSk7CisJCWt2bS0+YXJjaC52cGl0ID0ga3ZtX2NyZWF0ZV9waXQoa3ZtLCB1LnBpdF9jb25maWcuZmxhZ3MpOwogCQlpZiAoa3ZtLT5hcmNoLnZwaXQpCiAJCQlyID0gMDsKIAljcmVhdGVfcGl0X3VubG9jazoKLQkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCQl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fSVJRX0xJTkVfU1RBVFVTOgogCWNhc2UgS1ZNX0lSUV9MSU5FOiB7CkBAIC0xOTUwLDEwICsyMjkwLDEwIEBACiAJCQlnb3RvIG91dDsKIAkJaWYgKGlycWNoaXBfaW5fa2VybmVsKGt2bSkpIHsKIAkJCV9fczMyIHN0YXR1czsKLQkJCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJCQltdXRleF9sb2NrKCZrdm0tPmlycV9sb2NrKTsKIAkJCXN0YXR1cyA9IGt2bV9zZXRfaXJxKGt2bSwgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELAogCQkJCQlpcnFfZXZlbnQuaXJxLCBpcnFfZXZlbnQubGV2ZWwpOwotCQkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZrdm0tPmlycV9sb2NrKTsKIAkJCWlmIChpb2N0bCA9PSBLVk1fSVJRX0xJTkVfU1RBVFVTKSB7CiAJCQkJaXJxX2V2ZW50LnN0YXR1cyA9IHN0YXR1czsKIAkJCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpcnFfZXZlbnQsCkBAIC0yMDQyLDYgKzIzODIsMzIgQEAKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KKwljYXNlIEtWTV9HRVRfUElUMjogeworCQlyID0gLUVOWElPOworCQlpZiAoIWt2bS0+YXJjaC52cGl0KQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fdm1faW9jdGxfZ2V0X3BpdDIoa3ZtLCAmdS5wczIpOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdS5wczIsIHNpemVvZih1LnBzMikpKQorCQkJZ290byBvdXQ7CisJCXIgPSAwOworCQlicmVhazsKKwl9CisJY2FzZSBLVk1fU0VUX1BJVDI6IHsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdS5wczIsIGFyZ3AsIHNpemVvZih1LnBzMikpKQorCQkJZ290byBvdXQ7CisJCXIgPSAtRU5YSU87CisJCWlmICgha3ZtLT5hcmNoLnZwaXQpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV92bV9pb2N0bF9zZXRfcGl0Mihrdm0sICZ1LnBzMik7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJCXIgPSAwOworCQlicmVhazsKKwl9CiAJY2FzZSBLVk1fUkVJTkpFQ1RfQ09OVFJPTDogewogCQlzdHJ1Y3Qga3ZtX3JlaW5qZWN0X2NvbnRyb2wgY29udHJvbDsKIAkJciA9ICAtRUZBVUxUOwpAQCAtMjA3NSwzNSArMjQ0MSwyMyBAQAogCW51bV9tc3JzX3RvX3NhdmUgPSBqOwogfQogCi0vKgotICogT25seSBhcGljIG5lZWQgYW4gTU1JTyBkZXZpY2UgaG9vaywgc28gc2hvcnRjdXQgbm93Li4KLSAqLwotc3RhdGljIHN0cnVjdCBrdm1faW9fZGV2aWNlICp2Y3B1X2ZpbmRfcGVydmNwdV9kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCQkJZ3BhX3QgYWRkciwgaW50IGxlbiwKLQkJCQkJCWludCBpc193cml0ZSkKK3N0YXRpYyBpbnQgdmNwdV9tbWlvX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwKKwkJCSAgIGNvbnN0IHZvaWQgKnYpCiB7Ci0Jc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldjsKKwlpZiAodmNwdS0+YXJjaC5hcGljICYmCisJICAgICFrdm1faW9kZXZpY2Vfd3JpdGUoJnZjcHUtPmFyY2guYXBpYy0+ZGV2LCBhZGRyLCBsZW4sIHYpKQorCQlyZXR1cm4gMDsKIAotCWlmICh2Y3B1LT5hcmNoLmFwaWMpIHsKLQkJZGV2ID0gJnZjcHUtPmFyY2guYXBpYy0+ZGV2OwotCQlpZiAoZGV2LT5pbl9yYW5nZShkZXYsIGFkZHIsIGxlbiwgaXNfd3JpdGUpKQotCQkJcmV0dXJuIGRldjsKLQl9Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIGt2bV9pb19idXNfd3JpdGUoJnZjcHUtPmt2bS0+bW1pb19idXMsIGFkZHIsIGxlbiwgdik7CiB9CiAKLQotc3RhdGljIHN0cnVjdCBrdm1faW9fZGV2aWNlICp2Y3B1X2ZpbmRfbW1pb19kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCQkJZ3BhX3QgYWRkciwgaW50IGxlbiwKLQkJCQkJCWludCBpc193cml0ZSkKK3N0YXRpYyBpbnQgdmNwdV9tbWlvX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCB2b2lkICp2KQogewotCXN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXY7CisJaWYgKHZjcHUtPmFyY2guYXBpYyAmJgorCSAgICAha3ZtX2lvZGV2aWNlX3JlYWQoJnZjcHUtPmFyY2guYXBpYy0+ZGV2LCBhZGRyLCBsZW4sIHYpKQorCQlyZXR1cm4gMDsKIAotCWRldiA9IHZjcHVfZmluZF9wZXJ2Y3B1X2Rldih2Y3B1LCBhZGRyLCBsZW4sIGlzX3dyaXRlKTsKLQlpZiAoZGV2ID09IE5VTEwpCi0JCWRldiA9IGt2bV9pb19idXNfZmluZF9kZXYoJnZjcHUtPmt2bS0+bW1pb19idXMsIGFkZHIsIGxlbiwKLQkJCQkJICBpc193cml0ZSk7Ci0JcmV0dXJuIGRldjsKKwlyZXR1cm4ga3ZtX2lvX2J1c19yZWFkKCZ2Y3B1LT5rdm0tPm1taW9fYnVzLCBhZGRyLCBsZW4sIHYpOwogfQogCiBzdGF0aWMgaW50IGt2bV9yZWFkX2d1ZXN0X3ZpcnQoZ3ZhX3QgYWRkciwgdm9pZCAqdmFsLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCkBAIC0yMTcyLDExICsyNTI2LDEyIEBACiAJCQkJICB1bnNpZ25lZCBpbnQgYnl0ZXMsCiAJCQkJICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IGt2bV9pb19kZXZpY2UgKm1taW9fZGV2OwogCWdwYV90ICAgICAgICAgICAgICAgICBncGE7CiAKIAlpZiAodmNwdS0+bW1pb19yZWFkX2NvbXBsZXRlZCkgewogCQltZW1jcHkodmFsLCB2Y3B1LT5tbWlvX2RhdGEsIGJ5dGVzKTsKKwkJdHJhY2Vfa3ZtX21taW8oS1ZNX1RSQUNFX01NSU9fUkVBRCwgYnl0ZXMsCisJCQkgICAgICAgdmNwdS0+bW1pb19waHlzX2FkZHIsICoodTY0ICopdmFsKTsKIAkJdmNwdS0+bW1pb19yZWFkX2NvbXBsZXRlZCA9IDA7CiAJCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwogCX0KQEAgLTIxOTcsMTQgKzI1NTIsMTIgQEAKIAkvKgogCSAqIElzIHRoaXMgTU1JTyBoYW5kbGVkIGxvY2FsbHk/CiAJICovCi0JbXV0ZXhfbG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKLQltbWlvX2RldiA9IHZjcHVfZmluZF9tbWlvX2Rldih2Y3B1LCBncGEsIGJ5dGVzLCAwKTsKLQlpZiAobW1pb19kZXYpIHsKLQkJa3ZtX2lvZGV2aWNlX3JlYWQobW1pb19kZXYsIGdwYSwgYnl0ZXMsIHZhbCk7Ci0JCW11dGV4X3VubG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKKwlpZiAoIXZjcHVfbW1pb19yZWFkKHZjcHUsIGdwYSwgYnl0ZXMsIHZhbCkpIHsKKwkJdHJhY2Vfa3ZtX21taW8oS1ZNX1RSQUNFX01NSU9fUkVBRCwgYnl0ZXMsIGdwYSwgKih1NjQgKil2YWwpOwogCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOworCisJdHJhY2Vfa3ZtX21taW8oS1ZNX1RSQUNFX01NSU9fUkVBRF9VTlNBVElTRklFRCwgYnl0ZXMsIGdwYSwgMCk7CiAKIAl2Y3B1LT5tbWlvX25lZWRlZCA9IDE7CiAJdmNwdS0+bW1pb19waHlzX2FkZHIgPSBncGE7CkBAIC0yMjMxLDcgKzI1ODQsNiBAQAogCQkJCQkgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCiAJCQkJCSAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqbW1pb19kZXY7CiAJZ3BhX3QgICAgICAgICAgICAgICAgIGdwYTsKIAogCWdwYSA9IHZjcHUtPmFyY2gubW11Lmd2YV90b19ncGEodmNwdSwgYWRkcik7CkBAIC0yMjQ5LDE3ICsyNjAxLDEyIEBACiAJCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwogCiBtbWlvOgorCXRyYWNlX2t2bV9tbWlvKEtWTV9UUkFDRV9NTUlPX1dSSVRFLCBieXRlcywgZ3BhLCAqKHU2NCAqKXZhbCk7CiAJLyoKIAkgKiBJcyB0aGlzIE1NSU8gaGFuZGxlZCBsb2NhbGx5PwogCSAqLwotCW11dGV4X2xvY2soJnZjcHUtPmt2bS0+bG9jayk7Ci0JbW1pb19kZXYgPSB2Y3B1X2ZpbmRfbW1pb19kZXYodmNwdSwgZ3BhLCBieXRlcywgMSk7Ci0JaWYgKG1taW9fZGV2KSB7Ci0JCWt2bV9pb2RldmljZV93cml0ZShtbWlvX2RldiwgZ3BhLCBieXRlcywgdmFsKTsKLQkJbXV0ZXhfdW5sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOworCWlmICghdmNwdV9tbWlvX3dyaXRlKHZjcHUsIGdwYSwgYnl0ZXMsIHZhbCkpCiAJCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwotCX0KLQltdXRleF91bmxvY2soJnZjcHUtPmt2bS0+bG9jayk7CiAKIAl2Y3B1LT5tbWlvX25lZWRlZCA9IDE7CiAJdmNwdS0+bW1pb19waHlzX2FkZHIgPSBncGE7CkBAIC0yMjk3LDEyICsyNjQ0LDcgQEAKIAkJCQkgICAgIHVuc2lnbmVkIGludCBieXRlcywKIAkJCQkgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdGF0aWMgaW50IHJlcG9ydGVkOwotCi0JaWYgKCFyZXBvcnRlZCkgewotCQlyZXBvcnRlZCA9IDE7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImt2bTogZW11bGF0aW5nIGV4Y2hhbmdlIGFzIHdyaXRlXG4iKTsKLQl9CisJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HICJrdm06IGVtdWxhdGluZyBleGNoYW5nZSBhcyB3cml0ZVxuIik7CiAjaWZuZGVmIENPTkZJR19YODZfNjQKIAkvKiBndWVzdHMgY21weGNoZzhiIGhhdmUgdG8gYmUgZW11bGF0ZWQgYXRvbWljYWxseSAqLwogCWlmIChieXRlcyA9PSA4KSB7CkBAIC0yMzQ4LDcgKzI2OTAsNiBAQAogCiBpbnQgZW11bGF0ZV9jbHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlLVk1UUkFDRV8wRChDTFRTLCB2Y3B1LCBoYW5kbGVyKTsKIAlrdm1feDg2X29wcy0+c2V0X2NyMCh2Y3B1LCB2Y3B1LT5hcmNoLmNyMCAmIH5YODZfQ1IwX1RTKTsKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KQEAgLTI0MjUsNyArMjc2Niw3IEBACiAJa3ZtX2NsZWFyX2V4Y2VwdGlvbl9xdWV1ZSh2Y3B1KTsKIAl2Y3B1LT5hcmNoLm1taW9fZmF1bHRfY3IyID0gY3IyOwogCS8qCi0JICogVE9ETzogZml4IHg4Nl9lbXVsYXRlLmMgdG8gdXNlIGd1ZXN0X3JlYWQvd3JpdGVfcmVnaXN0ZXIKKwkgKiBUT0RPOiBmaXggZW11bGF0ZS5jIHRvIHVzZSBndWVzdF9yZWFkL3dyaXRlX3JlZ2lzdGVyCiAJICogaW5zdGVhZCBvZiBkaXJlY3QgLT5yZWdzIGFjY2Vzc2VzLCBjYW4gc2F2ZSBodW5kcmVkIGN5Y2xlcwogCSAqIG9uIEludGVsIGZvciBpbnN0cnVjdGlvbnMgdGhhdCBkb24ndCByZWFkL2NoYW5nZSBSU1AsIGZvcgogCSAqIGZvciBleGFtcGxlLgpAQCAtMjQ0OSwxNCArMjc5MCwzMyBAQAogCiAJCXIgPSB4ODZfZGVjb2RlX2luc24oJnZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LCAmZW11bGF0ZV9vcHMpOwogCi0JCS8qIFJlamVjdCB0aGUgaW5zdHJ1Y3Rpb25zIG90aGVyIHRoYW4gVk1DQUxML1ZNTUNBTEwgd2hlbgotCQkgKiB0cnkgdG8gZW11bGF0ZSBpbnZhbGlkIG9wY29kZSAqLworCQkvKiBPbmx5IGFsbG93IGVtdWxhdGlvbiBvZiBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgb24gI1VECisJCSAqIChuYW1lbHkgVk1NQ0FMTCwgc3lzZW50ZXIsIHN5c2V4aXQsIHN5c2NhbGwpKi8KIAkJYyA9ICZ2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5kZWNvZGU7Ci0JCWlmICgoZW11bGF0aW9uX3R5cGUgJiBFTVVMVFlQRV9UUkFQX1VEKSAmJgotCQkgICAgKCEoYy0+dHdvYnl0ZSAmJiBjLT5iID09IDB4MDEgJiYKLQkJICAgICAgKGMtPm1vZHJtX3JlZyA9PSAwIHx8IGMtPm1vZHJtX3JlZyA9PSAzKSAmJgotCQkgICAgICAgYy0+bW9kcm1fbW9kID09IDMgJiYgYy0+bW9kcm1fcm0gPT0gMSkpKQotCQkJcmV0dXJuIEVNVUxBVEVfRkFJTDsKKwkJaWYgKGVtdWxhdGlvbl90eXBlICYgRU1VTFRZUEVfVFJBUF9VRCkgeworCQkJaWYgKCFjLT50d29ieXRlKQorCQkJCXJldHVybiBFTVVMQVRFX0ZBSUw7CisJCQlzd2l0Y2ggKGMtPmIpIHsKKwkJCWNhc2UgMHgwMTogLyogVk1NQ0FMTCAqLworCQkJCWlmIChjLT5tb2RybV9tb2QgIT0gMyB8fCBjLT5tb2RybV9ybSAhPSAxKQorCQkJCQlyZXR1cm4gRU1VTEFURV9GQUlMOworCQkJCWJyZWFrOworCQkJY2FzZSAweDM0OiAvKiBzeXNlbnRlciAqLworCQkJY2FzZSAweDM1OiAvKiBzeXNleGl0ICovCisJCQkJaWYgKGMtPm1vZHJtX21vZCAhPSAwIHx8IGMtPm1vZHJtX3JtICE9IDApCisJCQkJCXJldHVybiBFTVVMQVRFX0ZBSUw7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MDU6IC8qIHN5c2NhbGwgKi8KKwkJCQlpZiAoYy0+bW9kcm1fbW9kICE9IDAgfHwgYy0+bW9kcm1fcm0gIT0gMCkKKwkJCQkJcmV0dXJuIEVNVUxBVEVfRkFJTDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIEVNVUxBVEVfRkFJTDsKKwkJCX0KKworCQkJaWYgKCEoYy0+bW9kcm1fcmVnID09IDAgfHwgYy0+bW9kcm1fcmVnID09IDMpKQorCQkJCXJldHVybiBFTVVMQVRFX0ZBSUw7CisJCX0KIAogCQkrK3ZjcHUtPnN0YXQuaW5zbl9lbXVsYXRpb247CiAJCWlmIChyKSAgewpAQCAtMjU3Niw1MiArMjkzNiw0MCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBrZXJuZWxfcGlvKHN0cnVjdCBrdm1faW9fZGV2aWNlICpwaW9fZGV2LAotCQkgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkgICAgICAgdm9pZCAqcGQpCitzdGF0aWMgaW50IGtlcm5lbF9waW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpwZCkKIHsKIAkvKiBUT0RPOiBTdHJpbmcgSS9PIGZvciBpbiBrZXJuZWwgZGV2aWNlICovCisJaW50IHI7CiAKLQltdXRleF9sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOwogCWlmICh2Y3B1LT5hcmNoLnBpby5pbikKLQkJa3ZtX2lvZGV2aWNlX3JlYWQocGlvX2RldiwgdmNwdS0+YXJjaC5waW8ucG9ydCwKLQkJCQkgIHZjcHUtPmFyY2gucGlvLnNpemUsCi0JCQkJICBwZCk7CisJCXIgPSBrdm1faW9fYnVzX3JlYWQoJnZjcHUtPmt2bS0+cGlvX2J1cywgdmNwdS0+YXJjaC5waW8ucG9ydCwKKwkJCQkgICAgdmNwdS0+YXJjaC5waW8uc2l6ZSwgcGQpOwogCWVsc2UKLQkJa3ZtX2lvZGV2aWNlX3dyaXRlKHBpb19kZXYsIHZjcHUtPmFyY2gucGlvLnBvcnQsCi0JCQkJICAgdmNwdS0+YXJjaC5waW8uc2l6ZSwKLQkJCQkgICBwZCk7Ci0JbXV0ZXhfdW5sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOworCQlyID0ga3ZtX2lvX2J1c193cml0ZSgmdmNwdS0+a3ZtLT5waW9fYnVzLCB2Y3B1LT5hcmNoLnBpby5wb3J0LAorCQkJCSAgICAgdmNwdS0+YXJjaC5waW8uc2l6ZSwgcGQpOworCXJldHVybiByOwogfQogCi1zdGF0aWMgdm9pZCBwaW9fc3RyaW5nX3dyaXRlKHN0cnVjdCBrdm1faW9fZGV2aWNlICpwaW9fZGV2LAotCQkJICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgaW50IHBpb19zdHJpbmdfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBrdm1fcGlvX3JlcXVlc3QgKmlvID0gJnZjcHUtPmFyY2gucGlvOwogCXZvaWQgKnBkID0gdmNwdS0+YXJjaC5waW9fZGF0YTsKLQlpbnQgaTsKKwlpbnQgaSwgciA9IDA7CiAKLQltdXRleF9sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOwogCWZvciAoaSA9IDA7IGkgPCBpby0+Y3VyX2NvdW50OyBpKyspIHsKLQkJa3ZtX2lvZGV2aWNlX3dyaXRlKHBpb19kZXYsIGlvLT5wb3J0LAotCQkJCSAgIGlvLT5zaXplLAotCQkJCSAgIHBkKTsKKwkJaWYgKGt2bV9pb19idXNfd3JpdGUoJnZjcHUtPmt2bS0+cGlvX2J1cywKKwkJCQkgICAgIGlvLT5wb3J0LCBpby0+c2l6ZSwgcGQpKSB7CisJCQlyID0gLUVPUE5PVFNVUFA7CisJCQlicmVhazsKKwkJfQogCQlwZCArPSBpby0+c2l6ZTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOwotfQotCi1zdGF0aWMgc3RydWN0IGt2bV9pb19kZXZpY2UgKnZjcHVfZmluZF9waW9fZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkJICAgICAgIGdwYV90IGFkZHIsIGludCBsZW4sCi0JCQkJCSAgICAgICBpbnQgaXNfd3JpdGUpCi17Ci0JcmV0dXJuIGt2bV9pb19idXNfZmluZF9kZXYoJnZjcHUtPmt2bS0+cGlvX2J1cywgYWRkciwgbGVuLCBpc193cml0ZSk7CisJcmV0dXJuIHI7CiB9CiAKIGludCBrdm1fZW11bGF0ZV9waW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBpbnQgaW4sCiAJCSAgaW50IHNpemUsIHVuc2lnbmVkIHBvcnQpCiB7Ci0Jc3RydWN0IGt2bV9pb19kZXZpY2UgKnBpb19kZXY7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKIAl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU87CkBAIC0yNjM1LDE5ICsyOTgzLDEzIEBACiAJdmNwdS0+YXJjaC5waW8uZG93biA9IDA7CiAJdmNwdS0+YXJjaC5waW8ucmVwID0gMDsKIAotCWlmICh2Y3B1LT5ydW4tPmlvLmRpcmVjdGlvbiA9PSBLVk1fRVhJVF9JT19JTikKLQkJS1ZNVFJBQ0VfMkQoSU9fUkVBRCwgdmNwdSwgdmNwdS0+cnVuLT5pby5wb3J0LCAodTMyKXNpemUsCi0JCQkgICAgaGFuZGxlcik7Ci0JZWxzZQotCQlLVk1UUkFDRV8yRChJT19XUklURSwgdmNwdSwgdmNwdS0+cnVuLT5pby5wb3J0LCAodTMyKXNpemUsCi0JCQkgICAgaGFuZGxlcik7CisJdHJhY2Vfa3ZtX3Bpbyh2Y3B1LT5ydW4tPmlvLmRpcmVjdGlvbiA9PSBLVk1fRVhJVF9JT19PVVQsIHBvcnQsCisJCSAgICAgIHNpemUsIDEpOwogCiAJdmFsID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JBWCk7CiAJbWVtY3B5KHZjcHUtPmFyY2gucGlvX2RhdGEsICZ2YWwsIDQpOwogCi0JcGlvX2RldiA9IHZjcHVfZmluZF9waW9fZGV2KHZjcHUsIHBvcnQsIHNpemUsICFpbik7Ci0JaWYgKHBpb19kZXYpIHsKLQkJa2VybmVsX3BpbyhwaW9fZGV2LCB2Y3B1LCB2Y3B1LT5hcmNoLnBpb19kYXRhKTsKKwlpZiAoIWtlcm5lbF9waW8odmNwdSwgdmNwdS0+YXJjaC5waW9fZGF0YSkpIHsKIAkJY29tcGxldGVfcGlvKHZjcHUpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0yNjYxLDcgKzMwMDMsNiBAQAogewogCXVuc2lnbmVkIG5vdywgaW5fcGFnZTsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqcGlvX2RldjsKIAogCXZjcHUtPnJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTzsKIAl2Y3B1LT5ydW4tPmlvLmRpcmVjdGlvbiA9IGluID8gS1ZNX0VYSVRfSU9fSU4gOiBLVk1fRVhJVF9JT19PVVQ7CkBAIC0yNjc0LDEyICszMDE1LDggQEAKIAl2Y3B1LT5hcmNoLnBpby5kb3duID0gZG93bjsKIAl2Y3B1LT5hcmNoLnBpby5yZXAgPSByZXA7CiAKLQlpZiAodmNwdS0+cnVuLT5pby5kaXJlY3Rpb24gPT0gS1ZNX0VYSVRfSU9fSU4pCi0JCUtWTVRSQUNFXzJEKElPX1JFQUQsIHZjcHUsIHZjcHUtPnJ1bi0+aW8ucG9ydCwgKHUzMilzaXplLAotCQkJICAgIGhhbmRsZXIpOwotCWVsc2UKLQkJS1ZNVFJBQ0VfMkQoSU9fV1JJVEUsIHZjcHUsIHZjcHUtPnJ1bi0+aW8ucG9ydCwgKHUzMilzaXplLAotCQkJICAgIGhhbmRsZXIpOworCXRyYWNlX2t2bV9waW8odmNwdS0+cnVuLT5pby5kaXJlY3Rpb24gPT0gS1ZNX0VYSVRfSU9fT1VULCBwb3J0LAorCQkgICAgICBzaXplLCBjb3VudCk7CiAKIAlpZiAoIWNvdW50KSB7CiAJCWt2bV94ODZfb3BzLT5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwpAQCAtMjcwOSw5ICszMDQ2LDYgQEAKIAogCXZjcHUtPmFyY2gucGlvLmd1ZXN0X2d2YSA9IGFkZHJlc3M7CiAKLQlwaW9fZGV2ID0gdmNwdV9maW5kX3Bpb19kZXYodmNwdSwgcG9ydCwKLQkJCQkgICAgdmNwdS0+YXJjaC5waW8uY3VyX2NvdW50LAotCQkJCSAgICAhdmNwdS0+YXJjaC5waW8uaW4pOwogCWlmICghdmNwdS0+YXJjaC5waW8uaW4pIHsKIAkJLyogc3RyaW5nIFBJTyB3cml0ZSAqLwogCQlyZXQgPSBwaW9fY29weV9kYXRhKHZjcHUpOwpAQCAtMjcxOSwxNiArMzA1MywxMyBAQAogCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKIAkJCXJldHVybiAxOwogCQl9Ci0JCWlmIChyZXQgPT0gMCAmJiBwaW9fZGV2KSB7Ci0JCQlwaW9fc3RyaW5nX3dyaXRlKHBpb19kZXYsIHZjcHUpOworCQlpZiAocmV0ID09IDAgJiYgIXBpb19zdHJpbmdfd3JpdGUodmNwdSkpIHsKIAkJCWNvbXBsZXRlX3Bpbyh2Y3B1KTsKIAkJCWlmICh2Y3B1LT5hcmNoLnBpby5jb3VudCA9PSAwKQogCQkJCXJldCA9IDE7CiAJCX0KLQl9IGVsc2UgaWYgKHBpb19kZXYpCi0JCXByX3VuaW1wbCh2Y3B1LCAibm8gc3RyaW5nIHBpbyByZWFkIHN1cHBvcnQgeWV0LCAiCi0JCSAgICAgICAicG9ydCAleCBzaXplICVkIGNvdW50ICVsZFxuIiwKLQkJCXBvcnQsIHNpemUsIGNvdW50KTsKKwl9CisJLyogbm8gc3RyaW5nIFBJTyByZWFkIHN1cHBvcnQgeWV0ICovCiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjc2MSwxMCArMzA5Miw3IEBACiAKIAlzcGluX2xvY2soJmt2bV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGt2bSwgJnZtX2xpc3QsIHZtX2xpc3QpIHsKLQkJZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7ICsraSkgewotCQkJdmNwdSA9IGt2bS0+dmNwdXNbaV07Ci0JCQlpZiAoIXZjcHUpCi0JCQkJY29udGludWU7CisJCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkgewogCQkJaWYgKHZjcHUtPmNwdSAhPSBmcmVxLT5jcHUpCiAJCQkJY29udGludWU7CiAJCQlpZiAoIWt2bV9yZXF1ZXN0X2d1ZXN0X3RpbWVfdXBkYXRlKHZjcHUpKQpAQCAtMjg1Nyw3ICszMTg1LDYgQEAKIGludCBrdm1fZW11bGF0ZV9oYWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAkrK3ZjcHUtPnN0YXQuaGFsdF9leGl0czsKLQlLVk1UUkFDRV8wRChITFQsIHZjcHUsIGhhbmRsZXIpOwogCWlmIChpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LT5rdm0pKSB7CiAJCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfSEFMVEVEOwogCQlyZXR1cm4gMTsKQEAgLTI4ODgsNyArMzIxNSw3IEBACiAJYTIgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRYKTsKIAlhMyA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SU0kpOwogCi0JS1ZNVFJBQ0VfMUQoVk1NQ0FMTCwgdmNwdSwgKHUzMiluciwgaGFuZGxlcik7CisJdHJhY2Vfa3ZtX2h5cGVyY2FsbChuciwgYTAsIGExLCBhMiwgYTMpOwogCiAJaWYgKCFpc19sb25nX21vZGUodmNwdSkpIHsKIAkJbnIgJj0gMHhGRkZGRkZGRjsKQEAgLTI4OTgsNiArMzIyNSwxMSBAQAogCQlhMyAmPSAweEZGRkZGRkZGOwogCX0KIAorCWlmIChrdm1feDg2X29wcy0+Z2V0X2NwbCh2Y3B1KSAhPSAwKSB7CisJCXJldCA9IC1LVk1fRVBFUk07CisJCWdvdG8gb3V0OworCX0KKwogCXN3aXRjaCAobnIpIHsKIAljYXNlIEtWTV9IQ19WQVBJQ19QT0xMX0lSUToKIAkJcmV0ID0gMDsKQEAgLTI5MDksNiArMzI0MSw3IEBACiAJCXJldCA9IC1LVk1fRU5PU1lTOwogCQlicmVhazsKIAl9CitvdXQ6CiAJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIHJldCk7CiAJKyt2Y3B1LT5zdGF0Lmh5cGVyY2FsbHM7CiAJcmV0dXJuIHI7CkBAIC0yOTg4LDggKzMzMjEsNiBAQAogCQl2Y3B1X3ByaW50Zih2Y3B1LCAiJXM6IHVuZXhwZWN0ZWQgY3IgJXVcbiIsIF9fZnVuY19fLCBjcik7CiAJCXJldHVybiAwOwogCX0KLQlLVk1UUkFDRV8zRChDUl9SRUFELCB2Y3B1LCAodTMyKWNyLCAodTMyKXZhbHVlLAotCQkgICAgKHUzMikoKHU2NCl2YWx1ZSA+PiAzMiksIGhhbmRsZXIpOwogCiAJcmV0dXJuIHZhbHVlOwogfQpAQCAtMjk5Nyw5ICszMzI4LDYgQEAKIHZvaWQgcmVhbG1vZGVfc2V0X2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNyLCB1bnNpZ25lZCBsb25nIHZhbCwKIAkJICAgICB1bnNpZ25lZCBsb25nICpyZmxhZ3MpCiB7Ci0JS1ZNVFJBQ0VfM0QoQ1JfV1JJVEUsIHZjcHUsICh1MzIpY3IsICh1MzIpdmFsLAotCQkgICAgKHUzMikoKHU2NCl2YWwgPj4gMzIpLCBoYW5kbGVyKTsKLQogCXN3aXRjaCAoY3IpIHsKIAljYXNlIDA6CiAJCWt2bV9zZXRfY3IwKHZjcHUsIG1rX2NyXzY0KHZjcHUtPmFyY2guY3IwLCB2YWwpKTsKQEAgLTMxMDksMTEgKzM0MzcsMTEgQEAKIAkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SRFgsIGJlc3QtPmVkeCk7CiAJfQogCWt2bV94ODZfb3BzLT5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwotCUtWTVRSQUNFXzVEKENQVUlELCB2Y3B1LCBmdW5jdGlvbiwKLQkJICAgICh1MzIpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JBWCksCi0JCSAgICAodTMyKWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQlgpLAotCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKSwKLQkJICAgICh1MzIpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JEWCksIGhhbmRsZXIpOworCXRyYWNlX2t2bV9jcHVpZChmdW5jdGlvbiwKKwkJCWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpLAorCQkJa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JCWCksCisJCQlrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKSwKKwkJCWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SRFgpKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9lbXVsYXRlX2NwdWlkKTsKIApAQCAtMzE3OSw2ICszNTA3LDkgQEAKIAlpZiAoIWt2bV94ODZfb3BzLT51cGRhdGVfY3I4X2ludGVyY2VwdCkKIAkJcmV0dXJuOwogCisJaWYgKCF2Y3B1LT5hcmNoLmFwaWMpCisJCXJldHVybjsKKwogCWlmICghdmNwdS0+YXJjaC5hcGljLT52YXBpY19hZGRyKQogCQltYXhfaXJyID0ga3ZtX2xhcGljX2ZpbmRfaGlnaGVzdF9pcnIodmNwdSk7CiAJZWxzZQpAQCAtMzE5MiwxMiArMzUyMywxNiBAQAogCWt2bV94ODZfb3BzLT51cGRhdGVfY3I4X2ludGVyY2VwdCh2Y3B1LCB0cHIsIG1heF9pcnIpOwogfQogCi1zdGF0aWMgdm9pZCBpbmplY3RfcGVuZGluZ19pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3N0YXRpYyB2b2lkIGluamVjdF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCi0JCWt2bV94ODZfb3BzLT5zZXRfaW50ZXJydXB0X3NoYWRvdyh2Y3B1LCAwKTsKLQogCS8qIHRyeSB0byByZWluamVjdCBwcmV2aW91cyBldmVudHMgaWYgYW55ICovCisJaWYgKHZjcHUtPmFyY2guZXhjZXB0aW9uLnBlbmRpbmcpIHsKKwkJa3ZtX3g4Nl9vcHMtPnF1ZXVlX2V4Y2VwdGlvbih2Y3B1LCB2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5uciwKKwkJCQkJICB2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5oYXNfZXJyb3JfY29kZSwKKwkJCQkJICB2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5lcnJvcl9jb2RlKTsKKwkJcmV0dXJuOworCX0KKwogCWlmICh2Y3B1LT5hcmNoLm5taV9pbmplY3RlZCkgewogCQlrdm1feDg2X29wcy0+c2V0X25taSh2Y3B1KTsKIAkJcmV0dXJuOwpAQCAtMzI3MSwxNiArMzYwNiwxNCBAQAogCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAKIAlpZiAodmNwdS0+cmVxdWVzdHMgfHwgbmVlZF9yZXNjaGVkKCkgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJc2V0X2JpdChLVk1fUkVRX0tJQ0ssICZ2Y3B1LT5yZXF1ZXN0cyk7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAkJciA9IDE7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICh2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nKQotCQlfX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1KTsKLQllbHNlCi0JCWluamVjdF9wZW5kaW5nX2lycSh2Y3B1LCBrdm1fcnVuKTsKKwlpbmplY3RfcGVuZGluZ19ldmVudCh2Y3B1LCBrdm1fcnVuKTsKIAogCS8qIGVuYWJsZSBOTUkvSVJRIHdpbmRvdyBvcGVuIGV4aXRzIGlmIG5lZWRlZCAqLwogCWlmICh2Y3B1LT5hcmNoLm5taV9wZW5kaW5nKQpAQCAtMzI5NywxNCArMzYzMCw3IEBACiAKIAlrdm1fZ3Vlc3RfZW50ZXIoKTsKIAotCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZHI2LCA2KTsKLQlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RyNywgNyk7CiAJaWYgKHVubGlrZWx5KHZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MpKSB7Ci0JCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMF0sIDApOwotCQlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzFdLCAxKTsKLQkJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlsyXSwgMik7Ci0JCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbM10sIDMpOwotCiAJCXNldF9kZWJ1Z3JlZygwLCA3KTsKIAkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZWZmX2RiWzBdLCAwKTsKIAkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZWZmX2RiWzFdLCAxKTsKQEAgLTMzMTIsMTggKzM2MzgsMTcgQEAKIAkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZWZmX2RiWzNdLCAzKTsKIAl9CiAKLQlLVk1UUkFDRV8wRChWTUVOVFJZLCB2Y3B1LCBlbnRyeWV4aXQpOworCXRyYWNlX2t2bV9lbnRyeSh2Y3B1LT52Y3B1X2lkKTsKIAlrdm1feDg2X29wcy0+cnVuKHZjcHUsIGt2bV9ydW4pOwogCi0JaWYgKHVubGlrZWx5KHZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MpKSB7Ci0JCXNldF9kZWJ1Z3JlZygwLCA3KTsKLQkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlswXSwgMCk7Ci0JCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMV0sIDEpOwotCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzJdLCAyKTsKLQkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlszXSwgMyk7CisJaWYgKHVubGlrZWx5KHZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MgfHwgdGVzdF90aHJlYWRfZmxhZyhUSUZfREVCVUcpKSkgeworCQlzZXRfZGVidWdyZWcoY3VycmVudC0+dGhyZWFkLmRlYnVncmVnMCwgMCk7CisJCXNldF9kZWJ1Z3JlZyhjdXJyZW50LT50aHJlYWQuZGVidWdyZWcxLCAxKTsKKwkJc2V0X2RlYnVncmVnKGN1cnJlbnQtPnRocmVhZC5kZWJ1Z3JlZzIsIDIpOworCQlzZXRfZGVidWdyZWcoY3VycmVudC0+dGhyZWFkLmRlYnVncmVnMywgMyk7CisJCXNldF9kZWJ1Z3JlZyhjdXJyZW50LT50aHJlYWQuZGVidWdyZWc2LCA2KTsKKwkJc2V0X2RlYnVncmVnKGN1cnJlbnQtPnRocmVhZC5kZWJ1Z3JlZzcsIDcpOwogCX0KLQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RyNiwgNik7Ci0Jc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kcjcsIDcpOwogCiAJc2V0X2JpdChLVk1fUkVRX0tJQ0ssICZ2Y3B1LT5yZXF1ZXN0cyk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpAQCAtMzY1MywxMSArMzk3OCw4IEBACiBzdGF0aWMgdm9pZCBzZWdfZGVzY3RfdG9fa3ZtX2Rlc2N0KHN0cnVjdCBkZXNjX3N0cnVjdCAqc2VnX2Rlc2MsIHUxNiBzZWxlY3RvciwKIAkJCQkgICBzdHJ1Y3Qga3ZtX3NlZ21lbnQgKmt2bV9kZXNjdCkKIHsKLQlrdm1fZGVzY3QtPmJhc2UgPSBzZWdfZGVzYy0+YmFzZTA7Ci0Ja3ZtX2Rlc2N0LT5iYXNlIHw9IHNlZ19kZXNjLT5iYXNlMSA8PCAxNjsKLQlrdm1fZGVzY3QtPmJhc2UgfD0gc2VnX2Rlc2MtPmJhc2UyIDw8IDI0OwotCWt2bV9kZXNjdC0+bGltaXQgPSBzZWdfZGVzYy0+bGltaXQwOwotCWt2bV9kZXNjdC0+bGltaXQgfD0gc2VnX2Rlc2MtPmxpbWl0IDw8IDE2OworCWt2bV9kZXNjdC0+YmFzZSA9IGdldF9kZXNjX2Jhc2Uoc2VnX2Rlc2MpOworCWt2bV9kZXNjdC0+bGltaXQgPSBnZXRfZGVzY19saW1pdChzZWdfZGVzYyk7CiAJaWYgKHNlZ19kZXNjLT5nKSB7CiAJCWt2bV9kZXNjdC0+bGltaXQgPDw9IDEyOwogCQlrdm1fZGVzY3QtPmxpbWl0IHw9IDB4ZmZmOwpAQCAtMzcwMSw3ICs0MDIzLDYgQEAKIHN0YXRpYyBpbnQgbG9hZF9ndWVzdF9zZWdtZW50X2Rlc2NyaXB0b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgc2VsZWN0b3IsCiAJCQkJCSBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKnNlZ19kZXNjKQogewotCWdwYV90IGdwYTsKIAlzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSBkdGFibGU7CiAJdTE2IGluZGV4ID0gc2VsZWN0b3IgPj4gMzsKIApAQCAtMzcxMSwxNiArNDAzMiwxMyBAQAogCQlrdm1fcXVldWVfZXhjZXB0aW9uX2UodmNwdSwgR1BfVkVDVE9SLCBzZWxlY3RvciAmIDB4ZmZmYyk7CiAJCXJldHVybiAxOwogCX0KLQlncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGR0YWJsZS5iYXNlKTsKLQlncGEgKz0gaW5kZXggKiA4OwotCXJldHVybiBrdm1fcmVhZF9ndWVzdCh2Y3B1LT5rdm0sIGdwYSwgc2VnX2Rlc2MsIDgpOworCXJldHVybiBrdm1fcmVhZF9ndWVzdF92aXJ0KGR0YWJsZS5iYXNlICsgaW5kZXgqOCwgc2VnX2Rlc2MsIHNpemVvZigqc2VnX2Rlc2MpLCB2Y3B1KTsKIH0KIAogLyogYWxsb3dlZCBqdXN0IGZvciA4IGJ5dGVzIHNlZ21lbnRzICovCiBzdGF0aWMgaW50IHNhdmVfZ3Vlc3Rfc2VnbWVudF9kZXNjcmlwdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHNlbGVjdG9yLAogCQkJCQkgc3RydWN0IGRlc2Nfc3RydWN0ICpzZWdfZGVzYykKIHsKLQlncGFfdCBncGE7CiAJc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgZHRhYmxlOwogCXUxNiBpbmRleCA9IHNlbGVjdG9yID4+IDM7CiAKQEAgLTM3MjgsMTkgKzQwNDYsMTMgQEAKIAogCWlmIChkdGFibGUubGltaXQgPCBpbmRleCAqIDggKyA3KQogCQlyZXR1cm4gMTsKLQlncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGR0YWJsZS5iYXNlKTsKLQlncGEgKz0gaW5kZXggKiA4OwotCXJldHVybiBrdm1fd3JpdGVfZ3Vlc3QodmNwdS0+a3ZtLCBncGEsIHNlZ19kZXNjLCA4KTsKKwlyZXR1cm4ga3ZtX3dyaXRlX2d1ZXN0X3ZpcnQoZHRhYmxlLmJhc2UgKyBpbmRleCo4LCBzZWdfZGVzYywgc2l6ZW9mKCpzZWdfZGVzYyksIHZjcHUpOwogfQogCiBzdGF0aWMgdTMyIGdldF90c3NfYmFzZV9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCSAgICAgc3RydWN0IGRlc2Nfc3RydWN0ICpzZWdfZGVzYykKIHsKLQl1MzIgYmFzZV9hZGRyOwotCi0JYmFzZV9hZGRyID0gc2VnX2Rlc2MtPmJhc2UwOwotCWJhc2VfYWRkciB8PSAoc2VnX2Rlc2MtPmJhc2UxIDw8IDE2KTsKLQliYXNlX2FkZHIgfD0gKHNlZ19kZXNjLT5iYXNlMiA8PCAyNCk7CisJdTMyIGJhc2VfYWRkciA9IGdldF9kZXNjX2Jhc2Uoc2VnX2Rlc2MpOwogCiAJcmV0dXJuIHZjcHUtPmFyY2gubW11Lmd2YV90b19ncGEodmNwdSwgYmFzZV9hZGRyKTsKIH0KQEAgLTM3ODUsMTIgKzQwOTcsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpc192bTg2X3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2VnKQoreworCXJldHVybiAoc2VnICE9IFZDUFVfU1JFR19MRFRSKSAmJgorCQkoc2VnICE9IFZDUFVfU1JFR19UUikgJiYKKwkJKGt2bV94ODZfb3BzLT5nZXRfcmZsYWdzKHZjcHUpICYgWDg2X0VGTEFHU19WTSk7Cit9CisKIGludCBrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgc2VsZWN0b3IsCiAJCQkJaW50IHR5cGVfYml0cywgaW50IHNlZykKIHsKIAlzdHJ1Y3Qga3ZtX3NlZ21lbnQga3ZtX3NlZzsKIAotCWlmICghKHZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkpCisJaWYgKGlzX3ZtODZfc2VnbWVudCh2Y3B1LCBzZWcpIHx8ICEodmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1BFKSkKIAkJcmV0dXJuIGt2bV9sb2FkX3JlYWxtb2RlX3NlZ21lbnQodmNwdSwgc2VsZWN0b3IsIHNlZyk7CiAJaWYgKGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yX3RvX2t2bV9kZXNjdCh2Y3B1LCBzZWxlY3RvciwgJmt2bV9zZWcpKQogCQlyZXR1cm4gMTsKQEAgLTQwMjksNyArNDM0OCw3IEBACiAJCX0KIAl9CiAKLQlpZiAoIW5zZWdfZGVzYy5wIHx8IChuc2VnX2Rlc2MubGltaXQwIHwgbnNlZ19kZXNjLmxpbWl0IDw8IDE2KSA8IDB4NjcpIHsKKwlpZiAoIW5zZWdfZGVzYy5wIHx8IGdldF9kZXNjX2xpbWl0KCZuc2VnX2Rlc2MpIDwgMHg2NykgewogCQlrdm1fcXVldWVfZXhjZXB0aW9uX2UodmNwdSwgVFNfVkVDVE9SLCB0c3Nfc2VsZWN0b3IgJiAweGZmZmMpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC00MDk5LDEzICs0NDE4LDcgQEAKIAogCXZjcHUtPmFyY2guY3IyID0gc3JlZ3MtPmNyMjsKIAltbXVfcmVzZXRfbmVlZGVkIHw9IHZjcHUtPmFyY2guY3IzICE9IHNyZWdzLT5jcjM7Ci0KLQlkb3duX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7Ci0JaWYgKGdmbl90b19tZW1zbG90KHZjcHUtPmt2bSwgc3JlZ3MtPmNyMyA+PiBQQUdFX1NISUZUKSkKLQkJdmNwdS0+YXJjaC5jcjMgPSBzcmVncy0+Y3IzOwotCWVsc2UKLQkJc2V0X2JpdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgJnZjcHUtPnJlcXVlc3RzKTsKLQl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOworCXZjcHUtPmFyY2guY3IzID0gc3JlZ3MtPmNyMzsKIAogCWt2bV9zZXRfY3I4KHZjcHUsIHNyZWdzLT5jcjgpOwogCkBAIC00MTQ3LDggKzQ0NjAsMTAgQEAKIAlrdm1fc2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT50ciwgVkNQVV9TUkVHX1RSKTsKIAlrdm1fc2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5sZHQsIFZDUFVfU1JFR19MRFRSKTsKIAorCXVwZGF0ZV9jcjhfaW50ZXJjZXB0KHZjcHUpOworCiAJLyogT2xkZXIgdXNlcnNwYWNlIHdvbid0IHVuaGFsdCB0aGUgdmNwdSBvbiByZXNldC4gKi8KLQlpZiAodmNwdS0+dmNwdV9pZCA9PSAwICYmIGt2bV9yaXBfcmVhZCh2Y3B1KSA9PSAweGZmZjAgJiYKKwlpZiAoa3ZtX3ZjcHVfaXNfYnNwKHZjcHUpICYmIGt2bV9yaXBfcmVhZCh2Y3B1KSA9PSAweGZmZjAgJiYKIAkgICAgc3JlZ3MtPmNzLnNlbGVjdG9yID09IDB4ZjAwMCAmJiBzcmVncy0+Y3MuYmFzZSA9PSAweGZmZmYwMDAwICYmCiAJICAgICEodmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1BFKSkKIAkJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9SVU5OQUJMRTsKQEAgLTQ0MTksNyArNDczNCw3IEBACiAJa3ZtID0gdmNwdS0+a3ZtOwogCiAJdmNwdS0+YXJjaC5tbXUucm9vdF9ocGEgPSBJTlZBTElEX1BBR0U7Ci0JaWYgKCFpcnFjaGlwX2luX2tlcm5lbChrdm0pIHx8IHZjcHUtPnZjcHVfaWQgPT0gMCkKKwlpZiAoIWlycWNoaXBfaW5fa2VybmVsKGt2bSkgfHwga3ZtX3ZjcHVfaXNfYnNwKHZjcHUpKQogCQl2Y3B1LT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFOwogCWVsc2UKIAkJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9VTklOSVRJQUxJWkVEOwpAQCAtNDQ0MSw2ICs0NzU2LDE0IEBACiAJCQlnb3RvIGZhaWxfbW11X2Rlc3Ryb3k7CiAJfQogCisJdmNwdS0+YXJjaC5tY2VfYmFua3MgPSBremFsbG9jKEtWTV9NQVhfTUNFX0JBTktTICogc2l6ZW9mKHU2NCkgKiA0LAorCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXZjcHUtPmFyY2gubWNlX2JhbmtzKSB7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbW11X2Rlc3Ryb3k7CisJfQorCXZjcHUtPmFyY2gubWNnX2NhcCA9IEtWTV9NQVhfTUNFX0JBTktTOworCiAJcmV0dXJuIDA7CiAKIGZhaWxfbW11X2Rlc3Ryb3k6CkBAIC00NDg4LDIwICs0ODExLDIyIEBACiBzdGF0aWMgdm9pZCBrdm1fZnJlZV92Y3B1cyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCiAJLyoKIAkgKiBVbnBpbiBhbnkgbW11IHBhZ2VzIGZpcnN0LgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyArK2kpCi0JCWlmIChrdm0tPnZjcHVzW2ldKQotCQkJa3ZtX3VubG9hZF92Y3B1X21tdShrdm0tPnZjcHVzW2ldKTsKLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKSB7Ci0JCWlmIChrdm0tPnZjcHVzW2ldKSB7Ci0JCQlrdm1fYXJjaF92Y3B1X2ZyZWUoa3ZtLT52Y3B1c1tpXSk7Ci0JCQlrdm0tPnZjcHVzW2ldID0gTlVMTDsKLQkJfQotCX0KKwlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pCisJCWt2bV91bmxvYWRfdmNwdV9tbXUodmNwdSk7CisJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKQorCQlrdm1fYXJjaF92Y3B1X2ZyZWUodmNwdSk7CiAKKwltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBhdG9taWNfcmVhZCgma3ZtLT5vbmxpbmVfdmNwdXMpOyBpKyspCisJCWt2bS0+dmNwdXNbaV0gPSBOVUxMOworCisJYXRvbWljX3NldCgma3ZtLT5vbmxpbmVfdmNwdXMsIDApOworCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIH0KIAogdm9pZCBrdm1fYXJjaF9zeW5jX2V2ZW50cyhzdHJ1Y3Qga3ZtICprdm0pCkBAIC00NTc4LDcgKzQ5MDMsNiBAQAogCiAJa3ZtX21tdV9zbG90X3JlbW92ZV93cml0ZV9hY2Nlc3Moa3ZtLCBtZW0tPnNsb3QpOwogCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKLQlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDU5Miw4ICs0OTE2LDEwIEBACiBpbnQga3ZtX2FyY2hfdmNwdV9ydW5uYWJsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJcmV0dXJuIHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFCi0JICAgICAgIHx8IHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1NJUElfUkVDRUlWRUQKLQkgICAgICAgfHwgdmNwdS0+YXJjaC5ubWlfcGVuZGluZzsKKwkJfHwgdmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfU0lQSV9SRUNFSVZFRAorCQl8fCB2Y3B1LT5hcmNoLm5taV9wZW5kaW5nIHx8CisJCShrdm1fYXJjaF9pbnRlcnJ1cHRfYWxsb3dlZCh2Y3B1KSAmJgorCQkga3ZtX2NwdV9oYXNfaW50ZXJydXB0KHZjcHUpKTsKIH0KIAogdm9pZCBrdm1fdmNwdV9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTQ2MTcsMyArNDk0Myw5IEBACiB7CiAJcmV0dXJuIGt2bV94ODZfb3BzLT5pbnRlcnJ1cHRfYWxsb3dlZCh2Y3B1KTsKIH0KKworRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChrdm1fZXhpdCk7CitFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGt2bV9pbmpfdmlycSk7CitFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGt2bV9wYWdlX2ZhdWx0KTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoa3ZtX21zcik7CitFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGt2bV9jcik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKaW5kZXggNGM4ZTEwYS4uNWVhZGVhNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCisrKyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtMzEsNCArMzEsOCBAQAogewogCXJldHVybiAobnIgPT0gQlBfVkVDVE9SKSB8fCAobnIgPT0gT0ZfVkVDVE9SKTsKIH0KKworc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmt2bV9maW5kX2NwdWlkX2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBmdW5jdGlvbiwgdTMyIGluZGV4KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS94ODZfZW11bGF0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTZkZTQ2Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2t2bS94ODZfZW11bGF0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiB4ODZfZW11bGF0ZS5jCi0gKgotICogR2VuZXJpYyB4ODYgKDMyLWJpdCBhbmQgNjQtYml0KSBpbnN0cnVjdGlvbiBkZWNvZGVyIGFuZCBlbXVsYXRvci4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgS2VpciBGcmFzZXIKLSAqCi0gKiBMaW51eCBjb2Rpbmcgc3R5bGUsIG1vZCByL20gZGVjb2Rlciwgc2VnbWVudCBiYXNlIGZpeGVzLCByZWFsLW1vZGUKLSAqIHByaXZpbGVnZWQgaW5zdHJ1Y3Rpb25zOgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBRdW1yYW5ldAotICoKLSAqICAgQXZpIEtpdml0eSA8YXZpQHF1bXJhbmV0LmNvbT4KLSAqICAgWWFuaXYgS2FtYXkgPHlhbml2QHF1bXJhbmV0LmNvbT4KLSAqCi0gKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIuICBTZWUKLSAqIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCi0gKgotICogRnJvbTogeGVuLXVuc3RhYmxlIDEwNjc2OmFmOTgwOWY1MWY4MWEzYzQzZjI3NmYwMGM4MWE1MmVmNTU4YWZkYTQKLSAqLwotCi0jaWZuZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHB1YmxpYy94ZW4uaD4KLSNkZWZpbmUgRFBSSU5URihfZiwgX2EgLi4uKSBwcmludGYoX2YgLCAjIyBfYSkKLSNlbHNlCi0jaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KLSNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgotI2RlZmluZSBEUFJJTlRGKHguLi4pIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2t2bV94ODZfZW11bGF0ZS5oPgotCi0vKgotICogT3Bjb2RlIGVmZmVjdGl2ZS1hZGRyZXNzIGRlY29kZSB0YWJsZXMuCi0gKiBOb3RlIHRoYXQgd2Ugb25seSBlbXVsYXRlIGluc3RydWN0aW9ucyB0aGF0IGhhdmUgYXQgbGVhc3Qgb25lIG1lbW9yeQotICogb3BlcmFuZCAoZXhjbHVkaW5nIGltcGxpY2l0IHN0YWNrIHJlZmVyZW5jZXMpLiBXZSBhc3N1bWUgdGhhdCBzdGFjawotICogcmVmZXJlbmNlcyBhbmQgaW5zdHJ1Y3Rpb24gZmV0Y2hlcyB3aWxsIG5ldmVyIG9jY3VyIGluIHNwZWNpYWwgbWVtb3J5Ci0gKiBhcmVhcyB0aGF0IHJlcXVpcmUgZW11bGF0aW9uLiBTbywgZm9yIGV4YW1wbGUsICdtb3YgPGltbT4sPHJlZz4nIG5lZWQKLSAqIG5vdCBiZSBoYW5kbGVkLgotICovCi0KLS8qIE9wZXJhbmQgc2l6ZXM6IDgtYml0IG9wZXJhbmRzIG9yIHNwZWNpZmllZC9vdmVycmlkZGVuIHNpemUuICovCi0jZGVmaW5lIEJ5dGVPcCAgICAgICgxPDwwKQkvKiA4LWJpdCBvcGVyYW5kcy4gKi8KLS8qIERlc3RpbmF0aW9uIG9wZXJhbmQgdHlwZS4gKi8KLSNkZWZpbmUgSW1wbGljaXRPcHMgKDE8PDEpCS8qIEltcGxpY2l0IGluIG9wY29kZS4gTm8gZ2VuZXJpYyBkZWNvZGUuICovCi0jZGVmaW5lIERzdFJlZyAgICAgICgyPDwxKQkvKiBSZWdpc3RlciBvcGVyYW5kLiAqLwotI2RlZmluZSBEc3RNZW0gICAgICAoMzw8MSkJLyogTWVtb3J5IG9wZXJhbmQuICovCi0jZGVmaW5lIERzdEFjYyAgICAgICg0PDwxKSAgICAgIC8qIERlc3RpbmF0aW9uIEFjY3VtdWxhdG9yICovCi0jZGVmaW5lIERzdE1hc2sgICAgICg3PDwxKQotLyogU291cmNlIG9wZXJhbmQgdHlwZS4gKi8KLSNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDQpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNJbXBsaWNpdCAoMDw8NCkJLyogU291cmNlIG9wZXJhbmQgaXMgaW1wbGljaXQgaW4gdGhlIG9wY29kZS4gKi8KLSNkZWZpbmUgU3JjUmVnICAgICAgKDE8PDQpCS8qIFJlZ2lzdGVyIG9wZXJhbmQuICovCi0jZGVmaW5lIFNyY01lbSAgICAgICgyPDw0KQkvKiBNZW1vcnkgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjTWVtMTYgICAgKDM8PDQpCS8qIE1lbW9yeSBvcGVyYW5kICgxNi1iaXQpLiAqLwotI2RlZmluZSBTcmNNZW0zMiAgICAoNDw8NCkJLyogTWVtb3J5IG9wZXJhbmQgKDMyLWJpdCkuICovCi0jZGVmaW5lIFNyY0ltbSAgICAgICg1PDw0KQkvKiBJbW1lZGlhdGUgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjSW1tQnl0ZSAgKDY8PDQpCS8qIDgtYml0IHNpZ24tZXh0ZW5kZWQgaW1tZWRpYXRlIG9wZXJhbmQuICovCi0jZGVmaW5lIFNyY09uZSAgICAgICg3PDw0KQkvKiBJbXBsaWVkICcxJyAqLwotI2RlZmluZSBTcmNJbW1VQnl0ZSAoODw8NCkgICAgICAvKiA4LWJpdCB1bnNpZ25lZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjTWFzayAgICAgKDB4Zjw8NCkKLS8qIEdlbmVyaWMgTW9kUk0gZGVjb2RlLiAqLwotI2RlZmluZSBNb2RSTSAgICAgICAoMTw8OCkKLS8qIERlc3RpbmF0aW9uIGlzIG9ubHkgd3JpdHRlbjsgbmV2ZXIgcmVhZC4gKi8KLSNkZWZpbmUgTW92ICAgICAgICAgKDE8PDkpCi0jZGVmaW5lIEJpdE9wICAgICAgICgxPDwxMCkKLSNkZWZpbmUgTWVtQWJzICAgICAgKDE8PDExKSAgICAgIC8qIE1lbW9yeSBvcGVyYW5kIGlzIGFic29sdXRlIGRpc3BsYWNlbWVudCAqLwotI2RlZmluZSBTdHJpbmcgICAgICAoMTw8MTIpICAgICAvKiBTdHJpbmcgaW5zdHJ1Y3Rpb24gKHJlcCBjYXBhYmxlKSAqLwotI2RlZmluZSBTdGFjayAgICAgICAoMTw8MTMpICAgICAvKiBTdGFjayBpbnN0cnVjdGlvbiAocHVzaC9wb3ApICovCi0jZGVmaW5lIEdyb3VwICAgICAgICgxPDwxNCkgICAgIC8qIEJpdHMgMzo1IG9mIG1vZHJtIGJ5dGUgZXh0ZW5kIG9wY29kZSAqLwotI2RlZmluZSBHcm91cER1YWwgICAoMTw8MTUpICAgICAvKiBBbHRlcm5hdGUgZGVjb2Rpbmcgb2YgbW9kID09IDMgKi8KLSNkZWZpbmUgR3JvdXBNYXNrICAgMHhmZiAgICAgICAgLyogR3JvdXAgbnVtYmVyIHN0b3JlZCBpbiBiaXRzIDA6NyAqLwotLyogU291cmNlIDIgb3BlcmFuZCB0eXBlICovCi0jZGVmaW5lIFNyYzJOb25lICAgICgwPDwyOSkKLSNkZWZpbmUgU3JjMkNMICAgICAgKDE8PDI5KQotI2RlZmluZSBTcmMySW1tQnl0ZSAoMjw8MjkpCi0jZGVmaW5lIFNyYzJPbmUgICAgICgzPDwyOSkKLSNkZWZpbmUgU3JjMkltbTE2ICAgKDQ8PDI5KQotI2RlZmluZSBTcmMyTWFzayAgICAoNzw8MjkpCi0KLWVudW0gewotCUdyb3VwMV84MCwgR3JvdXAxXzgxLCBHcm91cDFfODIsIEdyb3VwMV84MywKLQlHcm91cDFBLCBHcm91cDNfQnl0ZSwgR3JvdXAzLCBHcm91cDQsIEdyb3VwNSwgR3JvdXA3LAotfTsKLQotc3RhdGljIHUzMiBvcGNvZGVfdGFibGVbMjU2XSA9IHsKLQkvKiAweDAwIC0gMHgwNyAqLwotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKLQlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCi0JQnl0ZU9wIHwgRHN0QWNjIHwgU3JjSW1tLCBEc3RBY2MgfCBTcmNJbW0sIDAsIDAsCi0JLyogMHgwOCAtIDB4MEYgKi8KLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sCi0JQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLAotCTAsIDAsIDAsIDAsCi0JLyogMHgxMCAtIDB4MTcgKi8KLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sCi0JQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLAotCTAsIDAsIDAsIDAsCi0JLyogMHgxOCAtIDB4MUYgKi8KLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sCi0JQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLAotCTAsIDAsIDAsIDAsCi0JLyogMHgyMCAtIDB4MjcgKi8KLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sCi0JQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLAotCURzdEFjYyB8IFNyY0ltbUJ5dGUsIERzdEFjYyB8IFNyY0ltbSwgMCwgMCwKLQkvKiAweDI4IC0gMHgyRiAqLwotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKLQlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCi0JMCwgMCwgMCwgMCwKLQkvKiAweDMwIC0gMHgzNyAqLwotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKLQlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCi0JMCwgMCwgMCwgMCwKLQkvKiAweDM4IC0gMHgzRiAqLwotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKLQlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCi0JQnl0ZU9wIHwgRHN0QWNjIHwgU3JjSW1tLCBEc3RBY2MgfCBTcmNJbW0sCi0JMCwgMCwKLQkvKiAweDQwIC0gMHg0NyAqLwotCURzdFJlZywgRHN0UmVnLCBEc3RSZWcsIERzdFJlZywgRHN0UmVnLCBEc3RSZWcsIERzdFJlZywgRHN0UmVnLAotCS8qIDB4NDggLSAweDRGICovCi0JRHN0UmVnLCBEc3RSZWcsIERzdFJlZywgRHN0UmVnLAlEc3RSZWcsIERzdFJlZywgRHN0UmVnLCBEc3RSZWcsCi0JLyogMHg1MCAtIDB4NTcgKi8KLQlTcmNSZWcgfCBTdGFjaywgU3JjUmVnIHwgU3RhY2ssIFNyY1JlZyB8IFN0YWNrLCBTcmNSZWcgfCBTdGFjaywKLQlTcmNSZWcgfCBTdGFjaywgU3JjUmVnIHwgU3RhY2ssIFNyY1JlZyB8IFN0YWNrLCBTcmNSZWcgfCBTdGFjaywKLQkvKiAweDU4IC0gMHg1RiAqLwotCURzdFJlZyB8IFN0YWNrLCBEc3RSZWcgfCBTdGFjaywgRHN0UmVnIHwgU3RhY2ssIERzdFJlZyB8IFN0YWNrLAotCURzdFJlZyB8IFN0YWNrLCBEc3RSZWcgfCBTdGFjaywgRHN0UmVnIHwgU3RhY2ssIERzdFJlZyB8IFN0YWNrLAotCS8qIDB4NjAgLSAweDY3ICovCi0JMCwgMCwgMCwgRHN0UmVnIHwgU3JjTWVtMzIgfCBNb2RSTSB8IE1vdiAvKiBtb3ZzeGQgKHg4Ni82NCkgKi8gLAotCTAsIDAsIDAsIDAsCi0JLyogMHg2OCAtIDB4NkYgKi8KLQlTcmNJbW0gfCBNb3YgfCBTdGFjaywgMCwgU3JjSW1tQnl0ZSB8IE1vdiB8IFN0YWNrLCAwLAotCVNyY05vbmUgIHwgQnl0ZU9wICB8IEltcGxpY2l0T3BzLCBTcmNOb25lICB8IEltcGxpY2l0T3BzLCAvKiBpbnNiLCBpbnN3L2luc2QgKi8KLQlTcmNOb25lICB8IEJ5dGVPcCAgfCBJbXBsaWNpdE9wcywgU3JjTm9uZSAgfCBJbXBsaWNpdE9wcywgLyogb3V0c2IsIG91dHN3L291dHNkICovCi0JLyogMHg3MCAtIDB4NzcgKi8KLQlTcmNJbW1CeXRlLCBTcmNJbW1CeXRlLCBTcmNJbW1CeXRlLCBTcmNJbW1CeXRlLAotCVNyY0ltbUJ5dGUsIFNyY0ltbUJ5dGUsIFNyY0ltbUJ5dGUsIFNyY0ltbUJ5dGUsCi0JLyogMHg3OCAtIDB4N0YgKi8KLQlTcmNJbW1CeXRlLCBTcmNJbW1CeXRlLCBTcmNJbW1CeXRlLCBTcmNJbW1CeXRlLAotCVNyY0ltbUJ5dGUsIFNyY0ltbUJ5dGUsIFNyY0ltbUJ5dGUsIFNyY0ltbUJ5dGUsCi0JLyogMHg4MCAtIDB4ODcgKi8KLQlHcm91cCB8IEdyb3VwMV84MCwgR3JvdXAgfCBHcm91cDFfODEsCi0JR3JvdXAgfCBHcm91cDFfODIsIEdyb3VwIHwgR3JvdXAxXzgzLAotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sCi0JLyogMHg4OCAtIDB4OEYgKi8KLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IE1vdiwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBNb3YsCi0JQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LAotCURzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTW92LCBNb2RSTSB8IERzdFJlZywKLQlEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgR3JvdXAgfCBHcm91cDFBLAotCS8qIDB4OTAgLSAweDk3ICovCi0JRHN0UmVnLCBEc3RSZWcsIERzdFJlZywgRHN0UmVnLAlEc3RSZWcsIERzdFJlZywgRHN0UmVnLCBEc3RSZWcsCi0JLyogMHg5OCAtIDB4OUYgKi8KLQkwLCAwLCBTcmNJbW0gfCBTcmMySW1tMTYsIDAsCi0JSW1wbGljaXRPcHMgfCBTdGFjaywgSW1wbGljaXRPcHMgfCBTdGFjaywgMCwgMCwKLQkvKiAweEEwIC0gMHhBNyAqLwotCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vdiB8IE1lbUFicywgRHN0UmVnIHwgU3JjTWVtIHwgTW92IHwgTWVtQWJzLAotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vdiB8IE1lbUFicywgRHN0TWVtIHwgU3JjUmVnIHwgTW92IHwgTWVtQWJzLAotCUJ5dGVPcCB8IEltcGxpY2l0T3BzIHwgTW92IHwgU3RyaW5nLCBJbXBsaWNpdE9wcyB8IE1vdiB8IFN0cmluZywKLQlCeXRlT3AgfCBJbXBsaWNpdE9wcyB8IFN0cmluZywgSW1wbGljaXRPcHMgfCBTdHJpbmcsCi0JLyogMHhBOCAtIDB4QUYgKi8KLQkwLCAwLCBCeXRlT3AgfCBJbXBsaWNpdE9wcyB8IE1vdiB8IFN0cmluZywgSW1wbGljaXRPcHMgfCBNb3YgfCBTdHJpbmcsCi0JQnl0ZU9wIHwgSW1wbGljaXRPcHMgfCBNb3YgfCBTdHJpbmcsIEltcGxpY2l0T3BzIHwgTW92IHwgU3RyaW5nLAotCUJ5dGVPcCB8IEltcGxpY2l0T3BzIHwgU3RyaW5nLCBJbXBsaWNpdE9wcyB8IFN0cmluZywKLQkvKiAweEIwIC0gMHhCNyAqLwotCUJ5dGVPcCB8IERzdFJlZyB8IFNyY0ltbSB8IE1vdiwgQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LAotCUJ5dGVPcCB8IERzdFJlZyB8IFNyY0ltbSB8IE1vdiwgQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LAotCUJ5dGVPcCB8IERzdFJlZyB8IFNyY0ltbSB8IE1vdiwgQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LAotCUJ5dGVPcCB8IERzdFJlZyB8IFNyY0ltbSB8IE1vdiwgQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LAotCS8qIDB4QjggLSAweEJGICovCi0JRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCi0JRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCi0JRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCi0JRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCi0JLyogMHhDMCAtIDB4QzcgKi8KLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1tQnl0ZSB8IE1vZFJNLAotCTAsIEltcGxpY2l0T3BzIHwgU3RhY2ssIDAsIDAsCi0JQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0gfCBNb3YsIERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTW92LAotCS8qIDB4QzggLSAweENGICovCi0JMCwgMCwgMCwgSW1wbGljaXRPcHMgfCBTdGFjaywKLQlJbXBsaWNpdE9wcywgU3JjSW1tQnl0ZSwgSW1wbGljaXRPcHMsIEltcGxpY2l0T3BzLAotCS8qIDB4RDAgLSAweEQ3ICovCi0JQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1wbGljaXQgfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1wbGljaXQgfCBNb2RSTSwKLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbXBsaWNpdCB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbXBsaWNpdCB8IE1vZFJNLAotCTAsIDAsIDAsIDAsCi0JLyogMHhEOCAtIDB4REYgKi8KLQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotCS8qIDB4RTAgLSAweEU3ICovCi0JMCwgMCwgMCwgMCwKLQlCeXRlT3AgfCBTcmNJbW1VQnl0ZSwgU3JjSW1tVUJ5dGUsCi0JQnl0ZU9wIHwgU3JjSW1tVUJ5dGUsIFNyY0ltbVVCeXRlLAotCS8qIDB4RTggLSAweEVGICovCi0JU3JjSW1tIHwgU3RhY2ssIFNyY0ltbSB8IEltcGxpY2l0T3BzLAotCVNyY0ltbSB8IFNyYzJJbW0xNiwgU3JjSW1tQnl0ZSB8IEltcGxpY2l0T3BzLAotCVNyY05vbmUgfCBCeXRlT3AgfCBJbXBsaWNpdE9wcywgU3JjTm9uZSB8IEltcGxpY2l0T3BzLAotCVNyY05vbmUgfCBCeXRlT3AgfCBJbXBsaWNpdE9wcywgU3JjTm9uZSB8IEltcGxpY2l0T3BzLAotCS8qIDB4RjAgLSAweEY3ICovCi0JMCwgMCwgMCwgMCwKLQlJbXBsaWNpdE9wcywgSW1wbGljaXRPcHMsIEdyb3VwIHwgR3JvdXAzX0J5dGUsIEdyb3VwIHwgR3JvdXAzLAotCS8qIDB4RjggLSAweEZGICovCi0JSW1wbGljaXRPcHMsIDAsIEltcGxpY2l0T3BzLCBJbXBsaWNpdE9wcywKLQlJbXBsaWNpdE9wcywgSW1wbGljaXRPcHMsIEdyb3VwIHwgR3JvdXA0LCBHcm91cCB8IEdyb3VwNSwKLX07Ci0KLXN0YXRpYyB1MzIgdHdvYnl0ZV90YWJsZVsyNTZdID0gewotCS8qIDB4MDAgLSAweDBGICovCi0JMCwgR3JvdXAgfCBHcm91cER1YWwgfCBHcm91cDcsIDAsIDAsIDAsIDAsIEltcGxpY2l0T3BzLCAwLAotCUltcGxpY2l0T3BzLCBJbXBsaWNpdE9wcywgMCwgMCwgMCwgSW1wbGljaXRPcHMgfCBNb2RSTSwgMCwgMCwKLQkvKiAweDEwIC0gMHgxRiAqLwotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIEltcGxpY2l0T3BzIHwgTW9kUk0sIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JLyogMHgyMCAtIDB4MkYgKi8KLQlNb2RSTSB8IEltcGxpY2l0T3BzLCBNb2RSTSwgTW9kUk0gfCBJbXBsaWNpdE9wcywgTW9kUk0sIDAsIDAsIDAsIDAsCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkvKiAweDMwIC0gMHgzRiAqLwotCUltcGxpY2l0T3BzLCAwLCBJbXBsaWNpdE9wcywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkvKiAweDQwIC0gMHg0NyAqLwotCURzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwKLQlEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCi0JRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LAotCURzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwKLQkvKiAweDQ4IC0gMHg0RiAqLwotCURzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwKLQlEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCi0JRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LAotCURzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwKLQkvKiAweDUwIC0gMHg1RiAqLwotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JLyogMHg2MCAtIDB4NkYgKi8KLQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotCS8qIDB4NzAgLSAweDdGICovCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkvKiAweDgwIC0gMHg4RiAqLwotCVNyY0ltbSwgU3JjSW1tLCBTcmNJbW0sIFNyY0ltbSwgU3JjSW1tLCBTcmNJbW0sIFNyY0ltbSwgU3JjSW1tLAotCVNyY0ltbSwgU3JjSW1tLCBTcmNJbW0sIFNyY0ltbSwgU3JjSW1tLCBTcmNJbW0sIFNyY0ltbSwgU3JjSW1tLAotCS8qIDB4OTAgLSAweDlGICovCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkvKiAweEEwIC0gMHhBNyAqLwotCTAsIDAsIDAsIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgQml0T3AsCi0JRHN0TWVtIHwgU3JjUmVnIHwgU3JjMkltbUJ5dGUgfCBNb2RSTSwKLQlEc3RNZW0gfCBTcmNSZWcgfCBTcmMyQ0wgfCBNb2RSTSwgMCwgMCwKLQkvKiAweEE4IC0gMHhBRiAqLwotCTAsIDAsIDAsIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgQml0T3AsCi0JRHN0TWVtIHwgU3JjUmVnIHwgU3JjMkltbUJ5dGUgfCBNb2RSTSwKLQlEc3RNZW0gfCBTcmNSZWcgfCBTcmMyQ0wgfCBNb2RSTSwKLQlNb2RSTSwgMCwKLQkvKiAweEIwIC0gMHhCNyAqLwotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgMCwKLQkgICAgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBCaXRPcCwKLQkwLCAwLCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwKLQkgICAgRHN0UmVnIHwgU3JjTWVtMTYgfCBNb2RSTSB8IE1vdiwKLQkvKiAweEI4IC0gMHhCRiAqLwotCTAsIDAsIERzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBCaXRPcCwKLQkwLCAwLCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwKLQkgICAgRHN0UmVnIHwgU3JjTWVtMTYgfCBNb2RSTSB8IE1vdiwKLQkvKiAweEMwIC0gMHhDRiAqLwotCTAsIDAsIDAsIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTW92LCAwLCAwLCAwLCBJbXBsaWNpdE9wcyB8IE1vZFJNLAotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JLyogMHhEMCAtIDB4REYgKi8KLQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotCS8qIDB4RTAgLSAweEVGICovCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkvKiAweEYwIC0gMHhGRiAqLwotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKLX07Ci0KLXN0YXRpYyB1MzIgZ3JvdXBfdGFibGVbXSA9IHsKLQlbR3JvdXAxXzgwKjhdID0KLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sCi0JQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIEJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwKLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sCi0JW0dyb3VwMV84MSo4XSA9Ci0JRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAotCURzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwKLQlEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sCi0JRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAotCVtHcm91cDFfODIqOF0gPQotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwKLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sCi0JQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIEJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwKLQlbR3JvdXAxXzgzKjhdID0KLQlEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSwKLQlEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSwKLQlEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSwKLQlEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSwKLQlbR3JvdXAxQSo4XSA9Ci0JRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNIHwgTW92IHwgU3RhY2ssIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JW0dyb3VwM19CeXRlKjhdID0KLQlCeXRlT3AgfCBTcmNJbW0gfCBEc3RNZW0gfCBNb2RSTSwgMCwKLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sIEJ5dGVPcCB8IERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwKLQkwLCAwLCAwLCAwLAotCVtHcm91cDMqOF0gPQotCURzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCAwLAotCURzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLAotCTAsIDAsIDAsIDAsCi0JW0dyb3VwNCo4XSA9Ci0JQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sCi0JMCwgMCwgMCwgMCwgMCwgMCwKLQlbR3JvdXA1KjhdID0KLQlEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sIERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwKLQlTcmNNZW0gfCBNb2RSTSB8IFN0YWNrLCAwLAotCVNyY01lbSB8IE1vZFJNIHwgU3RhY2ssIDAsIFNyY01lbSB8IE1vZFJNIHwgU3RhY2ssIDAsCi0JW0dyb3VwNyo4XSA9Ci0JMCwgMCwgTW9kUk0gfCBTcmNNZW0sIE1vZFJNIHwgU3JjTWVtLAotCVNyY05vbmUgfCBNb2RSTSB8IERzdE1lbSB8IE1vdiwgMCwKLQlTcmNNZW0xNiB8IE1vZFJNIHwgTW92LCBTcmNNZW0gfCBNb2RSTSB8IEJ5dGVPcCwKLX07Ci0KLXN0YXRpYyB1MzIgZ3JvdXAyX3RhYmxlW10gPSB7Ci0JW0dyb3VwNyo4XSA9Ci0JU3JjTm9uZSB8IE1vZFJNLCAwLCAwLCBTcmNOb25lIHwgTW9kUk0sCi0JU3JjTm9uZSB8IE1vZFJNIHwgRHN0TWVtIHwgTW92LCAwLAotCVNyY01lbTE2IHwgTW9kUk0gfCBNb3YsIDAsCi19OwotCi0vKiBFRkxBR1MgYml0IGRlZmluaXRpb25zLiAqLwotI2RlZmluZSBFRkxHX09GICgxPDwxMSkKLSNkZWZpbmUgRUZMR19ERiAoMTw8MTApCi0jZGVmaW5lIEVGTEdfU0YgKDE8PDcpCi0jZGVmaW5lIEVGTEdfWkYgKDE8PDYpCi0jZGVmaW5lIEVGTEdfQUYgKDE8PDQpCi0jZGVmaW5lIEVGTEdfUEYgKDE8PDIpCi0jZGVmaW5lIEVGTEdfQ0YgKDE8PDApCi0KLS8qCi0gKiBJbnN0cnVjdGlvbiBlbXVsYXRpb246Ci0gKiBNb3N0IGluc3RydWN0aW9ucyBhcmUgZW11bGF0ZWQgZGlyZWN0bHkgdmlhIGEgZnJhZ21lbnQgb2YgaW5saW5lIGFzc2VtYmx5Ci0gKiBjb2RlLiBUaGlzIGFsbG93cyB1cyB0byBzYXZlL3Jlc3RvcmUgRUZMQUdTIGFuZCB0aHVzIHZlcnkgZWFzaWx5IHBpY2sgdXAKLSAqIGFueSBtb2RpZmllZCBmbGFncy4KLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotI2RlZmluZSBfTE8zMiAiayIJCS8qIGZvcmNlIDMyLWJpdCBvcGVyYW5kICovCi0jZGVmaW5lIF9TVEsgICIlJXJzcCIJCS8qIHN0YWNrIHBvaW50ZXIgKi8KLSNlbGlmIGRlZmluZWQoX19pMzg2X18pCi0jZGVmaW5lIF9MTzMyICIiCQkvKiBmb3JjZSAzMi1iaXQgb3BlcmFuZCAqLwotI2RlZmluZSBfU1RLICAiJSVlc3AiCQkvKiBzdGFjayBwb2ludGVyICovCi0jZW5kaWYKLQotLyoKLSAqIFRoZXNlIEVGTEFHUyBiaXRzIGFyZSByZXN0b3JlZCBmcm9tIHNhdmVkIHZhbHVlIGR1cmluZyBlbXVsYXRpb24sIGFuZAotICogYW55IGNoYW5nZXMgYXJlIHdyaXR0ZW4gYmFjayB0byB0aGUgc2F2ZWQgdmFsdWUgYWZ0ZXIgZW11bGF0aW9uLgotICovCi0jZGVmaW5lIEVGTEFHU19NQVNLIChFRkxHX09GfEVGTEdfU0Z8RUZMR19aRnxFRkxHX0FGfEVGTEdfUEZ8RUZMR19DRikKLQotLyogQmVmb3JlIGV4ZWN1dGluZyBpbnN0cnVjdGlvbjogcmVzdG9yZSBuZWNlc3NhcnkgYml0cyBpbiBFRkxBR1MuICovCi0jZGVmaW5lIF9QUkVfRUZMQUdTKF9zYXYsIF9tc2ssIF90bXApCQkJCQlcCi0JLyogRUZMQUdTID0gKF9zYXYgJiBfbXNrKSB8IChFRkxBR1MgJiB+X21zayk7IF9zYXYgJj0gfl9tc2s7ICovIFwKLQkibW92bCAlIl9zYXYiLCUiX0xPMzIgX3RtcCI7ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSJwdXNoICUiX3RtcCI7ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JInB1c2ggJSJfdG1wIjsgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkibW92bCAlIl9tc2siLCUiX0xPMzIgX3RtcCI7ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSJhbmRsICUiX0xPMzIgX3RtcCIsKCJfU1RLIik7ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JInB1c2hmOyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkibm90bCAlIl9MTzMyIF90bXAiOyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSJhbmRsICUiX0xPMzIgX3RtcCIsKCJfU1RLIik7ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JImFuZGwgJSJfTE8zMiBfdG1wIiwiX19zdHJpbmdpZnkoQklUU19QRVJfTE9ORy80KSIoIl9TVEsiKTsgIglcCi0JInBvcCAgJSJfdG1wIjsgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkib3JsICAlIl9MTzMyIF90bXAiLCgiX1NUSyIpOyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSJwb3BmOyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JInBvcCAgJSJfc2F2IjsgIgotCi0vKiBBZnRlciBleGVjdXRpbmcgaW5zdHJ1Y3Rpb246IHdyaXRlLWJhY2sgbmVjZXNzYXJ5IGJpdHMgaW4gRUZMQUdTLiAqLwotI2RlZmluZSBfUE9TVF9FRkxBR1MoX3NhdiwgX21zaywgX3RtcCkgXAotCS8qIF9zYXYgfD0gRUZMQUdTICYgX21zazsgKi8JCVwKLQkicHVzaGY7ICIJCQkJXAotCSJwb3AgICUiX3RtcCI7ICIJCQlcCi0JImFuZGwgJSJfbXNrIiwlIl9MTzMyIF90bXAiOyAiCQlcCi0JIm9ybCAgJSJfTE8zMiBfdG1wIiwlIl9zYXYiOyAiCi0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIE9ONjQoeCkgeAotI2Vsc2UKLSNkZWZpbmUgT042NCh4KQotI2VuZGlmCi0KLSNkZWZpbmUgX19fX2VtdWxhdGVfMm9wKF9vcCwgX3NyYywgX2RzdCwgX2VmbGFncywgX3gsIF95LCBfc3VmZml4KQlcCi0JZG8gewkJCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQlcCi0JCQlfUFJFX0VGTEFHUygiMCIsICI0IiwgIjIiKQkJCVwKLQkJCV9vcCBfc3VmZml4ICIgJSJfeCIzLCUxOyAiCQkJXAotCQkJX1BPU1RfRUZMQUdTKCIwIiwgIjQiLCAiMiIpCQkJXAotCQkJOiAiPW0iIChfZWZsYWdzKSwgIj1tIiAoKF9kc3QpLnZhbCksCQlcCi0JCQkgICI9JnIiIChfdG1wKQkJCQkJXAotCQkJOiBfeSAoKF9zcmMpLnZhbCksICJpIiAoRUZMQUdTX01BU0spKTsJCVwKLQl9IHdoaWxlICgwKQotCi0KLS8qIFJhdyBlbXVsYXRpb246IGluc3RydWN0aW9uIGhhcyB0d28gZXhwbGljaXQgb3BlcmFuZHMuICovCi0jZGVmaW5lIF9fZW11bGF0ZV8yb3Bfbm9ieXRlKF9vcCxfc3JjLF9kc3QsX2VmbGFncyxfd3gsX3d5LF9seCxfbHksX3F4LF9xeSkgXAotCWRvIHsJCQkJCQkJCVwKLQkJdW5zaWduZWQgbG9uZyBfdG1wOwkJCQkJXAotCQkJCQkJCQkJXAotCQlzd2l0Y2ggKChfZHN0KS5ieXRlcykgewkJCQkJXAotCQljYXNlIDI6CQkJCQkJCVwKLQkJCV9fX19lbXVsYXRlXzJvcChfb3AsX3NyYyxfZHN0LF9lZmxhZ3MsX3d4LF93eSwidyIpOyBcCi0JCQlicmVhazsJCQkJCQlcCi0JCWNhc2UgNDoJCQkJCQkJXAotCQkJX19fX2VtdWxhdGVfMm9wKF9vcCxfc3JjLF9kc3QsX2VmbGFncyxfbHgsX2x5LCJsIik7IFwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSA4OgkJCQkJCQlcCi0JCQlPTjY0KF9fX19lbXVsYXRlXzJvcChfb3AsX3NyYyxfZHN0LF9lZmxhZ3MsX3F4LF9xeSwicSIpKTsgXAotCQkJYnJlYWs7CQkJCQkJXAotCQl9CQkJCQkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9fZW11bGF0ZV8yb3AoX29wLF9zcmMsX2RzdCxfZWZsYWdzLF9ieCxfYnksX3d4LF93eSxfbHgsX2x5LF9xeCxfcXkpIFwKLQlkbyB7CQkJCQkJCQkgICAgIFwKLQkJdW5zaWduZWQgbG9uZyBfdG1wOwkJCQkJICAgICBcCi0JCXN3aXRjaCAoKF9kc3QpLmJ5dGVzKSB7CQkJCSAgICAgICAgICAgICBcCi0JCWNhc2UgMToJCQkJCQkJICAgICBcCi0JCQlfX19fZW11bGF0ZV8yb3AoX29wLF9zcmMsX2RzdCxfZWZsYWdzLF9ieCxfYnksImIiKTsgIFwKLQkJCWJyZWFrOwkJCQkJCSAgICAgXAotCQlkZWZhdWx0OgkJCQkJCSAgICAgXAotCQkJX19lbXVsYXRlXzJvcF9ub2J5dGUoX29wLCBfc3JjLCBfZHN0LCBfZWZsYWdzLAkgICAgIFwKLQkJCQkJICAgICBfd3gsIF93eSwgX2x4LCBfbHksIF9xeCwgX3F5KTsgIFwKLQkJCWJyZWFrOwkJCQkJCSAgICAgXAotCQl9CQkJCQkJCSAgICAgXAotCX0gd2hpbGUgKDApCi0KLS8qIFNvdXJjZSBvcGVyYW5kIGlzIGJ5dGUtc2l6ZWQgYW5kIG1heSBiZSByZXN0cmljdGVkIHRvIGp1c3QgJWNsLiAqLwotI2RlZmluZSBlbXVsYXRlXzJvcF9TcmNCKF9vcCwgX3NyYywgX2RzdCwgX2VmbGFncykgICAgICAgICAgICAgICAgICAgICAgXAotCV9fZW11bGF0ZV8yb3AoX29wLCBfc3JjLCBfZHN0LCBfZWZsYWdzLAkJCQlcCi0JCSAgICAgICJiIiwgImMiLCAiYiIsICJjIiwgImIiLCAiYyIsICJiIiwgImMiKQotCi0vKiBTb3VyY2Ugb3BlcmFuZCBpcyBieXRlLCB3b3JkLCBsb25nIG9yIHF1YWQgc2l6ZWQuICovCi0jZGVmaW5lIGVtdWxhdGVfMm9wX1NyY1YoX29wLCBfc3JjLCBfZHN0LCBfZWZsYWdzKSAgICAgICAgICAgICAgICAgICAgICBcCi0JX19lbXVsYXRlXzJvcChfb3AsIF9zcmMsIF9kc3QsIF9lZmxhZ3MsCQkJCVwKLQkJICAgICAgImIiLCAicSIsICJ3IiwgInIiLCBfTE8zMiwgInIiLCAiIiwgInIiKQotCi0vKiBTb3VyY2Ugb3BlcmFuZCBpcyB3b3JkLCBsb25nIG9yIHF1YWQgc2l6ZWQuICovCi0jZGVmaW5lIGVtdWxhdGVfMm9wX1NyY1Zfbm9ieXRlKF9vcCwgX3NyYywgX2RzdCwgX2VmbGFncykgICAgICAgICAgICAgICBcCi0JX19lbXVsYXRlXzJvcF9ub2J5dGUoX29wLCBfc3JjLCBfZHN0LCBfZWZsYWdzLAkJCVwKLQkJCSAgICAgInciLCAiciIsIF9MTzMyLCAiciIsICIiLCAiciIpCi0KLS8qIEluc3RydWN0aW9uIGhhcyB0aHJlZSBvcGVyYW5kcyBhbmQgb25lIG9wZXJhbmQgaXMgc3RvcmVkIGluIEVDWCByZWdpc3RlciAqLwotI2RlZmluZSBfX2VtdWxhdGVfMm9wX2NsKF9vcCwgX2NsLCBfc3JjLCBfZHN0LCBfZWZsYWdzLCBfc3VmZml4LCBfdHlwZSkgCVwKLQlkbyB7CQkJCQkJCQkJXAotCQl1bnNpZ25lZCBsb25nIF90bXA7CQkJCQkJXAotCQlfdHlwZSBfY2x2ICA9IChfY2wpLnZhbDsgIAkJCQkJXAotCQlfdHlwZSBfc3JjdiA9IChfc3JjKS52YWw7ICAgIAkJCQkJXAotCQlfdHlwZSBfZHN0diA9IChfZHN0KS52YWw7CQkJCQlcCi0JCQkJCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAotCQkJX1BSRV9FRkxBR1MoIjAiLCAiNSIsICIyIikJCQkJXAotCQkJX29wIF9zdWZmaXggIiAlNCwlMSBcbiIJCQkJCVwKLQkJCV9QT1NUX0VGTEFHUygiMCIsICI1IiwgIjIiKQkJCQlcCi0JCQk6ICI9bSIgKF9lZmxhZ3MpLCAiK3IiIChfZHN0diksICI9JnIiIChfdG1wKQkJXAotCQkJOiAiYyIgKF9jbHYpICwgInIiIChfc3JjdiksICJpIiAoRUZMQUdTX01BU0spCQlcCi0JCQkpOyAJCQkJCQkJXAotCQkJCQkJCQkJCVwKLQkJKF9jbCkudmFsICA9ICh1bnNpZ25lZCBsb25nKSBfY2x2OwkJCQlcCi0JCShfc3JjKS52YWwgPSAodW5zaWduZWQgbG9uZykgX3NyY3Y7CQkJCVwKLQkJKF9kc3QpLnZhbCA9ICh1bnNpZ25lZCBsb25nKSBfZHN0djsJCQkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgZW11bGF0ZV8yb3BfY2woX29wLCBfY2wsIF9zcmMsIF9kc3QsIF9lZmxhZ3MpCQkJCVwKLQlkbyB7CQkJCQkJCQkJXAotCQlzd2l0Y2ggKChfZHN0KS5ieXRlcykgewkJCQkJCVwKLQkJY2FzZSAyOgkJCQkJCQkJXAotCQkJX19lbXVsYXRlXzJvcF9jbChfb3AsIF9jbCwgX3NyYywgX2RzdCwgX2VmbGFncywgIAlcCi0JCQkJCQkidyIsIHVuc2lnbmVkIHNob3J0KTsgICAgICAgICAJXAotCQkJYnJlYWs7CQkJCQkJCVwKLQkJY2FzZSA0OiAJCQkJCQkJXAotCQkJX19lbXVsYXRlXzJvcF9jbChfb3AsIF9jbCwgX3NyYywgX2RzdCwgX2VmbGFncywgIAlcCi0JCQkJCQkibCIsIHVuc2lnbmVkIGludCk7ICAgICAgICAgICAJXAotCQkJYnJlYWs7CQkJCQkJCVwKLQkJY2FzZSA4OgkJCQkJCQkJXAotCQkJT042NChfX2VtdWxhdGVfMm9wX2NsKF9vcCwgX2NsLCBfc3JjLCBfZHN0LCBfZWZsYWdzLAlcCi0JCQkJCQkicSIsIHVuc2lnbmVkIGxvbmcpKTsgIAkJXAotCQkJYnJlYWs7CQkJCQkJCVwKLQkJfQkJCQkJCQkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX19lbXVsYXRlXzFvcChfb3AsIF9kc3QsIF9lZmxhZ3MsIF9zdWZmaXgpCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJdW5zaWduZWQgbG9uZyBfdG1wOwkJCQkJXAotCQkJCQkJCQkJXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQlcCi0JCQlfUFJFX0VGTEFHUygiMCIsICIzIiwgIjIiKQkJCVwKLQkJCV9vcCBfc3VmZml4ICIgJTE7ICIJCQkJXAotCQkJX1BPU1RfRUZMQUdTKCIwIiwgIjMiLCAiMiIpCQkJXAotCQkJOiAiPW0iIChfZWZsYWdzKSwgIittIiAoKF9kc3QpLnZhbCksCQlcCi0JCQkgICI9JnIiIChfdG1wKQkJCQkJXAotCQkJOiAiaSIgKEVGTEFHU19NQVNLKSk7CQkJCVwKLQl9IHdoaWxlICgwKQotCi0vKiBJbnN0cnVjdGlvbiBoYXMgb25seSBvbmUgZXhwbGljaXQgb3BlcmFuZCAobm8gc291cmNlIG9wZXJhbmQpLiAqLwotI2RlZmluZSBlbXVsYXRlXzFvcChfb3AsIF9kc3QsIF9lZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWRvIHsJCQkJCQkJCVwKLQkJc3dpdGNoICgoX2RzdCkuYnl0ZXMpIHsJCQkJICAgICAgICBcCi0JCWNhc2UgMToJX19lbXVsYXRlXzFvcChfb3AsIF9kc3QsIF9lZmxhZ3MsICJiIik7IGJyZWFrOwlcCi0JCWNhc2UgMjoJX19lbXVsYXRlXzFvcChfb3AsIF9kc3QsIF9lZmxhZ3MsICJ3Iik7IGJyZWFrOwlcCi0JCWNhc2UgNDoJX19lbXVsYXRlXzFvcChfb3AsIF9kc3QsIF9lZmxhZ3MsICJsIik7IGJyZWFrOwlcCi0JCWNhc2UgODoJT042NChfX2VtdWxhdGVfMW9wKF9vcCwgX2RzdCwgX2VmbGFncywgInEiKSk7IGJyZWFrOyBcCi0JCX0JCQkJCQkJXAotCX0gd2hpbGUgKDApCi0KLS8qIEZldGNoIG5leHQgcGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24gYmVpbmcgZW11bGF0ZWQuICovCi0jZGVmaW5lIGluc25fZmV0Y2goX3R5cGUsIF9zaXplLCBfZWlwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0oewl1bnNpZ25lZCBsb25nIF94OwkJCQkJCVwKLQlyYyA9IGRvX2luc25fZmV0Y2goY3R4dCwgb3BzLCAoX2VpcCksICZfeCwgKF9zaXplKSk7CQlcCi0JaWYgKHJjICE9IDApCQkJCQkJCVwKLQkJZ290byBkb25lOwkJCQkJCVwKLQkoX2VpcCkgKz0gKF9zaXplKTsJCQkJCQlcCi0JKF90eXBlKV94OwkJCQkJCQlcCi19KQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYWRfbWFzayhzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjKQotewotCXJldHVybiAoMVVMIDw8IChjLT5hZF9ieXRlcyA8PCAzKSkgLSAxOwotfQotCi0vKiBBY2Nlc3MvdXBkYXRlIGFkZHJlc3MgaGVsZCBpbiBhIHJlZ2lzdGVyLCBiYXNlZCBvbiBhZGRyZXNzaW5nIG1vZGUuICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLWFkZHJlc3NfbWFzayhzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjLCB1bnNpZ25lZCBsb25nIHJlZykKLXsKLQlpZiAoYy0+YWRfYnl0ZXMgPT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotCQlyZXR1cm4gcmVnOwotCWVsc2UKLQkJcmV0dXJuIHJlZyAmIGFkX21hc2soYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotcmVnaXN0ZXJfYWRkcmVzcyhzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgcmVnKQotewotCXJldHVybiBiYXNlICsgYWRkcmVzc19tYXNrKGMsIHJlZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoc3RydWN0IGRlY29kZV9jYWNoZSAqYywgdW5zaWduZWQgbG9uZyAqcmVnLCBpbnQgaW5jKQotewotCWlmIChjLT5hZF9ieXRlcyA9PSBzaXplb2YodW5zaWduZWQgbG9uZykpCi0JCSpyZWcgKz0gaW5jOwotCWVsc2UKLQkJKnJlZyA9ICgqcmVnICYgfmFkX21hc2soYykpIHwgKCgqcmVnICsgaW5jKSAmIGFkX21hc2soYykpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgam1wX3JlbChzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjLCBpbnQgcmVsKQotewotCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5laXAsIHJlbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9zZWdfb3ZlcnJpZGUoc3RydWN0IGRlY29kZV9jYWNoZSAqYywgaW50IHNlZykKLXsKLQljLT5oYXNfc2VnX292ZXJyaWRlID0gdHJ1ZTsKLQljLT5zZWdfb3ZlcnJpZGUgPSBzZWc7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlZ19iYXNlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgc2VnKQotewotCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQgJiYgc2VnIDwgVkNQVV9TUkVHX0ZTKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBrdm1feDg2X29wcy0+Z2V0X3NlZ21lbnRfYmFzZShjdHh0LT52Y3B1LCBzZWcpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZWdfb3ZlcnJpZGVfYmFzZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJCQkgICAgICAgc3RydWN0IGRlY29kZV9jYWNoZSAqYykKLXsKLQlpZiAoIWMtPmhhc19zZWdfb3ZlcnJpZGUpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHNlZ19iYXNlKGN0eHQsIGMtPnNlZ19vdmVycmlkZSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGVzX2Jhc2Uoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0JcmV0dXJuIHNlZ19iYXNlKGN0eHQsIFZDUFVfU1JFR19FUyk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNzX2Jhc2Uoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0JcmV0dXJuIHNlZ19iYXNlKGN0eHQsIFZDUFVfU1JFR19TUyk7Ci19Ci0KLXN0YXRpYyBpbnQgZG9fZmV0Y2hfaW5zbl9ieXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAotCQkJICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBsaW5lYXIsIHU4ICpkZXN0KQotewotCXN0cnVjdCBmZXRjaF9jYWNoZSAqZmMgPSAmY3R4dC0+ZGVjb2RlLmZldGNoOwotCWludCByYzsKLQlpbnQgc2l6ZTsKLQotCWlmIChsaW5lYXIgPCBmYy0+c3RhcnQgfHwgbGluZWFyID49IGZjLT5lbmQpIHsKLQkJc2l6ZSA9IG1pbigxNVVMLCBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShsaW5lYXIpKTsKLQkJcmMgPSBvcHMtPnJlYWRfc3RkKGxpbmVhciwgZmMtPmRhdGEsIHNpemUsIGN0eHQtPnZjcHUpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0JCWZjLT5zdGFydCA9IGxpbmVhcjsKLQkJZmMtPmVuZCA9IGxpbmVhciArIHNpemU7Ci0JfQotCSpkZXN0ID0gZmMtPmRhdGFbbGluZWFyIC0gZmMtPnN0YXJ0XTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkb19pbnNuX2ZldGNoKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAotCQkJIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcywKLQkJCSB1bnNpZ25lZCBsb25nIGVpcCwgdm9pZCAqZGVzdCwgdW5zaWduZWQgc2l6ZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JZWlwICs9IGN0eHQtPmNzX2Jhc2U7Ci0Jd2hpbGUgKHNpemUtLSkgewotCQlyYyA9IGRvX2ZldGNoX2luc25fYnl0ZShjdHh0LCBvcHMsIGVpcCsrLCBkZXN0KyspOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogR2l2ZW4gdGhlICdyZWcnIHBvcnRpb24gb2YgYSBNb2RSTSBieXRlLCBhbmQgYSByZWdpc3RlciBibG9jaywgcmV0dXJuIGEKLSAqIHBvaW50ZXIgaW50byB0aGUgYmxvY2sgdGhhdCBhZGRyZXNzZXMgdGhlIHJlbGV2YW50IHJlZ2lzdGVyLgotICogQGhpZ2hieXRlX3JlZ3Mgc3BlY2lmaWVzIHdoZXRoZXIgdG8gZGVjb2RlIEFILENILERILEJILgotICovCi1zdGF0aWMgdm9pZCAqZGVjb2RlX3JlZ2lzdGVyKHU4IG1vZHJtX3JlZywgdW5zaWduZWQgbG9uZyAqcmVncywKLQkJCSAgICAgaW50IGhpZ2hieXRlX3JlZ3MpCi17Ci0Jdm9pZCAqcDsKLQotCXAgPSAmcmVnc1ttb2RybV9yZWddOwotCWlmIChoaWdoYnl0ZV9yZWdzICYmIG1vZHJtX3JlZyA+PSA0ICYmIG1vZHJtX3JlZyA8IDgpCi0JCXAgPSAodW5zaWduZWQgY2hhciAqKSZyZWdzW21vZHJtX3JlZyAmIDNdICsgMTsKLQlyZXR1cm4gcDsKLX0KLQotc3RhdGljIGludCByZWFkX2Rlc2NyaXB0b3Ioc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0JCQkgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsCi0JCQkgICB2b2lkICpwdHIsCi0JCQkgICB1MTYgKnNpemUsIHVuc2lnbmVkIGxvbmcgKmFkZHJlc3MsIGludCBvcF9ieXRlcykKLXsKLQlpbnQgcmM7Ci0KLQlpZiAob3BfYnl0ZXMgPT0gMikKLQkJb3BfYnl0ZXMgPSAzOwotCSphZGRyZXNzID0gMDsKLQlyYyA9IG9wcy0+cmVhZF9zdGQoKHVuc2lnbmVkIGxvbmcpcHRyLCAodW5zaWduZWQgbG9uZyAqKXNpemUsIDIsCi0JCQkgICBjdHh0LT52Y3B1KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQlyYyA9IG9wcy0+cmVhZF9zdGQoKHVuc2lnbmVkIGxvbmcpcHRyICsgMiwgYWRkcmVzcywgb3BfYnl0ZXMsCi0JCQkgICBjdHh0LT52Y3B1KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgdGVzdF9jYyh1bnNpZ25lZCBpbnQgY29uZGl0aW9uLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JaW50IHJjID0gMDsKLQotCXN3aXRjaCAoKGNvbmRpdGlvbiAmIDE1KSA+PiAxKSB7Ci0JY2FzZSAwOiAvKiBvICovCi0JCXJjIHw9IChmbGFncyAmIEVGTEdfT0YpOwotCQlicmVhazsKLQljYXNlIDE6IC8qIGIvYy9uYWUgKi8KLQkJcmMgfD0gKGZsYWdzICYgRUZMR19DRik7Ci0JCWJyZWFrOwotCWNhc2UgMjogLyogei9lICovCi0JCXJjIHw9IChmbGFncyAmIEVGTEdfWkYpOwotCQlicmVhazsKLQljYXNlIDM6IC8qIGJlL25hICovCi0JCXJjIHw9IChmbGFncyAmIChFRkxHX0NGfEVGTEdfWkYpKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OiAvKiBzICovCi0JCXJjIHw9IChmbGFncyAmIEVGTEdfU0YpOwotCQlicmVhazsKLQljYXNlIDU6IC8qIHAvcGUgKi8KLQkJcmMgfD0gKGZsYWdzICYgRUZMR19QRik7Ci0JCWJyZWFrOwotCWNhc2UgNzogLyogbGUvbmcgKi8KLQkJcmMgfD0gKGZsYWdzICYgRUZMR19aRik7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgNjogLyogbC9uZ2UgKi8KLQkJcmMgfD0gKCEoZmxhZ3MgJiBFRkxHX1NGKSAhPSAhKGZsYWdzICYgRUZMR19PRikpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBPZGQgY29uZGl0aW9uIGlkZW50aWZpZXJzIChsc2IgPT0gMSkgaGF2ZSBpbnZlcnRlZCBzZW5zZS4gKi8KLQlyZXR1cm4gKCEhcmMgXiAoY29uZGl0aW9uICYgMSkpOwotfQotCi1zdGF0aWMgdm9pZCBkZWNvZGVfcmVnaXN0ZXJfb3BlcmFuZChzdHJ1Y3Qgb3BlcmFuZCAqb3AsCi0JCQkJICAgIHN0cnVjdCBkZWNvZGVfY2FjaGUgKmMsCi0JCQkJICAgIGludCBpbmhpYml0X2J5dGVyZWcpCi17Ci0JdW5zaWduZWQgcmVnID0gYy0+bW9kcm1fcmVnOwotCWludCBoaWdoYnl0ZV9yZWdzID0gYy0+cmV4X3ByZWZpeCA9PSAwOwotCi0JaWYgKCEoYy0+ZCAmIE1vZFJNKSkKLQkJcmVnID0gKGMtPmIgJiA3KSB8ICgoYy0+cmV4X3ByZWZpeCAmIDEpIDw8IDMpOwotCW9wLT50eXBlID0gT1BfUkVHOwotCWlmICgoYy0+ZCAmIEJ5dGVPcCkgJiYgIWluaGliaXRfYnl0ZXJlZykgewotCQlvcC0+cHRyID0gZGVjb2RlX3JlZ2lzdGVyKHJlZywgYy0+cmVncywgaGlnaGJ5dGVfcmVncyk7Ci0JCW9wLT52YWwgPSAqKHU4ICopb3AtPnB0cjsKLQkJb3AtPmJ5dGVzID0gMTsKLQl9IGVsc2UgewotCQlvcC0+cHRyID0gZGVjb2RlX3JlZ2lzdGVyKHJlZywgYy0+cmVncywgMCk7Ci0JCW9wLT5ieXRlcyA9IGMtPm9wX2J5dGVzOwotCQlzd2l0Y2ggKG9wLT5ieXRlcykgewotCQljYXNlIDI6Ci0JCQlvcC0+dmFsID0gKih1MTYgKilvcC0+cHRyOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCW9wLT52YWwgPSAqKHUzMiAqKW9wLT5wdHI7Ci0JCQlicmVhazsKLQkJY2FzZSA4OgotCQkJb3AtPnZhbCA9ICoodTY0ICopIG9wLT5wdHI7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlvcC0+b3JpZ192YWwgPSBvcC0+dmFsOwotfQotCi1zdGF0aWMgaW50IGRlY29kZV9tb2RybShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJCXN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKLXsKLQlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKLQl1OCBzaWI7Ci0JaW50IGluZGV4X3JlZyA9IDAsIGJhc2VfcmVnID0gMCwgc2NhbGU7Ci0JaW50IHJjID0gMDsKLQotCWlmIChjLT5yZXhfcHJlZml4KSB7Ci0JCWMtPm1vZHJtX3JlZyA9IChjLT5yZXhfcHJlZml4ICYgNCkgPDwgMTsJLyogUkVYLlIgKi8KLQkJaW5kZXhfcmVnID0gKGMtPnJleF9wcmVmaXggJiAyKSA8PCAyOyAvKiBSRVguWCAqLwotCQljLT5tb2RybV9ybSA9IGJhc2VfcmVnID0gKGMtPnJleF9wcmVmaXggJiAxKSA8PCAzOyAvKiBSRUcuQiAqLwotCX0KLQotCWMtPm1vZHJtID0gaW5zbl9mZXRjaCh1OCwgMSwgYy0+ZWlwKTsKLQljLT5tb2RybV9tb2QgfD0gKGMtPm1vZHJtICYgMHhjMCkgPj4gNjsKLQljLT5tb2RybV9yZWcgfD0gKGMtPm1vZHJtICYgMHgzOCkgPj4gMzsKLQljLT5tb2RybV9ybSB8PSAoYy0+bW9kcm0gJiAweDA3KTsKLQljLT5tb2RybV9lYSA9IDA7Ci0JYy0+dXNlX21vZHJtX2VhID0gMTsKLQotCWlmIChjLT5tb2RybV9tb2QgPT0gMykgewotCQljLT5tb2RybV9wdHIgPSBkZWNvZGVfcmVnaXN0ZXIoYy0+bW9kcm1fcm0sCi0JCQkJCSAgICAgICBjLT5yZWdzLCBjLT5kICYgQnl0ZU9wKTsKLQkJYy0+bW9kcm1fdmFsID0gKih1bnNpZ25lZCBsb25nICopYy0+bW9kcm1fcHRyOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JaWYgKGMtPmFkX2J5dGVzID09IDIpIHsKLQkJdW5zaWduZWQgYnggPSBjLT5yZWdzW1ZDUFVfUkVHU19SQlhdOwotCQl1bnNpZ25lZCBicCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JCUF07Ci0JCXVuc2lnbmVkIHNpID0gYy0+cmVnc1tWQ1BVX1JFR1NfUlNJXTsKLQkJdW5zaWduZWQgZGkgPSBjLT5yZWdzW1ZDUFVfUkVHU19SREldOwotCi0JCS8qIDE2LWJpdCBNb2RSL00gZGVjb2RlLiAqLwotCQlzd2l0Y2ggKGMtPm1vZHJtX21vZCkgewotCQljYXNlIDA6Ci0JCQlpZiAoYy0+bW9kcm1fcm0gPT0gNikKLQkJCQljLT5tb2RybV9lYSArPSBpbnNuX2ZldGNoKHUxNiwgMiwgYy0+ZWlwKTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQljLT5tb2RybV9lYSArPSBpbnNuX2ZldGNoKHM4LCAxLCBjLT5laXApOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWMtPm1vZHJtX2VhICs9IGluc25fZmV0Y2godTE2LCAyLCBjLT5laXApOwotCQkJYnJlYWs7Ci0JCX0KLQkJc3dpdGNoIChjLT5tb2RybV9ybSkgewotCQljYXNlIDA6Ci0JCQljLT5tb2RybV9lYSArPSBieCArIHNpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWMtPm1vZHJtX2VhICs9IGJ4ICsgZGk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJYy0+bW9kcm1fZWEgKz0gYnAgKyBzaTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQljLT5tb2RybV9lYSArPSBicCArIGRpOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCWMtPm1vZHJtX2VhICs9IHNpOwotCQkJYnJlYWs7Ci0JCWNhc2UgNToKLQkJCWMtPm1vZHJtX2VhICs9IGRpOwotCQkJYnJlYWs7Ci0JCWNhc2UgNjoKLQkJCWlmIChjLT5tb2RybV9tb2QgIT0gMCkKLQkJCQljLT5tb2RybV9lYSArPSBicDsKLQkJCWJyZWFrOwotCQljYXNlIDc6Ci0JCQljLT5tb2RybV9lYSArPSBieDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChjLT5tb2RybV9ybSA9PSAyIHx8IGMtPm1vZHJtX3JtID09IDMgfHwKLQkJICAgIChjLT5tb2RybV9ybSA9PSA2ICYmIGMtPm1vZHJtX21vZCAhPSAwKSkKLQkJCWlmICghYy0+aGFzX3NlZ19vdmVycmlkZSkKLQkJCQlzZXRfc2VnX292ZXJyaWRlKGMsIFZDUFVfU1JFR19TUyk7Ci0JCWMtPm1vZHJtX2VhID0gKHUxNiljLT5tb2RybV9lYTsKLQl9IGVsc2UgewotCQkvKiAzMi82NC1iaXQgTW9kUi9NIGRlY29kZS4gKi8KLQkJaWYgKChjLT5tb2RybV9ybSAmIDcpID09IDQpIHsKLQkJCXNpYiA9IGluc25fZmV0Y2godTgsIDEsIGMtPmVpcCk7Ci0JCQlpbmRleF9yZWcgfD0gKHNpYiA+PiAzKSAmIDc7Ci0JCQliYXNlX3JlZyB8PSBzaWIgJiA3OwotCQkJc2NhbGUgPSBzaWIgPj4gNjsKLQotCQkJaWYgKChiYXNlX3JlZyAmIDcpID09IDUgJiYgYy0+bW9kcm1fbW9kID09IDApCi0JCQkJYy0+bW9kcm1fZWEgKz0gaW5zbl9mZXRjaChzMzIsIDQsIGMtPmVpcCk7Ci0JCQllbHNlCi0JCQkJYy0+bW9kcm1fZWEgKz0gYy0+cmVnc1tiYXNlX3JlZ107Ci0JCQlpZiAoaW5kZXhfcmVnICE9IDQpCi0JCQkJYy0+bW9kcm1fZWEgKz0gYy0+cmVnc1tpbmRleF9yZWddIDw8IHNjYWxlOwotCQl9IGVsc2UgaWYgKChjLT5tb2RybV9ybSAmIDcpID09IDUgJiYgYy0+bW9kcm1fbW9kID09IDApIHsKLQkJCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQpCi0JCQkJYy0+cmlwX3JlbGF0aXZlID0gMTsKLQkJfSBlbHNlCi0JCQljLT5tb2RybV9lYSArPSBjLT5yZWdzW2MtPm1vZHJtX3JtXTsKLQkJc3dpdGNoIChjLT5tb2RybV9tb2QpIHsKLQkJY2FzZSAwOgotCQkJaWYgKGMtPm1vZHJtX3JtID09IDUpCi0JCQkJYy0+bW9kcm1fZWEgKz0gaW5zbl9mZXRjaChzMzIsIDQsIGMtPmVpcCk7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJYy0+bW9kcm1fZWEgKz0gaW5zbl9mZXRjaChzOCwgMSwgYy0+ZWlwKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQljLT5tb2RybV9lYSArPSBpbnNuX2ZldGNoKHMzMiwgNCwgYy0+ZWlwKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotZG9uZToKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZGVjb2RlX2FicyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQotewotCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwotCWludCByYyA9IDA7Ci0KLQlzd2l0Y2ggKGMtPmFkX2J5dGVzKSB7Ci0JY2FzZSAyOgotCQljLT5tb2RybV9lYSA9IGluc25fZmV0Y2godTE2LCAyLCBjLT5laXApOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWMtPm1vZHJtX2VhID0gaW5zbl9mZXRjaCh1MzIsIDQsIGMtPmVpcCk7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJYy0+bW9kcm1fZWEgPSBpbnNuX2ZldGNoKHU2NCwgOCwgYy0+ZWlwKTsKLQkJYnJlYWs7Ci0JfQotZG9uZToKLQlyZXR1cm4gcmM7Ci19Ci0KLWludAoteDg2X2RlY29kZV9pbnNuKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCi17Ci0Jc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7Ci0JaW50IHJjID0gMDsKLQlpbnQgbW9kZSA9IGN0eHQtPm1vZGU7Ci0JaW50IGRlZl9vcF9ieXRlcywgZGVmX2FkX2J5dGVzLCBncm91cDsKLQotCS8qIFNoYWRvdyBjb3B5IG9mIHJlZ2lzdGVyIHN0YXRlLiBDb21taXR0ZWQgb24gc3VjY2Vzc2Z1bCBlbXVsYXRpb24uICovCi0KLQltZW1zZXQoYywgMCwgc2l6ZW9mKHN0cnVjdCBkZWNvZGVfY2FjaGUpKTsKLQljLT5laXAgPSBrdm1fcmlwX3JlYWQoY3R4dC0+dmNwdSk7Ci0JY3R4dC0+Y3NfYmFzZSA9IHNlZ19iYXNlKGN0eHQsIFZDUFVfU1JFR19DUyk7Ci0JbWVtY3B5KGMtPnJlZ3MsIGN0eHQtPnZjcHUtPmFyY2gucmVncywgc2l6ZW9mIGMtPnJlZ3MpOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBYODZFTVVMX01PREVfUkVBTDoKLQljYXNlIFg4NkVNVUxfTU9ERV9QUk9UMTY6Ci0JCWRlZl9vcF9ieXRlcyA9IGRlZl9hZF9ieXRlcyA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgWDg2RU1VTF9NT0RFX1BST1QzMjoKLQkJZGVmX29wX2J5dGVzID0gZGVmX2FkX2J5dGVzID0gNDsKLQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCWNhc2UgWDg2RU1VTF9NT0RFX1BST1Q2NDoKLQkJZGVmX29wX2J5dGVzID0gNDsKLQkJZGVmX2FkX2J5dGVzID0gODsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlyZXR1cm4gLTE7Ci0JfQotCi0JYy0+b3BfYnl0ZXMgPSBkZWZfb3BfYnl0ZXM7Ci0JYy0+YWRfYnl0ZXMgPSBkZWZfYWRfYnl0ZXM7Ci0KLQkvKiBMZWdhY3kgcHJlZml4ZXMuICovCi0JZm9yICg7OykgewotCQlzd2l0Y2ggKGMtPmIgPSBpbnNuX2ZldGNoKHU4LCAxLCBjLT5laXApKSB7Ci0JCWNhc2UgMHg2NjoJLyogb3BlcmFuZC1zaXplIG92ZXJyaWRlICovCi0JCQkvKiBzd2l0Y2ggYmV0d2VlbiAyLzQgYnl0ZXMgKi8KLQkJCWMtPm9wX2J5dGVzID0gZGVmX29wX2J5dGVzIF4gNjsKLQkJCWJyZWFrOwotCQljYXNlIDB4Njc6CS8qIGFkZHJlc3Mtc2l6ZSBvdmVycmlkZSAqLwotCQkJaWYgKG1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NCkKLQkJCQkvKiBzd2l0Y2ggYmV0d2VlbiA0LzggYnl0ZXMgKi8KLQkJCQljLT5hZF9ieXRlcyA9IGRlZl9hZF9ieXRlcyBeIDEyOwotCQkJZWxzZQotCQkJCS8qIHN3aXRjaCBiZXR3ZWVuIDIvNCBieXRlcyAqLwotCQkJCWMtPmFkX2J5dGVzID0gZGVmX2FkX2J5dGVzIF4gNjsKLQkJCWJyZWFrOwotCQljYXNlIDB4MjY6CS8qIEVTIG92ZXJyaWRlICovCi0JCWNhc2UgMHgyZToJLyogQ1Mgb3ZlcnJpZGUgKi8KLQkJY2FzZSAweDM2OgkvKiBTUyBvdmVycmlkZSAqLwotCQljYXNlIDB4M2U6CS8qIERTIG92ZXJyaWRlICovCi0JCQlzZXRfc2VnX292ZXJyaWRlKGMsIChjLT5iID4+IDMpICYgMyk7Ci0JCQlicmVhazsKLQkJY2FzZSAweDY0OgkvKiBGUyBvdmVycmlkZSAqLwotCQljYXNlIDB4NjU6CS8qIEdTIG92ZXJyaWRlICovCi0JCQlzZXRfc2VnX292ZXJyaWRlKGMsIGMtPmIgJiA3KTsKLQkJCWJyZWFrOwotCQljYXNlIDB4NDAgLi4uIDB4NGY6IC8qIFJFWCAqLwotCQkJaWYgKG1vZGUgIT0gWDg2RU1VTF9NT0RFX1BST1Q2NCkKLQkJCQlnb3RvIGRvbmVfcHJlZml4ZXM7Ci0JCQljLT5yZXhfcHJlZml4ID0gYy0+YjsKLQkJCWNvbnRpbnVlOwotCQljYXNlIDB4ZjA6CS8qIExPQ0sgKi8KLQkJCWMtPmxvY2tfcHJlZml4ID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIDB4ZjI6CS8qIFJFUE5FL1JFUE5aICovCi0JCQljLT5yZXBfcHJlZml4ID0gUkVQTkVfUFJFRklYOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHhmMzoJLyogUkVQL1JFUEUvUkVQWiAqLwotCQkJYy0+cmVwX3ByZWZpeCA9IFJFUEVfUFJFRklYOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlnb3RvIGRvbmVfcHJlZml4ZXM7Ci0JCX0KLQotCQkvKiBBbnkgbGVnYWN5IHByZWZpeCBhZnRlciBhIFJFWCBwcmVmaXggbnVsbGlmaWVzIGl0cyBlZmZlY3QuICovCi0KLQkJYy0+cmV4X3ByZWZpeCA9IDA7Ci0JfQotCi1kb25lX3ByZWZpeGVzOgotCi0JLyogUkVYIHByZWZpeC4gKi8KLQlpZiAoYy0+cmV4X3ByZWZpeCkKLQkJaWYgKGMtPnJleF9wcmVmaXggJiA4KQotCQkJYy0+b3BfYnl0ZXMgPSA4OwkvKiBSRVguVyAqLwotCi0JLyogT3Bjb2RlIGJ5dGUocykuICovCi0JYy0+ZCA9IG9wY29kZV90YWJsZVtjLT5iXTsKLQlpZiAoYy0+ZCA9PSAwKSB7Ci0JCS8qIFR3by1ieXRlIG9wY29kZT8gKi8KLQkJaWYgKGMtPmIgPT0gMHgwZikgewotCQkJYy0+dHdvYnl0ZSA9IDE7Ci0JCQljLT5iID0gaW5zbl9mZXRjaCh1OCwgMSwgYy0+ZWlwKTsKLQkJCWMtPmQgPSB0d29ieXRlX3RhYmxlW2MtPmJdOwotCQl9Ci0JfQotCi0JaWYgKGMtPmQgJiBHcm91cCkgewotCQlncm91cCA9IGMtPmQgJiBHcm91cE1hc2s7Ci0JCWMtPm1vZHJtID0gaW5zbl9mZXRjaCh1OCwgMSwgYy0+ZWlwKTsKLQkJLS1jLT5laXA7Ci0KLQkJZ3JvdXAgPSAoZ3JvdXAgPDwgMykgKyAoKGMtPm1vZHJtID4+IDMpICYgNyk7Ci0JCWlmICgoYy0+ZCAmIEdyb3VwRHVhbCkgJiYgKGMtPm1vZHJtID4+IDYpID09IDMpCi0JCQljLT5kID0gZ3JvdXAyX3RhYmxlW2dyb3VwXTsKLQkJZWxzZQotCQkJYy0+ZCA9IGdyb3VwX3RhYmxlW2dyb3VwXTsKLQl9Ci0KLQkvKiBVbnJlY29nbmlzZWQ/ICovCi0JaWYgKGMtPmQgPT0gMCkgewotCQlEUFJJTlRGKCJDYW5ub3QgZW11bGF0ZSAlMDJ4XG4iLCBjLT5iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChtb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQgJiYgKGMtPmQgJiBTdGFjaykpCi0JCWMtPm9wX2J5dGVzID0gODsKLQotCS8qIE1vZFJNIGFuZCBTSUIgYnl0ZXMuICovCi0JaWYgKGMtPmQgJiBNb2RSTSkKLQkJcmMgPSBkZWNvZGVfbW9kcm0oY3R4dCwgb3BzKTsKLQllbHNlIGlmIChjLT5kICYgTWVtQWJzKQotCQlyYyA9IGRlY29kZV9hYnMoY3R4dCwgb3BzKTsKLQlpZiAocmMpCi0JCWdvdG8gZG9uZTsKLQotCWlmICghYy0+aGFzX3NlZ19vdmVycmlkZSkKLQkJc2V0X3NlZ19vdmVycmlkZShjLCBWQ1BVX1NSRUdfRFMpOwotCi0JaWYgKCEoIWMtPnR3b2J5dGUgJiYgYy0+YiA9PSAweDhkKSkKLQkJYy0+bW9kcm1fZWEgKz0gc2VnX292ZXJyaWRlX2Jhc2UoY3R4dCwgYyk7Ci0KLQlpZiAoYy0+YWRfYnl0ZXMgIT0gOCkKLQkJYy0+bW9kcm1fZWEgPSAodTMyKWMtPm1vZHJtX2VhOwotCS8qCi0JICogRGVjb2RlIGFuZCBmZXRjaCB0aGUgc291cmNlIG9wZXJhbmQ6IHJlZ2lzdGVyLCBtZW1vcnkKLQkgKiBvciBpbW1lZGlhdGUuCi0JICovCi0Jc3dpdGNoIChjLT5kICYgU3JjTWFzaykgewotCWNhc2UgU3JjTm9uZToKLQkJYnJlYWs7Ci0JY2FzZSBTcmNSZWc6Ci0JCWRlY29kZV9yZWdpc3Rlcl9vcGVyYW5kKCZjLT5zcmMsIGMsIDApOwotCQlicmVhazsKLQljYXNlIFNyY01lbTE2OgotCQljLT5zcmMuYnl0ZXMgPSAyOwotCQlnb3RvIHNyY21lbV9jb21tb247Ci0JY2FzZSBTcmNNZW0zMjoKLQkJYy0+c3JjLmJ5dGVzID0gNDsKLQkJZ290byBzcmNtZW1fY29tbW9uOwotCWNhc2UgU3JjTWVtOgotCQljLT5zcmMuYnl0ZXMgPSAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDoKLQkJCQkJCQkgICBjLT5vcF9ieXRlczsKLQkJLyogRG9uJ3QgZmV0Y2ggdGhlIGFkZHJlc3MgZm9yIGludmxwZzogaXQgY291bGQgYmUgdW5tYXBwZWQuICovCi0JCWlmIChjLT50d29ieXRlICYmIGMtPmIgPT0gMHgwMSAmJiBjLT5tb2RybV9yZWcgPT0gNykKLQkJCWJyZWFrOwotCXNyY21lbV9jb21tb246Ci0JCS8qCi0JCSAqIEZvciBpbnN0cnVjdGlvbnMgd2l0aCBhIE1vZFIvTSBieXRlLCBzd2l0Y2ggdG8gcmVnaXN0ZXIKLQkJICogYWNjZXNzIGlmIE1vZCA9IDMuCi0JCSAqLwotCQlpZiAoKGMtPmQgJiBNb2RSTSkgJiYgYy0+bW9kcm1fbW9kID09IDMpIHsKLQkJCWMtPnNyYy50eXBlID0gT1BfUkVHOwotCQkJYy0+c3JjLnZhbCA9IGMtPm1vZHJtX3ZhbDsKLQkJCWMtPnNyYy5wdHIgPSBjLT5tb2RybV9wdHI7Ci0JCQlicmVhazsKLQkJfQotCQljLT5zcmMudHlwZSA9IE9QX01FTTsKLQkJYnJlYWs7Ci0JY2FzZSBTcmNJbW06Ci0JCWMtPnNyYy50eXBlID0gT1BfSU1NOwotCQljLT5zcmMucHRyID0gKHVuc2lnbmVkIGxvbmcgKiljLT5laXA7Ci0JCWMtPnNyYy5ieXRlcyA9IChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlczsKLQkJaWYgKGMtPnNyYy5ieXRlcyA9PSA4KQotCQkJYy0+c3JjLmJ5dGVzID0gNDsKLQkJLyogTkIuIEltbWVkaWF0ZXMgYXJlIHNpZ24tZXh0ZW5kZWQgYXMgbmVjZXNzYXJ5LiAqLwotCQlzd2l0Y2ggKGMtPnNyYy5ieXRlcykgewotCQljYXNlIDE6Ci0JCQljLT5zcmMudmFsID0gaW5zbl9mZXRjaChzOCwgMSwgYy0+ZWlwKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQljLT5zcmMudmFsID0gaW5zbl9mZXRjaChzMTYsIDIsIGMtPmVpcCk7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJYy0+c3JjLnZhbCA9IGluc25fZmV0Y2goczMyLCA0LCBjLT5laXApOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBTcmNJbW1CeXRlOgotCWNhc2UgU3JjSW1tVUJ5dGU6Ci0JCWMtPnNyYy50eXBlID0gT1BfSU1NOwotCQljLT5zcmMucHRyID0gKHVuc2lnbmVkIGxvbmcgKiljLT5laXA7Ci0JCWMtPnNyYy5ieXRlcyA9IDE7Ci0JCWlmICgoYy0+ZCAmIFNyY01hc2spID09IFNyY0ltbUJ5dGUpCi0JCQljLT5zcmMudmFsID0gaW5zbl9mZXRjaChzOCwgMSwgYy0+ZWlwKTsKLQkJZWxzZQotCQkJYy0+c3JjLnZhbCA9IGluc25fZmV0Y2godTgsIDEsIGMtPmVpcCk7Ci0JCWJyZWFrOwotCWNhc2UgU3JjT25lOgotCQljLT5zcmMuYnl0ZXMgPSAxOwotCQljLT5zcmMudmFsID0gMTsKLQkJYnJlYWs7Ci0JfQotCi0JLyoKLQkgKiBEZWNvZGUgYW5kIGZldGNoIHRoZSBzZWNvbmQgc291cmNlIG9wZXJhbmQ6IHJlZ2lzdGVyLCBtZW1vcnkKLQkgKiBvciBpbW1lZGlhdGUuCi0JICovCi0Jc3dpdGNoIChjLT5kICYgU3JjMk1hc2spIHsKLQljYXNlIFNyYzJOb25lOgotCQlicmVhazsKLQljYXNlIFNyYzJDTDoKLQkJYy0+c3JjMi5ieXRlcyA9IDE7Ci0JCWMtPnNyYzIudmFsID0gYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSAmIDB4ODsKLQkJYnJlYWs7Ci0JY2FzZSBTcmMySW1tQnl0ZToKLQkJYy0+c3JjMi50eXBlID0gT1BfSU1NOwotCQljLT5zcmMyLnB0ciA9ICh1bnNpZ25lZCBsb25nICopYy0+ZWlwOwotCQljLT5zcmMyLmJ5dGVzID0gMTsKLQkJYy0+c3JjMi52YWwgPSBpbnNuX2ZldGNoKHU4LCAxLCBjLT5laXApOwotCQlicmVhazsKLQljYXNlIFNyYzJJbW0xNjoKLQkJYy0+c3JjMi50eXBlID0gT1BfSU1NOwotCQljLT5zcmMyLnB0ciA9ICh1bnNpZ25lZCBsb25nICopYy0+ZWlwOwotCQljLT5zcmMyLmJ5dGVzID0gMjsKLQkJYy0+c3JjMi52YWwgPSBpbnNuX2ZldGNoKHUxNiwgMiwgYy0+ZWlwKTsKLQkJYnJlYWs7Ci0JY2FzZSBTcmMyT25lOgotCQljLT5zcmMyLmJ5dGVzID0gMTsKLQkJYy0+c3JjMi52YWwgPSAxOwotCQlicmVhazsKLQl9Ci0KLQkvKiBEZWNvZGUgYW5kIGZldGNoIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kOiByZWdpc3RlciBvciBtZW1vcnkuICovCi0Jc3dpdGNoIChjLT5kICYgRHN0TWFzaykgewotCWNhc2UgSW1wbGljaXRPcHM6Ci0JCS8qIFNwZWNpYWwgaW5zdHJ1Y3Rpb25zIGRvIHRoZWlyIG93biBvcGVyYW5kIGRlY29kaW5nLiAqLwotCQlyZXR1cm4gMDsKLQljYXNlIERzdFJlZzoKLQkJZGVjb2RlX3JlZ2lzdGVyX29wZXJhbmQoJmMtPmRzdCwgYywKLQkJCSBjLT50d29ieXRlICYmIChjLT5iID09IDB4YjYgfHwgYy0+YiA9PSAweGI3KSk7Ci0JCWJyZWFrOwotCWNhc2UgRHN0TWVtOgotCQlpZiAoKGMtPmQgJiBNb2RSTSkgJiYgYy0+bW9kcm1fbW9kID09IDMpIHsKLQkJCWMtPmRzdC5ieXRlcyA9IChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlczsKLQkJCWMtPmRzdC50eXBlID0gT1BfUkVHOwotCQkJYy0+ZHN0LnZhbCA9IGMtPmRzdC5vcmlnX3ZhbCA9IGMtPm1vZHJtX3ZhbDsKLQkJCWMtPmRzdC5wdHIgPSBjLT5tb2RybV9wdHI7Ci0JCQlicmVhazsKLQkJfQotCQljLT5kc3QudHlwZSA9IE9QX01FTTsKLQkJYnJlYWs7Ci0JY2FzZSBEc3RBY2M6Ci0JCWMtPmRzdC50eXBlID0gT1BfUkVHOwotCQljLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKLQkJYy0+ZHN0LnB0ciA9ICZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCQlzd2l0Y2ggKGMtPm9wX2J5dGVzKSB7Ci0JCQljYXNlIDE6Ci0JCQkJYy0+ZHN0LnZhbCA9ICoodTggKiljLT5kc3QucHRyOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgotCQkJCWMtPmRzdC52YWwgPSAqKHUxNiAqKWMtPmRzdC5wdHI7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDQ6Ci0JCQkJYy0+ZHN0LnZhbCA9ICoodTMyICopYy0+ZHN0LnB0cjsKLQkJCQlicmVhazsKLQkJfQotCQljLT5kc3Qub3JpZ192YWwgPSBjLT5kc3QudmFsOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoYy0+cmlwX3JlbGF0aXZlKQotCQljLT5tb2RybV9lYSArPSBjLT5laXA7Ci0KLWRvbmU6Ci0JcmV0dXJuIChyYyA9PSBYODZFTVVMX1VOSEFORExFQUJMRSkgPyAtMSA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbXVsYXRlX3B1c2goc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0Jc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7Ci0KLQljLT5kc3QudHlwZSAgPSBPUF9NRU07Ci0JYy0+ZHN0LmJ5dGVzID0gYy0+b3BfYnl0ZXM7Ci0JYy0+ZHN0LnZhbCA9IGMtPnNyYy52YWw7Ci0JcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoYywgJmMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0sIC1jLT5vcF9ieXRlcyk7Ci0JYy0+ZHN0LnB0ciA9ICh2b2lkICopIHJlZ2lzdGVyX2FkZHJlc3MoYywgc3NfYmFzZShjdHh0KSwKLQkJCQkJICAgICAgIGMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0pOwotfQotCi1zdGF0aWMgaW50IGVtdWxhdGVfcG9wKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAotCQkgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLAotCQkgICAgICAgdm9pZCAqZGVzdCwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKLQlpbnQgcmM7Ci0KLQlyYyA9IG9wcy0+cmVhZF9lbXVsYXRlZChyZWdpc3Rlcl9hZGRyZXNzKGMsIHNzX2Jhc2UoY3R4dCksCi0JCQkJCQkgYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSksCi0JCQkJZGVzdCwgbGVuLCBjdHh0LT52Y3B1KTsKLQlpZiAocmMgIT0gMCkKLQkJcmV0dXJuIHJjOwotCi0JcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoYywgJmMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0sIGxlbik7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBlbXVsYXRlX2dycDFhKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAotCQkJCXN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKLXsKLQlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKLQlpbnQgcmM7Ci0KLQlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcywgJmMtPmRzdC52YWwsIGMtPmRzdC5ieXRlcyk7Ci0JaWYgKHJjICE9IDApCi0JCXJldHVybiByYzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGVtdWxhdGVfZ3JwMihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLQlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKLQlzd2l0Y2ggKGMtPm1vZHJtX3JlZykgewotCWNhc2UgMDoJLyogcm9sICovCi0JCWVtdWxhdGVfMm9wX1NyY0IoInJvbCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDE6CS8qIHJvciAqLwotCQllbXVsYXRlXzJvcF9TcmNCKCJyb3IiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgkvKiByY2wgKi8KLQkJZW11bGF0ZV8yb3BfU3JjQigicmNsIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7Ci0JCWJyZWFrOwotCWNhc2UgMzoJLyogcmNyICovCi0JCWVtdWxhdGVfMm9wX1NyY0IoInJjciIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDQ6CS8qIHNhbC9zaGwgKi8KLQljYXNlIDY6CS8qIHNhbC9zaGwgKi8KLQkJZW11bGF0ZV8yb3BfU3JjQigic2FsIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7Ci0JCWJyZWFrOwotCWNhc2UgNToJLyogc2hyICovCi0JCWVtdWxhdGVfMm9wX1NyY0IoInNociIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDc6CS8qIHNhciAqLwotCQllbXVsYXRlXzJvcF9TcmNCKCJzYXIiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludCBlbXVsYXRlX2dycDMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0JCQkgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQotewotCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwotCWludCByYyA9IDA7Ci0KLQlzd2l0Y2ggKGMtPm1vZHJtX3JlZykgewotCWNhc2UgMCAuLi4gMToJLyogdGVzdCAqLwotCQllbXVsYXRlXzJvcF9TcmNWKCJ0ZXN0IiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7Ci0JCWJyZWFrOwotCWNhc2UgMjoJLyogbm90ICovCi0JCWMtPmRzdC52YWwgPSB+Yy0+ZHN0LnZhbDsKLQkJYnJlYWs7Ci0JY2FzZSAzOgkvKiBuZWcgKi8KLQkJZW11bGF0ZV8xb3AoIm5lZyIsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFBSSU5URigiQ2Fubm90IGVtdWxhdGUgJTAyeFxuIiwgYy0+Yik7Ci0JCXJjID0gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGVtdWxhdGVfZ3JwNDUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0JCQkgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQotewotCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwotCi0Jc3dpdGNoIChjLT5tb2RybV9yZWcpIHsKLQljYXNlIDA6CS8qIGluYyAqLwotCQllbXVsYXRlXzFvcCgiaW5jIiwgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDE6CS8qIGRlYyAqLwotCQllbXVsYXRlXzFvcCgiZGVjIiwgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDI6IC8qIGNhbGwgbmVhciBhYnMgKi8gewotCQlsb25nIGludCBvbGRfZWlwOwotCQlvbGRfZWlwID0gYy0+ZWlwOwotCQljLT5laXAgPSBjLT5zcmMudmFsOwotCQljLT5zcmMudmFsID0gb2xkX2VpcDsKLQkJZW11bGF0ZV9wdXNoKGN0eHQpOwotCQlicmVhazsKLQl9Ci0JY2FzZSA0OiAvKiBqbXAgYWJzICovCi0JCWMtPmVpcCA9IGMtPnNyYy52YWw7Ci0JCWJyZWFrOwotCWNhc2UgNjoJLyogcHVzaCAqLwotCQllbXVsYXRlX3B1c2goY3R4dCk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZW11bGF0ZV9ncnA5KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAotCQkJICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcywKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG1lbW9wKQotewotCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwotCXU2NCBvbGQsIG5ldzsKLQlpbnQgcmM7Ci0KLQlyYyA9IG9wcy0+cmVhZF9lbXVsYXRlZChtZW1vcCwgJm9sZCwgOCwgY3R4dC0+dmNwdSk7Ci0JaWYgKHJjICE9IDApCi0JCXJldHVybiByYzsKLQotCWlmICgoKHUzMikgKG9sZCA+PiAwKSAhPSAodTMyKSBjLT5yZWdzW1ZDUFVfUkVHU19SQVhdKSB8fAotCSAgICAoKHUzMikgKG9sZCA+PiAzMikgIT0gKHUzMikgYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXSkpIHsKLQotCQljLT5yZWdzW1ZDUFVfUkVHU19SQVhdID0gKHUzMikgKG9sZCA+PiAwKTsKLQkJYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXSA9ICh1MzIpIChvbGQgPj4gMzIpOwotCQljdHh0LT5lZmxhZ3MgJj0gfkVGTEdfWkY7Ci0KLQl9IGVsc2UgewotCQluZXcgPSAoKHU2NCljLT5yZWdzW1ZDUFVfUkVHU19SQ1hdIDw8IDMyKSB8Ci0JCSAgICAgICAodTMyKSBjLT5yZWdzW1ZDUFVfUkVHU19SQlhdOwotCi0JCXJjID0gb3BzLT5jbXB4Y2hnX2VtdWxhdGVkKG1lbW9wLCAmb2xkLCAmbmV3LCA4LCBjdHh0LT52Y3B1KTsKLQkJaWYgKHJjICE9IDApCi0JCQlyZXR1cm4gcmM7Ci0JCWN0eHQtPmVmbGFncyB8PSBFRkxHX1pGOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBlbXVsYXRlX3JldF9mYXIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCi0JCQkgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCi17Ci0Jc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7Ci0JaW50IHJjOwotCXVuc2lnbmVkIGxvbmcgY3M7Ci0KLQlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcywgJmMtPmVpcCwgYy0+b3BfYnl0ZXMpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCWlmIChjLT5vcF9ieXRlcyA9PSA0KQotCQljLT5laXAgPSAodTMyKWMtPmVpcDsKLQlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcywgJmNzLCBjLT5vcF9ieXRlcyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0JcmMgPSBrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dC0+dmNwdSwgKHUxNiljcywgMSwgVkNQVV9TUkVHX0NTKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHdyaXRlYmFjayhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKLQkJCSAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCi17Ci0JaW50IHJjOwotCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwotCi0Jc3dpdGNoIChjLT5kc3QudHlwZSkgewotCWNhc2UgT1BfUkVHOgotCQkvKiBUaGUgNC1ieXRlIGNhc2UgKmlzKiBjb3JyZWN0OgotCQkgKiBpbiA2NC1iaXQgbW9kZSB3ZSB6ZXJvLWV4dGVuZC4KLQkJICovCi0JCXN3aXRjaCAoYy0+ZHN0LmJ5dGVzKSB7Ci0JCWNhc2UgMToKLQkJCSoodTggKiljLT5kc3QucHRyID0gKHU4KWMtPmRzdC52YWw7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJKih1MTYgKiljLT5kc3QucHRyID0gKHUxNiljLT5kc3QudmFsOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCSpjLT5kc3QucHRyID0gKHUzMiljLT5kc3QudmFsOwotCQkJYnJlYWs7CS8qIDY0YjogemVyby1leHQgKi8KLQkJY2FzZSA4OgotCQkJKmMtPmRzdC5wdHIgPSBjLT5kc3QudmFsOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBPUF9NRU06Ci0JCWlmIChjLT5sb2NrX3ByZWZpeCkKLQkJCXJjID0gb3BzLT5jbXB4Y2hnX2VtdWxhdGVkKAotCQkJCQkodW5zaWduZWQgbG9uZyljLT5kc3QucHRyLAotCQkJCQkmYy0+ZHN0Lm9yaWdfdmFsLAotCQkJCQkmYy0+ZHN0LnZhbCwKLQkJCQkJYy0+ZHN0LmJ5dGVzLAotCQkJCQljdHh0LT52Y3B1KTsKLQkJZWxzZQotCQkJcmMgPSBvcHMtPndyaXRlX2VtdWxhdGVkKAotCQkJCQkodW5zaWduZWQgbG9uZyljLT5kc3QucHRyLAotCQkJCQkmYy0+ZHN0LnZhbCwKLQkJCQkJYy0+ZHN0LmJ5dGVzLAotCQkJCQljdHh0LT52Y3B1KTsKLQkJaWYgKHJjICE9IDApCi0JCQlyZXR1cm4gcmM7Ci0JCWJyZWFrOwotCWNhc2UgT1BfTk9ORToKLQkJLyogbm8gd3JpdGViYWNrICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdG9nZ2xlX2ludGVycnVwdGliaWxpdHkoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHUzMiBtYXNrKQotewotCXUzMiBpbnRfc2hhZG93ID0ga3ZtX3g4Nl9vcHMtPmdldF9pbnRlcnJ1cHRfc2hhZG93KGN0eHQtPnZjcHUsIG1hc2spOwotCS8qCi0JICogYW4gc3RpOyBzdGk7IHNlcXVlbmNlIG9ubHkgZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGUgZmlyc3QKLQkgKiBpbnN0cnVjdGlvbi4gU28sIGlmIHRoZSBsYXN0IGluc3RydWN0aW9uLCBiZSBpdCBlbXVsYXRlZCBvcgotCSAqIG5vdCwgbGVmdCB0aGUgc3lzdGVtIHdpdGggdGhlIElOVF9TVEkgZmxhZyBlbmFibGVkLCBpdAotCSAqIG1lYW5zIHRoYXQgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaXMgYW4gc3RpLiBXZSBzaG91bGQgbm90Ci0JICogbGVhdmUgdGhlIGZsYWcgb24gaW4gdGhpcyBjYXNlLiBUaGUgc2FtZSBnb2VzIGZvciBtb3Ygc3MKLQkgKi8KLQlpZiAoIShpbnRfc2hhZG93ICYgbWFzaykpCi0JCWN0eHQtPmludGVycnVwdGliaWxpdHkgPSBtYXNrOwotfQotCi1pbnQKLXg4Nl9lbXVsYXRlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKLXsKLQl1bnNpZ25lZCBsb25nIG1lbW9wID0gMDsKLQl1NjQgbXNyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBzYXZlZF9laXAgPSAwOwotCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwotCXVuc2lnbmVkIGludCBwb3J0OwotCWludCBpb19kaXJfaW47Ci0JaW50IHJjID0gMDsKLQotCWN0eHQtPmludGVycnVwdGliaWxpdHkgPSAwOwotCi0JLyogU2hhZG93IGNvcHkgb2YgcmVnaXN0ZXIgc3RhdGUuIENvbW1pdHRlZCBvbiBzdWNjZXNzZnVsIGVtdWxhdGlvbi4KLQkgKiBOT1RFOiB3ZSBjYW4gY29weSB0aGVtIGZyb20gdmNwdSBhcyB4ODZfZGVjb2RlX2luc24oKSBkb2Vzbid0Ci0JICogbW9kaWZ5IHRoZW0uCi0JICovCi0KLQltZW1jcHkoYy0+cmVncywgY3R4dC0+dmNwdS0+YXJjaC5yZWdzLCBzaXplb2YgYy0+cmVncyk7Ci0Jc2F2ZWRfZWlwID0gYy0+ZWlwOwotCi0JaWYgKCgoYy0+ZCAmIE1vZFJNKSAmJiAoYy0+bW9kcm1fbW9kICE9IDMpKSB8fCAoYy0+ZCAmIE1lbUFicykpCi0JCW1lbW9wID0gYy0+bW9kcm1fZWE7Ci0KLQlpZiAoYy0+cmVwX3ByZWZpeCAmJiAoYy0+ZCAmIFN0cmluZykpIHsKLQkJLyogQWxsIFJFUCBwcmVmaXhlcyBoYXZlIHRoZSBzYW1lIGZpcnN0IHRlcm1pbmF0aW9uIGNvbmRpdGlvbiAqLwotCQlpZiAoYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSA9PSAwKSB7Ci0JCQlrdm1fcmlwX3dyaXRlKGN0eHQtPnZjcHUsIGMtPmVpcCk7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQkJLyogVGhlIHNlY29uZCB0ZXJtaW5hdGlvbiBjb25kaXRpb24gb25seSBhcHBsaWVzIGZvciBSRVBFCi0JCSAqIGFuZCBSRVBORS4gVGVzdCBpZiB0aGUgcmVwZWF0IHN0cmluZyBvcGVyYXRpb24gcHJlZml4IGlzCi0JCSAqIFJFUEUvUkVQWiBvciBSRVBORS9SRVBOWiBhbmQgaWYgaXQncyB0aGUgY2FzZSBpdCB0ZXN0cyB0aGUKLQkJICogY29ycmVzcG9uZGluZyB0ZXJtaW5hdGlvbiBjb25kaXRpb24gYWNjb3JkaW5nIHRvOgotCQkgKiAJLSBpZiBSRVBFL1JFUFogYW5kIFpGID0gMCB0aGVuIGRvbmUKLQkJICogCS0gaWYgUkVQTkUvUkVQTlogYW5kIFpGID0gMSB0aGVuIGRvbmUKLQkJICovCi0JCWlmICgoYy0+YiA9PSAweGE2KSB8fCAoYy0+YiA9PSAweGE3KSB8fAotCQkJCShjLT5iID09IDB4YWUpIHx8IChjLT5iID09IDB4YWYpKSB7Ci0JCQlpZiAoKGMtPnJlcF9wcmVmaXggPT0gUkVQRV9QUkVGSVgpICYmCi0JCQkJKChjdHh0LT5lZmxhZ3MgJiBFRkxHX1pGKSA9PSAwKSkgewotCQkJCQlrdm1fcmlwX3dyaXRlKGN0eHQtPnZjcHUsIGMtPmVpcCk7Ci0JCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJCWlmICgoYy0+cmVwX3ByZWZpeCA9PSBSRVBORV9QUkVGSVgpICYmCi0JCQkJKChjdHh0LT5lZmxhZ3MgJiBFRkxHX1pGKSA9PSBFRkxHX1pGKSkgewotCQkJCWt2bV9yaXBfd3JpdGUoY3R4dC0+dmNwdSwgYy0+ZWlwKTsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0JCX0KLQkJYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXS0tOwotCQljLT5laXAgPSBrdm1fcmlwX3JlYWQoY3R4dC0+dmNwdSk7Ci0JfQotCi0JaWYgKGMtPnNyYy50eXBlID09IE9QX01FTSkgewotCQljLT5zcmMucHRyID0gKHVuc2lnbmVkIGxvbmcgKiltZW1vcDsKLQkJYy0+c3JjLnZhbCA9IDA7Ci0JCXJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKCh1bnNpZ25lZCBsb25nKWMtPnNyYy5wdHIsCi0JCQkJCSZjLT5zcmMudmFsLAotCQkJCQljLT5zcmMuYnl0ZXMsCi0JCQkJCWN0eHQtPnZjcHUpOwotCQlpZiAocmMgIT0gMCkKLQkJCWdvdG8gZG9uZTsKLQkJYy0+c3JjLm9yaWdfdmFsID0gYy0+c3JjLnZhbDsKLQl9Ci0KLQlpZiAoKGMtPmQgJiBEc3RNYXNrKSA9PSBJbXBsaWNpdE9wcykKLQkJZ290byBzcGVjaWFsX2luc247Ci0KLQotCWlmIChjLT5kc3QudHlwZSA9PSBPUF9NRU0pIHsKLQkJYy0+ZHN0LnB0ciA9ICh1bnNpZ25lZCBsb25nICopbWVtb3A7Ci0JCWMtPmRzdC5ieXRlcyA9IChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlczsKLQkJYy0+ZHN0LnZhbCA9IDA7Ci0JCWlmIChjLT5kICYgQml0T3ApIHsKLQkJCXVuc2lnbmVkIGxvbmcgbWFzayA9IH4oYy0+ZHN0LmJ5dGVzICogOCAtIDEpOwotCi0JCQljLT5kc3QucHRyID0gKHZvaWQgKiljLT5kc3QucHRyICsKLQkJCQkJCSAgIChjLT5zcmMudmFsICYgbWFzaykgLyA4OwotCQl9Ci0JCWlmICghKGMtPmQgJiBNb3YpICYmCi0JCQkJICAgLyogb3B0aW1pc2F0aW9uIC0gYXZvaWQgc2xvdyBlbXVsYXRlZCByZWFkICovCi0JCSAgICAoKHJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKCh1bnNpZ25lZCBsb25nKWMtPmRzdC5wdHIsCi0JCQkJCSAgICZjLT5kc3QudmFsLAotCQkJCQkgIGMtPmRzdC5ieXRlcywgY3R4dC0+dmNwdSkpICE9IDApKQotCQkJZ290byBkb25lOwotCX0KLQljLT5kc3Qub3JpZ192YWwgPSBjLT5kc3QudmFsOwotCi1zcGVjaWFsX2luc246Ci0KLQlpZiAoYy0+dHdvYnl0ZSkKLQkJZ290byB0d29ieXRlX2luc247Ci0KLQlzd2l0Y2ggKGMtPmIpIHsKLQljYXNlIDB4MDAgLi4uIDB4MDU6Ci0JICAgICAgYWRkOgkJLyogYWRkICovCi0JCWVtdWxhdGVfMm9wX1NyY1YoImFkZCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDB4MDggLi4uIDB4MGQ6Ci0JICAgICAgb3I6CQkvKiBvciAqLwotCQllbXVsYXRlXzJvcF9TcmNWKCJvciIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDB4MTAgLi4uIDB4MTU6Ci0JICAgICAgYWRjOgkJLyogYWRjICovCi0JCWVtdWxhdGVfMm9wX1NyY1YoImFkYyIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDB4MTggLi4uIDB4MWQ6Ci0JICAgICAgc2JiOgkJLyogc2JiICovCi0JCWVtdWxhdGVfMm9wX1NyY1YoInNiYiIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDB4MjAgLi4uIDB4MjU6Ci0JICAgICAgYW5kOgkJLyogYW5kICovCi0JCWVtdWxhdGVfMm9wX1NyY1YoImFuZCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDB4MjggLi4uIDB4MmQ6Ci0JICAgICAgc3ViOgkJLyogc3ViICovCi0JCWVtdWxhdGVfMm9wX1NyY1YoInN1YiIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDB4MzAgLi4uIDB4MzU6Ci0JICAgICAgeG9yOgkJLyogeG9yICovCi0JCWVtdWxhdGVfMm9wX1NyY1YoInhvciIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDB4MzggLi4uIDB4M2Q6Ci0JICAgICAgY21wOgkJLyogY21wICovCi0JCWVtdWxhdGVfMm9wX1NyY1YoImNtcCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDB4NDAgLi4uIDB4NDc6IC8qIGluYyByMTYvcjMyICovCi0JCWVtdWxhdGVfMW9wKCJpbmMiLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7Ci0JCWJyZWFrOwotCWNhc2UgMHg0OCAuLi4gMHg0ZjogLyogZGVjIHIxNi9yMzIgKi8KLQkJZW11bGF0ZV8xb3AoImRlYyIsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDUwIC4uLiAweDU3OiAgLyogcHVzaCByZWcgKi8KLQkJZW11bGF0ZV9wdXNoKGN0eHQpOwotCQlicmVhazsKLQljYXNlIDB4NTggLi4uIDB4NWY6IC8qIHBvcCByZWcgKi8KLQlwb3BfaW5zdHJ1Y3Rpb246Ci0JCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmYy0+ZHN0LnZhbCwgYy0+b3BfYnl0ZXMpOwotCQlpZiAocmMgIT0gMCkKLQkJCWdvdG8gZG9uZTsKLQkJYnJlYWs7Ci0JY2FzZSAweDYzOgkJLyogbW92c3hkICovCi0JCWlmIChjdHh0LT5tb2RlICE9IFg4NkVNVUxfTU9ERV9QUk9UNjQpCi0JCQlnb3RvIGNhbm5vdF9lbXVsYXRlOwotCQljLT5kc3QudmFsID0gKHMzMikgYy0+c3JjLnZhbDsKLQkJYnJlYWs7Ci0JY2FzZSAweDY4OiAvKiBwdXNoIGltbSAqLwotCWNhc2UgMHg2YTogLyogcHVzaCBpbW04ICovCi0JCWVtdWxhdGVfcHVzaChjdHh0KTsKLQkJYnJlYWs7Ci0JY2FzZSAweDZjOgkJLyogaW5zYiAqLwotCWNhc2UgMHg2ZDoJCS8qIGluc3cvaW5zZCAqLwotCQkgaWYgKGt2bV9lbXVsYXRlX3Bpb19zdHJpbmcoY3R4dC0+dmNwdSwgTlVMTCwKLQkJCQkxLAotCQkJCShjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlcywKLQkJCQljLT5yZXBfcHJlZml4ID8KLQkJCQlhZGRyZXNzX21hc2soYywgYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSkgOiAxLAotCQkJCShjdHh0LT5lZmxhZ3MgJiBFRkxHX0RGKSwKLQkJCQlyZWdpc3Rlcl9hZGRyZXNzKGMsIGVzX2Jhc2UoY3R4dCksCi0JCQkJCQkgYy0+cmVnc1tWQ1BVX1JFR1NfUkRJXSksCi0JCQkJYy0+cmVwX3ByZWZpeCwKLQkJCQljLT5yZWdzW1ZDUFVfUkVHU19SRFhdKSA9PSAwKSB7Ci0JCQljLT5laXAgPSBzYXZlZF9laXA7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JY2FzZSAweDZlOgkJLyogb3V0c2IgKi8KLQljYXNlIDB4NmY6CQkvKiBvdXRzdy9vdXRzZCAqLwotCQlpZiAoa3ZtX2VtdWxhdGVfcGlvX3N0cmluZyhjdHh0LT52Y3B1LCBOVUxMLAotCQkJCTAsCi0JCQkJKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzLAotCQkJCWMtPnJlcF9wcmVmaXggPwotCQkJCWFkZHJlc3NfbWFzayhjLCBjLT5yZWdzW1ZDUFVfUkVHU19SQ1hdKSA6IDEsCi0JCQkJKGN0eHQtPmVmbGFncyAmIEVGTEdfREYpLAotCQkJCQkgcmVnaXN0ZXJfYWRkcmVzcyhjLAotCQkJCQkgIHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIGMpLAotCQkJCQkJIGMtPnJlZ3NbVkNQVV9SRUdTX1JTSV0pLAotCQkJCWMtPnJlcF9wcmVmaXgsCi0JCQkJYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXSkgPT0gMCkgewotCQkJYy0+ZWlwID0gc2F2ZWRfZWlwOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCXJldHVybiAwOwotCWNhc2UgMHg3MCAuLi4gMHg3ZjogLyogamNjIChzaG9ydCkgKi8KLQkJaWYgKHRlc3RfY2MoYy0+YiwgY3R4dC0+ZWZsYWdzKSkKLQkJCWptcF9yZWwoYywgYy0+c3JjLnZhbCk7Ci0JCWJyZWFrOwotCWNhc2UgMHg4MCAuLi4gMHg4MzoJLyogR3JwMSAqLwotCQlzd2l0Y2ggKGMtPm1vZHJtX3JlZykgewotCQljYXNlIDA6Ci0JCQlnb3RvIGFkZDsKLQkJY2FzZSAxOgotCQkJZ290byBvcjsKLQkJY2FzZSAyOgotCQkJZ290byBhZGM7Ci0JCWNhc2UgMzoKLQkJCWdvdG8gc2JiOwotCQljYXNlIDQ6Ci0JCQlnb3RvIGFuZDsKLQkJY2FzZSA1OgotCQkJZ290byBzdWI7Ci0JCWNhc2UgNjoKLQkJCWdvdG8geG9yOwotCQljYXNlIDc6Ci0JCQlnb3RvIGNtcDsKLQkJfQotCQlicmVhazsKLQljYXNlIDB4ODQgLi4uIDB4ODU6Ci0JCWVtdWxhdGVfMm9wX1NyY1YoInRlc3QiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDg2IC4uLiAweDg3OgkvKiB4Y2hnICovCi0JeGNoZzoKLQkJLyogV3JpdGUgYmFjayB0aGUgcmVnaXN0ZXIgc291cmNlLiAqLwotCQlzd2l0Y2ggKGMtPmRzdC5ieXRlcykgewotCQljYXNlIDE6Ci0JCQkqKHU4ICopIGMtPnNyYy5wdHIgPSAodTgpIGMtPmRzdC52YWw7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJKih1MTYgKikgYy0+c3JjLnB0ciA9ICh1MTYpIGMtPmRzdC52YWw7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJKmMtPnNyYy5wdHIgPSAodTMyKSBjLT5kc3QudmFsOwotCQkJYnJlYWs7CS8qIDY0YiByZWc6IHplcm8tZXh0ZW5kICovCi0JCWNhc2UgODoKLQkJCSpjLT5zcmMucHRyID0gYy0+ZHN0LnZhbDsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qCi0JCSAqIFdyaXRlIGJhY2sgdGhlIG1lbW9yeSBkZXN0aW5hdGlvbiB3aXRoIGltcGxpY2l0IExPQ0sKLQkJICogcHJlZml4LgotCQkgKi8KLQkJYy0+ZHN0LnZhbCA9IGMtPnNyYy52YWw7Ci0JCWMtPmxvY2tfcHJlZml4ID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSAweDg4IC4uLiAweDhiOgkvKiBtb3YgKi8KLQkJZ290byBtb3Y7Ci0JY2FzZSAweDhjOiB7IC8qIG1vdiByL20sIHNyZWcgKi8KLQkJc3RydWN0IGt2bV9zZWdtZW50IHNlZ3JlZzsKLQotCQlpZiAoYy0+bW9kcm1fcmVnIDw9IDUpCi0JCQlrdm1fZ2V0X3NlZ21lbnQoY3R4dC0+dmNwdSwgJnNlZ3JlZywgYy0+bW9kcm1fcmVnKTsKLQkJZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIweDhjOiBJbnZhbGlkIHNlZ3JlZyBpbiBtb2RybSBieXRlIDB4JTAyeFxuIiwKLQkJCSAgICAgICBjLT5tb2RybSk7Ci0JCQlnb3RvIGNhbm5vdF9lbXVsYXRlOwotCQl9Ci0JCWMtPmRzdC52YWwgPSBzZWdyZWcuc2VsZWN0b3I7Ci0JCWJyZWFrOwotCX0KLQljYXNlIDB4OGQ6IC8qIGxlYSByMTYvcjMyLCBtICovCi0JCWMtPmRzdC52YWwgPSBjLT5tb2RybV9lYTsKLQkJYnJlYWs7Ci0JY2FzZSAweDhlOiB7IC8qIG1vdiBzZWcsIHIvbTE2ICovCi0JCXVpbnQxNl90IHNlbDsKLQkJaW50IHR5cGVfYml0czsKLQkJaW50IGVycjsKLQotCQlzZWwgPSBjLT5zcmMudmFsOwotCQlpZiAoYy0+bW9kcm1fcmVnID09IFZDUFVfU1JFR19TUykKLQkJCXRvZ2dsZV9pbnRlcnJ1cHRpYmlsaXR5KGN0eHQsIFg4Nl9TSEFET1dfSU5UX01PVl9TUyk7Ci0KLQkJaWYgKGMtPm1vZHJtX3JlZyA8PSA1KSB7Ci0JCQl0eXBlX2JpdHMgPSAoYy0+bW9kcm1fcmVnID09IDEpID8gOSA6IDE7Ci0JCQllcnIgPSBrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dC0+dmNwdSwgc2VsLAotCQkJCQkJCSAgdHlwZV9iaXRzLCBjLT5tb2RybV9yZWcpOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiSW52YWxpZCBzZWdyZWcgaW4gbW9kcm0gYnl0ZSAweCUwMnhcbiIsCi0JCQkJCWMtPm1vZHJtKTsKLQkJCWdvdG8gY2Fubm90X2VtdWxhdGU7Ci0JCX0KLQotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gY2Fubm90X2VtdWxhdGU7Ci0KLQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOyAgLyogRGlzYWJsZSB3cml0ZWJhY2suICovCi0JCWJyZWFrOwotCX0KLQljYXNlIDB4OGY6CQkvKiBwb3AgKHNvbGUgbWVtYmVyIG9mIEdycDFhKSAqLwotCQlyYyA9IGVtdWxhdGVfZ3JwMWEoY3R4dCwgb3BzKTsKLQkJaWYgKHJjICE9IDApCi0JCQlnb3RvIGRvbmU7Ci0JCWJyZWFrOwotCWNhc2UgMHg5MDogLyogbm9wIC8geGNoZyByOCxyYXggKi8KLQkJaWYgKCEoYy0+cmV4X3ByZWZpeCAmIDEpKSB7IC8qIG5vcCAqLwotCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIDB4OTEgLi4uIDB4OTc6IC8qIHhjaGcgcmVnLHJheCAqLwotCQljLT5zcmMudHlwZSA9IGMtPmRzdC50eXBlID0gT1BfUkVHOwotCQljLT5zcmMuYnl0ZXMgPSBjLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKLQkJYy0+c3JjLnB0ciA9ICh1bnNpZ25lZCBsb25nICopICZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCQljLT5zcmMudmFsID0gKihjLT5zcmMucHRyKTsKLQkJZ290byB4Y2hnOwotCWNhc2UgMHg5YzogLyogcHVzaGYgKi8KLQkJYy0+c3JjLnZhbCA9ICAodW5zaWduZWQgbG9uZykgY3R4dC0+ZWZsYWdzOwotCQllbXVsYXRlX3B1c2goY3R4dCk7Ci0JCWJyZWFrOwotCWNhc2UgMHg5ZDogLyogcG9wZiAqLwotCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKLQkJYy0+ZHN0LnB0ciA9ICh1bnNpZ25lZCBsb25nICopICZjdHh0LT5lZmxhZ3M7Ci0JCWMtPmRzdC5ieXRlcyA9IGMtPm9wX2J5dGVzOwotCQlnb3RvIHBvcF9pbnN0cnVjdGlvbjsKLQljYXNlIDB4YTAgLi4uIDB4YTE6CS8qIG1vdiAqLwotCQljLT5kc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKikmYy0+cmVnc1tWQ1BVX1JFR1NfUkFYXTsKLQkJYy0+ZHN0LnZhbCA9IGMtPnNyYy52YWw7Ci0JCWJyZWFrOwotCWNhc2UgMHhhMiAuLi4gMHhhMzoJLyogbW92ICovCi0JCWMtPmRzdC52YWwgPSAodW5zaWduZWQgbG9uZyljLT5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCQlicmVhazsKLQljYXNlIDB4YTQgLi4uIDB4YTU6CS8qIG1vdnMgKi8KLQkJYy0+ZHN0LnR5cGUgPSBPUF9NRU07Ci0JCWMtPmRzdC5ieXRlcyA9IChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlczsKLQkJYy0+ZHN0LnB0ciA9ICh1bnNpZ25lZCBsb25nICopcmVnaXN0ZXJfYWRkcmVzcyhjLAotCQkJCQkJICAgZXNfYmFzZShjdHh0KSwKLQkJCQkJCSAgIGMtPnJlZ3NbVkNQVV9SRUdTX1JESV0pOwotCQlpZiAoKHJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKHJlZ2lzdGVyX2FkZHJlc3MoYywKLQkJCQkJICAgc2VnX292ZXJyaWRlX2Jhc2UoY3R4dCwgYyksCi0JCQkJCWMtPnJlZ3NbVkNQVV9SRUdTX1JTSV0pLAotCQkJCQkmYy0+ZHN0LnZhbCwKLQkJCQkJYy0+ZHN0LmJ5dGVzLCBjdHh0LT52Y3B1KSkgIT0gMCkKLQkJCWdvdG8gZG9uZTsKLQkJcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoYywgJmMtPnJlZ3NbVkNQVV9SRUdTX1JTSV0sCi0JCQkJICAgICAgIChjdHh0LT5lZmxhZ3MgJiBFRkxHX0RGKSA/IC1jLT5kc3QuYnl0ZXMKLQkJCQkJCQkgICA6IGMtPmRzdC5ieXRlcyk7Ci0JCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SREldLAotCQkJCSAgICAgICAoY3R4dC0+ZWZsYWdzICYgRUZMR19ERikgPyAtYy0+ZHN0LmJ5dGVzCi0JCQkJCQkJICAgOiBjLT5kc3QuYnl0ZXMpOwotCQlicmVhazsKLQljYXNlIDB4YTYgLi4uIDB4YTc6CS8qIGNtcHMgKi8KLQkJYy0+c3JjLnR5cGUgPSBPUF9OT05FOyAvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KLQkJYy0+c3JjLmJ5dGVzID0gKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzOwotCQljLT5zcmMucHRyID0gKHVuc2lnbmVkIGxvbmcgKilyZWdpc3Rlcl9hZGRyZXNzKGMsCi0JCQkJICAgICAgIHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIGMpLAotCQkJCQkJICAgYy0+cmVnc1tWQ1BVX1JFR1NfUlNJXSk7Ci0JCWlmICgocmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoKHVuc2lnbmVkIGxvbmcpYy0+c3JjLnB0ciwKLQkJCQkJCSZjLT5zcmMudmFsLAotCQkJCQkJYy0+c3JjLmJ5dGVzLAotCQkJCQkJY3R4dC0+dmNwdSkpICE9IDApCi0JCQlnb3RvIGRvbmU7Ci0KLQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOyAvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KLQkJYy0+ZHN0LmJ5dGVzID0gKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzOwotCQljLT5kc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKilyZWdpc3Rlcl9hZGRyZXNzKGMsCi0JCQkJCQkgICBlc19iYXNlKGN0eHQpLAotCQkJCQkJICAgYy0+cmVnc1tWQ1BVX1JFR1NfUkRJXSk7Ci0JCWlmICgocmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoKHVuc2lnbmVkIGxvbmcpYy0+ZHN0LnB0ciwKLQkJCQkJCSZjLT5kc3QudmFsLAotCQkJCQkJYy0+ZHN0LmJ5dGVzLAotCQkJCQkJY3R4dC0+dmNwdSkpICE9IDApCi0JCQlnb3RvIGRvbmU7Ci0KLQkJRFBSSU5URigiY21wczogbWVtMT0weCVwIG1lbTI9MHglcFxuIiwgYy0+c3JjLnB0ciwgYy0+ZHN0LnB0cik7Ci0KLQkJZW11bGF0ZV8yb3BfU3JjVigiY21wIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7Ci0KLQkJcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoYywgJmMtPnJlZ3NbVkNQVV9SRUdTX1JTSV0sCi0JCQkJICAgICAgIChjdHh0LT5lZmxhZ3MgJiBFRkxHX0RGKSA/IC1jLT5zcmMuYnl0ZXMKLQkJCQkJCQkJICA6IGMtPnNyYy5ieXRlcyk7Ci0JCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SREldLAotCQkJCSAgICAgICAoY3R4dC0+ZWZsYWdzICYgRUZMR19ERikgPyAtYy0+ZHN0LmJ5dGVzCi0JCQkJCQkJCSAgOiBjLT5kc3QuYnl0ZXMpOwotCi0JCWJyZWFrOwotCWNhc2UgMHhhYSAuLi4gMHhhYjoJLyogc3RvcyAqLwotCQljLT5kc3QudHlwZSA9IE9QX01FTTsKLQkJYy0+ZHN0LmJ5dGVzID0gKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzOwotCQljLT5kc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKilyZWdpc3Rlcl9hZGRyZXNzKGMsCi0JCQkJCQkgICBlc19iYXNlKGN0eHQpLAotCQkJCQkJICAgYy0+cmVnc1tWQ1BVX1JFR1NfUkRJXSk7Ci0JCWMtPmRzdC52YWwgPSBjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCQlyZWdpc3Rlcl9hZGRyZXNzX2luY3JlbWVudChjLCAmYy0+cmVnc1tWQ1BVX1JFR1NfUkRJXSwKLQkJCQkgICAgICAgKGN0eHQtPmVmbGFncyAmIEVGTEdfREYpID8gLWMtPmRzdC5ieXRlcwotCQkJCQkJCSAgIDogYy0+ZHN0LmJ5dGVzKTsKLQkJYnJlYWs7Ci0JY2FzZSAweGFjIC4uLiAweGFkOgkvKiBsb2RzICovCi0JCWMtPmRzdC50eXBlID0gT1BfUkVHOwotCQljLT5kc3QuYnl0ZXMgPSAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDogYy0+b3BfYnl0ZXM7Ci0JCWMtPmRzdC5wdHIgPSAodW5zaWduZWQgbG9uZyAqKSZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCQlpZiAoKHJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKHJlZ2lzdGVyX2FkZHJlc3MoYywKLQkJCQkJCSBzZWdfb3ZlcnJpZGVfYmFzZShjdHh0LCBjKSwKLQkJCQkJCSBjLT5yZWdzW1ZDUFVfUkVHU19SU0ldKSwKLQkJCQkJCSAmYy0+ZHN0LnZhbCwKLQkJCQkJCSBjLT5kc3QuYnl0ZXMsCi0JCQkJCQkgY3R4dC0+dmNwdSkpICE9IDApCi0JCQlnb3RvIGRvbmU7Ci0JCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SU0ldLAotCQkJCSAgICAgICAoY3R4dC0+ZWZsYWdzICYgRUZMR19ERikgPyAtYy0+ZHN0LmJ5dGVzCi0JCQkJCQkJICAgOiBjLT5kc3QuYnl0ZXMpOwotCQlicmVhazsKLQljYXNlIDB4YWUgLi4uIDB4YWY6CS8qIHNjYXMgKi8KLQkJRFBSSU5URigiVXJrISBJIGRvbid0IGhhbmRsZSBTQ0FTLlxuIik7Ci0JCWdvdG8gY2Fubm90X2VtdWxhdGU7Ci0JY2FzZSAweGIwIC4uLiAweGJmOiAvKiBtb3YgciwgaW1tICovCi0JCWdvdG8gbW92OwotCWNhc2UgMHhjMCAuLi4gMHhjMToKLQkJZW11bGF0ZV9ncnAyKGN0eHQpOwotCQlicmVhazsKLQljYXNlIDB4YzM6IC8qIHJldCAqLwotCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKLQkJYy0+ZHN0LnB0ciA9ICZjLT5laXA7Ci0JCWMtPmRzdC5ieXRlcyA9IGMtPm9wX2J5dGVzOwotCQlnb3RvIHBvcF9pbnN0cnVjdGlvbjsKLQljYXNlIDB4YzYgLi4uIDB4Yzc6CS8qIG1vdiAoc29sZSBtZW1iZXIgb2YgR3JwMTEpICovCi0JbW92OgotCQljLT5kc3QudmFsID0gYy0+c3JjLnZhbDsKLQkJYnJlYWs7Ci0JY2FzZSAweGNiOgkJLyogcmV0IGZhciAqLwotCQlyYyA9IGVtdWxhdGVfcmV0X2ZhcihjdHh0LCBvcHMpOwotCQlpZiAocmMpCi0JCQlnb3RvIGRvbmU7Ci0JCWJyZWFrOwotCWNhc2UgMHhkMCAuLi4gMHhkMToJLyogR3JwMiAqLwotCQljLT5zcmMudmFsID0gMTsKLQkJZW11bGF0ZV9ncnAyKGN0eHQpOwotCQlicmVhazsKLQljYXNlIDB4ZDIgLi4uIDB4ZDM6CS8qIEdycDIgKi8KLQkJYy0+c3JjLnZhbCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JDWF07Ci0JCWVtdWxhdGVfZ3JwMihjdHh0KTsKLQkJYnJlYWs7Ci0JY2FzZSAweGU0OiAJLyogaW5iICovCi0JY2FzZSAweGU1OiAJLyogaW4gKi8KLQkJcG9ydCA9IGMtPnNyYy52YWw7Ci0JCWlvX2Rpcl9pbiA9IDE7Ci0JCWdvdG8gZG9faW87Ci0JY2FzZSAweGU2OiAvKiBvdXRiICovCi0JY2FzZSAweGU3OiAvKiBvdXQgKi8KLQkJcG9ydCA9IGMtPnNyYy52YWw7Ci0JCWlvX2Rpcl9pbiA9IDA7Ci0JCWdvdG8gZG9faW87Ci0JY2FzZSAweGU4OiAvKiBjYWxsIChuZWFyKSAqLyB7Ci0JCWxvbmcgaW50IHJlbCA9IGMtPnNyYy52YWw7Ci0JCWMtPnNyYy52YWwgPSAodW5zaWduZWQgbG9uZykgYy0+ZWlwOwotCQlqbXBfcmVsKGMsIHJlbCk7Ci0JCWVtdWxhdGVfcHVzaChjdHh0KTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgMHhlOTogLyogam1wIHJlbCAqLwotCQlnb3RvIGptcDsKLQljYXNlIDB4ZWE6IC8qIGptcCBmYXIgKi8KLQkJaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihjdHh0LT52Y3B1LCBjLT5zcmMyLnZhbCwgOSwKLQkJCQkJVkNQVV9TUkVHX0NTKSA8IDApIHsKLQkJCURQUklOVEYoImptcCBmYXI6IEZhaWxlZCB0byBsb2FkIENTIGRlc2NyaXB0b3JcbiIpOwotCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKLQkJfQotCi0JCWMtPmVpcCA9IGMtPnNyYy52YWw7Ci0JCWJyZWFrOwotCWNhc2UgMHhlYjoKLQkgICAgICBqbXA6CQkvKiBqbXAgcmVsIHNob3J0ICovCi0JCWptcF9yZWwoYywgYy0+c3JjLnZhbCk7Ci0JCWMtPmRzdC50eXBlID0gT1BfTk9ORTsgLyogRGlzYWJsZSB3cml0ZWJhY2suICovCi0JCWJyZWFrOwotCWNhc2UgMHhlYzogLyogaW4gYWwsZHggKi8KLQljYXNlIDB4ZWQ6IC8qIGluIChlL3IpYXgsZHggKi8KLQkJcG9ydCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07Ci0JCWlvX2Rpcl9pbiA9IDE7Ci0JCWdvdG8gZG9faW87Ci0JY2FzZSAweGVlOiAvKiBvdXQgYWwsZHggKi8KLQljYXNlIDB4ZWY6IC8qIG91dCAoZS9yKWF4LGR4ICovCi0JCXBvcnQgPSBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdOwotCQlpb19kaXJfaW4gPSAwOwotCWRvX2lvOglpZiAoa3ZtX2VtdWxhdGVfcGlvKGN0eHQtPnZjcHUsIE5VTEwsIGlvX2Rpcl9pbiwKLQkJCQkgICAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDogYy0+b3BfYnl0ZXMsCi0JCQkJICAgcG9ydCkgIT0gMCkgewotCQkJYy0+ZWlwID0gc2F2ZWRfZWlwOwotCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKLQkJfQotCQlicmVhazsKLQljYXNlIDB4ZjQ6ICAgICAgICAgICAgICAvKiBobHQgKi8KLQkJY3R4dC0+dmNwdS0+YXJjaC5oYWx0X3JlcXVlc3QgPSAxOwotCQlicmVhazsKLQljYXNlIDB4ZjU6CS8qIGNtYyAqLwotCQkvKiBjb21wbGVtZW50IGNhcnJ5IGZsYWcgZnJvbSBlZmxhZ3MgcmVnICovCi0JCWN0eHQtPmVmbGFncyBePSBFRkxHX0NGOwotCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIERpc2FibGUgd3JpdGViYWNrLiAqLwotCQlicmVhazsKLQljYXNlIDB4ZjYgLi4uIDB4Zjc6CS8qIEdycDMgKi8KLQkJcmMgPSBlbXVsYXRlX2dycDMoY3R4dCwgb3BzKTsKLQkJaWYgKHJjICE9IDApCi0JCQlnb3RvIGRvbmU7Ci0JCWJyZWFrOwotCWNhc2UgMHhmODogLyogY2xjICovCi0JCWN0eHQtPmVmbGFncyAmPSB+RUZMR19DRjsKLQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KLQkJYnJlYWs7Ci0JY2FzZSAweGZhOiAvKiBjbGkgKi8KLQkJY3R4dC0+ZWZsYWdzICY9IH5YODZfRUZMQUdTX0lGOwotCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIERpc2FibGUgd3JpdGViYWNrLiAqLwotCQlicmVhazsKLQljYXNlIDB4ZmI6IC8qIHN0aSAqLwotCQl0b2dnbGVfaW50ZXJydXB0aWJpbGl0eShjdHh0LCBYODZfU0hBRE9XX0lOVF9TVEkpOwotCQljdHh0LT5lZmxhZ3MgfD0gWDg2X0VGTEFHU19JRjsKLQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KLQkJYnJlYWs7Ci0JY2FzZSAweGZjOiAvKiBjbGQgKi8KLQkJY3R4dC0+ZWZsYWdzICY9IH5FRkxHX0RGOwotCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIERpc2FibGUgd3JpdGViYWNrLiAqLwotCQlicmVhazsKLQljYXNlIDB4ZmQ6IC8qIHN0ZCAqLwotCQljdHh0LT5lZmxhZ3MgfD0gRUZMR19ERjsKLQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KLQkJYnJlYWs7Ci0JY2FzZSAweGZlIC4uLiAweGZmOgkvKiBHcnA0L0dycDUgKi8KLQkJcmMgPSBlbXVsYXRlX2dycDQ1KGN0eHQsIG9wcyk7Ci0JCWlmIChyYyAhPSAwKQotCQkJZ290byBkb25lOwotCQlicmVhazsKLQl9Ci0KLXdyaXRlYmFjazoKLQlyYyA9IHdyaXRlYmFjayhjdHh0LCBvcHMpOwotCWlmIChyYyAhPSAwKQotCQlnb3RvIGRvbmU7Ci0KLQkvKiBDb21taXQgc2hhZG93IHJlZ2lzdGVyIHN0YXRlLiAqLwotCW1lbWNweShjdHh0LT52Y3B1LT5hcmNoLnJlZ3MsIGMtPnJlZ3MsIHNpemVvZiBjLT5yZWdzKTsKLQlrdm1fcmlwX3dyaXRlKGN0eHQtPnZjcHUsIGMtPmVpcCk7Ci0KLWRvbmU6Ci0JaWYgKHJjID09IFg4NkVNVUxfVU5IQU5ETEVBQkxFKSB7Ci0JCWMtPmVpcCA9IHNhdmVkX2VpcDsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLQotdHdvYnl0ZV9pbnNuOgotCXN3aXRjaCAoYy0+YikgewotCWNhc2UgMHgwMTogLyogbGdkdCwgbGlkdCwgbG1zdyAqLwotCQlzd2l0Y2ggKGMtPm1vZHJtX3JlZykgewotCQkJdTE2IHNpemU7Ci0JCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7Ci0KLQkJY2FzZSAwOiAvKiB2bWNhbGwgKi8KLQkJCWlmIChjLT5tb2RybV9tb2QgIT0gMyB8fCBjLT5tb2RybV9ybSAhPSAxKQotCQkJCWdvdG8gY2Fubm90X2VtdWxhdGU7Ci0KLQkJCXJjID0ga3ZtX2ZpeF9oeXBlcmNhbGwoY3R4dC0+dmNwdSk7Ci0JCQlpZiAocmMpCi0JCQkJZ290byBkb25lOwotCi0JCQkvKiBMZXQgdGhlIHByb2Nlc3NvciByZS1leGVjdXRlIHRoZSBmaXhlZCBoeXBlcmNhbGwgKi8KLQkJCWMtPmVpcCA9IGt2bV9yaXBfcmVhZChjdHh0LT52Y3B1KTsKLQkJCS8qIERpc2FibGUgd3JpdGViYWNrLiAqLwotCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjogLyogbGdkdCAqLwotCQkJcmMgPSByZWFkX2Rlc2NyaXB0b3IoY3R4dCwgb3BzLCBjLT5zcmMucHRyLAotCQkJCQkgICAgICZzaXplLCAmYWRkcmVzcywgYy0+b3BfYnl0ZXMpOwotCQkJaWYgKHJjKQotCQkJCWdvdG8gZG9uZTsKLQkJCXJlYWxtb2RlX2xnZHQoY3R4dC0+dmNwdSwgc2l6ZSwgYWRkcmVzcyk7Ci0JCQkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KLQkJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKLQkJCWJyZWFrOwotCQljYXNlIDM6IC8qIGxpZHQvdm1tY2FsbCAqLwotCQkJaWYgKGMtPm1vZHJtX21vZCA9PSAzKSB7Ci0JCQkJc3dpdGNoIChjLT5tb2RybV9ybSkgewotCQkJCWNhc2UgMToKLQkJCQkJcmMgPSBrdm1fZml4X2h5cGVyY2FsbChjdHh0LT52Y3B1KTsKLQkJCQkJaWYgKHJjKQotCQkJCQkJZ290byBkb25lOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlnb3RvIGNhbm5vdF9lbXVsYXRlOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJcmMgPSByZWFkX2Rlc2NyaXB0b3IoY3R4dCwgb3BzLCBjLT5zcmMucHRyLAotCQkJCQkJICAgICAmc2l6ZSwgJmFkZHJlc3MsCi0JCQkJCQkgICAgIGMtPm9wX2J5dGVzKTsKLQkJCQlpZiAocmMpCi0JCQkJCWdvdG8gZG9uZTsKLQkJCQlyZWFsbW9kZV9saWR0KGN0eHQtPnZjcHUsIHNpemUsIGFkZHJlc3MpOwotCQkJfQotCQkJLyogRGlzYWJsZSB3cml0ZWJhY2suICovCi0JCQljLT5kc3QudHlwZSA9IE9QX05PTkU7Ci0JCQlicmVhazsKLQkJY2FzZSA0OiAvKiBzbXN3ICovCi0JCQljLT5kc3QuYnl0ZXMgPSAyOwotCQkJYy0+ZHN0LnZhbCA9IHJlYWxtb2RlX2dldF9jcihjdHh0LT52Y3B1LCAwKTsKLQkJCWJyZWFrOwotCQljYXNlIDY6IC8qIGxtc3cgKi8KLQkJCXJlYWxtb2RlX2xtc3coY3R4dC0+dmNwdSwgKHUxNiljLT5zcmMudmFsLAotCQkJCSAgICAgICZjdHh0LT5lZmxhZ3MpOwotCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwotCQkJYnJlYWs7Ci0JCWNhc2UgNzogLyogaW52bHBnKi8KLQkJCWVtdWxhdGVfaW52bHBnKGN0eHQtPnZjcHUsIG1lbW9wKTsKLQkJCS8qIERpc2FibGUgd3JpdGViYWNrLiAqLwotCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlnb3RvIGNhbm5vdF9lbXVsYXRlOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgMHgwNjoKLQkJZW11bGF0ZV9jbHRzKGN0eHQtPnZjcHUpOwotCQljLT5kc3QudHlwZSA9IE9QX05PTkU7Ci0JCWJyZWFrOwotCWNhc2UgMHgwODoJCS8qIGludmQgKi8KLQljYXNlIDB4MDk6CQkvKiB3YmludmQgKi8KLQljYXNlIDB4MGQ6CQkvKiBHcnBQIChwcmVmZXRjaCkgKi8KLQljYXNlIDB4MTg6CQkvKiBHcnAxNiAocHJlZmV0Y2gvbm9wKSAqLwotCQljLT5kc3QudHlwZSA9IE9QX05PTkU7Ci0JCWJyZWFrOwotCWNhc2UgMHgyMDogLyogbW92IGNyLCByZWcgKi8KLQkJaWYgKGMtPm1vZHJtX21vZCAhPSAzKQotCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKLQkJYy0+cmVnc1tjLT5tb2RybV9ybV0gPQotCQkJCXJlYWxtb2RlX2dldF9jcihjdHh0LT52Y3B1LCBjLT5tb2RybV9yZWcpOwotCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIG5vIHdyaXRlYmFjayAqLwotCQlicmVhazsKLQljYXNlIDB4MjE6IC8qIG1vdiBmcm9tIGRyIHRvIHJlZyAqLwotCQlpZiAoYy0+bW9kcm1fbW9kICE9IDMpCi0JCQlnb3RvIGNhbm5vdF9lbXVsYXRlOwotCQlyYyA9IGVtdWxhdG9yX2dldF9kcihjdHh0LCBjLT5tb2RybV9yZWcsICZjLT5yZWdzW2MtPm1vZHJtX3JtXSk7Ci0JCWlmIChyYykKLQkJCWdvdG8gY2Fubm90X2VtdWxhdGU7Ci0JCWMtPmRzdC50eXBlID0gT1BfTk9ORTsJLyogbm8gd3JpdGViYWNrICovCi0JCWJyZWFrOwotCWNhc2UgMHgyMjogLyogbW92IHJlZywgY3IgKi8KLQkJaWYgKGMtPm1vZHJtX21vZCAhPSAzKQotCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKLQkJcmVhbG1vZGVfc2V0X2NyKGN0eHQtPnZjcHUsCi0JCQkJYy0+bW9kcm1fcmVnLCBjLT5tb2RybV92YWwsICZjdHh0LT5lZmxhZ3MpOwotCQljLT5kc3QudHlwZSA9IE9QX05PTkU7Ci0JCWJyZWFrOwotCWNhc2UgMHgyMzogLyogbW92IGZyb20gcmVnIHRvIGRyICovCi0JCWlmIChjLT5tb2RybV9tb2QgIT0gMykKLQkJCWdvdG8gY2Fubm90X2VtdWxhdGU7Ci0JCXJjID0gZW11bGF0b3Jfc2V0X2RyKGN0eHQsIGMtPm1vZHJtX3JlZywKLQkJCQkgICAgIGMtPnJlZ3NbYy0+bW9kcm1fcm1dKTsKLQkJaWYgKHJjKQotCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKLQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBubyB3cml0ZWJhY2sgKi8KLQkJYnJlYWs7Ci0JY2FzZSAweDMwOgotCQkvKiB3cm1zciAqLwotCQltc3JfZGF0YSA9ICh1MzIpYy0+cmVnc1tWQ1BVX1JFR1NfUkFYXQotCQkJfCAoKHU2NCljLT5yZWdzW1ZDUFVfUkVHU19SRFhdIDw8IDMyKTsKLQkJcmMgPSBrdm1fc2V0X21zcihjdHh0LT52Y3B1LCBjLT5yZWdzW1ZDUFVfUkVHU19SQ1hdLCBtc3JfZGF0YSk7Ci0JCWlmIChyYykgewotCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKLQkJCWMtPmVpcCA9IGt2bV9yaXBfcmVhZChjdHh0LT52Y3B1KTsKLQkJfQotCQlyYyA9IFg4NkVNVUxfQ09OVElOVUU7Ci0JCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKLQkJYnJlYWs7Ci0JY2FzZSAweDMyOgotCQkvKiByZG1zciAqLwotCQlyYyA9IGt2bV9nZXRfbXNyKGN0eHQtPnZjcHUsIGMtPnJlZ3NbVkNQVV9SRUdTX1JDWF0sICZtc3JfZGF0YSk7Ci0JCWlmIChyYykgewotCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKLQkJCWMtPmVpcCA9IGt2bV9yaXBfcmVhZChjdHh0LT52Y3B1KTsKLQkJfSBlbHNlIHsKLQkJCWMtPnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSAodTMyKW1zcl9kYXRhOwotCQkJYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXSA9IG1zcl9kYXRhID4+IDMyOwotCQl9Ci0JCXJjID0gWDg2RU1VTF9DT05USU5VRTsKLQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwotCQlicmVhazsKLQljYXNlIDB4NDAgLi4uIDB4NGY6CS8qIGNtb3YgKi8KLQkJYy0+ZHN0LnZhbCA9IGMtPmRzdC5vcmlnX3ZhbCA9IGMtPnNyYy52YWw7Ci0JCWlmICghdGVzdF9jYyhjLT5iLCBjdHh0LT5lZmxhZ3MpKQotCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOyAvKiBubyB3cml0ZWJhY2sgKi8KLQkJYnJlYWs7Ci0JY2FzZSAweDgwIC4uLiAweDhmOiAvKiBqbnogcmVsLCBldGMqLwotCQlpZiAodGVzdF9jYyhjLT5iLCBjdHh0LT5lZmxhZ3MpKQotCQkJam1wX3JlbChjLCBjLT5zcmMudmFsKTsKLQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwotCQlicmVhazsKLQljYXNlIDB4YTM6Ci0JICAgICAgYnQ6CQkvKiBidCAqLwotCQljLT5kc3QudHlwZSA9IE9QX05PTkU7Ci0JCS8qIG9ubHkgc3Vid29yZCBvZmZzZXQgKi8KLQkJYy0+c3JjLnZhbCAmPSAoYy0+ZHN0LmJ5dGVzIDw8IDMpIC0gMTsKLQkJZW11bGF0ZV8yb3BfU3JjVl9ub2J5dGUoImJ0IiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7Ci0JCWJyZWFrOwotCWNhc2UgMHhhNDogLyogc2hsZCBpbW04LCByLCByL20gKi8KLQljYXNlIDB4YTU6IC8qIHNobGQgY2wsIHIsIHIvbSAqLwotCQllbXVsYXRlXzJvcF9jbCgic2hsZCIsIGMtPnNyYzIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDB4YWI6Ci0JICAgICAgYnRzOgkJLyogYnRzICovCi0JCS8qIG9ubHkgc3Vid29yZCBvZmZzZXQgKi8KLQkJYy0+c3JjLnZhbCAmPSAoYy0+ZHN0LmJ5dGVzIDw8IDMpIC0gMTsKLQkJZW11bGF0ZV8yb3BfU3JjVl9ub2J5dGUoImJ0cyIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIDB4YWM6IC8qIHNocmQgaW1tOCwgciwgci9tICovCi0JY2FzZSAweGFkOiAvKiBzaHJkIGNsLCByLCByL20gKi8KLQkJZW11bGF0ZV8yb3BfY2woInNocmQiLCBjLT5zcmMyLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKLQkJYnJlYWs7Ci0JY2FzZSAweGFlOiAgICAgICAgICAgICAgLyogY2xmbHVzaCAqLwotCQlicmVhazsKLQljYXNlIDB4YjAgLi4uIDB4YjE6CS8qIGNtcHhjaGcgKi8KLQkJLyoKLQkJICogU2F2ZSByZWFsIHNvdXJjZSB2YWx1ZSwgdGhlbiBjb21wYXJlIEVBWCBhZ2FpbnN0Ci0JCSAqIGRlc3RpbmF0aW9uLgotCQkgKi8KLQkJYy0+c3JjLm9yaWdfdmFsID0gYy0+c3JjLnZhbDsKLQkJYy0+c3JjLnZhbCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JBWF07Ci0JCWVtdWxhdGVfMm9wX1NyY1YoImNtcCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwotCQlpZiAoY3R4dC0+ZWZsYWdzICYgRUZMR19aRikgewotCQkJLyogU3VjY2Vzczogd3JpdGUgYmFjayB0byBtZW1vcnkuICovCi0JCQljLT5kc3QudmFsID0gYy0+c3JjLm9yaWdfdmFsOwotCQl9IGVsc2UgewotCQkJLyogRmFpbHVyZTogd3JpdGUgdGhlIHZhbHVlIHdlIHNhdyB0byBFQVguICovCi0JCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKLQkJCWMtPmRzdC5wdHIgPSAodW5zaWduZWQgbG9uZyAqKSZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgMHhiMzoKLQkgICAgICBidHI6CQkvKiBidHIgKi8KLQkJLyogb25seSBzdWJ3b3JkIG9mZnNldCAqLwotCQljLT5zcmMudmFsICY9IChjLT5kc3QuYnl0ZXMgPDwgMykgLSAxOwotCQllbXVsYXRlXzJvcF9TcmNWX25vYnl0ZSgiYnRyIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7Ci0JCWJyZWFrOwotCWNhc2UgMHhiNiAuLi4gMHhiNzoJLyogbW92enggKi8KLQkJYy0+ZHN0LmJ5dGVzID0gYy0+b3BfYnl0ZXM7Ci0JCWMtPmRzdC52YWwgPSAoYy0+ZCAmIEJ5dGVPcCkgPyAodTgpIGMtPnNyYy52YWwKLQkJCQkJCSAgICAgICA6ICh1MTYpIGMtPnNyYy52YWw7Ci0JCWJyZWFrOwotCWNhc2UgMHhiYToJCS8qIEdycDggKi8KLQkJc3dpdGNoIChjLT5tb2RybV9yZWcgJiAzKSB7Ci0JCWNhc2UgMDoKLQkJCWdvdG8gYnQ7Ci0JCWNhc2UgMToKLQkJCWdvdG8gYnRzOwotCQljYXNlIDI6Ci0JCQlnb3RvIGJ0cjsKLQkJY2FzZSAzOgotCQkJZ290byBidGM7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSAweGJiOgotCSAgICAgIGJ0YzoJCS8qIGJ0YyAqLwotCQkvKiBvbmx5IHN1YndvcmQgb2Zmc2V0ICovCi0JCWMtPnNyYy52YWwgJj0gKGMtPmRzdC5ieXRlcyA8PCAzKSAtIDE7Ci0JCWVtdWxhdGVfMm9wX1NyY1Zfbm9ieXRlKCJidGMiLCBjLT5zcmMsIGMtPmRzdCwgY3R4dC0+ZWZsYWdzKTsKLQkJYnJlYWs7Ci0JY2FzZSAweGJlIC4uLiAweGJmOgkvKiBtb3ZzeCAqLwotCQljLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKLQkJYy0+ZHN0LnZhbCA9IChjLT5kICYgQnl0ZU9wKSA/IChzOCkgYy0+c3JjLnZhbCA6Ci0JCQkJCQkJKHMxNikgYy0+c3JjLnZhbDsKLQkJYnJlYWs7Ci0JY2FzZSAweGMzOgkJLyogbW92bnRpICovCi0JCWMtPmRzdC5ieXRlcyA9IGMtPm9wX2J5dGVzOwotCQljLT5kc3QudmFsID0gKGMtPm9wX2J5dGVzID09IDQpID8gKHUzMikgYy0+c3JjLnZhbCA6Ci0JCQkJCQkJKHU2NCkgYy0+c3JjLnZhbDsKLQkJYnJlYWs7Ci0JY2FzZSAweGM3OgkJLyogR3JwOSAoY21weGNoZzhiKSAqLwotCQlyYyA9IGVtdWxhdGVfZ3JwOShjdHh0LCBvcHMsIG1lbW9wKTsKLQkJaWYgKHJjICE9IDApCi0JCQlnb3RvIGRvbmU7Ci0JCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKLQkJYnJlYWs7Ci0JfQotCWdvdG8gd3JpdGViYWNrOwotCi1jYW5ub3RfZW11bGF0ZToKLQlEUFJJTlRGKCJDYW5ub3QgZW11bGF0ZSAlMDJ4XG4iLCBjLT5iKTsKLQljLT5laXAgPSBzYXZlZF9laXA7Ci0JcmV0dXJuIC0xOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL01ha2VmaWxlIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCmluZGV4IDA3YzMxODkuLjllNjA5MjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKQEAgLTksNiArOSw4IEBACiBsaWIteSArPSB1c2VyY29weV8kKEJJVFMpLm8gZ2V0dXNlci5vIHB1dHVzZXIubwogbGliLXkgKz0gbWVtY3B5XyQoQklUUykubwogCitvYmoteSArPSBtc3ItcmVnLm8gbXNyLXJlZy1leHBvcnQubworCiBpZmVxICgkKENPTkZJR19YODZfMzIpLHkpCiAgICAgICAgIG9iai15ICs9IGF0b21pYzY0XzMyLm8KICAgICAgICAgbGliLXkgKz0gY2hlY2tzdW1fMzIubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21zci1yZWctZXhwb3J0LmMgYi9hcmNoL3g4Ni9saWIvbXNyLXJlZy1leHBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzExY2M1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbGliL21zci1yZWctZXhwb3J0LmMKQEAgLTAsMCArMSw1IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorCitFWFBPUlRfU1lNQk9MKG5hdGl2ZV9yZG1zcl9zYWZlX3JlZ3MpOworRVhQT1JUX1NZTUJPTChuYXRpdmVfd3Jtc3Jfc2FmZV9yZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tc3ItcmVnLlMgYi9hcmNoL3g4Ni9saWIvbXNyLXJlZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZmExMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9saWIvbXNyLXJlZy5TCkBAIC0wLDAgKzEsMTAyIEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2R3YXJmMi5oPgorI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisvKgorICogaW50IG5hdGl2ZV97cmRtc3Isd3Jtc3J9X3NhZmVfcmVncyh1MzIgZ3Byc1s4XSk7CisgKgorICogcmVnIGxheW91dDogdTMyIGdwcnNbZWF4LCBlY3gsIGVkeCwgZWJ4LCBlc3AsIGVicCwgZXNpLCBlZGldCisgKgorICovCisubWFjcm8gb3Bfc2FmZV9yZWdzIG9wCitFTlRSWShuYXRpdmVfXG9wXCgpX3NhZmVfcmVncykKKwlDRklfU1RBUlRQUk9DCisJcHVzaHFfY2ZpICVyYngKKwlwdXNocV9jZmkgJXJicAorCW1vdnEJJXJkaSwgJXIxMAkvKiBTYXZlIHBvaW50ZXIgKi8KKwl4b3JsCSVyMTFkLCAlcjExZAkvKiBSZXR1cm4gdmFsdWUgKi8KKwltb3ZsICAgICglcmRpKSwgJWVheAorCW1vdmwgICAgNCglcmRpKSwgJWVjeAorCW1vdmwgICAgOCglcmRpKSwgJWVkeAorCW1vdmwgICAgMTIoJXJkaSksICVlYngKKwltb3ZsICAgIDIwKCVyZGkpLCAlZWJwCisJbW92bCAgICAyNCglcmRpKSwgJWVzaQorCW1vdmwgICAgMjgoJXJkaSksICVlZGkKKwlDRklfUkVNRU1CRVJfU1RBVEUKKzE6CVxvcAorMjoJbW92bCAgICAlZWF4LCAoJXIxMCkKKwltb3ZsCSVyMTFkLCAlZWF4CS8qIFJldHVybiB2YWx1ZSAqLworCW1vdmwgICAgJWVjeCwgNCglcjEwKQorCW1vdmwgICAgJWVkeCwgOCglcjEwKQorCW1vdmwgICAgJWVieCwgMTIoJXIxMCkKKwltb3ZsICAgICVlYnAsIDIwKCVyMTApCisJbW92bCAgICAlZXNpLCAyNCglcjEwKQorCW1vdmwgICAgJWVkaSwgMjgoJXIxMCkKKwlwb3BxX2NmaSAlcmJwCisJcG9wcV9jZmkgJXJieAorCXJldAorMzoKKwlDRklfUkVTVE9SRV9TVEFURQorCW1vdmwgICAgJC1FSU8sICVyMTFkCisJam1wICAgICAyYgorCisJX0FTTV9FWFRBQkxFKDFiLCAzYikKKwlDRklfRU5EUFJPQworRU5EUFJPQyhuYXRpdmVfXG9wXCgpX3NhZmVfcmVncykKKy5lbmRtCisKKyNlbHNlIC8qIFg4Nl8zMiAqLworCisubWFjcm8gb3Bfc2FmZV9yZWdzIG9wCitFTlRSWShuYXRpdmVfXG9wXCgpX3NhZmVfcmVncykKKwlDRklfU1RBUlRQUk9DCisJcHVzaGxfY2ZpICVlYngKKwlwdXNobF9jZmkgJWVicAorCXB1c2hsX2NmaSAlZXNpCisJcHVzaGxfY2ZpICVlZGkKKwlwdXNobF9jZmkgJDAgICAgICAgICAgICAgIC8qIFJldHVybiB2YWx1ZSAqLworCXB1c2hsX2NmaSAlZWF4CisJbW92bCAgICA0KCVlYXgpLCAlZWN4CisJbW92bCAgICA4KCVlYXgpLCAlZWR4CisJbW92bCAgICAxMiglZWF4KSwgJWVieAorCW1vdmwgICAgMjAoJWVheCksICVlYnAKKwltb3ZsICAgIDI0KCVlYXgpLCAlZXNpCisJbW92bCAgICAyOCglZWF4KSwgJWVkaQorCW1vdmwgICAgKCVlYXgpLCAlZWF4CisJQ0ZJX1JFTUVNQkVSX1NUQVRFCisxOglcb3AKKzI6CXB1c2hsX2NmaSAlZWF4CisJbW92bCAgICA0KCVlc3ApLCAlZWF4CisJcG9wbF9jZmkgKCVlYXgpCisJYWRkbCAgICAkNCwgJWVzcAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAorCW1vdmwgICAgJWVjeCwgNCglZWF4KQorCW1vdmwgICAgJWVkeCwgOCglZWF4KQorCW1vdmwgICAgJWVieCwgMTIoJWVheCkKKwltb3ZsICAgICVlYnAsIDIwKCVlYXgpCisJbW92bCAgICAlZXNpLCAyNCglZWF4KQorCW1vdmwgICAgJWVkaSwgMjgoJWVheCkKKwlwb3BsX2NmaSAlZWF4CisJcG9wbF9jZmkgJWVkaQorCXBvcGxfY2ZpICVlc2kKKwlwb3BsX2NmaSAlZWJwCisJcG9wbF9jZmkgJWVieAorCXJldAorMzoKKwlDRklfUkVTVE9SRV9TVEFURQorCW1vdmwgICAgJC1FSU8sIDQoJWVzcCkKKwlqbXAgICAgIDJiCisKKwlfQVNNX0VYVEFCTEUoMWIsIDNiKQorCUNGSV9FTkRQUk9DCitFTkRQUk9DKG5hdGl2ZV9cb3BcKClfc2FmZV9yZWdzKQorLmVuZG0KKworI2VuZGlmCisKK29wX3NhZmVfcmVncyByZG1zcgorb3Bfc2FmZV9yZWdzIHdybXNyCisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tc3IuYyBiL2FyY2gveDg2L2xpYi9tc3IuYwppbmRleCBjYWEyNGFjLi4zM2ExZTNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvbXNyLmMKKysrIGIvYXJjaC94ODYvbGliL21zci5jCkBAIC0xNzUsMyArMTc1LDUyIEBACiAJcmV0dXJuIGVyciA/IGVyciA6IHJ2LmVycjsKIH0KIEVYUE9SVF9TWU1CT0wod3Jtc3Jfc2FmZV9vbl9jcHUpOworCisvKgorICogVGhlc2UgdmFyaWFudHMgYXJlIHNpZ25pZmljYW50bHkgc2xvd2VyLCBidXQgYWxsb3dzIGNvbnRyb2wgb3ZlcgorICogdGhlIGVudGlyZSAzMi1iaXQgR1BSIHNldC4KKyAqLworc3RydWN0IG1zcl9yZWdzX2luZm8geworCXUzMiAqcmVnczsKKwlpbnQgZXJyOworfTsKKworc3RhdGljIHZvaWQgX19yZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KHZvaWQgKmluZm8pCit7CisJc3RydWN0IG1zcl9yZWdzX2luZm8gKnJ2ID0gaW5mbzsKKworCXJ2LT5lcnIgPSByZG1zcl9zYWZlX3JlZ3MocnYtPnJlZ3MpOworfQorCitzdGF0aWMgdm9pZCBfX3dybXNyX3NhZmVfcmVnc19vbl9jcHUodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyAqcnYgPSBpbmZvOworCisJcnYtPmVyciA9IHdybXNyX3NhZmVfcmVncyhydi0+cmVncyk7Cit9CisKK2ludCByZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiAqcmVncykKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBtc3JfcmVnc19pbmZvIHJ2OworCisJcnYucmVncyAgID0gcmVnczsKKwlydi5lcnIgICAgPSAtRUlPOworCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcmRtc3Jfc2FmZV9yZWdzX29uX2NwdSwgJnJ2LCAxKTsKKworCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Cit9CitFWFBPUlRfU1lNQk9MKHJkbXNyX3NhZmVfcmVnc19vbl9jcHUpOworCitpbnQgd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgKnJlZ3MpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyBydjsKKworCXJ2LnJlZ3MgPSByZWdzOworCXJ2LmVyciAgPSAtRUlPOworCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSwgJnJ2LCAxKTsKKworCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Cit9CitFWFBPUlRfU1lNQk9MKHdybXNyX3NhZmVfcmVnc19vbl9jcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQppbmRleCBlZWZkZWVlLi45YjVhOWY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQpAQCAtMSw1ICsxLDkgQEAKIG9iai15CTo9ICBpbml0Lm8gaW5pdF8kKEJJVFMpLm8gZmF1bHQubyBpb3JlbWFwLm8gZXh0YWJsZS5vIHBhZ2VhdHRyLm8gbW1hcC5vIFwKLQkgICAgcGF0Lm8gcGd0YWJsZS5vIGd1cC5vCisJICAgIHBhdC5vIHBndGFibGUubyBwaHlzYWRkci5vIGd1cC5vCisKKyMgTWFrZSBzdXJlIF9fcGh5c19hZGRyIGhhcyBubyBzdGFja3Byb3RlY3Rvcgorbm9zdGFja3AgOj0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IpCitDRkxBR1NfcGh5c2FkZHIubwkJOj0gJChub3N0YWNrcCkKIAogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHRsYi5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ZhdWx0LmMgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCmluZGV4IGJmYWUxMzkuLjc3NWEwMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmMKKysrIGIvYXJjaC94ODYvbW0vZmF1bHQuYwpAQCAtMjg1LDI2ICsyODUsMjUgQEAKIAkJdHNrLT50aHJlYWQuc2NyZWVuX2JpdG1hcCB8PSAxIDw8IGJpdDsKIH0KIAorc3RhdGljIGJvb2wgbG93X3Bmbih1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlyZXR1cm4gcGZuIDwgbWF4X2xvd19wZm47Cit9CisKIHN0YXRpYyB2b2lkIGR1bXBfcGFnZXRhYmxlKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlfX3R5cGVvZl9fKHB0ZV92YWwoX19wdGUoMCkpKSBwYWdlOwotCi0JcGFnZSA9IHJlYWRfY3IzKCk7Ci0JcGFnZSA9ICgoX190eXBlb2ZfXyhwYWdlKSAqKSBfX3ZhKHBhZ2UpKVthZGRyZXNzID4+IFBHRElSX1NISUZUXTsKKwlwZ2RfdCAqYmFzZSA9IF9fdmEocmVhZF9jcjMoKSk7CisJcGdkX3QgKnBnZCA9ICZiYXNlW3BnZF9pbmRleChhZGRyZXNzKV07CisJcG1kX3QgKnBtZDsKKwlwdGVfdCAqcHRlOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKLQlwcmludGsoIipwZHB0ID0gJTAxNkx4ICIsIHBhZ2UpOwotCWlmICgocGFnZSA+PiBQQUdFX1NISUZUKSA8IG1heF9sb3dfcGZuCi0JICAgICYmIHBhZ2UgJiBfUEFHRV9QUkVTRU5UKSB7Ci0JCXBhZ2UgJj0gUEFHRV9NQVNLOwotCQlwYWdlID0gKChfX3R5cGVvZl9fKHBhZ2UpICopIF9fdmEocGFnZSkpWyhhZGRyZXNzID4+IFBNRF9TSElGVCkKLQkJCQkJCQkmIChQVFJTX1BFUl9QTUQgLSAxKV07Ci0JCXByaW50ayhLRVJOX0NPTlQgIipwZGUgPSAlMDE2THggIiwgcGFnZSk7Ci0JCXBhZ2UgJj0gfl9QQUdFX05YOwotCX0KLSNlbHNlCi0JcHJpbnRrKCIqcGRlID0gJTA4bHggIiwgcGFnZSk7CisJcHJpbnRrKCIqcGRwdCA9ICUwMTZMeCAiLCBwZ2RfdmFsKCpwZ2QpKTsKKwlpZiAoIWxvd19wZm4ocGdkX3ZhbCgqcGdkKSA+PiBQQUdFX1NISUZUKSB8fCAhcGdkX3ByZXNlbnQoKnBnZCkpCisJCWdvdG8gb3V0OwogI2VuZGlmCisJcG1kID0gcG1kX29mZnNldChwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyksIGFkZHJlc3MpOworCXByaW50ayhLRVJOX0NPTlQgIipwZGUgPSAlMCpMeCAiLCBzaXplb2YoKnBtZCkgKiAyLCAodTY0KXBtZF92YWwoKnBtZCkpOwogCiAJLyoKIAkgKiBXZSBtdXN0IG5vdCBkaXJlY3RseSBhY2Nlc3MgdGhlIHB0ZSBpbiB0aGUgaGlnaHB0ZQpAQCAtMzEyLDE2ICszMTEsMTIgQEAKIAkgKiBBbmQgbGV0J3MgcmF0aGVyIG5vdCBrbWFwLWF0b21pYyB0aGUgcHRlLCBqdXN0IGluIGNhc2UKIAkgKiBpdCdzIGFsbG9jYXRlZCBhbHJlYWR5OgogCSAqLwotCWlmICgocGFnZSA+PiBQQUdFX1NISUZUKSA8IG1heF9sb3dfcGZuCi0JICAgICYmIChwYWdlICYgX1BBR0VfUFJFU0VOVCkKLQkgICAgJiYgIShwYWdlICYgX1BBR0VfUFNFKSkgeworCWlmICghbG93X3BmbihwbWRfcGZuKCpwbWQpKSB8fCAhcG1kX3ByZXNlbnQoKnBtZCkgfHwgcG1kX2xhcmdlKCpwbWQpKQorCQlnb3RvIG91dDsKIAotCQlwYWdlICY9IFBBR0VfTUFTSzsKLQkJcGFnZSA9ICgoX190eXBlb2ZfXyhwYWdlKSAqKSBfX3ZhKHBhZ2UpKVsoYWRkcmVzcyA+PiBQQUdFX1NISUZUKQotCQkJCQkJCSYgKFBUUlNfUEVSX1BURSAtIDEpXTsKLQkJcHJpbnRrKCIqcHRlID0gJTAqTHggIiwgc2l6ZW9mKHBhZ2UpKjIsICh1NjQpcGFnZSk7Ci0JfQotCisJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTsKKwlwcmludGsoIipwdGUgPSAlMCpMeCAiLCBzaXplb2YoKnB0ZSkgKiAyLCAodTY0KXB0ZV92YWwoKnB0ZSkpOworb3V0OgogCXByaW50aygiXG4iKTsKIH0KIApAQCAtNDUwLDE2ICs0NDUsMTIgQEAKIAogc3RhdGljIHZvaWQgZHVtcF9wYWdldGFibGUodW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXBnZF90ICpwZ2Q7CisJcGdkX3QgKmJhc2UgPSBfX3ZhKHJlYWRfY3IzKCkgJiBQSFlTSUNBTF9QQUdFX01BU0spOworCXBnZF90ICpwZ2QgPSBiYXNlICsgcGdkX2luZGV4KGFkZHJlc3MpOwogCXB1ZF90ICpwdWQ7CiAJcG1kX3QgKnBtZDsKIAlwdGVfdCAqcHRlOwogCi0JcGdkID0gKHBnZF90ICopcmVhZF9jcjMoKTsKLQotCXBnZCA9IF9fdmEoKHVuc2lnbmVkIGxvbmcpcGdkICYgUEhZU0lDQUxfUEFHRV9NQVNLKTsKLQotCXBnZCArPSBwZ2RfaW5kZXgoYWRkcmVzcyk7CiAJaWYgKGJhZF9hZGRyZXNzKHBnZCkpCiAJCWdvdG8gYmFkOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMgYi9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKaW5kZXggMjExMmVkNS4uNjNhNmJhNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCisrKyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwpAQCAtMjQsNyArMjQsNyBAQAogICogbm8gZ2xvYmFsIGxvY2sgaXMgbmVlZGVkIGFuZCBiZWNhdXNlIHRoZSBrbWFwIGNvZGUgbXVzdCBwZXJmb3JtIGEgZ2xvYmFsIFRMQgogICogaW52YWxpZGF0aW9uIHdoZW4gdGhlIGttYXAgcG9vbCB3cmFwcy4KICAqCi0gKiBIb3dldmVyIHdoZW4gaG9sZGluZyBhbiBhdG9taWMga21hcCBpcyBpcyBub3QgbGVnYWwgdG8gc2xlZXAsIHNvIGF0b21pYworICogSG93ZXZlciB3aGVuIGhvbGRpbmcgYW4gYXRvbWljIGttYXAgaXQgaXMgbm90IGxlZ2FsIHRvIHNsZWVwLCBzbyBhdG9taWMKICAqIGttYXBzIGFyZSBhcHByb3ByaWF0ZSBmb3Igc2hvcnQsIHRpZ2h0IGNvZGUgcGF0aHMgb25seS4KICAqLwogdm9pZCAqa21hcF9hdG9taWNfcHJvdChzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpCkBAIC0xMDQsNiArMTA0LDcgQEAKIEVYUE9SVF9TWU1CT0woa21hcF9hdG9taWMpOwogRVhQT1JUX1NZTUJPTChrdW5tYXBfYXRvbWljKTsKIEVYUE9SVF9TWU1CT0woa21hcF9hdG9taWNfcHJvdCk7CitFWFBPUlRfU1lNQk9MKGttYXBfYXRvbWljX3RvX3BhZ2UpOwogCiB2b2lkIF9faW5pdCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb21hcF8zMi5jIGIvYXJjaC94ODYvbW0vaW9tYXBfMzIuYwppbmRleCBmZTZmODRjLi44NGUyMzZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb21hcF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2lvbWFwXzMyLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAKLWludCBpc19pb19tYXBwaW5nX3Bvc3NpYmxlKHJlc291cmNlX3NpemVfdCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgaW50IGlzX2lvX21hcHBpbmdfcG9zc2libGUocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKICNpZiAhZGVmaW5lZChDT05GSUdfWDg2X1BBRSkgJiYgZGVmaW5lZChDT05GSUdfUEhZU19BRERSX1RfNjRCSVQpCiAJLyogVGhlcmUgaXMgbm8gd2F5IHRvIG1hcCBncmVhdGVyIHRoYW4gMSA8PCAzMiBhZGRyZXNzIHdpdGhvdXQgUEFFICovCkBAIC0zMCw3ICszMCwzMCBAQAogI2VuZGlmCiAJcmV0dXJuIDE7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpc19pb19tYXBwaW5nX3Bvc3NpYmxlKTsKKworaW50IGlvbWFwX2NyZWF0ZV93YyhyZXNvdXJjZV9zaXplX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCAqcHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWcgPSBfUEFHRV9DQUNIRV9XQzsKKwlpbnQgcmV0OworCisJaWYgKCFpc19pb19tYXBwaW5nX3Bvc3NpYmxlKGJhc2UsIHNpemUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGlvX3Jlc2VydmVfbWVtdHlwZShiYXNlLCBiYXNlICsgc2l6ZSwgJmZsYWcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkqcHJvdCA9IF9fcGdwcm90KF9fUEFHRV9LRVJORUwgfCBmbGFnKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2NyZWF0ZV93Yyk7CisKK3ZvaWQKK2lvbWFwX2ZyZWUocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpb19mcmVlX21lbXR5cGUoYmFzZSwgYmFzZSArIHNpemUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZnJlZSk7CiAKIHZvaWQgKmttYXBfYXRvbWljX3Byb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSwgcGdwcm90X3QgcHJvdCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvcmVtYXAuYyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwppbmRleCA4YTQ1MDkzLi4zMzRlNjNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC0yMiw3NyArMjIsNyBAQAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3BhdC5oPgogCi1zdGF0aWMgaW5saW5lIGludCBwaHlzX2FkZHJfdmFsaWQocmVzb3VyY2Vfc2l6ZV90IGFkZHIpCi17Ci0jaWZkZWYgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUCi0JcmV0dXJuICEoYWRkciA+PiBib290X2NwdV9kYXRhLng4Nl9waHlzX2JpdHMpOwotI2Vsc2UKLQlyZXR1cm4gMTsKLSNlbmRpZgotfQotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCi11bnNpZ25lZCBsb25nIF9fcGh5c19hZGRyKHVuc2lnbmVkIGxvbmcgeCkKLXsKLQlpZiAoeCA+PSBfX1NUQVJUX0tFUk5FTF9tYXApIHsKLQkJeCAtPSBfX1NUQVJUX0tFUk5FTF9tYXA7Ci0JCVZJUlRVQUxfQlVHX09OKHggPj0gS0VSTkVMX0lNQUdFX1NJWkUpOwotCQl4ICs9IHBoeXNfYmFzZTsKLQl9IGVsc2UgewotCQlWSVJUVUFMX0JVR19PTih4IDwgUEFHRV9PRkZTRVQpOwotCQl4IC09IFBBR0VfT0ZGU0VUOwotCQlWSVJUVUFMX0JVR19PTighcGh5c19hZGRyX3ZhbGlkKHgpKTsKLQl9Ci0JcmV0dXJuIHg7Ci19Ci1FWFBPUlRfU1lNQk9MKF9fcGh5c19hZGRyKTsKLQotYm9vbCBfX3ZpcnRfYWRkcl92YWxpZCh1bnNpZ25lZCBsb25nIHgpCi17Ci0JaWYgKHggPj0gX19TVEFSVF9LRVJORUxfbWFwKSB7Ci0JCXggLT0gX19TVEFSVF9LRVJORUxfbWFwOwotCQlpZiAoeCA+PSBLRVJORUxfSU1BR0VfU0laRSkKLQkJCXJldHVybiBmYWxzZTsKLQkJeCArPSBwaHlzX2Jhc2U7Ci0JfSBlbHNlIHsKLQkJaWYgKHggPCBQQUdFX09GRlNFVCkKLQkJCXJldHVybiBmYWxzZTsKLQkJeCAtPSBQQUdFX09GRlNFVDsKLQkJaWYgKCFwaHlzX2FkZHJfdmFsaWQoeCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIHBmbl92YWxpZCh4ID4+IFBBR0VfU0hJRlQpOwotfQotRVhQT1JUX1NZTUJPTChfX3ZpcnRfYWRkcl92YWxpZCk7Ci0KLSNlbHNlCi0KLSNpZmRlZiBDT05GSUdfREVCVUdfVklSVFVBTAotdW5zaWduZWQgbG9uZyBfX3BoeXNfYWRkcih1bnNpZ25lZCBsb25nIHgpCi17Ci0JLyogVk1BTExPQ18qIGFyZW4ndCBjb25zdGFudHMgICovCi0JVklSVFVBTF9CVUdfT04oeCA8IFBBR0VfT0ZGU0VUKTsKLQlWSVJUVUFMX0JVR19PTihfX3ZtYWxsb2Nfc3RhcnRfc2V0ICYmIGlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKSB4KSk7Ci0JcmV0dXJuIHggLSBQQUdFX09GRlNFVDsKLX0KLUVYUE9SVF9TWU1CT0woX19waHlzX2FkZHIpOwotI2VuZGlmCi0KLWJvb2wgX192aXJ0X2FkZHJfdmFsaWQodW5zaWduZWQgbG9uZyB4KQotewotCWlmICh4IDwgUEFHRV9PRkZTRVQpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoX192bWFsbG9jX3N0YXJ0X3NldCAmJiBpc192bWFsbG9jX2FkZHIoKHZvaWQgKikgeCkpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoeCA+PSBGSVhBRERSX1NUQVJUKQotCQlyZXR1cm4gZmFsc2U7Ci0JcmV0dXJuIHBmbl92YWxpZCgoeCAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKTsKLX0KLUVYUE9SVF9TWU1CT0woX192aXJ0X2FkZHJfdmFsaWQpOwotCi0jZW5kaWYKKyNpbmNsdWRlICJwaHlzYWRkci5oIgogCiBpbnQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpCiB7CkBAIC0yMjgsMjQgKzE1OCwxNCBAQAogCXJldHZhbCA9IHJlc2VydmVfbWVtdHlwZShwaHlzX2FkZHIsICh1NjQpcGh5c19hZGRyICsgc2l6ZSwKIAkJCQkJCXByb3RfdmFsLCAmbmV3X3Byb3RfdmFsKTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByX2RlYnVnKCJXYXJuaW5nOiByZXNlcnZlX21lbXR5cGUgcmV0dXJuZWQgJWRcbiIsIHJldHZhbCk7CisJCXByaW50ayhLRVJOX0VSUiAiaW9yZW1hcCByZXNlcnZlX21lbXR5cGUgZmFpbGVkICVkXG4iLCByZXR2YWwpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlpZiAocHJvdF92YWwgIT0gbmV3X3Byb3RfdmFsKSB7Ci0JCS8qCi0JCSAqIERvIG5vdCBmYWxsYmFjayB0byBjZXJ0YWluIG1lbW9yeSB0eXBlcyB3aXRoIGNlcnRhaW4KLQkJICogcmVxdWVzdGVkIHR5cGU6Ci0JCSAqIC0gcmVxdWVzdCBpcyB1Yy0sIHJldHVybiBjYW5ub3QgYmUgd3JpdGUtYmFjawotCQkgKiAtIHJlcXVlc3QgaXMgdWMtLCByZXR1cm4gY2Fubm90IGJlIHdyaXRlLWNvbWJpbmUKLQkJICogLSByZXF1ZXN0IGlzIHdyaXRlLWNvbWJpbmUsIHJldHVybiBjYW5ub3QgYmUgd3JpdGUtYmFjawotCQkgKi8KLQkJaWYgKChwcm90X3ZhbCA9PSBfUEFHRV9DQUNIRV9VQ19NSU5VUyAmJgotCQkgICAgIChuZXdfcHJvdF92YWwgPT0gX1BBR0VfQ0FDSEVfV0IgfHwKLQkJICAgICAgbmV3X3Byb3RfdmFsID09IF9QQUdFX0NBQ0hFX1dDKSkgfHwKLQkJICAgIChwcm90X3ZhbCA9PSBfUEFHRV9DQUNIRV9XQyAmJgotCQkgICAgIG5ld19wcm90X3ZhbCA9PSBfUEFHRV9DQUNIRV9XQikpIHsKLQkJCXByX2RlYnVnKAorCQlpZiAoIWlzX25ld19tZW10eXBlX2FsbG93ZWQocGh5c19hZGRyLCBzaXplLAorCQkJCQkgICAgcHJvdF92YWwsIG5ld19wcm90X3ZhbCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgogCQkiaW9yZW1hcCBlcnJvciBmb3IgMHglbGx4LTB4JWxseCwgcmVxdWVzdGVkIDB4JWx4LCBnb3QgMHglbHhcbiIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwaHlzX2FkZHIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykocGh5c19hZGRyICsgc2l6ZSksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2sva21lbWNoZWNrLmMgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2sva21lbWNoZWNrLmMKaW5kZXggMmM1NWVkMC4uNTI4YmY5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0va21lbWNoZWNrL2ttZW1jaGVjay5jCisrKyBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9rbWVtY2hlY2suYwpAQCAtMzMxLDYgKzMzMSwyMCBAQAogCWttZW1jaGVja19zaGFkb3dfc2V0KHNoYWRvdywgc2l6ZSk7CiB9CiAKK2Jvb2wga21lbWNoZWNrX2lzX29ial9pbml0aWFsaXplZCh1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBzaXplKQoreworCWVudW0ga21lbWNoZWNrX3NoYWRvdyBzdGF0dXM7CisJdm9pZCAqc2hhZG93OworCisJc2hhZG93ID0ga21lbWNoZWNrX3NoYWRvd19sb29rdXAoYWRkcik7CisJaWYgKCFzaGFkb3cpCisJCXJldHVybiB0cnVlOworCisJc3RhdHVzID0ga21lbWNoZWNrX3NoYWRvd190ZXN0KHNoYWRvdywgc2l6ZSk7CisKKwlyZXR1cm4gc3RhdHVzID09IEtNRU1DSEVDS19TSEFET1dfSU5JVElBTElaRUQ7Cit9CisKIC8qIEFjY2VzcyBtYXkgY3Jvc3MgcGFnZSBib3VuZGFyeSAqLwogc3RhdGljIHZvaWQga21lbWNoZWNrX3JlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IDdlNjAwYzEuLjI0OTUyZmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogCiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC02ODYsNyArNjg3LDcgQEAKIHsKIAlzdHJ1Y3QgY3BhX2RhdGEgYWxpYXNfY3BhOwogCXVuc2lnbmVkIGxvbmcgbGFkZHIgPSAodW5zaWduZWQgbG9uZylfX3ZhKGNwYS0+cGZuIDw8IFBBR0VfU0hJRlQpOwotCXVuc2lnbmVkIGxvbmcgdmFkZHIsIHJlbWFwcGVkOworCXVuc2lnbmVkIGxvbmcgdmFkZHI7CiAJaW50IHJldDsKIAogCWlmIChjcGEtPnBmbiA+PSBtYXhfcGZuX21hcHBlZCkKQEAgLTc0NCwyNCArNzQ1LDYgQEAKIAl9CiAjZW5kaWYKIAotCS8qCi0JICogSWYgdGhlIFBNRCBwYWdlIHdhcyBwYXJ0aWFsbHkgdXNlZCBmb3IgcGVyLWNwdSByZW1hcHBpbmcsCi0JICogdGhlIHJlY3ljbGVkIGFyZWEgbmVlZHMgdG8gYmUgc3BsaXQgYW5kIG1vZGlmaWVkLiAgQmVjYXVzZQotCSAqIHRoZSBhcmVhIGlzIGFsd2F5cyBwcm9wZXIgc3Vic2V0IG9mIGEgUE1EIHBhZ2UKLQkgKiBjcGEtPm51bXBhZ2VzIGlzIGd1YXJhbnRlZWQgdG8gYmUgMSBmb3IgdGhlc2UgYXJlYXMsIHNvCi0JICogdGhlcmUncyBubyBuZWVkIHRvIGxvb3Agb3ZlciBhbmQgY2hlY2sgZm9yIGZ1cnRoZXIgcmVtYXBzLgotCSAqLwotCXJlbWFwcGVkID0gKHVuc2lnbmVkIGxvbmcpcGNwdV9scGFnZV9yZW1hcHBlZCgodm9pZCAqKWxhZGRyKTsKLQlpZiAocmVtYXBwZWQpIHsKLQkJV0FSTl9PTihjcGEtPm51bXBhZ2VzID4gMSk7Ci0JCWFsaWFzX2NwYSA9ICpjcGE7Ci0JCWFsaWFzX2NwYS52YWRkciA9ICZyZW1hcHBlZDsKLQkJYWxpYXNfY3BhLmZsYWdzICY9IH4oQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKTsKLQkJcmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoJmFsaWFzX2NwYSwgMCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQogCXJldHVybiAwOwogfQogCkBAIC04MjIsNiArODA1LDcgQEAKIHsKIAlzdHJ1Y3QgY3BhX2RhdGEgY3BhOwogCWludCByZXQsIGNhY2hlLCBjaGVja2FsaWFzOworCXVuc2lnbmVkIGxvbmcgYmFkZHIgPSAwOwogCiAJLyoKIAkgKiBDaGVjaywgaWYgd2UgYXJlIHJlcXVlc3RlZCB0byBjaGFuZ2UgYSBub3Qgc3VwcG9ydGVkCkBAIC04NTMsNiArODM3LDExIEBACiAJCQkgKi8KIAkJCVdBUk5fT05fT05DRSgxKTsKIAkJfQorCQkvKgorCQkgKiBTYXZlIGFkZHJlc3MgZm9yIGNhY2hlIGZsdXNoLiAqYWRkciBpcyBtb2RpZmllZCBpbiB0aGUgY2FsbAorCQkgKiB0byBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigpIGJlbG93LgorCQkgKi8KKwkJYmFkZHIgPSAqYWRkcjsKIAl9CiAKIAkvKiBNdXN0IGF2b2lkIGFsaWFzaW5nIG1hcHBpbmdzIGluIHRoZSBoaWdobWVtIGNvZGUgKi8KQEAgLTkwMCw3ICs4ODksNyBAQAogCQkJY3BhX2ZsdXNoX2FycmF5KGFkZHIsIG51bXBhZ2VzLCBjYWNoZSwKIAkJCQkJY3BhLmZsYWdzLCBwYWdlcyk7CiAJCX0gZWxzZQotCQkJY3BhX2ZsdXNoX3JhbmdlKCphZGRyLCBudW1wYWdlcywgY2FjaGUpOworCQkJY3BhX2ZsdXNoX3JhbmdlKGJhZGRyLCBudW1wYWdlcywgY2FjaGUpOwogCX0gZWxzZQogCQljcGFfZmx1c2hfYWxsKGNhY2hlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0LmMgYi9hcmNoL3g4Ni9tbS9wYXQuYwppbmRleCAzNTJhYTllLi5kN2ViYzNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQuYworKysgYi9hcmNoL3g4Ni9tbS9wYXQuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtMTQ4LDExICsxNDksMTAgQEAKICAqIGFyZWFzKS4gQWxsIHRoZSBhbGlhc2VzIGhhdmUgdGhlIHNhbWUgY2FjaGUgYXR0cmlidXRlcyBvZiBjb3Vyc2UuCiAgKiBaZXJvIGF0dHJpYnV0ZXMgYXJlIHJlcHJlc2VudGVkIGFzIGhvbGVzLgogICoKLSAqIEN1cnJlbnRseSB0aGUgZGF0YSBzdHJ1Y3R1cmUgaXMgYSBsaXN0IGJlY2F1c2UgdGhlIG51bWJlciBvZiBtYXBwaW5ncwotICogYXJlIGV4cGVjdGVkIHRvIGJlIHJlbGF0aXZlbHkgc21hbGwuIElmIHRoaXMgc2hvdWxkIGJlIGEgcHJvYmxlbQotICogaXQgY291bGQgYmUgY2hhbmdlZCB0byBhIHJidHJlZSBvciBzaW1pbGFyLgorICogVGhlIGRhdGEgc3RydWN0dXJlIGlzIGEgbGlzdCB0aGF0IGlzIGFsc28gb3JnYW5pemVkIGFzIGFuIHJidHJlZQorICogc29ydGVkIG9uIHRoZSBzdGFydCBhZGRyZXNzIG9mIG1lbXR5cGUgcmFuZ2UuCiAgKgotICogbWVtdHlwZV9sb2NrIHByb3RlY3RzIHRoZSB3aG9sZSBsaXN0LgorICogbWVtdHlwZV9sb2NrIHByb3RlY3RzIGJvdGggdGhlIGxpbmVhciBsaXN0IGFuZCByYnRyZWUuCiAgKi8KIAogc3RydWN0IG1lbXR5cGUgewpAQCAtMTYwLDExICsxNjAsNTMgQEAKIAl1NjQJCQllbmQ7CiAJdW5zaWduZWQgbG9uZwkJdHlwZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5kOworCXN0cnVjdCByYl9ub2RlCQlyYjsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCBtZW10eXBlX3Jicm9vdCA9IFJCX1JPT1Q7CiBzdGF0aWMgTElTVF9IRUFEKG1lbXR5cGVfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1lbXR5cGVfbG9jayk7CS8qIHByb3RlY3RzIG1lbXR5cGUgbGlzdCAqLwogCitzdGF0aWMgc3RydWN0IG1lbXR5cGUgKm1lbXR5cGVfcmJfc2VhcmNoKHN0cnVjdCByYl9yb290ICpyb290LCB1NjQgc3RhcnQpCit7CisJc3RydWN0IHJiX25vZGUgKm5vZGUgPSByb290LT5yYl9ub2RlOworCXN0cnVjdCBtZW10eXBlICpsYXN0X2xvd2VyID0gTlVMTDsKKworCXdoaWxlIChub2RlKSB7CisJCXN0cnVjdCBtZW10eXBlICpkYXRhID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBtZW10eXBlLCByYik7CisKKwkJaWYgKGRhdGEtPnN0YXJ0IDwgc3RhcnQpIHsKKwkJCWxhc3RfbG93ZXIgPSBkYXRhOworCQkJbm9kZSA9IG5vZGUtPnJiX3JpZ2h0OworCQl9IGVsc2UgaWYgKGRhdGEtPnN0YXJ0ID4gc3RhcnQpIHsKKwkJCW5vZGUgPSBub2RlLT5yYl9sZWZ0OworCQl9IGVsc2UKKwkJCXJldHVybiBkYXRhOworCX0KKworCS8qIFdpbGwgcmV0dXJuIE5VTEwgaWYgdGhlcmUgaXMgbm8gZW50cnkgd2l0aCBpdHMgc3RhcnQgPD0gc3RhcnQgKi8KKwlyZXR1cm4gbGFzdF9sb3dlcjsKK30KKworc3RhdGljIHZvaWQgbWVtdHlwZV9yYl9pbnNlcnQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHN0cnVjdCBtZW10eXBlICpkYXRhKQoreworCXN0cnVjdCByYl9ub2RlICoqbmV3ID0gJihyb290LT5yYl9ub2RlKTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKworCXdoaWxlICgqbmV3KSB7CisJCXN0cnVjdCBtZW10eXBlICp0aGlzID0gY29udGFpbmVyX29mKCpuZXcsIHN0cnVjdCBtZW10eXBlLCByYik7CisKKwkJcGFyZW50ID0gKm5ldzsKKwkJaWYgKGRhdGEtPnN0YXJ0IDw9IHRoaXMtPnN0YXJ0KQorCQkJbmV3ID0gJigoKm5ldyktPnJiX2xlZnQpOworCQllbHNlIGlmIChkYXRhLT5zdGFydCA+IHRoaXMtPnN0YXJ0KQorCQkJbmV3ID0gJigoKm5ldyktPnJiX3JpZ2h0KTsKKwl9CisKKwlyYl9saW5rX25vZGUoJmRhdGEtPnJiLCBwYXJlbnQsIG5ldyk7CisJcmJfaW5zZXJ0X2NvbG9yKCZkYXRhLT5yYiwgcm9vdCk7Cit9CisKIC8qCiAgKiBEb2VzIGludGVyc2VjdGlvbiBvZiBQQVQgbWVtb3J5IHR5cGUgYW5kIE1UUlIgbWVtb3J5IHR5cGUgYW5kIHJldHVybnMKICAqIHRoZSByZXN1bHRpbmcgbWVtb3J5IHR5cGUgYXMgUEFUIHVuZGVyc3RhbmRzIGl0LgpAQCAtMjE4LDkgKzI2MCw2IEBACiAJcmV0dXJuIC1FQlVTWTsKIH0KIAotc3RhdGljIHN0cnVjdCBtZW10eXBlICpjYWNoZWRfZW50cnk7Ci1zdGF0aWMgdTY0IGNhY2hlZF9zdGFydDsKLQogc3RhdGljIGludCBwYXRfcGFnZXJhbmdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlpbnQgcmFtX3BhZ2UgPSAwLCBub3RfcmFtcGFnZSA9IDA7CkBAIC0yNDksNjMgKzI4OCw2MSBAQAogfQogCiAvKgotICogRm9yIFJBTSBwYWdlcywgbWFyayB0aGUgcGFnZXMgYXMgbm9uIFdCIG1lbW9yeSB0eXBlIHVzaW5nCi0gKiBQYWdlTm9uV0IgKFBHX2FyY2hfMSkuIFdlIGFsbG93IG9ubHkgb25lIHNldF9tZW1vcnlfdWMoKSBvcgotICogc2V0X21lbW9yeV93YygpIG9uIGEgUkFNIHBhZ2UgYXQgYSB0aW1lIGJlZm9yZSBtYXJraW5nIGl0IGFzIFdCIGFnYWluLgotICogVGhpcyBpcyBvaywgYmVjYXVzZSBvbmx5IG9uZSBkcml2ZXIgd2lsbCBiZSBvd25pbmcgdGhlIHBhZ2UgYW5kCi0gKiBkb2luZyBzZXRfbWVtb3J5XyooKSBjYWxscy4KKyAqIEZvciBSQU0gcGFnZXMsIHdlIHVzZSBwYWdlIGZsYWdzIHRvIG1hcmsgdGhlIHBhZ2VzIHdpdGggYXBwcm9wcmlhdGUgdHlwZS4KKyAqIEhlcmUgd2UgZG8gdHdvIHBhc3M6CisgKiAtIEZpbmQgdGhlIG1lbXR5cGUgb2YgYWxsIHRoZSBwYWdlcyBpbiB0aGUgcmFuZ2UsIGxvb2sgZm9yIGFueSBjb25mbGljdHMKKyAqIC0gSW4gY2FzZSBvZiBubyBjb25mbGljdHMsIHNldCB0aGUgbmV3IG1lbXR5cGUgZm9yIHBhZ2VzIGluIHRoZSByYW5nZQogICoKLSAqIEZvciBub3csIHdlIHVzZSBQYWdlTm9uV0IgdG8gdHJhY2sgdGhhdCB0aGUgUkFNIHBhZ2UgaXMgYmVpbmcgbWFwcGVkCi0gKiBhcyBub24gV0IuIEluIGZ1dHVyZSwgd2Ugd2lsbCBoYXZlIHRvIHVzZSBvbmUgbW9yZSBmbGFnCi0gKiAob3Igc29tZSBvdGhlciBtZWNoYW5pc20gaW4gcGFnZV9zdHJ1Y3QpIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4KLSAqIFVDIGFuZCBXQyBtYXBwaW5nLgorICogQ2FsbGVyIG11c3QgaG9sZCBtZW10eXBlX2xvY2sgZm9yIGF0b21pY2l0eS4KICAqLwogc3RhdGljIGludCByZXNlcnZlX3JhbV9wYWdlc190eXBlKHU2NCBzdGFydCwgdTY0IGVuZCwgdW5zaWduZWQgbG9uZyByZXFfdHlwZSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgKm5ld190eXBlKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwotCXU2NCBwZm4sIGVuZF9wZm47CisJdTY0IHBmbjsKKworCWlmIChyZXFfdHlwZSA9PSBfUEFHRV9DQUNIRV9VQykgeworCQkvKiBXZSBkbyBub3Qgc3VwcG9ydCBzdHJvbmcgVUMgKi8KKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXFfdHlwZSA9IF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCX0KKworCWZvciAocGZuID0gKHN0YXJ0ID4+IFBBR0VfU0hJRlQpOyBwZm4gPCAoZW5kID4+IFBBR0VfU0hJRlQpOyArK3BmbikgeworCQl1bnNpZ25lZCBsb25nIHR5cGU7CisKKwkJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisJCXR5cGUgPSBnZXRfcGFnZV9tZW10eXBlKHBhZ2UpOworCQlpZiAodHlwZSAhPSAtMSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAicmVzZXJ2ZV9yYW1fcGFnZXNfdHlwZSBmYWlsZWQgIgorCQkJCSIweCVMeC0weCVMeCwgdHJhY2sgMHglbHgsIHJlcSAweCVseFxuIiwKKwkJCQlzdGFydCwgZW5kLCB0eXBlLCByZXFfdHlwZSk7CisJCQlpZiAobmV3X3R5cGUpCisJCQkJKm5ld190eXBlID0gdHlwZTsKKworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKworCWlmIChuZXdfdHlwZSkKKwkJKm5ld190eXBlID0gcmVxX3R5cGU7CiAKIAlmb3IgKHBmbiA9IChzdGFydCA+PiBQQUdFX1NISUZUKTsgcGZuIDwgKGVuZCA+PiBQQUdFX1NISUZUKTsgKytwZm4pIHsKIAkJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JCWlmIChwYWdlX21hcHBlZChwYWdlKSB8fCBQYWdlTm9uV0IocGFnZSkpCi0JCQlnb3RvIG91dDsKLQotCQlTZXRQYWdlTm9uV0IocGFnZSk7CisJCXNldF9wYWdlX21lbXR5cGUocGFnZSwgcmVxX3R5cGUpOwogCX0KIAlyZXR1cm4gMDsKLQotb3V0OgotCWVuZF9wZm4gPSBwZm47Ci0JZm9yIChwZm4gPSAoc3RhcnQgPj4gUEFHRV9TSElGVCk7IHBmbiA8IGVuZF9wZm47ICsrcGZuKSB7Ci0JCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQlDbGVhclBhZ2VOb25XQihwYWdlKTsKLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCBmcmVlX3JhbV9wYWdlc190eXBlKHU2NCBzdGFydCwgdTY0IGVuZCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1NjQgcGZuLCBlbmRfcGZuOworCXU2NCBwZm47CiAKIAlmb3IgKHBmbiA9IChzdGFydCA+PiBQQUdFX1NISUZUKTsgcGZuIDwgKGVuZCA+PiBQQUdFX1NISUZUKTsgKytwZm4pIHsKIAkJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JCWlmIChwYWdlX21hcHBlZChwYWdlKSB8fCAhUGFnZU5vbldCKHBhZ2UpKQotCQkJZ290byBvdXQ7Ci0KLQkJQ2xlYXJQYWdlTm9uV0IocGFnZSk7CisJCXNldF9wYWdlX21lbXR5cGUocGFnZSwgLTEpOwogCX0KIAlyZXR1cm4gMDsKLQotb3V0OgotCWVuZF9wZm4gPSBwZm47Ci0JZm9yIChwZm4gPSAoc3RhcnQgPj4gUEFHRV9TSElGVCk7IHBmbiA8IGVuZF9wZm47ICsrcGZuKSB7Ci0JCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQlTZXRQYWdlTm9uV0IocGFnZSk7Ci0JfQotCXJldHVybiAtRUlOVkFMOwogfQogCiAvKgpAQCAtMzM5LDYgKzM3Niw4IEBACiAJCWlmIChuZXdfdHlwZSkgewogCQkJaWYgKHJlcV90eXBlID09IC0xKQogCQkJCSpuZXdfdHlwZSA9IF9QQUdFX0NBQ0hFX1dCOworCQkJZWxzZSBpZiAocmVxX3R5cGUgPT0gX1BBR0VfQ0FDSEVfV0MpCisJCQkJKm5ld190eXBlID0gX1BBR0VfQ0FDSEVfVUNfTUlOVVM7CiAJCQllbHNlCiAJCQkJKm5ld190eXBlID0gcmVxX3R5cGUgJiBfUEFHRV9DQUNIRV9NQVNLOwogCQl9CkBAIC0zNjQsMTEgKzQwMywxNiBAQAogCQkqbmV3X3R5cGUgPSBhY3R1YWxfdHlwZTsKIAogCWlzX3JhbmdlX3JhbSA9IHBhdF9wYWdlcmFuZ2VfaXNfcmFtKHN0YXJ0LCBlbmQpOwotCWlmIChpc19yYW5nZV9yYW0gPT0gMSkKLQkJcmV0dXJuIHJlc2VydmVfcmFtX3BhZ2VzX3R5cGUoc3RhcnQsIGVuZCwgcmVxX3R5cGUsCi0JCQkJCSAgICAgIG5ld190eXBlKTsKLQllbHNlIGlmIChpc19yYW5nZV9yYW0gPCAwKQorCWlmIChpc19yYW5nZV9yYW0gPT0gMSkgeworCisJCXNwaW5fbG9jaygmbWVtdHlwZV9sb2NrKTsKKwkJZXJyID0gcmVzZXJ2ZV9yYW1fcGFnZXNfdHlwZShzdGFydCwgZW5kLCByZXFfdHlwZSwgbmV3X3R5cGUpOworCQlzcGluX3VubG9jaygmbWVtdHlwZV9sb2NrKTsKKworCQlyZXR1cm4gZXJyOworCX0gZWxzZSBpZiAoaXNfcmFuZ2VfcmFtIDwgMCkgewogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAluZXcgID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lbXR5cGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ldykKQEAgLTM4MCwxNyArNDI0LDE5IEBACiAKIAlzcGluX2xvY2soJm1lbXR5cGVfbG9jayk7CiAKLQlpZiAoY2FjaGVkX2VudHJ5ICYmIHN0YXJ0ID49IGNhY2hlZF9zdGFydCkKLQkJZW50cnkgPSBjYWNoZWRfZW50cnk7Ci0JZWxzZQorCWVudHJ5ID0gbWVtdHlwZV9yYl9zZWFyY2goJm1lbXR5cGVfcmJyb290LCBuZXctPnN0YXJ0KTsKKwlpZiAobGlrZWx5KGVudHJ5ICE9IE5VTEwpKSB7CisJCS8qIFRvIHdvcmsgY29ycmVjdGx5IHdpdGggbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZSAqLworCQllbnRyeSA9IGxpc3RfZW50cnkoZW50cnktPm5kLnByZXYsIHN0cnVjdCBtZW10eXBlLCBuZCk7CisJfSBlbHNlIHsKIAkJZW50cnkgPSBsaXN0X2VudHJ5KCZtZW10eXBlX2xpc3QsIHN0cnVjdCBtZW10eXBlLCBuZCk7CisJfQogCiAJLyogU2VhcmNoIGZvciBleGlzdGluZyBtYXBwaW5nIHRoYXQgb3ZlcmxhcHMgdGhlIGN1cnJlbnQgcmFuZ2UgKi8KIAl3aGVyZSA9IE5VTEw7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShlbnRyeSwgJm1lbXR5cGVfbGlzdCwgbmQpIHsKIAkJaWYgKGVuZCA8PSBlbnRyeS0+c3RhcnQpIHsKIAkJCXdoZXJlID0gZW50cnktPm5kLnByZXY7Ci0JCQljYWNoZWRfZW50cnkgPSBsaXN0X2VudHJ5KHdoZXJlLCBzdHJ1Y3QgbWVtdHlwZSwgbmQpOwogCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAoc3RhcnQgPD0gZW50cnktPnN0YXJ0KSB7IC8qIGVuZCA+IGVudHJ5LT5zdGFydCAqLwogCQkJZXJyID0gY2hrX2NvbmZsaWN0KG5ldywgZW50cnksIG5ld190eXBlKTsKQEAgLTM5OCw4ICs0NDQsNiBAQAogCQkJCWRwcmludGsoIk92ZXJsYXAgYXQgMHglTHgtMHglTHhcbiIsCiAJCQkJCWVudHJ5LT5zdGFydCwgZW50cnktPmVuZCk7CiAJCQkJd2hlcmUgPSBlbnRyeS0+bmQucHJldjsKLQkJCQljYWNoZWRfZW50cnkgPSBsaXN0X2VudHJ5KHdoZXJlLAotCQkJCQkJCXN0cnVjdCBtZW10eXBlLCBuZCk7CiAJCQl9CiAJCQlicmVhazsKIAkJfSBlbHNlIGlmIChzdGFydCA8IGVudHJ5LT5lbmQpIHsgLyogc3RhcnQgPiBlbnRyeS0+c3RhcnQgKi8KQEAgLTQwNyw4ICs0NTEsNiBAQAogCQkJaWYgKCFlcnIpIHsKIAkJCQlkcHJpbnRrKCJPdmVybGFwIGF0IDB4JUx4LTB4JUx4XG4iLAogCQkJCQllbnRyeS0+c3RhcnQsIGVudHJ5LT5lbmQpOwotCQkJCWNhY2hlZF9lbnRyeSA9IGxpc3RfZW50cnkoZW50cnktPm5kLnByZXYsCi0JCQkJCQkJc3RydWN0IG1lbXR5cGUsIG5kKTsKIAogCQkJCS8qCiAJCQkJICogTW92ZSB0byByaWdodCBwb3NpdGlvbiBpbiB0aGUgbGlua2VkCkBAIC00MzYsMTMgKzQ3OCwxMyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWNhY2hlZF9zdGFydCA9IHN0YXJ0OwotCiAJaWYgKHdoZXJlKQogCQlsaXN0X2FkZCgmbmV3LT5uZCwgd2hlcmUpOwogCWVsc2UKIAkJbGlzdF9hZGRfdGFpbCgmbmV3LT5uZCwgJm1lbXR5cGVfbGlzdCk7CiAKKwltZW10eXBlX3JiX2luc2VydCgmbWVtdHlwZV9yYnJvb3QsIG5ldyk7CisKIAlzcGluX3VubG9jaygmbWVtdHlwZV9sb2NrKTsKIAogCWRwcmludGsoInJlc2VydmVfbWVtdHlwZSBhZGRlZCAweCVMeC0weCVMeCwgdHJhY2sgJXMsIHJlcSAlcywgcmV0ICVzXG4iLApAQCAtNDU0LDcgKzQ5Niw3IEBACiAKIGludCBmcmVlX21lbXR5cGUodTY0IHN0YXJ0LCB1NjQgZW5kKQogewotCXN0cnVjdCBtZW10eXBlICplbnRyeTsKKwlzdHJ1Y3QgbWVtdHlwZSAqZW50cnksICpzYXZlZF9lbnRyeTsKIAlpbnQgZXJyID0gLUVJTlZBTDsKIAlpbnQgaXNfcmFuZ2VfcmFtOwogCkBAIC00NjYsMjMgKzUwOCw1OCBAQAogCQlyZXR1cm4gMDsKIAogCWlzX3JhbmdlX3JhbSA9IHBhdF9wYWdlcmFuZ2VfaXNfcmFtKHN0YXJ0LCBlbmQpOwotCWlmIChpc19yYW5nZV9yYW0gPT0gMSkKLQkJcmV0dXJuIGZyZWVfcmFtX3BhZ2VzX3R5cGUoc3RhcnQsIGVuZCk7Ci0JZWxzZSBpZiAoaXNfcmFuZ2VfcmFtIDwgMCkKKwlpZiAoaXNfcmFuZ2VfcmFtID09IDEpIHsKKworCQlzcGluX2xvY2soJm1lbXR5cGVfbG9jayk7CisJCWVyciA9IGZyZWVfcmFtX3BhZ2VzX3R5cGUoc3RhcnQsIGVuZCk7CisJCXNwaW5fdW5sb2NrKCZtZW10eXBlX2xvY2spOworCisJCXJldHVybiBlcnI7CisJfSBlbHNlIGlmIChpc19yYW5nZV9yYW0gPCAwKSB7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXNwaW5fbG9jaygmbWVtdHlwZV9sb2NrKTsKKworCWVudHJ5ID0gbWVtdHlwZV9yYl9zZWFyY2goJm1lbXR5cGVfcmJyb290LCBzdGFydCk7CisJaWYgKHVubGlrZWx5KGVudHJ5ID09IE5VTEwpKQorCQlnb3RvIHVubG9ja19yZXQ7CisKKwkvKgorCSAqIFNhdmVkIGVudHJ5IHBvaW50cyB0byBhbiBlbnRyeSB3aXRoIHN0YXJ0IHNhbWUgb3IgbGVzcyB0aGFuIHdoYXQKKwkgKiB3ZSBzZWFyY2hlZCBmb3IuIE5vdyBnbyB0aHJvdWdoIHRoZSBsaXN0IGluIGJvdGggZGlyZWN0aW9ucyB0byBsb29rCisJICogZm9yIHRoZSBlbnRyeSB0aGF0IG1hdGNoZXMgd2l0aCBib3RoIHN0YXJ0IGFuZCBlbmQsIHdpdGggbGlzdCBzdG9yZWQKKwkgKiBpbiBzb3J0ZWQgc3RhcnQgYWRkcmVzcworCSAqLworCXNhdmVkX2VudHJ5ID0gZW50cnk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJm1lbXR5cGVfbGlzdCwgbmQpIHsKIAkJaWYgKGVudHJ5LT5zdGFydCA9PSBzdGFydCAmJiBlbnRyeS0+ZW5kID09IGVuZCkgewotCQkJaWYgKGNhY2hlZF9lbnRyeSA9PSBlbnRyeSB8fCBjYWNoZWRfc3RhcnQgPT0gc3RhcnQpCi0JCQkJY2FjaGVkX2VudHJ5ID0gTlVMTDsKLQorCQkJcmJfZXJhc2UoJmVudHJ5LT5yYiwgJm1lbXR5cGVfcmJyb290KTsKIAkJCWxpc3RfZGVsKCZlbnRyeS0+bmQpOwogCQkJa2ZyZWUoZW50cnkpOwogCQkJZXJyID0gMDsKIAkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGVudHJ5LT5zdGFydCA+IHN0YXJ0KSB7CisJCQlicmVhazsKIAkJfQogCX0KKworCWlmICghZXJyKQorCQlnb3RvIHVubG9ja19yZXQ7CisKKwllbnRyeSA9IHNhdmVkX2VudHJ5OworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShlbnRyeSwgJm1lbXR5cGVfbGlzdCwgbmQpIHsKKwkJaWYgKGVudHJ5LT5zdGFydCA9PSBzdGFydCAmJiBlbnRyeS0+ZW5kID09IGVuZCkgeworCQkJcmJfZXJhc2UoJmVudHJ5LT5yYiwgJm1lbXR5cGVfcmJyb290KTsKKwkJCWxpc3RfZGVsKCZlbnRyeS0+bmQpOworCQkJa2ZyZWUoZW50cnkpOworCQkJZXJyID0gMDsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGVudHJ5LT5zdGFydCA8IHN0YXJ0KSB7CisJCQlicmVhazsKKwkJfQorCX0KK3VubG9ja19yZXQ6CiAJc3Bpbl91bmxvY2soJm1lbXR5cGVfbG9jayk7CiAKIAlpZiAoZXJyKSB7CkBAIC00OTYsNiArNTczLDEwMSBAQAogfQogCiAKKy8qKgorICogbG9va3VwX21lbXR5cGUgLSBMb29rc3VwIHRoZSBtZW1vcnkgdHlwZSBmb3IgYSBwaHlzaWNhbCBhZGRyZXNzCisgKiBAcGFkZHI6IHBoeXNpY2FsIGFkZHJlc3Mgb2Ygd2hpY2ggbWVtb3J5IHR5cGUgbmVlZHMgdG8gYmUgbG9va2VkIHVwCisgKgorICogT25seSB0byBiZSBjYWxsZWQgd2hlbiBQQVQgaXMgZW5hYmxlZAorICoKKyAqIFJldHVybnMgX1BBR0VfQ0FDSEVfV0IsIF9QQUdFX0NBQ0hFX1dDLCBfUEFHRV9DQUNIRV9VQ19NSU5VUyBvcgorICogX1BBR0VfQ0FDSEVfVUMKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9va3VwX21lbXR5cGUodTY0IHBhZGRyKQoreworCWludCByZXR0eXBlID0gX1BBR0VfQ0FDSEVfV0I7CisJc3RydWN0IG1lbXR5cGUgKmVudHJ5OworCisJaWYgKGlzX0lTQV9yYW5nZShwYWRkciwgcGFkZHIgKyBQQUdFX1NJWkUgLSAxKSkKKwkJcmV0dXJuIHJldHR5cGU7CisKKwlpZiAocGF0X3BhZ2VyYW5nZV9pc19yYW0ocGFkZHIsIHBhZGRyICsgUEFHRV9TSVpFKSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJc3Bpbl9sb2NrKCZtZW10eXBlX2xvY2spOworCQlwYWdlID0gcGZuX3RvX3BhZ2UocGFkZHIgPj4gUEFHRV9TSElGVCk7CisJCXJldHR5cGUgPSBnZXRfcGFnZV9tZW10eXBlKHBhZ2UpOworCQlzcGluX3VubG9jaygmbWVtdHlwZV9sb2NrKTsKKwkJLyoKKwkJICogLTEgZnJvbSBnZXRfcGFnZV9tZW10eXBlKCkgaW1wbGllcyBSQU0gcGFnZSBpcyBpbiBpdHMKKwkJICogZGVmYXVsdCBzdGF0ZSBhbmQgbm90IHJlc2VydmVkLCBhbmQgaGVuY2Ugb2YgdHlwZSBXQgorCQkgKi8KKwkJaWYgKHJldHR5cGUgPT0gLTEpCisJCQlyZXR0eXBlID0gX1BBR0VfQ0FDSEVfV0I7CisKKwkJcmV0dXJuIHJldHR5cGU7CisJfQorCisJc3Bpbl9sb2NrKCZtZW10eXBlX2xvY2spOworCisJZW50cnkgPSBtZW10eXBlX3JiX3NlYXJjaCgmbWVtdHlwZV9yYnJvb3QsIHBhZGRyKTsKKwlpZiAoZW50cnkgIT0gTlVMTCkKKwkJcmV0dHlwZSA9IGVudHJ5LT50eXBlOworCWVsc2UKKwkJcmV0dHlwZSA9IF9QQUdFX0NBQ0hFX1VDX01JTlVTOworCisJc3Bpbl91bmxvY2soJm1lbXR5cGVfbG9jayk7CisJcmV0dXJuIHJldHR5cGU7Cit9CisKKy8qKgorICogaW9fcmVzZXJ2ZV9tZW10eXBlIC0gUmVxdWVzdCBhIG1lbW9yeSB0eXBlIG1hcHBpbmcgZm9yIGEgcmVnaW9uIG9mIG1lbW9yeQorICogQHN0YXJ0OiBzdGFydCAocGh5c2ljYWwgYWRkcmVzcykgb2YgdGhlIHJlZ2lvbgorICogQGVuZDogZW5kIChwaHlzaWNhbCBhZGRyZXNzKSBvZiB0aGUgcmVnaW9uCisgKiBAdHlwZTogQSBwb2ludGVyIHRvIG1lbXR5cGUsIHdpdGggcmVxdWVzdGVkIHR5cGUuIE9uIHN1Y2Nlc3MsIHJlcXVlc3RlZAorICogb3IgYW55IG90aGVyIGNvbXBhdGlibGUgdHlwZSB0aGF0IHdhcyBhdmFpbGFibGUgZm9yIHRoZSByZWdpb24gaXMgcmV0dXJuZWQKKyAqCisgKiBPbiBzdWNjZXNzLCByZXR1cm5zIDAKKyAqIE9uIGZhaWx1cmUsIHJldHVybnMgbm9uLXplcm8KKyAqLworaW50IGlvX3Jlc2VydmVfbWVtdHlwZShyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIHJlc291cmNlX3NpemVfdCBlbmQsCisJCQl1bnNpZ25lZCBsb25nICp0eXBlKQoreworCXJlc291cmNlX3NpemVfdCBzaXplID0gZW5kIC0gc3RhcnQ7CisJdW5zaWduZWQgbG9uZyByZXFfdHlwZSA9ICp0eXBlOworCXVuc2lnbmVkIGxvbmcgbmV3X3R5cGU7CisJaW50IHJldDsKKworCVdBUk5fT05fT05DRShpb21lbV9tYXBfc2FuaXR5X2NoZWNrKHN0YXJ0LCBzaXplKSk7CisKKwlyZXQgPSByZXNlcnZlX21lbXR5cGUoc3RhcnQsIGVuZCwgcmVxX3R5cGUsICZuZXdfdHlwZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZXJyOworCisJaWYgKCFpc19uZXdfbWVtdHlwZV9hbGxvd2VkKHN0YXJ0LCBzaXplLCByZXFfdHlwZSwgbmV3X3R5cGUpKQorCQlnb3RvIG91dF9mcmVlOworCisJaWYgKGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHN0YXJ0LCBzaXplLCBuZXdfdHlwZSkgPCAwKQorCQlnb3RvIG91dF9mcmVlOworCisJKnR5cGUgPSBuZXdfdHlwZTsKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWU6CisJZnJlZV9tZW10eXBlKHN0YXJ0LCBlbmQpOworCXJldCA9IC1FQlVTWTsKK291dF9lcnI6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBpb19mcmVlX21lbXR5cGUgLSBSZWxlYXNlIGEgbWVtb3J5IHR5cGUgbWFwcGluZyBmb3IgYSByZWdpb24gb2YgbWVtb3J5CisgKiBAc3RhcnQ6IHN0YXJ0IChwaHlzaWNhbCBhZGRyZXNzKSBvZiB0aGUgcmVnaW9uCisgKiBAZW5kOiBlbmQgKHBoeXNpY2FsIGFkZHJlc3MpIG9mIHRoZSByZWdpb24KKyAqLwordm9pZCBpb19mcmVlX21lbXR5cGUocmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3QgZW5kKQoreworCWZyZWVfbWVtdHlwZShzdGFydCwgZW5kKTsKK30KKwogcGdwcm90X3QgcGh5c19tZW1fYWNjZXNzX3Byb3Qoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcGZuLAogCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3Qgdm1hX3Byb3QpCiB7CkBAIC01NzcsNyArNzQ5LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGlkX3N6OwogCi0JaWYgKCFwYXRfZW5hYmxlZCB8fCBiYXNlID49IF9fcGEoaGlnaF9tZW1vcnkpKQorCWlmIChiYXNlID49IF9fcGEoaGlnaF9tZW1vcnkpKQogCQlyZXR1cm4gMDsKIAogCWlkX3N6ID0gKF9fcGEoaGlnaF9tZW1vcnkpIDwgYmFzZSArIHNpemUpID8KQEAgLTYxMiwxMSArNzg0LDI5IEBACiAJaXNfcmFtID0gcGF0X3BhZ2VyYW5nZV9pc19yYW0ocGFkZHIsIHBhZGRyICsgc2l6ZSk7CiAKIAkvKgotCSAqIHJlc2VydmVfcGZuX3JhbmdlKCkgZG9lc24ndCBzdXBwb3J0IFJBTSBwYWdlcy4gTWFpbnRhaW4gdGhlIGN1cnJlbnQKLQkgKiBiZWhhdmlvciB3aXRoIFJBTSBwYWdlcyBieSByZXR1cm5pbmcgc3VjY2Vzcy4KKwkgKiByZXNlcnZlX3Bmbl9yYW5nZSgpIGZvciBSQU0gcGFnZXMuIFdlIGRvIG5vdCByZWZjb3VudCB0byBrZWVwCisJICogdHJhY2sgb2YgbnVtYmVyIG9mIG1hcHBpbmdzIG9mIFJBTSBwYWdlcy4gV2UgY2FuIGFzc2VydCB0aGF0CisJICogdGhlIHR5cGUgcmVxdWVzdGVkIG1hdGNoZXMgdGhlIHR5cGUgb2YgZmlyc3QgcGFnZSBpbiB0aGUgcmFuZ2UuCiAJICovCi0JaWYgKGlzX3JhbSAhPSAwKQorCWlmIChpc19yYW0pIHsKKwkJaWYgKCFwYXRfZW5hYmxlZCkKKwkJCXJldHVybiAwOworCisJCWZsYWdzID0gbG9va3VwX21lbXR5cGUocGFkZHIpOworCQlpZiAod2FudF9mbGFncyAhPSBmbGFncykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIiVzOiVkIG1hcCBwZm4gUkFNIHJhbmdlIHJlcSAlcyBmb3IgJUx4LSVMeCwgZ290ICVzXG4iLAorCQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKKwkJCQljYXR0cl9uYW1lKHdhbnRfZmxhZ3MpLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGFkZHIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykocGFkZHIgKyBzaXplKSwKKwkJCQljYXR0cl9uYW1lKGZsYWdzKSk7CisJCQkqdm1hX3Byb3QgPSBfX3BncHJvdCgocGdwcm90X3ZhbCgqdm1hX3Byb3QpICYKKwkJCQkJICAgICAgKH5fUEFHRV9DQUNIRV9NQVNLKSkgfAorCQkJCQkgICAgIGZsYWdzKTsKKwkJfQogCQlyZXR1cm4gMDsKKwl9CiAKIAlyZXQgPSByZXNlcnZlX21lbXR5cGUocGFkZHIsIHBhZGRyICsgc2l6ZSwgd2FudF9mbGFncywgJmZsYWdzKTsKIAlpZiAocmV0KQpAQCAtNjc4LDE0ICs4NjgsNiBAQAogCXVuc2lnbmVkIGxvbmcgdm1hX3NpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CiAJcGdwcm90X3QgcGdwcm90OwogCi0JaWYgKCFwYXRfZW5hYmxlZCkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIEZvciBub3csIG9ubHkgaGFuZGxlIHJlbWFwX3Bmbl9yYW5nZSgpIHZtYXMgd2hlcmUKLQkgKiBpc19saW5lYXJfcGZuX21hcHBpbmcoKSA9PSBUUlVFLiBIYW5kbGluZyBvZgotCSAqIHZtX2luc2VydF9wZm4oKSBpcyBUQkQuCi0JICovCiAJaWYgKGlzX2xpbmVhcl9wZm5fbWFwcGluZyh2bWEpKSB7CiAJCS8qCiAJCSAqIHJlc2VydmUgdGhlIHdob2xlIGNodW5rIGNvdmVyZWQgYnkgdm1hLiBXZSBuZWVkIHRoZQpAQCAtNzEzLDIzICs4OTUsMjQgQEAKIGludCB0cmFja19wZm5fdm1hX25ldyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdwcm90X3QgKnByb3QsCiAJCQl1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJcmVzb3VyY2Vfc2l6ZV90IHBhZGRyOwogCXVuc2lnbmVkIGxvbmcgdm1hX3NpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CiAKLQlpZiAoIXBhdF9lbmFibGVkKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogRm9yIG5vdywgb25seSBoYW5kbGUgcmVtYXBfcGZuX3JhbmdlKCkgdm1hcyB3aGVyZQotCSAqIGlzX2xpbmVhcl9wZm5fbWFwcGluZygpID09IFRSVUUuIEhhbmRsaW5nIG9mCi0JICogdm1faW5zZXJ0X3BmbigpIGlzIFRCRC4KLQkgKi8KIAlpZiAoaXNfbGluZWFyX3Bmbl9tYXBwaW5nKHZtYSkpIHsKIAkJLyogcmVzZXJ2ZSB0aGUgd2hvbGUgY2h1bmsgc3RhcnRpbmcgZnJvbSB2bV9wZ29mZiAqLwogCQlwYWRkciA9IChyZXNvdXJjZV9zaXplX3Qpdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwogCQlyZXR1cm4gcmVzZXJ2ZV9wZm5fcmFuZ2UocGFkZHIsIHZtYV9zaXplLCBwcm90LCAwKTsKIAl9CiAKKwlpZiAoIXBhdF9lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCS8qIGZvciB2bV9pbnNlcnRfcGZuIGFuZCBmcmllbmRzLCB3ZSBzZXQgcHJvdCBiYXNlZCBvbiBsb29rdXAgKi8KKwlmbGFncyA9IGxvb2t1cF9tZW10eXBlKHBmbiA8PCBQQUdFX1NISUZUKTsKKwkqcHJvdCA9IF9fcGdwcm90KChwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAmICh+X1BBR0VfQ0FDSEVfTUFTSykpIHwKKwkJCSBmbGFncyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQ0LDE0ICs5MjcsNiBAQAogCXJlc291cmNlX3NpemVfdCBwYWRkcjsKIAl1bnNpZ25lZCBsb25nIHZtYV9zaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OwogCi0JaWYgKCFwYXRfZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBGb3Igbm93LCBvbmx5IGhhbmRsZSByZW1hcF9wZm5fcmFuZ2UoKSB2bWFzIHdoZXJlCi0JICogaXNfbGluZWFyX3Bmbl9tYXBwaW5nKCkgPT0gVFJVRS4gSGFuZGxpbmcgb2YKLQkgKiB2bV9pbnNlcnRfcGZuKCkgaXMgVEJELgotCSAqLwogCWlmIChpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSkgewogCQkvKiBmcmVlIHRoZSB3aG9sZSBjaHVuayBzdGFydGluZyBmcm9tIHZtX3Bnb2ZmICovCiAJCXBhZGRyID0gKHJlc291cmNlX3NpemVfdCl2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CkBAIC04MjcsNyArMTAwMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbWVtdHlwZV9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBtZW10eXBlX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gbWVtdHlwZV9zZXFfc3RhcnQsCiAJLm5leHQgID0gbWVtdHlwZV9zZXFfbmV4dCwKIAkuc3RvcCAgPSBtZW10eXBlX3NlcV9zdG9wLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGh5c2FkZHIuYyBiL2FyY2gveDg2L21tL3BoeXNhZGRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJlMjczNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L21tL3BoeXNhZGRyLmMKQEAgLTAsMCArMSw3MCBAQAorI2luY2x1ZGUgPGxpbnV4L21tZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2luY2x1ZGUgInBoeXNhZGRyLmgiCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisKK3Vuc2lnbmVkIGxvbmcgX19waHlzX2FkZHIodW5zaWduZWQgbG9uZyB4KQoreworCWlmICh4ID49IF9fU1RBUlRfS0VSTkVMX21hcCkgeworCQl4IC09IF9fU1RBUlRfS0VSTkVMX21hcDsKKwkJVklSVFVBTF9CVUdfT04oeCA+PSBLRVJORUxfSU1BR0VfU0laRSk7CisJCXggKz0gcGh5c19iYXNlOworCX0gZWxzZSB7CisJCVZJUlRVQUxfQlVHX09OKHggPCBQQUdFX09GRlNFVCk7CisJCXggLT0gUEFHRV9PRkZTRVQ7CisJCVZJUlRVQUxfQlVHX09OKCFwaHlzX2FkZHJfdmFsaWQoeCkpOworCX0KKwlyZXR1cm4geDsKK30KK0VYUE9SVF9TWU1CT0woX19waHlzX2FkZHIpOworCitib29sIF9fdmlydF9hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlpZiAoeCA+PSBfX1NUQVJUX0tFUk5FTF9tYXApIHsKKwkJeCAtPSBfX1NUQVJUX0tFUk5FTF9tYXA7CisJCWlmICh4ID49IEtFUk5FTF9JTUFHRV9TSVpFKQorCQkJcmV0dXJuIGZhbHNlOworCQl4ICs9IHBoeXNfYmFzZTsKKwl9IGVsc2UgeworCQlpZiAoeCA8IFBBR0VfT0ZGU0VUKQorCQkJcmV0dXJuIGZhbHNlOworCQl4IC09IFBBR0VfT0ZGU0VUOworCQlpZiAoIXBoeXNfYWRkcl92YWxpZCh4KSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gcGZuX3ZhbGlkKHggPj4gUEFHRV9TSElGVCk7Cit9CitFWFBPUlRfU1lNQk9MKF9fdmlydF9hZGRyX3ZhbGlkKTsKKworI2Vsc2UKKworI2lmZGVmIENPTkZJR19ERUJVR19WSVJUVUFMCit1bnNpZ25lZCBsb25nIF9fcGh5c19hZGRyKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwkvKiBWTUFMTE9DXyogYXJlbid0IGNvbnN0YW50cyAgKi8KKwlWSVJUVUFMX0JVR19PTih4IDwgUEFHRV9PRkZTRVQpOworCVZJUlRVQUxfQlVHX09OKF9fdm1hbGxvY19zdGFydF9zZXQgJiYgaXNfdm1hbGxvY19hZGRyKCh2b2lkICopIHgpKTsKKwlyZXR1cm4geCAtIFBBR0VfT0ZGU0VUOworfQorRVhQT1JUX1NZTUJPTChfX3BoeXNfYWRkcik7CisjZW5kaWYKKworYm9vbCBfX3ZpcnRfYWRkcl92YWxpZCh1bnNpZ25lZCBsb25nIHgpCit7CisJaWYgKHggPCBQQUdFX09GRlNFVCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChfX3ZtYWxsb2Nfc3RhcnRfc2V0ICYmIGlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKSB4KSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICh4ID49IEZJWEFERFJfU1RBUlQpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gcGZuX3ZhbGlkKCh4IC0gUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpOworfQorRVhQT1JUX1NZTUJPTChfX3ZpcnRfYWRkcl92YWxpZCk7CisKKyNlbmRpZgkvKiBDT05GSUdfWDg2XzY0ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9waHlzYWRkci5oIGIvYXJjaC94ODYvbW0vcGh5c2FkZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2NkNWEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbW0vcGh5c2FkZHIuaApAQCAtMCwwICsxLDEwIEBACisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCitzdGF0aWMgaW5saW5lIGludCBwaHlzX2FkZHJfdmFsaWQocmVzb3VyY2Vfc2l6ZV90IGFkZHIpCit7CisjaWZkZWYgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUCisJcmV0dXJuICEoYWRkciA+PiBib290X2NwdV9kYXRhLng4Nl9waHlzX2JpdHMpOworI2Vsc2UKKwlyZXR1cm4gMTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vc3JhdF8zMi5jIGIvYXJjaC94ODYvbW0vc3JhdF8zMi5jCmluZGV4IDI5YTBlMzcuLjZmOGFhMzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3NyYXRfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9zcmF0XzMyLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCQlnb3RvIG91dF9mYWlsOwogCiAJaWYgKG51bV9tZW1vcnlfY2h1bmtzID09IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORworCQlwcmludGsoS0VSTl9ERUJVRwogCQkJICJjb3VsZCBub3QgZmluZCBhbnkgQUNQSSBTUkFUIG1lbW9yeSBhcmVhcy5cbiIpOwogCQlnb3RvIG91dF9mYWlsOwogCX0KQEAgLTI3Nyw3ICsyNzcsNyBAQAogCX0KIAlyZXR1cm4gMTsKIG91dF9mYWlsOgotCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBOVU1BIG1lbW9yeSBpbmZvcm1hdGlvbiBmcm9tIFNSQVQiCisJcHJpbnRrKEtFUk5fREVCVUcgImZhaWxlZCB0byBnZXQgTlVNQSBtZW1vcnkgaW5mb3JtYXRpb24gZnJvbSBTUkFUIgogCQkJIiB0YWJsZVxuIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKaW5kZXggODliOWE1Yy4uY2I4OGIxYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYwpAQCAtMSwxMSArMSwxNCBAQAogLyoqCiAgKiBAZmlsZSBubWlfaW50LmMKICAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyLTIwMDggT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMi0yMDA5IE9Qcm9maWxlIGF1dGhvcnMKICAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCiAgKgogICogQGF1dGhvciBKb2huIExldm9uIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KICAqIEBhdXRob3IgUm9iZXJ0IFJpY2h0ZXIgPHJvYmVydC5yaWNodGVyQGFtZC5jb20+CisgKiBAYXV0aG9yIEJhcnJ5IEthc2luZG9yZiA8YmFycnkua2FzaW5kb3JmQGFtZC5jb20+CisgKiBAYXV0aG9yIEphc29uIFllaCA8amFzb24ueWVoQGFtZC5jb20+CisgKiBAYXV0aG9yIFN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI0LDEzICsyNywzNSBAQAogI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKICNpbmNsdWRlICJvcF94ODZfbW9kZWwuaCIKIAotc3RhdGljIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCAqbW9kZWw7CitzdGF0aWMgc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjICptb2RlbDsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgb3BfbXNycywgY3B1X21zcnMpOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHNhdmVkX2x2dHBjKTsKIAogLyogMCA9PSByZWdpc3RlcmVkIGJ1dCBvZmYsIDEgPT0gcmVnaXN0ZXJlZCBhbmQgb24gKi8KIHN0YXRpYyBpbnQgbm1pX2VuYWJsZWQgPSAwOwogCitzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgY291bnRlcl9jb25maWdbT1BfTUFYX0NPVU5URVJdOworCisvKiBjb21tb24gZnVuY3Rpb25zICovCisKK3U2NCBvcF94ODZfZ2V0X2N0cmwoc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0ICptb2RlbCwKKwkJICAgIHN0cnVjdCBvcF9jb3VudGVyX2NvbmZpZyAqY291bnRlcl9jb25maWcpCit7CisJdTY0IHZhbCA9IDA7CisJdTE2IGV2ZW50ID0gKHUxNiljb3VudGVyX2NvbmZpZy0+ZXZlbnQ7CisKKwl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMX0lOVDsKKwl2YWwgfD0gY291bnRlcl9jb25maWctPnVzZXIgPyBBUkNIX1BFUkZNT05fRVZFTlRTRUxfVVNSIDogMDsKKwl2YWwgfD0gY291bnRlcl9jb25maWctPmtlcm5lbCA/IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUyA6IDA7CisJdmFsIHw9IChjb3VudGVyX2NvbmZpZy0+dW5pdF9tYXNrICYgMHhGRikgPDwgODsKKwlldmVudCAmPSBtb2RlbC0+ZXZlbnRfbWFzayA/IG1vZGVsLT5ldmVudF9tYXNrIDogMHhGRjsKKwl2YWwgfD0gZXZlbnQgJiAweEZGOworCXZhbCB8PSAoZXZlbnQgJiAweDBGMDApIDw8IDI0OworCisJcmV0dXJuIHZhbDsKK30KKworCiBzdGF0aWMgaW50IHByb2ZpbGVfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCiB7CkBAIC01MiwxODYgKzc3LDIxIEBACiAKIHN0YXRpYyB2b2lkIG5taV9jcHVfc2F2ZV9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKm1zcnMpCiB7Ci0JdW5zaWduZWQgaW50IGNvbnN0IG5yX2N0cnMgPSBtb2RlbC0+bnVtX2NvdW50ZXJzOwotCXVuc2lnbmVkIGludCBjb25zdCBucl9jdHJscyA9IG1vZGVsLT5udW1fY29udHJvbHM7CiAJc3RydWN0IG9wX21zciAqY291bnRlcnMgPSBtc3JzLT5jb3VudGVyczsKIAlzdHJ1Y3Qgb3BfbXNyICpjb250cm9scyA9IG1zcnMtPmNvbnRyb2xzOwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX2N0cnM7ICsraSkgewotCQlpZiAoY291bnRlcnNbaV0uYWRkcikgewotCQkJcmRtc3IoY291bnRlcnNbaV0uYWRkciwKLQkJCQljb3VudGVyc1tpXS5zYXZlZC5sb3csCi0JCQkJY291bnRlcnNbaV0uc2F2ZWQuaGlnaCk7Ci0JCX0KKwlmb3IgKGkgPSAwOyBpIDwgbW9kZWwtPm51bV9jb3VudGVyczsgKytpKSB7CisJCWlmIChjb3VudGVyc1tpXS5hZGRyKQorCQkJcmRtc3JsKGNvdW50ZXJzW2ldLmFkZHIsIGNvdW50ZXJzW2ldLnNhdmVkKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfY3RybHM7ICsraSkgewotCQlpZiAoY29udHJvbHNbaV0uYWRkcikgewotCQkJcmRtc3IoY29udHJvbHNbaV0uYWRkciwKLQkJCQljb250cm9sc1tpXS5zYXZlZC5sb3csCi0JCQkJY29udHJvbHNbaV0uc2F2ZWQuaGlnaCk7Ci0JCX0KKwlmb3IgKGkgPSAwOyBpIDwgbW9kZWwtPm51bV9jb250cm9sczsgKytpKSB7CisJCWlmIChjb250cm9sc1tpXS5hZGRyKQorCQkJcmRtc3JsKGNvbnRyb2xzW2ldLmFkZHIsIGNvbnRyb2xzW2ldLnNhdmVkKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG5taV9zYXZlX3JlZ2lzdGVycyh2b2lkICpkdW1teSkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCBvcF9tc3JzICptc3JzID0gJnBlcl9jcHUoY3B1X21zcnMsIGNwdSk7Ci0Jbm1pX2NwdV9zYXZlX3JlZ2lzdGVycyhtc3JzKTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9tc3JzKHZvaWQpCi17Ci0JaW50IGk7Ci0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJa2ZyZWUocGVyX2NwdShjcHVfbXNycywgaSkuY291bnRlcnMpOwotCQlwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb3VudGVycyA9IE5VTEw7Ci0JCWtmcmVlKHBlcl9jcHUoY3B1X21zcnMsIGkpLmNvbnRyb2xzKTsKLQkJcGVyX2NwdShjcHVfbXNycywgaSkuY29udHJvbHMgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIGludCBhbGxvY2F0ZV9tc3JzKHZvaWQpCi17Ci0JaW50IHN1Y2Nlc3MgPSAxOwotCXNpemVfdCBjb250cm9sc19zaXplID0gc2l6ZW9mKHN0cnVjdCBvcF9tc3IpICogbW9kZWwtPm51bV9jb250cm9sczsKLQlzaXplX3QgY291bnRlcnNfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb3BfbXNyKSAqIG1vZGVsLT5udW1fY291bnRlcnM7Ci0KLQlpbnQgaTsKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb3VudGVycyA9IGttYWxsb2MoY291bnRlcnNfc2l6ZSwKLQkJCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGVyX2NwdShjcHVfbXNycywgaSkuY291bnRlcnMpIHsKLQkJCXN1Y2Nlc3MgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJcGVyX2NwdShjcHVfbXNycywgaSkuY29udHJvbHMgPSBrbWFsbG9jKGNvbnRyb2xzX3NpemUsCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCQlpZiAoIXBlcl9jcHUoY3B1X21zcnMsIGkpLmNvbnRyb2xzKSB7Ci0JCQlzdWNjZXNzID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFzdWNjZXNzKQotCQlmcmVlX21zcnMoKTsKLQotCXJldHVybiBzdWNjZXNzOwotfQotCi1zdGF0aWMgdm9pZCBubWlfY3B1X3NldHVwKHZvaWQgKmR1bW15KQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IG9wX21zcnMgKm1zcnMgPSAmcGVyX2NwdShjcHVfbXNycywgY3B1KTsKLQlzcGluX2xvY2soJm9wcm9maWxlZnNfbG9jayk7Ci0JbW9kZWwtPnNldHVwX2N0cnMobXNycyk7Ci0Jc3Bpbl91bmxvY2soJm9wcm9maWxlZnNfbG9jayk7Ci0JcGVyX2NwdShzYXZlZF9sdnRwYywgY3B1KSA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKLX0KLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwcm9maWxlX2V4Y2VwdGlvbnNfbmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBwcm9maWxlX2V4Y2VwdGlvbnNfbm90aWZ5LAotCS5uZXh0ID0gTlVMTCwKLQkucHJpb3JpdHkgPSAyCi19OwotCi1zdGF0aWMgaW50IG5taV9zZXR1cCh2b2lkKQotewotCWludCBlcnIgPSAwOwotCWludCBjcHU7Ci0KLQlpZiAoIWFsbG9jYXRlX21zcnMoKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQllcnIgPSByZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnByb2ZpbGVfZXhjZXB0aW9uc19uYik7Ci0JaWYgKGVycikgewotCQlmcmVlX21zcnMoKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBXZSBuZWVkIHRvIHNlcmlhbGl6ZSBzYXZlIGFuZCBzZXR1cCBmb3IgSFQgYmVjYXVzZSB0aGUgc3Vic2V0Ci0JICogb2YgbXNycyBhcmUgZGlzdGluY3QgZm9yIHNhdmUgYW5kIHNldHVwIG9wZXJhdGlvbnMKLQkgKi8KLQotCS8qIEFzc3VtZSBzYXZlZC9yZXN0b3JlZCBjb3VudGVycyBhcmUgdGhlIHNhbWUgb24gYWxsIENQVXMgKi8KLQltb2RlbC0+ZmlsbF9pbl9hZGRyZXNzZXMoJnBlcl9jcHUoY3B1X21zcnMsIDApKTsKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCWlmIChjcHUgIT0gMCkgewotCQkJbWVtY3B5KHBlcl9jcHUoY3B1X21zcnMsIGNwdSkuY291bnRlcnMsCi0JCQkJcGVyX2NwdShjcHVfbXNycywgMCkuY291bnRlcnMsCi0JCQkJc2l6ZW9mKHN0cnVjdCBvcF9tc3IpICogbW9kZWwtPm51bV9jb3VudGVycyk7Ci0KLQkJCW1lbWNweShwZXJfY3B1KGNwdV9tc3JzLCBjcHUpLmNvbnRyb2xzLAotCQkJCXBlcl9jcHUoY3B1X21zcnMsIDApLmNvbnRyb2xzLAotCQkJCXNpemVvZihzdHJ1Y3Qgb3BfbXNyKSAqIG1vZGVsLT5udW1fY29udHJvbHMpOwotCQl9Ci0KLQl9Ci0Jb25fZWFjaF9jcHUobm1pX3NhdmVfcmVnaXN0ZXJzLCBOVUxMLCAxKTsKLQlvbl9lYWNoX2NwdShubWlfY3B1X3NldHVwLCBOVUxMLCAxKTsKLQlubWlfZW5hYmxlZCA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG5taV9yZXN0b3JlX3JlZ2lzdGVycyhzdHJ1Y3Qgb3BfbXNycyAqbXNycykKLXsKLQl1bnNpZ25lZCBpbnQgY29uc3QgbnJfY3RycyA9IG1vZGVsLT5udW1fY291bnRlcnM7Ci0JdW5zaWduZWQgaW50IGNvbnN0IG5yX2N0cmxzID0gbW9kZWwtPm51bV9jb250cm9sczsKLQlzdHJ1Y3Qgb3BfbXNyICpjb3VudGVycyA9IG1zcnMtPmNvdW50ZXJzOwotCXN0cnVjdCBvcF9tc3IgKmNvbnRyb2xzID0gbXNycy0+Y29udHJvbHM7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfY3RybHM7ICsraSkgewotCQlpZiAoY29udHJvbHNbaV0uYWRkcikgewotCQkJd3Jtc3IoY29udHJvbHNbaV0uYWRkciwKLQkJCQljb250cm9sc1tpXS5zYXZlZC5sb3csCi0JCQkJY29udHJvbHNbaV0uc2F2ZWQuaGlnaCk7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfY3RyczsgKytpKSB7Ci0JCWlmIChjb3VudGVyc1tpXS5hZGRyKSB7Ci0JCQl3cm1zcihjb3VudGVyc1tpXS5hZGRyLAotCQkJCWNvdW50ZXJzW2ldLnNhdmVkLmxvdywKLQkJCQljb3VudGVyc1tpXS5zYXZlZC5oaWdoKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgbm1pX2NwdV9zaHV0ZG93bih2b2lkICpkdW1teSkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCBvcF9tc3JzICptc3JzID0gJl9fZ2V0X2NwdV92YXIoY3B1X21zcnMpOwotCi0JLyogcmVzdG9yaW5nIEFQSUNfTFZUUEMgY2FuIHRyaWdnZXIgYW4gYXBpYyBlcnJvciBiZWNhdXNlIHRoZSBkZWxpdmVyeQotCSAqIG1vZGUgYW5kIHZlY3RvciBuciBjb21iaW5hdGlvbiBjYW4gYmUgaWxsZWdhbC4gVGhhdCdzIGJ5IGRlc2lnbjogb24KLQkgKiBwb3dlciBvbiBhcGljIGx2dCBjb250YWluIGEgemVybyB2ZWN0b3IgbnIgd2hpY2ggYXJlIGxlZ2FsIG9ubHkgZm9yCi0JICogTk1JIGRlbGl2ZXJ5IG1vZGUuIFNvIGluaGliaXQgYXBpYyBlcnIgYmVmb3JlIHJlc3RvcmluZyBsdnRwYwotCSAqLwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgcGVyX2NwdShzYXZlZF9sdnRwYywgY3B1KSk7Ci0JYXBpY193cml0ZShBUElDX0xWVEVSUiwgdik7Ci0Jbm1pX3Jlc3RvcmVfcmVnaXN0ZXJzKG1zcnMpOwotfQotCi1zdGF0aWMgdm9pZCBubWlfc2h1dGRvd24odm9pZCkKLXsKLQlzdHJ1Y3Qgb3BfbXNycyAqbXNyczsKLQotCW5taV9lbmFibGVkID0gMDsKLQlvbl9lYWNoX2NwdShubWlfY3B1X3NodXRkb3duLCBOVUxMLCAxKTsKLQl1bnJlZ2lzdGVyX2RpZV9ub3RpZmllcigmcHJvZmlsZV9leGNlcHRpb25zX25iKTsKLQltc3JzID0gJmdldF9jcHVfdmFyKGNwdV9tc3JzKTsKLQltb2RlbC0+c2h1dGRvd24obXNycyk7Ci0JZnJlZV9tc3JzKCk7Ci0JcHV0X2NwdV92YXIoY3B1X21zcnMpOwotfQotCiBzdGF0aWMgdm9pZCBubWlfY3B1X3N0YXJ0KHZvaWQgKmR1bW15KQogewogCXN0cnVjdCBvcF9tc3JzIGNvbnN0ICptc3JzID0gJl9fZ2V0X2NwdV92YXIoY3B1X21zcnMpOwpAQCAtMjU1LDEzICsxMTUsMzIzIEBACiAJb25fZWFjaF9jcHUobm1pX2NwdV9zdG9wLCBOVUxMLCAxKTsKIH0KIAotc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnIGNvdW50ZXJfY29uZmlnW09QX01BWF9DT1VOVEVSXTsKKyNpZmRlZiBDT05GSUdfT1BST0ZJTEVfRVZFTlRfTVVMVElQTEVYCisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHN3aXRjaF9pbmRleCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGhhc19tdXgodm9pZCkKK3sKKwlyZXR1cm4gISFtb2RlbC0+c3dpdGNoX2N0cmw7Cit9CisKK2lubGluZSBpbnQgb3BfeDg2X3BoeXNfdG9fdmlydChpbnQgcGh5cykKK3sKKwlyZXR1cm4gX19nZXRfY3B1X3Zhcihzd2l0Y2hfaW5kZXgpICsgcGh5czsKK30KKworaW5saW5lIGludCBvcF94ODZfdmlydF90b19waHlzKGludCB2aXJ0KQoreworCXJldHVybiB2aXJ0ICUgbW9kZWwtPm51bV9jb3VudGVyczsKK30KKworc3RhdGljIHZvaWQgbm1pX3NodXRkb3duX211eCh2b2lkKQoreworCWludCBpOworCisJaWYgKCFoYXNfbXV4KCkpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCWtmcmVlKHBlcl9jcHUoY3B1X21zcnMsIGkpLm11bHRpcGxleCk7CisJCXBlcl9jcHUoY3B1X21zcnMsIGkpLm11bHRpcGxleCA9IE5VTEw7CisJCXBlcl9jcHUoc3dpdGNoX2luZGV4LCBpKSA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IG5taV9zZXR1cF9tdXgodm9pZCkKK3sKKwlzaXplX3QgbXVsdGlwbGV4X3NpemUgPQorCQlzaXplb2Yoc3RydWN0IG9wX21zcikgKiBtb2RlbC0+bnVtX3ZpcnRfY291bnRlcnM7CisJaW50IGk7CisKKwlpZiAoIWhhc19tdXgoKSkKKwkJcmV0dXJuIDE7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgeworCQlwZXJfY3B1KGNwdV9tc3JzLCBpKS5tdWx0aXBsZXggPQorCQkJa21hbGxvYyhtdWx0aXBsZXhfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGVyX2NwdShjcHVfbXNycywgaSkubXVsdGlwbGV4KQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG5taV9jcHVfc2V0dXBfbXV4KGludCBjcHUsIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgb3BfbXNyICptdWx0aXBsZXggPSBtc3JzLT5tdWx0aXBsZXg7CisKKwlpZiAoIWhhc19tdXgoKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IG1vZGVsLT5udW1fdmlydF9jb3VudGVyczsgKytpKSB7CisJCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKSB7CisJCQltdWx0aXBsZXhbaV0uc2F2ZWQgPSAtKHU2NCljb3VudGVyX2NvbmZpZ1tpXS5jb3VudDsKKwkJfSBlbHNlIHsKKwkJCW11bHRpcGxleFtpXS5hZGRyICA9IDA7CisJCQltdWx0aXBsZXhbaV0uc2F2ZWQgPSAwOworCQl9CisJfQorCisJcGVyX2NwdShzd2l0Y2hfaW5kZXgsIGNwdSkgPSAwOworfQorCitzdGF0aWMgdm9pZCBubWlfY3B1X3NhdmVfbXB4X3JlZ2lzdGVycyhzdHJ1Y3Qgb3BfbXNycyAqbXNycykKK3sKKwlzdHJ1Y3Qgb3BfbXNyICptdWx0aXBsZXggPSBtc3JzLT5tdWx0aXBsZXg7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW9kZWwtPm51bV9jb3VudGVyczsgKytpKSB7CisJCWludCB2aXJ0ID0gb3BfeDg2X3BoeXNfdG9fdmlydChpKTsKKwkJaWYgKG11bHRpcGxleFt2aXJ0XS5hZGRyKQorCQkJcmRtc3JsKG11bHRpcGxleFt2aXJ0XS5hZGRyLCBtdWx0aXBsZXhbdmlydF0uc2F2ZWQpOworCX0KK30KKworc3RhdGljIHZvaWQgbm1pX2NwdV9yZXN0b3JlX21weF9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKm1zcnMpCit7CisJc3RydWN0IG9wX21zciAqbXVsdGlwbGV4ID0gbXNycy0+bXVsdGlwbGV4OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1vZGVsLT5udW1fY291bnRlcnM7ICsraSkgeworCQlpbnQgdmlydCA9IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaSk7CisJCWlmIChtdWx0aXBsZXhbdmlydF0uYWRkcikKKwkJCXdybXNybChtdWx0aXBsZXhbdmlydF0uYWRkciwgbXVsdGlwbGV4W3ZpcnRdLnNhdmVkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5taV9jcHVfc3dpdGNoKHZvaWQgKmR1bW15KQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IHNpID0gcGVyX2NwdShzd2l0Y2hfaW5kZXgsIGNwdSk7CisJc3RydWN0IG9wX21zcnMgKm1zcnMgPSAmcGVyX2NwdShjcHVfbXNycywgY3B1KTsKKworCW5taV9jcHVfc3RvcChOVUxMKTsKKwlubWlfY3B1X3NhdmVfbXB4X3JlZ2lzdGVycyhtc3JzKTsKKworCS8qIG1vdmUgdG8gbmV4dCBzZXQgKi8KKwlzaSArPSBtb2RlbC0+bnVtX2NvdW50ZXJzOworCWlmICgoc2kgPiBtb2RlbC0+bnVtX3ZpcnRfY291bnRlcnMpIHx8IChjb3VudGVyX2NvbmZpZ1tzaV0uY291bnQgPT0gMCkpCisJCXBlcl9jcHUoc3dpdGNoX2luZGV4LCBjcHUpID0gMDsKKwllbHNlCisJCXBlcl9jcHUoc3dpdGNoX2luZGV4LCBjcHUpID0gc2k7CisKKwltb2RlbC0+c3dpdGNoX2N0cmwobW9kZWwsIG1zcnMpOworCW5taV9jcHVfcmVzdG9yZV9tcHhfcmVnaXN0ZXJzKG1zcnMpOworCisJbm1pX2NwdV9zdGFydChOVUxMKTsKK30KKworCisvKgorICogUXVpY2sgY2hlY2sgdG8gc2VlIGlmIG11bHRpcGxleGluZyBpcyBuZWNlc3NhcnkuCisgKiBUaGUgY2hlY2sgc2hvdWxkIGJlIHN1ZmZpY2llbnQgc2luY2UgY291bnRlcnMgYXJlIHVzZWQKKyAqIGluIG9yZHJlLgorICovCitzdGF0aWMgaW50IG5taV9tdWx0aXBsZXhfb24odm9pZCkKK3sKKwlyZXR1cm4gY291bnRlcl9jb25maWdbbW9kZWwtPm51bV9jb3VudGVyc10uY291bnQgPyAwIDogLUVJTlZBTDsKK30KKworc3RhdGljIGludCBubWlfc3dpdGNoX2V2ZW50KHZvaWQpCit7CisJaWYgKCFoYXNfbXV4KCkpCisJCXJldHVybiAtRU5PU1lTOwkJLyogbm90IGltcGxlbWVudGVkICovCisJaWYgKG5taV9tdWx0aXBsZXhfb24oKSA8IDApCisJCXJldHVybiAtRUlOVkFMOwkJLyogbm90IG5lY2Vzc2FyeSAqLworCisJb25fZWFjaF9jcHUobm1pX2NwdV9zd2l0Y2gsIE5VTEwsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdXhfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKQoreworCWlmIChoYXNfbXV4KCkpCisJCW9wcy0+c3dpdGNoX2V2ZW50cyA9IG5taV9zd2l0Y2hfZXZlbnQ7Cit9CisKK3N0YXRpYyB2b2lkIG11eF9jbG9uZShpbnQgY3B1KQoreworCWlmICghaGFzX211eCgpKQorCQlyZXR1cm47CisKKwltZW1jcHkocGVyX2NwdShjcHVfbXNycywgY3B1KS5tdWx0aXBsZXgsCisJICAgICAgIHBlcl9jcHUoY3B1X21zcnMsIDApLm11bHRpcGxleCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBvcF9tc3IpICogbW9kZWwtPm51bV92aXJ0X2NvdW50ZXJzKTsKK30KKworI2Vsc2UKKworaW5saW5lIGludCBvcF94ODZfcGh5c190b192aXJ0KGludCBwaHlzKSB7IHJldHVybiBwaHlzOyB9CitpbmxpbmUgaW50IG9wX3g4Nl92aXJ0X3RvX3BoeXMoaW50IHZpcnQpIHsgcmV0dXJuIHZpcnQ7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBubWlfc2h1dGRvd25fbXV4KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSBpbnQgbm1pX3NldHVwX211eCh2b2lkKSB7IHJldHVybiAxOyB9CitzdGF0aWMgaW5saW5lIHZvaWQKK25taV9jcHVfc2V0dXBfbXV4KGludCBjcHUsIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgbXV4X2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykgeyB9CitzdGF0aWMgdm9pZCBtdXhfY2xvbmUoaW50IGNwdSkgeyB9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBmcmVlX21zcnModm9pZCkKK3sKKwlpbnQgaTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgeworCQlrZnJlZShwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb3VudGVycyk7CisJCXBlcl9jcHUoY3B1X21zcnMsIGkpLmNvdW50ZXJzID0gTlVMTDsKKwkJa2ZyZWUocGVyX2NwdShjcHVfbXNycywgaSkuY29udHJvbHMpOworCQlwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb250cm9scyA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGFsbG9jYXRlX21zcnModm9pZCkKK3sKKwlzaXplX3QgY29udHJvbHNfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb3BfbXNyKSAqIG1vZGVsLT5udW1fY29udHJvbHM7CisJc2l6ZV90IGNvdW50ZXJzX3NpemUgPSBzaXplb2Yoc3RydWN0IG9wX21zcikgKiBtb2RlbC0+bnVtX2NvdW50ZXJzOworCisJaW50IGk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJcGVyX2NwdShjcHVfbXNycywgaSkuY291bnRlcnMgPSBrbWFsbG9jKGNvdW50ZXJzX3NpemUsCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghcGVyX2NwdShjcHVfbXNycywgaSkuY291bnRlcnMpCisJCQlyZXR1cm4gMDsKKwkJcGVyX2NwdShjcHVfbXNycywgaSkuY29udHJvbHMgPSBrbWFsbG9jKGNvbnRyb2xzX3NpemUsCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghcGVyX2NwdShjcHVfbXNycywgaSkuY29udHJvbHMpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgbm1pX2NwdV9zZXR1cCh2b2lkICpkdW1teSkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBvcF9tc3JzICptc3JzID0gJnBlcl9jcHUoY3B1X21zcnMsIGNwdSk7CisJbm1pX2NwdV9zYXZlX3JlZ2lzdGVycyhtc3JzKTsKKwlzcGluX2xvY2soJm9wcm9maWxlZnNfbG9jayk7CisJbW9kZWwtPnNldHVwX2N0cnMobW9kZWwsIG1zcnMpOworCW5taV9jcHVfc2V0dXBfbXV4KGNwdSwgbXNycyk7CisJc3Bpbl91bmxvY2soJm9wcm9maWxlZnNfbG9jayk7CisJcGVyX2NwdShzYXZlZF9sdnRwYywgY3B1KSA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwcm9maWxlX2V4Y2VwdGlvbnNfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBwcm9maWxlX2V4Y2VwdGlvbnNfbm90aWZ5LAorCS5uZXh0ID0gTlVMTCwKKwkucHJpb3JpdHkgPSAyCit9OworCitzdGF0aWMgaW50IG5taV9zZXR1cCh2b2lkKQoreworCWludCBlcnIgPSAwOworCWludCBjcHU7CisKKwlpZiAoIWFsbG9jYXRlX21zcnMoKSkKKwkJZXJyID0gLUVOT01FTTsKKwllbHNlIGlmICghbm1pX3NldHVwX211eCgpKQorCQllcnIgPSAtRU5PTUVNOworCWVsc2UKKwkJZXJyID0gcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZwcm9maWxlX2V4Y2VwdGlvbnNfbmIpOworCisJaWYgKGVycikgeworCQlmcmVlX21zcnMoKTsKKwkJbm1pX3NodXRkb3duX211eCgpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFdlIG5lZWQgdG8gc2VyaWFsaXplIHNhdmUgYW5kIHNldHVwIGZvciBIVCBiZWNhdXNlIHRoZSBzdWJzZXQKKwkgKiBvZiBtc3JzIGFyZSBkaXN0aW5jdCBmb3Igc2F2ZSBhbmQgc2V0dXAgb3BlcmF0aW9ucworCSAqLworCisJLyogQXNzdW1lIHNhdmVkL3Jlc3RvcmVkIGNvdW50ZXJzIGFyZSB0aGUgc2FtZSBvbiBhbGwgQ1BVcyAqLworCW1vZGVsLT5maWxsX2luX2FkZHJlc3NlcygmcGVyX2NwdShjcHVfbXNycywgMCkpOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJaWYgKCFjcHUpCisJCQljb250aW51ZTsKKworCQltZW1jcHkocGVyX2NwdShjcHVfbXNycywgY3B1KS5jb3VudGVycywKKwkJICAgICAgIHBlcl9jcHUoY3B1X21zcnMsIDApLmNvdW50ZXJzLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBvcF9tc3IpICogbW9kZWwtPm51bV9jb3VudGVycyk7CisKKwkJbWVtY3B5KHBlcl9jcHUoY3B1X21zcnMsIGNwdSkuY29udHJvbHMsCisJCSAgICAgICBwZXJfY3B1KGNwdV9tc3JzLCAwKS5jb250cm9scywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3Qgb3BfbXNyKSAqIG1vZGVsLT5udW1fY29udHJvbHMpOworCisJCW11eF9jbG9uZShjcHUpOworCX0KKwlvbl9lYWNoX2NwdShubWlfY3B1X3NldHVwLCBOVUxMLCAxKTsKKwlubWlfZW5hYmxlZCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5taV9jcHVfcmVzdG9yZV9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKm1zcnMpCit7CisJc3RydWN0IG9wX21zciAqY291bnRlcnMgPSBtc3JzLT5jb3VudGVyczsKKwlzdHJ1Y3Qgb3BfbXNyICpjb250cm9scyA9IG1zcnMtPmNvbnRyb2xzOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1vZGVsLT5udW1fY29udHJvbHM7ICsraSkgeworCQlpZiAoY29udHJvbHNbaV0uYWRkcikKKwkJCXdybXNybChjb250cm9sc1tpXS5hZGRyLCBjb250cm9sc1tpXS5zYXZlZCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG1vZGVsLT5udW1fY291bnRlcnM7ICsraSkgeworCQlpZiAoY291bnRlcnNbaV0uYWRkcikKKwkJCXdybXNybChjb3VudGVyc1tpXS5hZGRyLCBjb3VudGVyc1tpXS5zYXZlZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBubWlfY3B1X3NodXRkb3duKHZvaWQgKmR1bW15KQoreworCXVuc2lnbmVkIGludCB2OworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IG9wX21zcnMgKm1zcnMgPSAmcGVyX2NwdShjcHVfbXNycywgY3B1KTsKKworCS8qIHJlc3RvcmluZyBBUElDX0xWVFBDIGNhbiB0cmlnZ2VyIGFuIGFwaWMgZXJyb3IgYmVjYXVzZSB0aGUgZGVsaXZlcnkKKwkgKiBtb2RlIGFuZCB2ZWN0b3IgbnIgY29tYmluYXRpb24gY2FuIGJlIGlsbGVnYWwuIFRoYXQncyBieSBkZXNpZ246IG9uCisJICogcG93ZXIgb24gYXBpYyBsdnQgY29udGFpbiBhIHplcm8gdmVjdG9yIG5yIHdoaWNoIGFyZSBsZWdhbCBvbmx5IGZvcgorCSAqIE5NSSBkZWxpdmVyeSBtb2RlLiBTbyBpbmhpYml0IGFwaWMgZXJyIGJlZm9yZSByZXN0b3JpbmcgbHZ0cGMKKwkgKi8KKwl2ID0gYXBpY19yZWFkKEFQSUNfTFZURVJSKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIHBlcl9jcHUoc2F2ZWRfbHZ0cGMsIGNwdSkpOworCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHYpOworCW5taV9jcHVfcmVzdG9yZV9yZWdpc3RlcnMobXNycyk7Cit9CisKK3N0YXRpYyB2b2lkIG5taV9zaHV0ZG93bih2b2lkKQoreworCXN0cnVjdCBvcF9tc3JzICptc3JzOworCisJbm1pX2VuYWJsZWQgPSAwOworCW9uX2VhY2hfY3B1KG5taV9jcHVfc2h1dGRvd24sIE5VTEwsIDEpOworCXVucmVnaXN0ZXJfZGllX25vdGlmaWVyKCZwcm9maWxlX2V4Y2VwdGlvbnNfbmIpOworCW5taV9zaHV0ZG93bl9tdXgoKTsKKwltc3JzID0gJmdldF9jcHVfdmFyKGNwdV9tc3JzKTsKKwltb2RlbC0+c2h1dGRvd24obXNycyk7CisJZnJlZV9tc3JzKCk7CisJcHV0X2NwdV92YXIoY3B1X21zcnMpOworfQogCiBzdGF0aWMgaW50IG5taV9jcmVhdGVfZmlsZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGRlbnRyeSAqcm9vdCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBtb2RlbC0+bnVtX2NvdW50ZXJzOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbW9kZWwtPm51bV92aXJ0X2NvdW50ZXJzOyArK2kpIHsKIAkJc3RydWN0IGRlbnRyeSAqZGlyOwogCQljaGFyIGJ1Zls0XTsKIApAQCAtMjcwLDcgKzQ0MCw3IEBACiAJCSAqIE5PVEU6ICBhc3N1bWVzIDE6MSBtYXBwaW5nIGhlcmUgKHRoYXQgY291bnRlcnMgYXJlIG9yZ2FuaXplZAogCQkgKiAgICAgICAgc2VxdWVudGlhbGx5IGluIHRoZWlyIHN0cnVjdCBhc3NpZ25tZW50KS4KIAkJICovCi0JCWlmICh1bmxpa2VseSghYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWlfYml0KGkpKSkKKwkJaWYgKCFhdmFpbF90b19yZXNydl9wZXJmY3RyX25taV9iaXQob3BfeDg2X3ZpcnRfdG9fcGh5cyhpKSkpCiAJCQljb250aW51ZTsKIAogCQlzbnByaW50ZihidWYsICBzaXplb2YoYnVmKSwgIiVkIiwgaSk7CkBAIC00MDIsNiArNTcyLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IHBwcm9faW5pdChjaGFyICoqY3B1X3R5cGUpCiB7CiAJX191OCBjcHVfbW9kZWwgPSBib290X2NwdV9kYXRhLng4Nl9tb2RlbDsKKwlzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgKnNwZWMgPSAmb3BfcHByb19zcGVjOwkvKiBkZWZhdWx0ICovCiAKIAlpZiAoZm9yY2VfYXJjaF9wZXJmbW9uICYmIGNwdV9oYXNfYXJjaF9wZXJmbW9uKQogCQlyZXR1cm4gMDsKQEAgLTQyOCw3ICs1OTksNyBAQAogCQkqY3B1X3R5cGUgPSAiaTM4Ni9jb3JlXzIiOwogCQlicmVhazsKIAljYXNlIDI2OgotCQlhcmNoX3BlcmZtb25fc2V0dXBfY291bnRlcnMoKTsKKwkJc3BlYyA9ICZvcF9hcmNoX3BlcmZtb25fc3BlYzsKIAkJKmNwdV90eXBlID0gImkzODYvY29yZV9pNyI7CiAJCWJyZWFrOwogCWNhc2UgMjg6CkBAIC00MzksMTcgKzYxMCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCW1vZGVsID0gJm9wX3Bwcm9fc3BlYzsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgYXJjaF9wZXJmbW9uX2luaXQoY2hhciAqKmNwdV90eXBlKQotewotCWlmICghY3B1X2hhc19hcmNoX3BlcmZtb24pCi0JCXJldHVybiAwOwotCSpjcHVfdHlwZSA9ICJpMzg2L2FyY2hfcGVyZm1vbiI7Ci0JbW9kZWwgPSAmb3BfYXJjaF9wZXJmbW9uX3NwZWM7Ci0JYXJjaF9wZXJmbW9uX3NldHVwX2NvdW50ZXJzKCk7CisJbW9kZWwgPSBzcGVjOwogCXJldHVybiAxOwogfQogCkBAIC00NzEsMjcgKzYzMiwyNiBAQAogCQkvKiBOZWVkcyB0byBiZSBhdCBsZWFzdCBhbiBBdGhsb24gKG9yIGhhbW1lciBpbiAzMmJpdCBtb2RlKSAqLwogCiAJCXN3aXRjaCAoZmFtaWx5KSB7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVOT0RFVjsKIAkJY2FzZSA2OgotCQkJbW9kZWwgPSAmb3BfYW1kX3NwZWM7CiAJCQljcHVfdHlwZSA9ICJpMzg2L2F0aGxvbiI7CiAJCQlicmVhazsKIAkJY2FzZSAweGY6Ci0JCQltb2RlbCA9ICZvcF9hbWRfc3BlYzsKLQkJCS8qIEFjdHVhbGx5IGl0IGNvdWxkIGJlIGkzODYvaGFtbWVyIHRvbywgYnV0IGdpdmUKLQkJCSB1c2VyIHNwYWNlIGFuIGNvbnNpc3RlbnQgbmFtZS4gKi8KKwkJCS8qCisJCQkgKiBBY3R1YWxseSBpdCBjb3VsZCBiZSBpMzg2L2hhbW1lciB0b28sIGJ1dAorCQkJICogZ2l2ZSB1c2VyIHNwYWNlIGFuIGNvbnNpc3RlbnQgbmFtZS4KKwkJCSAqLwogCQkJY3B1X3R5cGUgPSAieDg2LTY0L2hhbW1lciI7CiAJCQlicmVhazsKIAkJY2FzZSAweDEwOgotCQkJbW9kZWwgPSAmb3BfYW1kX3NwZWM7CiAJCQljcHVfdHlwZSA9ICJ4ODYtNjQvZmFtaWx5MTAiOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgxMToKLQkJCW1vZGVsID0gJm9wX2FtZF9zcGVjOwogCQkJY3B1X3R5cGUgPSAieDg2LTY0L2ZhbWlseTExaCI7CiAJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOwogCQl9CisJCW1vZGVsID0gJm9wX2FtZF9zcGVjOwogCQlicmVhazsKIAogCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKQEAgLTUxMCw4ICs2NzAsMTUgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKCFjcHVfdHlwZSAmJiAhYXJjaF9wZXJmbW9uX2luaXQoJmNwdV90eXBlKSkKKwkJaWYgKGNwdV90eXBlKQorCQkJYnJlYWs7CisKKwkJaWYgKCFjcHVfaGFzX2FyY2hfcGVyZm1vbikKIAkJCXJldHVybiAtRU5PREVWOworCisJCS8qIHVzZSBhcmNoIHBlcmZtb24gYXMgZmFsbGJhY2sgKi8KKwkJY3B1X3R5cGUgPSAiaTM4Ni9hcmNoX3BlcmZtb24iOworCQltb2RlbCA9ICZvcF9hcmNoX3BlcmZtb25fc3BlYzsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNTIyLDE4ICs2ODksMjMgQEAKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJm9wcm9maWxlX2NwdV9uYik7CiAjZW5kaWYKIAkvKiBkZWZhdWx0IHZhbHVlcywgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IG1vZGVsICovCi0Jb3BzLT5jcmVhdGVfZmlsZXMgPSBubWlfY3JlYXRlX2ZpbGVzOwotCW9wcy0+c2V0dXAgPSBubWlfc2V0dXA7Ci0Jb3BzLT5zaHV0ZG93biA9IG5taV9zaHV0ZG93bjsKLQlvcHMtPnN0YXJ0ID0gbm1pX3N0YXJ0OwotCW9wcy0+c3RvcCA9IG5taV9zdG9wOwotCW9wcy0+Y3B1X3R5cGUgPSBjcHVfdHlwZTsKKwlvcHMtPmNyZWF0ZV9maWxlcwk9IG5taV9jcmVhdGVfZmlsZXM7CisJb3BzLT5zZXR1cAkJPSBubWlfc2V0dXA7CisJb3BzLT5zaHV0ZG93bgkJPSBubWlfc2h1dGRvd247CisJb3BzLT5zdGFydAkJPSBubWlfc3RhcnQ7CisJb3BzLT5zdG9wCQk9IG5taV9zdG9wOworCW9wcy0+Y3B1X3R5cGUJCT0gY3B1X3R5cGU7CiAKIAlpZiAobW9kZWwtPmluaXQpCiAJCXJldCA9IG1vZGVsLT5pbml0KG9wcyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCWlmICghbW9kZWwtPm51bV92aXJ0X2NvdW50ZXJzKQorCQltb2RlbC0+bnVtX3ZpcnRfY291bnRlcnMgPSBtb2RlbC0+bnVtX2NvdW50ZXJzOworCisJbXV4X2luaXQob3BzKTsKKwogCWluaXRfc3lzZnMoKTsKIAl1c2luZ19ubWkgPSAxOwogCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiB1c2luZyBOTUkgaW50ZXJydXB0LlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9jb3VudGVyLmggYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9jb3VudGVyLmgKaW5kZXggOTFiNmExMS4uZTI4Mzk4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfY291bnRlci5oCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX2NvdW50ZXIuaApAQCAtMTAsNyArMTAsNyBAQAogI2lmbmRlZiBPUF9DT1VOVEVSX0gKICNkZWZpbmUgT1BfQ09VTlRFUl9ICiAKLSNkZWZpbmUgT1BfTUFYX0NPVU5URVIgOAorI2RlZmluZSBPUF9NQVhfQ09VTlRFUiAzMgogCiAvKiBQZXItcGVyZmN0ciBjb25maWd1cmF0aW9uIGFzIHNldCB2aWEKICAqIG9wcm9maWxlZnMuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCmluZGV4IDhmZGYwNmUuLjM5Njg2YzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCkBAIC05LDEyICs5LDE1IEBACiAgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKICAqIEBhdXRob3IgR3JheWRvbiBIb2FyZQogICogQGF1dGhvciBSb2JlcnQgUmljaHRlciA8cm9iZXJ0LnJpY2h0ZXJAYW1kLmNvbT4KLSAqIEBhdXRob3IgQmFycnkgS2FzaW5kb3JmCisgKiBAYXV0aG9yIEJhcnJ5IEthc2luZG9yZiA8YmFycnkua2FzaW5kb3JmQGFtZC5jb20+CisgKiBAYXV0aG9yIEphc29uIFllaCA8amFzb24ueWVoQGFtZC5jb20+CisgKiBAYXV0aG9yIFN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgpAQCAtMjUsNDMgKzI4LDM2IEBACiAKICNkZWZpbmUgTlVNX0NPVU5URVJTIDQKICNkZWZpbmUgTlVNX0NPTlRST0xTIDQKKyNpZmRlZiBDT05GSUdfT1BST0ZJTEVfRVZFTlRfTVVMVElQTEVYCisjZGVmaW5lIE5VTV9WSVJUX0NPVU5URVJTIDMyCisjZGVmaW5lIE5VTV9WSVJUX0NPTlRST0xTIDMyCisjZWxzZQorI2RlZmluZSBOVU1fVklSVF9DT1VOVEVSUyBOVU1fQ09VTlRFUlMKKyNkZWZpbmUgTlVNX1ZJUlRfQ09OVFJPTFMgTlVNX0NPTlRST0xTCisjZW5kaWYKIAotI2RlZmluZSBDVFJfSVNfUkVTRVJWRUQobXNycywgYykgKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciA/IDEgOiAwKQotI2RlZmluZSBDVFJfUkVBRChsLCBoLCBtc3JzLCBjKSBkbyB7cmRtc3IobXNycy0+Y291bnRlcnNbKGMpXS5hZGRyLCAobCksIChoKSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIENUUl9XUklURShsLCBtc3JzLCBjKSBkbyB7d3Jtc3IobXNycy0+Y291bnRlcnNbKGMpXS5hZGRyLCAtKHVuc2lnbmVkIGludCkobCksIC0xKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgQ1RSX09WRVJGTE9XRUQobikgKCEoKG4pICYgKDFVPDwzMSkpKQorI2RlZmluZSBPUF9FVkVOVF9NQVNLCQkJMHgwRkZGCisjZGVmaW5lIE9QX0NUUl9PVkVSRkxPVwkJCSgxVUxMPDwzMSkKIAotI2RlZmluZSBDVFJMX0lTX1JFU0VSVkVEKG1zcnMsIGMpIChtc3JzLT5jb250cm9sc1soYyldLmFkZHIgPyAxIDogMCkKLSNkZWZpbmUgQ1RSTF9SRUFEKGwsIGgsIG1zcnMsIGMpIGRvIHtyZG1zcihtc3JzLT5jb250cm9sc1soYyldLmFkZHIsIChsKSwgKGgpKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgQ1RSTF9XUklURShsLCBoLCBtc3JzLCBjKSBkbyB7d3Jtc3IobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyLCAobCksIChoKSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIENUUkxfU0VUX0FDVElWRShuKSAobiB8PSAoMTw8MjIpKQotI2RlZmluZSBDVFJMX1NFVF9JTkFDVElWRShuKSAobiAmPSB+KDE8PDIyKSkKLSNkZWZpbmUgQ1RSTF9DTEVBUl9MTyh4KSAoeCAmPSAoMTw8MjEpKQotI2RlZmluZSBDVFJMX0NMRUFSX0hJKHgpICh4ICY9IDB4ZmZmZmZjZjApCi0jZGVmaW5lIENUUkxfU0VUX0VOQUJMRSh2YWwpICh2YWwgfD0gMTw8MjApCi0jZGVmaW5lIENUUkxfU0VUX1VTUih2YWwsIHUpICh2YWwgfD0gKCh1ICYgMSkgPDwgMTYpKQotI2RlZmluZSBDVFJMX1NFVF9LRVJOKHZhbCwgaykgKHZhbCB8PSAoKGsgJiAxKSA8PCAxNykpCi0jZGVmaW5lIENUUkxfU0VUX1VNKHZhbCwgbSkgKHZhbCB8PSAobSA8PCA4KSkKLSNkZWZpbmUgQ1RSTF9TRVRfRVZFTlRfTE9XKHZhbCwgZSkgKHZhbCB8PSAoZSAmIDB4ZmYpKQotI2RlZmluZSBDVFJMX1NFVF9FVkVOVF9ISUdIKHZhbCwgZSkgKHZhbCB8PSAoKGUgPj4gOCkgJiAweGYpKQotI2RlZmluZSBDVFJMX1NFVF9IT1NUX09OTFkodmFsLCBoKSAodmFsIHw9ICgoaCAmIDEpIDw8IDkpKQotI2RlZmluZSBDVFJMX1NFVF9HVUVTVF9PTkxZKHZhbCwgaCkgKHZhbCB8PSAoKGggJiAxKSA8PCA4KSkKKyNkZWZpbmUgTVNSX0FNRF9FVkVOVFNFTF9SRVNFUlZFRAkoKDB4RkZGRkZDRjBVTEw8PDMyKXwoMVVMTDw8MjEpKQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyByZXNldF92YWx1ZVtOVU1fQ09VTlRFUlNdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXRfdmFsdWVbTlVNX1ZJUlRfQ09VTlRFUlNdOwogCiAjaWZkZWYgQ09ORklHX09QUk9GSUxFX0lCUwogCiAvKiBJYnNGZXRjaEN0bCBiaXRzL21hc2tzICovCi0jZGVmaW5lIElCU19GRVRDSF9ISUdIX1ZBTElEX0JJVAkoMVVMIDw8IDE3KQkvKiBiaXQgNDkgKi8KLSNkZWZpbmUgSUJTX0ZFVENIX0hJR0hfRU5BQkxFCQkoMVVMIDw8IDE2KQkvKiBiaXQgNDggKi8KLSNkZWZpbmUgSUJTX0ZFVENIX0xPV19NQVhfQ05UX01BU0sJMHgwMDAwRkZGRlVMCS8qIE1heENudCBtYXNrICovCisjZGVmaW5lIElCU19GRVRDSF9SQU5EX0VOCQkoMVVMTDw8NTcpCisjZGVmaW5lIElCU19GRVRDSF9WQUwJCQkoMVVMTDw8NDkpCisjZGVmaW5lIElCU19GRVRDSF9FTkFCTEUJCSgxVUxMPDw0OCkKKyNkZWZpbmUgSUJTX0ZFVENIX0NOVF9NQVNLCQkweEZGRkYwMDAwVUxMCiAKIC8qSWJzT3BDdGwgYml0cyAqLwotI2RlZmluZSBJQlNfT1BfTE9XX1ZBTElEX0JJVAkJKDFVTEw8PDE4KQkvKiBiaXQgMTggKi8KLSNkZWZpbmUgSUJTX09QX0xPV19FTkFCTEUJCSgxVUxMPDwxNykJLyogYml0IDE3ICovCisjZGVmaW5lIElCU19PUF9DTlRfQ1RMCQkJKDFVTEw8PDE5KQorI2RlZmluZSBJQlNfT1BfVkFMCQkJKDFVTEw8PDE4KQorI2RlZmluZSBJQlNfT1BfRU5BQkxFCQkJKDFVTEw8PDE3KQogCi0jZGVmaW5lIElCU19GRVRDSF9TSVpFCTYKLSNkZWZpbmUgSUJTX09QX1NJWkUJMTIKKyNkZWZpbmUgSUJTX0ZFVENIX1NJWkUJCQk2CisjZGVmaW5lIElCU19PUF9TSVpFCQkJMTIKIAogc3RhdGljIGludCBoYXNfaWJzOwkvKiBBTUQgRmFtaWx5MTBoIGFuZCBsYXRlciAqLwogCkBAIC03OCw2ICs3NCw0NSBAQAogCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19PUFJPRklMRV9FVkVOVF9NVUxUSVBMRVgKKworc3RhdGljIHZvaWQgb3BfbXV4X2ZpbGxfaW5fYWRkcmVzc2VzKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fVklSVF9DT1VOVEVSUzsgaSsrKSB7CisJCWludCBod19jb3VudGVyID0gb3BfeDg2X3ZpcnRfdG9fcGh5cyhpKTsKKwkJaWYgKHJlc2VydmVfcGVyZmN0cl9ubWkoTVNSX0s3X1BFUkZDVFIwICsgaSkpCisJCQltc3JzLT5tdWx0aXBsZXhbaV0uYWRkciA9IE1TUl9LN19QRVJGQ1RSMCArIGh3X2NvdW50ZXI7CisJCWVsc2UKKwkJCW1zcnMtPm11bHRpcGxleFtpXS5hZGRyID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9wX211eF9zd2l0Y2hfY3RybChzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3QgKm1vZGVsLAorCQkJICAgICAgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1NjQgdmFsOworCWludCBpOworCisJLyogZW5hYmxlIGFjdGl2ZSBjb3VudGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgeworCQlpbnQgdmlydCA9IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaSk7CisJCWlmICghY291bnRlcl9jb25maWdbdmlydF0uZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCQlyZG1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKKwkJdmFsICY9IG1vZGVsLT5yZXNlcnZlZDsKKwkJdmFsIHw9IG9wX3g4Nl9nZXRfY3RybChtb2RlbCwgJmNvdW50ZXJfY29uZmlnW3ZpcnRdKTsKKwkJd3Jtc3JsKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIsIHZhbCk7CisJfQorfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3BfbXV4X2ZpbGxfaW5fYWRkcmVzc2VzKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycykgeyB9CisKKyNlbmRpZgorCiAvKiBmdW5jdGlvbnMgZm9yIG9wX2FtZF9zcGVjICovCiAKIHN0YXRpYyB2b2lkIG9wX2FtZF9maWxsX2luX2FkZHJlc3NlcyhzdHJ1Y3Qgb3BfbXNycyAqIGNvbnN0IG1zcnMpCkBAIC05NywxNTAgKzEzMiwxNzQgQEAKIAkJZWxzZQogCQkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IDA7CiAJfQorCisJb3BfbXV4X2ZpbGxfaW5fYWRkcmVzc2VzKG1zcnMpOwogfQogCi0KLXN0YXRpYyB2b2lkIG9wX2FtZF9zZXR1cF9jdHJzKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKK3N0YXRpYyB2b2lkIG9wX2FtZF9zZXR1cF9jdHJzKHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCAqbW9kZWwsCisJCQkgICAgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7Ci0JdW5zaWduZWQgaW50IGxvdywgaGlnaDsKKwl1NjQgdmFsOwogCWludCBpOwogCisJLyogc2V0dXAgcmVzZXRfdmFsdWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1ZJUlRfQ09VTlRFUlM7ICsraSkgeworCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCkKKwkJCXJlc2V0X3ZhbHVlW2ldID0gY291bnRlcl9jb25maWdbaV0uY291bnQ7CisJCWVsc2UKKwkJCXJlc2V0X3ZhbHVlW2ldID0gMDsKKwl9CisKIAkvKiBjbGVhciBhbGwgY291bnRlcnMgKi8KLQlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT05UUk9MUzsgKytpKSB7Ci0JCWlmICh1bmxpa2VseSghQ1RSTF9JU19SRVNFUlZFRChtc3JzLCBpKSkpCisJZm9yIChpID0gMDsgaSA8IE5VTV9DT05UUk9MUzsgKytpKSB7CisJCWlmICh1bmxpa2VseSghbXNycy0+Y29udHJvbHNbaV0uYWRkcikpCiAJCQljb250aW51ZTsKLQkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7Ci0JCUNUUkxfQ0xFQVJfTE8obG93KTsKLQkJQ1RSTF9DTEVBUl9ISShoaWdoKTsKLQkJQ1RSTF9XUklURShsb3csIGhpZ2gsIG1zcnMsIGkpOworCQlyZG1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKKwkJdmFsICY9IG1vZGVsLT5yZXNlcnZlZDsKKwkJd3Jtc3JsKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIsIHZhbCk7CiAJfQogCiAJLyogYXZvaWQgYSBmYWxzZSBkZXRlY3Rpb24gb2YgY3RyIG92ZXJmbG93cyBpbiBOTUkgaGFuZGxlciAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgewotCQlpZiAodW5saWtlbHkoIUNUUl9JU19SRVNFUlZFRChtc3JzLCBpKSkpCisJCWlmICh1bmxpa2VseSghbXNycy0+Y291bnRlcnNbaV0uYWRkcikpCiAJCQljb250aW51ZTsKLQkJQ1RSX1dSSVRFKDEsIG1zcnMsIGkpOworCQl3cm1zcmwobXNycy0+Y291bnRlcnNbaV0uYWRkciwgLTFMTCk7CiAJfQogCiAJLyogZW5hYmxlIGFjdGl2ZSBjb3VudGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgewotCQlpZiAoKGNvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQpICYmIChDVFJfSVNfUkVTRVJWRUQobXNycywgaSkpKSB7Ci0JCQlyZXNldF92YWx1ZVtpXSA9IGNvdW50ZXJfY29uZmlnW2ldLmNvdW50OworCQlpbnQgdmlydCA9IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaSk7CisJCWlmICghY291bnRlcl9jb25maWdbdmlydF0uZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIW1zcnMtPmNvdW50ZXJzW2ldLmFkZHIpCisJCQljb250aW51ZTsKIAotCQkJQ1RSX1dSSVRFKGNvdW50ZXJfY29uZmlnW2ldLmNvdW50LCBtc3JzLCBpKTsKKwkJLyogc2V0dXAgY291bnRlciByZWdpc3RlcnMgKi8KKwkJd3Jtc3JsKG1zcnMtPmNvdW50ZXJzW2ldLmFkZHIsIC0odTY0KXJlc2V0X3ZhbHVlW3ZpcnRdKTsKIAotCQkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7Ci0JCQlDVFJMX0NMRUFSX0xPKGxvdyk7Ci0JCQlDVFJMX0NMRUFSX0hJKGhpZ2gpOwotCQkJQ1RSTF9TRVRfRU5BQkxFKGxvdyk7Ci0JCQlDVFJMX1NFVF9VU1IobG93LCBjb3VudGVyX2NvbmZpZ1tpXS51c2VyKTsKLQkJCUNUUkxfU0VUX0tFUk4obG93LCBjb3VudGVyX2NvbmZpZ1tpXS5rZXJuZWwpOwotCQkJQ1RSTF9TRVRfVU0obG93LCBjb3VudGVyX2NvbmZpZ1tpXS51bml0X21hc2spOwotCQkJQ1RSTF9TRVRfRVZFTlRfTE9XKGxvdywgY291bnRlcl9jb25maWdbaV0uZXZlbnQpOwotCQkJQ1RSTF9TRVRfRVZFTlRfSElHSChoaWdoLCBjb3VudGVyX2NvbmZpZ1tpXS5ldmVudCk7Ci0JCQlDVFJMX1NFVF9IT1NUX09OTFkoaGlnaCwgMCk7Ci0JCQlDVFJMX1NFVF9HVUVTVF9PTkxZKGhpZ2gsIDApOwotCi0JCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXNldF92YWx1ZVtpXSA9IDA7Ci0JCX0KKwkJLyogc2V0dXAgY29udHJvbCByZWdpc3RlcnMgKi8KKwkJcmRtc3JsKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIsIHZhbCk7CisJCXZhbCAmPSBtb2RlbC0+cmVzZXJ2ZWQ7CisJCXZhbCB8PSBvcF94ODZfZ2V0X2N0cmwobW9kZWwsICZjb3VudGVyX2NvbmZpZ1t2aXJ0XSk7CisJCXdybXNybChtc3JzLT5jb250cm9sc1tpXS5hZGRyLCB2YWwpOwogCX0KIH0KIAogI2lmZGVmIENPTkZJR19PUFJPRklMRV9JQlMKIAotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbmxpbmUgdm9pZAogb3BfYW1kX2hhbmRsZV9pYnMoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLAogCQkgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKIHsKLQl1MzIgbG93LCBoaWdoOwotCXU2NCBtc3I7CisJdTY0IHZhbCwgY3RsOwogCXN0cnVjdCBvcF9lbnRyeSBlbnRyeTsKIAogCWlmICghaGFzX2licykKLQkJcmV0dXJuIDE7CisJCXJldHVybjsKIAogCWlmIChpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpIHsKLQkJcmRtc3IoTVNSX0FNRDY0X0lCU0ZFVENIQ1RMLCBsb3csIGhpZ2gpOwotCQlpZiAoaGlnaCAmIElCU19GRVRDSF9ISUdIX1ZBTElEX0JJVCkgewotCQkJcmRtc3JsKE1TUl9BTUQ2NF9JQlNGRVRDSExJTkFELCBtc3IpOwotCQkJb3Byb2ZpbGVfd3JpdGVfcmVzZXJ2ZSgmZW50cnksIHJlZ3MsIG1zciwKKwkJcmRtc3JsKE1TUl9BTUQ2NF9JQlNGRVRDSENUTCwgY3RsKTsKKwkJaWYgKGN0bCAmIElCU19GRVRDSF9WQUwpIHsKKwkJCXJkbXNybChNU1JfQU1ENjRfSUJTRkVUQ0hMSU5BRCwgdmFsKTsKKwkJCW9wcm9maWxlX3dyaXRlX3Jlc2VydmUoJmVudHJ5LCByZWdzLCB2YWwsCiAJCQkJCSAgICAgICBJQlNfRkVUQ0hfQ09ERSwgSUJTX0ZFVENIX1NJWkUpOwotCQkJb3Byb2ZpbGVfYWRkX2RhdGEoJmVudHJ5LCAodTMyKW1zcik7Ci0JCQlvcHJvZmlsZV9hZGRfZGF0YSgmZW50cnksICh1MzIpKG1zciA+PiAzMikpOwotCQkJb3Byb2ZpbGVfYWRkX2RhdGEoJmVudHJ5LCBsb3cpOwotCQkJb3Byb2ZpbGVfYWRkX2RhdGEoJmVudHJ5LCBoaWdoKTsKLQkJCXJkbXNybChNU1JfQU1ENjRfSUJTRkVUQ0hQSFlTQUQsIG1zcik7Ci0JCQlvcHJvZmlsZV9hZGRfZGF0YSgmZW50cnksICh1MzIpbXNyKTsKLQkJCW9wcm9maWxlX2FkZF9kYXRhKCZlbnRyeSwgKHUzMikobXNyID4+IDMyKSk7CisJCQlvcHJvZmlsZV9hZGRfZGF0YTY0KCZlbnRyeSwgdmFsKTsKKwkJCW9wcm9maWxlX2FkZF9kYXRhNjQoJmVudHJ5LCBjdGwpOworCQkJcmRtc3JsKE1TUl9BTUQ2NF9JQlNGRVRDSFBIWVNBRCwgdmFsKTsKKwkJCW9wcm9maWxlX2FkZF9kYXRhNjQoJmVudHJ5LCB2YWwpOwogCQkJb3Byb2ZpbGVfd3JpdGVfY29tbWl0KCZlbnRyeSk7CiAKIAkJCS8qIHJlZW5hYmxlIHRoZSBJUlEgKi8KLQkJCWhpZ2ggJj0gfklCU19GRVRDSF9ISUdIX1ZBTElEX0JJVDsKLQkJCWhpZ2ggfD0gSUJTX0ZFVENIX0hJR0hfRU5BQkxFOwotCQkJbG93ICY9IElCU19GRVRDSF9MT1dfTUFYX0NOVF9NQVNLOwotCQkJd3Jtc3IoTVNSX0FNRDY0X0lCU0ZFVENIQ1RMLCBsb3csIGhpZ2gpOworCQkJY3RsICY9IH4oSUJTX0ZFVENIX1ZBTCB8IElCU19GRVRDSF9DTlRfTUFTSyk7CisJCQljdGwgfD0gSUJTX0ZFVENIX0VOQUJMRTsKKwkJCXdybXNybChNU1JfQU1ENjRfSUJTRkVUQ0hDVEwsIGN0bCk7CiAJCX0KIAl9CiAKIAlpZiAoaWJzX2NvbmZpZy5vcF9lbmFibGVkKSB7Ci0JCXJkbXNyKE1TUl9BTUQ2NF9JQlNPUENUTCwgbG93LCBoaWdoKTsKLQkJaWYgKGxvdyAmIElCU19PUF9MT1dfVkFMSURfQklUKSB7Ci0JCQlyZG1zcmwoTVNSX0FNRDY0X0lCU09QUklQLCBtc3IpOwotCQkJb3Byb2ZpbGVfd3JpdGVfcmVzZXJ2ZSgmZW50cnksIHJlZ3MsIG1zciwKKwkJcmRtc3JsKE1TUl9BTUQ2NF9JQlNPUENUTCwgY3RsKTsKKwkJaWYgKGN0bCAmIElCU19PUF9WQUwpIHsKKwkJCXJkbXNybChNU1JfQU1ENjRfSUJTT1BSSVAsIHZhbCk7CisJCQlvcHJvZmlsZV93cml0ZV9yZXNlcnZlKCZlbnRyeSwgcmVncywgdmFsLAogCQkJCQkgICAgICAgSUJTX09QX0NPREUsIElCU19PUF9TSVpFKTsKLQkJCW9wcm9maWxlX2FkZF9kYXRhKCZlbnRyeSwgKHUzMiltc3IpOwotCQkJb3Byb2ZpbGVfYWRkX2RhdGEoJmVudHJ5LCAodTMyKShtc3IgPj4gMzIpKTsKLQkJCXJkbXNybChNU1JfQU1ENjRfSUJTT1BEQVRBLCBtc3IpOwotCQkJb3Byb2ZpbGVfYWRkX2RhdGEoJmVudHJ5LCAodTMyKW1zcik7Ci0JCQlvcHJvZmlsZV9hZGRfZGF0YSgmZW50cnksICh1MzIpKG1zciA+PiAzMikpOwotCQkJcmRtc3JsKE1TUl9BTUQ2NF9JQlNPUERBVEEyLCBtc3IpOwotCQkJb3Byb2ZpbGVfYWRkX2RhdGEoJmVudHJ5LCAodTMyKW1zcik7Ci0JCQlvcHJvZmlsZV9hZGRfZGF0YSgmZW50cnksICh1MzIpKG1zciA+PiAzMikpOwotCQkJcmRtc3JsKE1TUl9BTUQ2NF9JQlNPUERBVEEzLCBtc3IpOwotCQkJb3Byb2ZpbGVfYWRkX2RhdGEoJmVudHJ5LCAodTMyKW1zcik7Ci0JCQlvcHJvZmlsZV9hZGRfZGF0YSgmZW50cnksICh1MzIpKG1zciA+PiAzMikpOwotCQkJcmRtc3JsKE1TUl9BTUQ2NF9JQlNEQ0xJTkFELCBtc3IpOwotCQkJb3Byb2ZpbGVfYWRkX2RhdGEoJmVudHJ5LCAodTMyKW1zcik7Ci0JCQlvcHJvZmlsZV9hZGRfZGF0YSgmZW50cnksICh1MzIpKG1zciA+PiAzMikpOwotCQkJcmRtc3JsKE1TUl9BTUQ2NF9JQlNEQ1BIWVNBRCwgbXNyKTsKLQkJCW9wcm9maWxlX2FkZF9kYXRhKCZlbnRyeSwgKHUzMiltc3IpOwotCQkJb3Byb2ZpbGVfYWRkX2RhdGEoJmVudHJ5LCAodTMyKShtc3IgPj4gMzIpKTsKKwkJCW9wcm9maWxlX2FkZF9kYXRhNjQoJmVudHJ5LCB2YWwpOworCQkJcmRtc3JsKE1TUl9BTUQ2NF9JQlNPUERBVEEsIHZhbCk7CisJCQlvcHJvZmlsZV9hZGRfZGF0YTY0KCZlbnRyeSwgdmFsKTsKKwkJCXJkbXNybChNU1JfQU1ENjRfSUJTT1BEQVRBMiwgdmFsKTsKKwkJCW9wcm9maWxlX2FkZF9kYXRhNjQoJmVudHJ5LCB2YWwpOworCQkJcmRtc3JsKE1TUl9BTUQ2NF9JQlNPUERBVEEzLCB2YWwpOworCQkJb3Byb2ZpbGVfYWRkX2RhdGE2NCgmZW50cnksIHZhbCk7CisJCQlyZG1zcmwoTVNSX0FNRDY0X0lCU0RDTElOQUQsIHZhbCk7CisJCQlvcHJvZmlsZV9hZGRfZGF0YTY0KCZlbnRyeSwgdmFsKTsKKwkJCXJkbXNybChNU1JfQU1ENjRfSUJTRENQSFlTQUQsIHZhbCk7CisJCQlvcHJvZmlsZV9hZGRfZGF0YTY0KCZlbnRyeSwgdmFsKTsKIAkJCW9wcm9maWxlX3dyaXRlX2NvbW1pdCgmZW50cnkpOwogCiAJCQkvKiByZWVuYWJsZSB0aGUgSVJRICovCi0JCQloaWdoID0gMDsKLQkJCWxvdyAmPSB+SUJTX09QX0xPV19WQUxJRF9CSVQ7Ci0JCQlsb3cgfD0gSUJTX09QX0xPV19FTkFCTEU7Ci0JCQl3cm1zcihNU1JfQU1ENjRfSUJTT1BDVEwsIGxvdywgaGlnaCk7CisJCQljdGwgJj0gfklCU19PUF9WQUwgJiAweEZGRkZGRkZGOworCQkJY3RsIHw9IElCU19PUF9FTkFCTEU7CisJCQl3cm1zcmwoTVNSX0FNRDY0X0lCU09QQ1RMLCBjdGwpOwogCQl9CiAJfQotCi0JcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBvcF9hbWRfc3RhcnRfaWJzKHZvaWQpCit7CisJdTY0IHZhbDsKKwlpZiAoaGFzX2licyAmJiBpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpIHsKKwkJdmFsID0gKGlic19jb25maWcubWF4X2NudF9mZXRjaCA+PiA0KSAmIDB4RkZGRjsKKwkJdmFsIHw9IGlic19jb25maWcucmFuZF9lbiA/IElCU19GRVRDSF9SQU5EX0VOIDogMDsKKwkJdmFsIHw9IElCU19GRVRDSF9FTkFCTEU7CisJCXdybXNybChNU1JfQU1ENjRfSUJTRkVUQ0hDVEwsIHZhbCk7CisJfQorCisJaWYgKGhhc19pYnMgJiYgaWJzX2NvbmZpZy5vcF9lbmFibGVkKSB7CisJCXZhbCA9IChpYnNfY29uZmlnLm1heF9jbnRfb3AgPj4gNCkgJiAweEZGRkY7CisJCXZhbCB8PSBpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzID8gSUJTX09QX0NOVF9DVEwgOiAwOworCQl2YWwgfD0gSUJTX09QX0VOQUJMRTsKKwkJd3Jtc3JsKE1TUl9BTUQ2NF9JQlNPUENUTCwgdmFsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9wX2FtZF9zdG9wX2licyh2b2lkKQoreworCWlmIChoYXNfaWJzICYmIGlic19jb25maWcuZmV0Y2hfZW5hYmxlZCkKKwkJLyogY2xlYXIgbWF4IGNvdW50IGFuZCBlbmFibGUgKi8KKwkJd3Jtc3JsKE1TUl9BTUQ2NF9JQlNGRVRDSENUTCwgMCk7CisKKwlpZiAoaGFzX2licyAmJiBpYnNfY29uZmlnLm9wX2VuYWJsZWQpCisJCS8qIGNsZWFyIG1heCBjb3VudCBhbmQgZW5hYmxlICovCisJCXdybXNybChNU1JfQU1ENjRfSUJTT1BDVEwsIDApOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3BfYW1kX2hhbmRsZV9pYnMoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLAorCQkJCSAgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIG9wX2FtZF9zdGFydF9pYnModm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgb3BfYW1kX3N0b3BfaWJzKHZvaWQpIHsgfQorCiAjZW5kaWYKIAogc3RhdGljIGludCBvcF9hbWRfY2hlY2tfY3RycyhzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCiAJCQkgICAgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKIHsKLQl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOworCXU2NCB2YWw7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7Ci0JCWlmICghcmVzZXRfdmFsdWVbaV0pCisJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7CisJCWludCB2aXJ0ID0gb3BfeDg2X3BoeXNfdG9fdmlydChpKTsKKwkJaWYgKCFyZXNldF92YWx1ZVt2aXJ0XSkKIAkJCWNvbnRpbnVlOwotCQlDVFJfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOwotCQlpZiAoQ1RSX09WRVJGTE9XRUQobG93KSkgewotCQkJb3Byb2ZpbGVfYWRkX3NhbXBsZShyZWdzLCBpKTsKLQkJCUNUUl9XUklURShyZXNldF92YWx1ZVtpXSwgbXNycywgaSk7Ci0JCX0KKwkJcmRtc3JsKG1zcnMtPmNvdW50ZXJzW2ldLmFkZHIsIHZhbCk7CisJCS8qIGJpdCBpcyBjbGVhciBpZiBvdmVyZmxvd2VkOiAqLworCQlpZiAodmFsICYgT1BfQ1RSX09WRVJGTE9XKQorCQkJY29udGludWU7CisJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgdmlydCk7CisJCXdybXNybChtc3JzLT5jb3VudGVyc1tpXS5hZGRyLCAtKHU2NClyZXNldF92YWx1ZVt2aXJ0XSk7CiAJfQogCi0jaWZkZWYgQ09ORklHX09QUk9GSUxFX0lCUwogCW9wX2FtZF9oYW5kbGVfaWJzKHJlZ3MsIG1zcnMpOwotI2VuZGlmCiAKIAkvKiBTZWUgb3BfbW9kZWxfcHByby5jICovCiAJcmV0dXJuIDE7CkBAIC0yNDgsNzkgKzMwNyw1MCBAQAogCiBzdGF0aWMgdm9pZCBvcF9hbWRfc3RhcnQoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQogewotCXVuc2lnbmVkIGludCBsb3csIGhpZ2g7CisJdTY0IHZhbDsKIAlpbnQgaTsKLQlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT1VOVEVSUyA7ICsraSkgewotCQlpZiAocmVzZXRfdmFsdWVbaV0pIHsKLQkJCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOwotCQkJQ1RSTF9TRVRfQUNUSVZFKGxvdyk7Ci0JCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7Ci0JCX0KKworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgeworCQlpZiAoIXJlc2V0X3ZhbHVlW29wX3g4Nl9waHlzX3RvX3ZpcnQoaSldKQorCQkJY29udGludWU7CisJCXJkbXNybChtc3JzLT5jb250cm9sc1tpXS5hZGRyLCB2YWwpOworCQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7CisJCXdybXNybChtc3JzLT5jb250cm9sc1tpXS5hZGRyLCB2YWwpOwogCX0KIAotI2lmZGVmIENPTkZJR19PUFJPRklMRV9JQlMKLQlpZiAoaGFzX2licyAmJiBpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpIHsKLQkJbG93ID0gKGlic19jb25maWcubWF4X2NudF9mZXRjaCA+PiA0KSAmIDB4RkZGRjsKLQkJaGlnaCA9ICgoaWJzX2NvbmZpZy5yYW5kX2VuICYgMHgxKSA8PCAyNSkgLyogYml0IDU3ICovCi0JCQkrIElCU19GRVRDSF9ISUdIX0VOQUJMRTsKLQkJd3Jtc3IoTVNSX0FNRDY0X0lCU0ZFVENIQ1RMLCBsb3csIGhpZ2gpOwotCX0KLQotCWlmIChoYXNfaWJzICYmIGlic19jb25maWcub3BfZW5hYmxlZCkgewotCQlsb3cgPSAoKGlic19jb25maWcubWF4X2NudF9vcCA+PiA0KSAmIDB4RkZGRikKLQkJCSsgKChpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzICYgMHgxKSA8PCAxOSkgLyogYml0IDE5ICovCi0JCQkrIElCU19PUF9MT1dfRU5BQkxFOwotCQloaWdoID0gMDsKLQkJd3Jtc3IoTVNSX0FNRDY0X0lCU09QQ1RMLCBsb3csIGhpZ2gpOwotCX0KLSNlbmRpZgorCW9wX2FtZF9zdGFydF9pYnMoKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBvcF9hbWRfc3RvcChzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7Ci0JdW5zaWduZWQgaW50IGxvdywgaGlnaDsKKwl1NjQgdmFsOwogCWludCBpOwogCiAJLyoKIAkgKiBTdWJ0bGU6IHN0b3Agb24gYWxsIGNvdW50ZXJzIHRvIGF2b2lkIHJhY2Ugd2l0aCBzZXR0aW5nIG91cgogCSAqIHBtIGNhbGxiYWNrCiAJICovCi0JZm9yIChpID0gMCA7IGkgPCBOVU1fQ09VTlRFUlMgOyArK2kpIHsKLQkJaWYgKCFyZXNldF92YWx1ZVtpXSkKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJaWYgKCFyZXNldF92YWx1ZVtvcF94ODZfcGh5c190b192aXJ0KGkpXSkKIAkJCWNvbnRpbnVlOwotCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKLQkJQ1RSTF9TRVRfSU5BQ1RJVkUobG93KTsKLQkJQ1RSTF9XUklURShsb3csIGhpZ2gsIG1zcnMsIGkpOworCQlyZG1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKKwkJdmFsICY9IH5BUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKKwkJd3Jtc3JsKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIsIHZhbCk7CiAJfQogCi0jaWZkZWYgQ09ORklHX09QUk9GSUxFX0lCUwotCWlmIChoYXNfaWJzICYmIGlic19jb25maWcuZmV0Y2hfZW5hYmxlZCkgewotCQkvKiBjbGVhciBtYXggY291bnQgYW5kIGVuYWJsZSAqLwotCQlsb3cgPSAwOwotCQloaWdoID0gMDsKLQkJd3Jtc3IoTVNSX0FNRDY0X0lCU0ZFVENIQ1RMLCBsb3csIGhpZ2gpOwotCX0KLQotCWlmIChoYXNfaWJzICYmIGlic19jb25maWcub3BfZW5hYmxlZCkgewotCQkvKiBjbGVhciBtYXggY291bnQgYW5kIGVuYWJsZSAqLwotCQlsb3cgPSAwOwotCQloaWdoID0gMDsKLQkJd3Jtc3IoTVNSX0FNRDY0X0lCU09QQ1RMLCBsb3csIGhpZ2gpOwotCX0KLSNlbmRpZgorCW9wX2FtZF9zdG9wX2licygpOwogfQogCiBzdGF0aWMgdm9pZCBvcF9hbWRfc2h1dGRvd24oc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQogewogCWludCBpOwogCi0JZm9yIChpID0gMCA7IGkgPCBOVU1fQ09VTlRFUlMgOyArK2kpIHsKLQkJaWYgKENUUl9JU19SRVNFUlZFRChtc3JzLCBpKSkKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJaWYgKG1zcnMtPmNvdW50ZXJzW2ldLmFkZHIpCiAJCQlyZWxlYXNlX3BlcmZjdHJfbm1pKE1TUl9LN19QRVJGQ1RSMCArIGkpOwogCX0KLQlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT05UUk9MUyA7ICsraSkgewotCQlpZiAoQ1RSTF9JU19SRVNFUlZFRChtc3JzLCBpKSkKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xTOyArK2kpIHsKKwkJaWYgKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpCiAJCQlyZWxlYXNlX2V2bnRzZWxfbm1pKE1TUl9LN19FVk5UU0VMMCArIGkpOwogCX0KIH0KQEAgLTQ5MCwxNSArNTIwLDIxIEBACiAKICNlbmRpZiAvKiBDT05GSUdfT1BST0ZJTEVfSUJTICovCiAKLXN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9hbWRfc3BlYyA9IHsKLQkuaW5pdAkJCT0gb3BfYW1kX2luaXQsCi0JLmV4aXQJCQk9IG9wX2FtZF9leGl0LAorc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIG9wX2FtZF9zcGVjID0gewogCS5udW1fY291bnRlcnMJCT0gTlVNX0NPVU5URVJTLAogCS5udW1fY29udHJvbHMJCT0gTlVNX0NPTlRST0xTLAorCS5udW1fdmlydF9jb3VudGVycwk9IE5VTV9WSVJUX0NPVU5URVJTLAorCS5yZXNlcnZlZAkJPSBNU1JfQU1EX0VWRU5UU0VMX1JFU0VSVkVELAorCS5ldmVudF9tYXNrCQk9IE9QX0VWRU5UX01BU0ssCisJLmluaXQJCQk9IG9wX2FtZF9pbml0LAorCS5leGl0CQkJPSBvcF9hbWRfZXhpdCwKIAkuZmlsbF9pbl9hZGRyZXNzZXMJPSAmb3BfYW1kX2ZpbGxfaW5fYWRkcmVzc2VzLAogCS5zZXR1cF9jdHJzCQk9ICZvcF9hbWRfc2V0dXBfY3RycywKIAkuY2hlY2tfY3RycwkJPSAmb3BfYW1kX2NoZWNrX2N0cnMsCiAJLnN0YXJ0CQkJPSAmb3BfYW1kX3N0YXJ0LAogCS5zdG9wCQkJPSAmb3BfYW1kX3N0b3AsCi0JLnNodXRkb3duCQk9ICZvcF9hbWRfc2h1dGRvd24KKwkuc2h1dGRvd24JCT0gJm9wX2FtZF9zaHV0ZG93biwKKyNpZmRlZiBDT05GSUdfT1BST0ZJTEVfRVZFTlRfTVVMVElQTEVYCisJLnN3aXRjaF9jdHJsCQk9ICZvcF9tdXhfc3dpdGNoX2N0cmwsCisjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwppbmRleCA4MTliMTMxLi5hYzZiMzU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMKQEAgLTMyLDYgKzMyLDggQEAKICNkZWZpbmUgTlVNX0NDQ1JTX0hUMiA5CiAjZGVmaW5lIE5VTV9DT05UUk9MU19IVDIgKE5VTV9FU0NSU19IVDIgKyBOVU1fQ0NDUlNfSFQyKQogCisjZGVmaW5lIE9QX0NUUl9PVkVSRkxPVwkJCSgxVUxMPDwzMSkKKwogc3RhdGljIHVuc2lnbmVkIGludCBudW1fY291bnRlcnMgPSBOVU1fQ09VTlRFUlNfTk9OX0hUOwogc3RhdGljIHVuc2lnbmVkIGludCBudW1fY29udHJvbHMgPSBOVU1fQ09OVFJPTFNfTk9OX0hUOwogCkBAIC0zNTAsOCArMzUyLDYgQEAKICNkZWZpbmUgRVNDUl9TRVRfT1NfMShlc2NyLCBvcykgKChlc2NyKSB8PSAoKChvcykgJiAxKSA8PCAxKSkKICNkZWZpbmUgRVNDUl9TRVRfRVZFTlRfU0VMRUNUKGVzY3IsIHNlbCkgKChlc2NyKSB8PSAoKChzZWwpICYgMHgzZikgPDwgMjUpKQogI2RlZmluZSBFU0NSX1NFVF9FVkVOVF9NQVNLKGVzY3IsIG1hc2spICgoZXNjcikgfD0gKCgobWFzaykgJiAweGZmZmYpIDw8IDkpKQotI2RlZmluZSBFU0NSX1JFQUQoZXNjciwgaGlnaCwgZXYsIGkpIGRvIHtyZG1zcihldi0+YmluZGluZ3NbKGkpXS5lc2NyX2FkZHJlc3MsIChlc2NyKSwgKGhpZ2gpKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgRVNDUl9XUklURShlc2NyLCBoaWdoLCBldiwgaSkgZG8ge3dybXNyKGV2LT5iaW5kaW5nc1soaSldLmVzY3JfYWRkcmVzcywgKGVzY3IpLCAoaGlnaCkpOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIENDQ1JfUkVTRVJWRURfQklUUyAweDM4MDMwRkZGCiAjZGVmaW5lIENDQ1JfQ0xFQVIoY2NjcikgKChjY2NyKSAmPSBDQ0NSX1JFU0VSVkVEX0JJVFMpCkBAIC0zNjEsMTcgKzM2MSw5IEBACiAjZGVmaW5lIENDQ1JfU0VUX1BNSV9PVkZfMShjY2NyKSAoKGNjY3IpIHw9ICgxPDwyNykpCiAjZGVmaW5lIENDQ1JfU0VUX0VOQUJMRShjY2NyKSAoKGNjY3IpIHw9ICgxPDwxMikpCiAjZGVmaW5lIENDQ1JfU0VUX0RJU0FCTEUoY2NjcikgKChjY2NyKSAmPSB+KDE8PDEyKSkKLSNkZWZpbmUgQ0NDUl9SRUFEKGxvdywgaGlnaCwgaSkgZG8ge3JkbXNyKHA0X2NvdW50ZXJzWyhpKV0uY2Njcl9hZGRyZXNzLCAobG93KSwgKGhpZ2gpKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgQ0NDUl9XUklURShsb3csIGhpZ2gsIGkpIGRvIHt3cm1zcihwNF9jb3VudGVyc1soaSldLmNjY3JfYWRkcmVzcywgKGxvdyksIChoaWdoKSk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIENDQ1JfT1ZGX1AoY2NjcikgKChjY2NyKSAmICgxVTw8MzEpKQogI2RlZmluZSBDQ0NSX0NMRUFSX09WRihjY2NyKSAoKGNjY3IpICY9ICh+KDFVPDwzMSkpKQogCi0jZGVmaW5lIENUUkxfSVNfUkVTRVJWRUQobXNycywgYykgKG1zcnMtPmNvbnRyb2xzWyhjKV0uYWRkciA/IDEgOiAwKQotI2RlZmluZSBDVFJfSVNfUkVTRVJWRUQobXNycywgYykgKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciA/IDEgOiAwKQotI2RlZmluZSBDVFJfUkVBRChsLCBoLCBpKSBkbyB7cmRtc3IocDRfY291bnRlcnNbKGkpXS5jb3VudGVyX2FkZHJlc3MsIChsKSwgKGgpKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgQ1RSX1dSSVRFKGwsIGkpIGRvIHt3cm1zcihwNF9jb3VudGVyc1soaSldLmNvdW50ZXJfYWRkcmVzcywgLSh1MzIpKGwpLCAtMSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIENUUl9PVkVSRkxPV19QKGN0cikgKCEoKGN0cikgJiAweDgwMDAwMDAwKSkKLQogCiAvKiB0aGlzIGFzc2lnbnMgYSAic3RhZ2dlciIgdG8gdGhlIGN1cnJlbnQgQ1BVLCB3aGljaCBpcyB1c2VkIHRocm91Z2hvdXQKICAgIHRoZSBjb2RlIGluIHRoaXMgbW9kdWxlIGFzIGFuIGV4dHJhIGFycmF5IG9mZnNldCwgdG8gc2VsZWN0IHRoZSAiZXZlbiIKQEAgLTUxNSw3ICs1MDcsNyBAQAogCQlpZiAoZXYtPmJpbmRpbmdzW2ldLnZpcnRfY291bnRlciAmIGNvdW50ZXJfYml0KSB7CiAKIAkJCS8qIG1vZGlmeSBFU0NSICovCi0JCQlFU0NSX1JFQUQoZXNjciwgaGlnaCwgZXYsIGkpOworCQkJcmRtc3IoZXYtPmJpbmRpbmdzW2ldLmVzY3JfYWRkcmVzcywgZXNjciwgaGlnaCk7CiAJCQlFU0NSX0NMRUFSKGVzY3IpOwogCQkJaWYgKHN0YWcgPT0gMCkgewogCQkJCUVTQ1JfU0VUX1VTUl8wKGVzY3IsIGNvdW50ZXJfY29uZmlnW2N0cl0udXNlcik7CkBAIC01MjYsMTAgKzUxOCwxMSBAQAogCQkJfQogCQkJRVNDUl9TRVRfRVZFTlRfU0VMRUNUKGVzY3IsIGV2LT5ldmVudF9zZWxlY3QpOwogCQkJRVNDUl9TRVRfRVZFTlRfTUFTSyhlc2NyLCBjb3VudGVyX2NvbmZpZ1tjdHJdLnVuaXRfbWFzayk7Ci0JCQlFU0NSX1dSSVRFKGVzY3IsIGhpZ2gsIGV2LCBpKTsKKwkJCXdybXNyKGV2LT5iaW5kaW5nc1tpXS5lc2NyX2FkZHJlc3MsIGVzY3IsIGhpZ2gpOwogCiAJCQkvKiBtb2RpZnkgQ0NDUiAqLwotCQkJQ0NDUl9SRUFEKGNjY3IsIGhpZ2gsIFZJUlRfQ1RSKHN0YWcsIGN0cikpOworCQkJcmRtc3IocDRfY291bnRlcnNbVklSVF9DVFIoc3RhZywgY3RyKV0uY2Njcl9hZGRyZXNzLAorCQkJICAgICAgY2NjciwgaGlnaCk7CiAJCQlDQ0NSX0NMRUFSKGNjY3IpOwogCQkJQ0NDUl9TRVRfUkVRVUlSRURfQklUUyhjY2NyKTsKIAkJCUNDQ1JfU0VUX0VTQ1JfU0VMRUNUKGNjY3IsIGV2LT5lc2NyX3NlbGVjdCk7CkBAIC01MzcsNyArNTMwLDggQEAKIAkJCQlDQ0NSX1NFVF9QTUlfT1ZGXzAoY2Njcik7CiAJCQllbHNlCiAJCQkJQ0NDUl9TRVRfUE1JX09WRl8xKGNjY3IpOwotCQkJQ0NDUl9XUklURShjY2NyLCBoaWdoLCBWSVJUX0NUUihzdGFnLCBjdHIpKTsKKwkJCXdybXNyKHA0X2NvdW50ZXJzW1ZJUlRfQ1RSKHN0YWcsIGN0cildLmNjY3JfYWRkcmVzcywKKwkJCSAgICAgIGNjY3IsIGhpZ2gpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtNTQ4LDcgKzU0Miw4IEBACiB9CiAKIAotc3RhdGljIHZvaWQgcDRfc2V0dXBfY3RycyhzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCitzdGF0aWMgdm9pZCBwNF9zZXR1cF9jdHJzKHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCAqbW9kZWwsCisJCQkgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOwpAQCAtNTYzLDggKzU1OCw4IEBACiAJfQogCiAJLyogY2xlYXIgdGhlIGNjY3JzIHdlIHdpbGwgdXNlICovCi0JZm9yIChpID0gMCA7IGkgPCBudW1fY291bnRlcnMgOyBpKyspIHsKLQkJaWYgKHVubGlrZWx5KCFDVFJMX0lTX1JFU0VSVkVEKG1zcnMsIGkpKSkKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyBpKyspIHsKKwkJaWYgKHVubGlrZWx5KCFtc3JzLT5jb250cm9sc1tpXS5hZGRyKSkKIAkJCWNvbnRpbnVlOwogCQlyZG1zcihwNF9jb3VudGVyc1tWSVJUX0NUUihzdGFnLCBpKV0uY2Njcl9hZGRyZXNzLCBsb3csIGhpZ2gpOwogCQlDQ0NSX0NMRUFSKGxvdyk7CkBAIC01NzQsMTcgKzU2OSwxOCBAQAogCiAJLyogY2xlYXIgYWxsIGVzY3JzIChpbmNsdWRpbmcgdGhvc2Ugb3V0c2lkZSBvdXIgY29uY2VybikgKi8KIAlmb3IgKGkgPSBudW1fY291bnRlcnM7IGkgPCBudW1fY29udHJvbHM7IGkrKykgewotCQlpZiAodW5saWtlbHkoIUNUUkxfSVNfUkVTRVJWRUQobXNycywgaSkpKQorCQlpZiAodW5saWtlbHkoIW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpKQogCQkJY29udGludWU7CiAJCXdybXNyKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIsIDAsIDApOwogCX0KIAogCS8qIHNldHVwIGFsbCBjb3VudGVycyAqLwotCWZvciAoaSA9IDAgOyBpIDwgbnVtX2NvdW50ZXJzIDsgKytpKSB7Ci0JCWlmICgoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCkgJiYgKENUUkxfSVNfUkVTRVJWRUQobXNycywgaSkpKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CisJCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkICYmIG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpIHsKIAkJCXJlc2V0X3ZhbHVlW2ldID0gY291bnRlcl9jb25maWdbaV0uY291bnQ7CiAJCQlwbWNfc2V0dXBfb25lX3A0X2NvdW50ZXIoaSk7Ci0JCQlDVFJfV1JJVEUoY291bnRlcl9jb25maWdbaV0uY291bnQsIFZJUlRfQ1RSKHN0YWcsIGkpKTsKKwkJCXdybXNybChwNF9jb3VudGVyc1tWSVJUX0NUUihzdGFnLCBpKV0uY291bnRlcl9hZGRyZXNzLAorCQkJICAgICAgIC0odTY0KWNvdW50ZXJfY29uZmlnW2ldLmNvdW50KTsKIAkJfSBlbHNlIHsKIAkJCXJlc2V0X3ZhbHVlW2ldID0gMDsKIAkJfQpAQCAtNjI0LDE0ICs2MjAsMTYgQEAKIAogCQlyZWFsID0gVklSVF9DVFIoc3RhZywgaSk7CiAKLQkJQ0NDUl9SRUFEKGxvdywgaGlnaCwgcmVhbCk7Ci0JCUNUUl9SRUFEKGN0ciwgaGlnaCwgcmVhbCk7Ci0JCWlmIChDQ0NSX09WRl9QKGxvdykgfHwgQ1RSX09WRVJGTE9XX1AoY3RyKSkgeworCQlyZG1zcihwNF9jb3VudGVyc1tyZWFsXS5jY2NyX2FkZHJlc3MsIGxvdywgaGlnaCk7CisJCXJkbXNyKHA0X2NvdW50ZXJzW3JlYWxdLmNvdW50ZXJfYWRkcmVzcywgY3RyLCBoaWdoKTsKKwkJaWYgKENDQ1JfT1ZGX1AobG93KSB8fCAhKGN0ciAmIE9QX0NUUl9PVkVSRkxPVykpIHsKIAkJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgaSk7Ci0JCQlDVFJfV1JJVEUocmVzZXRfdmFsdWVbaV0sIHJlYWwpOworCQkJd3Jtc3JsKHA0X2NvdW50ZXJzW3JlYWxdLmNvdW50ZXJfYWRkcmVzcywKKwkJCSAgICAgICAtKHU2NClyZXNldF92YWx1ZVtpXSk7CiAJCQlDQ0NSX0NMRUFSX09WRihsb3cpOwotCQkJQ0NDUl9XUklURShsb3csIGhpZ2gsIHJlYWwpOwotCQkJQ1RSX1dSSVRFKHJlc2V0X3ZhbHVlW2ldLCByZWFsKTsKKwkJCXdybXNyKHA0X2NvdW50ZXJzW3JlYWxdLmNjY3JfYWRkcmVzcywgbG93LCBoaWdoKTsKKwkJCXdybXNybChwNF9jb3VudGVyc1tyZWFsXS5jb3VudGVyX2FkZHJlc3MsCisJCQkgICAgICAgLSh1NjQpcmVzZXRfdmFsdWVbaV0pOwogCQl9CiAJfQogCkBAIC02NTMsOSArNjUxLDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKIAkJaWYgKCFyZXNldF92YWx1ZVtpXSkKIAkJCWNvbnRpbnVlOwotCQlDQ0NSX1JFQUQobG93LCBoaWdoLCBWSVJUX0NUUihzdGFnLCBpKSk7CisJCXJkbXNyKHA0X2NvdW50ZXJzW1ZJUlRfQ1RSKHN0YWcsIGkpXS5jY2NyX2FkZHJlc3MsIGxvdywgaGlnaCk7CiAJCUNDQ1JfU0VUX0VOQUJMRShsb3cpOwotCQlDQ0NSX1dSSVRFKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywgaSkpOworCQl3cm1zcihwNF9jb3VudGVyc1tWSVJUX0NUUihzdGFnLCBpKV0uY2Njcl9hZGRyZXNzLCBsb3csIGhpZ2gpOwogCX0KIH0KIApAQCAtNjcwLDkgKzY2OCw5IEBACiAJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CiAJCWlmICghcmVzZXRfdmFsdWVbaV0pCiAJCQljb250aW51ZTsKLQkJQ0NDUl9SRUFEKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywgaSkpOworCQlyZG1zcihwNF9jb3VudGVyc1tWSVJUX0NUUihzdGFnLCBpKV0uY2Njcl9hZGRyZXNzLCBsb3csIGhpZ2gpOwogCQlDQ0NSX1NFVF9ESVNBQkxFKGxvdyk7Ci0JCUNDQ1JfV1JJVEUobG93LCBoaWdoLCBWSVJUX0NUUihzdGFnLCBpKSk7CisJCXdybXNyKHA0X2NvdW50ZXJzW1ZJUlRfQ1RSKHN0YWcsIGkpXS5jY2NyX2FkZHJlc3MsIGxvdywgaGlnaCk7CiAJfQogfQogCkBAIC02ODAsOCArNjc4LDggQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDAgOyBpIDwgbnVtX2NvdW50ZXJzIDsgKytpKSB7Ci0JCWlmIChDVFJfSVNfUkVTRVJWRUQobXNycywgaSkpCisJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CisJCWlmIChtc3JzLT5jb3VudGVyc1tpXS5hZGRyKQogCQkJcmVsZWFzZV9wZXJmY3RyX25taShtc3JzLT5jb3VudGVyc1tpXS5hZGRyKTsKIAl9CiAJLyoKQEAgLTY4OSwxNSArNjg3LDE1IEBACiAJICogY29uanVuY3Rpb24gd2l0aCB0aGUgY291bnRlciByZWdpc3RlcnMgKGhlbmNlIHRoZSBzdGFydGluZyBvZmZzZXQpLgogCSAqIFRoaXMgc2F2ZXMgYSBmZXcgYml0cy4KIAkgKi8KLQlmb3IgKGkgPSBudW1fY291bnRlcnMgOyBpIDwgbnVtX2NvbnRyb2xzIDsgKytpKSB7Ci0JCWlmIChDVFJMX0lTX1JFU0VSVkVEKG1zcnMsIGkpKQorCWZvciAoaSA9IG51bV9jb3VudGVyczsgaSA8IG51bV9jb250cm9sczsgKytpKSB7CisJCWlmIChtc3JzLT5jb250cm9sc1tpXS5hZGRyKQogCQkJcmVsZWFzZV9ldm50c2VsX25taShtc3JzLT5jb250cm9sc1tpXS5hZGRyKTsKIAl9CiB9CiAKIAogI2lmZGVmIENPTkZJR19TTVAKLXN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wNF9odDJfc3BlYyA9IHsKK3N0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBvcF9wNF9odDJfc3BlYyA9IHsKIAkubnVtX2NvdW50ZXJzCQk9IE5VTV9DT1VOVEVSU19IVDIsCiAJLm51bV9jb250cm9scwkJPSBOVU1fQ09OVFJPTFNfSFQyLAogCS5maWxsX2luX2FkZHJlc3Nlcwk9ICZwNF9maWxsX2luX2FkZHJlc3NlcywKQEAgLTcwOSw3ICs3MDcsNyBAQAogfTsKICNlbmRpZgogCi1zdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfcDRfc3BlYyA9IHsKK3N0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBvcF9wNF9zcGVjID0gewogCS5udW1fY291bnRlcnMJCT0gTlVNX0NPVU5URVJTX05PTl9IVCwKIAkubnVtX2NvbnRyb2xzCQk9IE5VTV9DT05UUk9MU19OT05fSFQsCiAJLmZpbGxfaW5fYWRkcmVzc2VzCT0gJnA0X2ZpbGxfaW5fYWRkcmVzc2VzLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCmluZGV4IDRkYTcyMzAuLjQ4OTkyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKQEAgLTEwLDYgKzEwLDcgQEAKICAqIEBhdXRob3IgUGhpbGlwcGUgRWxpZQogICogQGF1dGhvciBHcmF5ZG9uIEhvYXJlCiAgKiBAYXV0aG9yIEFuZGkgS2xlZW4KKyAqIEBhdXRob3IgUm9iZXJ0IFJpY2h0ZXIgPHJvYmVydC5yaWNodGVyQGFtZC5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+CkBAIC0xOCw3ICsxOSw2IEBACiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL25taS5oPgotI2luY2x1ZGUgPGFzbS9wZXJmX2NvdW50ZXIuaD4KIAogI2luY2x1ZGUgIm9wX3g4Nl9tb2RlbC5oIgogI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKQEAgLTI2LDIwICsyNiw3IEBACiBzdGF0aWMgaW50IG51bV9jb3VudGVycyA9IDI7CiBzdGF0aWMgaW50IGNvdW50ZXJfd2lkdGggPSAzMjsKIAotI2RlZmluZSBDVFJfSVNfUkVTRVJWRUQobXNycywgYykgKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciA/IDEgOiAwKQotI2RlZmluZSBDVFJfT1ZFUkZMT1dFRChuKSAoISgobikgJiAoMVVMTDw8KGNvdW50ZXJfd2lkdGgtMSkpKSkKLQotI2RlZmluZSBDVFJMX0lTX1JFU0VSVkVEKG1zcnMsIGMpIChtc3JzLT5jb250cm9sc1soYyldLmFkZHIgPyAxIDogMCkKLSNkZWZpbmUgQ1RSTF9SRUFEKGwsIGgsIG1zcnMsIGMpIGRvIHtyZG1zcigobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyKSwgKGwpLCAoaCkpOyB9IHdoaWxlICgwKQotI2RlZmluZSBDVFJMX1dSSVRFKGwsIGgsIG1zcnMsIGMpIGRvIHt3cm1zcigobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyKSwgKGwpLCAoaCkpOyB9IHdoaWxlICgwKQotI2RlZmluZSBDVFJMX1NFVF9BQ1RJVkUobikgKG4gfD0gKDE8PDIyKSkKLSNkZWZpbmUgQ1RSTF9TRVRfSU5BQ1RJVkUobikgKG4gJj0gfigxPDwyMikpCi0jZGVmaW5lIENUUkxfQ0xFQVIoeCkgKHggJj0gKDE8PDIxKSkKLSNkZWZpbmUgQ1RSTF9TRVRfRU5BQkxFKHZhbCkgKHZhbCB8PSAxPDwyMCkKLSNkZWZpbmUgQ1RSTF9TRVRfVVNSKHZhbCwgdSkgKHZhbCB8PSAoKHUgJiAxKSA8PCAxNikpCi0jZGVmaW5lIENUUkxfU0VUX0tFUk4odmFsLCBrKSAodmFsIHw9ICgoayAmIDEpIDw8IDE3KSkKLSNkZWZpbmUgQ1RSTF9TRVRfVU0odmFsLCBtKSAodmFsIHw9IChtIDw8IDgpKQotI2RlZmluZSBDVFJMX1NFVF9FVkVOVCh2YWwsIGUpICh2YWwgfD0gZSkKKyNkZWZpbmUgTVNSX1BQUk9fRVZFTlRTRUxfUkVTRVJWRUQJKCgweEZGRkZGRkZGVUxMPDwzMil8KDFVTEw8PDIxKSkKIAogc3RhdGljIHU2NCAqcmVzZXRfdmFsdWU7CiAKQEAgLTYzLDkgKzUwLDEwIEBACiB9CiAKIAotc3RhdGljIHZvaWQgcHByb19zZXR1cF9jdHJzKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKK3N0YXRpYyB2b2lkIHBwcm9fc2V0dXBfY3RycyhzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3QgKm1vZGVsLAorCQkJICAgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKIHsKLQl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOworCXU2NCB2YWw7CiAJaW50IGk7CiAKIAlpZiAoIXJlc2V0X3ZhbHVlKSB7CkBAIC05MywzNiArODEsMzAgQEAKIAl9CiAKIAkvKiBjbGVhciBhbGwgY291bnRlcnMgKi8KLQlmb3IgKGkgPSAwIDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7Ci0JCWlmICh1bmxpa2VseSghQ1RSTF9JU19SRVNFUlZFRChtc3JzLCBpKSkpCisJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CisJCWlmICh1bmxpa2VseSghbXNycy0+Y29udHJvbHNbaV0uYWRkcikpCiAJCQljb250aW51ZTsKLQkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7Ci0JCUNUUkxfQ0xFQVIobG93KTsKLQkJQ1RSTF9XUklURShsb3csIGhpZ2gsIG1zcnMsIGkpOworCQlyZG1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKKwkJdmFsICY9IG1vZGVsLT5yZXNlcnZlZDsKKwkJd3Jtc3JsKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIsIHZhbCk7CiAJfQogCiAJLyogYXZvaWQgYSBmYWxzZSBkZXRlY3Rpb24gb2YgY3RyIG92ZXJmbG93cyBpbiBOTUkgaGFuZGxlciAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewotCQlpZiAodW5saWtlbHkoIUNUUl9JU19SRVNFUlZFRChtc3JzLCBpKSkpCisJCWlmICh1bmxpa2VseSghbXNycy0+Y291bnRlcnNbaV0uYWRkcikpCiAJCQljb250aW51ZTsKIAkJd3Jtc3JsKG1zcnMtPmNvdW50ZXJzW2ldLmFkZHIsIC0xTEwpOwogCX0KIAogCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKLQkJaWYgKChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKSAmJiAoQ1RSX0lTX1JFU0VSVkVEKG1zcnMsIGkpKSkgeworCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCAmJiBtc3JzLT5jb3VudGVyc1tpXS5hZGRyKSB7CiAJCQlyZXNldF92YWx1ZVtpXSA9IGNvdW50ZXJfY29uZmlnW2ldLmNvdW50OwotCiAJCQl3cm1zcmwobXNycy0+Y291bnRlcnNbaV0uYWRkciwgLXJlc2V0X3ZhbHVlW2ldKTsKLQotCQkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7Ci0JCQlDVFJMX0NMRUFSKGxvdyk7Ci0JCQlDVFJMX1NFVF9FTkFCTEUobG93KTsKLQkJCUNUUkxfU0VUX1VTUihsb3csIGNvdW50ZXJfY29uZmlnW2ldLnVzZXIpOwotCQkJQ1RSTF9TRVRfS0VSTihsb3csIGNvdW50ZXJfY29uZmlnW2ldLmtlcm5lbCk7Ci0JCQlDVFJMX1NFVF9VTShsb3csIGNvdW50ZXJfY29uZmlnW2ldLnVuaXRfbWFzayk7Ci0JCQlDVFJMX1NFVF9FVkVOVChsb3csIGNvdW50ZXJfY29uZmlnW2ldLmV2ZW50KTsKLQkJCUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCBpKTsKKwkJCXJkbXNybChtc3JzLT5jb250cm9sc1tpXS5hZGRyLCB2YWwpOworCQkJdmFsICY9IG1vZGVsLT5yZXNlcnZlZDsKKwkJCXZhbCB8PSBvcF94ODZfZ2V0X2N0cmwobW9kZWwsICZjb3VudGVyX2NvbmZpZ1tpXSk7CisJCQl3cm1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKIAkJfSBlbHNlIHsKIAkJCXJlc2V0X3ZhbHVlW2ldID0gMDsKIAkJfQpAQCAtMTQzLDE0ICsxMjUsMTQgQEAKIAlpZiAodW5saWtlbHkoIXJlc2V0X3ZhbHVlKSkKIAkJZ290byBvdXQ7CiAKLQlmb3IgKGkgPSAwIDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgKytpKSB7CiAJCWlmICghcmVzZXRfdmFsdWVbaV0pCiAJCQljb250aW51ZTsKIAkJcmRtc3JsKG1zcnMtPmNvdW50ZXJzW2ldLmFkZHIsIHZhbCk7Ci0JCWlmIChDVFJfT1ZFUkZMT1dFRCh2YWwpKSB7Ci0JCQlvcHJvZmlsZV9hZGRfc2FtcGxlKHJlZ3MsIGkpOwotCQkJd3Jtc3JsKG1zcnMtPmNvdW50ZXJzW2ldLmFkZHIsIC1yZXNldF92YWx1ZVtpXSk7Ci0JCX0KKwkJaWYgKHZhbCAmICgxVUxMIDw8IChjb3VudGVyX3dpZHRoIC0gMSkpKQorCQkJY29udGludWU7CisJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgaSk7CisJCXdybXNybChtc3JzLT5jb3VudGVyc1tpXS5hZGRyLCAtcmVzZXRfdmFsdWVbaV0pOwogCX0KIAogb3V0OgpAQCAtMTcxLDE2ICsxNTMsMTYgQEAKIAogc3RhdGljIHZvaWQgcHByb19zdGFydChzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7Ci0JdW5zaWduZWQgaW50IGxvdywgaGlnaDsKKwl1NjQgdmFsOwogCWludCBpOwogCiAJaWYgKCFyZXNldF92YWx1ZSkKIAkJcmV0dXJuOwogCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewogCQlpZiAocmVzZXRfdmFsdWVbaV0pIHsKLQkJCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOwotCQkJQ1RSTF9TRVRfQUNUSVZFKGxvdyk7Ci0JCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7CisJCQlyZG1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKKwkJCXZhbCB8PSBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKKwkJCXdybXNybChtc3JzLT5jb250cm9sc1tpXS5hZGRyLCB2YWwpOwogCQl9CiAJfQogfQpAQCAtMTg4LDcgKzE3MCw3IEBACiAKIHN0YXRpYyB2b2lkIHBwcm9fc3RvcChzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7Ci0JdW5zaWduZWQgaW50IGxvdywgaGlnaDsKKwl1NjQgdmFsOwogCWludCBpOwogCiAJaWYgKCFyZXNldF92YWx1ZSkKQEAgLTE5Niw5ICsxNzgsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewogCQlpZiAoIXJlc2V0X3ZhbHVlW2ldKQogCQkJY29udGludWU7Ci0JCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOwotCQlDVFJMX1NFVF9JTkFDVElWRShsb3cpOwotCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7CisJCXJkbXNybChtc3JzLT5jb250cm9sc1tpXS5hZGRyLCB2YWwpOworCQl2YWwgJj0gfkFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCQl3cm1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKIAl9CiB9CiAKQEAgLTIwNiwxMiArMTg4LDEyIEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwIDsgaSA8IG51bV9jb3VudGVycyA7ICsraSkgewotCQlpZiAoQ1RSX0lTX1JFU0VSVkVEKG1zcnMsIGkpKQorCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgeworCQlpZiAobXNycy0+Y291bnRlcnNbaV0uYWRkcikKIAkJCXJlbGVhc2VfcGVyZmN0cl9ubWkoTVNSX1A2X1BFUkZDVFIwICsgaSk7CiAJfQotCWZvciAoaSA9IDAgOyBpIDwgbnVtX2NvdW50ZXJzIDsgKytpKSB7Ci0JCWlmIChDVFJMX0lTX1JFU0VSVkVEKG1zcnMsIGkpKQorCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgeworCQlpZiAobXNycy0+Y29udHJvbHNbaV0uYWRkcikKIAkJCXJlbGVhc2VfZXZudHNlbF9ubWkoTVNSX1A2X0VWTlRTRUwwICsgaSk7CiAJfQogCWlmIChyZXNldF92YWx1ZSkgewpAQCAtMjIyLDggKzIwNCw5IEBACiAKIAogc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIG9wX3Bwcm9fc3BlYyA9IHsKLQkubnVtX2NvdW50ZXJzCQk9IDIsCS8qIGNhbiBiZSBvdmVycmlkZW4gKi8KLQkubnVtX2NvbnRyb2xzCQk9IDIsCS8qIGRpdG8gKi8KKwkubnVtX2NvdW50ZXJzCQk9IDIsCisJLm51bV9jb250cm9scwkJPSAyLAorCS5yZXNlcnZlZAkJPSBNU1JfUFBST19FVkVOVFNFTF9SRVNFUlZFRCwKIAkuZmlsbF9pbl9hZGRyZXNzZXMJPSAmcHByb19maWxsX2luX2FkZHJlc3NlcywKIAkuc2V0dXBfY3RycwkJPSAmcHByb19zZXR1cF9jdHJzLAogCS5jaGVja19jdHJzCQk9ICZwcHJvX2NoZWNrX2N0cnMsCkBAIC0yNDEsNyArMjI0LDcgQEAKICAqIHRoZSBzcGVjaWZpYyBDUFUuCiAgKi8KIAotdm9pZCBhcmNoX3BlcmZtb25fc2V0dXBfY291bnRlcnModm9pZCkKK3N0YXRpYyB2b2lkIGFyY2hfcGVyZm1vbl9zZXR1cF9jb3VudGVycyh2b2lkKQogewogCXVuaW9uIGNwdWlkMTBfZWF4IGVheDsKIApAQCAtMjU5LDExICsyNDIsMTcgQEAKIAogCW9wX2FyY2hfcGVyZm1vbl9zcGVjLm51bV9jb3VudGVycyA9IG51bV9jb3VudGVyczsKIAlvcF9hcmNoX3BlcmZtb25fc3BlYy5udW1fY29udHJvbHMgPSBudW1fY291bnRlcnM7Ci0Jb3BfcHByb19zcGVjLm51bV9jb3VudGVycyA9IG51bV9jb3VudGVyczsKLQlvcF9wcHJvX3NwZWMubnVtX2NvbnRyb2xzID0gbnVtX2NvdW50ZXJzOworfQorCitzdGF0aWMgaW50IGFyY2hfcGVyZm1vbl9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICppZ25vcmUpCit7CisJYXJjaF9wZXJmbW9uX3NldHVwX2NvdW50ZXJzKCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBvcF9hcmNoX3BlcmZtb25fc3BlYyA9IHsKKwkucmVzZXJ2ZWQJCT0gTVNSX1BQUk9fRVZFTlRTRUxfUkVTRVJWRUQsCisJLmluaXQJCQk9ICZhcmNoX3BlcmZtb25faW5pdCwKIAkvKiBudW1fY291bnRlcnMvbnVtX2NvbnRyb2xzIGZpbGxlZCBpbiBhdCBydW50aW1lICovCiAJLmZpbGxfaW5fYWRkcmVzc2VzCT0gJnBwcm9fZmlsbF9pbl9hZGRyZXNzZXMsCiAJLyogdXNlciBzcGFjZSBkb2VzIHRoZSBjcHVpZCBjaGVjayBmb3IgYXZhaWxhYmxlIGV2ZW50cyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmggYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaAppbmRleCA4MjVlNzkwLi5iODM3NzYxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaAorKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaApAQCAtNiw1MSArNiw2NiBAQAogICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKICAqCiAgKiBAYXV0aG9yIEdyYXlkb24gSG9hcmUKKyAqIEBhdXRob3IgUm9iZXJ0IFJpY2h0ZXIgPHJvYmVydC5yaWNodGVyQGFtZC5jb20+CiAgKi8KIAogI2lmbmRlZiBPUF9YODZfTU9ERUxfSAogI2RlZmluZSBPUF9YODZfTU9ERUxfSAogCi1zdHJ1Y3Qgb3Bfc2F2ZWRfbXNyIHsKLQl1bnNpZ25lZCBpbnQgaGlnaDsKLQl1bnNpZ25lZCBpbnQgbG93OwotfTsKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGVyZl9jb3VudGVyLmg+CiAKIHN0cnVjdCBvcF9tc3IgewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQlzdHJ1Y3Qgb3Bfc2F2ZWRfbXNyIHNhdmVkOworCXVuc2lnbmVkIGxvbmcJYWRkcjsKKwl1NjQJCXNhdmVkOwogfTsKIAogc3RydWN0IG9wX21zcnMgewogCXN0cnVjdCBvcF9tc3IgKmNvdW50ZXJzOwogCXN0cnVjdCBvcF9tc3IgKmNvbnRyb2xzOworCXN0cnVjdCBvcF9tc3IgKm11bHRpcGxleDsKIH07CiAKIHN0cnVjdCBwdF9yZWdzOwogCitzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9uczsKKwogLyogVGhlIG1vZGVsIHZ0YWJsZSBhYnN0cmFjdHMgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4KICAqIHZhcmlvdXMgeDg2IENQVSBtb2RlbHMnIHBlcmZjdHIgc3VwcG9ydC4KICAqLwogc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIHsKLQlpbnQgKCppbml0KShzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKTsKLQl2b2lkICgqZXhpdCkodm9pZCk7Ci0JdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKLQl1bnNpZ25lZCBpbnQgbnVtX2NvbnRyb2xzOwotCXZvaWQgKCpmaWxsX2luX2FkZHJlc3Nlcykoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKTsKLQl2b2lkICgqc2V0dXBfY3Rycykoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKTsKLQlpbnQgKCpjaGVja19jdHJzKShzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCi0JCXN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyk7Ci0Jdm9pZCAoKnN0YXJ0KShzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpOwotCXZvaWQgKCpzdG9wKShzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpOwotCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKTsKKwl1bnNpZ25lZCBpbnQJbnVtX2NvdW50ZXJzOworCXVuc2lnbmVkIGludAludW1fY29udHJvbHM7CisJdW5zaWduZWQgaW50CW51bV92aXJ0X2NvdW50ZXJzOworCXU2NAkJcmVzZXJ2ZWQ7CisJdTE2CQlldmVudF9tYXNrOworCWludAkJKCppbml0KShzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKTsKKwl2b2lkCQkoKmV4aXQpKHZvaWQpOworCXZvaWQJCSgqZmlsbF9pbl9hZGRyZXNzZXMpKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycyk7CisJdm9pZAkJKCpzZXR1cF9jdHJzKShzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3QgKm1vZGVsLAorCQkJCSAgICAgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyk7CisJaW50CQkoKmNoZWNrX2N0cnMpKHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywKKwkJCQkgICAgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpOworCXZvaWQJCSgqc3RhcnQpKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyk7CisJdm9pZAkJKCpzdG9wKShzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpOworCXZvaWQJCSgqc2h1dGRvd24pKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyk7CisjaWZkZWYgQ09ORklHX09QUk9GSUxFX0VWRU5UX01VTFRJUExFWAorCXZvaWQJCSgqc3dpdGNoX2N0cmwpKHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCAqbW9kZWwsCisJCQkJICAgICAgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyk7CisjZW5kaWYKIH07CiAKLWV4dGVybiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgb3BfcHByb19zcGVjOwotZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wNF9zcGVjOwotZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wNF9odDJfc3BlYzsKLWV4dGVybiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfYW1kX3NwZWM7Ci1leHRlcm4gc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIG9wX2FyY2hfcGVyZm1vbl9zcGVjOworc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnOwogCi1leHRlcm4gdm9pZCBhcmNoX3BlcmZtb25fc2V0dXBfY291bnRlcnModm9pZCk7CitleHRlcm4gdTY0IG9wX3g4Nl9nZXRfY3RybChzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3QgKm1vZGVsLAorCQkJICAgc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnICpjb3VudGVyX2NvbmZpZyk7CitleHRlcm4gaW50IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaW50IHBoeXMpOworZXh0ZXJuIGludCBvcF94ODZfdmlydF90b19waHlzKGludCB2aXJ0KTsKKworZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBvcF9wcHJvX3NwZWM7CitleHRlcm4gc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIG9wX3A0X3NwZWM7CitleHRlcm4gc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIG9wX3A0X2h0Ml9zcGVjOworZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBvcF9hbWRfc3BlYzsKK2V4dGVybiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgb3BfYXJjaF9wZXJmbW9uX3NwZWM7CiAKICNlbmRpZiAvKiBPUF9YODZfTU9ERUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2RpcmVjdC5jIGIvYXJjaC94ODYvcGNpL2RpcmVjdC5jCmluZGV4IGJkMTNjM2UuLjM0N2Q4ODIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9kaXJlY3QuYworKysgYi9hcmNoL3g4Ni9wY2kvZGlyZWN0LmMKQEAgLTE5MiwxMyArMTkyLDE0IEBACiBzdGF0aWMgaW50IF9faW5pdCBwY2lfc2FuaXR5X2NoZWNrKHN0cnVjdCBwY2lfcmF3X29wcyAqbykKIHsKIAl1MzIgeCA9IDA7Ci0JaW50IGRldmZuOworCWludCB5ZWFyLCBkZXZmbjsKIAogCWlmIChwY2lfcHJvYmUgJiBQQ0lfTk9fQ0hFQ0tTKQogCQlyZXR1cm4gMTsKIAkvKiBBc3N1bWUgVHlwZSAxIHdvcmtzIGZvciBuZXdlciBzeXN0ZW1zLgogCSAgIFRoaXMgaGFuZGxlcyBtYWNoaW5lcyB0aGF0IGRvbid0IGhhdmUgYW55dGhpbmcgb24gUENJIEJ1cyAwLiAqLwotCWlmIChkbWlfZ2V0X3llYXIoRE1JX0JJT1NfREFURSkgPj0gMjAwMSkKKwlkbWlfZ2V0X2RhdGUoRE1JX0JJT1NfREFURSwgJnllYXIsIE5VTEwsIE5VTEwpOworCWlmICh5ZWFyID49IDIwMDEpCiAJCXJldHVybiAxOwogCiAJZm9yIChkZXZmbiA9IDA7IGRldmZuIDwgMHgxMDA7IGRldmZuKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Bvd2VyL2NwdS5jIGIvYXJjaC94ODYvcG93ZXIvY3B1LmMKaW5kZXggYjNkMjBiOS4uNDE3YzlmNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcG93ZXIvY3B1LmMKKysrIGIvYXJjaC94ODYvcG93ZXIvY3B1LmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCWZpeF9wcm9jZXNzb3JfY29udGV4dCgpOwogCiAJZG9fZnB1X2VuZCgpOwotCW10cnJfYXBfaW5pdCgpOworCW10cnJfYnBfcmVzdG9yZSgpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9PTERfTUNFCiAJbWNoZWNrX2luaXQoJmJvb3RfY3B1X2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL01ha2VmaWxlIGIvYXJjaC94ODYveGVuL01ha2VmaWxlCmluZGV4IDc0MTA2NDAuLjNiYjRmYzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni94ZW4vTWFrZWZpbGUKQEAgLTgsNiArOCw3IEBACiAjIE1ha2Ugc3VyZSBlYXJseSBib290IGhhcyBubyBzdGFja3Byb3RlY3Rvcgogbm9zdGFja3AgOj0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IpCiBDRkxBR1NfZW5saWdodGVuLm8JCTo9ICQobm9zdGFja3ApCitDRkxBR1NfbW11Lm8JCQk6PSAkKG5vc3RhY2twKQogCiBvYmoteQkJOj0gZW5saWdodGVuLm8gc2V0dXAubyBtdWx0aWNhbGxzLm8gbW11Lm8gaXJxLm8gXAogCQkJdGltZS5vIHhlbi1hc20ubyB4ZW4tYXNtXyQoQklUUykubyBcCkBAIC0xNiwzICsxNyw0IEBACiBvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8KIG9iai0kKENPTkZJR19QQVJBVklSVF9TUElOTE9DS1MpKz0gc3BpbmxvY2subwogb2JqLSQoQ09ORklHX1hFTl9ERUJVR19GUykJKz0gZGVidWdmcy5vCisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCBlYjMzYWFhLi4wZGQwYzJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3N0YWNrcHJvdGVjdG9yLmg+CiAKICNpbmNsdWRlICJ4ZW4tb3BzLmgiCiAjaW5jbHVkZSAibW11LmgiCkBAIC0zMzAsMTggKzMzMSwyOCBAQAogCXVuc2lnbmVkIGxvbmcgZnJhbWVzW3BhZ2VzXTsKIAlpbnQgZjsKIAotCS8qIEEgR0RUIGNhbiBiZSB1cCB0byA2NGsgaW4gc2l6ZSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gODE5MgotCSAgIDgtYnl0ZSBlbnRyaWVzLCBvciAxNiA0ayBwYWdlcy4uICovCisJLyoKKwkgKiBBIEdEVCBjYW4gYmUgdXAgdG8gNjRrIGluIHNpemUsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIDgxOTIKKwkgKiA4LWJ5dGUgZW50cmllcywgb3IgMTYgNGsgcGFnZXMuLgorCSAqLwogCiAJQlVHX09OKHNpemUgPiA2NTUzNik7CiAJQlVHX09OKHZhICYgflBBR0VfTUFTSyk7CiAKIAlmb3IgKGYgPSAwOyB2YSA8IGR0ci0+YWRkcmVzcyArIHNpemU7IHZhICs9IFBBR0VfU0laRSwgZisrKSB7CiAJCWludCBsZXZlbDsKLQkJcHRlX3QgKnB0ZXAgPSBsb29rdXBfYWRkcmVzcyh2YSwgJmxldmVsKTsKKwkJcHRlX3QgKnB0ZXA7CiAJCXVuc2lnbmVkIGxvbmcgcGZuLCBtZm47CiAJCXZvaWQgKnZpcnQ7CiAKKwkJLyoKKwkJICogVGhlIEdEVCBpcyBwZXItY3B1IGFuZCBpcyBpbiB0aGUgcGVyY3B1IGRhdGEgYXJlYS4KKwkJICogVGhhdCBjYW4gYmUgdmlydHVhbGx5IG1hcHBlZCwgc28gd2UgbmVlZCB0byBkbyBhCisJCSAqIHBhZ2Utd2FsayB0byBnZXQgdGhlIHVuZGVybHlpbmcgTUZOIGZvciB0aGUKKwkJICogaHlwZXJjYWxsLiAgVGhlIHBhZ2UgY2FuIGFsc28gYmUgaW4gdGhlIGtlcm5lbCdzCisJCSAqIGxpbmVhciByYW5nZSwgc28gd2UgbmVlZCB0byBSTyB0aGF0IG1hcHBpbmcgdG9vLgorCQkgKi8KKwkJcHRlcCA9IGxvb2t1cF9hZGRyZXNzKHZhLCAmbGV2ZWwpOwogCQlCVUdfT04ocHRlcCA9PSBOVUxMKTsKIAogCQlwZm4gPSBwdGVfcGZuKCpwdGVwKTsKQEAgLTM1OCw2ICszNjksNDQgQEAKIAkJQlVHKCk7CiB9CiAKKy8qCisgKiBsb2FkX2dkdCBmb3IgZWFybHkgYm9vdCwgd2hlbiB0aGUgZ2R0IGlzIG9ubHkgbWFwcGVkIG9uY2UKKyAqLworc3RhdGljIF9faW5pdCB2b2lkIHhlbl9sb2FkX2dkdF9ib290KGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqZHRyKQoreworCXVuc2lnbmVkIGxvbmcgdmEgPSBkdHItPmFkZHJlc3M7CisJdW5zaWduZWQgaW50IHNpemUgPSBkdHItPnNpemUgKyAxOworCXVuc2lnbmVkIHBhZ2VzID0gKHNpemUgKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKKwl1bnNpZ25lZCBsb25nIGZyYW1lc1twYWdlc107CisJaW50IGY7CisKKwkvKgorCSAqIEEgR0RUIGNhbiBiZSB1cCB0byA2NGsgaW4gc2l6ZSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gODE5MgorCSAqIDgtYnl0ZSBlbnRyaWVzLCBvciAxNiA0ayBwYWdlcy4uCisJICovCisKKwlCVUdfT04oc2l6ZSA+IDY1NTM2KTsKKwlCVUdfT04odmEgJiB+UEFHRV9NQVNLKTsKKworCWZvciAoZiA9IDA7IHZhIDwgZHRyLT5hZGRyZXNzICsgc2l6ZTsgdmEgKz0gUEFHRV9TSVpFLCBmKyspIHsKKwkJcHRlX3QgcHRlOworCQl1bnNpZ25lZCBsb25nIHBmbiwgbWZuOworCisJCXBmbiA9IHZpcnRfdG9fcGZuKHZhKTsKKwkJbWZuID0gcGZuX3RvX21mbihwZm4pOworCisJCXB0ZSA9IHBmbl9wdGUocGZuLCBQQUdFX0tFUk5FTF9STyk7CisKKwkJaWYgKEhZUEVSVklTT1JfdXBkYXRlX3ZhX21hcHBpbmcoKHVuc2lnbmVkIGxvbmcpdmEsIHB0ZSwgMCkpCisJCQlCVUcoKTsKKworCQlmcmFtZXNbZl0gPSBtZm47CisJfQorCisJaWYgKEhZUEVSVklTT1Jfc2V0X2dkdChmcmFtZXMsIHNpemUgLyBzaXplb2Yoc3RydWN0IGRlc2Nfc3RydWN0KSkpCisJCUJVRygpOworfQorCiBzdGF0aWMgdm9pZCBsb2FkX1RMU19kZXNjcmlwdG9yKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0LAogCQkJCXVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpKQogewpAQCAtNTgxLDYgKzYzMCwyOSBAQAogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKKy8qCisgKiBWZXJzaW9uIG9mIHdyaXRlX2dkdF9lbnRyeSBmb3IgdXNlIGF0IGVhcmx5IGJvb3QtdGltZSBuZWVkZWQgdG8KKyAqIHVwZGF0ZSBhbiBlbnRyeSBhcyBzaW1wbHkgYXMgcG9zc2libGUuCisgKi8KK3N0YXRpYyBfX2luaXQgdm9pZCB4ZW5fd3JpdGVfZ2R0X2VudHJ5X2Jvb3Qoc3RydWN0IGRlc2Nfc3RydWN0ICpkdCwgaW50IGVudHJ5LAorCQkJCQkgICAgY29uc3Qgdm9pZCAqZGVzYywgaW50IHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBERVNDX0xEVDoKKwljYXNlIERFU0NfVFNTOgorCQkvKiBpZ25vcmUgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OiB7CisJCXhtYWRkcl90IG1hZGRyID0gdmlydF90b19tYWNoaW5lKCZkdFtlbnRyeV0pOworCisJCWlmIChIWVBFUlZJU09SX3VwZGF0ZV9kZXNjcmlwdG9yKG1hZGRyLm1hZGRyLCAqKHU2NCAqKWRlc2MpKQorCQkJZHRbZW50cnldID0gKihzdHJ1Y3QgZGVzY19zdHJ1Y3QgKilkZXNjOworCX0KKworCX0KK30KKwogc3RhdGljIHZvaWQgeGVuX2xvYWRfc3AwKHN0cnVjdCB0c3Nfc3RydWN0ICp0c3MsCiAJCQkgc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCkKIHsKQEAgLTcxNCw3ICs3ODYsNyBAQAogCXNldDoKIAkJYmFzZSA9ICgodTY0KWhpZ2ggPDwgMzIpIHwgbG93OwogCQlpZiAoSFlQRVJWSVNPUl9zZXRfc2VnbWVudF9iYXNlKHdoaWNoLCBiYXNlKSAhPSAwKQotCQkJcmV0ID0gLUVGQVVMVDsKKwkJCXJldCA9IC1FSU87CiAJCWJyZWFrOwogI2VuZGlmCiAKQEAgLTk2NSw2ICsxMDM3LDIzIEBACiAJLmVtZXJnZW5jeV9yZXN0YXJ0ID0geGVuX2VtZXJnZW5jeV9yZXN0YXJ0LAogfTsKIAorLyoKKyAqIFNldCB1cCB0aGUgR0RUIGFuZCBzZWdtZW50IHJlZ2lzdGVycyBmb3IgLWZzdGFjay1wcm90ZWN0b3IuICBVbnRpbAorICogd2UgZG8gdGhpcywgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBjYWxsIGFueSBzdGFjay1wcm90ZWN0ZWQKKyAqIGZ1bmN0aW9uLCB3aGljaCBpcyBtb3N0IG9mIHRoZSBrZXJuZWwuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5fc2V0dXBfc3RhY2twcm90ZWN0b3Iodm9pZCkKK3sKKwlwdl9jcHVfb3BzLndyaXRlX2dkdF9lbnRyeSA9IHhlbl93cml0ZV9nZHRfZW50cnlfYm9vdDsKKwlwdl9jcHVfb3BzLmxvYWRfZ2R0ID0geGVuX2xvYWRfZ2R0X2Jvb3Q7CisKKwlzZXR1cF9zdGFja19jYW5hcnlfc2VnbWVudCgwKTsKKwlzd2l0Y2hfdG9fbmV3X2dkdCgwKTsKKworCXB2X2NwdV9vcHMud3JpdGVfZ2R0X2VudHJ5ID0geGVuX3dyaXRlX2dkdF9lbnRyeTsKKwlwdl9jcHVfb3BzLmxvYWRfZ2R0ID0geGVuX2xvYWRfZ2R0OworfQorCiAvKiBGaXJzdCBDIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBYZW4gYm9vdCAqLwogYXNtbGlua2FnZSB2b2lkIF9faW5pdCB4ZW5fc3RhcnRfa2VybmVsKHZvaWQpCiB7CkBAIC05ODMsMTMgKzEwNzIsMjggQEAKIAlwdl9hcGljX29wcyA9IHhlbl9hcGljX29wczsKIAlwdl9tbXVfb3BzID0geGVuX21tdV9vcHM7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0CiAJLyoKLQkgKiBTZXR1cCBwZXJjcHUgc3RhdGUuICBXZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBmb3IgNjQtYml0Ci0JICogYmVjYXVzZSAzMi1iaXQgYWxyZWFkeSBoYXMgJWZzIHNldCBwcm9wZXJseS4KKwkgKiBTZXQgdXAgc29tZSBwYWdldGFibGUgc3RhdGUgYmVmb3JlIHN0YXJ0aW5nIHRvIHNldCBhbnkgcHRlcy4KIAkgKi8KLQlsb2FkX3BlcmNwdV9zZWdtZW50KDApOwotI2VuZGlmCisKKwkvKiBQcmV2ZW50IHVud2FudGVkIGJpdHMgZnJvbSBiZWluZyBzZXQgaW4gUFRFcy4gKi8KKwlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfR0xPQkFMOworCWlmICgheGVuX2luaXRpYWxfZG9tYWluKCkpCisJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH4oX1BBR0VfUFdUIHwgX1BBR0VfUENEKTsKKworCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX0lPTUFQOworCisJeGVuX3NldHVwX2ZlYXR1cmVzKCk7CisKKwkvKiBHZXQgbWZuIGxpc3QgKi8KKwlpZiAoIXhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3BoeXNtYXApKQorCQl4ZW5fYnVpbGRfZHluYW1pY19waHlzX3RvX21hY2hpbmUoKTsKKworCS8qCisJICogU2V0IHVwIGtlcm5lbCBHRFQgYW5kIHNlZ21lbnQgcmVnaXN0ZXJzLCBtYWlubHkgc28gdGhhdAorCSAqIC1mc3RhY2stcHJvdGVjdG9yIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLgorCSAqLworCXhlbl9zZXR1cF9zdGFja3Byb3RlY3RvcigpOwogCiAJeGVuX2luaXRfaXJxX29wcygpOwogCXhlbl9pbml0X2NwdWlkX21hc2soKTsKQEAgLTEwMDEsOCArMTEwNSw2IEBACiAJc2V0X3hlbl9iYXNpY19hcGljX29wcygpOwogI2VuZGlmCiAKLQl4ZW5fc2V0dXBfZmVhdHVyZXMoKTsKLQogCWlmICh4ZW5fZmVhdHVyZShYRU5GRUFUX21tdV9wdF91cGRhdGVfcHJlc2VydmVfYWQpKSB7CiAJCXB2X21tdV9vcHMucHRlcF9tb2RpZnlfcHJvdF9zdGFydCA9IHhlbl9wdGVwX21vZGlmeV9wcm90X3N0YXJ0OwogCQlwdl9tbXVfb3BzLnB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0ID0geGVuX3B0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0OwpAQCAtMTAxOSwxNyArMTEyMSw4IEBACiAKIAl4ZW5fc21wX2luaXQoKTsKIAotCS8qIEdldCBtZm4gbGlzdCAqLwotCWlmICgheGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkpCi0JCXhlbl9idWlsZF9keW5hbWljX3BoeXNfdG9fbWFjaGluZSgpOwotCiAJcGdkID0gKHBnZF90ICopeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2U7CiAKLQkvKiBQcmV2ZW50IHVud2FudGVkIGJpdHMgZnJvbSBiZWluZyBzZXQgaW4gUFRFcy4gKi8KLQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfR0xPQkFMOwotCWlmICgheGVuX2luaXRpYWxfZG9tYWluKCkpCi0JCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH4oX1BBR0VfUFdUIHwgX1BBR0VfUENEKTsKLQogI2lmZGVmIENPTkZJR19YODZfNjQKIAkvKiBXb3JrIG91dCBpZiB3ZSBzdXBwb3J0IE5YICovCiAJY2hlY2tfZWZlcigpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NtcC5jIGIvYXJjaC94ODYveGVuL3NtcC5jCmluZGV4IDQyOTgzNGUuLmZlMDNlZWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zbXAuYworKysgYi9hcmNoL3g4Ni94ZW4vc21wLmMKQEAgLTIzNiw2ICsyMzYsNyBAQAogCWN0eHQtPnVzZXJfcmVncy5zcyA9IF9fS0VSTkVMX0RTOwogI2lmZGVmIENPTkZJR19YODZfMzIKIAljdHh0LT51c2VyX3JlZ3MuZnMgPSBfX0tFUk5FTF9QRVJDUFU7CisJY3R4dC0+dXNlcl9yZWdzLmdzID0gX19LRVJORUxfU1RBQ0tfQ0FOQVJZOwogI2Vsc2UKIAljdHh0LT5nc19iYXNlX2tlcm5lbCA9IHBlcl9jcHVfb2Zmc2V0KGNwdSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zcGlubG9jay5jIGIvYXJjaC94ODYveGVuL3NwaW5sb2NrLmMKaW5kZXggNTYwMTUwNi4uMzZhNTE0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NwaW5sb2NrLmMKKysrIGIvYXJjaC94ODYveGVuL3NwaW5sb2NrLmMKQEAgLTE4Nyw3ICsxODcsNiBAQAogCXN0cnVjdCB4ZW5fc3BpbmxvY2sgKnByZXY7CiAJaW50IGlycSA9IF9fZ2V0X2NwdV92YXIobG9ja19raWNrZXJfaXJxKTsKIAlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTY0IHN0YXJ0OwogCiAJLyogSWYga2lja2VyIGludGVycnVwdHMgbm90IGluaXRpYWxpemVkIHlldCwganVzdCBzcGluICovCkBAIC0xOTksMTYgKzE5OCwxMiBAQAogCS8qIGFubm91bmNlIHdlJ3JlIHNwaW5uaW5nICovCiAJcHJldiA9IHNwaW5uaW5nX2xvY2soeGwpOwogCi0JZmxhZ3MgPSBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKCk7Ci0JaWYgKGlycV9lbmFibGUpIHsKLQkJQUREX1NUQVRTKHRha2VuX3Nsb3dfaXJxZW5hYmxlLCAxKTsKLQkJcmF3X2xvY2FsX2lycV9lbmFibGUoKTsKLQl9Ci0KIAlBRERfU1RBVFModGFrZW5fc2xvdywgMSk7CiAJQUREX1NUQVRTKHRha2VuX3Nsb3dfbmVzdGVkLCBwcmV2ICE9IE5VTEwpOwogCiAJZG8geworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJCS8qIGNsZWFyIHBlbmRpbmcgKi8KIAkJeGVuX2NsZWFyX2lycV9wZW5kaW5nKGlycSk7CiAKQEAgLTIyOCw2ICsyMjMsMTIgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKKwkJZmxhZ3MgPSBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKCk7CisJCWlmIChpcnFfZW5hYmxlKSB7CisJCQlBRERfU1RBVFModGFrZW5fc2xvd19pcnFlbmFibGUsIDEpOworCQkJcmF3X2xvY2FsX2lycV9lbmFibGUoKTsKKwkJfQorCiAJCS8qCiAJCSAqIEJsb2NrIHVudGlsIGlycSBiZWNvbWVzIHBlbmRpbmcuICBJZiB3ZSdyZQogCQkgKiBpbnRlcnJ1cHRlZCBhdCB0aGlzIHBvaW50IChhZnRlciB0aGUgdHJ5bG9jayBidXQKQEAgLTIzOCwxMyArMjM5LDE1IEBACiAJCSAqIHBlbmRpbmcuCiAJCSAqLwogCQl4ZW5fcG9sbF9pcnEoaXJxKTsKKworCQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCiAJCUFERF9TVEFUUyh0YWtlbl9zbG93X3NwdXJpb3VzLCAheGVuX3Rlc3RfaXJxX3BlbmRpbmcoaXJxKSk7CiAJfSB3aGlsZSAoIXhlbl90ZXN0X2lycV9wZW5kaW5nKGlycSkpOyAvKiBjaGVjayBmb3Igc3B1cmlvdXMgd2FrZXVwcyAqLwogCiAJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7CiAKIG91dDoKLQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXVuc3Bpbm5pbmdfbG9jayh4bCwgcHJldik7CiAJc3Bpbl90aW1lX2FjY3VtX2Jsb2NrZWQoc3RhcnQpOwogCkBAIC0zMjMsOCArMzI2LDEzIEBACiAJc21wX3dtYigpOwkJLyogbWFrZSBzdXJlIG5vIHdyaXRlcyBnZXQgbW92ZWQgYWZ0ZXIgdW5sb2NrICovCiAJeGwtPmxvY2sgPSAwOwkJLyogcmVsZWFzZSBsb2NrICovCiAKLQkvKiBtYWtlIHN1cmUgdW5sb2NrIGhhcHBlbnMgYmVmb3JlIGtpY2sgKi8KLQliYXJyaWVyKCk7CisJLyoKKwkgKiBNYWtlIHN1cmUgdW5sb2NrIGhhcHBlbnMgYmVmb3JlIGNoZWNraW5nIGZvciB3YWl0aW5nCisJICogc3Bpbm5lcnMuICBXZSBuZWVkIGEgc3Ryb25nIGJhcnJpZXIgdG8gZW5mb3JjZSB0aGUKKwkgKiB3cml0ZS1yZWFkIG9yZGVyaW5nIHRvIGRpZmZlcmVudCBtZW1vcnkgbG9jYXRpb25zLCBhcyB0aGUKKwkgKiBDUFUgbWFrZXMgbm8gaW1wbGllZCBndWFyYW50ZWVzIGFib3V0IHRoZWlyIG9yZGVyaW5nLgorCSAqLworCW1iKCk7CiAKIAlpZiAodW5saWtlbHkoeGwtPnNwaW5uZXJzKSkKIAkJeGVuX3NwaW5fdW5sb2NrX3Nsb3coeGwpOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBkZDFhN2E0Li5iZWIzYTZiIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjgsNCArNjgsNyBAQAogI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CiAjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCiAKKyNkZWZpbmUgU09fUFJPVE9DT0wJCTM4CisjZGVmaW5lIFNPX0RPTUFJTgkJMzkKKwogI2VuZGlmCS8qIF9YVEVOU0FfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNDFjMTU5Yy4uOTIxYjZmZiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTI4MCwxNSArMjgwLDYgQEAKICAgICAqKC5SZXNldFZlY3Rvci50ZXh0KQogICB9CiAKLSAgLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCi0gIC9ESVNDQVJELyA6Ci0gIHsKLQkqKC5leGl0LmxpdGVyYWwpCi0JRVhJVF9URVhUCi0JRVhJVF9EQVRBCi0gICAgICAgICooLmV4aXRjYWxsLmV4aXQpCi0gIH0KLQogICAueHQubGl0IDogeyAqKC54dC5saXQpIH0KICAgLnh0LnByb3AgOiB7ICooLnh0LnByb3ApIH0KIApAQCAtMzIxLDQgKzMxMiw4IEBACiAgICAgKigueHQubGl0KQogICAgICooLmdudS5saW5rb25jZS5wKikKICAgfQorCisgIC8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLworICBESVNDQVJEUworICAvRElTQ0FSRC8gOiB7ICooLmV4aXQubGl0ZXJhbCkgfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9uZXR3b3JrLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL25ldHdvcmsuYwppbmRleCBlZGFkNDE1Li4yZjBiODZiIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL25ldHdvcmsuYworKysgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL25ldHdvcmsuYwpAQCAtNTQ1LDcgKzU0NSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2Jsb2NrL01ha2VmaWxlIGIvYmxvY2svTWFrZWZpbGUKaW5kZXggNmM1NGVkMC4uYmE3NGNhNiAxMDA2NDQKLS0tIGEvYmxvY2svTWFrZWZpbGUKKysrIGIvYmxvY2svTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiBvYmotJChDT05GSUdfQkxPQ0spIDo9IGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstdGFnLm8gYmxrLXN5c2ZzLm8gXAogCQkJYmxrLWJhcnJpZXIubyBibGstc2V0dGluZ3MubyBibGstaW9jLm8gYmxrLW1hcC5vIFwKIAkJCWJsay1leGVjLm8gYmxrLW1lcmdlLm8gYmxrLXNvZnRpcnEubyBibGstdGltZW91dC5vIFwKLQkJCWlvY3RsLm8gZ2VuaGQubyBzY3NpX2lvY3RsLm8KKwkJCWJsay1pb3BvbGwubyBpb2N0bC5vIGdlbmhkLm8gc2NzaV9pb2N0bC5vCiAKIG9iai0kKENPTkZJR19CTEtfREVWX0JTRykJKz0gYnNnLm8KIG9iai0kKENPTkZJR19JT1NDSEVEX05PT1ApCSs9IG5vb3AtaW9zY2hlZC5vCmRpZmYgLS1naXQgYS9ibG9jay9hcy1pb3NjaGVkLmMgYi9ibG9jay9hcy1pb3NjaGVkLmMKaW5kZXggN2ExMmNmNi4uY2U4YmE1NyAxMDA2NDQKLS0tIGEvYmxvY2svYXMtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2FzLWlvc2NoZWQuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAjZGVmaW5lIFJRX1NUQVRFKHJxKQkoKGVudW0gYXJxX3N0YXRlKShycSktPmVsZXZhdG9yX3ByaXZhdGUyKQogI2RlZmluZSBSUV9TRVRfU1RBVEUocnEsIHN0YXRlKQkoKHJxKS0+ZWxldmF0b3JfcHJpdmF0ZTIgPSAodm9pZCAqKSBzdGF0ZSkKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGlvY19jb3VudCk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgYXNfaW9jX2NvdW50KTsKIHN0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiAqaW9jX2dvbmU7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlvY19nb25lX2xvY2spOwogCkBAIC0xNjEsNyArMTYxLDcgQEAKIHN0YXRpYyB2b2lkIGZyZWVfYXNfaW9fY29udGV4dChzdHJ1Y3QgYXNfaW9fY29udGV4dCAqYWljKQogewogCWtmcmVlKGFpYyk7Ci0JZWx2X2lvY19jb3VudF9kZWMoaW9jX2NvdW50KTsKKwllbHZfaW9jX2NvdW50X2RlYyhhc19pb2NfY291bnQpOwogCWlmIChpb2NfZ29uZSkgewogCQkvKgogCQkgKiBBUyBzY2hlZHVsZXIgaXMgZXhpdGluZywgZ3JhYiBleGl0IGxvY2sgYW5kIGNoZWNrCkBAIC0xNjksNyArMTY5LDcgQEAKIAkJICogY29tcGxldGUgaW9jX2dvbmUgYW5kIHNldCBpdCBiYWNrIHRvIE5VTEwuCiAJCSAqLwogCQlzcGluX2xvY2soJmlvY19nb25lX2xvY2spOwotCQlpZiAoaW9jX2dvbmUgJiYgIWVsdl9pb2NfY291bnRfcmVhZChpb2NfY291bnQpKSB7CisJCWlmIChpb2NfZ29uZSAmJiAhZWx2X2lvY19jb3VudF9yZWFkKGFzX2lvY19jb3VudCkpIHsKIAkJCWNvbXBsZXRlKGlvY19nb25lKTsKIAkJCWlvY19nb25lID0gTlVMTDsKIAkJfQpAQCAtMjExLDcgKzIxMSw3IEBACiAJCXJldC0+c2Vla190b3RhbCA9IDA7CiAJCXJldC0+c2Vla19zYW1wbGVzID0gMDsKIAkJcmV0LT5zZWVrX21lYW4gPSAwOwotCQllbHZfaW9jX2NvdW50X2luYyhpb2NfY291bnQpOworCQllbHZfaW9jX2NvdW50X2luYyhhc19pb2NfY291bnQpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xNTA3LDcgKzE1MDcsNyBAQAogCWlvY19nb25lID0gJmFsbF9nb25lOwogCS8qIGlvY19nb25lJ3MgdXBkYXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgcmVhZGluZyBpb2NfY291bnQgKi8KIAlzbXBfd21iKCk7Ci0JaWYgKGVsdl9pb2NfY291bnRfcmVhZChpb2NfY291bnQpKQorCWlmIChlbHZfaW9jX2NvdW50X3JlYWQoYXNfaW9jX2NvdW50KSkKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmYWxsX2dvbmUpOwogCXN5bmNocm9uaXplX3JjdSgpOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWJhcnJpZXIuYyBiL2Jsb2NrL2Jsay1iYXJyaWVyLmMKaW5kZXggMzAwMjJiNC4uNjU5M2FiMyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWJhcnJpZXIuYworKysgYi9ibG9jay9ibGstYmFycmllci5jCkBAIC0zNDgsNiArMzQ4LDkgQEAKIAkJY2xlYXJfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOwogCX0KIAorCWlmIChiaW8tPmJpX3ByaXZhdGUpCisJCWNvbXBsZXRlKGJpby0+YmlfcHJpdmF0ZSk7CisKIAliaW9fcHV0KGJpbyk7CiB9CiAKQEAgLTM1NywyMSArMzYwLDIwIEBACiAgKiBAc2VjdG9yOglzdGFydCBzZWN0b3IKICAqIEBucl9zZWN0czoJbnVtYmVyIG9mIHNlY3RvcnMgdG8gZGlzY2FyZAogICogQGdmcF9tYXNrOgltZW1vcnkgYWxsb2NhdGlvbiBmbGFncyAoZm9yIGJpb19hbGxvYykKKyAqIEBmbGFnczoJRElTQ0FSRF9GTF8qIGZsYWdzIHRvIGNvbnRyb2wgYmVoYXZpb3VyCiAgKgogICogRGVzY3JpcHRpb246Ci0gKiAgICBJc3N1ZSBhIGRpc2NhcmQgcmVxdWVzdCBmb3IgdGhlIHNlY3RvcnMgaW4gcXVlc3Rpb24uIERvZXMgbm90IHdhaXQuCisgKiAgICBJc3N1ZSBhIGRpc2NhcmQgcmVxdWVzdCBmb3IgdGhlIHNlY3RvcnMgaW4gcXVlc3Rpb24uCiAgKi8KLWludCBibGtkZXZfaXNzdWVfZGlzY2FyZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAotCQkJIHNlY3Rvcl90IHNlY3Rvciwgc2VjdG9yX3QgbnJfc2VjdHMsIGdmcF90IGdmcF9tYXNrKQoraW50IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwKKwkJc2VjdG9yX3QgbnJfc2VjdHMsIGdmcF90IGdmcF9tYXNrLCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7Ci0Jc3RydWN0IGJpbyAqYmlvOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmRldl9nZXRfcXVldWUoYmRldik7CisJaW50IHR5cGUgPSBmbGFncyAmIERJU0NBUkRfRkxfQkFSUklFUiA/CisJCURJU0NBUkRfQkFSUklFUiA6IERJU0NBUkRfTk9CQVJSSUVSOwogCWludCByZXQgPSAwOwogCi0JaWYgKGJkZXYtPmJkX2Rpc2sgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCXEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKIAlpZiAoIXEpCiAJCXJldHVybiAtRU5YSU87CiAKQEAgLTM3OSwxMiArMzgxLDE0IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXdoaWxlIChucl9zZWN0cyAmJiAhcmV0KSB7Ci0JCWJpbyA9IGJpb19hbGxvYyhnZnBfbWFzaywgMCk7CisJCXN0cnVjdCBiaW8gKmJpbyA9IGJpb19hbGxvYyhnZnBfbWFzaywgMCk7CiAJCWlmICghYmlvKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKIAkJYmlvLT5iaV9lbmRfaW8gPSBibGtkZXZfZGlzY2FyZF9lbmRfaW87CiAJCWJpby0+YmlfYmRldiA9IGJkZXY7CisJCWlmIChmbGFncyAmIERJU0NBUkRfRkxfV0FJVCkKKwkJCWJpby0+YmlfcHJpdmF0ZSA9ICZ3YWl0OwogCiAJCWJpby0+Ymlfc2VjdG9yID0gc2VjdG9yOwogCkBAIC0zOTYsMTAgKzQwMCwxMyBAQAogCQkJYmlvLT5iaV9zaXplID0gbnJfc2VjdHMgPDwgOTsKIAkJCW5yX3NlY3RzID0gMDsKIAkJfQotCQliaW9fZ2V0KGJpbyk7Ci0JCXN1Ym1pdF9iaW8oRElTQ0FSRF9CQVJSSUVSLCBiaW8pOwogCi0JCS8qIENoZWNrIGlmIGl0IGZhaWxlZCBpbW1lZGlhdGVseSAqLworCQliaW9fZ2V0KGJpbyk7CisJCXN1Ym1pdF9iaW8odHlwZSwgYmlvKTsKKworCQlpZiAoZmxhZ3MgJiBESVNDQVJEX0ZMX1dBSVQpCisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0KTsKKwogCQlpZiAoYmlvX2ZsYWdnZWQoYmlvLCBCSU9fRU9QTk9UU1VQUCkpCiAJCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJZWxzZSBpZiAoIWJpb19mbGFnZ2VkKGJpbywgQklPX1VQVE9EQVRFKSkKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IGUzMjk5YTcuLjgxMzUyMjggMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtNjksNyArNjksNyBAQAogCQlwYXJ0X3N0YXRfaW5jKGNwdSwgcGFydCwgbWVyZ2VzW3J3XSk7CiAJZWxzZSB7CiAJCXBhcnRfcm91bmRfc3RhdHMoY3B1LCBwYXJ0KTsKLQkJcGFydF9pbmNfaW5fZmxpZ2h0KHBhcnQpOworCQlwYXJ0X2luY19pbl9mbGlnaHQocGFydCwgcncpOwogCX0KIAogCXBhcnRfc3RhdF91bmxvY2soKTsKQEAgLTUwMSw2ICs1MDEsNyBAQAogCQkJKFZNX01BWF9SRUFEQUhFQUQgKiAxMDI0KSAvIFBBR0VfQ0FDSEVfU0laRTsKIAlxLT5iYWNraW5nX2Rldl9pbmZvLnN0YXRlID0gMDsKIAlxLT5iYWNraW5nX2Rldl9pbmZvLmNhcGFiaWxpdGllcyA9IEJESV9DQVBfTUFQX0NPUFk7CisJcS0+YmFja2luZ19kZXZfaW5mby5uYW1lID0gImJsb2NrIjsKIAogCWVyciA9IGJkaV9pbml0KCZxLT5iYWNraW5nX2Rldl9pbmZvKTsKIAlpZiAoZXJyKSB7CkBAIC0xMDMwLDcgKzEwMzEsNyBAQAogCiAJaWYgKHBhcnQtPmluX2ZsaWdodCkgewogCQlfX3BhcnRfc3RhdF9hZGQoY3B1LCBwYXJ0LCB0aW1lX2luX3F1ZXVlLAotCQkJCXBhcnQtPmluX2ZsaWdodCAqIChub3cgLSBwYXJ0LT5zdGFtcCkpOworCQkJCXBhcnRfaW5fZmxpZ2h0KHBhcnQpICogKG5vdyAtIHBhcnQtPnN0YW1wKSk7CiAJCV9fcGFydF9zdGF0X2FkZChjcHUsIHBhcnQsIGlvX3RpY2tzLCAobm93IC0gcGFydC0+c3RhbXApKTsKIAl9CiAJcGFydC0+c3RhbXAgPSBub3c7CkBAIC0xMTExLDMxICsxMTEyLDI3IEBACiAJcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0ZTOwogCiAJLyoKLQkgKiBpbmhlcml0IEZBSUxGQVNUIGZyb20gYmlvIChmb3IgcmVhZC1haGVhZCwgYW5kIGV4cGxpY2l0IEZBSUxGQVNUKQorCSAqIEluaGVyaXQgRkFJTEZBU1QgZnJvbSBiaW8gKGZvciByZWFkLWFoZWFkLCBhbmQgZXhwbGljaXQKKwkgKiBGQUlMRkFTVCkuICBGQUlMRkFTVCBmbGFncyBhcmUgaWRlbnRpY2FsIGZvciByZXEgYW5kIGJpby4KIAkgKi8KLQlpZiAoYmlvX3J3X2FoZWFkKGJpbykpCi0JCXJlcS0+Y21kX2ZsYWdzIHw9IChSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8Ci0JCQkJICAgUkVRX0ZBSUxGQVNUX0RSSVZFUik7Ci0JaWYgKGJpb19mYWlsZmFzdF9kZXYoYmlvKSkKLQkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX0RFVjsKLQlpZiAoYmlvX2ZhaWxmYXN0X3RyYW5zcG9ydChiaW8pKQotCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUOwotCWlmIChiaW9fZmFpbGZhc3RfZHJpdmVyKGJpbykpCi0JCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9EUklWRVI7CisJaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0FIRUFEKSkKKwkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX01BU0s7CisJZWxzZQorCQlyZXEtPmNtZF9mbGFncyB8PSBiaW8tPmJpX3J3ICYgUkVRX0ZBSUxGQVNUX01BU0s7CiAKLQlpZiAodW5saWtlbHkoYmlvX2Rpc2NhcmQoYmlvKSkpIHsKKwlpZiAodW5saWtlbHkoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRElTQ0FSRCkpKSB7CiAJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9ESVNDQVJEOwotCQlpZiAoYmlvX2JhcnJpZXIoYmlvKSkKKwkJaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKQogCQkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX1NPRlRCQVJSSUVSOwogCQlyZXEtPnEtPnByZXBhcmVfZGlzY2FyZF9mbihyZXEtPnEsIHJlcSk7Ci0JfSBlbHNlIGlmICh1bmxpa2VseShiaW9fYmFycmllcihiaW8pKSkKKwl9IGVsc2UgaWYgKHVubGlrZWx5KGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKSkKIAkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0hBUkRCQVJSSUVSOwogCi0JaWYgKGJpb19zeW5jKGJpbykpCisJaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTykpCiAJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9SV19TWU5DOwotCWlmIChiaW9fcndfbWV0YShiaW8pKQorCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19NRVRBKSkKIAkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX1JXX01FVEE7Ci0JaWYgKGJpb19ub2lkbGUoYmlvKSkKKwlpZiAoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfTk9JRExFKSkKIAkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX05PSURMRTsKIAogCXJlcS0+ZXJyb3JzID0gMDsKQEAgLTExNTAsNyArMTE0Nyw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBxdWV1ZV9zaG91bGRfcGx1ZyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKLQlyZXR1cm4gIShibGtfcXVldWVfbm9ucm90KHEpICYmIGJsa19xdWV1ZV90YWdnZWQocSkpOworCXJldHVybiAhKGJsa19xdWV1ZV9ub25yb3QocSkgJiYgYmxrX3F1ZXVlX3F1ZXVpbmcocSkpOwogfQogCiBzdGF0aWMgaW50IF9fbWFrZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCkBAIC0xMTU5LDExICsxMTU2LDEyIEBACiAJaW50IGVsX3JldDsKIAl1bnNpZ25lZCBpbnQgYnl0ZXMgPSBiaW8tPmJpX3NpemU7CiAJY29uc3QgdW5zaWduZWQgc2hvcnQgcHJpbyA9IGJpb19wcmlvKGJpbyk7Ci0JY29uc3QgaW50IHN5bmMgPSBiaW9fc3luYyhiaW8pOwotCWNvbnN0IGludCB1bnBsdWcgPSBiaW9fdW5wbHVnKGJpbyk7CisJY29uc3QgYm9vbCBzeW5jID0gYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfU1lOQ0lPKTsKKwljb25zdCBib29sIHVucGx1ZyA9IGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1VOUExVRyk7CisJY29uc3QgdW5zaWduZWQgaW50IGZmID0gYmlvLT5iaV9ydyAmIFJFUV9GQUlMRkFTVF9NQVNLOwogCWludCByd19mbGFnczsKIAotCWlmIChiaW9fYmFycmllcihiaW8pICYmIGJpb19oYXNfZGF0YShiaW8pICYmCisJaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpICYmIGJpb19oYXNfZGF0YShiaW8pICYmCiAJICAgIChxLT5uZXh0X29yZGVyZWQgPT0gUVVFVUVfT1JERVJFRF9OT05FKSkgewogCQliaW9fZW5kaW8oYmlvLCAtRU9QTk9UU1VQUCk7CiAJCXJldHVybiAwOwpAQCAtMTE3Nyw3ICsxMTc1LDcgQEAKIAogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAKLQlpZiAodW5saWtlbHkoYmlvX2JhcnJpZXIoYmlvKSkgfHwgZWx2X3F1ZXVlX2VtcHR5KHEpKQorCWlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkgfHwgZWx2X3F1ZXVlX2VtcHR5KHEpKQogCQlnb3RvIGdldF9ycTsKIAogCWVsX3JldCA9IGVsdl9tZXJnZShxLCAmcmVxLCBiaW8pOwpAQCAtMTE5MCw2ICsxMTg4LDkgQEAKIAogCQl0cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKHEsIGJpbyk7CiAKKwkJaWYgKChyZXEtPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVF9NQVNLKSAhPSBmZikKKwkJCWJsa19ycV9zZXRfbWl4ZWRfbWVyZ2UocmVxKTsKKwogCQlyZXEtPmJpb3RhaWwtPmJpX25leHQgPSBiaW87CiAJCXJlcS0+YmlvdGFpbCA9IGJpbzsKIAkJcmVxLT5fX2RhdGFfbGVuICs9IGJ5dGVzOwpAQCAtMTIwOSw2ICsxMjEwLDEyIEBACiAKIAkJdHJhY2VfYmxvY2tfYmlvX2Zyb250bWVyZ2UocSwgYmlvKTsKIAorCQlpZiAoKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUX01BU0spICE9IGZmKSB7CisJCQlibGtfcnFfc2V0X21peGVkX21lcmdlKHJlcSk7CisJCQlyZXEtPmNtZF9mbGFncyAmPSB+UkVRX0ZBSUxGQVNUX01BU0s7CisJCQlyZXEtPmNtZF9mbGFncyB8PSBmZjsKKwkJfQorCiAJCWJpby0+YmlfbmV4dCA9IHJlcS0+YmlvOwogCQlyZXEtPmJpbyA9IGJpbzsKIApAQCAtMTQ1NiwxOSArMTQ2MywyMCBAQAogCQlpZiAob2xkX3NlY3RvciAhPSAtMSkKIAkJCXRyYWNlX2Jsb2NrX3JlbWFwKHEsIGJpbywgb2xkX2Rldiwgb2xkX3NlY3Rvcik7CiAKLQkJdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKHEsIGJpbyk7Ci0KIAkJb2xkX3NlY3RvciA9IGJpby0+Ymlfc2VjdG9yOwogCQlvbGRfZGV2ID0gYmlvLT5iaV9iZGV2LT5iZF9kZXY7CiAKIAkJaWYgKGJpb19jaGVja19lb2QoYmlvLCBucl9zZWN0b3JzKSkKIAkJCWdvdG8gZW5kX2lvOwogCi0JCWlmIChiaW9fZGlzY2FyZChiaW8pICYmICFxLT5wcmVwYXJlX2Rpc2NhcmRfZm4pIHsKKwkJaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0RJU0NBUkQpICYmCisJCSAgICAhcS0+cHJlcGFyZV9kaXNjYXJkX2ZuKSB7CiAJCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJCWdvdG8gZW5kX2lvOwogCQl9CiAKKwkJdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKHEsIGJpbyk7CisKIAkJcmV0ID0gcS0+bWFrZV9yZXF1ZXN0X2ZuKHEsIGJpbyk7CiAJfSB3aGlsZSAocmV0KTsKIApAQCAtMTY1Myw2ICsxNjYxLDUwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChibGtfaW5zZXJ0X2Nsb25lZF9yZXF1ZXN0KTsKIAorLyoqCisgKiBibGtfcnFfZXJyX2J5dGVzIC0gZGV0ZXJtaW5lIG51bWJlciBvZiBieXRlcyB0aWxsIHRoZSBuZXh0IGZhaWx1cmUgYm91bmRhcnkKKyAqIEBycTogcmVxdWVzdCB0byBleGFtaW5lCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgQSByZXF1ZXN0IGNvdWxkIGJlIG1lcmdlIG9mIElPcyB3aGljaCByZXF1aXJlIGRpZmZlcmVudCBmYWlsdXJlCisgKiAgICAgaGFuZGxpbmcuICBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBieXRlcyB3aGljaAorICogICAgIGNhbiBiZSBmYWlsZWQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZXF1ZXN0IHdpdGhvdXQKKyAqICAgICBjcm9zc2luZyBpbnRvIGFyZWEgd2hpY2ggbmVlZCB0byBiZSByZXRyaWVkIGZ1cnRoZXIuCisgKgorICogUmV0dXJuOgorICogICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZmFpbC4KKyAqCisgKiBDb250ZXh0OgorICogICAgIHF1ZXVlX2xvY2sgbXVzdCBiZSBoZWxkLgorICovCit1bnNpZ25lZCBpbnQgYmxrX3JxX2Vycl9ieXRlcyhjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJdW5zaWduZWQgaW50IGZmID0gcnEtPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVF9NQVNLOworCXVuc2lnbmVkIGludCBieXRlcyA9IDA7CisJc3RydWN0IGJpbyAqYmlvOworCisJaWYgKCEocnEtPmNtZF9mbGFncyAmIFJFUV9NSVhFRF9NRVJHRSkpCisJCXJldHVybiBibGtfcnFfYnl0ZXMocnEpOworCisJLyoKKwkgKiBDdXJyZW50bHkgdGhlIG9ubHkgJ21peGluZycgd2hpY2ggY2FuIGhhcHBlbiBpcyBiZXR3ZWVuCisJICogZGlmZmVyZW50IGZhc3RmYWlsIHR5cGVzLiAgV2UgY2FuIHNhZmVseSBmYWlsIHBvcnRpb25zCisJICogd2hpY2ggaGF2ZSBhbGwgdGhlIGZhaWxmYXN0IGJpdHMgdGhhdCB0aGUgZmlyc3Qgb25lIGhhcyAtCisJICogdGhlIG9uZXMgd2hpY2ggYXJlIGF0IGxlYXN0IGFzIGVhZ2VyIHRvIGZhaWwgYXMgdGhlIGZpcnN0CisJICogb25lLgorCSAqLworCWZvciAoYmlvID0gcnEtPmJpbzsgYmlvOyBiaW8gPSBiaW8tPmJpX25leHQpIHsKKwkJaWYgKChiaW8tPmJpX3J3ICYgZmYpICE9IGZmKQorCQkJYnJlYWs7CisJCWJ5dGVzICs9IGJpby0+Ymlfc2l6ZTsKKwl9CisKKwkvKiB0aGlzIGNvdWxkIGxlYWQgdG8gaW5maW5pdGUgbG9vcCAqLworCUJVR19PTihibGtfcnFfYnl0ZXMocnEpICYmICFieXRlcyk7CisJcmV0dXJuIGJ5dGVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3JxX2Vycl9ieXRlcyk7CisKIHN0YXRpYyB2b2lkIGJsa19hY2NvdW50X2lvX2NvbXBsZXRpb24oc3RydWN0IHJlcXVlc3QgKnJlcSwgdW5zaWduZWQgaW50IGJ5dGVzKQogewogCWlmIChibGtfZG9faW9fc3RhdChyZXEpKSB7CkBAIC0xNjg2LDcgKzE3MzgsNyBAQAogCQlwYXJ0X3N0YXRfaW5jKGNwdSwgcGFydCwgaW9zW3J3XSk7CiAJCXBhcnRfc3RhdF9hZGQoY3B1LCBwYXJ0LCB0aWNrc1tyd10sIGR1cmF0aW9uKTsKIAkJcGFydF9yb3VuZF9zdGF0cyhjcHUsIHBhcnQpOwotCQlwYXJ0X2RlY19pbl9mbGlnaHQocGFydCk7CisJCXBhcnRfZGVjX2luX2ZsaWdodChwYXJ0LCBydyk7CiAKIAkJcGFydF9zdGF0X3VubG9jaygpOwogCX0KQEAgLTE4MDYsOCArMTg1OCwxNSBAQAogCSAqIGFuZCB0byBpdCBpcyBmcmVlZCBpcyBhY2NvdW50ZWQgYXMgaW8gdGhhdCBpcyBpbiBwcm9ncmVzcyBhdAogCSAqIHRoZSBkcml2ZXIgc2lkZS4KIAkgKi8KLQlpZiAoYmxrX2FjY291bnRfcnEocnEpKQorCWlmIChibGtfYWNjb3VudF9ycShycSkpIHsKIAkJcS0+aW5fZmxpZ2h0W3JxX2lzX3N5bmMocnEpXSsrOworCQkvKgorCQkgKiBNYXJrIHRoaXMgZGV2aWNlIGFzIHN1cHBvcnRpbmcgaGFyZHdhcmUgcXVldWluZywgaWYKKwkJICogd2UgaGF2ZSBtb3JlIElPcyBpbiBmbGlnaHQgdGhhbiA0LgorCQkgKi8KKwkJaWYgKCFibGtfcXVldWVfcXVldWluZyhxKSAmJiBxdWV1ZV9pbl9mbGlnaHQocSkgPiA0KQorCQkJc2V0X2JpdChRVUVVRV9GTEFHX0NRLCAmcS0+cXVldWVfZmxhZ3MpOworCX0KIH0KIAogLyoqCkBAIC0xOTk5LDYgKzIwNTgsMTIgQEAKIAlpZiAoYmxrX2ZzX3JlcXVlc3QocmVxKSB8fCBibGtfZGlzY2FyZF9ycShyZXEpKQogCQlyZXEtPl9fc2VjdG9yICs9IHRvdGFsX2J5dGVzID4+IDk7CiAKKwkvKiBtaXhlZCBhdHRyaWJ1dGVzIGFsd2F5cyBmb2xsb3cgdGhlIGZpcnN0IGJpbyAqLworCWlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9NSVhFRF9NRVJHRSkgeworCQlyZXEtPmNtZF9mbGFncyAmPSB+UkVRX0ZBSUxGQVNUX01BU0s7CisJCXJlcS0+Y21kX2ZsYWdzIHw9IHJlcS0+YmlvLT5iaV9ydyAmIFJFUV9GQUlMRkFTVF9NQVNLOworCX0KKwogCS8qCiAJICogSWYgdG90YWwgbnVtYmVyIG9mIHNlY3RvcnMgaXMgbGVzcyB0aGFuIHRoZSBmaXJzdCBzZWdtZW50CiAJICogc2l6ZSwgc29tZXRoaW5nIGhhcyBnb25lIHRlcnJpYmx5IHdyb25nLgpAQCAtMjE3OCw2ICsyMjQzLDI1IEBACiBFWFBPUlRfU1lNQk9MKGJsa19lbmRfcmVxdWVzdF9jdXIpOwogCiAvKioKKyAqIGJsa19lbmRfcmVxdWVzdF9lcnIgLSBGaW5pc2ggYSByZXF1ZXN0IHRpbGwgdGhlIG5leHQgZmFpbHVyZSBib3VuZGFyeS4KKyAqIEBycTogdGhlIHJlcXVlc3QgdG8gZmluaXNoIHRpbGwgdGhlIG5leHQgZmFpbHVyZSBib3VuZGFyeSBmb3IKKyAqIEBlcnJvcjogbXVzdCBiZSBuZWdhdGl2ZSBlcnJubworICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgIENvbXBsZXRlIEBycSB0aWxsIHRoZSBuZXh0IGZhaWx1cmUgYm91bmRhcnkuCisgKgorICogUmV0dXJuOgorICogICAgICVmYWxzZSAtIHdlIGFyZSBkb25lIHdpdGggdGhpcyByZXF1ZXN0CisgKiAgICAgJXRydWUgIC0gc3RpbGwgYnVmZmVycyBwZW5kaW5nIGZvciB0aGlzIHJlcXVlc3QKKyAqLworYm9vbCBibGtfZW5kX3JlcXVlc3RfZXJyKHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yKQoreworCVdBUk5fT04oZXJyb3IgPj0gMCk7CisJcmV0dXJuIGJsa19lbmRfcmVxdWVzdChycSwgZXJyb3IsIGJsa19ycV9lcnJfYnl0ZXMocnEpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa19lbmRfcmVxdWVzdF9lcnIpOworCisvKioKICAqIF9fYmxrX2VuZF9yZXF1ZXN0IC0gSGVscGVyIGZ1bmN0aW9uIGZvciBkcml2ZXJzIHRvIGNvbXBsZXRlIHRoZSByZXF1ZXN0LgogICogQHJxOiAgICAgICB0aGUgcmVxdWVzdCBiZWluZyBwcm9jZXNzZWQKICAqIEBlcnJvcjogICAgJTAgZm9yIHN1Y2Nlc3MsIDwgJTAgZm9yIGVycm9yCkBAIC0yMjM2LDEyICsyMzIwLDMxIEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fYmxrX2VuZF9yZXF1ZXN0X2N1cik7CiAKKy8qKgorICogX19ibGtfZW5kX3JlcXVlc3RfZXJyIC0gRmluaXNoIGEgcmVxdWVzdCB0aWxsIHRoZSBuZXh0IGZhaWx1cmUgYm91bmRhcnkuCisgKiBAcnE6IHRoZSByZXF1ZXN0IHRvIGZpbmlzaCB0aWxsIHRoZSBuZXh0IGZhaWx1cmUgYm91bmRhcnkgZm9yCisgKiBAZXJyb3I6IG11c3QgYmUgbmVnYXRpdmUgZXJybm8KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBDb21wbGV0ZSBAcnEgdGlsbCB0aGUgbmV4dCBmYWlsdXJlIGJvdW5kYXJ5LiAgTXVzdCBiZSBjYWxsZWQKKyAqICAgICB3aXRoIHF1ZXVlIGxvY2sgaGVsZC4KKyAqCisgKiBSZXR1cm46CisgKiAgICAgJWZhbHNlIC0gd2UgYXJlIGRvbmUgd2l0aCB0aGlzIHJlcXVlc3QKKyAqICAgICAldHJ1ZSAgLSBzdGlsbCBidWZmZXJzIHBlbmRpbmcgZm9yIHRoaXMgcmVxdWVzdAorICovCitib29sIF9fYmxrX2VuZF9yZXF1ZXN0X2VycihzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcikKK3sKKwlXQVJOX09OKGVycm9yID49IDApOworCXJldHVybiBfX2Jsa19lbmRfcmVxdWVzdChycSwgZXJyb3IsIGJsa19ycV9lcnJfYnl0ZXMocnEpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fYmxrX2VuZF9yZXF1ZXN0X2Vycik7CisKIHZvaWQgYmxrX3JxX2Jpb19wcmVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAJCSAgICAgc3RydWN0IGJpbyAqYmlvKQogewotCS8qIEJpdCAwIChSL1cpIGlzIGlkZW50aWNhbCBpbiBycS0+Y21kX2ZsYWdzIGFuZCBiaW8tPmJpX3J3LCBhbmQKLQkgICB3ZSB3YW50IEJJT19SV19BSEVBRCAoYml0IDEpIHRvIGltcGx5IFJFUV9GQUlMRkFTVCAoYml0IDEpLiAqLwotCXJxLT5jbWRfZmxhZ3MgfD0gKGJpby0+YmlfcncgJiAzKTsKKwkvKiBCaXQgMCAoUi9XKSBpcyBpZGVudGljYWwgaW4gcnEtPmNtZF9mbGFncyBhbmQgYmlvLT5iaV9ydyAqLworCXJxLT5jbWRfZmxhZ3MgfD0gYmlvLT5iaV9ydyAmIFJFUV9SVzsKIAogCWlmIChiaW9faGFzX2RhdGEoYmlvKSkgewogCQlycS0+bnJfcGh5c19zZWdtZW50cyA9IGJpb19waHlzX3NlZ21lbnRzKHEsIGJpbyk7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9wb2xsLmMgYi9ibG9jay9ibGstaW9wb2xsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1NjQyMAotLS0gL2Rldi9udWxsCisrKyBiL2Jsb2NrL2Jsay1pb3BvbGwuYwpAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIEZ1bmN0aW9ucyByZWxhdGVkIHRvIGludGVycnVwdC1wb2xsIGhhbmRsaW5nIGluIHRoZSBibG9jayBsYXllci4gVGhpcworICogaXMgc2ltaWxhciB0byBOQVBJIGZvciBuZXR3b3JrIGRldmljZXMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrLWlvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJibGsuaCIKKworaW50IGJsa19pb3BvbGxfZW5hYmxlZCA9IDE7CitFWFBPUlRfU1lNQk9MKGJsa19pb3BvbGxfZW5hYmxlZCk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmxrX2lvcG9sbF9idWRnZXQgX19yZWFkX21vc3RseSA9IDI1NjsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsaXN0X2hlYWQsIGJsa19jcHVfaW9wb2xsKTsKKworLyoqCisgKiBibGtfaW9wb2xsX3NjaGVkIC0gU2NoZWR1bGUgYSBydW4gb2YgdGhlIGlvcG9sbCBoYW5kbGVyCisgKiBAaW9wOiAgICAgIFRoZSBwYXJlbnQgaW9wb2xsIHN0cnVjdHVyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgIEFkZCB0aGlzIGJsa19pb3BvbGwgc3RydWN0dXJlIHRvIHRoZSBwZW5kaW5nIHBvbGwgbGlzdCBhbmQgdHJpZ2dlciB0aGUKKyAqICAgICByYWlzZSBvZiB0aGUgYmxrIGlvcG9sbCBzb2Z0aXJxLiBUaGUgZHJpdmVyIG11c3QgYWxyZWFkeSBoYXZlIGdvdHRlbiBhCisgKiAgICAgc3VjY2VzZnVsIHJldHVybiBmcm9tIGJsa19pb3BvbGxfc2NoZWRfcHJlcCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMuCisgKiovCit2b2lkIGJsa19pb3BvbGxfc2NoZWQoc3RydWN0IGJsa19pb3BvbGwgKmlvcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmlvcC0+bGlzdCwgJl9fZ2V0X2NwdV92YXIoYmxrX2NwdV9pb3BvbGwpKTsKKwlfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKEJMT0NLX0lPUE9MTF9TT0ZUSVJRKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGJsa19pb3BvbGxfc2NoZWQpOworCisvKioKKyAqIF9fYmxrX2lvcG9sbF9jb21wbGV0ZSAtIE1hcmsgdGhpcyBAaW9wIGFzIHVuLXBvbGxlZCBhZ2FpbgorICogQGlvcDogICAgICBUaGUgcGFyZW50IGlvcG9sbCBzdHJ1Y3R1cmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBTZWUgYmxrX2lvcG9sbF9jb21wbGV0ZSgpLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cworICogICAgIGRpc2FibGVkLgorICoqLwordm9pZCBfX2Jsa19pb3BvbGxfY29tcGxldGUoc3RydWN0IGJsa19pb3BvbGwgKmlvcCkKK3sKKwlsaXN0X2RlbCgmaW9wLT5saXN0KTsKKwlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwljbGVhcl9iaXRfdW5sb2NrKElPUE9MTF9GX1NDSEVELCAmaW9wLT5zdGF0ZSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fYmxrX2lvcG9sbF9jb21wbGV0ZSk7CisKKy8qKgorICogYmxrX2lvcG9sbF9jb21wbGV0ZSAtIE1hcmsgdGhpcyBAaW9wIGFzIHVuLXBvbGxlZCBhZ2FpbgorICogQGlvcDogICAgICBUaGUgcGFyZW50IGlvcG9sbCBzdHJ1Y3R1cmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBJZiBhIGRyaXZlciBjb25zdW1lcyBsZXNzIHRoYW4gdGhlIGFzc2lnbmVkIGJ1ZGdldCBpbiBpdHMgcnVuIG9mIHRoZQorICogICAgIGlvcG9sbCBoYW5kbGVyLCBpdCdsbCBlbmQgdGhlIHBvbGxlZCBtb2RlIGJ5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gVGhlCisgKiAgICAgaW9wb2xsIGhhbmRsZXIgd2lsbCBub3QgYmUgaW52b2tlZCBhZ2FpbiBiZWZvcmUgYmxrX2lvcG9sbF9zY2hlZF9wcmVwKCkKKyAqICAgICBpcyBjYWxsZWQuCisgKiovCit2b2lkIGJsa19pb3BvbGxfY29tcGxldGUoc3RydWN0IGJsa19pb3BvbGwgKmlvcG9sbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fYmxrX2lvcG9sbF9jb21wbGV0ZShpb3BvbGwpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX2lvcG9sbF9jb21wbGV0ZSk7CisKK3N0YXRpYyB2b2lkIGJsa19pb3BvbGxfc29mdGlycShzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmgpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9ICZfX2dldF9jcHVfdmFyKGJsa19jcHVfaW9wb2xsKTsKKwlpbnQgcmVhcm0gPSAwLCBidWRnZXQgPSBibGtfaW9wb2xsX2J1ZGdldDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUgPSBqaWZmaWVzOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCXdoaWxlICghbGlzdF9lbXB0eShsaXN0KSkgeworCQlzdHJ1Y3QgYmxrX2lvcG9sbCAqaW9wOworCQlpbnQgd29yaywgd2VpZ2h0OworCisJCS8qCisJCSAqIElmIHNvZnRpcnEgd2luZG93IGlzIGV4aGF1c3RlZCB0aGVuIHB1bnQuCisJCSAqLworCQlpZiAoYnVkZ2V0IDw9IDAgfHwgdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydF90aW1lKSkgeworCQkJcmVhcm0gPSAxOworCQkJYnJlYWs7CisJCX0KKworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwkJLyogRXZlbiB0aG91Z2ggaW50ZXJydXB0cyBoYXZlIGJlZW4gcmUtZW5hYmxlZCwgdGhpcworCQkgKiBhY2Nlc3MgaXMgc2FmZSBiZWNhdXNlIGludGVycnVwdHMgY2FuIG9ubHkgYWRkIG5ldworCQkgKiBlbnRyaWVzIHRvIHRoZSB0YWlsIG9mIHRoaXMgbGlzdCwgYW5kIG9ubHkgLT5wb2xsKCkKKwkJICogY2FsbHMgY2FuIHJlbW92ZSB0aGlzIGhlYWQgZW50cnkgZnJvbSB0aGUgbGlzdC4KKwkJICovCisJCWlvcCA9IGxpc3RfZW50cnkobGlzdC0+bmV4dCwgc3RydWN0IGJsa19pb3BvbGwsIGxpc3QpOworCisJCXdlaWdodCA9IGlvcC0+d2VpZ2h0OworCQl3b3JrID0gMDsKKwkJaWYgKHRlc3RfYml0KElPUE9MTF9GX1NDSEVELCAmaW9wLT5zdGF0ZSkpCisJCQl3b3JrID0gaW9wLT5wb2xsKGlvcCwgd2VpZ2h0KTsKKworCQlidWRnZXQgLT0gd29yazsKKworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJCS8qCisJCSAqIERyaXZlcnMgbXVzdCBub3QgbW9kaWZ5IHRoZSBpb3BvbGwgc3RhdGUsIGlmIHRoZXkKKwkJICogY29uc3VtZSB0aGVpciBhc3NpZ25lZCB3ZWlnaHQgKG9yIG1vcmUsIHNvbWUgZHJpdmVycyBjYW4ndAorCQkgKiBlYXNpbHkganVzdCBzdG9wIHByb2Nlc3NpbmcsIHRoZXkgaGF2ZSB0byBjb21wbGV0ZSBhbgorCQkgKiBlbnRpcmUgbWFzayBvZiBjb21tYW5kcykuSW4gc3VjaCBjYXNlcyB0aGlzIGNvZGUKKwkJICogc3RpbGwgIm93bnMiIHRoZSBpb3BvbGwgaW5zdGFuY2UgYW5kIHRoZXJlZm9yZSBjYW4KKwkJICogbW92ZSB0aGUgaW5zdGFuY2UgYXJvdW5kIG9uIHRoZSBsaXN0IGF0LXdpbGwuCisJCSAqLworCQlpZiAod29yayA+PSB3ZWlnaHQpIHsKKwkJCWlmIChibGtfaW9wb2xsX2Rpc2FibGVfcGVuZGluZyhpb3ApKQorCQkJCV9fYmxrX2lvcG9sbF9jb21wbGV0ZShpb3ApOworCQkJZWxzZQorCQkJCWxpc3RfbW92ZV90YWlsKCZpb3AtPmxpc3QsIGxpc3QpOworCQl9CisJfQorCisJaWYgKHJlYXJtKQorCQlfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKEJMT0NLX0lPUE9MTF9TT0ZUSVJRKTsKKworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworLyoqCisgKiBibGtfaW9wb2xsX2Rpc2FibGUgLSBEaXNhYmxlIGlvcG9sbCBvbiB0aGlzIEBpb3AKKyAqIEBpb3A6ICAgICAgVGhlIHBhcmVudCBpb3BvbGwgc3RydWN0dXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgRGlzYWJsZSBpbyBwb2xsaW5nIGFuZCB3YWl0IGZvciBhbnkgcGVuZGluZyBjYWxsYmFja3MgdG8gaGF2ZSBjb21wbGV0ZWQuCisgKiovCit2b2lkIGJsa19pb3BvbGxfZGlzYWJsZShzdHJ1Y3QgYmxrX2lvcG9sbCAqaW9wKQoreworCXNldF9iaXQoSU9QT0xMX0ZfRElTQUJMRSwgJmlvcC0+c3RhdGUpOworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KElPUE9MTF9GX1NDSEVELCAmaW9wLT5zdGF0ZSkpCisJCW1zbGVlcCgxKTsKKwljbGVhcl9iaXQoSU9QT0xMX0ZfRElTQUJMRSwgJmlvcC0+c3RhdGUpOworfQorRVhQT1JUX1NZTUJPTChibGtfaW9wb2xsX2Rpc2FibGUpOworCisvKioKKyAqIGJsa19pb3BvbGxfZW5hYmxlIC0gRW5hYmxlIGlvcG9sbCBvbiB0aGlzIEBpb3AKKyAqIEBpb3A6ICAgICAgVGhlIHBhcmVudCBpb3BvbGwgc3RydWN0dXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgRW5hYmxlIGlvcG9sbCBvbiB0aGlzIEBpb3AuIE5vdGUgdGhhdCB0aGUgaGFuZGxlciBydW4gd2lsbCBub3QgYmUKKyAqICAgICBzY2hlZHVsZWQsIGl0IHdpbGwgb25seSBtYXJrIGl0IGFzIGFjdGl2ZS4KKyAqKi8KK3ZvaWQgYmxrX2lvcG9sbF9lbmFibGUoc3RydWN0IGJsa19pb3BvbGwgKmlvcCkKK3sKKwlCVUdfT04oIXRlc3RfYml0KElPUE9MTF9GX1NDSEVELCAmaW9wLT5zdGF0ZSkpOworCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCWNsZWFyX2JpdF91bmxvY2soSU9QT0xMX0ZfU0NIRUQsICZpb3AtPnN0YXRlKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX2lvcG9sbF9lbmFibGUpOworCisvKioKKyAqIGJsa19pb3BvbGxfaW5pdCAtIEluaXRpYWxpemUgdGhpcyBAaW9wCisgKiBAaW9wOiAgICAgIFRoZSBwYXJlbnQgaW9wb2xsIHN0cnVjdHVyZQorICogQHdlaWdodDogICBUaGUgZGVmYXVsdCB3ZWlnaHQgKG9yIGNvbW1hbmQgY29tcGxldGlvbiBidWRnZXQpCisgKiBAcG9sbF9mbjogIFRoZSBoYW5kbGVyIHRvIGludm9rZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgIEluaXRpYWxpemUgdGhpcyBibGtfaW9wb2xsIHN0cnVjdHVyZS4gQmVmb3JlIGJlaW5nIGFjdGl2ZWx5IHVzZWQsIHRoZQorICogICAgIGRyaXZlciBtdXN0IGNhbGwgYmxrX2lvcG9sbF9lbmFibGUoKS4KKyAqKi8KK3ZvaWQgYmxrX2lvcG9sbF9pbml0KHN0cnVjdCBibGtfaW9wb2xsICppb3AsIGludCB3ZWlnaHQsIGJsa19pb3BvbGxfZm4gKnBvbGxfZm4pCit7CisJbWVtc2V0KGlvcCwgMCwgc2l6ZW9mKCppb3ApKTsKKwlJTklUX0xJU1RfSEVBRCgmaW9wLT5saXN0KTsKKwlpb3AtPndlaWdodCA9IHdlaWdodDsKKwlpb3AtPnBvbGwgPSBwb2xsX2ZuOworCXNldF9iaXQoSU9QT0xMX0ZfU0NIRUQsICZpb3AtPnN0YXRlKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX2lvcG9sbF9pbml0KTsKKworc3RhdGljIGludCBfX2NwdWluaXQgYmxrX2lvcG9sbF9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwkvKgorCSAqIElmIGEgQ1BVIGdvZXMgYXdheSwgc3BsaWNlIGl0cyBlbnRyaWVzIHRvIHRoZSBjdXJyZW50IENQVQorCSAqIGFuZCB0cmlnZ2VyIGEgcnVuIG9mIHRoZSBzb2Z0aXJxCisJICovCisJaWYgKGFjdGlvbiA9PSBDUFVfREVBRCB8fCBhY3Rpb24gPT0gQ1BVX0RFQURfRlJPWkVOKSB7CisJCWludCBjcHUgPSAodW5zaWduZWQgbG9uZykgaGNwdTsKKworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlsaXN0X3NwbGljZV9pbml0KCZwZXJfY3B1KGJsa19jcHVfaW9wb2xsLCBjcHUpLAorCQkJCSAmX19nZXRfY3B1X3ZhcihibGtfY3B1X2lvcG9sbCkpOworCQlfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKEJMT0NLX0lPUE9MTF9TT0ZUSVJRKTsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCX0KKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBibGtfaW9wb2xsX2NwdV9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbAk9IGJsa19pb3BvbGxfY3B1X25vdGlmeSwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IGJsa19pb3BvbGxfc2V0dXAodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQlJTklUX0xJU1RfSEVBRCgmcGVyX2NwdShibGtfY3B1X2lvcG9sbCwgaSkpOworCisJb3Blbl9zb2Z0aXJxKEJMT0NLX0lPUE9MTF9TT0ZUSVJRLCBibGtfaW9wb2xsX3NvZnRpcnEpOworCXJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmYmxrX2lvcG9sbF9jcHVfbm90aWZpZXIpOworCXJldHVybiAwOworfQorc3Vic3lzX2luaXRjYWxsKGJsa19pb3BvbGxfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuYwppbmRleCBlMTk5OTY3Li45OWNiNWNmIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWVyZ2UuYworKysgYi9ibG9jay9ibGstbWVyZ2UuYwpAQCAtMzExLDYgKzMxMSwzNiBAQAogCXJldHVybiAxOwogfQogCisvKioKKyAqIGJsa19ycV9zZXRfbWl4ZWRfbWVyZ2UgLSBtYXJrIGEgcmVxdWVzdCBhcyBtaXhlZCBtZXJnZQorICogQHJxOiByZXF1ZXN0IHRvIG1hcmsgYXMgbWl4ZWQgbWVyZ2UKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBAcnEgaXMgYWJvdXQgdG8gYmUgbWl4ZWQgbWVyZ2VkLiAgTWFrZSBzdXJlIHRoZSBhdHRyaWJ1dGVzCisgKiAgICAgd2hpY2ggY2FuIGJlIG1peGVkIGFyZSBzZXQgaW4gZWFjaCBiaW8gYW5kIG1hcmsgQHJxIGFzIG1peGVkCisgKiAgICAgbWVyZ2VkLgorICovCit2b2lkIGJsa19ycV9zZXRfbWl4ZWRfbWVyZ2Uoc3RydWN0IHJlcXVlc3QgKnJxKQoreworCXVuc2lnbmVkIGludCBmZiA9IHJxLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1RfTUFTSzsKKwlzdHJ1Y3QgYmlvICpiaW87CisKKwlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9NSVhFRF9NRVJHRSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBAcnEgd2lsbCBubyBsb25nZXIgcmVwcmVzZW50IG1peGFibGUgYXR0cmlidXRlcyBmb3IgYWxsIHRoZQorCSAqIGNvbnRhaW5lZCBiaW9zLiAgSXQgd2lsbCBqdXN0IHRyYWNrIHRob3NlIG9mIHRoZSBmaXJzdCBvbmUuCisJICogRGlzdHJpYnV0ZXMgdGhlIGF0dHJpYnV0cyB0byBlYWNoIGJpby4KKwkgKi8KKwlmb3IgKGJpbyA9IHJxLT5iaW87IGJpbzsgYmlvID0gYmlvLT5iaV9uZXh0KSB7CisJCVdBUk5fT05fT05DRSgoYmlvLT5iaV9ydyAmIFJFUV9GQUlMRkFTVF9NQVNLKSAmJgorCQkJICAgICAoYmlvLT5iaV9ydyAmIFJFUV9GQUlMRkFTVF9NQVNLKSAhPSBmZik7CisJCWJpby0+YmlfcncgfD0gZmY7CisJfQorCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX01JWEVEX01FUkdFOworfQorCiBzdGF0aWMgdm9pZCBibGtfYWNjb3VudF9pb19tZXJnZShzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogewogCWlmIChibGtfZG9faW9fc3RhdChyZXEpKSB7CkBAIC0zMjEsNyArMzUxLDcgQEAKIAkJcGFydCA9IGRpc2tfbWFwX3NlY3Rvcl9yY3UocmVxLT5ycV9kaXNrLCBibGtfcnFfcG9zKHJlcSkpOwogCiAJCXBhcnRfcm91bmRfc3RhdHMoY3B1LCBwYXJ0KTsKLQkJcGFydF9kZWNfaW5fZmxpZ2h0KHBhcnQpOworCQlwYXJ0X2RlY19pbl9mbGlnaHQocGFydCwgcnFfZGF0YV9kaXIocmVxKSk7CiAKIAkJcGFydF9zdGF0X3VubG9jaygpOwogCX0KQEAgLTM1MCwxMiArMzgwLDYgQEAKIAlpZiAoYmxrX2ludGVncml0eV9ycShyZXEpICE9IGJsa19pbnRlZ3JpdHlfcnEobmV4dCkpCiAJCXJldHVybiAwOwogCi0JLyogZG9uJ3QgbWVyZ2UgcmVxdWVzdHMgb2YgZGlmZmVyZW50IGZhaWxmYXN0IHNldHRpbmdzICovCi0JaWYgKGJsa19mYWlsZmFzdF9kZXYocmVxKQkhPSBibGtfZmFpbGZhc3RfZGV2KG5leHQpCXx8Ci0JICAgIGJsa19mYWlsZmFzdF90cmFuc3BvcnQocmVxKQkhPSBibGtfZmFpbGZhc3RfdHJhbnNwb3J0KG5leHQpCXx8Ci0JICAgIGJsa19mYWlsZmFzdF9kcml2ZXIocmVxKQkhPSBibGtfZmFpbGZhc3RfZHJpdmVyKG5leHQpKQotCQlyZXR1cm4gMDsKLQogCS8qCiAJICogSWYgd2UgYXJlIGFsbG93ZWQgdG8gbWVyZ2UsIHRoZW4gYXBwZW5kIGJpbyBsaXN0CiAJICogZnJvbSBuZXh0IHRvIHJxIGFuZCByZWxlYXNlIG5leHQuIG1lcmdlX3JlcXVlc3RzX2ZuCkBAIC0zNjYsNiArMzkwLDE5IEBACiAJCXJldHVybiAwOwogCiAJLyoKKwkgKiBJZiBmYWlsZmFzdCBzZXR0aW5ncyBkaXNhZ3JlZSBvciBhbnkgb2YgdGhlIHR3byBpcyBhbHJlYWR5CisJICogYSBtaXhlZCBtZXJnZSwgbWFyayBib3RoIGFzIG1peGVkIGJlZm9yZSBwcm9jZWVkaW5nLiAgVGhpcworCSAqIG1ha2VzIHN1cmUgdGhhdCBhbGwgaW52b2x2ZWQgYmlvcyBoYXZlIG1peGFibGUgYXR0cmlidXRlcworCSAqIHNldCBwcm9wZXJseS4KKwkgKi8KKwlpZiAoKHJlcS0+Y21kX2ZsYWdzIHwgbmV4dC0+Y21kX2ZsYWdzKSAmIFJFUV9NSVhFRF9NRVJHRSB8fAorCSAgICAocmVxLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1RfTUFTSykgIT0KKwkgICAgKG5leHQtPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVF9NQVNLKSkgeworCQlibGtfcnFfc2V0X21peGVkX21lcmdlKHJlcSk7CisJCWJsa19ycV9zZXRfbWl4ZWRfbWVyZ2UobmV4dCk7CisJfQorCisJLyoKIAkgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZWl0aGVyIGRvbmUgYSBiYWNrIG1lcmdlCiAJICogb3IgZnJvbnQgbWVyZ2UuIFdlIG5lZWQgdGhlIHNtYWxsZXIgc3RhcnRfdGltZSBvZgogCSAqIHRoZSBtZXJnZWQgcmVxdWVzdHMgdG8gYmUgdGhlIGN1cnJlbnQgcmVxdWVzdApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXNldHRpbmdzLmMgYi9ibG9jay9ibGstc2V0dGluZ3MuYwppbmRleCA0NzZkODcwLi44MzQxM2ZmIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc2V0dGluZ3MuYworKysgYi9ibG9jay9ibGstc2V0dGluZ3MuYwpAQCAtNDI4LDYgKzQyOCwyNSBAQAogRVhQT1JUX1NZTUJPTChibGtfcXVldWVfaW9fbWluKTsKIAogLyoqCisgKiBibGtfbGltaXRzX2lvX29wdCAtIHNldCBvcHRpbWFsIHJlcXVlc3Qgc2l6ZSBmb3IgYSBkZXZpY2UKKyAqIEBsaW1pdHM6IHRoZSBxdWV1ZSBsaW1pdHMKKyAqIEBvcHQ6ICBzbWFsbGVzdCBJL08gc2l6ZSBpbiBieXRlcworICoKKyAqIERlc2NyaXB0aW9uOgorICogICBTdG9yYWdlIGRldmljZXMgbWF5IHJlcG9ydCBhbiBvcHRpbWFsIEkvTyBzaXplLCB3aGljaCBpcyB0aGUKKyAqICAgZGV2aWNlJ3MgcHJlZmVycmVkIHVuaXQgZm9yIHN1c3RhaW5lZCBJL08uICBUaGlzIGlzIHJhcmVseSByZXBvcnRlZAorICogICBmb3IgZGlzayBkcml2ZXMuICBGb3IgUkFJRCBhcnJheXMgaXQgaXMgdXN1YWxseSB0aGUgc3RyaXBlIHdpZHRoIG9yCisgKiAgIHRoZSBpbnRlcm5hbCB0cmFjayBzaXplLiAgQSBwcm9wZXJseSBhbGlnbmVkIG11bHRpcGxlIG9mCisgKiAgIG9wdGltYWxfaW9fc2l6ZSBpcyB0aGUgcHJlZmVycmVkIHJlcXVlc3Qgc2l6ZSBmb3Igd29ya2xvYWRzIHdoZXJlCisgKiAgIHN1c3RhaW5lZCB0aHJvdWdocHV0IGlzIGRlc2lyZWQuCisgKi8KK3ZvaWQgYmxrX2xpbWl0c19pb19vcHQoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltaXRzLCB1bnNpZ25lZCBpbnQgb3B0KQoreworCWxpbWl0cy0+aW9fb3B0ID0gb3B0OworfQorRVhQT1JUX1NZTUJPTChibGtfbGltaXRzX2lvX29wdCk7CisKKy8qKgogICogYmxrX3F1ZXVlX2lvX29wdCAtIHNldCBvcHRpbWFsIHJlcXVlc3Qgc2l6ZSBmb3IgdGhlIHF1ZXVlCiAgKiBAcToJdGhlIHJlcXVlc3QgcXVldWUgZm9yIHRoZSBkZXZpY2UKICAqIEBvcHQ6ICBvcHRpbWFsIHJlcXVlc3Qgc2l6ZSBpbiBieXRlcwpAQCAtNDQyLDcgKzQ2MSw3IEBACiAgKi8KIHZvaWQgYmxrX3F1ZXVlX2lvX29wdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IG9wdCkKIHsKLQlxLT5saW1pdHMuaW9fb3B0ID0gb3B0OworCWJsa19saW1pdHNfaW9fb3B0KCZxLT5saW1pdHMsIG9wdCk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9pb19vcHQpOwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstc3lzZnMuYyBiL2Jsb2NrL2Jsay1zeXNmcy5jCmluZGV4IGQzYWEyYWEuLmI3OGM5YzMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1zeXNmcy5jCisrKyBiL2Jsb2NrL2Jsay1zeXNmcy5jCkBAIC00MCw3ICs0MCwxMiBAQAogewogCXN0cnVjdCByZXF1ZXN0X2xpc3QgKnJsID0gJnEtPnJxOwogCXVuc2lnbmVkIGxvbmcgbnI7Ci0JaW50IHJldCA9IHF1ZXVlX3Zhcl9zdG9yZSgmbnIsIHBhZ2UsIGNvdW50KTsKKwlpbnQgcmV0OworCisJaWYgKCFxLT5yZXF1ZXN0X2ZuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHF1ZXVlX3Zhcl9zdG9yZSgmbnIsIHBhZ2UsIGNvdW50KTsKIAlpZiAobnIgPCBCTEtERVZfTUlOX1JRKQogCQluciA9IEJMS0RFVl9NSU5fUlE7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmgKaW5kZXggM2ZhZTZhZC4uNWVlM2Q3ZSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLmgKKysrIGIvYmxvY2svYmxrLmgKQEAgLTEwNCw2ICsxMDQsNyBAQAogaW50IGF0dGVtcHRfYmFja19tZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKTsKIGludCBhdHRlbXB0X2Zyb250X21lcmdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpOwogdm9pZCBibGtfcmVjYWxjX3JxX3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0ICpycSk7Cit2b2lkIGJsa19ycV9zZXRfbWl4ZWRfbWVyZ2Uoc3RydWN0IHJlcXVlc3QgKnJxKTsKIAogdm9pZCBibGtfcXVldWVfY29uZ2VzdGlvbl90aHJlc2hvbGQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogCmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCBmZDcwODBlLi4xY2E4MTNiIDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqY2ZxX3Bvb2w7CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmNmcV9pb2NfcG9vbDsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGlvY19jb3VudCk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgY2ZxX2lvY19jb3VudCk7CiBzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gKmlvY19nb25lOwogc3RhdGljIERFRklORV9TUElOTE9DSyhpb2NfZ29uZV9sb2NrKTsKIApAQCAtMTM0LDEzICsxMzQsOCBAQAogCXN0cnVjdCByYl9yb290IHByaW9fdHJlZXNbQ0ZRX1BSSU9fTElTVFNdOwogCiAJdW5zaWduZWQgaW50IGJ1c3lfcXVldWVzOwotCS8qCi0JICogVXNlZCB0byB0cmFjayBhbnkgcGVuZGluZyBydCByZXF1ZXN0cyBzbyB3ZSBjYW4gcHJlLWVtcHQgY3VycmVudAotCSAqIG5vbi1SVCBjZnFxIGluIHNlcnZpY2Ugd2hlbiB0aGlzIHZhbHVlIGlzIG5vbi16ZXJvLgotCSAqLwotCXVuc2lnbmVkIGludCBidXN5X3J0X3F1ZXVlczsKIAotCWludCBycV9pbl9kcml2ZXI7CisJaW50IHJxX2luX2RyaXZlclsyXTsKIAlpbnQgc3luY19mbGlnaHQ7CiAKIAkvKgpAQCAtMTkxLDcgKzE4Niw2IEBACiAJQ0ZRX0NGUVFfRkxBR19vbl9yciA9IDAsCS8qIG9uIHJvdW5kLXJvYmluIGJ1c3kgbGlzdCAqLwogCUNGUV9DRlFRX0ZMQUdfd2FpdF9yZXF1ZXN0LAkvKiB3YWl0aW5nIGZvciBhIHJlcXVlc3QgKi8KIAlDRlFfQ0ZRUV9GTEFHX211c3RfZGlzcGF0Y2gsCS8qIG11c3QgYmUgYWxsb3dlZCBhIGRpc3BhdGNoICovCi0JQ0ZRX0NGUVFfRkxBR19tdXN0X2FsbG9jLAkvKiBtdXN0IGJlIGFsbG93ZWQgcnEgYWxsb2MgKi8KIAlDRlFfQ0ZRUV9GTEFHX211c3RfYWxsb2Nfc2xpY2UsCS8qIHBlci1zbGljZSBtdXN0X2FsbG9jIGZsYWcgKi8KIAlDRlFfQ0ZRUV9GTEFHX2ZpZm9fZXhwaXJlLAkvKiBGSUZPIGNoZWNrZWQgaW4gdGhpcyBzbGljZSAqLwogCUNGUV9DRlFRX0ZMQUdfaWRsZV93aW5kb3csCS8qIHNsaWNlIGlkbGluZyBlbmFibGVkICovCkBAIC0yMTgsNyArMjEyLDYgQEAKIENGUV9DRlFRX0ZOUyhvbl9ycik7CiBDRlFfQ0ZRUV9GTlMod2FpdF9yZXF1ZXN0KTsKIENGUV9DRlFRX0ZOUyhtdXN0X2Rpc3BhdGNoKTsKLUNGUV9DRlFRX0ZOUyhtdXN0X2FsbG9jKTsKIENGUV9DRlFRX0ZOUyhtdXN0X2FsbG9jX3NsaWNlKTsKIENGUV9DRlFRX0ZOUyhmaWZvX2V4cGlyZSk7CiBDRlFfQ0ZRUV9GTlMoaWRsZV93aW5kb3cpOwpAQCAtMjM5LDYgKzIzMiwxMSBAQAogc3RhdGljIHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ZxX2NpY19sb29rdXAoc3RydWN0IGNmcV9kYXRhICosCiAJCQkJCQlzdHJ1Y3QgaW9fY29udGV4dCAqKTsKIAorc3RhdGljIGlubGluZSBpbnQgcnFfaW5fZHJpdmVyKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCkKK3sKKwlyZXR1cm4gY2ZxZC0+cnFfaW5fZHJpdmVyWzBdICsgY2ZxZC0+cnFfaW5fZHJpdmVyWzFdOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjZnFfcXVldWUgKmNpY190b19jZnFxKHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljLAogCQkJCQkgICAgaW50IGlzX3N5bmMpCiB7CkBAIC0yNTcsNyArMjU1LDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgY2ZxX2Jpb19zeW5jKHN0cnVjdCBiaW8gKmJpbykKIHsKLQlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCB8fCBiaW9fc3luYyhiaW8pKQorCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEIHx8IGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTykpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CkBAIC02NDgsOCArNjQ2LDYgQEAKIAlCVUdfT04oY2ZxX2NmcXFfb25fcnIoY2ZxcSkpOwogCWNmcV9tYXJrX2NmcXFfb25fcnIoY2ZxcSk7CiAJY2ZxZC0+YnVzeV9xdWV1ZXMrKzsKLQlpZiAoY2ZxX2NsYXNzX3J0KGNmcXEpKQotCQljZnFkLT5idXN5X3J0X3F1ZXVlcysrOwogCiAJY2ZxX3Jlc29ydF9ycl9saXN0KGNmcWQsIGNmcXEpOwogfQpAQCAtNjczLDggKzY2OSw2IEBACiAKIAlCVUdfT04oIWNmcWQtPmJ1c3lfcXVldWVzKTsKIAljZnFkLT5idXN5X3F1ZXVlcy0tOwotCWlmIChjZnFfY2xhc3NfcnQoY2ZxcSkpCi0JCWNmcWQtPmJ1c3lfcnRfcXVldWVzLS07CiB9CiAKIC8qCkBAIC03NjAsOSArNzU0LDkgQEAKIHsKIAlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKIAotCWNmcWQtPnJxX2luX2RyaXZlcisrOworCWNmcWQtPnJxX2luX2RyaXZlcltycV9pc19zeW5jKHJxKV0rKzsKIAljZnFfbG9nX2NmcXEoY2ZxZCwgUlFfQ0ZRUShycSksICJhY3RpdmF0ZSBycSwgZHJ2PSVkIiwKLQkJCQkJCWNmcWQtPnJxX2luX2RyaXZlcik7CisJCQkJCQlycV9pbl9kcml2ZXIoY2ZxZCkpOwogCiAJY2ZxZC0+bGFzdF9wb3NpdGlvbiA9IGJsa19ycV9wb3MocnEpICsgYmxrX3JxX3NlY3RvcnMocnEpOwogfQpAQCAtNzcwLDExICs3NjQsMTIgQEAKIHN0YXRpYyB2b2lkIGNmcV9kZWFjdGl2YXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKKwljb25zdCBpbnQgc3luYyA9IHJxX2lzX3N5bmMocnEpOwogCi0JV0FSTl9PTighY2ZxZC0+cnFfaW5fZHJpdmVyKTsKLQljZnFkLT5ycV9pbl9kcml2ZXItLTsKKwlXQVJOX09OKCFjZnFkLT5ycV9pbl9kcml2ZXJbc3luY10pOworCWNmcWQtPnJxX2luX2RyaXZlcltzeW5jXS0tOwogCWNmcV9sb2dfY2ZxcShjZnFkLCBSUV9DRlFRKHJxKSwgImRlYWN0aXZhdGUgcnEsIGRydj0lZCIsCi0JCQkJCQljZnFkLT5ycV9pbl9kcml2ZXIpOworCQkJCQkJcnFfaW5fZHJpdmVyKGNmcWQpKTsKIH0KIAogc3RhdGljIHZvaWQgY2ZxX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkKQEAgLTEwODAsNyArMTA3NSw3IEBACiAJLyoKIAkgKiBzdGlsbCByZXF1ZXN0cyB3aXRoIHRoZSBkcml2ZXIsIGRvbid0IGlkbGUKIAkgKi8KLQlpZiAoY2ZxZC0+cnFfaW5fZHJpdmVyKQorCWlmIChycV9pbl9kcml2ZXIoY2ZxZCkpCiAJCXJldHVybjsKIAogCS8qCkBAIC0xMTE1LDYgKzExMTAsNyBAQAogCiAJY2ZxX2xvZ19jZnFxKGNmcWQsIGNmcXEsICJkaXNwYXRjaF9pbnNlcnQiKTsKIAorCWNmcXEtPm5leHRfcnEgPSBjZnFfZmluZF9uZXh0X3JxKGNmcWQsIGNmcXEsIHJxKTsKIAljZnFfcmVtb3ZlX3JlcXVlc3QocnEpOwogCWNmcXEtPmRpc3BhdGNoZWQrKzsKIAllbHZfZGlzcGF0Y2hfc29ydChxLCBycSk7CkBAIC0xMTc5LDIwICsxMTc1LDYgQEAKIAkJZ290byBleHBpcmU7CiAKIAkvKgotCSAqIElmIHdlIGhhdmUgYSBSVCBjZnFxIHdhaXRpbmcsIHRoZW4gd2UgcHJlLWVtcHQgdGhlIGN1cnJlbnQgbm9uLXJ0Ci0JICogY2ZxcS4KLQkgKi8KLQlpZiAoIWNmcV9jbGFzc19ydChjZnFxKSAmJiBjZnFkLT5idXN5X3J0X3F1ZXVlcykgewotCQkvKgotCQkgKiBXZSBzaW11bGF0ZSB0aGlzIGFzIGNmcXEgdGltZWQgb3V0IHNvIHRoYXQgaXQgZ2V0cyB0byBiYW5rCi0JCSAqIHRoZSByZW1haW5pbmcgb2YgaXRzIHRpbWUgc2xpY2UuCi0JCSAqLwotCQljZnFfbG9nX2NmcXEoY2ZxZCwgY2ZxcSwgInByZWVtcHQiKTsKLQkJY2ZxX3NsaWNlX2V4cGlyZWQoY2ZxZCwgMSk7Ci0JCWdvdG8gbmV3X3F1ZXVlOwotCX0KLQotCS8qCiAJICogVGhlIGFjdGl2ZSBxdWV1ZSBoYXMgcmVxdWVzdHMgYW5kIGlzbid0IGV4cGlyZWQsIGFsbG93IGl0IHRvCiAJICogZGlzcGF0Y2guCiAJICovCkBAIC0xMzEyLDYgKzEyOTQsMTIgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKgorCSAqIERyYWluIGFzeW5jIHJlcXVlc3RzIGJlZm9yZSB3ZSBzdGFydCBzeW5jIElPCisJICovCisJaWYgKGNmcV9jZnFxX2lkbGVfd2luZG93KGNmcXEpICYmIGNmcWQtPnJxX2luX2RyaXZlcltCTEtfUldfQVNZTkNdKQorCQlyZXR1cm4gMDsKKworCS8qCiAJICogSWYgdGhpcyBpcyBhbiBhc3luYyBxdWV1ZSBhbmQgd2UgaGF2ZSBzeW5jIElPIGluIGZsaWdodCwgbGV0IGl0IHdhaXQKIAkgKi8KIAlpZiAoY2ZxZC0+c3luY19mbGlnaHQgJiYgIWNmcV9jZnFxX3N5bmMoY2ZxcSkpCkBAIC0xMzYyLDcgKzEzNTAsNyBAQAogCQljZnFfc2xpY2VfZXhwaXJlZChjZnFkLCAwKTsKIAl9CiAKLQljZnFfbG9nKGNmcWQsICJkaXNwYXRjaGVkIGEgcmVxdWVzdCIpOworCWNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCAiZGlzcGF0Y2hlZCBhIHJlcXVlc3QiKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTQyNyw3ICsxNDE1LDcgQEAKIAljaWMgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGNmcV9pb19jb250ZXh0LCByY3VfaGVhZCk7CiAKIAlrbWVtX2NhY2hlX2ZyZWUoY2ZxX2lvY19wb29sLCBjaWMpOwotCWVsdl9pb2NfY291bnRfZGVjKGlvY19jb3VudCk7CisJZWx2X2lvY19jb3VudF9kZWMoY2ZxX2lvY19jb3VudCk7CiAKIAlpZiAoaW9jX2dvbmUpIHsKIAkJLyoKQEAgLTE0MzYsNyArMTQyNCw3IEBACiAJCSAqIGNvbXBsZXRlIGlvY19nb25lIGFuZCBzZXQgaXQgYmFjayB0byBOVUxMCiAJCSAqLwogCQlzcGluX2xvY2soJmlvY19nb25lX2xvY2spOwotCQlpZiAoaW9jX2dvbmUgJiYgIWVsdl9pb2NfY291bnRfcmVhZChpb2NfY291bnQpKSB7CisJCWlmIChpb2NfZ29uZSAmJiAhZWx2X2lvY19jb3VudF9yZWFkKGNmcV9pb2NfY291bnQpKSB7CiAJCQljb21wbGV0ZShpb2NfZ29uZSk7CiAJCQlpb2NfZ29uZSA9IE5VTEw7CiAJCX0KQEAgLTE1NjIsNyArMTU1MCw3IEBACiAJCUlOSVRfSExJU1RfTk9ERSgmY2ljLT5jaWNfbGlzdCk7CiAJCWNpYy0+ZHRvciA9IGNmcV9mcmVlX2lvX2NvbnRleHQ7CiAJCWNpYy0+ZXhpdCA9IGNmcV9leGl0X2lvX2NvbnRleHQ7Ci0JCWVsdl9pb2NfY291bnRfaW5jKGlvY19jb3VudCk7CisJCWVsdl9pb2NfY291bnRfaW5jKGNmcV9pb2NfY291bnQpOwogCX0KIAogCXJldHVybiBjaWM7CkBAIC0yMTMwLDExICsyMTE4LDExIEBACiAgKi8KIHN0YXRpYyB2b2lkIGNmcV91cGRhdGVfaHdfdGFnKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCkKIHsKLQlpZiAoY2ZxZC0+cnFfaW5fZHJpdmVyID4gY2ZxZC0+cnFfaW5fZHJpdmVyX3BlYWspCi0JCWNmcWQtPnJxX2luX2RyaXZlcl9wZWFrID0gY2ZxZC0+cnFfaW5fZHJpdmVyOworCWlmIChycV9pbl9kcml2ZXIoY2ZxZCkgPiBjZnFkLT5ycV9pbl9kcml2ZXJfcGVhaykKKwkJY2ZxZC0+cnFfaW5fZHJpdmVyX3BlYWsgPSBycV9pbl9kcml2ZXIoY2ZxZCk7CiAKIAlpZiAoY2ZxZC0+cnFfcXVldWVkIDw9IENGUV9IV19RVUVVRV9NSU4gJiYKLQkgICAgY2ZxZC0+cnFfaW5fZHJpdmVyIDw9IENGUV9IV19RVUVVRV9NSU4pCisJICAgIHJxX2luX2RyaXZlcihjZnFkKSA8PSBDRlFfSFdfUVVFVUVfTUlOKQogCQlyZXR1cm47CiAKIAlpZiAoY2ZxZC0+aHdfdGFnX3NhbXBsZXMrKyA8IDUwKQpAQCAtMjE2MSw5ICsyMTQ5LDkgQEAKIAogCWNmcV91cGRhdGVfaHdfdGFnKGNmcWQpOwogCi0JV0FSTl9PTighY2ZxZC0+cnFfaW5fZHJpdmVyKTsKKwlXQVJOX09OKCFjZnFkLT5ycV9pbl9kcml2ZXJbc3luY10pOwogCVdBUk5fT04oIWNmcXEtPmRpc3BhdGNoZWQpOwotCWNmcWQtPnJxX2luX2RyaXZlci0tOworCWNmcWQtPnJxX2luX2RyaXZlcltzeW5jXS0tOwogCWNmcXEtPmRpc3BhdGNoZWQtLTsKIAogCWlmIChjZnFfY2ZxcV9zeW5jKGNmcXEpKQpAQCAtMjE5Nyw3ICsyMTg1LDcgQEAKIAkJCWNmcV9hcm1fc2xpY2VfdGltZXIoY2ZxZCk7CiAJfQogCi0JaWYgKCFjZnFkLT5ycV9pbl9kcml2ZXIpCisJaWYgKCFycV9pbl9kcml2ZXIoY2ZxZCkpCiAJCWNmcV9zY2hlZHVsZV9kaXNwYXRjaChjZnFkKTsKIH0KIApAQCAtMjIyOSw4ICsyMjE3LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgX19jZnFfbWF5X3F1ZXVlKHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCiB7Ci0JaWYgKChjZnFfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSkgfHwgY2ZxX2NmcXFfbXVzdF9hbGxvYyhjZnFxKSkgJiYKLQkgICAgIWNmcV9jZnFxX211c3RfYWxsb2Nfc2xpY2UoY2ZxcSkpIHsKKwlpZiAoY2ZxX2NmcXFfd2FpdF9yZXF1ZXN0KGNmcXEpICYmICFjZnFfY2ZxcV9tdXN0X2FsbG9jX3NsaWNlKGNmcXEpKSB7CiAJCWNmcV9tYXJrX2NmcXFfbXVzdF9hbGxvY19zbGljZShjZnFxKTsKIAkJcmV0dXJuIEVMVl9NUVVFVUVfTVVTVDsKIAl9CkBAIC0yMzE3LDcgKzIzMDQsNiBAQAogCX0KIAogCWNmcXEtPmFsbG9jYXRlZFtyd10rKzsKLQljZnFfY2xlYXJfY2ZxcV9tdXN0X2FsbG9jKGNmcXEpOwogCWF0b21pY19pbmMoJmNmcXEtPnJlZik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKQEAgLTI2NjgsNyArMjY1NCw3IEBACiAJICogdGhpcyBhbHNvIHByb3RlY3RzIHVzIGZyb20gZW50ZXJpbmcgY2ZxX3NsYWJfa2lsbCgpIHdpdGgKIAkgKiBwZW5kaW5nIFJDVSBjYWxsYmFja3MKIAkgKi8KLQlpZiAoZWx2X2lvY19jb3VudF9yZWFkKGlvY19jb3VudCkpCisJaWYgKGVsdl9pb2NfY291bnRfcmVhZChjZnFfaW9jX2NvdW50KSkKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmYWxsX2dvbmUpOwogCWNmcV9zbGFiX2tpbGwoKTsKIH0KZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDJkNTExZjkuLjE5NzViNjEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtNzksNyArNzksOCBAQAogCS8qCiAJICogRG9uJ3QgbWVyZ2UgZmlsZSBzeXN0ZW0gcmVxdWVzdHMgYW5kIGRpc2NhcmQgcmVxdWVzdHMKIAkgKi8KLQlpZiAoYmlvX2Rpc2NhcmQoYmlvKSAhPSBiaW9fZGlzY2FyZChycS0+YmlvKSkKKwlpZiAoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRElTQ0FSRCkgIT0KKwkgICAgYmlvX3J3X2ZsYWdnZWQocnEtPmJpbywgQklPX1JXX0RJU0NBUkQpKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC0xMDAsMTkgKzEwMSw2IEBACiAJaWYgKGJpb19pbnRlZ3JpdHkoYmlvKSAhPSBibGtfaW50ZWdyaXR5X3JxKHJxKSkKIAkJcmV0dXJuIDA7CiAKLQkvKgotCSAqIERvbid0IG1lcmdlIGlmIGZhaWxmYXN0IHNldHRpbmdzIGRvbid0IG1hdGNoLgotCSAqCi0JICogRklYTUU6IFRoZSBuZWdhdGlvbiBpbiBmcm9udCBvZiBlYWNoIGNvbmRpdGlvbiBpcyBuZWNlc3NhcnkKLQkgKiBiZWNhdXNlIGJpbyBhbmQgcmVxdWVzdCBmbGFncyB1c2UgZGlmZmVyZW50IGJpdCBwb3NpdGlvbnMKLQkgKiBhbmQgdGhlIGFjY2Vzc29ycyByZXR1cm4gdGhvc2UgYml0cyBkaXJlY3RseS4gIFRoaXMKLQkgKiB1Z2xpbmVzcyB3aWxsIHNvb24gZ28gYXdheS4KLQkgKi8KLQlpZiAoIWJpb19mYWlsZmFzdF9kZXYoYmlvKQkgIT0gIWJsa19mYWlsZmFzdF9kZXYocnEpCXx8Ci0JICAgICFiaW9fZmFpbGZhc3RfdHJhbnNwb3J0KGJpbykgIT0gIWJsa19mYWlsZmFzdF90cmFuc3BvcnQocnEpCXx8Ci0JICAgICFiaW9fZmFpbGZhc3RfZHJpdmVyKGJpbykJICE9ICFibGtfZmFpbGZhc3RfZHJpdmVyKHJxKSkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoIWVsdl9pb3NjaGVkX2FsbG93X21lcmdlKHJxLCBiaW8pKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggZjRjNjRjMi4uNWI3NmJmNSAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYworKysgYi9ibG9jay9nZW5oZC5jCkBAIC04NjksNiArODY5LDcgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihhbGlnbm1lbnRfb2Zmc2V0LCBTX0lSVUdPLCBkaXNrX2FsaWdubWVudF9vZmZzZXRfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoY2FwYWJpbGl0eSwgU19JUlVHTywgZGlza19jYXBhYmlsaXR5X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIFNfSVJVR08sIHBhcnRfc3RhdF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgU19JUlVHTywgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTsKICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1QKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9mYWlsID0KIAlfX0FUVFIobWFrZS1pdC1mYWlsLCBTX0lSVUdPfFNfSVdVU1IsIHBhcnRfZmFpbF9zaG93LCBwYXJ0X2ZhaWxfc3RvcmUpOwpAQCAtODg4LDYgKzg4OSw3IEBACiAJJmRldl9hdHRyX2FsaWdubWVudF9vZmZzZXQuYXR0ciwKIAkmZGV2X2F0dHJfY2FwYWJpbGl0eS5hdHRyLAogCSZkZXZfYXR0cl9zdGF0LmF0dHIsCisJJmRldl9hdHRyX2luZmxpZ2h0LmF0dHIsCiAjaWZkZWYgQ09ORklHX0ZBSUxfTUFLRV9SRVFVRVNUCiAJJmRldl9hdHRyX2ZhaWwuYXR0ciwKICNlbmRpZgpAQCAtMTA1Myw3ICsxMDU1LDcgQEAKIAkJCSAgIHBhcnRfc3RhdF9yZWFkKGhkLCBtZXJnZXNbMV0pLAogCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwYXJ0X3N0YXRfcmVhZChoZCwgc2VjdG9yc1sxXSksCiAJCQkgICBqaWZmaWVzX3RvX21zZWNzKHBhcnRfc3RhdF9yZWFkKGhkLCB0aWNrc1sxXSkpLAotCQkJICAgaGQtPmluX2ZsaWdodCwKKwkJCSAgIHBhcnRfaW5fZmxpZ2h0KGhkKSwKIAkJCSAgIGppZmZpZXNfdG9fbXNlY3MocGFydF9zdGF0X3JlYWQoaGQsIGlvX3RpY2tzKSksCiAJCQkgICBqaWZmaWVzX3RvX21zZWNzKHBhcnRfc3RhdF9yZWFkKGhkLCB0aW1lX2luX3F1ZXVlKSkKIAkJCSk7CkBAIC0xMjE1LDYgKzEyMTcsMTYgQEAKIAogRVhQT1JUX1NZTUJPTChwdXRfZGlzayk7CiAKK3N0YXRpYyB2b2lkIHNldF9kaXNrX3JvX3VldmVudChzdHJ1Y3QgZ2VuZGlzayAqZ2QsIGludCBybykKK3sKKwljaGFyIGV2ZW50W10gPSAiRElTS19STz0xIjsKKwljaGFyICplbnZwW10gPSB7IGV2ZW50LCBOVUxMIH07CisKKwlpZiAoIXJvKQorCQlldmVudFs4XSA9ICcwJzsKKwlrb2JqZWN0X3VldmVudF9lbnYoJmRpc2tfdG9fZGV2KGdkKS0+a29iaiwgS09CSl9DSEFOR0UsIGVudnApOworfQorCiB2b2lkIHNldF9kZXZpY2Vfcm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IGZsYWcpCiB7CiAJYmRldi0+YmRfcGFydC0+cG9saWN5ID0gZmxhZzsKQEAgLTEyMjcsOCArMTIzOSwxMiBAQAogCXN0cnVjdCBkaXNrX3BhcnRfaXRlciBwaXRlcjsKIAlzdHJ1Y3QgaGRfc3RydWN0ICpwYXJ0OwogCi0JZGlza19wYXJ0X2l0ZXJfaW5pdCgmcGl0ZXIsIGRpc2ssCi0JCQkgICAgRElTS19QSVRFUl9JTkNMX0VNUFRZIHwgRElTS19QSVRFUl9JTkNMX1BBUlQwKTsKKwlpZiAoZGlzay0+cGFydDAucG9saWN5ICE9IGZsYWcpIHsKKwkJc2V0X2Rpc2tfcm9fdWV2ZW50KGRpc2ssIGZsYWcpOworCQlkaXNrLT5wYXJ0MC5wb2xpY3kgPSBmbGFnOworCX0KKworCWRpc2tfcGFydF9pdGVyX2luaXQoJnBpdGVyLCBkaXNrLCBESVNLX1BJVEVSX0lOQ0xfRU1QVFkpOwogCXdoaWxlICgocGFydCA9IGRpc2tfcGFydF9pdGVyX25leHQoJnBpdGVyKSkpCiAJCXBhcnQtPnBvbGljeSA9IGZsYWc7CiAJZGlza19wYXJ0X2l0ZXJfZXhpdCgmcGl0ZXIpOwpkaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lvY3RsLmMKaW5kZXggNTAwZTRjNy4uZDNlNmI1OCAxMDA2NDQKLS0tIGEvYmxvY2svaW9jdGwuYworKysgYi9ibG9jay9pb2N0bC5jCkBAIC0xMTIsMjIgKzExMiw5IEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIHZvaWQgYmxrX2lvY19kaXNjYXJkX2VuZGlvKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycikKLXsKLQlpZiAoZXJyKSB7Ci0JCWlmIChlcnIgPT0gLUVPUE5PVFNVUFApCi0JCQlzZXRfYml0KEJJT19FT1BOT1RTVVBQLCAmYmlvLT5iaV9mbGFncyk7Ci0JCWNsZWFyX2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKLQl9Ci0JY29tcGxldGUoYmlvLT5iaV9wcml2YXRlKTsKLX0KLQogc3RhdGljIGludCBibGtfaW9jdGxfZGlzY2FyZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1aW50NjRfdCBzdGFydCwKIAkJCSAgICAgdWludDY0X3QgbGVuKQogewotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmRldl9nZXRfcXVldWUoYmRldik7Ci0JaW50IHJldCA9IDA7Ci0KIAlpZiAoc3RhcnQgJiA1MTEpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChsZW4gJiA1MTEpCkBAIC0xMzcsNDAgKzEyNCw4IEBACiAKIAlpZiAoc3RhcnQgKyBsZW4gPiAoYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiA5KSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIXEtPnByZXBhcmVfZGlzY2FyZF9mbikKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0Jd2hpbGUgKGxlbiAmJiAhcmV0KSB7Ci0JCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOwotCQlzdHJ1Y3QgYmlvICpiaW87Ci0KLQkJYmlvID0gYmlvX2FsbG9jKEdGUF9LRVJORUwsIDApOwotCi0JCWJpby0+YmlfZW5kX2lvID0gYmxrX2lvY19kaXNjYXJkX2VuZGlvOwotCQliaW8tPmJpX2JkZXYgPSBiZGV2OwotCQliaW8tPmJpX3ByaXZhdGUgPSAmd2FpdDsKLQkJYmlvLT5iaV9zZWN0b3IgPSBzdGFydDsKLQotCQlpZiAobGVuID4gcXVldWVfbWF4X2h3X3NlY3RvcnMocSkpIHsKLQkJCWJpby0+Ymlfc2l6ZSA9IHF1ZXVlX21heF9od19zZWN0b3JzKHEpIDw8IDk7Ci0JCQlsZW4gLT0gcXVldWVfbWF4X2h3X3NlY3RvcnMocSk7Ci0JCQlzdGFydCArPSBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKTsKLQkJfSBlbHNlIHsKLQkJCWJpby0+Ymlfc2l6ZSA9IGxlbiA8PCA5OwotCQkJbGVuID0gMDsKLQkJfQotCQlzdWJtaXRfYmlvKERJU0NBUkRfTk9CQVJSSUVSLCBiaW8pOwotCi0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJndhaXQpOwotCi0JCWlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19FT1BOT1RTVVBQKSkKLQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCQllbHNlIGlmICghYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVVBUT0RBVEUpKQotCQkJcmV0ID0gLUVJTzsKLQkJYmlvX3B1dChiaW8pOwotCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBibGtkZXZfaXNzdWVfZGlzY2FyZChiZGV2LCBzdGFydCwgbGVuLCBHRlBfS0VSTkVMLAorCQkJCSAgICBESVNDQVJEX0ZMX1dBSVQpOwogfQogCiBzdGF0aWMgaW50IHB1dF91c2hvcnQodW5zaWduZWQgbG9uZyBhcmcsIHVuc2lnbmVkIHNob3J0IHZhbCkKZGlmZiAtLWdpdCBhL2NyeXB0by9LY29uZmlnIGIvY3J5cHRvL0tjb25maWcKaW5kZXggNGRmZGQwMy4uMjZiNWRkMCAxMDA2NDQKLS0tIGEvY3J5cHRvL0tjb25maWcKKysrIGIvY3J5cHRvL0tjb25maWcKQEAgLTIzLDExICsyMywxMyBAQAogCiBjb25maWcgQ1JZUFRPX0ZJUFMKIAlib29sICJGSVBTIDIwMCBjb21wbGlhbmNlIgorCWRlcGVuZHMgb24gQ1JZUFRPX0FOU0lfQ1BSTkcKIAloZWxwCiAJICBUaGlzIG9wdGlvbnMgZW5hYmxlcyB0aGUgZmlwcyBib290IG9wdGlvbiB3aGljaCBpcwogCSAgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gc3lzdGVtIHRvIG9wZXJhdGUgaW4gYSBGSVBTIDIwMAogCSAgY2VydGlmaWNhdGlvbi4gIFlvdSBzaG91bGQgc2F5IG5vIHVubGVzcyB5b3Uga25vdyB3aGF0Ci0JICB0aGlzIGlzLgorCSAgdGhpcyBpcy4gTm90ZSB0aGF0IENSWVBUT19BTlNJX0NQUk5HIGlzIHJlcXVyZWQgaWYgdGhpcworCSAgb3B0aW9uIGlzIHNlbGVjdGVkCiAKIGNvbmZpZyBDUllQVE9fQUxHQVBJCiAJdHJpc3RhdGUKQEAgLTE1Niw3ICsxNTgsNyBAQAogCXRyaXN0YXRlICJHQ00vR01BQyBzdXBwb3J0IgogCXNlbGVjdCBDUllQVE9fQ1RSCiAJc2VsZWN0IENSWVBUT19BRUFECi0Jc2VsZWN0IENSWVBUT19HRjEyOE1VTAorCXNlbGVjdCBDUllQVE9fR0hBU0gKIAloZWxwCiAJICBTdXBwb3J0IGZvciBHYWxvaXMvQ291bnRlciBNb2RlIChHQ00pIGFuZCBHYWxvaXMgTWVzc2FnZQogCSAgQXV0aGVudGljYXRpb24gQ29kZSAoR01BQykuIFJlcXVpcmVkIGZvciBJUFNlYy4KQEAgLTI2Nyw2ICsyNjksMTggQEAKIAkJaHR0cDovL2NzcmMubmlzdC5nb3YvZW5jcnlwdGlvbi9tb2Rlcy9wcm9wb3NlZG1vZGVzLwogCQkgeGNiYy1tYWMveGNiYy1tYWMtc3BlYy5wZGYKIAorY29uZmlnIENSWVBUT19WTUFDCisJdHJpc3RhdGUgIlZNQUMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBDUllQVE9fSEFTSAorCXNlbGVjdCBDUllQVE9fTUFOQUdFUgorCWhlbHAKKwkgIFZNQUMgaXMgYSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBkZXNpZ25lZCBmb3IKKwkgIHZlcnkgaGlnaCBzcGVlZCBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcy4KKworCSAgU2VlIGFsc286CisJICA8aHR0cDovL2Zhc3RjcnlwdG8ub3JnL3ZtYWM+CisKIGNvbW1lbnQgIkRpZ2VzdCIKIAogY29uZmlnIENSWVBUT19DUkMzMkMKQEAgLTI4OSw2ICszMDMsMTMgQEAKIAkgIGdhaW4gcGVyZm9ybWFuY2UgY29tcGFyZWQgd2l0aCBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbi4KIAkgIE1vZHVsZSB3aWxsIGJlIGNyYzMyYy1pbnRlbC4KIAorY29uZmlnIENSWVBUT19HSEFTSAorCXRyaXN0YXRlICJHSEFTSCBkaWdlc3QgYWxnb3JpdGhtIgorCXNlbGVjdCBDUllQVE9fU0hBU0gKKwlzZWxlY3QgQ1JZUFRPX0dGMTI4TVVMCisJaGVscAorCSAgR0hBU0ggaXMgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtIGZvciBHQ00gKEdhbG9pcy9Db3VudGVyIE1vZGUpLgorCiBjb25maWcgQ1JZUFRPX01ENAogCXRyaXN0YXRlICJNRDQgZGlnZXN0IGFsZ29yaXRobSIKIAlzZWxlY3QgQ1JZUFRPX0hBU0gKQEAgLTc4MCwxMyArODAxLDE0IEBACiAKIGNvbmZpZyBDUllQVE9fQU5TSV9DUFJORwogCXRyaXN0YXRlICJQc2V1ZG8gUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uIGZvciBDcnlwdG9ncmFwaGljIG1vZHVsZXMiCisJZGVmYXVsdCBtCiAJc2VsZWN0IENSWVBUT19BRVMKIAlzZWxlY3QgQ1JZUFRPX1JORwotCXNlbGVjdCBDUllQVE9fRklQUwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGdlbmVyaWMgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCiAJICBmb3IgY3J5cHRvZ3JhcGhpYyBtb2R1bGVzLiAgVXNlcyB0aGUgQWxnb3JpdGhtIHNwZWNpZmllZCBpbgotCSAgQU5TSSBYOS4zMSBBLjIuNAorCSAgQU5TSSBYOS4zMSBBLjIuNC4gTm90IHRoaXMgb3B0aW9uIG11c3QgYmUgZW5hYmxlZCBpZiBDUllQVE9fRklQUyAKKwkgIGlzIHNlbGVjdGVkCiAKIHNvdXJjZSAiZHJpdmVycy9jcnlwdG8vS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL01ha2VmaWxlIGIvY3J5cHRvL01ha2VmaWxlCmluZGV4IDY3M2Q5ZjcuLjllOGY2MTkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9NYWtlZmlsZQorKysgYi9jcnlwdG8vTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKIG9iai0kKENPTkZJR19DUllQVE8pICs9IGNyeXB0by5vCi1jcnlwdG8tb2JqcyA6PSBhcGkubyBjaXBoZXIubyBkaWdlc3QubyBjb21wcmVzcy5vCitjcnlwdG8tb2JqcyA6PSBhcGkubyBjaXBoZXIubyBjb21wcmVzcy5vCiAKIG9iai0kKENPTkZJR19DUllQVE9fV09SS1FVRVVFKSArPSBjcnlwdG9fd3EubwogCkBAIC0yMiw3ICsyMiw2IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjIpICs9IGVzZXFpdi5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1NFUUlWKSArPSBzZXFpdi5vCiAKLWNyeXB0b19oYXNoLW9ianMgOj0gaGFzaC5vCiBjcnlwdG9faGFzaC1vYmpzICs9IGFoYXNoLm8KIGNyeXB0b19oYXNoLW9ianMgKz0gc2hhc2gubwogb2JqLSQoQ09ORklHX0NSWVBUT19IQVNIMikgKz0gY3J5cHRvX2hhc2gubwpAQCAtMzMsNiArMzIsNyBAQAogCiBvYmotJChDT05GSUdfQ1JZUFRPX01BTkFHRVIyKSArPSBjcnlwdG9tZ3Iubwogb2JqLSQoQ09ORklHX0NSWVBUT19ITUFDKSArPSBobWFjLm8KK29iai0kKENPTkZJR19DUllQVE9fVk1BQykgKz0gdm1hYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1hDQkMpICs9IHhjYmMubwogb2JqLSQoQ09ORklHX0NSWVBUT19OVUxMKSArPSBjcnlwdG9fbnVsbC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX01ENCkgKz0gbWQ0Lm8KQEAgLTgzLDYgKzgzLDcgQEAKIG9iai0kKENPTkZJR19DUllQVE9fUk5HMikgKz0ga3JuZy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcpICs9IGFuc2lfY3Bybmcubwogb2JqLSQoQ09ORklHX0NSWVBUT19URVNUKSArPSB0Y3J5cHQubworb2JqLSQoQ09ORklHX0NSWVBUT19HSEFTSCkgKz0gZ2hhc2gtZ2VuZXJpYy5vCiAKICMKICMgZ2VuZXJpYyBhbGdvcml0aG1zIGFuZCB0aGUgYXN5bmNfdHggYXBpCmRpZmYgLS1naXQgYS9jcnlwdG8vYWJsa2NpcGhlci5jIGIvY3J5cHRvL2FibGtjaXBoZXIuYwppbmRleCBlMTFjZTM3Li5mNmYwODMzIDEwMDY0NAotLS0gYS9jcnlwdG8vYWJsa2NpcGhlci5jCisrKyBiL2NyeXB0by9hYmxrY2lwaGVyLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NrY2lwaGVyLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI1LDYgKzI2LDggQEAKIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKK3N0YXRpYyBjb25zdCBjaGFyICpza2NpcGhlcl9kZWZhdWx0X2dlbml2IF9fcmVhZF9tb3N0bHk7CisKIHN0YXRpYyBpbnQgc2V0a2V5X3VuYWxpZ25lZChzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSwgY29uc3QgdTggKmtleSwKIAkJCSAgICB1bnNpZ25lZCBpbnQga2V5bGVuKQogewpAQCAtMTgwLDcgKzE4MywxNCBAQAogCiBjb25zdCBjaGFyICpjcnlwdG9fZGVmYXVsdF9nZW5pdihjb25zdCBzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQogewotCXJldHVybiBhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfQVNZTkMgPyAiZXNlcWl2IiA6ICJjaGFpbml2IjsKKwlpZiAoKChhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSA9PQorCSAgICAgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiA/IGFsZy0+Y3JhX2Jsa2NpcGhlci5pdnNpemUgOgorCQkJCQkgYWxnLT5jcmFfYWJsa2NpcGhlci5pdnNpemUpICE9CisJICAgIGFsZy0+Y3JhX2Jsb2Nrc2l6ZSkKKwkJcmV0dXJuICJjaGFpbml2IjsKKworCXJldHVybiBhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfQVNZTkMgPworCSAgICAgICAiZXNlcWl2IiA6IHNrY2lwaGVyX2RlZmF1bHRfZ2VuaXY7CiB9CiAKIHN0YXRpYyBpbnQgY3J5cHRvX2dpdmNpcGhlcl9kZWZhdWx0KHN0cnVjdCBjcnlwdG9fYWxnICphbGcsIHUzMiB0eXBlLCB1MzIgbWFzaykKQEAgLTIwMSw4ICsyMTEsOSBAQAogCWludCBlcnI7CiAKIAlsYXJ2YWwgPSBjcnlwdG9fbGFydmFsX2xvb2t1cChhbGctPmNyYV9kcml2ZXJfbmFtZSwKKwkJCQkgICAgICAodHlwZSAmIH5DUllQVE9fQUxHX1RZUEVfTUFTSykgfAogCQkJCSAgICAgIENSWVBUT19BTEdfVFlQRV9HSVZDSVBIRVIsCi0JCQkJICAgICAgQ1JZUFRPX0FMR19UWVBFX01BU0spOworCQkJCSAgICAgIG1hc2sgfCBDUllQVE9fQUxHX1RZUEVfTUFTSyk7CiAJZXJyID0gUFRSX0VSUihsYXJ2YWwpOwogCWlmIChJU19FUlIobGFydmFsKSkKIAkJZ290byBvdXQ7CkBAIC0zNjAsMyArMzcxLDE3IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hbGxvY19hYmxrY2lwaGVyKTsKKworc3RhdGljIGludCBfX2luaXQgc2tjaXBoZXJfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlza2NpcGhlcl9kZWZhdWx0X2dlbml2ID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEgPworCQkJCSAiZXNlcWl2IiA6ICJjaGFpbml2IjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2tjaXBoZXJfbW9kdWxlX2V4aXQodm9pZCkKK3sKK30KKworbW9kdWxlX2luaXQoc2tjaXBoZXJfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoc2tjaXBoZXJfbW9kdWxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flc19nZW5lcmljLmMgYi9jcnlwdG8vYWVzX2dlbmVyaWMuYwppbmRleCBiOGI2NmVjLi5lNzhiN2VlIDEwMDY0NAotLS0gYS9jcnlwdG8vYWVzX2dlbmVyaWMuYworKysgYi9jcnlwdG8vYWVzX2dlbmVyaWMuYwpAQCAtMTE3NCw3ICsxMTc0LDcgQEAKIAljdHgtPmtleV9lbmNbNiAqIGkgKyAxMV0gPSB0OwkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBsb29wOChpKQlkbyB7CQkJXAorI2RlZmluZSBsb29wOHRvcGhhbGYoaSkJZG8gewkJCVwKIAl0ID0gcm9yMzIodCwgOCk7CQkJXAogCXQgPSBsc19ib3godCkgXiByY29fdGFiW2ldOwkJXAogCXQgXj0gY3R4LT5rZXlfZW5jWzggKiBpXTsJCQlcCkBAIC0xMTg1LDYgKzExODUsMTAgQEAKIAljdHgtPmtleV9lbmNbOCAqIGkgKyAxMF0gPSB0OwkJCVwKIAl0IF49IGN0eC0+a2V5X2VuY1s4ICogaSArIDNdOwkJCVwKIAljdHgtPmtleV9lbmNbOCAqIGkgKyAxMV0gPSB0OwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgbG9vcDgoaSkJZG8gewkJCQlcCisJbG9vcDh0b3BoYWxmKGkpOwkJCQlcCiAJdCAgPSBjdHgtPmtleV9lbmNbOCAqIGkgKyA0XSBeIGxzX2JveCh0KTsJXAogCWN0eC0+a2V5X2VuY1s4ICogaSArIDEyXSA9IHQ7CQkJXAogCXQgXj0gY3R4LT5rZXlfZW5jWzggKiBpICsgNV07CQkJXApAQCAtMTI0NSw4ICsxMjQ5LDkgQEAKIAkJY3R4LT5rZXlfZW5jWzVdID0gbGUzMl90b19jcHUoa2V5WzVdKTsKIAkJY3R4LT5rZXlfZW5jWzZdID0gbGUzMl90b19jcHUoa2V5WzZdKTsKIAkJdCA9IGN0eC0+a2V5X2VuY1s3XSA9IGxlMzJfdG9fY3B1KGtleVs3XSk7Ci0JCWZvciAoaSA9IDA7IGkgPCA3OyArK2kpCisJCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCiAJCQlsb29wOChpKTsKKwkJbG9vcDh0b3BoYWxmKGkpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9haGFzaC5jIGIvY3J5cHRvL2FoYXNoLmMKaW5kZXggZjM0NzYzNy4uMzNhNGZmNCAxMDA2NDQKLS0tIGEvY3J5cHRvL2FoYXNoLmMKKysrIGIvY3J5cHRvL2FoYXNoLmMKQEAgLTI0LDYgKzI0LDE5IEBACiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCitzdHJ1Y3QgYWhhc2hfcmVxdWVzdF9wcml2IHsKKwljcnlwdG9fY29tcGxldGlvbl90IGNvbXBsZXRlOworCXZvaWQgKmRhdGE7CisJdTggKnJlc3VsdDsKKwl2b2lkICp1YnVmW10gQ1JZUFRPX01JTkFMSUdOX0FUVFI7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhaGFzaF9hbGcgKmNyeXB0b19haGFzaF9hbGcoc3RydWN0IGNyeXB0b19haGFzaCAqaGFzaCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNyeXB0b19oYXNoX2FsZ19jb21tb24oaGFzaCksIHN0cnVjdCBhaGFzaF9hbGcsCisJCQkgICAgaGFsZyk7Cit9CisKIHN0YXRpYyBpbnQgaGFzaF93YWxrX25leHQoc3RydWN0IGNyeXB0b19oYXNoX3dhbGsgKndhbGspCiB7CiAJdW5zaWduZWQgaW50IGFsaWdubWFzayA9IHdhbGstPmFsaWdubWFzazsKQEAgLTEzMiwzNiArMTQ1LDM0IEBACiBzdGF0aWMgaW50IGFoYXNoX3NldGtleV91bmFsaWduZWQoc3RydWN0IGNyeXB0b19haGFzaCAqdGZtLCBjb25zdCB1OCAqa2V5LAogCQkJCXVuc2lnbmVkIGludCBrZXlsZW4pCiB7Ci0Jc3RydWN0IGFoYXNoX2FsZyAqYWhhc2ggPSBjcnlwdG9fYWhhc2hfYWxnKHRmbSk7CiAJdW5zaWduZWQgbG9uZyBhbGlnbm1hc2sgPSBjcnlwdG9fYWhhc2hfYWxpZ25tYXNrKHRmbSk7CiAJaW50IHJldDsKIAl1OCAqYnVmZmVyLCAqYWxpZ25idWZmZXI7CiAJdW5zaWduZWQgbG9uZyBhYnNpemU7CiAKIAlhYnNpemUgPSBrZXlsZW4gKyBhbGlnbm1hc2s7Ci0JYnVmZmVyID0ga21hbGxvYyhhYnNpemUsIEdGUF9BVE9NSUMpOworCWJ1ZmZlciA9IGttYWxsb2MoYWJzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZmZlcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlhbGlnbmJ1ZmZlciA9ICh1OCAqKUFMSUdOKCh1bnNpZ25lZCBsb25nKWJ1ZmZlciwgYWxpZ25tYXNrICsgMSk7CiAJbWVtY3B5KGFsaWduYnVmZmVyLCBrZXksIGtleWxlbik7Ci0JcmV0ID0gYWhhc2gtPnNldGtleSh0Zm0sIGFsaWduYnVmZmVyLCBrZXlsZW4pOwotCW1lbXNldChhbGlnbmJ1ZmZlciwgMCwga2V5bGVuKTsKLQlrZnJlZShidWZmZXIpOworCXJldCA9IHRmbS0+c2V0a2V5KHRmbSwgYWxpZ25idWZmZXIsIGtleWxlbik7CisJa3pmcmVlKGJ1ZmZlcik7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhaGFzaF9zZXRrZXkoc3RydWN0IGNyeXB0b19haGFzaCAqdGZtLCBjb25zdCB1OCAqa2V5LAoraW50IGNyeXB0b19haGFzaF9zZXRrZXkoc3RydWN0IGNyeXB0b19haGFzaCAqdGZtLCBjb25zdCB1OCAqa2V5LAogCQkJdW5zaWduZWQgaW50IGtleWxlbikKIHsKLQlzdHJ1Y3QgYWhhc2hfYWxnICphaGFzaCA9IGNyeXB0b19haGFzaF9hbGcodGZtKTsKIAl1bnNpZ25lZCBsb25nIGFsaWdubWFzayA9IGNyeXB0b19haGFzaF9hbGlnbm1hc2sodGZtKTsKIAogCWlmICgodW5zaWduZWQgbG9uZylrZXkgJiBhbGlnbm1hc2spCiAJCXJldHVybiBhaGFzaF9zZXRrZXlfdW5hbGlnbmVkKHRmbSwga2V5LCBrZXlsZW4pOwogCi0JcmV0dXJuIGFoYXNoLT5zZXRrZXkodGZtLCBrZXksIGtleWxlbik7CisJcmV0dXJuIHRmbS0+c2V0a2V5KHRmbSwga2V5LCBrZXlsZW4pOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2FoYXNoX3NldGtleSk7CiAKIHN0YXRpYyBpbnQgYWhhc2hfbm9zZXRrZXkoc3RydWN0IGNyeXB0b19haGFzaCAqdGZtLCBjb25zdCB1OCAqa2V5LAogCQkJICB1bnNpZ25lZCBpbnQga2V5bGVuKQpAQCAtMTY5LDQyICsxODAsMjE5IEBACiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLWludCBjcnlwdG9fYWhhc2hfaW1wb3J0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIGNvbnN0IHU4ICppbikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFoYXNoX2FsaWduX2J1ZmZlcl9zaXplKHVuc2lnbmVkIGxlbiwKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlyZXR1cm4gbGVuICsgKG1hc2sgJiB+KGNyeXB0b190Zm1fY3R4X2FsaWdubWVudCgpIC0gMSkpOworfQorCitzdGF0aWMgdm9pZCBhaGFzaF9vcF91bmFsaWduZWRfZmluaXNoKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIGludCBlcnIpCit7CisJc3RydWN0IGFoYXNoX3JlcXVlc3RfcHJpdiAqcHJpdiA9IHJlcS0+cHJpdjsKKworCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm47CisKKwlpZiAoIWVycikKKwkJbWVtY3B5KHByaXYtPnJlc3VsdCwgcmVxLT5yZXN1bHQsCisJCSAgICAgICBjcnlwdG9fYWhhc2hfZGlnZXN0c2l6ZShjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSkpKTsKKworCWt6ZnJlZShwcml2KTsKK30KKworc3RhdGljIHZvaWQgYWhhc2hfb3BfdW5hbGlnbmVkX2RvbmUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsIGludCBlcnIpCit7CisJc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFyZXEgPSByZXEtPmRhdGE7CisJc3RydWN0IGFoYXNoX3JlcXVlc3RfcHJpdiAqcHJpdiA9IGFyZXEtPnByaXY7CisJY3J5cHRvX2NvbXBsZXRpb25fdCBjb21wbGV0ZSA9IHByaXYtPmNvbXBsZXRlOworCXZvaWQgKmRhdGEgPSBwcml2LT5kYXRhOworCisJYWhhc2hfb3BfdW5hbGlnbmVkX2ZpbmlzaChhcmVxLCBlcnIpOworCisJY29tcGxldGUoZGF0YSwgZXJyKTsKK30KKworc3RhdGljIGludCBhaGFzaF9vcF91bmFsaWduZWQoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSwKKwkJCSAgICAgIGludCAoKm9wKShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqKSkKIHsKIAlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0gPSBjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSk7Ci0Jc3RydWN0IGFoYXNoX2FsZyAqYWxnID0gY3J5cHRvX2FoYXNoX2FsZyh0Zm0pOworCXVuc2lnbmVkIGxvbmcgYWxpZ25tYXNrID0gY3J5cHRvX2FoYXNoX2FsaWdubWFzayh0Zm0pOworCXVuc2lnbmVkIGludCBkcyA9IGNyeXB0b19haGFzaF9kaWdlc3RzaXplKHRmbSk7CisJc3RydWN0IGFoYXNoX3JlcXVlc3RfcHJpdiAqcHJpdjsKKwlpbnQgZXJyOwogCi0JbWVtY3B5KGFoYXNoX3JlcXVlc3RfY3R4KHJlcSksIGluLCBjcnlwdG9fYWhhc2hfcmVxc2l6ZSh0Zm0pKTsKKwlwcml2ID0ga21hbGxvYyhzaXplb2YoKnByaXYpICsgYWhhc2hfYWxpZ25fYnVmZmVyX3NpemUoZHMsIGFsaWdubWFzayksCisJCSAgICAgICAocmVxLT5iYXNlLmZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQKSA/CisJCSAgICAgICBHRlBfS0VSTkVMIDogR0ZQX0FUT01JQyk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChhbGctPnJlaW5pdCkKLQkJYWxnLT5yZWluaXQocmVxKTsKKwlwcml2LT5yZXN1bHQgPSByZXEtPnJlc3VsdDsKKwlwcml2LT5jb21wbGV0ZSA9IHJlcS0+YmFzZS5jb21wbGV0ZTsKKwlwcml2LT5kYXRhID0gcmVxLT5iYXNlLmRhdGE7CisKKwlyZXEtPnJlc3VsdCA9IFBUUl9BTElHTigodTggKilwcml2LT51YnVmLCBhbGlnbm1hc2sgKyAxKTsKKwlyZXEtPmJhc2UuY29tcGxldGUgPSBhaGFzaF9vcF91bmFsaWduZWRfZG9uZTsKKwlyZXEtPmJhc2UuZGF0YSA9IHJlcTsKKwlyZXEtPnByaXYgPSBwcml2OworCisJZXJyID0gb3AocmVxKTsKKwlhaGFzaF9vcF91bmFsaWduZWRfZmluaXNoKHJlcSwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX2FoYXNoX29wKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsCisJCQkgICBpbnQgKCpvcCkoc3RydWN0IGFoYXNoX3JlcXVlc3QgKikpCit7CisJc3RydWN0IGNyeXB0b19haGFzaCAqdGZtID0gY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpOworCXVuc2lnbmVkIGxvbmcgYWxpZ25tYXNrID0gY3J5cHRvX2FoYXNoX2FsaWdubWFzayh0Zm0pOworCisJaWYgKCh1bnNpZ25lZCBsb25nKXJlcS0+cmVzdWx0ICYgYWxpZ25tYXNrKQorCQlyZXR1cm4gYWhhc2hfb3BfdW5hbGlnbmVkKHJlcSwgb3ApOworCisJcmV0dXJuIG9wKHJlcSk7Cit9CisKK2ludCBjcnlwdG9fYWhhc2hfZmluYWwoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gY3J5cHRvX2FoYXNoX29wKHJlcSwgY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpLT5maW5hbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWhhc2hfZmluYWwpOworCitpbnQgY3J5cHRvX2FoYXNoX2ZpbnVwKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGNyeXB0b19haGFzaF9vcChyZXEsIGNyeXB0b19haGFzaF9yZXF0Zm0ocmVxKS0+ZmludXApOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2FoYXNoX2ZpbnVwKTsKKworaW50IGNyeXB0b19haGFzaF9kaWdlc3Qoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gY3J5cHRvX2FoYXNoX29wKHJlcSwgY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpLT5kaWdlc3QpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2FoYXNoX2RpZ2VzdCk7CisKK3N0YXRpYyB2b2lkIGFoYXNoX2RlZl9maW51cF9maW5pc2gyKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIGludCBlcnIpCit7CisJc3RydWN0IGFoYXNoX3JlcXVlc3RfcHJpdiAqcHJpdiA9IHJlcS0+cHJpdjsKKworCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm47CisKKwlpZiAoIWVycikKKwkJbWVtY3B5KHByaXYtPnJlc3VsdCwgcmVxLT5yZXN1bHQsCisJCSAgICAgICBjcnlwdG9fYWhhc2hfZGlnZXN0c2l6ZShjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSkpKTsKKworCWt6ZnJlZShwcml2KTsKK30KKworc3RhdGljIHZvaWQgYWhhc2hfZGVmX2ZpbnVwX2RvbmUyKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQoreworCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICphcmVxID0gcmVxLT5kYXRhOworCXN0cnVjdCBhaGFzaF9yZXF1ZXN0X3ByaXYgKnByaXYgPSBhcmVxLT5wcml2OworCWNyeXB0b19jb21wbGV0aW9uX3QgY29tcGxldGUgPSBwcml2LT5jb21wbGV0ZTsKKwl2b2lkICpkYXRhID0gcHJpdi0+ZGF0YTsKKworCWFoYXNoX2RlZl9maW51cF9maW5pc2gyKGFyZXEsIGVycik7CisKKwljb21wbGV0ZShkYXRhLCBlcnIpOworfQorCitzdGF0aWMgaW50IGFoYXNoX2RlZl9maW51cF9maW5pc2gxKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIGludCBlcnIpCit7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlyZXEtPmJhc2UuY29tcGxldGUgPSBhaGFzaF9kZWZfZmludXBfZG9uZTI7CisJcmVxLT5iYXNlLmZsYWdzICY9IH5DUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisJZXJyID0gY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpLT5maW5hbChyZXEpOworCitvdXQ6CisJYWhhc2hfZGVmX2ZpbnVwX2ZpbmlzaDIocmVxLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGFoYXNoX2RlZl9maW51cF9kb25lMShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwgaW50IGVycikKK3sKKwlzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqYXJlcSA9IHJlcS0+ZGF0YTsKKwlzdHJ1Y3QgYWhhc2hfcmVxdWVzdF9wcml2ICpwcml2ID0gYXJlcS0+cHJpdjsKKwljcnlwdG9fY29tcGxldGlvbl90IGNvbXBsZXRlID0gcHJpdi0+Y29tcGxldGU7CisJdm9pZCAqZGF0YSA9IHByaXYtPmRhdGE7CisKKwllcnIgPSBhaGFzaF9kZWZfZmludXBfZmluaXNoMShhcmVxLCBlcnIpOworCisJY29tcGxldGUoZGF0YSwgZXJyKTsKK30KKworc3RhdGljIGludCBhaGFzaF9kZWZfZmludXAoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0gPSBjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSk7CisJdW5zaWduZWQgbG9uZyBhbGlnbm1hc2sgPSBjcnlwdG9fYWhhc2hfYWxpZ25tYXNrKHRmbSk7CisJdW5zaWduZWQgaW50IGRzID0gY3J5cHRvX2FoYXNoX2RpZ2VzdHNpemUodGZtKTsKKwlzdHJ1Y3QgYWhhc2hfcmVxdWVzdF9wcml2ICpwcml2OworCisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKCpwcml2KSArIGFoYXNoX2FsaWduX2J1ZmZlcl9zaXplKGRzLCBhbGlnbm1hc2spLAorCQkgICAgICAgKHJlcS0+YmFzZS5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUCkgPworCQkgICAgICAgR0ZQX0tFUk5FTCA6IEdGUF9BVE9NSUMpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5yZXN1bHQgPSByZXEtPnJlc3VsdDsKKwlwcml2LT5jb21wbGV0ZSA9IHJlcS0+YmFzZS5jb21wbGV0ZTsKKwlwcml2LT5kYXRhID0gcmVxLT5iYXNlLmRhdGE7CisKKwlyZXEtPnJlc3VsdCA9IFBUUl9BTElHTigodTggKilwcml2LT51YnVmLCBhbGlnbm1hc2sgKyAxKTsKKwlyZXEtPmJhc2UuY29tcGxldGUgPSBhaGFzaF9kZWZfZmludXBfZG9uZTE7CisJcmVxLT5iYXNlLmRhdGEgPSByZXE7CisJcmVxLT5wcml2ID0gcHJpdjsKKworCXJldHVybiBhaGFzaF9kZWZfZmludXBfZmluaXNoMShyZXEsIHRmbS0+dXBkYXRlKHJlcSkpOworfQorCitzdGF0aWMgaW50IGFoYXNoX25vX2V4cG9ydChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLCB2b2lkICpvdXQpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbnQgYWhhc2hfbm9faW1wb3J0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIGNvbnN0IHZvaWQgKmluKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW50IGNyeXB0b19haGFzaF9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBjcnlwdG9fYWhhc2ggKmhhc2ggPSBfX2NyeXB0b19haGFzaF9jYXN0KHRmbSk7CisJc3RydWN0IGFoYXNoX2FsZyAqYWxnID0gY3J5cHRvX2FoYXNoX2FsZyhoYXNoKTsKKworCWhhc2gtPnNldGtleSA9IGFoYXNoX25vc2V0a2V5OworCWhhc2gtPmV4cG9ydCA9IGFoYXNoX25vX2V4cG9ydDsKKwloYXNoLT5pbXBvcnQgPSBhaGFzaF9ub19pbXBvcnQ7CisKKwlpZiAodGZtLT5fX2NydF9hbGctPmNyYV90eXBlICE9ICZjcnlwdG9fYWhhc2hfdHlwZSkKKwkJcmV0dXJuIGNyeXB0b19pbml0X3NoYXNoX29wc19hc3luYyh0Zm0pOworCisJaGFzaC0+aW5pdCA9IGFsZy0+aW5pdDsKKwloYXNoLT51cGRhdGUgPSBhbGctPnVwZGF0ZTsKKwloYXNoLT5maW5hbCA9IGFsZy0+ZmluYWw7CisJaGFzaC0+ZmludXAgPSBhbGctPmZpbnVwID86IGFoYXNoX2RlZl9maW51cDsKKwloYXNoLT5kaWdlc3QgPSBhbGctPmRpZ2VzdDsKKworCWlmIChhbGctPnNldGtleSkKKwkJaGFzaC0+c2V0a2V5ID0gYWxnLT5zZXRrZXk7CisJaWYgKGFsZy0+ZXhwb3J0KQorCQloYXNoLT5leHBvcnQgPSBhbGctPmV4cG9ydDsKKwlpZiAoYWxnLT5pbXBvcnQpCisJCWhhc2gtPmltcG9ydCA9IGFsZy0+aW1wb3J0OwogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWhhc2hfaW1wb3J0KTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBjcnlwdG9fYWhhc2hfY3R4c2l6ZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLCB1MzIgdHlwZSwKLQkJCQkJdTMyIG1hc2spCitzdGF0aWMgdW5zaWduZWQgaW50IGNyeXB0b19haGFzaF9leHRzaXplKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCiB7Ci0JcmV0dXJuIGFsZy0+Y3JhX2N0eHNpemU7Ci19CisJaWYgKGFsZy0+Y3JhX3R5cGUgPT0gJmNyeXB0b19haGFzaF90eXBlKQorCQlyZXR1cm4gYWxnLT5jcmFfY3R4c2l6ZTsKIAotc3RhdGljIGludCBjcnlwdG9faW5pdF9haGFzaF9vcHMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTMyIHR5cGUsIHUzMiBtYXNrKQotewotCXN0cnVjdCBhaGFzaF9hbGcgKmFsZyA9ICZ0Zm0tPl9fY3J0X2FsZy0+Y3JhX2FoYXNoOwotCXN0cnVjdCBhaGFzaF90Zm0gKmNydCAgID0gJnRmbS0+Y3J0X2FoYXNoOwotCi0JaWYgKGFsZy0+ZGlnZXN0c2l6ZSA+IFBBR0VfU0laRSAvIDgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY3J0LT5pbml0ID0gYWxnLT5pbml0OwotCWNydC0+dXBkYXRlID0gYWxnLT51cGRhdGU7Ci0JY3J0LT5maW5hbCAgPSBhbGctPmZpbmFsOwotCWNydC0+ZGlnZXN0ID0gYWxnLT5kaWdlc3Q7Ci0JY3J0LT5zZXRrZXkgPSBhbGctPnNldGtleSA/IGFoYXNoX3NldGtleSA6IGFoYXNoX25vc2V0a2V5OwotCWNydC0+ZGlnZXN0c2l6ZSA9IGFsZy0+ZGlnZXN0c2l6ZTsKLQotCXJldHVybiAwOworCXJldHVybiBzaXplb2Yoc3RydWN0IGNyeXB0b19zaGFzaCAqKTsKIH0KIAogc3RhdGljIHZvaWQgY3J5cHRvX2FoYXNoX3Nob3coc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQpAQCAtMjE1LDE3ICs0MDMsMTAxIEBACiAJc2VxX3ByaW50ZihtLCAiYXN5bmMgICAgICAgIDogJXNcbiIsIGFsZy0+Y3JhX2ZsYWdzICYgQ1JZUFRPX0FMR19BU1lOQyA/CiAJCQkJCSAgICAgInllcyIgOiAibm8iKTsKIAlzZXFfcHJpbnRmKG0sICJibG9ja3NpemUgICAgOiAldVxuIiwgYWxnLT5jcmFfYmxvY2tzaXplKTsKLQlzZXFfcHJpbnRmKG0sICJkaWdlc3RzaXplICAgOiAldVxuIiwgYWxnLT5jcmFfYWhhc2guZGlnZXN0c2l6ZSk7CisJc2VxX3ByaW50ZihtLCAiZGlnZXN0c2l6ZSAgIDogJXVcbiIsCisJCSAgIF9fY3J5cHRvX2hhc2hfYWxnX2NvbW1vbihhbGcpLT5kaWdlc3RzaXplKTsKIH0KIAogY29uc3Qgc3RydWN0IGNyeXB0b190eXBlIGNyeXB0b19haGFzaF90eXBlID0gewotCS5jdHhzaXplID0gY3J5cHRvX2FoYXNoX2N0eHNpemUsCi0JLmluaXQgPSBjcnlwdG9faW5pdF9haGFzaF9vcHMsCisJLmV4dHNpemUgPSBjcnlwdG9fYWhhc2hfZXh0c2l6ZSwKKwkuaW5pdF90Zm0gPSBjcnlwdG9fYWhhc2hfaW5pdF90Zm0sCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAkuc2hvdyA9IGNyeXB0b19haGFzaF9zaG93LAogI2VuZGlmCisJLm1hc2tjbGVhciA9IH5DUllQVE9fQUxHX1RZUEVfTUFTSywKKwkubWFza3NldCA9IENSWVBUT19BTEdfVFlQRV9BSEFTSF9NQVNLLAorCS50eXBlID0gQ1JZUFRPX0FMR19UWVBFX0FIQVNILAorCS50Zm1zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGNyeXB0b19haGFzaCwgYmFzZSksCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2FoYXNoX3R5cGUpOwogCitzdHJ1Y3QgY3J5cHRvX2FoYXNoICpjcnlwdG9fYWxsb2NfYWhhc2goY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0eXBlLAorCQkJCQl1MzIgbWFzaykKK3sKKwlyZXR1cm4gY3J5cHRvX2FsbG9jX3RmbShhbGdfbmFtZSwgJmNyeXB0b19haGFzaF90eXBlLCB0eXBlLCBtYXNrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hbGxvY19haGFzaCk7CisKK3N0YXRpYyBpbnQgYWhhc2hfcHJlcGFyZV9hbGcoc3RydWN0IGFoYXNoX2FsZyAqYWxnKQoreworCXN0cnVjdCBjcnlwdG9fYWxnICpiYXNlID0gJmFsZy0+aGFsZy5iYXNlOworCisJaWYgKGFsZy0+aGFsZy5kaWdlc3RzaXplID4gUEFHRV9TSVpFIC8gOCB8fAorCSAgICBhbGctPmhhbGcuc3RhdGVzaXplID4gUEFHRV9TSVpFIC8gOCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliYXNlLT5jcmFfdHlwZSA9ICZjcnlwdG9fYWhhc2hfdHlwZTsKKwliYXNlLT5jcmFfZmxhZ3MgJj0gfkNSWVBUT19BTEdfVFlQRV9NQVNLOworCWJhc2UtPmNyYV9mbGFncyB8PSBDUllQVE9fQUxHX1RZUEVfQUhBU0g7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNyeXB0b19yZWdpc3Rlcl9haGFzaChzdHJ1Y3QgYWhhc2hfYWxnICphbGcpCit7CisJc3RydWN0IGNyeXB0b19hbGcgKmJhc2UgPSAmYWxnLT5oYWxnLmJhc2U7CisJaW50IGVycjsKKworCWVyciA9IGFoYXNoX3ByZXBhcmVfYWxnKGFsZyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKGJhc2UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3JlZ2lzdGVyX2FoYXNoKTsKKworaW50IGNyeXB0b191bnJlZ2lzdGVyX2FoYXNoKHN0cnVjdCBhaGFzaF9hbGcgKmFsZykKK3sKKwlyZXR1cm4gY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGctPmhhbGcuYmFzZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fdW5yZWdpc3Rlcl9haGFzaCk7CisKK2ludCBhaGFzaF9yZWdpc3Rlcl9pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0bXBsLAorCQkJICAgIHN0cnVjdCBhaGFzaF9pbnN0YW5jZSAqaW5zdCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gYWhhc2hfcHJlcGFyZV9hbGcoJmluc3QtPmFsZyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfaW5zdGFuY2UodG1wbCwgYWhhc2hfY3J5cHRvX2luc3RhbmNlKGluc3QpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFoYXNoX3JlZ2lzdGVyX2luc3RhbmNlKTsKKwordm9pZCBhaGFzaF9mcmVlX2luc3RhbmNlKHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QpCit7CisJY3J5cHRvX2Ryb3Bfc3Bhd24oY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KSk7CisJa2ZyZWUoYWhhc2hfaW5zdGFuY2UoaW5zdCkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWhhc2hfZnJlZV9pbnN0YW5jZSk7CisKK2ludCBjcnlwdG9faW5pdF9haGFzaF9zcGF3bihzdHJ1Y3QgY3J5cHRvX2FoYXNoX3NwYXduICpzcGF3biwKKwkJCSAgICBzdHJ1Y3QgaGFzaF9hbGdfY29tbW9uICphbGcsCisJCQkgICAgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCkKK3sKKwlyZXR1cm4gY3J5cHRvX2luaXRfc3Bhd24yKCZzcGF3bi0+YmFzZSwgJmFsZy0+YmFzZSwgaW5zdCwKKwkJCQkgICZjcnlwdG9fYWhhc2hfdHlwZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9faW5pdF9haGFzaF9zcGF3bik7CisKK3N0cnVjdCBoYXNoX2FsZ19jb21tb24gKmFoYXNoX2F0dHJfYWxnKHN0cnVjdCBydGF0dHIgKnJ0YSwgdTMyIHR5cGUsIHUzMiBtYXNrKQoreworCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CisKKwlhbGcgPSBjcnlwdG9fYXR0cl9hbGcyKHJ0YSwgJmNyeXB0b19haGFzaF90eXBlLCB0eXBlLCBtYXNrKTsKKwlyZXR1cm4gSVNfRVJSKGFsZykgPyBFUlJfQ0FTVChhbGcpIDogX19jcnlwdG9faGFzaF9hbGdfY29tbW9uKGFsZyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhaGFzaF9hdHRyX2FsZyk7CisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQXN5bmNocm9ub3VzIGNyeXB0b2dyYXBoaWMgaGFzaCB0eXBlIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vYWxnYXBpLmMgYi9jcnlwdG8vYWxnYXBpLmMKaW5kZXggZGYwODYzZC4uZjE0OWIxYyAxMDA2NDQKLS0tIGEvY3J5cHRvL2FsZ2FwaS5jCisrKyBiL2NyeXB0by9hbGdhcGkuYwpAQCAtODEsMTYgKzgxLDM1IEBACiAJY3J5cHRvX3RtcGxfcHV0KHRtcGwpOwogfQogCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqY3J5cHRvX21vcmVfc3Bhd25zKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCisJCQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpzdGFjaywKKwkJCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRvcCwKKwkJCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKnNlY29uZGFyeV9zcGF3bnMpCit7CisJc3RydWN0IGNyeXB0b19zcGF3biAqc3Bhd24sICpuOworCisJaWYgKGxpc3RfZW1wdHkoc3RhY2spKQorCQlyZXR1cm4gTlVMTDsKKworCXNwYXduID0gbGlzdF9maXJzdF9lbnRyeShzdGFjaywgc3RydWN0IGNyeXB0b19zcGF3biwgbGlzdCk7CisJbiA9IGxpc3RfZW50cnkoc3Bhd24tPmxpc3QubmV4dCwgc3RydWN0IGNyeXB0b19zcGF3biwgbGlzdCk7CisKKwlpZiAoc3Bhd24tPmFsZyAmJiAmbi0+bGlzdCAhPSBzdGFjayAmJiAhbi0+YWxnKQorCQluLT5hbGcgPSAobi0+bGlzdC5uZXh0ID09IHN0YWNrKSA/IGFsZyA6CisJCQkgJmxpc3RfZW50cnkobi0+bGlzdC5uZXh0LCBzdHJ1Y3QgY3J5cHRvX3NwYXduLAorCQkJCSAgICAgbGlzdCktPmluc3QtPmFsZzsKKworCWxpc3RfbW92ZSgmc3Bhd24tPmxpc3QsIHNlY29uZGFyeV9zcGF3bnMpOworCisJcmV0dXJuICZuLT5saXN0ID09IHN0YWNrID8gdG9wIDogJm4tPmluc3QtPmFsZy5jcmFfdXNlcnM7Cit9CisKIHN0YXRpYyB2b2lkIGNyeXB0b19yZW1vdmVfc3Bhd24oc3RydWN0IGNyeXB0b19zcGF3biAqc3Bhd24sCi0JCQkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKLQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpzZWNvbmRhcnlfc3Bhd25zKQorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7CiAJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCA9IHNwYXduLT5pbnN0OwogCXN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKnRtcGwgPSBpbnN0LT50bXBsOwogCi0JbGlzdF9kZWxfaW5pdCgmc3Bhd24tPmxpc3QpOwotCXNwYXduLT5hbGcgPSBOVUxMOwotCiAJaWYgKGNyeXB0b19pc19kZWFkKCZpbnN0LT5hbGcpKQogCQlyZXR1cm47CiAKQEAgLTEwNiwyNSArMTI1LDU1IEBACiAJaGxpc3RfZGVsKCZpbnN0LT5saXN0KTsKIAlpbnN0LT5hbGcuY3JhX2Rlc3Ryb3kgPSBjcnlwdG9fZGVzdHJveV9pbnN0YW5jZTsKIAotCWxpc3Rfc3BsaWNlKCZpbnN0LT5hbGcuY3JhX3VzZXJzLCBzZWNvbmRhcnlfc3Bhd25zKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmluc3QtPmFsZy5jcmFfdXNlcnMpKTsKIH0KIAotc3RhdGljIHZvaWQgY3J5cHRvX3JlbW92ZV9zcGF3bnMoc3RydWN0IGxpc3RfaGVhZCAqc3Bhd25zLAotCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCB1MzIgbmV3X3R5cGUpCitzdGF0aWMgdm9pZCBjcnlwdG9fcmVtb3ZlX3NwYXducyhzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAorCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCSBzdHJ1Y3QgY3J5cHRvX2FsZyAqbmFsZykKIHsKKwl1MzIgbmV3X3R5cGUgPSAobmFsZyA/OiBhbGcpLT5jcmFfZmxhZ3M7CiAJc3RydWN0IGNyeXB0b19zcGF3biAqc3Bhd24sICpuOwogCUxJU1RfSEVBRChzZWNvbmRhcnlfc3Bhd25zKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpzcGF3bnM7CisJTElTVF9IRUFEKHN0YWNrKTsKKwlMSVNUX0hFQUQodG9wKTsKIAorCXNwYXducyA9ICZhbGctPmNyYV91c2VyczsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3Bhd24sIG4sIHNwYXducywgbGlzdCkgewogCQlpZiAoKHNwYXduLT5hbGctPmNyYV9mbGFncyBeIG5ld190eXBlKSAmIHNwYXduLT5tYXNrKQogCQkJY29udGludWU7CiAKLQkJY3J5cHRvX3JlbW92ZV9zcGF3bihzcGF3biwgbGlzdCwgJnNlY29uZGFyeV9zcGF3bnMpOworCQlsaXN0X21vdmUoJnNwYXduLT5saXN0LCAmdG9wKTsKIAl9CiAKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnNlY29uZGFyeV9zcGF3bnMpKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzcGF3biwgbiwgJnNlY29uZGFyeV9zcGF3bnMsIGxpc3QpCi0JCQljcnlwdG9fcmVtb3ZlX3NwYXduKHNwYXduLCBsaXN0LCAmc2Vjb25kYXJ5X3NwYXducyk7CisJc3Bhd25zID0gJnRvcDsKKwlkbyB7CisJCXdoaWxlICghbGlzdF9lbXB0eShzcGF3bnMpKSB7CisJCQlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OworCisJCQlzcGF3biA9IGxpc3RfZmlyc3RfZW50cnkoc3Bhd25zLCBzdHJ1Y3QgY3J5cHRvX3NwYXduLAorCQkJCQkJIGxpc3QpOworCQkJaW5zdCA9IHNwYXduLT5pbnN0OworCisJCQlCVUdfT04oJmluc3QtPmFsZyA9PSBhbGcpOworCisJCQlsaXN0X21vdmUoJnNwYXduLT5saXN0LCAmc3RhY2spOworCisJCQlpZiAoJmluc3QtPmFsZyA9PSBuYWxnKQorCQkJCWJyZWFrOworCisJCQlzcGF3bi0+YWxnID0gTlVMTDsKKwkJCXNwYXducyA9ICZpbnN0LT5hbGcuY3JhX3VzZXJzOworCQl9CisJfSB3aGlsZSAoKHNwYXducyA9IGNyeXB0b19tb3JlX3NwYXducyhhbGcsICZzdGFjaywgJnRvcCwKKwkJCQkJICAgICAgJnNlY29uZGFyeV9zcGF3bnMpKSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3Bhd24sIG4sICZzZWNvbmRhcnlfc3Bhd25zLCBsaXN0KSB7CisJCWlmIChzcGF3bi0+YWxnKQorCQkJbGlzdF9tb3ZlKCZzcGF3bi0+bGlzdCwgJnNwYXduLT5hbGctPmNyYV91c2Vycyk7CisJCWVsc2UKKwkJCWNyeXB0b19yZW1vdmVfc3Bhd24oc3Bhd24sIGxpc3QpOwogCX0KIH0KIApAQCAtMjU4LDcgKzMwNyw3IEBACiAJCSAgICBxLT5jcmFfcHJpb3JpdHkgPiBhbGctPmNyYV9wcmlvcml0eSkKIAkJCWNvbnRpbnVlOwogCi0JCWNyeXB0b19yZW1vdmVfc3Bhd25zKCZxLT5jcmFfdXNlcnMsICZsaXN0LCBhbGctPmNyYV9mbGFncyk7CisJCWNyeXB0b19yZW1vdmVfc3Bhd25zKHEsICZsaXN0LCBhbGcpOwogCX0KIAogY29tcGxldGU6CkBAIC0zMzAsNyArMzc5LDcgQEAKIAogCWNyeXB0b19ub3RpZnkoQ1JZUFRPX01TR19BTEdfVU5SRUdJU1RFUiwgYWxnKTsKIAlsaXN0X2RlbF9pbml0KCZhbGctPmNyYV9saXN0KTsKLQljcnlwdG9fcmVtb3ZlX3NwYXducygmYWxnLT5jcmFfdXNlcnMsIGxpc3QsIGFsZy0+Y3JhX2ZsYWdzKTsKKwljcnlwdG9fcmVtb3ZlX3NwYXducyhhbGcsIGxpc3QsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00ODgsMjAgKzUzNywzOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2luaXRfc3Bhd24pOwogCitpbnQgY3J5cHRvX2luaXRfc3Bhd24yKHN0cnVjdCBjcnlwdG9fc3Bhd24gKnNwYXduLCBzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAorCQkgICAgICAgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpCit7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoZnJvbnRlbmQgJiYgKGFsZy0+Y3JhX2ZsYWdzIF4gZnJvbnRlbmQtPnR5cGUpICYgZnJvbnRlbmQtPm1hc2tzZXQpCisJCWdvdG8gb3V0OworCisJc3Bhd24tPmZyb250ZW5kID0gZnJvbnRlbmQ7CisJZXJyID0gY3J5cHRvX2luaXRfc3Bhd24oc3Bhd24sIGFsZywgaW5zdCwgZnJvbnRlbmQtPm1hc2tzZXQpOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19pbml0X3NwYXduMik7CisKIHZvaWQgY3J5cHRvX2Ryb3Bfc3Bhd24oc3RydWN0IGNyeXB0b19zcGF3biAqc3Bhd24pCiB7CisJaWYgKCFzcGF3bi0+YWxnKQorCQlyZXR1cm47CisKIAlkb3duX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7CiAJbGlzdF9kZWwoJnNwYXduLT5saXN0KTsKIAl1cF93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2Ryb3Bfc3Bhd24pOwogCi1zdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX3NwYXduX3RmbShzdHJ1Y3QgY3J5cHRvX3NwYXduICpzcGF3biwgdTMyIHR5cGUsCi0JCQkJICAgIHUzMiBtYXNrKQorc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fc3Bhd25fYWxnKHN0cnVjdCBjcnlwdG9fc3Bhd24gKnNwYXduKQogewogCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZzI7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKIAogCWRvd25fcmVhZCgmY3J5cHRvX2FsZ19zZW0pOwogCWFsZyA9IHNwYXduLT5hbGc7CkBAIC01MTYsNiArNTgzLDE5IEBACiAJCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOwogCX0KIAorCXJldHVybiBhbGc7Cit9CisKK3N0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fc3Bhd25fdGZtKHN0cnVjdCBjcnlwdG9fc3Bhd24gKnNwYXduLCB1MzIgdHlwZSwKKwkJCQkgICAgdTMyIG1hc2spCit7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCisJYWxnID0gY3J5cHRvX3NwYXduX2FsZyhzcGF3bik7CisJaWYgKElTX0VSUihhbGcpKQorCQlyZXR1cm4gRVJSX0NBU1QoYWxnKTsKKwogCXRmbSA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJaWYgKHVubGlrZWx5KChhbGctPmNyYV9mbGFncyBeIHR5cGUpICYgbWFzaykpCiAJCWdvdG8gb3V0X3B1dF9hbGc7CkBAIC01MzIsNiArNjEyLDI3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fc3Bhd25fdGZtKTsKIAordm9pZCAqY3J5cHRvX3NwYXduX3RmbTIoc3RydWN0IGNyeXB0b19zcGF3biAqc3Bhd24pCit7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCisJYWxnID0gY3J5cHRvX3NwYXduX2FsZyhzcGF3bik7CisJaWYgKElTX0VSUihhbGcpKQorCQlyZXR1cm4gRVJSX0NBU1QoYWxnKTsKKworCXRmbSA9IGNyeXB0b19jcmVhdGVfdGZtKGFsZywgc3Bhd24tPmZyb250ZW5kKTsKKwlpZiAoSVNfRVJSKHRmbSkpCisJCWdvdG8gb3V0X3B1dF9hbGc7CisKKwlyZXR1cm4gdGZtOworCitvdXRfcHV0X2FsZzoKKwljcnlwdG9fbW9kX3B1dChhbGcpOworCXJldHVybiB0Zm07Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fc3Bhd25fdGZtMik7CisKIGludCBjcnlwdG9fcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKIHsKIAlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmNyeXB0b19jaGFpbiwgbmIpOwpAQCAtNTk1LDcgKzY5Niw5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYXR0cl9hbGdfbmFtZSk7CiAKLXN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYXR0cl9hbGcoc3RydWN0IHJ0YXR0ciAqcnRhLCB1MzIgdHlwZSwgdTMyIG1hc2spCitzdHJ1Y3QgY3J5cHRvX2FsZyAqY3J5cHRvX2F0dHJfYWxnMihzdHJ1Y3QgcnRhdHRyICpydGEsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQsCisJCQkJICAgIHUzMiB0eXBlLCB1MzIgbWFzaykKIHsKIAljb25zdCBjaGFyICpuYW1lOwogCWludCBlcnI7CkBAIC02MDUsOSArNzA4LDkgQEAKIAlpZiAoSVNfRVJSKG5hbWUpKQogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCi0JcmV0dXJuIGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCB0eXBlLCBtYXNrKTsKKwlyZXR1cm4gY3J5cHRvX2ZpbmRfYWxnKG5hbWUsIGZyb250ZW5kLCB0eXBlLCBtYXNrKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hdHRyX2FsZyk7CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYXR0cl9hbGcyKTsKIAogaW50IGNyeXB0b19hdHRyX3UzMihzdHJ1Y3QgcnRhdHRyICpydGEsIHUzMiAqbnVtKQogewpAQCAtNjI3LDE3ICs3MzAsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hdHRyX3UzMik7CiAKLXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0b19hbGxvY19pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotCQkJCQkgICAgICBzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQordm9pZCAqY3J5cHRvX2FsbG9jX2luc3RhbmNlMihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAorCQkJICAgICB1bnNpZ25lZCBpbnQgaGVhZCkKIHsKIAlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OwotCXN0cnVjdCBjcnlwdG9fc3Bhd24gKnNwYXduOworCWNoYXIgKnA7CiAJaW50IGVycjsKIAotCWluc3QgPSBremFsbG9jKHNpemVvZigqaW5zdCkgKyBzaXplb2YoKnNwYXduKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbnN0KQorCXAgPSBremFsbG9jKGhlYWQgKyBzaXplb2YoKmluc3QpICsgc2l6ZW9mKHN0cnVjdCBjcnlwdG9fc3Bhd24pLAorCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAorCWluc3QgPSAodm9pZCAqKShwICsgaGVhZCk7CisKIAllcnIgPSAtRU5BTUVUT09MT05HOwogCWlmIChzbnByaW50ZihpbnN0LT5hbGcuY3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUsICIlcyglcykiLCBuYW1lLAogCQkgICAgIGFsZy0+Y3JhX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCkBAIC02NDcsNiArNzUzLDI1IEBACiAJCSAgICAgbmFtZSwgYWxnLT5jcmFfZHJpdmVyX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCiAJCWdvdG8gZXJyX2ZyZWVfaW5zdDsKIAorCXJldHVybiBwOworCitlcnJfZnJlZV9pbnN0OgorCWtmcmVlKHApOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWxsb2NfaW5zdGFuY2UyKTsKKworc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqY3J5cHRvX2FsbG9jX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgICAgIHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCit7CisJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdDsKKwlzdHJ1Y3QgY3J5cHRvX3NwYXduICpzcGF3bjsKKwlpbnQgZXJyOworCisJaW5zdCA9IGNyeXB0b19hbGxvY19pbnN0YW5jZTIobmFtZSwgYWxnLCAwKTsKKwlpZiAoSVNfRVJSKGluc3QpKQorCQlnb3RvIG91dDsKKwogCXNwYXduID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKIAllcnIgPSBjcnlwdG9faW5pdF9zcGF3bihzcGF3biwgYWxnLCBpbnN0LAogCQkJCUNSWVBUT19BTEdfVFlQRV9NQVNLIHwgQ1JZUFRPX0FMR19BU1lOQyk7CkBAIC02NTgsNyArNzgzLDEwIEBACiAKIGVycl9mcmVlX2luc3Q6CiAJa2ZyZWUoaW5zdCk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwlpbnN0ID0gRVJSX1BUUihlcnIpOworCitvdXQ6CisJcmV0dXJuIGluc3Q7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWxsb2NfaW5zdGFuY2UpOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vYWxnYm9zcy5jIGIvY3J5cHRvL2FsZ2Jvc3MuYwppbmRleCA5OTA4ZGQ4Li40MTIyNDFjIDEwMDY0NAotLS0gYS9jcnlwdG8vYWxnYm9zcy5jCisrKyBiL2NyeXB0by9hbGdib3NzLmMKQEAgLTY4LDYgKzY4LDExIEBACiAJCWdvdG8gZXJyOwogCiAJZG8geworCQlpZiAodG1wbC0+Y3JlYXRlKSB7CisJCQllcnIgPSB0bXBsLT5jcmVhdGUodG1wbCwgcGFyYW0tPnRiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJaW5zdCA9IHRtcGwtPmFsbG9jKHBhcmFtLT50Yik7CiAJCWlmIChJU19FUlIoaW5zdCkpCiAJCQllcnIgPSBQVFJfRVJSKGluc3QpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Fuc2lfY3BybmcuYyBiL2NyeXB0by9hbnNpX2Nwcm5nLmMKaW5kZXggZDgwZWQ0Yy4uM2FhNmUzOCAxMDA2NDQKLS0tIGEvY3J5cHRvL2Fuc2lfY3BybmcuYworKysgYi9jcnlwdG8vYW5zaV9jcHJuZy5jCkBAIC0xODcsNyArMTg3LDYgQEAKIC8qIE91ciBleHBvcnRlZCBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbnQgZ2V0X3BybmdfYnl0ZXMoY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBzdHJ1Y3QgcHJuZ19jb250ZXh0ICpjdHgpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyICpwdHIgPSBidWY7CiAJdW5zaWduZWQgaW50IGJ5dGVfY291bnQgPSAodW5zaWduZWQgaW50KW5ieXRlczsKIAlpbnQgZXJyOwpAQCAtMTk2LDcgKzE5NSw3IEBACiAJaWYgKG5ieXRlcyA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+cHJuZ19sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2JoKCZjdHgtPnBybmdfbG9jayk7CiAKIAllcnIgPSAtRUlOVkFMOwogCWlmIChjdHgtPmZsYWdzICYgUFJOR19ORUVEX1JFU0VUKQpAQCAtMjY4LDcgKzI2Nyw3IEBACiAJCWdvdG8gcmVtYWluZGVyOwogCiBkb25lOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+cHJuZ19sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfYmgoJmN0eC0+cHJuZ19sb2NrKTsKIAlkYmdwcmludChLRVJOX0NSSVQgInJldHVybmluZyAlZCBmcm9tIGdldF9wcm5nX2J5dGVzIGluIGNvbnRleHQgJXBcbiIsCiAJCWVyciwgY3R4KTsKIAlyZXR1cm4gZXJyOwpAQCAtMjg0LDEwICsyODMsOSBAQAogCQkJICAgICAgdW5zaWduZWQgY2hhciAqViwgdW5zaWduZWQgY2hhciAqRFQpCiB7CiAJaW50IHJldDsKLQlpbnQgcmMgPSAtRUlOVkFMOwogCXVuc2lnbmVkIGNoYXIgKnBybmdfa2V5OwogCi0Jc3Bpbl9sb2NrKCZjdHgtPnBybmdfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZjdHgtPnBybmdfbG9jayk7CiAJY3R4LT5mbGFncyB8PSBQUk5HX05FRURfUkVTRVQ7CiAKIAlwcm5nX2tleSA9IChrZXkgIT0gTlVMTCkgPyBrZXkgOiAodW5zaWduZWQgY2hhciAqKURFRkFVTFRfUFJOR19LRVk7CkBAIC0zMDgsMzQgKzMwNiwyMCBAQAogCW1lbXNldChjdHgtPnJhbmRfZGF0YSwgMCwgREVGQVVMVF9CTEtfU1opOwogCW1lbXNldChjdHgtPmxhc3RfcmFuZF9kYXRhLCAwLCBERUZBVUxUX0JMS19TWik7CiAKLQlpZiAoY3R4LT50Zm0pCi0JCWNyeXB0b19mcmVlX2NpcGhlcihjdHgtPnRmbSk7Ci0KLQljdHgtPnRmbSA9IGNyeXB0b19hbGxvY19jaXBoZXIoImFlcyIsIDAsIDApOwotCWlmIChJU19FUlIoY3R4LT50Zm0pKSB7Ci0JCWRiZ3ByaW50KEtFUk5fQ1JJVCAiRmFpbGVkIHRvIGFsbG9jIHRmbSBmb3IgY29udGV4dCAlcFxuIiwKLQkJCWN0eCk7Ci0JCWN0eC0+dGZtID0gTlVMTDsKLQkJZ290byBvdXQ7Ci0JfQotCiAJY3R4LT5yYW5kX2RhdGFfdmFsaWQgPSBERUZBVUxUX0JMS19TWjsKIAogCXJldCA9IGNyeXB0b19jaXBoZXJfc2V0a2V5KGN0eC0+dGZtLCBwcm5nX2tleSwga2xlbik7CiAJaWYgKHJldCkgewogCQlkYmdwcmludChLRVJOX0NSSVQgIlBSTkc6IHNldGtleSgpIGZhaWxlZCBmbGFncz0leFxuIiwKIAkJCWNyeXB0b19jaXBoZXJfZ2V0X2ZsYWdzKGN0eC0+dGZtKSk7Ci0JCWNyeXB0b19mcmVlX2NpcGhlcihjdHgtPnRmbSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJjID0gMDsKKwlyZXQgPSAwOwogCWN0eC0+ZmxhZ3MgJj0gflBSTkdfTkVFRF9SRVNFVDsKIG91dDoKLQlzcGluX3VubG9jaygmY3R4LT5wcm5nX2xvY2spOwotCi0JcmV0dXJuIHJjOwotCisJc3Bpbl91bmxvY2tfYmgoJmN0eC0+cHJuZ19sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGNwcm5nX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKQEAgLTM0Myw2ICszMjcsMTIgQEAKIAlzdHJ1Y3QgcHJuZ19jb250ZXh0ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCiAJc3Bpbl9sb2NrX2luaXQoJmN0eC0+cHJuZ19sb2NrKTsKKwljdHgtPnRmbSA9IGNyeXB0b19hbGxvY19jaXBoZXIoImFlcyIsIDAsIDApOworCWlmIChJU19FUlIoY3R4LT50Zm0pKSB7CisJCWRiZ3ByaW50KEtFUk5fQ1JJVCAiRmFpbGVkIHRvIGFsbG9jIHRmbSBmb3IgY29udGV4dCAlcFxuIiwKKwkJCQljdHgpOworCQlyZXR1cm4gUFRSX0VSUihjdHgtPnRmbSk7CisJfQogCiAJaWYgKHJlc2V0X3BybmdfY29udGV4dChjdHgsIE5VTEwsIERFRkFVTFRfUFJOR19LU1osIE5VTEwsIE5VTEwpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MTgsMTcgKzQwOCwxMCBAQAogLyogTW9kdWxlIGluaXRhbGl6YXRpb24gKi8KIHN0YXRpYyBpbnQgX19pbml0IHBybmdfbW9kX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gMDsKLQogCWlmIChmaXBzX2VuYWJsZWQpCiAJCXJuZ19hbGcuY3JhX3ByaW9yaXR5ICs9IDIwMDsKIAotCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJnJuZ19hbGcpOwotCi0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci1vdXQ6Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJnJuZ19hbGcpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcHJuZ19tb2RfZmluaSh2b2lkKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FwaS5jIGIvY3J5cHRvL2FwaS5jCmluZGV4IGQ1OTQ0ZjkuLjc5ODUyNmQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hcGkuYworKysgYi9jcnlwdG8vYXBpLmMKQEAgLTI4NSwxMyArMjg1LDYgQEAKIAlzd2l0Y2ggKGNyeXB0b190Zm1fYWxnX3R5cGUodGZtKSkgewogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0NJUEhFUjoKIAkJcmV0dXJuIGNyeXB0b19pbml0X2NpcGhlcl9vcHModGZtKTsKLQkJCi0JY2FzZSBDUllQVE9fQUxHX1RZUEVfRElHRVNUOgotCQlpZiAoKG1hc2sgJiBDUllQVE9fQUxHX1RZUEVfSEFTSF9NQVNLKSAhPQotCQkgICAgQ1JZUFRPX0FMR19UWVBFX0hBU0hfTUFTSykKLQkJCXJldHVybiBjcnlwdG9faW5pdF9kaWdlc3Rfb3BzX2FzeW5jKHRmbSk7Ci0JCWVsc2UKLQkJCXJldHVybiBjcnlwdG9faW5pdF9kaWdlc3Rfb3BzKHRmbSk7CiAKIAljYXNlIENSWVBUT19BTEdfVFlQRV9DT01QUkVTUzoKIAkJcmV0dXJuIGNyeXB0b19pbml0X2NvbXByZXNzX29wcyh0Zm0pOwpAQCAtMzE4LDExICszMTEsNyBAQAogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0NJUEhFUjoKIAkJY3J5cHRvX2V4aXRfY2lwaGVyX29wcyh0Zm0pOwogCQlicmVhazsKLQkJCi0JY2FzZSBDUllQVE9fQUxHX1RZUEVfRElHRVNUOgotCQljcnlwdG9fZXhpdF9kaWdlc3Rfb3BzKHRmbSk7Ci0JCWJyZWFrOwotCQkKKwogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0NPTVBSRVNTOgogCQljcnlwdG9fZXhpdF9jb21wcmVzc19vcHModGZtKTsKIAkJYnJlYWs7CkBAIC0zNDksMTEgKzMzOCw3IEBACiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSOgogCQlsZW4gKz0gY3J5cHRvX2NpcGhlcl9jdHhzaXplKGFsZyk7CiAJCWJyZWFrOwotCQkKLQljYXNlIENSWVBUT19BTEdfVFlQRV9ESUdFU1Q6Ci0JCWxlbiArPSBjcnlwdG9fZGlnZXN0X2N0eHNpemUoYWxnKTsKLQkJYnJlYWs7Ci0JCQorCiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfQ09NUFJFU1M6CiAJCWxlbiArPSBjcnlwdG9fY29tcHJlc3NfY3R4c2l6ZShhbGcpOwogCQlicmVhazsKQEAgLTQ3Miw3ICs0NTcsNyBAQAogCWludCBlcnIgPSAtRU5PTUVNOwogCiAJdGZtc2l6ZSA9IGZyb250ZW5kLT50Zm1zaXplOwotCXRvdGFsID0gdGZtc2l6ZSArIHNpemVvZigqdGZtKSArIGZyb250ZW5kLT5leHRzaXplKGFsZywgZnJvbnRlbmQpOworCXRvdGFsID0gdGZtc2l6ZSArIHNpemVvZigqdGZtKSArIGZyb250ZW5kLT5leHRzaXplKGFsZyk7CiAKIAltZW0gPSBremFsbG9jKHRvdGFsLCBHRlBfS0VSTkVMKTsKIAlpZiAobWVtID09IE5VTEwpCkBAIC00ODEsNyArNDY2LDcgQEAKIAl0Zm0gPSAoc3RydWN0IGNyeXB0b190Zm0gKikobWVtICsgdGZtc2l6ZSk7CiAJdGZtLT5fX2NydF9hbGcgPSBhbGc7CiAKLQllcnIgPSBmcm9udGVuZC0+aW5pdF90Zm0odGZtLCBmcm9udGVuZCk7CisJZXJyID0gZnJvbnRlbmQtPmluaXRfdGZtKHRmbSk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZV90Zm07CiAKQEAgLTUwMyw2ICs0ODgsMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19jcmVhdGVfdGZtKTsKIAorc3RydWN0IGNyeXB0b19hbGcgKmNyeXB0b19maW5kX2FsZyhjb25zdCBjaGFyICphbGdfbmFtZSwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kLAorCQkJCSAgIHUzMiB0eXBlLCB1MzIgbWFzaykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqKCpsb29rdXApKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiB0eXBlLCB1MzIgbWFzaykgPQorCQljcnlwdG9fYWxnX21vZF9sb29rdXA7CisKKwlpZiAoZnJvbnRlbmQpIHsKKwkJdHlwZSAmPSBmcm9udGVuZC0+bWFza2NsZWFyOworCQltYXNrICY9IGZyb250ZW5kLT5tYXNrY2xlYXI7CisJCXR5cGUgfD0gZnJvbnRlbmQtPnR5cGU7CisJCW1hc2sgfD0gZnJvbnRlbmQtPm1hc2tzZXQ7CisKKwkJaWYgKGZyb250ZW5kLT5sb29rdXApCisJCQlsb29rdXAgPSBmcm9udGVuZC0+bG9va3VwOworCX0KKworCXJldHVybiBsb29rdXAoYWxnX25hbWUsIHR5cGUsIG1hc2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2ZpbmRfYWxnKTsKKwogLyoKICAqCWNyeXB0b19hbGxvY190Zm0gLSBMb2NhdGUgYWxnb3JpdGhtIGFuZCBhbGxvY2F0ZSB0cmFuc2Zvcm0KICAqCUBhbGdfbmFtZTogTmFtZSBvZiBhbGdvcml0aG0KQEAgLTUyNiwyMSArNTMyLDEzIEBACiB2b2lkICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAogCQkgICAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCwgdTMyIHR5cGUsIHUzMiBtYXNrKQogewotCXN0cnVjdCBjcnlwdG9fYWxnICooKmxvb2t1cCkoY29uc3QgY2hhciAqbmFtZSwgdTMyIHR5cGUsIHUzMiBtYXNrKTsKIAl2b2lkICp0Zm07CiAJaW50IGVycjsKIAotCXR5cGUgJj0gZnJvbnRlbmQtPm1hc2tjbGVhcjsKLQltYXNrICY9IGZyb250ZW5kLT5tYXNrY2xlYXI7Ci0JdHlwZSB8PSBmcm9udGVuZC0+dHlwZTsKLQltYXNrIHw9IGZyb250ZW5kLT5tYXNrc2V0OwotCi0JbG9va3VwID0gZnJvbnRlbmQtPmxvb2t1cCA/OiBjcnlwdG9fYWxnX21vZF9sb29rdXA7Ci0KIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CiAKLQkJYWxnID0gbG9va3VwKGFsZ19uYW1lLCB0eXBlLCBtYXNrKTsKKwkJYWxnID0gY3J5cHRvX2ZpbmRfYWxnKGFsZ19uYW1lLCBmcm9udGVuZCwgdHlwZSwgbWFzayk7CiAJCWlmIChJU19FUlIoYWxnKSkgewogCQkJZXJyID0gUFRSX0VSUihhbGcpOwogCQkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXV0aGVuYy5jIGIvY3J5cHRvL2F1dGhlbmMuYwppbmRleCA1NzkzYjY0Li40ZDZmNDlhIDEwMDY0NAotLS0gYS9jcnlwdG8vYXV0aGVuYy5jCisrKyBiL2NyeXB0by9hdXRoZW5jLmMKQEAgLTIzLDI0ICsyMywzNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCit0eXBlZGVmIHU4ICooKmF1dGhlbmNfYWhhc2hfdCkoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCiBzdHJ1Y3QgYXV0aGVuY19pbnN0YW5jZV9jdHggewotCXN0cnVjdCBjcnlwdG9fc3Bhd24gYXV0aDsKKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoX3NwYXduIGF1dGg7CiAJc3RydWN0IGNyeXB0b19za2NpcGhlcl9zcGF3biBlbmM7CiB9OwogCiBzdHJ1Y3QgY3J5cHRvX2F1dGhlbmNfY3R4IHsKLQlzcGlubG9ja190IGF1dGhfbG9jazsKLQlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmF1dGg7CisJdW5zaWduZWQgaW50IHJlcW9mZjsKKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICphdXRoOwogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqZW5jOwogfTsKIAorc3RydWN0IGF1dGhlbmNfcmVxdWVzdF9jdHggeworCXVuc2lnbmVkIGludCBjcnlwdGxlbjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBzY2F0dGVybGlzdCBhc2dbMl07CisJc3RydWN0IHNjYXR0ZXJsaXN0IGNpcGhlclsyXTsKKwljcnlwdG9fY29tcGxldGlvbl90IGNvbXBsZXRlOworCWNyeXB0b19jb21wbGV0aW9uX3QgdXBkYXRlX2NvbXBsZXRlOworCWNoYXIgdGFpbFtdOworfTsKKwogc3RhdGljIGludCBjcnlwdG9fYXV0aGVuY19zZXRrZXkoc3RydWN0IGNyeXB0b19hZWFkICphdXRoZW5jLCBjb25zdCB1OCAqa2V5LAogCQkJCSB1bnNpZ25lZCBpbnQga2V5bGVuKQogewogCXVuc2lnbmVkIGludCBhdXRoa2V5bGVuOwogCXVuc2lnbmVkIGludCBlbmNrZXlsZW47CiAJc3RydWN0IGNyeXB0b19hdXRoZW5jX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGF1dGhlbmMpOwotCXN0cnVjdCBjcnlwdG9faGFzaCAqYXV0aCA9IGN0eC0+YXV0aDsKKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICphdXRoID0gY3R4LT5hdXRoOwogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqZW5jID0gY3R4LT5lbmM7CiAJc3RydWN0IHJ0YXR0ciAqcnRhID0gKHZvaWQgKilrZXk7CiAJc3RydWN0IGNyeXB0b19hdXRoZW5jX2tleV9wYXJhbSAqcGFyYW07CkBAIC02NCwxMSArNzYsMTEgQEAKIAogCWF1dGhrZXlsZW4gPSBrZXlsZW4gLSBlbmNrZXlsZW47CiAKLQljcnlwdG9faGFzaF9jbGVhcl9mbGFncyhhdXRoLCBDUllQVE9fVEZNX1JFUV9NQVNLKTsKLQljcnlwdG9faGFzaF9zZXRfZmxhZ3MoYXV0aCwgY3J5cHRvX2FlYWRfZ2V0X2ZsYWdzKGF1dGhlbmMpICYKKwljcnlwdG9fYWhhc2hfY2xlYXJfZmxhZ3MoYXV0aCwgQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CisJY3J5cHRvX2FoYXNoX3NldF9mbGFncyhhdXRoLCBjcnlwdG9fYWVhZF9nZXRfZmxhZ3MoYXV0aGVuYykgJgogCQkJCSAgICBDUllQVE9fVEZNX1JFUV9NQVNLKTsKLQllcnIgPSBjcnlwdG9faGFzaF9zZXRrZXkoYXV0aCwga2V5LCBhdXRoa2V5bGVuKTsKLQljcnlwdG9fYWVhZF9zZXRfZmxhZ3MoYXV0aGVuYywgY3J5cHRvX2hhc2hfZ2V0X2ZsYWdzKGF1dGgpICYKKwllcnIgPSBjcnlwdG9fYWhhc2hfc2V0a2V5KGF1dGgsIGtleSwgYXV0aGtleWxlbik7CisJY3J5cHRvX2FlYWRfc2V0X2ZsYWdzKGF1dGhlbmMsIGNyeXB0b19haGFzaF9nZXRfZmxhZ3MoYXV0aCkgJgogCQkJCSAgICAgICBDUllQVE9fVEZNX1JFU19NQVNLKTsKIAogCWlmIChlcnIpCkBAIC0xMDMsNDAgKzExNSwxOTggQEAKIAkJc2dfbWFya19lbmQoaGVhZCk7CiB9CiAKLXN0YXRpYyB1OCAqY3J5cHRvX2F1dGhlbmNfaGFzaChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEsIHVuc2lnbmVkIGludCBmbGFncywKLQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmNpcGhlciwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY3J5cHRsZW4pCitzdGF0aWMgdm9pZCBhdXRoZW5jX2dlbml2X2FoYXNoX3VwZGF0ZV9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwKKwkJCQkJICAgIGludCBlcnIpCit7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gYXJlcS0+ZGF0YTsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmF1dGhlbmMgPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgY3J5cHRvX2F1dGhlbmNfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYXV0aGVuYyk7CisJc3RydWN0IGF1dGhlbmNfcmVxdWVzdF9jdHggKmFyZXFfY3R4ID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICphaHJlcSA9ICh2b2lkICopKGFyZXFfY3R4LT50YWlsICsgY3R4LT5yZXFvZmYpOworCisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlhaGFzaF9yZXF1ZXN0X3NldF9jcnlwdChhaHJlcSwgYXJlcV9jdHgtPnNnLCBhaHJlcS0+cmVzdWx0LAorCQkJCWFyZXFfY3R4LT5jcnlwdGxlbik7CisJYWhhc2hfcmVxdWVzdF9zZXRfY2FsbGJhY2soYWhyZXEsIGFlYWRfcmVxdWVzdF9mbGFncyhyZXEpICYKKwkJCQkJICBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVAsCisJCQkJICAgYXJlcV9jdHgtPmNvbXBsZXRlLCByZXEpOworCisJZXJyID0gY3J5cHRvX2FoYXNoX2ZpbnVwKGFocmVxKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCXNjYXR0ZXJ3YWxrX21hcF9hbmRfY29weShhaHJlcS0+cmVzdWx0LCBhcmVxX2N0eC0+c2csCisJCQkJIGFyZXFfY3R4LT5jcnlwdGxlbiwKKwkJCQkgY3J5cHRvX2FlYWRfYXV0aHNpemUoYXV0aGVuYyksIDEpOworCitvdXQ6CisJYWVhZF9yZXF1ZXN0X2NvbXBsZXRlKHJlcSwgZXJyKTsKK30KKworc3RhdGljIHZvaWQgYXV0aGVuY19nZW5pdl9haGFzaF9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwgaW50IGVycikKK3sKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYXV0aGVuYyA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBjcnlwdG9fYXV0aGVuY19jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhdXRoZW5jKTsKKwlzdHJ1Y3QgYXV0aGVuY19yZXF1ZXN0X2N0eCAqYXJlcV9jdHggPSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFocmVxID0gKHZvaWQgKikoYXJlcV9jdHgtPnRhaWwgKyBjdHgtPnJlcW9mZik7CisKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCXNjYXR0ZXJ3YWxrX21hcF9hbmRfY29weShhaHJlcS0+cmVzdWx0LCBhcmVxX2N0eC0+c2csCisJCQkJIGFyZXFfY3R4LT5jcnlwdGxlbiwKKwkJCQkgY3J5cHRvX2FlYWRfYXV0aHNpemUoYXV0aGVuYyksIDEpOworCitvdXQ6CisJYWVhZF9yZXF1ZXN0X2NvbXBsZXRlKHJlcSwgZXJyKTsKK30KKworc3RhdGljIHZvaWQgYXV0aGVuY192ZXJpZnlfYWhhc2hfdXBkYXRlX2RvbmUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphcmVxLAorCQkJCQkgICAgIGludCBlcnIpCit7CisJdTggKmloYXNoOworCXVuc2lnbmVkIGludCBhdXRoc2l6ZTsKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICphYnJlcTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYXV0aGVuYyA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBjcnlwdG9fYXV0aGVuY19jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhdXRoZW5jKTsKKwlzdHJ1Y3QgYXV0aGVuY19yZXF1ZXN0X2N0eCAqYXJlcV9jdHggPSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFocmVxID0gKHZvaWQgKikoYXJlcV9jdHgtPnRhaWwgKyBjdHgtPnJlcW9mZik7CisKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWFoYXNoX3JlcXVlc3Rfc2V0X2NyeXB0KGFocmVxLCBhcmVxX2N0eC0+c2csIGFocmVxLT5yZXN1bHQsCisJCQkJYXJlcV9jdHgtPmNyeXB0bGVuKTsKKwlhaGFzaF9yZXF1ZXN0X3NldF9jYWxsYmFjayhhaHJlcSwgYWVhZF9yZXF1ZXN0X2ZsYWdzKHJlcSkgJgorCQkJCQkgIENSWVBUT19URk1fUkVRX01BWV9TTEVFUCwKKwkJCQkgICBhcmVxX2N0eC0+Y29tcGxldGUsIHJlcSk7CisKKwllcnIgPSBjcnlwdG9fYWhhc2hfZmludXAoYWhyZXEpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJYXV0aHNpemUgPSBjcnlwdG9fYWVhZF9hdXRoc2l6ZShhdXRoZW5jKTsKKwlpaGFzaCA9IGFocmVxLT5yZXN1bHQgKyBhdXRoc2l6ZTsKKwlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoaWhhc2gsIGFyZXFfY3R4LT5zZywgYXJlcV9jdHgtPmNyeXB0bGVuLAorCQkJCSBhdXRoc2l6ZSwgMCk7CisKKwllcnIgPSBtZW1jbXAoaWhhc2gsIGFocmVxLT5yZXN1bHQsIGF1dGhzaXplKSA/IC1FQkFETVNHOiAwOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJYWJyZXEgPSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CisJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0oYWJyZXEsIGN0eC0+ZW5jKTsKKwlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKGFicmVxLCBhZWFkX3JlcXVlc3RfZmxhZ3MocmVxKSwKKwkJCQkJcmVxLT5iYXNlLmNvbXBsZXRlLCByZXEtPmJhc2UuZGF0YSk7CisJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdChhYnJlcSwgcmVxLT5zcmMsIHJlcS0+ZHN0LAorCQkJCSAgICAgcmVxLT5jcnlwdGxlbiwgcmVxLT5pdik7CisKKwllcnIgPSBjcnlwdG9fYWJsa2NpcGhlcl9kZWNyeXB0KGFicmVxKTsKKworb3V0OgorCWFlYWRfcmVxdWVzdF9jb21wbGV0ZShyZXEsIGVycik7Cit9CisKK3N0YXRpYyB2b2lkIGF1dGhlbmNfdmVyaWZ5X2FoYXNoX2RvbmUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphcmVxLAorCQkJCSAgICAgIGludCBlcnIpCit7CisJdTggKmloYXNoOworCXVuc2lnbmVkIGludCBhdXRoc2l6ZTsKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICphYnJlcTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYXV0aGVuYyA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBjcnlwdG9fYXV0aGVuY19jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhdXRoZW5jKTsKKwlzdHJ1Y3QgYXV0aGVuY19yZXF1ZXN0X2N0eCAqYXJlcV9jdHggPSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFocmVxID0gKHZvaWQgKikoYXJlcV9jdHgtPnRhaWwgKyBjdHgtPnJlcW9mZik7CisKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWF1dGhzaXplID0gY3J5cHRvX2FlYWRfYXV0aHNpemUoYXV0aGVuYyk7CisJaWhhc2ggPSBhaHJlcS0+cmVzdWx0ICsgYXV0aHNpemU7CisJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KGloYXNoLCBhcmVxX2N0eC0+c2csIGFyZXFfY3R4LT5jcnlwdGxlbiwKKwkJCQkgYXV0aHNpemUsIDApOworCisJZXJyID0gbWVtY21wKGloYXNoLCBhaHJlcS0+cmVzdWx0LCBhdXRoc2l6ZSkgPyAtRUJBRE1TRzogMDsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWFicmVxID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOworCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfdGZtKGFicmVxLCBjdHgtPmVuYyk7CisJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjayhhYnJlcSwgYWVhZF9yZXF1ZXN0X2ZsYWdzKHJlcSksCisJCQkJCXJlcS0+YmFzZS5jb21wbGV0ZSwgcmVxLT5iYXNlLmRhdGEpOworCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQoYWJyZXEsIHJlcS0+c3JjLCByZXEtPmRzdCwKKwkJCQkgICAgIHJlcS0+Y3J5cHRsZW4sIHJlcS0+aXYpOworCisJZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfZGVjcnlwdChhYnJlcSk7CisKK291dDoKKwlhZWFkX3JlcXVlc3RfY29tcGxldGUocmVxLCBlcnIpOworfQorCitzdGF0aWMgdTggKmNyeXB0b19hdXRoZW5jX2FoYXNoX2ZiKHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBjcnlwdG9fYWVhZCAqYXV0aGVuYyA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOwogCXN0cnVjdCBjcnlwdG9fYXV0aGVuY19jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhdXRoZW5jKTsKLQlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmF1dGggPSBjdHgtPmF1dGg7Ci0Jc3RydWN0IGhhc2hfZGVzYyBkZXNjID0gewotCQkudGZtID0gYXV0aCwKLQkJLmZsYWdzID0gYWVhZF9yZXF1ZXN0X2ZsYWdzKHJlcSkgJiBmbGFncywKLQl9OwotCXU4ICpoYXNoID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBjcnlwdG9fYWhhc2ggKmF1dGggPSBjdHgtPmF1dGg7CisJc3RydWN0IGF1dGhlbmNfcmVxdWVzdF9jdHggKmFyZXFfY3R4ID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICphaHJlcSA9ICh2b2lkICopKGFyZXFfY3R4LT50YWlsICsgY3R4LT5yZXFvZmYpOworCXU4ICpoYXNoID0gYXJlcV9jdHgtPnRhaWw7CiAJaW50IGVycjsKIAotCWhhc2ggPSAodTggKilBTElHTigodW5zaWduZWQgbG9uZyloYXNoICsgY3J5cHRvX2hhc2hfYWxpZ25tYXNrKGF1dGgpLCAKLQkJCSAgIGNyeXB0b19oYXNoX2FsaWdubWFzayhhdXRoKSArIDEpOworCWhhc2ggPSAodTggKilBTElHTigodW5zaWduZWQgbG9uZyloYXNoICsgY3J5cHRvX2FoYXNoX2FsaWdubWFzayhhdXRoKSwKKwkJCSAgICBjcnlwdG9fYWhhc2hfYWxpZ25tYXNrKGF1dGgpICsgMSk7CiAKLQlzcGluX2xvY2tfYmgoJmN0eC0+YXV0aF9sb2NrKTsKLQllcnIgPSBjcnlwdG9faGFzaF9pbml0KCZkZXNjKTsKKwlhaGFzaF9yZXF1ZXN0X3NldF90Zm0oYWhyZXEsIGF1dGgpOworCisJZXJyID0gY3J5cHRvX2FoYXNoX2luaXQoYWhyZXEpOwogCWlmIChlcnIpCi0JCWdvdG8gYXV0aF91bmxvY2s7CisJCXJldHVybiBFUlJfUFRSKGVycik7CiAKLQllcnIgPSBjcnlwdG9faGFzaF91cGRhdGUoJmRlc2MsIHJlcS0+YXNzb2MsIHJlcS0+YXNzb2NsZW4pOworCWFoYXNoX3JlcXVlc3Rfc2V0X2NyeXB0KGFocmVxLCByZXEtPmFzc29jLCBoYXNoLCByZXEtPmFzc29jbGVuKTsKKwlhaGFzaF9yZXF1ZXN0X3NldF9jYWxsYmFjayhhaHJlcSwgYWVhZF9yZXF1ZXN0X2ZsYWdzKHJlcSkgJiBmbGFncywKKwkJCQkgICBhcmVxX2N0eC0+dXBkYXRlX2NvbXBsZXRlLCByZXEpOworCisJZXJyID0gY3J5cHRvX2FoYXNoX3VwZGF0ZShhaHJlcSk7CiAJaWYgKGVycikKLQkJZ290byBhdXRoX3VubG9jazsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAotCWVyciA9IGNyeXB0b19oYXNoX3VwZGF0ZSgmZGVzYywgY2lwaGVyLCBjcnlwdGxlbik7CisJYWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQoYWhyZXEsIGFyZXFfY3R4LT5zZywgaGFzaCwKKwkJCQlhcmVxX2N0eC0+Y3J5cHRsZW4pOworCWFoYXNoX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKGFocmVxLCBhZWFkX3JlcXVlc3RfZmxhZ3MocmVxKSAmIGZsYWdzLAorCQkJCSAgIGFyZXFfY3R4LT5jb21wbGV0ZSwgcmVxKTsKKworCWVyciA9IGNyeXB0b19haGFzaF9maW51cChhaHJlcSk7CiAJaWYgKGVycikKLQkJZ290byBhdXRoX3VubG9jazsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAotCWVyciA9IGNyeXB0b19oYXNoX2ZpbmFsKCZkZXNjLCBoYXNoKTsKLWF1dGhfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2JoKCZjdHgtPmF1dGhfbG9jayk7CisJcmV0dXJuIGhhc2g7Cit9CiAKK3N0YXRpYyB1OCAqY3J5cHRvX2F1dGhlbmNfYWhhc2goc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGNyeXB0b19hZWFkICphdXRoZW5jID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7CisJc3RydWN0IGNyeXB0b19hdXRoZW5jX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGF1dGhlbmMpOworCXN0cnVjdCBjcnlwdG9fYWhhc2ggKmF1dGggPSBjdHgtPmF1dGg7CisJc3RydWN0IGF1dGhlbmNfcmVxdWVzdF9jdHggKmFyZXFfY3R4ID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICphaHJlcSA9ICh2b2lkICopKGFyZXFfY3R4LT50YWlsICsgY3R4LT5yZXFvZmYpOworCXU4ICpoYXNoID0gYXJlcV9jdHgtPnRhaWw7CisJaW50IGVycjsKKworCWhhc2ggPSAodTggKilBTElHTigodW5zaWduZWQgbG9uZyloYXNoICsgY3J5cHRvX2FoYXNoX2FsaWdubWFzayhhdXRoKSwKKwkJCSAgIGNyeXB0b19haGFzaF9hbGlnbm1hc2soYXV0aCkgKyAxKTsKKworCWFoYXNoX3JlcXVlc3Rfc2V0X3RmbShhaHJlcSwgYXV0aCk7CisJYWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQoYWhyZXEsIGFyZXFfY3R4LT5zZywgaGFzaCwKKwkJCQlhcmVxX2N0eC0+Y3J5cHRsZW4pOworCWFoYXNoX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKGFocmVxLCBhZWFkX3JlcXVlc3RfZmxhZ3MocmVxKSAmIGZsYWdzLAorCQkJCSAgIGFyZXFfY3R4LT5jb21wbGV0ZSwgcmVxKTsKKworCWVyciA9IGNyeXB0b19haGFzaF9kaWdlc3QoYWhyZXEpOwogCWlmIChlcnIpCiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAKQEAgLTE0NywxMSArMzE3LDE1IEBACiAJCQkJIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmF1dGhlbmMgPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgYXV0aGVuY19yZXF1ZXN0X2N0eCAqYXJlcV9jdHggPSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QgPSByZXEtPmRzdDsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgY2lwaGVyWzJdOwotCXN0cnVjdCBwYWdlICpkc3RwOworCXN0cnVjdCBzY2F0dGVybGlzdCAqYXNzb2MgPSByZXEtPmFzc29jOworCXN0cnVjdCBzY2F0dGVybGlzdCAqY2lwaGVyID0gYXJlcV9jdHgtPmNpcGhlcjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmFzZyA9IGFyZXFfY3R4LT5hc2c7CiAJdW5zaWduZWQgaW50IGl2c2l6ZSA9IGNyeXB0b19hZWFkX2l2c2l6ZShhdXRoZW5jKTsKLQl1bnNpZ25lZCBpbnQgY3J5cHRsZW47CisJdW5zaWduZWQgaW50IGNyeXB0bGVuID0gcmVxLT5jcnlwdGxlbjsKKwlhdXRoZW5jX2FoYXNoX3QgYXV0aGVuY19haGFzaF9mbiA9IGNyeXB0b19hdXRoZW5jX2FoYXNoX2ZiOworCXN0cnVjdCBwYWdlICpkc3RwOwogCXU4ICp2ZHN0OwogCXU4ICpoYXNoOwogCkBAIC0xNjMsMTAgKzMzNywyNSBAQAogCQlzZ19zZXRfYnVmKGNpcGhlciwgaXYsIGl2c2l6ZSk7CiAJCWF1dGhlbmNfY2hhaW4oY2lwaGVyLCBkc3QsIHZkc3QgPT0gaXYgKyBpdnNpemUpOwogCQlkc3QgPSBjaXBoZXI7CisJCWNyeXB0bGVuICs9IGl2c2l6ZTsKIAl9CiAKLQljcnlwdGxlbiA9IHJlcS0+Y3J5cHRsZW4gKyBpdnNpemU7Ci0JaGFzaCA9IGNyeXB0b19hdXRoZW5jX2hhc2gocmVxLCBmbGFncywgZHN0LCBjcnlwdGxlbik7CisJaWYgKHNnX2lzX2xhc3QoYXNzb2MpKSB7CisJCWF1dGhlbmNfYWhhc2hfZm4gPSBjcnlwdG9fYXV0aGVuY19haGFzaDsKKwkJc2dfaW5pdF90YWJsZShhc2csIDIpOworCQlzZ19zZXRfcGFnZShhc2csIHNnX3BhZ2UoYXNzb2MpLCBhc3NvYy0+bGVuZ3RoLCBhc3NvYy0+b2Zmc2V0KTsKKwkJYXV0aGVuY19jaGFpbihhc2csIGRzdCwgMCk7CisJCWRzdCA9IGFzZzsKKwkJY3J5cHRsZW4gKz0gcmVxLT5hc3NvY2xlbjsKKwl9CisKKwlhcmVxX2N0eC0+Y3J5cHRsZW4gPSBjcnlwdGxlbjsKKwlhcmVxX2N0eC0+c2cgPSBkc3Q7CisKKwlhcmVxX2N0eC0+Y29tcGxldGUgPSBhdXRoZW5jX2dlbml2X2FoYXNoX2RvbmU7CisJYXJlcV9jdHgtPnVwZGF0ZV9jb21wbGV0ZSA9IGF1dGhlbmNfZ2VuaXZfYWhhc2hfdXBkYXRlX2RvbmU7CisKKwloYXNoID0gYXV0aGVuY19haGFzaF9mbihyZXEsIGZsYWdzKTsKIAlpZiAoSVNfRVJSKGhhc2gpKQogCQlyZXR1cm4gUFRSX0VSUihoYXNoKTsKIApAQCAtMjU2LDIyICs0NDUsMjUgQEAKIH0KIAogc3RhdGljIGludCBjcnlwdG9fYXV0aGVuY192ZXJpZnkoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLAotCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmNpcGhlciwKLQkJCQkgdW5zaWduZWQgaW50IGNyeXB0bGVuKQorCQkJCSBhdXRoZW5jX2FoYXNoX3QgYXV0aGVuY19haGFzaF9mbikKIHsKIAlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmF1dGhlbmMgPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgYXV0aGVuY19yZXF1ZXN0X2N0eCAqYXJlcV9jdHggPSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CiAJdTggKm9oYXNoOwogCXU4ICppaGFzaDsKIAl1bnNpZ25lZCBpbnQgYXV0aHNpemU7CiAKLQlvaGFzaCA9IGNyeXB0b19hdXRoZW5jX2hhc2gocmVxLCBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVAsIGNpcGhlciwKLQkJCQkgICAgY3J5cHRsZW4pOworCWFyZXFfY3R4LT5jb21wbGV0ZSA9IGF1dGhlbmNfdmVyaWZ5X2FoYXNoX2RvbmU7CisJYXJlcV9jdHgtPmNvbXBsZXRlID0gYXV0aGVuY192ZXJpZnlfYWhhc2hfdXBkYXRlX2RvbmU7CisKKwlvaGFzaCA9IGF1dGhlbmNfYWhhc2hfZm4ocmVxLCBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVApOwogCWlmIChJU19FUlIob2hhc2gpKQogCQlyZXR1cm4gUFRSX0VSUihvaGFzaCk7CiAKIAlhdXRoc2l6ZSA9IGNyeXB0b19hZWFkX2F1dGhzaXplKGF1dGhlbmMpOwogCWloYXNoID0gb2hhc2ggKyBhdXRoc2l6ZTsKLQlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoaWhhc2gsIGNpcGhlciwgY3J5cHRsZW4sIGF1dGhzaXplLCAwKTsKKwlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoaWhhc2gsIGFyZXFfY3R4LT5zZywgYXJlcV9jdHgtPmNyeXB0bGVuLAorCQkJCSBhdXRoc2l6ZSwgMCk7CiAJcmV0dXJuIG1lbWNtcChpaGFzaCwgb2hhc2gsIGF1dGhzaXplKSA/IC1FQkFETVNHOiAwOwogfQogCkBAIC0yNzksMTAgKzQ3MSwxNCBAQAogCQkJCSAgdW5zaWduZWQgaW50IGNyeXB0bGVuKQogewogCXN0cnVjdCBjcnlwdG9fYWVhZCAqYXV0aGVuYyA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBhdXRoZW5jX3JlcXVlc3RfY3R4ICphcmVxX2N0eCA9IGFlYWRfcmVxdWVzdF9jdHgocmVxKTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYyA9IHJlcS0+c3JjOwotCXN0cnVjdCBzY2F0dGVybGlzdCBjaXBoZXJbMl07Ci0Jc3RydWN0IHBhZ2UgKnNyY3A7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICphc3NvYyA9IHJlcS0+YXNzb2M7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpjaXBoZXIgPSBhcmVxX2N0eC0+Y2lwaGVyOworCXN0cnVjdCBzY2F0dGVybGlzdCAqYXNnID0gYXJlcV9jdHgtPmFzZzsKIAl1bnNpZ25lZCBpbnQgaXZzaXplID0gY3J5cHRvX2FlYWRfaXZzaXplKGF1dGhlbmMpOworCWF1dGhlbmNfYWhhc2hfdCBhdXRoZW5jX2FoYXNoX2ZuID0gY3J5cHRvX2F1dGhlbmNfYWhhc2hfZmI7CisJc3RydWN0IHBhZ2UgKnNyY3A7CiAJdTggKnZzcmM7CiAKIAlzcmNwID0gc2dfcGFnZShzcmMpOwpAQCAtMjkzLDkgKzQ4OSwyMiBAQAogCQlzZ19zZXRfYnVmKGNpcGhlciwgaXYsIGl2c2l6ZSk7CiAJCWF1dGhlbmNfY2hhaW4oY2lwaGVyLCBzcmMsIHZzcmMgPT0gaXYgKyBpdnNpemUpOwogCQlzcmMgPSBjaXBoZXI7CisJCWNyeXB0bGVuICs9IGl2c2l6ZTsKIAl9CiAKLQlyZXR1cm4gY3J5cHRvX2F1dGhlbmNfdmVyaWZ5KHJlcSwgc3JjLCBjcnlwdGxlbiArIGl2c2l6ZSk7CisJaWYgKHNnX2lzX2xhc3QoYXNzb2MpKSB7CisJCWF1dGhlbmNfYWhhc2hfZm4gPSBjcnlwdG9fYXV0aGVuY19haGFzaDsKKwkJc2dfaW5pdF90YWJsZShhc2csIDIpOworCQlzZ19zZXRfcGFnZShhc2csIHNnX3BhZ2UoYXNzb2MpLCBhc3NvYy0+bGVuZ3RoLCBhc3NvYy0+b2Zmc2V0KTsKKwkJYXV0aGVuY19jaGFpbihhc2csIHNyYywgMCk7CisJCXNyYyA9IGFzZzsKKwkJY3J5cHRsZW4gKz0gcmVxLT5hc3NvY2xlbjsKKwl9CisKKwlhcmVxX2N0eC0+Y3J5cHRsZW4gPSBjcnlwdGxlbjsKKwlhcmVxX2N0eC0+c2cgPSBzcmM7CisKKwlyZXR1cm4gY3J5cHRvX2F1dGhlbmNfdmVyaWZ5KHJlcSwgYXV0aGVuY19haGFzaF9mbik7CiB9CiAKIHN0YXRpYyBpbnQgY3J5cHRvX2F1dGhlbmNfZGVjcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCkBAIC0zMjYsMzggKzUzNSw0MSBAQAogCiBzdGF0aWMgaW50IGNyeXB0b19hdXRoZW5jX2luaXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7Ci0Jc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCA9ICh2b2lkICopdGZtLT5fX2NydF9hbGc7CisJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCA9IGNyeXB0b190Zm1fYWxnX2luc3RhbmNlKHRmbSk7CiAJc3RydWN0IGF1dGhlbmNfaW5zdGFuY2VfY3R4ICppY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKIAlzdHJ1Y3QgY3J5cHRvX2F1dGhlbmNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwotCXN0cnVjdCBjcnlwdG9faGFzaCAqYXV0aDsKKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICphdXRoOwogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqZW5jOwogCWludCBlcnI7CiAKLQlhdXRoID0gY3J5cHRvX3NwYXduX2hhc2goJmljdHgtPmF1dGgpOworCWF1dGggPSBjcnlwdG9fc3Bhd25fYWhhc2goJmljdHgtPmF1dGgpOwogCWlmIChJU19FUlIoYXV0aCkpCiAJCXJldHVybiBQVFJfRVJSKGF1dGgpOwogCisJY3R4LT5yZXFvZmYgPSBBTElHTigyICogY3J5cHRvX2FoYXNoX2RpZ2VzdHNpemUoYXV0aCkgKworCQkJICAgIGNyeXB0b19haGFzaF9hbGlnbm1hc2soYXV0aCksCisJCQkgICAgY3J5cHRvX2FoYXNoX2FsaWdubWFzayhhdXRoKSArIDEpOworCiAJZW5jID0gY3J5cHRvX3NwYXduX3NrY2lwaGVyKCZpY3R4LT5lbmMpOwogCWVyciA9IFBUUl9FUlIoZW5jKTsKIAlpZiAoSVNfRVJSKGVuYykpCi0JCWdvdG8gZXJyX2ZyZWVfaGFzaDsKKwkJZ290byBlcnJfZnJlZV9haGFzaDsKIAogCWN0eC0+YXV0aCA9IGF1dGg7CiAJY3R4LT5lbmMgPSBlbmM7CisJCiAJdGZtLT5jcnRfYWVhZC5yZXFzaXplID0gbWF4X3QodW5zaWduZWQgaW50LAotCQkJCSAgICAgIChjcnlwdG9faGFzaF9hbGlnbm1hc2soYXV0aCkgJgotCQkJCSAgICAgICB+KGNyeXB0b190Zm1fY3R4X2FsaWdubWVudCgpIC0gMSkpICsKLQkJCQkgICAgICBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGF1dGgpICogMiwKLQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHNrY2lwaGVyX2dpdmNyeXB0X3JlcXVlc3QpICsKLQkJCQkgICAgICBjcnlwdG9fYWJsa2NpcGhlcl9yZXFzaXplKGVuYykgKwotCQkJCSAgICAgIGNyeXB0b19hYmxrY2lwaGVyX2l2c2l6ZShlbmMpKTsKLQotCXNwaW5fbG9ja19pbml0KCZjdHgtPmF1dGhfbG9jayk7CisJCQkJY3J5cHRvX2FoYXNoX3JlcXNpemUoYXV0aCkgKyBjdHgtPnJlcW9mZiArCisJCQkJc2l6ZW9mKHN0cnVjdCBhdXRoZW5jX3JlcXVlc3RfY3R4KSArCisJCQkJc2l6ZW9mKHN0cnVjdCBhaGFzaF9yZXF1ZXN0KSwgCisJCQkJc2l6ZW9mKHN0cnVjdCBza2NpcGhlcl9naXZjcnlwdF9yZXF1ZXN0KSArCisJCQkJY3J5cHRvX2FibGtjaXBoZXJfcmVxc2l6ZShlbmMpICsKKwkJCQljcnlwdG9fYWJsa2NpcGhlcl9pdnNpemUoZW5jKSk7CiAKIAlyZXR1cm4gMDsKIAotZXJyX2ZyZWVfaGFzaDoKLQljcnlwdG9fZnJlZV9oYXNoKGF1dGgpOworZXJyX2ZyZWVfYWhhc2g6CisJY3J5cHRvX2ZyZWVfYWhhc2goYXV0aCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzY1LDcgKzU3Nyw3IEBACiB7CiAJc3RydWN0IGNyeXB0b19hdXRoZW5jX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAotCWNyeXB0b19mcmVlX2hhc2goY3R4LT5hdXRoKTsKKwljcnlwdG9fZnJlZV9haGFzaChjdHgtPmF1dGgpOwogCWNyeXB0b19mcmVlX2FibGtjaXBoZXIoY3R4LT5lbmMpOwogfQogCkBAIC0zNzMsNyArNTg1LDggQEAKIHsKIAlzdHJ1Y3QgY3J5cHRvX2F0dHJfdHlwZSAqYWxndDsKIAlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OwotCXN0cnVjdCBjcnlwdG9fYWxnICphdXRoOworCXN0cnVjdCBoYXNoX2FsZ19jb21tb24gKmF1dGg7CisJc3RydWN0IGNyeXB0b19hbGcgKmF1dGhfYmFzZTsKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqZW5jOwogCXN0cnVjdCBhdXRoZW5jX2luc3RhbmNlX2N0eCAqY3R4OwogCWNvbnN0IGNoYXIgKmVuY19uYW1lOwpAQCAtMzg3LDExICs2MDAsMTMgQEAKIAlpZiAoKGFsZ3QtPnR5cGUgXiBDUllQVE9fQUxHX1RZUEVfQUVBRCkgJiBhbGd0LT5tYXNrKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCWF1dGggPSBjcnlwdG9fYXR0cl9hbGcodGJbMV0sIENSWVBUT19BTEdfVFlQRV9IQVNILAotCQkJICAgICAgIENSWVBUT19BTEdfVFlQRV9IQVNIX01BU0spOworCWF1dGggPSBhaGFzaF9hdHRyX2FsZyh0YlsxXSwgQ1JZUFRPX0FMR19UWVBFX0hBU0gsCisJCQkgICAgICAgQ1JZUFRPX0FMR19UWVBFX0FIQVNIX01BU0spOwogCWlmIChJU19FUlIoYXV0aCkpCiAJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIoYXV0aCkpOwogCisJYXV0aF9iYXNlID0gJmF1dGgtPmJhc2U7CisKIAllbmNfbmFtZSA9IGNyeXB0b19hdHRyX2FsZ19uYW1lKHRiWzJdKTsKIAllcnIgPSBQVFJfRVJSKGVuY19uYW1lKTsKIAlpZiAoSVNfRVJSKGVuY19uYW1lKSkKQEAgLTQwNCw3ICs2MTksNyBAQAogCiAJY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKIAotCWVyciA9IGNyeXB0b19pbml0X3NwYXduKCZjdHgtPmF1dGgsIGF1dGgsIGluc3QsIENSWVBUT19BTEdfVFlQRV9NQVNLKTsKKwllcnIgPSBjcnlwdG9faW5pdF9haGFzaF9zcGF3bigmY3R4LT5hdXRoLCBhdXRoLCBpbnN0KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2luc3Q7CiAKQEAgLTQxOSwyOCArNjM0LDI1IEBACiAKIAllcnIgPSAtRU5BTUVUT09MT05HOwogCWlmIChzbnByaW50ZihpbnN0LT5hbGcuY3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUsCi0JCSAgICAgImF1dGhlbmMoJXMsJXMpIiwgYXV0aC0+Y3JhX25hbWUsIGVuYy0+Y3JhX25hbWUpID49CisJCSAgICAgImF1dGhlbmMoJXMsJXMpIiwgYXV0aF9iYXNlLT5jcmFfbmFtZSwgZW5jLT5jcmFfbmFtZSkgPj0KIAkgICAgQ1JZUFRPX01BWF9BTEdfTkFNRSkKIAkJZ290byBlcnJfZHJvcF9lbmM7CiAKIAlpZiAoc25wcmludGYoaW5zdC0+YWxnLmNyYV9kcml2ZXJfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSwKLQkJICAgICAiYXV0aGVuYyglcywlcykiLCBhdXRoLT5jcmFfZHJpdmVyX25hbWUsCisJCSAgICAgImF1dGhlbmMoJXMsJXMpIiwgYXV0aF9iYXNlLT5jcmFfZHJpdmVyX25hbWUsCiAJCSAgICAgZW5jLT5jcmFfZHJpdmVyX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCiAJCWdvdG8gZXJyX2Ryb3BfZW5jOwogCiAJaW5zdC0+YWxnLmNyYV9mbGFncyA9IENSWVBUT19BTEdfVFlQRV9BRUFEOwogCWluc3QtPmFsZy5jcmFfZmxhZ3MgfD0gZW5jLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX0FTWU5DOwotCWluc3QtPmFsZy5jcmFfcHJpb3JpdHkgPSBlbmMtPmNyYV9wcmlvcml0eSAqIDEwICsgYXV0aC0+Y3JhX3ByaW9yaXR5OworCWluc3QtPmFsZy5jcmFfcHJpb3JpdHkgPSBlbmMtPmNyYV9wcmlvcml0eSAqCisJCQkJIDEwICsgYXV0aF9iYXNlLT5jcmFfcHJpb3JpdHk7CiAJaW5zdC0+YWxnLmNyYV9ibG9ja3NpemUgPSBlbmMtPmNyYV9ibG9ja3NpemU7Ci0JaW5zdC0+YWxnLmNyYV9hbGlnbm1hc2sgPSBhdXRoLT5jcmFfYWxpZ25tYXNrIHwgZW5jLT5jcmFfYWxpZ25tYXNrOworCWluc3QtPmFsZy5jcmFfYWxpZ25tYXNrID0gYXV0aF9iYXNlLT5jcmFfYWxpZ25tYXNrIHwgZW5jLT5jcmFfYWxpZ25tYXNrOwogCWluc3QtPmFsZy5jcmFfdHlwZSA9ICZjcnlwdG9fYWVhZF90eXBlOwogCiAJaW5zdC0+YWxnLmNyYV9hZWFkLml2c2l6ZSA9IGVuYy0+Y3JhX2FibGtjaXBoZXIuaXZzaXplOwotCWluc3QtPmFsZy5jcmFfYWVhZC5tYXhhdXRoc2l6ZSA9IGF1dGgtPmNyYV90eXBlID09ICZjcnlwdG9faGFzaF90eXBlID8KLQkJCQkJIGF1dGgtPmNyYV9oYXNoLmRpZ2VzdHNpemUgOgotCQkJCQkgYXV0aC0+Y3JhX3R5cGUgPwotCQkJCQkgX19jcnlwdG9fc2hhc2hfYWxnKGF1dGgpLT5kaWdlc3RzaXplIDoKLQkJCQkJIGF1dGgtPmNyYV9kaWdlc3QuZGlhX2RpZ2VzdHNpemU7CisJaW5zdC0+YWxnLmNyYV9hZWFkLm1heGF1dGhzaXplID0gYXV0aC0+ZGlnZXN0c2l6ZTsKIAogCWluc3QtPmFsZy5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvX2F1dGhlbmNfY3R4KTsKIApAQCAtNDUzLDEzICs2NjUsMTMgQEAKIAlpbnN0LT5hbGcuY3JhX2FlYWQuZ2l2ZW5jcnlwdCA9IGNyeXB0b19hdXRoZW5jX2dpdmVuY3J5cHQ7CiAKIG91dDoKLQljcnlwdG9fbW9kX3B1dChhdXRoKTsKKwljcnlwdG9fbW9kX3B1dChhdXRoX2Jhc2UpOwogCXJldHVybiBpbnN0OwogCiBlcnJfZHJvcF9lbmM6CiAJY3J5cHRvX2Ryb3Bfc2tjaXBoZXIoJmN0eC0+ZW5jKTsKIGVycl9kcm9wX2F1dGg6Ci0JY3J5cHRvX2Ryb3Bfc3Bhd24oJmN0eC0+YXV0aCk7CisJY3J5cHRvX2Ryb3BfYWhhc2goJmN0eC0+YXV0aCk7CiBlcnJfZnJlZV9pbnN0OgogCWtmcmVlKGluc3QpOwogb3V0X3B1dF9hdXRoOgpAQCAtNDcyLDcgKzY4NCw3IEBACiAJc3RydWN0IGF1dGhlbmNfaW5zdGFuY2VfY3R4ICpjdHggPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOwogCiAJY3J5cHRvX2Ryb3Bfc2tjaXBoZXIoJmN0eC0+ZW5jKTsKLQljcnlwdG9fZHJvcF9zcGF3bigmY3R4LT5hdXRoKTsKKwljcnlwdG9fZHJvcF9haGFzaCgmY3R4LT5hdXRoKTsKIAlrZnJlZShpbnN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyeXB0ZC5jIGIvY3J5cHRvL2NyeXB0ZC5jCmluZGV4IGFlNWZhOTkuLjM1MzM1ODIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcnlwdGQuYworKysgYi9jcnlwdG8vY3J5cHRkLmMKQEAgLTM5LDYgKzM5LDExIEBACiAJc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWU7CiB9OwogCitzdHJ1Y3QgaGFzaGRfaW5zdGFuY2VfY3R4IHsKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoX3NwYXduIHNwYXduOworCXN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlOworfTsKKwogc3RydWN0IGNyeXB0ZF9ibGtjaXBoZXJfY3R4IHsKIAlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqY2hpbGQ7CiB9OwpAQCAtNDgsMTEgKzUzLDEyIEBACiB9OwogCiBzdHJ1Y3QgY3J5cHRkX2hhc2hfY3R4IHsKLQlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmNoaWxkOworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKmNoaWxkOwogfTsKIAogc3RydWN0IGNyeXB0ZF9oYXNoX3JlcXVlc3RfY3R4IHsKIAljcnlwdG9fY29tcGxldGlvbl90IGNvbXBsZXRlOworCXN0cnVjdCBzaGFzaF9kZXNjIGRlc2M7CiB9OwogCiBzdGF0aWMgdm9pZCBjcnlwdGRfcXVldWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CkBAIC0yNDksMzIgKzI1NSwyNCBAQAogCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihjdHgtPmNoaWxkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0ZF9hbGxvY19pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAotCQkJCQkJICAgICBzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSkKK3N0YXRpYyB2b2lkICpjcnlwdGRfYWxsb2NfaW5zdGFuY2Uoc3RydWN0IGNyeXB0b19hbGcgKmFsZywgdW5zaWduZWQgaW50IGhlYWQsCisJCQkJICAgdW5zaWduZWQgaW50IHRhaWwpCiB7CisJY2hhciAqcDsKIAlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OwotCXN0cnVjdCBjcnlwdGRfaW5zdGFuY2VfY3R4ICpjdHg7CiAJaW50IGVycjsKIAotCWluc3QgPSBremFsbG9jKHNpemVvZigqaW5zdCkgKyBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwotCWlmICghaW5zdCkgewotCQlpbnN0ID0gRVJSX1BUUigtRU5PTUVNKTsKLQkJZ290byBvdXQ7Ci0JfQorCXAgPSBremFsbG9jKGhlYWQgKyBzaXplb2YoKmluc3QpICsgdGFpbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWluc3QgPSAodm9pZCAqKShwICsgaGVhZCk7CiAKIAllcnIgPSAtRU5BTUVUT09MT05HOwogCWlmIChzbnByaW50ZihpbnN0LT5hbGcuY3JhX2RyaXZlcl9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLAogCQkgICAgICJjcnlwdGQoJXMpIiwgYWxnLT5jcmFfZHJpdmVyX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCiAJCWdvdG8gb3V0X2ZyZWVfaW5zdDsKIAotCWN0eCA9IGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCk7Ci0JZXJyID0gY3J5cHRvX2luaXRfc3Bhd24oJmN0eC0+c3Bhd24sIGFsZywgaW5zdCwKLQkJCQlDUllQVE9fQUxHX1RZUEVfTUFTSyB8IENSWVBUT19BTEdfQVNZTkMpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZyZWVfaW5zdDsKLQotCWN0eC0+cXVldWUgPSBxdWV1ZTsKLQogCW1lbWNweShpbnN0LT5hbGcuY3JhX25hbWUsIGFsZy0+Y3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUpOwogCiAJaW5zdC0+YWxnLmNyYV9wcmlvcml0eSA9IGFsZy0+Y3JhX3ByaW9yaXR5ICsgNTA7CkBAIC0yODIsMjkgKzI4MCw0MSBAQAogCWluc3QtPmFsZy5jcmFfYWxpZ25tYXNrID0gYWxnLT5jcmFfYWxpZ25tYXNrOwogCiBvdXQ6Ci0JcmV0dXJuIGluc3Q7CisJcmV0dXJuIHA7CiAKIG91dF9mcmVlX2luc3Q6Ci0Ja2ZyZWUoaW5zdCk7Ci0JaW5zdCA9IEVSUl9QVFIoZXJyKTsKKwlrZnJlZShwKTsKKwlwID0gRVJSX1BUUihlcnIpOwogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqY3J5cHRkX2FsbG9jX2Jsa2NpcGhlcigKLQlzdHJ1Y3QgcnRhdHRyICoqdGIsIHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlKQorc3RhdGljIGludCBjcnlwdGRfY3JlYXRlX2Jsa2NpcGhlcihzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0bXBsLAorCQkJCSAgIHN0cnVjdCBydGF0dHIgKip0YiwKKwkJCQkgICBzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSkKIHsKKwlzdHJ1Y3QgY3J5cHRkX2luc3RhbmNlX2N0eCAqY3R4OwogCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKwlpbnQgZXJyOwogCiAJYWxnID0gY3J5cHRvX2dldF9hdHRyX2FsZyh0YiwgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiwKIAkJCQkgIENSWVBUT19BTEdfVFlQRV9NQVNLKTsKIAlpZiAoSVNfRVJSKGFsZykpCi0JCXJldHVybiBFUlJfQ0FTVChhbGcpOworCQlyZXR1cm4gUFRSX0VSUihhbGcpOwogCi0JaW5zdCA9IGNyeXB0ZF9hbGxvY19pbnN0YW5jZShhbGcsIHF1ZXVlKTsKKwlpbnN0ID0gY3J5cHRkX2FsbG9jX2luc3RhbmNlKGFsZywgMCwgc2l6ZW9mKCpjdHgpKTsKKwllcnIgPSBQVFJfRVJSKGluc3QpOwogCWlmIChJU19FUlIoaW5zdCkpCiAJCWdvdG8gb3V0X3B1dF9hbGc7CiAKKwljdHggPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOworCWN0eC0+cXVldWUgPSBxdWV1ZTsKKworCWVyciA9IGNyeXB0b19pbml0X3NwYXduKCZjdHgtPnNwYXduLCBhbGcsIGluc3QsCisJCQkJQ1JZUFRPX0FMR19UWVBFX01BU0sgfCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2luc3Q7CisKIAlpbnN0LT5hbGcuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19UWVBFX0FCTEtDSVBIRVIgfCBDUllQVE9fQUxHX0FTWU5DOwogCWluc3QtPmFsZy5jcmFfdHlwZSA9ICZjcnlwdG9fYWJsa2NpcGhlcl90eXBlOwogCkBAIC0zMjMsMjYgKzMzMywzNCBAQAogCWluc3QtPmFsZy5jcmFfYWJsa2NpcGhlci5lbmNyeXB0ID0gY3J5cHRkX2Jsa2NpcGhlcl9lbmNyeXB0X2VucXVldWU7CiAJaW5zdC0+YWxnLmNyYV9hYmxrY2lwaGVyLmRlY3J5cHQgPSBjcnlwdGRfYmxrY2lwaGVyX2RlY3J5cHRfZW5xdWV1ZTsKIAorCWVyciA9IGNyeXB0b19yZWdpc3Rlcl9pbnN0YW5jZSh0bXBsLCBpbnN0KTsKKwlpZiAoZXJyKSB7CisJCWNyeXB0b19kcm9wX3NwYXduKCZjdHgtPnNwYXduKTsKK291dF9mcmVlX2luc3Q6CisJCWtmcmVlKGluc3QpOworCX0KKwogb3V0X3B1dF9hbGc6CiAJY3J5cHRvX21vZF9wdXQoYWxnKTsKLQlyZXR1cm4gaW5zdDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGNyeXB0ZF9oYXNoX2luaXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7CiAJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCA9IGNyeXB0b190Zm1fYWxnX2luc3RhbmNlKHRmbSk7Ci0Jc3RydWN0IGNyeXB0ZF9pbnN0YW5jZV9jdHggKmljdHggPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOwotCXN0cnVjdCBjcnlwdG9fc3Bhd24gKnNwYXduID0gJmljdHgtPnNwYXduOworCXN0cnVjdCBoYXNoZF9pbnN0YW5jZV9jdHggKmljdHggPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOworCXN0cnVjdCBjcnlwdG9fc2hhc2hfc3Bhd24gKnNwYXduID0gJmljdHgtPnNwYXduOwogCXN0cnVjdCBjcnlwdGRfaGFzaF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0Jc3RydWN0IGNyeXB0b19oYXNoICpjaXBoZXI7CisJc3RydWN0IGNyeXB0b19zaGFzaCAqaGFzaDsKIAotCWNpcGhlciA9IGNyeXB0b19zcGF3bl9oYXNoKHNwYXduKTsKLQlpZiAoSVNfRVJSKGNpcGhlcikpCi0JCXJldHVybiBQVFJfRVJSKGNpcGhlcik7CisJaGFzaCA9IGNyeXB0b19zcGF3bl9zaGFzaChzcGF3bik7CisJaWYgKElTX0VSUihoYXNoKSkKKwkJcmV0dXJuIFBUUl9FUlIoaGFzaCk7CiAKLQljdHgtPmNoaWxkID0gY2lwaGVyOwotCXRmbS0+Y3J0X2FoYXNoLnJlcXNpemUgPQotCQlzaXplb2Yoc3RydWN0IGNyeXB0ZF9oYXNoX3JlcXVlc3RfY3R4KTsKKwljdHgtPmNoaWxkID0gaGFzaDsKKwljcnlwdG9fYWhhc2hfc2V0X3JlcXNpemUoX19jcnlwdG9fYWhhc2hfY2FzdCh0Zm0pLAorCQkJCSBzaXplb2Yoc3RydWN0IGNyeXB0ZF9oYXNoX3JlcXVlc3RfY3R4KSArCisJCQkJIGNyeXB0b19zaGFzaF9kZXNjc2l6ZShoYXNoKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1MCwyMiArMzY4LDIyIEBACiB7CiAJc3RydWN0IGNyeXB0ZF9oYXNoX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAotCWNyeXB0b19mcmVlX2hhc2goY3R4LT5jaGlsZCk7CisJY3J5cHRvX2ZyZWVfc2hhc2goY3R4LT5jaGlsZCk7CiB9CiAKIHN0YXRpYyBpbnQgY3J5cHRkX2hhc2hfc2V0a2V5KHN0cnVjdCBjcnlwdG9fYWhhc2ggKnBhcmVudCwKIAkJCQkgICBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQogewogCXN0cnVjdCBjcnlwdGRfaGFzaF9jdHggKmN0eCAgID0gY3J5cHRvX2FoYXNoX2N0eChwYXJlbnQpOwotCXN0cnVjdCBjcnlwdG9faGFzaCAgICAgKmNoaWxkID0gY3R4LT5jaGlsZDsKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICpjaGlsZCA9IGN0eC0+Y2hpbGQ7CiAJaW50IGVycjsKIAotCWNyeXB0b19oYXNoX2NsZWFyX2ZsYWdzKGNoaWxkLCBDUllQVE9fVEZNX1JFUV9NQVNLKTsKLQljcnlwdG9faGFzaF9zZXRfZmxhZ3MoY2hpbGQsIGNyeXB0b19haGFzaF9nZXRfZmxhZ3MocGFyZW50KSAmCi0JCQkJCSAgQ1JZUFRPX1RGTV9SRVFfTUFTSyk7Ci0JZXJyID0gY3J5cHRvX2hhc2hfc2V0a2V5KGNoaWxkLCBrZXksIGtleWxlbik7Ci0JY3J5cHRvX2FoYXNoX3NldF9mbGFncyhwYXJlbnQsIGNyeXB0b19oYXNoX2dldF9mbGFncyhjaGlsZCkgJgotCQkJCQkgICAgQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CisJY3J5cHRvX3NoYXNoX2NsZWFyX2ZsYWdzKGNoaWxkLCBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKwljcnlwdG9fc2hhc2hfc2V0X2ZsYWdzKGNoaWxkLCBjcnlwdG9fYWhhc2hfZ2V0X2ZsYWdzKHBhcmVudCkgJgorCQkJCSAgICAgIENSWVBUT19URk1fUkVRX01BU0spOworCWVyciA9IGNyeXB0b19zaGFzaF9zZXRrZXkoY2hpbGQsIGtleSwga2V5bGVuKTsKKwljcnlwdG9fYWhhc2hfc2V0X2ZsYWdzKHBhcmVudCwgY3J5cHRvX3NoYXNoX2dldF9mbGFncyhjaGlsZCkgJgorCQkJCSAgICAgICBDUllQVE9fVEZNX1JFU19NQVNLKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zODUsMjEgKzQwMywxOSBAQAogCiBzdGF0aWMgdm9pZCBjcnlwdGRfaGFzaF9pbml0KHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxX2FzeW5jLCBpbnQgZXJyKQogewotCXN0cnVjdCBjcnlwdGRfaGFzaF9jdHggKmN0eCAgID0gY3J5cHRvX3RmbV9jdHgocmVxX2FzeW5jLT50Zm0pOwotCXN0cnVjdCBjcnlwdG9faGFzaCAgICAgKmNoaWxkID0gY3R4LT5jaGlsZDsKLQlzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAgICAqcmVxID0gYWhhc2hfcmVxdWVzdF9jYXN0KHJlcV9hc3luYyk7Ci0Jc3RydWN0IGNyeXB0ZF9oYXNoX3JlcXVlc3RfY3R4ICpyY3R4OwotCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKLQotCXJjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBjcnlwdGRfaGFzaF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcV9hc3luYy0+dGZtKTsKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICpjaGlsZCA9IGN0eC0+Y2hpbGQ7CisJc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSA9IGFoYXNoX3JlcXVlc3RfY2FzdChyZXFfYXN5bmMpOworCXN0cnVjdCBjcnlwdGRfaGFzaF9yZXF1ZXN0X2N0eCAqcmN0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MgPSAmcmN0eC0+ZGVzYzsKIAogCWlmICh1bmxpa2VseShlcnIgPT0gLUVJTlBST0dSRVNTKSkKIAkJZ290byBvdXQ7CiAKLQlkZXNjLnRmbSA9IGNoaWxkOwotCWRlc2MuZmxhZ3MgPSBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisJZGVzYy0+dGZtID0gY2hpbGQ7CisJZGVzYy0+ZmxhZ3MgPSBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CiAKLQllcnIgPSBjcnlwdG9faGFzaF9jcnQoY2hpbGQpLT5pbml0KCZkZXNjKTsKKwllcnIgPSBjcnlwdG9fc2hhc2hfaW5pdChkZXNjKTsKIAogCXJlcS0+YmFzZS5jb21wbGV0ZSA9IHJjdHgtPmNvbXBsZXRlOwogCkBAIC00MTYsMjMgKzQzMiwxNSBAQAogCiBzdGF0aWMgdm9pZCBjcnlwdGRfaGFzaF91cGRhdGUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXFfYXN5bmMsIGludCBlcnIpCiB7Ci0Jc3RydWN0IGNyeXB0ZF9oYXNoX2N0eCAqY3R4ICAgPSBjcnlwdG9fdGZtX2N0eChyZXFfYXN5bmMtPnRmbSk7Ci0Jc3RydWN0IGNyeXB0b19oYXNoICAgICAqY2hpbGQgPSBjdHgtPmNoaWxkOwotCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICAgICpyZXEgPSBhaGFzaF9yZXF1ZXN0X2Nhc3QocmVxX2FzeW5jKTsKKwlzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxID0gYWhhc2hfcmVxdWVzdF9jYXN0KHJlcV9hc3luYyk7CiAJc3RydWN0IGNyeXB0ZF9oYXNoX3JlcXVlc3RfY3R4ICpyY3R4OwotCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKIAogCXJjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwogCiAJaWYgKHVubGlrZWx5KGVyciA9PSAtRUlOUFJPR1JFU1MpKQogCQlnb3RvIG91dDsKIAotCWRlc2MudGZtID0gY2hpbGQ7Ci0JZGVzYy5mbGFncyA9IENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKLQotCWVyciA9IGNyeXB0b19oYXNoX2NydChjaGlsZCktPnVwZGF0ZSgmZGVzYywKLQkJCQkJCXJlcS0+c3JjLAotCQkJCQkJcmVxLT5uYnl0ZXMpOworCWVyciA9IHNoYXNoX2FoYXNoX3VwZGF0ZShyZXEsICZyY3R4LT5kZXNjKTsKIAogCXJlcS0+YmFzZS5jb21wbGV0ZSA9IHJjdHgtPmNvbXBsZXRlOwogCkBAIC00NDksMjEgKzQ1NywxMyBAQAogCiBzdGF0aWMgdm9pZCBjcnlwdGRfaGFzaF9maW5hbChzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcV9hc3luYywgaW50IGVycikKIHsKLQlzdHJ1Y3QgY3J5cHRkX2hhc2hfY3R4ICpjdHggICA9IGNyeXB0b190Zm1fY3R4KHJlcV9hc3luYy0+dGZtKTsKLQlzdHJ1Y3QgY3J5cHRvX2hhc2ggICAgICpjaGlsZCA9IGN0eC0+Y2hpbGQ7Ci0Jc3RydWN0IGFoYXNoX3JlcXVlc3QgICAgKnJlcSA9IGFoYXNoX3JlcXVlc3RfY2FzdChyZXFfYXN5bmMpOwotCXN0cnVjdCBjcnlwdGRfaGFzaF9yZXF1ZXN0X2N0eCAqcmN0eDsKLQlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7Ci0KLQlyY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKKwlzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxID0gYWhhc2hfcmVxdWVzdF9jYXN0KHJlcV9hc3luYyk7CisJc3RydWN0IGNyeXB0ZF9oYXNoX3JlcXVlc3RfY3R4ICpyY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKIAogCWlmICh1bmxpa2VseShlcnIgPT0gLUVJTlBST0dSRVNTKSkKIAkJZ290byBvdXQ7CiAKLQlkZXNjLnRmbSA9IGNoaWxkOwotCWRlc2MuZmxhZ3MgPSBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7Ci0KLQllcnIgPSBjcnlwdG9faGFzaF9jcnQoY2hpbGQpLT5maW5hbCgmZGVzYywgcmVxLT5yZXN1bHQpOworCWVyciA9IGNyeXB0b19zaGFzaF9maW5hbCgmcmN0eC0+ZGVzYywgcmVxLT5yZXN1bHQpOwogCiAJcmVxLT5iYXNlLmNvbXBsZXRlID0gcmN0eC0+Y29tcGxldGU7CiAKQEAgLTQ3OCwyNiArNDc4LDQ0IEBACiAJcmV0dXJuIGNyeXB0ZF9oYXNoX2VucXVldWUocmVxLCBjcnlwdGRfaGFzaF9maW5hbCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNyeXB0ZF9oYXNoX2RpZ2VzdChzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcV9hc3luYywgaW50IGVycikKK3N0YXRpYyB2b2lkIGNyeXB0ZF9oYXNoX2ZpbnVwKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxX2FzeW5jLCBpbnQgZXJyKQogewotCXN0cnVjdCBjcnlwdGRfaGFzaF9jdHggKmN0eCAgID0gY3J5cHRvX3RmbV9jdHgocmVxX2FzeW5jLT50Zm0pOwotCXN0cnVjdCBjcnlwdG9faGFzaCAgICAgKmNoaWxkID0gY3R4LT5jaGlsZDsKLQlzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAgICAqcmVxID0gYWhhc2hfcmVxdWVzdF9jYXN0KHJlcV9hc3luYyk7Ci0Jc3RydWN0IGNyeXB0ZF9oYXNoX3JlcXVlc3RfY3R4ICpyY3R4OwotCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKLQotCXJjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEgPSBhaGFzaF9yZXF1ZXN0X2Nhc3QocmVxX2FzeW5jKTsKKwlzdHJ1Y3QgY3J5cHRkX2hhc2hfcmVxdWVzdF9jdHggKnJjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwogCiAJaWYgKHVubGlrZWx5KGVyciA9PSAtRUlOUFJPR1JFU1MpKQogCQlnb3RvIG91dDsKIAotCWRlc2MudGZtID0gY2hpbGQ7Ci0JZGVzYy5mbGFncyA9IENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKKwllcnIgPSBzaGFzaF9haGFzaF9maW51cChyZXEsICZyY3R4LT5kZXNjKTsKIAotCWVyciA9IGNyeXB0b19oYXNoX2NydChjaGlsZCktPmRpZ2VzdCgmZGVzYywKLQkJCQkJCXJlcS0+c3JjLAotCQkJCQkJcmVxLT5uYnl0ZXMsCi0JCQkJCQlyZXEtPnJlc3VsdCk7CisJcmVxLT5iYXNlLmNvbXBsZXRlID0gcmN0eC0+Y29tcGxldGU7CisKK291dDoKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJcmN0eC0+Y29tcGxldGUoJnJlcS0+YmFzZSwgZXJyKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKK30KKworc3RhdGljIGludCBjcnlwdGRfaGFzaF9maW51cF9lbnF1ZXVlKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGNyeXB0ZF9oYXNoX2VucXVldWUocmVxLCBjcnlwdGRfaGFzaF9maW51cCk7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0ZF9oYXNoX2RpZ2VzdChzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcV9hc3luYywgaW50IGVycikKK3sKKwlzdHJ1Y3QgY3J5cHRkX2hhc2hfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChyZXFfYXN5bmMtPnRmbSk7CisJc3RydWN0IGNyeXB0b19zaGFzaCAqY2hpbGQgPSBjdHgtPmNoaWxkOworCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEgPSBhaGFzaF9yZXF1ZXN0X2Nhc3QocmVxX2FzeW5jKTsKKwlzdHJ1Y3QgY3J5cHRkX2hhc2hfcmVxdWVzdF9jdHggKnJjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBzaGFzaF9kZXNjICpkZXNjID0gJnJjdHgtPmRlc2M7CisKKwlpZiAodW5saWtlbHkoZXJyID09IC1FSU5QUk9HUkVTUykpCisJCWdvdG8gb3V0OworCisJZGVzYy0+dGZtID0gY2hpbGQ7CisJZGVzYy0+ZmxhZ3MgPSBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisKKwllcnIgPSBzaGFzaF9haGFzaF9kaWdlc3QocmVxLCBkZXNjKTsKIAogCXJlcS0+YmFzZS5jb21wbGV0ZSA9IHJjdHgtPmNvbXBsZXRlOwogCkBAIC01MTIsNjQgKzUzMCwxMDggQEAKIAlyZXR1cm4gY3J5cHRkX2hhc2hfZW5xdWV1ZShyZXEsIGNyeXB0ZF9oYXNoX2RpZ2VzdCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdGRfYWxsb2NfaGFzaCgKLQlzdHJ1Y3QgcnRhdHRyICoqdGIsIHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlKQorc3RhdGljIGludCBjcnlwdGRfaGFzaF9leHBvcnQoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSwgdm9pZCAqb3V0KQogewotCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CisJc3RydWN0IGNyeXB0ZF9oYXNoX3JlcXVlc3RfY3R4ICpyY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKKworCXJldHVybiBjcnlwdG9fc2hhc2hfZXhwb3J0KCZyY3R4LT5kZXNjLCBvdXQpOworfQorCitzdGF0aWMgaW50IGNyeXB0ZF9oYXNoX2ltcG9ydChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLCBjb25zdCB2b2lkICppbikKK3sKKwlzdHJ1Y3QgY3J5cHRkX2hhc2hfcmVxdWVzdF9jdHggKnJjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOworCisJcmV0dXJuIGNyeXB0b19zaGFzaF9pbXBvcnQoJnJjdHgtPmRlc2MsIGluKTsKK30KKworc3RhdGljIGludCBjcnlwdGRfY3JlYXRlX2hhc2goc3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqdG1wbCwgc3RydWN0IHJ0YXR0ciAqKnRiLAorCQkJICAgICAgc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWUpCit7CisJc3RydWN0IGhhc2hkX2luc3RhbmNlX2N0eCAqY3R4OworCXN0cnVjdCBhaGFzaF9pbnN0YW5jZSAqaW5zdDsKKwlzdHJ1Y3Qgc2hhc2hfYWxnICpzYWxnOwogCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CisJaW50IGVycjsKIAotCWFsZyA9IGNyeXB0b19nZXRfYXR0cl9hbGcodGIsIENSWVBUT19BTEdfVFlQRV9IQVNILAotCQkJCSAgQ1JZUFRPX0FMR19UWVBFX0hBU0hfTUFTSyk7Ci0JaWYgKElTX0VSUihhbGcpKQotCQlyZXR1cm4gRVJSX1BUUihQVFJfRVJSKGFsZykpOworCXNhbGcgPSBzaGFzaF9hdHRyX2FsZyh0YlsxXSwgMCwgMCk7CisJaWYgKElTX0VSUihzYWxnKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2FsZyk7CiAKLQlpbnN0ID0gY3J5cHRkX2FsbG9jX2luc3RhbmNlKGFsZywgcXVldWUpOworCWFsZyA9ICZzYWxnLT5iYXNlOworCWluc3QgPSBjcnlwdGRfYWxsb2NfaW5zdGFuY2UoYWxnLCBhaGFzaF9pbnN0YW5jZV9oZWFkcm9vbSgpLAorCQkJCSAgICAgc2l6ZW9mKCpjdHgpKTsKKwllcnIgPSBQVFJfRVJSKGluc3QpOwogCWlmIChJU19FUlIoaW5zdCkpCiAJCWdvdG8gb3V0X3B1dF9hbGc7CiAKLQlpbnN0LT5hbGcuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19UWVBFX0FIQVNIIHwgQ1JZUFRPX0FMR19BU1lOQzsKLQlpbnN0LT5hbGcuY3JhX3R5cGUgPSAmY3J5cHRvX2FoYXNoX3R5cGU7CisJY3R4ID0gYWhhc2hfaW5zdGFuY2VfY3R4KGluc3QpOworCWN0eC0+cXVldWUgPSBxdWV1ZTsKIAotCWluc3QtPmFsZy5jcmFfYWhhc2guZGlnZXN0c2l6ZSA9IGFsZy0+Y3JhX2hhc2guZGlnZXN0c2l6ZTsKLQlpbnN0LT5hbGcuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IGNyeXB0ZF9oYXNoX2N0eCk7CisJZXJyID0gY3J5cHRvX2luaXRfc2hhc2hfc3Bhd24oJmN0eC0+c3Bhd24sIHNhbGcsCisJCQkJICAgICAgYWhhc2hfY3J5cHRvX2luc3RhbmNlKGluc3QpKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2luc3Q7CiAKLQlpbnN0LT5hbGcuY3JhX2luaXQgPSBjcnlwdGRfaGFzaF9pbml0X3RmbTsKLQlpbnN0LT5hbGcuY3JhX2V4aXQgPSBjcnlwdGRfaGFzaF9leGl0X3RmbTsKKwlpbnN0LT5hbGcuaGFsZy5iYXNlLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkM7CiAKLQlpbnN0LT5hbGcuY3JhX2FoYXNoLmluaXQgICA9IGNyeXB0ZF9oYXNoX2luaXRfZW5xdWV1ZTsKLQlpbnN0LT5hbGcuY3JhX2FoYXNoLnVwZGF0ZSA9IGNyeXB0ZF9oYXNoX3VwZGF0ZV9lbnF1ZXVlOwotCWluc3QtPmFsZy5jcmFfYWhhc2guZmluYWwgID0gY3J5cHRkX2hhc2hfZmluYWxfZW5xdWV1ZTsKLQlpbnN0LT5hbGcuY3JhX2FoYXNoLnNldGtleSA9IGNyeXB0ZF9oYXNoX3NldGtleTsKLQlpbnN0LT5hbGcuY3JhX2FoYXNoLmRpZ2VzdCA9IGNyeXB0ZF9oYXNoX2RpZ2VzdF9lbnF1ZXVlOworCWluc3QtPmFsZy5oYWxnLmRpZ2VzdHNpemUgPSBzYWxnLT5kaWdlc3RzaXplOworCWluc3QtPmFsZy5oYWxnLmJhc2UuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IGNyeXB0ZF9oYXNoX2N0eCk7CisKKwlpbnN0LT5hbGcuaGFsZy5iYXNlLmNyYV9pbml0ID0gY3J5cHRkX2hhc2hfaW5pdF90Zm07CisJaW5zdC0+YWxnLmhhbGcuYmFzZS5jcmFfZXhpdCA9IGNyeXB0ZF9oYXNoX2V4aXRfdGZtOworCisJaW5zdC0+YWxnLmluaXQgICA9IGNyeXB0ZF9oYXNoX2luaXRfZW5xdWV1ZTsKKwlpbnN0LT5hbGcudXBkYXRlID0gY3J5cHRkX2hhc2hfdXBkYXRlX2VucXVldWU7CisJaW5zdC0+YWxnLmZpbmFsICA9IGNyeXB0ZF9oYXNoX2ZpbmFsX2VucXVldWU7CisJaW5zdC0+YWxnLmZpbnVwICA9IGNyeXB0ZF9oYXNoX2ZpbnVwX2VucXVldWU7CisJaW5zdC0+YWxnLmV4cG9ydCA9IGNyeXB0ZF9oYXNoX2V4cG9ydDsKKwlpbnN0LT5hbGcuaW1wb3J0ID0gY3J5cHRkX2hhc2hfaW1wb3J0OworCWluc3QtPmFsZy5zZXRrZXkgPSBjcnlwdGRfaGFzaF9zZXRrZXk7CisJaW5zdC0+YWxnLmRpZ2VzdCA9IGNyeXB0ZF9oYXNoX2RpZ2VzdF9lbnF1ZXVlOworCisJZXJyID0gYWhhc2hfcmVnaXN0ZXJfaW5zdGFuY2UodG1wbCwgaW5zdCk7CisJaWYgKGVycikgeworCQljcnlwdG9fZHJvcF9zaGFzaCgmY3R4LT5zcGF3bik7CitvdXRfZnJlZV9pbnN0OgorCQlrZnJlZShpbnN0KTsKKwl9CiAKIG91dF9wdXRfYWxnOgogCWNyeXB0b19tb2RfcHV0KGFsZyk7Ci0JcmV0dXJuIGluc3Q7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdGRfcXVldWUgcXVldWU7CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdGRfYWxsb2Moc3RydWN0IHJ0YXR0ciAqKnRiKQorc3RhdGljIGludCBjcnlwdGRfY3JlYXRlKHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKnRtcGwsIHN0cnVjdCBydGF0dHIgKip0YikKIHsKIAlzdHJ1Y3QgY3J5cHRvX2F0dHJfdHlwZSAqYWxndDsKIAogCWFsZ3QgPSBjcnlwdG9fZ2V0X2F0dHJfdHlwZSh0Yik7CiAJaWYgKElTX0VSUihhbGd0KSkKLQkJcmV0dXJuIEVSUl9DQVNUKGFsZ3QpOworCQlyZXR1cm4gUFRSX0VSUihhbGd0KTsKIAogCXN3aXRjaCAoYWxndC0+dHlwZSAmIGFsZ3QtPm1hc2sgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgewogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUjoKLQkJcmV0dXJuIGNyeXB0ZF9hbGxvY19ibGtjaXBoZXIodGIsICZxdWV1ZSk7CisJCXJldHVybiBjcnlwdGRfY3JlYXRlX2Jsa2NpcGhlcih0bXBsLCB0YiwgJnF1ZXVlKTsKIAljYXNlIENSWVBUT19BTEdfVFlQRV9ESUdFU1Q6Ci0JCXJldHVybiBjcnlwdGRfYWxsb2NfaGFzaCh0YiwgJnF1ZXVlKTsKKwkJcmV0dXJuIGNyeXB0ZF9jcmVhdGVfaGFzaCh0bXBsLCB0YiwgJnF1ZXVlKTsKIAl9CiAKLQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIHZvaWQgY3J5cHRkX2ZyZWUoc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCkKIHsKIAlzdHJ1Y3QgY3J5cHRkX2luc3RhbmNlX2N0eCAqY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwlzdHJ1Y3QgaGFzaGRfaW5zdGFuY2VfY3R4ICpoY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKworCXN3aXRjaCAoaW5zdC0+YWxnLmNyYV9mbGFncyAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSB7CisJY2FzZSBDUllQVE9fQUxHX1RZUEVfQUhBU0g6CisJCWNyeXB0b19kcm9wX3NoYXNoKCZoY3R4LT5zcGF3bik7CisJCWtmcmVlKGFoYXNoX2luc3RhbmNlKGluc3QpKTsKKwkJcmV0dXJuOworCX0KIAogCWNyeXB0b19kcm9wX3NwYXduKCZjdHgtPnNwYXduKTsKIAlrZnJlZShpbnN0KTsKQEAgLTU3Nyw3ICs2MzksNyBAQAogCiBzdGF0aWMgc3RydWN0IGNyeXB0b190ZW1wbGF0ZSBjcnlwdGRfdG1wbCA9IHsKIAkubmFtZSA9ICJjcnlwdGQiLAotCS5hbGxvYyA9IGNyeXB0ZF9hbGxvYywKKwkuY3JlYXRlID0gY3J5cHRkX2NyZWF0ZSwKIAkuZnJlZSA9IGNyeXB0ZF9mcmVlLAogCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKIH07CkBAIC02MjAsNiArNjgyLDQxIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdGRfZnJlZV9hYmxrY2lwaGVyKTsKIAorc3RydWN0IGNyeXB0ZF9haGFzaCAqY3J5cHRkX2FsbG9jX2FoYXNoKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkJCQl1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJY2hhciBjcnlwdGRfYWxnX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07CisJc3RydWN0IGNyeXB0b19haGFzaCAqdGZtOworCisJaWYgKHNucHJpbnRmKGNyeXB0ZF9hbGdfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSwKKwkJICAgICAiY3J5cHRkKCVzKSIsIGFsZ19uYW1lKSA+PSBDUllQVE9fTUFYX0FMR19OQU1FKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfYWhhc2goY3J5cHRkX2FsZ19uYW1lLCB0eXBlLCBtYXNrKTsKKwlpZiAoSVNfRVJSKHRmbSkpCisJCXJldHVybiBFUlJfQ0FTVCh0Zm0pOworCWlmICh0Zm0tPmJhc2UuX19jcnRfYWxnLT5jcmFfbW9kdWxlICE9IFRISVNfTU9EVUxFKSB7CisJCWNyeXB0b19mcmVlX2FoYXNoKHRmbSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCXJldHVybiBfX2NyeXB0ZF9haGFzaF9jYXN0KHRmbSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdGRfYWxsb2NfYWhhc2gpOworCitzdHJ1Y3QgY3J5cHRvX3NoYXNoICpjcnlwdGRfYWhhc2hfY2hpbGQoc3RydWN0IGNyeXB0ZF9haGFzaCAqdGZtKQoreworCXN0cnVjdCBjcnlwdGRfaGFzaF9jdHggKmN0eCA9IGNyeXB0b19haGFzaF9jdHgoJnRmbS0+YmFzZSk7CisKKwlyZXR1cm4gY3R4LT5jaGlsZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0ZF9haGFzaF9jaGlsZCk7CisKK3ZvaWQgY3J5cHRkX2ZyZWVfYWhhc2goc3RydWN0IGNyeXB0ZF9haGFzaCAqdGZtKQoreworCWNyeXB0b19mcmVlX2FoYXNoKCZ0Zm0tPmJhc2UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRkX2ZyZWVfYWhhc2gpOworCiBzdGF0aWMgaW50IF9faW5pdCBjcnlwdGRfaW5pdCh2b2lkKQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9jcnlwdG8vY3RyLmMgYi9jcnlwdG8vY3RyLmMKaW5kZXggMmQ3NDI1Zi4uNmMzYmZhYiAxMDA2NDQKLS0tIGEvY3J5cHRvL2N0ci5jCisrKyBiL2NyeXB0by9jdHIuYwpAQCAtMjE5LDYgKzIxOSw4IEBACiAJaW5zdC0+YWxnLmNyYV9ibGtjaXBoZXIuZW5jcnlwdCA9IGNyeXB0b19jdHJfY3J5cHQ7CiAJaW5zdC0+YWxnLmNyYV9ibGtjaXBoZXIuZGVjcnlwdCA9IGNyeXB0b19jdHJfY3J5cHQ7CiAKKwlpbnN0LT5hbGcuY3JhX2Jsa2NpcGhlci5nZW5pdiA9ICJjaGFpbml2IjsKKwogb3V0OgogCWNyeXB0b19tb2RfcHV0KGFsZyk7CiAJcmV0dXJuIGluc3Q7CmRpZmYgLS1naXQgYS9jcnlwdG8vZ2NtLmMgYi9jcnlwdG8vZ2NtLmMKaW5kZXggZTcwYWZkMC4uNWZjMzI5MiAxMDA2NDQKLS0tIGEvY3J5cHRvL2djbS5jCisrKyBiL2NyeXB0by9nY20uYwpAQCAtMTEsNyArMTEsMTAgQEAKICNpbmNsdWRlIDxjcnlwdG8vZ2YxMjhtdWwuaD4KICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvYWVhZC5oPgogI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9za2NpcGhlci5oPgorI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL3NjYXR0ZXJ3YWxrLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2hhc2guaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yMSwxMSArMjQsMTIgQEAKIAogc3RydWN0IGdjbV9pbnN0YW5jZV9jdHggewogCXN0cnVjdCBjcnlwdG9fc2tjaXBoZXJfc3Bhd24gY3RyOworCXN0cnVjdCBjcnlwdG9fYWhhc2hfc3Bhd24gZ2hhc2g7CiB9OwogCiBzdHJ1Y3QgY3J5cHRvX2djbV9jdHggewogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqY3RyOwotCXN0cnVjdCBnZjEyOG11bF80ayAqZ2YxMjg7CisJc3RydWN0IGNyeXB0b19haGFzaCAqZ2hhc2g7CiB9OwogCiBzdHJ1Y3QgY3J5cHRvX3JmYzQxMDZfY3R4IHsKQEAgLTM0LDEwICszOCw5IEBACiB9OwogCiBzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggewotCXUzMiBieXRlczsKLQl1MzIgZmxhZ3M7Ci0Jc3RydWN0IGdmMTI4bXVsXzRrICpnZjEyODsKLQl1OCBidWZmZXJbMTZdOworCXVuc2lnbmVkIGludCBjcnlwdGxlbjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYzsKKwljcnlwdG9fY29tcGxldGlvbl90IGNvbXBsZXRlOwogfTsKIAogc3RydWN0IGNyeXB0b19nY21fcmVxX3ByaXZfY3R4IHsKQEAgLTQ1LDggKzQ4LDExIEBACiAJdTggaWF1dGhfdGFnWzE2XTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc3JjWzJdOwogCXN0cnVjdCBzY2F0dGVybGlzdCBkc3RbMl07Ci0Jc3RydWN0IGNyeXB0b19nY21fZ2hhc2hfY3R4IGdoYXNoOwotCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgYWJyZXE7CisJc3RydWN0IGNyeXB0b19nY21fZ2hhc2hfY3R4IGdoYXNoX2N0eDsKKwl1bmlvbiB7CisJCXN0cnVjdCBhaGFzaF9yZXF1ZXN0IGFocmVxOworCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0IGFicmVxOworCX0gdTsKIH07CiAKIHN0cnVjdCBjcnlwdG9fZ2NtX3NldGtleV9yZXN1bHQgewpAQCAtNTQsNiArNjAsOCBAQAogCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247CiB9OwogCitzdGF0aWMgdm9pZCAqZ2NtX3plcm9lczsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX2djbV9yZXFfcHJpdl9jdHggKmNyeXB0b19nY21fcmVxY3R4KAogCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKIHsKQEAgLTYyLDExMyArNzAsNiBAQAogCXJldHVybiAodm9pZCAqKVBUUl9BTElHTigodTggKilhZWFkX3JlcXVlc3RfY3R4KHJlcSksIGFsaWduICsgMSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNyeXB0b19nY21fZ2hhc2hfaW5pdChzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggKmN0eCwgdTMyIGZsYWdzLAotCQkJCSAgc3RydWN0IGdmMTI4bXVsXzRrICpnZjEyOCkKLXsKLQljdHgtPmJ5dGVzID0gMDsKLQljdHgtPmZsYWdzID0gZmxhZ3M7Ci0JY3R4LT5nZjEyOCA9IGdmMTI4OwotCW1lbXNldChjdHgtPmJ1ZmZlciwgMCwgMTYpOwotfQotCi1zdGF0aWMgdm9pZCBjcnlwdG9fZ2NtX2doYXNoX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggKmN0eCwKLQkJCQkgICAgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbikKLXsKLQl1OCAqZHN0ID0gY3R4LT5idWZmZXI7Ci0KLQlpZiAoY3R4LT5ieXRlcykgewotCQlpbnQgbiA9IG1pbihzcmNsZW4sIGN0eC0+Ynl0ZXMpOwotCQl1OCAqcG9zID0gZHN0ICsgKDE2IC0gY3R4LT5ieXRlcyk7Ci0KLQkJY3R4LT5ieXRlcyAtPSBuOwotCQlzcmNsZW4gLT0gbjsKLQotCQl3aGlsZSAobi0tKQotCQkJKnBvcysrIF49ICpzcmMrKzsKLQotCQlpZiAoIWN0eC0+Ynl0ZXMpCi0JCQlnZjEyOG11bF80a19sbGUoKGJlMTI4ICopZHN0LCBjdHgtPmdmMTI4KTsKLQl9Ci0KLQl3aGlsZSAoc3JjbGVuID49IDE2KSB7Ci0JCWNyeXB0b194b3IoZHN0LCBzcmMsIDE2KTsKLQkJZ2YxMjhtdWxfNGtfbGxlKChiZTEyOCAqKWRzdCwgY3R4LT5nZjEyOCk7Ci0JCXNyYyArPSAxNjsKLQkJc3JjbGVuIC09IDE2OwotCX0KLQotCWlmIChzcmNsZW4pIHsKLQkJY3R4LT5ieXRlcyA9IDE2IC0gc3JjbGVuOwotCQl3aGlsZSAoc3JjbGVuLS0pCi0JCQkqZHN0KysgXj0gKnNyYysrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgY3J5cHRvX2djbV9naGFzaF91cGRhdGVfc2coc3RydWN0IGNyeXB0b19nY21fZ2hhc2hfY3R4ICpjdHgsCi0JCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBsZW4pCi17Ci0Jc3RydWN0IHNjYXR0ZXJfd2FsayB3YWxrOwotCXU4ICpzcmM7Ci0JaW50IG47Ci0KLQlpZiAoIWxlbikKLQkJcmV0dXJuOwotCi0Jc2NhdHRlcndhbGtfc3RhcnQoJndhbGssIHNnKTsKLQotCXdoaWxlIChsZW4pIHsKLQkJbiA9IHNjYXR0ZXJ3YWxrX2NsYW1wKCZ3YWxrLCBsZW4pOwotCi0JCWlmICghbikgewotCQkJc2NhdHRlcndhbGtfc3RhcnQoJndhbGssIHNjYXR0ZXJ3YWxrX3NnX25leHQod2Fsay5zZykpOwotCQkJbiA9IHNjYXR0ZXJ3YWxrX2NsYW1wKCZ3YWxrLCBsZW4pOwotCQl9Ci0KLQkJc3JjID0gc2NhdHRlcndhbGtfbWFwKCZ3YWxrLCAwKTsKLQotCQljcnlwdG9fZ2NtX2doYXNoX3VwZGF0ZShjdHgsIHNyYywgbik7Ci0JCWxlbiAtPSBuOwotCi0JCXNjYXR0ZXJ3YWxrX3VubWFwKHNyYywgMCk7Ci0JCXNjYXR0ZXJ3YWxrX2FkdmFuY2UoJndhbGssIG4pOwotCQlzY2F0dGVyd2Fsa19kb25lKCZ3YWxrLCAwLCBsZW4pOwotCQlpZiAobGVuKQotCQkJY3J5cHRvX3lpZWxkKGN0eC0+ZmxhZ3MpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgY3J5cHRvX2djbV9naGFzaF9mbHVzaChzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggKmN0eCkKLXsKLQl1OCAqZHN0ID0gY3R4LT5idWZmZXI7Ci0KLQlpZiAoY3R4LT5ieXRlcykgewotCQl1OCAqdG1wID0gZHN0ICsgKDE2IC0gY3R4LT5ieXRlcyk7Ci0KLQkJd2hpbGUgKGN0eC0+Ynl0ZXMtLSkKLQkJCSp0bXArKyBePSAwOwotCi0JCWdmMTI4bXVsXzRrX2xsZSgoYmUxMjggKilkc3QsIGN0eC0+Z2YxMjgpOwotCX0KLQotCWN0eC0+Ynl0ZXMgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBjcnlwdG9fZ2NtX2doYXNoX2ZpbmFsX3hvcihzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggKmN0eCwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGF1dGhsZW4sCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBjcnlwdGxlbiwgdTggKmRzdCkKLXsKLQl1OCAqYnVmID0gY3R4LT5idWZmZXI7Ci0JdTEyOCBsZW5ndGhzOwotCi0JbGVuZ3Rocy5hID0gY3B1X3RvX2JlNjQoYXV0aGxlbiAqIDgpOwotCWxlbmd0aHMuYiA9IGNwdV90b19iZTY0KGNyeXB0bGVuICogOCk7Ci0KLQljcnlwdG9fZ2NtX2doYXNoX2ZsdXNoKGN0eCk7Ci0JY3J5cHRvX3hvcihidWYsICh1OCAqKSZsZW5ndGhzLCAxNik7Ci0JZ2YxMjhtdWxfNGtfbGxlKChiZTEyOCAqKWJ1ZiwgY3R4LT5nZjEyOCk7Ci0JY3J5cHRvX3hvcihkc3QsIGJ1ZiwgMTYpOwotfQotCiBzdGF0aWMgdm9pZCBjcnlwdG9fZ2NtX3NldGtleV9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQogewogCXN0cnVjdCBjcnlwdG9fZ2NtX3NldGtleV9yZXN1bHQgKnJlc3VsdCA9IHJlcS0+ZGF0YTsKQEAgLTE4NCw2ICs4NSw3IEBACiAJCQkgICAgIHVuc2lnbmVkIGludCBrZXlsZW4pCiB7CiAJc3RydWN0IGNyeXB0b19nY21fY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYWVhZCk7CisJc3RydWN0IGNyeXB0b19haGFzaCAqZ2hhc2ggPSBjdHgtPmdoYXNoOwogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqY3RyID0gY3R4LT5jdHI7CiAJc3RydWN0IHsKIAkJYmUxMjggaGFzaDsKQEAgLTIzMywxMyArMTM1LDEyIEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQlpZiAoY3R4LT5nZjEyOCAhPSBOVUxMKQotCQlnZjEyOG11bF9mcmVlXzRrKGN0eC0+Z2YxMjgpOwotCi0JY3R4LT5nZjEyOCA9IGdmMTI4bXVsX2luaXRfNGtfbGxlKCZkYXRhLT5oYXNoKTsKLQotCWlmIChjdHgtPmdmMTI4ID09IE5VTEwpCi0JCWVyciA9IC1FTk9NRU07CisJY3J5cHRvX2FoYXNoX2NsZWFyX2ZsYWdzKGdoYXNoLCBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKwljcnlwdG9fYWhhc2hfc2V0X2ZsYWdzKGdoYXNoLCBjcnlwdG9fYWVhZF9nZXRfZmxhZ3MoYWVhZCkgJgorCQkJICAgICAgIENSWVBUT19URk1fUkVRX01BU0spOworCWVyciA9IGNyeXB0b19haGFzaF9zZXRrZXkoZ2hhc2gsICh1OCAqKSZkYXRhLT5oYXNoLCBzaXplb2YoYmUxMjgpKTsKKwljcnlwdG9fYWVhZF9zZXRfZmxhZ3MoYWVhZCwgY3J5cHRvX2FoYXNoX2dldF9mbGFncyhnaGFzaCkgJgorCQkJICAgICAgQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CiAKIG91dDoKIAlrZnJlZShkYXRhKTsKQEAgLTI3Miw4ICsxNzMsNiBAQAogCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOwogCXN0cnVjdCBjcnlwdG9fZ2NtX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGFlYWQpOwogCXN0cnVjdCBjcnlwdG9fZ2NtX3JlcV9wcml2X2N0eCAqcGN0eCA9IGNyeXB0b19nY21fcmVxY3R4KHJlcSk7Ci0JdTMyIGZsYWdzID0gcmVxLT5iYXNlLnRmbS0+Y3J0X2ZsYWdzOwotCXN0cnVjdCBjcnlwdG9fZ2NtX2doYXNoX2N0eCAqZ2hhc2ggPSAmcGN0eC0+Z2hhc2g7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3Q7CiAJX19iZTMyIGNvdW50ZXIgPSBjcHVfdG9fYmUzMigxKTsKIApAQCAtMjk2LDEwOCArMTk1LDM5OCBAQAogCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQoYWJsa19yZXEsIHBjdHgtPnNyYywgZHN0LAogCQkJCSAgICAgY3J5cHRsZW4gKyBzaXplb2YocGN0eC0+YXV0aF90YWcpLAogCQkJCSAgICAgcmVxLT5pdik7Ci0KLQljcnlwdG9fZ2NtX2doYXNoX2luaXQoZ2hhc2gsIGZsYWdzLCBjdHgtPmdmMTI4KTsKLQotCWNyeXB0b19nY21fZ2hhc2hfdXBkYXRlX3NnKGdoYXNoLCByZXEtPmFzc29jLCByZXEtPmFzc29jbGVuKTsKLQljcnlwdG9fZ2NtX2doYXNoX2ZsdXNoKGdoYXNoKTsKIH0KIAotc3RhdGljIGludCBjcnlwdG9fZ2NtX2hhc2goc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2NtX3JlbWFpbih1bnNpZ25lZCBpbnQgbGVuKQogewotCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCWxlbiAmPSAweGZVOworCXJldHVybiBsZW4gPyAxNiAtIGxlbiA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIGdjbV9oYXNoX2xlbl9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwgaW50IGVycik7CitzdGF0aWMgdm9pZCBnY21faGFzaF9maW5hbF9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwgaW50IGVycik7CisKK3N0YXRpYyBpbnQgZ2NtX2hhc2hfdXBkYXRlKHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSwKKwkJCSAgIHN0cnVjdCBjcnlwdG9fZ2NtX3JlcV9wcml2X2N0eCAqcGN0eCwKKwkJCSAgIGNyeXB0b19jb21wbGV0aW9uX3QgY29tcGxldGUsCisJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFocmVxID0gJnBjdHgtPnUuYWhyZXE7CisKKwlhaGFzaF9yZXF1ZXN0X3NldF9jYWxsYmFjayhhaHJlcSwgYWVhZF9yZXF1ZXN0X2ZsYWdzKHJlcSksCisJCQkJICAgY29tcGxldGUsIHJlcSk7CisJYWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQoYWhyZXEsIHNyYywgTlVMTCwgbGVuKTsKKworCXJldHVybiBjcnlwdG9fYWhhc2hfdXBkYXRlKGFocmVxKTsKK30KKworc3RhdGljIGludCBnY21faGFzaF9yZW1haW4oc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLAorCQkJICAgc3RydWN0IGNyeXB0b19nY21fcmVxX3ByaXZfY3R4ICpwY3R4LAorCQkJICAgdW5zaWduZWQgaW50IHJlbWFpbiwKKwkJCSAgIGNyeXB0b19jb21wbGV0aW9uX3QgY29tcGxldGUpCit7CisJc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFocmVxID0gJnBjdHgtPnUuYWhyZXE7CisKKwlhaGFzaF9yZXF1ZXN0X3NldF9jYWxsYmFjayhhaHJlcSwgYWVhZF9yZXF1ZXN0X2ZsYWdzKHJlcSksCisJCQkJICAgY29tcGxldGUsIHJlcSk7CisJc2dfaW5pdF9vbmUocGN0eC0+c3JjLCBnY21femVyb2VzLCByZW1haW4pOworCWFoYXNoX3JlcXVlc3Rfc2V0X2NyeXB0KGFocmVxLCBwY3R4LT5zcmMsIE5VTEwsIHJlbWFpbik7CisKKwlyZXR1cm4gY3J5cHRvX2FoYXNoX3VwZGF0ZShhaHJlcSk7Cit9CisKK3N0YXRpYyBpbnQgZ2NtX2hhc2hfbGVuKHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSwKKwkJCXN0cnVjdCBjcnlwdG9fZ2NtX3JlcV9wcml2X2N0eCAqcGN0eCkKK3sKKwlzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqYWhyZXEgPSAmcGN0eC0+dS5haHJlcTsKKwlzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggKmdjdHggPSAmcGN0eC0+Z2hhc2hfY3R4OworCXUxMjggbGVuZ3RoczsKKworCWxlbmd0aHMuYSA9IGNwdV90b19iZTY0KHJlcS0+YXNzb2NsZW4gKiA4KTsKKwlsZW5ndGhzLmIgPSBjcHVfdG9fYmU2NChnY3R4LT5jcnlwdGxlbiAqIDgpOworCW1lbWNweShwY3R4LT5pYXV0aF90YWcsICZsZW5ndGhzLCAxNik7CisJc2dfaW5pdF9vbmUocGN0eC0+c3JjLCBwY3R4LT5pYXV0aF90YWcsIDE2KTsKKwlhaGFzaF9yZXF1ZXN0X3NldF9jYWxsYmFjayhhaHJlcSwgYWVhZF9yZXF1ZXN0X2ZsYWdzKHJlcSksCisJCQkJICAgZ2NtX2hhc2hfbGVuX2RvbmUsIHJlcSk7CisJYWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQoYWhyZXEsIHBjdHgtPnNyYywKKwkJCQlOVUxMLCBzaXplb2YobGVuZ3RocykpOworCisJcmV0dXJuIGNyeXB0b19haGFzaF91cGRhdGUoYWhyZXEpOworfQorCitzdGF0aWMgaW50IGdjbV9oYXNoX2ZpbmFsKHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSwKKwkJCSAgc3RydWN0IGNyeXB0b19nY21fcmVxX3ByaXZfY3R4ICpwY3R4KQoreworCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICphaHJlcSA9ICZwY3R4LT51LmFocmVxOworCisJYWhhc2hfcmVxdWVzdF9zZXRfY2FsbGJhY2soYWhyZXEsIGFlYWRfcmVxdWVzdF9mbGFncyhyZXEpLAorCQkJCSAgIGdjbV9oYXNoX2ZpbmFsX2RvbmUsIHJlcSk7CisJYWhhc2hfcmVxdWVzdF9zZXRfY3J5cHQoYWhyZXEsIE5VTEwsIHBjdHgtPmlhdXRoX3RhZywgMCk7CisKKwlyZXR1cm4gY3J5cHRvX2FoYXNoX2ZpbmFsKGFocmVxKTsKK30KKworc3RhdGljIHZvaWQgZ2NtX2hhc2hfZmluYWxfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsCisJCQkJaW50IGVycikKK3sKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOwogCXN0cnVjdCBjcnlwdG9fZ2NtX3JlcV9wcml2X2N0eCAqcGN0eCA9IGNyeXB0b19nY21fcmVxY3R4KHJlcSk7Ci0JdTggKmF1dGhfdGFnID0gcGN0eC0+YXV0aF90YWc7Ci0Jc3RydWN0IGNyeXB0b19nY21fZ2hhc2hfY3R4ICpnaGFzaCA9ICZwY3R4LT5naGFzaDsKKwlzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggKmdjdHggPSAmcGN0eC0+Z2hhc2hfY3R4OwogCi0JY3J5cHRvX2djbV9naGFzaF91cGRhdGVfc2coZ2hhc2gsIHJlcS0+ZHN0LCByZXEtPmNyeXB0bGVuKTsKLQljcnlwdG9fZ2NtX2doYXNoX2ZpbmFsX3hvcihnaGFzaCwgcmVxLT5hc3NvY2xlbiwgcmVxLT5jcnlwdGxlbiwKLQkJCQkgICBhdXRoX3RhZyk7CisJaWYgKCFlcnIpCisJCWNyeXB0b194b3IocGN0eC0+YXV0aF90YWcsIHBjdHgtPmlhdXRoX3RhZywgMTYpOwogCi0Jc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KGF1dGhfdGFnLCByZXEtPmRzdCwgcmVxLT5jcnlwdGxlbiwKLQkJCQkgY3J5cHRvX2FlYWRfYXV0aHNpemUoYWVhZCksIDEpOworCWdjdHgtPmNvbXBsZXRlKGFyZXEsIGVycik7Cit9CisKK3N0YXRpYyB2b2lkIGdjbV9oYXNoX2xlbl9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwKKwkJCSAgICAgIGludCBlcnIpCit7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gYXJlcS0+ZGF0YTsKKwlzdHJ1Y3QgY3J5cHRvX2djbV9yZXFfcHJpdl9jdHggKnBjdHggPSBjcnlwdG9fZ2NtX3JlcWN0eChyZXEpOworCisJaWYgKCFlcnIpIHsKKwkJZXJyID0gZ2NtX2hhc2hfZmluYWwocmVxLCBwY3R4KTsKKwkJaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MgfHwgZXJyID09IC1FQlVTWSkKKwkJCXJldHVybjsKKwl9CisKKwlnY21faGFzaF9maW5hbF9kb25lKGFyZXEsIGVycik7Cit9CisKK3N0YXRpYyB2b2lkIGdjbV9oYXNoX2NyeXB0X3JlbWFpbl9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwKKwkJCQkgICAgICAgaW50IGVycikKK3sKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOworCXN0cnVjdCBjcnlwdG9fZ2NtX3JlcV9wcml2X2N0eCAqcGN0eCA9IGNyeXB0b19nY21fcmVxY3R4KHJlcSk7CisKKwlpZiAoIWVycikgeworCQllcnIgPSBnY21faGFzaF9sZW4ocmVxLCBwY3R4KTsKKwkJaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MgfHwgZXJyID09IC1FQlVTWSkKKwkJCXJldHVybjsKKwl9CisKKwlnY21faGFzaF9sZW5fZG9uZShhcmVxLCBlcnIpOworfQorCitzdGF0aWMgdm9pZCBnY21faGFzaF9jcnlwdF9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwKKwkJCQlpbnQgZXJyKQoreworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSA9IGFyZXEtPmRhdGE7CisJc3RydWN0IGNyeXB0b19nY21fcmVxX3ByaXZfY3R4ICpwY3R4ID0gY3J5cHRvX2djbV9yZXFjdHgocmVxKTsKKwlzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggKmdjdHggPSAmcGN0eC0+Z2hhc2hfY3R4OworCXVuc2lnbmVkIGludCByZW1haW47CisKKwlpZiAoIWVycikgeworCQlyZW1haW4gPSBnY21fcmVtYWluKGdjdHgtPmNyeXB0bGVuKTsKKwkJQlVHX09OKCFyZW1haW4pOworCQllcnIgPSBnY21faGFzaF9yZW1haW4ocmVxLCBwY3R4LCByZW1haW4sCisJCQkJICAgICAgZ2NtX2hhc2hfY3J5cHRfcmVtYWluX2RvbmUpOworCQlpZiAoZXJyID09IC1FSU5QUk9HUkVTUyB8fCBlcnIgPT0gLUVCVVNZKQorCQkJcmV0dXJuOworCX0KKworCWdjbV9oYXNoX2NyeXB0X3JlbWFpbl9kb25lKGFyZXEsIGVycik7Cit9CisKK3N0YXRpYyB2b2lkIGdjbV9oYXNoX2Fzc29jX3JlbWFpbl9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwKKwkJCQkJICAgaW50IGVycikKK3sKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOworCXN0cnVjdCBjcnlwdG9fZ2NtX3JlcV9wcml2X2N0eCAqcGN0eCA9IGNyeXB0b19nY21fcmVxY3R4KHJlcSk7CisJc3RydWN0IGNyeXB0b19nY21fZ2hhc2hfY3R4ICpnY3R4ID0gJnBjdHgtPmdoYXNoX2N0eDsKKwljcnlwdG9fY29tcGxldGlvbl90IGNvbXBsZXRlOworCXVuc2lnbmVkIGludCByZW1haW4gPSAwOworCisJaWYgKCFlcnIgJiYgZ2N0eC0+Y3J5cHRsZW4pIHsKKwkJcmVtYWluID0gZ2NtX3JlbWFpbihnY3R4LT5jcnlwdGxlbik7CisJCWNvbXBsZXRlID0gcmVtYWluID8gZ2NtX2hhc2hfY3J5cHRfZG9uZSA6CisJCQlnY21faGFzaF9jcnlwdF9yZW1haW5fZG9uZTsKKwkJZXJyID0gZ2NtX2hhc2hfdXBkYXRlKHJlcSwgcGN0eCwgY29tcGxldGUsCisJCQkJICAgICAgZ2N0eC0+c3JjLCBnY3R4LT5jcnlwdGxlbik7CisJCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTIHx8IGVyciA9PSAtRUJVU1kpCisJCQlyZXR1cm47CisJfQorCisJaWYgKHJlbWFpbikKKwkJZ2NtX2hhc2hfY3J5cHRfZG9uZShhcmVxLCBlcnIpOworCWVsc2UKKwkJZ2NtX2hhc2hfY3J5cHRfcmVtYWluX2RvbmUoYXJlcSwgZXJyKTsKK30KKworc3RhdGljIHZvaWQgZ2NtX2hhc2hfYXNzb2NfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsCisJCQkJaW50IGVycikKK3sKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBhcmVxLT5kYXRhOworCXN0cnVjdCBjcnlwdG9fZ2NtX3JlcV9wcml2X2N0eCAqcGN0eCA9IGNyeXB0b19nY21fcmVxY3R4KHJlcSk7CisJdW5zaWduZWQgaW50IHJlbWFpbjsKKworCWlmICghZXJyKSB7CisJCXJlbWFpbiA9IGdjbV9yZW1haW4ocmVxLT5hc3NvY2xlbik7CisJCUJVR19PTighcmVtYWluKTsKKwkJZXJyID0gZ2NtX2hhc2hfcmVtYWluKHJlcSwgcGN0eCwgcmVtYWluLAorCQkJCSAgICAgIGdjbV9oYXNoX2Fzc29jX3JlbWFpbl9kb25lKTsKKwkJaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MgfHwgZXJyID09IC1FQlVTWSkKKwkJCXJldHVybjsKKwl9CisKKwlnY21faGFzaF9hc3NvY19yZW1haW5fZG9uZShhcmVxLCBlcnIpOworfQorCitzdGF0aWMgdm9pZCBnY21faGFzaF9pbml0X2RvbmUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphcmVxLAorCQkJICAgICAgIGludCBlcnIpCit7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gYXJlcS0+ZGF0YTsKKwlzdHJ1Y3QgY3J5cHRvX2djbV9yZXFfcHJpdl9jdHggKnBjdHggPSBjcnlwdG9fZ2NtX3JlcWN0eChyZXEpOworCWNyeXB0b19jb21wbGV0aW9uX3QgY29tcGxldGU7CisJdW5zaWduZWQgaW50IHJlbWFpbiA9IDA7CisKKwlpZiAoIWVyciAmJiByZXEtPmFzc29jbGVuKSB7CisJCXJlbWFpbiA9IGdjbV9yZW1haW4ocmVxLT5hc3NvY2xlbik7CisJCWNvbXBsZXRlID0gcmVtYWluID8gZ2NtX2hhc2hfYXNzb2NfZG9uZSA6CisJCQlnY21faGFzaF9hc3NvY19yZW1haW5fZG9uZTsKKwkJZXJyID0gZ2NtX2hhc2hfdXBkYXRlKHJlcSwgcGN0eCwgY29tcGxldGUsCisJCQkJICAgICAgcmVxLT5hc3NvYywgcmVxLT5hc3NvY2xlbik7CisJCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTIHx8IGVyciA9PSAtRUJVU1kpCisJCQlyZXR1cm47CisJfQorCisJaWYgKHJlbWFpbikKKwkJZ2NtX2hhc2hfYXNzb2NfZG9uZShhcmVxLCBlcnIpOworCWVsc2UKKwkJZ2NtX2hhc2hfYXNzb2NfcmVtYWluX2RvbmUoYXJlcSwgZXJyKTsKK30KKworc3RhdGljIGludCBnY21faGFzaChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEsCisJCSAgICBzdHJ1Y3QgY3J5cHRvX2djbV9yZXFfcHJpdl9jdHggKnBjdHgpCit7CisJc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFocmVxID0gJnBjdHgtPnUuYWhyZXE7CisJc3RydWN0IGNyeXB0b19nY21fZ2hhc2hfY3R4ICpnY3R4ID0gJnBjdHgtPmdoYXNoX2N0eDsKKwlzdHJ1Y3QgY3J5cHRvX2djbV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOworCXVuc2lnbmVkIGludCByZW1haW47CisJY3J5cHRvX2NvbXBsZXRpb25fdCBjb21wbGV0ZTsKKwlpbnQgZXJyOworCisJYWhhc2hfcmVxdWVzdF9zZXRfdGZtKGFocmVxLCBjdHgtPmdoYXNoKTsKKworCWFoYXNoX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKGFocmVxLCBhZWFkX3JlcXVlc3RfZmxhZ3MocmVxKSwKKwkJCQkgICBnY21faGFzaF9pbml0X2RvbmUsIHJlcSk7CisJZXJyID0gY3J5cHRvX2FoYXNoX2luaXQoYWhyZXEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcmVtYWluID0gZ2NtX3JlbWFpbihyZXEtPmFzc29jbGVuKTsKKwljb21wbGV0ZSA9IHJlbWFpbiA/IGdjbV9oYXNoX2Fzc29jX2RvbmUgOiBnY21faGFzaF9hc3NvY19yZW1haW5fZG9uZTsKKwllcnIgPSBnY21faGFzaF91cGRhdGUocmVxLCBwY3R4LCBjb21wbGV0ZSwgcmVxLT5hc3NvYywgcmVxLT5hc3NvY2xlbik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAocmVtYWluKSB7CisJCWVyciA9IGdjbV9oYXNoX3JlbWFpbihyZXEsIHBjdHgsIHJlbWFpbiwKKwkJCQkgICAgICBnY21faGFzaF9hc3NvY19yZW1haW5fZG9uZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZW1haW4gPSBnY21fcmVtYWluKGdjdHgtPmNyeXB0bGVuKTsKKwljb21wbGV0ZSA9IHJlbWFpbiA/IGdjbV9oYXNoX2NyeXB0X2RvbmUgOiBnY21faGFzaF9jcnlwdF9yZW1haW5fZG9uZTsKKwllcnIgPSBnY21faGFzaF91cGRhdGUocmVxLCBwY3R4LCBjb21wbGV0ZSwgZ2N0eC0+c3JjLCBnY3R4LT5jcnlwdGxlbik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAocmVtYWluKSB7CisJCWVyciA9IGdjbV9oYXNoX3JlbWFpbihyZXEsIHBjdHgsIHJlbWFpbiwKKwkJCQkgICAgICBnY21faGFzaF9jcnlwdF9yZW1haW5fZG9uZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwllcnIgPSBnY21faGFzaF9sZW4ocmVxLCBwY3R4KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVyciA9IGdjbV9oYXNoX2ZpbmFsKHJlcSwgcGN0eCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjcnlwdG9fZ2NtX2VuY3J5cHRfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsIGludCBlcnIpCitzdGF0aWMgdm9pZCBnY21fZW5jX2NvcHlfaGFzaChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEsCisJCQkgICAgICBzdHJ1Y3QgY3J5cHRvX2djbV9yZXFfcHJpdl9jdHggKnBjdHgpCit7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7CisJdTggKmF1dGhfdGFnID0gcGN0eC0+YXV0aF90YWc7CisKKwlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoYXV0aF90YWcsIHJlcS0+ZHN0LCByZXEtPmNyeXB0bGVuLAorCQkJCSBjcnlwdG9fYWVhZF9hdXRoc2l6ZShhZWFkKSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGdjbV9lbmNfaGFzaF9kb25lKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXJlcSwKKwkJCQkgICAgIGludCBlcnIpCiB7CiAJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gYXJlcS0+ZGF0YTsKKwlzdHJ1Y3QgY3J5cHRvX2djbV9yZXFfcHJpdl9jdHggKnBjdHggPSBjcnlwdG9fZ2NtX3JlcWN0eChyZXEpOwogCiAJaWYgKCFlcnIpCi0JCWVyciA9IGNyeXB0b19nY21faGFzaChyZXEpOworCQlnY21fZW5jX2NvcHlfaGFzaChyZXEsIHBjdHgpOwogCiAJYWVhZF9yZXF1ZXN0X2NvbXBsZXRlKHJlcSwgZXJyKTsKIH0KIAorc3RhdGljIHZvaWQgZ2NtX2VuY3J5cHRfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsCisJCQkJICAgICBpbnQgZXJyKQoreworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSA9IGFyZXEtPmRhdGE7CisJc3RydWN0IGNyeXB0b19nY21fcmVxX3ByaXZfY3R4ICpwY3R4ID0gY3J5cHRvX2djbV9yZXFjdHgocmVxKTsKKworCWlmICghZXJyKSB7CisJCWVyciA9IGdjbV9oYXNoKHJlcSwgcGN0eCk7CisJCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTIHx8IGVyciA9PSAtRUJVU1kpCisJCQlyZXR1cm47CisJfQorCisJZ2NtX2VuY19oYXNoX2RvbmUoYXJlcSwgZXJyKTsKK30KKwogc3RhdGljIGludCBjcnlwdG9fZ2NtX2VuY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCBjcnlwdG9fZ2NtX3JlcV9wcml2X2N0eCAqcGN0eCA9IGNyeXB0b19nY21fcmVxY3R4KHJlcSk7Ci0Jc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqYWJyZXEgPSAmcGN0eC0+YWJyZXE7CisJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqYWJyZXEgPSAmcGN0eC0+dS5hYnJlcTsKKwlzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggKmdjdHggPSAmcGN0eC0+Z2hhc2hfY3R4OwogCWludCBlcnI7CiAKIAljcnlwdG9fZ2NtX2luaXRfY3J5cHQoYWJyZXEsIHJlcSwgcmVxLT5jcnlwdGxlbik7CiAJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjayhhYnJlcSwgYWVhZF9yZXF1ZXN0X2ZsYWdzKHJlcSksCi0JCQkJCWNyeXB0b19nY21fZW5jcnlwdF9kb25lLCByZXEpOworCQkJCQlnY21fZW5jcnlwdF9kb25lLCByZXEpOworCisJZ2N0eC0+c3JjID0gcmVxLT5kc3Q7CisJZ2N0eC0+Y3J5cHRsZW4gPSByZXEtPmNyeXB0bGVuOworCWdjdHgtPmNvbXBsZXRlID0gZ2NtX2VuY19oYXNoX2RvbmU7CiAKIAllcnIgPSBjcnlwdG9fYWJsa2NpcGhlcl9lbmNyeXB0KGFicmVxKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIGNyeXB0b19nY21faGFzaChyZXEpOworCWVyciA9IGdjbV9oYXNoKHJlcSwgcGN0eCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWNyeXB0b194b3IocGN0eC0+YXV0aF90YWcsIHBjdHgtPmlhdXRoX3RhZywgMTYpOworCWdjbV9lbmNfY29weV9oYXNoKHJlcSwgcGN0eCk7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjcnlwdG9fZ2NtX3ZlcmlmeShzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCitzdGF0aWMgaW50IGNyeXB0b19nY21fdmVyaWZ5KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSwKKwkJCSAgICAgc3RydWN0IGNyeXB0b19nY21fcmVxX3ByaXZfY3R4ICpwY3R4KQogewogCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOwotCXN0cnVjdCBjcnlwdG9fZ2NtX3JlcV9wcml2X2N0eCAqcGN0eCA9IGNyeXB0b19nY21fcmVxY3R4KHJlcSk7Ci0Jc3RydWN0IGNyeXB0b19nY21fZ2hhc2hfY3R4ICpnaGFzaCA9ICZwY3R4LT5naGFzaDsKIAl1OCAqYXV0aF90YWcgPSBwY3R4LT5hdXRoX3RhZzsKIAl1OCAqaWF1dGhfdGFnID0gcGN0eC0+aWF1dGhfdGFnOwogCXVuc2lnbmVkIGludCBhdXRoc2l6ZSA9IGNyeXB0b19hZWFkX2F1dGhzaXplKGFlYWQpOwogCXVuc2lnbmVkIGludCBjcnlwdGxlbiA9IHJlcS0+Y3J5cHRsZW4gLSBhdXRoc2l6ZTsKIAotCWNyeXB0b19nY21fZ2hhc2hfZmluYWxfeG9yKGdoYXNoLCByZXEtPmFzc29jbGVuLCBjcnlwdGxlbiwgYXV0aF90YWcpOwotCi0JYXV0aHNpemUgPSBjcnlwdG9fYWVhZF9hdXRoc2l6ZShhZWFkKTsKKwljcnlwdG9feG9yKGF1dGhfdGFnLCBpYXV0aF90YWcsIDE2KTsKIAlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoaWF1dGhfdGFnLCByZXEtPnNyYywgY3J5cHRsZW4sIGF1dGhzaXplLCAwKTsKIAlyZXR1cm4gbWVtY21wKGlhdXRoX3RhZywgYXV0aF90YWcsIGF1dGhzaXplKSA/IC1FQkFETVNHIDogMDsKIH0KIAotc3RhdGljIHZvaWQgY3J5cHRvX2djbV9kZWNyeXB0X2RvbmUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphcmVxLCBpbnQgZXJyKQorc3RhdGljIHZvaWQgZ2NtX2RlY3J5cHRfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsIGludCBlcnIpCiB7CiAJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gYXJlcS0+ZGF0YTsKKwlzdHJ1Y3QgY3J5cHRvX2djbV9yZXFfcHJpdl9jdHggKnBjdHggPSBjcnlwdG9fZ2NtX3JlcWN0eChyZXEpOwogCiAJaWYgKCFlcnIpCi0JCWVyciA9IGNyeXB0b19nY21fdmVyaWZ5KHJlcSk7CisJCWVyciA9IGNyeXB0b19nY21fdmVyaWZ5KHJlcSwgcGN0eCk7CiAKIAlhZWFkX3JlcXVlc3RfY29tcGxldGUocmVxLCBlcnIpOwogfQogCitzdGF0aWMgdm9pZCBnY21fZGVjX2hhc2hfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsIGludCBlcnIpCit7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gYXJlcS0+ZGF0YTsKKwlzdHJ1Y3QgY3J5cHRvX2djbV9yZXFfcHJpdl9jdHggKnBjdHggPSBjcnlwdG9fZ2NtX3JlcWN0eChyZXEpOworCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmFicmVxID0gJnBjdHgtPnUuYWJyZXE7CisJc3RydWN0IGNyeXB0b19nY21fZ2hhc2hfY3R4ICpnY3R4ID0gJnBjdHgtPmdoYXNoX2N0eDsKKworCWlmICghZXJyKSB7CisJCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY2FsbGJhY2soYWJyZXEsIGFlYWRfcmVxdWVzdF9mbGFncyhyZXEpLAorCQkJCQkJZ2NtX2RlY3J5cHRfZG9uZSwgcmVxKTsKKwkJY3J5cHRvX2djbV9pbml0X2NyeXB0KGFicmVxLCByZXEsIGdjdHgtPmNyeXB0bGVuKTsKKwkJZXJyID0gY3J5cHRvX2FibGtjaXBoZXJfZGVjcnlwdChhYnJlcSk7CisJCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTIHx8IGVyciA9PSAtRUJVU1kpCisJCQlyZXR1cm47CisJfQorCisJZ2NtX2RlY3J5cHRfZG9uZShhcmVxLCBlcnIpOworfQorCiBzdGF0aWMgaW50IGNyeXB0b19nY21fZGVjcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7CiAJc3RydWN0IGNyeXB0b19nY21fcmVxX3ByaXZfY3R4ICpwY3R4ID0gY3J5cHRvX2djbV9yZXFjdHgocmVxKTsKLQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICphYnJlcSA9ICZwY3R4LT5hYnJlcTsKLQlzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggKmdoYXNoID0gJnBjdHgtPmdoYXNoOwotCXVuc2lnbmVkIGludCBjcnlwdGxlbiA9IHJlcS0+Y3J5cHRsZW47CisJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqYWJyZXEgPSAmcGN0eC0+dS5hYnJlcTsKKwlzdHJ1Y3QgY3J5cHRvX2djbV9naGFzaF9jdHggKmdjdHggPSAmcGN0eC0+Z2hhc2hfY3R4OwogCXVuc2lnbmVkIGludCBhdXRoc2l6ZSA9IGNyeXB0b19hZWFkX2F1dGhzaXplKGFlYWQpOworCXVuc2lnbmVkIGludCBjcnlwdGxlbiA9IHJlcS0+Y3J5cHRsZW47CiAJaW50IGVycjsKIAogCWlmIChjcnlwdGxlbiA8IGF1dGhzaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAljcnlwdGxlbiAtPSBhdXRoc2l6ZTsKIAotCWNyeXB0b19nY21faW5pdF9jcnlwdChhYnJlcSwgcmVxLCBjcnlwdGxlbik7CisJZ2N0eC0+c3JjID0gcmVxLT5zcmM7CisJZ2N0eC0+Y3J5cHRsZW4gPSBjcnlwdGxlbjsKKwlnY3R4LT5jb21wbGV0ZSA9IGdjbV9kZWNfaGFzaF9kb25lOworCisJZXJyID0gZ2NtX2hhc2gocmVxLCBwY3R4KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjayhhYnJlcSwgYWVhZF9yZXF1ZXN0X2ZsYWdzKHJlcSksCi0JCQkJCWNyeXB0b19nY21fZGVjcnlwdF9kb25lLCByZXEpOwotCi0JY3J5cHRvX2djbV9naGFzaF91cGRhdGVfc2coZ2hhc2gsIHJlcS0+c3JjLCBjcnlwdGxlbik7Ci0KKwkJCQkJZ2NtX2RlY3J5cHRfZG9uZSwgcmVxKTsKKwljcnlwdG9fZ2NtX2luaXRfY3J5cHQoYWJyZXEsIHJlcSwgY3J5cHRsZW4pOwogCWVyciA9IGNyeXB0b19hYmxrY2lwaGVyX2RlY3J5cHQoYWJyZXEpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlyZXR1cm4gY3J5cHRvX2djbV92ZXJpZnkocmVxKTsKKwlyZXR1cm4gY3J5cHRvX2djbV92ZXJpZnkocmVxLCBwY3R4KTsKIH0KIAogc3RhdGljIGludCBjcnlwdG9fZ2NtX2luaXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCkBAIC00MDYsNDMgKzU5NSw1NiBAQAogCXN0cnVjdCBnY21faW5zdGFuY2VfY3R4ICppY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKIAlzdHJ1Y3QgY3J5cHRvX2djbV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpjdHI7CisJc3RydWN0IGNyeXB0b19haGFzaCAqZ2hhc2g7CiAJdW5zaWduZWQgbG9uZyBhbGlnbjsKIAlpbnQgZXJyOwogCisJZ2hhc2ggPSBjcnlwdG9fc3Bhd25fYWhhc2goJmljdHgtPmdoYXNoKTsKKwlpZiAoSVNfRVJSKGdoYXNoKSkKKwkJcmV0dXJuIFBUUl9FUlIoZ2hhc2gpOworCiAJY3RyID0gY3J5cHRvX3NwYXduX3NrY2lwaGVyKCZpY3R4LT5jdHIpOwogCWVyciA9IFBUUl9FUlIoY3RyKTsKIAlpZiAoSVNfRVJSKGN0cikpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyX2ZyZWVfaGFzaDsKIAogCWN0eC0+Y3RyID0gY3RyOwotCWN0eC0+Z2YxMjggPSBOVUxMOworCWN0eC0+Z2hhc2ggPSBnaGFzaDsKIAogCWFsaWduID0gY3J5cHRvX3RmbV9hbGdfYWxpZ25tYXNrKHRmbSk7CiAJYWxpZ24gJj0gfihjcnlwdG9fdGZtX2N0eF9hbGlnbm1lbnQoKSAtIDEpOwogCXRmbS0+Y3J0X2FlYWQucmVxc2l6ZSA9IGFsaWduICsKLQkJCQlzaXplb2Yoc3RydWN0IGNyeXB0b19nY21fcmVxX3ByaXZfY3R4KSArCi0JCQkJY3J5cHRvX2FibGtjaXBoZXJfcmVxc2l6ZShjdHIpOworCQlvZmZzZXRvZihzdHJ1Y3QgY3J5cHRvX2djbV9yZXFfcHJpdl9jdHgsIHUpICsKKwkJbWF4KHNpemVvZihzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0KSArCisJCSAgICBjcnlwdG9fYWJsa2NpcGhlcl9yZXFzaXplKGN0ciksCisJCSAgICBzaXplb2Yoc3RydWN0IGFoYXNoX3JlcXVlc3QpICsKKwkJICAgIGNyeXB0b19haGFzaF9yZXFzaXplKGdoYXNoKSk7CiAKIAlyZXR1cm4gMDsKKworZXJyX2ZyZWVfaGFzaDoKKwljcnlwdG9fZnJlZV9haGFzaChnaGFzaCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgY3J5cHRvX2djbV9leGl0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewogCXN0cnVjdCBjcnlwdG9fZ2NtX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAotCWlmIChjdHgtPmdmMTI4ICE9IE5VTEwpCi0JCWdmMTI4bXVsX2ZyZWVfNGsoY3R4LT5nZjEyOCk7Ci0KKwljcnlwdG9fZnJlZV9haGFzaChjdHgtPmdoYXNoKTsKIAljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGN0eC0+Y3RyKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0b19nY21fYWxsb2NfY29tbW9uKHN0cnVjdCBydGF0dHIgKip0YiwKIAkJCQkJCSAgICAgICBjb25zdCBjaGFyICpmdWxsX25hbWUsCi0JCQkJCQkgICAgICAgY29uc3QgY2hhciAqY3RyX25hbWUpCisJCQkJCQkgICAgICAgY29uc3QgY2hhciAqY3RyX25hbWUsCisJCQkJCQkgICAgICAgY29uc3QgY2hhciAqZ2hhc2hfbmFtZSkKIHsKIAlzdHJ1Y3QgY3J5cHRvX2F0dHJfdHlwZSAqYWxndDsKIAlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OwogCXN0cnVjdCBjcnlwdG9fYWxnICpjdHI7CisJc3RydWN0IGNyeXB0b19hbGcgKmdoYXNoX2FsZzsKKwlzdHJ1Y3QgYWhhc2hfYWxnICpnaGFzaF9haGFzaF9hbGc7CiAJc3RydWN0IGdjbV9pbnN0YW5jZV9jdHggKmN0eDsKIAlpbnQgZXJyOwogCkBAIC00NTQsMTcgKzY1NiwzMSBAQAogCWlmICgoYWxndC0+dHlwZSBeIENSWVBUT19BTEdfVFlQRV9BRUFEKSAmIGFsZ3QtPm1hc2spCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCisJZ2hhc2hfYWxnID0gY3J5cHRvX2ZpbmRfYWxnKGdoYXNoX25hbWUsICZjcnlwdG9fYWhhc2hfdHlwZSwKKwkJCQkgICAgQ1JZUFRPX0FMR19UWVBFX0hBU0gsCisJCQkJICAgIENSWVBUT19BTEdfVFlQRV9BSEFTSF9NQVNLKTsKKwllcnIgPSBQVFJfRVJSKGdoYXNoX2FsZyk7CisJaWYgKElTX0VSUihnaGFzaF9hbGcpKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJZXJyID0gLUVOT01FTTsKIAlpbnN0ID0ga3phbGxvYyhzaXplb2YoKmluc3QpICsgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluc3QpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG91dF9wdXRfZ2hhc2g7CiAKIAljdHggPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOworCWdoYXNoX2FoYXNoX2FsZyA9IGNvbnRhaW5lcl9vZihnaGFzaF9hbGcsIHN0cnVjdCBhaGFzaF9hbGcsIGhhbGcuYmFzZSk7CisJZXJyID0gY3J5cHRvX2luaXRfYWhhc2hfc3Bhd24oJmN0eC0+Z2hhc2gsICZnaGFzaF9haGFzaF9hbGctPmhhbGcsCisJCQkJICAgICAgaW5zdCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9pbnN0OworCiAJY3J5cHRvX3NldF9za2NpcGhlcl9zcGF3bigmY3R4LT5jdHIsIGluc3QpOwogCWVyciA9IGNyeXB0b19ncmFiX3NrY2lwaGVyKCZjdHgtPmN0ciwgY3RyX25hbWUsIDAsCiAJCQkJICAgY3J5cHRvX3JlcXVpcmVzX3N5bmMoYWxndC0+dHlwZSwKIAkJCQkJCQlhbGd0LT5tYXNrKSk7CiAJaWYgKGVycikKLQkJZ290byBlcnJfZnJlZV9pbnN0OworCQlnb3RvIGVycl9kcm9wX2doYXNoOwogCiAJY3RyID0gY3J5cHRvX3NrY2lwaGVyX3NwYXduX2FsZygmY3R4LT5jdHIpOwogCkBAIC00NzksNyArNjk1LDggQEAKIAogCWVyciA9IC1FTkFNRVRPT0xPTkc7CiAJaWYgKHNucHJpbnRmKGluc3QtPmFsZy5jcmFfZHJpdmVyX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUsCi0JCSAgICAgImdjbV9iYXNlKCVzKSIsIGN0ci0+Y3JhX2RyaXZlcl9uYW1lKSA+PQorCQkgICAgICJnY21fYmFzZSglcywlcykiLCBjdHItPmNyYV9kcml2ZXJfbmFtZSwKKwkJICAgICBnaGFzaF9hbGctPmNyYV9kcml2ZXJfbmFtZSkgPj0KIAkgICAgQ1JZUFRPX01BWF9BTEdfTkFNRSkKIAkJZ290byBvdXRfcHV0X2N0cjsKIApAQCAtNTAyLDEyICs3MTksMTYgQEAKIAlpbnN0LT5hbGcuY3JhX2FlYWQuZGVjcnlwdCA9IGNyeXB0b19nY21fZGVjcnlwdDsKIAogb3V0OgorCWNyeXB0b19tb2RfcHV0KGdoYXNoX2FsZyk7CiAJcmV0dXJuIGluc3Q7CiAKIG91dF9wdXRfY3RyOgogCWNyeXB0b19kcm9wX3NrY2lwaGVyKCZjdHgtPmN0cik7CitlcnJfZHJvcF9naGFzaDoKKwljcnlwdG9fZHJvcF9haGFzaCgmY3R4LT5naGFzaCk7CiBlcnJfZnJlZV9pbnN0OgogCWtmcmVlKGluc3QpOworb3V0X3B1dF9naGFzaDoKIAlpbnN0ID0gRVJSX1BUUihlcnIpOwogCWdvdG8gb3V0OwogfQpAQCAtNTMyLDcgKzc1Myw3IEBACiAJICAgIENSWVBUT19NQVhfQUxHX05BTUUpCiAJCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOwogCi0JcmV0dXJuIGNyeXB0b19nY21fYWxsb2NfY29tbW9uKHRiLCBmdWxsX25hbWUsIGN0cl9uYW1lKTsKKwlyZXR1cm4gY3J5cHRvX2djbV9hbGxvY19jb21tb24odGIsIGZ1bGxfbmFtZSwgY3RyX25hbWUsICJnaGFzaCIpOwogfQogCiBzdGF0aWMgdm9pZCBjcnlwdG9fZ2NtX2ZyZWUoc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCkKQEAgLTU0MCw2ICs3NjEsNyBAQAogCXN0cnVjdCBnY21faW5zdGFuY2VfY3R4ICpjdHggPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOwogCiAJY3J5cHRvX2Ryb3Bfc2tjaXBoZXIoJmN0eC0+Y3RyKTsKKwljcnlwdG9fZHJvcF9haGFzaCgmY3R4LT5naGFzaCk7CiAJa2ZyZWUoaW5zdCk7CiB9CiAKQEAgLTU1NCw2ICs3NzYsNyBAQAogewogCWludCBlcnI7CiAJY29uc3QgY2hhciAqY3RyX25hbWU7CisJY29uc3QgY2hhciAqZ2hhc2hfbmFtZTsKIAljaGFyIGZ1bGxfbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKIAogCWN0cl9uYW1lID0gY3J5cHRvX2F0dHJfYWxnX25hbWUodGJbMV0pOwpAQCAtNTYxLDExICs3ODQsMTYgQEAKIAlpZiAoSVNfRVJSKGN0cl9uYW1lKSkKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAotCWlmIChzbnByaW50ZihmdWxsX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUsICJnY21fYmFzZSglcykiLAotCQkgICAgIGN0cl9uYW1lKSA+PSBDUllQVE9fTUFYX0FMR19OQU1FKQorCWdoYXNoX25hbWUgPSBjcnlwdG9fYXR0cl9hbGdfbmFtZSh0YlsyXSk7CisJZXJyID0gUFRSX0VSUihnaGFzaF9uYW1lKTsKKwlpZiAoSVNfRVJSKGdoYXNoX25hbWUpKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJaWYgKHNucHJpbnRmKGZ1bGxfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSwgImdjbV9iYXNlKCVzLCVzKSIsCisJCSAgICAgY3RyX25hbWUsIGdoYXNoX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCiAJCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOwogCi0JcmV0dXJuIGNyeXB0b19nY21fYWxsb2NfY29tbW9uKHRiLCBmdWxsX25hbWUsIGN0cl9uYW1lKTsKKwlyZXR1cm4gY3J5cHRvX2djbV9hbGxvY19jb21tb24odGIsIGZ1bGxfbmFtZSwgY3RyX25hbWUsIGdoYXNoX25hbWUpOwogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b190ZW1wbGF0ZSBjcnlwdG9fZ2NtX2Jhc2VfdG1wbCA9IHsKQEAgLTc4NCw2ICsxMDEyLDEwIEBACiB7CiAJaW50IGVycjsKIAorCWdjbV96ZXJvZXMgPSBremFsbG9jKDE2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdjbV96ZXJvZXMpCisJCXJldHVybiAtRU5PTUVNOworCiAJZXJyID0gY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fZ2NtX2Jhc2VfdG1wbCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC03OTYsMTggKzEwMjgsMjAgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmRvX2djbTsKIAotb3V0OgotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiAKIG91dF91bmRvX2djbToKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2djbV90bXBsKTsKIG91dF91bmRvX2Jhc2U6CiAJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19nY21fYmFzZV90bXBsKTsKLQlnb3RvIG91dDsKK291dDoKKwlrZnJlZShnY21femVyb2VzKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3J5cHRvX2djbV9tb2R1bGVfZXhpdCh2b2lkKQogeworCWtmcmVlKGdjbV96ZXJvZXMpOwogCWNyeXB0b191bnJlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fcmZjNDEwNl90bXBsKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2djbV90bXBsKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2djbV9iYXNlX3RtcGwpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2doYXNoLWdlbmVyaWMuYyBiL2NyeXB0by9naGFzaC1nZW5lcmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0NDI1NgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9naGFzaC1nZW5lcmljLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBHSEFTSDogZGlnZXN0IGFsZ29yaXRobSBmb3IgR0NNIChHYWxvaXMvQ291bnRlciBNb2RlKS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgTm9raWEgU2llbWVucyBOZXR3b3JrcyAtIE1pa2tvIEhlcnJhbmVuIDxtaDFAaWtpLmZpPgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnAuCisgKiAgIEF1dGhvcjogSHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+CisgKgorICogVGhlIGFsZ29yaXRobSBpbXBsZW1lbnRhdGlvbiBpcyBjb3BpZWQgZnJvbSBnY20uYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2dmMTI4bXVsLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNkZWZpbmUgR0hBU0hfQkxPQ0tfU0laRQkxNgorI2RlZmluZSBHSEFTSF9ESUdFU1RfU0laRQkxNgorCitzdHJ1Y3QgZ2hhc2hfY3R4IHsKKwlzdHJ1Y3QgZ2YxMjhtdWxfNGsgKmdmMTI4OworfTsKKworc3RydWN0IGdoYXNoX2Rlc2NfY3R4IHsKKwl1OCBidWZmZXJbR0hBU0hfQkxPQ0tfU0laRV07CisJdTMyIGJ5dGVzOworfTsKKworc3RhdGljIGludCBnaGFzaF9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQoreworCXN0cnVjdCBnaGFzaF9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCisJbWVtc2V0KGRjdHgsIDAsIHNpemVvZigqZGN0eCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2hhc2hfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2hhc2ggKnRmbSwKKwkJCWNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCit7CisJc3RydWN0IGdoYXNoX2N0eCAqY3R4ID0gY3J5cHRvX3NoYXNoX2N0eCh0Zm0pOworCisJaWYgKGtleWxlbiAhPSBHSEFTSF9CTE9DS19TSVpFKSB7CisJCWNyeXB0b19zaGFzaF9zZXRfZmxhZ3ModGZtLCBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjdHgtPmdmMTI4KQorCQlnZjEyOG11bF9mcmVlXzRrKGN0eC0+Z2YxMjgpOworCWN0eC0+Z2YxMjggPSBnZjEyOG11bF9pbml0XzRrX2xsZSgoYmUxMjggKilrZXkpOworCWlmICghY3R4LT5nZjEyOCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaGFzaF91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsCisJCQkgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbikKK3sKKwlzdHJ1Y3QgZ2hhc2hfZGVzY19jdHggKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwlzdHJ1Y3QgZ2hhc2hfY3R4ICpjdHggPSBjcnlwdG9fc2hhc2hfY3R4KGRlc2MtPnRmbSk7CisJdTggKmRzdCA9IGRjdHgtPmJ1ZmZlcjsKKworCWlmIChkY3R4LT5ieXRlcykgeworCQlpbnQgbiA9IG1pbihzcmNsZW4sIGRjdHgtPmJ5dGVzKTsKKwkJdTggKnBvcyA9IGRzdCArIChHSEFTSF9CTE9DS19TSVpFIC0gZGN0eC0+Ynl0ZXMpOworCisJCWRjdHgtPmJ5dGVzIC09IG47CisJCXNyY2xlbiAtPSBuOworCisJCXdoaWxlIChuLS0pCisJCQkqcG9zKysgXj0gKnNyYysrOworCisJCWlmICghZGN0eC0+Ynl0ZXMpCisJCQlnZjEyOG11bF80a19sbGUoKGJlMTI4ICopZHN0LCBjdHgtPmdmMTI4KTsKKwl9CisKKwl3aGlsZSAoc3JjbGVuID49IEdIQVNIX0JMT0NLX1NJWkUpIHsKKwkJY3J5cHRvX3hvcihkc3QsIHNyYywgR0hBU0hfQkxPQ0tfU0laRSk7CisJCWdmMTI4bXVsXzRrX2xsZSgoYmUxMjggKilkc3QsIGN0eC0+Z2YxMjgpOworCQlzcmMgKz0gR0hBU0hfQkxPQ0tfU0laRTsKKwkJc3JjbGVuIC09IEdIQVNIX0JMT0NLX1NJWkU7CisJfQorCisJaWYgKHNyY2xlbikgeworCQlkY3R4LT5ieXRlcyA9IEdIQVNIX0JMT0NLX1NJWkUgLSBzcmNsZW47CisJCXdoaWxlIChzcmNsZW4tLSkKKwkJCSpkc3QrKyBePSAqc3JjKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdoYXNoX2ZsdXNoKHN0cnVjdCBnaGFzaF9jdHggKmN0eCwgc3RydWN0IGdoYXNoX2Rlc2NfY3R4ICpkY3R4KQoreworCXU4ICpkc3QgPSBkY3R4LT5idWZmZXI7CisKKwlpZiAoZGN0eC0+Ynl0ZXMpIHsKKwkJdTggKnRtcCA9IGRzdCArIChHSEFTSF9CTE9DS19TSVpFIC0gZGN0eC0+Ynl0ZXMpOworCisJCXdoaWxlIChkY3R4LT5ieXRlcy0tKQorCQkJKnRtcCsrIF49IDA7CisKKwkJZ2YxMjhtdWxfNGtfbGxlKChiZTEyOCAqKWRzdCwgY3R4LT5nZjEyOCk7CisJfQorCisJZGN0eC0+Ynl0ZXMgPSAwOworfQorCitzdGF0aWMgaW50IGdoYXNoX2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqZHN0KQoreworCXN0cnVjdCBnaGFzaF9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBnaGFzaF9jdHggKmN0eCA9IGNyeXB0b19zaGFzaF9jdHgoZGVzYy0+dGZtKTsKKwl1OCAqYnVmID0gZGN0eC0+YnVmZmVyOworCisJZ2hhc2hfZmx1c2goY3R4LCBkY3R4KTsKKwltZW1jcHkoZHN0LCBidWYsIEdIQVNIX0JMT0NLX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdoYXNoX2V4aXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGdoYXNoX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlpZiAoY3R4LT5nZjEyOCkKKwkJZ2YxMjhtdWxfZnJlZV80ayhjdHgtPmdmMTI4KTsKK30KKworc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgZ2hhc2hfYWxnID0geworCS5kaWdlc3RzaXplCT0gR0hBU0hfRElHRVNUX1NJWkUsCisJLmluaXQJCT0gZ2hhc2hfaW5pdCwKKwkudXBkYXRlCQk9IGdoYXNoX3VwZGF0ZSwKKwkuZmluYWwJCT0gZ2hhc2hfZmluYWwsCisJLnNldGtleQkJPSBnaGFzaF9zZXRrZXksCisJLmRlc2NzaXplCT0gc2l6ZW9mKHN0cnVjdCBnaGFzaF9kZXNjX2N0eCksCisJLmJhc2UJCT0geworCQkuY3JhX25hbWUJCT0gImdoYXNoIiwKKwkJLmNyYV9kcml2ZXJfbmFtZQk9ICJnaGFzaC1nZW5lcmljIiwKKwkJLmNyYV9wcmlvcml0eQkJPSAxMDAsCisJCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQkJPSBHSEFTSF9CTE9DS19TSVpFLAorCQkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBnaGFzaF9jdHgpLAorCQkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKGdoYXNoX2FsZy5iYXNlLmNyYV9saXN0KSwKKwkJLmNyYV9leGl0CQk9IGdoYXNoX2V4aXRfdGZtLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBnaGFzaF9tb2RfaW5pdCh2b2lkKQoreworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJmdoYXNoX2FsZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBnaGFzaF9tb2RfZXhpdCh2b2lkKQoreworCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZnaGFzaF9hbGcpOworfQorCittb2R1bGVfaW5pdChnaGFzaF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChnaGFzaF9tb2RfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiR0hBU0ggTWVzc2FnZSBEaWdlc3QgQWxnb3JpdGhtIik7CitNT0RVTEVfQUxJQVMoImdoYXNoIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vaG1hYy5jIGIvY3J5cHRvL2htYWMuYwppbmRleCAwYWQzOWMzLi4xNWMyZWI1IDEwMDY0NAotLS0gYS9jcnlwdG8vaG1hYy5jCisrKyBiL2NyeXB0by9obWFjLmMKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAogc3RydWN0IGhtYWNfY3R4IHsKLQlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmNoaWxkOworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKmhhc2g7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmFsaWduX3B0cih2b2lkICpwLCB1bnNpZ25lZCBpbnQgYWxpZ24pCkBAIC0zNSw2NSArMzUsNDUgQEAKIAlyZXR1cm4gKHZvaWQgKilBTElHTigodW5zaWduZWQgbG9uZylwLCBhbGlnbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhtYWNfY3R4ICpobWFjX2N0eChzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhtYWNfY3R4ICpobWFjX2N0eChzdHJ1Y3QgY3J5cHRvX3NoYXNoICp0Zm0pCiB7Ci0JcmV0dXJuIGFsaWduX3B0cihjcnlwdG9faGFzaF9jdHhfYWxpZ25lZCh0Zm0pICsKLQkJCSBjcnlwdG9faGFzaF9ibG9ja3NpemUodGZtKSAqIDIgKwotCQkJIGNyeXB0b19oYXNoX2RpZ2VzdHNpemUodGZtKSwgc2l6ZW9mKHZvaWQgKikpOworCXJldHVybiBhbGlnbl9wdHIoY3J5cHRvX3NoYXNoX2N0eF9hbGlnbmVkKHRmbSkgKworCQkJIGNyeXB0b19zaGFzaF9zdGF0ZXNpemUodGZtKSAqIDIsCisJCQkgY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkpOwogfQogCi1zdGF0aWMgaW50IGhtYWNfc2V0a2V5KHN0cnVjdCBjcnlwdG9faGFzaCAqcGFyZW50LAorc3RhdGljIGludCBobWFjX3NldGtleShzdHJ1Y3QgY3J5cHRvX3NoYXNoICpwYXJlbnQsCiAJCSAgICAgICBjb25zdCB1OCAqaW5rZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCiB7Ci0JaW50IGJzID0gY3J5cHRvX2hhc2hfYmxvY2tzaXplKHBhcmVudCk7Ci0JaW50IGRzID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShwYXJlbnQpOwotCWNoYXIgKmlwYWQgPSBjcnlwdG9faGFzaF9jdHhfYWxpZ25lZChwYXJlbnQpOwotCWNoYXIgKm9wYWQgPSBpcGFkICsgYnM7Ci0JY2hhciAqZGlnZXN0ID0gb3BhZCArIGJzOwotCXN0cnVjdCBobWFjX2N0eCAqY3R4ID0gYWxpZ25fcHRyKGRpZ2VzdCArIGRzLCBzaXplb2Yodm9pZCAqKSk7Ci0Jc3RydWN0IGNyeXB0b19oYXNoICp0Zm0gPSBjdHgtPmNoaWxkOworCWludCBicyA9IGNyeXB0b19zaGFzaF9ibG9ja3NpemUocGFyZW50KTsKKwlpbnQgZHMgPSBjcnlwdG9fc2hhc2hfZGlnZXN0c2l6ZShwYXJlbnQpOworCWludCBzcyA9IGNyeXB0b19zaGFzaF9zdGF0ZXNpemUocGFyZW50KTsKKwljaGFyICppcGFkID0gY3J5cHRvX3NoYXNoX2N0eF9hbGlnbmVkKHBhcmVudCk7CisJY2hhciAqb3BhZCA9IGlwYWQgKyBzczsKKwlzdHJ1Y3QgaG1hY19jdHggKmN0eCA9IGFsaWduX3B0cihvcGFkICsgc3MsCisJCQkJCSBjcnlwdG9fdGZtX2N0eF9hbGlnbm1lbnQoKSk7CisJc3RydWN0IGNyeXB0b19zaGFzaCAqaGFzaCA9IGN0eC0+aGFzaDsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qgc2hhc2hfZGVzYyBzaGFzaDsKKwkJY2hhciBjdHhbY3J5cHRvX3NoYXNoX2Rlc2NzaXplKGhhc2gpXTsKKwl9IGRlc2M7CiAJdW5zaWduZWQgaW50IGk7CiAKKwlkZXNjLnNoYXNoLnRmbSA9IGhhc2g7CisJZGVzYy5zaGFzaC5mbGFncyA9IGNyeXB0b19zaGFzaF9nZXRfZmxhZ3MocGFyZW50KSAmCisJCQkgICAgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQOworCiAJaWYgKGtleWxlbiA+IGJzKSB7Ci0JCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKLQkJc3RydWN0IHNjYXR0ZXJsaXN0IHRtcDsKLQkJaW50IHRtcGxlbjsKIAkJaW50IGVycjsKIAotCQlkZXNjLnRmbSA9IHRmbTsKLQkJZGVzYy5mbGFncyA9IGNyeXB0b19oYXNoX2dldF9mbGFncyhwYXJlbnQpOwotCQlkZXNjLmZsYWdzICY9IENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKLQotCQllcnIgPSBjcnlwdG9faGFzaF9pbml0KCZkZXNjKTsKKwkJZXJyID0gY3J5cHRvX3NoYXNoX2RpZ2VzdCgmZGVzYy5zaGFzaCwgaW5rZXksIGtleWxlbiwgaXBhZCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCXRtcGxlbiA9IGJzICogMiArIGRzOwotCQlzZ19pbml0X29uZSgmdG1wLCBpcGFkLCB0bXBsZW4pOwotCi0JCWZvciAoOyBrZXlsZW4gPiB0bXBsZW47IGlua2V5ICs9IHRtcGxlbiwga2V5bGVuIC09IHRtcGxlbikgewotCQkJbWVtY3B5KGlwYWQsIGlua2V5LCB0bXBsZW4pOwotCQkJZXJyID0gY3J5cHRvX2hhc2hfdXBkYXRlKCZkZXNjLCAmdG1wLCB0bXBsZW4pOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJaWYgKGtleWxlbikgewotCQkJbWVtY3B5KGlwYWQsIGlua2V5LCBrZXlsZW4pOwotCQkJZXJyID0gY3J5cHRvX2hhc2hfdXBkYXRlKCZkZXNjLCAmdG1wLCBrZXlsZW4pOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJZXJyID0gY3J5cHRvX2hhc2hfZmluYWwoJmRlc2MsIGRpZ2VzdCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCi0JCWlua2V5ID0gZGlnZXN0OwogCQlrZXlsZW4gPSBkczsKLQl9CisJfSBlbHNlCisJCW1lbWNweShpcGFkLCBpbmtleSwga2V5bGVuKTsKIAotCW1lbWNweShpcGFkLCBpbmtleSwga2V5bGVuKTsKIAltZW1zZXQoaXBhZCArIGtleWxlbiwgMCwgYnMgLSBrZXlsZW4pOwogCW1lbWNweShvcGFkLCBpcGFkLCBicyk7CiAKQEAgLTEwMiwxODQgKzgyLDE3OCBAQAogCQlvcGFkW2ldIF49IDB4NWM7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGNyeXB0b19zaGFzaF9pbml0KCZkZXNjLnNoYXNoKSA/OgorCSAgICAgICBjcnlwdG9fc2hhc2hfdXBkYXRlKCZkZXNjLnNoYXNoLCBpcGFkLCBicykgPzoKKwkgICAgICAgY3J5cHRvX3NoYXNoX2V4cG9ydCgmZGVzYy5zaGFzaCwgaXBhZCkgPzoKKwkgICAgICAgY3J5cHRvX3NoYXNoX2luaXQoJmRlc2Muc2hhc2gpID86CisJICAgICAgIGNyeXB0b19zaGFzaF91cGRhdGUoJmRlc2Muc2hhc2gsIG9wYWQsIGJzKSA/OgorCSAgICAgICBjcnlwdG9fc2hhc2hfZXhwb3J0KCZkZXNjLnNoYXNoLCBvcGFkKTsKIH0KIAotc3RhdGljIGludCBobWFjX2luaXQoc3RydWN0IGhhc2hfZGVzYyAqcGRlc2MpCitzdGF0aWMgaW50IGhtYWNfZXhwb3J0KHN0cnVjdCBzaGFzaF9kZXNjICpwZGVzYywgdm9pZCAqb3V0KQogewotCXN0cnVjdCBjcnlwdG9faGFzaCAqcGFyZW50ID0gcGRlc2MtPnRmbTsKLQlpbnQgYnMgPSBjcnlwdG9faGFzaF9ibG9ja3NpemUocGFyZW50KTsKLQlpbnQgZHMgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKHBhcmVudCk7Ci0JY2hhciAqaXBhZCA9IGNyeXB0b19oYXNoX2N0eF9hbGlnbmVkKHBhcmVudCk7Ci0Jc3RydWN0IGhtYWNfY3R4ICpjdHggPSBhbGlnbl9wdHIoaXBhZCArIGJzICogMiArIGRzLCBzaXplb2Yodm9pZCAqKSk7Ci0Jc3RydWN0IGhhc2hfZGVzYyBkZXNjOwotCXN0cnVjdCBzY2F0dGVybGlzdCB0bXA7Ci0JaW50IGVycjsKKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYyA9IHNoYXNoX2Rlc2NfY3R4KHBkZXNjKTsKIAotCWRlc2MudGZtID0gY3R4LT5jaGlsZDsKLQlkZXNjLmZsYWdzID0gcGRlc2MtPmZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQOwotCXNnX2luaXRfb25lKCZ0bXAsIGlwYWQsIGJzKTsKKwlkZXNjLT5mbGFncyA9IHBkZXNjLT5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKIAotCWVyciA9IGNyeXB0b19oYXNoX2luaXQoJmRlc2MpOwotCWlmICh1bmxpa2VseShlcnIpKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIGNyeXB0b19oYXNoX3VwZGF0ZSgmZGVzYywgJnRtcCwgYnMpOworCXJldHVybiBjcnlwdG9fc2hhc2hfZXhwb3J0KGRlc2MsIG91dCk7CiB9CiAKLXN0YXRpYyBpbnQgaG1hY191cGRhdGUoc3RydWN0IGhhc2hfZGVzYyAqcGRlc2MsCi0JCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQorc3RhdGljIGludCBobWFjX2ltcG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqcGRlc2MsIGNvbnN0IHZvaWQgKmluKQogeworCXN0cnVjdCBzaGFzaF9kZXNjICpkZXNjID0gc2hhc2hfZGVzY19jdHgocGRlc2MpOwogCXN0cnVjdCBobWFjX2N0eCAqY3R4ID0gaG1hY19jdHgocGRlc2MtPnRmbSk7Ci0Jc3RydWN0IGhhc2hfZGVzYyBkZXNjOwogCi0JZGVzYy50Zm0gPSBjdHgtPmNoaWxkOwotCWRlc2MuZmxhZ3MgPSBwZGVzYy0+ZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisJZGVzYy0+dGZtID0gY3R4LT5oYXNoOworCWRlc2MtPmZsYWdzID0gcGRlc2MtPmZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQOwogCi0JcmV0dXJuIGNyeXB0b19oYXNoX3VwZGF0ZSgmZGVzYywgc2csIG5ieXRlcyk7CisJcmV0dXJuIGNyeXB0b19zaGFzaF9pbXBvcnQoZGVzYywgaW4pOwogfQogCi1zdGF0aWMgaW50IGhtYWNfZmluYWwoc3RydWN0IGhhc2hfZGVzYyAqcGRlc2MsIHU4ICpvdXQpCitzdGF0aWMgaW50IGhtYWNfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqcGRlc2MpCiB7Ci0Jc3RydWN0IGNyeXB0b19oYXNoICpwYXJlbnQgPSBwZGVzYy0+dGZtOwotCWludCBicyA9IGNyeXB0b19oYXNoX2Jsb2Nrc2l6ZShwYXJlbnQpOwotCWludCBkcyA9IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUocGFyZW50KTsKLQljaGFyICpvcGFkID0gY3J5cHRvX2hhc2hfY3R4X2FsaWduZWQocGFyZW50KSArIGJzOwotCWNoYXIgKmRpZ2VzdCA9IG9wYWQgKyBiczsKLQlzdHJ1Y3QgaG1hY19jdHggKmN0eCA9IGFsaWduX3B0cihkaWdlc3QgKyBkcywgc2l6ZW9mKHZvaWQgKikpOwotCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgdG1wOwotCWludCBlcnI7Ci0KLQlkZXNjLnRmbSA9IGN0eC0+Y2hpbGQ7Ci0JZGVzYy5mbGFncyA9IHBkZXNjLT5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKLQlzZ19pbml0X29uZSgmdG1wLCBvcGFkLCBicyArIGRzKTsKLQotCWVyciA9IGNyeXB0b19oYXNoX2ZpbmFsKCZkZXNjLCBkaWdlc3QpOwotCWlmICh1bmxpa2VseShlcnIpKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgJnRtcCwgYnMgKyBkcywgb3V0KTsKKwlyZXR1cm4gaG1hY19pbXBvcnQocGRlc2MsIGNyeXB0b19zaGFzaF9jdHhfYWxpZ25lZChwZGVzYy0+dGZtKSk7CiB9CiAKLXN0YXRpYyBpbnQgaG1hY19kaWdlc3Qoc3RydWN0IGhhc2hfZGVzYyAqcGRlc2MsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzLCB1OCAqb3V0KQorc3RhdGljIGludCBobWFjX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqcGRlc2MsCisJCSAgICAgICBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKLQlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnBhcmVudCA9IHBkZXNjLT50Zm07Ci0JaW50IGJzID0gY3J5cHRvX2hhc2hfYmxvY2tzaXplKHBhcmVudCk7Ci0JaW50IGRzID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShwYXJlbnQpOwotCWNoYXIgKmlwYWQgPSBjcnlwdG9faGFzaF9jdHhfYWxpZ25lZChwYXJlbnQpOwotCWNoYXIgKm9wYWQgPSBpcGFkICsgYnM7Ci0JY2hhciAqZGlnZXN0ID0gb3BhZCArIGJzOwotCXN0cnVjdCBobWFjX2N0eCAqY3R4ID0gYWxpZ25fcHRyKGRpZ2VzdCArIGRzLCBzaXplb2Yodm9pZCAqKSk7Ci0Jc3RydWN0IGhhc2hfZGVzYyBkZXNjOwotCXN0cnVjdCBzY2F0dGVybGlzdCBzZzFbMl07Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnMlsxXTsKLQlpbnQgZXJyOworCXN0cnVjdCBzaGFzaF9kZXNjICpkZXNjID0gc2hhc2hfZGVzY19jdHgocGRlc2MpOwogCi0JZGVzYy50Zm0gPSBjdHgtPmNoaWxkOwotCWRlc2MuZmxhZ3MgPSBwZGVzYy0+ZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisJZGVzYy0+ZmxhZ3MgPSBwZGVzYy0+ZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CiAKLQlzZ19pbml0X3RhYmxlKHNnMSwgMik7Ci0Jc2dfc2V0X2J1ZihzZzEsIGlwYWQsIGJzKTsKLQlzY2F0dGVyd2Fsa19zZ19jaGFpbihzZzEsIDIsIHNnKTsKKwlyZXR1cm4gY3J5cHRvX3NoYXNoX3VwZGF0ZShkZXNjLCBkYXRhLCBuYnl0ZXMpOworfQogCi0Jc2dfaW5pdF90YWJsZShzZzIsIDEpOwotCXNnX3NldF9idWYoc2cyLCBvcGFkLCBicyArIGRzKTsKK3N0YXRpYyBpbnQgaG1hY19maW5hbChzdHJ1Y3Qgc2hhc2hfZGVzYyAqcGRlc2MsIHU4ICpvdXQpCit7CisJc3RydWN0IGNyeXB0b19zaGFzaCAqcGFyZW50ID0gcGRlc2MtPnRmbTsKKwlpbnQgZHMgPSBjcnlwdG9fc2hhc2hfZGlnZXN0c2l6ZShwYXJlbnQpOworCWludCBzcyA9IGNyeXB0b19zaGFzaF9zdGF0ZXNpemUocGFyZW50KTsKKwljaGFyICpvcGFkID0gY3J5cHRvX3NoYXNoX2N0eF9hbGlnbmVkKHBhcmVudCkgKyBzczsKKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYyA9IHNoYXNoX2Rlc2NfY3R4KHBkZXNjKTsKIAotCWVyciA9IGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgc2cxLCBuYnl0ZXMgKyBicywgZGlnZXN0KTsKLQlpZiAodW5saWtlbHkoZXJyKSkKLQkJcmV0dXJuIGVycjsKKwlkZXNjLT5mbGFncyA9IHBkZXNjLT5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKIAotCXJldHVybiBjcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsIHNnMiwgYnMgKyBkcywgb3V0KTsKKwlyZXR1cm4gY3J5cHRvX3NoYXNoX2ZpbmFsKGRlc2MsIG91dCkgPzoKKwkgICAgICAgY3J5cHRvX3NoYXNoX2ltcG9ydChkZXNjLCBvcGFkKSA/OgorCSAgICAgICBjcnlwdG9fc2hhc2hfZmludXAoZGVzYywgb3V0LCBkcywgb3V0KTsKK30KKworc3RhdGljIGludCBobWFjX2ZpbnVwKHN0cnVjdCBzaGFzaF9kZXNjICpwZGVzYywgY29uc3QgdTggKmRhdGEsCisJCSAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMsIHU4ICpvdXQpCit7CisKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICpwYXJlbnQgPSBwZGVzYy0+dGZtOworCWludCBkcyA9IGNyeXB0b19zaGFzaF9kaWdlc3RzaXplKHBhcmVudCk7CisJaW50IHNzID0gY3J5cHRvX3NoYXNoX3N0YXRlc2l6ZShwYXJlbnQpOworCWNoYXIgKm9wYWQgPSBjcnlwdG9fc2hhc2hfY3R4X2FsaWduZWQocGFyZW50KSArIHNzOworCXN0cnVjdCBzaGFzaF9kZXNjICpkZXNjID0gc2hhc2hfZGVzY19jdHgocGRlc2MpOworCisJZGVzYy0+ZmxhZ3MgPSBwZGVzYy0+ZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisKKwlyZXR1cm4gY3J5cHRvX3NoYXNoX2ZpbnVwKGRlc2MsIGRhdGEsIG5ieXRlcywgb3V0KSA/OgorCSAgICAgICBjcnlwdG9fc2hhc2hfaW1wb3J0KGRlc2MsIG9wYWQpID86CisJICAgICAgIGNyeXB0b19zaGFzaF9maW51cChkZXNjLCBvdXQsIGRzLCBvdXQpOwogfQogCiBzdGF0aWMgaW50IGhtYWNfaW5pdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKLQlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmhhc2g7CisJc3RydWN0IGNyeXB0b19zaGFzaCAqcGFyZW50ID0gX19jcnlwdG9fc2hhc2hfY2FzdCh0Zm0pOworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKmhhc2g7CiAJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCA9ICh2b2lkICopdGZtLT5fX2NydF9hbGc7Ci0Jc3RydWN0IGNyeXB0b19zcGF3biAqc3Bhd24gPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOwotCXN0cnVjdCBobWFjX2N0eCAqY3R4ID0gaG1hY19jdHgoX19jcnlwdG9faGFzaF9jYXN0KHRmbSkpOworCXN0cnVjdCBjcnlwdG9fc2hhc2hfc3Bhd24gKnNwYXduID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwlzdHJ1Y3QgaG1hY19jdHggKmN0eCA9IGhtYWNfY3R4KHBhcmVudCk7CiAKLQloYXNoID0gY3J5cHRvX3NwYXduX2hhc2goc3Bhd24pOworCWhhc2ggPSBjcnlwdG9fc3Bhd25fc2hhc2goc3Bhd24pOwogCWlmIChJU19FUlIoaGFzaCkpCiAJCXJldHVybiBQVFJfRVJSKGhhc2gpOwogCi0JY3R4LT5jaGlsZCA9IGhhc2g7CisJcGFyZW50LT5kZXNjc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hhc2hfZGVzYykgKworCQkJICAgY3J5cHRvX3NoYXNoX2Rlc2NzaXplKGhhc2gpOworCisJY3R4LT5oYXNoID0gaGFzaDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaG1hY19leGl0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewotCXN0cnVjdCBobWFjX2N0eCAqY3R4ID0gaG1hY19jdHgoX19jcnlwdG9faGFzaF9jYXN0KHRmbSkpOwotCWNyeXB0b19mcmVlX2hhc2goY3R4LT5jaGlsZCk7CisJc3RydWN0IGhtYWNfY3R4ICpjdHggPSBobWFjX2N0eChfX2NyeXB0b19zaGFzaF9jYXN0KHRmbSkpOworCWNyeXB0b19mcmVlX3NoYXNoKGN0eC0+aGFzaCk7CiB9CiAKLXN0YXRpYyB2b2lkIGhtYWNfZnJlZShzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KQorc3RhdGljIGludCBobWFjX2NyZWF0ZShzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0bXBsLCBzdHJ1Y3QgcnRhdHRyICoqdGIpCiB7Ci0JY3J5cHRvX2Ryb3Bfc3Bhd24oY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KSk7Ci0Ja2ZyZWUoaW5zdCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpobWFjX2FsbG9jKHN0cnVjdCBydGF0dHIgKip0YikKLXsKLQlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OworCXN0cnVjdCBzaGFzaF9pbnN0YW5jZSAqaW5zdDsKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnOworCXN0cnVjdCBzaGFzaF9hbGcgKnNhbGc7CiAJaW50IGVycjsKIAlpbnQgZHM7CisJaW50IHNzOwogCi0JZXJyID0gY3J5cHRvX2NoZWNrX2F0dHJfdHlwZSh0YiwgQ1JZUFRPX0FMR19UWVBFX0hBU0gpOworCWVyciA9IGNyeXB0b19jaGVja19hdHRyX3R5cGUodGIsIENSWVBUT19BTEdfVFlQRV9TSEFTSCk7CiAJaWYgKGVycikKLQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwkJcmV0dXJuIGVycjsKIAotCWFsZyA9IGNyeXB0b19nZXRfYXR0cl9hbGcodGIsIENSWVBUT19BTEdfVFlQRV9IQVNILAotCQkJCSAgQ1JZUFRPX0FMR19UWVBFX0hBU0hfTUFTSyk7Ci0JaWYgKElTX0VSUihhbGcpKQotCQlyZXR1cm4gRVJSX0NBU1QoYWxnKTsKKwlzYWxnID0gc2hhc2hfYXR0cl9hbGcodGJbMV0sIDAsIDApOworCWlmIChJU19FUlIoc2FsZykpCisJCXJldHVybiBQVFJfRVJSKHNhbGcpOwogCi0JaW5zdCA9IEVSUl9QVFIoLUVJTlZBTCk7Ci0JZHMgPSBhbGctPmNyYV90eXBlID09ICZjcnlwdG9faGFzaF90eXBlID8KLQkgICAgIGFsZy0+Y3JhX2hhc2guZGlnZXN0c2l6ZSA6Ci0JICAgICBhbGctPmNyYV90eXBlID8KLQkgICAgIF9fY3J5cHRvX3NoYXNoX2FsZyhhbGcpLT5kaWdlc3RzaXplIDoKLQkgICAgIGFsZy0+Y3JhX2RpZ2VzdC5kaWFfZGlnZXN0c2l6ZTsKLQlpZiAoZHMgPiBhbGctPmNyYV9ibG9ja3NpemUpCisJZXJyID0gLUVJTlZBTDsKKwlkcyA9IHNhbGctPmRpZ2VzdHNpemU7CisJc3MgPSBzYWxnLT5zdGF0ZXNpemU7CisJYWxnID0gJnNhbGctPmJhc2U7CisJaWYgKGRzID4gYWxnLT5jcmFfYmxvY2tzaXplIHx8CisJICAgIHNzIDwgYWxnLT5jcmFfYmxvY2tzaXplKQogCQlnb3RvIG91dF9wdXRfYWxnOwogCi0JaW5zdCA9IGNyeXB0b19hbGxvY19pbnN0YW5jZSgiaG1hYyIsIGFsZyk7CisJaW5zdCA9IHNoYXNoX2FsbG9jX2luc3RhbmNlKCJobWFjIiwgYWxnKTsKKwllcnIgPSBQVFJfRVJSKGluc3QpOwogCWlmIChJU19FUlIoaW5zdCkpCiAJCWdvdG8gb3V0X3B1dF9hbGc7CiAKLQlpbnN0LT5hbGcuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19UWVBFX0hBU0g7Ci0JaW5zdC0+YWxnLmNyYV9wcmlvcml0eSA9IGFsZy0+Y3JhX3ByaW9yaXR5OwotCWluc3QtPmFsZy5jcmFfYmxvY2tzaXplID0gYWxnLT5jcmFfYmxvY2tzaXplOwotCWluc3QtPmFsZy5jcmFfYWxpZ25tYXNrID0gYWxnLT5jcmFfYWxpZ25tYXNrOwotCWluc3QtPmFsZy5jcmFfdHlwZSA9ICZjcnlwdG9faGFzaF90eXBlOworCWVyciA9IGNyeXB0b19pbml0X3NoYXNoX3NwYXduKHNoYXNoX2luc3RhbmNlX2N0eChpbnN0KSwgc2FsZywKKwkJCQkgICAgICBzaGFzaF9jcnlwdG9faW5zdGFuY2UoaW5zdCkpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZyZWVfaW5zdDsKIAotCWluc3QtPmFsZy5jcmFfaGFzaC5kaWdlc3RzaXplID0gZHM7CisJaW5zdC0+YWxnLmJhc2UuY3JhX3ByaW9yaXR5ID0gYWxnLT5jcmFfcHJpb3JpdHk7CisJaW5zdC0+YWxnLmJhc2UuY3JhX2Jsb2Nrc2l6ZSA9IGFsZy0+Y3JhX2Jsb2Nrc2l6ZTsKKwlpbnN0LT5hbGcuYmFzZS5jcmFfYWxpZ25tYXNrID0gYWxnLT5jcmFfYWxpZ25tYXNrOwogCi0JaW5zdC0+YWxnLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBobWFjX2N0eCkgKwotCQkJCUFMSUdOKGluc3QtPmFsZy5jcmFfYmxvY2tzaXplICogMiArIGRzLAotCQkJCSAgICAgIHNpemVvZih2b2lkICopKTsKKwlzcyA9IEFMSUdOKHNzLCBhbGctPmNyYV9hbGlnbm1hc2sgKyAxKTsKKwlpbnN0LT5hbGcuZGlnZXN0c2l6ZSA9IGRzOworCWluc3QtPmFsZy5zdGF0ZXNpemUgPSBzczsKIAotCWluc3QtPmFsZy5jcmFfaW5pdCA9IGhtYWNfaW5pdF90Zm07Ci0JaW5zdC0+YWxnLmNyYV9leGl0ID0gaG1hY19leGl0X3RmbTsKKwlpbnN0LT5hbGcuYmFzZS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3QgaG1hY19jdHgpICsKKwkJCQkgICAgIEFMSUdOKHNzICogMiwgY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkpOwogCi0JaW5zdC0+YWxnLmNyYV9oYXNoLmluaXQgPSBobWFjX2luaXQ7Ci0JaW5zdC0+YWxnLmNyYV9oYXNoLnVwZGF0ZSA9IGhtYWNfdXBkYXRlOwotCWluc3QtPmFsZy5jcmFfaGFzaC5maW5hbCA9IGhtYWNfZmluYWw7Ci0JaW5zdC0+YWxnLmNyYV9oYXNoLmRpZ2VzdCA9IGhtYWNfZGlnZXN0OwotCWluc3QtPmFsZy5jcmFfaGFzaC5zZXRrZXkgPSBobWFjX3NldGtleTsKKwlpbnN0LT5hbGcuYmFzZS5jcmFfaW5pdCA9IGhtYWNfaW5pdF90Zm07CisJaW5zdC0+YWxnLmJhc2UuY3JhX2V4aXQgPSBobWFjX2V4aXRfdGZtOworCisJaW5zdC0+YWxnLmluaXQgPSBobWFjX2luaXQ7CisJaW5zdC0+YWxnLnVwZGF0ZSA9IGhtYWNfdXBkYXRlOworCWluc3QtPmFsZy5maW5hbCA9IGhtYWNfZmluYWw7CisJaW5zdC0+YWxnLmZpbnVwID0gaG1hY19maW51cDsKKwlpbnN0LT5hbGcuZXhwb3J0ID0gaG1hY19leHBvcnQ7CisJaW5zdC0+YWxnLmltcG9ydCA9IGhtYWNfaW1wb3J0OworCWluc3QtPmFsZy5zZXRrZXkgPSBobWFjX3NldGtleTsKKworCWVyciA9IHNoYXNoX3JlZ2lzdGVyX2luc3RhbmNlKHRtcGwsIGluc3QpOworCWlmIChlcnIpIHsKK291dF9mcmVlX2luc3Q6CisJCXNoYXNoX2ZyZWVfaW5zdGFuY2Uoc2hhc2hfY3J5cHRvX2luc3RhbmNlKGluc3QpKTsKKwl9CiAKIG91dF9wdXRfYWxnOgogCWNyeXB0b19tb2RfcHV0KGFsZyk7Ci0JcmV0dXJuIGluc3Q7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgaG1hY190bXBsID0gewogCS5uYW1lID0gImhtYWMiLAotCS5hbGxvYyA9IGhtYWNfYWxsb2MsCi0JLmZyZWUgPSBobWFjX2ZyZWUsCisJLmNyZWF0ZSA9IGhtYWNfY3JlYXRlLAorCS5mcmVlID0gc2hhc2hfZnJlZV9pbnN0YW5jZSwKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9jcnlwdG8vaW50ZXJuYWwuaCBiL2NyeXB0by9pbnRlcm5hbC5oCmluZGV4IDExMzU3OWEuLjJkMjI2MzYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbnRlcm5hbC5oCisrKyBiL2NyeXB0by9pbnRlcm5hbC5oCkBAIC0yNSwxMiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpZmRlZiBDT05GSUdfQ1JZUFRPX0ZJUFMKLWV4dGVybiBpbnQgZmlwc19lbmFibGVkOwotI2Vsc2UKLSNkZWZpbmUgZmlwc19lbmFibGVkIDAKLSNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L2ZpcHMuaD4KIAogLyogQ3J5cHRvIG5vdGlmaWNhdGlvbiBldmVudHMuICovCiBlbnVtIHsKQEAgLTY1LDE4ICs2MCw2IEBACiB7IH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fZGlnZXN0X2N0eHNpemUoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKLXsKLQl1bnNpZ25lZCBpbnQgbGVuID0gYWxnLT5jcmFfY3R4c2l6ZTsKLQotCWlmIChhbGctPmNyYV9hbGlnbm1hc2spIHsKLQkJbGVuID0gQUxJR04obGVuLCAodW5zaWduZWQgbG9uZylhbGctPmNyYV9hbGlnbm1hc2sgKyAxKTsKLQkJbGVuICs9IGFsZy0+Y3JhX2RpZ2VzdC5kaWFfZGlnZXN0c2l6ZTsKLQl9Ci0KLQlyZXR1cm4gbGVuOwotfQotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fY2lwaGVyX2N0eHNpemUoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKIHsKIAlyZXR1cm4gYWxnLT5jcmFfY3R4c2l6ZTsKQEAgLTkxLDEyICs3NCw5IEBACiBzdHJ1Y3QgY3J5cHRvX2FsZyAqY3J5cHRvX2FsZ19sb29rdXAoY29uc3QgY2hhciAqbmFtZSwgdTMyIHR5cGUsIHUzMiBtYXNrKTsKIHN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYWxnX21vZF9sb29rdXAoY29uc3QgY2hhciAqbmFtZSwgdTMyIHR5cGUsIHUzMiBtYXNrKTsKIAotaW50IGNyeXB0b19pbml0X2RpZ2VzdF9vcHMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7Ci1pbnQgY3J5cHRvX2luaXRfZGlnZXN0X29wc19hc3luYyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKTsKIGludCBjcnlwdG9faW5pdF9jaXBoZXJfb3BzKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pOwogaW50IGNyeXB0b19pbml0X2NvbXByZXNzX29wcyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKTsKIAotdm9pZCBjcnlwdG9fZXhpdF9kaWdlc3Rfb3BzKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pOwogdm9pZCBjcnlwdG9fZXhpdF9jaXBoZXJfb3BzKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pOwogdm9pZCBjcnlwdG9fZXhpdF9jb21wcmVzc19vcHMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7CiAKQEAgLTExMSwxMiArOTEsMTIgQEAKIAkJCQkgICAgICB1MzIgbWFzayk7CiB2b2lkICpjcnlwdG9fY3JlYXRlX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAogCQkJY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCk7CitzdHJ1Y3QgY3J5cHRvX2FsZyAqY3J5cHRvX2ZpbmRfYWxnKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQsCisJCQkJICAgdTMyIHR5cGUsIHUzMiBtYXNrKTsKIHZvaWQgKmNyeXB0b19hbGxvY190Zm0oY29uc3QgY2hhciAqYWxnX25hbWUsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kLCB1MzIgdHlwZSwgdTMyIG1hc2spOwogCi1pbnQgY3J5cHRvX3JlZ2lzdGVyX2luc3RhbmNlKHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKnRtcGwsCi0JCQkgICAgIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QpOwotCiBpbnQgY3J5cHRvX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogaW50IGNyeXB0b191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogaW50IGNyeXB0b19wcm9iaW5nX25vdGlmeSh1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdik7CmRpZmYgLS1naXQgYS9jcnlwdG8vcGNvbXByZXNzLmMgYi9jcnlwdG8vcGNvbXByZXNzLmMKaW5kZXggYmNhZGMwMy4uZjdjNGE3ZCAxMDA2NDQKLS0tIGEvY3J5cHRvL3Bjb21wcmVzcy5jCisrKyBiL2NyeXB0by9wY29tcHJlc3MuYwpAQCAtMzYsMTQgKzM2LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY3J5cHRvX3Bjb21wX2V4dHNpemUoc3RydWN0IGNyeXB0b19hbGcgKmFsZywKLQkJCQkJIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpCitzdGF0aWMgdW5zaWduZWQgaW50IGNyeXB0b19wY29tcF9leHRzaXplKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCiB7CiAJcmV0dXJuIGFsZy0+Y3JhX2N0eHNpemU7CiB9CiAKLXN0YXRpYyBpbnQgY3J5cHRvX3Bjb21wX2luaXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCi0JCQkJIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpCitzdGF0aWMgaW50IGNyeXB0b19wY29tcF9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JuZy5jIGIvY3J5cHRvL3JuZy5jCmluZGV4IDZlOTRiYzcuLmJhMDVlNzMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ybmcuYworKysgYi9jcnlwdG8vcm5nLmMKQEAgLTEyMyw0ICsxMjMsNCBAQAogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3B1dF9kZWZhdWx0X3JuZyk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUmFuZG9tIE51bWJlciBHZW5lcnRvciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSYW5kb20gTnVtYmVyIEdlbmVyYXRvciIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYTFfZ2VuZXJpYy5jIGIvY3J5cHRvL3NoYTFfZ2VuZXJpYy5jCmluZGV4IDllZmVmMjAuLjA0MTYwOTEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGExX2dlbmVyaWMuYworKysgYi9jcnlwdG8vc2hhMV9nZW5lcmljLmMKQEAgLTI1LDMxICsyNSwyMSBAQAogI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLXN0cnVjdCBzaGExX2N0eCB7Ci0gICAgICAgIHU2NCBjb3VudDsKLSAgICAgICAgdTMyIHN0YXRlWzVdOwotICAgICAgICB1OCBidWZmZXJbNjRdOwotfTsKLQogc3RhdGljIGludCBzaGExX2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IHNoYTFfY3R4ICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJc3RydWN0IHNoYTFfc3RhdGUgKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAotCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2hhMV9jdHggaW5pdHN0YXRlID0gewotCSAgMCwKLQkgIHsgU0hBMV9IMCwgU0hBMV9IMSwgU0hBMV9IMiwgU0hBMV9IMywgU0hBMV9INCB9LAotCSAgeyAwLCB9CisJKnNjdHggPSAoc3RydWN0IHNoYTFfc3RhdGUpeworCQkuc3RhdGUgPSB7IFNIQTFfSDAsIFNIQTFfSDEsIFNIQTFfSDIsIFNIQTFfSDMsIFNIQTFfSDQgfSwKIAl9OwogCi0JKnNjdHggPSBpbml0c3RhdGU7Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzaGExX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3QgdTggKmRhdGEsCiAJCQl1bnNpZ25lZCBpbnQgbGVuKQogewotCXN0cnVjdCBzaGExX2N0eCAqc2N0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBzaGExX3N0YXRlICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAJdW5zaWduZWQgaW50IHBhcnRpYWwsIGRvbmU7CiAJY29uc3QgdTggKnNyYzsKIApAQCAtODUsNyArNzUsNyBAQAogLyogQWRkIHBhZGRpbmcgYW5kIHJldHVybiB0aGUgbWVzc2FnZSBkaWdlc3QuICovCiBzdGF0aWMgaW50IHNoYTFfZmluYWwoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHU4ICpvdXQpCiB7Ci0Jc3RydWN0IHNoYTFfY3R4ICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJc3RydWN0IHNoYTFfc3RhdGUgKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAlfX2JlMzIgKmRzdCA9IChfX2JlMzIgKilvdXQ7CiAJdTMyIGksIGluZGV4LCBwYWRsZW47CiAJX19iZTY0IGJpdHM7CkBAIC0xMTEsMTIgKzEwMSwzMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNoYTFfZXhwb3J0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB2b2lkICpvdXQpCit7CisJc3RydWN0IHNoYTFfc3RhdGUgKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKworCW1lbWNweShvdXQsIHNjdHgsIHNpemVvZigqc2N0eCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoYTFfaW1wb3J0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCBjb25zdCB2b2lkICppbikKK3sKKwlzdHJ1Y3Qgc2hhMV9zdGF0ZSAqc2N0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCisJbWVtY3B5KHNjdHgsIGluLCBzaXplb2YoKnNjdHgpKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0gewogCS5kaWdlc3RzaXplCT0JU0hBMV9ESUdFU1RfU0laRSwKIAkuaW5pdAkJPQlzaGExX2luaXQsCiAJLnVwZGF0ZQkJPQlzaGExX3VwZGF0ZSwKIAkuZmluYWwJCT0Jc2hhMV9maW5hbCwKLQkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHNoYTFfY3R4KSwKKwkuZXhwb3J0CQk9CXNoYTFfZXhwb3J0LAorCS5pbXBvcnQJCT0Jc2hhMV9pbXBvcnQsCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzaGExX3N0YXRlKSwKKwkuc3RhdGVzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzaGExX3N0YXRlKSwKIAkuYmFzZQkJPQl7CiAJCS5jcmFfbmFtZQk9CSJzaGExIiwKIAkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTEtZ2VuZXJpYyIsCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhMjU2X2dlbmVyaWMuYyBiL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jCmluZGV4IDYzNDlkODMuLmM0ODQ1OWUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jCkBAIC0yNSwxMiArMjUsNiBAQAogI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLXN0cnVjdCBzaGEyNTZfY3R4IHsKLQl1MzIgY291bnRbMl07Ci0JdTMyIHN0YXRlWzhdOwotCXU4IGJ1ZlsxMjhdOwotfTsKLQogc3RhdGljIGlubGluZSB1MzIgQ2godTMyIHgsIHUzMiB5LCB1MzIgeikKIHsKIAlyZXR1cm4geiBeICh4ICYgKHkgXiB6KSk7CkBAIC0yMjIsNyArMjE2LDcgQEAKIAogc3RhdGljIGludCBzaGEyMjRfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3Qgc2hhMjU2X2N0eCAqc2N0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBzaGEyNTZfc3RhdGUgKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAlzY3R4LT5zdGF0ZVswXSA9IFNIQTIyNF9IMDsKIAlzY3R4LT5zdGF0ZVsxXSA9IFNIQTIyNF9IMTsKIAlzY3R4LT5zdGF0ZVsyXSA9IFNIQTIyNF9IMjsKQEAgLTIzMSwxNSArMjI1LDE0IEBACiAJc2N0eC0+c3RhdGVbNV0gPSBTSEEyMjRfSDU7CiAJc2N0eC0+c3RhdGVbNl0gPSBTSEEyMjRfSDY7CiAJc2N0eC0+c3RhdGVbN10gPSBTSEEyMjRfSDc7Ci0Jc2N0eC0+Y291bnRbMF0gPSAwOwotCXNjdHgtPmNvdW50WzFdID0gMDsKKwlzY3R4LT5jb3VudCA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzaGEyNTZfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3Qgc2hhMjU2X2N0eCAqc2N0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBzaGEyNTZfc3RhdGUgKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAlzY3R4LT5zdGF0ZVswXSA9IFNIQTI1Nl9IMDsKIAlzY3R4LT5zdGF0ZVsxXSA9IFNIQTI1Nl9IMTsKIAlzY3R4LT5zdGF0ZVsyXSA9IFNIQTI1Nl9IMjsKQEAgLTI0OCw3ICsyNDEsNyBAQAogCXNjdHgtPnN0YXRlWzVdID0gU0hBMjU2X0g1OwogCXNjdHgtPnN0YXRlWzZdID0gU0hBMjU2X0g2OwogCXNjdHgtPnN0YXRlWzddID0gU0hBMjU2X0g3OwotCXNjdHgtPmNvdW50WzBdID0gc2N0eC0+Y291bnRbMV0gPSAwOworCXNjdHgtPmNvdW50ID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMjU2LDU4ICsyNDksNTQgQEAKIHN0YXRpYyBpbnQgc2hhMjU2X3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3QgdTggKmRhdGEsCiAJCQkgIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0Jc3RydWN0IHNoYTI1Nl9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKLQl1bnNpZ25lZCBpbnQgaSwgaW5kZXgsIHBhcnRfbGVuOworCXN0cnVjdCBzaGEyNTZfc3RhdGUgKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwl1bnNpZ25lZCBpbnQgcGFydGlhbCwgZG9uZTsKKwljb25zdCB1OCAqc3JjOwogCi0JLyogQ29tcHV0ZSBudW1iZXIgb2YgYnl0ZXMgbW9kIDEyOCAqLwotCWluZGV4ID0gKHVuc2lnbmVkIGludCkoKHNjdHgtPmNvdW50WzBdID4+IDMpICYgMHgzZik7CisJcGFydGlhbCA9IHNjdHgtPmNvdW50ICYgMHgzZjsKKwlzY3R4LT5jb3VudCArPSBsZW47CisJZG9uZSA9IDA7CisJc3JjID0gZGF0YTsKIAotCS8qIFVwZGF0ZSBudW1iZXIgb2YgYml0cyAqLwotCWlmICgoc2N0eC0+Y291bnRbMF0gKz0gKGxlbiA8PCAzKSkgPCAobGVuIDw8IDMpKSB7Ci0JCXNjdHgtPmNvdW50WzFdKys7Ci0JCXNjdHgtPmNvdW50WzFdICs9IChsZW4gPj4gMjkpOworCWlmICgocGFydGlhbCArIGxlbikgPiA2MykgeworCQlpZiAocGFydGlhbCkgeworCQkJZG9uZSA9IC1wYXJ0aWFsOworCQkJbWVtY3B5KHNjdHgtPmJ1ZiArIHBhcnRpYWwsIGRhdGEsIGRvbmUgKyA2NCk7CisJCQlzcmMgPSBzY3R4LT5idWY7CisJCX0KKworCQlkbyB7CisJCQlzaGEyNTZfdHJhbnNmb3JtKHNjdHgtPnN0YXRlLCBzcmMpOworCQkJZG9uZSArPSA2NDsKKwkJCXNyYyA9IGRhdGEgKyBkb25lOworCQl9IHdoaWxlIChkb25lICsgNjMgPCBsZW4pOworCisJCXBhcnRpYWwgPSAwOwogCX0KLQotCXBhcnRfbGVuID0gNjQgLSBpbmRleDsKLQotCS8qIFRyYW5zZm9ybSBhcyBtYW55IHRpbWVzIGFzIHBvc3NpYmxlLiAqLwotCWlmIChsZW4gPj0gcGFydF9sZW4pIHsKLQkJbWVtY3B5KCZzY3R4LT5idWZbaW5kZXhdLCBkYXRhLCBwYXJ0X2xlbik7Ci0JCXNoYTI1Nl90cmFuc2Zvcm0oc2N0eC0+c3RhdGUsIHNjdHgtPmJ1Zik7Ci0KLQkJZm9yIChpID0gcGFydF9sZW47IGkgKyA2MyA8IGxlbjsgaSArPSA2NCkKLQkJCXNoYTI1Nl90cmFuc2Zvcm0oc2N0eC0+c3RhdGUsICZkYXRhW2ldKTsKLQkJaW5kZXggPSAwOwotCX0gZWxzZSB7Ci0JCWkgPSAwOwotCX0KLQotCS8qIEJ1ZmZlciByZW1haW5pbmcgaW5wdXQgKi8KLQltZW1jcHkoJnNjdHgtPmJ1ZltpbmRleF0sICZkYXRhW2ldLCBsZW4taSk7CisJbWVtY3B5KHNjdHgtPmJ1ZiArIHBhcnRpYWwsIHNyYywgbGVuIC0gZG9uZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzaGEyNTZfZmluYWwoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHU4ICpvdXQpCiB7Ci0Jc3RydWN0IHNoYTI1Nl9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwlzdHJ1Y3Qgc2hhMjU2X3N0YXRlICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAJX19iZTMyICpkc3QgPSAoX19iZTMyICopb3V0OwotCV9fYmUzMiBiaXRzWzJdOworCV9fYmU2NCBiaXRzOwogCXVuc2lnbmVkIGludCBpbmRleCwgcGFkX2xlbjsKIAlpbnQgaTsKIAlzdGF0aWMgY29uc3QgdTggcGFkZGluZ1s2NF0gPSB7IDB4ODAsIH07CiAKIAkvKiBTYXZlIG51bWJlciBvZiBiaXRzICovCi0JYml0c1sxXSA9IGNwdV90b19iZTMyKHNjdHgtPmNvdW50WzBdKTsKLQliaXRzWzBdID0gY3B1X3RvX2JlMzIoc2N0eC0+Y291bnRbMV0pOworCWJpdHMgPSBjcHVfdG9fYmU2NChzY3R4LT5jb3VudCA8PCAzKTsKIAogCS8qIFBhZCBvdXQgdG8gNTYgbW9kIDY0LiAqLwotCWluZGV4ID0gKHNjdHgtPmNvdW50WzBdID4+IDMpICYgMHgzZjsKKwlpbmRleCA9IHNjdHgtPmNvdW50ICYgMHgzZjsKIAlwYWRfbGVuID0gKGluZGV4IDwgNTYpID8gKDU2IC0gaW5kZXgpIDogKCg2NCs1NikgLSBpbmRleCk7CiAJc2hhMjU2X3VwZGF0ZShkZXNjLCBwYWRkaW5nLCBwYWRfbGVuKTsKIAogCS8qIEFwcGVuZCBsZW5ndGggKGJlZm9yZSBwYWRkaW5nKSAqLwotCXNoYTI1Nl91cGRhdGUoZGVzYywgKGNvbnN0IHU4ICopYml0cywgc2l6ZW9mKGJpdHMpKTsKKwlzaGEyNTZfdXBkYXRlKGRlc2MsIChjb25zdCB1OCAqKSZiaXRzLCBzaXplb2YoYml0cykpOwogCiAJLyogU3RvcmUgc3RhdGUgaW4gZGlnZXN0ICovCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKQEAgLTMzMSwxMiArMzIwLDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2hhMjU2X2V4cG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdm9pZCAqb3V0KQoreworCXN0cnVjdCBzaGEyNTZfc3RhdGUgKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKworCW1lbWNweShvdXQsIHNjdHgsIHNpemVvZigqc2N0eCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoYTI1Nl9pbXBvcnQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHZvaWQgKmluKQoreworCXN0cnVjdCBzaGEyNTZfc3RhdGUgKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKworCW1lbWNweShzY3R4LCBpbiwgc2l6ZW9mKCpzY3R4KSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2hhc2hfYWxnIHNoYTI1NiA9IHsKIAkuZGlnZXN0c2l6ZQk9CVNIQTI1Nl9ESUdFU1RfU0laRSwKIAkuaW5pdAkJPQlzaGEyNTZfaW5pdCwKIAkudXBkYXRlCQk9CXNoYTI1Nl91cGRhdGUsCiAJLmZpbmFsCQk9CXNoYTI1Nl9maW5hbCwKLQkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHNoYTI1Nl9jdHgpLAorCS5leHBvcnQJCT0Jc2hhMjU2X2V4cG9ydCwKKwkuaW1wb3J0CQk9CXNoYTI1Nl9pbXBvcnQsCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzaGEyNTZfc3RhdGUpLAorCS5zdGF0ZXNpemUJPQlzaXplb2Yoc3RydWN0IHNoYTI1Nl9zdGF0ZSksCiAJLmJhc2UJCT0JewogCQkuY3JhX25hbWUJPQkic2hhMjU2IiwKIAkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTI1Ni1nZW5lcmljIiwKQEAgLTM1MSw3ICszNTksNyBAQAogCS5pbml0CQk9CXNoYTIyNF9pbml0LAogCS51cGRhdGUJCT0Jc2hhMjU2X3VwZGF0ZSwKIAkuZmluYWwJCT0Jc2hhMjI0X2ZpbmFsLAotCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3Qgc2hhMjU2X2N0eCksCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzaGEyNTZfc3RhdGUpLAogCS5iYXNlCQk9CXsKIAkJLmNyYV9uYW1lCT0JInNoYTIyNCIsCiAJCS5jcmFfZHJpdmVyX25hbWU9CSJzaGEyMjQtZ2VuZXJpYyIsCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhNTEyX2dlbmVyaWMuYyBiL2NyeXB0by9zaGE1MTJfZ2VuZXJpYy5jCmluZGV4IDNiZWEzOGQuLjllZDlmNjAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGE1MTJfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9zaGE1MTJfZ2VuZXJpYy5jCkBAIC0yMSwxMiArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAotc3RydWN0IHNoYTUxMl9jdHggewotCXU2NCBzdGF0ZVs4XTsKLQl1MzIgY291bnRbNF07Ci0JdTggYnVmWzEyOF07Ci19OwotCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodTY0WzgwXSwgbXNnX3NjaGVkdWxlKTsKIAogc3RhdGljIGlubGluZSB1NjQgQ2godTY0IHgsIHU2NCB5LCB1NjQgeikKQEAgLTE0MSw3ICsxMzUsNyBAQAogc3RhdGljIGludAogc2hhNTEyX2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IHNoYTUxMl9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwlzdHJ1Y3Qgc2hhNTEyX3N0YXRlICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAJc2N0eC0+c3RhdGVbMF0gPSBTSEE1MTJfSDA7CiAJc2N0eC0+c3RhdGVbMV0gPSBTSEE1MTJfSDE7CiAJc2N0eC0+c3RhdGVbMl0gPSBTSEE1MTJfSDI7CkBAIC0xNTAsNyArMTQ0LDcgQEAKIAlzY3R4LT5zdGF0ZVs1XSA9IFNIQTUxMl9INTsKIAlzY3R4LT5zdGF0ZVs2XSA9IFNIQTUxMl9INjsKIAlzY3R4LT5zdGF0ZVs3XSA9IFNIQTUxMl9INzsKLQlzY3R4LT5jb3VudFswXSA9IHNjdHgtPmNvdW50WzFdID0gc2N0eC0+Y291bnRbMl0gPSBzY3R4LT5jb3VudFszXSA9IDA7CisJc2N0eC0+Y291bnRbMF0gPSBzY3R4LT5jb3VudFsxXSA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1OCw3ICsxNTIsNyBAQAogc3RhdGljIGludAogc2hhMzg0X2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IHNoYTUxMl9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwlzdHJ1Y3Qgc2hhNTEyX3N0YXRlICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAJc2N0eC0+c3RhdGVbMF0gPSBTSEEzODRfSDA7CiAJc2N0eC0+c3RhdGVbMV0gPSBTSEEzODRfSDE7CiAJc2N0eC0+c3RhdGVbMl0gPSBTSEEzODRfSDI7CkBAIC0xNjcsNyArMTYxLDcgQEAKIAlzY3R4LT5zdGF0ZVs1XSA9IFNIQTM4NF9INTsKIAlzY3R4LT5zdGF0ZVs2XSA9IFNIQTM4NF9INjsKIAlzY3R4LT5zdGF0ZVs3XSA9IFNIQTM4NF9INzsKLSAgICAgICAgc2N0eC0+Y291bnRbMF0gPSBzY3R4LT5jb3VudFsxXSA9IHNjdHgtPmNvdW50WzJdID0gc2N0eC0+Y291bnRbM10gPSAwOworCXNjdHgtPmNvdW50WzBdID0gc2N0eC0+Y291bnRbMV0gPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzUsMjAgKzE2OSwxNiBAQAogc3RhdGljIGludAogc2hhNTEyX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0Jc3RydWN0IHNoYTUxMl9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwlzdHJ1Y3Qgc2hhNTEyX3N0YXRlICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAl1bnNpZ25lZCBpbnQgaSwgaW5kZXgsIHBhcnRfbGVuOwogCiAJLyogQ29tcHV0ZSBudW1iZXIgb2YgYnl0ZXMgbW9kIDEyOCAqLwotCWluZGV4ID0gKHVuc2lnbmVkIGludCkoKHNjdHgtPmNvdW50WzBdID4+IDMpICYgMHg3Rik7CisJaW5kZXggPSBzY3R4LT5jb3VudFswXSAmIDB4N2Y7CiAKLQkvKiBVcGRhdGUgbnVtYmVyIG9mIGJpdHMgKi8KLQlpZiAoKHNjdHgtPmNvdW50WzBdICs9IChsZW4gPDwgMykpIDwgKGxlbiA8PCAzKSkgewotCQlpZiAoKHNjdHgtPmNvdW50WzFdICs9IDEpIDwgMSkKLQkJCWlmICgoc2N0eC0+Y291bnRbMl0gKz0gMSkgPCAxKQotCQkJCXNjdHgtPmNvdW50WzNdKys7Ci0JCXNjdHgtPmNvdW50WzFdICs9IChsZW4gPj4gMjkpOwotCX0KKwkvKiBVcGRhdGUgbnVtYmVyIG9mIGJ5dGVzICovCisJaWYgKCEoc2N0eC0+Y291bnRbMF0gKz0gbGVuKSkKKwkJc2N0eC0+Y291bnRbMV0rKzsKIAogICAgICAgICBwYXJ0X2xlbiA9IDEyOCAtIGluZGV4OwogCkBAIC0yMTQsMjEgKzIwNCwxOSBAQAogc3RhdGljIGludAogc2hhNTEyX2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqaGFzaCkKIHsKLQlzdHJ1Y3Qgc2hhNTEyX2N0eCAqc2N0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBzaGE1MTJfc3RhdGUgKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKICAgICAgICAgc3RhdGljIHU4IHBhZGRpbmdbMTI4XSA9IHsgMHg4MCwgfTsKIAlfX2JlNjQgKmRzdCA9IChfX2JlNjQgKiloYXNoOwotCV9fYmUzMiBiaXRzWzRdOworCV9fYmU2NCBiaXRzWzJdOwogCXVuc2lnbmVkIGludCBpbmRleCwgcGFkX2xlbjsKIAlpbnQgaTsKIAogCS8qIFNhdmUgbnVtYmVyIG9mIGJpdHMgKi8KLQliaXRzWzNdID0gY3B1X3RvX2JlMzIoc2N0eC0+Y291bnRbMF0pOwotCWJpdHNbMl0gPSBjcHVfdG9fYmUzMihzY3R4LT5jb3VudFsxXSk7Ci0JYml0c1sxXSA9IGNwdV90b19iZTMyKHNjdHgtPmNvdW50WzJdKTsKLQliaXRzWzBdID0gY3B1X3RvX2JlMzIoc2N0eC0+Y291bnRbM10pOworCWJpdHNbMV0gPSBjcHVfdG9fYmU2NChzY3R4LT5jb3VudFswXSA8PCAzKTsKKwliaXRzWzBdID0gY3B1X3RvX2JlNjQoc2N0eC0+Y291bnRbMV0gPDwgMyB8IHNjdHgtPmNvdW50WzBdID4+IDYxKTsKIAogCS8qIFBhZCBvdXQgdG8gMTEyIG1vZCAxMjguICovCi0JaW5kZXggPSAoc2N0eC0+Y291bnRbMF0gPj4gMykgJiAweDdmOworCWluZGV4ID0gc2N0eC0+Y291bnRbMF0gJiAweDdmOwogCXBhZF9sZW4gPSAoaW5kZXggPCAxMTIpID8gKDExMiAtIGluZGV4KSA6ICgoMTI4KzExMikgLSBpbmRleCk7CiAJc2hhNTEyX3VwZGF0ZShkZXNjLCBwYWRkaW5nLCBwYWRfbGVuKTsKIApAQCAtMjQwLDcgKzIyOCw3IEBACiAJCWRzdFtpXSA9IGNwdV90b19iZTY0KHNjdHgtPnN0YXRlW2ldKTsKIAogCS8qIFplcm9pemUgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLiAqLwotCW1lbXNldChzY3R4LCAwLCBzaXplb2Yoc3RydWN0IHNoYTUxMl9jdHgpKTsKKwltZW1zZXQoc2N0eCwgMCwgc2l6ZW9mKHN0cnVjdCBzaGE1MTJfc3RhdGUpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjYyLDcgKzI1MCw3IEBACiAJLmluaXQJCT0Jc2hhNTEyX2luaXQsCiAJLnVwZGF0ZQkJPQlzaGE1MTJfdXBkYXRlLAogCS5maW5hbAkJPQlzaGE1MTJfZmluYWwsCi0JLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzaGE1MTJfY3R4KSwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHNoYTUxMl9zdGF0ZSksCiAJLmJhc2UJCT0JewogCQkuY3JhX25hbWUJPQkic2hhNTEyIiwKIAkJLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9TSEFTSCwKQEAgLTI3Niw3ICsyNjQsNyBAQAogCS5pbml0CQk9CXNoYTM4NF9pbml0LAogCS51cGRhdGUJCT0Jc2hhNTEyX3VwZGF0ZSwKIAkuZmluYWwJCT0Jc2hhMzg0X2ZpbmFsLAotCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3Qgc2hhNTEyX2N0eCksCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzaGE1MTJfc3RhdGUpLAogCS5iYXNlCQk9CXsKIAkJLmNyYV9uYW1lCT0JInNoYTM4NCIsCiAJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhc2guYyBiL2NyeXB0by9zaGFzaC5jCmluZGV4IDJjY2M4YjAuLjkxZjdiOWQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGFzaC5jCisrKyBiL2NyeXB0by9zaGFzaC5jCkBAIC0yMiw2ICsyMiwxMiBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlIGNyeXB0b19zaGFzaF90eXBlOwogCitzdGF0aWMgaW50IHNoYXNoX25vX3NldGtleShzdHJ1Y3QgY3J5cHRvX3NoYXNoICp0Zm0sIGNvbnN0IHU4ICprZXksCisJCQkgICB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXJldHVybiAtRU5PU1lTOworfQorCiBzdGF0aWMgaW50IHNoYXNoX3NldGtleV91bmFsaWduZWQoc3RydWN0IGNyeXB0b19zaGFzaCAqdGZtLCBjb25zdCB1OCAqa2V5LAogCQkJCSAgdW5zaWduZWQgaW50IGtleWxlbikKIHsKQEAgLTM5LDggKzQ1LDcgQEAKIAlhbGlnbmJ1ZmZlciA9ICh1OCAqKUFMSUdOKCh1bnNpZ25lZCBsb25nKWJ1ZmZlciwgYWxpZ25tYXNrICsgMSk7CiAJbWVtY3B5KGFsaWduYnVmZmVyLCBrZXksIGtleWxlbik7CiAJZXJyID0gc2hhc2gtPnNldGtleSh0Zm0sIGFsaWduYnVmZmVyLCBrZXlsZW4pOwotCW1lbXNldChhbGlnbmJ1ZmZlciwgMCwga2V5bGVuKTsKLQlrZnJlZShidWZmZXIpOworCWt6ZnJlZShidWZmZXIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTUwLDkgKzU1LDYgQEAKIAlzdHJ1Y3Qgc2hhc2hfYWxnICpzaGFzaCA9IGNyeXB0b19zaGFzaF9hbGcodGZtKTsKIAl1bnNpZ25lZCBsb25nIGFsaWdubWFzayA9IGNyeXB0b19zaGFzaF9hbGlnbm1hc2sodGZtKTsKIAotCWlmICghc2hhc2gtPnNldGtleSkKLQkJcmV0dXJuIC1FTk9TWVM7Ci0KIAlpZiAoKHVuc2lnbmVkIGxvbmcpa2V5ICYgYWxpZ25tYXNrKQogCQlyZXR1cm4gc2hhc2hfc2V0a2V5X3VuYWxpZ25lZCh0Zm0sIGtleSwga2V5bGVuKTsKIApAQCAtNzQsMTUgKzc2LDE5IEBACiAJdW5zaWduZWQgbG9uZyBhbGlnbm1hc2sgPSBjcnlwdG9fc2hhc2hfYWxpZ25tYXNrKHRmbSk7CiAJdW5zaWduZWQgaW50IHVuYWxpZ25lZF9sZW4gPSBhbGlnbm1hc2sgKyAxIC0KIAkJCQkgICAgICgodW5zaWduZWQgbG9uZylkYXRhICYgYWxpZ25tYXNrKTsKLQl1OCBidWZbc2hhc2hfYWxpZ25fYnVmZmVyX3NpemUodW5hbGlnbmVkX2xlbiwgYWxpZ25tYXNrKV0KKwl1OCB1YnVmW3NoYXNoX2FsaWduX2J1ZmZlcl9zaXplKHVuYWxpZ25lZF9sZW4sIGFsaWdubWFzayldCiAJCV9fYXR0cmlidXRlX18gKChhbGlnbmVkKSk7CisJdTggKmJ1ZiA9IFBUUl9BTElHTigmdWJ1ZlswXSwgYWxpZ25tYXNrICsgMSk7CisJaW50IGVycjsKIAogCWlmICh1bmFsaWduZWRfbGVuID4gbGVuKQogCQl1bmFsaWduZWRfbGVuID0gbGVuOwogCiAJbWVtY3B5KGJ1ZiwgZGF0YSwgdW5hbGlnbmVkX2xlbik7CisJZXJyID0gc2hhc2gtPnVwZGF0ZShkZXNjLCBidWYsIHVuYWxpZ25lZF9sZW4pOworCW1lbXNldChidWYsIDAsIHVuYWxpZ25lZF9sZW4pOwogCi0JcmV0dXJuIHNoYXNoLT51cGRhdGUoZGVzYywgYnVmLCB1bmFsaWduZWRfbGVuKSA/OgorCXJldHVybiBlcnIgPzoKIAkgICAgICAgc2hhc2gtPnVwZGF0ZShkZXNjLCBkYXRhICsgdW5hbGlnbmVkX2xlbiwgbGVuIC0gdW5hbGlnbmVkX2xlbik7CiB9CiAKQEAgLTEwNiwxMiArMTEyLDE5IEBACiAJdW5zaWduZWQgbG9uZyBhbGlnbm1hc2sgPSBjcnlwdG9fc2hhc2hfYWxpZ25tYXNrKHRmbSk7CiAJc3RydWN0IHNoYXNoX2FsZyAqc2hhc2ggPSBjcnlwdG9fc2hhc2hfYWxnKHRmbSk7CiAJdW5zaWduZWQgaW50IGRzID0gY3J5cHRvX3NoYXNoX2RpZ2VzdHNpemUodGZtKTsKLQl1OCBidWZbc2hhc2hfYWxpZ25fYnVmZmVyX3NpemUoZHMsIGFsaWdubWFzayldCisJdTggdWJ1ZltzaGFzaF9hbGlnbl9idWZmZXJfc2l6ZShkcywgYWxpZ25tYXNrKV0KIAkJX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQpKTsKKwl1OCAqYnVmID0gUFRSX0FMSUdOKCZ1YnVmWzBdLCBhbGlnbm1hc2sgKyAxKTsKIAlpbnQgZXJyOwogCiAJZXJyID0gc2hhc2gtPmZpbmFsKGRlc2MsIGJ1Zik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKIAltZW1jcHkob3V0LCBidWYsIGRzKTsKKworb3V0OgorCW1lbXNldChidWYsIDAsIGRzKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNDIsOCArMTU1LDcgQEAKIAlzdHJ1Y3Qgc2hhc2hfYWxnICpzaGFzaCA9IGNyeXB0b19zaGFzaF9hbGcodGZtKTsKIAl1bnNpZ25lZCBsb25nIGFsaWdubWFzayA9IGNyeXB0b19zaGFzaF9hbGlnbm1hc2sodGZtKTsKIAotCWlmICgoKHVuc2lnbmVkIGxvbmcpZGF0YSB8ICh1bnNpZ25lZCBsb25nKW91dCkgJiBhbGlnbm1hc2sgfHwKLQkgICAgIXNoYXNoLT5maW51cCkKKwlpZiAoKCh1bnNpZ25lZCBsb25nKWRhdGEgfCAodW5zaWduZWQgbG9uZylvdXQpICYgYWxpZ25tYXNrKQogCQlyZXR1cm4gc2hhc2hfZmludXBfdW5hbGlnbmVkKGRlc2MsIGRhdGEsIGxlbiwgb3V0KTsKIAogCXJldHVybiBzaGFzaC0+ZmludXAoZGVzYywgZGF0YSwgbGVuLCBvdXQpOwpAQCAtMTU0LDggKzE2Niw3IEBACiAJCQkJICB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqb3V0KQogewogCXJldHVybiBjcnlwdG9fc2hhc2hfaW5pdChkZXNjKSA/OgotCSAgICAgICBjcnlwdG9fc2hhc2hfdXBkYXRlKGRlc2MsIGRhdGEsIGxlbikgPzoKLQkgICAgICAgY3J5cHRvX3NoYXNoX2ZpbmFsKGRlc2MsIG91dCk7CisJICAgICAgIGNyeXB0b19zaGFzaF9maW51cChkZXNjLCBkYXRhLCBsZW4sIG91dCk7CiB9CiAKIGludCBjcnlwdG9fc2hhc2hfZGlnZXN0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCBjb25zdCB1OCAqZGF0YSwKQEAgLTE2NSwyNyArMTc2LDI0IEBACiAJc3RydWN0IHNoYXNoX2FsZyAqc2hhc2ggPSBjcnlwdG9fc2hhc2hfYWxnKHRmbSk7CiAJdW5zaWduZWQgbG9uZyBhbGlnbm1hc2sgPSBjcnlwdG9fc2hhc2hfYWxpZ25tYXNrKHRmbSk7CiAKLQlpZiAoKCh1bnNpZ25lZCBsb25nKWRhdGEgfCAodW5zaWduZWQgbG9uZylvdXQpICYgYWxpZ25tYXNrIHx8Ci0JICAgICFzaGFzaC0+ZGlnZXN0KQorCWlmICgoKHVuc2lnbmVkIGxvbmcpZGF0YSB8ICh1bnNpZ25lZCBsb25nKW91dCkgJiBhbGlnbm1hc2spCiAJCXJldHVybiBzaGFzaF9kaWdlc3RfdW5hbGlnbmVkKGRlc2MsIGRhdGEsIGxlbiwgb3V0KTsKIAogCXJldHVybiBzaGFzaC0+ZGlnZXN0KGRlc2MsIGRhdGEsIGxlbiwgb3V0KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19zaGFzaF9kaWdlc3QpOwogCi1pbnQgY3J5cHRvX3NoYXNoX2ltcG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3QgdTggKmluKQorc3RhdGljIGludCBzaGFzaF9kZWZhdWx0X2V4cG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdm9pZCAqb3V0KQogewotCXN0cnVjdCBjcnlwdG9fc2hhc2ggKnRmbSA9IGRlc2MtPnRmbTsKLQlzdHJ1Y3Qgc2hhc2hfYWxnICphbGcgPSBjcnlwdG9fc2hhc2hfYWxnKHRmbSk7Ci0KLQltZW1jcHkoc2hhc2hfZGVzY19jdHgoZGVzYyksIGluLCBjcnlwdG9fc2hhc2hfZGVzY3NpemUodGZtKSk7Ci0KLQlpZiAoYWxnLT5yZWluaXQpCi0JCWFsZy0+cmVpbml0KGRlc2MpOwotCisJbWVtY3B5KG91dCwgc2hhc2hfZGVzY19jdHgoZGVzYyksIGNyeXB0b19zaGFzaF9kZXNjc2l6ZShkZXNjLT50Zm0pKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19zaGFzaF9pbXBvcnQpOworCitzdGF0aWMgaW50IHNoYXNoX2RlZmF1bHRfaW1wb3J0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCBjb25zdCB2b2lkICppbikKK3sKKwltZW1jcHkoc2hhc2hfZGVzY19jdHgoZGVzYyksIGluLCBjcnlwdG9fc2hhc2hfZGVzY3NpemUoZGVzYy0+dGZtKSk7CisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQgc2hhc2hfYXN5bmNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSwgY29uc3QgdTggKmtleSwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4pCkBAIC0yMDYsOSArMjE0LDggQEAKIAlyZXR1cm4gY3J5cHRvX3NoYXNoX2luaXQoZGVzYyk7CiB9CiAKLXN0YXRpYyBpbnQgc2hhc2hfYXN5bmNfdXBkYXRlKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCitpbnQgc2hhc2hfYWhhc2hfdXBkYXRlKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzaGFzaF9kZXNjICpkZXNjID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKIAlzdHJ1Y3QgY3J5cHRvX2hhc2hfd2FsayB3YWxrOwogCWludCBuYnl0ZXM7CiAKQEAgLTIxOCwxMyArMjI1LDUxIEBACiAKIAlyZXR1cm4gbmJ5dGVzOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2hhc2hfYWhhc2hfdXBkYXRlKTsKKworc3RhdGljIGludCBzaGFzaF9hc3luY191cGRhdGUoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gc2hhc2hfYWhhc2hfdXBkYXRlKHJlcSwgYWhhc2hfcmVxdWVzdF9jdHgocmVxKSk7Cit9CiAKIHN0YXRpYyBpbnQgc2hhc2hfYXN5bmNfZmluYWwoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKIHsKIAlyZXR1cm4gY3J5cHRvX3NoYXNoX2ZpbmFsKGFoYXNoX3JlcXVlc3RfY3R4KHJlcSksIHJlcS0+cmVzdWx0KTsKIH0KIAotc3RhdGljIGludCBzaGFzaF9hc3luY19kaWdlc3Qoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK2ludCBzaGFzaF9haGFzaF9maW51cChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLCBzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2hhc2hfd2FsayB3YWxrOworCWludCBuYnl0ZXM7CisKKwluYnl0ZXMgPSBjcnlwdG9faGFzaF93YWxrX2ZpcnN0KHJlcSwgJndhbGspOworCWlmICghbmJ5dGVzKQorCQlyZXR1cm4gY3J5cHRvX3NoYXNoX2ZpbmFsKGRlc2MsIHJlcS0+cmVzdWx0KTsKKworCWRvIHsKKwkJbmJ5dGVzID0gY3J5cHRvX2hhc2hfd2Fsa19sYXN0KCZ3YWxrKSA/CisJCQkgY3J5cHRvX3NoYXNoX2ZpbnVwKGRlc2MsIHdhbGsuZGF0YSwgbmJ5dGVzLAorCQkJCQkgICAgcmVxLT5yZXN1bHQpIDoKKwkJCSBjcnlwdG9fc2hhc2hfdXBkYXRlKGRlc2MsIHdhbGsuZGF0YSwgbmJ5dGVzKTsKKwkJbmJ5dGVzID0gY3J5cHRvX2hhc2hfd2Fsa19kb25lKCZ3YWxrLCBuYnl0ZXMpOworCX0gd2hpbGUgKG5ieXRlcyA+IDApOworCisJcmV0dXJuIG5ieXRlczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNoYXNoX2FoYXNoX2ZpbnVwKTsKKworc3RhdGljIGludCBzaGFzaF9hc3luY19maW51cChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKipjdHggPSBjcnlwdG9fYWhhc2hfY3R4KGNyeXB0b19haGFzaF9yZXF0Zm0ocmVxKSk7CisJc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MgPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOworCisJZGVzYy0+dGZtID0gKmN0eDsKKwlkZXNjLT5mbGFncyA9IHJlcS0+YmFzZS5mbGFnczsKKworCXJldHVybiBzaGFzaF9haGFzaF9maW51cChyZXEsIGRlc2MpOworfQorCitpbnQgc2hhc2hfYWhhc2hfZGlnZXN0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSByZXEtPnNyYzsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2ctPm9mZnNldDsKQEAgLTIzMiwzNSArMjc3LDQxIEBACiAJaW50IGVycjsKIAogCWlmIChuYnl0ZXMgPCBtaW4oc2ctPmxlbmd0aCwgKCh1bnNpZ25lZCBpbnQpKFBBR0VfU0laRSkpIC0gb2Zmc2V0KSkgewotCQlzdHJ1Y3QgY3J5cHRvX3NoYXNoICoqY3R4ID0KLQkJCWNyeXB0b19haGFzaF9jdHgoY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpKTsKLQkJc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MgPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwogCQl2b2lkICpkYXRhOwogCi0JCWRlc2MtPnRmbSA9ICpjdHg7Ci0JCWRlc2MtPmZsYWdzID0gcmVxLT5iYXNlLmZsYWdzOwotCiAJCWRhdGEgPSBjcnlwdG9fa21hcChzZ19wYWdlKHNnKSwgMCk7CiAJCWVyciA9IGNyeXB0b19zaGFzaF9kaWdlc3QoZGVzYywgZGF0YSArIG9mZnNldCwgbmJ5dGVzLAogCQkJCQkgIHJlcS0+cmVzdWx0KTsKIAkJY3J5cHRvX2t1bm1hcChkYXRhLCAwKTsKIAkJY3J5cHRvX3lpZWxkKGRlc2MtPmZsYWdzKTsKLQkJZ290byBvdXQ7Ci0JfQorCX0gZWxzZQorCQllcnIgPSBjcnlwdG9fc2hhc2hfaW5pdChkZXNjKSA/OgorCQkgICAgICBzaGFzaF9haGFzaF9maW51cChyZXEsIGRlc2MpOwogCi0JZXJyID0gc2hhc2hfYXN5bmNfaW5pdChyZXEpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gc2hhc2hfYXN5bmNfdXBkYXRlKHJlcSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBzaGFzaF9hc3luY19maW5hbChyZXEpOwotCi1vdXQ6CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNoYXNoX2FoYXNoX2RpZ2VzdCk7CisKK3N0YXRpYyBpbnQgc2hhc2hfYXN5bmNfZGlnZXN0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0b19zaGFzaCAqKmN0eCA9IGNyeXB0b19haGFzaF9jdHgoY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpKTsKKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYyA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CisKKwlkZXNjLT50Zm0gPSAqY3R4OworCWRlc2MtPmZsYWdzID0gcmVxLT5iYXNlLmZsYWdzOworCisJcmV0dXJuIHNoYXNoX2FoYXNoX2RpZ2VzdChyZXEsIGRlc2MpOworfQorCitzdGF0aWMgaW50IHNoYXNoX2FzeW5jX2V4cG9ydChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLCB2b2lkICpvdXQpCit7CisJcmV0dXJuIGNyeXB0b19zaGFzaF9leHBvcnQoYWhhc2hfcmVxdWVzdF9jdHgocmVxKSwgb3V0KTsKK30KKworc3RhdGljIGludCBzaGFzaF9hc3luY19pbXBvcnQoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSwgY29uc3Qgdm9pZCAqaW4pCit7CisJcmV0dXJuIGNyeXB0b19zaGFzaF9pbXBvcnQoYWhhc2hfcmVxdWVzdF9jdHgocmVxKSwgaW4pOworfQogCiBzdGF0aWMgdm9pZCBjcnlwdG9fZXhpdF9zaGFzaF9vcHNfYXN5bmMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKQEAgLTI2OSwxMSArMzIwLDExIEBACiAJY3J5cHRvX2ZyZWVfc2hhc2goKmN0eCk7CiB9CiAKLXN0YXRpYyBpbnQgY3J5cHRvX2luaXRfc2hhc2hfb3BzX2FzeW5jKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitpbnQgY3J5cHRvX2luaXRfc2hhc2hfb3BzX2FzeW5jKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7CiAJc3RydWN0IGNyeXB0b19hbGcgKmNhbGcgPSB0Zm0tPl9fY3J0X2FsZzsKIAlzdHJ1Y3Qgc2hhc2hfYWxnICphbGcgPSBfX2NyeXB0b19zaGFzaF9hbGcoY2FsZyk7Ci0Jc3RydWN0IGFoYXNoX3RmbSAqY3J0ID0gJnRmbS0+Y3J0X2FoYXNoOworCXN0cnVjdCBjcnlwdG9fYWhhc2ggKmNydCA9IF9fY3J5cHRvX2FoYXNoX2Nhc3QodGZtKTsKIAlzdHJ1Y3QgY3J5cHRvX3NoYXNoICoqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAlzdHJ1Y3QgY3J5cHRvX3NoYXNoICpzaGFzaDsKIApAQCAtMjkxLDExICszNDIsMTcgQEAKIAogCWNydC0+aW5pdCA9IHNoYXNoX2FzeW5jX2luaXQ7CiAJY3J0LT51cGRhdGUgPSBzaGFzaF9hc3luY191cGRhdGU7Ci0JY3J0LT5maW5hbCAgPSBzaGFzaF9hc3luY19maW5hbDsKKwljcnQtPmZpbmFsID0gc2hhc2hfYXN5bmNfZmluYWw7CisJY3J0LT5maW51cCA9IHNoYXNoX2FzeW5jX2ZpbnVwOwogCWNydC0+ZGlnZXN0ID0gc2hhc2hfYXN5bmNfZGlnZXN0OwotCWNydC0+c2V0a2V5ID0gc2hhc2hfYXN5bmNfc2V0a2V5OwogCi0JY3J0LT5kaWdlc3RzaXplID0gYWxnLT5kaWdlc3RzaXplOworCWlmIChhbGctPnNldGtleSkKKwkJY3J0LT5zZXRrZXkgPSBzaGFzaF9hc3luY19zZXRrZXk7CisJaWYgKGFsZy0+ZXhwb3J0KQorCQljcnQtPmV4cG9ydCA9IHNoYXNoX2FzeW5jX2V4cG9ydDsKKwlpZiAoYWxnLT5pbXBvcnQpCisJCWNydC0+aW1wb3J0ID0gc2hhc2hfYXN5bmNfaW1wb3J0OworCiAJY3J0LT5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBzaGFzaF9kZXNjKSArIGNyeXB0b19zaGFzaF9kZXNjc2l6ZShzaGFzaCk7CiAKIAlyZXR1cm4gMDsKQEAgLTMwNCwxNCArMzYxLDE2IEBACiBzdGF0aWMgaW50IHNoYXNoX2NvbXBhdF9zZXRrZXkoc3RydWN0IGNyeXB0b19oYXNoICp0Zm0sIGNvbnN0IHU4ICprZXksCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGtleWxlbikKIHsKLQlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYyA9IGNyeXB0b19oYXNoX2N0eCh0Zm0pOworCXN0cnVjdCBzaGFzaF9kZXNjICoqZGVzY3AgPSBjcnlwdG9faGFzaF9jdHgodGZtKTsKKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYyA9ICpkZXNjcDsKIAogCXJldHVybiBjcnlwdG9fc2hhc2hfc2V0a2V5KGRlc2MtPnRmbSwga2V5LCBrZXlsZW4pOwogfQogCiBzdGF0aWMgaW50IHNoYXNoX2NvbXBhdF9pbml0KHN0cnVjdCBoYXNoX2Rlc2MgKmhkZXNjKQogewotCXN0cnVjdCBzaGFzaF9kZXNjICpkZXNjID0gY3J5cHRvX2hhc2hfY3R4KGhkZXNjLT50Zm0pOworCXN0cnVjdCBzaGFzaF9kZXNjICoqZGVzY3AgPSBjcnlwdG9faGFzaF9jdHgoaGRlc2MtPnRmbSk7CisJc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MgPSAqZGVzY3A7CiAKIAlkZXNjLT5mbGFncyA9IGhkZXNjLT5mbGFnczsKIApAQCAtMzIxLDcgKzM4MCw4IEBACiBzdGF0aWMgaW50IHNoYXNoX2NvbXBhdF91cGRhdGUoc3RydWN0IGhhc2hfZGVzYyAqaGRlc2MsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbikKIHsKLQlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYyA9IGNyeXB0b19oYXNoX2N0eChoZGVzYy0+dGZtKTsKKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqKmRlc2NwID0gY3J5cHRvX2hhc2hfY3R4KGhkZXNjLT50Zm0pOworCXN0cnVjdCBzaGFzaF9kZXNjICpkZXNjID0gKmRlc2NwOwogCXN0cnVjdCBjcnlwdG9faGFzaF93YWxrIHdhbGs7CiAJaW50IG5ieXRlczsKIApAQCAtMzM0LDcgKzM5NCw5IEBACiAKIHN0YXRpYyBpbnQgc2hhc2hfY29tcGF0X2ZpbmFsKHN0cnVjdCBoYXNoX2Rlc2MgKmhkZXNjLCB1OCAqb3V0KQogewotCXJldHVybiBjcnlwdG9fc2hhc2hfZmluYWwoY3J5cHRvX2hhc2hfY3R4KGhkZXNjLT50Zm0pLCBvdXQpOworCXN0cnVjdCBzaGFzaF9kZXNjICoqZGVzY3AgPSBjcnlwdG9faGFzaF9jdHgoaGRlc2MtPnRmbSk7CisKKwlyZXR1cm4gY3J5cHRvX3NoYXNoX2ZpbmFsKCpkZXNjcCwgb3V0KTsKIH0KIAogc3RhdGljIGludCBzaGFzaF9jb21wYXRfZGlnZXN0KHN0cnVjdCBoYXNoX2Rlc2MgKmhkZXNjLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLApAQCAtMzQ0LDcgKzQwNiw4IEBACiAJaW50IGVycjsKIAogCWlmIChuYnl0ZXMgPCBtaW4oc2ctPmxlbmd0aCwgKCh1bnNpZ25lZCBpbnQpKFBBR0VfU0laRSkpIC0gb2Zmc2V0KSkgewotCQlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYyA9IGNyeXB0b19oYXNoX2N0eChoZGVzYy0+dGZtKTsKKwkJc3RydWN0IHNoYXNoX2Rlc2MgKipkZXNjcCA9IGNyeXB0b19oYXNoX2N0eChoZGVzYy0+dGZtKTsKKwkJc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MgPSAqZGVzY3A7CiAJCXZvaWQgKmRhdGE7CiAKIAkJZGVzYy0+ZmxhZ3MgPSBoZGVzYy0+ZmxhZ3M7CkBAIC0zNzIsOSArNDM1LDExIEBACiAKIHN0YXRpYyB2b2lkIGNyeXB0b19leGl0X3NoYXNoX29wc19jb21wYXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKLQlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYz0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqKmRlc2NwID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYyA9ICpkZXNjcDsKIAogCWNyeXB0b19mcmVlX3NoYXNoKGRlc2MtPnRmbSk7CisJa3pmcmVlKGRlc2MpOwogfQogCiBzdGF0aWMgaW50IGNyeXB0b19pbml0X3NoYXNoX29wc19jb21wYXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKQEAgLTM4Miw4ICs0NDcsOSBAQAogCXN0cnVjdCBoYXNoX3RmbSAqY3J0ID0gJnRmbS0+Y3J0X2hhc2g7CiAJc3RydWN0IGNyeXB0b19hbGcgKmNhbGcgPSB0Zm0tPl9fY3J0X2FsZzsKIAlzdHJ1Y3Qgc2hhc2hfYWxnICphbGcgPSBfX2NyeXB0b19zaGFzaF9hbGcoY2FsZyk7Ci0Jc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MgPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzaGFzaF9kZXNjICoqZGVzY3AgPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCXN0cnVjdCBjcnlwdG9fc2hhc2ggKnNoYXNoOworCXN0cnVjdCBzaGFzaF9kZXNjICpkZXNjOwogCiAJaWYgKCFjcnlwdG9fbW9kX2dldChjYWxnKSkKIAkJcmV0dXJuIC1FQUdBSU47CkBAIC0zOTQsNiArNDYwLDE0IEBACiAJCXJldHVybiBQVFJfRVJSKHNoYXNoKTsKIAl9CiAKKwlkZXNjID0ga21hbGxvYyhzaXplb2YoKmRlc2MpICsgY3J5cHRvX3NoYXNoX2Rlc2NzaXplKHNoYXNoKSwKKwkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghZGVzYykgeworCQljcnlwdG9fZnJlZV9zaGFzaChzaGFzaCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCSpkZXNjcCA9IGRlc2M7CiAJZGVzYy0+dGZtID0gc2hhc2g7CiAJdGZtLT5leGl0ID0gY3J5cHRvX2V4aXRfc2hhc2hfb3BzX2NvbXBhdDsKIApAQCAtNDEzLDggKzQ4Nyw2IEBACiAJc3dpdGNoIChtYXNrICYgQ1JZUFRPX0FMR19UWVBFX01BU0spIHsKIAljYXNlIENSWVBUT19BTEdfVFlQRV9IQVNIX01BU0s6CiAJCXJldHVybiBjcnlwdG9faW5pdF9zaGFzaF9vcHNfY29tcGF0KHRmbSk7Ci0JY2FzZSBDUllQVE9fQUxHX1RZUEVfQUhBU0hfTUFTSzoKLQkJcmV0dXJuIGNyeXB0b19pbml0X3NoYXNoX29wc19hc3luYyh0Zm0pOwogCX0KIAogCXJldHVybiAtRUlOVkFMOwpAQCAtNDIzLDI2ICs0OTUsMjMgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3J5cHRvX3NoYXNoX2N0eHNpemUoc3RydWN0IGNyeXB0b19hbGcgKmFsZywgdTMyIHR5cGUsCiAJCQkJCSB1MzIgbWFzaykKIHsKLQlzdHJ1Y3Qgc2hhc2hfYWxnICpzYWxnID0gX19jcnlwdG9fc2hhc2hfYWxnKGFsZyk7Ci0KIAlzd2l0Y2ggKG1hc2sgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgewogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0hBU0hfTUFTSzoKLQkJcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2hhc2hfZGVzYykgKyBzYWxnLT5kZXNjc2l6ZTsKLQljYXNlIENSWVBUT19BTEdfVFlQRV9BSEFTSF9NQVNLOgotCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fc2hhc2ggKik7CisJCXJldHVybiBzaXplb2Yoc3RydWN0IHNoYXNoX2Rlc2MgKik7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3J5cHRvX3NoYXNoX2luaXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCi0JCQkJIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpCitzdGF0aWMgaW50IGNyeXB0b19zaGFzaF9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogeworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKmhhc2ggPSBfX2NyeXB0b19zaGFzaF9jYXN0KHRmbSk7CisKKwloYXNoLT5kZXNjc2l6ZSA9IGNyeXB0b19zaGFzaF9hbGcoaGFzaCktPmRlc2NzaXplOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGNyeXB0b19zaGFzaF9leHRzaXplKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCi0JCQkJCSBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQorc3RhdGljIHVuc2lnbmVkIGludCBjcnlwdG9fc2hhc2hfZXh0c2l6ZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQogewogCXJldHVybiBhbGctPmNyYV9jdHhzaXplOwogfQpAQCAtNDU2LDcgKzUyNSw2IEBACiAJc2VxX3ByaW50ZihtLCAidHlwZSAgICAgICAgIDogc2hhc2hcbiIpOwogCXNlcV9wcmludGYobSwgImJsb2Nrc2l6ZSAgICA6ICV1XG4iLCBhbGctPmNyYV9ibG9ja3NpemUpOwogCXNlcV9wcmludGYobSwgImRpZ2VzdHNpemUgICA6ICV1XG4iLCBzYWxnLT5kaWdlc3RzaXplKTsKLQlzZXFfcHJpbnRmKG0sICJkZXNjc2l6ZSAgICAgOiAldVxuIiwgc2FsZy0+ZGVzY3NpemUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlIGNyeXB0b19zaGFzaF90eXBlID0gewpAQCAtNDgwLDE4ICs1NDgsNDMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hbGxvY19zaGFzaCk7CiAKLWludCBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goc3RydWN0IHNoYXNoX2FsZyAqYWxnKQorc3RhdGljIGludCBzaGFzaF9wcmVwYXJlX2FsZyhzdHJ1Y3Qgc2hhc2hfYWxnICphbGcpCiB7CiAJc3RydWN0IGNyeXB0b19hbGcgKmJhc2UgPSAmYWxnLT5iYXNlOwogCiAJaWYgKGFsZy0+ZGlnZXN0c2l6ZSA+IFBBR0VfU0laRSAvIDggfHwKLQkgICAgYWxnLT5kZXNjc2l6ZSA+IFBBR0VfU0laRSAvIDgpCisJICAgIGFsZy0+ZGVzY3NpemUgPiBQQUdFX1NJWkUgLyA4IHx8CisJICAgIGFsZy0+c3RhdGVzaXplID4gUEFHRV9TSVpFIC8gOCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAliYXNlLT5jcmFfdHlwZSA9ICZjcnlwdG9fc2hhc2hfdHlwZTsKIAliYXNlLT5jcmFfZmxhZ3MgJj0gfkNSWVBUT19BTEdfVFlQRV9NQVNLOwogCWJhc2UtPmNyYV9mbGFncyB8PSBDUllQVE9fQUxHX1RZUEVfU0hBU0g7CiAKKwlpZiAoIWFsZy0+ZmludXApCisJCWFsZy0+ZmludXAgPSBzaGFzaF9maW51cF91bmFsaWduZWQ7CisJaWYgKCFhbGctPmRpZ2VzdCkKKwkJYWxnLT5kaWdlc3QgPSBzaGFzaF9kaWdlc3RfdW5hbGlnbmVkOworCWlmICghYWxnLT5leHBvcnQpIHsKKwkJYWxnLT5leHBvcnQgPSBzaGFzaF9kZWZhdWx0X2V4cG9ydDsKKwkJYWxnLT5pbXBvcnQgPSBzaGFzaF9kZWZhdWx0X2ltcG9ydDsKKwkJYWxnLT5zdGF0ZXNpemUgPSBhbGctPmRlc2NzaXplOworCX0KKwlpZiAoIWFsZy0+c2V0a2V5KQorCQlhbGctPnNldGtleSA9IHNoYXNoX25vX3NldGtleTsKKworCXJldHVybiAwOworfQorCitpbnQgY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKHN0cnVjdCBzaGFzaF9hbGcgKmFsZykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYmFzZSA9ICZhbGctPmJhc2U7CisJaW50IGVycjsKKworCWVyciA9IHNoYXNoX3ByZXBhcmVfYWxnKGFsZyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKGJhc2UpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKTsKQEAgLTUwMiw1ICs1OTUsNDQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKTsKIAoraW50IHNoYXNoX3JlZ2lzdGVyX2luc3RhbmNlKHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKnRtcGwsCisJCQkgICAgc3RydWN0IHNoYXNoX2luc3RhbmNlICppbnN0KQoreworCWludCBlcnI7CisKKwllcnIgPSBzaGFzaF9wcmVwYXJlX2FsZygmaW5zdC0+YWxnKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9pbnN0YW5jZSh0bXBsLCBzaGFzaF9jcnlwdG9faW5zdGFuY2UoaW5zdCkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2hhc2hfcmVnaXN0ZXJfaW5zdGFuY2UpOworCit2b2lkIHNoYXNoX2ZyZWVfaW5zdGFuY2Uoc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCkKK3sKKwljcnlwdG9fZHJvcF9zcGF3bihjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpKTsKKwlrZnJlZShzaGFzaF9pbnN0YW5jZShpbnN0KSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzaGFzaF9mcmVlX2luc3RhbmNlKTsKKworaW50IGNyeXB0b19pbml0X3NoYXNoX3NwYXduKHN0cnVjdCBjcnlwdG9fc2hhc2hfc3Bhd24gKnNwYXduLAorCQkJICAgIHN0cnVjdCBzaGFzaF9hbGcgKmFsZywKKwkJCSAgICBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KQoreworCXJldHVybiBjcnlwdG9faW5pdF9zcGF3bjIoJnNwYXduLT5iYXNlLCAmYWxnLT5iYXNlLCBpbnN0LAorCQkJCSAgJmNyeXB0b19zaGFzaF90eXBlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19pbml0X3NoYXNoX3NwYXduKTsKKworc3RydWN0IHNoYXNoX2FsZyAqc2hhc2hfYXR0cl9hbGcoc3RydWN0IHJ0YXR0ciAqcnRhLCB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKworCWFsZyA9IGNyeXB0b19hdHRyX2FsZzIocnRhLCAmY3J5cHRvX3NoYXNoX3R5cGUsIHR5cGUsIG1hc2spOworCXJldHVybiBJU19FUlIoYWxnKSA/IEVSUl9DQVNUKGFsZykgOgorCSAgICAgICBjb250YWluZXJfb2YoYWxnLCBzdHJ1Y3Qgc2hhc2hfYWxnLCBiYXNlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNoYXNoX2F0dHJfYWxnKTsKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTeW5jaHJvbm91cyBjcnlwdG9ncmFwaGljIGhhc2ggdHlwZSIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3RjcnlwdC5jIGIvY3J5cHRvL3RjcnlwdC5jCmluZGV4IGQ1OWJhNTAuLmFhM2Y4NGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by90Y3J5cHQuYworKysgYi9jcnlwdG8vdGNyeXB0LmMKQEAgLTQ1LDYgKzQ1LDkgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBzZWM7CiAKK3N0YXRpYyBjaGFyICphbGcgPSBOVUxMOworc3RhdGljIHUzMiB0eXBlOworc3RhdGljIHUzMiBtYXNrOwogc3RhdGljIGludCBtb2RlOwogc3RhdGljIGNoYXIgKnR2bWVtW1RWTUVNU0laRV07CiAKQEAgLTcxNiw2ICs3MTksMTAgQEAKIAkJcmV0ICs9IHRjcnlwdF90ZXN0KCJobWFjKHJtZDE2MCkiKTsKIAkJYnJlYWs7CiAKKwljYXNlIDEwOToKKwkJcmV0ICs9IHRjcnlwdF90ZXN0KCJ2bWFjKGFlcykiKTsKKwkJYnJlYWs7CisKIAljYXNlIDE1MDoKIAkJcmV0ICs9IHRjcnlwdF90ZXN0KCJhbnNpX2Nwcm5nIik7CiAJCWJyZWFrOwpAQCAtODg1LDYgKzg5MiwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgZG9fYWxnX3Rlc3QoY29uc3QgY2hhciAqYWxnLCB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJcmV0dXJuIGNyeXB0b19oYXNfYWxnKGFsZywgdHlwZSwgbWFzayA/OiBDUllQVE9fQUxHX1RZUEVfTUFTSykgPworCSAgICAgICAwIDogLUVOT0VOVDsKK30KKwogc3RhdGljIGludCBfX2luaXQgdGNyeXB0X21vZF9pbml0KHZvaWQpCiB7CiAJaW50IGVyciA9IC1FTk9NRU07CkBAIC04OTYsNyArOTA5LDExIEBACiAJCQlnb3RvIGVycl9mcmVlX3R2OwogCX0KIAotCWVyciA9IGRvX3Rlc3QobW9kZSk7CisJaWYgKGFsZykKKwkJZXJyID0gZG9fYWxnX3Rlc3QoYWxnLCB0eXBlLCBtYXNrKTsKKwllbHNlCisJCWVyciA9IGRvX3Rlc3QobW9kZSk7CisKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidGNyeXB0OiBvbmUgb3IgbW9yZSB0ZXN0cyBmYWlsZWQhXG4iKTsKIAkJZ290byBlcnJfZnJlZV90djsKQEAgLTkyOCw2ICs5NDUsOSBAQAogbW9kdWxlX2luaXQodGNyeXB0X21vZF9pbml0KTsKIG1vZHVsZV9leGl0KHRjcnlwdF9tb2RfZmluaSk7CiAKK21vZHVsZV9wYXJhbShhbGcsIGNoYXJwLCAwKTsKK21vZHVsZV9wYXJhbSh0eXBlLCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbShtYXNrLCB1aW50LCAwKTsKIG1vZHVsZV9wYXJhbShtb2RlLCBpbnQsIDApOwogbW9kdWxlX3BhcmFtKHNlYywgdWludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHNlYywgIkxlbmd0aCBpbiBzZWNvbmRzIG9mIHNwZWVkIHRlc3RzICIKZGlmZiAtLWdpdCBhL2NyeXB0by90ZXN0bWdyLmMgYi9jcnlwdG8vdGVzdG1nci5jCmluZGV4IGU5ZTlkODQuLjZkNWI3NDYgMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZXN0bWdyLmMKKysrIGIvY3J5cHRvL3Rlc3RtZ3IuYwpAQCAtMTkwLDEwICsxOTAsNiBAQAogCiAJCWhhc2hfYnVmZiA9IHhidWZbMF07CiAKLQkJcmV0ID0gLUVJTlZBTDsKLQkJaWYgKFdBUk5fT04odGVtcGxhdGVbaV0ucHNpemUgPiBQQUdFX1NJWkUpKQotCQkJZ290byBvdXQ7Ci0KIAkJbWVtY3B5KGhhc2hfYnVmZiwgdGVtcGxhdGVbaV0ucGxhaW50ZXh0LCB0ZW1wbGF0ZVtpXS5wc2l6ZSk7CiAJCXNnX2luaXRfb25lKCZzZ1swXSwgaGFzaF9idWZmLCB0ZW1wbGF0ZVtpXS5wc2l6ZSk7CiAKQEAgLTIyNTIsNiArMjI0OCwxNSBAQAogCQkJfQogCQl9CiAJfSwgeworCQkuYWxnID0gInZtYWMoYWVzKSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfaGFzaCwKKwkJLnN1aXRlID0geworCQkJLmhhc2ggPSB7CisJCQkJLnZlY3MgPSBhZXNfdm1hYzEyOF90dl90ZW1wbGF0ZSwKKwkJCQkuY291bnQgPSBWTUFDX0FFU19URVNUX1ZFQ1RPUlMKKwkJCX0KKwkJfQorCX0sIHsKIAkJLmFsZyA9ICJ3cDI1NiIsCiAJCS50ZXN0ID0gYWxnX3Rlc3RfaGFzaCwKIAkJLnN1aXRlID0gewpAQCAtMjM0OCw2ICsyMzUzLDcgQEAKIGludCBhbGdfdGVzdChjb25zdCBjaGFyICpkcml2ZXIsIGNvbnN0IGNoYXIgKmFsZywgdTMyIHR5cGUsIHUzMiBtYXNrKQogewogCWludCBpOworCWludCBqOwogCWludCByYzsKIAogCWlmICgodHlwZSAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSA9PSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSKSB7CkBAIC0yMzY5LDE0ICsyMzc1LDIyIEBACiAJfQogCiAJaSA9IGFsZ19maW5kX3Rlc3QoYWxnKTsKLQlpZiAoaSA8IDApCisJaiA9IGFsZ19maW5kX3Rlc3QoZHJpdmVyKTsKKwlpZiAoaSA8IDAgJiYgaiA8IDApCiAJCWdvdG8gbm90ZXN0OwogCi0JaWYgKGZpcHNfZW5hYmxlZCAmJiAhYWxnX3Rlc3RfZGVzY3NbaV0uZmlwc19hbGxvd2VkKQorCWlmIChmaXBzX2VuYWJsZWQgJiYgKChpID49IDAgJiYgIWFsZ190ZXN0X2Rlc2NzW2ldLmZpcHNfYWxsb3dlZCkgfHwKKwkJCSAgICAgKGogPj0gMCAmJiAhYWxnX3Rlc3RfZGVzY3Nbal0uZmlwc19hbGxvd2VkKSkpCiAJCWdvdG8gbm9uX2ZpcHNfYWxnOwogCi0JcmMgPSBhbGdfdGVzdF9kZXNjc1tpXS50ZXN0KGFsZ190ZXN0X2Rlc2NzICsgaSwgZHJpdmVyLAotCQkJCSAgICAgIHR5cGUsIG1hc2spOworCXJjID0gMDsKKwlpZiAoaSA+PSAwKQorCQlyYyB8PSBhbGdfdGVzdF9kZXNjc1tpXS50ZXN0KGFsZ190ZXN0X2Rlc2NzICsgaSwgZHJpdmVyLAorCQkJCQkgICAgIHR5cGUsIG1hc2spOworCWlmIChqID49IDApCisJCXJjIHw9IGFsZ190ZXN0X2Rlc2NzW2pdLnRlc3QoYWxnX3Rlc3RfZGVzY3MgKyBqLCBkcml2ZXIsCisJCQkJCSAgICAgdHlwZSwgbWFzayk7CisKIHRlc3RfZG9uZToKIAlpZiAoZmlwc19lbmFibGVkICYmIHJjKQogCQlwYW5pYygiJXM6ICVzIGFsZyBzZWxmIHRlc3QgZmFpbGVkIGluIGZpcHMgbW9kZSFcbiIsIGRyaXZlciwgYWxnKTsKZGlmZiAtLWdpdCBhL2NyeXB0by90ZXN0bWdyLmggYi9jcnlwdG8vdGVzdG1nci5oCmluZGV4IDY5MzE2MjIuLjk5NjNiMTggMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZXN0bWdyLmgKKysrIGIvY3J5cHRvL3Rlc3RtZ3IuaApAQCAtMTY1NCw2ICsxNjU0LDIyIEBACiAJfQogfTsKIAorI2RlZmluZSBWTUFDX0FFU19URVNUX1ZFQ1RPUlMJMQorc3RhdGljIGNoYXIgdm1hY19zdHJpbmdbMTI4XSA9IHsnXHgwMScsICdceDAxJywgJ1x4MDEnLCAnXHgwMScsCisJCQkJJ1x4MDInLCAnXHgwMycsICdceDAyJywgJ1x4MDInLAorCQkJCSdceDAyJywgJ1x4MDQnLCAnXHgwMScsICdceDA3JywKKwkJCQknXHgwNCcsICdceDAxJywgJ1x4MDQnLCAnXHgwMycsfTsKK3N0YXRpYyBzdHJ1Y3QgaGFzaF90ZXN0dmVjIGFlc192bWFjMTI4X3R2X3RlbXBsYXRlW10gPSB7CisJeworCQkua2V5ICAgID0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IgorCQkJICAiXHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiLAorCQkucGxhaW50ZXh0ID0gdm1hY19zdHJpbmcsCisJCS5kaWdlc3QgPSAiXHhjYlx4ZDdceDhhXHhmZFx4YjdceDMzXHg3OVx4ZTciLAorCQkucHNpemUgID0gMTI4LAorCQkua3NpemUgID0gMTYsCisJfSwKK307CisKIC8qCiAgKiBTSEEzODQgSE1BQyB0ZXN0IHZlY3RvcnMgZnJvbSBSRkM0MjMxCiAgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by92bWFjLmMgYi9jcnlwdG8vdm1hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOTQ2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vdm1hYy5jCkBAIC0wLDAgKzEsNjc4IEBACisvKgorICogTW9kaWZpZWQgdG8gaW50ZXJmYWNlIHRvIHRoZSBMaW51eCBrZXJuZWwKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKKyAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBWTUFDIGFuZCBWSEFTSCBJbXBsZW1lbnRhdGlvbiBieSBUZWQgS3JvdmV0eiAodGRrQGFjbS5vcmcpIGFuZCBXZWkgRGFpLgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBoZXJieSBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKiBUaGUgYXV0aG9ycyBvZmZlcnMgbm8gd2FycmFudHkuIFVzZSBhdCB5b3VyIG93biByaXNrLgorICogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gdGhlIGF1dGhvcnMuCisgKiBMYXN0IG1vZGlmaWVkOiAxNyBBUFIgMDgsIDE3MDAgUERUCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3NjYXR0ZXJ3YWxrLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3ZtYWMuaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorCisvKgorICogQ29uc3RhbnRzIGFuZCBtYXNrcworICovCisjZGVmaW5lIFVJTlQ2NF9DKHgpIHgjI1VMTAorY29uc3QgdTY0IHA2NCAgID0gVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZWZmKTsgIC8qIDJeNjQgLSAyNTcgcHJpbWUgICovCitjb25zdCB1NjQgbTYyICAgPSBVSU5UNjRfQygweDNmZmZmZmZmZmZmZmZmZmYpOyAgLyogNjItYml0IG1hc2sgICAgICAgKi8KK2NvbnN0IHU2NCBtNjMgICA9IFVJTlQ2NF9DKDB4N2ZmZmZmZmZmZmZmZmZmZik7ICAvKiA2My1iaXQgbWFzayAgICAgICAqLworY29uc3QgdTY0IG02NCAgID0gVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKTsgIC8qIDY0LWJpdCBtYXNrICAgICAgICovCitjb25zdCB1NjQgbXBvbHkgPSBVSU5UNjRfQygweDFmZmZmZmZmMWZmZmZmZmYpOyAgLyogUG9seSBrZXkgbWFzayAgICAgKi8KKworI2lmZGVmIF9fTElUVExFX0VORElBTgorI2RlZmluZSBJTkRFWF9ISUdIIDEKKyNkZWZpbmUgSU5ERVhfTE9XIDAKKyNlbHNlCisjZGVmaW5lIElOREVYX0hJR0ggMAorI2RlZmluZSBJTkRFWF9MT1cgMQorI2VuZGlmCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIGFyZSB1c2VkIGluIHRoaXMgaW1wbGVtZW50YXRpb24uIFRoZXkgYXJlCisgKiB3cml0dGVuIHZpYSBtYWNyb3MgdG8gc2ltdWxhdGUgemVyby1vdmVyaGVhZCBjYWxsLWJ5LXJlZmVyZW5jZS4KKyAqCisgKiBNVUw2NDogNjR4NjQtPjEyOC1iaXQgbXVsdGlwbGljYXRpb24KKyAqIFBNVUw2NDogYXNzdW1lcyB0b3AgYml0cyBjbGVhcmVkIG9uIGlucHV0cworICogQUREMTI4OiAxMjh4MTI4LT4xMjgtYml0IGFkZGl0aW9uCisgKi8KKworI2RlZmluZSBBREQxMjgocmgsIHJsLCBpaCwgaWwpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJdTY0IF9pbCA9IChpbCk7CQkJCQkJXAorCQkocmwpICs9IChfaWwpOwkJCQkJCVwKKwkJaWYgKChybCkgPCAoX2lsKSkJCQkJCVwKKwkJCShyaCkrKzsJCQkJCQlcCisJCShyaCkgKz0gKGloKTsJCQkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBNVUwzMihpMSwgaTIpCSgodTY0KSh1MzIpKGkxKSoodTMyKShpMikpCisKKyNkZWZpbmUgUE1VTDY0KHJoLCBybCwgaTEsIGkyKQkvKiBBc3N1bWVzIG0gZG9lc24ndCBvdmVyZmxvdyAqLwlcCisJZG8gewkJCQkJCQkJXAorCQl1NjQgX2kxID0gKGkxKSwgX2kyID0gKGkyKTsJCQkJXAorCQl1NjQgbSA9IE1VTDMyKF9pMSwgX2kyPj4zMikgKyBNVUwzMihfaTE+PjMyLCBfaTIpOwlcCisJCXJoID0gTVVMMzIoX2kxPj4zMiwgX2kyPj4zMik7CQkJCVwKKwkJcmwgPSBNVUwzMihfaTEsIF9pMik7CQkJCQlcCisJCUFERDEyOChyaCwgcmwsIChtID4+IDMyKSwgKG0gPDwgMzIpKTsJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBNVUw2NChyaCwgcmwsIGkxLCBpMikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl1NjQgX2kxID0gKGkxKSwgX2kyID0gKGkyKTsJCQkJXAorCQl1NjQgbTEgPSBNVUwzMihfaTEsIF9pMj4+MzIpOwkJCQlcCisJCXU2NCBtMiA9IE1VTDMyKF9pMT4+MzIsIF9pMik7CQkJCVwKKwkJcmggPSBNVUwzMihfaTE+PjMyLCBfaTI+PjMyKTsJCQkJXAorCQlybCA9IE1VTDMyKF9pMSwgX2kyKTsJCQkJCVwKKwkJQUREMTI4KHJoLCBybCwgKG0xID4+IDMyKSwgKG0xIDw8IDMyKSk7CQkJXAorCQlBREQxMjgocmgsIHJsLCAobTIgPj4gMzIpLCAobTIgPDwgMzIpKTsJCQlcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIEZvciBoaWdoZXN0IHBlcmZvcm1hbmNlIHRoZSBMMSBOSCBhbmQgTDIgcG9seW5vbWlhbCBoYXNoZXMgc2hvdWxkIGJlCisgKiBjYXJlZnVsbHkgaW1wbGVtZW50ZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygb25lJ3MgdGFyZ2V0IGFyY2hpdGVjaHR1cmUuCisgKiBIZXJlIHRoZXNlIHR3byBoYXNoIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBtdWx0aXBsZSB0aW1lOyBvbmNlIGZvcgorICogNjQtYml0IGFyY2hpdGVjdHVyZXMsIG9uY2UgZm9yIDMyLWJpdCBTU0UyIGFyY2hpdGVjdHVyZXMsIGFuZCBvbmNlCisgKiBmb3IgdGhlIHJlc3QgKDMyLWJpdCkgYXJjaGl0ZWN0dXJlcy4KKyAqIEZvciBlYWNoLCBuaF8xNiAqbXVzdCogYmUgZGVmaW5lZCAod29ya3Mgb24gbXVsdGlwbGVzIG9mIDE2IGJ5dGVzKS4KKyAqIE9wdGlvbmFsbHksIG5oX3ZtYWNfbmhieXRlcyBjYW4gYmUgZGVmaW5lZCAoZm9yIG11bHRpcGxlcyBvZgorICogVk1BQ19OSEJZVEVTKSwgYW5kIG5oXzE2XzIgYW5kIG5oX3ZtYWNfbmhieXRlc18yICh2ZXJzaW9ucyB0aGF0IGRvIHR3bworICogTkggY29tcHV0YXRpb25zIGF0IG9uY2UpLgorICovCisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKworI2RlZmluZSBuaF8xNihtcCwga3AsIG53LCByaCwgcmwpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpbnQgaTsgdTY0IHRoLCB0bDsJCQkJCVwKKwkJcmggPSBybCA9IDA7CQkJCQkJXAorCQlmb3IgKGkgPSAwOyBpIDwgbnc7IGkgKz0gMikgewkJCQlcCisJCQlNVUw2NCh0aCwgdGwsIGxlNjRfdG9fY3B1cCgobXApK2kpKyhrcClbaV0sCVwKKwkJCQlsZTY0X3RvX2NwdXAoKG1wKStpKzEpKyhrcClbaSsxXSk7CVwKKwkJCUFERDEyOChyaCwgcmwsIHRoLCB0bCk7CQkJCVwKKwkJfQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBuaF8xNl8yKG1wLCBrcCwgbncsIHJoLCBybCwgcmgxLCBybDEpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWludCBpOyB1NjQgdGgsIHRsOwkJCQkJXAorCQlyaDEgPSBybDEgPSByaCA9IHJsID0gMDsJCQkJXAorCQlmb3IgKGkgPSAwOyBpIDwgbnc7IGkgKz0gMikgewkJCQlcCisJCQlNVUw2NCh0aCwgdGwsIGxlNjRfdG9fY3B1cCgobXApK2kpKyhrcClbaV0sCVwKKwkJCQlsZTY0X3RvX2NwdXAoKG1wKStpKzEpKyhrcClbaSsxXSk7CVwKKwkJCUFERDEyOChyaCwgcmwsIHRoLCB0bCk7CQkJCVwKKwkJCU1VTDY0KHRoLCB0bCwgbGU2NF90b19jcHVwKChtcCkraSkrKGtwKVtpKzJdLAlcCisJCQkJbGU2NF90b19jcHVwKChtcCkraSsxKSsoa3ApW2krM10pOwlcCisJCQlBREQxMjgocmgxLCBybDEsIHRoLCB0bCk7CQkJXAorCQl9CQkJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjaWYgKFZNQUNfTkhCWVRFUyA+PSA2NCkgLyogVGhlc2UgdmVyc2lvbnMgZG8gNjQtYnl0ZXMgb2YgbWVzc2FnZSBhdCBhIHRpbWUgKi8KKyNkZWZpbmUgbmhfdm1hY19uaGJ5dGVzKG1wLCBrcCwgbncsIHJoLCBybCkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaW50IGk7IHU2NCB0aCwgdGw7CQkJCQlcCisJCXJoID0gcmwgPSAwOwkJCQkJCVwKKwkJZm9yIChpID0gMDsgaSA8IG53OyBpICs9IDgpIHsJCQkJXAorCQkJTVVMNjQodGgsIHRsLCBsZTY0X3RvX2NwdXAoKG1wKStpKSsoa3ApW2ldLAlcCisJCQkJbGU2NF90b19jcHVwKChtcCkraSsxKSsoa3ApW2krMV0pOwlcCisJCQlBREQxMjgocmgsIHJsLCB0aCwgdGwpOwkJCQlcCisJCQlNVUw2NCh0aCwgdGwsIGxlNjRfdG9fY3B1cCgobXApK2krMikrKGtwKVtpKzJdLAlcCisJCQkJbGU2NF90b19jcHVwKChtcCkraSszKSsoa3ApW2krM10pOwlcCisJCQlBREQxMjgocmgsIHJsLCB0aCwgdGwpOwkJCQlcCisJCQlNVUw2NCh0aCwgdGwsIGxlNjRfdG9fY3B1cCgobXApK2krNCkrKGtwKVtpKzRdLAlcCisJCQkJbGU2NF90b19jcHVwKChtcCkraSs1KSsoa3ApW2krNV0pOwlcCisJCQlBREQxMjgocmgsIHJsLCB0aCwgdGwpOwkJCQlcCisJCQlNVUw2NCh0aCwgdGwsIGxlNjRfdG9fY3B1cCgobXApK2krNikrKGtwKVtpKzZdLAlcCisJCQkJbGU2NF90b19jcHVwKChtcCkraSs3KSsoa3ApW2krN10pOwlcCisJCQlBREQxMjgocmgsIHJsLCB0aCwgdGwpOwkJCQlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgbmhfdm1hY19uaGJ5dGVzXzIobXAsIGtwLCBudywgcmgsIHJsLCByaDEsIHJsMSkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpbnQgaTsgdTY0IHRoLCB0bDsJCQkJCVwKKwkJcmgxID0gcmwxID0gcmggPSBybCA9IDA7CQkJCVwKKwkJZm9yIChpID0gMDsgaSA8IG53OyBpICs9IDgpIHsJCQkJXAorCQkJTVVMNjQodGgsIHRsLCBsZTY0X3RvX2NwdXAoKG1wKStpKSsoa3ApW2ldLAlcCisJCQkJbGU2NF90b19jcHVwKChtcCkraSsxKSsoa3ApW2krMV0pOwlcCisJCQlBREQxMjgocmgsIHJsLCB0aCwgdGwpOwkJCQlcCisJCQlNVUw2NCh0aCwgdGwsIGxlNjRfdG9fY3B1cCgobXApK2kpKyhrcClbaSsyXSwJXAorCQkJCWxlNjRfdG9fY3B1cCgobXApK2krMSkrKGtwKVtpKzNdKTsJXAorCQkJQUREMTI4KHJoMSwgcmwxLCB0aCwgdGwpOwkJCVwKKwkJCU1VTDY0KHRoLCB0bCwgbGU2NF90b19jcHVwKChtcCkraSsyKSsoa3ApW2krMl0sCVwKKwkJCQlsZTY0X3RvX2NwdXAoKG1wKStpKzMpKyhrcClbaSszXSk7CVwKKwkJCUFERDEyOChyaCwgcmwsIHRoLCB0bCk7CQkJCVwKKwkJCU1VTDY0KHRoLCB0bCwgbGU2NF90b19jcHVwKChtcCkraSsyKSsoa3ApW2krNF0sCVwKKwkJCQlsZTY0X3RvX2NwdXAoKG1wKStpKzMpKyhrcClbaSs1XSk7CVwKKwkJCUFERDEyOChyaDEsIHJsMSwgdGgsIHRsKTsJCQlcCisJCQlNVUw2NCh0aCwgdGwsIGxlNjRfdG9fY3B1cCgobXApK2krNCkrKGtwKVtpKzRdLAlcCisJCQkJbGU2NF90b19jcHVwKChtcCkraSs1KSsoa3ApW2krNV0pOwlcCisJCQlBREQxMjgocmgsIHJsLCB0aCwgdGwpOwkJCQlcCisJCQlNVUw2NCh0aCwgdGwsIGxlNjRfdG9fY3B1cCgobXApK2krNCkrKGtwKVtpKzZdLAlcCisJCQkJbGU2NF90b19jcHVwKChtcCkraSs1KSsoa3ApW2krN10pOwlcCisJCQlBREQxMjgocmgxLCBybDEsIHRoLCB0bCk7CQkJXAorCQkJTVVMNjQodGgsIHRsLCBsZTY0X3RvX2NwdXAoKG1wKStpKzYpKyhrcClbaSs2XSwJXAorCQkJCWxlNjRfdG9fY3B1cCgobXApK2krNykrKGtwKVtpKzddKTsJXAorCQkJQUREMTI4KHJoLCBybCwgdGgsIHRsKTsJCQkJXAorCQkJTVVMNjQodGgsIHRsLCBsZTY0X3RvX2NwdXAoKG1wKStpKzYpKyhrcClbaSs4XSwJXAorCQkJCWxlNjRfdG9fY3B1cCgobXApK2krNykrKGtwKVtpKzldKTsJXAorCQkJQUREMTI4KHJoMSwgcmwxLCB0aCwgdGwpOwkJCVwKKwkJfQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIHBvbHlfc3RlcChhaCwgYWwsIGtoLCBrbCwgbWgsIG1sKQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl1NjQgdDFoLCB0MWwsIHQyaCwgdDJsLCB0M2gsIHQzbCwgeiA9IDA7CQlcCisJCS8qIGNvbXB1dGUgYWIqY2QsIHB1dCBiZCBpbnRvIHJlc3VsdCByZWdpc3RlcnMgKi8JXAorCQlQTVVMNjQodDNoLCB0M2wsIGFsLCBraCk7CQkJCVwKKwkJUE1VTDY0KHQyaCwgdDJsLCBhaCwga2wpOwkJCQlcCisJCVBNVUw2NCh0MWgsIHQxbCwgYWgsIDIqa2gpOwkJCQlcCisJCVBNVUw2NChhaCwgYWwsIGFsLCBrbCk7CQkJCQlcCisJCS8qIGFkZCAyICogYWMgdG8gcmVzdWx0ICovCQkJCVwKKwkJQUREMTI4KGFoLCBhbCwgdDFoLCB0MWwpOwkJCQlcCisJCS8qIGFkZCB0b2dldGhlciBhZCArIGJjICovCQkJCVwKKwkJQUREMTI4KHQyaCwgdDJsLCB0M2gsIHQzbCk7CQkJCVwKKwkJLyogbm93IChhaCxhbCksICh0MmwsMip0MmgpIG5lZWQgc3VtbWluZyAqLwkJXAorCQkvKiBmaXJzdCBhZGQgdGhlIGhpZ2ggcmVnaXN0ZXJzLCBjYXJyeWluZyBpbnRvIHQyaCAqLwlcCisJCUFERDEyOCh0MmgsIGFoLCB6LCB0MmwpOwkJCQlcCisJCS8qIGRvdWJsZSB0MmggYW5kIGFkZCB0b3AgYml0IG9mIGFoICovCQkJXAorCQl0MmggPSAyICogdDJoICsgKGFoID4+IDYzKTsJCQkJXAorCQlhaCAmPSBtNjM7CQkJCQkJXAorCQkvKiBub3cgYWRkIHRoZSBsb3cgcmVnaXN0ZXJzICovCQkJCVwKKwkJQUREMTI4KGFoLCBhbCwgbWgsIG1sKTsJCQkJCVwKKwkJQUREMTI4KGFoLCBhbCwgeiwgdDJoKTsJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZWxzZSAvKiAhIENPTkZJR182NEJJVCAqLworCisjaWZuZGVmIG5oXzE2CisjZGVmaW5lIG5oXzE2KG1wLCBrcCwgbncsIHJoLCBybCkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXU2NCB0MSwgdDIsIG0xLCBtMiwgdDsJCQkJCVwKKwkJaW50IGk7CQkJCQkJCVwKKwkJcmggPSBybCA9IHQgPSAwOwkJCQkJXAorCQlmb3IgKGkgPSAwOyBpIDwgbnc7IGkgKz0gMikgIHsJCQkJXAorCQkJdDEgPSBsZTY0X3RvX2NwdXAobXAraSkgKyBrcFtpXTsJCVwKKwkJCXQyID0gbGU2NF90b19jcHVwKG1wK2krMSkgKyBrcFtpKzFdOwkJXAorCQkJbTIgPSBNVUwzMih0MSA+PiAzMiwgdDIpOwkJCVwKKwkJCW0xID0gTVVMMzIodDEsIHQyID4+IDMyKTsJCQlcCisJCQlBREQxMjgocmgsIHJsLCBNVUwzMih0MSA+PiAzMiwgdDIgPj4gMzIpLAlcCisJCQkJTVVMMzIodDEsIHQyKSk7CQkJCVwKKwkJCXJoICs9ICh1NjQpKHUzMikobTEgPj4gMzIpCQkJXAorCQkJCSsgKHUzMikobTIgPj4gMzIpOwkJCVwKKwkJCXQgKz0gKHU2NCkodTMyKW0xICsgKHUzMiltMjsJCQlcCisJCX0JCQkJCQkJXAorCQlBREQxMjgocmgsIHJsLCAodCA+PiAzMiksICh0IDw8IDMyKSk7CQkJXAorCX0gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIHZvaWQgcG9seV9zdGVwX2Z1bmModTY0ICphaGksIHU2NCAqYWxvLAorCQkJY29uc3QgdTY0ICpraCwgY29uc3QgdTY0ICprbCwKKwkJCWNvbnN0IHU2NCAqbWgsIGNvbnN0IHU2NCAqbWwpCit7CisjZGVmaW5lIGEwICgqKCgodTMyICopYWxvKStJTkRFWF9MT1cpKQorI2RlZmluZSBhMSAoKigoKHUzMiAqKWFsbykrSU5ERVhfSElHSCkpCisjZGVmaW5lIGEyICgqKCgodTMyICopYWhpKStJTkRFWF9MT1cpKQorI2RlZmluZSBhMyAoKigoKHUzMiAqKWFoaSkrSU5ERVhfSElHSCkpCisjZGVmaW5lIGswICgqKCgodTMyICopa2wpK0lOREVYX0xPVykpCisjZGVmaW5lIGsxICgqKCgodTMyICopa2wpK0lOREVYX0hJR0gpKQorI2RlZmluZSBrMiAoKigoKHUzMiAqKWtoKStJTkRFWF9MT1cpKQorI2RlZmluZSBrMyAoKigoKHUzMiAqKWtoKStJTkRFWF9ISUdIKSkKKworCXU2NCBwLCBxLCB0OworCXUzMiB0MjsKKworCXAgPSBNVUwzMihhMywgazMpOworCXAgKz0gcDsKKwlwICs9ICoodTY0ICopbWg7CisJcCArPSBNVUwzMihhMCwgazIpOworCXAgKz0gTVVMMzIoYTEsIGsxKTsKKwlwICs9IE1VTDMyKGEyLCBrMCk7CisJdCA9ICh1MzIpKHApOworCXAgPj49IDMyOworCXAgKz0gTVVMMzIoYTAsIGszKTsKKwlwICs9IE1VTDMyKGExLCBrMik7CisJcCArPSBNVUwzMihhMiwgazEpOworCXAgKz0gTVVMMzIoYTMsIGswKTsKKwl0IHw9ICgodTY0KSgodTMyKXAgJiAweDdmZmZmZmZmKSkgPDwgMzI7CisJcCA+Pj0gMzE7CisJcCArPSAodTY0KSgoKHUzMiAqKW1sKVtJTkRFWF9MT1ddKTsKKwlwICs9IE1VTDMyKGEwLCBrMCk7CisJcSA9ICBNVUwzMihhMSwgazMpOworCXEgKz0gTVVMMzIoYTIsIGsyKTsKKwlxICs9IE1VTDMyKGEzLCBrMSk7CisJcSArPSBxOworCXAgKz0gcTsKKwl0MiA9ICh1MzIpKHApOworCXAgPj49IDMyOworCXAgKz0gKHU2NCkoKCh1MzIgKiltbClbSU5ERVhfSElHSF0pOworCXAgKz0gTVVMMzIoYTAsIGsxKTsKKwlwICs9IE1VTDMyKGExLCBrMCk7CisJcSA9ICBNVUwzMihhMiwgazMpOworCXEgKz0gTVVMMzIoYTMsIGsyKTsKKwlxICs9IHE7CisJcCArPSBxOworCSoodTY0ICopKGFsbykgPSAocCA8PCAzMikgfCB0MjsKKwlwID4+PSAzMjsKKwkqKHU2NCAqKShhaGkpID0gcCArIHQ7CisKKyN1bmRlZiBhMAorI3VuZGVmIGExCisjdW5kZWYgYTIKKyN1bmRlZiBhMworI3VuZGVmIGswCisjdW5kZWYgazEKKyN1bmRlZiBrMgorI3VuZGVmIGszCit9CisKKyNkZWZpbmUgcG9seV9zdGVwKGFoLCBhbCwga2gsIGtsLCBtaCwgbWwpCQkJCVwKKwlwb2x5X3N0ZXBfZnVuYygmKGFoKSwgJihhbCksICYoa2gpLCAmKGtsKSwgJihtaCksICYobWwpKQorCisjZW5kaWYgIC8qIGVuZCBvZiBzcGVjaWFsaXplZCBOSCBhbmQgcG9seSBkZWZpbml0aW9ucyAqLworCisvKiBBdCBsZWFzdCBuaF8xNiBpcyBkZWZpbmVkLiBEZWZpbmVkIG90aGVycyBhcyBuZWVkZWQgaGVyZSAqLworI2lmbmRlZiBuaF8xNl8yCisjZGVmaW5lIG5oXzE2XzIobXAsIGtwLCBudywgcmgsIHJsLCByaDIsIHJsMikJCQkJXAorCWRvIHsgCQkJCQkJCQlcCisJCW5oXzE2KG1wLCBrcCwgbncsIHJoLCBybCk7CQkJCVwKKwkJbmhfMTYobXAsICgoa3ApKzIpLCBudywgcmgyLCBybDIpOwkJCVwKKwl9IHdoaWxlICgwKQorI2VuZGlmCisjaWZuZGVmIG5oX3ZtYWNfbmhieXRlcworI2RlZmluZSBuaF92bWFjX25oYnl0ZXMobXAsIGtwLCBudywgcmgsIHJsKQkJCQlcCisJbmhfMTYobXAsIGtwLCBudywgcmgsIHJsKQorI2VuZGlmCisjaWZuZGVmIG5oX3ZtYWNfbmhieXRlc18yCisjZGVmaW5lIG5oX3ZtYWNfbmhieXRlc18yKG1wLCBrcCwgbncsIHJoLCBybCwgcmgyLCBybDIpCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJbmhfdm1hY19uaGJ5dGVzKG1wLCBrcCwgbncsIHJoLCBybCk7CQkJXAorCQluaF92bWFjX25oYnl0ZXMobXAsICgoa3ApKzIpLCBudywgcmgyLCBybDIpOwkJXAorCX0gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIHZvaWQgdmhhc2hfYWJvcnQoc3RydWN0IHZtYWNfY3R4ICpjdHgpCit7CisJY3R4LT5wb2x5dG1wWzBdID0gY3R4LT5wb2x5a2V5WzBdIDsKKwljdHgtPnBvbHl0bXBbMV0gPSBjdHgtPnBvbHlrZXlbMV0gOworCWN0eC0+Zmlyc3RfYmxvY2tfcHJvY2Vzc2VkID0gMDsKK30KKworc3RhdGljIHU2NCBsM2hhc2godTY0IHAxLCB1NjQgcDIsCisJCQl1NjQgazEsIHU2NCBrMiwgdTY0IGxlbikKK3sKKwl1NjQgcmgsIHJsLCB0LCB6ID0gMDsKKworCS8qIGZ1bGx5IHJlZHVjZSAocDEscDIpKyhsZW4sMCkgbW9kIHAxMjcgKi8KKwl0ID0gcDEgPj4gNjM7CisJcDEgJj0gbTYzOworCUFERDEyOChwMSwgcDIsIGxlbiwgdCk7CisJLyogQXQgdGhpcyBwb2ludCwgKHAxLHAyKSBpcyBhdCBtb3N0IDJeMTI3KyhsZW48PDY0KSAqLworCXQgPSAocDEgPiBtNjMpICsgKChwMSA9PSBtNjMpICYmIChwMiA9PSBtNjQpKTsKKwlBREQxMjgocDEsIHAyLCB6LCB0KTsKKwlwMSAmPSBtNjM7CisKKwkvKiBjb21wdXRlIChwMSxwMikvKDJeNjQtMl4zMikgYW5kIChwMSxwMiklKDJeNjQtMl4zMikgKi8KKwl0ID0gcDEgKyAocDIgPj4gMzIpOworCXQgKz0gKHQgPj4gMzIpOworCXQgKz0gKHUzMil0ID4gMHhmZmZmZmZmZXU7CisJcDEgKz0gKHQgPj4gMzIpOworCXAyICs9IChwMSA8PCAzMik7CisKKwkvKiBjb21wdXRlIChwMStrMSklcDY0IGFuZCAocDIrazIpJXA2NCAqLworCXAxICs9IGsxOworCXAxICs9ICgwIC0gKHAxIDwgazEpKSAmIDI1NzsKKwlwMiArPSBrMjsKKwlwMiArPSAoMCAtIChwMiA8IGsyKSkgJiAyNTc7CisKKwkvKiBjb21wdXRlIChwMStrMSkqKHAyK2syKSVwNjQgKi8KKwlNVUw2NChyaCwgcmwsIHAxLCBwMik7CisJdCA9IHJoID4+IDU2OworCUFERDEyOCh0LCBybCwgeiwgcmgpOworCXJoIDw8PSA4OworCUFERDEyOCh0LCBybCwgeiwgcmgpOworCXQgKz0gdCA8PCA4OworCXJsICs9IHQ7CisJcmwgKz0gKDAgLSAocmwgPCB0KSkgJiAyNTc7CisJcmwgKz0gKDAgLSAocmwgPiBwNjQtMSkpICYgMjU3OworCXJldHVybiBybDsKK30KKworc3RhdGljIHZvaWQgdmhhc2hfdXBkYXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm0sCisJCQl1bnNpZ25lZCBpbnQgbWJ5dGVzLCAvKiBQb3MgbXVsdGlwbGUgb2YgVk1BQ19OSEJZVEVTICovCisJCQlzdHJ1Y3Qgdm1hY19jdHggKmN0eCkKK3sKKwl1NjQgcmgsIHJsLCAqbXB0cjsKKwljb25zdCB1NjQgKmtwdHIgPSAodTY0ICopY3R4LT5uaGtleTsKKwlpbnQgaTsKKwl1NjQgY2gsIGNsOworCXU2NCBwa2ggPSBjdHgtPnBvbHlrZXlbMF07CisJdTY0IHBrbCA9IGN0eC0+cG9seWtleVsxXTsKKworCW1wdHIgPSAodTY0ICopbTsKKwlpID0gbWJ5dGVzIC8gVk1BQ19OSEJZVEVTOyAgLyogTXVzdCBiZSBub24temVybyAqLworCisJY2ggPSBjdHgtPnBvbHl0bXBbMF07CisJY2wgPSBjdHgtPnBvbHl0bXBbMV07CisKKwlpZiAoIWN0eC0+Zmlyc3RfYmxvY2tfcHJvY2Vzc2VkKSB7CisJCWN0eC0+Zmlyc3RfYmxvY2tfcHJvY2Vzc2VkID0gMTsKKwkJbmhfdm1hY19uaGJ5dGVzKG1wdHIsIGtwdHIsIFZNQUNfTkhCWVRFUy84LCByaCwgcmwpOworCQlyaCAmPSBtNjI7CisJCUFERDEyOChjaCwgY2wsIHJoLCBybCk7CisJCW1wdHIgKz0gKFZNQUNfTkhCWVRFUy9zaXplb2YodTY0KSk7CisJCWktLTsKKwl9CisKKwl3aGlsZSAoaS0tKSB7CisJCW5oX3ZtYWNfbmhieXRlcyhtcHRyLCBrcHRyLCBWTUFDX05IQllURVMvOCwgcmgsIHJsKTsKKwkJcmggJj0gbTYyOworCQlwb2x5X3N0ZXAoY2gsIGNsLCBwa2gsIHBrbCwgcmgsIHJsKTsKKwkJbXB0ciArPSAoVk1BQ19OSEJZVEVTL3NpemVvZih1NjQpKTsKKwl9CisKKwljdHgtPnBvbHl0bXBbMF0gPSBjaDsKKwljdHgtPnBvbHl0bXBbMV0gPSBjbDsKK30KKworc3RhdGljIHU2NCB2aGFzaCh1bnNpZ25lZCBjaGFyIG1bXSwgdW5zaWduZWQgaW50IG1ieXRlcywKKwkJCXU2NCAqdGFnbCwgc3RydWN0IHZtYWNfY3R4ICpjdHgpCit7CisJdTY0IHJoLCBybCwgKm1wdHI7CisJY29uc3QgdTY0ICprcHRyID0gKHU2NCAqKWN0eC0+bmhrZXk7CisJaW50IGksIHJlbWFpbmluZzsKKwl1NjQgY2gsIGNsOworCXU2NCBwa2ggPSBjdHgtPnBvbHlrZXlbMF07CisJdTY0IHBrbCA9IGN0eC0+cG9seWtleVsxXTsKKworCW1wdHIgPSAodTY0ICopbTsKKwlpID0gbWJ5dGVzIC8gVk1BQ19OSEJZVEVTOworCXJlbWFpbmluZyA9IG1ieXRlcyAlIFZNQUNfTkhCWVRFUzsKKworCWlmIChjdHgtPmZpcnN0X2Jsb2NrX3Byb2Nlc3NlZCkgeworCQljaCA9IGN0eC0+cG9seXRtcFswXTsKKwkJY2wgPSBjdHgtPnBvbHl0bXBbMV07CisJfSBlbHNlIGlmIChpKSB7CisJCW5oX3ZtYWNfbmhieXRlcyhtcHRyLCBrcHRyLCBWTUFDX05IQllURVMvOCwgY2gsIGNsKTsKKwkJY2ggJj0gbTYyOworCQlBREQxMjgoY2gsIGNsLCBwa2gsIHBrbCk7CisJCW1wdHIgKz0gKFZNQUNfTkhCWVRFUy9zaXplb2YodTY0KSk7CisJCWktLTsKKwl9IGVsc2UgaWYgKHJlbWFpbmluZykgeworCQluaF8xNihtcHRyLCBrcHRyLCAyKigocmVtYWluaW5nKzE1KS8xNiksIGNoLCBjbCk7CisJCWNoICY9IG02MjsKKwkJQUREMTI4KGNoLCBjbCwgcGtoLCBwa2wpOworCQltcHRyICs9IChWTUFDX05IQllURVMvc2l6ZW9mKHU2NCkpOworCQlnb3RvIGRvX2wzOworCX0gZWxzZSB7LyogRW1wdHkgU3RyaW5nICovCisJCWNoID0gcGtoOyBjbCA9IHBrbDsKKwkJZ290byBkb19sMzsKKwl9CisKKwl3aGlsZSAoaS0tKSB7CisJCW5oX3ZtYWNfbmhieXRlcyhtcHRyLCBrcHRyLCBWTUFDX05IQllURVMvOCwgcmgsIHJsKTsKKwkJcmggJj0gbTYyOworCQlwb2x5X3N0ZXAoY2gsIGNsLCBwa2gsIHBrbCwgcmgsIHJsKTsKKwkJbXB0ciArPSAoVk1BQ19OSEJZVEVTL3NpemVvZih1NjQpKTsKKwl9CisJaWYgKHJlbWFpbmluZykgeworCQluaF8xNihtcHRyLCBrcHRyLCAyKigocmVtYWluaW5nKzE1KS8xNiksIHJoLCBybCk7CisJCXJoICY9IG02MjsKKwkJcG9seV9zdGVwKGNoLCBjbCwgcGtoLCBwa2wsIHJoLCBybCk7CisJfQorCitkb19sMzoKKwl2aGFzaF9hYm9ydChjdHgpOworCXJlbWFpbmluZyAqPSA4OworCXJldHVybiBsM2hhc2goY2gsIGNsLCBjdHgtPmwza2V5WzBdLCBjdHgtPmwza2V5WzFdLCByZW1haW5pbmcpOworfQorCitzdGF0aWMgdTY0IHZtYWModW5zaWduZWQgY2hhciBtW10sIHVuc2lnbmVkIGludCBtYnl0ZXMsCisJCQl1bnNpZ25lZCBjaGFyIG5bMTZdLCB1NjQgKnRhZ2wsCisJCQlzdHJ1Y3Qgdm1hY19jdHhfdCAqY3R4KQoreworCXU2NCAqaW5fbiwgKm91dF9wOworCXU2NCBwLCBoOworCWludCBpOworCisJaW5fbiA9IGN0eC0+X192bWFjX2N0eC5jYWNoZWRfbm9uY2U7CisJb3V0X3AgPSBjdHgtPl9fdm1hY19jdHguY2FjaGVkX2FlczsKKworCWkgPSBuWzE1XSAmIDE7CisJaWYgKCgqKHU2NCAqKShuKzgpICE9IGluX25bMV0pIHx8ICgqKHU2NCAqKShuKSAhPSBpbl9uWzBdKSkgeworCQlpbl9uWzBdID0gKih1NjQgKikobik7CisJCWluX25bMV0gPSAqKHU2NCAqKShuKzgpOworCQkoKHVuc2lnbmVkIGNoYXIgKilpbl9uKVsxNV0gJj0gMHhGRTsKKwkJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZShjdHgtPmNoaWxkLAorCQkJKHVuc2lnbmVkIGNoYXIgKilvdXRfcCwgKHVuc2lnbmVkIGNoYXIgKilpbl9uKTsKKworCQkoKHVuc2lnbmVkIGNoYXIgKilpbl9uKVsxNV0gfD0gKHVuc2lnbmVkIGNoYXIpKDEtaSk7CisJfQorCXAgPSBiZTY0X3RvX2NwdXAob3V0X3AgKyBpKTsKKwloID0gdmhhc2gobSwgbWJ5dGVzLCAodTY0ICopMCwgJmN0eC0+X192bWFjX2N0eCk7CisJcmV0dXJuIHAgKyBoOworfQorCitzdGF0aWMgaW50IHZtYWNfc2V0X2tleSh1bnNpZ25lZCBjaGFyIHVzZXJfa2V5W10sIHN0cnVjdCB2bWFjX2N0eF90ICpjdHgpCit7CisJdTY0IGluWzJdID0gezB9LCBvdXRbMl07CisJdW5zaWduZWQgaTsKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IGNyeXB0b19jaXBoZXJfc2V0a2V5KGN0eC0+Y2hpbGQsIHVzZXJfa2V5LCBWTUFDX0tFWV9MRU4pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBGaWxsIG5oIGtleSAqLworCSgodW5zaWduZWQgY2hhciAqKWluKVswXSA9IDB4ODA7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihjdHgtPl9fdm1hY19jdHgubmhrZXkpLzg7IGkgKz0gMikgeworCQljcnlwdG9fY2lwaGVyX2VuY3J5cHRfb25lKGN0eC0+Y2hpbGQsCisJCQkodW5zaWduZWQgY2hhciAqKW91dCwgKHVuc2lnbmVkIGNoYXIgKilpbik7CisJCWN0eC0+X192bWFjX2N0eC5uaGtleVtpXSA9IGJlNjRfdG9fY3B1cChvdXQpOworCQljdHgtPl9fdm1hY19jdHgubmhrZXlbaSsxXSA9IGJlNjRfdG9fY3B1cChvdXQrMSk7CisJCSgodW5zaWduZWQgY2hhciAqKWluKVsxNV0gKz0gMTsKKwl9CisKKwkvKiBGaWxsIHBvbHkga2V5ICovCisJKCh1bnNpZ25lZCBjaGFyICopaW4pWzBdID0gMHhDMDsKKwlpblsxXSA9IDA7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihjdHgtPl9fdm1hY19jdHgucG9seWtleSkvODsgaSArPSAyKSB7CisJCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUoY3R4LT5jaGlsZCwKKwkJCSh1bnNpZ25lZCBjaGFyICopb3V0LCAodW5zaWduZWQgY2hhciAqKWluKTsKKwkJY3R4LT5fX3ZtYWNfY3R4LnBvbHl0bXBbaV0gPQorCQkJY3R4LT5fX3ZtYWNfY3R4LnBvbHlrZXlbaV0gPQorCQkJCWJlNjRfdG9fY3B1cChvdXQpICYgbXBvbHk7CisJCWN0eC0+X192bWFjX2N0eC5wb2x5dG1wW2krMV0gPQorCQkJY3R4LT5fX3ZtYWNfY3R4LnBvbHlrZXlbaSsxXSA9CisJCQkJYmU2NF90b19jcHVwKG91dCsxKSAmIG1wb2x5OworCQkoKHVuc2lnbmVkIGNoYXIgKilpbilbMTVdICs9IDE7CisJfQorCisJLyogRmlsbCBpcCBrZXkgKi8KKwkoKHVuc2lnbmVkIGNoYXIgKilpbilbMF0gPSAweEUwOworCWluWzFdID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGN0eC0+X192bWFjX2N0eC5sM2tleSkvODsgaSArPSAyKSB7CisJCWRvIHsKKwkJCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUoY3R4LT5jaGlsZCwKKwkJCQkodW5zaWduZWQgY2hhciAqKW91dCwgKHVuc2lnbmVkIGNoYXIgKilpbik7CisJCQljdHgtPl9fdm1hY19jdHgubDNrZXlbaV0gPSBiZTY0X3RvX2NwdXAob3V0KTsKKwkJCWN0eC0+X192bWFjX2N0eC5sM2tleVtpKzFdID0gYmU2NF90b19jcHVwKG91dCsxKTsKKwkJCSgodW5zaWduZWQgY2hhciAqKWluKVsxNV0gKz0gMTsKKwkJfSB3aGlsZSAoY3R4LT5fX3ZtYWNfY3R4Lmwza2V5W2ldID49IHA2NAorCQkJfHwgY3R4LT5fX3ZtYWNfY3R4Lmwza2V5W2krMV0gPj0gcDY0KTsKKwl9CisKKwkvKiBJbnZhbGlkYXRlIG5vbmNlL2FlcyBjYWNoZSBhbmQgcmVzZXQgb3RoZXIgZWxlbWVudHMgKi8KKwljdHgtPl9fdm1hY19jdHguY2FjaGVkX25vbmNlWzBdID0gKHU2NCktMTsgLyogRW5zdXJlIGlsbGVnYWwgbm9uY2UgKi8KKwljdHgtPl9fdm1hY19jdHguY2FjaGVkX25vbmNlWzFdID0gKHU2NCkwOyAgLyogRW5zdXJlIGlsbGVnYWwgbm9uY2UgKi8KKwljdHgtPl9fdm1hY19jdHguZmlyc3RfYmxvY2tfcHJvY2Vzc2VkID0gMDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdm1hY19zZXRrZXkoc3RydWN0IGNyeXB0b19zaGFzaCAqcGFyZW50LAorCQljb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCB2bWFjX2N0eF90ICpjdHggPSBjcnlwdG9fc2hhc2hfY3R4KHBhcmVudCk7CisKKwlpZiAoa2V5bGVuICE9IFZNQUNfS0VZX0xFTikgeworCQljcnlwdG9fc2hhc2hfc2V0X2ZsYWdzKHBhcmVudCwgQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gdm1hY19zZXRfa2V5KCh1OCAqKWtleSwgY3R4KTsKK30KKworc3RhdGljIGludCB2bWFjX2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKnBkZXNjKQoreworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKnBhcmVudCA9IHBkZXNjLT50Zm07CisJc3RydWN0IHZtYWNfY3R4X3QgKmN0eCA9IGNyeXB0b19zaGFzaF9jdHgocGFyZW50KTsKKworCW1lbXNldCgmY3R4LT5fX3ZtYWNfY3R4LCAwLCBzaXplb2Yoc3RydWN0IHZtYWNfY3R4KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdm1hY191cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKnBkZXNjLCBjb25zdCB1OCAqcCwKKwkJdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICpwYXJlbnQgPSBwZGVzYy0+dGZtOworCXN0cnVjdCB2bWFjX2N0eF90ICpjdHggPSBjcnlwdG9fc2hhc2hfY3R4KHBhcmVudCk7CisKKwl2aGFzaF91cGRhdGUocCwgbGVuLCAmY3R4LT5fX3ZtYWNfY3R4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZtYWNfZmluYWwoc3RydWN0IHNoYXNoX2Rlc2MgKnBkZXNjLCB1OCAqb3V0KQoreworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKnBhcmVudCA9IHBkZXNjLT50Zm07CisJc3RydWN0IHZtYWNfY3R4X3QgKmN0eCA9IGNyeXB0b19zaGFzaF9jdHgocGFyZW50KTsKKwl2bWFjX3QgbWFjOworCXU4IG5vbmNlWzE2XSA9IHt9OworCisJbWFjID0gdm1hYyhOVUxMLCAwLCBub25jZSwgTlVMTCwgY3R4KTsKKwltZW1jcHkob3V0LCAmbWFjLCBzaXplb2Yodm1hY190KSk7CisJbWVtc2V0KCZtYWMsIDAsIHNpemVvZih2bWFjX3QpKTsKKwltZW1zZXQoJmN0eC0+X192bWFjX2N0eCwgMCwgc2l6ZW9mKHN0cnVjdCB2bWFjX2N0eCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZtYWNfaW5pdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqY2lwaGVyOworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QgPSAodm9pZCAqKXRmbS0+X19jcnRfYWxnOworCXN0cnVjdCBjcnlwdG9fc3Bhd24gKnNwYXduID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwlzdHJ1Y3Qgdm1hY19jdHhfdCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWNpcGhlciA9IGNyeXB0b19zcGF3bl9jaXBoZXIoc3Bhd24pOworCWlmIChJU19FUlIoY2lwaGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2lwaGVyKTsKKworCWN0eC0+Y2hpbGQgPSBjaXBoZXI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZtYWNfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3Qgdm1hY19jdHhfdCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwljcnlwdG9fZnJlZV9jaXBoZXIoY3R4LT5jaGlsZCk7Cit9CisKK3N0YXRpYyBpbnQgdm1hY19jcmVhdGUoc3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqdG1wbCwgc3RydWN0IHJ0YXR0ciAqKnRiKQoreworCXN0cnVjdCBzaGFzaF9pbnN0YW5jZSAqaW5zdDsKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnOworCWludCBlcnI7CisKKwllcnIgPSBjcnlwdG9fY2hlY2tfYXR0cl90eXBlKHRiLCBDUllQVE9fQUxHX1RZUEVfU0hBU0gpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlhbGcgPSBjcnlwdG9fZ2V0X2F0dHJfYWxnKHRiLCBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAorCQkJQ1JZUFRPX0FMR19UWVBFX01BU0spOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIFBUUl9FUlIoYWxnKTsKKworCWluc3QgPSBzaGFzaF9hbGxvY19pbnN0YW5jZSgidm1hYyIsIGFsZyk7CisJZXJyID0gUFRSX0VSUihpbnN0KTsKKwlpZiAoSVNfRVJSKGluc3QpKQorCQlnb3RvIG91dF9wdXRfYWxnOworCisJZXJyID0gY3J5cHRvX2luaXRfc3Bhd24oc2hhc2hfaW5zdGFuY2VfY3R4KGluc3QpLCBhbGcsCisJCQlzaGFzaF9jcnlwdG9faW5zdGFuY2UoaW5zdCksCisJCQlDUllQVE9fQUxHX1RZUEVfTUFTSyk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZnJlZV9pbnN0OworCisJaW5zdC0+YWxnLmJhc2UuY3JhX3ByaW9yaXR5ID0gYWxnLT5jcmFfcHJpb3JpdHk7CisJaW5zdC0+YWxnLmJhc2UuY3JhX2Jsb2Nrc2l6ZSA9IGFsZy0+Y3JhX2Jsb2Nrc2l6ZTsKKwlpbnN0LT5hbGcuYmFzZS5jcmFfYWxpZ25tYXNrID0gYWxnLT5jcmFfYWxpZ25tYXNrOworCisJaW5zdC0+YWxnLmRpZ2VzdHNpemUgPSBzaXplb2Yodm1hY190KTsKKwlpbnN0LT5hbGcuYmFzZS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgdm1hY19jdHhfdCk7CisJaW5zdC0+YWxnLmJhc2UuY3JhX2luaXQgPSB2bWFjX2luaXRfdGZtOworCWluc3QtPmFsZy5iYXNlLmNyYV9leGl0ID0gdm1hY19leGl0X3RmbTsKKworCWluc3QtPmFsZy5pbml0ID0gdm1hY19pbml0OworCWluc3QtPmFsZy51cGRhdGUgPSB2bWFjX3VwZGF0ZTsKKwlpbnN0LT5hbGcuZmluYWwgPSB2bWFjX2ZpbmFsOworCWluc3QtPmFsZy5zZXRrZXkgPSB2bWFjX3NldGtleTsKKworCWVyciA9IHNoYXNoX3JlZ2lzdGVyX2luc3RhbmNlKHRtcGwsIGluc3QpOworCWlmIChlcnIpIHsKK291dF9mcmVlX2luc3Q6CisJCXNoYXNoX2ZyZWVfaW5zdGFuY2Uoc2hhc2hfY3J5cHRvX2luc3RhbmNlKGluc3QpKTsKKwl9CisKK291dF9wdXRfYWxnOgorCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgdm1hY190bXBsID0geworCS5uYW1lID0gInZtYWMiLAorCS5jcmVhdGUgPSB2bWFjX2NyZWF0ZSwKKwkuZnJlZSA9IHNoYXNoX2ZyZWVfaW5zdGFuY2UsCisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdm1hY19tb2R1bGVfaW5pdCh2b2lkKQoreworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfdGVtcGxhdGUoJnZtYWNfdG1wbCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2bWFjX21vZHVsZV9leGl0KHZvaWQpCit7CisJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJnZtYWNfdG1wbCk7Cit9CisKK21vZHVsZV9pbml0KHZtYWNfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQodm1hY19tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVk1BQyBoYXNoIGFsZ29yaXRobSIpOworCmRpZmYgLS1naXQgYS9jcnlwdG8veGNiYy5jIGIvY3J5cHRvL3hjYmMuYwppbmRleCBiNjNiNjMzLi5iYjdiNjdmIDEwMDY0NAotLS0gYS9jcnlwdG8veGNiYy5jCisrKyBiL2NyeXB0by94Y2JjLmMKQEAgLTE5LDIxMSArMTksMTQyIEBACiAgKiAJS2F6dW5vcmkgTWl5YXphd2EgPG1peWF6YXdhQGxpbnV4LWlwdjYub3JnPgogICovCiAKLSNpbmNsdWRlIDxjcnlwdG8vc2NhdHRlcndhbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCiBzdGF0aWMgdV9pbnQzMl90IGtzWzEyXSA9IHsweDAxMDEwMTAxLCAweDAxMDEwMTAxLCAweDAxMDEwMTAxLCAweDAxMDEwMTAxLAogCQkJICAgMHgwMjAyMDIwMiwgMHgwMjAyMDIwMiwgMHgwMjAyMDIwMiwgMHgwMjAyMDIwMiwKIAkJCSAgIDB4MDMwMzAzMDMsIDB4MDMwMzAzMDMsIDB4MDMwMzAzMDMsIDB4MDMwMzAzMDN9OworCiAvKgogICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogfCA8cGFyZW50IHRmbT4KICAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHwgY3J5cHRvX3hjYmNfY3R4CisgKiB8IHhjYmNfdGZtX2N0eAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCBjb25zdHMgKGJsb2NrIHNpemUgKiAyKQorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdHJ1Y3QgeGNiY190Zm1fY3R4IHsKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqY2hpbGQ7CisJdTggY3R4W107Cit9OworCisvKgorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCA8c2hhc2ggZGVzYz4KKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgeGNiY19kZXNjX2N0eAogICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogfCBvZGRzIChibG9jayBzaXplKQogICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogfCBwcmV2IChibG9jayBzaXplKQogICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogfCBrZXkgKGJsb2NrIHNpemUpCi0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiB8IGNvbnN0cyAoYmxvY2sgc2l6ZSAqIDMpCi0gKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KLXN0cnVjdCBjcnlwdG9feGNiY19jdHggewotCXN0cnVjdCBjcnlwdG9fY2lwaGVyICpjaGlsZDsKLQl1OCAqb2RkczsKLQl1OCAqcHJldjsKLQl1OCAqa2V5OwotCXU4ICpjb25zdHM7Ci0Jdm9pZCAoKnhvcikodTggKmEsIGNvbnN0IHU4ICpiLCB1bnNpZ25lZCBpbnQgYnMpOwotCXVuc2lnbmVkIGludCBrZXlsZW47CitzdHJ1Y3QgeGNiY19kZXNjX2N0eCB7CiAJdW5zaWduZWQgaW50IGxlbjsKKwl1OCBjdHhbXTsKIH07CiAKLXN0YXRpYyB2b2lkIHhvcl8xMjgodTggKmEsIGNvbnN0IHU4ICpiLCB1bnNpZ25lZCBpbnQgYnMpCitzdGF0aWMgaW50IGNyeXB0b194Y2JjX2RpZ2VzdF9zZXRrZXkoc3RydWN0IGNyeXB0b19zaGFzaCAqcGFyZW50LAorCQkJCSAgICAgY29uc3QgdTggKmlua2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQogewotCSgodTMyICopYSlbMF0gXj0gKCh1MzIgKiliKVswXTsKLQkoKHUzMiAqKWEpWzFdIF49ICgodTMyICopYilbMV07Ci0JKCh1MzIgKilhKVsyXSBePSAoKHUzMiAqKWIpWzJdOwotCSgodTMyICopYSlbM10gXj0gKCh1MzIgKiliKVszXTsKLX0KLQotc3RhdGljIGludCBfY3J5cHRvX3hjYmNfZGlnZXN0X3NldGtleShzdHJ1Y3QgY3J5cHRvX2hhc2ggKnBhcmVudCwKLQkJCQkgICAgICBzdHJ1Y3QgY3J5cHRvX3hjYmNfY3R4ICpjdHgpCi17Ci0JaW50IGJzID0gY3J5cHRvX2hhc2hfYmxvY2tzaXplKHBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBhbGlnbm1hc2sgPSBjcnlwdG9fc2hhc2hfYWxpZ25tYXNrKHBhcmVudCk7CisJc3RydWN0IHhjYmNfdGZtX2N0eCAqY3R4ID0gY3J5cHRvX3NoYXNoX2N0eChwYXJlbnQpOworCWludCBicyA9IGNyeXB0b19zaGFzaF9ibG9ja3NpemUocGFyZW50KTsKKwl1OCAqY29uc3RzID0gUFRSX0FMSUdOKCZjdHgtPmN0eFswXSwgYWxpZ25tYXNrICsgMSk7CiAJaW50IGVyciA9IDA7CiAJdTgga2V5MVtic107CiAKLQlpZiAoKGVyciA9IGNyeXB0b19jaXBoZXJfc2V0a2V5KGN0eC0+Y2hpbGQsIGN0eC0+a2V5LCBjdHgtPmtleWxlbikpKQotCSAgICByZXR1cm4gZXJyOworCWlmICgoZXJyID0gY3J5cHRvX2NpcGhlcl9zZXRrZXkoY3R4LT5jaGlsZCwgaW5rZXksIGtleWxlbikpKQorCQlyZXR1cm4gZXJyOwogCi0JY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZShjdHgtPmNoaWxkLCBrZXkxLCBjdHgtPmNvbnN0cyk7CisJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZShjdHgtPmNoaWxkLCBjb25zdHMsICh1OCAqKWtzICsgYnMpOworCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUoY3R4LT5jaGlsZCwgY29uc3RzICsgYnMsICh1OCAqKWtzICsgYnMgKiAyKTsKKwljcnlwdG9fY2lwaGVyX2VuY3J5cHRfb25lKGN0eC0+Y2hpbGQsIGtleTEsICh1OCAqKWtzKTsKIAogCXJldHVybiBjcnlwdG9fY2lwaGVyX3NldGtleShjdHgtPmNoaWxkLCBrZXkxLCBicyk7CisKIH0KIAotc3RhdGljIGludCBjcnlwdG9feGNiY19kaWdlc3Rfc2V0a2V5KHN0cnVjdCBjcnlwdG9faGFzaCAqcGFyZW50LAotCQkJCSAgICAgY29uc3QgdTggKmlua2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQorc3RhdGljIGludCBjcnlwdG9feGNiY19kaWdlc3RfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqcGRlc2MpCiB7Ci0Jc3RydWN0IGNyeXB0b194Y2JjX2N0eCAqY3R4ID0gY3J5cHRvX2hhc2hfY3R4X2FsaWduZWQocGFyZW50KTsKLQotCWlmIChrZXlsZW4gIT0gY3J5cHRvX2NpcGhlcl9ibG9ja3NpemUoY3R4LT5jaGlsZCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY3R4LT5rZXlsZW4gPSBrZXlsZW47Ci0JbWVtY3B5KGN0eC0+a2V5LCBpbmtleSwga2V5bGVuKTsKLQljdHgtPmNvbnN0cyA9ICh1OCopa3M7Ci0KLQlyZXR1cm4gX2NyeXB0b194Y2JjX2RpZ2VzdF9zZXRrZXkocGFyZW50LCBjdHgpOwotfQotCi1zdGF0aWMgaW50IGNyeXB0b194Y2JjX2RpZ2VzdF9pbml0KHN0cnVjdCBoYXNoX2Rlc2MgKnBkZXNjKQotewotCXN0cnVjdCBjcnlwdG9feGNiY19jdHggKmN0eCA9IGNyeXB0b19oYXNoX2N0eF9hbGlnbmVkKHBkZXNjLT50Zm0pOwotCWludCBicyA9IGNyeXB0b19oYXNoX2Jsb2Nrc2l6ZShwZGVzYy0+dGZtKTsKKwl1bnNpZ25lZCBsb25nIGFsaWdubWFzayA9IGNyeXB0b19zaGFzaF9hbGlnbm1hc2socGRlc2MtPnRmbSk7CisJc3RydWN0IHhjYmNfZGVzY19jdHggKmN0eCA9IHNoYXNoX2Rlc2NfY3R4KHBkZXNjKTsKKwlpbnQgYnMgPSBjcnlwdG9fc2hhc2hfYmxvY2tzaXplKHBkZXNjLT50Zm0pOworCXU4ICpwcmV2ID0gUFRSX0FMSUdOKCZjdHgtPmN0eFswXSwgYWxpZ25tYXNrICsgMSkgKyBiczsKIAogCWN0eC0+bGVuID0gMDsKLQltZW1zZXQoY3R4LT5vZGRzLCAwLCBicyk7Ci0JbWVtc2V0KGN0eC0+cHJldiwgMCwgYnMpOworCW1lbXNldChwcmV2LCAwLCBicyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjcnlwdG9feGNiY19kaWdlc3RfdXBkYXRlMihzdHJ1Y3QgaGFzaF9kZXNjICpwZGVzYywKLQkJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCitzdGF0aWMgaW50IGNyeXB0b194Y2JjX2RpZ2VzdF91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKnBkZXNjLCBjb25zdCB1OCAqcCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0Jc3RydWN0IGNyeXB0b19oYXNoICpwYXJlbnQgPSBwZGVzYy0+dGZtOwotCXN0cnVjdCBjcnlwdG9feGNiY19jdHggKmN0eCA9IGNyeXB0b19oYXNoX2N0eF9hbGlnbmVkKHBhcmVudCk7Ci0Jc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSA9IGN0eC0+Y2hpbGQ7Ci0JaW50IGJzID0gY3J5cHRvX2hhc2hfYmxvY2tzaXplKHBhcmVudCk7CisJc3RydWN0IGNyeXB0b19zaGFzaCAqcGFyZW50ID0gcGRlc2MtPnRmbTsKKwl1bnNpZ25lZCBsb25nIGFsaWdubWFzayA9IGNyeXB0b19zaGFzaF9hbGlnbm1hc2socGFyZW50KTsKKwlzdHJ1Y3QgeGNiY190Zm1fY3R4ICp0Y3R4ID0gY3J5cHRvX3NoYXNoX2N0eChwYXJlbnQpOworCXN0cnVjdCB4Y2JjX2Rlc2NfY3R4ICpjdHggPSBzaGFzaF9kZXNjX2N0eChwZGVzYyk7CisJc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSA9IHRjdHgtPmNoaWxkOworCWludCBicyA9IGNyeXB0b19zaGFzaF9ibG9ja3NpemUocGFyZW50KTsKKwl1OCAqb2RkcyA9IFBUUl9BTElHTigmY3R4LT5jdHhbMF0sIGFsaWdubWFzayArIDEpOworCXU4ICpwcmV2ID0gb2RkcyArIGJzOwogCi0JZm9yICg7OykgewotCQlzdHJ1Y3QgcGFnZSAqcGcgPSBzZ19wYWdlKHNnKTsKLQkJdW5zaWduZWQgaW50IG9mZnNldCA9IHNnLT5vZmZzZXQ7Ci0JCXVuc2lnbmVkIGludCBzbGVuID0gc2ctPmxlbmd0aDsKKwkvKiBjaGVja2luZyB0aGUgZGF0YSBjYW4gZmlsbCB0aGUgYmxvY2sgKi8KKwlpZiAoKGN0eC0+bGVuICsgbGVuKSA8PSBicykgeworCQltZW1jcHkob2RkcyArIGN0eC0+bGVuLCBwLCBsZW4pOworCQljdHgtPmxlbiArPSBsZW47CisJCXJldHVybiAwOworCX0KIAotCQlpZiAodW5saWtlbHkoc2xlbiA+IG5ieXRlcykpCi0JCQlzbGVuID0gbmJ5dGVzOworCS8qIGZpbGxpbmcgb2RkcyB3aXRoIG5ldyBkYXRhIGFuZCBlbmNyeXB0aW5nIGl0ICovCisJbWVtY3B5KG9kZHMgKyBjdHgtPmxlbiwgcCwgYnMgLSBjdHgtPmxlbik7CisJbGVuIC09IGJzIC0gY3R4LT5sZW47CisJcCArPSBicyAtIGN0eC0+bGVuOwogCi0JCW5ieXRlcyAtPSBzbGVuOworCWNyeXB0b194b3IocHJldiwgb2RkcywgYnMpOworCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBwcmV2LCBwcmV2KTsKIAotCQl3aGlsZSAoc2xlbiA+IDApIHsKLQkJCXVuc2lnbmVkIGludCBsZW4gPSBtaW4oc2xlbiwgKCh1bnNpZ25lZCBpbnQpKFBBR0VfU0laRSkpIC0gb2Zmc2V0KTsKLQkJCWNoYXIgKnAgPSBjcnlwdG9fa21hcChwZywgMCkgKyBvZmZzZXQ7CisJLyogY2xlYXJpbmcgdGhlIGxlbmd0aCAqLworCWN0eC0+bGVuID0gMDsKIAotCQkJLyogY2hlY2tpbmcgdGhlIGRhdGEgY2FuIGZpbGwgdGhlIGJsb2NrICovCi0JCQlpZiAoKGN0eC0+bGVuICsgbGVuKSA8PSBicykgewotCQkJCW1lbWNweShjdHgtPm9kZHMgKyBjdHgtPmxlbiwgcCwgbGVuKTsKLQkJCQljdHgtPmxlbiArPSBsZW47Ci0JCQkJc2xlbiAtPSBsZW47CisJLyogZW5jcnlwdGluZyB0aGUgcmVzdCBvZiBkYXRhICovCisJd2hpbGUgKGxlbiA+IGJzKSB7CisJCWNyeXB0b194b3IocHJldiwgcCwgYnMpOworCQljcnlwdG9fY2lwaGVyX2VuY3J5cHRfb25lKHRmbSwgcHJldiwgcHJldik7CisJCXAgKz0gYnM7CisJCWxlbiAtPSBiczsKKwl9CiAKLQkJCQkvKiBjaGVja2luZyB0aGUgcmVzdCBvZiB0aGUgcGFnZSAqLwotCQkJCWlmIChsZW4gKyBvZmZzZXQgPj0gUEFHRV9TSVpFKSB7Ci0JCQkJCW9mZnNldCA9IDA7Ci0JCQkJCXBnKys7Ci0JCQkJfSBlbHNlCi0JCQkJCW9mZnNldCArPSBsZW47Ci0KLQkJCQljcnlwdG9fa3VubWFwKHAsIDApOwotCQkJCWNyeXB0b195aWVsZChwZGVzYy0+ZmxhZ3MpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQkvKiBmaWxsaW5nIG9kZHMgd2l0aCBuZXcgZGF0YSBhbmQgZW5jcnlwdGluZyBpdCAqLwotCQkJbWVtY3B5KGN0eC0+b2RkcyArIGN0eC0+bGVuLCBwLCBicyAtIGN0eC0+bGVuKTsKLQkJCWxlbiAtPSBicyAtIGN0eC0+bGVuOwotCQkJcCArPSBicyAtIGN0eC0+bGVuOwotCi0JCQljdHgtPnhvcihjdHgtPnByZXYsIGN0eC0+b2RkcywgYnMpOwotCQkJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Zm0sIGN0eC0+cHJldiwgY3R4LT5wcmV2KTsKLQotCQkJLyogY2xlYXJpbmcgdGhlIGxlbmd0aCAqLwotCQkJY3R4LT5sZW4gPSAwOwotCi0JCQkvKiBlbmNyeXB0aW5nIHRoZSByZXN0IG9mIGRhdGEgKi8KLQkJCXdoaWxlIChsZW4gPiBicykgewotCQkJCWN0eC0+eG9yKGN0eC0+cHJldiwgcCwgYnMpOwotCQkJCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBjdHgtPnByZXYsCi0JCQkJCQkJICBjdHgtPnByZXYpOwotCQkJCXAgKz0gYnM7Ci0JCQkJbGVuIC09IGJzOwotCQkJfQotCi0JCQkvKiBrZWVwaW5nIHRoZSBzdXJwbHVzIG9mIGJsb2Nrc2l6ZSAqLwotCQkJaWYgKGxlbikgewotCQkJCW1lbWNweShjdHgtPm9kZHMsIHAsIGxlbik7Ci0JCQkJY3R4LT5sZW4gPSBsZW47Ci0JCQl9Ci0JCQljcnlwdG9fa3VubWFwKHAsIDApOwotCQkJY3J5cHRvX3lpZWxkKHBkZXNjLT5mbGFncyk7Ci0JCQlzbGVuIC09IG1pbihzbGVuLCAoKHVuc2lnbmVkIGludCkoUEFHRV9TSVpFKSkgLSBvZmZzZXQpOwotCQkJb2Zmc2V0ID0gMDsKLQkJCXBnKys7Ci0JCX0KLQotCQlpZiAoIW5ieXRlcykKLQkJCWJyZWFrOwotCQlzZyA9IHNjYXR0ZXJ3YWxrX3NnX25leHQoc2cpOworCS8qIGtlZXBpbmcgdGhlIHN1cnBsdXMgb2YgYmxvY2tzaXplICovCisJaWYgKGxlbikgeworCQltZW1jcHkob2RkcywgcCwgbGVuKTsKKwkJY3R4LT5sZW4gPSBsZW47CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3J5cHRvX3hjYmNfZGlnZXN0X3VwZGF0ZShzdHJ1Y3QgaGFzaF9kZXNjICpwZGVzYywKLQkJCQkgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQorc3RhdGljIGludCBjcnlwdG9feGNiY19kaWdlc3RfZmluYWwoc3RydWN0IHNoYXNoX2Rlc2MgKnBkZXNjLCB1OCAqb3V0KQogewotCWlmIChXQVJOX09OX09OQ0UoaW5faXJxKCkpKQotCQlyZXR1cm4gLUVERUFETEs7Ci0JcmV0dXJuIGNyeXB0b194Y2JjX2RpZ2VzdF91cGRhdGUyKHBkZXNjLCBzZywgbmJ5dGVzKTsKLX0KKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICpwYXJlbnQgPSBwZGVzYy0+dGZtOworCXVuc2lnbmVkIGxvbmcgYWxpZ25tYXNrID0gY3J5cHRvX3NoYXNoX2FsaWdubWFzayhwYXJlbnQpOworCXN0cnVjdCB4Y2JjX3RmbV9jdHggKnRjdHggPSBjcnlwdG9fc2hhc2hfY3R4KHBhcmVudCk7CisJc3RydWN0IHhjYmNfZGVzY19jdHggKmN0eCA9IHNoYXNoX2Rlc2NfY3R4KHBkZXNjKTsKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtID0gdGN0eC0+Y2hpbGQ7CisJaW50IGJzID0gY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShwYXJlbnQpOworCXU4ICpjb25zdHMgPSBQVFJfQUxJR04oJnRjdHgtPmN0eFswXSwgYWxpZ25tYXNrICsgMSk7CisJdTggKm9kZHMgPSBQVFJfQUxJR04oJmN0eC0+Y3R4WzBdLCBhbGlnbm1hc2sgKyAxKTsKKwl1OCAqcHJldiA9IG9kZHMgKyBiczsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKIAotc3RhdGljIGludCBjcnlwdG9feGNiY19kaWdlc3RfZmluYWwoc3RydWN0IGhhc2hfZGVzYyAqcGRlc2MsIHU4ICpvdXQpCi17Ci0Jc3RydWN0IGNyeXB0b19oYXNoICpwYXJlbnQgPSBwZGVzYy0+dGZtOwotCXN0cnVjdCBjcnlwdG9feGNiY19jdHggKmN0eCA9IGNyeXB0b19oYXNoX2N0eF9hbGlnbmVkKHBhcmVudCk7Ci0Jc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSA9IGN0eC0+Y2hpbGQ7Ci0JaW50IGJzID0gY3J5cHRvX2hhc2hfYmxvY2tzaXplKHBhcmVudCk7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoY3R4LT5sZW4gPT0gYnMpIHsKLQkJdTgga2V5Mltic107Ci0KLQkJaWYgKChlcnIgPSBjcnlwdG9fY2lwaGVyX3NldGtleSh0Zm0sIGN0eC0+a2V5LCBjdHgtPmtleWxlbikpICE9IDApCi0JCQlyZXR1cm4gZXJyOwotCi0JCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBrZXkyLAotCQkJCQkgICh1OCAqKShjdHgtPmNvbnN0cyArIGJzKSk7Ci0KLQkJY3R4LT54b3IoY3R4LT5wcmV2LCBjdHgtPm9kZHMsIGJzKTsKLQkJY3R4LT54b3IoY3R4LT5wcmV2LCBrZXkyLCBicyk7Ci0JCV9jcnlwdG9feGNiY19kaWdlc3Rfc2V0a2V5KHBhcmVudCwgY3R4KTsKLQotCQljcnlwdG9fY2lwaGVyX2VuY3J5cHRfb25lKHRmbSwgb3V0LCBjdHgtPnByZXYpOwotCX0gZWxzZSB7Ci0JCXU4IGtleTNbYnNdOworCWlmIChjdHgtPmxlbiAhPSBicykgewogCQl1bnNpZ25lZCBpbnQgcmxlbjsKLQkJdTggKnAgPSBjdHgtPm9kZHMgKyBjdHgtPmxlbjsKKwkJdTggKnAgPSBvZGRzICsgY3R4LT5sZW47CisKIAkJKnAgPSAweDgwOwogCQlwKys7CiAKQEAgLTIzMSwxMjggKzE2MiwxMTEgQEAKIAkJaWYgKHJsZW4pCiAJCQltZW1zZXQocCwgMCwgcmxlbik7CiAKLQkJaWYgKChlcnIgPSBjcnlwdG9fY2lwaGVyX3NldGtleSh0Zm0sIGN0eC0+a2V5LCBjdHgtPmtleWxlbikpICE9IDApCi0JCQlyZXR1cm4gZXJyOwotCi0JCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBrZXkzLAotCQkJCQkgICh1OCAqKShjdHgtPmNvbnN0cyArIGJzICogMikpOwotCi0JCWN0eC0+eG9yKGN0eC0+cHJldiwgY3R4LT5vZGRzLCBicyk7Ci0JCWN0eC0+eG9yKGN0eC0+cHJldiwga2V5MywgYnMpOwotCi0JCV9jcnlwdG9feGNiY19kaWdlc3Rfc2V0a2V5KHBhcmVudCwgY3R4KTsKLQotCQljcnlwdG9fY2lwaGVyX2VuY3J5cHRfb25lKHRmbSwgb3V0LCBjdHgtPnByZXYpOworCQlvZmZzZXQgKz0gYnM7CiAJfQogCisJY3J5cHRvX3hvcihwcmV2LCBvZGRzLCBicyk7CisJY3J5cHRvX3hvcihwcmV2LCBjb25zdHMgKyBvZmZzZXQsIGJzKTsKKworCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBvdXQsIHByZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3J5cHRvX3hjYmNfZGlnZXN0KHN0cnVjdCBoYXNoX2Rlc2MgKnBkZXNjLAotCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuYnl0ZXMsIHU4ICpvdXQpCi17Ci0JaWYgKFdBUk5fT05fT05DRShpbl9pcnEoKSkpCi0JCXJldHVybiAtRURFQURMSzsKLQotCWNyeXB0b194Y2JjX2RpZ2VzdF9pbml0KHBkZXNjKTsKLQljcnlwdG9feGNiY19kaWdlc3RfdXBkYXRlMihwZGVzYywgc2csIG5ieXRlcyk7Ci0JcmV0dXJuIGNyeXB0b194Y2JjX2RpZ2VzdF9maW5hbChwZGVzYywgb3V0KTsKLX0KLQogc3RhdGljIGludCB4Y2JjX2luaXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7CiAJc3RydWN0IGNyeXB0b19jaXBoZXIgKmNpcGhlcjsKIAlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0ID0gKHZvaWQgKil0Zm0tPl9fY3J0X2FsZzsKIAlzdHJ1Y3QgY3J5cHRvX3NwYXduICpzcGF3biA9IGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCk7Ci0Jc3RydWN0IGNyeXB0b194Y2JjX2N0eCAqY3R4ID0gY3J5cHRvX2hhc2hfY3R4X2FsaWduZWQoX19jcnlwdG9faGFzaF9jYXN0KHRmbSkpOwotCWludCBicyA9IGNyeXB0b19oYXNoX2Jsb2Nrc2l6ZShfX2NyeXB0b19oYXNoX2Nhc3QodGZtKSk7CisJc3RydWN0IHhjYmNfdGZtX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAogCWNpcGhlciA9IGNyeXB0b19zcGF3bl9jaXBoZXIoc3Bhd24pOwogCWlmIChJU19FUlIoY2lwaGVyKSkKIAkJcmV0dXJuIFBUUl9FUlIoY2lwaGVyKTsKIAotCXN3aXRjaChicykgewotCWNhc2UgMTY6Ci0JCWN0eC0+eG9yID0geG9yXzEyODsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJY3R4LT5jaGlsZCA9IGNpcGhlcjsKLQljdHgtPm9kZHMgPSAodTgqKShjdHgrMSk7Ci0JY3R4LT5wcmV2ID0gY3R4LT5vZGRzICsgYnM7Ci0JY3R4LT5rZXkgPSBjdHgtPnByZXYgKyBiczsKIAogCXJldHVybiAwOwogfTsKIAogc3RhdGljIHZvaWQgeGNiY19leGl0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewotCXN0cnVjdCBjcnlwdG9feGNiY19jdHggKmN0eCA9IGNyeXB0b19oYXNoX2N0eF9hbGlnbmVkKF9fY3J5cHRvX2hhc2hfY2FzdCh0Zm0pKTsKKwlzdHJ1Y3QgeGNiY190Zm1fY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCWNyeXB0b19mcmVlX2NpcGhlcihjdHgtPmNoaWxkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKnhjYmNfYWxsb2Moc3RydWN0IHJ0YXR0ciAqKnRiKQorc3RhdGljIGludCB4Y2JjX2NyZWF0ZShzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0bXBsLCBzdHJ1Y3QgcnRhdHRyICoqdGIpCiB7Ci0Jc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdDsKKwlzdHJ1Y3Qgc2hhc2hfaW5zdGFuY2UgKmluc3Q7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKwl1bnNpZ25lZCBsb25nIGFsaWdubWFzazsKIAlpbnQgZXJyOwogCi0JZXJyID0gY3J5cHRvX2NoZWNrX2F0dHJfdHlwZSh0YiwgQ1JZUFRPX0FMR19UWVBFX0hBU0gpOworCWVyciA9IGNyeXB0b19jaGVja19hdHRyX3R5cGUodGIsIENSWVBUT19BTEdfVFlQRV9TSEFTSCk7CiAJaWYgKGVycikKLQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwkJcmV0dXJuIGVycjsKIAogCWFsZyA9IGNyeXB0b19nZXRfYXR0cl9hbGcodGIsIENSWVBUT19BTEdfVFlQRV9DSVBIRVIsCiAJCQkJICBDUllQVE9fQUxHX1RZUEVfTUFTSyk7CiAJaWYgKElTX0VSUihhbGcpKQotCQlyZXR1cm4gRVJSX0NBU1QoYWxnKTsKKwkJcmV0dXJuIFBUUl9FUlIoYWxnKTsKIAogCXN3aXRjaChhbGctPmNyYV9ibG9ja3NpemUpIHsKIAljYXNlIDE2OgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlpbnN0ID0gRVJSX1BUUigtRUlOVkFMKTsKIAkJZ290byBvdXRfcHV0X2FsZzsKIAl9CiAKLQlpbnN0ID0gY3J5cHRvX2FsbG9jX2luc3RhbmNlKCJ4Y2JjIiwgYWxnKTsKKwlpbnN0ID0gc2hhc2hfYWxsb2NfaW5zdGFuY2UoInhjYmMiLCBhbGcpOworCWVyciA9IFBUUl9FUlIoaW5zdCk7CiAJaWYgKElTX0VSUihpbnN0KSkKIAkJZ290byBvdXRfcHV0X2FsZzsKIAotCWluc3QtPmFsZy5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX1RZUEVfSEFTSDsKLQlpbnN0LT5hbGcuY3JhX3ByaW9yaXR5ID0gYWxnLT5jcmFfcHJpb3JpdHk7Ci0JaW5zdC0+YWxnLmNyYV9ibG9ja3NpemUgPSBhbGctPmNyYV9ibG9ja3NpemU7Ci0JaW5zdC0+YWxnLmNyYV9hbGlnbm1hc2sgPSBhbGctPmNyYV9hbGlnbm1hc2s7Ci0JaW5zdC0+YWxnLmNyYV90eXBlID0gJmNyeXB0b19oYXNoX3R5cGU7CisJZXJyID0gY3J5cHRvX2luaXRfc3Bhd24oc2hhc2hfaW5zdGFuY2VfY3R4KGluc3QpLCBhbGcsCisJCQkJc2hhc2hfY3J5cHRvX2luc3RhbmNlKGluc3QpLAorCQkJCUNSWVBUT19BTEdfVFlQRV9NQVNLKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2luc3Q7CiAKLQlpbnN0LT5hbGcuY3JhX2hhc2guZGlnZXN0c2l6ZSA9IGFsZy0+Y3JhX2Jsb2Nrc2l6ZTsKLQlpbnN0LT5hbGcuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IGNyeXB0b194Y2JjX2N0eCkgKwotCQkJCUFMSUdOKGluc3QtPmFsZy5jcmFfYmxvY2tzaXplICogMywgc2l6ZW9mKHZvaWQgKikpOwotCWluc3QtPmFsZy5jcmFfaW5pdCA9IHhjYmNfaW5pdF90Zm07Ci0JaW5zdC0+YWxnLmNyYV9leGl0ID0geGNiY19leGl0X3RmbTsKKwlhbGlnbm1hc2sgPSBhbGctPmNyYV9hbGlnbm1hc2sgfCAzOworCWluc3QtPmFsZy5iYXNlLmNyYV9hbGlnbm1hc2sgPSBhbGlnbm1hc2s7CisJaW5zdC0+YWxnLmJhc2UuY3JhX3ByaW9yaXR5ID0gYWxnLT5jcmFfcHJpb3JpdHk7CisJaW5zdC0+YWxnLmJhc2UuY3JhX2Jsb2Nrc2l6ZSA9IGFsZy0+Y3JhX2Jsb2Nrc2l6ZTsKIAotCWluc3QtPmFsZy5jcmFfaGFzaC5pbml0ID0gY3J5cHRvX3hjYmNfZGlnZXN0X2luaXQ7Ci0JaW5zdC0+YWxnLmNyYV9oYXNoLnVwZGF0ZSA9IGNyeXB0b194Y2JjX2RpZ2VzdF91cGRhdGU7Ci0JaW5zdC0+YWxnLmNyYV9oYXNoLmZpbmFsID0gY3J5cHRvX3hjYmNfZGlnZXN0X2ZpbmFsOwotCWluc3QtPmFsZy5jcmFfaGFzaC5kaWdlc3QgPSBjcnlwdG9feGNiY19kaWdlc3Q7Ci0JaW5zdC0+YWxnLmNyYV9oYXNoLnNldGtleSA9IGNyeXB0b194Y2JjX2RpZ2VzdF9zZXRrZXk7CisJaW5zdC0+YWxnLmRpZ2VzdHNpemUgPSBhbGctPmNyYV9ibG9ja3NpemU7CisJaW5zdC0+YWxnLmRlc2NzaXplID0gQUxJR04oc2l6ZW9mKHN0cnVjdCB4Y2JjX2Rlc2NfY3R4KSwKKwkJCQkgICBjcnlwdG9fdGZtX2N0eF9hbGlnbm1lbnQoKSkgKworCQkJICAgICAoYWxpZ25tYXNrICYKKwkJCSAgICAgIH4oY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkgLSAxKSkgKworCQkJICAgICBhbGctPmNyYV9ibG9ja3NpemUgKiAyOworCisJaW5zdC0+YWxnLmJhc2UuY3JhX2N0eHNpemUgPSBBTElHTihzaXplb2Yoc3RydWN0IHhjYmNfdGZtX2N0eCksCisJCQkJCSAgIGFsaWdubWFzayArIDEpICsKKwkJCQkgICAgIGFsZy0+Y3JhX2Jsb2Nrc2l6ZSAqIDI7CisJaW5zdC0+YWxnLmJhc2UuY3JhX2luaXQgPSB4Y2JjX2luaXRfdGZtOworCWluc3QtPmFsZy5iYXNlLmNyYV9leGl0ID0geGNiY19leGl0X3RmbTsKKworCWluc3QtPmFsZy5pbml0ID0gY3J5cHRvX3hjYmNfZGlnZXN0X2luaXQ7CisJaW5zdC0+YWxnLnVwZGF0ZSA9IGNyeXB0b194Y2JjX2RpZ2VzdF91cGRhdGU7CisJaW5zdC0+YWxnLmZpbmFsID0gY3J5cHRvX3hjYmNfZGlnZXN0X2ZpbmFsOworCWluc3QtPmFsZy5zZXRrZXkgPSBjcnlwdG9feGNiY19kaWdlc3Rfc2V0a2V5OworCisJZXJyID0gc2hhc2hfcmVnaXN0ZXJfaW5zdGFuY2UodG1wbCwgaW5zdCk7CisJaWYgKGVycikgeworb3V0X2ZyZWVfaW5zdDoKKwkJc2hhc2hfZnJlZV9pbnN0YW5jZShzaGFzaF9jcnlwdG9faW5zdGFuY2UoaW5zdCkpOworCX0KIAogb3V0X3B1dF9hbGc6CiAJY3J5cHRvX21vZF9wdXQoYWxnKTsKLQlyZXR1cm4gaW5zdDsKLX0KLQotc3RhdGljIHZvaWQgeGNiY19mcmVlKHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QpCi17Ci0JY3J5cHRvX2Ryb3Bfc3Bhd24oY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KSk7Ci0Ja2ZyZWUoaW5zdCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgY3J5cHRvX3hjYmNfdG1wbCA9IHsKIAkubmFtZSA9ICJ4Y2JjIiwKLQkuYWxsb2MgPSB4Y2JjX2FsbG9jLAotCS5mcmVlID0geGNiY19mcmVlLAorCS5jcmVhdGUgPSB4Y2JjX2NyZWF0ZSwKKwkuZnJlZSA9IHNoYXNoX2ZyZWVfaW5zdGFuY2UsCiAJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3NsZWVwLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3c2xlZXAuYwppbmRleCBkYjMwN2EzLi5jYzIyZjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3c2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3c2xlZXAuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgogI2luY2x1ZGUgImFjY29tbW9uLmgiCiAjaW5jbHVkZSAiYWN0YWJsZXMuaCIKKyNpbmNsdWRlIDxsaW51eC90Ym9vdC5oPgogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9IQVJEV0FSRQogQUNQSV9NT0RVTEVfTkFNRSgiaHdzbGVlcCIpCkBAIC0zNDIsNiArMzQzLDggQEAKIAogCUFDUElfRkxVU0hfQ1BVX0NBQ0hFKCk7CiAKKwl0Ym9vdF9zbGVlcChzbGVlcF9zdGF0ZSwgcG0xYV9jb250cm9sLCBwbTFiX2NvbnRyb2wpOworCiAJLyogV3JpdGUgIzI6IFdyaXRlIGJvdGggU0xQX1RZUCArIFNMUF9FTiAqLwogCiAJc3RhdHVzID0gYWNwaV9od193cml0ZV9wbTFfY29udHJvbChwbTFhX2NvbnRyb2wsIHBtMWJfY29udHJvbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMgYi9kcml2ZXJzL2FjcGkvYmxhY2tsaXN0LmMKaW5kZXggZjZiYWE3Ny4uMGM0Y2E0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JsYWNrbGlzdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ibGFja2xpc3QuYwpAQCAtNzgsOSArNzgsMTAgQEAKIAogc3RhdGljIGludCBfX2luaXQgYmxhY2tsaXN0X2J5X3llYXIodm9pZCkKIHsKLQlpbnQgeWVhciA9IGRtaV9nZXRfeWVhcihETUlfQklPU19EQVRFKTsKKwlpbnQgeWVhcjsKKwogCS8qIERvZXNuJ3QgZXhpc3Q/IExpa2VseSBhbiBvbGQgc3lzdGVtICovCi0JaWYgKHllYXIgPT0gLTEpIHsKKwlpZiAoIWRtaV9nZXRfZGF0ZShETUlfQklPU19EQVRFLCAmeWVhciwgTlVMTCwgTlVMTCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAibm8gRE1JIEJJT1MgeWVhciwgIgogCQkJImFjcGk9Zm9yY2UgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIEFDUElcbiIgKTsKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FtYmEvYnVzLmMgYi9kcml2ZXJzL2FtYmEvYnVzLmMKaW5kZXggMjQ2NjUwNi4uZjYwYjJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hbWJhL2J1cy5jCisrKyBiL2RyaXZlcnMvYW1iYS9idXMuYwpAQCAtMjA0LDYgKzIwNCw3IEBACiBpbnQgYW1iYV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcGFyZW50KQogewogCXUzMiBwaWQsIGNpZDsKKwl1MzIgc2l6ZTsKIAl2b2lkIF9faW9tZW0gKnRtcDsKIAlpbnQgaSwgcmV0OwogCkBAIC0yMjksMTYgKzIzMCwyNSBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX291dDsKIAotCXRtcCA9IGlvcmVtYXAoZGV2LT5yZXMuc3RhcnQsIFNaXzRLKTsKKwkvKgorCSAqIER5bmFtaWNhbGx5IGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdXNlIHRoaXMgZm9yIGlvbWFwCisJICovCisJc2l6ZSA9IHJlc291cmNlX3NpemUoJmRldi0+cmVzKTsKKwl0bXAgPSBpb3JlbWFwKGRldi0+cmVzLnN0YXJ0LCBzaXplKTsKIAlpZiAoIXRtcCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAorCS8qCisJICogUmVhZCBwaWQgYW5kIGNpZCBiYXNlZCBvbiBzaXplIG9mIHJlc291cmNlCisJICogdGhleSBhcmUgbG9jYXRlZCBhdCBlbmQgb2YgcmVnaW9uCisJICovCiAJZm9yIChwaWQgPSAwLCBpID0gMDsgaSA8IDQ7IGkrKykKLQkJcGlkIHw9IChyZWFkbCh0bXAgKyAweGZlMCArIDQgKiBpKSAmIDI1NSkgPDwgKGkgKiA4KTsKKwkJcGlkIHw9IChyZWFkbCh0bXAgKyBzaXplIC0gMHgyMCArIDQgKiBpKSAmIDI1NSkgPDwgKGkgKiA4KTsKIAlmb3IgKGNpZCA9IDAsIGkgPSAwOyBpIDwgNDsgaSsrKQotCQljaWQgfD0gKHJlYWRsKHRtcCArIDB4ZmYwICsgNCAqIGkpICYgMjU1KSA8PCAoaSAqIDgpOworCQljaWQgfD0gKHJlYWRsKHRtcCArIHNpemUgLSAweDEwICsgNCAqIGkpICYgMjU1KSA8PCAoaSAqIDgpOwogCiAJaW91bm1hcCh0bXApOwogCkBAIC0zNTMsMTEgKzM2MywxNCBAQAogaW50IGFtYmFfcmVxdWVzdF9yZWdpb25zKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lKQogewogCWludCByZXQgPSAwOworCXUzMiBzaXplOwogCiAJaWYgKCFuYW1lKQogCQluYW1lID0gZGV2LT5kZXYuZHJpdmVyLT5uYW1lOwogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZGV2LT5yZXMuc3RhcnQsIFNaXzRLLCBuYW1lKSkKKwlzaXplID0gcmVzb3VyY2Vfc2l6ZSgmZGV2LT5yZXMpOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZGV2LT5yZXMuc3RhcnQsIHNpemUsIG5hbWUpKQogCQlyZXQgPSAtRUJVU1k7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzcxLDcgKzM4NCwxMCBAQAogICovCiB2b2lkIGFtYmFfcmVsZWFzZV9yZWdpb25zKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2KQogewotCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPnJlcy5zdGFydCwgU1pfNEspOworCXUzMiBzaXplOworCisJc2l6ZSA9IHJlc291cmNlX3NpemUoJmRldi0+cmVzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oZGV2LT5yZXMuc3RhcnQsIHNpemUpOwogfQogCiBFWFBPUlRfU1lNQk9MKGFtYmFfZHJpdmVyX3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL0tjb25maWcgYi9kcml2ZXJzL2F0YS9LY29uZmlnCmluZGV4IGIxN2M1N2YuLmFiMmZhNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL0tjb25maWcKKysrIGIvZHJpdmVycy9hdGEvS2NvbmZpZwpAQCAtMjYsNiArMjYsMTcgQEAKICAgICAgICBib29sCiAgICAgICAgZGVmYXVsdCBuCiAKK2NvbmZpZyBBVEFfVkVSQk9TRV9FUlJPUgorCWJvb2wgIlZlcmJvc2UgQVRBIGVycm9yIHJlcG9ydGluZyIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIHBhcnNpbmcgb2YgQVRBIGNvbW1hbmQgZGVzY3JpcHRpb25zIGFuZCBlcnJvciBiaXRzCisJICBpbiBsaWJhdGEga2VybmVsIG91dHB1dCwgbWFraW5nIGl0IGVhc2llciB0byBpbnRlcnByZXQuCisJICBUaGlzIG9wdGlvbiB3aWxsIGVubGFyZ2UgdGhlIGtlcm5lbCBieSBhcHByb3guIDZLQi4gRGlzYWJsZSBpdCBvbmx5CisJICBpZiBrZXJuZWwgc2l6ZSBpcyBtb3JlIGltcG9ydGFudCB0aGFuIGVhc2Ugb2YgZGVidWdnaW5nLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCiBjb25maWcgQVRBX0FDUEkKIAlib29sICJBVEEgQUNQSSBTdXBwb3J0IgogCWRlcGVuZHMgb24gQUNQSSAmJiBQQ0kKQEAgLTU4Niw2ICs1OTcsMTYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIFBBVEFfUkRDCisJdHJpc3RhdGUgIlJEQyBQQVRBIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIGJhc2ljIHN1cHBvcnQgZm9yIHRoZSBsYXRlciBSREMgUEFUQSBjb250cm9sbGVycworCSAgY29udHJvbGxlcnMgdmlhIHRoZSBuZXcgQVRBIGxheWVyLiBGb3IgdGhlIFJEQyAxMDEwLCB5b3UgbmVlZCB0bworCSAgZW5hYmxlIHRoZSBJVDgyMVggZHJpdmVyIGluc3RlYWQuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBQQVRBX1JaMTAwMAogCXRyaXN0YXRlICJQQyBUZWNoIFJaMTAwMCBQQVRBIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL01ha2VmaWxlIGIvZHJpdmVycy9hdGEvTWFrZWZpbGUKaW5kZXggMzg5MDZmOS4uNDYzZWI1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9hdGEvTWFrZWZpbGUKQEAgLTU3LDYgKzU3LDcgQEAKIG9iai0kKENPTkZJR19QQVRBX1FESSkJCSs9IHBhdGFfcWRpLm8KIG9iai0kKENPTkZJR19QQVRBX1JBRElTWVMpCSs9IHBhdGFfcmFkaXN5cy5vCiBvYmotJChDT05GSUdfUEFUQV9SQjUzMikJKz0gcGF0YV9yYjUzMl9jZi5vCitvYmotJChDT05GSUdfUEFUQV9SREMpCQkrPSBwYXRhX3JkYy5vCiBvYmotJChDT05GSUdfUEFUQV9SWjEwMDApCSs9IHBhdGFfcnoxMDAwLm8KIG9iai0kKENPTkZJR19QQVRBX1NDMTIwMCkJKz0gcGF0YV9zYzEyMDAubwogb2JqLSQoQ09ORklHX1BBVEFfU0VSVkVSV09SS1MpCSs9IHBhdGFfc2VydmVyd29ya3MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IGZlM2ViYTUuLmQ0Y2Q5YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTMyOSwxMCArMzI5LDI0IEBACiAJCQkJICAgZW51bSBzd19hY3Rpdml0eSB2YWwpOwogc3RhdGljIHZvaWQgYWhjaV9pbml0X3N3X2FjdGl2aXR5KHN0cnVjdCBhdGFfbGluayAqbGluayk7CiAKK3N0YXRpYyBzc2l6ZV90IGFoY2lfc2hvd19ob3N0X2NhcHMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2hvc3RfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfcG9ydF9jbWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CisKK0RFVklDRV9BVFRSKGFoY2lfaG9zdF9jYXBzLCBTX0lSVUdPLCBhaGNpX3Nob3dfaG9zdF9jYXBzLCBOVUxMKTsKK0RFVklDRV9BVFRSKGFoY2lfaG9zdF92ZXJzaW9uLCBTX0lSVUdPLCBhaGNpX3Nob3dfaG9zdF92ZXJzaW9uLCBOVUxMKTsKK0RFVklDRV9BVFRSKGFoY2lfcG9ydF9jbWQsIFNfSVJVR08sIGFoY2lfc2hvd19wb3J0X2NtZCwgTlVMTCk7CisKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYWhjaV9zaG9zdF9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9saW5rX3Bvd2VyX21hbmFnZW1lbnRfcG9saWN5LAogCSZkZXZfYXR0cl9lbV9tZXNzYWdlX3R5cGUsCiAJJmRldl9hdHRyX2VtX21lc3NhZ2UsCisJJmRldl9hdHRyX2FoY2lfaG9zdF9jYXBzLAorCSZkZXZfYXR0cl9haGNpX2hvc3RfdmVyc2lvbiwKKwkmZGV2X2F0dHJfYWhjaV9wb3J0X2NtZCwKIAlOVUxMCiB9OwogCkBAIC01MzksNiArNTUzLDEyIEBACiAJeyBQQ0lfVkRFVklDRShBVEksIDB4NDM5NCksIGJvYXJkX2FoY2lfc2I3MDAgfSwgLyogQVRJIFNCNzAwLzgwMCAqLwogCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzOTUpLCBib2FyZF9haGNpX3NiNzAwIH0sIC8qIEFUSSBTQjcwMC84MDAgKi8KIAorCS8qIEFNRCAqLworCXsgUENJX1ZERVZJQ0UoQU1ELCAweDc4MDApLCBib2FyZF9haGNpIH0sIC8qIEFNRCBTQjkwMCAqLworCS8qIEFNRCBpcyB1c2luZyBSQUlEIGNsYXNzIG9ubHkgZm9yIGFoY2kgY29udHJvbGxlcnMgKi8KKwl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCSAgUENJX0NMQVNTX1NUT1JBR0VfUkFJRCA8PCA4LCAweGZmZmZmZiwgYm9hcmRfYWhjaSB9LAorCiAJLyogVklBICovCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4MzM0OSksIGJvYXJkX2FoY2lfdnQ4MjUxIH0sIC8qIFZJQSBWVDgyNTEgKi8KIAl7IFBDSV9WREVWSUNFKFZJQSwgMHg2Mjg3KSwgYm9hcmRfYWhjaV92dDgyNTEgfSwgLyogVklBIFZUODI1MSAqLwpAQCAtNzAyLDYgKzcyMiwzNiBAQAogCVdBUk5fT04oMSk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGFoY2lfc2hvd19ob3N0X2NhcHMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhdGFfc2hvc3RfdG9fcG9ydChzaG9zdCk7CisJc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIleFxuIiwgaHByaXYtPmNhcCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFoY2lfc2hvd19ob3N0X3ZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhdGFfc2hvc3RfdG9fcG9ydChzaG9zdCk7CisJdm9pZCBfX2lvbWVtICptbWlvID0gYXAtPmhvc3QtPmlvbWFwW0FIQ0lfUENJX0JBUl07CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIleFxuIiwgcmVhZGwobW1pbyArIEhPU1RfVkVSU0lPTikpOworfQorCitzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfcG9ydF9jbWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGF0YV9zaG9zdF90b19wb3J0KHNob3N0KTsKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IGFoY2lfcG9ydF9iYXNlKGFwKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV4XG4iLCByZWFkbChwb3J0X21taW8gKyBQT1JUX0NNRCkpOworfQorCiAvKioKICAqCWFoY2lfc2F2ZV9pbml0aWFsX2NvbmZpZyAtIFNhdmUgYW5kIGZpeHVwIGluaXRpYWwgY29uZmlnIHZhbHVlcwogICoJQHBkZXY6IHRhcmdldCBQQ0kgZGV2aWNlCkBAIC0xNTg0LDcgKzE2MzQsNyBAQAogCXBwLT5jbWRfc2xvdFt0YWddLnRibF9hZGRyX2hpID0gY3B1X3RvX2xlMzIoKGNtZF90YmxfZG1hID4+IDE2KSA+PiAxNik7CiB9CiAKLXN0YXRpYyBpbnQgYWhjaV9raWNrX2VuZ2luZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgZm9yY2VfcmVzdGFydCkKK3N0YXRpYyBpbnQgYWhjaV9raWNrX2VuZ2luZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gYWhjaV9wb3J0X2Jhc2UoYXApOwogCXN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOwpAQCAtMTU5MiwxOCArMTY0MiwxNiBAQAogCXUzMiB0bXA7CiAJaW50IGJ1c3ksIHJjOwogCi0JLyogZG8gd2UgbmVlZCB0byBraWNrIHRoZSBwb3J0PyAqLwotCWJ1c3kgPSBzdGF0dXMgJiAoQVRBX0JVU1kgfCBBVEFfRFJRKTsKLQlpZiAoIWJ1c3kgJiYgIWZvcmNlX3Jlc3RhcnQpCi0JCXJldHVybiAwOwotCiAJLyogc3RvcCBlbmdpbmUgKi8KIAlyYyA9IGFoY2lfc3RvcF9lbmdpbmUoYXApOwogCWlmIChyYykKIAkJZ290byBvdXRfcmVzdGFydDsKIAotCS8qIG5lZWQgdG8gZG8gQ0xPPyAqLwotCWlmICghYnVzeSkgeworCS8qIG5lZWQgdG8gZG8gQ0xPPworCSAqIGFsd2F5cyBkbyBDTE8gaWYgUE1QIGlzIGF0dGFjaGVkIChBSENJLTEuMyA5LjIpCisJICovCisJYnVzeSA9IHN0YXR1cyAmIChBVEFfQlVTWSB8IEFUQV9EUlEpOworCWlmICghYnVzeSAmJiAhc2F0YV9wbXBfYXR0YWNoZWQoYXApKSB7CiAJCXJjID0gMDsKIAkJZ290byBvdXRfcmVzdGFydDsKIAl9CkBAIC0xNjUxLDcgKzE2OTksNyBAQAogCQl0bXAgPSBhdGFfd2FpdF9yZWdpc3Rlcihwb3J0X21taW8gKyBQT1JUX0NNRF9JU1NVRSwgMHgxLCAweDEsCiAJCQkJCTEsIHRpbWVvdXRfbXNlYyk7CiAJCWlmICh0bXAgJiAweDEpIHsKLQkJCWFoY2lfa2lja19lbmdpbmUoYXAsIDEpOworCQkJYWhjaV9raWNrX2VuZ2luZShhcCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfSBlbHNlCkBAIC0xNjc0LDcgKzE3MjIsNyBAQAogCURQUklOVEsoIkVOVEVSXG4iKTsKIAogCS8qIHByZXBhcmUgZm9yIFNSU1QgKEFIQ0ktMS4xIDEwLjQuMSkgKi8KLQlyYyA9IGFoY2lfa2lja19lbmdpbmUoYXAsIDEpOworCXJjID0gYWhjaV9raWNrX2VuZ2luZShhcCk7CiAJaWYgKHJjICYmIHJjICE9IC1FT1BOT1RTVVBQKQogCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9XQVJOSU5HLAogCQkJCSJmYWlsZWQgdG8gcmVzZXQgZW5naW5lIChlcnJubz0lZClcbiIsIHJjKTsKQEAgLTE4OTAsNyArMTkzOCw3IEBACiAJCXJjID0gYXRhX3dhaXRfYWZ0ZXJfcmVzZXQobGluaywgamlmZmllcyArIDIgKiBIWiwKIAkJCQkJICBhaGNpX2NoZWNrX3JlYWR5KTsKIAkJaWYgKHJjKQotCQkJYWhjaV9raWNrX2VuZ2luZShhcCwgMCk7CisJCQlhaGNpX2tpY2tfZW5naW5lKGFwKTsKIAl9CiAJcmV0dXJuIHJjOwogfQpAQCAtMjI3MSw3ICsyMzE5LDcgQEAKIAogCS8qIG1ha2UgRE1BIGVuZ2luZSBmb3JnZXQgYWJvdXQgdGhlIGZhaWxlZCBjb21tYW5kICovCiAJaWYgKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRkFJTEVEKQotCQlhaGNpX2tpY2tfZW5naW5lKGFwLCAxKTsKKwkJYWhjaV9raWNrX2VuZ2luZShhcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFoY2lfcG1wX2F0dGFjaChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtMjYwMywxNCArMjY1MSwxOCBAQAogfQogCiAvKgotICogU0I2MDAgYWhjaSBjb250cm9sbGVyIG9uIEFTVVMgTTJBLVZNIGNhbid0IGRvIDY0Yml0IERNQSB3aXRoIG9sZGVyCi0gKiBCSU9TLiAgVGhlIG9sZGVzdCB2ZXJzaW9uIGtub3duIHRvIGJlIGJyb2tlbiBpcyAwOTAxIGFuZCB3b3JraW5nIGlzCi0gKiAxNTAxIHdoaWNoIHdhcyByZWxlYXNlZCBvbiAyMDA3LTEwLTI2LiAgRm9yY2UgMzJiaXQgRE1BIG9uIGFueXRoaW5nCi0gKiBvbGRlciB0aGFuIDE1MDEuICBQbGVhc2UgcmVhZCBia28jOTQxMiBmb3IgbW9yZSBpbmZvLgorICogU0I2MDAgYWhjaSBjb250cm9sbGVyIG9uIGNlcnRhaW4gYm9hcmRzIGNhbid0IGRvIDY0Yml0IERNQSB3aXRoCisgKiBvbGRlciBCSU9TLgogICovCi1zdGF0aWMgYm9vbCBhaGNpX2FzdXNfbTJhX3ZtXzMyYml0X29ubHkoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgYm9vbCBhaGNpX3NiNjAwXzMyYml0X29ubHkoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIHN5c2lkc1tdID0geworCQkvKgorCQkgKiBUaGUgb2xkZXN0IHZlcnNpb24ga25vd24gdG8gYmUgYnJva2VuIGlzIDA5MDEgYW5kCisJCSAqIHdvcmtpbmcgaXMgMTUwMSB3aGljaCB3YXMgcmVsZWFzZWQgb24gMjAwNy0xMC0yNi4KKwkJICogRm9yY2UgMzJiaXQgRE1BIG9uIGFueXRoaW5nIG9sZGVyIHRoYW4gMTUwMS4KKwkJICogUGxlYXNlIHJlYWQgYmtvIzk0MTIgZm9yIG1vcmUgaW5mby4KKwkJICovCiAJCXsKIAkJCS5pZGVudCA9ICJBU1VTIE0yQS1WTSIsCiAJCQkubWF0Y2hlcyA9IHsKQEAgLTI2MTgsMzEgKzI2NzAsNDggQEAKIAkJCQkJICAiQVNVU1RlSyBDb21wdXRlciBJTkMuIiksCiAJCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTTJBLVZNIiksCiAJCQl9LAorCQkJLmRyaXZlcl9kYXRhID0gIjIwMDcxMDI2IiwJLyogeXl5eW1tZGQgKi8KKwkJfSwKKwkJLyoKKwkJICogSXQncyB5ZXQgdW5rbm93biB3aGV0aGVyIG1vcmUgcmVjZW50IEJJT1MgZml4ZXMgdGhlCisJCSAqIHByb2JsZW0uICBCbGFja2xpc3QgdGhlIHdob2xlIGJvYXJkIGZvciB0aGUgdGltZQorCQkgKiBiZWluZy4gIFBsZWFzZSByZWFkIHRoZSBmb2xsb3dpbmcgdGhyZWFkIGZvciBtb3JlCisJCSAqIGluZm8uCisJCSAqCisJCSAqIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmxpbnV4LmlkZS80MjMyNgorCQkgKi8KKwkJeworCQkJLmlkZW50ID0gIkdpZ2FieXRlIEdBLU1BNjlWTS1TMiIsCisJCQkubWF0Y2hlcyA9IHsKKwkJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwKKwkJCQkJICAiR2lnYWJ5dGUgVGVjaG5vbG9neSBDby4sIEx0ZC4iKSwKKwkJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJHQS1NQTY5Vk0tUzIiKSwKKwkJCX0sCiAJCX0sCiAJCXsgfQogCX07Ci0JY29uc3QgY2hhciAqY3V0b2ZmX21tZGQgPSAiMTAvMjYiOwotCWNvbnN0IGNoYXIgKmRhdGU7Ci0JaW50IHllYXI7CisJY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKm1hdGNoOwogCisJbWF0Y2ggPSBkbWlfZmlyc3RfbWF0Y2goc3lzaWRzKTsKIAlpZiAocGRldi0+YnVzLT5udW1iZXIgIT0gMCB8fCBwZGV2LT5kZXZmbiAhPSBQQ0lfREVWRk4oMHgxMiwgMCkgfHwKLQkgICAgIWRtaV9jaGVja19zeXN0ZW0oc3lzaWRzKSkKKwkgICAgIW1hdGNoKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKgotCSAqIEFyZ2guLi4uIGJvdGggdmVyc2lvbiBhbmQgZGF0ZSBhcmUgZnJlZSBmb3JtIHN0cmluZ3MuCi0JICogTGV0J3MgaG9wZSB0aGV5J3JlIHVzaW5nIHRoZSBzYW1lIGRhdGUgZm9ybWF0IGFjcm9zcwotCSAqIGRpZmZlcmVudCB2ZXJzaW9ucy4KLQkgKi8KLQlkYXRlID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19EQVRFKTsKLQl5ZWFyID0gZG1pX2dldF95ZWFyKERNSV9CSU9TX0RBVEUpOwotCWlmIChkYXRlICYmIHN0cmxlbihkYXRlKSA+PSAxMCAmJiBkYXRlWzJdID09ICcvJyAmJiBkYXRlWzVdID09ICcvJyAmJgotCSAgICAoeWVhciA+IDIwMDcgfHwKLQkgICAgICh5ZWFyID09IDIwMDcgJiYgc3RybmNtcChkYXRlLCBjdXRvZmZfbW1kZCwgNSkgPj0gMCkpKQotCQlyZXR1cm4gZmFsc2U7CisJaWYgKG1hdGNoLT5kcml2ZXJfZGF0YSkgeworCQlpbnQgeWVhciwgbW9udGgsIGRhdGU7CisJCWNoYXIgYnVmWzldOwogCi0JZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZwZGV2LT5kZXYsICJBU1VTIE0yQS1WTTogQklPUyB0b28gb2xkLCAiCi0JCSAgICJmb3JjaW5nIDMyYml0IERNQSwgdXBkYXRlIEJJT1NcbiIpOworCQlkbWlfZ2V0X2RhdGUoRE1JX0JJT1NfREFURSwgJnllYXIsICZtb250aCwgJmRhdGUpOworCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTA0ZCUwMmQlMDJkIiwgeWVhciwgbW9udGgsIGRhdGUpOworCisJCWlmIChzdHJjbXAoYnVmLCBtYXRjaC0+ZHJpdmVyX2RhdGEpID49IDApCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZwZGV2LT5kZXYsICIlczogQklPUyB0b28gb2xkLCAiCisJCQkgICAiZm9yY2luZyAzMmJpdCBETUEsIHVwZGF0ZSBCSU9TXG4iLCBtYXRjaC0+aWRlbnQpOworCX0gZWxzZQorCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBkZXYtPmRldiwgIiVzOiB0aGlzIGJvYXJkIGNhbid0ICIKKwkJCSAgICJkbyA2NGJpdCBETUEsIGZvcmNpbmcgMzJiaXRcbiIsIG1hdGNoLT5pZGVudCk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTI4NTcsOCArMjkyNiw4IEBACiAJaWYgKGJvYXJkX2lkID09IGJvYXJkX2FoY2lfc2I3MDAgJiYgcGRldi0+cmV2aXNpb24gPj0gMHg0MCkKIAkJaHByaXYtPmZsYWdzICY9IH5BSENJX0hGTEFHX0lHTl9TRVJSX0lOVEVSTkFMOwogCi0JLyogYXBwbHkgQVNVUyBNMkFfVk0gcXVpcmsgKi8KLQlpZiAoYWhjaV9hc3VzX20yYV92bV8zMmJpdF9vbmx5KHBkZXYpKQorCS8qIGFwcGx5IHNiNjAwIDMyYml0IG9ubHkgcXVpcmsgKi8KKwlpZiAoYWhjaV9zYjYwMF8zMmJpdF9vbmx5KHBkZXYpKQogCQlocHJpdi0+ZmxhZ3MgfD0gQUhDSV9IRkxBR18zMkJJVF9PTkxZOwogCiAJaWYgKCEoaHByaXYtPmZsYWdzICYgQUhDSV9IRkxBR19OT19NU0kpKQpAQCAtMjg2OSw3ICsyOTM4LDcgQEAKIAogCS8qIHByZXBhcmUgaG9zdCAqLwogCWlmIChocHJpdi0+Y2FwICYgSE9TVF9DQVBfTkNRKQotCQlwaS5mbGFncyB8PSBBVEFfRkxBR19OQ1E7CisJCXBpLmZsYWdzIHw9IEFUQV9GTEFHX05DUSB8IEFUQV9GTEFHX0ZQRE1BX0FBOwogCiAJaWYgKGhwcml2LT5jYXAgJiBIT1NUX0NBUF9QTVApCiAJCXBpLmZsYWdzIHw9IEFUQV9GTEFHX1BNUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCmluZGV4IGFjMTc2ZGEuLjAxOTY0YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYwpAQCAtNjg5LDYgKzY4OSw3IEBACiAJc3RydWN0IGF0YV90YXNrZmlsZSB0ZiwgcHRmLCBydGY7CiAJdW5zaWduZWQgaW50IGVycl9tYXNrOwogCWNvbnN0IGNoYXIgKmxldmVsOworCWNvbnN0IGNoYXIgKmRlc2NyOwogCWNoYXIgbXNnWzYwXTsKIAlpbnQgcmM7CiAKQEAgLTczNiwxMSArNzM3LDEzIEBACiAJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJmaWx0ZXJlZCBvdXQiKTsKIAkJcmMgPSAwOwogCX0KKwlkZXNjciA9IGF0YV9nZXRfY21kX2Rlc2NyaXB0KHRmLmNvbW1hbmQpOwogCiAJYXRhX2Rldl9wcmludGsoZGV2LCBsZXZlbCwKLQkJICAgICAgICJBQ1BJIGNtZCAlMDJ4LyUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4ICVzXG4iLAorCQkgICAgICAgIkFDUEkgY21kICUwMngvJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggKCVzKSAlc1xuIiwKIAkJICAgICAgIHRmLmNvbW1hbmQsIHRmLmZlYXR1cmUsIHRmLm5zZWN0LCB0Zi5sYmFsLAotCQkgICAgICAgdGYubGJhbSwgdGYubGJhaCwgdGYuZGV2aWNlLCBtc2cpOworCQkgICAgICAgdGYubGJhbSwgdGYubGJhaCwgdGYuZGV2aWNlLAorCQkgICAgICAgKGRlc2NyID8gZGVzY3IgOiAidW5rbm93biIpLCBtc2cpOwogCiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggMDcyYmE1ZS4uZGYzMWRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC03MDksNyArNzA5LDEzIEBACiAJCWhlYWQgPSB0Zi0+ZGV2aWNlICYgMHhmOwogCQlzZWN0ID0gdGYtPmxiYWw7CiAKLQkJYmxvY2sgPSAoY3lsICogZGV2LT5oZWFkcyArIGhlYWQpICogZGV2LT5zZWN0b3JzICsgc2VjdDsKKwkJaWYgKCFzZWN0KSB7CisJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fV0FSTklORywgImRldmljZSByZXBvcnRlZCAiCisJCQkJICAgICAgICJpbnZhbGlkIENIUyBzZWN0b3IgMFxuIik7CisJCQlzZWN0ID0gMTsgLyogb2ggd2VsbCAqLworCQl9CisKKwkJYmxvY2sgPSAoY3lsICogZGV2LT5oZWFkcyArIGhlYWQpICogZGV2LT5zZWN0b3JzICsgc2VjdCAtIDE7CiAJfQogCiAJcmV0dXJuIGJsb2NrOwpAQCAtMjI5OSwyOSArMjMwNSw0OSBAQAogCXJldHVybiAoKGFwLT5jYmwgPT0gQVRBX0NCTF9TQVRBKSAmJiAoIWF0YV9pZF9pc19zYXRhKGRldi0+aWQpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0YV9kZXZfY29uZmlnX25jcShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAorc3RhdGljIGludCBhdGFfZGV2X2NvbmZpZ19uY3Eoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKIAkJCSAgICAgICBjaGFyICpkZXNjLCBzaXplX3QgZGVzY19zeikKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gZGV2LT5saW5rLT5hcDsKIAlpbnQgaGRlcHRoID0gMCwgZGRlcHRoID0gYXRhX2lkX3F1ZXVlX2RlcHRoKGRldi0+aWQpOworCXVuc2lnbmVkIGludCBlcnJfbWFzazsKKwljaGFyICphYV9kZXNjID0gIiI7CiAKIAlpZiAoIWF0YV9pZF9oYXNfbmNxKGRldi0+aWQpKSB7CiAJCWRlc2NbMF0gPSAnXDAnOwotCQlyZXR1cm47CisJCXJldHVybiAwOwogCX0KIAlpZiAoZGV2LT5ob3JrYWdlICYgQVRBX0hPUktBR0VfTk9OQ1EpIHsKIAkJc25wcmludGYoZGVzYywgZGVzY19zeiwgIk5DUSAobm90IHVzZWQpIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJfQogCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19OQ1EpIHsKIAkJaGRlcHRoID0gbWluKGFwLT5zY3NpX2hvc3QtPmNhbl9xdWV1ZSwgQVRBX01BWF9RVUVVRSAtIDEpOwogCQlkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19OQ1E7CiAJfQogCisJaWYgKCEoZGV2LT5ob3JrYWdlICYgQVRBX0hPUktBR0VfQlJPS0VOX0ZQRE1BX0FBKSAmJgorCQkoYXAtPmZsYWdzICYgQVRBX0ZMQUdfRlBETUFfQUEpICYmCisJCWF0YV9pZF9oYXNfZnBkbWFfYWEoZGV2LT5pZCkpIHsKKwkJZXJyX21hc2sgPSBhdGFfZGV2X3NldF9mZWF0dXJlKGRldiwgU0VURkVBVFVSRVNfU0FUQV9FTkFCTEUsCisJCQlTQVRBX0ZQRE1BX0FBKTsKKwkJaWYgKGVycl9tYXNrKSB7CisJCQlhdGFfZGV2X3ByaW50ayhkZXYsIEtFUk5fRVJSLCAiZmFpbGVkIHRvIGVuYWJsZSBBQSIKKwkJCQkiKGVycm9yX21hc2s9MHgleClcbiIsIGVycl9tYXNrKTsKKwkJCWlmIChlcnJfbWFzayAhPSBBQ19FUlJfREVWKSB7CisJCQkJZGV2LT5ob3JrYWdlIHw9IEFUQV9IT1JLQUdFX0JST0tFTl9GUERNQV9BQTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfSBlbHNlCisJCQlhYV9kZXNjID0gIiwgQUEiOworCX0KKwogCWlmIChoZGVwdGggPj0gZGRlcHRoKQotCQlzbnByaW50ZihkZXNjLCBkZXNjX3N6LCAiTkNRIChkZXB0aCAlZCkiLCBkZGVwdGgpOworCQlzbnByaW50ZihkZXNjLCBkZXNjX3N6LCAiTkNRIChkZXB0aCAlZCklcyIsIGRkZXB0aCwgYWFfZGVzYyk7CiAJZWxzZQotCQlzbnByaW50ZihkZXNjLCBkZXNjX3N6LCAiTkNRIChkZXB0aCAlZC8lZCkiLCBoZGVwdGgsIGRkZXB0aCk7CisJCXNucHJpbnRmKGRlc2MsIGRlc2Nfc3osICJOQ1EgKGRlcHRoICVkLyVkKSVzIiwgaGRlcHRoLAorCQkJZGRlcHRoLCBhYV9kZXNjKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yNDYxLDcgKzI0ODcsNyBAQAogCiAJCWlmIChhdGFfaWRfaGFzX2xiYShpZCkpIHsKIAkJCWNvbnN0IGNoYXIgKmxiYV9kZXNjOwotCQkJY2hhciBuY3FfZGVzY1syMF07CisJCQljaGFyIG5jcV9kZXNjWzI0XTsKIAogCQkJbGJhX2Rlc2MgPSAiTEJBIjsKIAkJCWRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX0xCQTsKQEAgLTI0NzUsNyArMjUwMSw5IEBACiAJCQl9CiAKIAkJCS8qIGNvbmZpZyBOQ1EgKi8KLQkJCWF0YV9kZXZfY29uZmlnX25jcShkZXYsIG5jcV9kZXNjLCBzaXplb2YobmNxX2Rlc2MpKTsKKwkJCXJjID0gYXRhX2Rldl9jb25maWdfbmNxKGRldiwgbmNxX2Rlc2MsIHNpemVvZihuY3FfZGVzYykpOworCQkJaWYgKHJjKQorCQkJCXJldHVybiByYzsKIAogCQkJLyogcHJpbnQgZGV2aWNlIGluZm8gdG8gZG1lc2cgKi8KIAkJCWlmIChhdGFfbXNnX2RydihhcCkgJiYgcHJpbnRfaW5mbykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwppbmRleCA3OTcxMWI2Li5hMDQ0ODhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KICNpbmNsdWRlICIuLi9zY3NpL3Njc2lfdHJhbnNwb3J0X2FwaS5oIgogCiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CkBAIC05OTksNyArMTAwMCw5IEBACiAgKglhdGFfcG9ydF9mcmVlemUgLSBhYm9ydCAmIGZyZWV6ZSBwb3J0CiAgKglAYXA6IEFUQSBwb3J0IHRvIGZyZWV6ZQogICoKLSAqCUFib3J0IGFuZCBmcmVlemUgQGFwLgorICoJQWJvcnQgYW5kIGZyZWV6ZSBAYXAuICBUaGUgZnJlZXplIG9wZXJhdGlvbiBtdXN0IGJlIGNhbGxlZAorICoJZmlyc3QsIGJlY2F1c2Ugc29tZSBoYXJkd2FyZSByZXF1aXJlcyBzcGVjaWFsIG9wZXJhdGlvbnMKKyAqCWJlZm9yZSB0aGUgdGFza2ZpbGUgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NpYmxlLgogICoKICAqCUxPQ0tJTkc6CiAgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0IGxvY2spCkBAIC0xMDEzLDggKzEwMTYsOCBAQAogCiAJV0FSTl9PTighYXAtPm9wcy0+ZXJyb3JfaGFuZGxlcik7CiAKLQlucl9hYm9ydGVkID0gYXRhX3BvcnRfYWJvcnQoYXApOwogCV9fYXRhX3BvcnRfZnJlZXplKGFwKTsKKwlucl9hYm9ydGVkID0gYXRhX3BvcnRfYWJvcnQoYXApOwogCiAJcmV0dXJuIG5yX2Fib3J0ZWQ7CiB9CkBAIC0yMTEwLDYgKzIxMTMsMTE2IEBACiB9CiAKIC8qKgorICoJYXRhX2dldF9jbWRfZGVzY3JpcHQgLSBnZXQgZGVzY3JpcHRpb24gZm9yIEFUQSBjb21tYW5kCisgKglAY29tbWFuZDogQVRBIGNvbW1hbmQgY29kZSB0byBnZXQgZGVzY3JpcHRpb24gZm9yCisgKgorICoJUmV0dXJuIGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgZ2l2ZW4gY29tbWFuZCwgb3IgTlVMTCBpZiB0aGUKKyAqCWNvbW1hbmQgaXMgbm90IGtub3duLgorICoKKyAqCUxPQ0tJTkc6CisgKglOb25lCisgKi8KK2NvbnN0IGNoYXIgKmF0YV9nZXRfY21kX2Rlc2NyaXB0KHU4IGNvbW1hbmQpCit7CisjaWZkZWYgQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SCisJc3RhdGljIGNvbnN0IHN0cnVjdAorCXsKKwkJdTggY29tbWFuZDsKKwkJY29uc3QgY2hhciAqdGV4dDsKKwl9IGNtZF9kZXNjcltdID0geworCQl7IEFUQV9DTURfREVWX1JFU0VULAkJIkRFVklDRSBSRVNFVCIgfSwKKwkJeyBBVEFfQ01EX0NIS19QT1dFUiwgCQkiQ0hFQ0sgUE9XRVIgTU9ERSIgfSwKKwkJeyBBVEFfQ01EX1NUQU5EQlksIAkJIlNUQU5EQlkiIH0sCisJCXsgQVRBX0NNRF9JRExFLCAJCSJJRExFIiB9LAorCQl7IEFUQV9DTURfRURELCAJCQkiRVhFQ1VURSBERVZJQ0UgRElBR05PU1RJQyIgfSwKKwkJeyBBVEFfQ01EX0RPV05MT0FEX01JQ1JPLCAgIAkiRE9XTkxPQUQgTUlDUk9DT0RFIiB9LAorCQl7IEFUQV9DTURfTk9QLAkJCSJOT1AiIH0sCisJCXsgQVRBX0NNRF9GTFVTSCwgCQkiRkxVU0ggQ0FDSEUiIH0sCisJCXsgQVRBX0NNRF9GTFVTSF9FWFQsIAkJIkZMVVNIIENBQ0hFIEVYVCIgfSwKKwkJeyBBVEFfQ01EX0lEX0FUQSwgIAkJIklERU5USUZZIERFVklDRSIgfSwKKwkJeyBBVEFfQ01EX0lEX0FUQVBJLCAJCSJJREVOVElGWSBQQUNLRVQgREVWSUNFIiB9LAorCQl7IEFUQV9DTURfU0VSVklDRSwgCQkiU0VSVklDRSIgfSwKKwkJeyBBVEFfQ01EX1JFQUQsIAkJIlJFQUQgRE1BIiB9LAorCQl7IEFUQV9DTURfUkVBRF9FWFQsIAkJIlJFQUQgRE1BIEVYVCIgfSwKKwkJeyBBVEFfQ01EX1JFQURfUVVFVUVELCAJCSJSRUFEIERNQSBRVUVVRUQiIH0sCisJCXsgQVRBX0NNRF9SRUFEX1NUUkVBTV9FWFQsIAkiUkVBRCBTVFJFQU0gRVhUIiB9LAorCQl7IEFUQV9DTURfUkVBRF9TVFJFQU1fRE1BX0VYVCwgICJSRUFEIFNUUkVBTSBETUEgRVhUIiB9LAorCQl7IEFUQV9DTURfV1JJVEUsIAkJIldSSVRFIERNQSIgfSwKKwkJeyBBVEFfQ01EX1dSSVRFX0VYVCwgCQkiV1JJVEUgRE1BIEVYVCIgfSwKKwkJeyBBVEFfQ01EX1dSSVRFX1FVRVVFRCwgCSJXUklURSBETUEgUVVFVUVEIEVYVCIgfSwKKwkJeyBBVEFfQ01EX1dSSVRFX1NUUkVBTV9FWFQsIAkiV1JJVEUgU1RSRUFNIEVYVCIgfSwKKwkJeyBBVEFfQ01EX1dSSVRFX1NUUkVBTV9ETUFfRVhULCAiV1JJVEUgU1RSRUFNIERNQSBFWFQiIH0sCisJCXsgQVRBX0NNRF9XUklURV9GVUFfRVhULAkiV1JJVEUgRE1BIEZVQSBFWFQiIH0sCisJCXsgQVRBX0NNRF9XUklURV9RVUVVRURfRlVBX0VYVCwgIldSSVRFIERNQSBRVUVVRUQgRlVBIEVYVCIgfSwKKwkJeyBBVEFfQ01EX0ZQRE1BX1JFQUQsCQkiUkVBRCBGUERNQSBRVUVVRUQiIH0sCisJCXsgQVRBX0NNRF9GUERNQV9XUklURSwJCSJXUklURSBGUERNQSBRVUVVRUQiIH0sCisJCXsgQVRBX0NNRF9QSU9fUkVBRCwJCSJSRUFEIFNFQ1RPUihTKSIgfSwKKwkJeyBBVEFfQ01EX1BJT19SRUFEX0VYVCwJCSJSRUFEIFNFQ1RPUihTKSBFWFQiIH0sCisJCXsgQVRBX0NNRF9QSU9fV1JJVEUsCQkiV1JJVEUgU0VDVE9SKFMpIiB9LAorCQl7IEFUQV9DTURfUElPX1dSSVRFX0VYVCwJIldSSVRFIFNFQ1RPUihTKSBFWFQiIH0sCisJCXsgQVRBX0NNRF9SRUFEX01VTFRJLAkJIlJFQUQgTVVMVElQTEUiIH0sCisJCXsgQVRBX0NNRF9SRUFEX01VTFRJX0VYVCwJIlJFQUQgTVVMVElQTEUgRVhUIiB9LAorCQl7IEFUQV9DTURfV1JJVEVfTVVMVEksCQkiV1JJVEUgTVVMVElQTEUiIH0sCisJCXsgQVRBX0NNRF9XUklURV9NVUxUSV9FWFQsCSJXUklURSBNVUxUSVBMRSBFWFQiIH0sCisJCXsgQVRBX0NNRF9XUklURV9NVUxUSV9GVUFfRVhULCAJIldSSVRFIE1VTFRJUExFIEZVQSBFWFQiIH0sCisJCXsgQVRBX0NNRF9TRVRfRkVBVFVSRVMsCQkiU0VUIEZFQVRVUkVTIiB9LAorCQl7IEFUQV9DTURfU0VUX01VTFRJLAkJIlNFVCBNVUxUSVBMRSBNT0RFIiB9LAorCQl7IEFUQV9DTURfVkVSSUZZLAkJIlJFQUQgVkVSSUZZIFNFQ1RPUihTKSIgfSwKKwkJeyBBVEFfQ01EX1ZFUklGWV9FWFQsCQkiUkVBRCBWRVJJRlkgU0VDVE9SKFMpIEVYVCIgfSwKKwkJeyBBVEFfQ01EX1dSSVRFX1VOQ09SUl9FWFQsCSJXUklURSBVTkNPUlJFQ1RBQkxFIEVYVCIgfSwKKwkJeyBBVEFfQ01EX1NUQU5EQllOT1cxLAkJIlNUQU5EQlkgSU1NRURJQVRFIiB9LAorCQl7IEFUQV9DTURfSURMRUlNTUVESUFURSwJIklETEUgSU1NRURJQVRFIiB9LAorCQl7IEFUQV9DTURfU0xFRVAsCQkiU0xFRVAiIH0sCisJCXsgQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMsCSJJTklUSUFMSVpFIERFVklDRSBQQVJBTUVURVJTIiB9LAorCQl7IEFUQV9DTURfUkVBRF9OQVRJVkVfTUFYLAkiUkVBRCBOQVRJVkUgTUFYIEFERFJFU1MiIH0sCisJCXsgQVRBX0NNRF9SRUFEX05BVElWRV9NQVhfRVhULAkiUkVBRCBOQVRJVkUgTUFYIEFERFJFU1MgRVhUIiB9LAorCQl7IEFUQV9DTURfU0VUX01BWCwJCSJTRVQgTUFYIEFERFJFU1MiIH0sCisJCXsgQVRBX0NNRF9TRVRfTUFYX0VYVCwJCSJTRVQgTUFYIEFERFJFU1MgRVhUIiB9LAorCQl7IEFUQV9DTURfUkVBRF9MT0dfRVhULAkJIlJFQUQgTE9HIEVYVCIgfSwKKwkJeyBBVEFfQ01EX1dSSVRFX0xPR19FWFQsCSJXUklURSBMT0cgRVhUIiB9LAorCQl7IEFUQV9DTURfUkVBRF9MT0dfRE1BX0VYVCwJIlJFQUQgTE9HIERNQSBFWFQiIH0sCisJCXsgQVRBX0NNRF9XUklURV9MT0dfRE1BX0VYVCwgCSJXUklURSBMT0cgRE1BIEVYVCIgfSwKKwkJeyBBVEFfQ01EX1RSVVNURURfUkNWLAkJIlRSVVNURUQgUkVDRUlWRSIgfSwKKwkJeyBBVEFfQ01EX1RSVVNURURfUkNWX0RNQSwgCSJUUlVTVEVEIFJFQ0VJVkUgRE1BIiB9LAorCQl7IEFUQV9DTURfVFJVU1RFRF9TTkQsCQkiVFJVU1RFRCBTRU5EIiB9LAorCQl7IEFUQV9DTURfVFJVU1RFRF9TTkRfRE1BLCAJIlRSVVNURUQgU0VORCBETUEiIH0sCisJCXsgQVRBX0NNRF9QTVBfUkVBRCwJCSJSRUFEIEJVRkZFUiIgfSwKKwkJeyBBVEFfQ01EX1BNUF9XUklURSwJCSJXUklURSBCVUZGRVIiIH0sCisJCXsgQVRBX0NNRF9DT05GX09WRVJMQVksCQkiREVWSUNFIENPTkZJR1VSQVRJT04gT1ZFUkxBWSIgfSwKKwkJeyBBVEFfQ01EX1NFQ19TRVRfUEFTUywJCSJTRUNVUklUWSBTRVQgUEFTU1dPUkQiIH0sCisJCXsgQVRBX0NNRF9TRUNfVU5MT0NLLAkJIlNFQ1VSSVRZIFVOTE9DSyIgfSwKKwkJeyBBVEFfQ01EX1NFQ19FUkFTRV9QUkVQLAkiU0VDVVJJVFkgRVJBU0UgUFJFUEFSRSIgfSwKKwkJeyBBVEFfQ01EX1NFQ19FUkFTRV9VTklULAkiU0VDVVJJVFkgRVJBU0UgVU5JVCIgfSwKKwkJeyBBVEFfQ01EX1NFQ19GUkVFWkVfTE9DSywJIlNFQ1VSSVRZIEZSRUVaRSBMT0NLIiB9LAorCQl7IEFUQV9DTURfU0VDX0RJU0FCTEVfUEFTUywJIlNFQ1VSSVRZIERJU0FCTEUgUEFTU1dPUkQiIH0sCisJCXsgQVRBX0NNRF9DT05GSUdfU1RSRUFNLAkiQ09ORklHVVJFIFNUUkVBTSIgfSwKKwkJeyBBVEFfQ01EX1NNQVJULAkJIlNNQVJUIiB9LAorCQl7IEFUQV9DTURfTUVESUFfTE9DSywJCSJET09SIExPQ0siIH0sCisJCXsgQVRBX0NNRF9NRURJQV9VTkxPQ0ssCQkiRE9PUiBVTkxPQ0siIH0sCisJCXsgQVRBX0NNRF9DSEtfTUVEX0NSRF9UWVAsIAkiQ0hFQ0sgTUVESUEgQ0FSRCBUWVBFIiB9LAorCQl7IEFUQV9DTURfQ0ZBX1JFUV9FWFRfRVJSLCAJIkNGQSBSRVFVRVNUIEVYVEVOREVEIEVSUk9SIiB9LAorCQl7IEFUQV9DTURfQ0ZBX1dSSVRFX05FLAkJIkNGQSBXUklURSBTRUNUT1JTIFdJVEhPVVQgRVJBU0UiIH0sCisJCXsgQVRBX0NNRF9DRkFfVFJBTlNfU0VDVCwJIkNGQSBUUkFOU0xBVEUgU0VDVE9SIiB9LAorCQl7IEFUQV9DTURfQ0ZBX0VSQVNFLAkJIkNGQSBFUkFTRSBTRUNUT1JTIiB9LAorCQl7IEFUQV9DTURfQ0ZBX1dSSVRFX01VTFRfTkUsIAkiQ0ZBIFdSSVRFIE1VTFRJUExFIFdJVEhPVVQgRVJBU0UiIH0sCisJCXsgQVRBX0NNRF9SRUFEX0xPTkcsCQkiUkVBRCBMT05HICh3aXRoIHJldHJpZXMpIiB9LAorCQl7IEFUQV9DTURfUkVBRF9MT05HX09OQ0UsCSJSRUFEIExPTkcgKHdpdGhvdXQgcmV0cmllcykiIH0sCisJCXsgQVRBX0NNRF9XUklURV9MT05HLAkJIldSSVRFIExPTkcgKHdpdGggcmV0cmllcykiIH0sCisJCXsgQVRBX0NNRF9XUklURV9MT05HX09OQ0UsCSJXUklURSBMT05HICh3aXRob3V0IHJldHJpZXMpIiB9LAorCQl7IEFUQV9DTURfUkVTVE9SRSwJCSJSRUNBTElCUkFURSIgfSwKKwkJeyAwLAkJCQlOVUxMIH0gLyogdGVybWluYXRlIGxpc3QgKi8KKwl9OworCisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgY21kX2Rlc2NyW2ldLnRleHQ7IGkrKykKKwkJaWYgKGNtZF9kZXNjcltpXS5jb21tYW5kID09IGNvbW1hbmQpCisJCQlyZXR1cm4gY21kX2Rlc2NyW2ldLnRleHQ7CisjZW5kaWYKKworCXJldHVybiBOVUxMOworfQorCisvKioKICAqCWF0YV9laF9saW5rX3JlcG9ydCAtIHJlcG9ydCBlcnJvciBoYW5kbGluZyB0byB1c2VyCiAgKglAbGluazogQVRBIGxpbmsgRUggaXMgZ29pbmcgb24KICAqCkBAIC0yMTc1LDYgKzIyODgsNyBAQAogCQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fRVJSLCAiJXNcbiIsIGRlc2MpOwogCX0KIAorI2lmZGVmIENPTkZJR19BVEFfVkVSQk9TRV9FUlJPUgogCWlmIChlaGMtPmkuc2Vycm9yKQogCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9FUlIsCiAJCSAgIlNFcnJvcjogeyAlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzfVxuIiwKQEAgLTIxOTUsNiArMjMwOSw3IEBACiAJCSAgZWhjLT5pLnNlcnJvciAmIFNFUlJfVFJBTlNfU1RfRVJST1IgPyAiVHJTdGFUcm5zICIgOiAiIiwKIAkJICBlaGMtPmkuc2Vycm9yICYgU0VSUl9VTlJFQ09HX0ZJUyA/ICJVbnJlY0ZJUyAiIDogIiIsCiAJCSAgZWhjLT5pLnNlcnJvciAmIFNFUlJfREVWX1hDSEcgPyAiRGV2RXhjaCAiIDogIiIpOworI2VuZGlmCiAKIAlmb3IgKHRhZyA9IDA7IHRhZyA8IEFUQV9NQVhfUVVFVUU7IHRhZysrKSB7CiAJCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMgPSBfX2F0YV9xY19mcm9tX3RhZyhhcCwgdGFnKTsKQEAgLTIyMjYsMTQgKzIzNDEsMjMgQEAKIAkJCQkgZG1hX3N0cltxYy0+ZG1hX2Rpcl0pOwogCQl9CiAKLQkJaWYgKGF0YV9pc19hdGFwaShxYy0+dGYucHJvdG9jb2wpKQotCQkJc25wcmludGYoY2RiX2J1Ziwgc2l6ZW9mKGNkYl9idWYpLAorCQlpZiAoYXRhX2lzX2F0YXBpKHFjLT50Zi5wcm90b2NvbCkpIHsKKwkJCWlmIChxYy0+c2NzaWNtZCkKKwkJCQlzY3NpX3ByaW50X2NvbW1hbmQocWMtPnNjc2ljbWQpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKGNkYl9idWYsIHNpemVvZihjZGJfYnVmKSwKIAkJCQkgImNkYiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggICIKIAkJCQkgIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuICAgICAgICAgIiwKIAkJCQkgY2RiWzBdLCBjZGJbMV0sIGNkYlsyXSwgY2RiWzNdLAogCQkJCSBjZGJbNF0sIGNkYls1XSwgY2RiWzZdLCBjZGJbN10sCiAJCQkJIGNkYls4XSwgY2RiWzldLCBjZGJbMTBdLCBjZGJbMTFdLAogCQkJCSBjZGJbMTJdLCBjZGJbMTNdLCBjZGJbMTRdLCBjZGJbMTVdKTsKKwkJfSBlbHNlIHsKKwkJCWNvbnN0IGNoYXIgKmRlc2NyID0gYXRhX2dldF9jbWRfZGVzY3JpcHQoY21kLT5jb21tYW5kKTsKKwkJCWlmIChkZXNjcikKKwkJCQlhdGFfZGV2X3ByaW50ayhxYy0+ZGV2LCBLRVJOX0VSUiwKKwkJCQkJImZhaWxlZCBjb21tYW5kOiAlc1xuIiwgZGVzY3IpOworCQl9CiAKIAkJYXRhX2Rldl9wcmludGsocWMtPmRldiwgS0VSTl9FUlIsCiAJCQkiY21kICUwMngvJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4LyUwMng6JTAyeDolMDJ4OiUwMng6JTAyeC8lMDJ4ICIKQEAgLTIyNTIsNiArMjM3Niw3IEBACiAJCQlyZXMtPmRldmljZSwgcWMtPmVycl9tYXNrLCBhdGFfZXJyX3N0cmluZyhxYy0+ZXJyX21hc2spLAogCQkJcWMtPmVycl9tYXNrICYgQUNfRVJSX05DUSA/ICIgPEY+IiA6ICIiKTsKIAorI2lmZGVmIENPTkZJR19BVEFfVkVSQk9TRV9FUlJPUgogCQlpZiAocmVzLT5jb21tYW5kICYgKEFUQV9CVVNZIHwgQVRBX0RSRFkgfCBBVEFfREYgfCBBVEFfRFJRIHwKIAkJCQkgICAgQVRBX0VSUikpIHsKIAkJCWlmIChyZXMtPmNvbW1hbmQgJiBBVEFfQlVTWSkKQEAgLTIyNzUsNiArMjQwMCw3IEBACiAJCQkgIHJlcy0+ZmVhdHVyZSAmIEFUQV9VTkMgPyAiVU5DICIgOiAiIiwKIAkJCSAgcmVzLT5mZWF0dXJlICYgQVRBX0lETkYgPyAiSURORiAiIDogIiIsCiAJCQkgIHJlcy0+ZmVhdHVyZSAmIEFUQV9BQk9SVEVEID8gIkFCUlQgIiA6ICIiKTsKKyNlbmRpZgogCX0KIH0KIApAQCAtMjU3NCwxMSArMjcwMCwxNyBAQAogCQkJcG9zdHJlc2V0KHNsYXZlLCBjbGFzc2VzKTsKIAl9CiAKLQkvKiBjbGVhciBjYWNoZWQgU0Vycm9yICovCisJLyoKKwkgKiBTb21lIGNvbnRyb2xsZXJzIGNhbid0IGJlIGZyb3plbiB2ZXJ5IHdlbGwgYW5kIG1heSBzZXQKKwkgKiBzcHVydWlvdXMgZXJyb3IgY29uZGl0aW9ucyBkdXJpbmcgcmVzZXQuICBDbGVhciBhY2N1bXVsYXRlZAorCSAqIGVycm9yIGluZm9ybWF0aW9uLiAgQXMgcmVzZXQgaXMgdGhlIGZpbmFsIHJlY292ZXJ5IGFjdGlvbiwKKwkgKiBub3RoaW5nIGlzIGxvc3QgYnkgZG9pbmcgdGhpcy4KKwkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZShsaW5rLT5hcC0+bG9jaywgZmxhZ3MpOwotCWxpbmstPmVoX2luZm8uc2Vycm9yID0gMDsKKwltZW1zZXQoJmxpbmstPmVoX2luZm8sIDAsIHNpemVvZihsaW5rLT5laF9pbmZvKSk7CiAJaWYgKHNsYXZlKQotCQlzbGF2ZS0+ZWhfaW5mby5zZXJyb3IgPSAwOworCQltZW1zZXQoJnNsYXZlLT5laF9pbmZvLCAwLCBzaXplb2YobGluay0+ZWhfaW5mbykpOworCWFwLT5wZmxhZ3MgJj0gfkFUQV9QRkxBR19FSF9QRU5ESU5HOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobGluay0+YXAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIE1ha2Ugc3VyZSBvbmxpbmVuZXNzIGFuZCBjbGFzc2lmaWNhdGlvbiByZXN1bHQgY29ycmVzcG9uZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1wbXAuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1wbXAuYwppbmRleCA2MTlmMmMzLi41MWYwZmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtcG1wLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXBtcC5jCkBAIC0yMjEsNiArMjIxLDggQEAKIHsKIAl1MzIgcmV2ID0gZ3NjcltTQVRBX1BNUF9HU0NSX1JFVl07CiAKKwlpZiAocmV2ICYgKDEgPDwgMykpCisJCXJldHVybiAiMS4yIjsKIAlpZiAocmV2ICYgKDEgPDwgMikpCiAJCXJldHVybiAiMS4xIjsKIAlpZiAocmV2ICYgKDEgPDwgMSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwppbmRleCBkMGRmZWVmLi5iNGVlMjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKQEAgLTExMTksMTAgKzExMTksNiBAQAogCiAJCWJsa19xdWV1ZV9kbWFfZHJhaW4ocSwgYXRhcGlfZHJhaW5fbmVlZGVkLCBidWYsIEFUQVBJX01BWF9EUkFJTik7CiAJfSBlbHNlIHsKLQkJaWYgKGF0YV9pZF9pc19zc2QoZGV2LT5pZCkpCi0JCQlxdWV1ZV9mbGFnX3NldF91bmxvY2tlZChRVUVVRV9GTEFHX05PTlJPVCwKLQkJCQkJCXNkZXYtPnJlcXVlc3RfcXVldWUpOwotCiAJCS8qIEFUQSBkZXZpY2VzIG11c3QgYmUgc2VjdG9yIGFsaWduZWQgKi8KIAkJYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfYWxpZ25tZW50KHNkZXYtPnJlcXVlc3RfcXVldWUsCiAJCQkJCSAgICAgICBBVEFfU0VDVF9TSVpFIC0gMSk7CkBAIC0xMjU3LDIzICsxMjUzLDYgQEAKIAlyZXR1cm4gcXVldWVfZGVwdGg7CiB9CiAKLS8qIFhYWDogZm9yIHNwaW5kb3duIHdhcm5pbmcgKi8KLXN0YXRpYyB2b2lkIGF0YV9kZWxheWVkX2RvbmVfdGltZXJmbih1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kID0gKHZvaWQgKilhcmc7Ci0KLQlzY21kLT5zY3NpX2RvbmUoc2NtZCk7Ci19Ci0KLS8qIFhYWDogZm9yIHNwaW5kb3duIHdhcm5pbmcgKi8KLXN0YXRpYyB2b2lkIGF0YV9kZWxheWVkX2RvbmUoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKLXsKLQlzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci0KLQlzZXR1cF90aW1lcigmdGltZXIsIGF0YV9kZWxheWVkX2RvbmVfdGltZXJmbiwgKHVuc2lnbmVkIGxvbmcpc2NtZCk7Ci0JbW9kX3RpbWVyKCZ0aW1lciwgamlmZmllcyArIDUgKiBIWik7Ci19Ci0KIC8qKgogICoJYXRhX3Njc2lfc3RhcnRfc3RvcF94bGF0IC0gVHJhbnNsYXRlIFNDU0kgU1RBUlQgU1RPUCBVTklUIGNvbW1hbmQKICAqCUBxYzogU3RvcmFnZSBmb3IgdHJhbnNsYXRlZCBBVEEgdGFza2ZpbGUKQEAgLTEzMzgsMzIgKzEzMTcsNiBAQAogCQkgICAgIHN5c3RlbV9lbnRlcmluZ19oaWJlcm5hdGlvbigpKQogCQkJZ290byBza2lwOwogCi0JCS8qIFhYWDogVGhpcyBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgd2lsbCBiZQotCQkgKiByZW1vdmVkLiAgUmVhZCBEb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKLQkJICogZm9yIG1vcmUgaW5mby4KLQkJICovCi0JCWlmICgocWMtPmRldi0+ZmxhZ3MgJiBBVEFfREZMQUdfU1BVTkRPV04pICYmCi0JCSAgICAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9IQUxUIHx8Ci0JCSAgICAgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpKSB7Ci0JCQlzdGF0aWMgdW5zaWduZWQgbG9uZyB3YXJuZWQ7Ci0KLQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmd2FybmVkKSkgewotCQkJCWF0YV9kZXZfcHJpbnRrKHFjLT5kZXYsIEtFUk5fV0FSTklORywKLQkJCQkJIkRJU0sgTUlHSFQgTk9UIEJFIFNQVU4gRE9XTiBQUk9QRVJMWS4gIgotCQkJCQkiVVBEQVRFIFNIVVRET1dOIFVUSUxJVFlcbiIpOwotCQkJCWF0YV9kZXZfcHJpbnRrKHFjLT5kZXYsIEtFUk5fV0FSTklORywKLQkJCQkJIkZvciBtb3JlIGluZm8sIHZpc2l0ICIKLQkJCQkJImh0dHA6Ly9saW51eC1hdGEub3JnL3NodXRkb3duLmh0bWxcbiIpOwotCi0JCQkJLyogLT5zY3NpX2RvbmUgaXMgbm90IHVzZWQsIHVzZSBpdCBmb3IKLQkJCQkgKiBkZWxheWVkIGNvbXBsZXRpb24uCi0JCQkJICovCi0JCQkJc2NtZC0+c2NzaV9kb25lID0gcWMtPnNjc2lkb25lOwotCQkJCXFjLT5zY3NpZG9uZSA9IGF0YV9kZWxheWVkX2RvbmU7Ci0JCQl9Ci0JCQlnb3RvIHNraXA7Ci0JCX0KLQogCQkvKiBJc3N1ZSBBVEEgU1RBTkRCWSBJTU1FRElBVEUgY29tbWFuZCAqLwogCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfU1RBTkRCWU5PVzE7CiAJfQpAQCAtMTc2NCwxNCArMTcxNyw2IEBACiAJCX0KIAl9CiAKLQkvKiBYWFg6IHRyYWNrIHNwaW5kb3duIHN0YXRlIGZvciBzcGluZG93biBza2lwcGluZyBhbmQgd2FybmluZyAqLwotCWlmICh1bmxpa2VseShxYy0+dGYuY29tbWFuZCA9PSBBVEFfQ01EX1NUQU5EQlkgfHwKLQkJICAgICBxYy0+dGYuY29tbWFuZCA9PSBBVEFfQ01EX1NUQU5EQllOT1cxKSkKLQkJcWMtPmRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX1NQVU5ET1dOOwotCWVsc2UgaWYgKGxpa2VseShzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX0hBTFQgJiYKLQkJCXN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUE9XRVJfT0ZGKSkKLQkJcWMtPmRldi0+ZmxhZ3MgJj0gfkFUQV9ERkxBR19TUFVORE9XTjsKLQogCWlmIChuZWVkX3NlbnNlICYmICFhcC0+b3BzLT5lcnJvcl9oYW5kbGVyKQogCQlhdGFfZHVtcF9zdGF0dXMoYXAtPnByaW50X2lkLCAmcWMtPnJlc3VsdF90Zik7CiAKQEAgLTI4MTUsMjggKzI3NjAsNiBAQAogCQlnb3RvIGludmFsaWRfZmxkOwogCiAJLyoKLQkgKiBGaWx0ZXIgVFBNIGNvbW1hbmRzIGJ5IGRlZmF1bHQuIFRoZXNlIHByb3ZpZGUgYW4KLQkgKiBlc3NlbnRpYWxseSB1bmNvbnRyb2xsZWQgZW5jcnlwdGVkICJiYWNrIGRvb3IiIGJldHdlZW4KLQkgKiBhcHBsaWNhdGlvbnMgYW5kIHRoZSBkaXNrLiBTZXQgbGliYXRhLmFsbG93X3RwbT0xIGlmIHlvdQotCSAqIGhhdmUgYSByZWFsIHJlYXNvbiBmb3Igd2FudGluZyB0byB1c2UgdGhlbS4gVGhpcyBlbnN1cmVzCi0JICogdGhhdCBpbnN0YWxsZWQgc29mdHdhcmUgY2Fubm90IGVhc2lseSBtZXNzIHN0dWZmIHVwIHdpdGhvdXQKLQkgKiB1c2VyIGludGVudC4gRFZSIHR5cGUgdXNlcnMgd2lsbCBwcm9iYWJseSBzaGlwIHdpdGggdGhpcyBlbmFibGVkCi0JICogZm9yIG1vdmllIGNvbnRlbnQgbWFuYWdlbWVudC4KLQkgKgotCSAqIE5vdGUgdGhhdCBmb3IgQVRBOCB3ZSBjYW4gaXNzdWUgYSBEQ1MgY2hhbmdlIGFuZCBEQ1MgZnJlZXplIGxvY2sKLQkgKiBmb3IgdGhpcyBhbmQgc2hvdWxkIGRvIGluIGZ1dHVyZSBidXQgdGhhdCBpdCBpcyBub3Qgc3VmZmljaWVudCBhcwotCSAqIERDUyBpcyBhbiBvcHRpb25hbCBmZWF0dXJlIHNldC4gVGh1cyB3ZSBhbHNvIGRvIHRoZSBzb2Z0d2FyZSBmaWx0ZXIKLQkgKiBzbyB0aGF0IHdlIGNvbXBseSB3aXRoIHRoZSBUQyBjb25zb3J0aXVtIHN0YXRlZCBnb2FsIHRoYXQgdGhlIHVzZXIKLQkgKiBjYW4gdHVybiBvZmYgVEMgZmVhdHVyZXMgb2YgdGhlaXIgc3lzdGVtLgotCSAqLwotCWlmICh0Zi0+Y29tbWFuZCA+PSAweDVDICYmIHRmLT5jb21tYW5kIDw9IDB4NUYgJiYgIWxpYmF0YV9hbGxvd190cG0pCi0JCWdvdG8gaW52YWxpZF9mbGQ7Ci0KLQkvKiBXZSBtYXkgbm90IGlzc3VlIERNQSBjb21tYW5kcyBpZiBubyBETUEgbW9kZSBpcyBzZXQgKi8KLQlpZiAodGYtPnByb3RvY29sID09IEFUQV9QUk9UX0RNQSAmJiBkZXYtPmRtYV9tb2RlID09IDApCi0JCWdvdG8gaW52YWxpZF9mbGQ7Ci0KLQkvKgogCSAqIDEyIGFuZCAxNiBieXRlIENEQnMgdXNlIGRpZmZlcmVudCBvZmZzZXRzIHRvCiAJICogcHJvdmlkZSB0aGUgdmFyaW91cyByZWdpc3RlciB2YWx1ZXMuCiAJICovCkBAIC0yODg1LDYgKzI4MDgsNDEgQEAKIAl0Zi0+ZGV2aWNlID0gZGV2LT5kZXZubyA/CiAJCXRmLT5kZXZpY2UgfCBBVEFfREVWMSA6IHRmLT5kZXZpY2UgJiB+QVRBX0RFVjE7CiAKKwkvKiBSRUFEL1dSSVRFIExPTkcgdXNlIGEgbm9uLXN0YW5kYXJkIHNlY3Rfc2l6ZSAqLworCXFjLT5zZWN0X3NpemUgPSBBVEFfU0VDVF9TSVpFOworCXN3aXRjaCAodGYtPmNvbW1hbmQpIHsKKwljYXNlIEFUQV9DTURfUkVBRF9MT05HOgorCWNhc2UgQVRBX0NNRF9SRUFEX0xPTkdfT05DRToKKwljYXNlIEFUQV9DTURfV1JJVEVfTE9ORzoKKwljYXNlIEFUQV9DTURfV1JJVEVfTE9OR19PTkNFOgorCQlpZiAodGYtPnByb3RvY29sICE9IEFUQV9QUk9UX1BJTyB8fCB0Zi0+bnNlY3QgIT0gMSkKKwkJCWdvdG8gaW52YWxpZF9mbGQ7CisJCXFjLT5zZWN0X3NpemUgPSBzY3NpX2J1ZmZsZW4oc2NtZCk7CisJfQorCisJLyoKKwkgKiBTZXQgZmxhZ3Mgc28gdGhhdCBhbGwgcmVnaXN0ZXJzIHdpbGwgYmUgd3JpdHRlbiwgcGFzcyBvbgorCSAqIHdyaXRlIGluZGljYXRpb24gKHVzZWQgZm9yIFBJTy9ETUEgc2V0dXApLCByZXN1bHQgVEYgaXMKKwkgKiBjb3BpZWQgYmFjayBhbmQgd2UgZG9uJ3Qgd2hpbmUgdG9vIG11Y2ggYWJvdXQgaXRzIGZhaWx1cmUuCisJICovCisJdGYtPmZsYWdzID0gQVRBX1RGTEFHX0lTQUREUiB8IEFUQV9URkxBR19ERVZJQ0U7CisJaWYgKHNjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCXRmLT5mbGFncyB8PSBBVEFfVEZMQUdfV1JJVEU7CisKKwlxYy0+ZmxhZ3MgfD0gQVRBX1FDRkxBR19SRVNVTFRfVEYgfCBBVEFfUUNGTEFHX1FVSUVUOworCisJLyoKKwkgKiBTZXQgdHJhbnNmZXIgbGVuZ3RoLgorCSAqCisJICogVE9ETzogZmluZCBvdXQgaWYgd2UgbmVlZCB0byBkbyBtb3JlIGhlcmUgdG8KKwkgKiAgICAgICBjb3ZlciBzY2F0dGVyL2dhdGhlciBjYXNlLgorCSAqLworCWF0YV9xY19zZXRfcGNfbmJ5dGVzKHFjKTsKKworCS8qIFdlIG1heSBub3QgaXNzdWUgRE1BIGNvbW1hbmRzIGlmIG5vIERNQSBtb2RlIGlzIHNldCAqLworCWlmICh0Zi0+cHJvdG9jb2wgPT0gQVRBX1BST1RfRE1BICYmIGRldi0+ZG1hX21vZGUgPT0gMCkKKwkJZ290byBpbnZhbGlkX2ZsZDsKKwogCS8qIHNhbml0eSBjaGVjayBmb3IgcGlvIG11bHRpIGNvbW1hbmRzICovCiAJaWYgKChjZGJbMV0gJiAweGUwKSAmJiAhaXNfbXVsdGlfdGFza2ZpbGUodGYpKQogCQlnb3RvIGludmFsaWRfZmxkOwpAQCAtMjkwMSwxOCArMjg1OSw2IEBACiAJCQkJICAgICAgIG11bHRpX2NvdW50KTsKIAl9CiAKLQkvKiBSRUFEL1dSSVRFIExPTkcgdXNlIGEgbm9uLXN0YW5kYXJkIHNlY3Rfc2l6ZSAqLwotCXFjLT5zZWN0X3NpemUgPSBBVEFfU0VDVF9TSVpFOwotCXN3aXRjaCAodGYtPmNvbW1hbmQpIHsKLQljYXNlIEFUQV9DTURfUkVBRF9MT05HOgotCWNhc2UgQVRBX0NNRF9SRUFEX0xPTkdfT05DRToKLQljYXNlIEFUQV9DTURfV1JJVEVfTE9ORzoKLQljYXNlIEFUQV9DTURfV1JJVEVfTE9OR19PTkNFOgotCQlpZiAodGYtPnByb3RvY29sICE9IEFUQV9QUk9UX1BJTyB8fCB0Zi0+bnNlY3QgIT0gMSkKLQkJCWdvdG8gaW52YWxpZF9mbGQ7Ci0JCXFjLT5zZWN0X3NpemUgPSBzY3NpX2J1ZmZsZW4oc2NtZCk7Ci0JfQotCiAJLyoKIAkgKiBGaWx0ZXIgU0VUX0ZFQVRVUkVTIC0gWEZFUiBNT0RFIGNvbW1hbmQgLS0gb3RoZXJ3aXNlLAogCSAqIFNFVF9GRUFUVVJFUyAtIFhGRVIgTU9ERSBtdXN0IGJlIHByZWNlZGVkL3N1Y2NlZWRlZApAQCAtMjkyMCwzMCArMjg2NiwyNyBAQAogCSAqIGNvbnRyb2xsZXIgKGkuZS4gdGhlIHJlYXNvbiBmb3IgLT5zZXRfcGlvbW9kZSgpLAogCSAqIC0+c2V0X2RtYW1vZGUoKSwgYW5kIC0+cG9zdF9zZXRfbW9kZSgpIGhvb2tzKS4KIAkgKi8KLQlpZiAoKHRmLT5jb21tYW5kID09IEFUQV9DTURfU0VUX0ZFQVRVUkVTKQotCSAmJiAodGYtPmZlYXR1cmUgPT0gU0VURkVBVFVSRVNfWEZFUikpCisJaWYgKHRmLT5jb21tYW5kID09IEFUQV9DTURfU0VUX0ZFQVRVUkVTICYmCisJICAgIHRmLT5mZWF0dXJlID09IFNFVEZFQVRVUkVTX1hGRVIpCiAJCWdvdG8gaW52YWxpZF9mbGQ7CiAKIAkvKgotCSAqIFNldCBmbGFncyBzbyB0aGF0IGFsbCByZWdpc3RlcnMgd2lsbCBiZSB3cml0dGVuLAotCSAqIGFuZCBwYXNzIG9uIHdyaXRlIGluZGljYXRpb24gKHVzZWQgZm9yIFBJTy9ETUEKLQkgKiBzZXR1cC4pCi0JICovCi0JdGYtPmZsYWdzIHw9IChBVEFfVEZMQUdfSVNBRERSIHwgQVRBX1RGTEFHX0RFVklDRSk7Ci0KLQlpZiAoc2NtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKLQkJdGYtPmZsYWdzIHw9IEFUQV9URkxBR19XUklURTsKLQotCS8qCi0JICogU2V0IHRyYW5zZmVyIGxlbmd0aC4KKwkgKiBGaWx0ZXIgVFBNIGNvbW1hbmRzIGJ5IGRlZmF1bHQuIFRoZXNlIHByb3ZpZGUgYW4KKwkgKiBlc3NlbnRpYWxseSB1bmNvbnRyb2xsZWQgZW5jcnlwdGVkICJiYWNrIGRvb3IiIGJldHdlZW4KKwkgKiBhcHBsaWNhdGlvbnMgYW5kIHRoZSBkaXNrLiBTZXQgbGliYXRhLmFsbG93X3RwbT0xIGlmIHlvdQorCSAqIGhhdmUgYSByZWFsIHJlYXNvbiBmb3Igd2FudGluZyB0byB1c2UgdGhlbS4gVGhpcyBlbnN1cmVzCisJICogdGhhdCBpbnN0YWxsZWQgc29mdHdhcmUgY2Fubm90IGVhc2lseSBtZXNzIHN0dWZmIHVwIHdpdGhvdXQKKwkgKiB1c2VyIGludGVudC4gRFZSIHR5cGUgdXNlcnMgd2lsbCBwcm9iYWJseSBzaGlwIHdpdGggdGhpcyBlbmFibGVkCisJICogZm9yIG1vdmllIGNvbnRlbnQgbWFuYWdlbWVudC4KIAkgKgotCSAqIFRPRE86IGZpbmQgb3V0IGlmIHdlIG5lZWQgdG8gZG8gbW9yZSBoZXJlIHRvCi0JICogICAgICAgY292ZXIgc2NhdHRlci9nYXRoZXIgY2FzZS4KKwkgKiBOb3RlIHRoYXQgZm9yIEFUQTggd2UgY2FuIGlzc3VlIGEgRENTIGNoYW5nZSBhbmQgRENTIGZyZWV6ZSBsb2NrCisJICogZm9yIHRoaXMgYW5kIHNob3VsZCBkbyBpbiBmdXR1cmUgYnV0IHRoYXQgaXQgaXMgbm90IHN1ZmZpY2llbnQgYXMKKwkgKiBEQ1MgaXMgYW4gb3B0aW9uYWwgZmVhdHVyZSBzZXQuIFRodXMgd2UgYWxzbyBkbyB0aGUgc29mdHdhcmUgZmlsdGVyCisJICogc28gdGhhdCB3ZSBjb21wbHkgd2l0aCB0aGUgVEMgY29uc29ydGl1bSBzdGF0ZWQgZ29hbCB0aGF0IHRoZSB1c2VyCisJICogY2FuIHR1cm4gb2ZmIFRDIGZlYXR1cmVzIG9mIHRoZWlyIHN5c3RlbS4KIAkgKi8KLQlhdGFfcWNfc2V0X3BjX25ieXRlcyhxYyk7Ci0KLQkvKiByZXF1ZXN0IHJlc3VsdCBURiBhbmQgYmUgcXVpZXQgYWJvdXQgZGV2aWNlIGVycm9yICovCi0JcWMtPmZsYWdzIHw9IEFUQV9RQ0ZMQUdfUkVTVUxUX1RGIHwgQVRBX1FDRkxBR19RVUlFVDsKKwlpZiAodGYtPmNvbW1hbmQgPj0gMHg1QyAmJiB0Zi0+Y29tbWFuZCA8PSAweDVGICYmICFsaWJhdGFfYWxsb3dfdHBtKQorCQlnb3RvIGludmFsaWRfZmxkOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS5oIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKaW5kZXggODlhMWUwMC4uYmU4ZTI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLmgKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKQEAgLTE2NCw2ICsxNjQsNyBAQAogZXh0ZXJuIHZvaWQgYXRhX2VoX2RvbmUoc3RydWN0IGF0YV9saW5rICpsaW5rLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAogCQkJdW5zaWduZWQgaW50IGFjdGlvbik7CiBleHRlcm4gdm9pZCBhdGFfZWhfYXV0b3BzeShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK2NvbnN0IGNoYXIgKmF0YV9nZXRfY21kX2Rlc2NyaXB0KHU4IGNvbW1hbmQpOwogZXh0ZXJuIHZvaWQgYXRhX2VoX3JlcG9ydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiBpbnQgYXRhX2VoX3Jlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgaW50IGNsYXNzaWZ5LAogCQkJYXRhX3ByZXJlc2V0X2ZuX3QgcHJlcmVzZXQsIGF0YV9yZXNldF9mbl90IHNvZnRyZXNldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCmluZGV4IDQ1OTE1NTYuLmFhNGIzZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYwpAQCAtMjQ2LDYgKzI0Niw3IEBACiAJeyBQQ0lfVkRFVklDRShBVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9JREUpLCB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFKSwgfSwKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX0lERSksIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX0lERSksIH0sCiAKIAl7IH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMKaW5kZXggZDMzYWEyOC4uNDAzZjU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jCkBAIC0yMDIsNyArMjAyLDggQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNzNTUzNVtdID0gewotCXsgUENJX1ZERVZJQ0UoTlMsIDB4MDAyRCksIH0sCisJeyBQQ0lfVkRFVklDRShOUywgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfSURFKSwgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM1X0lERSksIH0sCiAKIAl7IH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMKaW5kZXggYWJkZDE5Zi4uZDZmNjk1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkgKiBUaGlzIGlzIHRJLCBDLkYuIHNwZWMuIHNheXMgMCwgYnV0IFNvbnkgQ0YgY2FyZCByZXF1aXJlcwogCSAqIG1vcmUsIHdlIHVzZSAyMCBuUy4KIAkgKi8KLQlkbWFfdGltLnMuZG1hY2tfcyA9IG5zX3RvX3RpbV9yZWcodGltX211bHQsIDIwKTs7CisJZG1hX3RpbS5zLmRtYWNrX3MgPSBuc190b190aW1fcmVnKHRpbV9tdWx0LCAyMCk7CiAJZG1hX3RpbS5zLmRtYWNrX2ggPSBuc190b190aW1fcmVnKHRpbV9tdWx0LCBkbWFfYWNraCk7CiAKIAlkbWFfdGltLnMuZG1hcnEgPSBkbWFfYXJxOwpAQCAtODQxLDcgKzg0MSw3IEBACiAJb2NkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAljczAgPSBkZXZtX2lvcmVtYXBfbm9jYWNoZSgmcGRldi0+ZGV2LCByZXNfY3MwLT5zdGFydCwKLQkJCQkgICByZXNfY3MwLT5lbmQgLSByZXNfY3MwLT5zdGFydCArIDEpOworCQkJCSAgIHJlc291cmNlX3NpemUocmVzX2NzMCkpOwogCiAJaWYgKCFjczApCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9hdGEvcGF0YV9wbGF0Zm9ybS5jCmluZGV4IGQ4ZDc0M2EuLjNmNmViYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BsYXRmb3JtLmMKQEAgLTE1MSwxNCArMTUxLDE0IEBACiAJICovCiAJaWYgKG1taW8pIHsKIAkJYXAtPmlvYWRkci5jbWRfYWRkciA9IGRldm1faW9yZW1hcChkZXYsIGlvX3Jlcy0+c3RhcnQsCi0JCQkJaW9fcmVzLT5lbmQgLSBpb19yZXMtPnN0YXJ0ICsgMSk7CisJCQkJcmVzb3VyY2Vfc2l6ZShpb19yZXMpKTsKIAkJYXAtPmlvYWRkci5jdGxfYWRkciA9IGRldm1faW9yZW1hcChkZXYsIGN0bF9yZXMtPnN0YXJ0LAotCQkJCWN0bF9yZXMtPmVuZCAtIGN0bF9yZXMtPnN0YXJ0ICsgMSk7CisJCQkJcmVzb3VyY2Vfc2l6ZShjdGxfcmVzKSk7CiAJfSBlbHNlIHsKIAkJYXAtPmlvYWRkci5jbWRfYWRkciA9IGRldm1faW9wb3J0X21hcChkZXYsIGlvX3Jlcy0+c3RhcnQsCi0JCQkJaW9fcmVzLT5lbmQgLSBpb19yZXMtPnN0YXJ0ICsgMSk7CisJCQkJcmVzb3VyY2Vfc2l6ZShpb19yZXMpKTsKIAkJYXAtPmlvYWRkci5jdGxfYWRkciA9IGRldm1faW9wb3J0X21hcChkZXYsIGN0bF9yZXMtPnN0YXJ0LAotCQkJCWN0bF9yZXMtPmVuZCAtIGN0bF9yZXMtPnN0YXJ0ICsgMSk7CisJCQkJcmVzb3VyY2Vfc2l6ZShjdGxfcmVzKSk7CiAJfQogCWlmICghYXAtPmlvYWRkci5jbWRfYWRkciB8fCAhYXAtPmlvYWRkci5jdGxfYWRkcikgewogCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgSU8vQ1RMIGJhc2VcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jCmluZGV4IDhlM2NkZWYuLjQ1ZjFlMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcmI1MzJfY2YuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3JiNTMyX2NmLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCWluZm8tPmlycSA9IGlycTsKIAogCWluZm8tPmlvYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCi0JCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJCQkJcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIWluZm8tPmlvYmFzZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcmRjLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3JkYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NDNhMWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2F0YS9wYXRhX3JkYy5jCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICogIHBhdGFfcmRjCQktCURyaXZlciBmb3IgbGF0ZXIgUkRDIFBBVEEgY29udHJvbGxlcnMKKyAqCisgKiAgVGhpcyBpcyBhY3R1YWxseSBhIGRyaXZlciBmb3IgaGFyZHdhcmUgbWVldGluZworICogIElOQ0lUUyAzNzAtMjAwNCAoMTUxMEQpOiBBVEEgSG9zdCBBZGFwdGVyIFN0YW5kYXJkcworICoKKyAqICBCYXNlZCBvbiBhdGFfcGlpeC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisKKyNkZWZpbmUgRFJWX05BTUUJInBhdGFfcmRjIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4wMSIKKworc3RydWN0IHJkY19ob3N0X3ByaXYgeworCXUzMiBzYXZlZF9pb2NmZzsKK307CisKKy8qKgorICoJcmRjX3BhdGFfY2FibGVfZGV0ZWN0IC0gUHJvYmUgaG9zdCBjb250cm9sbGVyIGNhYmxlIGRldGVjdCBpbmZvCisgKglAYXA6IFBvcnQgZm9yIHdoaWNoIGNhYmxlIGRldGVjdCBpbmZvIGlzIGRlc2lyZWQKKyAqCisgKglSZWFkIDgwYyBjYWJsZSBpbmRpY2F0b3IgZnJvbSBBVEEgUENJIGRldmljZSdzIFBDSSBjb25maWcKKyAqCXJlZ2lzdGVyLiAgVGhpcyByZWdpc3RlciBpcyBub3JtYWxseSBzZXQgYnkgZmlybXdhcmUgKEJJT1MpLgorICoKKyAqCUxPQ0tJTkc6CisgKglOb25lIChpbmhlcml0ZWQgZnJvbSBjYWxsZXIpLgorICovCisKK3N0YXRpYyBpbnQgcmRjX3BhdGFfY2FibGVfZGV0ZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJc3RydWN0IHJkY19ob3N0X3ByaXYgKmhwcml2ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwl1OCBtYXNrOworCisJLyogY2hlY2sgQklPUyBjYWJsZSBkZXRlY3QgcmVzdWx0cyAqLworCW1hc2sgPSAweDMwIDw8ICgyICogYXAtPnBvcnRfbm8pOworCWlmICgoaHByaXYtPnNhdmVkX2lvY2ZnICYgbWFzaykgPT0gMCkKKwkJcmV0dXJuIEFUQV9DQkxfUEFUQTQwOworCXJldHVybiBBVEFfQ0JMX1BBVEE4MDsKK30KKworLyoqCisgKglyZGNfcGF0YV9wcmVyZXNldCAtIHByZXJlc2V0IGZvciBQQVRBIGhvc3QgY29udHJvbGxlcgorICoJQGxpbms6IFRhcmdldCBsaW5rCisgKglAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KKyAqCisgKglMT0NLSU5HOgorICoJTm9uZSAoaW5oZXJpdGVkIGZyb20gY2FsbGVyKS4KKyAqLworc3RhdGljIGludCByZGNfcGF0YV9wcmVyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKKworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgcmRjX2VuYWJsZV9iaXRzW10gPSB7CisJCXsgMHg0MVUsIDFVLCAweDgwVUwsIDB4ODBVTCB9LAkvKiBwb3J0IDAgKi8KKwkJeyAweDQzVSwgMVUsIDB4ODBVTCwgMHg4MFVMIH0sCS8qIHBvcnQgMSAqLworCX07CisKKwlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZyZGNfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGF0YV9zZmZfcHJlcmVzZXQobGluaywgZGVhZGxpbmUpOworfQorCisvKioKKyAqCXJkY19zZXRfcGlvbW9kZSAtIEluaXRpYWxpemUgaG9zdCBjb250cm9sbGVyIFBBVEEgUElPIHRpbWluZ3MKKyAqCUBhcDogUG9ydCB3aG9zZSB0aW1pbmdzIHdlIGFyZSBjb25maWd1cmluZworICoJQGFkZXY6IHVtCisgKgorICoJU2V0IFBJTyBtb2RlIGZvciBkZXZpY2UsIGluIGhvc3QgY29udHJvbGxlciBQQ0kgY29uZmlnIHNwYWNlLgorICoKKyAqCUxPQ0tJTkc6CisgKglOb25lIChpbmhlcml0ZWQgZnJvbSBjYWxsZXIpLgorICovCisKK3N0YXRpYyB2b2lkIHJkY19zZXRfcGlvbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKK3sKKwl1bnNpZ25lZCBpbnQgcGlvCT0gYWRldi0+cGlvX21vZGUgLSBYRkVSX1BJT18wOworCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOworCXVuc2lnbmVkIGludCBpc19zbGF2ZQk9IChhZGV2LT5kZXZubyAhPSAwKTsKKwl1bnNpZ25lZCBpbnQgbWFzdGVyX3BvcnQ9IGFwLT5wb3J0X25vID8gMHg0MiA6IDB4NDA7CisJdW5zaWduZWQgaW50IHNsYXZlX3BvcnQJPSAweDQ0OworCXUxNiBtYXN0ZXJfZGF0YTsKKwl1OCBzbGF2ZV9kYXRhOworCXU4IHVkbWFfZW5hYmxlOworCWludCBjb250cm9sID0gMDsKKworCXN0YXRpYyBjb25zdAkgLyogSVNQICBSVEMgKi8KKwl1OCB0aW1pbmdzW11bMl0JPSB7IHsgMCwgMCB9LAorCQkJICAgIHsgMCwgMCB9LAorCQkJICAgIHsgMSwgMCB9LAorCQkJICAgIHsgMiwgMSB9LAorCQkJICAgIHsgMiwgMyB9LCB9OworCisJaWYgKHBpbyA+PSAyKQorCQljb250cm9sIHw9IDE7CS8qIFRJTUUxIGVuYWJsZSAqLworCWlmIChhdGFfcGlvX25lZWRfaW9yZHkoYWRldikpCisJCWNvbnRyb2wgfD0gMjsJLyogSUUgZW5hYmxlICovCisKKwlpZiAoYWRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEEpCisJCWNvbnRyb2wgfD0gNDsJLyogUFBFIGVuYWJsZSAqLworCisJLyogUElPIGNvbmZpZ3VyYXRpb24gY2xlYXJzIERURSB1bmNvbmRpdGlvbmFsbHkuICBJdCB3aWxsIGJlCisJICogcHJvZ3JhbW1lZCBpbiBzZXRfZG1hbW9kZSB3aGljaCBpcyBndWFyYW50ZWVkIHRvIGJlIGNhbGxlZAorCSAqIGFmdGVyIHNldF9waW9tb2RlIGlmIGFueSBETUEgbW9kZSBpcyBhdmFpbGFibGUuCisJICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBtYXN0ZXJfcG9ydCwgJm1hc3Rlcl9kYXRhKTsKKwlpZiAoaXNfc2xhdmUpIHsKKwkJLyogY2xlYXIgVElNRTF8SUUxfFBQRTF8RFRFMSAqLworCQltYXN0ZXJfZGF0YSAmPSAweGZmMGY7CisJCS8qIEVuYWJsZSBTSVRSRSAoc2VwYXJhdGUgc2xhdmUgdGltaW5nIHJlZ2lzdGVyKSAqLworCQltYXN0ZXJfZGF0YSB8PSAweDQwMDA7CisJCS8qIGVuYWJsZSBQUEUxLCBJRTEgYW5kIFRJTUUxIGFzIG5lZWRlZCAqLworCQltYXN0ZXJfZGF0YSB8PSAoY29udHJvbCA8PCA0KTsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBzbGF2ZV9wb3J0LCAmc2xhdmVfZGF0YSk7CisJCXNsYXZlX2RhdGEgJj0gKGFwLT5wb3J0X25vID8gMHgwZiA6IDB4ZjApOworCQkvKiBMb2FkIHRoZSB0aW1pbmcgbmliYmxlIGZvciB0aGlzIHNsYXZlICovCisJCXNsYXZlX2RhdGEgfD0gKCh0aW1pbmdzW3Bpb11bMF0gPDwgMikgfCB0aW1pbmdzW3Bpb11bMV0pCisJCQkJCQk8PCAoYXAtPnBvcnRfbm8gPyA0IDogMCk7CisJfSBlbHNlIHsKKwkJLyogY2xlYXIgSVNQfFJDVHxUSU1FMHxJRTB8UFBFMHxEVEUwICovCisJCW1hc3Rlcl9kYXRhICY9IDB4Y2NmMDsKKwkJLyogRW5hYmxlIFBQRSwgSUUgYW5kIFRJTUUgYXMgYXBwcm9wcmlhdGUgKi8KKwkJbWFzdGVyX2RhdGEgfD0gY29udHJvbDsKKwkJLyogbG9hZCBJU1AgYW5kIFJDVCAqLworCQltYXN0ZXJfZGF0YSB8PQorCQkJKHRpbWluZ3NbcGlvXVswXSA8PCAxMikgfAorCQkJKHRpbWluZ3NbcGlvXVsxXSA8PCA4KTsKKwl9CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgbWFzdGVyX3BvcnQsIG1hc3Rlcl9kYXRhKTsKKwlpZiAoaXNfc2xhdmUpCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHNsYXZlX3BvcnQsIHNsYXZlX2RhdGEpOworCisJLyogRW5zdXJlIHRoZSBVRE1BIGJpdCBpcyBvZmYgLSBpdCB3aWxsIGJlIHR1cm5lZCBiYWNrIG9uIGlmCisJICAgVURNQSBpcyBzZWxlY3RlZCAqLworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDQ4LCAmdWRtYV9lbmFibGUpOworCXVkbWFfZW5hYmxlICY9IH4oMSA8PCAoMiAqIGFwLT5wb3J0X25vICsgYWRldi0+ZGV2bm8pKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ4LCB1ZG1hX2VuYWJsZSk7Cit9CisKKy8qKgorICoJcmRjX3NldF9kbWFtb2RlIC0gSW5pdGlhbGl6ZSBob3N0IGNvbnRyb2xsZXIgUEFUQSBQSU8gdGltaW5ncworICoJQGFwOiBQb3J0IHdob3NlIHRpbWluZ3Mgd2UgYXJlIGNvbmZpZ3VyaW5nCisgKglAYWRldjogRHJpdmUgaW4gcXVlc3Rpb24KKyAqCisgKglTZXQgVURNQSBtb2RlIGZvciBkZXZpY2UsIGluIGhvc3QgY29udHJvbGxlciBQQ0kgY29uZmlnIHNwYWNlLgorICoKKyAqCUxPQ0tJTkc6CisgKglOb25lIChpbmhlcml0ZWQgZnJvbSBjYWxsZXIpLgorICovCisKK3N0YXRpYyB2b2lkIHJkY19zZXRfZG1hbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKKwl1OCBtYXN0ZXJfcG9ydAkJPSBhcC0+cG9ydF9ubyA/IDB4NDIgOiAweDQwOworCXUxNiBtYXN0ZXJfZGF0YTsKKwl1OCBzcGVlZAkJPSBhZGV2LT5kbWFfbW9kZTsKKwlpbnQgZGV2aWQJCT0gYWRldi0+ZGV2bm8gKyAyICogYXAtPnBvcnRfbm87CisJdTggdWRtYV9lbmFibGUJCT0gMDsKKworCXN0YXRpYyBjb25zdAkgLyogSVNQICBSVEMgKi8KKwl1OCB0aW1pbmdzW11bMl0JPSB7IHsgMCwgMCB9LAorCQkJICAgIHsgMCwgMCB9LAorCQkJICAgIHsgMSwgMCB9LAorCQkJICAgIHsgMiwgMSB9LAorCQkJICAgIHsgMiwgMyB9LCB9OworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBtYXN0ZXJfcG9ydCwgJm1hc3Rlcl9kYXRhKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NDgsICZ1ZG1hX2VuYWJsZSk7CisKKwlpZiAoc3BlZWQgPj0gWEZFUl9VRE1BXzApIHsKKwkJdW5zaWduZWQgaW50IHVkbWEgPSBhZGV2LT5kbWFfbW9kZSAtIFhGRVJfVURNQV8wOworCQl1MTYgdWRtYV90aW1pbmc7CisJCXUxNiBpZGVjb25mOworCQlpbnQgdV9jbG9jaywgdV9zcGVlZDsKKworCQkvKgorCQkgKiBVRE1BIGlzIGhhbmRsZWQgYnkgYSBjb21iaW5hdGlvbiBvZiBjbG9jayBzd2l0Y2hpbmcgYW5kCisJCSAqIHNlbGVjdGlvbiBvZiBkaXZpZGVycworCQkgKgorCQkgKiBIYW5keSBydWxlOiBPZGQgbW9kZXMgYXJlIFVETUFUSU14IDAxLCBldmVuIGFyZSAwMgorCQkgKgkgICAgICAgZXhjZXB0IFVETUEwIHdoaWNoIGlzIDAwCisJCSAqLworCQl1X3NwZWVkID0gbWluKDIgLSAodWRtYSAmIDEpLCB1ZG1hKTsKKwkJaWYgKHVkbWEgPT0gNSkKKwkJCXVfY2xvY2sgPSAweDEwMDA7CS8qIDEwME1oeiAqLworCQllbHNlIGlmICh1ZG1hID4gMikKKwkJCXVfY2xvY2sgPSAxOwkJLyogNjZNaHogKi8KKwkJZWxzZQorCQkJdV9jbG9jayA9IDA7CQkvKiAzM01oeiAqLworCisJCXVkbWFfZW5hYmxlIHw9ICgxIDw8IGRldmlkKTsKKworCQkvKiBMb2FkIHRoZSBDVC9SUCBzZWxlY3Rpb24gKi8KKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCAweDRBLCAmdWRtYV90aW1pbmcpOworCQl1ZG1hX3RpbWluZyAmPSB+KDMgPDwgKDQgKiBkZXZpZCkpOworCQl1ZG1hX3RpbWluZyB8PSB1X3NwZWVkIDw8ICg0ICogZGV2aWQpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCAweDRBLCB1ZG1hX3RpbWluZyk7CisKKwkJLyogU2VsZWN0IGEgMzMvNjYvMTAwTWh6IGNsb2NrICovCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgMHg1NCwgJmlkZWNvbmYpOworCQlpZGVjb25mICY9IH4oMHgxMDAxIDw8IGRldmlkKTsKKwkJaWRlY29uZiB8PSB1X2Nsb2NrIDw8IGRldmlkOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCAweDU0LCBpZGVjb25mKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBNV0RNQSBpcyBkcml2ZW4gYnkgdGhlIFBJTyB0aW1pbmdzLiBXZSBtdXN0IGFsc28gZW5hYmxlCisJCSAqIElPUkRZIHVuY29uZGl0aW9uYWxseSBhbG9uZyB3aXRoIFRJTUUxLiBQUEUgaGFzIGFscmVhZHkKKwkJICogYmVlbiBzZXQgd2hlbiB0aGUgUElPIHRpbWluZyB3YXMgc2V0LgorCQkgKi8KKwkJdW5zaWduZWQgaW50IG13ZG1hCT0gYWRldi0+ZG1hX21vZGUgLSBYRkVSX01XX0RNQV8wOworCQl1bnNpZ25lZCBpbnQgY29udHJvbDsKKwkJdTggc2xhdmVfZGF0YTsKKwkJY29uc3QgdW5zaWduZWQgaW50IG5lZWRlZF9waW9bM10gPSB7CisJCQlYRkVSX1BJT18wLCBYRkVSX1BJT18zLCBYRkVSX1BJT180CisJCX07CisJCWludCBwaW8gPSBuZWVkZWRfcGlvW213ZG1hXSAtIFhGRVJfUElPXzA7CisKKwkJY29udHJvbCA9IDM7CS8qIElPUkRZfFRJTUUxICovCisKKwkJLyogSWYgdGhlIGRyaXZlIE1XRE1BIGlzIGZhc3RlciB0aGFuIGl0IGNhbiBkbyBQSU8gdGhlbgorCQkgICB3ZSBtdXN0IGZvcmNlIFBJTyBpbnRvIFBJTzAgKi8KKworCQlpZiAoYWRldi0+cGlvX21vZGUgPCBuZWVkZWRfcGlvW213ZG1hXSkKKwkJCS8qIEVuYWJsZSBETUEgdGltaW5nIG9ubHkgKi8KKwkJCWNvbnRyb2wgfD0gODsJLyogUElPIGN5Y2xlcyBpbiBQSU8wICovCisKKwkJaWYgKGFkZXYtPmRldm5vKSB7CS8qIFNsYXZlICovCisJCQltYXN0ZXJfZGF0YSAmPSAweEZGNEY7ICAvKiBNYXNrIG91dCBJT1JEWXxUSU1FMXxETUFPTkxZICovCisJCQltYXN0ZXJfZGF0YSB8PSBjb250cm9sIDw8IDQ7CisJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NDQsICZzbGF2ZV9kYXRhKTsKKwkJCXNsYXZlX2RhdGEgJj0gKGFwLT5wb3J0X25vID8gMHgwZiA6IDB4ZjApOworCQkJLyogTG9hZCB0aGUgbWF0Y2hpbmcgdGltaW5nICovCisJCQlzbGF2ZV9kYXRhIHw9ICgodGltaW5nc1twaW9dWzBdIDw8IDIpIHwgdGltaW5nc1twaW9dWzFdKSA8PCAoYXAtPnBvcnRfbm8gPyA0IDogMCk7CisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ0LCBzbGF2ZV9kYXRhKTsKKwkJfSBlbHNlIHsgCS8qIE1hc3RlciAqLworCQkJbWFzdGVyX2RhdGEgJj0gMHhDQ0Y0OwkvKiBNYXNrIG91dCBJT1JEWXxUSU1FMXxETUFPTkxZCisJCQkJCQkgICBhbmQgbWFzdGVyIHRpbWluZyBiaXRzICovCisJCQltYXN0ZXJfZGF0YSB8PSBjb250cm9sOworCQkJbWFzdGVyX2RhdGEgfD0KKwkJCQkodGltaW5nc1twaW9dWzBdIDw8IDEyKSB8CisJCQkJKHRpbWluZ3NbcGlvXVsxXSA8PCA4KTsKKwkJfQorCisJCXVkbWFfZW5hYmxlICY9IH4oMSA8PCBkZXZpZCk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIG1hc3Rlcl9wb3J0LCBtYXN0ZXJfZGF0YSk7CisJfQorCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NDgsIHVkbWFfZW5hYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHJkY19wYXRhX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYTMyX3BvcnRfb3BzLAorCS5jYWJsZV9kZXRlY3QJCT0gcmRjX3BhdGFfY2FibGVfZGV0ZWN0LAorCS5zZXRfcGlvbW9kZQkJPSByZGNfc2V0X3Bpb21vZGUsCisJLnNldF9kbWFtb2RlCQk9IHJkY19zZXRfZG1hbW9kZSwKKwkucHJlcmVzZXQJCT0gcmRjX3BhdGFfcHJlcmVzZXQsCit9OworCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gcmRjX3BvcnRfaW5mbyA9IHsKKworCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAorCS5wb3J0X29wcwk9ICZyZGNfcGF0YV9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSByZGNfc2h0ID0geworCUFUQV9CTURNQV9TSFQoRFJWX05BTUUpLAorfTsKKworLyoqCisgKglyZGNfaW5pdF9vbmUgLSBSZWdpc3RlciBQSUlYIEFUQSBQQ0kgZGV2aWNlIHdpdGgga2VybmVsIHNlcnZpY2VzCisgKglAcGRldjogUENJIGRldmljZSB0byByZWdpc3RlcgorICoJQGVudDogRW50cnkgaW4gcmRjX3BjaV90YmwgbWF0Y2hpbmcgd2l0aCBAcGRldgorICoKKyAqCUNhbGxlZCBmcm9tIGtlcm5lbCBQQ0kgbGF5ZXIuICBXZSBwcm9iZSBmb3IgY29tYmluZWQgbW9kZSAoc2lnaCksCisgKglhbmQgdGhlbiBoYW5kIG92ZXIgY29udHJvbCB0byBsaWJhdGEsIGZvciBpdCB0byBkbyB0aGUgcmVzdC4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gUENJIGxheWVyIChtYXkgc2xlZXApLgorICoKKyAqCVJFVFVSTlM6CisgKglaZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FUlJOTyB2YWx1ZS4KKyAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCByZGNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBhdGFfcG9ydF9pbmZvIHBvcnRfaW5mb1syXTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZwb3J0X2luZm9bMF0sICZwb3J0X2luZm9bMV0gfTsKKwl1bnNpZ25lZCBsb25nIHBvcnRfZmxhZ3M7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0OworCXN0cnVjdCByZGNfaG9zdF9wcml2ICpocHJpdjsKKwlpbnQgcmM7CisKKwlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQorCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsCisJCQkgICAidmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOworCisJcG9ydF9pbmZvWzBdID0gcmRjX3BvcnRfaW5mbzsKKwlwb3J0X2luZm9bMV0gPSByZGNfcG9ydF9pbmZvOworCisJcG9ydF9mbGFncyA9IHBvcnRfaW5mb1swXS5mbGFnczsKKworCS8qIGVuYWJsZSBkZXZpY2UgYW5kIHByZXBhcmUgaG9zdCAqLworCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFocHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBTYXZlIElPQ0ZHLCB0aGlzIHdpbGwgYmUgdXNlZCBmb3IgY2FibGUgZGV0ZWN0aW9uLCBxdWlyaworCSAqIGRldGVjdGlvbiBhbmQgcmVzdG9yYXRpb24gb24gZGV0YWNoLgorCSAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDU0LCAmaHByaXYtPnNhdmVkX2lvY2ZnKTsKKworCXJjID0gYXRhX3BjaV9zZmZfcHJlcGFyZV9ob3N0KHBkZXYsIHBwaSwgJmhvc3QpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCWhvc3QtPnByaXZhdGVfZGF0YSA9IGhwcml2OworCisJcGNpX2ludHgocGRldiwgMSk7CisKKwlob3N0LT5mbGFncyB8PSBBVEFfSE9TVF9QQVJBTExFTF9TQ0FOOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcmV0dXJuIGF0YV9wY2lfc2ZmX2FjdGl2YXRlX2hvc3QoaG9zdCwgYXRhX3NmZl9pbnRlcnJ1cHQsICZyZGNfc2h0KTsKK30KKworc3RhdGljIHZvaWQgcmRjX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCByZGNfaG9zdF9wcml2ICpocHJpdiA9IGhvc3QtPnByaXZhdGVfZGF0YTsKKworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHg1NCwgaHByaXYtPnNhdmVkX2lvY2ZnKTsKKworCWF0YV9wY2lfcmVtb3ZlX29uZShwZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJkY19wY2lfdGJsW10gPSB7CisJeyBQQ0lfREVWSUNFKDB4MTdGMywgMHgxMDExKSwgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxN0YzLCAweDEwMTIpLCB9LAorCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLworfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJkY19wY2lfZHJpdmVyID0geworCS5uYW1lCQkJPSBEUlZfTkFNRSwKKwkuaWRfdGFibGUJCT0gcmRjX3BjaV90YmwsCisJLnByb2JlCQkJPSByZGNfaW5pdF9vbmUsCisJLnJlbW92ZQkJCT0gcmRjX3JlbW92ZV9vbmUsCit9OworCisKK3N0YXRpYyBpbnQgX19pbml0IHJkY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnJkY19wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHJkY19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZyZGNfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHJkY19pbml0KTsKK21vZHVsZV9leGl0KHJkY19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQWxhbiBDb3ggKGJhc2VkIG9uIGF0YV9waWl4KSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTQ1NJIGxvdy1sZXZlbCBkcml2ZXIgZm9yIFJEQyBQQVRBIGNvbnRyb2xsZXJzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcmRjX3BjaV90YmwpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKaW5kZXggMGM1NzRjMC4uYTVlNGRmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCkBAIC04NSw3ICs4NSw2IEBACiAKIHN0YXRpYyBpbnQgcnoxMDAwX2luaXRfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrID0gQVRBX1BJTzQsCkBAIC05Myw4ICs5Miw3IEBACiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CiAKLQlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQotCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKKwlwcmludGtfb25jZShLRVJOX0RFQlVHIERSVl9OQU1FICIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCiAJaWYgKHJ6MTAwMF9maWZvX2Rpc2FibGUocGRldikgPT0gMCkKIAkJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnJ6MTAwMF9zaHQsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9mc2wuYyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKaW5kZXggOTRlYWE0My4uZDM0NGRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9mc2wuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCkBAIC0xMjU3LDYgKzEyNTcsNyBAQAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNhdGFfZnNsX29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJnNhdGFfcG1wX3BvcnRfb3BzLAogCisJLnFjX2RlZmVyID0gYXRhX3N0ZF9xY19kZWZlciwKIAkucWNfcHJlcCA9IHNhdGFfZnNsX3FjX3ByZXAsCiAJLnFjX2lzc3VlID0gc2F0YV9mc2xfcWNfaXNzdWUsCiAJLnFjX2ZpbGxfcnRmID0gc2F0YV9mc2xfcWNfZmlsbF9ydGYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMgYi9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMKaW5kZXggOGQ4OTBjYy4uNDQwNjkwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9pbmljMTYyeC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfaW5pYzE2MnguYwpAQCAtNDA1LDcgKzQwNSw3IEBACiAJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2luc3RhbmNlOwogCXN0cnVjdCBpbmljX2hvc3RfcHJpdiAqaHByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CiAJdTE2IGhvc3RfaXJxX3N0YXQ7Ci0JaW50IGksIGhhbmRsZWQgPSAwOzsKKwlpbnQgaSwgaGFuZGxlZCA9IDA7CiAKIAlob3N0X2lycV9zdGF0ID0gcmVhZHcoaHByaXYtPm1taW9fYmFzZSArIEhPU1RfSVJRX1NUQVQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX212LmMgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKaW5kZXggYzE5NDE3ZS4uMTdmOWZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwpAQCAtNDAxMyw3ICs0MDEzLDcgQEAKIAogCWhvc3QtPmlvbWFwID0gTlVMTDsKIAlocHJpdi0+YmFzZSA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAotCQkJCSAgIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCQkJCSAgIHJlc291cmNlX3NpemUocmVzKSk7CiAJaHByaXYtPmJhc2UgLT0gU0FUQUhDMF9SRUdfQkFTRTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwuYwppbmRleCAzNWJkNWNjLi4zY2I2OWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMKQEAgLTU2NSw2ICs1NjUsMTkgQEAKIAl0bXAgfD0gU0lMX01BU0tfSURFMF9JTlQgPDwgYXAtPnBvcnRfbm87CiAJd3JpdGVsKHRtcCwgbW1pb19iYXNlICsgU0lMX1NZU0NGRyk7CiAJcmVhZGwobW1pb19iYXNlICsgU0lMX1NZU0NGRyk7CS8qIGZsdXNoICovCisKKwkvKiBFbnN1cmUgRE1BX0VOQUJMRSBpcyBvZmYuCisJICoKKwkgKiBUaGlzIGlzIGJlY2F1c2UgdGhlIGNvbnRyb2xsZXIgd2lsbCBub3QgZ2l2ZSB1cyBhY2Nlc3MgdG8gdGhlCisJICogdGFza2ZpbGUgcmVnaXN0ZXJzIHdoaWxlIGEgRE1BIGlzIGluIHByb2dyZXNzCisJICovCisJaW93cml0ZTgoaW9yZWFkOChhcC0+aW9hZGRyLmJtZG1hX2FkZHIpICYgflNJTF9ETUFfRU5BQkxFLAorCQkgYXAtPmlvYWRkci5ibWRtYV9hZGRyKTsKKworCS8qIEFjY29yZGluZyB0byBhdGFfYm1kbWFfc3RvcCwgYW4gSERNQSB0cmFuc2l0aW9uIHJlcXVpcmVzCisJICogb24gUElPIGN5Y2xlLiBCdXQgd2UgY2FuJ3QgcmVhZCBhIHRhc2tmaWxlIHJlZ2lzdGVyLgorCSAqLworCWlvcmVhZDgoYXAtPmlvYWRkci5ibWRtYV9hZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgc2lsX3RoYXcoc3RydWN0IGF0YV9wb3J0ICphcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYwppbmRleCA3N2FhOGQ3Li5lNjk0NmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jCkBAIC04NDYsNiArODQ2LDE3IEBACiAJaWYgKCFhdGFfaXNfYXRhcGkocWMtPnRmLnByb3RvY29sKSkgewogCQlwcmIgPSAmY2ItPmF0YS5wcmI7CiAJCXNnZSA9IGNiLT5hdGEuc2dlOworCQlpZiAoYXRhX2lzX2RhdGEocWMtPnRmLnByb3RvY29sKSkgeworCQkJdTE2IHByb3QgPSAwOworCQkJY3RybCA9IFBSQl9DVFJMX1BST1RPQ09MOworCQkJaWYgKGF0YV9pc19uY3EocWMtPnRmLnByb3RvY29sKSkKKwkJCQlwcm90IHw9IFBSQl9QUk9UX05DUTsKKwkJCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpCisJCQkJcHJvdCB8PSBQUkJfUFJPVF9XUklURTsKKwkJCWVsc2UKKwkJCQlwcm90IHw9IFBSQl9QUk9UX1JFQUQ7CisJCQlwcmItPnByb3QgPSBjcHVfdG9fbGUxNihwcm90KTsKKwkJfQogCX0gZWxzZSB7CiAJCXByYiA9ICZjYi0+YXRhcGkucHJiOwogCQlzZ2UgPSBjYi0+YXRhcGkuc2dlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaXMuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMKaW5kZXggOGY5ODMzMi4uZjhhOTFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zaXMuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jCkBAIC0xMDksOCArMTA5LDkgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzaXNfcGNpX3RibCk7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3Njcl9jZmdfYWRkcihzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKQorc3RhdGljIHVuc2lnbmVkIGludCBnZXRfc2NyX2NmZ19hZGRyKHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50IHNjX3JlZykKIHsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXVuc2lnbmVkIGludCBhZGRyID0gU0lTX1NDUl9CQVNFICsgKDQgKiBzY19yZWcpOwogCXU4IHBtcjsKQEAgLTEzMSw2ICsxMzIsOSBAQAogCQkJYnJlYWs7CiAJCX0KIAl9CisJaWYgKGxpbmstPnBtcCkKKwkJYWRkciArPSAweDEwOworCiAJcmV0dXJuIGFkZHI7CiB9CiAKQEAgLTEzOCwyNCArMTQyLDEyIEBACiAJCQkgICAgdW5zaWduZWQgaW50IHNjX3JlZywgdTMyICp2YWwpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGxpbmstPmFwLT5ob3N0LT5kZXYpOwotCXVuc2lnbmVkIGludCBjZmdfYWRkciA9IGdldF9zY3JfY2ZnX2FkZHIobGluay0+YXAsIHNjX3JlZyk7Ci0JdTMyIHZhbDIgPSAwOwotCXU4IHBtcjsKKwl1bnNpZ25lZCBpbnQgY2ZnX2FkZHIgPSBnZXRfc2NyX2NmZ19hZGRyKGxpbmssIHNjX3JlZyk7CiAKIAlpZiAoc2NfcmVnID09IFNDUl9FUlJPUikgLyogZG9lc24ndCBleGlzdCBpbiBQQ0kgY2ZnIHNwYWNlICovCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgU0lTX1BNUiwgJnBtcik7Ci0KIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgY2ZnX2FkZHIsIHZhbCk7Ci0KLQlpZiAoKHBkZXYtPmRldmljZSA9PSAweDAxODIpIHx8IChwZGV2LT5kZXZpY2UgPT0gMHgwMTgzKSB8fAotCSAgICAocGRldi0+ZGV2aWNlID09IDB4MTE4MikgfHwgKHBtciAmIFNJU19QTVJfQ09NQklORUQpKQotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgY2ZnX2FkZHIrMHgxMCwgJnZhbDIpOwotCi0JKnZhbCB8PSB2YWwyOwotCSp2YWwgJj0gMHhmZmZmZmZmYjsJLyogYXZvaWQgcHJvYmxlbXMgd2l0aCBwb3dlcmRvd25lZCBwb3J0cyAqLwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MywyOCArMTU1LDE2IEBACiAJCQkgICAgIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGxpbmstPmFwLT5ob3N0LT5kZXYpOwotCXVuc2lnbmVkIGludCBjZmdfYWRkciA9IGdldF9zY3JfY2ZnX2FkZHIobGluay0+YXAsIHNjX3JlZyk7Ci0JdTggcG1yOwotCi0JaWYgKHNjX3JlZyA9PSBTQ1JfRVJST1IpIC8qIGRvZXNuJ3QgZXhpc3QgaW4gUENJIGNmZyBzcGFjZSAqLwotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFNJU19QTVIsICZwbXIpOworCXVuc2lnbmVkIGludCBjZmdfYWRkciA9IGdldF9zY3JfY2ZnX2FkZHIobGluaywgc2NfcmVnKTsKIAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgY2ZnX2FkZHIsIHZhbCk7Ci0KLQlpZiAoKHBkZXYtPmRldmljZSA9PSAweDAxODIpIHx8IChwZGV2LT5kZXZpY2UgPT0gMHgwMTgzKSB8fAotCSAgICAocGRldi0+ZGV2aWNlID09IDB4MTE4MikgfHwgKHBtciAmIFNJU19QTVJfQ09NQklORUQpKQotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIGNmZ19hZGRyKzB4MTAsIHZhbCk7Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzaXNfc2NyX3JlYWQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgc2NfcmVnLCB1MzIgKnZhbCkKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwotCXU4IHBtcjsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBhcC0+aW9hZGRyLnNjcl9hZGRyICsgbGluay0+cG1wICogMHgxMDsKIAogCWlmIChzY19yZWcgPiBTQ1JfQ09OVFJPTCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTIsMzkgKzE3MiwyMyBAQAogCWlmIChhcC0+ZmxhZ3MgJiBTSVNfRkxBR19DRkdTQ1IpCiAJCXJldHVybiBzaXNfc2NyX2NmZ19yZWFkKGxpbmssIHNjX3JlZywgdmFsKTsKIAotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFNJU19QTVIsICZwbXIpOwotCi0JKnZhbCA9IGlvcmVhZDMyKGFwLT5pb2FkZHIuc2NyX2FkZHIgKyAoc2NfcmVnICogNCkpOwotCi0JaWYgKChwZGV2LT5kZXZpY2UgPT0gMHgwMTgyKSB8fCAocGRldi0+ZGV2aWNlID09IDB4MDE4MykgfHwKLQkgICAgKHBkZXYtPmRldmljZSA9PSAweDExODIpIHx8IChwbXIgJiBTSVNfUE1SX0NPTUJJTkVEKSkKLQkJKnZhbCB8PSBpb3JlYWQzMihhcC0+aW9hZGRyLnNjcl9hZGRyICsgKHNjX3JlZyAqIDQpICsgMHgxMCk7Ci0KLQkqdmFsICY9IDB4ZmZmZmZmZmI7Ci0KKwkqdmFsID0gaW9yZWFkMzIoYmFzZSArIHNjX3JlZyAqIDQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNpc19zY3Jfd3JpdGUoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgc2NfcmVnLCB1MzIgdmFsKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBsaW5rLT5hcDsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7Ci0JdTggcG1yOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGFwLT5pb2FkZHIuc2NyX2FkZHIgKyBsaW5rLT5wbXAgKiAweDEwOwogCiAJaWYgKHNjX3JlZyA+IFNDUl9DT05UUk9MKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFNJU19QTVIsICZwbXIpOwotCiAJaWYgKGFwLT5mbGFncyAmIFNJU19GTEFHX0NGR1NDUikKIAkJcmV0dXJuIHNpc19zY3JfY2ZnX3dyaXRlKGxpbmssIHNjX3JlZywgdmFsKTsKLQllbHNlIHsKLQkJaW93cml0ZTMyKHZhbCwgYXAtPmlvYWRkci5zY3JfYWRkciArIChzY19yZWcgKiA0KSk7Ci0JCWlmICgocGRldi0+ZGV2aWNlID09IDB4MDE4MikgfHwgKHBkZXYtPmRldmljZSA9PSAweDAxODMpIHx8Ci0JCSAgICAocGRldi0+ZGV2aWNlID09IDB4MTE4MikgfHwgKHBtciAmIFNJU19QTVJfQ09NQklORUQpKQotCQkJaW93cml0ZTMyKHZhbCwgYXAtPmlvYWRkci5zY3JfYWRkciArIChzY19yZWcgKiA0KSsweDEwKTsKLQkJcmV0dXJuIDA7Ci0JfQorCisJaW93cml0ZTMyKHZhbCwgYmFzZSArIChzY19yZWcgKiA0KSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2lzX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQpAQCAtMjM2LDcgKzIwMCw3IEBACiAJdTMyIGdlbmN0bCwgdmFsOwogCXU4IHBtcjsKIAl1OCBwb3J0Ml9zdGFydCA9IDB4MjA7Ci0JaW50IHJjOworCWludCBpLCByYzsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCiAJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LCAidmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwpAQCAtMzE5LDYgKzI4MywxNyBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gaG9zdC0+cG9ydHNbaV07CisKKwkJaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX1NBVEEgJiYKKwkJICAgIGFwLT5mbGFncyAmIEFUQV9GTEFHX1NMQVZFX1BPU1MpIHsKKwkJCXJjID0gYXRhX3NsYXZlX2xpbmtfaW5pdChhcCk7CisJCQlpZiAocmMpCisJCQkJcmV0dXJuIHJjOworCQl9CisJfQorCiAJaWYgKCEocGkuZmxhZ3MgJiBTSVNfRkxBR19DRkdTQ1IpKSB7CiAJCXZvaWQgX19pb21lbSAqbW1pbzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaG9yaXpvbi5jIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5jCmluZGV4IDZiOTY5ZjguLjAxY2UyNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2hvcml6b24uYworKysgYi9kcml2ZXJzL2F0bS9ob3Jpem9uLmMKQEAgLTY0MSw3ICs2NDEsNyBAQAogCQkJCQlwcmUgPSAxOwogCQkJCWJyZWFrOwogCQkJY2FzZSByb3VuZF9uZWFyZXN0OgotCQkJCXByZSA9IChicisoYzw8ZGl2KS8yKS8oYzw8ZGl2KTsKKwkJCQlwcmUgPSBESVZfUk9VTkRfQ0xPU0VTVChiciwgYzw8ZGl2KTsKIAkJCQkvLyBidXQgcCBtdXN0IGJlIG5vbi16ZXJvCiAJCQkJaWYgKCFwcmUpCiAJCQkJCXByZSA9IDE7CkBAIC02NzEsNyArNjcxLDcgQEAKIAkJCQkJcHJlID0gRElWX1JPVU5EX1VQKGJyLCBjPDxkaXYpOwogCQkJCQlicmVhazsKIAkJCQljYXNlIHJvdW5kX25lYXJlc3Q6Ci0JCQkJCXByZSA9IChicisoYzw8ZGl2KS8yKS8oYzw8ZGl2KTsKKwkJCQkJcHJlID0gRElWX1JPVU5EX0NMT1NFU1QoYnIsIGM8PGRpdik7CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6IC8qIHJvdW5kX3VwICovCiAJCQkJCXByZSA9IGJyLyhjPDxkaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMgYi9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYwppbmRleCA5MzU5NjEzYS4uMzA3MzIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKKysrIGIvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKQEAgLTM3Miw3ICszNzIsNyBAQAogCX0KIAogCXNuciA9IG5leHRfc3RyaW5nKHNrYik7Ci0JaWYgKCFzdHIpCisJaWYgKCFzbnIpCiAJCXJldHVybiAtRUlPOwogCWF0dG4gPSBuZXh0X3N0cmluZyhza2IpOwogCWlmICghYXR0bikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmMKaW5kZXggZjAxMDY4Ny4uN2IzNGIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMKKysrIGIvZHJpdmVycy9iYXNlL2RkLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCiAjaW5jbHVkZSAiYmFzZS5oIgogI2luY2x1ZGUgInBvd2VyL3Bvd2VyLmgiCkBAIC0yMDIsNyArMjAzLDEwIEBACiAJcHJfZGVidWcoImJ1czogJyVzJzogJXM6IG1hdGNoZWQgZGV2aWNlICVzIHdpdGggZHJpdmVyICVzXG4iLAogCQkgZHJ2LT5idXMtPm5hbWUsIF9fZnVuY19fLCBkZXZfbmFtZShkZXYpLCBkcnYtPm5hbWUpOwogCisJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2KTsKKwlwbV9ydW50aW1lX2JhcnJpZXIoZGV2KTsKIAlyZXQgPSByZWFsbHlfcHJvYmUoZGV2LCBkcnYpOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNDUsNyArMjQ5LDkgQEAKIAkJCXJldCA9IDA7CiAJCX0KIAl9IGVsc2UgeworCQlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShkZXYpOwogCQlyZXQgPSBidXNfZm9yX2VhY2hfZHJ2KGRldi0+YnVzLCBOVUxMLCBkZXYsIF9fZGV2aWNlX2F0dGFjaCk7CisJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKIAl9CiAJdXAoJmRldi0+c2VtKTsKIAlyZXR1cm4gcmV0OwpAQCAtMzA2LDYgKzMxMiw5IEBACiAKIAlkcnYgPSBkZXYtPmRyaXZlcjsKIAlpZiAoZHJ2KSB7CisJCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKGRldik7CisJCXBtX3J1bnRpbWVfYmFycmllcihkZXYpOworCiAJCWRyaXZlcl9zeXNmc19yZW1vdmUoZGV2KTsKIAogCQlpZiAoZGV2LT5idXMpCkBAIC0zMjQsNiArMzMzLDggQEAKIAkJCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmRldi0+YnVzLT5wLT5idXNfbm90aWZpZXIsCiAJCQkJCQkgICAgIEJVU19OT1RJRllfVU5CT1VORF9EUklWRVIsCiAJCQkJCQkgICAgIGRldik7CisKKwkJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCA0NTY1OTRiLi4wZjdkNDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCiAjaW5jbHVkZSAiYmFzZS5oIgogCkBAIC02MjUsMzAgKzYyNiw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwbGF0Zm9ybV9sZWdhY3lfc3VzcGVuZF9sYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqcGRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCWludCByZXQgPSAwOwotCi0JaWYgKGRldi0+ZHJpdmVyICYmIHBkcnYtPnN1c3BlbmRfbGF0ZSkKLQkJcmV0ID0gcGRydi0+c3VzcGVuZF9sYXRlKHBkZXYsIG1lc2cpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBwbGF0Zm9ybV9sZWdhY3lfcmVzdW1lX2Vhcmx5KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpwZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoZGV2LT5kcml2ZXIgJiYgcGRydi0+cmVzdW1lX2Vhcmx5KQotCQlyZXQgPSBwZHJ2LT5yZXN1bWVfZWFybHkocGRldik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IHBsYXRmb3JtX2xlZ2FjeV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKnBkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOwpAQCAtNjgwLDYgKzY1NywxMyBAQAogCQlkcnYtPnBtLT5jb21wbGV0ZShkZXYpOwogfQogCisjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCisKKyNkZWZpbmUgcGxhdGZvcm1fcG1fcHJlcGFyZQkJTlVMTAorI2RlZmluZSBwbGF0Zm9ybV9wbV9jb21wbGV0ZQkJTlVMTAorCisjZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLworCiAjaWZkZWYgQ09ORklHX1NVU1BFTkQKIAogc3RhdGljIGludCBwbGF0Zm9ybV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTcxMSw4ICs2OTUsNiBAQAogCWlmIChkcnYtPnBtKSB7CiAJCWlmIChkcnYtPnBtLT5zdXNwZW5kX25vaXJxKQogCQkJcmV0ID0gZHJ2LT5wbS0+c3VzcGVuZF9ub2lycShkZXYpOwotCX0gZWxzZSB7Ci0JCXJldCA9IHBsYXRmb3JtX2xlZ2FjeV9zdXNwZW5kX2xhdGUoZGV2LCBQTVNHX1NVU1BFTkQpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC03NDcsOCArNzI5LDYgQEAKIAlpZiAoZHJ2LT5wbSkgewogCQlpZiAoZHJ2LT5wbS0+cmVzdW1lX25vaXJxKQogCQkJcmV0ID0gZHJ2LT5wbS0+cmVzdW1lX25vaXJxKGRldik7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gcGxhdGZvcm1fbGVnYWN5X3Jlc3VtZV9lYXJseShkZXYpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC03OTQsOCArNzc0LDYgQEAKIAlpZiAoZHJ2LT5wbSkgewogCQlpZiAoZHJ2LT5wbS0+ZnJlZXplX25vaXJxKQogCQkJcmV0ID0gZHJ2LT5wbS0+ZnJlZXplX25vaXJxKGRldik7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gcGxhdGZvcm1fbGVnYWN5X3N1c3BlbmRfbGF0ZShkZXYsIFBNU0dfRlJFRVpFKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtODMwLDggKzgwOCw2IEBACiAJaWYgKGRydi0+cG0pIHsKIAkJaWYgKGRydi0+cG0tPnRoYXdfbm9pcnEpCiAJCQlyZXQgPSBkcnYtPnBtLT50aGF3X25vaXJxKGRldik7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gcGxhdGZvcm1fbGVnYWN5X3Jlc3VtZV9lYXJseShkZXYpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC04NjYsOCArODQyLDYgQEAKIAlpZiAoZHJ2LT5wbSkgewogCQlpZiAoZHJ2LT5wbS0+cG93ZXJvZmZfbm9pcnEpCiAJCQlyZXQgPSBkcnYtPnBtLT5wb3dlcm9mZl9ub2lycShkZXYpOwotCX0gZWxzZSB7Ci0JCXJldCA9IHBsYXRmb3JtX2xlZ2FjeV9zdXNwZW5kX2xhdGUoZGV2LCBQTVNHX0hJQkVSTkFURSk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTkwMiw4ICs4NzYsNiBAQAogCWlmIChkcnYtPnBtKSB7CiAJCWlmIChkcnYtPnBtLT5yZXN0b3JlX25vaXJxKQogCQkJcmV0ID0gZHJ2LT5wbS0+cmVzdG9yZV9ub2lycShkZXYpOwotCX0gZWxzZSB7Ci0JCXJldCA9IHBsYXRmb3JtX2xlZ2FjeV9yZXN1bWVfZWFybHkoZGV2KTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtOTIyLDcgKzg5NCwzMiBAQAogCiAjZW5kaWYgLyogIUNPTkZJR19ISUJFUk5BVElPTiAqLwogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgcGxhdGZvcm1fZGV2X3BtX29wcyA9IHsKKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorCitpbnQgX193ZWFrIHBsYXRmb3JtX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9OworCitpbnQgX193ZWFrIHBsYXRmb3JtX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK307CisKK2ludCBfX3dlYWsgcGxhdGZvcm1fcG1fcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK307CisKKyNlbHNlIC8qICFDT05GSUdfUE1fUlVOVElNRSAqLworCisjZGVmaW5lIHBsYXRmb3JtX3BtX3J1bnRpbWVfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHBsYXRmb3JtX3BtX3J1bnRpbWVfcmVzdW1lIE5VTEwKKyNkZWZpbmUgcGxhdGZvcm1fcG1fcnVudGltZV9pZGxlIE5VTEwKKworI2VuZGlmIC8qICFDT05GSUdfUE1fUlVOVElNRSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcGxhdGZvcm1fZGV2X3BtX29wcyA9IHsKIAkucHJlcGFyZSA9IHBsYXRmb3JtX3BtX3ByZXBhcmUsCiAJLmNvbXBsZXRlID0gcGxhdGZvcm1fcG1fY29tcGxldGUsCiAJLnN1c3BlbmQgPSBwbGF0Zm9ybV9wbV9zdXNwZW5kLApAQCAtOTM3LDIyICs5MzQsMTcgQEAKIAkudGhhd19ub2lycSA9IHBsYXRmb3JtX3BtX3RoYXdfbm9pcnEsCiAJLnBvd2Vyb2ZmX25vaXJxID0gcGxhdGZvcm1fcG1fcG93ZXJvZmZfbm9pcnEsCiAJLnJlc3RvcmVfbm9pcnEgPSBwbGF0Zm9ybV9wbV9yZXN0b3JlX25vaXJxLAorCS5ydW50aW1lX3N1c3BlbmQgPSBwbGF0Zm9ybV9wbV9ydW50aW1lX3N1c3BlbmQsCisJLnJ1bnRpbWVfcmVzdW1lID0gcGxhdGZvcm1fcG1fcnVudGltZV9yZXN1bWUsCisJLnJ1bnRpbWVfaWRsZSA9IHBsYXRmb3JtX3BtX3J1bnRpbWVfaWRsZSwKIH07CiAKLSNkZWZpbmUgUExBVEZPUk1fUE1fT1BTX1BUUgkoJnBsYXRmb3JtX2Rldl9wbV9vcHMpCi0KLSNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KLQotI2RlZmluZSBQTEFURk9STV9QTV9PUFNfUFRSCU5VTEwKLQotI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KLQogc3RydWN0IGJ1c190eXBlIHBsYXRmb3JtX2J1c190eXBlID0gewogCS5uYW1lCQk9ICJwbGF0Zm9ybSIsCiAJLmRldl9hdHRycwk9IHBsYXRmb3JtX2Rldl9hdHRycywKIAkubWF0Y2gJCT0gcGxhdGZvcm1fbWF0Y2gsCiAJLnVldmVudAkJPSBwbGF0Zm9ybV91ZXZlbnQsCi0JLnBtCQk9IFBMQVRGT1JNX1BNX09QU19QVFIsCisJLnBtCQk9ICZwbGF0Zm9ybV9kZXZfcG1fb3BzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2J1c190eXBlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL01ha2VmaWxlIGIvZHJpdmVycy9iYXNlL3Bvd2VyL01ha2VmaWxlCmluZGV4IDkxMTIwOGIuLjNjZTM1MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvTWFrZWZpbGUKQEAgLTEsNSArMSw2IEBACiBvYmotJChDT05GSUdfUE0pCSs9IHN5c2ZzLm8KIG9iai0kKENPTkZJR19QTV9TTEVFUCkJKz0gbWFpbi5vCitvYmotJChDT05GSUdfUE1fUlVOVElNRSkJKz0gcnVudGltZS5vCiBvYmotJChDT05GSUdfUE1fVFJBQ0VfUlRDKQkrPSB0cmFjZS5vCiAKIGNjZmxhZ3MtJChDT05GSUdfREVCVUdfRFJJVkVSKSA6PSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCA1OGEzZTU3Li5lMGRjNDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvcmVzdW1lLXRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTQ5LDcgKzUwLDE3IEBACiBzdGF0aWMgYm9vbCB0cmFuc2l0aW9uX3N0YXJ0ZWQ7CiAKIC8qKgotICoJZGV2aWNlX3BtX2xvY2sgLSBsb2NrIHRoZSBsaXN0IG9mIGFjdGl2ZSBkZXZpY2VzIHVzZWQgYnkgdGhlIFBNIGNvcmUKKyAqIGRldmljZV9wbV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgUE0tcmVsYXRlZCBwYXJ0IG9mIGEgZGV2aWNlIG9iamVjdC4KKyAqIEBkZXY6IERldmljZSBvYmplY3QgYmVpbmcgaW5pdGlhbGl6ZWQuCisgKi8KK3ZvaWQgZGV2aWNlX3BtX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWRldi0+cG93ZXIuc3RhdHVzID0gRFBNX09OOworCXBtX3J1bnRpbWVfaW5pdChkZXYpOworfQorCisvKioKKyAqIGRldmljZV9wbV9sb2NrIC0gTG9jayB0aGUgbGlzdCBvZiBhY3RpdmUgZGV2aWNlcyB1c2VkIGJ5IHRoZSBQTSBjb3JlLgogICovCiB2b2lkIGRldmljZV9wbV9sb2NrKHZvaWQpCiB7CkBAIC01Nyw3ICs2OCw3IEBACiB9CiAKIC8qKgotICoJZGV2aWNlX3BtX3VubG9jayAtIHVubG9jayB0aGUgbGlzdCBvZiBhY3RpdmUgZGV2aWNlcyB1c2VkIGJ5IHRoZSBQTSBjb3JlCisgKiBkZXZpY2VfcG1fdW5sb2NrIC0gVW5sb2NrIHRoZSBsaXN0IG9mIGFjdGl2ZSBkZXZpY2VzIHVzZWQgYnkgdGhlIFBNIGNvcmUuCiAgKi8KIHZvaWQgZGV2aWNlX3BtX3VubG9jayh2b2lkKQogewpAQCAtNjUsOCArNzYsOCBAQAogfQogCiAvKioKLSAqCWRldmljZV9wbV9hZGQgLSBhZGQgYSBkZXZpY2UgdG8gdGhlIGxpc3Qgb2YgYWN0aXZlIGRldmljZXMKLSAqCUBkZXY6CURldmljZSB0byBiZSBhZGRlZCB0byB0aGUgbGlzdAorICogZGV2aWNlX3BtX2FkZCAtIEFkZCBhIGRldmljZSB0byB0aGUgUE0gY29yZSdzIGxpc3Qgb2YgYWN0aXZlIGRldmljZXMuCisgKiBAZGV2OiBEZXZpY2UgdG8gYWRkIHRvIHRoZSBsaXN0LgogICovCiB2b2lkIGRldmljZV9wbV9hZGQoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtOTIsMTAgKzEwMyw4IEBACiB9CiAKIC8qKgotICoJZGV2aWNlX3BtX3JlbW92ZSAtIHJlbW92ZSBhIGRldmljZSBmcm9tIHRoZSBsaXN0IG9mIGFjdGl2ZSBkZXZpY2VzCi0gKglAZGV2OglEZXZpY2UgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0Ci0gKgotICoJVGhpcyBmdW5jdGlvbiBhbHNvIHJlbW92ZXMgdGhlIGRldmljZSdzIFBNLXJlbGF0ZWQgc3lzZnMgYXR0cmlidXRlcy4KKyAqIGRldmljZV9wbV9yZW1vdmUgLSBSZW1vdmUgYSBkZXZpY2UgZnJvbSB0aGUgUE0gY29yZSdzIGxpc3Qgb2YgYWN0aXZlIGRldmljZXMuCisgKiBAZGV2OiBEZXZpY2UgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LgogICovCiB2b2lkIGRldmljZV9wbV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMTA1LDEyICsxMTQsMTMgQEAKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCWxpc3RfZGVsX2luaXQoJmRldi0+cG93ZXIuZW50cnkpOwogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKKwlwbV9ydW50aW1lX3JlbW92ZShkZXYpOwogfQogCiAvKioKLSAqCWRldmljZV9wbV9tb3ZlX2JlZm9yZSAtIG1vdmUgZGV2aWNlIGluIGRwbV9saXN0Ci0gKglAZGV2YTogIERldmljZSB0byBtb3ZlIGluIGRwbV9saXN0Ci0gKglAZGV2YjogIERldmljZSBAZGV2YSBzaG91bGQgY29tZSBiZWZvcmUKKyAqIGRldmljZV9wbV9tb3ZlX2JlZm9yZSAtIE1vdmUgZGV2aWNlIGluIHRoZSBQTSBjb3JlJ3MgbGlzdCBvZiBhY3RpdmUgZGV2aWNlcy4KKyAqIEBkZXZhOiBEZXZpY2UgdG8gbW92ZSBpbiBkcG1fbGlzdC4KKyAqIEBkZXZiOiBEZXZpY2UgQGRldmEgc2hvdWxkIGNvbWUgYmVmb3JlLgogICovCiB2b2lkIGRldmljZV9wbV9tb3ZlX2JlZm9yZShzdHJ1Y3QgZGV2aWNlICpkZXZhLCBzdHJ1Y3QgZGV2aWNlICpkZXZiKQogewpAQCAtMTI0LDkgKzEzNCw5IEBACiB9CiAKIC8qKgotICoJZGV2aWNlX3BtX21vdmVfYWZ0ZXIgLSBtb3ZlIGRldmljZSBpbiBkcG1fbGlzdAotICoJQGRldmE6ICBEZXZpY2UgdG8gbW92ZSBpbiBkcG1fbGlzdAotICoJQGRldmI6ICBEZXZpY2UgQGRldmEgc2hvdWxkIGNvbWUgYWZ0ZXIKKyAqIGRldmljZV9wbV9tb3ZlX2FmdGVyIC0gTW92ZSBkZXZpY2UgaW4gdGhlIFBNIGNvcmUncyBsaXN0IG9mIGFjdGl2ZSBkZXZpY2VzLgorICogQGRldmE6IERldmljZSB0byBtb3ZlIGluIGRwbV9saXN0LgorICogQGRldmI6IERldmljZSBAZGV2YSBzaG91bGQgY29tZSBhZnRlci4KICAqLwogdm9pZCBkZXZpY2VfcG1fbW92ZV9hZnRlcihzdHJ1Y3QgZGV2aWNlICpkZXZhLCBzdHJ1Y3QgZGV2aWNlICpkZXZiKQogewpAQCAtMTQwLDggKzE1MCw4IEBACiB9CiAKIC8qKgotICogCWRldmljZV9wbV9tb3ZlX2xhc3QgLSBtb3ZlIGRldmljZSB0byBlbmQgb2YgZHBtX2xpc3QKLSAqIAlAZGV2OiAgIERldmljZSB0byBtb3ZlIGluIGRwbV9saXN0CisgKiBkZXZpY2VfcG1fbW92ZV9sYXN0IC0gTW92ZSBkZXZpY2UgdG8gZW5kIG9mIHRoZSBQTSBjb3JlJ3MgbGlzdCBvZiBkZXZpY2VzLgorICogQGRldjogRGV2aWNlIHRvIG1vdmUgaW4gZHBtX2xpc3QuCiAgKi8KIHZvaWQgZGV2aWNlX3BtX21vdmVfbGFzdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0xNTIsMTMgKzE2MiwxNCBAQAogfQogCiAvKioKLSAqCXBtX29wIC0gZXhlY3V0ZSB0aGUgUE0gb3BlcmF0aW9uIGFwcHJvcGlhdGUgZm9yIGdpdmVuIFBNIGV2ZW50Ci0gKglAZGV2OglEZXZpY2UuCi0gKglAb3BzOglQTSBvcGVyYXRpb25zIHRvIGNob29zZSBmcm9tLgotICoJQHN0YXRlOglQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCisgKiBwbV9vcCAtIEV4ZWN1dGUgdGhlIFBNIG9wZXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgZ2l2ZW4gUE0gZXZlbnQuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICogQG9wczogUE0gb3BlcmF0aW9ucyB0byBjaG9vc2UgZnJvbS4KKyAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICovCi1zdGF0aWMgaW50IHBtX29wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wbV9vcHMgKm9wcywKLQkJCXBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcG1fb3Aoc3RydWN0IGRldmljZSAqZGV2LAorCQkgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKm9wcywKKwkJIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQgZXJyb3IgPSAwOwogCkBAIC0yMTIsMTUgKzIyMywxNiBAQAogfQogCiAvKioKLSAqCXBtX25vaXJxX29wIC0gZXhlY3V0ZSB0aGUgUE0gb3BlcmF0aW9uIGFwcHJvcGlhdGUgZm9yIGdpdmVuIFBNIGV2ZW50Ci0gKglAZGV2OglEZXZpY2UuCi0gKglAb3BzOglQTSBvcGVyYXRpb25zIHRvIGNob29zZSBmcm9tLgotICoJQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCisgKiBwbV9ub2lycV9vcCAtIEV4ZWN1dGUgdGhlIFBNIG9wZXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgZ2l2ZW4gUE0gZXZlbnQuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICogQG9wczogUE0gb3BlcmF0aW9ucyB0byBjaG9vc2UgZnJvbS4KKyAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICoKLSAqCVRoZSBvcGVyYXRpb24gaXMgZXhlY3V0ZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIGJ5IHRoZSBvbmx5IHJlbWFpbmluZwotICoJZnVuY3Rpb25hbCBDUFUgaW4gdGhlIHN5c3RlbS4KKyAqIFRoZSBkcml2ZXIgb2YgQGRldiB3aWxsIG5vdCByZWNlaXZlIGludGVycnVwdHMgd2hpbGUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZworICogZXhlY3V0ZWQuCiAgKi8KLXN0YXRpYyBpbnQgcG1fbm9pcnFfb3Aoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BtX29wcyAqb3BzLAorc3RhdGljIGludCBwbV9ub2lycV9vcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqb3BzLAogCQkJcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWludCBlcnJvciA9IDA7CkBAIC0zMTUsMTEgKzMyNywxMiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc3VtZSByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoqCi0gKglkZXZpY2VfcmVzdW1lX25vaXJxIC0gUG93ZXIgb24gb25lIGRldmljZSAoZWFybHkgcmVzdW1lKS4KLSAqCUBkZXY6CURldmljZS4KLSAqCUBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgorICogZGV2aWNlX3Jlc3VtZV9ub2lycSAtIEV4ZWN1dGUgYW4gImVhcmx5IHJlc3VtZSIgY2FsbGJhY2sgZm9yIGdpdmVuIGRldmljZS4KKyAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCisgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KICAqCi0gKglNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKiBUaGUgZHJpdmVyIG9mIEBkZXYgd2lsbCBub3QgcmVjZWl2ZSBpbnRlcnJ1cHRzIHdoaWxlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcKKyAqIGV4ZWN1dGVkLgogICovCiBzdGF0aWMgaW50IGRldmljZV9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC0zNDEsMjAgKzM1NCwxOCBAQAogfQogCiAvKioKLSAqCWRwbV9yZXN1bWVfbm9pcnEgLSBQb3dlciBvbiBhbGwgcmVndWxhciAobm9uLXN5c2RldikgZGV2aWNlcy4KLSAqCUBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgorICogZHBtX3Jlc3VtZV9ub2lycSAtIEV4ZWN1dGUgImVhcmx5IHJlc3VtZSIgY2FsbGJhY2tzIGZvciBub24tc3lzZGV2IGRldmljZXMuCisgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KICAqCi0gKglDYWxsIHRoZSAibm9pcnEiIHJlc3VtZSBoYW5kbGVycyBmb3IgYWxsIGRldmljZXMgbWFya2VkIGFzCi0gKglEUE1fT0ZGX0lSUSBhbmQgZW5hYmxlIGRldmljZSBkcml2ZXJzIHRvIHJlY2VpdmUgaW50ZXJydXB0cy4KLSAqCi0gKglNdXN0IGJlIGNhbGxlZCB1bmRlciBkcG1fbGlzdF9tdHguICBEZXZpY2UgZHJpdmVycyBzaG91bGQgbm90IHJlY2VpdmUKLSAqCWludGVycnVwdHMgd2hpbGUgaXQncyBiZWluZyBleGVjdXRlZC4KKyAqIENhbGwgdGhlICJub2lycSIgcmVzdW1lIGhhbmRsZXJzIGZvciBhbGwgZGV2aWNlcyBtYXJrZWQgYXMgRFBNX09GRl9JUlEgYW5kCisgKiBlbmFibGUgZGV2aWNlIGRyaXZlcnMgdG8gcmVjZWl2ZSBpbnRlcnJ1cHRzLgogICovCiB2b2lkIGRwbV9yZXN1bWVfbm9pcnEocG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CisJdHJhbnNpdGlvbl9zdGFydGVkID0gZmFsc2U7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZkcG1fbGlzdCwgcG93ZXIuZW50cnkpCiAJCWlmIChkZXYtPnBvd2VyLnN0YXR1cyA+IERQTV9PRkYpIHsKIAkJCWludCBlcnJvcjsKQEAgLTM3MCw5ICszODEsOSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZHBtX3Jlc3VtZV9ub2lycSk7CiAKIC8qKgotICoJZGV2aWNlX3Jlc3VtZSAtIFJlc3RvcmUgc3RhdGUgZm9yIG9uZSBkZXZpY2UuCi0gKglAZGV2OglEZXZpY2UuCi0gKglAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIGRldmljZV9yZXN1bWUgLSBFeGVjdXRlICJyZXN1bWUiIGNhbGxiYWNrcyBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICovCiBzdGF0aWMgaW50IGRldmljZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC00MjEsMTEgKzQzMiwxMSBAQAogfQogCiAvKioKLSAqCWRwbV9yZXN1bWUgLSBSZXN1bWUgZXZlcnkgZGV2aWNlLgotICoJQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCisgKiBkcG1fcmVzdW1lIC0gRXhlY3V0ZSAicmVzdW1lIiBjYWxsYmFja3MgZm9yIG5vbi1zeXNkZXYgZGV2aWNlcy4KKyAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICoKLSAqCUV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlICJyZXN1bWUiIGNhbGxiYWNrIGZvciBhbGwgZGV2aWNlcyB0aGUgc3RhdHVzIG9mCi0gKgl3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGV5IGFyZSBpbmFjdGl2ZS4KKyAqIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlICJyZXN1bWUiIGNhbGxiYWNrIGZvciBhbGwgZGV2aWNlcyB3aG9zZSBzdGF0dXMKKyAqIGluZGljYXRlcyB0aGF0IHRoZXkgYXJlIHN1c3BlbmRlZC4KICAqLwogc3RhdGljIHZvaWQgZHBtX3Jlc3VtZShwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC00MzMsNyArNDQ0LDYgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwotCXRyYW5zaXRpb25fc3RhcnRlZCA9IGZhbHNlOwogCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX2xpc3QpKSB7CiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShkcG1fbGlzdC5uZXh0KTsKIApAQCAtNDYyLDkgKzQ3Miw5IEBACiB9CiAKIC8qKgotICoJZGV2aWNlX2NvbXBsZXRlIC0gQ29tcGxldGUgYSBQTSB0cmFuc2l0aW9uIGZvciBnaXZlbiBkZXZpY2UKLSAqCUBkZXY6CURldmljZS4KLSAqCUBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgorICogZGV2aWNlX2NvbXBsZXRlIC0gQ29tcGxldGUgYSBQTSB0cmFuc2l0aW9uIGZvciBnaXZlbiBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCiAgKi8KIHN0YXRpYyB2b2lkIGRldmljZV9jb21wbGV0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTQ4OSwxMSArNDk5LDExIEBACiB9CiAKIC8qKgotICoJZHBtX2NvbXBsZXRlIC0gQ29tcGxldGUgYSBQTSB0cmFuc2l0aW9uIGZvciBhbGwgZGV2aWNlcy4KLSAqCUBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgorICogZHBtX2NvbXBsZXRlIC0gQ29tcGxldGUgYSBQTSB0cmFuc2l0aW9uIGZvciBhbGwgbm9uLXN5c2RldiBkZXZpY2VzLgorICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCiAgKgotICoJRXhlY3V0ZSB0aGUgLT5jb21wbGV0ZSgpIGNhbGxiYWNrcyBmb3IgYWxsIGRldmljZXMgdGhhdCBhcmUgbm90IG1hcmtlZAotICoJYXMgRFBNX09OLgorICogRXhlY3V0ZSB0aGUgLT5jb21wbGV0ZSgpIGNhbGxiYWNrcyBmb3IgYWxsIGRldmljZXMgd2hvc2UgUE0gc3RhdHVzIGlzIG5vdAorICogRFBNX09OICh0aGlzIGFsbG93cyBuZXcgZGV2aWNlcyB0byBiZSByZWdpc3RlcmVkKS4KICAqLwogc3RhdGljIHZvaWQgZHBtX2NvbXBsZXRlKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTUxMCw2ICs1MjAsNyBAQAogCQkJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwogCiAJCQlkZXZpY2VfY29tcGxldGUoZGV2LCBzdGF0ZSk7CisJCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoZGV2KTsKIAogCQkJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAkJfQpAQCAtNTIyLDExICs1MzMsMTEgQEAKIH0KIAogLyoqCi0gKglkcG1fcmVzdW1lX2VuZCAtIFJlc3RvcmUgc3RhdGUgb2YgZWFjaCBkZXZpY2UgaW4gc3lzdGVtLgotICoJQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCisgKiBkcG1fcmVzdW1lX2VuZCAtIEV4ZWN1dGUgInJlc3VtZSIgY2FsbGJhY2tzIGFuZCBjb21wbGV0ZSBzeXN0ZW0gdHJhbnNpdGlvbi4KKyAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICoKLSAqCVJlc3VtZSBhbGwgdGhlIGRldmljZXMsIHVubG9jayB0aGVtIGFsbCwgYW5kIGFsbG93IG5ldwotICoJZGV2aWNlcyB0byBiZSByZWdpc3RlcmVkIG9uY2UgYWdhaW4uCisgKiBFeGVjdXRlICJyZXN1bWUiIGNhbGxiYWNrcyBmb3IgYWxsIGRldmljZXMgYW5kIGNvbXBsZXRlIHRoZSBQTSB0cmFuc2l0aW9uIG9mCisgKiB0aGUgc3lzdGVtLgogICovCiB2b2lkIGRwbV9yZXN1bWVfZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTU0MCw5ICs1NTEsMTEgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdXNwZW5kIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKioKLSAqCXJlc3VtZV9ldmVudCAtIHJldHVybiBhIFBNIG1lc3NhZ2UgcmVwcmVzZW50aW5nIHRoZSByZXN1bWUgZXZlbnQKLSAqCSAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gc2xlZXAgc3RhdGUuCi0gKglAc2xlZXBfc3RhdGU6IFBNIG1lc3NhZ2UgcmVwcmVzZW50aW5nIGEgc2xlZXAgc3RhdGUuCisgKiByZXN1bWVfZXZlbnQgLSBSZXR1cm4gYSAicmVzdW1lIiBtZXNzYWdlIGZvciBnaXZlbiAic3VzcGVuZCIgc2xlZXAgc3RhdGUuCisgKiBAc2xlZXBfc3RhdGU6IFBNIG1lc3NhZ2UgcmVwcmVzZW50aW5nIGEgc2xlZXAgc3RhdGUuCisgKgorICogUmV0dXJuIGEgUE0gbWVzc2FnZSByZXByZXNlbnRpbmcgdGhlIHJlc3VtZSBldmVudCBjb3JyZXNwb25kaW5nIHRvIGdpdmVuCisgKiBzbGVlcCBzdGF0ZS4KICAqLwogc3RhdGljIHBtX21lc3NhZ2VfdCByZXN1bWVfZXZlbnQocG1fbWVzc2FnZV90IHNsZWVwX3N0YXRlKQogewpAQCAtNTU5LDExICs1NzIsMTIgQEAKIH0KIAogLyoqCi0gKglkZXZpY2Vfc3VzcGVuZF9ub2lycSAtIFNodXQgZG93biBvbmUgZGV2aWNlIChsYXRlIHN1c3BlbmQpLgotICoJQGRldjoJRGV2aWNlLgotICoJQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCisgKiBkZXZpY2Vfc3VzcGVuZF9ub2lycSAtIEV4ZWN1dGUgYSAibGF0ZSBzdXNwZW5kIiBjYWxsYmFjayBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICoKLSAqCVRoaXMgaXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBvZmYgYW5kIG9ubHkgYSBzaW5nbGUgQ1BVIHJ1bm5pbmcuCisgKiBUaGUgZHJpdmVyIG9mIEBkZXYgd2lsbCBub3QgcmVjZWl2ZSBpbnRlcnJ1cHRzIHdoaWxlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcKKyAqIGV4ZWN1dGVkLgogICovCiBzdGF0aWMgaW50IGRldmljZV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewpAQCAtNTgwLDEzICs1OTQsMTEgQEAKIH0KIAogLyoqCi0gKglkcG1fc3VzcGVuZF9ub2lycSAtIFBvd2VyIGRvd24gYWxsIHJlZ3VsYXIgKG5vbi1zeXNkZXYpIGRldmljZXMuCi0gKglAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIGRwbV9zdXNwZW5kX25vaXJxIC0gRXhlY3V0ZSAibGF0ZSBzdXNwZW5kIiBjYWxsYmFja3MgZm9yIG5vbi1zeXNkZXYgZGV2aWNlcy4KKyAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICoKLSAqCVByZXZlbnQgZGV2aWNlIGRyaXZlcnMgZnJvbSByZWNlaXZpbmcgaW50ZXJydXB0cyBhbmQgY2FsbCB0aGUgIm5vaXJxIgotICoJc3VzcGVuZCBoYW5kbGVycy4KLSAqCi0gKglNdXN0IGJlIGNhbGxlZCB1bmRlciBkcG1fbGlzdF9tdHguCisgKiBQcmV2ZW50IGRldmljZSBkcml2ZXJzIGZyb20gcmVjZWl2aW5nIGludGVycnVwdHMgYW5kIGNhbGwgdGhlICJub2lycSIgc3VzcGVuZAorICogaGFuZGxlcnMgZm9yIGFsbCBub24tc3lzZGV2IGRldmljZXMuCiAgKi8KIGludCBkcG1fc3VzcGVuZF9ub2lycShwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC02MTEsOSArNjIzLDkgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGRwbV9zdXNwZW5kX25vaXJxKTsKIAogLyoqCi0gKglkZXZpY2Vfc3VzcGVuZCAtIFNhdmUgc3RhdGUgb2Ygb25lIGRldmljZS4KLSAqCUBkZXY6CURldmljZS4KLSAqCUBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgorICogZGV2aWNlX3N1c3BlbmQgLSBFeGVjdXRlICJzdXNwZW5kIiBjYWxsYmFja3MgZm9yIGdpdmVuIGRldmljZS4KKyAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCisgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KICAqLwogc3RhdGljIGludCBkZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTY2MCwxMCArNjcyLDggQEAKIH0KIAogLyoqCi0gKglkcG1fc3VzcGVuZCAtIFN1c3BlbmQgZXZlcnkgZGV2aWNlLgotICoJQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCi0gKgotICoJRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgInN1c3BlbmQiIGNhbGxiYWNrcyBmb3IgYWxsIGRldmljZXMuCisgKiBkcG1fc3VzcGVuZCAtIEV4ZWN1dGUgInN1c3BlbmQiIGNhbGxiYWNrcyBmb3IgYWxsIG5vbi1zeXNkZXYgZGV2aWNlcy4KKyAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICovCiBzdGF0aWMgaW50IGRwbV9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTY5Nyw5ICs3MDcsMTIgQEAKIH0KIAogLyoqCi0gKglkZXZpY2VfcHJlcGFyZSAtIEV4ZWN1dGUgdGhlIC0+cHJlcGFyZSgpIGNhbGxiYWNrKHMpIGZvciBnaXZlbiBkZXZpY2UuCi0gKglAZGV2OglEZXZpY2UuCi0gKglAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIGRldmljZV9wcmVwYXJlIC0gUHJlcGFyZSBhIGRldmljZSBmb3Igc3lzdGVtIHBvd2VyIHRyYW5zaXRpb24uCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCisgKgorICogRXhlY3V0ZSB0aGUgLT5wcmVwYXJlKCkgY2FsbGJhY2socykgZm9yIGdpdmVuIGRldmljZS4gIE5vIG5ldyBjaGlsZHJlbiBvZiB0aGUKKyAqIGRldmljZSBtYXkgYmUgcmVnaXN0ZXJlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGhhcyByZXR1cm5lZC4KICAqLwogc3RhdGljIGludCBkZXZpY2VfcHJlcGFyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTczNSwxMCArNzQ4LDEwIEBACiB9CiAKIC8qKgotICoJZHBtX3ByZXBhcmUgLSBQcmVwYXJlIGFsbCBkZXZpY2VzIGZvciBhIFBNIHRyYW5zaXRpb24uCi0gKglAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIGRwbV9wcmVwYXJlIC0gUHJlcGFyZSBhbGwgbm9uLXN5c2RldiBkZXZpY2VzIGZvciBhIHN5c3RlbSBQTSB0cmFuc2l0aW9uLgorICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCiAgKgotICoJRXhlY3V0ZSB0aGUgLT5wcmVwYXJlKCkgY2FsbGJhY2sgZm9yIGFsbCBkZXZpY2VzLgorICogRXhlY3V0ZSB0aGUgLT5wcmVwYXJlKCkgY2FsbGJhY2socykgZm9yIGFsbCBkZXZpY2VzLgogICovCiBzdGF0aWMgaW50IGRwbV9wcmVwYXJlKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTc1NSw3ICs3NjgsMTQgQEAKIAkJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fUFJFUEFSSU5HOwogCQltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CiAKLQkJZXJyb3IgPSBkZXZpY2VfcHJlcGFyZShkZXYsIHN0YXRlKTsKKwkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2KTsKKwkJaWYgKHBtX3J1bnRpbWVfYmFycmllcihkZXYpICYmIGRldmljZV9tYXlfd2FrZXVwKGRldikpIHsKKwkJCS8qIFdha2UtdXAgcmVxdWVzdGVkIGR1cmluZyBzeXN0ZW0gc2xlZXAgdHJhbnNpdGlvbi4gKi8KKwkJCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCQkJZXJyb3IgPSAtRUJVU1k7CisJCX0gZWxzZSB7CisJCQllcnJvciA9IGRldmljZV9wcmVwYXJlKGRldiwgc3RhdGUpOworCQl9CiAKIAkJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAkJaWYgKGVycm9yKSB7CkBAIC03ODIsMTAgKzgwMiwxMSBAQAogfQogCiAvKioKLSAqCWRwbV9zdXNwZW5kX3N0YXJ0IC0gU2F2ZSBzdGF0ZSBhbmQgc3RvcCBhbGwgZGV2aWNlcyBpbiBzeXN0ZW0uCi0gKglAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIGRwbV9zdXNwZW5kX3N0YXJ0IC0gUHJlcGFyZSBkZXZpY2VzIGZvciBQTSB0cmFuc2l0aW9uIGFuZCBzdXNwZW5kIHRoZW0uCisgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KICAqCi0gKglQcmVwYXJlIGFuZCBzdXNwZW5kIGFsbCBkZXZpY2VzLgorICogUHJlcGFyZSBhbGwgbm9uLXN5c2RldiBkZXZpY2VzIGZvciBzeXN0ZW0gUE0gdHJhbnNpdGlvbiBhbmQgZXhlY3V0ZSAic3VzcGVuZCIKKyAqIGNhbGxiYWNrcyBmb3IgdGhlbS4KICAqLwogaW50IGRwbV9zdXNwZW5kX3N0YXJ0KHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmgKaW5kZXggYzdjYjRmYy4uYjhmYTFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmgKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmgKQEAgLTEsNyArMSwxNCBAQAotc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9PTjsKLX0KKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorCitleHRlcm4gdm9pZCBwbV9ydW50aW1lX2luaXQoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHBtX3J1bnRpbWVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKyNlbHNlIC8qICFDT05GSUdfUE1fUlVOVElNRSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CisKKyNlbmRpZiAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KIAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogCkBAIC0xNiwyMyArMjMsMzMgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgZGV2aWNlLCBwb3dlci5lbnRyeSk7CiB9CiAKK2V4dGVybiB2b2lkIGRldmljZV9wbV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkZXZpY2VfcG1fYWRkKHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gdm9pZCBkZXZpY2VfcG1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gdm9pZCBkZXZpY2VfcG1fbW92ZV9iZWZvcmUoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX21vdmVfYWZ0ZXIoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX21vdmVfbGFzdChzdHJ1Y3QgZGV2aWNlICopOwogCi0jZWxzZSAvKiBDT05GSUdfUE1fU0xFRVAgKi8KKyNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwbV9ydW50aW1lX2luaXQoZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXBtX3J1bnRpbWVfcmVtb3ZlKGRldik7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fYWRkKHN0cnVjdCBkZXZpY2UgKmRldikge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fbW92ZV9iZWZvcmUoc3RydWN0IGRldmljZSAqZGV2YSwKIAkJCQkJIHN0cnVjdCBkZXZpY2UgKmRldmIpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX21vdmVfYWZ0ZXIoc3RydWN0IGRldmljZSAqZGV2YSwKIAkJCQkJc3RydWN0IGRldmljZSAqZGV2Yikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fbW92ZV9sYXN0KHN0cnVjdCBkZXZpY2UgKmRldikge30KIAotI2VuZGlmCisjZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLwogCiAjaWZkZWYgQ09ORklHX1BNCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NTU2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCkBAIC0wLDAgKzEsMTAxMSBAQAorLyoKKyAqIGRyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgLSBIZWxwZXIgZnVuY3Rpb25zIGZvciBkZXZpY2UgcnVuLXRpbWUgUE0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPiwgTm92ZWxsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisKK3N0YXRpYyBpbnQgX19wbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZnJvbV93cSk7CitzdGF0aWMgaW50IF9fcG1fcmVxdWVzdF9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldik7CitzdGF0aWMgaW50IF9fcG1fcmVxdWVzdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKKworLyoqCisgKiBwbV9ydW50aW1lX2RlYWN0aXZhdGVfdGltZXIgLSBEZWFjdGl2YXRlIGdpdmVuIGRldmljZSdzIHN1c3BlbmQgdGltZXIuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICovCitzdGF0aWMgdm9pZCBwbV9ydW50aW1lX2RlYWN0aXZhdGVfdGltZXIoc3RydWN0IGRldmljZSAqZGV2KQoreworCWlmIChkZXYtPnBvd2VyLnRpbWVyX2V4cGlyZXMgPiAwKSB7CisJCWRlbF90aW1lcigmZGV2LT5wb3dlci5zdXNwZW5kX3RpbWVyKTsKKwkJZGV2LT5wb3dlci50aW1lcl9leHBpcmVzID0gMDsKKwl9Cit9CisKKy8qKgorICogcG1fcnVudGltZV9jYW5jZWxfcGVuZGluZyAtIERlYWN0aXZhdGUgc3VzcGVuZCB0aW1lciBhbmQgY2FuY2VsIHJlcXVlc3RzLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqLworc3RhdGljIHZvaWQgcG1fcnVudGltZV9jYW5jZWxfcGVuZGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcG1fcnVudGltZV9kZWFjdGl2YXRlX3RpbWVyKGRldik7CisJLyoKKwkgKiBJbiBjYXNlIHRoZXJlJ3MgYSByZXF1ZXN0IHBlbmRpbmcsIG1ha2Ugc3VyZSBpdHMgd29yayBmdW5jdGlvbiB3aWxsCisJICogcmV0dXJuIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcuCisJICovCisJZGV2LT5wb3dlci5yZXF1ZXN0ID0gUlBNX1JFUV9OT05FOworfQorCisvKioKKyAqIF9fcG1fcnVudGltZV9pZGxlIC0gTm90aWZ5IGRldmljZSBidXMgdHlwZSBpZiB0aGUgZGV2aWNlIGNhbiBiZSBzdXNwZW5kZWQuCisgKiBAZGV2OiBEZXZpY2UgdG8gbm90aWZ5IHRoZSBidXMgdHlwZSBhYm91dC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHVuZGVyIGRldi0+cG93ZXIubG9jayB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKi8KK3N0YXRpYyBpbnQgX19wbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQorCV9fcmVsZWFzZXMoJmRldi0+cG93ZXIubG9jaykgX19hY3F1aXJlcygmZGV2LT5wb3dlci5sb2NrKQoreworCWludCByZXR2YWwgPSAwOworCisJZGV2X2RiZyhkZXYsICJfX3BtX3J1bnRpbWVfaWRsZSgpIVxuIik7CisKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yKQorCQlyZXR2YWwgPSAtRUlOVkFMOworCWVsc2UgaWYgKGRldi0+cG93ZXIuaWRsZV9ub3RpZmljYXRpb24pCisJCXJldHZhbCA9IC1FSU5QUk9HUkVTUzsKKwllbHNlIGlmIChhdG9taWNfcmVhZCgmZGV2LT5wb3dlci51c2FnZV9jb3VudCkgPiAwCisJICAgIHx8IGRldi0+cG93ZXIuZGlzYWJsZV9kZXB0aCA+IDAKKwkgICAgfHwgZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyAhPSBSUE1fQUNUSVZFKQorCQlyZXR2YWwgPSAtRUFHQUlOOworCWVsc2UgaWYgKCFwbV9jaGlsZHJlbl9zdXNwZW5kZWQoZGV2KSkKKwkJcmV0dmFsID0gLUVCVVNZOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0OworCisJaWYgKGRldi0+cG93ZXIucmVxdWVzdF9wZW5kaW5nKSB7CisJCS8qCisJCSAqIElmIGFuIGlkbGUgbm90aWZpY2F0aW9uIHJlcXVlc3QgaXMgcGVuZGluZywgY2FuY2VsIGl0LiAgQW55CisJCSAqIG90aGVyIHBlbmRpbmcgcmVxdWVzdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdXMuCisJCSAqLworCQlpZiAoZGV2LT5wb3dlci5yZXF1ZXN0ID09IFJQTV9SRVFfSURMRSkgeworCQkJZGV2LT5wb3dlci5yZXF1ZXN0ID0gUlBNX1JFUV9OT05FOworCQl9IGVsc2UgaWYgKGRldi0+cG93ZXIucmVxdWVzdCAhPSBSUE1fUkVRX05PTkUpIHsKKwkJCXJldHZhbCA9IC1FQUdBSU47CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWRldi0+cG93ZXIuaWRsZV9ub3RpZmljYXRpb24gPSB0cnVlOworCisJaWYgKGRldi0+YnVzICYmIGRldi0+YnVzLT5wbSAmJiBkZXYtPmJ1cy0+cG0tPnJ1bnRpbWVfaWRsZSkgeworCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwkJZGV2LT5idXMtPnBtLT5ydW50aW1lX2lkbGUoZGV2KTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCX0KKworCWRldi0+cG93ZXIuaWRsZV9ub3RpZmljYXRpb24gPSBmYWxzZTsKKwl3YWtlX3VwX2FsbCgmZGV2LT5wb3dlci53YWl0X3F1ZXVlKTsKKworIG91dDoKKwlkZXZfZGJnKGRldiwgIl9fcG1fcnVudGltZV9pZGxlKCkgcmV0dXJucyAlZCFcbiIsIHJldHZhbCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIHBtX3J1bnRpbWVfaWRsZSAtIE5vdGlmeSBkZXZpY2UgYnVzIHR5cGUgaWYgdGhlIGRldmljZSBjYW4gYmUgc3VzcGVuZGVkLgorICogQGRldjogRGV2aWNlIHRvIG5vdGlmeSB0aGUgYnVzIHR5cGUgYWJvdXQuCisgKi8KK2ludCBwbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXR2YWw7CisKKwlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCXJldHZhbCA9IF9fcG1fcnVudGltZV9pZGxlKGRldik7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX3J1bnRpbWVfaWRsZSk7CisKKy8qKgorICogX19wbV9ydW50aW1lX3N1c3BlbmQgLSBDYXJyeSBvdXQgcnVuLXRpbWUgc3VzcGVuZCBvZiBnaXZlbiBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gc3VzcGVuZC4KKyAqIEBmcm9tX3dxOiBJZiBzZXQsIHRoZSBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQgdmlhIHBtX3dxLgorICoKKyAqIENoZWNrIGlmIHRoZSBkZXZpY2UgY2FuIGJlIHN1c3BlbmRlZCBhbmQgcnVuIHRoZSAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrCisgKiBwcm92aWRlZCBieSBpdHMgYnVzIHR5cGUuICBJZiBhbm90aGVyIHN1c3BlbmQgaGFzIGJlZW4gc3RhcnRlZCBlYXJsaWVyLCB3YWl0CisgKiBmb3IgaXQgdG8gZmluaXNoLiAgSWYgYW4gaWRsZSBub3RpZmljYXRpb24gb3Igc3VzcGVuZCByZXF1ZXN0IGlzIHBlbmRpbmcgb3IKKyAqIHNjaGVkdWxlZCwgY2FuY2VsIGl0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgdW5kZXIgZGV2LT5wb3dlci5sb2NrIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqLworaW50IF9fcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBmcm9tX3dxKQorCV9fcmVsZWFzZXMoJmRldi0+cG93ZXIubG9jaykgX19hY3F1aXJlcygmZGV2LT5wb3dlci5sb2NrKQoreworCXN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IE5VTEw7CisJYm9vbCBub3RpZnkgPSBmYWxzZTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWRldl9kYmcoZGV2LCAiX19wbV9ydW50aW1lX3N1c3BlbmQoKSVzIVxuIiwKKwkJZnJvbV93cSA/ICIgZnJvbSB3b3JrcXVldWUiIDogIiIpOworCisgcmVwZWF0OgorCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IpIHsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUGVuZGluZyByZXN1bWUgcmVxdWVzdHMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdXMuICovCisJaWYgKGRldi0+cG93ZXIucmVxdWVzdF9wZW5kaW5nCisJICAgICYmIGRldi0+cG93ZXIucmVxdWVzdCA9PSBSUE1fUkVRX1JFU1VNRSkgeworCQlyZXR2YWwgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBPdGhlciBzY2hlZHVsZWQgb3IgcGVuZGluZyByZXF1ZXN0cyBuZWVkIHRvIGJlIGNhbmNlbGVkLiAqLworCXBtX3J1bnRpbWVfY2FuY2VsX3BlbmRpbmcoZGV2KTsKKworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9TVVNQRU5ERUQpCisJCXJldHZhbCA9IDE7CisJZWxzZSBpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fUkVTVU1JTkcKKwkgICAgfHwgZGV2LT5wb3dlci5kaXNhYmxlX2RlcHRoID4gMAorCSAgICB8fCBhdG9taWNfcmVhZCgmZGV2LT5wb3dlci51c2FnZV9jb3VudCkgPiAwKQorCQlyZXR2YWwgPSAtRUFHQUlOOworCWVsc2UgaWYgKCFwbV9jaGlsZHJlbl9zdXNwZW5kZWQoZGV2KSkKKwkJcmV0dmFsID0gLUVCVVNZOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0OworCisJaWYgKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPT0gUlBNX1NVU1BFTkRJTkcpIHsKKwkJREVGSU5FX1dBSVQod2FpdCk7CisKKwkJaWYgKGZyb21fd3EpIHsKKwkJCXJldHZhbCA9IC1FSU5QUk9HUkVTUzsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogV2FpdCBmb3IgdGhlIG90aGVyIHN1c3BlbmQgcnVubmluZyBpbiBwYXJhbGxlbCB3aXRoIHVzLiAqLworCQlmb3IgKDs7KSB7CisJCQlwcmVwYXJlX3RvX3dhaXQoJmRldi0+cG93ZXIud2FpdF9xdWV1ZSwgJndhaXQsCisJCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzICE9IFJQTV9TVVNQRU5ESU5HKQorCQkJCWJyZWFrOworCisJCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwkJCXNjaGVkdWxlKCk7CisKKwkJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCX0KKwkJZmluaXNoX3dhaXQoJmRldi0+cG93ZXIud2FpdF9xdWV1ZSwgJndhaXQpOworCQlnb3RvIHJlcGVhdDsKKwl9CisKKwlkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID0gUlBNX1NVU1BFTkRJTkc7CisKKwlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPnBtICYmIGRldi0+YnVzLT5wbS0+cnVudGltZV9zdXNwZW5kKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQlyZXR2YWwgPSBkZXYtPmJ1cy0+cG0tPnJ1bnRpbWVfc3VzcGVuZChkZXYpOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCWRldi0+cG93ZXIucnVudGltZV9lcnJvciA9IHJldHZhbDsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSAtRU5PU1lTOworCX0KKworCWlmIChyZXR2YWwpIHsKKwkJZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9IFJQTV9BQ1RJVkU7CisJCXBtX3J1bnRpbWVfY2FuY2VsX3BlbmRpbmcoZGV2KTsKKwkJZGV2LT5wb3dlci5kZWZlcnJlZF9yZXN1bWUgPSBmYWxzZTsKKworCQlpZiAocmV0dmFsID09IC1FQUdBSU4gfHwgcmV0dmFsID09IC1FQlVTWSkgeworCQkJbm90aWZ5ID0gdHJ1ZTsKKwkJCWRldi0+cG93ZXIucnVudGltZV9lcnJvciA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID0gUlBNX1NVU1BFTkRFRDsKKworCQlpZiAoZGV2LT5wYXJlbnQpIHsKKwkJCXBhcmVudCA9IGRldi0+cGFyZW50OworCQkJYXRvbWljX2FkZF91bmxlc3MoJnBhcmVudC0+cG93ZXIuY2hpbGRfY291bnQsIC0xLCAwKTsKKwkJfQorCX0KKwl3YWtlX3VwX2FsbCgmZGV2LT5wb3dlci53YWl0X3F1ZXVlKTsKKworCWlmIChkZXYtPnBvd2VyLmRlZmVycmVkX3Jlc3VtZSkgeworCQlkZXYtPnBvd2VyLmRlZmVycmVkX3Jlc3VtZSA9IGZhbHNlOworCQlfX3BtX3J1bnRpbWVfcmVzdW1lKGRldiwgZmFsc2UpOworCQlyZXR2YWwgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobm90aWZ5KQorCQlfX3BtX3J1bnRpbWVfaWRsZShkZXYpOworCisJaWYgKHBhcmVudCAmJiAhcGFyZW50LT5wb3dlci5pZ25vcmVfY2hpbGRyZW4pIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCXBtX3JlcXVlc3RfaWRsZShwYXJlbnQpOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJfQorCisgb3V0OgorCWRldl9kYmcoZGV2LCAiX19wbV9ydW50aW1lX3N1c3BlbmQoKSByZXR1cm5zICVkIVxuIiwgcmV0dmFsKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogcG1fcnVudGltZV9zdXNwZW5kIC0gQ2Fycnkgb3V0IHJ1bi10aW1lIHN1c3BlbmQgb2YgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIHN1c3BlbmQuCisgKi8KK2ludCBwbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXR2YWw7CisKKwlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCXJldHZhbCA9IF9fcG1fcnVudGltZV9zdXNwZW5kKGRldiwgZmFsc2UpOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9ydW50aW1lX3N1c3BlbmQpOworCisvKioKKyAqIF9fcG1fcnVudGltZV9yZXN1bWUgLSBDYXJyeSBvdXQgcnVuLXRpbWUgcmVzdW1lIG9mIGdpdmVuIGRldmljZS4KKyAqIEBkZXY6IERldmljZSB0byByZXN1bWUuCisgKiBAZnJvbV93cTogSWYgc2V0LCB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkIHZpYSBwbV93cS4KKyAqCisgKiBDaGVjayBpZiB0aGUgZGV2aWNlIGNhbiBiZSB3b2tlbiB1cCBhbmQgcnVuIHRoZSAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sKKyAqIHByb3ZpZGVkIGJ5IGl0cyBidXMgdHlwZS4gIElmIGFub3RoZXIgcmVzdW1lIGhhcyBiZWVuIHN0YXJ0ZWQgZWFybGllciwgd2FpdAorICogZm9yIGl0IHRvIGZpbmlzaC4gIElmIHRoZXJlJ3MgYSBzdXNwZW5kIHJ1bm5pbmcgaW4gcGFyYWxsZWwgd2l0aCB0aGlzCisgKiBmdW5jdGlvbiwgd2FpdCBmb3IgaXQgdG8gZmluaXNoIGFuZCByZXN1bWUgdGhlIGRldmljZS4gIENhbmNlbCBhbnkgc2NoZWR1bGVkCisgKiBvciBwZW5kaW5nIHJlcXVlc3RzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgdW5kZXIgZGV2LT5wb3dlci5sb2NrIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqLworaW50IF9fcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGZyb21fd3EpCisJX19yZWxlYXNlcygmZGV2LT5wb3dlci5sb2NrKSBfX2FjcXVpcmVzKCZkZXYtPnBvd2VyLmxvY2spCit7CisJc3RydWN0IGRldmljZSAqcGFyZW50ID0gTlVMTDsKKwlpbnQgcmV0dmFsID0gMDsKKworCWRldl9kYmcoZGV2LCAiX19wbV9ydW50aW1lX3Jlc3VtZSgpJXMhXG4iLAorCQlmcm9tX3dxID8gIiBmcm9tIHdvcmtxdWV1ZSIgOiAiIik7CisKKyByZXBlYXQ6CisJaWYgKGRldi0+cG93ZXIucnVudGltZV9lcnJvcikgeworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlwbV9ydW50aW1lX2NhbmNlbF9wZW5kaW5nKGRldik7CisKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fQUNUSVZFKQorCQlyZXR2YWwgPSAxOworCWVsc2UgaWYgKGRldi0+cG93ZXIuZGlzYWJsZV9kZXB0aCA+IDApCisJCXJldHZhbCA9IC1FQUdBSU47CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fUkVTVU1JTkcKKwkgICAgfHwgZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fU1VTUEVORElORykgeworCQlERUZJTkVfV0FJVCh3YWl0KTsKKworCQlpZiAoZnJvbV93cSkgeworCQkJaWYgKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPT0gUlBNX1NVU1BFTkRJTkcpCisJCQkJZGV2LT5wb3dlci5kZWZlcnJlZF9yZXN1bWUgPSB0cnVlOworCQkJcmV0dmFsID0gLUVJTlBST0dSRVNTOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBXYWl0IGZvciB0aGUgb3BlcmF0aW9uIGNhcnJpZWQgb3V0IGluIHBhcmFsbGVsIHdpdGggdXMuICovCisJCWZvciAoOzspIHsKKwkJCXByZXBhcmVfdG9fd2FpdCgmZGV2LT5wb3dlci53YWl0X3F1ZXVlLCAmd2FpdCwKKwkJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOworCQkJaWYgKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgIT0gUlBNX1JFU1VNSU5HCisJCQkgICAgJiYgZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyAhPSBSUE1fU1VTUEVORElORykKKwkJCQlicmVhazsKKworCQkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCQlzY2hlZHVsZSgpOworCisJCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQl9CisJCWZpbmlzaF93YWl0KCZkZXYtPnBvd2VyLndhaXRfcXVldWUsICZ3YWl0KTsKKwkJZ290byByZXBlYXQ7CisJfQorCisJaWYgKCFwYXJlbnQgJiYgZGV2LT5wYXJlbnQpIHsKKwkJLyoKKwkJICogSW5jcmVtZW50IHRoZSBwYXJlbnQncyByZXN1bWUgY291bnRlciBhbmQgcmVzdW1lIGl0IGlmCisJCSAqIG5lY2Vzc2FyeS4KKwkJICovCisJCXBhcmVudCA9IGRldi0+cGFyZW50OworCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUocGFyZW50KTsKKworCQlzcGluX2xvY2tfaXJxKCZwYXJlbnQtPnBvd2VyLmxvY2spOworCQkvKgorCQkgKiBXZSBjYW4gcmVzdW1lIGlmIHRoZSBwYXJlbnQncyBydW4tdGltZSBQTSBpcyBkaXNhYmxlZCBvciBpdAorCQkgKiBpcyBzZXQgdG8gaWdub3JlIGNoaWxkcmVuLgorCQkgKi8KKwkJaWYgKCFwYXJlbnQtPnBvd2VyLmRpc2FibGVfZGVwdGgKKwkJICAgICYmICFwYXJlbnQtPnBvd2VyLmlnbm9yZV9jaGlsZHJlbikgeworCQkJX19wbV9ydW50aW1lX3Jlc3VtZShwYXJlbnQsIGZhbHNlKTsKKwkJCWlmIChwYXJlbnQtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzICE9IFJQTV9BQ1RJVkUpCisJCQkJcmV0dmFsID0gLUVCVVNZOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmcGFyZW50LT5wb3dlci5sb2NrKTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisJCWdvdG8gcmVwZWF0OworCX0KKworCWRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPSBSUE1fUkVTVU1JTkc7CisKKwlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPnBtICYmIGRldi0+YnVzLT5wbS0+cnVudGltZV9yZXN1bWUpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCXJldHZhbCA9IGRldi0+YnVzLT5wbS0+cnVudGltZV9yZXN1bWUoZGV2KTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQlkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgPSByZXR2YWw7CisJfSBlbHNlIHsKKwkJcmV0dmFsID0gLUVOT1NZUzsKKwl9CisKKwlpZiAocmV0dmFsKSB7CisJCWRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPSBSUE1fU1VTUEVOREVEOworCQlwbV9ydW50aW1lX2NhbmNlbF9wZW5kaW5nKGRldik7CisJfSBlbHNlIHsKKwkJZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9IFJQTV9BQ1RJVkU7CisJCWlmIChwYXJlbnQpCisJCQlhdG9taWNfaW5jKCZwYXJlbnQtPnBvd2VyLmNoaWxkX2NvdW50KTsKKwl9CisJd2FrZV91cF9hbGwoJmRldi0+cG93ZXIud2FpdF9xdWV1ZSk7CisKKwlpZiAoIXJldHZhbCkKKwkJX19wbV9yZXF1ZXN0X2lkbGUoZGV2KTsKKworIG91dDoKKwlpZiAocGFyZW50KSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQlwbV9ydW50aW1lX3B1dChwYXJlbnQpOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJfQorCisJZGV2X2RiZyhkZXYsICJfX3BtX3J1bnRpbWVfcmVzdW1lKCkgcmV0dXJucyAlZCFcbiIsIHJldHZhbCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIHBtX3J1bnRpbWVfcmVzdW1lIC0gQ2Fycnkgb3V0IHJ1bi10aW1lIHJlc3VtZSBvZiBnaXZlbiBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gc3VzcGVuZC4KKyAqLworaW50IHBtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0dmFsOworCisJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwlyZXR2YWwgPSBfX3BtX3J1bnRpbWVfcmVzdW1lKGRldiwgZmFsc2UpOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9ydW50aW1lX3Jlc3VtZSk7CisKKy8qKgorICogcG1fcnVudGltZV93b3JrIC0gVW5pdmVyc2FsIHJ1bi10aW1lIFBNIHdvcmsgZnVuY3Rpb24uCisgKiBAd29yazogV29yayBzdHJ1Y3R1cmUgdXNlZCBmb3Igc2NoZWR1bGluZyB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgZnVuY3Rpb24uCisgKgorICogVXNlIEB3b3JrIHRvIGdldCB0aGUgZGV2aWNlIG9iamVjdCB0aGUgd29yayBpcyB0byBiZSBkb25lIGZvciwgZGV0ZXJtaW5lIHdoYXQKKyAqIGlzIHRvIGJlIGRvbmUgYW5kIGV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIHJ1bi10aW1lIFBNIGZ1bmN0aW9uLgorICovCitzdGF0aWMgdm9pZCBwbV9ydW50aW1lX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGV2aWNlLCBwb3dlci53b3JrKTsKKwllbnVtIHJwbV9yZXF1ZXN0IHJlcTsKKworCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwlpZiAoIWRldi0+cG93ZXIucmVxdWVzdF9wZW5kaW5nKQorCQlnb3RvIG91dDsKKworCXJlcSA9IGRldi0+cG93ZXIucmVxdWVzdDsKKwlkZXYtPnBvd2VyLnJlcXVlc3QgPSBSUE1fUkVRX05PTkU7CisJZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcgPSBmYWxzZTsKKworCXN3aXRjaCAocmVxKSB7CisJY2FzZSBSUE1fUkVRX05PTkU6CisJCWJyZWFrOworCWNhc2UgUlBNX1JFUV9JRExFOgorCQlfX3BtX3J1bnRpbWVfaWRsZShkZXYpOworCQlicmVhazsKKwljYXNlIFJQTV9SRVFfU1VTUEVORDoKKwkJX19wbV9ydW50aW1lX3N1c3BlbmQoZGV2LCB0cnVlKTsKKwkJYnJlYWs7CisJY2FzZSBSUE1fUkVRX1JFU1VNRToKKwkJX19wbV9ydW50aW1lX3Jlc3VtZShkZXYsIHRydWUpOworCQlicmVhazsKKwl9CisKKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworfQorCisvKioKKyAqIF9fcG1fcmVxdWVzdF9pZGxlIC0gU3VibWl0IGFuIGlkbGUgbm90aWZpY2F0aW9uIHJlcXVlc3QgZm9yIGdpdmVuIGRldmljZS4KKyAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCisgKgorICogQ2hlY2sgaWYgdGhlIGRldmljZSdzIHJ1bi10aW1lIFBNIHN0YXR1cyBpcyBjb3JyZWN0IGZvciBzdXNwZW5kaW5nIHRoZSBkZXZpY2UKKyAqIGFuZCBxdWV1ZSB1cCBhIHJlcXVlc3QgdG8gcnVuIF9fcG1fcnVudGltZV9pZGxlKCkgZm9yIGl0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgdW5kZXIgZGV2LT5wb3dlci5sb2NrIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqLworc3RhdGljIGludCBfX3BtX3JlcXVlc3RfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yKQorCQlyZXR2YWwgPSAtRUlOVkFMOworCWVsc2UgaWYgKGF0b21pY19yZWFkKCZkZXYtPnBvd2VyLnVzYWdlX2NvdW50KSA+IDAKKwkgICAgfHwgZGV2LT5wb3dlci5kaXNhYmxlX2RlcHRoID4gMAorCSAgICB8fCBkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9TVVNQRU5ERUQKKwkgICAgfHwgZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fU1VTUEVORElORykKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwllbHNlIGlmICghcG1fY2hpbGRyZW5fc3VzcGVuZGVkKGRldikpCisJCXJldHZhbCA9IC1FQlVTWTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKGRldi0+cG93ZXIucmVxdWVzdF9wZW5kaW5nKSB7CisJCS8qIEFueSByZXF1ZXN0cyBvdGhlciB0aGVuIFJQTV9SRVFfSURMRSB0YWtlIHByZWNlZGVuY2UuICovCisJCWlmIChkZXYtPnBvd2VyLnJlcXVlc3QgPT0gUlBNX1JFUV9OT05FKQorCQkJZGV2LT5wb3dlci5yZXF1ZXN0ID0gUlBNX1JFUV9JRExFOworCQllbHNlIGlmIChkZXYtPnBvd2VyLnJlcXVlc3QgIT0gUlBNX1JFUV9JRExFKQorCQkJcmV0dmFsID0gLUVBR0FJTjsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlkZXYtPnBvd2VyLnJlcXVlc3QgPSBSUE1fUkVRX0lETEU7CisJZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcgPSB0cnVlOworCXF1ZXVlX3dvcmsocG1fd3EsICZkZXYtPnBvd2VyLndvcmspOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBwbV9yZXF1ZXN0X2lkbGUgLSBTdWJtaXQgYW4gaWRsZSBub3RpZmljYXRpb24gcmVxdWVzdCBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqLworaW50IHBtX3JlcXVlc3RfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cG93ZXIubG9jaywgZmxhZ3MpOworCXJldHZhbCA9IF9fcG1fcmVxdWVzdF9pZGxlKGRldik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wb3dlci5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTF9HUEwocG1fcmVxdWVzdF9pZGxlKTsKKworLyoqCisgKiBfX3BtX3JlcXVlc3Rfc3VzcGVuZCAtIFN1Ym1pdCBhIHN1c3BlbmQgcmVxdWVzdCBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIHN1c3BlbmQuCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkZXYtPnBvd2VyLmxvY2sgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICovCitzdGF0aWMgaW50IF9fcG1fcmVxdWVzdF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPT0gUlBNX1NVU1BFTkRFRCkKKwkJcmV0dmFsID0gMTsKKwllbHNlIGlmIChhdG9taWNfcmVhZCgmZGV2LT5wb3dlci51c2FnZV9jb3VudCkgPiAwCisJICAgIHx8IGRldi0+cG93ZXIuZGlzYWJsZV9kZXB0aCA+IDApCisJCXJldHZhbCA9IC1FQUdBSU47CisJZWxzZSBpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fU1VTUEVORElORykKKwkJcmV0dmFsID0gLUVJTlBST0dSRVNTOworCWVsc2UgaWYgKCFwbV9jaGlsZHJlbl9zdXNwZW5kZWQoZGV2KSkKKwkJcmV0dmFsID0gLUVCVVNZOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcG1fcnVudGltZV9kZWFjdGl2YXRlX3RpbWVyKGRldik7CisKKwlpZiAoZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcpIHsKKwkJLyoKKwkJICogUGVuZGluZyByZXN1bWUgcmVxdWVzdHMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdXMsIGJ1dCB3ZSBjYW4KKwkJICogb3ZlcnRha2UgYW55IG90aGVyIHBlbmRpbmcgcmVxdWVzdC4KKwkJICovCisJCWlmIChkZXYtPnBvd2VyLnJlcXVlc3QgPT0gUlBNX1JFUV9SRVNVTUUpCisJCQlyZXR2YWwgPSAtRUFHQUlOOworCQllbHNlIGlmIChkZXYtPnBvd2VyLnJlcXVlc3QgIT0gUlBNX1JFUV9TVVNQRU5EKQorCQkJZGV2LT5wb3dlci5yZXF1ZXN0ID0gcmV0dmFsID8KKwkJCQkJCVJQTV9SRVFfTk9ORSA6IFJQTV9SRVFfU1VTUEVORDsKKwkJcmV0dXJuIHJldHZhbDsKKwl9IGVsc2UgaWYgKHJldHZhbCkgeworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWRldi0+cG93ZXIucmVxdWVzdCA9IFJQTV9SRVFfU1VTUEVORDsKKwlkZXYtPnBvd2VyLnJlcXVlc3RfcGVuZGluZyA9IHRydWU7CisJcXVldWVfd29yayhwbV93cSwgJmRldi0+cG93ZXIud29yayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwbV9zdXNwZW5kX3RpbWVyX2ZuIC0gVGltZXIgZnVuY3Rpb24gZm9yIHBtX3NjaGVkdWxlX3N1c3BlbmQoKS4KKyAqIEBkYXRhOiBEZXZpY2UgcG9pbnRlciBwYXNzZWQgYnkgcG1fc2NoZWR1bGVfc3VzcGVuZCgpLgorICoKKyAqIENoZWNrIGlmIHRoZSB0aW1lIGlzIHJpZ2h0IGFuZCBleGVjdXRlIF9fcG1fcmVxdWVzdF9zdXNwZW5kKCkgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgdm9pZCBwbV9zdXNwZW5kX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAoc3RydWN0IGRldmljZSAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGV4cGlyZXM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wb3dlci5sb2NrLCBmbGFncyk7CisKKwlleHBpcmVzID0gZGV2LT5wb3dlci50aW1lcl9leHBpcmVzOworCS8qIElmICdleHBpcmUnIGlzIGFmdGVyICdqaWZmaWVzJyB3ZSd2ZSBiZWVuIGNhbGxlZCB0b28gZWFybHkuICovCisJaWYgKGV4cGlyZXMgPiAwICYmICF0aW1lX2FmdGVyKGV4cGlyZXMsIGppZmZpZXMpKSB7CisJCWRldi0+cG93ZXIudGltZXJfZXhwaXJlcyA9IDA7CisJCV9fcG1fcmVxdWVzdF9zdXNwZW5kKGRldik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wb3dlci5sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogcG1fc2NoZWR1bGVfc3VzcGVuZCAtIFNldCB1cCBhIHRpbWVyIHRvIHN1Ym1pdCBhIHN1c3BlbmQgcmVxdWVzdCBpbiBmdXR1cmUuCisgKiBAZGV2OiBEZXZpY2UgdG8gc3VzcGVuZC4KKyAqIEBkZWxheTogVGltZSB0byB3YWl0IGJlZm9yZSBzdWJtaXR0aW5nIGEgc3VzcGVuZCByZXF1ZXN0LCBpbiBtaWxsaXNlY29uZHMuCisgKi8KK2ludCBwbV9zY2hlZHVsZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wb3dlci5sb2NrLCBmbGFncyk7CisKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yKSB7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghZGVsYXkpIHsKKwkJcmV0dmFsID0gX19wbV9yZXF1ZXN0X3N1c3BlbmQoZGV2KTsKKwkJZ290byBvdXQ7CisJfQorCisJcG1fcnVudGltZV9kZWFjdGl2YXRlX3RpbWVyKGRldik7CisKKwlpZiAoZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcpIHsKKwkJLyoKKwkJICogUGVuZGluZyByZXN1bWUgcmVxdWVzdHMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdXMsIGJ1dCBhbnkKKwkJICogb3RoZXIgcGVuZGluZyByZXF1ZXN0cyBoYXZlIHRvIGJlIGNhbmNlbGVkLgorCQkgKi8KKwkJaWYgKGRldi0+cG93ZXIucmVxdWVzdCA9PSBSUE1fUkVRX1JFU1VNRSkgeworCQkJcmV0dmFsID0gLUVBR0FJTjsKKwkJCWdvdG8gb3V0OworCQl9CisJCWRldi0+cG93ZXIucmVxdWVzdCA9IFJQTV9SRVFfTk9ORTsKKwl9CisKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fU1VTUEVOREVEKQorCQlyZXR2YWwgPSAxOworCWVsc2UgaWYgKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPT0gUlBNX1NVU1BFTkRJTkcpCisJCXJldHZhbCA9IC1FSU5QUk9HUkVTUzsKKwllbHNlIGlmIChhdG9taWNfcmVhZCgmZGV2LT5wb3dlci51c2FnZV9jb3VudCkgPiAwCisJICAgIHx8IGRldi0+cG93ZXIuZGlzYWJsZV9kZXB0aCA+IDApCisJCXJldHZhbCA9IC1FQUdBSU47CisJZWxzZSBpZiAoIXBtX2NoaWxkcmVuX3N1c3BlbmRlZChkZXYpKQorCQlyZXR2YWwgPSAtRUJVU1k7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CisKKwlkZXYtPnBvd2VyLnRpbWVyX2V4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhkZWxheSk7CisJbW9kX3RpbWVyKCZkZXYtPnBvd2VyLnN1c3BlbmRfdGltZXIsIGRldi0+cG93ZXIudGltZXJfZXhwaXJlcyk7CisKKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wb3dlci5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTF9HUEwocG1fc2NoZWR1bGVfc3VzcGVuZCk7CisKKy8qKgorICogcG1fcmVxdWVzdF9yZXN1bWUgLSBTdWJtaXQgYSByZXN1bWUgcmVxdWVzdCBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIHJlc3VtZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHVuZGVyIGRldi0+cG93ZXIubG9jayB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKi8KK3N0YXRpYyBpbnQgX19wbV9yZXF1ZXN0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9BQ1RJVkUpCisJCXJldHZhbCA9IDE7CisJZWxzZSBpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fUkVTVU1JTkcpCisJCXJldHZhbCA9IC1FSU5QUk9HUkVTUzsKKwllbHNlIGlmIChkZXYtPnBvd2VyLmRpc2FibGVfZGVwdGggPiAwKQorCQlyZXR2YWwgPSAtRUFHQUlOOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcG1fcnVudGltZV9kZWFjdGl2YXRlX3RpbWVyKGRldik7CisKKwlpZiAoZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcpIHsKKwkJLyogSWYgbm9uLXJlc3VtZSByZXF1ZXN0IGlzIHBlbmRpbmcsIHdlIGNhbiBvdmVydGFrZSBpdC4gKi8KKwkJZGV2LT5wb3dlci5yZXF1ZXN0ID0gcmV0dmFsID8gUlBNX1JFUV9OT05FIDogUlBNX1JFUV9SRVNVTUU7CisJCXJldHVybiByZXR2YWw7CisJfSBlbHNlIGlmIChyZXR2YWwpIHsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlkZXYtPnBvd2VyLnJlcXVlc3QgPSBSUE1fUkVRX1JFU1VNRTsKKwlkZXYtPnBvd2VyLnJlcXVlc3RfcGVuZGluZyA9IHRydWU7CisJcXVldWVfd29yayhwbV93cSwgJmRldi0+cG93ZXIud29yayk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIHBtX3JlcXVlc3RfcmVzdW1lIC0gU3VibWl0IGEgcmVzdW1lIHJlcXVlc3QgZm9yIGdpdmVuIGRldmljZS4KKyAqIEBkZXY6IERldmljZSB0byByZXN1bWUuCisgKi8KK2ludCBwbV9yZXF1ZXN0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cG93ZXIubG9jaywgZmxhZ3MpOworCXJldHZhbCA9IF9fcG1fcmVxdWVzdF9yZXN1bWUoZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBvd2VyLmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9yZXF1ZXN0X3Jlc3VtZSk7CisKKy8qKgorICogX19wbV9ydW50aW1lX2dldCAtIFJlZmVyZW5jZSBjb3VudCBhIGRldmljZSBhbmQgd2FrZSBpdCB1cCwgaWYgbmVjZXNzYXJ5LgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBzeW5jOiBJZiBzZXQgYW5kIHRoZSBkZXZpY2UgaXMgc3VzcGVuZGVkLCByZXN1bWUgaXQgc3luY2hyb25vdXNseS4KKyAqCisgKiBJbmNyZW1lbnQgdGhlIHVzYWdlIGNvdW50IG9mIHRoZSBkZXZpY2UgYW5kIGlmIGl0IHdhcyB6ZXJvIHByZXZpb3VzbHksCisgKiByZXN1bWUgaXQgb3Igc3VibWl0IGEgcmVzdW1lIHJlcXVlc3QgZm9yIGl0LCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIEBzeW5jLgorICovCitpbnQgX19wbV9ydW50aW1lX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgc3luYykKK3sKKwlpbnQgcmV0dmFsID0gMTsKKworCWlmIChhdG9taWNfYWRkX3JldHVybigxLCAmZGV2LT5wb3dlci51c2FnZV9jb3VudCkgPT0gMSkKKwkJcmV0dmFsID0gc3luYyA/IHBtX3J1bnRpbWVfcmVzdW1lKGRldikgOiBwbV9yZXF1ZXN0X3Jlc3VtZShkZXYpOworCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fcG1fcnVudGltZV9nZXQpOworCisvKioKKyAqIF9fcG1fcnVudGltZV9wdXQgLSBEZWNyZW1lbnQgdGhlIGRldmljZSdzIHVzYWdlIGNvdW50ZXIgYW5kIG5vdGlmeSBpdHMgYnVzLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBzeW5jOiBJZiB0aGUgZGV2aWNlJ3MgYnVzIHR5cGUgaXMgdG8gYmUgbm90aWZpZWQsIGRvIHRoYXQgc3luY2hyb25vdXNseS4KKyAqCisgKiBEZWNyZW1lbnQgdGhlIHVzYWdlIGNvdW50IG9mIHRoZSBkZXZpY2UgYW5kIGlmIGl0IHJlYWNoZXMgemVybywgY2Fycnkgb3V0IGEKKyAqIHN5bmNocm9ub3VzIGlkbGUgbm90aWZpY2F0aW9uIG9yIHN1Ym1pdCBhbiBpZGxlIG5vdGlmaWNhdGlvbiByZXF1ZXN0IGZvciBpdCwKKyAqIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgQHN5bmMuCisgKi8KK2ludCBfX3BtX3J1bnRpbWVfcHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBzeW5jKQoreworCWludCByZXR2YWwgPSAwOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldi0+cG93ZXIudXNhZ2VfY291bnQpKQorCQlyZXR2YWwgPSBzeW5jID8gcG1fcnVudGltZV9pZGxlKGRldikgOiBwbV9yZXF1ZXN0X2lkbGUoZGV2KTsKKworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX3BtX3J1bnRpbWVfcHV0KTsKKworLyoqCisgKiBfX3BtX3J1bnRpbWVfc2V0X3N0YXR1cyAtIFNldCBydW4tdGltZSBQTSBzdGF0dXMgb2YgYSBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICogQHN0YXR1czogTmV3IHJ1bi10aW1lIFBNIHN0YXR1cyBvZiB0aGUgZGV2aWNlLgorICoKKyAqIElmIHJ1bi10aW1lIFBNIG9mIHRoZSBkZXZpY2UgaXMgZGlzYWJsZWQgb3IgaXRzIHBvd2VyLnJ1bnRpbWVfZXJyb3IgZmllbGQgaXMKKyAqIGRpZmZlcmVudCBmcm9tIHplcm8sIHRoZSBzdGF0dXMgbWF5IGJlIGNoYW5nZWQgZWl0aGVyIHRvIFJQTV9BQ1RJVkUsIG9yIHRvCisgKiBSUE1fU1VTUEVOREVELCBhcyBsb25nIGFzIHRoYXQgcmVmbGVjdHMgdGhlIGFjdHVhbCBzdGF0ZSBvZiB0aGUgZGV2aWNlLgorICogSG93ZXZlciwgaWYgdGhlIGRldmljZSBoYXMgYSBwYXJlbnQgYW5kIHRoZSBwYXJlbnQgaXMgbm90IGFjdGl2ZSwgYW5kIHRoZQorICogcGFyZW50J3MgcG93ZXIuaWdub3JlX2NoaWxkcmVuIGZsYWcgaXMgdW5zZXQsIHRoZSBkZXZpY2UncyBzdGF0dXMgY2Fubm90IGJlCisgKiBzZXQgdG8gUlBNX0FDVElWRSwgc28gLUVCVVNZIGlzIHJldHVybmVkIGluIHRoYXQgY2FzZS4KKyAqCisgKiBJZiBzdWNjZXNzZnVsLCBfX3BtX3J1bnRpbWVfc2V0X3N0YXR1cygpIGNsZWFycyB0aGUgcG93ZXIucnVudGltZV9lcnJvciBmaWVsZAorICogYW5kIHRoZSBkZXZpY2UgcGFyZW50J3MgY291bnRlciBvZiB1bnN1c3BlbmRlZCBjaGlsZHJlbiBpcyBtb2RpZmllZCB0bworICogcmVmbGVjdCB0aGUgbmV3IHN0YXR1cy4gIElmIHRoZSBuZXcgc3RhdHVzIGlzIFJQTV9TVVNQRU5ERUQsIGFuIGlkbGUKKyAqIG5vdGlmaWNhdGlvbiByZXF1ZXN0IGZvciB0aGUgcGFyZW50IGlzIHN1Ym1pdHRlZC4KKyAqLworaW50IF9fcG1fcnVudGltZV9zZXRfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBkZXYtPnBhcmVudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWJvb2wgbm90aWZ5X3BhcmVudCA9IGZhbHNlOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoc3RhdHVzICE9IFJQTV9BQ1RJVkUgJiYgc3RhdHVzICE9IFJQTV9TVVNQRU5ERUQpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cG93ZXIubG9jaywgZmxhZ3MpOworCisJaWYgKCFkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgJiYgIWRldi0+cG93ZXIuZGlzYWJsZV9kZXB0aCkgeworCQllcnJvciA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IHN0YXR1cykKKwkJZ290byBvdXRfc2V0OworCisJaWYgKHN0YXR1cyA9PSBSUE1fU1VTUEVOREVEKSB7CisJCS8qIEl0IGFsd2F5cyBpcyBwb3NzaWJsZSB0byBzZXQgdGhlIHN0YXR1cyB0byAnc3VzcGVuZGVkJy4gKi8KKwkJaWYgKHBhcmVudCkgeworCQkJYXRvbWljX2FkZF91bmxlc3MoJnBhcmVudC0+cG93ZXIuY2hpbGRfY291bnQsIC0xLCAwKTsKKwkJCW5vdGlmeV9wYXJlbnQgPSAhcGFyZW50LT5wb3dlci5pZ25vcmVfY2hpbGRyZW47CisJCX0KKwkJZ290byBvdXRfc2V0OworCX0KKworCWlmIChwYXJlbnQpIHsKKwkJc3Bpbl9sb2NrX2lycSgmcGFyZW50LT5wb3dlci5sb2NrKTsKKworCQkvKgorCQkgKiBJdCBpcyBpbnZhbGlkIHRvIHB1dCBhbiBhY3RpdmUgY2hpbGQgdW5kZXIgYSBwYXJlbnQgdGhhdCBpcworCQkgKiBub3QgYWN0aXZlLCBoYXMgcnVuLXRpbWUgUE0gZW5hYmxlZCBhbmQgdGhlCisJCSAqICdwb3dlci5pZ25vcmVfY2hpbGRyZW4nIGZsYWcgdW5zZXQuCisJCSAqLworCQlpZiAoIXBhcmVudC0+cG93ZXIuZGlzYWJsZV9kZXB0aAorCQkgICAgJiYgIXBhcmVudC0+cG93ZXIuaWdub3JlX2NoaWxkcmVuCisJCSAgICAmJiBwYXJlbnQtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzICE9IFJQTV9BQ1RJVkUpIHsKKwkJCWVycm9yID0gLUVCVVNZOworCQl9IGVsc2UgeworCQkJaWYgKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPT0gUlBNX1NVU1BFTkRFRCkKKwkJCQlhdG9taWNfaW5jKCZwYXJlbnQtPnBvd2VyLmNoaWxkX2NvdW50KTsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycSgmcGFyZW50LT5wb3dlci5sb2NrKTsKKworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dDsKKwl9CisKKyBvdXRfc2V0OgorCWRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPSBzdGF0dXM7CisJZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yID0gMDsKKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wb3dlci5sb2NrLCBmbGFncyk7CisKKwlpZiAobm90aWZ5X3BhcmVudCkKKwkJcG1fcmVxdWVzdF9pZGxlKHBhcmVudCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX3BtX3J1bnRpbWVfc2V0X3N0YXR1cyk7CisKKy8qKgorICogX19wbV9ydW50aW1lX2JhcnJpZXIgLSBDYW5jZWwgcGVuZGluZyByZXF1ZXN0cyBhbmQgd2FpdCBmb3IgY29tcGxldGlvbnMuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICoKKyAqIEZsdXNoIGFsbCBwZW5kaW5nIHJlcXVlc3RzIGZvciB0aGUgZGV2aWNlIGZyb20gcG1fd3EgYW5kIHdhaXQgZm9yIGFsbAorICogcnVuLXRpbWUgUE0gb3BlcmF0aW9ucyBpbnZvbHZpbmcgdGhlIGRldmljZSBpbiBwcm9ncmVzcyB0byBjb21wbGV0ZS4KKyAqCisgKiBTaG91bGQgYmUgY2FsbGVkIHVuZGVyIGRldi0+cG93ZXIubG9jayB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKi8KK3N0YXRpYyB2b2lkIF9fcG1fcnVudGltZV9iYXJyaWVyKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwbV9ydW50aW1lX2RlYWN0aXZhdGVfdGltZXIoZGV2KTsKKworCWlmIChkZXYtPnBvd2VyLnJlcXVlc3RfcGVuZGluZykgeworCQlkZXYtPnBvd2VyLnJlcXVlc3QgPSBSUE1fUkVRX05PTkU7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQljYW5jZWxfd29ya19zeW5jKCZkZXYtPnBvd2VyLndvcmspOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCWRldi0+cG93ZXIucmVxdWVzdF9wZW5kaW5nID0gZmFsc2U7CisJfQorCisJaWYgKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPT0gUlBNX1NVU1BFTkRJTkcKKwkgICAgfHwgZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fUkVTVU1JTkcKKwkgICAgfHwgZGV2LT5wb3dlci5pZGxlX25vdGlmaWNhdGlvbikgeworCQlERUZJTkVfV0FJVCh3YWl0KTsKKworCQkvKiBTdXNwZW5kLCB3YWtlLXVwIG9yIGlkbGUgbm90aWZpY2F0aW9uIGluIHByb2dyZXNzLiAqLworCQlmb3IgKDs7KSB7CisJCQlwcmVwYXJlX3RvX3dhaXQoJmRldi0+cG93ZXIud2FpdF9xdWV1ZSwgJndhaXQsCisJCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzICE9IFJQTV9TVVNQRU5ESU5HCisJCQkgICAgJiYgZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyAhPSBSUE1fUkVTVU1JTkcKKwkJCSAgICAmJiAhZGV2LT5wb3dlci5pZGxlX25vdGlmaWNhdGlvbikKKwkJCQlicmVhazsKKwkJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQkJc2NoZWR1bGUoKTsKKworCQkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJfQorCQlmaW5pc2hfd2FpdCgmZGV2LT5wb3dlci53YWl0X3F1ZXVlLCAmd2FpdCk7CisJfQorfQorCisvKioKKyAqIHBtX3J1bnRpbWVfYmFycmllciAtIEZsdXNoIHBlbmRpbmcgcmVxdWVzdHMgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb25zLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqCisgKiBQcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBiZWluZyBzdXNwZW5kZWQgYnkgaW5jcmVtZW50aW5nIGl0cyB1c2FnZSBjb3VudGVyIGFuZAorICogaWYgdGhlcmUncyBhIHBlbmRpbmcgcmVzdW1lIHJlcXVlc3QgZm9yIHRoZSBkZXZpY2UsIHdha2UgdGhlIGRldmljZSB1cC4KKyAqIE5leHQsIG1ha2Ugc3VyZSB0aGF0IGFsbCBwZW5kaW5nIHJlcXVlc3RzIGZvciB0aGUgZGV2aWNlIGhhdmUgYmVlbiBmbHVzaGVkCisgKiBmcm9tIHBtX3dxIGFuZCB3YWl0IGZvciBhbGwgcnVuLXRpbWUgUE0gb3BlcmF0aW9ucyBpbnZvbHZpbmcgdGhlIGRldmljZSBpbgorICogcHJvZ3Jlc3MgdG8gY29tcGxldGUuCisgKgorICogUmV0dXJuIHZhbHVlOgorICogMSwgaWYgdGhlcmUgd2FzIGEgcmVzdW1lIHJlcXVlc3QgcGVuZGluZyBhbmQgdGhlIGRldmljZSBoYWQgdG8gYmUgd29rZW4gdXAsCisgKiAwLCBvdGhlcndpc2UKKyAqLworaW50IHBtX3J1bnRpbWVfYmFycmllcihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShkZXYpOworCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwlpZiAoZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcKKwkgICAgJiYgZGV2LT5wb3dlci5yZXF1ZXN0ID09IFJQTV9SRVFfUkVTVU1FKSB7CisJCV9fcG1fcnVudGltZV9yZXN1bWUoZGV2LCBmYWxzZSk7CisJCXJldHZhbCA9IDE7CisJfQorCisJX19wbV9ydW50aW1lX2JhcnJpZXIoZGV2KTsKKworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwlwbV9ydW50aW1lX3B1dF9ub2lkbGUoZGV2KTsKKworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9ydW50aW1lX2JhcnJpZXIpOworCisvKioKKyAqIF9fcG1fcnVudGltZV9kaXNhYmxlIC0gRGlzYWJsZSBydW4tdGltZSBQTSBvZiBhIGRldmljZS4KKyAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCisgKiBAY2hlY2tfcmVzdW1lOiBJZiBzZXQsIGNoZWNrIGlmIHRoZXJlJ3MgYSByZXN1bWUgcmVxdWVzdCBmb3IgdGhlIGRldmljZS4KKyAqCisgKiBJbmNyZW1lbnQgcG93ZXIuZGlzYWJsZV9kZXB0aCBmb3IgdGhlIGRldmljZSBhbmQgaWYgd2FzIHplcm8gcHJldmlvdXNseSwKKyAqIGNhbmNlbCBhbGwgcGVuZGluZyBydW4tdGltZSBQTSByZXF1ZXN0cyBmb3IgdGhlIGRldmljZSBhbmQgd2FpdCBmb3IgYWxsCisgKiBvcGVyYXRpb25zIGluIHByb2dyZXNzIHRvIGNvbXBsZXRlLiAgVGhlIGRldmljZSBjYW4gYmUgZWl0aGVyIGFjdGl2ZSBvcgorICogc3VzcGVuZGVkIGFmdGVyIGl0cyBydW4tdGltZSBQTSBoYXMgYmVlbiBkaXNhYmxlZC4KKyAqCisgKiBJZiBAY2hlY2tfcmVzdW1lIGlzIHNldCBhbmQgdGhlcmUncyBhIHJlc3VtZSByZXF1ZXN0IHBlbmRpbmcgd2hlbgorICogX19wbV9ydW50aW1lX2Rpc2FibGUoKSBpcyBjYWxsZWQgYW5kIHBvd2VyLmRpc2FibGVfZGVwdGggaXMgemVybywgdGhlCisgKiBmdW5jdGlvbiB3aWxsIHdha2UgdXAgdGhlIGRldmljZSBiZWZvcmUgZGlzYWJsaW5nIGl0cyBydW4tdGltZSBQTS4KKyAqLwordm9pZCBfX3BtX3J1bnRpbWVfZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgY2hlY2tfcmVzdW1lKQoreworCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwlpZiAoZGV2LT5wb3dlci5kaXNhYmxlX2RlcHRoID4gMCkgeworCQlkZXYtPnBvd2VyLmRpc2FibGVfZGVwdGgrKzsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBXYWtlIHVwIHRoZSBkZXZpY2UgaWYgdGhlcmUncyBhIHJlc3VtZSByZXF1ZXN0IHBlbmRpbmcsIGJlY2F1c2UgdGhhdAorCSAqIG1lYW5zIHRoZXJlIHByb2JhYmx5IGlzIHNvbWUgSS9PIHRvIHByb2Nlc3MgYW5kIGRpc2FibGluZyBydW4tdGltZSBQTQorCSAqIHNob3VsZG4ndCBwcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBwcm9jZXNzaW5nIHRoZSBJL08uCisJICovCisJaWYgKGNoZWNrX3Jlc3VtZSAmJiBkZXYtPnBvd2VyLnJlcXVlc3RfcGVuZGluZworCSAgICAmJiBkZXYtPnBvd2VyLnJlcXVlc3QgPT0gUlBNX1JFUV9SRVNVTUUpIHsKKwkJLyoKKwkJICogUHJldmVudCBzdXNwZW5kcyBhbmQgaWRsZSBub3RpZmljYXRpb25zIGZyb20gYmVpbmcgY2FycmllZAorCQkgKiBvdXQgYWZ0ZXIgd2UgaGF2ZSB3b2tlbiB1cCB0aGUgZGV2aWNlLgorCQkgKi8KKwkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2KTsKKworCQlfX3BtX3J1bnRpbWVfcmVzdW1lKGRldiwgZmFsc2UpOworCisJCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCX0KKworCWlmICghZGV2LT5wb3dlci5kaXNhYmxlX2RlcHRoKyspCisJCV9fcG1fcnVudGltZV9iYXJyaWVyKGRldik7CisKKyBvdXQ6CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19wbV9ydW50aW1lX2Rpc2FibGUpOworCisvKioKKyAqIHBtX3J1bnRpbWVfZW5hYmxlIC0gRW5hYmxlIHJ1bi10aW1lIFBNIG9mIGEgZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqLwordm9pZCBwbV9ydW50aW1lX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnBvd2VyLmxvY2ssIGZsYWdzKTsKKworCWlmIChkZXYtPnBvd2VyLmRpc2FibGVfZGVwdGggPiAwKQorCQlkZXYtPnBvd2VyLmRpc2FibGVfZGVwdGgtLTsKKwllbHNlCisJCWRldl93YXJuKGRldiwgIlVuYmFsYW5jZWQgJXMhXG4iLCBfX2Z1bmNfXyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBvd2VyLmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX3J1bnRpbWVfZW5hYmxlKTsKKworLyoqCisgKiBwbV9ydW50aW1lX2luaXQgLSBJbml0aWFsaXplIHJ1bi10aW1lIFBNIGZpZWxkcyBpbiBnaXZlbiBkZXZpY2Ugb2JqZWN0LgorICogQGRldjogRGV2aWNlIG9iamVjdCB0byBpbml0aWFsaXplLgorICovCit2b2lkIHBtX3J1bnRpbWVfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+cG93ZXIubG9jayk7CisKKwlkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID0gUlBNX1NVU1BFTkRFRDsKKwlkZXYtPnBvd2VyLmlkbGVfbm90aWZpY2F0aW9uID0gZmFsc2U7CisKKwlkZXYtPnBvd2VyLmRpc2FibGVfZGVwdGggPSAxOworCWF0b21pY19zZXQoJmRldi0+cG93ZXIudXNhZ2VfY291bnQsIDApOworCisJZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yID0gMDsKKworCWF0b21pY19zZXQoJmRldi0+cG93ZXIuY2hpbGRfY291bnQsIDApOworCXBtX3N1c3BlbmRfaWdub3JlX2NoaWxkcmVuKGRldiwgZmFsc2UpOworCisJZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcgPSBmYWxzZTsKKwlkZXYtPnBvd2VyLnJlcXVlc3QgPSBSUE1fUkVRX05PTkU7CisJZGV2LT5wb3dlci5kZWZlcnJlZF9yZXN1bWUgPSBmYWxzZTsKKwlJTklUX1dPUksoJmRldi0+cG93ZXIud29yaywgcG1fcnVudGltZV93b3JrKTsKKworCWRldi0+cG93ZXIudGltZXJfZXhwaXJlcyA9IDA7CisJc2V0dXBfdGltZXIoJmRldi0+cG93ZXIuc3VzcGVuZF90aW1lciwgcG1fc3VzcGVuZF90aW1lcl9mbiwKKwkJCSh1bnNpZ25lZCBsb25nKWRldik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnBvd2VyLndhaXRfcXVldWUpOworfQorCisvKioKKyAqIHBtX3J1bnRpbWVfcmVtb3ZlIC0gUHJlcGFyZSBmb3IgcmVtb3ZpbmcgYSBkZXZpY2UgZnJvbSBkZXZpY2UgaGllcmFyY2h5LgorICogQGRldjogRGV2aWNlIG9iamVjdCBiZWluZyByZW1vdmVkIGZyb20gZGV2aWNlIGhpZXJhcmNoeS4KKyAqLwordm9pZCBwbV9ydW50aW1lX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJX19wbV9ydW50aW1lX2Rpc2FibGUoZGV2LCBmYWxzZSk7CisKKwkvKiBDaGFuZ2UgdGhlIHN0YXR1cyBiYWNrIHRvICdzdXNwZW5kZWQnIHRvIG1hdGNoIHRoZSBpbml0aWFsIHN0YXR1cy4gKi8KKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fQUNUSVZFKQorCQlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWJsay5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMKaW5kZXggMWUxNTg4OS4uYjZjZDU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMKQEAgLTE3Miw2ICsxNzIsOSBAQAogCQlCVUcoKTsKIAkJYmlvX2VuZGlvKGJpbywgLUVOWElPKTsKIAkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkgeworCQliaW9fZW5kaW8oYmlvLCAtRU9QTk9UU1VQUCk7CisJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoYmlvLT5iaV9pb192ZWMgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImFvZTogYmlfaW9fdmVjIGlzIE5VTExcbiIpOwogCQlCVUcoKTsKQEAgLTI2OCw2ICsyNzEsNyBAQAogCWlmICghZC0+YmxrcSkKIAkJZ290byBlcnJfbWVtcG9vbDsKIAlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KGQtPmJsa3EsIGFvZWJsa19tYWtlX3JlcXVlc3QpOworCWQtPmJsa3EtPmJhY2tpbmdfZGV2X2luZm8ubmFtZSA9ICJhb2UiOwogCWlmIChiZGlfaW5pdCgmZC0+YmxrcS0+YmFja2luZ19kZXZfaW5mbykpCiAJCWdvdG8gZXJyX2Jsa3E7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmQtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCBhNTJjYzdmLi4wNTg5ZGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC0zODg5LDcgKzM4ODksNyBAQAogCWludCBqID0gMDsKIAlpbnQgcmM7CiAJaW50IGRhYywgcmV0dXJuX2NvZGU7Ci0JSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZiA9IE5VTEw7CisJSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZjsKIAogCWlmIChyZXNldF9kZXZpY2VzKSB7CiAJCS8qIFJlc2V0IHRoZSBjb250cm9sbGVyIHdpdGggYSBQQ0kgcG93ZXItY3ljbGUgKi8KQEAgLTQwMjksNiArNDAyOSw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiB1bmFibGUgdG8gZGV0ZXJtaW5lIGZpcm13YXJlIgogCQkJIiB2ZXJzaW9uIG9mIGNvbnRyb2xsZXJcbiIpOwogCX0KKwlrZnJlZShpbnFfYnVmZik7CiAKIAljY2lzc19wcm9jaW5pdChpKTsKIApAQCAtNDA0NSw3ICs0MDQ2LDYgQEAKIAlyZXR1cm4gMTsKIAogY2xlYW40OgotCWtmcmVlKGlucV9idWZmKTsKIAlrZnJlZShoYmFbaV0tPmNtZF9wb29sX2JpdHMpOwogCWlmIChoYmFbaV0tPmNtZF9wb29sKQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGhiYVtpXS0+cGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IDkxYjc1MzAuLjJiMzg3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtNDE1MSw3ICs0MTUxLDcgQEAKIHsKIH0KIAotc3RhdGljIGludCBmbG9wcHlfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZmxvcHB5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IGZkYzsKIApAQCAtNDE2MiwxMCArNDE2MiwxNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmbG9wcHlfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGZsb3BweV9wbV9vcHMgPSB7CiAJLnJlc3VtZSA9IGZsb3BweV9yZXN1bWUsCisJLnJlc3RvcmUgPSBmbG9wcHlfcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZmxvcHB5X2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJmbG9wcHkiLAorCQkucG0gPSAmZmxvcHB5X3BtX29wcywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCA1NzU3MTg4Li5iYmI3OTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAJcG9zID0gKChsb2ZmX3QpIGJpby0+Ymlfc2VjdG9yIDw8IDkpICsgbG8tPmxvX29mZnNldDsKIAogCWlmIChiaW9fcncoYmlvKSA9PSBXUklURSkgewotCQlpbnQgYmFycmllciA9IGJpb19iYXJyaWVyKGJpbyk7CisJCWJvb2wgYmFycmllciA9IGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpOwogCQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLT5sb19iYWNraW5nX2ZpbGU7CiAKIAkJaWYgKGJhcnJpZXIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BjZC5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMKaW5kZXggOTExZGZkOS4uOWYzNTE4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMKQEAgLTIxOSw4ICsyMTksNiBAQAogc3RhdGljIGludCBwY2RfY291bnQ7CQkvKiBudW1iZXIgb2YgYmxvY2tzIHN0aWxsIHRvIGRvICovCiBzdGF0aWMgY2hhciAqcGNkX2J1ZjsJCS8qIGJ1ZmZlciBmb3IgcmVxdWVzdCBpbiBwcm9ncmVzcyAqLwogCi1zdGF0aWMgaW50IHBjZF93YXJuZWQ7CQkvKiBIYXZlIHdlIGxvZ2dlZCBhIHBoYXNlIHdhcm5pbmcgPyAqLwotCiAvKiBrZXJuZWwgZ2x1ZSBzdHJ1Y3R1cmVzICovCiAKIHN0YXRpYyBpbnQgcGNkX2Jsb2NrX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQpAQCAtNDE3LDEyICs0MTUsMTAgQEAKIAkJCQkJcHJpbnRrCiAJCQkJCSAgICAoIiVzOiAlczogVW5leHBlY3RlZCBwaGFzZSAlZCwgZD0lZCwgaz0lZFxuIiwKIAkJCQkJICAgICBjZC0+bmFtZSwgZnVuLCBwLCBkLCBrKTsKLQkJCQlpZiAoKHZlcmJvc2UgPCAyKSAmJiAhcGNkX3dhcm5lZCkgewotCQkJCQlwY2Rfd2FybmVkID0gMTsKLQkJCQkJcHJpbnRrCi0JCQkJCSAgICAoIiVzOiBXQVJOSU5HOiBBVEFQSSBwaGFzZSBlcnJvcnNcbiIsCi0JCQkJCSAgICAgY2QtPm5hbWUpOwotCQkJCX0KKwkJCQlpZiAodmVyYm9zZSA8IDIpCisJCQkJCXByaW50a19vbmNlKAorCQkJCQkgICAgIiVzOiBXQVJOSU5HOiBBVEFQSSBwaGFzZSBlcnJvcnNcbiIsCisJCQkJCSAgICBjZC0+bmFtZSk7CiAJCQkJbWRlbGF5KDEpOwogCQkJfQogCQkJaWYgKGsrKyA+IFBDRF9UTU8pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jIGIvZHJpdmVycy9ibG9jay9wczN2cmFtLmMKaW5kZXggMDk1Zjk3ZS4uYzg3NTNhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wczN2cmFtLmMKKysrIGIvZHJpdmVycy9ibG9jay9wczN2cmFtLmMKQEAgLTEzLDggKzEzLDggQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAorI2luY2x1ZGUgPGFzbS9jZWxsLXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vbHYxY2FsbC5oPgogI2luY2x1ZGUgPGFzbS9wczMuaD4KICNpbmNsdWRlIDxhc20vcHMzZ3B1Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N4OC5jIGIvZHJpdmVycy9ibG9jay9zeDguYwppbmRleCBkYTQwM2I2Li5mNWNkMmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N4OC5jCisrKyBiL2RyaXZlcnMvYmxvY2svc3g4LmMKQEAgLTE1NjQsMTUgKzE1NjQsMTMgQEAKIAogc3RhdGljIGludCBjYXJtX2luaXRfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdGF0aWMgdW5zaWduZWQgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdHJ1Y3QgY2FybV9ob3N0ICpob3N0OwogCXVuc2lnbmVkIGludCBwY2lfZGFjOwogCWludCByYzsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCi0JCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOworCXByaW50a19vbmNlKEtFUk5fREVCVUcgRFJWX05BTUUgIiB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKIAlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKaW5kZXggMzkwZDY5Yi4uYjQ0MWNlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKKysrIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKQEAgLTQxNiwxNSArNDE2LDkgQEAKIAkJZ290byByZXRyeTsKIAl9CiAJaWYgKHdlLm1heF9kaXNrID4gKE1BWF9ESVNLTk8gLSAxKSkgewotCQlzdGF0aWMgaW50IHdhcm5lZDsKLQotCQlpZiAod2FybmVkID09IDApIHsKLQkJCXdhcm5lZCsrOwotCQkJcHJpbnRrKFZJT0RfS0VSTl9JTkZPCi0JCQkJIk9ubHkgZXhhbWluaW5nIHRoZSBmaXJzdCAlZCAiCi0JCQkJIm9mICVkIGRpc2tzIGNvbm5lY3RlZFxuIiwKLQkJCQlNQVhfRElTS05PLCB3ZS5tYXhfZGlzayArIDEpOwotCQl9CisJCXByaW50a19vbmNlKFZJT0RfS0VSTl9JTkZPCisJCQkiT25seSBleGFtaW5pbmcgdGhlIGZpcnN0ICVkIG9mICVkIGRpc2tzIGNvbm5lY3RlZFxuIiwKKwkJCU1BWF9ESVNLTk8sIHdlLm1heF9kaXNrICsgMSk7CiAJfQogCiAJLyogU2VuZCB0aGUgY2xvc2UgZXZlbnQgdG8gT1MvNDAwLiAgV2UgRE9OJ1QgZXhwZWN0IGEgcmVzcG9uc2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcgYi9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnCmluZGV4IDExNjQ4MzcuLjY1MjM2N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZwpAQCAtMTcwLDUgKzE3MCwzMCBAQAogCSAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIHZpcnR1YWwgSENJIGRldmljZXMgaW50byB0aGUKIAkgIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZSAoaGNpX3ZoY2kpLgogCitjb25maWcgQlRfTVJWTAorCXRyaXN0YXRlICJNYXJ2ZWxsIEJsdWV0b290aCBkcml2ZXIgc3VwcG9ydCIKKwloZWxwCisJICBUaGUgY29yZSBkcml2ZXIgdG8gc3VwcG9ydCBNYXJ2ZWxsIEJsdWV0b290aCBkZXZpY2VzLgorCisJICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byBzdXBwb3J0CisJICBNYXJ2ZWxsIEJsdWV0b290aCBkZXZpY2VzLCBzdWNoIGFzIDg2ODguCisKKwkgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBNYXJ2ZWxsIEJsdWV0b290aCBkcml2ZXIKKwkgIGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZS4KKworY29uZmlnIEJUX01SVkxfU0RJTworCXRyaXN0YXRlICJNYXJ2ZWxsIEJULW92ZXItU0RJTyBkcml2ZXIiCisJZGVwZW5kcyBvbiBCVF9NUlZMICYmIE1NQworCXNlbGVjdCBGV19MT0FERVIKKwloZWxwCisJICBUaGUgZHJpdmVyIGZvciBNYXJ2ZWxsIEJsdWV0b290aCBjaGlwc2V0cyB3aXRoIFNESU8gaW50ZXJmYWNlLgorCisJICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byB1c2UgTWFydmVsbCBCbHVldG9vdGgKKwkgIGRldmljZXMgd2l0aCBTRElPIGludGVyZmFjZS4gQ3VycmVudGx5IG9ubHkgU0Q4Njg4IGNoaXBzZXQgaXMKKwkgIHN1cHBvcnRlZC4KKworCSAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIE1hcnZlbGwgQlQtb3Zlci1TRElPIGRyaXZlcgorCSAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlLgorCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlIGIvZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGUKaW5kZXggMTY5MzBmOS4uYjNmNTdkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDEyIEBACiBvYmotJChDT05GSUdfQlRfSENJQlRVU0IpCSs9IGJ0dXNiLm8KIG9iai0kKENPTkZJR19CVF9IQ0lCVFNESU8pCSs9IGJ0c2Rpby5vCiAKK29iai0kKENPTkZJR19CVF9NUlZMKQkJKz0gYnRtcnZsLm8KK29iai0kKENPTkZJR19CVF9NUlZMX1NESU8pCSs9IGJ0bXJ2bF9zZGlvLm8KKworYnRtcnZsLXkJCQk6PSBidG1ydmxfbWFpbi5vCitidG1ydmwtJChDT05GSUdfREVCVUdfRlMpCSs9IGJ0bXJ2bF9kZWJ1Z2ZzLm8KKwogaGNpX3VhcnQteQkJCQk6PSBoY2lfbGRpc2MubwogaGNpX3VhcnQtJChDT05GSUdfQlRfSENJVUFSVF9INCkJKz0gaGNpX2g0Lm8KIGhjaV91YXJ0LSQoQ09ORklHX0JUX0hDSVVBUlRfQkNTUCkJKz0gaGNpX2Jjc3AubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX2RlYnVnZnMuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9kZWJ1Z2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxN2JkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9kZWJ1Z2ZzLmMKQEAgLTAsMCArMSw0MzIgQEAKKy8qKgorICogTWFydmVsbCBCbHVldG9vdGggZHJpdmVyOiBkZWJ1Z2ZzIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKworI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CisjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgorCisjaW5jbHVkZSAiYnRtcnZsX2Rydi5oIgorCitzdHJ1Y3QgYnRtcnZsX2RlYnVnZnNfZGF0YSB7CisJc3RydWN0IGRlbnRyeSAqcm9vdF9kaXIsICpjb25maWdfZGlyLCAqc3RhdHVzX2RpcjsKKworCS8qIGNvbmZpZyAqLworCXN0cnVjdCBkZW50cnkgKmRydmRiZzsKKwlzdHJ1Y3QgZGVudHJ5ICpwc21vZGU7CisJc3RydWN0IGRlbnRyeSAqcHNjbWQ7CisJc3RydWN0IGRlbnRyeSAqaHNtb2RlOworCXN0cnVjdCBkZW50cnkgKmhzY21kOworCXN0cnVjdCBkZW50cnkgKmdwaW9nYXA7CisJc3RydWN0IGRlbnRyeSAqaHNjZmdjbWQ7CisKKwkvKiBzdGF0dXMgKi8KKwlzdHJ1Y3QgZGVudHJ5ICpjdXJwc21vZGU7CisJc3RydWN0IGRlbnRyeSAqaHNzdGF0ZTsKKwlzdHJ1Y3QgZGVudHJ5ICpwc3N0YXRlOworCXN0cnVjdCBkZW50cnkgKnR4ZG5sZHJlYWR5OworfTsKKworc3RhdGljIGludCBidG1ydmxfb3Blbl9nZW5lcmljKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJ0bXJ2bF9oc2NmZ2NtZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCWNvbnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTZdOworCWxvbmcgcmVzdWx0LCByZXQ7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1ZiwgbWluX3Qoc2l6ZV90LCBzaXplb2YoYnVmKSAtIDEsIGNvdW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmcmVzdWx0KTsKKworCXByaXYtPmJ0bXJ2bF9kZXYuaHNjZmdjbWQgPSByZXN1bHQ7CisKKwlpZiAocHJpdi0+YnRtcnZsX2Rldi5oc2NmZ2NtZCkgeworCQlidG1ydmxfcHJlcGFyZV9jb21tYW5kKHByaXYpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPm1haW5fdGhyZWFkLndhaXRfcSk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBidG1ydmxfaHNjZmdjbWRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTZdOworCWludCByZXQ7CisKKwlyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpIC0gMSwgIiVkXG4iLAorCQkJCQkJcHJpdi0+YnRtcnZsX2Rldi5oc2NmZ2NtZCk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmV0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRtcnZsX2hzY2ZnY21kX2ZvcHMgPSB7CisJLnJlYWQJPSBidG1ydmxfaHNjZmdjbWRfcmVhZCwKKwkud3JpdGUJPSBidG1ydmxfaHNjZmdjbWRfd3JpdGUsCisJLm9wZW4JPSBidG1ydmxfb3Blbl9nZW5lcmljLAorfTsKKworc3RhdGljIHNzaXplX3QgYnRtcnZsX3BzbW9kZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTZdOworCWxvbmcgcmVzdWx0LCByZXQ7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1ZiwgbWluX3Qoc2l6ZV90LCBzaXplb2YoYnVmKSAtIDEsIGNvdW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmcmVzdWx0KTsKKworCXByaXYtPmJ0bXJ2bF9kZXYucHNtb2RlID0gcmVzdWx0OworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBidG1ydmxfcHNtb2RlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKwlpbnQgcmV0OworCisJcmV0ID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSAtIDEsICIlZFxuIiwKKwkJCQkJCXByaXYtPmJ0bXJ2bF9kZXYucHNtb2RlKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidG1ydmxfcHNtb2RlX2ZvcHMgPSB7CisJLnJlYWQJPSBidG1ydmxfcHNtb2RlX3JlYWQsCisJLndyaXRlCT0gYnRtcnZsX3BzbW9kZV93cml0ZSwKKwkub3Blbgk9IGJ0bXJ2bF9vcGVuX2dlbmVyaWMsCit9OworCitzdGF0aWMgc3NpemVfdCBidG1ydmxfcHNjbWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKwlsb25nIHJlc3VsdCwgcmV0OworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlc3VsdCk7CisKKwlwcml2LT5idG1ydmxfZGV2LnBzY21kID0gcmVzdWx0OworCisJaWYgKHByaXYtPmJ0bXJ2bF9kZXYucHNjbWQpIHsKKwkJYnRtcnZsX3ByZXBhcmVfY29tbWFuZChwcml2KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5tYWluX3RocmVhZC53YWl0X3EpOworCX0KKworCXJldHVybiBjb3VudDsKKworfQorCitzdGF0aWMgc3NpemVfdCBidG1ydmxfcHNjbWRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTZdOworCWludCByZXQ7CisKKwlyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpIC0gMSwgIiVkXG4iLCBwcml2LT5idG1ydmxfZGV2LnBzY21kKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidG1ydmxfcHNjbWRfZm9wcyA9IHsKKwkucmVhZCA9IGJ0bXJ2bF9wc2NtZF9yZWFkLAorCS53cml0ZSA9IGJ0bXJ2bF9wc2NtZF93cml0ZSwKKwkub3BlbiA9IGJ0bXJ2bF9vcGVuX2dlbmVyaWMsCit9OworCitzdGF0aWMgc3NpemVfdCBidG1ydmxfZ3Bpb2dhcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTZdOworCWxvbmcgcmVzdWx0LCByZXQ7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1ZiwgbWluX3Qoc2l6ZV90LCBzaXplb2YoYnVmKSAtIDEsIGNvdW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDE2LCAmcmVzdWx0KTsKKworCXByaXYtPmJ0bXJ2bF9kZXYuZ3Bpb19nYXAgPSByZXN1bHQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJ0bXJ2bF9ncGlvZ2FwX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKwlpbnQgcmV0OworCisJcmV0ID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSAtIDEsICIweCV4XG4iLAorCQkJCQkJcHJpdi0+YnRtcnZsX2Rldi5ncGlvX2dhcCk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmV0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRtcnZsX2dwaW9nYXBfZm9wcyA9IHsKKwkucmVhZAk9IGJ0bXJ2bF9ncGlvZ2FwX3JlYWQsCisJLndyaXRlCT0gYnRtcnZsX2dwaW9nYXBfd3JpdGUsCisJLm9wZW4JPSBidG1ydmxfb3Blbl9nZW5lcmljLAorfTsKKworc3RhdGljIHNzaXplX3QgYnRtcnZsX2hzY21kX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKwlsb25nIHJlc3VsdCwgcmV0OworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlc3VsdCk7CisKKwlwcml2LT5idG1ydmxfZGV2LmhzY21kID0gcmVzdWx0OworCWlmIChwcml2LT5idG1ydmxfZGV2LmhzY21kKSB7CisJCWJ0bXJ2bF9wcmVwYXJlX2NvbW1hbmQocHJpdik7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+bWFpbl90aHJlYWQud2FpdF9xKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJ0bXJ2bF9oc2NtZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxNl07CisJaW50IHJldDsKKworCXJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxLCAiJWRcbiIsIHByaXYtPmJ0bXJ2bF9kZXYuaHNjbWQpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJldCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0bXJ2bF9oc2NtZF9mb3BzID0geworCS5yZWFkCT0gYnRtcnZsX2hzY21kX3JlYWQsCisJLndyaXRlCT0gYnRtcnZsX2hzY21kX3dyaXRlLAorCS5vcGVuCT0gYnRtcnZsX29wZW5fZ2VuZXJpYywKK307CisKK3N0YXRpYyBzc2l6ZV90IGJ0bXJ2bF9oc21vZGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKwlsb25nIHJlc3VsdCwgcmV0OworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlc3VsdCk7CisKKwlwcml2LT5idG1ydmxfZGV2LmhzbW9kZSA9IHJlc3VsdDsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgYnRtcnZsX2hzbW9kZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIHVzZXJidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTZdOworCWludCByZXQ7CisKKwlyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpIC0gMSwgIiVkXG4iLCBwcml2LT5idG1ydmxfZGV2LmhzbW9kZSk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmV0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRtcnZsX2hzbW9kZV9mb3BzID0geworCS5yZWFkCT0gYnRtcnZsX2hzbW9kZV9yZWFkLAorCS53cml0ZQk9IGJ0bXJ2bF9oc21vZGVfd3JpdGUsCisJLm9wZW4JPSBidG1ydmxfb3Blbl9nZW5lcmljLAorfTsKKworc3RhdGljIHNzaXplX3QgYnRtcnZsX2N1cnBzbW9kZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxNl07CisJaW50IHJldDsKKworCXJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxLCAiJWRcbiIsIHByaXYtPmFkYXB0ZXItPnBzbW9kZSk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmV0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRtcnZsX2N1cnBzbW9kZV9mb3BzID0geworCS5yZWFkCT0gYnRtcnZsX2N1cnBzbW9kZV9yZWFkLAorCS5vcGVuCT0gYnRtcnZsX29wZW5fZ2VuZXJpYywKK307CisKK3N0YXRpYyBzc2l6ZV90IGJ0bXJ2bF9wc3N0YXRlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogdXNlcmJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxNl07CisJaW50IHJldDsKKworCXJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxLCAiJWRcbiIsIHByaXYtPmFkYXB0ZXItPnBzX3N0YXRlKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidG1ydmxfcHNzdGF0ZV9mb3BzID0geworCS5yZWFkCT0gYnRtcnZsX3Bzc3RhdGVfcmVhZCwKKwkub3Blbgk9IGJ0bXJ2bF9vcGVuX2dlbmVyaWMsCit9OworCitzdGF0aWMgc3NpemVfdCBidG1ydmxfaHNzdGF0ZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxNl07CisJaW50IHJldDsKKworCXJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxLCAiJWRcbiIsIHByaXYtPmFkYXB0ZXItPmhzX3N0YXRlKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidG1ydmxfaHNzdGF0ZV9mb3BzID0geworCS5yZWFkCT0gYnRtcnZsX2hzc3RhdGVfcmVhZCwKKwkub3Blbgk9IGJ0bXJ2bF9vcGVuX2dlbmVyaWMsCit9OworCitzdGF0aWMgc3NpemVfdCBidG1ydmxfdHhkbmxkcmVhZHlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTZdOworCWludCByZXQ7CisKKwlyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpIC0gMSwgIiVkXG4iLAorCQkJCQlwcml2LT5idG1ydmxfZGV2LnR4X2RubGRfcmR5KTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidG1ydmxfdHhkbmxkcmVhZHlfZm9wcyA9IHsKKwkucmVhZAk9IGJ0bXJ2bF90eGRubGRyZWFkeV9yZWFkLAorCS5vcGVuCT0gYnRtcnZsX29wZW5fZ2VuZXJpYywKK307CisKK3ZvaWQgYnRtcnZsX2RlYnVnZnNfaW5pdChzdHJ1Y3QgaGNpX2RldiAqaGRldikKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBoZGV2LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgYnRtcnZsX2RlYnVnZnNfZGF0YSAqZGJnOworCisJZGJnID0ga3phbGxvYyhzaXplb2YoKmRiZyksIEdGUF9LRVJORUwpOworCXByaXYtPmRlYnVnZnNfZGF0YSA9IGRiZzsKKworCWlmICghZGJnKSB7CisJCUJUX0VSUigiQ2FuIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGJ0bXJ2bF9kZWJ1Z2ZzX2RhdGEuIik7CisJCXJldHVybjsKKwl9CisKKwlkYmctPnJvb3RfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJidG1ydmwiLCBOVUxMKTsKKworCWRiZy0+Y29uZmlnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiY29uZmlnIiwgZGJnLT5yb290X2Rpcik7CisKKwlkYmctPnBzbW9kZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInBzbW9kZSIsIDA2NDQsIGRiZy0+Y29uZmlnX2RpciwKKwkJCQloZGV2LT5kcml2ZXJfZGF0YSwgJmJ0bXJ2bF9wc21vZGVfZm9wcyk7CisJZGJnLT5wc2NtZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInBzY21kIiwgMDY0NCwgZGJnLT5jb25maWdfZGlyLAorCQkJCWhkZXYtPmRyaXZlcl9kYXRhLCAmYnRtcnZsX3BzY21kX2ZvcHMpOworCWRiZy0+Z3Bpb2dhcCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImdwaW9nYXAiLCAwNjQ0LCBkYmctPmNvbmZpZ19kaXIsCisJCQkJaGRldi0+ZHJpdmVyX2RhdGEsICZidG1ydmxfZ3Bpb2dhcF9mb3BzKTsKKwlkYmctPmhzbW9kZSA9ICBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJoc21vZGUiLCAwNjQ0LCBkYmctPmNvbmZpZ19kaXIsCisJCQkJaGRldi0+ZHJpdmVyX2RhdGEsICZidG1ydmxfaHNtb2RlX2ZvcHMpOworCWRiZy0+aHNjbWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJoc2NtZCIsIDA2NDQsIGRiZy0+Y29uZmlnX2RpciwKKwkJCQloZGV2LT5kcml2ZXJfZGF0YSwgJmJ0bXJ2bF9oc2NtZF9mb3BzKTsKKwlkYmctPmhzY2ZnY21kID0gZGVidWdmc19jcmVhdGVfZmlsZSgiaHNjZmdjbWQiLCAwNjQ0LCBkYmctPmNvbmZpZ19kaXIsCisJCQkJaGRldi0+ZHJpdmVyX2RhdGEsICZidG1ydmxfaHNjZmdjbWRfZm9wcyk7CisKKwlkYmctPnN0YXR1c19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInN0YXR1cyIsIGRiZy0+cm9vdF9kaXIpOworCWRiZy0+Y3VycHNtb2RlID0gZGVidWdmc19jcmVhdGVfZmlsZSgiY3VycHNtb2RlIiwgMDQ0NCwKKwkJCQkJCWRiZy0+c3RhdHVzX2RpciwKKwkJCQkJCWhkZXYtPmRyaXZlcl9kYXRhLAorCQkJCQkJJmJ0bXJ2bF9jdXJwc21vZGVfZm9wcyk7CisJZGJnLT5wc3N0YXRlID0gZGVidWdmc19jcmVhdGVfZmlsZSgicHNzdGF0ZSIsIDA0NDQsIGRiZy0+c3RhdHVzX2RpciwKKwkJCQloZGV2LT5kcml2ZXJfZGF0YSwgJmJ0bXJ2bF9wc3N0YXRlX2ZvcHMpOworCWRiZy0+aHNzdGF0ZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImhzc3RhdGUiLCAwNDQ0LCBkYmctPnN0YXR1c19kaXIsCisJCQkJaGRldi0+ZHJpdmVyX2RhdGEsICZidG1ydmxfaHNzdGF0ZV9mb3BzKTsKKwlkYmctPnR4ZG5sZHJlYWR5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgidHhkbmxkcmVhZHkiLCAwNDQ0LAorCQkJCQkJZGJnLT5zdGF0dXNfZGlyLAorCQkJCQkJaGRldi0+ZHJpdmVyX2RhdGEsCisJCQkJCQkmYnRtcnZsX3R4ZG5sZHJlYWR5X2ZvcHMpOworfQorCit2b2lkIGJ0bXJ2bF9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgaGNpX2RldiAqaGRldikKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBoZGV2LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgYnRtcnZsX2RlYnVnZnNfZGF0YSAqZGJnID0gcHJpdi0+ZGVidWdmc19kYXRhOworCisJaWYgKCFkYmcpCisJCXJldHVybjsKKworCWRlYnVnZnNfcmVtb3ZlKGRiZy0+cHNtb2RlKTsKKwlkZWJ1Z2ZzX3JlbW92ZShkYmctPnBzY21kKTsKKwlkZWJ1Z2ZzX3JlbW92ZShkYmctPmdwaW9nYXApOworCWRlYnVnZnNfcmVtb3ZlKGRiZy0+aHNtb2RlKTsKKwlkZWJ1Z2ZzX3JlbW92ZShkYmctPmhzY21kKTsKKwlkZWJ1Z2ZzX3JlbW92ZShkYmctPmhzY2ZnY21kKTsKKwlkZWJ1Z2ZzX3JlbW92ZShkYmctPmNvbmZpZ19kaXIpOworCisJZGVidWdmc19yZW1vdmUoZGJnLT5jdXJwc21vZGUpOworCWRlYnVnZnNfcmVtb3ZlKGRiZy0+cHNzdGF0ZSk7CisJZGVidWdmc19yZW1vdmUoZGJnLT5oc3N0YXRlKTsKKwlkZWJ1Z2ZzX3JlbW92ZShkYmctPnR4ZG5sZHJlYWR5KTsKKwlkZWJ1Z2ZzX3JlbW92ZShkYmctPnN0YXR1c19kaXIpOworCisJZGVidWdmc19yZW1vdmUoZGJnLT5yb290X2Rpcik7CisKKwlrZnJlZShkYmcpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX2Rydi5oIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMWM3YTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfZHJ2LmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBNYXJ2ZWxsIEJsdWV0b290aCBkcml2ZXI6IGdsb2JhbCBkZWZpbml0aW9ucyAmIGRlY2xhcmF0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KKworI2RlZmluZSBCVE1fSEVBREVSX0xFTgkJCTQKKyNkZWZpbmUgQlRNX1VQTERfU0laRQkJCTIzMTIKKworLyogVGltZSB0byB3YWl0IHVudGlsIEhvc3QgU2xlZXAgc3RhdGUgY2hhbmdlIGluIG1pbGxpc2Vjb25kICovCisjZGVmaW5lIFdBSVRfVU5USUxfSFNfU1RBVEVfQ0hBTkdFRAk1MDAwCisvKiBUaW1lIHRvIHdhaXQgZm9yIGNvbW1hbmQgcmVzcG9uc2UgaW4gbWlsbGlzZWNvbmQgKi8KKyNkZWZpbmUgV0FJVF9VTlRJTF9DTURfUkVTUAkJNTAwMAorCitzdHJ1Y3QgYnRtcnZsX3RocmVhZCB7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcTsKKwl2b2lkICpwcml2OworfTsKKworc3RydWN0IGJ0bXJ2bF9kZXZpY2UgeworCXZvaWQgKmNhcmQ7CisJc3RydWN0IGhjaV9kZXYgKmhjaWRldjsKKworCXU4IHR4X2RubGRfcmR5OworCisJdTggcHNtb2RlOworCXU4IHBzY21kOworCXU4IGhzbW9kZTsKKwl1OCBoc2NtZDsKKworCS8qIExvdyBieXRlIGlzIGdhcCwgaGlnaCBieXRlIGlzIEdQSU8gKi8KKwl1MTYgZ3Bpb19nYXA7CisKKwl1OCBoc2NmZ2NtZDsKKwl1OCBzZW5kY21kZmxhZzsKK307CisKK3N0cnVjdCBidG1ydmxfYWRhcHRlciB7CisJdTMyIGludF9jb3VudDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlOworCXU4IHBzbW9kZTsKKwl1OCBwc19zdGF0ZTsKKwl1OCBoc19zdGF0ZTsKKwl1OCB3YWtldXBfdHJpZXM7CisJd2FpdF9xdWV1ZV9oZWFkX3QgY21kX3dhaXRfcTsKKwl1OCBjbWRfY29tcGxldGU7Cit9OworCitzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgeworCXN0cnVjdCBidG1ydmxfZGV2aWNlIGJ0bXJ2bF9kZXY7CisJc3RydWN0IGJ0bXJ2bF9hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBidG1ydmxfdGhyZWFkIG1haW5fdGhyZWFkOworCWludCAoKmh3X2hvc3RfdG9fY2FyZCkgKHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiwKKwkJCQl1OCAqcGF5bG9hZCwgdTE2IG5iKTsKKwlpbnQgKCpod193YWtldXBfZmlybXdhcmUpIChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYpOworCXNwaW5sb2NrX3QgZHJpdmVyX2xvY2s7CQkvKiBzcGlubG9jayB1c2VkIGJ5IGRyaXZlciAqLworI2lmZGVmIENPTkZJR19ERUJVR19GUworCXZvaWQgKmRlYnVnZnNfZGF0YTsKKyNlbmRpZgorfTsKKworI2RlZmluZSBNUlZMX1ZFTkRPUl9QS1QJCQkweEZFCisKKy8qIEJsdWV0b290aCBjb21tYW5kcyAgKi8KKyNkZWZpbmUgQlRfQ01EX0FVVE9fU0xFRVBfTU9ERQkJMHgyMworI2RlZmluZSBCVF9DTURfSE9TVF9TTEVFUF9DT05GSUcJMHg1OQorI2RlZmluZSBCVF9DTURfSE9TVF9TTEVFUF9FTkFCTEUJMHg1QQorI2RlZmluZSBCVF9DTURfTU9EVUxFX0NGR19SRVEJCTB4NUIKKworLyogU3ViLWNvbW1hbmRzOiBNb2R1bGUgQnJpbmd1cC9TaHV0ZG93biBSZXF1ZXN0ICovCisjZGVmaW5lIE1PRFVMRV9CUklOR1VQX1JFUQkJMHhGMQorI2RlZmluZSBNT0RVTEVfU0hVVERPV05fUkVRCQkweEYyCisKKyNkZWZpbmUgQlRfRVZFTlRfUE9XRVJfU1RBVEUJCTB4MjAKKworLyogQmx1ZXRvb3RoIFBvd2VyIFN0YXRlcyAqLworI2RlZmluZSBCVF9QU19FTkFCTEUJCQkweDAyCisjZGVmaW5lIEJUX1BTX0RJU0FCTEUJCQkweDAzCisjZGVmaW5lIEJUX1BTX1NMRUVQCQkJMHgwMQorCisjZGVmaW5lIE9HRgkJCQkweDNGCisKKy8qIEhvc3QgU2xlZXAgc3RhdGVzICovCisjZGVmaW5lIEhTX0FDVElWQVRFRAkJCTB4MDEKKyNkZWZpbmUgSFNfREVBQ1RJVkFURUQJCQkweDAwCisKKy8qIFBvd2VyIFNhdmUgbW9kZXMgKi8KKyNkZWZpbmUgUFNfU0xFRVAJCQkweDAxCisjZGVmaW5lIFBTX0FXQUtFCQkJMHgwMAorCitzdHJ1Y3QgYnRtcnZsX2NtZCB7CisJX19sZTE2IG9jZl9vZ2Y7CisJdTggbGVuZ3RoOworCXU4IGRhdGFbNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGJ0bXJ2bF9ldmVudCB7CisJdTggZWM7CQkvKiBldmVudCBjb3VudGVyICovCisJdTggbGVuZ3RoOworCXU4IGRhdGFbNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogUHJvdG90eXBlIG9mIGdsb2JhbCBmdW5jdGlvbiAqLworCitzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKmJ0bXJ2bF9hZGRfY2FyZCh2b2lkICpjYXJkKTsKK2ludCBidG1ydmxfcmVtb3ZlX2NhcmQoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2KTsKKwordm9pZCBidG1ydmxfaW50ZXJydXB0KHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdik7CisKK3ZvaWQgYnRtcnZsX2NoZWNrX2V2dHBrdChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGJ0bXJ2bF9wcm9jZXNzX2V2ZW50KHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK2ludCBidG1ydmxfc2VuZF9tb2R1bGVfY2ZnX2NtZChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYsIGludCBzdWJjbWQpOworaW50IGJ0bXJ2bF9wcmVwYXJlX2NvbW1hbmQoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2KTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUwordm9pZCBidG1ydmxfZGVidWdmc19pbml0KHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKK3ZvaWQgYnRtcnZsX2RlYnVnZnNfcmVtb3ZlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX21haW4uYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYwNTU2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfbWFpbi5jCkBAIC0wLDAgKzEsNjI0IEBACisvKioKKyAqIE1hcnZlbGwgQmx1ZXRvb3RoIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKiovCisKKyNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgorI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KKworI2luY2x1ZGUgImJ0bXJ2bF9kcnYuaCIKKworI2RlZmluZSBWRVJTSU9OICIxLjAiCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpbnRlcmZhY2Ugc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsZXIuCisgKiBJdCB1cGRhdGVzIFBvd2VyIFNhdmUgJiBIb3N0IFNsZWVwIHN0YXRlcywgYW5kIHdha2VzIHVwIHRoZSBtYWluCisgKiB0aHJlYWQuCisgKi8KK3ZvaWQgYnRtcnZsX2ludGVycnVwdChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYpCit7CisJcHJpdi0+YWRhcHRlci0+cHNfc3RhdGUgPSBQU19BV0FLRTsKKworCXByaXYtPmFkYXB0ZXItPndha2V1cF90cmllcyA9IDA7CisKKwlwcml2LT5hZGFwdGVyLT5pbnRfY291bnQrKzsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+bWFpbl90aHJlYWQud2FpdF9xKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJ0bXJ2bF9pbnRlcnJ1cHQpOworCit2b2lkIGJ0bXJ2bF9jaGVja19ldnRwa3Qoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBoY2lfZXZlbnRfaGRyICpoZHIgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJc3RydWN0IGhjaV9ldl9jbWRfY29tcGxldGUgKmVjOworCXUxNiBvcGNvZGUsIG9jZjsKKworCWlmIChoZHItPmV2dCA9PSBIQ0lfRVZfQ01EX0NPTVBMRVRFKSB7CisJCWVjID0gKHZvaWQgKikgKHNrYi0+ZGF0YSArIEhDSV9FVkVOVF9IRFJfU0laRSk7CisJCW9wY29kZSA9IF9fbGUxNl90b19jcHUoZWMtPm9wY29kZSk7CisJCW9jZiA9IGhjaV9vcGNvZGVfb2NmKG9wY29kZSk7CisJCWlmIChvY2YgPT0gQlRfQ01EX01PRFVMRV9DRkdfUkVRICYmCisJCQkJCXByaXYtPmJ0bXJ2bF9kZXYuc2VuZGNtZGZsYWcpIHsKKwkJCXByaXYtPmJ0bXJ2bF9kZXYuc2VuZGNtZGZsYWcgPSBmYWxzZTsKKwkJCXByaXYtPmFkYXB0ZXItPmNtZF9jb21wbGV0ZSA9IHRydWU7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmFkYXB0ZXItPmNtZF93YWl0X3EpOworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoYnRtcnZsX2NoZWNrX2V2dHBrdCk7CisKK2ludCBidG1ydmxfcHJvY2Vzc19ldmVudChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGJ0bXJ2bF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgYnRtcnZsX2V2ZW50ICpldmVudDsKKwl1OCByZXQgPSAwOworCisJZXZlbnQgPSAoc3RydWN0IGJ0bXJ2bF9ldmVudCAqKSBza2ItPmRhdGE7CisJaWYgKGV2ZW50LT5lYyAhPSAweGZmKSB7CisJCUJUX0RCRygiTm90IE1hcnZlbGwgRXZlbnQ9JXgiLCBldmVudC0+ZWMpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3dpdGNoIChldmVudC0+ZGF0YVswXSkgeworCWNhc2UgQlRfQ01EX0FVVE9fU0xFRVBfTU9ERToKKwkJaWYgKCFldmVudC0+ZGF0YVsyXSkgeworCQkJaWYgKGV2ZW50LT5kYXRhWzFdID09IEJUX1BTX0VOQUJMRSkKKwkJCQlhZGFwdGVyLT5wc21vZGUgPSAxOworCQkJZWxzZQorCQkJCWFkYXB0ZXItPnBzbW9kZSA9IDA7CisJCQlCVF9EQkcoIlBTIE1vZGU6JXMiLAorCQkJCShhZGFwdGVyLT5wc21vZGUpID8gIkVuYWJsZSIgOiAiRGlzYWJsZSIpOworCQl9IGVsc2UgeworCQkJQlRfREJHKCJQUyBNb2RlIGNvbW1hbmQgZmFpbGVkIik7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJUX0NNRF9IT1NUX1NMRUVQX0NPTkZJRzoKKwkJaWYgKCFldmVudC0+ZGF0YVszXSkKKwkJCUJUX0RCRygiZ3Bpbz0leCwgZ2FwPSV4IiwgZXZlbnQtPmRhdGFbMV0sCisJCQkJCQkJZXZlbnQtPmRhdGFbMl0pOworCQllbHNlCisJCQlCVF9EQkcoIkhTQ0ZHIGNvbW1hbmQgZmFpbGVkIik7CisJCWJyZWFrOworCisJY2FzZSBCVF9DTURfSE9TVF9TTEVFUF9FTkFCTEU6CisJCWlmICghZXZlbnQtPmRhdGFbMV0pIHsKKwkJCWFkYXB0ZXItPmhzX3N0YXRlID0gSFNfQUNUSVZBVEVEOworCQkJaWYgKGFkYXB0ZXItPnBzbW9kZSkKKwkJCQlhZGFwdGVyLT5wc19zdGF0ZSA9IFBTX1NMRUVQOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhZGFwdGVyLT5jbWRfd2FpdF9xKTsKKwkJCUJUX0RCRygiSFMgQUNUSVZBVEVEISIpOworCQl9IGVsc2UgeworCQkJQlRfREJHKCJIUyBFbmFibGUgZmFpbGVkIik7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJUX0NNRF9NT0RVTEVfQ0ZHX1JFUToKKwkJaWYgKHByaXYtPmJ0bXJ2bF9kZXYuc2VuZGNtZGZsYWcgJiYKKwkJCQlldmVudC0+ZGF0YVsxXSA9PSBNT0RVTEVfQlJJTkdVUF9SRVEpIHsKKwkJCUJUX0RCRygiRVZFTlQ6JXMiLCAoZXZlbnQtPmRhdGFbMl0pID8KKwkJCQkiQnJpbmctdXAgZmFpbGVkIiA6ICJCcmluZy11cCBzdWNjZWVkIik7CisJCX0gZWxzZSBpZiAocHJpdi0+YnRtcnZsX2Rldi5zZW5kY21kZmxhZyAmJgorCQkJCWV2ZW50LT5kYXRhWzFdID09IE1PRFVMRV9TSFVURE9XTl9SRVEpIHsKKwkJCUJUX0RCRygiRVZFTlQ6JXMiLCAoZXZlbnQtPmRhdGFbMl0pID8KKwkJCQkiU2h1dGRvd24gZmFpbGVkIiA6ICJTaHV0ZG93biBzdWNjZWVkIik7CisJCX0gZWxzZSB7CisJCQlCVF9EQkcoIkJUX0NNRF9NT0RVTEVfQ0ZHX1JFUSByZXNwIGZvciBBUFAiKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJUX0VWRU5UX1BPV0VSX1NUQVRFOgorCQlpZiAoZXZlbnQtPmRhdGFbMV0gPT0gQlRfUFNfU0xFRVApCisJCQlhZGFwdGVyLT5wc19zdGF0ZSA9IFBTX1NMRUVQOworCQlCVF9EQkcoIkVWRU5UOiVzIiwKKwkJCShhZGFwdGVyLT5wc19zdGF0ZSkgPyAiUFNfU0xFRVAiIDogIlBTX0FXQUtFIik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQlRfREJHKCJVbmtub3duIEV2ZW50PSVkIiwgZXZlbnQtPmRhdGFbMF0pOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKK2V4aXQ6CisJaWYgKCFyZXQpCisJCWtmcmVlX3NrYihza2IpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJ0bXJ2bF9wcm9jZXNzX2V2ZW50KTsKKworaW50IGJ0bXJ2bF9zZW5kX21vZHVsZV9jZmdfY21kKHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiwgaW50IHN1YmNtZCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBidG1ydmxfY21kICpjbWQ7CisJaW50IHJldCA9IDA7CisKKwlza2IgPSBidF9za2JfYWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoc2tiID09IE5VTEwpIHsKKwkJQlRfRVJSKCJObyBmcmVlIHNrYiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljbWQgPSAoc3RydWN0IGJ0bXJ2bF9jbWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqY21kKSk7CisJY21kLT5vY2Zfb2dmID0gY3B1X3RvX2xlMTYoaGNpX29wY29kZV9wYWNrKE9HRiwgQlRfQ01EX01PRFVMRV9DRkdfUkVRKSk7CisJY21kLT5sZW5ndGggPSAxOworCWNtZC0+ZGF0YVswXSA9IHN1YmNtZDsKKworCWJ0X2NiKHNrYiktPnBrdF90eXBlID0gTVJWTF9WRU5ET1JfUEtUOworCisJc2tiLT5kZXYgPSAodm9pZCAqKSBwcml2LT5idG1ydmxfZGV2LmhjaWRldjsKKwlza2JfcXVldWVfaGVhZCgmcHJpdi0+YWRhcHRlci0+dHhfcXVldWUsIHNrYik7CisKKwlwcml2LT5idG1ydmxfZGV2LnNlbmRjbWRmbGFnID0gdHJ1ZTsKKworCXByaXYtPmFkYXB0ZXItPmNtZF9jb21wbGV0ZSA9IGZhbHNlOworCisJQlRfREJHKCJRdWV1ZSBtb2R1bGUgY2ZnIENvbW1hbmQiKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+bWFpbl90aHJlYWQud2FpdF9xKTsKKworCWlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+YWRhcHRlci0+Y21kX3dhaXRfcSwKKwkJCQlwcml2LT5hZGFwdGVyLT5jbWRfY29tcGxldGUsCisJCQkJbXNlY3NfdG9famlmZmllcyhXQUlUX1VOVElMX0NNRF9SRVNQKSkpIHsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJQlRfRVJSKCJtb2R1bGVfY2ZnX2NtZCgleCk6IHRpbWVvdXQ6ICVkIiwKKwkJCQkJc3ViY21kLCBwcml2LT5idG1ydmxfZGV2LnNlbmRjbWRmbGFnKTsKKwl9CisKKwlCVF9EQkcoIm1vZHVsZSBjZmcgQ29tbWFuZCBkb25lIik7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnRtcnZsX3NlbmRfbW9kdWxlX2NmZ19jbWQpOworCitzdGF0aWMgaW50IGJ0bXJ2bF9lbmFibGVfaHMoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGJ0bXJ2bF9jbWQgKmNtZDsKKwlpbnQgcmV0ID0gMDsKKworCXNrYiA9IGJ0X3NrYl9hbGxvYyhzaXplb2YoKmNtZCksIEdGUF9BVE9NSUMpOworCWlmIChza2IgPT0gTlVMTCkgeworCQlCVF9FUlIoIk5vIGZyZWUgc2tiIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNtZCA9IChzdHJ1Y3QgYnRtcnZsX2NtZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpjbWQpKTsKKwljbWQtPm9jZl9vZ2YgPSBjcHVfdG9fbGUxNihoY2lfb3Bjb2RlX3BhY2soT0dGLCBCVF9DTURfSE9TVF9TTEVFUF9FTkFCTEUpKTsKKwljbWQtPmxlbmd0aCA9IDA7CisKKwlidF9jYihza2IpLT5wa3RfdHlwZSA9IE1SVkxfVkVORE9SX1BLVDsKKworCXNrYi0+ZGV2ID0gKHZvaWQgKikgcHJpdi0+YnRtcnZsX2Rldi5oY2lkZXY7CisJc2tiX3F1ZXVlX2hlYWQoJnByaXYtPmFkYXB0ZXItPnR4X3F1ZXVlLCBza2IpOworCisJQlRfREJHKCJRdWV1ZSBocyBlbmFibGUgQ29tbWFuZCIpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5tYWluX3RocmVhZC53YWl0X3EpOworCisJaWYgKCF3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT5hZGFwdGVyLT5jbWRfd2FpdF9xLAorCQkJcHJpdi0+YWRhcHRlci0+aHNfc3RhdGUsCisJCQltc2Vjc190b19qaWZmaWVzKFdBSVRfVU5USUxfSFNfU1RBVEVfQ0hBTkdFRCkpKSB7CisJCXJldCA9IC1FVElNRURPVVQ7CisJCUJUX0VSUigidGltZW91dDogJWQsICVkLCVkIiwgcHJpdi0+YWRhcHRlci0+aHNfc3RhdGUsCisJCQkJCQlwcml2LT5hZGFwdGVyLT5wc19zdGF0ZSwKKwkJCQkJCXByaXYtPmFkYXB0ZXItPndha2V1cF90cmllcyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IGJ0bXJ2bF9wcmVwYXJlX2NvbW1hbmQoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXN0cnVjdCBidG1ydmxfY21kICpjbWQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAocHJpdi0+YnRtcnZsX2Rldi5oc2NmZ2NtZCkgeworCQlwcml2LT5idG1ydmxfZGV2LmhzY2ZnY21kID0gMDsKKworCQlza2IgPSBidF9za2JfYWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHNrYiA9PSBOVUxMKSB7CisJCQlCVF9FUlIoIk5vIGZyZWUgc2tiIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWNtZCA9IChzdHJ1Y3QgYnRtcnZsX2NtZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpjbWQpKTsKKwkJY21kLT5vY2Zfb2dmID0gY3B1X3RvX2xlMTYoaGNpX29wY29kZV9wYWNrKE9HRiwgQlRfQ01EX0hPU1RfU0xFRVBfQ09ORklHKSk7CisJCWNtZC0+bGVuZ3RoID0gMjsKKwkJY21kLT5kYXRhWzBdID0gKHByaXYtPmJ0bXJ2bF9kZXYuZ3Bpb19nYXAgJiAweGZmMDApID4+IDg7CisJCWNtZC0+ZGF0YVsxXSA9ICh1OCkgKHByaXYtPmJ0bXJ2bF9kZXYuZ3Bpb19nYXAgJiAweDAwZmYpOworCisJCWJ0X2NiKHNrYiktPnBrdF90eXBlID0gTVJWTF9WRU5ET1JfUEtUOworCisJCXNrYi0+ZGV2ID0gKHZvaWQgKikgcHJpdi0+YnRtcnZsX2Rldi5oY2lkZXY7CisJCXNrYl9xdWV1ZV9oZWFkKCZwcml2LT5hZGFwdGVyLT50eF9xdWV1ZSwgc2tiKTsKKworCQlCVF9EQkcoIlF1ZXVlIEhTQ0ZHIENvbW1hbmQsIGdwaW89MHgleCwgZ2FwPTB4JXgiLAorCQkJCQkJY21kLT5kYXRhWzBdLCBjbWQtPmRhdGFbMV0pOworCX0KKworCWlmIChwcml2LT5idG1ydmxfZGV2LnBzY21kKSB7CisJCXByaXYtPmJ0bXJ2bF9kZXYucHNjbWQgPSAwOworCisJCXNrYiA9IGJ0X3NrYl9hbGxvYyhzaXplb2YoKmNtZCksIEdGUF9BVE9NSUMpOworCQlpZiAoc2tiID09IE5VTEwpIHsKKwkJCUJUX0VSUigiTm8gZnJlZSBza2IiKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJY21kID0gKHN0cnVjdCBidG1ydmxfY21kICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmNtZCkpOworCQljbWQtPm9jZl9vZ2YgPSBjcHVfdG9fbGUxNihoY2lfb3Bjb2RlX3BhY2soT0dGLCBCVF9DTURfQVVUT19TTEVFUF9NT0RFKSk7CisJCWNtZC0+bGVuZ3RoID0gMTsKKworCQlpZiAocHJpdi0+YnRtcnZsX2Rldi5wc21vZGUpCisJCQljbWQtPmRhdGFbMF0gPSBCVF9QU19FTkFCTEU7CisJCWVsc2UKKwkJCWNtZC0+ZGF0YVswXSA9IEJUX1BTX0RJU0FCTEU7CisKKwkJYnRfY2Ioc2tiKS0+cGt0X3R5cGUgPSBNUlZMX1ZFTkRPUl9QS1Q7CisKKwkJc2tiLT5kZXYgPSAodm9pZCAqKSBwcml2LT5idG1ydmxfZGV2LmhjaWRldjsKKwkJc2tiX3F1ZXVlX2hlYWQoJnByaXYtPmFkYXB0ZXItPnR4X3F1ZXVlLCBza2IpOworCisJCUJUX0RCRygiUXVldWUgUFNNT0RFIENvbW1hbmQ6JWQiLCBjbWQtPmRhdGFbMF0pOworCX0KKworCWlmIChwcml2LT5idG1ydmxfZGV2LmhzY21kKSB7CisJCXByaXYtPmJ0bXJ2bF9kZXYuaHNjbWQgPSAwOworCisJCWlmIChwcml2LT5idG1ydmxfZGV2LmhzbW9kZSkgeworCQkJcmV0ID0gYnRtcnZsX2VuYWJsZV9ocyhwcml2KTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHByaXYtPmh3X3dha2V1cF9maXJtd2FyZShwcml2KTsKKwkJCXByaXYtPmFkYXB0ZXItPmhzX3N0YXRlID0gSFNfREVBQ1RJVkFURUQ7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF90eF9wa3Qoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCByZXQgPSAwOworCisJaWYgKCFza2IgfHwgIXNrYi0+ZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXNrYi0+bGVuIHx8ICgoc2tiLT5sZW4gKyBCVE1fSEVBREVSX0xFTikgPiBCVE1fVVBMRF9TSVpFKSkgeworCQlCVF9FUlIoIlR4IEVycm9yOiBCYWQgc2tiIGxlbmd0aCAlZCA6ICVkIiwKKwkJCQkJCXNrYi0+bGVuLCBCVE1fVVBMRF9TSVpFKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgQlRNX0hFQURFUl9MRU4pIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnRtcCA9IHNrYjsKKworCQlza2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIEJUTV9IRUFERVJfTEVOKTsKKwkJaWYgKCFza2IpIHsKKwkJCUJUX0VSUigiVHggRXJyb3I6IHJlYWxsb2NfaGVhZHJvb20gZmFpbGVkICVkIiwKKwkJCQlCVE1fSEVBREVSX0xFTik7CisJCQlza2IgPSB0bXA7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWtmcmVlX3NrYih0bXApOworCX0KKworCXNrYl9wdXNoKHNrYiwgQlRNX0hFQURFUl9MRU4pOworCisJLyogaGVhZGVyIHR5cGU6IGJ5dGVbM10KKwkgKiBIQ0lfQ09NTUFORCA9IDEsIEFDTF9EQVRBID0gMiwgU0NPX0RBVEEgPSAzLCAweEZFID0gVmVuZG9yCisJICogaGVhZGVyIGxlbmd0aDogYnl0ZVsyXVsxXVswXQorCSAqLworCisJc2tiLT5kYXRhWzBdID0gKHNrYi0+bGVuICYgMHgwMDAwZmYpOworCXNrYi0+ZGF0YVsxXSA9IChza2ItPmxlbiAmIDB4MDBmZjAwKSA+PiA4OworCXNrYi0+ZGF0YVsyXSA9IChza2ItPmxlbiAmIDB4ZmYwMDAwKSA+PiAxNjsKKwlza2ItPmRhdGFbM10gPSBidF9jYihza2IpLT5wa3RfdHlwZTsKKworCWlmIChwcml2LT5od19ob3N0X3RvX2NhcmQpCisJCXJldCA9IHByaXYtPmh3X2hvc3RfdG9fY2FyZChwcml2LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGJ0bXJ2bF9pbml0X2FkYXB0ZXIoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2KQoreworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPmFkYXB0ZXItPnR4X3F1ZXVlKTsKKworCXByaXYtPmFkYXB0ZXItPnBzX3N0YXRlID0gUFNfQVdBS0U7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5hZGFwdGVyLT5jbWRfd2FpdF9xKTsKK30KKworc3RhdGljIHZvaWQgYnRtcnZsX2ZyZWVfYWRhcHRlcihzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYpCit7CisJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT5hZGFwdGVyLT50eF9xdWV1ZSk7CisKKwlrZnJlZShwcml2LT5hZGFwdGVyKTsKKworCXByaXYtPmFkYXB0ZXIgPSBOVUxMOworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9pb2N0bChzdHJ1Y3QgaGNpX2RldiAqaGRldiwKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgdm9pZCBidG1ydmxfZGVzdHJ1Y3Qoc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX3NlbmRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IChzdHJ1Y3QgaGNpX2RldiAqKSBza2ItPmRldjsKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBOVUxMOworCisJQlRfREJHKCJ0eXBlPSVkLCBsZW49JWQiLCBza2ItPnBrdF90eXBlLCBza2ItPmxlbik7CisKKwlpZiAoIWhkZXYgfHwgIWhkZXYtPmRyaXZlcl9kYXRhKSB7CisJCUJUX0VSUigiRnJhbWUgZm9yIHVua25vd24gSENJIGRldmljZSIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcml2ID0gKHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqKSBoZGV2LT5kcml2ZXJfZGF0YTsKKwlpZiAoIXRlc3RfYml0KEhDSV9SVU5OSU5HLCAmaGRldi0+ZmxhZ3MpKSB7CisJCUJUX0VSUigiRmFpbGVkIHRlc3RpbmcgSENJX1JVTklORywgZmxhZ3M9JWx4IiwgaGRldi0+ZmxhZ3MpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcygiZGF0YTogIiwgRFVNUF9QUkVGSVhfT0ZGU0VULAorCQkJCQkJCXNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXN3aXRjaCAoYnRfY2Ioc2tiKS0+cGt0X3R5cGUpIHsKKwljYXNlIEhDSV9DT01NQU5EX1BLVDoKKwkJaGRldi0+c3RhdC5jbWRfdHgrKzsKKwkJYnJlYWs7CisKKwljYXNlIEhDSV9BQ0xEQVRBX1BLVDoKKwkJaGRldi0+c3RhdC5hY2xfdHgrKzsKKwkJYnJlYWs7CisKKwljYXNlIEhDSV9TQ09EQVRBX1BLVDoKKwkJaGRldi0+c3RhdC5zY29fdHgrKzsKKwkJYnJlYWs7CisJfQorCisJc2tiX3F1ZXVlX3RhaWwoJnByaXYtPmFkYXB0ZXItPnR4X3F1ZXVlLCBza2IpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5tYWluX3RocmVhZC53YWl0X3EpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX2ZsdXNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQoreworCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IGhkZXYtPmRyaXZlcl9kYXRhOworCisJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT5hZGFwdGVyLT50eF9xdWV1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidG1ydmxfY2xvc2Uoc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gaGRldi0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKSkKKwkJcmV0dXJuIDA7CisKKwlza2JfcXVldWVfcHVyZ2UoJnByaXYtPmFkYXB0ZXItPnR4X3F1ZXVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9vcGVuKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQoreworCXNldF9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZXZlbnQgZ2VuZXJhdGVkIGJ5IGZpcm13YXJlLCByeCBkYXRhCisgKiByZWNlaXZlZCBmcm9tIGZpcm13YXJlLCBhbmQgdHggZGF0YSBzZW50IGZyb20ga2VybmVsLgorICovCitzdGF0aWMgaW50IGJ0bXJ2bF9zZXJ2aWNlX21haW5fdGhyZWFkKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGJ0bXJ2bF90aHJlYWQgKnRocmVhZCA9IGRhdGE7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gdGhyZWFkLT5wcml2OworCXN0cnVjdCBidG1ydmxfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJd2FpdF9xdWV1ZV90IHdhaXQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bG9uZyBmbGFnczsKKworCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKKworCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOworCisJZm9yICg7OykgeworCQlhZGRfd2FpdF9xdWV1ZSgmdGhyZWFkLT53YWl0X3EsICZ3YWl0KTsKKworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCWlmIChhZGFwdGVyLT53YWtldXBfdHJpZXMgfHwKKwkJCQkoKCFhZGFwdGVyLT5pbnRfY291bnQpICYmCisJCQkJKCFwcml2LT5idG1ydmxfZGV2LnR4X2RubGRfcmR5IHx8CisJCQkJc2tiX3F1ZXVlX2VtcHR5KCZhZGFwdGVyLT50eF9xdWV1ZSkpKSkgeworCQkJQlRfREJHKCJtYWluX3RocmVhZCBpcyBzbGVlcGluZy4uLiIpOworCQkJc2NoZWR1bGUoKTsKKwkJfQorCisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKKwkJcmVtb3ZlX3dhaXRfcXVldWUoJnRocmVhZC0+d2FpdF9xLCAmd2FpdCk7CisKKwkJQlRfREJHKCJtYWluX3RocmVhZCB3b2tlIHVwIik7CisKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQkJQlRfREJHKCJtYWluX3RocmVhZDogYnJlYWsgZnJvbSBtYWluIHRocmVhZCIpOworCQkJYnJlYWs7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKwkJaWYgKGFkYXB0ZXItPmludF9jb3VudCkgeworCQkJYWRhcHRlci0+aW50X2NvdW50ID0gMDsKKwkJfSBlbHNlIGlmIChhZGFwdGVyLT5wc19zdGF0ZSA9PSBQU19TTEVFUCAmJgorCQkJCQkhc2tiX3F1ZXVlX2VtcHR5KCZhZGFwdGVyLT50eF9xdWV1ZSkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisJCQlhZGFwdGVyLT53YWtldXBfdHJpZXMrKzsKKwkJCXByaXYtPmh3X3dha2V1cF9maXJtd2FyZShwcml2KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisKKwkJaWYgKGFkYXB0ZXItPnBzX3N0YXRlID09IFBTX1NMRUVQKQorCQkJY29udGludWU7CisKKwkJaWYgKCFwcml2LT5idG1ydmxfZGV2LnR4X2RubGRfcmR5KQorCQkJY29udGludWU7CisKKwkJc2tiID0gc2tiX2RlcXVldWUoJmFkYXB0ZXItPnR4X3F1ZXVlKTsKKwkJaWYgKHNrYikgeworCQkJaWYgKGJ0bXJ2bF90eF9wa3QocHJpdiwgc2tiKSkKKwkJCQlwcml2LT5idG1ydmxfZGV2LmhjaWRldi0+c3RhdC5lcnJfdHgrKzsKKwkJCWVsc2UKKwkJCQlwcml2LT5idG1ydmxfZGV2LmhjaWRldi0+c3RhdC5ieXRlX3R4ICs9IHNrYi0+bGVuOworCisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKmJ0bXJ2bF9hZGRfY2FyZCh2b2lkICpjYXJkKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXY7CisJaW50IHJldDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikgeworCQlCVF9FUlIoIkNhbiBub3QgYWxsb2NhdGUgcHJpdiIpOworCQlnb3RvIGVycl9wcml2OworCX0KKworCXByaXYtPmFkYXB0ZXIgPSBremFsbG9jKHNpemVvZigqcHJpdi0+YWRhcHRlciksIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+YWRhcHRlcikgeworCQlCVF9FUlIoIkFsbG9jYXRlIGJ1ZmZlciBmb3IgYnRtcnZsX2FkYXB0ZXIgZmFpbGVkISIpOworCQlnb3RvIGVycl9hZGFwdGVyOworCX0KKworCWJ0bXJ2bF9pbml0X2FkYXB0ZXIocHJpdik7CisKKwloZGV2ID0gaGNpX2FsbG9jX2RldigpOworCWlmICghaGRldikgeworCQlCVF9FUlIoIkNhbiBub3QgYWxsb2NhdGUgSENJIGRldmljZSIpOworCQlnb3RvIGVycl9oZGV2OworCX0KKworCUJUX0RCRygiU3RhcnRpbmcga3RocmVhZC4uLiIpOworCXByaXYtPm1haW5fdGhyZWFkLnByaXYgPSBwcml2OworCXNwaW5fbG9ja19pbml0KCZwcml2LT5kcml2ZXJfbG9jayk7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5tYWluX3RocmVhZC53YWl0X3EpOworCXByaXYtPm1haW5fdGhyZWFkLnRhc2sgPSBrdGhyZWFkX3J1bihidG1ydmxfc2VydmljZV9tYWluX3RocmVhZCwKKwkJCQkmcHJpdi0+bWFpbl90aHJlYWQsICJidG1ydmxfbWFpbl9zZXJ2aWNlIik7CisKKwlwcml2LT5idG1ydmxfZGV2LmhjaWRldiA9IGhkZXY7CisJcHJpdi0+YnRtcnZsX2Rldi5jYXJkID0gY2FyZDsKKworCWhkZXYtPmRyaXZlcl9kYXRhID0gcHJpdjsKKworCXByaXYtPmJ0bXJ2bF9kZXYudHhfZG5sZF9yZHkgPSB0cnVlOworCisJaGRldi0+dHlwZSA9IEhDSV9TRElPOworCWhkZXYtPm9wZW4gPSBidG1ydmxfb3BlbjsKKwloZGV2LT5jbG9zZSA9IGJ0bXJ2bF9jbG9zZTsKKwloZGV2LT5mbHVzaCA9IGJ0bXJ2bF9mbHVzaDsKKwloZGV2LT5zZW5kID0gYnRtcnZsX3NlbmRfZnJhbWU7CisJaGRldi0+ZGVzdHJ1Y3QgPSBidG1ydmxfZGVzdHJ1Y3Q7CisJaGRldi0+aW9jdGwgPSBidG1ydmxfaW9jdGw7CisJaGRldi0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCXJldCA9IGhjaV9yZWdpc3Rlcl9kZXYoaGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJQlRfRVJSKCJDYW4gbm90IHJlZ2lzdGVyIEhDSSBkZXZpY2UiKTsKKwkJZ290byBlcnJfaGNpX3JlZ2lzdGVyX2RldjsKKwl9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlidG1ydmxfZGVidWdmc19pbml0KGhkZXYpOworI2VuZGlmCisKKwlyZXR1cm4gcHJpdjsKKworZXJyX2hjaV9yZWdpc3Rlcl9kZXY6CisJLyogU3RvcCB0aGUgdGhyZWFkIHNlcnZpY2luZyB0aGUgaW50ZXJydXB0cyAqLworCWt0aHJlYWRfc3RvcChwcml2LT5tYWluX3RocmVhZC50YXNrKTsKKworCWhjaV9mcmVlX2RldihoZGV2KTsKKworZXJyX2hkZXY6CisJYnRtcnZsX2ZyZWVfYWRhcHRlcihwcml2KTsKKworZXJyX2FkYXB0ZXI6CisJa2ZyZWUocHJpdik7CisKK2Vycl9wcml2OgorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnRtcnZsX2FkZF9jYXJkKTsKKworaW50IGJ0bXJ2bF9yZW1vdmVfY2FyZChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXY7CisKKwloZGV2ID0gcHJpdi0+YnRtcnZsX2Rldi5oY2lkZXY7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmFkYXB0ZXItPmNtZF93YWl0X3EpOworCisJa3RocmVhZF9zdG9wKHByaXYtPm1haW5fdGhyZWFkLnRhc2spOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJYnRtcnZsX2RlYnVnZnNfcmVtb3ZlKGhkZXYpOworI2VuZGlmCisKKwloY2lfdW5yZWdpc3Rlcl9kZXYoaGRldik7CisKKwloY2lfZnJlZV9kZXYoaGRldik7CisKKwlwcml2LT5idG1ydmxfZGV2LmhjaWRldiA9IE5VTEw7CisKKwlidG1ydmxfZnJlZV9hZGFwdGVyKHByaXYpOworCisJa2ZyZWUocHJpdik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJ0bXJ2bF9yZW1vdmVfY2FyZCk7CisKK01PRFVMRV9BVVRIT1IoIk1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1hcnZlbGwgQmx1ZXRvb3RoIGRyaXZlciB2ZXIgIiBWRVJTSU9OKTsKK01PRFVMRV9WRVJTSU9OKFZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzM2I4NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMKQEAgLTAsMCArMSwxMDAzIEBACisvKioKKyAqIE1hcnZlbGwgQlQtb3Zlci1TRElPIGRyaXZlcjogU0RJTyBpbnRlcmZhY2UgcmVsYXRlZCBmdW5jdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqKi8KKworI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19mdW5jLmg+CisKKyNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgorI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KKworI2luY2x1ZGUgImJ0bXJ2bF9kcnYuaCIKKyNpbmNsdWRlICJidG1ydmxfc2Rpby5oIgorCisjZGVmaW5lIFZFUlNJT04gIjEuMCIKKworLyogVGhlIGJ0bXJ2bF9zZGlvX3JlbW92ZSgpIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZAorICogd2hlbiB1c2VyIHJlbW92ZXMgdGhpcyBtb2R1bGUgZnJvbSBrZXJuZWwgc3BhY2Ugb3IgZWplY3RzCisgKiB0aGUgY2FyZCBmcm9tIHRoZSBzbG90LiBUaGUgZHJpdmVyIGhhbmRsZXMgdGhlc2UgMiBjYXNlcworICogZGlmZmVyZW50bHkuCisgKiBJZiB0aGUgdXNlciBpcyByZW1vdmluZyB0aGUgbW9kdWxlLCBhIE1PRFVMRV9TSFVURE9XTl9SRVEKKyAqIGNvbW1hbmQgaXMgc2VudCB0byBmaXJtd2FyZSBhbmQgaW50ZXJydXB0IHdpbGwgYmUgZGlzYWJsZWQuCisgKiBJZiB0aGUgY2FyZCBpcyByZW1vdmVkLCB0aGVyZSBpcyBubyBuZWVkIHRvIHNlbmQgY29tbWFuZAorICogb3IgZGlzYWJsZSBpbnRlcnJ1cHQuCisgKgorICogVGhlIHZhcmlhYmxlICd1c2VyX3JtbW9kJyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIHR3bworICogc2NlbmFyaW9zLiBUaGlzIGZsYWcgaXMgaW5pdGlhbGl6ZWQgYXMgRkFMU0UgaW4gY2FzZSB0aGUgY2FyZAorICogaXMgcmVtb3ZlZCwgYW5kIHdpbGwgYmUgc2V0IHRvIFRSVUUgZm9yIG1vZHVsZSByZW1vdmFsIHdoZW4KKyAqIG1vZHVsZV9leGl0IGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqLworc3RhdGljIHU4IHVzZXJfcm1tb2Q7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRtcnZsX3NkaW9fZGV2aWNlIGJ0bXJ2bF9zZGlvX3NkNjg4OCA9IHsKKwkuaGVscGVyCQk9ICJzZDg2ODhfaGVscGVyLmJpbiIsCisJLmZpcm13YXJlCT0gInNkODY4OC5iaW4iLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCBidG1ydmxfc2Rpb19pZHNbXSA9IHsKKwkvKiBNYXJ2ZWxsIFNEODY4OCBCbHVldG9vdGggZGV2aWNlICovCisJeyBTRElPX0RFVklDRShTRElPX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDkxMDUpLAorCQkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZidG1ydmxfc2Rpb19zZDY4ODggfSwKKworCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShzZGlvLCBidG1ydmxfc2Rpb19pZHMpOworCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX2dldF9yeF91bml0KHN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkKQoreworCXU4IHJlZzsKKwlpbnQgcmV0OworCisJcmVnID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBDQVJEX1JYX1VOSVRfUkVHLCAmcmV0KTsKKwlpZiAoIXJldCkKKwkJY2FyZC0+cnhfdW5pdCA9IHJlZzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX3NkaW9fcmVhZF9md19zdGF0dXMoc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQsIHUxNiAqZGF0KQoreworCXU4IGZ3czAsIGZ3czE7CisJaW50IHJldDsKKworCSpkYXQgPSAwOworCisJZndzMCA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgQ0FSRF9GV19TVEFUVVMwX1JFRywgJnJldCk7CisKKwlpZiAoIXJldCkKKwkJZndzMSA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgQ0FSRF9GV19TVEFUVVMxX1JFRywgJnJldCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTzsKKworCSpkYXQgPSAoKCh1MTYpIGZ3czEpIDw8IDgpIHwgZndzMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX3JlYWRfcnhfbGVuKHN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkLCB1MTYgKmRhdCkKK3sKKwl1OCByZWc7CisJaW50IHJldDsKKworCXJlZyA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgQ0FSRF9SWF9MRU5fUkVHLCAmcmV0KTsKKwlpZiAoIXJldCkKKwkJKmRhdCA9ICh1MTYpIHJlZyA8PCBjYXJkLT5yeF91bml0OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBidG1ydmxfc2Rpb19lbmFibGVfaG9zdF9pbnRfbWFzayhzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCwKKwkJCQkJCQkJdTggbWFzaykKK3sKKwlpbnQgcmV0OworCisJc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgbWFzaywgSE9TVF9JTlRfTUFTS19SRUcsICZyZXQpOworCWlmIChyZXQpIHsKKwkJQlRfRVJSKCJVbmFibGUgdG8gZW5hYmxlIHRoZSBob3N0IGludGVycnVwdCEiKTsKKwkJcmV0ID0gLUVJTzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX2Rpc2FibGVfaG9zdF9pbnRfbWFzayhzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCwKKwkJCQkJCQkJdTggbWFzaykKK3sKKwl1OCBob3N0X2ludF9tYXNrOworCWludCByZXQ7CisKKwlob3N0X2ludF9tYXNrID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBIT1NUX0lOVF9NQVNLX1JFRywgJnJldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU87CisKKwlob3N0X2ludF9tYXNrICY9IH5tYXNrOworCisJc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgaG9zdF9pbnRfbWFzaywgSE9TVF9JTlRfTUFTS19SRUcsICZyZXQpOworCWlmIChyZXQgPCAwKSB7CisJCUJUX0VSUigiVW5hYmxlIHRvIGRpc2FibGUgdGhlIGhvc3QgaW50ZXJydXB0ISIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidG1ydmxfc2Rpb19wb2xsX2NhcmRfc3RhdHVzKHN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkLCB1OCBiaXRzKQoreworCXVuc2lnbmVkIGludCB0cmllczsKKwl1OCBzdGF0dXM7CisJaW50IHJldDsKKworCWZvciAodHJpZXMgPSAwOyB0cmllcyA8IE1BWF9QT0xMX1RSSUVTICogMTAwMDsgdHJpZXMrKykgeworCQlzdGF0dXMgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIENBUkRfU1RBVFVTX1JFRywgJnJldCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKKwkJaWYgKChzdGF0dXMgJiBiaXRzKSA9PSBiaXRzKQorCQkJcmV0dXJuIHJldDsKKworCQl1ZGVsYXkoMSk7CisJfQorCisJcmV0ID0gLUVUSU1FRE9VVDsKKworZmFpbGVkOgorCUJUX0VSUigiRkFJTEVEISByZXQ9JWQiLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBidG1ydmxfc2Rpb192ZXJpZnlfZndfZG93bmxvYWQoc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQsCisJCQkJCQkJCWludCBwb2xsbnVtKQoreworCWludCByZXQgPSAtRVRJTUVET1VUOworCXUxNiBmaXJtd2FyZXN0YXQ7CisJdW5zaWduZWQgaW50IHRyaWVzOworCisJIC8qIFdhaXQgZm9yIGZpcm13YXJlIHRvIGJlY29tZSByZWFkeSAqLworCWZvciAodHJpZXMgPSAwOyB0cmllcyA8IHBvbGxudW07IHRyaWVzKyspIHsKKwkJaWYgKGJ0bXJ2bF9zZGlvX3JlYWRfZndfc3RhdHVzKGNhcmQsICZmaXJtd2FyZXN0YXQpIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChmaXJtd2FyZXN0YXQgPT0gRklSTVdBUkVfUkVBRFkpIHsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCW1zbGVlcCgxMCk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX2Rvd25sb2FkX2hlbHBlcihzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2hlbHBlciA9IE5VTEw7CisJY29uc3QgdTggKmhlbHBlciA9IE5VTEw7CisJaW50IHJldDsKKwl2b2lkICp0bXBobHByYnVmID0gTlVMTDsKKwlpbnQgdG1waGxwcmJ1ZnN6LCBobHByYmxrbm93LCBoZWxwZXJsZW47CisJdTggKmhlbHBlcmJ1ZjsKKwl1MzIgdHhfbGVuOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZndfaGVscGVyLCBjYXJkLT5oZWxwZXIsCisJCQkJCQkmY2FyZC0+ZnVuYy0+ZGV2KTsKKwlpZiAoKHJldCA8IDApIHx8ICFmd19oZWxwZXIpIHsKKwkJQlRfRVJSKCJyZXF1ZXN0X2Zpcm13YXJlKGhlbHBlcikgZmFpbGVkLCBlcnJvciBjb2RlID0gJWQiLAorCQkJCQkJCQkJcmV0KTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBkb25lOworCX0KKworCWhlbHBlciA9IGZ3X2hlbHBlci0+ZGF0YTsKKwloZWxwZXJsZW4gPSBmd19oZWxwZXItPnNpemU7CisKKwlCVF9EQkcoIkRvd25sb2FkaW5nIGhlbHBlciBpbWFnZSAoJWQgYnl0ZXMpLCBibG9jayBzaXplICVkIGJ5dGVzIiwKKwkJCQkJCWhlbHBlcmxlbiwgU0RJT19CTE9DS19TSVpFKTsKKworCXRtcGhscHJidWZzeiA9IEFMSUdOX1NaKEJUTV9VUExEX1NJWkUsIEJUU0RJT19ETUFfQUxJR04pOworCisJdG1waGxwcmJ1ZiA9IGttYWxsb2ModG1waGxwcmJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRtcGhscHJidWYpIHsKKwkJQlRfRVJSKCJVbmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBoZWxwZXIuIgorCQkJIiBUZXJtaW5hdGluZyBkb3dubG9hZCIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJbWVtc2V0KHRtcGhscHJidWYsIDAsIHRtcGhscHJidWZzeik7CisKKwloZWxwZXJidWYgPSAodTggKikgQUxJR05fQUREUih0bXBobHByYnVmLCBCVFNESU9fRE1BX0FMSUdOKTsKKworCS8qIFBlcmZvcm0gaGVscGVyIGRhdGEgdHJhbnNmZXIgKi8KKwl0eF9sZW4gPSAoRklSTVdBUkVfVFJBTlNGRVJfTkJMT0NLICogU0RJT19CTE9DS19TSVpFKQorCQkJLSBTRElPX0hFQURFUl9MRU47CisJaGxwcmJsa25vdyA9IDA7CisKKwlkbyB7CisJCXJldCA9IGJ0bXJ2bF9zZGlvX3BvbGxfY2FyZF9zdGF0dXMoY2FyZCwKKwkJCQkJICAgIENBUkRfSU9fUkVBRFkgfCBETl9MRF9DQVJEX1JEWSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlCVF9FUlIoIkhlbHBlciBkb3dubG9hZCBwb2xsIHN0YXR1cyB0aW1lb3V0IEAgJWQiLAorCQkJCWhscHJibGtub3cpOworCQkJZ290byBkb25lOworCQl9CisKKwkJLyogQ2hlY2sgaWYgdGhlcmUgaXMgbW9yZSBkYXRhPyAqLworCQlpZiAoaGxwcmJsa25vdyA+PSBoZWxwZXJsZW4pCisJCQlicmVhazsKKworCQlpZiAoaGVscGVybGVuIC0gaGxwcmJsa25vdyA8IHR4X2xlbikKKwkJCXR4X2xlbiA9IGhlbHBlcmxlbiAtIGhscHJibGtub3c7CisKKwkJLyogTGl0dGxlLWVuZGlhbiAqLworCQloZWxwZXJidWZbMF0gPSAoKHR4X2xlbiAmIDB4MDAwMDAwZmYpID4+IDApOworCQloZWxwZXJidWZbMV0gPSAoKHR4X2xlbiAmIDB4MDAwMGZmMDApID4+IDgpOworCQloZWxwZXJidWZbMl0gPSAoKHR4X2xlbiAmIDB4MDBmZjAwMDApID4+IDE2KTsKKwkJaGVscGVyYnVmWzNdID0gKCh0eF9sZW4gJiAweGZmMDAwMDAwKSA+PiAyNCk7CisKKwkJbWVtY3B5KCZoZWxwZXJidWZbU0RJT19IRUFERVJfTEVOXSwgJmhlbHBlcltobHByYmxrbm93XSwKKwkJCQl0eF9sZW4pOworCisJCS8qIE5vdyBzZW5kIHRoZSBkYXRhICovCisJCXJldCA9IHNkaW9fd3JpdGVzYihjYXJkLT5mdW5jLCBjYXJkLT5pb3BvcnQsIGhlbHBlcmJ1ZiwKKwkJCQlGSVJNV0FSRV9UUkFOU0ZFUl9OQkxPQ0sgKiBTRElPX0JMT0NLX1NJWkUpOworCQlpZiAocmV0IDwgMCkgeworCQkJQlRfRVJSKCJJTyBlcnJvciBkdXJpbmcgaGVscGVyIGRvd25sb2FkIEAgJWQiLAorCQkJCWhscHJibGtub3cpOworCQkJZ290byBkb25lOworCQl9CisKKwkJaGxwcmJsa25vdyArPSB0eF9sZW47CisJfSB3aGlsZSAodHJ1ZSk7CisKKwlCVF9EQkcoIlRyYW5zZmVycmluZyBoZWxwZXIgaW1hZ2UgRU9GIGJsb2NrIik7CisKKwltZW1zZXQoaGVscGVyYnVmLCAweDAsIFNESU9fQkxPQ0tfU0laRSk7CisKKwlyZXQgPSBzZGlvX3dyaXRlc2IoY2FyZC0+ZnVuYywgY2FyZC0+aW9wb3J0LCBoZWxwZXJidWYsCisJCQkJCQkJU0RJT19CTE9DS19TSVpFKTsKKwlpZiAocmV0IDwgMCkgeworCQlCVF9FUlIoIklPIGVycm9yIGluIHdyaXRpbmcgaGVscGVyIGltYWdlIEVPRiBibG9jayIpOworCQlnb3RvIGRvbmU7CisJfQorCisJcmV0ID0gMDsKKworZG9uZToKKwlrZnJlZSh0bXBobHByYnVmKTsKKwlpZiAoZndfaGVscGVyKQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2hlbHBlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX2Rvd25sb2FkX2Z3X3dfaGVscGVyKHN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZmlybXdhcmUgPSBOVUxMOworCWNvbnN0IHU4ICpmaXJtd2FyZSA9IE5VTEw7CisJaW50IGZpcm13YXJlbGVuLCB0bXBmd2J1ZnN6LCByZXQ7CisJdW5zaWduZWQgaW50IHRyaWVzLCBvZmZzZXQ7CisJdTggYmFzZTAsIGJhc2UxOworCXZvaWQgKnRtcGZ3YnVmID0gTlVMTDsKKwl1OCAqZndidWY7CisJdTE2IGxlbjsKKwlpbnQgdHhsZW4gPSAwLCB0eF9ibG9ja3MgPSAwLCBjb3VudCA9IDA7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19maXJtd2FyZSwgY2FyZC0+ZmlybXdhcmUsCisJCQkJCQkJJmNhcmQtPmZ1bmMtPmRldik7CisJaWYgKChyZXQgPCAwKSB8fCAhZndfZmlybXdhcmUpIHsKKwkJQlRfRVJSKCJyZXF1ZXN0X2Zpcm13YXJlKGZpcm13YXJlKSBmYWlsZWQsIGVycm9yIGNvZGUgPSAlZCIsCisJCQkJCQkJCQlyZXQpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGRvbmU7CisJfQorCisJZmlybXdhcmUgPSBmd19maXJtd2FyZS0+ZGF0YTsKKwlmaXJtd2FyZWxlbiA9IGZ3X2Zpcm13YXJlLT5zaXplOworCisJQlRfREJHKCJEb3dubG9hZGluZyBGVyBpbWFnZSAoJWQgYnl0ZXMpIiwgZmlybXdhcmVsZW4pOworCisJdG1wZndidWZzeiA9IEFMSUdOX1NaKEJUTV9VUExEX1NJWkUsIEJUU0RJT19ETUFfQUxJR04pOworCXRtcGZ3YnVmID0ga21hbGxvYyh0bXBmd2J1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRtcGZ3YnVmKSB7CisJCUJUX0VSUigiVW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgZmlybXdhcmUuIgorCQkgICAgICAgIiBUZXJtaW5hdGluZyBkb3dubG9hZCIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJbWVtc2V0KHRtcGZ3YnVmLCAwLCB0bXBmd2J1ZnN6KTsKKworCS8qIEVuc3VyZSBhbGlnbmVkIGZpcm13YXJlIGJ1ZmZlciAqLworCWZ3YnVmID0gKHU4ICopIEFMSUdOX0FERFIodG1wZndidWYsIEJUU0RJT19ETUFfQUxJR04pOworCisJLyogUGVyZm9ybSBmaXJtd2FyZSBkYXRhIHRyYW5zZmVyICovCisJb2Zmc2V0ID0gMDsKKwlkbyB7CisJCXJldCA9IGJ0bXJ2bF9zZGlvX3BvbGxfY2FyZF9zdGF0dXMoY2FyZCwKKwkJCQkJQ0FSRF9JT19SRUFEWSB8IEROX0xEX0NBUkRfUkRZKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCUJUX0VSUigiRlcgZG93bmxvYWQgd2l0aCBoZWxwZXIgcG9sbCBzdGF0dXMiCisJCQkJCQkiIHRpbWVvdXQgQCAlZCIsIG9mZnNldCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBtb3JlIGRhdGEgPyAqLworCQlpZiAob2Zmc2V0ID49IGZpcm13YXJlbGVuKQorCQkJYnJlYWs7CisKKwkJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgTUFYX1BPTExfVFJJRVM7IHRyaWVzKyspIHsKKwkJCWJhc2UwID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLAorCQkJCQlTUV9SRUFEX0JBU0VfQUREUkVTU19BMF9SRUcsICZyZXQpOworCQkJaWYgKHJldCkgeworCQkJCUJUX0VSUigiQkFTRTAgcmVnaXN0ZXIgcmVhZCBmYWlsZWQ6IgorCQkJCQkiIGJhc2UwID0gMHglMDRYKCVkKS4iCisJCQkJCSIgVGVybWluYXRpbmcgZG93bmxvYWQiLAorCQkJCQliYXNlMCwgYmFzZTApOworCQkJCXJldCA9IC1FSU87CisJCQkJZ290byBkb25lOworCQkJfQorCQkJYmFzZTEgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsCisJCQkJCVNRX1JFQURfQkFTRV9BRERSRVNTX0ExX1JFRywgJnJldCk7CisJCQlpZiAocmV0KSB7CisJCQkJQlRfRVJSKCJCQVNFMSByZWdpc3RlciByZWFkIGZhaWxlZDoiCisJCQkJCSIgYmFzZTEgPSAweCUwNFgoJWQpLiIKKwkJCQkJIiBUZXJtaW5hdGluZyBkb3dubG9hZCIsCisJCQkJCWJhc2UxLCBiYXNlMSk7CisJCQkJcmV0ID0gLUVJTzsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisKKwkJCWxlbiA9ICgoKHUxNikgYmFzZTEpIDw8IDgpIHwgYmFzZTA7CisJCQlpZiAobGVuKQorCQkJCWJyZWFrOworCisJCQl1ZGVsYXkoMTApOworCQl9CisKKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKwkJZWxzZSBpZiAobGVuID4gQlRNX1VQTERfU0laRSkgeworCQkJQlRfRVJSKCJGVyBkb3dubG9hZCBmYWlsdXJlIEAlZCwgaW52YWxpZCBsZW5ndGggJWQiLAorCQkJCQkJCQlvZmZzZXQsIGxlbik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBkb25lOworCQl9CisKKwkJdHhsZW4gPSBsZW47CisKKwkJaWYgKGxlbiAmIEJJVCgwKSkgeworCQkJY291bnQrKzsKKwkJCWlmIChjb3VudCA+IE1BWF9XUklURV9JT01FTV9SRVRSWSkgeworCQkJCUJUX0VSUigiRlcgZG93bmxvYWQgZmFpbHVyZSBAJWQsICIKKwkJCQkJIm92ZXIgbWF4IHJldHJ5IGNvdW50Iiwgb2Zmc2V0KTsKKwkJCQlyZXQgPSAtRUlPOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCUJUX0VSUigiRlcgQ1JDIGVycm9yIGluZGljYXRlZCBieSB0aGUgaGVscGVyOiAiCisJCQkJImxlbiA9IDB4JTA0WCwgdHhsZW4gPSAlZCIsIGxlbiwgdHhsZW4pOworCQkJbGVuICY9IH5CSVQoMCk7CisJCQkvKiBTZXQgdHhsZW4gdG8gMCBzbyBhcyB0byByZXNlbmQgZnJvbSBzYW1lIG9mZnNldCAqLworCQkJdHhsZW4gPSAwOworCQl9IGVsc2UgeworCQkJY291bnQgPSAwOworCisJCQkvKiBMYXN0IGJsb2NrID8gKi8KKwkJCWlmIChmaXJtd2FyZWxlbiAtIG9mZnNldCA8IHR4bGVuKQorCQkJCXR4bGVuID0gZmlybXdhcmVsZW4gLSBvZmZzZXQ7CisKKwkJCXR4X2Jsb2NrcyA9CisJCQkgICAgKHR4bGVuICsgU0RJT19CTE9DS19TSVpFIC0gMSkgLyBTRElPX0JMT0NLX1NJWkU7CisKKwkJCW1lbWNweShmd2J1ZiwgJmZpcm13YXJlW29mZnNldF0sIHR4bGVuKTsKKwkJfQorCisJCXJldCA9IHNkaW9fd3JpdGVzYihjYXJkLT5mdW5jLCBjYXJkLT5pb3BvcnQsIGZ3YnVmLAorCQkJCQl0eF9ibG9ja3MgKiBTRElPX0JMT0NLX1NJWkUpOworCisJCWlmIChyZXQgPCAwKSB7CisJCQlCVF9FUlIoIkZXIGRvd25sb2FkLCB3cml0ZXNiKCVkKSBmYWlsZWQgQCVkIiwKKwkJCQkJCQljb3VudCwgb2Zmc2V0KTsKKwkJCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsIEhPU1RfQ01ENTNfRklOLCBDT05GSUdfUkVHLAorCQkJCQkJCQkJJnJldCk7CisJCQlpZiAocmV0KQorCQkJCUJUX0VSUigid3JpdGViIGZhaWxlZCAoQ0ZHKSIpOworCQl9CisKKwkJb2Zmc2V0ICs9IHR4bGVuOworCX0gd2hpbGUgKHRydWUpOworCisJQlRfREJHKCJGVyBkb3dubG9hZCBvdmVyLCBzaXplICVkIGJ5dGVzIiwgb2Zmc2V0KTsKKworCXJldCA9IDA7CisKK2RvbmU6CisJa2ZyZWUodG1wZndidWYpOworCisJaWYgKGZ3X2Zpcm13YXJlKQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2Zpcm13YXJlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX3NkaW9fY2FyZF90b19ob3N0KHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdikKK3sKKwl1MTYgYnVmX2xlbiA9IDA7CisJaW50IHJldCwgYnVmX2Jsb2NrX2xlbiwgYmxrc3o7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJdTMyIHR5cGU7CisJdTggKnBheWxvYWQgPSBOVUxMOworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gcHJpdi0+YnRtcnZsX2Rldi5oY2lkZXY7CisJc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQgPSBwcml2LT5idG1ydmxfZGV2LmNhcmQ7CisKKwlpZiAoIWNhcmQgfHwgIWNhcmQtPmZ1bmMpIHsKKwkJQlRfRVJSKCJjYXJkIG9yIGZ1bmN0aW9uIGlzIE5VTEwhIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBSZWFkIHRoZSBsZW5ndGggb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCAqLworCXJldCA9IGJ0bXJ2bF9zZGlvX3JlYWRfcnhfbGVuKGNhcmQsICZidWZfbGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQlCVF9FUlIoInJlYWQgcnhfbGVuIGZhaWxlZCIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGV4aXQ7CisJfQorCisJYmxrc3ogPSBTRElPX0JMT0NLX1NJWkU7CisJYnVmX2Jsb2NrX2xlbiA9IChidWZfbGVuICsgYmxrc3ogLSAxKSAvIGJsa3N6OworCisJaWYgKGJ1Zl9sZW4gPD0gU0RJT19IRUFERVJfTEVOCisJCQl8fCAoYnVmX2Jsb2NrX2xlbiAqIGJsa3N6KSA+IEFMTE9DX0JVRl9TSVpFKSB7CisJCUJUX0VSUigiaW52YWxpZCBwYWNrZXQgbGVuZ3RoOiAlZCIsIGJ1Zl9sZW4pOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogQWxsb2NhdGUgYnVmZmVyICovCisJc2tiID0gYnRfc2tiX2FsbG9jKGJ1Zl9ibG9ja19sZW4gKiBibGtzeiArIEJUU0RJT19ETUFfQUxJR04sCisJCQkJCQkJCUdGUF9BVE9NSUMpOworCWlmIChza2IgPT0gTlVMTCkgeworCQlCVF9FUlIoIk5vIGZyZWUgc2tiIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSAmIChCVFNESU9fRE1BX0FMSUdOIC0gMSkpIHsKKwkJc2tiX3B1dChza2IsICh1bnNpZ25lZCBsb25nKSBza2ItPmRhdGEgJgorCQkJCQkoQlRTRElPX0RNQV9BTElHTiAtIDEpKTsKKwkJc2tiX3B1bGwoc2tiLCAodW5zaWduZWQgbG9uZykgc2tiLT5kYXRhICYKKwkJCQkJKEJUU0RJT19ETUFfQUxJR04gLSAxKSk7CisJfQorCisJcGF5bG9hZCA9IHNrYi0+ZGF0YTsKKworCXJldCA9IHNkaW9fcmVhZHNiKGNhcmQtPmZ1bmMsIHBheWxvYWQsIGNhcmQtPmlvcG9ydCwKKwkJCSAgYnVmX2Jsb2NrX2xlbiAqIGJsa3N6KTsKKwlpZiAocmV0IDwgMCkgeworCQlCVF9FUlIoInJlYWRzYiBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBleGl0OworCX0KKworCS8qIFRoaXMgaXMgU0RJTyBzcGVjaWZpYyBoZWFkZXIgbGVuZ3RoOiBieXRlWzJdWzFdWzBdLCB0eXBlOiBieXRlWzNdCisJICogKEhDSV9DT01NQU5EID0gMSwgQUNMX0RBVEEgPSAyLCBTQ09fREFUQSA9IDMsIDB4RkUgPSBWZW5kb3IpCisJICovCisKKwlidWZfbGVuID0gcGF5bG9hZFswXTsKKwlidWZfbGVuIHw9ICh1MTYpIHBheWxvYWRbMV0gPDwgODsKKwl0eXBlID0gcGF5bG9hZFszXTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSENJX0FDTERBVEFfUEtUOgorCWNhc2UgSENJX1NDT0RBVEFfUEtUOgorCWNhc2UgSENJX0VWRU5UX1BLVDoKKwkJYnRfY2Ioc2tiKS0+cGt0X3R5cGUgPSB0eXBlOworCQlza2ItPmRldiA9ICh2b2lkICopaGRldjsKKwkJc2tiX3B1dChza2IsIGJ1Zl9sZW4pOworCQlza2JfcHVsbChza2IsIFNESU9fSEVBREVSX0xFTik7CisKKwkJaWYgKHR5cGUgPT0gSENJX0VWRU5UX1BLVCkKKwkJCWJ0bXJ2bF9jaGVja19ldnRwa3QocHJpdiwgc2tiKTsKKworCQloY2lfcmVjdl9mcmFtZShza2IpOworCQloZGV2LT5zdGF0LmJ5dGVfcnggKz0gYnVmX2xlbjsKKwkJYnJlYWs7CisKKwljYXNlIE1SVkxfVkVORE9SX1BLVDoKKwkJYnRfY2Ioc2tiKS0+cGt0X3R5cGUgPSBIQ0lfVkVORE9SX1BLVDsKKwkJc2tiLT5kZXYgPSAodm9pZCAqKWhkZXY7CisJCXNrYl9wdXQoc2tiLCBidWZfbGVuKTsKKwkJc2tiX3B1bGwoc2tiLCBTRElPX0hFQURFUl9MRU4pOworCisJCWlmIChidG1ydmxfcHJvY2Vzc19ldmVudChwcml2LCBza2IpKQorCQkJaGNpX3JlY3ZfZnJhbWUoc2tiKTsKKworCQloZGV2LT5zdGF0LmJ5dGVfcnggKz0gYnVmX2xlbjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVF9FUlIoIlVua25vdyBwYWNrZXQgdHlwZTolZCIsIHR5cGUpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcygiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCBwYXlsb2FkLAorCQkJCQkJYmxrc3ogKiBidWZfYmxvY2tfbGVuKTsKKworCQlrZnJlZV9za2Ioc2tiKTsKKwkJc2tiID0gTlVMTDsKKwkJYnJlYWs7CisJfQorCitleGl0OgorCWlmIChyZXQpIHsKKwkJaGRldi0+c3RhdC5lcnJfcngrKzsKKwkJaWYgKHNrYikKKwkJCWtmcmVlX3NrYihza2IpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX3NkaW9fZ2V0X2ludF9zdGF0dXMoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2LCB1OCAqIGlyZWcpCit7CisJaW50IHJldDsKKwl1OCBzZGlvX2lyZWcgPSAwOworCXN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkID0gcHJpdi0+YnRtcnZsX2Rldi5jYXJkOworCisJKmlyZWcgPSAwOworCisJc2Rpb19pcmVnID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBIT1NUX0lOVFNUQVRVU19SRUcsICZyZXQpOworCWlmIChyZXQpIHsKKwkJQlRfRVJSKCJzZGlvX3JlYWRiOiByZWFkIGludCBzdGF0dXMgcmVnaXN0ZXIgZmFpbGVkIik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoc2Rpb19pcmVnICE9IDApIHsKKwkJLyoKKwkJICogRE5fTERfSE9TVF9JTlRfU1RBVFVTIGFuZC9vciBVUF9MRF9IT1NUX0lOVF9TVEFUVVMKKwkJICogQ2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgYW5kIHJlLWVuYWJsZSB0aGUKKwkJICogaW50ZXJydXB0LgorCQkgKi8KKwkJQlRfREJHKCJzZGlvX2lyZWcgPSAweCV4Iiwgc2Rpb19pcmVnKTsKKworCQlzZGlvX3dyaXRlYihjYXJkLT5mdW5jLCB+KHNkaW9faXJlZykgJiAoRE5fTERfSE9TVF9JTlRfU1RBVFVTIHwKKwkJCQkJCQlVUF9MRF9IT1NUX0lOVF9TVEFUVVMpLAorCQkJICAgIEhPU1RfSU5UU1RBVFVTX1JFRywgJnJldCk7CisJCWlmIChyZXQpIHsKKwkJCUJUX0VSUigic2Rpb193cml0ZWI6IGNsZWFyIGludCBzdGF0dXMgcmVnaXN0ZXIgIgorCQkJCSJmYWlsZWQiKTsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwlpZiAoc2Rpb19pcmVnICYgRE5fTERfSE9TVF9JTlRfU1RBVFVTKSB7CisJCWlmIChwcml2LT5idG1ydmxfZGV2LnR4X2RubGRfcmR5KQorCQkJQlRfREJHKCJ0eF9kb25lIGFscmVhZHkgcmVjZWl2ZWQ6ICIKKwkJCQkiIGludF9zdGF0dXM9MHgleCIsIHNkaW9faXJlZyk7CisJCWVsc2UKKwkJCXByaXYtPmJ0bXJ2bF9kZXYudHhfZG5sZF9yZHkgPSB0cnVlOworCX0KKworCWlmIChzZGlvX2lyZWcgJiBVUF9MRF9IT1NUX0lOVF9TVEFUVVMpCisJCWJ0bXJ2bF9zZGlvX2NhcmRfdG9faG9zdChwcml2KTsKKworCSppcmVnID0gc2Rpb19pcmVnOworCisJcmV0ID0gMDsKKworZG9uZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBidG1ydmxfc2Rpb19pbnRlcnJ1cHQoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IGhjaV9kZXYgKmhjaWRldjsKKwlzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZDsKKwl1OCBpcmVnID0gMDsKKworCWNhcmQgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOworCWlmIChjYXJkICYmIGNhcmQtPnByaXYpIHsKKwkJcHJpdiA9IGNhcmQtPnByaXY7CisJCWhjaWRldiA9IHByaXYtPmJ0bXJ2bF9kZXYuaGNpZGV2OworCisJCWlmIChidG1ydmxfc2Rpb19nZXRfaW50X3N0YXR1cyhwcml2LCAmaXJlZykpCisJCQlCVF9FUlIoInJlYWRpbmcgSE9TVF9JTlRfU1RBVFVTX1JFRyBmYWlsZWQiKTsKKwkJZWxzZQorCQkJQlRfREJHKCJIT1NUX0lOVF9TVEFUVVNfUkVHICUjeCIsIGlyZWcpOworCisJCWJ0bXJ2bF9pbnRlcnJ1cHQocHJpdik7CisJfQorfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX3JlZ2lzdGVyX2RldihzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jOworCXU4IHJlZzsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghY2FyZCB8fCAhY2FyZC0+ZnVuYykgeworCQlCVF9FUlIoIkVycm9yOiBjYXJkIG9yIGZ1bmN0aW9uIGlzIE5VTEwhIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbGVkOworCX0KKworCWZ1bmMgPSBjYXJkLT5mdW5jOworCisJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOworCisJcmV0ID0gc2Rpb19lbmFibGVfZnVuYyhmdW5jKTsKKwlpZiAocmV0KSB7CisJCUJUX0VSUigic2Rpb19lbmFibGVfZnVuYygpIGZhaWxlZDogcmV0PSVkIiwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byByZWxlYXNlX2hvc3Q7CisJfQorCisJcmV0ID0gc2Rpb19jbGFpbV9pcnEoZnVuYywgYnRtcnZsX3NkaW9faW50ZXJydXB0KTsKKwlpZiAocmV0KSB7CisJCUJUX0VSUigic2Rpb19jbGFpbV9pcnEgZmFpbGVkOiByZXQ9JWQiLCByZXQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGRpc2FibGVfZnVuYzsKKwl9CisKKwlyZXQgPSBzZGlvX3NldF9ibG9ja19zaXplKGNhcmQtPmZ1bmMsIFNESU9fQkxPQ0tfU0laRSk7CisJaWYgKHJldCkgeworCQlCVF9FUlIoImNhbm5vdCBzZXQgU0RJTyBibG9jayBzaXplIik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gcmVsZWFzZV9pcnE7CisJfQorCisJcmVnID0gc2Rpb19yZWFkYihmdW5jLCBJT19QT1JUXzBfUkVHLCAmcmV0KTsKKwlpZiAocmV0IDwgMCkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIHJlbGVhc2VfaXJxOworCX0KKworCWNhcmQtPmlvcG9ydCA9IHJlZzsKKworCXJlZyA9IHNkaW9fcmVhZGIoZnVuYywgSU9fUE9SVF8xX1JFRywgJnJldCk7CisJaWYgKHJldCA8IDApIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byByZWxlYXNlX2lycTsKKwl9CisKKwljYXJkLT5pb3BvcnQgfD0gKHJlZyA8PCA4KTsKKworCXJlZyA9IHNkaW9fcmVhZGIoZnVuYywgSU9fUE9SVF8yX1JFRywgJnJldCk7CisJaWYgKHJldCA8IDApIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byByZWxlYXNlX2lycTsKKwl9CisKKwljYXJkLT5pb3BvcnQgfD0gKHJlZyA8PCAxNik7CisKKwlCVF9EQkcoIlNESU8gRlVOQyVkIElPIHBvcnQ6IDB4JXgiLCBmdW5jLT5udW0sIGNhcmQtPmlvcG9ydCk7CisKKwlzZGlvX3NldF9kcnZkYXRhKGZ1bmMsIGNhcmQpOworCisJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CisKKwlyZXR1cm4gMDsKKworcmVsZWFzZV9pcnE6CisJc2Rpb19yZWxlYXNlX2lycShmdW5jKTsKKworZGlzYWJsZV9mdW5jOgorCXNkaW9fZGlzYWJsZV9mdW5jKGZ1bmMpOworCityZWxlYXNlX2hvc3Q6CisJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CisKK2ZhaWxlZDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX3VucmVnaXN0ZXJfZGV2KHN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkKQoreworCWlmIChjYXJkICYmIGNhcmQtPmZ1bmMpIHsKKwkJc2Rpb19jbGFpbV9ob3N0KGNhcmQtPmZ1bmMpOworCQlzZGlvX3JlbGVhc2VfaXJxKGNhcmQtPmZ1bmMpOworCQlzZGlvX2Rpc2FibGVfZnVuYyhjYXJkLT5mdW5jKTsKKwkJc2Rpb19yZWxlYXNlX2hvc3QoY2FyZC0+ZnVuYyk7CisJCXNkaW9fc2V0X2RydmRhdGEoY2FyZC0+ZnVuYywgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX3NkaW9fZW5hYmxlX2hvc3RfaW50KHN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkKQoreworCWludCByZXQ7CisKKwlpZiAoIWNhcmQgfHwgIWNhcmQtPmZ1bmMpCisJCXJldHVybiAtRUlOVkFMOworCisJc2Rpb19jbGFpbV9ob3N0KGNhcmQtPmZ1bmMpOworCisJcmV0ID0gYnRtcnZsX3NkaW9fZW5hYmxlX2hvc3RfaW50X21hc2soY2FyZCwgSElNX0VOQUJMRSk7CisKKwlidG1ydmxfc2Rpb19nZXRfcnhfdW5pdChjYXJkKTsKKworCXNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBidG1ydmxfc2Rpb19kaXNhYmxlX2hvc3RfaW50KHN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkKQoreworCWludCByZXQ7CisKKwlpZiAoIWNhcmQgfHwgIWNhcmQtPmZ1bmMpCisJCXJldHVybiAtRUlOVkFMOworCisJc2Rpb19jbGFpbV9ob3N0KGNhcmQtPmZ1bmMpOworCisJcmV0ID0gYnRtcnZsX3NkaW9fZGlzYWJsZV9ob3N0X2ludF9tYXNrKGNhcmQsIEhJTV9ESVNBQkxFKTsKKworCXNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBidG1ydmxfc2Rpb19ob3N0X3RvX2NhcmQoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2LAorCQkJCXU4ICpwYXlsb2FkLCB1MTYgbmIpCit7CisJc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQgPSBwcml2LT5idG1ydmxfZGV2LmNhcmQ7CisJaW50IHJldCA9IDA7CisJaW50IGJ1Zl9ibG9ja19sZW47CisJaW50IGJsa3N6OworCWludCBpID0gMDsKKwl1OCAqYnVmID0gTlVMTDsKKwl2b2lkICp0bXBidWYgPSBOVUxMOworCWludCB0bXBidWZzejsKKworCWlmICghY2FyZCB8fCAhY2FyZC0+ZnVuYykgeworCQlCVF9FUlIoImNhcmQgb3IgZnVuY3Rpb24gaXMgTlVMTCEiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYnVmID0gcGF5bG9hZDsKKwlpZiAoKHVuc2lnbmVkIGxvbmcpIHBheWxvYWQgJiAoQlRTRElPX0RNQV9BTElHTiAtIDEpKSB7CisJCXRtcGJ1ZnN6ID0gQUxJR05fU1oobmIsIEJUU0RJT19ETUFfQUxJR04pOworCQl0bXBidWYgPSBremFsbG9jKHRtcGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0bXBidWYpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJYnVmID0gKHU4ICopIEFMSUdOX0FERFIodG1wYnVmLCBCVFNESU9fRE1BX0FMSUdOKTsKKwkJbWVtY3B5KGJ1ZiwgcGF5bG9hZCwgbmIpOworCX0KKworCWJsa3N6ID0gU0RJT19CTE9DS19TSVpFOworCWJ1Zl9ibG9ja19sZW4gPSAobmIgKyBibGtzeiAtIDEpIC8gYmxrc3o7CisKKwlzZGlvX2NsYWltX2hvc3QoY2FyZC0+ZnVuYyk7CisKKwlkbyB7CisJCS8qIFRyYW5zZmVyIGRhdGEgdG8gY2FyZCAqLworCQlyZXQgPSBzZGlvX3dyaXRlc2IoY2FyZC0+ZnVuYywgY2FyZC0+aW9wb3J0LCBidWYsCisJCQkJICAgYnVmX2Jsb2NrX2xlbiAqIGJsa3N6KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWkrKzsKKwkJCUJUX0VSUigiaT0lZCB3cml0ZXNiIGZhaWxlZDogJWQiLCBpLCByZXQpOworCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCQkJCXBheWxvYWQsIG5iKTsKKwkJCXJldCA9IC1FSU87CisJCQlpZiAoaSA+IE1BWF9XUklURV9JT01FTV9SRVRSWSkKKwkJCQlnb3RvIGV4aXQ7CisJCX0KKwl9IHdoaWxlIChyZXQpOworCisJcHJpdi0+YnRtcnZsX2Rldi50eF9kbmxkX3JkeSA9IGZhbHNlOworCitleGl0OgorCXNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBidG1ydmxfc2Rpb19kb3dubG9hZF9mdyhzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICghY2FyZCB8fCAhY2FyZC0+ZnVuYykgeworCQlCVF9FUlIoImNhcmQgb3IgZnVuY3Rpb24gaXMgTlVMTCEiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNkaW9fY2xhaW1faG9zdChjYXJkLT5mdW5jKTsKKworCWlmICghYnRtcnZsX3NkaW9fdmVyaWZ5X2Z3X2Rvd25sb2FkKGNhcmQsIDEpKSB7CisJCUJUX0RCRygiRmlybXdhcmUgYWxyZWFkeSBkb3dubG9hZGVkISIpOworCQlnb3RvIGRvbmU7CisJfQorCisJcmV0ID0gYnRtcnZsX3NkaW9fZG93bmxvYWRfaGVscGVyKGNhcmQpOworCWlmIChyZXQpIHsKKwkJQlRfRVJSKCJGYWlsZWQgdG8gZG93bmxvYWQgaGVscGVyISIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGJ0bXJ2bF9zZGlvX2Rvd25sb2FkX2Z3X3dfaGVscGVyKGNhcmQpKSB7CisJCUJUX0VSUigiRmFpbGVkIHRvIGRvd25sb2FkIGZpcm13YXJlISIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGJ0bXJ2bF9zZGlvX3ZlcmlmeV9md19kb3dubG9hZChjYXJkLCBNQVhfUE9MTF9UUklFUykpIHsKKwkJQlRfRVJSKCJGVyBmYWlsZWQgdG8gYmUgYWN0aXZlIGluIHRpbWUhIik7CisJCXJldCA9IC1FVElNRURPVVQ7CisJCWdvdG8gZG9uZTsKKwl9CisKK2RvbmU6CisJc2Rpb19yZWxlYXNlX2hvc3QoY2FyZC0+ZnVuYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX3dha2V1cF9mdyhzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQgPSBwcml2LT5idG1ydmxfZGV2LmNhcmQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWNhcmQgfHwgIWNhcmQtPmZ1bmMpIHsKKwkJQlRfRVJSKCJjYXJkIG9yIGZ1bmN0aW9uIGlzIE5VTEwhIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNkaW9fY2xhaW1faG9zdChjYXJkLT5mdW5jKTsKKworCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsIEhPU1RfUE9XRVJfVVAsIENPTkZJR19SRUcsICZyZXQpOworCisJc2Rpb19yZWxlYXNlX2hvc3QoY2FyZC0+ZnVuYyk7CisKKwlCVF9EQkcoIndha2UgdXAgZmlybXdhcmUiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywKKwkJCQkJY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBOVUxMOworCXN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkID0gTlVMTDsKKworCUJUX0lORk8oInZlbmRvcj0weCV4LCBkZXZpY2U9MHgleCwgY2xhc3M9JWQsIGZuPSVkIiwKKwkJCWlkLT52ZW5kb3IsIGlkLT5kZXZpY2UsIGlkLT5jbGFzcywgZnVuYy0+bnVtKTsKKworCWNhcmQgPSBremFsbG9jKHNpemVvZigqY2FyZCksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJY2FyZC0+ZnVuYyA9IGZ1bmM7CisKKwlpZiAoaWQtPmRyaXZlcl9kYXRhKSB7CisJCXN0cnVjdCBidG1ydmxfc2Rpb19kZXZpY2UgKmRhdGEgPSAodm9pZCAqKSBpZC0+ZHJpdmVyX2RhdGE7CisJCWNhcmQtPmhlbHBlciAgID0gZGF0YS0+aGVscGVyOworCQljYXJkLT5maXJtd2FyZSA9IGRhdGEtPmZpcm13YXJlOworCX0KKworCWlmIChidG1ydmxfc2Rpb19yZWdpc3Rlcl9kZXYoY2FyZCkgPCAwKSB7CisJCUJUX0VSUigiRmFpbGVkIHRvIHJlZ2lzdGVyIEJUIGRldmljZSEiKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX2NhcmQ7CisJfQorCisJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0cyBvbiB0aGUgY2FyZCAqLworCWJ0bXJ2bF9zZGlvX2Rpc2FibGVfaG9zdF9pbnQoY2FyZCk7CisKKwlpZiAoYnRtcnZsX3NkaW9fZG93bmxvYWRfZncoY2FyZCkpIHsKKwkJQlRfRVJSKCJEb3dubG9hZGluZyBmaXJtd2FyZSBmYWlsZWQhIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gdW5yZWdfZGV2OworCX0KKworCW1zbGVlcCgxMDApOworCisJYnRtcnZsX3NkaW9fZW5hYmxlX2hvc3RfaW50KGNhcmQpOworCisJcHJpdiA9IGJ0bXJ2bF9hZGRfY2FyZChjYXJkKTsKKwlpZiAoIXByaXYpIHsKKwkJQlRfRVJSKCJJbml0aWFsaXppbmcgY2FyZCBmYWlsZWQhIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZGlzYWJsZV9ob3N0X2ludDsKKwl9CisKKwljYXJkLT5wcml2ID0gcHJpdjsKKworCS8qIEluaXRpYWxpemUgdGhlIGludGVyZmFjZSBzcGVjaWZpYyBmdW5jdGlvbiBwb2ludGVycyAqLworCXByaXYtPmh3X2hvc3RfdG9fY2FyZCA9IGJ0bXJ2bF9zZGlvX2hvc3RfdG9fY2FyZDsKKwlwcml2LT5od193YWtldXBfZmlybXdhcmUgPSBidG1ydmxfc2Rpb193YWtldXBfZnc7CisKKwlidG1ydmxfc2VuZF9tb2R1bGVfY2ZnX2NtZChwcml2LCBNT0RVTEVfQlJJTkdVUF9SRVEpOworCisJcmV0dXJuIDA7CisKK2Rpc2FibGVfaG9zdF9pbnQ6CisJYnRtcnZsX3NkaW9fZGlzYWJsZV9ob3N0X2ludChjYXJkKTsKK3VucmVnX2RldjoKKwlidG1ydmxfc2Rpb191bnJlZ2lzdGVyX2RldihjYXJkKTsKK2ZyZWVfY2FyZDoKKwlrZnJlZShjYXJkKTsKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYnRtcnZsX3NkaW9fcmVtb3ZlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCit7CisJc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQ7CisKKwlpZiAoZnVuYykgeworCQljYXJkID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKKwkJaWYgKGNhcmQpIHsKKwkJCS8qIFNlbmQgU0hVVERPV04gY29tbWFuZCAmIGRpc2FibGUgaW50ZXJydXB0CisJCQkgKiBpZiB1c2VyIHJlbW92ZXMgdGhlIG1vZHVsZS4KKwkJCSAqLworCQkJaWYgKHVzZXJfcm1tb2QpIHsKKwkJCQlidG1ydmxfc2VuZF9tb2R1bGVfY2ZnX2NtZChjYXJkLT5wcml2LAorCQkJCQkJCU1PRFVMRV9TSFVURE9XTl9SRVEpOworCQkJCWJ0bXJ2bF9zZGlvX2Rpc2FibGVfaG9zdF9pbnQoY2FyZCk7CisJCQl9CisJCQlCVF9EQkcoInVucmVnZXN0ZXIgZGV2Iik7CisJCQlidG1ydmxfc2Rpb191bnJlZ2lzdGVyX2RldihjYXJkKTsKKwkJCWJ0bXJ2bF9yZW1vdmVfY2FyZChjYXJkLT5wcml2KTsKKwkJCWtmcmVlKGNhcmQpOworCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIGJ0X21ydmxfc2RpbyA9IHsKKwkubmFtZQkJPSAiYnRtcnZsX3NkaW8iLAorCS5pZF90YWJsZQk9IGJ0bXJ2bF9zZGlvX2lkcywKKwkucHJvYmUJCT0gYnRtcnZsX3NkaW9fcHJvYmUsCisJLnJlbW92ZQkJPSBidG1ydmxfc2Rpb19yZW1vdmUsCit9OworCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaWYgKHNkaW9fcmVnaXN0ZXJfZHJpdmVyKCZidF9tcnZsX3NkaW8pICE9IDApIHsKKwkJQlRfRVJSKCJTRElPIERyaXZlciBSZWdpc3RyYXRpb24gRmFpbGVkIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIENsZWFyIHRoZSBmbGFnIGluIGNhc2UgdXNlciByZW1vdmVzIHRoZSBjYXJkLiAqLworCXVzZXJfcm1tb2QgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJ0bXJ2bF9zZGlvX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJLyogU2V0IHRoZSBmbGFnIGFzIHVzZXIgaXMgcmVtb3ZpbmcgdGhpcyBtb2R1bGUuICovCisJdXNlcl9ybW1vZCA9IDE7CisKKwlzZGlvX3VucmVnaXN0ZXJfZHJpdmVyKCZidF9tcnZsX3NkaW8pOworfQorCittb2R1bGVfaW5pdChidG1ydmxfc2Rpb19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChidG1ydmxfc2Rpb19leGl0X21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIk1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1hcnZlbGwgQlQtb3Zlci1TRElPIGRyaXZlciB2ZXIgIiBWRVJTSU9OKTsKK01PRFVMRV9WRVJTSU9OKFZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uaCBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjczMjlmMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qKgorICogTWFydmVsbCBCVC1vdmVyLVNESU8gZHJpdmVyOiBTRElPIGludGVyZmFjZSByZWxhdGVkIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqCisgKiovCisKKyNkZWZpbmUgU0RJT19IRUFERVJfTEVOCQkJNAorCisvKiBTRCBibG9jayBzaXplIGNhbiBub3QgYmlnZ2VyIHRoYW4gNjQgZHVlIHRvIGJ1ZiBzaXplIGxpbWl0IGluIGZpcm13YXJlICovCisvKiBkZWZpbmUgU0QgYmxvY2sgc2l6ZSBmb3IgZGF0YSBUeC9SeCAqLworI2RlZmluZSBTRElPX0JMT0NLX1NJWkUJCQk2NAorCisvKiBOdW1iZXIgb2YgYmxvY2tzIGZvciBmaXJtd2FyZSB0cmFuc2ZlciAqLworI2RlZmluZSBGSVJNV0FSRV9UUkFOU0ZFUl9OQkxPQ0sJMgorCisvKiBUaGlzIGlzIGZvciBmaXJtd2FyZSBzcGVjaWZpYyBsZW5ndGggKi8KKyNkZWZpbmUgRldfRVhUUkFfTEVOCQkJMzYKKworI2RlZmluZSBNUlZEUlZfU0laRV9PRl9DTURfQlVGRkVSICAgICAgICgyICogMTAyNCkKKworI2RlZmluZSBNUlZEUlZfQlRfUlhfUEFDS0VUX0JVRkZFUl9TSVpFIFwKKwkoSENJX01BWF9GUkFNRV9TSVpFICsgRldfRVhUUkFfTEVOKQorCisjZGVmaW5lIEFMTE9DX0JVRl9TSVpFCSgoKG1heF90IChpbnQsIE1SVkRSVl9CVF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUsIFwKKwkJCU1SVkRSVl9TSVpFX09GX0NNRF9CVUZGRVIpICsgU0RJT19IRUFERVJfTEVOIFwKKwkJCSsgU0RJT19CTE9DS19TSVpFIC0gMSkgLyBTRElPX0JMT0NLX1NJWkUpIFwKKwkJCSogU0RJT19CTE9DS19TSVpFKQorCisvKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHRyeSB3aGVuIHBvbGxpbmcgZm9yIHN0YXR1cyAqLworI2RlZmluZSBNQVhfUE9MTF9UUklFUwkJCTEwMAorCisvKiBNYXggcmV0cnkgbnVtYmVyIG9mIENNRDUzIHdyaXRlICovCisjZGVmaW5lIE1BWF9XUklURV9JT01FTV9SRVRSWQkJMgorCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIElPX1BPUlRfMF9SRUcJCQkweDAwCisjZGVmaW5lIElPX1BPUlRfMV9SRUcJCQkweDAxCisjZGVmaW5lIElPX1BPUlRfMl9SRUcJCQkweDAyCisKKyNkZWZpbmUgQ09ORklHX1JFRwkJCTB4MDMKKyNkZWZpbmUgSE9TVF9QT1dFUl9VUAkJCUJJVCgxKQorI2RlZmluZSBIT1NUX0NNRDUzX0ZJTgkJCUJJVCgyKQorCisjZGVmaW5lIEhPU1RfSU5UX01BU0tfUkVHCQkweDA0CisjZGVmaW5lIEhJTV9ESVNBQkxFCQkJMHhmZgorI2RlZmluZSBISU1fRU5BQkxFCQkJKEJJVCgwKSB8IEJJVCgxKSkKKworI2RlZmluZSBIT1NUX0lOVFNUQVRVU19SRUcJCTB4MDUKKyNkZWZpbmUgVVBfTERfSE9TVF9JTlRfU1RBVFVTCQlCSVQoMCkKKyNkZWZpbmUgRE5fTERfSE9TVF9JTlRfU1RBVFVTCQlCSVQoMSkKKworLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZSBTUV9SRUFEX0JBU0VfQUREUkVTU19BMF9SRUcgIAkweDEwCisjZGVmaW5lIFNRX1JFQURfQkFTRV9BRERSRVNTX0ExX1JFRyAgCTB4MTEKKworI2RlZmluZSBDQVJEX1NUQVRVU19SRUcgICAgICAgICAgICAgIAkweDIwCisjZGVmaW5lIEROX0xEX0NBUkRfUkRZICAgICAgICAgICAgICAgCUJJVCgwKQorI2RlZmluZSBDQVJEX0lPX1JFQURZICAgICAgICAgICAgICAJQklUKDMpCisKKyNkZWZpbmUgQ0FSRF9GV19TVEFUVVMwX1JFRwkJMHg0MAorI2RlZmluZSBDQVJEX0ZXX1NUQVRVUzFfUkVHCQkweDQxCisjZGVmaW5lIEZJUk1XQVJFX1JFQURZCQkJMHhmZWRjCisKKyNkZWZpbmUgQ0FSRF9SWF9MRU5fUkVHCQkJMHg0MgorI2RlZmluZSBDQVJEX1JYX1VOSVRfUkVHCQkweDQzCisKKworc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgeworCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmM7CisJdTMyIGlvcG9ydDsKKwljb25zdCBjaGFyICpoZWxwZXI7CisJY29uc3QgY2hhciAqZmlybXdhcmU7CisJdTggcnhfdW5pdDsKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgYnRtcnZsX3NkaW9fZGV2aWNlIHsKKwljb25zdCBjaGFyICpoZWxwZXI7CisJY29uc3QgY2hhciAqZmlybXdhcmU7Cit9OworCisKKy8qIFBsYXRmb3JtIHNwZWNpZmljIERNQSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgQlRTRElPX0RNQV9BTElHTgkJOAorCisvKiBNYWNyb3MgZm9yIERhdGEgQWxpZ25tZW50IDogc2l6ZSAqLworI2RlZmluZSBBTElHTl9TWihwLCBhKQlcCisJKCgocCkgKyAoKGEpIC0gMSkpICYgfigoYSkgLSAxKSkKKworLyogTWFjcm9zIGZvciBEYXRhIEFsaWdubWVudCA6IGFkZHJlc3MgKi8KKyNkZWZpbmUgQUxJR05fQUREUihwLCBhKQlcCisJKCgoKHVuc2lnbmVkIGxvbmcpKHApKSArICgoKHVuc2lnbmVkIGxvbmcpKGEpKSAtIDEpKSAmIFwKKwkJCQkJfigoKHVuc2lnbmVkIGxvbmcpKGEpKSAtIDEpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggZTcwYzU3ZS4uN2JhOTFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMC41IgorI2RlZmluZSBWRVJTSU9OICIwLjYiCiAKIHN0YXRpYyBpbnQgaWdub3JlX2RnYTsKIHN0YXRpYyBpbnQgaWdub3JlX2NzcjsKQEAgLTE0NSw2ICsxNDUsNyBAQAogI2RlZmluZSBCVFVTQl9JTlRSX1JVTk5JTkcJMAogI2RlZmluZSBCVFVTQl9CVUxLX1JVTk5JTkcJMQogI2RlZmluZSBCVFVTQl9JU09DX1JVTk5JTkcJMgorI2RlZmluZSBCVFVTQl9TVVNQRU5ESU5HCTMKIAogc3RydWN0IGJ0dXNiX2RhdGEgewogCXN0cnVjdCBoY2lfZGV2ICAgICAgICpoZGV2OwpAQCAtMTU3LDExICsxNTgsMTUgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IHdha2VyOwogCiAJc3RydWN0IHVzYl9hbmNob3IgdHhfYW5jaG9yOwogCXN0cnVjdCB1c2JfYW5jaG9yIGludHJfYW5jaG9yOwogCXN0cnVjdCB1c2JfYW5jaG9yIGJ1bGtfYW5jaG9yOwogCXN0cnVjdCB1c2JfYW5jaG9yIGlzb2NfYW5jaG9yOworCXN0cnVjdCB1c2JfYW5jaG9yIGRlZmVycmVkOworCWludCB0eF9pbl9mbGlnaHQ7CisJc3BpbmxvY2tfdCB0eGxvY2s7CiAKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludHJfZXA7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX3R4X2VwOwpAQCAtMTc0LDggKzE3OSwyMyBAQAogCXVuc2lnbmVkIGludCBzY29fbnVtOwogCWludCBpc29jX2FsdHNldHRpbmc7CiAJaW50IHN1c3BlbmRfY291bnQ7CisJaW50IGRpZF9pc29fcmVzdW1lOjE7CiB9OwogCitzdGF0aWMgaW50IGluY190eChzdHJ1Y3QgYnR1c2JfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBydjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkYXRhLT50eGxvY2ssIGZsYWdzKTsKKwlydiA9IHRlc3RfYml0KEJUVVNCX1NVU1BFTkRJTkcsICZkYXRhLT5mbGFncyk7CisJaWYgKCFydikKKwkJZGF0YS0+dHhfaW5fZmxpZ2h0Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+dHhsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcnY7Cit9CisKIHN0YXRpYyB2b2lkIGJ0dXNiX2ludHJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gdXJiLT5jb250ZXh0OwpAQCAtMjAyLDYgKzIyMiw3IEBACiAJaWYgKCF0ZXN0X2JpdChCVFVTQl9JTlRSX1JVTk5JTkcsICZkYXRhLT5mbGFncykpCiAJCXJldHVybjsKIAorCXVzYl9tYXJrX2xhc3RfYnVzeShkYXRhLT51ZGV2KTsKIAl1c2JfYW5jaG9yX3VyYih1cmIsICZkYXRhLT5pbnRyX2FuY2hvcik7CiAKIAllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwpAQCAtMzAxLDcgKzMyMiw3IEBACiAJc3RydWN0IHVyYiAqdXJiOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAl1bnNpZ25lZCBpbnQgcGlwZTsKLQlpbnQgZXJyLCBzaXplOworCWludCBlcnIsIHNpemUgPSBIQ0lfTUFYX0ZSQU1FX1NJWkU7CiAKIAlCVF9EQkcoIiVzIiwgaGRldi0+bmFtZSk7CiAKQEAgLTMxMiw4ICszMzMsNiBAQAogCWlmICghdXJiKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNpemUgPSBsZTE2X3RvX2NwdShkYXRhLT5idWxrX3J4X2VwLT53TWF4UGFja2V0U2l6ZSk7Ci0KIAlidWYgPSBrbWFsbG9jKHNpemUsIG1lbV9mbGFncyk7CiAJaWYgKCFidWYpIHsKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CkBAIC0zMjcsNiArMzQ2LDcgQEAKIAogCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0ZSRUVfQlVGRkVSOwogCisJdXNiX21hcmtfbGFzdF9idXN5KGRhdGEtPnVkZXYpOwogCXVzYl9hbmNob3JfdXJiKHVyYiwgJmRhdGEtPmJ1bGtfYW5jaG9yKTsKIAogCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgbWVtX2ZsYWdzKTsKQEAgLTQ2NSw2ICs0ODUsMzMgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLT5jb250ZXh0OwogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gKHN0cnVjdCBoY2lfZGV2ICopIHNrYi0+ZGV2OworCXN0cnVjdCBidHVzYl9kYXRhICpkYXRhID0gaGRldi0+ZHJpdmVyX2RhdGE7CisKKwlCVF9EQkcoIiVzIHVyYiAlcCBzdGF0dXMgJWQgY291bnQgJWQiLCBoZGV2LT5uYW1lLAorCQkJCQl1cmIsIHVyYi0+c3RhdHVzLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCisJaWYgKCF0ZXN0X2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKSkKKwkJZ290byBkb25lOworCisJaWYgKCF1cmItPnN0YXR1cykKKwkJaGRldi0+c3RhdC5ieXRlX3R4ICs9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwllbHNlCisJCWhkZXYtPnN0YXQuZXJyX3R4Kys7CisKK2RvbmU6CisJc3Bpbl9sb2NrKCZkYXRhLT50eGxvY2spOworCWRhdGEtPnR4X2luX2ZsaWdodC0tOworCXNwaW5fdW5sb2NrKCZkYXRhLT50eGxvY2spOworCisJa2ZyZWUodXJiLT5zZXR1cF9wYWNrZXQpOworCisJa2ZyZWVfc2tiKHNrYik7Cit9CisKK3N0YXRpYyB2b2lkIGJ0dXNiX2lzb2NfdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSAoc3RydWN0IGhjaV9kZXYgKikgc2tiLT5kZXY7CiAKIAlCVF9EQkcoIiVzIHVyYiAlcCBzdGF0dXMgJWQgY291bnQgJWQiLCBoZGV2LT5uYW1lLAogCQkJCQl1cmIsIHVyYi0+c3RhdHVzLCB1cmItPmFjdHVhbF9sZW5ndGgpOwpAQCAtNDkwLDExICs1MzcsMTcgQEAKIAogCUJUX0RCRygiJXMiLCBoZGV2LT5uYW1lKTsKIAorCWVyciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkYXRhLT5pbnRmKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWRhdGEtPmludGYtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAxOworCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncykpCi0JCXJldHVybiAwOworCQlnb3RvIGRvbmU7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChCVFVTQl9JTlRSX1JVTk5JTkcsICZkYXRhLT5mbGFncykpCi0JCXJldHVybiAwOworCQlnb3RvIGRvbmU7CiAKIAllcnIgPSBidHVzYl9zdWJtaXRfaW50cl91cmIoaGRldiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVyciA8IDApCkBAIC01MDksMTcgKzU2MiwyOCBAQAogCXNldF9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwogCWJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfS0VSTkVMKTsKIAorZG9uZToKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7CiAJcmV0dXJuIDA7CiAKIGZhaWxlZDoKIAljbGVhcl9iaXQoQlRVU0JfSU5UUl9SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwogCWNsZWFyX2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKTsKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7CiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgYnR1c2Jfc3RvcF90cmFmZmljKHN0cnVjdCBidHVzYl9kYXRhICpkYXRhKQoreworCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmludHJfYW5jaG9yKTsKKwl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5idWxrX2FuY2hvcik7CisJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmZGF0YS0+aXNvY19hbmNob3IpOworfQorCiBzdGF0aWMgaW50IGJ0dXNiX2Nsb3NlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQogewogCXN0cnVjdCBidHVzYl9kYXRhICpkYXRhID0gaGRldi0+ZHJpdmVyX2RhdGE7CisJaW50IGVycjsKIAogCUJUX0RCRygiJXMiLCBoZGV2LT5uYW1lKTsKIApAQCAtNTI5LDEzICs1OTMsMTYgQEAKIAljYW5jZWxfd29ya19zeW5jKCZkYXRhLT53b3JrKTsKIAogCWNsZWFyX2JpdChCVFVTQl9JU09DX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmZGF0YS0+aXNvY19hbmNob3IpOwotCiAJY2xlYXJfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKLQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5idWxrX2FuY2hvcik7Ci0KIAljbGVhcl9iaXQoQlRVU0JfSU5UUl9SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwotCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmludHJfYW5jaG9yKTsKKworCWJ0dXNiX3N0b3BfdHJhZmZpYyhkYXRhKTsKKwllcnIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAwOworCisJZGF0YS0+aW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRhdGEtPmludGYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MjIsNyArNjg5LDcgQEAKIAkJdXJiLT5kZXYgICAgICA9IGRhdGEtPnVkZXY7CiAJCXVyYi0+cGlwZSAgICAgPSBwaXBlOwogCQl1cmItPmNvbnRleHQgID0gc2tiOwotCQl1cmItPmNvbXBsZXRlID0gYnR1c2JfdHhfY29tcGxldGU7CisJCXVyYi0+Y29tcGxldGUgPSBidHVzYl9pc29jX3R4X2NvbXBsZXRlOwogCQl1cmItPmludGVydmFsID0gZGF0YS0+aXNvY190eF9lcC0+YkludGVydmFsOwogCiAJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgID0gVVJCX0lTT19BU0FQOwpAQCAtNjMzLDEyICs3MDAsMjEgQEAKIAkJCQlsZTE2X3RvX2NwdShkYXRhLT5pc29jX3R4X2VwLT53TWF4UGFja2V0U2l6ZSkpOwogCiAJCWhkZXYtPnN0YXQuc2NvX3R4Kys7Ci0JCWJyZWFrOworCQlnb3RvIHNraXBfd2FraW5nOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSUxTRVE7CiAJfQogCisJZXJyID0gaW5jX3R4KGRhdGEpOworCWlmIChlcnIpIHsKKwkJdXNiX2FuY2hvcl91cmIodXJiLCAmZGF0YS0+ZGVmZXJyZWQpOworCQlzY2hlZHVsZV93b3JrKCZkYXRhLT53YWtlcik7CisJCWVyciA9IDA7CisJCWdvdG8gZG9uZTsKKwl9CisKK3NraXBfd2FraW5nOgogCXVzYl9hbmNob3JfdXJiKHVyYiwgJmRhdGEtPnR4X2FuY2hvcik7CiAKIAllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwpAQCAtNjQ2LDEwICs3MjIsMTMgQEAKIAkJQlRfRVJSKCIlcyB1cmIgJXAgc3VibWlzc2lvbiBmYWlsZWQiLCBoZGV2LT5uYW1lLCB1cmIpOwogCQlrZnJlZSh1cmItPnNldHVwX3BhY2tldCk7CiAJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwl9IGVsc2UgeworCQl1c2JfbWFya19sYXN0X2J1c3koZGF0YS0+dWRldik7CiAJfQogCiAJdXNiX2ZyZWVfdXJiKHVyYik7CiAKK2RvbmU6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzIxLDggKzgwMCwxOSBAQAogewogCXN0cnVjdCBidHVzYl9kYXRhICpkYXRhID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBidHVzYl9kYXRhLCB3b3JrKTsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGEtPmhkZXY7CisJaW50IGVycjsKIAogCWlmIChoZGV2LT5jb25uX2hhc2guc2NvX251bSA+IDApIHsKKwkJaWYgKCFkYXRhLT5kaWRfaXNvX3Jlc3VtZSkgeworCQkJZXJyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRhdGEtPmlzb2MpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQljbGVhcl9iaXQoQlRVU0JfSVNPQ19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOworCQkJCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmlzb2NfYW5jaG9yKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWRhdGEtPmRpZF9pc29fcmVzdW1lID0gMTsKKwkJfQogCQlpZiAoZGF0YS0+aXNvY19hbHRzZXR0aW5nICE9IDIpIHsKIAkJCWNsZWFyX2JpdChCVFVTQl9JU09DX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7CiAJCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5pc29jX2FuY2hvcik7CkBAIC03NDIsOSArODMyLDI1IEBACiAJCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmlzb2NfYW5jaG9yKTsKIAogCQlfX3NldF9pc29jX2ludGVyZmFjZShoZGV2LCAwKTsKKwkJaWYgKGRhdGEtPmRpZF9pc29fcmVzdW1lKSB7CisJCQlkYXRhLT5kaWRfaXNvX3Jlc3VtZSA9IDA7CisJCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGF0YS0+aXNvYyk7CisJCX0KIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGJ0dXNiX3dha2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYnR1c2JfZGF0YSAqZGF0YSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYnR1c2JfZGF0YSwgd2FrZXIpOworCWludCBlcnI7CisKKwllcnIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7CisJaWYgKGVyciA8IDApCisJCXJldHVybjsKKworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkYXRhLT5pbnRmKTsKK30KKwogc3RhdGljIGludCBidHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CkBAIC04MTQsMTEgKzkyMCwxNCBAQAogCXNwaW5fbG9ja19pbml0KCZkYXRhLT5sb2NrKTsKIAogCUlOSVRfV09SSygmZGF0YS0+d29yaywgYnR1c2Jfd29yayk7CisJSU5JVF9XT1JLKCZkYXRhLT53YWtlciwgYnR1c2Jfd2FrZXIpOworCXNwaW5fbG9ja19pbml0KCZkYXRhLT50eGxvY2spOwogCiAJaW5pdF91c2JfYW5jaG9yKCZkYXRhLT50eF9hbmNob3IpOwogCWluaXRfdXNiX2FuY2hvcigmZGF0YS0+aW50cl9hbmNob3IpOwogCWluaXRfdXNiX2FuY2hvcigmZGF0YS0+YnVsa19hbmNob3IpOwogCWluaXRfdXNiX2FuY2hvcigmZGF0YS0+aXNvY19hbmNob3IpOworCWluaXRfdXNiX2FuY2hvcigmZGF0YS0+ZGVmZXJyZWQpOwogCiAJaGRldiA9IGhjaV9hbGxvY19kZXYoKTsKIAlpZiAoIWhkZXYpIHsKQEAgLTk0Myw2ICsxMDUyLDcgQEAKIAloY2lfZnJlZV9kZXYoaGRldik7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgYnR1c2Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7CiAJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwpAQCAtOTUyLDIyICsxMDYyLDQ0IEBACiAJaWYgKGRhdGEtPnN1c3BlbmRfY291bnQrKykKIAkJcmV0dXJuIDA7CiAKKwlzcGluX2xvY2tfaXJxKCZkYXRhLT50eGxvY2spOworCWlmICghKGludGVyZmFjZV90b191c2JkZXYoaW50ZiktPmF1dG9fcG0gJiYgZGF0YS0+dHhfaW5fZmxpZ2h0KSkgeworCQlzZXRfYml0KEJUVVNCX1NVU1BFTkRJTkcsICZkYXRhLT5mbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+dHhsb2NrKTsKKwl9IGVsc2UgeworCQlzcGluX3VubG9ja19pcnEoJmRhdGEtPnR4bG9jayk7CisJCWRhdGEtPnN1c3BlbmRfY291bnQtLTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKIAljYW5jZWxfd29ya19zeW5jKCZkYXRhLT53b3JrKTsKIAorCWJ0dXNiX3N0b3BfdHJhZmZpYyhkYXRhKTsKIAl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT50eF9hbmNob3IpOwogCi0JdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmZGF0YS0+aXNvY19hbmNob3IpOwotCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmJ1bGtfYW5jaG9yKTsKLQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5pbnRyX2FuY2hvcik7Ci0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcGxheV9kZWZlcnJlZChzdHJ1Y3QgYnR1c2JfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGVycjsKKworCXdoaWxlICgodXJiID0gdXNiX2dldF9mcm9tX2FuY2hvcigmZGF0YS0+ZGVmZXJyZWQpKSkgeworCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoZXJyIDwgMCkKKwkJCWJyZWFrOworCisJCWRhdGEtPnR4X2luX2ZsaWdodCsrOworCX0KKwl1c2Jfc2N1dHRsZV9hbmNob3JlZF91cmJzKCZkYXRhLT5kZWZlcnJlZCk7Cit9CisKIHN0YXRpYyBpbnQgYnR1c2JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBidHVzYl9kYXRhICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGEtPmhkZXY7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAogCUJUX0RCRygiaW50ZiAlcCIsIGludGYpOwogCkBAIC05NzUsMTMgKzExMDcsMTMgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXRlc3RfYml0KEhDSV9SVU5OSU5HLCAmaGRldi0+ZmxhZ3MpKQotCQlyZXR1cm4gMDsKKwkJZ290byBkb25lOwogCiAJaWYgKHRlc3RfYml0KEJUVVNCX0lOVFJfUlVOTklORywgJmRhdGEtPmZsYWdzKSkgewogCQllcnIgPSBidHVzYl9zdWJtaXRfaW50cl91cmIoaGRldiwgR0ZQX05PSU8pOwogCQlpZiAoZXJyIDwgMCkgewogCQkJY2xlYXJfYml0KEJUVVNCX0lOVFJfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIGZhaWxlZDsKIAkJfQogCX0KIApAQCAtOTg5LDkgKzExMjEsMTAgQEAKIAkJZXJyID0gYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9OT0lPKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCWNsZWFyX2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9IGVsc2UKLQkJCWJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfTk9JTyk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCWJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfTk9JTyk7CiAJfQogCiAJaWYgKHRlc3RfYml0KEJUVVNCX0lTT0NfUlVOTklORywgJmRhdGEtPmZsYWdzKSkgewpAQCAtMTAwMSwxNiArMTEzNCwzNSBAQAogCQkJYnR1c2Jfc3VibWl0X2lzb2NfdXJiKGhkZXYsIEdGUF9OT0lPKTsKIAl9CiAKKwlzcGluX2xvY2tfaXJxKCZkYXRhLT50eGxvY2spOworCXBsYXlfZGVmZXJyZWQoZGF0YSk7CisJY2xlYXJfYml0KEJUVVNCX1NVU1BFTkRJTkcsICZkYXRhLT5mbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZkYXRhLT50eGxvY2spOworCXNjaGVkdWxlX3dvcmsoJmRhdGEtPndvcmspOworCiAJcmV0dXJuIDA7CisKK2ZhaWxlZDoKKwl1c2Jfc2N1dHRsZV9hbmNob3JlZF91cmJzKCZkYXRhLT5kZWZlcnJlZCk7Citkb25lOgorCXNwaW5fbG9ja19pcnEoJmRhdGEtPnR4bG9jayk7CisJY2xlYXJfYml0KEJUVVNCX1NVU1BFTkRJTkcsICZkYXRhLT5mbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZkYXRhLT50eGxvY2spOworCisJcmV0dXJuIGVycjsKIH0KKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYnR1c2JfZHJpdmVyID0gewogCS5uYW1lCQk9ICJidHVzYiIsCiAJLnByb2JlCQk9IGJ0dXNiX3Byb2JlLAogCS5kaXNjb25uZWN0CT0gYnR1c2JfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IGJ0dXNiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBidHVzYl9yZXN1bWUsCisjZW5kaWYKIAkuaWRfdGFibGUJPSBidHVzYl90YWJsZSwKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYnR1c2JfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2Jjc3AuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9iY3NwLmMKaW5kZXggODk0YjJjYi4uNDBhZWMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2Jjc3AuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNzcC5jCkBAIC0zNzMsOCArMzczLDkgQEAKIAogCWkgPSAwOwogCXNrYl9xdWV1ZV93YWxrX3NhZmUoJmJjc3AtPnVuYWNrLCBza2IsIHRtcCkgewotCQlpZiAoaSsrID49IHBrdHNfdG9fYmVfcmVtb3ZlZCkKKwkJaWYgKGkgPj0gcGt0c190b19iZV9yZW1vdmVkKQogCQkJYnJlYWs7CisJCWkrKzsKIAogCQlfX3NrYl91bmxpbmsoc2tiLCAmYmNzcC0+dW5hY2spOwogCQlrZnJlZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmggYi9kcml2ZXJzL2NoYXIvYWdwL2FncC5oCmluZGV4IDE3OGUyZTkuLmQ2ZjM2YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmgKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hZ3AuaApAQCAtMTA3LDcgKzEwNyw3IEBACiAJdm9pZCAoKmFncF9lbmFibGUpKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKiwgdTMyKTsKIAl2b2lkICgqY2xlYW51cCkodm9pZCk7CiAJdm9pZCAoKnRsYl9mbHVzaCkoc3RydWN0IGFncF9tZW1vcnkgKik7Ci0JdW5zaWduZWQgbG9uZyAoKm1hc2tfbWVtb3J5KShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICosIHN0cnVjdCBwYWdlICosIGludCk7CisJdW5zaWduZWQgbG9uZyAoKm1hc2tfbWVtb3J5KShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICosIGRtYV9hZGRyX3QsIGludCk7CiAJdm9pZCAoKmNhY2hlX2ZsdXNoKSh2b2lkKTsKIAlpbnQgKCpjcmVhdGVfZ2F0dF90YWJsZSkoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqKTsKIAlpbnQgKCpmcmVlX2dhdHRfdGFibGUpKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKik7CkBAIC0xMjEsNiArMTIxLDExIEBACiAJdm9pZCAoKmFncF9kZXN0cm95X3BhZ2VzKShzdHJ1Y3QgYWdwX21lbW9yeSAqKTsKIAlpbnQgKCphZ3BfdHlwZV90b19tYXNrX3R5cGUpIChzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICosIGludCk7CiAJdm9pZCAoKmNoaXBzZXRfZmx1c2gpKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKik7CisKKwlpbnQgKCphZ3BfbWFwX3BhZ2UpKHN0cnVjdCBwYWdlICpwYWdlLCBkbWFfYWRkcl90ICpyZXQpOworCXZvaWQgKCphZ3BfdW5tYXBfcGFnZSkoc3RydWN0IHBhZ2UgKnBhZ2UsIGRtYV9hZGRyX3QgZG1hKTsKKwlpbnQgKCphZ3BfbWFwX21lbW9yeSkoc3RydWN0IGFncF9tZW1vcnkgKm1lbSk7CisJdm9pZCAoKmFncF91bm1hcF9tZW1vcnkpKHN0cnVjdCBhZ3BfbWVtb3J5ICptZW0pOwogfTsKIAogc3RydWN0IGFncF9icmlkZ2VfZGF0YSB7CkBAIC0xMzQsNyArMTM5LDggQEAKIAl1MzIgX19pb21lbSAqZ2F0dF90YWJsZTsKIAl1MzIgKmdhdHRfdGFibGVfcmVhbDsKIAl1bnNpZ25lZCBsb25nIHNjcmF0Y2hfcGFnZTsKLQl1bnNpZ25lZCBsb25nIHNjcmF0Y2hfcGFnZV9yZWFsOworCXN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2VfcGFnZTsKKwlkbWFfYWRkcl90IHNjcmF0Y2hfcGFnZV9kbWE7CiAJdW5zaWduZWQgbG9uZyBnYXJ0X2J1c19hZGRyOwogCXVuc2lnbmVkIGxvbmcgZ2F0dF9idXNfYWRkcjsKIAl1MzIgbW9kZTsKQEAgLTI5MSw3ICsyOTcsNyBAQAogdm9pZCBnbG9iYWxfY2FjaGVfZmx1c2godm9pZCk7CiB2b2lkIGdldF9hZ3BfdmVyc2lvbihzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpOwogdW5zaWduZWQgbG9uZyBhZ3BfZ2VuZXJpY19tYXNrX21lbW9yeShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsCi0JCQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB0eXBlKTsKKwkJCQkgICAgICBkbWFfYWRkcl90IHBoeXMsIGludCB0eXBlKTsKIGludCBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsCiAJCQkJICBpbnQgdHlwZSk7CiBzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICphZ3BfZ2VuZXJpY19maW5kX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CkBAIC0zMTIsOSArMzE4LDYgQEAKICNkZWZpbmUgQUdQX0dFTkVSSUNfU0laRVNfRU5UUklFUyAxMQogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhcGVyX3NpemVfaW5mb18xNiBhZ3AzX2dlbmVyaWNfc2l6ZXNbXTsKIAotI2RlZmluZSB2aXJ0X3RvX2dhcnQoeCkgKHBoeXNfdG9fZ2FydCh2aXJ0X3RvX3BoeXMoeCkpKQotI2RlZmluZSBnYXJ0X3RvX3ZpcnQoeCkgKHBoeXNfdG9fdmlydChnYXJ0X3RvX3BoeXMoeCkpKQotCiBleHRlcm4gaW50IGFncF9vZmY7CiBleHRlcm4gaW50IGFncF90cnlfdW5zdXBwb3J0ZWRfYm9vdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FsaS1hZ3AuYwppbmRleCAyMDFlZjNmLi5kMmNlNjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FsaS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FsaS1hZ3AuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFncF9icmlkZ2UtPmRldiwgQUxJX0NBQ0hFX0ZMVVNIX0NUUkwsICZ0ZW1wKTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGFncF9icmlkZ2UtPmRldiwgQUxJX0NBQ0hFX0ZMVVNIX0NUUkwsCiAJCQkoKCh0ZW1wICYgQUxJX0NBQ0hFX0ZMVVNIX0FERFJfTUFTSykgfAotCQkJICBwaHlzX3RvX2dhcnQocGFnZV90b19waHlzKHBhZ2UpKSkgfCBBTElfQ0FDSEVfRkxVU0hfRU4gKSk7CisJCQkgIHBhZ2VfdG9fcGh5cyhwYWdlKSkgfCBBTElfQ0FDSEVfRkxVU0hfRU4gKSk7CiAJcmV0dXJuIHBhZ2U7CiB9CiAKQEAgLTE4MCw3ICsxODAsNyBAQAogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWdwX2JyaWRnZS0+ZGV2LCBBTElfQ0FDSEVfRkxVU0hfQ1RSTCwgJnRlbXApOwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGFncF9icmlkZ2UtPmRldiwgQUxJX0NBQ0hFX0ZMVVNIX0NUUkwsCiAJCQkJICAgICAgICgoKHRlbXAgJiBBTElfQ0FDSEVfRkxVU0hfQUREUl9NQVNLKSB8Ci0JCQkJCSBwaHlzX3RvX2dhcnQocGFnZV90b19waHlzKHBhZ2UpKSkgfCBBTElfQ0FDSEVfRkxVU0hfRU4pKTsKKwkJCQkJIHBhZ2VfdG9fcGh5cyhwYWdlKSkgfCBBTElfQ0FDSEVfRkxVU0hfRU4pKTsKIAl9CiAJYWdwX2dlbmVyaWNfZGVzdHJveV9wYWdlKHBhZ2UsIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKaW5kZXggYmE5YmRlNy4uNzNkYmY0MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCkBAIC00NCw3ICs0NCw3IEBACiAjaWZuZGVmIENPTkZJR19YODYKIAlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2VfbWFwLT5yZWFsKSk7CiAJZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7Ci0JcGFnZV9tYXAtPnJlbWFwcGVkID0gaW9yZW1hcF9ub2NhY2hlKHZpcnRfdG9fZ2FydChwYWdlX21hcC0+cmVhbCksCisJcGFnZV9tYXAtPnJlbWFwcGVkID0gaW9yZW1hcF9ub2NhY2hlKHZpcnRfdG9fcGh5cyhwYWdlX21hcC0+cmVhbCksCiAJCQkJCSAgICBQQUdFX1NJWkUpOwogCWlmIChwYWdlX21hcC0+cmVtYXBwZWQgPT0gTlVMTCkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocGFnZV9tYXAtPnJlYWwpKTsKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiAJYWdwX2JyaWRnZS0+Z2F0dF90YWJsZV9yZWFsID0gKHUzMiAqKXBhZ2VfZGlyLnJlYWw7CiAJYWdwX2JyaWRnZS0+Z2F0dF90YWJsZSA9ICh1MzIgX19pb21lbSAqKXBhZ2VfZGlyLnJlbWFwcGVkOwotCWFncF9icmlkZ2UtPmdhdHRfYnVzX2FkZHIgPSB2aXJ0X3RvX2dhcnQocGFnZV9kaXIucmVhbCk7CisJYWdwX2JyaWRnZS0+Z2F0dF9idXNfYWRkciA9IHZpcnRfdG9fcGh5cyhwYWdlX2Rpci5yZWFsKTsKIAogCS8qIEdldCB0aGUgYWRkcmVzcyBmb3IgdGhlIGdhcnQgcmVnaW9uLgogCSAqIFRoaXMgaXMgYSBidXMgYWRkcmVzcyBldmVuIG9uIHRoZSBhbHBoYSwgYi9jIGl0cwpAQCAtMTczLDcgKzE3Myw3IEBACiAKIAkvKiBDYWxjdWxhdGUgdGhlIGFncCBvZmZzZXQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdmFsdWUtPm51bV9lbnRyaWVzIC8gMTAyNDsgaSsrLCBhZGRyICs9IDB4MDA0MDAwMDApIHsKLQkJd3JpdGVsKHZpcnRfdG9fZ2FydChhbWRfaXJvbmdhdGVfcHJpdmF0ZS5nYXR0X3BhZ2VzW2ldLT5yZWFsKSB8IDEsCisJCXdyaXRlbCh2aXJ0X3RvX3BoeXMoYW1kX2lyb25nYXRlX3ByaXZhdGUuZ2F0dF9wYWdlc1tpXS0+cmVhbCkgfCAxLAogCQkJcGFnZV9kaXIucmVtYXBwZWQrR0VUX1BBR0VfRElSX09GRihhZGRyKSk7CiAJCXJlYWRsKHBhZ2VfZGlyLnJlbWFwcGVkK0dFVF9QQUdFX0RJUl9PRkYoYWRkcikpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAl9CkBAIC0zMjUsNyArMzI1LDkgQEAKIAkJYWRkciA9IChqICogUEFHRV9TSVpFKSArIGFncF9icmlkZ2UtPmdhcnRfYnVzX2FkZHI7CiAJCWN1cl9nYXR0ID0gR0VUX0dBVFQoYWRkcik7CiAJCXdyaXRlbChhZ3BfZ2VuZXJpY19tYXNrX21lbW9yeShhZ3BfYnJpZGdlLAotCQkJbWVtLT5wYWdlc1tpXSwgbWVtLT50eXBlKSwgY3VyX2dhdHQrR0VUX0dBVFRfT0ZGKGFkZHIpKTsKKwkJCQkJICAgICAgIHBhZ2VfdG9fcGh5cyhtZW0tPnBhZ2VzW2ldKSwKKwkJCQkJICAgICAgIG1lbS0+dHlwZSksCisJCSAgICAgICBjdXJfZ2F0dCtHRVRfR0FUVF9PRkYoYWRkcikpOwogCQlyZWFkbChjdXJfZ2F0dCtHRVRfR0FUVF9PRkYoYWRkcikpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAl9CiAJYW1kX2lyb25nYXRlX3RsYmZsdXNoKG1lbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCAzYmY1ZGRhLi4yZmIyZTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTc5LDcgKzc5LDggQEAKIAogCWZvciAoaSA9IDAsIGogPSBwZ19zdGFydDsgaSA8IG1lbS0+cGFnZV9jb3VudDsgaSsrLCBqKyspIHsKIAkJdG1wID0gYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLAotCQkJbWVtLT5wYWdlc1tpXSwgbWFza190eXBlKTsKKwkJCQkJCSAgICAgIHBhZ2VfdG9fcGh5cyhtZW0tPnBhZ2VzW2ldKSwKKwkJCQkJCSAgICAgIG1hc2tfdHlwZSk7CiAKIAkJQlVHX09OKHRtcCAmIDB4ZmZmZmZmMDAwMDAwMGZmY1VMTCk7CiAJCXB0ZSA9ICh0bXAgJiAweDAwMDAwMGZmMDAwMDAwMDBVTEwpID4+IDI4OwpAQCAtMTc3LDcgKzE3OCw3IEBACiAKIHN0YXRpYyBpbnQgYW1kXzgxNTFfY29uZmlndXJlKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBnYXR0X2J1cyA9IHZpcnRfdG9fZ2FydChhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlX3JlYWwpOworCXVuc2lnbmVkIGxvbmcgZ2F0dF9idXMgPSB2aXJ0X3RvX3BoeXMoYWdwX2JyaWRnZS0+Z2F0dF90YWJsZV9yZWFsKTsKIAlpbnQgaTsKIAogCS8qIENvbmZpZ3VyZSBBR1AgcmVncyBpbiBlYWNoIHg4Ni02NCBob3N0IGJyaWRnZS4gKi8KQEAgLTU1Nyw3ICs1NTgsNyBAQAogewogCXN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCXJlbGVhc2VfbWVtX3JlZ2lvbih2aXJ0X3RvX2dhcnQoYnJpZGdlLT5nYXR0X3RhYmxlX3JlYWwpLAorCXJlbGVhc2VfbWVtX3JlZ2lvbih2aXJ0X3RvX3BoeXMoYnJpZGdlLT5nYXR0X3RhYmxlX3JlYWwpLAogCQkJICAgYW1kNjRfYXBlcnR1cmVfc2l6ZXNbYnJpZGdlLT5hcGVydHVyZV9zaXplX2lkeF0uc2l6ZSk7CiAJYWdwX3JlbW92ZV9icmlkZ2UoYnJpZGdlKTsKIAlhZ3BfcHV0X2JyaWRnZShicmlkZ2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwppbmRleCAzMzY1NmUxLi4zYjJlY2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwpAQCAtMzAyLDcgKzMwMiw4IEBACiAJCWFkZHIgPSAoaiAqIFBBR0VfU0laRSkgKyBhZ3BfYnJpZGdlLT5nYXJ0X2J1c19hZGRyOwogCQljdXJfZ2F0dCA9IEdFVF9HQVRUKGFkZHIpOwogCQl3cml0ZWwoYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLAkKLQkJCQkJCSAgICAgICBtZW0tPnBhZ2VzW2ldLCBtZW0tPnR5cGUpLAorCQkJCQkJICAgICAgIHBhZ2VfdG9fcGh5cyhtZW0tPnBhZ2VzW2ldKSwKKwkJCQkJCSAgICAgICBtZW0tPnR5cGUpLAogCQkgICAgICAgY3VyX2dhdHQrR0VUX0dBVFRfT0ZGKGFkZHIpKTsKIAl9CiAJcmVhZGwoR0VUX0dBVFQoYWdwX2JyaWRnZS0+Z2FydF9idXNfYWRkcikpOyAvKiBQQ0kgcG9zdGluZyAqLwpAQCAtMzU5LDcgKzM2MCw3IEBACiAKIAlhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlX3JlYWwgPSAodTMyICopcGFnZV9kaXIucmVhbDsKIAlhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlID0gKHUzMiBfX2lvbWVtICopIHBhZ2VfZGlyLnJlbWFwcGVkOwotCWFncF9icmlkZ2UtPmdhdHRfYnVzX2FkZHIgPSB2aXJ0X3RvX2dhcnQocGFnZV9kaXIucmVhbCk7CisJYWdwX2JyaWRnZS0+Z2F0dF9idXNfYWRkciA9IHZpcnRfdG9fcGh5cyhwYWdlX2Rpci5yZWFsKTsKIAogCS8qIFdyaXRlIG91dCB0aGUgc2l6ZSByZWdpc3RlciAqLwogCWN1cnJlbnRfc2l6ZSA9IEFfU0laRV9MVkwyKGFncF9icmlkZ2UtPmN1cnJlbnRfc2l6ZSk7CkBAIC0zODksNyArMzkwLDcgQEAKIAogCS8qIENhbGN1bGF0ZSB0aGUgYWdwIG9mZnNldCAqLwogCWZvciAoaSA9IDA7IGkgPCB2YWx1ZS0+bnVtX2VudHJpZXMgLyAxMDI0OyBpKyssIGFkZHIgKz0gMHgwMDQwMDAwMCkgewotCQl3cml0ZWwodmlydF90b19nYXJ0KGF0aV9nZW5lcmljX3ByaXZhdGUuZ2F0dF9wYWdlc1tpXS0+cmVhbCkgfCAxLAorCQl3cml0ZWwodmlydF90b19waHlzKGF0aV9nZW5lcmljX3ByaXZhdGUuZ2F0dF9wYWdlc1tpXS0+cmVhbCkgfCAxLAogCQkJcGFnZV9kaXIucmVtYXBwZWQrR0VUX1BBR0VfRElSX09GRihhZGRyKSk7CiAJCXJlYWRsKHBhZ2VfZGlyLnJlbWFwcGVkK0dFVF9QQUdFX0RJUl9PRkYoYWRkcikpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYmFja2VuZC5jCmluZGV4IGNmYTVhNjQuLmFkODc3NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYmFja2VuZC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYmFja2VuZC5jCkBAIC0xNDksOSArMTQ5LDIxIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCWJyaWRnZS0+c2NyYXRjaF9wYWdlX3JlYWwgPSBwaHlzX3RvX2dhcnQocGFnZV90b19waHlzKHBhZ2UpKTsKLQkJYnJpZGdlLT5zY3JhdGNoX3BhZ2UgPQotCQkgICAgYnJpZGdlLT5kcml2ZXItPm1hc2tfbWVtb3J5KGJyaWRnZSwgcGFnZSwgMCk7CisJCWJyaWRnZS0+c2NyYXRjaF9wYWdlX3BhZ2UgPSBwYWdlOworCQlpZiAoYnJpZGdlLT5kcml2ZXItPmFncF9tYXBfcGFnZSkgeworCQkJaWYgKGJyaWRnZS0+ZHJpdmVyLT5hZ3BfbWFwX3BhZ2UocGFnZSwKKwkJCQkJCQkgJmJyaWRnZS0+c2NyYXRjaF9wYWdlX2RtYSkpIHsKKwkJCQlkZXZfZXJyKCZicmlkZ2UtPmRldi0+ZGV2LAorCQkJCQkidW5hYmxlIHRvIGRtYS1tYXAgc2NyYXRjaCBwYWdlXG4iKTsKKwkJCQlyYyA9IC1FTk9NRU07CisJCQkJZ290byBlcnJfb3V0X25vdW5tYXA7CisJCQl9CisJCX0gZWxzZSB7CisJCQlicmlkZ2UtPnNjcmF0Y2hfcGFnZV9kbWEgPSBwYWdlX3RvX3BoeXMocGFnZSk7CisJCX0KKworCQlicmlkZ2UtPnNjcmF0Y2hfcGFnZSA9IGJyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShicmlkZ2UsCisJCQkJCQkgICBicmlkZ2UtPnNjcmF0Y2hfcGFnZV9kbWEsIDApOwogCX0KIAogCXNpemVfdmFsdWUgPSBicmlkZ2UtPmRyaXZlci0+ZmV0Y2hfc2l6ZSgpOwpAQCAtMTkxLDggKzIwMywxNCBAQAogCXJldHVybiAwOwogCiBlcnJfb3V0OgorCWlmIChicmlkZ2UtPmRyaXZlci0+bmVlZHNfc2NyYXRjaF9wYWdlICYmCisJICAgIGJyaWRnZS0+ZHJpdmVyLT5hZ3BfdW5tYXBfcGFnZSkgeworCQlicmlkZ2UtPmRyaXZlci0+YWdwX3VubWFwX3BhZ2UoYnJpZGdlLT5zY3JhdGNoX3BhZ2VfcGFnZSwKKwkJCQkJICAgICAgIGJyaWRnZS0+c2NyYXRjaF9wYWdlX2RtYSk7CisJfQorZXJyX291dF9ub3VubWFwOgogCWlmIChicmlkZ2UtPmRyaXZlci0+bmVlZHNfc2NyYXRjaF9wYWdlKSB7Ci0JCXZvaWQgKnZhID0gZ2FydF90b192aXJ0KGJyaWRnZS0+c2NyYXRjaF9wYWdlX3JlYWwpOworCQl2b2lkICp2YSA9IHBhZ2VfYWRkcmVzcyhicmlkZ2UtPnNjcmF0Y2hfcGFnZV9wYWdlKTsKIAogCQlicmlkZ2UtPmRyaXZlci0+YWdwX2Rlc3Ryb3lfcGFnZSh2YSwgQUdQX1BBR0VfREVTVFJPWV9VTk1BUCk7CiAJCWJyaWRnZS0+ZHJpdmVyLT5hZ3BfZGVzdHJveV9wYWdlKHZhLCBBR1BfUEFHRV9ERVNUUk9ZX0ZSRUUpOwpAQCAtMjE5LDcgKzIzNywxMSBAQAogCiAJaWYgKGJyaWRnZS0+ZHJpdmVyLT5hZ3BfZGVzdHJveV9wYWdlICYmCiAJICAgIGJyaWRnZS0+ZHJpdmVyLT5uZWVkc19zY3JhdGNoX3BhZ2UpIHsKLQkJdm9pZCAqdmEgPSBnYXJ0X3RvX3ZpcnQoYnJpZGdlLT5zY3JhdGNoX3BhZ2VfcmVhbCk7CisJCXZvaWQgKnZhID0gcGFnZV9hZGRyZXNzKGJyaWRnZS0+c2NyYXRjaF9wYWdlX3BhZ2UpOworCisJCWlmIChicmlkZ2UtPmRyaXZlci0+YWdwX3VubWFwX3BhZ2UpCisJCQlicmlkZ2UtPmRyaXZlci0+YWdwX3VubWFwX3BhZ2UoYnJpZGdlLT5zY3JhdGNoX3BhZ2VfcGFnZSwKKwkJCQkJCSAgICAgICBicmlkZ2UtPnNjcmF0Y2hfcGFnZV9kbWEpOwogCiAJCWJyaWRnZS0+ZHJpdmVyLT5hZ3BfZGVzdHJveV9wYWdlKHZhLCBBR1BfUEFHRV9ERVNUUk9ZX1VOTUFQKTsKIAkJYnJpZGdlLT5kcml2ZXItPmFncF9kZXN0cm95X3BhZ2UodmEsIEFHUF9QQUdFX0RFU1RST1lfRlJFRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9lZmZpY2Vvbi1hZ3AuYwppbmRleCAzNWQ1MGYyLi43OTNmMzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMKQEAgLTY3LDcgKzY3LDcgQEAKIC8qIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgc2FtZSB0aGluZyBhcyBtYXNrX21lbW9yeSgpIGZvciB0aGlzIGNoaXBzZXQuLi4gKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBlZmZpY2Vvbl9tYXNrX21lbW9yeShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBwaHlzX3RvX2dhcnQocGFnZV90b19waHlzKHBhZ2UpKTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSk7CiAJcmV0dXJuIGFkZHIgfCAweDAwMDAwMDAxOwogfQogCkBAIC0yMjYsNyArMjI2LDcgQEAKIAogCQllZmZpY2Vvbl9wcml2YXRlLmwxX3RhYmxlW2luZGV4XSA9IHBhZ2U7CiAKLQkJdmFsdWUgPSB2aXJ0X3RvX2dhcnQoKHVuc2lnbmVkIGxvbmcgKilwYWdlKSB8IHBhdGkgfCBwcmVzZW50IHwgaW5kZXg7CisJCXZhbHVlID0gdmlydF90b19waHlzKCh1bnNpZ25lZCBsb25nICopcGFnZSkgfCBwYXRpIHwgcHJlc2VudCB8IGluZGV4OwogCiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYWdwX2JyaWRnZS0+ZGV2LAogCQkJRUZGSUNFT05fQVRUUEFHRSwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYwppbmRleCAxZThiNDYxLi5jNTA1NDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYwpAQCAtNDM3LDYgKzQzNywxMiBAQAogCQljdXJyLT5icmlkZ2UtPmRyaXZlci0+Y2FjaGVfZmx1c2goKTsKIAkJY3Vyci0+aXNfZmx1c2hlZCA9IHRydWU7CiAJfQorCisJaWYgKGN1cnItPmJyaWRnZS0+ZHJpdmVyLT5hZ3BfbWFwX21lbW9yeSkgeworCQlyZXRfdmFsID0gY3Vyci0+YnJpZGdlLT5kcml2ZXItPmFncF9tYXBfbWVtb3J5KGN1cnIpOworCQlpZiAocmV0X3ZhbCkKKwkJCXJldHVybiByZXRfdmFsOworCX0KIAlyZXRfdmFsID0gY3Vyci0+YnJpZGdlLT5kcml2ZXItPmluc2VydF9tZW1vcnkoY3VyciwgcGdfc3RhcnQsIGN1cnItPnR5cGUpOwogCiAJaWYgKHJldF92YWwgIT0gMCkKQEAgLTQ3OCw2ICs0ODQsOSBAQAogCWlmIChyZXRfdmFsICE9IDApCiAJCXJldHVybiByZXRfdmFsOwogCisJaWYgKGN1cnItPmJyaWRnZS0+ZHJpdmVyLT5hZ3BfdW5tYXBfbWVtb3J5KQorCQljdXJyLT5icmlkZ2UtPmRyaXZlci0+YWdwX3VubWFwX21lbW9yeShjdXJyKTsKKwogCWN1cnItPmlzX2JvdW5kID0gZmFsc2U7CiAJY3Vyci0+cGdfc3RhcnQgPSAwOwogCXNwaW5fbG9jaygmY3Vyci0+YnJpZGdlLT5tYXBwZWRfbG9jayk7CkBAIC05NzksNyArOTg4LDcgQEAKIAlzZXRfbWVtb3J5X3VjKCh1bnNpZ25lZCBsb25nKXRhYmxlLCAxIDw8IHBhZ2Vfb3JkZXIpOwogCWJyaWRnZS0+Z2F0dF90YWJsZSA9ICh2b2lkICopdGFibGU7CiAjZWxzZQotCWJyaWRnZS0+Z2F0dF90YWJsZSA9IGlvcmVtYXBfbm9jYWNoZSh2aXJ0X3RvX2dhcnQodGFibGUpLAorCWJyaWRnZS0+Z2F0dF90YWJsZSA9IGlvcmVtYXBfbm9jYWNoZSh2aXJ0X3RvX3BoeXModGFibGUpLAogCQkJCQkoUEFHRV9TSVpFICogKDEgPDwgcGFnZV9vcmRlcikpKTsKIAlicmlkZ2UtPmRyaXZlci0+Y2FjaGVfZmx1c2goKTsKICNlbmRpZgpAQCAtOTkyLDcgKzEwMDEsNyBAQAogCiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlicmlkZ2UtPmdhdHRfYnVzX2FkZHIgPSB2aXJ0X3RvX2dhcnQoYnJpZGdlLT5nYXR0X3RhYmxlX3JlYWwpOworCWJyaWRnZS0+Z2F0dF9idXNfYWRkciA9IHZpcnRfdG9fcGh5cyhicmlkZ2UtPmdhdHRfdGFibGVfcmVhbCk7CiAKIAkvKiBBSzogYm9ndXMsIHNob3VsZCBlbmNvZGUgYWRkcmVzc2VzID4gNEdCICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyBpKyspIHsKQEAgLTExMzIsNyArMTE0MSw5IEBACiAJfQogCiAJZm9yIChpID0gMCwgaiA9IHBnX3N0YXJ0OyBpIDwgbWVtLT5wYWdlX2NvdW50OyBpKyssIGorKykgewotCQl3cml0ZWwoYnJpZGdlLT5kcml2ZXItPm1hc2tfbWVtb3J5KGJyaWRnZSwgbWVtLT5wYWdlc1tpXSwgbWFza190eXBlKSwKKwkJd3JpdGVsKGJyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShicmlkZ2UsCisJCQkJCQkgICBwYWdlX3RvX3BoeXMobWVtLT5wYWdlc1tpXSksCisJCQkJCQkgICBtYXNrX3R5cGUpLAogCQkgICAgICAgYnJpZGdlLT5nYXR0X3RhYmxlK2opOwogCX0KIAlyZWFkbChicmlkZ2UtPmdhdHRfdGFibGUrai0xKTsJLyogUENJIFBvc3RpbmcuICovCkBAIC0xMzQ3LDkgKzEzNTgsOCBAQAogRVhQT1JUX1NZTUJPTChnbG9iYWxfY2FjaGVfZmx1c2gpOwogCiB1bnNpZ25lZCBsb25nIGFncF9nZW5lcmljX21hc2tfbWVtb3J5KHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSwKLQkJCQkgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHR5cGUpCisJCQkJICAgICAgZG1hX2FkZHJfdCBhZGRyLCBpbnQgdHlwZSkKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBwaHlzX3RvX2dhcnQocGFnZV90b19waHlzKHBhZ2UpKTsKIAkvKiBtZW1vcnkgdHlwZSBpcyBpZ25vcmVkIGluIHRoZSBnZW5lcmljIHJvdXRpbmUgKi8KIAlpZiAoYnJpZGdlLT5kcml2ZXItPm1hc2tzKQogCQlyZXR1cm4gYWRkciB8IGJyaWRnZS0+ZHJpdmVyLT5tYXNrc1swXS5tYXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9ocC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaHAtYWdwLmMKaW5kZXggOGYzZDRjMS4uNTAxZTI5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9ocC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2hwLWFncC5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAlocC0+Z2FydF9zaXplID0gSFBfWlgxX0dBUlRfU0laRTsKIAlocC0+Z2F0dF9lbnRyaWVzID0gaHAtPmdhcnRfc2l6ZSAvIGhwLT5pb19wYWdlX3NpemU7CiAKLQlocC0+aW9fcGRpciA9IGdhcnRfdG9fdmlydChyZWFkcShocC0+aW9jX3JlZ3MrSFBfWlgxX1BESVJfQkFTRSkpOworCWhwLT5pb19wZGlyID0gcGh5c190b192aXJ0KHJlYWRxKGhwLT5pb2NfcmVncytIUF9aWDFfUERJUl9CQVNFKSk7CiAJaHAtPmdhdHQgPSAmaHAtPmlvX3BkaXJbSFBfWlgxX0lPVkFfVE9fUERJUihocC0+Z2FydF9iYXNlKV07CiAKIAlpZiAoaHAtPmdhdHRbMF0gIT0gSFBfWlgxX1NCQV9JT01NVV9DT09LSUUpIHsKQEAgLTI0Niw3ICsyNDYsNyBAQAogCWFncF9icmlkZ2UtPm1vZGUgPSByZWFkbChocC0+bGJhX3JlZ3MraHAtPmxiYV9jYXBfb2Zmc2V0K1BDSV9BR1BfU1RBVFVTKTsKIAogCWlmIChocC0+aW9fcGRpcl9vd25lcikgewotCQl3cml0ZWwodmlydF90b19nYXJ0KGhwLT5pb19wZGlyKSwgaHAtPmlvY19yZWdzK0hQX1pYMV9QRElSX0JBU0UpOworCQl3cml0ZWwodmlydF90b19waHlzKGhwLT5pb19wZGlyKSwgaHAtPmlvY19yZWdzK0hQX1pYMV9QRElSX0JBU0UpOwogCQlyZWFkbChocC0+aW9jX3JlZ3MrSFBfWlgxX1BESVJfQkFTRSk7CiAJCXdyaXRlbChocC0+aW9fdGxiX3BzLCBocC0+aW9jX3JlZ3MrSFBfWlgxX1RDTkZHKTsKIAkJcmVhZGwoaHAtPmlvY19yZWdzK0hQX1pYMV9UQ05GRyk7CkBAIC0zOTQsMTAgKzM5NCw4IEBACiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nCi1ocF96eDFfbWFza19tZW1vcnkgKHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSwKLQkJICAgIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgdHlwZSkKK2hwX3p4MV9tYXNrX21lbW9yeSAoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlLCBkbWFfYWRkcl90IGFkZHIsIGludCB0eXBlKQogewotCXVuc2lnbmVkIGxvbmcgYWRkciA9IHBoeXNfdG9fZ2FydChwYWdlX3RvX3BoeXMocGFnZSkpOwogCXJldHVybiBIUF9aWDFfUERJUl9WQUxJRF9CSVQgfCBhZGRyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2k0NjAtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2k0NjAtYWdwLmMKaW5kZXggNjBjYzM1Yi4uZTc2M2QzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pNDYwLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaTQ2MC1hZ3AuYwpAQCAtNjEsNyArNjEsNyBAQAogI2RlZmluZSBXUl9GTFVTSF9HQVRUKGluZGV4KQlSRF9HQVRUKGluZGV4KQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpNDYwX21hc2tfbWVtb3J5IChzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHR5cGUpOworCQkJCSAgICAgICBkbWFfYWRkcl90IGFkZHIsIGludCB0eXBlKTsKIAogc3RhdGljIHN0cnVjdCB7CiAJdm9pZCAqZ2F0dDsJCQkJLyogaW9yZW1hcCdkIEdBVFQgYXJlYSAqLwpAQCAtMzI1LDcgKzMyNSw3IEBACiAKIAlpb19wYWdlX3NpemUgPSAxVUwgPDwgSTQ2MF9JT19QQUdFX1NISUZUOwogCWZvciAoaSA9IDAsIGogPSBpb19wZ19zdGFydDsgaSA8IG1lbS0+cGFnZV9jb3VudDsgaSsrKSB7Ci0JCXBhZGRyID0gcGh5c190b19nYXJ0KHBhZ2VfdG9fcGh5cyhtZW0tPnBhZ2VzW2ldKSk7CisJCXBhZGRyID0gcGFnZV90b19waHlzKG1lbS0+cGFnZXNbaV0pOwogCQlmb3IgKGsgPSAwOyBrIDwgSTQ2MF9JT1BBR0VTX1BFUl9LUEFHRTsgaysrLCBqKyssIHBhZGRyICs9IGlvX3BhZ2Vfc2l6ZSkKIAkJCVdSX0dBVFQoaiwgaTQ2MF9tYXNrX21lbW9yeShhZ3BfYnJpZGdlLCBwYWRkciwgbWVtLT50eXBlKSk7CiAJfQpAQCAtMzgyLDcgKzM4Miw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWxwLT5wYWRkciA9IHBoeXNfdG9fZ2FydChwYWdlX3RvX3BoeXMobHAtPnBhZ2UpKTsKKwlscC0+cGFkZHIgPSBwYWdlX3RvX3BoeXMobHAtPnBhZ2UpOwogCWxwLT5yZWZjb3VudCA9IDA7CiAJYXRvbWljX2FkZChJNDYwX0tQQUdFU19QRVJfSU9QQUdFLCAmYWdwX2JyaWRnZS0+Y3VycmVudF9tZW1vcnlfYWdwKTsKIAlyZXR1cm4gMDsKQEAgLTU0NiwyMCArNTQ2LDEzIEBACiAjZW5kaWYgLyogSTQ2MF9MQVJHRV9JT19QQUdFUyAqLwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpNDYwX21hc2tfbWVtb3J5IChzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHR5cGUpCisJCQkJICAgICAgIGRtYV9hZGRyX3QgYWRkciwgaW50IHR5cGUpCiB7CiAJLyogTWFrZSBzdXJlIHRoZSByZXR1cm5lZCBhZGRyZXNzIGlzIGEgdmFsaWQgR0FUVCBlbnRyeSAqLwogCXJldHVybiBicmlkZ2UtPmRyaXZlci0+bWFza3NbMF0ubWFzawogCQl8ICgoKGFkZHIgJiB+KCgxIDw8IEk0NjBfSU9fUEFHRV9TSElGVCkgLSAxKSkgJiAweGZmZmZmMDAwKSA+PiAxMik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGk0NjBfcGFnZV9tYXNrX21lbW9yeShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsCi0JCQkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgdHlwZSkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBwaHlzX3RvX2dhcnQocGFnZV90b19waHlzKHBhZ2UpKTsKLQlyZXR1cm4gaTQ2MF9tYXNrX21lbW9yeShicmlkZ2UsIGFkZHIsIHR5cGUpOwotfQotCiBjb25zdCBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgaW50ZWxfaTQ2MF9kcml2ZXIgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuYXBlcnR1cmVfc2l6ZXMJCT0gaTQ2MF9zaXplcywKQEAgLTU2OSw3ICs1NjIsNyBAQAogCS5mZXRjaF9zaXplCQk9IGk0NjBfZmV0Y2hfc2l6ZSwKIAkuY2xlYW51cAkJPSBpNDYwX2NsZWFudXAsCiAJLnRsYl9mbHVzaAkJPSBpNDYwX3RsYl9mbHVzaCwKLQkubWFza19tZW1vcnkJCT0gaTQ2MF9wYWdlX21hc2tfbWVtb3J5LAorCS5tYXNrX21lbW9yeQkJPSBpNDYwX21hc2tfbWVtb3J5LAogCS5tYXNrcwkJCT0gaTQ2MF9tYXNrcywKIAkuYWdwX2VuYWJsZQkJPSBhZ3BfZ2VuZXJpY19lbmFibGUsCiAJLmNhY2hlX2ZsdXNoCQk9IGdsb2JhbF9jYWNoZV9mbHVzaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IGM1ODU1NzcuLjE1NDBlNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtMTAsNiArMTAsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgogI2luY2x1ZGUgImFncC5oIgogCisvKgorICogSWYgd2UgaGF2ZSBJbnRlbCBncmFwaGljcywgd2UncmUgbm90IGdvaW5nIHRvIGhhdmUgYW55dGhpbmcgb3RoZXIgdGhhbgorICogYW4gSW50ZWwgSU9NTVUuIFNvIG1ha2UgdGhlIGNvcnJlY3QgdXNlIG9mIHRoZSBQQ0kgRE1BIEFQSSBjb250aW5nZW50CisgKiBvbiB0aGUgSW50ZWwgSU9NTVUgc3VwcG9ydCAoQ09ORklHX0RNQVIpLgorICogT25seSBuZXdlciBjaGlwc2V0cyBuZWVkIHRvIGJvdGhlciB3aXRoIHRoaXMsIG9mIGNvdXJzZS4KKyAqLworI2lmZGVmIENPTkZJR19ETUFSCisjZGVmaW5lIFVTRV9QQ0lfRE1BX0FQSSAxCisjZW5kaWYKKwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0U3MjIxX0hCCTB4MjU4OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0U3MjIxX0lHCTB4MjU4YQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTQ2R1pfSEIgICAgICAweDI5NzAKQEAgLTE3Miw2ICsxODIsMTIzIEBACiAJaW50IHJlc291cmNlX3ZhbGlkOwogfSBpbnRlbF9wcml2YXRlOwogCisjaWZkZWYgVVNFX1BDSV9ETUFfQVBJCitzdGF0aWMgaW50IGludGVsX2FncF9tYXBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZG1hX2FkZHJfdCAqcmV0KQoreworCSpyZXQgPSBwY2lfbWFwX3BhZ2UoaW50ZWxfcHJpdmF0ZS5wY2lkZXYsIHBhZ2UsIDAsCisJCQkgICAgUEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoaW50ZWxfcHJpdmF0ZS5wY2lkZXYsICpyZXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfYWdwX3VubWFwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGRtYV9hZGRyX3QgZG1hKQoreworCXBjaV91bm1hcF9wYWdlKGludGVsX3ByaXZhdGUucGNpZGV2LCBkbWEsCisJCSAgICAgICBQQUdFX1NJWkUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2FncF9mcmVlX3NnbGlzdChzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtKQoreworCXN0cnVjdCBzZ190YWJsZSBzdDsKKworCXN0LnNnbCA9IG1lbS0+c2dfbGlzdDsKKwlzdC5vcmlnX25lbnRzID0gc3QubmVudHMgPSBtZW0tPnBhZ2VfY291bnQ7CisKKwlzZ19mcmVlX3RhYmxlKCZzdCk7CisKKwltZW0tPnNnX2xpc3QgPSBOVUxMOworCW1lbS0+bnVtX3NnID0gMDsKK30KKworc3RhdGljIGludCBpbnRlbF9hZ3BfbWFwX21lbW9yeShzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtKQoreworCXN0cnVjdCBzZ190YWJsZSBzdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCBpOworCisJREJHKCJ0cnkgbWFwcGluZyAlbHUgcGFnZXNcbiIsICh1bnNpZ25lZCBsb25nKW1lbS0+cGFnZV9jb3VudCk7CisKKwlpZiAoc2dfYWxsb2NfdGFibGUoJnN0LCBtZW0tPnBhZ2VfY291bnQsIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbS0+c2dfbGlzdCA9IHNnID0gc3Quc2dsOworCisJZm9yIChpID0gMCA7IGkgPCBtZW0tPnBhZ2VfY291bnQ7IGkrKywgc2cgPSBzZ19uZXh0KHNnKSkKKwkJc2dfc2V0X3BhZ2Uoc2csIG1lbS0+cGFnZXNbaV0sIFBBR0VfU0laRSwgMCk7CisKKwltZW0tPm51bV9zZyA9IHBjaV9tYXBfc2coaW50ZWxfcHJpdmF0ZS5wY2lkZXYsIG1lbS0+c2dfbGlzdCwKKwkJCQkgbWVtLT5wYWdlX2NvdW50LCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCWlmICh1bmxpa2VseSghbWVtLT5udW1fc2cpKSB7CisJCWludGVsX2FncF9mcmVlX3NnbGlzdChtZW0pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2FncF91bm1hcF9tZW1vcnkoc3RydWN0IGFncF9tZW1vcnkgKm1lbSkKK3sKKwlEQkcoInRyeSB1bm1hcHBpbmcgJWx1IHBhZ2VzXG4iLCAodW5zaWduZWQgbG9uZyltZW0tPnBhZ2VfY291bnQpOworCisJcGNpX3VubWFwX3NnKGludGVsX3ByaXZhdGUucGNpZGV2LCBtZW0tPnNnX2xpc3QsCisJCSAgICAgbWVtLT5wYWdlX2NvdW50LCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCWludGVsX2FncF9mcmVlX3NnbGlzdChtZW0pOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9hZ3BfaW5zZXJ0X3NnX2VudHJpZXMoc3RydWN0IGFncF9tZW1vcnkgKm1lbSwKKwkJCQkJb2ZmX3QgcGdfc3RhcnQsIGludCBtYXNrX3R5cGUpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaSwgajsKKworCWogPSBwZ19zdGFydDsKKworCVdBUk5fT04oIW1lbS0+bnVtX3NnKTsKKworCWlmIChtZW0tPm51bV9zZyA9PSBtZW0tPnBhZ2VfY291bnQpIHsKKwkJZm9yX2VhY2hfc2cobWVtLT5zZ19saXN0LCBzZywgbWVtLT5wYWdlX2NvdW50LCBpKSB7CisJCQl3cml0ZWwoYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLAorCQkJCQlzZ19kbWFfYWRkcmVzcyhzZyksIG1hc2tfdHlwZSksCisJCQkJCWludGVsX3ByaXZhdGUuZ3R0K2opOworCQkJaisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogc2cgbWF5IG1lcmdlIHBhZ2VzLCBidXQgd2UgaGF2ZSB0byBzZXBlcmF0ZQorCQkgKiBwZXItcGFnZSBhZGRyIGZvciBHVFQgKi8KKwkJdW5zaWduZWQgaW50IGxlbiwgbTsKKworCQlmb3JfZWFjaF9zZyhtZW0tPnNnX2xpc3QsIHNnLCBtZW0tPm51bV9zZywgaSkgeworCQkJbGVuID0gc2dfZG1hX2xlbihzZykgLyBQQUdFX1NJWkU7CisJCQlmb3IgKG0gPSAwOyBtIDwgbGVuOyBtKyspIHsKKwkJCQl3cml0ZWwoYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLAorCQkJCQkJCQkgICAgICAgc2dfZG1hX2FkZHJlc3Moc2cpICsgbSAqIFBBR0VfU0laRSwKKwkJCQkJCQkJICAgICAgIG1hc2tfdHlwZSksCisJCQkJICAgICAgIGludGVsX3ByaXZhdGUuZ3R0K2opOworCQkJCWorKzsKKwkJCX0KKwkJfQorCX0KKwlyZWFkbChpbnRlbF9wcml2YXRlLmd0dCtqLTEpOworfQorCisjZWxzZQorCitzdGF0aWMgdm9pZCBpbnRlbF9hZ3BfaW5zZXJ0X3NnX2VudHJpZXMoc3RydWN0IGFncF9tZW1vcnkgKm1lbSwKKwkJCQkJb2ZmX3QgcGdfc3RhcnQsIGludCBtYXNrX3R5cGUpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwLCBqID0gcGdfc3RhcnQ7IGkgPCBtZW0tPnBhZ2VfY291bnQ7IGkrKywgaisrKSB7CisJCXdyaXRlbChhZ3BfYnJpZGdlLT5kcml2ZXItPm1hc2tfbWVtb3J5KGFncF9icmlkZ2UsCisJCQkJcGFnZV90b19waHlzKG1lbS0+cGFnZXNbaV0pLCBtYXNrX3R5cGUpLAorCQkgICAgICAgaW50ZWxfcHJpdmF0ZS5ndHQraik7CisJfQorCisJcmVhZGwoaW50ZWxfcHJpdmF0ZS5ndHQrai0xKTsKK30KKworI2VuZGlmCisKIHN0YXRpYyBpbnQgaW50ZWxfaTgxMF9mZXRjaF9zaXplKHZvaWQpCiB7CiAJdTMyIHNtcmFtX21pc2NjOwpAQCAtMzQ1LDggKzQ3Miw3IEBACiAJCQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKIAkJZm9yIChpID0gMCwgaiA9IHBnX3N0YXJ0OyBpIDwgbWVtLT5wYWdlX2NvdW50OyBpKyssIGorKykgewogCQkJd3JpdGVsKGFncF9icmlkZ2UtPmRyaXZlci0+bWFza19tZW1vcnkoYWdwX2JyaWRnZSwKLQkJCQkJCQkgICAgICAgbWVtLT5wYWdlc1tpXSwKLQkJCQkJCQkgICAgICAgbWFza190eXBlKSwKKwkJCQkJcGFnZV90b19waHlzKG1lbS0+cGFnZXNbaV0pLCBtYXNrX3R5cGUpLAogCQkJICAgICAgIGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGoqNCkpOwogCQl9CiAJCXJlYWRsKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKChqLTEpKjQpKTsKQEAgLTQ2Myw5ICs1ODksOCBAQAogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnRlbF9pODEwX21hc2tfbWVtb3J5KHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSwKLQkJCQkJICAgIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgdHlwZSkKKwkJCQkJICAgIGRtYV9hZGRyX3QgYWRkciwgaW50IHR5cGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gcGh5c190b19nYXJ0KHBhZ2VfdG9fcGh5cyhwYWdlKSk7CiAJLyogVHlwZSBjaGVja2luZyBtdXN0IGJlIGRvbmUgZWxzZXdoZXJlICovCiAJcmV0dXJuIGFkZHIgfCBicmlkZ2UtPmRyaXZlci0+bWFza3NbdHlwZV0ubWFzazsKIH0KQEAgLTg1Myw3ICs5NzgsNyBAQAogCiAJZm9yIChpID0gMCwgaiA9IHBnX3N0YXJ0OyBpIDwgbWVtLT5wYWdlX2NvdW50OyBpKyssIGorKykgewogCQl3cml0ZWwoYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLAotCQkJCQkJICAgICAgIG1lbS0+cGFnZXNbaV0sIG1hc2tfdHlwZSksCisJCQkJcGFnZV90b19waHlzKG1lbS0+cGFnZXNbaV0pLCBtYXNrX3R5cGUpLAogCQkgICAgICAgaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QVEVfQkFTRSsoaio0KSk7CiAJfQogCXJlYWRsKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKChqLTEpKjQpKTsKQEAgLTEwMTcsNiArMTE0MiwxMiBAQAogCiAJaW50ZWxfaTl4eF9zZXR1cF9mbHVzaCgpOwogCisjaWZkZWYgVVNFX1BDSV9ETUFfQVBJIAorCWlmIChwY2lfc2V0X2RtYV9tYXNrKGludGVsX3ByaXZhdGUucGNpZGV2LCBETUFfQklUX01BU0soMzYpKSkKKwkJZGV2X2VycigmaW50ZWxfcHJpdmF0ZS5wY2lkZXYtPmRldiwKKwkJCSJzZXQgZ2Z4IGRldmljZSBkbWEgbWFzayAzNmJpdCBmYWlsZWQhXG4iKTsKKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNDEsNyArMTE3Miw3IEBACiBzdGF0aWMgaW50IGludGVsX2k5MTVfaW5zZXJ0X2VudHJpZXMoc3RydWN0IGFncF9tZW1vcnkgKm1lbSwgb2ZmX3QgcGdfc3RhcnQsCiAJCQkJICAgICBpbnQgdHlwZSkKIHsKLQlpbnQgaSwgaiwgbnVtX2VudHJpZXM7CisJaW50IG51bV9lbnRyaWVzOwogCXZvaWQgKnRlbXA7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAJaW50IG1hc2tfdHlwZTsKQEAgLTEwNjUsNyArMTE5Niw3IEBACiAJaWYgKChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCkgPiBudW1fZW50cmllcykKIAkJZ290byBvdXRfZXJyOwogCi0JLyogVGhlIGk5MTUgY2FuJ3QgY2hlY2sgdGhlIEdUVCBmb3IgZW50cmllcyBzaW5jZSBpdHMgcmVhZCBvbmx5LAorCS8qIFRoZSBpOTE1IGNhbid0IGNoZWNrIHRoZSBHVFQgZm9yIGVudHJpZXMgc2luY2UgaXQncyByZWFkIG9ubHk7CiAJICogZGVwZW5kIG9uIHRoZSBjYWxsZXIgdG8gbWFrZSB0aGUgY29ycmVjdCBvZmZzZXQgZGVjaXNpb25zLgogCSAqLwogCkBAIC0xMDgxLDEyICsxMjEyLDcgQEAKIAlpZiAoIW1lbS0+aXNfZmx1c2hlZCkKIAkJZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7CiAKLQlmb3IgKGkgPSAwLCBqID0gcGdfc3RhcnQ7IGkgPCBtZW0tPnBhZ2VfY291bnQ7IGkrKywgaisrKSB7Ci0JCXdyaXRlbChhZ3BfYnJpZGdlLT5kcml2ZXItPm1hc2tfbWVtb3J5KGFncF9icmlkZ2UsCi0JCQkJCQkgICAgICAgbWVtLT5wYWdlc1tpXSwgbWFza190eXBlKSwgaW50ZWxfcHJpdmF0ZS5ndHQraik7Ci0JfQotCi0JcmVhZGwoaW50ZWxfcHJpdmF0ZS5ndHQrai0xKTsKKwlpbnRlbF9hZ3BfaW5zZXJ0X3NnX2VudHJpZXMobWVtLCBwZ19zdGFydCwgbWFza190eXBlKTsKIAlhZ3BfYnJpZGdlLT5kcml2ZXItPnRsYl9mbHVzaChtZW0pOwogCiAgb3V0OgpAQCAtMTE5OCw5ICsxMzI0LDggQEAKICAqIHRoaXMgY29uZGl0aW9uYWwuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGludGVsX2k5NjVfbWFza19tZW1vcnkoc3RydWN0IGFncF9icmlkZ2VfZGF0YSAqYnJpZGdlLAotCQkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB0eXBlKQorCQkJCQkgICAgZG1hX2FkZHJfdCBhZGRyLCBpbnQgdHlwZSkKIHsKLQlkbWFfYWRkcl90IGFkZHIgPSBwaHlzX3RvX2dhcnQocGFnZV90b19waHlzKHBhZ2UpKTsKIAkvKiBTaGlmdCBoaWdoIGJpdHMgZG93biAqLwogCWFkZHIgfD0gKGFkZHIgPj4gMjgpICYgMHhmMDsKIApAQCAtMjAwNiw2ICsyMTMxLDEyIEBACiAJLmFncF9kZXN0cm95X3BhZ2VzICAgICAgPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2VzLAogCS5hZ3BfdHlwZV90b19tYXNrX3R5cGUgID0gaW50ZWxfaTgzMF90eXBlX3RvX21hc2tfdHlwZSwKIAkuY2hpcHNldF9mbHVzaAkJPSBpbnRlbF9pOTE1X2NoaXBzZXRfZmx1c2gsCisjaWZkZWYgVVNFX1BDSV9ETUFfQVBJCisJLmFncF9tYXBfcGFnZQkJPSBpbnRlbF9hZ3BfbWFwX3BhZ2UsCisJLmFncF91bm1hcF9wYWdlCQk9IGludGVsX2FncF91bm1hcF9wYWdlLAorCS5hZ3BfbWFwX21lbW9yeQkJPSBpbnRlbF9hZ3BfbWFwX21lbW9yeSwKKwkuYWdwX3VubWFwX21lbW9yeQk9IGludGVsX2FncF91bm1hcF9tZW1vcnksCisjZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWdwX2JyaWRnZV9kcml2ZXIgaW50ZWxfaTk2NV9kcml2ZXIgPSB7CkBAIC0yMDM0LDYgKzIxNjUsMTIgQEAKIAkuYWdwX2Rlc3Ryb3lfcGFnZXMgICAgICA9IGFncF9nZW5lcmljX2Rlc3Ryb3lfcGFnZXMsCiAJLmFncF90eXBlX3RvX21hc2tfdHlwZQk9IGludGVsX2k4MzBfdHlwZV90b19tYXNrX3R5cGUsCiAJLmNoaXBzZXRfZmx1c2gJCT0gaW50ZWxfaTkxNV9jaGlwc2V0X2ZsdXNoLAorI2lmZGVmIFVTRV9QQ0lfRE1BX0FQSQorCS5hZ3BfbWFwX3BhZ2UJCT0gaW50ZWxfYWdwX21hcF9wYWdlLAorCS5hZ3BfdW5tYXBfcGFnZQkJPSBpbnRlbF9hZ3BfdW5tYXBfcGFnZSwKKwkuYWdwX21hcF9tZW1vcnkJCT0gaW50ZWxfYWdwX21hcF9tZW1vcnksCisJLmFncF91bm1hcF9tZW1vcnkJPSBpbnRlbF9hZ3BfdW5tYXBfbWVtb3J5LAorI2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFncF9icmlkZ2VfZHJpdmVyIGludGVsXzc1MDVfZHJpdmVyID0gewpAQCAtMjA4OCw2ICsyMjI1LDEyIEBACiAJLmFncF9kZXN0cm95X3BhZ2VzICAgICAgPSBhZ3BfZ2VuZXJpY19kZXN0cm95X3BhZ2VzLAogCS5hZ3BfdHlwZV90b19tYXNrX3R5cGUJPSBpbnRlbF9pODMwX3R5cGVfdG9fbWFza190eXBlLAogCS5jaGlwc2V0X2ZsdXNoCQk9IGludGVsX2k5MTVfY2hpcHNldF9mbHVzaCwKKyNpZmRlZiBVU0VfUENJX0RNQV9BUEkKKwkuYWdwX21hcF9wYWdlCQk9IGludGVsX2FncF9tYXBfcGFnZSwKKwkuYWdwX3VubWFwX3BhZ2UJCT0gaW50ZWxfYWdwX3VubWFwX3BhZ2UsCisJLmFncF9tYXBfbWVtb3J5CQk9IGludGVsX2FncF9tYXBfbWVtb3J5LAorCS5hZ3BfdW5tYXBfbWVtb3J5CT0gaW50ZWxfYWdwX3VubWFwX21lbW9yeSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBmaW5kX2dtY2godTE2IGRldmljZSkKQEAgLTIzMTMsMTUgKzI0NTYsNiBAQAogCXN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpbnQgcmV0X3ZhbDsKIAotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCi0JLyogV2Ugc2hvdWxkIHJlc3RvcmUgb3VyIGdyYXBoaWNzIGRldmljZSdzIGNvbmZpZyBzcGFjZSwKLQkgKiBhcyBob3N0IGJyaWRnZSAoMDA6MDApIHJlc3VtZXMgYmVmb3JlIGdyYXBoaWNzIGRldmljZSAoMDI6MDApLAotCSAqIHRoZW4gb3VyIGFjY2VzcyB0byBpdHMgcGNpIHNwYWNlIGNhbiB3b3JrIHJpZ2h0LgotCSAqLwotCWlmIChpbnRlbF9wcml2YXRlLnBjaWRldikKLQkJcGNpX3Jlc3RvcmVfc3RhdGUoaW50ZWxfcHJpdmF0ZS5wY2lkZXYpOwotCiAJaWYgKGJyaWRnZS0+ZHJpdmVyID09ICZpbnRlbF9nZW5lcmljX2RyaXZlcikKIAkJaW50ZWxfY29uZmlndXJlKCk7CiAJZWxzZSBpZiAoYnJpZGdlLT5kcml2ZXIgPT0gJmludGVsXzg1MF9kcml2ZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCmluZGV4IDI2M2Q3MWQuLjdlMzZkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAl9CiAJZm9yIChpID0gMCwgaiA9IHBnX3N0YXJ0OyBpIDwgbWVtLT5wYWdlX2NvdW50OyBpKyssIGorKykgewogCQl3cml0ZWwoYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLAotCQkJbWVtLT5wYWdlc1tpXSwgbWFza190eXBlKSwKKwkJCSAgICAgICBwYWdlX3RvX3BoeXMobWVtLT5wYWdlc1tpXSksIG1hc2tfdHlwZSksCiAJCQlhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlK252aWRpYV9wcml2YXRlLnBnX29mZnNldCtqKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKaW5kZXggZTA3NzcwMS4uNjBhYjc1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNkZWZpbmUgQUdQOFhfTU9ERQkJKDEgPDwgQUdQOFhfTU9ERV9CSVQpCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nCi1wYXJpc2NfYWdwX21hc2tfbWVtb3J5KHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSwgdW5zaWduZWQgbG9uZyBhZGRyLAorcGFyaXNjX2FncF9tYXNrX21lbW9yeShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsIGRtYV9hZGRyX3QgYWRkciwKIAkJICAgICAgIGludCB0eXBlKTsKIAogc3RhdGljIHN0cnVjdCBfcGFyaXNjX2FncF9pbmZvIHsKQEAgLTE4OSwyMCArMTg5LDEyIEBACiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nCi1wYXJpc2NfYWdwX21hc2tfbWVtb3J5KHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSwgdW5zaWduZWQgbG9uZyBhZGRyLAorcGFyaXNjX2FncF9tYXNrX21lbW9yeShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsIGRtYV9hZGRyX3QgYWRkciwKIAkJICAgICAgIGludCB0eXBlKQogewogCXJldHVybiBTQkFfUERJUl9WQUxJRF9CSVQgfCBhZGRyOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotcGFyaXNjX2FncF9wYWdlX21hc2tfbWVtb3J5KHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkgICAgaW50IHR5cGUpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gcGh5c190b19nYXJ0KHBhZ2VfdG9fcGh5cyhwYWdlKSk7Ci0JcmV0dXJuIFNCQV9QRElSX1ZBTElEX0JJVCB8IGFkZHI7Ci19Ci0KIHN0YXRpYyB2b2lkCiBwYXJpc2NfYWdwX2VuYWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UsIHUzMiBtb2RlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9zZ2ktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3NnaS1hZ3AuYwppbmRleCBkM2VhMmU0Li4wZDQyNmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3NnaS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3NnaS1hZ3AuYwpAQCAtNzAsMTAgKzcwLDkgQEAKICAqIGVudHJ5LgogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZwotc2dpX3Rpb2NhX21hc2tfbWVtb3J5KHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSwKLQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB0eXBlKQorc2dpX3Rpb2NhX21hc2tfbWVtb3J5KHN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZSwgZG1hX2FkZHJfdCBhZGRyLAorCQkgICAgICBpbnQgdHlwZSkKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBwaHlzX3RvX2dhcnQocGFnZV90b19waHlzKHBhZ2UpKTsKIAlyZXR1cm4gdGlvY2FfcGh5c3BhZ2VfdG9fZ2FydChhZGRyKTsKIH0KIApAQCAtMTkwLDcgKzE4OSw4IEBACiAKIAlmb3IgKGkgPSAwLCBqID0gcGdfc3RhcnQ7IGkgPCBtZW0tPnBhZ2VfY291bnQ7IGkrKywgaisrKSB7CiAJCXRhYmxlW2pdID0KLQkJICAgIGJyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShicmlkZ2UsIG1lbS0+cGFnZXNbaV0sCisJCSAgICBicmlkZ2UtPmRyaXZlci0+bWFza19tZW1vcnkoYnJpZGdlLAorCQkJCQkJcGFnZV90b19waHlzKG1lbS0+cGFnZXNbaV0pLAogCQkJCQkJbWVtLT50eXBlKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3Avc3dvcmtzLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKaW5kZXggYjk2NGEyMS4uMTNhY2FhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCS8qIENyZWF0ZSBhIGZha2Ugc2NyYXRjaCBkaXJlY3RvcnkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKSB7CiAJCXdyaXRlbChhZ3BfYnJpZGdlLT5zY3JhdGNoX3BhZ2UsIHNlcnZlcndvcmtzX3ByaXZhdGUuc2NyYXRjaF9kaXIucmVtYXBwZWQraSk7Ci0JCXdyaXRlbCh2aXJ0X3RvX2dhcnQoc2VydmVyd29ya3NfcHJpdmF0ZS5zY3JhdGNoX2Rpci5yZWFsKSB8IDEsIHBhZ2VfZGlyLnJlbWFwcGVkK2kpOworCQl3cml0ZWwodmlydF90b19waHlzKHNlcnZlcndvcmtzX3ByaXZhdGUuc2NyYXRjaF9kaXIucmVhbCkgfCAxLCBwYWdlX2Rpci5yZW1hcHBlZCtpKTsKIAl9CiAKIAlyZXR2YWwgPSBzZXJ2ZXJ3b3Jrc19jcmVhdGVfZ2F0dF9wYWdlcyh2YWx1ZS0+bnVtX2VudHJpZXMgLyAxMDI0KTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCiAJYWdwX2JyaWRnZS0+Z2F0dF90YWJsZV9yZWFsID0gKHUzMiAqKXBhZ2VfZGlyLnJlYWw7CiAJYWdwX2JyaWRnZS0+Z2F0dF90YWJsZSA9ICh1MzIgX19pb21lbSAqKXBhZ2VfZGlyLnJlbWFwcGVkOwotCWFncF9icmlkZ2UtPmdhdHRfYnVzX2FkZHIgPSB2aXJ0X3RvX2dhcnQocGFnZV9kaXIucmVhbCk7CisJYWdwX2JyaWRnZS0+Z2F0dF9idXNfYWRkciA9IHZpcnRfdG9fcGh5cyhwYWdlX2Rpci5yZWFsKTsKIAogCS8qIEdldCB0aGUgYWRkcmVzcyBmb3IgdGhlIGdhcnQgcmVnaW9uLgogCSAqIFRoaXMgaXMgYSBidXMgYWRkcmVzcyBldmVuIG9uIHRoZSBhbHBoYSwgYi9jIGl0cwpAQCAtMTc5LDcgKzE3OSw3IEBACiAKIAkvKiBDYWxjdWxhdGUgdGhlIGFncCBvZmZzZXQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdmFsdWUtPm51bV9lbnRyaWVzIC8gMTAyNDsgaSsrKQotCQl3cml0ZWwodmlydF90b19nYXJ0KHNlcnZlcndvcmtzX3ByaXZhdGUuZ2F0dF9wYWdlc1tpXS0+cmVhbCl8MSwgcGFnZV9kaXIucmVtYXBwZWQraSk7CisJCXdyaXRlbCh2aXJ0X3RvX3BoeXMoc2VydmVyd29ya3NfcHJpdmF0ZS5nYXR0X3BhZ2VzW2ldLT5yZWFsKXwxLCBwYWdlX2Rpci5yZW1hcHBlZCtpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzQ5LDcgKzM0OSw5IEBACiAJZm9yIChpID0gMCwgaiA9IHBnX3N0YXJ0OyBpIDwgbWVtLT5wYWdlX2NvdW50OyBpKyssIGorKykgewogCQlhZGRyID0gKGogKiBQQUdFX1NJWkUpICsgYWdwX2JyaWRnZS0+Z2FydF9idXNfYWRkcjsKIAkJY3VyX2dhdHQgPSBTVlJXUktTX0dFVF9HQVRUKGFkZHIpOwotCQl3cml0ZWwoYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLCBtZW0tPnBhZ2VzW2ldLCBtZW0tPnR5cGUpLCBjdXJfZ2F0dCtHRVRfR0FUVF9PRkYoYWRkcikpOworCQl3cml0ZWwoYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLCAKKwkJCQlwYWdlX3RvX3BoeXMobWVtLT5wYWdlc1tpXSksIG1lbS0+dHlwZSksCisJCSAgICAgICBjdXJfZ2F0dCtHRVRfR0FUVF9PRkYoYWRkcikpOwogCX0KIAlzZXJ2ZXJ3b3Jrc190bGJmbHVzaChtZW0pOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKaW5kZXggZjE5MmMzYi4uMjBlZjFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGFzbS91bmlub3J0aC5oPgogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTI3LDYgKzI4LDggQEAKIHN0YXRpYyBpbnQgdW5pbm9ydGhfcmV2Owogc3RhdGljIGludCBpc191MzsKIAorI2RlZmluZSBERUZBVUxUX0FQRVJUVVJFX1NJWkUgMjU2CisjZGVmaW5lIERFRkFVTFRfQVBFUlRVUkVfU1RSSU5HICIyNTYiCiBzdGF0aWMgY2hhciAqYXBlcnR1cmUgPSBOVUxMOwogCiBzdGF0aWMgaW50IHVuaW5vcnRoX2ZldGNoX3NpemUodm9pZCkKQEAgLTU1LDcgKzU4LDcgQEAKIAogCWlmICghc2l6ZSkgewogCQlmb3IgKGkgPSAwOyBpIDwgYWdwX2JyaWRnZS0+ZHJpdmVyLT5udW1fYXBlcnR1cmVfc2l6ZXM7IGkrKykKLQkJCWlmICh2YWx1ZXNbaV0uc2l6ZSA9PSAzMikKKwkJCWlmICh2YWx1ZXNbaV0uc2l6ZSA9PSBERUZBVUxUX0FQRVJUVVJFX1NJWkUpCiAJCQkJYnJlYWs7CiAJfQogCkBAIC0xMzUsNyArMTM4LDcgQEAKIAlpZiAoaXNfdTMpIHsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChhZ3BfYnJpZGdlLT5kZXYsCiAJCQkJICAgICAgIFVOSV9OX0NGR19HQVJUX0RVTU1ZX1BBR0UsCi0JCQkJICAgICAgIGFncF9icmlkZ2UtPnNjcmF0Y2hfcGFnZV9yZWFsID4+IDEyKTsKKwkJCQkgICAgICAgcGFnZV90b19waHlzKGFncF9icmlkZ2UtPnNjcmF0Y2hfcGFnZV9wYWdlKSA+PiAxMik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNzksOCArMTgyLDYgQEAKIAl9CiAJKHZvaWQpaW5fbGUzMigodm9sYXRpbGUgdTMyKikmYWdwX2JyaWRnZS0+Z2F0dF90YWJsZVtwZ19zdGFydF0pOwogCW1iKCk7Ci0JZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKSZhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlW3BnX3N0YXJ0XSwKLQkJKHVuc2lnbmVkIGxvbmcpJmFncF9icmlkZ2UtPmdhdHRfdGFibGVbcGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnRdKTsKIAogCXVuaW5vcnRoX3RsYmZsdXNoKG1lbSk7CiAJcmV0dXJuIDA7CkBAIC0yMjQsNyArMjI1LDYgQEAKIAkJCQkgICAodW5zaWduZWQgbG9uZylfX3ZhKHBhZ2VfdG9fcGh5cyhtZW0tPnBhZ2VzW2ldKSkrMHgxMDAwKTsKIAl9CiAJbWIoKTsKLQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpZ3AsICh1bnNpZ25lZCBsb25nKSAmZ3BbaV0pOwogCXVuaW5vcnRoX3RsYmZsdXNoKG1lbSk7CiAKIAlyZXR1cm4gMDsKQEAgLTI0Myw3ICsyNDMsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBtZW0tPnBhZ2VfY291bnQ7ICsraSkKIAkJZ3BbaV0gPSAwOwogCW1iKCk7Ci0JZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWdwLCAodW5zaWduZWQgbG9uZykgJmdwW2ldKTsKIAl1bmlub3J0aF90bGJmbHVzaChtZW0pOwogCiAJcmV0dXJuIDA7CkBAIC0zOTYsNiArMzk1LDcgQEAKIAlpbnQgaTsKIAl2b2lkICp0ZW1wOwogCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBwYWdlICoqcGFnZXM7CiAKIAkvKiBXZSBjYW4ndCBoYW5kbGUgMiBsZXZlbCBnYXR0J3MgKi8KIAlpZiAoYnJpZGdlLT5kcml2ZXItPnNpemVfdHlwZSA9PSBMVkwyX0FQRVJfU0laRSkKQEAgLTQyNCwyMSArNDI0LDM5IEBACiAJaWYgKHRhYmxlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJcGFnZXMgPSBrbWFsbG9jKCgxIDw8IHBhZ2Vfb3JkZXIpICogc2l6ZW9mKHN0cnVjdCBwYWdlKiksIEdGUF9LRVJORUwpOworCWlmIChwYWdlcyA9PSBOVUxMKQorCQlnb3RvIGVub21lbTsKKwogCXRhYmxlX2VuZCA9IHRhYmxlICsgKChQQUdFX1NJWkUgKiAoMSA8PCBwYWdlX29yZGVyKSkgLSAxKTsKIAotCWZvciAocGFnZSA9IHZpcnRfdG9fcGFnZSh0YWJsZSk7IHBhZ2UgPD0gdmlydF90b19wYWdlKHRhYmxlX2VuZCk7IHBhZ2UrKykKKwlmb3IgKHBhZ2UgPSB2aXJ0X3RvX3BhZ2UodGFibGUpLCBpID0gMDsgcGFnZSA8PSB2aXJ0X3RvX3BhZ2UodGFibGVfZW5kKTsKKwkgICAgIHBhZ2UrKywgaSsrKSB7CiAJCVNldFBhZ2VSZXNlcnZlZChwYWdlKTsKKwkJcGFnZXNbaV0gPSBwYWdlOworCX0KIAogCWJyaWRnZS0+Z2F0dF90YWJsZV9yZWFsID0gKHUzMiAqKSB0YWJsZTsKLQlicmlkZ2UtPmdhdHRfdGFibGUgPSAodTMyICopdGFibGU7Ci0JYnJpZGdlLT5nYXR0X2J1c19hZGRyID0gdmlydF90b19nYXJ0KHRhYmxlKTsKKwkvKiBOZWVkIHRvIGNsZWFyIG91dCBhbnkgZGlydHkgZGF0YSBzdGlsbCBzaXR0aW5nIGluIGNhY2hlcyAqLworCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyl0YWJsZSwKKwkJCSAgICh1bnNpZ25lZCBsb25nKSh0YWJsZV9lbmQgKyBQQUdFX1NJWkUpKTsKKwlicmlkZ2UtPmdhdHRfdGFibGUgPSB2bWFwKHBhZ2VzLCAoMSA8PCBwYWdlX29yZGVyKSwgMCwgUEFHRV9LRVJORUxfTkNHKTsKKworCWlmIChicmlkZ2UtPmdhdHRfdGFibGUgPT0gTlVMTCkKKwkJZ290byBlbm9tZW07CisKKwlicmlkZ2UtPmdhdHRfYnVzX2FkZHIgPSB2aXJ0X3RvX3BoeXModGFibGUpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyBpKyspCiAJCWJyaWRnZS0+Z2F0dF90YWJsZVtpXSA9IDA7CiAKLQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdGFibGUsICh1bnNpZ25lZCBsb25nKXRhYmxlX2VuZCk7Ci0KIAlyZXR1cm4gMDsKKworZW5vbWVtOgorCWtmcmVlKHBhZ2VzKTsKKwlpZiAodGFibGUpCisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdGFibGUsIHBhZ2Vfb3JkZXIpOworCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgaW50IHVuaW5vcnRoX2ZyZWVfZ2F0dF90YWJsZShzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2UpCkBAIC00NTYsNiArNDc0LDcgQEAKIAkgKiBmcm9tIHRoZSB0YWJsZS4KIAkgKi8KIAorCXZ1bm1hcChicmlkZ2UtPmdhdHRfdGFibGUpOwogCXRhYmxlID0gKGNoYXIgKikgYnJpZGdlLT5nYXR0X3RhYmxlX3JlYWw7CiAJdGFibGVfZW5kID0gdGFibGUgKyAoKFBBR0VfU0laRSAqICgxIDw8IHBhZ2Vfb3JkZXIpKSAtIDEpOwogCkBAIC00NzQsMTMgKzQ5MywxMSBAQAogCiAvKiBTZXR1cCBmdW5jdGlvbiAqLwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFwZXJfc2l6ZV9pbmZvXzMyIHVuaW5vcnRoX3NpemVzWzddID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBlcl9zaXplX2luZm9fMzIgdW5pbm9ydGhfc2l6ZXNbXSA9CiB7Ci0jaWYgMCAvKiBOb3Qgc3VyZSB1bmlub3J0aCBzdXBwb3J0cyB0aGF0IGhpZ2ggYXBlcnR1cmUgc2l6ZXMgKi8KIAl7MjU2LCA2NTUzNiwgNiwgNjR9LAogCXsxMjgsIDMyNzY4LCA1LCAzMn0sCiAJezY0LCAxNjM4NCwgNCwgMTZ9LAotI2VuZGlmCiAJezMyLCA4MTkyLCAzLCA4fSwKIAl7MTYsIDQwOTYsIDIsIDR9LAogCXs4LCAyMDQ4LCAxLCAyfSwKQEAgLTQ5MSw3ICs1MDgsNyBAQAogICogTm90IHN1cmUgdGhhdCB1MyBzdXBwb3J0cyB0aGF0IGhpZ2ggYXBlcnR1cmUgc2l6ZXMgYnV0IGl0CiAgKiB3b3VsZCBzdHJhbmdlIGlmIGl0IGRpZCBub3QgOikKICAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhcGVyX3NpemVfaW5mb18zMiB1M19zaXplc1s4XSA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGFwZXJfc2l6ZV9pbmZvXzMyIHUzX3NpemVzW10gPQogewogCXs1MTIsIDEzMTA3MiwgNywgMTI4fSwKIAl7MjU2LCA2NTUzNiwgNiwgNjR9LApAQCAtNTA3LDcgKzUyNCw3IEBACiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkuYXBlcnR1cmVfc2l6ZXMJCT0gKHZvaWQgKil1bmlub3J0aF9zaXplcywKIAkuc2l6ZV90eXBlCQk9IFUzMl9BUEVSX1NJWkUsCi0JLm51bV9hcGVydHVyZV9zaXplcwk9IDQsCisJLm51bV9hcGVydHVyZV9zaXplcwk9IEFSUkFZX1NJWkUodW5pbm9ydGhfc2l6ZXMpLAogCS5jb25maWd1cmUJCT0gdW5pbm9ydGhfY29uZmlndXJlLAogCS5mZXRjaF9zaXplCQk9IHVuaW5vcnRoX2ZldGNoX3NpemUsCiAJLmNsZWFudXAJCT0gdW5pbm9ydGhfY2xlYW51cCwKQEAgLTUzNCw3ICs1NTEsNyBAQAogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmFwZXJ0dXJlX3NpemVzCQk9ICh2b2lkICopdTNfc2l6ZXMsCiAJLnNpemVfdHlwZQkJPSBVMzJfQVBFUl9TSVpFLAotCS5udW1fYXBlcnR1cmVfc2l6ZXMJPSA4LAorCS5udW1fYXBlcnR1cmVfc2l6ZXMJPSBBUlJBWV9TSVpFKHUzX3NpemVzKSwKIAkuY29uZmlndXJlCQk9IHVuaW5vcnRoX2NvbmZpZ3VyZSwKIAkuZmV0Y2hfc2l6ZQkJPSB1bmlub3J0aF9mZXRjaF9zaXplLAogCS5jbGVhbnVwCQk9IHVuaW5vcnRoX2NsZWFudXAsCkBAIC03MTcsNyArNzM0LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoYXBlcnR1cmUsCiAJCSAiQXBlcnR1cmUgc2l6ZSwgbXVzdCBiZSBwb3dlciBvZiB0d28gYmV0d2VlbiA0TUIgYW5kIGFuXG4iCiAJCSAiXHRcdHVwcGVyIGxpbWl0IHNwZWNpZmljIHRvIHRoZSBVbmlOb3J0aCByZXZpc2lvbi5cbiIKLQkJICJcdFx0RGVmYXVsdDogMzJNIik7CisJCSAiXHRcdERlZmF1bHQ6ICIgREVGQVVMVF9BUEVSVFVSRV9TVFJJTkcgIk0iKTsKIAogTU9EVUxFX0FVVEhPUigiQmVuIEhlcnJlbnNjaG1pZHQgJiBQYXVsIE1hY2tlcnJhcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2dlbmVyaWNfbnZyYW0uYyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX252cmFtLmMKaW5kZXggYTAwODY5Yy4uZWYzMTczOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2dlbmVyaWNfbnZyYW0uYworKysgYi9kcml2ZXJzL2NoYXIvZ2VuZXJpY19udnJhbS5jCkBAIC0yLDcgKzIsNyBAQAogICogR2VuZXJpYyAvZGV2L252cmFtIGRyaXZlciBmb3IgYXJjaGl0ZWN0dXJlcyBwcm92aWRpbmcgc29tZQogICogImdlbmVyaWMiIGhvb2tzLCB0aGF0IGlzIDoKICAqCi0gKiBudnJhbV9yZWFkX2J5dGUsIG52cmFtX3dyaXRlX2J5dGUsIG52cmFtX3N5bmMKKyAqIG52cmFtX3JlYWRfYnl0ZSwgbnZyYW1fd3JpdGVfYnl0ZSwgbnZyYW1fc3luYywgbnZyYW1fZ2V0X3NpemUKICAqCiAgKiBOb3RlIHRoYXQgYW4gYWRkaXRpb25hbCBob29rIGlzIHN1cHBvcnRlZCBmb3IgUG93ZXJNYWMgb25seQogICogZm9yIGdldHRpbmcgdGhlIG52cmFtICJwYXJ0aXRpb24iIGluZm9ybWF0aW9ucwpAQCAtMjgsNiArMjgsOCBAQAogCiAjZGVmaW5lIE5WUkFNX1NJWkUJODE5MgogCitzdGF0aWMgc3NpemVfdCBudnJhbV9sZW47CisKIHN0YXRpYyBsb2ZmX3QgbnZyYW1fbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQogewogCWxvY2tfa2VybmVsKCk7CkBAIC0zNiw3ICszOCw3IEBACiAJCW9mZnNldCArPSBmaWxlLT5mX3BvczsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQlvZmZzZXQgKz0gTlZSQU1fU0laRTsKKwkJb2Zmc2V0ICs9IG52cmFtX2xlbjsKIAkJYnJlYWs7CiAJfQogCWlmIChvZmZzZXQgPCAwKSB7CkBAIC01Niw5ICs1OCw5IEBACiAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoKnBwb3MgPj0gTlZSQU1fU0laRSkKKwlpZiAoKnBwb3MgPj0gbnZyYW1fbGVuKQogCQlyZXR1cm4gMDsKLQlmb3IgKGkgPSAqcHBvczsgY291bnQgPiAwICYmIGkgPCBOVlJBTV9TSVpFOyArK2ksICsrcCwgLS1jb3VudCkKKwlmb3IgKGkgPSAqcHBvczsgY291bnQgPiAwICYmIGkgPCBudnJhbV9sZW47ICsraSwgKytwLCAtLWNvdW50KQogCQlpZiAoX19wdXRfdXNlcihudnJhbV9yZWFkX2J5dGUoaSksIHApKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJKnBwb3MgPSBpOwpAQCAtNzQsOSArNzYsOSBAQAogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZiwgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoKnBwb3MgPj0gTlZSQU1fU0laRSkKKwlpZiAoKnBwb3MgPj0gbnZyYW1fbGVuKQogCQlyZXR1cm4gMDsKLQlmb3IgKGkgPSAqcHBvczsgY291bnQgPiAwICYmIGkgPCBOVlJBTV9TSVpFOyArK2ksICsrcCwgLS1jb3VudCkgeworCWZvciAoaSA9ICpwcG9zOyBjb3VudCA+IDAgJiYgaSA8IG52cmFtX2xlbjsgKytpLCArK3AsIC0tY291bnQpIHsKIAkJaWYgKF9fZ2V0X3VzZXIoYywgcCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJbnZyYW1fd3JpdGVfYnl0ZShjLCBpKTsKQEAgLTEzMyw5ICsxMzUsMjAgQEAKIAogaW50IF9faW5pdCBudnJhbV9pbml0KHZvaWQpCiB7CisJaW50IHJldCA9IDA7CisKIAlwcmludGsoS0VSTl9JTkZPICJHZW5lcmljIG5vbi12b2xhdGlsZSBtZW1vcnkgZHJpdmVyIHYlc1xuIiwKIAkJTlZSQU1fVkVSU0lPTik7Ci0JcmV0dXJuIG1pc2NfcmVnaXN0ZXIoJm52cmFtX2Rldik7CisJcmV0ID0gbWlzY19yZWdpc3RlcigmbnZyYW1fZGV2KTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gb3V0OworCisJbnZyYW1fbGVuID0gbnZyYW1fZ2V0X3NpemUoKTsKKwlpZiAobnZyYW1fbGVuIDwgMCkKKwkJbnZyYW1fbGVuID0gTlZSQU1fU0laRTsKKworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgX19leGl0IG52cmFtX2NsZWFudXAodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKaW5kZXggZDk3Nzc5ZS4uMjVjZTE1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKQEAgLTUxNiw4ICs1MTYsNiBAQAogCXN0cnVjdCB3aW5zaXplIHdzOwogCiAJaHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGh2Y19zdHJ1Y3QsIHR0eV9yZXNpemUpOwotCWlmICghaHApCi0JCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZocC0+bG9jaywgaHZjX2ZsYWdzKTsKIAlpZiAoIWhwLT50dHkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jIGIvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKaW5kZXggODYxMDVlZi4uMGVjYWM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKQEAgLTEwMDYsNyArMTAwNiw3IEBACiAJcHJpdi0+ZGV2LT5yZWxlYXNlID0gKHZvaWQgKCopKHN0cnVjdCBkZXZpY2UgKikpIGtmcmVlOwogCXJjID0gZGV2aWNlX3JlZ2lzdGVyKHByaXYtPmRldik7CiAJaWYgKHJjKSB7Ci0JCWtmcmVlKHByaXYtPmRldik7CisJCXB1dF9kZXZpY2UocHJpdi0+ZGV2KTsKIAkJZ290byBvdXRfZXJyb3JfZGV2OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y192aW8uYyBiL2RyaXZlcnMvY2hhci9odmNfdmlvLmMKaW5kZXggYzcyYjk5NC4uMTBiZTM0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y192aW8uYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgaW50IGh2Y192aW9faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaHZjX3Zpb19pbml0KHZvaWQpCiB7CiAJaW50IHJjOwogCkBAIC0xMzQsNyArMTM0LDcgQEAKIH0KIG1vZHVsZV9pbml0KGh2Y192aW9faW5pdCk7IC8qIGFmdGVyIGRyaXZlcnMvY2hhci9odmNfY29uc29sZS5jICovCiAKLXN0YXRpYyB2b2lkIGh2Y192aW9fZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGh2Y192aW9fZXhpdCh2b2lkKQogewogCXZpb191bnJlZ2lzdGVyX2RyaXZlcigmaHZjX3Zpb19kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2c2kuYyBiL2RyaXZlcnMvY2hhci9odnNpLmMKaW5kZXggMjk4OTA1Ni4uNzkzYjIzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2c2kuYworKysgYi9kcml2ZXJzL2NoYXIvaHZzaS5jCkBAIC0xMjMwLDExICsxMjMwLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGh2c2lfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY29uc29sZSwgY2hhciAqb3B0aW9ucykKIHsKLQlzdHJ1Y3QgaHZzaV9zdHJ1Y3QgKmhwID0gJmh2c2lfcG9ydHNbY29uc29sZS0+aW5kZXhdOworCXN0cnVjdCBodnNpX3N0cnVjdCAqaHA7CiAJaW50IHJldDsKIAogCWlmIChjb25zb2xlLT5pbmRleCA8IDAgfHwgY29uc29sZS0+aW5kZXggPj0gaHZzaV9jb3VudCkKIAkJcmV0dXJuIC0xOworCWhwID0gJmh2c2lfcG9ydHNbY29uc29sZS0+aW5kZXhdOwogCiAJLyogZ2l2ZSB0aGUgRlNQIGEgY2hhbmNlIHRvIGNoYW5nZSB0aGUgYmF1ZCByYXRlIHdoZW4gd2UgcmUtb3BlbiAqLwogCWh2c2lfY2xvc2VfcHJvdG9jb2woaHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9hbWQtcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2FtZC1ybmcuYwppbmRleCBjZDBiYTUxLi4wZDhjNTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2FtZC1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2FtZC1ybmcuYwpAQCAtNDQsOCArNDQsOCBAQAogICogd2FudCB0byByZWdpc3RlciBhbm90aGVyIGRyaXZlciBvbiB0aGUgc2FtZSBQQ0kgaWQuCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfdGJsW10gPSB7Ci0JeyAweDEwMjIsIDB4NzQ0MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwKLQl7IDB4MTAyMiwgMHg3NDZiLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCAweDc0NDMpLCAwLCB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCAweDc0NmIpLCAwLCB9LAogCXsgMCwgfSwJLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2dlb2RlLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9nZW9kZS1ybmcuYwppbmRleCA2NGQ1MTNmLi40YzRkNGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2dlb2RlLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vZ2VvZGUtcm5nLmMKQEAgLTQ2LDggKzQ2LDcgQEAKICAqIHdhbnQgdG8gcmVnaXN0ZXIgYW5vdGhlciBkcml2ZXIgb24gdGhlIHNhbWUgUENJIGlkLgogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0xYX0FFUywKLQkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0xYX0FFUyksIDAsIH0sCiAJeyAwLCB9LAkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tZW0uYyBiL2RyaXZlcnMvY2hhci9tZW0uYwppbmRleCBhZmE4ODEzLi42NDUyMzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbWVtLmMKKysrIGIvZHJpdmVycy9jaGFyL21lbS5jCkBAIC04MjIsNiArODIyLDcgQEAKICAqIC0gcGVybWl0cyBwcml2YXRlIG1hcHBpbmdzLCAiY29waWVzIiBhcmUgdGFrZW4gb2YgdGhlIHNvdXJjZSBvZiB6ZXJvcwogICovCiBzdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gemVyb19iZGkgPSB7CisJLm5hbWUJCT0gImNoYXIvbWVtIiwKIAkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9NQVBfQ09QWSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwppbmRleCA3N2IzNjQ4Li5jYWY2ZTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCkBAIC00MDA1LDEwICs0MDA1LDkgQEAKICAqCiAgKiBza2IgIHNvY2tldCBidWZmZXIgY29udGFpbmluZyBIRExDIGZyYW1lCiAgKiBkZXYgIHBvaW50ZXIgdG8gbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBlcnJvciBjb2RlCiAgKi8KLXN0YXRpYyBpbnQgaGRsY2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaGRsY2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlNR1NMUENfSU5GTyAqaW5mbyA9IGRldl90b19wb3J0KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQwNDMsNyArNDA0Miw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggOGM3NDQ0OC4uZDhhOTI1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtMjQwLDYgKzI0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvZmlwcy5oPgogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKICMgaW5jbHVkZSA8bGludXgvaXJxLmg+CkBAIC00MTMsNiArNDE0LDcgQEAKIAl1bnNpZ25lZCBhZGRfcHRyOwogCWludCBlbnRyb3B5X2NvdW50OwogCWludCBpbnB1dF9yb3RhdGU7CisJX191OCAqbGFzdF9kYXRhOwogfTsKIAogc3RhdGljIF9fdTMyIGlucHV0X3Bvb2xfZGF0YVtJTlBVVF9QT09MX1dPUkRTXTsKQEAgLTg1MiwxMiArODU0LDIxIEBACiB7CiAJc3NpemVfdCByZXQgPSAwLCBpOwogCV9fdTggdG1wW0VYVFJBQ1RfU0laRV07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXhmZXJfc2Vjb25kYXJ5X3Bvb2wociwgbmJ5dGVzKTsKIAluYnl0ZXMgPSBhY2NvdW50KHIsIG5ieXRlcywgbWluLCByZXNlcnZlZCk7CiAKIAl3aGlsZSAobmJ5dGVzKSB7CiAJCWV4dHJhY3RfYnVmKHIsIHRtcCk7CisKKwkJaWYgKHItPmxhc3RfZGF0YSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnItPmxvY2ssIGZsYWdzKTsKKwkJCWlmICghbWVtY21wKHRtcCwgci0+bGFzdF9kYXRhLCBFWFRSQUNUX1NJWkUpKQorCQkJCXBhbmljKCJIYXJkd2FyZSBSTkcgZHVwbGljYXRlZCBvdXRwdXQhXG4iKTsKKwkJCW1lbWNweShyLT5sYXN0X2RhdGEsIHRtcCwgRVhUUkFDVF9TSVpFKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnItPmxvY2ssIGZsYWdzKTsKKwkJfQogCQlpID0gbWluX3QoaW50LCBuYnl0ZXMsIEVYVFJBQ1RfU0laRSk7CiAJCW1lbWNweShidWYsIHRtcCwgaSk7CiAJCW5ieXRlcyAtPSBpOwpAQCAtOTQwLDYgKzk1MSw5IEBACiAJbm93ID0ga3RpbWVfZ2V0X3JlYWwoKTsKIAltaXhfcG9vbF9ieXRlcyhyLCAmbm93LCBzaXplb2Yobm93KSk7CiAJbWl4X3Bvb2xfYnl0ZXMociwgdXRzbmFtZSgpLCBzaXplb2YoKih1dHNuYW1lKCkpKSk7CisJLyogRW5hYmxlIGNvbnRpbnVvdXMgdGVzdCBpbiBmaXBzIG1vZGUgKi8KKwlpZiAoZmlwc19lbmFibGVkKQorCQlyLT5sYXN0X2RhdGEgPSBrbWFsbG9jKEVYVFJBQ1RfU0laRSwgR0ZQX0tFUk5FTCk7CiB9CiAKIHN0YXRpYyBpbnQgcmFuZF9pbml0aWFsaXplKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmF3LmMgYi9kcml2ZXJzL2NoYXIvcmF3LmMKaW5kZXggMDVmOWQxOC4uNDAyNjhkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jhdy5jCisrKyBiL2RyaXZlcnMvY2hhci9yYXcuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJLnJlYWQJPQlkb19zeW5jX3JlYWQsCiAJLmFpb19yZWFkID0gCWdlbmVyaWNfZmlsZV9haW9fcmVhZCwKIAkud3JpdGUJPQlkb19zeW5jX3dyaXRlLAotCS5haW9fd3JpdGUgPSAJZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2ssCisJLmFpb193cml0ZSA9CWJsa2Rldl9haW9fd3JpdGUsCiAJLm9wZW4JPQlyYXdfb3BlbiwKIAkucmVsZWFzZT0JcmF3X3JlbGVhc2UsCiAJLmlvY3RsCT0JcmF3X2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jIGIvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jCmluZGV4IDUxZTdhNDYuLjU5NDJhOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYworKysgYi9kcml2ZXJzL2NoYXIvc2VyaWFsMTY3LmMKQEAgLTE3MSw3ICsxNzEsNiBAQAogc3RhdGljIHZvaWQgY3lfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKik7CiBzdGF0aWMgdm9pZCBjeV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICopOwogc3RhdGljIHZvaWQgY29uZmlnX3NldHVwKHN0cnVjdCBjeWNsYWRlc19wb3J0ICopOwotZXh0ZXJuIHZvaWQgY29uc29sZV9wcmludChjb25zdCBjaGFyICopOwogI2lmZGVmIENZQ0xPTV9TSE9XX1NUQVRVUwogc3RhdGljIHZvaWQgc2hvd19zdGF0dXMoaW50KTsKICNlbmRpZgpAQCAtMjQ1LDcgKzI0NCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY29uc29sZV9wcmludChkYXRhKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiJXMiLCBkYXRhKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTI1NSw3ICsyNTQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXNjcm5bMF0gPSBkYXRhOwotCWNvbnNvbGVfcHJpbnQoc2Nybik7CisJcHJpbnRrKEtFUk5fRU1FUkcgIiVjIiwgc2Nybik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQkJCQkvKiBDUCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCmluZGV4IDgxMzU1MmYuLjQ4NDZiNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCkBAIC03Njk3LDEwICs3Njk3LDkgQEAKICAqCiAgKiBza2IgIHNvY2tldCBidWZmZXIgY29udGFpbmluZyBIRExDIGZyYW1lCiAgKiBkZXYgIHBvaW50ZXIgdG8gbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBlcnJvciBjb2RlCiAgKi8KLXN0YXRpYyBpbnQgaGRsY2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaGRsY2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWdzbF9zdHJ1Y3QgKmluZm8gPSBkZXZfdG9fcG9ydChkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NzMxLDcgKzc3MzAsNyBAQAogCSAJdXNjX3N0YXJ0X3RyYW5zbWl0dGVyKGluZm8pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmlycV9zcGlubG9jayxmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKaW5kZXggOTFmMjBhOS4uODY3OGYwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKQEAgLTE0OTcsMTAgKzE0OTcsOSBAQAogICoKICAqIHNrYiAgc29ja2V0IGJ1ZmZlciBjb250YWluaW5nIEhETEMgZnJhbWUKICAqIGRldiAgcG9pbnRlciB0byBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKLSAqCi0gKiByZXR1cm5zIDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIGVycm9yIGNvZGUKICAqLwotc3RhdGljIGludCBoZGxjZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBoZGxjZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzbGd0X2luZm8gKmluZm8gPSBkZXZfdG9fcG9ydChkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNTI5LDcgKzE1MjgsNyBAQAogCXVwZGF0ZV90eF90aW1lcihpbmZvKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKaW5kZXggOGQ0YTJhOC4uMmIxOGFkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCkBAIC0xNjA4LDEwICsxNjA4LDkgQEAKICAqCiAgKiBza2IgIHNvY2tldCBidWZmZXIgY29udGFpbmluZyBIRExDIGZyYW1lCiAgKiBkZXYgIHBvaW50ZXIgdG8gbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBlcnJvciBjb2RlCiAgKi8KLXN0YXRpYyBpbnQgaGRsY2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaGRsY2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlTTE1QX0lORk8gKmluZm8gPSBkZXZfdG9fcG9ydChkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNjQyLDcgKzE2NDEsNyBAQAogCSAJdHhfc3RhcnQoaW5mbyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jayxmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeXNycS5jIGIvZHJpdmVycy9jaGFyL3N5c3JxLmMKaW5kZXggNWQ3YTAyZi4uNTBlZWNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5c3JxLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5c3JxLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgogI2luY2x1ZGUgPGxpbnV4L2tiZF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yMjIsMTIgKzIyMywyMCBAQAogCiBzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfc2hvd2FsbGNwdXMoaW50IGtleSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOwotCWlmIChyZWdzKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkNQVSVkOlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQkJc2hvd19yZWdzKHJlZ3MpOworCS8qCisJICogRmFsbCBiYWNrIHRvIHRoZSB3b3JrcXVldWUgYmFzZWQgcHJpbnRpbmcgaWYgdGhlCisJICogYmFja3RyYWNlIHByaW50aW5nIGRpZCBub3Qgc3VjY2VlZCBvciB0aGUKKwkgKiBhcmNoaXRlY3R1cmUgaGFzIG5vIHN1cHBvcnQgZm9yIGl0OgorCSAqLworCWlmICghdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSgpKSB7CisJCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZ2V0X2lycV9yZWdzKCk7CisKKwkJaWYgKHJlZ3MpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkNQVSVkOlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJCXNob3dfcmVncyhyZWdzKTsKKwkJfQorCQlzY2hlZHVsZV93b3JrKCZzeXNycV9zaG93YWxsY3B1cyk7CiAJfQotCXNjaGVkdWxlX3dvcmsoJnN5c3JxX3Nob3dhbGxjcHVzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfc2hvd2FsbGNwdXNfb3AgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCmluZGV4IGFlYzE5MzEuLjBiNzNlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCkBAIC00NTAsNiArNDUwLDEyIEBACiAJCWdvdG8gb3V0X2VycjsKIAl9CiAKKwkvKiBEZWZhdWx0IHRpbWVvdXRzICovCisJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYSA9IG1zZWNzX3RvX2ppZmZpZXMoVElTX1NIT1JUX1RJTUVPVVQpOworCWNoaXAtPnZlbmRvci50aW1lb3V0X2IgPSBtc2Vjc190b19qaWZmaWVzKFRJU19MT05HX1RJTUVPVVQpOworCWNoaXAtPnZlbmRvci50aW1lb3V0X2MgPSBtc2Vjc190b19qaWZmaWVzKFRJU19TSE9SVF9USU1FT1VUKTsKKwljaGlwLT52ZW5kb3IudGltZW91dF9kID0gbXNlY3NfdG9famlmZmllcyhUSVNfU0hPUlRfVElNRU9VVCk7CisKIAlpZiAocmVxdWVzdF9sb2NhbGl0eShjaGlwLCAwKSAhPSAwKSB7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byBvdXRfZXJyOwpAQCAtNDU3LDEyICs0NjMsNiBAQAogCiAJdmVuZG9yID0gaW9yZWFkMzIoY2hpcC0+dmVuZG9yLmlvYmFzZSArIFRQTV9ESURfVklEKDApKTsKIAotCS8qIERlZmF1bHQgdGltZW91dHMgKi8KLQljaGlwLT52ZW5kb3IudGltZW91dF9hID0gbXNlY3NfdG9famlmZmllcyhUSVNfU0hPUlRfVElNRU9VVCk7Ci0JY2hpcC0+dmVuZG9yLnRpbWVvdXRfYiA9IG1zZWNzX3RvX2ppZmZpZXMoVElTX0xPTkdfVElNRU9VVCk7Ci0JY2hpcC0+dmVuZG9yLnRpbWVvdXRfYyA9IG1zZWNzX3RvX2ppZmZpZXMoVElTX1NIT1JUX1RJTUVPVVQpOwotCWNoaXAtPnZlbmRvci50aW1lb3V0X2QgPSBtc2Vjc190b19qaWZmaWVzKFRJU19TSE9SVF9USU1FT1VUKTsKLQogCWRldl9pbmZvKGRldiwKIAkJICIxLjIgVFBNIChkZXZpY2UtaWQgMHglWCwgcmV2LWlkICVkKVxuIiwKIAkJIHZlbmRvciA+PiAxNiwgaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsgVFBNX1JJRCgwKSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb25uZWN0b3IvY25fcHJvYy5jIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcHJvYy5jCmluZGV4IGM1YWZjOTguLjg1ZTVkYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY29ubmVjdG9yL2NuX3Byb2MuYworKysgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9wcm9jLmMKQEAgLTIwMiw5ICsyMDIsOCBAQAogICogY25fcHJvY19tY2FzdF9jdGwKICAqIEBkYXRhOiBtZXNzYWdlIHNlbnQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBjb25uZWN0b3IKICAqLwotc3RhdGljIHZvaWQgY25fcHJvY19tY2FzdF9jdGwodm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGNuX3Byb2NfbWNhc3RfY3RsKHN0cnVjdCBjbl9tc2cgKm1zZykKIHsKLQlzdHJ1Y3QgY25fbXNnICptc2cgPSBkYXRhOwogCWVudW0gcHJvY19jbl9tY2FzdF9vcCAqbWNfb3AgPSBOVUxMOwogCWludCBlcnIgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYwppbmRleCA0MDhjMmFmLi40YTFkZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMKQEAgLTg3LDcgKzg3LDkgQEAKIAlrZnJlZShkLT5mcmVlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY25fcXVldWVfYWxsb2NfY2FsbGJhY2tfZW50cnkoY2hhciAqbmFtZSwgc3RydWN0IGNiX2lkICppZCwgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopKQorc3RhdGljIHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqCitjbl9xdWV1ZV9hbGxvY19jYWxsYmFja19lbnRyeShjaGFyICpuYW1lLCBzdHJ1Y3QgY2JfaWQgKmlkLAorCQkJICAgICAgdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgY25fbXNnICopKQogewogCXN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxOwogCkBAIC0xMjAsNyArMTIyLDggQEAKIAlyZXR1cm4gKChpMS0+aWR4ID09IGkyLT5pZHgpICYmIChpMS0+dmFsID09IGkyLT52YWwpKTsKIH0KIAotaW50IGNuX3F1ZXVlX2FkZF9jYWxsYmFjayhzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYsIGNoYXIgKm5hbWUsIHN0cnVjdCBjYl9pZCAqaWQsIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSkKK2ludCBjbl9xdWV1ZV9hZGRfY2FsbGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBjaGFyICpuYW1lLCBzdHJ1Y3QgY2JfaWQgKmlkLAorCQkJICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBjbl9tc2cgKikpCiB7CiAJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEsICpfX2NicTsKIAlpbnQgZm91bmQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwppbmRleCAwOGIyNTAwLi43NGY1MmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwpAQCAtMjY5LDcgKzI2OSw4IEBACiAgKgogICogTWF5IHNsZWVwLgogICovCi1pbnQgY25fYWRkX2NhbGxiYWNrKHN0cnVjdCBjYl9pZCAqaWQsIGNoYXIgKm5hbWUsIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSkKK2ludCBjbl9hZGRfY2FsbGJhY2soc3RydWN0IGNiX2lkICppZCwgY2hhciAqbmFtZSwKKwkJICAgIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGNuX21zZyAqKSkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBjbl9kZXYgKmRldiA9ICZjZGV2OwpAQCAtMzUxLDkgKzM1Miw4IEBACiAgKgogICogVXNlZCBmb3Igbm90aWZpY2F0aW9uIG9mIGEgcmVxdWVzdCdzIHByb2Nlc3NpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIGNuX2NhbGxiYWNrKHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBjbl9jYWxsYmFjayhzdHJ1Y3QgY25fbXNnICptc2cpCiB7Ci0Jc3RydWN0IGNuX21zZyAqbXNnID0gZGF0YTsKIAlzdHJ1Y3QgY25fY3RsX21zZyAqY3RsOwogCXN0cnVjdCBjbl9jdGxfZW50cnkgKmVudDsKIAl1MzIgc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKaW5kZXggYmRlYTdlMi4uYmMzM2RkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAkgKi8KIAlzdHJ1Y3QgbXV0ZXggdGltZXJfbXV0ZXg7CiB9Owotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfZGJzX2luZm9fcywgY3B1X2Ric19pbmZvKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2Ric19pbmZvX3MsIGNzX2NwdV9kYnNfaW5mbyk7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGJzX2VuYWJsZTsJLyogbnVtYmVyIG9mIENQVXMgdXNpbmcgdGhpcyBwb2xpY3kgKi8KIApAQCAtMTM3LDcgKzEzNyw3IEBACiAJCSAgICAgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyAqZnJlcSA9IGRhdGE7Ci0Jc3RydWN0IGNwdV9kYnNfaW5mb19zICp0aGlzX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLAorCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqdGhpc19kYnNfaW5mbyA9ICZwZXJfY3B1KGNzX2NwdV9kYnNfaW5mbywKIAkJCQkJCQlmcmVxLT5jcHUpOwogCiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CkBAIC0yOTcsNyArMjk3LDcgQEAKIAkvKiB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIHByZXZfY3B1X2lkbGUgKi8KIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopIHsKIAkJc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbzsKLQkJZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGopOworCQlkYnNfaW5mbyA9ICZwZXJfY3B1KGNzX2NwdV9kYnNfaW5mbywgaik7CiAJCWRic19pbmZvLT5wcmV2X2NwdV9pZGxlID0gZ2V0X2NwdV9pZGxlX3RpbWUoaiwKIAkJCQkJCSZkYnNfaW5mby0+cHJldl9jcHVfd2FsbCk7CiAJCWlmIChkYnNfdHVuZXJzX2lucy5pZ25vcmVfbmljZSkKQEAgLTM4Nyw3ICszODcsNyBAQAogCQljcHV0aW1lNjRfdCBjdXJfd2FsbF90aW1lLCBjdXJfaWRsZV90aW1lOwogCQl1bnNpZ25lZCBpbnQgaWRsZV90aW1lLCB3YWxsX3RpbWU7CiAKLQkJal9kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgaik7CisJCWpfZGJzX2luZm8gPSAmcGVyX2NwdShjc19jcHVfZGJzX2luZm8sIGopOwogCiAJCWN1cl9pZGxlX3RpbWUgPSBnZXRfY3B1X2lkbGVfdGltZShqLCAmY3VyX3dhbGxfdGltZSk7CiAKQEAgLTUyMSw3ICs1MjEsNyBAQAogCXVuc2lnbmVkIGludCBqOwogCWludCByYzsKIAotCXRoaXNfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGNwdSk7CisJdGhpc19kYnNfaW5mbyA9ICZwZXJfY3B1KGNzX2NwdV9kYnNfaW5mbywgY3B1KTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIENQVUZSRVFfR09WX1NUQVJUOgpAQCAtNTM4LDcgKzUzOCw3IEBACiAKIAkJZm9yX2VhY2hfY3B1KGosIHBvbGljeS0+Y3B1cykgewogCQkJc3RydWN0IGNwdV9kYnNfaW5mb19zICpqX2Ric19pbmZvOwotCQkJal9kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgaik7CisJCQlqX2Ric19pbmZvID0gJnBlcl9jcHUoY3NfY3B1X2Ric19pbmZvLCBqKTsKIAkJCWpfZGJzX2luZm8tPmN1cl9wb2xpY3kgPSBwb2xpY3k7CiAKIAkJCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGUgPSBnZXRfY3B1X2lkbGVfdGltZShqLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKaW5kZXggZDZiYTE0Mi4uZDdhNTI4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCkBAIC03OCw3ICs3OCw3IEBACiAJICovCiAJc3RydWN0IG11dGV4IHRpbWVyX211dGV4OwogfTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2Ric19pbmZvX3MsIGNwdV9kYnNfaW5mbyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9kYnNfaW5mb19zLCBvZF9jcHVfZGJzX2luZm8pOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRic19lbmFibGU7CS8qIG51bWJlciBvZiBDUFVzIHVzaW5nIHRoaXMgcG9saWN5ICovCiAKQEAgLTE0OSw3ICsxNDksOCBAQAogCXVuc2lnbmVkIGludCBmcmVxX2hpLCBmcmVxX2xvOwogCXVuc2lnbmVkIGludCBpbmRleCA9IDA7CiAJdW5zaWduZWQgaW50IGppZmZpZXNfdG90YWwsIGppZmZpZXNfaGksIGppZmZpZXNfbG87Ci0Jc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgcG9saWN5LT5jcHUpOworCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm8gPSAmcGVyX2NwdShvZF9jcHVfZGJzX2luZm8sCisJCQkJCQkgICBwb2xpY3ktPmNwdSk7CiAKIAlpZiAoIWRic19pbmZvLT5mcmVxX3RhYmxlKSB7CiAJCWRic19pbmZvLT5mcmVxX2xvID0gMDsKQEAgLTE5Miw3ICsxOTMsNyBAQAogCiBzdGF0aWMgdm9pZCBvbmRlbWFuZF9wb3dlcnNhdmVfYmlhc19pbml0X2NwdShpbnQgY3B1KQogewotCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGNwdSk7CisJc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbyA9ICZwZXJfY3B1KG9kX2NwdV9kYnNfaW5mbywgY3B1KTsKIAlkYnNfaW5mby0+ZnJlcV90YWJsZSA9IGNwdWZyZXFfZnJlcXVlbmN5X2dldF90YWJsZShjcHUpOwogCWRic19pbmZvLT5mcmVxX2xvID0gMDsKIH0KQEAgLTI5Nyw3ICsyOTgsNyBAQAogCS8qIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgcHJldl9jcHVfaWRsZSAqLwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikgewogCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZvOwotCQlkYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgaik7CisJCWRic19pbmZvID0gJnBlcl9jcHUob2RfY3B1X2Ric19pbmZvLCBqKTsKIAkJZGJzX2luZm8tPnByZXZfY3B1X2lkbGUgPSBnZXRfY3B1X2lkbGVfdGltZShqLAogCQkJCQkJJmRic19pbmZvLT5wcmV2X2NwdV93YWxsKTsKIAkJaWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKQpAQCAtMzg4LDcgKzM4OSw3IEBACiAJCXVuc2lnbmVkIGludCBsb2FkLCBsb2FkX2ZyZXE7CiAJCWludCBmcmVxX2F2ZzsKIAotCQlqX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBqKTsKKwkJal9kYnNfaW5mbyA9ICZwZXJfY3B1KG9kX2NwdV9kYnNfaW5mbywgaik7CiAKIAkJY3VyX2lkbGVfdGltZSA9IGdldF9jcHVfaWRsZV90aW1lKGosICZjdXJfd2FsbF90aW1lKTsKIApAQCAtNTM1LDcgKzUzNiw3IEBACiAJdW5zaWduZWQgaW50IGo7CiAJaW50IHJjOwogCi0JdGhpc19kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgY3B1KTsKKwl0aGlzX2Ric19pbmZvID0gJnBlcl9jcHUob2RfY3B1X2Ric19pbmZvLCBjcHUpOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQ1BVRlJFUV9HT1ZfU1RBUlQ6CkBAIC01NTMsNyArNTU0LDcgQEAKIAkJZGJzX2VuYWJsZSsrOwogCQlmb3JfZWFjaF9jcHUoaiwgcG9saWN5LT5jcHVzKSB7CiAJCQlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmpfZGJzX2luZm87Ci0JCQlqX2Ric19pbmZvID0gJnBlcl9jcHUoY3B1X2Ric19pbmZvLCBqKTsKKwkJCWpfZGJzX2luZm8gPSAmcGVyX2NwdShvZF9jcHVfZGJzX2luZm8sIGopOwogCQkJal9kYnNfaW5mby0+Y3VyX3BvbGljeSA9IHBvbGljeTsKIAogCQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZSA9IGdldF9jcHVfaWRsZV90aW1lKGosCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9LY29uZmlnIGIvZHJpdmVycy9jcnlwdG8vS2NvbmZpZwppbmRleCA1YjI3NjkyLi5iMDg0MDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9LY29uZmlnCisrKyBiL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKQEAgLTEzLDcgKzEzLDYgQEAKIGNvbmZpZyBDUllQVE9fREVWX1BBRExPQ0sKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgVklBIFBhZExvY2sgQUNFIgogCWRlcGVuZHMgb24gWDg2ICYmICFVTUwKLQlzZWxlY3QgQ1JZUFRPX0FMR0FQSQogCWhlbHAKIAkgIFNvbWUgVklBIHByb2Nlc3NvcnMgY29tZSB3aXRoIGFuIGludGVncmF0ZWQgY3J5cHRvIGVuZ2luZQogCSAgKHNvIGNhbGxlZCBWSUEgUGFkTG9jayBBQ0UsIEFkdmFuY2VkIENyeXB0b2dyYXBoeSBFbmdpbmUpCkBAIC0zOSw2ICszOCw3IEBACiBjb25maWcgQ1JZUFRPX0RFVl9QQURMT0NLX1NIQQogCXRyaXN0YXRlICJQYWRMb2NrIGRyaXZlciBmb3IgU0hBMSBhbmQgU0hBMjU2IGFsZ29yaXRobXMiCiAJZGVwZW5kcyBvbiBDUllQVE9fREVWX1BBRExPQ0sKKwlzZWxlY3QgQ1JZUFRPX0hBU0gKIAlzZWxlY3QgQ1JZUFRPX1NIQTEKIAlzZWxlY3QgQ1JZUFRPX1NIQTI1NgogCWhlbHAKQEAgLTE1Nyw2ICsxNTcsMTkgQEAKIAkgIEFOU0kgWDkuMTcgc3RhbmRhcmQuIFRoZSBQUk5HIGlzIHVzYWJsZSB2aWEgdGhlIGNoYXIgZGV2aWNlCiAJICAvZGV2L3ByYW5kb20uCiAKK2NvbmZpZyBDUllQVE9fREVWX01WX0NFU0EKKwl0cmlzdGF0ZSAiTWFydmVsbCdzIENyeXB0b2dyYXBoaWMgRW5naW5lIgorCWRlcGVuZHMgb24gUExBVF9PUklPTgorCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19BRVMKKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUjIKKwloZWxwCisJICBUaGlzIGRyaXZlciBhbGxvd3MgeW91IHRvIHV0aWxpemUgdGhlIENyeXB0b2dyYXBoaWMgRW5naW5lcyBhbmQKKwkgIFNlY3VyaXR5IEFjY2VsZXJhdG9yIChDRVNBKSB3aGljaCBjYW4gYmUgZm91bmQgb24gdGhlIE1hcnZlbGwgT3Jpb24KKwkgIGFuZCBLaXJrd29vZCBTb0NzLCBzdWNoIGFzIFFOQVAncyBUUy0yMDkuCisKKwkgIEN1cnJlbnRseSB0aGUgZHJpdmVyIHN1cHBvcnRzIEFFUyBpbiBFQ0IgYW5kIENCQyBtb2RlIHdpdGhvdXQgRE1BLgorCiBjb25maWcgQ1JZUFRPX0RFVl9ISUZOXzc5NVgKIAl0cmlzdGF0ZSAiRHJpdmVyIEhJRk4gNzk1eCBjcnlwdG8gYWNjZWxlcmF0b3IgY2hpcHMiCiAJc2VsZWN0IENSWVBUT19ERVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL01ha2VmaWxlIGIvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUKaW5kZXggOWJmNGEyYi4uNmZmY2IzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUKQEAgLTIsNiArMiw3IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9QQURMT0NLX1NIQSkgKz0gcGFkbG9jay1zaGEubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfR0VPREUpICs9IGdlb2RlLWFlcy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVgpICs9IGhpZm5fNzk1eC5vCitvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9NVl9DRVNBKSArPSBtdl9jZXNhLm8KIG9iai0kKENPTkZJR19DUllQVE9fREVWX1RBTElUT1MpICs9IHRhbGl0b3Mubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfSVhQNFhYKSArPSBpeHA0eHhfY3J5cHRvLm8KIG9iai0kKENPTkZJR19DUllQVE9fREVWX1BQQzRYWCkgKz0gYW1jYy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2FsZy5jIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfYWxnLmMKaW5kZXggNjFiNmUxYi4uYTMzMjQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfYWxnLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfYWxnLmMKQEAgLTIwOCw3ICsyMDgsOCBAQAogCQl9CiAJfQogCi0JdGZtLT5jcnRfYWhhc2gucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCk7CisJY3J5cHRvX2FoYXNoX3NldF9yZXFzaXplKF9fY3J5cHRvX2FoYXNoX2Nhc3QodGZtKSwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfY3R4KSk7CiAJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW47CiAJc2V0X2R5bmFtaWNfc2FfY29tbWFuZF8wKHNhLCBTQV9TQVZFX0hBU0gsIFNBX05PVF9TQVZFX0lWLAogCQkJCSBTQV9OT1RfTE9BRF9IQVNILCBTQV9MT0FEX0lWX0ZST01fU0EsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMKaW5kZXggNGMwZGZiMi4uNDZlODk5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuYwpAQCAtMzEsOCArMzEsNiBAQAogI2luY2x1ZGUgPGFzbS9kY3IuaD4KICNpbmNsdWRlIDxhc20vZGNyLXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+Ci0jaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgogI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KICNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+CiAjaW5jbHVkZSAiY3J5cHRvNHh4X3JlZ19kZWYuaCIKQEAgLTk5OCwxMCArOTk2LDE1IEBACiAJY3R4LT5zYV9vdXRfZG1hX2FkZHIgPSAwOwogCWN0eC0+c2FfbGVuID0gMDsKIAotCWlmIChhbGctPmNyYV90eXBlID09ICZjcnlwdG9fYWJsa2NpcGhlcl90eXBlKQorCXN3aXRjaCAoYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgeworCWRlZmF1bHQ6CiAJCXRmbS0+Y3J0X2FibGtjaXBoZXIucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCk7Ci0JZWxzZSBpZiAoYWxnLT5jcmFfdHlwZSA9PSAmY3J5cHRvX2FoYXNoX3R5cGUpCi0JCXRmbS0+Y3J0X2FoYXNoLnJlcXNpemUgPSBzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jdHgpOworCQlicmVhazsKKwljYXNlIENSWVBUT19BTEdfVFlQRV9BSEFTSDoKKwkJY3J5cHRvX2FoYXNoX3NldF9yZXFzaXplKF9fY3J5cHRvX2FoYXNoX2Nhc3QodGZtKSwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCkpOworCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMTUsNyArMTAxOCw4IEBACiB9CiAKIGludCBjcnlwdG80eHhfcmVnaXN0ZXJfYWxnKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpzZWNfZGV2LAotCQkJICAgc3RydWN0IGNyeXB0b19hbGcgKmNyeXB0b19hbGcsIGludCBhcnJheV9zaXplKQorCQkJICAgc3RydWN0IGNyeXB0bzR4eF9hbGdfY29tbW9uICpjcnlwdG9fYWxnLAorCQkJICAgaW50IGFycmF5X3NpemUpCiB7CiAJc3RydWN0IGNyeXB0bzR4eF9hbGcgKmFsZzsKIAlpbnQgaTsKQEAgLTEwMjcsMTMgKzEwMzEsMTggQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCiAJCWFsZy0+YWxnID0gY3J5cHRvX2FsZ1tpXTsKLQkJSU5JVF9MSVNUX0hFQUQoJmFsZy0+YWxnLmNyYV9saXN0KTsKLQkJaWYgKGFsZy0+YWxnLmNyYV9pbml0ID09IE5VTEwpCi0JCQlhbGctPmFsZy5jcmFfaW5pdCA9IGNyeXB0bzR4eF9hbGdfaW5pdDsKLQkJaWYgKGFsZy0+YWxnLmNyYV9leGl0ID09IE5VTEwpCi0JCQlhbGctPmFsZy5jcmFfZXhpdCA9IGNyeXB0bzR4eF9hbGdfZXhpdDsKIAkJYWxnLT5kZXYgPSBzZWNfZGV2OwotCQlyYyA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZy0+YWxnKTsKKworCQlzd2l0Y2ggKGFsZy0+YWxnLnR5cGUpIHsKKwkJY2FzZSBDUllQVE9fQUxHX1RZUEVfQUhBU0g6CisJCQlyYyA9IGNyeXB0b19yZWdpc3Rlcl9haGFzaCgmYWxnLT5hbGcudS5oYXNoKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyYyA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZy0+YWxnLnUuY2lwaGVyKTsKKwkJCWJyZWFrOworCQl9CisKIAkJaWYgKHJjKSB7CiAJCQlsaXN0X2RlbCgmYWxnLT5lbnRyeSk7CiAJCQlrZnJlZShhbGcpOwpAQCAtMTA1MSw3ICsxMDYwLDE0IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWxnLCB0bXAsICZzZWNfZGV2LT5hbGdfbGlzdCwgZW50cnkpIHsKIAkJbGlzdF9kZWwoJmFsZy0+ZW50cnkpOwotCQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZy0+YWxnKTsKKwkJc3dpdGNoIChhbGctPmFsZy50eXBlKSB7CisJCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0FIQVNIOgorCQkJY3J5cHRvX3VucmVnaXN0ZXJfYWhhc2goJmFsZy0+YWxnLnUuaGFzaCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGctPmFsZy51LmNpcGhlcik7CisJCX0KIAkJa2ZyZWUoYWxnKTsKIAl9CiB9CkBAIC0xMTA0LDE3ICsxMTIwLDE4IEBACiAvKioKICAqIFN1cHBvcnRlZCBDcnlwdG8gQWxnb3JpdGhtcwogICovCi1zdHJ1Y3QgY3J5cHRvX2FsZyBjcnlwdG80eHhfYWxnW10gPSB7CitzdHJ1Y3QgY3J5cHRvNHh4X2FsZ19jb21tb24gY3J5cHRvNHh4X2FsZ1tdID0gewogCS8qIENyeXB0byBBRVMgbW9kZXMgKi8KLQl7CisJeyAudHlwZSA9IENSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSLCAudS5jaXBoZXIgPSB7CiAJCS5jcmFfbmFtZSAJPSAiY2JjKGFlcykiLAogCQkuY3JhX2RyaXZlcl9uYW1lID0gImNiYy1hZXMtcHBjNHh4IiwKIAkJLmNyYV9wcmlvcml0eSAJPSBDUllQVE80WFhfQ1JZUFRPX1BSSU9SSVRZLAogCQkuY3JhX2ZsYWdzIAk9IENSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSIHwgQ1JZUFRPX0FMR19BU1lOQywKIAkJLmNyYV9ibG9ja3NpemUgCT0gQUVTX0JMT0NLX1NJWkUsCiAJCS5jcmFfY3R4c2l6ZSAJPSBzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jdHgpLAotCQkuY3JhX2FsaWdubWFzayAJPSAwLAogCQkuY3JhX3R5cGUgCT0gJmNyeXB0b19hYmxrY2lwaGVyX3R5cGUsCisJCS5jcmFfaW5pdAk9IGNyeXB0bzR4eF9hbGdfaW5pdCwKKwkJLmNyYV9leGl0CT0gY3J5cHRvNHh4X2FsZ19leGl0LAogCQkuY3JhX21vZHVsZSAJPSBUSElTX01PRFVMRSwKIAkJLmNyYV91IAkJPSB7CiAJCQkuYWJsa2NpcGhlciA9IHsKQEAgLTExMjYsMjkgKzExNDMsNyBAQAogCQkJCS5kZWNyeXB0IAk9IGNyeXB0bzR4eF9kZWNyeXB0LAogCQkJfQogCQl9Ci0JfSwKLQkvKiBIYXNoIFNIQTEgKi8KLQl7Ci0JCS5jcmFfbmFtZQk9ICJzaGExIiwKLQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzaGExLXBwYzR4eCIsCi0JCS5jcmFfcHJpb3JpdHkJPSBDUllQVE80WFhfQ1JZUFRPX1BSSU9SSVRZLAotCQkuY3JhX2ZsYWdzCT0gQ1JZUFRPX0FMR19UWVBFX0FIQVNIIHwgQ1JZUFRPX0FMR19BU1lOQywKLQkJLmNyYV9ibG9ja3NpemUJPSBTSEExX0JMT0NLX1NJWkUsCi0JCS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCksCi0JCS5jcmFfYWxpZ25tYXNrCT0gMCwKLQkJLmNyYV90eXBlCT0gJmNyeXB0b19haGFzaF90eXBlLAotCQkuY3JhX2luaXQJPSBjcnlwdG80eHhfc2hhMV9hbGdfaW5pdCwKLQkJLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKLQkJLmNyYV91CQk9IHsKLQkJCS5haGFzaCA9IHsKLQkJCQkuZGlnZXN0c2l6ZSAJPSBTSEExX0RJR0VTVF9TSVpFLAotCQkJCS5pbml0CQk9IGNyeXB0bzR4eF9oYXNoX2luaXQsCi0JCQkJLnVwZGF0ZQkJPSBjcnlwdG80eHhfaGFzaF91cGRhdGUsCi0JCQkJLmZpbmFsICAJPSBjcnlwdG80eHhfaGFzaF9maW5hbCwKLQkJCQkuZGlnZXN0IAk9IGNyeXB0bzR4eF9oYXNoX2RpZ2VzdCwKLQkJCX0KLQkJfQotCX0sCisJfX0sCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuaCBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuaAppbmRleCAxZWYxMDM0Li5kYTljYmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmgKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5oCkBAIC0yMiw2ICsyMiw4IEBACiAjaWZuZGVmIF9fQ1JZUFRPNFhYX0NPUkVfSF9fCiAjZGVmaW5lIF9fQ1JZUFRPNFhYX0NPUkVfSF9fCiAKKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorCiAjZGVmaW5lIFBQQzQ2MFNYX1NEUjBfU1JTVCAgICAgICAgICAgICAgICAgICAgICAweDIwMQogI2RlZmluZSBQUEM0MDVFWF9TRFIwX1NSU1QgICAgICAgICAgICAgICAgICAgICAgMHgyMDAKICNkZWZpbmUgUFBDNDYwRVhfU0RSMF9TUlNUICAgICAgICAgICAgICAgICAgICAgIDB4MjAxCkBAIC0xMzgsMTQgKzE0MCwzMSBAQAogCXUxNiBzYV9sZW47CiB9OwogCitzdHJ1Y3QgY3J5cHRvNHh4X2FsZ19jb21tb24geworCXUzMiB0eXBlOworCXVuaW9uIHsKKwkJc3RydWN0IGNyeXB0b19hbGcgY2lwaGVyOworCQlzdHJ1Y3QgYWhhc2hfYWxnIGhhc2g7CisJfSB1OworfTsKKwogc3RydWN0IGNyeXB0bzR4eF9hbGcgewogCXN0cnVjdCBsaXN0X2hlYWQgIGVudHJ5OwotCXN0cnVjdCBjcnlwdG9fYWxnIGFsZzsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2FsZ19jb21tb24gYWxnOwogCXN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXY7CiB9OwogCi0jZGVmaW5lIGNyeXB0b19hbGdfdG9fY3J5cHRvNHh4X2FsZyh4KSBcCi0JCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgY3J5cHRvNHh4X2FsZywgYWxnKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvNHh4X2FsZyAqY3J5cHRvX2FsZ190b19jcnlwdG80eHhfYWxnKAorCXN0cnVjdCBjcnlwdG9fYWxnICp4KQoreworCXN3aXRjaCAoeC0+Y3JhX2ZsYWdzICYgQ1JZUFRPX0FMR19UWVBFX01BU0spIHsKKwljYXNlIENSWVBUT19BTEdfVFlQRV9BSEFTSDoKKwkJcmV0dXJuIGNvbnRhaW5lcl9vZihfX2NyeXB0b19haGFzaF9hbGcoeCksCisJCQkJICAgIHN0cnVjdCBjcnlwdG80eHhfYWxnLCBhbGcudS5oYXNoKTsKKwl9CisKKwlyZXR1cm4gY29udGFpbmVyX29mKHgsIHN0cnVjdCBjcnlwdG80eHhfYWxnLCBhbGcudS5jaXBoZXIpOworfQogCiBleHRlcm4gaW50IGNyeXB0bzR4eF9hbGxvY19zYShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4LCB1MzIgc2l6ZSk7CiBleHRlcm4gdm9pZCBjcnlwdG80eHhfZnJlZV9zYShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL212X2Nlc2EuYyBiL2RyaXZlcnMvY3J5cHRvL212X2Nlc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjFlZjYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vbXZfY2VzYS5jCkBAIC0wLDAgKzEsNjA2IEBACisvKgorICogU3VwcG9ydCBmb3IgTWFydmVsbCdzIGNyeXB0byBlbmdpbmUgd2hpY2ggY2FuIGJlIGZvdW5kIG9uIHNvbWUgT3Jpb241WAorICogYm9hcmRzLgorICoKKyAqIEF1dGhvcjogU2ViYXN0aWFuIEFuZHJ6ZWogU2lld2lvciA8IHNlYmFzdGlhbiBhdCBicmVha3BvaW50IGRvdCBjYyA+CisgKiBMaWNlbnNlOiBHUEx2MgorICoKKyAqLworI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKworI2luY2x1ZGUgIm12X2Nlc2EuaCIKKy8qCisgKiBTVE06CisgKiAgIC8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cCisgKiAgIHwJCQkJCSAgICAgfCByZXF1ZXN0IGNvbXBsZXRlCisgKiAgXC4vCQkJCQkgICAgIHwKKyAqIElETEUgLT4gbmV3IHJlcXVlc3QgLT4gQlVTWSAtPiBkb25lIC0+IERFUVVFVUUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIC/CsFwgICAgICAgICAgICAgICB8CisgKgkJCSAgICB8CQkgICAgIHwgbW9yZSBzY2F0dGVyIGVudHJpZXMKKyAqCQkJICAgIFxfX19fX19fX19fX19fX19fLworICovCitlbnVtIGVuZ2luZV9zdGF0dXMgeworCUVOR0lORV9JRExFLAorCUVOR0lORV9CVVNZLAorCUVOR0lORV9XX0RFUVVFVUUsCit9OworCisvKioKKyAqIHN0cnVjdCByZXFfcHJvZ3Jlc3MgLSB1c2VkIGZvciBldmVyeSBjcnlwdCByZXF1ZXN0CisgKiBAc3JjX3NnX2l0OgkJc2cgaXRlcmF0b3IgZm9yIHNyYworICogQGRzdF9zZ19pdDoJCXNnIGl0ZXJhdG9yIGZvciBkc3QKKyAqIEBzZ19zcmNfbGVmdDoJYnl0ZXMgbGVmdCBpbiBzcmMgdG8gcHJvY2VzcyAoc2NhdHRlciBsaXN0KQorICogQHNyY19zdGFydDoJCW9mZnNldCB0byBhZGQgdG8gc3JjIHN0YXJ0IHBvc2l0aW9uIChzY2F0dGVyIGxpc3QpCisgKiBAY3J5cHRfbGVuOgkJbGVuZ3RoIG9mIGN1cnJlbnQgY3J5cHQgcHJvY2VzcworICogQHNnX2RzdF9sZWZ0OglieXRlcyBsZWZ0IGRzdCB0byBwcm9jZXNzIGluIHRoaXMgc2NhdHRlciBsaXN0CisgKiBAZHN0X3N0YXJ0OgkJb2Zmc2V0IHRvIGFkZCB0byBkc3Qgc3RhcnQgcG9zaXRpb24gKHNjYXR0ZXIgbGlzdCkKKyAqIEB0b3RhbF9yZXFfYnl0ZXM6CXRvdGFsIG51bWJlciBvZiBieXRlcyBwcm9jZXNzZWQgKHJlcXVlc3QpLgorICoKKyAqIHNnIGhlbHBlciBhcmUgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIHNjYXR0ZXJsaXN0LiBTaW5jZSB0aGUgc2l6ZSBvZiB0aGUKKyAqIFNSQU0gbWF5IGJlIGxlc3MgdGhhbiB0aGUgc2NhdHRlciBzaXplLCB0aGlzIHN0cnVjdCBzdHJ1Y3QgaXMgdXNlZCB0byBrZWVwCisgKiB0cmFjayBvZiBwcm9ncmVzcyB3aXRoaW4gY3VycmVudCBzY2F0dGVybGlzdC4KKyAqLworc3RydWN0IHJlcV9wcm9ncmVzcyB7CisJc3RydWN0IHNnX21hcHBpbmdfaXRlciBzcmNfc2dfaXQ7CisJc3RydWN0IHNnX21hcHBpbmdfaXRlciBkc3Rfc2dfaXQ7CisKKwkvKiBzcmMgbW9zdGx5ICovCisJaW50IHNnX3NyY19sZWZ0OworCWludCBzcmNfc3RhcnQ7CisJaW50IGNyeXB0X2xlbjsKKwkvKiBkc3QgbW9zdGx5ICovCisJaW50IHNnX2RzdF9sZWZ0OworCWludCBkc3Rfc3RhcnQ7CisJaW50IHRvdGFsX3JlcV9ieXRlczsKK307CisKK3N0cnVjdCBjcnlwdG9fcHJpdiB7CisJdm9pZCBfX2lvbWVtICpyZWc7CisJdm9pZCBfX2lvbWVtICpzcmFtOworCWludCBpcnE7CisJc3RydWN0IHRhc2tfc3RydWN0ICpxdWV1ZV90aDsKKworCS8qIHRoZSBsb2NrIHByb3RlY3RzIHF1ZXVlIGFuZCBlbmdfc3QgKi8KKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGNyeXB0b19xdWV1ZSBxdWV1ZTsKKwllbnVtIGVuZ2luZV9zdGF0dXMgZW5nX3N0OworCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmN1cl9yZXE7CisJc3RydWN0IHJlcV9wcm9ncmVzcyBwOworCWludCBtYXhfcmVxX3NpemU7CisJaW50IHNyYW1fc2l6ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX3ByaXYgKmNwZzsKKworc3RydWN0IG12X2N0eCB7CisJdTggYWVzX2VuY19rZXlbQUVTX0tFWV9MRU5dOworCXUzMiBhZXNfZGVjX2tleVs4XTsKKwlpbnQga2V5X2xlbjsKKwl1MzIgbmVlZF9jYWxjX2Flc19ka2V5OworfTsKKworZW51bSBjcnlwdG9fb3AgeworCUNPUF9BRVNfRUNCLAorCUNPUF9BRVNfQ0JDLAorfTsKKworc3RydWN0IG12X3JlcV9jdHggeworCWVudW0gY3J5cHRvX29wIG9wOworCWludCBkZWNyeXB0OworfTsKKworc3RhdGljIHZvaWQgY29tcHV0ZV9hZXNfZGVjX2tleShzdHJ1Y3QgbXZfY3R4ICpjdHgpCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4IGdlbl9hZXNfa2V5OworCWludCBrZXlfcG9zOworCisJaWYgKCFjdHgtPm5lZWRfY2FsY19hZXNfZGtleSkKKwkJcmV0dXJuOworCisJY3J5cHRvX2Flc19leHBhbmRfa2V5KCZnZW5fYWVzX2tleSwgY3R4LT5hZXNfZW5jX2tleSwgY3R4LT5rZXlfbGVuKTsKKworCWtleV9wb3MgPSBjdHgtPmtleV9sZW4gKyAyNDsKKwltZW1jcHkoY3R4LT5hZXNfZGVjX2tleSwgJmdlbl9hZXNfa2V5LmtleV9lbmNba2V5X3Bvc10sIDQgKiA0KTsKKwlzd2l0Y2ggKGN0eC0+a2V5X2xlbikgeworCWNhc2UgQUVTX0tFWVNJWkVfMjU2OgorCQlrZXlfcG9zIC09IDI7CisJCS8qIGZhbGwgKi8KKwljYXNlIEFFU19LRVlTSVpFXzE5MjoKKwkJa2V5X3BvcyAtPSAyOworCQltZW1jcHkoJmN0eC0+YWVzX2RlY19rZXlbNF0sICZnZW5fYWVzX2tleS5rZXlfZW5jW2tleV9wb3NdLAorCQkJCTQgKiA0KTsKKwkJYnJlYWs7CisJfQorCWN0eC0+bmVlZF9jYWxjX2Flc19ka2V5ID0gMDsKK30KKworc3RhdGljIGludCBtdl9zZXRrZXlfYWVzKHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqY2lwaGVyLCBjb25zdCB1OCAqa2V5LAorCQl1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl90Zm0oY2lwaGVyKTsKKwlzdHJ1Y3QgbXZfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJc3dpdGNoIChsZW4pIHsKKwljYXNlIEFFU19LRVlTSVpFXzEyODoKKwljYXNlIEFFU19LRVlTSVpFXzE5MjoKKwljYXNlIEFFU19LRVlTSVpFXzI1NjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3J5cHRvX2FibGtjaXBoZXJfc2V0X2ZsYWdzKGNpcGhlciwgQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY3R4LT5rZXlfbGVuID0gbGVuOworCWN0eC0+bmVlZF9jYWxjX2Flc19ka2V5ID0gMTsKKworCW1lbWNweShjdHgtPmFlc19lbmNfa2V5LCBrZXksIEFFU19LRVlfTEVOKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfZGF0YV9pbihzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJaW50IHJldDsKKwl2b2lkICpidWY7CisKKwlpZiAoIWNwZy0+cC5zZ19zcmNfbGVmdCkgeworCQlyZXQgPSBzZ19taXRlcl9uZXh0KCZjcGctPnAuc3JjX3NnX2l0KTsKKwkJQlVHX09OKCFyZXQpOworCQljcGctPnAuc2dfc3JjX2xlZnQgPSBjcGctPnAuc3JjX3NnX2l0Lmxlbmd0aDsKKwkJY3BnLT5wLnNyY19zdGFydCA9IDA7CisJfQorCisJY3BnLT5wLmNyeXB0X2xlbiA9IG1pbihjcGctPnAuc2dfc3JjX2xlZnQsIGNwZy0+bWF4X3JlcV9zaXplKTsKKworCWJ1ZiA9IGNwZy0+cC5zcmNfc2dfaXQuYWRkcjsKKwlidWYgKz0gY3BnLT5wLnNyY19zdGFydDsKKworCW1lbWNweShjcGctPnNyYW0gKyBTUkFNX0RBVEFfSU5fU1RBUlQsIGJ1ZiwgY3BnLT5wLmNyeXB0X2xlbik7CisKKwljcGctPnAuc2dfc3JjX2xlZnQgLT0gY3BnLT5wLmNyeXB0X2xlbjsKKwljcGctPnAuc3JjX3N0YXJ0ICs9IGNwZy0+cC5jcnlwdF9sZW47Cit9CisKK3N0YXRpYyB2b2lkIG12X3Byb2Nlc3NfY3VycmVudF9xKGludCBmaXJzdF9ibG9jaykKK3sKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEgPSBjcGctPmN1cl9yZXE7CisJc3RydWN0IG12X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CisJc3RydWN0IG12X3JlcV9jdHggKnJlcV9jdHggPSBhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IHNlY19hY2NlbF9jb25maWcgb3A7CisKKwlzd2l0Y2ggKHJlcV9jdHgtPm9wKSB7CisJY2FzZSBDT1BfQUVTX0VDQjoKKwkJb3AuY29uZmlnID0gQ0ZHX09QX0NSWVBUX09OTFkgfCBDRkdfRU5DTV9BRVMgfCBDRkdfRU5DX01PREVfRUNCOworCQlicmVhazsKKwljYXNlIENPUF9BRVNfQ0JDOgorCQlvcC5jb25maWcgPSBDRkdfT1BfQ1JZUFRfT05MWSB8IENGR19FTkNNX0FFUyB8IENGR19FTkNfTU9ERV9DQkM7CisJCW9wLmVuY19pdiA9IEVOQ19JVl9QT0lOVChTUkFNX0RBVEFfSVYpIHwKKwkJCUVOQ19JVl9CVUZfUE9JTlQoU1JBTV9EQVRBX0lWX0JVRik7CisJCWlmIChmaXJzdF9ibG9jaykKKwkJCW1lbWNweShjcGctPnNyYW0gKyBTUkFNX0RBVEFfSVYsIHJlcS0+aW5mbywgMTYpOworCQlicmVhazsKKwl9CisJaWYgKHJlcV9jdHgtPmRlY3J5cHQpIHsKKwkJb3AuY29uZmlnIHw9IENGR19ESVJfREVDOworCQltZW1jcHkoY3BnLT5zcmFtICsgU1JBTV9EQVRBX0tFWV9QLCBjdHgtPmFlc19kZWNfa2V5LAorCQkJCUFFU19LRVlfTEVOKTsKKwl9IGVsc2UgeworCQlvcC5jb25maWcgfD0gQ0ZHX0RJUl9FTkM7CisJCW1lbWNweShjcGctPnNyYW0gKyBTUkFNX0RBVEFfS0VZX1AsIGN0eC0+YWVzX2VuY19rZXksCisJCQkJQUVTX0tFWV9MRU4pOworCX0KKworCXN3aXRjaCAoY3R4LT5rZXlfbGVuKSB7CisJY2FzZSBBRVNfS0VZU0laRV8xMjg6CisJCW9wLmNvbmZpZyB8PSBDRkdfQUVTX0xFTl8xMjg7CisJCWJyZWFrOworCWNhc2UgQUVTX0tFWVNJWkVfMTkyOgorCQlvcC5jb25maWcgfD0gQ0ZHX0FFU19MRU5fMTkyOworCQlicmVhazsKKwljYXNlIEFFU19LRVlTSVpFXzI1NjoKKwkJb3AuY29uZmlnIHw9IENGR19BRVNfTEVOXzI1NjsKKwkJYnJlYWs7CisJfQorCW9wLmVuY19wID0gRU5DX1BfU1JDKFNSQU1fREFUQV9JTl9TVEFSVCkgfAorCQlFTkNfUF9EU1QoU1JBTV9EQVRBX09VVF9TVEFSVCk7CisJb3AuZW5jX2tleV9wID0gU1JBTV9EQVRBX0tFWV9QOworCisJc2V0dXBfZGF0YV9pbihyZXEpOworCW9wLmVuY19sZW4gPSBjcGctPnAuY3J5cHRfbGVuOworCW1lbWNweShjcGctPnNyYW0gKyBTUkFNX0NPTkZJRywgJm9wLAorCQkJc2l6ZW9mKHN0cnVjdCBzZWNfYWNjZWxfY29uZmlnKSk7CisKKwl3cml0ZWwoU1JBTV9DT05GSUcsIGNwZy0+cmVnICsgU0VDX0FDQ0VMX0RFU0NfUDApOworCS8qIEdPICovCisJd3JpdGVsKFNFQ19DTURfRU5fU0VDX0FDQ0wwLCBjcGctPnJlZyArIFNFQ19BQ0NFTF9DTUQpOworCisJLyoKKwkgKiBYWFg6IGFkZCB0aW1lciBpZiB0aGUgaW50ZXJydXB0IGRvZXMgbm90IG9jY3VyIGZvciBzb21lIG15c3RlcnkKKwkgKiByZWFzb24KKwkgKi8KK30KKworc3RhdGljIHZvaWQgbXZfY3J5cHRvX2FsZ29fY29tcGxldGlvbih2b2lkKQoreworCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSA9IGNwZy0+Y3VyX3JlcTsKKwlzdHJ1Y3QgbXZfcmVxX2N0eCAqcmVxX2N0eCA9IGFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKKworCWlmIChyZXFfY3R4LT5vcCAhPSBDT1BfQUVTX0NCQykKKwkJcmV0dXJuIDsKKworCW1lbWNweShyZXEtPmluZm8sIGNwZy0+c3JhbSArIFNSQU1fREFUQV9JVl9CVUYsIDE2KTsKK30KKworc3RhdGljIHZvaWQgZGVxdWV1ZV9jb21wbGV0ZV9yZXEodm9pZCkKK3sKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEgPSBjcGctPmN1cl9yZXE7CisJdm9pZCAqYnVmOworCWludCByZXQ7CisKKwljcGctPnAudG90YWxfcmVxX2J5dGVzICs9IGNwZy0+cC5jcnlwdF9sZW47CisJZG8geworCQlpbnQgZHN0X2NvcHk7CisKKwkJaWYgKCFjcGctPnAuc2dfZHN0X2xlZnQpIHsKKwkJCXJldCA9IHNnX21pdGVyX25leHQoJmNwZy0+cC5kc3Rfc2dfaXQpOworCQkJQlVHX09OKCFyZXQpOworCQkJY3BnLT5wLnNnX2RzdF9sZWZ0ID0gY3BnLT5wLmRzdF9zZ19pdC5sZW5ndGg7CisJCQljcGctPnAuZHN0X3N0YXJ0ID0gMDsKKwkJfQorCisJCWJ1ZiA9IGNwZy0+cC5kc3Rfc2dfaXQuYWRkcjsKKwkJYnVmICs9IGNwZy0+cC5kc3Rfc3RhcnQ7CisKKwkJZHN0X2NvcHkgPSBtaW4oY3BnLT5wLmNyeXB0X2xlbiwgY3BnLT5wLnNnX2RzdF9sZWZ0KTsKKworCQltZW1jcHkoYnVmLCBjcGctPnNyYW0gKyBTUkFNX0RBVEFfT1VUX1NUQVJULCBkc3RfY29weSk7CisKKwkJY3BnLT5wLnNnX2RzdF9sZWZ0IC09IGRzdF9jb3B5OworCQljcGctPnAuY3J5cHRfbGVuIC09IGRzdF9jb3B5OworCQljcGctPnAuZHN0X3N0YXJ0ICs9IGRzdF9jb3B5OworCX0gd2hpbGUgKGNwZy0+cC5jcnlwdF9sZW4gPiAwKTsKKworCUJVR19PTihjcGctPmVuZ19zdCAhPSBFTkdJTkVfV19ERVFVRVVFKTsKKwlpZiAoY3BnLT5wLnRvdGFsX3JlcV9ieXRlcyA8IHJlcS0+bmJ5dGVzKSB7CisJCS8qIHByb2Nlc3MgbmV4dCBzY2F0dGVyIGxpc3QgZW50cnkgKi8KKwkJY3BnLT5lbmdfc3QgPSBFTkdJTkVfQlVTWTsKKwkJbXZfcHJvY2Vzc19jdXJyZW50X3EoMCk7CisJfSBlbHNlIHsKKwkJc2dfbWl0ZXJfc3RvcCgmY3BnLT5wLnNyY19zZ19pdCk7CisJCXNnX21pdGVyX3N0b3AoJmNwZy0+cC5kc3Rfc2dfaXQpOworCQltdl9jcnlwdG9fYWxnb19jb21wbGV0aW9uKCk7CisJCWNwZy0+ZW5nX3N0ID0gRU5HSU5FX0lETEU7CisJCXJlcS0+YmFzZS5jb21wbGV0ZSgmcmVxLT5iYXNlLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY291bnRfc2dzKHN0cnVjdCBzY2F0dGVybGlzdCAqc2wsIHVuc2lnbmVkIGludCB0b3RhbF9ieXRlcykKK3sKKwlpbnQgaSA9IDA7CisKKwlkbyB7CisJCXRvdGFsX2J5dGVzIC09IHNsW2ldLmxlbmd0aDsKKwkJaSsrOworCisJfSB3aGlsZSAodG90YWxfYnl0ZXMgPiAwKTsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBtdl9lbnF1ZXVlX25ld19yZXEoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCWludCBudW1fc2dzOworCisJY3BnLT5jdXJfcmVxID0gcmVxOworCW1lbXNldCgmY3BnLT5wLCAwLCBzaXplb2Yoc3RydWN0IHJlcV9wcm9ncmVzcykpOworCisJbnVtX3NncyA9IGNvdW50X3NncyhyZXEtPnNyYywgcmVxLT5uYnl0ZXMpOworCXNnX21pdGVyX3N0YXJ0KCZjcGctPnAuc3JjX3NnX2l0LCByZXEtPnNyYywgbnVtX3NncywgU0dfTUlURVJfRlJPTV9TRyk7CisKKwludW1fc2dzID0gY291bnRfc2dzKHJlcS0+ZHN0LCByZXEtPm5ieXRlcyk7CisJc2dfbWl0ZXJfc3RhcnQoJmNwZy0+cC5kc3Rfc2dfaXQsIHJlcS0+ZHN0LCBudW1fc2dzLCBTR19NSVRFUl9UT19TRyk7CisJbXZfcHJvY2Vzc19jdXJyZW50X3EoMSk7Cit9CisKK3N0YXRpYyBpbnQgcXVldWVfbWFuYWcodm9pZCAqZGF0YSkKK3sKKwljcGctPmVuZ19zdCA9IEVOR0lORV9JRExFOworCWRvIHsKKwkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxOworCQlzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFzeW5jX3JlcSA9IE5VTEw7CisJCXN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYmFja2xvZzsKKworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisKKwkJaWYgKGNwZy0+ZW5nX3N0ID09IEVOR0lORV9XX0RFUVVFVUUpCisJCQlkZXF1ZXVlX2NvbXBsZXRlX3JlcSgpOworCisJCXNwaW5fbG9ja19pcnEoJmNwZy0+bG9jayk7CisJCWlmIChjcGctPmVuZ19zdCA9PSBFTkdJTkVfSURMRSkgeworCQkJYmFja2xvZyA9IGNyeXB0b19nZXRfYmFja2xvZygmY3BnLT5xdWV1ZSk7CisJCQlhc3luY19yZXEgPSBjcnlwdG9fZGVxdWV1ZV9yZXF1ZXN0KCZjcGctPnF1ZXVlKTsKKwkJCWlmIChhc3luY19yZXEpIHsKKwkJCQlCVUdfT04oY3BnLT5lbmdfc3QgIT0gRU5HSU5FX0lETEUpOworCQkJCWNwZy0+ZW5nX3N0ID0gRU5HSU5FX0JVU1k7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZjcGctPmxvY2spOworCisJCWlmIChiYWNrbG9nKSB7CisJCQliYWNrbG9nLT5jb21wbGV0ZShiYWNrbG9nLCAtRUlOUFJPR1JFU1MpOworCQkJYmFja2xvZyA9IE5VTEw7CisJCX0KKworCQlpZiAoYXN5bmNfcmVxKSB7CisJCQlyZXEgPSBjb250YWluZXJfb2YoYXN5bmNfcmVxLAorCQkJCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0LCBiYXNlKTsKKwkJCW12X2VucXVldWVfbmV3X3JlcShyZXEpOworCQkJYXN5bmNfcmVxID0gTlVMTDsKKwkJfQorCisJCXNjaGVkdWxlKCk7CisKKwl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdl9oYW5kbGVfcmVxKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3BnLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gYWJsa2NpcGhlcl9lbnF1ZXVlX3JlcXVlc3QoJmNwZy0+cXVldWUsIHJlcSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3BnLT5sb2NrLCBmbGFncyk7CisJd2FrZV91cF9wcm9jZXNzKGNwZy0+cXVldWVfdGgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXZfZW5jX2Flc19lY2Ioc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBtdl9yZXFfY3R4ICpyZXFfY3R4ID0gYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOworCisJcmVxX2N0eC0+b3AgPSBDT1BfQUVTX0VDQjsKKwlyZXFfY3R4LT5kZWNyeXB0ID0gMDsKKworCXJldHVybiBtdl9oYW5kbGVfcmVxKHJlcSk7Cit9CisKK3N0YXRpYyBpbnQgbXZfZGVjX2Flc19lY2Ioc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBtdl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOworCXN0cnVjdCBtdl9yZXFfY3R4ICpyZXFfY3R4ID0gYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOworCisJcmVxX2N0eC0+b3AgPSBDT1BfQUVTX0VDQjsKKwlyZXFfY3R4LT5kZWNyeXB0ID0gMTsKKworCWNvbXB1dGVfYWVzX2RlY19rZXkoY3R4KTsKKwlyZXR1cm4gbXZfaGFuZGxlX3JlcShyZXEpOworfQorCitzdGF0aWMgaW50IG12X2VuY19hZXNfY2JjKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgbXZfcmVxX2N0eCAqcmVxX2N0eCA9IGFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKKworCXJlcV9jdHgtPm9wID0gQ09QX0FFU19DQkM7CisJcmVxX2N0eC0+ZGVjcnlwdCA9IDA7CisKKwlyZXR1cm4gbXZfaGFuZGxlX3JlcShyZXEpOworfQorCitzdGF0aWMgaW50IG12X2RlY19hZXNfY2JjKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgbXZfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPmJhc2UudGZtKTsKKwlzdHJ1Y3QgbXZfcmVxX2N0eCAqcmVxX2N0eCA9IGFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKKworCXJlcV9jdHgtPm9wID0gQ09QX0FFU19DQkM7CisJcmVxX2N0eC0+ZGVjcnlwdCA9IDE7CisKKwljb21wdXRlX2Flc19kZWNfa2V5KGN0eCk7CisJcmV0dXJuIG12X2hhbmRsZV9yZXEocmVxKTsKK30KKworc3RhdGljIGludCBtdl9jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXRmbS0+Y3J0X2FibGtjaXBoZXIucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXZfcmVxX2N0eCk7CisJcmV0dXJuIDA7Cit9CisKK2lycXJldHVybl90IGNyeXB0b19pbnQoaW50IGlycSwgdm9pZCAqcHJpdikKK3sKKwl1MzIgdmFsOworCisJdmFsID0gcmVhZGwoY3BnLT5yZWcgKyBTRUNfQUNDRUxfSU5UX1NUQVRVUyk7CisJaWYgKCEodmFsICYgU0VDX0lOVF9BQ0NFTDBfRE9ORSkpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXZhbCAmPSB+U0VDX0lOVF9BQ0NFTDBfRE9ORTsKKwl3cml0ZWwodmFsLCBjcGctPnJlZyArIEZQR0FfSU5UX1NUQVRVUyk7CisJd3JpdGVsKHZhbCwgY3BnLT5yZWcgKyBTRUNfQUNDRUxfSU5UX1NUQVRVUyk7CisJQlVHX09OKGNwZy0+ZW5nX3N0ICE9IEVOR0lORV9CVVNZKTsKKwljcGctPmVuZ19zdCA9IEVOR0lORV9XX0RFUVVFVUU7CisJd2FrZV91cF9wcm9jZXNzKGNwZy0+cXVldWVfdGgpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RydWN0IGNyeXB0b19hbGcgbXZfYWVzX2FsZ19lY2IgPSB7CisJLmNyYV9uYW1lCQk9ICJlY2IoYWVzKSIsCisJLmNyYV9kcml2ZXJfbmFtZQk9ICJtdi1lY2ItYWVzIiwKKwkuY3JhX3ByaW9yaXR5CT0gMzAwLAorCS5jcmFfZmxhZ3MJPSBDUllQVE9fQUxHX1RZUEVfQUJMS0NJUEhFUiB8IENSWVBUT19BTEdfQVNZTkMsCisJLmNyYV9ibG9ja3NpemUJPSAxNiwKKwkuY3JhX2N0eHNpemUJPSBzaXplb2Yoc3RydWN0IG12X2N0eCksCisJLmNyYV9hbGlnbm1hc2sJPSAwLAorCS5jcmFfdHlwZQk9ICZjcnlwdG9fYWJsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisJLmNyYV9pbml0CT0gbXZfY3JhX2luaXQsCisJLmNyYV91CQk9IHsKKwkJLmFibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJPQlBRVNfTUlOX0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCT0JQUVTX01BWF9LRVlfU0laRSwKKwkJCS5zZXRrZXkJCT0JbXZfc2V0a2V5X2FlcywKKwkJCS5lbmNyeXB0CT0JbXZfZW5jX2Flc19lY2IsCisJCQkuZGVjcnlwdAk9CW12X2RlY19hZXNfZWNiLAorCQl9LAorCX0sCit9OworCitzdHJ1Y3QgY3J5cHRvX2FsZyBtdl9hZXNfYWxnX2NiYyA9IHsKKwkuY3JhX25hbWUJCT0gImNiYyhhZXMpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0gIm12LWNiYy1hZXMiLAorCS5jcmFfcHJpb3JpdHkJPSAzMDAsCisJLmNyYV9mbGFncwk9IENSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSIHwgQ1JZUFRPX0FMR19BU1lOQywKKwkuY3JhX2Jsb2Nrc2l6ZQk9IEFFU19CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgbXZfY3R4KSwKKwkuY3JhX2FsaWdubWFzawk9IDAsCisJLmNyYV90eXBlCT0gJmNyeXB0b19hYmxrY2lwaGVyX3R5cGUsCisJLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKKwkuY3JhX2luaXQJPSBtdl9jcmFfaW5pdCwKKwkuY3JhX3UJCT0geworCQkuYWJsa2NpcGhlciA9IHsKKwkJCS5pdnNpemUJCT0JQUVTX0JMT0NLX1NJWkUsCisJCQkubWluX2tleXNpemUJPQlBRVNfTUlOX0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCT0JQUVTX01BWF9LRVlfU0laRSwKKwkJCS5zZXRrZXkJCT0JbXZfc2V0a2V5X2FlcywKKwkJCS5lbmNyeXB0CT0JbXZfZW5jX2Flc19jYmMsCisJCQkuZGVjcnlwdAk9CW12X2RlY19hZXNfY2JjLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IG12X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGNyeXB0b19wcml2ICpjcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCWludCByZXQ7CisKKwlpZiAoY3BnKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU2Vjb25kIGNyeXB0byBkZXY/XG4iKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInJlZ3MiKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTlhJTzsKKworCWNwID0ga3phbGxvYyhzaXplb2YoKmNwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5pdCgmY3AtPmxvY2spOworCWNyeXB0b19pbml0X3F1ZXVlKCZjcC0+cXVldWUsIDUwKTsKKwljcC0+cmVnID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoIWNwLT5yZWcpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInNyYW0iKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX3VubWFwX3JlZzsKKwl9CisJY3AtPnNyYW1fc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJY3AtPm1heF9yZXFfc2l6ZSA9IGNwLT5zcmFtX3NpemUgLSBTUkFNX0NGR19TUEFDRTsKKwljcC0+c3JhbSA9IGlvcmVtYXAocmVzLT5zdGFydCwgY3AtPnNyYW1fc2l6ZSk7CisJaWYgKCFjcC0+c3JhbSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl91bm1hcF9yZWc7CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCB8fCBpcnEgPT0gTk9fSVJRKSB7CisJCXJldCA9IGlycTsKKwkJZ290byBlcnJfdW5tYXBfc3JhbTsKKwl9CisJY3AtPmlycSA9IGlycTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNwKTsKKwljcGcgPSBjcDsKKworCWNwLT5xdWV1ZV90aCA9IGt0aHJlYWRfcnVuKHF1ZXVlX21hbmFnLCBjcCwgIm12X2NyeXB0byIpOworCWlmIChJU19FUlIoY3AtPnF1ZXVlX3RoKSkgeworCQlyZXQgPSBQVFJfRVJSKGNwLT5xdWV1ZV90aCk7CisJCWdvdG8gZXJyX3RocmVhZDsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGNyeXB0b19pbnQsIElSUUZfRElTQUJMRUQsIGRldl9uYW1lKCZwZGV2LT5kZXYpLAorCQkJY3ApOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3VubWFwX3NyYW07CisKKwl3cml0ZWwoU0VDX0lOVF9BQ0NFTDBfRE9ORSwgY3BnLT5yZWcgKyBTRUNfQUNDRUxfSU5UX01BU0spOworCXdyaXRlbChTRUNfQ0ZHX1NUT1BfRElHX0VSUiwgY3BnLT5yZWcgKyBTRUNfQUNDRUxfQ0ZHKTsKKworCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJm12X2Flc19hbGdfZWNiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWc7CisKKwlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZtdl9hZXNfYWxnX2NiYyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfdW5yZWdfZWNiOworCXJldHVybiAwOworZXJyX3VucmVnX2VjYjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJm12X2Flc19hbGdfZWNiKTsKK2Vycl90aHJlYWQ6CisJZnJlZV9pcnEoaXJxLCBjcCk7CitlcnJfcmVnOgorCWt0aHJlYWRfc3RvcChjcC0+cXVldWVfdGgpOworZXJyX3VubWFwX3NyYW06CisJaW91bm1hcChjcC0+c3JhbSk7CitlcnJfdW5tYXBfcmVnOgorCWlvdW5tYXAoY3AtPnJlZyk7CitlcnI6CisJa2ZyZWUoY3ApOworCWNwZyA9IE5VTEw7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgY3J5cHRvX3ByaXYgKmNwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJm12X2Flc19hbGdfZWNiKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJm12X2Flc19hbGdfY2JjKTsKKwlrdGhyZWFkX3N0b3AoY3AtPnF1ZXVlX3RoKTsKKwlmcmVlX2lycShjcC0+aXJxLCBjcCk7CisJbWVtc2V0KGNwLT5zcmFtLCAwLCBjcC0+c3JhbV9zaXplKTsKKwlpb3VubWFwKGNwLT5zcmFtKTsKKwlpb3VubWFwKGNwLT5yZWcpOworCWtmcmVlKGNwKTsKKwljcGcgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYXJ2ZWxsX2NyeXB0byA9IHsKKwkucHJvYmUJCT0gbXZfcHJvYmUsCisJLnJlbW92ZQkJPSBtdl9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJtdl9jcnlwdG8iLAorCX0sCit9OworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptdl9jcnlwdG8iKTsKKworc3RhdGljIGludCBfX2luaXQgbXZfY3J5cHRvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYXJ2ZWxsX2NyeXB0byk7Cit9Cittb2R1bGVfaW5pdChtdl9jcnlwdG9faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdl9jcnlwdG9fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYXJ2ZWxsX2NyeXB0byk7Cit9Cittb2R1bGVfZXhpdChtdl9jcnlwdG9fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlNlYmFzdGlhbiBBbmRyemVqIFNpZXdpb3IgPHNlYmFzdGlhbkBicmVha3BvaW50LmNjPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBwb3J0IGZvciBNYXJ2ZWxsJ3MgY3J5cHRvZ3JhcGhpYyBlbmdpbmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL212X2Nlc2EuaCBiL2RyaXZlcnMvY3J5cHRvL212X2Nlc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2UyNWQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vbXZfY2VzYS5oCkBAIC0wLDAgKzEsMTE5IEBACisjaWZuZGVmIF9fTVZfQ1JZUFRPX0hfXworCisjZGVmaW5lIERJR0VTVF9JTklUSUFMX1ZBTF9BCTB4ZGQwMAorI2RlZmluZSBERVNfQ01EX1JFRwkJMHhkZDU4CisKKyNkZWZpbmUgU0VDX0FDQ0VMX0NNRAkJMHhkZTAwCisjZGVmaW5lIFNFQ19DTURfRU5fU0VDX0FDQ0wwCSgxIDw8IDApCisjZGVmaW5lIFNFQ19DTURfRU5fU0VDX0FDQ0wxCSgxIDw8IDEpCisjZGVmaW5lIFNFQ19DTURfRElTQUJMRV9TRUMJKDEgPDwgMikKKworI2RlZmluZSBTRUNfQUNDRUxfREVTQ19QMAkweGRlMDQKKyNkZWZpbmUgU0VDX0RFU0NfUDBfUFRSKHgpCSh4KQorCisjZGVmaW5lIFNFQ19BQ0NFTF9ERVNDX1AxCTB4ZGUxNAorI2RlZmluZSBTRUNfREVTQ19QMV9QVFIoeCkJKHgpCisKKyNkZWZpbmUgU0VDX0FDQ0VMX0NGRwkJMHhkZTA4CisjZGVmaW5lIFNFQ19DRkdfU1RPUF9ESUdfRVJSCSgxIDw8IDApCisjZGVmaW5lIFNFQ19DRkdfQ0gwX1dfSURNQQkoMSA8PCA3KQorI2RlZmluZSBTRUNfQ0ZHX0NIMV9XX0lETUEJKDEgPDwgOCkKKyNkZWZpbmUgU0VDX0NGR19BQ1RfQ0gwX0lETUEJKDEgPDwgOSkKKyNkZWZpbmUgU0VDX0NGR19BQ1RfQ0gxX0lETUEJKDEgPDwgMTApCisKKyNkZWZpbmUgU0VDX0FDQ0VMX1NUQVRVUwkweGRlMGMKKyNkZWZpbmUgU0VDX1NUX0FDVF8wCQkoMSA8PCAwKQorI2RlZmluZSBTRUNfU1RfQUNUXzEJCSgxIDw8IDEpCisKKy8qCisgKiBGUEdBX0lOVF9TVEFUVVMgbG9va3MgbGlrZSBhIEZQR0EgbGVmdG92ZXIgYW5kIGlzIGRvY3VtZW50ZWQgb25seSBpbiBFcnJhdGEKKyAqIDQuMTIuIEl0IGxvb2tzIGxpa2UgdGhhdCBpdCB3YXMgcGFydCBvZiBhbiBJUlEtY29udHJvbGxlciBpbiBGUEdBIGFuZAorICogc29tZW9uZSBmb3Jnb3QgdG8gcmVtb3ZlICBpdCB3aGlsZSBzd2l0Y2hpbmcgdG8gdGhlIGNvcmUgYW5kIG1vdmluZyB0bworICogU0VDX0FDQ0VMX0lOVF9TVEFUVVMuCisgKi8KKyNkZWZpbmUgRlBHQV9JTlRfU1RBVFVTCQkweGRkNjgKKyNkZWZpbmUgU0VDX0FDQ0VMX0lOVF9TVEFUVVMJMHhkZTIwCisjZGVmaW5lIFNFQ19JTlRfQVVUSF9ET05FCSgxIDw8IDApCisjZGVmaW5lIFNFQ19JTlRfREVTX0VfRE9ORQkoMSA8PCAxKQorI2RlZmluZSBTRUNfSU5UX0FFU19FX0RPTkUJKDEgPDwgMikKKyNkZWZpbmUgU0VDX0lOVF9BRVNfRF9ET05FCSgxIDw8IDMpCisjZGVmaW5lIFNFQ19JTlRfRU5DX0RPTkUJKDEgPDwgNCkKKyNkZWZpbmUgU0VDX0lOVF9BQ0NFTDBfRE9ORQkoMSA8PCA1KQorI2RlZmluZSBTRUNfSU5UX0FDQ0VMMV9ET05FCSgxIDw8IDYpCisjZGVmaW5lIFNFQ19JTlRfQUNDMF9JRE1BX0RPTkUJKDEgPDwgNykKKyNkZWZpbmUgU0VDX0lOVF9BQ0MxX0lETUFfRE9ORQkoMSA8PCA4KQorCisjZGVmaW5lIFNFQ19BQ0NFTF9JTlRfTUFTSwkweGRlMjQKKworI2RlZmluZSBBRVNfS0VZX0xFTgkoOCAqIDQpCisKK3N0cnVjdCBzZWNfYWNjZWxfY29uZmlnIHsKKworCXUzMiBjb25maWc7CisjZGVmaW5lIENGR19PUF9NQUNfT05MWQkJMAorI2RlZmluZSBDRkdfT1BfQ1JZUFRfT05MWQkxCisjZGVmaW5lIENGR19PUF9NQUNfQ1JZUFQJMgorI2RlZmluZSBDRkdfT1BfQ1JZUFRfTUFDCTMKKyNkZWZpbmUgQ0ZHX01BQ01fTUQ1CQkoNCA8PCA0KQorI2RlZmluZSBDRkdfTUFDTV9TSEExCQkoNSA8PCA0KQorI2RlZmluZSBDRkdfTUFDTV9ITUFDX01ENQkoNiA8PCA0KQorI2RlZmluZSBDRkdfTUFDTV9ITUFDX1NIQTEJKDcgPDwgNCkKKyNkZWZpbmUgQ0ZHX0VOQ01fREVTCQkoMSA8PCA4KQorI2RlZmluZSBDRkdfRU5DTV8zREVTCQkoMiA8PCA4KQorI2RlZmluZSBDRkdfRU5DTV9BRVMJCSgzIDw8IDgpCisjZGVmaW5lIENGR19ESVJfRU5DCQkoMCA8PCAxMikKKyNkZWZpbmUgQ0ZHX0RJUl9ERUMJCSgxIDw8IDEyKQorI2RlZmluZSBDRkdfRU5DX01PREVfRUNCCSgwIDw8IDE2KQorI2RlZmluZSBDRkdfRU5DX01PREVfQ0JDCSgxIDw8IDE2KQorI2RlZmluZSBDRkdfM0RFU19FRUUJCSgwIDw8IDIwKQorI2RlZmluZSBDRkdfM0RFU19FREUJCSgxIDw8IDIwKQorI2RlZmluZSBDRkdfQUVTX0xFTl8xMjgJCSgwIDw8IDI0KQorI2RlZmluZSBDRkdfQUVTX0xFTl8xOTIJCSgxIDw8IDI0KQorI2RlZmluZSBDRkdfQUVTX0xFTl8yNTYJCSgyIDw8IDI0KQorCisJdTMyIGVuY19wOworI2RlZmluZSBFTkNfUF9TUkMoeCkJCSh4KQorI2RlZmluZSBFTkNfUF9EU1QoeCkJCSgoeCkgPDwgMTYpCisKKwl1MzIgZW5jX2xlbjsKKyNkZWZpbmUgRU5DX0xFTih4KQkJKHgpCisKKwl1MzIgZW5jX2tleV9wOworI2RlZmluZSBFTkNfS0VZX1AoeCkJCSh4KQorCisJdTMyIGVuY19pdjsKKyNkZWZpbmUgRU5DX0lWX1BPSU5UKHgpCQkoKHgpIDw8IDApCisjZGVmaW5lIEVOQ19JVl9CVUZfUE9JTlQoeCkJKCh4KSA8PCAxNikKKworCXUzMiBtYWNfc3JjX3A7CisjZGVmaW5lIE1BQ19TUkNfREFUQV9QKHgpCSh4KQorI2RlZmluZSBNQUNfU1JDX1RPVEFMX0xFTih4KQkoKHgpIDw8IDE2KQorCisJdTMyIG1hY19kaWdlc3Q7CisJdTMyIG1hY19pdjsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJLyoKKwkgKiAvLS0tLS0tLS0tLS1cIDAKKwkgKiB8IEFDQ0VMIENGRyB8CTQgKiA4CisJICogfC0tLS0tLS0tLS0tfCAweDIwCisJICogfCBDUllQVCBLRVkgfAk4ICogNAorCSAqIHwtLS0tLS0tLS0tLXwgMHg0MAorCSAqIHwgIElWICAgSU4gIHwJNCAqIDQKKwkgKiB8LS0tLS0tLS0tLS18IDB4NDAgKGlucGxhY2UpCisJICogfCAgSVYgQlVGICAgfAk0ICogNAorCSAqIHwtLS0tLS0tLS0tLXwgMHg1MAorCSAqIHwgIERBVEEgSU4gIHwJMTYgKiB4IChtYXggLT5tYXhfcmVxX3NpemUpCisJICogfC0tLS0tLS0tLS0tfCAweDUwIChpbnBsYWNlIG9wZXJhdGlvbikKKwkgKiB8ICBEQVRBIE9VVCB8CTE2ICogeCAobWF4IC0+bWF4X3JlcV9zaXplKQorCSAqIFwtLS0tLS0tLS0tLS8gU1JBTSBzaXplCisJICovCisjZGVmaW5lIFNSQU1fQ09ORklHCQkweDAwCisjZGVmaW5lIFNSQU1fREFUQV9LRVlfUAkJMHgyMAorI2RlZmluZSBTUkFNX0RBVEFfSVYJCTB4NDAKKyNkZWZpbmUgU1JBTV9EQVRBX0lWX0JVRgkweDQwCisjZGVmaW5lIFNSQU1fREFUQV9JTl9TVEFSVAkweDUwCisjZGVmaW5lIFNSQU1fREFUQV9PVVRfU1RBUlQJMHg1MAorCisjZGVmaW5lIFNSQU1fQ0ZHX1NQQUNFCQkweDUwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKaW5kZXggYTJjOGU4NS4uNzZjYjZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYworKysgYi9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCkBAIC0xMiw4MSArMTIsNDMgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgogI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9jcnlwdG9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxhc20vaTM4Ny5oPgogI2luY2x1ZGUgInBhZGxvY2suaCIKIAotI2RlZmluZSBTSEExX0RFRkFVTFRfRkFMTEJBQ0sJInNoYTEtZ2VuZXJpYyIKLSNkZWZpbmUgU0hBMjU2X0RFRkFVTFRfRkFMTEJBQ0sgInNoYTI1Ni1nZW5lcmljIgotCi1zdHJ1Y3QgcGFkbG9ja19zaGFfY3R4IHsKLQljaGFyCQkqZGF0YTsKLQlzaXplX3QJCXVzZWQ7Ci0JaW50CQlieXBhc3M7Ci0Jdm9pZCAoKmZfc2hhX3BhZGxvY2spKGNvbnN0IGNoYXIgKmluLCBjaGFyICpvdXQsIGludCBjb3VudCk7Ci0Jc3RydWN0IGhhc2hfZGVzYyBmYWxsYmFjazsKK3N0cnVjdCBwYWRsb2NrX3NoYV9kZXNjIHsKKwlzdHJ1Y3Qgc2hhc2hfZGVzYyBmYWxsYmFjazsKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZGxvY2tfc2hhX2N0eCAqY3R4KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdHJ1Y3QgcGFkbG9ja19zaGFfY3R4IHsKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICpmYWxsYmFjazsKK307CisKK3N0YXRpYyBpbnQgcGFkbG9ja19zaGFfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKIHsKLQlyZXR1cm4gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBwYWRsb2NrX3NoYV9jdHggKmN0eCA9IGNyeXB0b19zaGFzaF9jdHgoZGVzYy0+dGZtKTsKKworCWRjdHgtPmZhbGxiYWNrLnRmbSA9IGN0eC0+ZmFsbGJhY2s7CisJZGN0eC0+ZmFsbGJhY2suZmxhZ3MgPSBkZXNjLT5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKKwlyZXR1cm4gY3J5cHRvX3NoYXNoX2luaXQoJmRjdHgtPmZhbGxiYWNrKTsKIH0KIAotLyogV2UnbGwgbmVlZCBhbGlnbmVkIGFkZHJlc3Mgb24gdGhlIHN0YWNrICovCi0jZGVmaW5lIE5FQVJFU1RfQUxJR05FRChwdHIpIFwKLQkoKHZvaWQgKilBTElHTigoc2l6ZV90KShwdHIpLCBQQURMT0NLX0FMSUdOTUVOVCkpCi0KLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBzaGExX2FsZywgc2hhMjU2X2FsZzsKLQotc3RhdGljIHZvaWQgcGFkbG9ja19zaGFfYnlwYXNzKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHBhZGxvY2tfc2hhX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywKKwkJCSAgICAgIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewotCWlmIChjdHgodGZtKS0+YnlwYXNzKQotCQlyZXR1cm47CisJc3RydWN0IHBhZGxvY2tfc2hhX2Rlc2MgKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAotCWNyeXB0b19oYXNoX2luaXQoJmN0eCh0Zm0pLT5mYWxsYmFjayk7Ci0JaWYgKGN0eCh0Zm0pLT5kYXRhICYmIGN0eCh0Zm0pLT51c2VkKSB7Ci0JCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKLQotCQlzZ19pbml0X29uZSgmc2csIGN0eCh0Zm0pLT5kYXRhLCBjdHgodGZtKS0+dXNlZCk7Ci0JCWNyeXB0b19oYXNoX3VwZGF0ZSgmY3R4KHRmbSktPmZhbGxiYWNrLCAmc2csIHNnLmxlbmd0aCk7Ci0JfQotCi0JY3R4KHRmbSktPnVzZWQgPSAwOwotCWN0eCh0Zm0pLT5ieXBhc3MgPSAxOwotfQotCi1zdGF0aWMgdm9pZCBwYWRsb2NrX3NoYV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCi17Ci0JY3R4KHRmbSktPnVzZWQgPSAwOwotCWN0eCh0Zm0pLT5ieXBhc3MgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBwYWRsb2NrX3NoYV91cGRhdGUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKLQkJCWNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0JLyogT3VyIGJ1ZmZlciBpcyBhbHdheXMgb25lIHBhZ2UuICovCi0JaWYgKHVubGlrZWx5KCFjdHgodGZtKS0+YnlwYXNzICYmCi0JCSAgICAgKGN0eCh0Zm0pLT51c2VkICsgbGVuZ3RoID4gUEFHRV9TSVpFKSkpCi0JCXBhZGxvY2tfc2hhX2J5cGFzcyh0Zm0pOwotCi0JaWYgKHVubGlrZWx5KGN0eCh0Zm0pLT5ieXBhc3MpKSB7Ci0JCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKLQkJc2dfaW5pdF9vbmUoJnNnLCAodWludDhfdCAqKWRhdGEsIGxlbmd0aCk7Ci0JCWNyeXB0b19oYXNoX3VwZGF0ZSgmY3R4KHRmbSktPmZhbGxiYWNrLCAmc2csIGxlbmd0aCk7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1jcHkoY3R4KHRmbSktPmRhdGEgKyBjdHgodGZtKS0+dXNlZCwgZGF0YSwgbGVuZ3RoKTsKLQljdHgodGZtKS0+dXNlZCArPSBsZW5ndGg7CisJZGN0eC0+ZmFsbGJhY2suZmxhZ3MgPSBkZXNjLT5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKKwlyZXR1cm4gY3J5cHRvX3NoYXNoX3VwZGF0ZSgmZGN0eC0+ZmFsbGJhY2ssIGRhdGEsIGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwYWRsb2NrX291dHB1dF9ibG9jayh1aW50MzJfdCAqc3JjLApAQCAtOTYsMTY1ICs1OCwyMDYgQEAKIAkJKmRzdCsrID0gc3dhYjMyKCpzcmMrKyk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhZGxvY2tfZG9fc2hhMShjb25zdCBjaGFyICppbiwgY2hhciAqb3V0LCBpbnQgY291bnQpCitzdGF0aWMgaW50IHBhZGxvY2tfc2hhMV9maW51cChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3QgdTggKmluLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNvdW50LCB1OCAqb3V0KQogewogCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KIAkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCiAJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLwotCWNoYXIgYnVmWzEyOCsxNl07Ci0JY2hhciAqcmVzdWx0ID0gTkVBUkVTVF9BTElHTkVEKGJ1Zik7CisJY2hhciByZXN1bHRbMTI4XSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChQQURMT0NLX0FMSUdOTUVOVCkpKTsKKwlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBzaGExX3N0YXRlIHN0YXRlOworCXVuc2lnbmVkIGludCBzcGFjZTsKKwl1bnNpZ25lZCBpbnQgbGVmdG92ZXI7CiAJaW50IHRzX3N0YXRlOworCWludCBlcnI7CiAKLQkoKHVpbnQzMl90ICopcmVzdWx0KVswXSA9IFNIQTFfSDA7Ci0JKCh1aW50MzJfdCAqKXJlc3VsdClbMV0gPSBTSEExX0gxOwotCSgodWludDMyX3QgKilyZXN1bHQpWzJdID0gU0hBMV9IMjsKLQkoKHVpbnQzMl90ICopcmVzdWx0KVszXSA9IFNIQTFfSDM7Ci0JKCh1aW50MzJfdCAqKXJlc3VsdClbNF0gPSBTSEExX0g0OwotIAorCWRjdHgtPmZhbGxiYWNrLmZsYWdzID0gZGVzYy0+ZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisJZXJyID0gY3J5cHRvX3NoYXNoX2V4cG9ydCgmZGN0eC0+ZmFsbGJhY2ssICZzdGF0ZSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlpZiAoc3RhdGUuY291bnQgKyBjb3VudCA+IFVMT05HX01BWCkKKwkJcmV0dXJuIGNyeXB0b19zaGFzaF9maW51cCgmZGN0eC0+ZmFsbGJhY2ssIGluLCBjb3VudCwgb3V0KTsKKworCWxlZnRvdmVyID0gKChzdGF0ZS5jb3VudCAtIDEpICYgKFNIQTFfQkxPQ0tfU0laRSAtIDEpKSArIDE7CisJc3BhY2UgPSAgU0hBMV9CTE9DS19TSVpFIC0gbGVmdG92ZXI7CisJaWYgKHNwYWNlKSB7CisJCWlmIChjb3VudCA+IHNwYWNlKSB7CisJCQllcnIgPSBjcnlwdG9fc2hhc2hfdXBkYXRlKCZkY3R4LT5mYWxsYmFjaywgaW4sIHNwYWNlKSA/OgorCQkJICAgICAgY3J5cHRvX3NoYXNoX2V4cG9ydCgmZGN0eC0+ZmFsbGJhY2ssICZzdGF0ZSk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OworCQkJY291bnQgLT0gc3BhY2U7CisJCQlpbiArPSBzcGFjZTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShzdGF0ZS5idWZmZXIgKyBsZWZ0b3ZlciwgaW4sIGNvdW50KTsKKwkJCWluID0gc3RhdGUuYnVmZmVyOworCQkJY291bnQgKz0gbGVmdG92ZXI7CisJCQlzdGF0ZS5jb3VudCAmPSB+KFNIQTFfQkxPQ0tfU0laRSAtIDEpOworCQl9CisJfQorCisJbWVtY3B5KHJlc3VsdCwgJnN0YXRlLnN0YXRlLCBTSEExX0RJR0VTVF9TSVpFKTsKKwogCS8qIHByZXZlbnQgdGFraW5nIHRoZSBzcHVyaW91cyBETkEgZmF1bHQgd2l0aCBwYWRsb2NrLiAqLwogCXRzX3N0YXRlID0gaXJxX3RzX3NhdmUoKTsKIAlhc20gdm9sYXRpbGUgKCIuYnl0ZSAweGYzLDB4MGYsMHhhNiwweGM4IiAvKiByZXAgeHNoYTEgKi8KLQkJICAgICAgOiAiK1MiKGluKSwgIitEIihyZXN1bHQpCi0JCSAgICAgIDogImMiKGNvdW50KSwgImEiKDApKTsKKwkJICAgICAgOiBcCisJCSAgICAgIDogImMiKCh1bnNpZ25lZCBsb25nKXN0YXRlLmNvdW50ICsgY291bnQpLCBcCisJCQkiYSIoKHVuc2lnbmVkIGxvbmcpc3RhdGUuY291bnQpLCBcCisJCQkiUyIoaW4pLCAiRCIocmVzdWx0KSk7CiAJaXJxX3RzX3Jlc3RvcmUodHNfc3RhdGUpOwogCiAJcGFkbG9ja19vdXRwdXRfYmxvY2soKHVpbnQzMl90ICopcmVzdWx0LCAodWludDMyX3QgKilvdXQsIDUpOworCitvdXQ6CisJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgcGFkbG9ja19kb19zaGEyNTYoY29uc3QgY2hhciAqaW4sIGNoYXIgKm91dCwgaW50IGNvdW50KQorc3RhdGljIGludCBwYWRsb2NrX3NoYTFfZmluYWwoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHU4ICpvdXQpCit7CisJdTggYnVmWzRdOworCisJcmV0dXJuIHBhZGxvY2tfc2hhMV9maW51cChkZXNjLCBidWYsIDAsIG91dCk7Cit9CisKK3N0YXRpYyBpbnQgcGFkbG9ja19zaGEyNTZfZmludXAoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICppbiwKKwkJCQl1bnNpZ25lZCBpbnQgY291bnQsIHU4ICpvdXQpCiB7CiAJLyogV2UgY2FuJ3Qgc3RvcmUgZGlyZWN0bHkgdG8gKm91dCBhcyBpdCBtYXkgYmUgdW5hbGlnbmVkLiAqLwogCS8qIEJUVyBEb24ndCByZWR1Y2UgdGhlIGJ1ZmZlciBzaXplIGJlbG93IDEyOCBCeXRlcyEKIAkgKiAgICAgUGFkTG9jayBtaWNyb2NvZGUgbmVlZHMgaXQgdGhhdCBiaWcuICovCi0JY2hhciBidWZbMTI4KzE2XTsKLQljaGFyICpyZXN1bHQgPSBORUFSRVNUX0FMSUdORUQoYnVmKTsKKwljaGFyIHJlc3VsdFsxMjhdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKFBBRExPQ0tfQUxJR05NRU5UKSkpOworCXN0cnVjdCBwYWRsb2NrX3NoYV9kZXNjICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJc3RydWN0IHNoYTI1Nl9zdGF0ZSBzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgc3BhY2U7CisJdW5zaWduZWQgaW50IGxlZnRvdmVyOwogCWludCB0c19zdGF0ZTsKKwlpbnQgZXJyOwogCi0JKCh1aW50MzJfdCAqKXJlc3VsdClbMF0gPSBTSEEyNTZfSDA7Ci0JKCh1aW50MzJfdCAqKXJlc3VsdClbMV0gPSBTSEEyNTZfSDE7Ci0JKCh1aW50MzJfdCAqKXJlc3VsdClbMl0gPSBTSEEyNTZfSDI7Ci0JKCh1aW50MzJfdCAqKXJlc3VsdClbM10gPSBTSEEyNTZfSDM7Ci0JKCh1aW50MzJfdCAqKXJlc3VsdClbNF0gPSBTSEEyNTZfSDQ7Ci0JKCh1aW50MzJfdCAqKXJlc3VsdClbNV0gPSBTSEEyNTZfSDU7Ci0JKCh1aW50MzJfdCAqKXJlc3VsdClbNl0gPSBTSEEyNTZfSDY7Ci0JKCh1aW50MzJfdCAqKXJlc3VsdClbN10gPSBTSEEyNTZfSDc7CisJZGN0eC0+ZmFsbGJhY2suZmxhZ3MgPSBkZXNjLT5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKKwllcnIgPSBjcnlwdG9fc2hhc2hfZXhwb3J0KCZkY3R4LT5mYWxsYmFjaywgJnN0YXRlKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWlmIChzdGF0ZS5jb3VudCArIGNvdW50ID4gVUxPTkdfTUFYKQorCQlyZXR1cm4gY3J5cHRvX3NoYXNoX2ZpbnVwKCZkY3R4LT5mYWxsYmFjaywgaW4sIGNvdW50LCBvdXQpOworCisJbGVmdG92ZXIgPSAoKHN0YXRlLmNvdW50IC0gMSkgJiAoU0hBMjU2X0JMT0NLX1NJWkUgLSAxKSkgKyAxOworCXNwYWNlID0gIFNIQTI1Nl9CTE9DS19TSVpFIC0gbGVmdG92ZXI7CisJaWYgKHNwYWNlKSB7CisJCWlmIChjb3VudCA+IHNwYWNlKSB7CisJCQllcnIgPSBjcnlwdG9fc2hhc2hfdXBkYXRlKCZkY3R4LT5mYWxsYmFjaywgaW4sIHNwYWNlKSA/OgorCQkJICAgICAgY3J5cHRvX3NoYXNoX2V4cG9ydCgmZGN0eC0+ZmFsbGJhY2ssICZzdGF0ZSk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OworCQkJY291bnQgLT0gc3BhY2U7CisJCQlpbiArPSBzcGFjZTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShzdGF0ZS5idWYgKyBsZWZ0b3ZlciwgaW4sIGNvdW50KTsKKwkJCWluID0gc3RhdGUuYnVmOworCQkJY291bnQgKz0gbGVmdG92ZXI7CisJCQlzdGF0ZS5jb3VudCAmPSB+KFNIQTFfQkxPQ0tfU0laRSAtIDEpOworCQl9CisJfQorCisJbWVtY3B5KHJlc3VsdCwgJnN0YXRlLnN0YXRlLCBTSEEyNTZfRElHRVNUX1NJWkUpOwogCiAJLyogcHJldmVudCB0YWtpbmcgdGhlIHNwdXJpb3VzIEROQSBmYXVsdCB3aXRoIHBhZGxvY2suICovCiAJdHNfc3RhdGUgPSBpcnFfdHNfc2F2ZSgpOwogCWFzbSB2b2xhdGlsZSAoIi5ieXRlIDB4ZjMsMHgwZiwweGE2LDB4ZDAiIC8qIHJlcCB4c2hhMjU2ICovCi0JCSAgICAgIDogIitTIihpbiksICIrRCIocmVzdWx0KQotCQkgICAgICA6ICJjIihjb3VudCksICJhIigwKSk7CisJCSAgICAgIDogXAorCQkgICAgICA6ICJjIigodW5zaWduZWQgbG9uZylzdGF0ZS5jb3VudCArIGNvdW50KSwgXAorCQkJImEiKCh1bnNpZ25lZCBsb25nKXN0YXRlLmNvdW50KSwgXAorCQkJIlMiKGluKSwgIkQiKHJlc3VsdCkpOwogCWlycV90c19yZXN0b3JlKHRzX3N0YXRlKTsKIAogCXBhZGxvY2tfb3V0cHV0X2Jsb2NrKCh1aW50MzJfdCAqKXJlc3VsdCwgKHVpbnQzMl90ICopb3V0LCA4KTsKKworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHBhZGxvY2tfc2hhX2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHVpbnQ4X3QgKm91dCkKK3N0YXRpYyBpbnQgcGFkbG9ja19zaGEyNTZfZmluYWwoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHU4ICpvdXQpCiB7Ci0JaWYgKHVubGlrZWx5KGN0eCh0Zm0pLT5ieXBhc3MpKSB7Ci0JCWNyeXB0b19oYXNoX2ZpbmFsKCZjdHgodGZtKS0+ZmFsbGJhY2ssIG91dCk7Ci0JCWN0eCh0Zm0pLT5ieXBhc3MgPSAwOwotCQlyZXR1cm47Ci0JfQorCXU4IGJ1Zls0XTsKIAotCS8qIFBhc3MgdGhlIGlucHV0IGJ1ZmZlciB0byBQYWRMb2NrIG1pY3JvY29kZS4uLiAqLwotCWN0eCh0Zm0pLT5mX3NoYV9wYWRsb2NrKGN0eCh0Zm0pLT5kYXRhLCBvdXQsIGN0eCh0Zm0pLT51c2VkKTsKLQotCWN0eCh0Zm0pLT51c2VkID0gMDsKKwlyZXR1cm4gcGFkbG9ja19zaGEyNTZfZmludXAoZGVzYywgYnVmLCAwLCBvdXQpOwogfQogCiBzdGF0aWMgaW50IHBhZGxvY2tfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICpoYXNoID0gX19jcnlwdG9fc2hhc2hfY2FzdCh0Zm0pOwogCWNvbnN0IGNoYXIgKmZhbGxiYWNrX2RyaXZlcl9uYW1lID0gdGZtLT5fX2NydF9hbGctPmNyYV9uYW1lOwotCXN0cnVjdCBjcnlwdG9faGFzaCAqZmFsbGJhY2tfdGZtOwotCi0JLyogRm9yIG5vdyB3ZSdsbCBhbGxvY2F0ZSBvbmUgcGFnZS4gVGhpcwotCSAqIGNvdWxkIGV2ZW50dWFsbHkgYmUgY29uZmlndXJhYmxlIG9uZSBkYXkuICovCi0JY3R4KHRmbSktPmRhdGEgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIWN0eCh0Zm0pLT5kYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKKwlzdHJ1Y3QgcGFkbG9ja19zaGFfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBjcnlwdG9fc2hhc2ggKmZhbGxiYWNrX3RmbTsKKwlpbnQgZXJyID0gLUVOT01FTTsKIAogCS8qIEFsbG9jYXRlIGEgZmFsbGJhY2sgYW5kIGFib3J0IGlmIGl0IGZhaWxlZC4gKi8KLQlmYWxsYmFja190Zm0gPSBjcnlwdG9fYWxsb2NfaGFzaChmYWxsYmFja19kcml2ZXJfbmFtZSwgMCwKLQkJCQkJIENSWVBUT19BTEdfQVNZTkMgfAotCQkJCQkgQ1JZUFRPX0FMR19ORUVEX0ZBTExCQUNLKTsKKwlmYWxsYmFja190Zm0gPSBjcnlwdG9fYWxsb2Nfc2hhc2goZmFsbGJhY2tfZHJpdmVyX25hbWUsIDAsCisJCQkJCSAgQ1JZUFRPX0FMR19ORUVEX0ZBTExCQUNLKTsKIAlpZiAoSVNfRVJSKGZhbGxiYWNrX3RmbSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkZhbGxiYWNrIGRyaXZlciAnJXMnIGNvdWxkIG5vdCBiZSBsb2FkZWQhXG4iLAogCQkgICAgICAgZmFsbGJhY2tfZHJpdmVyX25hbWUpOwotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpKGN0eCh0Zm0pLT5kYXRhKSk7Ci0JCXJldHVybiBQVFJfRVJSKGZhbGxiYWNrX3RmbSk7CisJCWVyciA9IFBUUl9FUlIoZmFsbGJhY2tfdGZtKTsKKwkJZ290byBvdXQ7CiAJfQogCi0JY3R4KHRmbSktPmZhbGxiYWNrLnRmbSA9IGZhbGxiYWNrX3RmbTsKKwljdHgtPmZhbGxiYWNrID0gZmFsbGJhY2tfdGZtOworCWhhc2gtPmRlc2NzaXplICs9IGNyeXB0b19zaGFzaF9kZXNjc2l6ZShmYWxsYmFja190Zm0pOwogCXJldHVybiAwOwotfQogCi1zdGF0aWMgaW50IHBhZGxvY2tfc2hhMV9jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQotewotCWN0eCh0Zm0pLT5mX3NoYV9wYWRsb2NrID0gcGFkbG9ja19kb19zaGExOwotCi0JcmV0dXJuIHBhZGxvY2tfY3JhX2luaXQodGZtKTsKLX0KLQotc3RhdGljIGludCBwYWRsb2NrX3NoYTI1Nl9jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQotewotCWN0eCh0Zm0pLT5mX3NoYV9wYWRsb2NrID0gcGFkbG9ja19kb19zaGEyNTY7Ci0KLQlyZXR1cm4gcGFkbG9ja19jcmFfaW5pdCh0Zm0pOworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIHBhZGxvY2tfY3JhX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKLQlpZiAoY3R4KHRmbSktPmRhdGEpIHsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShjdHgodGZtKS0+ZGF0YSkpOwotCQljdHgodGZtKS0+ZGF0YSA9IE5VTEw7Ci0JfQorCXN0cnVjdCBwYWRsb2NrX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAKLQljcnlwdG9fZnJlZV9oYXNoKGN0eCh0Zm0pLT5mYWxsYmFjay50Zm0pOwotCWN0eCh0Zm0pLT5mYWxsYmFjay50Zm0gPSBOVUxMOworCWNyeXB0b19mcmVlX3NoYXNoKGN0eC0+ZmFsbGJhY2spOwogfQogCi1zdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgc2hhMV9hbGcgPSB7Ci0JLmNyYV9uYW1lCQk9CSJzaGExIiwKLQkuY3JhX2RyaXZlcl9uYW1lCT0JInNoYTEtcGFkbG9jayIsCi0JLmNyYV9wcmlvcml0eQkJPQlQQURMT0NLX0NSQV9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9ESUdFU1QgfAotCQkJCQlDUllQVE9fQUxHX05FRURfRkFMTEJBQ0ssCi0JLmNyYV9ibG9ja3NpemUJCT0JU0hBMV9CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IHBhZGxvY2tfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCi0JLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKHNoYTFfYWxnLmNyYV9saXN0KSwKLQkuY3JhX2luaXQJCT0JcGFkbG9ja19zaGExX2NyYV9pbml0LAotCS5jcmFfZXhpdAkJPQlwYWRsb2NrX2NyYV9leGl0LAotCS5jcmFfdQkJCT0JewotCQkuZGlnZXN0ID0gewotCQkJLmRpYV9kaWdlc3RzaXplCT0JU0hBMV9ESUdFU1RfU0laRSwKLQkJCS5kaWFfaW5pdCAgIAk9IAlwYWRsb2NrX3NoYV9pbml0LAotCQkJLmRpYV91cGRhdGUgCT0JcGFkbG9ja19zaGFfdXBkYXRlLAotCQkJLmRpYV9maW5hbCAgCT0JcGFkbG9ja19zaGFfZmluYWwsCi0JCX0KK3N0YXRpYyBzdHJ1Y3Qgc2hhc2hfYWxnIHNoYTFfYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBMV9ESUdFU1RfU0laRSwKKwkuaW5pdCAgIAk9IAlwYWRsb2NrX3NoYV9pbml0LAorCS51cGRhdGUgCT0JcGFkbG9ja19zaGFfdXBkYXRlLAorCS5maW51cCAgCT0JcGFkbG9ja19zaGExX2ZpbnVwLAorCS5maW5hbCAgCT0JcGFkbG9ja19zaGExX2ZpbmFsLAorCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyksCisJLmJhc2UJCT0JeworCQkuY3JhX25hbWUJCT0JInNoYTEiLAorCQkuY3JhX2RyaXZlcl9uYW1lCT0JInNoYTEtcGFkbG9jayIsCisJCS5jcmFfcHJpb3JpdHkJCT0JUEFETE9DS19DUkFfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNIIHwKKwkJCQkJCUNSWVBUT19BTEdfTkVFRF9GQUxMQkFDSywKKwkJLmNyYV9ibG9ja3NpemUJCT0JU0hBMV9CTE9DS19TSVpFLAorCQkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBwYWRsb2NrX3NoYV9jdHgpLAorCQkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKKwkJLmNyYV9pbml0CQk9CXBhZGxvY2tfY3JhX2luaXQsCisJCS5jcmFfZXhpdAkJPQlwYWRsb2NrX2NyYV9leGl0LAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBzaGEyNTZfYWxnID0gewotCS5jcmFfbmFtZQkJPQkic2hhMjU2IiwKLQkuY3JhX2RyaXZlcl9uYW1lCT0JInNoYTI1Ni1wYWRsb2NrIiwKLQkuY3JhX3ByaW9yaXR5CQk9CVBBRExPQ0tfQ1JBX1BSSU9SSVRZLAotCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCB8Ci0JCQkJCUNSWVBUT19BTEdfTkVFRF9GQUxMQkFDSywKLQkuY3JhX2Jsb2Nrc2l6ZQkJPQlTSEEyNTZfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBwYWRsb2NrX3NoYV9jdHgpLAotCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAotCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChzaGEyNTZfYWxnLmNyYV9saXN0KSwKLQkuY3JhX2luaXQJCT0JcGFkbG9ja19zaGEyNTZfY3JhX2luaXQsCi0JLmNyYV9leGl0CQk9CXBhZGxvY2tfY3JhX2V4aXQsCi0JLmNyYV91CQkJPQl7Ci0JCS5kaWdlc3QgPSB7Ci0JCQkuZGlhX2RpZ2VzdHNpemUJPQlTSEEyNTZfRElHRVNUX1NJWkUsCi0JCQkuZGlhX2luaXQgICAJPSAJcGFkbG9ja19zaGFfaW5pdCwKLQkJCS5kaWFfdXBkYXRlIAk9CXBhZGxvY2tfc2hhX3VwZGF0ZSwKLQkJCS5kaWFfZmluYWwgIAk9CXBhZGxvY2tfc2hhX2ZpbmFsLAotCQl9CitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBzaGEyNTZfYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBMjU2X0RJR0VTVF9TSVpFLAorCS5pbml0ICAgCT0gCXBhZGxvY2tfc2hhX2luaXQsCisJLnVwZGF0ZSAJPQlwYWRsb2NrX3NoYV91cGRhdGUsCisJLmZpbnVwICAJPQlwYWRsb2NrX3NoYTI1Nl9maW51cCwKKwkuZmluYWwgIAk9CXBhZGxvY2tfc2hhMjU2X2ZpbmFsLAorCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyksCisJLmJhc2UJCT0JeworCQkuY3JhX25hbWUJCT0JInNoYTI1NiIsCisJCS5jcmFfZHJpdmVyX25hbWUJPQkic2hhMjU2LXBhZGxvY2siLAorCQkuY3JhX3ByaW9yaXR5CQk9CVBBRExPQ0tfQ1JBX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9TSEFTSCB8CisJCQkJCQlDUllQVE9fQUxHX05FRURfRkFMTEJBQ0ssCisJCS5jcmFfYmxvY2tzaXplCQk9CVNIQTI1Nl9CTE9DS19TSVpFLAorCQkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBwYWRsb2NrX3NoYV9jdHgpLAorCQkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKKwkJLmNyYV9pbml0CQk9CXBhZGxvY2tfY3JhX2luaXQsCisJCS5jcmFfZXhpdAkJPQlwYWRsb2NrX2NyYV9leGl0LAogCX0KIH07CiAKQEAgLTI3MiwxMSArMjc1LDExIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJjID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmc2hhMV9hbGcpOworCXJjID0gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZzaGExX2FsZyk7CiAJaWYgKHJjKQogCQlnb3RvIG91dDsKIAotCXJjID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmc2hhMjU2X2FsZyk7CisJcmMgPSBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJnNoYTI1Nl9hbGcpOwogCWlmIChyYykKIAkJZ290byBvdXRfdW5yZWcxOwogCkBAIC0yODUsNyArMjg4LDcgQEAKIAlyZXR1cm4gMDsKIAogb3V0X3VucmVnMToKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnNoYTFfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhMV9hbGcpOwogb3V0OgogCXByaW50ayhLRVJOX0VSUiBQRlggIlZJQSBQYWRMb2NrIFNIQTEvU0hBMjU2IGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOwogCXJldHVybiByYzsKQEAgLTI5Myw4ICsyOTYsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcGFkbG9ja19maW5pKHZvaWQpCiB7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZzaGExX2FsZyk7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZzaGEyNTZfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhMV9hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGEyNTZfYWxnKTsKIH0KIAogbW9kdWxlX2luaXQocGFkbG9ja19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3RhbGl0b3MuYyBiL2RyaXZlcnMvY3J5cHRvL3RhbGl0b3MuYwppbmRleCBjNzA3NzVmLi5jNDdmZmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jCkBAIC04Niw2ICs4NiwyNSBAQAogCXZvaWQgKmNvbnRleHQ7CiB9OwogCisvKiBwZXItY2hhbm5lbCBmaWZvIG1hbmFnZW1lbnQgKi8KK3N0cnVjdCB0YWxpdG9zX2NoYW5uZWwgeworCS8qIHJlcXVlc3QgZmlmbyAqLworCXN0cnVjdCB0YWxpdG9zX3JlcXVlc3QgKmZpZm87CisKKwkvKiBudW1iZXIgb2YgcmVxdWVzdHMgcGVuZGluZyBpbiBjaGFubmVsIGgvdyBmaWZvICovCisJYXRvbWljX3Qgc3VibWl0X2NvdW50IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworCS8qIHJlcXVlc3Qgc3VibWlzc2lvbiAoaGVhZCkgbG9jayAqLworCXNwaW5sb2NrX3QgaGVhZF9sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwkvKiBpbmRleCB0byBuZXh0IGZyZWUgZGVzY3JpcHRvciByZXF1ZXN0ICovCisJaW50IGhlYWQ7CisKKwkvKiByZXF1ZXN0IHJlbGVhc2UgKHRhaWwpIGxvY2sgKi8KKwlzcGlubG9ja190IHRhaWxfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJLyogaW5kZXggdG8gbmV4dCBpbi1wcm9ncmVzcy9kb25lIGRlc2NyaXB0b3IgcmVxdWVzdCAqLworCWludCB0YWlsOworfTsKKwogc3RydWN0IHRhbGl0b3NfcHJpdmF0ZSB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2OwpAQCAtMTAxLDE1ICsxMjAsNiBAQAogCS8qIFNFQyBDb21wYXRpYmlsaXR5IGluZm8gKi8KIAl1bnNpZ25lZCBsb25nIGZlYXR1cmVzOwogCi0JLyogbmV4dCBjaGFubmVsIHRvIGJlIGFzc2lnbmVkIG5leHQgaW5jb21pbmcgZGVzY3JpcHRvciAqLwotCWF0b21pY190IGxhc3RfY2hhbjsKLQotCS8qIHBlci1jaGFubmVsIG51bWJlciBvZiByZXF1ZXN0cyBwZW5kaW5nIGluIGNoYW5uZWwgaC93IGZpZm8gKi8KLQlhdG9taWNfdCAqc3VibWl0X2NvdW50OwotCi0JLyogcGVyLWNoYW5uZWwgcmVxdWVzdCBmaWZvICovCi0Jc3RydWN0IHRhbGl0b3NfcmVxdWVzdCAqKmZpZm87Ci0KIAkvKgogCSAqIGxlbmd0aCBvZiB0aGUgcmVxdWVzdCBmaWZvCiAJICogZmlmb19sZW4gaXMgY2hmaWZvX2xlbiByb3VuZGVkIHVwIHRvIG5leHQgcG93ZXIgb2YgMgpAQCAtMTE3LDE1ICsxMjcsMTAgQEAKIAkgKi8KIAl1bnNpZ25lZCBpbnQgZmlmb19sZW47CiAKLQkvKiBwZXItY2hhbm5lbCBpbmRleCB0byBuZXh0IGZyZWUgZGVzY3JpcHRvciByZXF1ZXN0ICovCi0JaW50ICpoZWFkOworCXN0cnVjdCB0YWxpdG9zX2NoYW5uZWwgKmNoYW47CiAKLQkvKiBwZXItY2hhbm5lbCBpbmRleCB0byBuZXh0IGluLXByb2dyZXNzL2RvbmUgZGVzY3JpcHRvciByZXF1ZXN0ICovCi0JaW50ICp0YWlsOwotCi0JLyogcGVyLWNoYW5uZWwgcmVxdWVzdCBzdWJtaXNzaW9uIChoZWFkKSBhbmQgcmVsZWFzZSAodGFpbCkgbG9ja3MgKi8KLQlzcGlubG9ja190ICpoZWFkX2xvY2s7Ci0Jc3BpbmxvY2tfdCAqdGFpbF9sb2NrOworCS8qIG5leHQgY2hhbm5lbCB0byBiZSBhc3NpZ25lZCBuZXh0IGluY29taW5nIGRlc2NyaXB0b3IgKi8KKwlhdG9taWNfdCBsYXN0X2NoYW4gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCiAJLyogcmVxdWVzdCBjYWxsYmFjayB0YXNrbGV0ICovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IGRvbmVfdGFzazsKQEAgLTE0MSw2ICsxNDYsMTIgQEAKICNkZWZpbmUgVEFMSVRPU19GVFJfU1JDX0xJTktfVEJMX0xFTl9JTkNMVURFU19FWFRFTlQgMHgwMDAwMDAwMQogI2RlZmluZSBUQUxJVE9TX0ZUUl9IV19BVVRIX0NIRUNLIDB4MDAwMDAwMDIKIAorc3RhdGljIHZvaWQgdG9fdGFsaXRvc19wdHIoc3RydWN0IHRhbGl0b3NfcHRyICp0YWxpdG9zX3B0ciwgZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwl0YWxpdG9zX3B0ci0+cHRyID0gY3B1X3RvX2JlMzIobG93ZXJfMzJfYml0cyhkbWFfYWRkcikpOworCXRhbGl0b3NfcHRyLT5lcHRyID0gY3B1X3RvX2JlMzIodXBwZXJfMzJfYml0cyhkbWFfYWRkcikpOworfQorCiAvKgogICogbWFwIHZpcnR1YWwgc2luZ2xlIChjb250aWd1b3VzKSBwb2ludGVyIHRvIGgvdyBkZXNjcmlwdG9yIHBvaW50ZXIKICAqLwpAQCAtMTUwLDggKzE2MSwxMCBAQAogCQkJCSAgIHVuc2lnbmVkIGNoYXIgZXh0ZW50LAogCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKKwlkbWFfYWRkcl90IGRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBkYXRhLCBsZW4sIGRpcik7CisKIAl0YWxpdG9zX3B0ci0+bGVuID0gY3B1X3RvX2JlMTYobGVuKTsKLQl0YWxpdG9zX3B0ci0+cHRyID0gY3B1X3RvX2JlMzIoZG1hX21hcF9zaW5nbGUoZGV2LCBkYXRhLCBsZW4sIGRpcikpOworCXRvX3RhbGl0b3NfcHRyKHRhbGl0b3NfcHRyLCBkbWFfYWRkcik7CiAJdGFsaXRvc19wdHItPmpfZXh0ZW50ID0gZXh0ZW50OwogfQogCkBAIC0xODIsOSArMTk1LDkgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JLyogc2V0IGRvbmUgd3JpdGViYWNrIGFuZCBJUlEgKi8KLQlzZXRiaXRzMzIocHJpdi0+cmVnICsgVEFMSVRPU19DQ0NSX0xPKGNoKSwgVEFMSVRPU19DQ0NSX0xPX0NEV0UgfAotCQkgIFRBTElUT1NfQ0NDUl9MT19DRElFKTsKKwkvKiBzZXQgMzYtYml0IGFkZHJlc3NpbmcsIGRvbmUgd3JpdGViYWNrIGVuYWJsZSBhbmQgZG9uZSBJUlEgZW5hYmxlICovCisJc2V0Yml0czMyKHByaXYtPnJlZyArIFRBTElUT1NfQ0NDUl9MTyhjaCksIFRBTElUT1NfQ0NDUl9MT19FQUUgfAorCQkgIFRBTElUT1NfQ0NDUl9MT19DRFdFIHwgVEFMSVRPU19DQ0NSX0xPX0NESUUpOwogCiAJLyogYW5kIElDQ1Igd3JpdGViYWNrLCBpZiBhdmFpbGFibGUgKi8KIAlpZiAocHJpdi0+ZmVhdHVyZXMgJiBUQUxJVE9TX0ZUUl9IV19BVVRIX0NIRUNLKQpAQCAtMjgyLDE2ICsyOTUsMTYgQEAKIAkvKiBlbXVsYXRlIFNFQydzIHJvdW5kLXJvYmluIGNoYW5uZWwgZmlmbyBwb2xsaW5nIHNjaGVtZSAqLwogCWNoID0gYXRvbWljX2luY19yZXR1cm4oJnByaXYtPmxhc3RfY2hhbikgJiAocHJpdi0+bnVtX2NoYW5uZWxzIC0gMSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aGVhZF9sb2NrW2NoXSwgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5jaGFuW2NoXS5oZWFkX2xvY2ssIGZsYWdzKTsKIAotCWlmICghYXRvbWljX2luY19ub3RfemVybygmcHJpdi0+c3VibWl0X2NvdW50W2NoXSkpIHsKKwlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJnByaXYtPmNoYW5bY2hdLnN1Ym1pdF9jb3VudCkpIHsKIAkJLyogaC93IGZpZm8gaXMgZnVsbCAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5oZWFkX2xvY2tbY2hdLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmNoYW5bY2hdLmhlYWRfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKLQloZWFkID0gcHJpdi0+aGVhZFtjaF07Ci0JcmVxdWVzdCA9ICZwcml2LT5maWZvW2NoXVtoZWFkXTsKKwloZWFkID0gcHJpdi0+Y2hhbltjaF0uaGVhZDsKKwlyZXF1ZXN0ID0gJnByaXYtPmNoYW5bY2hdLmZpZm9baGVhZF07CiAKIAkvKiBtYXAgZGVzY3JpcHRvciBhbmQgc2F2ZSBjYWxsZXIgZGF0YSAqLwogCXJlcXVlc3QtPmRtYV9kZXNjID0gZG1hX21hcF9zaW5nbGUoZGV2LCBkZXNjLCBzaXplb2YoKmRlc2MpLApAQCAtMzAwLDE2ICszMTMsMTkgQEAKIAlyZXF1ZXN0LT5jb250ZXh0ID0gY29udGV4dDsKIAogCS8qIGluY3JlbWVudCBmaWZvIGhlYWQgKi8KLQlwcml2LT5oZWFkW2NoXSA9IChwcml2LT5oZWFkW2NoXSArIDEpICYgKHByaXYtPmZpZm9fbGVuIC0gMSk7CisJcHJpdi0+Y2hhbltjaF0uaGVhZCA9IChwcml2LT5jaGFuW2NoXS5oZWFkICsgMSkgJiAocHJpdi0+Zmlmb19sZW4gLSAxKTsKIAogCXNtcF93bWIoKTsKIAlyZXF1ZXN0LT5kZXNjID0gZGVzYzsKIAogCS8qIEdPISAqLwogCXdtYigpOwotCW91dF9iZTMyKHByaXYtPnJlZyArIFRBTElUT1NfRkZfTE8oY2gpLCByZXF1ZXN0LT5kbWFfZGVzYyk7CisJb3V0X2JlMzIocHJpdi0+cmVnICsgVEFMSVRPU19GRihjaCksCisJCSBjcHVfdG9fYmUzMih1cHBlcl8zMl9iaXRzKHJlcXVlc3QtPmRtYV9kZXNjKSkpOworCW91dF9iZTMyKHByaXYtPnJlZyArIFRBTElUT1NfRkZfTE8oY2gpLAorCQkgY3B1X3RvX2JlMzIobG93ZXJfMzJfYml0cyhyZXF1ZXN0LT5kbWFfZGVzYykpKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmhlYWRfbG9ja1tjaF0sIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5jaGFuW2NoXS5oZWFkX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAtRUlOUFJPR1JFU1M7CiB9CkBAIC0zMjQsMTEgKzM0MCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHRhaWwsIHN0YXR1czsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50YWlsX2xvY2tbY2hdLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmNoYW5bY2hdLnRhaWxfbG9jaywgZmxhZ3MpOwogCi0JdGFpbCA9IHByaXYtPnRhaWxbY2hdOwotCXdoaWxlIChwcml2LT5maWZvW2NoXVt0YWlsXS5kZXNjKSB7Ci0JCXJlcXVlc3QgPSAmcHJpdi0+Zmlmb1tjaF1bdGFpbF07CisJdGFpbCA9IHByaXYtPmNoYW5bY2hdLnRhaWw7CisJd2hpbGUgKHByaXYtPmNoYW5bY2hdLmZpZm9bdGFpbF0uZGVzYykgeworCQlyZXF1ZXN0ID0gJnByaXYtPmNoYW5bY2hdLmZpZm9bdGFpbF07CiAKIAkJLyogZGVzY3JpcHRvcnMgd2l0aCB0aGVpciBkb25lIGJpdHMgc2V0IGRvbid0IGdldCB0aGUgZXJyb3IgKi8KIAkJcm1iKCk7CkBAIC0zNTQsMjIgKzM3MCwyMiBAQAogCQlyZXF1ZXN0LT5kZXNjID0gTlVMTDsKIAogCQkvKiBpbmNyZW1lbnQgZmlmbyB0YWlsICovCi0JCXByaXYtPnRhaWxbY2hdID0gKHRhaWwgKyAxKSAmIChwcml2LT5maWZvX2xlbiAtIDEpOworCQlwcml2LT5jaGFuW2NoXS50YWlsID0gKHRhaWwgKyAxKSAmIChwcml2LT5maWZvX2xlbiAtIDEpOwogCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnRhaWxfbG9ja1tjaF0sIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+Y2hhbltjaF0udGFpbF9sb2NrLCBmbGFncyk7CiAKLQkJYXRvbWljX2RlYygmcHJpdi0+c3VibWl0X2NvdW50W2NoXSk7CisJCWF0b21pY19kZWMoJnByaXYtPmNoYW5bY2hdLnN1Ym1pdF9jb3VudCk7CiAKIAkJc2F2ZWRfcmVxLmNhbGxiYWNrKGRldiwgc2F2ZWRfcmVxLmRlc2MsIHNhdmVkX3JlcS5jb250ZXh0LAogCQkJCSAgIHN0YXR1cyk7CiAJCS8qIGNoYW5uZWwgbWF5IHJlc3VtZSBwcm9jZXNzaW5nIGluIHNpbmdsZSBkZXNjIGVycm9yIGNhc2UgKi8KIAkJaWYgKGVycm9yICYmICFyZXNldF9jaCAmJiBzdGF0dXMgPT0gZXJyb3IpCiAJCQlyZXR1cm47Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50YWlsX2xvY2tbY2hdLCBmbGFncyk7Ci0JCXRhaWwgPSBwcml2LT50YWlsW2NoXTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmNoYW5bY2hdLnRhaWxfbG9jaywgZmxhZ3MpOworCQl0YWlsID0gcHJpdi0+Y2hhbltjaF0udGFpbDsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50YWlsX2xvY2tbY2hdLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+Y2hhbltjaF0udGFpbF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0zOTcsMjAgKzQxMywyMCBAQAogc3RhdGljIHN0cnVjdCB0YWxpdG9zX2Rlc2MgKmN1cnJlbnRfZGVzYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBjaCkKIHsKIAlzdHJ1Y3QgdGFsaXRvc19wcml2YXRlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IHRhaWwgPSBwcml2LT50YWlsW2NoXTsKKwlpbnQgdGFpbCA9IHByaXYtPmNoYW5bY2hdLnRhaWw7CiAJZG1hX2FkZHJfdCBjdXJfZGVzYzsKIAogCWN1cl9kZXNjID0gaW5fYmUzMihwcml2LT5yZWcgKyBUQUxJVE9TX0NEUFJfTE8oY2gpKTsKIAotCXdoaWxlIChwcml2LT5maWZvW2NoXVt0YWlsXS5kbWFfZGVzYyAhPSBjdXJfZGVzYykgeworCXdoaWxlIChwcml2LT5jaGFuW2NoXS5maWZvW3RhaWxdLmRtYV9kZXNjICE9IGN1cl9kZXNjKSB7CiAJCXRhaWwgPSAodGFpbCArIDEpICYgKHByaXYtPmZpZm9fbGVuIC0gMSk7Ci0JCWlmICh0YWlsID09IHByaXYtPnRhaWxbY2hdKSB7CisJCWlmICh0YWlsID09IHByaXYtPmNoYW5bY2hdLnRhaWwpIHsKIAkJCWRldl9lcnIoZGV2LCAiY291bGRuJ3QgbG9jYXRlIGN1cnJlbnQgZGVzY3JpcHRvclxuIik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCX0KIAotCXJldHVybiBwcml2LT5maWZvW2NoXVt0YWlsXS5kZXNjOworCXJldHVybiBwcml2LT5jaGFuW2NoXS5maWZvW3RhaWxdLmRlc2M7CiB9CiAKIC8qCkBAIC05MjksNyArOTQ1LDcgQEAKIAlpbnQgbl9zZyA9IHNnX2NvdW50OwogCiAJd2hpbGUgKG5fc2ctLSkgewotCQlsaW5rX3RibF9wdHItPnB0ciA9IGNwdV90b19iZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CisJCXRvX3RhbGl0b3NfcHRyKGxpbmtfdGJsX3B0ciwgc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAkJbGlua190YmxfcHRyLT5sZW4gPSBjcHVfdG9fYmUxNihzZ19kbWFfbGVuKHNnKSk7CiAJCWxpbmtfdGJsX3B0ci0+al9leHRlbnQgPSAwOwogCQlsaW5rX3RibF9wdHIrKzsKQEAgLTk3MCw3ICs5ODYsNyBAQAogCXN0cnVjdCB0YWxpdG9zX2Rlc2MgKmRlc2MgPSAmZWRlc2MtPmRlc2M7CiAJdW5zaWduZWQgaW50IGNyeXB0bGVuID0gYXJlcS0+Y3J5cHRsZW47CiAJdW5zaWduZWQgaW50IGF1dGhzaXplID0gY3R4LT5hdXRoc2l6ZTsKLQl1bnNpZ25lZCBpbnQgaXZzaXplOworCXVuc2lnbmVkIGludCBpdnNpemUgPSBjcnlwdG9fYWVhZF9pdnNpemUoYWVhZCk7CiAJaW50IHNnX2NvdW50LCByZXQ7CiAJaW50IHNnX2xpbmtfdGJsX2xlbjsKIApAQCAtOTc4LDExICs5OTQsOSBAQAogCW1hcF9zaW5nbGVfdGFsaXRvc19wdHIoZGV2LCAmZGVzYy0+cHRyWzBdLCBjdHgtPmF1dGhrZXlsZW4sICZjdHgtPmtleSwKIAkJCSAgICAgICAwLCBETUFfVE9fREVWSUNFKTsKIAkvKiBobWFjIGRhdGEgKi8KLQltYXBfc2luZ2xlX3RhbGl0b3NfcHRyKGRldiwgJmRlc2MtPnB0clsxXSwgc2dfdmlydChhcmVxLT5zcmMpIC0KLQkJCSAgICAgICBzZ192aXJ0KGFyZXEtPmFzc29jKSwgc2dfdmlydChhcmVxLT5hc3NvYyksIDAsCi0JCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CisJbWFwX3NpbmdsZV90YWxpdG9zX3B0cihkZXYsICZkZXNjLT5wdHJbMV0sIGFyZXEtPmFzc29jbGVuICsgaXZzaXplLAorCQkJICAgICAgIHNnX3ZpcnQoYXJlcS0+YXNzb2MpLCAwLCBETUFfVE9fREVWSUNFKTsKIAkvKiBjaXBoZXIgaXYgKi8KLQlpdnNpemUgPSBjcnlwdG9fYWVhZF9pdnNpemUoYWVhZCk7CiAJbWFwX3NpbmdsZV90YWxpdG9zX3B0cihkZXYsICZkZXNjLT5wdHJbMl0sIGl2c2l6ZSwgZ2l2ID86IGFyZXEtPml2LCAwLAogCQkJICAgICAgIERNQV9UT19ERVZJQ0UpOwogCkBAIC0xMDA2LDcgKzEwMjAsNyBAQAogCQkJCSAgZWRlc2MtPnNyY19pc19jaGFpbmVkKTsKIAogCWlmIChzZ19jb3VudCA9PSAxKSB7Ci0JCWRlc2MtPnB0cls0XS5wdHIgPSBjcHVfdG9fYmUzMihzZ19kbWFfYWRkcmVzcyhhcmVxLT5zcmMpKTsKKwkJdG9fdGFsaXRvc19wdHIoJmRlc2MtPnB0cls0XSwgc2dfZG1hX2FkZHJlc3MoYXJlcS0+c3JjKSk7CiAJfSBlbHNlIHsKIAkJc2dfbGlua190YmxfbGVuID0gY3J5cHRsZW47CiAKQEAgLTEwMTcsMTQgKzEwMzEsMTQgQEAKIAkJCQkJICAmZWRlc2MtPmxpbmtfdGJsWzBdKTsKIAkJaWYgKHNnX2NvdW50ID4gMSkgewogCQkJZGVzYy0+cHRyWzRdLmpfZXh0ZW50IHw9IERFU0NfUFRSX0xOS1RCTF9KVU1QOwotCQkJZGVzYy0+cHRyWzRdLnB0ciA9IGNwdV90b19iZTMyKGVkZXNjLT5kbWFfbGlua190YmwpOworCQkJdG9fdGFsaXRvc19wdHIoJmRlc2MtPnB0cls0XSwgZWRlc2MtPmRtYV9saW5rX3RibCk7CiAJCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGVkZXNjLT5kbWFfbGlua190YmwsCiAJCQkJCQkgICBlZGVzYy0+ZG1hX2xlbiwKIAkJCQkJCSAgIERNQV9CSURJUkVDVElPTkFMKTsKIAkJfSBlbHNlIHsKIAkJCS8qIE9ubHkgb25lIHNlZ21lbnQgbm93LCBzbyBubyBsaW5rIHRibCBuZWVkZWQgKi8KLQkJCWRlc2MtPnB0cls0XS5wdHIgPSBjcHVfdG9fYmUzMihzZ19kbWFfYWRkcmVzcyhhcmVxLT4KLQkJCQkJCQkJICAgICAgc3JjKSk7CisJCQl0b190YWxpdG9zX3B0cigmZGVzYy0+cHRyWzRdLAorCQkJCSAgICAgICBzZ19kbWFfYWRkcmVzcyhhcmVxLT5zcmMpKTsKIAkJfQogCX0KIApAQCAtMTAzOSwxNCArMTA1MywxNCBAQAogCQkJCQkgIGVkZXNjLT5kc3RfaXNfY2hhaW5lZCk7CiAKIAlpZiAoc2dfY291bnQgPT0gMSkgewotCQlkZXNjLT5wdHJbNV0ucHRyID0gY3B1X3RvX2JlMzIoc2dfZG1hX2FkZHJlc3MoYXJlcS0+ZHN0KSk7CisJCXRvX3RhbGl0b3NfcHRyKCZkZXNjLT5wdHJbNV0sIHNnX2RtYV9hZGRyZXNzKGFyZXEtPmRzdCkpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCB0YWxpdG9zX3B0ciAqbGlua190YmxfcHRyID0KIAkJCSZlZGVzYy0+bGlua190YmxbZWRlc2MtPnNyY19uZW50cyArIDFdOwogCi0JCWRlc2MtPnB0cls1XS5wdHIgPSBjcHVfdG9fYmUzMigoc3RydWN0IHRhbGl0b3NfcHRyICopCi0JCQkJCSAgICAgICBlZGVzYy0+ZG1hX2xpbmtfdGJsICsKLQkJCQkJICAgICAgIGVkZXNjLT5zcmNfbmVudHMgKyAxKTsKKwkJdG9fdGFsaXRvc19wdHIoJmRlc2MtPnB0cls1XSwgZWRlc2MtPmRtYV9saW5rX3RibCArCisJCQkgICAgICAgKGVkZXNjLT5zcmNfbmVudHMgKyAxKSAqCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB0YWxpdG9zX3B0cikpOwogCQlzZ19jb3VudCA9IHNnX3RvX2xpbmtfdGJsKGFyZXEtPmRzdCwgc2dfY291bnQsIGNyeXB0bGVuLAogCQkJCQkgIGxpbmtfdGJsX3B0cik7CiAKQEAgLTEwNTksMTEgKzEwNzMsOSBAQAogCQlsaW5rX3RibF9wdHItPmxlbiA9IGNwdV90b19iZTE2KGF1dGhzaXplKTsKIAogCQkvKiBpY3YgZGF0YSBmb2xsb3dzIGxpbmsgdGFibGVzICovCi0JCWxpbmtfdGJsX3B0ci0+cHRyID0gY3B1X3RvX2JlMzIoKHN0cnVjdCB0YWxpdG9zX3B0ciAqKQotCQkJCQkJZWRlc2MtPmRtYV9saW5rX3RibCArCi0JCQkJCSAgICAgICAgZWRlc2MtPnNyY19uZW50cyArCi0JCQkJCQllZGVzYy0+ZHN0X25lbnRzICsgMik7Ci0KKwkJdG9fdGFsaXRvc19wdHIobGlua190YmxfcHRyLCBlZGVzYy0+ZG1hX2xpbmtfdGJsICsKKwkJCSAgICAgICAoZWRlc2MtPnNyY19uZW50cyArIGVkZXNjLT5kc3RfbmVudHMgKyAyKSAqCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB0YWxpdG9zX3B0cikpOwogCQlkZXNjLT5wdHJbNV0ual9leHRlbnQgfD0gREVTQ19QVFJfTE5LVEJMX0pVTVA7CiAJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGN0eC0+ZGV2LCBlZGVzYy0+ZG1hX2xpbmtfdGJsLAogCQkJCQkgICBlZGVzYy0+ZG1hX2xlbiwgRE1BX0JJRElSRUNUSU9OQUwpOwpAQCAtMTMzOCw3ICsxMzUwLDcgQEAKIAogCS8qIGZpcnN0IERXT1JEIGVtcHR5ICovCiAJZGVzYy0+cHRyWzBdLmxlbiA9IDA7Ci0JZGVzYy0+cHRyWzBdLnB0ciA9IDA7CisJdG9fdGFsaXRvc19wdHIoJmRlc2MtPnB0clswXSwgMCk7CiAJZGVzYy0+cHRyWzBdLmpfZXh0ZW50ID0gMDsKIAogCS8qIGNpcGhlciBpdiAqLwpAQCAtMTM2MiwyMCArMTM3NCwyMCBAQAogCQkJCSAgZWRlc2MtPnNyY19pc19jaGFpbmVkKTsKIAogCWlmIChzZ19jb3VudCA9PSAxKSB7Ci0JCWRlc2MtPnB0clszXS5wdHIgPSBjcHVfdG9fYmUzMihzZ19kbWFfYWRkcmVzcyhhcmVxLT5zcmMpKTsKKwkJdG9fdGFsaXRvc19wdHIoJmRlc2MtPnB0clszXSwgc2dfZG1hX2FkZHJlc3MoYXJlcS0+c3JjKSk7CiAJfSBlbHNlIHsKIAkJc2dfY291bnQgPSBzZ190b19saW5rX3RibChhcmVxLT5zcmMsIHNnX2NvdW50LCBjcnlwdGxlbiwKIAkJCQkJICAmZWRlc2MtPmxpbmtfdGJsWzBdKTsKIAkJaWYgKHNnX2NvdW50ID4gMSkgeworCQkJdG9fdGFsaXRvc19wdHIoJmRlc2MtPnB0clszXSwgZWRlc2MtPmRtYV9saW5rX3RibCk7CiAJCQlkZXNjLT5wdHJbM10ual9leHRlbnQgfD0gREVTQ19QVFJfTE5LVEJMX0pVTVA7Ci0JCQlkZXNjLT5wdHJbM10ucHRyID0gY3B1X3RvX2JlMzIoZWRlc2MtPmRtYV9saW5rX3RibCk7CiAJCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGVkZXNjLT5kbWFfbGlua190YmwsCiAJCQkJCQkgICBlZGVzYy0+ZG1hX2xlbiwKIAkJCQkJCSAgIERNQV9CSURJUkVDVElPTkFMKTsKIAkJfSBlbHNlIHsKIAkJCS8qIE9ubHkgb25lIHNlZ21lbnQgbm93LCBzbyBubyBsaW5rIHRibCBuZWVkZWQgKi8KLQkJCWRlc2MtPnB0clszXS5wdHIgPSBjcHVfdG9fYmUzMihzZ19kbWFfYWRkcmVzcyhhcmVxLT4KLQkJCQkJCQkJICAgICAgc3JjKSk7CisJCQl0b190YWxpdG9zX3B0cigmZGVzYy0+cHRyWzNdLAorCQkJCSAgICAgICBzZ19kbWFfYWRkcmVzcyhhcmVxLT5zcmMpKTsKIAkJfQogCX0KIApAQCAtMTM5MCwxNSArMTQwMiwxNSBAQAogCQkJCQkgIGVkZXNjLT5kc3RfaXNfY2hhaW5lZCk7CiAKIAlpZiAoc2dfY291bnQgPT0gMSkgewotCQlkZXNjLT5wdHJbNF0ucHRyID0gY3B1X3RvX2JlMzIoc2dfZG1hX2FkZHJlc3MoYXJlcS0+ZHN0KSk7CisJCXRvX3RhbGl0b3NfcHRyKCZkZXNjLT5wdHJbNF0sIHNnX2RtYV9hZGRyZXNzKGFyZXEtPmRzdCkpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCB0YWxpdG9zX3B0ciAqbGlua190YmxfcHRyID0KIAkJCSZlZGVzYy0+bGlua190YmxbZWRlc2MtPnNyY19uZW50cyArIDFdOwogCisJCXRvX3RhbGl0b3NfcHRyKCZkZXNjLT5wdHJbNF0sIGVkZXNjLT5kbWFfbGlua190YmwgKworCQkJCQkgICAgICAoZWRlc2MtPnNyY19uZW50cyArIDEpICoKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB0YWxpdG9zX3B0cikpOwogCQlkZXNjLT5wdHJbNF0ual9leHRlbnQgfD0gREVTQ19QVFJfTE5LVEJMX0pVTVA7Ci0JCWRlc2MtPnB0cls0XS5wdHIgPSBjcHVfdG9fYmUzMigoc3RydWN0IHRhbGl0b3NfcHRyICopCi0JCQkJCSAgICAgICBlZGVzYy0+ZG1hX2xpbmtfdGJsICsKLQkJCQkJICAgICAgIGVkZXNjLT5zcmNfbmVudHMgKyAxKTsKIAkJc2dfY291bnQgPSBzZ190b19saW5rX3RibChhcmVxLT5kc3QsIHNnX2NvdW50LCBjcnlwdGxlbiwKIAkJCQkJICBsaW5rX3RibF9wdHIpOwogCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShjdHgtPmRldiwgZWRlc2MtPmRtYV9saW5rX3RibCwKQEAgLTE0MTEsNyArMTQyMyw3IEBACiAKIAkvKiBsYXN0IERXT1JEIGVtcHR5ICovCiAJZGVzYy0+cHRyWzZdLmxlbiA9IDA7Ci0JZGVzYy0+cHRyWzZdLnB0ciA9IDA7CisJdG9fdGFsaXRvc19wdHIoJmRlc2MtPnB0cls2XSwgMCk7CiAJZGVzYy0+cHRyWzZdLmpfZXh0ZW50ID0gMDsKIAogCXJldCA9IHRhbGl0b3Nfc3VibWl0KGRldiwgZGVzYywgY2FsbGJhY2ssIGFyZXEpOwpAQCAtMTc0MiwxNyArMTc1NCwxMSBAQAogCWlmIChod19zdXBwb3J0cyhkZXYsIERFU0NfSERSX1NFTDBfUk5HKSkKIAkJdGFsaXRvc191bnJlZ2lzdGVyX3JuZyhkZXYpOwogCi0Ja2ZyZWUocHJpdi0+c3VibWl0X2NvdW50KTsKLQlrZnJlZShwcml2LT50YWlsKTsKLQlrZnJlZShwcml2LT5oZWFkKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX2NoYW5uZWxzOyBpKyspCisJCWlmIChwcml2LT5jaGFuW2ldLmZpZm8pCisJCQlrZnJlZShwcml2LT5jaGFuW2ldLmZpZm8pOwogCi0JaWYgKHByaXYtPmZpZm8pCi0JCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1fY2hhbm5lbHM7IGkrKykKLQkJCWtmcmVlKHByaXYtPmZpZm9baV0pOwotCi0Ja2ZyZWUocHJpdi0+Zmlmbyk7Ci0Ja2ZyZWUocHJpdi0+aGVhZF9sb2NrKTsKLQlrZnJlZShwcml2LT50YWlsX2xvY2spOworCWtmcmVlKHByaXYtPmNoYW4pOwogCiAJaWYgKHByaXYtPmlycSAhPSBOT19JUlEpIHsKIAkJZnJlZV9pcnEocHJpdi0+aXJxLCBkZXYpOwpAQCAtMTg3Miw1OCArMTg3OCwzNiBAQAogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxzZWMyLjEiKSkKIAkJcHJpdi0+ZmVhdHVyZXMgfD0gVEFMSVRPU19GVFJfSFdfQVVUSF9DSEVDSzsKIAotCXByaXYtPmhlYWRfbG9jayA9IGttYWxsb2Moc2l6ZW9mKHNwaW5sb2NrX3QpICogcHJpdi0+bnVtX2NoYW5uZWxzLAotCQkJCSAgR0ZQX0tFUk5FTCk7Ci0JcHJpdi0+dGFpbF9sb2NrID0ga21hbGxvYyhzaXplb2Yoc3BpbmxvY2tfdCkgKiBwcml2LT5udW1fY2hhbm5lbHMsCi0JCQkJICBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYtPmhlYWRfbG9jayB8fCAhcHJpdi0+dGFpbF9sb2NrKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGZpZm8gbG9ja3NcbiIpOworCXByaXYtPmNoYW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGFsaXRvc19jaGFubmVsKSAqCisJCQkgICAgIHByaXYtPm51bV9jaGFubmVscywgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5jaGFuKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGNoYW5uZWwgbWFuYWdlbWVudCBzcGFjZVxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX2NoYW5uZWxzOyBpKyspIHsKLQkJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmhlYWRfbG9ja1tpXSk7Ci0JCXNwaW5fbG9ja19pbml0KCZwcml2LT50YWlsX2xvY2tbaV0pOwotCX0KLQotCXByaXYtPmZpZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGFsaXRvc19yZXF1ZXN0ICopICoKLQkJCSAgICAgcHJpdi0+bnVtX2NoYW5uZWxzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYtPmZpZm8pIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWVzdCBmaWZvXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0OworCQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+Y2hhbltpXS5oZWFkX2xvY2spOworCQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+Y2hhbltpXS50YWlsX2xvY2spOwogCX0KIAogCXByaXYtPmZpZm9fbGVuID0gcm91bmR1cF9wb3dfb2ZfdHdvKHByaXYtPmNoZmlmb19sZW4pOwogCiAJZm9yIChpID0gMDsgaSA8IHByaXYtPm51bV9jaGFubmVsczsgaSsrKSB7Ci0JCXByaXYtPmZpZm9baV0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGFsaXRvc19yZXF1ZXN0KSAqCi0JCQkJCXByaXYtPmZpZm9fbGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwcml2LT5maWZvW2ldKSB7CisJCXByaXYtPmNoYW5baV0uZmlmbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0YWxpdG9zX3JlcXVlc3QpICoKKwkJCQkJICAgICBwcml2LT5maWZvX2xlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdi0+Y2hhbltpXS5maWZvKSB7CiAJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSByZXF1ZXN0IGZpZm8gJWRcbiIsIGkpOwogCQkJZXJyID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyX291dDsKIAkJfQogCX0KIAotCXByaXYtPnN1Ym1pdF9jb3VudCA9IGttYWxsb2Moc2l6ZW9mKGF0b21pY190KSAqIHByaXYtPm51bV9jaGFubmVscywKLQkJCQkgICAgIEdGUF9LRVJORUwpOwotCWlmICghcHJpdi0+c3VibWl0X2NvdW50KSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGZpZm8gc3VibWl0IGNvdW50IHNwYWNlXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0OwotCX0KIAlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX2NoYW5uZWxzOyBpKyspCi0JCWF0b21pY19zZXQoJnByaXYtPnN1Ym1pdF9jb3VudFtpXSwgLShwcml2LT5jaGZpZm9fbGVuIC0gMSkpOworCQlhdG9taWNfc2V0KCZwcml2LT5jaGFuW2ldLnN1Ym1pdF9jb3VudCwKKwkJCSAgIC0ocHJpdi0+Y2hmaWZvX2xlbiAtIDEpKTsKIAotCXByaXYtPmhlYWQgPSBremFsbG9jKHNpemVvZihpbnQpICogcHJpdi0+bnVtX2NoYW5uZWxzLCBHRlBfS0VSTkVMKTsKLQlwcml2LT50YWlsID0ga3phbGxvYyhzaXplb2YoaW50KSAqIHByaXYtPm51bV9jaGFubmVscywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcml2LT5oZWFkIHx8ICFwcml2LT50YWlsKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHJlcXVlc3QgaW5kZXggc3BhY2VcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQorCWRtYV9zZXRfbWFzayhkZXYsIERNQV9CSVRfTUFTSygzNikpOwogCiAJLyogcmVzZXQgYW5kIGluaXRpYWxpemUgdGhlIGgvdyAqLwogCWVyciA9IGluaXRfZGV2aWNlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmggYi9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmgKaW5kZXggNTc1OTgxZi4uZmY1YTE0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5oCisrKyBiL2RyaXZlcnMvY3J5cHRvL3RhbGl0b3MuaApAQCAtNTcsNiArNTcsNyBAQAogI2RlZmluZSAgIFRBTElUT1NfQ0NDUl9SRVNFVAkJMHgxICAgIC8qIGNoYW5uZWwgcmVzZXQgKi8KICNkZWZpbmUgVEFMSVRPU19DQ0NSX0xPKGNoKQkJKGNoICogVEFMSVRPU19DSF9TVFJJREUgKyAweDExMGMpCiAjZGVmaW5lICAgVEFMSVRPU19DQ0NSX0xPX0lXU0UJCTB4ODAgICAvKiBjaGFuLiBJQ0NSIHdyaXRlYmFjayBlbmFiLiAqLworI2RlZmluZSAgIFRBTElUT1NfQ0NDUl9MT19FQUUJCTB4MjAgICAvKiBleHRlbmRlZCBhZGRyZXNzIGVuYWJsZSAqLwogI2RlZmluZSAgIFRBTElUT1NfQ0NDUl9MT19DRFdFCQkweDEwICAgLyogY2hhbi4gZG9uZSB3cml0ZWJhY2sgZW5hYi4gKi8KICNkZWZpbmUgICBUQUxJVE9TX0NDQ1JfTE9fTlQJCTB4NCAgICAvKiBub3RpZmljYXRpb24gdHlwZSAqLwogI2RlZmluZSAgIFRBTElUT1NfQ0NDUl9MT19DRElFCQkweDIgICAgLyogY2hhbm5lbCBkb25lIElSUSBlbmFibGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMgYi9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jCmluZGV4IDlhMWU1ZmIuLmM4NTIyZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvYXRfaGRtYWMuYwpAQCAtMTE2NiwzMiArMTE2NiwzNyBAQAogCWNsa19kaXNhYmxlKGF0ZG1hLT5jbGspOwogfQogCi1zdGF0aWMgaW50IGF0X2RtYV9zdXNwZW5kX2xhdGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IGF0X2RtYV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgYXRfZG1hCSphdGRtYSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYXRfZG1hICphdGRtYSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJYXRfZG1hX29mZihwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CiAJY2xrX2Rpc2FibGUoYXRkbWEtPmNsayk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXRfZG1hX3Jlc3VtZV9lYXJseShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBhdF9kbWFfcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgYXRfZG1hCSphdGRtYSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYXRfZG1hICphdGRtYSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJY2xrX2VuYWJsZShhdGRtYS0+Y2xrKTsKIAlkbWFfd3JpdGVsKGF0ZG1hLCBFTiwgQVRfRE1BX0VOQUJMRSk7CiAJcmV0dXJuIDA7Ci0KIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGF0X2RtYV9kZXZfcG1fb3BzID0geworCS5zdXNwZW5kX25vaXJxID0gYXRfZG1hX3N1c3BlbmRfbm9pcnEsCisJLnJlc3VtZV9ub2lycSA9IGF0X2RtYV9yZXN1bWVfbm9pcnEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdF9kbWFfZHJpdmVyID0gewogCS5yZW1vdmUJCT0gX19leGl0X3AoYXRfZG1hX3JlbW92ZSksCiAJLnNodXRkb3duCT0gYXRfZG1hX3NodXRkb3duLAotCS5zdXNwZW5kX2xhdGUJPSBhdF9kbWFfc3VzcGVuZF9sYXRlLAotCS5yZXN1bWVfZWFybHkJPSBhdF9kbWFfcmVzdW1lX2Vhcmx5LAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImF0X2hkbWFjIiwKKwkJLnBtCT0gJmF0X2RtYV9kZXZfcG1fb3BzLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kd19kbWFjLmMgYi9kcml2ZXJzL2RtYS9kd19kbWFjLmMKaW5kZXggOThjOWE4NC4uOTMzYzE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZHdfZG1hYy5jCisrKyBiL2RyaXZlcnMvZG1hL2R3X2RtYWMuYwpAQCAtMTM5OSw4ICsxMzk5LDkgQEAKIAljbGtfZGlzYWJsZShkdy0+Y2xrKTsKIH0KIAotc3RhdGljIGludCBkd19zdXNwZW5kX2xhdGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IGR3X3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZHdfZG1hCSpkdyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJZHdfZG1hX29mZihwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CkBAIC0xNDA4LDIzICsxNDA5LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHdfcmVzdW1lX2Vhcmx5KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGR3X3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBkd19kbWEJKmR3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAljbGtfZW5hYmxlKGR3LT5jbGspOwogCWRtYV93cml0ZWwoZHcsIENGRywgRFdfQ0ZHX0RNQV9FTik7CiAJcmV0dXJuIDA7Ci0KIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGR3X2Rldl9wbV9vcHMgPSB7CisJLnN1c3BlbmRfbm9pcnEgPSBkd19zdXNwZW5kX25vaXJxLAorCS5yZXN1bWVfbm9pcnEgPSBkd19yZXN1bWVfbm9pcnEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd19kcml2ZXIgPSB7CiAJLnJlbW92ZQkJPSBfX2V4aXRfcChkd19yZW1vdmUpLAogCS5zaHV0ZG93bgk9IGR3X3NodXRkb3duLAotCS5zdXNwZW5kX2xhdGUJPSBkd19zdXNwZW5kX2xhdGUsCi0JLnJlc3VtZV9lYXJseQk9IGR3X3Jlc3VtZV9lYXJseSwKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJkd19kbWFjIiwKKwkJLnBtCT0gJmR3X2Rldl9wbV9vcHMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3R4eDlkbWFjLmMgYi9kcml2ZXJzL2RtYS90eHg5ZG1hYy5jCmluZGV4IDg4ZGFiNTIuLjc4Mzc5MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3R4eDlkbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvdHh4OWRtYWMuYwpAQCAtMTI5MSwxNyArMTI5MSwxOCBAQAogCXR4eDlkbWFjX29mZihkZGV2KTsKIH0KIAotc3RhdGljIGludCB0eHg5ZG1hY19zdXNwZW5kX2xhdGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IHR4eDlkbWFjX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgdHh4OWRtYWNfZGV2ICpkZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAl0eHg5ZG1hY19vZmYoZGRldik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHh4OWRtYWNfcmVzdW1lX2Vhcmx5KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHR4eDlkbWFjX3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCB0eHg5ZG1hY19kZXYgKmRkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgdHh4OWRtYWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAl1MzIgbWNyOwpAQCAtMTMxNCw2ICsxMzE1LDExIEBACiAKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHR4eDlkbWFjX2Rldl9wbV9vcHMgPSB7CisJLnN1c3BlbmRfbm9pcnEgPSB0eHg5ZG1hY19zdXNwZW5kX25vaXJxLAorCS5yZXN1bWVfbm9pcnEgPSB0eHg5ZG1hY19yZXN1bWVfbm9pcnEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0eHg5ZG1hY19jaGFuX2RyaXZlciA9IHsKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKHR4eDlkbWFjX2NoYW5fcmVtb3ZlKSwKIAkuZHJpdmVyID0gewpAQCAtMTMyNCwxMCArMTMzMCw5IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0eHg5ZG1hY19kcml2ZXIgPSB7CiAJLnJlbW92ZQkJPSBfX2V4aXRfcCh0eHg5ZG1hY19yZW1vdmUpLAogCS5zaHV0ZG93bgk9IHR4eDlkbWFjX3NodXRkb3duLAotCS5zdXNwZW5kX2xhdGUJPSB0eHg5ZG1hY19zdXNwZW5kX2xhdGUsCi0JLnJlc3VtZV9lYXJseQk9IHR4eDlkbWFjX3Jlc3VtZV9lYXJseSwKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJ0eHg5ZG1hYyIsCisJCS5wbQk9ICZ0eHg5ZG1hY19kZXZfcG1fb3BzLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUgYi9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKaW5kZXggOThhYTRhNy4uY2ZhMDMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQpAQCAtMTcsNiArMTcsMTAgQEAKIGVkYWNfY29yZS1vYmpzCSs9IGVkYWNfcGNpLm8gZWRhY19wY2lfc3lzZnMubwogZW5kaWYKIAoraWZkZWYgQ09ORklHX0NQVV9TVVBfQU1ECitlZGFjX2NvcmUtb2JqcyAgKz0gZWRhY19tY2VfYW1kLm8KK2VuZGlmCisKIG9iai0kKENPTkZJR19FREFDX0FNRDc2WCkJCSs9IGFtZDc2eF9lZGFjLm8KIG9iai0kKENPTkZJR19FREFDX0NQQzkyNSkJCSs9IGNwYzkyNV9lZGFjLm8KIG9iai0kKENPTkZJR19FREFDX0k1MDAwKQkJKz0gaTUwMDBfZWRhYy5vCkBAIC0zMiw3ICszNiw3IEBACiBvYmotJChDT05GSUdfRURBQ19JODI4NjApCQkrPSBpODI4NjBfZWRhYy5vCiBvYmotJChDT05GSUdfRURBQ19SODI2MDApCQkrPSByODI2MDBfZWRhYy5vCiAKLWFtZDY0X2VkYWNfbW9kLXkgOj0gIGFtZDY0X2VkYWNfZXJyX3R5cGVzLm8gYW1kNjRfZWRhYy5vCithbWQ2NF9lZGFjX21vZC15IDo9IGFtZDY0X2VkYWMubwogYW1kNjRfZWRhY19tb2QtJChDT05GSUdfRURBQ19ERUJVRykgKz0gYW1kNjRfZWRhY19kYmcubwogYW1kNjRfZWRhY19tb2QtJChDT05GSUdfRURBQ19BTUQ2NF9FUlJPUl9JTkpFQ1RJT04pICs9IGFtZDY0X2VkYWNfaW5qLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggZTJhMTBiYy4uMTczZGM0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCkBAIC0xOSw2ICsxOSw2MyBAQAogc3RhdGljIHN0cnVjdCBhbWQ2NF9wdnQgKnB2dF9sb29rdXBbTUFYX05VTU5PREVTXTsKIAogLyoKKyAqIFNlZSBGMng4MCBmb3IgSzggYW5kIEYyeFsxLDBdODAgZm9yIEZhbTEwIGFuZCBsYXRlci4gVGhlIHRhYmxlIGJlbG93IGlzIG9ubHkKKyAqIGZvciBERFIyIERSQU0gbWFwcGluZy4KKyAqLwordTMyIHJldmZfcXVhZF9kZHIyX3NoaWZ0W10gPSB7CisJMCwJLyogMDAwMGIgTlVMTCBESU1NICgxMjhtYikgKi8KKwkyOCwJLyogMDAwMWIgMjU2bWIgKi8KKwkyOSwJLyogMDAxMGIgNTEybWIgKi8KKwkyOSwJLyogMDAxMWIgNTEybWIgKi8KKwkyOSwJLyogMDEwMGIgNTEybWIgKi8KKwkzMCwJLyogMDEwMWIgMWdiICovCisJMzAsCS8qIDAxMTBiIDFnYiAqLworCTMxLAkvKiAwMTExYiAyZ2IgKi8KKwkzMSwJLyogMTAwMGIgMmdiICovCisJMzIsCS8qIDEwMDFiIDRnYiAqLworCTMyLAkvKiAxMDEwYiA0Z2IgKi8KKwkzMywJLyogMTAxMWIgOGdiICovCisJMCwJLyogMTEwMGIgZnV0dXJlICovCisJMCwJLyogMTEwMWIgZnV0dXJlICovCisJMCwJLyogMTExMGIgZnV0dXJlICovCisJMAkvKiAxMTExYiBmdXR1cmUgKi8KK307CisKKy8qCisgKiBWYWxpZCBzY3J1YiByYXRlcyBmb3IgdGhlIEs4IGhhcmR3YXJlIG1lbW9yeSBzY3J1YmJlci4gV2UgbWFwIHRoZSBzY3J1YmJpbmcKKyAqIGJhbmR3aWR0aCB0byBhIHZhbGlkIGJpdCBwYXR0ZXJuLiBUaGUgJ3NldCcgb3BlcmF0aW9uIGZpbmRzIHRoZSAnbWF0Y2hpbmctCisgKiBvciBoaWdoZXIgdmFsdWUnLgorICoKKyAqRklYTUU6IFByb2R1Y2UgYSBiZXR0ZXIgbWFwcGluZy9saW5lYXJpc2F0aW9uLgorICovCisKK3N0cnVjdCBzY3J1YnJhdGUgc2NydWJyYXRlc1tdID0geworCXsgMHgwMSwgMTYwMDAwMDAwMFVMfSwKKwl7IDB4MDIsIDgwMDAwMDAwMFVMfSwKKwl7IDB4MDMsIDQwMDAwMDAwMFVMfSwKKwl7IDB4MDQsIDIwMDAwMDAwMFVMfSwKKwl7IDB4MDUsIDEwMDAwMDAwMFVMfSwKKwl7IDB4MDYsIDUwMDAwMDAwVUx9LAorCXsgMHgwNywgMjUwMDAwMDBVTH0sCisJeyAweDA4LCAxMjI4NDA2OVVMfSwKKwl7IDB4MDksIDYyNzQ1MDlVTH0sCisJeyAweDBBLCAzMTIxOTUxVUx9LAorCXsgMHgwQiwgMTU2MDk3NVVMfSwKKwl7IDB4MEMsIDc4MTQ0MFVMfSwKKwl7IDB4MEQsIDM5MDcyMFVMfSwKKwl7IDB4MEUsIDE5NTMwMFVMfSwKKwl7IDB4MEYsIDk3NjUwVUx9LAorCXsgMHgxMCwgNDg4NTRVTH0sCisJeyAweDExLCAyNDQyN1VMfSwKKwl7IDB4MTIsIDEyMjEzVUx9LAorCXsgMHgxMywgNjEwMVVMfSwKKwl7IDB4MTQsIDMwNTFVTH0sCisJeyAweDE1LCAxNTIzVUx9LAorCXsgMHgxNiwgNzYxVUx9LAorCXsgMHgwMCwgMFVMfSwgICAgICAgIC8qIHNjcnViYmluZyBvZmYgKi8KK307CisKKy8qCiAgKiBNZW1vcnkgc2NydWJiZXIgY29udHJvbCBpbnRlcmZhY2UuIEZvciBLOCwgbWVtb3J5IHNjcnViYmluZyBpcyBoYW5kbGVkIGJ5CiAgKiBoYXJkd2FyZSBhbmQgY2FuIGludm9sdmUgTDIgY2FjaGUsIGRjYWNoZSBhcyB3ZWxsIGFzIHRoZSBtYWluIG1lbW9yeS4gV2l0aAogICogRjEwLCB0aGlzIGlzIGV4dGVuZGVkIHRvIEwzIGNhY2hlIHNjcnViYmluZyBvbiBDUFUgbW9kZWxzIHNwb3J0aW5nIHRoYXQKQEAgLTY5Myw3ICs3NTAsNyBAQAogICogc3BlY2lmaWMuCiAgKi8KIHN0YXRpYyB1NjQgZXh0cmFjdF9lcnJvcl9hZGRyZXNzKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCQkgc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyAqaW5mbykKKwkJCQkgc3RydWN0IGVycl9yZWdzICppbmZvKQogewogCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dCA9IG1jaS0+cHZ0X2luZm87CiAKQEAgLTEwNDksNyArMTEwNiw3IEBACiAKIC8qIGV4dHJhY3QgdGhlIEVSUk9SIEFERFJFU1MgZm9yIHRoZSBLOCBDUFVzICovCiBzdGF0aWMgdTY0IGs4X2dldF9lcnJvcl9hZGRyZXNzKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCQlzdHJ1Y3QgYW1kNjRfZXJyb3JfaW5mb19yZWdzICppbmZvKQorCQkJCXN0cnVjdCBlcnJfcmVncyAqaW5mbykKIHsKIAlyZXR1cm4gKCgodTY0KSAoaW5mby0+bmJlYWggJiAweGZmKSkgPDwgMzIpICsKIAkJCShpbmZvLT5uYmVhbCAmIH4weDAzKTsKQEAgLTEwOTIsNyArMTE0OSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGs4X21hcF9zeXNhZGRyX3RvX2Nzcm93KHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCQkJc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyAqaW5mbywKKwkJCQkJc3RydWN0IGVycl9yZWdzICppbmZvLAogCQkJCQl1NjQgU3lzdGVtQWRkcmVzcykKIHsKIAlzdHJ1Y3QgbWVtX2N0bF9pbmZvICpzcmNfbWNpOwpAQCAtMTEwMSw4ICsxMTU4LDggQEAKIAl1MzIgcGFnZSwgb2Zmc2V0OwogCiAJLyogRXh0cmFjdCB0aGUgc3luZHJvbWUgcGFydHMgYW5kIGZvcm0gYSAxNi1iaXQgc3luZHJvbWUgKi8KLQlzeW5kcm9tZSA9IEVYVFJBQ1RfSElHSF9TWU5EUk9NRShpbmZvLT5uYnNsKSA8PCA4OwotCXN5bmRyb21lIHw9IEVYVFJBQ1RfTE9XX1NZTkRST01FKGluZm8tPm5ic2gpOworCXN5bmRyb21lICA9IEhJR0hfU1lORFJPTUUoaW5mby0+bmJzbCkgPDwgODsKKwlzeW5kcm9tZSB8PSBMT1dfU1lORFJPTUUoaW5mby0+bmJzaCk7CiAKIAkvKiBDSElQS0lMTCBlbmFibGVkICovCiAJaWYgKGluZm8tPm5iY2ZnICYgSzhfTkJDRkdfQ0hJUEtJTEwpIHsKQEAgLTEzMTEsNyArMTM2OCw3IEBACiB9CiAKIHN0YXRpYyB1NjQgZjEwX2dldF9lcnJvcl9hZGRyZXNzKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCXN0cnVjdCBhbWQ2NF9lcnJvcl9pbmZvX3JlZ3MgKmluZm8pCisJCQlzdHJ1Y3QgZXJyX3JlZ3MgKmluZm8pCiB7CiAJcmV0dXJuICgoKHU2NCkgKGluZm8tPm5iZWFoICYgMHhmZmZmKSkgPDwgMzIpICsKIAkJCShpbmZvLT5uYmVhbCAmIH4weDAxKTsKQEAgLTE2ODgsNyArMTc0NSw3IEBACiAgKiBUaGUgQHN5c19hZGRyIGlzIHVzdWFsbHkgYW4gZXJyb3IgYWRkcmVzcyByZWNlaXZlZCBmcm9tIHRoZSBoYXJkd2FyZS4KICAqLwogc3RhdGljIHZvaWQgZjEwX21hcF9zeXNhZGRyX3RvX2Nzcm93KHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCQkgICAgIHN0cnVjdCBhbWQ2NF9lcnJvcl9pbmZvX3JlZ3MgKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgZXJyX3JlZ3MgKmluZm8sCiAJCQkJICAgICB1NjQgc3lzX2FkZHIpCiB7CiAJc3RydWN0IGFtZDY0X3B2dCAqcHZ0ID0gbWNpLT5wdnRfaW5mbzsKQEAgLTE3MDEsOCArMTc1OCw4IEBACiAJaWYgKGNzcm93ID49IDApIHsKIAkJZXJyb3JfYWRkcmVzc190b19wYWdlX2FuZF9vZmZzZXQoc3lzX2FkZHIsICZwYWdlLCAmb2Zmc2V0KTsKIAotCQlzeW5kcm9tZSA9IEVYVFJBQ1RfSElHSF9TWU5EUk9NRShpbmZvLT5uYnNsKSA8PCA4OwotCQlzeW5kcm9tZSB8PSBFWFRSQUNUX0xPV19TWU5EUk9NRShpbmZvLT5uYnNoKTsKKwkJc3luZHJvbWUgID0gSElHSF9TWU5EUk9NRShpbmZvLT5uYnNsKSA8PCA4OworCQlzeW5kcm9tZSB8PSBMT1dfU1lORFJPTUUoaW5mby0+bmJzaCk7CiAKIAkJLyoKIAkJICogSXMgQ0hJUEtJTEwgb24/IElmIHNvLCB0aGVuIHdlIGNhbiBhdHRlbXB0IHRvIHVzZSB0aGUKQEAgLTIwNDUsNyArMjEwMiw3IEBACiAgKgktIDA6IGlmIG5vIHZhbGlkIGVycm9yIGlzIGluZGljYXRlZAogICovCiBzdGF0aWMgaW50IGFtZDY0X2dldF9lcnJvcl9pbmZvX3JlZ3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJCSAgICAgc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyAqcmVncykKKwkJCQkgICAgIHN0cnVjdCBlcnJfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQ7CiAJc3RydWN0IHBjaV9kZXYgKm1pc2NfZjNfY3RsOwpAQCAtMjA5NCwxMCArMjE1MSwxMCBAQAogICoJLSAwOiBpZiBubyBlcnJvciBpcyBmb3VuZAogICovCiBzdGF0aWMgaW50IGFtZDY0X2dldF9lcnJvcl9pbmZvKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCQlzdHJ1Y3QgYW1kNjRfZXJyb3JfaW5mb19yZWdzICppbmZvKQorCQkJCXN0cnVjdCBlcnJfcmVncyAqaW5mbykKIHsKIAlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQ7Ci0Jc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyByZWdzOworCXN0cnVjdCBlcnJfcmVncyByZWdzOwogCiAJcHZ0ID0gbWNpLT5wdnRfaW5mbzsKIApAQCAtMjE1Miw0OCArMjIwOSwxMiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYW1kNjRfZGVjb2RlX2dhcnRfdGxiX2Vycm9yKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCQkJIHN0cnVjdCBhbWQ2NF9lcnJvcl9pbmZvX3JlZ3MgKmluZm8pCi17Ci0JdTMyIGVycl9jb2RlOwotCXUzMiBlY190dDsJCS8qIGVycm9yIGNvZGUgdHJhbnNhY3Rpb24gdHlwZSAoMmIpICovCi0JdTMyIGVjX2xsOwkJLyogZXJyb3IgY29kZSBjYWNoZSBsZXZlbCAoMmIpICovCi0KLQllcnJfY29kZSA9IEVYVFJBQ1RfRVJST1JfQ09ERShpbmZvLT5uYnNsKTsKLQllY19sbCA9IEVYVFJBQ1RfTExfQ09ERShlcnJfY29kZSk7Ci0JZWNfdHQgPSBFWFRSQUNUX1RUX0NPREUoZXJyX2NvZGUpOwotCi0JYW1kNjRfbWNfcHJpbnRrKG1jaSwgS0VSTl9FUlIsCi0JCSAgICAgIkdBUlQgVExCIGV2ZW50OiB0cmFuc2FjdGlvbiB0eXBlKCVzKSwgIgotCQkgICAgICJjYWNoZSBsZXZlbCglcylcbiIsIHR0X21zZ3NbZWNfdHRdLCBsbF9tc2dzW2VjX2xsXSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhbWQ2NF9kZWNvZGVfbWVtX2NhY2hlX2Vycm9yKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCQkgICAgICBzdHJ1Y3QgYW1kNjRfZXJyb3JfaW5mb19yZWdzICppbmZvKQotewotCXUzMiBlcnJfY29kZTsKLQl1MzIgZWNfcnJycjsJCS8qIGVycm9yIGNvZGUgbWVtb3J5IHRyYW5zYWN0aW9uICg0YikgKi8KLQl1MzIgZWNfdHQ7CQkvKiBlcnJvciBjb2RlIHRyYW5zYWN0aW9uIHR5cGUgKDJiKSAqLwotCXUzMiBlY19sbDsJCS8qIGVycm9yIGNvZGUgY2FjaGUgbGV2ZWwgKDJiKSAqLwotCi0JZXJyX2NvZGUgPSBFWFRSQUNUX0VSUk9SX0NPREUoaW5mby0+bmJzbCk7Ci0JZWNfbGwgPSBFWFRSQUNUX0xMX0NPREUoZXJyX2NvZGUpOwotCWVjX3R0ID0gRVhUUkFDVF9UVF9DT0RFKGVycl9jb2RlKTsKLQllY19ycnJyID0gRVhUUkFDVF9SUlJSX0NPREUoZXJyX2NvZGUpOwotCi0JYW1kNjRfbWNfcHJpbnRrKG1jaSwgS0VSTl9FUlIsCi0JCSAgICAgImNhY2hlIGhpZXJhcmNoeSBlcnJvcjogbWVtb3J5IHRyYW5zYWN0aW9uIHR5cGUoJXMpLCAiCi0JCSAgICAgInRyYW5zYWN0aW9uIHR5cGUoJXMpLCBjYWNoZSBsZXZlbCglcylcbiIsCi0JCSAgICAgcnJycl9tc2dzW2VjX3JycnJdLCB0dF9tc2dzW2VjX3R0XSwgbGxfbXNnc1tlY19sbF0pOwotfQotCi0KIC8qCiAgKiBIYW5kbGUgYW55IENvcnJlY3RhYmxlIEVycm9ycyAoQ0VzKSB0aGF0IGhhdmUgb2NjdXJyZWQuIENoZWNrIGZvciB2YWxpZCBFUlJPUgogICogQUREUkVTUyBhbmQgcHJvY2Vzcy4KICAqLwogc3RhdGljIHZvaWQgYW1kNjRfaGFuZGxlX2NlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCSAgICBzdHJ1Y3QgYW1kNjRfZXJyb3JfaW5mb19yZWdzICppbmZvKQorCQkJICAgIHN0cnVjdCBlcnJfcmVncyAqaW5mbykKIHsKIAlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQgPSBtY2ktPnB2dF9pbmZvOwogCXU2NCBTeXN0ZW1BZGRyZXNzOwpAQCAtMjIxNiw3ICsyMjM3LDcgQEAKIAogLyogSGFuZGxlIGFueSBVbi1jb3JyZWN0YWJsZSBFcnJvcnMgKFVFcykgKi8KIHN0YXRpYyB2b2lkIGFtZDY0X2hhbmRsZV91ZShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCi0JCQkgICAgc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyAqaW5mbykKKwkJCSAgICBzdHJ1Y3QgZXJyX3JlZ3MgKmluZm8pCiB7CiAJaW50IGNzcm93OwogCXU2NCBTeXN0ZW1BZGRyZXNzOwpAQCAtMjI2MSw1OSArMjI4MiwyNCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYW1kNjRfZGVjb2RlX2J1c19lcnJvcihzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCi0JCQkJICAgc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyAqaW5mbykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2FtZDY0X2RlY29kZV9idXNfZXJyb3Ioc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJCQkgICAgc3RydWN0IGVycl9yZWdzICppbmZvKQogewotCXUzMiBlcnJfY29kZSwgZXh0X2VjOwotCXUzMiBlY19wcDsJCS8qIGVycm9yIGNvZGUgcGFydGljaXBhdGluZyBwcm9jZXNzb3IgKDJwKSAqLwotCXUzMiBlY190bzsJCS8qIGVycm9yIGNvZGUgdGltZWQgb3V0ICgxYikgKi8KLQl1MzIgZWNfcnJycjsJCS8qIGVycm9yIGNvZGUgbWVtb3J5IHRyYW5zYWN0aW9uICg0YikgKi8KLQl1MzIgZWNfaWk7CQkvKiBlcnJvciBjb2RlIG1lbW9yeSBvciBJL08gKDJiKSAqLwotCXUzMiBlY19sbDsJCS8qIGVycm9yIGNvZGUgY2FjaGUgbGV2ZWwgKDJiKSAqLworCXUzMiBlYyAgPSBFUlJPUl9DT0RFKGluZm8tPm5ic2wpOworCXUzMiB4ZWMgPSBFWFRfRVJST1JfQ09ERShpbmZvLT5uYnNsKTsKKwlpbnQgZWNjX3R5cGUgPSBpbmZvLT5uYnNoICYgKDB4MyA8PCAxMyk7CiAKLQlleHRfZWMgPSBFWFRSQUNUX0VYVF9FUlJPUl9DT0RFKGluZm8tPm5ic2wpOwotCWVycl9jb2RlID0gRVhUUkFDVF9FUlJPUl9DT0RFKGluZm8tPm5ic2wpOwotCi0JZWNfbGwgPSBFWFRSQUNUX0xMX0NPREUoZXJyX2NvZGUpOwotCWVjX2lpID0gRVhUUkFDVF9JSV9DT0RFKGVycl9jb2RlKTsKLQllY19ycnJyID0gRVhUUkFDVF9SUlJSX0NPREUoZXJyX2NvZGUpOwotCWVjX3RvID0gRVhUUkFDVF9UT19DT0RFKGVycl9jb2RlKTsKLQllY19wcCA9IEVYVFJBQ1RfUFBfQ09ERShlcnJfY29kZSk7Ci0KLQlhbWQ2NF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKLQkJIkJVUyBFUlJPUjpcbiIKLQkJIiAgdGltZS1vdXQoJXMpIG1lbSBvciBpL28oJXMpXG4iCi0JCSIgIHBhcnRpY2lwYXRpbmcgcHJvY2Vzc29yKCVzKVxuIgotCQkiICBtZW1vcnkgdHJhbnNhY3Rpb24gdHlwZSglcylcbiIKLQkJIiAgY2FjaGUgbGV2ZWwoJXMpIEVycm9yIEZvdW5kIGJ5OiAlc1xuIiwKLQkJdG9fbXNnc1tlY190b10sCi0JCWlpX21zZ3NbZWNfaWldLAotCQlwcF9tc2dzW2VjX3BwXSwKLQkJcnJycl9tc2dzW2VjX3JycnJdLAotCQlsbF9tc2dzW2VjX2xsXSwKLQkJKGluZm8tPm5ic2ggJiBLOF9OQlNIX0VSUl9TQ1JVQkVSKSA/Ci0JCQkiU2NydWJiZXIiIDogIk5vcm1hbCBPcGVyYXRpb24iKTsKLQotCS8qIElmIHRoaXMgd2FzIGFuICdvYnNlcnZlZCcgZXJyb3IsIGVhcmx5IG91dCAqLwotCWlmIChlY19wcCA9PSBLOF9OQlNMX1BQX09CUykKLQkJcmV0dXJuOwkJLyogV2UgYXJlbid0IHRoZSBub2RlIGludm9sdmVkICovCi0KLQkvKiBQYXJzZSBvdXQgdGhlIGV4dGVuZGVkIGVycm9yIGNvZGUgZm9yIEVDQyBldmVudHMgKi8KLQlzd2l0Y2ggKGV4dF9lYykgewotCS8qIEYxMCBjaGFuZ2VkIHRvIG9uZSBFeHRlbmRlZCBFQ0MgZXJyb3IgY29kZSAqLwotCWNhc2UgRjEwX05CU0xfRVhUX0VSUl9SRVM6CQkvKiBSZXNlcnZlZCBmaWVsZCAqLwotCWNhc2UgRjEwX05CU0xfRVhUX0VSUl9FQ0M6CQkvKiBGMTAgRUNDIGV4dCBlcnIgY29kZSAqLwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLCAiTk9UIEVDQzogbm8gc3BlY2lhbCBlcnJvciAiCi0JCQkJCSAgICAgICAiaGFuZGxpbmcgZm9yIHRoaXMgZXJyb3JcbiIpOworCS8qIEJhaWwgZWFybHkgb3V0IGlmIHRoaXMgd2FzIGFuICdvYnNlcnZlZCcgZXJyb3IgKi8KKwlpZiAoUFAoZWMpID09IEs4X05CU0xfUFBfT0JTKQogCQlyZXR1cm47Ci0JfQogCi0JaWYgKGluZm8tPm5ic2ggJiBLOF9OQlNIX0NFQ0MpCisJLyogRG8gb25seSBFQ0MgZXJyb3JzICovCisJaWYgKHhlYyAmJiB4ZWMgIT0gRjEwX05CU0xfRVhUX0VSUl9FQ0MpCisJCXJldHVybjsKKworCWlmIChlY2NfdHlwZSA9PSAyKQogCQlhbWQ2NF9oYW5kbGVfY2UobWNpLCBpbmZvKTsKLQllbHNlIGlmIChpbmZvLT5uYnNoICYgSzhfTkJTSF9VRUNDKQorCWVsc2UgaWYgKGVjY190eXBlID09IDEpCiAJCWFtZDY0X2hhbmRsZV91ZShtY2ksIGluZm8pOwogCiAJLyoKQEAgLTIzMjQsMTM5ICsyMzEwLDI2IEBACiAJICogY2F0YXN0cm9waGljLgogCSAqLwogCWlmIChpbmZvLT5uYnNoICYgSzhfTkJTSF9PVkVSRkxPVykKLQkJZWRhY19tY19oYW5kbGVfY2Vfbm9faW5mbyhtY2ksIEVEQUNfTU9EX1NUUgotCQkJCQkgICJFcnJvciBPdmVyZmxvdyBzZXQiKTsKKwkJZWRhY19tY19oYW5kbGVfY2Vfbm9faW5mbyhtY2ksIEVEQUNfTU9EX1NUUiAiRXJyb3IgT3ZlcmZsb3ciKTsKIH0KIAotaW50IGFtZDY0X3Byb2Nlc3NfZXJyb3JfaW5mbyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCi0JCQkgICAgIHN0cnVjdCBhbWQ2NF9lcnJvcl9pbmZvX3JlZ3MgKmluZm8sCi0JCQkgICAgIGludCBoYW5kbGVfZXJyb3JzKQordm9pZCBhbWQ2NF9kZWNvZGVfYnVzX2Vycm9yKGludCBub2RlX2lkLCBzdHJ1Y3QgZXJyX3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IGFtZDY0X3B2dCAqcHZ0OwotCXN0cnVjdCBhbWQ2NF9lcnJvcl9pbmZvX3JlZ3MgKnJlZ3M7Ci0JdTMyIGVycl9jb2RlLCBleHRfZWM7Ci0JaW50IGdhcnRfdGxiX2Vycm9yID0gMDsKKwlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kgPSBtY2lfbG9va3VwW25vZGVfaWRdOwogCi0JcHZ0ID0gbWNpLT5wdnRfaW5mbzsKLQotCS8qIElmIGNhbGxlciBkb2Vzbid0IHdhbnQgdXMgdG8gcHJvY2VzcyB0aGUgZXJyb3IsIHJldHVybiAqLwotCWlmICghaGFuZGxlX2Vycm9ycykKLQkJcmV0dXJuIDE7Ci0KLQlyZWdzID0gaW5mbzsKLQotCWRlYnVnZjEoIk5vcnRoQnJpZGdlIEVSUk9SOiBtY2koMHglcClcbiIsIG1jaSk7Ci0JZGVidWdmMSgiICBNQyBub2RlKCVkKSBFcnJvci1BZGRyZXNzKDB4JS44eC0lLjh4KVxuIiwKLQkJcHZ0LT5tY19ub2RlX2lkLCByZWdzLT5uYmVhaCwgcmVncy0+bmJlYWwpOwotCWRlYnVnZjEoIiAgbmJzaCgweCUuOHgpIG5ic2woMHglLjh4KVxuIiwKLQkJcmVncy0+bmJzaCwgcmVncy0+bmJzbCk7Ci0JZGVidWdmMSgiICBWYWxpZCBFcnJvcj0lcyBPdmVyZmxvdz0lc1xuIiwKLQkJKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX1ZBTElEX0JJVCkgPyAiVHJ1ZSIgOiAiRmFsc2UiLAotCQkocmVncy0+bmJzaCAmIEs4X05CU0hfT1ZFUkZMT1cpID8gIlRydWUiIDogIkZhbHNlIik7Ci0JZGVidWdmMSgiICBFcnIgVW5jb3JyZWN0ZWQ9JXMgTUNBIEVycm9yIFJlcG9ydGluZz0lc1xuIiwKLQkJKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX1VOQ09SUkVDVEVEX0VSUikgPwotCQkJIlRydWUiIDogIkZhbHNlIiwKLQkJKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX0VSUl9FTkFCTEUpID8KLQkJCSJUcnVlIiA6ICJGYWxzZSIpOwotCWRlYnVnZjEoIiAgTWlzY0VyciBWYWxpZD0lcyBFcnJBZGRyIFZhbGlkPSVzIFBDQz0lc1xuIiwKLQkJKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX01JU0NfRVJSX1ZBTElEKSA/Ci0JCQkiVHJ1ZSIgOiAiRmFsc2UiLAotCQkocmVncy0+bmJzaCAmIEs4X05CU0hfVkFMSURfRVJST1JfQUREUikgPwotCQkJIlRydWUiIDogIkZhbHNlIiwKLQkJKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX1BDQykgPwotCQkJIlRydWUiIDogIkZhbHNlIik7Ci0JZGVidWdmMSgiICBDRUNDPSVzIFVFQ0M9JXMgRm91bmQgYnkgU2NydWJlcj0lc1xuIiwKLQkJKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX0NFQ0MpID8KLQkJCSJUcnVlIiA6ICJGYWxzZSIsCi0JCShyZWdzLT5uYnNoICYgSzhfTkJTSF9VRUNDKSA/Ci0JCQkiVHJ1ZSIgOiAiRmFsc2UiLAotCQkocmVncy0+bmJzaCAmIEs4X05CU0hfRVJSX1NDUlVCRVIpID8KLQkJCSJUcnVlIiA6ICJGYWxzZSIpOwotCWRlYnVnZjEoIiAgQ09SRTA9JXMgQ09SRTE9JXMgQ09SRTI9JXMgQ09SRTM9JXNcbiIsCi0JCShyZWdzLT5uYnNoICYgSzhfTkJTSF9DT1JFMCkgPyAiVHJ1ZSIgOiAiRmFsc2UiLAotCQkocmVncy0+bmJzaCAmIEs4X05CU0hfQ09SRTEpID8gIlRydWUiIDogIkZhbHNlIiwKLQkJKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX0NPUkUyKSA/ICJUcnVlIiA6ICJGYWxzZSIsCi0JCShyZWdzLT5uYnNoICYgSzhfTkJTSF9DT1JFMykgPyAiVHJ1ZSIgOiAiRmFsc2UiKTsKLQotCi0JZXJyX2NvZGUgPSBFWFRSQUNUX0VSUk9SX0NPREUocmVncy0+bmJzbCk7Ci0KLQkvKiBEZXRlcm1pbmUgd2hpY2ggZXJyb3IgdHlwZToKLQkgKgkxKSBHQVJUIGVycm9ycyAtIG5vbi1mYXRhbCwgZGV2ZWxvcG1lbnRhbCBldmVudHMKLQkgKgkyKSBNRU1PUlkgZXJyb3JzCi0JICoJMykgQlVTIGVycm9ycwotCSAqCTQpIFVua25vd24gZXJyb3IKLQkgKi8KLQlpZiAoVEVTVF9UTEJfRVJST1IoZXJyX2NvZGUpKSB7Ci0JCS8qCi0JCSAqIEdBUlQgZXJyb3JzIGFyZSBpbnRlbmRlZCB0byBoZWxwIGdyYXBoaWNzIGRyaXZlciBkZXZlbG9wZXJzCi0JCSAqIHRvIGRldGVjdCBiYWQgR0FSVCBQVEVzLiBJdCBpcyByZWNvbW1lbmRlZCBieSBBTUQgdG8gZGlzYWJsZQotCQkgKiBHQVJUIHRhYmxlIHdhbGsgZXJyb3IgcmVwb3J0aW5nIGJ5IGRlZmF1bHRbMV0gKGN1cnJlbnRseQotCQkgKiBiZWluZyBkaXNhYmxlZCBpbiBtY2VfY3B1X3F1aXJrcygpKSBhbmQgYWNjb3JkaW5nIHRvIHRoZQotCQkgKiBjb21tZW50IGluIG1jZV9jcHVfcXVpcmtzKCksIHN1Y2ggR0FSVCBlcnJvcnMgY2FuIGJlCi0JCSAqIGluY29ycmVjdGx5IHRyaWdnZXJlZC4gV2UgbWF5IHNlZSB0aGVzZSBlcnJvcnMgYW55d2F5IGFuZAotCQkgKiB1bmxlc3MgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLCB0aGV5IHdvbid0IGJlIHJlcG9ydGVkLgotCQkgKgotCQkgKiBbMV0gc2VjdGlvbiAxMy4xMC4xIG9uIEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXJzIEd1aWRlIGZvcgotCQkgKiAgICAgQU1EIE5QVCBmYW1pbHkgMEZoIHByb2Nlc3NvcnMKLQkJICovCi0JCWlmIChyZXBvcnRfZ2FydF9lcnJvcnMgPT0gMCkKLQkJCXJldHVybiAxOwotCi0JCS8qCi0JCSAqIE9ubHkgaWYgR0FSVCBlcnJvciByZXBvcnRpbmcgaXMgcmVxdWVzdGVkIHNob3VsZCB3ZSBnZW5lcmF0ZQotCQkgKiBhbnkgbG9ncy4KLQkJICovCi0JCWdhcnRfdGxiX2Vycm9yID0gMTsKLQotCQlkZWJ1Z2YxKCJHQVJUIFRMQiBlcnJvclxuIik7Ci0JCWFtZDY0X2RlY29kZV9nYXJ0X3RsYl9lcnJvcihtY2ksIGluZm8pOwotCX0gZWxzZSBpZiAoVEVTVF9NRU1fRVJST1IoZXJyX2NvZGUpKSB7Ci0JCWRlYnVnZjEoIk1lbW9yeS9DYWNoZSBlcnJvclxuIik7Ci0JCWFtZDY0X2RlY29kZV9tZW1fY2FjaGVfZXJyb3IobWNpLCBpbmZvKTsKLQl9IGVsc2UgaWYgKFRFU1RfQlVTX0VSUk9SKGVycl9jb2RlKSkgewotCQlkZWJ1Z2YxKCJCdXMgKExpbmsvRFJBTSkgZXJyb3JcbiIpOwotCQlhbWQ2NF9kZWNvZGVfYnVzX2Vycm9yKG1jaSwgaW5mbyk7Ci0JfSBlbHNlIHsKLQkJLyogc2hvdWxkbid0IHJlYWNoIGhlcmUhICovCi0JCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fV0FSTklORywKLQkJCSAgICAgIiVzKCk6IHVua25vd24gTUNFIGVycm9yIDB4JXhcbiIsIF9fZnVuY19fLAotCQkJICAgICBlcnJfY29kZSk7Ci0JfQotCi0JZXh0X2VjID0gRVhUUkFDVF9FWFRfRVJST1JfQ09ERShyZWdzLT5uYnNsKTsKLQlhbWQ2NF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKLQkJIkV4dEVycj0oMHgleCkgJXNcbiIsIGV4dF9lYywgZXh0X21zZ3NbZXh0X2VjXSk7Ci0KLQlpZiAoKChleHRfZWMgPj0gRjEwX05CU0xfRVhUX0VSUl9DUkMgJiYKLQkJCWV4dF9lYyA8PSBGMTBfTkJTTF9FWFRfRVJSX1RHVCkgfHwKLQkJCShleHRfZWMgPT0gRjEwX05CU0xfRVhUX0VSUl9STVcpKSAmJgotCQkJRVhUUkFDVF9MRFRfTElOSyhpbmZvLT5uYnNoKSkgewotCi0JCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLAotCQkJIkVycm9yIG9uIGh5cGVydHJhbnNwb3J0IGxpbms6ICVzXG4iLAotCQkJaHRsaW5rX21zZ3NbCi0JCQlFWFRSQUNUX0xEVF9MSU5LKGluZm8tPm5ic2gpXSk7Ci0JfQorCV9fYW1kNjRfZGVjb2RlX2J1c19lcnJvcihtY2ksIHJlZ3MpOwogCiAJLyoKIAkgKiBDaGVjayB0aGUgVUUgYml0IG9mIHRoZSBOQiBzdGF0dXMgaGlnaCByZWdpc3RlciwgaWYgc2V0IGdlbmVyYXRlIHNvbWUKIAkgKiBsb2dzLiBJZiBOT1QgYSBHQVJUIGVycm9yLCB0aGVuIHByb2Nlc3MgdGhlIGV2ZW50IGFzIGEgTk8tSU5GTyBldmVudC4KIAkgKiBJZiBpdCB3YXMgYSBHQVJUIGVycm9yLCBza2lwIHRoYXQgcHJvY2Vzcy4KKwkgKgorCSAqIEZJWE1FOiB0aGlzIHNob3VsZCBnbyBzb21ld2hlcmUgZWxzZSwgaWYgYXQgYWxsLgogCSAqLwotCWlmIChyZWdzLT5uYnNoICYgSzhfTkJTSF9VTkNPUlJFQ1RFRF9FUlIpIHsKLQkJYW1kNjRfbWNfcHJpbnRrKG1jaSwgS0VSTl9DUklULCAidW5jb3JyZWN0ZWQgZXJyb3JcbiIpOwotCQlpZiAoIWdhcnRfdGxiX2Vycm9yKQotCQkJZWRhY19tY19oYW5kbGVfdWVfbm9faW5mbyhtY2ksICJVRSBiaXQgaXMgc2V0XG4iKTsKLQl9CisJaWYgKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX1VDX0VSUiAmJiAhcmVwb3J0X2dhcnRfZXJyb3JzKQorCQllZGFjX21jX2hhbmRsZV91ZV9ub19pbmZvKG1jaSwgIlVFIGJpdCBpcyBzZXQiKTsKIAotCWlmIChyZWdzLT5uYnNoICYgSzhfTkJTSF9QQ0MpCi0JCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fQ1JJVCwKLQkJCSJQQ0MgKHByb2Nlc3NvciBjb250ZXh0IGNvcnJ1cHQpIHNldFxuIik7Ci0KLQlyZXR1cm4gMTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGFtZDY0X3Byb2Nlc3NfZXJyb3JfaW5mbyk7CiAKIC8qCiAgKiBUaGUgbWFpbiBwb2xsaW5nICdjaGVjaycgZnVuY3Rpb24sIGNhbGxlZCBGUk9NIHRoZSBlZGFjIGNvcmUgdG8gcGVyZm9ybSB0aGUKQEAgLTI0NjQsMTAgKzIzMzcsMTIgQEAKICAqLwogc3RhdGljIHZvaWQgYW1kNjRfY2hlY2soc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQogewotCXN0cnVjdCBhbWQ2NF9lcnJvcl9pbmZvX3JlZ3MgaW5mbzsKKwlzdHJ1Y3QgZXJyX3JlZ3MgcmVnczsKIAotCWlmIChhbWQ2NF9nZXRfZXJyb3JfaW5mbyhtY2ksICZpbmZvKSkKLQkJYW1kNjRfcHJvY2Vzc19lcnJvcl9pbmZvKG1jaSwgJmluZm8sIDEpOworCWlmIChhbWQ2NF9nZXRfZXJyb3JfaW5mbyhtY2ksICZyZWdzKSkgeworCQlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQgPSBtY2ktPnB2dF9pbmZvOworCQlhbWRfZGVjb2RlX25iX21jZShwdnQtPm1jX25vZGVfaWQsICZyZWdzLCAxKTsKKwl9CiB9CiAKIC8qCkBAIC0zMTYzLDYgKzMwMzgsMTMgQEAKIAogCW1jaV9sb29rdXBbbm9kZV9pZF0gPSBtY2k7CiAJcHZ0X2xvb2t1cFtub2RlX2lkXSA9IE5VTEw7CisKKwkvKiByZWdpc3RlciBzdHVmZiB3aXRoIEVEQUMgTUNFICovCisJaWYgKHJlcG9ydF9nYXJ0X2Vycm9ycykKKwkJYW1kX3JlcG9ydF9nYXJ0X2Vycm9ycyh0cnVlKTsKKworCWFtZF9yZWdpc3Rlcl9lY2NfZGVjb2RlcihhbWQ2NF9kZWNvZGVfYnVzX2Vycm9yKTsKKwogCXJldHVybiAwOwogCiBlcnJfYWRkX21jOgpAQCAtMzIyOSw2ICszMTExLDEwIEBACiAKIAltY2lfbG9va3VwW3B2dC0+bWNfbm9kZV9pZF0gPSBOVUxMOwogCisJLyogdW5yZWdpc3RlciBmcm9tIEVEQUMgTUNFICovCisJYW1kX3JlcG9ydF9nYXJ0X2Vycm9ycyhmYWxzZSk7CisJYW1kX3VucmVnaXN0ZXJfZWNjX2RlY29kZXIoYW1kNjRfZGVjb2RlX2J1c19lcnJvcik7CisKIAkvKiBGcmVlIHRoZSBFREFDIENPUkUgcmVzb3VyY2VzICovCiAJZWRhY19tY19mcmVlKG1jaSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaAppbmRleCBiYTczMDE1Li44ZWEwN2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKQEAgLTcyLDYgKzcyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lZGFjLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgImVkYWNfY29yZS5oIgorI2luY2x1ZGUgImVkYWNfbWNlX2FtZC5oIgogCiAjZGVmaW5lIGFtZDY0X3ByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pIFwKIAllZGFjX3ByaW50ayhsZXZlbCwgImFtZDY0IiwgZm10LCAjI2FyZykKQEAgLTMwMywyMSArMzA0LDkgQEAKICNkZWZpbmUgSzhfTkJTTAkJCQkweDQ4CiAKIAotI2RlZmluZSBFWFRSQUNUX0hJR0hfU1lORFJPTUUoeCkJKCgoeCkgPj4gMjQpICYgMHhmZikKLSNkZWZpbmUgRVhUUkFDVF9FWFRfRVJST1JfQ09ERSh4KQkoKCh4KSA+PiAxNikgJiAweDFmKQotCiAvKiBGYW1pbHkgRjEwaDogTm9ybWFsaXplZCBFeHRlbmRlZCBFcnJvciBDb2RlcyAqLwogI2RlZmluZSBGMTBfTkJTTF9FWFRfRVJSX1JFUwkJMHgwCi0jZGVmaW5lIEYxMF9OQlNMX0VYVF9FUlJfQ1JDCQkweDEKLSNkZWZpbmUgRjEwX05CU0xfRVhUX0VSUl9TWU5DCQkweDIKLSNkZWZpbmUgRjEwX05CU0xfRVhUX0VSUl9NU1QJCTB4MwotI2RlZmluZSBGMTBfTkJTTF9FWFRfRVJSX1RHVAkJMHg0Ci0jZGVmaW5lIEYxMF9OQlNMX0VYVF9FUlJfR0FSVAkJMHg1Ci0jZGVmaW5lIEYxMF9OQlNMX0VYVF9FUlJfUk1XCQkweDYKLSNkZWZpbmUgRjEwX05CU0xfRVhUX0VSUl9XRFQJCTB4NwogI2RlZmluZSBGMTBfTkJTTF9FWFRfRVJSX0VDQwkJMHg4Ci0jZGVmaW5lIEYxMF9OQlNMX0VYVF9FUlJfREVWCQkweDkKLSNkZWZpbmUgRjEwX05CU0xfRVhUX0VSUl9MSU5LX0RBVEEJMHhBCiAKIC8qIE5leHQgdHdvIGFyZSBvdmVybG9hZGVkIHZhbHVlcyAqLwogI2RlZmluZSBGMTBfTkJTTF9FWFRfRVJSX0xJTktfUFJPVE8JMHhCCkBAIC0zNDgsMTcgKzMzNyw2IEBACiAjZGVmaW5lIEs4X05CU0xfRVhUX0VSUl9DSElQS0lMTF9FQ0MJMHg4CiAjZGVmaW5lIEs4X05CU0xfRVhUX0VSUl9EUkFNX1BBUklUWQkweEQKIAotI2RlZmluZSBFWFRSQUNUX0VSUk9SX0NPREUoeCkJCSgoeCkgJiAweGZmZmYpCi0jZGVmaW5lCVRFU1RfVExCX0VSUk9SKHgpCQkoKCh4KSAmIDB4RkZGMCkgPT0gMHgwMDEwKQotI2RlZmluZQlURVNUX01FTV9FUlJPUih4KQkJKCgoeCkgJiAweEZGMDApID09IDB4MDEwMCkKLSNkZWZpbmUJVEVTVF9CVVNfRVJST1IoeCkJCSgoKHgpICYgMHhGODAwKSA9PSAweDA4MDApCi0jZGVmaW5lCUVYVFJBQ1RfVFRfQ09ERSh4KQkJKCgoeCkgPj4gMikgJiAweDMpCi0jZGVmaW5lCUVYVFJBQ1RfSUlfQ09ERSh4KQkJKCgoeCkgPj4gMikgJiAweDMpCi0jZGVmaW5lCUVYVFJBQ1RfTExfQ09ERSh4KQkJKCgoeCkgPj4gMCkgJiAweDMpCi0jZGVmaW5lCUVYVFJBQ1RfUlJSUl9DT0RFKHgpCQkoKCh4KSA+PiA0KSAmIDB4ZikKLSNkZWZpbmUJRVhUUkFDVF9UT19DT0RFKHgpCQkoKCh4KSA+PiA4KSAmIDB4MSkKLSNkZWZpbmUJRVhUUkFDVF9QUF9DT0RFKHgpCQkoKCh4KSA+PiA5KSAmIDB4MykKLQogLyoKICAqIFRoZSBmb2xsb3dpbmcgYXJlIGZvciBCVVMgdHlwZSBlcnJvcnMgQUZURVIgdmFsdWVzIGhhdmUgYmVlbiBub3JtYWxpemVkIGJ5CiAgKiBzaGlmdGluZyByaWdodApAQCAtMzY4LDI4ICszNDYsNyBAQAogI2RlZmluZSBLOF9OQlNMX1BQX09CUwkJCTB4MgogI2RlZmluZSBLOF9OQlNMX1BQX0dFTkVSSUMJCTB4MwogCi0KLSNkZWZpbmUgSzhfTkJTSAkJCQkweDRDCi0KLSNkZWZpbmUgSzhfTkJTSF9WQUxJRF9CSVQJCUJJVCgzMSkKLSNkZWZpbmUgSzhfTkJTSF9PVkVSRkxPVwkJQklUKDMwKQotI2RlZmluZSBLOF9OQlNIX1VOQ09SUkVDVEVEX0VSUgkJQklUKDI5KQotI2RlZmluZSBLOF9OQlNIX0VSUl9FTkFCTEUJCUJJVCgyOCkKLSNkZWZpbmUgSzhfTkJTSF9NSVNDX0VSUl9WQUxJRAkJQklUKDI3KQotI2RlZmluZSBLOF9OQlNIX1ZBTElEX0VSUk9SX0FERFIJQklUKDI2KQotI2RlZmluZSBLOF9OQlNIX1BDQwkJCUJJVCgyNSkKLSNkZWZpbmUgSzhfTkJTSF9DRUNDCQkJQklUKDE0KQotI2RlZmluZSBLOF9OQlNIX1VFQ0MJCQlCSVQoMTMpCi0jZGVmaW5lIEs4X05CU0hfRVJSX1NDUlVCRVIJCUJJVCg4KQotI2RlZmluZSBLOF9OQlNIX0NPUkUzCQkJQklUKDMpCi0jZGVmaW5lIEs4X05CU0hfQ09SRTIJCQlCSVQoMikKLSNkZWZpbmUgSzhfTkJTSF9DT1JFMQkJCUJJVCgxKQotI2RlZmluZSBLOF9OQlNIX0NPUkUwCQkJQklUKDApCi0KLSNkZWZpbmUgRVhUUkFDVF9MRFRfTElOSyh4KQkJKCgoeCkgPj4gNCkgJiAweDcpCiAjZGVmaW5lIEVYVFJBQ1RfRVJSX0NQVV9NQVAoeCkJCSgoeCkgJiAweEYpCi0jZGVmaW5lIEVYVFJBQ1RfTE9XX1NZTkRST01FKHgpCQkoKCh4KSA+PiAxNSkgJiAweGZmKQotCiAKICNkZWZpbmUgSzhfTkJFQUwJCQkweDUwCiAjZGVmaW5lIEs4X05CRUFICQkJMHg1NApAQCAtNDU1LDIzICs0MTIsNiBAQAogCUYxMV9DUFVTLAogfTsKIAotLyoKLSAqIFN0cnVjdHVyZSB0byBob2xkOgotICoKLSAqIDEpIGR5bmFtaWNhbGx5IHJlYWQgc3RhdHVzIGFuZCBlcnJvciBhZGRyZXNzIEhXIHJlZ2lzdGVycwotICogMikgc3lzZnMgZW50ZXJlZCB2YWx1ZXMKLSAqIDMpIE1DRSB2YWx1ZXMKLSAqCi0gKiBEZXBlbmRzIG9uIGVudHJ5IGludG8gdGhlIG1vZHVsZXMKLSAqLwotc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyB7Ci0JdTMyIG5iY2ZnOwotCXUzMiBuYnNoOwotCXUzMiBuYnNsOwotCXUzMiBuYmVhaDsKLQl1MzIgbmJlYWw7Ci19OwotCiAvKiBFcnJvciBpbmplY3Rpb24gY29udHJvbCBzdHJ1Y3R1cmUgKi8KIHN0cnVjdCBlcnJvcl9pbmplY3Rpb24gewogCXUzMglzZWN0aW9uOwpAQCAtNTQyLDcgKzQ4Miw3IEBACiAJdTMyIG9ubGluZV9zcGFyZTsgICAgICAgICAgICAgICAvKiBPbi1MaW5lIHNwYXJlIFJlZyAqLwogCiAJLyogdGVtcCBzdG9yYWdlIGZvciB3aGVuIGlucHV0IGlzIHJlY2VpdmVkIGZyb20gc3lzZnMgKi8KLQlzdHJ1Y3QgYW1kNjRfZXJyb3JfaW5mb19yZWdzIGN0bF9lcnJvcl9pbmZvOworCXN0cnVjdCBlcnJfcmVncyBjdGxfZXJyb3JfaW5mbzsKIAogCS8qIHBsYWNlIHRvIHN0b3JlIGVycm9yIGluamVjdGlvbiBwYXJhbWV0ZXJzIHByaW9yIHRvIGlzc3VlICovCiAJc3RydWN0IGVycm9yX2luamVjdGlvbiBpbmplY3Rpb247CkBAIC02MDEsMTEgKzU0MSwxMSBAQAogCWludCAoKmVhcmx5X2NoYW5uZWxfY291bnQpKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCk7CiAKIAl1NjQgKCpnZXRfZXJyb3JfYWRkcmVzcykoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyAqaW5mbyk7CisJCQlzdHJ1Y3QgZXJyX3JlZ3MgKmluZm8pOwogCXZvaWQgKCpyZWFkX2RyYW1fYmFzZV9saW1pdCkoc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCBpbnQgZHJhbSk7CiAJdm9pZCAoKnJlYWRfZHJhbV9jdGxfcmVnaXN0ZXIpKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCk7CiAJdm9pZCAoKm1hcF9zeXNhZGRyX3RvX2Nzcm93KShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCi0JCQkJCXN0cnVjdCBhbWQ2NF9lcnJvcl9pbmZvX3JlZ3MgKmluZm8sCisJCQkJCXN0cnVjdCBlcnJfcmVncyAqaW5mbywKIAkJCQkJdTY0IFN5c3RlbUFkZHIpOwogCWludCAoKmRiYW1fbWFwX3RvX3BhZ2VzKShzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIGludCBkcmFtX21hcCk7CiB9OwpAQCAtNjM3LDggKzU3Nyw1IEBACiAjZGVmaW5lIEYxMF9NSU5fU0NSVUJfUkFURV9CSVRTCTB4NQogI2RlZmluZSBGMTFfTUlOX1NDUlVCX1JBVEVfQklUUwkweDYKIAotaW50IGFtZDY0X3Byb2Nlc3NfZXJyb3JfaW5mbyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCi0JCQkgICAgIHN0cnVjdCBhbWQ2NF9lcnJvcl9pbmZvX3JlZ3MgKmluZm8sCi0JCQkgICAgIGludCBoYW5kbGVfZXJyb3JzKTsKIGludCBhbWQ2NF9nZXRfZHJhbV9ob2xlX2luZm8oc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCB1NjQgKmhvbGVfYmFzZSwKIAkJCSAgICAgdTY0ICpob2xlX29mZnNldCwgdTY0ICpob2xlX3NpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWNfZGJnLmMgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhY19kYmcuYwppbmRleCAwYTQxYjI0Li41OWNmMmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhY19kYmcuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhY19kYmcuYwpAQCAtMjQsNyArMjQsNyBAQAogCiAJCS8qIFByb2Nlc3MgdGhlIE1hcHBpbmcgcmVxdWVzdCAqLwogCQkvKiBUT0RPOiBBZGQgcmFjZSBwcmV2ZW50aW9uICovCi0JCWFtZDY0X3Byb2Nlc3NfZXJyb3JfaW5mbyhtY2ksICZwdnQtPmN0bF9lcnJvcl9pbmZvLCAxKTsKKwkJYW1kX2RlY29kZV9uYl9tY2UocHZ0LT5tY19ub2RlX2lkLCAmcHZ0LT5jdGxfZXJyb3JfaW5mbywgMSk7CiAKIAkJcmV0dXJuIGNvdW50OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2Vycl90eXBlcy5jIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWNfZXJyX3R5cGVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMTJmZjEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWNfZXJyX3R5cGVzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotI2luY2x1ZGUgImFtZDY0X2VkYWMuaCIKLQotLyoKLSAqIFNlZSBGMng4MCBmb3IgSzggYW5kIEYyeFsxLDBdODAgZm9yIEZhbTEwIGFuZCBsYXRlci4gVGhlIHRhYmxlIGJlbG93IGlzIG9ubHkKLSAqIGZvciBERFIyIERSQU0gbWFwcGluZy4KLSAqLwotdTMyIHJldmZfcXVhZF9kZHIyX3NoaWZ0W10gPSB7Ci0JMCwJLyogMDAwMGIgTlVMTCBESU1NICgxMjhtYikgKi8KLQkyOCwJLyogMDAwMWIgMjU2bWIgKi8KLQkyOSwJLyogMDAxMGIgNTEybWIgKi8KLQkyOSwJLyogMDAxMWIgNTEybWIgKi8KLQkyOSwJLyogMDEwMGIgNTEybWIgKi8KLQkzMCwJLyogMDEwMWIgMWdiICovCi0JMzAsCS8qIDAxMTBiIDFnYiAqLwotCTMxLAkvKiAwMTExYiAyZ2IgKi8KLQkzMSwJLyogMTAwMGIgMmdiICovCi0JMzIsCS8qIDEwMDFiIDRnYiAqLwotCTMyLAkvKiAxMDEwYiA0Z2IgKi8KLQkzMywJLyogMTAxMWIgOGdiICovCi0JMCwJLyogMTEwMGIgZnV0dXJlICovCi0JMCwJLyogMTEwMWIgZnV0dXJlICovCi0JMCwJLyogMTExMGIgZnV0dXJlICovCi0JMAkvKiAxMTExYiBmdXR1cmUgKi8KLX07Ci0KLS8qCi0gKiBWYWxpZCBzY3J1YiByYXRlcyBmb3IgdGhlIEs4IGhhcmR3YXJlIG1lbW9yeSBzY3J1YmJlci4gV2UgbWFwIHRoZSBzY3J1YmJpbmcKLSAqIGJhbmR3aWR0aCB0byBhIHZhbGlkIGJpdCBwYXR0ZXJuLiBUaGUgJ3NldCcgb3BlcmF0aW9uIGZpbmRzIHRoZSAnbWF0Y2hpbmctCi0gKiBvciBoaWdoZXIgdmFsdWUnLgotICoKLSAqRklYTUU6IFByb2R1Y2UgYSBiZXR0ZXIgbWFwcGluZy9saW5lYXJpc2F0aW9uLgotICovCi0KLXN0cnVjdCBzY3J1YnJhdGUgc2NydWJyYXRlc1tdID0gewotCXsgMHgwMSwgMTYwMDAwMDAwMFVMfSwKLQl7IDB4MDIsIDgwMDAwMDAwMFVMfSwKLQl7IDB4MDMsIDQwMDAwMDAwMFVMfSwKLQl7IDB4MDQsIDIwMDAwMDAwMFVMfSwKLQl7IDB4MDUsIDEwMDAwMDAwMFVMfSwKLQl7IDB4MDYsIDUwMDAwMDAwVUx9LAotCXsgMHgwNywgMjUwMDAwMDBVTH0sCi0JeyAweDA4LCAxMjI4NDA2OVVMfSwKLQl7IDB4MDksIDYyNzQ1MDlVTH0sCi0JeyAweDBBLCAzMTIxOTUxVUx9LAotCXsgMHgwQiwgMTU2MDk3NVVMfSwKLQl7IDB4MEMsIDc4MTQ0MFVMfSwKLQl7IDB4MEQsIDM5MDcyMFVMfSwKLQl7IDB4MEUsIDE5NTMwMFVMfSwKLQl7IDB4MEYsIDk3NjUwVUx9LAotCXsgMHgxMCwgNDg4NTRVTH0sCi0JeyAweDExLCAyNDQyN1VMfSwKLQl7IDB4MTIsIDEyMjEzVUx9LAotCXsgMHgxMywgNjEwMVVMfSwKLQl7IDB4MTQsIDMwNTFVTH0sCi0JeyAweDE1LCAxNTIzVUx9LAotCXsgMHgxNiwgNzYxVUx9LAotCXsgMHgwMCwgMFVMfSwgICAgICAgIC8qIHNjcnViYmluZyBvZmYgKi8KLX07Ci0KLS8qCi0gKiBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBkaWZmZXJlbnQgTUNBIHJlcG9ydGVkIGVycm9yIHR5cGVzLCBzZWUgRjN4NDgKLSAqIG9yIE1TUjAwMDBfMDQxMS4KLSAqLwotY29uc3QgY2hhciAqdHRfbXNnc1tdID0geyAgICAgICAgLyogdHJhbnNhY3Rpb24gdHlwZSAqLwotCSJpbnN0cnVjdGlvbiIsCi0JImRhdGEiLAotCSJnZW5lcmljIiwKLQkicmVzZXJ2ZWQiCi19OwotCi1jb25zdCBjaGFyICpsbF9tc2dzW10gPSB7CS8qIGNhY2hlIGxldmVsICovCi0JIkwwIiwKLQkiTDEiLAotCSJMMiIsCi0JIkwzL2dlbmVyaWMiCi19OwotCi1jb25zdCBjaGFyICpycnJyX21zZ3NbXSA9IHsKLQkiZ2VuZXJpYyIsCi0JImdlbmVyaWMgcmVhZCIsCi0JImdlbmVyaWMgd3JpdGUiLAotCSJkYXRhIHJlYWQiLAotCSJkYXRhIHdyaXRlIiwKLQkiaW5zdCBmZXRjaCIsCi0JInByZWZldGNoIiwKLQkiZXZpY3QiLAotCSJzbm9vcCIsCi0JInJlc2VydmVkIFJSUlI9IDkiLAotCSJyZXNlcnZlZCBSUlJSPSAxMCIsCi0JInJlc2VydmVkIFJSUlI9IDExIiwKLQkicmVzZXJ2ZWQgUlJSUj0gMTIiLAotCSJyZXNlcnZlZCBSUlJSPSAxMyIsCi0JInJlc2VydmVkIFJSUlI9IDE0IiwKLQkicmVzZXJ2ZWQgUlJSUj0gMTUiCi19OwotCi1jb25zdCBjaGFyICpwcF9tc2dzW10gPSB7CS8qIHBhcnRpY2lwYXRpbmcgcHJvY2Vzc29yICovCi0JImxvY2FsIG5vZGUgb3JpZ2luYXRlZCAoU1JDKSIsCi0JImxvY2FsIG5vZGUgcmVzcG9uZGVkIHRvIHJlcXVlc3QgKFJFUykiLAotCSJsb2NhbCBub2RlIG9ic2VydmVkIGFzIDNyZCBwYXJ0eSAoT0JTKSIsCi0JImdlbmVyaWMiCi19OwotCi1jb25zdCBjaGFyICp0b19tc2dzW10gPSB7Ci0JIm5vIHRpbWVvdXQiLAotCSJ0aW1lZCBvdXQiCi19OwotCi1jb25zdCBjaGFyICppaV9tc2dzW10gPSB7CS8qIG1lbW9yeSBvciBpL28gKi8KLQkibWVtIGFjY2VzcyIsCi0JInJlc2VydmVkIiwKLQkiaS9vIGFjY2VzcyIsCi0JImdlbmVyaWMiCi19OwotCi0vKiBNYXAgdGhlIDUgYml0cyBvZiBFeHRlbmRlZCBFcnJvciBjb2RlIHRvIHRoZSBzdHJpbmcgdGFibGUuICovCi1jb25zdCBjaGFyICpleHRfbXNnc1tdID0gewkvKiBleHRlbmRlZCBlcnJvciAqLwotCSJLOCBFQ0MgZXJyb3IvRjEwIHJlc2VydmVkIiwJLyogMF8wMDAwYiAqLwotCSJDUkMgZXJyb3IiLAkJCS8qIDBfMDAwMWIgKi8KLQkic3luYyBlcnJvciIsCQkJLyogMF8wMDEwYiAqLwotCSJtc3QgYWJvcnQiLAkJCS8qIDBfMDAxMWIgKi8KLQkidGd0IGFib3J0IiwJCQkvKiAwXzAxMDBiICovCi0JIkdBUlQgZXJyb3IiLAkJCS8qIDBfMDEwMWIgKi8KLQkiUk1XIGVycm9yIiwJCQkvKiAwXzAxMTBiICovCi0JIldkb2cgdGltZXIgZXJyb3IiLAkJLyogMF8wMTExYiAqLwotCSJGMTAtRUNDL0s4LUNoaXBraWxsIGVycm9yIiwJLyogMF8xMDAwYiAqLwotCSJERVYgRXJyb3IiLAkJCS8qIDBfMTAwMWIgKi8KLQkiTGluayBEYXRhIGVycm9yIiwJCS8qIDBfMTAxMGIgKi8KLQkiTGluayBvciBMMyBQcm90b2NvbCBlcnJvciIsCS8qIDBfMTAxMWIgKi8KLQkiTkIgQXJyYXkgZXJyb3IiLAkJLyogMF8xMTAwYiAqLwotCSJEUkFNIFBhcml0eSBlcnJvciIsCQkvKiAwXzExMDFiICovCi0JIkxpbmsgUmV0cnkvR0FSVCBUYWJsZSBXYWxrL0RFViBUYWJsZSBXYWxrIGVycm9yIiwgLyogMF8xMTEwYiAqLwotCSJSZXMgMHgwZmYgZXJyb3IiLAkJLyogMF8xMTExYiAqLwotCSJSZXMgMHgxMDAgZXJyb3IiLAkJLyogMV8wMDAwYiAqLwotCSJSZXMgMHgxMDEgZXJyb3IiLAkJLyogMV8wMDAxYiAqLwotCSJSZXMgMHgxMDIgZXJyb3IiLAkJLyogMV8wMDEwYiAqLwotCSJSZXMgMHgxMDMgZXJyb3IiLAkJLyogMV8wMDExYiAqLwotCSJSZXMgMHgxMDQgZXJyb3IiLAkJLyogMV8wMTAwYiAqLwotCSJSZXMgMHgxMDUgZXJyb3IiLAkJLyogMV8wMTAxYiAqLwotCSJSZXMgMHgxMDYgZXJyb3IiLAkJLyogMV8wMTEwYiAqLwotCSJSZXMgMHgxMDcgZXJyb3IiLAkJLyogMV8wMTExYiAqLwotCSJSZXMgMHgxMDggZXJyb3IiLAkJLyogMV8xMDAwYiAqLwotCSJSZXMgMHgxMDkgZXJyb3IiLAkJLyogMV8xMDAxYiAqLwotCSJSZXMgMHgxMEEgZXJyb3IiLAkJLyogMV8xMDEwYiAqLwotCSJSZXMgMHgxMEIgZXJyb3IiLAkJLyogMV8xMDExYiAqLwotCSJMMyBDYWNoZSBEYXRhIGVycm9yIiwJCS8qIDFfMTEwMGIgKi8KLQkiTDMgQ2FjaGVUYWcgZXJyb3IiLAkJLyogMV8xMTAxYiAqLwotCSJMMyBDYWNoZSBMUlUgZXJyb3IiLAkJLyogMV8xMTEwYiAqLwotCSJSZXMgMHgxRkYgZXJyb3IiCQkvKiAxXzExMTFiICovCi19OwotCi1jb25zdCBjaGFyICpodGxpbmtfbXNnc1tdID0gewotCSJub25lIiwKLQkiMSIsCi0JIjIiLAotCSIxIDIiLAotCSIzIiwKLQkiMSAzIiwKLQkiMiAzIiwKLQkiMSAyIDMiCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5jIGIvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4Y2E3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMKQEAgLTAsMCArMSw0MjIgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlICJlZGFjX21jZV9hbWQuaCIKKworc3RhdGljIGJvb2wgcmVwb3J0X2dhcnRfZXJyb3JzOworc3RhdGljIHZvaWQgKCpuYl9idXNfZGVjb2RlcikoaW50IG5vZGVfaWQsIHN0cnVjdCBlcnJfcmVncyAqcmVncyk7CisKK3ZvaWQgYW1kX3JlcG9ydF9nYXJ0X2Vycm9ycyhib29sIHYpCit7CisJcmVwb3J0X2dhcnRfZXJyb3JzID0gdjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFtZF9yZXBvcnRfZ2FydF9lcnJvcnMpOworCit2b2lkIGFtZF9yZWdpc3Rlcl9lY2NfZGVjb2Rlcih2b2lkICgqZikoaW50LCBzdHJ1Y3QgZXJyX3JlZ3MgKikpCit7CisJbmJfYnVzX2RlY29kZXIgPSBmOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYW1kX3JlZ2lzdGVyX2VjY19kZWNvZGVyKTsKKwordm9pZCBhbWRfdW5yZWdpc3Rlcl9lY2NfZGVjb2Rlcih2b2lkICgqZikoaW50LCBzdHJ1Y3QgZXJyX3JlZ3MgKikpCit7CisJaWYgKG5iX2J1c19kZWNvZGVyKSB7CisJCVdBUk5fT04obmJfYnVzX2RlY29kZXIgIT0gZik7CisKKwkJbmJfYnVzX2RlY29kZXIgPSBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFtZF91bnJlZ2lzdGVyX2VjY19kZWNvZGVyKTsKKworLyoKKyAqIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGRpZmZlcmVudCBNQ0EgcmVwb3J0ZWQgZXJyb3IgdHlwZXMsIHNlZSBGM3g0OAorICogb3IgTVNSMDAwMF8wNDExLgorICovCitjb25zdCBjaGFyICp0dF9tc2dzW10gPSB7ICAgICAgICAvKiB0cmFuc2FjdGlvbiB0eXBlICovCisJImluc3RydWN0aW9uIiwKKwkiZGF0YSIsCisJImdlbmVyaWMiLAorCSJyZXNlcnZlZCIKK307CitFWFBPUlRfU1lNQk9MX0dQTCh0dF9tc2dzKTsKKworY29uc3QgY2hhciAqbGxfbXNnc1tdID0gewkvKiBjYWNoZSBsZXZlbCAqLworCSJMMCIsCisJIkwxIiwKKwkiTDIiLAorCSJMMy9nZW5lcmljIgorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGxsX21zZ3MpOworCitjb25zdCBjaGFyICpycnJyX21zZ3NbXSA9IHsKKwkiZ2VuZXJpYyIsCisJImdlbmVyaWMgcmVhZCIsCisJImdlbmVyaWMgd3JpdGUiLAorCSJkYXRhIHJlYWQiLAorCSJkYXRhIHdyaXRlIiwKKwkiaW5zdCBmZXRjaCIsCisJInByZWZldGNoIiwKKwkiZXZpY3QiLAorCSJzbm9vcCIsCisJInJlc2VydmVkIFJSUlI9IDkiLAorCSJyZXNlcnZlZCBSUlJSPSAxMCIsCisJInJlc2VydmVkIFJSUlI9IDExIiwKKwkicmVzZXJ2ZWQgUlJSUj0gMTIiLAorCSJyZXNlcnZlZCBSUlJSPSAxMyIsCisJInJlc2VydmVkIFJSUlI9IDE0IiwKKwkicmVzZXJ2ZWQgUlJSUj0gMTUiCit9OworRVhQT1JUX1NZTUJPTF9HUEwocnJycl9tc2dzKTsKKworY29uc3QgY2hhciAqcHBfbXNnc1tdID0gewkvKiBwYXJ0aWNpcGF0aW5nIHByb2Nlc3NvciAqLworCSJsb2NhbCBub2RlIG9yaWdpbmF0ZWQgKFNSQykiLAorCSJsb2NhbCBub2RlIHJlc3BvbmRlZCB0byByZXF1ZXN0IChSRVMpIiwKKwkibG9jYWwgbm9kZSBvYnNlcnZlZCBhcyAzcmQgcGFydHkgKE9CUykiLAorCSJnZW5lcmljIgorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBwX21zZ3MpOworCitjb25zdCBjaGFyICp0b19tc2dzW10gPSB7CisJIm5vIHRpbWVvdXQiLAorCSJ0aW1lZCBvdXQiCit9OworRVhQT1JUX1NZTUJPTF9HUEwodG9fbXNncyk7CisKK2NvbnN0IGNoYXIgKmlpX21zZ3NbXSA9IHsJLyogbWVtb3J5IG9yIGkvbyAqLworCSJtZW0gYWNjZXNzIiwKKwkicmVzZXJ2ZWQiLAorCSJpL28gYWNjZXNzIiwKKwkiZ2VuZXJpYyIKK307CitFWFBPUlRfU1lNQk9MX0dQTChpaV9tc2dzKTsKKworLyoKKyAqIE1hcCB0aGUgNCBvciA1IChmYW1pbHktc3BlY2lmaWMpIGJpdHMgb2YgRXh0ZW5kZWQgRXJyb3IgY29kZSB0byB0aGUKKyAqIHN0cmluZyB0YWJsZS4KKyAqLworY29uc3QgY2hhciAqZXh0X21zZ3NbXSA9IHsKKwkiSzggRUNDIGVycm9yIiwJCQkJCS8qIDBfMDAwMGIgKi8KKwkiQ1JDIGVycm9yIG9uIGxpbmsiLAkJCQkvKiAwXzAwMDFiICovCisJIlN5bmMgZXJyb3IgcGFja2V0cyBvbiBsaW5rIiwJCQkvKiAwXzAwMTBiICovCisJIk1hc3RlciBBYm9ydCBkdXJpbmcgbGluayBvcGVyYXRpb24iLAkJLyogMF8wMDExYiAqLworCSJUYXJnZXQgQWJvcnQgZHVyaW5nIGxpbmsgb3BlcmF0aW9uIiwJCS8qIDBfMDEwMGIgKi8KKwkiSW52YWxpZCBHQVJUIFBURSBlbnRyeSBkdXJpbmcgdGFibGUgd2FsayIsCS8qIDBfMDEwMWIgKi8KKwkiVW5zdXBwb3J0ZWQgYXRvbWljIFJNVyBjb21tYW5kIHJlY2VpdmVkIiwJLyogMF8wMTEwYiAqLworCSJXRFQgZXJyb3I6IE5CIHRyYW5zYWN0aW9uIHRpbWVvdXQiLAkJLyogMF8wMTExYiAqLworCSJFQ0MvQ2hpcEtpbGwgRUNDIGVycm9yIiwJCQkvKiAwXzEwMDBiICovCisJIlNWTSBERVYgRXJyb3IiLAkJCQkvKiAwXzEwMDFiICovCisJIkxpbmsgRGF0YSBlcnJvciIsCQkJCS8qIDBfMTAxMGIgKi8KKwkiTGluay9MMy9Qcm9iZSBGaWx0ZXIgUHJvdG9jb2wgZXJyb3IiLAkJLyogMF8xMDExYiAqLworCSJOQiBJbnRlcm5hbCBBcnJheXMgUGFyaXR5IGVycm9yIiwJCS8qIDBfMTEwMGIgKi8KKwkiRFJBTSBBZGRyZXNzL0NvbnRyb2wgUGFyaXR5IGVycm9yIiwJCS8qIDBfMTEwMWIgKi8KKwkiTGluayBUcmFuc21pc3Npb24gZXJyb3IiLAkJCS8qIDBfMTExMGIgKi8KKwkiR0FSVC9ERVYgVGFibGUgV2FsayBEYXRhIGVycm9yIgkJLyogMF8xMTExYiAqLworCSJSZXMgMHgxMDAgZXJyb3IiLAkJCQkvKiAxXzAwMDBiICovCisJIlJlcyAweDEwMSBlcnJvciIsCQkJCS8qIDFfMDAwMWIgKi8KKwkiUmVzIDB4MTAyIGVycm9yIiwJCQkJLyogMV8wMDEwYiAqLworCSJSZXMgMHgxMDMgZXJyb3IiLAkJCQkvKiAxXzAwMTFiICovCisJIlJlcyAweDEwNCBlcnJvciIsCQkJCS8qIDFfMDEwMGIgKi8KKwkiUmVzIDB4MTA1IGVycm9yIiwJCQkJLyogMV8wMTAxYiAqLworCSJSZXMgMHgxMDYgZXJyb3IiLAkJCQkvKiAxXzAxMTBiICovCisJIlJlcyAweDEwNyBlcnJvciIsCQkJCS8qIDFfMDExMWIgKi8KKwkiUmVzIDB4MTA4IGVycm9yIiwJCQkJLyogMV8xMDAwYiAqLworCSJSZXMgMHgxMDkgZXJyb3IiLAkJCQkvKiAxXzEwMDFiICovCisJIlJlcyAweDEwQSBlcnJvciIsCQkJCS8qIDFfMTAxMGIgKi8KKwkiUmVzIDB4MTBCIGVycm9yIiwJCQkJLyogMV8xMDExYiAqLworCSJFQ0MgZXJyb3IgaW4gTDMgQ2FjaGUgRGF0YSIsCQkJLyogMV8xMTAwYiAqLworCSJMMyBDYWNoZSBUYWcgZXJyb3IiLAkJCQkvKiAxXzExMDFiICovCisJIkwzIENhY2hlIExSVSBQYXJpdHkgZXJyb3IiLAkJCS8qIDFfMTExMGIgKi8KKwkiUHJvYmUgRmlsdGVyIGVycm9yIgkJCQkvKiAxXzExMTFiICovCit9OworRVhQT1JUX1NZTUJPTF9HUEwoZXh0X21zZ3MpOworCitzdGF0aWMgdm9pZCBhbWRfZGVjb2RlX2RjX21jZSh1NjQgbWMwX3N0YXR1cykKK3sKKwl1MzIgZWMgID0gbWMwX3N0YXR1cyAmIDB4ZmZmZjsKKwl1MzIgeGVjID0gKG1jMF9zdGF0dXMgPj4gMTYpICYgMHhmOworCisJcHJfZW1lcmcoIiBEYXRhIENhY2hlIEVycm9yIik7CisKKwlpZiAoeGVjID09IDEgJiYgVExCX0VSUk9SKGVjKSkKKwkJcHJfY29udCgiOiAlcyBUTEIgbXVsdGltYXRjaC5cbiIsIExMX01TRyhlYykpOworCWVsc2UgaWYgKHhlYyA9PSAwKSB7CisJCWlmIChtYzBfc3RhdHVzICYgKDFVTEwgPDwgNDApKQorCQkJcHJfY29udCgiIGR1cmluZyBEYXRhIFNjcnViLlxuIik7CisJCWVsc2UgaWYgKFRMQl9FUlJPUihlYykpCisJCQlwcl9jb250KCI6ICVzIFRMQiBwYXJpdHkgZXJyb3IuXG4iLCBMTF9NU0coZWMpKTsKKwkJZWxzZSBpZiAoTUVNX0VSUk9SKGVjKSkgeworCQkJdTggbGwgICA9IGVjICYgMHgzOworCQkJdTggdHQgICA9IChlYyA+PiAyKSAmIDB4MzsKKwkJCXU4IHJycnIgPSAoZWMgPj4gNCkgJiAweGY7CisKKwkJCS8qIHNlZSBGMTBoIEJLREcgKDMxMTE2KSwgVGFibGUgOTIuICovCisJCQlpZiAobGwgPT0gMHgxKSB7CisJCQkJaWYgKHR0ICE9IDB4MSkKKwkJCQkJZ290byB3cm9uZ19kY19tY2U7CisKKwkJCQlwcl9jb250KCI6IERhdGEvVGFnICVzIGVycm9yLlxuIiwgUlJSUl9NU0coZWMpKTsKKworCQkJfSBlbHNlIGlmIChsbCA9PSAweDIgJiYgcnJyciA9PSAweDMpCisJCQkJcHJfY29udCgiIGR1cmluZyBMMSBsaW5lZmlsbCBmcm9tIEwyLlxuIik7CisJCQllbHNlCisJCQkJZ290byB3cm9uZ19kY19tY2U7CisJCX0gZWxzZSBpZiAoQlVTX0VSUk9SKGVjKSAmJiBib290X2NwdV9kYXRhLng4NiA9PSAweGYpCisJCQlwcl9jb250KCIgZHVyaW5nIHN5c3RlbSBsaW5lZmlsbC5cbiIpOworCQllbHNlCisJCQlnb3RvIHdyb25nX2RjX21jZTsKKwl9IGVsc2UKKwkJZ290byB3cm9uZ19kY19tY2U7CisKKwlyZXR1cm47CisKK3dyb25nX2RjX21jZToKKwlwcl93YXJuaW5nKCJDb3JydXB0ZWQgREMgTUNFIGluZm8/XG4iKTsKK30KKworc3RhdGljIHZvaWQgYW1kX2RlY29kZV9pY19tY2UodTY0IG1jMV9zdGF0dXMpCit7CisJdTMyIGVjICA9IG1jMV9zdGF0dXMgJiAweGZmZmY7CisJdTMyIHhlYyA9IChtYzFfc3RhdHVzID4+IDE2KSAmIDB4ZjsKKworCXByX2VtZXJnKCIgSW5zdHJ1Y3Rpb24gQ2FjaGUgRXJyb3IiKTsKKworCWlmICh4ZWMgPT0gMSAmJiBUTEJfRVJST1IoZWMpKQorCQlwcl9jb250KCI6ICVzIFRMQiBtdWx0aW1hdGNoLlxuIiwgTExfTVNHKGVjKSk7CisJZWxzZSBpZiAoeGVjID09IDApIHsKKwkJaWYgKFRMQl9FUlJPUihlYykpCisJCQlwcl9jb250KCI6ICVzIFRMQiBQYXJpdHkgZXJyb3IuXG4iLCBMTF9NU0coZWMpKTsKKwkJZWxzZSBpZiAoQlVTX0VSUk9SKGVjKSkgeworCQkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZiAmJgorCQkJICAgIChtYzFfc3RhdHVzICYgKDFVTEwgPDwgNTgpKSkKKwkJCQlwcl9jb250KCIgZHVyaW5nIHN5c3RlbSBsaW5lZmlsbC5cbiIpOworCQkJZWxzZQorCQkJCXByX2NvbnQoIiBkdXJpbmcgYXR0ZW1wdGVkIE5CIGRhdGEgcmVhZC5cbiIpOworCQl9IGVsc2UgaWYgKE1FTV9FUlJPUihlYykpIHsKKwkJCXU4IGxsICAgPSBlYyAmIDB4MzsKKwkJCXU4IHJycnIgPSAoZWMgPj4gNCkgJiAweGY7CisKKwkJCWlmIChsbCA9PSAweDIpCisJCQkJcHJfY29udCgiIGR1cmluZyBhIGxpbmVmaWxsIGZyb20gTDIuXG4iKTsKKwkJCWVsc2UgaWYgKGxsID09IDB4MSkgeworCisJCQkJc3dpdGNoIChycnJyKSB7CisJCQkJY2FzZSAweDU6CisJCQkJCXByX2NvbnQoIjogUGFyaXR5IGVycm9yIGR1cmluZyAiCisJCQkJCSAgICAgICAiZGF0YSBsb2FkLlxuIik7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSAweDc6CisJCQkJCXByX2NvbnQoIjogQ29weWJhY2sgUGFyaXR5L1ZpY3RpbSIKKwkJCQkJCSIgZXJyb3IuXG4iKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDB4ODoKKwkJCQkJcHJfY29udCgiOiBUYWcgU25vb3AgZXJyb3IuXG4iKTsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQlnb3RvIHdyb25nX2ljX21jZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9IGVsc2UKKwkJCWdvdG8gd3JvbmdfaWNfbWNlOworCX0gZWxzZQorCQlnb3RvIHdyb25nX2ljX21jZTsKKworCXJldHVybjsKKword3JvbmdfaWNfbWNlOgorCXByX3dhcm5pbmcoIkNvcnJ1cHRlZCBJQyBNQ0UgaW5mbz9cbiIpOworfQorCitzdGF0aWMgdm9pZCBhbWRfZGVjb2RlX2J1X21jZSh1NjQgbWMyX3N0YXR1cykKK3sKKwl1MzIgZWMgPSBtYzJfc3RhdHVzICYgMHhmZmZmOworCXUzMiB4ZWMgPSAobWMyX3N0YXR1cyA+PiAxNikgJiAweGY7CisKKwlwcl9lbWVyZygiIEJ1cyBVbml0IEVycm9yIik7CisKKwlpZiAoeGVjID09IDB4MSkKKwkJcHJfY29udCgiIGluIHRoZSB3cml0ZSBkYXRhIGJ1ZmZlcnMuXG4iKTsKKwllbHNlIGlmICh4ZWMgPT0gMHgzKQorCQlwcl9jb250KCIgaW4gdGhlIHZpY3RpbSBkYXRhIGJ1ZmZlcnMuXG4iKTsKKwllbHNlIGlmICh4ZWMgPT0gMHgyICYmIE1FTV9FUlJPUihlYykpCisJCXByX2NvbnQoIjogJXMgZXJyb3IgaW4gdGhlIEwyIGNhY2hlIHRhZ3MuXG4iLCBSUlJSX01TRyhlYykpOworCWVsc2UgaWYgKHhlYyA9PSAweDApIHsKKwkJaWYgKFRMQl9FUlJPUihlYykpCisJCQlwcl9jb250KCI6ICVzIGVycm9yIGluIGEgUGFnZSBEZXNjcmlwdG9yIENhY2hlIG9yICIKKwkJCQkiR3Vlc3QgVExCLlxuIiwgVFRfTVNHKGVjKSk7CisJCWVsc2UgaWYgKEJVU19FUlJPUihlYykpCisJCQlwcl9jb250KCI6ICVzL0VDQyBlcnJvciBpbiBkYXRhIHJlYWQgZnJvbSBOQjogJXMuXG4iLAorCQkJCVJSUlJfTVNHKGVjKSwgUFBfTVNHKGVjKSk7CisJCWVsc2UgaWYgKE1FTV9FUlJPUihlYykpIHsKKwkJCXU4IHJycnIgPSAoZWMgPj4gNCkgJiAweGY7CisKKwkJCWlmIChycnJyID49IDB4NykKKwkJCQlwcl9jb250KCI6ICVzIGVycm9yIGR1cmluZyBkYXRhIGNvcHliYWNrLlxuIiwKKwkJCQkJUlJSUl9NU0coZWMpKTsKKwkJCWVsc2UgaWYgKHJycnIgPD0gMHgxKQorCQkJCXByX2NvbnQoIjogJXMgcGFyaXR5L0VDQyBlcnJvciBkdXJpbmcgZGF0YSAiCisJCQkJCSJhY2Nlc3MgZnJvbSBMMi5cbiIsIFJSUlJfTVNHKGVjKSk7CisJCQllbHNlCisJCQkJZ290byB3cm9uZ19idV9tY2U7CisJCX0gZWxzZQorCQkJZ290byB3cm9uZ19idV9tY2U7CisJfSBlbHNlCisJCWdvdG8gd3JvbmdfYnVfbWNlOworCisJcmV0dXJuOworCit3cm9uZ19idV9tY2U6CisJcHJfd2FybmluZygiQ29ycnVwdGVkIEJVIE1DRSBpbmZvP1xuIik7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9kZWNvZGVfbHNfbWNlKHU2NCBtYzNfc3RhdHVzKQoreworCXUzMiBlYyAgPSBtYzNfc3RhdHVzICYgMHhmZmZmOworCXUzMiB4ZWMgPSAobWMzX3N0YXR1cyA+PiAxNikgJiAweGY7CisKKwlwcl9lbWVyZygiIExvYWQgU3RvcmUgRXJyb3IiKTsKKworCWlmICh4ZWMgPT0gMHgwKSB7CisJCXU4IHJycnIgPSAoZWMgPj4gNCkgJiAweGY7CisKKwkJaWYgKCFCVVNfRVJST1IoZWMpIHx8IChycnJyICE9IDB4MyAmJiBycnJyICE9IDB4NCkpCisJCQlnb3RvIHdyb25nX2xzX21jZTsKKworCQlwcl9jb250KCIgZHVyaW5nICVzLlxuIiwgUlJSUl9NU0coZWMpKTsKKwl9CisJcmV0dXJuOworCit3cm9uZ19sc19tY2U6CisJcHJfd2FybmluZygiQ29ycnVwdGVkIExTIE1DRSBpbmZvP1xuIik7Cit9CisKK3ZvaWQgYW1kX2RlY29kZV9uYl9tY2UoaW50IG5vZGVfaWQsIHN0cnVjdCBlcnJfcmVncyAqcmVncywgaW50IGhhbmRsZV9lcnJvcnMpCit7CisJdTMyIGVjICA9IEVSUk9SX0NPREUocmVncy0+bmJzbCk7CisJdTMyIHhlYyA9IEVYVF9FUlJPUl9DT0RFKHJlZ3MtPm5ic2wpOworCisJaWYgKCFoYW5kbGVfZXJyb3JzKQorCQlyZXR1cm47CisKKwlwcl9lbWVyZygiIE5vcnRoYnJpZGdlIEVycm9yLCBub2RlICVkIiwgbm9kZV9pZCk7CisKKwkvKgorCSAqIEYxMGgsIHJldkQgY2FuIGRpc2FibGUgRXJyQ3B1WzM6MF0gc28gY2hlY2sgdGhhdCBmaXJzdCBhbmQgYWxzbyB0aGUKKwkgKiB2YWx1ZSBlbmNvZGluZyBoYXMgY2hhbmdlZCBzbyBpbnRlcnByZXQgdGhvc2UgZGlmZmVyZW50bHkKKwkgKi8KKwlpZiAoKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTApICYmCisJICAgIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA+IDgpKSB7CisJCWlmIChyZWdzLT5uYnNoICYgSzhfTkJTSF9FUlJfQ1BVX1ZBTCkKKwkJCXByX2NvbnQoIiwgY29yZTogJXVcbiIsICh1OCkocmVncy0+bmJzaCAmIDB4ZikpOworCX0gZWxzZSB7CisJCXByX2NvbnQoIiwgY29yZTogJWRcbiIsIGlsb2cyKChyZWdzLT5uYnNoICYgMHhmKSkpOworCX0KKworCisJcHJfZW1lcmcoIiVzLlxuIiwgRVhUX0VSUl9NU0coeGVjKSk7CisKKwlpZiAoQlVTX0VSUk9SKGVjKSAmJiBuYl9idXNfZGVjb2RlcikKKwkJbmJfYnVzX2RlY29kZXIobm9kZV9pZCwgcmVncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhbWRfZGVjb2RlX25iX21jZSk7CisKK3N0YXRpYyB2b2lkIGFtZF9kZWNvZGVfZnJfbWNlKHU2NCBtYzVfc3RhdHVzKQoreworCS8qIHdlIGhhdmUgb25seSBvbmUgZXJyb3Igc2lnbmF0dXJlIHNvIG1hdGNoIGFsbCBmaWVsZHMgYXQgb25jZS4gKi8KKwlpZiAoKG1jNV9zdGF0dXMgJiAweGZmZmYpID09IDB4MGYwZikKKwkJcHJfZW1lcmcoIiBGUiBFcnJvcjogQ1BVIFdhdGNoZG9nIHRpbWVyIGV4cGlyZS5cbiIpOworCWVsc2UKKwkJcHJfd2FybmluZygiQ29ycnVwdGVkIEZSIE1DRSBpbmZvP1xuIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbWRfZGVjb2RlX2Vycl9jb2RlKHVuc2lnbmVkIGludCBlYykKK3sKKwlpZiAoVExCX0VSUk9SKGVjKSkgeworCQkvKgorCQkgKiBHQVJUIGVycm9ycyBhcmUgaW50ZW5kZWQgdG8gaGVscCBncmFwaGljcyBkcml2ZXIgZGV2ZWxvcGVycworCQkgKiB0byBkZXRlY3QgYmFkIEdBUlQgUFRFcy4gSXQgaXMgcmVjb21tZW5kZWQgYnkgQU1EIHRvIGRpc2FibGUKKwkJICogR0FSVCB0YWJsZSB3YWxrIGVycm9yIHJlcG9ydGluZyBieSBkZWZhdWx0WzFdIChjdXJyZW50bHkKKwkJICogYmVpbmcgZGlzYWJsZWQgaW4gbWNlX2NwdV9xdWlya3MoKSkgYW5kIGFjY29yZGluZyB0byB0aGUKKwkJICogY29tbWVudCBpbiBtY2VfY3B1X3F1aXJrcygpLCBzdWNoIEdBUlQgZXJyb3JzIGNhbiBiZQorCQkgKiBpbmNvcnJlY3RseSB0cmlnZ2VyZWQuIFdlIG1heSBzZWUgdGhlc2UgZXJyb3JzIGFueXdheSBhbmQKKwkJICogdW5sZXNzIHJlcXVlc3RlZCBieSB0aGUgdXNlciwgdGhleSB3b24ndCBiZSByZXBvcnRlZC4KKwkJICoKKwkJICogWzFdIHNlY3Rpb24gMTMuMTAuMSBvbiBCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVycyBHdWlkZSBmb3IKKwkJICogICAgIEFNRCBOUFQgZmFtaWx5IDBGaCBwcm9jZXNzb3JzCisJCSAqLworCQlpZiAoIXJlcG9ydF9nYXJ0X2Vycm9ycykKKwkJCXJldHVybjsKKworCQlwcl9lbWVyZygiIFRyYW5zYWN0aW9uOiAlcywgQ2FjaGUgTGV2ZWwgJXNcbiIsCisJCQkgVFRfTVNHKGVjKSwgTExfTVNHKGVjKSk7CisJfSBlbHNlIGlmIChNRU1fRVJST1IoZWMpKSB7CisJCXByX2VtZXJnKCIgVHJhbnNhY3Rpb246ICVzLCBUeXBlOiAlcywgQ2FjaGUgTGV2ZWw6ICVzIiwKKwkJCSBSUlJSX01TRyhlYyksIFRUX01TRyhlYyksIExMX01TRyhlYykpOworCX0gZWxzZSBpZiAoQlVTX0VSUk9SKGVjKSkgeworCQlwcl9lbWVyZygiIFRyYW5zYWN0aW9uIHR5cGU6ICVzKCVzKSwgJXMsIENhY2hlIExldmVsOiAlcywgIgorCQkJICJQYXJ0aWNpcGF0aW5nIFByb2Nlc3NvcjogJXNcbiIsCisJCQkgIFJSUlJfTVNHKGVjKSwgSUlfTVNHKGVjKSwgVE9fTVNHKGVjKSwgTExfTVNHKGVjKSwKKwkJCSAgUFBfTVNHKGVjKSk7CisJfSBlbHNlCisJCXByX3dhcm5pbmcoIkh1aD8gVW5rbm93biBNQ0UgZXJyb3IgMHgleFxuIiwgZWMpOworfQorCit2b2lkIGRlY29kZV9tY2Uoc3RydWN0IG1jZSAqbSkKK3sKKwlzdHJ1Y3QgZXJyX3JlZ3MgcmVnczsKKwlpbnQgbm9kZSwgZWNjOworCisJcHJfZW1lcmcoIk1DJWRfU1RBVFVTOiAiLCBtLT5iYW5rKTsKKworCXByX2NvbnQoIiVzb3JyZWN0ZWQgZXJyb3IsIHJlcG9ydDogJXMsIE1pc2NWOiAlc3ZhbGlkLCAiCisJCSAiQ1BVIGNvbnRleHQgY29ycnVwdDogJXMiLAorCQkgKChtLT5zdGF0dXMgJiBNQ0lfU1RBVFVTX1VDKSA/ICJVbmMiICA6ICJDIiksCisJCSAoKG0tPnN0YXR1cyAmIE1DSV9TVEFUVVNfRU4pID8gInllcyIgIDogIm5vIiksCisJCSAoKG0tPnN0YXR1cyAmIE1DSV9TVEFUVVNfTUlTQ1YpID8gIiIgIDogImluIiksCisJCSAoKG0tPnN0YXR1cyAmIE1DSV9TVEFUVVNfUENDKSA/ICJ5ZXMiIDogIm5vIikpOworCisJLyogZG8gdGhlIHR3byBiaXRzWzE0OjEzXSB0b2dldGhlciAqLworCWVjYyA9IG0tPnN0YXR1cyAmICgzVUxMIDw8IDQ1KTsKKwlpZiAoZWNjKQorCQlwcl9jb250KCIsICVzRUNDIEVycm9yIiwgKChlY2MgPT0gMikgPyAiQyIgOiAiVSIpKTsKKworCXByX2NvbnQoIlxuIik7CisKKwlzd2l0Y2ggKG0tPmJhbmspIHsKKwljYXNlIDA6CisJCWFtZF9kZWNvZGVfZGNfbWNlKG0tPnN0YXR1cyk7CisJCWJyZWFrOworCisJY2FzZSAxOgorCQlhbWRfZGVjb2RlX2ljX21jZShtLT5zdGF0dXMpOworCQlicmVhazsKKworCWNhc2UgMjoKKwkJYW1kX2RlY29kZV9idV9tY2UobS0+c3RhdHVzKTsKKwkJYnJlYWs7CisKKwljYXNlIDM6CisJCWFtZF9kZWNvZGVfbHNfbWNlKG0tPnN0YXR1cyk7CisJCWJyZWFrOworCisJY2FzZSA0OgorCQlyZWdzLm5ic2wgID0gKHUzMikgbS0+c3RhdHVzOworCQlyZWdzLm5ic2ggID0gKHUzMikobS0+c3RhdHVzID4+IDMyKTsKKwkJcmVncy5uYmVhbCA9ICh1MzIpIG0tPmFkZHI7CisJCXJlZ3MubmJlYWggPSAodTMyKShtLT5hZGRyID4+IDMyKTsKKwkJbm9kZSAgICAgICA9IHBlcl9jcHUoY3B1X2xsY19pZCwgbS0+ZXh0Y3B1KTsKKworCQlhbWRfZGVjb2RlX25iX21jZShub2RlLCAmcmVncywgMSk7CisJCWJyZWFrOworCisJY2FzZSA1OgorCQlhbWRfZGVjb2RlX2ZyX21jZShtLT5zdGF0dXMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWFtZF9kZWNvZGVfZXJyX2NvZGUobS0+c3RhdHVzICYgMHhmZmZmKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFjX21jZV9hbWQuaCBiL2RyaXZlcnMvZWRhYy9lZGFjX21jZV9hbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjIzZWUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5oCkBAIC0wLDAgKzEsNjkgQEAKKyNpZm5kZWYgX0VEQUNfTUNFX0FNRF9ICisjZGVmaW5lIF9FREFDX01DRV9BTURfSAorCisjaW5jbHVkZSA8YXNtL21jZS5oPgorCisjZGVmaW5lIEVSUk9SX0NPREUoeCkJCQkoKHgpICYgMHhmZmZmKQorI2RlZmluZSBFWFRfRVJST1JfQ09ERSh4KQkJKCgoeCkgPj4gMTYpICYgMHgxZikKKyNkZWZpbmUgRVhUX0VSUl9NU0coeCkJCQlleHRfbXNnc1tFWFRfRVJST1JfQ09ERSh4KV0KKworI2RlZmluZSBMT1dfU1lORFJPTUUoeCkJCQkoKCh4KSA+PiAxNSkgJiAweGZmKQorI2RlZmluZSBISUdIX1NZTkRST01FKHgpCQkoKCh4KSA+PiAyNCkgJiAweGZmKQorCisjZGVmaW5lIFRMQl9FUlJPUih4KQkJCSgoKHgpICYgMHhGRkYwKSA9PSAweDAwMTApCisjZGVmaW5lIE1FTV9FUlJPUih4KQkJCSgoKHgpICYgMHhGRjAwKSA9PSAweDAxMDApCisjZGVmaW5lIEJVU19FUlJPUih4KQkJCSgoKHgpICYgMHhGODAwKSA9PSAweDA4MDApCisKKyNkZWZpbmUgVFQoeCkJCQkJKCgoeCkgPj4gMikgJiAweDMpCisjZGVmaW5lIFRUX01TRyh4KQkJCXR0X21zZ3NbVFQoeCldCisjZGVmaW5lIElJKHgpCQkJCSgoKHgpID4+IDIpICYgMHgzKQorI2RlZmluZSBJSV9NU0coeCkJCQlpaV9tc2dzW0lJKHgpXQorI2RlZmluZSBMTCh4KQkJCQkoKCh4KSA+PiAwKSAmIDB4MykKKyNkZWZpbmUgTExfTVNHKHgpCQkJbGxfbXNnc1tMTCh4KV0KKyNkZWZpbmUgUlJSUih4KQkJCQkoKCh4KSA+PiA0KSAmIDB4ZikKKyNkZWZpbmUgUlJSUl9NU0coeCkJCQlycnJyX21zZ3NbUlJSUih4KV0KKyNkZWZpbmUgVE8oeCkJCQkJKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lIFRPX01TRyh4KQkJCXRvX21zZ3NbVE8oeCldCisjZGVmaW5lIFBQKHgpCQkJCSgoKHgpID4+IDkpICYgMHgzKQorI2RlZmluZSBQUF9NU0coeCkJCQlwcF9tc2dzW1BQKHgpXQorCisjZGVmaW5lIEs4X05CU0gJCQkJMHg0QworCisjZGVmaW5lIEs4X05CU0hfVkFMSURfQklUCQlCSVQoMzEpCisjZGVmaW5lIEs4X05CU0hfT1ZFUkZMT1cJCUJJVCgzMCkKKyNkZWZpbmUgSzhfTkJTSF9VQ19FUlIJCQlCSVQoMjkpCisjZGVmaW5lIEs4X05CU0hfRVJSX0VOCQkJQklUKDI4KQorI2RlZmluZSBLOF9OQlNIX01JU0NWCQkJQklUKDI3KQorI2RlZmluZSBLOF9OQlNIX1ZBTElEX0VSUk9SX0FERFIJQklUKDI2KQorI2RlZmluZSBLOF9OQlNIX1BDQwkJCUJJVCgyNSkKKyNkZWZpbmUgSzhfTkJTSF9FUlJfQ1BVX1ZBTAkJQklUKDI0KQorI2RlZmluZSBLOF9OQlNIX0NFQ0MJCQlCSVQoMTQpCisjZGVmaW5lIEs4X05CU0hfVUVDQwkJCUJJVCgxMykKKyNkZWZpbmUgSzhfTkJTSF9FUlJfU0NSVUJFUgkJQklUKDgpCisKK2V4dGVybiBjb25zdCBjaGFyICp0dF9tc2dzW107CitleHRlcm4gY29uc3QgY2hhciAqbGxfbXNnc1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnJycnJfbXNnc1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnBwX21zZ3NbXTsKK2V4dGVybiBjb25zdCBjaGFyICp0b19tc2dzW107CitleHRlcm4gY29uc3QgY2hhciAqaWlfbXNnc1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmV4dF9tc2dzW107CisKKy8qCisgKiByZWxldmFudCBOQiByZWdzCisgKi8KK3N0cnVjdCBlcnJfcmVncyB7CisJdTMyIG5iY2ZnOworCXUzMiBuYnNoOworCXUzMiBuYnNsOworCXUzMiBuYmVhaDsKKwl1MzIgbmJlYWw7Cit9OworCisKK3ZvaWQgYW1kX3JlcG9ydF9nYXJ0X2Vycm9ycyhib29sKTsKK3ZvaWQgYW1kX3JlZ2lzdGVyX2VjY19kZWNvZGVyKHZvaWQgKCpmKShpbnQsIHN0cnVjdCBlcnJfcmVncyAqKSk7Cit2b2lkIGFtZF91bnJlZ2lzdGVyX2VjY19kZWNvZGVyKHZvaWQgKCpmKShpbnQsIHN0cnVjdCBlcnJfcmVncyAqKSk7Cit2b2lkIGFtZF9kZWNvZGVfbmJfbWNlKGludCwgc3RydWN0IGVycl9yZWdzICosIGludCk7CisKKyNlbmRpZiAvKiBfRURBQ19NQ0VfQU1EX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jCmluZGV4IGE0MjIwOWEuLmNiYWY0MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9uZXQuYwpAQCAtNjYzLDggKzY2Myw2IEBACiAJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0KSkKIAkJbmV0aWZfd2FrZV9xdWV1ZShuZXQpOwogCi0JbmV0LT5sYXN0X3J4ID0gamlmZmllczsKLQogCXJldHVybiAwOwogfQogCkBAIC0xMTg4LDcgKzExODYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZ3bmV0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZnduZXRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgZnduZXRfaGVhZGVyIGhkcl9idWY7CiAJc3RydWN0IGZ3bmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKQEAgLTEzNDIsNyArMTM0MCw3IEBACiAJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCAiaWVlZTEzOTQiKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBmd25ldF9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZnduZXRfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gZnduZXRfZ2V0X2RydmluZm8sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKaW5kZXggMjRjODRhZS4uOTM4MTAwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwpAQCAtNTY4LDM1ICs1NjgsNzYgQEAKIEVYUE9SVF9TWU1CT0woZG1pX2ZpbmRfZGV2aWNlKTsKIAogLyoqCi0gKglkbWlfZ2V0X3llYXIgLSBSZXR1cm4geWVhciBvZiBhIERNSSBkYXRlCi0gKglAZmllbGQ6CWRhdGEgaW5kZXggKGxpa2UgZG1pX2dldF9zeXN0ZW1faW5mbykKKyAqCWRtaV9nZXRfZGF0ZSAtIHBhcnNlIGEgRE1JIGRhdGUKKyAqCUBmaWVsZDoJZGF0YSBpbmRleCAoc2VlIGVudW0gZG1pX2ZpZWxkKQorICoJQHllYXJwOiBvcHRpb25hbCBvdXQgcGFyYW1ldGVyIGZvciB0aGUgeWVhcgorICoJQG1vbnRocDogb3B0aW9uYWwgb3V0IHBhcmFtZXRlciBmb3IgdGhlIG1vbnRoCisgKglAZGF5cDogb3B0aW9uYWwgb3V0IHBhcmFtZXRlciBmb3IgdGhlIGRheQogICoKLSAqCVJldHVybnMgLTEgd2hlbiB0aGUgZmllbGQgZG9lc24ndCBleGlzdC4gMCB3aGVuIGl0IGlzIGJyb2tlbi4KKyAqCVRoZSBkYXRlIGZpZWxkIGlzIGFzc3VtZWQgdG8gYmUgaW4gdGhlIGZvcm0gcmVzZW1ibGluZworICoJW21tWy9kZF1dL3l5W3l5XSBhbmQgdGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhlIG91dAorICoJcGFyYW1ldGVycyBhbnkgb3IgYWxsIG9mIHdoaWNoIGNhbiBiZSBvbWl0dGVkLgorICoKKyAqCUlmIHRoZSBmaWVsZCBkb2Vzbid0IGV4aXN0LCBhbGwgb3V0IHBhcmFtZXRlcnMgYXJlIHNldCB0byB6ZXJvCisgKglhbmQgZmFsc2UgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UsIHRydWUgaXMgcmV0dXJuZWQgd2l0aCBhbnkKKyAqCWludmFsaWQgcGFydCBvZiBkYXRlIHNldCB0byB6ZXJvLgorICoKKyAqCU9uIHJldHVybiwgeWVhciwgbW9udGggYW5kIGRheSBhcmUgZ3VhcmFudGVlZCB0byBiZSBpbiB0aGUKKyAqCXJhbmdlIG9mIFswLDk5OTldLCBbMCwxMl0gYW5kIFswLDMxXSByZXNwZWN0aXZlbHkuCiAgKi8KLWludCBkbWlfZ2V0X3llYXIoaW50IGZpZWxkKQorYm9vbCBkbWlfZ2V0X2RhdGUoaW50IGZpZWxkLCBpbnQgKnllYXJwLCBpbnQgKm1vbnRocCwgaW50ICpkYXlwKQogewotCWludCB5ZWFyOwotCWNvbnN0IGNoYXIgKnMgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKGZpZWxkKTsKKwlpbnQgeWVhciA9IDAsIG1vbnRoID0gMCwgZGF5ID0gMDsKKwlib29sIGV4aXN0czsKKwljb25zdCBjaGFyICpzLCAqeTsKKwljaGFyICplOwogCi0JaWYgKCFzKQotCQlyZXR1cm4gLTE7Ci0JaWYgKCpzID09ICdcMCcpCi0JCXJldHVybiAwOwotCXMgPSBzdHJyY2hyKHMsICcvJyk7Ci0JaWYgKCFzKQotCQlyZXR1cm4gMDsKKwlzID0gZG1pX2dldF9zeXN0ZW1faW5mbyhmaWVsZCk7CisJZXhpc3RzID0gczsKKwlpZiAoIWV4aXN0cykKKwkJZ290byBvdXQ7CiAKLQlzICs9IDE7Ci0JeWVhciA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDApOwotCWlmICh5ZWFyICYmIHllYXIgPCAxMDApIHsJLyogMi1kaWdpdCB5ZWFyICovCisJLyoKKwkgKiBEZXRlcm1pbmUgeWVhciBmaXJzdC4gIFdlIGFzc3VtZSB0aGUgZGF0ZSBzdHJpbmcgcmVzZW1ibGVzCisJICogbW0vZGQveXlbeXldIGJ1dCB0aGUgb3JpZ2luYWwgY29kZSBleHRyYWN0ZWQgb25seSB0aGUgeWVhcgorCSAqIGZyb20gdGhlIGVuZC4gIEtlZXAgdGhlIGJlaGF2aW9yIGluIHRoZSBzcGlyaXQgb2Ygbm8KKwkgKiBzdXJwcmlzZXMuCisJICovCisJeSA9IHN0cnJjaHIocywgJy8nKTsKKwlpZiAoIXkpCisJCWdvdG8gb3V0OworCisJeSsrOworCXllYXIgPSBzaW1wbGVfc3RydG91bCh5LCAmZSwgMTApOworCWlmICh5ICE9IGUgJiYgeWVhciA8IDEwMCkgewkvKiAyLWRpZ2l0IHllYXIgKi8KIAkJeWVhciArPSAxOTAwOwogCQlpZiAoeWVhciA8IDE5OTYpCS8qIG5vIGRhdGVzIDwgc3BlYyAxLjAgKi8KIAkJCXllYXIgKz0gMTAwOwogCX0KKwlpZiAoeWVhciA+IDk5OTkpCQkvKiB5ZWFyIHNob3VsZCBmaXQgaW4gJTA0ZCAqLworCQl5ZWFyID0gMDsKIAotCXJldHVybiB5ZWFyOworCS8qIHBhcnNlIHRoZSBtbSBhbmQgZGQgKi8KKwltb250aCA9IHNpbXBsZV9zdHJ0b3VsKHMsICZlLCAxMCk7CisJaWYgKHMgPT0gZSB8fCAqZSAhPSAnLycgfHwgIW1vbnRoIHx8IG1vbnRoID4gMTIpIHsKKwkJbW9udGggPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlzID0gZSArIDE7CisJZGF5ID0gc2ltcGxlX3N0cnRvdWwocywgJmUsIDEwKTsKKwlpZiAocyA9PSB5IHx8IHMgPT0gZSB8fCAqZSAhPSAnLycgfHwgZGF5ID4gMzEpCisJCWRheSA9IDA7CitvdXQ6CisJaWYgKHllYXJwKQorCQkqeWVhcnAgPSB5ZWFyOworCWlmIChtb250aHApCisJCSptb250aHAgPSBtb250aDsKKwlpZiAoZGF5cCkKKwkJKmRheXAgPSBkYXk7CisJcmV0dXJuIGV4aXN0czsKIH0KLUVYUE9SVF9TWU1CT0woZG1pX2dldF95ZWFyKTsKK0VYUE9SVF9TWU1CT0woZG1pX2dldF9kYXRlKTsKIAogLyoqCiAgKglkbWlfd2FsayAtIFdhbGsgdGhlIERNSSB0YWJsZSBhbmQgZ2V0IGNhbGxlZCBiYWNrIGZvciBldmVyeSByZWNvcmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL0tjb25maWcgYi9kcml2ZXJzL2hpZC9LY29uZmlnCmluZGV4IDc4MzFhMDMuLjExMWFmYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL0tjb25maWcKKysrIGIvZHJpdmVycy9oaWQvS2NvbmZpZwpAQCAtMzEsMjEgKzMxLDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAotY29uZmlnIEhJRF9ERUJVRwotCWJvb2wgIkhJRCBkZWJ1Z2dpbmcgc3VwcG9ydCIKLQlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIEhJRAotCS0tLWhlbHAtLS0KLQlUaGlzIG9wdGlvbiBsZXRzIHRoZSBISUQgbGF5ZXIgb3V0cHV0IGRpYWdub3N0aWNzIGFib3V0IGl0cyBpbnRlcm5hbAotCXN0YXRlLCByZXNvbHZlIEhJRCB1c2FnZXMsIGR1bXAgSElEIGZpZWxkcywgZXRjLiBJbmRpdmlkdWFsIEhJRCBkcml2ZXJzCi0JdXNlIHRoaXMgZGVidWdnaW5nIGZhY2lsaXR5IHRvIG91dHB1dCBpbmZvcm1hdGlvbiBhYm91dCBpbmRpdmlkdWFsIEhJRAotCWRldmljZXMsIGV0Yy4KLQotCVRoaXMgZmVhdHVyZSBpcyB1c2VmdWwgZm9yIHRob3NlIHdobyBhcmUgZWl0aGVyIGRlYnVnZ2luZyB0aGUgSElEIHBhcnNlcgotCW9yIGFueSBISUQgaGFyZHdhcmUgZGV2aWNlLgotCi0JSWYgdW5zdXJlLCBzYXkgWS4KLQogY29uZmlnIEhJRFJBVwogCWJvb2wgIi9kZXYvaGlkcmF3IHJhdyBISUQgZGV2aWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBISUQKQEAgLTE1Miw2ICsxMzcsMTMgQEAKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgR3lyYXRpb24gcmVtb3RlIGNvbnRyb2wuCiAKK2NvbmZpZyBISURfVFdJTkhBTgorCXRyaXN0YXRlICJUd2luaGFuIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgIUVNQkVEREVECisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIFR3aW5oYW4gSVIgcmVtb3RlIGNvbnRyb2wuCisKIGNvbmZpZyBISURfS0VOU0lOR1RPTgogCXRyaXN0YXRlICJLZW5zaW5ndG9uIiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMTc2LDYgKzE2OCw3IEBACiAJICAtIExvZ2l0ZWNoIFdpbmdNYW4gQ29yZGxlc3MgUnVtYmxlUGFkIDIKIAkgIC0gTG9naXRlY2ggV2luZ01hbiBGb3JjZSAzRAogCSAgLSBMb2dpdGVjaCBGb3JtdWxhIEZvcmNlIEVYCisJICAtIExvZ2l0ZWNoIFdpbmdNYW4gRm9ybXVsYSBGb3JjZSBHUAogCSAgLSBMb2dpdGVjaCBNT01PIEZvcmNlIHdoZWVsCiAKIAkgIGFuZCBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgZm9yIHRoZW0uCkBAIC0zMTQsOSArMzA3LDkgQEAKIAlkZXBlbmRzIG9uIEhJRF9USFJVU1RNQVNURVIKIAlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUwogCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBUSFJVU1RNQVNURVIgRmlyZVN0b3JlIER1YWwgUG93ZXIgMiBvcgotCSAgYSBUSFJVU1RNQVNURVIgRmVycmFyaSBHVCBSdW1ibGUgRm9yY2Ugb3IgRm9yY2UgRmVlZGJhY2sgV2hlZWwgYW5kCi0JICB3YW50IHRvIGVuYWJsZSBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBpdC4KKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBUSFJVU1RNQVNURVIgRmlyZVN0b3JlIER1YWwgUG93ZXIgMiBvciAzLAorCSAgYSBUSFJVU1RNQVNURVIgRHVhbCBUcmlnZ2VyIDMtaW4tMSBvciBhIFRIUlVTVE1BU1RFUiBGZXJyYXJpIEdUCisJICBSdW1ibGUgRm9yY2Ugb3IgRm9yY2UgRmVlZGJhY2sgV2hlZWwuCiAKIGNvbmZpZyBISURfV0FDT00KIAl0cmlzdGF0ZSAiV2Fjb20gQmx1ZXRvb3RoIGRldmljZXMgc3VwcG9ydCIgaWYgRU1CRURERUQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL01ha2VmaWxlIGIvZHJpdmVycy9oaWQvTWFrZWZpbGUKaW5kZXggZGIzNTE1MS4uMGRlMmRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9oaWQvTWFrZWZpbGUKQEAgLTMsOSArMywxMiBAQAogIwogaGlkLW9ianMJCQk6PSBoaWQtY29yZS5vIGhpZC1pbnB1dC5vCiAKK2lmZGVmIENPTkZJR19ERUJVR19GUworCWhpZC1vYmpzCQkrPSBoaWQtZGVidWcubworZW5kaWYKKwogb2JqLSQoQ09ORklHX0hJRCkJCSs9IGhpZC5vCiAKLWhpZC0kKENPTkZJR19ISURfREVCVUcpCQkrPSBoaWQtZGVidWcubwogaGlkLSQoQ09ORklHX0hJRFJBVykJCSs9IGhpZHJhdy5vCiAKIGhpZC1sb2dpdGVjaC1vYmpzCQk6PSBoaWQtbGcubwpAQCAtNDAsNiArNDMsNyBAQAogb2JqLSQoQ09ORklHX0hJRF9HUkVFTkFTSUEpCSs9IGhpZC1nYWZmLm8KIG9iai0kKENPTkZJR19ISURfVEhSVVNUTUFTVEVSKQkrPSBoaWQtdG1mZi5vCiBvYmotJChDT05GSUdfSElEX1RPUFNFRUQpCSs9IGhpZC10b3BzZWVkLm8KK29iai0kKENPTkZJR19ISURfVFdJTkhBTikJKz0gaGlkLXR3aW5oYW4ubwogb2JqLSQoQ09ORklHX0hJRF9aRVJPUExVUykJKz0gaGlkLXpwZmYubwogb2JqLSQoQ09ORklHX0hJRF9XQUNPTSkJCSs9IGhpZC13YWNvbS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYyBiL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYwppbmRleCA0MmVhMzU5Li5kZjQ3NGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYTR0ZWNoLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWE0dGVjaC5jCkBAIC0xNDUsMTIgKzE0NSwxMiBAQAogCS5yZW1vdmUgPSBhNF9yZW1vdmUsCiB9OwogCi1zdGF0aWMgaW50IGE0X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGE0X2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmYTRfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgYTRfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGE0X2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmE0X2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYyBiL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCmluZGV4IDMwM2NjY2UuLjRiOTZlN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCkBAIC00NTEsNyArNDUxLDcgQEAKIAkuaW5wdXRfbWFwcGVkID0gYXBwbGVfaW5wdXRfbWFwcGVkLAogfTsKIAotc3RhdGljIGludCBhcHBsZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBhcHBsZV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIApAQCAtNDYyLDcgKzQ2Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgYXBwbGVfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGFwcGxlX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmFwcGxlX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtYmVsa2luLmMgYi9kcml2ZXJzL2hpZC9oaWQtYmVsa2luLmMKaW5kZXggMmY2NzIzMS4uNGNlN2FhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWJlbGtpbi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYwpAQCAtODgsMTIgKzg4LDEyIEBACiAJLnByb2JlID0gYmVsa2luX3Byb2JlLAogfTsKIAotc3RhdGljIGludCBiZWxraW5faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYmVsa2luX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmYmVsa2luX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGJlbGtpbl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYmVsa2luX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmJlbGtpbl9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jIGIvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jCmluZGV4IGFiODIwOWUuLjdlNTk3ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jaGVycnkuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY2hlcnJ5LmMKQEAgLTcwLDEyICs3MCwxMiBAQAogCS5pbnB1dF9tYXBwaW5nID0gY2hfaW5wdXRfbWFwcGluZywKIH07CiAKLXN0YXRpYyBpbnQgY2hfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY2hfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZjaF9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBjaF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY2hfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmY2hfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMgYi9kcml2ZXJzL2hpZC9oaWQtY2hpY29ueS5jCmluZGV4IDdmOTEwNzYuLjg5NjVhZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNoaWNvbnkuYwpAQCAtNjMsMTIgKzYzLDEyIEBACiAJLmlucHV0X21hcHBpbmcgPSBjaF9pbnB1dF9tYXBwaW5nLAogfTsKIAotc3RhdGljIGludCBjaF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjaF9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmNoX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGNoX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjaF9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZjaF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKaW5kZXggNWViMTBjMi4uMzQyYjdkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCkBAIC00NCwxMiArNDQsMTAgQEAKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkhJRCBjb3JlIGRyaXZlciIKICNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKIAotI2lmZGVmIENPTkZJR19ISURfREVCVUcKIGludCBoaWRfZGVidWcgPSAwOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBoaWRfZGVidWcsIGludCwgMDYwMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiSElEIGRlYnVnZ2luZyAoMD1vZmYsIDE9cHJvYmluZyBpbmZvLCAyPWNvbnRpbnVvdXMgZGF0YSBkdW1waW5nKSIpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInRvZ2dsZSBISUQgZGVidWdnaW5nIG1lc3NhZ2VzIik7CiBFWFBPUlRfU1lNQk9MX0dQTChoaWRfZGVidWcpOwotI2VuZGlmCiAKIC8qCiAgKiBSZWdpc3RlciBhIG5ldyByZXBvcnQgZm9yIGEgZGV2aWNlLgpAQCAtODYxLDcgKzg1OSw3IEBACiAJc3RydWN0IGhpZF9kcml2ZXIgKmhkcnYgPSBoaWQtPmRyaXZlcjsKIAlpbnQgcmV0OwogCi0JaGlkX2R1bXBfaW5wdXQodXNhZ2UsIHZhbHVlKTsKKwloaWRfZHVtcF9pbnB1dChoaWQsIHVzYWdlLCB2YWx1ZSk7CiAKIAlpZiAoaGRydiAmJiBoZHJ2LT5ldmVudCAmJiBoaWRfbWF0Y2hfdXNhZ2UoaGlkLCB1c2FnZSkpIHsKIAkJcmV0ID0gaGRydi0+ZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKQEAgLTk4MywxMSArOTgxLDEwIEBACiB7CiAJdW5zaWduZWQgc2l6ZSA9IGZpZWxkLT5yZXBvcnRfc2l6ZTsKIAotCWhpZF9kdW1wX2lucHV0KGZpZWxkLT51c2FnZSArIG9mZnNldCwgdmFsdWUpOworCWhpZF9kdW1wX2lucHV0KGZpZWxkLT5yZXBvcnQtPmRldmljZSwgZmllbGQtPnVzYWdlICsgb2Zmc2V0LCB2YWx1ZSk7CiAKIAlpZiAob2Zmc2V0ID49IGZpZWxkLT5yZXBvcnRfY291bnQpIHsKIAkJZGJnX2hpZCgib2Zmc2V0ICglZCkgZXhjZWVkcyByZXBvcnRfY291bnQgKCVkKVxuIiwgb2Zmc2V0LCBmaWVsZC0+cmVwb3J0X2NvdW50KTsKLQkJaGlkX2R1bXBfZmllbGQoZmllbGQsIDgpOwogCQlyZXR1cm4gLTE7CiAJfQogCWlmIChmaWVsZC0+bG9naWNhbF9taW5pbXVtIDwgMCkgewpAQCAtMTA3OCw2ICsxMDc1LDcgQEAKIAlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bTsKIAlzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydjsKIAlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCWNoYXIgKmJ1ZjsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmV0OwogCkBAIC0xMDkxLDE4ICsxMDg5LDM4IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlkYmdfaGlkKCJyZXBvcnQgKHNpemUgJXUpICglc251bWJlcmVkKVxuIiwgc2l6ZSwgcmVwb3J0X2VudW0tPm51bWJlcmVkID8gIiIgOiAidW4iKTsKKwlidWYgPSBrbWFsbG9jKHNpemVvZihjaGFyKSAqIEhJRF9ERUJVR19CVUZTSVpFLAorCQkJaW50ZXJydXB0ID8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUwpOworCisJaWYgKCFidWYpIHsKKwkJcmVwb3J0ID0gaGlkX2dldF9yZXBvcnQocmVwb3J0X2VudW0sIGRhdGEpOworCQlnb3RvIG5vbWVtOworCX0KKworCXNucHJpbnRmKGJ1ZiwgSElEX0RFQlVHX0JVRlNJWkUgLSAxLAorCQkJIlxucmVwb3J0IChzaXplICV1KSAoJXNudW1iZXJlZClcbiIsIHNpemUsIHJlcG9ydF9lbnVtLT5udW1iZXJlZCA/ICIiIDogInVuIik7CisJaGlkX2RlYnVnX2V2ZW50KGhpZCwgYnVmKTsKIAogCXJlcG9ydCA9IGhpZF9nZXRfcmVwb3J0KHJlcG9ydF9lbnVtLCBkYXRhKTsKLQlpZiAoIXJlcG9ydCkKKwlpZiAoIXJlcG9ydCkgeworCQlrZnJlZShidWYpOwogCQlyZXR1cm4gLTE7CisJfQogCiAJLyogZHVtcCB0aGUgcmVwb3J0ICovCi0JZGJnX2hpZCgicmVwb3J0ICVkIChzaXplICV1KSA9ICIsIHJlcG9ydC0+aWQsIHNpemUpOwotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCi0JCWRiZ19oaWRfbGluZSgiICUwMngiLCBkYXRhW2ldKTsKLQlkYmdfaGlkX2xpbmUoIlxuIik7CisJc25wcmludGYoYnVmLCBISURfREVCVUdfQlVGU0laRSAtIDEsCisJCQkicmVwb3J0ICVkIChzaXplICV1KSA9ICIsIHJlcG9ydC0+aWQsIHNpemUpOworCWhpZF9kZWJ1Z19ldmVudChoaWQsIGJ1Zik7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlzbnByaW50ZihidWYsIEhJRF9ERUJVR19CVUZTSVpFIC0gMSwKKwkJCQkiICUwMngiLCBkYXRhW2ldKTsKKwkJaGlkX2RlYnVnX2V2ZW50KGhpZCwgYnVmKTsKKwl9CisJaGlkX2RlYnVnX2V2ZW50KGhpZCwgIlxuIik7CiAKKwlrZnJlZShidWYpOworCitub21lbToKIAlpZiAoaGRydiAmJiBoZHJ2LT5yYXdfZXZlbnQgJiYgaGlkX21hdGNoX3JlcG9ydChoaWQsIHJlcG9ydCkpIHsKIAkJcmV0ID0gaGRydi0+cmF3X2V2ZW50KGhpZCwgcmVwb3J0LCBkYXRhLCBzaXplKTsKIAkJaWYgKHJldCAhPSAwKQpAQCAtMTI5Miw2ICsxMzEwLDcgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9SVU1CTEVQQUQyXzIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJTkdNQU5fRjNEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0ZGRyApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0ZPUkNFM0RfUFJPKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMMikgfSwKQEAgLTEzMTEsMTUgKzEzMzAsMTcgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU1VOUExVUywgVVNCX0RFVklDRV9JRF9TVU5QTFVTX1dERVNLVE9QKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMwMCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGIzMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzIzKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMyNCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGI2NTEpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiNjU0KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9UT1BTRUVELCBVU0JfREVWSUNFX0lEX1RPUFNFRURfQ1lCRVJMSU5LKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9UV0lOSEFOLCBVU0JfREVWSUNFX0lEX1RXSU5IQU5fSVJfUkVNT1RFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfU01BUlRKT1lfUExVUykgfSwKIAl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fR1JBUEhJUkVfQkxVRVRPT1RIKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9aRVJPUExVUywgMHgwMDA1KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9aRVJPUExVUywgMHgwMDMwKSB9LAogCi0JeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCAweDAzMGMpIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19QUkVTRU5URVJfOEtfQlQpIH0sCiAJeyB9CiB9OwpAQCAtMTYyMiwxMiArMTY0Myw4IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BBTkpJVCwgMHgwMDAyKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BISUxJUFMsIFVTQl9ERVZJQ0VfSURfUEhJTElQU19JRUVFODAyMTU0X0RPTkdMRSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUE9XRVJDT00sIFVTQl9ERVZJQ0VfSURfUE9XRVJDT01fVVBTKSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT1VOREdSQVBILCBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0QpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgsIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRDIpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgsIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRDMpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgsIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRDQpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgsIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRDUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RFTlgsIFVTQl9ERVZJQ0VfSURfVEVOWF9JQlVERFkxKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9URU5YLCBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0xBQlBSTykgfSwKQEAgLTE2OTQsNiArMTcxMSwxMSBAQAogCQkJCWhkZXYtPnByb2R1Y3QgPD0gVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZX0xBU1QpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJYnJlYWs7CisJY2FzZSBVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEg6CisJCWlmIChoZGV2LT5wcm9kdWN0ID49IFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0ZJUlNUICYmCisJCSAgICBoZGV2LT5wcm9kdWN0IDw9IFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xBU1QpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKGhkZXYtPnR5cGUgPT0gSElEX1RZUEVfVVNCTU9VU0UgJiYKQEAgLTE3MjUsNiArMTc0Nyw4IEBACiAJaWYgKCFyZXQpCiAJCWhkZXYtPnN0YXR1cyB8PSBISURfU1RBVF9BRERFRDsKIAorCWhpZF9kZWJ1Z19yZWdpc3RlcihoZGV2LCBkZXZfbmFtZSgmaGRldi0+ZGV2KSk7CisKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2FkZF9kZXZpY2UpOwpAQCAtMTc2MSw2ICsxNzg1LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgSElEX1JFUE9SVF9UWVBFUzsgaSsrKQogCQlJTklUX0xJU1RfSEVBRCgmaGRldi0+cmVwb3J0X2VudW1baV0ucmVwb3J0X2xpc3QpOwogCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaGRldi0+ZGVidWdfd2FpdCk7CisJSU5JVF9MSVNUX0hFQUQoJmhkZXYtPmRlYnVnX2xpc3QpOworCiAJcmV0dXJuIGhkZXY7CiBlcnI6CiAJcHV0X2RldmljZSgmaGRldi0+ZGV2KTsKQEAgLTE3NzIsNiArMTc5OSw3IEBACiB7CiAJaWYgKGhkZXYtPnN0YXR1cyAmIEhJRF9TVEFUX0FEREVEKSB7CiAJCWRldmljZV9kZWwoJmhkZXYtPmRldik7CisJCWhpZF9kZWJ1Z191bnJlZ2lzdGVyKGhkZXYpOwogCQloZGV2LT5zdGF0dXMgJj0gfkhJRF9TVEFUX0FEREVEOwogCX0KIH0KQEAgLTE4NDcsNiArMTg3NSwxMCBAQAogewogCWludCByZXQ7CiAKKwlpZiAoaGlkX2RlYnVnKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJISUQ6IGhpZF9kZWJ1ZyBpcyBub3cgdXNlZCBzb2xlbHkgZm9yIHBhcnNlciBhbmQgZHJpdmVyIGRlYnVnZ2luZy5cbiIKKwkJCQkiSElEOiBkZWJ1Z2ZzIGlzIG5vdyB1c2VkIGZvciBpbnNwZWN0aW5nIHRoZSBkZXZpY2UgKHJlcG9ydCBkZXNjcmlwdG9yLCByZXBvcnRzKVxuIik7CisKIAlyZXQgPSBidXNfcmVnaXN0ZXIoJmhpZF9idXNfdHlwZSk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgIkhJRDogY2FuJ3QgcmVnaXN0ZXIgaGlkIGJ1c1xuIik7CkBAIC0xODU3LDYgKzE4ODksOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2J1czsKIAorCWhpZF9kZWJ1Z19pbml0KCk7CisKIAlyZXR1cm4gMDsKIGVycl9idXM6CiAJYnVzX3VucmVnaXN0ZXIoJmhpZF9idXNfdHlwZSk7CkBAIC0xODY2LDYgKzE5MDAsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaGlkX2V4aXQodm9pZCkKIHsKKwloaWRfZGVidWdfZXhpdCgpOwogCWhpZHJhd19leGl0KCk7CiAJYnVzX3VucmVnaXN0ZXIoJmhpZF9idXNfdHlwZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY3lwcmVzcy5jIGIvZHJpdmVycy9oaWQvaGlkLWN5cHJlc3MuYwppbmRleCA5ZDZkM2I5Li42MmU5Y2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY3lwcmVzcy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jeXByZXNzLmMKQEAgLTE0MSwxMiArMTQxLDEyIEBACiAJLnByb2JlID0gY3BfcHJvYmUsCiB9OwogCi1zdGF0aWMgaW50IGNwX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNwX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmY3BfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgY3BfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGNwX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmNwX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYyBiL2RyaXZlcnMvaGlkL2hpZC1kZWJ1Zy5jCmluZGV4IDA0MzU5ZWQuLjZhYmQwMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1kZWJ1Zy5jCkBAIC0xLDkgKzEsOSBAQAogLyoKICAqICAoYykgMTk5OSBBbmRyZWFzIEdhbAkJPGdhbEBjcy51bmktbWFnZGVidXJnLmRlPgogICogIChjKSAyMDAwLTIwMDEgVm9qdGVjaCBQYXZsaWsJPHZvanRlY2hAdWN3LmN6PgotICogIChjKSAyMDA3IEppcmkgS29zaW5hCisgKiAgKGMpIDIwMDctMjAwOSBKaXJpIEtvc2luYQogICoKLSAqICBTb21lIGRlYnVnIHN0dWZmIGZvciB0aGUgSElEIHBhcnNlci4KKyAqICBISUQgZGVidWdnaW5nIHN1cHBvcnQKICAqLwogCiAvKgpAQCAtMjYsOSArMjYsMTcgQEAKICAqIFZvanRlY2ggUGF2bGlrLCBTaW11bmtvdmEgMTU5NCwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYwogICovCiAKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisKICNpbmNsdWRlIDxsaW51eC9oaWQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWQtZGVidWcuaD4KIAorc3RhdGljIHN0cnVjdCBkZW50cnkgKmhpZF9kZWJ1Z19yb290OworCiBzdHJ1Y3QgaGlkX3VzYWdlX2VudHJ5IHsKIAl1bnNpZ25lZCAgcGFnZTsKIAl1bnNpZ25lZCAgdXNhZ2U7CkBAIC0zMzksNzIgKzM0NywxMjAgQEAKICAgeyAwLCAwLCBOVUxMIH0KIH07CiAKLXN0YXRpYyB2b2lkIHJlc29sdl91c2FnZV9wYWdlKHVuc2lnbmVkIHBhZ2UpIHsKKy8qIEVpdGhlciBvdXRwdXQgZGlyZWN0bHkgaW50byBzaW1wbGUgc2VxX2ZpbGUsIG9yIChpZiBmID09IE5VTEwpCisgKiBhbGxvY2F0ZSBhIHNlcGFyYXRlIGJ1ZmZlciB0aGF0IHdpbGwgdGhlbiBiZSBwYXNzZWQgdG8gdGhlICdldmVudHMnCisgKiByaW5nYnVmZmVyLgorICoKKyAqIFRoaXMgaXMgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCBib3RoIGZvciAib25lLXNob3QiCisgKiAicmRlc2MiIHdoaWxlIHJlc29sdmluZywgb3IgZm9yIGJsb2NraW5nICJldmVudHMiLgorICoKKyAqIFRoaXMgaG9sZHMgYm90aCBmb3IgcmVzb2x2X3VzYWdlX3BhZ2UoKSBhbmQgaGlkX3Jlc29sdl91c2FnZSgpLgorICovCitzdGF0aWMgY2hhciAqcmVzb2x2X3VzYWdlX3BhZ2UodW5zaWduZWQgcGFnZSwgc3RydWN0IHNlcV9maWxlICpmKSB7CiAJY29uc3Qgc3RydWN0IGhpZF91c2FnZV9lbnRyeSAqcDsKKwljaGFyICpidWYgPSBOVUxMOworCisJaWYgKCFmKSB7CisJCWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKGNoYXIpICogSElEX0RFQlVHX0JVRlNJWkUsIEdGUF9BVE9NSUMpOworCQlpZiAoIWJ1ZikKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KIAogCWZvciAocCA9IGhpZF91c2FnZV90YWJsZTsgcC0+ZGVzY3JpcHRpb247IHArKykKIAkJaWYgKHAtPnBhZ2UgPT0gcGFnZSkgewotCQkJcHJpbnRrKCIlcyIsIHAtPmRlc2NyaXB0aW9uKTsKLQkJCXJldHVybjsKKwkJCWlmICghZikgeworCQkJCXNucHJpbnRmKGJ1ZiwgSElEX0RFQlVHX0JVRlNJWkUsICIlcyIsCisJCQkJCQlwLT5kZXNjcmlwdGlvbik7CisJCQkJcmV0dXJuIGJ1ZjsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXNlcV9wcmludGYoZiwgIiVzIiwgcC0+ZGVzY3JpcHRpb24pOworCQkJCXJldHVybiBOVUxMOworCQkJfQogCQl9Ci0JcHJpbnRrKCIlMDR4IiwgcGFnZSk7CisJaWYgKCFmKQorCQlzbnByaW50ZihidWYsIEhJRF9ERUJVR19CVUZTSVpFLCAiJTA0eCIsIHBhZ2UpOworCWVsc2UKKwkJc2VxX3ByaW50ZihmLCAiJTA0eCIsIHBhZ2UpOworCXJldHVybiBidWY7CiB9CiAKLXZvaWQgaGlkX3Jlc29sdl91c2FnZSh1bnNpZ25lZCB1c2FnZSkgeworY2hhciAqaGlkX3Jlc29sdl91c2FnZSh1bnNpZ25lZCB1c2FnZSwgc3RydWN0IHNlcV9maWxlICpmKSB7CiAJY29uc3Qgc3RydWN0IGhpZF91c2FnZV9lbnRyeSAqcDsKKwljaGFyICpidWYgPSBOVUxMOworCWludCBsZW4gPSAwOwogCi0JaWYgKCFoaWRfZGVidWcpCi0JCXJldHVybjsKKwlidWYgPSByZXNvbHZfdXNhZ2VfcGFnZSh1c2FnZSA+PiAxNiwgZik7CisJaWYgKElTX0VSUihidWYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZXJyb3IgYWxsb2NhdGluZyBISUQgZGVidWcgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0JcmVzb2x2X3VzYWdlX3BhZ2UodXNhZ2UgPj4gMTYpOwotCXByaW50aygiLiIpOworCisJaWYgKCFmKSB7CisJCWxlbiA9IHN0cmxlbihidWYpOworCQlzbnByaW50ZihidWYrbGVuLCBtYXgoMCwgSElEX0RFQlVHX0JVRlNJWkUgLSBsZW4pLCAiLiIpOworCQlsZW4rKzsKKwl9CisJZWxzZSB7CisJCXNlcV9wcmludGYoZiwgIi4iKTsKKwl9CiAJZm9yIChwID0gaGlkX3VzYWdlX3RhYmxlOyBwLT5kZXNjcmlwdGlvbjsgcCsrKQogCQlpZiAocC0+cGFnZSA9PSAodXNhZ2UgPj4gMTYpKSB7CiAJCQlmb3IoKytwOyBwLT5kZXNjcmlwdGlvbiAmJiBwLT51c2FnZSAhPSAwOyBwKyspCiAJCQkJaWYgKHAtPnVzYWdlID09ICh1c2FnZSAmIDB4ZmZmZikpIHsKLQkJCQkJcHJpbnRrKCIlcyIsIHAtPmRlc2NyaXB0aW9uKTsKLQkJCQkJcmV0dXJuOworCQkJCQlpZiAoIWYpCisJCQkJCQlzbnByaW50ZihidWYgKyBsZW4sCisJCQkJCQkJbWF4KDAsSElEX0RFQlVHX0JVRlNJWkUgLSBsZW4gLSAxKSwKKwkJCQkJCQkiJXMiLCBwLT5kZXNjcmlwdGlvbik7CisJCQkJCWVsc2UKKwkJCQkJCXNlcV9wcmludGYoZiwKKwkJCQkJCQkiJXMiLAorCQkJCQkJCXAtPmRlc2NyaXB0aW9uKTsKKwkJCQkJcmV0dXJuIGJ1ZjsKIAkJCQl9CiAJCQlicmVhazsKIAkJfQotCXByaW50aygiJTA0eCIsIHVzYWdlICYgMHhmZmZmKTsKKwlpZiAoIWYpCisJCXNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4KDAsIEhJRF9ERUJVR19CVUZTSVpFIC0gbGVuIC0gMSksCisJCQkJIiUwNHgiLCB1c2FnZSAmIDB4ZmZmZik7CisJZWxzZQorCQlzZXFfcHJpbnRmKGYsICIlMDR4IiwgdXNhZ2UgJiAweGZmZmYpOworCXJldHVybiBidWY7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChoaWRfcmVzb2x2X3VzYWdlKTsKIAotc3RhdGljIHZvaWQgdGFiKGludCBuKSB7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiUqcyIsIG4sICIiKTsKK3N0YXRpYyB2b2lkIHRhYihpbnQgbiwgc3RydWN0IHNlcV9maWxlICpmKSB7CisJc2VxX3ByaW50ZihmLCAiJSpzIiwgbiwgIiIpOwogfQogCi12b2lkIGhpZF9kdW1wX2ZpZWxkKHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBpbnQgbikgewordm9pZCBoaWRfZHVtcF9maWVsZChzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgaW50IG4sIHN0cnVjdCBzZXFfZmlsZSAqZikgewogCWludCBqOwogCi0JaWYgKCFoaWRfZGVidWcpCi0JCXJldHVybjsKLQogCWlmIChmaWVsZC0+cGh5c2ljYWwpIHsKLQkJdGFiKG4pOwotCQlwcmludGsoIlBoeXNpY2FsKCIpOwotCQloaWRfcmVzb2x2X3VzYWdlKGZpZWxkLT5waHlzaWNhbCk7IHByaW50aygiKVxuIik7CisJCXRhYihuLCBmKTsKKwkJc2VxX3ByaW50ZihmLCAiUGh5c2ljYWwoIik7CisJCWhpZF9yZXNvbHZfdXNhZ2UoZmllbGQtPnBoeXNpY2FsLCBmKTsgc2VxX3ByaW50ZihmLCAiKVxuIik7CiAJfQogCWlmIChmaWVsZC0+bG9naWNhbCkgewotCQl0YWIobik7Ci0JCXByaW50aygiTG9naWNhbCgiKTsKLQkJaGlkX3Jlc29sdl91c2FnZShmaWVsZC0+bG9naWNhbCk7IHByaW50aygiKVxuIik7CisJCXRhYihuLCBmKTsKKwkJc2VxX3ByaW50ZihmLCAiTG9naWNhbCgiKTsKKwkJaGlkX3Jlc29sdl91c2FnZShmaWVsZC0+bG9naWNhbCwgZik7IHNlcV9wcmludGYoZiwgIilcbiIpOwogCX0KLQl0YWIobik7IHByaW50aygiVXNhZ2UoJWQpXG4iLCBmaWVsZC0+bWF4dXNhZ2UpOworCXRhYihuLCBmKTsgc2VxX3ByaW50ZihmLCAiVXNhZ2UoJWQpXG4iLCBmaWVsZC0+bWF4dXNhZ2UpOwogCWZvciAoaiA9IDA7IGogPCBmaWVsZC0+bWF4dXNhZ2U7IGorKykgewotCQl0YWIobisyKTsgaGlkX3Jlc29sdl91c2FnZShmaWVsZC0+dXNhZ2Vbal0uaGlkKTsgcHJpbnRrKCJcbiIpOworCQl0YWIobisyLCBmKTsgaGlkX3Jlc29sdl91c2FnZShmaWVsZC0+dXNhZ2Vbal0uaGlkLCBmKTsgc2VxX3ByaW50ZihmLCAiXG4iKTsKIAl9CiAJaWYgKGZpZWxkLT5sb2dpY2FsX21pbmltdW0gIT0gZmllbGQtPmxvZ2ljYWxfbWF4aW11bSkgewotCQl0YWIobik7IHByaW50aygiTG9naWNhbCBNaW5pbXVtKCVkKVxuIiwgZmllbGQtPmxvZ2ljYWxfbWluaW11bSk7Ci0JCXRhYihuKTsgcHJpbnRrKCJMb2dpY2FsIE1heGltdW0oJWQpXG4iLCBmaWVsZC0+bG9naWNhbF9tYXhpbXVtKTsKKwkJdGFiKG4sIGYpOyBzZXFfcHJpbnRmKGYsICJMb2dpY2FsIE1pbmltdW0oJWQpXG4iLCBmaWVsZC0+bG9naWNhbF9taW5pbXVtKTsKKwkJdGFiKG4sIGYpOyBzZXFfcHJpbnRmKGYsICJMb2dpY2FsIE1heGltdW0oJWQpXG4iLCBmaWVsZC0+bG9naWNhbF9tYXhpbXVtKTsKIAl9CiAJaWYgKGZpZWxkLT5waHlzaWNhbF9taW5pbXVtICE9IGZpZWxkLT5waHlzaWNhbF9tYXhpbXVtKSB7Ci0JCXRhYihuKTsgcHJpbnRrKCJQaHlzaWNhbCBNaW5pbXVtKCVkKVxuIiwgZmllbGQtPnBoeXNpY2FsX21pbmltdW0pOwotCQl0YWIobik7IHByaW50aygiUGh5c2ljYWwgTWF4aW11bSglZClcbiIsIGZpZWxkLT5waHlzaWNhbF9tYXhpbXVtKTsKKwkJdGFiKG4sIGYpOyBzZXFfcHJpbnRmKGYsICJQaHlzaWNhbCBNaW5pbXVtKCVkKVxuIiwgZmllbGQtPnBoeXNpY2FsX21pbmltdW0pOworCQl0YWIobiwgZik7IHNlcV9wcmludGYoZiwgIlBoeXNpY2FsIE1heGltdW0oJWQpXG4iLCBmaWVsZC0+cGh5c2ljYWxfbWF4aW11bSk7CiAJfQogCWlmIChmaWVsZC0+dW5pdF9leHBvbmVudCkgewotCQl0YWIobik7IHByaW50aygiVW5pdCBFeHBvbmVudCglZClcbiIsIGZpZWxkLT51bml0X2V4cG9uZW50KTsKKwkJdGFiKG4sIGYpOyBzZXFfcHJpbnRmKGYsICJVbml0IEV4cG9uZW50KCVkKVxuIiwgZmllbGQtPnVuaXRfZXhwb25lbnQpOwogCX0KIAlpZiAoZmllbGQtPnVuaXQpIHsKIAkJc3RhdGljIGNvbnN0IGNoYXIgKnN5c3RlbXNbNV0gPSB7ICJOb25lIiwgIlNJIExpbmVhciIsICJTSSBSb3RhdGlvbiIsICJFbmdsaXNoIExpbmVhciIsICJFbmdsaXNoIFJvdGF0aW9uIiB9OwpAQCAtNDI1LDc3ICs0ODEsNzUgQEAKIAkJZGF0YSA+Pj0gNDsKIAogCQlpZihzeXMgPiA0KSB7Ci0JCQl0YWIobik7IHByaW50aygiVW5pdChJbnZhbGlkKVxuIik7CisJCQl0YWIobiwgZik7IHNlcV9wcmludGYoZiwgIlVuaXQoSW52YWxpZClcbiIpOwogCQl9CiAJCWVsc2UgewogCQkJaW50IGVhcmxpZXJfdW5pdCA9IDA7CiAKLQkJCXRhYihuKTsgcHJpbnRrKCJVbml0KCVzIDogIiwgc3lzdGVtc1tzeXNdKTsKKwkJCXRhYihuLCBmKTsgc2VxX3ByaW50ZihmLCAiVW5pdCglcyA6ICIsIHN5c3RlbXNbc3lzXSk7CiAKIAkJCWZvciAoaT0xIDsgaTxzaXplb2YoX191MzIpKjIgOyBpKyspIHsKIAkJCQljaGFyIG5pYmJsZSA9IGRhdGEgJiAweGY7CiAJCQkJZGF0YSA+Pj0gNDsKIAkJCQlpZiAobmliYmxlICE9IDApIHsKIAkJCQkJaWYoZWFybGllcl91bml0KysgPiAwKQotCQkJCQkJcHJpbnRrKCIqIik7Ci0JCQkJCXByaW50aygiJXMiLCB1bml0c1tzeXNdW2ldKTsKKwkJCQkJCXNlcV9wcmludGYoZiwgIioiKTsKKwkJCQkJc2VxX3ByaW50ZihmLCAiJXMiLCB1bml0c1tzeXNdW2ldKTsKIAkJCQkJaWYobmliYmxlICE9IDEpIHsKIAkJCQkJCS8qIFRoaXMgaXMgYSBfc2lnbmVkXyBuaWJibGUoISkgKi8KIAogCQkJCQkJaW50IHZhbCA9IG5pYmJsZSAmIDB4NzsKIAkJCQkJCWlmKG5pYmJsZSAmIDB4MDgpCiAJCQkJCQkJdmFsID0gLSgoMHg3ICYgfnZhbCkgKzEpOwotCQkJCQkJcHJpbnRrKCJeJWQiLCB2YWwpOworCQkJCQkJc2VxX3ByaW50ZihmLCAiXiVkIiwgdmFsKTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KLQkJCXByaW50aygiKVxuIik7CisJCQlzZXFfcHJpbnRmKGYsICIpXG4iKTsKIAkJfQogCX0KLQl0YWIobik7IHByaW50aygiUmVwb3J0IFNpemUoJXUpXG4iLCBmaWVsZC0+cmVwb3J0X3NpemUpOwotCXRhYihuKTsgcHJpbnRrKCJSZXBvcnQgQ291bnQoJXUpXG4iLCBmaWVsZC0+cmVwb3J0X2NvdW50KTsKLQl0YWIobik7IHByaW50aygiUmVwb3J0IE9mZnNldCgldSlcbiIsIGZpZWxkLT5yZXBvcnRfb2Zmc2V0KTsKKwl0YWIobiwgZik7IHNlcV9wcmludGYoZiwgIlJlcG9ydCBTaXplKCV1KVxuIiwgZmllbGQtPnJlcG9ydF9zaXplKTsKKwl0YWIobiwgZik7IHNlcV9wcmludGYoZiwgIlJlcG9ydCBDb3VudCgldSlcbiIsIGZpZWxkLT5yZXBvcnRfY291bnQpOworCXRhYihuLCBmKTsgc2VxX3ByaW50ZihmLCAiUmVwb3J0IE9mZnNldCgldSlcbiIsIGZpZWxkLT5yZXBvcnRfb2Zmc2V0KTsKIAotCXRhYihuKTsgcHJpbnRrKCJGbGFncyggIik7CisJdGFiKG4sIGYpOyBzZXFfcHJpbnRmKGYsICJGbGFncyggIik7CiAJaiA9IGZpZWxkLT5mbGFnczsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9DT05TVEFOVCAmIGogPyAiQ29uc3RhbnQgIiA6ICIiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9WQVJJQUJMRSAmIGogPyAiVmFyaWFibGUgIiA6ICJBcnJheSAiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9SRUxBVElWRSAmIGogPyAiUmVsYXRpdmUgIiA6ICJBYnNvbHV0ZSAiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9XUkFQICYgaiA/ICJXcmFwICIgOiAiIik7Ci0JcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fTk9OTElORUFSICYgaiA/ICJOb25MaW5lYXIgIiA6ICIiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9OT19QUkVGRVJSRUQgJiBqID8gIk5vUHJlZmVycmVkU3RhdGUgIiA6ICIiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9OVUxMX1NUQVRFICYgaiA/ICJOdWxsU3RhdGUgIiA6ICIiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9WT0xBVElMRSAmIGogPyAiVm9sYXRpbGUgIiA6ICIiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9CVUZGRVJFRF9CWVRFICYgaiA/ICJCdWZmZXJlZEJ5dGUgIiA6ICIiKTsKLQlwcmludGsoIilcbiIpOworCXNlcV9wcmludGYoZiwgIiVzIiwgSElEX01BSU5fSVRFTV9DT05TVEFOVCAmIGogPyAiQ29uc3RhbnQgIiA6ICIiKTsKKwlzZXFfcHJpbnRmKGYsICIlcyIsIEhJRF9NQUlOX0lURU1fVkFSSUFCTEUgJiBqID8gIlZhcmlhYmxlICIgOiAiQXJyYXkgIik7CisJc2VxX3ByaW50ZihmLCAiJXMiLCBISURfTUFJTl9JVEVNX1JFTEFUSVZFICYgaiA/ICJSZWxhdGl2ZSAiIDogIkFic29sdXRlICIpOworCXNlcV9wcmludGYoZiwgIiVzIiwgSElEX01BSU5fSVRFTV9XUkFQICYgaiA/ICJXcmFwICIgOiAiIik7CisJc2VxX3ByaW50ZihmLCAiJXMiLCBISURfTUFJTl9JVEVNX05PTkxJTkVBUiAmIGogPyAiTm9uTGluZWFyICIgOiAiIik7CisJc2VxX3ByaW50ZihmLCAiJXMiLCBISURfTUFJTl9JVEVNX05PX1BSRUZFUlJFRCAmIGogPyAiTm9QcmVmZXJyZWRTdGF0ZSAiIDogIiIpOworCXNlcV9wcmludGYoZiwgIiVzIiwgSElEX01BSU5fSVRFTV9OVUxMX1NUQVRFICYgaiA/ICJOdWxsU3RhdGUgIiA6ICIiKTsKKwlzZXFfcHJpbnRmKGYsICIlcyIsIEhJRF9NQUlOX0lURU1fVk9MQVRJTEUgJiBqID8gIlZvbGF0aWxlICIgOiAiIik7CisJc2VxX3ByaW50ZihmLCAiJXMiLCBISURfTUFJTl9JVEVNX0JVRkZFUkVEX0JZVEUgJiBqID8gIkJ1ZmZlcmVkQnl0ZSAiIDogIiIpOworCXNlcV9wcmludGYoZiwgIilcbiIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2R1bXBfZmllbGQpOwogCi12b2lkIGhpZF9kdW1wX2RldmljZShzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlKSB7Cit2b2lkIGhpZF9kdW1wX2RldmljZShzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYpCit7CiAJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmVwb3J0X2VudW07CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCXVuc2lnbmVkIGksazsKIAlzdGF0aWMgY29uc3QgY2hhciAqdGFibGVbXSA9IHsiSU5QVVQiLCAiT1VUUFVUIiwgIkZFQVRVUkUifTsKIAotCWlmICghaGlkX2RlYnVnKQotCQlyZXR1cm47Ci0KIAlmb3IgKGkgPSAwOyBpIDwgSElEX1JFUE9SVF9UWVBFUzsgaSsrKSB7CiAJCXJlcG9ydF9lbnVtID0gZGV2aWNlLT5yZXBvcnRfZW51bSArIGk7CiAJCWxpc3QgPSByZXBvcnRfZW51bS0+cmVwb3J0X2xpc3QubmV4dDsKIAkJd2hpbGUgKGxpc3QgIT0gJnJlcG9ydF9lbnVtLT5yZXBvcnRfbGlzdCkgewogCQkJcmVwb3J0ID0gKHN0cnVjdCBoaWRfcmVwb3J0ICopIGxpc3Q7Ci0JCQl0YWIoMik7Ci0JCQlwcmludGsoIiVzIiwgdGFibGVbaV0pOworCQkJdGFiKDIsIGYpOworCQkJc2VxX3ByaW50ZihmLCAiJXMiLCB0YWJsZVtpXSk7CiAJCQlpZiAocmVwb3J0LT5pZCkKLQkJCQlwcmludGsoIiglZCkiLCByZXBvcnQtPmlkKTsKLQkJCXByaW50aygiWyVzXSIsIHRhYmxlW3JlcG9ydC0+dHlwZV0pOwotCQkJcHJpbnRrKCJcbiIpOworCQkJCXNlcV9wcmludGYoZiwgIiglZCkiLCByZXBvcnQtPmlkKTsKKwkJCXNlcV9wcmludGYoZiwgIlslc10iLCB0YWJsZVtyZXBvcnQtPnR5cGVdKTsKKwkJCXNlcV9wcmludGYoZiwgIlxuIik7CiAJCQlmb3IgKGsgPSAwOyBrIDwgcmVwb3J0LT5tYXhmaWVsZDsgaysrKSB7Ci0JCQkJdGFiKDQpOwotCQkJCXByaW50aygiRmllbGQoJWQpXG4iLCBrKTsKLQkJCQloaWRfZHVtcF9maWVsZChyZXBvcnQtPmZpZWxkW2tdLCA2KTsKKwkJCQl0YWIoNCwgZik7CisJCQkJc2VxX3ByaW50ZihmLCAiRmllbGQoJWQpXG4iLCBrKTsKKwkJCQloaWRfZHVtcF9maWVsZChyZXBvcnQtPmZpZWxkW2tdLCA2LCBmKTsKIAkJCX0KIAkJCWxpc3QgPSBsaXN0LT5uZXh0OwogCQl9CkBAIC01MDMsMTMgKzU1NywzNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2R1bXBfZGV2aWNlKTsKIAotdm9pZCBoaWRfZHVtcF9pbnB1dChzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpIHsKLQlpZiAoaGlkX2RlYnVnIDwgMikKLQkJcmV0dXJuOworLyogZW5xdWV1ZSBzdHJpbmcgdG8gJ2V2ZW50cycgcmluZyBidWZmZXIgKi8KK3ZvaWQgaGlkX2RlYnVnX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjaGFyICpidWYpCit7CisJaW50IGk7CisJc3RydWN0IGhpZF9kZWJ1Z19saXN0ICpsaXN0OwogCi0JcHJpbnRrKEtFUk5fREVCVUcgImhpZC1kZWJ1ZzogaW5wdXQgIik7Ci0JaGlkX3Jlc29sdl91c2FnZSh1c2FnZS0+aGlkKTsKLQlwcmludGsoIiA9ICVkXG4iLCB2YWx1ZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsaXN0LCAmaGRldi0+ZGVidWdfbGlzdCwgbm9kZSkgeworCQlmb3IgKGkgPSAwOyBpIDw9IHN0cmxlbihidWYpOyBpKyspCisJCQlsaXN0LT5oaWRfZGVidWdfYnVmWyhsaXN0LT50YWlsICsgaSkgJSAoSElEX0RFQlVHX0JVRlNJWkUgLSAxKV0gPQorCQkJCWJ1ZltpXTsKKwkJbGlzdC0+dGFpbCA9IChsaXN0LT50YWlsICsgaSkgJSAoSElEX0RFQlVHX0JVRlNJWkUgLSAxKTsKKyAgICAgICAgfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2RlYnVnX2V2ZW50KTsKKwordm9pZCBoaWRfZHVtcF9pbnB1dChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgbGVuOworCisJYnVmID0gaGlkX3Jlc29sdl91c2FnZSh1c2FnZS0+aGlkLCBOVUxMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCWxlbiA9IHN0cmxlbihidWYpOworCXNucHJpbnRmKGJ1ZiArIGxlbiwgSElEX0RFQlVHX0JVRlNJWkUgLSBsZW4gLSAxLCAiID0gJWRcbiIsIHZhbHVlKTsKKworCWhpZF9kZWJ1Z19ldmVudChoZGV2LCBidWYpOworCisJa2ZyZWUoYnVmKTsKKyAgICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZoZGV2LT5kZWJ1Z193YWl0KTsKKwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2R1bXBfaW5wdXQpOwogCkBAIC03ODYsMTIgKzg2NCwyMjEgQEAKIAlbRVZfU05EXSA9IHNvdW5kcywJCQlbRVZfUkVQXSA9IHJlcGVhdHMsCiB9OwogCi12b2lkIGhpZF9yZXNvbHZfZXZlbnQoX191OCB0eXBlLCBfX3UxNiBjb2RlKSB7Cit2b2lkIGhpZF9yZXNvbHZfZXZlbnQoX191OCB0eXBlLCBfX3UxNiBjb2RlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYpIHsKIAotCWlmICghaGlkX2RlYnVnKQotCQlyZXR1cm47Ci0KLQlwcmludGsoIiVzLiVzIiwgZXZlbnRzW3R5cGVdID8gZXZlbnRzW3R5cGVdIDogIj8iLAorCXNlcV9wcmludGYoZiwgIiVzLiVzIiwgZXZlbnRzW3R5cGVdID8gZXZlbnRzW3R5cGVdIDogIj8iLAogCQluYW1lc1t0eXBlXSA/IChuYW1lc1t0eXBlXVtjb2RlXSA/IG5hbWVzW3R5cGVdW2NvZGVdIDogIj8iKSA6ICI/Iik7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChoaWRfcmVzb2x2X2V2ZW50KTsKKwordm9pZCBoaWRfZHVtcF9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBzZXFfZmlsZSAqZikKK3sKKwlpbnQgaSwgaiwgazsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlOworCisJZm9yIChrID0gSElEX0lOUFVUX1JFUE9SVDsgayA8PSBISURfT1VUUFVUX1JFUE9SVDsgaysrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwb3J0LCAmaGlkLT5yZXBvcnRfZW51bVtrXS5yZXBvcnRfbGlzdCwgbGlzdCkgeworCQkJZm9yIChpID0gMDsgaSA8IHJlcG9ydC0+bWF4ZmllbGQ7IGkrKykgeworCQkJCWZvciAoIGogPSAwOyBqIDwgcmVwb3J0LT5maWVsZFtpXS0+bWF4dXNhZ2U7IGorKykgeworCQkJCQl1c2FnZSA9IHJlcG9ydC0+ZmllbGRbaV0tPnVzYWdlICsgajsKKwkJCQkJaGlkX3Jlc29sdl91c2FnZSh1c2FnZS0+aGlkLCBmKTsKKwkJCQkJc2VxX3ByaW50ZihmLCAiIC0tLT4gIik7CisJCQkJCWhpZF9yZXNvbHZfZXZlbnQodXNhZ2UtPnR5cGUsIHVzYWdlLT5jb2RlLCBmKTsKKwkJCQkJc2VxX3ByaW50ZihmLCAiXG4iKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKK30KKworCitzdGF0aWMgaW50IGhpZF9kZWJ1Z19yZGVzY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiA9IGYtPnByaXZhdGU7CisJaW50IGk7CisKKwkvKiBkdW1wIEhJRCByZXBvcnQgZGVzY3JpcHRvciAqLworCWZvciAoaSA9IDA7IGkgPCBoZGV2LT5yc2l6ZTsgaSsrKQorCQlzZXFfcHJpbnRmKGYsICIlMDJ4ICIsIGhkZXYtPnJkZXNjW2ldKTsKKwlzZXFfcHJpbnRmKGYsICJcblxuIik7CisKKwkvKiBkdW1wIHBhcnNlZCBkYXRhIGFuZCBpbnB1dCBtYXBwaW5ncyAqLworCWhpZF9kdW1wX2RldmljZShoZGV2LCBmKTsKKwlzZXFfcHJpbnRmKGYsICJcbiIpOworCWhpZF9kdW1wX2lucHV0X21hcHBpbmcoaGRldiwgZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWRfZGVidWdfcmRlc2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaGlkX2RlYnVnX3JkZXNjX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgaW50IGhpZF9kZWJ1Z19ldmVudHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaGlkX2RlYnVnX2xpc3QgKmxpc3Q7CisKKwlpZiAoIShsaXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhpZF9kZWJ1Z19saXN0KSwgR0ZQX0tFUk5FTCkpKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWlmICghKGxpc3QtPmhpZF9kZWJ1Z19idWYgPSBremFsbG9jKHNpemVvZihjaGFyKSAqIEhJRF9ERUJVR19CVUZTSVpFLCBHRlBfS0VSTkVMKSkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJa2ZyZWUobGlzdCk7CisJCWdvdG8gb3V0OworCX0KKwlsaXN0LT5oZGV2ID0gKHN0cnVjdCBoaWRfZGV2aWNlICopIGlub2RlLT5pX3ByaXZhdGU7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gbGlzdDsKKwltdXRleF9pbml0KCZsaXN0LT5yZWFkX211dGV4KTsKKworCWxpc3RfYWRkX3RhaWwoJmxpc3QtPm5vZGUsICZsaXN0LT5oZGV2LT5kZWJ1Z19saXN0KTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhpZF9kZWJ1Z19ldmVudHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGhpZF9kZWJ1Z19saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXQgPSAwLCBsZW47CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwl3aGlsZSAocmV0ID09IDApIHsKKwkJbXV0ZXhfbG9jaygmbGlzdC0+cmVhZF9tdXRleCk7CisJCWlmIChsaXN0LT5oZWFkID09IGxpc3QtPnRhaWwpIHsKKwkJCWFkZF93YWl0X3F1ZXVlKCZsaXN0LT5oZGV2LT5kZWJ1Z193YWl0LCAmd2FpdCk7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCQl3aGlsZSAobGlzdC0+aGVhZCA9PSBsaXN0LT50YWlsKSB7CisJCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQkJCXJldCA9IC1FQUdBSU47CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoIWxpc3QtPmhkZXYgfHwgIWxpc3QtPmhkZXYtPmRlYnVnKSB7CisJCQkJCXJldCA9IC1FSU87CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8qIGFsbG93IE9fTk9OQkxPQ0sgZnJvbSBvdGhlciB0aHJlYWRzICovCisJCQkJbXV0ZXhfdW5sb2NrKCZsaXN0LT5yZWFkX211dGV4KTsKKwkJCQlzY2hlZHVsZSgpOworCQkJCW11dGV4X2xvY2soJmxpc3QtPnJlYWRfbXV0ZXgpOworCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQl9CisKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmbGlzdC0+aGRldi0+ZGVidWdfd2FpdCwgJndhaXQpOworCQl9CisKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCisJCS8qIHBhc3MgdGhlIHJpbmdidWZmZXIgY29udGVudHMgdG8gdXNlcnNwYWNlICovCitjb3B5X3Jlc3Q6CisJCWlmIChsaXN0LT50YWlsID09IGxpc3QtPmhlYWQpCisJCQlnb3RvIG91dDsKKwkJaWYgKGxpc3QtPnRhaWwgPiBsaXN0LT5oZWFkKSB7CisJCQlsZW4gPSBsaXN0LT50YWlsIC0gbGlzdC0+aGVhZDsKKworCQkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIgKyByZXQsICZsaXN0LT5oaWRfZGVidWdfYnVmW2xpc3QtPmhlYWRdLCBsZW4pKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXJldCArPSBsZW47CisJCQlsaXN0LT5oZWFkICs9IGxlbjsKKwkJfSBlbHNlIHsKKwkJCWxlbiA9IEhJRF9ERUJVR19CVUZTSVpFIC0gbGlzdC0+aGVhZDsKKworCQkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsICZsaXN0LT5oaWRfZGVidWdfYnVmW2xpc3QtPmhlYWRdLCBsZW4pKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWxpc3QtPmhlYWQgPSAwOworCQkJcmV0ICs9IGxlbjsKKwkJCWdvdG8gY29weV9yZXN0OworCQl9CisKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZsaXN0LT5yZWFkX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGhpZF9kZWJ1Z19ldmVudHNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgaGlkX2RlYnVnX2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlwb2xsX3dhaXQoZmlsZSwgJmxpc3QtPmhkZXYtPmRlYnVnX3dhaXQsIHdhaXQpOworCWlmIChsaXN0LT5oZWFkICE9IGxpc3QtPnRhaWwpCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCWlmICghbGlzdC0+aGRldi0+ZGVidWcpCisJCXJldHVybiBQT0xMRVJSIHwgUE9MTEhVUDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWRfZGVidWdfZXZlbnRzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGhpZF9kZWJ1Z19saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJbGlzdF9kZWwoJmxpc3QtPm5vZGUpOworCWtmcmVlKGxpc3QtPmhpZF9kZWJ1Z19idWYpOworCWtmcmVlKGxpc3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhpZF9kZWJ1Z19yZGVzY19mb3BzID0geworCS5vcGVuICAgICAgICAgICA9IGhpZF9kZWJ1Z19yZGVzY19vcGVuLAorCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSAgICAgICAgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhpZF9kZWJ1Z19ldmVudHNfZm9wcyA9IHsKKwkub3duZXIgPSAgICAgICAgVEhJU19NT0RVTEUsCisJLm9wZW4gICAgICAgICAgID0gaGlkX2RlYnVnX2V2ZW50c19vcGVuLAorCS5yZWFkICAgICAgICAgICA9IGhpZF9kZWJ1Z19ldmVudHNfcmVhZCwKKwkucG9sbAkJPSBoaWRfZGVidWdfZXZlbnRzX3BvbGwsCisJLnJlbGVhc2UgICAgICAgID0gaGlkX2RlYnVnX2V2ZW50c19yZWxlYXNlLAorfTsKKworCit2b2lkIGhpZF9kZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwloZGV2LT5kZWJ1Z19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgaGlkX2RlYnVnX3Jvb3QpOworCWhkZXYtPmRlYnVnX3JkZXNjID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmRlc2MiLCAwNDAwLAorCQkJaGRldi0+ZGVidWdfZGlyLCBoZGV2LCAmaGlkX2RlYnVnX3JkZXNjX2ZvcHMpOworCWhkZXYtPmRlYnVnX2V2ZW50cyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImV2ZW50cyIsIDA0MDAsCisJCQloZGV2LT5kZWJ1Z19kaXIsIGhkZXYsICZoaWRfZGVidWdfZXZlbnRzX2ZvcHMpOworCWhkZXYtPmRlYnVnID0gMTsKK30KKwordm9pZCBoaWRfZGVidWdfdW5yZWdpc3RlcihzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwloZGV2LT5kZWJ1ZyA9IDA7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZoZGV2LT5kZWJ1Z193YWl0KTsKKwlkZWJ1Z2ZzX3JlbW92ZShoZGV2LT5kZWJ1Z19yZGVzYyk7CisJZGVidWdmc19yZW1vdmUoaGRldi0+ZGVidWdfZXZlbnRzKTsKKwlkZWJ1Z2ZzX3JlbW92ZShoZGV2LT5kZWJ1Z19kaXIpOworfQorCit2b2lkIGhpZF9kZWJ1Z19pbml0KHZvaWQpCit7CisJaGlkX2RlYnVnX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImhpZCIsIE5VTEwpOworfQorCit2b2lkIGhpZF9kZWJ1Z19leGl0KHZvaWQpCit7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGhpZF9kZWJ1Z19yb290KTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWV6a2V5LmMgYi9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYwppbmRleCAwYTFmZTA1Li5jYTExNjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYwpAQCAtNzgsMTIgKzc4LDEyIEBACiAJLmV2ZW50ID0gZXpfZXZlbnQsCiB9OwogCi1zdGF0aWMgaW50IGV6X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGV6X2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmZXpfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgZXpfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGV6X2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmV6X2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZ3lyYXRpb24uYyBiL2RyaXZlcnMvaGlkL2hpZC1neXJhdGlvbi5jCmluZGV4IGQ0MmQyMjIuLmNhYjEzZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1neXJhdGlvbi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1neXJhdGlvbi5jCkBAIC04MSwxMiArODEsMTIgQEAKIAkuZXZlbnQgPSBneXJhdGlvbl9ldmVudCwKIH07CiAKLXN0YXRpYyBpbnQgZ3lyYXRpb25faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZ3lyYXRpb25faW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZneXJhdGlvbl9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBneXJhdGlvbl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZ3lyYXRpb25fZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmZ3lyYXRpb25fZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaCBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAppbmRleCA2MzAxMDEwLi5hZGJlZjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCkBAIC0yOTYsNiArMjk2LDcgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0YzRAkweGMyODMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GT1JDRTNEX1BSTwkweGMyODYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSEVFTAkweGMyOTQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0ZGRwkweGMyOTMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMCTB4YzI5NQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0cyNV9XSEVFTAkweGMyOTkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9FTElURV9LQkQJMHhjMzBhCkBAIC0zNTksNiArMzYwLDkgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QRVRBTFlOWAkJMHgxOGIxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUEVUQUxZTlhfTUFYVEVSX1JFTU9URQkweDAwMzcKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1BISUxJUFMgICAgICAgMHgwNDcxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUEhJTElQU19JRUVFODAyMTU0X0RPTkdMRSAweDA2MTcKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1BMQVlET1RDT00JMHgwYjQzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUExBWURPVENPTV9FTVNfVVNCSUkJMHgwMDAzCiAKQEAgLTM3NiwxMSArMzgwLDggQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSCTB4MDI2OAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU09VTkRHUkFQSAkweDE1YzIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTENECTB4MDAzOAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0QyCTB4MDAzNgotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0QzCTB4MDAzNAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0Q0CTB4MDA0NAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0Q1CTB4MDA0NQorI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9GSVJTVAkweDAwMzQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTEFTVAkweDAwNDYKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1NVTgkJMHgwNDMwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUkFSSVRBTl9LVk1fRE9OR0xFCTB4Y2RhYgpAQCAtNDAzLDYgKzQwNCw5IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfVFVSQk9YCQkweDA2MmEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9UVVJCT1hfS0VZQk9BUkQJMHgwMjAxCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UV0lOSEFOICAgICAgICAgICAweDYyNTMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9UV0lOSEFOX0lSX1JFTU9URSAweDAxMDAKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1VDTE9HSUMJCTB4NTU0MwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1VDTE9HSUNfVEFCTEVUX1BGMTIwOQkweDAwNDIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwppbmRleCA3ZjE4M2I3Li41ODYyYjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwpAQCAtMTU5LDE3ICsxNTksMTIgQEAKIAogCWZpZWxkLT5oaWRpbnB1dCA9IGhpZGlucHV0OwogCi0JZGJnX2hpZCgiTWFwcGluZzogIik7Ci0JaGlkX3Jlc29sdl91c2FnZSh1c2FnZS0+aGlkKTsKLQlkYmdfaGlkX2xpbmUoIiAtLS0+ICIpOwotCiAJaWYgKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fQ09OU1RBTlQpCiAJCWdvdG8gaWdub3JlOwogCiAJLyogb25seSBMRUQgdXNhZ2VzIGFyZSBzdXBwb3J0ZWQgaW4gb3V0cHV0IGZpZWxkcyAqLwogCWlmIChmaWVsZC0+cmVwb3J0X3R5cGUgPT0gSElEX09VVFBVVF9SRVBPUlQgJiYKIAkJCSh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9MRUQpIHsKLQkJZGJnX2hpZF9saW5lKCIgW25vbi1MRUQgb3V0cHV0IGZpZWxkXSAiKTsKIAkJZ290byBpZ25vcmU7CiAJfQogCkBAIC01NjEsMTUgKzU1Niw5IEBACiAJCXNldF9iaXQoTVNDX1NDQU4sIGlucHV0LT5tc2NiaXQpOwogCX0KIAotCWhpZF9yZXNvbHZfZXZlbnQodXNhZ2UtPnR5cGUsIHVzYWdlLT5jb2RlKTsKLQotCWRiZ19oaWRfbGluZSgiXG4iKTsKLQotCXJldHVybjsKLQogaWdub3JlOgotCWRiZ19oaWRfbGluZSgiSUdOT1JFRFxuIik7CiAJcmV0dXJuOworCiB9CiAKIHZvaWQgaGlkaW5wdXRfaGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQta2Vuc2luZ3Rvbi5jIGIvZHJpdmVycy9oaWQvaGlkLWtlbnNpbmd0b24uYwppbmRleCA3MzUzYmQ3Li5hNWI0MDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQta2Vuc2luZ3Rvbi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1rZW5zaW5ndG9uLmMKQEAgLTQ4LDEyICs0OCwxMiBAQAogCS5pbnB1dF9tYXBwaW5nID0ga3NfaW5wdXRfbWFwcGluZywKIH07CiAKLXN0YXRpYyBpbnQga3NfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQga3NfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZrc19kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBrc19leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQga3NfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigma3NfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1reWUuYyBiL2RyaXZlcnMvaGlkL2hpZC1reWUuYwppbmRleCA3MmVlM2ZlLi5mODg3MTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQta3llLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWt5ZS5jCkBAIC01NCwxMiArNTQsMTIgQEAKIAkucmVwb3J0X2ZpeHVwID0ga3llX3JlcG9ydF9maXh1cCwKIH07CiAKLXN0YXRpYyBpbnQga3llX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGt5ZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmt5ZV9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBreWVfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGt5ZV9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZreWVfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZy5jIGIvZHJpdmVycy9oaWQvaGlkLWxnLmMKaW5kZXggN2FmYmFhMC4uMGY4NzBhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxnLmMKQEAgLTI5OSw2ICsyOTksOCBAQAogCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9HMjVfV0hFRUwpLAogCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0ZGRyApLAorCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9SVU1CTEVQQUQyKSwKIAkJLmRyaXZlcl9kYXRhID0gTEdfRkYyIH0sCiAJeyB9CkBAIC0zMTUsMTIgKzMxNywxMiBAQAogCS5wcm9iZSA9IGxnX3Byb2JlLAogfTsKIAotc3RhdGljIGludCBsZ19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBsZ19pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmxnX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGxnX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBsZ19leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZsZ19kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKaW5kZXggNTYwOTk3MC4uOTg3YWJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxnZmYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jCkBAIC02Nyw2ICs2Nyw3IEBACiAJeyAweDA0NmQsIDB4YzIxOSwgZmZfcnVtYmxlIH0sCiAJeyAweDA0NmQsIDB4YzI4MywgZmZfam95c3RpY2sgfSwKIAl7IDB4MDQ2ZCwgMHhjMjg2LCBmZl9qb3lzdGlja19hYyB9LAorCXsgMHgwNDZkLCAweGMyOTMsIGZmX2pveXN0aWNrIH0sCiAJeyAweDA0NmQsIDB4YzI5NCwgZmZfd2hlZWwgfSwKIAl7IDB4MDQ2ZCwgMHhjMjk1LCBmZl9qb3lzdGljayB9LAogCXsgMHgwNDZkLCAweGNhMDMsIGZmX3doZWVsIH0sCkBAIC0xNTAsMTEgKzE1MSw2IEBACiAKIAkvKiBDaGVjayB0aGF0IHRoZSByZXBvcnQgbG9va3Mgb2sgKi8KIAlyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7Ci0JaWYgKCFyZXBvcnQpIHsKLQkJZXJyX2hpZCgiTlVMTCBvdXRwdXQgcmVwb3J0Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KIAlmaWVsZCA9IHJlcG9ydC0+ZmllbGRbMF07CiAJaWYgKCFmaWVsZCkgewogCQllcnJfaGlkKCJOVUxMIGZpZWxkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbWljcm9zb2Z0LmMgYi9kcml2ZXJzL2hpZC9oaWQtbWljcm9zb2Z0LmMKaW5kZXggNWU5ZTM3YS4uMzU5Y2M0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW1pY3Jvc29mdC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1taWNyb3NvZnQuYwpAQCAtMTk3LDEyICsxOTcsMTIgQEAKIAkucHJvYmUgPSBtc19wcm9iZSwKIH07CiAKLXN0YXRpYyBpbnQgbXNfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbXNfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZtc19kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBtc19leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgbXNfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmbXNfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1tb250ZXJleS5jIGIvZHJpdmVycy9oaWQvaGlkLW1vbnRlcmV5LmMKaW5kZXggMjQwZjg3Ni4uMmNkMDVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW1vbnRlcmV5LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1vbnRlcmV5LmMKQEAgLTY1LDEyICs2NSwxMiBAQAogCS5pbnB1dF9tYXBwaW5nID0gbXJfaW5wdXRfbWFwcGluZywKIH07CiAKLXN0YXRpYyBpbnQgbXJfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbXJfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZtcl9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBtcl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgbXJfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmbXJfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jIGIvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKaW5kZXggNzVlZDlkMi4uNDljZTY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKQEAgLTI3LDYgKzI3LDkgQEAKIHN0cnVjdCBudHJpZ19kYXRhIHsKIAlfX3MzMiB4LCB5LCBpZCwgdywgaDsKIAljaGFyIHJlYWRpbmdfYV9wb2ludCwgZm91bmRfY29udGFjdF9pZDsKKwljaGFyIHBlbl9hY3RpdmU7CisJY2hhciBmaW5nZXJfYWN0aXZlOworCWNoYXIgaW52ZXJ0ZWQ7CiB9OwogCiAvKgpAQCAtNjMsMTAgKzY2LDcgQEAKIAljYXNlIEhJRF9VUF9ESUdJVElaRVI6CiAJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewogCQkvKiB3ZSBkbyBub3Qgd2FudCB0byBtYXAgdGhlc2UgZm9yIG5vdyAqLwotCQljYXNlIEhJRF9ER19JTlZFUlQ6IC8qIHZhbHVlIGlzIGFsd2F5cyAwICovCi0JCWNhc2UgSElEX0RHX0VSQVNFUjogLyogdmFsdWUgaXMgYWx3YXlzIDAgKi8KIAkJY2FzZSBISURfREdfQ09OVEFDVElEOiAvKiB2YWx1ZSBpcyB1c2VsZXNzICovCi0JCWNhc2UgSElEX0RHX0JBUlJFTFNXSVRDSDogIC8qIGRvdWJ0ZnVsICovCiAJCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKIAkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6CiAJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKQEAgLTEyNSw2ICsxMjUsMTggQEAKIAogICAgICAgICBpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHsKIAkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJCWlmIChmaWVsZC0+YXBwbGljYXRpb24gJiAweDMpCisJCQkJbmQtPnBlbl9hY3RpdmUgPSAodmFsdWUgIT0gMCk7CisJCQllbHNlCisJCQkJbmQtPmZpbmdlcl9hY3RpdmUgPSAodmFsdWUgIT0gMCk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9ER19JTlZFUlQ6CisJCQluZC0+aW52ZXJ0ZWQgPSB2YWx1ZTsKKwkJCXJldHVybiAwOworCiAJCWNhc2UgSElEX0dEX1g6CiAJCQluZC0+eCA9IHZhbHVlOwogCQkJbmQtPnJlYWRpbmdfYV9wb2ludCA9IDE7CkBAIC0xNDcsNyArMTU5LDExIEBACiAJCQkgKiByZXBvcnQgcmVjZWl2ZWQgaW4gYSBmaW5nZXIgZXZlbnQuIFdlIHdhbnQKIAkJCSAqIHRvIGVtaXQgYSBub3JtYWwgKFgsIFkpIHBvc2l0aW9uCiAJCQkgKi8KLQkJCWlmICghIG5kLT5mb3VuZF9jb250YWN0X2lkKSB7CisJCQlpZiAoIW5kLT5mb3VuZF9jb250YWN0X2lkKSB7CisJCQkJaWYgKG5kLT5wZW5fYWN0aXZlICYmIG5kLT5maW5nZXJfYWN0aXZlKSB7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0RPVUJMRVRBUCwgMCk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0RPVUJMRVRBUCwgMSk7CisJCQkJfQogCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCBuZC0+eCk7CiAJCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIG5kLT55KTsKIAkJCX0KQEAgLTE1OSw2ICsxNzUsMTQgQEAKIAkJCSAqIHRvIGVtaXQgYSBub3JtYWwgKFgsIFkpIHBvc2l0aW9uCiAJCQkgKi8KIAkJCWlmICghIG5kLT5mb3VuZF9jb250YWN0X2lkKSB7CisJCQkJaWYgKG5kLT5wZW5fYWN0aXZlICYmIG5kLT5maW5nZXJfYWN0aXZlKSB7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQkJbmQtPmludmVydGVkID8gQlROX1RPT0xfUlVCQkVSIDogQlROX1RPT0xfUEVOCisJCQkJCQkJLCAwKTsKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwKKwkJCQkJCQluZC0+aW52ZXJ0ZWQgPyBCVE5fVE9PTF9SVUJCRVIgOiBCVE5fVE9PTF9QRU4KKwkJCQkJCQksIDEpOworCQkJCX0KIAkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgbmQtPngpOwogCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCBuZC0+eSk7CiAJCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1BSRVNTVVJFLCB2YWx1ZSk7CkBAIC0yMzMsNiArMjU3LDcgQEAKIAogCWlmIChyZXQpCiAJCWtmcmVlIChuZCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNjUsMTIgKzI5MCwxMiBAQAogCS5ldmVudCA9IG50cmlnX2V2ZW50LAogfTsKIAotc3RhdGljIGludCBudHJpZ19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBudHJpZ19pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJm50cmlnX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIG50cmlnX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBudHJpZ19leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZudHJpZ19kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXBldGFseW54LmMgYi9kcml2ZXJzL2hpZC9oaWQtcGV0YWx5bnguYwppbmRleCAyZTgzZThmLi41MDBmYmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcGV0YWx5bnguYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcGV0YWx5bnguYwpAQCAtMTA1LDEyICsxMDUsMTIgQEAKIAkucHJvYmUgPSBwbF9wcm9iZSwKIH07CiAKLXN0YXRpYyBpbnQgcGxfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcGxfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZwbF9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBwbF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgcGxfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmcGxfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1wbC5jIGIvZHJpdmVycy9oaWQvaGlkLXBsLmMKaW5kZXggNGRiOWEzNC4uYzZkN2RiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXBsLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXBsLmMKQEAgLTIxNywxMiArMjE3LDEyIEBACiAJLnByb2JlID0gcGxfcHJvYmUsCiB9OwogCi1zdGF0aWMgaW50IHBsX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHBsX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmcGxfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgcGxfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHBsX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnBsX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc2Ftc3VuZy5jIGIvZHJpdmVycy9oaWQvaGlkLXNhbXN1bmcuYwppbmRleCAwNzA4M2FhLi41YjIyMmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtc2Ftc3VuZy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1zYW1zdW5nLmMKQEAgLTI1LDI1ICsyNSw0OCBAQAogLyoKICAqIFNhbXN1bmcgSXJEQSByZW1vdGUgY29udHJvbGxlciAocmVwb3J0cyBhcyBDeXByZXNzIFVTQiBNb3VzZSkuCiAgKgorICogVGhlcmUgYXJlIHNldmVyYWwgdmFyaWFudHMgZm9yIDA0MTk6MDAwMToKKyAqCisgKiAxLiAxODQgYnl0ZSByZXBvcnQgZGVzY3JpcHRvcgogICogVmVuZG9yIHNwZWNpZmljIHJlcG9ydCAjNCBoYXMgYSBzaXplIG9mIDQ4IGJpdCwKICAqIGFuZCB0aGVyZWZvcmUgaXMgbm90IGFjY2VwdGVkIHdoZW4gaW5zcGVjdGluZyB0aGUgZGVzY3JpcHRvcnMuCiAgKiBBcyBhIHdvcmthcm91bmQgd2UgcmVpbnRlcnByZXQgdGhlIHJlcG9ydCBhczoKICAqICAgVmFyaWFibGUgdHlwZSwgY291bnQgNiwgc2l6ZSA4IGJpdCwgbG9nLiBtYXhpbXVtIDI1NQogICogVGhlIGJ1cmRlbiB0byByZWNvbnN0cnVjdCB0aGUgZGF0YSBpcyBtb3ZlZCBpbnRvIHVzZXIgc3BhY2UuCisgKgorICogMi4gMjAzIGJ5dGUgcmVwb3J0IGRlc2NyaXB0b3IKKyAqIFJlcG9ydCAjNCBoYXMgYW4gYXJyYXkgZmllbGQgd2l0aCBsb2dpY2FsIHJhbmdlIDAuLjE4IGluc3RlYWQgb2YgMS4uMTUuCisgKgorICogMy4gMTM1IGJ5dGUgcmVwb3J0IGRlc2NyaXB0b3IKKyAqIFJlcG9ydCAjNCBoYXMgYW4gYXJyYXkgZmllbGQgd2l0aCBsb2dpY2FsIHJhbmdlIDAuLjE3IGluc3RlYWQgb2YgMS4uMTQuCiAgKi8KIHN0YXRpYyB2b2lkIHNhbXN1bmdfcmVwb3J0X2ZpeHVwKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBfX3U4ICpyZGVzYywKIAkJdW5zaWduZWQgaW50IHJzaXplKQogewotCWlmIChyc2l6ZSA+PSAxODIgJiYgcmRlc2NbMTc1XSA9PSAweDI1ICYmIHJkZXNjWzE3Nl0gPT0gMHg0MCAmJgorCWlmIChyc2l6ZSA9PSAxODQgJiYgcmRlc2NbMTc1XSA9PSAweDI1ICYmIHJkZXNjWzE3Nl0gPT0gMHg0MCAmJgogCQkJcmRlc2NbMTc3XSA9PSAweDc1ICYmIHJkZXNjWzE3OF0gPT0gMHgzMCAmJgogCQkJcmRlc2NbMTc5XSA9PSAweDk1ICYmIHJkZXNjWzE4MF0gPT0gMHgwMSAmJgogCQkJcmRlc2NbMTgyXSA9PSAweDQwKSB7Ci0JCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgU2Ftc3VuZyBJckRBIHJlcG9ydCAiCi0JCQkJImRlc2NyaXB0b3JcbiIpOworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiZml4aW5nIHVwIFNhbXN1bmcgSXJEQSAlZCBieXRlIHJlcG9ydCAiCisJCQkJImRlc2NyaXB0b3JcbiIsIDE4NCk7CiAJCXJkZXNjWzE3Nl0gPSAweGZmOwogCQlyZGVzY1sxNzhdID0gMHgwODsKIAkJcmRlc2NbMTgwXSA9IDB4MDY7CiAJCXJkZXNjWzE4Ml0gPSAweDQyOworCX0gZWxzZQorCWlmIChyc2l6ZSA9PSAyMDMgJiYgcmRlc2NbMTkyXSA9PSAweDE1ICYmIHJkZXNjWzE5M10gPT0gMHgwICYmCisJCQlyZGVzY1sxOTRdID09IDB4MjUgJiYgcmRlc2NbMTk1XSA9PSAweDEyKSB7CisJCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgU2Ftc3VuZyBJckRBICVkIGJ5dGUgcmVwb3J0ICIKKwkJCQkiZGVzY3JpcHRvclxuIiwgMjAzKTsKKwkJcmRlc2NbMTkzXSA9IDB4MTsKKwkJcmRlc2NbMTk1XSA9IDB4ZjsKKwl9IGVsc2UKKwlpZiAocnNpemUgPT0gMTM1ICYmIHJkZXNjWzEyNF0gPT0gMHgxNSAmJiByZGVzY1sxMjVdID09IDB4MCAmJgorCQkJcmRlc2NbMTI2XSA9PSAweDI1ICYmIHJkZXNjWzEyN10gPT0gMHgxMSkgeworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiZml4aW5nIHVwIFNhbXN1bmcgSXJEQSAlZCBieXRlIHJlcG9ydCAiCisJCQkJImRlc2NyaXB0b3JcbiIsIDEzNSk7CisJCXJkZXNjWzEyNV0gPSAweDE7CisJCXJkZXNjWzEyN10gPSAweGU7CiAJfQogfQogCkBAIC01MSw2ICs3NCw3IEBACiAJCWNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgcmV0OworCXVuc2lnbmVkIGludCBjbWFzayA9IEhJRF9DT05ORUNUX0RFRkFVTFQ7CiAKIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldCkgewpAQCAtNTgsOCArODIsMTMgQEAKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKLQlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgKEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfSElESU5QVVQpIHwKLQkJCUhJRF9DT05ORUNUX0hJRERFVl9GT1JDRSk7CisJaWYgKGhkZXYtPnJzaXplID09IDE4NCkgeworCQkvKiBkaXNhYmxlIGhpZGlucHV0LCBmb3JjZSBoaWRkZXYgKi8KKwkJY21hc2sgPSAoY21hc2sgJiB+SElEX0NPTk5FQ1RfSElESU5QVVQpIHwKKwkJCUhJRF9DT05ORUNUX0hJRERFVl9GT1JDRTsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgY21hc2spOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKQEAgLTgzLDEyICsxMTIsMTIgQEAKIAkucHJvYmUgPSBzYW1zdW5nX3Byb2JlLAogfTsKIAotc3RhdGljIGludCBzYW1zdW5nX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNhbXN1bmdfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZzYW1zdW5nX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIHNhbXN1bmdfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNhbXN1bmdfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmc2Ftc3VuZ19kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXNqb3kuYyBiL2RyaXZlcnMvaGlkL2hpZC1zam95LmMKaW5kZXggZWFiMTY5ZS4uMjAzYzQzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXNqb3kuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtc2pveS5jCkBAIC0xNjMsMTIgKzE2MywxMiBAQAogCS5wcm9iZSA9IHNqb3lfcHJvYmUsCiB9OwogCi1zdGF0aWMgaW50IHNqb3lfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc2pveV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnNqb3lfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgc2pveV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgc2pveV9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZzam95X2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwppbmRleCBjMjU5OTM4Li40ZTg0NTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKQEAgLTEzNSwxMiArMTM1LDEyIEBACiAJLnJlcG9ydF9maXh1cCA9IHNvbnlfcmVwb3J0X2ZpeHVwLAogfTsKIAotc3RhdGljIGludCBzb255X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNvbnlfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZzb255X2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIHNvbnlfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNvbnlfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmc29ueV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXN1bnBsdXMuYyBiL2RyaXZlcnMvaGlkL2hpZC1zdW5wbHVzLmMKaW5kZXggZTBhOGZkMy4uNDM4MTA3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXN1bnBsdXMuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtc3VucGx1cy5jCkBAIC02NSwxMiArNjUsMTIgQEAKIAkuaW5wdXRfbWFwcGluZyA9IHNwX2lucHV0X21hcHBpbmcsCiB9OwogCi1zdGF0aWMgaW50IHNwX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNwX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmc3BfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgc3BfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNwX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNwX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdG1mZi5jIGIvZHJpdmVycy9oaWQvaGlkLXRtZmYuYwppbmRleCBmY2Q2Y2NkLi4xNjdlYTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtdG1mZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC10bWZmLmMKQEAgLTI0Myw3ICsyNDMsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCB0bV9kZXZpY2VzW10gPSB7CiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzAwKSwKIAkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpZmZfcnVtYmxlIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzA0KSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGIzMDQpLCAgIC8qIEZpcmVTdG9ybSBEdWFsIFBvd2VyIDIgKGFuZCAzKSAqLworCQkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZylmZl9ydW1ibGUgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGIzMjMpLCAgIC8qIER1YWwgVHJpZ2dlciAzLWluLTEgKFBDIE1vZGUpICovCisJCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKWZmX3J1bWJsZSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMyNCksICAgLyogRHVhbCBUcmlnZ2VyIDMtaW4tMSAoUFMzIE1vZGUpICovCiAJCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKWZmX3J1bWJsZSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjY1MSksCS8qIEZHVCBSdW1ibGUgRm9yY2UgV2hlZWwgKi8KIAkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpZmZfcnVtYmxlIH0sCkBAIC0yNTksMTIgKzI2MywxMiBAQAogCS5wcm9iZSA9IHRtX3Byb2JlLAogfTsKIAotc3RhdGljIGludCB0bV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB0bV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnRtX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIHRtX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB0bV9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZ0bV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXRvcHNlZWQuYyBiL2RyaXZlcnMvaGlkL2hpZC10b3BzZWVkLmMKaW5kZXggMTUyY2NmYS4uNjkyNWVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXRvcHNlZWQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtdG9wc2VlZC5jCkBAIC02MCwxMiArNjAsMTIgQEAKIAkuaW5wdXRfbWFwcGluZyA9IHRzX2lucHV0X21hcHBpbmcsCiB9OwogCi1zdGF0aWMgaW50IHRzX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHRzX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmdHNfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgdHNfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHRzX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnRzX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdHdpbmhhbi5jIGIvZHJpdmVycy9oaWQvaGlkLXR3aW5oYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDVmNjAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXR3aW5oYW4uYwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIEhJRCBkcml2ZXIgZm9yIFR3aW5IYW4gSVIgcmVtb3RlIGNvbnRyb2wKKyAqCisgKiBCYXNlZCBvbiBoaWQtZ3lyYXRpb24uYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBCcnVubyBQcultb250IDxib25ib25zQGxpbnV4LXZzZXJ2ZXIub3JnPgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKy8qCVJlbW90ZSBjb250cm9sIGtleSBsYXlvdXQgKyBsaXN0aW5nOgorICoKKyAqIAlGdWxsIFNjcmVlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyCisgKglLRVlfU0NSRUVOICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUE9XRVIyCisgKgorICoJMSAgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgICAgMworICoJS0VZX05VTUVSSUNfMSAgIEtFWV9OVU1FUklDXzIgICAgS0VZX05VTUVSSUNfMworICoKKyAqCTQgICAgICAgICAgICAgICAgICAgICA1ICAgICAgICAgICAgICAgICAgICAgIDYKKyAqCUtFWV9OVU1FUklDXzQgICBLRVlfTlVNRVJJQ181ICAgIEtFWV9OVU1FUklDXzYKKyAqCisgKgk3ICAgICAgICAgICAgICAgICAgICAgOCAgICAgICAgICAgICAgICAgICAgICA5CisgKglLRVlfTlVNRVJJQ183ICAgS0VZX05VTUVSSUNfOCAgICBLRVlfTlVNRVJJQ185CisgKgorICoJUkVDICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICBGYXZvcml0ZQorICoJS0VZX1JFQ09SRCAgICAgIEtFWV9OVU1FUklDXzAgICAgS0VZX0ZBVk9SSVRFUworICoKKyAqCVJld2luZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcndhcmQKKyAqCUtFWV9SRVdJTkQgICAgICAgICAgIENIKyAgICAgICAgICAgS0VZX0ZPUldBUkQKKyAqCSAgICAgICAgICAgICAgIEtFWV9DSEFOTkVMVVAKKyAqCisgKglWT0wtICAgICAgICAgICAgICAgICAgPiAgICAgICAgICAgICAgICAgICBWT0wrCisgKglLRVlfVk9MVU1FRE9XTiAgICBLRVlfUExBWSAgICAgICAgS0VZX1ZPTFVNRVVQCisgKgorICoJICAgICAgICAgICAgICAgICAgICAgQ0gtCisgKgkgICAgICAgICAgICAgIEtFWV9DSEFOTkVMRE9XTgorICoJUmVjYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcAorICoJS0VZX1JFU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfU1RPUAorICoKKyAqCVRpbWVzaGlmdC9QYXVzZSAgICAgTXV0ZSAgICAgICAgICAgICAgICBDYW5jZWwKKyAqCUtFWV9QQVVTRSAgICAgICAgIEtFWV9NVVRFICAgICAgICAgIEtFWV9DQU5DRUwKKyAqCisgKglDYXB0dXJlICAgICAgICAgICAgUHJldmlldyAgICAgICAgICAgICAgICAgRVBHCisgKglLRVlfUFJJTlQgICAgICAgIEtFWV9QUk9HUkFNICAgICAgICAgICBLRVlfRVBHCisgKgorICoJUmVjb3JkIExpc3QgICAgICAgICAgVGFiICAgICAgICAgICAgICBUZWxldGV4dAorICoJS0VZX0xJU1QgICAgICAgICAgICBLRVlfVEFCICAgICAgICAgICBLRVlfVEVYVAorICovCisKKyNkZWZpbmUgdGhfbWFwX2tleV9jbGVhcihjKQloaWRfbWFwX3VzYWdlX2NsZWFyKGhpLCB1c2FnZSwgYml0LCBtYXgsIFwKKwkJCQkJRVZfS0VZLCAoYykpCitzdGF0aWMgaW50IHR3aW5oYW5faW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9LRVlCT0FSRCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwkvKiBNYXAgYWxsIGtleXMgZnJvbSBUd2luaGFuIFJlbW90ZSAqLworCWNhc2UgMHgwMDQ6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1RFWFQpOyAgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMDY6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1JFU1RBUlQpOyAgICAgIGJyZWFrOworCWNhc2UgMHgwMDg6IHRoX21hcF9rZXlfY2xlYXIoS0VZX0VQRyk7ICAgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMGM6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1JFV0lORCk7ICAgICAgIGJyZWFrOworCWNhc2UgMHgwMGU6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1BST0dSQU0pOyAgICAgIGJyZWFrOworCWNhc2UgMHgwMGY6IHRoX21hcF9rZXlfY2xlYXIoS0VZX0xJU1QpOyAgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMTA6IHRoX21hcF9rZXlfY2xlYXIoS0VZX01VVEUpOyAgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMTE6IHRoX21hcF9rZXlfY2xlYXIoS0VZX0ZPUldBUkQpOyAgICAgIGJyZWFrOworCWNhc2UgMHgwMTM6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1BSSU5UKTsgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMTc6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1BBVVNFKTsgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMTk6IHRoX21hcF9rZXlfY2xlYXIoS0VZX0ZBVk9SSVRFUyk7ICAgIGJyZWFrOworCWNhc2UgMHgwMWQ6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1NDUkVFTik7ICAgICAgIGJyZWFrOworCWNhc2UgMHgwMWU6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfMSk7ICAgIGJyZWFrOworCWNhc2UgMHgwMWY6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfMik7ICAgIGJyZWFrOworCWNhc2UgMHgwMjA6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfMyk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjE6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfNCk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjI6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfNSk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjM6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfNik7ICAgIGJyZWFrOworCWNhc2UgMHgwMjQ6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfNyk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjU6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfOCk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjY6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfOSk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjc6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfMCk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjg6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1BMQVkpOyAgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMjk6IHRoX21hcF9rZXlfY2xlYXIoS0VZX0NBTkNFTCk7ICAgICAgIGJyZWFrOworCWNhc2UgMHgwMmI6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1RBQik7ICAgICAgICAgIGJyZWFrOworCS8qIFBvd2VyICAgICAgID0gMHgwZTAgKyAweDBlMSArIDB4MGUyICsgMHgwM2YgKi8KKwljYXNlIDB4MDNmOiB0aF9tYXBfa2V5X2NsZWFyKEtFWV9QT1dFUjIpOyAgICAgICBicmVhazsKKwljYXNlIDB4MDRhOiB0aF9tYXBfa2V5X2NsZWFyKEtFWV9SRUNPUkQpOyAgICAgICBicmVhazsKKwljYXNlIDB4MDRiOiB0aF9tYXBfa2V5X2NsZWFyKEtFWV9DSEFOTkVMVVApOyAgICBicmVhazsKKwljYXNlIDB4MDRkOiB0aF9tYXBfa2V5X2NsZWFyKEtFWV9TVE9QKTsgICAgICAgICBicmVhazsKKwljYXNlIDB4MDRlOiB0aF9tYXBfa2V5X2NsZWFyKEtFWV9DSEFOTkVMRE9XTik7ICBicmVhazsKKwkvKiBWb2x1bWUgZG93biA9IDB4MGUxICsgMHgwNTEgICAgICAgICAgICAgICAgICovCisJY2FzZSAweDA1MTogdGhfbWFwX2tleV9jbGVhcihLRVlfVk9MVU1FRE9XTik7ICAgYnJlYWs7CisJLyogVm9sdW1lIHVwICAgPSAweDBlMSArIDB4MDUyICAgICAgICAgICAgICAgICAqLworCWNhc2UgMHgwNTI6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1ZPTFVNRVVQKTsgICAgIGJyZWFrOworCS8qIEtpbGwgdGhlIGV4dHJhIGtleXMgdXNlZCBmb3IgbXVsdGkta2V5ICJwb3dlciIgYW5kICJ2b2x1bWUiIGtleXMKKwkgKiBhcyB3ZWxsIGFzIGNvbnRpbnVvdXNseSB0byByZWxlYXNlIENUUkwsQUxULE1FVEEsLi4uIGtleXMgKi8KKwljYXNlIDB4MGUwOgorCWNhc2UgMHgwZTE6CisJY2FzZSAweDBlMjoKKwljYXNlIDB4MGUzOgorCWNhc2UgMHgwZTQ6CisJY2FzZSAweDBlNToKKwljYXNlIDB4MGU2OgorCWNhc2UgMHgwZTc6CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHR3aW5oYW5fZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9UV0lOSEFOLCBVU0JfREVWSUNFX0lEX1RXSU5IQU5fSVJfUkVNT1RFKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCB0d2luaGFuX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgdHdpbmhhbl9kcml2ZXIgPSB7CisJLm5hbWUgPSAidHdpbmhhbiIsCisJLmlkX3RhYmxlID0gdHdpbmhhbl9kZXZpY2VzLAorCS5pbnB1dF9tYXBwaW5nID0gdHdpbmhhbl9pbnB1dF9tYXBwaW5nLAorfTsKKworc3RhdGljIGludCB0d2luaGFuX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmdHdpbmhhbl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCB0d2luaGFuX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnR3aW5oYW5fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodHdpbmhhbl9pbml0KTsKK21vZHVsZV9leGl0KHR3aW5oYW5fZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYyBiL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCmluZGV4IDFmOTIzN2YuLjc0NzU0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIAkucmF3X2V2ZW50ID0gd2Fjb21fcmF3X2V2ZW50LAogfTsKIAotc3RhdGljIGludCB3YWNvbV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB3YWNvbV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIApAQCAtMjQ4LDcgKzI0OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgd2Fjb21fZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHdhY29tX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJndhY29tX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtenBmZi5jIGIvZHJpdmVycy9oaWQvaGlkLXpwZmYuYwppbmRleCA1N2Y3MTA3NS4uYTc5ZjBkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXpwZmYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtenBmZi5jCkBAIC0xNTIsMTIgKzE1MiwxMiBAQAogCS5wcm9iZSA9IHpwX3Byb2JlLAogfTsKIAotc3RhdGljIGludCB6cF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB6cF9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnpwX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIHpwX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB6cF9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZ6cF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwppbmRleCAzYzFmY2I3Li4xYjBlMDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwpAQCAtNCw4ICs0LDggQEAKICAqICBDb3B5cmlnaHQgKGMpIDE5OTkgQW5kcmVhcyBHYWwKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgogICogIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEhhYm91c3RhayA8bWlrZS1AY2luY2kucnIuY29tPiBmb3IgQ29uY2VwdDIsIEluYwotICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IEppcmkgS29zaW5hCiAgKiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggT2xpdmVyIE5ldWt1bQorICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IEppcmkgS29zaW5hCiAgKi8KIAogLyoKQEAgLTQ4OSw3ICs0ODksOCBAQAogCXdha2VfdXAoJnVzYmhpZC0+d2FpdCk7CiB9CiAKLXZvaWQgX191c2JoaWRfc3VibWl0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCBjaGFyIGRpcikKK3N0YXRpYyB2b2lkIF9fdXNiaGlkX3N1Ym1pdF9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwKKwkJCQkgICB1bnNpZ25lZCBjaGFyIGRpcikKIHsKIAlpbnQgaGVhZDsKIAlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKQEAgLTg4NSwxMSArODg2LDYgQEAKIAkJZ290byBlcnI7CiAJfQogCi0JZGJnX2hpZCgicmVwb3J0IGRlc2NyaXB0b3IgKHNpemUgJXUsIHJlYWQgJWQpID0gIiwgcnNpemUsIG4pOwotCWZvciAobiA9IDA7IG4gPCByc2l6ZTsgbisrKQotCQlkYmdfaGlkX2xpbmUoIiAlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpIHJkZXNjW25dKTsKLQlkYmdfaGlkX2xpbmUoIlxuIik7Ci0KIAlyZXQgPSBoaWRfcGFyc2VfcmVwb3J0KGhpZCwgcmRlc2MsIHJzaXplKTsKIAlrZnJlZShyZGVzYyk7CiAJaWYgKHJldCkgewpAQCAtOTg2LDcgKzk4Miw2IEBACiAJc2V0dXBfdGltZXIoJnVzYmhpZC0+aW9fcmV0cnksIGhpZF9yZXRyeV90aW1lb3V0LCAodW5zaWduZWQgbG9uZykgaGlkKTsKIAogCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPmxvY2spOwotCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPmxvY2spOwogCiAJdXNiaGlkLT5pbnRmID0gaW50ZjsKIAl1c2JoaWQtPmlmbnVtID0gaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CkBAIC0xMDA0LDcgKzk5OSw2IEBACiAJdXNiaGlkLT51cmJjdHJsLT50cmFuc2Zlcl9mbGFncyB8PSAoVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgfCBVUkJfTk9fU0VUVVBfRE1BX01BUCk7CiAKIAl1c2JoaWRfaW5pdF9yZXBvcnRzKGhpZCk7Ci0JaGlkX2R1bXBfZGV2aWNlKGhpZCk7CiAKIAlzZXRfYml0KEhJRF9TVEFSVEVELCAmdXNiaGlkLT5pb2ZsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKaW5kZXggZDhmNzQyMy4uMGQ5MDQ1YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJdTMyIHF1aXJrczsKIAlpbnQgbiA9IDAsIG07CiAKLQlmb3IgKDsgcXVpcmtzX3BhcmFtW25dICYmIG4gPCBNQVhfVVNCSElEX0JPT1RfUVVJUktTOyBuKyspIHsKKwlmb3IgKDsgbiA8IE1BWF9VU0JISURfQk9PVF9RVUlSS1MgJiYgcXVpcmtzX3BhcmFtW25dOyBuKyspIHsKIAogCQltID0gc3NjYW5mKHF1aXJrc19wYXJhbVtuXSwgIjB4JWh4OjB4JWh4OjB4JXgiLAogCQkJCSZpZFZlbmRvciwgJmlkUHJvZHVjdCwgJnF1aXJrcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKaW5kZXggMjE1YjJhZC4uNGQxZGMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYwpAQCAtNDQsNyArNDQsNyBAQAogI2RlZmluZSBISURERVZfTUlOT1JfQkFTRQk5NgogI2RlZmluZSBISURERVZfTUlOT1JTCQkxNgogI2VuZGlmCi0jZGVmaW5lIEhJRERFVl9CVUZGRVJfU0laRQk2NAorI2RlZmluZSBISURERVZfQlVGRkVSX1NJWkUJMjA0OAogCiBzdHJ1Y3QgaGlkZGV2IHsKIAlpbnQgZXhpc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggMmQ1MDE2Ni4uMmUyNWI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNzAyLDYgKzcwMiwyMyBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc2h0MTUuCiAKK2NvbmZpZyBTRU5TT1JTX1MzQworCXRyaXN0YXRlICJTM0MyNFhYL1MzQzY0WFggSW5idWlsdCBBREMiCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TM0M2NFhYCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBvbi1ib2FyZCBBRENzIG9mCisJICB0aGUgU2Ftc3VuZyBTM0MyNFhYIG9yIFMzQzY0WFggc2VyaWVzIG9mIFNvQworCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHMzYy1od21vLgorCitjb25maWcgU0VOU09SU19TM0NfUkFXCisJYm9vbCAiSW5jbHVkZSByYXcgY2hhbm5lbCBhdHRyaWJ1dGVzIGluIHN5c2ZzIgorCWRlcGVuZHMgb24gU0VOU09SU19TM0MKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgcmF3IGNvcGllcyBvZiBhbGwgdGhlIEFEQworCSAgY2hhbm5lbHMgaW4gc3lzZnMuCisKIGNvbmZpZyBTRU5TT1JTX1NJUzU1OTUKIAl0cmlzdGF0ZSAiU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgQ29ycC4gU2lTNTU5NSIKIAlkZXBlbmRzIG9uIFBDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9NYWtlZmlsZSBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKaW5kZXggYjc5M2RjZS4uN2YyMzlhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCkBAIC03Niw2ICs3Niw3IEBACiBvYmotJChDT05GSUdfU0VOU09SU19QQzg3MzYwKQkrPSBwYzg3MzYwLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1BDODc0MjcpCSs9IHBjODc0Mjcubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfUENGODU5MSkJKz0gcGNmODU5MS5vCitvYmotJChDT05GSUdfU0VOU09SU19TM0MpCSs9IHMzYy1od21vbi5vCiBvYmotJChDT05GSUdfU0VOU09SU19TSFQxNSkJKz0gc2h0MTUubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfU0lTNTU5NSkJKz0gc2lzNTU5NS5vCiBvYmotJChDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3KSs9IHNtc2M0N2IzOTcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9zM2MtaHdtb24uYyBiL2RyaXZlcnMvaHdtb24vczNjLWh3bW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E1MjRmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vczNjLWh3bW9uLmMKQEAgLTAsMCArMSw0MDUgQEAKKy8qIGxpbnV4L2RyaXZlcnMvaHdtb24vczNjLWh3bW9uLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMDkgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0WFgvUzNDNjRYWCBBREMgaHdtb24gc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKworI2luY2x1ZGUgPHBsYXQvYWRjLmg+CisjaW5jbHVkZSA8cGxhdC9od21vbi5oPgorCitzdHJ1Y3QgczNjX2h3bW9uX2F0dHIgeworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZQlpbjsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUJbGFiZWw7CisJY2hhcgkJCQlpbl9uYW1lWzEyXTsKKwljaGFyCQkJCWxhYmVsX25hbWVbMTJdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2h3bW9uIC0gQURDIGh3bW9uIGNsaWVudCBpbmZvcm1hdGlvbgorICogQGxvY2s6IEFjY2VzcyBsb2NrIHRvIHNlcmlhbGlzZSB0aGUgY29udmVyc2lvbnMuCisgKiBAY2xpZW50OiBUaGUgY2xpZW50IHdlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgUzNDIEFEQyBjb3JlLgorICogQGh3bW9uX2RldjogVGhlIGh3bW9uIGRldmljZSB3ZSBjcmVhdGVkLgorICogQGF0dHI6IFRoZSBob2xkZXJzIGZvciB0aGUgY2hhbm5lbCBhdHRyaWJ1dGVzLgorKi8KK3N0cnVjdCBzM2NfaHdtb24geworCXN0cnVjdCBzZW1hcGhvcmUJbG9jazsKKwlzdHJ1Y3QgczNjX2FkY19jbGllbnQJKmNsaWVudDsKKwlzdHJ1Y3QgZGV2aWNlCQkqaHdtb25fZGV2OworCisJc3RydWN0IHMzY19od21vbl9hdHRyCWF0dHJzWzhdOworfTsKKworLyoqCisgKiBzM2NfaHdtb25fcmVhZF9jaCAtIHJlYWQgYSB2YWx1ZSBmcm9tIGEgZ2l2ZW4gYWRjIGNoYW5uZWwuCisgKiBAZGV2OiBUaGUgZGV2aWNlLgorICogQGh3bW9uOiBPdXIgc3RhdGUuCisgKiBAY2hhbm5lbDogVGhlIGNoYW5uZWwgd2UncmUgcmVhZGluZyBmcm9tLgorICoKKyAqIFJlYWQgYSB2YWx1ZSBmcm9tIHRoZSBAY2hhbm5lbCB3aXRoIHRoZSBwcm9wZXIgbG9ja2luZyBhbmQgc2xlZXAgdW50aWwKKyAqIGVpdGhlciB0aGUgcmVhZCBjb21wbGV0ZXMgb3Igd2UgdGltZW91dCBhd2FpdGluZyB0aGUgQURDIGNvcmUgdG8gZ2V0CisgKiBiYWNrIHRvIHVzLgorICovCitzdGF0aWMgaW50IHMzY19od21vbl9yZWFkX2NoKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IHMzY19od21vbiAqaHdtb24sIGludCBjaGFubmVsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkb3duX2ludGVycnVwdGlibGUoJmh3bW9uLT5sb2NrKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRldl9kYmcoZGV2LCAicmVhZGluZyBjaGFubmVsICVkXG4iLCBjaGFubmVsKTsKKworCXJldCA9IHMzY19hZGNfcmVhZChod21vbi0+Y2xpZW50LCBjaGFubmVsKTsKKwl1cCgmaHdtb24tPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19TRU5TT1JTX1MzQ19SQVcKKy8qKgorICogczNjX2h3bW9uX3Nob3dfcmF3IC0gc2hvdyBhIGNvbnZlcnNpb24gZnJvbSB0aGUgcmF3IGNoYW5uZWwgbnVtYmVyLgorICogQGRldjogVGhlIGRldmljZSB0aGF0IHRoZSBhdHRyaWJ1dGUgYmVsb25ncyB0by4KKyAqIEBhdHRyOiBUaGUgYXR0cmlidXRlIGJlaW5nIHJlYWQuCisgKiBAYnVmOiBUaGUgcmVzdWx0IGJ1ZmZlci4KKyAqCisgKiBUaGlzIHNob3cgZGVhbHMgd2l0aCB0aGUgcmF3IGF0dHJpYnV0ZSwgcmVnaXN0ZXJlZCBmb3IgZWFjaCBwb3NzaWJsZQorICogQURDIGNoYW5uZWwuIFRoaXMgZG9lcyBhIGNvbnZlcnNpb24gYW5kIHJldHVybnMgdGhlIHJhdyAodW4tc2NhbGVkKQorICogdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHMzY19od21vbl9zaG93X3JhdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzM2NfaHdtb24gKmFkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNhID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCWludCByZXQ7CisKKwlyZXQgPSBzM2NfaHdtb25fcmVhZF9jaChkZXYsIGFkYywgc2EtPmluZGV4KTsKKworCXJldHVybiAgKHJldCA8IDApID8gcmV0IDogc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgcmV0KTsKK30KKworI2RlZmluZSBERUZfQURDX0FUVFIoeCkJXAorCXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoYWRjIyN4IyNfcmF3LCBTX0lSVUdPLCBzM2NfaHdtb25fc2hvd19yYXcsIE5VTEwsIHgpCisKK0RFRl9BRENfQVRUUigwKTsKK0RFRl9BRENfQVRUUigxKTsKK0RFRl9BRENfQVRUUigyKTsKK0RFRl9BRENfQVRUUigzKTsKK0RFRl9BRENfQVRUUig0KTsKK0RFRl9BRENfQVRUUig1KTsKK0RFRl9BRENfQVRUUig2KTsKK0RFRl9BRENfQVRUUig3KTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnMzY19od21vbl9hdHRyc1s5XSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX2FkYzBfcmF3LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9hZGMxX3Jhdy5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfYWRjMl9yYXcuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2FkYzNfcmF3LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9hZGM0X3Jhdy5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfYWRjNV9yYXcuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2FkYzZfcmF3LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9hZGM3X3Jhdy5kZXZfYXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzM2NfaHdtb25fYXR0cmdyb3VwID0geworCS5hdHRycwk9IHMzY19od21vbl9hdHRycywKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHMzY19od21vbl9hZGRfcmF3KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZzM2NfaHdtb25fYXR0cmdyb3VwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHMzY19od21vbl9yZW1vdmVfcmF3KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnMzY19od21vbl9hdHRyZ3JvdXApOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCBzM2NfaHdtb25fYWRkX3JhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfaHdtb25fcmVtb3ZlX3JhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgfQorCisjZW5kaWYgLyogQ09ORklHX1NFTlNPUlNfUzNDX1JBVyAqLworCisvKioKKyAqIHMzY19od21vbl9jaF9zaG93IC0gc2hvdyB2YWx1ZSBvZiBhIGdpdmVuIGNoYW5uZWwKKyAqIEBkZXY6IFRoZSBkZXZpY2UgdGhhdCB0aGUgYXR0cmlidXRlIGJlbG9uZ3MgdG8uCisgKiBAYXR0cjogVGhlIGF0dHJpYnV0ZSBiZWluZyByZWFkLgorICogQGJ1ZjogVGhlIHJlc3VsdCBidWZmZXIuCisgKgorICogUmVhZCBhIHZhbHVlIGZyb20gdGhlIEFEQyBhbmQgc2NhbGUgaXQgYmVmb3JlIHJldHVybmluZyBpdCB0byB0aGUKKyAqIGNhbGxlci4gVGhlIHNjYWxlIGZhY3RvciBpcyBnYWluZWQgZnJvbSB0aGUgY2hhbm5lbCBjb25maWd1cmF0aW9uCisgKiBwYXNzZWQgdmlhIHRoZSBwbGF0Zm9ybSBkYXRhIHdoZW4gdGhlIGRldmljZSB3YXMgcmVnaXN0ZXJlZC4KKyAqLworc3RhdGljIHNzaXplX3QgczNjX2h3bW9uX2NoX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2VuX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IHMzY19od21vbiAqaHdtb24gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisJc3RydWN0IHMzY19od21vbl9wZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHMzY19od21vbl9jaGNmZyAqY2ZnOworCWludCByZXQ7CisKKwljZmcgPSBwZGF0YS0+aW5bc2VuX2F0dHItPmluZGV4XTsKKworCXJldCA9IHMzY19od21vbl9yZWFkX2NoKGRldiwgaHdtb24sIHNlbl9hdHRyLT5pbmRleCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgKj0gY2ZnLT5tdWx0OworCXJldCA9IERJVl9ST1VORF9DTE9TRVNUKHJldCwgY2ZnLT5kaXYpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHJldCk7Cit9CisKKy8qKgorICogczNjX2h3bW9uX2xhYmVsX3Nob3cgLSBzaG93IGxhYmVsIG5hbWUgb2YgdGhlIGdpdmVuIGNoYW5uZWwuCisgKiBAZGV2OiBUaGUgZGV2aWNlIHRoYXQgdGhlIGF0dHJpYnV0ZSBiZWxvbmdzIHRvLgorICogQGF0dHI6IFRoZSBhdHRyaWJ1dGUgYmVpbmcgcmVhZC4KKyAqIEBidWY6IFRoZSByZXN1bHQgYnVmZmVyLgorICoKKyAqIFJldHVybiB0aGUgbGFiZWwgbmFtZSBvZiBhIGdpdmVuIGNoYW5uZWwKKyAqLworc3RhdGljIHNzaXplX3QgczNjX2h3bW9uX2xhYmVsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2VuX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IHMzY19od21vbl9wZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHMzY19od21vbl9jaGNmZyAqY2ZnOworCisJY2ZnID0gcGRhdGEtPmluW3Nlbl9hdHRyLT5pbmRleF07CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgY2ZnLT5uYW1lKTsKK30KKworLyoqCisgKiBzM2NfaHdtb25fY3JlYXRlX2F0dHIgLSBjcmVhdGUgaHdtb24gYXR0cmlidXRlIGZvciBnaXZlbiBjaGFubmVsLgorICogQGRldjogVGhlIGRldmljZSB0byBjcmVhdGUgdGhlIGF0dHJpYnV0ZSBvbi4KKyAqIEBjZmc6IFRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gcGFzc2VkIGZyb20gdGhlIHBsYXRmb3JtIGRhdGEuCisgKiBAY2hhbm5lbDogVGhlIEFEQyBjaGFubmVsIG51bWJlciB0byBwcm9jZXNzLgorICoKKyAqIENyZWF0ZSB0aGUgc2NhbGVkIGF0dHJpYnV0ZSBmb3IgdXNlIHdpdGggaHdtb24gZnJvbSB0aGUgc3BlY2lmaWVkCisgKiBwbGF0Zm9ybSBkYXRhIGluIEBwZGF0YS4gVGhlIHN5c2ZzIGVudHJ5IGlzIGhhbmRsZWQgYnkgdGhlIHJvdXRpbmUKKyAqIHMzY19od21vbl9jaF9zaG93KCkuCisgKgorICogVGhlIGF0dHJpYnV0ZSBuYW1lIGlzIHRha2VuIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBpZiBwcmVzZW50CisgKiBvdGhlcndpc2UgdGhlIG5hbWUgaXMgdGFrZW4gYnkgY29uY2F0ZW5hdGluZyBpbl8gd2l0aCB0aGUgY2hhbm5lbAorICogbnVtYmVyLgorICovCitzdGF0aWMgaW50IHMzY19od21vbl9jcmVhdGVfYXR0cihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBzM2NfaHdtb25fY2hjZmcgKmNmZywKKwkJCQkgc3RydWN0IHMzY19od21vbl9hdHRyICphdHRycywKKwkJCQkgaW50IGNoYW5uZWwpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyOworCWludCByZXQ7CisKKwlzbnByaW50ZihhdHRycy0+aW5fbmFtZSwgc2l6ZW9mKGF0dHJzLT5pbl9uYW1lKSwgImluJWRfaW5wdXQiLCBjaGFubmVsKTsKKworCWF0dHIgPSAmYXR0cnMtPmluOworCWF0dHItPmluZGV4ID0gY2hhbm5lbDsKKwlhdHRyLT5kZXZfYXR0ci5hdHRyLm5hbWUgID0gYXR0cnMtPmluX25hbWU7CisJYXR0ci0+ZGV2X2F0dHIuYXR0ci5tb2RlICA9IFNfSVJVR087CisJYXR0ci0+ZGV2X2F0dHIuYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOworCWF0dHItPmRldl9hdHRyLnNob3cgPSBzM2NfaHdtb25fY2hfc2hvdzsKKworCXJldCA9ICBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmYXR0ci0+ZGV2X2F0dHIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBpbnB1dCBhdHRyaWJ1dGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGlmIHRoaXMgaGFzIGEgbmFtZSwgYWRkIGEgbGFiZWwgKi8KKwlpZiAoY2ZnLT5uYW1lKSB7CisJCXNucHJpbnRmKGF0dHJzLT5sYWJlbF9uYW1lLCBzaXplb2YoYXR0cnMtPmxhYmVsX25hbWUpLAorCQkJICJpbiVkX2xhYmVsIiwgY2hhbm5lbCk7CisKKwkJYXR0ciA9ICZhdHRycy0+bGFiZWw7CisJCWF0dHItPmluZGV4ID0gY2hhbm5lbDsKKwkJYXR0ci0+ZGV2X2F0dHIuYXR0ci5uYW1lICA9IGF0dHJzLT5sYWJlbF9uYW1lOworCQlhdHRyLT5kZXZfYXR0ci5hdHRyLm1vZGUgID0gU19JUlVHTzsKKwkJYXR0ci0+ZGV2X2F0dHIuYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOworCQlhdHRyLT5kZXZfYXR0ci5zaG93ID0gczNjX2h3bW9uX2xhYmVsX3Nob3c7CisKKwkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmF0dHItPmRldl9hdHRyKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZhdHRycy0+aW4uZGV2X2F0dHIpOworCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGxhYmVsIGF0dHJpYnV0ZVxuIik7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzM2NfaHdtb25fcmVtb3ZlX2F0dHIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IHMzY19od21vbl9hdHRyICphdHRycykKK3sKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmYXR0cnMtPmluLmRldl9hdHRyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmYXR0cnMtPmxhYmVsLmRldl9hdHRyKTsKK30KKworLyoqCisgKiBzM2NfaHdtb25fcHJvYmUgLSBkZXZpY2UgcHJvYmUgZW50cnkuCisgKiBAZGV2OiBUaGUgZGV2aWNlIGJlaW5nIHByb2JlZC4KKyovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NfaHdtb25fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzM2NfaHdtb25fcGRhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgczNjX2h3bW9uICpod21vbjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaHdtb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjX2h3bW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGh3bW9uID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJubyBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGh3bW9uKTsKKworCWluaXRfTVVURVgoJmh3bW9uLT5sb2NrKTsKKworCS8qIFJlZ2lzdGVyIHdpdGggdGhlIGNvcmUgQURDIGRyaXZlci4gKi8KKworCWh3bW9uLT5jbGllbnQgPSBzM2NfYWRjX3JlZ2lzdGVyKGRldiwgTlVMTCwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihod21vbi0+Y2xpZW50KSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbm5vdCByZWdpc3RlciBhZGNcbiIpOworCQlyZXQgPSBQVFJfRVJSKGh3bW9uLT5jbGllbnQpOworCQlnb3RvIGVycl9tZW07CisJfQorCisJLyogYWRkIGF0dHJpYnV0ZXMgZm9yIG91ciBhZGMgZGV2aWNlcy4gKi8KKworCXJldCA9IHMzY19od21vbl9hZGRfcmF3KCZkZXYtPmRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVnaXN0ZXJlZDsKKworCS8qIHJlZ2lzdGVyIHdpdGggdGhlIGh3bW9uIGNvcmUgKi8KKworCWh3bW9uLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKGh3bW9uLT5od21vbl9kZXYpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiZXJyb3IgcmVnaXN0ZXJpbmcgd2l0aCBod21vblxuIik7CisJCXJldCA9IFBUUl9FUlIoaHdtb24tPmh3bW9uX2Rldik7CisJCWdvdG8gZXJyX3Jhd19hdHRyaWJ1dGU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGRhdGEtPmluKTsgaSsrKSB7CisJCWlmICghcGRhdGEtPmluW2ldKQorCQkJY29udGludWU7CisKKwkJaWYgKHBkYXRhLT5pbltpXS0+bXVsdCA+PSAweDEwMDAwKQorCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJCSAiY2hhbm5lbCAlZCBtdWx0aXBsaWVyIHRvbyBsYXJnZVxuIiwKKwkJCQkgaSk7CisKKwkJcmV0ID0gczNjX2h3bW9uX2NyZWF0ZV9hdHRyKCZkZXYtPmRldiwgcGRhdGEtPmluW2ldLAorCQkJCQkgICAgJmh3bW9uLT5hdHRyc1tpXSwgaSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCQkiZXJyb3IgY3JlYXRpbmcgY2hhbm5lbCAlZFxuIiwgaSk7CisKKwkJCWZvciAoaS0tOyBpID49IDA7IGktLSkKKwkJCQlzM2NfaHdtb25fcmVtb3ZlX2F0dHIoJmRldi0+ZGV2LAorCQkJCQkJCSAgICAgICZod21vbi0+YXR0cnNbaV0pOworCisJCQlnb3RvIGVycl9od21vbl9yZWdpc3RlcjsKKwkJfQorCX0KKworCXJldHVybiAwOworCisgZXJyX2h3bW9uX3JlZ2lzdGVyOgorCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGh3bW9uLT5od21vbl9kZXYpOworCisgZXJyX3Jhd19hdHRyaWJ1dGU6CisJczNjX2h3bW9uX3JlbW92ZV9yYXcoJmRldi0+ZGV2KTsKKworIGVycl9yZWdpc3RlcmVkOgorCXMzY19hZGNfcmVsZWFzZShod21vbi0+Y2xpZW50KTsKKworIGVycl9tZW06CisJa2ZyZWUoaHdtb24pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHMzY19od21vbl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzM2NfaHdtb24gKmh3bW9uID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgaTsKKworCXMzY19od21vbl9yZW1vdmVfcmF3KCZkZXYtPmRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShod21vbi0+YXR0cnMpOyBpKyspCisJCXMzY19od21vbl9yZW1vdmVfYXR0cigmZGV2LT5kZXYsICZod21vbi0+YXR0cnNbaV0pOworCisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoaHdtb24tPmh3bW9uX2Rldik7CisJczNjX2FkY19yZWxlYXNlKGh3bW9uLT5jbGllbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY19od21vbl9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJCT0gInMzYy1od21vbiIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBzM2NfaHdtb25fcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzM2NfaHdtb25fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzY19od21vbl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjX2h3bW9uX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzM2NfaHdtb25fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NfaHdtb25fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoczNjX2h3bW9uX2luaXQpOworbW9kdWxlX2V4aXQoczNjX2h3bW9uX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlMzQyBBREMgSFdNb24gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnMzYy1od21vbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKaW5kZXggNzYyZTFlNS4uMDQ5NTU1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCkBAIC0xMTM0LDM1ICsxMTM0LDQ0IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgaTJjX3B4YV9zdXNwZW5kX2xhdGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGkyY19weGFfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YV9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBweGFfaTJjICppMmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwogCWNsa19kaXNhYmxlKGkyYy0+Y2xrKTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGkyY19weGFfcmVzdW1lX2Vhcmx5KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaTJjX3B4YV9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBweGFfaTJjICppMmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcHhhX2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAljbGtfZW5hYmxlKGkyYy0+Y2xrKTsKIAlpMmNfcHhhX3Jlc2V0KGkyYyk7CiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGkyY19weGFfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZF9ub2lycSA9IGkyY19weGFfc3VzcGVuZF9ub2lycSwKKwkucmVzdW1lX25vaXJxID0gaTJjX3B4YV9yZXN1bWVfbm9pcnEsCit9OworCisjZGVmaW5lIEkyQ19QWEFfREVWX1BNX09QUyAoJmkyY19weGFfZGV2X3BtX29wcykKICNlbHNlCi0jZGVmaW5lIGkyY19weGFfc3VzcGVuZF9sYXRlIE5VTEwKLSNkZWZpbmUgaTJjX3B4YV9yZXN1bWVfZWFybHkgTlVMTAorI2RlZmluZSBJMkNfUFhBX0RFVl9QTV9PUFMgTlVMTAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGkyY19weGFfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpMmNfcHhhX3Byb2JlLAogCS5yZW1vdmUJCT0gX19leGl0X3AoaTJjX3B4YV9yZW1vdmUpLAotCS5zdXNwZW5kX2xhdGUJPSBpMmNfcHhhX3N1c3BlbmRfbGF0ZSwKLQkucmVzdW1lX2Vhcmx5CT0gaTJjX3B4YV9yZXN1bWVfZWFybHksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInB4YTJ4eC1pMmMiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gSTJDX1BYQV9ERVZfUE1fT1BTLAogCX0sCiAJLmlkX3RhYmxlCT0gaTJjX3B4YV9pZF90YWJsZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCmluZGV4IDIwYmIwY2UuLjk2YWFmYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCkBAIC05NDYsMTcgKzk0NiwyMCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHMzYzI0eHhfaTJjX3N1c3BlbmRfbGF0ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCi0JCQkJICAgIHBtX21lc3NhZ2VfdCBtc2cpCitzdGF0aWMgaW50IHMzYzI0eHhfaTJjX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBzM2MyNHh4X2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHMzYzI0eHhfaTJjICppMmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwogCWkyYy0+c3VzcGVuZGVkID0gMTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzI0eHhfaTJjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0eHhfaTJjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHMzYzI0eHhfaTJjICppMmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJaTJjLT5zdXNwZW5kZWQgPSAwOwogCXMzYzI0eHhfaTJjX2luaXQoaTJjKTsKQEAgLTk2NCw5ICs5NjcsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHMzYzI0eHhfaTJjX2Rldl9wbV9vcHMgPSB7CisJLnN1c3BlbmRfbm9pcnEgPSBzM2MyNHh4X2kyY19zdXNwZW5kX25vaXJxLAorCS5yZXN1bWUgPSBzM2MyNHh4X2kyY19yZXN1bWUsCit9OworCisjZGVmaW5lIFMzQzI0WFhfREVWX1BNX09QUyAoJnMzYzI0eHhfaTJjX2Rldl9wbV9vcHMpCiAjZWxzZQotI2RlZmluZSBzM2MyNHh4X2kyY19zdXNwZW5kX2xhdGUgTlVMTAotI2RlZmluZSBzM2MyNHh4X2kyY19yZXN1bWUgTlVMTAorI2RlZmluZSBTM0MyNFhYX0RFVl9QTV9PUFMgTlVMTAogI2VuZGlmCiAKIC8qIGRldmljZSBkcml2ZXIgZm9yIHBsYXRmb3JtIGJ1cyBiaXRzICovCkBAIC05ODUsMTIgKzk5MywxMSBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjR4eF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzM2MyNHh4X2kyY19wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0eHhfaTJjX3JlbW92ZSwKLQkuc3VzcGVuZF9sYXRlCT0gczNjMjR4eF9pMmNfc3VzcGVuZF9sYXRlLAotCS5yZXN1bWUJCT0gczNjMjR4eF9pMmNfcmVzdW1lLAogCS5pZF90YWJsZQk9IHMzYzI0eHhfZHJpdmVyX2lkcywKIAkuZHJpdmVyCQk9IHsKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gInMzYy1pMmMiLAorCQkucG0JPSBTM0MyNFhYX0RFVl9QTV9PUFMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F0OTFfaWRlLmMgYi9kcml2ZXJzL2lkZS9hdDkxX2lkZS5jCmluZGV4IGRiZmVkYTQuLjI0ODIxOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F0OTFfaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXQ5MV9pZGUuYwpAQCAtMjksOSArMjksNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjMuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgotI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjNfbWF0cml4Lmg+CiAKICNkZWZpbmUgRFJWX05BTUUgImF0OTFfaWRlIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdGlpeHAuYyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCmluZGV4IDkyM2NiZmUuLjYzOTZjM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCkBAIC0xNzcsNiArMTc3LDcgQEAKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX0lERSksIDAgfSwKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERSksIDEgfSwKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX0lERSksIDAgfSwKKwl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfSURFKSwgMCB9LAogCXsgMCwgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRpaXhwX3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwppbmRleCA2YTlhNzY5Li5iNzljYTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMTE0Niw4ICsxMTQ3LDggQEAKIAlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJjdXJzcGVlZDogJXUsIG1heHNwZWVkOiAldSIsCiAJCQkJICAgICBjdXJzcGVlZCwgbWF4c3BlZWQpOwogCi0JY2QtPmN1cnJlbnRfc3BlZWQgPSAoY3Vyc3BlZWQgKyAoMTc2LzIpKSAvIDE3NjsKLQljZC0+bWF4X3NwZWVkID0gKG1heHNwZWVkICsgKDE3Ni8yKSkgLyAxNzY7CisJY2QtPmN1cnJlbnRfc3BlZWQgPSBESVZfUk9VTkRfQ0xPU0VTVChjdXJzcGVlZCwgMTc2KTsKKwljZC0+bWF4X3NwZWVkID0gRElWX1JPVU5EX0NMT1NFU1QobWF4c3BlZWQsIDE3Nik7CiB9CiAKICNkZWZpbmUgSURFX0NEX0NBUEFCSUxJVElFUyBcCkBAIC0xMzg5LDE5ICsxMzkwLDMwIEBACiAJcmV0dXJuIGNhcGFjaXR5ICogc2VjdG9yc19wZXJfZnJhbWU7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19pZGVjZF9yZWFkX2NhcGFjaXR5KGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBpZGVjZF9jYXBhY2l0eV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGRhdGE7Ci0JaW50IGxlbjsKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSBtLT5wcml2YXRlOwogCi0JbGVuID0gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgKGxvbmcgbG9uZylpZGVfY2Ryb21fY2FwYWNpdHkoZHJpdmUpKTsKLQlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworCXNlcV9wcmludGYobSwgIiVsbHVcbiIsIChsb25nIGxvbmcpaWRlX2Nkcm9tX2NhcGFjaXR5KGRyaXZlKSk7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaWRlY2RfY2FwYWNpdHlfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpZGVjZF9jYXBhY2l0eV9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGVjZF9jYXBhY2l0eV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGlkZWNkX2NhcGFjaXR5X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgaWRlY2RfcHJvY1tdID0gewotCXsgImNhcGFjaXR5IiwgU19JRlJFR3xTX0lSVUdPLCBwcm9jX2lkZWNkX3JlYWRfY2FwYWNpdHksIE5VTEwgfSwKLQl7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfQorCXsgImNhcGFjaXR5IiwgU19JRlJFR3xTX0lSVUdPLCAmaWRlY2RfY2FwYWNpdHlfcHJvY19mb3BzIH0sCisJe30KIH07CiAKIHN0YXRpYyBpZGVfcHJvY19lbnRyeV90ICppZGVfY2RfcHJvY19lbnRyaWVzKGlkZV9kcml2ZV90ICpkcml2ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYwppbmRleCAxOWYyNjNiLi42MGIwNTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKICNpbmNsdWRlICJpZGUtZGlzay5oIgogCkBAIC0zNyw3NyArMzgsMTE3IEBACiAJcmV0dXJuIGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsICZjbWQsIGJ1ZiwgMSk7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19pZGVkaXNrX3JlYWRfY2FjaGUKLQkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGlkZWRpc2tfY2FjaGVfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpZGVfZHJpdmVfdAkqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKikgZGF0YTsKLQljaGFyCQkqb3V0ID0gcGFnZTsKLQlpbnQJCWxlbjsKKwlpZGVfZHJpdmVfdAkqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKikgbS0+cHJpdmF0ZTsKIAogCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0lEX1JFQUQpCi0JCWxlbiA9IHNwcmludGYob3V0LCAiJWlcbiIsIGRyaXZlLT5pZFtBVEFfSURfQlVGX1NJWkVdIC8gMik7CisJCXNlcV9wcmludGYobSwgIiVpXG4iLCBkcml2ZS0+aWRbQVRBX0lEX0JVRl9TSVpFXSAvIDIpOwogCWVsc2UKLQkJbGVuID0gc3ByaW50ZihvdXQsICIobm9uZSlcbiIpOwotCi0JUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKKwkJc2VxX3ByaW50ZihtLCAiKG5vbmUpXG4iKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jX2lkZWRpc2tfcmVhZF9jYXBhY2l0eQotCShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaWRlZGlza19jYWNoZV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaWRlX2RyaXZlX3QqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKilkYXRhOwotCWludCBsZW47Ci0KLQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLCAobG9uZyBsb25nKWlkZV9nZF9jYXBhY2l0eShkcml2ZSkpOwotCi0JUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaWRlZGlza19jYWNoZV9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOwogfQogCi1zdGF0aWMgaW50IHByb2NfaWRlZGlza19yZWFkX3NtYXJ0KGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJCSAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEsIHU4IHN1Yl9jbWQpCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGVkaXNrX2NhY2hlX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaWRlZGlza19jYWNoZV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgaWRlZGlza19jYXBhY2l0eV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWlkZV9kcml2ZV90CSpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKWRhdGE7Ci0JaW50CQlsZW4gPSAwLCBpID0gMDsKKwlpZGVfZHJpdmVfdCpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKW0tPnByaXZhdGU7CisKKwlzZXFfcHJpbnRmKG0sICIlbGx1XG4iLCAobG9uZyBsb25nKWlkZV9nZF9jYXBhY2l0eShkcml2ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkZWRpc2tfY2FwYWNpdHlfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpZGVkaXNrX2NhcGFjaXR5X3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlkZWRpc2tfY2FwYWNpdHlfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBpZGVkaXNrX2NhcGFjaXR5X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2lkZWRpc2tfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzdWJfY21kKQoreworCXU4ICpidWY7CisKKwlidWYgPSBrbWFsbG9jKFNFQ1RPUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAkodm9pZClzbWFydF9lbmFibGUoZHJpdmUpOwogCi0JaWYgKGdldF9zbWFydF9kYXRhKGRyaXZlLCBwYWdlLCBzdWJfY21kKSA9PSAwKSB7Ci0JCXVuc2lnbmVkIHNob3J0ICp2YWwgPSAodW5zaWduZWQgc2hvcnQgKikgcGFnZTsKLQkJY2hhciAqb3V0ID0gKGNoYXIgKil2YWwgKyBTRUNUT1JfU0laRTsKKwlpZiAoZ2V0X3NtYXJ0X2RhdGEoZHJpdmUsIGJ1Ziwgc3ViX2NtZCkgPT0gMCkgeworCQlfX2xlMTYgKnZhbCA9IChfX2xlMTYgKilidWY7CisJCWludCBpOwogCi0JCXBhZ2UgPSBvdXQ7Ci0JCWRvIHsKLQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiUwNHglYyIsIGxlMTZfdG9fY3B1KCp2YWwpLAotCQkJCSAgICAgICAoKytpICYgNykgPyAnICcgOiAnXG4nKTsKLQkJCXZhbCArPSAxOwotCQl9IHdoaWxlIChpIDwgU0VDVE9SX1NJWkUgLyAyKTsKLQkJbGVuID0gb3V0IC0gcGFnZTsKKwkJZm9yIChpID0gMDsgaSA8IFNFQ1RPUl9TSVpFIC8gMjsgaSsrKSB7CisJCQlzZXFfcHJpbnRmKG0sICIlMDR4JWMiLCBsZTE2X3RvX2NwdSh2YWxbaV0pLAorCQkJCQkoaSAlIDgpID09IDcgPyAnXG4nIDogJyAnKTsKKwkJfQogCX0KLQotCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jX2lkZWRpc2tfcmVhZF9zdgotCShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaWRlZGlza19zdl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXJldHVybiBwcm9jX2lkZWRpc2tfcmVhZF9zbWFydChwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBkYXRhLAotCQkJCSAgICAgICBBVEFfU01BUlRfUkVBRF9WQUxVRVMpOworCXJldHVybiBfX2lkZWRpc2tfcHJvY19zaG93KG0sIG0tPnByaXZhdGUsIEFUQV9TTUFSVF9SRUFEX1ZBTFVFUyk7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19pZGVkaXNrX3JlYWRfc3QKLQkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGlkZWRpc2tfc3ZfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBwcm9jX2lkZWRpc2tfcmVhZF9zbWFydChwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBkYXRhLAotCQkJCSAgICAgICBBVEFfU01BUlRfUkVBRF9USFJFU0hPTERTKTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaWRlZGlza19zdl9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGVkaXNrX3N2X3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaWRlZGlza19zdl9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgaWRlZGlza19zdF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXJldHVybiBfX2lkZWRpc2tfcHJvY19zaG93KG0sIG0tPnByaXZhdGUsIEFUQV9TTUFSVF9SRUFEX1RIUkVTSE9MRFMpOworfQorCitzdGF0aWMgaW50IGlkZWRpc2tfc3RfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpZGVkaXNrX3N0X3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlkZWRpc2tfc3RfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBpZGVkaXNrX3N0X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogaWRlX3Byb2NfZW50cnlfdCBpZGVfZGlza19wcm9jW10gPSB7Ci0JeyAiY2FjaGUiLAkgIFNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVkaXNrX3JlYWRfY2FjaGUsICAgIE5VTEwgfSwKLQl7ICJjYXBhY2l0eSIsCSAgU19JRlJFR3xTX0lSVUdPLCBwcm9jX2lkZWRpc2tfcmVhZF9jYXBhY2l0eSwgTlVMTCB9LAotCXsgImdlb21ldHJ5IiwJICBTX0lGUkVHfFNfSVJVR08sIHByb2NfaWRlX3JlYWRfZ2VvbWV0cnksICAgICBOVUxMIH0sCi0JeyAic21hcnRfdmFsdWVzIiwgU19JRlJFR3xTX0lSVVNSLCBwcm9jX2lkZWRpc2tfcmVhZF9zdiwgICAgICAgTlVMTCB9LAotCXsgInNtYXJ0X3RocmVzaG9sZHMiLCBTX0lGUkVHfFNfSVJVU1IsIHByb2NfaWRlZGlza19yZWFkX3N0LCAgIE5VTEwgfSwKLQl7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfQorCXsgImNhY2hlIiwJICBTX0lGUkVHfFNfSVJVR08sICZpZGVkaXNrX2NhY2hlX3Byb2NfZm9wcwl9LAorCXsgImNhcGFjaXR5IiwJICBTX0lGUkVHfFNfSVJVR08sICZpZGVkaXNrX2NhcGFjaXR5X3Byb2NfZm9wcwl9LAorCXsgImdlb21ldHJ5IiwJICBTX0lGUkVHfFNfSVJVR08sICZpZGVfZ2VvbWV0cnlfcHJvY19mb3BzCX0sCisJeyAic21hcnRfdmFsdWVzIiwgU19JRlJFR3xTX0lSVVNSLCAmaWRlZGlza19zdl9wcm9jX2ZvcHMJfSwKKwl7ICJzbWFydF90aHJlc2hvbGRzIiwgU19JRlJFR3xTX0lSVVNSLCAmaWRlZGlza19zdF9wcm9jX2ZvcHMJfSwKKwl7fQogfTsKIAogaWRlX2RldnNldF9yd19maWVsZChiaW9zX2N5bCwgYmlvc19jeWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X3Byb2MuYwppbmRleCBmY2Q0ZDgxLi5kNzExZDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X3Byb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X3Byb2MuYwpAQCAtMSwyMiArMSwzNCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKICNpbmNsdWRlICJpZGUtZmxvcHB5LmgiCiAKLXN0YXRpYyBpbnQgcHJvY19pZGVmbG9wcHlfcmVhZF9jYXBhY2l0eShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaWRlZmxvcHB5X2NhcGFjaXR5X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaWRlX2RyaXZlX3QqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKilkYXRhOwotCWludCBsZW47CisJaWRlX2RyaXZlX3QqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKiltLT5wcml2YXRlOwogCi0JbGVuID0gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgKGxvbmcgbG9uZylpZGVfZ2RfY2FwYWNpdHkoZHJpdmUpKTsKLQlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworCXNlcV9wcmludGYobSwgIiVsbHVcbiIsIChsb25nIGxvbmcpaWRlX2dkX2NhcGFjaXR5KGRyaXZlKSk7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaWRlZmxvcHB5X2NhcGFjaXR5X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaWRlZmxvcHB5X2NhcGFjaXR5X3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlkZWZsb3BweV9jYXBhY2l0eV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGlkZWZsb3BweV9jYXBhY2l0eV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIGlkZV9wcm9jX2VudHJ5X3QgaWRlX2Zsb3BweV9wcm9jW10gPSB7Ci0JeyAiY2FwYWNpdHkiLAlTX0lGUkVHfFNfSVJVR08sIHByb2NfaWRlZmxvcHB5X3JlYWRfY2FwYWNpdHksCU5VTEwgfSwKLQl7ICJnZW9tZXRyeSIsCVNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVfcmVhZF9nZW9tZXRyeSwJTlVMTCB9LAotCXsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9CisJeyAiY2FwYWNpdHkiLAlTX0lGUkVHfFNfSVJVR08sICZpZGVmbG9wcHlfY2FwYWNpdHlfcHJvY19mb3BzCX0sCisJeyAiZ2VvbWV0cnkiLAlTX0lGUkVHfFNfSVJVR08sICZpZGVfZ2VvbWV0cnlfcHJvY19mb3BzCX0sCisJe30KIH07CiAKIGlkZV9kZXZzZXRfcndfZmllbGQoYmlvc19jeWwsIGJpb3NfY3lsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pb2N0bHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1pb2N0bHMuYwppbmRleCBlMjQ2ZDNkLi5kMzQ0MGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvY3Rscy5jCkBAIC0xNjcsNiArMTY3LDggQEAKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIGFib3J0OwogCQl9CisKKwkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19TRVRfWEZFUjsKIAl9CiAKIAllcnIgPSBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmY21kLCBidWYsIGFyZ3NbM10pOwpAQCAtMTc0LDEyICsxNzYsNiBAQAogCWFyZ3NbMF0gPSB0Zi0+c3RhdHVzOwogCWFyZ3NbMV0gPSB0Zi0+ZXJyb3I7CiAJYXJnc1syXSA9IHRmLT5uc2VjdDsKLQotCWlmICghZXJyICYmIHhmZXJfcmF0ZSkgewotCQkvKiBhY3RpdmUtcmV0dW5pbmctY2FsbHMgZnV0dXJlICovCi0JCWlkZV9zZXRfeGZlcl9yYXRlKGRyaXZlLCB4ZmVyX3JhdGUpOwotCQlpZGVfZHJpdmVpZF91cGRhdGUoZHJpdmUpOwotCX0KIGFib3J0OgogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmYXJncywgNCkpCiAJCWVyciA9IC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwppbmRleCAyODkyYjI0Li4yMjJjMWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKQEAgLTEwMiw4ICsxMDIsOCBAQAogICogc2V0dGluZyBhIHRpbWVyIHRvIHdha2UgdXAgYXQgaGFsZiBzZWNvbmQgaW50ZXJ2YWxzIHRoZXJlYWZ0ZXIsCiAgKiB1bnRpbCB0aW1lb3V0IGlzIGFjaGlldmVkLCBiZWZvcmUgdGltaW5nIG91dC4KICAqLwotc3RhdGljIGludCBfX2lkZV93YWl0X3N0YXQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBnb29kLCB1OCBiYWQsCi0JCQkgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIHU4ICpyc3RhdCkKK2ludCBfX2lkZV93YWl0X3N0YXQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBnb29kLCB1OCBiYWQsCisJCSAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIHU4ICpyc3RhdCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKQEAgLTI5Miw2ICsyOTIsNyBAQAogCSJRVUFOVFVNIEZJUkVCQUxMUCBLWDI3LjMiLAogCSJRVUFOVFVNIEZJUkVCQUxMUCBMTTIwLjQiLAogCSJRVUFOVFVNIEZJUkVCQUxMUCBMTTIwLjUiLAorCSJGVUpJVFNVIE1IWjIxNjBCSCBHMiIsCiAJTlVMTAogfTsKIApAQCAtMzE2LDcgKzMxNyw3IEBACiAJCXJldHVybiAwOwogCiAJU0VMRUNUX01BU0soZHJpdmUsIDEpOwotCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBBVEFfQ01EX0lEX0FUQSwgaWQpOworCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBBVEFfQ01EX0lEX0FUQSwgaWQsIDEpOwogCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKIAogCWlmIChyYykKQEAgLTM2MywxNCArMzY0LDYgQEAKIAkgKiB0aGlzIHBvaW50IChsb3N0IGludGVycnVwdCkuCiAJICovCiAKLQkvKgotCSAqCUZJWE1FOiB3ZSByYWNlIGFnYWluc3QgdGhlIHJ1bm5pbmcgSVJRIGhlcmUgaWYKLQkgKgl0aGlzIGlzIGNhbGxlZCBmcm9tIG5vbiBJUlEgY29udGV4dC4gSWYgd2UgdXNlCi0JICoJZGlzYWJsZV9pcnEoKSB3ZSBoYW5nIG9uIHRoZSBlcnJvciBwYXRoLiBXb3JrCi0JICoJaXMgbmVlZGVkLgotCSAqLwotCWRpc2FibGVfaXJxX25vc3luYyhod2lmLT5pcnEpOwotCiAJdWRlbGF5KDEpOwogCXRwX29wcy0+ZGV2X3NlbGVjdChkcml2ZSk7CiAJU0VMRUNUX01BU0soZHJpdmUsIDEpOwpAQCAtMzk0LDggKzM4Nyw2IEBACiAKIAlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7CiAKLQllbmFibGVfaXJxKGh3aWYtPmlycSk7Ci0KIAlpZiAoZXJyb3IpIHsKIAkJKHZvaWQpIGlkZV9kdW1wX3N0YXR1cyhkcml2ZSwgInNldF9kcml2ZV9zcGVlZF9zdGF0dXMiLCBzdGF0KTsKIAkJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCAxYmIxMDZmLi44ZGU0NDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtMjM4LDYgKzIzOCw3IEBACiAgKglAZHJpdmU6IGRyaXZlIHRvIGlkZW50aWZ5CiAgKglAY21kOiBjb21tYW5kIHRvIHVzZQogICoJQGlkOiBidWZmZXIgZm9yIElERU5USUZZIGRhdGEKKyAqCUBpcnFfY3R4OiBmbGFnIHNldCB3aGVuIGNhbGxlZCBmcm9tIHRoZSBJUlEgY29udGV4dAogICoKICAqCVNlbmRzIGFuIEFUQShQSSkgSURFTlRJRlkgcmVxdWVzdCB0byBhIGRyaXZlIGFuZCB3YWl0cyBmb3IgYSByZXNwb25zZS4KICAqCkBAIC0yNDYsNyArMjQ3LDcgQEAKICAqCQkJMiAgZGV2aWNlIGFib3J0ZWQgdGhlIGNvbW1hbmQgKHJlZnVzZWQgdG8gaWRlbnRpZnkgaXRzZWxmKQogICovCiAKLWludCBpZGVfZGV2X3JlYWRfaWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQsIHUxNiAqaWQpCitpbnQgaWRlX2Rldl9yZWFkX2lkKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kLCB1MTYgKmlkLCBpbnQgaXJxX2N0eCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CkBAIC0yNjMsNyArMjY0LDEwIEBACiAJCXRwX29wcy0+d3JpdGVfZGV2Y3RsKGh3aWYsIEFUQV9OSUVOIHwgQVRBX0RFVkNUTF9PQlMpOwogCiAJLyogdGFrZSBhIGRlZXAgYnJlYXRoICovCi0JbXNsZWVwKDUwKTsKKwlpZiAoaXJxX2N0eCkKKwkJbWRlbGF5KDUwKTsKKwllbHNlCisJCW1zbGVlcCg1MCk7CiAKIAlpZiAoaW9fcG9ydHMtPmN0bF9hZGRyICYmCiAJICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0JST0tFTl9BTFRTVEFUVVMpID09IDApIHsKQEAgLTI5NSwxMiArMjk5LDE5IEBACiAKIAl0aW1lb3V0ID0gKChjbWQgPT0gQVRBX0NNRF9JRF9BVEEpID8gV0FJVF9XT1JTVENBU0UgOiBXQUlUX1BJREVOVElGWSkgLyAyOwogCi0JaWYgKGlkZV9idXN5X3NsZWVwKGRyaXZlLCB0aW1lb3V0LCB1c2VfYWx0c3RhdHVzKSkKLQkJcmV0dXJuIDE7Ci0KIAkvKiB3YWl0IGZvciBJUlEgYW5kIEFUQV9EUlEgKi8KLQltc2xlZXAoNTApOwotCXMgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOworCWlmIChpcnFfY3R4KSB7CisJCXJjID0gX19pZGVfd2FpdF9zdGF0KGRyaXZlLCBBVEFfRFJRLCBCQURfUl9TVEFULCB0aW1lb3V0LCAmcyk7CisJCWlmIChyYykKKwkJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJjID0gaWRlX2J1c3lfc2xlZXAoZHJpdmUsIHRpbWVvdXQsIHVzZV9hbHRzdGF0dXMpOworCQlpZiAocmMpCisJCQlyZXR1cm4gMTsKKworCQltc2xlZXAoNTApOworCQlzID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKKwl9CiAKIAlpZiAoT0tfU1RBVChzLCBBVEFfRFJRLCBCQURfUl9TVEFUKSkgewogCQkvKiBkcml2ZSByZXR1cm5lZCBJRCAqLwpAQCAtNDA2LDEwICs0MTcsMTAgQEAKIAogCWlmIChPS19TVEFUKHN0YXQsIEFUQV9EUkRZLCBBVEFfQlVTWSkgfHwKIAkgICAgcHJlc2VudCB8fCBjbWQgPT0gQVRBX0NNRF9JRF9BVEFQSSkgewotCQlyYyA9IGlkZV9kZXZfcmVhZF9pZChkcml2ZSwgY21kLCBpZCk7CisJCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBjbWQsIGlkLCAwKTsKIAkJaWYgKHJjKQogCQkJLyogZmFpbGVkOiB0cnkgYWdhaW4gKi8KLQkJCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBjbWQsIGlkKTsKKwkJCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBjbWQsIGlkLCAwKTsKIAogCQlzdGF0ID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIApAQCAtNDI0LDcgKzQzNSw3IEBACiAJCQltc2xlZXAoNTApOwogCQkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9ERVZfUkVTRVQpOwogCQkJKHZvaWQpaWRlX2J1c3lfc2xlZXAoZHJpdmUsIFdBSVRfV09SU1RDQVNFLCAwKTsKLQkJCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBjbWQsIGlkKTsKKwkJCXJjID0gaWRlX2Rldl9yZWFkX2lkKGRyaXZlLCBjbWQsIGlkLCAwKTsKIAkJfQogCiAJCS8qIGVuc3VyZSBkcml2ZSBJUlEgaXMgY2xlYXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCmluZGV4IDMyNDI2OTguLjI4ZDA5YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwpAQCAtMzAsMTEgKzMwLDkgQEAKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19pZGVfcm9vdDsKIAotc3RhdGljIGludCBwcm9jX2lkZV9yZWFkX2ltb2RlbAotCShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaWRlX2ltb2RlbF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWlkZV9od2lmX3QJKmh3aWYgPSAoaWRlX2h3aWZfdCAqKSBkYXRhOwotCWludAkJbGVuOworCWlkZV9od2lmX3QJKmh3aWYgPSAoaWRlX2h3aWZfdCAqKSBtLT5wcml2YXRlOwogCWNvbnN0IGNoYXIJKm5hbWU7CiAKIAlzd2l0Y2ggKGh3aWYtPmNoaXBzZXQpIHsKQEAgLTUzLDYzICs1MSwxMDggQEAKIAljYXNlIGlkZV9hY29ybjoJCW5hbWUgPSAiYWNvcm4iOwkJYnJlYWs7CiAJZGVmYXVsdDoJCW5hbWUgPSAiKHVua25vd24pIjsJYnJlYWs7CiAJfQotCWxlbiA9IHNwcmludGYocGFnZSwgIiVzXG4iLCBuYW1lKTsKLQlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworCXNlcV9wcmludGYobSwgIiVzXG4iLCBuYW1lKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jX2lkZV9yZWFkX21hdGUKLQkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGlkZV9pbW9kZWxfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWlkZV9od2lmX3QJKmh3aWYgPSAoaWRlX2h3aWZfdCAqKSBkYXRhOwotCWludAkJbGVuOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpZGVfaW1vZGVsX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlkZV9pbW9kZWxfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBpZGVfaW1vZGVsX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBpZGVfbWF0ZV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCWlkZV9od2lmX3QJKmh3aWYgPSAoaWRlX2h3aWZfdCAqKSBtLT5wcml2YXRlOwogCiAJaWYgKGh3aWYgJiYgaHdpZi0+bWF0ZSkKLQkJbGVuID0gc3ByaW50ZihwYWdlLCAiJXNcbiIsIGh3aWYtPm1hdGUtPm5hbWUpOworCQlzZXFfcHJpbnRmKG0sICIlc1xuIiwgaHdpZi0+bWF0ZS0+bmFtZSk7CiAJZWxzZQotCQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIobm9uZSlcbiIpOwotCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7CisJCXNlcV9wcmludGYobSwgIihub25lKVxuIik7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19pZGVfcmVhZF9jaGFubmVsCi0JKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBpZGVfbWF0ZV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaWRlX2h3aWZfdAkqaHdpZiA9IChpZGVfaHdpZl90ICopIGRhdGE7Ci0JaW50CQlsZW47Ci0KLQlwYWdlWzBdID0gaHdpZi0+Y2hhbm5lbCA/ICcxJyA6ICcwJzsKLQlwYWdlWzFdID0gJ1xuJzsKLQlsZW4gPSAyOwotCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGlkZV9tYXRlX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19pZGVfcmVhZF9pZGVudGlmeQotCShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlkZV9tYXRlX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaWRlX21hdGVfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IGlkZV9jaGFubmVsX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaWRlX2RyaXZlX3QJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopZGF0YTsKLQlpbnQJCWxlbiA9IDAsIGkgPSAwOwotCWludAkJZXJyID0gMDsKKwlpZGVfaHdpZl90CSpod2lmID0gKGlkZV9od2lmX3QgKikgbS0+cHJpdmF0ZTsKIAotCWxlbiA9IHNwcmludGYocGFnZSwgIlxuIik7CisJc2VxX3ByaW50ZihtLCAiJWNcbiIsIGh3aWYtPmNoYW5uZWwgPyAnMScgOiAnMCcpOworCXJldHVybiAwOworfQogCi0JaWYgKGRyaXZlKSB7Ci0JCV9fbGUxNiAqdmFsID0gKF9fbGUxNiAqKXBhZ2U7CitzdGF0aWMgaW50IGlkZV9jaGFubmVsX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaWRlX2NoYW5uZWxfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KIAotCQllcnIgPSB0YXNrZmlsZV9saWJfZ2V0X2lkZW50aWZ5KGRyaXZlLCBwYWdlKTsKLQkJaWYgKCFlcnIpIHsKLQkJCWNoYXIgKm91dCA9IChjaGFyICopcGFnZSArIFNFQ1RPUl9TSVpFOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaWRlX2NoYW5uZWxfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBpZGVfY2hhbm5lbF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAKLQkJCXBhZ2UgPSBvdXQ7Ci0JCQlkbyB7Ci0JCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJTA0eCVjIiwKLQkJCQkJbGUxNl90b19jcHVwKHZhbCksICgrK2kgJiA3KSA/ICcgJyA6ICdcbicpOwotCQkJCXZhbCArPSAxOwotCQkJfSB3aGlsZSAoaSA8IFNFQ1RPUl9TSVpFIC8gMik7Ci0JCQlsZW4gPSBvdXQgLSBwYWdlOwotCQl9CitzdGF0aWMgaW50IGlkZV9pZGVudGlmeV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCWlkZV9kcml2ZV90ICpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKW0tPnByaXZhdGU7CisJdTggKmJ1ZjsKKworCWlmICghZHJpdmUpIHsKKwkJc2VxX3B1dGMobSwgJ1xuJyk7CisJCXJldHVybiAwOwogCX0KLQlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworCisJYnVmID0ga21hbGxvYyhTRUNUT1JfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCWlmICh0YXNrZmlsZV9saWJfZ2V0X2lkZW50aWZ5KGRyaXZlLCBidWYpID09IDApIHsKKwkJX19sZTE2ICp2YWwgPSAoX19sZTE2ICopYnVmOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgU0VDVE9SX1NJWkUgLyAyOyBpKyspIHsKKwkJCXNlcV9wcmludGYobSwgIiUwNHglYyIsIGxlMTZfdG9fY3B1KHZhbFtpXSksCisJCQkJCShpICUgOCkgPT0gNyA/ICdcbicgOiAnICcpOworCQl9CisJfSBlbHNlCisJCXNlcV9wdXRjKG0sIGJ1ZlswXSk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpZGVfaWRlbnRpZnlfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpZGVfaWRlbnRpZnlfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaWRlX2lkZW50aWZ5X3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaWRlX2lkZW50aWZ5X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogLyoqCiAgKglpZGVfZmluZF9zZXR0aW5nCS0JZmluZCBhIHNwZWNpZmljIHNldHRpbmcKICAqCUBzdDogc2V0dGluZyB0YWJsZSBwb2ludGVyCkBAIC0xOTUsNyArMjM4LDYgQEAKIHN0YXRpYyBpbnQgc2V0X3hmZXJfcmF0ZSAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQogewogCXN0cnVjdCBpZGVfY21kIGNtZDsKLQlpbnQgZXJyOwogCiAJaWYgKGFyZyA8IFhGRVJfUElPXzAgfHwgYXJnID4gWEZFUl9VRE1BXzYpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjA2LDE0ICsyNDgsOSBAQAogCWNtZC50Zi5uc2VjdCAgID0gKHU4KWFyZzsKIAljbWQudmFsaWQub3V0LnRmID0gSURFX1ZBTElEX0ZFQVRVUkUgfCBJREVfVkFMSURfTlNFQ1Q7CiAJY21kLnZhbGlkLmluLnRmICA9IElERV9WQUxJRF9OU0VDVDsKKwljbWQudGZfZmxhZ3MgICA9IElERV9URkxBR19TRVRfWEZFUjsKIAotCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKLQotCWlmICghZXJyKSB7Ci0JCWlkZV9zZXRfeGZlcl9yYXRlKGRyaXZlLCAodTgpIGFyZyk7Ci0JCWlkZV9kcml2ZWlkX3VwZGF0ZShkcml2ZSk7Ci0JfQotCXJldHVybiBlcnI7CisJcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIH0KIAogaWRlX2RldnNldF9ydyhjdXJyZW50X3NwZWVkLCB4ZmVyX3JhdGUpOwpAQCAtMjQ2LDIyICsyODMsMjAgQEAKIAl3YXJuZWQgPSAxOwogfQogCi1zdGF0aWMgaW50IHByb2NfaWRlX3JlYWRfc2V0dGluZ3MKLQkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGlkZV9zZXR0aW5nc19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCWNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgKnNldHRpbmcsICpnLCAqZDsKIAljb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqZHM7Ci0JaWRlX2RyaXZlX3QJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopIGRhdGE7Ci0JY2hhcgkJKm91dCA9IHBhZ2U7Ci0JaW50CQlsZW4sIHJjLCBtdWxfZmFjdG9yLCBkaXZfZmFjdG9yOworCWlkZV9kcml2ZV90CSpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKSBtLT5wcml2YXRlOworCWludAkJcmMsIG11bF9mYWN0b3IsIGRpdl9mYWN0b3I7CiAKIAlwcm9jX2lkZV9zZXR0aW5nc193YXJuKCk7CiAKIAltdXRleF9sb2NrKCZpZGVfc2V0dGluZ19tdHgpOwogCWcgPSBpZGVfZ2VuZXJpY19zZXR0aW5nczsKIAlkID0gZHJpdmUtPnNldHRpbmdzOwotCW91dCArPSBzcHJpbnRmKG91dCwgIm5hbWVcdFx0XHR2YWx1ZVx0XHRtaW5cdFx0bWF4XHRcdG1vZGVcbiIpOwotCW91dCArPSBzcHJpbnRmKG91dCwgIi0tLS1cdFx0XHQtLS0tLVx0XHQtLS1cdFx0LS0tXHRcdC0tLS1cbiIpOworCXNlcV9wcmludGYobSwgIm5hbWVcdFx0XHR2YWx1ZVx0XHRtaW5cdFx0bWF4XHRcdG1vZGVcbiIpOworCXNlcV9wcmludGYobSwgIi0tLS1cdFx0XHQtLS0tLVx0XHQtLS1cdFx0LS0tXHRcdC0tLS1cbiIpOwogCXdoaWxlIChnLT5uYW1lIHx8IChkICYmIGQtPm5hbWUpKSB7CiAJCS8qIHJlYWQgc2V0dGluZ3MgaW4gdGhlIGFscGhhYmV0aWNhbCBvcmRlciAqLwogCQlpZiAoZy0+bmFtZSAmJiBkICYmIGQtPm5hbWUpIHsKQEAgLTI3NSwzMSArMzEwLDM1IEBACiAJCQlzZXR0aW5nID0gZysrOwogCQltdWxfZmFjdG9yID0gc2V0dGluZy0+bXVsZiA/IHNldHRpbmctPm11bGYoZHJpdmUpIDogMTsKIAkJZGl2X2ZhY3RvciA9IHNldHRpbmctPmRpdmYgPyBzZXR0aW5nLT5kaXZmKGRyaXZlKSA6IDE7Ci0JCW91dCArPSBzcHJpbnRmKG91dCwgIiUtMjRzIiwgc2V0dGluZy0+bmFtZSk7CisJCXNlcV9wcmludGYobSwgIiUtMjRzIiwgc2V0dGluZy0+bmFtZSk7CiAJCXJjID0gaWRlX3JlYWRfc2V0dGluZyhkcml2ZSwgc2V0dGluZyk7CiAJCWlmIChyYyA+PSAwKQotCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJS0xNmQiLCByYyAqIG11bF9mYWN0b3IgLyBkaXZfZmFjdG9yKTsKKwkJCXNlcV9wcmludGYobSwgIiUtMTZkIiwgcmMgKiBtdWxfZmFjdG9yIC8gZGl2X2ZhY3Rvcik7CiAJCWVsc2UKLQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiUtMTZzIiwgIndyaXRlLW9ubHkiKTsKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiJS0xNmQlLTE2ZCIsIChzZXR0aW5nLT5taW4gKiBtdWxfZmFjdG9yICsgZGl2X2ZhY3RvciAtIDEpIC8gZGl2X2ZhY3Rvciwgc2V0dGluZy0+bWF4ICogbXVsX2ZhY3RvciAvIGRpdl9mYWN0b3IpOworCQkJc2VxX3ByaW50ZihtLCAiJS0xNnMiLCAid3JpdGUtb25seSIpOworCQlzZXFfcHJpbnRmKG0sICIlLTE2ZCUtMTZkIiwgKHNldHRpbmctPm1pbiAqIG11bF9mYWN0b3IgKyBkaXZfZmFjdG9yIC0gMSkgLyBkaXZfZmFjdG9yLCBzZXR0aW5nLT5tYXggKiBtdWxfZmFjdG9yIC8gZGl2X2ZhY3Rvcik7CiAJCWRzID0gc2V0dGluZy0+c2V0dGluZzsKIAkJaWYgKGRzLT5nZXQpCi0JCQlvdXQgKz0gc3ByaW50ZihvdXQsICJyIik7CisJCQlzZXFfcHJpbnRmKG0sICJyIik7CiAJCWlmIChkcy0+c2V0KQotCQkJb3V0ICs9IHNwcmludGYob3V0LCAidyIpOwotCQlvdXQgKz0gc3ByaW50ZihvdXQsICJcbiIpOworCQkJc2VxX3ByaW50ZihtLCAidyIpOworCQlzZXFfcHJpbnRmKG0sICJcbiIpOwogCX0KLQlsZW4gPSBvdXQgLSBwYWdlOwogCW11dGV4X3VubG9jaygmaWRlX3NldHRpbmdfbXR4KTsKLQlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkZV9zZXR0aW5nc19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGlkZV9zZXR0aW5nc19wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOwogfQogCiAjZGVmaW5lIE1BWF9MRU4JMzAKIAotc3RhdGljIGludCBwcm9jX2lkZV93cml0ZV9zZXR0aW5ncyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIHNzaXplX3QgaWRlX3NldHRpbmdzX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7Ci0JaWRlX2RyaXZlX3QJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopIGRhdGE7CisJaWRlX2RyaXZlX3QJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopIFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKIAljaGFyCQluYW1lW01BWF9MRU4gKyAxXTsKIAlpbnQJCWZvcl9yZWFsID0gMCwgbXVsX2ZhY3RvciwgZGl2X2ZhY3RvcjsKIAl1bnNpZ25lZCBsb25nCW47CkBAIC0zOTQsNjMgKzQzMywxMDQgQEAKIAlyZXR1cm4gY291bnQ7CiBwYXJzZV9lcnJvcjoKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTsKLQlwcmludGsoInByb2NfaWRlX3dyaXRlX3NldHRpbmdzKCk6IHBhcnNlIGVycm9yXG4iKTsKKwlwcmludGsoIiVzKCk6IHBhcnNlIGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLWludCBwcm9jX2lkZV9yZWFkX2NhcGFjaXR5Ci0JKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaWRlX3NldHRpbmdzX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaWRlX3NldHRpbmdzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBpZGVfc2V0dGluZ3NfcHJvY193cml0ZSwKK307CisKK3N0YXRpYyBpbnQgaWRlX2NhcGFjaXR5X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IHNwcmludGYocGFnZSwgIiVsbHVcbiIsIChsb25nIGxvbmcpMHg3ZmZmZmZmZik7Ci0JUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKKwlzZXFfcHJpbnRmKG0sICIlbGx1XG4iLCAobG9uZyBsb25nKTB4N2ZmZmZmZmYpOworCXJldHVybiAwOwogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChwcm9jX2lkZV9yZWFkX2NhcGFjaXR5KTsKLQotaW50IHByb2NfaWRlX3JlYWRfZ2VvbWV0cnkKLQkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGlkZV9jYXBhY2l0eV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaWRlX2RyaXZlX3QJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopIGRhdGE7Ci0JY2hhcgkJKm91dCA9IHBhZ2U7Ci0JaW50CQlsZW47CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGlkZV9jYXBhY2l0eV9wcm9jX3Nob3csIE5VTEwpOworfQogCi0Jb3V0ICs9IHNwcmludGYob3V0LCAicGh5c2ljYWwgICAgICVkLyVkLyVkXG4iLAorY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGVfY2FwYWNpdHlfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBpZGVfY2FwYWNpdHlfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2NhcGFjaXR5X3Byb2NfZm9wcyk7CisKK3N0YXRpYyBpbnQgaWRlX2dlb21ldHJ5X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJaWRlX2RyaXZlX3QJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopIG0tPnByaXZhdGU7CisKKwlzZXFfcHJpbnRmKG0sICJwaHlzaWNhbCAgICAgJWQvJWQvJWRcbiIsCiAJCQlkcml2ZS0+Y3lsLCBkcml2ZS0+aGVhZCwgZHJpdmUtPnNlY3QpOwotCW91dCArPSBzcHJpbnRmKG91dCwgImxvZ2ljYWwgICAgICAlZC8lZC8lZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJsb2dpY2FsICAgICAgJWQvJWQvJWRcbiIsCiAJCQlkcml2ZS0+Ymlvc19jeWwsIGRyaXZlLT5iaW9zX2hlYWQsIGRyaXZlLT5iaW9zX3NlY3QpOwotCi0JbGVuID0gb3V0IC0gcGFnZTsKLQlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworCXJldHVybiAwOwogfQogCi1FWFBPUlRfU1lNQk9MKHByb2NfaWRlX3JlYWRfZ2VvbWV0cnkpOwotCi1zdGF0aWMgaW50IHByb2NfaWRlX3JlYWRfZG1vZGVsCi0JKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBpZGVfZ2VvbWV0cnlfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWlkZV9kcml2ZV90CSpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKSBkYXRhOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpZGVfZ2VvbWV0cnlfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGVfZ2VvbWV0cnlfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBpZGVfZ2VvbWV0cnlfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworRVhQT1JUX1NZTUJPTChpZGVfZ2VvbWV0cnlfcHJvY19mb3BzKTsKKworc3RhdGljIGludCBpZGVfZG1vZGVsX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlpZGVfZHJpdmVfdAkqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKikgc2VxLT5wcml2YXRlOwogCWNoYXIJCSptID0gKGNoYXIgKikmZHJpdmUtPmlkW0FUQV9JRF9QUk9EXTsKLQlpbnQJCWxlbjsKIAotCWxlbiA9IHNwcmludGYocGFnZSwgIiUuNDBzXG4iLCBtWzBdID8gbSA6ICIobm9uZSkiKTsKLQlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworCXNlcV9wcmludGYoc2VxLCAiJS40MHNcbiIsIG1bMF0gPyBtIDogIihub25lKSIpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHByb2NfaWRlX3JlYWRfZHJpdmVyCi0JKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBpZGVfZG1vZGVsX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpZGVfZHJpdmVfdAkJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopZGF0YTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaWRlX2Rtb2RlbF9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGVfZG1vZGVsX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaWRlX2Rtb2RlbF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgaWRlX2RyaXZlcl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCWlkZV9kcml2ZV90CQkqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKiltLT5wcml2YXRlOwogCXN0cnVjdCBkZXZpY2UJCSpkZXYgPSAmZHJpdmUtPmdlbmRldjsKIAlzdHJ1Y3QgaWRlX2RyaXZlcgkqaWRlX2RydjsKLQlpbnQJCQlsZW47CiAKIAlpZiAoZGV2LT5kcml2ZXIpIHsKIAkJaWRlX2RydiA9IHRvX2lkZV9kcml2ZXIoZGV2LT5kcml2ZXIpOwotCQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlcyB2ZXJzaW9uICVzXG4iLAorCQlzZXFfcHJpbnRmKG0sICIlcyB2ZXJzaW9uICVzXG4iLAogCQkJCWRldi0+ZHJpdmVyLT5uYW1lLCBpZGVfZHJ2LT52ZXJzaW9uKTsKIAl9IGVsc2UKLQkJbGVuID0gc3ByaW50ZihwYWdlLCAiaWRlLWRlZmF1bHQgdmVyc2lvbiAwLjkubmV3aWRlXG4iKTsKLQlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworCQlzZXFfcHJpbnRmKG0sICJpZGUtZGVmYXVsdCB2ZXJzaW9uIDAuOS5uZXdpZGVcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkZV9kcml2ZXJfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpZGVfZHJpdmVyX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQgaWRlX3JlcGxhY2Vfc3ViZHJpdmVyKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqZHJpdmVyKQpAQCAtNDgwLDEwICs1NjAsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHByb2NfaWRlX3dyaXRlX2RyaXZlcgotCShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyBzc2l6ZV90IGlkZV9kcml2ZXJfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7Ci0JaWRlX2RyaXZlX3QJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopIGRhdGE7CisJaWRlX2RyaXZlX3QJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopIFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKIAljaGFyIG5hbWVbMzJdOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQpAQCAtNDk4LDEyICs1NzgsMTkgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19pZGVfcmVhZF9tZWRpYQotCShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlkZV9kcml2ZXJfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBpZGVfZHJpdmVyX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBpZGVfZHJpdmVyX3Byb2Nfd3JpdGUsCit9OworCitzdGF0aWMgaW50IGlkZV9tZWRpYV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWlkZV9kcml2ZV90CSpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKSBkYXRhOworCWlkZV9kcml2ZV90CSpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKSBtLT5wcml2YXRlOwogCWNvbnN0IGNoYXIJKm1lZGlhOwotCWludAkJbGVuOwogCiAJc3dpdGNoIChkcml2ZS0+bWVkaWEpIHsKIAljYXNlIGlkZV9kaXNrOgkJbWVkaWEgPSAiZGlza1xuIjsJYnJlYWs7CkBAIC01MTMsMjAgKzYwMCwzMCBAQAogCWNhc2UgaWRlX29wdGljYWw6CW1lZGlhID0gIm9wdGljYWxcbiI7CWJyZWFrOwogCWRlZmF1bHQ6CQltZWRpYSA9ICJVTktOT1dOXG4iOwlicmVhazsKIAl9Ci0Jc3RyY3B5KHBhZ2UsIG1lZGlhKTsKLQlsZW4gPSBzdHJsZW4obWVkaWEpOwotCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7CisJc2VxX3B1dHMobSwgbWVkaWEpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGlkZV9tZWRpYV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGlkZV9tZWRpYV9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGVfbWVkaWFfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBpZGVfbWVkaWFfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiBzdGF0aWMgaWRlX3Byb2NfZW50cnlfdCBnZW5lcmljX2RyaXZlX2VudHJpZXNbXSA9IHsKLQl7ICJkcml2ZXIiLAlTX0lGUkVHfFNfSVJVR08sCSBwcm9jX2lkZV9yZWFkX2RyaXZlciwKLQkJCQkJCSBwcm9jX2lkZV93cml0ZV9kcml2ZXIgfSwKLQl7ICJpZGVudGlmeSIsCVNfSUZSRUd8U19JUlVTUiwJIHByb2NfaWRlX3JlYWRfaWRlbnRpZnksIE5VTEwgfSwKLQl7ICJtZWRpYSIsCVNfSUZSRUd8U19JUlVHTywJIHByb2NfaWRlX3JlYWRfbWVkaWEsICAgIE5VTEwgfSwKLQl7ICJtb2RlbCIsCVNfSUZSRUd8U19JUlVHTywJIHByb2NfaWRlX3JlYWRfZG1vZGVsLCAgIE5VTEwgfSwKLQl7ICJzZXR0aW5ncyIsCVNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLCBwcm9jX2lkZV9yZWFkX3NldHRpbmdzLAotCQkJCQkJIHByb2NfaWRlX3dyaXRlX3NldHRpbmdzIH0sCi0JeyBOVUxMLAkwLCBOVUxMLCBOVUxMIH0KKwl7ICJkcml2ZXIiLAlTX0lGUkVHfFNfSVJVR08sCSAmaWRlX2RyaXZlcl9wcm9jX2ZvcHMJfSwKKwl7ICJpZGVudGlmeSIsCVNfSUZSRUd8U19JUlVTUiwJICZpZGVfaWRlbnRpZnlfcHJvY19mb3BzfSwKKwl7ICJtZWRpYSIsCVNfSUZSRUd8U19JUlVHTywJICZpZGVfbWVkaWFfcHJvY19mb3BzCX0sCisJeyAibW9kZWwiLAlTX0lGUkVHfFNfSVJVR08sCSAmaWRlX2Rtb2RlbF9wcm9jX2ZvcHMJfSwKKwl7ICJzZXR0aW5ncyIsCVNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLCAmaWRlX3NldHRpbmdzX3Byb2NfZm9wc30sCisJe30KIH07CiAKIHN0YXRpYyB2b2lkIGlkZV9hZGRfcHJvY19lbnRyaWVzKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyLCBpZGVfcHJvY19lbnRyeV90ICpwLCB2b2lkICpkYXRhKQpAQCAtNTM2LDExICs2MzMsOCBAQAogCWlmICghZGlyIHx8ICFwKQogCQlyZXR1cm47CiAJd2hpbGUgKHAtPm5hbWUgIT0gTlVMTCkgewotCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShwLT5uYW1lLCBwLT5tb2RlLCBkaXIpOworCQllbnQgPSBwcm9jX2NyZWF0ZV9kYXRhKHAtPm5hbWUsIHAtPm1vZGUsIGRpciwgcC0+cHJvY19mb3BzLCBkYXRhKTsKIAkJaWYgKCFlbnQpIHJldHVybjsKLQkJZW50LT5kYXRhID0gZGF0YTsKLQkJZW50LT5yZWFkX3Byb2MgPSBwLT5yZWFkX3Byb2M7Ci0JCWVudC0+d3JpdGVfcHJvYyA9IHAtPndyaXRlX3Byb2M7CiAJCXArKzsKIAl9CiB9CkBAIC02MjMsMTAgKzcxNywxMCBAQAogfQogCiBzdGF0aWMgaWRlX3Byb2NfZW50cnlfdCBod2lmX2VudHJpZXNbXSA9IHsKLQl7ICJjaGFubmVsIiwJU19JRlJFR3xTX0lSVUdPLAlwcm9jX2lkZV9yZWFkX2NoYW5uZWwsCU5VTEwgfSwKLQl7ICJtYXRlIiwJU19JRlJFR3xTX0lSVUdPLAlwcm9jX2lkZV9yZWFkX21hdGUsCU5VTEwgfSwKLQl7ICJtb2RlbCIsCVNfSUZSRUd8U19JUlVHTywJcHJvY19pZGVfcmVhZF9pbW9kZWwsCU5VTEwgfSwKLQl7IE5VTEwsCTAsIE5VTEwsIE5VTEwgfQorCXsgImNoYW5uZWwiLAlTX0lGUkVHfFNfSVJVR08sCSZpZGVfY2hhbm5lbF9wcm9jX2ZvcHMJfSwKKwl7ICJtYXRlIiwJU19JRlJFR3xTX0lSVUdPLAkmaWRlX21hdGVfcHJvY19mb3BzCX0sCisJeyAibW9kZWwiLAlTX0lGUkVHfFNfSVJVR08sCSZpZGVfaW1vZGVsX3Byb2NfZm9wcwl9LAorCXt9CiB9OwogCiB2b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaWRlX2h3aWZfdCAqaHdpZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCmluZGV4IGJjNWZiMTIuLjlkNmY2MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgpAQCAtNDcsMjggKzQ4LDEzIEBACiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgPGxpbnV4L210aW8uaD4KIAotZW51bSB7Ci0JLyogb3V0cHV0IGVycm9ycyBvbmx5ICovCi0JREJHX0VSUiA9CQkoMSA8PCAwKSwKLQkvKiBvdXRwdXQgYWxsIHNlbnNlIGtleS9hc2MgKi8KLQlEQkdfU0VOU0UgPQkJKDEgPDwgMSksCi0JLyogaW5mbyByZWdhcmRpbmcgYWxsIGNocmRldi1yZWxhdGVkIHByb2NlZHVyZXMgKi8KLQlEQkdfQ0hSREVWID0JCSgxIDw8IDIpLAotCS8qIGFsbCByZW1haW5pbmcgcHJvY2VkdXJlcyAqLwotCURCR19QUk9DUyA9CQkoMSA8PCAzKSwKLX07Ci0KIC8qIGRlZmluZSB0byBzZWUgZGVidWcgaW5mbyAqLwotI2RlZmluZSBJREVUQVBFX0RFQlVHX0xPRwkJMAorI3VuZGVmIElERVRBUEVfREVCVUdfTE9HCiAKLSNpZiBJREVUQVBFX0RFQlVHX0xPRwotI2RlZmluZSBkZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pCQkJXAotewkJCQkJCQlcCi0JaWYgKHRhcGUtPmRlYnVnX21hc2sgJiBsdmwpCQkJXAotCXByaW50ayhLRVJOX0lORk8gImlkZS10YXBlOiAiIGZtdCwgIyMgYXJncyk7CVwKLX0KKyNpZmRlZiBJREVUQVBFX0RFQlVHX0xPRworI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBfX2lkZV9kZWJ1Z19sb2cobHZsLCBmbXQsICMjIGFyZ3MpCiAjZWxzZQotI2RlZmluZSBkZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBUdW5hYmxlIHBhcmFtZXRlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNzAsNyArMTU2LDggQEAKIAkgKiBvdGhlciBkZXZpY2UuIE5vdGUgdGhhdCBhdCBtb3N0IHdlIHdpbGwgaGF2ZSBvbmx5IG9uZSBEU0MgKHVzdWFsbHkKIAkgKiBkYXRhIHRyYW5zZmVyKSByZXF1ZXN0IGluIHRoZSBkZXZpY2UgcmVxdWVzdCBxdWV1ZS4KIAkgKi8KLQlzdHJ1Y3QgcmVxdWVzdCAqcG9zdHBvbmVkX3JxOworCWJvb2wgcG9zdHBvbmVkX3JxOworCiAJLyogVGhlIHRpbWUgaW4gd2hpY2ggd2Ugc3RhcnRlZCBwb2xsaW5nIGZvciBEU0MgKi8KIAl1bnNpZ25lZCBsb25nIGRzY19wb2xsaW5nX3N0YXJ0OwogCS8qIFRpbWVyIHVzZWQgdG8gcG9sbCBmb3IgZHNjICovCkBAIC0yMzAsOCArMjE3LDYgQEAKIAljaGFyIGRydl93cml0ZV9wcm90OwogCS8qIHRoZSB0YXBlIGlzIHdyaXRlIHByb3RlY3RlZCAoaGFyZHdhcmUgb3Igb3BlbmVkIGFzIHJlYWQtb25seSkgKi8KIAljaGFyIHdyaXRlX3Byb3Q7Ci0KLQl1MzIgZGVidWdfbWFzazsKIH0gaWRldGFwZV90YXBlX3Q7CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoaWRldGFwZV9yZWZfbXV0ZXgpOwpAQCAtMjkwLDggKzI3NSw5IEBACiAJdGFwZS0+YXNjICAgICAgID0gc2Vuc2VbMTJdOwogCXRhcGUtPmFzY3EgICAgICA9IHNlbnNlWzEzXTsKIAotCWRlYnVnX2xvZyhEQkdfRVJSLCAicGMgPSAleCwgc2Vuc2Uga2V5ID0gJXgsIGFzYyA9ICV4LCBhc2NxID0gJXhcbiIsCi0JCSBwYy0+Y1swXSwgdGFwZS0+c2Vuc2Vfa2V5LCB0YXBlLT5hc2MsIHRhcGUtPmFzY3EpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLAorCQkgICAgICAiY21kOiAweCV4LCBzZW5zZSBrZXkgPSAleCwgYXNjID0gJXgsIGFzY3EgPSAleCIsCisJCSAgICAgIHJxLT5jbWRbMF0sIHRhcGUtPnNlbnNlX2tleSwgdGFwZS0+YXNjLCB0YXBlLT5hc2NxKTsKIAogCS8qIGNvcnJlY3QgcmVtYWluaW5nIGJ5dGVzIHRvIHRyYW5zZmVyICovCiAJaWYgKHBjLT5mbGFncyAmIFBDX0ZMQUdfRE1BX0VSUk9SKQpAQCAtMzQ0LDcgKzMzMCw4IEBACiAJaW50IHVwdG9kYXRlID0gcGMtPmVycm9yID8gMCA6IDE7CiAJaW50IGVyciA9IHVwdG9kYXRlID8gMCA6IElERV9EUlZfRVJST1JfR0VORVJBTDsKIAotCWRlYnVnX2xvZyhEQkdfUFJPQ1MsICJFbnRlciAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiY21kOiAweCV4LCBkc2M6ICVkLCBlcnI6ICVkIiwgcnEtPmNtZFswXSwKKwkJICAgICAgZHNjLCBlcnIpOwogCiAJaWYgKGRzYykKIAkJaWRlX3RhcGVfaGFuZGxlX2RzYyhkcml2ZSk7CkBAIC0zODcsMTMgKzM3NCwxNCBAQAogICogUG9zdHBvbmUgdGhlIGN1cnJlbnQgcmVxdWVzdCBzbyB0aGF0IGlkZS5jIHdpbGwgYmUgYWJsZSB0byBzZXJ2aWNlIHJlcXVlc3RzCiAgKiBmcm9tIGFub3RoZXIgZGV2aWNlIG9uIHRoZSBzYW1lIHBvcnQgd2hpbGUgd2UgYXJlIHBvbGxpbmcgZm9yIERTQy4KICAqLwotc3RhdGljIHZvaWQgaWRldGFwZV9wb3N0cG9uZV9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGlkZV90YXBlX3N0YWxsX3F1ZXVlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAotCWRlYnVnX2xvZyhEQkdfUFJPQ1MsICJFbnRlciAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiY21kOiAweCV4LCBkc2NfcG9sbF9mcmVxOiAlbHUiLAorCQkgICAgICBkcml2ZS0+aHdpZi0+cnEtPmNtZFswXSwgdGFwZS0+ZHNjX3BvbGxfZnJlcSk7CiAKLQl0YXBlLT5wb3N0cG9uZWRfcnEgPSBkcml2ZS0+aHdpZi0+cnE7CisJdGFwZS0+cG9zdHBvbmVkX3JxID0gdHJ1ZTsKIAogCWlkZV9zdGFsbF9xdWV1ZShkcml2ZSwgdGFwZS0+ZHNjX3BvbGxfZnJlcSk7CiB9CkBAIC00MDcsNyArMzk1LDcgQEAKIAl0YXBlLT5kc2NfcG9sbF9mcmVxID0gSURFVEFQRV9EU0NfTUFfRkFTVDsKIAl0YXBlLT5kc2NfdGltZW91dCA9IGppZmZpZXMgKyBJREVUQVBFX0RTQ19NQV9USU1FT1VUOwogCS8qIEFsbG93IGlkZS5jIHRvIGhhbmRsZSBvdGhlciByZXF1ZXN0cyAqLwotCWlkZXRhcGVfcG9zdHBvbmVfcmVxdWVzdChkcml2ZSk7CisJaWRlX3RhcGVfc3RhbGxfcXVldWUoZHJpdmUpOwogfQogCiAvKgpAQCAtNDg4LDcgKzQ3Niw4IEBACiAJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgLUVJTywgYmxrX3JxX2J5dGVzKHJxKSk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9Ci0JZGVidWdfbG9nKERCR19TRU5TRSwgIlJldHJ5ICMlZCwgY21kID0gJTAyWFxuIiwgcGMtPnJldHJpZXMsIHBjLT5jWzBdKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJyZXRyeSAjJWQsIGNtZDogMHglMDJ4IiwgcGMtPnJldHJpZXMsCisJCSAgICAgIHBjLT5jWzBdKTsKIAogCXBjLT5yZXRyaWVzKys7CiAKQEAgLTU3OSwxMiArNTY4LDEyIEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gTlVMTDsKLQlzdHJ1Y3QgcmVxdWVzdCAqcG9zdHBvbmVkX3JxID0gdGFwZS0+cG9zdHBvbmVkX3JxOwogCXN0cnVjdCBpZGVfY21kIGNtZDsKIAl1OCBzdGF0OwogCi0JZGVidWdfbG9nKERCR19TRU5TRSwgInNlY3RvcjogJWxsdSwgbnJfc2VjdG9yczogJXVcbiIKLQkJICAodW5zaWduZWQgbG9uZyBsb25nKWJsa19ycV9wb3MocnEpLCBibGtfcnFfc2VjdG9ycyhycSkpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgImNtZDogMHgleCwgc2VjdG9yOiAlbGx1LCBucl9zZWN0b3JzOiAldSIsCisJCSAgICAgIHJxLT5jbWRbMF0sICh1bnNpZ25lZCBsb25nIGxvbmcpYmxrX3JxX3BvcyhycSksCisJCSAgICAgIGJsa19ycV9zZWN0b3JzKHJxKSk7CiAKIAlCVUdfT04oIShibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSB8fCBibGtfc2Vuc2VfcmVxdWVzdChycSkpKTsKIApAQCAtNTk0LDE4ICs1ODMsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAocG9zdHBvbmVkX3JxICE9IE5VTEwpCi0JCWlmIChycSAhPSBwb3N0cG9uZWRfcnEpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiaWRlLXRhcGU6IGlkZS10YXBlLmMgYnVnIC0gIgotCQkJCQkiVHdvIERTQyByZXF1ZXN0cyB3ZXJlIHF1ZXVlZFxuIik7Ci0JCQlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKLQkJCXJxLT5lcnJvcnMgPSAwOwotCQkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBibGtfcnFfYnl0ZXMocnEpKTsKLQkJCXJldHVybiBpZGVfc3RvcHBlZDsKLQkJfQotCi0JdGFwZS0+cG9zdHBvbmVkX3JxID0gTlVMTDsKLQogCS8qCiAJICogSWYgdGhlIHRhcGUgaXMgc3RpbGwgYnVzeSwgcG9zdHBvbmUgb3VyIHJlcXVlc3QgYW5kIHNlcnZpY2UKIAkgKiB0aGUgb3RoZXIgZGV2aWNlIG1lYW53aGlsZS4KQEAgLTYyMyw3ICs2MDAsNyBAQAogCiAJaWYgKCEoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0lHTk9SRV9EU0MpICYmCiAJICAgICEoc3RhdCAmIEFUQV9EU0MpKSB7Ci0JCWlmIChwb3N0cG9uZWRfcnEgPT0gTlVMTCkgeworCQlpZiAoIXRhcGUtPnBvc3Rwb25lZF9ycSkgewogCQkJdGFwZS0+ZHNjX3BvbGxpbmdfc3RhcnQgPSBqaWZmaWVzOwogCQkJdGFwZS0+ZHNjX3BvbGxfZnJlcSA9IHRhcGUtPmJlc3RfZHNjX3J3X2ZyZXE7CiAJCQl0YXBlLT5kc2NfdGltZW91dCA9IGppZmZpZXMgKyBJREVUQVBFX0RTQ19SV19USU1FT1VUOwpAQCAtNjQwLDEwICs2MTcsMTIgQEAKIAkJCQkJdGFwZS0+ZHNjX3BvbGxpbmdfc3RhcnQgKwogCQkJCQlJREVUQVBFX0RTQ19NQV9USFJFU0hPTEQpKQogCQkJdGFwZS0+ZHNjX3BvbGxfZnJlcSA9IElERVRBUEVfRFNDX01BX1NMT1c7Ci0JCWlkZXRhcGVfcG9zdHBvbmVfcmVxdWVzdChkcml2ZSk7CisJCWlkZV90YXBlX3N0YWxsX3F1ZXVlKGRyaXZlKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX0lHTk9SRV9EU0M7CisJCXRhcGUtPnBvc3Rwb25lZF9ycSA9IGZhbHNlOworCX0KIAogCWlmIChycS0+Y21kWzEzXSAmIFJFUV9JREVUQVBFX1JFQUQpIHsKIAkJcGMgPSAmdGFwZS0+cXVldWVkX3BjOwpAQCAtNzQ1LDcgKzcyNCw3IEBACiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAl1OCBidWZbMjBdOwogCi0JZGVidWdfbG9nKERCR19QUk9DUywgIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJlbnRlciIpOwogCiAJLyogcHJlcCBjbWQgKi8KIAlpZGVfaW5pdF9wYygmcGMpOwpAQCAtNzU2LDkgKzczNSw5IEBACiAJCXJldHVybiAtMTsKIAogCWlmICghcGMuZXJyb3IpIHsKLQkJZGVidWdfbG9nKERCR19TRU5TRSwgIkJPUCAtICVzXG4iLAorCQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkJPUCAtICVzIiwKIAkJCQkoYnVmWzBdICYgMHg4MCkgPyAiWWVzIiA6ICJObyIpOwotCQlkZWJ1Z19sb2coREJHX1NFTlNFLCAiRU9QIC0gJXNcbiIsCisJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiRU9QIC0gJXMiLAogCQkJCShidWZbMF0gJiAweDQwKSA/ICJZZXMiIDogIk5vIik7CiAKIAkJaWYgKGJ1ZlswXSAmIDB4NCkgewpAQCAtNzY4LDggKzc0Nyw4IEBACiAJCQkJICAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKIAkJCXJldHVybiAtMTsKIAkJfSBlbHNlIHsKLQkJCWRlYnVnX2xvZyhEQkdfU0VOU0UsICJCbG9jayBMb2NhdGlvbiAtICV1XG4iLAotCQkJCQliZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSZidWZbNF0pKTsKKwkJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQmxvY2sgTG9jYXRpb246ICV1IiwKKwkJCQkgICAgICBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSZidWZbNF0pKTsKIAogCQkJdGFwZS0+cGFydGl0aW9uID0gYnVmWzFdOwogCQkJdGFwZS0+Zmlyc3RfZnJhbWUgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSZidWZbNF0pOwpAQCAtODY2LDcgKzg0NSw4IEBACiAJc3RydWN0IHJlcXVlc3QgKnJxOwogCWludCByZXQ7CiAKLQlkZWJ1Z19sb2coREJHX1NFTlNFLCAiJXM6IGNtZD0lZFxuIiwgX19mdW5jX18sIGNtZCk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJjbWQ6IDB4JXgsIHNpemU6ICVkIiwgY21kLCBzaXplKTsKKwogCUJVR19PTihjbWQgIT0gUkVRX0lERVRBUEVfUkVBRCAmJiBjbWQgIT0gUkVRX0lERVRBUEVfV1JJVEUpOwogCUJVR19PTihzaXplIDwgMCB8fCBzaXplICUgdGFwZS0+YmxrX3NpemUpOwogCkBAIC0xMDI5LDcgKzEwMDksNyBAQAogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJaW50IHJldDsKIAotCWRlYnVnX2xvZyhEQkdfU0VOU0UsICJFbnRlciAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWlkZXRhcGVfY3JlYXRlX3Jld2luZF9jbWQoZHJpdmUsICZwYyk7CiAJcmV0ID0gaWRlX3F1ZXVlX3BjX3RhaWwoZHJpdmUsIGRpc2ssICZwYywgTlVMTCwgMCk7CkBAIC0xMDU1LDcgKzEwMzUsNyBAQAogCQlpbnQgbnJfc3RhZ2VzOwogCX0gY29uZmlnOwogCi0JZGVidWdfbG9nKERCR19QUk9DUywgIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJjbWQ6IDB4JTA0eCIsIGNtZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgMHgwMzQwOgpAQCAtMTA4NSw2ICsxMDY1LDkgQEAKIAlpbnQgcmV0dmFsLCBjb3VudCA9IDA7CiAJaW50IHNwcmV2ID0gISEodGFwZS0+Y2Fwc1s0XSAmIDB4MjApOwogCisKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIm10X29wOiAlZCwgbXRfY291bnQ6ICVkIiwgbXRfb3AsIG10X2NvdW50KTsKKwogCWlmIChtdF9jb3VudCA9PSAwKQogCQlyZXR1cm4gMDsKIAlpZiAoTVRCU0YgPT0gbXRfb3AgfHwgTVRCU0ZNID09IG10X29wKSB7CkBAIC0xMTQ4LDcgKzExMzEsNyBAQAogCXNzaXplX3QgcmV0ID0gMDsKIAlpbnQgcmM7CiAKLQlkZWJ1Z19sb2coREJHX0NIUkRFViwgIkVudGVyICVzLCBjb3VudCAlWmRcbiIsIF9fZnVuY19fLCBjb3VudCk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJjb3VudCAlWmQiLCBjb3VudCk7CiAKIAlpZiAodGFwZS0+Y2hyZGV2X2RpciAhPSBJREVUQVBFX0RJUl9SRUFEKSB7CiAJCWlmICh0ZXN0X2JpdChpbG9nMihJREVfQUZMQUdfREVURUNUX0JTKSwgJmRyaXZlLT5hdGFwaV9mbGFncykpCkBAIC0xMTg3LDggKzExNzAsNiBAQAogCX0KIAogCWlmICghZG9uZSAmJiB0ZXN0X2JpdChpbG9nMihJREVfQUZMQUdfRklMRU1BUkspLCAmZHJpdmUtPmF0YXBpX2ZsYWdzKSkgewotCQlkZWJ1Z19sb2coREJHX1NFTlNFLCAiJXM6IHNwYWNpbmcgb3ZlciBmaWxlbWFya1xuIiwgdGFwZS0+bmFtZSk7Ci0KIAkJaWRldGFwZV9zcGFjZV9vdmVyX2ZpbGVtYXJrcyhkcml2ZSwgTVRGU0YsIDEpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMjA5LDcgKzExOTAsNyBAQAogCWlmICh0YXBlLT53cml0ZV9wcm90KQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCWRlYnVnX2xvZyhEQkdfQ0hSREVWLCAiRW50ZXIgJXMsIGNvdW50ICVaZFxuIiwgX19mdW5jX18sIGNvdW50KTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImNvdW50ICVaZCIsIGNvdW50KTsKIAogCS8qIEluaXRpYWxpemUgd3JpdGUgb3BlcmF0aW9uICovCiAJcmMgPSBpZGV0YXBlX2luaXRfcncoZHJpdmUsIElERVRBUEVfRElSX1dSSVRFKTsKQEAgLTEyNzMsOCArMTI1NCw4IEBACiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAlpbnQgaSwgcmV0dmFsOwogCi0JZGVidWdfbG9nKERCR19FUlIsICJIYW5kbGluZyBNVElPQ1RPUCBpb2N0bDogbXRfb3A9JWQsIG10X2NvdW50PSVkXG4iLAotCQkJbXRfb3AsIG10X2NvdW50KTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIk1USU9DVE9QIGlvY3RsOiBtdF9vcDogJWQsIG10X2NvdW50OiAlZCIsCisJCSAgICAgIG10X29wLCBtdF9jb3VudCk7CiAKIAlzd2l0Y2ggKG10X29wKSB7CiAJY2FzZSBNVEZTRjoKQEAgLTEzOTMsNyArMTM3NCw3IEBACiAJaW50IGJsb2NrX29mZnNldCA9IDAsIHBvc2l0aW9uID0gdGFwZS0+Zmlyc3RfZnJhbWU7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKLQlkZWJ1Z19sb2coREJHX0NIUkRFViwgIkVudGVyICVzLCBjbWQ9JXVcbiIsIF9fZnVuY19fLCBjbWQpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiY21kOiAweCV4IiwgY21kKTsKIAogCWlmICh0YXBlLT5jaHJkZXZfZGlyID09IElERVRBUEVfRElSX1dSSVRFKSB7CiAJCWlkZV90YXBlX2ZsdXNoX21lcmdlX2J1ZmZlcihkcml2ZSk7CkBAIC0xNDYxLDYgKzE0NDIsOSBAQAogCQkJCShidWZbNCArIDZdIDw8IDgpICArCiAJCQkJIGJ1Zls0ICsgN107CiAJdGFwZS0+ZHJ2X3dyaXRlX3Byb3QgPSAoYnVmWzJdICYgMHg4MCkgPj4gNzsKKworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiYmxrX3NpemU6ICVkLCB3cml0ZV9wcm90OiAlZCIsCisJCSAgICAgIHRhcGUtPmJsa19zaXplLCB0YXBlLT5kcnZfd3JpdGVfcHJvdCk7CiB9CiAKIHN0YXRpYyBpbnQgaWRldGFwZV9jaHJkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTE0ODAsNyArMTQ2NCwxMCBAQAogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCWRlYnVnX2xvZyhEQkdfQ0hSREVWLCAiRW50ZXIgJXNcbiIsIF9fZnVuY19fKTsKKwlkcml2ZSA9IHRhcGUtPmRyaXZlOworCWZpbHAtPnByaXZhdGVfZGF0YSA9IHRhcGU7CisKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAkvKgogCSAqIFdlIHJlYWxseSB3YW50IHRvIGRvIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbHApOyBoZXJlLCBidXQgc29tZQpAQCAtMTQ4OSw5ICsxNDc2LDYgQEAKIAkgKi8KIAlmaWxwLT5mX21vZGUgJj0gfihGTU9ERV9QUkVBRCB8IEZNT0RFX1BXUklURSk7CiAKLQlkcml2ZSA9IHRhcGUtPmRyaXZlOwotCi0JZmlscC0+cHJpdmF0ZV9kYXRhID0gdGFwZTsKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlsb2cyKElERV9BRkxBR19CVVNZKSwgJmRyaXZlLT5hdGFwaV9mbGFncykpIHsKIAkJcmV0dmFsID0gLUVCVVNZOwpAQCAtMTU3MCw3ICsxNTU0LDcgQEAKIAlsb2NrX2tlcm5lbCgpOwogCXRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAKLQlkZWJ1Z19sb2coREJHX0NIUkRFViwgIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJlbnRlciIpOwogCiAJaWYgKHRhcGUtPmNocmRldl9kaXIgPT0gSURFVEFQRV9ESVJfV1JJVEUpCiAJCWlkZXRhcGVfd3JpdGVfcmVsZWFzZShkcml2ZSwgbWlub3IpOwpAQCAtMTcwNyw3ICsxNjkxLDYgQEAKIAogaWRlX2RldnNldF9yd19mbGFnKGRzY19vdmVybGFwLCBJREVfREZMQUdfRFNDX09WRVJMQVApOwogCi1pZGVfdGFwZV9kZXZzZXRfcndfZmllbGQoZGVidWdfbWFzaywgZGVidWdfbWFzayk7CiBpZGVfdGFwZV9kZXZzZXRfcndfZmllbGQodGRzYywgYmVzdF9kc2NfcndfZnJlcSk7CiAKIGlkZV90YXBlX2RldnNldF9yX2ZpZWxkKGF2Z19zcGVlZCwgYXZnX3NwZWVkKTsKQEAgLTE3MTksNyArMTcwMiw2IEBACiAJX19JREVfUFJPQ19ERVZTRVQoYXZnX3NwZWVkLAkwLCAweGZmZmYsIE5VTEwsIE5VTEwpLAogCV9fSURFX1BST0NfREVWU0VUKGJ1ZmZlciwJMCwgMHhmZmZmLCBOVUxMLCBkaXZmX2J1ZmZlciksCiAJX19JREVfUFJPQ19ERVZTRVQoYnVmZmVyX3NpemUsCTAsIDB4ZmZmZiwgTlVMTCwgZGl2Zl9idWZmZXJfc2l6ZSksCi0JX19JREVfUFJPQ19ERVZTRVQoZGVidWdfbWFzaywJMCwgMHhmZmZmLCBOVUxMLCBOVUxMKSwKIAlfX0lERV9QUk9DX0RFVlNFVChkc2Nfb3ZlcmxhcCwJMCwgICAgICAxLCBOVUxMLCBOVUxMKSwKIAlfX0lERV9QUk9DX0RFVlNFVChzcGVlZCwJMCwgMHhmZmZmLCBOVUxMLCBOVUxMKSwKIAlfX0lERV9QUk9DX0RFVlNFVCh0ZHNjLAkJSURFVEFQRV9EU0NfUldfTUlOLCBJREVUQVBFX0RTQ19SV19NQVgsCkBAIC0xNzQ2LDcgKzE3MjgsOSBAQAogCWludCBidWZmZXJfc2l6ZTsKIAl1MTYgKmN0bCA9ICh1MTYgKikmdGFwZS0+Y2Fwc1sxMl07CiAKLQlkcml2ZS0+cGNfY2FsbGJhY2sJID0gaWRlX3RhcGVfY2FsbGJhY2s7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJtaW5vcjogJWQiLCBtaW5vcik7CisKKwlkcml2ZS0+cGNfY2FsbGJhY2sgPSBpZGVfdGFwZV9jYWxsYmFjazsKIAogCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0RTQ19PVkVSTEFQOwogCkBAIC0xODMzLDIyICsxODE3LDMyIEBACiB9CiAKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLXN0YXRpYyBpbnQgcHJvY19pZGV0YXBlX3JlYWRfbmFtZQotCShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaWRldGFwZV9uYW1lX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaWRlX2RyaXZlX3QJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopIGRhdGE7CisJaWRlX2RyaXZlX3QJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopIG0tPnByaXZhdGU7CiAJaWRldGFwZV90YXBlX3QJKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0JY2hhcgkJKm91dCA9IHBhZ2U7Ci0JaW50CQlsZW47CiAKLQlsZW4gPSBzcHJpbnRmKG91dCwgIiVzXG4iLCB0YXBlLT5uYW1lKTsKLQlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworCXNlcV9wcmludGYobSwgIiVzXG4iLCB0YXBlLT5uYW1lKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpZGV0YXBlX25hbWVfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpZGV0YXBlX25hbWVfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaWRldGFwZV9uYW1lX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaWRldGFwZV9uYW1lX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgaWRldGFwZV9wcm9jW10gPSB7Ci0JeyAiY2FwYWNpdHkiLAlTX0lGUkVHfFNfSVJVR08sCXByb2NfaWRlX3JlYWRfY2FwYWNpdHksIE5VTEwgfSwKLQl7ICJuYW1lIiwJU19JRlJFR3xTX0lSVUdPLAlwcm9jX2lkZXRhcGVfcmVhZF9uYW1lLAlOVUxMIH0sCi0JeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0KKwl7ICJjYXBhY2l0eSIsCVNfSUZSRUd8U19JUlVHTywJJmlkZV9jYXBhY2l0eV9wcm9jX2ZvcHMJfSwKKwl7ICJuYW1lIiwJU19JRlJFR3xTX0lSVUdPLAkmaWRldGFwZV9uYW1lX3Byb2NfZm9wcwl9LAorCXt9CiB9OwogCiBzdGF0aWMgaWRlX3Byb2NfZW50cnlfdCAqaWRlX3RhcGVfcHJvY19lbnRyaWVzKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTE5MzIsNyArMTkyNiw5IEBACiAJc3RydWN0IGdlbmRpc2sgKmc7CiAJaW50IG1pbm9yOwogCi0JaWYgKCFzdHJzdHIoImlkZS10YXBlIiwgZHJpdmUtPmRyaXZlcl9yZXEpKQorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKKworCWlmICghc3Ryc3RyKERSVl9OQU1FLCBkcml2ZS0+ZHJpdmVyX3JlcSkpCiAJCWdvdG8gZmFpbGVkOwogCiAJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfdGFwZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKaW5kZXggNzViODVhOC4uY2M4NjMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogdm9pZCBpZGVfdGZfcmVhZGJhY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQpAQCAtNTMsNyArNTMsNyBAQAogI2VuZGlmCiB9CiAKLWludCB0YXNrZmlsZV9saWJfZ2V0X2lkZW50aWZ5IChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4ICpidWYpCitpbnQgdGFza2ZpbGVfbGliX2dldF9pZGVudGlmeShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4ICpidWYpCiB7CiAJc3RydWN0IGlkZV9jbWQgY21kOwogCkBAIC04Niw3ICs4Niw3IEBACiAJaWYgKG9yaWdfY21kLT5wcm90b2NvbCA9PSBBVEFfUFJPVF9QSU8gJiYKIAkgICAgKG9yaWdfY21kLT50Zl9mbGFncyAmIElERV9URkxBR19NVUxUSV9QSU8pICYmCiAJICAgIGRyaXZlLT5tdWx0X2NvdW50ID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogbXVsdGltb2RlIG5vdCBzZXQhXG4iLCBkcml2ZS0+bmFtZSk7CisJCXByX2VycigiJXM6IG11bHRpbW9kZSBub3Qgc2V0IVxuIiwgZHJpdmUtPm5hbWUpOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCkBAIC0yMTQsNyArMjE0LDcgQEAKIAl9CiAKIAlpZiAoc3RhdCAmIEFUQV9CVVNZKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkcml2ZSBzdGlsbCBCVVNZIVxuIiwgZHJpdmUtPm5hbWUpOworCQlwcl9lcnIoIiVzOiBkcml2ZSBzdGlsbCBCVVNZIVxuIiwgZHJpdmUtPm5hbWUpOwogCiAJcmV0dXJuIHN0YXQ7CiB9CkBAIC0yMjUsOCArMjI1LDggQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IGh3aWYtPnNnX3RhYmxlOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqY3Vyc2cgPSBjbWQtPmN1cnNnOworCXVuc2lnbmVkIGxvbmcgdW5pbml0aWFsaXplZF92YXIoZmxhZ3MpOwogCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKIAl1OCAqYnVmOwogCkBAIC0yMzYsNiArMjM2LDcgQEAKIAogCXdoaWxlIChsZW4pIHsKIAkJdW5zaWduZWQgbnJfYnl0ZXMgPSBtaW4obGVuLCBjdXJzZy0+bGVuZ3RoIC0gY21kLT5jdXJzZ19vZnMpOworCQlpbnQgcGFnZV9pc19oaWdoOwogCiAJCWlmIChucl9ieXRlcyA+IFBBR0VfU0laRSkKIAkJCW5yX2J5dGVzID0gUEFHRV9TSVpFOwpAQCAtMjQ3LDcgKzI0OCw4IEBACiAJCXBhZ2UgPSBudGhfcGFnZShwYWdlLCAob2Zmc2V0ID4+IFBBR0VfU0hJRlQpKTsKIAkJb2Zmc2V0ICU9IFBBR0VfU0laRTsKIAotCQlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpCisJCXBhZ2VfaXNfaGlnaCA9IFBhZ2VIaWdoTWVtKHBhZ2UpOworCQlpZiAocGFnZV9pc19oaWdoKQogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAJCWJ1ZiA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX0JJT19TUkNfSVJRKSArIG9mZnNldDsKQEAgLTI2OCw3ICsyNzAsNyBAQAogCiAJCWt1bm1hcF9hdG9taWMoYnVmLCBLTV9CSU9fU1JDX0lSUSk7CiAKLQkJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKQorCQlpZiAocGFnZV9pc19oaWdoKQogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJCWxlbiAtPSBucl9ieXRlczsKQEAgLTMyMiwxMCArMzI0LDE3IEBACiB2b2lkIGlkZV9maW5pc2hfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwgdTggc3RhdCkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7Ci0JdTggZXJyID0gaWRlX3JlYWRfZXJyb3IoZHJpdmUpOworCXU4IGVyciA9IGlkZV9yZWFkX2Vycm9yKGRyaXZlKSwgbnNlY3QgPSBjbWQtPnRmLm5zZWN0OworCXU4IHNldF94ZmVyID0gISEoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19TRVRfWEZFUik7CiAKIAlpZGVfY29tcGxldGVfY21kKGRyaXZlLCBjbWQsIHN0YXQsIGVycik7CiAJcnEtPmVycm9ycyA9IGVycjsKKworCWlmIChlcnIgPT0gMCAmJiBzZXRfeGZlcikgeworCQlpZGVfc2V0X3hmZXJfcmF0ZShkcml2ZSwgbnNlY3QpOworCQlpZGVfZHJpdmVpZF91cGRhdGUoZHJpdmUpOworCX0KKwogCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgZXJyID8gLUVJTyA6IDAsIGJsa19ycV9ieXRlcyhycSkpOwogfQogCkBAIC0zOTgsOCArNDA3LDcgQEAKIAogCWlmIChpZGVfd2FpdF9zdGF0KCZzdGFydHN0b3AsIGRyaXZlLCBBVEFfRFJRLAogCQkJICBkcml2ZS0+YmFkX3dzdGF0LCBXQUlUX0RSUSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gRFJRIGFmdGVyIGlzc3VpbmcgJXNXUklURSVzXG4iLAotCQkJZHJpdmUtPm5hbWUsCisJCXByX2VycigiJXM6IG5vIERSUSBhZnRlciBpc3N1aW5nICVzV1JJVEUlc1xuIiwgZHJpdmUtPm5hbWUsCiAJCQkoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19NVUxUSV9QSU8pID8gIk1VTFQiIDogIiIsCiAJCQkoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkgPyAiX0VYVCIgOiAiIik7CiAJCXJldHVybiBzdGFydHN0b3A7CkBAIC00NDksNyArNDU3LDYgQEAKIAlibGtfcHV0X3JlcXVlc3QocnEpOwogCXJldHVybiBlcnJvcjsKIH0KLQogRVhQT1JUX1NZTUJPTChpZGVfcmF3X3Rhc2tmaWxlKTsKIAogaW50IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKQEAgLTQ3NSwxMCArNDgyLDkgQEAKIAl1MTYgbnNlY3QJCT0gMDsKIAljaGFyIF9fdXNlciAqYnVmID0gKGNoYXIgX191c2VyICopYXJnOwogCi0vLwlwcmludGsoIklERSBUYXNrZmlsZSAuLi5cbiIpOwotCiAJcmVxX3Rhc2sgPSBremFsbG9jKHRhc2tzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAocmVxX3Rhc2sgPT0gTlVMTCkgcmV0dXJuIC1FTk9NRU07CisJaWYgKHJlcV90YXNrID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCWlmIChjb3B5X2Zyb21fdXNlcihyZXFfdGFzaywgYnVmLCB0YXNrc2l6ZSkpIHsKIAkJa2ZyZWUocmVxX3Rhc2spOwogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQ4Niw3ICs0OTIsNyBAQAogCiAJdGFza291dCA9IHJlcV90YXNrLT5vdXRfc2l6ZTsKIAl0YXNraW4gID0gcmVxX3Rhc2stPmluX3NpemU7Ci0JCisKIAlpZiAodGFza2luID4gNjU1MzYgfHwgdGFza291dCA+IDY1NTM2KSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gYWJvcnQ7CkBAIC01NzYsNTEgKzU4Miw0OSBAQAogCWNtZC5wcm90b2NvbCA9IEFUQV9QUk9UX0RNQTsKIAogCXN3aXRjaCAocmVxX3Rhc2stPmRhdGFfcGhhc2UpIHsKLQkJY2FzZSBUQVNLRklMRV9NVUxUSV9PVVQ6Ci0JCQlpZiAoIWRyaXZlLT5tdWx0X2NvdW50KSB7Ci0JCQkJLyogKGhzKTogZ2l2ZSB1cCBpZiBtdWx0Y291bnQgaXMgbm90IHNldCAqLwotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIE11bHRpbW9kZSBXcml0ZSAiIFwKLQkJCQkJIm11bHRjb3VudCBpcyBub3Qgc2V0XG4iLAotCQkJCQlkcml2ZS0+bmFtZSwgX19mdW5jX18pOwotCQkJCWVyciA9IC1FUEVSTTsKLQkJCQlnb3RvIGFib3J0OwotCQkJfQotCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19NVUxUSV9QSU87Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBUQVNLRklMRV9PVVQ6Ci0JCQljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9QSU87Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBUQVNLRklMRV9PVVRfRE1BUToKLQkJY2FzZSBUQVNLRklMRV9PVVRfRE1BOgotCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKLQkJCW5zZWN0ID0gdGFza291dCAvIFNFQ1RPUl9TSVpFOwotCQkJZGF0YV9idWYgPSBvdXRidWY7Ci0JCQlicmVhazsKLQkJY2FzZSBUQVNLRklMRV9NVUxUSV9JTjoKLQkJCWlmICghZHJpdmUtPm11bHRfY291bnQpIHsKLQkJCQkvKiAoaHMpOiBnaXZlIHVwIGlmIG11bHRjb3VudCBpcyBub3Qgc2V0ICovCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgTXVsdGltb2RlIFJlYWQgZmFpbHVyZSAiIFwKLQkJCQkJIm11bHRjb3VudCBpcyBub3Qgc2V0XG4iLAotCQkJCQlkcml2ZS0+bmFtZSwgX19mdW5jX18pOwotCQkJCWVyciA9IC1FUEVSTTsKLQkJCQlnb3RvIGFib3J0OwotCQkJfQotCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19NVUxUSV9QSU87Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBUQVNLRklMRV9JTjoKLQkJCWNtZC5wcm90b2NvbCA9IEFUQV9QUk9UX1BJTzsKLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIFRBU0tGSUxFX0lOX0RNQVE6Ci0JCWNhc2UgVEFTS0ZJTEVfSU5fRE1BOgotCQkJbnNlY3QgPSB0YXNraW4gLyBTRUNUT1JfU0laRTsKLQkJCWRhdGFfYnVmID0gaW5idWY7Ci0JCQlicmVhazsKLQkJY2FzZSBUQVNLRklMRV9OT19EQVRBOgotCQkJY21kLnByb3RvY29sID0gQVRBX1BST1RfTk9EQVRBOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnIgPSAtRUZBVUxUOworCWNhc2UgVEFTS0ZJTEVfTVVMVElfT1VUOgorCQlpZiAoIWRyaXZlLT5tdWx0X2NvdW50KSB7CisJCQkvKiAoaHMpOiBnaXZlIHVwIGlmIG11bHRjb3VudCBpcyBub3Qgc2V0ICovCisJCQlwcl9lcnIoIiVzOiAlcyBNdWx0aW1vZGUgV3JpdGUgbXVsdGNvdW50IGlzIG5vdCBzZXRcbiIsCisJCQkJZHJpdmUtPm5hbWUsIF9fZnVuY19fKTsKKwkJCWVyciA9IC1FUEVSTTsKIAkJCWdvdG8gYWJvcnQ7CisJCX0KKwkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19NVUxUSV9QSU87CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgVEFTS0ZJTEVfT1VUOgorCQljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9QSU87CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgVEFTS0ZJTEVfT1VUX0RNQVE6CisJY2FzZSBUQVNLRklMRV9PVVRfRE1BOgorCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1dSSVRFOworCQluc2VjdCA9IHRhc2tvdXQgLyBTRUNUT1JfU0laRTsKKwkJZGF0YV9idWYgPSBvdXRidWY7CisJCWJyZWFrOworCWNhc2UgVEFTS0ZJTEVfTVVMVElfSU46CisJCWlmICghZHJpdmUtPm11bHRfY291bnQpIHsKKwkJCS8qIChocyk6IGdpdmUgdXAgaWYgbXVsdGNvdW50IGlzIG5vdCBzZXQgKi8KKwkJCXByX2VycigiJXM6ICVzIE11bHRpbW9kZSBSZWFkIG11bHRjb3VudCBpcyBub3Qgc2V0XG4iLAorCQkJCWRyaXZlLT5uYW1lLCBfX2Z1bmNfXyk7CisJCQllcnIgPSAtRVBFUk07CisJCQlnb3RvIGFib3J0OworCQl9CisJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfTVVMVElfUElPOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFRBU0tGSUxFX0lOOgorCQljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9QSU87CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgVEFTS0ZJTEVfSU5fRE1BUToKKwljYXNlIFRBU0tGSUxFX0lOX0RNQToKKwkJbnNlY3QgPSB0YXNraW4gLyBTRUNUT1JfU0laRTsKKwkJZGF0YV9idWYgPSBpbmJ1ZjsKKwkJYnJlYWs7CisJY2FzZSBUQVNLRklMRV9OT19EQVRBOgorCQljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gYWJvcnQ7CiAJfQogCiAJaWYgKHJlcV90YXNrLT5yZXFfY21kID09IElERV9EUklWRV9UQVNLX05PX0RBVEEpCkBAIC02MjksNyArNjMzLDcgQEAKIAkJbnNlY3QgPSAoY21kLmhvYi5uc2VjdCA8PCA4KSB8IGNtZC50Zi5uc2VjdDsKIAogCQlpZiAoIW5zZWN0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbi9vdXQgY29tbWFuZCB3aXRob3V0IGRhdGFcbiIsCisJCQlwcl9lcnIoIiVzOiBpbi9vdXQgY29tbWFuZCB3aXRob3V0IGRhdGFcbiIsCiAJCQkJCWRyaXZlLT5uYW1lKTsKIAkJCWVyciA9IC1FRkFVTFQ7CiAJCQlnb3RvIGFib3J0OwpAQCAtNjcxLDggKzY3NSw2IEBACiAJa2ZyZWUob3V0YnVmKTsKIAlrZnJlZShpbmJ1Zik7CiAKLS8vCXByaW50aygiSURFIFRhc2tmaWxlIGlvY3RsIGVuZGVkLiByYyA9ICVpXG4iLCBlcnIpOwotCiAJcmV0dXJuIGVycjsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGFsbV9iazM3MTAuYyBiL2RyaXZlcnMvaWRlL3BhbG1fYmszNzEwLmMKaW5kZXggM2MxZGMwMS4uZjhlZGRmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGFsbV9iazM3MTAuYworKysgYi9kcml2ZXJzL2lkZS9wYWxtX2JrMzcxMC5jCkBAIC0zMTgsNyArMzE4LDcgQEAKIAlpbnQgaSwgcmM7CiAJc3RydWN0IGlkZV9odyBodywgKmh3c1tdID0geyAmaHcgfTsKIAotCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIklERUNMSyIpOworCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CiAJaWYgKElTX0VSUihjbGspKQogCQlyZXR1cm4gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwppbmRleCBmNWM1ODZjLi5hNGU5ZGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwpAQCAtMTY5LDEwICsxNjksMTEgQEAKIHN0YXRpYyB2b2lkIGV0aGVyMTM5NF9oZWFkZXJfY2FjaGVfdXBkYXRlKHN0cnVjdCBoaF9jYWNoZSAqaGgsCiAJCQkJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYWRkcik7Ci1zdGF0aWMgaW50IGV0aGVyMTM5NF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBldGhlcjEzOTRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGV0aGVyMTM5NF9pc28oc3RydWN0IGhwc2JfaXNvICppc28pOwogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wczsKIAogc3RhdGljIGludCBldGhlcjEzOTRfd3JpdGUoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgaW50IHNyY2lkLCBpbnQgZGVzdGlkLAogCQkJICAgcXVhZGxldF90ICpkYXRhLCB1NjQgYWRkciwgc2l6ZV90IGxlbiwgdTE2IGZsYWdzKTsKQEAgLTEzMDAsNyArMTMwMSw2IEBACiAKIAlocHNiX2lzb19yZWN2X3JlbGVhc2VfcGFja2V0cyhpc28sIGkpOwogCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTU1NSw3ICsxNTU1LDggQEAKIH0KIAogLyogVHJhbnNtaXQgYSBwYWNrZXQgKGNhbGxlZCBieSBrZXJuZWwpICovCi1zdGF0aWMgaW50IGV0aGVyMTM5NF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGV0aGVyMTM5NF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGV0aDEzOTRoZHIgaGRyX2J1ZjsKIAlzdHJ1Y3QgZXRoMTM5NF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE2OTQsMTQgKzE2OTUsNiBAQAogCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JLyoKLQkgKiBGSVhNRTogQWNjb3JkaW5nIHRvIGEgcGF0Y2ggZnJvbSAyMDAzLTAyLTI2LCAicmV0dXJuaW5nIG5vbi16ZXJvCi0JICogY2F1c2VzIHNlcmlvdXMgcHJvYmxlbXMiIGhlcmUsIGFsbGVnZWRseS4gIEJlZm9yZSB0aGF0IHBhdGNoLAotCSAqIC1FUlJOTyB3YXMgcmV0dXJuZWQgd2hpY2ggaXMgbm90IGFwcHJvcHJpYXRlIHVuZGVyIExpbnV4IDIuNi4KLQkgKiBQZXJoYXBzIG1vcmUgbmVlZHMgdG8gYmUgZG9uZT8gIFN0b3AgdGhlIHF1ZXVlIGluIHNlcmlvdXMKLQkgKiBjb25kaXRpb25zIGFuZCByZXN0YXJ0IGl0IGVsc2V3aGVyZT8KLQkgKi8KLQkvKiByZXR1cm4gTkVUREVWX1RYX0JVU1k7ICovCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtMTcxMiw3ICsxNzA1LDcgQEAKIAlzdHJjcHkoaW5mby0+YnVzX2luZm8sICJpZWVlMTM5NCIpOyAvKiBGSVhNRSBwcm92aWRlIG1vcmUgZGV0YWlsPyAqLwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBldGhlcjEzOTRfZ2V0X2RydmluZm8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jIGIvZHJpdmVycy9pZWVlODAyMTU0L2Zha2VoYXJkLmMKaW5kZXggMDM4NDE0NC4uOTZhMjk1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlODAyMTU0L2Zha2VoYXJkLmMKKysrIGIvZHJpdmVycy9pZWVlODAyMTU0L2Zha2VoYXJkLmMKQEAgLTI2LDExICsyNiwyMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogCi0jaW5jbHVkZSA8bmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0L25ldGRldmljZS5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0L21hY19kZWYuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5oPgorI2luY2x1ZGUgPG5ldC9hZl9pZWVlODAyMTU0Lmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxNTRfbmV0ZGV2Lmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxNTQuaD4KKyNpbmNsdWRlIDxuZXQvbmw4MDIxNTQuaD4KKyNpbmNsdWRlIDxuZXQvd3Bhbi1waHkuaD4KIAorc3RydWN0IHdwYW5fcGh5ICpuZXRfdG9fcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYtPmRldi5wYXJlbnQsIHN0cnVjdCB3cGFuX3BoeSwgZGV2KTsKK30KKworLyoqCisgKiBmYWtlX2dldF9wYW5faWQgLSBSZXRyaWV2ZSB0aGUgUEFOIElEIG9mIHRoZSBkZXZpY2UuCisgKiBAZGV2OiBUaGUgbmV0d29yayBkZXZpY2UgdG8gcmV0cmlldmUgdGhlIFBBTiBvZi4KKyAqCisgKiBSZXR1cm4gdGhlIElEIG9mIHRoZSBQQU4gZnJvbSB0aGUgUElCLgorICovCiBzdGF0aWMgdTE2IGZha2VfZ2V0X3Bhbl9pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCUJVR19PTihkZXYtPnR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpOwpAQCAtMzgsNiArNTAsMTQgQEAKIAlyZXR1cm4gMHhlYmExOwogfQogCisvKioKKyAqIGZha2VfZ2V0X3Nob3J0X2FkZHIgLSBSZXRyaWV2ZSB0aGUgc2hvcnQgYWRkcmVzcyBvZiB0aGUgZGV2aWNlLgorICogQGRldjogVGhlIG5ldHdvcmsgZGV2aWNlIHRvIHJldHJpZXZlIHRoZSBzaG9ydCBhZGRyZXNzIG9mLgorICoKKyAqIFJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgc2hvcnQtZm9ybSBhZGRyZXNzIGNhY2hlZCBmb3IgdGhpcworICogZGV2aWNlLiBJZiB0aGUgZGV2aWNlIGhhcyBub3QgeWV0IGhhZCBhIHNob3J0IGFkZHJlc3MgYXNzaWduZWQKKyAqIHRoZW4gdGhpcyBzaG91bGQgcmV0dXJuIDB4RkZGRiB0byBpbmRpY2F0ZSBhIGxhY2sgb2YgYXNzb2NpYXRpb24uCisgKi8KIHN0YXRpYyB1MTYgZmFrZV9nZXRfc2hvcnRfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCUJVR19PTihkZXYtPnR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpOwpAQCAtNDUsNiArNjUsMTkgQEAKIAlyZXR1cm4gMHgxOwogfQogCisvKioKKyAqIGZha2VfZ2V0X2RzbiAtIFJldHJpZXZlIHRoZSBEU04gb2YgdGhlIGRldmljZS4KKyAqIEBkZXY6IFRoZSBuZXR3b3JrIGRldmljZSB0byByZXRyaWV2ZSB0aGUgRFNOIGZvci4KKyAqCisgKiBSZXR1cm5zIHRoZSBJRUVFIDgwMi4xNS40IERTTiBmb3IgdGhlIG5ldHdvcmsgZGV2aWNlLgorICogVGhlIERTTiBpcyB0aGUgc2VxdWVuY2UgbnVtYmVyIHdoaWNoIHdpbGwgYmUgYWRkZWQgdG8gZWFjaAorICogcGFja2V0IG9yIE1BQyBjb21tYW5kIGZyYW1lIGJ5IHRoZSBNQUMgZHVyaW5nIHRyYW5zbWlzc2lvbi4KKyAqCisgKiBEU04gbWVhbnMgJ0RhdGEgU2VxdWVuY2UgTnVtYmVyJy4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy4yLjEuMiBvZiB0aGUgSUVFRSA4MDIuMTUuNC0yMDA2CisgKiAgICAgICBkb2N1bWVudC4KKyAqLwogc3RhdGljIHU4IGZha2VfZ2V0X2RzbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCUJVR19PTihkZXYtPnR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpOwpAQCAtNTIsNiArODUsMTkgQEAKIAlyZXR1cm4gMHgwMDsgLyogRFNOIGFyZSBpbXBsZW1lbnRlZCBpbiBIVywgc28gcmV0dXJuIGp1c3QgMCAqLwogfQogCisvKioKKyAqIGZha2VfZ2V0X2JzbiAtIFJldHJpZXZlIHRoZSBCU04gb2YgdGhlIGRldmljZS4KKyAqIEBkZXY6IFRoZSBuZXR3b3JrIGRldmljZSB0byByZXRyaWV2ZSB0aGUgQlNOIGZvci4KKyAqCisgKiBSZXR1cm5zIHRoZSBJRUVFIDgwMi4xNS40IEJTTiBmb3IgdGhlIG5ldHdvcmsgZGV2aWNlLgorICogVGhlIEJTTiBpcyB0aGUgc2VxdWVuY2UgbnVtYmVyIHdoaWNoIHdpbGwgYmUgYWRkZWQgdG8gZWFjaAorICogYmVhY29uIGZyYW1lIHNlbnQgYnkgdGhlIE1BQy4KKyAqCisgKiBCU04gbWVhbnMgJ0JlYWNvbiBTZXF1ZW5jZSBOdW1iZXInLgorICoKKyAqIE5vdGU6IFRoaXMgaXMgaW4gc2VjdGlvbiA3LjIuMS4yIG9mIHRoZSBJRUVFIDgwMi4xNS40LTIwMDYKKyAqICAgICAgIGRvY3VtZW50LgorICovCiBzdGF0aWMgdTggZmFrZV9nZXRfYnNuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJQlVHX09OKGRldi0+dHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCk7CkBAIC01OSw0MCArMTA1LDEzMCBAQAogCXJldHVybiAweDAwOyAvKiBCU04gYXJlIGltcGxlbWVudGVkIGluIEhXLCBzbyByZXR1cm4ganVzdCAwICovCiB9CiAKKy8qKgorICogZmFrZV9hc3NvY19yZXEgLSBNYWtlIGFuIGFzc29jaWF0aW9uIHJlcXVlc3QgdG8gdGhlIEhXLgorICogQGRldjogVGhlIG5ldHdvcmsgZGV2aWNlIHdoaWNoIHdlIGFyZSBhc3NvY2lhdGluZyB0byBhIG5ldHdvcmsuCisgKiBAYWRkcjogVGhlIGNvb3JkaW5hdG9yIHdpdGggd2hpY2ggd2Ugd2lzaCB0byBhc3NvY2lhdGUuCisgKiBAY2hhbm5lbDogVGhlIGNoYW5uZWwgb24gd2hpY2ggdG8gYXNzb2NpYXRlLgorICogQGNhcDogVGhlIGNhcGFiaWxpdHkgaW5mb3JtYXRpb24gZmllbGQgdG8gdXNlIGluIHRoZSBhc3NvY2lhdGlvbi4KKyAqCisgKiBTdGFydCBhbiBhc3NvY2lhdGlvbiB3aXRoIGEgY29vcmRpbmF0b3IuIFRoZSBjb29yZGluYXRvcidzIGFkZHJlc3MKKyAqIGFuZCBQQU4gSUQgY2FuIGJlIGZvdW5kIGluIEBhZGRyLgorICoKKyAqIE5vdGU6IFRoaXMgaXMgaW4gc2VjdGlvbiA3LjMuMSBhbmQgNy41LjMuMSBvZiB0aGUgSUVFRQorICogICAgICAgODAyLjE1LjQtMjAwNiBkb2N1bWVudC4KKyAqLwogc3RhdGljIGludCBmYWtlX2Fzc29jX3JlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICphZGRyLCB1OCBjaGFubmVsLCB1OCBjYXApCisJCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgKmFkZHIsIHU4IGNoYW5uZWwsIHU4IHBhZ2UsIHU4IGNhcCkKIHsKKwlzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSA9IG5ldF90b19waHkoZGV2KTsKKworCW11dGV4X2xvY2soJnBoeS0+cGliX2xvY2spOworCXBoeS0+Y3VycmVudF9jaGFubmVsID0gY2hhbm5lbDsKKwlwaHktPmN1cnJlbnRfcGFnZSA9IHBhZ2U7CisJbXV0ZXhfdW5sb2NrKCZwaHktPnBpYl9sb2NrKTsKKwogCS8qIFdlIHNpbXBseSBlbXVsYXRlIGl0IGhlcmUgKi8KIAlyZXR1cm4gaWVlZTgwMjE1NF9ubF9hc3NvY19jb25maXJtKGRldiwgZmFrZV9nZXRfc2hvcnRfYWRkcihkZXYpLAogCQkJSUVFRTgwMjE1NF9TVUNDRVNTKTsKIH0KIAorLyoqCisgKiBmYWtlX2Fzc29jX3Jlc3AgLSBTZW5kIGFuIGFzc29jaWF0aW9uIHJlc3BvbnNlIHRvIGEgZGV2aWNlLgorICogQGRldjogVGhlIG5ldHdvcmsgZGV2aWNlIG9uIHdoaWNoIHRvIHNlbmQgdGhlIHJlc3BvbnNlLgorICogQGFkZHI6IFRoZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgdG8gcmVzcG9uZCB0by4KKyAqIEBzaG9ydF9hZGRyOiBUaGUgYXNzaWduZWQgc2hvcnQgYWRkcmVzcyBmb3IgdGhlIGRldmljZSAoaWYgYW55KS4KKyAqIEBzdGF0dXM6IFRoZSByZXN1bHQgb2YgdGhlIGFzc29jaWF0aW9uIHJlcXVlc3QuCisgKgorICogUXVldWUgdGhlIGFzc29jaWF0aW9uIHJlc3BvbnNlIG9mIHRoZSBjb29yZGluYXRvciB0byBhbm90aGVyCisgKiBkZXZpY2UncyBhdHRlbXB0IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBuZXR3b3JrIHdoaWNoIHdlCisgKiBjb29yZGluYXRlLiBUaGlzIGlzIHRoZW4gYWRkZWQgdG8gdGhlIGluZGlyZWN0LXNlbmQgcXVldWUgdG8gYmUKKyAqIHRyYW5zbWl0dGVkIHRvIHRoZSBlbmQgZGV2aWNlIHdoZW4gaXQgcG9sbHMgZm9yIGRhdGEuCisgKgorICogTm90ZTogVGhpcyBpcyBpbiBzZWN0aW9uIDcuMy4yIGFuZCA3LjUuMy4xIG9mIHRoZSBJRUVFCisgKiAgICAgICA4MDIuMTUuNC0yMDA2IGRvY3VtZW50LgorICovCiBzdGF0aWMgaW50IGZha2VfYXNzb2NfcmVzcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICphZGRyLCB1MTYgc2hvcnRfYWRkciwgdTggc3RhdHVzKQogewogCXJldHVybiAwOwogfQogCisvKioKKyAqIGZha2VfZGlzYXNzb2NfcmVxIC0gRGlzYXNzb2NpYXRlIGEgZGV2aWNlIGZyb20gYSBuZXR3b3JrLgorICogQGRldjogVGhlIG5ldHdvcmsgZGV2aWNlIG9uIHdoaWNoIHdlJ3JlIGRpc2Fzc29jaWF0aW5nIGEgZGV2aWNlLgorICogQGFkZHI6IFRoZSBkZXZpY2UgdG8gZGlzYXNzb2NpYXRlIGZyb20gdGhlIG5ldHdvcmsuCisgKiBAcmVhc29uOiBUaGUgcmVhc29uIHRvIGdpdmUgdG8gdGhlIGRldmljZSBmb3IgYmVpbmcgZGlzYXNzb2NpYXRlZC4KKyAqCisgKiBUaGlzIHNlbmRzIGEgZGlzYXNzb2NpYXRpb24gbm90aWZpY2F0aW9uIHRvIHRoZSBkZXZpY2UgYmVpbmcKKyAqIGRpc2Fzc29jaWF0ZWQgZnJvbSB0aGUgbmV0d29yay4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy41LjMuMiBvZiB0aGUgSUVFRSA4MDIuMTUuNC0yMDA2CisgKiAgICAgICBkb2N1bWVudCwgd2l0aCB0aGUgcmVhc29uIGRlc2NyaWJlZCBpbiA3LjMuMy4yLgorICovCiBzdGF0aWMgaW50IGZha2VfZGlzYXNzb2NfcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgKmFkZHIsIHU4IHJlYXNvbikKIHsKIAlyZXR1cm4gaWVlZTgwMjE1NF9ubF9kaXNhc3NvY19jb25maXJtKGRldiwgSUVFRTgwMjE1NF9TVUNDRVNTKTsKIH0KIAorLyoqCisgKiBmYWtlX3N0YXJ0X3JlcSAtIFN0YXJ0IGFuIElFRUUgODAyLjE1LjQgUEFOLgorICogQGRldjogVGhlIG5ldHdvcmsgZGV2aWNlIG9uIHdoaWNoIHRvIHN0YXJ0IHRoZSBQQU4uCisgKiBAYWRkcjogVGhlIGNvb3JkaW5hdG9yIGFkZHJlc3MgdG8gdXNlIHdoZW4gc3RhcnRpbmcgdGhlIFBBTi4KKyAqIEBjaGFubmVsOiBUaGUgY2hhbm5lbCBvbiB3aGljaCB0byBzdGFydCB0aGUgUEFOLgorICogQGJjbl9vcmQ6IEJlYWNvbiBvcmRlci4KKyAqIEBzZl9vcmQ6IFN1cGVyZnJhbWUgb3JkZXIuCisgKiBAcGFuX2Nvb3JkOiBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgdGhlIFBBTiBjb29yZGluYXRvciBvciBqdXN0CisgKiAgICAgICAgICAgICByZXF1ZXN0aW5nIGEgcmVhbGlnbm1lbnQgcGVyaGFwcz8KKyAqIEBibHg6IEJhdHRlcnkgTGlmZSBFeHRlbnNpb24gZmVhdHVyZSBiaXRmaWVsZC4KKyAqIEBjb29yZF9yZWFsaWduOiBTb21ldGhpbmcgdG8gcmVhbGlnbiBzb21ldGhpbmcgZWxzZS4KKyAqCisgKiBJZiBwYW5fY29vcmQgaXMgbm9uLXplcm8gdGhlbiB0aGlzIHN0YXJ0cyBhIG5ldHdvcmsgd2l0aCB0aGUKKyAqIHByb3ZpZGVkIHBhcmFtZXRlcnMsIG90aGVyd2lzZSBpdCBhdHRlbXB0cyBhIGNvb3JkaW5hdG9yCisgKiByZWFsaWdubWVudCBvZiB0aGUgc3RhdGVkIG5ldHdvcmsgaW5zdGVhZC4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy41LjIuMyBvZiB0aGUgSUVFRSA4MDIuMTUuNC0yMDA2CisgKiBkb2N1bWVudCwgd2l0aCA3LjMuOCBkZXNjcmliaW5nIGNvb3JkaW5hdG9yIHJlYWxpZ25tZW50LgorICovCiBzdGF0aWMgaW50IGZha2Vfc3RhcnRfcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlODAyMTU0X2FkZHIgKmFkZHIsCi0JCQkJdTggY2hhbm5lbCwKKwkJCQl1OCBjaGFubmVsLCB1OCBwYWdlLAogCQkJCXU4IGJjbl9vcmQsIHU4IHNmX29yZCwgdTggcGFuX2Nvb3JkLCB1OCBibHgsCiAJCQkJdTggY29vcmRfcmVhbGlnbikKIHsKKwlzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSA9IG5ldF90b19waHkoZGV2KTsKKworCW11dGV4X2xvY2soJnBoeS0+cGliX2xvY2spOworCXBoeS0+Y3VycmVudF9jaGFubmVsID0gY2hhbm5lbDsKKwlwaHktPmN1cnJlbnRfcGFnZSA9IHBhZ2U7CisJbXV0ZXhfdW5sb2NrKCZwaHktPnBpYl9sb2NrKTsKKworCS8qIFdlIGRvbid0IGVtdWxhdGUgYmVhY29ucyBoZXJlIGF0IGFsbCwgc28gU1RBUlQgc2hvdWxkIGZhaWwgKi8KKwlpZWVlODAyMTU0X25sX3N0YXJ0X2NvbmZpcm0oZGV2LCBJRUVFODAyMTU0X0lOVkFMSURfUEFSQU1FVEVSKTsKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBmYWtlX3NjYW5fcmVxIC0gU3RhcnQgYSBjaGFubmVsIHNjYW4uCisgKiBAZGV2OiBUaGUgbmV0d29yayBkZXZpY2Ugb24gd2hpY2ggdG8gcGVyZm9ybSBhIGNoYW5uZWwgc2Nhbi4KKyAqIEB0eXBlOiBUaGUgdHlwZSBvZiBzY2FuIHRvIHBlcmZvcm0uCisgKiBAY2hhbm5lbHM6IFRoZSBjaGFubmVsIGJpdG1hc2sgdG8gc2Nhbi4KKyAqIEBkdXJhdGlvbjogSG93IGxvbmcgdG8gc3BlbmQgb24gZWFjaCBjaGFubmVsLgorICoKKyAqIFRoaXMgc3RhcnRzIGVpdGhlciBhIHBhc3NpdmUgKGVuZXJneSkgc2NhbiBvciBhbiBhY3RpdmUgKFBBTikgc2NhbgorICogb24gdGhlIGNoYW5uZWxzIGluZGljYXRlZCBpbiB0aGUgQGNoYW5uZWxzIGJpdG1hc2suIFRoZSBkdXJhdGlvbiBvZgorICogdGhlIHNjYW4gaXMgbWVhc3VyZWQgaW4gdGVybXMgb2Ygc3VwZXJmcmFtZSBkdXJhdGlvbi4gU3BlY2lmaWNhbGx5LAorICogdGhlIHNjYW4gd2lsbCBzcGVuZCBhQmFzZVN1cGVyRnJhbWVEdXJhdGlvbiAqICgoMl5uKSArIDEpIG9uIGVhY2gKKyAqIGNoYW5uZWwuCisgKgorICogTm90ZTogVGhpcyBpcyBpbiBzZWN0aW9uIDcuNS4yLjEgb2YgdGhlIElFRUUgODAyLjE1LjQtMjAwNiBkb2N1bWVudC4KKyAqLwogc3RhdGljIGludCBmYWtlX3NjYW5fcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHR5cGUsIHUzMiBjaGFubmVscywKLQkJdTggZHVyYXRpb24pCisJCXU4IHBhZ2UsIHU4IGR1cmF0aW9uKQogewogCXU4IGVkbFsyN10gPSB7fTsKIAlyZXR1cm4gaWVlZTgwMjE1NF9ubF9zY2FuX2NvbmZpcm0oZGV2LCBJRUVFODAyMTU0X1NVQ0NFU1MsIHR5cGUsCi0JCQljaGFubmVscywKKwkJCWNoYW5uZWxzLCBwYWdlLAogCQkJdHlwZSA9PSBJRUVFODAyMTU0X01BQ19TQ0FOX0VEID8gZWRsIDogTlVMTCk7CiB9CiAKQEAgLTEyMSw3ICsyNTcsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGllZWU4MDIxNTRfZmFrZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaWVlZTgwMjE1NF9mYWtlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlza2ItPmlpZiA9IGRldi0+aWZpbmRleDsKIAlza2ItPmRldiA9IGRldjsKQEAgLTEzMiw3ICsyNjksNyBAQAogCiAJLyogRklYTUU6IGRvIGhhcmR3YXJlIHdvcmsgaGVyZSAuLi4gKi8KIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApAQCAtMTc0LDYgKzMxMSwxNCBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gaWVlZTgwMjE1NF9mYWtlX21hY19hZGRyLAogfTsKIAorc3RhdGljIHZvaWQgaWVlZTgwMjE1NF9mYWtlX2Rlc3RydWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdwYW5fcGh5ICpwaHkgPSBuZXRfdG9fcGh5KGRldik7CisKKwl3cGFuX3BoeV91bnJlZ2lzdGVyKHBoeSk7CisJZnJlZV9uZXRkZXYoZGV2KTsKKwl3cGFuX3BoeV9mcmVlKHBoeSk7Cit9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxNTRfZmFrZV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTg2LDIyICszMzEsMzQgQEAKIAlkZXYtPnR5cGUJCT0gQVJQSFJEX0lFRUU4MDIxNTQ7CiAJZGV2LT5mbGFncwkJPSBJRkZfTk9BUlAgfCBJRkZfQlJPQURDQVNUOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSAwOworCWRldi0+ZGVzdHJ1Y3RvcgkJPSBpZWVlODAyMTU0X2Zha2VfZGVzdHJ1Y3Q7CiB9CiAKIAogc3RhdGljIGludCBfX2RldmluaXQgaWVlZTgwMjE1NGZha2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0KLQkJYWxsb2NfbmV0ZGV2KDAsICJoYXJkd3BhbiVkIiwgaWVlZTgwMjE1NF9mYWtlX3NldHVwKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCB3cGFuX3BoeSAqcGh5ID0gd3Bhbl9waHlfYWxsb2MoMCk7CiAJaW50IGVycjsKIAotCWlmICghZGV2KQorCWlmICghcGh5KQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWRldiA9IGFsbG9jX25ldGRldigwLCAiaGFyZHdwYW4lZCIsIGllZWU4MDIxNTRfZmFrZV9zZXR1cCk7CisJaWYgKCFkZXYpIHsKKwkJd3Bhbl9waHlfZnJlZShwaHkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwaHktPmRldi5wbGF0Zm9ybV9kYXRhID0gZGV2OworCiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICJceGJhXHhiZVx4Y2FceGZlXHhkZVx4YWRceGJlXHhlZiIsCiAJCQlkZXYtPmFkZHJfbGVuKTsKIAltZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOwogCisJcGh5LT5jaGFubmVsc19zdXBwb3J0ZWQgPSAoMSA8PCAyNykgLSAxOworCXBoeS0+dHJhbnNtaXRfcG93ZXIgPSAweGJmOworCiAJZGV2LT5uZXRkZXZfb3BzID0gJmZha2Vfb3BzOwogCWRldi0+bWxfcHJpdiA9ICZmYWtlX21sbWU7CiAKQEAgLTIxNSwxNSArMzcyLDE4IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOworCVNFVF9ORVRERVZfREVWKGRldiwgJnBoeS0+ZGV2KTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKKwllcnIgPSB3cGFuX3BoeV9yZWdpc3RlcigmcGRldi0+ZGV2LCBwaHkpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwogCi0KIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQWRkZWQgaWVlZTgwMjE1NCBIYXJkTUFDIGhhcmR3YXJlXG4iKTsKIAlyZXR1cm4gMDsKIApAQCAtMjM2LDcgKzM5Niw2IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JZnJlZV9uZXRkZXYoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jCmluZGV4IDhmOTUwOWUuLjU1ZDA5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2l3Y20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMKQEAgLTM2Miw2ICszNjIsNyBAQAogCQkgKiBJbiBlaXRoZXIgY2FzZSwgbXVzdCB0ZWxsIHRoZSBwcm92aWRlciB0byByZWplY3QuCiAJCSAqLwogCQljbV9pZF9wcml2LT5zdGF0ZSA9IElXX0NNX1NUQVRFX0RFU1RST1lJTkc7CisJCWNtX2lkLT5kZXZpY2UtPml3Y20tPnJlamVjdChjbV9pZCwgTlVMTCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgSVdfQ01fU1RBVEVfQ09OTl9TRU5UOgogCWNhc2UgSVdfQ01fU1RBVEVfREVTVFJPWUlORzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKaW5kZXggZGU5MjJhMC4uNzUyMjAwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNyBWb2x0YWlyZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBNZWxsYW5veCBUZWNobm9sb2dpZXMgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBITlIgQ29uc3VsdGluZy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtNDUsMTQgKzQ2LDIxIEBACiBNT0RVTEVfQVVUSE9SKCJIYWwgUm9zZW5zdG9jayIpOwogTU9EVUxFX0FVVEhPUigiU2VhbiBIZWZ0eSIpOwogCitpbnQgbWFkX3NlbmRxX3NpemUgPSBJQl9NQURfUVBfU0VORF9TSVpFOworaW50IG1hZF9yZWN2cV9zaXplID0gSUJfTUFEX1FQX1JFQ1ZfU0laRTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHNlbmRfcXVldWVfc2l6ZSwgbWFkX3NlbmRxX3NpemUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNlbmRfcXVldWVfc2l6ZSwgIlNpemUgb2Ygc2VuZCBxdWV1ZSBpbiBudW1iZXIgb2Ygd29yayByZXF1ZXN0cyIpOworbW9kdWxlX3BhcmFtX25hbWVkKHJlY3ZfcXVldWVfc2l6ZSwgbWFkX3JlY3ZxX3NpemUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlY3ZfcXVldWVfc2l6ZSwgIlNpemUgb2YgcmVjZWl2ZSBxdWV1ZSBpbiBudW1iZXIgb2Ygd29yayByZXF1ZXN0cyIpOworCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmliX21hZF9jYWNoZTsKIAogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgaWJfbWFkX3BvcnRfbGlzdDsKIHN0YXRpYyB1MzIgaWJfbWFkX2NsaWVudF9pZCA9IDA7CiAKIC8qIFBvcnQgbGlzdCBsb2NrICovCi1zdGF0aWMgc3BpbmxvY2tfdCBpYl9tYWRfcG9ydF9saXN0X2xvY2s7Ci0KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaWJfbWFkX3BvcnRfbGlzdF9sb2NrKTsKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIHN0YXRpYyBpbnQgbWV0aG9kX2luX3VzZShzdHJ1Y3QgaWJfbWFkX21nbXRfbWV0aG9kX3RhYmxlICoqbWV0aG9kLApAQCAtMTk3NCw3ICsxOTgyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGRlbGF5OwogCiAJaWYgKGxpc3RfZW1wdHkoJm1hZF9hZ2VudF9wcml2LT53YWl0X2xpc3QpKSB7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJm1hZF9hZ2VudF9wcml2LT50aW1lZF93b3JrKTsKKwkJX19jYW5jZWxfZGVsYXllZF93b3JrKCZtYWRfYWdlbnRfcHJpdi0+dGltZWRfd29yayk7CiAJfSBlbHNlIHsKIAkJbWFkX3NlbmRfd3IgPSBsaXN0X2VudHJ5KG1hZF9hZ2VudF9wcml2LT53YWl0X2xpc3QubmV4dCwKIAkJCQkJIHN0cnVjdCBpYl9tYWRfc2VuZF93cl9wcml2YXRlLApAQCAtMTk4Myw3ICsxOTkxLDcgQEAKIAkJaWYgKHRpbWVfYWZ0ZXIobWFkX2FnZW50X3ByaXYtPnRpbWVvdXQsCiAJCQkgICAgICAgbWFkX3NlbmRfd3ItPnRpbWVvdXQpKSB7CiAJCQltYWRfYWdlbnRfcHJpdi0+dGltZW91dCA9IG1hZF9zZW5kX3dyLT50aW1lb3V0OwotCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmbWFkX2FnZW50X3ByaXYtPnRpbWVkX3dvcmspOworCQkJX19jYW5jZWxfZGVsYXllZF93b3JrKCZtYWRfYWdlbnRfcHJpdi0+dGltZWRfd29yayk7CiAJCQlkZWxheSA9IG1hZF9zZW5kX3dyLT50aW1lb3V0IC0gamlmZmllczsKIAkJCWlmICgobG9uZylkZWxheSA8PSAwKQogCQkJCWRlbGF5ID0gMTsKQEAgLTIwMjMsNyArMjAzMSw3IEBACiAKIAkvKiBSZXNjaGVkdWxlIGEgd29yayBpdGVtIGlmIHdlIGhhdmUgYSBzaG9ydGVyIHRpbWVvdXQgKi8KIAlpZiAobWFkX2FnZW50X3ByaXYtPndhaXRfbGlzdC5uZXh0ID09ICZtYWRfc2VuZF93ci0+YWdlbnRfbGlzdCkgewotCQljYW5jZWxfZGVsYXllZF93b3JrKCZtYWRfYWdlbnRfcHJpdi0+dGltZWRfd29yayk7CisJCV9fY2FuY2VsX2RlbGF5ZWRfd29yaygmbWFkX2FnZW50X3ByaXYtPnRpbWVkX3dvcmspOwogCQlxdWV1ZV9kZWxheWVkX3dvcmsobWFkX2FnZW50X3ByaXYtPnFwX2luZm8tPnBvcnRfcHJpdi0+d3EsCiAJCQkJICAgJm1hZF9hZ2VudF9wcml2LT50aW1lZF93b3JrLCBkZWxheSk7CiAJfQpAQCAtMjczNiw4ICsyNzQ0LDggQEAKIAlxcF9pbml0X2F0dHIuc2VuZF9jcSA9IHFwX2luZm8tPnBvcnRfcHJpdi0+Y3E7CiAJcXBfaW5pdF9hdHRyLnJlY3ZfY3EgPSBxcF9pbmZvLT5wb3J0X3ByaXYtPmNxOwogCXFwX2luaXRfYXR0ci5zcV9zaWdfdHlwZSA9IElCX1NJR05BTF9BTExfV1I7Ci0JcXBfaW5pdF9hdHRyLmNhcC5tYXhfc2VuZF93ciA9IElCX01BRF9RUF9TRU5EX1NJWkU7Ci0JcXBfaW5pdF9hdHRyLmNhcC5tYXhfcmVjdl93ciA9IElCX01BRF9RUF9SRUNWX1NJWkU7CisJcXBfaW5pdF9hdHRyLmNhcC5tYXhfc2VuZF93ciA9IG1hZF9zZW5kcV9zaXplOworCXFwX2luaXRfYXR0ci5jYXAubWF4X3JlY3Zfd3IgPSBtYWRfcmVjdnFfc2l6ZTsKIAlxcF9pbml0X2F0dHIuY2FwLm1heF9zZW5kX3NnZSA9IElCX01BRF9TRU5EX1JFUV9NQVhfU0c7CiAJcXBfaW5pdF9hdHRyLmNhcC5tYXhfcmVjdl9zZ2UgPSBJQl9NQURfUkVDVl9SRVFfTUFYX1NHOwogCXFwX2luaXRfYXR0ci5xcF90eXBlID0gcXBfdHlwZTsKQEAgLTI3NTIsOCArMjc2MCw4IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCS8qIFVzZSBtaW5pbXVtIHF1ZXVlIHNpemVzIHVubGVzcyB0aGUgQ1EgaXMgcmVzaXplZCAqLwotCXFwX2luZm8tPnNlbmRfcXVldWUubWF4X2FjdGl2ZSA9IElCX01BRF9RUF9TRU5EX1NJWkU7Ci0JcXBfaW5mby0+cmVjdl9xdWV1ZS5tYXhfYWN0aXZlID0gSUJfTUFEX1FQX1JFQ1ZfU0laRTsKKwlxcF9pbmZvLT5zZW5kX3F1ZXVlLm1heF9hY3RpdmUgPSBtYWRfc2VuZHFfc2l6ZTsKKwlxcF9pbmZvLT5yZWN2X3F1ZXVlLm1heF9hY3RpdmUgPSBtYWRfcmVjdnFfc2l6ZTsKIAlyZXR1cm4gMDsKIAogZXJyb3I6CkBAIC0yNzkyLDcgKzI4MDAsNyBAQAogCWluaXRfbWFkX3FwKHBvcnRfcHJpdiwgJnBvcnRfcHJpdi0+cXBfaW5mb1swXSk7CiAJaW5pdF9tYWRfcXAocG9ydF9wcml2LCAmcG9ydF9wcml2LT5xcF9pbmZvWzFdKTsKIAotCWNxX3NpemUgPSAoSUJfTUFEX1FQX1NFTkRfU0laRSArIElCX01BRF9RUF9SRUNWX1NJWkUpICogMjsKKwljcV9zaXplID0gKG1hZF9zZW5kcV9zaXplICsgbWFkX3JlY3ZxX3NpemUpICogMjsKIAlwb3J0X3ByaXYtPmNxID0gaWJfY3JlYXRlX2NxKHBvcnRfcHJpdi0+ZGV2aWNlLAogCQkJCSAgICAgaWJfbWFkX3RocmVhZF9jb21wbGV0aW9uX2hhbmRsZXIsCiAJCQkJICAgICBOVUxMLCBwb3J0X3ByaXYsIGNxX3NpemUsIDApOwpAQCAtMjk4NCw3ICsyOTkyLDExIEBACiB7CiAJaW50IHJldDsKIAotCXNwaW5fbG9ja19pbml0KCZpYl9tYWRfcG9ydF9saXN0X2xvY2spOworCW1hZF9yZWN2cV9zaXplID0gbWluKG1hZF9yZWN2cV9zaXplLCBJQl9NQURfUVBfTUFYX1NJWkUpOworCW1hZF9yZWN2cV9zaXplID0gbWF4KG1hZF9yZWN2cV9zaXplLCBJQl9NQURfUVBfTUlOX1NJWkUpOworCisJbWFkX3NlbmRxX3NpemUgPSBtaW4obWFkX3NlbmRxX3NpemUsIElCX01BRF9RUF9NQVhfU0laRSk7CisJbWFkX3NlbmRxX3NpemUgPSBtYXgobWFkX3NlbmRxX3NpemUsIElCX01BRF9RUF9NSU5fU0laRSk7CiAKIAlpYl9tYWRfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiaWJfbWFkIiwKIAkJCQkJIHNpemVvZihzdHJ1Y3QgaWJfbWFkX3ByaXZhdGUpLApAQCAtMzAyMSw0ICszMDMzLDMgQEAKIAogbW9kdWxlX2luaXQoaWJfbWFkX2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGliX21hZF9jbGVhbnVwX21vZHVsZSk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9wcml2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcHJpdi5oCmluZGV4IDA1Y2UzMzEuLjk0MzBhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9wcml2LmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3ByaXYuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSwgVm9sdGFpcmUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSE5SIENvbnN1bHRpbmcuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTQ5LDYgKzUwLDggQEAKIC8qIFFQIGFuZCBDUSBwYXJhbWV0ZXJzICovCiAjZGVmaW5lIElCX01BRF9RUF9TRU5EX1NJWkUJMTI4CiAjZGVmaW5lIElCX01BRF9RUF9SRUNWX1NJWkUJNTEyCisjZGVmaW5lIElCX01BRF9RUF9NSU5fU0laRQk2NAorI2RlZmluZSBJQl9NQURfUVBfTUFYX1NJWkUJODE5MgogI2RlZmluZSBJQl9NQURfU0VORF9SRVFfTUFYX1NHCTIKICNkZWZpbmUgSUJfTUFEX1JFQ1ZfUkVRX01BWF9TRwkxCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbXVsdGljYXN0LmMKaW5kZXggMTA3ZjE3MC4uOGQ4MmJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbXVsdGljYXN0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbXVsdGljYXN0LmMKQEAgLTEwNiw2ICsxMDYsOCBAQAogCXN0cnVjdCBpYl9zYV9xdWVyeQkqcXVlcnk7CiAJaW50CQkJcXVlcnlfaWQ7CiAJdTE2CQkJcGtleV9pbmRleDsKKwl1OAkJCWxlYXZlX3N0YXRlOworCWludAkJCXJldHJpZXM7CiB9OwogCiBzdHJ1Y3QgbWNhc3RfbWVtYmVyIHsKQEAgLTM1MCw2ICszNTIsNyBAQAogCiAJcmVjID0gZ3JvdXAtPnJlYzsKIAlyZWMuam9pbl9zdGF0ZSA9IGxlYXZlX3N0YXRlOworCWdyb3VwLT5sZWF2ZV9zdGF0ZSA9IGxlYXZlX3N0YXRlOwogCiAJcmV0ID0gaWJfc2FfbWNtZW1iZXJfcmVjX3F1ZXJ5KCZzYV9jbGllbnQsIHBvcnQtPmRldi0+ZGV2aWNlLAogCQkJCSAgICAgICBwb3J0LT5wb3J0X251bSwgSUJfU0FfTUVUSE9EX0RFTEVURSwgJnJlYywKQEAgLTU0Miw3ICs1NDUsMTEgQEAKIHsKIAlzdHJ1Y3QgbWNhc3RfZ3JvdXAgKmdyb3VwID0gY29udGV4dDsKIAotCW1jYXN0X3dvcmtfaGFuZGxlcigmZ3JvdXAtPndvcmspOworCWlmIChzdGF0dXMgJiYgZ3JvdXAtPnJldHJpZXMgPiAwICYmCisJICAgICFzZW5kX2xlYXZlKGdyb3VwLCBncm91cC0+bGVhdmVfc3RhdGUpKQorCQlncm91cC0+cmV0cmllcy0tOworCWVsc2UKKwkJbWNhc3Rfd29ya19oYW5kbGVyKCZncm91cC0+d29yayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbWNhc3RfZ3JvdXAgKmFjcXVpcmVfZ3JvdXAoc3RydWN0IG1jYXN0X3BvcnQgKnBvcnQsCkBAIC01NjUsNiArNTcyLDcgQEAKIAlpZiAoIWdyb3VwKQogCQlyZXR1cm4gTlVMTDsKIAorCWdyb3VwLT5yZXRyaWVzID0gMzsKIAlncm91cC0+cG9ydCA9IHBvcnQ7CiAJZ3JvdXAtPnJlYy5tZ2lkID0gKm1naWQ7CiAJZ3JvdXAtPnBrZXlfaW5kZXggPSBNQ0FTVF9JTlZBTElEX1BLRVlfSU5ERVg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwppbmRleCAxODY1MDQ5Li44MjU0MzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKQEAgLTEwOSwxMCArMTA5LDEwIEBACiAJLnJlbW92ZSA9IGliX3NhX3JlbW92ZV9vbmUKIH07CiAKLXN0YXRpYyBzcGlubG9ja190IGlkcl9sb2NrOworc3RhdGljIERFRklORV9TUElOTE9DSyhpZHJfbG9jayk7CiBzdGF0aWMgREVGSU5FX0lEUihxdWVyeV9pZHIpOwogCi1zdGF0aWMgc3BpbmxvY2tfdCB0aWRfbG9jazsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGlkX2xvY2spOwogc3RhdGljIHUzMiB0aWQ7CiAKICNkZWZpbmUgUEFUSF9SRUNfRklFTEQoZmllbGQpIFwKQEAgLTEwNzcsOSArMTA3Nyw2IEBACiB7CiAJaW50IHJldDsKIAotCXNwaW5fbG9ja19pbml0KCZpZHJfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnRpZF9sb2NrKTsKLQogCWdldF9yYW5kb21fYnl0ZXMoJnRpZCwgc2l6ZW9mIHRpZCk7CiAKIAlyZXQgPSBpYl9yZWdpc3Rlcl9jbGllbnQoJnNhX2NsaWVudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zbWkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NtaS5jCmluZGV4IDg3MjM2NzUuLjU4NTVlNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NtaS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NtaS5jCkBAIC01Miw2ICs1MiwxMCBAQAogCWhvcF9jbnQgPSBzbXAtPmhvcF9jbnQ7CiAKIAkvKiBTZWUgc2VjdGlvbiAxNC4yLjIuMiwgVm9sIDEgSUIgc3BlYyAqLworCS8qIEMxNC02IC0tIHZhbGlkIGhvcF9jbnQgdmFsdWVzIGFyZSBmcm9tIDAgdG8gNjMgKi8KKwlpZiAoaG9wX2NudCA+PSBJQl9TTVBfTUFYX1BBVEhfSE9QUykKKwkJcmV0dXJuIElCX1NNSV9ESVNDQVJEOworCiAJaWYgKCFpYl9nZXRfc21wX2RpcmVjdGlvbihzbXApKSB7CiAJCS8qIEMxNC05OjEgKi8KIAkJaWYgKGhvcF9jbnQgJiYgaG9wX3B0ciA9PSAwKSB7CkBAIC0xMzMsNiArMTM3LDEwIEBACiAJaG9wX2NudCA9IHNtcC0+aG9wX2NudDsKIAogCS8qIFNlZSBzZWN0aW9uIDE0LjIuMi4yLCBWb2wgMSBJQiBzcGVjICovCisJLyogQzE0LTYgLS0gdmFsaWQgaG9wX2NudCB2YWx1ZXMgYXJlIGZyb20gMCB0byA2MyAqLworCWlmIChob3BfY250ID49IElCX1NNUF9NQVhfUEFUSF9IT1BTKQorCQlyZXR1cm4gSUJfU01JX0RJU0NBUkQ7CisKIAlpZiAoIWliX2dldF9zbXBfZGlyZWN0aW9uKHNtcCkpIHsKIAkJLyogQzE0LTk6MSAtLSBzZW5kZXIgc2hvdWxkIGhhdmUgaW5jcmVtZW50ZWQgaG9wX3B0ciAqLwogCQlpZiAoaG9wX2NudCAmJiBob3BfcHRyID09IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwppbmRleCBlYjM2YTgxLi5kM2ZmZjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKQEAgLTczLDcgKzczLDcgQEAKIERFRklORV9JRFIoaWJfdXZlcmJzX3FwX2lkcik7CiBERUZJTkVfSURSKGliX3V2ZXJic19zcnFfaWRyKTsKIAotc3RhdGljIHNwaW5sb2NrX3QgbWFwX2xvY2s7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1hcF9sb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgaWJfdXZlcmJzX2RldmljZSAqZGV2X3RhYmxlW0lCX1VWRVJCU19NQVhfREVWSUNFU107CiBzdGF0aWMgREVDTEFSRV9CSVRNQVAoZGV2X21hcCwgSUJfVVZFUkJTX01BWF9ERVZJQ0VTKTsKIApAQCAtNTg0LDE0ICs1ODQsMTYgQEAKIAogCWlmIChoZHIuY29tbWFuZCA8IDAJCQkJfHwKIAkgICAgaGRyLmNvbW1hbmQgPj0gQVJSQVlfU0laRSh1dmVyYnNfY21kX3RhYmxlKSB8fAotCSAgICAhdXZlcmJzX2NtZF90YWJsZVtoZHIuY29tbWFuZF0JCXx8Ci0JICAgICEoZmlsZS0+ZGV2aWNlLT5pYl9kZXYtPnV2ZXJic19jbWRfbWFzayAmICgxdWxsIDw8IGhkci5jb21tYW5kKSkpCisJICAgICF1dmVyYnNfY21kX3RhYmxlW2hkci5jb21tYW5kXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIWZpbGUtPnVjb250ZXh0ICYmCiAJICAgIGhkci5jb21tYW5kICE9IElCX1VTRVJfVkVSQlNfQ01EX0dFVF9DT05URVhUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghKGZpbGUtPmRldmljZS0+aWJfZGV2LT51dmVyYnNfY21kX21hc2sgJiAoMXVsbCA8PCBoZHIuY29tbWFuZCkpKQorCQlyZXR1cm4gLUVOT1NZUzsKKwogCXJldHVybiB1dmVyYnNfY21kX3RhYmxlW2hkci5jb21tYW5kXShmaWxlLCBidWYgKyBzaXplb2YgaGRyLAogCQkJCQkgICAgIGhkci5pbl93b3JkcyAqIDQsIGhkci5vdXRfd29yZHMgKiA0KTsKIH0KQEAgLTgzNiw4ICs4MzgsNiBAQAogewogCWludCByZXQ7CiAKLQlzcGluX2xvY2tfaW5pdCgmbWFwX2xvY2spOwotCiAJcmV0ID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihJQl9VVkVSQlNfQkFTRV9ERVYsIElCX1VWRVJCU19NQVhfREVWSUNFUywKIAkJCQkgICAgICJpbmZpbmliYW5kX3ZlcmJzIik7CiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYwppbmRleCAwY2ZiYjZkLi5jNjFmZDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYwpAQCAtODYsMTEgKzg2LDcgQEAKIAogc3RhdGljIHZvaWQgYzJfcHJpbnRfbWFjYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewotCXByX2RlYnVnKCIlczogTUFDICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYLCAiCi0JCSJJUlEgJXVcbiIsIG5ldGRldi0+bmFtZSwKLQkJbmV0ZGV2LT5kZXZfYWRkclswXSwgbmV0ZGV2LT5kZXZfYWRkclsxXSwgbmV0ZGV2LT5kZXZfYWRkclsyXSwKLQkJbmV0ZGV2LT5kZXZfYWRkclszXSwgbmV0ZGV2LT5kZXZfYWRkcls0XSwgbmV0ZGV2LT5kZXZfYWRkcls1XSwKLQkJbmV0ZGV2LT5pcnEpOworCXByX2RlYnVnKCIlczogTUFDICVwTSwgSVJRICV1XG4iLCBuZXRkZXYtPm5hbWUsIG5ldGRldi0+ZGV2X2FkZHIsIG5ldGRldi0+aXJxKTsKIH0KIAogc3RhdGljIHZvaWQgYzJfc2V0X3J4YnVmc2l6ZShzdHJ1Y3QgYzJfcG9ydCAqYzJfcG9ydCkKQEAgLTUzMCw3ICs1MjYsNiBAQAogCiAJCW5ldGlmX3J4KHNrYik7CiAKLQkJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJbmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCW5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gYnVmbGVuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKaW5kZXggZjE5NDhmYS4uYWQ3MjNiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKQEAgLTc4MCwxMSArNzgwLDExIEBACiAJLyogUmVnaXN0ZXIgcHNldWRvIG5ldHdvcmsgZGV2aWNlICovCiAJZGV2LT5wc2V1ZG9fbmV0ZGV2ID0gYzJfcHNldWRvX25ldGRldl9pbml0KGRldik7CiAJaWYgKCFkZXYtPnBzZXVkb19uZXRkZXYpCi0JCWdvdG8gb3V0MzsKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2LT5wc2V1ZG9fbmV0ZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDI7CisJCWdvdG8gb3V0X2ZyZWVfbmV0ZGV2OwogCiAJcHJfZGVidWcoIiVzOiV1XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCXN0cmxjcHkoZGV2LT5pYmRldi5uYW1lLCAiYW1zbyVkIiwgSUJfREVWSUNFX05BTUVfTUFYKTsKQEAgLTg1MSw2ICs4NTEsMTAgQEAKIAlkZXYtPmliZGV2LnBvc3RfcmVjdiA9IGMyX3Bvc3RfcmVjZWl2ZTsKIAogCWRldi0+aWJkZXYuaXdjbSA9IGttYWxsb2Moc2l6ZW9mKCpkZXYtPmliZGV2Lml3Y20pLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2LT5pYmRldi5pd2NtID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9uZXRkZXY7CisJfQogCWRldi0+aWJkZXYuaXdjbS0+YWRkX3JlZiA9IGMyX2FkZF9yZWY7CiAJZGV2LT5pYmRldi5pd2NtLT5yZW1fcmVmID0gYzJfcmVtX3JlZjsKIAlkZXYtPmliZGV2Lml3Y20tPmdldF9xcCA9IGMyX2dldF9xcDsKQEAgLTg2MiwyMyArODY2LDI1IEBACiAKIAlyZXQgPSBpYl9yZWdpc3Rlcl9kZXZpY2UoJmRldi0+aWJkZXYpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0MTsKKwkJZ290byBvdXRfZnJlZV9pd2NtOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYzJfZGV2X2F0dHJpYnV0ZXMpOyArK2kpIHsKIAkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmliZGV2LmRldiwKIAkJCQkJICAgICAgIGMyX2Rldl9hdHRyaWJ1dGVzW2ldKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0MDsKKwkJCWdvdG8gb3V0X3VucmVnaXN0ZXJfaWJkZXY7CiAJfQotCWdvdG8gb3V0MzsKKwlnb3RvIG91dDsKIAotb3V0MDoKK291dF91bnJlZ2lzdGVyX2liZGV2OgogCWliX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPmliZGV2KTsKLW91dDE6CitvdXRfZnJlZV9pd2NtOgorCWtmcmVlKGRldi0+aWJkZXYuaXdjbSk7CitvdXRfdW5yZWdpc3Rlcl9uZXRkZXY6CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2LT5wc2V1ZG9fbmV0ZGV2KTsKLW91dDI6CitvdXRfZnJlZV9uZXRkZXY6CiAJZnJlZV9uZXRkZXYoZGV2LT5wc2V1ZG9fbmV0ZGV2KTsKLW91dDM6CitvdXQ6CiAJcHJfZGVidWcoIiVzOiV1IHJldD0lZFxuIiwgX19mdW5jX18sIF9fTElORV9fLCByZXQpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCmluZGV4IDYyZjljZjIuLjcyZWQzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCkBAIC04NTIsNyArODUyLDkgQEAKIAl3cWUtPnFwY2FwcyA9IGF0dHItPnFwY2FwczsKIAl3cWUtPnVscGR1X3NpemUgPSBjcHVfdG9fYmUxNihhdHRyLT50Y3BfZW1zcyk7CiAJd3FlLT5ycWVfY291bnQgPSBjcHVfdG9fYmUxNihhdHRyLT5ycWVfY291bnQpOwotCXdxZS0+ZmxhZ3NfcnRyX3R5cGUgPSBjcHVfdG9fYmUxNihhdHRyLT5mbGFnc3xWX1JUUl9UWVBFKGF0dHItPnJ0cl90eXBlKSk7CisJd3FlLT5mbGFnc19ydHJfdHlwZSA9IGNwdV90b19iZTE2KGF0dHItPmZsYWdzIHwKKwkJCQkJICBWX1JUUl9UWVBFKGF0dHItPnJ0cl90eXBlKSB8CisJCQkJCSAgVl9DSEFOKGF0dHItPmNoYW4pKTsKIAl3cWUtPm9yZCA9IGNwdV90b19iZTMyKGF0dHItPm9yZCk7CiAJd3FlLT5pcmQgPSBjcHVfdG9fYmUzMihhdHRyLT5pcmQpOwogCXdxZS0+cXBfZG1hX2FkZHIgPSBjcHVfdG9fYmU2NChhdHRyLT5xcF9kbWFfYWRkcik7CkBAIC0xMDMyLDYgKzEwMzQsNyBAQAogZXJyMjoKIAljeGlvX2hhbF9kZXN0cm95X2N0cmxfcXAocmRldl9wKTsKIGVycjE6CisJcmRldl9wLT50M2NkZXZfcC0+dWxwID0gTlVMTDsKIAlsaXN0X2RlbCgmcmRldl9wLT5lbnRyeSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oCmluZGV4IDMyZTNiMTQuLmExOTdhNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaApAQCAtMzI3LDYgKzMyNywxMSBAQAogI2RlZmluZSBWX1JUUl9UWVBFKHgpCSgoeCkgPDwgU19SVFJfVFlQRSkKICNkZWZpbmUgR19SVFJfVFlQRSh4KQkoKCgoeCkgPj4gU19SVFJfVFlQRSkpICYgTV9SVFJfVFlQRSkKIAorI2RlZmluZSBTX0NIQU4JCTQKKyNkZWZpbmUgTV9DSEFOCQkweDMKKyNkZWZpbmUgVl9DSEFOKHgpCSgoeCkgPDwgU19DSEFOKQorI2RlZmluZSBHX0NIQU4oeCkJKCgoKHgpID4+IFNfQ0hBTikpICYgTV9DSEFOKQorCiBzdHJ1Y3QgdDNfcmRtYV9pbml0X2F0dHIgewogCXUzMiB0aWQ7CiAJdTMyIHFwaWQ7CkBAIC0zNDYsNiArMzUxLDcgQEAKIAl1MTYgZmxhZ3M7CiAJdTE2IHJxZV9jb3VudDsKIAl1MzIgaXJzOworCXUzMiBjaGFuOwogfTsKIAogc3RydWN0IHQzX3JkbWFfaW5pdF93ciB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guYwppbmRleCAyNmZjMGE0Li5iMGVhMDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAogc3RhdGljIHZvaWQgb3Blbl9ybmljX2RldihzdHJ1Y3QgdDNjZGV2ICopOwogc3RhdGljIHZvaWQgY2xvc2Vfcm5pY19kZXYoc3RydWN0IHQzY2RldiAqKTsKLXN0YXRpYyB2b2lkIGl3Y2hfZXJyX2hhbmRsZXIoc3RydWN0IHQzY2RldiAqLCB1MzIsIHUzMik7CitzdGF0aWMgdm9pZCBpd2NoX2V2ZW50X2hhbmRsZXIoc3RydWN0IHQzY2RldiAqLCB1MzIsIHUzMik7CiAKIHN0cnVjdCBjeGdiM19jbGllbnQgdDNjX2NsaWVudCA9IHsKIAkubmFtZSA9ICJpd19jeGdiMyIsCkBAIC01OSw3ICs1OSw3IEBACiAJLnJlbW92ZSA9IGNsb3NlX3JuaWNfZGV2LAogCS5oYW5kbGVycyA9IHQzY19oYW5kbGVycywKIAkucmVkaXJlY3QgPSBpd2NoX2VwX3JlZGlyZWN0LAotCS5lcnJfaGFuZGxlciA9IGl3Y2hfZXJyX2hhbmRsZXIKKwkuZXZlbnRfaGFuZGxlciA9IGl3Y2hfZXZlbnRfaGFuZGxlcgogfTsKIAogc3RhdGljIExJU1RfSEVBRChkZXZfbGlzdCk7CkBAIC0xMDUsMTEgKzEwNSw5IEBACiBzdGF0aWMgdm9pZCBvcGVuX3JuaWNfZGV2KHN0cnVjdCB0M2NkZXYgKnRkZXYpCiB7CiAJc3RydWN0IGl3Y2hfZGV2ICpybmljcDsKLQlzdGF0aWMgaW50IHZlcnNfcHJpbnRlZDsKIAogCVBEQkcoIiVzIHQzY2RldiAlcFxuIiwgX19mdW5jX18sICB0ZGV2KTsKLQlpZiAoIXZlcnNfcHJpbnRlZCsrKQotCQlwcmludGsoS0VSTl9JTkZPIE1PRCAiQ2hlbHNpbyBUMyBSRE1BIERyaXZlciAtIHZlcnNpb24gJXNcbiIsCisJcHJpbnRrX29uY2UoS0VSTl9JTkZPIE1PRCAiQ2hlbHNpbyBUMyBSRE1BIERyaXZlciAtIHZlcnNpb24gJXNcbiIsCiAJCSAgICAgICBEUlZfVkVSU0lPTik7CiAJcm5pY3AgPSAoc3RydWN0IGl3Y2hfZGV2ICopaWJfYWxsb2NfZGV2aWNlKHNpemVvZigqcm5pY3ApKTsKIAlpZiAoIXJuaWNwKSB7CkBAIC0xNjIsMjEgKzE2MCwzNiBAQAogCW11dGV4X3VubG9jaygmZGV2X211dGV4KTsKIH0KIAotc3RhdGljIHZvaWQgaXdjaF9lcnJfaGFuZGxlcihzdHJ1Y3QgdDNjZGV2ICp0ZGV2LCB1MzIgc3RhdHVzLCB1MzIgZXJyb3IpCitzdGF0aWMgdm9pZCBpd2NoX2V2ZW50X2hhbmRsZXIoc3RydWN0IHQzY2RldiAqdGRldiwgdTMyIGV2dCwgdTMyIHBvcnRfaWQpCiB7CiAJc3RydWN0IGN4aW9fcmRldiAqcmRldiA9IHRkZXYtPnVscDsKLQlzdHJ1Y3QgaXdjaF9kZXYgKnJuaWNwID0gcmRldl90b19pd2NoX2RldihyZGV2KTsKKwlzdHJ1Y3QgaXdjaF9kZXYgKnJuaWNwOwogCXN0cnVjdCBpYl9ldmVudCBldmVudDsKKwl1MzIgICAgcG9ydG51bSA9IHBvcnRfaWQgKyAxOwogCi0JaWYgKHN0YXR1cyA9PSBPRkZMT0FEX1NUQVRVU19ET1dOKSB7CisJaWYgKCFyZGV2KQorCQlyZXR1cm47CisJcm5pY3AgPSByZGV2X3RvX2l3Y2hfZGV2KHJkZXYpOworCXN3aXRjaCAoZXZ0KSB7CisJY2FzZSBPRkZMT0FEX1NUQVRVU19ET1dOOiB7CiAJCXJkZXYtPmZsYWdzID0gQ1hJT19FUlJPUl9GQVRBTDsKLQotCQlldmVudC5kZXZpY2UgPSAmcm5pY3AtPmliZGV2OwogCQlldmVudC5ldmVudCAgPSBJQl9FVkVOVF9ERVZJQ0VfRkFUQUw7Ci0JCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSAwOwotCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQlicmVhazsKKwkJfQorCWNhc2UgT0ZGTE9BRF9QT1JUX0RPV046IHsKKwkJZXZlbnQuZXZlbnQgID0gSUJfRVZFTlRfUE9SVF9FUlI7CisJCWJyZWFrOworCQl9CisJY2FzZSBPRkZMT0FEX1BPUlRfVVA6IHsKKwkJZXZlbnQuZXZlbnQgID0gSUJfRVZFTlRfUE9SVF9BQ1RJVkU7CisJCWJyZWFrOworCQl9CiAJfQogCisJZXZlbnQuZGV2aWNlID0gJnJuaWNwLT5pYmRldjsKKwlldmVudC5lbGVtZW50LnBvcnRfbnVtID0gcG9ydG51bTsKKwlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYwppbmRleCA1MmQ3YmIwLi42NmI0MTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKQEAgLTI4Niw3ICsyODYsNyBAQAogCWVwID0gY29udGFpbmVyX29mKGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgaXdjaF9lcF9jb21tb24sIGtyZWYpLAogCQkJICBzdHJ1Y3QgaXdjaF9lcCwgY29tKTsKIAlQREJHKCIlcyBlcCAlcCBzdGF0ZSAlc1xuIiwgX19mdW5jX18sIGVwLCBzdGF0ZXNbc3RhdGVfcmVhZCgmZXAtPmNvbSldKTsKLQlpZiAoZXAtPmNvbS5mbGFncyAmIFJFTEVBU0VfUkVTT1VSQ0VTKSB7CisJaWYgKHRlc3RfYml0KFJFTEVBU0VfUkVTT1VSQ0VTLCAmZXAtPmNvbS5mbGFncykpIHsKIAkJY3hnYjNfcmVtb3ZlX3RpZChlcC0+Y29tLnRkZXYsICh2b2lkICopZXAsIGVwLT5od3RpZCk7CiAJCWRzdF9yZWxlYXNlKGVwLT5kc3QpOwogCQlsMnRfcmVsZWFzZShMMkRBVEEoZXAtPmNvbS50ZGV2KSwgZXAtPmwydCk7CkBAIC0yOTcsNyArMjk3LDcgQEAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfZXBfcmVzb3VyY2VzKHN0cnVjdCBpd2NoX2VwICplcCkKIHsKIAlQREJHKCIlcyBlcCAlcCB0aWQgJWRcbiIsIF9fZnVuY19fLCBlcCwgZXAtPmh3dGlkKTsKLQllcC0+Y29tLmZsYWdzIHw9IFJFTEVBU0VfUkVTT1VSQ0VTOworCXNldF9iaXQoUkVMRUFTRV9SRVNPVVJDRVMsICZlcC0+Y29tLmZsYWdzKTsKIAlwdXRfZXAoJmVwLT5jb20pOwogfQogCkBAIC03ODYsMTAgKzc4NiwxMiBAQAogCWV2ZW50LnByaXZhdGVfZGF0YV9sZW4gPSBlcC0+cGxlbjsKIAlldmVudC5wcml2YXRlX2RhdGEgPSBlcC0+bXBhX3BrdCArIHNpemVvZihzdHJ1Y3QgbXBhX21lc3NhZ2UpOwogCWV2ZW50LnByb3ZpZGVyX2RhdGEgPSBlcDsKLQlpZiAoc3RhdGVfcmVhZCgmZXAtPnBhcmVudF9lcC0+Y29tKSAhPSBERUFEKQorCWlmIChzdGF0ZV9yZWFkKCZlcC0+cGFyZW50X2VwLT5jb20pICE9IERFQUQpIHsKKwkJZ2V0X2VwKCZlcC0+Y29tKTsKIAkJZXAtPnBhcmVudF9lcC0+Y29tLmNtX2lkLT5ldmVudF9oYW5kbGVyKAogCQkJCQkJZXAtPnBhcmVudF9lcC0+Y29tLmNtX2lkLAogCQkJCQkJJmV2ZW50KTsKKwl9CiAJcHV0X2VwKCZlcC0+cGFyZW50X2VwLT5jb20pOwogCWVwLT5wYXJlbnRfZXAgPSBOVUxMOwogfQpAQCAtMTE1Niw4ICsxMTU4LDcgQEAKIAkgKiBXZSBnZXQgMiBhYm9ydCByZXBsaWVzIGZyb20gdGhlIEhXLiAgVGhlIGZpcnN0IG9uZSBtdXN0CiAJICogYmUgaWdub3JlZCBleGNlcHQgZm9yIHNjcmliYmxpbmcgdGhhdCB3ZSBuZWVkIG9uZSBtb3JlLgogCSAqLwotCWlmICghKGVwLT5jb20uZmxhZ3MgJiBBQk9SVF9SRVFfSU5fUFJPR1JFU1MpKSB7Ci0JCWVwLT5jb20uZmxhZ3MgfD0gQUJPUlRfUkVRX0lOX1BST0dSRVNTOworCWlmICghdGVzdF9hbmRfc2V0X2JpdChBQk9SVF9SRVFfSU5fUFJPR1JFU1MsICZlcC0+Y29tLmZsYWdzKSkgewogCQlyZXR1cm4gQ1BMX1JFVF9CVUZfRE9ORTsKIAl9CiAKQEAgLTE0NzcsMTAgKzE0NzgsMTQgQEAKIAkJLyoKIAkJICogV2UncmUgZ29ubmEgbWFyayB0aGlzIHB1cHB5IERFQUQsIGJ1dCBrZWVwCiAJCSAqIHRoZSByZWZlcmVuY2Ugb24gaXQgdW50aWwgdGhlIFVMUCBhY2NlcHRzIG9yCi0JCSAqIHJlamVjdHMgdGhlIENSLgorCQkgKiByZWplY3RzIHRoZSBDUi4gQWxzbyB3YWtlIHVwIGFueW9uZSB3YWl0aW5nCisJCSAqIGluIHJkbWEgY29ubmVjdGlvbiBtaWdyYXRpb24gKHNlZSBpd2NoX2FjY2VwdF9jcigpKS4KIAkJICovCiAJCV9fc3RhdGVfc2V0KCZlcC0+Y29tLCBDTE9TSU5HKTsKLQkJZ2V0X2VwKCZlcC0+Y29tKTsKKwkJZXAtPmNvbS5ycGxfZG9uZSA9IDE7CisJCWVwLT5jb20ucnBsX2VyciA9IC1FQ09OTlJFU0VUOworCQlQREJHKCJ3YWtpbmcgdXAgZXAgJXBcbiIsIGVwKTsKKwkJd2FrZV91cCgmZXAtPmNvbS53YWl0cSk7CiAJCWJyZWFrOwogCWNhc2UgTVBBX1JFUF9TRU5UOgogCQlfX3N0YXRlX3NldCgmZXAtPmNvbSwgQ0xPU0lORyk7CkBAIC0xNTYxLDggKzE1NjYsNyBAQAogCSAqIFdlIGdldCAyIHBlZXIgYWJvcnRzIGZyb20gdGhlIEhXLiAgVGhlIGZpcnN0IG9uZSBtdXN0CiAJICogYmUgaWdub3JlZCBleGNlcHQgZm9yIHNjcmliYmxpbmcgdGhhdCB3ZSBuZWVkIG9uZSBtb3JlLgogCSAqLwotCWlmICghKGVwLT5jb20uZmxhZ3MgJiBQRUVSX0FCT1JUX0lOX1BST0dSRVNTKSkgewotCQllcC0+Y29tLmZsYWdzIHw9IFBFRVJfQUJPUlRfSU5fUFJPR1JFU1M7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFBFRVJfQUJPUlRfSU5fUFJPR1JFU1MsICZlcC0+Y29tLmZsYWdzKSkgewogCQlyZXR1cm4gQ1BMX1JFVF9CVUZfRE9ORTsKIAl9CiAKQEAgLTE1ODksOSArMTU5MywxMyBAQAogCQkvKgogCQkgKiBXZSdyZSBnb25uYSBtYXJrIHRoaXMgcHVwcHkgREVBRCwgYnV0IGtlZXAKIAkJICogdGhlIHJlZmVyZW5jZSBvbiBpdCB1bnRpbCB0aGUgVUxQIGFjY2VwdHMgb3IKLQkJICogcmVqZWN0cyB0aGUgQ1IuCisJCSAqIHJlamVjdHMgdGhlIENSLiBBbHNvIHdha2UgdXAgYW55b25lIHdhaXRpbmcKKwkJICogaW4gcmRtYSBjb25uZWN0aW9uIG1pZ3JhdGlvbiAoc2VlIGl3Y2hfYWNjZXB0X2NyKCkpLgogCQkgKi8KLQkJZ2V0X2VwKCZlcC0+Y29tKTsKKwkJZXAtPmNvbS5ycGxfZG9uZSA9IDE7CisJCWVwLT5jb20ucnBsX2VyciA9IC1FQ09OTlJFU0VUOworCQlQREJHKCJ3YWtpbmcgdXAgZXAgJXBcbiIsIGVwKTsKKwkJd2FrZV91cCgmZXAtPmNvbS53YWl0cSk7CiAJCWJyZWFrOwogCWNhc2UgTU9SSUJVTkQ6CiAJY2FzZSBDTE9TSU5HOgpAQCAtMTc5Nyw2ICsxODA1LDcgQEAKIAkJZXJyID0gc2VuZF9tcGFfcmVqZWN0KGVwLCBwZGF0YSwgcGRhdGFfbGVuKTsKIAkJZXJyID0gaXdjaF9lcF9kaXNjb25uZWN0KGVwLCAwLCBHRlBfS0VSTkVMKTsKIAl9CisJcHV0X2VwKCZlcC0+Y29tKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgxMCw4ICsxODE5LDEwIEBACiAJc3RydWN0IGl3Y2hfcXAgKnFwID0gZ2V0X3FocChoLCBjb25uX3BhcmFtLT5xcG4pOwogCiAJUERCRygiJXMgZXAgJXAgdGlkICV1XG4iLCBfX2Z1bmNfXywgZXAsIGVwLT5od3RpZCk7Ci0JaWYgKHN0YXRlX3JlYWQoJmVwLT5jb20pID09IERFQUQpCi0JCXJldHVybiAtRUNPTk5SRVNFVDsKKwlpZiAoc3RhdGVfcmVhZCgmZXAtPmNvbSkgPT0gREVBRCkgeworCQllcnIgPSAtRUNPTk5SRVNFVDsKKwkJZ290byBlcnI7CisJfQogCiAJQlVHX09OKHN0YXRlX3JlYWQoJmVwLT5jb20pICE9IE1QQV9SRVFfUkNWRCk7CiAJQlVHX09OKCFxcCk7CkBAIC0xODE5LDE1ICsxODMwLDE0IEBACiAJaWYgKChjb25uX3BhcmFtLT5vcmQgPiBxcC0+cmhwLT5hdHRyLm1heF9yZG1hX3JlYWRfcXBfZGVwdGgpIHx8CiAJICAgIChjb25uX3BhcmFtLT5pcmQgPiBxcC0+cmhwLT5hdHRyLm1heF9yZG1hX3JlYWRzX3Blcl9xcCkpIHsKIAkJYWJvcnRfY29ubmVjdGlvbihlcCwgTlVMTCwgR0ZQX0tFUk5FTCk7Ci0JCXJldHVybiAtRUlOVkFMOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKIAl9CiAKIAljbV9pZC0+YWRkX3JlZihjbV9pZCk7CiAJZXAtPmNvbS5jbV9pZCA9IGNtX2lkOwogCWVwLT5jb20ucXAgPSBxcDsKIAotCWVwLT5jb20ucnBsX2RvbmUgPSAwOwotCWVwLT5jb20ucnBsX2VyciA9IDA7CiAJZXAtPmlyZCA9IGNvbm5fcGFyYW0tPmlyZDsKIAllcC0+b3JkID0gY29ubl9wYXJhbS0+b3JkOwogCkBAIC0xODM2LDggKzE4NDYsNiBAQAogCiAJUERCRygiJXMgJWQgaXJkICVkIG9yZCAlZFxuIiwgX19mdW5jX18sIF9fTElORV9fLCBlcC0+aXJkLCBlcC0+b3JkKTsKIAotCWdldF9lcCgmZXAtPmNvbSk7Ci0KIAkvKiBiaW5kIFFQIHRvIEVQIGFuZCBtb3ZlIHRvIFJUUyAqLwogCWF0dHJzLm1wYV9hdHRyID0gZXAtPm1wYV9hdHRyOwogCWF0dHJzLm1heF9pcmQgPSBlcC0+aXJkOwpAQCAtMTg1NSwzMCArMTg2MywzMSBAQAogCWVyciA9IGl3Y2hfbW9kaWZ5X3FwKGVwLT5jb20ucXAtPnJocCwKIAkJCSAgICAgZXAtPmNvbS5xcCwgbWFzaywgJmF0dHJzLCAxKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycjsKKwkJZ290byBlcnIxOwogCiAJLyogaWYgbmVlZGVkLCB3YWl0IGZvciB3cl9hY2sgKi8KIAlpZiAoaXdjaF9ycWVzX3Bvc3RlZChxcCkpIHsKIAkJd2FpdF9ldmVudChlcC0+Y29tLndhaXRxLCBlcC0+Y29tLnJwbF9kb25lKTsKIAkJZXJyID0gZXAtPmNvbS5ycGxfZXJyOwogCQlpZiAoZXJyKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycjE7CiAJfQogCiAJZXJyID0gc2VuZF9tcGFfcmVwbHkoZXAsIGNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YSwKIAkJCSAgICAgY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbik7CiAJaWYgKGVycikKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyMTsKIAogCiAJc3RhdGVfc2V0KCZlcC0+Y29tLCBGUERVX01PREUpOwogCWVzdGFibGlzaGVkX3VwY2FsbChlcCk7CiAJcHV0X2VwKCZlcC0+Y29tKTsKIAlyZXR1cm4gMDsKLWVycjoKK2VycjE6CiAJZXAtPmNvbS5jbV9pZCA9IE5VTEw7CiAJZXAtPmNvbS5xcCA9IE5VTEw7CiAJY21faWQtPnJlbV9yZWYoY21faWQpOworZXJyOgogCXB1dF9lcCgmZXAtPmNvbSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTIwOTcsMTQgKzIxMDYsMTcgQEAKIAkJCWVwLT5jb20uc3RhdGUgPSBDTE9TSU5HOwogCQkJc3RhcnRfZXBfdGltZXIoZXApOwogCQl9CisJCXNldF9iaXQoQ0xPU0VfU0VOVCwgJmVwLT5jb20uZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIENMT1NJTkc6Ci0JCWNsb3NlID0gMTsKLQkJaWYgKGFicnVwdCkgewotCQkJc3RvcF9lcF90aW1lcihlcCk7Ci0JCQllcC0+Y29tLnN0YXRlID0gQUJPUlRJTkc7Ci0JCX0gZWxzZQotCQkJZXAtPmNvbS5zdGF0ZSA9IE1PUklCVU5EOworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQ0xPU0VfU0VOVCwgJmVwLT5jb20uZmxhZ3MpKSB7CisJCQljbG9zZSA9IDE7CisJCQlpZiAoYWJydXB0KSB7CisJCQkJc3RvcF9lcF90aW1lcihlcCk7CisJCQkJZXAtPmNvbS5zdGF0ZSA9IEFCT1JUSU5HOworCQkJfSBlbHNlCisJCQkJZXAtPmNvbS5zdGF0ZSA9IE1PUklCVU5EOworCQl9CiAJCWJyZWFrOwogCWNhc2UgTU9SSUJVTkQ6CiAJY2FzZSBBQk9SVElORzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5oCmluZGV4IDQzYzBhZWEuLmI5ZWZhZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uaApAQCAtMTQ1LDkgKzE0NSwxMCBAQAogfTsKIAogZW51bSBpd2NoX2VwX2ZsYWdzIHsKLQlQRUVSX0FCT1JUX0lOX1BST0dSRVNTCT0gKDEgPDwgMCksCi0JQUJPUlRfUkVRX0lOX1BST0dSRVNTCT0gKDEgPDwgMSksCi0JUkVMRUFTRV9SRVNPVVJDRVMJPSAoMSA8PCAyKSwKKwlQRUVSX0FCT1JUX0lOX1BST0dSRVNTCT0gMCwKKwlBQk9SVF9SRVFfSU5fUFJPR1JFU1MJPSAxLAorCVJFTEVBU0VfUkVTT1VSQ0VTCT0gMiwKKwlDTE9TRV9TRU5UCQk9IDMsCiB9OwogCiBzdHJ1Y3QgaXdjaF9lcF9jb21tb24gewpAQCAtMTYyLDcgKzE2Myw3IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7CiAJaW50IHJwbF9kb25lOwogCWludCBycGxfZXJyOwotCXUzMiBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogfTsKIAogc3RydWN0IGl3Y2hfbGlzdGVuX2VwIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX21lbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfbWVtLmMKaW5kZXggZWM0OWE1Yy4uZTFlYzY1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfbWVtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfbWVtLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJpd2NoLmgiCiAjaW5jbHVkZSAiaXdjaF9wcm92aWRlci5oIgogCi1zdGF0aWMgdm9pZCBpd2NoX2ZpbmlzaF9tZW1fcmVnKHN0cnVjdCBpd2NoX21yICptaHAsIHUzMiBzdGFnKQorc3RhdGljIGludCBpd2NoX2ZpbmlzaF9tZW1fcmVnKHN0cnVjdCBpd2NoX21yICptaHAsIHUzMiBzdGFnKQogewogCXUzMiBtbWlkOwogCkBAIC00NywxNCArNDcsMTUgQEAKIAltaHAtPmF0dHIuc3RhZyA9IHN0YWc7CiAJbW1pZCA9IHN0YWcgPj4gODsKIAltaHAtPmlibXIucmtleSA9IG1ocC0+aWJtci5sa2V5ID0gc3RhZzsKLQlpbnNlcnRfaGFuZGxlKG1ocC0+cmhwLCAmbWhwLT5yaHAtPm1taWRyLCBtaHAsIG1taWQpOwogCVBEQkcoIiVzIG1taWQgMHgleCBtaHAgJXBcbiIsIF9fZnVuY19fLCBtbWlkLCBtaHApOworCXJldHVybiBpbnNlcnRfaGFuZGxlKG1ocC0+cmhwLCAmbWhwLT5yaHAtPm1taWRyLCBtaHAsIG1taWQpOwogfQogCiBpbnQgaXdjaF9yZWdpc3Rlcl9tZW0oc3RydWN0IGl3Y2hfZGV2ICpyaHAsIHN0cnVjdCBpd2NoX3BkICpwaHAsCiAJCSAgICAgIHN0cnVjdCBpd2NoX21yICptaHAsIGludCBzaGlmdCkKIHsKIAl1MzIgc3RhZzsKKwlpbnQgcmV0OwogCiAJaWYgKGN4aW9fcmVnaXN0ZXJfcGh5c19tZW0oJnJocC0+cmRldiwKIAkJCQkgICAmc3RhZywgbWhwLT5hdHRyLnBkaWQsCkBAIC02Niw5ICs2NywxMSBAQAogCQkJCSAgIG1ocC0+YXR0ci5wYmxfc2l6ZSwgbWhwLT5hdHRyLnBibF9hZGRyKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpd2NoX2ZpbmlzaF9tZW1fcmVnKG1ocCwgc3RhZyk7Ci0KLQlyZXR1cm4gMDsKKwlyZXQgPSBpd2NoX2ZpbmlzaF9tZW1fcmVnKG1ocCwgc3RhZyk7CisJaWYgKHJldCkKKwkJY3hpb19kZXJlZ19tZW0oJnJocC0+cmRldiwgbWhwLT5hdHRyLnN0YWcsIG1ocC0+YXR0ci5wYmxfc2l6ZSwKKwkJICAgICAgIG1ocC0+YXR0ci5wYmxfYWRkcik7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGl3Y2hfcmVyZWdpc3Rlcl9tZW0oc3RydWN0IGl3Y2hfZGV2ICpyaHAsIHN0cnVjdCBpd2NoX3BkICpwaHAsCkBAIC03Nyw2ICs4MCw3IEBACiAJCQkJCWludCBucGFnZXMpCiB7CiAJdTMyIHN0YWc7CisJaW50IHJldDsKIAogCS8qIFdlIGNvdWxkIHN1cHBvcnQgdGhpcy4uLiAqLwogCWlmIChucGFnZXMgPiBtaHAtPmF0dHIucGJsX3NpemUpCkBAIC05Myw5ICs5NywxMiBAQAogCQkJCSAgIG1ocC0+YXR0ci5wYmxfc2l6ZSwgbWhwLT5hdHRyLnBibF9hZGRyKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpd2NoX2ZpbmlzaF9tZW1fcmVnKG1ocCwgc3RhZyk7CisJcmV0ID0gaXdjaF9maW5pc2hfbWVtX3JlZyhtaHAsIHN0YWcpOworCWlmIChyZXQpCisJCWN4aW9fZGVyZWdfbWVtKCZyaHAtPnJkZXYsIG1ocC0+YXR0ci5zdGFnLCBtaHAtPmF0dHIucGJsX3NpemUsCisJCSAgICAgICBtaHAtPmF0dHIucGJsX2FkZHIpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGl3Y2hfYWxsb2NfcGJsKHN0cnVjdCBpd2NoX21yICptaHAsIGludCBucGFnZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYwppbmRleCBlMmE2MzIxLi42ODk1NTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMKQEAgLTE5NSw3ICsxOTUsMTEgQEAKIAlzcGluX2xvY2tfaW5pdCgmY2hwLT5sb2NrKTsKIAlhdG9taWNfc2V0KCZjaHAtPnJlZmNudCwgMSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2hwLT53YWl0KTsKLQlpbnNlcnRfaGFuZGxlKHJocCwgJnJocC0+Y3FpZHIsIGNocCwgY2hwLT5jcS5jcWlkKTsKKwlpZiAoaW5zZXJ0X2hhbmRsZShyaHAsICZyaHAtPmNxaWRyLCBjaHAsIGNocC0+Y3EuY3FpZCkpIHsKKwkJY3hpb19kZXN0cm95X2NxKCZjaHAtPnJocC0+cmRldiwgJmNocC0+Y3EpOworCQlrZnJlZShjaHApOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CiAKIAlpZiAodWNvbnRleHQpIHsKIAkJc3RydWN0IGl3Y2hfbW1fZW50cnkgKm1tOwpAQCAtNzUwLDcgKzc1NCwxMSBAQAogCW1ocC0+YXR0ci5zdGFnID0gc3RhZzsKIAltbWlkID0gKHN0YWcpID4+IDg7CiAJbWhwLT5pYm13LnJrZXkgPSBzdGFnOwotCWluc2VydF9oYW5kbGUocmhwLCAmcmhwLT5tbWlkciwgbWhwLCBtbWlkKTsKKwlpZiAoaW5zZXJ0X2hhbmRsZShyaHAsICZyaHAtPm1taWRyLCBtaHAsIG1taWQpKSB7CisJCWN4aW9fZGVhbGxvY2F0ZV93aW5kb3coJnJocC0+cmRldiwgbWhwLT5hdHRyLnN0YWcpOworCQlrZnJlZShtaHApOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CiAJUERCRygiJXMgbW1pZCAweCV4IG1ocCAlcCBzdGFnIDB4JXhcbiIsIF9fZnVuY19fLCBtbWlkLCBtaHAsIHN0YWcpOwogCXJldHVybiAmKG1ocC0+aWJtdyk7CiB9CkBAIC03NzgsMzcgKzc4Niw0MyBAQAogCXN0cnVjdCBpd2NoX21yICptaHA7CiAJdTMyIG1taWQ7CiAJdTMyIHN0YWcgPSAwOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlwaHAgPSB0b19pd2NoX3BkKHBkKTsKIAlyaHAgPSBwaHAtPnJocDsKIAltaHAgPSBremFsbG9jKHNpemVvZigqbWhwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtaHApCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIGVycjsKIAogCW1ocC0+cmhwID0gcmhwOwogCXJldCA9IGl3Y2hfYWxsb2NfcGJsKG1ocCwgcGJsX2RlcHRoKTsKLQlpZiAocmV0KSB7Ci0JCWtmcmVlKG1ocCk7Ci0JCXJldHVybiBFUlJfUFRSKHJldCk7Ci0JfQorCWlmIChyZXQpCisJCWdvdG8gZXJyMTsKIAltaHAtPmF0dHIucGJsX3NpemUgPSBwYmxfZGVwdGg7CiAJcmV0ID0gY3hpb19hbGxvY2F0ZV9zdGFnKCZyaHAtPnJkZXYsICZzdGFnLCBwaHAtPnBkaWQsCiAJCQkJIG1ocC0+YXR0ci5wYmxfc2l6ZSwgbWhwLT5hdHRyLnBibF9hZGRyKTsKLQlpZiAocmV0KSB7Ci0JCWl3Y2hfZnJlZV9wYmwobWhwKTsKLQkJa2ZyZWUobWhwKTsKLQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKLQl9CisJaWYgKHJldCkKKwkJZ290byBlcnIyOwogCW1ocC0+YXR0ci5wZGlkID0gcGhwLT5wZGlkOwogCW1ocC0+YXR0ci50eXBlID0gVFBUX05PTl9TSEFSRURfTVI7CiAJbWhwLT5hdHRyLnN0YWcgPSBzdGFnOwogCW1ocC0+YXR0ci5zdGF0ZSA9IDE7CiAJbW1pZCA9IChzdGFnKSA+PiA4OwogCW1ocC0+aWJtci5ya2V5ID0gbWhwLT5pYm1yLmxrZXkgPSBzdGFnOwotCWluc2VydF9oYW5kbGUocmhwLCAmcmhwLT5tbWlkciwgbWhwLCBtbWlkKTsKKwlpZiAoaW5zZXJ0X2hhbmRsZShyaHAsICZyaHAtPm1taWRyLCBtaHAsIG1taWQpKQorCQlnb3RvIGVycjM7CisKIAlQREJHKCIlcyBtbWlkIDB4JXggbWhwICVwIHN0YWcgMHgleFxuIiwgX19mdW5jX18sIG1taWQsIG1ocCwgc3RhZyk7CiAJcmV0dXJuICYobWhwLT5pYm1yKTsKK2VycjM6CisJY3hpb19kZXJlZ19tZW0oJnJocC0+cmRldiwgc3RhZywgbWhwLT5hdHRyLnBibF9zaXplLAorCQkgICAgICAgbWhwLT5hdHRyLnBibF9hZGRyKTsKK2VycjI6CisJaXdjaF9mcmVlX3BibChtaHApOworZXJyMToKKwlrZnJlZShtaHApOworZXJyOgorCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaWJfZmFzdF9yZWdfcGFnZV9saXN0ICppd2NoX2FsbG9jX2Zhc3RyZWdfcGJsKApAQCAtOTYxLDcgKzk3NSwxMyBAQAogCXNwaW5fbG9ja19pbml0KCZxaHAtPmxvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnFocC0+d2FpdCk7CiAJYXRvbWljX3NldCgmcWhwLT5yZWZjbnQsIDEpOwotCWluc2VydF9oYW5kbGUocmhwLCAmcmhwLT5xcGlkciwgcWhwLCBxaHAtPndxLnFwaWQpOworCisJaWYgKGluc2VydF9oYW5kbGUocmhwLCAmcmhwLT5xcGlkciwgcWhwLCBxaHAtPndxLnFwaWQpKSB7CisJCWN4aW9fZGVzdHJveV9xcCgmcmhwLT5yZGV2LCAmcWhwLT53cSwKKwkJCXVjb250ZXh0ID8gJnVjb250ZXh0LT51Y3R4IDogJnJocC0+cmRldi51Y3R4KTsKKwkJa2ZyZWUocWhwKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQogCiAJaWYgKHVkYXRhKSB7CiAKQEAgLTE0MTgsNiArMTQzOCw3IEBACiBiYWlsMjoKIAlpYl91bnJlZ2lzdGVyX2RldmljZSgmZGV2LT5pYmRldik7CiBiYWlsMToKKwlrZnJlZShkZXYtPmliZGV2Lml3Y20pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE0MzAsNSArMTQ1MSw2IEBACiAJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pYmRldi5kZXYsCiAJCQkJICAgaXdjaF9jbGFzc19hdHRyaWJ1dGVzW2ldKTsKIAlpYl91bnJlZ2lzdGVyX2RldmljZSgmZGV2LT5pYmRldik7CisJa2ZyZWUoZGV2LT5pYmRldi5pd2NtKTsKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwppbmRleCAyN2JiZGM4Li42ZTg2NTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKQEAgLTg4OSw2ICs4ODksNyBAQAogCWluaXRfYXR0ci5xcF9kbWFfc2l6ZSA9ICgxVUwgPDwgcWhwLT53cS5zaXplX2xvZzIpOwogCWluaXRfYXR0ci5ycWVfY291bnQgPSBpd2NoX3JxZXNfcG9zdGVkKHFocCk7CiAJaW5pdF9hdHRyLmZsYWdzID0gcWhwLT5hdHRyLm1wYV9hdHRyLmluaXRpYXRvciA/IE1QQV9JTklUSUFUT1IgOiAwOworCWluaXRfYXR0ci5jaGFuID0gcWhwLT5lcC0+bDJ0LT5zbXRfaWR4OwogCWlmIChwZWVyMnBlZXIpIHsKIAkJaW5pdF9hdHRyLnJ0cl90eXBlID0gUlRSX1JFQUQ7CiAJCWlmIChpbml0X2F0dHIub3JkID09IDAgJiYgcWhwLT5hdHRyLm1wYV9hdHRyLmluaXRpYXRvcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tYWluLmMKaW5kZXggZmFiMThhMi4uNWI2MzVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tYWluLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlICJlaGNhX3Rvb2xzLmgiCiAjaW5jbHVkZSAiaGNwX2lmLmgiCiAKLSNkZWZpbmUgSENBRF9WRVJTSU9OICIwMDI4IgorI2RlZmluZSBIQ0FEX1ZFUlNJT04gIjAwMjkiCiAKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkNocmlzdG9waCBSYWlzY2ggPHJhaXNjaEBkZS5pYm0uY29tPiIpOwpAQCAtNjQsNyArNjQsNyBAQAogc3RhdGljIGludCBlaGNhX3BvbGxfYWxsX2VxcyAgPSAxOwogCiBpbnQgZWhjYV9kZWJ1Z19sZXZlbCAgID0gMDsKLWludCBlaGNhX25yX3BvcnRzICAgICAgPSAyOworaW50IGVoY2FfbnJfcG9ydHMgICAgICA9IC0xOwogaW50IGVoY2FfdXNlX2hwX21yICAgICA9IDA7CiBpbnQgZWhjYV9wb3J0X2FjdF90aW1lID0gMzA7CiBpbnQgZWhjYV9zdGF0aWNfcmF0ZSAgID0gLTE7CkBAIC05NSw4ICs5NSw4IEBACiAJCSAiSGFyZHdhcmUgbGV2ZWwgKDA6IGF1dG9zZW5zaW5nIChkZWZhdWx0KSwgIgogCQkgIjB4MTAuLjB4MTQ6IGVIQ0EsIDB4MjAuLjB4MjM6IGVIQ0EyKSIpOwogTU9EVUxFX1BBUk1fREVTQyhucl9wb3J0cywKLQkJICJudW1iZXIgb2YgY29ubmVjdGVkIHBvcnRzICgtMTogYXV0b2RldGVjdCwgMTogcG9ydCBvbmUgb25seSwgIgotCQkgIjI6IHR3byBwb3J0cyAoZGVmYXVsdCkiKTsKKwkJICJudW1iZXIgb2YgY29ubmVjdGVkIHBvcnRzICgtMTogYXV0b2RldGVjdCAoZGVmYXVsdCksICIKKwkJICIxOiBwb3J0IG9uZSBvbmx5LCAyOiB0d28gcG9ydHMpIik7CiBNT0RVTEVfUEFSTV9ERVNDKHVzZV9ocF9tciwKIAkJICJVc2UgaGlnaCBwZXJmb3JtYW5jZSBNUnMgKGRlZmF1bHQ6IG5vKSIpOwogTU9EVUxFX1BBUk1fREVTQyhwb3J0X2FjdF90aW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9yZXFzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3JlcXMuYwppbmRleCA1YTNkOTZmLi44ZmQ4OGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3JlcXMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3JlcXMuYwpAQCAtNzg2LDcgKzc4NiwxMSBAQAogCXdjLT5zbGlkID0gY3FlLT5ybGlkOwogCXdjLT5kbGlkX3BhdGhfYml0cyA9IGNxZS0+ZGxpZDsKIAl3Yy0+c3JjX3FwID0gY3FlLT5yZW1vdGVfcXBfbnVtYmVyOwotCXdjLT53Y19mbGFncyA9IGNxZS0+d19jb21wbGV0aW9uX2ZsYWdzOworCS8qCisJICogSFcgaGFzICJJbW1lZCBkYXRhIHByZXNlbnQiIGFuZCAiR1JIIHByZXNlbnQiIGluIGJpdHMgNiBhbmQgNS4KKwkgKiBTVyBkZWZpbmVzIHRob3NlIGluIGJpdHMgMSBhbmQgMCwgc28gd2UgY2FuIGp1c3Qgc2hpZnQgYW5kIG1hc2suCisJICovCisJd2MtPndjX2ZsYWdzID0gKGNxZS0+d19jb21wbGV0aW9uX2ZsYWdzID4+IDUpICYgMzsKIAl3Yy0+ZXguaW1tX2RhdGEgPSBjcHVfdG9fYmUzMihjcWUtPmltbWVkaWF0ZV9kYXRhKTsKIAl3Yy0+c2wgPSBjcWUtPnNlcnZpY2VfbGV2ZWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2Ffc3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jCmluZGV4IGM1NjhiMjguLjhjMTIxM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2Ffc3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9zcXAuYwpAQCAtMTI1LDE0ICsxMjUsMzAgQEAKIAl1OCBkYXRhWzE5Ml07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyogVEMvU0wvRkwgcGFja2VkIGludG8gMzIgYml0cywgYXMgaW4gQ2xhc3NQb3J0SW5mbyAqLworc3RydWN0IHRjc2xmbCB7CisJdTMyIHRjOjg7CisJdTMyIHNsOjQ7CisJdTMyIGZsOjIwOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIElQIFZlcnNpb24vVEMvRkwgcGFja2VkIGludG8gMzIgYml0cywgYXMgaW4gR1JIICovCitzdHJ1Y3QgdmVydGNmbCB7CisJdTMyIHZlcjo0OworCXUzMiB0Yzo4OworCXUzMiBmbDoyMDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdGF0aWMgaW50IGVoY2FfcHJvY2Vzc19wZXJmKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0X251bSwKKwkJCSAgICAgc3RydWN0IGliX3djICppbl93Yywgc3RydWN0IGliX2dyaCAqaW5fZ3JoLAogCQkJICAgICBzdHJ1Y3QgaWJfbWFkICppbl9tYWQsIHN0cnVjdCBpYl9tYWQgKm91dF9tYWQpCiB7CiAJc3RydWN0IGliX3BlcmYgKmluX3BlcmYgPSAoc3RydWN0IGliX3BlcmYgKilpbl9tYWQ7CiAJc3RydWN0IGliX3BlcmYgKm91dF9wZXJmID0gKHN0cnVjdCBpYl9wZXJmICopb3V0X21hZDsKIAlzdHJ1Y3QgaWJfY2xhc3NfcG9ydF9pbmZvICpwb2kgPQogCQkoc3RydWN0IGliX2NsYXNzX3BvcnRfaW5mbyAqKW91dF9wZXJmLT5kYXRhOworCXN0cnVjdCB0Y3NsZmwgKnRjc2xmbCA9CisJCShzdHJ1Y3QgdGNzbGZsICopJnBvaS0+cmVkaXJlY3RfdGNzbGZsOwogCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2EgPQogCQljb250YWluZXJfb2YoaWJkZXYsIHN0cnVjdCBlaGNhX3NoY2EsIGliX2RldmljZSk7CiAJc3RydWN0IGVoY2Ffc3BvcnQgKnNwb3J0ID0gJnNoY2EtPnNwb3J0W3BvcnRfbnVtIC0gMV07CkBAIC0xNTgsMTAgKzE3NCwyOSBAQAogCQlwb2ktPmJhc2VfdmVyc2lvbiA9IDE7CiAJCXBvaS0+Y2xhc3NfdmVyc2lvbiA9IDE7CiAJCXBvaS0+cmVzcF90aW1lX3ZhbHVlID0gMTg7Ci0JCXBvaS0+cmVkaXJlY3RfbGlkID0gc3BvcnQtPnNhdmVkX2F0dHIubGlkOwotCQlwb2ktPnJlZGlyZWN0X3FwID0gc3BvcnQtPnBtYV9xcF9ucjsKKworCQkvKiBjb3B5IGxvY2FsIHJvdXRpbmcgaW5mb3JtYXRpb24gZnJvbSBXQyB3aGVyZSBhcHBsaWNhYmxlICovCisJCXRjc2xmbC0+c2wgICAgICAgICA9IGluX3djLT5zbDsKKwkJcG9pLT5yZWRpcmVjdF9saWQgID0KKwkJCXNwb3J0LT5zYXZlZF9hdHRyLmxpZCB8IGluX3djLT5kbGlkX3BhdGhfYml0czsKKwkJcG9pLT5yZWRpcmVjdF9xcCAgID0gc3BvcnQtPnBtYV9xcF9ucjsKIAkJcG9pLT5yZWRpcmVjdF9xa2V5ID0gSUJfUVAxX1FLRVk7Ci0JCXBvaS0+cmVkaXJlY3RfcGtleSA9IElCX0RFRkFVTFRfUEtFWV9GVUxMOworCisJCWVoY2FfcXVlcnlfcGtleShpYmRldiwgcG9ydF9udW0sIGluX3djLT5wa2V5X2luZGV4LAorCQkJCSZwb2ktPnJlZGlyZWN0X3BrZXkpOworCisJCS8qIGlmIHJlcXVlc3Qgd2FzIGdsb2JhbGx5IHJvdXRlZCwgY29weSByb3V0ZSBpbmZvICovCisJCWlmIChpbl9ncmgpIHsKKwkJCXN0cnVjdCB2ZXJ0Y2ZsICp2ZXJ0Y2ZsID0KKwkJCQkoc3RydWN0IHZlcnRjZmwgKikmaW5fZ3JoLT52ZXJzaW9uX3RjbGFzc19mbG93OworCQkJbWVtY3B5KHBvaS0+cmVkaXJlY3RfZ2lkLCBpbl9ncmgtPmRnaWQucmF3LAorCQkJICAgICAgIHNpemVvZihwb2ktPnJlZGlyZWN0X2dpZCkpOworCQkJdGNzbGZsLT50YyAgICAgICAgPSB2ZXJ0Y2ZsLT50YzsKKwkJCXRjc2xmbC0+ZmwgICAgICAgID0gdmVydGNmbC0+Zmw7CisJCX0gZWxzZQorCQkJLyogZWxzZSBvbmx5IGZpbGwgaW4gZGVmYXVsdCBHSUQgKi8KKwkJCWVoY2FfcXVlcnlfZ2lkKGliZGV2LCBwb3J0X251bSwgMCwKKwkJCQkgICAgICAgKHVuaW9uIGliX2dpZCAqKSZwb2ktPnJlZGlyZWN0X2dpZCk7CiAKIAkJZWhjYV9kYmcoaWJkZXYsICJlaGNhX3BtYV9saWQ9JXggZWhjYV9wbWFfcXA9JXgiLAogCQkJIHNwb3J0LT5zYXZlZF9hdHRyLmxpZCwgc3BvcnQtPnBtYV9xcF9ucik7CkBAIC0xODMsOCArMjE4LDcgQEAKIAogaW50IGVoY2FfcHJvY2Vzc19tYWQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGludCBtYWRfZmxhZ3MsIHU4IHBvcnRfbnVtLAogCQkgICAgIHN0cnVjdCBpYl93YyAqaW5fd2MsIHN0cnVjdCBpYl9ncmggKmluX2dyaCwKLQkJICAgICBzdHJ1Y3QgaWJfbWFkICppbl9tYWQsCi0JCSAgICAgc3RydWN0IGliX21hZCAqb3V0X21hZCkKKwkJICAgICBzdHJ1Y3QgaWJfbWFkICppbl9tYWQsIHN0cnVjdCBpYl9tYWQgKm91dF9tYWQpCiB7CiAJaW50IHJldDsKIApAQCAtMTk2LDcgKzIzMCw4IEBACiAJCXJldHVybiBJQl9NQURfUkVTVUxUX1NVQ0NFU1M7CiAKIAllaGNhX2RiZyhpYmRldiwgInBvcnRfbnVtPSV4IHNyY19xcD0leCIsIHBvcnRfbnVtLCBpbl93Yy0+c3JjX3FwKTsKLQlyZXQgPSBlaGNhX3Byb2Nlc3NfcGVyZihpYmRldiwgcG9ydF9udW0sIGluX21hZCwgb3V0X21hZCk7CisJcmV0ID0gZWhjYV9wcm9jZXNzX3BlcmYoaWJkZXYsIHBvcnRfbnVtLCBpbl93YywgaW5fZ3JoLAorCQkJCWluX21hZCwgb3V0X21hZCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwppbmRleCAyMzE3Mzk4Li4zOGEyODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwpAQCAtMTYxNiw3ICsxNjE2LDcgQEAKIAkJcGQtPnBvcnRfY250ID0gMTsKIAkJcG9ydF9mcChmcCkgPSBwZDsKIAkJcGQtPnBvcnRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChjdXJyZW50KSk7Ci0JCXN0cm5jcHkocGQtPnBvcnRfY29tbSwgY3VycmVudC0+Y29tbSwgc2l6ZW9mKHBkLT5wb3J0X2NvbW0pKTsKKwkJc3RybGNweShwZC0+cG9ydF9jb21tLCBjdXJyZW50LT5jb21tLCBzaXplb2YocGQtPnBvcnRfY29tbSkpOwogCQlpcGF0aF9zdGF0cy5zcHNfcG9ydHMrKzsKIAkJcmV0ID0gMDsKIAl9IGVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYwppbmRleCAxNmE3MDJkLi5jZWI5OGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCkBAIC02MCw3ICs2MCw3IEBACiAJaWYgKHNtcC0+YXR0cl9tb2QpCiAJCXNtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOwogCi0Jc3RybmNweShzbXAtPmRhdGEsIGliZGV2LT5ub2RlX2Rlc2MsIHNpemVvZihzbXAtPmRhdGEpKTsKKwltZW1jcHkoc21wLT5kYXRhLCBpYmRldi0+bm9kZV9kZXNjLCBzaXplb2Yoc21wLT5kYXRhKSk7CiAKIAlyZXR1cm4gcmVwbHkoc21wKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYwppbmRleCBhZTNkNzU5Li4zY2IzZjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCkBAIC0zNDIsNiArMzQyLDkgQEAKIAlzdHJ1Y3QgbWx4NF9pYl9hbGxvY191Y29udGV4dF9yZXNwIHJlc3A7CiAJaW50IGVycjsKIAorCWlmICghZGV2LT5pYl9hY3RpdmUpCisJCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOworCiAJcmVzcC5xcF90YWJfc2l6ZSAgICAgID0gZGV2LT5kZXYtPmNhcHMubnVtX3FwczsKIAlyZXNwLmJmX3JlZ19zaXplICAgICAgPSBkZXYtPmRldi0+Y2Fwcy5iZl9yZWdfc2l6ZTsKIAlyZXNwLmJmX3JlZ3NfcGVyX3BhZ2UgPSBkZXYtPmRldi0+Y2Fwcy5iZl9yZWdzX3Blcl9wYWdlOwpAQCAtNTQwLDE1ICs1NDMsMTEgQEAKIAogc3RhdGljIHZvaWQgKm1seDRfaWJfYWRkKHN0cnVjdCBtbHg0X2RldiAqZGV2KQogewotCXN0YXRpYyBpbnQgbWx4NF9pYl92ZXJzaW9uX3ByaW50ZWQ7CiAJc3RydWN0IG1seDRfaWJfZGV2ICppYmRldjsKIAlpbnQgbnVtX3BvcnRzID0gMDsKIAlpbnQgaTsKIAotCWlmICghbWx4NF9pYl92ZXJzaW9uX3ByaW50ZWQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCBtbHg0X2liX3ZlcnNpb24pOwotCQkrK21seDRfaWJfdmVyc2lvbl9wcmludGVkOwotCX0KKwlwcmludGtfb25jZShLRVJOX0lORk8gIiVzIiwgbWx4NF9pYl92ZXJzaW9uKTsKIAogCW1seDRfZm9yZWFjaF9wb3J0KGksIGRldiwgTUxYNF9QT1JUX1RZUEVfSUIpCiAJCW51bV9wb3J0cysrOwpAQCAtNjczLDYgKzY3Miw4IEBACiAJCQlnb3RvIGVycl9yZWc7CiAJfQogCisJaWJkZXYtPmliX2FjdGl2ZSA9IHRydWU7CisKIAlyZXR1cm4gaWJkZXY7CiAKIGVycl9yZWc6CkBAIC03MjksNiArNzMwLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIE1MWDRfREVWX0VWRU5UX0NBVEFTVFJPUEhJQ19FUlJPUjoKKwkJaWJkZXYtPmliX2FjdGl2ZSA9IGZhbHNlOwogCQlpYmV2LmV2ZW50ID0gSUJfRVZFTlRfREVWSUNFX0ZBVEFMOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWx4NF9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWx4NF9pYi5oCmluZGV4IDhhN2RkNjcuLjM0ODZkNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21seDRfaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tbHg0X2liLmgKQEAgLTE3NSw2ICsxNzUsNyBAQAogCXNwaW5sb2NrX3QJCXNtX2xvY2s7CiAKIAlzdHJ1Y3QgbXV0ZXgJCWNhcF9tYXNrX211dGV4OworCWJvb2wJCQlpYl9hY3RpdmU7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtbHg0X2liX2RldiAqdG9fbWRldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCmluZGV4IGM0YTAyNjQuLjIxOWIxMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYwpAQCAtNjE1LDEwICs2MTUsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQgbWx4NF9pYl9sb2NrX2NxcyhzdHJ1Y3QgbWx4NF9pYl9jcSAqc2VuZF9jcSwgc3RydWN0IG1seDRfaWJfY3EgKnJlY3ZfY3EpCisJX19hY3F1aXJlcygmc2VuZF9jcS0+bG9jaykgX19hY3F1aXJlcygmcmVjdl9jcS0+bG9jaykKIHsKLQlpZiAoc2VuZF9jcSA9PSByZWN2X2NxKQorCWlmIChzZW5kX2NxID09IHJlY3ZfY3EpIHsKIAkJc3Bpbl9sb2NrX2lycSgmc2VuZF9jcS0+bG9jayk7Ci0JZWxzZSBpZiAoc2VuZF9jcS0+bWNxLmNxbiA8IHJlY3ZfY3EtPm1jcS5jcW4pIHsKKwkJX19hY3F1aXJlKCZyZWN2X2NxLT5sb2NrKTsKKwl9IGVsc2UgaWYgKHNlbmRfY3EtPm1jcS5jcW4gPCByZWN2X2NxLT5tY3EuY3FuKSB7CiAJCXNwaW5fbG9ja19pcnEoJnNlbmRfY3EtPmxvY2spOwogCQlzcGluX2xvY2tfbmVzdGVkKCZyZWN2X2NxLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJfSBlbHNlIHsKQEAgLTYyOCwxMCArNjMwLDEyIEBACiB9CiAKIHN0YXRpYyB2b2lkIG1seDRfaWJfdW5sb2NrX2NxcyhzdHJ1Y3QgbWx4NF9pYl9jcSAqc2VuZF9jcSwgc3RydWN0IG1seDRfaWJfY3EgKnJlY3ZfY3EpCisJX19yZWxlYXNlcygmc2VuZF9jcS0+bG9jaykgX19yZWxlYXNlcygmcmVjdl9jcS0+bG9jaykKIHsKLQlpZiAoc2VuZF9jcSA9PSByZWN2X2NxKQorCWlmIChzZW5kX2NxID09IHJlY3ZfY3EpIHsKKwkJX19yZWxlYXNlKCZyZWN2X2NxLT5sb2NrKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZzZW5kX2NxLT5sb2NrKTsKLQllbHNlIGlmIChzZW5kX2NxLT5tY3EuY3FuIDwgcmVjdl9jcS0+bWNxLmNxbikgeworCX0gZWxzZSBpZiAoc2VuZF9jcS0+bWNxLmNxbiA8IHJlY3ZfY3EtPm1jcS5jcW4pIHsKIAkJc3Bpbl91bmxvY2soJnJlY3ZfY3EtPmxvY2spOwogCQlzcGluX3VubG9ja19pcnEoJnNlbmRfY3EtPmxvY2spOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCmluZGV4IDY1YWQzNTkuLjA1NmIyYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCkBAIC04OCw2ICs4OCw3IEBACiAJZXZlbnQuZGV2aWNlID0gJmRldi0+aWJfZGV2OwogCWV2ZW50LmV2ZW50ICA9IElCX0VWRU5UX0RFVklDRV9GQVRBTDsKIAlldmVudC5lbGVtZW50LnBvcnRfbnVtID0gMDsKKwlkZXYtPmFjdGl2ZSA9IGZhbHNlOwogCiAJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NvbmZpZ19yZWcuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jb25maWdfcmVnLmgKaW5kZXggNzU2NzFmNy4uMTU1YmM2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NvbmZpZ19yZWcuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY29uZmlnX3JlZy5oCkBAIC0zNCw4ICszNCw2IEBACiAjaWZuZGVmIE1USENBX0NPTkZJR19SRUdfSAogI2RlZmluZSBNVEhDQV9DT05GSUdfUkVHX0gKIAotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0KICNkZWZpbmUgTVRIQ0FfSENSX0JBU0UgICAgICAgICAweDgwNjgwCiAjZGVmaW5lIE1USENBX0hDUl9TSVpFICAgICAgICAgMHgwMDAxYwogI2RlZmluZSBNVEhDQV9FQ1JfQkFTRSAgICAgICAgIDB4ODA3MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaAppbmRleCA5ZWY2MTFmLi43ZTZhNmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oCkBAIC0zNTcsNiArMzU3LDcgQEAKIAlzdHJ1Y3QgaWJfYWggICAgICAgICAqc21fYWhbTVRIQ0FfTUFYX1BPUlRTXTsKIAlzcGlubG9ja190ICAgICAgICAgICAgc21fbG9jazsKIAl1OCAgICAgICAgICAgICAgICAgICAgcmF0ZVtNVEhDQV9NQVhfUE9SVFNdOworCWJvb2wJCSAgICAgIGFjdGl2ZTsKIH07CiAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2VxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYwppbmRleCA5MGU0ZTQ1Li44YzMxZmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYwpAQCAtODI5LDI3ICs4MjksMzQgQEAKIAogCWlmIChkZXYtPm10aGNhX2ZsYWdzICYgTVRIQ0FfRkxBR19NU0lfWCkgewogCQlzdGF0aWMgY29uc3QgY2hhciAqZXFfbmFtZVtdID0gewotCQkJW01USENBX0VRX0NPTVBdICA9IERSVl9OQU1FICIgKGNvbXApIiwKLQkJCVtNVEhDQV9FUV9BU1lOQ10gPSBEUlZfTkFNRSAiIChhc3luYykiLAotCQkJW01USENBX0VRX0NNRF0gICA9IERSVl9OQU1FICIgKGNtZCkiCisJCQlbTVRIQ0FfRVFfQ09NUF0gID0gRFJWX05BTUUgIi1jb21wIiwKKwkJCVtNVEhDQV9FUV9BU1lOQ10gPSBEUlZfTkFNRSAiLWFzeW5jIiwKKwkJCVtNVEhDQV9FUV9DTURdICAgPSBEUlZfTkFNRSAiLWNtZCIKIAkJfTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgTVRIQ0FfTlVNX0VROyArK2kpIHsKKwkJCXNucHJpbnRmKGRldi0+ZXFfdGFibGUuZXFbaV0uaXJxX25hbWUsCisJCQkJIElCX0RFVklDRV9OQU1FX01BWCwKKwkJCQkgIiVzQHBjaTolcyIsIGVxX25hbWVbaV0sCisJCQkJIHBjaV9uYW1lKGRldi0+cGRldikpOwogCQkJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5lcV90YWJsZS5lcVtpXS5tc2lfeF92ZWN0b3IsCiAJCQkJCSAgbXRoY2FfaXNfbWVtZnJlZShkZXYpID8KIAkJCQkJICBtdGhjYV9hcmJlbF9tc2lfeF9pbnRlcnJ1cHQgOgogCQkJCQkgIG10aGNhX3Rhdm9yX21zaV94X2ludGVycnVwdCwKLQkJCQkJICAwLCBlcV9uYW1lW2ldLCBkZXYtPmVxX3RhYmxlLmVxICsgaSk7CisJCQkJCSAgMCwgZGV2LT5lcV90YWJsZS5lcVtpXS5pcnFfbmFtZSwKKwkJCQkJICBkZXYtPmVxX3RhYmxlLmVxICsgaSk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gZXJyX291dF9jbWQ7CiAJCQlkZXYtPmVxX3RhYmxlLmVxW2ldLmhhdmVfaXJxID0gMTsKIAkJfQogCX0gZWxzZSB7CisJCXNucHJpbnRmKGRldi0+ZXFfdGFibGUuZXFbMF0uaXJxX25hbWUsIElCX0RFVklDRV9OQU1FX01BWCwKKwkJCSBEUlZfTkFNRSAiQHBjaTolcyIsIHBjaV9uYW1lKGRldi0+cGRldikpOwogCQllcnIgPSByZXF1ZXN0X2lycShkZXYtPnBkZXYtPmlycSwKIAkJCQkgIG10aGNhX2lzX21lbWZyZWUoZGV2KSA/CiAJCQkJICBtdGhjYV9hcmJlbF9pbnRlcnJ1cHQgOgogCQkJCSAgbXRoY2FfdGF2b3JfaW50ZXJydXB0LAotCQkJCSAgSVJRRl9TSEFSRUQsIERSVl9OQU1FLCBkZXYpOworCQkJCSAgSVJRRl9TSEFSRUQsIGRldi0+ZXFfdGFibGUuZXFbMF0uaXJxX25hbWUsIGRldik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycl9vdXRfY21kOwogCQlkZXYtPmVxX3RhYmxlLmhhdmVfaXJxID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCmluZGV4IDEzZGE5ZjEuLmIwMWIyODk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKQEAgLTExMTYsNiArMTExNiw4IEBACiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG1kZXYpOwogCW1kZXYtPmhjYV90eXBlID0gaGNhX3R5cGU7CiAKKwltZGV2LT5hY3RpdmUgPSB0cnVlOworCiAJcmV0dXJuIDA7CiAKIGVycl91bnJlZ2lzdGVyOgpAQCAtMTIxNSwxNSArMTIxNywxMSBAQAogc3RhdGljIGludCBfX2RldmluaXQgbXRoY2FfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlzdGF0aWMgaW50IG10aGNhX3ZlcnNpb25fcHJpbnRlZCA9IDA7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJm10aGNhX2RldmljZV9tdXRleCk7CiAKLQlpZiAoIW10aGNhX3ZlcnNpb25fcHJpbnRlZCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIG10aGNhX3ZlcnNpb24pOwotCQkrK210aGNhX3ZlcnNpb25fcHJpbnRlZDsKLQl9CisJcHJpbnRrX29uY2UoS0VSTl9JTkZPICIlcyIsIG10aGNhX3ZlcnNpb24pOwogCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSA+PSBBUlJBWV9TSVpFKG10aGNhX2hjYV90YWJsZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXMgaGFzIGludmFsaWQgZHJpdmVyIGRhdGEgJWx4XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwppbmRleCA4N2FkODg5Li5iY2Y3YTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwpAQCAtMzM0LDYgKzMzNCw5IEBACiAJc3RydWN0IG10aGNhX3Vjb250ZXh0ICAgICAgICAgICAqY29udGV4dDsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnI7CiAKKwlpZiAoISh0b19tZGV2KGliZGV2KS0+YWN0aXZlKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CisKIAltZW1zZXQoJnVyZXNwLCAwLCBzaXplb2YgdXJlc3ApOwogCiAJdXJlc3AucXBfdGFiX3NpemUgPSB0b19tZGV2KGliZGV2KS0+bGltaXRzLm51bV9xcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCmluZGV4IGM2MjFmODcuLjkwZjRjNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCkBAIC0xMTMsNiArMTEzLDcgQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgIG5lbnQ7CiAJc3RydWN0IG10aGNhX2J1Zl9saXN0ICpwYWdlX2xpc3Q7CiAJc3RydWN0IG10aGNhX21yICAgICAgICBtcjsKKwljaGFyCQkgICAgICAgaXJxX25hbWVbSUJfREVWSUNFX05BTUVfTUFYXTsKIH07CiAKIHN0cnVjdCBtdGhjYV9hdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKaW5kZXggZjUwODFiZi4uYzEwNTc2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKQEAgLTEzMTksMTAgKzEzMTksMTIgQEAKIH0KIAogc3RhdGljIHZvaWQgbXRoY2FfbG9ja19jcXMoc3RydWN0IG10aGNhX2NxICpzZW5kX2NxLCBzdHJ1Y3QgbXRoY2FfY3EgKnJlY3ZfY3EpCisJX19hY3F1aXJlcygmc2VuZF9jcS0+bG9jaykgX19hY3F1aXJlcygmcmVjdl9jcS0+bG9jaykKIHsKLQlpZiAoc2VuZF9jcSA9PSByZWN2X2NxKQorCWlmIChzZW5kX2NxID09IHJlY3ZfY3EpIHsKIAkJc3Bpbl9sb2NrX2lycSgmc2VuZF9jcS0+bG9jayk7Ci0JZWxzZSBpZiAoc2VuZF9jcS0+Y3FuIDwgcmVjdl9jcS0+Y3FuKSB7CisJCV9fYWNxdWlyZSgmcmVjdl9jcS0+bG9jayk7CisJfSBlbHNlIGlmIChzZW5kX2NxLT5jcW4gPCByZWN2X2NxLT5jcW4pIHsKIAkJc3Bpbl9sb2NrX2lycSgmc2VuZF9jcS0+bG9jayk7CiAJCXNwaW5fbG9ja19uZXN0ZWQoJnJlY3ZfY3EtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAl9IGVsc2UgewpAQCAtMTMzMiwxMCArMTMzNCwxMiBAQAogfQogCiBzdGF0aWMgdm9pZCBtdGhjYV91bmxvY2tfY3FzKHN0cnVjdCBtdGhjYV9jcSAqc2VuZF9jcSwgc3RydWN0IG10aGNhX2NxICpyZWN2X2NxKQorCV9fcmVsZWFzZXMoJnNlbmRfY3EtPmxvY2spIF9fcmVsZWFzZXMoJnJlY3ZfY3EtPmxvY2spCiB7Ci0JaWYgKHNlbmRfY3EgPT0gcmVjdl9jcSkKKwlpZiAoc2VuZF9jcSA9PSByZWN2X2NxKSB7CisJCV9fcmVsZWFzZSgmcmVjdl9jcS0+bG9jayk7CiAJCXNwaW5fdW5sb2NrX2lycSgmc2VuZF9jcS0+bG9jayk7Ci0JZWxzZSBpZiAoc2VuZF9jcS0+Y3FuIDwgcmVjdl9jcS0+Y3FuKSB7CisJfSBlbHNlIGlmIChzZW5kX2NxLT5jcW4gPCByZWN2X2NxLT5jcW4pIHsKIAkJc3Bpbl91bmxvY2soJnJlY3ZfY3EtPmxvY2spOwogCQlzcGluX3VubG9ja19pcnEoJnNlbmRfY3EtPmxvY2spOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcmVzZXQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9yZXNldC5jCmluZGV4IGFjYjY4MTdmLi4yYTEzYTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcmVzZXQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcmVzZXQuYwpAQCAtMzAsNyArMzAsNiBAQAogICogU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaAppbmRleCBiZjE3MjBmLi5iY2M2YWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKQEAgLTUyMyw3ICs1MjMsNyBAQAogdm9pZCBuZXNfY21fZGlzY29ubl93b3JrZXIodm9pZCAqKTsKIAogLyogbmVzX3ZlcmJzLmMgKi8KLWludCBuZXNfaHdfbW9kaWZ5X3FwKHN0cnVjdCBuZXNfZGV2aWNlICosIHN0cnVjdCBuZXNfcXAgKiwgdTMyLCB1MzIpOworaW50IG5lc19od19tb2RpZnlfcXAoc3RydWN0IG5lc19kZXZpY2UgKiwgc3RydWN0IG5lc19xcCAqLCB1MzIsIHUzMiwgdTMyKTsKIGludCBuZXNfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqLCBzdHJ1Y3QgaWJfcXBfYXR0ciAqLCBpbnQsIHN0cnVjdCBpYl91ZGF0YSAqKTsKIHN0cnVjdCBuZXNfaWJfZGV2aWNlICpuZXNfaW5pdF9vZmFfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICopOwogdm9pZCBuZXNfZGVzdHJveV9vZmFfZGV2aWNlKHN0cnVjdCBuZXNfaWJfZGV2aWNlICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKaW5kZXggMTE0YjgwMi4uNzM0NzNkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCkBAIC0yNDUwLDE5ICsyNDUwLDE2IEBACiAgKi8KIGludCBuZXNfY21fZGlzY29ubihzdHJ1Y3QgbmVzX3FwICpuZXNxcCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBkaXNjb25uX3dvcmsgKndvcms7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKLQlpZiAobmVzcXAtPmRpc2Nvbm5fcGVuZGluZyA9PSAwKSB7Ci0JCW5lc3FwLT5kaXNjb25uX3BlbmRpbmcrKzsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKLQkJLyogaW5pdCBvdXIgZGlzY29ubmVjdCB3b3JrIGVsZW1lbnQsIHRvICovCi0JCUlOSVRfV09SSygmbmVzcXAtPmRpc2Nvbm5fd29yaywgbmVzX2Rpc2Nvbm5lY3Rfd29ya2VyKTsKKwl3b3JrID0ga3phbGxvYyhzaXplb2YgKndvcmssIEdGUF9BVE9NSUMpOworCWlmICghd29yaykKKwkJcmV0dXJuIC1FTk9NRU07IC8qIFRpbWVyIHdpbGwgY2xlYW4gdXAgKi8KIAotCQlxdWV1ZV93b3JrKGdfY21fY29yZS0+ZGlzY29ubl93cSwgJm5lc3FwLT5kaXNjb25uX3dvcmspOwotCX0gZWxzZQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOwotCisJbmVzX2FkZF9yZWYoJm5lc3FwLT5pYnFwKTsKKwl3b3JrLT5uZXNxcCA9IG5lc3FwOworCUlOSVRfV09SSygmd29yay0+d29yaywgbmVzX2Rpc2Nvbm5lY3Rfd29ya2VyKTsKKwlxdWV1ZV93b3JrKGdfY21fY29yZS0+ZGlzY29ubl93cSwgJndvcmstPndvcmspOwogCXJldHVybiAwOwogfQogCkBAIC0yNDcyLDExICsyNDY5LDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkIG5lc19kaXNjb25uZWN0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IG5lc19xcCAqbmVzcXAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5lc19xcCwgZGlzY29ubl93b3JrKTsKKwlzdHJ1Y3QgZGlzY29ubl93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGlzY29ubl93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgbmVzX3FwICpuZXNxcCA9IGR3b3JrLT5uZXNxcDsKIAorCWtmcmVlKGR3b3JrKTsKIAluZXNfZGVidWcoTkVTX0RCR19DTSwgInByb2Nlc3NpbmcgQUVRRSBpZCAweCUwNFggZm9yIFFQJXUuXG4iLAogCQkJbmVzcXAtPmxhc3RfYWVxLCBuZXNxcC0+aHdxcC5xcF9pZCk7CiAJbmVzX2NtX2Rpc2Nvbm5fdHJ1ZShuZXNxcCk7CisJbmVzX3JlbV9yZWYoJm5lc3FwLT5pYnFwKTsKIH0KIAogCkBAIC0yNDkzLDcgKzI0OTMsMTIgQEAKIAl1MTYgbGFzdF9hZTsKIAl1OCBvcmlnaW5hbF9od190Y3Bfc3RhdGU7CiAJdTggb3JpZ2luYWxfaWJxcF9zdGF0ZTsKLQl1OCBpc3N1ZWRfZGlzY29ubmVjdF9yZXNldCA9IDA7CisJZW51bSBpd19jbV9ldmVudF90eXBlIGRpc2Nvbm5fc3RhdHVzID0gSVdfQ01fRVZFTlRfU1RBVFVTX09LOworCWludCBpc3N1ZV9kaXNjb25uID0gMDsKKwlpbnQgaXNzdWVfY2xvc2UgPSAwOworCWludCBpc3N1ZV9mbHVzaCA9IDA7CisJdTMyIGZsdXNoX3EgPSBORVNfQ1FQX0ZMVVNIX1JROworCXN0cnVjdCBpYl9ldmVudCBpYmV2ZW50OwogCiAJaWYgKCFuZXNxcCkgewogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgImRpc2Nvbm5lY3Rfd29ya2VyIG5lc3FwIGlzIE5VTExcbiIpOwpAQCAtMjUxNywyNCArMjUyMiw1NSBAQAogCW9yaWdpbmFsX2licXBfc3RhdGUgICA9IG5lc3FwLT5pYnFwX3N0YXRlOwogCWxhc3RfYWUgPSBuZXNxcC0+bGFzdF9hZXE7CiAKKwlpZiAobmVzcXAtPnRlcm1fZmxhZ3MpIHsKKwkJaXNzdWVfZGlzY29ubiA9IDE7CisJCWlzc3VlX2Nsb3NlID0gMTsKKwkJbmVzcXAtPmNtX2lkID0gTlVMTDsKKwkJaWYgKG5lc3FwLT5mbHVzaF9pc3N1ZWQgPT0gMCkgeworCQkJbmVzcXAtPmZsdXNoX2lzc3VlZCA9IDE7CisJCQlpc3N1ZV9mbHVzaCA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKChvcmlnaW5hbF9od190Y3Bfc3RhdGUgPT0gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFX1dBSVQpIHx8CisJCQkoKG9yaWdpbmFsX2licXBfc3RhdGUgPT0gSUJfUVBTX1JUUykgJiYKKwkJCShsYXN0X2FlID09IE5FU19BRVFFX0FFSURfTExQX0NPTk5FQ1RJT05fUkVTRVQpKSkgeworCQlpc3N1ZV9kaXNjb25uID0gMTsKKwkJaWYgKGxhc3RfYWUgPT0gTkVTX0FFUUVfQUVJRF9MTFBfQ09OTkVDVElPTl9SRVNFVCkKKwkJCWRpc2Nvbm5fc3RhdHVzID0gSVdfQ01fRVZFTlRfU1RBVFVTX1JFU0VUOworCX0KIAotCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAic2V0IGlicXBfc3RhdGU9JXVcbiIsIG5lc3FwLT5pYnFwX3N0YXRlKTsKKwlpZiAoKChvcmlnaW5hbF9od190Y3Bfc3RhdGUgPT0gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFRCkgfHwKKwkJIChvcmlnaW5hbF9od190Y3Bfc3RhdGUgPT0gTkVTX0FFUUVfVENQX1NUQVRFX1RJTUVfV0FJVCkgfHwKKwkJIChsYXN0X2FlID09IE5FU19BRVFFX0FFSURfUkRNQVBfUk9FX0JBRF9MTFBfQ0xPU0UpIHx8CisJCSAobGFzdF9hZSA9PSBORVNfQUVRRV9BRUlEX0xMUF9DT05ORUNUSU9OX1JFU0VUKSkpIHsKKwkJaXNzdWVfY2xvc2UgPSAxOworCQluZXNxcC0+Y21faWQgPSBOVUxMOworCQlpZiAobmVzcXAtPmZsdXNoX2lzc3VlZCA9PSAwKSB7CisJCQluZXNxcC0+Zmx1c2hfaXNzdWVkID0gMTsKKwkJCWlzc3VlX2ZsdXNoID0gMTsKKwkJfQorCX0KIAotCWlmICgobmVzcXAtPmNtX2lkKSAmJiAoY21faWQtPmV2ZW50X2hhbmRsZXIpKSB7Ci0JCWlmICgob3JpZ2luYWxfaHdfdGNwX3N0YXRlID09IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRV9XQUlUKSB8fAotCQkJCSgob3JpZ2luYWxfaWJxcF9zdGF0ZSA9PSBJQl9RUFNfUlRTKSAmJgotCQkJCShsYXN0X2FlID09IE5FU19BRVFFX0FFSURfTExQX0NPTk5FQ1RJT05fUkVTRVQpKSkgeworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoKGlzc3VlX2ZsdXNoKSAmJiAobmVzcXAtPmRlc3Ryb3llZCA9PSAwKSkgeworCQkvKiBGbHVzaCB0aGUgcXVldWUocykgKi8KKwkJaWYgKG5lc3FwLT5od19pd2FycF9zdGF0ZSA+PSBORVNfQUVRRV9JV0FSUF9TVEFURV9URVJNSU5BVEUpCisJCQlmbHVzaF9xIHw9IE5FU19DUVBfRkxVU0hfU1E7CisJCWZsdXNoX3dxZXMobmVzdm5pYy0+bmVzZGV2LCBuZXNxcCwgZmx1c2hfcSwgMSk7CisKKwkJaWYgKG5lc3FwLT50ZXJtX2ZsYWdzKSB7CisJCQlpYmV2ZW50LmRldmljZSA9IG5lc3FwLT5pYnFwLmRldmljZTsKKwkJCWliZXZlbnQuZXZlbnQgPSBuZXNxcC0+dGVybWluYXRlX2V2ZW50dHlwZTsKKwkJCWliZXZlbnQuZWxlbWVudC5xcCA9ICZuZXNxcC0+aWJxcDsKKwkJCW5lc3FwLT5pYnFwLmV2ZW50X2hhbmRsZXIoJmliZXZlbnQsIG5lc3FwLT5pYnFwLnFwX2NvbnRleHQpOworCQl9CisJfQorCisJaWYgKChjbV9pZCkgJiYgKGNtX2lkLT5ldmVudF9oYW5kbGVyKSkgeworCQlpZiAoaXNzdWVfZGlzY29ubikgewogCQkJYXRvbWljX2luYygmY21fZGlzY29ubmVjdHMpOwogCQkJY21fZXZlbnQuZXZlbnQgPSBJV19DTV9FVkVOVF9ESVNDT05ORUNUOwotCQkJaWYgKGxhc3RfYWUgPT0gTkVTX0FFUUVfQUVJRF9MTFBfQ09OTkVDVElPTl9SRVNFVCkgewotCQkJCWNtX2V2ZW50LnN0YXR1cyA9IElXX0NNX0VWRU5UX1NUQVRVU19SRVNFVDsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkdlbmVyYXRpbmcgYSBDTSAiCi0JCQkJCSJEaXNjb25uZWN0IEV2ZW50IChzdGF0dXMgcmVzZXQpIGZvciAiCi0JCQkJCSJRUCV1LCBjbV9pZCA9ICVwLiBcbiIsCi0JCQkJCW5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCk7Ci0JCQl9IGVsc2UKLQkJCQljbV9ldmVudC5zdGF0dXMgPSBJV19DTV9FVkVOVF9TVEFUVVNfT0s7Ci0KKwkJCWNtX2V2ZW50LnN0YXR1cyA9IGRpc2Nvbm5fc3RhdHVzOwogCQkJY21fZXZlbnQubG9jYWxfYWRkciA9IGNtX2lkLT5sb2NhbF9hZGRyOwogCQkJY21fZXZlbnQucmVtb3RlX2FkZHIgPSBjbV9pZC0+cmVtb3RlX2FkZHI7CiAJCQljbV9ldmVudC5wcml2YXRlX2RhdGEgPSBOVUxMOwpAQCAtMjU0NywyOSArMjU4MywxNCBAQAogCQkJCW5lc3FwLT5od3FwLnNxX3RhaWwsIGNtX2lkLAogCQkJCWF0b21pY19yZWFkKCZuZXNxcC0+cmVmY291bnQpKTsKIAotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKIAkJCXJldCA9IGNtX2lkLT5ldmVudF9oYW5kbGVyKGNtX2lkLCAmY21fZXZlbnQpOwogCQkJaWYgKHJldCkKIAkJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIk9GQSBDTSBldmVudF9oYW5kbGVyICIKIAkJCQkJInJldHVybmVkLCByZXQ9JWRcbiIsIHJldCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKIAkJfQogCi0JCW5lc3FwLT5kaXNjb25uX3BlbmRpbmcgPSAwOwotCQkvKiBUaGVyZSBtaWdodCBoYXZlIGJlZW4gYW5vdGhlciBBRSB3aGlsZSB0aGUgbG9jayB3YXMgcmVsZWFzZWQgKi8KLQkJb3JpZ2luYWxfaHdfdGNwX3N0YXRlID0gbmVzcXAtPmh3X3RjcF9zdGF0ZTsKLQkJb3JpZ2luYWxfaWJxcF9zdGF0ZSAgID0gbmVzcXAtPmlicXBfc3RhdGU7Ci0JCWxhc3RfYWUgPSBuZXNxcC0+bGFzdF9hZXE7Ci0KLQkJaWYgKChpc3N1ZWRfZGlzY29ubmVjdF9yZXNldCA9PSAwKSAmJiAobmVzcXAtPmNtX2lkKSAmJgotCQkJCSgob3JpZ2luYWxfaHdfdGNwX3N0YXRlID09IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRUQpIHx8Ci0JCQkJIChvcmlnaW5hbF9od190Y3Bfc3RhdGUgPT0gTkVTX0FFUUVfVENQX1NUQVRFX1RJTUVfV0FJVCkgfHwKLQkJCQkgKGxhc3RfYWUgPT0gTkVTX0FFUUVfQUVJRF9SRE1BUF9ST0VfQkFEX0xMUF9DTE9TRSkgfHwKLQkJCQkgKGxhc3RfYWUgPT0gTkVTX0FFUUVfQUVJRF9MTFBfQ09OTkVDVElPTl9SRVNFVCkpKSB7CisJCWlmIChpc3N1ZV9jbG9zZSkgewogCQkJYXRvbWljX2luYygmY21fY2xvc2VzKTsKLQkJCW5lc3FwLT5jbV9pZCA9IE5VTEw7Ci0JCQluZXNxcC0+aW5fZGlzY29ubmVjdCA9IDA7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOwogCQkJbmVzX2Rpc2Nvbm5lY3QobmVzcXAsIDEpOwogCiAJCQljbV9pZC0+cHJvdmlkZXJfZGF0YSA9IG5lc3FwOwpAQCAtMjU4OCwyOCArMjYwOSw3IEBACiAJCQl9CiAKIAkJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKLQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7Ci0JCQlpZiAobmVzcXAtPmZsdXNoX2lzc3VlZCA9PSAwKSB7Ci0JCQkJbmVzcXAtPmZsdXNoX2lzc3VlZCA9IDE7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKLQkJCQlmbHVzaF93cWVzKG5lc3ZuaWMtPm5lc2RldiwgbmVzcXAsCi0JCQkJCU5FU19DUVBfRkxVU0hfUlEsIDEpOwotCQkJfSBlbHNlCi0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKLQkJfSBlbHNlIHsKLQkJCWNtX2lkID0gbmVzcXAtPmNtX2lkOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKLQkJCS8qIGNoZWNrIHRvIHNlZSBpZiB0aGUgaW5ib3VuZCByZXNldCBiZWF0IHRoZSBvdXRib3VuZCByZXNldCAqLwotCQkJaWYgKCghY21faWQpICYmIChsYXN0X2FlPT1ORVNfQUVRRV9BRUlEX1JFU0VUX1NFTlQpKSB7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJRUCV1OiBEZWNpbmcgcmVmY291bnQgIgotCQkJCQkiZHVlIHRvIGluYm91bmQgcmVzZXQgYmVhdGluZyB0aGUgIgotCQkJCQkib3V0Ym91bmQgcmVzZXQuXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCk7Ci0JCQl9CiAJCX0KLQl9IGVsc2UgewotCQluZXNxcC0+ZGlzY29ubl9wZW5kaW5nID0gMDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5oCmluZGV4IDhiN2U3YzAuLjkwZThlNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaApAQCAtNDEwLDggKzQxMCw2IEBACiBpbnQgc2NoZWR1bGVfbmVzX3RpbWVyKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLAogCQllbnVtIG5lc190aW1lcl90eXBlLCBpbnQsIGludCk7CiAKLWludCBuZXNfY21fZGlzY29ubihzdHJ1Y3QgbmVzX3FwICopOwotCiBpbnQgbmVzX2FjY2VwdChzdHJ1Y3QgaXdfY21faWQgKiwgc3RydWN0IGl3X2NtX2Nvbm5fcGFyYW0gKik7CiBpbnQgbmVzX3JlamVjdChzdHJ1Y3QgaXdfY21faWQgKiwgY29uc3Qgdm9pZCAqLCB1OCk7CiBpbnQgbmVzX2Nvbm5lY3Qoc3RydWN0IGl3X2NtX2lkICosIHN0cnVjdCBpd19jbV9jb25uX3BhcmFtICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKaW5kZXggNGE4NGQwMi4uMzUxMmQ2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCkBAIC03NCw2ICs3NCw4IEBACiBzdGF0aWMgdm9pZCBwcm9jZXNzX2NyaXRpY2FsX2Vycm9yKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYpOwogc3RhdGljIHZvaWQgbmVzX3Byb2Nlc3NfbWFjX2ludHIoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiwgdTMyIG1hY19udW1iZXIpOwogc3RhdGljIHVuc2lnbmVkIGludCBuZXNfcmVzZXRfYWRhcHRlcl9uZTAyMChzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCB1OCAqT25lR19Nb2RlKTsKK3N0YXRpYyB2b2lkIG5lc190ZXJtaW5hdGVfdGltZW91dCh1bnNpZ25lZCBsb25nIGNvbnRleHQpOworc3RhdGljIHZvaWQgbmVzX3Rlcm1pbmF0ZV9zdGFydF90aW1lcihzdHJ1Y3QgbmVzX3FwICpuZXNxcCk7CiAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9ORVNfREVCVUcKIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpuZXNfaXdhcnBfc3RhdGVfc3RyW10gPSB7CkBAIC0yNzQxLDcgKzI3NDMsNyBAQAogCQkJCX0KIAogc2tpcF9yeF9pbmRpY2F0ZTA6Ci0JCQkJbmVzdm5pYy0+bmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJCQk7CiAJCQkJLyogbmVzdm5pYy0+bmV0c3RhdHMucnhfcGFja2V0cysrOyAqLwogCQkJCS8qIG5lc3ZuaWMtPm5ldHN0YXRzLnJ4X2J5dGVzICs9IHJ4X3BrdF9zaXplOyAqLwogCQkJfQpAQCAtMjkwMyw2ICsyOTA1LDQxNyBAQAogfQogCiAKK3N0YXRpYyB1OCAqbG9jYXRlX21wYSh1OCAqcGt0LCB1MzIgYWVxX2luZm8pCit7CisJdTE2IHBrdF9sZW47CisKKwlpZiAoYWVxX2luZm8gJiBORVNfQUVRRV9RMl9EQVRBX0VUSEVSTkVUKSB7CisJCS8qIHNraXAgb3ZlciBldGhlcm5ldCBoZWFkZXIgKi8KKwkJcGt0X2xlbiA9IGJlMTZfdG9fY3B1KCoodTE2ICopKHBrdCArIEVUSF9ITEVOIC0gMikpOworCQlwa3QgKz0gRVRIX0hMRU47CisKKwkJLyogU2tpcCBvdmVyIElQIGFuZCBUQ1AgaGVhZGVycyAqLworCQlwa3QgKz0gNCAqIChwa3RbMF0gJiAweDBmKTsKKwkJcGt0ICs9IDQgKiAoKHBrdFsxMl0gPj4gNCkgJiAweDBmKTsKKwl9CisJcmV0dXJuIHBrdDsKK30KKworLyogRGV0ZXJtaW5lIGlmIGluY29taW5nIGVycm9yIHBrdCBpcyByZG1hIGxheWVyICovCitzdGF0aWMgdTMyIGl3YXJwX29wY29kZShzdHJ1Y3QgbmVzX3FwICpuZXNxcCwgdTMyIGFlcV9pbmZvKQoreworCXU4ICpwa3Q7CisJdTE2ICptcGE7CisJdTMyIG9wY29kZSA9IDB4ZmZmZmZmZmY7CisKKwlpZiAoYWVxX2luZm8gJiBORVNfQUVRRV9RMl9EQVRBX1dSSVRURU4pIHsKKwkJcGt0ID0gbmVzcXAtPmh3cXAucTJfdmJhc2UgKyBCQURfRlJBTUVfT0ZGU0VUOworCQltcGEgPSAodTE2ICopbG9jYXRlX21wYShwa3QsIGFlcV9pbmZvKTsKKwkJb3Bjb2RlID0gYmUxNl90b19jcHUobXBhWzFdKSAmIDB4ZjsKKwl9CisKKwlyZXR1cm4gb3Bjb2RlOworfQorCisvKiBCdWlsZCBpV0FSUCB0ZXJtaW5hdGUgaGVhZGVyICovCitzdGF0aWMgaW50IG5lc19ibGRfdGVybWluYXRlX2hkcihzdHJ1Y3QgbmVzX3FwICpuZXNxcCwgdTE2IGFzeW5jX2V2ZW50X2lkLCB1MzIgYWVxX2luZm8pCit7CisJdTggKnBrdCA9IG5lc3FwLT5od3FwLnEyX3ZiYXNlICsgQkFEX0ZSQU1FX09GRlNFVDsKKwl1MTYgZGRwX3NlZ19sZW47CisJaW50IGNvcHlfbGVuID0gMDsKKwl1OCBpc190YWdnZWQgPSAwOworCXU4IGZsdXNoX2NvZGUgPSAwOworCXN0cnVjdCBuZXNfdGVybWluYXRlX2hkciAqdGVybWhkcjsKKworCXRlcm1oZHIgPSAoc3RydWN0IG5lc190ZXJtaW5hdGVfaGRyICopbmVzcXAtPmh3cXAucTJfdmJhc2U7CisJbWVtc2V0KHRlcm1oZHIsIDAsIDY0KTsKKworCWlmIChhZXFfaW5mbyAmIE5FU19BRVFFX1EyX0RBVEFfV1JJVFRFTikgeworCisJCS8qIFVzZSBkYXRhIGZyb20gb2ZmZW5kaW5nIHBhY2tldCB0byBmaWxsIGluIGRkcCAmIHJkbWEgaGRycyAqLworCQlwa3QgPSBsb2NhdGVfbXBhKHBrdCwgYWVxX2luZm8pOworCQlkZHBfc2VnX2xlbiA9IGJlMTZfdG9fY3B1KCoodTE2ICopcGt0KTsKKwkJaWYgKGRkcF9zZWdfbGVuKSB7CisJCQljb3B5X2xlbiA9IDI7CisJCQl0ZXJtaGRyLT5oZHJjdCA9IEREUF9MRU5fRkxBRzsKKwkJCWlmIChwa3RbMl0gJiAweDgwKSB7CisJCQkJaXNfdGFnZ2VkID0gMTsKKwkJCQlpZiAoZGRwX3NlZ19sZW4gPj0gVEVSTV9ERFBfTEVOX1RBR0dFRCkgeworCQkJCQljb3B5X2xlbiArPSBURVJNX0REUF9MRU5fVEFHR0VEOworCQkJCQl0ZXJtaGRyLT5oZHJjdCB8PSBERFBfSERSX0ZMQUc7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoZGRwX3NlZ19sZW4gPj0gVEVSTV9ERFBfTEVOX1VOVEFHR0VEKSB7CisJCQkJCWNvcHlfbGVuICs9IFRFUk1fRERQX0xFTl9VTlRBR0dFRDsKKwkJCQkJdGVybWhkci0+aGRyY3QgfD0gRERQX0hEUl9GTEFHOworCQkJCX0KKworCQkJCWlmIChkZHBfc2VnX2xlbiA+PSAoVEVSTV9ERFBfTEVOX1VOVEFHR0VEICsgVEVSTV9SRE1BX0xFTikpIHsKKwkJCQkJaWYgKChwa3RbM10gJiBSRE1BX09QQ09ERV9NQVNLKSA9PSBSRE1BX1JFQURfUkVRX09QQ09ERSkgeworCQkJCQkJY29weV9sZW4gKz0gVEVSTV9SRE1BX0xFTjsKKwkJCQkJCXRlcm1oZHItPmhkcmN0IHw9IFJETUFfSERSX0ZMQUc7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlzd2l0Y2ggKGFzeW5jX2V2ZW50X2lkKSB7CisJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9VTkFMTE9DQVRFRF9TVEFHOgorCQlzd2l0Y2ggKGl3YXJwX29wY29kZShuZXNxcCwgYWVxX2luZm8pKSB7CisJCWNhc2UgSVdBUlBfT1BDT0RFX1dSSVRFOgorCQkJZmx1c2hfY29kZSA9IElCX1dDX0xPQ19QUk9UX0VSUjsKKwkJCXRlcm1oZHItPmxheWVyX2V0eXBlID0gKExBWUVSX0REUCA8PCA0KSB8IEREUF9UQUdHRURfQlVGRkVSOworCQkJdGVybWhkci0+ZXJyb3JfY29kZSA9IEREUF9UQUdHRURfSU5WX1NUQUc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWZsdXNoX2NvZGUgPSBJQl9XQ19SRU1fQUNDRVNTX0VSUjsKKwkJCXRlcm1oZHItPmxheWVyX2V0eXBlID0gKExBWUVSX1JETUEgPDwgNCkgfCBSRE1BUF9SRU1PVEVfUFJPVDsKKwkJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBSRE1BUF9JTlZfU1RBRzsKKwkJfQorCQlicmVhazsKKwljYXNlIE5FU19BRVFFX0FFSURfQU1QX0lOVkFMSURfU1RBRzoKKwkJZmx1c2hfY29kZSA9IElCX1dDX1JFTV9BQ0NFU1NfRVJSOworCQl0ZXJtaGRyLT5sYXllcl9ldHlwZSA9IChMQVlFUl9SRE1BIDw8IDQpIHwgUkRNQVBfUkVNT1RFX1BST1Q7CisJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBSRE1BUF9JTlZfU1RBRzsKKwkJYnJlYWs7CisJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9CQURfUVA6CisJCWZsdXNoX2NvZGUgPSBJQl9XQ19MT0NfUVBfT1BfRVJSOworCQl0ZXJtaGRyLT5sYXllcl9ldHlwZSA9IChMQVlFUl9ERFAgPDwgNCkgfCBERFBfVU5UQUdHRURfQlVGRkVSOworCQl0ZXJtaGRyLT5lcnJvcl9jb2RlID0gRERQX1VOVEFHR0VEX0lOVl9RTjsKKwkJYnJlYWs7CisJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9CQURfU1RBR19LRVk6CisJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9CQURfU1RBR19JTkRFWDoKKwkJc3dpdGNoIChpd2FycF9vcGNvZGUobmVzcXAsIGFlcV9pbmZvKSkgeworCQljYXNlIElXQVJQX09QQ09ERV9TRU5EX0lOVjoKKwkJY2FzZSBJV0FSUF9PUENPREVfU0VORF9TRV9JTlY6CisJCQlmbHVzaF9jb2RlID0gSUJfV0NfUkVNX09QX0VSUjsKKwkJCXRlcm1oZHItPmxheWVyX2V0eXBlID0gKExBWUVSX1JETUEgPDwgNCkgfCBSRE1BUF9SRU1PVEVfT1A7CisJCQl0ZXJtaGRyLT5lcnJvcl9jb2RlID0gUkRNQVBfQ0FOVF9JTlZfU1RBRzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZmx1c2hfY29kZSA9IElCX1dDX1JFTV9BQ0NFU1NfRVJSOworCQkJdGVybWhkci0+bGF5ZXJfZXR5cGUgPSAoTEFZRVJfUkRNQSA8PCA0KSB8IFJETUFQX1JFTU9URV9QUk9UOworCQkJdGVybWhkci0+ZXJyb3JfY29kZSA9IFJETUFQX0lOVl9TVEFHOworCQl9CisJCWJyZWFrOworCWNhc2UgTkVTX0FFUUVfQUVJRF9BTVBfQk9VTkRTX1ZJT0xBVElPTjoKKwkJaWYgKGFlcV9pbmZvICYgKE5FU19BRVFFX1EyX0RBVEFfRVRIRVJORVQgfCBORVNfQUVRRV9RMl9EQVRBX01QQSkpIHsKKwkJCWZsdXNoX2NvZGUgPSBJQl9XQ19MT0NfUFJPVF9FUlI7CisJCQl0ZXJtaGRyLT5sYXllcl9ldHlwZSA9IChMQVlFUl9ERFAgPDwgNCkgfCBERFBfVEFHR0VEX0JVRkZFUjsKKwkJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBERFBfVEFHR0VEX0JPVU5EUzsKKwkJfSBlbHNlIHsKKwkJCWZsdXNoX2NvZGUgPSBJQl9XQ19SRU1fQUNDRVNTX0VSUjsKKwkJCXRlcm1oZHItPmxheWVyX2V0eXBlID0gKExBWUVSX1JETUEgPDwgNCkgfCBSRE1BUF9SRU1PVEVfUFJPVDsKKwkJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBSRE1BUF9JTlZfQk9VTkRTOworCQl9CisJCWJyZWFrOworCWNhc2UgTkVTX0FFUUVfQUVJRF9BTVBfUklHSFRTX1ZJT0xBVElPTjoKKwljYXNlIE5FU19BRVFFX0FFSURfQU1QX0lOVkFMSURBVEVfTk9fUkVNT1RFX0FDQ0VTU19SSUdIVFM6CisJY2FzZSBORVNfQUVRRV9BRUlEX1BSSVZfT1BFUkFUSU9OX0RFTklFRDoKKwkJZmx1c2hfY29kZSA9IElCX1dDX1JFTV9BQ0NFU1NfRVJSOworCQl0ZXJtaGRyLT5sYXllcl9ldHlwZSA9IChMQVlFUl9SRE1BIDw8IDQpIHwgUkRNQVBfUkVNT1RFX1BST1Q7CisJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBSRE1BUF9BQ0NFU1M7CisJCWJyZWFrOworCWNhc2UgTkVTX0FFUUVfQUVJRF9BTVBfVE9fV1JBUDoKKwkJZmx1c2hfY29kZSA9IElCX1dDX1JFTV9BQ0NFU1NfRVJSOworCQl0ZXJtaGRyLT5sYXllcl9ldHlwZSA9IChMQVlFUl9SRE1BIDw8IDQpIHwgUkRNQVBfUkVNT1RFX1BST1Q7CisJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBSRE1BUF9UT19XUkFQOworCQlicmVhazsKKwljYXNlIE5FU19BRVFFX0FFSURfQU1QX0JBRF9QRDoKKwkJc3dpdGNoIChpd2FycF9vcGNvZGUobmVzcXAsIGFlcV9pbmZvKSkgeworCQljYXNlIElXQVJQX09QQ09ERV9XUklURToKKwkJCWZsdXNoX2NvZGUgPSBJQl9XQ19MT0NfUFJPVF9FUlI7CisJCQl0ZXJtaGRyLT5sYXllcl9ldHlwZSA9IChMQVlFUl9ERFAgPDwgNCkgfCBERFBfVEFHR0VEX0JVRkZFUjsKKwkJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBERFBfVEFHR0VEX1VOQVNTT0NfU1RBRzsKKwkJCWJyZWFrOworCQljYXNlIElXQVJQX09QQ09ERV9TRU5EX0lOVjoKKwkJY2FzZSBJV0FSUF9PUENPREVfU0VORF9TRV9JTlY6CisJCQlmbHVzaF9jb2RlID0gSUJfV0NfUkVNX0FDQ0VTU19FUlI7CisJCQl0ZXJtaGRyLT5sYXllcl9ldHlwZSA9IChMQVlFUl9SRE1BIDw8IDQpIHwgUkRNQVBfUkVNT1RFX1BST1Q7CisJCQl0ZXJtaGRyLT5lcnJvcl9jb2RlID0gUkRNQVBfQ0FOVF9JTlZfU1RBRzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZmx1c2hfY29kZSA9IElCX1dDX1JFTV9BQ0NFU1NfRVJSOworCQkJdGVybWhkci0+bGF5ZXJfZXR5cGUgPSAoTEFZRVJfUkRNQSA8PCA0KSB8IFJETUFQX1JFTU9URV9QUk9UOworCQkJdGVybWhkci0+ZXJyb3JfY29kZSA9IFJETUFQX1VOQVNTT0NfU1RBRzsKKwkJfQorCQlicmVhazsKKwljYXNlIE5FU19BRVFFX0FFSURfTExQX1JFQ0VJVkVEX01BUktFUl9BTkRfTEVOR1RIX0ZJRUxEU19ET05UX01BVENIOgorCQlmbHVzaF9jb2RlID0gSUJfV0NfTE9DX0xFTl9FUlI7CisJCXRlcm1oZHItPmxheWVyX2V0eXBlID0gKExBWUVSX01QQSA8PCA0KSB8IEREUF9MTFA7CisJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBNUEFfTUFSS0VSOworCQlicmVhazsKKwljYXNlIE5FU19BRVFFX0FFSURfTExQX1JFQ0VJVkVEX01QQV9DUkNfRVJST1I6CisJCWZsdXNoX2NvZGUgPSBJQl9XQ19HRU5FUkFMX0VSUjsKKwkJdGVybWhkci0+bGF5ZXJfZXR5cGUgPSAoTEFZRVJfTVBBIDw8IDQpIHwgRERQX0xMUDsKKwkJdGVybWhkci0+ZXJyb3JfY29kZSA9IE1QQV9DUkM7CisJCWJyZWFrOworCWNhc2UgTkVTX0FFUUVfQUVJRF9MTFBfU0VHTUVOVF9UT09fTEFSR0U6CisJY2FzZSBORVNfQUVRRV9BRUlEX0xMUF9TRUdNRU5UX1RPT19TTUFMTDoKKwkJZmx1c2hfY29kZSA9IElCX1dDX0xPQ19MRU5fRVJSOworCQl0ZXJtaGRyLT5sYXllcl9ldHlwZSA9IChMQVlFUl9ERFAgPDwgNCkgfCBERFBfQ0FUQVNUUk9QSElDOworCQl0ZXJtaGRyLT5lcnJvcl9jb2RlID0gRERQX0NBVEFTVFJPUEhJQ19MT0NBTDsKKwkJYnJlYWs7CisJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9MQ0VfTE9DQUxfQ0FUQVNUUk9QSElDOgorCWNhc2UgTkVTX0FFUUVfQUVJRF9ERFBfTk9fTF9CSVQ6CisJCWZsdXNoX2NvZGUgPSBJQl9XQ19GQVRBTF9FUlI7CisJCXRlcm1oZHItPmxheWVyX2V0eXBlID0gKExBWUVSX0REUCA8PCA0KSB8IEREUF9DQVRBU1RST1BISUM7CisJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBERFBfQ0FUQVNUUk9QSElDX0xPQ0FMOworCQlicmVhazsKKwljYXNlIE5FU19BRVFFX0FFSURfRERQX0lOVkFMSURfTVNOX0dBUF9JTl9NU046CisJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9JTlZBTElEX01TTl9SQU5HRV9JU19OT1RfVkFMSUQ6CisJCWZsdXNoX2NvZGUgPSBJQl9XQ19HRU5FUkFMX0VSUjsKKwkJdGVybWhkci0+bGF5ZXJfZXR5cGUgPSAoTEFZRVJfRERQIDw8IDQpIHwgRERQX1VOVEFHR0VEX0JVRkZFUjsKKwkJdGVybWhkci0+ZXJyb3JfY29kZSA9IEREUF9VTlRBR0dFRF9JTlZfTVNOX1JBTkdFOworCQlicmVhazsKKwljYXNlIE5FU19BRVFFX0FFSURfRERQX1VCRV9ERFBfTUVTU0FHRV9UT09fTE9OR19GT1JfQVZBSUxBQkxFX0JVRkZFUjoKKwkJZmx1c2hfY29kZSA9IElCX1dDX0xPQ19MRU5fRVJSOworCQl0ZXJtaGRyLT5sYXllcl9ldHlwZSA9IChMQVlFUl9ERFAgPDwgNCkgfCBERFBfVU5UQUdHRURfQlVGRkVSOworCQl0ZXJtaGRyLT5lcnJvcl9jb2RlID0gRERQX1VOVEFHR0VEX0lOVl9UT09fTE9ORzsKKwkJYnJlYWs7CisJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9VQkVfSU5WQUxJRF9ERFBfVkVSU0lPTjoKKwkJZmx1c2hfY29kZSA9IElCX1dDX0dFTkVSQUxfRVJSOworCQlpZiAoaXNfdGFnZ2VkKSB7CisJCQl0ZXJtaGRyLT5sYXllcl9ldHlwZSA9IChMQVlFUl9ERFAgPDwgNCkgfCBERFBfVEFHR0VEX0JVRkZFUjsKKwkJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBERFBfVEFHR0VEX0lOVl9ERFBfVkVSOworCQl9IGVsc2UgeworCQkJdGVybWhkci0+bGF5ZXJfZXR5cGUgPSAoTEFZRVJfRERQIDw8IDQpIHwgRERQX1VOVEFHR0VEX0JVRkZFUjsKKwkJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBERFBfVU5UQUdHRURfSU5WX0REUF9WRVI7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9VQkVfSU5WQUxJRF9NTzoKKwkJZmx1c2hfY29kZSA9IElCX1dDX0dFTkVSQUxfRVJSOworCQl0ZXJtaGRyLT5sYXllcl9ldHlwZSA9IChMQVlFUl9ERFAgPDwgNCkgfCBERFBfVU5UQUdHRURfQlVGRkVSOworCQl0ZXJtaGRyLT5lcnJvcl9jb2RlID0gRERQX1VOVEFHR0VEX0lOVl9NTzsKKwkJYnJlYWs7CisJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9VQkVfSU5WQUxJRF9NU05fTk9fQlVGRkVSX0FWQUlMQUJMRToKKwkJZmx1c2hfY29kZSA9IElCX1dDX1JFTV9PUF9FUlI7CisJCXRlcm1oZHItPmxheWVyX2V0eXBlID0gKExBWUVSX0REUCA8PCA0KSB8IEREUF9VTlRBR0dFRF9CVUZGRVI7CisJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBERFBfVU5UQUdHRURfSU5WX01TTl9OT19CVUY7CisJCWJyZWFrOworCWNhc2UgTkVTX0FFUUVfQUVJRF9ERFBfVUJFX0lOVkFMSURfUU46CisJCWZsdXNoX2NvZGUgPSBJQl9XQ19HRU5FUkFMX0VSUjsKKwkJdGVybWhkci0+bGF5ZXJfZXR5cGUgPSAoTEFZRVJfRERQIDw8IDQpIHwgRERQX1VOVEFHR0VEX0JVRkZFUjsKKwkJdGVybWhkci0+ZXJyb3JfY29kZSA9IEREUF9VTlRBR0dFRF9JTlZfUU47CisJCWJyZWFrOworCWNhc2UgTkVTX0FFUUVfQUVJRF9SRE1BUF9ST0VfSU5WQUxJRF9SRE1BUF9WRVJTSU9OOgorCQlmbHVzaF9jb2RlID0gSUJfV0NfR0VORVJBTF9FUlI7CisJCXRlcm1oZHItPmxheWVyX2V0eXBlID0gKExBWUVSX1JETUEgPDwgNCkgfCBSRE1BUF9SRU1PVEVfT1A7CisJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBSRE1BUF9JTlZfUkRNQVBfVkVSOworCQlicmVhazsKKwljYXNlIE5FU19BRVFFX0FFSURfUkRNQVBfUk9FX1VORVhQRUNURURfT1BDT0RFOgorCQlmbHVzaF9jb2RlID0gSUJfV0NfTE9DX1FQX09QX0VSUjsKKwkJdGVybWhkci0+bGF5ZXJfZXR5cGUgPSAoTEFZRVJfUkRNQSA8PCA0KSB8IFJETUFQX1JFTU9URV9PUDsKKwkJdGVybWhkci0+ZXJyb3JfY29kZSA9IFJETUFQX1VORVhQRUNURURfT1A7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZsdXNoX2NvZGUgPSBJQl9XQ19GQVRBTF9FUlI7CisJCXRlcm1oZHItPmxheWVyX2V0eXBlID0gKExBWUVSX1JETUEgPDwgNCkgfCBSRE1BUF9SRU1PVEVfT1A7CisJCXRlcm1oZHItPmVycm9yX2NvZGUgPSBSRE1BUF9VTlNQRUNJRklFRDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGNvcHlfbGVuKQorCQltZW1jcHkodGVybWhkciArIDEsIHBrdCwgY29weV9sZW4pOworCisJaWYgKChmbHVzaF9jb2RlKSAmJiAoKE5FU19BRVFFX0lOQk9VTkRfUkRNQSAmIGFlcV9pbmZvKSA9PSAwKSkgeworCQlpZiAoYWVxX2luZm8gJiBORVNfQUVRRV9TUSkKKwkJCW5lc3FwLT50ZXJtX3NxX2ZsdXNoX2NvZGUgPSBmbHVzaF9jb2RlOworCQllbHNlCisJCQluZXNxcC0+dGVybV9ycV9mbHVzaF9jb2RlID0gZmx1c2hfY29kZTsKKwl9CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBuZXNfdGVybWluYXRlX2hkcikgKyBjb3B5X2xlbjsKK30KKworc3RhdGljIHZvaWQgbmVzX3Rlcm1pbmF0ZV9jb25uZWN0aW9uKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHN0cnVjdCBuZXNfcXAgKm5lc3FwLAorCQkgc3RydWN0IG5lc19od19hZXFlICphZXFlLCBlbnVtIGliX2V2ZW50X3R5cGUgZXZlbnR0eXBlKQoreworCXU2NCBjb250ZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGFlcV9pbmZvOworCXUxNiBhc3luY19ldmVudF9pZDsKKwl1OCB0Y3Bfc3RhdGU7CisJdTggaXdhcnBfc3RhdGU7CisJdTMyIHRlcm1sZW4gPSAwOworCXUzMiBtb2RfcXBfZmxhZ3MgPSBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX1RFUk1JTkFURSB8CisJCQkgICBORVNfQ1FQX1FQX1RFUk1fRE9OVF9TRU5EX0ZJTjsKKwlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXIgPSBuZXNkZXYtPm5lc2FkYXB0ZXI7CisKKwlpZiAobmVzcXAtPnRlcm1fZmxhZ3MgJiBORVNfVEVSTV9TRU5UKQorCQlyZXR1cm47IC8qIFNhbml0eSBjaGVjayAqLworCisJYWVxX2luZm8gPSBsZTMyX3RvX2NwdShhZXFlLT5hZXFlX3dvcmRzW05FU19BRVFFX01JU0NfSURYXSk7CisJdGNwX3N0YXRlID0gKGFlcV9pbmZvICYgTkVTX0FFUUVfVENQX1NUQVRFX01BU0spID4+IE5FU19BRVFFX1RDUF9TVEFURV9TSElGVDsKKwlpd2FycF9zdGF0ZSA9IChhZXFfaW5mbyAmIE5FU19BRVFFX0lXQVJQX1NUQVRFX01BU0spID4+IE5FU19BRVFFX0lXQVJQX1NUQVRFX1NISUZUOworCWFzeW5jX2V2ZW50X2lkID0gKHUxNilhZXFfaW5mbzsKKworCWNvbnRleHQgPSAodW5zaWduZWQgbG9uZyluZXNhZGFwdGVyLT5xcF90YWJsZVtsZTMyX3RvX2NwdSgKKwkJYWVxZS0+YWVxZV93b3Jkc1tORVNfQUVRRV9DT01QX1FQX0NRX0lEX0lEWF0pIC0gTkVTX0ZJUlNUX1FQTl07CisJaWYgKCFjb250ZXh0KSB7CisJCVdBUk5fT04oIWNvbnRleHQpOworCQlyZXR1cm47CisJfQorCisJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7CisJbmVzcXAtPmh3X2l3YXJwX3N0YXRlID0gaXdhcnBfc3RhdGU7CisJbmVzcXAtPmh3X3RjcF9zdGF0ZSA9IHRjcF9zdGF0ZTsKKwluZXNxcC0+bGFzdF9hZXEgPSBhc3luY19ldmVudF9pZDsKKwluZXNxcC0+dGVybWluYXRlX2V2ZW50dHlwZSA9IGV2ZW50dHlwZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOworCisJaWYgKG5lc2FkYXB0ZXItPnNlbmRfdGVybV9vaykKKwkJdGVybWxlbiA9IG5lc19ibGRfdGVybWluYXRlX2hkcihuZXNxcCwgYXN5bmNfZXZlbnRfaWQsIGFlcV9pbmZvKTsKKwllbHNlCisJCW1vZF9xcF9mbGFncyB8PSBORVNfQ1FQX1FQX1RFUk1fRE9OVF9TRU5EX1RFUk1fTVNHOworCisJbmVzX3Rlcm1pbmF0ZV9zdGFydF90aW1lcihuZXNxcCk7CisJbmVzcXAtPnRlcm1fZmxhZ3MgfD0gTkVTX1RFUk1fU0VOVDsKKwluZXNfaHdfbW9kaWZ5X3FwKG5lc2RldiwgbmVzcXAsIG1vZF9xcF9mbGFncywgdGVybWxlbiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG5lc190ZXJtaW5hdGVfc2VuZF9maW4oc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiwKKwkJCSAgc3RydWN0IG5lc19xcCAqbmVzcXAsIHN0cnVjdCBuZXNfaHdfYWVxZSAqYWVxZSkKK3sKKwl1MzIgYWVxX2luZm87CisJdTE2IGFzeW5jX2V2ZW50X2lkOworCXU4IHRjcF9zdGF0ZTsKKwl1OCBpd2FycF9zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYWVxX2luZm8gPSBsZTMyX3RvX2NwdShhZXFlLT5hZXFlX3dvcmRzW05FU19BRVFFX01JU0NfSURYXSk7CisJdGNwX3N0YXRlID0gKGFlcV9pbmZvICYgTkVTX0FFUUVfVENQX1NUQVRFX01BU0spID4+IE5FU19BRVFFX1RDUF9TVEFURV9TSElGVDsKKwlpd2FycF9zdGF0ZSA9IChhZXFfaW5mbyAmIE5FU19BRVFFX0lXQVJQX1NUQVRFX01BU0spID4+IE5FU19BRVFFX0lXQVJQX1NUQVRFX1NISUZUOworCWFzeW5jX2V2ZW50X2lkID0gKHUxNilhZXFfaW5mbzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOworCW5lc3FwLT5od19pd2FycF9zdGF0ZSA9IGl3YXJwX3N0YXRlOworCW5lc3FwLT5od190Y3Bfc3RhdGUgPSB0Y3Bfc3RhdGU7CisJbmVzcXAtPmxhc3RfYWVxID0gYXN5bmNfZXZlbnRfaWQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKKworCS8qIFNlbmQgdGhlIGZpbiBvbmx5ICovCisJbmVzX2h3X21vZGlmeV9xcChuZXNkZXYsIG5lc3FwLCBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX1RFUk1JTkFURSB8CisJCU5FU19DUVBfUVBfVEVSTV9ET05UX1NFTkRfVEVSTV9NU0csIDAsIDApOworfQorCisvKiBDbGVhbnVwIGFmdGVyIGEgdGVybWluYXRlIHNlbnQgb3IgcmVjZWl2ZWQgKi8KK3N0YXRpYyB2b2lkIG5lc190ZXJtaW5hdGVfZG9uZShzdHJ1Y3QgbmVzX3FwICpuZXNxcCwgaW50IHRpbWVvdXRfb2NjdXJyZWQpCit7CisJdTMyIG5leHRfaXdhcnBfc3RhdGUgPSBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX0VSUk9SOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG5lc192bmljICpuZXN2bmljID0gdG9fbmVzdm5pYyhuZXNxcC0+aWJxcC5kZXZpY2UpOworCXN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYgPSBuZXN2bmljLT5uZXNkZXY7CisJdTggZmlyc3RfdGltZSA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKKwlpZiAobmVzcXAtPmh0ZV9hZGRlZCkgeworCQluZXNxcC0+aHRlX2FkZGVkID0gMDsKKwkJbmV4dF9pd2FycF9zdGF0ZSB8PSBORVNfQ1FQX1FQX0RFTF9IVEU7CisJfQorCisJZmlyc3RfdGltZSA9IChuZXNxcC0+dGVybV9mbGFncyAmIE5FU19URVJNX0RPTkUpID09IDA7CisJbmVzcXAtPnRlcm1fZmxhZ3MgfD0gTkVTX1RFUk1fRE9ORTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOworCisJLyogTWFrZSBzdXJlIHdlIGdvIHRocm91Z2ggdGhpcyBvbmx5IG9uY2UgKi8KKwlpZiAoZmlyc3RfdGltZSkgeworCQlpZiAodGltZW91dF9vY2N1cnJlZCA9PSAwKQorCQkJZGVsX3RpbWVyKCZuZXNxcC0+dGVybWluYXRlX3RpbWVyKTsKKwkJZWxzZQorCQkJbmV4dF9pd2FycF9zdGF0ZSB8PSBORVNfQ1FQX1FQX1JFU0VUOworCisJCW5lc19od19tb2RpZnlfcXAobmVzZGV2LCBuZXNxcCwgbmV4dF9pd2FycF9zdGF0ZSwgMCwgMCk7CisJCW5lc19jbV9kaXNjb25uKG5lc3FwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5lc190ZXJtaW5hdGVfcmVjZWl2ZWQoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiwKKwkJCQlzdHJ1Y3QgbmVzX3FwICpuZXNxcCwgc3RydWN0IG5lc19od19hZXFlICphZXFlKQoreworCXUzMiBhZXFfaW5mbzsKKwl1OCAqcGt0OworCXUzMiAqbXBhOworCXU4IGRkcF9jdGw7CisJdTggcmRtYV9jdGw7CisJdTE2IGFlcV9pZCA9IDA7CisKKwlhZXFfaW5mbyA9IGxlMzJfdG9fY3B1KGFlcWUtPmFlcWVfd29yZHNbTkVTX0FFUUVfTUlTQ19JRFhdKTsKKwlpZiAoYWVxX2luZm8gJiBORVNfQUVRRV9RMl9EQVRBX1dSSVRURU4pIHsKKwkJLyogVGVybWluYXRlIGlzIG5vdCBhIHBlcmZvcm1hbmNlIHBhdGggc28gdGhlIHNpbGljb24gKi8KKwkJLyogZGlkIG5vdCB2YWxpZGF0ZSB0aGUgZnJhbWUgLSBkbyBpdCBub3cgKi8KKwkJcGt0ID0gbmVzcXAtPmh3cXAucTJfdmJhc2UgKyBCQURfRlJBTUVfT0ZGU0VUOworCQltcGEgPSAodTMyICopbG9jYXRlX21wYShwa3QsIGFlcV9pbmZvKTsKKwkJZGRwX2N0bCA9IChiZTMyX3RvX2NwdShtcGFbMF0pID4+IDgpICYgMHhmZjsKKwkJcmRtYV9jdGwgPSBiZTMyX3RvX2NwdShtcGFbMF0pICYgMHhmZjsKKwkJaWYgKChkZHBfY3RsICYgMHhjMCkgIT0gMHg0MCkKKwkJCWFlcV9pZCA9IE5FU19BRVFFX0FFSURfRERQX0xDRV9MT0NBTF9DQVRBU1RST1BISUM7CisJCWVsc2UgaWYgKChkZHBfY3RsICYgMHgwMykgIT0gMSkKKwkJCWFlcV9pZCA9IE5FU19BRVFFX0FFSURfRERQX1VCRV9JTlZBTElEX0REUF9WRVJTSU9OOworCQllbHNlIGlmIChiZTMyX3RvX2NwdShtcGFbMl0pICE9IDIpCisJCQlhZXFfaWQgPSBORVNfQUVRRV9BRUlEX0REUF9VQkVfSU5WQUxJRF9RTjsKKwkJZWxzZSBpZiAoYmUzMl90b19jcHUobXBhWzNdKSAhPSAxKQorCQkJYWVxX2lkID0gTkVTX0FFUUVfQUVJRF9ERFBfSU5WQUxJRF9NU05fR0FQX0lOX01TTjsKKwkJZWxzZSBpZiAoYmUzMl90b19jcHUobXBhWzRdKSAhPSAwKQorCQkJYWVxX2lkID0gTkVTX0FFUUVfQUVJRF9ERFBfVUJFX0lOVkFMSURfTU87CisJCWVsc2UgaWYgKChyZG1hX2N0bCAmIDB4YzApICE9IDB4NDApCisJCQlhZXFfaWQgPSBORVNfQUVRRV9BRUlEX1JETUFQX1JPRV9JTlZBTElEX1JETUFQX1ZFUlNJT047CisKKwkJaWYgKGFlcV9pZCkgeworCQkJLyogQmFkIHRlcm1pbmF0ZSByZWN2ZCAtIHNlbmQgYmFjayBhIHRlcm1pbmF0ZSAqLworCQkJYWVxX2luZm8gPSAoYWVxX2luZm8gJiAweGZmZmYwMDAwKSB8IGFlcV9pZDsKKwkJCWFlcWUtPmFlcWVfd29yZHNbTkVTX0FFUUVfTUlTQ19JRFhdID0gY3B1X3RvX2xlMzIoYWVxX2luZm8pOworCQkJbmVzX3Rlcm1pbmF0ZV9jb25uZWN0aW9uKG5lc2RldiwgbmVzcXAsIGFlcWUsIElCX0VWRU5UX1FQX0ZBVEFMKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCW5lc3FwLT50ZXJtX2ZsYWdzIHw9IE5FU19URVJNX1JDVkQ7CisJbmVzcXAtPnRlcm1pbmF0ZV9ldmVudHR5cGUgPSBJQl9FVkVOVF9RUF9GQVRBTDsKKwluZXNfdGVybWluYXRlX3N0YXJ0X3RpbWVyKG5lc3FwKTsKKwluZXNfdGVybWluYXRlX3NlbmRfZmluKG5lc2RldiwgbmVzcXAsIGFlcWUpOworfQorCisvKiBUaW1lb3V0IHJvdXRpbmUgaW4gY2FzZSB0ZXJtaW5hdGUgZmFpbHMgdG8gY29tcGxldGUgKi8KK3N0YXRpYyB2b2lkIG5lc190ZXJtaW5hdGVfdGltZW91dCh1bnNpZ25lZCBsb25nIGNvbnRleHQpCit7CisJc3RydWN0IG5lc19xcCAqbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7CisKKwluZXNfdGVybWluYXRlX2RvbmUobmVzcXAsIDEpOworfQorCisvKiBTZXQgYSB0aW1lciBpbiBjYXNlIGh3IGNhbm5vdCBjb21wbGV0ZSB0aGUgdGVybWluYXRlIHNlcXVlbmNlICovCitzdGF0aWMgdm9pZCBuZXNfdGVybWluYXRlX3N0YXJ0X3RpbWVyKHN0cnVjdCBuZXNfcXAgKm5lc3FwKQoreworCWluaXRfdGltZXIoJm5lc3FwLT50ZXJtaW5hdGVfdGltZXIpOworCW5lc3FwLT50ZXJtaW5hdGVfdGltZXIuZnVuY3Rpb24gPSBuZXNfdGVybWluYXRlX3RpbWVvdXQ7CisJbmVzcXAtPnRlcm1pbmF0ZV90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOworCW5lc3FwLT50ZXJtaW5hdGVfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKW5lc3FwOworCWFkZF90aW1lcigmbmVzcXAtPnRlcm1pbmF0ZV90aW1lcik7Cit9CisKIC8qKgogICogbmVzX3Byb2Nlc3NfaXdhcnBfYWVxZQogICovCkBAIC0yOTEwLDI4ICszMzIzLDI3IEBACiAJCQkJICAgc3RydWN0IG5lc19od19hZXFlICphZXFlKQogewogCXU2NCBjb250ZXh0OwotCXU2NCBhZXFlX2NvbnRleHQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IG5lc19xcCAqbmVzcXA7CisJc3RydWN0IG5lc19od19jcSAqaHdfY3E7CisJc3RydWN0IG5lc19jcSAqbmVzY3E7CiAJaW50IHJlc291cmNlX2FsbG9jYXRlZDsKLQkvKiBzdHJ1Y3QgaXdfY21faWQgKmNtX2lkOyAqLwogCXN0cnVjdCBuZXNfYWRhcHRlciAqbmVzYWRhcHRlciA9IG5lc2Rldi0+bmVzYWRhcHRlcjsKLQlzdHJ1Y3QgaWJfZXZlbnQgaWJldmVudDsKLQkvKiBzdHJ1Y3QgaXdfY21fZXZlbnQgY21fZXZlbnQ7ICovCiAJdTMyIGFlcV9pbmZvOwogCXUzMiBuZXh0X2l3YXJwX3N0YXRlID0gMDsKIAl1MTYgYXN5bmNfZXZlbnRfaWQ7CiAJdTggdGNwX3N0YXRlOwogCXU4IGl3YXJwX3N0YXRlOworCWludCBtdXN0X2Rpc2Nvbm4gPSAxOworCWludCBtdXN0X3Rlcm1pbmF0ZSA9IDA7CisJc3RydWN0IGliX2V2ZW50IGliZXZlbnQ7CiAKIAluZXNfZGVidWcoTkVTX0RCR19BRVEsICJcbiIpOwogCWFlcV9pbmZvID0gbGUzMl90b19jcHUoYWVxZS0+YWVxZV93b3Jkc1tORVNfQUVRRV9NSVNDX0lEWF0pOwotCWlmICgoTkVTX0FFUUVfSU5CT1VORF9SRE1BJmFlcV9pbmZvKSB8fCAoIShORVNfQUVRRV9RUCZhZXFfaW5mbykpKSB7CisJaWYgKChORVNfQUVRRV9JTkJPVU5EX1JETUEgJiBhZXFfaW5mbykgfHwgKCEoTkVTX0FFUUVfUVAgJiBhZXFfaW5mbykpKSB7CiAJCWNvbnRleHQgID0gbGUzMl90b19jcHUoYWVxZS0+YWVxZV93b3Jkc1tORVNfQUVRRV9DT01QX0NUWFRfTE9XX0lEWF0pOwogCQljb250ZXh0ICs9ICgodTY0KWxlMzJfdG9fY3B1KGFlcWUtPmFlcWVfd29yZHNbTkVTX0FFUUVfQ09NUF9DVFhUX0hJR0hfSURYXSkpIDw8IDMyOwogCX0gZWxzZSB7Ci0JCWFlcWVfY29udGV4dCA9IGxlMzJfdG9fY3B1KGFlcWUtPmFlcWVfd29yZHNbTkVTX0FFUUVfQ09NUF9DVFhUX0xPV19JRFhdKTsKLQkJYWVxZV9jb250ZXh0ICs9ICgodTY0KWxlMzJfdG9fY3B1KGFlcWUtPmFlcWVfd29yZHNbTkVTX0FFUUVfQ09NUF9DVFhUX0hJR0hfSURYXSkpIDw8IDMyOwogCQljb250ZXh0ID0gKHVuc2lnbmVkIGxvbmcpbmVzYWRhcHRlci0+cXBfdGFibGVbbGUzMl90b19jcHUoCiAJCQkJCQlhZXFlLT5hZXFlX3dvcmRzW05FU19BRVFFX0NPTVBfUVBfQ1FfSURfSURYXSkgLSBORVNfRklSU1RfUVBOXTsKIAkJQlVHX09OKCFjb250ZXh0KTsKQEAgLTI5NDgsNyArMzM2MCwxMSBAQAogCiAJc3dpdGNoIChhc3luY19ldmVudF9pZCkgewogCQljYXNlIE5FU19BRVFFX0FFSURfTExQX0ZJTl9SRUNFSVZFRDoKLQkJCW5lc3FwID0gKigoc3RydWN0IG5lc19xcCAqKikmY29udGV4dCk7CisJCQluZXNxcCA9IChzdHJ1Y3QgbmVzX3FwICopKHVuc2lnbmVkIGxvbmcpY29udGV4dDsKKworCQkJaWYgKG5lc3FwLT50ZXJtX2ZsYWdzKQorCQkJCXJldHVybjsgLyogSWdub3JlIGl0LCB3YWl0IGZvciBjbG9zZSBjb21wbGV0ZSAqLworCiAJCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJm5lc3FwLT5jbG9zZV90aW1lcl9zdGFydGVkKSA9PSAxKSB7CiAJCQkJbmVzcXAtPmNtX2lkLT5hZGRfcmVmKG5lc3FwLT5jbV9pZCk7CiAJCQkJc2NoZWR1bGVfbmVzX3RpbWVyKG5lc3FwLT5jbV9ub2RlLCAoc3RydWN0IHNrX2J1ZmYgKiluZXNxcCwKQEAgLTI5NTksMTggKzMzNzUsMjQgQEAKIAkJCQkJCW5lc3FwLT5od3FwLnFwX2lkLCBhdG9taWNfcmVhZCgmbmVzcXAtPnJlZmNvdW50KSwKIAkJCQkJCWFzeW5jX2V2ZW50X2lkLCBuZXNxcC0+bGFzdF9hZXEsIHRjcF9zdGF0ZSk7CiAJCQl9CisKIAkJCWlmICgodGNwX3N0YXRlICE9IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRV9XQUlUKSB8fAogCQkJCQkobmVzcXAtPmlicXBfc3RhdGUgIT0gSUJfUVBTX1JUUykpIHsKIAkJCQkvKiBGSU4gUmVjZWl2ZWQgYnV0IHRjcCBzdGF0ZSBvciBJQiBzdGF0ZSBtb3ZlZCBvbiwKIAkJCQkJCXNob3VsZCBleHBlY3QgYQljbG9zZSBjb21wbGV0ZSAqLwogCQkJCXJldHVybjsKIAkJCX0KKwogCQljYXNlIE5FU19BRVFFX0FFSURfTExQX0NMT1NFX0NPTVBMRVRFOgorCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7CisJCQlpZiAobmVzcXAtPnRlcm1fZmxhZ3MpIHsKKwkJCQluZXNfdGVybWluYXRlX2RvbmUobmVzcXAsIDApOworCQkJCXJldHVybjsKKwkJCX0KKwogCQljYXNlIE5FU19BRVFFX0FFSURfTExQX0NPTk5FQ1RJT05fUkVTRVQ6Ci0JCWNhc2UgTkVTX0FFUUVfQUVJRF9URVJNSU5BVEVfU0VOVDoKLQkJY2FzZSBORVNfQUVRRV9BRUlEX1JETUFQX1JPRV9CQURfTExQX0NMT1NFOgogCQljYXNlIE5FU19BRVFFX0FFSURfUkVTRVRfU0VOVDoKLQkJCW5lc3FwID0gKigoc3RydWN0IG5lc19xcCAqKikmY29udGV4dCk7CisJCQluZXNxcCA9IChzdHJ1Y3QgbmVzX3FwICopKHVuc2lnbmVkIGxvbmcpY29udGV4dDsKIAkJCWlmIChhc3luY19ldmVudF9pZCA9PSBORVNfQUVRRV9BRUlEX1JFU0VUX1NFTlQpIHsKIAkJCQl0Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOwogCQkJfQpAQCAtMjk4MiwxMiArMzQwNCw3IEBACiAJCQlpZiAoKHRjcF9zdGF0ZSA9PSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEKSB8fAogCQkJCQkodGNwX3N0YXRlID09IE5FU19BRVFFX1RDUF9TVEFURV9USU1FX1dBSVQpKSB7CiAJCQkJbmVzcXAtPmh0ZV9hZGRlZCA9IDA7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19BRVEsICJpc3N1aW5nIGh3IG1vZGlmeXFwIGZvciBRUCV1IHRvIHJlbW92ZSBodGVcbiIsCi0JCQkJCQluZXNxcC0+aHdxcC5xcF9pZCk7Ci0JCQkJbmVzX2h3X21vZGlmeV9xcChuZXNkZXYsIG5lc3FwLAotCQkJCQkJTkVTX0NRUF9RUF9JV0FSUF9TVEFURV9FUlJPUiB8IE5FU19DUVBfUVBfREVMX0hURSwgMCk7Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7CisJCQkJbmV4dF9pd2FycF9zdGF0ZSA9IE5FU19DUVBfUVBfSVdBUlBfU1RBVEVfRVJST1IgfCBORVNfQ1FQX1FQX0RFTF9IVEU7CiAJCQl9CiAKIAkJCWlmICgobmVzcXAtPmlicXBfc3RhdGUgPT0gSUJfUVBTX1JUUykgJiYKQEAgLTI5OTksMTUxICszNDE2LDEwNiBAQAogCQkJCQkJbmVzcXAtPmh3X2l3YXJwX3N0YXRlID0gTkVTX0FFUUVfSVdBUlBfU1RBVEVfQ0xPU0lORzsKIAkJCQkJCWJyZWFrOwogCQkJCQljYXNlIE5FU19BRVFFX0lXQVJQX1NUQVRFX1RFUk1JTkFURToKLQkJCQkJCW5leHRfaXdhcnBfc3RhdGUgPSBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX1RFUk1JTkFURTsKLQkJCQkJCW5lc3FwLT5od19pd2FycF9zdGF0ZSA9IE5FU19BRVFFX0lXQVJQX1NUQVRFX1RFUk1JTkFURTsKLQkJCQkJCWlmIChhc3luY19ldmVudF9pZCA9PSBORVNfQUVRRV9BRUlEX1JETUFQX1JPRV9CQURfTExQX0NMT1NFKSB7Ci0JCQkJCQkJbmV4dF9pd2FycF9zdGF0ZSB8PSAweDAyMDAwMDAwOwotCQkJCQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOwotCQkJCQkJfQorCQkJCQkJbXVzdF9kaXNjb25uID0gMDsgLyogdGVybWluYXRlIHBhdGggdGFrZXMgY2FyZSBvZiBkaXNjb25uICovCisJCQkJCQlpZiAobmVzcXAtPnRlcm1fZmxhZ3MgPT0gMCkKKwkJCQkJCQltdXN0X3Rlcm1pbmF0ZSA9IDE7CiAJCQkJCQlicmVhazsKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCW5leHRfaXdhcnBfc3RhdGUgPSAwOwogCQkJCX0KLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOwotCQkJCWlmIChuZXh0X2l3YXJwX3N0YXRlKSB7Ci0JCQkJCW5lc19kZWJ1ZyhORVNfREJHX0FFUSwgImlzc3VpbmcgaHcgbW9kaWZ5cXAgZm9yIFFQJXUuIG5leHQgc3RhdGUgPSAweCUwOFgsIgotCQkJCQkJCSIgYWxzbyBhZGRlZCBhbm90aGVyIHJlZmVyZW5jZVxuIiwKLQkJCQkJCQluZXNxcC0+aHdxcC5xcF9pZCwgbmV4dF9pd2FycF9zdGF0ZSk7Ci0JCQkJCW5lc19od19tb2RpZnlfcXAobmVzZGV2LCBuZXNxcCwgbmV4dF9pd2FycF9zdGF0ZSwgMCk7Ci0JCQkJfQotCQkJCW5lc19jbV9kaXNjb25uKG5lc3FwKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGFzeW5jX2V2ZW50X2lkID09ICBORVNfQUVRRV9BRUlEX0xMUF9GSU5fUkVDRUlWRUQpIHsKIAkJCQkJLyogRklOIFJlY2VpdmVkIGJ1dCBpYiBzdGF0ZSBub3QgUlRTLAogCQkJCQkJCWNsb3NlIGNvbXBsZXRlIHdpbGwgYmUgb24gaXRzIHdheSAqLwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOwotCQkJCQlyZXR1cm47CisJCQkJCW11c3RfZGlzY29ubiA9IDA7CiAJCQkJfQotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7Ci0JCQkJaWYgKGFzeW5jX2V2ZW50X2lkID09IE5FU19BRVFFX0FFSURfUkRNQVBfUk9FX0JBRF9MTFBfQ0xPU0UpIHsKLQkJCQkJbmV4dF9pd2FycF9zdGF0ZSA9IE5FU19DUVBfUVBfSVdBUlBfU1RBVEVfVEVSTUlOQVRFIHwgMHgwMjAwMDAwMDsKLQkJCQkJbmVzcXAtPmh3X3RjcF9zdGF0ZSA9IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRUQ7Ci0JCQkJCW5lc19kZWJ1ZyhORVNfREJHX0FFUSwgImlzc3VpbmcgaHcgbW9kaWZ5cXAgZm9yIFFQJXUuIG5leHQgc3RhdGUgPSAweCUwOFgsIgotCQkJCQkJCSIgYWxzbyBhZGRlZCBhbm90aGVyIHJlZmVyZW5jZVxuIiwKLQkJCQkJCQluZXNxcC0+aHdxcC5xcF9pZCwgbmV4dF9pd2FycF9zdGF0ZSk7Ci0JCQkJCW5lc19od19tb2RpZnlfcXAobmVzZGV2LCBuZXNxcCwgbmV4dF9pd2FycF9zdGF0ZSwgMCk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOworCisJCQlpZiAobXVzdF90ZXJtaW5hdGUpCisJCQkJbmVzX3Rlcm1pbmF0ZV9jb25uZWN0aW9uKG5lc2RldiwgbmVzcXAsIGFlcWUsIElCX0VWRU5UX1FQX0ZBVEFMKTsKKwkJCWVsc2UgaWYgKG11c3RfZGlzY29ubikgeworCQkJCWlmIChuZXh0X2l3YXJwX3N0YXRlKSB7CisJCQkJCW5lc19kZWJ1ZyhORVNfREJHX0FFUSwgImlzc3VpbmcgaHcgbW9kaWZ5cXAgZm9yIFFQJXUuIG5leHQgc3RhdGUgPSAweCUwOFhcbiIsCisJCQkJCQkgIG5lc3FwLT5od3FwLnFwX2lkLCBuZXh0X2l3YXJwX3N0YXRlKTsKKwkJCQkJbmVzX2h3X21vZGlmeV9xcChuZXNkZXYsIG5lc3FwLCBuZXh0X2l3YXJwX3N0YXRlLCAwLCAwKTsKIAkJCQl9CiAJCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOwogCQkJfQogCQkJYnJlYWs7CisKKwkJY2FzZSBORVNfQUVRRV9BRUlEX1RFUk1JTkFURV9TRU5UOgorCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7CisJCQluZXNfdGVybWluYXRlX3NlbmRfZmluKG5lc2RldiwgbmVzcXAsIGFlcWUpOworCQkJYnJlYWs7CisKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0xMUF9URVJNSU5BVEVfUkVDRUlWRUQ6Ci0JCQluZXNxcCA9ICooKHN0cnVjdCBuZXNfcXAgKiopJmNvbnRleHQpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7Ci0JCQluZXNxcC0+aHdfaXdhcnBfc3RhdGUgPSBpd2FycF9zdGF0ZTsKLQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSB0Y3Bfc3RhdGU7Ci0JCQluZXNxcC0+bGFzdF9hZXEgPSBhc3luY19ldmVudF9pZDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7Ci0JCQluZXNfZGVidWcoTkVTX0RCR19BRVEsICJQcm9jZXNzaW5nIGFuIE5FU19BRVFFX0FFSURfTExQX1RFUk1JTkFURV9SRUNFSVZFRCIKLQkJCQkJIiBldmVudCBvbiBRUCV1IFxuICBRMiBEYXRhOlxuIiwKLQkJCQkJbmVzcXAtPmh3cXAucXBfaWQpOwotCQkJaWYgKG5lc3FwLT5pYnFwLmV2ZW50X2hhbmRsZXIpIHsKLQkJCQlpYmV2ZW50LmRldmljZSA9IG5lc3FwLT5pYnFwLmRldmljZTsKLQkJCQlpYmV2ZW50LmVsZW1lbnQucXAgPSAmbmVzcXAtPmlicXA7Ci0JCQkJaWJldmVudC5ldmVudCA9IElCX0VWRU5UX1FQX0ZBVEFMOwotCQkJCW5lc3FwLT5pYnFwLmV2ZW50X2hhbmRsZXIoJmliZXZlbnQsIG5lc3FwLT5pYnFwLnFwX2NvbnRleHQpOwotCQkJfQotCQkJaWYgKCh0Y3Bfc3RhdGUgPT0gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFX1dBSVQpIHx8Ci0JCQkJCSgobmVzcXAtPmlicXBfc3RhdGUgPT0gSUJfUVBTX1JUUykmJgotCQkJCQkoYXN5bmNfZXZlbnRfaWQgPT0gTkVTX0FFUUVfQUVJRF9MTFBfQ09OTkVDVElPTl9SRVNFVCkpKSB7Ci0JCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOwotCQkJfSBlbHNlIHsKLQkJCQluZXNxcC0+aW5fZGlzY29ubmVjdCA9IDA7Ci0JCQkJd2FrZV91cCgmbmVzcXAtPmtpY2tfd2FpdHEpOwotCQkJfQorCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7CisJCQluZXNfdGVybWluYXRlX3JlY2VpdmVkKG5lc2RldiwgbmVzcXAsIGFlcWUpOwogCQkJYnJlYWs7Ci0JCWNhc2UgTkVTX0FFUUVfQUVJRF9MTFBfVE9PX01BTllfUkVUUklFUzoKLQkJCW5lc3FwID0gKigoc3RydWN0IG5lc19xcCAqKikmY29udGV4dCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKLQkJCW5lc3FwLT5od19pd2FycF9zdGF0ZSA9IE5FU19BRVFFX0lXQVJQX1NUQVRFX0VSUk9SOwotCQkJbmVzcXAtPmh3X3RjcF9zdGF0ZSA9IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRUQ7Ci0JCQluZXNxcC0+bGFzdF9hZXEgPSBhc3luY19ldmVudF9pZDsKLQkJCWlmIChuZXNxcC0+Y21faWQpIHsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19BRVEsICJQcm9jZXNzaW5nIGFuIE5FU19BRVFFX0FFSURfTExQX1RPT19NQU5ZX1JFVFJJRVMiCi0JCQkJCQkiIGV2ZW50IG9uIFFQJXUsIHJlbW90ZSBJUCA9IDB4JTA4WCBcbiIsCi0JCQkJCQluZXNxcC0+aHdxcC5xcF9pZCwKLQkJCQkJCW50b2hsKG5lc3FwLT5jbV9pZC0+cmVtb3RlX2FkZHIuc2luX2FkZHIuc19hZGRyKSk7Ci0JCQl9IGVsc2UgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX0FFUSwgIlByb2Nlc3NpbmcgYW4gTkVTX0FFUUVfQUVJRF9MTFBfVE9PX01BTllfUkVUUklFUyIKLQkJCQkJCSIgZXZlbnQgb24gUVAldSBcbiIsCi0JCQkJCQluZXNxcC0+aHdxcC5xcF9pZCk7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOwotCQkJbmV4dF9pd2FycF9zdGF0ZSA9IE5FU19DUVBfUVBfSVdBUlBfU1RBVEVfRVJST1IgfCBORVNfQ1FQX1FQX1JFU0VUOwotCQkJbmVzX2h3X21vZGlmeV9xcChuZXNkZXYsIG5lc3FwLCBuZXh0X2l3YXJwX3N0YXRlLCAwKTsKLQkJCWlmIChuZXNxcC0+aWJxcC5ldmVudF9oYW5kbGVyKSB7Ci0JCQkJaWJldmVudC5kZXZpY2UgPSBuZXNxcC0+aWJxcC5kZXZpY2U7Ci0JCQkJaWJldmVudC5lbGVtZW50LnFwID0gJm5lc3FwLT5pYnFwOwotCQkJCWliZXZlbnQuZXZlbnQgPSBJQl9FVkVOVF9RUF9GQVRBTDsKLQkJCQluZXNxcC0+aWJxcC5ldmVudF9oYW5kbGVyKCZpYmV2ZW50LCBuZXNxcC0+aWJxcC5xcF9jb250ZXh0KTsKLQkJCX0KLQkJCWJyZWFrOworCisJCWNhc2UgTkVTX0FFUUVfQUVJRF9BTVBfQkFEX1NUQUdfS0VZOgogCQljYXNlIE5FU19BRVFFX0FFSURfQU1QX0JBRF9TVEFHX0lOREVYOgotCQkJaWYgKE5FU19BRVFFX0lOQk9VTkRfUkRNQSZhZXFfaW5mbykgewotCQkJCW5lc3FwID0gbmVzYWRhcHRlci0+cXBfdGFibGVbbGUzMl90b19jcHUoCi0JCQkJCQlhZXFlLT5hZXFlX3dvcmRzW05FU19BRVFFX0NPTVBfUVBfQ1FfSURfSURYXSktTkVTX0ZJUlNUX1FQTl07Ci0JCQl9IGVsc2UgewotCQkJCS8qIFRPRE86IGdldCB0aGUgYWN0dWFsIFdRRSBhbmQgbWFzayBvZmYgd3FlIGluZGV4ICovCi0JCQkJY29udGV4dCAmPSB+KCh1NjQpNTExKTsKLQkJCQluZXNxcCA9ICooKHN0cnVjdCBuZXNfcXAgKiopJmNvbnRleHQpOwotCQkJfQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7Ci0JCQluZXNxcC0+aHdfaXdhcnBfc3RhdGUgPSBpd2FycF9zdGF0ZTsKLQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSB0Y3Bfc3RhdGU7Ci0JCQluZXNxcC0+bGFzdF9hZXEgPSBhc3luY19ldmVudF9pZDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7Ci0JCQluZXNfZGVidWcoTkVTX0RCR19BRVEsICJQcm9jZXNzaW5nIGFuIE5FU19BRVFFX0FFSURfQU1QX0JBRF9TVEFHX0lOREVYIGV2ZW50IG9uIFFQJXVcbiIsCi0JCQkJCW5lc3FwLT5od3FwLnFwX2lkKTsKLQkJCWlmIChuZXNxcC0+aWJxcC5ldmVudF9oYW5kbGVyKSB7Ci0JCQkJaWJldmVudC5kZXZpY2UgPSBuZXNxcC0+aWJxcC5kZXZpY2U7Ci0JCQkJaWJldmVudC5lbGVtZW50LnFwID0gJm5lc3FwLT5pYnFwOwotCQkJCWliZXZlbnQuZXZlbnQgPSBJQl9FVkVOVF9RUF9BQ0NFU1NfRVJSOwotCQkJCW5lc3FwLT5pYnFwLmV2ZW50X2hhbmRsZXIoJmliZXZlbnQsIG5lc3FwLT5pYnFwLnFwX2NvbnRleHQpOwotCQkJfQotCQkJYnJlYWs7CiAJCWNhc2UgTkVTX0FFUUVfQUVJRF9BTVBfVU5BTExPQ0FURURfU1RBRzoKLQkJCW5lc3FwID0gKigoc3RydWN0IG5lc19xcCAqKikmY29udGV4dCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKLQkJCW5lc3FwLT5od19pd2FycF9zdGF0ZSA9IGl3YXJwX3N0YXRlOwotCQkJbmVzcXAtPmh3X3RjcF9zdGF0ZSA9IHRjcF9zdGF0ZTsKLQkJCW5lc3FwLT5sYXN0X2FlcSA9IGFzeW5jX2V2ZW50X2lkOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKLQkJCW5lc19kZWJ1ZyhORVNfREJHX0FFUSwgIlByb2Nlc3NpbmcgYW4gTkVTX0FFUUVfQUVJRF9BTVBfVU5BTExPQ0FURURfU1RBRyBldmVudCBvbiBRUCV1XG4iLAotCQkJCQluZXNxcC0+aHdxcC5xcF9pZCk7Ci0JCQlpZiAobmVzcXAtPmlicXAuZXZlbnRfaGFuZGxlcikgewotCQkJCWliZXZlbnQuZGV2aWNlID0gbmVzcXAtPmlicXAuZGV2aWNlOwotCQkJCWliZXZlbnQuZWxlbWVudC5xcCA9ICZuZXNxcC0+aWJxcDsKLQkJCQlpYmV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUVBfQUNDRVNTX0VSUjsKLQkJCQluZXNxcC0+aWJxcC5ldmVudF9oYW5kbGVyKCZpYmV2ZW50LCBuZXNxcC0+aWJxcC5xcF9jb250ZXh0KTsKLQkJCX0KLQkJCWJyZWFrOworCQljYXNlIE5FU19BRVFFX0FFSURfQU1QX0lOVkFMSURfU1RBRzoKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9SSUdIVFNfVklPTEFUSU9OOgorCQljYXNlIE5FU19BRVFFX0FFSURfQU1QX0lOVkFMSURBVEVfTk9fUkVNT1RFX0FDQ0VTU19SSUdIVFM6CiAJCWNhc2UgTkVTX0FFUUVfQUVJRF9QUklWX09QRVJBVElPTl9ERU5JRUQ6Ci0JCQluZXNxcCA9IG5lc2FkYXB0ZXItPnFwX3RhYmxlW2xlMzJfdG9fY3B1KGFlcWUtPmFlcWVfd29yZHMKLQkJCQkJW05FU19BRVFFX0NPTVBfUVBfQ1FfSURfSURYXSktTkVTX0ZJUlNUX1FQTl07Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKLQkJCW5lc3FwLT5od19pd2FycF9zdGF0ZSA9IGl3YXJwX3N0YXRlOwotCQkJbmVzcXAtPmh3X3RjcF9zdGF0ZSA9IHRjcF9zdGF0ZTsKLQkJCW5lc3FwLT5sYXN0X2FlcSA9IGFzeW5jX2V2ZW50X2lkOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKLQkJCW5lc19kZWJ1ZyhORVNfREJHX0FFUSwgIlByb2Nlc3NpbmcgYW4gTkVTX0FFUUVfQUVJRF9QUklWX09QRVJBVElPTl9ERU5JRUQgZXZlbnQgb24gUVAldSwiCi0JCQkJCSIgbmVzcXAgPSAlcCwgQUUgcmVwb3J0ZWQgJXBcbiIsCi0JCQkJCW5lc3FwLT5od3FwLnFwX2lkLCBuZXNxcCwgKigoc3RydWN0IG5lc19xcCAqKikmY29udGV4dCkpOwotCQkJaWYgKG5lc3FwLT5pYnFwLmV2ZW50X2hhbmRsZXIpIHsKLQkJCQlpYmV2ZW50LmRldmljZSA9IG5lc3FwLT5pYnFwLmRldmljZTsKLQkJCQlpYmV2ZW50LmVsZW1lbnQucXAgPSAmbmVzcXAtPmlicXA7Ci0JCQkJaWJldmVudC5ldmVudCA9IElCX0VWRU5UX1FQX0FDQ0VTU19FUlI7Ci0JCQkJbmVzcXAtPmlicXAuZXZlbnRfaGFuZGxlcigmaWJldmVudCwgbmVzcXAtPmlicXAucXBfY29udGV4dCk7Ci0JCQl9CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9ERFBfVUJFX0REUF9NRVNTQUdFX1RPT19MT05HX0ZPUl9BVkFJTEFCTEVfQlVGRkVSOgorCQljYXNlIE5FU19BRVFFX0FFSURfQU1QX0JPVU5EU19WSU9MQVRJT046CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9BTVBfVE9fV1JBUDoKKwkJCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKikodW5zaWduZWQgbG9uZyljb250ZXh0OworCQkJbmVzX3Rlcm1pbmF0ZV9jb25uZWN0aW9uKG5lc2RldiwgbmVzcXAsIGFlcWUsIElCX0VWRU5UX1FQX0FDQ0VTU19FUlIpOwogCQkJYnJlYWs7CisKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0xMUF9TRUdNRU5UX1RPT19MQVJHRToKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0xMUF9TRUdNRU5UX1RPT19TTUFMTDoKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9VQkVfSU5WQUxJRF9NTzoKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9VQkVfSU5WQUxJRF9RTjoKKwkJCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKikodW5zaWduZWQgbG9uZyljb250ZXh0OworCQkJaWYgKGl3YXJwX29wY29kZShuZXNxcCwgYWVxX2luZm8pID4gSVdBUlBfT1BDT0RFX1RFUk0pIHsKKwkJCQlhZXFfaW5mbyAmPSAweGZmZmYwMDAwOworCQkJCWFlcV9pbmZvIHw9IE5FU19BRVFFX0FFSURfUkRNQVBfUk9FX1VORVhQRUNURURfT1BDT0RFOworCQkJCWFlcWUtPmFlcWVfd29yZHNbTkVTX0FFUUVfTUlTQ19JRFhdID0gY3B1X3RvX2xlMzIoYWVxX2luZm8pOworCQkJfQorCisJCWNhc2UgTkVTX0FFUUVfQUVJRF9SRE1BUF9ST0VfQkFEX0xMUF9DTE9TRToKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0xMUF9UT09fTUFOWV9SRVRSSUVTOgorCQljYXNlIE5FU19BRVFFX0FFSURfRERQX1VCRV9JTlZBTElEX01TTl9OT19CVUZGRVJfQVZBSUxBQkxFOgorCQljYXNlIE5FU19BRVFFX0FFSURfTExQX1JFQ0VJVkVEX01QQV9DUkNfRVJST1I6CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9BTVBfQkFEX1FQOgorCQljYXNlIE5FU19BRVFFX0FFSURfTExQX1JFQ0VJVkVEX01BUktFUl9BTkRfTEVOR1RIX0ZJRUxEU19ET05UX01BVENIOgorCQljYXNlIE5FU19BRVFFX0FFSURfRERQX0xDRV9MT0NBTF9DQVRBU1RST1BISUM6CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9ERFBfTk9fTF9CSVQ6CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9ERFBfSU5WQUxJRF9NU05fR0FQX0lOX01TTjoKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9JTlZBTElEX01TTl9SQU5HRV9JU19OT1RfVkFMSUQ6CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9ERFBfVUJFX0lOVkFMSURfRERQX1ZFUlNJT046CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9SRE1BUF9ST0VfSU5WQUxJRF9SRE1BUF9WRVJTSU9OOgorCQljYXNlIE5FU19BRVFFX0FFSURfUkRNQVBfUk9FX1VORVhQRUNURURfT1BDT0RFOgorCQljYXNlIE5FU19BRVFFX0FFSURfQU1QX0JBRF9QRDoKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9GQVNUUkVHX1NIQVJFRDoKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9GQVNUUkVHX1ZBTElEX1NUQUc6CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9BTVBfRkFTVFJFR19NV19TVEFHOgorCQljYXNlIE5FU19BRVFFX0FFSURfQU1QX0ZBU1RSRUdfSU5WQUxJRF9SSUdIVFM6CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9BTVBfRkFTVFJFR19QQkxfVEFCTEVfT1ZFUkZMT1c6CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9BTVBfRkFTVFJFR19JTlZBTElEX0xFTkdUSDoKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9JTlZBTElEQVRFX1NIQVJFRDoKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9JTlZBTElEQVRFX01SX1dJVEhfQk9VTkRfV0lORE9XUzoKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9NV0JJTkRfVkFMSURfU1RBRzoKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9NV0JJTkRfT0ZfTVJfU1RBRzoKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9NV0JJTkRfVE9fWkVST19CQVNFRF9TVEFHOgorCQljYXNlIE5FU19BRVFFX0FFSURfQU1QX01XQklORF9UT19NV19TVEFHOgorCQljYXNlIE5FU19BRVFFX0FFSURfQU1QX01XQklORF9JTlZBTElEX1JJR0hUUzoKKwkJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9NV0JJTkRfSU5WQUxJRF9CT1VORFM6CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9BTVBfTVdCSU5EX1RPX0lOVkFMSURfUEFSRU5UOgorCQljYXNlIE5FU19BRVFFX0FFSURfQU1QX01XQklORF9CSU5EX0RJU0FCTEVEOgorCQljYXNlIE5FU19BRVFFX0FFSURfQkFEX0NMT1NFOgorCQljYXNlIE5FU19BRVFFX0FFSURfUkRNQV9SRUFEX1dISUxFX09SRF9aRVJPOgorCQljYXNlIE5FU19BRVFFX0FFSURfU1RBR19aRVJPX0lOVkFMSUQ6CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9ST0VfSU5WQUxJRF9SRE1BX1JFQURfUkVRVUVTVDoKKwkJY2FzZSBORVNfQUVRRV9BRUlEX1JPRV9JTlZBTElEX1JETUFfV1JJVEVfT1JfUkVBRF9SRVNQOgorCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7CisJCQluZXNfdGVybWluYXRlX2Nvbm5lY3Rpb24obmVzZGV2LCBuZXNxcCwgYWVxZSwgSUJfRVZFTlRfUVBfRkFUQUwpOworCQkJYnJlYWs7CisKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0NRX09QRVJBVElPTl9FUlJPUjoKIAkJCWNvbnRleHQgPDw9IDE7CiAJCQluZXNfZGVidWcoTkVTX0RCR19BRVEsICJQcm9jZXNzaW5nIGFuIE5FU19BRVFFX0FFSURfQ1FfT1BFUkFUSU9OX0VSUk9SIGV2ZW50IG9uIENRJXUsICVwXG4iLApAQCAtMzE1Myw4MyArMzUyNSwxOSBAQAogCQkJaWYgKHJlc291cmNlX2FsbG9jYXRlZCkgewogCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBQcm9jZXNzaW5nIGFuIE5FU19BRVFFX0FFSURfQ1FfT1BFUkFUSU9OX0VSUk9SIGV2ZW50IG9uIENRJXVcbiIsCiAJCQkJCQlfX2Z1bmNfXywgbGUzMl90b19jcHUoYWVxZS0+YWVxZV93b3Jkc1tORVNfQUVRRV9DT01QX1FQX0NRX0lEX0lEWF0pKTsKKwkJCQlod19jcSA9IChzdHJ1Y3QgbmVzX2h3X2NxICopKHVuc2lnbmVkIGxvbmcpY29udGV4dDsKKwkJCQlpZiAoaHdfY3EpIHsKKwkJCQkJbmVzY3EgPSBjb250YWluZXJfb2YoaHdfY3EsIHN0cnVjdCBuZXNfY3EsIGh3X2NxKTsKKwkJCQkJaWYgKG5lc2NxLT5pYmNxLmV2ZW50X2hhbmRsZXIpIHsKKwkJCQkJCWliZXZlbnQuZGV2aWNlID0gbmVzY3EtPmliY3EuZGV2aWNlOworCQkJCQkJaWJldmVudC5ldmVudCA9IElCX0VWRU5UX0NRX0VSUjsKKwkJCQkJCWliZXZlbnQuZWxlbWVudC5jcSA9ICZuZXNjcS0+aWJjcTsKKwkJCQkJCW5lc2NxLT5pYmNxLmV2ZW50X2hhbmRsZXIoJmliZXZlbnQsIG5lc2NxLT5pYmNxLmNxX2NvbnRleHQpOworCQkJCQl9CisJCQkJfQogCQkJfQogCQkJYnJlYWs7Ci0JCWNhc2UgTkVTX0FFUUVfQUVJRF9ERFBfVUJFX0REUF9NRVNTQUdFX1RPT19MT05HX0ZPUl9BVkFJTEFCTEVfQlVGRkVSOgotCQkJbmVzcXAgPSBuZXNhZGFwdGVyLT5xcF90YWJsZVtsZTMyX3RvX2NwdSgKLQkJCQkJYWVxZS0+YWVxZV93b3Jkc1tORVNfQUVRRV9DT01QX1FQX0NRX0lEX0lEWF0pLU5FU19GSVJTVF9RUE5dOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7Ci0JCQluZXNxcC0+aHdfaXdhcnBfc3RhdGUgPSBpd2FycF9zdGF0ZTsKLQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSB0Y3Bfc3RhdGU7Ci0JCQluZXNxcC0+bGFzdF9hZXEgPSBhc3luY19ldmVudF9pZDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7Ci0JCQluZXNfZGVidWcoTkVTX0RCR19BRVEsICJQcm9jZXNzaW5nIGFuIE5FU19BRVFFX0FFSURfRERQX1VCRV9ERFBfTUVTU0FHRV9UT09fTE9ORyIKLQkJCQkJIl9GT1JfQVZBSUxBQkxFX0JVRkZFUiBldmVudCBvbiBRUCV1XG4iLAotCQkJCQluZXNxcC0+aHdxcC5xcF9pZCk7Ci0JCQlpZiAobmVzcXAtPmlicXAuZXZlbnRfaGFuZGxlcikgewotCQkJCWliZXZlbnQuZGV2aWNlID0gbmVzcXAtPmlicXAuZGV2aWNlOwotCQkJCWliZXZlbnQuZWxlbWVudC5xcCA9ICZuZXNxcC0+aWJxcDsKLQkJCQlpYmV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUVBfQUNDRVNTX0VSUjsKLQkJCQluZXNxcC0+aWJxcC5ldmVudF9oYW5kbGVyKCZpYmV2ZW50LCBuZXNxcC0+aWJxcC5xcF9jb250ZXh0KTsKLQkJCX0KLQkJCS8qIHRlbGwgY20gdG8gZGlzY29ubmVjdCwgY20gd2lsbCBxdWV1ZSB3b3JrIHRvIHRocmVhZCAqLwotCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOwotCQkJYnJlYWs7Ci0JCWNhc2UgTkVTX0FFUUVfQUVJRF9ERFBfVUJFX0lOVkFMSURfTVNOX05PX0JVRkZFUl9BVkFJTEFCTEU6Ci0JCQluZXNxcCA9ICooKHN0cnVjdCBuZXNfcXAgKiopJmNvbnRleHQpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7Ci0JCQluZXNxcC0+aHdfaXdhcnBfc3RhdGUgPSBpd2FycF9zdGF0ZTsKLQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSB0Y3Bfc3RhdGU7Ci0JCQluZXNxcC0+bGFzdF9hZXEgPSBhc3luY19ldmVudF9pZDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7Ci0JCQluZXNfZGVidWcoTkVTX0RCR19BRVEsICJQcm9jZXNzaW5nIGFuIE5FU19BRVFFX0FFSURfRERQX1VCRV9JTlZBTElEX01TTiIKLQkJCQkJIl9OT19CVUZGRVJfQVZBSUxBQkxFIGV2ZW50IG9uIFFQJXVcbiIsCi0JCQkJCW5lc3FwLT5od3FwLnFwX2lkKTsKLQkJCWlmIChuZXNxcC0+aWJxcC5ldmVudF9oYW5kbGVyKSB7Ci0JCQkJaWJldmVudC5kZXZpY2UgPSBuZXNxcC0+aWJxcC5kZXZpY2U7Ci0JCQkJaWJldmVudC5lbGVtZW50LnFwID0gJm5lc3FwLT5pYnFwOwotCQkJCWliZXZlbnQuZXZlbnQgPSBJQl9FVkVOVF9RUF9GQVRBTDsKLQkJCQluZXNxcC0+aWJxcC5ldmVudF9oYW5kbGVyKCZpYmV2ZW50LCBuZXNxcC0+aWJxcC5xcF9jb250ZXh0KTsKLQkJCX0KLQkJCS8qIHRlbGwgY20gdG8gZGlzY29ubmVjdCwgY20gd2lsbCBxdWV1ZSB3b3JrIHRvIHRocmVhZCAqLwotCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOwotCQkJYnJlYWs7Ci0JCWNhc2UgTkVTX0FFUUVfQUVJRF9MTFBfUkVDRUlWRURfTVBBX0NSQ19FUlJPUjoKLQkJCW5lc3FwID0gKigoc3RydWN0IG5lc19xcCAqKikmY29udGV4dCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKLQkJCW5lc3FwLT5od19pd2FycF9zdGF0ZSA9IGl3YXJwX3N0YXRlOwotCQkJbmVzcXAtPmh3X3RjcF9zdGF0ZSA9IHRjcF9zdGF0ZTsKLQkJCW5lc3FwLT5sYXN0X2FlcSA9IGFzeW5jX2V2ZW50X2lkOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKLQkJCW5lc19kZWJ1ZyhORVNfREJHX0FFUSwgIlByb2Nlc3NpbmcgYW4gTkVTX0FFUUVfQUVJRF9MTFBfUkVDRUlWRURfTVBBX0NSQ19FUlJPUiIKLQkJCQkJIiBldmVudCBvbiBRUCV1IFxuICBRMiBEYXRhOlxuIiwKLQkJCQkJbmVzcXAtPmh3cXAucXBfaWQpOwotCQkJaWYgKG5lc3FwLT5pYnFwLmV2ZW50X2hhbmRsZXIpIHsKLQkJCQlpYmV2ZW50LmRldmljZSA9IG5lc3FwLT5pYnFwLmRldmljZTsKLQkJCQlpYmV2ZW50LmVsZW1lbnQucXAgPSAmbmVzcXAtPmlicXA7Ci0JCQkJaWJldmVudC5ldmVudCA9IElCX0VWRU5UX1FQX0ZBVEFMOwotCQkJCW5lc3FwLT5pYnFwLmV2ZW50X2hhbmRsZXIoJmliZXZlbnQsIG5lc3FwLT5pYnFwLnFwX2NvbnRleHQpOwotCQkJfQotCQkJLyogdGVsbCBjbSB0byBkaXNjb25uZWN0LCBjbSB3aWxsIHF1ZXVlIHdvcmsgdG8gdGhyZWFkICovCi0JCQluZXNfY21fZGlzY29ubihuZXNxcCk7Ci0JCQlicmVhazsKLQkJCS8qIFRPRE86IGFkZGl0aW9uYWwgQUVzIG5lZWQgdG8gYmUgaGVyZSAqLwotCQljYXNlIE5FU19BRVFFX0FFSURfQU1QX0JPVU5EU19WSU9MQVRJT046Ci0JCQluZXNxcCA9ICooKHN0cnVjdCBuZXNfcXAgKiopJmNvbnRleHQpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7Ci0JCQluZXNxcC0+aHdfaXdhcnBfc3RhdGUgPSBpd2FycF9zdGF0ZTsKLQkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSB0Y3Bfc3RhdGU7Ci0JCQluZXNxcC0+bGFzdF9hZXEgPSBhc3luY19ldmVudF9pZDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7Ci0JCQlpZiAobmVzcXAtPmlicXAuZXZlbnRfaGFuZGxlcikgewotCQkJCWliZXZlbnQuZGV2aWNlID0gbmVzcXAtPmlicXAuZGV2aWNlOwotCQkJCWliZXZlbnQuZWxlbWVudC5xcCA9ICZuZXNxcC0+aWJxcDsKLQkJCQlpYmV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUVBfQUNDRVNTX0VSUjsKLQkJCQluZXNxcC0+aWJxcC5ldmVudF9oYW5kbGVyKCZpYmV2ZW50LAotCQkJCQkJbmVzcXAtPmlicXAucXBfY29udGV4dCk7Ci0JCQl9Ci0JCQluZXNfY21fZGlzY29ubihuZXNxcCk7Ci0JCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJbmVzX2RlYnVnKE5FU19EQkdfQUVRLCAiUHJvY2Vzc2luZyBhbiBpV0FSUCByZWxhdGVkIEFFIGZvciBRUCwgbWlzYyA9IDB4JTA0WFxuIiwKIAkJCQkJYXN5bmNfZXZlbnRfaWQpOwpAQCAtMzIzOCw3ICszNTQ2LDYgQEAKIAogfQogCi0KIC8qKgogICogbmVzX2l3YXJwX2NlX2hhbmRsZXIKICAqLwpAQCAtMzM3Myw2ICszNjgwLDggQEAKIHsKIAlzdHJ1Y3QgbmVzX2NxcF9yZXF1ZXN0ICpjcXBfcmVxdWVzdDsKIAlzdHJ1Y3QgbmVzX2h3X2NxcF93cWUgKmNxcF93cWU7CisJdTMyIHNxX2NvZGUgPSAoTkVTX0lXQVJQX0NRRV9NQUpPUl9GTFVTSCA8PCAxNikgfCBORVNfSVdBUlBfQ1FFX01JTk9SX0ZMVVNIOworCXUzMiBycV9jb2RlID0gKE5FU19JV0FSUF9DUUVfTUFKT1JfRkxVU0ggPDwgMTYpIHwgTkVTX0lXQVJQX0NRRV9NSU5PUl9GTFVTSDsKIAlpbnQgcmV0OwogCiAJY3FwX3JlcXVlc3QgPSBuZXNfZ2V0X2NxcF9yZXF1ZXN0KG5lc2Rldik7CkBAIC0zMzg5LDYgKzM2OTgsMjQgQEAKIAljcXBfd3FlID0gJmNxcF9yZXF1ZXN0LT5jcXBfd3FlOwogCW5lc19maWxsX2luaXRfY3FwX3dxZShjcXBfd3FlLCBuZXNkZXYpOwogCisJLyogSWYgd3FlIGluIGVycm9yIHdhcyBpZGVudGlmaWVkLCBzZXQgY29kZSB0byBiZSBwdXQgaW50byBjcWUgKi8KKwlpZiAoKG5lc3FwLT50ZXJtX3NxX2ZsdXNoX2NvZGUpICYmICh3aGljaF93cSAmIE5FU19DUVBfRkxVU0hfU1EpKSB7CisJCXdoaWNoX3dxIHw9IE5FU19DUVBfRkxVU0hfTUFKX01JTjsKKwkJc3FfY29kZSA9IChDUUVfTUFKT1JfRFJWIDw8IDE2KSB8IG5lc3FwLT50ZXJtX3NxX2ZsdXNoX2NvZGU7CisJCW5lc3FwLT50ZXJtX3NxX2ZsdXNoX2NvZGUgPSAwOworCX0KKworCWlmICgobmVzcXAtPnRlcm1fcnFfZmx1c2hfY29kZSkgJiYgKHdoaWNoX3dxICYgTkVTX0NRUF9GTFVTSF9SUSkpIHsKKwkJd2hpY2hfd3EgfD0gTkVTX0NRUF9GTFVTSF9NQUpfTUlOOworCQlycV9jb2RlID0gKENRRV9NQUpPUl9EUlYgPDwgMTYpIHwgbmVzcXAtPnRlcm1fcnFfZmx1c2hfY29kZTsKKwkJbmVzcXAtPnRlcm1fcnFfZmx1c2hfY29kZSA9IDA7CisJfQorCisJaWYgKHdoaWNoX3dxICYgTkVTX0NRUF9GTFVTSF9NQUpfTUlOKSB7CisJCWNxcF93cWUtPndxZV93b3Jkc1tORVNfQ1FQX1FQX1dRRV9GTFVTSF9TUV9DT0RFXSA9IGNwdV90b19sZTMyKHNxX2NvZGUpOworCQljcXBfd3FlLT53cWVfd29yZHNbTkVTX0NRUF9RUF9XUUVfRkxVU0hfUlFfQ09ERV0gPSBjcHVfdG9fbGUzMihycV9jb2RlKTsKKwl9CisKIAljcXBfd3FlLT53cWVfd29yZHNbTkVTX0NRUF9XUUVfT1BDT0RFX0lEWF0gPQogCQkJY3B1X3RvX2xlMzIoTkVTX0NRUF9GTFVTSF9XUUVTIHwgd2hpY2hfd3EpOwogCWNxcF93cWUtPndxZV93b3Jkc1tORVNfQ1FQX1dRRV9JRF9JRFhdID0gY3B1X3RvX2xlMzIobmVzcXAtPmh3cXAucXBfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKaW5kZXggYzM2NTRjNi4uZjI4YTQxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCkBAIC0yNDEsNiArMjQxLDcgQEAKIH07CiAKICNkZWZpbmUgTkVTX0NRUF9PUF9JV0FSUF9TVEFURV9TSElGVCAyOAorI2RlZmluZSBORVNfQ1FQX09QX1RFUk1MRU5fU0hJRlQgICAgIDI4CiAKIGVudW0gbmVzX2NxcF9xcF9iaXRzIHsKIAlORVNfQ1FQX1FQX0FSUF9WQUxJRCA9ICgxPDw4KSwKQEAgLTI2NSwxMiArMjY2LDE2IEBACiAJTkVTX0NRUF9RUF9JV0FSUF9TVEFURV9URVJNSU5BVEUgPSAoNTw8TkVTX0NRUF9PUF9JV0FSUF9TVEFURV9TSElGVCksCiAJTkVTX0NRUF9RUF9JV0FSUF9TVEFURV9FUlJPUiA9ICg2PDxORVNfQ1FQX09QX0lXQVJQX1NUQVRFX1NISUZUKSwKIAlORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX01BU0sgPSAoNzw8TkVTX0NRUF9PUF9JV0FSUF9TVEFURV9TSElGVCksCisJTkVTX0NRUF9RUF9URVJNX0RPTlRfU0VORF9GSU4gPSAoMTw8MjQpLAorCU5FU19DUVBfUVBfVEVSTV9ET05UX1NFTkRfVEVSTV9NU0cgPSAoMTw8MjUpLAogCU5FU19DUVBfUVBfUkVTRVQgPSAoMTw8MzEpLAogfTsKIAogZW51bSBuZXNfY3FwX3FwX3dxZV93b3JkX2lkeCB7CiAJTkVTX0NRUF9RUF9XUUVfQ09OVEVYVF9MT1dfSURYID0gNiwKIAlORVNfQ1FQX1FQX1dRRV9DT05URVhUX0hJR0hfSURYID0gNywKKwlORVNfQ1FQX1FQX1dRRV9GTFVTSF9TUV9DT0RFID0gOCwKKwlORVNfQ1FQX1FQX1dRRV9GTFVTSF9SUV9DT0RFID0gOSwKIAlORVNfQ1FQX1FQX1dRRV9ORVdfTVNTX0lEWCA9IDE1LAogfTsKIApAQCAtMzYxLDYgKzM2Niw3IEBACiBlbnVtIG5lc19jcXBfZmx1c2hfYml0cyB7CiAJTkVTX0NRUF9GTFVTSF9TUSA9ICgxPDwzMCksCiAJTkVTX0NRUF9GTFVTSF9SUSA9ICgxPDwzMSksCisJTkVTX0NRUF9GTFVTSF9NQUpfTUlOID0gKDE8PDI4KSwKIH07CiAKIGVudW0gbmVzX2NxZV9vcGNvZGVfYml0cyB7CkBAIC02MzMsMTEgKzYzOSwxNCBAQAogCU5FU19BRVFFX0lOQk9VTkRfUkRNQSA9ICgxPDwxOSksCiAJTkVTX0FFUUVfSVdBUlBfU1RBVEVfTUFTSyA9ICg3PDwyMCksCiAJTkVTX0FFUUVfVENQX1NUQVRFX01BU0sgPSAoMHhmPDwyNCksCisJTkVTX0FFUUVfUTJfREFUQV9XUklUVEVOID0gKDB4Mzw8MjgpLAogCU5FU19BRVFFX1ZBTElEID0gKDE8PDMxKSwKIH07CiAKICNkZWZpbmUgTkVTX0FFUUVfSVdBUlBfU1RBVEVfU0hJRlQJMjAKICNkZWZpbmUgTkVTX0FFUUVfVENQX1NUQVRFX1NISUZUCTI0CisjZGVmaW5lIE5FU19BRVFFX1EyX0RBVEFfRVRIRVJORVQgICAgICAgKDE8PDI4KQorI2RlZmluZSBORVNfQUVRRV9RMl9EQVRBX01QQSAgICAgICAgICAgICgxPDwyOSkKIAogZW51bSBuZXNfYWVxZV9pd2FycF9zdGF0ZSB7CiAJTkVTX0FFUUVfSVdBUlBfU1RBVEVfTk9OX0VYSVNUQU5UID0gMCwKQEAgLTc1MSw2ICs3NjAsMTUgQEAKIAlORVNfSVdBUlBfU1FfT1BfTk9QID0gMTIsCiB9OwogCitlbnVtIG5lc19pd2FycF9jcWVfbWFqb3JfY29kZSB7CisJTkVTX0lXQVJQX0NRRV9NQUpPUl9GTFVTSCA9IDEsCisJTkVTX0lXQVJQX0NRRV9NQUpPUl9EUlYgPSAweDgwMDAKK307CisKK2VudW0gbmVzX2l3YXJwX2NxZV9taW5vcl9jb2RlIHsKKwlORVNfSVdBUlBfQ1FFX01JTk9SX0ZMVVNIID0gMQorfTsKKwogI2RlZmluZSBORVNfRUVQUk9NX1JFQURfUkVRVUVTVCAoMTw8MTYpCiAjZGVmaW5lIE5FU19NQUNfQUREUl9WQUxJRCAgICAgICgxPDwyMCkKIApAQCAtMTExOSw2ICsxMTM3LDcgQEAKIAl1OCAgICAgICAgICAgIG5ldGRldl9tYXg7CS8qIGZyb20gaG9zdCBuaWMgYWRkcmVzcyBjb3VudCBpbiBFRVBST00gKi8KIAl1OCAgICAgICAgICAgIHBvcnRfY291bnQ7CiAJdTggICAgICAgICAgICB2aXJ0d3E7CisJdTggICAgICAgICAgICBzZW5kX3Rlcm1fb2s7CiAJdTggICAgICAgICAgICBldF91c2VfYWRhcHRpdmVfcnhfY29hbGVzY2U7CiAJdTggICAgICAgICAgICBhZGFwdGVyX2Zjbl9jb3VudDsKIAl1OCBwZnRfbWNhc3RfbWFwW05FU19QRlRfU0laRV07CkBAIC0xMjE3LDYgKzEyMzYsOTAgQEAKIAl1MzIgbnVtX3BkOwogfTsKIAorZW51bSBuZXNfaGRyY3RfZmxhZ3MgeworCUREUF9MRU5fRkxBRyAgICAgICAgICAgICAgICAgICAgPSAweDgwLAorCUREUF9IRFJfRkxBRyAgICAgICAgICAgICAgICAgICAgPSAweDQwLAorCVJETUFfSERSX0ZMQUcgICAgICAgICAgICAgICAgICAgPSAweDIwCit9OworCitlbnVtIG5lc190ZXJtX2xheWVycyB7CisJTEFZRVJfUkRNQQkJCT0gMCwKKwlMQVlFUl9ERFAJCQk9IDEsCisJTEFZRVJfTVBBCQkJPSAyCit9OworCitlbnVtIG5lc190ZXJtX2Vycm9yX3R5cGVzIHsKKwlSRE1BUF9DQVRBU1RST1BISUMJCT0gMCwKKwlSRE1BUF9SRU1PVEVfUFJPVAkJPSAxLAorCVJETUFQX1JFTU9URV9PUAkJCT0gMiwKKwlERFBfQ0FUQVNUUk9QSElDCQk9IDAsCisJRERQX1RBR0dFRF9CVUZGRVIJCT0gMSwKKwlERFBfVU5UQUdHRURfQlVGRkVSCQk9IDIsCisJRERQX0xMUAkJCQk9IDMKK307CisKK2VudW0gbmVzX3Rlcm1fcmRtYV9lcnJvcnMgeworCVJETUFQX0lOVl9TVEFHCQkJPSAweDAwLAorCVJETUFQX0lOVl9CT1VORFMJCT0gMHgwMSwKKwlSRE1BUF9BQ0NFU1MJCQk9IDB4MDIsCisJUkRNQVBfVU5BU1NPQ19TVEFHCQk9IDB4MDMsCisJUkRNQVBfVE9fV1JBUAkJCT0gMHgwNCwKKwlSRE1BUF9JTlZfUkRNQVBfVkVSCQk9IDB4MDUsCisJUkRNQVBfVU5FWFBFQ1RFRF9PUAkJPSAweDA2LAorCVJETUFQX0NBVEFTVFJPUEhJQ19MT0NBTAk9IDB4MDcsCisJUkRNQVBfQ0FUQVNUUk9QSElDX0dMT0JBTAk9IDB4MDgsCisJUkRNQVBfQ0FOVF9JTlZfU1RBRwkJPSAweDA5LAorCVJETUFQX1VOU1BFQ0lGSUVECQk9IDB4ZmYKK307CisKK2VudW0gbmVzX3Rlcm1fZGRwX2Vycm9ycyB7CisJRERQX0NBVEFTVFJPUEhJQ19MT0NBTAkJPSAweDAwLAorCUREUF9UQUdHRURfSU5WX1NUQUcJCT0gMHgwMCwKKwlERFBfVEFHR0VEX0JPVU5EUwkJPSAweDAxLAorCUREUF9UQUdHRURfVU5BU1NPQ19TVEFHCQk9IDB4MDIsCisJRERQX1RBR0dFRF9UT19XUkFQCQk9IDB4MDMsCisJRERQX1RBR0dFRF9JTlZfRERQX1ZFUgkJPSAweDA0LAorCUREUF9VTlRBR0dFRF9JTlZfUU4JCT0gMHgwMSwKKwlERFBfVU5UQUdHRURfSU5WX01TTl9OT19CVUYJPSAweDAyLAorCUREUF9VTlRBR0dFRF9JTlZfTVNOX1JBTkdFCT0gMHgwMywKKwlERFBfVU5UQUdHRURfSU5WX01PCQk9IDB4MDQsCisJRERQX1VOVEFHR0VEX0lOVl9UT09fTE9ORwk9IDB4MDUsCisJRERQX1VOVEFHR0VEX0lOVl9ERFBfVkVSCT0gMHgwNgorfTsKKworZW51bSBuZXNfdGVybV9tcGFfZXJyb3JzIHsKKwlNUEFfQ0xPU0VECQkJPSAweDAxLAorCU1QQV9DUkMJCQkJPSAweDAyLAorCU1QQV9NQVJLRVIJCQk9IDB4MDMsCisJTVBBX1JFUV9SU1AJCQk9IDB4MDQsCit9OworCitzdHJ1Y3QgbmVzX3Rlcm1pbmF0ZV9oZHIgeworCXU4IGxheWVyX2V0eXBlOworCXU4IGVycm9yX2NvZGU7CisJdTggaGRyY3Q7CisJdTggcnN2ZDsKK307CisKKy8qIFVzZWQgdG8gZGV0ZXJtaW5lIGhvdyB0byBmaWxsIGluIHRlcm1pbmF0ZSBlcnJvciBjb2RlcyAqLworI2RlZmluZSBJV0FSUF9PUENPREVfV1JJVEUJCTAKKyNkZWZpbmUgSVdBUlBfT1BDT0RFX1JFQURSRVEJCTEKKyNkZWZpbmUgSVdBUlBfT1BDT0RFX1JFQURSU1AJCTIKKyNkZWZpbmUgSVdBUlBfT1BDT0RFX1NFTkQJCTMKKyNkZWZpbmUgSVdBUlBfT1BDT0RFX1NFTkRfSU5WCQk0CisjZGVmaW5lIElXQVJQX09QQ09ERV9TRU5EX1NFCQk1CisjZGVmaW5lIElXQVJQX09QQ09ERV9TRU5EX1NFX0lOVgk2CisjZGVmaW5lIElXQVJQX09QQ09ERV9URVJNCQk3CisKKy8qIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBvbmx5IGR1cmluZyB0ZXJtaW5hdGUgcHJvY2Vzc2luZyAqLworI2RlZmluZSBURVJNX0REUF9MRU5fVEFHR0VECTE0CisjZGVmaW5lIFRFUk1fRERQX0xFTl9VTlRBR0dFRAkxOAorI2RlZmluZSBURVJNX1JETUFfTEVOCQkyOAorI2RlZmluZSBSRE1BX09QQ09ERV9NQVNLCTB4MGYKKyNkZWZpbmUgUkRNQV9SRUFEX1JFUV9PUENPREUJMQorI2RlZmluZSBCQURfRlJBTUVfT0ZGU0VUCTY0CisjZGVmaW5lIENRRV9NQUpPUl9EUlYJCTB4ODAwMAorCiAjZGVmaW5lIG5lc192bGFuX3J4IHZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYgogI2RlZmluZSBuZXNfbmV0aWZfcnggbmV0aWZfcmVjZWl2ZV9za2IKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwppbmRleCBjNmU2NjExLi41MzhlNDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwpAQCAtMTUwOCw3ICsxNTA4LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5lc19ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmVzX2V0aHRvb2xfb3BzID0gewogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9zZXR0aW5ncyA9IG5lc19uZXRkZXZfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBuZXNfbmV0ZGV2X3NldF9zZXR0aW5ncywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jCmluZGV4IGEyODIwMzEuLjk2ODdjMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXRpbHMuYwpAQCAtMTgzLDYgKzE4Myw5IEBACiAJCX0gZWxzZSBpZiAoKChtYWpvcl92ZXIgPT0gMikgJiYgKG1pbm9yX3ZlciA+IDIxKSkgfHwgKChtYWpvcl92ZXIgPiAyKSAmJiAobWFqb3JfdmVyICE9IDI1NSkpKSB7CiAJCQluZXNhZGFwdGVyLT52aXJ0d3EgPSAxOwogCQl9CisJCWlmICgoKG1ham9yX3ZlciA9PSAzKSAmJiAobWlub3JfdmVyID49IDE2KSkgfHwgKG1ham9yX3ZlciA+IDMpKQorCQkJbmVzYWRhcHRlci0+c2VuZF90ZXJtX29rID0gMTsKKwogCQluZXNhZGFwdGVyLT5maXJtd2FyZV92ZXJzaW9uID0gKCgodTMyKSh1OCkoZWVwcm9tX2RhdGE+PjgpKSAgPDwgIDE2KSArCiAJCQkJKHUzMikoKHU4KWVlcHJvbV9kYXRhKTsKIApAQCAtNTQ4LDcgKzU1MSw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2Rldi0+Y3FwLmxvY2ssIGZsYWdzKTsKIAl9CiAJaWYgKGNxcF9yZXF1ZXN0ID09IE5VTEwpIHsKLQkJY3FwX3JlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmVzX2NxcF9yZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisJCWNxcF9yZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5lc19jcXBfcmVxdWVzdCksIEdGUF9BVE9NSUMpOwogCQlpZiAoY3FwX3JlcXVlc3QpIHsKIAkJCWNxcF9yZXF1ZXN0LT5keW5hbWljID0gMTsKIAkJCUlOSVRfTElTVF9IRUFEKCZjcXBfcmVxdWVzdC0+bGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYwppbmRleCAyMWUwZmQzLi5hNjgwYzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKQEAgLTY2NywxNSArNjY3LDMyIEBACiAgKi8KIHN0YXRpYyBpbnQgbmVzX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQsIHN0cnVjdCBpYl9wb3J0X2F0dHIgKnByb3BzKQogeworCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYyA9IHRvX25lc3ZuaWMoaWJkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXN2bmljLT5uZXRkZXY7CisKIAltZW1zZXQocHJvcHMsIDAsIHNpemVvZigqcHJvcHMpKTsKIAotCXByb3BzLT5tYXhfbXR1ID0gSUJfTVRVXzIwNDg7Ci0JcHJvcHMtPmFjdGl2ZV9tdHUgPSBJQl9NVFVfMjA0ODsKKwlwcm9wcy0+bWF4X210dSA9IElCX01UVV80MDk2OworCisJaWYgKG5ldGRldi0+bXR1ICA+PSA0MDk2KQorCQlwcm9wcy0+YWN0aXZlX210dSA9IElCX01UVV80MDk2OworCWVsc2UgaWYgKG5ldGRldi0+bXR1ICA+PSAyMDQ4KQorCQlwcm9wcy0+YWN0aXZlX210dSA9IElCX01UVV8yMDQ4OworCWVsc2UgaWYgKG5ldGRldi0+bXR1ICA+PSAxMDI0KQorCQlwcm9wcy0+YWN0aXZlX210dSA9IElCX01UVV8xMDI0OworCWVsc2UgaWYgKG5ldGRldi0+bXR1ICA+PSA1MTIpCisJCXByb3BzLT5hY3RpdmVfbXR1ID0gSUJfTVRVXzUxMjsKKwllbHNlCisJCXByb3BzLT5hY3RpdmVfbXR1ID0gSUJfTVRVXzI1NjsKKwogCXByb3BzLT5saWQgPSAxOwogCXByb3BzLT5sbWMgPSAwOwogCXByb3BzLT5zbV9saWQgPSAwOwogCXByb3BzLT5zbV9zbCA9IDA7Ci0JcHJvcHMtPnN0YXRlID0gSUJfUE9SVF9BQ1RJVkU7CisJaWYgKG5lc3ZuaWMtPmxpbmt1cCkKKwkJcHJvcHMtPnN0YXRlID0gSUJfUE9SVF9BQ1RJVkU7CisJZWxzZQorCQlwcm9wcy0+c3RhdGUgPSBJQl9QT1JUX0RPV047CiAJcHJvcHMtPnBoeXNfc3RhdGUgPSAwOwogCXByb3BzLT5wb3J0X2NhcF9mbGFncyA9IElCX1BPUlRfQ01fU1VQIHwgSUJfUE9SVF9SRUlOSVRfU1VQIHwKIAkJCUlCX1BPUlRfVkVORE9SX0NMQVNTX1NVUCB8IElCX1BPUlRfQk9PVF9NR01UX1NVUDsKQEAgLTE1MDYsMTIgKzE1MjMsNDUgQEAKIAogCiAvKioKKyAqIG5lc19jbGVhbl9jcQorICovCitzdGF0aWMgdm9pZCBuZXNfY2xlYW5fY3Eoc3RydWN0IG5lc19xcCAqbmVzcXAsIHN0cnVjdCBuZXNfY3EgKm5lc2NxKQoreworCXUzMiBjcV9oZWFkOworCXUzMiBsbzsKKwl1MzIgaGk7CisJdTY0IHU2NHRlbXA7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzY3EtPmxvY2ssIGZsYWdzKTsKKworCWNxX2hlYWQgPSBuZXNjcS0+aHdfY3EuY3FfaGVhZDsKKwl3aGlsZSAobGUzMl90b19jcHUobmVzY3EtPmh3X2NxLmNxX3ZiYXNlW2NxX2hlYWRdLmNxZV93b3Jkc1tORVNfQ1FFX09QQ09ERV9JRFhdKSAmIE5FU19DUUVfVkFMSUQpIHsKKwkJcm1iKCk7CisJCWxvID0gbGUzMl90b19jcHUobmVzY3EtPmh3X2NxLmNxX3ZiYXNlW2NxX2hlYWRdLmNxZV93b3Jkc1tORVNfQ1FFX0NPTVBfQ09NUF9DVFhfTE9XX0lEWF0pOworCQloaSA9IGxlMzJfdG9fY3B1KG5lc2NxLT5od19jcS5jcV92YmFzZVtjcV9oZWFkXS5jcWVfd29yZHNbTkVTX0NRRV9DT01QX0NPTVBfQ1RYX0hJR0hfSURYXSk7CisJCXU2NHRlbXAgPSAoKCh1NjQpaGkpIDw8IDMyKSB8ICgodTY0KWxvKTsKKwkJdTY0dGVtcCAmPSB+KE5FU19TV19DT05URVhUX0FMSUdOLTEpOworCQlpZiAodTY0dGVtcCA9PSAodTY0KSh1bnNpZ25lZCBsb25nKW5lc3FwKSB7CisJCQkvKiBaZXJvIHRoZSBjb250ZXh0IHZhbHVlIHNvIGNxZSB3aWxsIGJlIGlnbm9yZWQgKi8KKwkJCW5lc2NxLT5od19jcS5jcV92YmFzZVtjcV9oZWFkXS5jcWVfd29yZHNbTkVTX0NRRV9DT01QX0NPTVBfQ1RYX0xPV19JRFhdID0gMDsKKwkJCW5lc2NxLT5od19jcS5jcV92YmFzZVtjcV9oZWFkXS5jcWVfd29yZHNbTkVTX0NRRV9DT01QX0NPTVBfQ1RYX0hJR0hfSURYXSA9IDA7CisJCX0KKworCQlpZiAoKytjcV9oZWFkID49IG5lc2NxLT5od19jcS5jcV9zaXplKQorCQkJY3FfaGVhZCA9IDA7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzY3EtPmxvY2ssIGZsYWdzKTsKK30KKworCisvKioKICAqIG5lc19kZXN0cm95X3FwCiAgKi8KIHN0YXRpYyBpbnQgbmVzX2Rlc3Ryb3lfcXAoc3RydWN0IGliX3FwICppYnFwKQogewogCXN0cnVjdCBuZXNfcXAgKm5lc3FwID0gdG9fbmVzcXAoaWJxcCk7Ci0JLyogc3RydWN0IG5lc192bmljICpuZXN2bmljID0gdG9fbmVzdm5pYyhpYnFwLT5kZXZpY2UpOyAqLwogCXN0cnVjdCBuZXNfdWNvbnRleHQgKm5lc191Y29udGV4dDsKIAlzdHJ1Y3QgaWJfcXBfYXR0ciBhdHRyOwogCXN0cnVjdCBpd19jbV9pZCAqY21faWQ7CkBAIC0xNTQ4LDcgKzE1OTgsNiBAQAogCQkJbmVzX2RlYnVnKE5FU19EQkdfUVAsICJPRkEgQ00gZXZlbnRfaGFuZGxlciByZXR1cm5lZCwgcmV0PSVkXG4iLCByZXQpOwogCX0KIAotCiAJaWYgKG5lc3FwLT51c2VyX21vZGUpIHsKIAkJaWYgKChpYnFwLT51b2JqZWN0KSYmKGlicXAtPnVvYmplY3QtPmNvbnRleHQpKSB7CiAJCQluZXNfdWNvbnRleHQgPSB0b19uZXN1Y29udGV4dChpYnFwLT51b2JqZWN0LT5jb250ZXh0KTsKQEAgLTE1NjAsNiArMTYwOSwxMyBAQAogCQl9CiAJCWlmIChuZXNxcC0+cGJsX3BiYXNlKQogCQkJa3VubWFwKG5lc3FwLT5wYWdlKTsKKwl9IGVsc2UgeworCQkvKiBDbGVhbiBhbnkgcGVuZGluZyBjb21wbGV0aW9ucyBmcm9tIHRoZSBjcShzKSAqLworCQlpZiAobmVzcXAtPm5lc3NjcSkKKwkJCW5lc19jbGVhbl9jcShuZXNxcCwgbmVzcXAtPm5lc3NjcSk7CisKKwkJaWYgKChuZXNxcC0+bmVzcmNxKSAmJiAobmVzcXAtPm5lc3JjcSAhPSBuZXNxcC0+bmVzc2NxKSkKKwkJCW5lc19jbGVhbl9jcShuZXNxcCwgbmVzcXAtPm5lc3JjcSk7CiAJfQogCiAJbmVzX3JlbV9yZWYoJm5lc3FwLT5pYnFwKTsKQEAgLTI4ODQsNyArMjk0MCw3IEBACiAgKiBuZXNfaHdfbW9kaWZ5X3FwCiAgKi8KIGludCBuZXNfaHdfbW9kaWZ5X3FwKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsIHN0cnVjdCBuZXNfcXAgKm5lc3FwLAotCQl1MzIgbmV4dF9pd2FycF9zdGF0ZSwgdTMyIHdhaXRfY29tcGxldGlvbikKKwkJdTMyIG5leHRfaXdhcnBfc3RhdGUsIHUzMiB0ZXJtbGVuLCB1MzIgd2FpdF9jb21wbGV0aW9uKQogewogCXN0cnVjdCBuZXNfaHdfY3FwX3dxZSAqY3FwX3dxZTsKIAkvKiBzdHJ1Y3QgaXdfY21faWQgKmNtX2lkID0gbmVzcXAtPmNtX2lkOyAqLwpAQCAtMjkxNiw2ICsyOTcyLDEzIEBACiAJc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfV1FFX0lEX0lEWCwgbmVzcXAtPmh3cXAucXBfaWQpOwogCXNldF93cWVfNjRiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1FQX1dRRV9DT05URVhUX0xPV19JRFgsICh1NjQpbmVzcXAtPm5lc3FwX2NvbnRleHRfcGJhc2UpOwogCisJLyogSWYgc2VuZGluZyBhIHRlcm1pbmF0ZSBtZXNzYWdlLCBmaWxsIGluIHRoZSBsZW5ndGggKGluIHdvcmRzKSAqLworCWlmICgoKG5leHRfaXdhcnBfc3RhdGUgJiBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX01BU0spID09IE5FU19DUVBfUVBfSVdBUlBfU1RBVEVfVEVSTUlOQVRFKSAmJgorCSAgICAhKG5leHRfaXdhcnBfc3RhdGUgJiBORVNfQ1FQX1FQX1RFUk1fRE9OVF9TRU5EX1RFUk1fTVNHKSkgeworCQl0ZXJtbGVuID0gKCh0ZXJtbGVuICsgMykgPj4gMikgPDwgTkVTX0NRUF9PUF9URVJNTEVOX1NISUZUOworCQlzZXRfd3FlXzMyYml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9RUF9XUUVfTkVXX01TU19JRFgsIHRlcm1sZW4pOworCX0KKwogCWF0b21pY19zZXQoJmNxcF9yZXF1ZXN0LT5yZWZjb3VudCwgMik7CiAJbmVzX3Bvc3RfY3FwX3JlcXVlc3QobmVzZGV2LCBjcXBfcmVxdWVzdCk7CiAKQEAgLTMwODYsNiArMzE0OSw5IEBACiAJCQkJfQogCQkJCW5lc19kZWJ1ZyhORVNfREJHX01PRF9RUCwgIlFQJXU6IG5ldyBzdGF0ZSA9IGVycm9yXG4iLAogCQkJCQkJbmVzcXAtPmh3cXAucXBfaWQpOworCQkJCWlmIChuZXNxcC0+dGVybV9mbGFncykKKwkJCQkJZGVsX3RpbWVyKCZuZXNxcC0+dGVybWluYXRlX3RpbWVyKTsKKwogCQkJCW5leHRfaXdhcnBfc3RhdGUgPSBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX0VSUk9SOwogCQkJCS8qIG5leHRfaXdhcnBfc3RhdGUgPSAoTkVTX0NRUF9RUF9JV0FSUF9TVEFURV9URVJNSU5BVEUgfCAweDAyMDAwMDAwKTsgKi8KIAkJCQkJaWYgKG5lc3FwLT5odGVfYWRkZWQpIHsKQEAgLTMxNjMsNyArMzIyOSw3IEBACiAKIAlpZiAoaXNzdWVfbW9kaWZ5X3FwKSB7CiAJCW5lc19kZWJ1ZyhORVNfREJHX01PRF9RUCwgImNhbGwgbmVzX2h3X21vZGlmeV9xcFxuIik7Ci0JCXJldCA9IG5lc19od19tb2RpZnlfcXAobmVzZGV2LCBuZXNxcCwgbmV4dF9pd2FycF9zdGF0ZSwgMSk7CisJCXJldCA9IG5lc19od19tb2RpZnlfcXAobmVzZGV2LCBuZXNxcCwgbmV4dF9pd2FycF9zdGF0ZSwgMCwgMSk7CiAJCWlmIChyZXQpCiAJCQluZXNfZGVidWcoTkVTX0RCR19NT0RfUVAsICJuZXNfaHdfbW9kaWZ5X3FwIChuZXh0X2l3YXJwX3N0YXRlID0gMHglMDhYKSIKIAkJCQkJIiBmYWlsZWQgZm9yIFFQJXUuXG4iLApAQCAtMzMyOCw2ICszMzk0LDEyIEBACiAJaGVhZCA9IG5lc3FwLT5od3FwLnNxX2hlYWQ7CiAKIAl3aGlsZSAoaWJfd3IpIHsKKwkJLyogQ2hlY2sgZm9yIFFQIGVycm9yICovCisJCWlmIChuZXNxcC0+dGVybV9mbGFncykgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKIAkJLyogQ2hlY2sgZm9yIFNRIG92ZXJmbG93ICovCiAJCWlmICgoKGhlYWQgKyAoMiAqIHFzaXplKSAtIG5lc3FwLT5od3FwLnNxX3RhaWwpICUgcXNpemUpID09IChxc2l6ZSAtIDEpKSB7CiAJCQllcnIgPSAtRUlOVkFMOwpAQCAtMzQ4NCw2ICszNTU2LDEyIEBACiAJaGVhZCA9IG5lc3FwLT5od3FwLnJxX2hlYWQ7CiAKIAl3aGlsZSAoaWJfd3IpIHsKKwkJLyogQ2hlY2sgZm9yIFFQIGVycm9yICovCisJCWlmIChuZXNxcC0+dGVybV9mbGFncykgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKIAkJaWYgKGliX3dyLT5udW1fc2dlID4gbmVzZGV2LT5uZXNhZGFwdGVyLT5tYXhfc2dlKSB7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJYnJlYWs7CkBAIC0zNTQ3LDcgKzM2MjUsNiBAQAogewogCXU2NCB1NjR0ZW1wOwogCXU2NCB3cmlkOwotCS8qIHU2NCB1NjR0ZW1wOyAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYyA9IHRvX25lc3ZuaWMoaWJjcS0+ZGV2aWNlKTsKIAlzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2ID0gbmVzdm5pYy0+bmVzZGV2OwpAQCAtMzU1NSwxMiArMzYzMiwxMyBAQAogCXN0cnVjdCBuZXNfcXAgKm5lc3FwOwogCXN0cnVjdCBuZXNfaHdfY3FlIGNxZTsKIAl1MzIgaGVhZDsKLQl1MzIgd3FfdGFpbDsKKwl1MzIgd3FfdGFpbCA9IDA7CiAJdTMyIGNxX3NpemU7CiAJdTMyIGNxZV9jb3VudCA9IDA7CiAJdTMyIHdxZV9pbmRleDsKIAl1MzIgdTMydGVtcDsKLQkvKiB1MzIgY291bnRlcjsgKi8KKwl1MzIgbW92ZV9jcV9oZWFkID0gMTsKKwl1MzIgZXJyX2NvZGU7CiAKIAluZXNfZGVidWcoTkVTX0RCR19DUSwgIlxuIik7CiAKQEAgLTM1NzAsMjkgKzM2NDgsNDAgQEAKIAljcV9zaXplID0gbmVzY3EtPmh3X2NxLmNxX3NpemU7CiAKIAl3aGlsZSAoY3FlX2NvdW50IDwgbnVtX2VudHJpZXMpIHsKLQkJaWYgKGxlMzJfdG9fY3B1KG5lc2NxLT5od19jcS5jcV92YmFzZVtoZWFkXS5jcWVfd29yZHNbTkVTX0NRRV9PUENPREVfSURYXSkgJgotCQkJCU5FU19DUUVfVkFMSUQpIHsKLQkJCS8qCi0JCQkgKiBNYWtlIHN1cmUgd2UgcmVhZCBDUSBlbnRyeSBjb250ZW50cyAqYWZ0ZXIqCi0JCQkgKiB3ZSd2ZSBjaGVja2VkIHRoZSB2YWxpZCBiaXQuCi0JCQkgKi8KLQkJCXJtYigpOworCQlpZiAoKGxlMzJfdG9fY3B1KG5lc2NxLT5od19jcS5jcV92YmFzZVtoZWFkXS5jcWVfd29yZHNbTkVTX0NRRV9PUENPREVfSURYXSkgJgorCQkJCU5FU19DUUVfVkFMSUQpID09IDApCisJCQlicmVhazsKIAotCQkJY3FlID0gbmVzY3EtPmh3X2NxLmNxX3ZiYXNlW2hlYWRdOwotCQkJbmVzY3EtPmh3X2NxLmNxX3ZiYXNlW2hlYWRdLmNxZV93b3Jkc1tORVNfQ1FFX09QQ09ERV9JRFhdID0gMDsKLQkJCXUzMnRlbXAgPSBsZTMyX3RvX2NwdShjcWUuY3FlX3dvcmRzW05FU19DUUVfQ09NUF9DT01QX0NUWF9MT1dfSURYXSk7Ci0JCQl3cWVfaW5kZXggPSB1MzJ0ZW1wICYKLQkJCQkJKG5lc2Rldi0+bmVzYWRhcHRlci0+bWF4X3FwX3dyIC0gMSk7Ci0JCQl1MzJ0ZW1wICY9IH4oTkVTX1NXX0NPTlRFWFRfQUxJR04tMSk7Ci0JCQkvKiBwYXJzZSBDUUUsIGdldCBjb21wbGV0aW9uIGNvbnRleHQgZnJvbSBXUUUgKGVpdGhlciBycSBvciBzcSAqLwotCQkJdTY0dGVtcCA9ICgoKHU2NCkobGUzMl90b19jcHUoY3FlLmNxZV93b3Jkc1tORVNfQ1FFX0NPTVBfQ09NUF9DVFhfSElHSF9JRFhdKSkpPDwzMikgfAotCQkJCQkoKHU2NCl1MzJ0ZW1wKTsKLQkJCW5lc3FwID0gKigoc3RydWN0IG5lc19xcCAqKikmdTY0dGVtcCk7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB3ZSByZWFkIENRIGVudHJ5IGNvbnRlbnRzICphZnRlcioKKwkJICogd2UndmUgY2hlY2tlZCB0aGUgdmFsaWQgYml0LgorCQkgKi8KKwkJcm1iKCk7CisKKwkJY3FlID0gbmVzY3EtPmh3X2NxLmNxX3ZiYXNlW2hlYWRdOworCQl1MzJ0ZW1wID0gbGUzMl90b19jcHUoY3FlLmNxZV93b3Jkc1tORVNfQ1FFX0NPTVBfQ09NUF9DVFhfTE9XX0lEWF0pOworCQl3cWVfaW5kZXggPSB1MzJ0ZW1wICYgKG5lc2Rldi0+bmVzYWRhcHRlci0+bWF4X3FwX3dyIC0gMSk7CisJCXUzMnRlbXAgJj0gfihORVNfU1dfQ09OVEVYVF9BTElHTi0xKTsKKwkJLyogcGFyc2UgQ1FFLCBnZXQgY29tcGxldGlvbiBjb250ZXh0IGZyb20gV1FFIChlaXRoZXIgcnEgb3Igc3EpICovCisJCXU2NHRlbXAgPSAoKCh1NjQpKGxlMzJfdG9fY3B1KGNxZS5jcWVfd29yZHNbTkVTX0NRRV9DT01QX0NPTVBfQ1RYX0hJR0hfSURYXSkpKTw8MzIpIHwKKwkJCQkoKHU2NCl1MzJ0ZW1wKTsKKworCQlpZiAodTY0dGVtcCkgeworCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKXU2NHRlbXA7CiAJCQltZW1zZXQoZW50cnksIDAsIHNpemVvZiAqZW50cnkpOwogCQkJaWYgKGNxZS5jcWVfd29yZHNbTkVTX0NRRV9FUlJPUl9DT0RFX0lEWF0gPT0gMCkgewogCQkJCWVudHJ5LT5zdGF0dXMgPSBJQl9XQ19TVUNDRVNTOwogCQkJfSBlbHNlIHsKLQkJCQllbnRyeS0+c3RhdHVzID0gSUJfV0NfV1JfRkxVU0hfRVJSOworCQkJCWVycl9jb2RlID0gbGUzMl90b19jcHUoY3FlLmNxZV93b3Jkc1tORVNfQ1FFX0VSUk9SX0NPREVfSURYXSk7CisJCQkJaWYgKE5FU19JV0FSUF9DUUVfTUFKT1JfRFJWID09IChlcnJfY29kZSA+PiAxNikpIHsKKwkJCQkJZW50cnktPnN0YXR1cyA9IGVycl9jb2RlICYgMHgwMDAwZmZmZjsKKworCQkJCQkvKiBUaGUgcmVzdCBvZiB0aGUgY3FlJ3Mgd2lsbCBiZSBtYXJrZWQgYXMgZmx1c2hlZCAqLworCQkJCQluZXNjcS0+aHdfY3EuY3FfdmJhc2VbaGVhZF0uY3FlX3dvcmRzW05FU19DUUVfRVJST1JfQ09ERV9JRFhdID0KKwkJCQkJCWNwdV90b19sZTMyKChORVNfSVdBUlBfQ1FFX01BSk9SX0ZMVVNIIDw8IDE2KSB8CisJCQkJCQkJICAgIE5FU19JV0FSUF9DUUVfTUlOT1JfRkxVU0gpOworCQkJCX0gZWxzZQorCQkJCQllbnRyeS0+c3RhdHVzID0gSUJfV0NfV1JfRkxVU0hfRVJSOwogCQkJfQogCiAJCQllbnRyeS0+cXAgPSAmbmVzcXAtPmlicXA7CkBAIC0zNjAxLDIwICszNjkwLDE4IEBACiAJCQlpZiAobGUzMl90b19jcHUoY3FlLmNxZV93b3Jkc1tORVNfQ1FFX09QQ09ERV9JRFhdKSAmIE5FU19DUUVfU1EpIHsKIAkJCQlpZiAobmVzcXAtPnNraXBfbHNtbSkgewogCQkJCQluZXNxcC0+c2tpcF9sc21tID0gMDsKLQkJCQkJd3FfdGFpbCA9IG5lc3FwLT5od3FwLnNxX3RhaWwrKzsKKwkJCQkJbmVzcXAtPmh3cXAuc3FfdGFpbCsrOwogCQkJCX0KIAogCQkJCS8qIFdvcmtpbmcgb24gYSBTUSBDb21wbGV0aW9uKi8KLQkJCQl3cV90YWlsID0gd3FlX2luZGV4OwotCQkJCW5lc3FwLT5od3FwLnNxX3RhaWwgPSAod3FlX2luZGV4KzEpJihuZXNxcC0+aHdxcC5zcV9zaXplIC0gMSk7Ci0JCQkJd3JpZCA9ICgoKHU2NCkoY3B1X3RvX2xlMzIoKHUzMiluZXNxcC0+aHdxcC5zcV92YmFzZVt3cV90YWlsXS4KKwkJCQl3cmlkID0gKCgodTY0KShjcHVfdG9fbGUzMigodTMyKW5lc3FwLT5od3FwLnNxX3ZiYXNlW3dxZV9pbmRleF0uCiAJCQkJCQl3cWVfd29yZHNbTkVTX0lXQVJQX1NRX1dRRV9DT01QX1NDUkFUQ0hfSElHSF9JRFhdKSkpIDw8IDMyKSB8Ci0JCQkJCQkoKHU2NCkoY3B1X3RvX2xlMzIoKHUzMiluZXNxcC0+aHdxcC5zcV92YmFzZVt3cV90YWlsXS4KKwkJCQkJCSgodTY0KShjcHVfdG9fbGUzMigodTMyKW5lc3FwLT5od3FwLnNxX3ZiYXNlW3dxZV9pbmRleF0uCiAJCQkJCQl3cWVfd29yZHNbTkVTX0lXQVJQX1NRX1dRRV9DT01QX1NDUkFUQ0hfTE9XX0lEWF0pKSk7Ci0JCQkJZW50cnktPmJ5dGVfbGVuID0gbGUzMl90b19jcHUobmVzcXAtPmh3cXAuc3FfdmJhc2Vbd3FfdGFpbF0uCisJCQkJZW50cnktPmJ5dGVfbGVuID0gbGUzMl90b19jcHUobmVzcXAtPmh3cXAuc3FfdmJhc2Vbd3FlX2luZGV4XS4KIAkJCQkJCXdxZV93b3Jkc1tORVNfSVdBUlBfU1FfV1FFX1RPVEFMX1BBWUxPQURfSURYXSk7CiAKLQkJCQlzd2l0Y2ggKGxlMzJfdG9fY3B1KG5lc3FwLT5od3FwLnNxX3ZiYXNlW3dxX3RhaWxdLgorCQkJCXN3aXRjaCAobGUzMl90b19jcHUobmVzcXAtPmh3cXAuc3FfdmJhc2Vbd3FlX2luZGV4XS4KIAkJCQkJCXdxZV93b3Jkc1tORVNfSVdBUlBfU1FfV1FFX01JU0NfSURYXSkgJiAweDNmKSB7CiAJCQkJCWNhc2UgTkVTX0lXQVJQX1NRX09QX1JETUFXOgogCQkJCQkJbmVzX2RlYnVnKE5FU19EQkdfQ1EsICJPcGVyYXRpb24gPSBSRE1BIFdSSVRFLlxuIik7CkBAIC0zNjIzLDcgKzM3MTAsNyBAQAogCQkJCQljYXNlIE5FU19JV0FSUF9TUV9PUF9SRE1BUjoKIAkJCQkJCW5lc19kZWJ1ZyhORVNfREJHX0NRLCAiT3BlcmF0aW9uID0gUkRNQSBSRUFELlxuIik7CiAJCQkJCQllbnRyeS0+b3Bjb2RlID0gSUJfV0NfUkRNQV9SRUFEOwotCQkJCQkJZW50cnktPmJ5dGVfbGVuID0gbGUzMl90b19jcHUobmVzcXAtPmh3cXAuc3FfdmJhc2Vbd3FfdGFpbF0uCisJCQkJCQllbnRyeS0+Ynl0ZV9sZW4gPSBsZTMyX3RvX2NwdShuZXNxcC0+aHdxcC5zcV92YmFzZVt3cWVfaW5kZXhdLgogCQkJCQkJCQl3cWVfd29yZHNbTkVTX0lXQVJQX1NRX1dRRV9SRE1BX0xFTkdUSF9JRFhdKTsKIAkJCQkJCWJyZWFrOwogCQkJCQljYXNlIE5FU19JV0FSUF9TUV9PUF9TRU5ESU5WOgpAQCAtMzYzNCwzMyArMzcyMSw1NCBAQAogCQkJCQkJZW50cnktPm9wY29kZSA9IElCX1dDX1NFTkQ7CiAJCQkJCQlicmVhazsKIAkJCQl9CisKKwkJCQluZXNxcC0+aHdxcC5zcV90YWlsID0gKHdxZV9pbmRleCsxKSYobmVzcXAtPmh3cXAuc3Ffc2l6ZSAtIDEpOworCQkJCWlmICgoZW50cnktPnN0YXR1cyAhPSBJQl9XQ19TVUNDRVNTKSAmJiAobmVzcXAtPmh3cXAuc3FfdGFpbCAhPSBuZXNxcC0+aHdxcC5zcV9oZWFkKSkgeworCQkJCQltb3ZlX2NxX2hlYWQgPSAwOworCQkJCQl3cV90YWlsID0gbmVzcXAtPmh3cXAuc3FfdGFpbDsKKwkJCQl9CiAJCQl9IGVsc2UgewogCQkJCS8qIFdvcmtpbmcgb24gYSBSUSBDb21wbGV0aW9uKi8KLQkJCQl3cV90YWlsID0gd3FlX2luZGV4OwotCQkJCQluZXNxcC0+aHdxcC5ycV90YWlsID0gKHdxZV9pbmRleCsxKSYobmVzcXAtPmh3cXAucnFfc2l6ZSAtIDEpOwogCQkJCWVudHJ5LT5ieXRlX2xlbiA9IGxlMzJfdG9fY3B1KGNxZS5jcWVfd29yZHNbTkVTX0NRRV9QQVlMT0FEX0xFTkdUSF9JRFhdKTsKLQkJCQl3cmlkID0gKCh1NjQpKGxlMzJfdG9fY3B1KG5lc3FwLT5od3FwLnJxX3ZiYXNlW3dxX3RhaWxdLndxZV93b3Jkc1tORVNfSVdBUlBfUlFfV1FFX0NPTVBfU0NSQVRDSF9MT1dfSURYXSkpKSB8Ci0JCQkJCSgodTY0KShsZTMyX3RvX2NwdShuZXNxcC0+aHdxcC5ycV92YmFzZVt3cV90YWlsXS53cWVfd29yZHNbTkVTX0lXQVJQX1JRX1dRRV9DT01QX1NDUkFUQ0hfSElHSF9JRFhdKSk8PDMyKTsKKwkJCQl3cmlkID0gKCh1NjQpKGxlMzJfdG9fY3B1KG5lc3FwLT5od3FwLnJxX3ZiYXNlW3dxZV9pbmRleF0ud3FlX3dvcmRzW05FU19JV0FSUF9SUV9XUUVfQ09NUF9TQ1JBVENIX0xPV19JRFhdKSkpIHwKKwkJCQkJKCh1NjQpKGxlMzJfdG9fY3B1KG5lc3FwLT5od3FwLnJxX3ZiYXNlW3dxZV9pbmRleF0ud3FlX3dvcmRzW05FU19JV0FSUF9SUV9XUUVfQ09NUF9TQ1JBVENIX0hJR0hfSURYXSkpPDwzMik7CiAJCQkJCWVudHJ5LT5vcGNvZGUgPSBJQl9XQ19SRUNWOwotCQkJfQotCQkJZW50cnktPndyX2lkID0gd3JpZDsKIAorCQkJCW5lc3FwLT5od3FwLnJxX3RhaWwgPSAod3FlX2luZGV4KzEpJihuZXNxcC0+aHdxcC5ycV9zaXplIC0gMSk7CisJCQkJaWYgKChlbnRyeS0+c3RhdHVzICE9IElCX1dDX1NVQ0NFU1MpICYmIChuZXNxcC0+aHdxcC5ycV90YWlsICE9IG5lc3FwLT5od3FwLnJxX2hlYWQpKSB7CisJCQkJCW1vdmVfY3FfaGVhZCA9IDA7CisJCQkJCXdxX3RhaWwgPSBuZXNxcC0+aHdxcC5ycV90YWlsOworCQkJCX0KKwkJCX0KKworCQkJZW50cnktPndyX2lkID0gd3JpZDsKKwkJCWVudHJ5Kys7CisJCQljcWVfY291bnQrKzsKKwkJfQorCisJCWlmIChtb3ZlX2NxX2hlYWQpIHsKKwkJCW5lc2NxLT5od19jcS5jcV92YmFzZVtoZWFkXS5jcWVfd29yZHNbTkVTX0NRRV9PUENPREVfSURYXSA9IDA7CiAJCQlpZiAoKytoZWFkID49IGNxX3NpemUpCiAJCQkJaGVhZCA9IDA7Ci0JCQljcWVfY291bnQrKzsKIAkJCW5lc2NxLT5wb2xsZWRfY29tcGxldGlvbnMrKzsKKwogCQkJaWYgKChuZXNjcS0+cG9sbGVkX2NvbXBsZXRpb25zID4gKGNxX3NpemUgLyAyKSkgfHwKIAkJCQkJKG5lc2NxLT5wb2xsZWRfY29tcGxldGlvbnMgPT0gMjU1KSkgewogCQkJCW5lc19kZWJ1ZyhORVNfREJHX0NRLCAiQ1EldSBJc3N1aW5nIENRRSBBbGxvY2F0ZSBzaW5jZSBtb3JlIHRoYW4gaGFsZiBvZiBjcWVzIgotCQkJCQkJIiBhcmUgcGVuZGluZyAldSBvZiAldS5cbiIsCi0JCQkJCQluZXNjcS0+aHdfY3EuY3FfbnVtYmVyLCBuZXNjcS0+cG9sbGVkX2NvbXBsZXRpb25zLCBjcV9zaXplKTsKKwkJCQkJIiBhcmUgcGVuZGluZyAldSBvZiAldS5cbiIsCisJCQkJCW5lc2NxLT5od19jcS5jcV9udW1iZXIsIG5lc2NxLT5wb2xsZWRfY29tcGxldGlvbnMsIGNxX3NpemUpOwogCQkJCW5lc193cml0ZTMyKG5lc2Rldi0+cmVncytORVNfQ1FFX0FMTE9DLAotCQkJCQkJbmVzY3EtPmh3X2NxLmNxX251bWJlciB8IChuZXNjcS0+cG9sbGVkX2NvbXBsZXRpb25zIDw8IDE2KSk7CisJCQkJCW5lc2NxLT5od19jcS5jcV9udW1iZXIgfCAobmVzY3EtPnBvbGxlZF9jb21wbGV0aW9ucyA8PCAxNikpOwogCQkJCW5lc2NxLT5wb2xsZWRfY29tcGxldGlvbnMgPSAwOwogCQkJfQotCQkJZW50cnkrKzsKLQkJfSBlbHNlCi0JCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCS8qIFVwZGF0ZSB0aGUgd3FlIGluZGV4IGFuZCBzZXQgc3RhdHVzIHRvIGZsdXNoICovCisJCQl3cWVfaW5kZXggPSBsZTMyX3RvX2NwdShjcWUuY3FlX3dvcmRzW05FU19DUUVfQ09NUF9DT01QX0NUWF9MT1dfSURYXSk7CisJCQl3cWVfaW5kZXggPSAod3FlX2luZGV4ICYgKH4obmVzZGV2LT5uZXNhZGFwdGVyLT5tYXhfcXBfd3IgLSAxKSkpIHwgd3FfdGFpbDsKKwkJCW5lc2NxLT5od19jcS5jcV92YmFzZVtoZWFkXS5jcWVfd29yZHNbTkVTX0NRRV9DT01QX0NPTVBfQ1RYX0xPV19JRFhdID0KKwkJCQljcHVfdG9fbGUzMih3cWVfaW5kZXgpOworCQkJbW92ZV9jcV9oZWFkID0gMTsgLyogcmVhZHkgZm9yIG5leHQgcGFzcyAqLworCQl9CiAJfQogCiAJaWYgKG5lc2NxLT5wb2xsZWRfY29tcGxldGlvbnMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5oCmluZGV4IDQxYzA3ZjIuLjg5ODIyZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuaApAQCAtNDAsNiArNDAsMTAgQEAKICNkZWZpbmUgTkVTX01BWF9VU0VSX0RCX1JFR0lPTlMgIDQwOTYKICNkZWZpbmUgTkVTX01BWF9VU0VSX1dRX1JFR0lPTlMgIDQwOTYKIAorI2RlZmluZSBORVNfVEVSTV9TRU5UICAgICAgICAgICAgMHgwMQorI2RlZmluZSBORVNfVEVSTV9SQ1ZEICAgICAgICAgICAgMHgwMgorI2RlZmluZSBORVNfVEVSTV9ET05FICAgICAgICAgICAgMHgwNAorCiBzdHJ1Y3QgbmVzX3Vjb250ZXh0IHsKIAlzdHJ1Y3QgaWJfdWNvbnRleHQgaWJ1Y29udGV4dDsKIAlzdHJ1Y3QgbmVzX2RldmljZSAgKm5lc2RldjsKQEAgLTExOSw2ICsxMjMsMTEgQEAKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCitzdHJ1Y3QgZGlzY29ubl93b3JrIHsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgd29yazsKKwlzdHJ1Y3QgbmVzX3FwICAgICAgICAgKm5lc3FwOworfTsKKwogc3RydWN0IGl3X2NtX2lkOwogc3RydWN0IGlldGZfbXBhX2ZyYW1lOwogCkBAIC0xMjcsNyArMTM2LDYgQEAKIAl2b2lkICAgICAgICAgICAgICAgICAgKmFsbG9jYXRlZF9idWZmZXI7CiAJc3RydWN0IGl3X2NtX2lkICAgICAgICpjbV9pZDsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7Ci0Jc3RydWN0IHdvcmtfc3RydWN0ICAgIGRpc2Nvbm5fd29yazsKIAlzdHJ1Y3QgbmVzX2NxICAgICAgICAgKm5lc3NjcTsKIAlzdHJ1Y3QgbmVzX2NxICAgICAgICAgKm5lc3JjcTsKIAlzdHJ1Y3QgbmVzX3BkICAgICAgICAgKm5lc3BkOwpAQCAtMTU1LDkgKzE2MywxMyBAQAogCXZvaWQJICAgICAgICAgICAgICAqcGJsX3ZiYXNlOwogCWRtYV9hZGRyX3QgICAgICAgICAgICBwYmxfcGJhc2U7CiAJc3RydWN0IHBhZ2UgICAgICAgICAgICpwYWdlOworCXN0cnVjdCB0aW1lcl9saXN0ICAgICB0ZXJtaW5hdGVfdGltZXI7CisJZW51bSBpYl9ldmVudF90eXBlICAgIHRlcm1pbmF0ZV9ldmVudHR5cGU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgICAgIGtpY2tfd2FpdHE7CiAJdTE2ICAgICAgICAgICAgICAgICAgIGluX2Rpc2Nvbm5lY3Q7CiAJdTE2ICAgICAgICAgICAgICAgICAgIHByaXZhdGVfZGF0YV9sZW47CisJdTE2ICAgICAgICAgICAgICAgICAgIHRlcm1fc3FfZmx1c2hfY29kZTsKKwl1MTYgICAgICAgICAgICAgICAgICAgdGVybV9ycV9mbHVzaF9jb2RlOwogCXU4ICAgICAgICAgICAgICAgICAgICBhY3RpdmVfY29ubjsKIAl1OCAgICAgICAgICAgICAgICAgICAgc2tpcF9sc21tOwogCXU4ICAgICAgICAgICAgICAgICAgICB1c2VyX21vZGU7CkBAIC0xNjUsNyArMTc3LDcgQEAKIAl1OCAgICAgICAgICAgICAgICAgICAgaHdfaXdhcnBfc3RhdGU7CiAJdTggICAgICAgICAgICAgICAgICAgIGZsdXNoX2lzc3VlZDsKIAl1OCAgICAgICAgICAgICAgICAgICAgaHdfdGNwX3N0YXRlOwotCXU4ICAgICAgICAgICAgICAgICAgICBkaXNjb25uX3BlbmRpbmc7CisJdTggICAgICAgICAgICAgICAgICAgIHRlcm1fZmxhZ3M7CiAJdTggICAgICAgICAgICAgICAgICAgIGRlc3Ryb3llZDsKIH07CiAjZW5kaWYJCQkvKiBORVNfVkVSQlNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jCmluZGV4IDE4MWIxZjMuLjMwYmRmNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2NtLmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8cmRtYS9pYl9jbS5oPgotI2luY2x1ZGUgPHJkbWEvaWJfY2FjaGUuaD4KICNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KICNpbmNsdWRlIDxsaW51eC9pY21wdjYuaD4KQEAgLTY2Myw3ICs2NjIsNiBAQAogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJc2tiX3B1bGwoc2tiLCBJUE9JQl9FTkNBUF9MRU4pOwogCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkrK2Rldi0+c3RhdHMucnhfcGFja2V0czsKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKaW5kZXggZTdlNWFkZi4uOGM5MWQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAotI2luY2x1ZGUgPHJkbWEvaWJfY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogCkBAIC0yNzcsNyArMjc2LDYgQEAKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCXNrYl9wdWxsKHNrYiwgSVBPSUJfRU5DQVBfTEVOKTsKIAotCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJKytkZXYtPnN0YXRzLnJ4X3BhY2tldHM7CiAJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYwppbmRleCBlMzE5ZDkxLi4yYmY1MTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYwpAQCAtNjA0LDggKzYwNCwxMSBAQAogCQkJCQkgICBza2JfcXVldWVfbGVuKCZuZWlnaC0+cXVldWUpKTsKIAkJCQlnb3RvIGVycl9kcm9wOwogCQkJfQotCQl9IGVsc2UKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJCWlwb2liX3NlbmQoZGV2LCBza2IsIHBhdGgtPmFoLCBJUE9JQl9RUE4oc2tiX2RzdChza2IpLT5uZWlnaGJvdXItPmhhKSk7CisJCQlyZXR1cm47CisJCX0KIAl9IGVsc2UgewogCQluZWlnaC0+YWggID0gTlVMTDsKIApAQCAtNjg4LDcgKzY5MSw5IEBACiAJCWlwb2liX2RiZyhwcml2LCAiU2VuZCB1bmljYXN0IEFSUCB0byAlMDR4XG4iLAogCQkJICBiZTE2X3RvX2NwdShwYXRoLT5wYXRocmVjLmRsaWQpKTsKIAorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCWlwb2liX3NlbmQoZGV2LCBza2IsIHBhdGgtPmFoLCBJUE9JQl9RUE4ocGhkci0+aHdhZGRyKSk7CisJCXJldHVybjsKIAl9IGVsc2UgaWYgKChwYXRoLT5xdWVyeSB8fCAhcGF0aF9yZWNfc3RhcnQoZGV2LCBwYXRoKSkgJiYKIAkJICAgc2tiX3F1ZXVlX2xlbigmcGF0aC0+cXVldWUpIDwgSVBPSUJfTUFYX1BBVEhfUkVDX1FVRVVFKSB7CiAJCS8qIHB1dCBwc2V1ZG9oZWFkZXIgYmFjayBvbiBmb3IgbmV4dCB0aW1lICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCBhMGU5NzUzLi4yNTg3NGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTcyMCw3ICs3MjAsOSBAQAogCQkJfQogCQl9CiAKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlpcG9pYl9zZW5kKGRldiwgc2tiLCBtY2FzdC0+YWgsIElCX01VTFRJQ0FTVF9RUE4pOworCQlyZXR1cm47CiAJfQogCiB1bmxvY2s6CkBAIC03NTgsNiArNzYwLDIwIEBACiAJfQogfQogCitzdGF0aWMgaW50IGlwb2liX21jYXN0X2FkZHJfaXNfdmFsaWQoY29uc3QgdTggKmFkZHIsIHVuc2lnbmVkIGludCBhZGRybGVuLAorCQkJCSAgICAgY29uc3QgdTggKmJyb2FkY2FzdCkKK3sKKwlpZiAoYWRkcmxlbiAhPSBJTkZJTklCQU5EX0FMRU4pCisJCXJldHVybiAwOworCS8qIHJlc2VydmVkIFFQTiwgcHJlZml4LCBzY29wZSAqLworCWlmIChtZW1jbXAoYWRkciwgYnJvYWRjYXN0LCA2KSkKKwkJcmV0dXJuIDA7CisJLyogc2lnbmF0dXJlIGxvd2VyLCBwa2V5ICovCisJaWYgKG1lbWNtcChhZGRyICsgNywgYnJvYWRjYXN0ICsgNywgMykpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCiB2b2lkIGlwb2liX21jYXN0X3Jlc3RhcnRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0KQEAgLTc5MSw2ICs4MDcsMTEgQEAKIAlmb3IgKG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0OyBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKIAkJdW5pb24gaWJfZ2lkIG1naWQ7CiAKKwkJaWYgKCFpcG9pYl9tY2FzdF9hZGRyX2lzX3ZhbGlkKG1jbGlzdC0+ZG1pX2FkZHIsCisJCQkJCSAgICAgICBtY2xpc3QtPmRtaV9hZGRybGVuLAorCQkJCQkgICAgICAgZGV2LT5icm9hZGNhc3QpKQorCQkJY29udGludWU7CisKIAkJbWVtY3B5KG1naWQucmF3LCBtY2xpc3QtPmRtaV9hZGRyICsgNCwgc2l6ZW9mIG1naWQpOwogCiAJCW1jYXN0ID0gX19pcG9pYl9tY2FzdF9maW5kKGRldiwgJm1naWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKaW5kZXggOWExZDU1Yi4uOTAxYjI1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCkBAIC00NTIsNiArNDUyLDc2IEBACiAJCShqb3lkZXYtPmV4aXN0ID8gIDAgOiAoUE9MTEhVUCB8IFBPTExFUlIpKTsKIH0KIAorc3RhdGljIGludCBqb3lkZXZfaGFuZGxlX0pTSU9DU0FYTUFQKHN0cnVjdCBqb3lkZXYgKmpveWRldiwKKwkJCQkgICAgIHZvaWQgX191c2VyICphcmdwLCBzaXplX3QgbGVuKQoreworCV9fdTggKmFic3BhbTsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWxlbiA9IG1pbihsZW4sIHNpemVvZihqb3lkZXYtPmFic3BhbSkpOworCisJLyogVmFsaWRhdGUgdGhlIG1hcC4gKi8KKwlhYnNwYW0gPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhYnNwYW0pCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGFic3BhbSwgYXJncCwgbGVuKSkgeworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgam95ZGV2LT5uYWJzOyBpKyspIHsKKwkJaWYgKGFic3BhbVtpXSA+IEFCU19NQVgpIHsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCW1lbWNweShqb3lkZXYtPmFic3BhbSwgYWJzcGFtLCBsZW4pOworCisgb3V0OgorCWtmcmVlKGFic3BhbSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBqb3lkZXZfaGFuZGxlX0pTSU9DU0JUTk1BUChzdHJ1Y3Qgam95ZGV2ICpqb3lkZXYsCisJCQkJICAgICAgdm9pZCBfX3VzZXIgKmFyZ3AsIHNpemVfdCBsZW4pCit7CisJX191MTYgKmtleXBhbTsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWxlbiA9IG1pbihsZW4sIHNpemVvZihqb3lkZXYtPmtleXBhbSkpOworCisJLyogVmFsaWRhdGUgdGhlIG1hcC4gKi8KKwlrZXlwYW0gPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrZXlwYW0pCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGtleXBhbSwgYXJncCwgbGVuKSkgeworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgam95ZGV2LT5ua2V5OyBpKyspIHsKKwkJaWYgKGtleXBhbVtpXSA+IEtFWV9NQVggfHwga2V5cGFtW2ldIDwgQlROX01JU0MpIHsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCW1lbWNweShqb3lkZXYtPmtleXBhbSwga2V5cGFtLCBsZW4pOworCisJZm9yIChpID0gMDsgaSA8IGpveWRldi0+bmtleTsgaSsrKQorCQlqb3lkZXYtPmtleW1hcFtrZXlwYW1baV0gLSBCVE5fTUlTQ10gPSBpOworCisgb3V0OgorCWtmcmVlKGtleXBhbSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCiBzdGF0aWMgaW50IGpveWRldl9pb2N0bF9jb21tb24oc3RydWN0IGpveWRldiAqam95ZGV2LAogCQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmdwKQogewpAQCAtNTEyLDQ2ICs1ODIsMTggQEAKIAlzd2l0Y2ggKGNtZCAmIH5JT0NTSVpFX01BU0spIHsKIAogCWNhc2UgKEpTSU9DU0FYTUFQICYgfklPQ1NJWkVfTUFTSyk6Ci0JCWxlbiA9IG1pbl90KHNpemVfdCwgX0lPQ19TSVpFKGNtZCksIHNpemVvZihqb3lkZXYtPmFic3BhbSkpOwotCQkvKgotCQkgKiBGSVhNRTogd2Ugc2hvdWxkIG5vdCBjb3B5IGludG8gb3VyIGF4aXMgbWFwIGJlZm9yZQotCQkgKiB2YWxpZGF0aW5nIHRoZSBkYXRhLgotCQkgKi8KLQkJaWYgKGNvcHlfZnJvbV91c2VyKGpveWRldi0+YWJzcGFtLCBhcmdwLCBsZW4pKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGpveWRldi0+bmFiczsgaSsrKSB7Ci0JCQlpZiAoam95ZGV2LT5hYnNwYW1baV0gPiBBQlNfTUFYKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJam95ZGV2LT5hYnNtYXBbam95ZGV2LT5hYnNwYW1baV1dID0gaTsKLQkJfQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGpveWRldl9oYW5kbGVfSlNJT0NTQVhNQVAoam95ZGV2LCBhcmdwLCBfSU9DX1NJWkUoY21kKSk7CiAKIAljYXNlIChKU0lPQ0dBWE1BUCAmIH5JT0NTSVpFX01BU0spOgogCQlsZW4gPSBtaW5fdChzaXplX3QsIF9JT0NfU0laRShjbWQpLCBzaXplb2Yoam95ZGV2LT5hYnNwYW0pKTsKLQkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCBqb3lkZXYtPmFic3BhbSwgbGVuKSA/IC1FRkFVTFQgOiAwOworCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsIGpveWRldi0+YWJzcGFtLCBsZW4pID8gLUVGQVVMVCA6IGxlbjsKIAogCWNhc2UgKEpTSU9DU0JUTk1BUCAmIH5JT0NTSVpFX01BU0spOgotCQlsZW4gPSBtaW5fdChzaXplX3QsIF9JT0NfU0laRShjbWQpLCBzaXplb2Yoam95ZGV2LT5rZXlwYW0pKTsKLQkJLyoKLQkJICogRklYTUU6IHdlIHNob3VsZCBub3QgY29weSBpbnRvIG91ciBrZXltYXAgYmVmb3JlCi0JCSAqIHZhbGlkYXRpbmcgdGhlIGRhdGEuCi0JCSAqLwotCQlpZiAoY29weV9mcm9tX3VzZXIoam95ZGV2LT5rZXlwYW0sIGFyZ3AsIGxlbikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgam95ZGV2LT5ua2V5OyBpKyspIHsKLQkJCWlmIChqb3lkZXYtPmtleXBhbVtpXSA+IEtFWV9NQVggfHwKLQkJCSAgICBqb3lkZXYtPmtleXBhbVtpXSA8IEJUTl9NSVNDKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJam95ZGV2LT5rZXltYXBbam95ZGV2LT5rZXlwYW1baV0gLSBCVE5fTUlTQ10gPSBpOwotCQl9Ci0KLQkJcmV0dXJuIDA7CisJCXJldHVybiBqb3lkZXZfaGFuZGxlX0pTSU9DU0JUTk1BUChqb3lkZXYsIGFyZ3AsIF9JT0NfU0laRShjbWQpKTsKIAogCWNhc2UgKEpTSU9DR0JUTk1BUCAmIH5JT0NTSVpFX01BU0spOgogCQlsZW4gPSBtaW5fdChzaXplX3QsIF9JT0NfU0laRShjbWQpLCBzaXplb2Yoam95ZGV2LT5rZXlwYW0pKTsKLQkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCBqb3lkZXYtPmtleXBhbSwgbGVuKSA/IC1FRkFVTFQgOiAwOworCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsIGpveWRldi0+a2V5cGFtLCBsZW4pID8gLUVGQVVMVCA6IGxlbjsKIAogCWNhc2UgSlNJT0NHTkFNRSgwKToKIAkJbmFtZSA9IGRldi0+bmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKaW5kZXggZjE1NWFkOC4uMjM4OGNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKQEAgLTE0NCw2ICsxNDQsNyBAQAogCXsgMHgxNDMwLCAweDQ3NDgsICJSZWRPY3RhbmUgR3VpdGFyIEhlcm8gWC1wbG9yZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCiAJeyAweDE0MzAsIDB4ODg4OCwgIlRYNjUwMCsgRGFuY2UgUGFkIChmaXJzdCBnZW5lcmF0aW9uKSIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwKIAl7IDB4MDQ1ZSwgMHgwMjhlLCAiTWljcm9zb2Z0IFgtQm94IDM2MCBwYWQiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCisJeyAweDFiYWQsIDB4MDAwMywgIkhhcm1vbml4IFJvY2sgQmFuZCBEcnVta2l0IiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHhmZmZmLCAweGZmZmYsICJDaGluZXNlLW1hZGUgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LAogCXsgMHgwMDAwLCAweDAwMDAsICJHZW5lcmljIFgtQm94IHBhZCIsIE1BUF9EUEFEX1VOS05PV04sIFhUWVBFX1VOS05PV04gfQogfTsKQEAgLTIwOCw2ICsyMDksNyBAQAogCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgwNzM4KSwJCS8qIE1hZCBDYXR6IFgtQm94IDM2MCBjb250cm9sbGVycyAqLwogCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgwZTZmKSwJCS8qIDB4MGU2ZiBYLUJveCAzNjAgY29udHJvbGxlcnMgKi8KIAlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MTQzMCksCQkvKiBSZWRPY3RhbmUgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCisJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDFiYWQpLAkJLyogUm9jayBCYW5kIERydW1zICovCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKaW5kZXggYTZiOTg5YS4uMzUyNWMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJICBzdWJtZW51LgogCiBjb25maWcgS0VZQk9BUkRfSElMCi0JdHJpc3RhdGUgIkhQIEhJTCBrZXlib2FyZCBzdXBwb3J0IgorCXRyaXN0YXRlICJIUCBISUwga2V5Ym9hcmQvcG9pbnRlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gR1NDIHx8IEhQMzAwCiAJZGVmYXVsdCB5CiAJc2VsZWN0IEhQX1NEQwpAQCAtMTk2LDcgKzE5Niw4IEBACiAJaGVscAogCSAgVGhlICJIdW1hbiBJbnRlcmZhY2UgTG9vcCIgaXMgYSBvbGRlciwgOC1jaGFubmVsIFVTQi1saWtlCiAJICBjb250cm9sbGVyIHVzZWQgaW4gc2V2ZXJhbCBIZXdsZXR0IFBhY2thcmQgbW9kZWxzLgotCSAgVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBISUwta2V5Ym9hcmRzIGF0dGFjaGVkCisJICBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEhJTC1rZXlib2FyZHMgYW5kIHBvaW50aW5nCisJICBkZXZpY2VzIChtaWNlLCB0YWJsZXRzLCB0b3VjaHNjcmVlbnMpIGF0dGFjaGVkCiAJICB0byB5b3VyIG1hY2hpbmUsIHNvIG5vcm1hbGx5IHlvdSBzaG91bGQgc2F5IFkgaGVyZS4KIAogY29uZmlnIEtFWUJPQVJEX0hQNlhYCkBAIC0zMjksNiArMzMwLDE3IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvbWFwLWtleXBhZC4KIAorY29uZmlnIEtFWUJPQVJEX1RXTDQwMzAKKwl0cmlzdGF0ZSAiVEkgVFdMNDAzMC9UV0w1MDMwL1RQUzY1OXgwIGtleXBhZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVFdMNDAzMF9DT1JFCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3VyIGJvYXJkIHVzZSB0aGUga2V5cGFkIGNvbnRyb2xsZXIgb24KKwkgIFRXTDQwMzAgZmFtaWx5IGNoaXBzLiAgSXQncyBzYWZlIHRvIHNheSBlbmFibGUgdGhpcworCSAgZXZlbiBvbiBib2FyZHMgdGhhdCBkb24ndCB1c2UgdGhlIGtleXBhZCBjb250cm9sbGVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0d2w0MDMwX2tleXBhZC4KKwogY29uZmlnIEtFWUJPQVJEX1RPU0EKIAl0cmlzdGF0ZSAiVG9zYSBrZXlib2FyZCIKIAlkZXBlbmRzIG9uIE1BQ0hfVE9TQQpAQCAtMzYxLDQgKzM3MywxNCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgeHRrYmQuCiAKK2NvbmZpZyBLRVlCT0FSRF9XOTBQOTEwCisJdHJpc3RhdGUgIlc5MFA5MTAgTWF0cml4IEtleXBhZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9XOTBYOTAwCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIG1hdHJpeCBrZXlwYWQgb24gZXZhbHVhdGlvbiBib2FyZAorCSAgYmFzZWQgb24gVzkwUDkxMC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdzkwcDkxMF9rZXlwYWQuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQppbmRleCBiNWI1ZWFlLi44YTdhMjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKQEAgLTMwLDQgKzMwLDYgQEAKIG9iai0kKENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSkJCSs9IHN0b3dhd2F5Lm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9TVU5LQkQpCQkrPSBzdW5rYmQubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1RPU0EpCQkrPSB0b3Nha2JkLm8KK29iai0kKENPTkZJR19LRVlCT0FSRF9UV0w0MDMwKQkJKz0gdHdsNDAzMF9rZXlwYWQubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1hUS0JEKQkJKz0geHRrYmQubworb2JqLSQoQ09ORklHX0tFWUJPQVJEX1c5MFA5MTApCQkrPSB3OTBwOTEwX2tleXBhZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKaW5kZXggNmM2YTA5Yi4uYzk1MjNlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwpAQCAtNjgsNyArNjgsOSBAQAogICogYXJlIGxvYWRhYmxlIHZpYSBhIHVzZXJsYW5kIHV0aWxpdHkuCiAgKi8KIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGF0a2JkX3NldDJfa2V5Y29kZVs1MTJdID0geworI2RlZmluZSBBVEtCRF9LRVlNQVBfU0laRQk1MTIKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGF0a2JkX3NldDJfa2V5Y29kZVtBVEtCRF9LRVlNQVBfU0laRV0gPSB7CiAKICNpZmRlZiBDT05GSUdfS0VZQk9BUkRfQVRLQkRfSFBfS0VZQ09ERVMKIApAQCAtOTksNyArMTAxLDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGF0a2JkX3NldDNfa2V5Y29kZVs1MTJdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGF0a2JkX3NldDNfa2V5Y29kZVtBVEtCRF9LRVlNQVBfU0laRV0gPSB7CiAKIAkgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDU5LCAgMSwxMzgsMTI4LDEyOSwxMzAsIDE1LCA0MSwgNjAsCiAJMTMxLCAyOSwgNDIsIDg2LCA1OCwgMTYsICAyLCA2MSwxMzMsIDU2LCA0NCwgMzEsIDMwLCAxNywgIDMsIDYyLApAQCAtMjAwLDggKzIwMiw4IEBACiAJY2hhciBwaHlzWzMyXTsKIAogCXVuc2lnbmVkIHNob3J0IGlkOwotCXVuc2lnbmVkIHNob3J0IGtleWNvZGVbNTEyXTsKLQlERUNMQVJFX0JJVE1BUChmb3JjZV9yZWxlYXNlX21hc2ssIDUxMik7CisJdW5zaWduZWQgc2hvcnQga2V5Y29kZVtBVEtCRF9LRVlNQVBfU0laRV07CisJREVDTEFSRV9CSVRNQVAoZm9yY2VfcmVsZWFzZV9tYXNrLCBBVEtCRF9LRVlNQVBfU0laRSk7CiAJdW5zaWduZWQgY2hhciBzZXQ7CiAJdW5zaWduZWQgY2hhciB0cmFuc2xhdGVkOwogCXVuc2lnbmVkIGNoYXIgZXh0cmE7CkBAIC0yNTMsNiArMjU1LDcgQEAKIAlfX0FUVFIoX25hbWUsIFNfSVdVU1IgfCBTX0lSVUdPLCBhdGtiZF9kb19zaG93XyMjX25hbWUsIGF0a2JkX2RvX3NldF8jI19uYW1lKTsKIAogQVRLQkRfREVGSU5FX0FUVFIoZXh0cmEpOworQVRLQkRfREVGSU5FX0FUVFIoZm9yY2VfcmVsZWFzZSk7CiBBVEtCRF9ERUZJTkVfQVRUUihzY3JvbGwpOwogQVRLQkRfREVGSU5FX0FUVFIoc2V0KTsKIEFUS0JEX0RFRklORV9BVFRSKHNvZnRyZXBlYXQpOwpAQCAtMjcyLDYgKzI3NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphdGtiZF9hdHRyaWJ1dGVzW10gPSB7CiAJJmF0a2JkX2F0dHJfZXh0cmEuYXR0ciwKKwkmYXRrYmRfYXR0cl9mb3JjZV9yZWxlYXNlLmF0dHIsCiAJJmF0a2JkX2F0dHJfc2Nyb2xsLmF0dHIsCiAJJmF0a2JkX2F0dHJfc2V0LmF0dHIsCiAJJmF0a2JkX2F0dHJfc29mdHJlcGVhdC5hdHRyLApAQCAtOTM0LDcgKzkzOCw3IEBACiAJaW50IGksIGo7CiAKIAltZW1zZXQoYXRrYmQtPmtleWNvZGUsIDAsIHNpemVvZihhdGtiZC0+a2V5Y29kZSkpOwotCWJpdG1hcF96ZXJvKGF0a2JkLT5mb3JjZV9yZWxlYXNlX21hc2ssIDUxMik7CisJYml0bWFwX3plcm8oYXRrYmQtPmZvcmNlX3JlbGVhc2VfbWFzaywgQVRLQkRfS0VZTUFQX1NJWkUpOwogCiAJaWYgKGF0a2JkLT50cmFuc2xhdGVkKSB7CiAJCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgewpAQCAtMTA0MSw3ICsxMDQ1LDcgQEAKIAlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKIAlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKGF0a2JkX3NldDJfa2V5Y29kZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgNTEyOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEFUS0JEX0tFWU1BUF9TSVpFOyBpKyspCiAJCWlmIChhdGtiZC0+a2V5Y29kZVtpXSAmJiBhdGtiZC0+a2V5Y29kZVtpXSA8IEFUS0JEX1NQRUNJQUwpCiAJCQlfX3NldF9iaXQoYXRrYmQtPmtleWNvZGVbaV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKIH0KQEAgLTEzMDksNiArMTMxMywzMyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHNzaXplX3QgYXRrYmRfc2hvd19mb3JjZV9yZWxlYXNlKHN0cnVjdCBhdGtiZCAqYXRrYmQsIGNoYXIgKmJ1ZikKK3sKKwlzaXplX3QgbGVuID0gYml0bWFwX3Njbmxpc3RwcmludGYoYnVmLCBQQUdFX1NJWkUgLSAyLAorCQkJYXRrYmQtPmZvcmNlX3JlbGVhc2VfbWFzaywgQVRLQkRfS0VZTUFQX1NJWkUpOworCisJYnVmW2xlbisrXSA9ICdcbic7CisJYnVmW2xlbl0gPSAnXDAnOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgYXRrYmRfc2V0X2ZvcmNlX3JlbGVhc2Uoc3RydWN0IGF0a2JkICphdGtiZCwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJLyogNjQgYnl0ZXMgb24gc3RhY2sgc2hvdWxkIGJlIGFjY2VwdGFibGUgKi8KKwlERUNMQVJFX0JJVE1BUChuZXdfbWFzaywgQVRLQkRfS0VZTUFQX1NJWkUpOworCWludCBlcnI7CisKKwllcnIgPSBiaXRtYXBfcGFyc2VsaXN0KGJ1ZiwgbmV3X21hc2ssIEFUS0JEX0tFWU1BUF9TSVpFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbWVtY3B5KGF0a2JkLT5mb3JjZV9yZWxlYXNlX21hc2ssIG5ld19tYXNrLCBzaXplb2YoYXRrYmQtPmZvcmNlX3JlbGVhc2VfbWFzaykpOworCXJldHVybiBjb3VudDsKK30KKworCiBzdGF0aWMgc3NpemVfdCBhdGtiZF9zaG93X3Njcm9sbChzdHJ1Y3QgYXRrYmQgKmF0a2JkLCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGF0a2JkLT5zY3JvbGwgPyAxIDogMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2JmNTR4LWtleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYmY1NHgta2V5cy5jCmluZGV4IGQ0MjdmMzIuLmZlMzc2YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYmY1NHgta2V5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYmY1NHgta2V5cy5jCkBAIC0xODQsMTQgKzE4NCwxMyBAQAogCWludCBpLCBlcnJvcjsKIAogCWlmICghcGRhdGEtPnJvd3MgfHwgIXBkYXRhLT5jb2xzIHx8ICFwZGF0YS0+a2V5bWFwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkJIjogTm8gcm93cywgY29scyBvciBrZXltYXAgZnJvbSBwZGF0YVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHJvd3MsIGNvbHMgb3Iga2V5bWFwIGZyb20gcGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoIXBkYXRhLT5rZXltYXBzaXplIHx8CiAJICAgIHBkYXRhLT5rZXltYXBzaXplID4gKHBkYXRhLT5yb3dzICogcGRhdGEtPmNvbHMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBJbnZhbGlkIGtleW1hcHNpemVcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIGtleW1hcHNpemVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIxMSw4ICsyMTAsOCBAQAogCiAJaWYgKCFwZGF0YS0+ZGVib3VuY2VfdGltZSB8fCBwZGF0YS0+ZGVib3VuY2VfdGltZSA+IE1BWF9NVUxUIHx8CiAJICAgICFwZGF0YS0+Y29sZHJpdmVfdGltZSB8fCBwZGF0YS0+Y29sZHJpdmVfdGltZSA+IE1BWF9NVUxUKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJCSI6IEludmFsaWQgRGVib3VuY2UvQ29sdW1uZHJpdmUgVGltZSBpbiBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCSJpbnZhbGlkIHBsYXRmb3JtIGRlYm91bmNlL2NvbHVtbmRyaXZlIHRpbWVcbiIpOwogCQliZmluX3dyaXRlX0tQQURfTVNFTCgweEZGMCk7CS8qIERlZmF1bHQgTVNFTAkqLwogCX0gZWxzZSB7CiAJCWJmaW5fd3JpdGVfS1BBRF9NU0VMKApAQCAtMjMxLDE2ICsyMzAsMTQgQEAKIAogCWlmIChwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdCgodTE2ICopJnBlcl9yb3dzW01BWF9SQyAtIHBkYXRhLT5yb3dzXSwKIAkJCQkgICAgRFJWX05BTUUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkJIjogUmVxdWVzdGluZyBQZXJpcGhlcmFscyBmYWlsZWRcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0aW5nIHBlcmlwaGVyYWxzIGZhaWxlZFxuIik7CiAJCWVycm9yID0gLUVGQVVMVDsKIAkJZ290byBvdXQwOwogCX0KIAogCWlmIChwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdCgodTE2ICopJnBlcl9jb2xzW01BWF9SQyAtIHBkYXRhLT5jb2xzXSwKIAkJCQkgICAgRFJWX05BTUUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkJIjogUmVxdWVzdGluZyBQZXJpcGhlcmFscyBmYWlsZWRcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0aW5nIHBlcmlwaGVyYWxzIGZhaWxlZFxuIik7CiAJCWVycm9yID0gLUVGQVVMVDsKIAkJZ290byBvdXQxOwogCX0KQEAgLTI1NCw5ICsyNTEsOCBAQAogCWVycm9yID0gcmVxdWVzdF9pcnEoYmY1NHhfa3BhZC0+aXJxLCBiZmluX2twYWRfaXNyLAogCQkJCTAsIERSVl9OQU1FLCBwZGV2KTsKIAlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCQkiOiB1bmFibGUgdG8gY2xhaW0gaXJxICVkOyBlcnJvciAlZFxuIiwKLQkJCWJmNTR4X2twYWQtPmlycSwgZXJyb3IpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gY2xhaW0gaXJxICVkXG4iLAorCQkJYmY1NHhfa3BhZC0+aXJxKTsKIAkJZ290byBvdXQyOwogCX0KIApAQCAtMjk3LDggKzI5Myw3IEBACiAKIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dCk7CiAJaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkJIjogVW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZSAoJWQpXG4iLCBlcnJvcik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOwogCQlnb3RvIG91dDQ7CiAJfQogCkBAIC0zMTYsOSArMzExLDYgQEAKIAogCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKIAotCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkiOiBCbGFja2ZpbiBCRjU0eCBLZXlwYWQgcmVnaXN0ZXJlZCBJUlEgJWRcbiIsIGJmNTR4X2twYWQtPmlycSk7Ci0KIAlyZXR1cm4gMDsKIAogb3V0NDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCmluZGV4IGVmZWQwYzkuLmE4OGFmZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYwpAQCAtMjE2LDggKzIxNiw5IEBACiAKIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBncGlvX2tleXNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGdwaW9fa2V5c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCBpOwogCkBAIC0yMzQsOCArMjM1LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBncGlvX2tleXNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGdwaW9fa2V5c19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IGk7CiAKQEAgLTI1MSwxOSArMjUzLDIyIEBACiAKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIGdwaW9fa2V5c19zdXNwZW5kCU5VTEwKLSNkZWZpbmUgZ3Bpb19rZXlzX3Jlc3VtZQlOVUxMCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBncGlvX2tleXNfcG1fb3BzID0geworCS5zdXNwZW5kCT0gZ3Bpb19rZXlzX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBncGlvX2tleXNfcmVzdW1lLAorfTsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBncGlvX2tleXNfZGV2aWNlX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gZ3Bpb19rZXlzX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZ3Bpb19rZXlzX3JlbW92ZSksCi0JLnN1c3BlbmQJPSBncGlvX2tleXNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGdwaW9fa2V5c19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gImdwaW8ta2V5cyIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmZ3Bpb19rZXlzX3BtX29wcywKKyNlbmRpZgogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxfa2JkLmMKaW5kZXggNmYzNTY3MC4uYzgzZjRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxfa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxfa2JkLmMKQEAgLTM3LDE5ICszNywxOSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KIAotI2RlZmluZSBQUkVGSVggIkhJTCBLRVlCOiAiCi0jZGVmaW5lIEhJTF9HRU5FUklDX05BTUUgIkhJTCBrZXlib2FyZCIKKyNkZWZpbmUgUFJFRklYICJISUw6ICIKIAogTU9EVUxFX0FVVEhPUigiQnJpYW4gUy4gSnVsaW4gPGJyaUBjYWx5eC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oSElMX0dFTkVSSUNfTkFNRSAiIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJISUwga2V5Ym9hcmQvbW91c2UgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7Ci1NT0RVTEVfQUxJQVMoInNlcmlvOnR5MDNwcjI1aWQwMGV4KiIpOworTU9EVUxFX0FMSUFTKCJzZXJpbzp0eTAzcHIyNWlkMDBleCoiKTsgLyogSElMIGtleWJvYXJkICovCitNT0RVTEVfQUxJQVMoInNlcmlvOnR5MDNwcjI1aWQwRmV4KiIpOyAvKiBISUwgbW91c2UgKi8KIAotI2RlZmluZSBISUxfS0JEX01BWF9MRU5HVEggMTYKKyNkZWZpbmUgSElMX1BBQ0tFVF9NQVhfTEVOR1RIIDE2CiAKICNkZWZpbmUgSElMX0tCRF9TRVQxX1VQQklUIDB4MDEKICNkZWZpbmUgSElMX0tCRF9TRVQxX1NISUZUIDEKQEAgLTY3LDMwOCArNjcsNDk3IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyIGhpbF9sYW5ndWFnZVtdWzE2XSA9IHsgSElMX0xPQ0FMRV9NQVAgfTsKIAotc3RydWN0IGhpbF9rYmQgeworc3RydWN0IGhpbF9kZXYgewogCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKIAlzdHJ1Y3Qgc2VyaW8gKnNlcmlvOwogCiAJLyogSW5wdXQgYnVmZmVyIGFuZCBpbmRleCBmb3IgcGFja2V0cyBmcm9tIEhJTCBidXMuICovCi0JaGlsX3BhY2tldCBkYXRhW0hJTF9LQkRfTUFYX0xFTkdUSF07CisJaGlsX3BhY2tldCBkYXRhW0hJTF9QQUNLRVRfTUFYX0xFTkdUSF07CiAJaW50IGlkeDQ7IC8qIGZvdXIgY291bnRzIHBlciBwYWNrZXQgKi8KIAogCS8qIFJhdyBkZXZpY2UgaW5mbyByZWNvcmRzIGZyb20gSElMIGJ1cywgc2VlIGhpbC5oIGZvciBmaWVsZHMuICovCi0JY2hhcglpZGRbSElMX0tCRF9NQVhfTEVOR1RIXTsJLyogRElEIGJ5dGUgYW5kIElERCByZWNvcmQgKi8KLQljaGFyCXJzY1tISUxfS0JEX01BWF9MRU5HVEhdOwkvKiBSU0MgcmVjb3JkICovCi0JY2hhcglleGRbSElMX0tCRF9NQVhfTEVOR1RIXTsJLyogRVhEIHJlY29yZCAqLwotCWNoYXIJcm5tW0hJTF9LQkRfTUFYX0xFTkdUSCArIDFdOwkvKiBSTk0gcmVjb3JkICsgTlVMTCB0ZXJtLiAqLworCWNoYXIJaWRkW0hJTF9QQUNLRVRfTUFYX0xFTkdUSF07CS8qIERJRCBieXRlIGFuZCBJREQgcmVjb3JkICovCisJY2hhcglyc2NbSElMX1BBQ0tFVF9NQVhfTEVOR1RIXTsJLyogUlNDIHJlY29yZCAqLworCWNoYXIJZXhkW0hJTF9QQUNLRVRfTUFYX0xFTkdUSF07CS8qIEVYRCByZWNvcmQgKi8KKwljaGFyCXJubVtISUxfUEFDS0VUX01BWF9MRU5HVEggKyAxXTsJLyogUk5NIHJlY29yZCArIE5VTEwgdGVybS4gKi8KIAotCS8qIFNvbWV0aGluZyB0byBzbGVlcCBhcm91bmQgd2l0aC4gKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjbWRfZG9uZTsKKworCWJvb2wgaXNfcG9pbnRlcjsKKwkvKiBFeHRyYSBkZXZpY2UgZGV0YWlscyBuZWVkZWQgZm9yIHBvaW50aW5nIGRldmljZXMuICovCisJdW5zaWduZWQgaW50IG5idG4sIG5heGVzOworCXVuc2lnbmVkIGludCBidG5tYXBbN107CiB9OwogCi0vKiBQcm9jZXNzIGEgY29tcGxldGUgcGFja2V0IGFmdGVyIHRyYW5zZmVyIGZyb20gdGhlIEhJTCAqLwotc3RhdGljIHZvaWQgaGlsX2tiZF9wcm9jZXNzX3JlY29yZChzdHJ1Y3QgaGlsX2tiZCAqa2JkKQorc3RhdGljIGJvb2wgaGlsX2Rldl9pc19jb21tYW5kX3Jlc3BvbnNlKGhpbF9wYWNrZXQgcCkKIHsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBrYmQtPmRldjsKLQloaWxfcGFja2V0ICpkYXRhID0ga2JkLT5kYXRhOworCWlmICgocCAmIH5ISUxfQ01EQ1RfUE9MKSA9PSAoSElMX0VSUl9JTlQgfCBISUxfUEtUX0NNRCB8IEhJTF9DTURfUE9MKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKChwICYgfkhJTF9DTURDVF9SUEwpID09IChISUxfRVJSX0lOVCB8IEhJTF9QS1RfQ01EIHwgSElMX0NNRF9SUEwpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgaGlsX2Rldl9oYW5kbGVfY29tbWFuZF9yZXNwb25zZShzdHJ1Y3QgaGlsX2RldiAqZGV2KQorewogCWhpbF9wYWNrZXQgcDsKLQlpbnQgaWR4LCBpLCBjbnQ7CisJY2hhciAqYnVmOworCWludCBpLCBpZHg7CiAKLQlpZHggPSBrYmQtPmlkeDQvNDsKLQlwID0gZGF0YVtpZHggLSAxXTsKKwlpZHggPSBkZXYtPmlkeDQgLyA0OworCXAgPSBkZXYtPmRhdGFbaWR4IC0gMV07CiAKLQlpZiAoKHAgJiB+SElMX0NNRENUX1BPTCkgPT0KLQkgICAgKEhJTF9FUlJfSU5UIHwgSElMX1BLVF9DTUQgfCBISUxfQ01EX1BPTCkpCi0JCWdvdG8gcmVwb3J0OwotCWlmICgocCAmIH5ISUxfQ01EQ1RfUlBMKSA9PQotCSAgICAoSElMX0VSUl9JTlQgfCBISUxfUEtUX0NNRCB8IEhJTF9DTURfUlBMKSkKLQkJZ290byByZXBvcnQ7Ci0KLQkvKiBOb3QgYSBwb2xsIHJlc3BvbnNlLiAgU2VlIGlmIHdlIGFyZSBsb2FkaW5nIGNvbmZpZyByZWNvcmRzLiAqLwogCXN3aXRjaCAocCAmIEhJTF9QS1RfREFUQV9NQVNLKSB7CiAJY2FzZSBISUxfQ01EX0lERDoKLQkJZm9yIChpID0gMDsgaSA8IGlkeDsgaSsrKQotCQkJa2JkLT5pZGRbaV0gPSBrYmQtPmRhdGFbaV0gJiBISUxfUEtUX0RBVEFfTUFTSzsKLQkJZm9yICg7IGkgPCBISUxfS0JEX01BWF9MRU5HVEg7IGkrKykKLQkJCWtiZC0+aWRkW2ldID0gMDsKKwkJYnVmID0gZGV2LT5pZGQ7CiAJCWJyZWFrOwogCiAJY2FzZSBISUxfQ01EX1JTQzoKLQkJZm9yIChpID0gMDsgaSA8IGlkeDsgaSsrKQotCQkJa2JkLT5yc2NbaV0gPSBrYmQtPmRhdGFbaV0gJiBISUxfUEtUX0RBVEFfTUFTSzsKLQkJZm9yICg7IGkgPCBISUxfS0JEX01BWF9MRU5HVEg7IGkrKykKLQkJCWtiZC0+cnNjW2ldID0gMDsKKwkJYnVmID0gZGV2LT5yc2M7CiAJCWJyZWFrOwogCiAJY2FzZSBISUxfQ01EX0VYRDoKLQkJZm9yIChpID0gMDsgaSA8IGlkeDsgaSsrKQotCQkJa2JkLT5leGRbaV0gPSBrYmQtPmRhdGFbaV0gJiBISUxfUEtUX0RBVEFfTUFTSzsKLQkJZm9yICg7IGkgPCBISUxfS0JEX01BWF9MRU5HVEg7IGkrKykKLQkJCWtiZC0+ZXhkW2ldID0gMDsKKwkJYnVmID0gZGV2LT5leGQ7CiAJCWJyZWFrOwogCiAJY2FzZSBISUxfQ01EX1JOTToKLQkJZm9yIChpID0gMDsgaSA8IGlkeDsgaSsrKQotCQkJa2JkLT5ybm1baV0gPSBrYmQtPmRhdGFbaV0gJiBISUxfUEtUX0RBVEFfTUFTSzsKLQkJZm9yICg7IGkgPCBISUxfS0JEX01BWF9MRU5HVEggKyAxOyBpKyspCi0JCQlrYmQtPnJubVtpXSA9ICdcMCc7CisJCWRldi0+cm5tW0hJTF9QQUNLRVRfTUFYX0xFTkdUSF0gPSAwOworCQlidWYgPSBkZXYtPnJubTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQkvKiBUaGVzZSBvY2N1ciB3aGVuIGRldmljZSBpc24ndCBwcmVzZW50ICovCi0JCWlmIChwID09IChISUxfRVJSX0lOVCB8IEhJTF9QS1RfQ01EKSkKLQkJCWJyZWFrOwotCQkvKiBBbnl0aGluZyBlbHNlIHdlJ2QgbGlrZSB0byBrbm93IGFib3V0LiAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiRGV2aWNlIHNlbnQgdW5rbm93biByZWNvcmQgJXhcbiIsIHApOwotCQlicmVhazsKKwkJaWYgKHAgIT0gKEhJTF9FUlJfSU5UIHwgSElMX1BLVF9DTUQpKSB7CisJCQkvKiBBbnl0aGluZyBlbHNlIHdlJ2QgbGlrZSB0byBrbm93IGFib3V0LiAqLworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIkRldmljZSBzZW50IHVua25vd24gcmVjb3JkICV4XG4iLCBwKTsKKwkJfQorCQlnb3RvIG91dDsKIAl9Ci0JZ290byBvdXQ7CiAKLSByZXBvcnQ6Ci0JY250ID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgaWR4OyBpKyspCisJCWJ1ZltpXSA9IGRldi0+ZGF0YVtpXSAmIEhJTF9QS1RfREFUQV9NQVNLOworCWZvciAoOyBpIDwgSElMX1BBQ0tFVF9NQVhfTEVOR1RIOyBpKyspCisJCWJ1ZltpXSA9IDA7Cisgb3V0OgorCWNvbXBsZXRlKCZkZXYtPmNtZF9kb25lKTsKK30KKworc3RhdGljIHZvaWQgaGlsX2Rldl9oYW5kbGVfa2JkX2V2ZW50cyhzdHJ1Y3QgaGlsX2RldiAqa2JkKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGtiZC0+ZGV2OworCWludCBpZHggPSBrYmQtPmlkeDQgLyA0OworCWludCBpOworCiAJc3dpdGNoIChrYmQtPmRhdGFbMF0gJiBISUxfUE9MX0NIQVJUWVBFX01BU0spIHsKIAljYXNlIEhJTF9QT0xfQ0hBUlRZUEVfTk9ORToKLQkJYnJlYWs7CisJCXJldHVybjsKIAogCWNhc2UgSElMX1BPTF9DSEFSVFlQRV9BU0NJSToKLQkJd2hpbGUgKGNudCA8IGlkeCAtIDEpCi0JCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2JkLT5kYXRhW2NudCsrXSAmIDB4N2YsIDEpOworCQlmb3IgKGkgPSAxOyBpIDwgaWR4IC0gMTsgaSsrKQorCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtiZC0+ZGF0YVtpXSAmIDB4N2YsIDEpOwogCQlicmVhazsKIAogCWNhc2UgSElMX1BPTF9DSEFSVFlQRV9SU1ZEMToKIAljYXNlIEhJTF9QT0xfQ0hBUlRZUEVfUlNWRDI6CiAJY2FzZSBISUxfUE9MX0NIQVJUWVBFX0JJTkFSWToKLQkJd2hpbGUgKGNudCA8IGlkeCAtIDEpCi0JCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2JkLT5kYXRhW2NudCsrXSwgMSk7CisJCWZvciAoaSA9IDE7IGkgPCBpZHggLSAxOyBpKyspCisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2JkLT5kYXRhW2ldLCAxKTsKIAkJYnJlYWs7CiAKIAljYXNlIEhJTF9QT0xfQ0hBUlRZUEVfU0VUMToKLQkJd2hpbGUgKGNudCA8IGlkeCAtIDEpIHsKLQkJCXVuc2lnbmVkIGludCBrZXk7Ci0JCQlpbnQgdXA7Ci0JCQlrZXkgPSBrYmQtPmRhdGFbY250KytdOwotCQkJdXAgPSBrZXkgJiBISUxfS0JEX1NFVDFfVVBCSVQ7CisJCWZvciAoaSA9IDE7IGkgPCBpZHggLSAxOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludCBrZXkgPSBrYmQtPmRhdGFbaV07CisJCQlpbnQgdXAgPSBrZXkgJiBISUxfS0JEX1NFVDFfVVBCSVQ7CisKIAkJCWtleSAmPSAofkhJTF9LQkRfU0VUMV9VUEJJVCAmIDB4ZmYpOwogCQkJa2V5ID0gaGlsX2tiZF9zZXQxW2tleSA+PiBISUxfS0JEX1NFVDFfU0hJRlRdOwotCQkJaWYgKGtleSAhPSBLRVlfUkVTRVJWRUQpCi0JCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtleSwgIXVwKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXksICF1cCk7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIEhJTF9QT0xfQ0hBUlRZUEVfU0VUMjoKLQkJd2hpbGUgKGNudCA8IGlkeCAtIDEpIHsKLQkJCXVuc2lnbmVkIGludCBrZXk7Ci0JCQlpbnQgdXA7Ci0JCQlrZXkgPSBrYmQtPmRhdGFbY250KytdOwotCQkJdXAgPSBrZXkgJiBISUxfS0JEX1NFVDJfVVBCSVQ7CisJCWZvciAoaSA9IDE7IGkgPCBpZHggLSAxOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludCBrZXkgPSBrYmQtPmRhdGFbaV07CisJCQlpbnQgdXAgPSBrZXkgJiBISUxfS0JEX1NFVDJfVVBCSVQ7CisKIAkJCWtleSAmPSAofkhJTF9LQkRfU0VUMV9VUEJJVCAmIDB4ZmYpOwogCQkJa2V5ID0ga2V5ID4+IEhJTF9LQkRfU0VUMl9TSElGVDsKLQkJCWlmIChrZXkgIT0gS0VZX1JFU0VSVkVEKQotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXksICF1cCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2V5LCAhdXApOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBISUxfUE9MX0NIQVJUWVBFX1NFVDM6Ci0JCXdoaWxlIChjbnQgPCBpZHggLSAxKSB7Ci0JCQl1bnNpZ25lZCBpbnQga2V5OwotCQkJaW50IHVwOwotCQkJa2V5ID0ga2JkLT5kYXRhW2NudCsrXTsKLQkJCXVwID0ga2V5ICYgSElMX0tCRF9TRVQzX1VQQklUOworCQlmb3IgKGkgPSAxOyBpIDwgaWR4IC0gMTsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQga2V5ID0ga2JkLT5kYXRhW2ldOworCQkJaW50IHVwID0ga2V5ICYgSElMX0tCRF9TRVQzX1VQQklUOworCiAJCQlrZXkgJj0gKH5ISUxfS0JEX1NFVDFfVVBCSVQgJiAweGZmKTsKIAkJCWtleSA9IGhpbF9rYmRfc2V0M1trZXkgPj4gSElMX0tCRF9TRVQzX1NISUZUXTsKLQkJCWlmIChrZXkgIT0gS0VZX1JFU0VSVkVEKQotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXksICF1cCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2V5LCAhdXApOwogCQl9CiAJCWJyZWFrOwogCX0KLSBvdXQ6Ci0Ja2JkLT5pZHg0ID0gMDsKLQl1cCgma2JkLT5zZW0pOworCisJaW5wdXRfc3luYyhkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBoaWxfa2JkX3Byb2Nlc3NfZXJyKHN0cnVjdCBoaWxfa2JkICprYmQpCitzdGF0aWMgdm9pZCBoaWxfZGV2X2hhbmRsZV9wdHJfZXZlbnRzKHN0cnVjdCBoaWxfZGV2ICpwdHIpCit7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gcHRyLT5kZXY7CisJaW50IGlkeCA9IHB0ci0+aWR4NCAvIDQ7CisJaGlsX3BhY2tldCBwID0gcHRyLT5kYXRhW2lkeCAtIDFdOworCWludCBpLCBjbnQsIGxheGlzOworCWJvb2wgYWJzZGV2LCBheDE2OworCisJaWYgKChwICYgSElMX0NNRENUX1BPTCkgIT0gaWR4IC0gMSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWAorCQkJIk1hbGZvcm1lZCBwb2xsIHBhY2tldCAleCAoaWR4ID0gJWkpXG4iLCBwLCBpZHgpOworCQlyZXR1cm47CisJfQorCisJaSA9IChwICYgSElMX1BPTF9BWElTX0FMVCkgPyAzIDogMDsKKwlsYXhpcyA9IChwICYgSElMX1BPTF9OVU1fQVhFU19NQVNLKSArIGk7CisKKwlheDE2ID0gcHRyLT5pZGRbMV0gJiBISUxfSUREX0hFQURFUl8xNkJJVDsgLyogOCBvciAxNmJpdCByZXNvbHV0aW9uICovCisJYWJzZGV2ID0gcHRyLT5pZGRbMV0gJiBISUxfSUREX0hFQURFUl9BQlM7CisKKwlmb3IgKGNudCA9IDE7IGkgPCBsYXhpczsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBsbywgaGksIHZhbDsKKworCQlsbyA9IHB0ci0+ZGF0YVtjbnQrK10gJiBISUxfUEtUX0RBVEFfTUFTSzsKKwkJaGkgPSBheDE2ID8gKHB0ci0+ZGF0YVtjbnQrK10gJiBISUxfUEtUX0RBVEFfTUFTSykgOiAwOworCisJCWlmIChhYnNkZXYpIHsKKwkJCXZhbCA9IGxvICsgKGhpIDw8IDgpOworI2lmZGVmIFRBQkxFVF9BVVRPQURKVVNUCisJCQlpZiAodmFsIDwgZGV2LT5hYnNtaW5bQUJTX1ggKyBpXSkKKwkJCQlkZXYtPmFic21pbltBQlNfWCArIGldID0gdmFsOworCQkJaWYgKHZhbCA+IGRldi0+YWJzbWF4W0FCU19YICsgaV0pCisJCQkJZGV2LT5hYnNtYXhbQUJTX1ggKyBpXSA9IHZhbDsKKyNlbmRpZgorCQkJaWYgKGklMykgdmFsID0gZGV2LT5hYnNtYXhbQUJTX1ggKyBpXSAtIHZhbDsKKwkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCArIGksIHZhbCk7CisJCX0gZWxzZSB7CisJCQl2YWwgPSAoaW50KSAoKChpbnQ4X3QpbG8pIHwgKChpbnQ4X3QpaGkgPDwgOCkpOworCQkJaWYgKGkgJSAzKQorCQkJCXZhbCAqPSAtMTsKKwkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCArIGksIHZhbCk7CisJCX0KKwl9CisKKwl3aGlsZSAoY250IDwgaWR4IC0gMSkgeworCQl1bnNpZ25lZCBpbnQgYnRuID0gcHRyLT5kYXRhW2NudCsrXTsKKwkJaW50IHVwID0gYnRuICYgMTsKKworCQlidG4gJj0gMHhmZTsKKwkJaWYgKGJ0biA9PSAweDhlKQorCQkJY29udGludWU7IC8qIFRPRE86IHByb3hpbWl0eSA9PSB0b3VjaD8gKi8KKwkJaWYgKGJ0biA+IDB4OGMgfHwgYnRuIDwgMHg4MCkKKwkJCWNvbnRpbnVlOworCQlidG4gPSAoYnRuIC0gMHg4MCkgPj4gMTsKKwkJYnRuID0gcHRyLT5idG5tYXBbYnRuXTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGJ0biwgIXVwKTsKKwl9CisKKwlpbnB1dF9zeW5jKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGhpbF9kZXZfcHJvY2Vzc19lcnIoc3RydWN0IGhpbF9kZXYgKmRldikKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiZXJyb3JlZCBISUwgcGFja2V0XG4iKTsKLQlrYmQtPmlkeDQgPSAwOwotCXVwKCZrYmQtPnNlbSk7CisJZGV2LT5pZHg0ID0gMDsKKwljb21wbGV0ZSgmZGV2LT5jbWRfZG9uZSk7IC8qIGp1c3QgaW4gY2FzZSBzb21lYm9keSBpcyB3YWl0aW5nICovCiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBoaWxfa2JkX2ludGVycnVwdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLAorc3RhdGljIGlycXJldHVybl90IGhpbF9kZXZfaW50ZXJydXB0KHN0cnVjdCBzZXJpbyAqc2VyaW8sCiAJCQkJdW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IGhpbF9rYmQgKmtiZDsKKwlzdHJ1Y3QgaGlsX2RldiAqZGV2OwogCWhpbF9wYWNrZXQgcGFja2V0OwogCWludCBpZHg7CiAKLQlrYmQgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7Ci0JQlVHX09OKGtiZCA9PSBOVUxMKTsKKwlkZXYgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7CisJQlVHX09OKGRldiA9PSBOVUxMKTsKIAotCWlmIChrYmQtPmlkeDQgPj0gKEhJTF9LQkRfTUFYX0xFTkdUSCAqIHNpemVvZihoaWxfcGFja2V0KSkpIHsKLQkJaGlsX2tiZF9wcm9jZXNzX2VycihrYmQpOwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJaWYgKGRldi0+aWR4NCA+PSBISUxfUEFDS0VUX01BWF9MRU5HVEggKiBzaXplb2YoaGlsX3BhY2tldCkpIHsKKwkJaGlsX2Rldl9wcm9jZXNzX2VycihkZXYpOworCQlnb3RvIG91dDsKIAl9Ci0JaWR4ID0ga2JkLT5pZHg0LzQ7Ci0JaWYgKCEoa2JkLT5pZHg0ICUgNCkpCi0JCWtiZC0+ZGF0YVtpZHhdID0gMDsKLQlwYWNrZXQgPSBrYmQtPmRhdGFbaWR4XTsKLQlwYWNrZXQgfD0gKChoaWxfcGFja2V0KWRhdGEpIDw8ICgoMyAtIChrYmQtPmlkeDQgJSA0KSkgKiA4KTsKLQlrYmQtPmRhdGFbaWR4XSA9IHBhY2tldDsKKworCWlkeCA9IGRldi0+aWR4NCAvIDQ7CisJaWYgKCEoZGV2LT5pZHg0ICUgNCkpCisJCWRldi0+ZGF0YVtpZHhdID0gMDsKKwlwYWNrZXQgPSBkZXYtPmRhdGFbaWR4XTsKKwlwYWNrZXQgfD0gKChoaWxfcGFja2V0KWRhdGEpIDw8ICgoMyAtIChkZXYtPmlkeDQgJSA0KSkgKiA4KTsKKwlkZXYtPmRhdGFbaWR4XSA9IHBhY2tldDsKIAogCS8qIFJlY29yZHMgb2YgTiA0LWJ5dGUgaGlsX3BhY2tldHMgbXVzdCB0ZXJtaW5hdGUgd2l0aCBhIGNvbW1hbmQuICovCi0JaWYgKCgrKyhrYmQtPmlkeDQpKSAlIDQpCi0JCXJldHVybiBJUlFfSEFORExFRDsKLQlpZiAoKHBhY2tldCAmIDB4ZmZmZjAwMDApICE9IEhJTF9FUlJfSU5UKSB7Ci0JCWhpbF9rYmRfcHJvY2Vzc19lcnIoa2JkKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOworCWlmICgoKytkZXYtPmlkeDQgJSA0KSA9PSAwKSB7CisJCWlmICgocGFja2V0ICYgMHhmZmZmMDAwMCkgIT0gSElMX0VSUl9JTlQpIHsKKwkJCWhpbF9kZXZfcHJvY2Vzc19lcnIoZGV2KTsKKwkJfSBlbHNlIGlmIChwYWNrZXQgJiBISUxfUEtUX0NNRCkgeworCQkJaWYgKGhpbF9kZXZfaXNfY29tbWFuZF9yZXNwb25zZShwYWNrZXQpKQorCQkJCWhpbF9kZXZfaGFuZGxlX2NvbW1hbmRfcmVzcG9uc2UoZGV2KTsKKwkJCWVsc2UgaWYgKGRldi0+aXNfcG9pbnRlcikKKwkJCQloaWxfZGV2X2hhbmRsZV9wdHJfZXZlbnRzKGRldik7CisJCQllbHNlCisJCQkJaGlsX2Rldl9oYW5kbGVfa2JkX2V2ZW50cyhkZXYpOworCQkJZGV2LT5pZHg0ID0gMDsKKwkJfQogCX0KLQlpZiAocGFja2V0ICYgSElMX1BLVF9DTUQpCi0JCWhpbF9rYmRfcHJvY2Vzc19yZWNvcmQoa2JkKTsKKyBvdXQ6CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgdm9pZCBoaWxfa2JkX2Rpc2Nvbm5lY3Qoc3RydWN0IHNlcmlvICpzZXJpbykKK3N0YXRpYyB2b2lkIGhpbF9kZXZfZGlzY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogewotCXN0cnVjdCBoaWxfa2JkICprYmQ7CisJc3RydWN0IGhpbF9kZXYgKmRldiA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvKTsKIAotCWtiZCA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvKTsKLQlCVUdfT04oa2JkID09IE5VTEwpOworCUJVR19PTihkZXYgPT0gTlVMTCk7CiAKIAlzZXJpb19jbG9zZShzZXJpbyk7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2Uoa2JkLT5kZXYpOwotCWtmcmVlKGtiZCk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT5kZXYpOworCXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKKwlrZnJlZShkZXYpOwogfQogCi1zdGF0aWMgaW50IGhpbF9rYmRfY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCBzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpCitzdGF0aWMgdm9pZCBoaWxfZGV2X2tleWJvYXJkX3NldHVwKHN0cnVjdCBoaWxfZGV2ICprYmQpCiB7Ci0Jc3RydWN0IGhpbF9rYmQJKmtiZDsKLQl1aW50OF90CQlkaWQsICppZGQ7Ci0JaW50CQlpOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IGtiZC0+ZGV2OworCXVpbnQ4X3QgZGlkID0ga2JkLT5pZGRbMF07CisJaW50IGk7CiAKLQlrYmQgPSBremFsbG9jKHNpemVvZigqa2JkKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFrYmQpCi0JCXJldHVybiAtRU5PTUVNOworCWlucHV0X2Rldi0+ZXZiaXRbMF0JPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVQKTsKKwlpbnB1dF9kZXYtPmxlZGJpdFswXQk9IEJJVF9NQVNLKExFRF9OVU1MKSB8IEJJVF9NQVNLKExFRF9DQVBTTCkgfAorCQkJCSAgQklUX01BU0soTEVEX1NDUk9MTEwpOwogCi0Ja2JkLT5kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWtiZC0+ZGV2KQorCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgeworCQlfX3NldF9iaXQoaGlsX2tiZF9zZXQxW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChoaWxfa2JkX3NldDNbaV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKKwl9CisJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwlpbnB1dF9kZXYtPmtleWNvZGVtYXgJPSBISUxfS0VZQ09ERVNfU0VUMV9UQkxTSVpFOworCWlucHV0X2Rldi0+a2V5Y29kZXNpemUJPSBzaXplb2YoaGlsX2tiZF9zZXQxWzBdKTsKKwlpbnB1dF9kZXYtPmtleWNvZGUJPSBoaWxfa2JkX3NldDE7CisKKwlpbnB1dF9kZXYtPm5hbWUJPSBzdHJsZW4oa2JkLT5ybm0pID8ga2JkLT5ybm0gOiAiSElMIGtleWJvYXJkIjsKKwlpbnB1dF9kZXYtPnBoeXMJPSAiaHBrYmQvaW5wdXQwIjsKKworCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJISUwga2V5Ym9hcmQgZm91bmQgKGRpZCA9IDB4JTAyeCwgbGFuZyA9ICVzKVxuIiwKKwkJZGlkLCBoaWxfbGFuZ3VhZ2VbZGlkICYgSElMX0lERF9ESURfVFlQRV9LQl9MQU5HX01BU0tdKTsKK30KKworc3RhdGljIHZvaWQgaGlsX2Rldl9wb2ludGVyX3NldHVwKHN0cnVjdCBoaWxfZGV2ICpwdHIpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gcHRyLT5kZXY7CisJdWludDhfdCBkaWQgPSBwdHItPmlkZFswXTsKKwl1aW50OF90ICppZGQgPSBwdHItPmlkZCArIDE7CisJdW5zaWduZWQgaW50IG5heHNldHMgPSBISUxfSUREX05VTV9BWFNFVFMoKmlkZCk7CisJdW5zaWduZWQgaW50IGksIGJ0bnR5cGU7CisJY29uc3QgY2hhciAqdHh0OworCisJcHRyLT5uYXhlcyA9IEhJTF9JRERfTlVNX0FYRVNfUEVSX1NFVCgqaWRkKTsKKworCXN3aXRjaCAoZGlkICYgSElMX0lERF9ESURfVFlQRV9NQVNLKSB7CisJY2FzZSBISUxfSUREX0RJRF9UWVBFX1JFTDoKKwkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX1JFTCk7CisKKwkJZm9yIChpID0gMDsgaSA8IHB0ci0+bmF4ZXM7IGkrKykKKwkJCV9fc2V0X2JpdChSRUxfWCArIGksIGlucHV0X2Rldi0+cmVsYml0KTsKKworCQlmb3IgKGkgPSAzOyBuYXhzZXRzID4gMSAmJiBpIDwgcHRyLT5uYXhlcyArIDM7IGkrKykKKwkJCV9fc2V0X2JpdChSRUxfWCArIGksIGlucHV0X2Rldi0+cmVsYml0KTsKKworCQl0eHQgPSAicmVsYXRpdmUiOworCQlicmVhazsKKworCWNhc2UgSElMX0lERF9ESURfVFlQRV9BQlM6CisJCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9BQlMpOworCisJCWZvciAoaSA9IDA7IGkgPCBwdHItPm5heGVzOyBpKyspCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YICsgaSwKKwkJCQkJMCwgSElMX0lERF9BWElTX01BWChpZGQsIGkpLCAwLCAwKTsKKworCQlmb3IgKGkgPSAzOyBuYXhzZXRzID4gMSAmJiBpIDwgcHRyLT5uYXhlcyArIDM7IGkrKykKKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ggKyBpLAorCQkJCQkwLCBISUxfSUREX0FYSVNfTUFYKGlkZCwgaSAtIDMpLCAwLCAwKTsKKworI2lmZGVmIFRBQkxFVF9BVVRPQURKVVNUCisJCWZvciAoaSA9IDA7IGkgPCBBQlNfTUFYOyBpKyspIHsKKwkJCWludCBkaWZmID0gaW5wdXRfZGV2LT5hYnNtYXhbQUJTX1ggKyBpXSAvIDEwOworCQkJaW5wdXRfZGV2LT5hYnNtaW5bQUJTX1ggKyBpXSArPSBkaWZmOworCQkJaW5wdXRfZGV2LT5hYnNtYXhbQUJTX1ggKyBpXSAtPSBkaWZmOworCQl9CisjZW5kaWYKKworCQl0eHQgPSAiYWJzb2x1dGUiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXB0ci0+bmJ0biA9IEhJTF9JRERfTlVNX0JVVFRPTlMoaWRkKTsKKwlpZiAocHRyLT5uYnRuKQorCQlpbnB1dF9kZXYtPmV2Yml0WzBdIHw9IEJJVF9NQVNLKEVWX0tFWSk7CisKKwlidG50eXBlID0gQlROX01JU0M7CisJaWYgKChkaWQgJiBISUxfSUREX0RJRF9BQlNfVEFCTEVUX01BU0spID09IEhJTF9JRERfRElEX0FCU19UQUJMRVQpCisjaWZkZWYgVEFCTEVUX1NJTVVMQVRFU19NT1VTRQorCQlidG50eXBlID0gQlROX1RPVUNIOworI2Vsc2UKKwkJYnRudHlwZSA9IEJUTl9ESUdJOworI2VuZGlmCisJaWYgKChkaWQgJiBISUxfSUREX0RJRF9BQlNfVFNDUkVFTl9NQVNLKSA9PSBISUxfSUREX0RJRF9BQlNfVFNDUkVFTikKKwkJYnRudHlwZSA9IEJUTl9UT1VDSDsKKworCWlmICgoZGlkICYgSElMX0lERF9ESURfUkVMX01PVVNFX01BU0spID09IEhJTF9JRERfRElEX1JFTF9NT1VTRSkKKwkJYnRudHlwZSA9IEJUTl9NT1VTRTsKKworCWZvciAoaSA9IDA7IGkgPCBwdHItPm5idG47IGkrKykgeworCQlfX3NldF9iaXQoYnRudHlwZSB8IGksIGlucHV0X2Rldi0+a2V5Yml0KTsKKwkJcHRyLT5idG5tYXBbaV0gPSBidG50eXBlIHwgaTsKKwl9CisKKwlpZiAoYnRudHlwZSA9PSBCVE5fTU9VU0UpIHsKKwkJLyogU3dhcCBidXR0b25zIDIgYW5kIDMgKi8KKwkJcHRyLT5idG5tYXBbMV0gPSBCVE5fTUlERExFOworCQlwdHItPmJ0bm1hcFsyXSA9IEJUTl9SSUdIVDsKKwl9CisKKwlpbnB1dF9kZXYtPm5hbWUgPSBzdHJsZW4ocHRyLT5ybm0pID8gcHRyLT5ybm0gOiAiSElMIHBvaW50ZXIgZGV2aWNlIjsKKworCXByaW50ayhLRVJOX0lORk8gUFJFRklYCisJCSJISUwgcG9pbnRlciBkZXZpY2UgZm91bmQgKGRpZDogMHglMDJ4LCBheGlzOiAlcylcbiIsCisJCWRpZCwgdHh0KTsKKwlwcmludGsoS0VSTl9JTkZPIFBSRUZJWAorCQkiSElMIHBvaW50ZXIgaGFzICVpIGJ1dHRvbnMgYW5kICVpIHNldHMgb2YgJWkgYXhlc1xuIiwKKwkJcHRyLT5uYnRuLCBuYXhzZXRzLCBwdHItPm5heGVzKTsKK30KKworc3RhdGljIGludCBoaWxfZGV2X2Nvbm5lY3Qoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KQoreworCXN0cnVjdCBoaWxfZGV2ICpkZXY7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXVpbnQ4X3QgZGlkLCAqaWRkOworCWludCBlcnJvcjsKKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWRldiB8fCAhaW5wdXRfZGV2KSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBiYWlsMDsKKwl9CisKKwlkZXYtPnNlcmlvID0gc2VyaW87CisJZGV2LT5kZXYgPSBpbnB1dF9kZXY7CisKKwllcnJvciA9IHNlcmlvX29wZW4oc2VyaW8sIGRydik7CisJaWYgKGVycm9yKQogCQlnb3RvIGJhaWwwOwogCi0JaWYgKHNlcmlvX29wZW4oc2VyaW8sIGRydikpCi0JCWdvdG8gYmFpbDE7Ci0KLQlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywga2JkKTsKLQlrYmQtPnNlcmlvID0gc2VyaW87Ci0KLQlpbml0X01VVEVYX0xPQ0tFRCgma2JkLT5zZW0pOworCXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBkZXYpOwogCiAJLyogR2V0IGRldmljZSBpbmZvLiAgTUxDIGRyaXZlciBzdXBwbGllcyBkZXZpZC9zdGF0dXMvZXRjLiAqLwotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCAwKTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOwotCXNlcmlvLT53cml0ZShzZXJpbywgSElMX0NNRF9JREQpOwotCWRvd24oJmtiZC0+c2VtKTsKKwlpbml0X2NvbXBsZXRpb24oJmRldi0+Y21kX2RvbmUpOworCXNlcmlvX3dyaXRlKHNlcmlvLCAwKTsKKwlzZXJpb193cml0ZShzZXJpbywgMCk7CisJc2VyaW9fd3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOworCXNlcmlvX3dyaXRlKHNlcmlvLCBISUxfQ01EX0lERCk7CisJZXJyb3IgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2tpbGxhYmxlKCZkZXYtPmNtZF9kb25lKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gYmFpbDE7CiAKLQlzZXJpby0+d3JpdGUoc2VyaW8sIDApOwotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCBISUxfUEtUX0NNRCA+PiA4KTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9DTURfUlNDKTsKLQlkb3duKCZrYmQtPnNlbSk7CisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPmNtZF9kb25lKTsKKwlzZXJpb193cml0ZShzZXJpbywgMCk7CisJc2VyaW9fd3JpdGUoc2VyaW8sIDApOworCXNlcmlvX3dyaXRlKHNlcmlvLCBISUxfUEtUX0NNRCA+PiA4KTsKKwlzZXJpb193cml0ZShzZXJpbywgSElMX0NNRF9SU0MpOworCWVycm9yID0gd2FpdF9mb3JfY29tcGxldGlvbl9raWxsYWJsZSgmZGV2LT5jbWRfZG9uZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGJhaWwxOwogCi0Jc2VyaW8tPndyaXRlKHNlcmlvLCAwKTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIDApOwotCXNlcmlvLT53cml0ZShzZXJpbywgSElMX1BLVF9DTUQgPj4gOCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCBISUxfQ01EX1JOTSk7Ci0JZG93bigma2JkLT5zZW0pOworCWluaXRfY29tcGxldGlvbigmZGV2LT5jbWRfZG9uZSk7CisJc2VyaW9fd3JpdGUoc2VyaW8sIDApOworCXNlcmlvX3dyaXRlKHNlcmlvLCAwKTsKKwlzZXJpb193cml0ZShzZXJpbywgSElMX1BLVF9DTUQgPj4gOCk7CisJc2VyaW9fd3JpdGUoc2VyaW8sIEhJTF9DTURfUk5NKTsKKwllcnJvciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fa2lsbGFibGUoJmRldi0+Y21kX2RvbmUpOworCWlmIChlcnJvcikKKwkJZ290byBiYWlsMTsKIAotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCAwKTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOwotCXNlcmlvLT53cml0ZShzZXJpbywgSElMX0NNRF9FWEQpOwotCWRvd24oJmtiZC0+c2VtKTsKKwlpbml0X2NvbXBsZXRpb24oJmRldi0+Y21kX2RvbmUpOworCXNlcmlvX3dyaXRlKHNlcmlvLCAwKTsKKwlzZXJpb193cml0ZShzZXJpbywgMCk7CisJc2VyaW9fd3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOworCXNlcmlvX3dyaXRlKHNlcmlvLCBISUxfQ01EX0VYRCk7CisJZXJyb3IgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2tpbGxhYmxlKCZkZXYtPmNtZF9kb25lKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gYmFpbDE7CiAKLQl1cCgma2JkLT5zZW0pOworCWRpZCA9IGRldi0+aWRkWzBdOworCWlkZCA9IGRldi0+aWRkICsgMTsKIAotCWRpZCA9IGtiZC0+aWRkWzBdOwotCWlkZCA9IGtiZC0+aWRkICsgMTsKIAlzd2l0Y2ggKGRpZCAmIEhJTF9JRERfRElEX1RZUEVfTUFTSykgewogCWNhc2UgSElMX0lERF9ESURfVFlQRV9LQl9JTlRFR1JBTDoKIAljYXNlIEhJTF9JRERfRElEX1RZUEVfS0JfSVRGOgogCWNhc2UgSElMX0lERF9ESURfVFlQRV9LQl9SU1ZEOgogCWNhc2UgSElMX0lERF9ESURfVFlQRV9DSEFSOgotCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiSElMIGtleWJvYXJkIGZvdW5kIChkaWQgPSAweCUwMngsIGxhbmcgPSAlcylcbiIsCi0JCQlkaWQsIGhpbF9sYW5ndWFnZVtkaWQgJiBISUxfSUREX0RJRF9UWVBFX0tCX0xBTkdfTUFTS10pOworCQlpZiAoSElMX0lERF9OVU1fQlVUVE9OUyhpZGQpIHx8CisJCSAgICBISUxfSUREX05VTV9BWEVTX1BFUl9TRVQoKmlkZCkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gUFJFRklYCisJCQkJImNvbWJvIGRldmljZXMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4iKTsKKwkJCWdvdG8gYmFpbDE7CisJCX0KKworCQlkZXYtPmlzX3BvaW50ZXIgPSBmYWxzZTsKKwkJaGlsX2Rldl9rZXlib2FyZF9zZXR1cChkZXYpOwogCQlicmVhazsKKworCWNhc2UgSElMX0lERF9ESURfVFlQRV9SRUw6CisJY2FzZSBISUxfSUREX0RJRF9UWVBFX0FCUzoKKwkJZGV2LT5pc19wb2ludGVyID0gdHJ1ZTsKKwkJaGlsX2Rldl9wb2ludGVyX3NldHVwKGRldik7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKLQkJZ290byBiYWlsMjsKKwkJZ290byBiYWlsMTsKIAl9CiAKLQlpZiAoSElMX0lERF9OVU1fQlVUVE9OUyhpZGQpIHx8IEhJTF9JRERfTlVNX0FYRVNfUEVSX1NFVCgqaWRkKSkgewotCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAia2V5Ym9hcmRzIG9ubHksIG5vIGNvbWJvIGRldmljZXMgc3VwcG9ydGVkLlxuIik7Ci0JCWdvdG8gYmFpbDI7CisJaW5wdXRfZGV2LT5pZC5idXN0eXBlCT0gQlVTX0hJTDsKKwlpbnB1dF9kZXYtPmlkLnZlbmRvcgk9IFBDSV9WRU5ET1JfSURfSFA7CisJaW5wdXRfZGV2LT5pZC5wcm9kdWN0CT0gMHgwMDAxOyAvKiBUT0RPOiBnZXQgZnJvbSBrYmQtPnJzYyAqLworCWlucHV0X2Rldi0+aWQudmVyc2lvbgk9IDB4MDEwMDsgLyogVE9ETzogZ2V0IGZyb20ga2JkLT5yc2MgKi8KKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQJPSAmc2VyaW8tPmRldjsKKworCWlmICghZGV2LT5pc19wb2ludGVyKSB7CisJCXNlcmlvX3dyaXRlKHNlcmlvLCAwKTsKKwkJc2VyaW9fd3JpdGUoc2VyaW8sIDApOworCQlzZXJpb193cml0ZShzZXJpbywgSElMX1BLVF9DTUQgPj4gOCk7CisJCS8qIEVuYWJsZSBLZXlzd2l0Y2ggQXV0b3JlcGVhdCAxICovCisJCXNlcmlvX3dyaXRlKHNlcmlvLCBISUxfQ01EX0VLMSk7CisJCS8qIE5vIG5lZWQgdG8gd2FpdCBmb3IgY29tcGxldGlvbiAqLwogCX0KIAotCWtiZC0+ZGV2LT5ldmJpdFswXQk9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRVApOwotCWtiZC0+ZGV2LT5sZWRiaXRbMF0JPSBCSVRfTUFTSyhMRURfTlVNTCkgfCBCSVRfTUFTSyhMRURfQ0FQU0wpIHwKLQkJQklUX01BU0soTEVEX1NDUk9MTEwpOwotCWtiZC0+ZGV2LT5rZXljb2RlbWF4CT0gSElMX0tFWUNPREVTX1NFVDFfVEJMU0laRTsKLQlrYmQtPmRldi0+a2V5Y29kZXNpemUJPSBzaXplb2YoaGlsX2tiZF9zZXQxWzBdKTsKLQlrYmQtPmRldi0+a2V5Y29kZQk9IGhpbF9rYmRfc2V0MTsKLQlrYmQtPmRldi0+bmFtZQkJPSBzdHJsZW4oa2JkLT5ybm0pID8ga2JkLT5ybm0gOiBISUxfR0VORVJJQ19OQU1FOwotCWtiZC0+ZGV2LT5waHlzCQk9ICJocGtiZC9pbnB1dDAiOwkvKiBYWFggKi8KLQotCWtiZC0+ZGV2LT5pZC5idXN0eXBlCT0gQlVTX0hJTDsKLQlrYmQtPmRldi0+aWQudmVuZG9yCT0gUENJX1ZFTkRPUl9JRF9IUDsKLQlrYmQtPmRldi0+aWQucHJvZHVjdAk9IDB4MDAwMTsgLyogVE9ETzogZ2V0IGZyb20ga2JkLT5yc2MgKi8KLQlrYmQtPmRldi0+aWQudmVyc2lvbgk9IDB4MDEwMDsgLyogVE9ETzogZ2V0IGZyb20ga2JkLT5yc2MgKi8KLQlrYmQtPmRldi0+ZGV2LnBhcmVudAk9ICZzZXJpby0+ZGV2OwotCi0JZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7Ci0JCXNldF9iaXQoaGlsX2tiZF9zZXQxW2ldLCBrYmQtPmRldi0+a2V5Yml0KTsKLQkJc2V0X2JpdChoaWxfa2JkX3NldDNbaV0sIGtiZC0+ZGV2LT5rZXliaXQpOwotCX0KLQljbGVhcl9iaXQoMCwga2JkLT5kZXYtPmtleWJpdCk7Ci0KLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uoa2JkLT5kZXYpOwotCXByaW50ayhLRVJOX0lORk8gImlucHV0OiAlcywgSUQ6ICVkXG4iLAotCQlrYmQtPmRldi0+bmFtZSwgZGlkKTsKLQotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCAwKTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOwotCXNlcmlvLT53cml0ZShzZXJpbywgSElMX0NNRF9FSzEpOyAvKiBFbmFibGUgS2V5c3dpdGNoIEF1dG9yZXBlYXQgMSAqLwotCWRvd24oJmtiZC0+c2VtKTsKLQl1cCgma2JkLT5zZW0pOworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaWYgKGVycm9yKQorCQlnb3RvIGJhaWwxOwogCiAJcmV0dXJuIDA7Ci0gYmFpbDI6CisKKyBiYWlsMToKIAlzZXJpb19jbG9zZShzZXJpbyk7CiAJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOwotIGJhaWwxOgotCWlucHV0X2ZyZWVfZGV2aWNlKGtiZC0+ZGV2KTsKICBiYWlsMDoKLQlrZnJlZShrYmQpOwotCXJldHVybiAtRUlPOworCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJa2ZyZWUoZGV2KTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VyaW9fZGV2aWNlX2lkIGhpbF9rYmRfaWRzW10gPSB7CitzdGF0aWMgc3RydWN0IHNlcmlvX2RldmljZV9pZCBoaWxfZGV2X2lkc1tdID0gewogCXsKIAkJLnR5cGUgPSBTRVJJT19ISUxfTUxDLAogCQkucHJvdG8gPSBTRVJJT19ISUwsCkBAIC0zNzgsMjYgKzU2NywyNiBAQAogCXsgMCB9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNlcmlvX2RyaXZlciBoaWxfa2JkX3NlcmlvX2RydiA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2VyaW9fZHJpdmVyIGhpbF9zZXJpb19kcnYgPSB7CiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gImhpbF9rYmQiLAorCQkubmFtZQk9ICJoaWxfZGV2IiwKIAl9LAotCS5kZXNjcmlwdGlvbgk9ICJIUCBISUwga2V5Ym9hcmQgZHJpdmVyIiwKLQkuaWRfdGFibGUJPSBoaWxfa2JkX2lkcywKLQkuY29ubmVjdAk9IGhpbF9rYmRfY29ubmVjdCwKLQkuZGlzY29ubmVjdAk9IGhpbF9rYmRfZGlzY29ubmVjdCwKLQkuaW50ZXJydXB0CT0gaGlsX2tiZF9pbnRlcnJ1cHQKKwkuZGVzY3JpcHRpb24JPSAiSFAgSElMIGtleWJvYXJkL21vdXNlL3RhYmxldCBkcml2ZXIiLAorCS5pZF90YWJsZQk9IGhpbF9kZXZfaWRzLAorCS5jb25uZWN0CT0gaGlsX2Rldl9jb25uZWN0LAorCS5kaXNjb25uZWN0CT0gaGlsX2Rldl9kaXNjb25uZWN0LAorCS5pbnRlcnJ1cHQJPSBoaWxfZGV2X2ludGVycnVwdAogfTsKIAotc3RhdGljIGludCBfX2luaXQgaGlsX2tiZF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBoaWxfZGV2X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZoaWxfa2JkX3NlcmlvX2Rydik7CisJcmV0dXJuIHNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmaGlsX3NlcmlvX2Rydik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBoaWxfa2JkX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBoaWxfZGV2X2V4aXQodm9pZCkKIHsKLQlzZXJpb191bnJlZ2lzdGVyX2RyaXZlcigmaGlsX2tiZF9zZXJpb19kcnYpOworCXNlcmlvX3VucmVnaXN0ZXJfZHJpdmVyKCZoaWxfc2VyaW9fZHJ2KTsKIH0KIAotbW9kdWxlX2luaXQoaGlsX2tiZF9pbml0KTsKLW1vZHVsZV9leGl0KGhpbF9rYmRfZXhpdCk7Cittb2R1bGVfaW5pdChoaWxfZGV2X2luaXQpOworbW9kdWxlX2V4aXQoaGlsX2Rldl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbGtrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbGtrYmQuYwppbmRleCA0NzMwZWYzLi5mOTg0N2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xra2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9sa2tiZC5jCkBAIC01MjUsMTIgKzUyNSwxMiBAQAogCQkJQ0hFQ0tfTEVEIChsaywgbGVkc19vbiwgbGVkc19vZmYsIExFRF9TQ1JPTExMLCBMS19MRURfU0NST0xMTE9DSyk7CiAJCQlDSEVDS19MRUQgKGxrLCBsZWRzX29uLCBsZWRzX29mZiwgTEVEX1NMRUVQLCBMS19MRURfV0FJVCk7CiAJCQlpZiAobGVkc19vbiAhPSAwKSB7Ci0JCQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfTEVEX09OKTsKLQkJCQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIGxlZHNfb24pOworCQkJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIExLX0NNRF9MRURfT04pOworCQkJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIGxlZHNfb24pOwogCQkJfQogCQkJaWYgKGxlZHNfb2ZmICE9IDApIHsKLQkJCQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIExLX0NNRF9MRURfT0ZGKTsKLQkJCQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIGxlZHNfb2ZmKTsKKwkJCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfTEVEX09GRik7CisJCQkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgbGVkc19vZmYpOwogCQkJfQogCQkJcmV0dXJuIDA7CiAKQEAgLTUzOSwyMCArNTM5LDIwIEBACiAJCQkJY2FzZSBTTkRfQ0xJQ0s6CiAJCQkJCWlmICh2YWx1ZSA9PSAwKSB7CiAJCQkJCQlEQkcgKCIlczogRGVhY3RpdmF0aW5nIGtleSBjbGlja3NcbiIsIF9fZnVuY19fKTsKLQkJCQkJCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0RJU0FCTEVfS0VZQ0xJQ0spOwotCQkJCQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfRElTQUJMRV9DVFJDTElDSyk7CisJCQkJCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfRElTQUJMRV9LRVlDTElDSyk7CisJCQkJCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfRElTQUJMRV9DVFJDTElDSyk7CiAJCQkJCX0gZWxzZSB7CiAJCQkJCQlEQkcgKCIlczogQWN0aXZhdGluZyBrZXkgY2xpY2tzXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJCQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIExLX0NNRF9FTkFCTEVfS0VZQ0xJQ0spOwotCQkJCQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCB2b2x1bWVfdG9faHcgKGxrLT5rZXljbGlja192b2x1bWUpKTsKLQkJCQkJCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0VOQUJMRV9DVFJDTElDSyk7Ci0JCQkJCQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIHZvbHVtZV90b19odyAobGstPmN0cmxjbGlja192b2x1bWUpKTsKKwkJCQkJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIExLX0NNRF9FTkFCTEVfS0VZQ0xJQ0spOworCQkJCQkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgdm9sdW1lX3RvX2h3IChsay0+a2V5Y2xpY2tfdm9sdW1lKSk7CisJCQkJCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfRU5BQkxFX0NUUkNMSUNLKTsKKwkJCQkJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIHZvbHVtZV90b19odyAobGstPmN0cmxjbGlja192b2x1bWUpKTsKIAkJCQkJfQogCQkJCQlyZXR1cm4gMDsKIAogCQkJCWNhc2UgU05EX0JFTEw6CiAJCQkJCWlmICh2YWx1ZSAhPSAwKQotCQkJCQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfU09VTkRfQkVMTCk7CisJCQkJCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfU09VTkRfQkVMTCk7CiAKIAkJCQkJcmV0dXJuIDA7CiAJCQl9CkBAIC01NzksMTAgKzU3OSwxMCBAQAogCXVuc2lnbmVkIGNoYXIgbGVkc19vZmYgPSAwOwogCiAJLyogQXNrIGZvciBJRCAqLwotCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX1JFUVVFU1RfSUQpOworCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIExLX0NNRF9SRVFVRVNUX0lEKTsKIAogCS8qIFJlc2V0IHBhcmFtZXRlcnMgKi8KLQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIExLX0NNRF9TRVRfREVGQVVMVFMpOworCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIExLX0NNRF9TRVRfREVGQVVMVFMpOwogCiAJLyogU2V0IExFRHMgKi8KIAlDSEVDS19MRUQgKGxrLCBsZWRzX29uLCBsZWRzX29mZiwgTEVEX0NBUFNMLCBMS19MRURfU0hJRlRMT0NLKTsKQEAgLTU5MCwxMiArNTkwLDEyIEBACiAJQ0hFQ0tfTEVEIChsaywgbGVkc19vbiwgbGVkc19vZmYsIExFRF9TQ1JPTExMLCBMS19MRURfU0NST0xMTE9DSyk7CiAJQ0hFQ0tfTEVEIChsaywgbGVkc19vbiwgbGVkc19vZmYsIExFRF9TTEVFUCwgTEtfTEVEX1dBSVQpOwogCWlmIChsZWRzX29uICE9IDApIHsKLQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfTEVEX09OKTsKLQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBsZWRzX29uKTsKKwkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0xFRF9PTik7CisJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIGxlZHNfb24pOwogCX0KIAlpZiAobGVkc19vZmYgIT0gMCkgewotCQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIExLX0NNRF9MRURfT0ZGKTsKLQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBsZWRzX29mZik7CisJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIExLX0NNRF9MRURfT0ZGKTsKKwkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgbGVkc19vZmYpOwogCX0KIAogCS8qCkBAIC02MDMsMzEgKzYwMywzMSBAQAogCSAqIG9ubHkgd29yayB3aXRoIGEgTEs0MDEga2V5Ym9hcmQgYW5kIGdyYW50cyBhY2Nlc3MgdG8KIAkgKiBMQWx0LCBSQWx0LCBSQ29tcG9zZSBhbmQgUlNoaWZ0LgogCSAqLwotCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0VOQUJMRV9MSzQwMSk7CisJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0VOQUJMRV9MSzQwMSk7CiAKIAkvKiBTZXQgYWxsIGtleXMgdG8gVVBET1dOIG1vZGUgKi8KIAlmb3IgKGRpdmlzaW9uID0gMTsgZGl2aXNpb24gPD0gMTQ7IGRpdmlzaW9uKyspCi0JCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX1NFVF9NT0RFIChMS19NT0RFX1VQRE9XTiwKKwkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX1NFVF9NT0RFIChMS19NT0RFX1VQRE9XTiwKIAkJCQkJZGl2aXNpb24pKTsKIAogCS8qIEVuYWJsZSBiZWxsIGFuZCBzZXQgdm9sdW1lICovCi0JbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfRU5BQkxFX0JFTEwpOwotCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgdm9sdW1lX3RvX2h3IChsay0+YmVsbF92b2x1bWUpKTsKKwlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfRU5BQkxFX0JFTEwpOworCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIHZvbHVtZV90b19odyAobGstPmJlbGxfdm9sdW1lKSk7CiAKIAkvKiBFbmFibGUvZGlzYWJsZSBrZXljbGljayAoYW5kIHBvc3NpYmx5IHNldCB2b2x1bWUpICovCiAJaWYgKHRlc3RfYml0IChTTkRfQ0xJQ0ssIGxrLT5kZXYtPnNuZCkpIHsKLQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfRU5BQkxFX0tFWUNMSUNLKTsKLQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCB2b2x1bWVfdG9faHcgKGxrLT5rZXljbGlja192b2x1bWUpKTsKLQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfRU5BQkxFX0NUUkNMSUNLKTsKLQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCB2b2x1bWVfdG9faHcgKGxrLT5jdHJsY2xpY2tfdm9sdW1lKSk7CisJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIExLX0NNRF9FTkFCTEVfS0VZQ0xJQ0spOworCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCB2b2x1bWVfdG9faHcgKGxrLT5rZXljbGlja192b2x1bWUpKTsKKwkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0VOQUJMRV9DVFJDTElDSyk7CisJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIHZvbHVtZV90b19odyAobGstPmN0cmxjbGlja192b2x1bWUpKTsKIAl9IGVsc2UgewotCQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIExLX0NNRF9ESVNBQkxFX0tFWUNMSUNLKTsKLQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfRElTQUJMRV9DVFJDTElDSyk7CisJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIExLX0NNRF9ESVNBQkxFX0tFWUNMSUNLKTsKKwkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0RJU0FCTEVfQ1RSQ0xJQ0spOwogCX0KIAogCS8qIFNvdW5kIHRoZSBiZWxsIGlmIG5lZWRlZCAqLwogCWlmICh0ZXN0X2JpdCAoU05EX0JFTEwsIGxrLT5kZXYtPnNuZCkpCi0JCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX1NPVU5EX0JFTEwpOworCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfU09VTkRfQkVMTCk7CiB9CiAKIC8qCkBAIC02ODQsOCArNjg0LDEwIEBACiAJaW5wdXRfZGV2LT5rZXljb2RlID0gbGstPmtleWNvZGU7CiAJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZiAobGtfa2V5Y29kZV90KTsKIAlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBMS19OVU1fS0VZQ09ERVM7CisKIAlmb3IgKGkgPSAwOyBpIDwgTEtfTlVNX0tFWUNPREVTOyBpKyspCi0JCXNldF9iaXQgKGxrLT5rZXljb2RlW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdCAobGstPmtleWNvZGVbaV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKKwlfX2NsZWFyX2JpdChLRVlfUkVTRVJWRUQsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAogCXNlcmlvX3NldF9kcnZkYXRhIChzZXJpbywgbGspOwogCkBAIC02OTcsNyArNjk5LDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWwzOwogCi0JbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfUE9XRVJDWUNMRV9SRVNFVCk7CisJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX1BPV0VSQ1lDTEVfUkVTRVQpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWF0cml4X2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tYXRyaXhfa2V5cGFkLmMKaW5kZXggNTQxYjk4MS4uOTFjZmU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tYXRyaXhfa2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tYXRyaXhfa2V5cGFkLmMKQEAgLTMxOSw3ICszMTksNiBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAl1bnNpZ25lZCBzaG9ydCAqa2V5Y29kZXM7CiAJdW5zaWduZWQgaW50IHJvd19zaGlmdDsKLQlpbnQgaTsKIAlpbnQgZXJyOwogCiAJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKQEAgLTM2MywxOCArMzYyLDEwIEBACiAKIAlpbnB1dF9kZXYtPmtleWNvZGUJPSBrZXljb2RlczsKIAlpbnB1dF9kZXYtPmtleWNvZGVzaXplCT0gc2l6ZW9mKCprZXljb2Rlcyk7Ci0JaW5wdXRfZGV2LT5rZXljb2RlbWF4CT0gcGRhdGEtPm51bV9yb3dfZ3Bpb3MgPDwga2V5cGFkLT5yb3dfc2hpZnQ7CisJaW5wdXRfZGV2LT5rZXljb2RlbWF4CT0gcGRhdGEtPm51bV9yb3dfZ3Bpb3MgPDwgcm93X3NoaWZ0OwogCi0JZm9yIChpID0gMDsgaSA8IGtleW1hcF9kYXRhLT5rZXltYXBfc2l6ZTsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCBrZXkgPSBrZXltYXBfZGF0YS0+a2V5bWFwW2ldOwotCQl1bnNpZ25lZCBpbnQgcm93ID0gS0VZX1JPVyhrZXkpOwotCQl1bnNpZ25lZCBpbnQgY29sID0gS0VZX0NPTChrZXkpOwotCQl1bnNpZ25lZCBzaG9ydCBjb2RlID0gS0VZX1ZBTChrZXkpOwotCi0JCWtleWNvZGVzW01BVFJJWF9TQ0FOX0NPREUocm93LCBjb2wsIHJvd19zaGlmdCldID0gY29kZTsKLQkJX19zZXRfYml0KGNvZGUsIGlucHV0X2Rldi0+a2V5Yml0KTsKLQl9Ci0JX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBpbnB1dF9kZXYtPmtleWJpdCk7CisJbWF0cml4X2tleXBhZF9idWlsZF9rZXltYXAoa2V5bWFwX2RhdGEsIHJvd19zaGlmdCwKKwkJCQkgICBpbnB1dF9kZXYtPmtleWNvZGUsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAogCWlucHV0X3NldF9jYXBhYmlsaXR5KGlucHV0X2RldiwgRVZfTVNDLCBNU0NfU0NBTik7CiAJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBrZXlwYWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3B4YTI3eF9rZXlwYWQuYwppbmRleCAwZDJmYzY0Li43OWNkM2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3B4YTI3eF9rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3B4YTI3eF9rZXlwYWQuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKiBCYXNlZCBvbiBhIHByZXZpb3VzIGltcGxlbWVudGF0aW9ucyBieSBLZXZpbiBPJ0Nvbm5vcgogICogPGtldmluX2F0X2tvY29ubm9yLm5ldD4gYW5kIEFsZXggT3Nib3JuZSA8Ym9ib2Zkb29tQGdtYWlsLmNvbT4gYW5kCi0gKiBvbiBzb21lIHN1Z2dlc3Rpb25zIGJ5IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4uCisgKiBvbiBzb21lIHN1Z2dlc3Rpb25zIGJ5IE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+LgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMjUsMTMgKzI1LDEzIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMjd4X2tleXBhZC5oPgotCiAvKgogICogS2V5cGFkIENvbnRyb2xsZXIgcmVnaXN0ZXJzCiAgKi8KQEAgLTk1LDcgKzk1LDggQEAKICNkZWZpbmUga2V5cGFkX3JlYWRsKG9mZikJX19yYXdfcmVhZGwoa2V5cGFkLT5tbWlvX2Jhc2UgKyAob2ZmKSkKICNkZWZpbmUga2V5cGFkX3dyaXRlbChvZmYsIHYpCV9fcmF3X3dyaXRlbCgodiksIGtleXBhZC0+bW1pb19iYXNlICsgKG9mZikpCiAKLSNkZWZpbmUgTUFYX01BVFJJWF9LRVlfTlVNCSg4ICogOCkKKyNkZWZpbmUgTUFYX01BVFJJWF9LRVlfTlVNCShNQVhfTUFUUklYX0tFWV9ST1dTICogTUFYX01BVFJJWF9LRVlfQ09MUykKKyNkZWZpbmUgTUFYX0tFWVBBRF9LRVlTCQkoTUFYX01BVFJJWF9LRVlfTlVNICsgTUFYX0RJUkVDVF9LRVlfTlVNKQogCiBzdHJ1Y3QgcHhhMjd4X2tleXBhZCB7CiAJc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CkBAIC0xMDYsNzMgKzEwNyw4MiBAQAogCiAJaW50IGlycTsKIAotCS8qIG1hdHJpeCBrZXkgY29kZSBtYXAgKi8KLQl1bnNpZ25lZCBpbnQgbWF0cml4X2tleWNvZGVzW01BWF9NQVRSSVhfS0VZX05VTV07CisJdW5zaWduZWQgc2hvcnQga2V5Y29kZXNbTUFYX0tFWVBBRF9LRVlTXTsKKwlpbnQgcm90YXJ5X3JlbF9jb2RlWzJdOwogCiAJLyogc3RhdGUgcm93IGJpdHMgb2YgZWFjaCBjb2x1bW4gc2NhbiAqLwogCXVpbnQzMl90IG1hdHJpeF9rZXlfc3RhdGVbTUFYX01BVFJJWF9LRVlfQ09MU107CiAJdWludDMyX3QgZGlyZWN0X2tleV9zdGF0ZTsKIAogCXVuc2lnbmVkIGludCBkaXJlY3Rfa2V5X21hc2s7Ci0KLQlpbnQgcm90YXJ5X3JlbF9jb2RlWzJdOwotCWludCByb3RhcnlfdXBfa2V5WzJdOwotCWludCByb3RhcnlfZG93bl9rZXlbMl07CiB9OwogCiBzdGF0aWMgdm9pZCBweGEyN3hfa2V5cGFkX2J1aWxkX2tleWNvZGUoc3RydWN0IHB4YTI3eF9rZXlwYWQgKmtleXBhZCkKIHsKIAlzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGtleXBhZC0+cGRhdGE7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0ga2V5cGFkLT5pbnB1dF9kZXY7Ci0JdW5zaWduZWQgaW50ICprZXk7CisJdW5zaWduZWQgc2hvcnQga2V5Y29kZTsKIAlpbnQgaTsKIAotCWtleSA9ICZwZGF0YS0+bWF0cml4X2tleV9tYXBbMF07Ci0JZm9yIChpID0gMDsgaSA8IHBkYXRhLT5tYXRyaXhfa2V5X21hcF9zaXplOyBpKyssIGtleSsrKSB7Ci0JCWludCByb3cgPSAoKCprZXkpID4+IDI4KSAmIDB4ZjsKLQkJaW50IGNvbCA9ICgoKmtleSkgPj4gMjQpICYgMHhmOwotCQlpbnQgY29kZSA9ICgqa2V5KSAmIDB4ZmZmZmZmOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bWF0cml4X2tleV9tYXBfc2l6ZTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBrZXkgPSBwZGF0YS0+bWF0cml4X2tleV9tYXBbaV07CisJCXVuc2lnbmVkIGludCByb3cgPSBLRVlfUk9XKGtleSk7CisJCXVuc2lnbmVkIGludCBjb2wgPSBLRVlfQ09MKGtleSk7CisJCXVuc2lnbmVkIGludCBzY2FuY29kZSA9IE1BVFJJWF9TQ0FOX0NPREUocm93LCBjb2wsCisJCQkJCQkJIE1BVFJJWF9ST1dfU0hJRlQpOwogCi0JCWtleXBhZC0+bWF0cml4X2tleWNvZGVzWyhyb3cgPDwgMykgKyBjb2xdID0gY29kZTsKLQkJc2V0X2JpdChjb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCWtleWNvZGUgPSBLRVlfVkFMKGtleSk7CisJCWtleXBhZC0+a2V5Y29kZXNbc2NhbmNvZGVdID0ga2V5Y29kZTsKKwkJX19zZXRfYml0KGtleWNvZGUsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPmRpcmVjdF9rZXlfbnVtOyBpKyspCi0JCXNldF9iaXQocGRhdGEtPmRpcmVjdF9rZXlfbWFwW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0KLQlrZXlwYWQtPnJvdGFyeV91cF9rZXlbMF0gPSBwZGF0YS0+cm90YXJ5MF91cF9rZXk7Ci0Ja2V5cGFkLT5yb3RhcnlfdXBfa2V5WzFdID0gcGRhdGEtPnJvdGFyeTFfdXBfa2V5OwotCWtleXBhZC0+cm90YXJ5X2Rvd25fa2V5WzBdID0gcGRhdGEtPnJvdGFyeTBfZG93bl9rZXk7Ci0Ja2V5cGFkLT5yb3RhcnlfZG93bl9rZXlbMV0gPSBwZGF0YS0+cm90YXJ5MV9kb3duX2tleTsKLQlrZXlwYWQtPnJvdGFyeV9yZWxfY29kZVswXSA9IHBkYXRhLT5yb3RhcnkwX3JlbF9jb2RlOwotCWtleXBhZC0+cm90YXJ5X3JlbF9jb2RlWzFdID0gcGRhdGEtPnJvdGFyeTFfcmVsX2NvZGU7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5kaXJlY3Rfa2V5X251bTsgaSsrKSB7CisJCWtleWNvZGUgPSBwZGF0YS0+ZGlyZWN0X2tleV9tYXBbaV07CisJCWtleXBhZC0+a2V5Y29kZXNbTUFYX01BVFJJWF9LRVlfTlVNICsgaV0gPSBrZXljb2RlOworCQlfX3NldF9iaXQoa2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOworCX0KIAogCWlmIChwZGF0YS0+ZW5hYmxlX3JvdGFyeTApIHsKIAkJaWYgKHBkYXRhLT5yb3RhcnkwX3VwX2tleSAmJiBwZGF0YS0+cm90YXJ5MF9kb3duX2tleSkgewotCQkJc2V0X2JpdChwZGF0YS0+cm90YXJ5MF91cF9rZXksIGlucHV0X2Rldi0+a2V5Yml0KTsKLQkJCXNldF9iaXQocGRhdGEtPnJvdGFyeTBfZG93bl9rZXksIGlucHV0X2Rldi0+a2V5Yml0KTsKLQkJfSBlbHNlCi0JCQlzZXRfYml0KHBkYXRhLT5yb3RhcnkwX3JlbF9jb2RlLCBpbnB1dF9kZXYtPnJlbGJpdCk7CisJCQlrZXljb2RlID0gcGRhdGEtPnJvdGFyeTBfdXBfa2V5OworCQkJa2V5cGFkLT5rZXljb2Rlc1tNQVhfTUFUUklYX0tFWV9OVU0gKyAwXSA9IGtleWNvZGU7CisJCQlfX3NldF9iaXQoa2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOworCisJCQlrZXljb2RlID0gcGRhdGEtPnJvdGFyeTBfZG93bl9rZXk7CisJCQlrZXlwYWQtPmtleWNvZGVzW01BWF9NQVRSSVhfS0VZX05VTSArIDFdID0ga2V5Y29kZTsKKwkJCV9fc2V0X2JpdChrZXljb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwkJCWtleXBhZC0+cm90YXJ5X3JlbF9jb2RlWzBdID0gLTE7CisJCX0gZWxzZSB7CisJCQlrZXlwYWQtPnJvdGFyeV9yZWxfY29kZVswXSA9IHBkYXRhLT5yb3RhcnkwX3JlbF9jb2RlOworCQkJX19zZXRfYml0KHBkYXRhLT5yb3RhcnkwX3JlbF9jb2RlLCBpbnB1dF9kZXYtPnJlbGJpdCk7CisJCX0KIAl9CiAKIAlpZiAocGRhdGEtPmVuYWJsZV9yb3RhcnkxKSB7CiAJCWlmIChwZGF0YS0+cm90YXJ5MV91cF9rZXkgJiYgcGRhdGEtPnJvdGFyeTFfZG93bl9rZXkpIHsKLQkJCXNldF9iaXQocGRhdGEtPnJvdGFyeTFfdXBfa2V5LCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCQlzZXRfYml0KHBkYXRhLT5yb3RhcnkxX2Rvd25fa2V5LCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCX0gZWxzZQotCQkJc2V0X2JpdChwZGF0YS0+cm90YXJ5MV9yZWxfY29kZSwgaW5wdXRfZGV2LT5yZWxiaXQpOwotCX0KLX0KKwkJCWtleWNvZGUgPSBwZGF0YS0+cm90YXJ5MV91cF9rZXk7CisJCQlrZXlwYWQtPmtleWNvZGVzW01BWF9NQVRSSVhfS0VZX05VTSArIDJdID0ga2V5Y29kZTsKKwkJCV9fc2V0X2JpdChrZXljb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGxvb2t1cF9tYXRyaXhfa2V5Y29kZSgKLQkJc3RydWN0IHB4YTI3eF9rZXlwYWQgKmtleXBhZCwgaW50IHJvdywgaW50IGNvbCkKLXsKLQlyZXR1cm4ga2V5cGFkLT5tYXRyaXhfa2V5Y29kZXNbKHJvdyA8PCAzKSArIGNvbF07CisJCQlrZXljb2RlID0gcGRhdGEtPnJvdGFyeTFfZG93bl9rZXk7CisJCQlrZXlwYWQtPmtleWNvZGVzW01BWF9NQVRSSVhfS0VZX05VTSArIDNdID0ga2V5Y29kZTsKKwkJCV9fc2V0X2JpdChrZXljb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwkJCWtleXBhZC0+cm90YXJ5X3JlbF9jb2RlWzFdID0gLTE7CisJCX0gZWxzZSB7CisJCQlrZXlwYWQtPnJvdGFyeV9yZWxfY29kZVsxXSA9IHBkYXRhLT5yb3RhcnkxX3JlbF9jb2RlOworCQkJX19zZXRfYml0KHBkYXRhLT5yb3RhcnkxX3JlbF9jb2RlLCBpbnB1dF9kZXYtPnJlbGJpdCk7CisJCX0KKwl9CisKKwlfX2NsZWFyX2JpdChLRVlfUkVTRVJWRUQsIGlucHV0X2Rldi0+a2V5Yml0KTsKIH0KIAogc3RhdGljIHZvaWQgcHhhMjd4X2tleXBhZF9zY2FuX21hdHJpeChzdHJ1Y3QgcHhhMjd4X2tleXBhZCAqa2V5cGFkKQogewogCXN0cnVjdCBweGEyN3hfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2V5cGFkLT5wZGF0YTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBrZXlwYWQtPmlucHV0X2RldjsKIAlpbnQgcm93LCBjb2wsIG51bV9rZXlzX3ByZXNzZWQgPSAwOwogCXVpbnQzMl90IG5ld19zdGF0ZVtNQVhfTUFUUklYX0tFWV9DT0xTXTsKIAl1aW50MzJfdCBrcGFzID0ga2V5cGFkX3JlYWRsKEtQQVMpOwpAQCAtMjE1LDYgKzIyNSw3IEBACiBzY2FuOgogCWZvciAoY29sID0gMDsgY29sIDwgcGRhdGEtPm1hdHJpeF9rZXlfY29sczsgY29sKyspIHsKIAkJdWludDMyX3QgYml0c19jaGFuZ2VkOworCQlpbnQgY29kZTsKIAogCQliaXRzX2NoYW5nZWQgPSBrZXlwYWQtPm1hdHJpeF9rZXlfc3RhdGVbY29sXSBeIG5ld19zdGF0ZVtjb2xdOwogCQlpZiAoYml0c19jaGFuZ2VkID09IDApCkBAIC0yMjQsMTIgKzIzNSwxMyBAQAogCQkJaWYgKChiaXRzX2NoYW5nZWQgJiAoMSA8PCByb3cpKSA9PSAwKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpbnB1dF9yZXBvcnRfa2V5KGtleXBhZC0+aW5wdXRfZGV2LAotCQkJCWxvb2t1cF9tYXRyaXhfa2V5Y29kZShrZXlwYWQsIHJvdywgY29sKSwKLQkJCQluZXdfc3RhdGVbY29sXSAmICgxIDw8IHJvdykpOworCQkJY29kZSA9IE1BVFJJWF9TQ0FOX0NPREUocm93LCBjb2wsIE1BVFJJWF9ST1dfU0hJRlQpOworCQkJaW5wdXRfZXZlbnQoaW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBjb2RlKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfZGV2LCBrZXlwYWQtPmtleWNvZGVzW2NvZGVdLAorCQkJCQkgbmV3X3N0YXRlW2NvbF0gJiAoMSA8PCByb3cpKTsKIAkJfQogCX0KLQlpbnB1dF9zeW5jKGtleXBhZC0+aW5wdXRfZGV2KTsKKwlpbnB1dF9zeW5jKGlucHV0X2Rldik7CiAJbWVtY3B5KGtleXBhZC0+bWF0cml4X2tleV9zdGF0ZSwgbmV3X3N0YXRlLCBzaXplb2YobmV3X3N0YXRlKSk7CiB9CiAKQEAgLTI1MiwxMyArMjY0LDE1IEBACiAJaWYgKGRlbHRhID09IDApCiAJCXJldHVybjsKIAotCWlmIChrZXlwYWQtPnJvdGFyeV91cF9rZXlbcl0gJiYga2V5cGFkLT5yb3RhcnlfZG93bl9rZXlbcl0pIHsKLQkJaW50IGtleWNvZGUgPSAoZGVsdGEgPiAwKSA/IGtleXBhZC0+cm90YXJ5X3VwX2tleVtyXSA6Ci0JCQkJCSAgICBrZXlwYWQtPnJvdGFyeV9kb3duX2tleVtyXTsKKwlpZiAoa2V5cGFkLT5yb3RhcnlfcmVsX2NvZGVbcl0gPT0gLTEpIHsKKwkJaW50IGNvZGUgPSBNQVhfTUFUUklYX0tFWV9OVU0gKyAyICogciArIChkZWx0YSA+IDAgPyAwIDogMSk7CisJCXVuc2lnbmVkIGNoYXIga2V5Y29kZSA9IGtleXBhZC0+a2V5Y29kZXNbY29kZV07CiAKIAkJLyogc2ltdWxhdGUgYSBwcmVzcy1uLXJlbGVhc2UgKi8KKwkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBjb2RlKTsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtleWNvZGUsIDEpOwogCQlpbnB1dF9zeW5jKGRldik7CisJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0NBTiwgY29kZSk7CiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXljb2RlLCAwKTsKIAkJaW5wdXRfc3luYyhkZXYpOwogCX0gZWxzZSB7CkBAIC0yODYsNiArMzAwLDcgQEAKIHN0YXRpYyB2b2lkIHB4YTI3eF9rZXlwYWRfc2Nhbl9kaXJlY3Qoc3RydWN0IHB4YTI3eF9rZXlwYWQgKmtleXBhZCkKIHsKIAlzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGtleXBhZC0+cGRhdGE7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0ga2V5cGFkLT5pbnB1dF9kZXY7CiAJdW5zaWduZWQgaW50IG5ld19zdGF0ZTsKIAl1aW50MzJfdCBrcGRrLCBiaXRzX2NoYW5nZWQ7CiAJaW50IGk7CkBAIC0yOTUsOSArMzEwLDYgQEAKIAlpZiAocGRhdGEtPmVuYWJsZV9yb3RhcnkwIHx8IHBkYXRhLT5lbmFibGVfcm90YXJ5MSkKIAkJcHhhMjd4X2tleXBhZF9zY2FuX3JvdGFyeShrZXlwYWQpOwogCi0JaWYgKHBkYXRhLT5kaXJlY3Rfa2V5X21hcCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KIAluZXdfc3RhdGUgPSBLUERLX0RLKGtwZGspICYga2V5cGFkLT5kaXJlY3Rfa2V5X21hc2s7CiAJYml0c19jaGFuZ2VkID0ga2V5cGFkLT5kaXJlY3Rfa2V5X3N0YXRlIF4gbmV3X3N0YXRlOwogCkBAIC0zMDUsMTIgKzMxNywxNSBAQAogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPmRpcmVjdF9rZXlfbnVtOyBpKyspIHsKLQkJaWYgKGJpdHNfY2hhbmdlZCAmICgxIDw8IGkpKQotCQkJaW5wdXRfcmVwb3J0X2tleShrZXlwYWQtPmlucHV0X2RldiwKLQkJCQkJcGRhdGEtPmRpcmVjdF9rZXlfbWFwW2ldLAotCQkJCQkobmV3X3N0YXRlICYgKDEgPDwgaSkpKTsKKwkJaWYgKGJpdHNfY2hhbmdlZCAmICgxIDw8IGkpKSB7CisJCQlpbnQgY29kZSA9IE1BWF9NQVRSSVhfS0VZX05VTSArIGk7CisKKwkJCWlucHV0X2V2ZW50KGlucHV0X2RldiwgRVZfTVNDLCBNU0NfU0NBTiwgY29kZSk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2Rldiwga2V5cGFkLT5rZXljb2Rlc1tjb2RlXSwKKwkJCQkJIG5ld19zdGF0ZSAmICgxIDw8IGkpKTsKKwkJfQogCX0KLQlpbnB1dF9zeW5jKGtleXBhZC0+aW5wdXRfZGV2KTsKKwlpbnB1dF9zeW5jKGlucHV0X2Rldik7CiAJa2V5cGFkLT5kaXJlY3Rfa2V5X3N0YXRlID0gbmV3X3N0YXRlOwogfQogCkBAIC0zODgsOCArNDAzLDkgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBweGEyN3hfa2V5cGFkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyN3hfa2V5cGFkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcHhhMjd4X2tleXBhZCAqa2V5cGFkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAljbGtfZGlzYWJsZShrZXlwYWQtPmNsayk7CkBAIC00MDAsOCArNDE2LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEyN3hfa2V5cGFkX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBweGEyN3hfa2V5cGFkX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBweGEyN3hfa2V5cGFkICprZXlwYWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBrZXlwYWQtPmlucHV0X2RldjsKIApAQCAtNDIwLDU1ICs0MzcsNTggQEAKIAogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgcHhhMjd4X2tleXBhZF9zdXNwZW5kCU5VTEwKLSNkZWZpbmUgcHhhMjd4X2tleXBhZF9yZXN1bWUJTlVMTAotI2VuZGlmCiAKLSNkZWZpbmUgcmVzX3NpemUocmVzKQkoKHJlcyktPmVuZCAtIChyZXMpLT5zdGFydCArIDEpCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcHhhMjd4X2tleXBhZF9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBweGEyN3hfa2V5cGFkX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBweGEyN3hfa2V5cGFkX3Jlc3VtZSwKK307CisjZW5kaWYKIAogc3RhdGljIGludCBfX2RldmluaXQgcHhhMjd4X2tleXBhZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCBweGEyN3hfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHB4YTI3eF9rZXlwYWQgKmtleXBhZDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGlycSwgZXJyb3I7CiAKLQlrZXlwYWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHhhMjd4X2tleXBhZCksIEdGUF9LRVJORUwpOwotCWlmIChrZXlwYWQgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZHJpdmVyIGRhdGFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlrZXlwYWQtPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaWYgKGtleXBhZC0+cGRhdGEgPT0gTlVMTCkgeworCWlmIChwZGF0YSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGEgZGVmaW5lZFxuIik7Ci0JCWVycm9yID0gLUVJTlZBTDsKLQkJZ290byBmYWlsZWRfZnJlZTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoaXJxIDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGtleXBhZCBpcnFcbiIpOwotCQllcnJvciA9IC1FTlhJTzsKLQkJZ290byBmYWlsZWRfZnJlZTsKKwkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmIChyZXMgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IEkvTyBtZW1vcnlcbiIpOwotCQllcnJvciA9IC1FTlhJTzsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlrZXlwYWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHhhMjd4X2tleXBhZCksIEdGUF9LRVJORUwpOworCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICgha2V5cGFkIHx8ICFpbnB1dF9kZXYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CisJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBmYWlsZWRfZnJlZTsKIAl9CiAKLQlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzX3NpemUocmVzKSwgcGRldi0+bmFtZSk7CisJa2V5cGFkLT5wZGF0YSA9IHBkYXRhOworCWtleXBhZC0+aW5wdXRfZGV2ID0gaW5wdXRfZGV2OworCWtleXBhZC0+aXJxID0gaXJxOworCisJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSk7CiAJaWYgKHJlcyA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IEkvTyBtZW1vcnlcbiIpOwogCQllcnJvciA9IC1FQlVTWTsKIAkJZ290byBmYWlsZWRfZnJlZTsKIAl9CiAKLQlrZXlwYWQtPm1taW9fYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzX3NpemUocmVzKSk7CisJa2V5cGFkLT5tbWlvX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKGtleXBhZC0+bW1pb19iYXNlID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIEkvTyBtZW1vcnlcbiIpOwogCQllcnJvciA9IC1FTlhJTzsKQEAgLTQ4Miw0MyArNTAyLDM1IEBACiAJCWdvdG8gZmFpbGVkX2ZyZWVfaW87CiAJfQogCi0JLyogQ3JlYXRlIGFuZCByZWdpc3RlciB0aGUgaW5wdXQgZHJpdmVyLiAqLwotCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghaW5wdXRfZGV2KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBpbnB1dCBkZXZpY2VcbiIpOwotCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbGVkX3B1dF9jbGs7Ci0JfQotCiAJaW5wdXRfZGV2LT5uYW1lID0gcGRldi0+bmFtZTsKIAlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKIAlpbnB1dF9kZXYtPm9wZW4gPSBweGEyN3hfa2V5cGFkX29wZW47CiAJaW5wdXRfZGV2LT5jbG9zZSA9IHB4YTI3eF9rZXlwYWRfY2xvc2U7CiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAotCWtleXBhZC0+aW5wdXRfZGV2ID0gaW5wdXRfZGV2OworCWlucHV0X2Rldi0+a2V5Y29kZSA9IGtleXBhZC0+a2V5Y29kZXM7CisJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihrZXlwYWQtPmtleWNvZGVzWzBdKTsKKwlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKGtleXBhZC0+a2V5Y29kZXMpOworCiAJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBrZXlwYWQpOwogCiAJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRVApOwotCWlmICgoa2V5cGFkLT5wZGF0YS0+ZW5hYmxlX3JvdGFyeTAgJiYKLQkJCWtleXBhZC0+cGRhdGEtPnJvdGFyeTBfcmVsX2NvZGUpIHx8Ci0JICAgIChrZXlwYWQtPnBkYXRhLT5lbmFibGVfcm90YXJ5MSAmJgotCQkJa2V5cGFkLT5wZGF0YS0+cm90YXJ5MV9yZWxfY29kZSkpIHsKLQkJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVRfTUFTSyhFVl9SRUwpOwotCX0KKwlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4pOwogCiAJcHhhMjd4X2tleXBhZF9idWlsZF9rZXljb2RlKGtleXBhZCk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwga2V5cGFkKTsKKworCWlmICgocGRhdGEtPmVuYWJsZV9yb3RhcnkwICYmIGtleXBhZC0+cm90YXJ5X3JlbF9jb2RlWzBdICE9IC0xKSB8fAorCSAgICAocGRhdGEtPmVuYWJsZV9yb3RhcnkxICYmIGtleXBhZC0+cm90YXJ5X3JlbF9jb2RlWzFdICE9IC0xKSkgeworCQlpbnB1dF9kZXYtPmV2Yml0WzBdIHw9IEJJVF9NQVNLKEVWX1JFTCk7CisJfQogCiAJZXJyb3IgPSByZXF1ZXN0X2lycShpcnEsIHB4YTI3eF9rZXlwYWRfaXJxX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsCiAJCQkgICAgcGRldi0+bmFtZSwga2V5cGFkKTsKIAlpZiAoZXJyb3IpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSVJRXG4iKTsKLQkJZ290byBmYWlsZWRfZnJlZV9kZXY7CisJCWdvdG8gZmFpbGVkX3B1dF9jbGs7CiAJfQogCi0Ja2V5cGFkLT5pcnEgPSBpcnE7Ci0KIAkvKiBSZWdpc3RlciB0aGUgaW5wdXQgZGV2aWNlICovCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKIAlpZiAoZXJyb3IpIHsKQEAgLTUyNiwyMiArNTM4LDIxIEBACiAJCWdvdG8gZmFpbGVkX2ZyZWVfaXJxOwogCX0KIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGtleXBhZCk7CiAJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOwogCiAJcmV0dXJuIDA7CiAKIGZhaWxlZF9mcmVlX2lycToKIAlmcmVlX2lycShpcnEsIHBkZXYpOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotZmFpbGVkX2ZyZWVfZGV2OgotCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiBmYWlsZWRfcHV0X2NsazoKIAljbGtfcHV0KGtleXBhZC0+Y2xrKTsKIGZhaWxlZF9mcmVlX2lvOgogCWlvdW5tYXAoa2V5cGFkLT5tbWlvX2Jhc2UpOwogZmFpbGVkX2ZyZWVfbWVtOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNfc2l6ZShyZXMpKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIGZhaWxlZF9mcmVlOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiAJa2ZyZWUoa2V5cGFkKTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC01NTIsOCArNTYzLDYgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCWZyZWVfaXJxKGtleXBhZC0+aXJxLCBwZGV2KTsKLQotCWNsa19kaXNhYmxlKGtleXBhZC0+Y2xrKTsKIAljbGtfcHV0KGtleXBhZC0+Y2xrKTsKIAogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGtleXBhZC0+aW5wdXRfZGV2KTsKQEAgLTU2MiwxMCArNTcxLDExIEBACiAJaW91bm1hcChrZXlwYWQtPm1taW9fYmFzZSk7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNfc2l6ZShyZXMpKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGtleXBhZCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTc1LDExICs1ODUsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YTI3eF9rZXlwYWRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGEyN3hfa2V5cGFkX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocHhhMjd4X2tleXBhZF9yZW1vdmUpLAotCS5zdXNwZW5kCT0gcHhhMjd4X2tleXBhZF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gcHhhMjd4X2tleXBhZF9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInB4YTI3eC1rZXlwYWQiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnB4YTI3eF9rZXlwYWRfcG1fb3BzLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwppbmRleCBjZWE3MGU2Li4wNzE0YmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAljaGFyIGNsa19uYW1lWzhdOwotCWludCBpLCBrOworCWludCBpOwogCWludCBpcnEsIGVycm9yOwogCiAJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgewpAQCAtMTk1LDE3ICsxOTUsMTkgQEAKIAlpbnB1dC0+aWQucHJvZHVjdCA9IDB4MDAwMTsKIAlpbnB1dC0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAorCWlucHV0LT5rZXljb2RlID0gcGRhdGEtPmtleWNvZGVzOworCWlucHV0LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihwZGF0YS0+a2V5Y29kZXNbMF0pOworCWlucHV0LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShwZGF0YS0+a2V5Y29kZXMpOworCiAJZXJyb3IgPSByZXF1ZXN0X2lycShpcnEsIHNoX2tleXNjX2lzciwgMCwgcGRldi0+bmFtZSwgcGRldik7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IElSUVxuIik7CiAJCWdvdG8gZXJyNDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgU0hfS0VZU0NfTUFYS0VZUzsgaSsrKSB7Ci0JCWsgPSBwZGF0YS0+a2V5Y29kZXNbaV07Ci0JCWlmIChrKQotCQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaW5wdXQsIEVWX0tFWSwgayk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBTSF9LRVlTQ19NQVhLRVlTOyBpKyspCisJCV9fc2V0X2JpdChwZGF0YS0+a2V5Y29kZXNbaV0sIGlucHV0LT5rZXliaXQpOworCV9fY2xlYXJfYml0KEtFWV9SRVNFUlZFRCwgaW5wdXQtPmtleWJpdCk7CiAKIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dCk7CiAJaWYgKGVycm9yKSB7CkBAIC0yMjEsNyArMjIzLDkgQEAKIAlpb3dyaXRlMTYoS1lDUjJfSVJRX0xFVkVMLCBwcml2LT5pb21lbV9iYXNlICsgS1lDUjJfT0ZGUyk7CiAKIAlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisKIAlyZXR1cm4gMDsKKwogIGVycjU6CiAJZnJlZV9pcnEoaXJxLCBwZGV2KTsKICBlcnI0OgpAQCAtMjUyLDYgKzI1Niw3IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShwcml2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNjcsMTEgKzI3MiwxMiBAQAogCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKSB7CiAJCXZhbHVlIHw9IDB4ODA7CiAJCWVuYWJsZV9pcnFfd2FrZShpcnEpOwotCX0KLQllbHNlCisJfSBlbHNlIHsKIAkJdmFsdWUgJj0gfjB4ODA7CisJfQogCiAJaW93cml0ZTE2KHZhbHVlLCBwcml2LT5pb21lbV9iYXNlICsgS1lDUjFfT0ZGUyk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMKaW5kZXggOWZjZTZkMS4uNDcyYjU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bmtiZC5jCkBAIC03Myw3ICs3Myw3IEBACiAgKi8KIAogc3RydWN0IHN1bmtiZCB7Ci0JdW5zaWduZWQgY2hhciBrZXljb2RlWzEyOF07CisJdW5zaWduZWQgY2hhciBrZXljb2RlW0FSUkFZX1NJWkUoc3Vua2JkX2tleWNvZGUpXTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CiAJc3RydWN0IHNlcmlvICpzZXJpbzsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHE7CkBAIC04MSw3ICs4MSw3IEBACiAJY2hhciBuYW1lWzY0XTsKIAljaGFyIHBoeXNbMzJdOwogCWNoYXIgdHlwZTsKLQl1bnNpZ25lZCBjaGFyIGVuYWJsZWQ7CisJYm9vbCBlbmFibGVkOwogCXZvbGF0aWxlIHM4IHJlc2V0OwogCXZvbGF0aWxlIHM4IGxheW91dDsKIH07CkBAIC05NCwxMCArOTQsMTQgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzdW5rYmRfaW50ZXJydXB0KHN0cnVjdCBzZXJpbyAqc2VyaW8sCiAJCXVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBzdW5rYmQqIHN1bmtiZCA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvKTsKKwlzdHJ1Y3Qgc3Vua2JkICpzdW5rYmQgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7CiAKLQlpZiAoc3Vua2JkLT5yZXNldCA8PSAtMSkgewkJLyogSWYgY3BbaV0gaXMgMHhmZiwgc3Vua2JkLT5yZXNldCB3aWxsIHN0YXkgLTEuICovCi0JCXN1bmtiZC0+cmVzZXQgPSBkYXRhOwkJLyogVGhlIGtleWJvYXJkIHNlbmRzIDB4ZmYgMHhmZiAweElEIG9uIHBvd2VydXAgKi8KKwlpZiAoc3Vua2JkLT5yZXNldCA8PSAtMSkgeworCQkvKgorCQkgKiBJZiBjcFtpXSBpcyAweGZmLCBzdW5rYmQtPnJlc2V0IHdpbGwgc3RheSAtMS4KKwkJICogVGhlIGtleWJvYXJkIHNlbmRzIDB4ZmYgMHhmZiAweElEIG9uIHBvd2VydXAuCisJCSAqLworCQlzdW5rYmQtPnJlc2V0ID0gZGF0YTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzdW5rYmQtPndhaXQpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMTAsMjkgKzExNCwzMyBAQAogCiAJc3dpdGNoIChkYXRhKSB7CiAKLQkJY2FzZSBTVU5LQkRfUkVUX1JFU0VUOgotCQkJc2NoZWR1bGVfd29yaygmc3Vua2JkLT50cSk7Ci0JCQlzdW5rYmQtPnJlc2V0ID0gLTE7CisJY2FzZSBTVU5LQkRfUkVUX1JFU0VUOgorCQlzY2hlZHVsZV93b3JrKCZzdW5rYmQtPnRxKTsKKwkJc3Vua2JkLT5yZXNldCA9IC0xOworCQlicmVhazsKKworCWNhc2UgU1VOS0JEX1JFVF9MQVlPVVQ6CisJCXN1bmtiZC0+bGF5b3V0ID0gLTE7CisJCWJyZWFrOworCisJY2FzZSBTVU5LQkRfUkVUX0FMTFVQOiAvKiBBbGwga2V5cyByZWxlYXNlZCAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWlmICghc3Vua2JkLT5lbmFibGVkKQogCQkJYnJlYWs7CiAKLQkJY2FzZSBTVU5LQkRfUkVUX0xBWU9VVDoKLQkJCXN1bmtiZC0+bGF5b3V0ID0gLTE7Ci0JCQlicmVhazsKLQotCQljYXNlIFNVTktCRF9SRVRfQUxMVVA6IC8qIEFsbCBrZXlzIHJlbGVhc2VkICovCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJaWYgKCFzdW5rYmQtPmVuYWJsZWQpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmIChzdW5rYmQtPmtleWNvZGVbZGF0YSAmIFNVTktCRF9LRVldKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoc3Vua2JkLT5kZXYsIHN1bmtiZC0+a2V5Y29kZVtkYXRhICYgU1VOS0JEX0tFWV0sICEoZGF0YSAmIFNVTktCRF9SRUxFQVNFKSk7Ci0JCQkJaW5wdXRfc3luYyhzdW5rYmQtPmRldik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJzdW5rYmQuYzogVW5rbm93biBrZXkgKHNjYW5jb2RlICUjeCkgJXMuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgJiBTVU5LQkRfS0VZLCBkYXRhICYgU1VOS0JEX1JFTEVBU0UgPyAicmVsZWFzZWQiIDogInByZXNzZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJaWYgKHN1bmtiZC0+a2V5Y29kZVtkYXRhICYgU1VOS0JEX0tFWV0pIHsKKwkJCWlucHV0X3JlcG9ydF9rZXkoc3Vua2JkLT5kZXYsCisJCQkJCSBzdW5rYmQtPmtleWNvZGVbZGF0YSAmIFNVTktCRF9LRVldLAorCQkJCQkgIShkYXRhICYgU1VOS0JEX1JFTEVBU0UpKTsKKwkJCWlucHV0X3N5bmMoc3Vua2JkLT5kZXYpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSJzdW5rYmQuYzogVW5rbm93biBrZXkgKHNjYW5jb2RlICUjeCkgJXMuXG4iLAorCQkJCWRhdGEgJiBTVU5LQkRfS0VZLAorCQkJCWRhdGEgJiBTVU5LQkRfUkVMRUFTRSA/ICJyZWxlYXNlZCIgOiAicHJlc3NlZCIpOworCQl9CiAJfQogb3V0OgogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTE0MiwzNCArMTUwLDM3IEBACiAgKiBzdW5rYmRfZXZlbnQoKSBoYW5kbGVzIGV2ZW50cyBmcm9tIHRoZSBpbnB1dCBtb2R1bGUuCiAgKi8KIAotc3RhdGljIGludCBzdW5rYmRfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgc3Vua2JkX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKKwkJCXVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQogewogCXN0cnVjdCBzdW5rYmQgKnN1bmtiZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAotCQljYXNlIEVWX0xFRDoKKwljYXNlIEVWX0xFRDoKIAotCQkJc3Vua2JkLT5zZXJpby0+d3JpdGUoc3Vua2JkLT5zZXJpbywgU1VOS0JEX0NNRF9TRVRMRUQpOwotCQkJc3Vua2JkLT5zZXJpby0+d3JpdGUoc3Vua2JkLT5zZXJpbywKLQkJCQkoISF0ZXN0X2JpdChMRURfQ0FQU0wsIGRldi0+bGVkKSA8PCAzKSB8ICghIXRlc3RfYml0KExFRF9TQ1JPTExMLCBkZXYtPmxlZCkgPDwgMikgfAotCQkJCSghIXRlc3RfYml0KExFRF9DT01QT1NFLCBkZXYtPmxlZCkgPDwgMSkgfCAhIXRlc3RfYml0KExFRF9OVU1MLCBkZXYtPmxlZCkpOworCQlzZXJpb193cml0ZShzdW5rYmQtPnNlcmlvLCBTVU5LQkRfQ01EX1NFVExFRCk7CisJCXNlcmlvX3dyaXRlKHN1bmtiZC0+c2VyaW8sCisJCQkoISF0ZXN0X2JpdChMRURfQ0FQU0wsICAgZGV2LT5sZWQpIDw8IDMpIHwKKwkJCSghIXRlc3RfYml0KExFRF9TQ1JPTExMLCBkZXYtPmxlZCkgPDwgMikgfAorCQkJKCEhdGVzdF9iaXQoTEVEX0NPTVBPU0UsIGRldi0+bGVkKSA8PCAxKSB8CisJCQkgISF0ZXN0X2JpdChMRURfTlVNTCwgICAgZGV2LT5sZWQpKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEVWX1NORDoKKworCQlzd2l0Y2ggKGNvZGUpIHsKKworCQljYXNlIFNORF9DTElDSzoKKwkJCXNlcmlvX3dyaXRlKHN1bmtiZC0+c2VyaW8sIFNVTktCRF9DTURfTk9DTElDSyAtIHZhbHVlKTsKIAkJCXJldHVybiAwOwogCi0JCWNhc2UgRVZfU05EOgorCQljYXNlIFNORF9CRUxMOgorCQkJc2VyaW9fd3JpdGUoc3Vua2JkLT5zZXJpbywgU1VOS0JEX0NNRF9CRUxMT0ZGIC0gdmFsdWUpOworCQkJcmV0dXJuIDA7CisJCX0KIAotCQkJc3dpdGNoIChjb2RlKSB7Ci0KLQkJCQljYXNlIFNORF9DTElDSzoKLQkJCQkJc3Vua2JkLT5zZXJpby0+d3JpdGUoc3Vua2JkLT5zZXJpbywgU1VOS0JEX0NNRF9OT0NMSUNLIC0gdmFsdWUpOwotCQkJCQlyZXR1cm4gMDsKLQotCQkJCWNhc2UgU05EX0JFTEw6Ci0JCQkJCXN1bmtiZC0+c2VyaW8tPndyaXRlKHN1bmtiZC0+c2VyaW8sIFNVTktCRF9DTURfQkVMTE9GRiAtIHZhbHVlKTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQl9Ci0KLQkJCWJyZWFrOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gLTE7CkBAIC0xODMsNyArMTk0LDcgQEAKIHN0YXRpYyBpbnQgc3Vua2JkX2luaXRpYWxpemUoc3RydWN0IHN1bmtiZCAqc3Vua2JkKQogewogCXN1bmtiZC0+cmVzZXQgPSAtMjsKLQlzdW5rYmQtPnNlcmlvLT53cml0ZShzdW5rYmQtPnNlcmlvLCBTVU5LQkRfQ01EX1JFU0VUKTsKKwlzZXJpb193cml0ZShzdW5rYmQtPnNlcmlvLCBTVU5LQkRfQ01EX1JFU0VUKTsKIAl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChzdW5rYmQtPndhaXQsIHN1bmtiZC0+cmVzZXQgPj0gMCwgSFopOwogCWlmIChzdW5rYmQtPnJlc2V0IDwgMCkKIAkJcmV0dXJuIC0xOwpAQCAtMTkyLDEwICsyMDMsMTMgQEAKIAogCWlmIChzdW5rYmQtPnR5cGUgPT0gNCkgewkvKiBUeXBlIDQga2V5Ym9hcmQgKi8KIAkJc3Vua2JkLT5sYXlvdXQgPSAtMjsKLQkJc3Vua2JkLT5zZXJpby0+d3JpdGUoc3Vua2JkLT5zZXJpbywgU1VOS0JEX0NNRF9MQVlPVVQpOwotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChzdW5rYmQtPndhaXQsIHN1bmtiZC0+bGF5b3V0ID49IDAsIEhaLzQpOwotCQlpZiAoc3Vua2JkLT5sYXlvdXQgPCAwKSByZXR1cm4gLTE7Ci0JCWlmIChzdW5rYmQtPmxheW91dCAmIFNVTktCRF9MQVlPVVRfNV9NQVNLKSBzdW5rYmQtPnR5cGUgPSA1OworCQlzZXJpb193cml0ZShzdW5rYmQtPnNlcmlvLCBTVU5LQkRfQ01EX0xBWU9VVCk7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHN1bmtiZC0+d2FpdCwKKwkJCQkJCSBzdW5rYmQtPmxheW91dCA+PSAwLCBIWiAvIDQpOworCQlpZiAoc3Vua2JkLT5sYXlvdXQgPCAwKQorCQkJcmV0dXJuIC0xOworCQlpZiAoc3Vua2JkLT5sYXlvdXQgJiBTVU5LQkRfTEFZT1VUXzVfTUFTSykKKwkJCXN1bmtiZC0+dHlwZSA9IDU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMTIsMTUgKzIyNiwxOSBAQAogCiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoc3Vua2JkLT53YWl0LCBzdW5rYmQtPnJlc2V0ID49IDAsIEhaKTsKIAotCXN1bmtiZC0+c2VyaW8tPndyaXRlKHN1bmtiZC0+c2VyaW8sIFNVTktCRF9DTURfU0VUTEVEKTsKLQlzdW5rYmQtPnNlcmlvLT53cml0ZShzdW5rYmQtPnNlcmlvLAotCQkoISF0ZXN0X2JpdChMRURfQ0FQU0wsIHN1bmtiZC0+ZGV2LT5sZWQpIDw8IDMpIHwgKCEhdGVzdF9iaXQoTEVEX1NDUk9MTEwsIHN1bmtiZC0+ZGV2LT5sZWQpIDw8IDIpIHwKLQkJKCEhdGVzdF9iaXQoTEVEX0NPTVBPU0UsIHN1bmtiZC0+ZGV2LT5sZWQpIDw8IDEpIHwgISF0ZXN0X2JpdChMRURfTlVNTCwgc3Vua2JkLT5kZXYtPmxlZCkpOwotCXN1bmtiZC0+c2VyaW8tPndyaXRlKHN1bmtiZC0+c2VyaW8sIFNVTktCRF9DTURfTk9DTElDSyAtICEhdGVzdF9iaXQoU05EX0NMSUNLLCBzdW5rYmQtPmRldi0+c25kKSk7Ci0Jc3Vua2JkLT5zZXJpby0+d3JpdGUoc3Vua2JkLT5zZXJpbywgU1VOS0JEX0NNRF9CRUxMT0ZGIC0gISF0ZXN0X2JpdChTTkRfQkVMTCwgc3Vua2JkLT5kZXYtPnNuZCkpOworCXNlcmlvX3dyaXRlKHN1bmtiZC0+c2VyaW8sIFNVTktCRF9DTURfU0VUTEVEKTsKKwlzZXJpb193cml0ZShzdW5rYmQtPnNlcmlvLAorCQkoISF0ZXN0X2JpdChMRURfQ0FQU0wsICAgc3Vua2JkLT5kZXYtPmxlZCkgPDwgMykgfAorCQkoISF0ZXN0X2JpdChMRURfU0NST0xMTCwgc3Vua2JkLT5kZXYtPmxlZCkgPDwgMikgfAorCQkoISF0ZXN0X2JpdChMRURfQ09NUE9TRSwgc3Vua2JkLT5kZXYtPmxlZCkgPDwgMSkgfAorCQkgISF0ZXN0X2JpdChMRURfTlVNTCwgICAgc3Vua2JkLT5kZXYtPmxlZCkpOworCXNlcmlvX3dyaXRlKHN1bmtiZC0+c2VyaW8sCisJCVNVTktCRF9DTURfTk9DTElDSyAtICEhdGVzdF9iaXQoU05EX0NMSUNLLCBzdW5rYmQtPmRldi0+c25kKSk7CisJc2VyaW9fd3JpdGUoc3Vua2JkLT5zZXJpbywKKwkJU1VOS0JEX0NNRF9CRUxMT0ZGIC0gISF0ZXN0X2JpdChTTkRfQkVMTCwgc3Vua2JkLT5kZXYtPnNuZCkpOwogfQogCi1zdGF0aWMgdm9pZCBzdW5rYmRfZW5hYmxlKHN0cnVjdCBzdW5rYmQgKnN1bmtiZCwgaW50IGVuYWJsZSkKK3N0YXRpYyB2b2lkIHN1bmtiZF9lbmFibGUoc3RydWN0IHN1bmtiZCAqc3Vua2JkLCBib29sIGVuYWJsZSkKIHsKIAlzZXJpb19wYXVzZV9yeChzdW5rYmQtPnNlcmlvKTsKIAlzdW5rYmQtPmVuYWJsZWQgPSBlbmFibGU7CkBAIC0yMjgsNyArMjQ2LDggQEAKIH0KIAogLyoKLSAqIHN1bmtiZF9jb25uZWN0KCkgcHJvYmVzIGZvciBhIFN1biBrZXlib2FyZCBhbmQgZmlsbHMgdGhlIG5lY2Vzc2FyeSBzdHJ1Y3R1cmVzLgorICogc3Vua2JkX2Nvbm5lY3QoKSBwcm9iZXMgZm9yIGEgU3VuIGtleWJvYXJkIGFuZCBmaWxscyB0aGUgbmVjZXNzYXJ5CisgKiBzdHJ1Y3R1cmVzLgogICovCiAKIHN0YXRpYyBpbnQgc3Vua2JkX2Nvbm5lY3Qoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KQpAQCAtMjYwLDcgKzI3OSw4IEBACiAJCWdvdG8gZmFpbDM7CiAJfQogCi0Jc25wcmludGYoc3Vua2JkLT5uYW1lLCBzaXplb2Yoc3Vua2JkLT5uYW1lKSwgIlN1biBUeXBlICVkIGtleWJvYXJkIiwgc3Vua2JkLT50eXBlKTsKKwlzbnByaW50ZihzdW5rYmQtPm5hbWUsIHNpemVvZihzdW5rYmQtPm5hbWUpLAorCQkgIlN1biBUeXBlICVkIGtleWJvYXJkIiwgc3Vua2JkLT50eXBlKTsKIAltZW1jcHkoc3Vua2JkLT5rZXljb2RlLCBzdW5rYmRfa2V5Y29kZSwgc2l6ZW9mKHN1bmtiZC0+a2V5Y29kZSkpOwogCiAJaW5wdXRfZGV2LT5uYW1lID0gc3Vua2JkLT5uYW1lOwpAQCAtMjg0LDExICszMDQsMTEgQEAKIAlpbnB1dF9kZXYtPmtleWNvZGUgPSBzdW5rYmQtPmtleWNvZGU7CiAJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBjaGFyKTsKIAlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKHN1bmtiZF9rZXljb2RlKTsKLQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0JCXNldF9iaXQoc3Vua2JkLT5rZXljb2RlW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JY2xlYXJfYml0KDAsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdW5rYmRfa2V5Y29kZSk7IGkrKykKKwkJX19zZXRfYml0KHN1bmtiZC0+a2V5Y29kZVtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCV9fY2xlYXJfYml0KEtFWV9SRVNFUlZFRCwgaW5wdXRfZGV2LT5rZXliaXQpOwogCi0Jc3Vua2JkX2VuYWJsZShzdW5rYmQsIDEpOworCXN1bmtiZF9lbmFibGUoc3Vua2JkLCB0cnVlKTsKIAogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShzdW5rYmQtPmRldik7CiAJaWYgKGVycikKQEAgLTI5Niw3ICszMTYsNyBAQAogCiAJcmV0dXJuIDA7CiAKLSBmYWlsNDoJc3Vua2JkX2VuYWJsZShzdW5rYmQsIDApOworIGZhaWw0OglzdW5rYmRfZW5hYmxlKHN1bmtiZCwgZmFsc2UpOwogIGZhaWwzOglzZXJpb19jbG9zZShzZXJpbyk7CiAgZmFpbDI6CXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKICBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKQEAgLTMxMiw3ICszMzIsNyBAQAogewogCXN0cnVjdCBzdW5rYmQgKnN1bmtiZCA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvKTsKIAotCXN1bmtiZF9lbmFibGUoc3Vua2JkLCAwKTsKKwlzdW5rYmRfZW5hYmxlKHN1bmtiZCwgZmFsc2UpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHN1bmtiZC0+ZGV2KTsKIAlzZXJpb19jbG9zZShzZXJpbyk7CiAJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90b3Nha2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3Rvc2FrYmQuYwppbmRleCA2NzcyNzZiLi40MmNiM2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3Rvc2FrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3Rvc2FrYmQuYwpAQCAtMzEsNyArMzEsNyBAQAogI2RlZmluZSBLQl9ESVNDSEFSR0VfREVMQVkJMTAKICNkZWZpbmUgS0JfQUNUSVZBVEVfREVMQVkJMTAKIAotc3RhdGljIHVuc2lnbmVkIGludCB0b3Nha2JkX2tleWNvZGVbTlJfU0NBTkNPREVTXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCB0b3Nha2JkX2tleWNvZGVbTlJfU0NBTkNPREVTXSA9IHsKIDAsCiAwLCBLRVlfVywgMCwgMCwgMCwgS0VZX0ssIEtFWV9CQUNLU1BBQ0UsIEtFWV9QLAogMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKQEAgLTUwLDkgKzUwLDkgQEAKIH07CiAKIHN0cnVjdCB0b3Nha2JkIHsKLQl1bnNpZ25lZCBpbnQga2V5Y29kZVtBUlJBWV9TSVpFKHRvc2FrYmRfa2V5Y29kZSldOworCXVuc2lnbmVkIHNob3J0IGtleWNvZGVbQVJSQVlfU0laRSh0b3Nha2JkX2tleWNvZGUpXTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKLQlpbnQgc3VzcGVuZGVkOworCWJvb2wgc3VzcGVuZGVkOwogCXNwaW5sb2NrX3QgbG9jazsgLyogcHJvdGVjdCBrYmQgc2Nhbm5pbmcgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIH07CkBAIC0yMTUsNyArMjE1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRvc2FrYmQtPmxvY2ssIGZsYWdzKTsKLQl0b3Nha2JkLT5zdXNwZW5kZWQgPSAxOworCXRvc2FrYmQtPnN1c3BlbmRlZCA9IHRydWU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdG9zYWtiZC0+bG9jaywgZmxhZ3MpOwogCiAJZGVsX3RpbWVyX3N5bmMoJnRvc2FrYmQtPnRpbWVyKTsKQEAgLTIyNyw3ICsyMjcsNyBAQAogewogCXN0cnVjdCB0b3Nha2JkICp0b3Nha2JkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCXRvc2FrYmQtPnN1c3BlbmRlZCA9IDA7CisJdG9zYWtiZC0+c3VzcGVuZGVkID0gZmFsc2U7CiAJdG9zYWtiZF9zY2Fua2V5Ym9hcmQoZGV2KTsKIAogCXJldHVybiAwOwpAQCAtMjc3LDE0ICsyNzcsMTQgQEAKIAogCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRVApOwogCWlucHV0X2Rldi0+a2V5Y29kZSA9IHRvc2FrYmQtPmtleWNvZGU7Ci0JaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBpbnQpOworCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YodG9zYWtiZC0+a2V5Y29kZVswXSk7CiAJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRSh0b3Nha2JkX2tleWNvZGUpOwogCiAJbWVtY3B5KHRvc2FrYmQtPmtleWNvZGUsIHRvc2FrYmRfa2V5Y29kZSwgc2l6ZW9mKHRvc2FrYmRfa2V5Y29kZSkpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodG9zYWtiZF9rZXljb2RlKTsgaSsrKQogCQlfX3NldF9iaXQodG9zYWtiZC0+a2V5Y29kZVtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwotCWNsZWFyX2JpdCgwLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKIAkvKiBTZXR1cCBzZW5zZSBpbnRlcnJ1cHRzIC0gUmlzaW5nRWRnZSBEZXRlY3QsIHNlbnNlIGxpbmVzIGFzIGlucHV0cyAqLwogCWZvciAoaSA9IDA7IGkgPCBUT1NBX0tFWV9TRU5TRV9OVU07IGkrKykgewpAQCAtMzQ0LDcgKzM0NCw3IEBACiAJCQkJIiBkaXJlY3Rpb24gZm9yIEdQSU8gJWQsIGVycm9yICVkXG4iLAogCQkJCWdwaW8sIGVycm9yKTsKIAkJCWdwaW9fZnJlZShncGlvKTsKLQkJCWdvdG8gZmFpbDsKKwkJCWdvdG8gZmFpbDI7CiAJCX0KIAogCX0KQEAgLTM1Myw3ICszNTMsNyBAQAogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgInRvc2FrYmQ6IFVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2UsICIKIAkJCSJlcnJvcjogJWRcbiIsIGVycm9yKTsKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWwyOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gImlucHV0OiBUb3NhIEtleWJvYXJkIFJlZ2lzdGVyZWRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMjk3N2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3R3bDQwMzBfa2V5cGFkLmMKQEAgLTAsMCArMSw0ODAgQEAKKy8qCisgKiB0d2w0MDMwX2tleXBhZC5jIC0gZHJpdmVyIGZvciA4eDgga2V5cGFkIGNvbnRyb2xsZXIgaW4gdHdsNDAzMCBjaGlwcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29kZSByZS13cml0dGVuIGZvciAyNDMwU0RQIGJ5OgorICogU3llZCBNb2hhbW1lZCBLaGFzaW0gPHgwa2hhc2ltQHRpLmNvbT4KKyAqCisgKiBJbml0aWFsIENvZGU6CisgKiBNYW5qdW5hdGhhIEcgSyA8bWFuanVna0B0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorCisKKy8qCisgKiBUaGUgVFdMNDAzMCBmYW1pbHkgY2hpcHMgaW5jbHVkZSBhIGtleXBhZCBjb250cm9sbGVyIHRoYXQgc3VwcG9ydHMKKyAqIHVwIHRvIGFuIDh4OCBzd2l0Y2ggbWF0cml4LiAgVGhlIGNvbnRyb2xsZXIgY2FuIGlzc3VlIHN5c3RlbSB3YWtldXAKKyAqIGV2ZW50cywgc2luY2UgaXQgdXNlcyBvbmx5IHRoZSBhbHdheXMtb24gMzJLaUh6IG9zY2lsbGF0b3IsIGFuZCBoYXMKKyAqIGFuIGludGVybmFsIHN0YXRlIG1hY2hpbmUgdGhhdCBkZWNvZGVzIHByZXNzZWQga2V5cywgaW5jbHVkaW5nCisgKiBtdWx0aS1rZXkgY29tYmluYXRpb25zLgorICoKKyAqIFRoaXMgZHJpdmVyIGxldHMgYm9hcmRzIGRlZmluZSB3aGF0IGtleWNvZGVzIHRoZXkgd2lzaCB0byByZXBvcnQgZm9yCisgKiB3aGljaCBzY2FuY29kZXMsIGFzIHBhcnQgb2YgdGhlICJzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSIgdXNlZCBpbgorICogdGhlIHByb2JlKCkgcm91dGluZS4KKyAqCisgKiBTZWUgdGhlIFRQUzY1OTUwIGRvY3VtZW50YXRpb247IHRoYXQncyB0aGUgZ2VuZXJhbCBhdmFpbGFiaWxpdHkKKyAqIHZlcnNpb24gb2YgdGhlIFRXTDUwMzAgc2Vjb25kIGdlbmVyYXRpb24gcGFydC4KKyAqLworI2RlZmluZSBUV0w0MDMwX01BWF9ST1dTCTgJLyogVFdMNDAzMCBoYXJkIGxpbWl0ICovCisjZGVmaW5lIFRXTDQwMzBfTUFYX0NPTFMJOAorI2RlZmluZSBUV0w0MDMwX1JPV19TSElGVAkzCisjZGVmaW5lIFRXTDQwMzBfS0VZTUFQX1NJWkUJKFRXTDQwMzBfTUFYX1JPV1MgKiBUV0w0MDMwX01BWF9DT0xTKQorCitzdHJ1Y3QgdHdsNDAzMF9rZXlwYWQgeworCXVuc2lnbmVkIHNob3J0CWtleW1hcFtUV0w0MDMwX0tFWU1BUF9TSVpFXTsKKwl1MTYJCWtwX3N0YXRlW1RXTDQwMzBfTUFYX1JPV1NdOworCXVuc2lnbmVkCW5fcm93czsKKwl1bnNpZ25lZAluX2NvbHM7CisJdW5zaWduZWQJaXJxOworCisJc3RydWN0IGRldmljZSAqZGJnX2RldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGFyYml0cmFyeSBwcmVzY2FsZXIgdmFsdWUgMC4uNyAqLworI2RlZmluZSBQVFZfUFJFU0NBTEVSCQkJNAorCisvKiBSZWdpc3RlciBPZmZzZXRzICovCisjZGVmaW5lIEtFWVBfQ1RSTAkJCTB4MDAKKyNkZWZpbmUgS0VZUF9ERUIJCQkweDAxCisjZGVmaW5lIEtFWVBfTE9OR19LRVkJCQkweDAyCisjZGVmaW5lIEtFWVBfTEtfUFRWCQkJMHgwMworI2RlZmluZSBLRVlQX1RJTUVPVVRfTAkJCTB4MDQKKyNkZWZpbmUgS0VZUF9USU1FT1VUX0gJCQkweDA1CisjZGVmaW5lIEtFWVBfS0JDCQkJMHgwNgorI2RlZmluZSBLRVlQX0tCUgkJCTB4MDcKKyNkZWZpbmUgS0VZUF9TTVMJCQkweDA4CisjZGVmaW5lIEtFWVBfRlVMTF9DT0RFXzdfMAkJMHgwOQkvKiByb3cgMCBjb2x1bW4gc3RhdHVzICovCisjZGVmaW5lIEtFWVBfRlVMTF9DT0RFXzE1XzgJCTB4MGEJLyogLi4uIHJvdyAxIC4uLiAqLworI2RlZmluZSBLRVlQX0ZVTExfQ09ERV8yM18xNgkJMHgwYgorI2RlZmluZSBLRVlQX0ZVTExfQ09ERV8zMV8yNAkJMHgwYworI2RlZmluZSBLRVlQX0ZVTExfQ09ERV8zOV8zMgkJMHgwZAorI2RlZmluZSBLRVlQX0ZVTExfQ09ERV80N180MAkJMHgwZQorI2RlZmluZSBLRVlQX0ZVTExfQ09ERV81NV80OAkJMHgwZgorI2RlZmluZSBLRVlQX0ZVTExfQ09ERV82M181NgkJMHgxMAorI2RlZmluZSBLRVlQX0lTUjEJCQkweDExCisjZGVmaW5lIEtFWVBfSU1SMQkJCTB4MTIKKyNkZWZpbmUgS0VZUF9JU1IyCQkJMHgxMworI2RlZmluZSBLRVlQX0lNUjIJCQkweDE0CisjZGVmaW5lIEtFWVBfU0lSCQkJMHgxNQorI2RlZmluZSBLRVlQX0VEUgkJCTB4MTYJLyogZWRnZSB0cmlnZ2VycyAqLworI2RlZmluZSBLRVlQX1NJSF9DVFJMCQkJMHgxNworCisvKiBLRVlQX0NUUkxfUkVHIEZpZWxkcyAqLworI2RlZmluZSBLRVlQX0NUUkxfU09GVF9OUlNUCQlCSVQoMCkKKyNkZWZpbmUgS0VZUF9DVFJMX1NPRlRNT0RFTgkJQklUKDEpCisjZGVmaW5lIEtFWVBfQ1RSTF9MS19FTgkJCUJJVCgyKQorI2RlZmluZSBLRVlQX0NUUkxfVE9FX0VOCQlCSVQoMykKKyNkZWZpbmUgS0VZUF9DVFJMX1RPTEVfRU4JCUJJVCg0KQorI2RlZmluZSBLRVlQX0NUUkxfUlBfRU4JCQlCSVQoNSkKKyNkZWZpbmUgS0VZUF9DVFJMX0tCRF9PTgkJQklUKDYpCisKKy8qIEtFWVBfREVCLCBLRVlQX0xPTkdfS0VZLCBLRVlQX1RJTUVPVVRfeCovCisjZGVmaW5lIEtFWVBfUEVSSU9EX1VTKHQsIHByZXNjYWxlKQkoKHQpIC8gKDMxIDw8IChwcmVzY2FsZSArIDEpKSAtIDEpCisKKy8qIEtFWVBfTEtfUFRWX1JFRyBGaWVsZHMgKi8KKyNkZWZpbmUgS0VZUF9MS19QVFZfUFRWX1NISUZUCQk1CisKKy8qIEtFWVBfe0lNUixJU1IsU0lSfSBGaWVsZHMgKi8KKyNkZWZpbmUgS0VZUF9JTVIxX01JUwkJCUJJVCgzKQorI2RlZmluZSBLRVlQX0lNUjFfVE8JCQlCSVQoMikKKyNkZWZpbmUgS0VZUF9JTVIxX0xLCQkJQklUKDEpCisjZGVmaW5lIEtFWVBfSU1SMV9LUAkJCUJJVCgwKQorCisvKiBLRVlQX0VEUiBGaWVsZHMgKi8KKyNkZWZpbmUgS0VZUF9FRFJfS1BfRkFMTElORwkJMHgwMQorI2RlZmluZSBLRVlQX0VEUl9LUF9SSVNJTkcJCTB4MDIKKyNkZWZpbmUgS0VZUF9FRFJfS1BfQk9USAkJMHgwMworI2RlZmluZSBLRVlQX0VEUl9MS19GQUxMSU5HCQkweDA0CisjZGVmaW5lIEtFWVBfRURSX0xLX1JJU0lORwkJMHgwOAorI2RlZmluZSBLRVlQX0VEUl9UT19GQUxMSU5HCQkweDEwCisjZGVmaW5lIEtFWVBfRURSX1RPX1JJU0lORwkJMHgyMAorI2RlZmluZSBLRVlQX0VEUl9NSVNfRkFMTElORwkJMHg0MAorI2RlZmluZSBLRVlQX0VEUl9NSVNfUklTSU5HCQkweDgwCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB0d2w0MDMwX2twcmVhZChzdHJ1Y3QgdHdsNDAzMF9rZXlwYWQgKmtwLAorCQl1OCAqZGF0YSwgdTMyIHJlZywgdTggbnVtX2J5dGVzKQoreworCWludCByZXQgPSB0d2w0MDMwX2kyY19yZWFkKFRXTDQwMzBfTU9EVUxFX0tFWVBBRCwgZGF0YSwgcmVnLCBudW1fYnl0ZXMpOworCisJaWYgKHJldCA8IDApCisJCWRldl93YXJuKGtwLT5kYmdfZGV2LAorCQkJIkNvdWxkbid0IHJlYWQgVFdMNDAzMDogJVggLSByZXQgJWRbJXhdXG4iLAorCQkJIHJlZywgcmV0LCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0d2w0MDMwX2twd3JpdGVfdTgoc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcCwgdTggZGF0YSwgdTMyIHJlZykKK3sKKwlpbnQgcmV0ID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfS0VZUEFELCBkYXRhLCByZWcpOworCisJaWYgKHJldCA8IDApCisJCWRldl93YXJuKGtwLT5kYmdfZGV2LAorCQkJIkNvdWxkIG5vdCB3cml0ZSBUV0w0MDMwOiAlWCAtIHJldCAlZFsleF1cbiIsCisJCQkgcmVnLCByZXQsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHUxNiB0d2w0MDMwX2NvbF94bGF0ZShzdHJ1Y3QgdHdsNDAzMF9rZXlwYWQgKmtwLCB1OCBjb2wpCit7CisJLyogSWYgYWxsIGJpdHMgaW4gYSByb3cgYXJlIGFjdGl2ZSBmb3IgYWxsIGNvbG91bW5zIHRoZW4KKwkgKiB3ZSBoYXZlIHRoYXQgcm93IGxpbmUgY29ubmVjdGVkIHRvIGduZC4gTWFyayB0aGlzCisJICoga2V5IG9uIGFzIGlmIGl0IHdhcyBvbiBtYXRyaXggcG9zaXRpb24gbl9jb2xzIChpZQorCSAqIG9uZSBoaWdoZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgbWF0cml4KS4KKwkgKi8KKwlpZiAoY29sID09IDB4RkYpCisJCXJldHVybiAxIDw8IGtwLT5uX2NvbHM7CisJZWxzZQorCQlyZXR1cm4gY29sICYgKCgxIDw8IGtwLT5uX2NvbHMpIC0gMSk7Cit9CisKK3N0YXRpYyBpbnQgdHdsNDAzMF9yZWFkX2twX21hdHJpeF9zdGF0ZShzdHJ1Y3QgdHdsNDAzMF9rZXlwYWQgKmtwLCB1MTYgKnN0YXRlKQoreworCXU4IG5ld19zdGF0ZVtUV0w0MDMwX01BWF9ST1dTXTsKKwlpbnQgcm93OworCWludCByZXQgPSB0d2w0MDMwX2twcmVhZChrcCwgbmV3X3N0YXRlLAorCQkJCSBLRVlQX0ZVTExfQ09ERV83XzAsIGtwLT5uX3Jvd3MpOworCWlmIChyZXQgPj0gMCkKKwkJZm9yIChyb3cgPSAwOyByb3cgPCBrcC0+bl9yb3dzOyByb3crKykKKwkJCXN0YXRlW3Jvd10gPSB0d2w0MDMwX2NvbF94bGF0ZShrcCwgbmV3X3N0YXRlW3Jvd10pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0d2w0MDMwX2lzX2luX2dob3N0X3N0YXRlKHN0cnVjdCB0d2w0MDMwX2tleXBhZCAqa3AsIHUxNiAqa2V5X3N0YXRlKQoreworCWludCBpOworCXUxNiBjaGVjayA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwga3AtPm5fcm93czsgaSsrKSB7CisJCXUxNiBjb2wgPSBrZXlfc3RhdGVbaV07CisKKwkJaWYgKChjb2wgJiBjaGVjaykgJiYgaHdlaWdodDE2KGNvbCkgPiAxKQorCQkJcmV0dXJuIDE7CisKKwkJY2hlY2sgfD0gY29sOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0d2w0MDMwX2twX3NjYW4oc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcCwgYm9vbCByZWxlYXNlX2FsbCkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGtwLT5pbnB1dDsKKwl1MTYgbmV3X3N0YXRlW1RXTDQwMzBfTUFYX1JPV1NdOworCWludCBjb2wsIHJvdzsKKworCWlmIChyZWxlYXNlX2FsbCkKKwkJbWVtc2V0KG5ld19zdGF0ZSwgMCwgc2l6ZW9mKG5ld19zdGF0ZSkpOworCWVsc2UgeworCQkvKiBjaGVjayBmb3IgYW55IGNoYW5nZXMgKi8KKwkJaW50IHJldCA9IHR3bDQwMzBfcmVhZF9rcF9tYXRyaXhfc3RhdGUoa3AsIG5ld19zdGF0ZSk7CisKKwkJaWYgKHJldCA8IDApCS8qIHBhbmljIC4uLiAqLworCQkJcmV0dXJuOworCisJCWlmICh0d2w0MDMwX2lzX2luX2dob3N0X3N0YXRlKGtwLCBuZXdfc3RhdGUpKQorCQkJcmV0dXJuOworCX0KKworCS8qIGNoZWNrIGZvciBjaGFuZ2VzIGFuZCBwcmludCB0aG9zZSAqLworCWZvciAocm93ID0gMDsgcm93IDwga3AtPm5fcm93czsgcm93KyspIHsKKwkJaW50IGNoYW5nZWQgPSBuZXdfc3RhdGVbcm93XSBeIGtwLT5rcF9zdGF0ZVtyb3ddOworCisJCWlmICghY2hhbmdlZCkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoY29sID0gMDsgY29sIDwga3AtPm5fY29sczsgY29sKyspIHsKKwkJCWludCBjb2RlOworCisJCQlpZiAoIShjaGFuZ2VkICYgKDEgPDwgY29sKSkpCisJCQkJY29udGludWU7CisKKwkJCWRldl9kYmcoa3AtPmRiZ19kZXYsICJrZXkgWyVkOiVkXSAlc1xuIiwgcm93LCBjb2wsCisJCQkJKG5ld19zdGF0ZVtyb3ddICYgKDEgPDwgY29sKSkgPworCQkJCSJwcmVzcyIgOiAicmVsZWFzZSIpOworCisJCQljb2RlID0gTUFUUklYX1NDQU5fQ09ERShyb3csIGNvbCwgVFdMNDAzMF9ST1dfU0hJRlQpOworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX01TQywgTVNDX1NDQU4sIGNvZGUpOworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwga3AtPmtleW1hcFtjb2RlXSwKKwkJCQkJIG5ld19zdGF0ZVtyb3ddICYgKDEgPDwgY29sKSk7CisJCX0KKwkJa3AtPmtwX3N0YXRlW3Jvd10gPSBuZXdfc3RhdGVbcm93XTsKKwl9CisJaW5wdXRfc3luYyhpbnB1dCk7Cit9CisKKy8qCisgKiBLZXlwYWQgaW50ZXJydXB0IGhhbmRsZXIKKyAqLworc3RhdGljIGlycXJldHVybl90IGRvX2twX2lycShpbnQgaXJxLCB2b2lkICpfa3ApCit7CisJc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcCA9IF9rcDsKKwl1OCByZWc7CisJaW50IHJldDsKKworI2lmZGVmIENPTkZJR19MT0NLREVQCisJLyogV09SS0FST1VORCBmb3IgbG9ja2RlcCBmb3JjaW5nIElSUUZfRElTQUJMRUQgb24gdXMsIHdoaWNoCisJICogd2UgZG9uJ3Qgd2FudCBhbmQgY2FuJ3QgdG9sZXJhdGUuICBBbHRob3VnaCBpdCBtaWdodCBiZQorCSAqIGZyaWVuZGxpZXIgbm90IHRvIGJvcnJvdyB0aGlzIHRocmVhZCBjb250ZXh0Li4uCisJICovCisJbG9jYWxfaXJxX2VuYWJsZSgpOworI2VuZGlmCisKKwkvKiBSZWFkICYgQ2xlYXIgVFdMNDAzMCBwZW5kaW5nIGludGVycnVwdCAqLworCXJldCA9IHR3bDQwMzBfa3ByZWFkKGtwLCAmcmVnLCBLRVlQX0lTUjEsIDEpOworCisJLyogUmVsZWFzZSBhbGwga2V5cyBpZiBJMkMgaGFzIGdvbmUgYmFkIG9yCisJICogdGhlIEtFWVAgaGFzIGdvbmUgdG8gaWRsZSBzdGF0ZSAqLworCWlmIChyZXQgPj0gMCAmJiAocmVnICYgS0VZUF9JTVIxX0tQKSkKKwkJdHdsNDAzMF9rcF9zY2FuKGtwLCBmYWxzZSk7CisJZWxzZQorCQl0d2w0MDMwX2twX3NjYW4oa3AsIHRydWUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0d2w0MDMwX2twX3Byb2dyYW0oc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcCkKK3sKKwl1OCByZWc7CisJaW50IGk7CisKKwkvKiBFbmFibGUgY29udHJvbGxlciwgd2l0aCBoYXJkd2FyZSBkZWNvZGluZyBidXQgbm90IGF1dG9yZXBlYXQgKi8KKwlyZWcgPSBLRVlQX0NUUkxfU09GVF9OUlNUIHwgS0VZUF9DVFJMX1NPRlRNT0RFTgorCQl8IEtFWVBfQ1RSTF9UT0VfRU4gfCBLRVlQX0NUUkxfS0JEX09OOworCWlmICh0d2w0MDMwX2twd3JpdGVfdTgoa3AsIHJlZywgS0VZUF9DVFJMKSA8IDApCisJCXJldHVybiAtRUlPOworCisJLyogTk9URTogIHdlIGNvdWxkIHVzZSBzaWhfc2V0dXAoKSBoZXJlIHRvIHBhY2thZ2Uga2V5cGFkCisJICogZXZlbnQgc291cmNlcyBhcyBmb3VyIGRpZmZlcmVudCBJUlFzIC4uLiBidXQgd2UgZG9uJ3QuCisJICovCisKKwkvKiBFbmFibGUgVE8gcmlzaW5nIGFuZCBLUCByaXNpbmcgYW5kIGZhbGxpbmcgZWRnZSBkZXRlY3Rpb24gKi8KKwlyZWcgPSBLRVlQX0VEUl9LUF9CT1RIIHwgS0VZUF9FRFJfVE9fUklTSU5HOworCWlmICh0d2w0MDMwX2twd3JpdGVfdTgoa3AsIHJlZywgS0VZUF9FRFIpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBTZXQgUFRWIHByZXNjYWxlciBGaWVsZCAqLworCXJlZyA9IChQVFZfUFJFU0NBTEVSIDw8IEtFWVBfTEtfUFRWX1BUVl9TSElGVCk7CisJaWYgKHR3bDQwMzBfa3B3cml0ZV91OChrcCwgcmVnLCBLRVlQX0xLX1BUVikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCS8qIFNldCBrZXkgZGVib3VuY2UgdGltZSB0byAyMCBtcyAqLworCWkgPSBLRVlQX1BFUklPRF9VUygyMDAwMCwgUFRWX1BSRVNDQUxFUik7CisJaWYgKHR3bDQwMzBfa3B3cml0ZV91OChrcCwgaSwgS0VZUF9ERUIpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBTZXQgdGltZW91dCBwZXJpb2QgdG8gMTAwIG1zICovCisJaSA9IEtFWVBfUEVSSU9EX1VTKDIwMDAwMCwgUFRWX1BSRVNDQUxFUik7CisJaWYgKHR3bDQwMzBfa3B3cml0ZV91OChrcCwgKGkgJiAweEZGKSwgS0VZUF9USU1FT1VUX0wpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAodHdsNDAzMF9rcHdyaXRlX3U4KGtwLCAoaSA+PiA4KSwgS0VZUF9USU1FT1VUX0gpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwkvKgorCSAqIEVuYWJsZSBDbGVhci1vbi1SZWFkOyBkaXNhYmxlIHJlbWVtYmVyaW5nIGV2ZW50cyB0aGF0IGZpcmUKKwkgKiBhZnRlciB0aGUgSVJRIGJ1dCBiZWZvcmUgb3VyIGhhbmRsZXIgYWNrcyAocmVhZHMpIHRoZW0sCisJICovCisJcmVnID0gVFdMNDAzMF9TSUhfQ1RSTF9DT1JfTUFTSyB8IFRXTDQwMzBfU0lIX0NUUkxfUEVORERJU19NQVNLOworCWlmICh0d2w0MDMwX2twd3JpdGVfdTgoa3AsIHJlZywgS0VZUF9TSUhfQ1RSTCkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCS8qIGluaXRpYWxpemUga2V5IHN0YXRlOyBpcnFzIHVwZGF0ZSBpdCBmcm9tIGhlcmUgb24gKi8KKwlpZiAodHdsNDAzMF9yZWFkX2twX21hdHJpeF9zdGF0ZShrcCwga3AtPmtwX3N0YXRlKSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWdpc3RlcnMga2V5cGFkIGRldmljZSB3aXRoIGlucHV0IHN1YnN5c3RlbQorICogYW5kIGNvbmZpZ3VyZXMgVFdMNDAzMCBrZXlwYWQgcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHR3bDQwMzBfa3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwljb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICprZXltYXBfZGF0YSA9IHBkYXRhLT5rZXltYXBfZGF0YTsKKwlzdHJ1Y3QgdHdsNDAzMF9rZXlwYWQgKmtwOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCXU4IHJlZzsKKwlpbnQgZXJyb3I7CisKKwlpZiAoIXBkYXRhIHx8ICFwZGF0YS0+cm93cyB8fCAhcGRhdGEtPmNvbHMgfHwKKwkgICAgcGRhdGEtPnJvd3MgPiBUV0w0MDMwX01BWF9ST1dTIHx8IHBkYXRhLT5jb2xzID4gVFdMNDAzMF9NQVhfQ09MUykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIHBsYXRmb3JtX2RhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlrcCA9IGt6YWxsb2Moc2l6ZW9mKCprcCksIEdGUF9LRVJORUwpOworCWlucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFrcCB8fCAhaW5wdXQpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycjE7CisJfQorCisJLyogR2V0IHRoZSBkZWJ1ZyBEZXZpY2UgKi8KKwlrcC0+ZGJnX2RldiA9ICZwZGV2LT5kZXY7CisJa3AtPmlucHV0ID0gaW5wdXQ7CisKKwlrcC0+bl9yb3dzID0gcGRhdGEtPnJvd3M7CisJa3AtPm5fY29scyA9IHBkYXRhLT5jb2xzOworCWtwLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJLyogc2V0dXAgaW5wdXQgZGV2aWNlICovCisJX19zZXRfYml0KEVWX0tFWSwgaW5wdXQtPmV2Yml0KTsKKworCS8qIEVuYWJsZSBhdXRvIHJlcGVhdCBmZWF0dXJlIG9mIExpbnV4IGlucHV0IHN1YnN5c3RlbSAqLworCWlmIChwZGF0YS0+cmVwKQorCQlfX3NldF9iaXQoRVZfUkVQLCBpbnB1dC0+ZXZiaXQpOworCisJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaW5wdXQsIEVWX01TQywgTVNDX1NDQU4pOworCisJaW5wdXQtPm5hbWUJCT0gIlRXTDQwMzAgS2V5cGFkIjsKKwlpbnB1dC0+cGh5cwkJPSAidHdsNDAzMF9rZXlwYWQvaW5wdXQwIjsKKwlpbnB1dC0+ZGV2LnBhcmVudAk9ICZwZGV2LT5kZXY7CisKKwlpbnB1dC0+aWQuYnVzdHlwZQk9IEJVU19IT1NUOworCWlucHV0LT5pZC52ZW5kb3IJPSAweDAwMDE7CisJaW5wdXQtPmlkLnByb2R1Y3QJPSAweDAwMDE7CisJaW5wdXQtPmlkLnZlcnNpb24JPSAweDAwMDM7CisKKwlpbnB1dC0+a2V5Y29kZQkJPSBrcC0+a2V5bWFwOworCWlucHV0LT5rZXljb2Rlc2l6ZQk9IHNpemVvZihrcC0+a2V5bWFwWzBdKTsKKwlpbnB1dC0+a2V5Y29kZW1heAk9IEFSUkFZX1NJWkUoa3AtPmtleW1hcCk7CisKKwltYXRyaXhfa2V5cGFkX2J1aWxkX2tleW1hcChrZXltYXBfZGF0YSwgVFdMNDAzMF9ST1dfU0hJRlQsCisJCQkJICAgaW5wdXQtPmtleWNvZGUsIGlucHV0LT5rZXliaXQpOworCisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKGtwLT5kYmdfZGV2LAorCQkJIlVuYWJsZSB0byByZWdpc3RlciB0d2w0MDMwIGtleXBhZCBkZXZpY2VcbiIpOworCQlnb3RvIGVycjE7CisJfQorCisJZXJyb3IgPSB0d2w0MDMwX2twX3Byb2dyYW0oa3ApOworCWlmIChlcnJvcikKKwkJZ290byBlcnIyOworCisJLyoKKwkgKiBUaGlzIElTUiB3aWxsIGFsd2F5cyBleGVjdXRlIGluIGtlcm5lbCB0aHJlYWQgY29udGV4dCBiZWNhdXNlIG9mCisJICogdGhlIG5lZWQgdG8gYWNjZXNzIHRoZSBUV0w0MDMwIG92ZXIgdGhlIEkyQyBidXMuCisJICoKKwkgKiBOT1RFOiAgd2UgYXNzdW1lIHRoaXMgaG9zdCBpcyB3aXJlZCB0byBUV0w0MDQwIElOVDEsIG5vdCBJTlQyIC4uLgorCSAqLworCWVycm9yID0gcmVxdWVzdF9pcnEoa3AtPmlycSwgZG9fa3BfaXJxLCAwLCBwZGV2LT5uYW1lLCBrcCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9pbmZvKGtwLT5kYmdfZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkIGZvciBpcnEgbm89JWRcbiIsCisJCQlrcC0+aXJxKTsKKwkJZ290byBlcnIzOworCX0KKworCS8qIEVuYWJsZSBLUCBhbmQgVE8gaW50ZXJydXB0cyBub3cuICovCisJcmVnID0gKHU4KSB+KEtFWVBfSU1SMV9LUCB8IEtFWVBfSU1SMV9UTyk7CisJaWYgKHR3bDQwMzBfa3B3cml0ZV91OChrcCwgcmVnLCBLRVlQX0lNUjEpKSB7CisJCWVycm9yID0gLUVJTzsKKwkJZ290byBlcnI0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGtwKTsKKwlyZXR1cm4gMDsKKworZXJyNDoKKwkvKiBtYXNrIGFsbCBldmVudHMgLSB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXN1bHQgKi8KKwkodm9pZCkgdHdsNDAzMF9rcHdyaXRlX3U4KGtwLCAweGZmLCBLRVlQX0lNUjEpOworZXJyMzoKKwlmcmVlX2lycShrcC0+aXJxLCBOVUxMKTsKK2VycjI6CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOworCWlucHV0ID0gTlVMTDsKK2VycjE6CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOworCWtmcmVlKGtwKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHR3bDQwMzBfa3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZnJlZV9pcnEoa3AtPmlycSwga3ApOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGtwLT5pbnB1dCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUoa3ApOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBOT1RFOiB0d2w0MDMwIGFyZSBtdWx0aS1mdW5jdGlvbiBkZXZpY2VzIGNvbm5lY3RlZCB2aWEgSTJDLgorICogU28gdGhpcyBkZXZpY2UgaXMgYSBjaGlsZCBvZiBhbiBJMkMgcGFyZW50LCB0aHVzIGl0IG5lZWRzIHRvCisgKiBzdXBwb3J0IHVucGx1Zy9yZXBsdWcgKHdoaWNoIG1vc3QgcGxhdGZvcm0gZGV2aWNlcyBkb24ndCkuCisgKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHdsNDAzMF9rcF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHR3bDQwMzBfa3BfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0d2w0MDMwX2twX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInR3bDQwMzBfa2V5cGFkIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHR3bDQwMzBfa3BfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnR3bDQwMzBfa3BfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHR3bDQwMzBfa3BfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0d2w0MDMwX2twX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdHdsNDAzMF9rcF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodHdsNDAzMF9rcF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVGV4YXMgSW5zdHJ1bWVudHMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVFdMNDAzMCBLZXlwYWQgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnR3bDQwMzBfa2V5cGFkIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdzkwcDkxMF9rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdzkwcDkxMF9rZXlwYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDMyZGVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC93OTBwOTEwX2tleXBhZC5jCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvdzkwcDkxMF9rZXlwYWQuaD4KKworLyogS2V5cGFkIEludGVyZmFjZSBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZSBLUElfQ09ORgkJMHgwMAorI2RlZmluZSBLUElfM0tDT05GCQkweDA0CisjZGVmaW5lIEtQSV9MUENPTkYJCTB4MDgKKyNkZWZpbmUgS1BJX1NUQVRVUwkJMHgwQworCisjZGVmaW5lIElTMUtFWQkJCSgweDAxIDw8IDE2KQorI2RlZmluZSBJTlRUUgkJCSgweDAxIDw8IDIxKQorI2RlZmluZSBLRVkwUgkJCSgweDBmIDw8IDMpCisjZGVmaW5lIEtFWTBDCQkJMHgwNworI2RlZmluZSBERUJPVU5DRV9CSVQJCTB4MDgKKyNkZWZpbmUgS1NJWkUwCQkJKDB4MDEgPDwgMTYpCisjZGVmaW5lIEtTSVpFMQkJCSgweDAxIDw8IDE3KQorI2RlZmluZSBLUFNFTAkJCSgweDAxIDw8IDE5KQorI2RlZmluZSBFTktQCQkJKDB4MDEgPDwgMTgpCisKKyNkZWZpbmUgS0dFVF9SQVcobikJCSgoKG4pICYgS0VZMFIpID4+IDMpCisjZGVmaW5lIEtHRVRfQ09MVU1OKG4pCQkoKG4pICYgS0VZMEMpCisKKyNkZWZpbmUgVzkwUDkxMF9NQVhfS0VZX05VTQkoOCAqIDgpCisjZGVmaW5lIFc5MFA5MTBfUk9XX1NISUZUCTMKKworc3RydWN0IHc5MHA5MTBfa2V5cGFkIHsKKwljb25zdCBzdHJ1Y3QgdzkwcDkxMF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwl2b2lkIF9faW9tZW0gKm1taW9fYmFzZTsKKwlpbnQgaXJxOworCXVuc2lnbmVkIHNob3J0IGtleW1hcFtXOTBQOTEwX01BWF9LRVlfTlVNXTsKK307CisKK3N0YXRpYyB2b2lkIHc5MHA5MTBfa2V5cGFkX3NjYW5fbWF0cml4KHN0cnVjdCB3OTBwOTEwX2tleXBhZCAqa2V5cGFkLAorCQkJCQkJCXVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0ga2V5cGFkLT5pbnB1dF9kZXY7CisJdW5zaWduZWQgaW50IHJvdyA9IEtHRVRfUkFXKHN0YXR1cyk7CisJdW5zaWduZWQgaW50IGNvbCA9IEtHRVRfQ09MVU1OKHN0YXR1cyk7CisJdW5zaWduZWQgaW50IGNvZGUgPSBNQVRSSVhfU0NBTl9DT0RFKHJvdywgY29sLCBXOTBQOTEwX1JPV19TSElGVCk7CisJdW5zaWduZWQgaW50IGtleSA9IGtleXBhZC0+a2V5bWFwW2NvZGVdOworCisJaW5wdXRfZXZlbnQoaW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBjb2RlKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2Rldiwga2V5LCAxKTsKKwlpbnB1dF9zeW5jKGlucHV0X2Rldik7CisKKwlpbnB1dF9ldmVudChpbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4sIGNvZGUpOworCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfZGV2LCBrZXksIDApOworCWlucHV0X3N5bmMoaW5wdXRfZGV2KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHc5MHA5MTBfa2V5cGFkX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdzkwcDkxMF9rZXlwYWQgKmtleXBhZCA9IGRldl9pZDsKKwl1bnNpZ25lZCBpbnQgIGtzdGF0dXMsIHZhbDsKKworCWtzdGF0dXMgPSBfX3Jhd19yZWFkbChrZXlwYWQtPm1taW9fYmFzZSArIEtQSV9TVEFUVVMpOworCisJdmFsID0gSU5UVFIgfCBJUzFLRVk7CisKKwlpZiAoa3N0YXR1cyAmIHZhbCkKKwkJdzkwcDkxMF9rZXlwYWRfc2Nhbl9tYXRyaXgoa2V5cGFkLCBrc3RhdHVzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCB3OTBwOTEwX2tleXBhZF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdzkwcDkxMF9rZXlwYWQgKmtleXBhZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJY29uc3Qgc3RydWN0IHc5MHA5MTBfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2V5cGFkLT5wZGF0YTsKKwl1bnNpZ25lZCBpbnQgdmFsLCBjb25maWc7CisKKwkvKiBFbmFibGUgdW5pdCBjbG9jayAqLworCWNsa19lbmFibGUoa2V5cGFkLT5jbGspOworCisJdmFsID0gX19yYXdfcmVhZGwoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUElfQ09ORik7CisJdmFsIHw9IChLUFNFTCB8IEVOS1ApOworCXZhbCAmPSB+KEtTSVpFMCB8IEtTSVpFMSk7CisKKwljb25maWcgPSBwZGF0YS0+cHJlc2NhbGUgfCAocGRhdGEtPmRlYm91bmNlIDw8IERFQk9VTkNFX0JJVCk7CisKKwl2YWwgfD0gY29uZmlnOworCisJX19yYXdfd3JpdGVsKHZhbCwga2V5cGFkLT5tbWlvX2Jhc2UgKyBLUElfQ09ORik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdzkwcDkxMF9rZXlwYWRfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCB3OTBwOTEwX2tleXBhZCAqa2V5cGFkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKworCS8qIERpc2FibGUgY2xvY2sgdW5pdCAqLworCWNsa19kaXNhYmxlKGtleXBhZC0+Y2xrKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdzkwcDkxMF9rZXlwYWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3QgdzkwcDkxMF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQorCQkJCQkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CisJc3RydWN0IHc5MHA5MTBfa2V5cGFkICprZXlwYWQ7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnE7CisJaW50IGVycm9yOworCisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIGRlZmluZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlrZXltYXBfZGF0YSA9IHBkYXRhLT5rZXltYXBfZGF0YTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBrZXlwYWQgaXJxXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlrZXlwYWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdzkwcDkxMF9rZXlwYWQpLCBHRlBfS0VSTkVMKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWtleXBhZCB8fCAhaW5wdXRfZGV2KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkcml2ZXIgZGF0YVxuIik7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsZWRfZnJlZTsKKwl9CisKKwlrZXlwYWQtPnBkYXRhID0gcGRhdGE7CisJa2V5cGFkLT5pbnB1dF9kZXYgPSBpbnB1dF9kZXY7CisJa2V5cGFkLT5pcnEgPSBpcnE7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IEkvTyBtZW1vcnlcbiIpOworCQllcnJvciA9IC1FTlhJTzsKKwkJZ290byBmYWlsZWRfZnJlZTsKKwl9CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSS9PIG1lbW9yeVxuIik7CisJCWVycm9yID0gLUVCVVNZOworCQlnb3RvIGZhaWxlZF9mcmVlOworCX0KKworCWtleXBhZC0+bW1pb19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChrZXlwYWQtPm1taW9fYmFzZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKKwkJZXJyb3IgPSAtRU5YSU87CisJCWdvdG8gZmFpbGVkX2ZyZWVfcmVzOworCX0KKworCWtleXBhZC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGtleXBhZC0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGtleXBhZCBjbG9ja1xuIik7CisJCWVycm9yID0gUFRSX0VSUihrZXlwYWQtPmNsayk7CisJCWdvdG8gZmFpbGVkX2ZyZWVfaW87CisJfQorCisJLyogc2V0IG11bHRpLWZ1bmN0aW9uIHBpbiBmb3IgdzkwcDkxMCBrcGkuICovCisJbWZwX3NldF9ncm91cGkoJnBkZXYtPmRldik7CisKKwlpbnB1dF9kZXYtPm5hbWUgPSBwZGV2LT5uYW1lOworCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCWlucHV0X2Rldi0+b3BlbiA9IHc5MHA5MTBfa2V5cGFkX29wZW47CisJaW5wdXRfZGV2LT5jbG9zZSA9IHc5MHA5MTBfa2V5cGFkX2Nsb3NlOworCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisKKwlpbnB1dF9kZXYtPmtleWNvZGUgPSBrZXlwYWQtPmtleW1hcDsKKwlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKGtleXBhZC0+a2V5bWFwWzBdKTsKKwlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKGtleXBhZC0+a2V5bWFwKTsKKworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2Rldiwga2V5cGFkKTsKKworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVQKTsKKwlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4pOworCisJbWF0cml4X2tleXBhZF9idWlsZF9rZXltYXAoa2V5bWFwX2RhdGEsIFc5MFA5MTBfUk9XX1NISUZULAorCQkJCSAgIGlucHV0X2Rldi0+a2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOworCisJZXJyb3IgPSByZXF1ZXN0X2lycShrZXlwYWQtPmlycSwgdzkwcDkxMF9rZXlwYWRfaXJxX2hhbmRsZXIsCisJCQkgICAgSVJRRl9ESVNBQkxFRCwgcGRldi0+bmFtZSwga2V5cGFkKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSVJRXG4iKTsKKwkJZ290byBmYWlsZWRfcHV0X2NsazsKKwl9CisKKwkvKiBSZWdpc3RlciB0aGUgaW5wdXQgZGV2aWNlICovCisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7CisJCWdvdG8gZmFpbGVkX2ZyZWVfaXJxOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGtleXBhZCk7CisJcmV0dXJuIDA7CisKK2ZhaWxlZF9mcmVlX2lycToKKwlmcmVlX2lycShpcnEsIHBkZXYpOworZmFpbGVkX3B1dF9jbGs6CisJY2xrX3B1dChrZXlwYWQtPmNsayk7CitmYWlsZWRfZnJlZV9pbzoKKwlpb3VubWFwKGtleXBhZC0+bW1pb19iYXNlKTsKK2ZhaWxlZF9mcmVlX3JlczoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2ZhaWxlZF9mcmVlOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJa2ZyZWUoa2V5cGFkKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHc5MHA5MTBfa2V5cGFkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3OTBwOTEwX2tleXBhZCAqa2V5cGFkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlmcmVlX2lycShrZXlwYWQtPmlycSwgcGRldik7CisKKwljbGtfcHV0KGtleXBhZC0+Y2xrKTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGtleXBhZC0+aW5wdXRfZGV2KTsKKworCWlvdW5tYXAoa2V5cGFkLT5tbWlvX2Jhc2UpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShrZXlwYWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHc5MHA5MTBfa2V5cGFkX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gdzkwcDkxMF9rZXlwYWRfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3OTBwOTEwX2tleXBhZF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJudWM5MDAta2V5cGFkIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHc5MHA5MTBfa2V5cGFkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3OTBwOTEwX2tleXBhZF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdzkwcDkxMF9rZXlwYWRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3OTBwOTEwX2tleXBhZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3OTBwOTEwX2tleXBhZF9pbml0KTsKK21vZHVsZV9leGl0KHc5MHA5MTBfa2V5cGFkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInc5MHA5MTAga2V5cGFkIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpudWM5MDAta2V5cGFkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCmluZGV4IDFhY2ZhM2EuLmNiZTIxYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCkBAIC0yNjksNCArMjY5LDE0IEBACiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRtMzU1ZXZtX2tleXMuCisKK2NvbmZpZyBJTlBVVF9CRklOX1JPVEFSWQorCXRyaXN0YXRlICJCbGFja2ZpbiBSb3Rhcnkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEJGNTR4IHx8IEJGNTJ4CisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEJsYWNrZmluIFJvdGFyeS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmZpbi1yb3RhcnkuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKaW5kZXggMGQ5NzlmZC4uNzljMWU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQpAQCAtOCw2ICs4LDcgQEAKIG9iai0kKENPTkZJR19JTlBVVF9BVElfUkVNT1RFKQkJKz0gYXRpX3JlbW90ZS5vCiBvYmotJChDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIpCQkrPSBhdGlfcmVtb3RlMi5vCiBvYmotJChDT05GSUdfSU5QVVRfQVRMQVNfQlROUykJCSs9IGF0bGFzX2J0bnMubworb2JqLSQoQ09ORklHX0lOUFVUX0JGSU5fUk9UQVJZKQkJKz0gYmZpbl9yb3Rhcnkubwogb2JqLSQoQ09ORklHX0lOUFVUX0NNMTA5KQkJKz0gY20xMDkubwogb2JqLSQoQ09ORklHX0lOUFVUX0NPQkFMVF9CVE5TKQkJKz0gY29iYWx0X2J0bnMubwogb2JqLSQoQ09ORklHX0lOUFVUX0RNMzU1RVZNKQkJKz0gZG0zNTVldm1fa2V5cy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvYmZpbl9yb3RhcnkuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9iZmluX3JvdGFyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MGYzZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYmZpbl9yb3RhcnkuYwpAQCAtMCwwICsxLDI4MyBAQAorLyoKKyAqIFJvdGFyeSBjb3VudGVyIGRyaXZlciBmb3IgQW5hbG9nIERldmljZXMgQmxhY2tmaW4gUHJvY2Vzc29ycworICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CisjaW5jbHVkZSA8YXNtL2JmaW5fcm90YXJ5Lmg+CisKK3N0YXRpYyBjb25zdCB1MTYgcGVyX2NudFtdID0geworCVBfQ05UX0NVRCwKKwlQX0NOVF9DREcsCisJUF9DTlRfQ1pNLAorCTAKK307CisKK3N0cnVjdCBiZmluX3JvdCB7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJaW50IGlycTsKKwl1bnNpZ25lZCBpbnQgdXBfa2V5OworCXVuc2lnbmVkIGludCBkb3duX2tleTsKKwl1bnNpZ25lZCBpbnQgYnV0dG9uX2tleTsKKwl1bnNpZ25lZCBpbnQgcmVsX2NvZGU7CisJdW5zaWduZWQgc2hvcnQgY250X2NvbmZpZzsKKwl1bnNpZ25lZCBzaG9ydCBjbnRfaW1hc2s7CisJdW5zaWduZWQgc2hvcnQgY250X2RlYm91bmNlOworfTsKKworc3RhdGljIHZvaWQgcmVwb3J0X2tleV9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwgaW50IGtleWNvZGUpCit7CisJLyogc2ltdWxhdGUgYSBwcmVzcy1uLXJlbGVhc2UgKi8KKwlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBrZXljb2RlLCAxKTsKKwlpbnB1dF9zeW5jKGlucHV0KTsKKwlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBrZXljb2RlLCAwKTsKKwlpbnB1dF9zeW5jKGlucHV0KTsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0X3JvdGFyeV9ldmVudChzdHJ1Y3QgYmZpbl9yb3QgKnJvdGFyeSwgaW50IGRlbHRhKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gcm90YXJ5LT5pbnB1dDsKKworCWlmIChyb3RhcnktPnVwX2tleSkgeworCQlyZXBvcnRfa2V5X2V2ZW50KGlucHV0LAorCQkJCSBkZWx0YSA+IDAgPyByb3RhcnktPnVwX2tleSA6IHJvdGFyeS0+ZG93bl9rZXkpOworCX0gZWxzZSB7CisJCWlucHV0X3JlcG9ydF9yZWwoaW5wdXQsIHJvdGFyeS0+cmVsX2NvZGUsIGRlbHRhKTsKKwkJaW5wdXRfc3luYyhpbnB1dCk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYmZpbl9yb3RhcnlfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2X2lkOworCXN0cnVjdCBiZmluX3JvdCAqcm90YXJ5ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGRlbHRhOworCisJc3dpdGNoIChiZmluX3JlYWRfQ05UX1NUQVRVUygpKSB7CisKKwljYXNlIElDSUk6CisJCWJyZWFrOworCisJY2FzZSBVQ0lJOgorCWNhc2UgRENJSToKKwkJZGVsdGEgPSBiZmluX3JlYWRfQ05UX0NPVU5URVIoKTsKKwkJaWYgKGRlbHRhKQorCQkJcmVwb3J0X3JvdGFyeV9ldmVudChyb3RhcnksIGRlbHRhKTsKKwkJYnJlYWs7CisKKwljYXNlIENaTUlJOgorCQlyZXBvcnRfa2V5X2V2ZW50KHJvdGFyeS0+aW5wdXQsIHJvdGFyeS0+YnV0dG9uX2tleSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYmZpbl93cml0ZV9DTlRfQ09NTUFORChXMUxDTlRfWkVSTyk7CS8qIENsZWFyIENPVU5URVIgKi8KKwliZmluX3dyaXRlX0NOVF9TVEFUVVMoLTEpOwkvKiBDbGVhciBTVEFUVVMgKi8KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYmZpbl9yb3RhcnlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmZpbl9yb3RhcnlfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYmZpbl9yb3QgKnJvdGFyeTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwlpbnQgZXJyb3I7CisKKwkvKiBCYXNpYyB2YWxpZGF0aW9uICovCisJaWYgKChwZGF0YS0+cm90YXJ5X3VwX2tleSAmJiAhcGRhdGEtPnJvdGFyeV9kb3duX2tleSkgfHwKKwkgICAgKCFwZGF0YS0+cm90YXJ5X3VwX2tleSAmJiBwZGF0YS0+cm90YXJ5X2Rvd25fa2V5KSkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnJvciA9IHBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KHBlcl9jbnQsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdGluZyBwZXJpcGhlcmFscyBmYWlsZWRcbiIpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcm90YXJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmaW5fcm90KSwgR0ZQX0tFUk5FTCk7CisJaW5wdXQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIXJvdGFyeSB8fCAhaW5wdXQpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dDE7CisJfQorCisJcm90YXJ5LT5pbnB1dCA9IGlucHV0OworCisJcm90YXJ5LT51cF9rZXkgPSBwZGF0YS0+cm90YXJ5X3VwX2tleTsKKwlyb3RhcnktPmRvd25fa2V5ID0gcGRhdGEtPnJvdGFyeV9kb3duX2tleTsKKwlyb3RhcnktPmJ1dHRvbl9rZXkgPSBwZGF0YS0+cm90YXJ5X2J1dHRvbl9rZXk7CisJcm90YXJ5LT5yZWxfY29kZSA9IHBkYXRhLT5yb3RhcnlfcmVsX2NvZGU7CisKKwllcnJvciA9IHJvdGFyeS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIG91dDE7CisKKwlpbnB1dC0+bmFtZSA9IHBkZXYtPm5hbWU7CisJaW5wdXQtPnBoeXMgPSAiYmZpbi1yb3RhcnkvaW5wdXQwIjsKKwlpbnB1dC0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dCwgcm90YXJ5KTsKKworCWlucHV0LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJaW5wdXQtPmlkLnZlbmRvciA9IDB4MDAwMTsKKwlpbnB1dC0+aWQucHJvZHVjdCA9IDB4MDAwMTsKKwlpbnB1dC0+aWQudmVyc2lvbiA9IDB4MDEwMDsKKworCWlmIChyb3RhcnktPnVwX2tleSkgeworCQlfX3NldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOworCQlfX3NldF9iaXQocm90YXJ5LT51cF9rZXksIGlucHV0LT5rZXliaXQpOworCQlfX3NldF9iaXQocm90YXJ5LT5kb3duX2tleSwgaW5wdXQtPmtleWJpdCk7CisJfSBlbHNlIHsKKwkJX19zZXRfYml0KEVWX1JFTCwgaW5wdXQtPmV2Yml0KTsKKwkJX19zZXRfYml0KHJvdGFyeS0+cmVsX2NvZGUsIGlucHV0LT5yZWxiaXQpOworCX0KKworCWlmIChyb3RhcnktPmJ1dHRvbl9rZXkpIHsKKwkJX19zZXRfYml0KEVWX0tFWSwgaW5wdXQtPmV2Yml0KTsKKwkJX19zZXRfYml0KHJvdGFyeS0+YnV0dG9uX2tleSwgaW5wdXQtPmtleWJpdCk7CisJfQorCisJZXJyb3IgPSByZXF1ZXN0X2lycShyb3RhcnktPmlycSwgYmZpbl9yb3RhcnlfaXNyLAorCQkJICAgIDAsIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBwZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJInVuYWJsZSB0byBjbGFpbSBpcnEgJWQ7IGVycm9yICVkXG4iLAorCQkJcm90YXJ5LT5pcnEsIGVycm9yKTsKKwkJZ290byBvdXQxOworCX0KKworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJInVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2UgKCVkKVxuIiwgZXJyb3IpOworCQlnb3RvIG91dDI7CisJfQorCisJaWYgKHBkYXRhLT5yb3RhcnlfYnV0dG9uX2tleSkKKwkJYmZpbl93cml0ZV9DTlRfSU1BU0soQ1pNSUUpOworCisJaWYgKHBkYXRhLT5tb2RlICYgUk9UX0RFQkUpCisJCWJmaW5fd3JpdGVfQ05UX0RFQk9VTkNFKHBkYXRhLT5kZWJvdW5jZSAmIERQUkVTQ0FMRSk7CisKKwlpZiAocGRhdGEtPm1vZGUpCisJCWJmaW5fd3JpdGVfQ05UX0NPTkZJRyhiZmluX3JlYWRfQ05UX0NPTkZJRygpIHwKKwkJCQkJKHBkYXRhLT5tb2RlICYgfkNOVEUpKTsKKworCWJmaW5fd3JpdGVfQ05UX0lNQVNLKGJmaW5fcmVhZF9DTlRfSU1BU0soKSB8IFVDSUUgfCBEQ0lFKTsKKwliZmluX3dyaXRlX0NOVF9DT05GSUcoYmZpbl9yZWFkX0NOVF9DT05GSUcoKSB8IENOVEUpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcm90YXJ5KTsKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisKKwlyZXR1cm4gMDsKKworb3V0MjoKKwlmcmVlX2lycShyb3RhcnktPmlycSwgcGRldik7CitvdXQxOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKKwlrZnJlZShyb3RhcnkpOworCXBlcmlwaGVyYWxfZnJlZV9saXN0KHBlcl9jbnQpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBiZmluX3JvdGFyeV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmZpbl9yb3QgKnJvdGFyeSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJYmZpbl93cml0ZV9DTlRfQ09ORklHKDApOworCWJmaW5fd3JpdGVfQ05UX0lNQVNLKDApOworCisJZnJlZV9pcnEocm90YXJ5LT5pcnEsIHBkZXYpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHJvdGFyeS0+aW5wdXQpOworCXBlcmlwaGVyYWxfZnJlZV9saXN0KHBlcl9jbnQpOworCisJa2ZyZWUocm90YXJ5KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGJmaW5fcm90YXJ5X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYmZpbl9yb3QgKnJvdGFyeSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcm90YXJ5LT5jbnRfY29uZmlnID0gYmZpbl9yZWFkX0NOVF9DT05GSUcoKTsKKwlyb3RhcnktPmNudF9pbWFzayA9IGJmaW5fcmVhZF9DTlRfSU1BU0soKTsKKwlyb3RhcnktPmNudF9kZWJvdW5jZSA9IGJmaW5fcmVhZF9DTlRfREVCT1VOQ0UoKTsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwkJZW5hYmxlX2lycV93YWtlKHJvdGFyeS0+aXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJmaW5fcm90YXJ5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBiZmluX3JvdCAqcm90YXJ5ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwliZmluX3dyaXRlX0NOVF9ERUJPVU5DRShyb3RhcnktPmNudF9kZWJvdW5jZSk7CisJYmZpbl93cml0ZV9DTlRfSU1BU0socm90YXJ5LT5jbnRfaW1hc2spOworCWJmaW5fd3JpdGVfQ05UX0NPTkZJRyhyb3RhcnktPmNudF9jb25maWcgJiB+Q05URSk7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJCWRpc2FibGVfaXJxX3dha2Uocm90YXJ5LT5pcnEpOworCisJaWYgKHJvdGFyeS0+Y250X2NvbmZpZyAmIENOVEUpCisJCWJmaW5fd3JpdGVfQ05UX0NPTkZJRyhyb3RhcnktPmNudF9jb25maWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBiZmluX3JvdGFyeV9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBiZmluX3JvdGFyeV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gYmZpbl9yb3RhcnlfcmVzdW1lLAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiZmluX3JvdGFyeV9kZXZpY2VfZHJpdmVyID0geworCS5wcm9iZQkJPSBiZmluX3JvdGFyeV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGJmaW5fcm90YXJ5X3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImJmaW4tcm90YXJ5IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZiZmluX3JvdGFyeV9wbV9vcHMsCisjZW5kaWYKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYmZpbl9yb3RhcnlfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmJmaW5fcm90YXJ5X2RldmljZV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoYmZpbl9yb3RhcnlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiZmluX3JvdGFyeV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJmaW5fcm90YXJ5X2RldmljZV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYmZpbl9yb3RhcnlfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSGVubmVyaWNoIDxoZW5uZXJpY2hAYmxhY2tmaW4udWNsaW51eC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJvdGFyeSBDb3VudGVyIGRyaXZlciBmb3IgQmxhY2tmaW4gUHJvY2Vzc29ycyIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpiZmluLXJvdGFyeSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2NvYmFsdF9idG5zLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvY29iYWx0X2J0bnMuYwppbmRleCBkMTE0ZDNhLi5lZTczZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvY29iYWx0X2J0bnMuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvY29iYWx0X2J0bnMuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJfQogCiAJYmRldi0+cG9sbF9kZXYgPSBwb2xsX2RldjsKLQliZGV2LT5yZWcgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWJkZXYtPnJlZyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgYmRldik7CiAKIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX3BvbGxlZF9kZXZpY2UocG9sbF9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2RtMzU1ZXZtX2tleXMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9kbTM1NWV2bV9rZXlzLmMKaW5kZXggYTYzMzE1Yy4uMDkxOGFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2RtMzU1ZXZtX2tleXMuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvZG0zNTVldm1fa2V5cy5jCkBAIC0yMywzMCArMjMsMTYgQEAKICAqIHByZXNzZWQsIG9yIGl0cyBhdXRvcmVwZWF0IGtpY2tzIGluLCBhbiBldmVudCBpcyBzZW50LiAgVGhpcyBkcml2ZXIKICAqIHJlYWQgdGhvc2UgZXZlbnRzIGZyb20gdGhlIHNtYWxsICgzMiBldmVudCkgcXVldWUgYW5kIHJlcG9ydHMgdGhlbS4KICAqCi0gKiBCZWNhdXNlIHdlIGNvbW11bmljYXRlIHdpdGggdGhlIE1TUDQzMCB1c2luZyBJMkMsIGFuZCBhbGwgSTJDIGNhbGxzCi0gKiBpbiBMaW51eCBzbGVlcCwgd2UgbmVlZCB0byBjb25zIHVwIGEga2luZCBvZiB0aHJlYWRlZCBJUlEgaGFuZGxlcgotICogdXNpbmcgYSB3b3JrX3N0cnVjdC4gIFRoZSBJUlEgaXMgYWN0aXZlIGxvdywgYnV0IHdlIHVzZSBpdCB0aHJvdWdoCi0gKiB0aGUgR1BJTyBjb250cm9sbGVyIHNvIHdlIGNhbiB0cmlnZ2VyIG9uIGZhbGxpbmcgZWRnZXMuCi0gKgogICogTm90ZSB0aGF0IHBoeXNpY2FsbHkgdGhlcmUgY2FuIG9ubHkgYmUgb25lIG9mIHRoZXNlIGRldmljZXMuCiAgKgogICogVGhpcyBkcml2ZXIgd2FzIHRlc3RlZCB3aXRoIGZpcm13YXJlIHJldmlzaW9uIEE0LgogICovCiBzdHJ1Y3QgZG0zNTVldm1fa2V5cyB7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CiAJc3RydWN0IGlucHV0X2RldgkqaW5wdXQ7CiAJc3RydWN0IGRldmljZQkJKmRldjsKIAlpbnQJCQlpcnE7CiB9OwogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG0zNTVldm1fa2V5c19pcnEoaW50IGlycSwgdm9pZCAqX2tleXMpCi17Ci0Jc3RydWN0IGRtMzU1ZXZtX2tleXMJKmtleXMgPSBfa2V5czsKLQotCXNjaGVkdWxlX3dvcmsoJmtleXMtPndvcmspOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQogLyogVGhlc2UgaW5pdGlhbCBrZXljb2RlcyBjYW4gYmUgcmVtYXBwZWQgYnkgZG0zNTVldm1fc2V0a2V5Y29kZSgpLiAqLwogc3RhdGljIHN0cnVjdCB7CiAJdTE2CWV2ZW50OwpAQCAtMTEwLDEzICs5NiwxMiBAQAogCXsgMHgzMTY5LCBLRVlfUEFVU0UsIH0sCiB9OwogCi1zdGF0aWMgdm9pZCBkbTM1NWV2bV9rZXlzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorLyogcnVucyBpbiBhbiBJUlEgdGhyZWFkIC0tIGNhbiAoYW5kIHdpbGwhKSBzbGVlcCAqLworc3RhdGljIGlycXJldHVybl90IGRtMzU1ZXZtX2tleXNfaXJxKGludCBpcnEsIHZvaWQgKl9rZXlzKQogewotCXN0cnVjdCBkbTM1NWV2bV9rZXlzCSprZXlzOworCXN0cnVjdCBkbTM1NWV2bV9rZXlzCSprZXlzID0gX2tleXM7CiAJaW50CQkJc3RhdHVzOwogCi0Ja2V5cyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG0zNTVldm1fa2V5cywgd29yayk7Ci0KIAkvKiBGb3Igc2ltcGxpY2l0eSB3ZSBpZ25vcmUgSU5QVVRfQ09VTlQgYW5kIGp1c3QgcmVhZAogCSAqIGV2ZW50cyB1bnRpbCB3ZSBnZXQgdGhlICJxdWV1ZSBlbXB0eSIgaW5kaWNhdG9yLgogCSAqIFJlYWRpbmcgSU5QVVRfTE9XIGRlY3JlbWVudHMgdGhlIGNvdW50LgpAQCAtMTgzLDYgKzE2OCwxOSBAQAogCQlpbnB1dF9yZXBvcnRfa2V5KGtleXMtPmlucHV0LCBrZXljb2RlLCAwKTsKIAkJaW5wdXRfc3luYyhrZXlzLT5pbnB1dCk7CiAJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIEJlY2F1c2Ugd2UgY29tbXVuaWNhdGUgd2l0aCB0aGUgTVNQNDMwIHVzaW5nIEkyQywgYW5kIGFsbCBJMkMgY2FsbHMKKyAqIGluIExpbnV4IHNsZWVwLCB3ZSB1c2UgYSB0aHJlYWRlZCBJUlEgaGFuZGxlci4gIFRoZSBJUlEgaXRzZWxmIGlzCisgKiBhY3RpdmUgbG93LCBidXQgd2UgZ28gdGhyb3VnaCB0aGUgR1BJTyBjb250cm9sbGVyIHNvIHdlIGNhbiB0cmlnZ2VyCisgKiBvbiBmYWxsaW5nIGVkZ2VzIGFuZCBub3Qgd29ycnkgYWJvdXQgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBJUlEgaW4KKyAqIHRoZSBrZXlwcmVzcyBoYW5kbGluZyBwYXRoLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZG0zNTVldm1fa2V5c19oYXJkaXJxKGludCBpcnEsIHZvaWQgKl9rZXlzKQoreworCXJldHVybiBJUlFfV0FLRV9USFJFQUQ7CiB9CiAKIHN0YXRpYyBpbnQgZG0zNTVldm1fc2V0a2V5Y29kZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBpbmRleCwgaW50IGtleWNvZGUpCkBAIC0yMzMsNyArMjMxLDYgQEAKIAogCWtleXMtPmRldiA9ICZwZGV2LT5kZXY7CiAJa2V5cy0+aW5wdXQgPSBpbnB1dDsKLQlJTklUX1dPUksoJmtleXMtPndvcmssIGRtMzU1ZXZtX2tleXNfd29yayk7CiAKIAkvKiBzZXQgdXAgInRocmVhZGVkIElSUSBoYW5kbGVyIiAqLwogCXN0YXR1cyA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CkBAIC0yNjAsOSArMjU3LDEwIEBACiAKIAkvKiBSRVZJU0lUOiAgZmx1c2ggdGhlIGV2ZW50IHF1ZXVlPyAqLwogCi0Jc3RhdHVzID0gcmVxdWVzdF9pcnEoa2V5cy0+aXJxLCBkbTM1NWV2bV9rZXlzX2lycSwKLQkJCSAgICAgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkgICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBrZXlzKTsKKwlzdGF0dXMgPSByZXF1ZXN0X3RocmVhZGVkX2lycShrZXlzLT5pcnEsCisJCQlkbTM1NWV2bV9rZXlzX2hhcmRpcnEsIGRtMzU1ZXZtX2tleXNfaXJxLAorCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSwga2V5cyk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZmFpbDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwppbmRleCAyN2VlOTc2Li4xMWZkMDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCkBAIC0yNDMsOSArMjQzLDkgQEAKICNkZWZpbmUgRkVfVU5URVNURUQgMHg4MAogCiBzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqa2V5bWFwOyAvKiA9IE5VTEw7IEN1cnJlbnQga2V5IG1hcCAqLwotc3RhdGljIGludCBoYXZlX3dpZmk7Ci1zdGF0aWMgaW50IGhhdmVfYmx1ZXRvb3RoOwotc3RhdGljIGludCBoYXZlX2xlZHM7CitzdGF0aWMgYm9vbCBoYXZlX3dpZmk7CitzdGF0aWMgYm9vbCBoYXZlX2JsdWV0b290aDsKK3N0YXRpYyBpbnQgbGVkc19wcmVzZW50OwkvKiBiaXRtYXNrIG9mIGxlZHMgcHJlc2VudCAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBkbWlfbWF0Y2hlZChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZG1pKQogewpAQCAtMjU0LDExICsyNTQsMTEgQEAKIAlrZXltYXAgPSBkbWktPmRyaXZlcl9kYXRhOwogCWZvciAoa2V5ID0ga2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykgewogCQlpZiAoa2V5LT50eXBlID09IEtFX1dJRkkpCi0JCQloYXZlX3dpZmkgPSAxOworCQkJaGF2ZV93aWZpID0gdHJ1ZTsKIAkJZWxzZSBpZiAoa2V5LT50eXBlID09IEtFX0JMVUVUT09USCkKLQkJCWhhdmVfYmx1ZXRvb3RoID0gMTsKKwkJCWhhdmVfYmx1ZXRvb3RoID0gdHJ1ZTsKIAl9Ci0JaGF2ZV9sZWRzID0ga2V5LT5jb2RlICYgKEZFX01BSUxfTEVEIHwgRkVfV0lGSV9MRUQpOworCWxlZHNfcHJlc2VudCA9IGtleS0+Y29kZSAmIChGRV9NQUlMX0xFRCB8IEZFX1dJRklfTEVEKTsKIAogCXJldHVybiAxOwogfQpAQCAtNjExLDEwICs2MTEsMjQgQEAKIAl7IEtFX0VORCwgMCB9CiB9OwogCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSBrZXltYXBfYW9wZW5fMTU1N1tdIF9faW5pdGRhdGEgPSB7CisJeyBLRV9LRVksICAweDAxLCB7S0VZX0hFTFB9IH0sCisJeyBLRV9LRVksICAweDExLCB7S0VZX1BST0cxfSB9LAorCXsgS0VfS0VZLCAgMHgxMiwge0tFWV9QUk9HMn0gfSwKKwl7IEtFX1dJRkksIDB4MzAgfSwKKwl7IEtFX0tFWSwgIDB4MjIsIHtLRVlfUkVXSU5EfSB9LAorCXsgS0VfS0VZLCAgMHgyMywge0tFWV9GT1JXQVJEfSB9LAorCXsgS0VfS0VZLCAgMHgyNCwge0tFWV9QTEFZUEFVU0V9IH0sCisJeyBLRV9LRVksICAweDI1LCB7S0VZX1NUT1BDRH0gfSwKKwl7IEtFX0tFWSwgIDB4MzEsIHtLRVlfTUFJTH0gfSwKKwl7IEtFX0tFWSwgIDB4MzYsIHtLRVlfV1dXfSB9LAorCXsgS0VfRU5ELCAgMCB9Cit9OworCiBzdGF0aWMgc3RydWN0IGtleV9lbnRyeSBrZXltYXBfcHJlc3RpZ2lvW10gX19pbml0ZGF0YSA9IHsKIAl7IEtFX0tFWSwgIDB4MTEsIHtLRVlfUFJPRzF9IH0sCiAJeyBLRV9LRVksICAweDEyLCB7S0VZX1BST0cyfSB9LAotCXsgS0VfV0lGSSwgIDB4MzAgfSwKKwl7IEtFX1dJRkksIDB4MzAgfSwKIAl7IEtFX0tFWSwgIDB4MjIsIHtLRVlfUkVXSU5EfSB9LAogCXsgS0VfS0VZLCAgMHgyMywge0tFWV9GT1JXQVJEfSB9LAogCXsgS0VfS0VZLCAgMHgyNCwge0tFWV9QTEFZUEFVU0V9IH0sCkBAIC05ODUsNiArOTk5LDggQEAKIAlpZiAoa2V5bWFwX25hbWUgIT0gTlVMTCkgewogCQlpZiAoc3RyY21wIChrZXltYXBfbmFtZSwgIjE1NTcvTVMyMTQxIikgPT0gMCkKIAkJCWtleW1hcCA9IGtleW1hcF93aXN0cm9uX21zMjE0MTsKKwkJZWxzZSBpZiAoc3RyY21wIChrZXltYXBfbmFtZSwgImFvcGVuMTU1NyIpID09IDApCisJCQlrZXltYXAgPSBrZXltYXBfYW9wZW5fMTU1NzsKIAkJZWxzZSBpZiAoc3RyY21wIChrZXltYXBfbmFtZSwgInByZXN0aWdpbyIpID09IDApCiAJCQlrZXltYXAgPSBrZXltYXBfcHJlc3RpZ2lvOwogCQllbHNlIGlmIChzdHJjbXAgKGtleW1hcF9uYW1lLCAiZ2VuZXJpYyIpID09IDApCkBAIC0xMDA5LDggKzEwMjUsOCBAQAogCiBzdGF0aWMgc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKndpc3Ryb25faWRldjsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfbGFzdF9wcmVzczsKLXN0YXRpYyBpbnQgd2lmaV9lbmFibGVkOwotc3RhdGljIGludCBibHVldG9vdGhfZW5hYmxlZDsKK3N0YXRpYyBib29sIHdpZmlfZW5hYmxlZDsKK3N0YXRpYyBib29sIGJsdWV0b290aF9lbmFibGVkOwogCiBzdGF0aWMgdm9pZCByZXBvcnRfa2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGtleWNvZGUpCiB7CkBAIC0xMDUzLDI0ICsxMDY5LDI0IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB3aXN0cm9uX2xlZF9pbml0KHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKIHsKLQlpZiAoaGF2ZV9sZWRzICYgRkVfV0lGSV9MRUQpIHsKKwlpZiAobGVkc19wcmVzZW50ICYgRkVfV0lGSV9MRUQpIHsKIAkJdTE2IHdpZmkgPSBiaW9zX2dldF9kZWZhdWx0X3NldHRpbmcoV0lGSSk7CiAJCWlmICh3aWZpICYgMSkgewogCQkJd2lzdHJvbl93aWZpX2xlZC5icmlnaHRuZXNzID0gKHdpZmkgJiAyKSA/IExFRF9GVUxMIDogTEVEX09GRjsKIAkJCWlmIChsZWRfY2xhc3NkZXZfcmVnaXN0ZXIocGFyZW50LCAmd2lzdHJvbl93aWZpX2xlZCkpCi0JCQkJaGF2ZV9sZWRzICY9IH5GRV9XSUZJX0xFRDsKKwkJCQlsZWRzX3ByZXNlbnQgJj0gfkZFX1dJRklfTEVEOwogCQkJZWxzZQogCQkJCWJpb3Nfc2V0X3N0YXRlKFdJRkksIHdpc3Ryb25fd2lmaV9sZWQuYnJpZ2h0bmVzcyk7CiAKIAkJfSBlbHNlCi0JCQloYXZlX2xlZHMgJj0gfkZFX1dJRklfTEVEOworCQkJbGVkc19wcmVzZW50ICY9IH5GRV9XSUZJX0xFRDsKIAl9CiAKLQlpZiAoaGF2ZV9sZWRzICYgRkVfTUFJTF9MRUQpIHsKKwlpZiAobGVkc19wcmVzZW50ICYgRkVfTUFJTF9MRUQpIHsKIAkJLyogYmlvc19nZXRfZGVmYXVsdF9zZXR0aW5nKE1BSUwpIGFsd2F5cyByZXR1bnMgMCwgc28ganVzdCB0dXJuIHRoZSBsZWQgb2ZmICovCiAJCXdpc3Ryb25fbWFpbF9sZWQuYnJpZ2h0bmVzcyA9IExFRF9PRkY7CiAJCWlmIChsZWRfY2xhc3NkZXZfcmVnaXN0ZXIocGFyZW50LCAmd2lzdHJvbl9tYWlsX2xlZCkpCi0JCQloYXZlX2xlZHMgJj0gfkZFX01BSUxfTEVEOworCQkJbGVkc19wcmVzZW50ICY9IH5GRV9NQUlMX0xFRDsKIAkJZWxzZQogCQkJYmlvc19zZXRfc3RhdGUoTUFJTF9MRUQsIHdpc3Ryb25fbWFpbF9sZWQuYnJpZ2h0bmVzcyk7CiAJfQpAQCAtMTA3OCwyOCArMTA5NCwyOCBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgd2lzdHJvbl9sZWRfcmVtb3ZlKHZvaWQpCiB7Ci0JaWYgKGhhdmVfbGVkcyAmIEZFX01BSUxfTEVEKQorCWlmIChsZWRzX3ByZXNlbnQgJiBGRV9NQUlMX0xFRCkKIAkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJndpc3Ryb25fbWFpbF9sZWQpOwogCi0JaWYgKGhhdmVfbGVkcyAmIEZFX1dJRklfTEVEKQorCWlmIChsZWRzX3ByZXNlbnQgJiBGRV9XSUZJX0xFRCkKIAkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJndpc3Ryb25fd2lmaV9sZWQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgd2lzdHJvbl9sZWRfc3VzcGVuZCh2b2lkKQogewotCWlmIChoYXZlX2xlZHMgJiBGRV9NQUlMX0xFRCkKKwlpZiAobGVkc19wcmVzZW50ICYgRkVfTUFJTF9MRUQpCiAJCWxlZF9jbGFzc2Rldl9zdXNwZW5kKCZ3aXN0cm9uX21haWxfbGVkKTsKIAotCWlmIChoYXZlX2xlZHMgJiBGRV9XSUZJX0xFRCkKKwlpZiAobGVkc19wcmVzZW50ICYgRkVfV0lGSV9MRUQpCiAJCWxlZF9jbGFzc2Rldl9zdXNwZW5kKCZ3aXN0cm9uX3dpZmlfbGVkKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHdpc3Ryb25fbGVkX3Jlc3VtZSh2b2lkKQogewotCWlmIChoYXZlX2xlZHMgJiBGRV9NQUlMX0xFRCkKKwlpZiAobGVkc19wcmVzZW50ICYgRkVfTUFJTF9MRUQpCiAJCWxlZF9jbGFzc2Rldl9yZXN1bWUoJndpc3Ryb25fbWFpbF9sZWQpOwogCi0JaWYgKGhhdmVfbGVkcyAmIEZFX1dJRklfTEVEKQorCWlmIChsZWRzX3ByZXNlbnQgJiBGRV9XSUZJX0xFRCkKIAkJbGVkX2NsYXNzZGV2X3Jlc3VtZSgmd2lzdHJvbl93aWZpX2xlZCk7CiB9CiAKQEAgLTEzMTIsNyArMTMyOCw3IEBACiAJaWYgKGhhdmVfd2lmaSkgewogCQl1MTYgd2lmaSA9IGJpb3NfZ2V0X2RlZmF1bHRfc2V0dGluZyhXSUZJKTsKIAkJaWYgKHdpZmkgJiAxKQotCQkJd2lmaV9lbmFibGVkID0gKHdpZmkgJiAyKSA/IDEgOiAwOworCQkJd2lmaV9lbmFibGVkID0gd2lmaSAmIDI7CiAJCWVsc2UKIAkJCWhhdmVfd2lmaSA9IDA7CiAKQEAgLTEzMjMsMTUgKzEzMzksMTYgQEAKIAlpZiAoaGF2ZV9ibHVldG9vdGgpIHsKIAkJdTE2IGJ0ID0gYmlvc19nZXRfZGVmYXVsdF9zZXR0aW5nKEJMVUVUT09USCk7CiAJCWlmIChidCAmIDEpCi0JCQlibHVldG9vdGhfZW5hYmxlZCA9IChidCAmIDIpID8gMSA6IDA7CisJCQlibHVldG9vdGhfZW5hYmxlZCA9IGJ0ICYgMjsKIAkJZWxzZQotCQkJaGF2ZV9ibHVldG9vdGggPSAwOworCQkJaGF2ZV9ibHVldG9vdGggPSBmYWxzZTsKIAogCQlpZiAoaGF2ZV9ibHVldG9vdGgpCiAJCQliaW9zX3NldF9zdGF0ZShCTFVFVE9PVEgsIGJsdWV0b290aF9lbmFibGVkKTsKIAl9CiAKIAl3aXN0cm9uX2xlZF9pbml0KCZkZXYtPmRldik7CisKIAllcnIgPSBzZXR1cF9pbnB1dF9kZXYoKTsKIAlpZiAoZXJyKSB7CiAJCWJpb3NfZGV0YWNoKCk7CkBAIC0xMzUyLDcgKzEzNjksNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHdpc3Ryb25fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgd2lzdHJvbl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpZiAoaGF2ZV93aWZpKQogCQliaW9zX3NldF9zdGF0ZShXSUZJLCAwKTsKQEAgLTEzNjEsMTAgKzEzNzgsMTEgQEAKIAkJYmlvc19zZXRfc3RhdGUoQkxVRVRPT1RILCAwKTsKIAogCXdpc3Ryb25fbGVkX3N1c3BlbmQoKTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdpc3Ryb25fcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgd2lzdHJvbl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCWlmIChoYXZlX3dpZmkpCiAJCWJpb3Nfc2V0X3N0YXRlKFdJRkksIHdpZmlfZW5hYmxlZCk7CkBAIC0xMzczLDI0ICsxMzkxLDMwIEBACiAJCWJpb3Nfc2V0X3N0YXRlKEJMVUVUT09USCwgYmx1ZXRvb3RoX2VuYWJsZWQpOwogCiAJd2lzdHJvbl9sZWRfcmVzdW1lKCk7CisKIAlwb2xsX2Jpb3ModHJ1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIHdpc3Ryb25fc3VzcGVuZAkJTlVMTAotI2RlZmluZSB3aXN0cm9uX3Jlc3VtZQkJTlVMTAorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgd2lzdHJvbl9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSB3aXN0cm9uX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB3aXN0cm9uX3Jlc3VtZSwKKwkucG93ZXJvZmYJPSB3aXN0cm9uX3N1c3BlbmQsCisJLnJlc3RvcmUJPSB3aXN0cm9uX3Jlc3VtZSwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd2lzdHJvbl9kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIndpc3Ryb24tYmlvcyIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmIENPTkZJR19QTQorCQkucG0JPSAmd2lzdHJvbl9wbV9vcHMsCisjZW5kaWYKIAl9LAogCS5wcm9iZQkJPSB3aXN0cm9uX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod2lzdHJvbl9yZW1vdmUpLAotCS5zdXNwZW5kCT0gd2lzdHJvbl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gd2lzdHJvbl9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB3Yl9tb2R1bGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCmluZGV4IDhhMmM1YjEuLjNmZWViM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKQEAgLTEwNyw2ICsxMDcsMTQgQEAKIAkgIGVudHJpZXMuIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLAogCSAgc2VlIDxmaWxlOkRvY3VtZW50YXRpb24vaW5wdXQvZWxhbnRlY2gudHh0Pi4KIAorY29uZmlnIE1PVVNFX1BTMl9TRU5URUxJQworCWJvb2wgIlNlbnRlbGljIEZpbmdlciBTZW5zaW5nIFBhZCBQUy8yIHByb3RvY29sIGV4dGVuc2lvbiIKKwlkZXBlbmRzIG9uIE1PVVNFX1BTMgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBsYXB0b3AgKHN1Y2ggYXMgTVNJIFdJTkQgTmV0Ym9vaykKKwkgIHdpdGggU2VudGVsaWMgRmluZ2VyIFNlbnNpbmcgUGFkIHRvdWNocGFkLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgTU9VU0VfUFMyX1RPVUNIS0lUCiAJYm9vbCAiZUdhbGF4IFRvdWNoS2l0IFBTLzIgcHJvdG9jb2wgZXh0ZW5zaW9uIgpAQCAtMjYyLDE0ICsyNzAsNiBAQAogCSAgZGVzY3JpYmVkIGluIHRoZSBzb3VyY2UgZmlsZSkuIFRoaXMgZHJpdmVyIGFsc28gd29ya3Mgd2l0aCB0aGUKIAkgIGRpZ2l0aXplciAoVlNYWFgtQUIpIERFQyBwcm9kdWNlZC4KIAotY29uZmlnIE1PVVNFX0hJTAotCXRyaXN0YXRlICJISUwgcG9pbnRlcnMgKG1pY2UgZXRjKS4iCi0JZGVwZW5kcyBvbiBHU0MgfHwgSFAzMDAKLQlzZWxlY3QgSFBfU0RDCi0Jc2VsZWN0IEhJTF9NTEMKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgSElMIHBvaW50ZXJzLgotCiBjb25maWcgTU9VU0VfR1BJTwogCXRyaXN0YXRlICJHUElPIG1vdXNlIgogCWRlcGVuZHMgb24gR0VORVJJQ19HUElPCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9NYWtlZmlsZQppbmRleCAwMTBmMjY1Li41NzBjODRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL01ha2VmaWxlCkBAIC05LDcgKzksNiBAQAogb2JqLSQoQ09ORklHX01PVVNFX0FUQVJJKQkJKz0gYXRhcmltb3VzZS5vCiBvYmotJChDT05GSUdfTU9VU0VfQkNNNTk3NCkJCSs9IGJjbTU5NzQubwogb2JqLSQoQ09ORklHX01PVVNFX0dQSU8pCQkrPSBncGlvX21vdXNlLm8KLW9iai0kKENPTkZJR19NT1VTRV9ISUwpCQkJKz0gaGlsX3B0ci5vCiBvYmotJChDT05GSUdfTU9VU0VfSU5QT1JUKQkJKz0gaW5wb3J0Lm8KIG9iai0kKENPTkZJR19NT1VTRV9MT0dJQk0pCQkrPSBsb2dpYm0ubwogb2JqLSQoQ09ORklHX01PVVNFX01BUExFKQkJKz0gbWFwbGVtb3VzZS5vCkBAIC0yOCw1ICsyNyw2IEBACiBwc21vdXNlLSQoQ09ORklHX01PVVNFX1BTMl9PTFBDKQkrPSBoZ3BrLm8KIHBzbW91c2UtJChDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUCkJKz0gbG9naXBzMnBwLm8KIHBzbW91c2UtJChDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LKQkrPSBsaWZlYm9vay5vCitwc21vdXNlLSQoQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQykJKz0gc2VudGVsaWMubwogcHNtb3VzZS0kKENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVCkJKz0gdHJhY2twb2ludC5vCiBwc21vdXNlLSQoQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCkJKz0gdG91Y2hraXRfcHMyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMKaW5kZXggNTU0N2UyNC4uZjM2MTEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogICogc3Vic2VxdWVudCBjb21tYW5kcy4gSXQgbG9va3MgbGlrZSBnbGlkZXBhZCBpcyBiZWhpbmQgc3RpY2twb2ludGVyLAogICogSSdkIHRob3VnaHQgaXQgd291bGQgYmUgb3RoZXIgd2F5IGFyb3VuZC4uLgogICovCi1zdGF0aWMgaW50IGFscHNfcGFzc3Rocm91Z2hfbW9kZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQgYWxwc19wYXNzdGhyb3VnaF9tb2RlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIGVuYWJsZSkKIHsKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OwogCWludCBjbWQgPSBlbmFibGUgPyBQU01PVVNFX0NNRF9TRVRTQ0FMRTIxIDogUFNNT1VTRV9DTURfU0VUU0NBTEUxMTsKQEAgLTM2NywxNiArMzY3LDE2IEBACiB7CiAJc3RydWN0IGFscHNfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CiAJdW5zaWduZWQgY2hhciBidWZbNl07Ci0JaW50IHBvbGxfZmFpbGVkOworCWJvb2wgcG9sbF9mYWlsZWQ7CiAKIAlpZiAocHJpdi0+aS0+ZmxhZ3MgJiBBTFBTX1BBU1MpCi0JCWFscHNfcGFzc3Rocm91Z2hfbW9kZShwc21vdXNlLCAxKTsKKwkJYWxwc19wYXNzdGhyb3VnaF9tb2RlKHBzbW91c2UsIHRydWUpOwogCiAJcG9sbF9mYWlsZWQgPSBwczJfY29tbWFuZCgmcHNtb3VzZS0+cHMyZGV2LCBidWYsCiAJCQkJICBQU01PVVNFX0NNRF9QT0xMIHwgKHBzbW91c2UtPnBrdHNpemUgPDwgOCkpIDwgMDsKIAogCWlmIChwcml2LT5pLT5mbGFncyAmIEFMUFNfUEFTUykKLQkJYWxwc19wYXNzdGhyb3VnaF9tb2RlKHBzbW91c2UsIDApOworCQlhbHBzX3Bhc3N0aHJvdWdoX21vZGUocHNtb3VzZSwgZmFsc2UpOwogCiAJaWYgKHBvbGxfZmFpbGVkIHx8IChidWZbMF0gJiBwcml2LT5pLT5tYXNrMCkgIT0gcHJpdi0+aS0+Ynl0ZTApCiAJCXJldHVybiAtMTsKQEAgLTQwMSwxMCArNDAxLDEyIEBACiAJaWYgKCFwcml2LT5pKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoKHByaXYtPmktPmZsYWdzICYgQUxQU19QQVNTKSAmJiBhbHBzX3Bhc3N0aHJvdWdoX21vZGUocHNtb3VzZSwgMSkpCisJaWYgKChwcml2LT5pLT5mbGFncyAmIEFMUFNfUEFTUykgJiYKKwkgICAgYWxwc19wYXNzdGhyb3VnaF9tb2RlKHBzbW91c2UsIHRydWUpKSB7CiAJCXJldHVybiAtMTsKKwl9CiAKLQlpZiAoYWxwc190YXBfbW9kZShwc21vdXNlLCAxKSkgeworCWlmIChhbHBzX3RhcF9tb2RlKHBzbW91c2UsIHRydWUpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImFscHMuYzogRmFpbGVkIHRvIGVuYWJsZSBoYXJkd2FyZSB0YXBwaW5nXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTQxNCw4ICs0MTYsMTAgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmICgocHJpdi0+aS0+ZmxhZ3MgJiBBTFBTX1BBU1MpICYmIGFscHNfcGFzc3Rocm91Z2hfbW9kZShwc21vdXNlLCAwKSkKKwlpZiAoKHByaXYtPmktPmZsYWdzICYgQUxQU19QQVNTKSAmJgorCSAgICBhbHBzX3Bhc3N0aHJvdWdoX21vZGUocHNtb3VzZSwgZmFsc2UpKSB7CiAJCXJldHVybiAtMTsKKwl9CiAKIAkvKiBBTFBTIG5lZWRzIHN0cmVhbSBtb2RlLCBvdGhlcndpc2UgaXQgd29uJ3QgcmVwb3J0IGFueSBkYXRhICovCiAJaWYgKHBzMl9jb21tYW5kKCZwc21vdXNlLT5wczJkZXYsIE5VTEwsIFBTTU9VU0VfQ01EX1NFVFNUUkVBTSkpIHsKQEAgLTUxOSw3ICs1MjMsNyBAQAogCXJldHVybiAtMTsKIH0KIAotaW50IGFscHNfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitpbnQgYWxwc19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7CiAJaW50IHZlcnNpb247CiAJY29uc3Qgc3RydWN0IGFscHNfbW9kZWxfaW5mbyAqbW9kZWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuaCBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5oCmluZGV4IDRiYmRkYzkuLmJjODc5MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5oCkBAIC0yNiwxMCArMjYsMTAgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfTU9VU0VfUFMyX0FMUFMKLWludCBhbHBzX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKTsKK2ludCBhbHBzX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcyk7CiBpbnQgYWxwc19pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKTsKICNlbHNlCi1pbmxpbmUgaW50IGFscHNfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitpbmxpbmUgaW50IGFscHNfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCXJldHVybiAtRU5PU1lTOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2JjbTU5NzQuYwppbmRleCAyZDhmYzBiLi4wZDFkMzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2JjbTU5NzQuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2JjbTU5NzQuYwpAQCAtMzE3LDcgKzMxNyw3IEBACiAJY29uc3Qgc3RydWN0IHRwX2ZpbmdlciAqZjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGRldi0+aW5wdXQ7CiAJaW50IHJhd19wLCByYXdfdywgcmF3X3gsIHJhd195LCByYXdfbjsKLQlpbnQgcHRlc3QgPSAwLCBvcmlnaW4gPSAwLCBpYnQgPSAwLCBubWluID0gMCwgbm1heCA9IDA7CisJaW50IHB0ZXN0LCBvcmlnaW4sIGlidCA9IDAsIG5taW4gPSAwLCBubWF4ID0gMDsKIAlpbnQgYWJzX3AgPSAwLCBhYnNfdyA9IDAsIGFic194ID0gMCwgYWJzX3kgPSAwOwogCiAJaWYgKHNpemUgPCBjLT50cF9vZmZzZXQgfHwgKHNpemUgLSBjLT50cF9vZmZzZXQpICUgU0laRU9GX0ZJTkdFUiAhPSAwKQpAQCAtMzQ1LDIxICszNDUsMjIgQEAKIAkJLyogc2V0IHRoZSBpbnRlZ3JhdGVkIGJ1dHRvbiBpZiBhcHBsaWNhYmxlICovCiAJCWlmIChjLT50cF90eXBlID09IFRZUEUyKQogCQkJaWJ0ID0gcmF3MmludChkZXYtPnRwX2RhdGFbQlVUVE9OX1RZUEUyXSk7Ci0JfQogCi0JLyogd2hpbGUgdHJhY2tpbmcgZmluZ2VyIHN0aWxsIHZhbGlkLCBjb3VudCBhbGwgZmluZ2VycyAqLwotCWlmIChwdGVzdCA+IFBSRVNTVVJFX0xPVyAmJiBvcmlnaW4pIHsKLQkJYWJzX3AgPSBwdGVzdDsKLQkJYWJzX3cgPSBpbnQyYm91bmQoJmMtPncsIHJhd193KTsKLQkJYWJzX3ggPSBpbnQyYm91bmQoJmMtPngsIHJhd194IC0gYy0+eC5kZXZtaW4pOwotCQlhYnNfeSA9IGludDJib3VuZCgmYy0+eSwgYy0+eS5kZXZtYXggLSByYXdfeSk7Ci0JCXdoaWxlIChyYXdfbi0tKSB7Ci0JCQlwdGVzdCA9IGludDJib3VuZCgmYy0+cCwgcmF3MmludChmLT5mb3JjZV9tYWpvcikpOwotCQkJaWYgKHB0ZXN0ID4gUFJFU1NVUkVfTE9XKQotCQkJCW5tYXgrKzsKLQkJCWlmIChwdGVzdCA+IFBSRVNTVVJFX0hJR0gpCi0JCQkJbm1pbisrOwotCQkJZisrOworCQkvKiB3aGlsZSB0cmFja2luZyBmaW5nZXIgc3RpbGwgdmFsaWQsIGNvdW50IGFsbCBmaW5nZXJzICovCisJCWlmIChwdGVzdCA+IFBSRVNTVVJFX0xPVyAmJiBvcmlnaW4pIHsKKwkJCWFic19wID0gcHRlc3Q7CisJCQlhYnNfdyA9IGludDJib3VuZCgmYy0+dywgcmF3X3cpOworCQkJYWJzX3ggPSBpbnQyYm91bmQoJmMtPngsIHJhd194IC0gYy0+eC5kZXZtaW4pOworCQkJYWJzX3kgPSBpbnQyYm91bmQoJmMtPnksIGMtPnkuZGV2bWF4IC0gcmF3X3kpOworCQkJd2hpbGUgKHJhd19uLS0pIHsKKwkJCQlwdGVzdCA9IGludDJib3VuZCgmYy0+cCwKKwkJCQkJCSAgcmF3MmludChmLT5mb3JjZV9tYWpvcikpOworCQkJCWlmIChwdGVzdCA+IFBSRVNTVVJFX0xPVykKKwkJCQkJbm1heCsrOworCQkJCWlmIChwdGVzdCA+IFBSRVNTVVJFX0hJR0gpCisJCQkJCW5taW4rKzsKKwkJCQlmKys7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guYwppbmRleCA0YmM3ODg5Mi4uZmRhMzVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guYwpAQCAtNTUzLDcgKzU1Myw3IEBACiAvKgogICogVXNlIG1hZ2ljIGtub2NrIHRvIGRldGVjdCBFbGFudGVjaCB0b3VjaHBhZAogICovCi1pbnQgZWxhbnRlY2hfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitpbnQgZWxhbnRlY2hfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CiAJdW5zaWduZWQgY2hhciBwYXJhbVszXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guaCBiL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guaAppbmRleCBlZDg0OGNjLi5mZWFjNWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmgKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5oCkBAIC0xMDksMTAgKzEwOSwxMCBAQAogfTsKIAogI2lmZGVmIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0gKLWludCBlbGFudGVjaF9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcyk7CitpbnQgZWxhbnRlY2hfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKTsKIGludCBlbGFudGVjaF9pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBlbGFudGVjaF9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK3N0YXRpYyBpbmxpbmUgaW50IGVsYW50ZWNoX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKaW5kZXggYTFhZDJmMS4uZGUxZTU1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKQEAgLTM2Nyw3ICszNjcsMzYgQEAKIH0KIAogX19QU01PVVNFX0RFRklORV9BVFRSKHBvd2VyZWQsIFNfSVdVU1IgfCBTX0lSVUdPLCBOVUxMLAotCQkgICAgICBoZ3BrX3Nob3dfcG93ZXJlZCwgaGdwa19zZXRfcG93ZXJlZCwgMCk7CisJCSAgICAgIGhncGtfc2hvd19wb3dlcmVkLCBoZ3BrX3NldF9wb3dlcmVkLCBmYWxzZSk7CisKK3N0YXRpYyBzc2l6ZV90IGhncGtfdHJpZ2dlcl9yZWNhbF9zaG93KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLAorCQl2b2lkICpkYXRhLCBjaGFyICpidWYpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhncGtfdHJpZ2dlcl9yZWNhbChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaGdwa19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCWludCBlcnI7CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpOworCWlmIChlcnIgfHwgdmFsdWUgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFdlIHF1ZXVlIHdvcmsgaW5zdGVhZCBvZiBkb2luZyByZWNhbGlicmF0aW9uIHJpZ2h0IGhlcmUKKwkgKiB0byBhdm9pZCBhZGRpbmcgbG9ja2luZyB0byB0byBoZ3BrX2ZvcmNlX3JlY2FsaWJyYXRlKCkKKwkgKiBzaW5jZSB3b3JrcXVldWUgcHJvdmlkZXMgc2VyaWFsaXphdGlvbi4KKwkgKi8KKwlwc21vdXNlX3F1ZXVlX3dvcmsocHNtb3VzZSwgJnByaXYtPnJlY2FsaWJfd3EsIDApOworCXJldHVybiBjb3VudDsKK30KKworX19QU01PVVNFX0RFRklORV9BVFRSKHJlY2FsaWJyYXRlLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwKKwkJICAgICAgaGdwa190cmlnZ2VyX3JlY2FsX3Nob3csIGhncGtfdHJpZ2dlcl9yZWNhbCwgZmFsc2UpOwogCiBzdGF0aWMgdm9pZCBoZ3BrX2Rpc2Nvbm5lY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCiB7CkBAIC0zNzUsNiArNDA0LDExIEBACiAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAogCQkJICAgJnBzbW91c2VfYXR0cl9wb3dlcmVkLmRhdHRyKTsKKworCWlmIChwc21vdXNlLT5tb2RlbCA+PSBIR1BLX01PREVMX0MpCisJCWRldmljZV9yZW1vdmVfZmlsZSgmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYsCisJCQkJICAgJnBzbW91c2VfYXR0cl9yZWNhbGlicmF0ZS5kYXR0cik7CisKIAlwc21vdXNlX3Jlc2V0KHBzbW91c2UpOwogCWtmcmVlKHByaXYpOwogfQpAQCAtNDIzLDEwICs0NTcsMjUgQEAKIAogCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYsCiAJCQkJICZwc21vdXNlX2F0dHJfcG93ZXJlZC5kYXR0cik7Ci0JaWYgKGVycikKLQkJaGdwa19lcnIocHNtb3VzZSwgIkZhaWxlZCB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlXG4iKTsKKwlpZiAoZXJyKSB7CisJCWhncGtfZXJyKHBzbW91c2UsICJGYWlsZWQgY3JlYXRpbmcgJ3Bvd2VyZWQnIHN5c2ZzIG5vZGVcbiIpOworCQlyZXR1cm4gZXJyOworCX0KIAotCXJldHVybiBlcnI7CisJLyogQy1zZXJpZXMgdG91Y2hwYWRzIGFkZGVkIHRoZSByZWNhbGlicmF0ZSBjb21tYW5kICovCisJaWYgKHBzbW91c2UtPm1vZGVsID49IEhHUEtfTU9ERUxfQykgeworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAorCQkJCQkgJnBzbW91c2VfYXR0cl9yZWNhbGlicmF0ZS5kYXR0cik7CisJCWlmIChlcnIpIHsKKwkJCWhncGtfZXJyKHBzbW91c2UsCisJCQkJIkZhaWxlZCBjcmVhdGluZyAncmVjYWxpYnJhdGUnIHN5c2ZzIG5vZGVcbiIpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKKwkJCQkJJnBzbW91c2VfYXR0cl9wb3dlcmVkLmRhdHRyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogaW50IGhncGtfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKQEAgLTQ0MCw3ICs0ODksNyBAQAogCiAJcHNtb3VzZS0+cHJpdmF0ZSA9IHByaXY7CiAJcHJpdi0+cHNtb3VzZSA9IHBzbW91c2U7Ci0JcHJpdi0+cG93ZXJlZCA9IDE7CisJcHJpdi0+cG93ZXJlZCA9IHRydWU7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnJlY2FsaWJfd3EsIGhncGtfcmVjYWxpYl93b3JrKTsKIAogCWVyciA9IHBzbW91c2VfcmVzZXQocHNtb3VzZSk7CkBAIC00ODMsNyArNTMyLDcgQEAKIAlyZXR1cm4gcGFyYW1bMl07CiB9CiAKLWludCBoZ3BrX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKQoraW50IGhncGtfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCWludCB2ZXJzaW9uOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuaCBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5oCmluZGV4IGE0YjJhOTYuLmQ2MWNmZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5oCkBAIC0xNSw3ICsxNSw3IEBACiAKIHN0cnVjdCBoZ3BrX2RhdGEgewogCXN0cnVjdCBwc21vdXNlICpwc21vdXNlOwotCWludCBwb3dlcmVkOworCWJvb2wgcG93ZXJlZDsKIAlpbnQgY291bnQsIHhfdGFsbHksIHlfdGFsbHk7CS8qIGhhcmR3YXJlIHdvcmthcm91bmQgc3R1ZmYgKi8KIAl1bnNpZ25lZCBsb25nIHJlY2FsaWJfd2luZG93OwogCXN0cnVjdCBkZWxheWVkX3dvcmsgcmVjYWxpYl93cTsKQEAgLTMzLDEwICszMywxMCBAQAogCWRldl9ub3RpY2UoJihwc21vdXNlKS0+cHMyZGV2LnNlcmlvLT5kZXYsIGZvcm1hdCwgIyMgYXJnKQogCiAjaWZkZWYgQ09ORklHX01PVVNFX1BTMl9PTFBDCi1pbnQgaGdwa19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcyk7CitpbnQgaGdwa19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpOwogaW50IGhncGtfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaGdwa19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK3N0YXRpYyBpbmxpbmUgaW50IGhncGtfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCXJldHVybiAtRU5PREVWOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oaWxfcHRyLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2hpbF9wdHIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI2M2NlMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2hpbF9wdHIuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0NyArMCwwIEBACi0vKgotICogR2VuZXJpYyBsaW51eC1pbnB1dCBkZXZpY2UgZHJpdmVyIGZvciBheGlzLWJlYXJpbmcgZGV2aWNlcwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBCcmlhbiBTLiBKdWxpbgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAotICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCi0gKiAyLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikuCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKgotICogUmVmZXJlbmNlczoKLSAqIEhQLUhJTCBUZWNobmljYWwgUmVmZXJlbmNlIE1hbnVhbC4gIEhld2xldHQgUGFja2FyZCBQcm9kdWN0IE5vLiA0NTkxOEEKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2hpbC5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KLQotI2RlZmluZSBQUkVGSVggIkhJTCBQVFI6ICIKLSNkZWZpbmUgSElMX0dFTkVSSUNfTkFNRSAiSElMIHBvaW50ZXIgZGV2aWNlIgotCi1NT0RVTEVfQVVUSE9SKCJCcmlhbiBTLiBKdWxpbiA8YnJpQGNhbHl4LmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTihISUxfR0VORVJJQ19OQU1FICIgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7Ci1NT0RVTEVfQUxJQVMoInNlcmlvOnR5MDNwcjI1aWQwRmV4KiIpOwotCi0jZGVmaW5lIFRBQkxFVF9TSU1VTEFURVNfTU9VU0UJLyogYWxsb3cgdGFibGV0IHRvIGJlIHVzZWQgYXMgbW91c2UgKi8KLSN1bmRlZiAgVEFCTEVUX0FVVE9BREpVU1QJLyogYXV0by1hZGp1c3QgdmFsaWQgdGFibGV0IHJhbmdlcyAqLwotCi0KLSNkZWZpbmUgSElMX1BUUl9NQVhfTEVOR1RIIDE2Ci0KLXN0cnVjdCBoaWxfcHRyIHsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7Ci0Jc3RydWN0IHNlcmlvICpzZXJpbzsKLQotCS8qIElucHV0IGJ1ZmZlciBhbmQgaW5kZXggZm9yIHBhY2tldHMgZnJvbSBISUwgYnVzLiAqLwotCWhpbF9wYWNrZXQgZGF0YVtISUxfUFRSX01BWF9MRU5HVEhdOwotCWludCBpZHg0OyAvKiBmb3VyIGNvdW50cyBwZXIgcGFja2V0ICovCi0KLQkvKiBSYXcgZGV2aWNlIGluZm8gcmVjb3JkcyBmcm9tIEhJTCBidXMsIHNlZSBoaWwuaCBmb3IgZmllbGRzLiAqLwotCWNoYXIJaWRkW0hJTF9QVFJfTUFYX0xFTkdUSF07CS8qIERJRCBieXRlIGFuZCBJREQgcmVjb3JkICovCi0JY2hhcglyc2NbSElMX1BUUl9NQVhfTEVOR1RIXTsJLyogUlNDIHJlY29yZCAqLwotCWNoYXIJZXhkW0hJTF9QVFJfTUFYX0xFTkdUSF07CS8qIEVYRCByZWNvcmQgKi8KLQljaGFyCXJubVtISUxfUFRSX01BWF9MRU5HVEggKyAxXTsJLyogUk5NIHJlY29yZCArIE5VTEwgdGVybS4gKi8KLQotCS8qIEV4dHJhIGRldmljZSBkZXRhaWxzIG5vdCBjb250YWluZWQgaW4gc3RydWN0IGlucHV0X2Rldi4gKi8KLQl1bnNpZ25lZCBpbnQgbmJ0biwgbmF4ZXM7Ci0JdW5zaWduZWQgaW50IGJ0bm1hcFs3XTsKLQotCS8qIFNvbWV0aGluZyB0byBzbGVlcCBhcm91bmQgd2l0aC4gKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKLX07Ci0KLS8qIFByb2Nlc3MgYSBjb21wbGV0ZSBwYWNrZXQgYWZ0ZXIgdHJhbnNmZXIgZnJvbSB0aGUgSElMICovCi1zdGF0aWMgdm9pZCBoaWxfcHRyX3Byb2Nlc3NfcmVjb3JkKHN0cnVjdCBoaWxfcHRyICpwdHIpCi17Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2ID0gcHRyLT5kZXY7Ci0JaGlsX3BhY2tldCAqZGF0YSA9IHB0ci0+ZGF0YTsKLQloaWxfcGFja2V0IHA7Ci0JaW50IGlkeCwgaSwgY250LCBsYXhpczsKLQlpbnQgYXgxNiwgYWJzZGV2OwotCi0JaWR4ID0gcHRyLT5pZHg0LzQ7Ci0JcCA9IGRhdGFbaWR4IC0gMV07Ci0KLQlpZiAoKHAgJiB+SElMX0NNRENUX1BPTCkgPT0KLQkgICAgKEhJTF9FUlJfSU5UIHwgSElMX1BLVF9DTUQgfCBISUxfQ01EX1BPTCkpCi0JCWdvdG8gcmVwb3J0OwotCWlmICgocCAmIH5ISUxfQ01EQ1RfUlBMKSA9PQotCSAgICAoSElMX0VSUl9JTlQgfCBISUxfUEtUX0NNRCB8IEhJTF9DTURfUlBMKSkKLQkJZ290byByZXBvcnQ7Ci0KLQkvKiBOb3QgYSBwb2xsIHJlc3BvbnNlLiAgU2VlIGlmIHdlIGFyZSBsb2FkaW5nIGNvbmZpZyByZWNvcmRzLiAqLwotCXN3aXRjaCAocCAmIEhJTF9QS1RfREFUQV9NQVNLKSB7Ci0JY2FzZSBISUxfQ01EX0lERDoKLQkJZm9yIChpID0gMDsgaSA8IGlkeDsgaSsrKQotCQkJcHRyLT5pZGRbaV0gPSBwdHItPmRhdGFbaV0gJiBISUxfUEtUX0RBVEFfTUFTSzsKLQkJZm9yICg7IGkgPCBISUxfUFRSX01BWF9MRU5HVEg7IGkrKykKLQkJCXB0ci0+aWRkW2ldID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIEhJTF9DTURfUlNDOgotCQlmb3IgKGkgPSAwOyBpIDwgaWR4OyBpKyspCi0JCQlwdHItPnJzY1tpXSA9IHB0ci0+ZGF0YVtpXSAmIEhJTF9QS1RfREFUQV9NQVNLOwotCQlmb3IgKDsgaSA8IEhJTF9QVFJfTUFYX0xFTkdUSDsgaSsrKQotCQkJcHRyLT5yc2NbaV0gPSAwOwotCQlicmVhazsKLQotCWNhc2UgSElMX0NNRF9FWEQ6Ci0JCWZvciAoaSA9IDA7IGkgPCBpZHg7IGkrKykKLQkJCXB0ci0+ZXhkW2ldID0gcHRyLT5kYXRhW2ldICYgSElMX1BLVF9EQVRBX01BU0s7Ci0JCWZvciAoOyBpIDwgSElMX1BUUl9NQVhfTEVOR1RIOyBpKyspCi0JCQlwdHItPmV4ZFtpXSA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBISUxfQ01EX1JOTToKLQkJZm9yIChpID0gMDsgaSA8IGlkeDsgaSsrKQotCQkJcHRyLT5ybm1baV0gPSBwdHItPmRhdGFbaV0gJiBISUxfUEtUX0RBVEFfTUFTSzsKLQkJZm9yICg7IGkgPCBISUxfUFRSX01BWF9MRU5HVEggKyAxOyBpKyspCi0JCQlwdHItPnJubVtpXSA9IDA7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJLyogVGhlc2Ugb2NjdXIgd2hlbiBkZXZpY2UgaXNuJ3QgcHJlc2VudCAqLwotCQlpZiAocCA9PSAoSElMX0VSUl9JTlQgfCBISUxfUEtUX0NNRCkpCi0JCQlicmVhazsKLQkJLyogQW55dGhpbmcgZWxzZSB3ZSdkIGxpa2UgdG8ga25vdyBhYm91dC4gKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIkRldmljZSBzZW50IHVua25vd24gcmVjb3JkICV4XG4iLCBwKTsKLQkJYnJlYWs7Ci0JfQotCWdvdG8gb3V0OwotCi0gcmVwb3J0OgotCWlmICgocCAmIEhJTF9DTURDVF9QT0wpICE9IGlkeCAtIDEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKLQkJCSJNYWxmb3JtZWQgcG9sbCBwYWNrZXQgJXggKGlkeCA9ICVpKVxuIiwgcCwgaWR4KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaSA9IChwdHItPmRhdGFbMF0gJiBISUxfUE9MX0FYSVNfQUxUKSA/IDMgOiAwOwotCWxheGlzID0gcHRyLT5kYXRhWzBdICYgSElMX1BPTF9OVU1fQVhFU19NQVNLOwotCWxheGlzICs9IGk7Ci0KLQlheDE2ID0gcHRyLT5pZGRbMV0gJiBISUxfSUREX0hFQURFUl8xNkJJVDsgLyogOCBvciAxNmJpdCByZXNvbHV0aW9uICovCi0JYWJzZGV2ID0gcHRyLT5pZGRbMV0gJiBISUxfSUREX0hFQURFUl9BQlM7Ci0KLQlmb3IgKGNudCA9IDE7IGkgPCBsYXhpczsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCBsbyxoaSx2YWw7Ci0JCWxvID0gcHRyLT5kYXRhW2NudCsrXSAmIEhJTF9QS1RfREFUQV9NQVNLOwotCQloaSA9IGF4MTYgPyAocHRyLT5kYXRhW2NudCsrXSAmIEhJTF9QS1RfREFUQV9NQVNLKSA6IDA7Ci0JCWlmIChhYnNkZXYpIHsKLQkJCXZhbCA9IGxvICsgKGhpPDw4KTsKLSNpZmRlZiBUQUJMRVRfQVVUT0FESlVTVAotCQkJaWYgKHZhbCA8IGRldi0+YWJzbWluW0FCU19YICsgaV0pCi0JCQkJZGV2LT5hYnNtaW5bQUJTX1ggKyBpXSA9IHZhbDsKLQkJCWlmICh2YWwgPiBkZXYtPmFic21heFtBQlNfWCArIGldKQotCQkJCWRldi0+YWJzbWF4W0FCU19YICsgaV0gPSB2YWw7Ci0jZW5kaWYKLQkJCWlmIChpJTMpIHZhbCA9IGRldi0+YWJzbWF4W0FCU19YICsgaV0gLSB2YWw7Ci0JCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ggKyBpLCB2YWwpOwotCQl9IGVsc2UgewotCQkJdmFsID0gKGludCkgKCgoaW50OF90KWxvKSB8ICgoaW50OF90KWhpPDw4KSk7Ci0JCQlpZiAoaSUzKQotCQkJCXZhbCAqPSAtMTsKLQkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCArIGksIHZhbCk7Ci0JCX0KLQl9Ci0KLQl3aGlsZSAoY250IDwgaWR4IC0gMSkgewotCQl1bnNpZ25lZCBpbnQgYnRuOwotCQlpbnQgdXA7Ci0JCWJ0biA9IHB0ci0+ZGF0YVtjbnQrK107Ci0JCXVwID0gYnRuICYgMTsKLQkJYnRuICY9IDB4ZmU7Ci0JCWlmIChidG4gPT0gMHg4ZSkKLQkJCWNvbnRpbnVlOyAvKiBUT0RPOiBwcm94aW1pdHkgPT0gdG91Y2g/ICovCi0JCWVsc2UKLQkJCWlmICgoYnRuID4gMHg4YykgfHwgKGJ0biA8IDB4ODApKQotCQkJCWNvbnRpbnVlOwotCQlidG4gPSAoYnRuIC0gMHg4MCkgPj4gMTsKLQkJYnRuID0gcHRyLT5idG5tYXBbYnRuXTsKLQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGJ0biwgIXVwKTsKLQl9Ci0JaW5wdXRfc3luYyhkZXYpOwotIG91dDoKLQlwdHItPmlkeDQgPSAwOwotCXVwKCZwdHItPnNlbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhpbF9wdHJfcHJvY2Vzc19lcnIoc3RydWN0IGhpbF9wdHIgKnB0cikKLXsKLQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiZXJyb3JlZCBISUwgcGFja2V0XG4iKTsKLQlwdHItPmlkeDQgPSAwOwotCXVwKCZwdHItPnNlbSk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBoaWxfcHRyX2ludGVycnVwdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLAotICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgaGlsX3B0ciAqcHRyOwotCWhpbF9wYWNrZXQgcGFja2V0OwotCWludCBpZHg7Ci0KLQlwdHIgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7Ci0JQlVHX09OKHB0ciA9PSBOVUxMKTsKLQotCWlmIChwdHItPmlkeDQgPj0gKEhJTF9QVFJfTUFYX0xFTkdUSCAqIHNpemVvZihoaWxfcGFja2V0KSkpIHsKLQkJaGlsX3B0cl9wcm9jZXNzX2VycihwdHIpOwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotCWlkeCA9IHB0ci0+aWR4NC80OwotCWlmICghKHB0ci0+aWR4NCAlIDQpKQotCQlwdHItPmRhdGFbaWR4XSA9IDA7Ci0JcGFja2V0ID0gcHRyLT5kYXRhW2lkeF07Ci0JcGFja2V0IHw9ICgoaGlsX3BhY2tldClkYXRhKSA8PCAoKDMgLSAocHRyLT5pZHg0ICUgNCkpICogOCk7Ci0JcHRyLT5kYXRhW2lkeF0gPSBwYWNrZXQ7Ci0KLQkvKiBSZWNvcmRzIG9mIE4gNC1ieXRlIGhpbF9wYWNrZXRzIG11c3QgdGVybWluYXRlIHdpdGggYSBjb21tYW5kLiAqLwotCWlmICgoKysocHRyLT5pZHg0KSkgJSA0KQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JaWYgKChwYWNrZXQgJiAweGZmZmYwMDAwKSAhPSBISUxfRVJSX0lOVCkgewotCQloaWxfcHRyX3Byb2Nlc3NfZXJyKHB0cik7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0JaWYgKHBhY2tldCAmIEhJTF9QS1RfQ01EKQotCQloaWxfcHRyX3Byb2Nlc3NfcmVjb3JkKHB0cik7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGhpbF9wdHJfZGlzY29ubmVjdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQotewotCXN0cnVjdCBoaWxfcHRyICpwdHI7Ci0KLQlwdHIgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7Ci0JQlVHX09OKHB0ciA9PSBOVUxMKTsKLQotCXNlcmlvX2Nsb3NlKHNlcmlvKTsKLQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShwdHItPmRldik7Ci0Ja2ZyZWUocHRyKTsKLX0KLQotc3RhdGljIGludCBoaWxfcHRyX2Nvbm5lY3Qoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IHNlcmlvX2RyaXZlciAqZHJpdmVyKQotewotCXN0cnVjdCBoaWxfcHRyCSpwdHI7Ci0JY29uc3QgY2hhcgkqdHh0OwotCXVuc2lnbmVkIGludAlpLCBuYXhzZXRzLCBidG50eXBlOwotCXVpbnQ4X3QJCWRpZCwgKmlkZDsKLQlpbnQJCWVycm9yOwotCi0JcHRyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhpbF9wdHIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXB0cikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlwdHItPmRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghcHRyLT5kZXYpIHsKLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIGJhaWwwOwotCX0KLQotCWVycm9yID0gc2VyaW9fb3BlbihzZXJpbywgZHJpdmVyKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gYmFpbDE7Ci0KLQlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgcHRyKTsKLQlwdHItPnNlcmlvID0gc2VyaW87Ci0KLQlpbml0X01VVEVYX0xPQ0tFRCgmcHRyLT5zZW0pOwotCi0JLyogR2V0IGRldmljZSBpbmZvLiAgTUxDIGRyaXZlciBzdXBwbGllcyBkZXZpZC9zdGF0dXMvZXRjLiAqLwotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCAwKTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOwotCXNlcmlvLT53cml0ZShzZXJpbywgSElMX0NNRF9JREQpOwotCWRvd24oJnB0ci0+c2VtKTsKLQotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCAwKTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOwotCXNlcmlvLT53cml0ZShzZXJpbywgSElMX0NNRF9SU0MpOwotCWRvd24oJnB0ci0+c2VtKTsKLQotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCAwKTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOwotCXNlcmlvLT53cml0ZShzZXJpbywgSElMX0NNRF9STk0pOwotCWRvd24oJnB0ci0+c2VtKTsKLQotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCAwKTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOwotCXNlcmlvLT53cml0ZShzZXJpbywgSElMX0NNRF9FWEQpOwotCWRvd24oJnB0ci0+c2VtKTsKLQotCXVwKCZwdHItPnNlbSk7Ci0KLQlkaWQgPSBwdHItPmlkZFswXTsKLQlpZGQgPSBwdHItPmlkZCArIDE7Ci0JdHh0ID0gInVua25vd24iOwotCi0JaWYgKChkaWQgJiBISUxfSUREX0RJRF9UWVBFX01BU0spID09IEhJTF9JRERfRElEX1RZUEVfUkVMKSB7Ci0JCXB0ci0+ZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX1JFTCk7Ci0JCXR4dCA9ICJyZWxhdGl2ZSI7Ci0JfQotCi0JaWYgKChkaWQgJiBISUxfSUREX0RJRF9UWVBFX01BU0spID09IEhJTF9JRERfRElEX1RZUEVfQUJTKSB7Ci0JCXB0ci0+ZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0FCUyk7Ci0JCXR4dCA9ICJhYnNvbHV0ZSI7Ci0JfQotCi0JaWYgKCFwdHItPmRldi0+ZXZiaXRbMF0pIHsKLQkJZXJyb3IgPSAtRU5PREVWOwotCQlnb3RvIGJhaWwyOwotCX0KLQotCXB0ci0+bmJ0biA9IEhJTF9JRERfTlVNX0JVVFRPTlMoaWRkKTsKLQlpZiAocHRyLT5uYnRuKQotCQlwdHItPmRldi0+ZXZiaXRbMF0gfD0gQklUX01BU0soRVZfS0VZKTsKLQotCW5heHNldHMgPSBISUxfSUREX05VTV9BWFNFVFMoKmlkZCk7Ci0JcHRyLT5uYXhlcyA9IEhJTF9JRERfTlVNX0FYRVNfUEVSX1NFVCgqaWRkKTsKLQotCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJISUwgcG9pbnRlciBkZXZpY2UgZm91bmQgKGRpZDogMHglMDJ4LCBheGlzOiAlcylcbiIsCi0JCQlkaWQsIHR4dCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkhJTCBwb2ludGVyIGhhcyAlaSBidXR0b25zIGFuZCAlaSBzZXRzIG9mICVpIGF4ZXNcbiIsCi0JCQlwdHItPm5idG4sIG5heHNldHMsIHB0ci0+bmF4ZXMpOwotCi0JYnRudHlwZSA9IEJUTl9NSVNDOwotCWlmICgoZGlkICYgSElMX0lERF9ESURfQUJTX1RBQkxFVF9NQVNLKSA9PSBISUxfSUREX0RJRF9BQlNfVEFCTEVUKQotI2lmZGVmIFRBQkxFVF9TSU1VTEFURVNfTU9VU0UKLQkJYnRudHlwZSA9IEJUTl9UT1VDSDsKLSNlbHNlCi0JCWJ0bnR5cGUgPSBCVE5fRElHSTsKLSNlbmRpZgotCWlmICgoZGlkICYgSElMX0lERF9ESURfQUJTX1RTQ1JFRU5fTUFTSykgPT0gSElMX0lERF9ESURfQUJTX1RTQ1JFRU4pCi0JCWJ0bnR5cGUgPSBCVE5fVE9VQ0g7Ci0KLQlpZiAoKGRpZCAmIEhJTF9JRERfRElEX1JFTF9NT1VTRV9NQVNLKSA9PSBISUxfSUREX0RJRF9SRUxfTU9VU0UpCi0JCWJ0bnR5cGUgPSBCVE5fTU9VU0U7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcHRyLT5uYnRuOyBpKyspIHsKLQkJc2V0X2JpdChidG50eXBlIHwgaSwgcHRyLT5kZXYtPmtleWJpdCk7Ci0JCXB0ci0+YnRubWFwW2ldID0gYnRudHlwZSB8IGk7Ci0JfQotCi0JaWYgKGJ0bnR5cGUgPT0gQlROX01PVVNFKSB7Ci0JCS8qIFN3YXAgYnV0dG9ucyAyIGFuZCAzICovCi0JCXB0ci0+YnRubWFwWzFdID0gQlROX01JRERMRTsKLQkJcHRyLT5idG5tYXBbMl0gPSBCVE5fUklHSFQ7Ci0JfQotCi0JaWYgKChkaWQgJiBISUxfSUREX0RJRF9UWVBFX01BU0spID09IEhJTF9JRERfRElEX1RZUEVfUkVMKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBwdHItPm5heGVzOyBpKyspCi0JCQlzZXRfYml0KFJFTF9YICsgaSwgcHRyLT5kZXYtPnJlbGJpdCk7Ci0JCWZvciAoaSA9IDM7IChpIDwgcHRyLT5uYXhlcyArIDMpICYmIChuYXhzZXRzID4gMSk7IGkrKykKLQkJCXNldF9iaXQoUkVMX1ggKyBpLCBwdHItPmRldi0+cmVsYml0KTsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgcHRyLT5uYXhlczsgaSsrKSB7Ci0JCQlzZXRfYml0KEFCU19YICsgaSwgcHRyLT5kZXYtPmFic2JpdCk7Ci0JCQlwdHItPmRldi0+YWJzbWluW0FCU19YICsgaV0gPSAwOwotCQkJcHRyLT5kZXYtPmFic21heFtBQlNfWCArIGldID0KLQkJCQlISUxfSUREX0FYSVNfTUFYKChwdHItPmlkZCArIDEpLCBpKTsKLQkJfQotCQlmb3IgKGkgPSAzOyAoaSA8IHB0ci0+bmF4ZXMgKyAzKSAmJiAobmF4c2V0cyA+IDEpOyBpKyspIHsKLQkJCXNldF9iaXQoQUJTX1ggKyBpLCBwdHItPmRldi0+YWJzYml0KTsKLQkJCXB0ci0+ZGV2LT5hYnNtaW5bQUJTX1ggKyBpXSA9IDA7Ci0JCQlwdHItPmRldi0+YWJzbWF4W0FCU19YICsgaV0gPQotCQkJCUhJTF9JRERfQVhJU19NQVgoKHB0ci0+aWRkICsgMSksIChpIC0gMykpOwotCQl9Ci0jaWZkZWYgVEFCTEVUX0FVVE9BREpVU1QKLQkJZm9yIChpID0gMDsgaSA8IEFCU19NQVg7IGkrKykgewotCQkJaW50IGRpZmYgPSBwdHItPmRldi0+YWJzbWF4W0FCU19YICsgaV0gLyAxMDsKLQkJCXB0ci0+ZGV2LT5hYnNtaW5bQUJTX1ggKyBpXSArPSBkaWZmOwotCQkJcHRyLT5kZXYtPmFic21heFtBQlNfWCArIGldIC09IGRpZmY7Ci0JCX0KLSNlbmRpZgotCX0KLQotCXB0ci0+ZGV2LT5uYW1lID0gc3RybGVuKHB0ci0+cm5tKSA/IHB0ci0+cm5tIDogSElMX0dFTkVSSUNfTkFNRTsKLQotCXB0ci0+ZGV2LT5pZC5idXN0eXBlCT0gQlVTX0hJTDsKLQlwdHItPmRldi0+aWQudmVuZG9yCT0gUENJX1ZFTkRPUl9JRF9IUDsKLQlwdHItPmRldi0+aWQucHJvZHVjdAk9IDB4MDAwMTsgLyogVE9ETzogZ2V0IGZyb20gcHRyLT5yc2MgKi8KLQlwdHItPmRldi0+aWQudmVyc2lvbgk9IDB4MDEwMDsgLyogVE9ETzogZ2V0IGZyb20gcHRyLT5yc2MgKi8KLQlwdHItPmRldi0+ZGV2LnBhcmVudAk9ICZzZXJpby0+ZGV2OwotCi0JZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UocHRyLT5kZXYpOwotCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiVW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7Ci0JCWdvdG8gYmFpbDI7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiaW5wdXQ6ICVzICglcyksIElEOiAlZFxuIiwKLQkJcHRyLT5kZXYtPm5hbWUsCi0JCShidG50eXBlID09IEJUTl9NT1VTRSkgPyAiSElMIG1vdXNlIjoiSElMIHRhYmxldCBvciB0b3VjaHBhZCIsCi0JCWRpZCk7Ci0KLQlyZXR1cm4gMDsKLQotIGJhaWwyOgotCXNlcmlvX2Nsb3NlKHNlcmlvKTsKLSBiYWlsMToKLQlpbnB1dF9mcmVlX2RldmljZShwdHItPmRldik7Ci0gYmFpbDA6Ci0Ja2ZyZWUocHRyKTsKLQlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgc3RydWN0IHNlcmlvX2RldmljZV9pZCBoaWxfcHRyX2lkc1tdID0gewotCXsKLQkJLnR5cGUgPSBTRVJJT19ISUxfTUxDLAotCQkucHJvdG8gPSBTRVJJT19ISUwsCi0JCS5pZCA9IFNFUklPX0FOWSwKLQkJLmV4dHJhID0gU0VSSU9fQU5ZLAotCX0sCi0JeyAwIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2VyaW9fZHJpdmVyIGhpbF9wdHJfc2VyaW9fZHJpdmVyID0gewotCS5kcml2ZXIJCT0gewotCQkubmFtZQk9ICJoaWxfcHRyIiwKLQl9LAotCS5kZXNjcmlwdGlvbgk9ICJIUCBISUwgbW91c2UvdGFibGV0IGRyaXZlciIsCi0JLmlkX3RhYmxlCT0gaGlsX3B0cl9pZHMsCi0JLmNvbm5lY3QJPSBoaWxfcHRyX2Nvbm5lY3QsCi0JLmRpc2Nvbm5lY3QJPSBoaWxfcHRyX2Rpc2Nvbm5lY3QsCi0JLmludGVycnVwdAk9IGhpbF9wdHJfaW50ZXJydXB0Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdCBoaWxfcHRyX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gc2VyaW9fcmVnaXN0ZXJfZHJpdmVyKCZoaWxfcHRyX3NlcmlvX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBoaWxfcHRyX2V4aXQodm9pZCkKLXsKLQlzZXJpb191bnJlZ2lzdGVyX2RyaXZlcigmaGlsX3B0cl9zZXJpb19kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChoaWxfcHRyX2luaXQpOwotbW9kdWxlX2V4aXQoaGlsX3B0cl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYwppbmRleCBkY2Q0MjM2Li41ZTYzMDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCkBAIC0zMywxMSArMzMsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgbGlmZWJvb2tfdXNlXzZieXRlX3Byb3RvOworc3RhdGljIGJvb2wgbGlmZWJvb2tfdXNlXzZieXRlX3Byb3RvOwogCiBzdGF0aWMgaW50IGxpZmVib29rX3NldF82Ynl0ZV9wcm90byhjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCkKIHsKLQlsaWZlYm9va191c2VfNmJ5dGVfcHJvdG8gPSAxOworCWxpZmVib29rX3VzZV82Ynl0ZV9wcm90byA9IHRydWU7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmRldjEgPSBwc21vdXNlLT5kZXY7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2MiA9IHByaXYgPyBwcml2LT5kZXYyIDogTlVMTDsKIAl1bnNpZ25lZCBjaGFyICpwYWNrZXQgPSBwc21vdXNlLT5wYWNrZXQ7Ci0JaW50IHJlbGF0aXZlX3BhY2tldCA9IHBhY2tldFswXSAmIDB4MDg7CisJYm9vbCByZWxhdGl2ZV9wYWNrZXQgPSBwYWNrZXRbMF0gJiAweDA4OwogCiAJaWYgKHJlbGF0aXZlX3BhY2tldCB8fCAhbGlmZWJvb2tfdXNlXzZieXRlX3Byb3RvKSB7CiAJCWlmIChwc21vdXNlLT5wa3RjbnQgIT0gMykKQEAgLTI0Miw3ICsyNDIsNyBAQAogCXBzbW91c2UtPnByaXZhdGUgPSBOVUxMOwogfQogCi1pbnQgbGlmZWJvb2tfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitpbnQgbGlmZWJvb2tfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogICAgICAgICBpZiAoIWRtaV9jaGVja19zeXN0ZW0obGlmZWJvb2tfZG1pX3RhYmxlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmgKaW5kZXggYzE2NDdjZi4uNDA3Y2IyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suaApAQCAtMTIsMTAgKzEyLDEwIEBACiAjZGVmaW5lIF9MSUZFQk9PS19ICiAKICNpZmRlZiBDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LCi1pbnQgbGlmZWJvb2tfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpOworaW50IGxpZmVib29rX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcyk7CiBpbnQgbGlmZWJvb2tfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSk7CiAjZWxzZQotaW5saW5lIGludCBsaWZlYm9va19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK2lubGluZSBpbnQgbGlmZWJvb2tfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCXJldHVybiAtRU5PU1lTOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKaW5kZXggMzkwZjFkYi4uZGU3NDVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCkBAIC0xMzAsMTQgKzEzMCwxMSBAQAogICogMCAtIGRpc2FibGVkCiAgKi8KIAotc3RhdGljIHZvaWQgcHMycHBfc2V0X3NtYXJ0c2Nyb2xsKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB1bnNpZ25lZCBpbnQgc21hcnRzY3JvbGwpCitzdGF0aWMgdm9pZCBwczJwcF9zZXRfc21hcnRzY3JvbGwoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc21hcnRzY3JvbGwpCiB7CiAJc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJnBzbW91c2UtPnBzMmRldjsKIAl1bnNpZ25lZCBjaGFyIHBhcmFtWzRdOwogCi0JaWYgKHNtYXJ0c2Nyb2xsID4gMSkKLQkJc21hcnRzY3JvbGwgPSAxOwotCiAJcHMycHBfY21kKHBzbW91c2UsIHBhcmFtLCAweDMyKTsKIAogCXBhcmFtWzBdID0gMDsKQEAgLTE0OSwxMiArMTQ2LDE0IEBACiAJcHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgUFNNT1VTRV9DTURfU0VUUkVTKTsKIH0KIAotc3RhdGljIHNzaXplX3QgcHMycHBfYXR0cl9zaG93X3NtYXJ0c2Nyb2xsKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBwczJwcF9hdHRyX3Nob3dfc21hcnRzY3JvbGwoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCisJCQkJCSAgIHZvaWQgKmRhdGEsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHNtb3VzZS0+c21hcnRzY3JvbGwgPyAxIDogMCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBzbW91c2UtPnNtYXJ0c2Nyb2xsKTsKIH0KIAotc3RhdGljIHNzaXplX3QgcHMycHBfYXR0cl9zZXRfc21hcnRzY3JvbGwoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgcHMycHBfYXR0cl9zZXRfc21hcnRzY3JvbGwoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsCisJCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIApAQCAtMjYxLDI5ICsyNjAsMjkgQEAKIAogc3RhdGljIHZvaWQgcHMycHBfc2V0X21vZGVsX3Byb3BlcnRpZXMoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCiAJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwczJwcF9pbmZvICptb2RlbF9pbmZvLAotCQkJCSAgICAgICBpbnQgdXNpbmdfcHMycHApCisJCQkJICAgICAgIGJvb2wgdXNpbmdfcHMycHApCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gcHNtb3VzZS0+ZGV2OwogCiAJaWYgKG1vZGVsX2luZm8tPmZlYXR1cmVzICYgUFMyUFBfU0lERV9CVE4pCi0JCXNldF9iaXQoQlROX1NJREUsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9TSURFLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKIAlpZiAobW9kZWxfaW5mby0+ZmVhdHVyZXMgJiBQUzJQUF9FWFRSQV9CVE4pCi0JCXNldF9iaXQoQlROX0VYVFJBLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fRVhUUkEsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAogCWlmIChtb2RlbF9pbmZvLT5mZWF0dXJlcyAmIFBTMlBQX1RBU0tfQlROKQotCQlzZXRfYml0KEJUTl9UQVNLLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fVEFTSywgaW5wdXRfZGV2LT5rZXliaXQpOwogCiAJaWYgKG1vZGVsX2luZm8tPmZlYXR1cmVzICYgUFMyUFBfTkFWX0JUTikgewotCQlzZXRfYml0KEJUTl9GT1JXQVJELCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCXNldF9iaXQoQlROX0JBQ0ssIGlucHV0X2Rldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9GT1JXQVJELCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fQkFDSywgaW5wdXRfZGV2LT5rZXliaXQpOwogCX0KIAogCWlmIChtb2RlbF9pbmZvLT5mZWF0dXJlcyAmIFBTMlBQX1dIRUVMKQotCQlzZXRfYml0KFJFTF9XSEVFTCwgaW5wdXRfZGV2LT5yZWxiaXQpOworCQlfX3NldF9iaXQoUkVMX1dIRUVMLCBpbnB1dF9kZXYtPnJlbGJpdCk7CiAKIAlpZiAobW9kZWxfaW5mby0+ZmVhdHVyZXMgJiBQUzJQUF9IV0hFRUwpCi0JCXNldF9iaXQoUkVMX0hXSEVFTCwgaW5wdXRfZGV2LT5yZWxiaXQpOworCQlfX3NldF9iaXQoUkVMX0hXSEVFTCwgaW5wdXRfZGV2LT5yZWxiaXQpOwogCiAJc3dpdGNoIChtb2RlbF9pbmZvLT5raW5kKSB7CiAJCWNhc2UgUFMyUFBfS0lORF9XSEVFTDoKQEAgLTMyMSwxMyArMzIwLDEzIEBACiAgKiB0aGF0IHN1cHBvcnQgaXQuCiAgKi8KIAotaW50IHBzMnBwX2luaXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK2ludCBwczJwcF9pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CiAJdW5zaWduZWQgY2hhciBwYXJhbVs0XTsKIAl1bnNpZ25lZCBjaGFyIG1vZGVsLCBidXR0b25zOwogCWNvbnN0IHN0cnVjdCBwczJwcF9pbmZvICptb2RlbF9pbmZvOwotCWludCB1c2VfcHMycHAgPSAwOworCWJvb2wgdXNlX3BzMnBwID0gZmFsc2U7CiAJaW50IGVycm9yOwogCiAJcGFyYW1bMF0gPSAwOwpAQCAtMzY0LDcgKzM2Myw3IEBACiAJCQlwYXJhbVswXSA9IDA7CiAJCQlpZiAoIXBzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIDB4MTNkMSkgJiYKIAkJCSAgICBwYXJhbVswXSA9PSAweDA2ICYmIHBhcmFtWzFdID09IDB4MDAgJiYgcGFyYW1bMl0gPT0gMHgxNCkgewotCQkJCXVzZV9wczJwcCA9IDE7CisJCQkJdXNlX3BzMnBwID0gdHJ1ZTsKIAkJCX0KIAogCQl9IGVsc2UgewpAQCAtMzc2LDggKzM3NSw4IEBACiAJCQlpZiAoKHBhcmFtWzBdICYgMHg3OCkgPT0gMHg0OCAmJgogCQkJICAgIChwYXJhbVsxXSAmIDB4ZjMpID09IDB4YzIgJiYKIAkJCSAgICAocGFyYW1bMl0gJiAweDAzKSA9PSAoKHBhcmFtWzFdID4+IDIpICYgMykpIHsKLQkJCQlwczJwcF9zZXRfc21hcnRzY3JvbGwocHNtb3VzZSwgcHNtb3VzZS0+c21hcnRzY3JvbGwpOwotCQkJCXVzZV9wczJwcCA9IDE7CisJCQkJcHMycHBfc2V0X3NtYXJ0c2Nyb2xsKHBzbW91c2UsIGZhbHNlKTsKKwkJCQl1c2VfcHMycHAgPSB0cnVlOwogCQkJfQogCQl9CiAJfQpAQCAtNDA2LDcgKzQwNSw3IEBACiAJCX0KIAogCQlpZiAoYnV0dG9ucyA8IDMpCi0JCQljbGVhcl9iaXQoQlROX01JRERMRSwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOworCQkJX19jbGVhcl9iaXQoQlROX01JRERMRSwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOwogCiAJCWlmIChtb2RlbF9pbmZvKQogCQkJcHMycHBfc2V0X21vZGVsX3Byb3BlcnRpZXMocHNtb3VzZSwgbW9kZWxfaW5mbywgdXNlX3BzMnBwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5oCmluZGV4IDZlNTcxMjUuLjBjMTg2ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmgKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuaApAQCAtMTIsOSArMTIsOSBAQAogI2RlZmluZSBfTE9HSVBTMlBQX0gKIAogI2lmZGVmIENPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQCi1pbnQgcHMycHBfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKTsKK2ludCBwczJwcF9pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKTsKICNlbHNlCi1pbmxpbmUgaW50IHBzMnBwX2luaXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK2lubGluZSBpbnQgcHMycHBfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCmluZGV4IGI0MDdiMzUuLjY5MGFlZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgInRyYWNrcG9pbnQuaCIKICNpbmNsdWRlICJ0b3VjaGtpdF9wczIuaCIKICNpbmNsdWRlICJlbGFudGVjaC5oIgorI2luY2x1ZGUgInNlbnRlbGljLmgiCiAKICNkZWZpbmUgRFJJVkVSX0RFU0MJIlBTLzIgbW91c2UgZHJpdmVyIgogCkBAIC0xMDgsMTAgKzEwOSwxMCBAQAogCiBzdHJ1Y3QgcHNtb3VzZV9wcm90b2NvbCB7CiAJZW51bSBwc21vdXNlX3R5cGUgdHlwZTsKKwlib29sIG1heHByb3RvOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJY29uc3QgY2hhciAqYWxpYXM7Ci0JaW50IG1heHByb3RvOwotCWludCAoKmRldGVjdCkoc3RydWN0IHBzbW91c2UgKiwgaW50KTsKKwlpbnQgKCpkZXRlY3QpKHN0cnVjdCBwc21vdXNlICosIGJvb2wpOwogCWludCAoKmluaXQpKHN0cnVjdCBwc21vdXNlICopOwogfTsKIApAQCAtMjE2LDcgKzIxNyw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19wc21vdXNlX3NldF9zdGF0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgZW51bSBwc21vdXNlX3N0YXRlIG5ld19zdGF0ZSkKIHsKIAlwc21vdXNlLT5zdGF0ZSA9IG5ld19zdGF0ZTsKLQlwc21vdXNlLT5wa3RjbnQgPSBwc21vdXNlLT5vdXRfb2Zfc3luYyA9IDA7CisJcHNtb3VzZS0+cGt0Y250ID0gcHNtb3VzZS0+b3V0X29mX3N5bmNfY250ID0gMDsKIAlwc21vdXNlLT5wczJkZXYuZmxhZ3MgPSAwOwogCXBzbW91c2UtPmxhc3QgPSBqaWZmaWVzOwogfQpAQCAtMjQ5LDcgKzI1MCw3IEBACiAJCQlpZiAocHNtb3VzZS0+c3RhdGUgPT0gUFNNT1VTRV9BQ1RJVkFURUQpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJwc21vdXNlLmM6ICVzIGF0ICVzIGxvc3Qgc3luYyBhdCBieXRlICVkXG4iLAogCQkJCQlwc21vdXNlLT5uYW1lLCBwc21vdXNlLT5waHlzLCBwc21vdXNlLT5wa3RjbnQpOwotCQkJCWlmICgrK3BzbW91c2UtPm91dF9vZl9zeW5jID09IHBzbW91c2UtPnJlc2V0YWZ0ZXIpIHsKKwkJCQlpZiAoKytwc21vdXNlLT5vdXRfb2Zfc3luY19jbnQgPT0gcHNtb3VzZS0+cmVzZXRhZnRlcikgewogCQkJCQlfX3BzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfSUdOT1JFKTsKIAkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJwc21vdXNlLmM6IGlzc3VpbmcgcmVjb25uZWN0IHJlcXVlc3RcbiIpOwogCQkJCQlzZXJpb19yZWNvbm5lY3QocHNtb3VzZS0+cHMyZGV2LnNlcmlvKTsKQEAgLTI2MSw4ICsyNjIsOCBAQAogCiAJCWNhc2UgUFNNT1VTRV9GVUxMX1BBQ0tFVDoKIAkJCXBzbW91c2UtPnBrdGNudCA9IDA7Ci0JCQlpZiAocHNtb3VzZS0+b3V0X29mX3N5bmMpIHsKLQkJCQlwc21vdXNlLT5vdXRfb2Zfc3luYyA9IDA7CisJCQlpZiAocHNtb3VzZS0+b3V0X29mX3N5bmNfY250KSB7CisJCQkJcHNtb3VzZS0+b3V0X29mX3N5bmNfY250ID0gMDsKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UgInBzbW91c2UuYzogJXMgYXQgJXMgLSBkcml2ZXIgcmVzeW5jaGVkLlxuIiwKIAkJCQkJcHNtb3VzZS0+bmFtZSwgcHNtb3VzZS0+cGh5cyk7CiAJCQl9CkBAIC00MDgsNyArNDA5LDcgQEAKIC8qCiAgKiBHZW5pdXMgTmV0TW91c2UgbWFnaWMgaW5pdC4KICAqLwotc3RhdGljIGludCBnZW5pdXNfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitzdGF0aWMgaW50IGdlbml1c19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7CiAJc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJnBzbW91c2UtPnBzMmRldjsKIAl1bnNpZ25lZCBjaGFyIHBhcmFtWzRdOwpAQCAtNDI0LDkgKzQyNSw5IEBACiAJCXJldHVybiAtMTsKIAogCWlmIChzZXRfcHJvcGVydGllcykgewotCQlzZXRfYml0KEJUTl9FWFRSQSwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOwotCQlzZXRfYml0KEJUTl9TSURFLCBwc21vdXNlLT5kZXYtPmtleWJpdCk7Ci0JCXNldF9iaXQoUkVMX1dIRUVMLCBwc21vdXNlLT5kZXYtPnJlbGJpdCk7CisJCV9fc2V0X2JpdChCVE5fRVhUUkEsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9TSURFLCBwc21vdXNlLT5kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChSRUxfV0hFRUwsIHBzbW91c2UtPmRldi0+cmVsYml0KTsKIAogCQlwc21vdXNlLT52ZW5kb3IgPSAiR2VuaXVzIjsKIAkJcHNtb3VzZS0+bmFtZSA9ICJNb3VzZSI7CkBAIC00MzksNyArNDQwLDcgQEAKIC8qCiAgKiBJbnRlbGxpTW91c2UgbWFnaWMgaW5pdC4KICAqLwotc3RhdGljIGludCBpbnRlbGxpbW91c2VfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitzdGF0aWMgaW50IGludGVsbGltb3VzZV9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7CiAJc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJnBzbW91c2UtPnBzMmRldjsKIAl1bnNpZ25lZCBjaGFyIHBhcmFtWzJdOwpAQCAtNDU2LDggKzQ1Nyw4IEBACiAJCXJldHVybiAtMTsKIAogCWlmIChzZXRfcHJvcGVydGllcykgewotCQlzZXRfYml0KEJUTl9NSURETEUsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKLQkJc2V0X2JpdChSRUxfV0hFRUwsIHBzbW91c2UtPmRldi0+cmVsYml0KTsKKwkJX19zZXRfYml0KEJUTl9NSURETEUsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KFJFTF9XSEVFTCwgcHNtb3VzZS0+ZGV2LT5yZWxiaXQpOwogCiAJCWlmICghcHNtb3VzZS0+dmVuZG9yKSBwc21vdXNlLT52ZW5kb3IgPSAiR2VuZXJpYyI7CiAJCWlmICghcHNtb3VzZS0+bmFtZSkgcHNtb3VzZS0+bmFtZSA9ICJXaGVlbCBNb3VzZSI7CkBAIC00NzAsNyArNDcxLDcgQEAKIC8qCiAgKiBUcnkgSW50ZWxsaU1vdXNlL0V4cGxvcmVyIG1hZ2ljIGluaXQuCiAgKi8KLXN0YXRpYyBpbnQgaW1fZXhwbG9yZXJfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitzdGF0aWMgaW50IGltX2V4cGxvcmVyX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OwogCXVuc2lnbmVkIGNoYXIgcGFyYW1bMl07CkBAIC00OTcsMTEgKzQ5OCwxMSBAQAogCXBzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIFBTTU9VU0VfQ01EX1NFVFJBVEUpOwogCiAJaWYgKHNldF9wcm9wZXJ0aWVzKSB7Ci0JCXNldF9iaXQoQlROX01JRERMRSwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOwotCQlzZXRfYml0KFJFTF9XSEVFTCwgcHNtb3VzZS0+ZGV2LT5yZWxiaXQpOwotCQlzZXRfYml0KFJFTF9IV0hFRUwsIHBzbW91c2UtPmRldi0+cmVsYml0KTsKLQkJc2V0X2JpdChCVE5fU0lERSwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOwotCQlzZXRfYml0KEJUTl9FWFRSQSwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROX01JRERMRSwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoUkVMX1dIRUVMLCBwc21vdXNlLT5kZXYtPnJlbGJpdCk7CisJCV9fc2V0X2JpdChSRUxfSFdIRUVMLCBwc21vdXNlLT5kZXYtPnJlbGJpdCk7CisJCV9fc2V0X2JpdChCVE5fU0lERSwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROX0VYVFJBLCBwc21vdXNlLT5kZXYtPmtleWJpdCk7CiAKIAkJaWYgKCFwc21vdXNlLT52ZW5kb3IpIHBzbW91c2UtPnZlbmRvciA9ICJHZW5lcmljIjsKIAkJaWYgKCFwc21vdXNlLT5uYW1lKSBwc21vdXNlLT5uYW1lID0gIkV4cGxvcmVyIE1vdXNlIjsKQEAgLTUxNCw3ICs1MTUsNyBAQAogLyoKICAqIEtlbnNpbmd0b24gVGhpbmtpbmdNb3VzZSAvIEV4cGVydE1vdXNlIG1hZ2ljIGluaXQuCiAgKi8KLXN0YXRpYyBpbnQgdGhpbmtpbmdfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitzdGF0aWMgaW50IHRoaW5raW5nX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OwogCXVuc2lnbmVkIGNoYXIgcGFyYW1bMl07CkBAIC01MzUsNyArNTM2LDcgQEAKIAkJcmV0dXJuIC0xOwogCiAJaWYgKHNldF9wcm9wZXJ0aWVzKSB7Ci0JCXNldF9iaXQoQlROX0VYVFJBLCBwc21vdXNlLT5kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fRVhUUkEsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKIAogCQlwc21vdXNlLT52ZW5kb3IgPSAiS2Vuc2luZ3RvbiI7CiAJCXBzbW91c2UtPm5hbWUgPSAiVGhpbmtpbmdNb3VzZSI7CkBAIC01NDcsNyArNTQ4LDcgQEAKIC8qCiAgKiBCYXJlIFBTLzIgcHJvdG9jb2wgImRldGVjdGlvbiIuIEFsd2F5cyBzdWNjZWVkcy4KICAqLwotc3RhdGljIGludCBwczJiYXJlX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKQorc3RhdGljIGludCBwczJiYXJlX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKIAlpZiAoc2V0X3Byb3BlcnRpZXMpIHsKIAkJaWYgKCFwc21vdXNlLT52ZW5kb3IpIHBzbW91c2UtPnZlbmRvciA9ICJHZW5lcmljIjsKQEAgLTU2MSwxMiArNTYyLDEyIEBACiAgKiBDb3J0cm9uIFBTLzIgcHJvdG9jb2wgZGV0ZWN0aW9uLiBUaGVyZSdzIG5vIHNwZWNpYWwgd2F5IHRvIGRldGVjdCBpdCwgc28gaXQKICAqIG11c3QgYmUgZm9yY2VkIGJ5IHN5c2ZzIHByb3RvY29sIHdyaXRpbmcuCiAgKi8KLXN0YXRpYyBpbnQgY29ydHJvbl9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK3N0YXRpYyBpbnQgY29ydHJvbl9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7CiAJaWYgKHNldF9wcm9wZXJ0aWVzKSB7CiAJCXBzbW91c2UtPnZlbmRvciA9ICJDb3J0cm9uIjsKIAkJcHNtb3VzZS0+bmFtZSA9ICJQUy8yIFRyYWNrYmFsbCI7Ci0JCXNldF9iaXQoQlROX1NJREUsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9TSURFLCBwc21vdXNlLT5kZXYtPmtleWJpdCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01NzgsOSArNTc5LDkgQEAKICAqLwogCiBzdGF0aWMgaW50IHBzbW91c2VfZXh0ZW5zaW9ucyhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBtYXhfcHJvdG8sIGludCBzZXRfcHJvcGVydGllcykKKwkJCSAgICAgIHVuc2lnbmVkIGludCBtYXhfcHJvdG8sIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7Ci0JaW50IHN5bmFwdGljc19oYXJkd2FyZSA9IDA7CisJYm9vbCBzeW5hcHRpY3NfaGFyZHdhcmUgPSB0cnVlOwogCiAvKgogICogV2UgYWx3YXlzIGNoZWNrIGZvciBsaWZlYm9vayBiZWNhdXNlIGl0IGRvZXMgbm90IGRpc3R1cmIgbW91c2UKQEAgLTYwNyw3ICs2MDgsNyBAQAogICogY2FuIHJlc2V0IGl0IHByb3Blcmx5IGFmdGVyIHByb2JpbmcgZm9yIGludGVsbGltb3VzZS4KICAqLwogCWlmIChtYXhfcHJvdG8gPiBQU01PVVNFX1BTMiAmJiBzeW5hcHRpY3NfZGV0ZWN0KHBzbW91c2UsIHNldF9wcm9wZXJ0aWVzKSA9PSAwKSB7Ci0JCXN5bmFwdGljc19oYXJkd2FyZSA9IDE7CisJCXN5bmFwdGljc19oYXJkd2FyZSA9IHRydWU7CiAKIAkJaWYgKG1heF9wcm90byA+IFBTTU9VU0VfSU1FWCkgewogCQkJaWYgKCFzZXRfcHJvcGVydGllcyB8fCBzeW5hcHRpY3NfaW5pdChwc21vdXNlKSA9PSAwKQpAQCAtNjY2LDYgKzY2NywyMCBAQAogCQltYXhfcHJvdG8gPSBQU01PVVNFX0lNRVg7CiAJfQogCisvKgorICogVHJ5IEZpbmdlciBTZW5zaW5nIFBhZAorICovCisJaWYgKG1heF9wcm90byA+IFBTTU9VU0VfSU1FWCkgeworCQlpZiAoZnNwX2RldGVjdChwc21vdXNlLCBzZXRfcHJvcGVydGllcykgPT0gMCkgeworCQkJaWYgKCFzZXRfcHJvcGVydGllcyB8fCBmc3BfaW5pdChwc21vdXNlKSA9PSAwKQorCQkJCXJldHVybiBQU01PVVNFX0ZTUDsKKy8qCisgKiBJbml0IGZhaWxlZCwgdHJ5IGJhc2ljIHJlbGF0aXZlIHByb3RvY29scworICovCisJCQltYXhfcHJvdG8gPSBQU01PVVNFX0lNRVg7CisJCX0KKwl9CisKIAlpZiAobWF4X3Byb3RvID4gUFNNT1VTRV9JTUVYKSB7CiAJCWlmIChnZW5pdXNfZGV0ZWN0KHBzbW91c2UsIHNldF9wcm9wZXJ0aWVzKSA9PSAwKQogCQkJcmV0dXJuIFBTTU9VU0VfR0VOUFM7CkBAIC03MTgsNyArNzMzLDcgQEAKIAkJLnR5cGUJCT0gUFNNT1VTRV9QUzIsCiAJCS5uYW1lCQk9ICJQUy8yIiwKIAkJLmFsaWFzCQk9ICJiYXJlIiwKLQkJLm1heHByb3RvCT0gMSwKKwkJLm1heHByb3RvCT0gdHJ1ZSwKIAkJLmRldGVjdAkJPSBwczJiYXJlX2RldGVjdCwKIAl9LAogI2lmZGVmIENPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQCkBAIC03NDUsMTQgKzc2MCwxNCBAQAogCQkudHlwZQkJPSBQU01PVVNFX0lNUFMsCiAJCS5uYW1lCQk9ICJJbVBTLzIiLAogCQkuYWxpYXMJCT0gImltcHMiLAotCQkubWF4cHJvdG8JPSAxLAorCQkubWF4cHJvdG8JPSB0cnVlLAogCQkuZGV0ZWN0CQk9IGludGVsbGltb3VzZV9kZXRlY3QsCiAJfSwKIAl7CiAJCS50eXBlCQk9IFBTTU9VU0VfSU1FWCwKIAkJLm5hbWUJCT0gIkltRXhQUy8yIiwKIAkJLmFsaWFzCQk9ICJleHBzIiwKLQkJLm1heHByb3RvCT0gMSwKKwkJLm1heHByb3RvCT0gdHJ1ZSwKIAkJLmRldGVjdAkJPSBpbV9leHBsb3Jlcl9kZXRlY3QsCiAJfSwKICNpZmRlZiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUwpAQCAtODEzLDcgKzgyOCwxNiBAQAogCQkuZGV0ZWN0CQk9IGVsYW50ZWNoX2RldGVjdCwKIAkJLmluaXQJCT0gZWxhbnRlY2hfaW5pdCwKIAl9LAotICNlbmRpZgorI2VuZGlmCisjaWZkZWYgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQworCXsKKwkJLnR5cGUJCT0gUFNNT1VTRV9GU1AsCisJCS5uYW1lCQk9ICJGU1BQUy8yIiwKKwkJLmFsaWFzCQk9ICJmc3AiLAorCQkuZGV0ZWN0CQk9IGZzcF9kZXRlY3QsCisJCS5pbml0CQk9IGZzcF9pbml0LAorCX0sCisjZW5kaWYKIAl7CiAJCS50eXBlCQk9IFBTTU9VU0VfQ09SVFJPTiwKIAkJLm5hbWUJCT0gIkNvcnRyb25QUy8yIiwKQEAgLTgyNCw3ICs4NDgsNyBAQAogCQkudHlwZQkJPSBQU01PVVNFX0FVVE8sCiAJCS5uYW1lCQk9ICJhdXRvIiwKIAkJLmFsaWFzCQk9ICJhbnkiLAotCQkubWF4cHJvdG8JPSAxLAorCQkubWF4cHJvdG8JPSB0cnVlLAogCX0sCiB9OwogCkBAIC05OTAsNyArMTAxNCw3IEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcHNtb3VzZSwgcmVzeW5jX3dvcmsud29yayk7CiAJc3RydWN0IHNlcmlvICpzZXJpbyA9IHBzbW91c2UtPnBzMmRldi5zZXJpbzsKIAlwc21vdXNlX3JldF90IHJjID0gUFNNT1VTRV9HT09EX0RBVEE7Ci0JaW50IGZhaWxlZCA9IDAsIGVuYWJsZWQgPSAwOworCWJvb2wgZmFpbGVkID0gZmFsc2UsIGVuYWJsZWQgPSBmYWxzZTsKIAlpbnQgaTsKIAogCW11dGV4X2xvY2soJnBzbW91c2VfbXV0ZXgpOwpAQCAtMTAxNyw5ICsxMDQxLDkgQEAKIAogCWlmIChwczJfc2VuZGJ5dGUoJnBzbW91c2UtPnBzMmRldiwgUFNNT1VTRV9DTURfRElTQUJMRSwgMjApKSB7CiAJCWlmIChwc21vdXNlLT5udW1fcmVzeW5jcyA8IDMgfHwgcHNtb3VzZS0+YWNrc19kaXNhYmxlX2NvbW1hbmQpCi0JCQlmYWlsZWQgPSAxOworCQkJZmFpbGVkID0gdHJ1ZTsKIAl9IGVsc2UKLQkJcHNtb3VzZS0+YWNrc19kaXNhYmxlX2NvbW1hbmQgPSAxOworCQlwc21vdXNlLT5hY2tzX2Rpc2FibGVfY29tbWFuZCA9IHRydWU7CiAKIC8qCiAgKiBQb2xsIHRoZSBtb3VzZS4gSWYgaXQgd2FzIHJlc2V0IHRoZSBwYWNrZXQgd2lsbCBiZSBzaG9ydGVyIHRoYW4KQEAgLTEwMzAsNyArMTA1NCw3IEBACiAgKi8KIAlpZiAoIWZhaWxlZCkgewogCQlpZiAocHNtb3VzZS0+cG9sbChwc21vdXNlKSkKLQkJCWZhaWxlZCA9IDE7CisJCQlmYWlsZWQgPSB0cnVlOwogCQllbHNlIHsKIAkJCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfQ01EX01PREUpOwogCQkJZm9yIChpID0gMDsgaSA8IHBzbW91c2UtPnBrdHNpemU7IGkrKykgewpAQCAtMTA0MCw3ICsxMDY0LDcgQEAKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAocmMgIT0gUFNNT1VTRV9GVUxMX1BBQ0tFVCkKLQkJCQlmYWlsZWQgPSAxOworCQkJCWZhaWxlZCA9IHRydWU7CiAJCQlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX1JFU1lOQ0lORyk7CiAJCX0KIAl9CkBAIC0xMDUxLDcgKzEwNzUsNyBAQAogICovCiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewogCQlpZiAoIXBzMl9jb21tYW5kKCZwc21vdXNlLT5wczJkZXYsIE5VTEwsIFBTTU9VU0VfQ01EX0VOQUJMRSkpIHsKLQkJCWVuYWJsZWQgPSAxOworCQkJZW5hYmxlZCA9IHRydWU7CiAJCQlicmVhazsKIAkJfQogCQltc2xlZXAoMjAwKTsKQEAgLTEwNjAsNyArMTA4NCw3IEBACiAJaWYgKCFlbmFibGVkKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInBzbW91c2UuYzogZmFpbGVkIHRvIHJlLWVuYWJsZSBtb3VzZSBvbiAlc1xuIiwKIAkJCXBzbW91c2UtPnBzMmRldi5zZXJpby0+cGh5cyk7Ci0JCWZhaWxlZCA9IDE7CisJCWZhaWxlZCA9IHRydWU7CiAJfQogCiAJaWYgKGZhaWxlZCkgewpAQCAtMTE4Nyw3ICsxMjExLDggQEAKIAkJcHNtb3VzZS0+dHlwZSA9IHByb3RvLT50eXBlOwogCX0KIAllbHNlCi0JCXBzbW91c2UtPnR5cGUgPSBwc21vdXNlX2V4dGVuc2lvbnMocHNtb3VzZSwgcHNtb3VzZV9tYXhfcHJvdG8sIDEpOworCQlwc21vdXNlLT50eXBlID0gcHNtb3VzZV9leHRlbnNpb25zKHBzbW91c2UsCisJCQkJCQkgICBwc21vdXNlX21heF9wcm90bywgdHJ1ZSk7CiAKIAkvKgogCSAqIElmIG1vdXNlJ3MgcGFja2V0IHNpemUgaXMgMyB0aGVyZSBpcyBubyBwb2ludCBpbiBwb2xsaW5nIHRoZQpAQCAtMTM0Miw4ICsxMzY3LDEwIEBACiAJCWlmIChwc21vdXNlLT5yZWNvbm5lY3QocHNtb3VzZSkpCiAJCQlnb3RvIG91dDsKIAl9IGVsc2UgaWYgKHBzbW91c2VfcHJvYmUocHNtb3VzZSkgPCAwIHx8Ci0JCSAgIHBzbW91c2UtPnR5cGUgIT0gcHNtb3VzZV9leHRlbnNpb25zKHBzbW91c2UsIHBzbW91c2VfbWF4X3Byb3RvLCAwKSkKKwkJICAgcHNtb3VzZS0+dHlwZSAhPSBwc21vdXNlX2V4dGVuc2lvbnMocHNtb3VzZSwKKwkJCQkJCXBzbW91c2VfbWF4X3Byb3RvLCBmYWxzZSkpIHsKIAkJZ290byBvdXQ7CisJfQogCiAJLyogb2ssIHRoZSBkZXZpY2UgdHlwZSAoYW5kIGNhcGFiaWxpdGllcykgbWF0Y2ggdGhlIG9sZCBvbmUsCiAJICogd2UgY2FuIGNvbnRpbnVlIHVzaW5nIGl0LCBjb21wbGV0ZSBpbnRpYWxpemF0aW9uCkBAIC0xNTI4LDcgKzE1NTUsOSBAQAogCiAJd2hpbGUgKHNlcmlvLT5jaGlsZCkgewogCQlpZiAoKytyZXRyeSA+IDMpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInBzbW91c2U6IGZhaWxlZCB0byBkZXN0cm95IGNoaWxkIHBvcnQsIHByb3RvY29sIGNoYW5nZSBhYm9ydGVkLlxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJInBzbW91c2U6IGZhaWxlZCB0byBkZXN0cm95IGNoaWxkIHBvcnQsICIKKwkJCQkicHJvdG9jb2wgY2hhbmdlIGFib3J0ZWQuXG4iKTsKIAkJCWlucHV0X2ZyZWVfZGV2aWNlKG5ld19kZXYpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS5oIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLmgKaW5kZXggNTRlZDI2Ny4uZTA1M2JkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLmgKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLmgKQEAgLTQ3LDEwICs0NywxMCBAQAogCXVuc2lnbmVkIGNoYXIgcGt0Y250OwogCXVuc2lnbmVkIGNoYXIgcGt0c2l6ZTsKIAl1bnNpZ25lZCBjaGFyIHR5cGU7Ci0JdW5zaWduZWQgY2hhciBhY2tzX2Rpc2FibGVfY29tbWFuZDsKKwlib29sIGFja3NfZGlzYWJsZV9jb21tYW5kOwogCXVuc2lnbmVkIGludCBtb2RlbDsKIAl1bnNpZ25lZCBsb25nIGxhc3Q7Ci0JdW5zaWduZWQgbG9uZyBvdXRfb2Zfc3luYzsKKwl1bnNpZ25lZCBsb25nIG91dF9vZl9zeW5jX2NudDsKIAl1bnNpZ25lZCBsb25nIG51bV9yZXN5bmNzOwogCWVudW0gcHNtb3VzZV9zdGF0ZSBzdGF0ZTsKIAljaGFyIGRldm5hbWVbNjRdOwpAQCAtNjAsNyArNjAsNyBAQAogCXVuc2lnbmVkIGludCByZXNvbHV0aW9uOwogCXVuc2lnbmVkIGludCByZXNldGFmdGVyOwogCXVuc2lnbmVkIGludCByZXN5bmNfdGltZTsKLQl1bnNpZ25lZCBpbnQgc21hcnRzY3JvbGw7CS8qIExvZ2l0ZWNoIG9ubHkgKi8KKwlib29sIHNtYXJ0c2Nyb2xsOwkvKiBMb2dpdGVjaCBvbmx5ICovCiAKIAlwc21vdXNlX3JldF90ICgqcHJvdG9jb2xfaGFuZGxlcikoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpOwogCXZvaWQgKCpzZXRfcmF0ZSkoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHVuc2lnbmVkIGludCByYXRlKTsKQEAgLTkxLDYgKzkxLDcgQEAKIAlQU01PVVNFX0NPUlRST04sCiAJUFNNT1VTRV9IR1BLLAogCVBTTU9VU0VfRUxBTlRFQ0gsCisJUFNNT1VTRV9GU1AsCiAJUFNNT1VTRV9BVVRPCQkvKiBUaGlzIG9uZSBzaG91bGQgYWx3YXlzIGJlIGxhc3QgKi8KIH07CiAKQEAgLTEwNyw3ICsxMDgsNyBAQAogCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwgY2hhciAqYnVmKTsKIAlzc2l6ZV90ICgqc2V0KShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwKIAkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLQlpbnQgcHJvdGVjdDsKKwlib29sIHByb3RlY3Q7CiB9OwogI2RlZmluZSB0b19wc21vdXNlX2F0dHIoYSkJY29udGFpbmVyX29mKChhKSwgc3RydWN0IHBzbW91c2VfYXR0cmlidXRlLCBkYXR0cikKIApAQCAtMTE2LDkgKzExNyw3IEBACiBzc2l6ZV90IHBzbW91c2VfYXR0cl9zZXRfaGVscGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwogCi0jZGVmaW5lIF9fUFNNT1VTRV9ERUZJTkVfQVRUUihfbmFtZSwgX21vZGUsIF9kYXRhLCBfc2hvdywgX3NldCwgX3Byb3RlY3QpCVwKLXN0YXRpYyBzc2l6ZV90IF9zaG93KHN0cnVjdCBwc21vdXNlICosIHZvaWQgKmRhdGEsIGNoYXIgKik7CQkJXAotc3RhdGljIHNzaXplX3QgX3NldChzdHJ1Y3QgcHNtb3VzZSAqLCB2b2lkICpkYXRhLCBjb25zdCBjaGFyICosIHNpemVfdCk7CVwKKyNkZWZpbmUgX19QU01PVVNFX0RFRklORV9BVFRSX1ZBUihfbmFtZSwgX21vZGUsIF9kYXRhLCBfc2hvdywgX3NldCwgX3Byb3RlY3QpCVwKIHN0YXRpYyBzdHJ1Y3QgcHNtb3VzZV9hdHRyaWJ1dGUgcHNtb3VzZV9hdHRyXyMjX25hbWUgPSB7CQkJXAogCS5kYXR0cgk9IHsJCQkJCQkJCVwKIAkJLmF0dHIJPSB7CQkJCQkJCVwKQEAgLTEzNCw3ICsxMzMsMjAgQEAKIAkucHJvdGVjdCA9IF9wcm90ZWN0LAkJCQkJCQlcCiB9CiAKLSNkZWZpbmUgUFNNT1VTRV9ERUZJTkVfQVRUUihfbmFtZSwgX21vZGUsIF9kYXRhLCBfc2hvdywgX3NldCkJXAotCQlfX1BTTU9VU0VfREVGSU5FX0FUVFIoX25hbWUsIF9tb2RlLCBfZGF0YSwgX3Nob3csIF9zZXQsIDEpCisjZGVmaW5lIF9fUFNNT1VTRV9ERUZJTkVfQVRUUihfbmFtZSwgX21vZGUsIF9kYXRhLCBfc2hvdywgX3NldCwgX3Byb3RlY3QpCVwKKwlzdGF0aWMgc3NpemVfdCBfc2hvdyhzdHJ1Y3QgcHNtb3VzZSAqLCB2b2lkICosIGNoYXIgKik7CQkJXAorCXN0YXRpYyBzc2l6ZV90IF9zZXQoc3RydWN0IHBzbW91c2UgKiwgdm9pZCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CVwKKwlfX1BTTU9VU0VfREVGSU5FX0FUVFJfVkFSKF9uYW1lLCBfbW9kZSwgX2RhdGEsIF9zaG93LCBfc2V0LCBfcHJvdGVjdCkKKworI2RlZmluZSBQU01PVVNFX0RFRklORV9BVFRSKF9uYW1lLCBfbW9kZSwgX2RhdGEsIF9zaG93LCBfc2V0KQkJCVwKKwlfX1BTTU9VU0VfREVGSU5FX0FUVFIoX25hbWUsIF9tb2RlLCBfZGF0YSwgX3Nob3csIF9zZXQsIHRydWUpCisKKyNkZWZpbmUgUFNNT1VTRV9ERUZJTkVfUk9fQVRUUihfbmFtZSwgX21vZGUsIF9kYXRhLCBfc2hvdykJCQlcCisJc3RhdGljIHNzaXplX3QgX3Nob3coc3RydWN0IHBzbW91c2UgKiwgdm9pZCAqLCBjaGFyICopOwkJCVwKKwlfX1BTTU9VU0VfREVGSU5FX0FUVFJfVkFSKF9uYW1lLCBfbW9kZSwgX2RhdGEsIF9zaG93LCBOVUxMLCB0cnVlKQorCisjZGVmaW5lIFBTTU9VU0VfREVGSU5FX1dPX0FUVFIoX25hbWUsIF9tb2RlLCBfZGF0YSwgX3NldCkJCQlcCisJc3RhdGljIHNzaXplX3QgX3NldChzdHJ1Y3QgcHNtb3VzZSAqLCB2b2lkICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsJXAorCV9fUFNNT1VTRV9ERUZJTkVfQVRUUl9WQVIoX25hbWUsIF9tb2RlLCBfZGF0YSwgTlVMTCwgX3NldCwgdHJ1ZSkKIAogI2VuZGlmIC8qIF9QU01PVVNFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc2VudGVsaWMuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc2VudGVsaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGUyZmMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zZW50ZWxpYy5jCkBAIC0wLDAgKzEsODY3IEBACisvKi0KKyAqIEZpbmdlciBTZW5zaW5nIFBhZCBQUy8yIG1vdXNlIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBBc2lhIFZpdGFsIENvbXBvbmVudHMgQ28uLCBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBUYWktaHdhIExpYW5nLCBTZW50ZWxpYyBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqICAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvbGlicHMyLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisKKyNpbmNsdWRlICJwc21vdXNlLmgiCisjaW5jbHVkZSAic2VudGVsaWMuaCIKKworLyoKKyAqIFRpbWVvdXQgZm9yIEZTUCBQUy8yIGNvbW1hbmQgb25seSAoaW4gbWlsbGlzZWNvbmRzKS4KKyAqLworI2RlZmluZQlGU1BfQ01EX1RJTUVPVVQJCTIwMAorI2RlZmluZQlGU1BfQ01EX1RJTUVPVVQyCTMwCisKKy8qKiBEcml2ZXIgdmVyc2lvbi4gKi8KK3N0YXRpYyBjb25zdCBjaGFyIGZzcF9kcnZfdmVyW10gPSAiMS4wLjAtSyI7CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgdmFsdWUgYmVpbmcgc2VudCB0byBGU1Agd2lsbCBub3QgY29uZmxpY3Qgd2l0aAorICogcG9zc2libGUgc2FtcGxlIHJhdGUgdmFsdWVzLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBmc3BfdGVzdF9zd2FwX2NtZCh1bnNpZ25lZCBjaGFyIHJlZ192YWwpCit7CisJc3dpdGNoIChyZWdfdmFsKSB7CisJY2FzZSAxMDogY2FzZSAyMDogY2FzZSA0MDogY2FzZSA2MDogY2FzZSA4MDogY2FzZSAxMDA6IGNhc2UgMjAwOgorCQkvKgorCQkgKiBUaGUgcmVxdWVzdGVkIHZhbHVlIGJlaW5nIHNlbnQgdG8gRlNQIG1hdGNoZWQgdG8gcG9zc2libGUKKwkJICogc2FtcGxlIHJhdGVzLCBzd2FwIHRoZSBnaXZlbiB2YWx1ZSBzdWNoIHRoYXQgdGhlIGhhcmR3YXJlCisJCSAqIHdvdWxkbid0IGdldCBjb25mdXNlZC4KKwkJICovCisJCXJldHVybiAocmVnX3ZhbCA+PiA0KSB8IChyZWdfdmFsIDw8IDQpOworCWRlZmF1bHQ6CisJCXJldHVybiByZWdfdmFsOwkvKiBzd2FwIGlzbid0IG5lY2Vzc2FyeSAqLworCX0KK30KKworLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IHRoZSB2YWx1ZSBiZWluZyBzZW50IHRvIEZTUCB3aWxsIG5vdCBjb25mbGljdCB3aXRoIGNlcnRhaW4KKyAqIGNvbW1hbmRzLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBmc3BfdGVzdF9pbnZlcnRfY21kKHVuc2lnbmVkIGNoYXIgcmVnX3ZhbCkKK3sKKwlzd2l0Y2ggKHJlZ192YWwpIHsKKwljYXNlIDB4ZTk6IGNhc2UgMHhlZTogY2FzZSAweGYyOiBjYXNlIDB4ZmY6CisJCS8qCisJCSAqIFRoZSByZXF1ZXN0ZWQgdmFsdWUgYmVpbmcgc2VudCB0byBGU1AgbWF0Y2hlZCB0byBjZXJ0YWluCisJCSAqIGNvbW1hbmRzLCBpbnZlcnNlIHRoZSBnaXZlbiB2YWx1ZSBzdWNoIHRoYXQgdGhlIGhhcmR3YXJlCisJCSAqIHdvdWxkbid0IGdldCBjb25mdXNlZC4KKwkJICovCisJCXJldHVybiB+cmVnX3ZhbDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gcmVnX3ZhbDsJLyogaW52ZXJzaW9uIGlzbid0IG5lY2Vzc2FyeSAqLworCX0KK30KKworc3RhdGljIGludCBmc3BfcmVnX3JlYWQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCByZWdfYWRkciwgaW50ICpyZWdfdmFsKQoreworCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CisJdW5zaWduZWQgY2hhciBwYXJhbVszXTsKKwl1bnNpZ25lZCBjaGFyIGFkZHI7CisJaW50IHJjID0gLTE7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gc2h1dCBvZmYgdGhlIGRldmljZSBhbmQgc3dpdGNoIGl0IGludG8gY29tbWFuZAorCSAqIG1vZGUgc28gd2UgZG9uJ3QgY29uZnVzZSBvdXIgcHJvdG9jb2wgaGFuZGxlci4gV2UgZG9uJ3QgbmVlZAorCSAqIHRvIGRvIHRoYXQgZm9yIHdyaXRlcyBiZWNhdXNlIHN5c2ZzIHNldCBoZWxwZXIgZG9lcyB0aGlzIGZvcgorCSAqIHVzLgorCSAqLworCXBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgUFNNT1VTRV9DTURfRElTQUJMRSk7CisJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9DTURfTU9ERSk7CisJbXV0ZXhfbG9jaygmcHMyZGV2LT5jbWRfbXV0ZXgpOworCisJaWYgKHBzMl9zZW5kYnl0ZShwczJkZXYsIDB4ZjMsIEZTUF9DTURfVElNRU9VVCkgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIHNob3VsZCByZXR1cm4gMHhmZShyZXF1ZXN0IGZvciByZXNlbmRpbmcpICovCisJcHMyX3NlbmRieXRlKHBzMmRldiwgMHg2NiwgRlNQX0NNRF9USU1FT1VUMik7CisJLyogc2hvdWxkIHJldHVybiAweGZjKGZhaWxlZCkgKi8KKwlwczJfc2VuZGJ5dGUocHMyZGV2LCAweDg4LCBGU1BfQ01EX1RJTUVPVVQyKTsKKworCWlmIChwczJfc2VuZGJ5dGUocHMyZGV2LCAweGYzLCBGU1BfQ01EX1RJTUVPVVQpIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoKGFkZHIgPSBmc3BfdGVzdF9pbnZlcnRfY21kKHJlZ19hZGRyKSkgIT0gcmVnX2FkZHIpIHsKKwkJcHMyX3NlbmRieXRlKHBzMmRldiwgMHg2OCwgRlNQX0NNRF9USU1FT1VUMik7CisJfSBlbHNlIGlmICgoYWRkciA9IGZzcF90ZXN0X3N3YXBfY21kKHJlZ19hZGRyKSkgIT0gcmVnX2FkZHIpIHsKKwkJLyogc3dhcHBpbmcgaXMgcmVxdWlyZWQgKi8KKwkJcHMyX3NlbmRieXRlKHBzMmRldiwgMHhjYywgRlNQX0NNRF9USU1FT1VUMik7CisJCS8qIGV4cGVjdCAweGZlICovCisJfSBlbHNlIHsKKwkJLyogc3dhcHBpbmcgaXNuJ3QgbmVjZXNzYXJ5ICovCisJCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4NjYsIEZTUF9DTURfVElNRU9VVDIpOworCQkvKiBleHBlY3QgMHhmZSAqLworCX0KKwkvKiBzaG91bGQgcmV0dXJuIDB4ZmMoZmFpbGVkKSAqLworCXBzMl9zZW5kYnl0ZShwczJkZXYsIGFkZHIsIEZTUF9DTURfVElNRU9VVCk7CisKKwlpZiAoX19wczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9HRVRJTkZPKSA8IDApCisJCWdvdG8gb3V0OworCisJKnJlZ192YWwgPSBwYXJhbVsyXTsKKwlyYyA9IDA7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwczJkZXYtPmNtZF9tdXRleCk7CisJcHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCBQU01PVVNFX0NNRF9FTkFCTEUpOworCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfQUNUSVZBVEVEKTsKKwlkZXZfZGJnKCZwczJkZXYtPnNlcmlvLT5kZXYsICJSRUFEIFJFRzogMHglMDJ4IGlzIDB4JTAyeCAocmMgPSAlZClcbiIsCisJCXJlZ19hZGRyLCAqcmVnX3ZhbCwgcmMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBmc3BfcmVnX3dyaXRlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgcmVnX2FkZHIsIGludCByZWdfdmFsKQoreworCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CisJdW5zaWduZWQgY2hhciB2OworCWludCByYyA9IC0xOworCisJbXV0ZXhfbG9jaygmcHMyZGV2LT5jbWRfbXV0ZXgpOworCisJaWYgKHBzMl9zZW5kYnl0ZShwczJkZXYsIDB4ZjMsIEZTUF9DTURfVElNRU9VVCkgPCAwKQorCQlnb3RvIG91dDsKKworCWlmICgodiA9IGZzcF90ZXN0X2ludmVydF9jbWQocmVnX2FkZHIpKSAhPSByZWdfYWRkcikgeworCQkvKiBpbnZlcnNpb24gaXMgcmVxdWlyZWQgKi8KKwkJcHMyX3NlbmRieXRlKHBzMmRldiwgMHg3NCwgRlNQX0NNRF9USU1FT1VUMik7CisJfSBlbHNlIHsKKwkJaWYgKCh2ID0gZnNwX3Rlc3Rfc3dhcF9jbWQocmVnX2FkZHIpKSAhPSByZWdfYWRkcikgeworCQkJLyogc3dhcHBpbmcgaXMgcmVxdWlyZWQgKi8KKwkJCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4NzcsIEZTUF9DTURfVElNRU9VVDIpOworCQl9IGVsc2UgeworCQkJLyogc3dhcHBpbmcgaXNuJ3QgbmVjZXNzYXJ5ICovCisJCQlwczJfc2VuZGJ5dGUocHMyZGV2LCAweDU1LCBGU1BfQ01EX1RJTUVPVVQyKTsKKwkJfQorCX0KKwkvKiB3cml0ZSB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBpbiBjb3JyZWN0IG9yZGVyICovCisJcHMyX3NlbmRieXRlKHBzMmRldiwgdiwgRlNQX0NNRF9USU1FT1VUMik7CisKKwlpZiAocHMyX3NlbmRieXRlKHBzMmRldiwgMHhmMywgRlNQX0NNRF9USU1FT1VUKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmICgodiA9IGZzcF90ZXN0X2ludmVydF9jbWQocmVnX3ZhbCkpICE9IHJlZ192YWwpIHsKKwkJLyogaW52ZXJzaW9uIGlzIHJlcXVpcmVkICovCisJCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4NDcsIEZTUF9DTURfVElNRU9VVDIpOworCX0gZWxzZSBpZiAoKHYgPSBmc3BfdGVzdF9zd2FwX2NtZChyZWdfdmFsKSkgIT0gcmVnX3ZhbCkgeworCQkvKiBzd2FwcGluZyBpcyByZXF1aXJlZCAqLworCQlwczJfc2VuZGJ5dGUocHMyZGV2LCAweDQ0LCBGU1BfQ01EX1RJTUVPVVQyKTsKKwl9IGVsc2UgeworCQkvKiBzd2FwcGluZyBpc24ndCBuZWNlc3NhcnkgKi8KKwkJcHMyX3NlbmRieXRlKHBzMmRldiwgMHgzMywgRlNQX0NNRF9USU1FT1VUMik7CisJfQorCisJLyogd3JpdGUgdGhlIHJlZ2lzdGVyIHZhbHVlIGluIGNvcnJlY3Qgb3JkZXIgKi8KKwlwczJfc2VuZGJ5dGUocHMyZGV2LCB2LCBGU1BfQ01EX1RJTUVPVVQyKTsKKwlyYyA9IDA7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwczJkZXYtPmNtZF9tdXRleCk7CisJZGV2X2RiZygmcHMyZGV2LT5zZXJpby0+ZGV2LCAiV1JJVEUgUkVHOiAweCUwMnggdG8gMHglMDJ4IChyYyA9ICVkKVxuIiwKKwkJcmVnX2FkZHIsIHJlZ192YWwsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIEVuYWJsZSByZWdpc3RlciBjbG9jayBnYXRpbmcgZm9yIHdyaXRpbmcgY2VydGFpbiByZWdpc3RlcnMgKi8KK3N0YXRpYyBpbnQgZnNwX3JlZ193cml0ZV9lbmFibGUoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgZW5hYmxlKQoreworCWludCB2LCBudjsKKworCWlmIChmc3BfcmVnX3JlYWQocHNtb3VzZSwgRlNQX1JFR19TWVNDVEwxLCAmdikgPT0gLTEpCisJCXJldHVybiAtMTsKKworCWlmIChlbmFibGUpCisJCW52ID0gdiB8IEZTUF9CSVRfRU5fUkVHX0NMSzsKKwllbHNlCisJCW52ID0gdiAmIH5GU1BfQklUX0VOX1JFR19DTEs7CisKKwkvKiBvbmx5IHdyaXRlIGlmIG5lY2Vzc2FyeSAqLworCWlmIChudiAhPSB2KQorCQlpZiAoZnNwX3JlZ193cml0ZShwc21vdXNlLCBGU1BfUkVHX1NZU0NUTDEsIG52KSA9PSAtMSkKKwkJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzcF9wYWdlX3JlZ19yZWFkKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgKnJlZ192YWwpCit7CisJc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJnBzbW91c2UtPnBzMmRldjsKKwl1bnNpZ25lZCBjaGFyIHBhcmFtWzNdOworCWludCByYyA9IC0xOworCisJcHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCBQU01PVVNFX0NNRF9ESVNBQkxFKTsKKwlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0NNRF9NT0RFKTsKKwltdXRleF9sb2NrKCZwczJkZXYtPmNtZF9tdXRleCk7CisKKwlpZiAocHMyX3NlbmRieXRlKHBzMmRldiwgMHhmMywgRlNQX0NNRF9USU1FT1VUKSA8IDApCisJCWdvdG8gb3V0OworCisJcHMyX3NlbmRieXRlKHBzMmRldiwgMHg2NiwgRlNQX0NNRF9USU1FT1VUMik7CisJcHMyX3NlbmRieXRlKHBzMmRldiwgMHg4OCwgRlNQX0NNRF9USU1FT1VUMik7CisKKwlpZiAocHMyX3NlbmRieXRlKHBzMmRldiwgMHhmMywgRlNQX0NNRF9USU1FT1VUKSA8IDApCisJCWdvdG8gb3V0OworCisJcHMyX3NlbmRieXRlKHBzMmRldiwgMHg4MywgRlNQX0NNRF9USU1FT1VUMik7CisJcHMyX3NlbmRieXRlKHBzMmRldiwgMHg4OCwgRlNQX0NNRF9USU1FT1VUMik7CisKKwkvKiBnZXQgdGhlIHJldHVybmVkIHJlc3VsdCAqLworCWlmIChfX3BzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIFBTTU9VU0VfQ01EX0dFVElORk8pKQorCQlnb3RvIG91dDsKKworCSpyZWdfdmFsID0gcGFyYW1bMl07CisJcmMgPSAwOworCisgb3V0OgorCW11dGV4X3VubG9jaygmcHMyZGV2LT5jbWRfbXV0ZXgpOworCXBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgUFNNT1VTRV9DTURfRU5BQkxFKTsKKwlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0FDVElWQVRFRCk7CisJZGV2X2RiZygmcHMyZGV2LT5zZXJpby0+ZGV2LCAiUkVBRCBQQUdFIFJFRzogMHglMDJ4IChyYyA9ICVkKVxuIiwKKwkJKnJlZ192YWwsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZnNwX3BhZ2VfcmVnX3dyaXRlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgcmVnX3ZhbCkKK3sKKwlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OworCXVuc2lnbmVkIGNoYXIgdjsKKwlpbnQgcmMgPSAtMTsKKworCW11dGV4X2xvY2soJnBzMmRldi0+Y21kX211dGV4KTsKKworCWlmIChwczJfc2VuZGJ5dGUocHMyZGV2LCAweGYzLCBGU1BfQ01EX1RJTUVPVVQpIDwgMCkKKwkJZ290byBvdXQ7CisKKwlwczJfc2VuZGJ5dGUocHMyZGV2LCAweDM4LCBGU1BfQ01EX1RJTUVPVVQyKTsKKwlwczJfc2VuZGJ5dGUocHMyZGV2LCAweDg4LCBGU1BfQ01EX1RJTUVPVVQyKTsKKworCWlmIChwczJfc2VuZGJ5dGUocHMyZGV2LCAweGYzLCBGU1BfQ01EX1RJTUVPVVQpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCh2ID0gZnNwX3Rlc3RfaW52ZXJ0X2NtZChyZWdfdmFsKSkgIT0gcmVnX3ZhbCkgeworCQlwczJfc2VuZGJ5dGUocHMyZGV2LCAweDQ3LCBGU1BfQ01EX1RJTUVPVVQyKTsKKwl9IGVsc2UgaWYgKCh2ID0gZnNwX3Rlc3Rfc3dhcF9jbWQocmVnX3ZhbCkpICE9IHJlZ192YWwpIHsKKwkJLyogc3dhcHBpbmcgaXMgcmVxdWlyZWQgKi8KKwkJcHMyX3NlbmRieXRlKHBzMmRldiwgMHg0NCwgRlNQX0NNRF9USU1FT1VUMik7CisJfSBlbHNlIHsKKwkJLyogc3dhcHBpbmcgaXNuJ3QgbmVjZXNzYXJ5ICovCisJCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4MzMsIEZTUF9DTURfVElNRU9VVDIpOworCX0KKworCXBzMl9zZW5kYnl0ZShwczJkZXYsIHYsIEZTUF9DTURfVElNRU9VVDIpOworCXJjID0gMDsKKworIG91dDoKKwltdXRleF91bmxvY2soJnBzMmRldi0+Y21kX211dGV4KTsKKwlkZXZfZGJnKCZwczJkZXYtPnNlcmlvLT5kZXYsICJXUklURSBQQUdFIFJFRzogdG8gMHglMDJ4IChyYyA9ICVkKVxuIiwKKwkJcmVnX3ZhbCwgcmMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBmc3BfZ2V0X3ZlcnNpb24oc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCAqdmVyc2lvbikKK3sKKwlpZiAoZnNwX3JlZ19yZWFkKHBzbW91c2UsIEZTUF9SRUdfVkVSU0lPTiwgdmVyc2lvbikpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnNwX2dldF9yZXZpc2lvbihzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50ICpyZXYpCit7CisJaWYgKGZzcF9yZWdfcmVhZChwc21vdXNlLCBGU1BfUkVHX1JFVklTSU9OLCByZXYpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzcF9nZXRfYnV0dG9ucyhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50ICpidG4pCit7CisJc3RhdGljIGNvbnN0IGludCBidXR0b25zW10gPSB7CisJCTB4MTYsIC8qIExlZnQvTWlkZGxlL1JpZ2h0L0ZvcndhcmQvQmFja3dhcmQgJiBTY3JvbGwgVXAvRG93biAqLworCQkweDA2LCAvKiBMZWZ0L01pZGRsZS9SaWdodCAmIFNjcm9sbCBVcC9Eb3duL1JpZ2h0L0xlZnQgKi8KKwkJMHgwNCwgLyogTGVmdC9NaWRkbGUvUmlnaHQgJiBTY3JvbGwgVXAvRG93biAqLworCQkweDAyLCAvKiBMZWZ0L01pZGRsZS9SaWdodCAqLworCX07CisJaW50IHZhbDsKKworCWlmIChmc3BfcmVnX3JlYWQocHNtb3VzZSwgRlNQX1JFR19UTU9EX1NUQVRVUzEsICZ2YWwpID09IC0xKQorCQlyZXR1cm4gLUVJTzsKKworCSpidG4gPSBidXR0b25zWyh2YWwgJiAweDMwKSA+PiA0XTsKKwlyZXR1cm4gMDsKK30KKworLyogRW5hYmxlIG9uLXBhZCBjb21tYW5kIHRhZyBvdXRwdXQgKi8KK3N0YXRpYyBpbnQgZnNwX29wY190YWdfZW5hYmxlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIGVuYWJsZSkKK3sKKwlpbnQgdiwgbnY7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoZnNwX3JlZ19yZWFkKHBzbW91c2UsIEZTUF9SRUdfT1BDX1FET1dOLCAmdikgPT0gLTEpIHsKKwkJZGV2X2VycigmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYsICJVbmFibGUgZ2V0IE9QQyBzdGF0ZS5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoZW5hYmxlKQorCQludiA9IHYgfCBGU1BfQklUX0VOX09QQ19UQUc7CisJZWxzZQorCQludiA9IHYgJiB+RlNQX0JJVF9FTl9PUENfVEFHOworCisJLyogb25seSB3cml0ZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAobnYgIT0gdikgeworCQlmc3BfcmVnX3dyaXRlX2VuYWJsZShwc21vdXNlLCB0cnVlKTsKKwkJcmVzID0gZnNwX3JlZ193cml0ZShwc21vdXNlLCBGU1BfUkVHX09QQ19RRE9XTiwgbnYpOworCQlmc3BfcmVnX3dyaXRlX2VuYWJsZShwc21vdXNlLCBmYWxzZSk7CisJfQorCisJaWYgKHJlcyAhPSAwKSB7CisJCWRldl9lcnIoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAorCQkJIlVuYWJsZSB0byBlbmFibGUgT1BDIHRhZy5cbiIpOworCQlyZXMgPSAtRUlPOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgZnNwX29ucGFkX3ZzY3Ioc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBmc3BfZGF0YSAqcGFkID0gcHNtb3VzZS0+cHJpdmF0ZTsKKwlpbnQgdmFsOworCisJaWYgKGZzcF9yZWdfcmVhZChwc21vdXNlLCBGU1BfUkVHX09OUEFEX0NUTCwgJnZhbCkpCisJCXJldHVybiAtRUlPOworCisJcGFkLT52c2Nyb2xsID0gZW5hYmxlOworCisJaWYgKGVuYWJsZSkKKwkJdmFsIHw9IChGU1BfQklUX0ZJWF9WU0NSIHwgRlNQX0JJVF9PTlBBRF9FTkFCTEUpOworCWVsc2UKKwkJdmFsICY9IH5GU1BfQklUX0ZJWF9WU0NSOworCisJaWYgKGZzcF9yZWdfd3JpdGUocHNtb3VzZSwgRlNQX1JFR19PTlBBRF9DVEwsIHZhbCkpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnNwX29ucGFkX2hzY3Ioc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBmc3BfZGF0YSAqcGFkID0gcHNtb3VzZS0+cHJpdmF0ZTsKKwlpbnQgdmFsLCB2MjsKKworCWlmIChmc3BfcmVnX3JlYWQocHNtb3VzZSwgRlNQX1JFR19PTlBBRF9DVEwsICZ2YWwpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChmc3BfcmVnX3JlYWQocHNtb3VzZSwgRlNQX1JFR19TWVNDVEw1LCAmdjIpKQorCQlyZXR1cm4gLUVJTzsKKworCXBhZC0+aHNjcm9sbCA9IGVuYWJsZTsKKworCWlmIChlbmFibGUpIHsKKwkJdmFsIHw9IChGU1BfQklUX0ZJWF9IU0NSIHwgRlNQX0JJVF9PTlBBRF9FTkFCTEUpOworCQl2MiB8PSBGU1BfQklUX0VOX01TSUQ2OworCX0gZWxzZSB7CisJCXZhbCAmPSB+RlNQX0JJVF9GSVhfSFNDUjsKKwkJdjIgJj0gfihGU1BfQklUX0VOX01TSUQ2IHwgRlNQX0JJVF9FTl9NU0lENyB8IEZTUF9CSVRfRU5fTVNJRDgpOworCX0KKworCWlmIChmc3BfcmVnX3dyaXRlKHBzbW91c2UsIEZTUF9SRUdfT05QQURfQ1RMLCB2YWwpKQorCQlyZXR1cm4gLUVJTzsKKworCS8qIHJlY29uZmlndXJlIGhvcml6b250YWwgc2Nyb2xsaW5nIHBhY2tldCBvdXRwdXQgKi8KKwlpZiAoZnNwX3JlZ193cml0ZShwc21vdXNlLCBGU1BfUkVHX1NZU0NUTDUsIHYyKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdyaXRlIGRldmljZSBzcGVjaWZpYyBpbml0aWFsIHBhcmFtZXRlcnMuCisgKgorICogZXg6IDB4YWIgMHhjZCAtIHdyaXRlIG94Y2QgaW50byByZWdpc3RlciAweGFiCisgKi8KK3N0YXRpYyBzc2l6ZV90IGZzcF9hdHRyX3NldF9zZXRyZWcoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsCisJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyByZWcsIHZhbDsKKwljaGFyICpyZXN0OworCXNzaXplX3QgcmV0dmFsOworCisJcmVnID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmcmVzdCwgMTYpOworCWlmIChyZXN0ID09IGJ1ZiB8fCAqcmVzdCAhPSAnICcgfHwgcmVnID4gMHhmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwocmVzdCArIDEsIDE2LCAmdmFsKSB8fCB2YWwgPiAweGZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmc3BfcmVnX3dyaXRlX2VuYWJsZShwc21vdXNlLCB0cnVlKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR2YWwgPSBmc3BfcmVnX3dyaXRlKHBzbW91c2UsIHJlZywgdmFsKSA8IDAgPyAtRUlPIDogY291bnQ7CisKKwlmc3BfcmVnX3dyaXRlX2VuYWJsZShwc21vdXNlLCBmYWxzZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK1BTTU9VU0VfREVGSU5FX1dPX0FUVFIoc2V0cmVnLCBTX0lXVVNSLCBOVUxMLCBmc3BfYXR0cl9zZXRfc2V0cmVnKTsKKworc3RhdGljIHNzaXplX3QgZnNwX2F0dHJfc2hvd19nZXRyZWcoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCisJCQkJCXZvaWQgKmRhdGEsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZnNwX2RhdGEgKnBhZCA9IHBzbW91c2UtPnByaXZhdGU7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlMDJ4JTAyeFxuIiwgcGFkLT5sYXN0X3JlZywgcGFkLT5sYXN0X3ZhbCk7Cit9CisKKy8qCisgKiBSZWFkIGEgcmVnaXN0ZXIgZnJvbSBkZXZpY2UuCisgKgorICogZXg6IDB4YWIgLS0gcmVhZCBjb250ZW50IGZyb20gcmVnaXN0ZXIgMHhhYgorICovCitzdGF0aWMgc3NpemVfdCBmc3BfYXR0cl9zZXRfZ2V0cmVnKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZnNwX2RhdGEgKnBhZCA9IHBzbW91c2UtPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyByZWc7CisJaW50IHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDE2LCAmcmVnKSB8fCByZWcgPiAweGZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmc3BfcmVnX3JlYWQocHNtb3VzZSwgcmVnLCAmdmFsKSkKKwkJcmV0dXJuIC1FSU87CisKKwlwYWQtPmxhc3RfcmVnID0gcmVnOworCXBhZC0+bGFzdF92YWwgPSB2YWw7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK1BTTU9VU0VfREVGSU5FX0FUVFIoZ2V0cmVnLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwKKwkJCWZzcF9hdHRyX3Nob3dfZ2V0cmVnLCBmc3BfYXR0cl9zZXRfZ2V0cmVnKTsKKworc3RhdGljIHNzaXplX3QgZnNwX2F0dHJfc2hvd19wYWdlcmVnKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLAorCQkJCQl2b2lkICpkYXRhLCBjaGFyICpidWYpCit7CisJaW50IHZhbCA9IDA7CisKKwlpZiAoZnNwX3BhZ2VfcmVnX3JlYWQocHNtb3VzZSwgJnZhbCkpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJTAyeFxuIiwgdmFsKTsKK30KKworc3RhdGljIHNzaXplX3QgZnNwX2F0dHJfc2V0X3BhZ2VyZWcoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTYsICZ2YWwpIHx8IHZhbCA+IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZzcF9wYWdlX3JlZ193cml0ZShwc21vdXNlLCB2YWwpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiBjb3VudDsKK30KKworUFNNT1VTRV9ERUZJTkVfQVRUUihwYWdlLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwKKwkJCWZzcF9hdHRyX3Nob3dfcGFnZXJlZywgZnNwX2F0dHJfc2V0X3BhZ2VyZWcpOworCitzdGF0aWMgc3NpemVfdCBmc3BfYXR0cl9zaG93X3ZzY3JvbGwoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCisJCQkJCXZvaWQgKmRhdGEsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZnNwX2RhdGEgKnBhZCA9IHBzbW91c2UtPnByaXZhdGU7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcGFkLT52c2Nyb2xsKTsKK30KKworc3RhdGljIHNzaXplX3QgZnNwX2F0dHJfc2V0X3ZzY3JvbGwoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIHx8IHZhbCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJZnNwX29ucGFkX3ZzY3IocHNtb3VzZSwgdmFsKTsKKworCXJldHVybiBjb3VudDsKK30KKworUFNNT1VTRV9ERUZJTkVfQVRUUih2c2Nyb2xsLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwKKwkJCWZzcF9hdHRyX3Nob3dfdnNjcm9sbCwgZnNwX2F0dHJfc2V0X3ZzY3JvbGwpOworCitzdGF0aWMgc3NpemVfdCBmc3BfYXR0cl9zaG93X2hzY3JvbGwoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCisJCQkJCXZvaWQgKmRhdGEsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZnNwX2RhdGEgKnBhZCA9IHBzbW91c2UtPnByaXZhdGU7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcGFkLT5oc2Nyb2xsKTsKK30KKworc3RhdGljIHNzaXplX3QgZnNwX2F0dHJfc2V0X2hzY3JvbGwoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIHx8IHZhbCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJZnNwX29ucGFkX2hzY3IocHNtb3VzZSwgdmFsKTsKKworCXJldHVybiBjb3VudDsKK30KKworUFNNT1VTRV9ERUZJTkVfQVRUUihoc2Nyb2xsLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwKKwkJCWZzcF9hdHRyX3Nob3dfaHNjcm9sbCwgZnNwX2F0dHJfc2V0X2hzY3JvbGwpOworCitzdGF0aWMgc3NpemVfdCBmc3BfYXR0cl9zaG93X2ZsYWdzKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLAorCQkJCQl2b2lkICpkYXRhLCBjaGFyICpidWYpCit7CisJc3RydWN0IGZzcF9kYXRhICpwYWQgPSBwc21vdXNlLT5wcml2YXRlOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWNcbiIsCisJCQlwYWQtPmZsYWdzICYgRlNQRFJWX0ZMQUdfRU5fT1BDID8gJ0MnIDogJ2MnKTsKK30KKworc3RhdGljIHNzaXplX3QgZnNwX2F0dHJfc2V0X2ZsYWdzKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZnNwX2RhdGEgKnBhZCA9IHBzbW91c2UtPnByaXZhdGU7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzd2l0Y2ggKGJ1ZltpXSkgeworCQljYXNlICdDJzoKKwkJCXBhZC0+ZmxhZ3MgfD0gRlNQRFJWX0ZMQUdfRU5fT1BDOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJcGFkLT5mbGFncyAmPSB+RlNQRFJWX0ZMQUdfRU5fT1BDOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK1BTTU9VU0VfREVGSU5FX0FUVFIoZmxhZ3MsIFNfSVdVU1IgfCBTX0lSVUdPLCBOVUxMLAorCQkJZnNwX2F0dHJfc2hvd19mbGFncywgZnNwX2F0dHJfc2V0X2ZsYWdzKTsKKworc3RhdGljIHNzaXplX3QgZnNwX2F0dHJfc2hvd192ZXIoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCisJCQkJCXZvaWQgKmRhdGEsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICJTZW50ZWxpYyBGU1Aga2VybmVsIG1vZHVsZSAlc1xuIiwgZnNwX2Rydl92ZXIpOworfQorCitQU01PVVNFX0RFRklORV9ST19BVFRSKHZlciwgU19JUlVHTywgTlVMTCwgZnNwX2F0dHJfc2hvd192ZXIpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZnNwX2F0dHJpYnV0ZXNbXSA9IHsKKwkmcHNtb3VzZV9hdHRyX3NldHJlZy5kYXR0ci5hdHRyLAorCSZwc21vdXNlX2F0dHJfZ2V0cmVnLmRhdHRyLmF0dHIsCisJJnBzbW91c2VfYXR0cl9wYWdlLmRhdHRyLmF0dHIsCisJJnBzbW91c2VfYXR0cl92c2Nyb2xsLmRhdHRyLmF0dHIsCisJJnBzbW91c2VfYXR0cl9oc2Nyb2xsLmRhdHRyLmF0dHIsCisJJnBzbW91c2VfYXR0cl9mbGFncy5kYXR0ci5hdHRyLAorCSZwc21vdXNlX2F0dHJfdmVyLmRhdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZnNwX2F0dHJpYnV0ZV9ncm91cCA9IHsKKwkuYXR0cnMgPSBmc3BfYXR0cmlidXRlcywKK307CisKKyNpZmRlZiBGU1BfREVCVUcKK3N0YXRpYyB2b2lkIGZzcF9wYWNrZXRfZGVidWcodW5zaWduZWQgY2hhciBwYWNrZXRbXSkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IHBzMl9wYWNrZXRfY250OworCXN0YXRpYyB1bnNpZ25lZCBpbnQgcHMyX2xhc3Rfc2Vjb25kOworCXVuc2lnbmVkIGludCBqaWZmaWVzX21zZWM7CisKKwlwczJfcGFja2V0X2NudCsrOworCWppZmZpZXNfbXNlYyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiUwOGRtcyBQUy8yIHBhY2tldHM6ICUwMngsICUwMngsICUwMngsICUwMnhcbiIsCisJCWppZmZpZXNfbXNlYywgcGFja2V0WzBdLCBwYWNrZXRbMV0sIHBhY2tldFsyXSwgcGFja2V0WzNdKTsKKworCWlmIChqaWZmaWVzX21zZWMgLSBwczJfbGFzdF9zZWNvbmQgPiAxMDAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJQUy8yIHBhY2tldHMvc2VjID0gJWRcbiIsIHBzMl9wYWNrZXRfY250KTsKKwkJcHMyX3BhY2tldF9jbnQgPSAwOworCQlwczJfbGFzdF9zZWNvbmQgPSBqaWZmaWVzX21zZWM7CisJfQorfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGZzcF9wYWNrZXRfZGVidWcodW5zaWduZWQgY2hhciBwYWNrZXRbXSkKK3sKK30KKyNlbmRpZgorCitzdGF0aWMgcHNtb3VzZV9yZXRfdCBmc3BfcHJvY2Vzc19ieXRlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHBzbW91c2UtPmRldjsKKwlzdHJ1Y3QgZnNwX2RhdGEgKmFkID0gcHNtb3VzZS0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBjaGFyICpwYWNrZXQgPSBwc21vdXNlLT5wYWNrZXQ7CisJdW5zaWduZWQgY2hhciBidXR0b25fc3RhdHVzID0gMCwgbHNjcm9sbCA9IDAsIHJzY3JvbGwgPSAwOworCWludCByZWxfeCwgcmVsX3k7CisKKwlpZiAocHNtb3VzZS0+cGt0Y250IDwgNCkKKwkJcmV0dXJuIFBTTU9VU0VfR09PRF9EQVRBOworCisJLyoKKwkgKiBGdWxsIHBhY2tldCBhY2N1bXVsYXRlZCwgcHJvY2VzcyBpdAorCSAqLworCisJc3dpdGNoIChwc21vdXNlLT5wYWNrZXRbMF0gPj4gRlNQX1BLVF9UWVBFX1NISUZUKSB7CisJY2FzZSBGU1BfUEtUX1RZUEVfQUJTOgorCQlkZXZfd2FybigmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYsCisJCQkgIlVuZXhwZWN0ZWQgYWJzb2x1dGUgbW9kZSBwYWNrZXQsIGlnbm9yZWQuXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIEZTUF9QS1RfVFlQRV9OT1JNQUxfT1BDOgorCQkvKiBvbi1wYWQgY2xpY2ssIGZpbHRlciBpdCBpZiBuZWNlc3NhcnkgKi8KKwkJaWYgKChhZC0+ZmxhZ3MgJiBGU1BEUlZfRkxBR19FTl9PUEMpICE9IEZTUERSVl9GTEFHX0VOX09QQykKKwkJCXBhY2tldFswXSAmPSB+QklUKDApOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCWNhc2UgRlNQX1BLVF9UWVBFX05PUk1BTDoKKwkJLyogbm9ybWFsIHBhY2tldCAqLworCQkvKiBzcGVjaWFsIHBhY2tldCBkYXRhIHRyYW5zbGF0aW9uIGZyb20gb24tcGFkIHBhY2tldHMgKi8KKwkJaWYgKHBhY2tldFszXSAhPSAwKSB7CisJCQlpZiAocGFja2V0WzNdICYgQklUKDApKQorCQkJCWJ1dHRvbl9zdGF0dXMgfD0gMHgwMTsJLyogd2hlZWwgZG93biAqLworCQkJaWYgKHBhY2tldFszXSAmIEJJVCgxKSkKKwkJCQlidXR0b25fc3RhdHVzIHw9IDB4MGY7CS8qIHdoZWVsIHVwICovCisJCQlpZiAocGFja2V0WzNdICYgQklUKDIpKQorCQkJCWJ1dHRvbl9zdGF0dXMgfD0gQklUKDUpOy8qIGhvcml6b250YWwgbGVmdCAqLworCQkJaWYgKHBhY2tldFszXSAmIEJJVCgzKSkKKwkJCQlidXR0b25fc3RhdHVzIHw9IEJJVCg0KTsvKiBob3Jpem9udGFsIHJpZ2h0ICovCisJCQkvKiBwdXNoIGJhY2sgdG8gcGFja2V0IHF1ZXVlICovCisJCQlpZiAoYnV0dG9uX3N0YXR1cyAhPSAwKQorCQkJCXBhY2tldFszXSA9IGJ1dHRvbl9zdGF0dXM7CisJCQlyc2Nyb2xsID0gKHBhY2tldFszXSA+PiA0KSAmIDE7CisJCQlsc2Nyb2xsID0gKHBhY2tldFszXSA+PiA1KSAmIDE7CisJCX0KKwkJLyoKKwkJICogUHJvY2Vzc2luZyB3aGVlbCB1cC9kb3duIGFuZCBleHRyYSBidXR0b24gZXZlbnRzCisJCSAqLworCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLAorCQkJCSAoaW50KShwYWNrZXRbM10gJiA4KSAtIChpbnQpKHBhY2tldFszXSAmIDcpKTsKKwkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9IV0hFRUwsIGxzY3JvbGwgLSByc2Nyb2xsKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9CQUNLLCBsc2Nyb2xsKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9GT1JXQVJELCByc2Nyb2xsKTsKKworCQkvKgorCQkgKiBTdGFuZGFyZCBQUy8yIE1vdXNlCisJCSAqLworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsIHBhY2tldFswXSAmIDEpOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01JRERMRSwgKHBhY2tldFswXSA+PiAyKSAmIDEpOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCAocGFja2V0WzBdID4+IDEpICYgMSk7CisKKwkJcmVsX3ggPSBwYWNrZXRbMV0gPyAoaW50KXBhY2tldFsxXSAtIChpbnQpKChwYWNrZXRbMF0gPDwgNCkgJiAweDEwMCkgOiAwOworCQlyZWxfeSA9IHBhY2tldFsyXSA/IChpbnQpKChwYWNrZXRbMF0gPDwgMykgJiAweDEwMCkgLSAoaW50KXBhY2tldFsyXSA6IDA7CisKKwkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9YLCByZWxfeCk7CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgcmVsX3kpOworCQlicmVhazsKKwl9CisKKwlpbnB1dF9zeW5jKGRldik7CisKKwlmc3BfcGFja2V0X2RlYnVnKHBhY2tldCk7CisKKwlyZXR1cm4gUFNNT1VTRV9GVUxMX1BBQ0tFVDsKK30KKworc3RhdGljIGludCBmc3BfYWN0aXZhdGVfcHJvdG9jb2woc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCit7CisJc3RydWN0IGZzcF9kYXRhICpwYWQgPSBwc21vdXNlLT5wcml2YXRlOworCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CisJdW5zaWduZWQgY2hhciBwYXJhbVsyXTsKKwlpbnQgdmFsOworCisJLyoKKwkgKiBTdGFuZGFyZCBwcm9jZWR1cmUgdG8gZW50ZXIgRlNQIEludGVsbGltb3VzZSBtb2RlCisJICogKHNjcm9sbGluZyB3aGVlbCwgNHRoIGFuZCA1dGggYnV0dG9ucykKKwkgKi8KKwlwYXJhbVswXSA9IDIwMDsKKwlwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9TRVRSQVRFKTsKKwlwYXJhbVswXSA9IDIwMDsKKwlwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9TRVRSQVRFKTsKKwlwYXJhbVswXSA9ICA4MDsKKwlwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9TRVRSQVRFKTsKKworCXBzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIFBTTU9VU0VfQ01EX0dFVElEKTsKKwlpZiAocGFyYW1bMF0gIT0gMHgwNCkgeworCQlkZXZfZXJyKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKKwkJCSJVbmFibGUgdG8gZW5hYmxlIDQgYnl0ZXMgcGFja2V0IGZvcm1hdC5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoZnNwX3JlZ19yZWFkKHBzbW91c2UsIEZTUF9SRUdfU1lTQ1RMNSwgJnZhbCkpIHsKKwkJZGV2X2VycigmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYsCisJCQkiVW5hYmxlIHRvIHJlYWQgU1lTQ1RMNSByZWdpc3Rlci5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwl2YWwgJj0gfihGU1BfQklUX0VOX01TSUQ3IHwgRlNQX0JJVF9FTl9NU0lEOCB8IEZTUF9CSVRfRU5fQVVUT19NU0lEOCk7CisJLyogRW5zdXJlIHdlIGFyZSBub3QgaW4gYWJzb2x1dGUgbW9kZSAqLworCXZhbCAmPSB+RlNQX0JJVF9FTl9QS1RfRzA7CisJaWYgKHBhZC0+YnV0dG9ucyA9PSAweDA2KSB7CisJCS8qIExlZnQvTWlkZGxlL1JpZ2h0ICYgU2Nyb2xsIFVwL0Rvd24vUmlnaHQvTGVmdCAqLworCQl2YWwgfD0gRlNQX0JJVF9FTl9NU0lENjsKKwl9CisKKwlpZiAoZnNwX3JlZ193cml0ZShwc21vdXNlLCBGU1BfUkVHX1NZU0NUTDUsIHZhbCkpIHsKKwkJZGV2X2VycigmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYsCisJCQkiVW5hYmxlIHRvIHNldCB1cCByZXF1aXJlZCBtb2RlIGJpdHMuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyoKKwkgKiBFbmFibGUgT1BDIHRhZ3Mgc3VjaCB0aGF0IGRyaXZlciBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCisJICogb24tcGFkIGFuZCByZWFsIGJ1dHRvbiBjbGljaworCSAqLworCWlmIChmc3Bfb3BjX3RhZ19lbmFibGUocHNtb3VzZSwgdHJ1ZSkpCisJCWRldl93YXJuKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKKwkJCSAiRmFpbGVkIHRvIGVuYWJsZSBPUEMgdGFnIG1vZGUuXG4iKTsKKworCS8qIEVuYWJsZSBvbi1wYWQgdmVydGljYWwgYW5kIGhvcml6b250YWwgc2Nyb2xsaW5nICovCisJZnNwX29ucGFkX3ZzY3IocHNtb3VzZSwgdHJ1ZSk7CisJZnNwX29ucGFkX2hzY3IocHNtb3VzZSwgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZzcF9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCit7CisJaW50IGlkOworCisJaWYgKGZzcF9yZWdfcmVhZChwc21vdXNlLCBGU1BfUkVHX0RFVklDRV9JRCwgJmlkKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoaWQgIT0gMHgwMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoc2V0X3Byb3BlcnRpZXMpIHsKKwkJcHNtb3VzZS0+dmVuZG9yID0gIlNlbnRlbGljIjsKKwkJcHNtb3VzZS0+bmFtZSA9ICJGaW5nZXJTZW5zaW5nUGFkIjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnNwX3Jlc2V0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCWZzcF9vcGNfdGFnX2VuYWJsZShwc21vdXNlLCBmYWxzZSk7CisJZnNwX29ucGFkX3ZzY3IocHNtb3VzZSwgZmFsc2UpOworCWZzcF9vbnBhZF9oc2NyKHBzbW91c2UsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgZnNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldi5rb2JqLAorCQkJICAgJmZzcF9hdHRyaWJ1dGVfZ3JvdXApOworCisJZnNwX3Jlc2V0KHBzbW91c2UpOworCWtmcmVlKHBzbW91c2UtPnByaXZhdGUpOworfQorCitzdGF0aWMgaW50IGZzcF9yZWNvbm5lY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCit7CisJaW50IHZlcnNpb247CisKKwlpZiAoZnNwX2RldGVjdChwc21vdXNlLCAwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoZnNwX2dldF92ZXJzaW9uKHBzbW91c2UsICZ2ZXJzaW9uKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoZnNwX2FjdGl2YXRlX3Byb3RvY29sKHBzbW91c2UpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitpbnQgZnNwX2luaXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCit7CisJc3RydWN0IGZzcF9kYXRhICpwcml2OworCWludCB2ZXIsIHJldiwgYnV0dG9uczsKKwlpbnQgZXJyb3I7CisKKwlpZiAoZnNwX2dldF92ZXJzaW9uKHBzbW91c2UsICZ2ZXIpIHx8CisJICAgIGZzcF9nZXRfcmV2aXNpb24ocHNtb3VzZSwgJnJldikgfHwKKwkgICAgZnNwX2dldF9idXR0b25zKHBzbW91c2UsICZidXR0b25zKSkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPCisJCSJGaW5nZXIgU2Vuc2luZyBQYWQsIGh3OiAlZC4lZC4lZCwgc3c6ICVzLCBidXR0b25zOiAlZFxuIiwKKwkJdmVyID4+IDQsIHZlciAmIDB4MEYsIHJldiwgZnNwX2Rydl92ZXIsIGJ1dHRvbnMgJiA3KTsKKworCXBzbW91c2UtPnByaXZhdGUgPSBwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZzcF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPnZlciA9IHZlcjsKKwlwcml2LT5yZXYgPSByZXY7CisJcHJpdi0+YnV0dG9ucyA9IGJ1dHRvbnM7CisKKwkvKiBlbmFibGUgb24tcGFkIGNsaWNrIGJ5IGRlZmF1bHQgKi8KKwlwcml2LT5mbGFncyB8PSBGU1BEUlZfRkxBR19FTl9PUEM7CisKKwkvKiBTZXQgdXAgdmFyaW91cyBzdXBwb3J0ZWQgaW5wdXQgZXZlbnQgYml0cyAqLworCV9fc2V0X2JpdChCVE5fQkFDSywgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOworCV9fc2V0X2JpdChCVE5fRk9SV0FSRCwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOworCV9fc2V0X2JpdChSRUxfV0hFRUwsIHBzbW91c2UtPmRldi0+cmVsYml0KTsKKwlfX3NldF9iaXQoUkVMX0hXSEVFTCwgcHNtb3VzZS0+ZGV2LT5yZWxiaXQpOworCisJcHNtb3VzZS0+cHJvdG9jb2xfaGFuZGxlciA9IGZzcF9wcm9jZXNzX2J5dGU7CisJcHNtb3VzZS0+ZGlzY29ubmVjdCA9IGZzcF9kaXNjb25uZWN0OworCXBzbW91c2UtPnJlY29ubmVjdCA9IGZzcF9yZWNvbm5lY3Q7CisJcHNtb3VzZS0+Y2xlYW51cCA9IGZzcF9yZXNldDsKKwlwc21vdXNlLT5wa3RzaXplID0gNDsKKworCS8qIHNldCBkZWZhdWx0IHBhY2tldCBvdXRwdXQgYmFzZWQgb24gbnVtYmVyIG9mIGJ1dHRvbnMgd2UgZm91bmQgKi8KKwllcnJvciA9IGZzcF9hY3RpdmF0ZV9wcm90b2NvbChwc21vdXNlKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX291dDsKKworCWVycm9yID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldi5rb2JqLAorCQkJCSAgICZmc3BfYXR0cmlidXRlX2dyb3VwKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYsCisJCQkiRmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBhdHRyaWJ1dGVzICglZCkiLCBlcnJvcik7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlyZXR1cm4gMDsKKworIGVycl9vdXQ6CisJa2ZyZWUocHNtb3VzZS0+cHJpdmF0ZSk7CisJcHNtb3VzZS0+cHJpdmF0ZSA9IE5VTEw7CisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zZW50ZWxpYy5oIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zZW50ZWxpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMTM5NWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3NlbnRlbGljLmgKQEAgLTAsMCArMSw5OCBAQAorLyotCisgKiBGaW5nZXIgU2Vuc2luZyBQYWQgUFMvMiBtb3VzZSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgQXNpYSBWaXRhbCBDb21wb25lbnRzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGFpLWh3YSBMaWFuZywgU2VudGVsaWMgQ29ycG9yYXRpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiAgIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYJX19TRU5URUxJQ19ICisjZGVmaW5lCV9fU0VOVEVMSUNfSAorCisvKiBGaW5nZXItc2Vuc2luZyBQYWQgaW5mb3JtYXRpb24gcmVnaXN0ZXJzICovCisjZGVmaW5lCUZTUF9SRUdfREVWSUNFX0lECTB4MDAKKyNkZWZpbmUJRlNQX1JFR19WRVJTSU9OCQkweDAxCisjZGVmaW5lCUZTUF9SRUdfUkVWSVNJT04JMHgwNAorI2RlZmluZQlGU1BfUkVHX1RNT0RfU1RBVFVTMQkweDBCCisjZGVmaW5lCUZTUF9CSVRfTk9fUk9UQVRJT04JQklUKDMpCisjZGVmaW5lCUZTUF9SRUdfUEFHRV9DVFJMCTB4MEYKKworLyogRmluZ2VyLXNlbnNpbmcgUGFkIGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lCUZTUF9SRUdfU1lTQ1RMMQkJMHgxMAorI2RlZmluZQlGU1BfQklUX0VOX1JFR19DTEsJQklUKDUpCisjZGVmaW5lCUZTUF9SRUdfT1BDX1FET1dOCTB4MzEKKyNkZWZpbmUJRlNQX0JJVF9FTl9PUENfVEFHCUJJVCg3KQorI2RlZmluZQlGU1BfUkVHX09QVFpfWExPCTB4MzQKKyNkZWZpbmUJRlNQX1JFR19PUFRaX1hISQkweDM1CisjZGVmaW5lCUZTUF9SRUdfT1BUWl9ZTE8JMHgzNgorI2RlZmluZQlGU1BfUkVHX09QVFpfWUhJCTB4MzcKKyNkZWZpbmUJRlNQX1JFR19TWVNDVEw1CQkweDQwCisjZGVmaW5lCUZTUF9CSVRfOTBfREVHUkVFCUJJVCgwKQorI2RlZmluZQlGU1BfQklUX0VOX01TSUQ2CUJJVCgxKQorI2RlZmluZQlGU1BfQklUX0VOX01TSUQ3CUJJVCgyKQorI2RlZmluZQlGU1BfQklUX0VOX01TSUQ4CUJJVCgzKQorI2RlZmluZQlGU1BfQklUX0VOX0FVVE9fTVNJRDgJQklUKDUpCisjZGVmaW5lCUZTUF9CSVRfRU5fUEtUX0cwCUJJVCg2KQorCisjZGVmaW5lCUZTUF9SRUdfT05QQURfQ1RMCTB4NDMKKyNkZWZpbmUJRlNQX0JJVF9PTlBBRF9FTkFCTEUJQklUKDApCisjZGVmaW5lCUZTUF9CSVRfT05QQURfRkJCQglCSVQoMSkKKyNkZWZpbmUJRlNQX0JJVF9GSVhfVlNDUglCSVQoMykKKyNkZWZpbmUJRlNQX0JJVF9GSVhfSFNDUglCSVQoNSkKKyNkZWZpbmUJRlNQX0JJVF9EUkFHX0xPQ0sJQklUKDYpCisKKy8qIEZpbmdlci1zZW5zaW5nIFBhZCBwYWNrZXQgZm9ybWF0aW5nIHJlbGF0ZWQgZGVmaW5pdGlvbnMgKi8KKworLyogYWJzb2x1dGUgcGFja2V0IHR5cGUgKi8KKyNkZWZpbmUJRlNQX1BLVF9UWVBFX05PUk1BTAkoMHgwMCkKKyNkZWZpbmUJRlNQX1BLVF9UWVBFX0FCUwkoMHgwMSkKKyNkZWZpbmUJRlNQX1BLVF9UWVBFX05PVElGWQkoMHgwMikKKyNkZWZpbmUJRlNQX1BLVF9UWVBFX05PUk1BTF9PUEMJKDB4MDMpCisjZGVmaW5lCUZTUF9QS1RfVFlQRV9TSElGVAkoNikKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IGZzcF9kYXRhIHsKKwl1bnNpZ25lZCBjaGFyCXZlcjsJCS8qIGhhcmR3YXJlIHZlcnNpb24gKi8KKwl1bnNpZ25lZCBjaGFyCXJldjsJCS8qIGhhcmR3YXJlIHJldmlzb24gKi8KKwl1bnNpZ25lZCBjaGFyCWJ1dHRvbnM7CS8qIE51bWJlciBvZiBidXR0b25zICovCisJdW5zaWduZWQgaW50CWZsYWdzOworI2RlZmluZQlGU1BEUlZfRkxBR19FTl9PUEMJKDB4MDAxKQkvKiBlbmFibGUgb24tcGFkIGNsaWNraW5nICovCisKKwlib29sCQl2c2Nyb2xsOwkvKiBWZXJ0aWNhbCBzY3JvbGwgem9uZSBlbmFibGVkICovCisJYm9vbAkJaHNjcm9sbDsJLyogSG9yaXpvbnRhbCBzY3JvbGwgem9uZSBlbmFibGVkICovCisKKwl1bnNpZ25lZCBjaGFyCWxhc3RfcmVnOwkvKiBMYXN0IHJlZ2lzdGVyIHdlIHJlcXVlc3RlZCByZWFkIGZyb20gKi8KKwl1bnNpZ25lZCBjaGFyCWxhc3RfdmFsOworfTsKKworI2lmZGVmIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMKK2V4dGVybiBpbnQgZnNwX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcyk7CitleHRlcm4gaW50IGZzcF9pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKTsKKyNlbHNlCitpbmxpbmUgaW50IGZzcF9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CitpbmxpbmUgaW50IGZzcF9pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXJldHVybiAtRU5PU1lTOworfQorI2VuZGlmCisKKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZgkvKiAhX19TRU5URUxJQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCAxOTk4NGJmLi5iNjZmZjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHN5bmFwdGljc19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK2ludCBzeW5hcHRpY3NfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CiAJdW5zaWduZWQgY2hhciBwYXJhbVs0XTsKQEAgLTU1NiwzOCArNTU2LDM4IEBACiB7CiAJaW50IGk7CiAKLQlzZXRfYml0KEVWX0FCUywgZGV2LT5ldmJpdCk7CisJX19zZXRfYml0KEVWX0FCUywgZGV2LT5ldmJpdCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfWCwgWE1JTl9OT01JTkFMLCBYTUFYX05PTUlOQUwsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1ksIFlNSU5fTk9NSU5BTCwgWU1BWF9OT01JTkFMLCAwLCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19QUkVTU1VSRSwgMCwgMjU1LCAwLCAwKTsKLQlzZXRfYml0KEFCU19UT09MX1dJRFRILCBkZXYtPmFic2JpdCk7CisJX19zZXRfYml0KEFCU19UT09MX1dJRFRILCBkZXYtPmFic2JpdCk7CiAKLQlzZXRfYml0KEVWX0tFWSwgZGV2LT5ldmJpdCk7Ci0Jc2V0X2JpdChCVE5fVE9VQ0gsIGRldi0+a2V5Yml0KTsKLQlzZXRfYml0KEJUTl9UT09MX0ZJTkdFUiwgZGV2LT5rZXliaXQpOwotCXNldF9iaXQoQlROX0xFRlQsIGRldi0+a2V5Yml0KTsKLQlzZXRfYml0KEJUTl9SSUdIVCwgZGV2LT5rZXliaXQpOworCV9fc2V0X2JpdChFVl9LRVksIGRldi0+ZXZiaXQpOworCV9fc2V0X2JpdChCVE5fVE9VQ0gsIGRldi0+a2V5Yml0KTsKKwlfX3NldF9iaXQoQlROX1RPT0xfRklOR0VSLCBkZXYtPmtleWJpdCk7CisJX19zZXRfYml0KEJUTl9MRUZULCBkZXYtPmtleWJpdCk7CisJX19zZXRfYml0KEJUTl9SSUdIVCwgZGV2LT5rZXliaXQpOwogCiAJaWYgKFNZTl9DQVBfTVVMVElGSU5HRVIocHJpdi0+Y2FwYWJpbGl0aWVzKSkgewotCQlzZXRfYml0KEJUTl9UT09MX0RPVUJMRVRBUCwgZGV2LT5rZXliaXQpOwotCQlzZXRfYml0KEJUTl9UT09MX1RSSVBMRVRBUCwgZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROX1RPT0xfRE9VQkxFVEFQLCBkZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fVE9PTF9UUklQTEVUQVAsIGRldi0+a2V5Yml0KTsKIAl9CiAKIAlpZiAoU1lOX0NBUF9NSURETEVfQlVUVE9OKHByaXYtPmNhcGFiaWxpdGllcykpCi0JCXNldF9iaXQoQlROX01JRERMRSwgZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROX01JRERMRSwgZGV2LT5rZXliaXQpOwogCiAJaWYgKFNZTl9DQVBfRk9VUl9CVVRUT04ocHJpdi0+Y2FwYWJpbGl0aWVzKSB8fAogCSAgICBTWU5fQ0FQX01JRERMRV9CVVRUT04ocHJpdi0+Y2FwYWJpbGl0aWVzKSkgewotCQlzZXRfYml0KEJUTl9GT1JXQVJELCBkZXYtPmtleWJpdCk7Ci0JCXNldF9iaXQoQlROX0JBQ0ssIGRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9GT1JXQVJELCBkZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fQkFDSywgZGV2LT5rZXliaXQpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBTWU5fQ0FQX01VTFRJX0JVVFRPTl9OTyhwcml2LT5leHRfY2FwKTsgaSsrKQotCQlzZXRfYml0KEJUTl8wICsgaSwgZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROXzAgKyBpLCBkZXYtPmtleWJpdCk7CiAKLQljbGVhcl9iaXQoRVZfUkVMLCBkZXYtPmV2Yml0KTsKLQljbGVhcl9iaXQoUkVMX1gsIGRldi0+cmVsYml0KTsKLQljbGVhcl9iaXQoUkVMX1ksIGRldi0+cmVsYml0KTsKKwlfX2NsZWFyX2JpdChFVl9SRUwsIGRldi0+ZXZiaXQpOworCV9fY2xlYXJfYml0KFJFTF9YLCBkZXYtPnJlbGJpdCk7CisJX19jbGVhcl9iaXQoUkVMX1ksIGRldi0+cmVsYml0KTsKIAogCWRldi0+YWJzcmVzW0FCU19YXSA9IHByaXYtPnhfcmVzOwogCWRldi0+YWJzcmVzW0FCU19ZXSA9IHByaXYtPnlfcmVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuaCBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmgKaW5kZXggMzAyMzgyMS4uODcxZjZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuaAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5oCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlpbnQgc2Nyb2xsOwogfTsKIAotaW50IHN5bmFwdGljc19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcyk7CitpbnQgc3luYXB0aWNzX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcyk7CiBpbnQgc3luYXB0aWNzX2luaXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpOwogdm9pZCBzeW5hcHRpY3NfcmVzZXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3RvdWNoa2l0X3BzMi5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS90b3VjaGtpdF9wczIuYwppbmRleCAzZmFkYjJhLi4wMzA4YTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3RvdWNoa2l0X3BzMi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdG91Y2hraXRfcHMyLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAlyZXR1cm4gUFNNT1VTRV9GVUxMX1BBQ0tFVDsKIH0KIAotaW50IHRvdWNoa2l0X3BzMl9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK2ludCB0b3VjaGtpdF9wczJfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHBzbW91c2UtPmRldjsKIAl1bnNpZ25lZCBjaGFyIHBhcmFtWzNdOwpAQCAtODYsNyArODYsNyBAQAogCiAJaWYgKHNldF9wcm9wZXJ0aWVzKSB7CiAJCWRldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKLQkJc2V0X2JpdChCVE5fVE9VQ0gsIGRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9UT1VDSCwgZGV2LT5rZXliaXQpOwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19YLCAwLCBUT1VDSEtJVF9NQVhfWEMsIDAsIDApOwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19ZLCAwLCBUT1VDSEtJVF9NQVhfWUMsIDAsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3RvdWNoa2l0X3BzMi5oIGIvZHJpdmVycy9pbnB1dC9tb3VzZS90b3VjaGtpdF9wczIuaAppbmRleCA4YTBkZDM1Li4yZWZlOWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3RvdWNoa2l0X3BzMi5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdG91Y2hraXRfcHMyLmgKQEAgLTEzLDEwICsxMywxMCBAQAogI2RlZmluZSBfVE9VQ0hLSVRfUFMyX0gKIAogI2lmZGVmIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQKLWludCB0b3VjaGtpdF9wczJfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpOworaW50IHRvdWNoa2l0X3BzMl9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHRvdWNoa2l0X3BzMl9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCi0JCQkJICAgICAgaW50IHNldF9wcm9wZXJ0aWVzKQorCQkJCSAgICAgIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCmluZGV4IGU2OGM4MTQuLmUzNTQzNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCkBAIC0yODIsNyArMjgyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHRyYWNrcG9pbnRfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitpbnQgdHJhY2twb2ludF9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7CiAJc3RydWN0IHRyYWNrcG9pbnRfZGF0YSAqcHJpdjsKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS90cmFja3BvaW50LmggYi9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuaAppbmRleCBjMTBhNmU3Li5lNTU4YTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuaAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuaApAQCAtMTQzLDkgKzE0Myw5IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UCi1pbnQgdHJhY2twb2ludF9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcyk7CitpbnQgdHJhY2twb2ludF9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpOwogI2Vsc2UKLWlubGluZSBpbnQgdHJhY2twb2ludF9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK2lubGluZSBpbnQgdHJhY2twb2ludF9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3ZzeHh4YWEuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdnN4eHhhYS5jCmluZGV4IDQwNGVlZGQuLjcwMTExNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvdnN4eHhhYS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdnN4eHhhYS5jCkBAIC0zODQsMTEgKzM4NCwxMSBAQAogCXByaW50ayAoS0VSTl9OT1RJQ0UgIiVzIG9uICVzOiBGb3JjZWluZyBzdGFuZGFyZCBwYWNrZXQgZm9ybWF0LCAiCiAJCQkiaW5jcmVtZW50YWwgc3RyZWFtaW5nIG1vZGUgYW5kIDcyIHNhbXBsZXMvc2VjXG4iLAogCQkJbW91c2UtPm5hbWUsIG1vdXNlLT5waHlzKTsKLQltb3VzZS0+c2VyaW8tPndyaXRlIChtb3VzZS0+c2VyaW8sICdTJyk7CS8qIFN0YW5kYXJkIGZvcm1hdCAqLworCXNlcmlvX3dyaXRlIChtb3VzZS0+c2VyaW8sICdTJyk7CS8qIFN0YW5kYXJkIGZvcm1hdCAqLwogCW1kZWxheSAoNTApOwotCW1vdXNlLT5zZXJpby0+d3JpdGUgKG1vdXNlLT5zZXJpbywgJ1InKTsJLyogSW5jcmVtZW50YWwgKi8KKwlzZXJpb193cml0ZSAobW91c2UtPnNlcmlvLCAnUicpOwkvKiBJbmNyZW1lbnRhbCAqLwogCW1kZWxheSAoNTApOwotCW1vdXNlLT5zZXJpby0+d3JpdGUgKG1vdXNlLT5zZXJpbywgJ0wnKTsJLyogNzIgc2FtcGxlcy9zZWMgKi8KKwlzZXJpb193cml0ZSAobW91c2UtPnNlcmlvLCAnTCcpOwkvKiA3MiBzYW1wbGVzL3NlYyAqLwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTMyLDcgKzUzMiw3IEBACiAJICogUmVxdWVzdCBzZWxmdGVzdC4gU3RhbmRhcmQgcGFja2V0IGZvcm1hdCBhbmQgZGlmZmVyZW50aWFsCiAJICogbW9kZSB3aWxsIGJlIHJlcXVlc3RlZCBhZnRlciB0aGUgZGV2aWNlIElEJ2VkIHN1Y2Nlc3NmdWxseS4KIAkgKi8KLQlzZXJpby0+d3JpdGUgKHNlcmlvLCAnVCcpOyAvKiBUZXN0ICovCisJc2VyaW9fd3JpdGUgKHNlcmlvLCAnVCcpOyAvKiBUZXN0ICovCiAKIAllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UgKGlucHV0X2Rldik7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vYXQzMnBzaWYuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vYXQzMnBzaWYuYwppbmRleCA0MWZkYThjLi5hNmZiN2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2F0MzJwc2lmLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9hdDMycHNpZi5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAkJZ290byBvdXRfZnJlZV9pbzsKIAl9CiAKLQlwc2lmLT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVncy0+ZW5kIC0gcmVncy0+c3RhcnQgKyAxKTsKKwlwc2lmLT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZWdzKSk7CiAJaWYgKCFwc2lmLT5yZWdzKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBtYXAgSS9PIG1lbW9yeVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAppbmRleCBjY2JmMjNlLi5hMzliYzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKQEAgLTQ1Nyw2ICs0NTcsMzQgQEAKIAl9LAogCXsgfQogfTsKKworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEgaTgwNDJfZG1pX2xhcHRvcF90YWJsZVtdID0geworCXsKKwkJLmlkZW50ID0gIlBvcnRhYmxlIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX0NIQVNTSVNfVFlQRSwgIjgiKSwgLyogUG9ydGFibGUgKi8KKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkxhcHRvcCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9DSEFTU0lTX1RZUEUsICI5IiksIC8qIExhcHRvcCAqLworCQl9LAorCX0sCisJeworCQkuaWRlbnQgPSAiTm90ZWJvb2siLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfQ0hBU1NJU19UWVBFLCAiMTAiKSwgLyogTm90ZWJvb2sgKi8KKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIlN1Yi1Ob3RlYm9vayIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9DSEFTU0lTX1RZUEUsICIxNCIpLCAvKiBTdWItTm90ZWJvb2sgKi8KKwkJfSwKKwl9LAorCXsgfQorfTsKICNlbmRpZgogCiAvKgpAQCAtNTMwLDkgKzU1OCw5IEBACiAjaWZkZWYgQ09ORklHX1BOUAogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogCi1zdGF0aWMgaW50IGk4MDQyX3BucF9rYmRfcmVnaXN0ZXJlZDsKK3N0YXRpYyBib29sIGk4MDQyX3BucF9rYmRfcmVnaXN0ZXJlZDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaTgwNDJfcG5wX2tiZF9kZXZpY2VzOwotc3RhdGljIGludCBpODA0Ml9wbnBfYXV4X3JlZ2lzdGVyZWQ7CitzdGF0aWMgYm9vbCBpODA0Ml9wbnBfYXV4X3JlZ2lzdGVyZWQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IGk4MDQyX3BucF9hdXhfZGV2aWNlczsKIAogc3RhdGljIGludCBpODA0Ml9wbnBfY29tbWFuZF9yZWc7CkBAIC02MjAsMTIgKzY0OCwxMiBAQAogc3RhdGljIHZvaWQgaTgwNDJfcG5wX2V4aXQodm9pZCkKIHsKIAlpZiAoaTgwNDJfcG5wX2tiZF9yZWdpc3RlcmVkKSB7Ci0JCWk4MDQyX3BucF9rYmRfcmVnaXN0ZXJlZCA9IDA7CisJCWk4MDQyX3BucF9rYmRfcmVnaXN0ZXJlZCA9IGZhbHNlOwogCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmk4MDQyX3BucF9rYmRfZHJpdmVyKTsKIAl9CiAKIAlpZiAoaTgwNDJfcG5wX2F1eF9yZWdpc3RlcmVkKSB7Ci0JCWk4MDQyX3BucF9hdXhfcmVnaXN0ZXJlZCA9IDA7CisJCWk4MDQyX3BucF9hdXhfcmVnaXN0ZXJlZCA9IGZhbHNlOwogCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmk4MDQyX3BucF9hdXhfZHJpdmVyKTsKIAl9CiB9CkBAIC02MzMsMTIgKzY2MSwxMiBAQAogc3RhdGljIGludCBfX2luaXQgaTgwNDJfcG5wX2luaXQodm9pZCkKIHsKIAljaGFyIGtiZF9pcnFfc3RyWzRdID0geyAwIH0sIGF1eF9pcnFfc3RyWzRdID0geyAwIH07Ci0JaW50IHBucF9kYXRhX2J1c3RlZCA9IDA7CisJaW50IHBucF9kYXRhX2J1c3RlZCA9IGZhbHNlOwogCWludCBlcnI7CiAKICNpZmRlZiBDT05GSUdfWDg2CiAJaWYgKGRtaV9jaGVja19zeXN0ZW0oaTgwNDJfZG1pX25vcG5wX3RhYmxlKSkKLQkJaTgwNDJfbm9wbnAgPSAxOworCQlpODA0Ml9ub3BucCA9IHRydWU7CiAjZW5kaWYKIAogCWlmIChpODA0Ml9ub3BucCkgewpAQCAtNjQ4LDExICs2NzYsMTEgQEAKIAogCWVyciA9IHBucF9yZWdpc3Rlcl9kcml2ZXIoJmk4MDQyX3BucF9rYmRfZHJpdmVyKTsKIAlpZiAoIWVycikKLQkJaTgwNDJfcG5wX2tiZF9yZWdpc3RlcmVkID0gMTsKKwkJaTgwNDJfcG5wX2tiZF9yZWdpc3RlcmVkID0gdHJ1ZTsKIAogCWVyciA9IHBucF9yZWdpc3Rlcl9kcml2ZXIoJmk4MDQyX3BucF9hdXhfZHJpdmVyKTsKIAlpZiAoIWVycikKLQkJaTgwNDJfcG5wX2F1eF9yZWdpc3RlcmVkID0gMTsKKwkJaTgwNDJfcG5wX2F1eF9yZWdpc3RlcmVkID0gdHJ1ZTsKIAogCWlmICghaTgwNDJfcG5wX2tiZF9kZXZpY2VzICYmICFpODA0Ml9wbnBfYXV4X2RldmljZXMpIHsKIAkJaTgwNDJfcG5wX2V4aXQoKTsKQEAgLTY4MCw5ICs3MDgsOSBAQAogCiAjaWYgZGVmaW5lZChfX2lhNjRfXykKIAlpZiAoIWk4MDQyX3BucF9rYmRfZGV2aWNlcykKLQkJaTgwNDJfbm9rYmQgPSAxOworCQlpODA0Ml9ub2tiZCA9IHRydWU7CiAJaWYgKCFpODA0Ml9wbnBfYXV4X2RldmljZXMpCi0JCWk4MDQyX25vYXV4ID0gMTsKKwkJaTgwNDJfbm9hdXggPSB0cnVlOwogI2VuZGlmCiAKIAlpZiAoKChpODA0Ml9wbnBfZGF0YV9yZWcgJiB+MHhmKSA9PSAoaTgwNDJfZGF0YV9yZWcgJiB+MHhmKSAmJgpAQCAtNjkzLDcgKzcyMSw3IEBACiAJCQkidXNpbmcgZGVmYXVsdCAlI3hcbiIsCiAJCQlpODA0Ml9wbnBfZGF0YV9yZWcsIGk4MDQyX2RhdGFfcmVnKTsKIAkJaTgwNDJfcG5wX2RhdGFfcmVnID0gaTgwNDJfZGF0YV9yZWc7Ci0JCXBucF9kYXRhX2J1c3RlZCA9IDE7CisJCXBucF9kYXRhX2J1c3RlZCA9IHRydWU7CiAJfQogCiAJaWYgKCgoaTgwNDJfcG5wX2NvbW1hbmRfcmVnICYgfjB4ZikgPT0gKGk4MDQyX2NvbW1hbmRfcmVnICYgfjB4ZikgJiYKQEAgLTcwNCw3ICs3MzIsNyBAQAogCQkJInVzaW5nIGRlZmF1bHQgJSN4XG4iLAogCQkJaTgwNDJfcG5wX2NvbW1hbmRfcmVnLCBpODA0Ml9jb21tYW5kX3JlZyk7CiAJCWk4MDQyX3BucF9jb21tYW5kX3JlZyA9IGk4MDQyX2NvbW1hbmRfcmVnOwotCQlwbnBfZGF0YV9idXN0ZWQgPSAxOworCQlwbnBfZGF0YV9idXN0ZWQgPSB0cnVlOwogCX0KIAogCWlmICghaTgwNDJfbm9rYmQgJiYgIWk4MDQyX3BucF9rYmRfaXJxKSB7CkBAIC03MTIsNyArNzQwLDcgQEAKIAkJCSJQTlA6IFBTLzIgY29udHJvbGxlciBkb2Vzbid0IGhhdmUgS0JEIGlycTsgIgogCQkJInVzaW5nIGRlZmF1bHQgJWRcbiIsIGk4MDQyX2tiZF9pcnEpOwogCQlpODA0Ml9wbnBfa2JkX2lycSA9IGk4MDQyX2tiZF9pcnE7Ci0JCXBucF9kYXRhX2J1c3RlZCA9IDE7CisJCXBucF9kYXRhX2J1c3RlZCA9IHRydWU7CiAJfQogCiAJaWYgKCFpODA0Ml9ub2F1eCAmJiAhaTgwNDJfcG5wX2F1eF9pcnEpIHsKQEAgLTcyMSw3ICs3NDksNyBAQAogCQkJCSJQTlA6IFBTLzIgYXBwZWFycyB0byBoYXZlIEFVWCBwb3J0IGRpc2FibGVkLCAiCiAJCQkJImlmIHRoaXMgaXMgaW5jb3JyZWN0IHBsZWFzZSBib290IHdpdGggIgogCQkJCSJpODA0Mi5ub3BucFxuIik7Ci0JCQlpODA0Ml9ub2F1eCA9IDE7CisJCQlpODA0Ml9ub2F1eCA9IHRydWU7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJIlBOUDogUFMvMiBjb250cm9sbGVyIGRvZXNuJ3QgaGF2ZSBBVVggaXJxOyAiCkBAIC03MzUsNiArNzYzLDExIEBACiAJaTgwNDJfa2JkX2lycSA9IGk4MDQyX3BucF9rYmRfaXJxOwogCWk4MDQyX2F1eF9pcnEgPSBpODA0Ml9wbnBfYXV4X2lycTsKIAorI2lmZGVmIENPTkZJR19YODYKKwlpODA0Ml9ieXBhc3NfYXV4X2lycV90ZXN0ID0gIXBucF9kYXRhX2J1c3RlZCAmJgorCQkJCSAgICBkbWlfY2hlY2tfc3lzdGVtKGk4MDQyX2RtaV9sYXB0b3BfdGFibGUpOworI2VuZGlmCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzYzLDIxICs3OTYsMjEgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAogI2lmIGRlZmluZWQoX19pYTY0X18pCi0gICAgICAgIGk4MDQyX3Jlc2V0ID0gMTsKKyAgICAgICAgaTgwNDJfcmVzZXQgPSB0cnVlOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2CiAJaWYgKGRtaV9jaGVja19zeXN0ZW0oaTgwNDJfZG1pX3Jlc2V0X3RhYmxlKSkKLQkJaTgwNDJfcmVzZXQgPSAxOworCQlpODA0Ml9yZXNldCA9IHRydWU7CiAKIAlpZiAoZG1pX2NoZWNrX3N5c3RlbShpODA0Ml9kbWlfbm9sb29wX3RhYmxlKSkKLQkJaTgwNDJfbm9sb29wID0gMTsKKwkJaTgwNDJfbm9sb29wID0gdHJ1ZTsKIAogCWlmIChkbWlfY2hlY2tfc3lzdGVtKGk4MDQyX2RtaV9ub211eF90YWJsZSkpCi0JCWk4MDQyX25vbXV4ID0gMTsKKwkJaTgwNDJfbm9tdXggPSB0cnVlOwogCiAJaWYgKGRtaV9jaGVja19zeXN0ZW0oaTgwNDJfZG1pX2RyaXRla190YWJsZSkpCi0JCWk4MDQyX2RyaXRlayA9IDE7CisJCWk4MDQyX2RyaXRlayA9IHRydWU7CiAjZW5kaWYgLyogQ09ORklHX1g4NiAqLwogCiAJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwppbmRleCA1ODIyNDVjLi5lYjNmZjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCkBAIC0yOCwzNSArMjgsMzUgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiaTgwNDIga2V5Ym9hcmQgYW5kIG1vdXNlIGNvbnRyb2xsZXIgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTgwNDJfbm9rYmQ7CitzdGF0aWMgYm9vbCBpODA0Ml9ub2tiZDsKIG1vZHVsZV9wYXJhbV9uYW1lZChub2tiZCwgaTgwNDJfbm9rYmQsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhub2tiZCwgIkRvIG5vdCBwcm9iZSBvciB1c2UgS0JEIHBvcnQuIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTgwNDJfbm9hdXg7CitzdGF0aWMgYm9vbCBpODA0Ml9ub2F1eDsKIG1vZHVsZV9wYXJhbV9uYW1lZChub2F1eCwgaTgwNDJfbm9hdXgsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhub2F1eCwgIkRvIG5vdCBwcm9iZSBvciB1c2UgQVVYIChtb3VzZSkgcG9ydC4iKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBpODA0Ml9ub211eDsKK3N0YXRpYyBib29sIGk4MDQyX25vbXV4OwogbW9kdWxlX3BhcmFtX25hbWVkKG5vbXV4LCBpODA0Ml9ub211eCwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vbXV4LCAiRG8gbm90IGNoZWNrIHdoZXRoZXIgYW4gYWN0aXZlIG11bHRpcGxleGluZyBjb25ydG9sbGVyIGlzIHByZXNlbnQuIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTgwNDJfdW5sb2NrOworc3RhdGljIGJvb2wgaTgwNDJfdW5sb2NrOwogbW9kdWxlX3BhcmFtX25hbWVkKHVubG9jaywgaTgwNDJfdW5sb2NrLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModW5sb2NrLCAiSWdub3JlIGtleWJvYXJkIGxvY2suIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTgwNDJfcmVzZXQ7CitzdGF0aWMgYm9vbCBpODA0Ml9yZXNldDsKIG1vZHVsZV9wYXJhbV9uYW1lZChyZXNldCwgaTgwNDJfcmVzZXQsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhyZXNldCwgIlJlc2V0IGNvbnRyb2xsZXIgZHVyaW5nIGluaXQgYW5kIGNsZWFudXAuIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTgwNDJfZGlyZWN0Oworc3RhdGljIGJvb2wgaTgwNDJfZGlyZWN0OwogbW9kdWxlX3BhcmFtX25hbWVkKGRpcmVjdCwgaTgwNDJfZGlyZWN0LCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlyZWN0LCAiUHV0IGtleWJvYXJkIHBvcnQgaW50byBub24tdHJhbnNsYXRlZCBtb2RlLiIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGk4MDQyX2R1bWJrYmQ7CitzdGF0aWMgYm9vbCBpODA0Ml9kdW1ia2JkOwogbW9kdWxlX3BhcmFtX25hbWVkKGR1bWJrYmQsIGk4MDQyX2R1bWJrYmQsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkdW1ia2JkLCAiUHJldGVuZCB0aGF0IGNvbnRyb2xsZXIgY2FuIG9ubHkgcmVhZCBkYXRhIGZyb20ga2V5Ym9hcmQiKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBpODA0Ml9ub2xvb3A7CitzdGF0aWMgYm9vbCBpODA0Ml9ub2xvb3A7CiBtb2R1bGVfcGFyYW1fbmFtZWQobm9sb29wLCBpODA0Ml9ub2xvb3AsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhub2xvb3AsICJEaXNhYmxlIHRoZSBBVVggTG9vcGJhY2sgY29tbWFuZCB3aGlsZSBwcm9iaW5nIGZvciB0aGUgQVVYIHBvcnQiKTsKIApAQCAtNjUsMjQgKzY1LDI2IEBACiBNT0RVTEVfUEFSTV9ERVNDKHBhbmljYmxpbmssICJGcmVxdWVuY3kgd2l0aCB3aGljaCBrZXlib2FyZCBMRURzIHNob3VsZCBibGluayB3aGVuIGtlcm5lbCBwYW5pY3MiKTsKIAogI2lmZGVmIENPTkZJR19YODYKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTgwNDJfZHJpdGVrOworc3RhdGljIGJvb2wgaTgwNDJfZHJpdGVrOwogbW9kdWxlX3BhcmFtX25hbWVkKGRyaXRlaywgaTgwNDJfZHJpdGVrLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZHJpdGVrLCAiRm9yY2UgZW5hYmxlIHRoZSBEcml0ZWsga2V5Ym9hcmQgZXh0ZW5zaW9uIik7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QTlAKLXN0YXRpYyBpbnQgaTgwNDJfbm9wbnA7CitzdGF0aWMgYm9vbCBpODA0Ml9ub3BucDsKIG1vZHVsZV9wYXJhbV9uYW1lZChub3BucCwgaTgwNDJfbm9wbnAsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhub3BucCwgIkRvIG5vdCB1c2UgUE5QIHRvIGRldGVjdCBjb250cm9sbGVyIHNldHRpbmdzIik7CiAjZW5kaWYKIAogI2RlZmluZSBERUJVRwogI2lmZGVmIERFQlVHCi1zdGF0aWMgaW50IGk4MDQyX2RlYnVnOworc3RhdGljIGJvb2wgaTgwNDJfZGVidWc7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGk4MDQyX2RlYnVnLCBib29sLCAwNjAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIGk4MDQyIGRlYnVnZ2luZyBtb2RlIG9uIGFuZCBvZmYiKTsKICNlbmRpZgogCitzdGF0aWMgYm9vbCBpODA0Ml9ieXBhc3NfYXV4X2lycV90ZXN0OworCiAjaW5jbHVkZSAiaTgwNDIuaCIKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhpODA0Ml9sb2NrKTsKQEAgLTkwLDcgKzkyLDcgQEAKIHN0cnVjdCBpODA0Ml9wb3J0IHsKIAlzdHJ1Y3Qgc2VyaW8gKnNlcmlvOwogCWludCBpcnE7Ci0JdW5zaWduZWQgY2hhciBleGlzdHM7CisJYm9vbCBleGlzdHM7CiAJc2lnbmVkIGNoYXIgbXV4OwogfTsKIApAQCAtMTAzLDkgKzEwNSw5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGk4MDQyX2luaXRpYWxfY3RyOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgaTgwNDJfY3RyOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTgwNDJfbXV4X3ByZXNlbnQ7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpODA0Ml9rYmRfaXJxX3JlZ2lzdGVyZWQ7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpODA0Ml9hdXhfaXJxX3JlZ2lzdGVyZWQ7CitzdGF0aWMgYm9vbCBpODA0Ml9tdXhfcHJlc2VudDsKK3N0YXRpYyBib29sIGk4MDQyX2tiZF9pcnFfcmVnaXN0ZXJlZDsKK3N0YXRpYyBib29sIGk4MDQyX2F1eF9pcnFfcmVnaXN0ZXJlZDsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGk4MDQyX3N1cHByZXNzX2tiZF9hY2s7CiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaTgwNDJfcGxhdGZvcm1fZGV2aWNlOwogCkBAIC0yNjIsNiArMjY0LDQ5IEBACiAJCQkJCUk4MDQyX0NNRF9NVVhfU0VORCArIHBvcnQtPm11eCk7CiB9CiAKKworLyoKKyAqIGk4MDQyX2F1eF9jbG9zZSBhdHRlbXB0cyB0byBjbGVhciBBVVggb3IgS0JEIHBvcnQgc3RhdGUgYnkgZGlzYWJsaW5nCisgKiBhbmQgdGhlbiByZS1lbmFibGluZyBpdC4KKyAqLworCitzdGF0aWMgdm9pZCBpODA0Ml9wb3J0X2Nsb3NlKHN0cnVjdCBzZXJpbyAqc2VyaW8pCit7CisJaW50IGlycV9iaXQ7CisJaW50IGRpc2FibGVfYml0OworCWNvbnN0IGNoYXIgKnBvcnRfbmFtZTsKKworCWlmIChzZXJpbyA9PSBpODA0Ml9wb3J0c1tJODA0Ml9BVVhfUE9SVF9OT10uc2VyaW8pIHsKKwkJaXJxX2JpdCA9IEk4MDQyX0NUUl9BVVhJTlQ7CisJCWRpc2FibGVfYml0ID0gSTgwNDJfQ1RSX0FVWERJUzsKKwkJcG9ydF9uYW1lID0gIkFVWCI7CisJfSBlbHNlIHsKKwkJaXJxX2JpdCA9IEk4MDQyX0NUUl9LQkRJTlQ7CisJCWRpc2FibGVfYml0ID0gSTgwNDJfQ1RSX0tCRERJUzsKKwkJcG9ydF9uYW1lID0gIktCRCI7CisJfQorCisJaTgwNDJfY3RyICY9IH5pcnFfYml0OworCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9jdHIsIEk4MDQyX0NNRF9DVExfV0NUUikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJpODA0Mi5jOiBDYW4ndCB3cml0ZSBDVFIgd2hpbGUgY2xvc2luZyAlcyBwb3J0LlxuIiwKKwkJCXBvcnRfbmFtZSk7CisKKwl1ZGVsYXkoNTApOworCisJaTgwNDJfY3RyICY9IH5kaXNhYmxlX2JpdDsKKwlpODA0Ml9jdHIgfD0gaXJxX2JpdDsKKwlpZiAoaTgwNDJfY29tbWFuZCgmaTgwNDJfY3RyLCBJODA0Ml9DTURfQ1RMX1dDVFIpKQorCQlwcmludGsoS0VSTl9FUlIgImk4MDQyLmM6IENhbid0IHJlYWN0aXZhdGUgJXMgcG9ydC5cbiIsCisJCQlwb3J0X25hbWUpOworCisJLyoKKwkgKiBTZWUgaWYgdGhlcmUgaXMgYW55IGRhdGEgYXBwZWFyZWQgd2hpbGUgd2Ugd2VyZSBtZXNzaW5nIHdpdGgKKwkgKiBwb3J0IHN0YXRlLgorCSAqLworCWk4MDQyX2ludGVycnVwdCgwLCBOVUxMKTsKK30KKwogLyoKICAqIGk4MDQyX3N0YXJ0KCkgaXMgY2FsbGVkIGJ5IHNlcmlvIGNvcmUgd2hlbiBwb3J0IGlzIGFib3V0IHRvIGZpbmlzaAogICogcmVnaXN0ZXJpbmcuIEl0IHdpbGwgbWFyayBwb3J0IGFzIGV4aXN0aW5nIHNvIGk4MDQyX2ludGVycnVwdCBjYW4KQEAgLTI3MSw3ICszMTYsNyBAQAogewogCXN0cnVjdCBpODA0Ml9wb3J0ICpwb3J0ID0gc2VyaW8tPnBvcnRfZGF0YTsKIAotCXBvcnQtPmV4aXN0cyA9IDE7CisJcG9ydC0+ZXhpc3RzID0gdHJ1ZTsKIAltYigpOwogCXJldHVybiAwOwogfQpAQCAtMjg1LDcgKzMzMCw3IEBACiB7CiAJc3RydWN0IGk4MDQyX3BvcnQgKnBvcnQgPSBzZXJpby0+cG9ydF9kYXRhOwogCi0JcG9ydC0+ZXhpc3RzID0gMDsKKwlwb3J0LT5leGlzdHMgPSBmYWxzZTsKIAogCS8qCiAJICogV2Ugc3luY2hyb25pemUgd2l0aCBib3RoIEFVWCBhbmQgS0JEIElSUXMgYmVjYXVzZSB0aGVyZSBpcwpAQCAtMzkxLDcgKzQzNiw3IEBACiB9CiAKIC8qCi0gKiBpODA0Ml9lbmFibGVfa2JkX3BvcnQgZW5hYmxlcyBrZXliYW9yZCBwb3J0IG9uIGNoaXAKKyAqIGk4MDQyX2VuYWJsZV9rYmRfcG9ydCBlbmFibGVzIGtleWJvYXJkIHBvcnQgb24gY2hpcAogICovCiAKIHN0YXRpYyBpbnQgaTgwNDJfZW5hYmxlX2tiZF9wb3J0KHZvaWQpCkBAIC00NDcsMTQgKzQ5MiwxNSBAQAogfQogCiAvKgotICogaTgwNDJfc2V0X211eF9tb2RlIGNoZWNrcyB3aGV0aGVyIHRoZSBjb250cm9sbGVyIGhhcyBhbiBhY3RpdmUKLSAqIG11bHRpcGxleG9yIGFuZCBwdXRzIHRoZSBjaGlwIGludG8gTXVsdGlwbGV4ZWQgKDEpIG9yIExlZ2FjeSAoMCkgbW9kZS4KKyAqIGk4MDQyX3NldF9tdXhfbW9kZSBjaGVja3Mgd2hldGhlciB0aGUgY29udHJvbGxlciBoYXMgYW4KKyAqIGFjdGl2ZSBtdWx0aXBsZXhvciBhbmQgcHV0cyB0aGUgY2hpcCBpbnRvIE11bHRpcGxleGVkICh0cnVlKQorICogb3IgTGVnYWN5IChmYWxzZSkgbW9kZS4KICAqLwogCi1zdGF0aWMgaW50IGk4MDQyX3NldF9tdXhfbW9kZSh1bnNpZ25lZCBpbnQgbW9kZSwgdW5zaWduZWQgY2hhciAqbXV4X3ZlcnNpb24pCitzdGF0aWMgaW50IGk4MDQyX3NldF9tdXhfbW9kZShib29sIG11bHRpcGxleCwgdW5zaWduZWQgY2hhciAqbXV4X3ZlcnNpb24pCiB7CiAKLQl1bnNpZ25lZCBjaGFyIHBhcmFtOworCXVuc2lnbmVkIGNoYXIgcGFyYW0sIHZhbDsKIC8qCiAgKiBHZXQgcmlkIG9mIGJ5dGVzIGluIHRoZSBxdWV1ZS4KICAqLwpAQCAtNDY2LDE0ICs1MTIsMjEgQEAKICAqIG1vdXNlIGludGVyZmFjZSwgdGhlIGxhc3Qgc2hvdWxkIGJlIHZlcnNpb24uCiAgKi8KIAotCXBhcmFtID0gMHhmMDsKLQlpZiAoaTgwNDJfY29tbWFuZCgmcGFyYW0sIEk4MDQyX0NNRF9BVVhfTE9PUCkgfHwgcGFyYW0gIT0gMHhmMCkKKwlwYXJhbSA9IHZhbCA9IDB4ZjA7CisJaWYgKGk4MDQyX2NvbW1hbmQoJnBhcmFtLCBJODA0Ml9DTURfQVVYX0xPT1ApIHx8IHBhcmFtICE9IHZhbCkKIAkJcmV0dXJuIC0xOwotCXBhcmFtID0gbW9kZSA/IDB4NTYgOiAweGY2OwotCWlmIChpODA0Ml9jb21tYW5kKCZwYXJhbSwgSTgwNDJfQ01EX0FVWF9MT09QKSB8fCBwYXJhbSAhPSAobW9kZSA/IDB4NTYgOiAweGY2KSkKKwlwYXJhbSA9IHZhbCA9IG11bHRpcGxleCA/IDB4NTYgOiAweGY2OworCWlmIChpODA0Ml9jb21tYW5kKCZwYXJhbSwgSTgwNDJfQ01EX0FVWF9MT09QKSB8fCBwYXJhbSAhPSB2YWwpCiAJCXJldHVybiAtMTsKLQlwYXJhbSA9IG1vZGUgPyAweGE0IDogMHhhNTsKLQlpZiAoaTgwNDJfY29tbWFuZCgmcGFyYW0sIEk4MDQyX0NNRF9BVVhfTE9PUCkgfHwgcGFyYW0gPT0gKG1vZGUgPyAweGE0IDogMHhhNSkpCisJcGFyYW0gPSB2YWwgPSBtdWx0aXBsZXggPyAweGE0IDogMHhhNTsKKwlpZiAoaTgwNDJfY29tbWFuZCgmcGFyYW0sIEk4MDQyX0NNRF9BVVhfTE9PUCkgfHwgcGFyYW0gPT0gdmFsKQorCQlyZXR1cm4gLTE7CisKKy8qCisgKiBXb3JrYXJvdW5kIGZvciBpbnRlcmZlcmVuY2Ugd2l0aCBVU0IgTGVnYWN5IGVtdWxhdGlvbgorICogdGhhdCBjYXVzZXMgYSB2MTAuMTIgTVVYIHRvIGJlIGZvdW5kLgorICovCisJaWYgKHBhcmFtID09IDB4YWMpCiAJCXJldHVybiAtMTsKIAogCWlmIChtdXhfdmVyc2lvbikKQEAgLTQ4OCwxOCArNTQxLDExIEBACiAgKiBMQ1MvVGVsZWdyYXBoaWNzLgogICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGk4MDQyX2NoZWNrX211eCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaTgwNDJfY2hlY2tfbXV4KHZvaWQpCiB7CiAJdW5zaWduZWQgY2hhciBtdXhfdmVyc2lvbjsKIAotCWlmIChpODA0Ml9zZXRfbXV4X21vZGUoMSwgJm11eF92ZXJzaW9uKSkKLQkJcmV0dXJuIC0xOwotCi0vKgotICogV29ya2Fyb3VuZCBmb3IgaW50ZXJmZXJlbmNlIHdpdGggVVNCIExlZ2FjeSBlbXVsYXRpb24KLSAqIHRoYXQgY2F1c2VzIGEgdjEwLjEyIE1VWCB0byBiZSBmb3VuZC4KLSAqLwotCWlmIChtdXhfdmVyc2lvbiA9PSAweEFDKQorCWlmIChpODA0Ml9zZXRfbXV4X21vZGUodHJ1ZSwgJm11eF92ZXJzaW9uKSkKIAkJcmV0dXJuIC0xOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiaTgwNDIuYzogRGV0ZWN0ZWQgYWN0aXZlIG11bHRpcGxleGluZyBjb250cm9sbGVyLCByZXYgJWQuJWQuXG4iLApAQCAtNTE2LDcgKzU2Miw3IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWk4MDQyX211eF9wcmVzZW50ID0gMTsKKwlpODA0Ml9tdXhfcHJlc2VudCA9IHRydWU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyNCwxMCArNTcwLDEwIEBACiAvKgogICogVGhlIGZvbGxvd2luZyBpcyB1c2VkIHRvIHRlc3QgQVVYIElSUSBkZWxpdmVyeS4KICAqLwotc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIGk4MDQyX2F1eF9pcnFfZGVsaXZlcmVkIF9fZGV2aW5pdGRhdGE7Ci1zdGF0aWMgaW50IGk4MDQyX2lycV9iZWluZ190ZXN0ZWQgX19kZXZpbml0ZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiBpODA0Ml9hdXhfaXJxX2RlbGl2ZXJlZCBfX2luaXRkYXRhOworc3RhdGljIGJvb2wgaTgwNDJfaXJxX2JlaW5nX3Rlc3RlZCBfX2luaXRkYXRhOwogCi1zdGF0aWMgaXJxcmV0dXJuX3QgX19kZXZpbml0IGk4MDQyX2F1eF90ZXN0X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgX19pbml0IGk4MDQyX2F1eF90ZXN0X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIHN0ciwgZGF0YTsKQEAgLTU1Miw3ICs1OTgsNyBAQAogICogdmVyaWZpZXMgc3VjY2VzcyBieSByZWFkaW5uZyBDVFIuIFVzZWQgd2hlbiB0ZXN0aW5nIGZvciBwcmVzZW5jZSBvZiBBVVgKICAqIHBvcnQuCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IGk4MDQyX3RvZ2dsZV9hdXgoaW50IG9uKQorc3RhdGljIGludCBfX2luaXQgaTgwNDJfdG9nZ2xlX2F1eChib29sIG9uKQogewogCXVuc2lnbmVkIGNoYXIgcGFyYW07CiAJaW50IGk7CkBAIC01ODAsMTEgKzYyNiwxMSBAQAogICogdGhlIHByZXNlbmNlIG9mIGFuIEFVWCBpbnRlcmZhY2UuCiAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgaTgwNDJfY2hlY2tfYXV4KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpODA0Ml9jaGVja19hdXgodm9pZCkKIHsKIAlpbnQgcmV0dmFsID0gLTE7Ci0JaW50IGlycV9yZWdpc3RlcmVkID0gMDsKLQlpbnQgYXV4X2xvb3BfYnJva2VuID0gMDsKKwlib29sIGlycV9yZWdpc3RlcmVkID0gZmFsc2U7CisJYm9vbCBhdXhfbG9vcF9icm9rZW4gPSBmYWxzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGNoYXIgcGFyYW07CiAKQEAgLTYyMSwxOSArNjY3LDE5IEBACiAgKiBtYXJrIGl0IGFzIGJyb2tlbgogICovCiAJCWlmICghcmV0dmFsKQotCQkJYXV4X2xvb3BfYnJva2VuID0gMTsKKwkJCWF1eF9sb29wX2Jyb2tlbiA9IHRydWU7CiAJfQogCiAvKgogICogQml0IGFzc2lnbm1lbnQgdGVzdCAtIGZpbHRlcnMgb3V0IFBTLzIgaTgwNDIncyBpbiBBVCBtb2RlCiAgKi8KIAotCWlmIChpODA0Ml90b2dnbGVfYXV4KDApKSB7CisJaWYgKGk4MDQyX3RvZ2dsZV9hdXgoZmFsc2UpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byBkaXNhYmxlIEFVWCBwb3J0LCBidXQgY29udGludWluZyBhbnl3YXkuLi4gSXMgdGhpcyBhIFNpUz9cbiIpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJJZiBBVVggcG9ydCBpcyByZWFsbHkgYWJzZW50IHBsZWFzZSB1c2UgdGhlICdpODA0Mi5ub2F1eCcgb3B0aW9uLlxuIik7CiAJfQogCi0JaWYgKGk4MDQyX3RvZ2dsZV9hdXgoMSkpCisJaWYgKGk4MDQyX3RvZ2dsZV9hdXgodHJ1ZSkpCiAJCXJldHVybiAtMTsKIAogLyoKQEAgLTY0MSw3ICs2ODcsNyBAQAogICogdXNlZCBpdCBmb3IgYSBQQ0kgY2FyZCBvciBzb21ldGhpZyBlbHNlLgogICovCiAKLQlpZiAoaTgwNDJfbm9sb29wIHx8IGF1eF9sb29wX2Jyb2tlbikgeworCWlmIChpODA0Ml9ub2xvb3AgfHwgaTgwNDJfYnlwYXNzX2F1eF9pcnFfdGVzdCB8fCBhdXhfbG9vcF9icm9rZW4pIHsKIC8qCiAgKiBXaXRob3V0IExPT1AgY29tbWFuZCB3ZSBjYW4ndCB0ZXN0IEFVWCBJUlEgZGVsaXZlcnkuIEFzc3VtZSB0aGUgcG9ydAogICogaXMgd29ya2luZyBhbmQgaG9wZSB3ZSBhcmUgcmlnaHQuCkBAIC02NTQsNyArNzAwLDcgQEAKIAkJCSJpODA0MiIsIGk4MDQyX3BsYXRmb3JtX2RldmljZSkpCiAJCWdvdG8gb3V0OwogCi0JaXJxX3JlZ2lzdGVyZWQgPSAxOworCWlycV9yZWdpc3RlcmVkID0gdHJ1ZTsKIAogCWlmIChpODA0Ml9lbmFibGVfYXV4X3BvcnQoKSkKIAkJZ290byBvdXQ7CkBAIC02NjIsNyArNzA4LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaTgwNDJfbG9jaywgZmxhZ3MpOwogCiAJaW5pdF9jb21wbGV0aW9uKCZpODA0Ml9hdXhfaXJxX2RlbGl2ZXJlZCk7Ci0JaTgwNDJfaXJxX2JlaW5nX3Rlc3RlZCA9IDE7CisJaTgwNDJfaXJxX2JlaW5nX3Rlc3RlZCA9IHRydWU7CiAKIAlwYXJhbSA9IDB4YTU7CiAJcmV0dmFsID0gX19pODA0Ml9jb21tYW5kKCZwYXJhbSwgSTgwNDJfQ01EX0FVWF9MT09QICYgMHhmMGZmKTsKQEAgLTc5OSw3ICs4NDUsNyBAQAogICovCiAKIAlpZiAofmk4MDQyX2N0ciAmIEk4MDQyX0NUUl9YTEFURSkKLQkJaTgwNDJfZGlyZWN0ID0gMTsKKwkJaTgwNDJfZGlyZWN0ID0gdHJ1ZTsKIAogLyoKICAqIFNldCBub250cmFuc2xhdGVkIG1vZGUgZm9yIHRoZSBrYmQgaW50ZXJmYWNlIGlmIHJlcXVlc3RlZCBieSBhbiBvcHRpb24uCkBAIC04MzksMTIgKzg4NSwxNSBAQAogCWk4MDQyX2N0ciB8PSBJODA0Ml9DVFJfS0JERElTIHwgSTgwNDJfQ1RSX0FVWERJUzsKIAlpODA0Ml9jdHIgJj0gfihJODA0Ml9DVFJfS0JESU5UIHwgSTgwNDJfQ1RSX0FVWElOVCk7CiAKKwlpZiAoaTgwNDJfY29tbWFuZCgmaTgwNDJfaW5pdGlhbF9jdHIsIEk4MDQyX0NNRF9DVExfV0NUUikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImk4MDQyLmM6IENhbid0IHdyaXRlIENUUiB3aGlsZSByZXNldHRpbmcuXG4iKTsKKwogLyoKICAqIERpc2FibGUgTVVYIG1vZGUgaWYgcHJlc2VudC4KICAqLwogCiAJaWYgKGk4MDQyX211eF9wcmVzZW50KQotCQlpODA0Ml9zZXRfbXV4X21vZGUoMCwgTlVMTCk7CisJCWk4MDQyX3NldF9tdXhfbW9kZShmYWxzZSwgTlVMTCk7CiAKIC8qCiAgKiBSZXNldCB0aGUgY29udHJvbGxlciBpZiByZXF1ZXN0ZWQuCkBAIC05MjMsNDEgKzk3MiwyNyBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyBib29sIGk4MDQyX3N1c3BlbmRlZDsKLQogLyoKLSAqIEhlcmUgd2UgdHJ5IHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIEJJT1Mgc2V0dGluZ3MuIFdlIG9ubHkgd2FudCB0bwotICogZG8gdGhhdCBvbmNlLCB3aGVuIHdlIHJlYWxseSBzdXNwZW5kLCBub3Qgd2hlbiB3ZSB0YWtpbmcgbWVtb3J5Ci0gKiBzbmFwc2hvdCBmb3Igc3dzdXNwIChpbiB0aGlzIGNhc2Ugd2UnbGwgcGVyZm9ybSByZXF1aXJlZCBjbGVhbnVwCi0gKiBhcyBwYXJ0IG9mIHNodXRkb3duIHByb2Nlc3MpLgorICogSGVyZSB3ZSB0cnkgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgQklPUyBzZXR0aW5ncyB0byBhdm9pZAorICogdXBzZXR0aW5nIGl0LgogICovCiAKLXN0YXRpYyBpbnQgaTgwNDJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgaTgwNDJfcG1fcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KQogewotCWlmICghaTgwNDJfc3VzcGVuZGVkICYmIHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpCi0JCWk4MDQyX2NvbnRyb2xsZXJfcmVzZXQoKTsKLQotCWk4MDQyX3N1c3BlbmRlZCA9IHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQgfHwKLQkJCSAgc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFOworCWk4MDQyX2NvbnRyb2xsZXJfcmVzZXQoKTsKIAogCXJldHVybiAwOwogfQogCi0KIC8qCi0gKiBIZXJlIHdlIHRyeSB0byByZXNldCBldmVyeXRoaW5nIGJhY2sgdG8gYSBzdGF0ZSBpbiB3aGljaCBzdXNwZW5kZWQKKyAqIEhlcmUgd2UgdHJ5IHRvIHJlc2V0IGV2ZXJ5dGhpbmcgYmFjayB0byBhIHN0YXRlIHdlIGhhZAorICogYmVmb3JlIHN1c3BlbmRpbmcuCiAgKi8KIAotc3RhdGljIGludCBpODA0Ml9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBpODA0Ml9wbV9yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgZXJyb3I7CiAKLS8qCi0gKiBEbyBub3QgYm90aGVyIHdpdGggcmVzdG9yaW5nIHN0YXRlIGlmIHdlIGhhdmVuJ3Qgc3VzcGVuZWQgeWV0Ci0gKi8KLQlpZiAoIWk4MDQyX3N1c3BlbmRlZCkKLQkJcmV0dXJuIDA7Ci0KIAllcnJvciA9IGk4MDQyX2NvbnRyb2xsZXJfY2hlY2soKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTk5MSw3ICsxMDI2LDcgQEAKICNlbmRpZgogCiAJaWYgKGk4MDQyX211eF9wcmVzZW50KSB7Ci0JCWlmIChpODA0Ml9zZXRfbXV4X21vZGUoMSwgTlVMTCkgfHwgaTgwNDJfZW5hYmxlX211eF9wb3J0cygpKQorCQlpZiAoaTgwNDJfc2V0X211eF9tb2RlKHRydWUsIE5VTEwpIHx8IGk4MDQyX2VuYWJsZV9tdXhfcG9ydHMoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkiaTgwNDI6IGZhaWxlZCB0byByZXN1bWUgYWN0aXZlIG11bHRpcGxleG9yLCAiCiAJCQkJIm1vdXNlIHdvbid0IHdvcmsuXG4iKTsKQEAgLTEwMDEsMTEgKzEwMzYsMTggQEAKIAlpZiAoaTgwNDJfcG9ydHNbSTgwNDJfS0JEX1BPUlRfTk9dLnNlcmlvKQogCQlpODA0Ml9lbmFibGVfa2JkX3BvcnQoKTsKIAotCWk4MDQyX3N1c3BlbmRlZCA9IGZhbHNlOwogCWk4MDQyX2ludGVycnVwdCgwLCBOVUxMKTsKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaTgwNDJfcG1fb3BzID0geworCS5zdXNwZW5kCT0gaTgwNDJfcG1fcmVzZXQsCisJLnJlc3VtZQkJPSBpODA0Ml9wbV9yZXN0b3JlLAorCS5wb3dlcm9mZgk9IGk4MDQyX3BtX3Jlc2V0LAorCS5yZXN0b3JlCT0gaTgwNDJfcG1fcmVzdG9yZSwKK307CisKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogLyoKQEAgLTEwMTgsNyArMTA2MCw3IEBACiAJaTgwNDJfY29udHJvbGxlcl9yZXNldCgpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpODA0Ml9jcmVhdGVfa2JkX3BvcnQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGk4MDQyX2NyZWF0ZV9rYmRfcG9ydCh2b2lkKQogewogCXN0cnVjdCBzZXJpbyAqc2VyaW87CiAJc3RydWN0IGk4MDQyX3BvcnQgKnBvcnQgPSAmaTgwNDJfcG9ydHNbSTgwNDJfS0JEX1BPUlRfTk9dOwpAQCAtMTAzMSw2ICsxMDczLDcgQEAKIAlzZXJpby0+d3JpdGUJCT0gaTgwNDJfZHVtYmtiZCA/IE5VTEwgOiBpODA0Ml9rYmRfd3JpdGU7CiAJc2VyaW8tPnN0YXJ0CQk9IGk4MDQyX3N0YXJ0OwogCXNlcmlvLT5zdG9wCQk9IGk4MDQyX3N0b3A7CisJc2VyaW8tPmNsb3NlCQk9IGk4MDQyX3BvcnRfY2xvc2U7CiAJc2VyaW8tPnBvcnRfZGF0YQk9IHBvcnQ7CiAJc2VyaW8tPmRldi5wYXJlbnQJPSAmaTgwNDJfcGxhdGZvcm1fZGV2aWNlLT5kZXY7CiAJc3RybGNweShzZXJpby0+bmFtZSwgImk4MDQyIEtCRCBwb3J0Iiwgc2l6ZW9mKHNlcmlvLT5uYW1lKSk7CkBAIC0xMDQyLDcgKzEwODUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpODA0Ml9jcmVhdGVfYXV4X3BvcnQoaW50IGlkeCkKK3N0YXRpYyBpbnQgX19pbml0IGk4MDQyX2NyZWF0ZV9hdXhfcG9ydChpbnQgaWR4KQogewogCXN0cnVjdCBzZXJpbyAqc2VyaW87CiAJaW50IHBvcnRfbm8gPSBpZHggPCAwID8gSTgwNDJfQVVYX1BPUlRfTk8gOiBJODA0Ml9NVVhfUE9SVF9OTyArIGlkeDsKQEAgLTEwNjEsNiArMTEwNCw3IEBACiAJaWYgKGlkeCA8IDApIHsKIAkJc3RybGNweShzZXJpby0+bmFtZSwgImk4MDQyIEFVWCBwb3J0Iiwgc2l6ZW9mKHNlcmlvLT5uYW1lKSk7CiAJCXN0cmxjcHkoc2VyaW8tPnBoeXMsIEk4MDQyX0FVWF9QSFlTX0RFU0MsIHNpemVvZihzZXJpby0+cGh5cykpOworCQlzZXJpby0+Y2xvc2UgPSBpODA0Ml9wb3J0X2Nsb3NlOwogCX0gZWxzZSB7CiAJCXNucHJpbnRmKHNlcmlvLT5uYW1lLCBzaXplb2Yoc2VyaW8tPm5hbWUpLCAiaTgwNDIgQVVYJWQgcG9ydCIsIGlkeCk7CiAJCXNucHJpbnRmKHNlcmlvLT5waHlzLCBzaXplb2Yoc2VyaW8tPnBoeXMpLCBJODA0Ml9NVVhfUEhZU19ERVNDLCBpZHggKyAxKTsKQEAgLTEwNzMsMTMgKzExMTcsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGk4MDQyX2ZyZWVfa2JkX3BvcnQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBpODA0Ml9mcmVlX2tiZF9wb3J0KHZvaWQpCiB7CiAJa2ZyZWUoaTgwNDJfcG9ydHNbSTgwNDJfS0JEX1BPUlRfTk9dLnNlcmlvKTsKIAlpODA0Ml9wb3J0c1tJODA0Ml9LQkRfUE9SVF9OT10uc2VyaW8gPSBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgaTgwNDJfZnJlZV9hdXhfcG9ydHModm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBpODA0Ml9mcmVlX2F1eF9wb3J0cyh2b2lkKQogewogCWludCBpOwogCkBAIC0xMDg5LDcgKzExMzMsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGk4MDQyX3JlZ2lzdGVyX3BvcnRzKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgaTgwNDJfcmVnaXN0ZXJfcG9ydHModm9pZCkKIHsKIAlpbnQgaTsKIApAQCAtMTEyNCwxMCArMTE2OCwxMCBAQAogCWlmIChpODA0Ml9rYmRfaXJxX3JlZ2lzdGVyZWQpCiAJCWZyZWVfaXJxKEk4MDQyX0tCRF9JUlEsIGk4MDQyX3BsYXRmb3JtX2RldmljZSk7CiAKLQlpODA0Ml9hdXhfaXJxX3JlZ2lzdGVyZWQgPSBpODA0Ml9rYmRfaXJxX3JlZ2lzdGVyZWQgPSAwOworCWk4MDQyX2F1eF9pcnFfcmVnaXN0ZXJlZCA9IGk4MDQyX2tiZF9pcnFfcmVnaXN0ZXJlZCA9IGZhbHNlOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpODA0Ml9zZXR1cF9hdXgodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGk4MDQyX3NldHVwX2F1eCh2b2lkKQogewogCWludCAoKmF1eF9lbmFibGUpKHZvaWQpOwogCWludCBlcnJvcjsKQEAgLTExNTgsNyArMTIwMiw3IEBACiAJaWYgKGF1eF9lbmFibGUoKSkKIAkJZ290byBlcnJfZnJlZV9pcnE7CiAKLQlpODA0Ml9hdXhfaXJxX3JlZ2lzdGVyZWQgPSAxOworCWk4MDQyX2F1eF9pcnFfcmVnaXN0ZXJlZCA9IHRydWU7CiAJcmV0dXJuIDA7CiAKICBlcnJfZnJlZV9pcnE6CkBAIC0xMTY4LDcgKzEyMTIsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgaTgwNDJfc2V0dXBfa2JkKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpODA0Ml9zZXR1cF9rYmQodm9pZCkKIHsKIAlpbnQgZXJyb3I7CiAKQEAgLTExODUsNyArMTIyOSw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGVycl9mcmVlX2lycTsKIAotCWk4MDQyX2tiZF9pcnFfcmVnaXN0ZXJlZCA9IDE7CisJaTgwNDJfa2JkX2lycV9yZWdpc3RlcmVkID0gdHJ1ZTsKIAlyZXR1cm4gMDsKIAogIGVycl9mcmVlX2lycToKQEAgLTExOTUsNyArMTIzOSw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpODA0Ml9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBpODA0Ml9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IGVycm9yOwogCkBAIC0xMjUxLDE0ICsxMjk1LDEyIEBACiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gImk4MDQyIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZpODA0Ml9wbV9vcHMsCisjZW5kaWYKIAl9LAotCS5wcm9iZQkJPSBpODA0Ml9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGk4MDQyX3JlbW92ZSksCiAJLnNodXRkb3duCT0gaTgwNDJfc2h1dGRvd24sCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSBpODA0Ml9zdXNwZW5kLAotCS5yZXN1bWUJCT0gaTgwNDJfcmVzdW1lLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpODA0Ml9pbml0KHZvaWQpCkBAIC0xMjc1LDI4ICsxMzE3LDI4IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfcGxhdGZvcm1fZXhpdDsKIAotCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaTgwNDJfZHJpdmVyKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9wbGF0Zm9ybV9leGl0OwotCiAJaTgwNDJfcGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJpODA0MiIsIC0xKTsKIAlpZiAoIWk4MDQyX3BsYXRmb3JtX2RldmljZSkgewogCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl91bnJlZ2lzdGVyX2RyaXZlcjsKKwkJZ290byBlcnJfcGxhdGZvcm1fZXhpdDsKIAl9CiAKIAllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGk4MDQyX3BsYXRmb3JtX2RldmljZSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV9kZXZpY2U7CiAKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmk4MDQyX2RyaXZlciwgaTgwNDJfcHJvYmUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2RlbF9kZXZpY2U7CisKIAlwYW5pY19ibGluayA9IGk4MDQyX3BhbmljX2JsaW5rOwogCiAJcmV0dXJuIDA7CiAKKyBlcnJfZGVsX2RldmljZToKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKGk4MDQyX3BsYXRmb3JtX2RldmljZSk7CiAgZXJyX2ZyZWVfZGV2aWNlOgogCXBsYXRmb3JtX2RldmljZV9wdXQoaTgwNDJfcGxhdGZvcm1fZGV2aWNlKTsKLSBlcnJfdW5yZWdpc3Rlcl9kcml2ZXI6Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7CiAgZXJyX3BsYXRmb3JtX2V4aXQ6CiAJaTgwNDJfcGxhdGZvcm1fZXhpdCgpOwogCkBAIC0xMzA1LDggKzEzNDcsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaTgwNDJfZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGk4MDQyX3BsYXRmb3JtX2RldmljZSk7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaTgwNDJfcGxhdGZvcm1fZGV2aWNlKTsKIAlpODA0Ml9wbGF0Zm9ybV9leGl0KCk7CiAKIAlwYW5pY19ibGluayA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYwppbmRleCBiZTViYmJiLi4zYTk1YjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogICogcHMyX2NvbW1hbmQoKSBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBhIHByb2Nlc3MgY29udGV4dAogICovCiAKLWludCBwczJfY29tbWFuZChzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHVuc2lnbmVkIGNoYXIgKnBhcmFtLCBpbnQgY29tbWFuZCkKK2ludCBfX3BzMl9jb21tYW5kKHN0cnVjdCBwczJkZXYgKnBzMmRldiwgdW5zaWduZWQgY2hhciAqcGFyYW0sIGludCBjb21tYW5kKQogewogCWludCB0aW1lb3V0OwogCWludCBzZW5kID0gKGNvbW1hbmQgPj4gMTIpICYgMHhmOwpAQCAtMTc5LDggKzE3OSw2IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQltdXRleF9sb2NrKCZwczJkZXYtPmNtZF9tdXRleCk7Ci0KIAlzZXJpb19wYXVzZV9yeChwczJkZXYtPnNlcmlvKTsKIAlwczJkZXYtPmZsYWdzID0gY29tbWFuZCA9PSBQUzJfQ01EX0dFVElEID8gUFMyX0ZMQUdfV0FJVElEIDogMDsKIAlwczJkZXYtPmNtZGNudCA9IHJlY2VpdmU7CkBAIC0yMzEsNyArMjI5LDE4IEBACiAJcHMyZGV2LT5mbGFncyA9IDA7CiAJc2VyaW9fY29udGludWVfcngocHMyZGV2LT5zZXJpbyk7CiAKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MKF9fcHMyX2NvbW1hbmQpOworCitpbnQgcHMyX2NvbW1hbmQoc3RydWN0IHBzMmRldiAqcHMyZGV2LCB1bnNpZ25lZCBjaGFyICpwYXJhbSwgaW50IGNvbW1hbmQpCit7CisJaW50IHJjOworCisJbXV0ZXhfbG9jaygmcHMyZGV2LT5jbWRfbXV0ZXgpOworCXJjID0gX19wczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBjb21tYW5kKTsKIAltdXRleF91bmxvY2soJnBzMmRldi0+Y21kX211dGV4KTsKKwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0wocHMyX2NvbW1hbmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCmluZGV4IGQ2NmY0OTQuLjAyMzZmMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKQEAgLTkzMSwxNSArOTMxLDExIEBACiAjZW5kaWYgLyogQ09ORklHX0hPVFBMVUcgKi8KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzZXJpb19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzZXJpb19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2VyaW8gKnNlcmlvID0gdG9fc2VyaW9fcG9ydChkZXYpOwogCi0JaWYgKCFzZXJpby0+c3VzcGVuZGVkICYmIHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpCi0JCXNlcmlvX2NsZWFudXAoc2VyaW8pOwotCi0Jc2VyaW8tPnN1c3BlbmRlZCA9IHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQgfHwKLQkJCSAgIHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRTsKKwlzZXJpb19jbGVhbnVwKHNlcmlvKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTUyLDEzICs5NDgsMTcgQEAKIAkgKiBEcml2ZXIgcmVjb25uZWN0IGNhbiB0YWtlIGEgd2hpbGUsIHNvIGJldHRlciBsZXQga3NlcmlvZAogCSAqIGRlYWwgd2l0aCBpdC4KIAkgKi8KLQlpZiAoc2VyaW8tPnN1c3BlbmRlZCkgewotCQlzZXJpby0+c3VzcGVuZGVkID0gZmFsc2U7Ci0JCXNlcmlvX3F1ZXVlX2V2ZW50KHNlcmlvLCBOVUxMLCBTRVJJT19SRUNPTk5FQ1RfUE9SVCk7Ci0JfQorCXNlcmlvX3F1ZXVlX2V2ZW50KHNlcmlvLCBOVUxMLCBTRVJJT19SRUNPTk5FQ1RfUE9SVCk7CiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHNlcmlvX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHNlcmlvX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzZXJpb19yZXN1bWUsCisJLnBvd2Vyb2ZmCT0gc2VyaW9fc3VzcGVuZCwKKwkucmVzdG9yZQk9IHNlcmlvX3Jlc3VtZSwKK307CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIC8qIGNhbGxlZCBmcm9tIHNlcmlvX2RyaXZlci0+Y29ubmVjdC9kaXNjb25uZWN0IG1ldGhvZHMgdW5kZXIgc2VyaW9fbXV0ZXggKi8KQEAgLTEwMTUsOCArMTAxNSw3IEBACiAJLnJlbW92ZQkJPSBzZXJpb19kcml2ZXJfcmVtb3ZlLAogCS5zaHV0ZG93bgk9IHNlcmlvX3NodXRkb3duLAogI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0gc2VyaW9fc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNlcmlvX3Jlc3VtZSwKKwkucG0JCT0gJnNlcmlvX3BtX29wcywKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCmluZGV4IDcyZTI3MTIuLjg3YTFhZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKQEAgLTM2NiwxMSArMzY2LDExIEBACiAJICBiZSBjYWxsZWQgYXRtZWwtd205N3h4LgogCiBjb25maWcgVE9VQ0hTQ1JFRU5fV005N1hYX01BSU5TVE9ORQotCXRyaXN0YXRlICJXTTk3eHggTWFpbnN0b25lIGFjY2VsZXJhdGVkIHRvdWNoIgorCXRyaXN0YXRlICJXTTk3eHggTWFpbnN0b25lL1BhbG0gYWNjZWxlcmF0ZWQgdG91Y2giCiAJZGVwZW5kcyBvbiBUT1VDSFNDUkVFTl9XTTk3WFggJiYgQVJDSF9QWEEKIAloZWxwCiAJICBTYXkgWSBoZXJlIGZvciBzdXBwb3J0IGZvciBzdHJlYW1pbmcgbW9kZSB3aXRoIFdNOTd4eCB0b3VjaHNjcmVlbnMKLQkgIG9uIE1haW5zdG9uZSBzeXN0ZW1zLgorCSAgb24gTWFpbnN0b25lLCBQYWxtIFR1bmdzdGVuIFQ1LCBUWCBhbmQgTGlmZURyaXZlIHN5c3RlbXMuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKQEAgLTQwNiw2ICs0MDYsNyBAQAogCSAgLSBJUlRPVUNIU1lTVEVNUy9VTklUT1AKIAkgIC0gSWRlYWxURUsgVVJUQzEwMDAKIAkgIC0gR29Ub3AgU3VwZXJfUTIvR29nb1Blbi9QZW5Qb3dlciB0YWJsZXRzCisJICAtIEpBU1RFQyBVU0IgVG91Y2ggQ29udHJvbGxlci9EaWdpVGVjaCBEVFItMDJVCiAKIAkgIEhhdmUgYSBsb29rIGF0IDxodHRwOi8vbGludXguY2hhcHRlcjcuY2gvdG91Y2hraXQvPiBmb3IKIAkgIGEgdXNhZ2UgZGVzY3JpcHRpb24gYW5kIHRoZSByZXF1aXJlZCB1c2VyLXNwYWNlIHN0dWZmLgpAQCAtNDY4LDYgKzQ2OSwxNiBAQAogCWJvb2wgIkdvVG9wIFN1cGVyX1EyL0dvZ29QZW4vUGVuUG93ZXIgdGFibGV0IGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURQogCitjb25maWcgVE9VQ0hTQ1JFRU5fVVNCX0pBU1RFQworCWRlZmF1bHQgeQorCWJvb2wgIkpBU1RFQy9EaWdpVGVjaCBEVFItMDJVIFVTQiB0b3VjaCBjb250cm9sbGVyIGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURQorCitjb25maWcgVE9VQ0hTQ1JFRU5fVVNCX0UySQorCWRlZmF1bHQgeQorCWJvb2wgImUyaSBUb3VjaHNjcmVlbiBjb250cm9sbGVyIChlLmcuIGZyb20gTWltbyA3NDApIgorCWRlcGVuZHMgb24gVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURQorCiBjb25maWcgVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMwogCXRyaXN0YXRlICJTYWhhcmEgVG91Y2hJVC0yMTMgdG91Y2hzY3JlZW4iCiAJc2VsZWN0IFNFUklPCkBAIC00OTIsNiArNTAzLDcgQEAKIAogY29uZmlnIFRPVUNIU0NSRUVOX1c5MFg5MDAKIAl0cmlzdGF0ZSAiVzkwUDkxMCB0b3VjaHNjcmVlbiBkcml2ZXIiCisJZGVwZW5kcyBvbiBIQVZFX0NMSwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBXOTBQOTEwIGJhc2VkIHRvdWNoc2NyZWVuLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX3RzYWRjYy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF90c2FkY2MuYwppbmRleCAwNTU5NjllLi45YzdmY2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX3RzYWRjYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfdHNhZGNjLmMKQEAgLTIwNCwxNCArMjA0LDE0IEBACiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCX0KIAotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAogCQkJCSJhdG1lbCB0c2FkY2MgcmVncyIpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlc291cmNlcyBpcyB1bmF2YWlsYWJsZS5cbiIpOwogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCX0KIAotCXRzY19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwl0c2NfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXRzY19iYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzLlxuIik7CiAJCWVyciA9IC1FTk9NRU07CkBAIC0yODYsNyArMjg2LDcgQEAKIGVycl91bm1hcF9yZWdzOgogCWlvdW5tYXAodHNjX2Jhc2UpOwogZXJyX3JlbGVhc2VfbWVtOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIGVycl9mcmVlX2RldjoKIAlpbnB1dF9mcmVlX2RldmljZSh0c19kZXYtPmlucHV0KTsKIGVycl9mcmVlX21lbToKQEAgLTMwNSw3ICszMDUsNyBAQAogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpb3VubWFwKHRzY19iYXNlKTsKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAKIAljbGtfZGlzYWJsZSh0c19kZXYtPmNsayk7CiAJY2xrX3B1dCh0c19kZXYtPmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2VldGlfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWV0aV90cy5jCmluZGV4IDNhYjkyMjIuLjkwMjliZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWV0aV90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWV0aV90cy5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvZWV0aV90cy5oPgogCiBzdGF0aWMgaW50IGZsaXBfeDsKIG1vZHVsZV9wYXJhbShmbGlwX3gsIGJvb2wsIDA2NDQpOwpAQCAtNDYsNyArNDcsNyBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXN0cnVjdCBtdXRleCBtdXRleDsKLQlpbnQgaXJxOworCWludCBpcnEsIGlycV9hY3RpdmVfaGlnaDsKIH07CiAKICNkZWZpbmUgRUVUSV9UU19CSVRERVBUSAkoMTEpCkBAIC01OCw2ICs1OSwxMSBAQAogI2RlZmluZSBSRVBPUlRfQklUX0hBU19QUkVTU1VSRQkoMSA8PCA2KQogI2RlZmluZSBSRVBPUlRfUkVTX0JJVFModikJKCgodikgPj4gMSkgKyBFRVRJX1RTX0JJVERFUFRIKQogCitzdGF0aWMgaW5saW5lIGludCBlZXRpX3RzX2lycV9hY3RpdmUoc3RydWN0IGVldGlfdHNfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoaXJxX3RvX2dwaW8ocHJpdi0+aXJxKSkgPT0gcHJpdi0+aXJxX2FjdGl2ZV9oaWdoOworfQorCiBzdGF0aWMgdm9pZCBlZXRpX3RzX3JlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCWNoYXIgYnVmWzZdOwpAQCAtNjcsNyArNzMsNyBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCi0Jd2hpbGUgKCFncGlvX2dldF92YWx1ZShpcnFfdG9fZ3Bpbyhwcml2LT5pcnEpKSAmJiAtLXRvKQorCXdoaWxlIChlZXRpX3RzX2lycV9hY3RpdmUocHJpdikgJiYgLS10bykKIAkJaTJjX21hc3Rlcl9yZWN2KHByaXYtPmNsaWVudCwgYnVmLCBzaXplb2YoYnVmKSk7CiAKIAlpZiAoIXRvKSB7CkBAIC0xNDAsOCArMTQ2LDEwIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBlZXRpX3RzX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkJICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkcCkKIHsKKwlzdHJ1Y3QgZWV0aV90c19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgZWV0aV90c19wcml2ICpwcml2OwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCXVuc2lnbmVkIGludCBpcnFfZmxhZ3M7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKIAkvKiBJbiBjb250cmFzdCB0byB3aGF0J3MgZGVzY3JpYmVkIGluIHRoZSBkYXRhc2hlZXQsIHRoZXJlIHNlZW1zCkBAIC0xODAsNiArMTg4LDE0IEBACiAJcHJpdi0+aW5wdXQgPSBpbnB1dDsKIAlwcml2LT5pcnEgPSBjbGllbnQtPmlycTsKIAorCXBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChwZGF0YSkKKwkJcHJpdi0+aXJxX2FjdGl2ZV9oaWdoID0gcGRhdGEtPmlycV9hY3RpdmVfaGlnaDsKKworCWlycV9mbGFncyA9IHByaXYtPmlycV9hY3RpdmVfaGlnaCA/CisJCUlSUUZfVFJJR0dFUl9SSVNJTkcgOiBJUlFGX1RSSUdHRVJfRkFMTElORzsKKwogCUlOSVRfV09SSygmcHJpdi0+d29yaywgZWV0aV90c19yZWFkKTsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwcml2KTsKIAlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dCwgcHJpdik7CkBAIC0xODgsNyArMjA0LDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycjE7CiAKLQllcnIgPSByZXF1ZXN0X2lycShwcml2LT5pcnEsIGVldGlfdHNfaXNyLCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwllcnIgPSByZXF1ZXN0X2lycShwcml2LT5pcnEsIGVldGlfdHNfaXNyLCBpcnFfZmxhZ3MsCiAJCQkgIGNsaWVudC0+bmFtZSwgcHJpdik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IHRvdWNoc2NyZWVuIElSUS5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9oMzYwMF90c19pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9oMzYwMF90c19pbnB1dC5jCmluZGV4IDRkMzEzOWUuLmI0ZDdmNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaDM2MDBfdHNfaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2gzNjAwX3RzX2lucHV0LmMKQEAgLTE0OCw5ICsxNDgsMTAgQEAKIAlzdHJ1Y3QgaDM2MDBfZGV2ICp0cyA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CiAKIAkvKiBNdXN0IGJlIGluIHRoaXMgb3JkZXIgKi8KLQl0cy0+c2VyaW8tPndyaXRlKHRzLT5zZXJpbywgMSk7Ci0JdHMtPnNlcmlvLT53cml0ZSh0cy0+c2VyaW8sIHB3cik7Ci0JdHMtPnNlcmlvLT53cml0ZSh0cy0+c2VyaW8sIGJyaWdodG5lc3MpOworCXNlcmlvX3dyaXRlKHRzLT5zZXJpbywgMSk7CisJc2VyaW9fd3JpdGUodHMtPnNlcmlvLCBwd3IpOworCXNlcmlvX3dyaXRlKHRzLT5zZXJpbywgYnJpZ2h0bmVzcyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjYyLDcgKzI2Myw3IEBACiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAkJY2FzZSBFVl9MRUQ6IHsKLQkJLy8JdHMtPnNlcmlvLT53cml0ZSh0cy0+c2VyaW8sIFNPTUVfQ01EKTsKKwkJLy8Jc2VyaW9fd3JpdGUodHMtPnNlcmlvLCBTT01FX0NNRCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWFpbnN0b25lLXdtOTd4eC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMKaW5kZXggNGNjMDQ3YS4uOGZjM2IwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMKQEAgLTMxLDkgKzMxLDExIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvd205N3h4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKICNpbmNsdWRlIDxtYWNoL3JlZ3MtYWM5Ny5oPgogCi0jZGVmaW5lIFZFUlNJT04JCSIwLjEzIgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKIHN0cnVjdCBjb250aW51b3VzIHsKIAl1MTYgaWQ7ICAgIC8qIGNvZGVjIGlkICovCkBAIC02Miw2ICs2NCw3IEBACiAvKiBjb250aW51b3VzIHNwZWVkIGluZGV4ICovCiBzdGF0aWMgaW50IHNwX2lkeDsKIHN0YXRpYyB1MTYgbGFzdCwgdHJpZXM7CitzdGF0aWMgaW50IGlycTsKIAogLyoKICAqIFBlbiBzYW1wbGluZyBmcmVxdWVuY3kgKEh6KSBpbiBjb250aW51b3VzIG1vZGUuCkBAIC0xNzEsNyArMTc0LDcgQEAKIAogc3RhdGljIGludCB3bTk3eHhfYWNjX3N0YXJ0dXAoc3RydWN0IHdtOTd4eCAqd20pCiB7Ci0JaW50IGlkeCA9IDA7CisJaW50IGlkeCA9IDAsIHJldCA9IDA7CiAKIAkvKiBjaGVjayB3ZSBoYXZlIGEgY29kZWMgKi8KIAlpZiAod20tPmFjOTcgPT0gTlVMTCkKQEAgLTE5MSwxOCArMTk0LDQwIEBACiAJCSAibWFpbnN0b25lIGFjY2VsZXJhdGVkIHRvdWNoc2NyZWVuIGRyaXZlciwgJWQgc2FtcGxlcy9zZWNcbiIsCiAJCSBjaW5mb1tzcF9pZHhdLnNwZWVkKTsKIAorCS8qIElSUSBkcml2ZW4gdG91Y2hzY3JlZW4gaXMgdXNlZCBvbiBQYWxtIGhhcmR3YXJlICovCisJaWYgKG1hY2hpbmVfaXNfcGFsbXQ1KCkgfHwgbWFjaGluZV9pc19wYWxtdHgoKSB8fCBtYWNoaW5lX2lzX3BhbG1sZCgpKSB7CisJCXBlbl9pbnQgPSAxOworCQlpcnEgPSAyNzsKKwkJLyogVGhlcmUgaXMgc29tZSBvYnNjdXJlIG11dGFudCBvZiBXTTk3MTIgaW50ZXJicmVkIHdpdGggV005NzEzCisJCSAqIHVzZWQgb24gUGFsbSBIVyAqLworCQl3bS0+dmFyaWFudCA9IFdNOTd4eF9XTTE2MTM7CisJfSBlbHNlIGlmIChtYWNoaW5lX2lzX21haW5zdG9uZSgpICYmIHBlbl9pbnQpCisJCWlycSA9IDQ7CisKKwlpZiAoaXJxKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChpcnEsICJUb3VjaHNjcmVlbiBJUlEiKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCisJCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KGlycSk7CisJCWlmIChyZXQpIHsKKwkJCWdwaW9fZnJlZShpcnEpOworCQkJZ290byBvdXQ7CisJCX0KKworCQl3bS0+cGVuX2lycSA9IGdwaW9fdG9faXJxKGlycSk7CisJCXNldF9pcnFfdHlwZSh3bS0+cGVuX2lycSwgSVJRX1RZUEVfRURHRV9CT1RIKTsKKwl9IGVsc2UgLyogcGVuIGlycSBub3Qgc3VwcG9ydGVkICovCisJCXBlbl9pbnQgPSAwOworCiAJLyogY29kZWMgc3BlY2lmaWMgaXJxIGNvbmZpZyAqLwogCWlmIChwZW5faW50KSB7CiAJCXN3aXRjaCAod20tPmlkKSB7CiAJCWNhc2UgV005NzA1X0lEMjoKLQkJCXdtLT5wZW5faXJxID0gSVJRX0dQSU8oNCk7Ci0JCQlzZXRfaXJxX3R5cGUoSVJRX0dQSU8oNCksIElSUV9UWVBFX0VER0VfQk9USCk7CiAJCQlicmVhazsKIAkJY2FzZSBXTTk3MTJfSUQyOgogCQljYXNlIFdNOTcxM19JRDI6Ci0JCQkvKiBlbmFibGUgcGVuIGRvd24gaW50ZXJydXB0ICovCiAJCQkvKiB1c2UgUEVOX0RPV04gR1BJTyAxMyB0byBhc3NlcnQgSVJRIG9uIEdQSU8gbGluZSAyICovCi0JCQl3bS0+cGVuX2lycSA9IE1BSU5TVE9ORV9BQzk3X0lSUTsKIAkJCXdtOTd4eF9jb25maWdfZ3Bpbyh3bSwgV005N1hYX0dQSU9fMTMsIFdNOTdYWF9HUElPX0lOLAogCQkJCQkgICBXTTk3WFhfR1BJT19QT0xfSElHSCwKIAkJCQkJICAgV005N1hYX0dQSU9fU1RJQ0tZLApAQCAtMjIwLDIzICsyNDUsMTcgQEAKIAkJfQogCX0KIAotCXJldHVybiAwOworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHdtOTd4eF9hY2Nfc2h1dGRvd24oc3RydWN0IHdtOTd4eCAqd20pCiB7CiAJLyogY29kZWMgc3BlY2lmaWMgZGVjb25maWcgKi8KIAlpZiAocGVuX2ludCkgewotCQlzd2l0Y2ggKHdtLT5pZCAmIDB4ZmZmZikgewotCQljYXNlIFdNOTcwNV9JRDI6Ci0JCQl3bS0+cGVuX2lycSA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBXTTk3MTJfSUQyOgotCQljYXNlIFdNOTcxM19JRDI6Ci0JCQkvKiBkaXNhYmxlIGludGVycnVwdCAqLwotCQkJd20tPnBlbl9pcnEgPSAwOwotCQkJYnJlYWs7Ci0JCX0KKwkJaWYgKGlycSkKKwkJCWdwaW9fZnJlZShpcnEpOworCQl3bS0+cGVuX2lycSA9IDA7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RzYzIwMDcuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdHNjMjAwNy5jCmluZGV4IDg4MGY1OGMuLjdlZjBkMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdHNjMjAwNy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdHNjMjAwNy5jCkBAIC0yMSwxNSArMjEsMTQgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90c2MyMDA3Lmg+CiAKLSNkZWZpbmUgVFNfUE9MTF9ERUxBWQkoMTAgKiAxMDAwKQkvKiBucyBkZWxheSBiZWZvcmUgdGhlIGZpcnN0IHNhbXBsZSAqLwotI2RlZmluZSBUU19QT0xMX1BFUklPRAkoNSAqIDEwMDApCS8qIG5zIGRlbGF5IGJldHdlZW4gc2FtcGxlcyAqLworI2RlZmluZSBUU19QT0xMX0RFTEFZCQkJMSAvKiBtcyBkZWxheSBiZXR3ZWVuIHNhbXBsZXMgKi8KKyNkZWZpbmUgVFNfUE9MTF9QRVJJT0QJCQkxIC8qIG1zIGRlbGF5IGJldHdlZW4gc2FtcGxlcyAqLwogCiAjZGVmaW5lIFRTQzIwMDdfTUVBU1VSRV9URU1QMAkJKDB4MCA8PCA0KQogI2RlZmluZSBUU0MyMDA3X01FQVNVUkVfQVVYCQkoMHgyIDw8IDQpCkBAIC03MCwxNyArNjksMTQgQEAKIHN0cnVjdCB0c2MyMDA3IHsKIAlzdHJ1Y3QgaW5wdXRfZGV2CSppbnB1dDsKIAljaGFyCQkJcGh5c1szMl07Ci0Jc3RydWN0IGhydGltZXIJCXRpbWVyOwotCXN0cnVjdCB0c19ldmVudAkJdGM7CisJc3RydWN0IGRlbGF5ZWRfd29yawl3b3JrOwogCiAJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKIAotCXNwaW5sb2NrX3QJCWxvY2s7Ci0KIAl1MTYJCQltb2RlbDsKIAl1MTYJCQl4X3BsYXRlX29obXM7CiAKLQl1bnNpZ25lZAkJcGVuZG93bjsKKwlib29sCQkJcGVuZG93bjsKIAlpbnQJCQlpcnE7CiAKIAlpbnQJCQkoKmdldF9wZW5kb3duX3N0YXRlKSh2b2lkKTsKQEAgLTEwOSw1MiArMTA1LDk2IEBACiAJcmV0dXJuIHZhbDsKIH0KIAotc3RhdGljIHZvaWQgdHNjMjAwN19zZW5kX2V2ZW50KHZvaWQgKnRzYykKK3N0YXRpYyB2b2lkIHRzYzIwMDdfcmVhZF92YWx1ZXMoc3RydWN0IHRzYzIwMDcgKnRzYywgc3RydWN0IHRzX2V2ZW50ICp0YykKIHsKLQlzdHJ1Y3QgdHNjMjAwNwkqdHMgPSB0c2M7Ci0JdTMyCQlydDsKLQl1MTYJCXgsIHksIHoxLCB6MjsKKwkvKiB5LSBzdGlsbCBvbjsgdHVybiBvbiBvbmx5IHkrIChhbmQgQURDKSAqLworCXRjLT55ID0gdHNjMjAwN194ZmVyKHRzYywgUkVBRF9ZKTsKIAotCXggPSB0cy0+dGMueDsKLQl5ID0gdHMtPnRjLnk7Ci0JejEgPSB0cy0+dGMuejE7Ci0JejIgPSB0cy0+dGMuejI7CisJLyogdHVybiB5LSBvZmYsIHgrIG9uLCB0aGVuIGxlYXZlIGluIGxvd3Bvd2VyICovCisJdGMtPnggPSB0c2MyMDA3X3hmZXIodHNjLCBSRUFEX1gpOworCisJLyogdHVybiB5KyBvZmYsIHgtIG9uOyB3ZSdsbCB1c2UgZm9ybXVsYSAjMSAqLworCXRjLT56MSA9IHRzYzIwMDdfeGZlcih0c2MsIFJFQURfWjEpOworCXRjLT56MiA9IHRzYzIwMDdfeGZlcih0c2MsIFJFQURfWjIpOworCisJLyogUHJlcGFyZSBmb3IgbmV4dCB0b3VjaCByZWFkaW5nIC0gcG93ZXIgZG93biBBREMsIGVuYWJsZSBQRU5JUlEgKi8KKwl0c2MyMDA3X3hmZXIodHNjLCBQV1JET1dOKTsKK30KKworc3RhdGljIHUzMiB0c2MyMDA3X2NhbGN1bGF0ZV9wcmVzc3VyZShzdHJ1Y3QgdHNjMjAwNyAqdHNjLCBzdHJ1Y3QgdHNfZXZlbnQgKnRjKQoreworCXUzMiBydCA9IDA7CiAKIAkvKiByYW5nZSBmaWx0ZXJpbmcgKi8KLQlpZiAoeCA9PSBNQVhfMTJCSVQpCi0JCXggPSAwOworCWlmICh0Yy0+eCA9PSBNQVhfMTJCSVQpCisJCXRjLT54ID0gMDsKIAotCWlmIChsaWtlbHkoeCAmJiB6MSkpIHsKKwlpZiAobGlrZWx5KHRjLT54ICYmIHRjLT56MSkpIHsKIAkJLyogY29tcHV0ZSB0b3VjaCBwcmVzc3VyZSByZXNpc3RhbmNlIHVzaW5nIGVxdWF0aW9uICMxICovCi0JCXJ0ID0gejI7Ci0JCXJ0IC09IHoxOwotCQlydCAqPSB4OwotCQlydCAqPSB0cy0+eF9wbGF0ZV9vaG1zOwotCQlydCAvPSB6MTsKKwkJcnQgPSB0Yy0+ejIgLSB0Yy0+ejE7CisJCXJ0ICo9IHRjLT54OworCQlydCAqPSB0c2MtPnhfcGxhdGVfb2htczsKKwkJcnQgLz0gdGMtPnoxOwogCQlydCA9IChydCArIDIwNDcpID4+IDEyOwotCX0gZWxzZQotCQlydCA9IDA7Ci0KLQkvKiBTYW1wbGUgZm91bmQgaW5jb25zaXN0ZW50IGJ5IGRlYm91bmNpbmcgb3IgcHJlc3N1cmUgaXMgYmV5b25kCi0JICogdGhlIG1heGltdW0uIERvbid0IHJlcG9ydCBpdCB0byB1c2VyIHNwYWNlLCByZXBlYXQgYXQgbGVhc3QKLQkgKiBvbmNlIG1vcmUgdGhlIG1lYXN1cmVtZW50Ci0JICovCi0JaWYgKHJ0ID4gTUFYXzEyQklUKSB7Ci0JCWRldl9kYmcoJnRzLT5jbGllbnQtPmRldiwgImlnbm9yZWQgcHJlc3N1cmUgJWRcbiIsIHJ0KTsKLQotCQlocnRpbWVyX3N0YXJ0KCZ0cy0+dGltZXIsIGt0aW1lX3NldCgwLCBUU19QT0xMX1BFUklPRCksCi0JCQkgICAgICBIUlRJTUVSX01PREVfUkVMKTsKLQkJcmV0dXJuOwogCX0KIAotCS8qIE5PVEU6IFdlIGNhbid0IHJlbHkgb24gdGhlIHByZXNzdXJlIHRvIGRldGVybWluZSB0aGUgcGVuIGRvd24KLQkgKiBzdGF0ZSwgZXZlbiB0aGlzIGNvbnRyb2xsZXIgaGFzIGEgcHJlc3N1cmUgc2Vuc29yLiAgVGhlIHByZXNzdXJlCi0JICogdmFsdWUgY2FuIGZsdWN0dWF0ZSBmb3IgcXVpdGUgYSB3aGlsZSBhZnRlciBsaWZ0aW5nIHRoZSBwZW4gYW5kCi0JICogaW4gc29tZSBjYXNlcyBtYXkgbm90IGV2ZW4gc2V0dGxlIGF0IHRoZSBleHBlY3RlZCB2YWx1ZS4KKwlyZXR1cm4gcnQ7Cit9CisKK3N0YXRpYyB2b2lkIHRzYzIwMDdfc2VuZF91cF9ldmVudChzdHJ1Y3QgdHNjMjAwNyAqdHNjKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gdHNjLT5pbnB1dDsKKworCWRldl9kYmcoJnRzYy0+Y2xpZW50LT5kZXYsICJVUFxuIik7CisKKwlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsIDApOworCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19QUkVTU1VSRSwgMCk7CisJaW5wdXRfc3luYyhpbnB1dCk7Cit9CisKK3N0YXRpYyB2b2lkIHRzYzIwMDdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHRzYzIwMDcgKnRzID0KKwkJY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwgc3RydWN0IHRzYzIwMDcsIHdvcmspOworCXN0cnVjdCB0c19ldmVudCB0YzsKKwl1MzIgcnQ7CisKKwkvKgorCSAqIE5PVEU6IFdlIGNhbid0IHJlbHkgb24gdGhlIHByZXNzdXJlIHRvIGRldGVybWluZSB0aGUgcGVuIGRvd24KKwkgKiBzdGF0ZSwgZXZlbiB0aG91Z2ggdGhpcyBjb250cm9sbGVyIGhhcyBhIHByZXNzdXJlIHNlbnNvci4KKwkgKiBUaGUgcHJlc3N1cmUgdmFsdWUgY2FuIGZsdWN0dWF0ZSBmb3IgcXVpdGUgYSB3aGlsZSBhZnRlcgorCSAqIGxpZnRpbmcgdGhlIHBlbiBhbmQgaW4gc29tZSBjYXNlcyBtYXkgbm90IGV2ZW4gc2V0dGxlIGF0IHRoZQorCSAqIGV4cGVjdGVkIHZhbHVlLgogCSAqCiAJICogVGhlIG9ubHkgc2FmZSB3YXkgdG8gY2hlY2sgZm9yIHRoZSBwZW4gdXAgY29uZGl0aW9uIGlzIGluIHRoZQotCSAqIHRpbWVyIGJ5IHJlYWRpbmcgdGhlIHBlbiBzaWduYWwgc3RhdGUgKGl0J3MgYSBHUElPIF9hbmRfIElSUSkuCisJICogd29yayBmdW5jdGlvbiBieSByZWFkaW5nIHRoZSBwZW4gc2lnbmFsIHN0YXRlIChpdCdzIGEgR1BJTworCSAqIGFuZCBJUlEpLiBVbmZvcnR1bmF0ZWx5IHN1Y2ggY2FsbGJhY2sgaXMgbm90IGFsd2F5cyBhdmFpbGFibGUsCisJICogaW4gdGhhdCBjYXNlIHdlIGhhdmUgcmVseSBvbiB0aGUgcHJlc3N1cmUgYW55d2F5LgogCSAqLworCWlmICh0cy0+Z2V0X3BlbmRvd25fc3RhdGUpIHsKKwkJaWYgKHVubGlrZWx5KCF0cy0+Z2V0X3BlbmRvd25fc3RhdGUoKSkpIHsKKwkJCXRzYzIwMDdfc2VuZF91cF9ldmVudCh0cyk7CisJCQl0cy0+cGVuZG93biA9IGZhbHNlOworCQkJZ290byBvdXQ7CisJCX0KKworCQlkZXZfZGJnKCZ0cy0+Y2xpZW50LT5kZXYsICJwZW4gaXMgc3RpbGwgZG93blxuIik7CisJfQorCisJdHNjMjAwN19yZWFkX3ZhbHVlcyh0cywgJnRjKTsKKworCXJ0ID0gdHNjMjAwN19jYWxjdWxhdGVfcHJlc3N1cmUodHMsICZ0Yyk7CisJaWYgKHJ0ID4gTUFYXzEyQklUKSB7CisJCS8qCisJCSAqIFNhbXBsZSBmb3VuZCBpbmNvbnNpc3RlbnQgYnkgZGVib3VuY2luZyBvciBwcmVzc3VyZSBpcworCQkgKiBiZXlvbmQgdGhlIG1heGltdW0uIERvbid0IHJlcG9ydCBpdCB0byB1c2VyIHNwYWNlLAorCQkgKiByZXBlYXQgYXQgbGVhc3Qgb25jZSBtb3JlIHRoZSBtZWFzdXJlbWVudC4KKwkJICovCisJCWRldl9kYmcoJnRzLT5jbGllbnQtPmRldiwgImlnbm9yZWQgcHJlc3N1cmUgJWRcbiIsIHJ0KTsKKwkJZ290byBvdXQ7CisKKwl9CisKIAlpZiAocnQpIHsKIAkJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSB0cy0+aW5wdXQ7CiAKQEAgLTE2MiwxMDIgKzIwMiw3NCBAQAogCQkJZGV2X2RiZygmdHMtPmNsaWVudC0+ZGV2LCAiRE9XTlxuIik7CiAKIAkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwgMSk7Ci0JCQl0cy0+cGVuZG93biA9IDE7CisJCQl0cy0+cGVuZG93biA9IHRydWU7CiAJCX0KIAotCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfWCwgeCk7Ci0JCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19ZLCB5KTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1gsIHRjLngpOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfWSwgdGMueSk7CiAJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19QUkVTU1VSRSwgcnQpOwogCiAJCWlucHV0X3N5bmMoaW5wdXQpOwogCiAJCWRldl9kYmcoJnRzLT5jbGllbnQtPmRldiwgInBvaW50KCU0ZCwlNGQpLCBwcmVzc3VyZSAoJTR1KVxuIiwKLQkJCXgsIHksIHJ0KTsKKwkJCXRjLngsIHRjLnksIHJ0KTsKKworCX0gZWxzZSBpZiAoIXRzLT5nZXRfcGVuZG93bl9zdGF0ZSAmJiB0cy0+cGVuZG93bikgeworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIGNhbGxiYWNrIHRvIGNoZWNrIHBlbmRvd24gc3RhdGUsIHNvIHdlCisJCSAqIGhhdmUgdG8gYXNzdW1lIHRoYXQgc2luY2UgcHJlc3N1cmUgcmVwb3J0ZWQgaXMgMCB0aGUKKwkJICogcGVuIHdhcyBsaWZ0ZWQgdXAuCisJCSAqLworCQl0c2MyMDA3X3NlbmRfdXBfZXZlbnQodHMpOworCQl0cy0+cGVuZG93biA9IGZhbHNlOwogCX0KIAotCWhydGltZXJfc3RhcnQoJnRzLT50aW1lciwga3RpbWVfc2V0KDAsIFRTX1BPTExfUEVSSU9EKSwKLQkJCUhSVElNRVJfTU9ERV9SRUwpOwotfQotCi1zdGF0aWMgaW50IHRzYzIwMDdfcmVhZF92YWx1ZXMoc3RydWN0IHRzYzIwMDcgKnRzYykKLXsKLQkvKiB5LSBzdGlsbCBvbjsgdHVybiBvbiBvbmx5IHkrIChhbmQgQURDKSAqLwotCXRzYy0+dGMueSA9IHRzYzIwMDdfeGZlcih0c2MsIFJFQURfWSk7Ci0KLQkvKiB0dXJuIHktIG9mZiwgeCsgb24sIHRoZW4gbGVhdmUgaW4gbG93cG93ZXIgKi8KLQl0c2MtPnRjLnggPSB0c2MyMDA3X3hmZXIodHNjLCBSRUFEX1gpOwotCi0JLyogdHVybiB5KyBvZmYsIHgtIG9uOyB3ZSdsbCB1c2UgZm9ybXVsYSAjMSAqLwotCXRzYy0+dGMuejEgPSB0c2MyMDA3X3hmZXIodHNjLCBSRUFEX1oxKTsKLQl0c2MtPnRjLnoyID0gdHNjMjAwN194ZmVyKHRzYywgUkVBRF9aMik7Ci0KLQkvKiBwb3dlciBkb3duICovCi0JdHNjMjAwN194ZmVyKHRzYywgUFdSRE9XTik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHRzYzIwMDdfdGltZXIoc3RydWN0IGhydGltZXIgKmhhbmRsZSkKLXsKLQlzdHJ1Y3QgdHNjMjAwNyAqdHMgPSBjb250YWluZXJfb2YoaGFuZGxlLCBzdHJ1Y3QgdHNjMjAwNywgdGltZXIpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdHMtPmxvY2ssIGZsYWdzKTsKLQotCWlmICh1bmxpa2VseSghdHMtPmdldF9wZW5kb3duX3N0YXRlKCkgJiYgdHMtPnBlbmRvd24pKSB7Ci0JCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gdHMtPmlucHV0OwotCi0JCWRldl9kYmcoJnRzLT5jbGllbnQtPmRldiwgIlVQXG4iKTsKLQotCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsIDApOwotCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfUFJFU1NVUkUsIDApOwotCQlpbnB1dF9zeW5jKGlucHV0KTsKLQotCQl0cy0+cGVuZG93biA9IDA7Cisgb3V0OgorCWlmICh0cy0+cGVuZG93bikKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0cy0+d29yaywKKwkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKFRTX1BPTExfUEVSSU9EKSk7CisJZWxzZQogCQllbmFibGVfaXJxKHRzLT5pcnEpOwotCX0gZWxzZSB7Ci0JCS8qIHBlbiBpcyBzdGlsbCBkb3duLCBjb250aW51ZSB3aXRoIHRoZSBtZWFzdXJlbWVudCAqLwotCQlkZXZfZGJnKCZ0cy0+Y2xpZW50LT5kZXYsICJwZW4gaXMgc3RpbGwgZG93blxuIik7Ci0KLQkJdHNjMjAwN19yZWFkX3ZhbHVlcyh0cyk7Ci0JCXRzYzIwMDdfc2VuZF9ldmVudCh0cyk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHMtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHRzYzIwMDdfaXJxKGludCBpcnEsIHZvaWQgKmhhbmRsZSkKIHsKIAlzdHJ1Y3QgdHNjMjAwNyAqdHMgPSBoYW5kbGU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0cy0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKGxpa2VseSh0cy0+Z2V0X3BlbmRvd25fc3RhdGUoKSkpIHsKKwlpZiAoIXRzLT5nZXRfcGVuZG93bl9zdGF0ZSB8fCBsaWtlbHkodHMtPmdldF9wZW5kb3duX3N0YXRlKCkpKSB7CiAJCWRpc2FibGVfaXJxX25vc3luYyh0cy0+aXJxKTsKLQkJaHJ0aW1lcl9zdGFydCgmdHMtPnRpbWVyLCBrdGltZV9zZXQoMCwgVFNfUE9MTF9ERUxBWSksCi0JCQkJCUhSVElNRVJfTU9ERV9SRUwpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRzLT53b3JrLAorCQkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoVFNfUE9MTF9ERUxBWSkpOwogCX0KIAogCWlmICh0cy0+Y2xlYXJfcGVuaXJxKQogCQl0cy0+Y2xlYXJfcGVuaXJxKCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cy0+bG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IHRzYzIwMDdfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3N0YXRpYyB2b2lkIHRzYzIwMDdfZnJlZV9pcnEoc3RydWN0IHRzYzIwMDcgKnRzKQoreworCWZyZWVfaXJxKHRzLT5pcnEsIHRzKTsKKwlpZiAoY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ0cy0+d29yaykpIHsKKwkJLyoKKwkJICogV29yayB3YXMgcGVuZGluZywgdGhlcmVmb3JlIHdlIG5lZWQgdG8gZW5hYmxlCisJCSAqIElSUSBoZXJlIHRvIGJhbGFuY2UgdGhlIGRpc2FibGVfaXJxKCkgZG9uZSBpbiB0aGUKKwkJICogaW50ZXJydXB0IGhhbmRsZXIuCisJCSAqLworCQllbmFibGVfaXJxKHRzLT5pcnEpOworCX0KK30KKworc3RhdGljIGludCBfX2RldmluaXQgdHNjMjAwN19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdHNjMjAwNyAqdHM7CiAJc3RydWN0IHRzYzIwMDdfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCWludCBlcnI7CiAKLQlpZiAoIXBkYXRhIHx8ICFwZGF0YS0+Z2V0X3BlbmRvd25fc3RhdGUpIHsKKwlpZiAoIXBkYXRhKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAicGxhdGZvcm0gZGF0YSBpcyByZXF1aXJlZCFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yNzQsMjIgKzI4NiwxNSBAQAogCX0KIAogCXRzLT5jbGllbnQgPSBjbGllbnQ7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdHMpOwotCisJdHMtPmlycSA9IGNsaWVudC0+aXJxOwogCXRzLT5pbnB1dCA9IGlucHV0X2RldjsKLQotCWhydGltZXJfaW5pdCgmdHMtPnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCXRzLT50aW1lci5mdW5jdGlvbiA9IHRzYzIwMDdfdGltZXI7Ci0KLQlzcGluX2xvY2tfaW5pdCgmdHMtPmxvY2spOworCUlOSVRfREVMQVlFRF9XT1JLKCZ0cy0+d29yaywgdHNjMjAwN193b3JrKTsKIAogCXRzLT5tb2RlbCAgICAgICAgICAgICA9IHBkYXRhLT5tb2RlbDsKIAl0cy0+eF9wbGF0ZV9vaG1zICAgICAgPSBwZGF0YS0+eF9wbGF0ZV9vaG1zOwogCXRzLT5nZXRfcGVuZG93bl9zdGF0ZSA9IHBkYXRhLT5nZXRfcGVuZG93bl9zdGF0ZTsKIAl0cy0+Y2xlYXJfcGVuaXJxICAgICAgPSBwZGF0YS0+Y2xlYXJfcGVuaXJxOwogCi0JcGRhdGEtPmluaXRfcGxhdGZvcm1faHcoKTsKLQogCXNucHJpbnRmKHRzLT5waHlzLCBzaXplb2YodHMtPnBoeXMpLAogCQkgIiVzL2lucHV0MCIsIGRldl9uYW1lKCZjbGllbnQtPmRldikpOwogCkBAIC0zMDQsOSArMzA5LDggQEAKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCAwLCBNQVhfMTJCSVQsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1BSRVNTVVJFLCAwLCBNQVhfMTJCSVQsIDAsIDApOwogCi0JdHNjMjAwN19yZWFkX3ZhbHVlcyh0cyk7Ci0KLQl0cy0+aXJxID0gY2xpZW50LT5pcnE7CisJaWYgKHBkYXRhLT5pbml0X3BsYXRmb3JtX2h3KQorCQlwZGF0YS0+aW5pdF9wbGF0Zm9ybV9odygpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEodHMtPmlycSwgdHNjMjAwN19pcnEsIDAsCiAJCQljbGllbnQtPmRldi5kcml2ZXItPm5hbWUsIHRzKTsKQEAgLTMxNSwzMyArMzE5LDM5IEBACiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCX0KIAorCS8qIFByZXBhcmUgZm9yIHRvdWNoIHJlYWRpbmdzIC0gcG93ZXIgZG93biBBREMgYW5kIGVuYWJsZSBQRU5JUlEgKi8KKwllcnIgPSB0c2MyMDA3X3hmZXIodHMsIFBXUkRPV04pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9mcmVlX2lycTsKKwogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCi0JZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAicmVnaXN0ZXJlZCB3aXRoIGlycSAoJWQpXG4iLCB0cy0+aXJxKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB0cyk7CiAKIAlyZXR1cm4gMDsKIAogIGVycl9mcmVlX2lycToKLQlmcmVlX2lycSh0cy0+aXJxLCB0cyk7Ci0JaHJ0aW1lcl9jYW5jZWwoJnRzLT50aW1lcik7CisJdHNjMjAwN19mcmVlX2lycSh0cyk7CisJaWYgKHBkYXRhLT5leGl0X3BsYXRmb3JtX2h3KQorCQlwZGF0YS0+ZXhpdF9wbGF0Zm9ybV9odygpOwogIGVycl9mcmVlX21lbToKIAlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCWtmcmVlKHRzKTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHRzYzIwMDdfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0c2MyMDA3X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCB0c2MyMDA3CSp0cyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCB0c2MyMDA3X3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCB0c2MyMDA3X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCXBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlwZGF0YS0+ZXhpdF9wbGF0Zm9ybV9odygpOworCXRzYzIwMDdfZnJlZV9pcnEodHMpOwogCi0JZnJlZV9pcnEodHMtPmlycSwgdHMpOwotCWhydGltZXJfY2FuY2VsKCZ0cy0+dGltZXIpOworCWlmIChwZGF0YS0+ZXhpdF9wbGF0Zm9ybV9odykKKwkJcGRhdGEtPmV4aXRfcGxhdGZvcm1faHcoKTsKKwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHRzLT5pbnB1dCk7CiAJa2ZyZWUodHMpOwogCkBAIC0zNjIsNyArMzcyLDcgQEAKIAl9LAogCS5pZF90YWJsZQk9IHRzYzIwMDdfaWR0YWJsZSwKIAkucHJvYmUJCT0gdHNjMjAwN19wcm9iZSwKLQkucmVtb3ZlCQk9IHRzYzIwMDdfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodHNjMjAwN19yZW1vdmUpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdHNjMjAwN19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VjYjE0MDBfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdWNiMTQwMF90cy5jCmluZGV4IDNhN2E1ODIuLjA5NWY4NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdWNiMTQwMF90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdWNiMTQwMF90cy5jCkBAIC0xMjgsOSArMTI4LDEwIEBACiAJcmV0dXJuIHVjYjE0MDBfYWRjX3JlYWQodWNiLT5hYzk3LCAwLCBhZGNzeW5jKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdWNiMTQwMF90c19wZW5fZG93bihzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCitzdGF0aWMgaW5saW5lIGludCB1Y2IxNDAwX3RzX3Blbl91cChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCiB7CiAJdW5zaWduZWQgc2hvcnQgdmFsID0gdWNiMTQwMF9yZWdfcmVhZChhYzk3LCBVQ0JfVFNfQ1IpOworCiAJcmV0dXJuIHZhbCAmIChVQ0JfVFNfQ1JfVFNQWF9MT1cgfCBVQ0JfVFNfQ1JfVFNNWF9MT1cpOwogfQogCkBAIC0yMDksNyArMjEwLDcgQEAKIAogCQltc2xlZXAoMTApOwogCi0JCWlmICh1Y2IxNDAwX3RzX3Blbl9kb3duKHVjYi0+YWM5NykpIHsKKwkJaWYgKHVjYjE0MDBfdHNfcGVuX3VwKHVjYi0+YWM5NykpIHsKIAkJCXVjYjE0MDBfdHNfaXJxX2VuYWJsZSh1Y2ItPmFjOTcpOwogCiAJCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91c2J0b3VjaHNjcmVlbi5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91c2J0b3VjaHNjcmVlbi5jCmluZGV4IGZiN2NiOWIuLjY4ZWNlNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdXNidG91Y2hzY3JlZW4uYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VzYnRvdWNoc2NyZWVuLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqICAtIElkZWFsVEVLIFVSVEMxMDAwCiAgKiAgLSBHZW5lcmFsIFRvdWNoCiAgKiAgLSBHb1RvcCBTdXBlcl9RMi9Hb2dvUGVuL1BlblBvd2VyIHRhYmxldHMKKyAqICAtIEpBU1RFQyBVU0IgdG91Y2ggY29udHJvbGxlci9EaWdpVGVjaCBEVFItMDJVCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgYnkgRGFuaWVsIFJpdHogPGRhbmllbC5yaXR6QGdteC5jaD4KICAqIENvcHlyaWdodCAoQykgYnkgVG9kZCBFLiBKb2huc29uIChtdG91Y2h1c2IuYykKQEAgLTExOCw2ICsxMTksOCBAQAogCURFVlRZUEVfSURFQUxURUssCiAJREVWVFlQRV9HRU5FUkFMX1RPVUNILAogCURFVlRZUEVfR09UT1AsCisJREVWVFlQRV9KQVNURUMsCisJREVWVFlQRV9FMkksCiB9OwogCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSElEX0NMQVNTKHZlbmQsIHByb2QpIFwKQEAgLTE5MSwxMSArMTk0LDUxIEBACiAJe1VTQl9ERVZJQ0UoMHgwOGYyLCAweDAwZjQpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0dPVE9QfSwKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9KQVNURUMKKwl7VVNCX0RFVklDRSgweDBmOTIsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfSkFTVEVDfSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9FMkkKKwl7VVNCX0RFVklDRSgweDFhYzcsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfRTJJfSwKKyNlbmRpZgogCXt9CiB9OwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZTJpIFBhcnQKKyAqLworCisjaWZkZWYgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9FMkkKK3N0YXRpYyBpbnQgZTJpX2luaXQoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0b3VjaC0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYnRvdWNoLT51ZGV2LCAwKSwKKwkgICAgICAgICAgICAgICAgICAgICAgMHgwMSwgMHgwMiwgMHgwMDAwLCAweDAwODEsCisJICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKworCWRiZygiJXMgLSB1c2JfY29udHJvbF9tc2cgLSBFMklfUkVTRVQgLSBieXRlc3xlcnI6ICVkIiwKKwkgICAgX19mdW5jX18sIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBlMmlfcmVhZF9kYXRhKHN0cnVjdCB1c2J0b3VjaF91c2IgKmRldiwgdW5zaWduZWQgY2hhciAqcGt0KQoreworCWludCB0bXAgPSAocGt0WzBdIDw8IDgpIHwgcGt0WzFdOworCWRldi0+eCAgPSAocGt0WzJdIDw8IDgpIHwgcGt0WzNdOworCWRldi0+eSAgPSAocGt0WzRdIDw8IDgpIHwgcGt0WzVdOworCisJdG1wID0gdG1wIC0gMHhBMDAwOworCWRldi0+dG91Y2ggPSAodG1wID4gMCk7CisJZGV2LT5wcmVzcyA9ICh0bXAgPiAwID8gdG1wIDogMCk7CisKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZUdhbGF4IHBhcnQKICAqLwogCkBAIC01NTksNiArNjAyLDIxIEBACiAJZGV2LT54ID0gKChwa3RbMV0gJiAweDM4KSA8PCA0KSB8IHBrdFsyXTsKIAlkZXYtPnkgPSAoKHBrdFsxXSAmIDB4MDcpIDw8IDcpIHwgcGt0WzNdOwogCWRldi0+dG91Y2ggPSBwa3RbMF0gJiAweDAxOworCisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBKQVNURUMgUGFydAorICovCisjaWZkZWYgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9KQVNURUMKK3N0YXRpYyBpbnQgamFzdGVjX3JlYWRfZGF0YShzdHJ1Y3QgdXNidG91Y2hfdXNiICpkZXYsIHVuc2lnbmVkIGNoYXIgKnBrdCkKK3sKKwlkZXYtPnggPSAoKHBrdFswXSAmIDB4M2YpIDw8IDYpIHwgKHBrdFsyXSAmIDB4M2YpOworCWRldi0+eSA9ICgocGt0WzFdICYgMHgzZikgPDwgNikgfCAocGt0WzNdICYgMHgzZik7CisJZGV2LT50b3VjaCA9IChwa3RbMF0gJiAweDQwKSA+PiA2OworCiAJcmV0dXJuIDE7CiB9CiAjZW5kaWYKQEAgLTcwMiw2ICs3NjAsMjkgQEAKIAkJLnJlYWRfZGF0YQk9IGdvdG9wX3JlYWRfZGF0YSwKIAl9LAogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0pBU1RFQworCVtERVZUWVBFX0pBU1RFQ10gPSB7CisJCS5taW5feGMJCT0gMHgwLAorCQkubWF4X3hjCQk9IDB4MGZmZiwKKwkJLm1pbl95YwkJPSAweDAsCisJCS5tYXhfeWMJCT0gMHgwZmZmLAorCQkucmVwdF9zaXplCT0gNCwKKwkJLnJlYWRfZGF0YQk9IGphc3RlY19yZWFkX2RhdGEsCisJfSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9FMkkKKwlbREVWVFlQRV9FMkldID0geworCQkubWluX3hjCQk9IDB4MCwKKwkJLm1heF94YwkJPSAweDdmZmYsCisJCS5taW5feWMJCT0gMHgwLAorCQkubWF4X3ljCQk9IDB4N2ZmZiwKKwkJLnJlcHRfc2l6ZQk9IDYsCisJCS5pbml0CQk9IGUyaV9pbml0LAorCQkucmVhZF9kYXRhCT0gZTJpX3JlYWRfZGF0YSwKKwl9LAorI2VuZGlmCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdzkwcDkxMF90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93OTBwOTEwX3RzLmMKaW5kZXggNjA3MWY1OC4uNmNjYmRiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93OTBwOTEwX3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93OTBwOTEwX3RzLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKQEAgLTQ3LDggKzQ4LDggQEAKIHN0cnVjdCB3OTBwOTEwX3RzIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3QgY2xrICpjbGs7CiAJaW50IGlycV9udW07Ci0Jdm9pZCBfX2lvbWVtICpjbG9ja2VuOwogCXZvaWQgX19pb21lbSAqdHNfcmVnOwogCXNwaW5sb2NrX3QgbG9jazsKIAllbnVtIHRzX3N0YXRlIHN0YXRlOwpAQCAtMTY2LDggKzE2Nyw3IEBACiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKIAkvKiBlbmFibGUgdGhlIEFEQyBjbG9jayAqLwotCXZhbCA9IF9fcmF3X3JlYWRsKHc5MHA5MTBfdHMtPmNsb2NrZW4pOwotCV9fcmF3X3dyaXRlbCh2YWwgfCBBRENfQ0xLX0VOLCB3OTBwOTEwX3RzLT5jbG9ja2VuKTsKKwljbGtfZW5hYmxlKHc5MHA5MTBfdHMtPmNsayk7CiAKIAlfX3Jhd193cml0ZWwoQURDX1JTVDEsIHc5MHA5MTBfdHMtPnRzX3JlZyk7CiAJbXNsZWVwKDEpOwpAQCAtMjExLDggKzIxMSw3IEBACiAJZGVsX3RpbWVyX3N5bmMoJnc5MHA5MTBfdHMtPnRpbWVyKTsKIAogCS8qIHN0b3AgdGhlIEFEQyBjbG9jayAqLwotCXZhbCA9IF9fcmF3X3JlYWRsKHc5MHA5MTBfdHMtPmNsb2NrZW4pOwotCV9fcmF3X3dyaXRlbCh2YWwgJiB+QURDX0NMS19FTiwgdzkwcDkxMF90cy0+Y2xvY2tlbik7CisJY2xrX2Rpc2FibGUodzkwcDkxMF90cy0+Y2xrKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgdzkweDkwMHRzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0yNDEsMjYgKzI0MCwyNCBAQAogCQlnb3RvIGZhaWwxOwogCX0KIAotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAogCQkJCXBkZXYtPm5hbWUpKSB7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBmYWlsMTsKIAl9CiAKLQl3OTBwOTEwX3RzLT50c19yZWcgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXc5MHA5MTBfdHMtPnRzX3JlZyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXc5MHA5MTBfdHMtPnRzX3JlZykgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWwyOwogCX0KIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Ci0JaWYgKCFyZXMpIHsKLQkJZXJyID0gLUVOWElPOworCXc5MHA5MTBfdHMtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUih3OTBwOTEwX3RzLT5jbGspKSB7CisJCWVyciA9IFBUUl9FUlIodzkwcDkxMF90cy0+Y2xrKTsKIAkJZ290byBmYWlsMzsKIAl9CiAKLQl3OTBwOTEwX3RzLT5jbG9ja2VuID0gKHZvaWQgX19pb21lbSAqKXJlcy0+c3RhcnQ7Ci0KIAlpbnB1dF9kZXYtPm5hbWUgPSAiVzkwUDkxMCBUb3VjaFNjcmVlbiI7CiAJaW5wdXRfZGV2LT5waHlzID0gInc5MHA5MTB0cy9ldmVudDAiOwogCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwpAQCAtMjgzLDIwICsyODAsMjEgQEAKIAlpZiAocmVxdWVzdF9pcnEodzkwcDkxMF90cy0+aXJxX251bSwgdzkwcDkxMF90c19pbnRlcnJ1cHQsCiAJCQlJUlFGX0RJU0FCTEVELCAidzkwcDkxMHRzIiwgdzkwcDkxMF90cykpIHsKIAkJZXJyID0gLUVCVVNZOwotCQlnb3RvIGZhaWwzOworCQlnb3RvIGZhaWw0OwogCX0KIAogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZSh3OTBwOTEwX3RzLT5pbnB1dCk7CiAJaWYgKGVycikKLQkJZ290byBmYWlsNDsKKwkJZ290byBmYWlsNTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHc5MHA5MTBfdHMpOwogCiAJcmV0dXJuIDA7CiAKLWZhaWw0OglmcmVlX2lycSh3OTBwOTEwX3RzLT5pcnFfbnVtLCB3OTBwOTEwX3RzKTsKK2ZhaWw1OglmcmVlX2lycSh3OTBwOTEwX3RzLT5pcnFfbnVtLCB3OTBwOTEwX3RzKTsKK2ZhaWw0OgljbGtfcHV0KHc5MHA5MTBfdHMtPmNsayk7CiBmYWlsMzoJaW91bm1hcCh3OTBwOTEwX3RzLT50c19yZWcpOwotZmFpbDI6CXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKK2ZhaWwyOglyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIGZhaWwxOglpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCWtmcmVlKHc5MHA5MTBfdHMpOwogCXJldHVybiBlcnI7CkBAIC0zMTEsOCArMzA5LDEwIEBACiAJZGVsX3RpbWVyX3N5bmMoJnc5MHA5MTBfdHMtPnRpbWVyKTsKIAlpb3VubWFwKHc5MHA5MTBfdHMtPnRzX3JlZyk7CiAKKwljbGtfcHV0KHc5MHA5MTBfdHMtPmNsayk7CisKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHc5MHA5MTBfdHMtPmlucHV0KTsKIAlrZnJlZSh3OTBwOTEwX3RzKTsKQEAgLTMyNiw3ICszMjYsNyBAQAogCS5wcm9iZQkJPSB3OTB4OTAwdHNfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3OTB4OTAwdHNfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSAidzkweDkwMC10cyIsCisJCS5uYW1lCT0gIm51YzkwMC10cyIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwpAQCAtMzQ3LDQgKzM0Nyw0IEBACiBNT0RVTEVfQVVUSE9SKCJXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oInc5MHA5MTAgdG91Y2ggc2NyZWVuIGRyaXZlciEiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06dzkwcDkxMC10cyIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpudWM5MDAtdHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd2Fjb21fdzgwMDEuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd2Fjb21fdzgwMDEuYwppbmRleCAyZjMzYTAxLi41NmRjMzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dhY29tX3c4MDAxLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93YWNvbV93ODAwMS5jCkBAIC0yNSwxOCArMjUsMTYgQEAKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLS8qCi0gKiBEZWZpbml0aW9ucyAmIGdsb2JhbCBhcnJheXMuCi0gKi8KLQogI2RlZmluZSBXODAwMV9NQVhfTEVOR1RICTExCi0jZGVmaW5lIFc4MDAxX1BBQ0tFVF9MRU4JMTEKLSNkZWZpbmUgVzgwMDFfTEVBRF9NQVNLIDB4ODAKLSNkZWZpbmUgVzgwMDFfTEVBRF9CWVRFIDB4ODAKLSNkZWZpbmUgVzgwMDFfVEFCX01BU0sgMHg0MAotI2RlZmluZSBXODAwMV9UQUJfQllURSAweDQwCisjZGVmaW5lIFc4MDAxX0xFQURfTUFTSwkJMHg4MAorI2RlZmluZSBXODAwMV9MRUFEX0JZVEUJCTB4ODAKKyNkZWZpbmUgVzgwMDFfVEFCX01BU0sJCTB4NDAKKyNkZWZpbmUgVzgwMDFfVEFCX0JZVEUJCTB4NDAKIAotI2RlZmluZSBXODAwMV9RVUVSWV9QQUNLRVQgMHgyMAorI2RlZmluZSBXODAwMV9RVUVSWV9QQUNLRVQJMHgyMAorCisjZGVmaW5lIFc4MDAxX0NNRF9TVEFSVAkJJzEnCisjZGVmaW5lIFc4MDAxX0NNRF9RVUVSWQkJJyonCiAKIHN0cnVjdCB3ODAwMV9jb29yZCB7CiAJdTggcmR5OwpAQCAtNTcsMTggKzU1LDE5IEBACiBzdHJ1Y3QgdzgwMDEgewogCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKIAlzdHJ1Y3Qgc2VyaW8gKnNlcmlvOwotCXN0cnVjdCBtdXRleCBjbWRfbXV0ZXg7CiAJc3RydWN0IGNvbXBsZXRpb24gY21kX2RvbmU7CiAJaW50IGlkOwogCWludCBpZHg7Ci0JdW5zaWduZWQgY2hhciBleHBlY3RlZF9wYWNrZXQ7CisJdW5zaWduZWQgY2hhciByZXNwb25zZV90eXBlOworCXVuc2lnbmVkIGNoYXIgcmVzcG9uc2VbVzgwMDFfTUFYX0xFTkdUSF07CiAJdW5zaWduZWQgY2hhciBkYXRhW1c4MDAxX01BWF9MRU5HVEhdOwotCXVuc2lnbmVkIGNoYXIgcmVzcG9uc2VbVzgwMDFfUEFDS0VUX0xFTl07CiAJY2hhciBwaHlzWzMyXTsKIH07CiAKLXN0YXRpYyBpbnQgcGFyc2VfZGF0YSh1OCAqZGF0YSwgc3RydWN0IHc4MDAxX2Nvb3JkICpjb29yZCkKK3N0YXRpYyB2b2lkIHBhcnNlX2RhdGEodTggKmRhdGEsIHN0cnVjdCB3ODAwMV9jb29yZCAqY29vcmQpCiB7CisJbWVtc2V0KGNvb3JkLCAwLCBzaXplb2YoKmNvb3JkKSk7CisKIAljb29yZC0+cmR5ID0gZGF0YVswXSAmIDB4MjA7CiAJY29vcmQtPnRzdyA9IGRhdGFbMF0gJiAweDAxOwogCWNvb3JkLT5mMSA9IGRhdGFbMF0gJiAweDAyOwpAQCAtODcsMTUgKzg2LDE1IEBACiAKIAljb29yZC0+dGlsdF94ID0gZGF0YVs3XSAmIDB4N0Y7CiAJY29vcmQtPnRpbHRfeSA9IGRhdGFbOF0gJiAweDdGOwotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHc4MDAxX3Byb2Nlc3NfZGF0YShzdHJ1Y3QgdzgwMDEgKnc4MDAxLCB1bnNpZ25lZCBjaGFyIGRhdGEpCitzdGF0aWMgaXJxcmV0dXJuX3QgdzgwMDFfaW50ZXJydXB0KHN0cnVjdCBzZXJpbyAqc2VyaW8sCisJCQkJICAgdW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CisJc3RydWN0IHc4MDAxICp3ODAwMSA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvKTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSB3ODAwMS0+ZGV2OwotCXU4IHRtcDsKIAlzdHJ1Y3QgdzgwMDFfY29vcmQgY29vcmQ7CisJdW5zaWduZWQgY2hhciB0bXA7CiAKIAl3ODAwMS0+ZGF0YVt3ODAwMS0+aWR4XSA9IGRhdGE7CiAJc3dpdGNoICh3ODAwMS0+aWR4KyspIHsKQEAgLTEwNSwxMiArMTA0LDEzIEBACiAJCQl3ODAwMS0+aWR4ID0gMDsKIAkJfQogCQlicmVhazsKKwogCWNhc2UgODoKIAkJdG1wID0gdzgwMDEtPmRhdGFbMF0gJiBXODAwMV9UQUJfTUFTSzsKIAkJaWYgKHVubGlrZWx5KHRtcCA9PSBXODAwMV9UQUJfQllURSkpCiAJCQlicmVhazsKKwogCQl3ODAwMS0+aWR4ID0gMDsKLQkJbWVtc2V0KCZjb29yZCwgMCwgc2l6ZW9mKGNvb3JkKSk7CiAJCXBhcnNlX2RhdGEodzgwMDEtPmRhdGEsICZjb29yZCk7CiAJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgY29vcmQueCk7CiAJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgY29vcmQueSk7CkBAIC0xMTgsODYgKzExOCw0OCBAQAogCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCBjb29yZC50c3cpOwogCQlpbnB1dF9zeW5jKGRldik7CiAJCWJyZWFrOworCiAJY2FzZSAxMDoKIAkJdzgwMDEtPmlkeCA9IDA7Ci0JCW1lbWNweSh3ODAwMS0+cmVzcG9uc2UsICZ3ODAwMS0+ZGF0YSwgVzgwMDFfUEFDS0VUX0xFTik7Ci0JCXc4MDAxLT5leHBlY3RlZF9wYWNrZXQgPSBXODAwMV9RVUVSWV9QQUNLRVQ7CisJCW1lbWNweSh3ODAwMS0+cmVzcG9uc2UsIHc4MDAxLT5kYXRhLCBXODAwMV9NQVhfTEVOR1RIKTsKKwkJdzgwMDEtPnJlc3BvbnNlX3R5cGUgPSBXODAwMV9RVUVSWV9QQUNLRVQ7CiAJCWNvbXBsZXRlKCZ3ODAwMS0+Y21kX2RvbmUpOwogCQlicmVhazsKIAl9Ci19Ci0KLQotc3RhdGljIGlycXJldHVybl90IHc4MDAxX2ludGVycnVwdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLAotCQl1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgdzgwMDEgKnc4MDAxID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8pOwotCi0JdzgwMDFfcHJvY2Vzc19kYXRhKHc4MDAxLCBkYXRhKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCB3ODAwMV9hc3luY19jb21tYW5kKHN0cnVjdCB3ODAwMSAqdzgwMDEsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwKLQkJCQkJaW50IGxlbikKK3N0YXRpYyBpbnQgdzgwMDFfY29tbWFuZChzdHJ1Y3QgdzgwMDEgKnc4MDAxLCB1bnNpZ25lZCBjaGFyIGNvbW1hbmQsCisJCQkgYm9vbCB3YWl0X3Jlc3BvbnNlKQogewotCWludCByYyA9IC0xOwotCWludCBpOworCWludCByYzsKIAotCW11dGV4X2xvY2soJnc4MDAxLT5jbWRfbXV0ZXgpOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWlmIChzZXJpb193cml0ZSh3ODAwMS0+c2VyaW8sIHBhY2tldFtpXSkpCi0JCQlnb3RvIG91dDsKLQl9Ci0JcmMgPSAwOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3ODAwMS0+Y21kX211dGV4KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgdzgwMDFfY29tbWFuZChzdHJ1Y3QgdzgwMDEgKnc4MDAxLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBsZW4pCi17Ci0JaW50IHJjID0gLTE7Ci0JaW50IGk7Ci0KLQltdXRleF9sb2NrKCZ3ODAwMS0+Y21kX211dGV4KTsKLQotCXNlcmlvX3BhdXNlX3J4KHc4MDAxLT5zZXJpbyk7CisJdzgwMDEtPnJlc3BvbnNlX3R5cGUgPSAwOwogCWluaXRfY29tcGxldGlvbigmdzgwMDEtPmNtZF9kb25lKTsKLQlzZXJpb19jb250aW51ZV9yeCh3ODAwMS0+c2VyaW8pOwogCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWlmIChzZXJpb193cml0ZSh3ODAwMS0+c2VyaW8sIHBhY2tldFtpXSkpCi0JCQlnb3RvIG91dDsKKwlyYyA9IHNlcmlvX3dyaXRlKHc4MDAxLT5zZXJpbywgY29tbWFuZCk7CisJaWYgKHJjID09IDAgJiYgd2FpdF9yZXNwb25zZSkgeworCisJCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmdzgwMDEtPmNtZF9kb25lLCBIWik7CisJCWlmICh3ODAwMS0+cmVzcG9uc2VfdHlwZSAhPSBXODAwMV9RVUVSWV9QQUNLRVQpCisJCQlyYyA9IC1FSU87CiAJfQogCi0Jd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3ODAwMS0+Y21kX2RvbmUsIEhaKTsKLQotCWlmICh3ODAwMS0+ZXhwZWN0ZWRfcGFja2V0ID09IFc4MDAxX1FVRVJZX1BBQ0tFVCkgewotCQkvKiBXZSBhcmUgYmFjayBpbiByZXBvcnRpbmcgbW9kZSwgdGhlIHF1ZXJ5IHdhcyBBQ0tlZCAqLwotCQltZW1jcHkocGFja2V0LCB3ODAwMS0+cmVzcG9uc2UsIFc4MDAxX1BBQ0tFVF9MRU4pOwotCQlyYyA9IDA7Ci0JfQotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3ODAwMS0+Y21kX211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgdzgwMDFfc2V0dXAoc3RydWN0IHc4MDAxICp3ODAwMSkKIHsKLQlzdHJ1Y3QgdzgwMDFfY29vcmQgY29vcmQ7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gdzgwMDEtPmRldjsKLQl1bnNpZ25lZCBjaGFyIHN0YXJ0WzFdID0geyAnMScgfTsKLQl1bnNpZ25lZCBjaGFyIHF1ZXJ5WzExXSA9IHsgJyonIH07CisJc3RydWN0IHc4MDAxX2Nvb3JkIGNvb3JkOworCWludCBlcnJvcjsKIAotCWlmICh3ODAwMV9jb21tYW5kKHc4MDAxLCBxdWVyeSwgMSkpCi0JCXJldHVybiAtMTsKKwllcnJvciA9IHc4MDAxX2NvbW1hbmQodzgwMDEsIFc4MDAxX0NNRF9RVUVSWSwgdHJ1ZSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CiAKLQltZW1zZXQoJmNvb3JkLCAwLCBzaXplb2YoY29vcmQpKTsKLQlwYXJzZV9kYXRhKHF1ZXJ5LCAmY29vcmQpOworCXBhcnNlX2RhdGEodzgwMDEtPnJlc3BvbnNlLCAmY29vcmQpOwogCiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfWCwgMCwgY29vcmQueCwgMCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfWSwgMCwgY29vcmQueSwgMCwgMCk7CkBAIC0yMDUsMTAgKzE2Nyw3IEBACiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfVElMVF9YLCAwLCBjb29yZC50aWx0X3gsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1RJTFRfWSwgMCwgY29vcmQudGlsdF95LCAwLCAwKTsKIAotCWlmICh3ODAwMV9hc3luY19jb21tYW5kKHc4MDAxLCBzdGFydCwgMSkpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiAwOworCXJldHVybiB3ODAwMV9jb21tYW5kKHc4MDAxLCBXODAwMV9DTURfU1RBUlQsIGZhbHNlKTsKIH0KIAogLyoKQEAgLTI0OSw3ICsyMDgsNiBAQAogCXc4MDAxLT5zZXJpbyA9IHNlcmlvOwogCXc4MDAxLT5pZCA9IHNlcmlvLT5pZC5pZDsKIAl3ODAwMS0+ZGV2ID0gaW5wdXRfZGV2OwotCW11dGV4X2luaXQoJnc4MDAxLT5jbWRfbXV0ZXgpOwogCWluaXRfY29tcGxldGlvbigmdzgwMDEtPmNtZF9kb25lKTsKIAlzbnByaW50Zih3ODAwMS0+cGh5cywgc2l6ZW9mKHc4MDAxLT5waHlzKSwgIiVzL2lucHV0MCIsIHNlcmlvLT5waHlzKTsKIApAQCAtMjY5LDcgKzIyNyw4IEBACiAJaWYgKGVycikKIAkJZ290byBmYWlsMjsKIAotCWlmICh3ODAwMV9zZXR1cCh3ODAwMSkpCisJZXJyID0gdzgwMDFfc2V0dXAodzgwMDEpOworCWlmIChlcnIpCiAJCWdvdG8gZmFpbDM7CiAKIAllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UodzgwMDEtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTd4eC1jb3JlLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTd4eC1jb3JlLmMKaW5kZXggMjk1N2Q0OC4uMjUyZWIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3eHgtY29yZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205N3h4LWNvcmUuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAJZWxzZQogCQlyZWcgJj0gfmdwaW87CiAKLQlpZiAod20tPmlkID09IFdNOTcxMl9JRDIpCisJaWYgKHdtLT5pZCA9PSBXTTk3MTJfSUQyICYmIHdtLT52YXJpYW50ICE9IFdNOTd4eF9XTTE2MTMpCiAJCXdtOTd4eF9yZWdfd3JpdGUod20sIEFDOTdfR1BJT19TVEFUVVMsIHJlZyA8PCAxKTsKIAllbHNlCiAJCXdtOTd4eF9yZWdfd3JpdGUod20sIEFDOTdfR1BJT19TVEFUVVMsIHJlZyk7CkBAIC0zMDcsNyArMzA3LDcgQEAKIAkJCQkJIFdNOTdYWF9HUElPXzEzKTsKIAkJfQogCi0JCWlmICh3bS0+aWQgPT0gV005NzEyX0lEMikKKwkJaWYgKHdtLT5pZCA9PSBXTTk3MTJfSUQyICYmIHdtLT52YXJpYW50ICE9IFdNOTd4eF9XTTE2MTMpCiAJCQl3bTk3eHhfcmVnX3dyaXRlKHdtLCBBQzk3X0dQSU9fU1RBVFVTLCAoc3RhdHVzICYKIAkJCQkJCX5XTTk3WFhfR1BJT18xMykgPDwgMSk7CiAJCWVsc2UKQEAgLTU4Miw2ICs1ODIsOCBAQAogCiAJd20tPmlkID0gd205N3h4X3JlZ19yZWFkKHdtLCBBQzk3X1ZFTkRPUl9JRDIpOwogCisJd20tPnZhcmlhbnQgPSBXTTk3eHhfR0VORVJJQzsKKwogCWRldl9pbmZvKHdtLT5kZXYsICJkZXRlY3RlZCBhIHdtOTclMDJ4IGNvZGVjXG4iLCB3bS0+aWQgJiAweGZmKTsKIAogCXN3aXRjaCAod20tPmlkICYgMHhmZikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL0tjb25maWcgYi9kcml2ZXJzL2lzZG4vS2NvbmZpZwppbmRleCAwMmJkY2E2Li4wMjJhMTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vS2NvbmZpZworKysgYi9kcml2ZXJzL2lzZG4vS2NvbmZpZwpAQCAtMjEsOCArMjEsNiBAQAogCiBpZiBJU0ROCiAKLXNvdXJjZSAiZHJpdmVycy9pc2RuL21JU0ROL0tjb25maWciCi0KIG1lbnVjb25maWcgSVNETl9JNEwKIAl0cmlzdGF0ZSAiT2xkIElTRE40TGludXggKGRlcHJlY2F0ZWQpIgogCS0tLWhlbHAtLS0KQEAgLTQxLDkgKzM5LDkgQEAKIAkgIEl0IGlzIHN0aWxsIGF2YWlsYWJsZSwgdGhvdWdoLCBmb3IgdXNlIHdpdGggYWRhcHRlcnMgdGhhdCBhcmUgbm90CiAJICBzdXBwb3J0ZWQgYnkgdGhlIG5ldyBDQVBJIHN1YnN5c3RlbSB5ZXQuCiAKLWlmIElTRE5fSTRMCitzb3VyY2UgImRyaXZlcnMvaXNkbi9tSVNETi9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvaXNkbi9pNGwvS2NvbmZpZyIKLWVuZGlmCiAKIG1lbnVjb25maWcgSVNETl9DQVBJCiAJdHJpc3RhdGUgIkNBUEkgMi4wIHN1YnN5c3RlbSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2NhcGkuYyBiL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2NhcGkuYwppbmRleCA5NDZjMzhjLi4xZjBhOTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vYWN0MjAwMC9jYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2FjdDIwMDAvY2FwaS5jCkBAIC03OCw3ICs3OCw2IEBACiAjZW5kaWYKIAl7eyAweDAwLCAweDAwfSwgTlVMTH0sCiB9OwotI2RlZmluZSBudW1fdmFsaWRfbXNnIChzaXplb2YodmFsaWRfbXNnKS9zaXplb2YoYWN0Y2FwaV9tc2dkc2MpKQogI2RlZmluZSBudW1fdmFsaWRfaW1zZyAyNyAvKiBNQU5VRkFDVFVSRVJfSU5EICovCiAKIC8qCkBAIC0xMDI1LDcgKzEwMjQsNyBAQAogI2lmZGVmIERFQlVHX0RVTVBfU0tCCiAJZHVtcF9za2Ioc2tiKTsKICNlbmRpZgotCWZvciAoaSA9IDA7IGkgPCBudW1fdmFsaWRfbXNnOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmFsaWRfbXNnKTsgaSsrKQogCQlpZiAoKG1zZy0+aGRyLmNtZC5jbWQgPT0gdmFsaWRfbXNnW2ldLmNtZC5jbWQpICYmCiAJCSAgICAobXNnLT5oZHIuY21kLnN1YmNtZCA9PSB2YWxpZF9tc2dbaV0uY21kLnN1YmNtZCkpIHsKIAkJCWRlc2NyID0gdmFsaWRfbXNnW2ldLmRlc2NyaXB0aW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2FjdDIwMDAvbW9kdWxlLmMgYi9kcml2ZXJzL2lzZG4vYWN0MjAwMC9tb2R1bGUuYwppbmRleCA4MzI1MDIyLi5mNzc0ZTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vYWN0MjAwMC9tb2R1bGUuYworKysgYi9kcml2ZXJzL2lzZG4vYWN0MjAwMC9tb2R1bGUuYwpAQCAtMjMsNyArMjMsNiBAQAogICAgICAgICAweDAyMDAsIDB4MDI0MCwgMHgwMjgwLCAweDAyYzAsIDB4MDMwMCwgMHgwMzQwLCAweDAzODAsCiAgICAgICAgIDB4Y2ZlMCwgMHhjZmEwLCAweGNmNjAsIDB4Y2YyMCwgMHhjZWUwLCAweGNlYTAsIDB4Y2U2MCwKIH07Ci0jZGVmaW5lIElTQV9OUlBPUlRTIChzaXplb2YoYWN0MjAwMF9pc2FfcG9ydHMpL3NpemVvZih1bnNpZ25lZCBzaG9ydCkpCiAKIHN0YXRpYyBhY3QyMDAwX2NhcmQgKmNhcmRzID0gKGFjdDIwMDBfY2FyZCAqKSBOVUxMOwogCkBAIC02ODYsMjEgKzY4NSwyMSBAQAogCQkgKiBUaGlzIG1heSByZXN1bHQgaW4gbW9yZSB0aGFuIG9uZSBjYXJkIGRldGVjdGVkLgogCQkgKi8KIAkJc3dpdGNoIChidXMpIHsKLQkJCWNhc2UgQUNUMjAwMF9CVVNfSVNBOgotCQkJCWZvciAoaSA9IDA7IGkgPCBJU0FfTlJQT1JUUzsgaSsrKQotCQkJCQlpZiAoYWN0MjAwMF9pc2FfZGV0ZWN0KGFjdDIwMDBfaXNhX3BvcnRzW2ldKSkgewotCQkJCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCQkJICAgICAgICJhY3QyMDAwOiBEZXRlY3RlZCBJU0EgY2FyZCBhdCBwb3J0IDB4JXhcbiIsCi0JCQkJCQkgICAgICAgYWN0MjAwMF9pc2FfcG9ydHNbaV0pOwotCQkJCQkJYWN0MjAwMF9hbGxvY2NhcmQoYnVzLCBhY3QyMDAwX2lzYV9wb3J0c1tpXSwgaXJxLCBpZCk7Ci0JCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgQUNUMjAwMF9CVVNfTUNBOgotCQkJY2FzZSBBQ1QyMDAwX0JVU19QQ01DSUE6Ci0JCQlkZWZhdWx0OgotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgImFjdDIwMDA6IGFkZGNhcmQ6IEludmFsaWQgQlVTIHR5cGUgJWRcbiIsCi0JCQkJICAgICAgIGJ1cyk7CisJCWNhc2UgQUNUMjAwMF9CVVNfSVNBOgorCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWN0MjAwMF9pc2FfcG9ydHMpOyBpKyspCisJCQkJaWYgKGFjdDIwMDBfaXNhX2RldGVjdChhY3QyMDAwX2lzYV9wb3J0c1tpXSkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYWN0MjAwMDogRGV0ZWN0ZWQgIgorCQkJCQkJIklTQSBjYXJkIGF0IHBvcnQgMHgleFxuIiwKKwkJCQkJCWFjdDIwMDBfaXNhX3BvcnRzW2ldKTsKKwkJCQkJYWN0MjAwMF9hbGxvY2NhcmQoYnVzLAorCQkJCQkJYWN0MjAwMF9pc2FfcG9ydHNbaV0sIGlycSwgaWQpOworCQkJCX0KKwkJCWJyZWFrOworCQljYXNlIEFDVDIwMDBfQlVTX01DQToKKwkJY2FzZSBBQ1QyMDAwX0JVU19QQ01DSUE6CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJImFjdDIwMDA6IGFkZGNhcmQ6IEludmFsaWQgQlVTIHR5cGUgJWRcbiIsIGJ1cyk7CiAJCX0KIAl9CiAJaWYgKCFjYXJkcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCmluZGV4IDMxZjkxYzEuLjI3ZDVkZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwpAQCAtNTUxLDkgKzU1MSw3IEBACiAgIGRidWcoMSxkcHJpbnRmKCJjb209JXgiLG1zZy0+aGVhZGVyLmNvbW1hbmQpKTsKIAogICBmb3Ioaj0wO2o8TUFYX01TR19QQVJNUysxO2orKykgbXNnX3Bhcm1zW2pdLmxlbmd0aCA9IDA7Ci0gIGZvcihpPTAsIHJldCA9IF9CQURfTVNHOwotICAgICAgaTwoc2l6ZW9mKGZ0YWJsZSkvc2l6ZW9mKHN0cnVjdCBfZnRhYmxlKSk7Ci0gICAgICBpKyspIHsKKyAgZm9yKGk9MCwgcmV0ID0gX0JBRF9NU0c7IGkgPCBBUlJBWV9TSVpFKGZ0YWJsZSk7IGkrKykgewogCiAgICAgaWYoZnRhYmxlW2ldLmNvbW1hbmQ9PW1zZy0+aGVhZGVyLmNvbW1hbmQpIHsKICAgICAgIC8qIGJyZWFrIGxvb3AgaWYgdGhlIG1lc3NhZ2UgaXMgY29ycmVjdCwgb3RoZXJ3aXNlIGNvbnRpbnVlIHNjYW4gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vb3NfNGJyaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL29zXzRicmkuYwppbmRleCBjOTY0YjhkLi5jYjc2MTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vb3NfNGJyaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9vc180YnJpLmMKQEAgLTE0OSw4ICsxNDksNyBAQAogCWRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqZGl2YV9jdXJyZW50OwogCWRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqYWRhcHRlcl9saXN0WzRdOwogCVBJU0ROX0FEQVBURVIgU2xhdmU7Ci0JdW5zaWduZWQgbG9uZyBiYXJfbGVuZ3RoW3NpemVvZihfNGJyaV9iYXJfbGVuZ3RoKSAvCi0JCQkJIHNpemVvZihfNGJyaV9iYXJfbGVuZ3RoWzBdKV07CisJdW5zaWduZWQgbG9uZyBiYXJfbGVuZ3RoW0FSUkFZX1NJWkUoXzRicmlfYmFyX2xlbmd0aCldOwogCWludCB2MiA9IF80YnJpX2lzX3Jldl8yX2NhcmQoYS0+Q2FyZE9yZGluYWwpOwogCWludCB0YXNrcyA9IF80YnJpX2lzX3Jldl8yX2JyaV9jYXJkKGEtPkNhcmRPcmRpbmFsKSA/IDEgOiBNUV9JTlNUQU5DRV9DT1VOVDsKIAlpbnQgZmFjdG9yID0gKHRhc2tzID09IDEpID8gMSA6IDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9LY29uZmlnCmluZGV4IDMwMjQ1NjYuLmJkZTU1ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9LY29uZmlnCkBAIC0zOSwzICszOSw1NCBAQAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFVTQiBJU0ROIFRBcyB3aXRoIENvbG9nbmUgQ2hpcCBBRydzCiAJICBIRkMtUyBVU0IgSVNETiBDb250cm9sbGVyCiAKK2NvbmZpZyBNSVNETl9BVk1GUklUWgorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBBVk0gRlJJVFohQ0FSRCBQQ0kiCisJZGVwZW5kcyBvbiBNSVNETgorCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IE1JU0ROX0lQQUMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgQVZNcyBGUklUWiFDQVJEIFBDSSBjYXJkcworCitjb25maWcgTUlTRE5fU1BFRURGQVgKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgU2VkbGJhdWVyIFNwZWVkZmF4KyIKKwlkZXBlbmRzIG9uIE1JU0ROCisJZGVwZW5kcyBvbiBQQ0kKKwlzZWxlY3QgTUlTRE5fSVBBQworCXNlbGVjdCBNSVNETl9JU0FSCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFNlZGxiYXVlciBTcGVlZGZheCsuCisKK2NvbmZpZyBNSVNETl9JTkZJTkVPTgorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBjYXJkcyB3aXRoIEluZmluZW9uIGNoaXBzZXQiCisJZGVwZW5kcyBvbiBNSVNETgorCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IE1JU0ROX0lQQUMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgY2FyZHMgd2l0aCBJU0FDICsgSFNDWCwgSVBBQyBvciBJUEFDLVNYCisJICBjaGlwIGZyb20gSW5maW5lb24gKGZvcm1lciBtYW51ZmFjdHVyZXIgU2llbWVucykuCisKK2NvbmZpZyBNSVNETl9XNjY5MgorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBjYXJkcyB3aXRoIFdpbmJvbmQgNjY5MiIKKwlkZXBlbmRzIG9uIE1JU0ROCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgV2luYm9uZCA2NjkyIFBDSSBjaGlwIGJhc2VkIGNhcmRzLgorCitjb25maWcgTUlTRE5fTkVUSkVUCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5FVEpldCBjYXJkcyIKKwlkZXBlbmRzIG9uIE1JU0ROCisJZGVwZW5kcyBvbiBQQ0kKKwlzZWxlY3QgTUlTRE5fSVBBQworCXNlbGVjdCBJU0ROX0hETEMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgVHJhdmVyc2UgVGVjaG5vbG9naWVzIE5FVEpldCBQQ0kgY2FyZHMuCisKKworY29uZmlnIE1JU0ROX0lQQUMKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gTUlTRE4KKworY29uZmlnIE1JU0ROX0lTQVIKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gTUlTRE4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL01ha2VmaWxlIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL01ha2VmaWxlCmluZGV4IGIwNDAzNTIuLjI5ODdkOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vTWFrZWZpbGUKQEAgLTYsMyArNiwxMSBAQAogb2JqLSQoQ09ORklHX01JU0ROX0hGQ1BDSSkgKz0gaGZjcGNpLm8KIG9iai0kKENPTkZJR19NSVNETl9IRkNNVUxUSSkgKz0gaGZjbXVsdGkubwogb2JqLSQoQ09ORklHX01JU0ROX0hGQ1VTQikgKz0gaGZjc3VzYi5vCitvYmotJChDT05GSUdfTUlTRE5fQVZNRlJJVFopICs9IGF2bWZyaXR6Lm8KK29iai0kKENPTkZJR19NSVNETl9TUEVFREZBWCkgKz0gc3BlZWRmYXgubworb2JqLSQoQ09ORklHX01JU0ROX0lORklORU9OKSArPSBtSVNETmluZmluZW9uLm8KK29iai0kKENPTkZJR19NSVNETl9XNjY5MikgKz0gdzY2OTIubworb2JqLSQoQ09ORklHX01JU0ROX05FVEpFVCkgKz0gbmV0amV0Lm8KKyMgY2hpcCBtb2R1bGVzCitvYmotJChDT05GSUdfTUlTRE5fSVBBQykgKz0gbUlTRE5pcGFjLm8KK29iai0kKENPTkZJR19NSVNETl9JU0FSKSArPSBtSVNETmlzYXIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2F2bWZyaXR6LmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vYXZtZnJpdHouYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWFjNTQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2F2bWZyaXR6LmMKQEAgLTAsMCArMSwxMTUyIEBACisvKgorICogYXZtX2ZyaXR6LmMgICAgbG93IGxldmVsIHN0dWZmIGZvciBBVk0gRlJJVFohQ0FSRCBQQ0kgSVNETiBjYXJkcworICogICAgICAgICAgICAgICAgVGhhbmtzIHRvIEFWTSwgQmVybGluIGZvciBpbmZvcm1hdGlvbnMKKyAqCisgKiBBdXRob3IgICAgICAgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgorICogQ29weXJpZ2h0IDIwMDkgIGJ5IEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbUlTRE5ody5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlICJpcGFjLmgiCisKKworI2RlZmluZSBBVk1GUklUWl9SRVYJIjIuMSIKKworc3RhdGljIGludCBBVk1fY250Oworc3RhdGljIGludCBkZWJ1ZzsKKworZW51bSB7CisJQVZNX0ZSSVRaX1BDSSwKKwlBVk1fRlJJVFpfUENJVjIsCit9OworCisjZGVmaW5lIEhETENfRklGTwkJMHgwCisjZGVmaW5lIEhETENfU1RBVFVTCQkweDQKKyNkZWZpbmUgQ0hJUF9XSU5ET1cJCTB4MTAKKworI2RlZmluZSBDSElQX0lOREVYCQkweDQKKyNkZWZpbmUgQVZNX0hETENfMQkJMHgwMAorI2RlZmluZSBBVk1fSERMQ18yCQkweDAxCisjZGVmaW5lIEFWTV9JU0FDX0ZJRk8JCTB4MDIKKyNkZWZpbmUgQVZNX0lTQUNfUkVHX0xPVwkweDA0CisjZGVmaW5lIEFWTV9JU0FDX1JFR19ISUdICTB4MDYKKworI2RlZmluZSBBVk1fU1RBVFVTMF9JUlFfSVNBQwkweDAxCisjZGVmaW5lIEFWTV9TVEFUVVMwX0lSUV9IRExDCTB4MDIKKyNkZWZpbmUgQVZNX1NUQVRVUzBfSVJRX1RJTUVSCTB4MDQKKyNkZWZpbmUgQVZNX1NUQVRVUzBfSVJRX01BU0sJMHgwNworCisjZGVmaW5lIEFWTV9TVEFUVVMwX1JFU0VUCTB4MDEKKyNkZWZpbmUgQVZNX1NUQVRVUzBfRElTX1RJTUVSCTB4MDIKKyNkZWZpbmUgQVZNX1NUQVRVUzBfUkVTX1RJTUVSCTB4MDQKKyNkZWZpbmUgQVZNX1NUQVRVUzBfRU5BX0lSUQkweDA4CisjZGVmaW5lIEFWTV9TVEFUVVMwX1RFU1RCSVQJMHgxMAorCisjZGVmaW5lIEFWTV9TVEFUVVMxX0lOVF9TRUwJMHgwZgorI2RlZmluZSBBVk1fU1RBVFVTMV9FTkFfSU9NCTB4ODAKKworI2RlZmluZSBIRExDX01PREVfSVRGX0ZMRwkweDAxCisjZGVmaW5lIEhETENfTU9ERV9UUkFOUwkJMHgwMgorI2RlZmluZSBIRExDX01PREVfQ0NSXzcJCTB4MDQKKyNkZWZpbmUgSERMQ19NT0RFX0NDUl8xNgkweDA4CisjZGVmaW5lIEhETENfTU9ERV9URVNUTE9PUAkweDgwCisKKyNkZWZpbmUgSERMQ19JTlRfWFBSCQkweDgwCisjZGVmaW5lIEhETENfSU5UX1hEVQkJMHg0MAorI2RlZmluZSBIRExDX0lOVF9SUFIJCTB4MjAKKyNkZWZpbmUgSERMQ19JTlRfTUFTSwkJMHhFMAorCisjZGVmaW5lIEhETENfU1RBVF9STUUJCTB4MDEKKyNkZWZpbmUgSERMQ19TVEFUX1JETwkJMHgxMAorI2RlZmluZSBIRExDX1NUQVRfQ1JDVkZSUkFCCTB4MEUKKyNkZWZpbmUgSERMQ19TVEFUX0NSQ1ZGUgkweDA2CisjZGVmaW5lIEhETENfU1RBVF9STUxfTUFTSwkweDNmMDAKKworI2RlZmluZSBIRExDX0NNRF9YUlMJCTB4ODAKKyNkZWZpbmUgSERMQ19DTURfWE1FCQkweDAxCisjZGVmaW5lIEhETENfQ01EX1JSUwkJMHgyMAorI2RlZmluZSBIRExDX0NNRF9YTUxfTUFTSwkweDNmMDAKKyNkZWZpbmUgSERMQ19GSUZPX1NJWkUJCTMyCisKKy8qIEZyaXR6IFBDSSB2Mi4wICovCisKKyNkZWZpbmUgQVZNX0hETENfRklGT18xCQkweDEwCisjZGVmaW5lIEFWTV9IRExDX0ZJRk9fMgkJMHgxOAorCisjZGVmaW5lIEFWTV9IRExDX1NUQVRVU18xCTB4MTQKKyNkZWZpbmUgQVZNX0hETENfU1RBVFVTXzIJMHgxYworCisjZGVmaW5lIEFWTV9JU0FDWF9JTkRFWAkJMHgwNAorI2RlZmluZSBBVk1fSVNBQ1hfREFUQQkJMHgwOAorCisvKiBkYXRhIHN0cnVjdCAqLworI2RlZmluZSBMT0dfU0laRQkJNjMKKworc3RydWN0IGhkbGNfc3RhdF9yZWcgeworI2lmZGVmIF9fQklHX0VORElBTgorCXU4IGZpbGw7CisJdTggbW9kZTsKKwl1OCB4bWw7CisJdTggY21kOworI2Vsc2UKKwl1OCBjbWQ7CisJdTggeG1sOworCXU4IG1vZGU7CisJdTggZmlsbDsKKyNlbmRpZgorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhkbGNfaHcgeworCXVuaW9uIHsKKwkJdTMyIGN0cmw7CisJCXN0cnVjdCBoZGxjX3N0YXRfcmVnIHNyOworCX0gY3RybDsKKwl1MzIgc3RhdDsKK307CisKK3N0cnVjdCBmcml0emNhcmQgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CisJY2hhcgkJCW5hbWVbTUlTRE5fTUFYX0lETEVOXTsKKwl1OAkJCXR5cGU7CisJdTgJCQljdHJscmVnOworCXUxNgkJCWlycTsKKwl1MzIJCQlpcnFjbnQ7CisJdTMyCQkJYWRkcjsKKwlzcGlubG9ja190CQlsb2NrOyAvKiBodyBsb2NrICovCisJc3RydWN0IGlzYWNfaHcJCWlzYWM7CisJc3RydWN0IGhkbGNfaHcJCWhkbGNbMl07CisJc3RydWN0IGJjaGFubmVsCQliY2hbMl07CisJY2hhcgkJCWxvZ1tMT0dfU0laRSArIDFdOworfTsKKworc3RhdGljIExJU1RfSEVBRChDYXJkcyk7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhjYXJkX2xvY2spOyAvKiBwcm90ZWN0IENhcmRzICovCisKK3N0YXRpYyB2b2lkCitfc2V0X2RlYnVnKHN0cnVjdCBmcml0emNhcmQgKmNhcmQpCit7CisJY2FyZC0+aXNhYy5kY2guZGVidWcgPSBkZWJ1ZzsKKwljYXJkLT5iY2hbMF0uZGVidWcgPSBkZWJ1ZzsKKwljYXJkLT5iY2hbMV0uZGVidWcgPSBkZWJ1ZzsKK30KKworc3RhdGljIGludAorc2V0X2RlYnVnKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZnJpdHpjYXJkICpjYXJkOworCisJcmV0ID0gcGFyYW1fc2V0X3VpbnQodmFsLCBrcCk7CisJaWYgKCFyZXQpIHsKKwkJcmVhZF9sb2NrKCZjYXJkX2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhcmQsICZDYXJkcywgbGlzdCkKKwkJCV9zZXRfZGVidWcoY2FyZCk7CisJCXJlYWRfdW5sb2NrKCZjYXJkX2xvY2spOworCX0KKwlyZXR1cm4gcmV0OworfQorCitNT0RVTEVfQVVUSE9SKCJLYXJzdGVuIEtlaWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9WRVJTSU9OKEFWTUZSSVRaX1JFVik7Cittb2R1bGVfcGFyYW1fY2FsbChkZWJ1Zywgc2V0X2RlYnVnLCBwYXJhbV9nZXRfdWludCwgJmRlYnVnLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiYXZtZnJpdHogZGVidWcgbWFzayIpOworCisvKiBJbnRlcmZhY2UgZnVuY3Rpb25zICovCisKK3N0YXRpYyB1OAorUmVhZElTQUNfVjEodm9pZCAqcCwgdTggb2Zmc2V0KQoreworCXN0cnVjdCBmcml0emNhcmQgKmZjID0gcDsKKwl1OCBpZHggPSAob2Zmc2V0ID4gMHgyZikgPyBBVk1fSVNBQ19SRUdfSElHSCA6IEFWTV9JU0FDX1JFR19MT1c7CisKKwlvdXRiKGlkeCwgZmMtPmFkZHIgKyBDSElQX0lOREVYKTsKKwlyZXR1cm4gaW5iKGZjLT5hZGRyICsgQ0hJUF9XSU5ET1cgKyAob2Zmc2V0ICYgMHhmKSk7Cit9CisKK3N0YXRpYyB2b2lkCitXcml0ZUlTQUNfVjEodm9pZCAqcCwgdTggb2Zmc2V0LCB1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZnJpdHpjYXJkICpmYyA9IHA7CisJdTggaWR4ID0gKG9mZnNldCA+IDB4MmYpID8gQVZNX0lTQUNfUkVHX0hJR0ggOiBBVk1fSVNBQ19SRUdfTE9XOworCisJb3V0YihpZHgsIGZjLT5hZGRyICsgQ0hJUF9JTkRFWCk7CisJb3V0Yih2YWx1ZSwgZmMtPmFkZHIgKyBDSElQX1dJTkRPVyArIChvZmZzZXQgJiAweGYpKTsKK30KKworc3RhdGljIHZvaWQKK1JlYWRGaUZvSVNBQ19WMSh2b2lkICpwLCB1OCBvZmYsIHU4ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgZnJpdHpjYXJkICpmYyA9IHA7CisKKwlvdXRiKEFWTV9JU0FDX0ZJRk8sIGZjLT5hZGRyICsgQ0hJUF9JTkRFWCk7CisJaW5zYihmYy0+YWRkciArIENISVBfV0lORE9XLCBkYXRhLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlRmlGb0lTQUNfVjEodm9pZCAqcCwgdTggb2ZmLCB1OCAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBwOworCisJb3V0YihBVk1fSVNBQ19GSUZPLCBmYy0+YWRkciArIENISVBfSU5ERVgpOworCW91dHNiKGZjLT5hZGRyICsgQ0hJUF9XSU5ET1csIGRhdGEsIHNpemUpOworfQorCitzdGF0aWMgdTgKK1JlYWRJU0FDX1YyKHZvaWQgKnAsIHU4IG9mZnNldCkKK3sKKwlzdHJ1Y3QgZnJpdHpjYXJkICpmYyA9IHA7CisKKwlvdXRsKG9mZnNldCwgZmMtPmFkZHIgKyBBVk1fSVNBQ1hfSU5ERVgpOworCXJldHVybiAweGZmICYgaW5sKGZjLT5hZGRyICsgQVZNX0lTQUNYX0RBVEEpOworfQorCitzdGF0aWMgdm9pZAorV3JpdGVJU0FDX1YyKHZvaWQgKnAsIHU4IG9mZnNldCwgdTggdmFsdWUpCit7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBwOworCisJb3V0bChvZmZzZXQsIGZjLT5hZGRyICsgQVZNX0lTQUNYX0lOREVYKTsKKwlvdXRsKHZhbHVlLCBmYy0+YWRkciArIEFWTV9JU0FDWF9EQVRBKTsKK30KKworc3RhdGljIHZvaWQKK1JlYWRGaUZvSVNBQ19WMih2b2lkICpwLCB1OCBvZmYsIHU4ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgZnJpdHpjYXJkICpmYyA9IHA7CisJaW50IGk7CisKKwlvdXRsKG9mZiwgZmMtPmFkZHIgKyBBVk1fSVNBQ1hfSU5ERVgpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCWRhdGFbaV0gPSAweGZmICYgaW5sKGZjLT5hZGRyICsgQVZNX0lTQUNYX0RBVEEpOworfQorCitzdGF0aWMgdm9pZAorV3JpdGVGaUZvSVNBQ19WMih2b2lkICpwLCB1OCBvZmYsIHU4ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgZnJpdHpjYXJkICpmYyA9IHA7CisJaW50IGk7CisKKwlvdXRsKG9mZiwgZmMtPmFkZHIgKyBBVk1fSVNBQ1hfSU5ERVgpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCW91dGwoZGF0YVtpXSwgZmMtPmFkZHIgKyBBVk1fSVNBQ1hfREFUQSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmNoYW5uZWwgKgorU2VsX0JDUyhzdHJ1Y3QgZnJpdHpjYXJkICpmYywgdTMyIGNoYW5uZWwpCit7CisJaWYgKHRlc3RfYml0KEZMR19BQ1RJVkUsICZmYy0+YmNoWzBdLkZsYWdzKSAmJgorCQkoZmMtPmJjaFswXS5uciAmIGNoYW5uZWwpKQorCQlyZXR1cm4gJmZjLT5iY2hbMF07CisJZWxzZSBpZiAodGVzdF9iaXQoRkxHX0FDVElWRSwgJmZjLT5iY2hbMV0uRmxhZ3MpICYmCisJCShmYy0+YmNoWzFdLm5yICYgY2hhbm5lbCkpCisJCXJldHVybiAmZmMtPmJjaFsxXTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19fd3JpdGVfY3RybF9wY2koc3RydWN0IGZyaXR6Y2FyZCAqZmMsIHN0cnVjdCBoZGxjX2h3ICpoZGxjLCB1MzIgY2hhbm5lbCkgeworCXUzMiBpZHggPSBjaGFubmVsID09IDIgPyBBVk1fSERMQ18yIDogQVZNX0hETENfMTsKKworCW91dGwoaWR4LCBmYy0+YWRkciArIENISVBfSU5ERVgpOworCW91dGwoaGRsYy0+Y3RybC5jdHJsLCBmYy0+YWRkciArIENISVBfV0lORE9XICsgSERMQ19TVEFUVVMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19fd3JpdGVfY3RybF9wY2l2MihzdHJ1Y3QgZnJpdHpjYXJkICpmYywgc3RydWN0IGhkbGNfaHcgKmhkbGMsIHUzMiBjaGFubmVsKSB7CisJb3V0bChoZGxjLT5jdHJsLmN0cmwsIGZjLT5hZGRyICsgKGNoYW5uZWwgPT0gMiA/IEFWTV9IRExDX1NUQVRVU18yIDoKKwkJQVZNX0hETENfU1RBVFVTXzEpKTsKK30KKwordm9pZAord3JpdGVfY3RybChzdHJ1Y3QgYmNoYW5uZWwgKmJjaCwgaW50IHdoaWNoKSB7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBiY2gtPmh3OworCXN0cnVjdCBoZGxjX2h3ICpoZGxjOworCisJaGRsYyA9ICZmYy0+aGRsY1soYmNoLT5uciAtIDEpICYgMV07CisJcHJfZGVidWcoIiVzOiBoZGxjICVjIHdyJXggY3RybCAleFxuIiwgZmMtPm5hbWUsICdAJyArIGJjaC0+bnIsCisJCXdoaWNoLCBoZGxjLT5jdHJsLmN0cmwpOworCXN3aXRjaCAoZmMtPnR5cGUpIHsKKwljYXNlIEFWTV9GUklUWl9QQ0lWMjoKKwkJX193cml0ZV9jdHJsX3BjaXYyKGZjLCBoZGxjLCBiY2gtPm5yKTsKKwkJYnJlYWs7CisJY2FzZSBBVk1fRlJJVFpfUENJOgorCQlfX3dyaXRlX2N0cmxfcGNpKGZjLCBoZGxjLCBiY2gtPm5yKTsKKwkJYnJlYWs7CisJfQorfQorCisKK3N0YXRpYyBpbmxpbmUgdTMyCitfX3JlYWRfc3RhdHVzX3BjaSh1X2xvbmcgYWRkciwgdTMyIGNoYW5uZWwpCit7CisJb3V0bChjaGFubmVsID09IDIgPyBBVk1fSERMQ18yIDogQVZNX0hETENfMSwgYWRkciArIENISVBfSU5ERVgpOworCXJldHVybiBpbmwoYWRkciArIENISVBfV0lORE9XICsgSERMQ19TVEFUVVMpOworfQorCitzdGF0aWMgaW5saW5lIHUzMgorX19yZWFkX3N0YXR1c19wY2l2Mih1X2xvbmcgYWRkciwgdTMyIGNoYW5uZWwpCit7CisJcmV0dXJuIGlubChhZGRyICsgKGNoYW5uZWwgPT0gMiA/IEFWTV9IRExDX1NUQVRVU18yIDoKKwkJQVZNX0hETENfU1RBVFVTXzEpKTsKK30KKworCitzdGF0aWMgdTMyCityZWFkX3N0YXR1cyhzdHJ1Y3QgZnJpdHpjYXJkICpmYywgdTMyIGNoYW5uZWwpCit7CisJc3dpdGNoIChmYy0+dHlwZSkgeworCWNhc2UgQVZNX0ZSSVRaX1BDSVYyOgorCQlyZXR1cm4gX19yZWFkX3N0YXR1c19wY2l2MihmYy0+YWRkciwgY2hhbm5lbCk7CisJY2FzZSBBVk1fRlJJVFpfUENJOgorCQlyZXR1cm4gX19yZWFkX3N0YXR1c19wY2koZmMtPmFkZHIsIGNoYW5uZWwpOworCX0KKwkvKiBkdW1teSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZW5hYmxlX2h3aXJxKHN0cnVjdCBmcml0emNhcmQgKmZjKQoreworCWZjLT5jdHJscmVnIHw9IEFWTV9TVEFUVVMwX0VOQV9JUlE7CisJb3V0YihmYy0+Y3RybHJlZywgZmMtPmFkZHIgKyAyKTsKK30KKworc3RhdGljIHZvaWQKK2Rpc2FibGVfaHdpcnEoc3RydWN0IGZyaXR6Y2FyZCAqZmMpCit7CisJZmMtPmN0cmxyZWcgJj0gfkFWTV9TVEFUVVMwX0VOQV9JUlE7CisJb3V0YihmYy0+Y3RybHJlZywgZmMtPmFkZHIgKyAyKTsKK30KKworc3RhdGljIGludAorbW9kZWhkbGMoc3RydWN0IGJjaGFubmVsICpiY2gsIGludCBwcm90b2NvbCkKK3sKKwlzdHJ1Y3QgZnJpdHpjYXJkICpmYyA9IGJjaC0+aHc7CisJc3RydWN0IGhkbGNfaHcgKmhkbGM7CisKKwloZGxjID0gJmZjLT5oZGxjWyhiY2gtPm5yIC0gMSkgJiAxXTsKKwlwcl9kZWJ1ZygiJXM6IGhkbGMgJWMgcHJvdG9jb2wgJXgtLT4leCBjaCAlZFxuIiwgZmMtPm5hbWUsCisJCSdAJyArIGJjaC0+bnIsIGJjaC0+c3RhdGUsIHByb3RvY29sLCBiY2gtPm5yKTsKKwloZGxjLT5jdHJsLmN0cmwgPSAwOworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIC0xOiAvKiB1c2VkIGZvciBpbml0ICovCisJCWJjaC0+c3RhdGUgPSAtMTsKKwljYXNlIElTRE5fUF9OT05FOgorCQlpZiAoYmNoLT5zdGF0ZSA9PSBJU0ROX1BfTk9ORSkKKwkJCWJyZWFrOworCQloZGxjLT5jdHJsLnNyLmNtZCAgPSBIRExDX0NNRF9YUlMgfCBIRExDX0NNRF9SUlM7CisJCWhkbGMtPmN0cmwuc3IubW9kZSA9IEhETENfTU9ERV9UUkFOUzsKKwkJd3JpdGVfY3RybChiY2gsIDUpOworCQliY2gtPnN0YXRlID0gSVNETl9QX05PTkU7CisJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfSERMQywgJmJjaC0+RmxhZ3MpOworCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmYmNoLT5GbGFncyk7CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfUkFXOgorCQliY2gtPnN0YXRlID0gcHJvdG9jb2w7CisJCWhkbGMtPmN0cmwuc3IuY21kICA9IEhETENfQ01EX1hSUyB8IEhETENfQ01EX1JSUzsKKwkJaGRsYy0+Y3RybC5zci5tb2RlID0gSERMQ19NT0RFX1RSQU5TOworCQl3cml0ZV9jdHJsKGJjaCwgNSk7CisJCWhkbGMtPmN0cmwuc3IuY21kID0gSERMQ19DTURfWFJTOworCQl3cml0ZV9jdHJsKGJjaCwgMSk7CisJCWhkbGMtPmN0cmwuc3IuY21kID0gMDsKKwkJdGVzdF9hbmRfc2V0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZiY2gtPkZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBJU0ROX1BfQl9IRExDOgorCQliY2gtPnN0YXRlID0gcHJvdG9jb2w7CisJCWhkbGMtPmN0cmwuc3IuY21kICA9IEhETENfQ01EX1hSUyB8IEhETENfQ01EX1JSUzsKKwkJaGRsYy0+Y3RybC5zci5tb2RlID0gSERMQ19NT0RFX0lURl9GTEc7CisJCXdyaXRlX2N0cmwoYmNoLCA1KTsKKwkJaGRsYy0+Y3RybC5zci5jbWQgPSBIRExDX0NNRF9YUlM7CisJCXdyaXRlX2N0cmwoYmNoLCAxKTsKKwkJaGRsYy0+Y3RybC5zci5jbWQgPSAwOworCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19IRExDLCAmYmNoLT5GbGFncyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiBwcm90b2NvbCBub3Qga25vd24gJXhcbiIsIGZjLT5uYW1lLCBwcm90b2NvbCk7CisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraGRsY19lbXB0eV9maWZvKHN0cnVjdCBiY2hhbm5lbCAqYmNoLCBpbnQgY291bnQpCit7CisJdTMyICpwdHI7CisJdTggKnA7CisJdTMyICB2YWwsIGFkZHI7CisJaW50IGNudCA9IDA7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBiY2gtPmh3OworCisJcHJfZGVidWcoIiVzOiAlcyAlZFxuIiwgZmMtPm5hbWUsIF9fZnVuY19fLCBjb3VudCk7CisJaWYgKCFiY2gtPnJ4X3NrYikgeworCQliY2gtPnJ4X3NrYiA9IG1JX2FsbG9jX3NrYihiY2gtPm1heGxlbiwgR0ZQX0FUT01JQyk7CisJCWlmICghYmNoLT5yeF9za2IpIHsKKwkJCXByX2luZm8oIiVzOiBCIHJlY2VpdmUgb3V0IG9mIG1lbW9yeVxuIiwKKwkJCQlmYy0+bmFtZSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJaWYgKChiY2gtPnJ4X3NrYi0+bGVuICsgY291bnQpID4gYmNoLT5tYXhsZW4pIHsKKwkJcHJfZGVidWcoIiVzOiBvdmVycnVuICVkXG4iLCBmYy0+bmFtZSwKKwkJCWJjaC0+cnhfc2tiLT5sZW4gKyBjb3VudCk7CisJCXJldHVybjsKKwl9CisJcCA9IHNrYl9wdXQoYmNoLT5yeF9za2IsIGNvdW50KTsKKwlwdHIgPSAodTMyICopcDsKKwlpZiAoQVZNX0ZSSVRaX1BDSVYyID09IGZjLT50eXBlKQorCQlhZGRyID0gZmMtPmFkZHIgKyAoYmNoLT5uciA9PSAyID8KKwkJCUFWTV9IRExDX0ZJRk9fMiA6IEFWTV9IRExDX0ZJRk9fMSk7CisJZWxzZSB7CisJCWFkZHIgPSBmYy0+YWRkciArIENISVBfV0lORE9XOworCQlvdXRsKGJjaC0+bnIgPT0gMiA/IEFWTV9IRExDXzIgOiBBVk1fSERMQ18xLCBmYy0+YWRkcik7CisJfQorCXdoaWxlIChjbnQgPCBjb3VudCkgeworCQl2YWwgPSBsZTMyX3RvX2NwdShpbmwoYWRkcikpOworCQlwdXRfdW5hbGlnbmVkKHZhbCwgcHRyKTsKKwkJcHRyKys7CisJCWNudCArPSA0OworCX0KKwlpZiAoZGVidWcgJiBERUJVR19IV19CRklGTykgeworCQlzbnByaW50ZihmYy0+bG9nLCBMT0dfU0laRSwgIkIlMWQtcmVjdiAlcyAlZCAiLAorCQkJYmNoLT5uciwgZmMtPm5hbWUsIGNvdW50KTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoZmMtPmxvZywgRFVNUF9QUkVGSVhfT0ZGU0VULCBwLCBjb3VudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraGRsY19maWxsX2ZpZm8oc3RydWN0IGJjaGFubmVsICpiY2gpCit7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBiY2gtPmh3OworCXN0cnVjdCBoZGxjX2h3ICpoZGxjOworCWludCBjb3VudCwgY250ID0gMDsKKwl1OCAqcDsKKwl1MzIgKnB0ciwgdmFsLCBhZGRyOworCisJaGRsYyA9ICZmYy0+aGRsY1soYmNoLT5uciAtIDEpICYgMV07CisJaWYgKCFiY2gtPnR4X3NrYikKKwkJcmV0dXJuOworCWNvdW50ID0gYmNoLT50eF9za2ItPmxlbiAtIGJjaC0+dHhfaWR4OworCWlmIChjb3VudCA8PSAwKQorCQlyZXR1cm47CisJcCA9IGJjaC0+dHhfc2tiLT5kYXRhICsgYmNoLT50eF9pZHg7CisJaGRsYy0+Y3RybC5zci5jbWQgJj0gfkhETENfQ01EX1hNRTsKKwlpZiAoY291bnQgPiBIRExDX0ZJRk9fU0laRSkgeworCQljb3VudCA9IEhETENfRklGT19TSVpFOworCX0gZWxzZSB7CisJCWlmICh0ZXN0X2JpdChGTEdfSERMQywgJmJjaC0+RmxhZ3MpKQorCQkJaGRsYy0+Y3RybC5zci5jbWQgfD0gSERMQ19DTURfWE1FOworCX0KKwlwcl9kZWJ1ZygiJXM6ICVzICVkLyVkLyVkIiwgZmMtPm5hbWUsIF9fZnVuY19fLCBjb3VudCwKKwkJYmNoLT50eF9pZHgsIGJjaC0+dHhfc2tiLT5sZW4pOworCXB0ciA9ICh1MzIgKilwOworCWJjaC0+dHhfaWR4ICs9IGNvdW50OworCWhkbGMtPmN0cmwuc3IueG1sID0gKChjb3VudCA9PSBIRExDX0ZJRk9fU0laRSkgPyAwIDogY291bnQpOworCWlmIChBVk1fRlJJVFpfUENJVjIgPT0gZmMtPnR5cGUpIHsKKwkJX193cml0ZV9jdHJsX3BjaXYyKGZjLCBoZGxjLCBiY2gtPm5yKTsKKwkJYWRkciA9IGZjLT5hZGRyICsgKGJjaC0+bnIgPT0gMiA/CisJCQlBVk1fSERMQ19GSUZPXzIgOiBBVk1fSERMQ19GSUZPXzEpOworCX0gZWxzZSB7CisJCV9fd3JpdGVfY3RybF9wY2koZmMsIGhkbGMsIGJjaC0+bnIpOworCQlhZGRyID0gZmMtPmFkZHIgKyBDSElQX1dJTkRPVzsKKwl9CisJd2hpbGUgKGNudCA8IGNvdW50KSB7CisJCXZhbCA9IGdldF91bmFsaWduZWQocHRyKTsKKwkJb3V0bChjcHVfdG9fbGUzMih2YWwpLCBhZGRyKTsKKwkJcHRyKys7CisJCWNudCArPSA0OworCX0KKwlpZiAoZGVidWcgJiBERUJVR19IV19CRklGTykgeworCQlzbnByaW50ZihmYy0+bG9nLCBMT0dfU0laRSwgIkIlMWQtc2VuZCAlcyAlZCAiLAorCQkJYmNoLT5uciwgZmMtPm5hbWUsIGNvdW50KTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoZmMtPmxvZywgRFVNUF9QUkVGSVhfT0ZGU0VULCBwLCBjb3VudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorSERMQ19pcnFfeHByKHN0cnVjdCBiY2hhbm5lbCAqYmNoKQoreworCWlmIChiY2gtPnR4X3NrYiAmJiBiY2gtPnR4X2lkeCA8IGJjaC0+dHhfc2tiLT5sZW4pCisJCWhkbGNfZmlsbF9maWZvKGJjaCk7CisJZWxzZSB7CisJCWlmIChiY2gtPnR4X3NrYikgeworCQkJLyogc2VuZCBjb25maXJtLCBvbiB0cmFucywgZnJlZSBvbiBoZGxjLiAqLworCQkJaWYgKHRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJmJjaC0+RmxhZ3MpKQorCQkJCWNvbmZpcm1fQnNlbmQoYmNoKTsKKwkJCWRldl9rZnJlZV9za2IoYmNoLT50eF9za2IpOworCQl9CisJCWlmIChnZXRfbmV4dF9iZnJhbWUoYmNoKSkKKwkJCWhkbGNfZmlsbF9maWZvKGJjaCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorSERMQ19pcnEoc3RydWN0IGJjaGFubmVsICpiY2gsIHUzMiBzdGF0KQoreworCXN0cnVjdCBmcml0emNhcmQgKmZjID0gYmNoLT5odzsKKwlpbnQJCWxlbjsKKwlzdHJ1Y3QgaGRsY19odwkqaGRsYzsKKworCWhkbGMgPSAmZmMtPmhkbGNbKGJjaC0+bnIgLSAxKSAmIDFdOworCXByX2RlYnVnKCIlczogY2glZCBzdGF0ICUjeFxuIiwgZmMtPm5hbWUsIGJjaC0+bnIsIHN0YXQpOworCWlmIChzdGF0ICYgSERMQ19JTlRfUlBSKSB7CisJCWlmIChzdGF0ICYgSERMQ19TVEFUX1JETykgeworCQkJaGRsYy0+Y3RybC5zci54bWwgPSAwOworCQkJaGRsYy0+Y3RybC5zci5jbWQgfD0gSERMQ19DTURfUlJTOworCQkJd3JpdGVfY3RybChiY2gsIDEpOworCQkJaGRsYy0+Y3RybC5zci5jbWQgJj0gfkhETENfQ01EX1JSUzsKKwkJCXdyaXRlX2N0cmwoYmNoLCAxKTsKKwkJCWlmIChiY2gtPnJ4X3NrYikKKwkJCQlza2JfdHJpbShiY2gtPnJ4X3NrYiwgMCk7CisJCX0gZWxzZSB7CisJCQlsZW4gPSAoc3RhdCAmIEhETENfU1RBVF9STUxfTUFTSykgPj4gODsKKwkJCWlmICghbGVuKQorCQkJCWxlbiA9IDMyOworCQkJaGRsY19lbXB0eV9maWZvKGJjaCwgbGVuKTsKKwkJCWlmICghYmNoLT5yeF9za2IpCisJCQkJZ290byBoYW5kbGVfdHg7CisJCQlpZiAoKHN0YXQgJiBIRExDX1NUQVRfUk1FKSB8fCB0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsCisJCQkgICAgJmJjaC0+RmxhZ3MpKSB7CisJCQkJaWYgKCgoc3RhdCAmIEhETENfU1RBVF9DUkNWRlJSQUIpID09CisJCQkJICAgIEhETENfU1RBVF9DUkNWRlIpIHx8CisJCQkJICAgIHRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJmJjaC0+RmxhZ3MpKSB7CisJCQkJCXJlY3ZfQmNoYW5uZWwoYmNoLCAwKTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcl9kZWJ1ZygiJXM6IGdvdCBpbnZhbGlkIGZyYW1lXG4iLAorCQkJCQkJZmMtPm5hbWUpOworCQkJCQlza2JfdHJpbShiY2gtPnJ4X3NrYiwgMCk7CisJCQkJfQorCQkJfQorCQl9CisJfQoraGFuZGxlX3R4OgorCWlmIChzdGF0ICYgSERMQ19JTlRfWERVKSB7CisJCS8qIEhlcmUgd2UgbG9zdCBhbiBUWCBpbnRlcnJ1cHQsIHNvCisJCSAqIHJlc3RhcnQgdHJhbnNtaXR0aW5nIHRoZSB3aG9sZSBmcmFtZSBvbiBIRExDCisJCSAqIGluIHRyYW5zcGFyZW50IG1vZGUgd2Ugc2VuZCB0aGUgbmV4dCBkYXRhCisJCSAqLworCQlpZiAoYmNoLT50eF9za2IpCisJCQlwcl9kZWJ1ZygiJXM6IGNoJWQgWERVIGxlbiglZCkgaWR4KCVkKSBGbGFncyglbHgpXG4iLAorCQkJCWZjLT5uYW1lLCBiY2gtPm5yLCBiY2gtPnR4X3NrYi0+bGVuLAorCQkJCWJjaC0+dHhfaWR4LCBiY2gtPkZsYWdzKTsKKwkJZWxzZQorCQkJcHJfZGVidWcoIiVzOiBjaCVkIFhEVSBubyB0eF9za2IgRmxhZ3MoJWx4KVxuIiwKKwkJCQlmYy0+bmFtZSwgYmNoLT5uciwgYmNoLT5GbGFncyk7CisJCWlmIChiY2gtPnR4X3NrYiAmJiBiY2gtPnR4X3NrYi0+bGVuKSB7CisJCQlpZiAoIXRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJmJjaC0+RmxhZ3MpKQorCQkJCWJjaC0+dHhfaWR4ID0gMDsKKwkJfQorCQloZGxjLT5jdHJsLnNyLnhtbCA9IDA7CisJCWhkbGMtPmN0cmwuc3IuY21kIHw9IEhETENfQ01EX1hSUzsKKwkJd3JpdGVfY3RybChiY2gsIDEpOworCQloZGxjLT5jdHJsLnNyLmNtZCAmPSB+SERMQ19DTURfWFJTOworCQlIRExDX2lycV94cHIoYmNoKTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoc3RhdCAmIEhETENfSU5UX1hQUikKKwkJSERMQ19pcnFfeHByKGJjaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorSERMQ19pcnFfbWFpbihzdHJ1Y3QgZnJpdHpjYXJkICpmYykKK3sKKwl1MzIgc3RhdDsKKwlzdHJ1Y3QgYmNoYW5uZWwgKmJjaDsKKworCXN0YXQgPSByZWFkX3N0YXR1cyhmYywgMSk7CisJaWYgKHN0YXQgJiBIRExDX0lOVF9NQVNLKSB7CisJCWJjaCA9IFNlbF9CQ1MoZmMsIDEpOworCQlpZiAoYmNoKQorCQkJSERMQ19pcnEoYmNoLCBzdGF0KTsKKwkJZWxzZQorCQkJcHJfZGVidWcoIiVzOiBzcHVyaW91cyBjaDEgSVJRXG4iLCBmYy0+bmFtZSk7CisJfQorCXN0YXQgPSByZWFkX3N0YXR1cyhmYywgMik7CisJaWYgKHN0YXQgJiBIRExDX0lOVF9NQVNLKSB7CisJCWJjaCA9IFNlbF9CQ1MoZmMsIDIpOworCQlpZiAoYmNoKQorCQkJSERMQ19pcnEoYmNoLCBzdGF0KTsKKwkJZWxzZQorCQkJcHJfZGVidWcoIiVzOiBzcHVyaW91cyBjaDIgSVJRXG4iLCBmYy0+bmFtZSk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK2F2bV9mcml0el9pbnRlcnJ1cHQoaW50IGludG5vLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBkZXZfaWQ7CisJdTggdmFsOworCXU4IHN2YWw7CisKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKKwlzdmFsID0gaW5iKGZjLT5hZGRyICsgMik7CisJcHJfZGVidWcoIiVzOiBpcnEgc3RhdDAgJXhcbiIsIGZjLT5uYW1lLCBzdmFsKTsKKwlpZiAoKHN2YWwgJiBBVk1fU1RBVFVTMF9JUlFfTUFTSykgPT0gQVZNX1NUQVRVUzBfSVJRX01BU0spIHsKKwkJLyogc2hhcmVkICBJUlEgZnJvbSBvdGhlciBIVyAqLworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCWZjLT5pcnFjbnQrKzsKKworCWlmICghKHN2YWwgJiBBVk1fU1RBVFVTMF9JUlFfSVNBQykpIHsKKwkJdmFsID0gUmVhZElTQUNfVjEoZmMsIElTQUNfSVNUQSk7CisJCW1JU0ROaXNhY19pcnEoJmZjLT5pc2FjLCB2YWwpOworCX0KKwlpZiAoIShzdmFsICYgQVZNX1NUQVRVUzBfSVJRX0hETEMpKQorCQlIRExDX2lycV9tYWluKGZjKTsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90Cithdm1fZnJpdHp2Ml9pbnRlcnJ1cHQoaW50IGludG5vLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBkZXZfaWQ7CisJdTggdmFsOworCXU4IHN2YWw7CisKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKKwlzdmFsID0gaW5iKGZjLT5hZGRyICsgMik7CisJcHJfZGVidWcoIiVzOiBpcnEgc3RhdDAgJXhcbiIsIGZjLT5uYW1lLCBzdmFsKTsKKwlpZiAoIShzdmFsICYgQVZNX1NUQVRVUzBfSVJRX01BU0spKSB7CisJCS8qIHNoYXJlZCAgSVJRIGZyb20gb3RoZXIgSFcgKi8KKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwlmYy0+aXJxY250Kys7CisKKwlpZiAoc3ZhbCAmIEFWTV9TVEFUVVMwX0lSUV9IRExDKQorCQlIRExDX2lycV9tYWluKGZjKTsKKwlpZiAoc3ZhbCAmIEFWTV9TVEFUVVMwX0lSUV9JU0FDKSB7CisJCXZhbCA9IFJlYWRJU0FDX1YyKGZjLCBJU0FDWF9JU1RBKTsKKwkJbUlTRE5pc2FjX2lycSgmZmMtPmlzYWMsIHZhbCk7CisJfQorCWlmIChzdmFsICYgQVZNX1NUQVRVUzBfSVJRX1RJTUVSKSB7CisJCXByX2RlYnVnKCIlczogdGltZXIgaXJxXG4iLCBmYy0+bmFtZSk7CisJCW91dGIoZmMtPmN0cmxyZWcgfCBBVk1fU1RBVFVTMF9SRVNfVElNRVIsIGZjLT5hZGRyICsgMik7CisJCXVkZWxheSgxKTsKKwkJb3V0YihmYy0+Y3RybHJlZywgZmMtPmFkZHIgKyAyKTsKKwl9CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQKK2F2bV9sMmwxQihzdHJ1Y3QgbUlTRE5jaGFubmVsICpjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgYmNoYW5uZWwgKmJjaCA9IGNvbnRhaW5lcl9vZihjaCwgc3RydWN0IGJjaGFubmVsLCBjaCk7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBiY2gtPmh3OworCWludCByZXQgPSAtRUlOVkFMOworCXN0cnVjdCBtSVNETmhlYWQgKmhoID0gbUlTRE5fSEVBRF9QKHNrYik7CisJdTMyIGlkOworCXVfbG9uZyBmbGFnczsKKworCXN3aXRjaCAoaGgtPnByaW0pIHsKKwljYXNlIFBIX0RBVEFfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmZmMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0ID0gYmNoYW5uZWxfc2VuZGRhdGEoYmNoLCBza2IpOworCQlpZiAocmV0ID4gMCkgeyAvKiBkaXJlY3QgVFggKi8KKwkJCWlkID0gaGgtPmlkOyAvKiBza2IgY2FuIGJlIGZyZWVkICovCisJCQloZGxjX2ZpbGxfZmlmbyhiY2gpOworCQkJcmV0ID0gMDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZjLT5sb2NrLCBmbGFncyk7CisJCQlpZiAoIXRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJmJjaC0+RmxhZ3MpKQorCQkJCXF1ZXVlX2NoX2ZyYW1lKGNoLCBQSF9EQVRBX0NORiwgaWQsIE5VTEwpOworCQl9IGVsc2UKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZjLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiByZXQ7CisJY2FzZSBQSF9BQ1RJVkFURV9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZmYy0+bG9jaywgZmxhZ3MpOworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoRkxHX0FDVElWRSwgJmJjaC0+RmxhZ3MpKQorCQkJcmV0ID0gbW9kZWhkbGMoYmNoLCBjaC0+cHJvdG9jb2wpOworCQllbHNlCisJCQlyZXQgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmYy0+bG9jaywgZmxhZ3MpOworCQlpZiAoIXJldCkKKwkJCV9xdWV1ZV9kYXRhKGNoLCBQSF9BQ1RJVkFURV9JTkQsIE1JU0ROX0lEX0FOWSwgMCwKKwkJCQlOVUxMLCBHRlBfS0VSTkVMKTsKKwkJYnJlYWs7CisJY2FzZSBQSF9ERUFDVElWQVRFX1JFUToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmZjLT5sb2NrLCBmbGFncyk7CisJCW1JU0ROX2NsZWFyX2JjaGFubmVsKGJjaCk7CisJCW1vZGVoZGxjKGJjaCwgSVNETl9QX05PTkUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmYy0+bG9jaywgZmxhZ3MpOworCQlfcXVldWVfZGF0YShjaCwgUEhfREVBQ1RJVkFURV9JTkQsIE1JU0ROX0lEX0FOWSwgMCwKKwkJCU5VTEwsIEdGUF9LRVJORUwpOworCQlyZXQgPSAwOworCQlicmVhazsKKwl9CisJaWYgKCFyZXQpCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAoraW5pdGhkbGMoc3RydWN0IGZyaXR6Y2FyZCAqZmMpCit7CisJbW9kZWhkbGMoJmZjLT5iY2hbMF0sIC0xKTsKKwltb2RlaGRsYygmZmMtPmJjaFsxXSwgLTEpOworfQorCit2b2lkCitjbGVhcl9wZW5kaW5nX2hkbGNfaW50cyhzdHJ1Y3QgZnJpdHpjYXJkICpmYykKK3sKKwl1MzIgdmFsOworCisJdmFsID0gcmVhZF9zdGF0dXMoZmMsIDEpOworCXByX2RlYnVnKCIlczogSERMQyAxIFNUQSAleFxuIiwgZmMtPm5hbWUsIHZhbCk7CisJdmFsID0gcmVhZF9zdGF0dXMoZmMsIDIpOworCXByX2RlYnVnKCIlczogSERMQyAyIFNUQSAleFxuIiwgZmMtPm5hbWUsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkCityZXNldF9hdm0oc3RydWN0IGZyaXR6Y2FyZCAqZmMpCit7CisJc3dpdGNoIChmYy0+dHlwZSkgeworCWNhc2UgQVZNX0ZSSVRaX1BDSToKKwkJZmMtPmN0cmxyZWcgPSBBVk1fU1RBVFVTMF9SRVNFVCB8IEFWTV9TVEFUVVMwX0RJU19USU1FUjsKKwkJYnJlYWs7CisJY2FzZSBBVk1fRlJJVFpfUENJVjI6CisJCWZjLT5jdHJscmVnID0gQVZNX1NUQVRVUzBfUkVTRVQ7CisJCWJyZWFrOworCX0KKwlpZiAoZGVidWcgJiBERUJVR19IVykKKwkJcHJfbm90aWNlKCIlczogcmVzZXRcbiIsIGZjLT5uYW1lKTsKKwlkaXNhYmxlX2h3aXJxKGZjKTsKKwltZGVsYXkoNSk7CisJc3dpdGNoIChmYy0+dHlwZSkgeworCWNhc2UgQVZNX0ZSSVRaX1BDSToKKwkJZmMtPmN0cmxyZWcgPSBBVk1fU1RBVFVTMF9ESVNfVElNRVIgfCBBVk1fU1RBVFVTMF9SRVNfVElNRVI7CisJCWRpc2FibGVfaHdpcnEoZmMpOworCQlvdXRiKEFWTV9TVEFUVVMxX0VOQV9JT00sIGZjLT5hZGRyICsgMyk7CisJCWJyZWFrOworCWNhc2UgQVZNX0ZSSVRaX1BDSVYyOgorCQlmYy0+Y3RybHJlZyA9IDA7CisJCWRpc2FibGVfaHdpcnEoZmMpOworCQlicmVhazsKKwl9CisJbWRlbGF5KDEpOworCWlmIChkZWJ1ZyAmIERFQlVHX0hXKQorCQlwcl9ub3RpY2UoIiVzOiBTMC9TMSAleC8leFxuIiwgZmMtPm5hbWUsCisJCQlpbmIoZmMtPmFkZHIgKyAyKSwgaW5iKGZjLT5hZGRyICsgMykpOworfQorCitzdGF0aWMgaW50Citpbml0X2NhcmQoc3RydWN0IGZyaXR6Y2FyZCAqZmMpCit7CisJaW50CQlyZXQsIGNudCA9IDM7CisJdV9sb25nCQlmbGFnczsKKworCXJlc2V0X2F2bShmYyk7IC8qIGRpc2FibGUgSVJRICovCisJaWYgKGZjLT50eXBlID09IEFWTV9GUklUWl9QQ0lWMikKKwkJcmV0ID0gcmVxdWVzdF9pcnEoZmMtPmlycSwgYXZtX2ZyaXR6djJfaW50ZXJydXB0LAorCQkJSVJRRl9TSEFSRUQsIGZjLT5uYW1lLCBmYyk7CisJZWxzZQorCQlyZXQgPSByZXF1ZXN0X2lycShmYy0+aXJxLCBhdm1fZnJpdHpfaW50ZXJydXB0LAorCQkJSVJRRl9TSEFSRUQsIGZjLT5uYW1lLCBmYyk7CisJaWYgKHJldCkgeworCQlwcl9pbmZvKCIlczogY291bGRuJ3QgZ2V0IGludGVycnVwdCAlZFxuIiwKKwkJCWZjLT5uYW1lLCBmYy0+aXJxKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJd2hpbGUgKGNudC0tKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZmYy0+bG9jaywgZmxhZ3MpOworCQlyZXQgPSBmYy0+aXNhYy5pbml0KCZmYy0+aXNhYyk7CisJCWlmIChyZXQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZjLT5sb2NrLCBmbGFncyk7CisJCQlwcl9pbmZvKCIlczogSVNBQyBpbml0IGZhaWxlZCB3aXRoICVkXG4iLAorCQkJCWZjLT5uYW1lLCByZXQpOworCQkJYnJlYWs7CisJCX0KKwkJY2xlYXJfcGVuZGluZ19oZGxjX2ludHMoZmMpOworCQlpbml0aGRsYyhmYyk7CisJCWVuYWJsZV9od2lycShmYyk7CisJCS8qIFJFU0VUIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlciAqLworCQlpZiAoQVZNX0ZSSVRaX1BDSVYyID09IGZjLT50eXBlKSB7CisJCQlXcml0ZUlTQUNfVjIoZmMsIElTQUNYX01BU0ssIDApOworCQkJV3JpdGVJU0FDX1YyKGZjLCBJU0FDWF9DTURSRCwgMHg0MSk7CisJCX0gZWxzZSB7CisJCQlXcml0ZUlTQUNfVjEoZmMsIElTQUNfTUFTSywgMCk7CisJCQlXcml0ZUlTQUNfVjEoZmMsIElTQUNfQ01EUiwgMHg0MSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmMtPmxvY2ssIGZsYWdzKTsKKwkJLyogVGltZW91dCAxMG1zICovCisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKwkJaWYgKGRlYnVnICYgREVCVUdfSFcpCisJCQlwcl9ub3RpY2UoIiVzOiBJUlEgJWQgY291bnQgJWRcbiIsIGZjLT5uYW1lLAorCQkJCWZjLT5pcnEsIGZjLT5pcnFjbnQpOworCQlpZiAoIWZjLT5pcnFjbnQpIHsKKwkJCXByX2luZm8oIiVzOiBJUlEoJWQpIGdldHRpbmcgbm8gSVJRcyBkdXJpbmcgaW5pdCAlZFxuIiwKKwkJCQlmYy0+bmFtZSwgZmMtPmlycSwgMyAtIGNudCk7CisJCQlyZXNldF9hdm0oZmMpOworCQl9IGVsc2UKKwkJCXJldHVybiAwOworCX0KKwlmcmVlX2lycShmYy0+aXJxLCBmYyk7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5uZWxfYmN0cmwoc3RydWN0IGJjaGFubmVsICpiY2gsIHN0cnVjdCBtSVNETl9jdHJsX3JlcSAqY3EpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBiY2gtPmh3OworCisJc3dpdGNoIChjcS0+b3ApIHsKKwljYXNlIE1JU0ROX0NUUkxfR0VUT1A6CisJCWNxLT5vcCA9IDA7CisJCWJyZWFrOworCS8qIE5vdGhpbmcgaW1wbGVtZW50ZWQgeWV0ICovCisJY2FzZSBNSVNETl9DVFJMX0ZJTExfRU1QVFk6CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6ICVzIHVua25vd24gT3AgJXhcbiIsIGZjLT5uYW1lLCBfX2Z1bmNfXywgY3EtPm9wKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2F2bV9iY3RybChzdHJ1Y3QgbUlTRE5jaGFubmVsICpjaCwgdTMyIGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBiY2hhbm5lbCAqYmNoID0gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgYmNoYW5uZWwsIGNoKTsKKwlzdHJ1Y3QgZnJpdHpjYXJkICpmYyA9IGJjaC0+aHc7CisJaW50IHJldCA9IC1FSU5WQUw7CisJdV9sb25nIGZsYWdzOworCisJcHJfZGVidWcoIiVzOiAlcyBjbWQ6JXggJXBcbiIsIGZjLT5uYW1lLCBfX2Z1bmNfXywgY21kLCBhcmcpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBDTE9TRV9DSEFOTkVMOgorCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX09QRU4sICZiY2gtPkZsYWdzKTsKKwkJaWYgKHRlc3RfYml0KEZMR19BQ1RJVkUsICZiY2gtPkZsYWdzKSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmZjLT5sb2NrLCBmbGFncyk7CisJCQltSVNETl9mcmVlYmNoYW5uZWwoYmNoKTsKKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfVFhfQlVTWSwgJmJjaC0+RmxhZ3MpOworCQkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19BQ1RJVkUsICZiY2gtPkZsYWdzKTsKKwkJCW1vZGVoZGxjKGJjaCwgSVNETl9QX05PTkUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmMtPmxvY2ssIGZsYWdzKTsKKwkJfQorCQljaC0+cHJvdG9jb2wgPSBJU0ROX1BfTk9ORTsKKwkJY2gtPnBlZXIgPSBOVUxMOworCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDT05UUk9MX0NIQU5ORUw6CisJCXJldCA9IGNoYW5uZWxfYmN0cmwoYmNoLCBhcmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCIlczogJXMgdW5rbm93biBwcmltKCV4KVxuIiwgZmMtPm5hbWUsIF9fZnVuY19fLCBjbWQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitjaGFubmVsX2N0cmwoc3RydWN0IGZyaXR6Y2FyZCAgKmZjLCBzdHJ1Y3QgbUlTRE5fY3RybF9yZXEgKmNxKQoreworCWludAlyZXQgPSAwOworCisJc3dpdGNoIChjcS0+b3ApIHsKKwljYXNlIE1JU0ROX0NUUkxfR0VUT1A6CisJCWNxLT5vcCA9IE1JU0ROX0NUUkxfTE9PUDsKKwkJYnJlYWs7CisJY2FzZSBNSVNETl9DVFJMX0xPT1A6CisJCS8qIGNxLT5jaGFubmVsOiAwIGRpc2FibGUsIDEgQjEgbG9vcCAyIEIyIGxvb3AsIDMgYm90aCAqLworCQlpZiAoY3EtPmNoYW5uZWwgPCAwIHx8IGNxLT5jaGFubmVsID4gMykgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IGZjLT5pc2FjLmN0cmwoJmZjLT5pc2FjLCBIV19URVNUTE9PUCwgY3EtPmNoYW5uZWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCIlczogJXMgdW5rbm93biBPcCAleFxuIiwgZmMtPm5hbWUsIF9fZnVuY19fLCBjcS0+b3ApOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorb3Blbl9iY2hhbm5lbChzdHJ1Y3QgZnJpdHpjYXJkICpmYywgc3RydWN0IGNoYW5uZWxfcmVxICpycSkKK3sKKwlzdHJ1Y3QgYmNoYW5uZWwJCSpiY2g7CisKKwlpZiAocnEtPmFkci5jaGFubmVsID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHJxLT5wcm90b2NvbCA9PSBJU0ROX1BfTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYmNoID0gJmZjLT5iY2hbcnEtPmFkci5jaGFubmVsIC0gMV07CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoRkxHX09QRU4sICZiY2gtPkZsYWdzKSkKKwkJcmV0dXJuIC1FQlVTWTsgLyogYi1jaGFubmVsIGNhbiBiZSBvbmx5IG9wZW4gb25jZSAqLworCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfRklMTEVNUFRZLCAmYmNoLT5GbGFncyk7CisJYmNoLT5jaC5wcm90b2NvbCA9IHJxLT5wcm90b2NvbDsKKwlycS0+Y2ggPSAmYmNoLT5jaDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGRldmljZSBjb250cm9sIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQKK2F2bV9kY3RybChzdHJ1Y3QgbUlTRE5jaGFubmVsICpjaCwgdTMyIGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBtSVNETmRldmljZQkqZGV2ID0gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgbUlTRE5kZXZpY2UsIEQpOworCXN0cnVjdCBkY2hhbm5lbAkJKmRjaCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkY2hhbm5lbCwgZGV2KTsKKwlzdHJ1Y3QgZnJpdHpjYXJkCSpmYyA9IGRjaC0+aHc7CisJc3RydWN0IGNoYW5uZWxfcmVxCSpycTsKKwlpbnQJCQllcnIgPSAwOworCisJcHJfZGVidWcoIiVzOiAlcyBjbWQ6JXggJXBcbiIsIGZjLT5uYW1lLCBfX2Z1bmNfXywgY21kLCBhcmcpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBPUEVOX0NIQU5ORUw6CisJCXJxID0gYXJnOworCQlpZiAocnEtPnByb3RvY29sID09IElTRE5fUF9URV9TMCkKKwkJCWVyciA9IGZjLT5pc2FjLm9wZW4oJmZjLT5pc2FjLCBycSk7CisJCWVsc2UKKwkJCWVyciA9IG9wZW5fYmNoYW5uZWwoZmMsIHJxKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKKwkJCXByX2luZm8oIiVzOiBjYW5ub3QgZ2V0IG1vZHVsZVxuIiwgZmMtPm5hbWUpOworCQlicmVhazsKKwljYXNlIENMT1NFX0NIQU5ORUw6CisJCXByX2RlYnVnKCIlczogZGV2KCVkKSBjbG9zZSBmcm9tICVwXG4iLCBmYy0+bmFtZSwgZGNoLT5kZXYuaWQsCisJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwkJYnJlYWs7CisJY2FzZSBDT05UUk9MX0NIQU5ORUw6CisJCWVyciA9IGNoYW5uZWxfY3RybChmYywgYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoIiVzOiAlcyB1bmtub3duIGNvbW1hbmQgJXhcbiIsCisJCQlmYy0+bmFtZSwgX19mdW5jX18sIGNtZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gZXJyOworfQorCitpbnQKK3NldHVwX2ZyaXR6KHN0cnVjdCBmcml0emNhcmQgKmZjKQoreworCXUzMiB2YWwsIHZlcjsKKworCWlmICghcmVxdWVzdF9yZWdpb24oZmMtPmFkZHIsIDMyLCBmYy0+bmFtZSkpIHsKKwkJcHJfaW5mbygiJXM6IEFWTSBjb25maWcgcG9ydCAleC0leCBhbHJlYWR5IGluIHVzZVxuIiwKKwkJCWZjLT5uYW1lLCBmYy0+YWRkciwgZmMtPmFkZHIgKyAzMSk7CisJCXJldHVybiAtRUlPOworCX0KKwlzd2l0Y2ggKGZjLT50eXBlKSB7CisJY2FzZSBBVk1fRlJJVFpfUENJOgorCQl2YWwgPSBpbmwoZmMtPmFkZHIpOworCQlvdXRsKEFWTV9IRExDXzEsIGZjLT5hZGRyICsgQ0hJUF9JTkRFWCk7CisJCXZlciA9IGlubChmYy0+YWRkciArIENISVBfV0lORE9XICsgSERMQ19TVEFUVVMpID4+IDI0OworCQlpZiAoZGVidWcgJiBERUJVR19IVykgeworCQkJcHJfbm90aWNlKCIlczogUENJIHN0YXQgJSN4XG4iLCBmYy0+bmFtZSwgdmFsKTsKKwkJCXByX25vdGljZSgiJXM6IFBDSSBDbGFzcyAlWCBSZXYgJWRcbiIsIGZjLT5uYW1lLAorCQkJCXZhbCAmIDB4ZmYsICh2YWwgPj4gOCkgJiAweGZmKTsKKwkJCXByX25vdGljZSgiJXM6IEhETEMgdmVyc2lvbiAleFxuIiwgZmMtPm5hbWUsIHZlciAmIDB4Zik7CisJCX0KKwkJQVNTSUdOX0ZVTkMoVjEsIElTQUMsIGZjLT5pc2FjKTsKKwkJZmMtPmlzYWMudHlwZSA9IElQQUNfVFlQRV9JU0FDOworCQlicmVhazsKKwljYXNlIEFWTV9GUklUWl9QQ0lWMjoKKwkJdmFsID0gaW5sKGZjLT5hZGRyKTsKKwkJdmVyID0gaW5sKGZjLT5hZGRyICsgQVZNX0hETENfU1RBVFVTXzEpID4+IDI0OworCQlpZiAoZGVidWcgJiBERUJVR19IVykgeworCQkJcHJfbm90aWNlKCIlczogUENJIFYyIHN0YXQgJSN4XG4iLCBmYy0+bmFtZSwgdmFsKTsKKwkJCXByX25vdGljZSgiJXM6IFBDSSBWMiBDbGFzcyAlWCBSZXYgJWRcbiIsIGZjLT5uYW1lLAorCQkJCXZhbCAmIDB4ZmYsICh2YWw+PjgpICYgMHhmZik7CisJCQlwcl9ub3RpY2UoIiVzOiBIRExDIHZlcnNpb24gJXhcbiIsIGZjLT5uYW1lLCB2ZXIgJiAweGYpOworCQl9CisJCUFTU0lHTl9GVU5DKFYyLCBJU0FDLCBmYy0+aXNhYyk7CisJCWZjLT5pc2FjLnR5cGUgPSBJUEFDX1RZUEVfSVNBQ1g7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlbGVhc2VfcmVnaW9uKGZjLT5hZGRyLCAzMik7CisJCXByX2luZm8oIiVzOiBBVk0gdW5rbm93biB0eXBlICVkXG4iLCBmYy0+bmFtZSwgZmMtPnR5cGUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcHJfbm90aWNlKCIlczogJXMgY29uZmlnIGlycTolZCBiYXNlOjB4JVhcbiIsIGZjLT5uYW1lLAorCQkoZmMtPnR5cGUgPT0gQVZNX0ZSSVRaX1BDSSkgPyAiQVZNIEZyaXR6IUNBUkQgUENJIiA6CisJCSJBVk0gRnJpdHohQ0FSRCBQQ0l2MiIsIGZjLT5pcnEsIGZjLT5hZGRyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3JlbGVhc2VfY2FyZChzdHJ1Y3QgZnJpdHpjYXJkICpjYXJkKQoreworCXVfbG9uZyBmbGFnczsKKworCWRpc2FibGVfaHdpcnEoY2FyZCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwltb2RlaGRsYygmY2FyZC0+YmNoWzBdLCBJU0ROX1BfTk9ORSk7CisJbW9kZWhkbGMoJmNhcmQtPmJjaFsxXSwgSVNETl9QX05PTkUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwljYXJkLT5pc2FjLnJlbGVhc2UoJmNhcmQtPmlzYWMpOworCWZyZWVfaXJxKGNhcmQtPmlycSwgY2FyZCk7CisJbUlTRE5fZnJlZWJjaGFubmVsKCZjYXJkLT5iY2hbMV0pOworCW1JU0ROX2ZyZWViY2hhbm5lbCgmY2FyZC0+YmNoWzBdKTsKKwltSVNETl91bnJlZ2lzdGVyX2RldmljZSgmY2FyZC0+aXNhYy5kY2guZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihjYXJkLT5hZGRyLCAzMik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGNhcmQtPnBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShjYXJkLT5wZGV2LCBOVUxMKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZjYXJkLT5saXN0KTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJa2ZyZWUoY2FyZCk7CisJQVZNX2NudC0tOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc2V0dXBfaW5zdGFuY2Uoc3RydWN0IGZyaXR6Y2FyZCAqY2FyZCkKK3sKKwlpbnQgaSwgZXJyOworCXVfbG9uZyBmbGFnczsKKworCXNucHJpbnRmKGNhcmQtPm5hbWUsIE1JU0ROX01BWF9JRExFTiAtIDEsICJBVk0uJWQiLCBBVk1fY250ICsgMSk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjYXJkLT5saXN0LCAmQ2FyZHMpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKworCV9zZXRfZGVidWcoY2FyZCk7CisJY2FyZC0+aXNhYy5uYW1lID0gY2FyZC0+bmFtZTsKKwlzcGluX2xvY2tfaW5pdCgmY2FyZC0+bG9jayk7CisJY2FyZC0+aXNhYy5od2xvY2sgPSAmY2FyZC0+bG9jazsKKwltSVNETmlzYWNfaW5pdCgmY2FyZC0+aXNhYywgY2FyZCk7CisKKwljYXJkLT5pc2FjLmRjaC5kZXYuQnByb3RvY29scyA9ICgxIDw8IChJU0ROX1BfQl9SQVcgJiBJU0ROX1BfQl9NQVNLKSkgfAorCSAgICAoMSA8PCAoSVNETl9QX0JfSERMQyAmIElTRE5fUF9CX01BU0spKTsKKwljYXJkLT5pc2FjLmRjaC5kZXYuRC5jdHJsID0gYXZtX2RjdHJsOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJY2FyZC0+YmNoW2ldLm5yID0gaSArIDE7CisJCXNldF9jaGFubmVsbWFwKGkgKyAxLCBjYXJkLT5pc2FjLmRjaC5kZXYuY2hhbm5lbG1hcCk7CisJCW1JU0ROX2luaXRiY2hhbm5lbCgmY2FyZC0+YmNoW2ldLCBNQVhfREFUQV9NRU0pOworCQljYXJkLT5iY2hbaV0uaHcgPSBjYXJkOworCQljYXJkLT5iY2hbaV0uY2guc2VuZCA9IGF2bV9sMmwxQjsKKwkJY2FyZC0+YmNoW2ldLmNoLmN0cmwgPSBhdm1fYmN0cmw7CisJCWNhcmQtPmJjaFtpXS5jaC5uciA9IGkgKyAxOworCQlsaXN0X2FkZCgmY2FyZC0+YmNoW2ldLmNoLmxpc3QsICZjYXJkLT5pc2FjLmRjaC5kZXYuYmNoYW5uZWxzKTsKKwl9CisJZXJyID0gc2V0dXBfZnJpdHooY2FyZCk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKwllcnIgPSBtSVNETl9yZWdpc3Rlcl9kZXZpY2UoJmNhcmQtPmlzYWMuZGNoLmRldiwgJmNhcmQtPnBkZXYtPmRldiwKKwkJY2FyZC0+bmFtZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcl9yZWc7CisJZXJyID0gaW5pdF9jYXJkKGNhcmQpOworCWlmICghZXJyKSAgeworCQlBVk1fY250Kys7CisJCXByX25vdGljZSgiQVZNICVkIGNhcmRzIGluc3RhbGxlZCBERUJVR1xuIiwgQVZNX2NudCk7CisJCXJldHVybiAwOworCX0KKwltSVNETl91bnJlZ2lzdGVyX2RldmljZSgmY2FyZC0+aXNhYy5kY2guZGV2KTsKK2Vycm9yX3JlZzoKKwlyZWxlYXNlX3JlZ2lvbihjYXJkLT5hZGRyLCAzMik7CitlcnJvcjoKKwljYXJkLT5pc2FjLnJlbGVhc2UoJmNhcmQtPmlzYWMpOworCW1JU0ROX2ZyZWViY2hhbm5lbCgmY2FyZC0+YmNoWzFdKTsKKwltSVNETl9mcmVlYmNoYW5uZWwoJmNhcmQtPmJjaFswXSk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmY2FyZC0+bGlzdCk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCWtmcmVlKGNhcmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0Citmcml0enBjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlzdHJ1Y3QgZnJpdHpjYXJkICpjYXJkOworCisJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmcml0emNhcmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQpIHsKKwkJcHJfaW5mbygiTm8ga21lbSBmb3IgZnJpdHpjYXJkXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FWTV9BMV9WMikKKwkJY2FyZC0+dHlwZSA9IEFWTV9GUklUWl9QQ0lWMjsKKwllbHNlCisJCWNhcmQtPnR5cGUgPSBBVk1fRlJJVFpfUENJOworCWNhcmQtPnBkZXYgPSBwZGV2OworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJa2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJcHJfbm90aWNlKCJtSVNETjogZm91bmQgYWRhcHRlciAlcyBhdCAlc1xuIiwKKwkgICAgICAgKGNoYXIgKikgZW50LT5kcml2ZXJfZGF0YSwgcGNpX25hbWUocGRldikpOworCisJY2FyZC0+YWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKwljYXJkLT5pcnEgPSBwZGV2LT5pcnE7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCWVyciA9IHNldHVwX2luc3RhbmNlKGNhcmQpOworCWlmIChlcnIpCisJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQKK2ZyaXR6X3JlbW92ZV9wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGZyaXR6Y2FyZCAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChjYXJkKQorCQlyZWxlYXNlX2NhcmQoY2FyZCk7CisJZWxzZQorCQlpZiAoZGVidWcpCisJCQlwcl9pbmZvKCIlczogZHJ2ZGF0YSBhbGxyZWFkeSByZW1vdmVkXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmY3BjaV9pZHNbXSBfX2RldmluaXRkYXRhID0geworCXsgUENJX1ZFTkRPUl9JRF9BVk0sIFBDSV9ERVZJQ0VfSURfQVZNX0ExLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCSAgMCwgMCwgKHVuc2lnbmVkIGxvbmcpICJGcml0eiFDYXJkIFBDSSJ9LAorCXsgUENJX1ZFTkRPUl9JRF9BVk0sIFBDSV9ERVZJQ0VfSURfQVZNX0ExX1YyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCSAgMCwgMCwgKHVuc2lnbmVkIGxvbmcpICJGcml0eiFDYXJkIFBDSSB2MiIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZmNwY2lfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGZjcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9ICJmY3BjaSIsCisJLnByb2JlID0gZnJpdHpwY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGZyaXR6X3JlbW92ZV9wY2kpLAorCS5pZF90YWJsZSA9IGZjcGNpX2lkcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IEFWTV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCXByX25vdGljZSgiQVZNIEZyaXR6IFBDSSBkcml2ZXIgUmV2LiAlc1xuIiwgQVZNRlJJVFpfUkVWKTsKKwllcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZmY3BjaV9kcml2ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBBVk1fY2xlYW51cCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZmNwY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoQVZNX2luaXQpOworbW9kdWxlX2V4aXQoQVZNX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjbXVsdGkuYwppbmRleCBlMWRhYjMwLi5mYWVkNzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjbXVsdGkuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjbXVsdGkuYwpAQCAtMzQxNiwyMiArMzQxNiw4IEBACiAJdV9sb25nCQkJZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGMtPmxvY2ssIGZsYWdzKTsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMR19UWF9ORVhULCAmYmNoLT5GbGFncykpIHsKLQkJZGV2X2tmcmVlX3NrYihiY2gtPm5leHRfc2tiKTsKLQkJYmNoLT5uZXh0X3NrYiA9IE5VTEw7Ci0JfQotCWlmIChiY2gtPnR4X3NrYikgewotCQlkZXZfa2ZyZWVfc2tiKGJjaC0+dHhfc2tiKTsKLQkJYmNoLT50eF9za2IgPSBOVUxMOwotCX0KLQliY2gtPnR4X2lkeCA9IDA7Ci0JaWYgKGJjaC0+cnhfc2tiKSB7Ci0JCWRldl9rZnJlZV9za2IoYmNoLT5yeF9za2IpOwotCQliY2gtPnJ4X3NrYiA9IE5VTEw7Ci0JfQorCW1JU0ROX2NsZWFyX2JjaGFubmVsKGJjaCk7CiAJaGMtPmNoYW5bYmNoLT5zbG90XS5jb2VmZl9jb3VudCA9IDA7Ci0JdGVzdF9hbmRfY2xlYXJfYml0KEZMR19BQ1RJVkUsICZiY2gtPkZsYWdzKTsKLQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RYX0JVU1ksICZiY2gtPkZsYWdzKTsKIAloYy0+Y2hhbltiY2gtPnNsb3RdLnJ4X29mZiA9IDA7CiAJaGMtPmNoYW5bYmNoLT5zbG90XS5jb25mID0gLTE7CiAJbW9kZV9oZmNtdWx0aShoYywgYmNoLT5zbG90LCBJU0ROX1BfTk9ORSwgLTEsIDAsIC0xLCAwKTsKQEAgLTUzODQsOSArNTM3MCwxMCBAQAogCSAgICBlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NDRF9IRkM4UyB8fAogCSAgICBlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NDRF9IRkNFMSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAiVW5rbm93biBIRkMgbXVsdGlwb3J0IGNvbnRyb2xsZXIgKHZlbmRvcjoleCBkZXZpY2U6JXggIgotCQkgICAgInN1YnZlbmRvcjoleCBzdWJkZXZpY2U6JXgpXG4iLCBlbnQtPnZlbmRvciwgZW50LT5kZXZpY2UsCi0JCSAgICBlbnQtPnN1YnZlbmRvciwgZW50LT5zdWJkZXZpY2UpOworCQkgICAgIlVua25vd24gSEZDIG11bHRpcG9ydCBjb250cm9sbGVyICh2ZW5kb3I6JTA0eCBkZXZpY2U6JTA0eCAiCisJCSAgICAic3VidmVuZG9yOiUwNHggc3ViZGV2aWNlOiUwNHgpXG4iLCBwZGV2LT52ZW5kb3IsCisJCSAgICBwZGV2LT5kZXZpY2UsIHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IsCisJCSAgICBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAiUGxlYXNlIGNvbnRhY3QgdGhlIGRyaXZlciBtYWludGFpbmVyIGZvciBzdXBwb3J0LlxuIik7CiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jCmluZGV4IDIyOGZmYmUuLjcwZTZiMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMKQEAgLTE1MjIsMjIgKzE1MjIsOCBAQAogCXVfbG9uZwkJZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGMtPmxvY2ssIGZsYWdzKTsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMR19UWF9ORVhULCAmYmNoLT5GbGFncykpIHsKLQkJZGV2X2tmcmVlX3NrYihiY2gtPm5leHRfc2tiKTsKLQkJYmNoLT5uZXh0X3NrYiA9IE5VTEw7Ci0JfQotCWlmIChiY2gtPnR4X3NrYikgewotCQlkZXZfa2ZyZWVfc2tiKGJjaC0+dHhfc2tiKTsKLQkJYmNoLT50eF9za2IgPSBOVUxMOwotCX0KLQliY2gtPnR4X2lkeCA9IDA7Ci0JaWYgKGJjaC0+cnhfc2tiKSB7Ci0JCWRldl9rZnJlZV9za2IoYmNoLT5yeF9za2IpOwotCQliY2gtPnJ4X3NrYiA9IE5VTEw7Ci0JfQorCW1JU0ROX2NsZWFyX2JjaGFubmVsKGJjaCk7CiAJbW9kZV9oZmNwY2koYmNoLCBiY2gtPm5yLCBJU0ROX1BfTk9ORSk7Ci0JdGVzdF9hbmRfY2xlYXJfYml0KEZMR19BQ1RJVkUsICZiY2gtPkZsYWdzKTsKLQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RYX0JVU1ksICZiY2gtPkZsYWdzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYy0+bG9jaywgZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYwppbmRleCA2Yjc3MDRjLi5mYzQ2YTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKQEAgLTE4MDksMjEgKzE4MDksNyBAQAogCQkgICAgaHctPm5hbWUsIF9fZnVuY19fLCBiY2gtPm5yKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RYX05FWFQsICZiY2gtPkZsYWdzKSkgewotCQlkZXZfa2ZyZWVfc2tiKGJjaC0+bmV4dF9za2IpOwotCQliY2gtPm5leHRfc2tiID0gTlVMTDsKLQl9Ci0JaWYgKGJjaC0+dHhfc2tiKSB7Ci0JCWRldl9rZnJlZV9za2IoYmNoLT50eF9za2IpOwotCQliY2gtPnR4X3NrYiA9IE5VTEw7Ci0JfQotCWJjaC0+dHhfaWR4ID0gMDsKLQlpZiAoYmNoLT5yeF9za2IpIHsKLQkJZGV2X2tmcmVlX3NrYihiY2gtPnJ4X3NrYik7Ci0JCWJjaC0+cnhfc2tiID0gTlVMTDsKLQl9Ci0JY2xlYXJfYml0KEZMR19BQ1RJVkUsICZiY2gtPkZsYWdzKTsKLQljbGVhcl9iaXQoRkxHX1RYX0JVU1ksICZiY2gtPkZsYWdzKTsKKwltSVNETl9jbGVhcl9iY2hhbm5lbChiY2gpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5sb2NrLCBmbGFncyk7CiAJaGZjc3VzYl9zZXR1cF9iY2goYmNoLCBJU0ROX1BfTk9ORSk7CiAJaGZjc3VzYl9zdG9wX2VuZHBvaW50KGh3LCBiY2gtPm5yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9pb2hlbHBlci5oIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2lvaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzODk4MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9pb2hlbHBlci5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogaW9oZWxwZXIuaAorICoJCWhlbHBlciBmb3IgZGVmaW5lIGZ1bmN0aW9ucyB0byBhY2Nlc3MgSVNETiBoYXJkd2FyZQorICogICAgICAgICAgICAgIHN1cHBvcnRlZCBhcmUgbWVtb3J5IG1hcHBlZCBJTworICoJCWluZGlyZWN0IHBvcnQgSU8gKG9uZSBwb3J0IGZvciBhZGRyZXNzLCBvbmUgZm9yIGRhdGEpCisgKgorICogQXV0aG9yICAgICAgIEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIENvcHlyaWdodCAyMDA5ICBieSBLYXJzdGVuIEtlaWwgPGtlaWxAaXNkbjRsaW51eC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfSU9IRUxQRVJfSAorI2RlZmluZSBfSU9IRUxQRVJfSAorCit0eXBlZGVmCXU4CShyZWFkX3JlZ19mdW5jKSh2b2lkICpod3AsIHU4IG9mZnNldCk7Cit0eXBlZGVmCXZvaWQJKHdyaXRlX3JlZ19mdW5jKSh2b2lkICpod3AsIHU4IG9mZnNldCwgdTggdmFsdWUpOwordHlwZWRlZgl2b2lkCShmaWZvX2Z1bmMpKHZvaWQgKmh3cCwgdTggb2Zmc2V0LCB1OCAqZGF0YXAsIGludCBzaXplKTsKKworc3RydWN0IF9pb3BvcnQgeworCXUzMglwb3J0OworCXUzMglhbGU7Cit9OworCisjZGVmaW5lIElPRlVOQ19JTyhuYW1lLCBod3MsIGFwKSBcCisJc3RhdGljIHU4IFJlYWQjI25hbWUjI19JTyh2b2lkICpwLCB1OCBvZmYpIHtcCisJCXN0cnVjdCBod3MgKmh3ID0gcDtcCisJCXJldHVybiBpbmIoaHctPmFwLnBvcnQgKyBvZmYpO1wKKwl9IFwKKwlzdGF0aWMgdm9pZCBXcml0ZSMjbmFtZSMjX0lPKHZvaWQgKnAsIHU4IG9mZiwgdTggdmFsKSB7XAorCQlzdHJ1Y3QgaHdzICpodyA9IHA7XAorCQlvdXRiKHZhbCwgaHctPmFwLnBvcnQgKyBvZmYpO1wKKwl9IFwKKwlzdGF0aWMgdm9pZCBSZWFkRmlGbyMjbmFtZSMjX0lPKHZvaWQgKnAsIHU4IG9mZiwgdTggKmRwLCBpbnQgc2l6ZSkge1wKKwkJc3RydWN0IGh3cyAqaHcgPSBwO1wKKwkJaW5zYihody0+YXAucG9ydCArIG9mZiwgZHAsIHNpemUpO1wKKwl9IFwKKwlzdGF0aWMgdm9pZCBXcml0ZUZpRm8jI25hbWUjI19JTyh2b2lkICpwLCB1OCBvZmYsIHU4ICpkcCwgaW50IHNpemUpIHtcCisJCXN0cnVjdCBod3MgKmh3ID0gcDtcCisJCW91dHNiKGh3LT5hcC5wb3J0ICsgb2ZmLCBkcCwgc2l6ZSk7XAorCX0KKworI2RlZmluZSBJT0ZVTkNfSU5EKG5hbWUsIGh3cywgYXApIFwKKwlzdGF0aWMgdTggUmVhZCMjbmFtZSMjX0lORCh2b2lkICpwLCB1OCBvZmYpIHtcCisJCXN0cnVjdCBod3MgKmh3ID0gcDtcCisJCW91dGIob2ZmLCBody0+YXAuYWxlKTtcCisJCXJldHVybiBpbmIoaHctPmFwLnBvcnQpO1wKKwl9IFwKKwlzdGF0aWMgdm9pZCBXcml0ZSMjbmFtZSMjX0lORCh2b2lkICpwLCB1OCBvZmYsIHU4IHZhbCkge1wKKwkJc3RydWN0IGh3cyAqaHcgPSBwO1wKKwkJb3V0YihvZmYsIGh3LT5hcC5hbGUpO1wKKwkJb3V0Yih2YWwsIGh3LT5hcC5wb3J0KTtcCisJfSBcCisJc3RhdGljIHZvaWQgUmVhZEZpRm8jI25hbWUjI19JTkQodm9pZCAqcCwgdTggb2ZmLCB1OCAqZHAsIGludCBzaXplKSB7XAorCQlzdHJ1Y3QgaHdzICpodyA9IHA7XAorCQlvdXRiKG9mZiwgaHctPmFwLmFsZSk7XAorCQlpbnNiKGh3LT5hcC5wb3J0LCBkcCwgc2l6ZSk7XAorCX0gXAorCXN0YXRpYyB2b2lkIFdyaXRlRmlGbyMjbmFtZSMjX0lORCh2b2lkICpwLCB1OCBvZmYsIHU4ICpkcCwgaW50IHNpemUpIHtcCisJCXN0cnVjdCBod3MgKmh3ID0gcDtcCisJCW91dGIob2ZmLCBody0+YXAuYWxlKTtcCisJCW91dHNiKGh3LT5hcC5wb3J0LCBkcCwgc2l6ZSk7XAorCX0KKworI2RlZmluZSBJT0ZVTkNfTUVNSU8obmFtZSwgaHdzLCB0eXAsIGFkcikgXAorCXN0YXRpYyB1OCBSZWFkIyNuYW1lIyNfTUlPKHZvaWQgKnAsIHU4IG9mZikge1wKKwkJc3RydWN0IGh3cyAqaHcgPSBwO1wKKwkJcmV0dXJuIHJlYWRiKCgodHlwICopaHctPmFkcikgKyBvZmYpO1wKKwl9IFwKKwlzdGF0aWMgdm9pZCBXcml0ZSMjbmFtZSMjX01JTyh2b2lkICpwLCB1OCBvZmYsIHU4IHZhbCkge1wKKwkJc3RydWN0IGh3cyAqaHcgPSBwO1wKKwkJd3JpdGViKHZhbCwgKCh0eXAgKilody0+YWRyKSArIG9mZik7XAorCX0gXAorCXN0YXRpYyB2b2lkIFJlYWRGaUZvIyNuYW1lIyNfTUlPKHZvaWQgKnAsIHU4IG9mZiwgdTggKmRwLCBpbnQgc2l6ZSkge1wKKwkJc3RydWN0IGh3cyAqaHcgPSBwO1wKKwkJd2hpbGUgKHNpemUtLSlcCisJCQkqZHArKyA9IHJlYWRiKCgodHlwICopaHctPmFkcikgKyBvZmYpO1wKKwl9IFwKKwlzdGF0aWMgdm9pZCBXcml0ZUZpRm8jI25hbWUjI19NSU8odm9pZCAqcCwgdTggb2ZmLCB1OCAqZHAsIGludCBzaXplKSB7XAorCQlzdHJ1Y3QgaHdzICpodyA9IHA7XAorCQl3aGlsZSAoc2l6ZS0tKVwKKwkJCXdyaXRlYigqZHArKywgKCh0eXAgKilody0+YWRyKSArIG9mZik7XAorCX0KKworI2RlZmluZSBBU1NJR05fRlVOQyh0eXAsIG5hbWUsIGRlc3QpCWRvIHtcCisJZGVzdC5yZWFkX3JlZyA9ICZSZWFkIyNuYW1lIyNfIyN0eXA7XAorCWRlc3Qud3JpdGVfcmVnID0gJldyaXRlIyNuYW1lIyNfIyN0eXA7XAorCWRlc3QucmVhZF9maWZvID0gJlJlYWRGaUZvIyNuYW1lIyNfIyN0eXA7XAorCWRlc3Qud3JpdGVfZmlmbyA9ICZXcml0ZUZpRm8jI25hbWUjI18jI3R5cDtcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgQVNTSUdOX0ZVTkNfSVBBQyh0eXAsIHRhcmdldCkJZG8ge1wKKwlBU1NJR05fRlVOQyh0eXAsIElTQUMsIHRhcmdldC5pc2FjKTtcCisJQVNTSUdOX0ZVTkModHlwLCBJUEFDLCB0YXJnZXQpO1wKKwl9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9pcGFjLmggYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaXBhYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YTZjY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaXBhYy5oCkBAIC0wLDAgKzEsNDA1IEBACisvKgorICoKKyAqIGlwYWMuaAlEZWZpbmVzIGZvciB0aGUgSW5maW5lb24gKGZvcm1lciBTaWVtZW5zKSBJU0ROCisgKgkJY2hpcCBzZXJpZXMKKyAqCisgKiBBdXRob3IgICAgICAgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgorICogQ29weXJpZ2h0IDIwMDkgIGJ5IEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiaW9oZWxwZXIuaCIKKworc3RydWN0IGlzYWNfaHcgeworCXN0cnVjdCBkY2hhbm5lbAkJZGNoOworCXUzMgkJCXR5cGU7CisJdTMyCQkJb2ZmOwkJLyogb2Zmc2V0IHRvIGlzYWMgcmVncyAqLworCWNoYXIJCQkqbmFtZTsKKwlzcGlubG9ja190CQkqaHdsb2NrOwkvKiBsb2NrIEhXIGFjY2Nlc3MgKi8KKwlyZWFkX3JlZ19mdW5jCQkqcmVhZF9yZWc7CisJd3JpdGVfcmVnX2Z1bmMJCSp3cml0ZV9yZWc7CisJZmlmb19mdW5jCQkqcmVhZF9maWZvOworCWZpZm9fZnVuYwkJKndyaXRlX2ZpZm87CisJaW50CQkJKCptb25pdG9yKSh2b2lkICosIHUzMiwgdTggKiwgaW50KTsKKwl2b2lkCQkJKCpyZWxlYXNlKShzdHJ1Y3QgaXNhY19odyAqKTsKKwlpbnQJCQkoKmluaXQpKHN0cnVjdCBpc2FjX2h3ICopOworCWludAkJCSgqY3RybCkoc3RydWN0IGlzYWNfaHcgKiwgdTMyLCB1X2xvbmcpOworCWludAkJCSgqb3Blbikoc3RydWN0IGlzYWNfaHcgKiwgc3RydWN0IGNoYW5uZWxfcmVxICopOworCXU4CQkJKm1vbl90eDsKKwl1OAkJCSptb25fcng7CisJaW50CQkJbW9uX3R4cDsKKwlpbnQJCQltb25fdHhjOworCWludAkJCW1vbl9yeHA7CisJc3RydWN0IGFyY29maV9tc2cJKmFyY29maV9saXN0OworCXN0cnVjdCB0aW1lcl9saXN0CWFyY29maXRpbWVyOworCXdhaXRfcXVldWVfaGVhZF90CWFyY29maV93YWl0OworCXU4CQkJYXJjb2ZpX2JjOworCXU4CQkJYXJjb2ZpX3N0YXRlOworCXU4CQkJbW9jcjsKKwl1OAkJCWFkZjI7CisJdTgJCQlzdGF0ZTsKK307CisKK3N0cnVjdCBpcGFjX2h3OworCitzdHJ1Y3QgaHNjeF9odyB7CisJc3RydWN0IGJjaGFubmVsCQliY2g7CisJc3RydWN0IGlwYWNfaHcJCSppcDsKKwl1OAkJCWZpZm9fc2l6ZTsKKwl1OAkJCW9mZjsJLyogb2Zmc2V0IHRvIElDQSBvciBJQ0IgKi8KKwl1OAkJCXNsb3Q7CisJY2hhcgkJCWxvZ1s2NF07Cit9OworCitzdHJ1Y3QgaXBhY19odyB7CisJc3RydWN0IGlzYWNfaHcJCWlzYWM7CisJc3RydWN0IGhzY3hfaHcJCWhzY3hbMl07CisJY2hhcgkJCSpuYW1lOworCXZvaWQJCQkqaHc7CisJc3BpbmxvY2tfdAkJKmh3bG9jazsJLyogbG9jayBIVyBhY2NjZXNzICovCisJc3RydWN0IG1vZHVsZQkJKm93bmVyOworCXUzMgkJCXR5cGU7CisJcmVhZF9yZWdfZnVuYwkJKnJlYWRfcmVnOworCXdyaXRlX3JlZ19mdW5jCQkqd3JpdGVfcmVnOworCWZpZm9fZnVuYwkJKnJlYWRfZmlmbzsKKwlmaWZvX2Z1bmMJCSp3cml0ZV9maWZvOworCXZvaWQJCQkoKnJlbGVhc2UpKHN0cnVjdCBpcGFjX2h3ICopOworCWludAkJCSgqaW5pdCkoc3RydWN0IGlwYWNfaHcgKik7CisJaW50CQkJKCpjdHJsKShzdHJ1Y3QgaXBhY19odyAqLCB1MzIsIHVfbG9uZyk7CisJdTgJCQljb25mOworfTsKKworI2RlZmluZSBJUEFDX1RZUEVfSVNBQwkJMHgwMDEwCisjZGVmaW5lIElQQUNfVFlQRV9JUEFDCQkweDAwMjAKKyNkZWZpbmUgSVBBQ19UWVBFX0lTQUNYCQkweDAwNDAKKyNkZWZpbmUgSVBBQ19UWVBFX0lQQUNYCQkweDAwODAKKyNkZWZpbmUgSVBBQ19UWVBFX0hTQ1gJCTB4MDEwMAorCisjZGVmaW5lIElTQUNfVVNFX0FSQ09GSQkJMHgxMDAwCisKKy8qIE1vbml0b3IgZnVuY3Rpb25zICovCisjZGVmaW5lIE1PTklUT1JfUlhfMAkJMHgxMDAwCisjZGVmaW5lIE1PTklUT1JfUlhfMQkJMHgxMDAxCisjZGVmaW5lIE1PTklUT1JfVFhfMAkJMHgyMDAwCisjZGVmaW5lIE1PTklUT1JfVFhfMQkJMHgyMDAxCisKKy8qIEFsbCByZWdpc3RlcnMgb3JpZ2luYWwgU2llbWVucyBTcGVjICAqLworLyogSVBBQy9JU0FDIHJlZ2lzdGVycyAqLworI2RlZmluZSBJU0FDX01BU0sJCTB4MjAKKyNkZWZpbmUgSVNBQ19JU1RBCQkweDIwCisjZGVmaW5lIElTQUNfU1RBUgkJMHgyMQorI2RlZmluZSBJU0FDX0NNRFIJCTB4MjEKKyNkZWZpbmUgSVNBQ19FWElSCQkweDI0CisjZGVmaW5lIElTQUNfQURGMgkJMHgzOQorI2RlZmluZSBJU0FDX1NQQ1IJCTB4MzAKKyNkZWZpbmUgSVNBQ19BREYxCQkweDM4CisjZGVmaW5lIElTQUNfQ0lSMAkJMHgzMQorI2RlZmluZSBJU0FDX0NJWDAJCTB4MzEKKyNkZWZpbmUgSVNBQ19DSVIxCQkweDMzCisjZGVmaW5lIElTQUNfQ0lYMQkJMHgzMworI2RlZmluZSBJU0FDX1NUQ1IJCTB4MzcKKyNkZWZpbmUgSVNBQ19NT0RFCQkweDIyCisjZGVmaW5lIElTQUNfUlNUQQkJMHgyNworI2RlZmluZSBJU0FDX1JCQ0wJCTB4MjUKKyNkZWZpbmUgSVNBQ19SQkNICQkweDJBCisjZGVmaW5lIElTQUNfVElNUgkJMHgyMworI2RlZmluZSBJU0FDX1NRWFIJCTB4M2IKKyNkZWZpbmUgSVNBQ19TUVJSCQkweDNiCisjZGVmaW5lIElTQUNfTU9TUgkJMHgzYQorI2RlZmluZSBJU0FDX01PQ1IJCTB4M2EKKyNkZWZpbmUgSVNBQ19NT1IwCQkweDMyCisjZGVmaW5lIElTQUNfTU9YMAkJMHgzMgorI2RlZmluZSBJU0FDX01PUjEJCTB4MzQKKyNkZWZpbmUgSVNBQ19NT1gxCQkweDM0CisKKyNkZWZpbmUgSVNBQ19SQkNIX1hBQwkJMHg4MAorCisjZGVmaW5lIElQQUNfRF9USU4yCQkweDAxCisKKy8qIElQQUMvSFNDWCAqLworI2RlZmluZSBJUEFDX0lTVEFCCQkweDIwCS8qIFJECSovCisjZGVmaW5lIElQQUNfTUFTS0IJCTB4MjAJLyogV1IJKi8KKyNkZWZpbmUgSVBBQ19TVEFSQgkJMHgyMQkvKiBSRAkqLworI2RlZmluZSBJUEFDX0NNRFJCCQkweDIxCS8qIFdSCSovCisjZGVmaW5lIElQQUNfTU9ERUIJCTB4MjIJLyogUi9XCSovCisjZGVmaW5lIElQQUNfRVhJUkIJCTB4MjQJLyogUkQJKi8KKyNkZWZpbmUgSVBBQ19SQkNMQgkJMHgyNQkvKiBSRAkqLworI2RlZmluZSBJUEFDX1JBSDEJCTB4MjYJLyogV1IJKi8KKyNkZWZpbmUgSVBBQ19SQUgyCQkweDI3CS8qIFdSCSovCisjZGVmaW5lIElQQUNfUlNUQUIJCTB4MjcJLyogUkQJKi8KKyNkZWZpbmUgSVBBQ19SQUwxCQkweDI4CS8qIFIvVwkqLworI2RlZmluZSBJUEFDX1JBTDIJCTB4MjkJLyogV1IJKi8KKyNkZWZpbmUgSVBBQ19SSENSQgkJMHgyOQkvKiBSRAkqLworI2RlZmluZSBJUEFDX1hCQ0wJCTB4MkEJLyogV1IJKi8KKyNkZWZpbmUgSVBBQ19DQ1IyCQkweDJDCS8qIFIvVwkqLworI2RlZmluZSBJUEFDX1JCQ0hCCQkweDJECS8qIFJECSovCisjZGVmaW5lIElQQUNfWEJDSAkJMHgyRAkvKiBXUgkqLworI2RlZmluZSBIU0NYX1ZTVFIJCTB4MkUJLyogUkQJKi8KKyNkZWZpbmUgSVBBQ19STENSCQkweDJFCS8qIFdSCSovCisjZGVmaW5lIElQQUNfQ0NSMQkJMHgyRgkvKiBSL1cJKi8KKyNkZWZpbmUgSVBBQ19UU0FYCQkweDMwCS8qIFdSCSovCisjZGVmaW5lIElQQUNfVFNBUgkJMHgzMQkvKiBXUgkqLworI2RlZmluZSBJUEFDX1hDQ1IJCTB4MzIJLyogV1IJKi8KKyNkZWZpbmUgSVBBQ19SQ0NSCQkweDMzCS8qIFdSCSovCisKKy8qIElQQUNfSVNUQUIvSVBBQ19NQVNLQiBiaXRzICovCisjZGVmaW5lIElQQUNfQl9YUFIJCTB4MTAKKyNkZWZpbmUgSVBBQ19CX1JQRgkJMHg0MAorI2RlZmluZSBJUEFDX0JfUk1FCQkweDgwCisjZGVmaW5lIElQQUNfQl9PTgkJMHgyRgorCisvKiBJUEFDX0VYSVJCIGJpdHMgKi8KKyNkZWZpbmUgSVBBQ19CX1JGUwkJMHgwNAorI2RlZmluZSBJUEFDX0JfUkZPCQkweDEwCisjZGVmaW5lIElQQUNfQl9YRFUJCTB4NDAKKyNkZWZpbmUgSVBBQ19CX1hNUgkJMHg4MAorCisvKiBJUEFDIHNwZWNpYWwgcmVnaXN0ZXJzICovCisjZGVmaW5lIElQQUNfQ09ORgkJMHhDMAkvKiBSL1cJKi8KKyNkZWZpbmUgSVBBQ19JU1RBCQkweEMxCS8qIFJECSovCisjZGVmaW5lIElQQUNfTUFTSwkJMHhDMQkvKiBXUgkqLworI2RlZmluZSBJUEFDX0lECQkJMHhDMgkvKiBSRAkqLworI2RlZmluZSBJUEFDX0FDRkcJCTB4QzMJLyogUi9XCSovCisjZGVmaW5lIElQQUNfQU9FCQkweEM0CS8qIFIvVwkqLworI2RlZmluZSBJUEFDX0FSWAkJMHhDNQkvKiBSRAkqLworI2RlZmluZSBJUEFDX0FUWAkJMHhDNQkvKiBXUgkqLworI2RlZmluZSBJUEFDX1BJVEExCQkweEM2CS8qIFIvVwkqLworI2RlZmluZSBJUEFDX1BJVEEyCQkweEM3CS8qIFIvVwkqLworI2RlZmluZSBJUEFDX1BPVEExCQkweEM4CS8qIFIvVwkqLworI2RlZmluZSBJUEFDX1BPVEEyCQkweEM5CS8qIFIvVwkqLworI2RlZmluZSBJUEFDX1BDRkcJCTB4Q0EJLyogUi9XCSovCisjZGVmaW5lIElQQUNfU0NGRwkJMHhDQgkvKiBSL1cJKi8KKyNkZWZpbmUgSVBBQ19USU1SMgkJMHhDQwkvKiBSL1cJKi8KKworLyogSVBBQ19JU1RBL19NQVNLIGJpdHMgKi8KKyNkZWZpbmUgSVBBQ19fRVhCCQkweDAxCisjZGVmaW5lIElQQUNfX0lDQgkJMHgwMgorI2RlZmluZSBJUEFDX19FWEEJCTB4MDQKKyNkZWZpbmUgSVBBQ19fSUNBCQkweDA4CisjZGVmaW5lIElQQUNfX0VYRAkJMHgxMAorI2RlZmluZSBJUEFDX19JQ0QJCTB4MjAKKyNkZWZpbmUgSVBBQ19fSU5UMAkJMHg0MAorI2RlZmluZSBJUEFDX19JTlQxCQkweDgwCisjZGVmaW5lIElQQUNfX09OCQkweEMwCisKKy8qIEhTQ1ggSVNUQS9NQVNLIGJpdHMgKi8KKyNkZWZpbmUgSFNDWF9fRVhCCQkweDAxCisjZGVmaW5lIEhTQ1hfX0VYQQkJMHgwMgorI2RlZmluZSBIU0NYX19JQ0EJCTB4MDQKKworLyogSVNBQy9JU0FDWC9JUEFDL0lQQUNYIEwxIGNvbW1hbmRzICovCisjZGVmaW5lIElTQUNfQ01EX1RJTQkJMHgwCisjZGVmaW5lIElTQUNfQ01EX1JTCQkweDEKKyNkZWZpbmUgSVNBQ19DTURfU0NaCQkweDQKKyNkZWZpbmUgSVNBQ19DTURfU1NaCQkweDIKKyNkZWZpbmUgSVNBQ19DTURfQVI4CQkweDgKKyNkZWZpbmUgSVNBQ19DTURfQVIxMAkJMHg5CisjZGVmaW5lIElTQUNfQ01EX0FSTAkJMHhBCisjZGVmaW5lIElTQUNfQ01EX0RVSQkJMHhGCisKKy8qIElTQUMvSVNBQ1gvSVBBQy9JUEFDWCBMMSBpbmRpY2F0aW9ucyAqLworI2RlZmluZSBJU0FDX0lORF9SUwkJMHgxCisjZGVmaW5lIElTQUNfSU5EX1BVCQkweDcKKyNkZWZpbmUgSVNBQ19JTkRfRFIJCTB4MAorI2RlZmluZSBJU0FDX0lORF9TRAkJMHgyCisjZGVmaW5lIElTQUNfSU5EX0RJUwkJMHgzCisjZGVmaW5lIElTQUNfSU5EX0VJCQkweDYKKyNkZWZpbmUgSVNBQ19JTkRfUlNZCQkweDQKKyNkZWZpbmUgSVNBQ19JTkRfQVJECQkweDgKKyNkZWZpbmUgSVNBQ19JTkRfVEkJCTB4QQorI2RlZmluZSBJU0FDX0lORF9BVEkJCTB4QgorI2RlZmluZSBJU0FDX0lORF9BSTgJCTB4QworI2RlZmluZSBJU0FDX0lORF9BSTEwCQkweEQKKyNkZWZpbmUgSVNBQ19JTkRfRElECQkweEYKKworLyogdGhlIG5ldyBJU0FDWCAvIElQQUNYICovCisvKiBELWNoYW5uZWwgcmVnaXN0ZXJzICAgKi8KKyNkZWZpbmUgSVNBQ1hfUkZJRk9ECQkweDAwCS8qIFJECSovCisjZGVmaW5lIElTQUNYX1hGSUZPRAkJMHgwMAkvKiBXUgkqLworI2RlZmluZSBJU0FDWF9JU1RBRAkJMHgyMAkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9NQVNLRAkJMHgyMAkvKiBXUgkqLworI2RlZmluZSBJU0FDWF9TVEFSRAkJMHgyMQkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9DTURSRAkJMHgyMQkvKiBXUgkqLworI2RlZmluZSBJU0FDWF9NT0RFRAkJMHgyMgkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfRVhNRDEJCTB4MjMJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX1RJTVIxCQkweDI0CS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9TQVAxCQkweDI1CS8qIFdSCSovCisjZGVmaW5lIElTQUNYX1NBUDIJCTB4MjYJLyogV1IJKi8KKyNkZWZpbmUgSVNBQ1hfUkJDTEQJCTB4MjYJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfUkJDSEQJCTB4MjcJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfVEVJMQkJMHgyNwkvKiBXUgkqLworI2RlZmluZSBJU0FDWF9URUkyCQkweDI4CS8qIFdSCSovCisjZGVmaW5lIElTQUNYX1JTVEFECQkweDI4CS8qIFJECSovCisjZGVmaW5lIElTQUNYX1RNRAkJMHgyOQkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfQ0lSMAkJMHgyRQkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9DSVgwCQkweDJFCS8qIFdSCSovCisjZGVmaW5lIElTQUNYX0NJUjEJCTB4MkYJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfQ0lYMQkJMHgyRgkvKiBXUgkqLworCisvKiBUcmFuc2NlaXZlciByZWdpc3RlcnMgICovCisjZGVmaW5lIElTQUNYX1RSX0NPTkYwCQkweDMwCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9UUl9DT05GMQkJMHgzMQkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfVFJfQ09ORjIJCTB4MzIJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX1RSX1NUQQkJMHgzMwkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9UUl9DTUQJCTB4MzQJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX1NRUlIxCQkweDM1CS8qIFJECSovCisjZGVmaW5lIElTQUNYX1NRWFIxCQkweDM1CS8qIFdSCSovCisjZGVmaW5lIElTQUNYX1NRUlIyCQkweDM2CS8qIFJECSovCisjZGVmaW5lIElTQUNYX1NRWFIyCQkweDM2CS8qIFdSCSovCisjZGVmaW5lIElTQUNYX1NRUlIzCQkweDM3CS8qIFJECSovCisjZGVmaW5lIElTQUNYX1NRWFIzCQkweDM3CS8qIFdSCSovCisjZGVmaW5lIElTQUNYX0lTVEFUUgkJMHgzOAkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9NQVNLVFIJCTB4MzkJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX1RSX01PREUJCTB4M0EJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0FDRkcxCQkweDNDCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9BQ0ZHMgkJMHgzRAkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfQU9FCQkweDNFCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9BUlgJCTB4M0YJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfQVRYCQkweDNGCS8qIFdSCSovCisKKy8qIElPTTogVGltZXNsb3QsIERQUywgQ0RBICAqLworI2RlZmluZSBJU0FDWF9DREExMAkJMHg0MAkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfQ0RBMTEJCTB4NDEJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0NEQTIwCQkweDQyCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9DREEyMQkJMHg0MwkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfQ0RBX1RTRFAxMAkweDQ0CS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9DREFfVFNEUDExCTB4NDUJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0NEQV9UU0RQMjAJMHg0NgkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfQ0RBX1RTRFAyMQkweDQ3CS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9CQ0hBX1RTRFBfQkMxCTB4NDgJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0JDSEFfVFNEUF9CQzIJMHg0OQkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfQkNIQl9UU0RQX0JDMQkweDRBCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9CQ0hCX1RTRFBfQkMyCTB4NEIJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX1RSX1RTRFBfQkMxCTB4NEMJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX1RSX1RTRFBfQkMyCTB4NEQJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0NEQTFfQ1IJCTB4NEUJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0NEQTJfQ1IJCTB4NEYJLyogUi9XCSovCisKKy8qIElPTTogQ29udG9sLCBTeW5jIHRyYW5zZmVyLCBNb25pdG9yICAgICovCisjZGVmaW5lIElTQUNYX1RSX0NSCQkweDUwCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9UUkNfQ1IJCTB4NTAJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0JDSEFfQ1IJCTB4NTEJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0JDSEJfQ1IJCTB4NTIJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0RDSV9DUgkJMHg1MwkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfRENJQ19DUgkJMHg1MwkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfTU9OX0NSCQkweDU0CS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9TRFMxX0NSCQkweDU1CS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9TRFMyX0NSCQkweDU2CS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9JT01fQ1IJCTB4NTcJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX1NUSQkJMHg1OAkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9BU1RJCQkweDU4CS8qIFdSCSovCisjZGVmaW5lIElTQUNYX01TVEkJCTB4NTkJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX1NEU19DT05GCQkweDVBCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9NQ0RBCQkweDVCCS8qIFJECSovCisjZGVmaW5lIElTQUNYX01PUgkJMHg1QwkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9NT1gJCTB4NUMJLyogV1IJKi8KKyNkZWZpbmUgSVNBQ1hfTU9TUgkJMHg1RAkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9NT0NSCQkweDVFCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9NU1RBCQkweDVGCS8qIFJECSovCisjZGVmaW5lIElTQUNYX01DT05GCQkweDVGCS8qIFdSCSovCisKKy8qIEludGVycnVwdCBhbmQgZ2VuZXJhbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVNBQ1hfSVNUQQkJMHg2MAkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9NQVNLCQkweDYwCS8qIFdSCSovCisjZGVmaW5lIElTQUNYX0FVWEkJCTB4NjEJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfQVVYTQkJMHg2MQkvKiBXUgkqLworI2RlZmluZSBJU0FDWF9NT0RFMQkJMHg2MgkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfTU9ERTIJCTB4NjMJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0lECQkweDY0CS8qIFJECSovCisjZGVmaW5lIElTQUNYX1NSRVMJCTB4NjQJLyogV1IJKi8KKyNkZWZpbmUgSVNBQ1hfVElNUjIJCTB4NjUJLyogUi9XCSovCisKKy8qIFJlZ2lzdGVyIEJpdHMgKi8KKy8qIElTQUNYL0lQQUNYIF9JU1RBRCAoUikgYW5kIF9NQVNLRCAoVykgKi8KKyNkZWZpbmUgSVNBQ1hfRF9YRFUJCTB4MDQKKyNkZWZpbmUgSVNBQ1hfRF9YTVIJCTB4MDgKKyNkZWZpbmUgSVNBQ1hfRF9YUFIJCTB4MTAKKyNkZWZpbmUgSVNBQ1hfRF9SRk8JCTB4MjAKKyNkZWZpbmUgSVNBQ1hfRF9SUEYJCTB4NDAKKyNkZWZpbmUgSVNBQ1hfRF9STUUJCTB4ODAKKworLyogSVNBQ1gvSVBBQ1ggX0lTVEEgKFIpIGFuZCBfTUFTSyAoVykgKi8KKyNkZWZpbmUgSVNBQ1hfX0lDRAkJMHgwMQorI2RlZmluZSBJU0FDWF9fTU9TCQkweDAyCisjZGVmaW5lIElTQUNYX19UUkFOCQkweDA0CisjZGVmaW5lIElTQUNYX19BVVgJCTB4MDgKKyNkZWZpbmUgSVNBQ1hfX0NJQwkJMHgxMAorI2RlZmluZSBJU0FDWF9fU1QJCTB4MjAKKyNkZWZpbmUgSVBBQ1hfX0lDQgkJMHg0MAorI2RlZmluZSBJUEFDWF9fSUNBCQkweDgwCisjZGVmaW5lIElQQUNYX19PTgkJMHgyQworCisvKiBJU0FDWC9JUEFDWCBfQ01EUkQgKFcpICovCisjZGVmaW5lIElTQUNYX0NNRFJEX1hSRVMJMHgwMQorI2RlZmluZSBJU0FDWF9DTURSRF9YTUUJCTB4MDIKKyNkZWZpbmUgSVNBQ1hfQ01EUkRfWFRGCQkweDA4CisjZGVmaW5lIElTQUNYX0NNRFJEX1NUSQkJMHgxMAorI2RlZmluZSBJU0FDWF9DTURSRF9SUkVTCTB4NDAKKyNkZWZpbmUgSVNBQ1hfQ01EUkRfUk1DCQkweDgwCisKKy8qIElTQUNYL0lQQUNYIF9SU1RBRCAoUikgKi8KKyNkZWZpbmUgSVNBQ1hfUlNUQURfVEEJCTB4MDEKKyNkZWZpbmUgSVNBQ1hfUlNUQURfQ1IJCTB4MDIKKyNkZWZpbmUgSVNBQ1hfUlNUQURfU0EwCQkweDA0CisjZGVmaW5lIElTQUNYX1JTVEFEX1NBMQkJMHgwOAorI2RlZmluZSBJU0FDWF9SU1RBRF9SQUIJCTB4MTAKKyNkZWZpbmUgSVNBQ1hfUlNUQURfQ1JDCQkweDIwCisjZGVmaW5lIElTQUNYX1JTVEFEX1JETwkJMHg0MAorI2RlZmluZSBJU0FDWF9SU1RBRF9WRlIJCTB4ODAKKworLyogSVNBQ1gvSVBBQ1ggX0NJUjAgKFIpICovCisjZGVmaW5lIElTQUNYX0NJUjBfQkFTCQkweDAxCisjZGVmaW5lIElTQUNYX0NJUjBfU0cJCTB4MDgKKyNkZWZpbmUgSVNBQ1hfQ0lSMF9DSUMxCQkweDA4CisjZGVmaW5lIElTQUNYX0NJUjBfQ0lDMAkJMHgwOAorCisvKiBCLWNoYW5uZWwgcmVnaXN0ZXJzICovCisjZGVmaW5lIElQQUNYX09GRl9JQ0EJCTB4NzAKKyNkZWZpbmUgSVBBQ1hfT0ZGX0lDQgkJMHg4MAorCisvKiBJQ0E6IElQQUNYX09GRl9JQ0EgKyBSZWcgSUNCOiBJUEFDWF9PRkZfSUNCICsgUmVnICovCisKKyNkZWZpbmUgSVBBQ1hfSVNUQUIJCTB4MDAgICAgLyogUkQJKi8KKyNkZWZpbmUgSVBBQ1hfTUFTS0IJCTB4MDAJLyogV1IJKi8KKyNkZWZpbmUgSVBBQ1hfU1RBUkIJCTB4MDEJLyogUkQJKi8KKyNkZWZpbmUgSVBBQ1hfQ01EUkIJCTB4MDEJLyogV1IJKi8KKyNkZWZpbmUgSVBBQ1hfTU9ERUIJCTB4MDIJLyogUi9XCSovCisjZGVmaW5lIElQQUNYX0VYTUIJCTB4MDMJLyogUi9XCSovCisjZGVmaW5lIElQQUNYX1JBSDEJCTB4MDUJLyogV1IJKi8KKyNkZWZpbmUgSVBBQ1hfUkFIMgkJMHgwNgkvKiBXUgkqLworI2RlZmluZSBJUEFDWF9SQkNMQgkJMHgwNgkvKiBSRAkqLworI2RlZmluZSBJUEFDWF9SQkNIQgkJMHgwNwkvKiBSRAkqLworI2RlZmluZSBJUEFDWF9SQUwxCQkweDA3CS8qIFdSCSovCisjZGVmaW5lIElQQUNYX1JBTDIJCTB4MDgJLyogV1IJKi8KKyNkZWZpbmUgSVBBQ1hfUlNUQUIJCTB4MDgJLyogUkQJKi8KKyNkZWZpbmUgSVBBQ1hfVE1CCQkweDA5CS8qIFIvVwkqLworI2RlZmluZSBJUEFDWF9SRklGT0IJCTB4MEEJLyogUkQJKi8KKyNkZWZpbmUgSVBBQ1hfWEZJRk9CCQkweDBBCS8qIFdSCSovCisKKy8qIElQQUNYX0lTVEFCIC8gSVBBQ1hfTUFTS0IgYml0cyAqLworI2RlZmluZSBJUEFDWF9CX1hEVQkJMHgwNAorI2RlZmluZSBJUEFDWF9CX1hQUgkJMHgxMAorI2RlZmluZSBJUEFDWF9CX1JGTwkJMHgyMAorI2RlZmluZSBJUEFDWF9CX1JQRgkJMHg0MAorI2RlZmluZSBJUEFDWF9CX1JNRQkJMHg4MAorCisjZGVmaW5lIElQQUNYX0JfT04JCTB4MEIKKworZXh0ZXJuIGludCBtSVNETmlzYWNfaW5pdChzdHJ1Y3QgaXNhY19odyAqLCB2b2lkICopOworZXh0ZXJuIGlycXJldHVybl90IG1JU0ROaXNhY19pcnEoc3RydWN0IGlzYWNfaHcgKiwgdTgpOworZXh0ZXJuIHUzMiBtSVNETmlwYWNfaW5pdChzdHJ1Y3QgaXBhY19odyAqLCB2b2lkICopOworZXh0ZXJuIGlycXJldHVybl90IG1JU0ROaXBhY19pcnEoc3RydWN0IGlwYWNfaHcgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9pc2FyLmggYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaXNhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMTM0YWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaXNhci5oCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICoKKyAqIGlzYXIuaCAgIElTQVIgKFNpZW1lbnMgUFNCIDcxMTApIHNwZWNpZmljIGRlZmluZXMKKyAqCisgKiBBdXRob3IgS2Fyc3RlbiBLZWlsIChrZWlsQGlzZG40bGludXguZGUpCisgKgorICogQ29weXJpZ2h0IDIwMDkgIGJ5IEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiaW9oZWxwZXIuaCIKKworc3RydWN0IGlzYXJfaHc7CisKK3N0cnVjdCBpc2FyX2NoIHsKKwlzdHJ1Y3QgYmNoYW5uZWwJCWJjaDsKKwlzdHJ1Y3QgaXNhcl9odwkJKmlzOworCXN0cnVjdCB0aW1lcl9saXN0CWZ0aW1lcjsKKwl1OAkJCW5yOworCXU4CQkJZHBhdGg7CisJdTgJCQltbWw7CisJdTgJCQlzdGF0ZTsKKwl1OAkJCWNtZDsKKwl1OAkJCW1vZDsKKwl1OAkJCW5ld2NtZDsKKwl1OAkJCW5ld21vZDsKKwl1OAkJCXRyeV9tb2Q7CisJdTgJCQljb25tc2dbMTZdOworfTsKKworc3RydWN0IGlzYXJfaHcgeworCXN0cnVjdAlpc2FyX2NoCWNoWzJdOworCXZvaWQJCSpodzsKKwlzcGlubG9ja190CSpod2xvY2s7CS8qIGxvY2sgSFcgYWNjY2VzcyAqLworCWNoYXIJCSpuYW1lOworCXN0cnVjdCBtb2R1bGUJKm93bmVyOworCXJlYWRfcmVnX2Z1bmMJKnJlYWRfcmVnOworCXdyaXRlX3JlZ19mdW5jCSp3cml0ZV9yZWc7CisJZmlmb19mdW5jCSpyZWFkX2ZpZm87CisJZmlmb19mdW5jCSp3cml0ZV9maWZvOworCWludAkJKCpjdHJsKSh2b2lkICosIHUzMiwgdV9sb25nKTsKKwl2b2lkCQkoKnJlbGVhc2UpKHN0cnVjdCBpc2FyX2h3ICopOworCWludAkJKCppbml0KShzdHJ1Y3QgaXNhcl9odyAqKTsKKwlpbnQJCSgqb3Blbikoc3RydWN0IGlzYXJfaHcgKiwgc3RydWN0IGNoYW5uZWxfcmVxICopOworCWludAkJKCpmaXJtd2FyZSkoc3RydWN0IGlzYXJfaHcgKiwgY29uc3QgdTggKiwgaW50KTsKKwl1bnNpZ25lZCBsb25nCUZsYWdzOworCWludAkJdmVyc2lvbjsKKwl1OAkJYnN0YXQ7CisJdTgJCWlpczsKKwl1OAkJY21zYjsKKwl1OAkJY2xzYjsKKwl1OAkJYnVmWzI1Nl07CisJdTgJCWxvZ1syNTZdOworfTsKKworI2RlZmluZSBJU0FSX0lSUU1TSwkweDA0CisjZGVmaW5lIElTQVJfSVJRU1RBCTB4MDQKKyNkZWZpbmUgSVNBUl9JUlFCSVQJMHg3NQorI2RlZmluZSBJU0FSX0NUUkxfSAkweDYxCisjZGVmaW5lIElTQVJfQ1RSTF9MCTB4NjAKKyNkZWZpbmUgSVNBUl9JSVMJMHg1OAorI2RlZmluZSBJU0FSX0lJQQkweDU4CisjZGVmaW5lIElTQVJfSElTCTB4NTAKKyNkZWZpbmUgSVNBUl9ISUEJMHg1MAorI2RlZmluZSBJU0FSX01CT1gJMHg0YworI2RlZmluZSBJU0FSX1dBRFIJMHg0YQorI2RlZmluZSBJU0FSX1JBRFIJMHg0OAorCisjZGVmaW5lIElTQVJfSElTX1ZOUgkJMHgxNAorI2RlZmluZSBJU0FSX0hJU19ES0VZCQkweDAyCisjZGVmaW5lIElTQVJfSElTX0ZJUk0JCTB4MWUKKyNkZWZpbmUgSVNBUl9ISVNfU1REU1AJCTB4MDgKKyNkZWZpbmUgSVNBUl9ISVNfRElBRwkJMHgwNQorI2RlZmluZSBJU0FSX0hJU19QMENGRwkJMHgzYworI2RlZmluZSBJU0FSX0hJU19QMTJDRkcJCTB4MjQKKyNkZWZpbmUgSVNBUl9ISVNfU0FSVENGRwkweDI1CisjZGVmaW5lIElTQVJfSElTX1BVTVBDRkcJMHgyNgorI2RlZmluZSBJU0FSX0hJU19QVU1QQ1RSTAkweDJhCisjZGVmaW5lIElTQVJfSElTX0lPTTJDRkcJMHgyNworI2RlZmluZSBJU0FSX0hJU19JT00yUkVRCTB4MDcKKyNkZWZpbmUgSVNBUl9ISVNfSU9NMkNUUkwJMHgyYgorI2RlZmluZSBJU0FSX0hJU19CU1RSRVEJCTB4MGMKKyNkZWZpbmUgSVNBUl9ISVNfUFNUUkVRCQkweDBlCisjZGVmaW5lIElTQVJfSElTX1NEQVRBCQkweDIwCisjZGVmaW5lIElTQVJfSElTX0RQUzEJCTB4NDAKKyNkZWZpbmUgSVNBUl9ISVNfRFBTMgkJMHg4MAorI2RlZmluZSBTRVRfRFBTKHgpCQkoKHg8PDYpICYgMHhjMCkKKworI2RlZmluZSBJU0FSX0lJU19NU0NNU0QJCTB4M2YKKyNkZWZpbmUgSVNBUl9JSVNfVk5SCQkweDE1CisjZGVmaW5lIElTQVJfSUlTX0RLRVkJCTB4MDMKKyNkZWZpbmUgSVNBUl9JSVNfRklSTQkJMHgxZgorI2RlZmluZSBJU0FSX0lJU19TVERTUAkJMHgwOQorI2RlZmluZSBJU0FSX0lJU19ESUFHCQkweDI1CisjZGVmaW5lIElTQVJfSUlTX0dTVEVWCQkweDAwCisjZGVmaW5lIElTQVJfSUlTX0JTVEVWCQkweDI4CisjZGVmaW5lIElTQVJfSUlTX0JTVFJTUAkJMHgyYworI2RlZmluZSBJU0FSX0lJU19QU1RSU1AJCTB4MmUKKyNkZWZpbmUgSVNBUl9JSVNfUFNURVYJCTB4MmEKKyNkZWZpbmUgSVNBUl9JSVNfSU9NMlJTUAkweDI3CisjZGVmaW5lIElTQVJfSUlTX1JEQVRBCQkweDIwCisjZGVmaW5lIElTQVJfSUlTX0lOVk1TRwkJMHgzZgorCisjZGVmaW5lIElTQVJfQ1RSTF9TV1ZFUgkweDEwCisjZGVmaW5lIElTQVJfQ1RSTF9TVFNUCTB4NDAKKworI2RlZmluZSBJU0FSX01TR19IV1ZFUgkweDIwCisKKyNkZWZpbmUgSVNBUl9EUDFfVVNFCTEKKyNkZWZpbmUgSVNBUl9EUDJfVVNFCTIKKyNkZWZpbmUgSVNBUl9SQVRFX1JFUQkzCisKKyNkZWZpbmUgUE1PRF9ESVNBQkxFCTAKKyNkZWZpbmUgUE1PRF9GQVgJMQorI2RlZmluZSBQTU9EX0RBVEFNT0RFTQkyCisjZGVmaW5lIFBNT0RfSEFMRkRVUExFWAkzCisjZGVmaW5lIFBNT0RfVjExMAk0CisjZGVmaW5lIFBNT0RfRFRNRgk1CisjZGVmaW5lIFBNT0RfRFRNRl9UUkFOUwk2CisjZGVmaW5lIFBNT0RfQllQQVNTCTcKKworI2RlZmluZSBQQ1RSTF9PUklHCTB4ODAKKyNkZWZpbmUgUFYzMlAyX1YyM1IJMHg0MAorI2RlZmluZSBQVjMyUDJfVjIyQQkweDIwCisjZGVmaW5lIFBWMzJQMl9WMjJCCTB4MTAKKyNkZWZpbmUgUFYzMlAyX1YyMkMJMHgwOAorI2RlZmluZSBQVjMyUDJfVjIxCTB4MDIKKyNkZWZpbmUgUFYzMlAyX0JFTAkweDAxCisKKy8qIExTQiBNU0IgaW4gSVNBUiBkb2Mgd3JvbmcgISEhIEFyZ2hoaCAqLworI2RlZmluZSBQVjMyUDNfQU1PRAkweDgwCisjZGVmaW5lIFBWMzJQM19WMzJCCTB4MDIKKyNkZWZpbmUgUFYzMlAzX1YyM0IJMHgwMQorI2RlZmluZSBQVjMyUDRfNDgJMHgxMQorI2RlZmluZSBQVjMyUDVfNDgJMHgwNQorI2RlZmluZSBQVjMyUDRfVVQ0OAkweDExCisjZGVmaW5lIFBWMzJQNV9VVDQ4CTB4MGQKKyNkZWZpbmUgUFYzMlA0Xzk2CTB4MTEKKyNkZWZpbmUgUFYzMlA1Xzk2CTB4MDMKKyNkZWZpbmUgUFYzMlA0X1VUOTYJMHgxMQorI2RlZmluZSBQVjMyUDVfVVQ5NgkweDBmCisjZGVmaW5lIFBWMzJQNF9COTYJMHg5MQorI2RlZmluZSBQVjMyUDVfQjk2CTB4MGIKKyNkZWZpbmUgUFYzMlA0X1VUQjk2CTB4ZDEKKyNkZWZpbmUgUFYzMlA1X1VUQjk2CTB4MGYKKyNkZWZpbmUgUFYzMlA0XzEyMAkweGIxCisjZGVmaW5lIFBWMzJQNV8xMjAJMHgwOQorI2RlZmluZSBQVjMyUDRfVVQxMjAJMHhmMQorI2RlZmluZSBQVjMyUDVfVVQxMjAJMHgwZgorI2RlZmluZSBQVjMyUDRfMTQ0CTB4OTkKKyNkZWZpbmUgUFYzMlA1XzE0NAkweDA5CisjZGVmaW5lIFBWMzJQNF9VVDE0NAkweGY5CisjZGVmaW5lIFBWMzJQNV9VVDE0NAkweDBmCisjZGVmaW5lIFBWMzJQNl9DVE4JMHgwMQorI2RlZmluZSBQVjMyUDZfQVROCTB4MDIKKworI2RlZmluZSBQRkFYUDJfQ1ROCTB4MDEKKyNkZWZpbmUgUEZBWFAyX0FUTgkweDA0CisKKyNkZWZpbmUgUFNFVl8xME1TX1RJTUVSCTB4MDIKKyNkZWZpbmUgUFNFVl9DT05fT04JMHgxOAorI2RlZmluZSBQU0VWX0NPTl9PRkYJMHgxOQorI2RlZmluZSBQU0VWX1YyNF9PRkYJMHgyMAorI2RlZmluZSBQU0VWX0NUU19PTgkweDIxCisjZGVmaW5lIFBTRVZfQ1RTX09GRgkweDIyCisjZGVmaW5lIFBTRVZfRENEX09OCTB4MjMKKyNkZWZpbmUgUFNFVl9EQ0RfT0ZGCTB4MjQKKyNkZWZpbmUgUFNFVl9EU1JfT04JMHgyNQorI2RlZmluZSBQU0VWX0RTUl9PRkYJMHgyNgorI2RlZmluZSBQU0VWX1JFTV9SRVQJMHhjYworI2RlZmluZSBQU0VWX1JFTV9SRU4JMHhjZAorI2RlZmluZSBQU0VWX0dTVE5fQ0xSCTB4ZDQKKworI2RlZmluZSBQU0VWX1JTUF9SRUFEWQkweGJjCisjZGVmaW5lIFBTRVZfTElORV9UWF9ICTB4YjMKKyNkZWZpbmUgUFNFVl9MSU5FX1RYX0IJMHhiMgorI2RlZmluZSBQU0VWX0xJTkVfUlhfSAkweGIxCisjZGVmaW5lIFBTRVZfTElORV9SWF9CCTB4YjAKKyNkZWZpbmUgUFNFVl9SU1BfQ09OTgkweGI1CisjZGVmaW5lIFBTRVZfUlNQX0RJU0MJMHhiNworI2RlZmluZSBQU0VWX1JTUF9GQ0VSUgkweGI5CisjZGVmaW5lIFBTRVZfUlNQX1NJTERFVAkweGJlCisjZGVmaW5lIFBTRVZfUlNQX1NJTE9GRgkweGFiCisjZGVmaW5lIFBTRVZfRkxBR1NfREVUCTB4YmEKKworI2RlZmluZSBQQ1RSTF9DTURfVERUTUYJMHg1YQorCisjZGVmaW5lIFBDVFJMX0NNRF9GVEgJMHhhNworI2RlZmluZSBQQ1RSTF9DTURfRlJICTB4YTUKKyNkZWZpbmUgUENUUkxfQ01EX0ZUTQkweGE4CisjZGVmaW5lIFBDVFJMX0NNRF9GUk0JMHhhNgorI2RlZmluZSBQQ1RSTF9DTURfU0lMT04JMHhhYworI2RlZmluZSBQQ1RSTF9DTURfQ09OVAkweGEyCisjZGVmaW5lIFBDVFJMX0NNRF9FU0MJMHhhNAorI2RlZmluZSBQQ1RSTF9DTURfU0lMT0ZGIDB4YWIKKyNkZWZpbmUgUENUUkxfQ01EX0hBTFQJMHhhOQorCisjZGVmaW5lIFBDVFJMX0xPQ19SRVQJMHhjZgorI2RlZmluZSBQQ1RSTF9MT0NfUkVOCTB4Y2UKKworI2RlZmluZSBTTU9ERV9ESVNBQkxFCTAKKyNkZWZpbmUgU01PREVfVjE0CTIKKyNkZWZpbmUgU01PREVfSERMQwkzCisjZGVmaW5lIFNNT0RFX0JJTkFSWQk0CisjZGVmaW5lIFNNT0RFX0ZTS19WMTQJNQorCisjZGVmaW5lIFNDVFJMX0hETUNfQk9USAkweDAwCisjZGVmaW5lIFNDVFJMX0hETUNfRFRYCTB4ODAKKyNkZWZpbmUgU0NUUkxfSERNQ19EUlgJMHg0MAorI2RlZmluZSBTX1AxX09WU1AJMHg0MAorI2RlZmluZSBTX1AxX1NOUAkweDIwCisjZGVmaW5lIFNfUDFfRU9QCTB4MTAKKyNkZWZpbmUgU19QMV9FRFAJMHgwOAorI2RlZmluZSBTX1AxX05TQgkweDA0CisjZGVmaW5lIFNfUDFfQ0hTXzgJMHgwMworI2RlZmluZSBTX1AxX0NIU183CTB4MDIKKyNkZWZpbmUgU19QMV9DSFNfNgkweDAxCisjZGVmaW5lIFNfUDFfQ0hTXzUJMHgwMAorCisjZGVmaW5lIFNfUDJfQkZUX0RFRgkweDEwCisKKyNkZWZpbmUgSU9NX0NUUkxfRU5BCTB4ODAKKyNkZWZpbmUgSU9NX0NUUkxfTk9QQ00JMHgwMAorI2RlZmluZSBJT01fQ1RSTF9BTEFXCTB4MDIKKyNkZWZpbmUgSU9NX0NUUkxfVUxBVwkweDA0CisjZGVmaW5lIElPTV9DVFJMX1JDVgkweDAxCisKKyNkZWZpbmUgSU9NX1AxX1RYRAkweDEwCisKKyNkZWZpbmUgSERMQ19GRUQJMHg0MAorI2RlZmluZSBIRExDX0ZTRAkweDIwCisjZGVmaW5lIEhETENfRlNUCTB4MjAKKyNkZWZpbmUgSERMQ19FUlJPUgkweDFjCisjZGVmaW5lIEhETENfRVJSX0ZBRAkweDEwCisjZGVmaW5lIEhETENfRVJSX1JFUgkweDA4CisjZGVmaW5lIEhETENfRVJSX0NFUgkweDA0CisjZGVmaW5lIFNBUlRfTk1ECTB4MDEKKworI2RlZmluZSBCU1RBVF9SRE0wCTB4MQorI2RlZmluZSBCU1RBVF9SRE0xCTB4MgorI2RlZmluZSBCU1RBVF9SRE0yCTB4NAorI2RlZmluZSBCU1RBVF9SRE0zCTB4OAorI2RlZmluZSBCU1RFVl9UQk8JMHgxZgorI2RlZmluZSBCU1RFVl9SQk8JMHgyZgorCisvKiBGQVggU3RhdGUgTWFjaGluZSAqLworI2RlZmluZSBTVEZBWF9OVUxMCTAKKyNkZWZpbmUgU1RGQVhfUkVBRFkJMQorI2RlZmluZSBTVEZBWF9MSU5FCTIKKyNkZWZpbmUgU1RGQVhfQ09OVAkzCisjZGVmaW5lIFNURkFYX0FDVElWCTQKKyNkZWZpbmUgU1RGQVhfRVNDQVBFCTUKKyNkZWZpbmUgU1RGQVhfU0lMREVUCTYKKworZXh0ZXJuIHUzMiBtSVNETmlzYXJfaW5pdChzdHJ1Y3QgaXNhcl9odyAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgbUlTRE5pc2FyX2lycShzdHJ1Y3QgaXNhcl9odyAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmluZmluZW9uLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pbmZpbmVvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNDQxYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pbmZpbmVvbi5jCkBAIC0wLDAgKzEsMTE3OCBAQAorLyoKKyAqIG1JU0ROaW5maW5lb24uYworICoJCVN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIGZvbGxvd2luZyBJbmZpbmVvbiBJU0ROIGNoaXBzZXRzCisgKgkJLSBJU0FDICsgSFNDWAorICoJCS0gSVBBQyBhbmQgSVBBQy1YCisgKgkJLSBJU0FDLVNYICsgSFNDWAorICoKKyAqIFN1cHBvcnRlZCBjYXJkczoKKyAqCQktIERpYWxvZ2ljIERpdmEgMi4wCisgKgkJLSBEaWFsb2dpYyBEaXZhIDIuMFUKKyAqCQktIERpYWxvZ2ljIERpdmEgMi4wMQorICoJCS0gRGlhbG9naWMgRGl2YSAyLjAyCisgKgkJLSBTZWRsYmF1ZXIgU3BlZWR3aW4KKyAqCQktIEhTVCBTYXBoaXIzCisgKgkJLSBEZXZlbG8gKGZvcm1lciBFTFNBKSBNaWNyb2xpbmsgUENJIChRdWlja3N0ZXAgMTAwMCkKKyAqCQktIERldmVsbyAoZm9ybWVyIEVMU0EpIFF1aWNrc3RlcCAzMDAwCisgKgkJLSBCZXJrb20gU2NpdGVsIEJSSVggUXVhZHJvCisgKgkJLSBEci5OZXVoYXVzIChTYWdlbSkgTmljY3kKKyAqCisgKgorICoKKyAqIEF1dGhvciAgICAgICBLYXJzdGVuIEtlaWwgPGtlaWxAaXNkbjRsaW51eC5kZT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOSAgYnkgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21JU0ROaHcuaD4KKyNpbmNsdWRlICJpcGFjLmgiCisKKyNkZWZpbmUgSU5GSU5FT05fUkVWCSIxLjAiCisKK3N0YXRpYyBpbnQgaW5mX2NudDsKK3N0YXRpYyB1MzIgZGVidWc7CitzdGF0aWMgdTMyIGlycWxvb3BzID0gNDsKKworZW51bSBpbmZfdHlwZXMgeworCUlORl9OT05FLAorCUlORl9ESVZBMjAsCisJSU5GX0RJVkEyMFUsCisJSU5GX0RJVkEyMDEsCisJSU5GX0RJVkEyMDIsCisJSU5GX1NQRUVEV0lOLAorCUlORl9TQVBISVIzLAorCUlORl9RUzEwMDAsCisJSU5GX1FTMzAwMCwKKwlJTkZfTklDQ1ksCisJSU5GX1NDVF8xLAorCUlORl9TQ1RfMiwKKwlJTkZfU0NUXzMsCisJSU5GX1NDVF80LAorCUlORl9HQVpFTF9SNjg1LAorCUlORl9HQVpFTF9SNzUzCit9OworCitlbnVtIGFkZHJfbW9kZSB7CisJQU1fTk9ORSA9IDAsCisJQU1fSU8sCisJQU1fTUVNSU8sCisJQU1fSU5EX0lPLAorfTsKKworc3RydWN0IGluZl9jaW5mbyB7CisJZW51bSBpbmZfdHlwZXMJdHlwOworCWNvbnN0IGNoYXIJKmZ1bGw7CisJY29uc3QgY2hhcgkqbmFtZTsKKwllbnVtIGFkZHJfbW9kZQljZmdfbW9kZTsKKwllbnVtIGFkZHJfbW9kZQlhZGRyX21vZGU7CisJdTgJCWNmZ19iYXI7CisJdTgJCWFkZHJfYmFyOworCXZvaWQJCSppcnFmdW5jOworfTsKKworc3RydWN0IF9pb2FkZHIgeworCWVudW0gYWRkcl9tb2RlCW1vZGU7CisJdW5pb24geworCQl2b2lkIF9faW9tZW0JKnA7CisJCXN0cnVjdCBfaW9wb3J0CWlvOworCX0gYTsKK307CisKK3N0cnVjdCBfaW9oYW5kbGUgeworCWVudW0gYWRkcl9tb2RlCW1vZGU7CisJcmVzb3VyY2Vfc2l6ZV90CXNpemU7CisJcmVzb3VyY2Vfc2l6ZV90CXN0YXJ0OworCXZvaWQgX19pb21lbQkqcDsKK307CisKK3N0cnVjdCBpbmZfaHcgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CisJY29uc3Qgc3RydWN0IGluZl9jaW5mbwkqY2k7CisJY2hhcgkJCW5hbWVbTUlTRE5fTUFYX0lETEVOXTsKKwl1MzIJCQlpcnE7CisJdTMyCQkJaXJxY250OworCXN0cnVjdCBfaW9oYW5kbGUJY2ZnOworCXN0cnVjdCBfaW9oYW5kbGUJYWRkcjsKKwlzdHJ1Y3QgX2lvYWRkcgkJaXNhYzsKKwlzdHJ1Y3QgX2lvYWRkcgkJaHNjeDsKKwlzcGlubG9ja190CQlsb2NrOwkvKiBIVyBhY2Nlc3MgbG9jayAqLworCXN0cnVjdCBpcGFjX2h3CQlpcGFjOworCXN0cnVjdCBpbmZfaHcJCSpzY1szXTsJLyogc2xhdmUgY2FyZHMgKi8KK307CisKKworI2RlZmluZSBQQ0lfU1VCVkVORE9SX0hTVF9TQVBISVIzICAgICAgIDB4NTIKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9TRURMQkFVRVJfUENJICAgICAweDUzCisjZGVmaW5lIFBDSV9TVUJfSURfU0VETEJBVUVSICAgICAgICAgICAgMHgwMQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaW5maW5lb25faWRzW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IFBDSV9WRU5ET1JfSURfRUlDT04sIFBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgSU5GX0RJVkEyMH0sCisJeyBQQ0lfVkVORE9SX0lEX0VJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMF9VLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgSU5GX0RJVkEyMFV9LAorCXsgUENJX1ZFTkRPUl9JRF9FSUNPTiwgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjAxLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgSU5GX0RJVkEyMDF9LAorCXsgUENJX1ZFTkRPUl9JRF9FSUNPTiwgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjAyLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgSU5GX0RJVkEyMDJ9LAorCXsgUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwgUENJX0RFVklDRV9JRF9USUdFUkpFVF8xMDAsCisJICBQQ0lfU1VCVkVORE9SX1NFRExCQVVFUl9QQ0ksIFBDSV9TVUJfSURfU0VETEJBVUVSLCAwLCAwLAorCSAgSU5GX1NQRUVEV0lOfSwKKwl7IFBDSV9WRU5ET1JfSURfVElHRVJKRVQsIFBDSV9ERVZJQ0VfSURfVElHRVJKRVRfMTAwLAorCSAgUENJX1NVQlZFTkRPUl9IU1RfU0FQSElSMywgUENJX1NVQl9JRF9TRURMQkFVRVIsIDAsIDAsIElORl9TQVBISVIzfSwKKwl7IFBDSV9WRU5ET1JfSURfRUxTQSwgUENJX0RFVklDRV9JRF9FTFNBX01JQ1JPTElOSywKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9RUzEwMDB9LAorCXsgUENJX1ZFTkRPUl9JRF9FTFNBLCBQQ0lfREVWSUNFX0lEX0VMU0FfUVMzMDAwLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgSU5GX1FTMzAwMH0sCisJeyBQQ0lfVkVORE9SX0lEX1NBVFNBR0VNLCBQQ0lfREVWSUNFX0lEX1NBVFNBR0VNX05JQ0NZLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgSU5GX05JQ0NZfSwKKwl7IFBDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF85MDUwLAorCSAgUENJX1ZFTkRPUl9JRF9CRVJLT00sIFBDSV9ERVZJQ0VfSURfQkVSS09NX1NDSVRFTF9RVUFEUk8sIDAsIDAsCisJICBJTkZfU0NUXzF9LAorCXsgUENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYX1I2ODUsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBJTkZfR0FaRUxfUjY4NX0sCisJeyBQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfUjc1MywKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9HQVpFTF9SNzUzfSwKKwl7IFBDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF9ESklOTl9JVE9PLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgSU5GX0dBWkVMX1I3NTN9LAorCXsgUENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYX09MSVRFQywKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9HQVpFTF9SNzUzfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaW5maW5lb25faWRzKTsKKworLyogUENJIGludGVyZmFjZSBzcGVjaWZpYyBkZWZpbmVzICovCisvKiBEaXZhIDIuMC8yLjBVICovCisjZGVmaW5lIERJVkFfSFNDWF9QT1JUCQkweDAwCisjZGVmaW5lIERJVkFfSFNDWF9BTEUJCTB4MDQKKyNkZWZpbmUgRElWQV9JU0FDX1BPUlQJCTB4MDgKKyNkZWZpbmUgRElWQV9JU0FDX0FMRQkJMHgwQworI2RlZmluZSBESVZBX1BDSV9DVFJMICAgICAgICAgICAweDEwCisKKy8qIERJVkFfUENJX0NUUkwgYml0cyAqLworI2RlZmluZSBESVZBX0lSUV9CSVQJCTB4MDEKKyNkZWZpbmUgRElWQV9SRVNFVF9CSVQJCTB4MDgKKyNkZWZpbmUgRElWQV9FRVBST01fQ0xLCQkweDQwCisjZGVmaW5lIERJVkFfTEVEX0EJCTB4MTAKKyNkZWZpbmUgRElWQV9MRURfQgkJMHgyMAorI2RlZmluZSBESVZBX0lSUV9DTFIJCTB4ODAKKworLyogRGl2YSAyLjAxLzIuMDIgKi8KKy8qIFNpZW1lbnMgUElUQSAqLworI2RlZmluZSBQSVRBX0lDUl9SRUcJCTB4MDAKKyNkZWZpbmUgUElUQV9JTlQwX1NUQVRVUwkweDAyCisKKyNkZWZpbmUgUElUQV9NSVNDX1JFRwkJMHgxYworI2RlZmluZSBQSVRBX1BBUkFfU09GVFJFU0VUCTB4MDEwMDAwMDAKKyNkZWZpbmUgUElUQV9TRVJfU09GVFJFU0VUCTB4MDIwMDAwMDAKKyNkZWZpbmUgUElUQV9QQVJBX01QWF9NT0RFCTB4MDQwMDAwMDAKKyNkZWZpbmUgUElUQV9JTlQwX0VOQUJMRQkweDAwMDIwMDAwCisKKy8qIFRJR0VSIDEwMCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgVElHRVJfUkVTRVRfQUREUgkweDAwCisjZGVmaW5lIFRJR0VSX0VYVEVSTl9SRVNFVAkweDAxCisjZGVmaW5lIFRJR0VSX0FVWF9DVFJMCQkweDAyCisjZGVmaW5lIFRJR0VSX0FVWF9EQVRBCQkweDAzCisjZGVmaW5lIFRJR0VSX0FVWF9JUlFNQVNLCTB4MDUKKyNkZWZpbmUgVElHRVJfQVVYX1NUQVRVUwkweDA3CisKKy8qIFRpZ2VyIEFVWCBCSVRzICovCisjZGVmaW5lIFRJR0VSX0lPTUFTSwkJMHhkZAkvKiAxIGFuZCA1IGFyZSBpbnB1dHMgKi8KKyNkZWZpbmUgVElHRVJfSVJRX0JJVAkJMHgwMgorCisjZGVmaW5lIFRJR0VSX0lQQUNfQUxFCQkweEMwCisjZGVmaW5lIFRJR0VSX0lQQUNfUE9SVAkJMHhDOAorCisvKiBFTFNBIChub3cgRGV2ZWxvKSBQQ0kgY2FyZHMgKi8KKyNkZWZpbmUgRUxTQV9JUlFfQUREUgkJMHg0YworI2RlZmluZSBFTFNBX0lSUV9NQVNLCQkweDA0CisjZGVmaW5lIFFTMTAwMF9JUlFfT0ZGCQkweDAxCisjZGVmaW5lIFFTMzAwMF9JUlFfT0ZGCQkweDAzCisjZGVmaW5lIFFTMTAwMF9JUlFfT04JCTB4NDEKKyNkZWZpbmUgUVMzMDAwX0lSUV9PTgkJMHg0MworCisvKiBEciBOZXVoYXVzL1NhZ2VtIE5pY2N5ICovCisjZGVmaW5lIE5JQ0NZX0lTQUNfUE9SVAkJMHgwMAorI2RlZmluZSBOSUNDWV9IU0NYX1BPUlQJCTB4MDEKKyNkZWZpbmUgTklDQ1lfSVNBQ19BTEUJCTB4MDIKKyNkZWZpbmUgTklDQ1lfSFNDWF9BTEUJCTB4MDMKKworI2RlZmluZSBOSUNDWV9JUlFfQ1RSTF9SRUcJMHgzOAorI2RlZmluZSBOSUNDWV9JUlFfRU5BQkxFCTB4MDAxZjAwCisjZGVmaW5lIE5JQ0NZX0lSUV9ESVNBQkxFCTB4ZmYwMDAwCisjZGVmaW5lIE5JQ0NZX0lSUV9CSVQJCTB4ODAwMDAwCisKKworLyogU2NpdGVsIFBMWCAqLworI2RlZmluZSBTQ1RfUExYX0lSUV9BRERSCTB4NGMKKyNkZWZpbmUgU0NUX1BMWF9SRVNFVF9BRERSCTB4NTAKKyNkZWZpbmUgU0NUX1BMWF9JUlFfRU5BQkxFCTB4NDEKKyNkZWZpbmUgU0NUX1BMWF9SRVNFVF9CSVQJMHgwNAorCisvKiBHYXplbCAqLworI2RlZmluZQlHQVpFTF9JUEFDX0RBVEFfUE9SVAkweDA0CisvKiBHYXplbCBQTFggKi8KKyNkZWZpbmUgR0FaRUxfQ05UUkwJCTB4NTAKKyNkZWZpbmUgR0FaRUxfUkVTRVQJCTB4MDQKKyNkZWZpbmUgR0FaRUxfUkVTRVRfOTA1MAkweDQwMDAwMDAwCisjZGVmaW5lIEdBWkVMX0lOQ1NSCQkweDRDCisjZGVmaW5lIEdBWkVMX0lTQUNfRU4JCTB4MDgKKyNkZWZpbmUgR0FaRUxfSU5UX0lTQUMJCTB4MjAKKyNkZWZpbmUgR0FaRUxfSFNDWF9FTgkJMHgwMQorI2RlZmluZSBHQVpFTF9JTlRfSFNDWAkJMHgwNAorI2RlZmluZSBHQVpFTF9QQ0lfRU4JCTB4NDAKKyNkZWZpbmUgR0FaRUxfSVBBQ19FTgkJMHgwMworCisKK3N0YXRpYyBMSVNUX0hFQUQoQ2FyZHMpOworc3RhdGljIERFRklORV9SV0xPQ0soY2FyZF9sb2NrKTsgLyogcHJvdGVjdCBDYXJkcyAqLworCitzdGF0aWMgdm9pZAorX3NldF9kZWJ1ZyhzdHJ1Y3QgaW5mX2h3ICpjYXJkKQoreworCWNhcmQtPmlwYWMuaXNhYy5kY2guZGVidWcgPSBkZWJ1ZzsKKwljYXJkLT5pcGFjLmhzY3hbMF0uYmNoLmRlYnVnID0gZGVidWc7CisJY2FyZC0+aXBhYy5oc2N4WzFdLmJjaC5kZWJ1ZyA9IGRlYnVnOworfQorCitzdGF0aWMgaW50CitzZXRfZGVidWcoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpbmZfaHcgKmNhcmQ7CisKKwlyZXQgPSBwYXJhbV9zZXRfdWludCh2YWwsIGtwKTsKKwlpZiAoIXJldCkgeworCQlyZWFkX2xvY2soJmNhcmRfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FyZCwgJkNhcmRzLCBsaXN0KQorCQkJX3NldF9kZWJ1ZyhjYXJkKTsKKwkJcmVhZF91bmxvY2soJmNhcmRfbG9jayk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK01PRFVMRV9BVVRIT1IoIkthcnN0ZW4gS2VpbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX1ZFUlNJT04oSU5GSU5FT05fUkVWKTsKK21vZHVsZV9wYXJhbV9jYWxsKGRlYnVnLCBzZXRfZGVidWcsIHBhcmFtX2dldF91aW50LCAmZGVidWcsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJpbmZpbmVvbiBkZWJ1ZyBtYXNrIik7Cittb2R1bGVfcGFyYW0oaXJxbG9vcHMsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxbG9vcHMsICJpbmZpbmVvbiBtYXhpbWFsIGlycWxvb3BzIChkZWZhdWx0IDQpIik7CisKKy8qIEludGVyZmFjZSBmdW5jdGlvbnMgKi8KKworSU9GVU5DX0lPKElTQUMsIGluZl9odywgaXNhYy5hLmlvKQorSU9GVU5DX0lPKElQQUMsIGluZl9odywgaHNjeC5hLmlvKQorSU9GVU5DX0lORChJU0FDLCBpbmZfaHcsIGlzYWMuYS5pbykKK0lPRlVOQ19JTkQoSVBBQywgaW5mX2h3LCBoc2N4LmEuaW8pCitJT0ZVTkNfTUVNSU8oSVNBQywgaW5mX2h3LCB1MzIsIGlzYWMuYS5wKQorSU9GVU5DX01FTUlPKElQQUMsIGluZl9odywgdTMyLCBoc2N4LmEucCkKKworc3RhdGljIGlycXJldHVybl90CitkaXZhX2lycShpbnQgaW50bm8sIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaW5mX2h3ICpodyA9IGRldl9pZDsKKwl1OCB2YWw7CisKKwlzcGluX2xvY2soJmh3LT5sb2NrKTsKKwl2YWwgPSBpbmIoKHUzMilody0+Y2ZnLnN0YXJ0ICsgRElWQV9QQ0lfQ1RSTCk7CisJaWYgKCEodmFsICYgRElWQV9JUlFfQklUKSkgeyAvKiBmb3IgdXMgb3Igc2hhcmVkID8gKi8KKwkJc3Bpbl91bmxvY2soJmh3LT5sb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOyAvKiBzaGFyZWQgKi8KKwl9CisJaHctPmlycWNudCsrOworCW1JU0ROaXBhY19pcnEoJmh3LT5pcGFjLCBpcnFsb29wcyk7CisJc3Bpbl91bmxvY2soJmh3LT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorZGl2YTIweF9pcnEoaW50IGludG5vLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGluZl9odyAqaHcgPSBkZXZfaWQ7CisJdTggdmFsOworCisJc3Bpbl9sb2NrKCZody0+bG9jayk7CisJdmFsID0gcmVhZGIoaHctPmNmZy5wKTsKKwlpZiAoISh2YWwgJiBQSVRBX0lOVDBfU1RBVFVTKSkgeyAvKiBmb3IgdXMgb3Igc2hhcmVkID8gKi8KKwkJc3Bpbl91bmxvY2soJmh3LT5sb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOyAvKiBzaGFyZWQgKi8KKwl9CisJaHctPmlycWNudCsrOworCW1JU0ROaXBhY19pcnEoJmh3LT5pcGFjLCBpcnFsb29wcyk7CisJd3JpdGViKFBJVEFfSU5UMF9TVEFUVVMsIGh3LT5jZmcucCk7IC8qIEFDSyBQSVRBIElOVDAgKi8KKwlzcGluX3VubG9jaygmaHctPmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90Cit0aWdlcl9pcnEoaW50IGludG5vLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGluZl9odyAqaHcgPSBkZXZfaWQ7CisJdTggdmFsOworCisJc3Bpbl9sb2NrKCZody0+bG9jayk7CisJdmFsID0gaW5iKCh1MzIpaHctPmNmZy5zdGFydCArIFRJR0VSX0FVWF9TVEFUVVMpOworCWlmICh2YWwgJiBUSUdFUl9JUlFfQklUKSB7IC8qIGZvciB1cyBvciBzaGFyZWQgPyAqLworCQlzcGluX3VubG9jaygmaHctPmxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7IC8qIHNoYXJlZCAqLworCX0KKwlody0+aXJxY250Kys7CisJbUlTRE5pcGFjX2lycSgmaHctPmlwYWMsIGlycWxvb3BzKTsKKwlzcGluX3VubG9jaygmaHctPmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90CitlbHNhX2lycShpbnQgaW50bm8sIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaW5mX2h3ICpodyA9IGRldl9pZDsKKwl1OCB2YWw7CisKKwlzcGluX2xvY2soJmh3LT5sb2NrKTsKKwl2YWwgPSBpbmIoKHUzMilody0+Y2ZnLnN0YXJ0ICsgRUxTQV9JUlFfQUREUik7CisJaWYgKCEodmFsICYgRUxTQV9JUlFfTUFTSykpIHsKKwkJc3Bpbl91bmxvY2soJmh3LT5sb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOyAvKiBzaGFyZWQgKi8KKwl9CisJaHctPmlycWNudCsrOworCW1JU0ROaXBhY19pcnEoJmh3LT5pcGFjLCBpcnFsb29wcyk7CisJc3Bpbl91bmxvY2soJmh3LT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorbmljY3lfaXJxKGludCBpbnRubywgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpbmZfaHcgKmh3ID0gZGV2X2lkOworCXUzMiB2YWw7CisKKwlzcGluX2xvY2soJmh3LT5sb2NrKTsKKwl2YWwgPSBpbmwoKHUzMilody0+Y2ZnLnN0YXJ0ICsgTklDQ1lfSVJRX0NUUkxfUkVHKTsKKwlpZiAoISh2YWwgJiBOSUNDWV9JUlFfQklUKSkgeyAvKiBmb3IgdXMgb3Igc2hhcmVkID8gKi8KKwkJc3Bpbl91bmxvY2soJmh3LT5sb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOyAvKiBzaGFyZWQgKi8KKwl9CisJb3V0bCh2YWwsICh1MzIpaHctPmNmZy5zdGFydCArIE5JQ0NZX0lSUV9DVFJMX1JFRyk7CisJaHctPmlycWNudCsrOworCW1JU0ROaXBhY19pcnEoJmh3LT5pcGFjLCBpcnFsb29wcyk7CisJc3Bpbl91bmxvY2soJmh3LT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorZ2F6ZWxfaXJxKGludCBpbnRubywgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpbmZfaHcgKmh3ID0gZGV2X2lkOworCWlycXJldHVybl90IHJldDsKKworCXNwaW5fbG9jaygmaHctPmxvY2spOworCXJldCA9IG1JU0ROaXBhY19pcnEoJmh3LT5pcGFjLCBpcnFsb29wcyk7CisJc3Bpbl91bmxvY2soJmh3LT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK2lwYWNfaXJxKGludCBpbnRubywgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpbmZfaHcgKmh3ID0gZGV2X2lkOworCXU4IHZhbDsKKworCXNwaW5fbG9jaygmaHctPmxvY2spOworCXZhbCA9IGh3LT5pcGFjLnJlYWRfcmVnKGh3LCBJUEFDX0lTVEEpOworCWlmICghKHZhbCAmIDB4M2YpKSB7CisJCXNwaW5fdW5sb2NrKCZody0+bG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsgLyogc2hhcmVkICovCisJfQorCWh3LT5pcnFjbnQrKzsKKwltSVNETmlwYWNfaXJxKCZody0+aXBhYywgaXJxbG9vcHMpOworCXNwaW5fdW5sb2NrKCZody0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZAorZW5hYmxlX2h3aXJxKHN0cnVjdCBpbmZfaHcgKmh3KQoreworCXUxNiB3OworCXUzMiB2YWw7CisKKwlzd2l0Y2ggKGh3LT5jaS0+dHlwKSB7CisJY2FzZSBJTkZfRElWQTIwMToKKwljYXNlIElORl9ESVZBMjAyOgorCQl3cml0ZWwoUElUQV9JTlQwX0VOQUJMRSwgaHctPmNmZy5wKTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfU1BFRURXSU46CisJY2FzZSBJTkZfU0FQSElSMzoKKwkJb3V0YihUSUdFUl9JUlFfQklULCAodTMyKWh3LT5jZmcuc3RhcnQgKyBUSUdFUl9BVVhfSVJRTUFTSyk7CisJCWJyZWFrOworCWNhc2UgSU5GX1FTMTAwMDoKKwkJb3V0YihRUzEwMDBfSVJRX09OLCAodTMyKWh3LT5jZmcuc3RhcnQgKyBFTFNBX0lSUV9BRERSKTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfUVMzMDAwOgorCQlvdXRiKFFTMzAwMF9JUlFfT04sICh1MzIpaHctPmNmZy5zdGFydCArIEVMU0FfSVJRX0FERFIpOworCQlicmVhazsKKwljYXNlIElORl9OSUNDWToKKwkJdmFsID0gaW5sKCh1MzIpaHctPmNmZy5zdGFydCArIE5JQ0NZX0lSUV9DVFJMX1JFRyk7CisJCXZhbCB8PSBOSUNDWV9JUlFfRU5BQkxFOzsKKwkJb3V0bCh2YWwsICh1MzIpaHctPmNmZy5zdGFydCArIE5JQ0NZX0lSUV9DVFJMX1JFRyk7CisJCWJyZWFrOworCWNhc2UgSU5GX1NDVF8xOgorCQl3ID0gaW53KCh1MzIpaHctPmNmZy5zdGFydCArIFNDVF9QTFhfSVJRX0FERFIpOworCQl3IHw9IFNDVF9QTFhfSVJRX0VOQUJMRTsKKwkJb3V0dyh3LCAodTMyKWh3LT5jZmcuc3RhcnQgKyBTQ1RfUExYX0lSUV9BRERSKTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfR0FaRUxfUjY4NToKKwkJb3V0YihHQVpFTF9JU0FDX0VOICsgR0FaRUxfSFNDWF9FTiArIEdBWkVMX1BDSV9FTiwKKwkJCSh1MzIpaHctPmNmZy5zdGFydCArIEdBWkVMX0lOQ1NSKTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfR0FaRUxfUjc1MzoKKwkJb3V0YihHQVpFTF9JUEFDX0VOICsgR0FaRUxfUENJX0VOLAorCQkJKHUzMilody0+Y2ZnLnN0YXJ0ICsgR0FaRUxfSU5DU1IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitkaXNhYmxlX2h3aXJxKHN0cnVjdCBpbmZfaHcgKmh3KQoreworCXUxNiB3OworCXUzMiB2YWw7CisKKwlzd2l0Y2ggKGh3LT5jaS0+dHlwKSB7CisJY2FzZSBJTkZfRElWQTIwMToKKwljYXNlIElORl9ESVZBMjAyOgorCQl3cml0ZWwoMCwgaHctPmNmZy5wKTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfU1BFRURXSU46CisJY2FzZSBJTkZfU0FQSElSMzoKKwkJb3V0YigwLCAodTMyKWh3LT5jZmcuc3RhcnQgKyBUSUdFUl9BVVhfSVJRTUFTSyk7CisJCWJyZWFrOworCWNhc2UgSU5GX1FTMTAwMDoKKwkJb3V0YihRUzEwMDBfSVJRX09GRiwgKHUzMilody0+Y2ZnLnN0YXJ0ICsgRUxTQV9JUlFfQUREUik7CisJCWJyZWFrOworCWNhc2UgSU5GX1FTMzAwMDoKKwkJb3V0YihRUzMwMDBfSVJRX09GRiwgKHUzMilody0+Y2ZnLnN0YXJ0ICsgRUxTQV9JUlFfQUREUik7CisJCWJyZWFrOworCWNhc2UgSU5GX05JQ0NZOgorCQl2YWwgPSBpbmwoKHUzMilody0+Y2ZnLnN0YXJ0ICsgTklDQ1lfSVJRX0NUUkxfUkVHKTsKKwkJdmFsICY9IE5JQ0NZX0lSUV9ESVNBQkxFOworCQlvdXRsKHZhbCwgKHUzMilody0+Y2ZnLnN0YXJ0ICsgTklDQ1lfSVJRX0NUUkxfUkVHKTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfU0NUXzE6CisJCXcgPSBpbncoKHUzMilody0+Y2ZnLnN0YXJ0ICsgU0NUX1BMWF9JUlFfQUREUik7CisJCXcgJj0gKH5TQ1RfUExYX0lSUV9FTkFCTEUpOworCQlvdXR3KHcsICh1MzIpaHctPmNmZy5zdGFydCArIFNDVF9QTFhfSVJRX0FERFIpOworCQlicmVhazsKKwljYXNlIElORl9HQVpFTF9SNjg1OgorCWNhc2UgSU5GX0dBWkVMX1I3NTM6CisJCW91dGIoMCwgKHUzMilody0+Y2ZnLnN0YXJ0ICsgR0FaRUxfSU5DU1IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpcGFjX2NoaXBfcmVzZXQoc3RydWN0IGluZl9odyAqaHcpCit7CisJaHctPmlwYWMud3JpdGVfcmVnKGh3LCBJUEFDX1BPVEEyLCAweDIwKTsKKwltZGVsYXkoNSk7CisJaHctPmlwYWMud3JpdGVfcmVnKGh3LCBJUEFDX1BPVEEyLCAweDAwKTsKKwltZGVsYXkoNSk7CisJaHctPmlwYWMud3JpdGVfcmVnKGh3LCBJUEFDX0NPTkYsIGh3LT5pcGFjLmNvbmYpOworCWh3LT5pcGFjLndyaXRlX3JlZyhodywgSVBBQ19NQVNLLCAweGMwKTsKK30KKworc3RhdGljIHZvaWQKK3Jlc2V0X2luZihzdHJ1Y3QgaW5mX2h3ICpodykKK3sKKwl1MTYgdzsKKwl1MzIgdmFsOworCisJaWYgKGRlYnVnICYgREVCVUdfSFcpCisJCXByX25vdGljZSgiJXM6IHJlc2V0dGluZyBjYXJkXG4iLCBody0+bmFtZSk7CisJc3dpdGNoIChody0+Y2ktPnR5cCkgeworCWNhc2UgSU5GX0RJVkEyMDoKKwljYXNlIElORl9ESVZBMjBVOgorCQlvdXRiKDAsICh1MzIpaHctPmNmZy5zdGFydCArIERJVkFfUENJX0NUUkwpOworCQltZGVsYXkoMTApOworCQlvdXRiKERJVkFfUkVTRVRfQklULCAodTMyKWh3LT5jZmcuc3RhcnQgKyBESVZBX1BDSV9DVFJMKTsKKwkJbWRlbGF5KDEwKTsKKwkJLyogV29ya2Fyb3VuZCBQQ0k5MDYwICovCisJCW91dGIoOSwgKHUzMilody0+Y2ZnLnN0YXJ0ICsgMHg2OSk7CisJCW91dGIoRElWQV9SRVNFVF9CSVQgfCBESVZBX0xFRF9BLAorCQkJKHUzMilody0+Y2ZnLnN0YXJ0ICsgRElWQV9QQ0lfQ1RSTCk7CisJCWJyZWFrOworCWNhc2UgSU5GX0RJVkEyMDE6CisJCXdyaXRlbChQSVRBX1BBUkFfU09GVFJFU0VUIHwgUElUQV9QQVJBX01QWF9NT0RFLAorCQkJaHctPmNmZy5wICsgUElUQV9NSVNDX1JFRyk7CisJCW1kZWxheSgxKTsKKwkJd3JpdGVsKFBJVEFfUEFSQV9NUFhfTU9ERSwgaHctPmNmZy5wICsgUElUQV9NSVNDX1JFRyk7CisJCW1kZWxheSgxMCk7CisJCWJyZWFrOworCWNhc2UgSU5GX0RJVkEyMDI6CisJCXdyaXRlbChQSVRBX1BBUkFfU09GVFJFU0VUIHwgUElUQV9QQVJBX01QWF9NT0RFLAorCQkJaHctPmNmZy5wICsgUElUQV9NSVNDX1JFRyk7CisJCW1kZWxheSgxKTsKKwkJd3JpdGVsKFBJVEFfUEFSQV9NUFhfTU9ERSB8IFBJVEFfU0VSX1NPRlRSRVNFVCwKKwkJCWh3LT5jZmcucCArIFBJVEFfTUlTQ19SRUcpOworCQltZGVsYXkoMTApOworCQlicmVhazsKKwljYXNlIElORl9TUEVFRFdJTjoKKwljYXNlIElORl9TQVBISVIzOgorCQlpcGFjX2NoaXBfcmVzZXQoaHcpOworCQlody0+aXBhYy53cml0ZV9yZWcoaHcsIElQQUNfQUNGRywgMHhmZik7CisJCWh3LT5pcGFjLndyaXRlX3JlZyhodywgSVBBQ19BT0UsIDB4MDApOworCQlody0+aXBhYy53cml0ZV9yZWcoaHcsIElQQUNfUENGRywgMHgxMik7CisJCWJyZWFrOworCWNhc2UgSU5GX1FTMTAwMDoKKwljYXNlIElORl9RUzMwMDA6CisJCWlwYWNfY2hpcF9yZXNldChodyk7CisJCWh3LT5pcGFjLndyaXRlX3JlZyhodywgSVBBQ19BQ0ZHLCAweDAwKTsKKwkJaHctPmlwYWMud3JpdGVfcmVnKGh3LCBJUEFDX0FPRSwgMHgzYyk7CisJCWh3LT5pcGFjLndyaXRlX3JlZyhodywgSVBBQ19BVFgsIDB4ZmYpOworCQlicmVhazsKKwljYXNlIElORl9OSUNDWToKKwkJYnJlYWs7CisJY2FzZSBJTkZfU0NUXzE6CisJCXcgPSBpbncoKHUzMilody0+Y2ZnLnN0YXJ0ICsgU0NUX1BMWF9SRVNFVF9BRERSKTsKKwkJdyAmPSAoflNDVF9QTFhfUkVTRVRfQklUKTsKKwkJb3V0dyh3LCAodTMyKWh3LT5jZmcuc3RhcnQgKyBTQ1RfUExYX1JFU0VUX0FERFIpOworCQltZGVsYXkoMTApOworCQl3ID0gaW53KCh1MzIpaHctPmNmZy5zdGFydCArIFNDVF9QTFhfUkVTRVRfQUREUik7CisJCXcgfD0gU0NUX1BMWF9SRVNFVF9CSVQ7CisJCW91dHcodywgKHUzMilody0+Y2ZnLnN0YXJ0ICsgU0NUX1BMWF9SRVNFVF9BRERSKTsKKwkJbWRlbGF5KDEwKTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfR0FaRUxfUjY4NToKKwkJdmFsID0gaW5sKCh1MzIpaHctPmNmZy5zdGFydCArIEdBWkVMX0NOVFJMKTsKKwkJdmFsIHw9IChHQVpFTF9SRVNFVF85MDUwICsgR0FaRUxfUkVTRVQpOworCQlvdXRsKHZhbCwgKHUzMilody0+Y2ZnLnN0YXJ0ICsgR0FaRUxfQ05UUkwpOworCQl2YWwgJj0gfihHQVpFTF9SRVNFVF85MDUwICsgR0FaRUxfUkVTRVQpOworCQltZGVsYXkoNCk7CisJCW91dGwodmFsLCAodTMyKWh3LT5jZmcuc3RhcnQgKyBHQVpFTF9DTlRSTCk7CisJCW1kZWxheSgxMCk7CisJCWh3LT5pcGFjLmlzYWMuYWRmMiA9IDB4ODc7CisJCWh3LT5pcGFjLmhzY3hbMF0uc2xvdCA9IDB4MWY7CisJCWh3LT5pcGFjLmhzY3hbMF0uc2xvdCA9IDB4MjM7CisJCWJyZWFrOworCWNhc2UgSU5GX0dBWkVMX1I3NTM6CisJCXZhbCA9IGlubCgodTMyKWh3LT5jZmcuc3RhcnQgKyBHQVpFTF9DTlRSTCk7CisJCXZhbCB8PSAoR0FaRUxfUkVTRVRfOTA1MCArIEdBWkVMX1JFU0VUKTsKKwkJb3V0bCh2YWwsICh1MzIpaHctPmNmZy5zdGFydCArIEdBWkVMX0NOVFJMKTsKKwkJdmFsICY9IH4oR0FaRUxfUkVTRVRfOTA1MCArIEdBWkVMX1JFU0VUKTsKKwkJbWRlbGF5KDQpOworCQlvdXRsKHZhbCwgKHUzMilody0+Y2ZnLnN0YXJ0ICsgR0FaRUxfQ05UUkwpOworCQltZGVsYXkoMTApOworCQlpcGFjX2NoaXBfcmVzZXQoaHcpOworCQlody0+aXBhYy53cml0ZV9yZWcoaHcsIElQQUNfQUNGRywgMHhmZik7CisJCWh3LT5pcGFjLndyaXRlX3JlZyhodywgSVBBQ19BT0UsIDB4MDApOworCQlody0+aXBhYy5jb25mID0gMHgwMTsgLyogSU9NIG9mZiAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCWVuYWJsZV9od2lycShodyk7Cit9CisKK3N0YXRpYyBpbnQKK2luZl9jdHJsKHN0cnVjdCBpbmZfaHcgKmh3LCB1MzIgY21kLCB1X2xvbmcgYXJnKQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEhXX1JFU0VUX1JFUToKKwkJcmVzZXRfaW5mKGh3KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6ICVzIHVua25vd24gY29tbWFuZCAleCAlbHhcbiIsCisJCQlody0+bmFtZSwgX19mdW5jX18sIGNtZCwgYXJnKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0Citpbml0X2lycShzdHJ1Y3QgaW5mX2h3ICpodykKK3sKKwlpbnQJcmV0LCBjbnQgPSAzOworCXVfbG9uZwlmbGFnczsKKworCWlmICghaHctPmNpLT5pcnFmdW5jKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXQgPSByZXF1ZXN0X2lycShody0+aXJxLCBody0+Y2ktPmlycWZ1bmMsIElSUUZfU0hBUkVELCBody0+bmFtZSwgaHcpOworCWlmIChyZXQpIHsKKwkJcHJfaW5mbygiJXM6IGNvdWxkbid0IGdldCBpbnRlcnJ1cHQgJWRcbiIsIGh3LT5uYW1lLCBody0+aXJxKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJd2hpbGUgKGNudC0tKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOworCQlyZXNldF9pbmYoaHcpOworCQlyZXQgPSBody0+aXBhYy5pbml0KCZody0+aXBhYyk7CisJCWlmIChyZXQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5sb2NrLCBmbGFncyk7CisJCQlwcl9pbmZvKCIlczogSVNBQyBpbml0IGZhaWxlZCB3aXRoICVkXG4iLAorCQkJCWh3LT5uYW1lLCByZXQpOworCQkJYnJlYWs7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmxvY2ssIGZsYWdzKTsKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOworCQlpZiAoZGVidWcgJiBERUJVR19IVykKKwkJCXByX25vdGljZSgiJXM6IElSUSAlZCBjb3VudCAlZFxuIiwgaHctPm5hbWUsCisJCQkJaHctPmlycSwgaHctPmlycWNudCk7CisJCWlmICghaHctPmlycWNudCkgeworCQkJcHJfaW5mbygiJXM6IElSUSglZCkgZ290IG5vIHJlcXVlc3RzIGR1cmluZyBpbml0ICVkXG4iLAorCQkJCWh3LT5uYW1lLCBody0+aXJxLCAzIC0gY250KTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gMDsKKwl9CisJZnJlZV9pcnEoaHctPmlycSwgaHcpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgdm9pZAorcmVsZWFzZV9pbyhzdHJ1Y3QgaW5mX2h3ICpodykKK3sKKwlpZiAoaHctPmNmZy5tb2RlKSB7CisJCWlmIChody0+Y2ZnLnApIHsKKwkJCXJlbGVhc2VfbWVtX3JlZ2lvbihody0+Y2ZnLnN0YXJ0LCBody0+Y2ZnLnNpemUpOworCQkJaW91bm1hcChody0+Y2ZnLnApOworCQl9IGVsc2UKKwkJCXJlbGVhc2VfcmVnaW9uKGh3LT5jZmcuc3RhcnQsIGh3LT5jZmcuc2l6ZSk7CisJCWh3LT5jZmcubW9kZSA9IEFNX05PTkU7CisJfQorCWlmIChody0+YWRkci5tb2RlKSB7CisJCWlmIChody0+YWRkci5wKSB7CisJCQlyZWxlYXNlX21lbV9yZWdpb24oaHctPmFkZHIuc3RhcnQsIGh3LT5hZGRyLnNpemUpOworCQkJaW91bm1hcChody0+YWRkci5wKTsKKwkJfSBlbHNlCisJCQlyZWxlYXNlX3JlZ2lvbihody0+YWRkci5zdGFydCwgaHctPmFkZHIuc2l6ZSk7CisJCWh3LT5hZGRyLm1vZGUgPSBBTV9OT05FOworCX0KK30KKworc3RhdGljIGludCBfX2RldmluaXQKK3NldHVwX2lvKHN0cnVjdCBpbmZfaHcgKmh3KQoreworCWludCBlcnIgPSAwOworCisJaWYgKGh3LT5jaS0+Y2ZnX21vZGUpIHsKKwkJaHctPmNmZy5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChody0+cGRldiwgaHctPmNpLT5jZmdfYmFyKTsKKwkJaHctPmNmZy5zaXplID0gcGNpX3Jlc291cmNlX2xlbihody0+cGRldiwgaHctPmNpLT5jZmdfYmFyKTsKKwkJaWYgKGh3LT5jaS0+Y2ZnX21vZGUgPT0gQU1fTUVNSU8pIHsKKwkJCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGh3LT5jZmcuc3RhcnQsIGh3LT5jZmcuc2l6ZSwKKwkJCSAgICBody0+bmFtZSkpCisJCQkJZXJyID0gLUVCVVNZOworCQl9IGVsc2UgeworCQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihody0+Y2ZnLnN0YXJ0LCBody0+Y2ZnLnNpemUsCisJCQkgICAgaHctPm5hbWUpKQorCQkJCWVyciA9IC1FQlVTWTsKKwkJfQorCQlpZiAoZXJyKSB7CisJCQlwcl9pbmZvKCJtSVNETjogJXMgY29uZmlnIHBvcnQgJWx4ICglbHUgYnl0ZXMpIgorCQkJCSJhbHJlYWR5IGluIHVzZVxuIiwgaHctPm5hbWUsCisJCQkJKHVsb25nKWh3LT5jZmcuc3RhcnQsICh1bG9uZylody0+Y2ZnLnNpemUpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlpZiAoaHctPmNpLT5jZmdfbW9kZSA9PSBBTV9NRU1JTykKKwkJCWh3LT5jZmcucCA9IGlvcmVtYXAoaHctPmNmZy5zdGFydCwgaHctPmNmZy5zaXplKTsKKwkJaHctPmNmZy5tb2RlID0gaHctPmNpLT5jZmdfbW9kZTsKKwkJaWYgKGRlYnVnICYgREVCVUdfSFcpCisJCQlwcl9ub3RpY2UoIiVzOiBJTyBjZmcgJWx4ICglbHUgYnl0ZXMpIG1vZGUlZFxuIiwKKwkJCQlody0+bmFtZSwgKHVsb25nKWh3LT5jZmcuc3RhcnQsCisJCQkJKHVsb25nKWh3LT5jZmcuc2l6ZSwgaHctPmNpLT5jZmdfbW9kZSk7CisKKwl9CisJaWYgKGh3LT5jaS0+YWRkcl9tb2RlKSB7CisJCWh3LT5hZGRyLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KGh3LT5wZGV2LCBody0+Y2ktPmFkZHJfYmFyKTsKKwkJaHctPmFkZHIuc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oaHctPnBkZXYsIGh3LT5jaS0+YWRkcl9iYXIpOworCQlpZiAoaHctPmNpLT5hZGRyX21vZGUgPT0gQU1fTUVNSU8pIHsKKwkJCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGh3LT5hZGRyLnN0YXJ0LCBody0+YWRkci5zaXplLAorCQkJICAgIGh3LT5uYW1lKSkKKwkJCQllcnIgPSAtRUJVU1k7CisJCX0gZWxzZSB7CisJCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGh3LT5hZGRyLnN0YXJ0LCBody0+YWRkci5zaXplLAorCQkJICAgIGh3LT5uYW1lKSkKKwkJCQllcnIgPSAtRUJVU1k7CisJCX0KKwkJaWYgKGVycikgeworCQkJcHJfaW5mbygibUlTRE46ICVzIGFkZHJlc3MgcG9ydCAlbHggKCVsdSBieXRlcykiCisJCQkJImFscmVhZHkgaW4gdXNlXG4iLCBody0+bmFtZSwKKwkJCQkodWxvbmcpaHctPmFkZHIuc3RhcnQsICh1bG9uZylody0+YWRkci5zaXplKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJaWYgKGh3LT5jaS0+YWRkcl9tb2RlID09IEFNX01FTUlPKQorCQkJaHctPmFkZHIucCA9IGlvcmVtYXAoaHctPmFkZHIuc3RhcnQsIGh3LT5hZGRyLnNpemUpOworCQlody0+YWRkci5tb2RlID0gaHctPmNpLT5hZGRyX21vZGU7CisJCWlmIChkZWJ1ZyAmIERFQlVHX0hXKQorCQkJcHJfbm90aWNlKCIlczogSU8gYWRkciAlbHggKCVsdSBieXRlcykgbW9kZSVkXG4iLAorCQkJCWh3LT5uYW1lLCAodWxvbmcpaHctPmFkZHIuc3RhcnQsCisJCQkJKHVsb25nKWh3LT5hZGRyLnNpemUsIGh3LT5jaS0+YWRkcl9tb2RlKTsKKworCX0KKworCXN3aXRjaCAoaHctPmNpLT50eXApIHsKKwljYXNlIElORl9ESVZBMjA6CisJY2FzZSBJTkZfRElWQTIwVToKKwkJaHctPmlwYWMudHlwZSA9IElQQUNfVFlQRV9JU0FDIHwgSVBBQ19UWVBFX0hTQ1g7CisJCWh3LT5pc2FjLm1vZGUgPSBody0+Y2ZnLm1vZGU7CisJCWh3LT5pc2FjLmEuaW8uYWxlID0gKHUzMilody0+Y2ZnLnN0YXJ0ICsgRElWQV9JU0FDX0FMRTsKKwkJaHctPmlzYWMuYS5pby5wb3J0ID0gKHUzMilody0+Y2ZnLnN0YXJ0ICsgRElWQV9JU0FDX1BPUlQ7CisJCWh3LT5oc2N4Lm1vZGUgPSBody0+Y2ZnLm1vZGU7CisJCWh3LT5oc2N4LmEuaW8uYWxlID0gKHUzMilody0+Y2ZnLnN0YXJ0ICsgRElWQV9IU0NYX0FMRTsKKwkJaHctPmhzY3guYS5pby5wb3J0ID0gKHUzMilody0+Y2ZnLnN0YXJ0ICsgRElWQV9IU0NYX1BPUlQ7CisJCWJyZWFrOworCWNhc2UgSU5GX0RJVkEyMDE6CisJCWh3LT5pcGFjLnR5cGUgPSBJUEFDX1RZUEVfSVBBQzsKKwkJaHctPmlwYWMuaXNhYy5vZmYgPSAweDgwOworCQlody0+aXNhYy5tb2RlID0gaHctPmFkZHIubW9kZTsKKwkJaHctPmlzYWMuYS5wID0gaHctPmFkZHIucDsKKwkJaHctPmhzY3gubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWh3LT5oc2N4LmEucCA9IGh3LT5hZGRyLnA7CisJCWJyZWFrOworCWNhc2UgSU5GX0RJVkEyMDI6CisJCWh3LT5pcGFjLnR5cGUgPSBJUEFDX1RZUEVfSVBBQ1g7CisJCWh3LT5pc2FjLm1vZGUgPSBody0+YWRkci5tb2RlOworCQlody0+aXNhYy5hLnAgPSBody0+YWRkci5wOworCQlody0+aHNjeC5tb2RlID0gaHctPmFkZHIubW9kZTsKKwkJaHctPmhzY3guYS5wID0gaHctPmFkZHIucDsKKwkJYnJlYWs7CisJY2FzZSBJTkZfU1BFRURXSU46CisJY2FzZSBJTkZfU0FQSElSMzoKKwkJaHctPmlwYWMudHlwZSA9IElQQUNfVFlQRV9JUEFDOworCQlody0+aXBhYy5pc2FjLm9mZiA9IDB4ODA7CisJCWh3LT5pc2FjLm1vZGUgPSBody0+Y2ZnLm1vZGU7CisJCWh3LT5pc2FjLmEuaW8uYWxlID0gKHUzMilody0+Y2ZnLnN0YXJ0ICsgVElHRVJfSVBBQ19BTEU7CisJCWh3LT5pc2FjLmEuaW8ucG9ydCA9ICh1MzIpaHctPmNmZy5zdGFydCArIFRJR0VSX0lQQUNfUE9SVDsKKwkJaHctPmhzY3gubW9kZSA9IGh3LT5jZmcubW9kZTsKKwkJaHctPmhzY3guYS5pby5hbGUgPSAodTMyKWh3LT5jZmcuc3RhcnQgKyBUSUdFUl9JUEFDX0FMRTsKKwkJaHctPmhzY3guYS5pby5wb3J0ID0gKHUzMilody0+Y2ZnLnN0YXJ0ICsgVElHRVJfSVBBQ19QT1JUOworCQlvdXRiKDB4ZmYsICh1bG9uZylody0+Y2ZnLnN0YXJ0KTsKKwkJbWRlbGF5KDEpOworCQlvdXRiKDB4MDAsICh1bG9uZylody0+Y2ZnLnN0YXJ0KTsKKwkJbWRlbGF5KDEpOworCQlvdXRiKFRJR0VSX0lPTUFTSywgKHVsb25nKWh3LT5jZmcuc3RhcnQgKyBUSUdFUl9BVVhfQ1RSTCk7CisJCWJyZWFrOworCWNhc2UgSU5GX1FTMTAwMDoKKwljYXNlIElORl9RUzMwMDA6CisJCWh3LT5pcGFjLnR5cGUgPSBJUEFDX1RZUEVfSVBBQzsKKwkJaHctPmlwYWMuaXNhYy5vZmYgPSAweDgwOworCQlody0+aXNhYy5hLmlvLmFsZSA9ICh1MzIpaHctPmFkZHIuc3RhcnQ7CisJCWh3LT5pc2FjLmEuaW8ucG9ydCA9ICh1MzIpaHctPmFkZHIuc3RhcnQgKyAxOworCQlody0+aXNhYy5tb2RlID0gaHctPmFkZHIubW9kZTsKKwkJaHctPmhzY3guYS5pby5hbGUgPSAodTMyKWh3LT5hZGRyLnN0YXJ0OworCQlody0+aHNjeC5hLmlvLnBvcnQgPSAodTMyKWh3LT5hZGRyLnN0YXJ0ICsgMTsKKwkJaHctPmhzY3gubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWJyZWFrOworCWNhc2UgSU5GX05JQ0NZOgorCQlody0+aXBhYy50eXBlID0gSVBBQ19UWVBFX0lTQUMgfCBJUEFDX1RZUEVfSFNDWDsKKwkJaHctPmlzYWMubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWh3LT5pc2FjLmEuaW8uYWxlID0gKHUzMilody0+YWRkci5zdGFydCArIE5JQ0NZX0lTQUNfQUxFOworCQlody0+aXNhYy5hLmlvLnBvcnQgPSAodTMyKWh3LT5hZGRyLnN0YXJ0ICsgTklDQ1lfSVNBQ19QT1JUOworCQlody0+aHNjeC5tb2RlID0gaHctPmFkZHIubW9kZTsKKwkJaHctPmhzY3guYS5pby5hbGUgPSAodTMyKWh3LT5hZGRyLnN0YXJ0ICsgTklDQ1lfSFNDWF9BTEU7CisJCWh3LT5oc2N4LmEuaW8ucG9ydCA9ICh1MzIpaHctPmFkZHIuc3RhcnQgKyBOSUNDWV9IU0NYX1BPUlQ7CisJCWJyZWFrOworCWNhc2UgSU5GX1NDVF8xOgorCQlody0+aXBhYy50eXBlID0gSVBBQ19UWVBFX0lQQUM7CisJCWh3LT5pcGFjLmlzYWMub2ZmID0gMHg4MDsKKwkJaHctPmlzYWMuYS5pby5hbGUgPSAodTMyKWh3LT5hZGRyLnN0YXJ0OworCQlody0+aXNhYy5hLmlvLnBvcnQgPSBody0+aXNhYy5hLmlvLmFsZSArIDQ7CisJCWh3LT5pc2FjLm1vZGUgPSBody0+YWRkci5tb2RlOworCQlody0+aHNjeC5hLmlvLmFsZSA9IGh3LT5pc2FjLmEuaW8uYWxlOworCQlody0+aHNjeC5hLmlvLnBvcnQgPSBody0+aXNhYy5hLmlvLnBvcnQ7CisJCWh3LT5oc2N4Lm1vZGUgPSBody0+YWRkci5tb2RlOworCQlicmVhazsKKwljYXNlIElORl9TQ1RfMjoKKwkJaHctPmlwYWMudHlwZSA9IElQQUNfVFlQRV9JUEFDOworCQlody0+aXBhYy5pc2FjLm9mZiA9IDB4ODA7CisJCWh3LT5pc2FjLmEuaW8uYWxlID0gKHUzMilody0+YWRkci5zdGFydCArIDB4MDg7CisJCWh3LT5pc2FjLmEuaW8ucG9ydCA9IGh3LT5pc2FjLmEuaW8uYWxlICsgNDsKKwkJaHctPmlzYWMubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWh3LT5oc2N4LmEuaW8uYWxlID0gaHctPmlzYWMuYS5pby5hbGU7CisJCWh3LT5oc2N4LmEuaW8ucG9ydCA9IGh3LT5pc2FjLmEuaW8ucG9ydDsKKwkJaHctPmhzY3gubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWJyZWFrOworCWNhc2UgSU5GX1NDVF8zOgorCQlody0+aXBhYy50eXBlID0gSVBBQ19UWVBFX0lQQUM7CisJCWh3LT5pcGFjLmlzYWMub2ZmID0gMHg4MDsKKwkJaHctPmlzYWMuYS5pby5hbGUgPSAodTMyKWh3LT5hZGRyLnN0YXJ0ICsgMHgxMDsKKwkJaHctPmlzYWMuYS5pby5wb3J0ID0gaHctPmlzYWMuYS5pby5hbGUgKyA0OworCQlody0+aXNhYy5tb2RlID0gaHctPmFkZHIubW9kZTsKKwkJaHctPmhzY3guYS5pby5hbGUgPSBody0+aXNhYy5hLmlvLmFsZTsKKwkJaHctPmhzY3guYS5pby5wb3J0ID0gaHctPmlzYWMuYS5pby5wb3J0OworCQlody0+aHNjeC5tb2RlID0gaHctPmFkZHIubW9kZTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfU0NUXzQ6CisJCWh3LT5pcGFjLnR5cGUgPSBJUEFDX1RZUEVfSVBBQzsKKwkJaHctPmlwYWMuaXNhYy5vZmYgPSAweDgwOworCQlody0+aXNhYy5hLmlvLmFsZSA9ICh1MzIpaHctPmFkZHIuc3RhcnQgKyAweDIwOworCQlody0+aXNhYy5hLmlvLnBvcnQgPSBody0+aXNhYy5hLmlvLmFsZSArIDQ7CisJCWh3LT5pc2FjLm1vZGUgPSBody0+YWRkci5tb2RlOworCQlody0+aHNjeC5hLmlvLmFsZSA9IGh3LT5pc2FjLmEuaW8uYWxlOworCQlody0+aHNjeC5hLmlvLnBvcnQgPSBody0+aXNhYy5hLmlvLnBvcnQ7CisJCWh3LT5oc2N4Lm1vZGUgPSBody0+YWRkci5tb2RlOworCQlicmVhazsKKwljYXNlIElORl9HQVpFTF9SNjg1OgorCQlody0+aXBhYy50eXBlID0gSVBBQ19UWVBFX0lTQUMgfCBJUEFDX1RZUEVfSFNDWDsKKwkJaHctPmlwYWMuaXNhYy5vZmYgPSAweDgwOworCQlody0+aXNhYy5tb2RlID0gaHctPmFkZHIubW9kZTsKKwkJaHctPmlzYWMuYS5pby5wb3J0ID0gKHUzMilody0+YWRkci5zdGFydDsKKwkJaHctPmhzY3gubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWh3LT5oc2N4LmEuaW8ucG9ydCA9IGh3LT5pc2FjLmEuaW8ucG9ydDsKKwkJYnJlYWs7CisJY2FzZSBJTkZfR0FaRUxfUjc1MzoKKwkJaHctPmlwYWMudHlwZSA9IElQQUNfVFlQRV9JUEFDOworCQlody0+aXBhYy5pc2FjLm9mZiA9IDB4ODA7CisJCWh3LT5pc2FjLm1vZGUgPSBody0+YWRkci5tb2RlOworCQlody0+aXNhYy5hLmlvLmFsZSA9ICh1MzIpaHctPmFkZHIuc3RhcnQ7CisJCWh3LT5pc2FjLmEuaW8ucG9ydCA9ICh1MzIpaHctPmFkZHIuc3RhcnQgKyBHQVpFTF9JUEFDX0RBVEFfUE9SVDsKKwkJaHctPmhzY3gubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWh3LT5oc2N4LmEuaW8uYWxlID0gaHctPmlzYWMuYS5pby5hbGU7CisJCWh3LT5oc2N4LmEuaW8ucG9ydCA9IGh3LT5pc2FjLmEuaW8ucG9ydDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXN3aXRjaCAoaHctPmlzYWMubW9kZSkgeworCWNhc2UgQU1fTUVNSU86CisJCUFTU0lHTl9GVU5DX0lQQUMoTUlPLCBody0+aXBhYyk7CisJCWJyZWFrOworCWNhc2UgQU1fSU5EX0lPOgorCQlBU1NJR05fRlVOQ19JUEFDKElORCwgaHctPmlwYWMpOworCQlicmVhazsKKwljYXNlIEFNX0lPOgorCQlBU1NJR05fRlVOQ19JUEFDKElPLCBody0+aXBhYyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3JlbGVhc2VfY2FyZChzdHJ1Y3QgaW5mX2h3ICpjYXJkKSB7CisJdWxvbmcJZmxhZ3M7CisJaW50CWk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCWRpc2FibGVfaHdpcnEoY2FyZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCWNhcmQtPmlwYWMuaXNhYy5yZWxlYXNlKCZjYXJkLT5pcGFjLmlzYWMpOworCWZyZWVfaXJxKGNhcmQtPmlycSwgY2FyZCk7CisJbUlTRE5fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhcmQtPmlwYWMuaXNhYy5kY2guZGV2KTsKKwlyZWxlYXNlX2lvKGNhcmQpOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJmNhcmQtPmxpc3QpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKGNhcmQtPmNpLT50eXApIHsKKwljYXNlIElORl9TQ1RfMjoKKwljYXNlIElORl9TQ1RfMzoKKwljYXNlIElORl9TQ1RfNDoKKwkJYnJlYWs7CisJY2FzZSBJTkZfU0NUXzE6CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCWlmIChjYXJkLT5zY1tpXSkKKwkJCQlyZWxlYXNlX2NhcmQoY2FyZC0+c2NbaV0pOworCQkJY2FyZC0+c2NbaV0gPSBOVUxMOworCQl9CisJZGVmYXVsdDoKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKGNhcmQtPnBkZXYpOworCQlwY2lfc2V0X2RydmRhdGEoY2FyZC0+cGRldiwgTlVMTCk7CisJCWJyZWFrOworCX0KKwlrZnJlZShjYXJkKTsKKwlpbmZfY250LS07Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitzZXR1cF9pbnN0YW5jZShzdHJ1Y3QgaW5mX2h3ICpjYXJkKQoreworCWludCBlcnI7CisJdWxvbmcgZmxhZ3M7CisKKwlzbnByaW50ZihjYXJkLT5uYW1lLCBNSVNETl9NQVhfSURMRU4gLSAxLCAiJXMuJWQiLCBjYXJkLT5jaS0+bmFtZSwKKwkJaW5mX2NudCArIDEpOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmY2FyZC0+bGlzdCwgJkNhcmRzKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZF9sb2NrLCBmbGFncyk7CisKKwlfc2V0X2RlYnVnKGNhcmQpOworCWNhcmQtPmlwYWMuaXNhYy5uYW1lID0gY2FyZC0+bmFtZTsKKwljYXJkLT5pcGFjLm5hbWUgPSBjYXJkLT5uYW1lOworCWNhcmQtPmlwYWMub3duZXIgPSBUSElTX01PRFVMRTsKKwlzcGluX2xvY2tfaW5pdCgmY2FyZC0+bG9jayk7CisJY2FyZC0+aXBhYy5pc2FjLmh3bG9jayA9ICZjYXJkLT5sb2NrOworCWNhcmQtPmlwYWMuaHdsb2NrID0gJmNhcmQtPmxvY2s7CisJY2FyZC0+aXBhYy5jdHJsID0gKHZvaWQgKikmaW5mX2N0cmw7CisKKwllcnIgPSBzZXR1cF9pbyhjYXJkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yX3NldHVwOworCisJY2FyZC0+aXBhYy5pc2FjLmRjaC5kZXYuQnByb3RvY29scyA9CisJCW1JU0ROaXBhY19pbml0KCZjYXJkLT5pcGFjLCBjYXJkKTsKKworCWlmIChjYXJkLT5pcGFjLmlzYWMuZGNoLmRldi5CcHJvdG9jb2xzID09IDApCisJCWdvdG8gZXJyb3Jfc2V0dXA7OworCisJZXJyID0gbUlTRE5fcmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT5pcGFjLmlzYWMuZGNoLmRldiwKKwkJJmNhcmQtPnBkZXYtPmRldiwgY2FyZC0+bmFtZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCWVyciA9IGluaXRfaXJxKGNhcmQpOworCWlmICghZXJyKSAgeworCQlpbmZfY250Kys7CisJCXByX25vdGljZSgiSW5maW5lb24gJWQgY2FyZHMgaW5zdGFsbGVkXG4iLCBpbmZfY250KTsKKwkJcmV0dXJuIDA7CisJfQorCW1JU0ROX3VucmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT5pcGFjLmlzYWMuZGNoLmRldik7CitlcnJvcjoKKwljYXJkLT5pcGFjLnJlbGVhc2UoJmNhcmQtPmlwYWMpOworZXJyb3Jfc2V0dXA6CisJcmVsZWFzZV9pbyhjYXJkKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZjYXJkLT5saXN0KTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbmZfY2luZm8gaW5mX2NhcmRfaW5mb1tdID0geworCXsKKwkJSU5GX0RJVkEyMCwKKwkJIkRpYWxvZ2ljIERpdmEgMi4wIiwKKwkJImRpdmEyMCIsCisJCUFNX0lORF9JTywgQU1fTk9ORSwgMiwgMCwKKwkJJmRpdmFfaXJxCisJfSwKKwl7CisJCUlORl9ESVZBMjBVLAorCQkiRGlhbG9naWMgRGl2YSAyLjBVIiwKKwkJImRpdmEyMFUiLAorCQlBTV9JTkRfSU8sIEFNX05PTkUsIDIsIDAsCisJCSZkaXZhX2lycQorCX0sCisJeworCQlJTkZfRElWQTIwMSwKKwkJIkRpYWxvZ2ljIERpdmEgMi4wMSIsCisJCSJkaXZhMjAxIiwKKwkJQU1fTUVNSU8sIEFNX01FTUlPLCAwLCAxLAorCQkmZGl2YTIweF9pcnEKKwl9LAorCXsKKwkJSU5GX0RJVkEyMDIsCisJCSJEaWFsb2dpYyBEaXZhIDIuMDIiLAorCQkiZGl2YTIwMiIsCisJCUFNX01FTUlPLCBBTV9NRU1JTywgMCwgMSwKKwkJJmRpdmEyMHhfaXJxCisJfSwKKwl7CisJCUlORl9TUEVFRFdJTiwKKwkJIlNlZGxiYXVlciBTcGVlZFdpbiBQQ0kiLAorCQkic3BlZWR3aW4iLAorCQlBTV9JTkRfSU8sIEFNX05PTkUsIDAsIDAsCisJCSZ0aWdlcl9pcnEKKwl9LAorCXsKKwkJSU5GX1NBUEhJUjMsCisJCSJIU1QgU2FwaGlyIDMiLAorCQkic2FwaGlyIiwKKwkJQU1fSU5EX0lPLCBBTV9OT05FLCAwLCAwLAorCQkmdGlnZXJfaXJxCisJfSwKKwl7CisJCUlORl9RUzEwMDAsCisJCSJEZXZlbG8gTWljcm9saW5rIFBDSSIsCisJCSJxczEwMDAiLAorCQlBTV9JTywgQU1fSU5EX0lPLCAxLCAzLAorCQkmZWxzYV9pcnEKKwl9LAorCXsKKwkJSU5GX1FTMzAwMCwKKwkJIkRldmVsbyBRdWlja1N0ZXAgMzAwMCIsCisJCSJxczMwMDAiLAorCQlBTV9JTywgQU1fSU5EX0lPLCAxLCAzLAorCQkmZWxzYV9pcnEKKwl9LAorCXsKKwkJSU5GX05JQ0NZLAorCQkiU2FnZW0gTklDQ1kiLAorCQkibmljY3kiLAorCQlBTV9JTywgQU1fSU5EX0lPLCAwLCAxLAorCQkmbmljY3lfaXJxCisJfSwKKwl7CisJCUlORl9TQ1RfMSwKKwkJIlNjaVRlbCBRdWFkcm8iLAorCQkicDFfc2NpdGVsIiwKKwkJQU1fSU8sIEFNX0lORF9JTywgMSwgNSwKKwkJJmlwYWNfaXJxCisJfSwKKwl7CisJCUlORl9TQ1RfMiwKKwkJIlNjaVRlbCBRdWFkcm8iLAorCQkicDJfc2NpdGVsIiwKKwkJQU1fTk9ORSwgQU1fSU5EX0lPLCAwLCA0LAorCQkmaXBhY19pcnEKKwl9LAorCXsKKwkJSU5GX1NDVF8zLAorCQkiU2NpVGVsIFF1YWRybyIsCisJCSJwM19zY2l0ZWwiLAorCQlBTV9OT05FLCBBTV9JTkRfSU8sIDAsIDMsCisJCSZpcGFjX2lycQorCX0sCisJeworCQlJTkZfU0NUXzQsCisJCSJTY2lUZWwgUXVhZHJvIiwKKwkJInA0X3NjaXRlbCIsCisJCUFNX05PTkUsIEFNX0lORF9JTywgMCwgMiwKKwkJJmlwYWNfaXJxCisJfSwKKwl7CisJCUlORl9HQVpFTF9SNjg1LAorCQkiR2F6ZWwgUjY4NSIsCisJCSJnYXplbDY4NSIsCisJCUFNX0lPLCBBTV9JTywgMSwgMiwKKwkJJmdhemVsX2lycQorCX0sCisJeworCQlJTkZfR0FaRUxfUjc1MywKKwkJIkdhemVsIFI3NTMiLAorCQkiZ2F6ZWw3NTMiLAorCQlBTV9JTywgQU1fSU5EX0lPLCAxLCAyLAorCQkmaXBhY19pcnEKKwl9LAorCXsKKwkJSU5GX05PTkUsCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbmZfY2luZm8gKiBfX2RldmluaXQKK2dldF9jYXJkX2luZm8oZW51bSBpbmZfdHlwZXMgdHlwKQoreworCWNvbnN0IHN0cnVjdCBpbmZfY2luZm8gKmNpID0gaW5mX2NhcmRfaW5mbzsKKworCXdoaWxlIChjaS0+dHlwICE9IElORl9OT05FKSB7CisJCWlmIChjaS0+dHlwID09IHR5cCkKKwkJCXJldHVybiBjaTsKKwkJY2krKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitpbmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJaW50IGVyciA9IC1FTk9NRU07CisJc3RydWN0IGluZl9odyAqY2FyZDsKKworCWNhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW5mX2h3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkKSB7CisJCXByX2luZm8oIk5vIG1lbW9yeSBmb3IgSW5maW5lb24gSVNETiBjYXJkXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJY2FyZC0+cGRldiA9IHBkZXY7CisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlrZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJY2FyZC0+Y2kgPSBnZXRfY2FyZF9pbmZvKGVudC0+ZHJpdmVyX2RhdGEpOworCWlmICghY2FyZC0+Y2kpIHsKKwkJcHJfaW5mbygibUlTRE46IGRvIG5vdCBoYXZlIGluZm9ybWF0aW9ucyBhYm91dCBhZGFwdGVyIGF0ICVzXG4iLAorCQkJcGNpX25hbWUocGRldikpOworCQlrZnJlZShjYXJkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlCisJCXByX25vdGljZSgibUlTRE46IGZvdW5kIGFkYXB0ZXIgJXMgYXQgJXNcbiIsCisJCQljYXJkLT5jaS0+ZnVsbCwgcGNpX25hbWUocGRldikpOworCisJY2FyZC0+aXJxID0gcGRldi0+aXJxOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKwllcnIgPSBzZXR1cF9pbnN0YW5jZShjYXJkKTsKKwlpZiAoZXJyKSB7CisJCXBjaV9kaXNhYmxlX2RldmljZShjYXJkLT5wZGV2KTsKKwkJa2ZyZWUoY2FyZCk7CisJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwl9IGVsc2UgaWYgKGVudC0+ZHJpdmVyX2RhdGEgPT0gSU5GX1NDVF8xKSB7CisJCWludCBpOworCQlzdHJ1Y3QgaW5mX2h3ICpzYzsKKworCQlmb3IgKGkgPSAxOyBpIDwgNDsgaSsrKSB7CisJCQlzYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpbmZfaHcpLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghc2MpIHsKKwkJCQlyZWxlYXNlX2NhcmQoY2FyZCk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCQlzYy0+aXJxID0gY2FyZC0+aXJxOworCQkJc2MtPnBkZXYgPSBjYXJkLT5wZGV2OworCQkJc2MtPmNpID0gY2FyZC0+Y2kgKyBpOworCQkJZXJyID0gc2V0dXBfaW5zdGFuY2Uoc2MpOworCQkJaWYgKGVycikgeworCQkJCWtmcmVlKHNjKTsKKwkJCQlyZWxlYXNlX2NhcmQoY2FyZCk7CisJCQl9IGVsc2UKKwkJCQljYXJkLT5zY1tpIC0gMV0gPSBzYzsKKwkJfQorCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQKK2luZl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGluZl9odwkqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChjYXJkKQorCQlyZWxlYXNlX2NhcmQoY2FyZCk7CisJZWxzZQorCQlwcl9kZWJ1ZygiJXM6IGRydmRhdGEgYWxscmVhZHkgcmVtb3ZlZFxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaW5maW5lb25fZHJpdmVyID0geworCS5uYW1lID0gIklTRE4gSW5maW5lb24gcGNpIiwKKwkucHJvYmUgPSBpbmZfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGluZl9yZW1vdmUpLAorCS5pZF90YWJsZSA9IGluZmluZW9uX2lkcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0CitpbmZpbmVvbl9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCXByX25vdGljZSgiSW5maW5lb24gSVNETiBEcml2ZXIgUmV2LiAlc1xuIiwgSU5GSU5FT05fUkVWKTsKKwllcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpbmZpbmVvbl9kcml2ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAoraW5maW5lb25fY2xlYW51cCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaW5maW5lb25fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaW5maW5lb25faW5pdCk7Cittb2R1bGVfZXhpdChpbmZpbmVvbl9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmlwYWMuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmlwYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTNiYTA0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaXBhYy5jCkBAIC0wLDAgKzEsMTY1NSBAQAorLyoKKyAqIGlzYWMuYyAgIElTQUMgc3BlY2lmaWMgcm91dGluZXMKKyAqCisgKiBBdXRob3IgICAgICAgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgorICogQ29weXJpZ2h0IDIwMDkgIGJ5IEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbUlTRE5ody5oPgorI2luY2x1ZGUgImlwYWMuaCIKKworCisjZGVmaW5lIERCVVNZX1RJTUVSX1ZBTFVFCTgwCisjZGVmaW5lIEFSQ09GSV9VU0UJCTEKKworI2RlZmluZSBJU0FDX1JFVgkJIjIuMCIKKworTU9EVUxFX0FVVEhPUigiS2Fyc3RlbiBLZWlsIik7CitNT0RVTEVfVkVSU0lPTihJU0FDX1JFVik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKKyNkZWZpbmUgUmVhZElTQUMoaXMsIG8pCQkoaXMtPnJlYWRfcmVnKGlzLT5kY2guaHcsIG8gKyBpcy0+b2ZmKSkKKyNkZWZpbmUJV3JpdGVJU0FDKGlzLCBvLCB2KQkoaXMtPndyaXRlX3JlZyhpcy0+ZGNoLmh3LCBvICsgaXMtPm9mZiwgdikpCisjZGVmaW5lIFJlYWRIU0NYKGgsIG8pCQkoaC0+aXAtPnJlYWRfcmVnKGgtPmlwLT5odywgaC0+b2ZmICsgbykpCisjZGVmaW5lIFdyaXRlSFNDWChoLCBvLCB2KQkoaC0+aXAtPndyaXRlX3JlZyhoLT5pcC0+aHcsIGgtPm9mZiArIG8sIHYpKQorI2RlZmluZSBSZWFkSVBBQyhpcCwgbykJCShpcC0+cmVhZF9yZWcoaXAtPmh3LCBvKSkKKyNkZWZpbmUgV3JpdGVJUEFDKGlwLCBvLCB2KQkoaXAtPndyaXRlX3JlZyhpcC0+aHcsIG8sIHYpKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BoX2NvbW1hbmQoc3RydWN0IGlzYWNfaHcgKmlzYWMsIHU4IGNvbW1hbmQpCit7CisJcHJfZGVidWcoIiVzOiBwaF9jb21tYW5kICV4XG4iLCBpc2FjLT5uYW1lLCBjb21tYW5kKTsKKwlpZiAoaXNhYy0+dHlwZSAmIElQQUNfVFlQRV9JU0FDWCkKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNYX0NJWDAsIChjb21tYW5kIDw8IDQpIHwgMHhFKTsKKwllbHNlCisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX0NJWDAsIChjb21tYW5kIDw8IDIpIHwgMyk7Cit9CisKK3N0YXRpYyB2b2lkCitpc2FjX3BoX3N0YXRlX2NoYW5nZShzdHJ1Y3QgaXNhY19odyAqaXNhYykKK3sKKwlzd2l0Y2ggKGlzYWMtPnN0YXRlKSB7CisJY2FzZSAoSVNBQ19JTkRfUlMpOgorCWNhc2UgKElTQUNfSU5EX0VJKToKKwkJcGhfY29tbWFuZChpc2FjLCBJU0FDX0NNRF9EVUkpOworCX0KKwlzY2hlZHVsZV9ldmVudCgmaXNhYy0+ZGNoLCBGTEdfUEhDSEFOR0UpOworfQorCitzdGF0aWMgdm9pZAoraXNhY19waF9zdGF0ZV9iaChzdHJ1Y3QgZGNoYW5uZWwgKmRjaCkKK3sKKwlzdHJ1Y3QgaXNhY19odyAqaXNhYyA9IGNvbnRhaW5lcl9vZihkY2gsIHN0cnVjdCBpc2FjX2h3LCBkY2gpOworCisJc3dpdGNoIChpc2FjLT5zdGF0ZSkgeworCWNhc2UgSVNBQ19JTkRfUlM6CisJY2FzZSBJU0FDX0lORF9FSToKKwkJZGNoLT5zdGF0ZSA9IDA7CisJCWwxX2V2ZW50KGRjaC0+bDEsIEhXX1JFU0VUX0lORCk7CisJCWJyZWFrOworCWNhc2UgSVNBQ19JTkRfRElEOgorCQlkY2gtPnN0YXRlID0gMzsKKwkJbDFfZXZlbnQoZGNoLT5sMSwgSFdfREVBQ1RfQ05GKTsKKwkJYnJlYWs7CisJY2FzZSBJU0FDX0lORF9EUjoKKwkJZGNoLT5zdGF0ZSA9IDM7CisJCWwxX2V2ZW50KGRjaC0+bDEsIEhXX0RFQUNUX0lORCk7CisJCWJyZWFrOworCWNhc2UgSVNBQ19JTkRfUFU6CisJCWRjaC0+c3RhdGUgPSA0OworCQlsMV9ldmVudChkY2gtPmwxLCBIV19QT1dFUlVQX0lORCk7CisJCWJyZWFrOworCWNhc2UgSVNBQ19JTkRfUlNZOgorCQlpZiAoZGNoLT5zdGF0ZSA8PSA1KSB7CisJCQlkY2gtPnN0YXRlID0gNTsKKwkJCWwxX2V2ZW50KGRjaC0+bDEsIEFOWVNJR05BTCk7CisJCX0gZWxzZSB7CisJCQlkY2gtPnN0YXRlID0gODsKKwkJCWwxX2V2ZW50KGRjaC0+bDEsIExPU1RGUkFNSU5HKTsKKwkJfQorCQlicmVhazsKKwljYXNlIElTQUNfSU5EX0FSRDoKKwkJZGNoLT5zdGF0ZSA9IDY7CisJCWwxX2V2ZW50KGRjaC0+bDEsIElORk8yKTsKKwkJYnJlYWs7CisJY2FzZSBJU0FDX0lORF9BSTg6CisJCWRjaC0+c3RhdGUgPSA3OworCQlsMV9ldmVudChkY2gtPmwxLCBJTkZPNF9QOCk7CisJCWJyZWFrOworCWNhc2UgSVNBQ19JTkRfQUkxMDoKKwkJZGNoLT5zdGF0ZSA9IDc7CisJCWwxX2V2ZW50KGRjaC0+bDEsIElORk80X1AxMCk7CisJCWJyZWFrOworCX0KKwlwcl9kZWJ1ZygiJXM6IFRFIG5ld3N0YXRlICV4XG4iLCBpc2FjLT5uYW1lLCBkY2gtPnN0YXRlKTsKK30KKwordm9pZAoraXNhY19lbXB0eV9maWZvKHN0cnVjdCBpc2FjX2h3ICppc2FjLCBpbnQgY291bnQpCit7CisJdTggKnB0cjsKKworCXByX2RlYnVnKCIlczogJXMgICVkXG4iLCBpc2FjLT5uYW1lLCBfX2Z1bmNfXywgY291bnQpOworCisJaWYgKCFpc2FjLT5kY2gucnhfc2tiKSB7CisJCWlzYWMtPmRjaC5yeF9za2IgPSBtSV9hbGxvY19za2IoaXNhYy0+ZGNoLm1heGxlbiwgR0ZQX0FUT01JQyk7CisJCWlmICghaXNhYy0+ZGNoLnJ4X3NrYikgeworCQkJcHJfaW5mbygiJXM6IEQgcmVjZWl2ZSBvdXQgb2YgbWVtb3J5XG4iLCBpc2FjLT5uYW1lKTsKKwkJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX0NNRFIsIDB4ODApOworCQkJcmV0dXJuOworCQl9CisJfQorCWlmICgoaXNhYy0+ZGNoLnJ4X3NrYi0+bGVuICsgY291bnQpID49IGlzYWMtPmRjaC5tYXhsZW4pIHsKKwkJcHJfZGVidWcoIiVzOiAlcyBvdmVycnVuICVkXG4iLCBpc2FjLT5uYW1lLCBfX2Z1bmNfXywKKwkJCSAgICBpc2FjLT5kY2gucnhfc2tiLT5sZW4gKyBjb3VudCk7CisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX0NNRFIsIDB4ODApOworCQlyZXR1cm47CisJfQorCXB0ciA9IHNrYl9wdXQoaXNhYy0+ZGNoLnJ4X3NrYiwgY291bnQpOworCWlzYWMtPnJlYWRfZmlmbyhpc2FjLT5kY2guaHcsIGlzYWMtPm9mZiwgcHRyLCBjb3VudCk7CisJV3JpdGVJU0FDKGlzYWMsIElTQUNfQ01EUiwgMHg4MCk7CisJaWYgKGlzYWMtPmRjaC5kZWJ1ZyAmIERFQlVHX0hXX0RGSUZPKSB7CisJCWNoYXIJcGZ4W01JU0ROX01BWF9JRExFTiArIDE2XTsKKworCQlzbnByaW50ZihwZngsIE1JU0ROX01BWF9JRExFTiArIDE1LCAiRC1yZWN2ICVzICVkICIsCisJCQlpc2FjLT5uYW1lLCBjb3VudCk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKHBmeCwgRFVNUF9QUkVGSVhfT0ZGU0VULCBwdHIsIGNvdW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpc2FjX2ZpbGxfZmlmbyhzdHJ1Y3QgaXNhY19odyAqaXNhYykKK3sKKwlpbnQgY291bnQsIG1vcmU7CisJdTggKnB0cjsKKworCWlmICghaXNhYy0+ZGNoLnR4X3NrYikKKwkJcmV0dXJuOworCWNvdW50ID0gaXNhYy0+ZGNoLnR4X3NrYi0+bGVuIC0gaXNhYy0+ZGNoLnR4X2lkeDsKKwlpZiAoY291bnQgPD0gMCkKKwkJcmV0dXJuOworCisJbW9yZSA9IDA7CisJaWYgKGNvdW50ID4gMzIpIHsKKwkJbW9yZSA9ICEwOworCQljb3VudCA9IDMyOworCX0KKwlwcl9kZWJ1ZygiJXM6ICVzICAlZFxuIiwgaXNhYy0+bmFtZSwgX19mdW5jX18sIGNvdW50KTsKKwlwdHIgPSBpc2FjLT5kY2gudHhfc2tiLT5kYXRhICsgaXNhYy0+ZGNoLnR4X2lkeDsKKwlpc2FjLT5kY2gudHhfaWR4ICs9IGNvdW50OworCWlzYWMtPndyaXRlX2ZpZm8oaXNhYy0+ZGNoLmh3LCBpc2FjLT5vZmYsIHB0ciwgY291bnQpOworCVdyaXRlSVNBQyhpc2FjLCBJU0FDX0NNRFIsIG1vcmUgPyAweDggOiAweGEpOworCWlmICh0ZXN0X2FuZF9zZXRfYml0KEZMR19CVVNZX1RJTUVSLCAmaXNhYy0+ZGNoLkZsYWdzKSkgeworCQlwcl9kZWJ1ZygiJXM6ICVzIGRidXN5dGltZXIgcnVubmluZ1xuIiwgaXNhYy0+bmFtZSwgX19mdW5jX18pOworCQlkZWxfdGltZXIoJmlzYWMtPmRjaC50aW1lcik7CisJfQorCWluaXRfdGltZXIoJmlzYWMtPmRjaC50aW1lcik7CisJaXNhYy0+ZGNoLnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKChEQlVTWV9USU1FUl9WQUxVRSAqIEhaKS8xMDAwKTsKKwlhZGRfdGltZXIoJmlzYWMtPmRjaC50aW1lcik7CisJaWYgKGlzYWMtPmRjaC5kZWJ1ZyAmIERFQlVHX0hXX0RGSUZPKSB7CisJCWNoYXIJcGZ4W01JU0ROX01BWF9JRExFTiArIDE2XTsKKworCQlzbnByaW50ZihwZngsIE1JU0ROX01BWF9JRExFTiArIDE1LCAiRC1zZW5kICVzICVkICIsCisJCQlpc2FjLT5uYW1lLCBjb3VudCk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKHBmeCwgRFVNUF9QUkVGSVhfT0ZGU0VULCBwdHIsIGNvdW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpc2FjX3JtZV9pcnEoc3RydWN0IGlzYWNfaHcgKmlzYWMpCit7CisJdTggdmFsLCBjb3VudDsKKworCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfUlNUQSk7CisJaWYgKCh2YWwgJiAweDcwKSAhPSAweDIwKSB7CisJCWlmICh2YWwgJiAweDQwKSB7CisJCQlwcl9kZWJ1ZygiJXM6IElTQUMgUkRPXG4iLCBpc2FjLT5uYW1lKTsKKyNpZmRlZiBFUlJPUl9TVEFUSVNUSUMKKwkJCWlzYWMtPmRjaC5lcnJfcngrKzsKKyNlbmRpZgorCQl9CisJCWlmICghKHZhbCAmIDB4MjApKSB7CisJCQlwcl9kZWJ1ZygiJXM6IElTQUMgQ1JDIGVycm9yXG4iLCBpc2FjLT5uYW1lKTsKKyNpZmRlZiBFUlJPUl9TVEFUSVNUSUMKKwkJCWlzYWMtPmRjaC5lcnJfY3JjKys7CisjZW5kaWYKKwkJfQorCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19DTURSLCAweDgwKTsKKwkJaWYgKGlzYWMtPmRjaC5yeF9za2IpCisJCQlkZXZfa2ZyZWVfc2tiKGlzYWMtPmRjaC5yeF9za2IpOworCQlpc2FjLT5kY2gucnhfc2tiID0gTlVMTDsKKwl9IGVsc2UgeworCQljb3VudCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfUkJDTCkgJiAweDFmOworCQlpZiAoY291bnQgPT0gMCkKKwkJCWNvdW50ID0gMzI7CisJCWlzYWNfZW1wdHlfZmlmbyhpc2FjLCBjb3VudCk7CisJCXJlY3ZfRGNoYW5uZWwoJmlzYWMtPmRjaCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraXNhY194cHJfaXJxKHN0cnVjdCBpc2FjX2h3ICppc2FjKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0JVU1lfVElNRVIsICZpc2FjLT5kY2guRmxhZ3MpKQorCQlkZWxfdGltZXIoJmlzYWMtPmRjaC50aW1lcik7CisJaWYgKGlzYWMtPmRjaC50eF9za2IgJiYgaXNhYy0+ZGNoLnR4X2lkeCA8IGlzYWMtPmRjaC50eF9za2ItPmxlbikgeworCQlpc2FjX2ZpbGxfZmlmbyhpc2FjKTsKKwl9IGVsc2UgeworCQlpZiAoaXNhYy0+ZGNoLnR4X3NrYikKKwkJCWRldl9rZnJlZV9za2IoaXNhYy0+ZGNoLnR4X3NrYik7CisJCWlmIChnZXRfbmV4dF9kZnJhbWUoJmlzYWMtPmRjaCkpCisJCQlpc2FjX2ZpbGxfZmlmbyhpc2FjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpc2FjX3JldHJhbnNtaXQoc3RydWN0IGlzYWNfaHcgKmlzYWMpCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQlVTWV9USU1FUiwgJmlzYWMtPmRjaC5GbGFncykpCisJCWRlbF90aW1lcigmaXNhYy0+ZGNoLnRpbWVyKTsKKwlpZiAodGVzdF9iaXQoRkxHX1RYX0JVU1ksICZpc2FjLT5kY2guRmxhZ3MpKSB7CisJCS8qIFJlc3RhcnQgZnJhbWUgKi8KKwkJaXNhYy0+ZGNoLnR4X2lkeCA9IDA7CisJCWlzYWNfZmlsbF9maWZvKGlzYWMpOworCX0gZWxzZSBpZiAoaXNhYy0+ZGNoLnR4X3NrYikgeyAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworCQlwcl9pbmZvKCIlczogdHhfc2tiIGV4aXN0IGJ1dCBub3QgYnVzeVxuIiwgaXNhYy0+bmFtZSk7CisJCXRlc3RfYW5kX3NldF9iaXQoRkxHX1RYX0JVU1ksICZpc2FjLT5kY2guRmxhZ3MpOworCQlpc2FjLT5kY2gudHhfaWR4ID0gMDsKKwkJaXNhY19maWxsX2ZpZm8oaXNhYyk7CisJfSBlbHNlIHsKKwkJcHJfaW5mbygiJXM6IElTQUMgWERVIG5vIFRYX0JVU1lcbiIsIGlzYWMtPm5hbWUpOworCQlpZiAoZ2V0X25leHRfZGZyYW1lKCZpc2FjLT5kY2gpKQorCQkJaXNhY19maWxsX2ZpZm8oaXNhYyk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraXNhY19tb3NfaXJxKHN0cnVjdCBpc2FjX2h3ICppc2FjKQoreworCXU4IHZhbDsKKwlpbnQgcmV0OworCisJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ19NT1NSKTsKKwlwcl9kZWJ1ZygiJXM6IElTQUMgTU9TUiAlMDJ4XG4iLCBpc2FjLT5uYW1lLCB2YWwpOworI2lmIEFSQ09GSV9VU0UKKwlpZiAodmFsICYgMHgwOCkgeworCQlpZiAoIWlzYWMtPm1vbl9yeCkgeworCQkJaXNhYy0+bW9uX3J4ID0ga21hbGxvYyhNQVhfTU9OX0ZSQU1FLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghaXNhYy0+bW9uX3J4KSB7CisJCQkJcHJfaW5mbygiJXM6IElTQUMgTU9OIFJYIG91dCBvZiBtZW1vcnkhXG4iLAorCQkJCQlpc2FjLT5uYW1lKTsKKwkJCQlpc2FjLT5tb2NyICY9IDB4ZjA7CisJCQkJaXNhYy0+bW9jciB8PSAweDBhOworCQkJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCQkJCWdvdG8gYWZ0ZXJNT05SMDsKKwkJCX0gZWxzZQorCQkJCWlzYWMtPm1vbl9yeHAgPSAwOworCQl9CisJCWlmIChpc2FjLT5tb25fcnhwID49IE1BWF9NT05fRlJBTUUpIHsKKwkJCWlzYWMtPm1vY3IgJj0gMHhmMDsKKwkJCWlzYWMtPm1vY3IgfD0gMHgwYTsKKwkJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCQkJaXNhYy0+bW9uX3J4cCA9IDA7CisJCQlwcl9kZWJ1ZygiJXM6IElTQUMgTU9OIFJYIG92ZXJmbG93IVxuIiwgaXNhYy0+bmFtZSk7CisJCQlnb3RvIGFmdGVyTU9OUjA7CisJCX0KKwkJaXNhYy0+bW9uX3J4W2lzYWMtPm1vbl9yeHArK10gPSBSZWFkSVNBQyhpc2FjLCBJU0FDX01PUjApOworCQlwcl9kZWJ1ZygiJXM6IElTQUMgTU9SMCAlMDJ4XG4iLCBpc2FjLT5uYW1lLAorCQkJaXNhYy0+bW9uX3J4W2lzYWMtPm1vbl9yeHAgLSAxXSk7CisJCWlmIChpc2FjLT5tb25fcnhwID09IDEpIHsKKwkJCWlzYWMtPm1vY3IgfD0gMHgwNDsKKwkJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCQl9CisJfQorYWZ0ZXJNT05SMDoKKwlpZiAodmFsICYgMHg4MCkgeworCQlpZiAoIWlzYWMtPm1vbl9yeCkgeworCQkJaXNhYy0+bW9uX3J4ID0ga21hbGxvYyhNQVhfTU9OX0ZSQU1FLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghaXNhYy0+bW9uX3J4KSB7CisJCQkJcHJfaW5mbygiJXM6IElTQUMgTU9OIFJYIG91dCBvZiBtZW1vcnkhXG4iLAorCQkJCQlpc2FjLT5uYW1lKTsKKwkJCQlpc2FjLT5tb2NyICY9IDB4MGY7CisJCQkJaXNhYy0+bW9jciB8PSAweGEwOworCQkJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCQkJCWdvdG8gYWZ0ZXJNT05SMTsKKwkJCX0gZWxzZQorCQkJCWlzYWMtPm1vbl9yeHAgPSAwOworCQl9CisJCWlmIChpc2FjLT5tb25fcnhwID49IE1BWF9NT05fRlJBTUUpIHsKKwkJCWlzYWMtPm1vY3IgJj0gMHgwZjsKKwkJCWlzYWMtPm1vY3IgfD0gMHhhMDsKKwkJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCQkJaXNhYy0+bW9uX3J4cCA9IDA7CisJCQlwcl9kZWJ1ZygiJXM6IElTQUMgTU9OIFJYIG92ZXJmbG93IVxuIiwgaXNhYy0+bmFtZSk7CisJCQlnb3RvIGFmdGVyTU9OUjE7CisJCX0KKwkJaXNhYy0+bW9uX3J4W2lzYWMtPm1vbl9yeHArK10gPSBSZWFkSVNBQyhpc2FjLCBJU0FDX01PUjEpOworCQlwcl9kZWJ1ZygiJXM6IElTQUMgTU9SMSAlMDJ4XG4iLCBpc2FjLT5uYW1lLAorCQkJaXNhYy0+bW9uX3J4W2lzYWMtPm1vbl9yeHAgLSAxXSk7CisJCWlzYWMtPm1vY3IgfD0gMHg0MDsKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfTU9DUiwgaXNhYy0+bW9jcik7CisJfQorYWZ0ZXJNT05SMToKKwlpZiAodmFsICYgMHgwNCkgeworCQlpc2FjLT5tb2NyICY9IDB4ZjA7CisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCQlpc2FjLT5tb2NyIHw9IDB4MGE7CisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCQlpZiAoaXNhYy0+bW9uaXRvcikgeworCQkJcmV0ID0gaXNhYy0+bW9uaXRvcihpc2FjLT5kY2guaHcsIE1PTklUT1JfUlhfMCwKKwkJCQlpc2FjLT5tb25fcngsIGlzYWMtPm1vbl9yeHApOworCQkJaWYgKHJldCkKKwkJCQlrZnJlZShpc2FjLT5tb25fcngpOworCQl9IGVsc2UgeworCQkJcHJfaW5mbygiJXM6IE1PTklUT1IgMCByZWNlaXZlZCAlZCBidXQgbm8gdXNlclxuIiwKKwkJCQlpc2FjLT5uYW1lLCBpc2FjLT5tb25fcnhwKTsKKwkJCWtmcmVlKGlzYWMtPm1vbl9yeCk7CisJCX0KKwkJaXNhYy0+bW9uX3J4ID0gTlVMTDsKKwkJaXNhYy0+bW9uX3J4cCA9IDA7CisJfQorCWlmICh2YWwgJiAweDQwKSB7CisJCWlzYWMtPm1vY3IgJj0gMHgwZjsKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfTU9DUiwgaXNhYy0+bW9jcik7CisJCWlzYWMtPm1vY3IgfD0gMHhhMDsKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfTU9DUiwgaXNhYy0+bW9jcik7CisJCWlmIChpc2FjLT5tb25pdG9yKSB7CisJCQlyZXQgPSBpc2FjLT5tb25pdG9yKGlzYWMtPmRjaC5odywgTU9OSVRPUl9SWF8xLAorCQkJCWlzYWMtPm1vbl9yeCwgaXNhYy0+bW9uX3J4cCk7CisJCQlpZiAocmV0KQorCQkJCWtmcmVlKGlzYWMtPm1vbl9yeCk7CisJCX0gZWxzZSB7CisJCQlwcl9pbmZvKCIlczogTU9OSVRPUiAxIHJlY2VpdmVkICVkIGJ1dCBubyB1c2VyXG4iLAorCQkJCWlzYWMtPm5hbWUsIGlzYWMtPm1vbl9yeHApOworCQkJa2ZyZWUoaXNhYy0+bW9uX3J4KTsKKwkJfQorCQlpc2FjLT5tb25fcnggPSBOVUxMOworCQlpc2FjLT5tb25fcnhwID0gMDsKKwl9CisJaWYgKHZhbCAmIDB4MDIpIHsKKwkJaWYgKCghaXNhYy0+bW9uX3R4KSB8fCAoaXNhYy0+bW9uX3R4YyAmJgorCQkJKGlzYWMtPm1vbl90eHAgPj0gaXNhYy0+bW9uX3R4YykgJiYgISh2YWwgJiAweDA4KSkpIHsKKwkJCWlzYWMtPm1vY3IgJj0gMHhmMDsKKwkJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCQkJaXNhYy0+bW9jciB8PSAweDBhOworCQkJV3JpdGVJU0FDKGlzYWMsIElTQUNfTU9DUiwgaXNhYy0+bW9jcik7CisJCQlpZiAoaXNhYy0+bW9uX3R4YyAmJiAoaXNhYy0+bW9uX3R4cCA+PSBpc2FjLT5tb25fdHhjKSkgeworCQkJCWlmIChpc2FjLT5tb25pdG9yKQorCQkJCQlyZXQgPSBpc2FjLT5tb25pdG9yKGlzYWMtPmRjaC5odywKKwkJCQkJCU1PTklUT1JfVFhfMCwgTlVMTCwgMCk7CisJCQl9CisJCQlrZnJlZShpc2FjLT5tb25fdHgpOworCQkJaXNhYy0+bW9uX3R4ID0gTlVMTDsKKwkJCWlzYWMtPm1vbl90eGMgPSAwOworCQkJaXNhYy0+bW9uX3R4cCA9IDA7CisJCQlnb3RvIEFmdGVyTU9YMDsKKwkJfQorCQlpZiAoaXNhYy0+bW9uX3R4YyAmJiAoaXNhYy0+bW9uX3R4cCA+PSBpc2FjLT5tb25fdHhjKSkgeworCQkJaWYgKGlzYWMtPm1vbml0b3IpCisJCQkJcmV0ID0gaXNhYy0+bW9uaXRvcihpc2FjLT5kY2guaHcsCisJCQkJCU1PTklUT1JfVFhfMCwgTlVMTCwgMCk7CisJCQlrZnJlZShpc2FjLT5tb25fdHgpOworCQkJaXNhYy0+bW9uX3R4ID0gTlVMTDsKKwkJCWlzYWMtPm1vbl90eGMgPSAwOworCQkJaXNhYy0+bW9uX3R4cCA9IDA7CisJCQlnb3RvIEFmdGVyTU9YMDsKKwkJfQorCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NT1gwLCBpc2FjLT5tb25fdHhbaXNhYy0+bW9uX3R4cCsrXSk7CisJCXByX2RlYnVnKCIlczogSVNBQyAlMDJ4IC0+IE1PWDBcbiIsIGlzYWMtPm5hbWUsCisJCQlpc2FjLT5tb25fdHhbaXNhYy0+bW9uX3R4cCAtIDFdKTsKKwl9CitBZnRlck1PWDA6CisJaWYgKHZhbCAmIDB4MjApIHsKKwkJaWYgKCghaXNhYy0+bW9uX3R4KSB8fCAoaXNhYy0+bW9uX3R4YyAmJgorCQkJKGlzYWMtPm1vbl90eHAgPj0gaXNhYy0+bW9uX3R4YykgJiYgISh2YWwgJiAweDgwKSkpIHsKKwkJCWlzYWMtPm1vY3IgJj0gMHgwZjsKKwkJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCQkJaXNhYy0+bW9jciB8PSAweGEwOworCQkJV3JpdGVJU0FDKGlzYWMsIElTQUNfTU9DUiwgaXNhYy0+bW9jcik7CisJCQlpZiAoaXNhYy0+bW9uX3R4YyAmJiAoaXNhYy0+bW9uX3R4cCA+PSBpc2FjLT5tb25fdHhjKSkgeworCQkJCWlmIChpc2FjLT5tb25pdG9yKQorCQkJCQlyZXQgPSBpc2FjLT5tb25pdG9yKGlzYWMtPmRjaC5odywKKwkJCQkJCU1PTklUT1JfVFhfMSwgTlVMTCwgMCk7CisJCQl9CisJCQlrZnJlZShpc2FjLT5tb25fdHgpOworCQkJaXNhYy0+bW9uX3R4ID0gTlVMTDsKKwkJCWlzYWMtPm1vbl90eGMgPSAwOworCQkJaXNhYy0+bW9uX3R4cCA9IDA7CisJCQlnb3RvIEFmdGVyTU9YMTsKKwkJfQorCQlpZiAoaXNhYy0+bW9uX3R4YyAmJiAoaXNhYy0+bW9uX3R4cCA+PSBpc2FjLT5tb25fdHhjKSkgeworCQkJaWYgKGlzYWMtPm1vbml0b3IpCisJCQkJcmV0ID0gaXNhYy0+bW9uaXRvcihpc2FjLT5kY2guaHcsCisJCQkJCU1PTklUT1JfVFhfMSwgTlVMTCwgMCk7CisJCQlrZnJlZShpc2FjLT5tb25fdHgpOworCQkJaXNhYy0+bW9uX3R4ID0gTlVMTDsKKwkJCWlzYWMtPm1vbl90eGMgPSAwOworCQkJaXNhYy0+bW9uX3R4cCA9IDA7CisJCQlnb3RvIEFmdGVyTU9YMTsKKwkJfQorCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NT1gxLCBpc2FjLT5tb25fdHhbaXNhYy0+bW9uX3R4cCsrXSk7CisJCXByX2RlYnVnKCIlczogSVNBQyAlMDJ4IC0+IE1PWDFcbiIsIGlzYWMtPm5hbWUsCisJCQlpc2FjLT5tb25fdHhbaXNhYy0+bW9uX3R4cCAtIDFdKTsKKwl9CitBZnRlck1PWDE6CisJdmFsID0gMDsgLyogZHVtbXkgdG8gYXZvaWQgd2FybmluZyAqLworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCitpc2FjX2Npc3FfaXJxKHN0cnVjdCBpc2FjX2h3ICppc2FjKSB7CisJdTggdmFsOworCisJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ19DSVIwKTsKKwlwcl9kZWJ1ZygiJXM6IElTQUMgQ0lSMCAlMDJYXG4iLCBpc2FjLT5uYW1lLCB2YWwpOworCWlmICh2YWwgJiAyKSB7CisJCXByX2RlYnVnKCIlczogcGhfc3RhdGUgY2hhbmdlICV4LT4leFxuIiwgaXNhYy0+bmFtZSwKKwkJCWlzYWMtPnN0YXRlLCAodmFsID4+IDIpICYgMHhmKTsKKwkJaXNhYy0+c3RhdGUgPSAodmFsID4+IDIpICYgMHhmOworCQlpc2FjX3BoX3N0YXRlX2NoYW5nZShpc2FjKTsKKwl9CisJaWYgKHZhbCAmIDEpIHsKKwkJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ19DSVIxKTsKKwkJcHJfZGVidWcoIiVzOiBJU0FDIENJUjEgJTAyWFxuIiwgaXNhYy0+bmFtZSwgdmFsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpc2Fjc3hfY2ljX2lycShzdHJ1Y3QgaXNhY19odyAqaXNhYykKK3sKKwl1OCB2YWw7CisKKwl2YWwgPSBSZWFkSVNBQyhpc2FjLCBJU0FDWF9DSVIwKTsKKwlwcl9kZWJ1ZygiJXM6IElTQUNYIENJUjAgJTAyWFxuIiwgaXNhYy0+bmFtZSwgdmFsKTsKKwlpZiAodmFsICYgSVNBQ1hfQ0lSMF9DSUMwKSB7CisJCXByX2RlYnVnKCIlczogcGhfc3RhdGUgY2hhbmdlICV4LT4leFxuIiwgaXNhYy0+bmFtZSwKKwkJCWlzYWMtPnN0YXRlLCB2YWwgPj4gNCk7CisJCWlzYWMtPnN0YXRlID0gdmFsID4+IDQ7CisJCWlzYWNfcGhfc3RhdGVfY2hhbmdlKGlzYWMpOworCX0KK30KKworc3RhdGljIHZvaWQKK2lzYWNzeF9ybWVfaXJxKHN0cnVjdCBpc2FjX2h3ICppc2FjKQoreworCWludCBjb3VudDsKKwl1OCB2YWw7CisKKwl2YWwgPSBSZWFkSVNBQyhpc2FjLCBJU0FDWF9SU1RBRCk7CisJaWYgKCh2YWwgJiAoSVNBQ1hfUlNUQURfVkZSIHwKKwkJICAgIElTQUNYX1JTVEFEX1JETyB8CisJCSAgICBJU0FDWF9SU1RBRF9DUkMgfAorCQkgICAgSVNBQ1hfUlNUQURfUkFCKSkKKwkgICAgIT0gKElTQUNYX1JTVEFEX1ZGUiB8IElTQUNYX1JTVEFEX0NSQykpIHsKKwkJcHJfZGVidWcoIiVzOiBSU1RBRCAlI3gsIGRyb3BwZWRcbiIsIGlzYWMtPm5hbWUsIHZhbCk7CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCWlmICh2YWwgJiBJU0FDWF9SU1RBRF9DUkMpCisJCQlpc2FjLT5kY2guZXJyX3J4Kys7CisJCWVsc2UKKwkJCWlzYWMtPmRjaC5lcnJfY3JjKys7CisjZW5kaWYKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNYX0NNRFJELCBJU0FDWF9DTURSRF9STUMpOworCQlpZiAoaXNhYy0+ZGNoLnJ4X3NrYikKKwkJCWRldl9rZnJlZV9za2IoaXNhYy0+ZGNoLnJ4X3NrYik7CisJCWlzYWMtPmRjaC5yeF9za2IgPSBOVUxMOworCX0gZWxzZSB7CisJCWNvdW50ID0gUmVhZElTQUMoaXNhYywgSVNBQ1hfUkJDTEQpICYgMHgxZjsKKwkJaWYgKGNvdW50ID09IDApCisJCQljb3VudCA9IDMyOworCQlpc2FjX2VtcHR5X2ZpZm8oaXNhYywgY291bnQpOworCQlpZiAoaXNhYy0+ZGNoLnJ4X3NrYikgeworCQkJc2tiX3RyaW0oaXNhYy0+ZGNoLnJ4X3NrYiwgaXNhYy0+ZGNoLnJ4X3NrYi0+bGVuIC0gMSk7CisJCQlwcl9kZWJ1ZygiJXM6IGRjaGFubmVsIHJlY2VpdmVkICVkXG4iLCBpc2FjLT5uYW1lLAorCQkJCWlzYWMtPmRjaC5yeF9za2ItPmxlbik7CisJCQlyZWN2X0RjaGFubmVsKCZpc2FjLT5kY2gpOworCQl9CisJfQorfQorCitpcnFyZXR1cm5fdAorbUlTRE5pc2FjX2lycShzdHJ1Y3QgaXNhY19odyAqaXNhYywgdTggdmFsKQoreworCWlmICh1bmxpa2VseSghdmFsKSkKKwkJcmV0dXJuIElSUV9OT05FOworCXByX2RlYnVnKCIlczogSVNBQyBpbnRlcnJ1cHQgJTAyeFxuIiwgaXNhYy0+bmFtZSwgdmFsKTsKKwlpZiAoaXNhYy0+dHlwZSAmIElQQUNfVFlQRV9JU0FDWCkgeworCQlpZiAodmFsICYgSVNBQ1hfX0NJQykKKwkJCWlzYWNzeF9jaWNfaXJxKGlzYWMpOworCQlpZiAodmFsICYgSVNBQ1hfX0lDRCkgeworCQkJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ1hfSVNUQUQpOworCQkJcHJfZGVidWcoIiVzOiBJU1RBRCAlMDJ4XG4iLCBpc2FjLT5uYW1lLCB2YWwpOworCQkJaWYgKHZhbCAmIElTQUNYX0RfWERVKSB7CisJCQkJcHJfZGVidWcoIiVzOiBJU0FDIFhEVVxuIiwgaXNhYy0+bmFtZSk7CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCQkJaXNhYy0+ZGNoLmVycl90eCsrOworI2VuZGlmCisJCQkJaXNhY19yZXRyYW5zbWl0KGlzYWMpOworCQkJfQorCQkJaWYgKHZhbCAmIElTQUNYX0RfWE1SKSB7CisJCQkJcHJfZGVidWcoIiVzOiBJU0FDIFhNUlxuIiwgaXNhYy0+bmFtZSk7CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCQkJaXNhYy0+ZGNoLmVycl90eCsrOworI2VuZGlmCisJCQkJaXNhY19yZXRyYW5zbWl0KGlzYWMpOworCQkJfQorCQkJaWYgKHZhbCAmIElTQUNYX0RfWFBSKQorCQkJCWlzYWNfeHByX2lycShpc2FjKTsKKwkJCWlmICh2YWwgJiBJU0FDWF9EX1JGTykgeworCQkJCXByX2RlYnVnKCIlczogSVNBQyBSRk9cbiIsIGlzYWMtPm5hbWUpOworCQkJCVdyaXRlSVNBQyhpc2FjLCBJU0FDWF9DTURSRCwgSVNBQ1hfQ01EUkRfUk1DKTsKKwkJCX0KKwkJCWlmICh2YWwgJiBJU0FDWF9EX1JNRSkKKwkJCQlpc2Fjc3hfcm1lX2lycShpc2FjKTsKKwkJCWlmICh2YWwgJiBJU0FDWF9EX1JQRikKKwkJCQlpc2FjX2VtcHR5X2ZpZm8oaXNhYywgMHgyMCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAodmFsICYgMHg4MCkJLyogUk1FICovCisJCQlpc2FjX3JtZV9pcnEoaXNhYyk7CisJCWlmICh2YWwgJiAweDQwKQkvKiBSUEYgKi8KKwkJCWlzYWNfZW1wdHlfZmlmbyhpc2FjLCAzMik7CisJCWlmICh2YWwgJiAweDEwKQkvKiBYUFIgKi8KKwkJCWlzYWNfeHByX2lycShpc2FjKTsKKwkJaWYgKHZhbCAmIDB4MDQpCS8qIENJU1EgKi8KKwkJCWlzYWNfY2lzcV9pcnEoaXNhYyk7CisJCWlmICh2YWwgJiAweDIwKQkvKiBSU0MgLSBuZXZlciAqLworCQkJcHJfZGVidWcoIiVzOiBJU0FDIFJTQyBpbnRlcnJ1cHRcbiIsIGlzYWMtPm5hbWUpOworCQlpZiAodmFsICYgMHgwMikJLyogU0lOIC0gbmV2ZXIgKi8KKwkJCXByX2RlYnVnKCIlczogSVNBQyBTSU4gaW50ZXJydXB0XG4iLCBpc2FjLT5uYW1lKTsKKwkJaWYgKHZhbCAmIDB4MDEpIHsJLyogRVhJICovCisJCQl2YWwgPSBSZWFkSVNBQyhpc2FjLCBJU0FDX0VYSVIpOworCQkJcHJfZGVidWcoIiVzOiBJU0FDIEVYSVIgJTAyeFxuIiwgaXNhYy0+bmFtZSwgdmFsKTsKKwkJCWlmICh2YWwgJiAweDgwKQkvKiBYTVIgKi8KKwkJCQlwcl9kZWJ1ZygiJXM6IElTQUMgWE1SXG4iLCBpc2FjLT5uYW1lKTsKKwkJCWlmICh2YWwgJiAweDQwKSB7IC8qIFhEVSAqLworCQkJCXByX2RlYnVnKCIlczogSVNBQyBYRFVcbiIsIGlzYWMtPm5hbWUpOworI2lmZGVmIEVSUk9SX1NUQVRJU1RJQworCQkJCWlzYWMtPmRjaC5lcnJfdHgrKzsKKyNlbmRpZgorCQkJCWlzYWNfcmV0cmFuc21pdChpc2FjKTsKKwkJCX0KKwkJCWlmICh2YWwgJiAweDA0KQkvKiBNT1MgKi8KKwkJCQlpc2FjX21vc19pcnEoaXNhYyk7CisJCX0KKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorRVhQT1JUX1NZTUJPTChtSVNETmlzYWNfaXJxKTsKKworc3RhdGljIGludAoraXNhY19sMWh3KHN0cnVjdCBtSVNETmNoYW5uZWwgKmNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtSVNETmRldmljZQkqZGV2ID0gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgbUlTRE5kZXZpY2UsIEQpOworCXN0cnVjdCBkY2hhbm5lbAkJKmRjaCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkY2hhbm5lbCwgZGV2KTsKKwlzdHJ1Y3QgaXNhY19odwkJKmlzYWMgPSBjb250YWluZXJfb2YoZGNoLCBzdHJ1Y3QgaXNhY19odywgZGNoKTsKKwlpbnQJCQlyZXQgPSAtRUlOVkFMOworCXN0cnVjdCBtSVNETmhlYWQJKmhoID0gbUlTRE5fSEVBRF9QKHNrYik7CisJdTMyCQkJaWQ7CisJdV9sb25nCQkJZmxhZ3M7CisKKwlzd2l0Y2ggKGhoLT5wcmltKSB7CisJY2FzZSBQSF9EQVRBX1JFUToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoaXNhYy0+aHdsb2NrLCBmbGFncyk7CisJCXJldCA9IGRjaGFubmVsX3NlbmRkYXRhKGRjaCwgc2tiKTsKKwkJaWYgKHJldCA+IDApIHsgLyogZGlyZWN0IFRYICovCisJCQlpZCA9IGhoLT5pZDsgLyogc2tiIGNhbiBiZSBmcmVlZCAqLworCQkJaXNhY19maWxsX2ZpZm8oaXNhYyk7CisJCQlyZXQgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpc2FjLT5od2xvY2ssIGZsYWdzKTsKKwkJCXF1ZXVlX2NoX2ZyYW1lKGNoLCBQSF9EQVRBX0NORiwgaWQsIE5VTEwpOworCQl9IGVsc2UKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaXNhYy0+aHdsb2NrLCBmbGFncyk7CisJCXJldHVybiByZXQ7CisJY2FzZSBQSF9BQ1RJVkFURV9SRVE6CisJCXJldCA9IGwxX2V2ZW50KGRjaC0+bDEsIGhoLT5wcmltKTsKKwkJYnJlYWs7CisJY2FzZSBQSF9ERUFDVElWQVRFX1JFUToKKwkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19MMl9BQ1RJVkFURUQsICZkY2gtPkZsYWdzKTsKKwkJcmV0ID0gbDFfZXZlbnQoZGNoLT5sMSwgaGgtPnByaW0pOworCQlicmVhazsKKwl9CisKKwlpZiAoIXJldCkKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2lzYWNfY3RybChzdHJ1Y3QgaXNhY19odyAqaXNhYywgdTMyIGNtZCwgdV9sb25nIHBhcmEpCit7CisJdTggdGwgPSAwOworCXVfbG9uZyBmbGFnczsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBIV19URVNUTE9PUDoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoaXNhYy0+aHdsb2NrLCBmbGFncyk7CisJCWlmICghKGlzYWMtPnR5cGUgJiBJUEFDX1RZUEVfSVNBQ1gpKSB7CisJCQkvKiBUT0RPOiBpbXBsZW1lbnQgZm9yIElQQUNfVFlQRV9JU0FDWCAqLworCQkJaWYgKHBhcmEgJiAxKSAvKiBCMSAqLworCQkJCXRsIHw9IDB4MGM7CisJCQllbHNlIGlmIChwYXJhICYgMikgLyogQjIgKi8KKwkJCQl0bCB8PSAweDM7CisJCQkvKiB3ZSBvbmx5IHN1cHBvcnQgSU9NMiBtb2RlICovCisJCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19TUENSLCB0bCk7CisJCQlpZiAodGwpCisJCQkJV3JpdGVJU0FDKGlzYWMsIElTQUNfQURGMSwgMHg4KTsKKwkJCWVsc2UKKwkJCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19BREYxLCAweDApOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaXNhYy0+aHdsb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCIlczogJXMgdW5rbm93biBjb21tYW5kICV4ICVseFxuIiwgaXNhYy0+bmFtZSwKKwkJCV9fZnVuY19fLCBjbWQsIHBhcmEpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citpc2FjX2wxY21kKHN0cnVjdCBkY2hhbm5lbCAqZGNoLCB1MzIgY21kKQoreworCXN0cnVjdCBpc2FjX2h3ICppc2FjID0gY29udGFpbmVyX29mKGRjaCwgc3RydWN0IGlzYWNfaHcsIGRjaCk7CisJdV9sb25nIGZsYWdzOworCisJcHJfZGVidWcoIiVzOiBjbWQoJXgpIHN0YXRlKCUwMngpXG4iLCBpc2FjLT5uYW1lLCBjbWQsIGlzYWMtPnN0YXRlKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgSU5GTzNfUDg6CisJCXNwaW5fbG9ja19pcnFzYXZlKGlzYWMtPmh3bG9jaywgZmxhZ3MpOworCQlwaF9jb21tYW5kKGlzYWMsIElTQUNfQ01EX0FSOCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaXNhYy0+aHdsb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgSU5GTzNfUDEwOgorCQlzcGluX2xvY2tfaXJxc2F2ZShpc2FjLT5od2xvY2ssIGZsYWdzKTsKKwkJcGhfY29tbWFuZChpc2FjLCBJU0FDX0NNRF9BUjEwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpc2FjLT5od2xvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBIV19SRVNFVF9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKGlzYWMtPmh3bG9jaywgZmxhZ3MpOworCQlpZiAoKGlzYWMtPnN0YXRlID09IElTQUNfSU5EX0VJKSB8fAorCQkgICAgKGlzYWMtPnN0YXRlID09IElTQUNfSU5EX0RSKSB8fAorCQkgICAgKGlzYWMtPnN0YXRlID09IElTQUNfSU5EX1JTKSkKKwkJCXBoX2NvbW1hbmQoaXNhYywgSVNBQ19DTURfVElNKTsKKwkJZWxzZQorCQkJcGhfY29tbWFuZChpc2FjLCBJU0FDX0NNRF9SUyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaXNhYy0+aHdsb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgSFdfREVBQ1RfUkVROgorCQlza2JfcXVldWVfcHVyZ2UoJmRjaC0+c3F1ZXVlKTsKKwkJaWYgKGRjaC0+dHhfc2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiKGRjaC0+dHhfc2tiKTsKKwkJCWRjaC0+dHhfc2tiID0gTlVMTDsKKwkJfQorCQlkY2gtPnR4X2lkeCA9IDA7CisJCWlmIChkY2gtPnJ4X3NrYikgeworCQkJZGV2X2tmcmVlX3NrYihkY2gtPnJ4X3NrYik7CisJCQlkY2gtPnJ4X3NrYiA9IE5VTEw7CisJCX0KKwkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19UWF9CVVNZLCAmZGNoLT5GbGFncyk7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0JVU1lfVElNRVIsICZkY2gtPkZsYWdzKSkKKwkJCWRlbF90aW1lcigmZGNoLT50aW1lcik7CisJCWJyZWFrOworCWNhc2UgSFdfUE9XRVJVUF9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKGlzYWMtPmh3bG9jaywgZmxhZ3MpOworCQlwaF9jb21tYW5kKGlzYWMsIElTQUNfQ01EX1RJTSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaXNhYy0+aHdsb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgUEhfQUNUSVZBVEVfSU5EOgorCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19BQ1RJVkUsICZkY2gtPkZsYWdzKTsKKwkJX3F1ZXVlX2RhdGEoJmRjaC0+ZGV2LkQsIGNtZCwgTUlTRE5fSURfQU5ZLCAwLCBOVUxMLAorCQkJR0ZQX0FUT01JQyk7CisJCWJyZWFrOworCWNhc2UgUEhfREVBQ1RJVkFURV9JTkQ6CisJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQUNUSVZFLCAmZGNoLT5GbGFncyk7CisJCV9xdWV1ZV9kYXRhKCZkY2gtPmRldi5ELCBjbWQsIE1JU0ROX0lEX0FOWSwgMCwgTlVMTCwKKwkJCUdGUF9BVE9NSUMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiJXM6ICVzIHVua25vd24gY29tbWFuZCAleFxuIiwgaXNhYy0+bmFtZSwKKwkJCV9fZnVuY19fLCBjbWQpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraXNhY19yZWxlYXNlKHN0cnVjdCBpc2FjX2h3ICppc2FjKQoreworCWlmIChpc2FjLT50eXBlICYgSVBBQ19UWVBFX0lTQUNYKQorCQlXcml0ZUlTQUMoaXNhYywgSVNBQ1hfTUFTSywgMHhmZik7CisJZWxzZQorCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NQVNLLCAweGZmKTsKKwlpZiAoaXNhYy0+ZGNoLnRpbWVyLmZ1bmN0aW9uICE9IE5VTEwpIHsKKwkJZGVsX3RpbWVyKCZpc2FjLT5kY2gudGltZXIpOworCQlpc2FjLT5kY2gudGltZXIuZnVuY3Rpb24gPSBOVUxMOworCX0KKwlrZnJlZShpc2FjLT5tb25fcngpOworCWlzYWMtPm1vbl9yeCA9IE5VTEw7CisJa2ZyZWUoaXNhYy0+bW9uX3R4KTsKKwlpc2FjLT5tb25fdHggPSBOVUxMOworCWlmIChpc2FjLT5kY2gubDEpCisJCWwxX2V2ZW50KGlzYWMtPmRjaC5sMSwgQ0xPU0VfQ0hBTk5FTCk7CisJbUlTRE5fZnJlZWRjaGFubmVsKCZpc2FjLT5kY2gpOworfQorCitzdGF0aWMgdm9pZAorZGJ1c3lfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaXNhY19odyAqaXNhYykKK3sKKwlpbnQgcmJjaCwgc3RhcjsKKwl1X2xvbmcgZmxhZ3M7CisKKwlpZiAodGVzdF9iaXQoRkxHX0JVU1lfVElNRVIsICZpc2FjLT5kY2guRmxhZ3MpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKGlzYWMtPmh3bG9jaywgZmxhZ3MpOworCQlyYmNoID0gUmVhZElTQUMoaXNhYywgSVNBQ19SQkNIKTsKKwkJc3RhciA9IFJlYWRJU0FDKGlzYWMsIElTQUNfU1RBUik7CisJCXByX2RlYnVnKCIlczogRC1DaGFubmVsIEJ1c3kgUkJDSCAlMDJ4IFNUQVIgJTAyeFxuIiwKKwkJCWlzYWMtPm5hbWUsIHJiY2gsIHN0YXIpOworCQlpZiAocmJjaCAmIElTQUNfUkJDSF9YQUMpIC8qIEQtQ2hhbm5lbCBCdXN5ICovCisJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19MMV9CVVNZLCAmaXNhYy0+ZGNoLkZsYWdzKTsKKwkJZWxzZSB7CisJCQkvKiBkaXNjYXJkIGZyYW1lOyByZXNldCB0cmFuc2NlaXZlciAqLworCQkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19CVVNZX1RJTUVSLCAmaXNhYy0+ZGNoLkZsYWdzKTsKKwkJCWlmIChpc2FjLT5kY2gudHhfaWR4KQorCQkJCWlzYWMtPmRjaC50eF9pZHggPSAwOworCQkJZWxzZQorCQkJCXByX2luZm8oIiVzOiBJU0FDIEQtQ2hhbm5lbCBCdXN5IG5vIHR4X2lkeFxuIiwKKwkJCQkJaXNhYy0+bmFtZSk7CisJCQkvKiBUcmFuc21pdHRlciByZXNldCAqLworCQkJV3JpdGVJU0FDKGlzYWMsIElTQUNfQ01EUiwgMHgwMSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpc2FjLT5od2xvY2ssIGZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK29wZW5fZGNoYW5uZWwoc3RydWN0IGlzYWNfaHcgKmlzYWMsIHN0cnVjdCBjaGFubmVsX3JlcSAqcnEpCit7CisJcHJfZGVidWcoIiVzOiAlcyBkZXYoJWQpIG9wZW4gZnJvbSAlcFxuIiwgaXNhYy0+bmFtZSwgX19mdW5jX18sCisJCWlzYWMtPmRjaC5kZXYuaWQsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygxKSk7CisJaWYgKHJxLT5wcm90b2NvbCAhPSBJU0ROX1BfVEVfUzApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChycS0+YWRyLmNoYW5uZWwgPT0gMSkKKwkJLyogRS1DaGFubmVsIG5vdCBzdXBwb3J0ZWQgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJcnEtPmNoID0gJmlzYWMtPmRjaC5kZXYuRDsKKwlycS0+Y2gtPnByb3RvY29sID0gcnEtPnByb3RvY29sOworCWlmIChpc2FjLT5kY2guc3RhdGUgPT0gNykKKwkJX3F1ZXVlX2RhdGEocnEtPmNoLCBQSF9BQ1RJVkFURV9JTkQsIE1JU0ROX0lEX0FOWSwKKwkJICAgIDAsIE5VTEwsIEdGUF9LRVJORUwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqSVNBQ1ZlcltdID0KK3siMjA4Ni8yMTg2IFYxLjEiLCAiMjA4NSBCMSIsICIyMDg1IEIyIiwKKyAiMjA4NSBWMi4zIn07CisKK3N0YXRpYyBpbnQKK2lzYWNfaW5pdChzdHJ1Y3QgaXNhY19odyAqaXNhYykKK3sKKwl1OCB2YWw7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIWlzYWMtPmRjaC5sMSkgeworCQllcnIgPSBjcmVhdGVfbDEoJmlzYWMtPmRjaCwgaXNhY19sMWNtZCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlpc2FjLT5tb25fdHggPSBOVUxMOworCWlzYWMtPm1vbl9yeCA9IE5VTEw7CisJaXNhYy0+ZGNoLnRpbWVyLmZ1bmN0aW9uID0gKHZvaWQgKikgZGJ1c3lfdGltZXJfaGFuZGxlcjsKKwlpc2FjLT5kY2gudGltZXIuZGF0YSA9IChsb25nKWlzYWM7CisJaW5pdF90aW1lcigmaXNhYy0+ZGNoLnRpbWVyKTsKKwlpc2FjLT5tb2NyID0gMHhhYTsKKwlpZiAoaXNhYy0+dHlwZSAmIElQQUNfVFlQRV9JU0FDWCkgeworCQkvKiBEaXNhYmxlIGFsbCBJUlEgKi8KKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNYX01BU0ssIDB4ZmYpOworCQl2YWwgPSBSZWFkSVNBQyhpc2FjLCBJU0FDWF9TVEFSRCk7CisJCXByX2RlYnVnKCIlczogSVNBQ1ggU1RBUkQgJXhcbiIsIGlzYWMtPm5hbWUsIHZhbCk7CisJCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNYX0lTVEFEKTsKKwkJcHJfZGVidWcoIiVzOiBJU0FDWCBJU1RBRCAleFxuIiwgaXNhYy0+bmFtZSwgdmFsKTsKKwkJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ1hfSVNUQSk7CisJCXByX2RlYnVnKCIlczogSVNBQ1ggSVNUQSAleFxuIiwgaXNhYy0+bmFtZSwgdmFsKTsKKwkJLyogY2xlYXIgTEREICovCisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDWF9UUl9DT05GMCwgMHgwMCk7CisJCS8qIGVuYWJsZSB0cmFuc21pdHRlciAqLworCQlXcml0ZUlTQUMoaXNhYywgSVNBQ1hfVFJfQ09ORjIsIDB4MDApOworCQkvKiB0cmFuc3BhcmVudCBtb2RlIDAsIFJBQywgc3RvcC9nbyAqLworCQlXcml0ZUlTQUMoaXNhYywgSVNBQ1hfTU9ERUQsIDB4YzkpOworCQkvKiBhbGwgSERMQyBJUlEgdW5tYXNrZWQgKi8KKwkJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ1hfSUQpOworCQlpZiAoaXNhYy0+ZGNoLmRlYnVnICYgREVCVUdfSFcpCisJCQlwcl9ub3RpY2UoIiVzOiBJU0FDWCBEZXNpZ24gSUQgJXhcbiIsCisJCQkJaXNhYy0+bmFtZSwgdmFsICYgMHgzZik7CisJCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNYX0NJUjApOworCQlwcl9kZWJ1ZygiJXM6IElTQUNYIENJUjAgJTAyWFxuIiwgaXNhYy0+bmFtZSwgdmFsKTsKKwkJaXNhYy0+c3RhdGUgPSB2YWwgPj4gNDsKKwkJaXNhY19waF9zdGF0ZV9jaGFuZ2UoaXNhYyk7CisJCXBoX2NvbW1hbmQoaXNhYywgSVNBQ19DTURfUlMpOworCQlXcml0ZUlTQUMoaXNhYywgSVNBQ1hfTUFTSywgSVBBQ1hfX09OKTsKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNYX01BU0tELCAweDAwKTsKKwl9IGVsc2UgeyAvKiBvbGQgaXNhYyAqLworCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NQVNLLCAweGZmKTsKKwkJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ19TVEFSKTsKKwkJcHJfZGVidWcoIiVzOiBJU0FDIFNUQVIgJXhcbiIsIGlzYWMtPm5hbWUsIHZhbCk7CisJCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfTU9ERSk7CisJCXByX2RlYnVnKCIlczogSVNBQyBNT0RFICV4XG4iLCBpc2FjLT5uYW1lLCB2YWwpOworCQl2YWwgPSBSZWFkSVNBQyhpc2FjLCBJU0FDX0FERjIpOworCQlwcl9kZWJ1ZygiJXM6IElTQUMgQURGMiAleFxuIiwgaXNhYy0+bmFtZSwgdmFsKTsKKwkJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ19JU1RBKTsKKwkJcHJfZGVidWcoIiVzOiBJU0FDIElTVEEgJXhcbiIsIGlzYWMtPm5hbWUsIHZhbCk7CisJCWlmICh2YWwgJiAweDAxKSB7CisJCQl2YWwgPSBSZWFkSVNBQyhpc2FjLCBJU0FDX0VYSVIpOworCQkJcHJfZGVidWcoIiVzOiBJU0FDIEVYSVIgJXhcbiIsIGlzYWMtPm5hbWUsIHZhbCk7CisJCX0KKwkJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ19SQkNIKTsKKwkJaWYgKGlzYWMtPmRjaC5kZWJ1ZyAmIERFQlVHX0hXKQorCQkJcHJfbm90aWNlKCIlczogSVNBQyB2ZXJzaW9uICgleCk6ICVzXG4iLCBpc2FjLT5uYW1lLAorCQkJCXZhbCwgSVNBQ1ZlclsodmFsID4+IDUpICYgM10pOworCQlpc2FjLT50eXBlIHw9ICgodmFsID4+IDUpICYgMyk7CisJCWlmICghaXNhYy0+YWRmMikKKwkJCWlzYWMtPmFkZjIgPSAweDgwOworCQlpZiAoIShpc2FjLT5hZGYyICYgMHg4MCkpIHsgLyogb25seSBJT00gMiBNb2RlICovCisJCQlwcl9pbmZvKCIlczogb25seSBzdXBwb3J0IElPTTIgbW9kZSBidXQgYWRmMj0lMDJ4XG4iLAorCQkJCWlzYWMtPm5hbWUsIGlzYWMtPmFkZjIpOworCQkJaXNhY19yZWxlYXNlKGlzYWMpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfQURGMiwgaXNhYy0+YWRmMik7CisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX1NRWFIsIDB4MmYpOworCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19TUENSLCAweDAwKTsKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfU1RDUiwgMHg3MCk7CisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PREUsIDB4YzkpOworCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19USU1SLCAweDAwKTsKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfQURGMSwgMHgwMCk7CisJCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfQ0lSMCk7CisJCXByX2RlYnVnKCIlczogSVNBQyBDSVIwICV4XG4iLCBpc2FjLT5uYW1lLCB2YWwpOworCQlpc2FjLT5zdGF0ZSA9ICh2YWwgPj4gMikgJiAweGY7CisJCWlzYWNfcGhfc3RhdGVfY2hhbmdlKGlzYWMpOworCQlwaF9jb21tYW5kKGlzYWMsIElTQUNfQ01EX1JTKTsKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfTUFTSywgMCk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK2ludAorbUlTRE5pc2FjX2luaXQoc3RydWN0IGlzYWNfaHcgKmlzYWMsIHZvaWQgKmh3KQoreworCW1JU0ROX2luaXRkY2hhbm5lbCgmaXNhYy0+ZGNoLCBNQVhfREZSQU1FX0xFTl9MMSwgaXNhY19waF9zdGF0ZV9iaCk7CisJaXNhYy0+ZGNoLmh3ID0gaHc7CisJaXNhYy0+ZGNoLmRldi5ELnNlbmQgPSBpc2FjX2wxaHc7CisJaXNhYy0+aW5pdCA9IGlzYWNfaW5pdDsKKwlpc2FjLT5yZWxlYXNlID0gaXNhY19yZWxlYXNlOworCWlzYWMtPmN0cmwgPSBpc2FjX2N0cmw7CisJaXNhYy0+b3BlbiA9IG9wZW5fZGNoYW5uZWw7CisJaXNhYy0+ZGNoLmRldi5EcHJvdG9jb2xzID0gKDEgPDwgSVNETl9QX1RFX1MwKTsKKwlpc2FjLT5kY2guZGV2Lm5yYmNoYW4gPSAyOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChtSVNETmlzYWNfaW5pdCk7CisKK3N0YXRpYyB2b2lkCit3YWl0Zm9yQ0VDKHN0cnVjdCBoc2N4X2h3ICpoeCkKK3sKKwl1OCBzdGFyYiwgdG8gPSA1MDsKKworCXdoaWxlICh0bykgeworCQlzdGFyYiA9IFJlYWRIU0NYKGh4LCBJUEFDX1NUQVJCKTsKKwkJaWYgKCEoc3RhcmIgJiAweDA0KSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJCXRvLS07CisJfQorCWlmICh0byA8IDUwKQorCQlwcl9kZWJ1ZygiJXM6IEIlMWQgQ0VDICVkIHVzXG4iLCBoeC0+aXAtPm5hbWUsIGh4LT5iY2gubnIsCisJCQk1MCAtIHRvKTsKKwlpZiAoIXRvKQorCQlwcl9pbmZvKCIlczogQiUxZCBDRUMgdGltZW91dFxuIiwgaHgtPmlwLT5uYW1lLCBoeC0+YmNoLm5yKTsKK30KKworCitzdGF0aWMgdm9pZAord2FpdGZvclhGVyhzdHJ1Y3QgaHNjeF9odyAqaHgpCit7CisJdTggc3RhcmIsIHRvID0gNTA7CisKKwl3aGlsZSAodG8pIHsKKwkJc3RhcmIgPSBSZWFkSFNDWChoeCwgSVBBQ19TVEFSQik7CisJCWlmICgoc3RhcmIgJiAweDQ0KSA9PSAweDQwKQorCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKKwkJdG8tLTsKKwl9CisJaWYgKHRvIDwgNTApCisJCXByX2RlYnVnKCIlczogQiUxZCBYRlcgJWQgdXNcbiIsIGh4LT5pcC0+bmFtZSwgaHgtPmJjaC5uciwKKwkJCTUwIC0gdG8pOworCWlmICghdG8pCisJCXByX2luZm8oIiVzOiBCJTFkIFhGVyB0aW1lb3V0XG4iLCBoeC0+aXAtPm5hbWUsIGh4LT5iY2gubnIpOworfQorCitzdGF0aWMgdm9pZAoraHNjeF9jbWRyKHN0cnVjdCBoc2N4X2h3ICpoeCwgdTggY21kKQoreworCWlmIChoeC0+aXAtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQ1gpCisJCVdyaXRlSFNDWChoeCwgSVBBQ1hfQ01EUkIsIGNtZCk7CisJZWxzZSB7CisJCXdhaXRmb3JDRUMoaHgpOworCQlXcml0ZUhTQ1goaHgsIElQQUNfQ01EUkIsIGNtZCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraHNjeF9lbXB0eV9maWZvKHN0cnVjdCBoc2N4X2h3ICpoc2N4LCB1OCBjb3VudCkKK3sKKwl1OCAqcDsKKworCXByX2RlYnVnKCIlczogQiUxZCAlZFxuIiwgaHNjeC0+aXAtPm5hbWUsIGhzY3gtPmJjaC5uciwgY291bnQpOworCWlmICghaHNjeC0+YmNoLnJ4X3NrYikgeworCQloc2N4LT5iY2gucnhfc2tiID0gbUlfYWxsb2Nfc2tiKGhzY3gtPmJjaC5tYXhsZW4sIEdGUF9BVE9NSUMpOworCQlpZiAoIWhzY3gtPmJjaC5yeF9za2IpIHsKKwkJCXByX2luZm8oIiVzOiBCIHJlY2VpdmUgb3V0IG9mIG1lbW9yeVxuIiwKKwkJCQloc2N4LT5pcC0+bmFtZSk7CisJCQloc2N4X2NtZHIoaHNjeCwgMHg4MCk7IC8qIFJNQyAqLworCQkJcmV0dXJuOworCQl9CisJfQorCWlmICgoaHNjeC0+YmNoLnJ4X3NrYi0+bGVuICsgY291bnQpID4gaHNjeC0+YmNoLm1heGxlbikgeworCQlwcl9kZWJ1ZygiJXM6IG92ZXJydW4gJWRcbiIsIGhzY3gtPmlwLT5uYW1lLAorCQkJaHNjeC0+YmNoLnJ4X3NrYi0+bGVuICsgY291bnQpOworCQlza2JfdHJpbShoc2N4LT5iY2gucnhfc2tiLCAwKTsKKwkJaHNjeF9jbWRyKGhzY3gsIDB4ODApOyAvKiBSTUMgKi8KKwkJcmV0dXJuOworCX0KKwlwID0gc2tiX3B1dChoc2N4LT5iY2gucnhfc2tiLCBjb3VudCk7CisKKwlpZiAoaHNjeC0+aXAtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQ1gpCisJCWhzY3gtPmlwLT5yZWFkX2ZpZm8oaHNjeC0+aXAtPmh3LAorCQkJaHNjeC0+b2ZmICsgSVBBQ1hfUkZJRk9CLCBwLCBjb3VudCk7CisJZWxzZQorCQloc2N4LT5pcC0+cmVhZF9maWZvKGhzY3gtPmlwLT5odywKKwkJCWhzY3gtPm9mZiwgcCwgY291bnQpOworCisJaHNjeF9jbWRyKGhzY3gsIDB4ODApOyAvKiBSTUMgKi8KKworCWlmIChoc2N4LT5iY2guZGVidWcgJiBERUJVR19IV19CRklGTykgeworCQlzbnByaW50Zihoc2N4LT5sb2csIDY0LCAiQiUxZC1yZWN2ICVzICVkICIsCisJCQloc2N4LT5iY2gubnIsIGhzY3gtPmlwLT5uYW1lLCBjb3VudCk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKGhzY3gtPmxvZywgRFVNUF9QUkVGSVhfT0ZGU0VULCBwLCBjb3VudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraHNjeF9maWxsX2ZpZm8oc3RydWN0IGhzY3hfaHcgKmhzY3gpCit7CisJaW50IGNvdW50LCBtb3JlOworCXU4ICpwOworCisJaWYgKCFoc2N4LT5iY2gudHhfc2tiKQorCQlyZXR1cm47CisJY291bnQgPSBoc2N4LT5iY2gudHhfc2tiLT5sZW4gLSBoc2N4LT5iY2gudHhfaWR4OworCWlmIChjb3VudCA8PSAwKQorCQlyZXR1cm47CisJcCA9IGhzY3gtPmJjaC50eF9za2ItPmRhdGEgKyBoc2N4LT5iY2gudHhfaWR4OworCisJbW9yZSA9IHRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJmhzY3gtPmJjaC5GbGFncykgPyAxIDogMDsKKwlpZiAoY291bnQgPiBoc2N4LT5maWZvX3NpemUpIHsKKwkJY291bnQgPSBoc2N4LT5maWZvX3NpemU7CisJCW1vcmUgPSAxOworCX0KKwlwcl9kZWJ1ZygiJXM6IEIlMWQgJWQvJWQvJWRcbiIsIGhzY3gtPmlwLT5uYW1lLCBoc2N4LT5iY2gubnIsIGNvdW50LAorCQloc2N4LT5iY2gudHhfaWR4LCBoc2N4LT5iY2gudHhfc2tiLT5sZW4pOworCWhzY3gtPmJjaC50eF9pZHggKz0gY291bnQ7CisKKwlpZiAoaHNjeC0+aXAtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQ1gpCisJCWhzY3gtPmlwLT53cml0ZV9maWZvKGhzY3gtPmlwLT5odywKKwkJCWhzY3gtPm9mZiArIElQQUNYX1hGSUZPQiwgcCwgY291bnQpOworCWVsc2UgeworCQl3YWl0Zm9yWEZXKGhzY3gpOworCQloc2N4LT5pcC0+d3JpdGVfZmlmbyhoc2N4LT5pcC0+aHcsCisJCQloc2N4LT5vZmYsIHAsIGNvdW50KTsKKwl9CisJaHNjeF9jbWRyKGhzY3gsIG1vcmUgPyAweDA4IDogMHgwYSk7CisKKwlpZiAoaHNjeC0+YmNoLmRlYnVnICYgREVCVUdfSFdfQkZJRk8pIHsKKwkJc25wcmludGYoaHNjeC0+bG9nLCA2NCwgIkIlMWQtc2VuZCAlcyAlZCAiLAorCQkJaHNjeC0+YmNoLm5yLCBoc2N4LT5pcC0+bmFtZSwgY291bnQpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcyhoc2N4LT5sb2csIERVTVBfUFJFRklYX09GRlNFVCwgcCwgY291bnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2hzY3hfeHByKHN0cnVjdCBoc2N4X2h3ICpoeCkKK3sKKwlpZiAoaHgtPmJjaC50eF9za2IgJiYgaHgtPmJjaC50eF9pZHggPCBoeC0+YmNoLnR4X3NrYi0+bGVuKQorCQloc2N4X2ZpbGxfZmlmbyhoeCk7CisJZWxzZSB7CisJCWlmIChoeC0+YmNoLnR4X3NrYikgeworCQkJLyogc2VuZCBjb25maXJtLCBvbiB0cmFucywgZnJlZSBvbiBoZGxjLiAqLworCQkJaWYgKHRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJmh4LT5iY2guRmxhZ3MpKQorCQkJCWNvbmZpcm1fQnNlbmQoJmh4LT5iY2gpOworCQkJZGV2X2tmcmVlX3NrYihoeC0+YmNoLnR4X3NrYik7CisJCX0KKwkJaWYgKGdldF9uZXh0X2JmcmFtZSgmaHgtPmJjaCkpCisJCQloc2N4X2ZpbGxfZmlmbyhoeCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraXBhY19ybWUoc3RydWN0IGhzY3hfaHcgKmh4KQoreworCWludCBjb3VudDsKKwl1OCByc3RhYjsKKworCWlmIChoeC0+aXAtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQ1gpCisJCXJzdGFiID0gUmVhZEhTQ1goaHgsIElQQUNYX1JTVEFCKTsKKwllbHNlCisJCXJzdGFiID0gUmVhZEhTQ1goaHgsIElQQUNfUlNUQUIpOworCXByX2RlYnVnKCIlczogQiUxZCBSU1RBQiAlMDJ4XG4iLCBoeC0+aXAtPm5hbWUsIGh4LT5iY2gubnIsIHJzdGFiKTsKKwlpZiAoKHJzdGFiICYgMHhmMCkgIT0gMHhhMCkgeworCQkvKiAhKFZGUiAmJiAhUkRPICYmIENSQyAmJiAhUkFCKSAqLworCQlpZiAoIShyc3RhYiAmIDB4ODApKSB7CisJCQlpZiAoaHgtPmJjaC5kZWJ1ZyAmIERFQlVHX0hXX0JDSEFOTkVMKQorCQkJCXByX25vdGljZSgiJXM6IEIlMWQgaW52YWxpZCBmcmFtZVxuIiwKKwkJCQkJaHgtPmlwLT5uYW1lLCBoeC0+YmNoLm5yKTsKKwkJfQorCQlpZiAocnN0YWIgJiAweDQwKSB7CisJCQlpZiAoaHgtPmJjaC5kZWJ1ZyAmIERFQlVHX0hXX0JDSEFOTkVMKQorCQkJCXByX25vdGljZSgiJXM6IEIlMWQgUkRPIHByb3RvPSV4XG4iLAorCQkJCQloeC0+aXAtPm5hbWUsIGh4LT5iY2gubnIsCisJCQkJCWh4LT5iY2guc3RhdGUpOworCQl9CisJCWlmICghKHJzdGFiICYgMHgyMCkpIHsKKwkJCWlmIChoeC0+YmNoLmRlYnVnICYgREVCVUdfSFdfQkNIQU5ORUwpCisJCQkJcHJfbm90aWNlKCIlczogQiUxZCBDUkMgZXJyb3JcbiIsCisJCQkJCWh4LT5pcC0+bmFtZSwgaHgtPmJjaC5ucik7CisJCX0KKwkJaHNjeF9jbWRyKGh4LCAweDgwKTsgLyogRG8gUk1DICovCisJCXJldHVybjsKKwl9CisJaWYgKGh4LT5pcC0+dHlwZSAmIElQQUNfVFlQRV9JUEFDWCkKKwkJY291bnQgPSBSZWFkSFNDWChoeCwgSVBBQ1hfUkJDTEIpOworCWVsc2UKKwkJY291bnQgPSBSZWFkSFNDWChoeCwgSVBBQ19SQkNMQik7CisJY291bnQgJj0gKGh4LT5maWZvX3NpemUgLSAxKTsKKwlpZiAoY291bnQgPT0gMCkKKwkJY291bnQgPSBoeC0+Zmlmb19zaXplOworCWhzY3hfZW1wdHlfZmlmbyhoeCwgY291bnQpOworCWlmICghaHgtPmJjaC5yeF9za2IpCisJCXJldHVybjsKKwlpZiAoaHgtPmJjaC5yeF9za2ItPmxlbiA8IDIpIHsKKwkJcHJfZGVidWcoIiVzOiBCJTFkIGZyYW1lIHRvIHNob3J0ICVkXG4iLAorCQkJaHgtPmlwLT5uYW1lLCBoeC0+YmNoLm5yLCBoeC0+YmNoLnJ4X3NrYi0+bGVuKTsKKwkJc2tiX3RyaW0oaHgtPmJjaC5yeF9za2IsIDApOworCX0gZWxzZSB7CisJCXNrYl90cmltKGh4LT5iY2gucnhfc2tiLCBoeC0+YmNoLnJ4X3NrYi0+bGVuIC0gMSk7CisJCXJlY3ZfQmNoYW5uZWwoJmh4LT5iY2gsIDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2lwYWNfaXJxKHN0cnVjdCBoc2N4X2h3ICpoeCwgdTggaXN0YSkKK3sKKwl1OCBpc3RhYiwgbSwgZXhpcmIgPSAwOworCisJaWYgKGh4LT5pcC0+dHlwZSAmIElQQUNfVFlQRV9JUEFDWCkKKwkJaXN0YWIgPSBSZWFkSFNDWChoeCwgSVBBQ1hfSVNUQUIpOworCWVsc2UgaWYgKGh4LT5pcC0+dHlwZSAmIElQQUNfVFlQRV9JUEFDKSB7CisJCWlzdGFiID0gUmVhZEhTQ1goaHgsIElQQUNfSVNUQUIpOworCQltID0gKGh4LT5iY2gubnIgJiAxKSA/IElQQUNfX0VYQSA6IElQQUNfX0VYQjsKKwkJaWYgKG0gJiBpc3RhKSB7CisJCQlleGlyYiA9IFJlYWRIU0NYKGh4LCBJUEFDX0VYSVJCKTsKKwkJCXByX2RlYnVnKCIlczogQiUxZCBFWElSQiAlMDJ4XG4iLCBoeC0+aXAtPm5hbWUsCisJCQkJaHgtPmJjaC5uciwgZXhpcmIpOworCQl9CisJfSBlbHNlIGlmIChoeC0+YmNoLm5yICYgMikgeyAvKiBIU0NYIEIgKi8KKwkJaWYgKGlzdGEgJiAoSFNDWF9fRVhBIHwgSFNDWF9fSUNBKSkKKwkJCWlwYWNfaXJxKCZoeC0+aXAtPmhzY3hbMF0sIGlzdGEpOworCQlpZiAoaXN0YSAmIEhTQ1hfX0VYQikgeworCQkJZXhpcmIgPSBSZWFkSFNDWChoeCwgSVBBQ19FWElSQik7CisJCQlwcl9kZWJ1ZygiJXM6IEIlMWQgRVhJUkIgJTAyeFxuIiwgaHgtPmlwLT5uYW1lLAorCQkJCWh4LT5iY2gubnIsIGV4aXJiKTsKKwkJfQorCQlpc3RhYiA9IGlzdGEgJiAweEY4OworCX0gZWxzZSB7IC8qIEhTQ1ggQSAqLworCQlpc3RhYiA9IFJlYWRIU0NYKGh4LCBJUEFDX0lTVEFCKTsKKwkJaWYgKGlzdGEgJiBIU0NYX19FWEEpIHsKKwkJCWV4aXJiID0gUmVhZEhTQ1goaHgsIElQQUNfRVhJUkIpOworCQkJcHJfZGVidWcoIiVzOiBCJTFkIEVYSVJCICUwMnhcbiIsIGh4LT5pcC0+bmFtZSwKKwkJCQloeC0+YmNoLm5yLCBleGlyYik7CisJCX0KKwkJaXN0YWIgPSBpc3RhYiAmIDB4Rjg7CisJfQorCWlmIChleGlyYiAmIElQQUNfQl9YRFUpCisJCWlzdGFiIHw9IElQQUNYX0JfWERVOworCWlmIChleGlyYiAmIElQQUNfQl9SRk8pCisJCWlzdGFiIHw9IElQQUNYX0JfUkZPOworCXByX2RlYnVnKCIlczogQiUxZCBJU1RBQiAlMDJ4XG4iLCBoeC0+aXAtPm5hbWUsIGh4LT5iY2gubnIsIGlzdGFiKTsKKworCWlmICghdGVzdF9iaXQoRkxHX0FDVElWRSwgJmh4LT5iY2guRmxhZ3MpKQorCQlyZXR1cm47CisKKwlpZiAoaXN0YWIgJiBJUEFDWF9CX1JNRSkKKwkJaXBhY19ybWUoaHgpOworCisJaWYgKGlzdGFiICYgSVBBQ1hfQl9SUEYpIHsKKwkJaHNjeF9lbXB0eV9maWZvKGh4LCBoeC0+Zmlmb19zaXplKTsKKwkJaWYgKHRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJmh4LT5iY2guRmxhZ3MpKSB7CisJCQkvKiByZWNlaXZlIHRyYW5zcGFyZW50IGF1ZGlvIGRhdGEgKi8KKwkJCWlmIChoeC0+YmNoLnJ4X3NrYikKKwkJCQlyZWN2X0JjaGFubmVsKCZoeC0+YmNoLCAwKTsKKwkJfQorCX0KKworCWlmIChpc3RhYiAmIElQQUNYX0JfUkZPKSB7CisJCXByX2RlYnVnKCIlczogQiUxZCBSRk8gZXJyb3JcbiIsIGh4LT5pcC0+bmFtZSwgaHgtPmJjaC5ucik7CisJCWhzY3hfY21kcihoeCwgMHg0MCk7CS8qIFJSRVMgKi8KKwl9CisKKwlpZiAoaXN0YWIgJiBJUEFDWF9CX1hQUikKKwkJaHNjeF94cHIoaHgpOworCisJaWYgKGlzdGFiICYgSVBBQ1hfQl9YRFUpIHsKKwkJaWYgKHRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJmh4LT5iY2guRmxhZ3MpKSB7CisJCQloc2N4X2ZpbGxfZmlmbyhoeCk7CisJCQlyZXR1cm47CisJCX0KKwkJcHJfZGVidWcoIiVzOiBCJTFkIFhEVSBlcnJvciBhdCBsZW4gJWRcbiIsIGh4LT5pcC0+bmFtZSwKKwkJCWh4LT5iY2gubnIsIGh4LT5iY2gudHhfaWR4KTsKKwkJaHgtPmJjaC50eF9pZHggPSAwOworCQloc2N4X2NtZHIoaHgsIDB4MDEpOwkvKiBYUkVTICovCisJfQorfQorCitpcnFyZXR1cm5fdAorbUlTRE5pcGFjX2lycShzdHJ1Y3QgaXBhY19odyAqaXBhYywgaW50IG1heGxvb3ApCit7CisJaW50IGNudCA9IG1heGxvb3AgKyAxOworCXU4IGlzdGEsIGlzdGFkOworCXN0cnVjdCBpc2FjX2h3ICAqaXNhYyA9ICZpcGFjLT5pc2FjOworCisJaWYgKGlwYWMtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQ1gpIHsKKwkJaXN0YSA9IFJlYWRJUEFDKGlwYWMsIElTQUNYX0lTVEEpOworCQl3aGlsZSAoaXN0YSAmJiBjbnQtLSkgeworCQkJcHJfZGVidWcoIiVzOiBJU1RBICUwMnhcbiIsIGlwYWMtPm5hbWUsIGlzdGEpOworCQkJaWYgKGlzdGEgJiBJUEFDWF9fSUNBKQorCQkJCWlwYWNfaXJxKCZpcGFjLT5oc2N4WzBdLCBpc3RhKTsKKwkJCWlmIChpc3RhICYgSVBBQ1hfX0lDQikKKwkJCQlpcGFjX2lycSgmaXBhYy0+aHNjeFsxXSwgaXN0YSk7CisJCQlpZiAoaXN0YSAmIChJU0FDWF9fSUNEIHwgSVNBQ1hfX0NJQykpCisJCQkJbUlTRE5pc2FjX2lycSgmaXBhYy0+aXNhYywgaXN0YSk7CisJCQlpc3RhID0gUmVhZElQQUMoaXBhYywgSVNBQ1hfSVNUQSk7CisJCX0KKwl9IGVsc2UgaWYgKGlwYWMtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQykgeworCQlpc3RhID0gUmVhZElQQUMoaXBhYywgSVBBQ19JU1RBKTsKKwkJd2hpbGUgKGlzdGEgJiYgY250LS0pIHsKKwkJCXByX2RlYnVnKCIlczogSVNUQSAlMDJ4XG4iLCBpcGFjLT5uYW1lLCBpc3RhKTsKKwkJCWlmIChpc3RhICYgKElQQUNfX0lDRCB8IElQQUNfX0VYRCkpIHsKKwkJCQlpc3RhZCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfSVNUQSk7CisJCQkJcHJfZGVidWcoIiVzOiBJU1RBRCAlMDJ4XG4iLCBpcGFjLT5uYW1lLCBpc3RhZCk7CisJCQkJaWYgKGlzdGFkICYgSVBBQ19EX1RJTjIpCisJCQkJCXByX2RlYnVnKCIlcyBUSU4yIGlycVxuIiwgaXBhYy0+bmFtZSk7CisJCQkJaWYgKGlzdGEgJiBJUEFDX19FWEQpCisJCQkJCWlzdGFkIHw9IDE7IC8qIElTQUMgRVhJICovCisJCQkJbUlTRE5pc2FjX2lycShpc2FjLCBpc3RhZCk7CisJCQl9CisJCQlpZiAoaXN0YSAmIChJUEFDX19JQ0EgfCBJUEFDX19FWEEpKQorCQkJCWlwYWNfaXJxKCZpcGFjLT5oc2N4WzBdLCBpc3RhKTsKKwkJCWlmIChpc3RhICYgKElQQUNfX0lDQiB8IElQQUNfX0VYQikpCisJCQkJaXBhY19pcnEoJmlwYWMtPmhzY3hbMV0sIGlzdGEpOworCQkJaXN0YSA9IFJlYWRJUEFDKGlwYWMsIElQQUNfSVNUQSk7CisJCX0KKwl9IGVsc2UgaWYgKGlwYWMtPnR5cGUgJiBJUEFDX1RZUEVfSFNDWCkgeworCQl3aGlsZSAoY250KSB7CisJCQlpc3RhID0gUmVhZElQQUMoaXBhYywgSVBBQ19JU1RBQiArIGlwYWMtPmhzY3hbMV0ub2ZmKTsKKwkJCXByX2RlYnVnKCIlczogQjIgSVNUQSAlMDJ4XG4iLCBpcGFjLT5uYW1lLCBpc3RhKTsKKwkJCWlmIChpc3RhKQorCQkJCWlwYWNfaXJxKCZpcGFjLT5oc2N4WzFdLCBpc3RhKTsKKwkJCWlzdGFkID0gUmVhZElTQUMoaXNhYywgSVNBQ19JU1RBKTsKKwkJCXByX2RlYnVnKCIlczogSVNUQUQgJTAyeFxuIiwgaXBhYy0+bmFtZSwgaXN0YWQpOworCQkJaWYgKGlzdGFkKQorCQkJCW1JU0ROaXNhY19pcnEoaXNhYywgaXN0YWQpOworCQkJaWYgKDAgPT0gKGlzdGEgfCBpc3RhZCkpCisJCQkJYnJlYWs7CisJCQljbnQtLTsKKwkJfQorCX0KKwlpZiAoY250ID4gbWF4bG9vcCkgLyogb25seSBmb3IgSVNBQy9IU0NYIHdpdGhvdXQgUENJIElSUSB0ZXN0ICovCisJCXJldHVybiBJUlFfTk9ORTsKKwlpZiAoY250IDwgbWF4bG9vcCkKKwkJcHJfZGVidWcoIiVzOiAlZCBpcnFsb29wcyBjcHUlZFxuIiwgaXBhYy0+bmFtZSwKKwkJCW1heGxvb3AgLSBjbnQsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJaWYgKG1heGxvb3AgJiYgIWNudCkKKwkJcHJfbm90aWNlKCIlczogJWQgSVJRIExPT1AgY3B1JWRcbiIsIGlwYWMtPm5hbWUsCisJCQltYXhsb29wLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KK0VYUE9SVF9TWU1CT0wobUlTRE5pcGFjX2lycSk7CisKK3N0YXRpYyBpbnQKK2hzY3hfbW9kZShzdHJ1Y3QgaHNjeF9odyAqaHNjeCwgdTMyIGJwcm90b2NvbCkKK3sKKwlwcl9kZWJ1ZygiJXM6IEhTQ1ggJWMgcHJvdG9jb2wgJXgtLT4leCBjaCAlZFxuIiwgaHNjeC0+aXAtPm5hbWUsCisJCSdAJyArIGhzY3gtPmJjaC5uciwgaHNjeC0+YmNoLnN0YXRlLCBicHJvdG9jb2wsIGhzY3gtPmJjaC5ucik7CisJaWYgKGhzY3gtPmlwLT50eXBlICYgSVBBQ19UWVBFX0lQQUNYKSB7CisJCWlmIChoc2N4LT5iY2gubnIgJiAxKSB7IC8qIEIxIGFuZCBJQ0EgKi8KKwkJCVdyaXRlSVBBQyhoc2N4LT5pcCwgSVNBQ1hfQkNIQV9UU0RQX0JDMSwgMHg4MCk7CisJCQlXcml0ZUlQQUMoaHNjeC0+aXAsIElTQUNYX0JDSEFfQ1IsIDB4ODgpOworCQl9IGVsc2UgeyAvKiBCMiBhbmQgSUNCICovCisJCQlXcml0ZUlQQUMoaHNjeC0+aXAsIElTQUNYX0JDSEJfVFNEUF9CQzEsIDB4ODEpOworCQkJV3JpdGVJUEFDKGhzY3gtPmlwLCBJU0FDWF9CQ0hCX0NSLCAweDg4KTsKKwkJfQorCQlzd2l0Y2ggKGJwcm90b2NvbCkgeworCQljYXNlIElTRE5fUF9OT05FOiAvKiBpbml0ICovCisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ1hfTU9ERUIsIDB4QzApOwkvKiByZWMgb2ZmICovCisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ1hfRVhNQiwgIDB4MzApOwkvKiBzdGQgYWRqLiAqLworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNYX01BU0tCLCAweEZGKTsJLyogaW50cyBvZmYgKi8KKwkJCWhzY3hfY21kcihoc2N4LCAweDQxKTsKKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfSERMQywgJmhzY3gtPmJjaC5GbGFncyk7CisJCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmaHNjeC0+YmNoLkZsYWdzKTsKKwkJCWJyZWFrOworCQljYXNlIElTRE5fUF9CX1JBVzoKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDWF9NT0RFQiwgMHg4OCk7CS8qIGV4IHRyYW5zICovCisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ1hfRVhNQiwgIDB4MDApOwkvKiB0cmFucyAqLworCQkJaHNjeF9jbWRyKGhzY3gsIDB4NDEpOworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNYX01BU0tCLCBJUEFDWF9CX09OKTsKKwkJCXRlc3RfYW5kX3NldF9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmaHNjeC0+YmNoLkZsYWdzKTsKKwkJCWJyZWFrOworCQljYXNlIElTRE5fUF9CX0hETEM6CisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ1hfTU9ERUIsIDB4QzApOwkvKiB0cmFucyAqLworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNYX0VYTUIsICAweDAwKTsJLyogaGRsYyxjcmMgKi8KKwkJCWhzY3hfY21kcihoc2N4LCAweDQxKTsKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDWF9NQVNLQiwgSVBBQ1hfQl9PTik7CisJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19IRExDLCAmaHNjeC0+YmNoLkZsYWdzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJfaW5mbygiJXM6IHByb3RvY29sIG5vdCBrbm93biAleFxuIiwgaHNjeC0+aXAtPm5hbWUsCisJCQkJYnByb3RvY29sKTsKKwkJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisJCX0KKwl9IGVsc2UgaWYgKGhzY3gtPmlwLT50eXBlICYgSVBBQ19UWVBFX0lQQUMpIHsgLyogSVBBQyAqLworCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19DQ1IxLCAweDgyKTsKKwkJV3JpdGVIU0NYKGhzY3gsIElQQUNfQ0NSMiwgMHgzMCk7CisJCVdyaXRlSFNDWChoc2N4LCBJUEFDX1hDQ1IsIDB4MDcpOworCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19SQ0NSLCAweDA3KTsKKwkJV3JpdGVIU0NYKGhzY3gsIElQQUNfVFNBWCwgaHNjeC0+c2xvdCk7CisJCVdyaXRlSFNDWChoc2N4LCBJUEFDX1RTQVIsIGhzY3gtPnNsb3QpOworCQlzd2l0Y2ggKGJwcm90b2NvbCkgeworCQljYXNlIElTRE5fUF9OT05FOgorCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfVFNBWCwgMHgxRik7CisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19UU0FSLCAweDFGKTsKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX01PREVCLCAweDg0KTsKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX0NDUjEsIDB4ODIpOworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfTUFTS0IsIDB4RkYpOwkvKiBpbnRzIG9mZiAqLworCQkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19IRExDLCAmaHNjeC0+YmNoLkZsYWdzKTsKKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfVFJBTlNQQVJFTlQsICZoc2N4LT5iY2guRmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgSVNETl9QX0JfUkFXOgorCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfTU9ERUIsIDB4ZTQpOwkvKiBleCB0cmFucyAqLworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfQ0NSMSwgMHg4Mik7CisJCQloc2N4X2NtZHIoaHNjeCwgMHg0MSk7CisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19NQVNLQiwgMCk7CisJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19UUkFOU1BBUkVOVCwgJmhzY3gtPmJjaC5GbGFncyk7CisJCQlicmVhazsKKwkJY2FzZSBJU0ROX1BfQl9IRExDOgorCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfTU9ERUIsIDB4OGMpOworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfQ0NSMSwgMHg4YSk7CisJCQloc2N4X2NtZHIoaHNjeCwgMHg0MSk7CisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19NQVNLQiwgMCk7CisJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19IRExDLCAmaHNjeC0+YmNoLkZsYWdzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJfaW5mbygiJXM6IHByb3RvY29sIG5vdCBrbm93biAleFxuIiwgaHNjeC0+aXAtPm5hbWUsCisJCQkJYnByb3RvY29sKTsKKwkJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisJCX0KKwl9IGVsc2UgaWYgKGhzY3gtPmlwLT50eXBlICYgSVBBQ19UWVBFX0hTQ1gpIHsgLyogSFNDWCAqLworCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19DQ1IxLCAweDg1KTsKKwkJV3JpdGVIU0NYKGhzY3gsIElQQUNfQ0NSMiwgMHgzMCk7CisJCVdyaXRlSFNDWChoc2N4LCBJUEFDX1hDQ1IsIDB4MDcpOworCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19SQ0NSLCAweDA3KTsKKwkJV3JpdGVIU0NYKGhzY3gsIElQQUNfVFNBWCwgaHNjeC0+c2xvdCk7CisJCVdyaXRlSFNDWChoc2N4LCBJUEFDX1RTQVIsIGhzY3gtPnNsb3QpOworCQlzd2l0Y2ggKGJwcm90b2NvbCkgeworCQljYXNlIElTRE5fUF9OT05FOgorCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfVFNBWCwgMHgxRik7CisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19UU0FSLCAweDFGKTsKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX01PREVCLCAweDg0KTsKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX0NDUjEsIDB4ODUpOworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfTUFTS0IsIDB4RkYpOwkvKiBpbnRzIG9mZiAqLworCQkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19IRExDLCAmaHNjeC0+YmNoLkZsYWdzKTsKKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfVFJBTlNQQVJFTlQsICZoc2N4LT5iY2guRmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgSVNETl9QX0JfUkFXOgorCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfTU9ERUIsIDB4ZTQpOwkvKiBleCB0cmFucyAqLworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfQ0NSMSwgMHg4NSk7CisJCQloc2N4X2NtZHIoaHNjeCwgMHg0MSk7CisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19NQVNLQiwgMCk7CisJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19UUkFOU1BBUkVOVCwgJmhzY3gtPmJjaC5GbGFncyk7CisJCQlicmVhazsKKwkJY2FzZSBJU0ROX1BfQl9IRExDOgorCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfTU9ERUIsIDB4OGMpOworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfQ0NSMSwgMHg4ZCk7CisJCQloc2N4X2NtZHIoaHNjeCwgMHg0MSk7CisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19NQVNLQiwgMCk7CisJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19IRExDLCAmaHNjeC0+YmNoLkZsYWdzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJfaW5mbygiJXM6IHByb3RvY29sIG5vdCBrbm93biAleFxuIiwgaHNjeC0+aXAtPm5hbWUsCisJCQkJYnByb3RvY29sKTsKKwkJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJaHNjeC0+YmNoLnN0YXRlID0gYnByb3RvY29sOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citoc2N4X2wybDEoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGJjaGFubmVsICpiY2ggPSBjb250YWluZXJfb2YoY2gsIHN0cnVjdCBiY2hhbm5lbCwgY2gpOworCXN0cnVjdCBoc2N4X2h3CSpoeCA9IGNvbnRhaW5lcl9vZihiY2gsIHN0cnVjdCBoc2N4X2h3LCBiY2gpOworCWludCByZXQgPSAtRUlOVkFMOworCXN0cnVjdCBtSVNETmhlYWQgKmhoID0gbUlTRE5fSEVBRF9QKHNrYik7CisJdTMyIGlkOworCXVfbG9uZyBmbGFnczsKKworCXN3aXRjaCAoaGgtPnByaW0pIHsKKwljYXNlIFBIX0RBVEFfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZShoeC0+aXAtPmh3bG9jaywgZmxhZ3MpOworCQlyZXQgPSBiY2hhbm5lbF9zZW5kZGF0YShiY2gsIHNrYik7CisJCWlmIChyZXQgPiAwKSB7IC8qIGRpcmVjdCBUWCAqLworCQkJaWQgPSBoaC0+aWQ7IC8qIHNrYiBjYW4gYmUgZnJlZWQgKi8KKwkJCXJldCA9IDA7CisJCQloc2N4X2ZpbGxfZmlmbyhoeCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGh4LT5pcC0+aHdsb2NrLCBmbGFncyk7CisJCQlpZiAoIXRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJmJjaC0+RmxhZ3MpKQorCQkJCXF1ZXVlX2NoX2ZyYW1lKGNoLCBQSF9EQVRBX0NORiwgaWQsIE5VTEwpOworCQl9IGVsc2UKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaHgtPmlwLT5od2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIFBIX0FDVElWQVRFX1JFUToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoaHgtPmlwLT5od2xvY2ssIGZsYWdzKTsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEZMR19BQ1RJVkUsICZiY2gtPkZsYWdzKSkKKwkJCXJldCA9IGhzY3hfbW9kZShoeCwgY2gtPnByb3RvY29sKTsKKwkJZWxzZQorCQkJcmV0ID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShoeC0+aXAtPmh3bG9jaywgZmxhZ3MpOworCQlpZiAoIXJldCkKKwkJCV9xdWV1ZV9kYXRhKGNoLCBQSF9BQ1RJVkFURV9JTkQsIE1JU0ROX0lEX0FOWSwgMCwKKwkJCQlOVUxMLCBHRlBfS0VSTkVMKTsKKwkJYnJlYWs7CisJY2FzZSBQSF9ERUFDVElWQVRFX1JFUToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoaHgtPmlwLT5od2xvY2ssIGZsYWdzKTsKKwkJbUlTRE5fY2xlYXJfYmNoYW5uZWwoYmNoKTsKKwkJaHNjeF9tb2RlKGh4LCBJU0ROX1BfTk9ORSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaHgtPmlwLT5od2xvY2ssIGZsYWdzKTsKKwkJX3F1ZXVlX2RhdGEoY2gsIFBIX0RFQUNUSVZBVEVfSU5ELCBNSVNETl9JRF9BTlksIDAsCisJCQlOVUxMLCBHRlBfS0VSTkVMKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6ICVzIHVua25vd24gcHJpbSgleCwleClcbiIsCisJCQloeC0+aXAtPm5hbWUsIF9fZnVuY19fLCBoaC0+cHJpbSwgaGgtPmlkKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJaWYgKCFyZXQpCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitjaGFubmVsX2JjdHJsKHN0cnVjdCBiY2hhbm5lbCAqYmNoLCBzdHJ1Y3QgbUlTRE5fY3RybF9yZXEgKmNxKQoreworCWludAlyZXQgPSAwOworCisJc3dpdGNoIChjcS0+b3ApIHsKKwljYXNlIE1JU0ROX0NUUkxfR0VUT1A6CisJCWNxLT5vcCA9IDA7CisJCWJyZWFrOworCS8qIE5vdGhpbmcgaW1wbGVtZW50ZWQgeWV0ICovCisJY2FzZSBNSVNETl9DVFJMX0ZJTExfRU1QVFk6CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6IHVua25vd24gT3AgJXhcbiIsIF9fZnVuY19fLCBjcS0+b3ApOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAoraHNjeF9iY3RybChzdHJ1Y3QgbUlTRE5jaGFubmVsICpjaCwgdTMyIGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBiY2hhbm5lbCAqYmNoID0gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgYmNoYW5uZWwsIGNoKTsKKwlzdHJ1Y3QgaHNjeF9odwkqaHggPSBjb250YWluZXJfb2YoYmNoLCBzdHJ1Y3QgaHNjeF9odywgYmNoKTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwl1X2xvbmcgZmxhZ3M7CisKKwlwcl9kZWJ1ZygiJXM6ICVzIGNtZDoleCAlcFxuIiwgaHgtPmlwLT5uYW1lLCBfX2Z1bmNfXywgY21kLCBhcmcpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBDTE9TRV9DSEFOTkVMOgorCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX09QRU4sICZiY2gtPkZsYWdzKTsKKwkJaWYgKHRlc3RfYml0KEZMR19BQ1RJVkUsICZiY2gtPkZsYWdzKSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoaHgtPmlwLT5od2xvY2ssIGZsYWdzKTsKKwkJCW1JU0ROX2ZyZWViY2hhbm5lbChiY2gpOworCQkJaHNjeF9tb2RlKGh4LCBJU0ROX1BfTk9ORSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGh4LT5pcC0+aHdsb2NrLCBmbGFncyk7CisJCX0gZWxzZSB7CisJCQlza2JfcXVldWVfcHVyZ2UoJmJjaC0+cnF1ZXVlKTsKKwkJCWJjaC0+cmNvdW50ID0gMDsKKwkJfQorCQljaC0+cHJvdG9jb2wgPSBJU0ROX1BfTk9ORTsKKwkJY2gtPnBlZXIgPSBOVUxMOworCQltb2R1bGVfcHV0KGh4LT5pcC0+b3duZXIpOworCQlyZXQgPSAwOworCQlicmVhazsKKwljYXNlIENPTlRST0xfQ0hBTk5FTDoKKwkJcmV0ID0gY2hhbm5lbF9iY3RybChiY2gsIGFyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiAlcyB1bmtub3duIHByaW0oJXgpXG4iLAorCQkJaHgtPmlwLT5uYW1lLCBfX2Z1bmNfXywgY21kKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2ZyZWVfaXBhYyhzdHJ1Y3QgaXBhY19odyAqaXBhYykKK3sKKwlpc2FjX3JlbGVhc2UoJmlwYWMtPmlzYWMpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqSFNDWFZlcltdID0KK3siQTEiLCAiPzEiLCAiQTIiLCAiPzMiLCAiQTMiLCAiVjIuMSIsICI/NiIsICI/NyIsCisgIj84IiwgIj85IiwgIj8xMCIsICI/MTEiLCAiPzEyIiwgIj8xMyIsICI/MTQiLCAiPz8/In07CisKKworCitzdGF0aWMgdm9pZAoraHNjeF9pbml0KHN0cnVjdCBoc2N4X2h3ICpoeCkKK3sKKwl1OCB2YWw7CisKKwlXcml0ZUhTQ1goaHgsIElQQUNfUkFIMiwgMHhGRik7CisJV3JpdGVIU0NYKGh4LCBJUEFDX1hCQ0gsIDB4MDApOworCVdyaXRlSFNDWChoeCwgSVBBQ19STENSLCAweDAwKTsKKworCWlmIChoeC0+aXAtPnR5cGUgJiBJUEFDX1RZUEVfSFNDWCkgeworCQlXcml0ZUhTQ1goaHgsIElQQUNfQ0NSMSwgMHg4NSk7CisJCXZhbCA9IFJlYWRIU0NYKGh4LCBIU0NYX1ZTVFIpOworCQlwcl9kZWJ1ZygiJXM6IEhTQ1ggVlNUUiAlMDJ4XG4iLCBoeC0+aXAtPm5hbWUsIHZhbCk7CisJCWlmIChoeC0+YmNoLmRlYnVnICYgREVCVUdfSFcpCisJCQlwcl9ub3RpY2UoIiVzOiBIU0NYIHZlcnNpb24gJXNcbiIsIGh4LT5pcC0+bmFtZSwKKwkJCQlIU0NYVmVyW3ZhbCAmIDB4MGZdKTsKKwl9IGVsc2UKKwkJV3JpdGVIU0NYKGh4LCBJUEFDX0NDUjEsIDB4ODIpOworCVdyaXRlSFNDWChoeCwgSVBBQ19DQ1IyLCAweDMwKTsKKwlXcml0ZUhTQ1goaHgsIElQQUNfWENDUiwgMHgwNyk7CisJV3JpdGVIU0NYKGh4LCBJUEFDX1JDQ1IsIDB4MDcpOworfQorCitzdGF0aWMgaW50CitpcGFjX2luaXQoc3RydWN0IGlwYWNfaHcgKmlwYWMpCit7CisJdTggdmFsOworCisJaWYgKGlwYWMtPnR5cGUgJiBJUEFDX1RZUEVfSFNDWCkgeworCQloc2N4X2luaXQoJmlwYWMtPmhzY3hbMF0pOworCQloc2N4X2luaXQoJmlwYWMtPmhzY3hbMV0pOworCQl2YWwgPSBSZWFkSVBBQyhpcGFjLCBJUEFDX0lEKTsKKwl9IGVsc2UgaWYgKGlwYWMtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQykgeworCQloc2N4X2luaXQoJmlwYWMtPmhzY3hbMF0pOworCQloc2N4X2luaXQoJmlwYWMtPmhzY3hbMV0pOworCQlXcml0ZUlQQUMoaXBhYywgSVBBQ19NQVNLLCBJUEFDX19PTik7CisJCXZhbCA9IFJlYWRJUEFDKGlwYWMsIElQQUNfQ09ORik7CisJCS8qIGNvbmYgaXMgZGVmYXVsdCAwLCBidXQgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IGNhcmQgc2V0dXAgKi8KKwkJcHJfZGVidWcoIiVzOiBJUEFDIENPTkYgJTAyeC8lMDJ4XG4iLCBpcGFjLT5uYW1lLAorCQkJdmFsLCBpcGFjLT5jb25mKTsKKwkJV3JpdGVJUEFDKGlwYWMsIElQQUNfQ09ORiwgaXBhYy0+Y29uZik7CisJCXZhbCA9IFJlYWRJUEFDKGlwYWMsIElQQUNfSUQpOworCQlpZiAoaXBhYy0+aHNjeFswXS5iY2guZGVidWcgJiBERUJVR19IVykKKwkJCXByX25vdGljZSgiJXM6IElQQUMgRGVzaWduIElEICUwMnhcbiIsIGlwYWMtPm5hbWUsIHZhbCk7CisJfQorCS8qIG5vdGhpbmcgc3BlY2lhbCBmb3IgSVBBQ1ggdG8gZG8gaGVyZSAqLworCXJldHVybiBpc2FjX2luaXQoJmlwYWMtPmlzYWMpOworfQorCitzdGF0aWMgaW50CitvcGVuX2JjaGFubmVsKHN0cnVjdCBpcGFjX2h3ICppcGFjLCBzdHJ1Y3QgY2hhbm5lbF9yZXEgKnJxKQoreworCXN0cnVjdCBiY2hhbm5lbAkJKmJjaDsKKworCWlmIChycS0+YWRyLmNoYW5uZWwgPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocnEtPnByb3RvY29sID09IElTRE5fUF9OT05FKQorCQlyZXR1cm4gLUVJTlZBTDsKKwliY2ggPSAmaXBhYy0+aHNjeFtycS0+YWRyLmNoYW5uZWwgLSAxXS5iY2g7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoRkxHX09QRU4sICZiY2gtPkZsYWdzKSkKKwkJcmV0dXJuIC1FQlVTWTsgLyogYi1jaGFubmVsIGNhbiBiZSBvbmx5IG9wZW4gb25jZSAqLworCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfRklMTEVNUFRZLCAmYmNoLT5GbGFncyk7CisJYmNoLT5jaC5wcm90b2NvbCA9IHJxLT5wcm90b2NvbDsKKwlycS0+Y2ggPSAmYmNoLT5jaDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY2hhbm5lbF9jdHJsKHN0cnVjdCBpcGFjX2h3ICppcGFjLCBzdHJ1Y3QgbUlTRE5fY3RybF9yZXEgKmNxKQoreworCWludAlyZXQgPSAwOworCisJc3dpdGNoIChjcS0+b3ApIHsKKwljYXNlIE1JU0ROX0NUUkxfR0VUT1A6CisJCWNxLT5vcCA9IE1JU0ROX0NUUkxfTE9PUDsKKwkJYnJlYWs7CisJY2FzZSBNSVNETl9DVFJMX0xPT1A6CisJCS8qIGNxLT5jaGFubmVsOiAwIGRpc2FibGUsIDEgQjEgbG9vcCAyIEIyIGxvb3AsIDMgYm90aCAqLworCQlpZiAoY3EtPmNoYW5uZWwgPCAwIHx8IGNxLT5jaGFubmVsID4gMykgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IGlwYWMtPmN0cmwoaXBhYywgSFdfVEVTVExPT1AsIGNxLT5jaGFubmVsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6IHVua25vd24gQ1RSTCBPUCAleFxuIiwgaXBhYy0+bmFtZSwgY3EtPm9wKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2lwYWNfZGN0cmwoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHUzMiBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbUlTRE5kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihjaCwgc3RydWN0IG1JU0ROZGV2aWNlLCBEKTsKKwlzdHJ1Y3QgZGNoYW5uZWwgKmRjaCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkY2hhbm5lbCwgZGV2KTsKKwlzdHJ1Y3QgaXNhY19odyAqaXNhYyA9IGNvbnRhaW5lcl9vZihkY2gsIHN0cnVjdCBpc2FjX2h3LCBkY2gpOworCXN0cnVjdCBpcGFjX2h3ICppcGFjID0gY29udGFpbmVyX29mKGlzYWMsIHN0cnVjdCBpcGFjX2h3LCBpc2FjKTsKKwlzdHJ1Y3QgY2hhbm5lbF9yZXEgKnJxOworCWludCBlcnIgPSAwOworCisJcHJfZGVidWcoIiVzOiBEQ1RSTDogJXggJXBcbiIsIGlwYWMtPm5hbWUsIGNtZCwgYXJnKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgT1BFTl9DSEFOTkVMOgorCQlycSA9IGFyZzsKKwkJaWYgKHJxLT5wcm90b2NvbCA9PSBJU0ROX1BfVEVfUzApCisJCQllcnIgPSBvcGVuX2RjaGFubmVsKGlzYWMsIHJxKTsKKwkJZWxzZQorCQkJZXJyID0gb3Blbl9iY2hhbm5lbChpcGFjLCBycSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwkJaWYgKCF0cnlfbW9kdWxlX2dldChpcGFjLT5vd25lcikpCisJCQlwcl9pbmZvKCIlczogY2Fubm90IGdldCBtb2R1bGVcbiIsIGlwYWMtPm5hbWUpOworCQlicmVhazsKKwljYXNlIENMT1NFX0NIQU5ORUw6CisJCXByX2RlYnVnKCIlczogZGV2KCVkKSBjbG9zZSBmcm9tICVwXG4iLCBpcGFjLT5uYW1lLAorCQkJZGNoLT5kZXYuaWQsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJCW1vZHVsZV9wdXQoaXBhYy0+b3duZXIpOworCQlicmVhazsKKwljYXNlIENPTlRST0xfQ0hBTk5FTDoKKwkJZXJyID0gY2hhbm5lbF9jdHJsKGlwYWMsIGFyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCIlczogdW5rbm93biBEQ1RSTCBjb21tYW5kICV4XG4iLCBpcGFjLT5uYW1lLCBjbWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIGVycjsKK30KKwordTMyCittSVNETmlwYWNfaW5pdChzdHJ1Y3QgaXBhY19odyAqaXBhYywgdm9pZCAqaHcpCit7CisJdTMyIHJldDsKKwl1OCBpOworCisJaXBhYy0+aHcgPSBodzsKKwlpZiAoaXBhYy0+aXNhYy5kY2guZGVidWcgJiBERUJVR19IVykKKwkJcHJfbm90aWNlKCIlczogaXBhYyB0eXBlICV4XG4iLCBpcGFjLT5uYW1lLCBpcGFjLT50eXBlKTsKKwlpZiAoaXBhYy0+dHlwZSAmIElQQUNfVFlQRV9IU0NYKSB7CisJCWlwYWMtPmlzYWMudHlwZSA9IElQQUNfVFlQRV9JU0FDOworCQlpcGFjLT5oc2N4WzBdLm9mZiA9IDA7CisJCWlwYWMtPmhzY3hbMV0ub2ZmID0gMHg0MDsKKwkJaXBhYy0+aHNjeFswXS5maWZvX3NpemUgPSAzMjsKKwkJaXBhYy0+aHNjeFsxXS5maWZvX3NpemUgPSAzMjsKKwl9IGVsc2UgaWYgKGlwYWMtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQykgeworCQlpcGFjLT5pc2FjLnR5cGUgPSBJUEFDX1RZUEVfSVBBQyB8IElQQUNfVFlQRV9JU0FDOworCQlpcGFjLT5oc2N4WzBdLm9mZiA9IDA7CisJCWlwYWMtPmhzY3hbMV0ub2ZmID0gMHg0MDsKKwkJaXBhYy0+aHNjeFswXS5maWZvX3NpemUgPSA2NDsKKwkJaXBhYy0+aHNjeFsxXS5maWZvX3NpemUgPSA2NDsKKwl9IGVsc2UgaWYgKGlwYWMtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQ1gpIHsKKwkJaXBhYy0+aXNhYy50eXBlID0gSVBBQ19UWVBFX0lQQUNYIHwgSVBBQ19UWVBFX0lTQUNYOworCQlpcGFjLT5oc2N4WzBdLm9mZiA9IElQQUNYX09GRl9JQ0E7CisJCWlwYWMtPmhzY3hbMV0ub2ZmID0gSVBBQ1hfT0ZGX0lDQjsKKwkJaXBhYy0+aHNjeFswXS5maWZvX3NpemUgPSA2NDsKKwkJaXBhYy0+aHNjeFsxXS5maWZvX3NpemUgPSA2NDsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7CisKKwltSVNETmlzYWNfaW5pdCgmaXBhYy0+aXNhYywgaHcpOworCisJaXBhYy0+aXNhYy5kY2guZGV2LkQuY3RybCA9IGlwYWNfZGN0cmw7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlwYWMtPmhzY3hbaV0uYmNoLm5yID0gaSArIDE7CisJCXNldF9jaGFubmVsbWFwKGkgKyAxLCBpcGFjLT5pc2FjLmRjaC5kZXYuY2hhbm5lbG1hcCk7CisJCWxpc3RfYWRkKCZpcGFjLT5oc2N4W2ldLmJjaC5jaC5saXN0LAorCQkJJmlwYWMtPmlzYWMuZGNoLmRldi5iY2hhbm5lbHMpOworCQltSVNETl9pbml0YmNoYW5uZWwoJmlwYWMtPmhzY3hbaV0uYmNoLCBNQVhfREFUQV9NRU0pOworCQlpcGFjLT5oc2N4W2ldLmJjaC5jaC5uciA9IGkgKyAxOworCQlpcGFjLT5oc2N4W2ldLmJjaC5jaC5zZW5kID0gJmhzY3hfbDJsMTsKKwkJaXBhYy0+aHNjeFtpXS5iY2guY2guY3RybCA9IGhzY3hfYmN0cmw7CisJCWlwYWMtPmhzY3hbaV0uYmNoLmh3ID0gaHc7CisJCWlwYWMtPmhzY3hbaV0uaXAgPSBpcGFjOworCQkvKiBkZWZhdWx0IHZhbHVlcyBmb3IgSU9NIHRpbWUgc2xvdHMKKwkJICogY2FuIGJlIG92ZXJ3cml0ZW4gYnkgY2FyZCAqLworCQlpcGFjLT5oc2N4W2ldLnNsb3QgPSAoaSA9PSAwKSA/IDB4MmYgOiAweDAzOworCX0KKworCWlwYWMtPmluaXQgPSBpcGFjX2luaXQ7CisJaXBhYy0+cmVsZWFzZSA9IGZyZWVfaXBhYzsKKworCXJldCA9CSgxIDw8IChJU0ROX1BfQl9SQVcgJiBJU0ROX1BfQl9NQVNLKSkgfAorCQkoMSA8PCAoSVNETl9QX0JfSERMQyAmIElTRE5fUF9CX01BU0spKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChtSVNETmlwYWNfaW5pdCk7CisKK3N0YXRpYyBpbnQgX19pbml0Citpc2FjX21vZF9pbml0KHZvaWQpCit7CisJcHJfbm90aWNlKCJtSVNETmlwYWMgbW9kdWxlIHZlcnNpb24gJXNcbiIsIElTQUNfUkVWKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0Citpc2FjX21vZF9jbGVhbnVwKHZvaWQpCit7CisJcHJfbm90aWNlKCJtSVNETmlwYWMgbW9kdWxlIHVubG9hZGVkXG4iKTsKK30KK21vZHVsZV9pbml0KGlzYWNfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoaXNhY19tb2RfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pc2FyLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pc2FyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUzNTJhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmlzYXIuYwpAQCAtMCwwICsxLDE3MjYgQEAKKy8qCisgKiBtSVNETmlzYXIuYyAgIElTQVIgKFNpZW1lbnMgUFNCIDcxMTApIHNwZWNpZmljIGZ1bmN0aW9ucworICoKKyAqIEF1dGhvciBLYXJzdGVuIEtlaWwgKGtlaWxAaXNkbjRsaW51eC5kZSkKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSAgYnkgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKy8qIGRlZmluZSB0aGlzIHRvIGVuYWJsZSBzdGF0aWMgZGVidWcgbWVzc2FnZXMsIGlmIHlvdSBrZXJuZWwgc3VwcG9ydHMKKyAqIGR5bmFtaWMgZGVidWdnaW5nLCB5b3Ugc2hvdWxkIHVzZSBkZWJ1Z2ZzIGZvciB0aGlzCisgKi8KKy8qICNkZWZpbmUgREVCVUcgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L21JU0ROaHcuaD4KKyNpbmNsdWRlICJpc2FyLmgiCisKKyNkZWZpbmUgSVNBUl9SRVYJIjIuMSIKKworTU9EVUxFX0FVVEhPUigiS2Fyc3RlbiBLZWlsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfVkVSU0lPTihJU0FSX1JFVik7CisKKyNkZWZpbmUgREVCVUdfSFdfRklSTVdBUkVfRklGTwkweDEwMDAwCisKK3N0YXRpYyBjb25zdCB1OCBmYXhtb2R1bGF0aW9uX3NbXSA9ICIzLDI0LDQ4LDcyLDczLDc0LDk2LDk3LDk4LDEyMSwxMjIsMTQ1LDE0NiI7CitzdGF0aWMgY29uc3QgdTggZmF4bW9kdWxhdGlvbltdID0gezMsIDI0LCA0OCwgNzIsIDczLCA3NCwgOTYsIDk3LCA5OCwgMTIxLAorCQkJCQkxMjIsIDE0NSwgMTQ2fTsKKyNkZWZpbmUgRkFYTU9EQ05UIDEzCisKK3N0YXRpYyB2b2lkIGlzYXJfc2V0dXAoc3RydWN0IGlzYXJfaHcgKik7CisKK3N0YXRpYyBpbmxpbmUgaW50Cit3YWl0Zm9ySElBKHN0cnVjdCBpc2FyX2h3ICppc2FyLCBpbnQgdGltZW91dCkKK3sKKwlpbnQgdCA9IHRpbWVvdXQ7CisJdTggdmFsID0gaXNhci0+cmVhZF9yZWcoaXNhci0+aHcsIElTQVJfSElBKTsKKworCXdoaWxlICgodmFsICYgMSkgJiYgdCkgeworCQl1ZGVsYXkoMSk7CisJCXQtLTsKKwkJdmFsID0gaXNhci0+cmVhZF9yZWcoaXNhci0+aHcsIElTQVJfSElBKTsKKwl9CisJcHJfZGVidWcoIiVzOiBISUEgYWZ0ZXIgJWR1c1xuIiwgaXNhci0+bmFtZSwgdGltZW91dCAtIHQpOworCXJldHVybiB0aW1lb3V0OworfQorCisvKgorICogc2VuZCBtc2cgdG8gSVNBUiBtYWlsYm94CisgKiBpZiBtc2cgaXMgTlVMTCB1c2UgaXNhci0+YnVmCisgKi8KK3N0YXRpYyBpbnQKK3NlbmRfbWJveChzdHJ1Y3QgaXNhcl9odyAqaXNhciwgdTggaGlzLCB1OCBjcmVnLCB1OCBsZW4sIHU4ICptc2cpCit7CisJaWYgKCF3YWl0Zm9ySElBKGlzYXIsIDEwMDApKQorCQlyZXR1cm4gMDsKKwlwcl9kZWJ1Zygic2VuZF9tYm94KCUwMngsJTAyeCwlZClcbiIsIGhpcywgY3JlZywgbGVuKTsKKwlpc2FyLT53cml0ZV9yZWcoaXNhci0+aHcsIElTQVJfQ1RSTF9ILCBjcmVnKTsKKwlpc2FyLT53cml0ZV9yZWcoaXNhci0+aHcsIElTQVJfQ1RSTF9MLCBsZW4pOworCWlzYXItPndyaXRlX3JlZyhpc2FyLT5odywgSVNBUl9XQURSLCAwKTsKKwlpZiAoIW1zZykKKwkJbXNnID0gaXNhci0+YnVmOworCWlmIChtc2cgJiYgbGVuKSB7CisJCWlzYXItPndyaXRlX2ZpZm8oaXNhci0+aHcsIElTQVJfTUJPWCwgbXNnLCBsZW4pOworCQlpZiAoaXNhci0+Y2hbMF0uYmNoLmRlYnVnICYgREVCVUdfSFdfQkZJRk8pIHsKKwkJCWludCBsID0gMDsKKworCQkJd2hpbGUgKGwgPCAoaW50KWxlbikgeworCQkJCWhleF9kdW1wX3RvX2J1ZmZlcihtc2cgKyBsLCBsZW4gLSBsLCAzMiwgMSwKKwkJCQkJaXNhci0+bG9nLCAyNTYsIDEpOworCQkJCXByX2RlYnVnKCIlczogJXMgJTAyeDogJXNcbiIsIGlzYXItPm5hbWUsCisJCQkJCV9fZnVuY19fLCBsLCBpc2FyLT5sb2cpOworCQkJCWwgKz0gMzI7CisJCQl9CisJCX0KKwl9CisJaXNhci0+d3JpdGVfcmVnKGlzYXItPmh3LCBJU0FSX0hJUywgaGlzKTsKKwl3YWl0Zm9ySElBKGlzYXIsIDEwMDApOworCXJldHVybiAxOworfQorCisvKgorICogcmVjZWl2ZSBtZXNzYWdlIGZyb20gSVNBUiBtYWlsYm94CisgKiBpZiBtc2cgaXMgTlVMTCB1c2UgaXNhci0+YnVmCisgKi8KK3N0YXRpYyB2b2lkCityY3ZfbWJveChzdHJ1Y3QgaXNhcl9odyAqaXNhciwgdTggKm1zZykKK3sKKwlpZiAoIW1zZykKKwkJbXNnID0gaXNhci0+YnVmOworCWlzYXItPndyaXRlX3JlZyhpc2FyLT5odywgSVNBUl9SQURSLCAwKTsKKwlpZiAobXNnICYmIGlzYXItPmNsc2IpIHsKKwkJaXNhci0+cmVhZF9maWZvKGlzYXItPmh3LCBJU0FSX01CT1gsIG1zZywgaXNhci0+Y2xzYik7CisJCWlmIChpc2FyLT5jaFswXS5iY2guZGVidWcgJiBERUJVR19IV19CRklGTykgeworCQkJaW50IGwgPSAwOworCisJCQl3aGlsZSAobCA8IChpbnQpaXNhci0+Y2xzYikgeworCQkJCWhleF9kdW1wX3RvX2J1ZmZlcihtc2cgKyBsLCBpc2FyLT5jbHNiIC0gbCwgMzIsCisJCQkJCTEsIGlzYXItPmxvZywgMjU2LCAxKTsKKwkJCQlwcl9kZWJ1ZygiJXM6ICVzICUwMng6ICVzXG4iLCBpc2FyLT5uYW1lLAorCQkJCQlfX2Z1bmNfXywgbCwgaXNhci0+bG9nKTsKKwkJCQlsICs9IDMyOworCQkJfQorCQl9CisJfQorCWlzYXItPndyaXRlX3JlZyhpc2FyLT5odywgSVNBUl9JSUEsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2dldF9pcnFfaW5mb3Moc3RydWN0IGlzYXJfaHcgKmlzYXIpCit7CisJaXNhci0+aWlzID0gaXNhci0+cmVhZF9yZWcoaXNhci0+aHcsIElTQVJfSUlTKTsKKwlpc2FyLT5jbXNiID0gaXNhci0+cmVhZF9yZWcoaXNhci0+aHcsIElTQVJfQ1RSTF9IKTsKKwlpc2FyLT5jbHNiID0gaXNhci0+cmVhZF9yZWcoaXNhci0+aHcsIElTQVJfQ1RSTF9MKTsKKwlwcl9kZWJ1ZygiJXM6IHJjdl9tYm94KCUwMngsJTAyeCwlZClcbiIsIGlzYXItPm5hbWUsCisJCWlzYXItPmlpcywgaXNhci0+Y21zYiwgaXNhci0+Y2xzYik7Cit9CisKKy8qCisgKiBwb2xsIGFuc3dlciBtZXNzYWdlIGZyb20gSVNBUiBtYWlsYm94CisgKiBzaG91bGQgYmUgdXNlZCBvbmx5IHdpdGggSVNBUiBJUlFzIGRpc2FibGVkIGJlZm9yZSBEU1Agd2FzIHN0YXJ0ZWQKKyAqCisgKi8KK3N0YXRpYyBpbnQKK3BvbGxfbWJveChzdHJ1Y3QgaXNhcl9odyAqaXNhciwgaW50IG1heGRlbGF5KQoreworCWludCB0ID0gbWF4ZGVsYXk7CisJdTggaXJxOworCisJaXJxID0gaXNhci0+cmVhZF9yZWcoaXNhci0+aHcsIElTQVJfSVJRQklUKTsKKwl3aGlsZSAodCAmJiAhKGlycSAmIElTQVJfSVJRU1RBKSkgeworCQl1ZGVsYXkoMSk7CisJCXQtLTsKKwl9CisJaWYgKHQpCXsKKwkJZ2V0X2lycV9pbmZvcyhpc2FyKTsKKwkJcmN2X21ib3goaXNhciwgTlVMTCk7CisJfQorCXByX2RlYnVnKCIlczogcHVsbGVkICVkIGJ5dGVzIGFmdGVyICVkIHVzXG4iLAorCQlpc2FyLT5uYW1lLCBpc2FyLT5jbHNiLCBtYXhkZWxheSAtIHQpOworCXJldHVybiB0OworfQorCitzdGF0aWMgaW50CitJU0FSVmVyc2lvbihzdHJ1Y3QgaXNhcl9odyAqaXNhcikKK3sKKwlpbnQgdmVyOworCisJLyogZGlzYWJsZSBJU0FSIElSUSAqLworCWlzYXItPndyaXRlX3JlZyhpc2FyLT5odywgSVNBUl9JUlFCSVQsIDApOworCWlzYXItPmJ1ZlswXSA9IElTQVJfTVNHX0hXVkVSOworCWlzYXItPmJ1ZlsxXSA9IDA7CisJaXNhci0+YnVmWzJdID0gMTsKKwlpZiAoIXNlbmRfbWJveChpc2FyLCBJU0FSX0hJU19WTlIsIDAsIDMsIE5VTEwpKQorCQlyZXR1cm4gLTE7CisJaWYgKCFwb2xsX21ib3goaXNhciwgMTAwMCkpCisJCXJldHVybiAtMjsKKwlpZiAoaXNhci0+aWlzID09IElTQVJfSUlTX1ZOUikgeworCQlpZiAoaXNhci0+Y2xzYiA9PSAxKSB7CisJCQl2ZXIgPSBpc2FyLT5idWZbMF0gJiAweGY7CisJCQlyZXR1cm4gdmVyOworCQl9CisJCXJldHVybiAtMzsKKwl9CisJcmV0dXJuIC00OworfQorCitzdGF0aWMgaW50Citsb2FkX2Zpcm13YXJlKHN0cnVjdCBpc2FyX2h3ICppc2FyLCBjb25zdCB1OCAqYnVmLCBpbnQgc2l6ZSkKK3sKKwl1MzIJc2F2ZWRfZGVidWcgPSBpc2FyLT5jaFswXS5iY2guZGVidWc7CisJaW50CXJldCwgY250OworCXU4CW5vbSwgbm9jOworCXUxNglsZWZ0LCB2YWwsICpzcCA9ICh1MTYgKilidWY7CisJdTgJKm1wOworCXVfbG9uZwlmbGFnczsKKworCXN0cnVjdCB7CisJCXUxNiBzYWRyOworCQl1MTYgbGVuOworCQl1MTYgZF9rZXk7CisJfSBibGtfaGVhZDsKKworCWlmICgxICE9IGlzYXItPnZlcnNpb24pIHsKKwkJcHJfZXJyKCIlczogSVNBUiB3cm9uZyB2ZXJzaW9uICVkIGZpcm13YXJlIGRvd25sb2FkIGFib3J0ZWRcbiIsCisJCQlpc2FyLT5uYW1lLCBpc2FyLT52ZXJzaW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghKHNhdmVkX2RlYnVnICYgREVCVUdfSFdfRklSTVdBUkVfRklGTykpCisJCWlzYXItPmNoWzBdLmJjaC5kZWJ1ZyAmPSB+REVCVUdfSFdfQkZJRk87CisJcHJfZGVidWcoIiVzOiBsb2FkIGZpcm13YXJlICVkIHdvcmRzICglZCBieXRlcylcbiIsCisJCWlzYXItPm5hbWUsIHNpemUvMiwgc2l6ZSk7CisJY250ID0gMDsKKwlzaXplIC89IDI7CisJLyogZGlzYWJsZSBJU0FSIElSUSAqLworCXNwaW5fbG9ja19pcnFzYXZlKGlzYXItPmh3bG9jaywgZmxhZ3MpOworCWlzYXItPndyaXRlX3JlZyhpc2FyLT5odywgSVNBUl9JUlFCSVQsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaXNhci0+aHdsb2NrLCBmbGFncyk7CisJd2hpbGUgKGNudCA8IHNpemUpIHsKKwkJYmxrX2hlYWQuc2FkciA9IGxlMTZfdG9fY3B1KCpzcCsrKTsKKwkJYmxrX2hlYWQubGVuID0gbGUxNl90b19jcHUoKnNwKyspOworCQlibGtfaGVhZC5kX2tleSA9IGxlMTZfdG9fY3B1KCpzcCsrKTsKKwkJY250ICs9IDM7CisJCXByX2RlYnVnKCJJU0FSIGZpcm13YXJlIGJsb2NrICglI3gsJWQsJSN4KVxuIiwKKwkJCWJsa19oZWFkLnNhZHIsIGJsa19oZWFkLmxlbiwgYmxrX2hlYWQuZF9rZXkgJiAweGZmKTsKKwkJbGVmdCA9IGJsa19oZWFkLmxlbjsKKwkJaWYgKGNudCArIGxlZnQgPiBzaXplKSB7CisJCQlwcl9pbmZvKCIlczogZmlybXdhcmUgZXJyb3IgaGF2ZSAlZCBuZWVkICVkIHdvcmRzXG4iLAorCQkJCWlzYXItPm5hbWUsIHNpemUsIGNudCArIGxlZnQpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gcmV0ZXJyZmxnOworCQl9CisJCXNwaW5fbG9ja19pcnFzYXZlKGlzYXItPmh3bG9jaywgZmxhZ3MpOworCQlpZiAoIXNlbmRfbWJveChpc2FyLCBJU0FSX0hJU19ES0VZLCBibGtfaGVhZC5kX2tleSAmIDB4ZmYsCisJCSAgICAwLCBOVUxMKSkgeworCQkJcHJfaW5mbygiSVNBUiBzZW5kX21ib3ggZGtleSBmYWlsZWRcbiIpOworCQkJcmV0ID0gLUVUSU1FOworCQkJZ290byByZXRlcnJvcjsKKwkJfQorCQlpZiAoIXBvbGxfbWJveChpc2FyLCAxMDAwKSkgeworCQkJcHJfd2FybmluZygiSVNBUiBwb2xsX21ib3ggZGtleSBmYWlsZWRcbiIpOworCQkJcmV0ID0gLUVUSU1FOworCQkJZ290byByZXRlcnJvcjsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlzYXItPmh3bG9jaywgZmxhZ3MpOworCQlpZiAoKGlzYXItPmlpcyAhPSBJU0FSX0lJU19ES0VZKSB8fCBpc2FyLT5jbXNiIHx8IGlzYXItPmNsc2IpIHsKKwkJCXByX2luZm8oIklTQVIgd3JvbmcgZGtleSByZXNwb25zZSAoJXgsJXgsJXgpXG4iLAorCQkJCWlzYXItPmlpcywgaXNhci0+Y21zYiwgaXNhci0+Y2xzYik7CisJCQlyZXQgPSAxOworCQkJZ290byByZXRlcnJmbGc7CisJCX0KKwkJd2hpbGUgKGxlZnQgPiAwKSB7CisJCQlpZiAobGVmdCA+IDEyNikKKwkJCQlub2MgPSAxMjY7CisJCQllbHNlCisJCQkJbm9jID0gbGVmdDsKKwkJCW5vbSA9ICgyICogbm9jKSArIDM7CisJCQltcCAgPSBpc2FyLT5idWY7CisJCQkvKiB0aGUgSVNBUiBpcyBiaWcgZW5kaWFuICovCisJCQkqbXArKyA9IGJsa19oZWFkLnNhZHIgPj4gODsKKwkJCSptcCsrID0gYmxrX2hlYWQuc2FkciAmIDB4RkY7CisJCQlsZWZ0IC09IG5vYzsKKwkJCWNudCArPSBub2M7CisJCQkqbXArKyA9IG5vYzsKKwkJCXByX2RlYnVnKCIlczogbG9hZCAlM2Qgd29yZHMgYXQgJTA0eFxuIiwgaXNhci0+bmFtZSwKKwkJCQlub2MsIGJsa19oZWFkLnNhZHIpOworCQkJYmxrX2hlYWQuc2FkciArPSBub2M7CisJCQl3aGlsZSAobm9jKSB7CisJCQkJdmFsID0gbGUxNl90b19jcHUoKnNwKyspOworCQkJCSptcCsrID0gdmFsID4+IDg7CisJCQkJKm1wKysgPSB2YWwgJiAweEZGOzsKKwkJCQlub2MtLTsKKwkJCX0KKwkJCXNwaW5fbG9ja19pcnFzYXZlKGlzYXItPmh3bG9jaywgZmxhZ3MpOworCQkJaWYgKCFzZW5kX21ib3goaXNhciwgSVNBUl9ISVNfRklSTSwgMCwgbm9tLCBOVUxMKSkgeworCQkJCXByX2luZm8oIklTQVIgc2VuZF9tYm94IHByb2cgZmFpbGVkXG4iKTsKKwkJCQlyZXQgPSAtRVRJTUU7CisJCQkJZ290byByZXRlcnJvcjsKKwkJCX0KKwkJCWlmICghcG9sbF9tYm94KGlzYXIsIDEwMDApKSB7CisJCQkJcHJfaW5mbygiSVNBUiBwb2xsX21ib3ggcHJvZyBmYWlsZWRcbiIpOworCQkJCXJldCA9IC1FVElNRTsKKwkJCQlnb3RvIHJldGVycm9yOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKKwkJCWlmICgoaXNhci0+aWlzICE9IElTQVJfSUlTX0ZJUk0pIHx8CisJCQkgICAgaXNhci0+Y21zYiB8fCBpc2FyLT5jbHNiKSB7CisJCQkJcHJfaW5mbygiSVNBUiB3cm9uZyBwcm9nIHJlc3BvbnNlICgleCwleCwleClcbiIsCisJCQkJCWlzYXItPmlpcywgaXNhci0+Y21zYiwgaXNhci0+Y2xzYik7CisJCQkJcmV0ID0gLUVJTzsKKwkJCQlnb3RvIHJldGVycmZsZzsKKwkJCX0KKwkJfQorCQlwcl9kZWJ1ZygiJXM6IElTQVIgZmlybXdhcmUgYmxvY2sgJWQgd29yZHMgbG9hZGVkXG4iLAorCQkJaXNhci0+bmFtZSwgYmxrX2hlYWQubGVuKTsKKwl9CisJaXNhci0+Y2hbMF0uYmNoLmRlYnVnID0gc2F2ZWRfZGVidWc7CisJLyogMTBtcyBkZWxheSAqLworCWNudCA9IDEwOworCXdoaWxlIChjbnQtLSkKKwkJbWRlbGF5KDEpOworCWlzYXItPmJ1ZlswXSA9IDB4ZmY7CisJaXNhci0+YnVmWzFdID0gMHhmZTsKKwlpc2FyLT5ic3RhdCA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoaXNhci0+aHdsb2NrLCBmbGFncyk7CisJaWYgKCFzZW5kX21ib3goaXNhciwgSVNBUl9ISVNfU1REU1AsIDAsIDIsIE5VTEwpKSB7CisJCXByX2luZm8oIklTQVIgc2VuZF9tYm94IHN0YXJ0IGRzcCBmYWlsZWRcbiIpOworCQlyZXQgPSAtRVRJTUU7CisJCWdvdG8gcmV0ZXJyb3I7CisJfQorCWlmICghcG9sbF9tYm94KGlzYXIsIDEwMDApKSB7CisJCXByX2luZm8oIklTQVIgcG9sbF9tYm94IHN0YXJ0IGRzcCBmYWlsZWRcbiIpOworCQlyZXQgPSAtRVRJTUU7CisJCWdvdG8gcmV0ZXJyb3I7CisJfQorCWlmICgoaXNhci0+aWlzICE9IElTQVJfSUlTX1NURFNQKSB8fCBpc2FyLT5jbXNiIHx8IGlzYXItPmNsc2IpIHsKKwkJcHJfaW5mbygiSVNBUiB3cm9uZyBzdGFydCBkc3AgcmVzcG9uc2UgKCV4LCV4LCV4KVxuIiwKKwkJCWlzYXItPmlpcywgaXNhci0+Y21zYiwgaXNhci0+Y2xzYik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gcmV0ZXJyb3I7CisJfSBlbHNlCisJCXByX2RlYnVnKCIlczogSVNBUiBzdGFydCBkc3Agc3VjY2Vzc1xuIiwgaXNhci0+bmFtZSk7CisKKwkvKiBOT1JNQUwgbW9kZSBlbnRlcmVkICovCisJLyogRW5hYmxlIElSUXMgb2YgSVNBUiAqLworCWlzYXItPndyaXRlX3JlZyhpc2FyLT5odywgSVNBUl9JUlFCSVQsIElTQVJfSVJRU1RBKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlzYXItPmh3bG9jaywgZmxhZ3MpOworCWNudCA9IDEwMDA7IC8qIG1heCAxcyAqLworCXdoaWxlICgoIWlzYXItPmJzdGF0KSAmJiBjbnQpIHsKKwkJbWRlbGF5KDEpOworCQljbnQtLTsKKwl9CisJaWYgKCFjbnQpIHsKKwkJcHJfaW5mbygiSVNBUiBubyBnZW5lcmFsIHN0YXR1cyBldmVudCByZWNlaXZlZFxuIik7CisJCXJldCA9IC1FVElNRTsKKwkJZ290byByZXRlcnJmbGc7CisJfSBlbHNlCisJCXByX2RlYnVnKCIlczogSVNBUiBnZW5lcmFsIHN0YXR1cyBldmVudCAleFxuIiwKKwkJCWlzYXItPm5hbWUsIGlzYXItPmJzdGF0KTsKKwkvKiAxMG1zIGRlbGF5ICovCisJY250ID0gMTA7CisJd2hpbGUgKGNudC0tKQorCQltZGVsYXkoMSk7CisJaXNhci0+aWlzID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKKwlpZiAoIXNlbmRfbWJveChpc2FyLCBJU0FSX0hJU19ESUFHLCBJU0FSX0NUUkxfU1RTVCwgMCwgTlVMTCkpIHsKKwkJcHJfaW5mbygiSVNBUiBzZW5kX21ib3ggc2VsZiB0c3QgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVUSU1FOworCQlnb3RvIHJldGVycm9yOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlzYXItPmh3bG9jaywgZmxhZ3MpOworCWNudCA9IDEwMDAwOyAvKiBtYXggMTAwIG1zICovCisJd2hpbGUgKChpc2FyLT5paXMgIT0gSVNBUl9JSVNfRElBRykgJiYgY250KSB7CisJCXVkZWxheSgxMCk7CisJCWNudC0tOworCX0KKwltZGVsYXkoMSk7CisJaWYgKCFjbnQpIHsKKwkJcHJfaW5mbygiSVNBUiBubyBzZWxmIHRzdCByZXNwb25zZVxuIik7CisJCXJldCA9IC1FVElNRTsKKwkJZ290byByZXRlcnJmbGc7CisJfQorCWlmICgoaXNhci0+Y21zYiA9PSBJU0FSX0NUUkxfU1RTVCkgJiYgKGlzYXItPmNsc2IgPT0gMSkKKwkgICAgJiYgKGlzYXItPmJ1ZlswXSA9PSAwKSkKKwkJcHJfZGVidWcoIiVzOiBJU0FSIHNlbGZ0ZXN0IE9LXG4iLCBpc2FyLT5uYW1lKTsKKwllbHNlIHsKKwkJcHJfaW5mbygiSVNBUiBzZWxmdGVzdCBub3QgT0sgJXgvJXgvJXhcbiIsCisJCQlpc2FyLT5jbXNiLCBpc2FyLT5jbHNiLCBpc2FyLT5idWZbMF0pOworCQlyZXQgPSAtRUlPOworCQlnb3RvIHJldGVycmZsZzsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoaXNhci0+aHdsb2NrLCBmbGFncyk7CisJaXNhci0+aWlzID0gMDsKKwlpZiAoIXNlbmRfbWJveChpc2FyLCBJU0FSX0hJU19ESUFHLCBJU0FSX0NUUkxfU1dWRVIsIDAsIE5VTEwpKSB7CisJCXByX2luZm8oIklTQVIgUlFTVCBTVk4gZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVUSU1FOworCQlnb3RvIHJldGVycm9yOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlzYXItPmh3bG9jaywgZmxhZ3MpOworCWNudCA9IDMwMDAwOyAvKiBtYXggMzAwIG1zICovCisJd2hpbGUgKChpc2FyLT5paXMgIT0gSVNBUl9JSVNfRElBRykgJiYgY250KSB7CisJCXVkZWxheSgxMCk7CisJCWNudC0tOworCX0KKwltZGVsYXkoMSk7CisJaWYgKCFjbnQpIHsKKwkJcHJfaW5mbygiSVNBUiBubyBTVk4gcmVzcG9uc2VcbiIpOworCQlyZXQgPSAtRVRJTUU7CisJCWdvdG8gcmV0ZXJyZmxnOworCX0gZWxzZSB7CisJCWlmICgoaXNhci0+Y21zYiA9PSBJU0FSX0NUUkxfU1dWRVIpICYmIChpc2FyLT5jbHNiID09IDEpKSB7CisJCQlwcl9ub3RpY2UoIiVzOiBJU0FSIHNvZnR3YXJlIHZlcnNpb24gJSN4XG4iLAorCQkJCWlzYXItPm5hbWUsIGlzYXItPmJ1ZlswXSk7CisJCX0gZWxzZSB7CisJCQlwcl9pbmZvKCIlczogSVNBUiB3cm9uZyBzd3ZlciByZXNwb25zZSAoJXgsJXgpIgorCQkJCSIgY250KCVkKVxuIiwgaXNhci0+bmFtZSwgaXNhci0+Y21zYiwKKwkJCQlpc2FyLT5jbHNiLCBjbnQpOworCQkJcmV0ID0gLUVJTzsKKwkJCWdvdG8gcmV0ZXJyZmxnOworCQl9CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKGlzYXItPmh3bG9jaywgZmxhZ3MpOworCWlzYXJfc2V0dXAoaXNhcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKKwlyZXQgPSAwOworcmV0ZXJyZmxnOgorCXNwaW5fbG9ja19pcnFzYXZlKGlzYXItPmh3bG9jaywgZmxhZ3MpOworcmV0ZXJyb3I6CisJaXNhci0+Y2hbMF0uYmNoLmRlYnVnID0gc2F2ZWRfZGVidWc7CisJaWYgKHJldCkKKwkJLyogZGlzYWJsZSBJU0FSIElSUSAqLworCQlpc2FyLT53cml0ZV9yZWcoaXNhci0+aHcsIElTQVJfSVJRQklULCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlzYXItPmh3bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZGVsaXZlcl9zdGF0dXMoc3RydWN0IGlzYXJfY2ggKmNoLCBpbnQgc3RhdHVzKQoreworCXByX2RlYnVnKCIlczogSEwtPkxMIEZBWElORCAleFxuIiwgY2gtPmlzLT5uYW1lLCBzdGF0dXMpOworCV9xdWV1ZV9kYXRhKCZjaC0+YmNoLmNoLCBQSF9DT05UUk9MX0lORCwgc3RhdHVzLCAwLCBOVUxMLCBHRlBfQVRPTUlDKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpc2FyX3Jjdl9mcmFtZShzdHJ1Y3QgaXNhcl9jaCAqY2gpCit7CisJdTgJCSpwdHI7CisKKwlpZiAoIWNoLT5pcy0+Y2xzYikgeworCQlwcl9kZWJ1ZygiJXM7IElTQVIgemVybyBsZW4gZnJhbWVcbiIsIGNoLT5pcy0+bmFtZSk7CisJCWNoLT5pcy0+d3JpdGVfcmVnKGNoLT5pcy0+aHcsIElTQVJfSUlBLCAwKTsKKwkJcmV0dXJuOworCX0KKwlzd2l0Y2ggKGNoLT5iY2guc3RhdGUpIHsKKwljYXNlIElTRE5fUF9OT05FOgorCQlwcl9kZWJ1ZygiJXM6IElTQVIgcHJvdG9jb2wgMCBzcHVyaW91cyBJSVNfUkRBVEEgJXgvJXgvJXhcbiIsCisJCQljaC0+aXMtPm5hbWUsIGNoLT5pcy0+aWlzLCBjaC0+aXMtPmNtc2IsIGNoLT5pcy0+Y2xzYik7CisJCWNoLT5pcy0+d3JpdGVfcmVnKGNoLT5pcy0+aHcsIElTQVJfSUlBLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBJU0ROX1BfQl9SQVc6CisJY2FzZSBJU0ROX1BfQl9MMkRUTUY6CisJY2FzZSBJU0ROX1BfQl9NT0RFTV9BU1lOQzoKKwkJaWYgKCFjaC0+YmNoLnJ4X3NrYikgeworCQkJY2gtPmJjaC5yeF9za2IgPSBtSV9hbGxvY19za2IoY2gtPmJjaC5tYXhsZW4sCisJCQkJCQlHRlBfQVRPTUlDKTsKKwkJCWlmICh1bmxpa2VseSghY2gtPmJjaC5yeF9za2IpKSB7CisJCQkJcHJfaW5mbygiJXM6IEIgcmVjZWl2ZSBvdXQgb2YgbWVtb3J5XG4iLAorCQkJCQljaC0+aXMtPm5hbWUpOworCQkJCWNoLT5pcy0+d3JpdGVfcmVnKGNoLT5pcy0+aHcsIElTQVJfSUlBLCAwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlyY3ZfbWJveChjaC0+aXMsIHNrYl9wdXQoY2gtPmJjaC5yeF9za2IsIGNoLT5pcy0+Y2xzYikpOworCQlyZWN2X0JjaGFubmVsKCZjaC0+YmNoLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBJU0ROX1BfQl9IRExDOgorCQlpZiAoIWNoLT5iY2gucnhfc2tiKSB7CisJCQljaC0+YmNoLnJ4X3NrYiA9IG1JX2FsbG9jX3NrYihjaC0+YmNoLm1heGxlbiwKKwkJCQkJCUdGUF9BVE9NSUMpOworCQkJaWYgKHVubGlrZWx5KCFjaC0+YmNoLnJ4X3NrYikpIHsKKwkJCQlwcl9pbmZvKCIlczogQiByZWNlaXZlIG91dCBvZiBtZW1vcnlcbiIsCisJCQkJCWNoLT5pcy0+bmFtZSk7CisJCQkJY2gtPmlzLT53cml0ZV9yZWcoY2gtPmlzLT5odywgSVNBUl9JSUEsIDApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICgoY2gtPmJjaC5yeF9za2ItPmxlbiArIGNoLT5pcy0+Y2xzYikgPgorCQkgICAgKGNoLT5iY2gubWF4bGVuICsgMikpIHsKKwkJCXByX2RlYnVnKCIlczogaW5jb21pbmcgcGFja2V0IHRvbyBsYXJnZVxuIiwKKwkJCQljaC0+aXMtPm5hbWUpOworCQkJY2gtPmlzLT53cml0ZV9yZWcoY2gtPmlzLT5odywgSVNBUl9JSUEsIDApOworCQkJc2tiX3RyaW0oY2gtPmJjaC5yeF9za2IsIDApOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNoLT5pcy0+Y21zYiAmIEhETENfRVJST1IpIHsKKwkJCXByX2RlYnVnKCIlczogSVNBUiBmcmFtZSBlcnJvciAleCBsZW4gJWRcbiIsCisJCQkJY2gtPmlzLT5uYW1lLCBjaC0+aXMtPmNtc2IsIGNoLT5pcy0+Y2xzYik7CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCQlpZiAoY2gtPmlzLT5jbXNiICYgSERMQ19FUlJfUkVSKQorCQkJCWNoLT5iY2guZXJyX2ludisrOworCQkJaWYgKGNoLT5pcy0+Y21zYiAmIEhETENfRVJSX0NFUikKKwkJCQljaC0+YmNoLmVycl9jcmMrKzsKKyNlbmRpZgorCQkJc2tiX3RyaW0oY2gtPmJjaC5yeF9za2IsIDApOworCQkJY2gtPmlzLT53cml0ZV9yZWcoY2gtPmlzLT5odywgSVNBUl9JSUEsIDApOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNoLT5pcy0+Y21zYiAmIEhETENfRlNEKQorCQkJc2tiX3RyaW0oY2gtPmJjaC5yeF9za2IsIDApOworCQlwdHIgPSBza2JfcHV0KGNoLT5iY2gucnhfc2tiLCBjaC0+aXMtPmNsc2IpOworCQlyY3ZfbWJveChjaC0+aXMsIHB0cik7CisJCWlmIChjaC0+aXMtPmNtc2IgJiBIRExDX0ZFRCkgeworCQkJaWYgKGNoLT5iY2gucnhfc2tiLT5sZW4gPCAzKSB7IC8qIGxhc3QgMiBhcmUgdGhlIEZDUyAqLworCQkJCXByX2RlYnVnKCIlczogSVNBUiBmcmFtZSB0byBzaG9ydCAlZFxuIiwKKwkJCQkJY2gtPmlzLT5uYW1lLCBjaC0+YmNoLnJ4X3NrYi0+bGVuKTsKKwkJCQlza2JfdHJpbShjaC0+YmNoLnJ4X3NrYiwgMCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlza2JfdHJpbShjaC0+YmNoLnJ4X3NrYiwgY2gtPmJjaC5yeF9za2ItPmxlbiAtIDIpOworCQkJcmVjdl9CY2hhbm5lbCgmY2gtPmJjaCwgMCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJU0ROX1BfQl9UMzBfRkFYOgorCQlpZiAoY2gtPnN0YXRlICE9IFNURkFYX0FDVElWKSB7CisJCQlwcl9kZWJ1ZygiJXM6IGlzYXJfcmN2X2ZyYW1lOiBub3QgQUNUSVZcbiIsCisJCQkJY2gtPmlzLT5uYW1lKTsKKwkJCWNoLT5pcy0+d3JpdGVfcmVnKGNoLT5pcy0+aHcsIElTQVJfSUlBLCAwKTsKKwkJCWlmIChjaC0+YmNoLnJ4X3NrYikKKwkJCQlza2JfdHJpbShjaC0+YmNoLnJ4X3NrYiwgMCk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIWNoLT5iY2gucnhfc2tiKSB7CisJCQljaC0+YmNoLnJ4X3NrYiA9IG1JX2FsbG9jX3NrYihjaC0+YmNoLm1heGxlbiwKKwkJCQkJCUdGUF9BVE9NSUMpOworCQkJaWYgKHVubGlrZWx5KCFjaC0+YmNoLnJ4X3NrYikpIHsKKwkJCQlwcl9pbmZvKCIlczogQiByZWNlaXZlIG91dCBvZiBtZW1vcnlcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCQljaC0+aXMtPndyaXRlX3JlZyhjaC0+aXMtPmh3LCBJU0FSX0lJQSwgMCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGNoLT5jbWQgPT0gUENUUkxfQ01EX0ZSTSkgeworCQkJcmN2X21ib3goY2gtPmlzLCBza2JfcHV0KGNoLT5iY2gucnhfc2tiLCBjaC0+aXMtPmNsc2IpKTsKKwkJCXByX2RlYnVnKCIlczogaXNhcl9yY3ZfZnJhbWU6ICVkXG4iLAorCQkJCWNoLT5pcy0+bmFtZSwgY2gtPmJjaC5yeF9za2ItPmxlbik7CisJCQlpZiAoY2gtPmlzLT5jbXNiICYgU0FSVF9OTUQpIHsgLyogQUJPUlQgKi8KKwkJCQlwcl9kZWJ1ZygiJXM6IGlzYXJfcmN2X2ZyYW1lOiBubyBtb3JlIGRhdGFcbiIsCisJCQkJCWNoLT5pcy0+bmFtZSk7CisJCQkJY2gtPmlzLT53cml0ZV9yZWcoY2gtPmlzLT5odywgSVNBUl9JSUEsIDApOworCQkJCXNlbmRfbWJveChjaC0+aXMsIFNFVF9EUFMoY2gtPmRwYXRoKSB8CisJCQkJCUlTQVJfSElTX1BVTVBDVFJMLCBQQ1RSTF9DTURfRVNDLAorCQkJCQkwLCBOVUxMKTsKKwkJCQljaC0+c3RhdGUgPSBTVEZBWF9FU0NBUEU7CisJCQkJLyogc2V0X3NrYl9mbGFnKHNrYiwgREZfTk9NT1JFREFUQSk7ICovCisJCQl9CisJCQlyZWN2X0JjaGFubmVsKCZjaC0+YmNoLCAwKTsKKwkJCWlmIChjaC0+aXMtPmNtc2IgJiBTQVJUX05NRCkKKwkJCQlkZWxpdmVyX3N0YXR1cyhjaCwgSFdfTU9EX05PQ0FSUik7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY2gtPmNtZCAhPSBQQ1RSTF9DTURfRlJIKSB7CisJCQlwcl9kZWJ1ZygiJXM6IGlzYXJfcmN2X2ZyYW1lOiB1bmtub3duIGZheCBtb2RlICV4XG4iLAorCQkJCWNoLT5pcy0+bmFtZSwgY2gtPmNtZCk7CisJCQljaC0+aXMtPndyaXRlX3JlZyhjaC0+aXMtPmh3LCBJU0FSX0lJQSwgMCk7CisJCQlpZiAoY2gtPmJjaC5yeF9za2IpCisJCQkJc2tiX3RyaW0oY2gtPmJjaC5yeF9za2IsIDApOworCQkJYnJlYWs7CisJCX0KKwkJLyogUENUUkxfQ01EX0ZSSCAqLworCQlpZiAoKGNoLT5iY2gucnhfc2tiLT5sZW4gKyBjaC0+aXMtPmNsc2IpID4KKwkJICAgIChjaC0+YmNoLm1heGxlbiArIDIpKSB7CisJCQlwcl9pbmZvKCIlczogJXMgaW5jb21pbmcgcGFja2V0IHRvbyBsYXJnZVxuIiwKKwkJCQljaC0+aXMtPm5hbWUsIF9fZnVuY19fKTsKKwkJCWNoLT5pcy0+d3JpdGVfcmVnKGNoLT5pcy0+aHcsIElTQVJfSUlBLCAwKTsKKwkJCXNrYl90cmltKGNoLT5iY2gucnhfc2tiLCAwKTsKKwkJCWJyZWFrOworCQl9ICBlbHNlIGlmIChjaC0+aXMtPmNtc2IgJiBIRExDX0VSUk9SKSB7CisJCQlwcl9pbmZvKCIlczogSVNBUiBmcmFtZSBlcnJvciAleCBsZW4gJWRcbiIsCisJCQkJY2gtPmlzLT5uYW1lLCBjaC0+aXMtPmNtc2IsIGNoLT5pcy0+Y2xzYik7CisJCQlza2JfdHJpbShjaC0+YmNoLnJ4X3NrYiwgMCk7CisJCQljaC0+aXMtPndyaXRlX3JlZyhjaC0+aXMtPmh3LCBJU0FSX0lJQSwgMCk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY2gtPmlzLT5jbXNiICYgSERMQ19GU0QpCisJCQlza2JfdHJpbShjaC0+YmNoLnJ4X3NrYiwgMCk7CisJCXB0ciA9IHNrYl9wdXQoY2gtPmJjaC5yeF9za2IsIGNoLT5pcy0+Y2xzYik7CisJCXJjdl9tYm94KGNoLT5pcywgcHRyKTsKKwkJaWYgKGNoLT5pcy0+Y21zYiAmIEhETENfRkVEKSB7CisJCQlpZiAoY2gtPmJjaC5yeF9za2ItPmxlbiA8IDMpIHsgLyogbGFzdCAyIGFyZSB0aGUgRkNTICovCisJCQkJcHJfaW5mbygiJXM6IElTQVIgZnJhbWUgdG8gc2hvcnQgJWRcbiIsCisJCQkJCWNoLT5pcy0+bmFtZSwgY2gtPmJjaC5yeF9za2ItPmxlbik7CisJCQkJc2tiX3RyaW0oY2gtPmJjaC5yeF9za2IsIDApOworCQkJCWJyZWFrOworCQkJfQorCQkJc2tiX3RyaW0oY2gtPmJjaC5yeF9za2IsIGNoLT5iY2gucnhfc2tiLT5sZW4gLSAyKTsKKwkJCXJlY3ZfQmNoYW5uZWwoJmNoLT5iY2gsIDApOworCQl9CisJCWlmIChjaC0+aXMtPmNtc2IgJiBTQVJUX05NRCkgeyAvKiBBQk9SVCAqLworCQkJcHJfZGVidWcoIiVzOiBpc2FyX3Jjdl9mcmFtZTogbm8gbW9yZSBkYXRhXG4iLAorCQkJCWNoLT5pcy0+bmFtZSk7CisJCQljaC0+aXMtPndyaXRlX3JlZyhjaC0+aXMtPmh3LCBJU0FSX0lJQSwgMCk7CisJCQlpZiAoY2gtPmJjaC5yeF9za2IpCisJCQkJc2tiX3RyaW0oY2gtPmJjaC5yeF9za2IsIDApOworCQkJc2VuZF9tYm94KGNoLT5pcywgU0VUX0RQUyhjaC0+ZHBhdGgpIHwKKwkJCQlJU0FSX0hJU19QVU1QQ1RSTCwgUENUUkxfQ01EX0VTQywgMCwgTlVMTCk7CisJCQljaC0+c3RhdGUgPSBTVEZBWF9FU0NBUEU7CisJCQlkZWxpdmVyX3N0YXR1cyhjaCwgSFdfTU9EX05PQ0FSUik7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiaXNhcl9yY3ZfZnJhbWUgcHJvdG9jb2wgKCV4KWVycm9yXG4iLCBjaC0+YmNoLnN0YXRlKTsKKwkJY2gtPmlzLT53cml0ZV9yZWcoY2gtPmlzLT5odywgSVNBUl9JSUEsIDApOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpc2FyX2ZpbGxfZmlmbyhzdHJ1Y3QgaXNhcl9jaCAqY2gpCit7CisJaW50IGNvdW50OworCXU4IG1zYjsKKwl1OCAqcHRyOworCisJcHJfZGVidWcoIiVzOiBjaCVkICB0eF9za2IgJXAgdHhfaWR4ICVkXG4iLAorCQljaC0+aXMtPm5hbWUsIGNoLT5iY2gubnIsIGNoLT5iY2gudHhfc2tiLCBjaC0+YmNoLnR4X2lkeCk7CisJaWYgKCFjaC0+YmNoLnR4X3NrYikKKwkJcmV0dXJuOworCWNvdW50ID0gY2gtPmJjaC50eF9za2ItPmxlbiAtIGNoLT5iY2gudHhfaWR4OworCWlmIChjb3VudCA8PSAwKQorCQlyZXR1cm47CisJaWYgKCEoY2gtPmlzLT5ic3RhdCAmCisJCShjaC0+ZHBhdGggPT0gMSA/IEJTVEFUX1JETTEgOiBCU1RBVF9SRE0yKSkpCisJCXJldHVybjsKKwlpZiAoY291bnQgPiBjaC0+bW1sKSB7CisJCW1zYiA9IDA7CisJCWNvdW50ID0gY2gtPm1tbDsKKwl9IGVsc2UgeworCQltc2IgPSBIRExDX0ZFRDsKKwl9CisJcHRyID0gY2gtPmJjaC50eF9za2ItPmRhdGEgKyBjaC0+YmNoLnR4X2lkeDsKKwlpZiAoIWNoLT5iY2gudHhfaWR4KSB7CisJCXByX2RlYnVnKCIlczogZnJhbWUgc3RhcnRcbiIsIGNoLT5pcy0+bmFtZSk7CisJCWlmICgoY2gtPmJjaC5zdGF0ZSA9PSBJU0ROX1BfQl9UMzBfRkFYKSAmJgorCQkJKGNoLT5jbWQgPT0gUENUUkxfQ01EX0ZUSCkpIHsKKwkJCWlmIChjb3VudCA+IDEpIHsKKwkJCQlpZiAoKHB0clswXSA9PSAweGZmKSAmJiAocHRyWzFdID09IDB4MTMpKSB7CisJCQkJCS8qIGxhc3QgZnJhbWUgKi8KKwkJCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfTEFTVERBVEEsCisJCQkJCQkmY2gtPmJjaC5GbGFncyk7CisJCQkJCXByX2RlYnVnKCIlczogc2V0IExBU1REQVRBXG4iLAorCQkJCQkJY2gtPmlzLT5uYW1lKTsKKwkJCQkJaWYgKG1zYiA9PSBIRExDX0ZFRCkKKwkJCQkJCXRlc3RfYW5kX3NldF9iaXQoRkxHX0RMRUVUWCwKKwkJCQkJCQkmY2gtPmJjaC5GbGFncyk7CisJCQkJfQorCQkJfQorCQl9CisJCW1zYiB8PSBIRExDX0ZTVDsKKwl9CisJY2gtPmJjaC50eF9pZHggKz0gY291bnQ7CisJc3dpdGNoIChjaC0+YmNoLnN0YXRlKSB7CisJY2FzZSBJU0ROX1BfTk9ORToKKwkJcHJfaW5mbygiJXM6IHdyb25nIHByb3RvY29sIDBcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJY2FzZSBJU0ROX1BfQl9SQVc6CisJY2FzZSBJU0ROX1BfQl9MMkRUTUY6CisJY2FzZSBJU0ROX1BfQl9NT0RFTV9BU1lOQzoKKwkJc2VuZF9tYm94KGNoLT5pcywgU0VUX0RQUyhjaC0+ZHBhdGgpIHwgSVNBUl9ISVNfU0RBVEEsCisJCQkwLCBjb3VudCwgcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBJU0ROX1BfQl9IRExDOgorCQlzZW5kX21ib3goY2gtPmlzLCBTRVRfRFBTKGNoLT5kcGF0aCkgfCBJU0FSX0hJU19TREFUQSwKKwkJCW1zYiwgY291bnQsIHB0cik7CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfVDMwX0ZBWDoKKwkJaWYgKGNoLT5zdGF0ZSAhPSBTVEZBWF9BQ1RJVikKKwkJCXByX2RlYnVnKCIlczogbm90IEFDVElWXG4iLCBjaC0+aXMtPm5hbWUpOworCQllbHNlIGlmIChjaC0+Y21kID09IFBDVFJMX0NNRF9GVEgpCisJCQlzZW5kX21ib3goY2gtPmlzLCBTRVRfRFBTKGNoLT5kcGF0aCkgfCBJU0FSX0hJU19TREFUQSwKKwkJCQltc2IsIGNvdW50LCBwdHIpOworCQllbHNlIGlmIChjaC0+Y21kID09IFBDVFJMX0NNRF9GVE0pCisJCQlzZW5kX21ib3goY2gtPmlzLCBTRVRfRFBTKGNoLT5kcGF0aCkgfCBJU0FSX0hJU19TREFUQSwKKwkJCQkwLCBjb3VudCwgcHRyKTsKKwkJZWxzZQorCQkJcHJfZGVidWcoIiVzOiBub3QgRlRIL0ZUTVxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6IHByb3RvY29sKCV4KSBlcnJvclxuIiwKKwkJCV9fZnVuY19fLCBjaC0+YmNoLnN0YXRlKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpc2FyX2NoICoKK3NlbF9iY2hfaXNhcihzdHJ1Y3QgaXNhcl9odyAqaXNhciwgdTggZHBhdGgpCit7CisJc3RydWN0IGlzYXJfY2gJKmJhc2UgPSAmaXNhci0+Y2hbMF07CisKKwlpZiAoKCFkcGF0aCkgfHwgKGRwYXRoID4gMikpCisJCXJldHVybiBOVUxMOworCWlmIChiYXNlLT5kcGF0aCA9PSBkcGF0aCkKKwkJcmV0dXJuIGJhc2U7CisJYmFzZSsrOworCWlmIChiYXNlLT5kcGF0aCA9PSBkcGF0aCkKKwkJcmV0dXJuIGJhc2U7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitzZW5kX25leHQoc3RydWN0IGlzYXJfY2ggKmNoKQoreworCXByX2RlYnVnKCIlczogJXMgY2glZCB0eF9za2IgJXAgdHhfaWR4ICVkXG4iLAorCQljaC0+aXMtPm5hbWUsIF9fZnVuY19fLCBjaC0+YmNoLm5yLAorCQljaC0+YmNoLnR4X3NrYiwgY2gtPmJjaC50eF9pZHgpOworCWlmIChjaC0+YmNoLnN0YXRlID09IElTRE5fUF9CX1QzMF9GQVgpIHsKKwkJaWYgKGNoLT5jbWQgPT0gUENUUkxfQ01EX0ZUSCkgeworCQkJaWYgKHRlc3RfYml0KEZMR19MQVNUREFUQSwgJmNoLT5iY2guRmxhZ3MpKSB7CisJCQkJcHJfZGVidWcoInNldCBOTURfREFUQVxuIik7CisJCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfTk1EX0RBVEEsICZjaC0+YmNoLkZsYWdzKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChjaC0+Y21kID09IFBDVFJMX0NNRF9GVE0pIHsKKwkJCWlmICh0ZXN0X2JpdChGTEdfRExFRVRYLCAmY2gtPmJjaC5GbGFncykpIHsKKwkJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19MQVNUREFUQSwgJmNoLT5iY2guRmxhZ3MpOworCQkJCXRlc3RfYW5kX3NldF9iaXQoRkxHX05NRF9EQVRBLCAmY2gtPmJjaC5GbGFncyk7CisJCQl9CisJCX0KKwl9CisJaWYgKGNoLT5iY2gudHhfc2tiKSB7CisJCS8qIHNlbmQgY29uZmlybSwgb24gdHJhbnMsIGZyZWUgb24gaGRsYy4gKi8KKwkJaWYgKHRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJmNoLT5iY2guRmxhZ3MpKQorCQkJY29uZmlybV9Cc2VuZCgmY2gtPmJjaCk7CisJCWRldl9rZnJlZV9za2IoY2gtPmJjaC50eF9za2IpOworCX0KKwlpZiAoZ2V0X25leHRfYmZyYW1lKCZjaC0+YmNoKSkKKwkJaXNhcl9maWxsX2ZpZm8oY2gpOworCWVsc2UgeworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMR19ETEVFVFgsICZjaC0+YmNoLkZsYWdzKSkgeworCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGTEdfTEFTVERBVEEsCisJCQkgICAgJmNoLT5iY2guRmxhZ3MpKSB7CisJCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGTEdfTk1EX0RBVEEsCisJCQkJICAgICZjaC0+YmNoLkZsYWdzKSkgeworCQkJCQl1OCB6ZCA9IDA7CisJCQkJCXNlbmRfbWJveChjaC0+aXMsIFNFVF9EUFMoY2gtPmRwYXRoKSB8CisJCQkJCQlJU0FSX0hJU19TREFUQSwgMHgwMSwgMSwgJnpkKTsKKwkJCQl9CisJCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfTExfT0ssICZjaC0+YmNoLkZsYWdzKTsKKwkJCX0gZWxzZSB7CisJCQkJZGVsaXZlcl9zdGF0dXMoY2gsIEhXX01PRF9DT05ORUNUKTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK2NoZWNrX3NlbmQoc3RydWN0IGlzYXJfaHcgKmlzYXIsIHU4IHJkbSkKK3sKKwlzdHJ1Y3QgaXNhcl9jaAkqY2g7CisKKwlwcl9kZWJ1ZygiJXM6IHJkbSAleFxuIiwgaXNhci0+bmFtZSwgcmRtKTsKKwlpZiAocmRtICYgQlNUQVRfUkRNMSkgeworCQljaCA9IHNlbF9iY2hfaXNhcihpc2FyLCAxKTsKKwkJaWYgKGNoICYmIHRlc3RfYml0KEZMR19BQ1RJVkUsICZjaC0+YmNoLkZsYWdzKSkgeworCQkJaWYgKGNoLT5iY2gudHhfc2tiICYmIChjaC0+YmNoLnR4X3NrYi0+bGVuID4KKwkJCSAgICBjaC0+YmNoLnR4X2lkeCkpCisJCQkJaXNhcl9maWxsX2ZpZm8oY2gpOworCQkJZWxzZQorCQkJCXNlbmRfbmV4dChjaCk7CisJCX0KKwl9CisJaWYgKHJkbSAmIEJTVEFUX1JETTIpIHsKKwkJY2ggPSBzZWxfYmNoX2lzYXIoaXNhciwgMik7CisJCWlmIChjaCAmJiB0ZXN0X2JpdChGTEdfQUNUSVZFLCAmY2gtPmJjaC5GbGFncykpIHsKKwkJCWlmIChjaC0+YmNoLnR4X3NrYiAmJiAoY2gtPmJjaC50eF9za2ItPmxlbiA+CisJCQkgICAgY2gtPmJjaC50eF9pZHgpKQorCQkJCWlzYXJfZmlsbF9maWZvKGNoKTsKKwkJCWVsc2UKKwkJCQlzZW5kX25leHQoY2gpOworCQl9CisJfQorfQorCitjb25zdCBjaGFyICpkbXJpbFtdID0geyJOTyBTUEVFRCIsICIxMjAwLzc1IiwgIk5PREVGMiIsICI3NS8xMjAwIiwgIk5PREVGNCIsCisJCQkiMzAwIiwgIjYwMCIsICIxMjAwIiwgIjI0MDAiLCAiNDgwMCIsICI3MjAwIiwKKwkJCSI5NjAwbnQiLCAiOTYwMHQiLCAiMTIwMDAiLCAiMTQ0MDAiLCAiV1JPTkcifTsKK2NvbnN0IGNoYXIgKmRtcmltW10gPSB7Ik5PIE1PRCIsICJOTyBERUYiLCAiVjMyL1YzMmIiLCAiVjIyIiwgIlYyMSIsCisJCQkiQmVsbDEwMyIsICJWMjMiLCAiQmVsbDIwMiIsICJWMTciLCAiVjI5IiwgIlYyN3RlciJ9OworCitzdGF0aWMgdm9pZAoraXNhcl9wdW1wX3N0YXR1c19yc3Aoc3RydWN0IGlzYXJfY2ggKmNoKSB7CisJdTggcmlsID0gY2gtPmlzLT5idWZbMF07CisJdTggcmltOworCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSVNBUl9SQVRFX1JFUSwgJmNoLT5pcy0+RmxhZ3MpKQorCQlyZXR1cm47CisJaWYgKHJpbCA+IDE0KSB7CisJCXByX2luZm8oIiVzOiB3cm9uZyBwc3Ryc3AgcmlsPSVkXG4iLCBjaC0+aXMtPm5hbWUsIHJpbCk7CisJCXJpbCA9IDE1OworCX0KKwlzd2l0Y2ggKGNoLT5pcy0+YnVmWzFdKSB7CisJY2FzZSAwOgorCQlyaW0gPSAwOworCQlicmVhazsKKwljYXNlIDB4MjA6CisJCXJpbSA9IDI7CisJCWJyZWFrOworCWNhc2UgMHg0MDoKKwkJcmltID0gMzsKKwkJYnJlYWs7CisJY2FzZSAweDQxOgorCQlyaW0gPSA0OworCQlicmVhazsKKwljYXNlIDB4NTE6CisJCXJpbSA9IDU7CisJCWJyZWFrOworCWNhc2UgMHg2MToKKwkJcmltID0gNjsKKwkJYnJlYWs7CisJY2FzZSAweDcxOgorCQlyaW0gPSA3OworCQlicmVhazsKKwljYXNlIDB4ODI6CisJCXJpbSA9IDg7CisJCWJyZWFrOworCWNhc2UgMHg5MjoKKwkJcmltID0gOTsKKwkJYnJlYWs7CisJY2FzZSAweGEyOgorCQlyaW0gPSAxMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmltID0gMTsKKwkJYnJlYWs7CisJfQorCXNwcmludGYoY2gtPmNvbm1zZywgIiVzICVzIiwgZG1yaWxbcmlsXSwgZG1yaW1bcmltXSk7CisJcHJfZGVidWcoIiVzOiBwdW1wIHN0cnNwICVzXG4iLCBjaC0+aXMtPm5hbWUsIGNoLT5jb25tc2cpOworfQorCitzdGF0aWMgdm9pZAoraXNhcl9wdW1wX3N0YXRldl9tb2RlbShzdHJ1Y3QgaXNhcl9jaCAqY2gsIHU4IGRldnQpIHsKKwl1OCBkcHMgPSBTRVRfRFBTKGNoLT5kcGF0aCk7CisKKwlzd2l0Y2ggKGRldnQpIHsKKwljYXNlIFBTRVZfMTBNU19USU1FUjoKKwkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgVElNRVJcbiIsIGNoLT5pcy0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFNFVl9DT05fT046CisJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IENPTk5FQ1RcbiIsIGNoLT5pcy0+bmFtZSk7CisJCWRlbGl2ZXJfc3RhdHVzKGNoLCBIV19NT0RfQ09OTkVDVCk7CisJCWJyZWFrOworCWNhc2UgUFNFVl9DT05fT0ZGOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBOTyBDT05ORUNUXG4iLCBjaC0+aXMtPm5hbWUpOworCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QU1RSRVEsIDAsIDAsIE5VTEwpOworCQlkZWxpdmVyX3N0YXR1cyhjaCwgSFdfTU9EX05PQ0FSUik7CisJCWJyZWFrOworCWNhc2UgUFNFVl9WMjRfT0ZGOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBWMjQgT0ZGXG4iLCBjaC0+aXMtPm5hbWUpOworCQlicmVhazsKKwljYXNlIFBTRVZfQ1RTX09OOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBDVFMgT05cbiIsIGNoLT5pcy0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFNFVl9DVFNfT0ZGOgorCQlwcl9kZWJ1ZygiJXMgcHVtcCBzdGV2IENUUyBPRkZcbiIsIGNoLT5pcy0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFNFVl9EQ0RfT046CisJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IENBUlJJRVIgT05cbiIsIGNoLT5pcy0+bmFtZSk7CisJCXRlc3RfYW5kX3NldF9iaXQoSVNBUl9SQVRFX1JFUSwgJmNoLT5pcy0+RmxhZ3MpOworCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QU1RSRVEsIDAsIDAsIE5VTEwpOworCQlicmVhazsKKwljYXNlIFBTRVZfRENEX09GRjoKKwkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgQ0FSUklFUiBPRkZcbiIsIGNoLT5pcy0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFNFVl9EU1JfT046CisJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IERTUiBPTlxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBQU0VWX0RTUl9PRkY6CisJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IERTUl9PRkZcbiIsIGNoLT5pcy0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFNFVl9SRU1fUkVUOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBSRU1PVEUgUkVUUkFJTlxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBQU0VWX1JFTV9SRU46CisJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IFJFTU9URSBSRU5FR09USUFURVxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBQU0VWX0dTVE5fQ0xSOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBHU1ROIENMRUFSXG4iLCBjaC0+aXMtPm5hbWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCJ1JXM6IG5rbm93biBwdW1wIHN0ZXYgJXhcbiIsIGNoLT5pcy0+bmFtZSwgZGV2dCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK2lzYXJfcHVtcF9zdGF0ZXZfZmF4KHN0cnVjdCBpc2FyX2NoICpjaCwgdTggZGV2dCkgeworCXU4IGRwcyA9IFNFVF9EUFMoY2gtPmRwYXRoKTsKKwl1OCBwMTsKKworCXN3aXRjaCAoZGV2dCkgeworCWNhc2UgUFNFVl8xME1TX1RJTUVSOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBUSU1FUlxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBQU0VWX1JTUF9SRUFEWToKKwkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgUlNQX1JFQURZXG4iLCBjaC0+aXMtPm5hbWUpOworCQljaC0+c3RhdGUgPSBTVEZBWF9SRUFEWTsKKwkJZGVsaXZlcl9zdGF0dXMoY2gsIEhXX01PRF9SRUFEWSk7CisjaWZkZWYgQVVUT0NPTgorCQlpZiAodGVzdF9iaXQoQkNfRkxHX09SSUcsICZjaC0+YmNoLkZsYWdzKSkKKwkJCWlzYXJfcHVtcF9jbWQoYmNoLCBIV19NT0RfRlJILCAzKTsKKwkJZWxzZQorCQkJaXNhcl9wdW1wX2NtZChiY2gsIEhXX01PRF9GVEgsIDMpOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgUFNFVl9MSU5FX1RYX0g6CisJCWlmIChjaC0+c3RhdGUgPT0gU1RGQVhfTElORSkgeworCQkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgTElORV9UWF9IXG4iLCBjaC0+aXMtPm5hbWUpOworCQkJY2gtPnN0YXRlID0gU1RGQVhfQ09OVDsKKwkJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1BVTVBDVFJMLAorCQkJCVBDVFJMX0NNRF9DT05ULCAwLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IExJTkVfVFhfSCB3cm9uZyBzdCAleFxuIiwKKwkJCQljaC0+aXMtPm5hbWUsIGNoLT5zdGF0ZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQU0VWX0xJTkVfUlhfSDoKKwkJaWYgKGNoLT5zdGF0ZSA9PSBTVEZBWF9MSU5FKSB7CisJCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBMSU5FX1JYX0hcbiIsIGNoLT5pcy0+bmFtZSk7CisJCQljaC0+c3RhdGUgPSBTVEZBWF9DT05UOworCQkJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfUFVNUENUUkwsCisJCQkJUENUUkxfQ01EX0NPTlQsIDAsIE5VTEwpOworCQl9IGVsc2UgeworCQkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgTElORV9SWF9IIHdyb25nIHN0ICV4XG4iLAorCQkJCWNoLT5pcy0+bmFtZSwgY2gtPnN0YXRlKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBTRVZfTElORV9UWF9COgorCQlpZiAoY2gtPnN0YXRlID09IFNURkFYX0xJTkUpIHsKKwkJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IExJTkVfVFhfQlxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJCWNoLT5zdGF0ZSA9IFNURkFYX0NPTlQ7CisJCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QVU1QQ1RSTCwKKwkJCQlQQ1RSTF9DTURfQ09OVCwgMCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBMSU5FX1RYX0Igd3Jvbmcgc3QgJXhcbiIsCisJCQkJY2gtPmlzLT5uYW1lLCBjaC0+c3RhdGUpOworCQl9CisJCWJyZWFrOworCWNhc2UgUFNFVl9MSU5FX1JYX0I6CisJCWlmIChjaC0+c3RhdGUgPT0gU1RGQVhfTElORSkgeworCQkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgTElORV9SWF9CXG4iLCBjaC0+aXMtPm5hbWUpOworCQkJY2gtPnN0YXRlID0gU1RGQVhfQ09OVDsKKwkJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1BVTVBDVFJMLAorCQkJCVBDVFJMX0NNRF9DT05ULCAwLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IExJTkVfUlhfQiB3cm9uZyBzdCAleFxuIiwKKwkJCQljaC0+aXMtPm5hbWUsIGNoLT5zdGF0ZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQU0VWX1JTUF9DT05OOgorCQlpZiAoY2gtPnN0YXRlID09IFNURkFYX0NPTlQpIHsKKwkJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IFJTUF9DT05OXG4iLCBjaC0+aXMtPm5hbWUpOworCQkJY2gtPnN0YXRlID0gU1RGQVhfQUNUSVY7CisJCQl0ZXN0X2FuZF9zZXRfYml0KElTQVJfUkFURV9SRVEsICZjaC0+aXMtPkZsYWdzKTsKKwkJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1BTVFJFUSwgMCwgMCwgTlVMTCk7CisJCQlpZiAoY2gtPmNtZCA9PSBQQ1RSTF9DTURfRlRIKSB7CisJCQkJaW50IGRlbGF5ID0gKGNoLT5tb2QgPT0gMykgPyAxMDAwIDogMjAwOworCQkJCS8qIDFzICgyMDAgbXMpIEZsYWdzIGJlZm9yZSBkYXRhICovCisJCQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoRkxHX0ZUSV9SVU4sCisJCQkJICAgICZjaC0+YmNoLkZsYWdzKSkKKwkJCQkJZGVsX3RpbWVyKCZjaC0+ZnRpbWVyKTsKKwkJCQljaC0+ZnRpbWVyLmV4cGlyZXMgPQorCQkJCQlqaWZmaWVzICsgKChkZWxheSAqIEhaKS8xMDAwKTsKKwkJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19MTF9DT05OLAorCQkJCQkmY2gtPmJjaC5GbGFncyk7CisJCQkJYWRkX3RpbWVyKCZjaC0+ZnRpbWVyKTsKKwkJCX0gZWxzZSB7CisJCQkJZGVsaXZlcl9zdGF0dXMoY2gsIEhXX01PRF9DT05ORUNUKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IFJTUF9DT05OIHdyb25nIHN0ICV4XG4iLAorCQkJCWNoLT5pcy0+bmFtZSwgY2gtPnN0YXRlKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBTRVZfRkxBR1NfREVUOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBGTEFHU19ERVRcbiIsIGNoLT5pcy0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFNFVl9SU1BfRElTQzoKKwkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgUlNQX0RJU0Mgc3RhdGUoJWQpXG4iLAorCQkJY2gtPmlzLT5uYW1lLCBjaC0+c3RhdGUpOworCQlpZiAoY2gtPnN0YXRlID09IFNURkFYX0VTQ0FQRSkgeworCQkJcDEgPSA1OworCQkJc3dpdGNoIChjaC0+bmV3Y21kKSB7CisJCQljYXNlIDA6CisJCQkJY2gtPnN0YXRlID0gU1RGQVhfUkVBRFk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBDVFJMX0NNRF9GVE06CisJCQkJcDEgPSAyOworCQkJY2FzZSBQQ1RSTF9DTURfRlRIOgorCQkJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1BVTVBDVFJMLAorCQkJCQlQQ1RSTF9DTURfU0lMT04sIDEsICZwMSk7CisJCQkJY2gtPnN0YXRlID0gU1RGQVhfU0lMREVUOworCQkJCWJyZWFrOworCQkJY2FzZSBQQ1RSTF9DTURfRlJIOgorCQkJY2FzZSBQQ1RSTF9DTURfRlJNOgorCQkJCWNoLT5tb2QgPSBjaC0+bmV3bW9kOworCQkJCXAxID0gY2gtPm5ld21vZDsKKwkJCQljaC0+bmV3bW9kID0gMDsKKwkJCQljaC0+Y21kID0gY2gtPm5ld2NtZDsKKwkJCQljaC0+bmV3Y21kID0gMDsKKwkJCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QVU1QQ1RSTCwKKwkJCQkJY2gtPmNtZCwgMSwgJnAxKTsKKwkJCQljaC0+c3RhdGUgPSBTVEZBWF9MSU5FOworCQkJCWNoLT50cnlfbW9kID0gMzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJfZGVidWcoIiVzOiBSU1BfRElTQyB1bmtub3duIG5ld2NtZCAleFxuIiwKKwkJCQkJY2gtPmlzLT5uYW1lLCBjaC0+bmV3Y21kKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIGlmIChjaC0+c3RhdGUgPT0gU1RGQVhfQUNUSVYpIHsKKwkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0xMX09LLCAmY2gtPmJjaC5GbGFncykpCisJCQkJZGVsaXZlcl9zdGF0dXMoY2gsIEhXX01PRF9PSyk7CisJCQllbHNlIGlmIChjaC0+Y21kID09IFBDVFJMX0NNRF9GUk0pCisJCQkJZGVsaXZlcl9zdGF0dXMoY2gsIEhXX01PRF9OT0NBUlIpOworCQkJZWxzZQorCQkJCWRlbGl2ZXJfc3RhdHVzKGNoLCBIV19NT0RfRkNFUlJPUik7CisJCQljaC0+c3RhdGUgPSBTVEZBWF9SRUFEWTsKKwkJfSBlbHNlIGlmIChjaC0+c3RhdGUgIT0gU1RGQVhfU0lMREVUKSB7CisJCQkvKiBpZ25vcmUgaW4gU1RGQVhfU0lMREVUICovCisJCQljaC0+c3RhdGUgPSBTVEZBWF9SRUFEWTsKKwkJCWRlbGl2ZXJfc3RhdHVzKGNoLCBIV19NT0RfRkNFUlJPUik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQU0VWX1JTUF9TSUxERVQ6CisJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IFJTUF9TSUxERVRcbiIsIGNoLT5pcy0+bmFtZSk7CisJCWlmIChjaC0+c3RhdGUgPT0gU1RGQVhfU0lMREVUKSB7CisJCQljaC0+bW9kID0gY2gtPm5ld21vZDsKKwkJCXAxID0gY2gtPm5ld21vZDsKKwkJCWNoLT5uZXdtb2QgPSAwOworCQkJY2gtPmNtZCA9IGNoLT5uZXdjbWQ7CisJCQljaC0+bmV3Y21kID0gMDsKKwkJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1BVTVBDVFJMLAorCQkJCWNoLT5jbWQsIDEsICZwMSk7CisJCQljaC0+c3RhdGUgPSBTVEZBWF9MSU5FOworCQkJY2gtPnRyeV9tb2QgPSAzOworCQl9CisJCWJyZWFrOworCWNhc2UgUFNFVl9SU1BfU0lMT0ZGOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBSU1BfU0lMT0ZGXG4iLCBjaC0+aXMtPm5hbWUpOworCQlicmVhazsKKwljYXNlIFBTRVZfUlNQX0ZDRVJSOgorCQlpZiAoY2gtPnN0YXRlID09IFNURkFYX0xJTkUpIHsKKwkJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IFJTUF9GQ0VSUiB0cnkgJWRcbiIsCisJCQkJY2gtPmlzLT5uYW1lLCBjaC0+dHJ5X21vZCk7CisJCQlpZiAoY2gtPnRyeV9tb2QtLSkgeworCQkJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1BVTVBDVFJMLAorCQkJCQljaC0+Y21kLCAxLCAmY2gtPm1vZCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgUlNQX0ZDRVJSXG4iLCBjaC0+aXMtPm5hbWUpOworCQljaC0+c3RhdGUgPSBTVEZBWF9FU0NBUEU7CisJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1BVTVBDVFJMLCBQQ1RSTF9DTURfRVNDLAorCQkJMCwgTlVMTCk7CisJCWRlbGl2ZXJfc3RhdHVzKGNoLCBIV19NT0RfRkNFUlJPUik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwordm9pZAorbUlTRE5pc2FyX2lycShzdHJ1Y3QgaXNhcl9odyAqaXNhcikKK3sKKwlzdHJ1Y3QgaXNhcl9jaCAqY2g7CisKKwlnZXRfaXJxX2luZm9zKGlzYXIpOworCXN3aXRjaCAoaXNhci0+aWlzICYgSVNBUl9JSVNfTVNDTVNEKSB7CisJY2FzZSBJU0FSX0lJU19SREFUQToKKwkJY2ggPSBzZWxfYmNoX2lzYXIoaXNhciwgaXNhci0+aWlzID4+IDYpOworCQlpZiAoY2gpCisJCQlpc2FyX3Jjdl9mcmFtZShjaCk7CisJCWVsc2UgeworCQkJcHJfZGVidWcoIiVzOiBJU0FSIHNwdXJpb3VzIElJU19SREFUQSAleC8leC8leFxuIiwKKwkJCQlpc2FyLT5uYW1lLCBpc2FyLT5paXMsIGlzYXItPmNtc2IsCisJCQkJaXNhci0+Y2xzYik7CisJCQlpc2FyLT53cml0ZV9yZWcoaXNhci0+aHcsIElTQVJfSUlBLCAwKTsKKwkJfQorCQlicmVhazsKKwljYXNlIElTQVJfSUlTX0dTVEVWOgorCQlpc2FyLT53cml0ZV9yZWcoaXNhci0+aHcsIElTQVJfSUlBLCAwKTsKKwkJaXNhci0+YnN0YXQgfD0gaXNhci0+Y21zYjsKKwkJY2hlY2tfc2VuZChpc2FyLCBpc2FyLT5jbXNiKTsKKwkJYnJlYWs7CisJY2FzZSBJU0FSX0lJU19CU1RFVjoKKyNpZmRlZiBFUlJPUl9TVEFUSVNUSUMKKwkJY2ggPSBzZWxfYmNoX2lzYXIoaXNhciwgaXNhci0+aWlzID4+IDYpOworCQlpZiAoY2gpIHsKKwkJCWlmIChpc2FyLT5jbXNiID09IEJTVEVWX1RCTykKKwkJCQljaC0+YmNoLmVycl90eCsrOworCQkJaWYgKGlzYXItPmNtc2IgPT0gQlNURVZfUkJPKQorCQkJCWNoLT5iY2guZXJyX3JkbysrOworCQl9CisjZW5kaWYKKwkJcHJfZGVidWcoIiVzOiBCdWZmZXIgU1RFViBkcGF0aCVkIG1zYigleClcbiIsCisJCQlpc2FyLT5uYW1lLCBpc2FyLT5paXM+PjYsIGlzYXItPmNtc2IpOworCQlpc2FyLT53cml0ZV9yZWcoaXNhci0+aHcsIElTQVJfSUlBLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBJU0FSX0lJU19QU1RFVjoKKwkJY2ggPSBzZWxfYmNoX2lzYXIoaXNhciwgaXNhci0+aWlzID4+IDYpOworCQlpZiAoY2gpIHsKKwkJCXJjdl9tYm94KGlzYXIsIE5VTEwpOworCQkJaWYgKGNoLT5iY2guc3RhdGUgPT0gSVNETl9QX0JfTU9ERU1fQVNZTkMpCisJCQkJaXNhcl9wdW1wX3N0YXRldl9tb2RlbShjaCwgaXNhci0+Y21zYik7CisJCQllbHNlIGlmIChjaC0+YmNoLnN0YXRlID09IElTRE5fUF9CX1QzMF9GQVgpCisJCQkJaXNhcl9wdW1wX3N0YXRldl9mYXgoY2gsIGlzYXItPmNtc2IpOworCQkJZWxzZSBpZiAoY2gtPmJjaC5zdGF0ZSA9PSBJU0ROX1BfQl9SQVcpIHsKKwkJCQlpbnQJdHQ7CisJCQkJdHQgPSBpc2FyLT5jbXNiIHwgMHgzMDsKKwkJCQlpZiAodHQgPT0gMHgzZSkKKwkJCQkJdHQgPSAnKic7CisJCQkJZWxzZSBpZiAodHQgPT0gMHgzZikKKwkJCQkJdHQgPSAnIyc7CisJCQkJZWxzZSBpZiAodHQgPiAnOScpCisJCQkJCXR0ICs9IDc7CisJCQkJdHQgfD0gRFRNRl9UT05FX1ZBTDsKKwkJCQlfcXVldWVfZGF0YSgmY2gtPmJjaC5jaCwgUEhfQ09OVFJPTF9JTkQsCisJCQkJCU1JU0ROX0lEX0FOWSwgc2l6ZW9mKHR0KSwgJnR0LAorCQkJCQlHRlBfQVRPTUlDKTsKKwkJCX0gZWxzZQorCQkJCXByX2RlYnVnKCIlczogSVNBUiBJSVNfUFNURVYgcG0gJWQgc3RhICV4XG4iLAorCQkJCQlpc2FyLT5uYW1lLCBjaC0+YmNoLnN0YXRlLAorCQkJCQlpc2FyLT5jbXNiKTsKKwkJfSBlbHNlIHsKKwkJCXByX2RlYnVnKCIlczogSVNBUiBzcHVyaW91cyBJSVNfUFNURVYgJXgvJXgvJXhcbiIsCisJCQkJaXNhci0+bmFtZSwgaXNhci0+aWlzLCBpc2FyLT5jbXNiLAorCQkJCWlzYXItPmNsc2IpOworCQkJaXNhci0+d3JpdGVfcmVnKGlzYXItPmh3LCBJU0FSX0lJQSwgMCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJU0FSX0lJU19QU1RSU1A6CisJCWNoID0gc2VsX2JjaF9pc2FyKGlzYXIsIGlzYXItPmlpcyA+PiA2KTsKKwkJaWYgKGNoKSB7CisJCQlyY3ZfbWJveChpc2FyLCBOVUxMKTsKKwkJCWlzYXJfcHVtcF9zdGF0dXNfcnNwKGNoKTsKKwkJfSBlbHNlIHsKKwkJCXByX2RlYnVnKCIlczogSVNBUiBzcHVyaW91cyBJSVNfUFNUUlNQICV4LyV4LyV4XG4iLAorCQkJCWlzYXItPm5hbWUsIGlzYXItPmlpcywgaXNhci0+Y21zYiwKKwkJCQlpc2FyLT5jbHNiKTsKKwkJCWlzYXItPndyaXRlX3JlZyhpc2FyLT5odywgSVNBUl9JSUEsIDApOworCQl9CisJCWJyZWFrOworCWNhc2UgSVNBUl9JSVNfRElBRzoKKwljYXNlIElTQVJfSUlTX0JTVFJTUDoKKwljYXNlIElTQVJfSUlTX0lPTTJSU1A6CisJCXJjdl9tYm94KGlzYXIsIE5VTEwpOworCQlicmVhazsKKwljYXNlIElTQVJfSUlTX0lOVk1TRzoKKwkJcmN2X21ib3goaXNhciwgTlVMTCk7CisJCXByX2RlYnVnKCIlczogaW52YWxpZCBtc2cgaGlzOiV4XG4iLCBpc2FyLT5uYW1lLCBpc2FyLT5jbXNiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmN2X21ib3goaXNhciwgTlVMTCk7CisJCXByX2RlYnVnKCIlczogdW5oYW5kbGVkIG1zZyBpaXMoJXgpIGN0cmwoJXgvJXgpXG4iLAorCQkJaXNhci0+bmFtZSwgaXNhci0+aWlzLCBpc2FyLT5jbXNiLCBpc2FyLT5jbHNiKTsKKwkJYnJlYWs7CisJfQorfQorRVhQT1JUX1NZTUJPTChtSVNETmlzYXJfaXJxKTsKKworc3RhdGljIHZvaWQKK2Z0aW1lcl9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaXNhcl9jaCAqY2ggPSAoc3RydWN0IGlzYXJfY2ggKilkYXRhOworCisJcHJfZGVidWcoIiVzOiBmdGltZXIgZmxhZ3MgJWx4XG4iLCBjaC0+aXMtPm5hbWUsIGNoLT5iY2guRmxhZ3MpOworCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfRlRJX1JVTiwgJmNoLT5iY2guRmxhZ3MpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0xMX0NPTk4sICZjaC0+YmNoLkZsYWdzKSkKKwkJZGVsaXZlcl9zdGF0dXMoY2gsIEhXX01PRF9DT05ORUNUKTsKK30KKworc3RhdGljIHZvaWQKK3NldHVwX3B1bXAoc3RydWN0IGlzYXJfY2ggKmNoKSB7CisJdTggZHBzID0gU0VUX0RQUyhjaC0+ZHBhdGgpOworCXU4IGN0cmwsIHBhcmFtWzZdOworCisJc3dpdGNoIChjaC0+YmNoLnN0YXRlKSB7CisJY2FzZSBJU0ROX1BfTk9ORToKKwljYXNlIElTRE5fUF9CX1JBVzoKKwljYXNlIElTRE5fUF9CX0hETEM6CisJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1BVTVBDRkcsIFBNT0RfQllQQVNTLCAwLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBJU0ROX1BfQl9MMkRUTUY6CisJCWlmICh0ZXN0X2JpdChGTEdfRFRNRlNFTkQsICZjaC0+YmNoLkZsYWdzKSkgeworCQkJcGFyYW1bMF0gPSA1OyAvKiBUT0EgNSBkYiAqLworCQkJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfUFVNUENGRywKKwkJCQlQTU9EX0RUTUZfVFJBTlMsIDEsIHBhcmFtKTsKKwkJfSBlbHNlIHsKKwkJCXBhcmFtWzBdID0gNDA7IC8qIFJFTCAtNDYgZGJtICovCisJCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QVU1QQ0ZHLAorCQkJCVBNT0RfRFRNRiwgMSwgcGFyYW0pOworCQl9CisJY2FzZSBJU0ROX1BfQl9NT0RFTV9BU1lOQzoKKwkJY3RybCA9IFBNT0RfREFUQU1PREVNOworCQlpZiAodGVzdF9iaXQoRkxHX09SSUdJTiwgJmNoLT5iY2guRmxhZ3MpKSB7CisJCQljdHJsIHw9IFBDVFJMX09SSUc7CisJCQlwYXJhbVs1XSA9IFBWMzJQNl9DVE47CisJCX0gZWxzZSB7CisJCQlwYXJhbVs1XSA9IFBWMzJQNl9BVE47CisJCX0KKwkJcGFyYW1bMF0gPSA2OyAvKiA2IGRiICovCisJCXBhcmFtWzFdID0gUFYzMlAyX1YyM1IgfCBQVjMyUDJfVjIyQSB8IFBWMzJQMl9WMjJCIHwKKwkJCVBWMzJQMl9WMjJDIHwgUFYzMlAyX1YyMSB8IFBWMzJQMl9CRUw7CisJCXBhcmFtWzJdID0gUFYzMlAzX0FNT0QgfCBQVjMyUDNfVjMyQiB8IFBWMzJQM19WMjNCOworCQlwYXJhbVszXSA9IFBWMzJQNF9VVDE0NDsKKwkJcGFyYW1bNF0gPSBQVjMyUDVfVVQxNDQ7CisJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1BVTVBDRkcsIGN0cmwsIDYsIHBhcmFtKTsKKwkJYnJlYWs7CisJY2FzZSBJU0ROX1BfQl9UMzBfRkFYOgorCQljdHJsID0gUE1PRF9GQVg7CisJCWlmICh0ZXN0X2JpdChGTEdfT1JJR0lOLCAmY2gtPmJjaC5GbGFncykpIHsKKwkJCWN0cmwgfD0gUENUUkxfT1JJRzsKKwkJCXBhcmFtWzFdID0gUEZBWFAyX0NUTjsKKwkJfSBlbHNlIHsKKwkJCXBhcmFtWzFdID0gUEZBWFAyX0FUTjsKKwkJfQorCQlwYXJhbVswXSA9IDY7IC8qIDYgZGIgKi8KKwkJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfUFVNUENGRywgY3RybCwgMiwgcGFyYW0pOworCQljaC0+c3RhdGUgPSBTVEZBWF9OVUxMOworCQljaC0+bmV3Y21kID0gMDsKKwkJY2gtPm5ld21vZCA9IDA7CisJCXRlc3RfYW5kX3NldF9iaXQoRkxHX0ZUSV9SVU4sICZjaC0+YmNoLkZsYWdzKTsKKwkJYnJlYWs7CisJfQorCXVkZWxheSgxMDAwKTsKKwlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QU1RSRVEsIDAsIDAsIE5VTEwpOworCXVkZWxheSgxMDAwKTsKK30KKworc3RhdGljIHZvaWQKK3NldHVwX3NhcnQoc3RydWN0IGlzYXJfY2ggKmNoKSB7CisJdTggZHBzID0gU0VUX0RQUyhjaC0+ZHBhdGgpOworCXU4IGN0cmwsIHBhcmFtWzJdID0gezAsIDB9OworCisJc3dpdGNoIChjaC0+YmNoLnN0YXRlKSB7CisJY2FzZSBJU0ROX1BfTk9ORToKKwkJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfU0FSVENGRywgU01PREVfRElTQUJMRSwKKwkJCTAsIE5VTEwpOworCQlicmVhazsKKwljYXNlIElTRE5fUF9CX1JBVzoKKwljYXNlIElTRE5fUF9CX0wyRFRNRjoKKwkJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfU0FSVENGRywgU01PREVfQklOQVJZLAorCQkJMiwgcGFyYW0pOworCQlicmVhazsKKwljYXNlIElTRE5fUF9CX0hETEM6CisJY2FzZSBJU0ROX1BfQl9UMzBfRkFYOgorCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19TQVJUQ0ZHLCBTTU9ERV9IRExDLAorCQkJMSwgcGFyYW0pOworCQlicmVhazsKKwljYXNlIElTRE5fUF9CX01PREVNX0FTWU5DOgorCQljdHJsID0gU01PREVfVjE0IHwgU0NUUkxfSERNQ19CT1RIOworCQlwYXJhbVswXSA9IFNfUDFfQ0hTXzg7CisJCXBhcmFtWzFdID0gU19QMl9CRlRfREVGOworCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19TQVJUQ0ZHLCBjdHJsLCAyLCBwYXJhbSk7CisJCWJyZWFrOworCX0KKwl1ZGVsYXkoMTAwMCk7CisJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfQlNUUkVRLCAwLCAwLCBOVUxMKTsKKwl1ZGVsYXkoMTAwMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXR1cF9pb20yKHN0cnVjdCBpc2FyX2NoICpjaCkgeworCXU4IGRwcyA9IFNFVF9EUFMoY2gtPmRwYXRoKTsKKwl1OCBjbXNiID0gSU9NX0NUUkxfRU5BLCBtc2dbNV0gPSB7SU9NX1AxX1RYRCwgMCwgMCwgMCwgMH07CisKKwlpZiAoY2gtPmJjaC5uciA9PSAyKSB7CisJCW1zZ1sxXSA9IDE7CisJCW1zZ1szXSA9IDE7CisJfQorCXN3aXRjaCAoY2gtPmJjaC5zdGF0ZSkgeworCWNhc2UgSVNETl9QX05PTkU6CisJCWNtc2IgPSAwOworCQkvKiBkdW1teSBzbG90ICovCisJCW1zZ1sxXSA9IGNoLT5kcGF0aCArIDI7CisJCW1zZ1szXSA9IGNoLT5kcGF0aCArIDI7CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfUkFXOgorCWNhc2UgSVNETl9QX0JfSERMQzoKKwkJYnJlYWs7CisJY2FzZSBJU0ROX1BfQl9NT0RFTV9BU1lOQzoKKwljYXNlIElTRE5fUF9CX1QzMF9GQVg6CisJCWNtc2IgfD0gSU9NX0NUUkxfUkNWOworCWNhc2UgSVNETl9QX0JfTDJEVE1GOgorCQlpZiAodGVzdF9iaXQoRkxHX0RUTUZTRU5ELCAmY2gtPmJjaC5GbGFncykpCisJCQljbXNiIHw9IElPTV9DVFJMX1JDVjsKKwkJY21zYiB8PSBJT01fQ1RSTF9BTEFXOworCQlicmVhazsKKwl9CisJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfSU9NMkNGRywgY21zYiwgNSwgbXNnKTsKKwl1ZGVsYXkoMTAwMCk7CisJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfSU9NMlJFUSwgMCwgMCwgTlVMTCk7CisJdWRlbGF5KDEwMDApOworfQorCitzdGF0aWMgaW50Cittb2RlaXNhcihzdHJ1Y3QgaXNhcl9jaCAqY2gsIHUzMiBicHJvdG9jb2wpCit7CisJLyogSGVyZSB3ZSBhcmUgc2VsZWN0aW5nIHRoZSBiZXN0IGRhdGFwYXRoIGZvciByZXF1ZXN0ZWQgcHJvdG9jb2wgKi8KKwlpZiAoY2gtPmJjaC5zdGF0ZSA9PSBJU0ROX1BfTk9ORSkgeyAvKiBOZXcgU2V0dXAgKi8KKwkJc3dpdGNoIChicHJvdG9jb2wpIHsKKwkJY2FzZSBJU0ROX1BfTk9ORTogLyogaW5pdCAqLworCQkJaWYgKCFjaC0+ZHBhdGgpCisJCQkJLyogbm8gaW5pdCBmb3IgZHBhdGggMCAqLworCQkJCXJldHVybiAwOworCQkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19IRExDLCAmY2gtPmJjaC5GbGFncyk7CisJCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmY2gtPmJjaC5GbGFncyk7CisJCQlicmVhazsKKwkJY2FzZSBJU0ROX1BfQl9SQVc6CisJCWNhc2UgSVNETl9QX0JfSERMQzoKKwkJCS8qIGJlc3QgaXMgZGF0YXBhdGggMiAqLworCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KElTQVJfRFAyX1VTRSwgJmNoLT5pcy0+RmxhZ3MpKQorCQkJCWNoLT5kcGF0aCA9IDI7CisJCQllbHNlIGlmICghdGVzdF9hbmRfc2V0X2JpdChJU0FSX0RQMV9VU0UsCisJCQkgICAgJmNoLT5pcy0+RmxhZ3MpKQorCQkJCWNoLT5kcGF0aCA9IDE7CisJCQllbHNlIHsKKwkJCQlwcl9pbmZvKCJtb2RlaXNhciBib3RoIHBhdGhlcyBpbiB1c2VcbiIpOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CisJCQlpZiAoYnByb3RvY29sID09IElTRE5fUF9CX0hETEMpCisJCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfSERMQywgJmNoLT5iY2guRmxhZ3MpOworCQkJZWxzZQorCQkJCXRlc3RfYW5kX3NldF9iaXQoRkxHX1RSQU5TUEFSRU5ULAorCQkJCQkmY2gtPmJjaC5GbGFncyk7CisJCQlicmVhazsKKwkJY2FzZSBJU0ROX1BfQl9NT0RFTV9BU1lOQzoKKwkJY2FzZSBJU0ROX1BfQl9UMzBfRkFYOgorCQljYXNlIElTRE5fUF9CX0wyRFRNRjoKKwkJCS8qIG9ubHkgZGF0YXBhdGggMSAqLworCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KElTQVJfRFAxX1VTRSwgJmNoLT5pcy0+RmxhZ3MpKQorCQkJCWNoLT5kcGF0aCA9IDE7CisJCQllbHNlIHsKKwkJCQlwcl9pbmZvKCIlczogSVNBUiBtb2RlaXNhciBhbmFsb2cgZnVuY3Rpb25zIgorCQkJCQkib25seSB3aXRoIERQMVxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcl9pbmZvKCIlczogcHJvdG9jb2wgbm90IGtub3duICV4XG4iLCBjaC0+aXMtPm5hbWUsCisJCQkJYnByb3RvY29sKTsKKwkJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisJCX0KKwl9CisJcHJfZGVidWcoIiVzOiBJU0FSIGNoJWQgZHAlZCBwcm90b2NvbCAleC0+JXhcbiIsIGNoLT5pcy0+bmFtZSwKKwkJY2gtPmJjaC5uciwgY2gtPmRwYXRoLCBjaC0+YmNoLnN0YXRlLCBicHJvdG9jb2wpOworCWNoLT5iY2guc3RhdGUgPSBicHJvdG9jb2w7CisJc2V0dXBfcHVtcChjaCk7CisJc2V0dXBfaW9tMihjaCk7CisJc2V0dXBfc2FydChjaCk7CisJaWYgKGNoLT5iY2guc3RhdGUgPT0gSVNETl9QX05PTkUpIHsKKwkJLyogQ2xlYXIgcmVzb3VyY2VzICovCisJCWlmIChjaC0+ZHBhdGggPT0gMSkKKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChJU0FSX0RQMV9VU0UsICZjaC0+aXMtPkZsYWdzKTsKKwkJZWxzZSBpZiAoY2gtPmRwYXRoID09IDIpCisJCQl0ZXN0X2FuZF9jbGVhcl9iaXQoSVNBUl9EUDJfVVNFLCAmY2gtPmlzLT5GbGFncyk7CisJCWNoLT5kcGF0aCA9IDA7CisJCWNoLT5pcy0+Y3RybChjaC0+aXMtPmh3LCBIV19ERUFDVF9JTkQsIGNoLT5iY2gubnIpOworCX0gZWxzZQorCQljaC0+aXMtPmN0cmwoY2gtPmlzLT5odywgSFdfQUNUSVZBVEVfSU5ELCBjaC0+YmNoLm5yKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2lzYXJfcHVtcF9jbWQoc3RydWN0IGlzYXJfY2ggKmNoLCB1MzIgY21kLCB1OCBwYXJhKQoreworCXU4IGRwcyA9IFNFVF9EUFMoY2gtPmRwYXRoKTsKKwl1OCBjdHJsID0gMCwgbm9tID0gMCwgcDEgPSAwOworCisJcHJfZGVidWcoIiVzOiBpc2FyX3B1bXBfY21kICV4LyV4IHN0YXRlKCV4KVxuIiwKKwkJY2gtPmlzLT5uYW1lLCBjbWQsIHBhcmEsIGNoLT5iY2guc3RhdGUpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBIV19NT0RfRlRNOgorCQlpZiAoY2gtPnN0YXRlID09IFNURkFYX1JFQURZKSB7CisJCQlwMSA9IHBhcmE7CisJCQljdHJsID0gUENUUkxfQ01EX0ZUTTsKKwkJCW5vbSA9IDE7CisJCQljaC0+c3RhdGUgPSBTVEZBWF9MSU5FOworCQkJY2gtPmNtZCA9IGN0cmw7CisJCQljaC0+bW9kID0gcGFyYTsKKwkJCWNoLT5uZXdtb2QgPSAwOworCQkJY2gtPm5ld2NtZCA9IDA7CisJCQljaC0+dHJ5X21vZCA9IDM7CisJCX0gZWxzZSBpZiAoKGNoLT5zdGF0ZSA9PSBTVEZBWF9BQ1RJVikgJiYKKwkJICAgIChjaC0+Y21kID09IFBDVFJMX0NNRF9GVE0pICYmIChjaC0+bW9kID09IHBhcmEpKQorCQkJZGVsaXZlcl9zdGF0dXMoY2gsIEhXX01PRF9DT05ORUNUKTsKKwkJZWxzZSB7CisJCQljaC0+bmV3bW9kID0gcGFyYTsKKwkJCWNoLT5uZXdjbWQgPSBQQ1RSTF9DTURfRlRNOworCQkJbm9tID0gMDsKKwkJCWN0cmwgPSBQQ1RSTF9DTURfRVNDOworCQkJY2gtPnN0YXRlID0gU1RGQVhfRVNDQVBFOworCQl9CisJCWJyZWFrOworCWNhc2UgSFdfTU9EX0ZUSDoKKwkJaWYgKGNoLT5zdGF0ZSA9PSBTVEZBWF9SRUFEWSkgeworCQkJcDEgPSBwYXJhOworCQkJY3RybCA9IFBDVFJMX0NNRF9GVEg7CisJCQlub20gPSAxOworCQkJY2gtPnN0YXRlID0gU1RGQVhfTElORTsKKwkJCWNoLT5jbWQgPSBjdHJsOworCQkJY2gtPm1vZCA9IHBhcmE7CisJCQljaC0+bmV3bW9kID0gMDsKKwkJCWNoLT5uZXdjbWQgPSAwOworCQkJY2gtPnRyeV9tb2QgPSAzOworCQl9IGVsc2UgaWYgKChjaC0+c3RhdGUgPT0gU1RGQVhfQUNUSVYpICYmCisJCSAgICAoY2gtPmNtZCA9PSBQQ1RSTF9DTURfRlRIKSAmJiAoY2gtPm1vZCA9PSBwYXJhKSkKKwkJCQlkZWxpdmVyX3N0YXR1cyhjaCwgSFdfTU9EX0NPTk5FQ1QpOworCQllbHNlIHsKKwkJCWNoLT5uZXdtb2QgPSBwYXJhOworCQkJY2gtPm5ld2NtZCA9IFBDVFJMX0NNRF9GVEg7CisJCQlub20gPSAwOworCQkJY3RybCA9IFBDVFJMX0NNRF9FU0M7CisJCQljaC0+c3RhdGUgPSBTVEZBWF9FU0NBUEU7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBIV19NT0RfRlJNOgorCQlpZiAoY2gtPnN0YXRlID09IFNURkFYX1JFQURZKSB7CisJCQlwMSA9IHBhcmE7CisJCQljdHJsID0gUENUUkxfQ01EX0ZSTTsKKwkJCW5vbSA9IDE7CisJCQljaC0+c3RhdGUgPSBTVEZBWF9MSU5FOworCQkJY2gtPmNtZCA9IGN0cmw7CisJCQljaC0+bW9kID0gcGFyYTsKKwkJCWNoLT5uZXdtb2QgPSAwOworCQkJY2gtPm5ld2NtZCA9IDA7CisJCQljaC0+dHJ5X21vZCA9IDM7CisJCX0gZWxzZSBpZiAoKGNoLT5zdGF0ZSA9PSBTVEZBWF9BQ1RJVikgJiYKKwkJICAgIChjaC0+Y21kID09IFBDVFJMX0NNRF9GUk0pICYmIChjaC0+bW9kID09IHBhcmEpKQorCQkJZGVsaXZlcl9zdGF0dXMoY2gsIEhXX01PRF9DT05ORUNUKTsKKwkJZWxzZSB7CisJCQljaC0+bmV3bW9kID0gcGFyYTsKKwkJCWNoLT5uZXdjbWQgPSBQQ1RSTF9DTURfRlJNOworCQkJbm9tID0gMDsKKwkJCWN0cmwgPSBQQ1RSTF9DTURfRVNDOworCQkJY2gtPnN0YXRlID0gU1RGQVhfRVNDQVBFOworCQl9CisJCWJyZWFrOworCWNhc2UgSFdfTU9EX0ZSSDoKKwkJaWYgKGNoLT5zdGF0ZSA9PSBTVEZBWF9SRUFEWSkgeworCQkJcDEgPSBwYXJhOworCQkJY3RybCA9IFBDVFJMX0NNRF9GUkg7CisJCQlub20gPSAxOworCQkJY2gtPnN0YXRlID0gU1RGQVhfTElORTsKKwkJCWNoLT5jbWQgPSBjdHJsOworCQkJY2gtPm1vZCA9IHBhcmE7CisJCQljaC0+bmV3bW9kID0gMDsKKwkJCWNoLT5uZXdjbWQgPSAwOworCQkJY2gtPnRyeV9tb2QgPSAzOworCQl9IGVsc2UgaWYgKChjaC0+c3RhdGUgPT0gU1RGQVhfQUNUSVYpICYmCisJCSAgICAoY2gtPmNtZCA9PSBQQ1RSTF9DTURfRlJIKSAmJiAoY2gtPm1vZCA9PSBwYXJhKSkKKwkJCWRlbGl2ZXJfc3RhdHVzKGNoLCBIV19NT0RfQ09OTkVDVCk7CisJCWVsc2UgeworCQkJY2gtPm5ld21vZCA9IHBhcmE7CisJCQljaC0+bmV3Y21kID0gUENUUkxfQ01EX0ZSSDsKKwkJCW5vbSA9IDA7CisJCQljdHJsID0gUENUUkxfQ01EX0VTQzsKKwkJCWNoLT5zdGF0ZSA9IFNURkFYX0VTQ0FQRTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBDVFJMX0NNRF9URFRNRjoKKwkJcDEgPSBwYXJhOworCQlub20gPSAxOworCQljdHJsID0gUENUUkxfQ01EX1REVE1GOworCQlicmVhazsKKwl9CisJaWYgKGN0cmwpCisJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1BVTVBDVFJMLCBjdHJsLCBub20sICZwMSk7Cit9CisKK3N0YXRpYyB2b2lkCitpc2FyX3NldHVwKHN0cnVjdCBpc2FyX2h3ICppc2FyKQoreworCXU4IG1zZzsKKwlpbnQgaTsKKworCS8qIERwYXRoIDEsIDIgKi8KKwltc2cgPSA2MTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCS8qIEJ1ZmZlciBDb25maWcgKi8KKwkJc2VuZF9tYm94KGlzYXIsIChpID8gSVNBUl9ISVNfRFBTMiA6IElTQVJfSElTX0RQUzEpIHwKKwkJCUlTQVJfSElTX1AxMkNGRywgNCwgMSwgJm1zZyk7CisJCWlzYXItPmNoW2ldLm1tbCA9IG1zZzsKKwkJaXNhci0+Y2hbaV0uYmNoLnN0YXRlID0gMDsKKwkJaXNhci0+Y2hbaV0uZHBhdGggPSBpICsgMTsKKwkJbW9kZWlzYXIoJmlzYXItPmNoW2ldLCBJU0ROX1BfTk9ORSk7CisJfQorfQorCitzdGF0aWMgaW50Citpc2FyX2wybDEoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGJjaGFubmVsICpiY2ggPSBjb250YWluZXJfb2YoY2gsIHN0cnVjdCBiY2hhbm5lbCwgY2gpOworCXN0cnVjdCBpc2FyX2NoICppY2ggPSBjb250YWluZXJfb2YoYmNoLCBzdHJ1Y3QgaXNhcl9jaCwgYmNoKTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgbUlTRE5oZWFkICpoaCA9IG1JU0ROX0hFQURfUChza2IpOworCXUzMiBpZCwgKnZhbDsKKwl1X2xvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKGhoLT5wcmltKSB7CisJY2FzZSBQSF9EQVRBX1JFUToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoaWNoLT5pcy0+aHdsb2NrLCBmbGFncyk7CisJCXJldCA9IGJjaGFubmVsX3NlbmRkYXRhKGJjaCwgc2tiKTsKKwkJaWYgKHJldCA+IDApIHsgLyogZGlyZWN0IFRYICovCisJCQlpZCA9IGhoLT5pZDsgLyogc2tiIGNhbiBiZSBmcmVlZCAqLworCQkJcmV0ID0gMDsKKwkJCWlzYXJfZmlsbF9maWZvKGljaCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGljaC0+aXMtPmh3bG9jaywgZmxhZ3MpOworCQkJaWYgKCF0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZiY2gtPkZsYWdzKSkKKwkJCQlxdWV1ZV9jaF9mcmFtZShjaCwgUEhfREFUQV9DTkYsIGlkLCBOVUxMKTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGljaC0+aXMtPmh3bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OworCWNhc2UgUEhfQUNUSVZBVEVfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZShpY2gtPmlzLT5od2xvY2ssIGZsYWdzKTsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEZMR19BQ1RJVkUsICZiY2gtPkZsYWdzKSkKKwkJCXJldCA9IG1vZGVpc2FyKGljaCwgY2gtPnByb3RvY29sKTsKKwkJZWxzZQorCQkJcmV0ID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpY2gtPmlzLT5od2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFyZXQpCisJCQlfcXVldWVfZGF0YShjaCwgUEhfQUNUSVZBVEVfSU5ELCBNSVNETl9JRF9BTlksIDAsCisJCQkJTlVMTCwgR0ZQX0tFUk5FTCk7CisJCWJyZWFrOworCWNhc2UgUEhfREVBQ1RJVkFURV9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKGljaC0+aXMtPmh3bG9jaywgZmxhZ3MpOworCQltSVNETl9jbGVhcl9iY2hhbm5lbChiY2gpOworCQltb2RlaXNhcihpY2gsIElTRE5fUF9OT05FKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpY2gtPmlzLT5od2xvY2ssIGZsYWdzKTsKKwkJX3F1ZXVlX2RhdGEoY2gsIFBIX0RFQUNUSVZBVEVfSU5ELCBNSVNETl9JRF9BTlksIDAsCisJCQlOVUxMLCBHRlBfS0VSTkVMKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBQSF9DT05UUk9MX1JFUToKKwkJdmFsID0gKHUzMiAqKXNrYi0+ZGF0YTsKKwkJcHJfZGVidWcoIiVzOiBQSF9DT05UUk9MIHwgUkVRVUVTVCAleC8leFxuIiwgaWNoLT5pcy0+bmFtZSwKKwkJCWhoLT5pZCwgKnZhbCk7CisJCWlmICgoaGgtPmlkID09IDApICYmICgoKnZhbCAmIH5EVE1GX1RPTkVfTUFTSykgPT0KKwkJICAgIERUTUZfVE9ORV9WQUwpKSB7CisJCQlpZiAoYmNoLT5zdGF0ZSA9PSBJU0ROX1BfQl9MMkRUTUYpIHsKKwkJCQljaGFyIHR0ID0gKnZhbCAmIERUTUZfVE9ORV9NQVNLOworCisJCQkJaWYgKHR0ID09ICcqJykKKwkJCQkJdHQgPSAweDFlOworCQkJCWVsc2UgaWYgKHR0ID09ICcjJykKKwkJCQkJdHQgPSAweDFmOworCQkJCWVsc2UgaWYgKHR0ID4gJzknKQorCQkJCQl0dCAtPSA3OworCQkJCXR0ICY9IDB4MWY7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoaWNoLT5pcy0+aHdsb2NrLCBmbGFncyk7CisJCQkJaXNhcl9wdW1wX2NtZChpY2gsIFBDVFJMX0NNRF9URFRNRiwgdHQpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaWNoLT5pcy0+aHdsb2NrLCBmbGFncyk7CisJCQl9IGVsc2UgeworCQkJCXByX2luZm8oIiVzOiBEVE1GIHNlbmQgd3JvbmcgcHJvdG9jb2wgJXhcbiIsCisJCQkJCV9fZnVuY19fLCBiY2gtPnN0YXRlKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfSBlbHNlIGlmICgoaGgtPmlkID09IEhXX01PRF9GUk0pIHx8IChoaC0+aWQgPT0gSFdfTU9EX0ZSSCkgfHwKKwkJICAgIChoaC0+aWQgPT0gSFdfTU9EX0ZUTSkgfHwgKGhoLT5pZCA9PSBIV19NT0RfRlRIKSkgeworCQkJZm9yIChpZCA9IDA7IGlkIDwgRkFYTU9EQ05UOyBpZCsrKQorCQkJCWlmIChmYXhtb2R1bGF0aW9uW2lkXSA9PSAqdmFsKQorCQkJCQlicmVhazsKKwkJCWlmICgoRkFYTU9EQ05UID4gaWQpICYmCisJCQkgICAgdGVzdF9iaXQoRkxHX0lOSVRJQUxJWkVELCAmYmNoLT5GbGFncykpIHsKKwkJCQlwcl9kZWJ1ZygiJXM6IGlzYXI6IG5ldyBtb2RcbiIsIGljaC0+aXMtPm5hbWUpOworCQkJCWlzYXJfcHVtcF9jbWQoaWNoLCBoaC0+aWQsICp2YWwpOworCQkJCXJldCA9IDA7CisJCQl9IGVsc2UgeworCQkJCXByX2luZm8oIiVzOiB3cm9uZyBtb2R1bGF0aW9uXG4iLAorCQkJCQlpY2gtPmlzLT5uYW1lKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJfQorCQl9IGVsc2UgaWYgKGhoLT5pZCA9PSBIV19NT0RfTEFTVERBVEEpCisJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19ETEVFVFgsICZiY2gtPkZsYWdzKTsKKwkJZWxzZSB7CisJCQlwcl9pbmZvKCIlczogdW5rbm93biBQSF9DT05UUk9MX1JFUSAleFxuIiwKKwkJCQlpY2gtPmlzLT5uYW1lLCBoaC0+aWQpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJfQorCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiAlcyB1bmtub3duIHByaW0oJXgsJXgpXG4iLAorCQkJaWNoLT5pcy0+bmFtZSwgX19mdW5jX18sIGhoLT5wcmltLCBoaC0+aWQpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKwlpZiAoIXJldCkKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5uZWxfYmN0cmwoc3RydWN0IGJjaGFubmVsICpiY2gsIHN0cnVjdCBtSVNETl9jdHJsX3JlcSAqY3EpCit7CisJaW50CXJldCA9IDA7CisKKwlzd2l0Y2ggKGNxLT5vcCkgeworCWNhc2UgTUlTRE5fQ1RSTF9HRVRPUDoKKwkJY3EtPm9wID0gMDsKKwkJYnJlYWs7CisJLyogTm90aGluZyBpbXBsZW1lbnRlZCB5ZXQgKi8KKwljYXNlIE1JU0ROX0NUUkxfRklMTF9FTVBUWToKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCIlczogdW5rbm93biBPcCAleFxuIiwgX19mdW5jX18sIGNxLT5vcCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citpc2FyX2JjdHJsKHN0cnVjdCBtSVNETmNoYW5uZWwgKmNoLCB1MzIgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IGJjaGFubmVsICpiY2ggPSBjb250YWluZXJfb2YoY2gsIHN0cnVjdCBiY2hhbm5lbCwgY2gpOworCXN0cnVjdCBpc2FyX2NoICppY2ggPSBjb250YWluZXJfb2YoYmNoLCBzdHJ1Y3QgaXNhcl9jaCwgYmNoKTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwl1X2xvbmcgZmxhZ3M7CisKKwlwcl9kZWJ1ZygiJXM6ICVzIGNtZDoleCAlcFxuIiwgaWNoLT5pcy0+bmFtZSwgX19mdW5jX18sIGNtZCwgYXJnKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ0xPU0VfQ0hBTk5FTDoKKwkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19PUEVOLCAmYmNoLT5GbGFncyk7CisJCWlmICh0ZXN0X2JpdChGTEdfQUNUSVZFLCAmYmNoLT5GbGFncykpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKGljaC0+aXMtPmh3bG9jaywgZmxhZ3MpOworCQkJbUlTRE5fZnJlZWJjaGFubmVsKGJjaCk7CisJCQltb2RlaXNhcihpY2gsIElTRE5fUF9OT05FKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaWNoLT5pcy0+aHdsb2NrLCBmbGFncyk7CisJCX0gZWxzZSB7CisJCQlza2JfcXVldWVfcHVyZ2UoJmJjaC0+cnF1ZXVlKTsKKwkJCWJjaC0+cmNvdW50ID0gMDsKKwkJfQorCQljaC0+cHJvdG9jb2wgPSBJU0ROX1BfTk9ORTsKKwkJY2gtPnBlZXIgPSBOVUxMOworCQltb2R1bGVfcHV0KGljaC0+aXMtPm93bmVyKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDT05UUk9MX0NIQU5ORUw6CisJCXJldCA9IGNoYW5uZWxfYmN0cmwoYmNoLCBhcmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCIlczogJXMgdW5rbm93biBwcmltKCV4KVxuIiwKKwkJCWljaC0+aXMtPm5hbWUsIF9fZnVuY19fLCBjbWQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorZnJlZV9pc2FyKHN0cnVjdCBpc2FyX2h3ICppc2FyKQoreworCW1vZGVpc2FyKCZpc2FyLT5jaFswXSwgSVNETl9QX05PTkUpOworCW1vZGVpc2FyKCZpc2FyLT5jaFsxXSwgSVNETl9QX05PTkUpOworCWRlbF90aW1lcigmaXNhci0+Y2hbMF0uZnRpbWVyKTsKKwlkZWxfdGltZXIoJmlzYXItPmNoWzFdLmZ0aW1lcik7CisJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19JTklUSUFMSVpFRCwgJmlzYXItPmNoWzBdLmJjaC5GbGFncyk7CisJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19JTklUSUFMSVpFRCwgJmlzYXItPmNoWzFdLmJjaC5GbGFncyk7Cit9CisKK3N0YXRpYyBpbnQKK2luaXRfaXNhcihzdHJ1Y3QgaXNhcl9odyAqaXNhcikKK3sKKwlpbnQJY250ID0gMzsKKworCXdoaWxlIChjbnQtLSkgeworCQlpc2FyLT52ZXJzaW9uID0gSVNBUlZlcnNpb24oaXNhcik7CisJCWlmIChpc2FyLT5jaFswXS5iY2guZGVidWcgJiBERUJVR19IVykKKwkJCXByX25vdGljZSgiJXM6IFRlc3RpbmcgdmVyc2lvbiAlZCAoJWQgdGltZSlcbiIsCisJCQkJaXNhci0+bmFtZSwgaXNhci0+dmVyc2lvbiwgMyAtIGNudCk7CisJCWlmIChpc2FyLT52ZXJzaW9uID09IDEpCisJCQlicmVhazsKKwkJaXNhci0+Y3RybChpc2FyLT5odywgSFdfUkVTRVRfUkVRLCAwKTsKKwl9CisJaWYgKGlzYXItPnZlcnNpb24gIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaXNhci0+Y2hbMF0uZnRpbWVyLmZ1bmN0aW9uID0gJmZ0aW1lcl9oYW5kbGVyOworCWlzYXItPmNoWzBdLmZ0aW1lci5kYXRhID0gKGxvbmcpJmlzYXItPmNoWzBdOworCWluaXRfdGltZXIoJmlzYXItPmNoWzBdLmZ0aW1lcik7CisJdGVzdF9hbmRfc2V0X2JpdChGTEdfSU5JVElBTElaRUQsICZpc2FyLT5jaFswXS5iY2guRmxhZ3MpOworCWlzYXItPmNoWzFdLmZ0aW1lci5mdW5jdGlvbiA9ICZmdGltZXJfaGFuZGxlcjsKKwlpc2FyLT5jaFsxXS5mdGltZXIuZGF0YSA9IChsb25nKSZpc2FyLT5jaFsxXTsKKwlpbml0X3RpbWVyKCZpc2FyLT5jaFsxXS5mdGltZXIpOworCXRlc3RfYW5kX3NldF9iaXQoRkxHX0lOSVRJQUxJWkVELCAmaXNhci0+Y2hbMV0uYmNoLkZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraXNhcl9vcGVuKHN0cnVjdCBpc2FyX2h3ICppc2FyLCBzdHJ1Y3QgY2hhbm5lbF9yZXEgKnJxKQoreworCXN0cnVjdCBiY2hhbm5lbAkJKmJjaDsKKworCWlmIChycS0+YWRyLmNoYW5uZWwgPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocnEtPnByb3RvY29sID09IElTRE5fUF9OT05FKQorCQlyZXR1cm4gLUVJTlZBTDsKKwliY2ggPSAmaXNhci0+Y2hbcnEtPmFkci5jaGFubmVsIC0gMV0uYmNoOworCWlmICh0ZXN0X2FuZF9zZXRfYml0KEZMR19PUEVOLCAmYmNoLT5GbGFncykpCisJCXJldHVybiAtRUJVU1k7IC8qIGItY2hhbm5lbCBjYW4gYmUgb25seSBvcGVuIG9uY2UgKi8KKwl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0ZJTExFTVBUWSwgJmJjaC0+RmxhZ3MpOworCWJjaC0+Y2gucHJvdG9jb2wgPSBycS0+cHJvdG9jb2w7CisJcnEtPmNoID0gJmJjaC0+Y2g7CisJcmV0dXJuIDA7Cit9CisKK3UzMgorbUlTRE5pc2FyX2luaXQoc3RydWN0IGlzYXJfaHcgKmlzYXIsIHZvaWQgKmh3KQoreworCXUzMiByZXQsIGk7CisKKwlpc2FyLT5odyA9IGh3OworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaXNhci0+Y2hbaV0uYmNoLm5yID0gaSArIDE7CisJCW1JU0ROX2luaXRiY2hhbm5lbCgmaXNhci0+Y2hbaV0uYmNoLCBNQVhfREFUQV9NRU0pOworCQlpc2FyLT5jaFtpXS5iY2guY2gubnIgPSBpICsgMTsKKwkJaXNhci0+Y2hbaV0uYmNoLmNoLnNlbmQgPSAmaXNhcl9sMmwxOworCQlpc2FyLT5jaFtpXS5iY2guY2guY3RybCA9IGlzYXJfYmN0cmw7CisJCWlzYXItPmNoW2ldLmJjaC5odyA9IGh3OworCQlpc2FyLT5jaFtpXS5pcyA9IGlzYXI7CisJfQorCisJaXNhci0+aW5pdCA9ICZpbml0X2lzYXI7CisJaXNhci0+cmVsZWFzZSA9ICZmcmVlX2lzYXI7CisJaXNhci0+ZmlybXdhcmUgPSAmbG9hZF9maXJtd2FyZTsKKwlpc2FyLT5vcGVuID0gJmlzYXJfb3BlbjsKKworCXJldCA9CSgxIDw8IChJU0ROX1BfQl9SQVcgJiBJU0ROX1BfQl9NQVNLKSkgfAorCQkoMSA8PCAoSVNETl9QX0JfSERMQyAmIElTRE5fUF9CX01BU0spKSB8CisJCSgxIDw8IChJU0ROX1BfQl9MMkRUTUYgJiBJU0ROX1BfQl9NQVNLKSkgfAorCQkoMSA8PCAoSVNETl9QX0JfTU9ERU1fQVNZTkMgJiBJU0ROX1BfQl9NQVNLKSkgfAorCQkoMSA8PCAoSVNETl9QX0JfVDMwX0ZBWCAmIElTRE5fUF9CX01BU0spKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG1JU0ROaXNhcl9pbml0KTsKKworc3RhdGljIGludCBpc2FyX21vZF9pbml0KHZvaWQpCit7CisJcHJfbm90aWNlKCJtSVNETjogSVNBUiBkcml2ZXIgUmV2LiAlc1xuIiwgSVNBUl9SRVYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpc2FyX21vZF9jbGVhbnVwKHZvaWQpCit7CisJcHJfbm90aWNlKCJtSVNETjogSVNBUiBtb2R1bGUgdW5sb2FkZWRcbiIpOworfQorbW9kdWxlX2luaXQoaXNhcl9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChpc2FyX21vZF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9uZXRqZXQuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9uZXRqZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzFiMTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL25ldGpldC5jCkBAIC0wLDAgKzEsMTE1NiBAQAorLyoKKyAqIE5FVEpldCBtSVNETiBkcml2ZXIKKyAqCisgKiBBdXRob3IgICAgICAgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgorICogQ29weXJpZ2h0IDIwMDkgIGJ5IEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tSVNETmh3Lmg+CisjaW5jbHVkZSAiaXBhYy5oIgorI2luY2x1ZGUgImlvaGVscGVyLmgiCisjaW5jbHVkZSAibmV0amV0LmgiCisjaW5jbHVkZSA8bGludXgvaXNkbi9oZGxjLmg+CisKKyNkZWZpbmUgTkVUSkVUX1JFVgkiMi4wIgorCitlbnVtIG5qX3R5cGVzIHsKKwlORVRKRVRfU19USjMwMCwKKwlORVRKRVRfU19USjMyMCwKKwlFTlRFUk5PV19fVEozMjAsCit9OworCitzdHJ1Y3QgdGlnZXJfZG1hIHsKKwlzaXplX3QJCXNpemU7CisJdTMyCQkqc3RhcnQ7CisJaW50CQlpZHg7CisJdTMyCQlkbWFzdGFydDsKKwl1MzIJCWRtYWlycTsKKwl1MzIJCWRtYWVuZDsKKwl1MzIJCWRtYWN1cjsKK307CisKK3N0cnVjdCB0aWdlcl9odzsKKworc3RydWN0IHRpZ2VyX2NoIHsKKwlzdHJ1Y3QgYmNoYW5uZWwJCWJjaDsKKwlzdHJ1Y3QgdGlnZXJfaHcJCSpuajsKKwlpbnQJCQlpZHg7CisJaW50CQkJZnJlZTsKKwlpbnQJCQlsYXN0cng7CisJdTE2CQkJcnhzdGF0ZTsKKwl1MTYJCQl0eHN0YXRlOworCXN0cnVjdCBpc2RuaGRsY192YXJzCWhzZW5kOworCXN0cnVjdCBpc2RuaGRsY192YXJzCWhyZWN2OworCXU4CQkJKmhzYnVmOworCXU4CQkJKmhyYnVmOworfTsKKworI2RlZmluZSBUWF9JTklUCQkweDAwMDEKKyNkZWZpbmUgVFhfSURMRQkJMHgwMDAyCisjZGVmaW5lIFRYX1JVTgkJMHgwMDA0CisjZGVmaW5lIFRYX1VOREVSUlVOCTB4MDEwMAorI2RlZmluZSBSWF9PVkVSUlVOCTB4MDEwMAorCisjZGVmaW5lIExPR19TSVpFCTY0CisKK3N0cnVjdCB0aWdlcl9odyB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBwY2lfZGV2CQkqcGRldjsKKwljaGFyCQkJbmFtZVtNSVNETl9NQVhfSURMRU5dOworCWVudW0gbmpfdHlwZXMJCXR5cDsKKwlpbnQJCQlpcnE7CisJdTMyCQkJaXJxY250OworCXUzMgkJCWJhc2U7CisJc2l6ZV90CQkJYmFzZV9zOworCWRtYV9hZGRyX3QJCWRtYTsKKwl2b2lkCQkJKmRtYV9wOworCXNwaW5sb2NrX3QJCWxvY2s7CS8qIGxvY2sgSFcgKi8KKwlzdHJ1Y3QgaXNhY19odwkJaXNhYzsKKwlzdHJ1Y3QgdGlnZXJfZG1hCXNlbmQ7CisJc3RydWN0IHRpZ2VyX2RtYQlyZWN2OworCXN0cnVjdCB0aWdlcl9jaAkJYmNbMl07CisJdTgJCQljdHJscmVnOworCXU4CQkJZG1hY3RybDsKKwl1OAkJCWF1eGQ7CisJdTgJCQlsYXN0X2lzMDsKKwl1OAkJCWlycW1hc2swOworCWNoYXIJCQlsb2dbTE9HX1NJWkVdOworfTsKKworc3RhdGljIExJU1RfSEVBRChDYXJkcyk7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhjYXJkX2xvY2spOyAvKiBwcm90ZWN0IENhcmRzICovCitzdGF0aWMgdTMyIGRlYnVnOworc3RhdGljIGludCBual9jbnQ7CisKK3N0YXRpYyB2b2lkCitfc2V0X2RlYnVnKHN0cnVjdCB0aWdlcl9odyAqY2FyZCkKK3sKKwljYXJkLT5pc2FjLmRjaC5kZWJ1ZyA9IGRlYnVnOworCWNhcmQtPmJjWzBdLmJjaC5kZWJ1ZyA9IGRlYnVnOworCWNhcmQtPmJjWzFdLmJjaC5kZWJ1ZyA9IGRlYnVnOworfQorCitzdGF0aWMgaW50CitzZXRfZGVidWcoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB0aWdlcl9odyAqY2FyZDsKKworCXJldCA9IHBhcmFtX3NldF91aW50KHZhbCwga3ApOworCWlmICghcmV0KSB7CisJCXJlYWRfbG9jaygmY2FyZF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjYXJkLCAmQ2FyZHMsIGxpc3QpCisJCQlfc2V0X2RlYnVnKGNhcmQpOworCQlyZWFkX3VubG9jaygmY2FyZF9sb2NrKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworTU9EVUxFX0FVVEhPUigiS2Fyc3RlbiBLZWlsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfVkVSU0lPTihORVRKRVRfUkVWKTsKK21vZHVsZV9wYXJhbV9jYWxsKGRlYnVnLCBzZXRfZGVidWcsIHBhcmFtX2dldF91aW50LCAmZGVidWcsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJOZXRqZXQgZGVidWcgbWFzayIpOworCitzdGF0aWMgdm9pZAorbmpfZGlzYWJsZV9od2lycShzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQpCit7CisJb3V0YigwLCBjYXJkLT5iYXNlICsgTkpfSVJRTUFTSzApOworCW91dGIoMCwgY2FyZC0+YmFzZSArIE5KX0lSUU1BU0sxKTsKK30KKworCitzdGF0aWMgdTgKK1JlYWRJU0FDX25qKHZvaWQgKnAsIHU4IG9mZnNldCkKK3sKKwlzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQgPSBwOworCXU4IHJldDsKKworCWNhcmQtPmF1eGQgJj0gMHhmYzsKKwljYXJkLT5hdXhkIHw9IChvZmZzZXQgPj4gNCkgJiAzOworCW91dGIoY2FyZC0+YXV4ZCwgY2FyZC0+YmFzZSArIE5KX0FVWERBVEEpOworCXJldCA9IGluYihjYXJkLT5iYXNlICsgTkpfSVNBQ19PRkYgKyAoKG9mZnNldCAmIDB4MGYpIDw8IDIpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorV3JpdGVJU0FDX25qKHZvaWQgKnAsIHU4IG9mZnNldCwgdTggdmFsdWUpCit7CisJc3RydWN0IHRpZ2VyX2h3ICpjYXJkID0gcDsKKworCWNhcmQtPmF1eGQgJj0gMHhmYzsKKwljYXJkLT5hdXhkIHw9IChvZmZzZXQgPj4gNCkgJiAzOworCW91dGIoY2FyZC0+YXV4ZCwgY2FyZC0+YmFzZSArIE5KX0FVWERBVEEpOworCW91dGIodmFsdWUsIGNhcmQtPmJhc2UgKyBOSl9JU0FDX09GRiArICgob2Zmc2V0ICYgMHgwZikgPDwgMikpOworfQorCitzdGF0aWMgdm9pZAorUmVhZEZpRm9JU0FDX25qKHZvaWQgKnAsIHU4IG9mZnNldCwgdTggKmRhdGEsIGludCBzaXplKQoreworCXN0cnVjdCB0aWdlcl9odyAqY2FyZCA9IHA7CisKKwljYXJkLT5hdXhkICY9IDB4ZmM7CisJb3V0YihjYXJkLT5hdXhkLCBjYXJkLT5iYXNlICsgTkpfQVVYREFUQSk7CisJaW5zYihjYXJkLT5iYXNlICsgTkpfSVNBQ19PRkYsIGRhdGEsIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorV3JpdGVGaUZvSVNBQ19uaih2b2lkICpwLCB1OCBvZmZzZXQsIHU4ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQgPSBwOworCisJY2FyZC0+YXV4ZCAmPSAweGZjOworCW91dGIoY2FyZC0+YXV4ZCwgY2FyZC0+YmFzZSArIE5KX0FVWERBVEEpOworCW91dHNiKGNhcmQtPmJhc2UgKyBOSl9JU0FDX09GRiwgZGF0YSwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitmaWxsX21lbShzdHJ1Y3QgdGlnZXJfY2ggKmJjLCB1MzIgaWR4LCB1MzIgY250LCB1MzIgZmlsbCkKK3sKKwlzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQgPSBiYy0+YmNoLmh3OworCXUzMiBtYXNrID0gMHhmZiwgdmFsOworCisJcHJfZGVidWcoIiVzOiBCJTFkIGZpbGwgJTAyeCBsZW4gJWQgaWR4ICVkLyVkXG4iLCBjYXJkLT5uYW1lLAorCQliYy0+YmNoLm5yLCBmaWxsLCBjbnQsIGlkeCwgY2FyZC0+c2VuZC5pZHgpOworCWlmIChiYy0+YmNoLm5yICYgMikgeworCQlmaWxsICA8PD0gODsKKwkJbWFzayA8PD0gODsKKwl9CisJbWFzayBePSAweGZmZmZmZmZmOworCXdoaWxlIChjbnQtLSkgeworCQl2YWwgPSBjYXJkLT5zZW5kLnN0YXJ0W2lkeF07CisJCXZhbCAmPSBtYXNrOworCQl2YWwgfD0gZmlsbDsKKwkJY2FyZC0+c2VuZC5zdGFydFtpZHgrK10gPSB2YWw7CisJCWlmIChpZHggPj0gY2FyZC0+c2VuZC5zaXplKQorCQkJaWR4ID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK21vZGVfdGlnZXIoc3RydWN0IHRpZ2VyX2NoICpiYywgdTMyIHByb3RvY29sKQoreworCXN0cnVjdCB0aWdlcl9odyAqY2FyZCA9IGJjLT5iY2guaHc7CisKKwlwcl9kZWJ1ZygiJXM6IEIlMWQgcHJvdG9jb2wgJXgtLT4leFxuIiwgY2FyZC0+bmFtZSwKKwkJYmMtPmJjaC5uciwgYmMtPmJjaC5zdGF0ZSwgcHJvdG9jb2wpOworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIElTRE5fUF9OT05FOgorCQlpZiAoYmMtPmJjaC5zdGF0ZSA9PSBJU0ROX1BfTk9ORSkKKwkJCWJyZWFrOworCQlmaWxsX21lbShiYywgMCwgY2FyZC0+c2VuZC5zaXplLCAweGZmKTsKKwkJYmMtPmJjaC5zdGF0ZSA9IHByb3RvY29sOworCQkvKiBvbmx5IHN0b3AgZG1hIGFuZCBpbnRlcnJ1cHRzIGlmIGJvdGggY2hhbm5lbHMgTlVMTCAqLworCQlpZiAoKGNhcmQtPmJjWzBdLmJjaC5zdGF0ZSA9PSBJU0ROX1BfTk9ORSkgJiYKKwkJICAgIChjYXJkLT5iY1sxXS5iY2guc3RhdGUgPT0gSVNETl9QX05PTkUpKSB7CisJCQljYXJkLT5kbWFjdHJsID0gMDsKKwkJCW91dGIoY2FyZC0+ZG1hY3RybCwgY2FyZC0+YmFzZSArIE5KX0RNQUNUUkwpOworCQkJb3V0YigwLCBjYXJkLT5iYXNlICsgTkpfSVJRTUFTSzApOworCQl9CisJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfSERMQywgJmJjLT5iY2guRmxhZ3MpOworCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmYmMtPmJjaC5GbGFncyk7CisJCWJjLT50eHN0YXRlID0gMDsKKwkJYmMtPnJ4c3RhdGUgPSAwOworCQliYy0+bGFzdHJ4ID0gLTE7CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfUkFXOgorCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19UUkFOU1BBUkVOVCwgJmJjLT5iY2guRmxhZ3MpOworCQliYy0+YmNoLnN0YXRlID0gcHJvdG9jb2w7CisJCWJjLT5pZHggPSAwOworCQliYy0+ZnJlZSA9IGNhcmQtPnNlbmQuc2l6ZS8yOworCQliYy0+cnhzdGF0ZSA9IDA7CisJCWJjLT50eHN0YXRlID0gVFhfSU5JVCB8IFRYX0lETEU7CisJCWJjLT5sYXN0cnggPSAtMTsKKwkJaWYgKCFjYXJkLT5kbWFjdHJsKSB7CisJCQljYXJkLT5kbWFjdHJsID0gMTsKKwkJCW91dGIoY2FyZC0+ZG1hY3RybCwgY2FyZC0+YmFzZSArIE5KX0RNQUNUUkwpOworCQkJb3V0YigweDBmLCBjYXJkLT5iYXNlICsgTkpfSVJRTUFTSzApOworCQl9CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfSERMQzoKKwkJdGVzdF9hbmRfc2V0X2JpdChGTEdfSERMQywgJmJjLT5iY2guRmxhZ3MpOworCQliYy0+YmNoLnN0YXRlID0gcHJvdG9jb2w7CisJCWJjLT5pZHggPSAwOworCQliYy0+ZnJlZSA9IGNhcmQtPnNlbmQuc2l6ZS8yOworCQliYy0+cnhzdGF0ZSA9IDA7CisJCWJjLT50eHN0YXRlID0gVFhfSU5JVCB8IFRYX0lETEU7CisJCWlzZG5oZGxjX3Jjdl9pbml0KCZiYy0+aHJlY3YsIDApOworCQlpc2RuaGRsY19vdXRfaW5pdCgmYmMtPmhzZW5kLCAwKTsKKwkJYmMtPmxhc3RyeCA9IC0xOworCQlpZiAoIWNhcmQtPmRtYWN0cmwpIHsKKwkJCWNhcmQtPmRtYWN0cmwgPSAxOworCQkJb3V0YihjYXJkLT5kbWFjdHJsLCBjYXJkLT5iYXNlICsgTkpfRE1BQ1RSTCk7CisJCQlvdXRiKDB4MGYsIGNhcmQtPmJhc2UgKyBOSl9JUlFNQVNLMCk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6ICVzIHByb3RvY29sICV4IG5vdCBoYW5kbGVkXG4iLCBjYXJkLT5uYW1lLAorCQkJX19mdW5jX18sIHByb3RvY29sKTsKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKwl9CisJY2FyZC0+c2VuZC5kbWFjdXIgPSBpbmwoY2FyZC0+YmFzZSArIE5KX0RNQV9SRUFEX0FEUik7CisJY2FyZC0+cmVjdi5kbWFjdXIgPSBpbmwoY2FyZC0+YmFzZSArIE5KX0RNQV9XUklURV9BRFIpOworCWNhcmQtPnNlbmQuaWR4ID0gKGNhcmQtPnNlbmQuZG1hY3VyIC0gY2FyZC0+c2VuZC5kbWFzdGFydCkgPj4gMjsKKwljYXJkLT5yZWN2LmlkeCA9IChjYXJkLT5yZWN2LmRtYWN1ciAtIGNhcmQtPnJlY3YuZG1hc3RhcnQpID4+IDI7CisJcHJfZGVidWcoIiVzOiAlcyBjdHJsICV4IGlycSAgJTAyeC8lMDJ4IGlkeCAlZC8lZFxuIiwKKwkJY2FyZC0+bmFtZSwgX19mdW5jX18sCisJCWluYihjYXJkLT5iYXNlICsgTkpfRE1BQ1RSTCksCisJCWluYihjYXJkLT5iYXNlICsgTkpfSVJRTUFTSzApLAorCQlpbmIoY2FyZC0+YmFzZSArIE5KX0lSUVNUQVQwKSwKKwkJY2FyZC0+c2VuZC5pZHgsCisJCWNhcmQtPnJlY3YuaWR4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK25qX3Jlc2V0KHN0cnVjdCB0aWdlcl9odyAqY2FyZCkKK3sKKwlvdXRiKDB4ZmYsIGNhcmQtPmJhc2UgKyBOSl9DVFJMKTsgLyogUmVzZXQgT24gKi8KKwltZGVsYXkoMSk7CisKKwkvKiBub3cgZWRnZSB0cmlnZ2VyZWQgZm9yIFRKMzIwIEdFIDEzLzA3LzAwICovCisJLyogc2VlIGNvbW1lbnQgaW4gSVJRIGZ1bmN0aW9uICovCisJaWYgKGNhcmQtPnR5cCA9PSBORVRKRVRfU19USjMyMCkgLyogVEozMjAgKi8KKwkJY2FyZC0+Y3RybHJlZyA9IDB4NDA7ICAvKiBSZXNldCBPZmYgYW5kIHN0YXR1cyByZWFkIGNsZWFyICovCisJZWxzZQorCQljYXJkLT5jdHJscmVnID0gMHgwMDsgIC8qIFJlc2V0IE9mZiBhbmQgc3RhdHVzIHJlYWQgY2xlYXIgKi8KKwlvdXRiKGNhcmQtPmN0cmxyZWcsIGNhcmQtPmJhc2UgKyBOSl9DVFJMKTsKKwltZGVsYXkoMTApOworCisJLyogY29uZmlndXJlIEFVWCBwaW5zIChhbGwgb3V0cHV0IGV4Y2VwdCBJU0FDIElSUSBwaW4pICovCisJY2FyZC0+YXV4ZCA9IDA7CisJY2FyZC0+ZG1hY3RybCA9IDA7CisJb3V0Yih+TkpfSVNBQ0lSUSwgY2FyZC0+YmFzZSArIE5KX0FVWENUUkwpOworCW91dGIoTkpfSVNBQ0lSUSwgIGNhcmQtPmJhc2UgKyBOSl9JUlFNQVNLMSk7CisJb3V0YihjYXJkLT5hdXhkLCBjYXJkLT5iYXNlICsgTkpfQVVYREFUQSk7Cit9CisKK3N0YXRpYyBpbnQKK2luaXR0aWdlcihzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQpCit7CisJaW50IGk7CisKKwljYXJkLT5kbWFfcCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGNhcmQtPnBkZXYsIE5KX0RNQV9TSVpFLAorCQkJJmNhcmQtPmRtYSk7CisJaWYgKCFjYXJkLT5kbWFfcCkgeworCQlwcl9pbmZvKCIlczogTm8gRE1BIG1lbW9yeVxuIiwgY2FyZC0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpZiAoKHU2NCljYXJkLT5kbWEgPiAweGZmZmZmZmZmKSB7CisJCXByX2luZm8oIiVzOiBETUEgb3V0c2lkZSAzMiBiaXRcbiIsIGNhcmQtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQljYXJkLT5iY1tpXS5oc2J1ZiA9IGttYWxsb2MoTkpfRE1BX1RYU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY2FyZC0+YmNbaV0uaHNidWYpIHsKKwkJCXByX2luZm8oIiVzOiBubyBCJWQgc2VuZCBidWZmZXJcbiIsIGNhcmQtPm5hbWUsIGkgKyAxKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWNhcmQtPmJjW2ldLmhyYnVmID0ga21hbGxvYyhOSl9ETUFfUlhTSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjYXJkLT5iY1tpXS5ocmJ1ZikgeworCQkJcHJfaW5mbygiJXM6IG5vIEIlZCByZWN2IGJ1ZmZlclxuIiwgY2FyZC0+bmFtZSwgaSArIDEpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJbWVtc2V0KGNhcmQtPmRtYV9wLCAweGZmLCBOSl9ETUFfU0laRSk7CisKKwljYXJkLT5zZW5kLnN0YXJ0ID0gY2FyZC0+ZG1hX3A7CisJY2FyZC0+c2VuZC5kbWFzdGFydCA9ICh1MzIpY2FyZC0+ZG1hOworCWNhcmQtPnNlbmQuZG1hZW5kID0gY2FyZC0+c2VuZC5kbWFzdGFydCArCisJCSg0ICogKE5KX0RNQV9UWFNJWkUgLSAxKSk7CisJY2FyZC0+c2VuZC5kbWFpcnEgPSBjYXJkLT5zZW5kLmRtYXN0YXJ0ICsKKwkJKDQgKiAoKE5KX0RNQV9UWFNJWkUgLyAyKSAtIDEpKTsKKwljYXJkLT5zZW5kLnNpemUgPSBOSl9ETUFfVFhTSVpFOworCisJaWYgKGRlYnVnICYgREVCVUdfSFcpCisJCXByX25vdGljZSgiJXM6IHNlbmQgYnVmZmVyIHBoeSAlI3ggLSAlI3ggLSAlI3ggIHZpcnQgJXAiCisJCQkiIHNpemUgJXp1IHUzMlxuIiwgY2FyZC0+bmFtZSwKKwkJCWNhcmQtPnNlbmQuZG1hc3RhcnQsIGNhcmQtPnNlbmQuZG1haXJxLAorCQkJY2FyZC0+c2VuZC5kbWFlbmQsIGNhcmQtPnNlbmQuc3RhcnQsIGNhcmQtPnNlbmQuc2l6ZSk7CisKKwlvdXRsKGNhcmQtPnNlbmQuZG1hc3RhcnQsIGNhcmQtPmJhc2UgKyBOSl9ETUFfUkVBRF9TVEFSVCk7CisJb3V0bChjYXJkLT5zZW5kLmRtYWlycSwgY2FyZC0+YmFzZSArIE5KX0RNQV9SRUFEX0lSUSk7CisJb3V0bChjYXJkLT5zZW5kLmRtYWVuZCwgY2FyZC0+YmFzZSArIE5KX0RNQV9SRUFEX0VORCk7CisKKwljYXJkLT5yZWN2LnN0YXJ0ID0gY2FyZC0+ZG1hX3AgKyAoTkpfRE1BX1NJWkUgLyAyKTsKKwljYXJkLT5yZWN2LmRtYXN0YXJ0ID0gKHUzMiljYXJkLT5kbWEgICsgKE5KX0RNQV9TSVpFIC8gMik7CisJY2FyZC0+cmVjdi5kbWFlbmQgPSBjYXJkLT5yZWN2LmRtYXN0YXJ0ICsKKwkJKDQgKiAoTkpfRE1BX1JYU0laRSAtIDEpKTsKKwljYXJkLT5yZWN2LmRtYWlycSA9IGNhcmQtPnJlY3YuZG1hc3RhcnQgKworCQkoNCAqICgoTkpfRE1BX1JYU0laRSAvIDIpIC0gMSkpOworCWNhcmQtPnJlY3Yuc2l6ZSA9IE5KX0RNQV9SWFNJWkU7CisKKwlpZiAoZGVidWcgJiBERUJVR19IVykKKwkJcHJfbm90aWNlKCIlczogcmVjdiBidWZmZXIgcGh5ICUjeCAtICUjeCAtICUjeCAgdmlydCAlcCIKKwkJCSIgc2l6ZSAlenUgdTMyXG4iLCBjYXJkLT5uYW1lLAorCQkJY2FyZC0+cmVjdi5kbWFzdGFydCwgY2FyZC0+cmVjdi5kbWFpcnEsCisJCQljYXJkLT5yZWN2LmRtYWVuZCwgY2FyZC0+cmVjdi5zdGFydCwgY2FyZC0+cmVjdi5zaXplKTsKKworCW91dGwoY2FyZC0+cmVjdi5kbWFzdGFydCwgY2FyZC0+YmFzZSArIE5KX0RNQV9XUklURV9TVEFSVCk7CisJb3V0bChjYXJkLT5yZWN2LmRtYWlycSwgY2FyZC0+YmFzZSArIE5KX0RNQV9XUklURV9JUlEpOworCW91dGwoY2FyZC0+cmVjdi5kbWFlbmQsIGNhcmQtPmJhc2UgKyBOSl9ETUFfV1JJVEVfRU5EKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3JlYWRfZG1hKHN0cnVjdCB0aWdlcl9jaCAqYmMsIHUzMiBpZHgsIGludCBjbnQpCit7CisJc3RydWN0IHRpZ2VyX2h3ICpjYXJkID0gYmMtPmJjaC5odzsKKwlpbnQgaSwgc3RhdDsKKwl1MzIgdmFsOworCXU4ICpwLCAqcG47CisKKwlpZiAoYmMtPmxhc3RyeCA9PSBpZHgpIHsKKwkJYmMtPnJ4c3RhdGUgfD0gUlhfT1ZFUlJVTjsKKwkJcHJfaW5mbygiJXM6IEIlMWQgb3ZlcnJ1biBhdCBpZHggJWRcbiIsIGNhcmQtPm5hbWUsCisJCQliYy0+YmNoLm5yLCBpZHgpOworCX0KKwliYy0+bGFzdHJ4ID0gaWR4OworCWlmICghYmMtPmJjaC5yeF9za2IpIHsKKwkJYmMtPmJjaC5yeF9za2IgPSBtSV9hbGxvY19za2IoYmMtPmJjaC5tYXhsZW4sIEdGUF9BVE9NSUMpOworCQlpZiAoIWJjLT5iY2gucnhfc2tiKSB7CisJCQlwcl9pbmZvKCIlczogQiUxZCByZWNlaXZlIG91dCBvZiBtZW1vcnlcbiIsCisJCQkJY2FyZC0+bmFtZSwgYmMtPmJjaC5ucik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAodGVzdF9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmYmMtPmJjaC5GbGFncykpIHsKKwkJaWYgKChiYy0+YmNoLnJ4X3NrYi0+bGVuICsgY250KSA+IGJjLT5iY2gubWF4bGVuKSB7CisJCQlwcl9kZWJ1ZygiJXM6IEIlMWQgb3ZlcnJ1biAlZFxuIiwgY2FyZC0+bmFtZSwKKwkJCQliYy0+YmNoLm5yLCBiYy0+YmNoLnJ4X3NrYi0+bGVuICsgY250KTsKKwkJCXNrYl90cmltKGJjLT5iY2gucnhfc2tiLCAwKTsKKwkJCXJldHVybjsKKwkJfQorCQlwID0gc2tiX3B1dChiYy0+YmNoLnJ4X3NrYiwgY250KTsKKwl9IGVsc2UKKwkJcCA9IGJjLT5ocmJ1ZjsKKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQl2YWwgPSBjYXJkLT5yZWN2LnN0YXJ0W2lkeCsrXTsKKwkJaWYgKGJjLT5iY2gubnIgJiAyKQorCQkJdmFsID4+PSA4OworCQlpZiAoaWR4ID49IGNhcmQtPnJlY3Yuc2l6ZSkKKwkJCWlkeCA9IDA7CisJCXBbaV0gPSB2YWwgJiAweGZmOworCX0KKwlwbiA9IGJjLT5ocmJ1ZjsKK25leHRfZnJhbWU6CisJaWYgKHRlc3RfYml0KEZMR19IRExDLCAmYmMtPmJjaC5GbGFncykpIHsKKwkJc3RhdCA9IGlzZG5oZGxjX2RlY29kZSgmYmMtPmhyZWN2LCBwbiwgY250LCAmaSwKKwkJCWJjLT5iY2gucnhfc2tiLT5kYXRhLCBiYy0+YmNoLm1heGxlbik7CisJCWlmIChzdGF0ID4gMCkgLyogdmFsaWQgZnJhbWUgcmVjZWl2ZWQgKi8gCisJCQlwID0gc2tiX3B1dChiYy0+YmNoLnJ4X3NrYiwgc3RhdCk7CisJCWVsc2UgaWYgKHN0YXQgPT0gLUhETENfQ1JDX0VSUk9SKQorCQkJcHJfaW5mbygiJXM6IEIlMWQgcmVjZWl2ZSBmcmFtZSBDUkMgZXJyb3JcbiIsCisJCQkJY2FyZC0+bmFtZSwgYmMtPmJjaC5ucik7CisJCWVsc2UgaWYgKHN0YXQgPT0gLUhETENfRlJBTUlOR19FUlJPUikKKwkJCXByX2luZm8oIiVzOiBCJTFkIHJlY2VpdmUgZnJhbWluZyBlcnJvclxuIiwKKwkJCQljYXJkLT5uYW1lLCBiYy0+YmNoLm5yKTsKKwkJZWxzZSBpZiAoc3RhdCA9PSAtSERMQ19MRU5HVEhfRVJST1IpCisJCQlwcl9pbmZvKCIlczogQiUxZCByZWNlaXZlIGZyYW1lIHRvbyBsb25nICg+ICVkKVxuIiwKKwkJCQljYXJkLT5uYW1lLCBiYy0+YmNoLm5yLCBiYy0+YmNoLm1heGxlbik7CisJfSBlbHNlCisJCXN0YXQgPSBjbnQ7CQorCisJaWYgKHN0YXQgPiAwKSB7CisJCWlmIChkZWJ1ZyAmIERFQlVHX0hXX0JGSUZPKSB7CisJCQlzbnByaW50ZihjYXJkLT5sb2csIExPR19TSVpFLCAiQiUxZC1yZWN2ICVzICVkICIsCisJCQkJYmMtPmJjaC5uciwgY2FyZC0+bmFtZSwgc3RhdCk7CisJCQlwcmludF9oZXhfZHVtcF9ieXRlcyhjYXJkLT5sb2csIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCQlwLCBzdGF0KTsKKwkJfQorCQlyZWN2X0JjaGFubmVsKCZiYy0+YmNoLCAwKTsKKwl9CisJaWYgKHRlc3RfYml0KEZMR19IRExDLCAmYmMtPmJjaC5GbGFncykpIHsKKwkJcG4gKz0gaTsKKwkJY250IC09IGk7CisJCWlmICghYmMtPmJjaC5yeF9za2IpIHsKKwkJCWJjLT5iY2gucnhfc2tiID0gbUlfYWxsb2Nfc2tiKGJjLT5iY2gubWF4bGVuLAorCQkJCUdGUF9BVE9NSUMpOworCQkJaWYgKCFiYy0+YmNoLnJ4X3NrYikgeworCQkJCXByX2luZm8oIiVzOiBCJTFkIHJlY2VpdmUgb3V0IG9mIG1lbW9yeVxuIiwKKwkJCQkJY2FyZC0+bmFtZSwgYmMtPmJjaC5ucik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCWlmIChjbnQgPiAwKQorCQkJZ290byBuZXh0X2ZyYW1lOworCX0KK30KKworc3RhdGljIHZvaWQKK3JlY3ZfdGlnZXIoc3RydWN0IHRpZ2VyX2h3ICpjYXJkLCB1OCBpcnFfc3RhdCkKK3sKKwl1MzIgaWR4OworCWludCBjbnQgPSBjYXJkLT5yZWN2LnNpemUgLyAyOworCisJLyogTm90ZSByZWNlaXZlIGlzIHZpYSB0aGUgV1JJVEUgRE1BIGNoYW5uZWwgKi8KKwljYXJkLT5sYXN0X2lzMCAmPSB+TkpfSVJRTTBfV1JfTUFTSzsKKwljYXJkLT5sYXN0X2lzMCB8PSAoaXJxX3N0YXQgJiBOSl9JUlFNMF9XUl9NQVNLKTsKKworCWlmIChpcnFfc3RhdCAmIE5KX0lSUU0wX1dSX0VORCkKKwkJaWR4ID0gY250IC0gMTsKKwllbHNlCisJCWlkeCA9IGNhcmQtPnJlY3Yuc2l6ZSAtIDE7CisKKwlpZiAodGVzdF9iaXQoRkxHX0FDVElWRSwgJmNhcmQtPmJjWzBdLmJjaC5GbGFncykpCisJCXJlYWRfZG1hKCZjYXJkLT5iY1swXSwgaWR4LCBjbnQpOworCWlmICh0ZXN0X2JpdChGTEdfQUNUSVZFLCAmY2FyZC0+YmNbMV0uYmNoLkZsYWdzKSkKKwkJcmVhZF9kbWEoJmNhcmQtPmJjWzFdLCBpZHgsIGNudCk7Cit9CisKKy8qIHN5bmMgd2l0aCBjdXJyZW50IERNQSBhZGRyZXNzIGF0IHN0YXJ0IG9yIGFmdGVyIGV4Y2VwdGlvbiAqLworc3RhdGljIHZvaWQKK3Jlc3luYyhzdHJ1Y3QgdGlnZXJfY2ggKmJjLCBzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQpCit7CisJY2FyZC0+c2VuZC5kbWFjdXIgPSBpbmwoY2FyZC0+YmFzZSB8IE5KX0RNQV9SRUFEX0FEUik7CisJY2FyZC0+c2VuZC5pZHggPSAoY2FyZC0+c2VuZC5kbWFjdXIgLSBjYXJkLT5zZW5kLmRtYXN0YXJ0KSA+PiAyOworCWlmIChiYy0+ZnJlZSA+IGNhcmQtPnNlbmQuc2l6ZSAvIDIpCisJCWJjLT5mcmVlID0gY2FyZC0+c2VuZC5zaXplIC8gMjsKKwkvKiBjdXJyZW50bHkgd2Ugc2ltcGxlIHN5bmMgdG8gdGhlIG5leHQgY29tcGxldGUgZnJlZSBhcmVhCisJICogdGhpcyBoYXN0IHRoZSBhZHZhbnRhZ2UgdGhhdCB3ZSBoYXZlIGFsd2F5cyBtYXhpbXVtIHRpbWUgdG8KKwkgKiBoYW5kbGUgVFggaXJxCisJICovCisJaWYgKGNhcmQtPnNlbmQuaWR4IDwgKChjYXJkLT5zZW5kLnNpemUgLyAyKSAtIDEpKQorCQliYy0+aWR4ID0gKGNhcmQtPnJlY3Yuc2l6ZSAvIDIpIC0gMTsKKwllbHNlCisJCWJjLT5pZHggPSBjYXJkLT5yZWN2LnNpemUgLSAxOworCWJjLT50eHN0YXRlID0gVFhfUlVOOworCXByX2RlYnVnKCIlczogJXMgQiUxZCBmcmVlICVkIGlkeCAlZC8lZFxuIiwgY2FyZC0+bmFtZSwKKwkJX19mdW5jX18sIGJjLT5iY2gubnIsIGJjLT5mcmVlLCBiYy0+aWR4LCBjYXJkLT5zZW5kLmlkeCk7Cit9CisKK3N0YXRpYyBpbnQgYmNfbmV4dF9mcmFtZShzdHJ1Y3QgdGlnZXJfY2ggKik7CisKK3N0YXRpYyB2b2lkCitmaWxsX2hkbGNfZmxhZyhzdHJ1Y3QgdGlnZXJfY2ggKmJjKQoreworCXN0cnVjdCB0aWdlcl9odyAqY2FyZCA9IGJjLT5iY2guaHc7CisJaW50IGNvdW50LCBpOworCXUzMiBtLCB2OworCXU4ICAqcDsKKworCWlmIChiYy0+ZnJlZSA9PSAwKQorCQlyZXR1cm47CisJcHJfZGVidWcoIiVzOiAlcyBCJTFkICVkIHN0YXRlICV4IGlkeCAlZC8lZFxuIiwgY2FyZC0+bmFtZSwKKwkJX19mdW5jX18sIGJjLT5iY2gubnIsIGJjLT5mcmVlLCBiYy0+dHhzdGF0ZSwKKwkJYmMtPmlkeCwgY2FyZC0+c2VuZC5pZHgpOworCWlmIChiYy0+dHhzdGF0ZSAmIChUWF9JRExFIHwgVFhfSU5JVCB8IFRYX1VOREVSUlVOKSkKKwkJcmVzeW5jKGJjLCBjYXJkKTsKKwljb3VudCA9IGlzZG5oZGxjX2VuY29kZSgmYmMtPmhzZW5kLCBOVUxMLCAwLCAmaSwKKwkJCWJjLT5oc2J1ZiwgYmMtPmZyZWUpOworCXByX2RlYnVnKCIlczogQiUxZCBoZGxjIGVuY29kZWQgJWQgZmxhZ3NcbiIsIGNhcmQtPm5hbWUsCisJCQliYy0+YmNoLm5yLCBjb3VudCk7CisJYmMtPmZyZWUgLT0gY291bnQ7CisJcCA9IGJjLT5oc2J1ZjsKKwltID0gKGJjLT5iY2gubnIgJiAxKSA/IDB4ZmZmZmZmMDAgOiAweGZmZmYwMGZmOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChiYy0+aWR4ID49IGNhcmQtPnNlbmQuc2l6ZSkKKwkJCWJjLT5pZHggPSAwOworCQl2ID0gY2FyZC0+c2VuZC5zdGFydFtiYy0+aWR4XTsKKwkJdiAmPSBtOworCQl2IHw9IChiYy0+YmNoLm5yICYgMSkgPyAodTMyKShwW2ldKSA6ICgodTMyKShwW2ldKSkgPDwgODsKKwkJY2FyZC0+c2VuZC5zdGFydFtiYy0+aWR4KytdID0gdjsKKwl9CisJaWYgKGRlYnVnICYgREVCVUdfSFdfQkZJRk8pIHsKKwkJc25wcmludGYoY2FyZC0+bG9nLCBMT0dfU0laRSwgIkIlMWQtc2VuZCAlcyAlZCAiLAorCQkJYmMtPmJjaC5uciwgY2FyZC0+bmFtZSwgY291bnQpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcyhjYXJkLT5sb2csIERVTVBfUFJFRklYX09GRlNFVCwgcCwgY291bnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2ZpbGxfZG1hKHN0cnVjdCB0aWdlcl9jaCAqYmMpCit7CisJc3RydWN0IHRpZ2VyX2h3ICpjYXJkID0gYmMtPmJjaC5odzsKKwlpbnQgY291bnQsIGk7CisJdTMyIG0sIHY7CisJdTggICpwOworCisJaWYgKGJjLT5mcmVlID09IDApCisJCXJldHVybjsKKwljb3VudCA9IGJjLT5iY2gudHhfc2tiLT5sZW4gLSBiYy0+YmNoLnR4X2lkeDsKKwlpZiAoY291bnQgPD0gMCkKKwkJcmV0dXJuOworCXByX2RlYnVnKCIlczogJXMgQiUxZCAlZC8lZC8lZC8lZCBzdGF0ZSAleCBpZHggJWQvJWRcbiIsIGNhcmQtPm5hbWUsCisJCV9fZnVuY19fLCBiYy0+YmNoLm5yLCBjb3VudCwgYmMtPmZyZWUsIGJjLT5iY2gudHhfaWR4LAorCQliYy0+YmNoLnR4X3NrYi0+bGVuLCBiYy0+dHhzdGF0ZSwgYmMtPmlkeCwgY2FyZC0+c2VuZC5pZHgpOworCWlmIChiYy0+dHhzdGF0ZSAmIChUWF9JRExFIHwgVFhfSU5JVCB8IFRYX1VOREVSUlVOKSkKKwkJcmVzeW5jKGJjLCBjYXJkKTsKKwlwID0gYmMtPmJjaC50eF9za2ItPmRhdGEgKyBiYy0+YmNoLnR4X2lkeDsKKwlpZiAodGVzdF9iaXQoRkxHX0hETEMsICZiYy0+YmNoLkZsYWdzKSkgeworCQljb3VudCA9IGlzZG5oZGxjX2VuY29kZSgmYmMtPmhzZW5kLCBwLCBjb3VudCwgJmksCisJCQliYy0+aHNidWYsIGJjLT5mcmVlKTsKKwkJcHJfZGVidWcoIiVzOiBCJTFkIGhkbGMgZW5jb2RlZCAlZCBpbiAlZFxuIiwgY2FyZC0+bmFtZSwKKwkJCWJjLT5iY2gubnIsIGksIGNvdW50KTsKKwkJYmMtPmJjaC50eF9pZHggKz0gaTsKKwkJYmMtPmZyZWUgLT0gY291bnQ7CisJCXAgPSBiYy0+aHNidWY7CisJfSBlbHNlIHsKKwkJaWYgKGNvdW50ID4gYmMtPmZyZWUpCisJCQljb3VudCA9IGJjLT5mcmVlOworCQliYy0+YmNoLnR4X2lkeCArPSBjb3VudDsKKwkJYmMtPmZyZWUgLT0gY291bnQ7CisJfQorCW0gPSAoYmMtPmJjaC5uciAmIDEpID8gMHhmZmZmZmYwMCA6IDB4ZmZmZjAwZmY7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKGJjLT5pZHggPj0gY2FyZC0+c2VuZC5zaXplKQorCQkJYmMtPmlkeCA9IDA7CisJCXYgPSBjYXJkLT5zZW5kLnN0YXJ0W2JjLT5pZHhdOworCQl2ICY9IG07CisJCXYgfD0gKGJjLT5iY2gubnIgJiAxKSA/ICh1MzIpKHBbaV0pIDogKCh1MzIpKHBbaV0pKSA8PCA4OworCQljYXJkLT5zZW5kLnN0YXJ0W2JjLT5pZHgrK10gPSB2OworCX0KKwlpZiAoZGVidWcgJiBERUJVR19IV19CRklGTykgeworCQlzbnByaW50ZihjYXJkLT5sb2csIExPR19TSVpFLCAiQiUxZC1zZW5kICVzICVkICIsCisJCQliYy0+YmNoLm5yLCBjYXJkLT5uYW1lLCBjb3VudCk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKGNhcmQtPmxvZywgRFVNUF9QUkVGSVhfT0ZGU0VULCBwLCBjb3VudCk7CisJfQorCWlmIChiYy0+ZnJlZSkKKwkJYmNfbmV4dF9mcmFtZShiYyk7Cit9CisKKworc3RhdGljIGludAorYmNfbmV4dF9mcmFtZShzdHJ1Y3QgdGlnZXJfY2ggKmJjKQoreworCWlmIChiYy0+YmNoLnR4X3NrYiAmJiBiYy0+YmNoLnR4X2lkeCA8IGJjLT5iY2gudHhfc2tiLT5sZW4pCisJCWZpbGxfZG1hKGJjKTsKKwllbHNlIHsKKwkJaWYgKGJjLT5iY2gudHhfc2tiKSB7CisJCQkvKiBzZW5kIGNvbmZpcm0sIG9uIHRyYW5zLCBmcmVlIG9uIGhkbGMuICovCisJCQlpZiAodGVzdF9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmYmMtPmJjaC5GbGFncykpCisJCQkJY29uZmlybV9Cc2VuZCgmYmMtPmJjaCk7CisJCQlkZXZfa2ZyZWVfc2tiKGJjLT5iY2gudHhfc2tiKTsKKwkJfQorCQlpZiAoZ2V0X25leHRfYmZyYW1lKCZiYy0+YmNoKSkKKwkJCWZpbGxfZG1hKGJjKTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorc2VuZF90aWdlcl9iYyhzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQsIHN0cnVjdCB0aWdlcl9jaCAqYmMpCit7CisJaW50IHJldDsKKworCWJjLT5mcmVlICs9IGNhcmQtPnNlbmQuc2l6ZSAvIDI7CisJaWYgKGJjLT5mcmVlID49IGNhcmQtPnNlbmQuc2l6ZSkgeworCQlpZiAoIShiYy0+dHhzdGF0ZSAmIChUWF9VTkRFUlJVTiB8IFRYX0lOSVQpKSkgeworCQkJcHJfaW5mbygiJXM6IEIlMWQgVFggdW5kZXJydW4gc3RhdGUgJXhcbiIsIGNhcmQtPm5hbWUsCisJCQkJYmMtPmJjaC5uciwgYmMtPnR4c3RhdGUpOworCQkJYmMtPnR4c3RhdGUgfD0gVFhfVU5ERVJSVU47CisJCX0KKwkJYmMtPmZyZWUgPSBjYXJkLT5zZW5kLnNpemU7CisJfQorCXJldCA9IGJjX25leHRfZnJhbWUoYmMpOworCWlmICghcmV0KSB7CisJCWlmICh0ZXN0X2JpdChGTEdfSERMQywgJmJjLT5iY2guRmxhZ3MpKSB7CisJCQlmaWxsX2hkbGNfZmxhZyhiYyk7CisJCQlyZXR1cm47CisJCX0KKwkJcHJfZGVidWcoIiVzOiBCJTFkIFRYIG5vIGRhdGEgZnJlZSAlZCBpZHggJWQvJWRcbiIsIGNhcmQtPm5hbWUsCisJCQliYy0+YmNoLm5yLCBiYy0+ZnJlZSwgYmMtPmlkeCwgY2FyZC0+c2VuZC5pZHgpOworCQlpZiAoIShiYy0+dHhzdGF0ZSAmIChUWF9JRExFIHwgVFhfSU5JVCkpKSB7CisJCQlmaWxsX21lbShiYywgYmMtPmlkeCwgYmMtPmZyZWUsIDB4ZmYpOworCQkJaWYgKGJjLT5mcmVlID09IGNhcmQtPnNlbmQuc2l6ZSkKKwkJCQliYy0+dHhzdGF0ZSB8PSBUWF9JRExFOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorc2VuZF90aWdlcihzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQsIHU4IGlycV9zdGF0KQoreworCWludCBpOworCisJLyogTm90ZSBzZW5kIGlzIHZpYSB0aGUgUkVBRCBETUEgY2hhbm5lbCAqLworCWlmICgoaXJxX3N0YXQgJiBjYXJkLT5sYXN0X2lzMCkgJiBOSl9JUlFNMF9SRF9NQVNLKSB7CisJCXByX2luZm8oIiVzOiB0aWdlciB3YXJuIHdyaXRlIGRvdWJsZSBkbWEgJXgvJXhcbiIsCisJCQljYXJkLT5uYW1lLCBpcnFfc3RhdCwgY2FyZC0+bGFzdF9pczApOworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJY2FyZC0+bGFzdF9pczAgJj0gfk5KX0lSUU0wX1JEX01BU0s7CisJCWNhcmQtPmxhc3RfaXMwIHw9IChpcnFfc3RhdCAmIE5KX0lSUU0wX1JEX01BU0spOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmICh0ZXN0X2JpdChGTEdfQUNUSVZFLCAmY2FyZC0+YmNbaV0uYmNoLkZsYWdzKSkKKwkJCXNlbmRfdGlnZXJfYmMoY2FyZCwgJmNhcmQtPmJjW2ldKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorbmpfaXJxKGludCBpbnRubywgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB0aWdlcl9odyAqY2FyZCA9IGRldl9pZDsKKwl1OCB2YWwsIHMxdmFsLCBzMHZhbDsKKworCXNwaW5fbG9jaygmY2FyZC0+bG9jayk7CisJczB2YWwgPSBpbmIoY2FyZC0+YmFzZSB8IE5KX0lSUVNUQVQwKTsKKwlzMXZhbCA9IGluYihjYXJkLT5iYXNlIHwgTkpfSVJRU1RBVDEpOworCWlmICgoczF2YWwgJiBOSl9JU0FDSVJRKSAmJiAoczB2YWwgPT0gMCkpIHsKKwkJLyogc2hhcmVkIElSUSAqLworCQlzcGluX3VubG9jaygmY2FyZC0+bG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisJcHJfZGVidWcoIiVzOiBJUlFTVEFUMCAlMDJ4IElSUVNUQVQxICUwMnhcbiIsIGNhcmQtPm5hbWUsIHMwdmFsLCBzMXZhbCk7CisJY2FyZC0+aXJxY250Kys7CisJaWYgKCEoczF2YWwgJiBOSl9JU0FDSVJRKSkgeworCQl2YWwgPSBSZWFkSVNBQ19uaihjYXJkLCBJU0FDX0lTVEEpOworCQlpZiAodmFsKQorCQkJbUlTRE5pc2FjX2lycSgmY2FyZC0+aXNhYywgdmFsKTsKKwl9CisKKwlpZiAoczB2YWwpCisJCS8qIHdyaXRlIHRvIGNsZWFyICovCisJCW91dGIoczB2YWwsIGNhcmQtPmJhc2UgfCBOSl9JUlFTVEFUMCk7CisJZWxzZQorCQlnb3RvIGVuZDsKKwlzMXZhbCA9IHMwdmFsOworCS8qIHNldCBiaXRzIGluIHN2YWwgdG8gaW5kaWNhdGUgd2hpY2ggcGFnZSBpcyBmcmVlICovCisJY2FyZC0+cmVjdi5kbWFjdXIgPSBpbmwoY2FyZC0+YmFzZSB8IE5KX0RNQV9XUklURV9BRFIpOworCWNhcmQtPnJlY3YuaWR4ID0gKGNhcmQtPnJlY3YuZG1hY3VyIC0gY2FyZC0+cmVjdi5kbWFzdGFydCkgPj4gMjsKKwlpZiAoY2FyZC0+cmVjdi5kbWFjdXIgPCBjYXJkLT5yZWN2LmRtYWlycSkKKwkJczB2YWwgPSAweDA4OwkvKiB0aGUgMm5kIHdyaXRlIGFyZWEgaXMgZnJlZSAqLworCWVsc2UKKwkJczB2YWwgPSAweDA0OwkvKiB0aGUgMXN0IHdyaXRlIGFyZWEgaXMgZnJlZSAqLworCisJY2FyZC0+c2VuZC5kbWFjdXIgPSBpbmwoY2FyZC0+YmFzZSB8IE5KX0RNQV9SRUFEX0FEUik7CisJY2FyZC0+c2VuZC5pZHggPSAoY2FyZC0+c2VuZC5kbWFjdXIgLSBjYXJkLT5zZW5kLmRtYXN0YXJ0KSA+PiAyOworCWlmIChjYXJkLT5zZW5kLmRtYWN1ciA8IGNhcmQtPnNlbmQuZG1haXJxKQorCQlzMHZhbCB8PSAweDAyOwkvKiB0aGUgMm5kIHJlYWQgYXJlYSBpcyBmcmVlICovCisJZWxzZQorCQlzMHZhbCB8PSAweDAxOwkvKiB0aGUgMXN0IHJlYWQgYXJlYSBpcyBmcmVlICovCisKKwlwcl9kZWJ1ZygiJXM6IERNQSBTdGF0dXMgJTAyeC8lMDJ4LyUwMnggJWQvJWRcbiIsIGNhcmQtPm5hbWUsCisJCXMxdmFsLCBzMHZhbCwgY2FyZC0+bGFzdF9pczAsCisJCWNhcmQtPnJlY3YuaWR4LCBjYXJkLT5zZW5kLmlkeCk7CisJLyogdGVzdCBpZiB3ZSBoYXZlIGEgRE1BIGludGVycnVwdCAqLworCWlmIChzMHZhbCAhPSBjYXJkLT5sYXN0X2lzMCkgeworCQlpZiAoKHMwdmFsICYgTkpfSVJRTTBfUkRfTUFTSykgIT0KKwkJICAgIChjYXJkLT5sYXN0X2lzMCAmIE5KX0lSUU0wX1JEX01BU0spKQorCQkJLyogZ290IGEgd3JpdGUgZG1hIGludCAqLworCQkJc2VuZF90aWdlcihjYXJkLCBzMHZhbCk7CisJCWlmICgoczB2YWwgJiBOSl9JUlFNMF9XUl9NQVNLKSAhPQorCQkgICAgKGNhcmQtPmxhc3RfaXMwICYgTkpfSVJRTTBfV1JfTUFTSykpCisJCQkvKiBnb3QgYSByZWFkIGRtYSBpbnQgKi8KKwkJCXJlY3ZfdGlnZXIoY2FyZCwgczB2YWwpOworCX0KK2VuZDoKKwlzcGluX3VubG9jaygmY2FyZC0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50Citual9sMmwxQihzdHJ1Y3QgbUlTRE5jaGFubmVsICpjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgYmNoYW5uZWwgKmJjaCA9IGNvbnRhaW5lcl9vZihjaCwgc3RydWN0IGJjaGFubmVsLCBjaCk7CisJc3RydWN0IHRpZ2VyX2NoICpiYyA9IGNvbnRhaW5lcl9vZihiY2gsIHN0cnVjdCB0aWdlcl9jaCwgYmNoKTsKKwlzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQgPSBiY2gtPmh3OworCXN0cnVjdCBtSVNETmhlYWQgKmhoID0gbUlTRE5fSEVBRF9QKHNrYik7CisJdTMyIGlkOworCXVfbG9uZyBmbGFnczsKKworCXN3aXRjaCAoaGgtPnByaW0pIHsKKwljYXNlIFBIX0RBVEFfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlyZXQgPSBiY2hhbm5lbF9zZW5kZGF0YShiY2gsIHNrYik7CisJCWlmIChyZXQgPiAwKSB7IC8qIGRpcmVjdCBUWCAqLworCQkJaWQgPSBoaC0+aWQ7IC8qIHNrYiBjYW4gYmUgZnJlZWQgKi8KKwkJCWZpbGxfZG1hKGJjKTsKKwkJCXJldCA9IDA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCQlpZiAoIXRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJmJjaC0+RmxhZ3MpKQorCQkJCXF1ZXVlX2NoX2ZyYW1lKGNoLCBQSF9EQVRBX0NORiwgaWQsIE5VTEwpOworCQl9IGVsc2UKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIFBIX0FDVElWQVRFX1JFUToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEZMR19BQ1RJVkUsICZiY2gtPkZsYWdzKSkKKwkJCXJldCA9IG1vZGVfdGlnZXIoYmMsIGNoLT5wcm90b2NvbCk7CisJCWVsc2UKKwkJCXJldCA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFyZXQpCisJCQlfcXVldWVfZGF0YShjaCwgUEhfQUNUSVZBVEVfSU5ELCBNSVNETl9JRF9BTlksIDAsCisJCQkJTlVMTCwgR0ZQX0tFUk5FTCk7CisJCWJyZWFrOworCWNhc2UgUEhfREVBQ1RJVkFURV9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCW1JU0ROX2NsZWFyX2JjaGFubmVsKGJjaCk7CisJCW1vZGVfdGlnZXIoYmMsIElTRE5fUF9OT05FKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlfcXVldWVfZGF0YShjaCwgUEhfREVBQ1RJVkFURV9JTkQsIE1JU0ROX0lEX0FOWSwgMCwKKwkJCU5VTEwsIEdGUF9LRVJORUwpOworCQlyZXQgPSAwOworCQlicmVhazsKKwl9CisJaWYgKCFyZXQpCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitjaGFubmVsX2JjdHJsKHN0cnVjdCB0aWdlcl9jaCAqYmMsIHN0cnVjdCBtSVNETl9jdHJsX3JlcSAqY3EpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHRpZ2VyX2h3ICpjYXJkICA9IGJjLT5iY2guaHc7CisKKwlzd2l0Y2ggKGNxLT5vcCkgeworCWNhc2UgTUlTRE5fQ1RSTF9HRVRPUDoKKwkJY3EtPm9wID0gMDsKKwkJYnJlYWs7CisJLyogTm90aGluZyBpbXBsZW1lbnRlZCB5ZXQgKi8KKwljYXNlIE1JU0ROX0NUUkxfRklMTF9FTVBUWToKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCIlczogJXMgdW5rbm93biBPcCAleFxuIiwgY2FyZC0+bmFtZSwgX19mdW5jX18sIGNxLT5vcCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citual9iY3RybChzdHJ1Y3QgbUlTRE5jaGFubmVsICpjaCwgdTMyIGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBiY2hhbm5lbCAqYmNoID0gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgYmNoYW5uZWwsIGNoKTsKKwlzdHJ1Y3QgdGlnZXJfY2ggKmJjID0gY29udGFpbmVyX29mKGJjaCwgc3RydWN0IHRpZ2VyX2NoLCBiY2gpOworCXN0cnVjdCB0aWdlcl9odyAqY2FyZCAgPSBiY2gtPmh3OworCWludCByZXQgPSAtRUlOVkFMOworCXVfbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCIlczogJXMgY21kOiV4ICVwXG4iLCBjYXJkLT5uYW1lLCBfX2Z1bmNfXywgY21kLCBhcmcpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBDTE9TRV9DSEFOTkVMOgorCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX09QRU4sICZiY2gtPkZsYWdzKTsKKwkJaWYgKHRlc3RfYml0KEZMR19BQ1RJVkUsICZiY2gtPkZsYWdzKSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJCW1JU0ROX2ZyZWViY2hhbm5lbChiY2gpOworCQkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19UWF9CVVNZLCAmYmNoLT5GbGFncyk7CisJCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0FDVElWRSwgJmJjaC0+RmxhZ3MpOworCQkJbW9kZV90aWdlcihiYywgSVNETl9QX05PTkUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQl9CisJCWNoLT5wcm90b2NvbCA9IElTRE5fUF9OT05FOworCQljaC0+cGVlciA9IE5VTEw7CisJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCQlyZXQgPSAwOworCQlicmVhazsKKwljYXNlIENPTlRST0xfQ0hBTk5FTDoKKwkJcmV0ID0gY2hhbm5lbF9iY3RybChiYywgYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6ICVzIHVua25vd24gcHJpbSgleClcbiIsIGNhcmQtPm5hbWUsIF9fZnVuY19fLCBjbWQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitjaGFubmVsX2N0cmwoc3RydWN0IHRpZ2VyX2h3ICpjYXJkLCBzdHJ1Y3QgbUlTRE5fY3RybF9yZXEgKmNxKQoreworCWludAlyZXQgPSAwOworCisJc3dpdGNoIChjcS0+b3ApIHsKKwljYXNlIE1JU0ROX0NUUkxfR0VUT1A6CisJCWNxLT5vcCA9IE1JU0ROX0NUUkxfTE9PUDsKKwkJYnJlYWs7CisJY2FzZSBNSVNETl9DVFJMX0xPT1A6CisJCS8qIGNxLT5jaGFubmVsOiAwIGRpc2FibGUsIDEgQjEgbG9vcCAyIEIyIGxvb3AsIDMgYm90aCAqLworCQlpZiAoY3EtPmNoYW5uZWwgPCAwIHx8IGNxLT5jaGFubmVsID4gMykgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IGNhcmQtPmlzYWMuY3RybCgmY2FyZC0+aXNhYywgSFdfVEVTVExPT1AsIGNxLT5jaGFubmVsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6ICVzIHVua25vd24gT3AgJXhcbiIsIGNhcmQtPm5hbWUsIF9fZnVuY19fLCBjcS0+b3ApOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorb3Blbl9iY2hhbm5lbChzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQsIHN0cnVjdCBjaGFubmVsX3JlcSAqcnEpCit7CisJc3RydWN0IGJjaGFubmVsICpiY2g7CisKKwlpZiAocnEtPmFkci5jaGFubmVsID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHJxLT5wcm90b2NvbCA9PSBJU0ROX1BfTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYmNoID0gJmNhcmQtPmJjW3JxLT5hZHIuY2hhbm5lbCAtIDFdLmJjaDsKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChGTEdfT1BFTiwgJmJjaC0+RmxhZ3MpKQorCQlyZXR1cm4gLUVCVVNZOyAvKiBiLWNoYW5uZWwgY2FuIGJlIG9ubHkgb3BlbiBvbmNlICovCisJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19GSUxMRU1QVFksICZiY2gtPkZsYWdzKTsKKwliY2gtPmNoLnByb3RvY29sID0gcnEtPnByb3RvY29sOworCXJxLT5jaCA9ICZiY2gtPmNoOworCXJldHVybiAwOworfQorCisvKgorICogZGV2aWNlIGNvbnRyb2wgZnVuY3Rpb24KKyAqLworc3RhdGljIGludAorbmpfZGN0cmwoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHUzMiBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbUlTRE5kZXZpY2UJKmRldiA9IGNvbnRhaW5lcl9vZihjaCwgc3RydWN0IG1JU0ROZGV2aWNlLCBEKTsKKwlzdHJ1Y3QgZGNoYW5uZWwJCSpkY2ggPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZGNoYW5uZWwsIGRldik7CisJc3RydWN0IHRpZ2VyX2h3CSpjYXJkID0gZGNoLT5odzsKKwlzdHJ1Y3QgY2hhbm5lbF9yZXEJKnJxOworCWludAkJCWVyciA9IDA7CisKKwlwcl9kZWJ1ZygiJXM6ICVzIGNtZDoleCAlcFxuIiwgY2FyZC0+bmFtZSwgX19mdW5jX18sIGNtZCwgYXJnKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgT1BFTl9DSEFOTkVMOgorCQlycSA9IGFyZzsKKwkJaWYgKHJxLT5wcm90b2NvbCA9PSBJU0ROX1BfVEVfUzApCisJCQllcnIgPSBjYXJkLT5pc2FjLm9wZW4oJmNhcmQtPmlzYWMsIHJxKTsKKwkJZWxzZQorCQkJZXJyID0gb3Blbl9iY2hhbm5lbChjYXJkLCBycSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwkJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCisJCQlwcl9pbmZvKCIlczogY2Fubm90IGdldCBtb2R1bGVcbiIsIGNhcmQtPm5hbWUpOworCQlicmVhazsKKwljYXNlIENMT1NFX0NIQU5ORUw6CisJCXByX2RlYnVnKCIlczogZGV2KCVkKSBjbG9zZSBmcm9tICVwXG4iLCBjYXJkLT5uYW1lLCBkY2gtPmRldi5pZCwKKwkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCQlicmVhazsKKwljYXNlIENPTlRST0xfQ0hBTk5FTDoKKwkJZXJyID0gY2hhbm5lbF9jdHJsKGNhcmQsIGFyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCIlczogJXMgdW5rbm93biBjb21tYW5kICV4XG4iLAorCQkJY2FyZC0+bmFtZSwgX19mdW5jX18sIGNtZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50Citual9pbml0X2NhcmQoc3RydWN0IHRpZ2VyX2h3ICpjYXJkKQoreworCXVfbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwlual9kaXNhYmxlX2h3aXJxKGNhcmQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKworCWNhcmQtPmlycSA9IGNhcmQtPnBkZXYtPmlycTsKKwlpZiAocmVxdWVzdF9pcnEoY2FyZC0+aXJxLCBual9pcnEsIElSUUZfU0hBUkVELCBjYXJkLT5uYW1lLCBjYXJkKSkgeworCQlwcl9pbmZvKCIlczogY291bGRuJ3QgZ2V0IGludGVycnVwdCAlZFxuIiwKKwkJCWNhcmQtPm5hbWUsIGNhcmQtPmlycSk7CisJCWNhcmQtPmlycSA9IC0xOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCW5qX3Jlc2V0KGNhcmQpOworCXJldCA9IGNhcmQtPmlzYWMuaW5pdCgmY2FyZC0+aXNhYyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlyZXQgPSBpbml0dGlnZXIoY2FyZCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwltb2RlX3RpZ2VyKCZjYXJkLT5iY1swXSwgSVNETl9QX05PTkUpOworCW1vZGVfdGlnZXIoJmNhcmQtPmJjWzFdLCBJU0ROX1BfTk9ORSk7CitlcnJvcjoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgdm9pZAorbmpfcmVsZWFzZShzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQpCit7CisJdV9sb25nIGZsYWdzOworCWludCBpOworCisJaWYgKGNhcmQtPmJhc2VfcykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlual9kaXNhYmxlX2h3aXJxKGNhcmQpOworCQltb2RlX3RpZ2VyKCZjYXJkLT5iY1swXSwgSVNETl9QX05PTkUpOworCQltb2RlX3RpZ2VyKCZjYXJkLT5iY1sxXSwgSVNETl9QX05PTkUpOworCQljYXJkLT5pc2FjLnJlbGVhc2UoJmNhcmQtPmlzYWMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCXJlbGVhc2VfcmVnaW9uKGNhcmQtPmJhc2UsIGNhcmQtPmJhc2Vfcyk7CisJCWNhcmQtPmJhc2VfcyA9IDA7CisJfQorCWlmIChjYXJkLT5pcnEgPiAwKQorCQlmcmVlX2lycShjYXJkLT5pcnEsIGNhcmQpOworCWlmIChjYXJkLT5pc2FjLmRjaC5kZXYuZGV2LmNsYXNzKQorCQltSVNETl91bnJlZ2lzdGVyX2RldmljZSgmY2FyZC0+aXNhYy5kY2guZGV2KTsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCW1JU0ROX2ZyZWViY2hhbm5lbCgmY2FyZC0+YmNbaV0uYmNoKTsKKwkJa2ZyZWUoY2FyZC0+YmNbaV0uaHNidWYpOworCQlrZnJlZShjYXJkLT5iY1tpXS5ocmJ1Zik7CisJfQorCWlmIChjYXJkLT5kbWFfcCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChjYXJkLT5wZGV2LCBOSl9ETUFfU0laRSwKKwkJCWNhcmQtPmRtYV9wLCBjYXJkLT5kbWEpOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJmNhcmQtPmxpc3QpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlwY2lfY2xlYXJfbWFzdGVyKGNhcmQtPnBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShjYXJkLT5wZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEoY2FyZC0+cGRldiwgTlVMTCk7CisJa2ZyZWUoY2FyZCk7Cit9CisKKworc3RhdGljIGludAorbmpfc2V0dXAoc3RydWN0IHRpZ2VyX2h3ICpjYXJkKQoreworCWNhcmQtPmJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoY2FyZC0+cGRldiwgMCk7CisJY2FyZC0+YmFzZV9zID0gcGNpX3Jlc291cmNlX2xlbihjYXJkLT5wZGV2LCAwKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGNhcmQtPmJhc2UsIGNhcmQtPmJhc2VfcywgY2FyZC0+bmFtZSkpIHsKKwkJcHJfaW5mbygiJXM6IE5FVGpldCBjb25maWcgcG9ydCAlI3gtJSN4IGFscmVhZHkgaW4gdXNlXG4iLAorCQkJY2FyZC0+bmFtZSwgY2FyZC0+YmFzZSwKKwkJCSh1MzIpKGNhcmQtPmJhc2UgKyBjYXJkLT5iYXNlX3MgLSAxKSk7CisJCWNhcmQtPmJhc2VfcyA9IDA7CisJCXJldHVybiAtRUlPOworCX0KKwlBU1NJR05fRlVOQyhuaiwgSVNBQywgY2FyZC0+aXNhYyk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBfX2RldmluaXQKK3NldHVwX2luc3RhbmNlKHN0cnVjdCB0aWdlcl9odyAqY2FyZCkKK3sKKwlpbnQgaSwgZXJyOworCXVfbG9uZyBmbGFnczsKKworCXNucHJpbnRmKGNhcmQtPm5hbWUsIE1JU0ROX01BWF9JRExFTiAtIDEsICJuZXRqZXQuJWQiLCBual9jbnQgKyAxKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmNhcmQtPmxpc3QsICZDYXJkcyk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCisJX3NldF9kZWJ1ZyhjYXJkKTsKKwljYXJkLT5pc2FjLm5hbWUgPSBjYXJkLT5uYW1lOworCXNwaW5fbG9ja19pbml0KCZjYXJkLT5sb2NrKTsKKwljYXJkLT5pc2FjLmh3bG9jayA9ICZjYXJkLT5sb2NrOworCW1JU0ROaXNhY19pbml0KCZjYXJkLT5pc2FjLCBjYXJkKTsKKworCWNhcmQtPmlzYWMuZGNoLmRldi5CcHJvdG9jb2xzID0gKDEgPDwgKElTRE5fUF9CX1JBVyAmIElTRE5fUF9CX01BU0spKSB8CisJCSgxIDw8IChJU0ROX1BfQl9IRExDICYgSVNETl9QX0JfTUFTSykpOworCWNhcmQtPmlzYWMuZGNoLmRldi5ELmN0cmwgPSBual9kY3RybDsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWNhcmQtPmJjW2ldLmJjaC5uciA9IGkgKyAxOworCQlzZXRfY2hhbm5lbG1hcChpICsgMSwgY2FyZC0+aXNhYy5kY2guZGV2LmNoYW5uZWxtYXApOworCQltSVNETl9pbml0YmNoYW5uZWwoJmNhcmQtPmJjW2ldLmJjaCwgTUFYX0RBVEFfTUVNKTsKKwkJY2FyZC0+YmNbaV0uYmNoLmh3ID0gY2FyZDsKKwkJY2FyZC0+YmNbaV0uYmNoLmNoLnNlbmQgPSBual9sMmwxQjsKKwkJY2FyZC0+YmNbaV0uYmNoLmNoLmN0cmwgPSBual9iY3RybDsKKwkJY2FyZC0+YmNbaV0uYmNoLmNoLm5yID0gaSArIDE7CisJCWxpc3RfYWRkKCZjYXJkLT5iY1tpXS5iY2guY2gubGlzdCwKKwkJCSZjYXJkLT5pc2FjLmRjaC5kZXYuYmNoYW5uZWxzKTsKKwkJY2FyZC0+YmNbaV0uYmNoLmh3ID0gY2FyZDsKKwl9CisJZXJyID0gbmpfc2V0dXAoY2FyZCk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKwllcnIgPSBtSVNETl9yZWdpc3Rlcl9kZXZpY2UoJmNhcmQtPmlzYWMuZGNoLmRldiwgJmNhcmQtPnBkZXYtPmRldiwKKwkJY2FyZC0+bmFtZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKwllcnIgPSBual9pbml0X2NhcmQoY2FyZCk7CisJaWYgKCFlcnIpICB7CisJCW5qX2NudCsrOworCQlwcl9ub3RpY2UoIk5ldGpldCAlZCBjYXJkcyBpbnN0YWxsZWRcbiIsIG5qX2NudCk7CisJCXJldHVybiAwOworCX0KK2Vycm9yOgorCW5qX3JlbGVhc2UoY2FyZCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK25qX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCWludCBlcnIgPSAtRU5PTUVNOworCWludCBjZmc7CisJc3RydWN0IHRpZ2VyX2h3ICpjYXJkOworCisJaWYgKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHg4MDg2ICYmCisJICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMDAzKSB7CisJCXByX25vdGljZSgiTmV0amV0OiBEaWdpdW0gWDEwMFAvWDEwMVAgbm90IGhhbmRsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDU1ICYmCisJICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMikgeworCQlwcl9ub3RpY2UoIk5ldGpldDogRW50ZXIhTm93IG5vdCBoYW5kbGVkIHlldFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWNhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGlnZXJfaHcpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWNhcmQpIHsKKwkJcHJfaW5mbygiTm8ga21lbSBmb3IgTmV0amV0XG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwljYXJkLT5wZGV2ID0gcGRldjsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJa2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAibmpfcHJvYmUobUlTRE4pOiBmb3VuZCBhZGFwdGVyIGF0ICVzXG4iLAorCQlwY2lfbmFtZShwZGV2KSk7CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCS8qIHRoZSBUSjMwMCBhbmQgVEozMjAgbXVzdCBiZSBkZXRlY3RlZCwgdGhlIElSUSBoYW5kbGluZyBpcyBkaWZmZXJlbnQKKwkgKiB1bmZvcnR1bmF0ZWx5IHRoZSBjaGlwcyB1c2UgdGhlIHNhbWUgZGV2aWNlIElELCBidXQgdGhlIFRKMzIwIGhhcworCSAqIHRoZSBiaXQyMCBpbiBzdGF0dXMgUENJIGNmZyByZWdpc3RlciBzZXQKKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHgwNCwgJmNmZyk7CisJaWYgKGNmZyAmIDB4MDAxMDAwMDApCisJCWNhcmQtPnR5cCA9IE5FVEpFVF9TX1RKMzIwOworCWVsc2UKKwkJY2FyZC0+dHlwID0gTkVUSkVUX1NfVEozMDA7CisKKwljYXJkLT5iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWNhcmQtPmlycSA9IHBkZXYtPmlycTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisJZXJyID0gc2V0dXBfaW5zdGFuY2UoY2FyZCk7CisJaWYgKGVycikKKwkJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbmpfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCB0aWdlcl9odyAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChjYXJkKQorCQlual9yZWxlYXNlKGNhcmQpOworCWVsc2UKKwkJcHJfaW5mbygiJXMgZHJ2ZGF0YSBhbHJlYWR5IHJlbW92ZWRcbiIsIF9fZnVuY19fKTsKK30KKworLyogV2UgY2Fubm90IHNlbGVjdCBjYXJkcyB3aXRoIFBDSV9TVUIuLi4gSURzLCBzaW5jZSBoZXJlIGFyZSBjYXJkcyB3aXRoCisgKiBTVUIgSURzIHNldCB0byBQQ0lfQU5ZX0lELCBzbyB3ZSBuZWVkIHRvIG1hdGNoIGFsbCBhbmQgcmVqZWN0CisgKiBrbm93biBvdGhlciBjYXJkcyB3aGljaCBub3Qgd29yayB3aXRoIHRoaXMgZHJpdmVyIC0gc2VlIHByb2JlIGZ1bmN0aW9uICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmpfcGNpX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyBQQ0lfVkVORE9SX0lEX1RJR0VSSkVULCBQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBual9wY2lfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5qX2RyaXZlciA9IHsKKwkubmFtZSA9ICJuZXRqZXQiLAorCS5wcm9iZSA9IG5qX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChual9yZW1vdmUpLAorCS5pZF90YWJsZSA9IG5qX3BjaV9pZHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBual9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCXByX25vdGljZSgiTmV0amV0IFBDSSBkcml2ZXIgUmV2LiAlc1xuIiwgTkVUSkVUX1JFVik7CisJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbmpfZHJpdmVyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbmpfY2xlYW51cCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbmpfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobmpfaW5pdCk7Cittb2R1bGVfZXhpdChual9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9uZXRqZXQuaCBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9uZXRqZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDYxZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL25ldGpldC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBORVRqZXQgY29tbW9uIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yCUthcnN0ZW4gS2VpbAorICogICAgICAgICAgICAgIGJhc2VkIG9uIHdvcmsgb2YgTWF0dCBIZW5kZXJzb24gYW5kIERhbmllbCBQb3R0cywKKyAqICAgICAgICAgICAgICBUcmF2ZXJzZSBUZWNobm9sb2dpZXMgUC9MIHd3dy50cmF2ZXJzZS5jb20uYXUKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSAgYnkgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNkZWZpbmUgTkpfQ1RSTAkJCTB4MDAKKyNkZWZpbmUgTkpfRE1BQ1RSTAkJMHgwMQorI2RlZmluZSBOSl9BVVhDVFJMCQkweDAyCisjZGVmaW5lIE5KX0FVWERBVEEJCTB4MDMKKyNkZWZpbmUgTkpfSVJRTUFTSzAJCTB4MDQKKyNkZWZpbmUgTkpfSVJRTUFTSzEJCTB4MDUKKyNkZWZpbmUgTkpfSVJRU1RBVDAJCTB4MDYKKyNkZWZpbmUgTkpfSVJRU1RBVDEJCTB4MDcKKyNkZWZpbmUgTkpfRE1BX1JFQURfU1RBUlQJMHgwOAorI2RlZmluZSBOSl9ETUFfUkVBRF9JUlEJCTB4MGMKKyNkZWZpbmUgTkpfRE1BX1JFQURfRU5ECQkweDEwCisjZGVmaW5lIE5KX0RNQV9SRUFEX0FEUgkJMHgxNAorI2RlZmluZSBOSl9ETUFfV1JJVEVfU1RBUlQJMHgxOAorI2RlZmluZSBOSl9ETUFfV1JJVEVfSVJRCTB4MWMKKyNkZWZpbmUgTkpfRE1BX1dSSVRFX0VORAkweDIwCisjZGVmaW5lIE5KX0RNQV9XUklURV9BRFIJMHgyNAorI2RlZmluZSBOSl9QVUxTRV9DTlQJCTB4MjgKKworI2RlZmluZSBOSl9JU0FDX09GRgkJMHhjMAorI2RlZmluZSBOSl9JU0FDSVJRCQkweDEwCisKKyNkZWZpbmUgTkpfSVJRTTBfUkRfTUFTSwkweDAzCisjZGVmaW5lIE5KX0lSUU0wX1JEX0lSUQkJMHgwMQorI2RlZmluZSBOSl9JUlFNMF9SRF9FTkQJCTB4MDIKKyNkZWZpbmUgTkpfSVJRTTBfV1JfTUFTSwkweDBjCisjZGVmaW5lIE5KX0lSUU0wX1dSX0lSUQkJMHgwNAorI2RlZmluZSBOSl9JUlFNMF9XUl9FTkQJCTB4MDgKKworLyogb25lIHBhZ2UgaGVyZSBpcyBubyBuZWVkIHRvIGJlIHNtYWxsZXIgKi8KKyNkZWZpbmUgTkpfRE1BX1NJWkUJCTQwOTYKKy8qIDIgKiA2NCBieXRlIGlzIGEgY29tcHJvbWlzZSBiZXR3ZWVuIElSUSBjb3VudCBhbmQgbGF0ZW5jeSAqLworI2RlZmluZSBOSl9ETUFfUlhTSVpFCQkxMjggIC8qIDIgKiA2NCAqLworI2RlZmluZSBOSl9ETUFfVFhTSVpFCQkxMjggIC8qIDIgKiA2NCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vc3BlZWRmYXguYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9zcGVlZGZheC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmM2E0ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vc3BlZWRmYXguYwpAQCAtMCwwICsxLDUyNiBAQAorLyoKKyAqIHNwZWVkZmF4LmMJbG93IGxldmVsIHN0dWZmIGZvciBTZWRsYmF1ZXIgU3BlZWRmYXgrIGNhcmRzCisgKgkJYmFzZWQgb24gdGhlIElTQVIgRFNQCisgKgkJVGhhbmtzIHRvIFNlZGxiYXVlciBBRyBmb3IgaW5mb3JtYXRpb25zIGFuZCBIVworICoKKyAqIEF1dGhvciAgICAgICBLYXJzdGVuIEtlaWwgPGtlaWxAaXNkbjRsaW51eC5kZT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOSAgYnkgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21JU0ROaHcuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgImlwYWMuaCIKKyNpbmNsdWRlICJpc2FyLmgiCisKKyNkZWZpbmUgU1BFRURGQVhfUkVWCSIyLjAiCisKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9TUEVFREZBWF9QWVJBTUlECTB4NTEKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9TUEVFREZBWF9QQ0kJMHg1NAorI2RlZmluZSBQQ0lfU1VCX0lEX1NFRExCQVVFUgkJMHgwMQorCisjZGVmaW5lIFNGQVhfUENJX0FERFIJCTB4YzgKKyNkZWZpbmUgU0ZBWF9QQ0lfSVNBQwkJMHhkMAorI2RlZmluZSBTRkFYX1BDSV9JU0FSCQkweGUwCisKKy8qIFRJR0VSIDEwMCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBUSUdFUl9SRVNFVF9BRERSCTB4MDAKKyNkZWZpbmUgVElHRVJfRVhURVJOX1JFU0VUX09OCTB4MDEKKyNkZWZpbmUgVElHRVJfRVhURVJOX1JFU0VUX09GRgkweDAwCisjZGVmaW5lIFRJR0VSX0FVWF9DVFJMCQkweDAyCisjZGVmaW5lIFRJR0VSX0FVWF9EQVRBCQkweDAzCisjZGVmaW5lIFRJR0VSX0FVWF9JUlFNQVNLCTB4MDUKKyNkZWZpbmUgVElHRVJfQVVYX1NUQVRVUwkweDA3CisKKy8qIFRpZ2VyIEFVWCBCSVRzICovCisjZGVmaW5lIFNGQVhfQVVYX0lPTUFTSwkJMHhkZAkvKiAxIGFuZCA1IGFyZSBpbnB1dHMgKi8KKyNkZWZpbmUgU0ZBWF9JU0FSX1JFU0VUX0JJVF9PRkYgMHgwMAorI2RlZmluZSBTRkFYX0lTQVJfUkVTRVRfQklUX09OCTB4MDEKKyNkZWZpbmUgU0ZBWF9USUdFUl9JUlFfQklUCTB4MDIKKyNkZWZpbmUgU0ZBWF9MRUQxX0JJVAkJMHgwOAorI2RlZmluZSBTRkFYX0xFRDJfQklUCQkweDEwCisKKyNkZWZpbmUgU0ZBWF9QQ0lfUkVTRVRfT04JKFNGQVhfSVNBUl9SRVNFVF9CSVRfT04pCisjZGVmaW5lIFNGQVhfUENJX1JFU0VUX09GRgkoU0ZBWF9MRUQxX0JJVCB8IFNGQVhfTEVEMl9CSVQpCisKK3N0YXRpYyBpbnQgc2ZheF9jbnQ7CitzdGF0aWMgdTMyIGRlYnVnOworc3RhdGljIHUzMiBpcnFsb29wcyA9IDQ7CisKK3N0cnVjdCBzZmF4X2h3IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCWNoYXIJCQluYW1lW01JU0ROX01BWF9JRExFTl07CisJdTMyCQkJaXJxOworCXUzMgkJCWlycWNudDsKKwl1MzIJCQljZmc7CisJc3RydWN0IF9pb3BvcnQJCXBfaXNhYzsKKwlzdHJ1Y3QgX2lvcG9ydAkJcF9pc2FyOworCXU4CQkJYXV4X2RhdGE7CisJc3BpbmxvY2tfdAkJbG9jazsJLyogSFcgYWNjZXNzIGxvY2sgKi8KKwlzdHJ1Y3QgaXNhY19odwkJaXNhYzsKKwlzdHJ1Y3QgaXNhcl9odwkJaXNhcjsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQoQ2FyZHMpOworc3RhdGljIERFRklORV9SV0xPQ0soY2FyZF9sb2NrKTsgLyogcHJvdGVjdCBDYXJkcyAqLworCitzdGF0aWMgdm9pZAorX3NldF9kZWJ1ZyhzdHJ1Y3Qgc2ZheF9odyAqY2FyZCkKK3sKKwljYXJkLT5pc2FjLmRjaC5kZWJ1ZyA9IGRlYnVnOworCWNhcmQtPmlzYXIuY2hbMF0uYmNoLmRlYnVnID0gZGVidWc7CisJY2FyZC0+aXNhci5jaFsxXS5iY2guZGVidWcgPSBkZWJ1ZzsKK30KKworc3RhdGljIGludAorc2V0X2RlYnVnKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2ZheF9odyAqY2FyZDsKKworCXJldCA9IHBhcmFtX3NldF91aW50KHZhbCwga3ApOworCWlmICghcmV0KSB7CisJCXJlYWRfbG9jaygmY2FyZF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjYXJkLCAmQ2FyZHMsIGxpc3QpCisJCQlfc2V0X2RlYnVnKGNhcmQpOworCQlyZWFkX3VubG9jaygmY2FyZF9sb2NrKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworTU9EVUxFX0FVVEhPUigiS2Fyc3RlbiBLZWlsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfVkVSU0lPTihTUEVFREZBWF9SRVYpOworbW9kdWxlX3BhcmFtX2NhbGwoZGVidWcsIHNldF9kZWJ1ZywgcGFyYW1fZ2V0X3VpbnQsICZkZWJ1ZywgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlNwZWVkZmF4IGRlYnVnIG1hc2siKTsKK21vZHVsZV9wYXJhbShpcnFsb29wcywgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhpcnFsb29wcywgIlNwZWVkZmF4IG1heGltYWwgaXJxbG9vcHMgKGRlZmF1bHQgNCkiKTsKKworSU9GVU5DX0lORChJU0FDLCBzZmF4X2h3LCBwX2lzYWMpCitJT0ZVTkNfSU5EKElTQVIsIHNmYXhfaHcsIHBfaXNhcikKKworc3RhdGljIGlycXJldHVybl90CitzcGVlZGZheF9pcnEoaW50IGludG5vLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNmYXhfaHcJKnNmID0gZGV2X2lkOworCXU4IHZhbDsKKwlpbnQgY250ID0gaXJxbG9vcHM7CisKKwlzcGluX2xvY2soJnNmLT5sb2NrKTsKKwl2YWwgPSBpbmIoc2YtPmNmZyArIFRJR0VSX0FVWF9TVEFUVVMpOworCWlmICh2YWwgJiBTRkFYX1RJR0VSX0lSUV9CSVQpIHsgLyogZm9yIHVzIG9yIHNoYXJlZCA/ICovCisJCXNwaW5fdW5sb2NrKCZzZi0+bG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsgLyogc2hhcmVkICovCisJfQorCXNmLT5pcnFjbnQrKzsKKwl2YWwgPSBSZWFkSVNBUl9JTkQoc2YsIElTQVJfSVJRQklUKTsKK1N0YXJ0X0lTQVI6CisJaWYgKHZhbCAmIElTQVJfSVJRU1RBKQorCQltSVNETmlzYXJfaXJxKCZzZi0+aXNhcik7CisJdmFsID0gUmVhZElTQUNfSU5EKHNmLCBJU0FDX0lTVEEpOworCWlmICh2YWwpCisJCW1JU0ROaXNhY19pcnEoJnNmLT5pc2FjLCB2YWwpOworCXZhbCA9IFJlYWRJU0FSX0lORChzZiwgSVNBUl9JUlFCSVQpOworCWlmICgodmFsICYgSVNBUl9JUlFTVEEpICYmIGNudC0tKQorCQlnb3RvIFN0YXJ0X0lTQVI7CisJaWYgKGNudCA8IGlycWxvb3BzKQorCQlwcl9kZWJ1ZygiJXM6ICVkIGlycWxvb3BzIGNwdSVkXG4iLCBzZi0+bmFtZSwKKwkJCWlycWxvb3BzIC0gY250LCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCWlmIChpcnFsb29wcyAmJiAhY250KQorCQlwcl9ub3RpY2UoIiVzOiAlZCBJUlEgTE9PUCBjcHUlZFxuIiwgc2YtPm5hbWUsCisJCQlpcnFsb29wcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzcGluX3VubG9jaygmc2YtPmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQKK2VuYWJsZV9od2lycShzdHJ1Y3Qgc2ZheF9odyAqc2YpCit7CisJV3JpdGVJU0FDX0lORChzZiwgSVNBQ19NQVNLLCAwKTsKKwlXcml0ZUlTQVJfSU5EKHNmLCBJU0FSX0lSUUJJVCwgSVNBUl9JUlFNU0spOworCW91dGIoU0ZBWF9USUdFUl9JUlFfQklULCBzZi0+Y2ZnICsgVElHRVJfQVVYX0lSUU1BU0spOworfQorCitzdGF0aWMgdm9pZAorZGlzYWJsZV9od2lycShzdHJ1Y3Qgc2ZheF9odyAqc2YpCit7CisJV3JpdGVJU0FDX0lORChzZiwgSVNBQ19NQVNLLCAweEZGKTsKKwlXcml0ZUlTQVJfSU5EKHNmLCBJU0FSX0lSUUJJVCwgMCk7CisJb3V0YigwLCBzZi0+Y2ZnICsgVElHRVJfQVVYX0lSUU1BU0spOworfQorCitzdGF0aWMgdm9pZAorcmVzZXRfc3BlZWRmYXgoc3RydWN0IHNmYXhfaHcgKnNmKQoreworCisJcHJfZGVidWcoIiVzOiByZXNldHRpbmcgY2FyZFxuIiwgc2YtPm5hbWUpOworCW91dGIoVElHRVJfRVhURVJOX1JFU0VUX09OLCBzZi0+Y2ZnICsgVElHRVJfUkVTRVRfQUREUik7CisJb3V0YihTRkFYX1BDSV9SRVNFVF9PTiwgc2YtPmNmZyArIFRJR0VSX0FVWF9EQVRBKTsKKwltZGVsYXkoMSk7CisJb3V0YihUSUdFUl9FWFRFUk5fUkVTRVRfT0ZGLCBzZi0+Y2ZnICsgVElHRVJfUkVTRVRfQUREUik7CisJc2YtPmF1eF9kYXRhID0gU0ZBWF9QQ0lfUkVTRVRfT0ZGOworCW91dGIoc2YtPmF1eF9kYXRhLCBzZi0+Y2ZnICsgVElHRVJfQVVYX0RBVEEpOworCW1kZWxheSgxKTsKK30KKworc3RhdGljIGludAorc2ZheF9jdHJsKHN0cnVjdCBzZmF4X2h3ICAqc2YsIHUzMiBjbWQsIHVfbG9uZyBhcmcpCit7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgSFdfUkVTRVRfUkVROgorCQlyZXNldF9zcGVlZGZheChzZik7CisJCWJyZWFrOworCWNhc2UgSFdfQUNUSVZBVEVfSU5EOgorCQlpZiAoYXJnICYgMSkKKwkJCXNmLT5hdXhfZGF0YSAmPSB+U0ZBWF9MRUQxX0JJVDsKKwkJaWYgKGFyZyAmIDIpCisJCQlzZi0+YXV4X2RhdGEgJj0gflNGQVhfTEVEMl9CSVQ7CisJCW91dGIoc2YtPmF1eF9kYXRhLCBzZi0+Y2ZnICsgVElHRVJfQVVYX0RBVEEpOworCQlicmVhazsKKwljYXNlIEhXX0RFQUNUX0lORDoKKwkJaWYgKGFyZyAmIDEpCisJCQlzZi0+YXV4X2RhdGEgfD0gU0ZBWF9MRUQxX0JJVDsKKwkJaWYgKGFyZyAmIDIpCisJCQlzZi0+YXV4X2RhdGEgfD0gU0ZBWF9MRUQyX0JJVDsKKwkJb3V0YihzZi0+YXV4X2RhdGEsIHNmLT5jZmcgKyBUSUdFUl9BVVhfREFUQSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiAlcyB1bmtub3duIGNvbW1hbmQgJXggJWx4XG4iLAorCQkJc2YtPm5hbWUsIF9fZnVuY19fLCBjbWQsIGFyZyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitjaGFubmVsX2N0cmwoc3RydWN0IHNmYXhfaHcgICpzZiwgc3RydWN0IG1JU0ROX2N0cmxfcmVxICpjcSkKK3sKKwlpbnQJcmV0ID0gMDsKKworCXN3aXRjaCAoY3EtPm9wKSB7CisJY2FzZSBNSVNETl9DVFJMX0dFVE9QOgorCQljcS0+b3AgPSBNSVNETl9DVFJMX0xPT1A7CisJCWJyZWFrOworCWNhc2UgTUlTRE5fQ1RSTF9MT09QOgorCQkvKiBjcS0+Y2hhbm5lbDogMCBkaXNhYmxlLCAxIEIxIGxvb3AgMiBCMiBsb29wLCAzIGJvdGggKi8KKwkJaWYgKGNxLT5jaGFubmVsIDwgMCB8fCBjcS0+Y2hhbm5lbCA+IDMpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBzZi0+aXNhYy5jdHJsKCZzZi0+aXNhYywgSFdfVEVTVExPT1AsIGNxLT5jaGFubmVsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6IHVua25vd24gT3AgJXhcbiIsIHNmLT5uYW1lLCBjcS0+b3ApOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2ZheF9kY3RybChzdHJ1Y3QgbUlTRE5jaGFubmVsICpjaCwgdTMyIGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBtSVNETmRldmljZQkqZGV2ID0gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgbUlTRE5kZXZpY2UsIEQpOworCXN0cnVjdCBkY2hhbm5lbAkJKmRjaCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkY2hhbm5lbCwgZGV2KTsKKwlzdHJ1Y3Qgc2ZheF9odwkJKnNmID0gZGNoLT5odzsKKwlzdHJ1Y3QgY2hhbm5lbF9yZXEJKnJxOworCWludAkJCWVyciA9IDA7CisKKwlwcl9kZWJ1ZygiJXM6IGNtZDoleCAlcFxuIiwgc2YtPm5hbWUsIGNtZCwgYXJnKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgT1BFTl9DSEFOTkVMOgorCQlycSA9IGFyZzsKKwkJaWYgKHJxLT5wcm90b2NvbCA9PSBJU0ROX1BfVEVfUzApCisJCQllcnIgPSBzZi0+aXNhYy5vcGVuKCZzZi0+aXNhYywgcnEpOworCQllbHNlCisJCQllcnIgPSBzZi0+aXNhci5vcGVuKCZzZi0+aXNhciwgcnEpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQorCQkJcHJfaW5mbygiJXM6IGNhbm5vdCBnZXQgbW9kdWxlXG4iLCBzZi0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgQ0xPU0VfQ0hBTk5FTDoKKwkJcHJfZGVidWcoIiVzOiBkZXYoJWQpIGNsb3NlIGZyb20gJXBcbiIsIHNmLT5uYW1lLAorCQkJZGNoLT5kZXYuaWQsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCQlicmVhazsKKwljYXNlIENPTlRST0xfQ0hBTk5FTDoKKwkJZXJyID0gY2hhbm5lbF9jdHJsKHNmLCBhcmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiJXM6IHVua25vd24gY29tbWFuZCAleFxuIiwgc2YtPm5hbWUsIGNtZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAoraW5pdF9jYXJkKHN0cnVjdCBzZmF4X2h3ICpzZikKK3sKKwlpbnQJcmV0LCBjbnQgPSAzOworCXVfbG9uZwlmbGFnczsKKworCXJldCA9IHJlcXVlc3RfaXJxKHNmLT5pcnEsIHNwZWVkZmF4X2lycSwgSVJRRl9TSEFSRUQsIHNmLT5uYW1lLCBzZik7CisJaWYgKHJldCkgeworCQlwcl9pbmZvKCIlczogY291bGRuJ3QgZ2V0IGludGVycnVwdCAlZFxuIiwgc2YtPm5hbWUsIHNmLT5pcnEpOworCQlyZXR1cm4gcmV0OworCX0KKwl3aGlsZSAoY250LS0pIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNmLT5sb2NrLCBmbGFncyk7CisJCXJldCA9IHNmLT5pc2FjLmluaXQoJnNmLT5pc2FjKTsKKwkJaWYgKHJldCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2YtPmxvY2ssIGZsYWdzKTsKKwkJCXByX2luZm8oIiVzOiBJU0FDIGluaXQgZmFpbGVkIHdpdGggJWRcbiIsCisJCQkJc2YtPm5hbWUsIHJldCk7CisJCQlicmVhazsKKwkJfQorCQllbmFibGVfaHdpcnEoc2YpOworCQkvKiBSRVNFVCBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIgKi8KKwkJV3JpdGVJU0FDX0lORChzZiwgSVNBQ19DTURSLCAweDQxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2YtPmxvY2ssIGZsYWdzKTsKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOworCQlpZiAoZGVidWcgJiBERUJVR19IVykKKwkJCXByX25vdGljZSgiJXM6IElSUSAlZCBjb3VudCAlZFxuIiwgc2YtPm5hbWUsCisJCQkJc2YtPmlycSwgc2YtPmlycWNudCk7CisJCWlmICghc2YtPmlycWNudCkgeworCQkJcHJfaW5mbygiJXM6IElSUSglZCkgZ290IG5vIHJlcXVlc3RzIGR1cmluZyBpbml0ICVkXG4iLAorCQkJICAgICAgIHNmLT5uYW1lLCBzZi0+aXJxLCAzIC0gY250KTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gMDsKKwl9CisJZnJlZV9pcnEoc2YtPmlycSwgc2YpOworCXJldHVybiAtRUlPOworfQorCisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitzZXR1cF9zcGVlZGZheChzdHJ1Y3Qgc2ZheF9odyAqc2YpCit7CisJdV9sb25nIGZsYWdzOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihzZi0+Y2ZnLCAyNTYsIHNmLT5uYW1lKSkgeworCQlwcl9pbmZvKCJtSVNETjogJXMgY29uZmlnIHBvcnQgJXgtJXggYWxyZWFkeSBpbiB1c2VcbiIsCisJCSAgICAgICBzZi0+bmFtZSwgc2YtPmNmZywgc2YtPmNmZyArIDI1NSk7CisJCXJldHVybiAtRUlPOworCX0KKwlvdXRiKDB4ZmYsIHNmLT5jZmcpOworCW91dGIoMCwgc2YtPmNmZyk7CisJb3V0YigweGRkLCBzZi0+Y2ZnICsgVElHRVJfQVVYX0NUUkwpOworCW91dGIoMCwgc2YtPmNmZyArIFRJR0VSX0FVWF9JUlFNQVNLKTsKKworCXNmLT5pc2FjLnR5cGUgPSBJUEFDX1RZUEVfSVNBQzsKKwlzZi0+cF9pc2FjLmFsZSA9IHNmLT5jZmcgKyBTRkFYX1BDSV9BRERSOworCXNmLT5wX2lzYWMucG9ydCA9IHNmLT5jZmcgKyBTRkFYX1BDSV9JU0FDOworCXNmLT5wX2lzYXIuYWxlID0gc2YtPmNmZyArIFNGQVhfUENJX0FERFI7CisJc2YtPnBfaXNhci5wb3J0ID0gc2YtPmNmZyArIFNGQVhfUENJX0lTQVI7CisJQVNTSUdOX0ZVTkMoSU5ELCBJU0FDLCBzZi0+aXNhYyk7CisJQVNTSUdOX0ZVTkMoSU5ELCBJU0FSLCBzZi0+aXNhcik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNmLT5sb2NrLCBmbGFncyk7CisJcmVzZXRfc3BlZWRmYXgoc2YpOworCWRpc2FibGVfaHdpcnEoc2YpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNmLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlX2NhcmQoc3RydWN0IHNmYXhfaHcgKmNhcmQpIHsKKwl1X2xvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCWRpc2FibGVfaHdpcnEoY2FyZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCWNhcmQtPmlzYWMucmVsZWFzZSgmY2FyZC0+aXNhYyk7CisJZnJlZV9pcnEoY2FyZC0+aXJxLCBjYXJkKTsKKwljYXJkLT5pc2FyLnJlbGVhc2UoJmNhcmQtPmlzYXIpOworCW1JU0ROX3VucmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT5pc2FjLmRjaC5kZXYpOworCXJlbGVhc2VfcmVnaW9uKGNhcmQtPmNmZywgMjU2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoY2FyZC0+cGRldik7CisJcGNpX3NldF9kcnZkYXRhKGNhcmQtPnBkZXYsIE5VTEwpOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJmNhcmQtPmxpc3QpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlrZnJlZShjYXJkKTsKKwlzZmF4X2NudC0tOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc2V0dXBfaW5zdGFuY2Uoc3RydWN0IHNmYXhfaHcgKmNhcmQpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKKwlpbnQgaSwgZXJyOworCXVfbG9uZyBmbGFnczsKKworCXNucHJpbnRmKGNhcmQtPm5hbWUsIE1JU0ROX01BWF9JRExFTiAtIDEsICJTcGVlZGZheC4lZCIsIHNmYXhfY250ICsgMSk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjYXJkLT5saXN0LCAmQ2FyZHMpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlfc2V0X2RlYnVnKGNhcmQpOworCXNwaW5fbG9ja19pbml0KCZjYXJkLT5sb2NrKTsKKwljYXJkLT5pc2FjLmh3bG9jayA9ICZjYXJkLT5sb2NrOworCWNhcmQtPmlzYXIuaHdsb2NrID0gJmNhcmQtPmxvY2s7CisJY2FyZC0+aXNhci5jdHJsID0gKHZvaWQgKikmc2ZheF9jdHJsOworCWNhcmQtPmlzYWMubmFtZSA9IGNhcmQtPm5hbWU7CisJY2FyZC0+aXNhci5uYW1lID0gY2FyZC0+bmFtZTsKKwljYXJkLT5pc2FyLm93bmVyID0gVEhJU19NT0RVTEU7CisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgImlzZG4vSVNBUi5CSU4iLCAmY2FyZC0+cGRldi0+ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcl9pbmZvKCIlczogZmlybXdhcmUgcmVxdWVzdCBmYWlsZWQgJWRcbiIsCisJCQljYXJkLT5uYW1lLCBlcnIpOworCQlnb3RvIGVycm9yX2Z3OworCX0KKwlpZiAoZGVidWcgJiBERUJVR19IVykKKwkJcHJfbm90aWNlKCIlczogZ290IGZpcm13YXJlICV6dSBieXRlc1xuIiwKKwkJCWNhcmQtPm5hbWUsIGZpcm13YXJlLT5zaXplKTsKKworCW1JU0ROaXNhY19pbml0KCZjYXJkLT5pc2FjLCBjYXJkKTsKKworCWNhcmQtPmlzYWMuZGNoLmRldi5ELmN0cmwgPSBzZmF4X2RjdHJsOworCWNhcmQtPmlzYWMuZGNoLmRldi5CcHJvdG9jb2xzID0KKwkJbUlTRE5pc2FyX2luaXQoJmNhcmQtPmlzYXIsIGNhcmQpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJc2V0X2NoYW5uZWxtYXAoaSArIDEsIGNhcmQtPmlzYWMuZGNoLmRldi5jaGFubmVsbWFwKTsKKwkJbGlzdF9hZGQoJmNhcmQtPmlzYXIuY2hbaV0uYmNoLmNoLmxpc3QsCisJCQkmY2FyZC0+aXNhYy5kY2guZGV2LmJjaGFubmVscyk7CisJfQorCisJZXJyID0gc2V0dXBfc3BlZWRmYXgoY2FyZCk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcl9zZXR1cDsKKwllcnIgPSBjYXJkLT5pc2FyLmluaXQoJmNhcmQtPmlzYXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisJZXJyID0gbUlTRE5fcmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT5pc2FjLmRjaC5kZXYsCisJCSZjYXJkLT5wZGV2LT5kZXYsIGNhcmQtPm5hbWUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisJZXJyID0gaW5pdF9jYXJkKGNhcmQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3JfaW5pdDsKKwllcnIgPSBjYXJkLT5pc2FyLmZpcm13YXJlKCZjYXJkLT5pc2FyLCBmaXJtd2FyZS0+ZGF0YSwgZmlybXdhcmUtPnNpemUpOworCWlmICghZXJyKSAgeworCQlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKKwkJc2ZheF9jbnQrKzsKKwkJcHJfbm90aWNlKCJTcGVlZEZheCAlZCBjYXJkcyBpbnN0YWxsZWRcbiIsIHNmYXhfY250KTsKKwkJcmV0dXJuIDA7CisJfQorCWRpc2FibGVfaHdpcnEoY2FyZCk7CisJZnJlZV9pcnEoY2FyZC0+aXJxLCBjYXJkKTsKK2Vycm9yX2luaXQ6CisJbUlTRE5fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhcmQtPmlzYWMuZGNoLmRldik7CitlcnJvcjoKKwlyZWxlYXNlX3JlZ2lvbihjYXJkLT5jZmcsIDI1Nik7CitlcnJvcl9zZXR1cDoKKwljYXJkLT5pc2FjLnJlbGVhc2UoJmNhcmQtPmlzYWMpOworCWNhcmQtPmlzYXIucmVsZWFzZSgmY2FyZC0+aXNhcik7CisJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CitlcnJvcl9mdzoKKwlwY2lfZGlzYWJsZV9kZXZpY2UoY2FyZC0+cGRldik7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmY2FyZC0+bGlzdCk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCWtmcmVlKGNhcmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitzZmF4cGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCWludCBlcnIgPSAtRU5PTUVNOworCXN0cnVjdCBzZmF4X2h3ICpjYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNmYXhfaHcpLCBHRlBfS0VSTkVMKTsKKworCWlmICghY2FyZCkgeworCQlwcl9pbmZvKCJObyBtZW1vcnkgZm9yIFNwZWVkZmF4KyBQQ0lcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKwljYXJkLT5wZGV2ID0gcGRldjsKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOworCX0KKworCXByX25vdGljZSgibUlTRE46IFNwZWVkZmF4IGZvdW5kIGFkYXB0ZXIgJXMgYXQgJXNcbiIsCisJCShjaGFyICopZW50LT5kcml2ZXJfZGF0YSwgcGNpX25hbWUocGRldikpOworCisJY2FyZC0+Y2ZnID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWNhcmQtPmlycSA9IHBkZXYtPmlycTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisJZXJyID0gc2V0dXBfaW5zdGFuY2UoY2FyZCk7CisJaWYgKGVycikKKwkJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdAorc2ZheF9yZW1vdmVfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBzZmF4X2h3CSpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGNhcmQpCisJCXJlbGVhc2VfY2FyZChjYXJkKTsKKwllbHNlCisJCXByX2RlYnVnKCIlczogZHJ2ZGF0YSBhbGxyZWFkeSByZW1vdmVkXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzZmF4cGNpX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyBQQ0lfVkVORE9SX0lEX1RJR0VSSkVULCBQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzEwMCwKKwkgIFBDSV9TVUJWRU5ET1JfU1BFRURGQVhfUFlSQU1JRCwgUENJX1NVQl9JRF9TRURMQkFVRVIsCisJICAwLCAwLCAodW5zaWduZWQgbG9uZykgIlB5cmFtaWQgU3BlZWRmYXggKyBQQ0kiCisJfSwKKwl7IFBDSV9WRU5ET1JfSURfVElHRVJKRVQsIFBDSV9ERVZJQ0VfSURfVElHRVJKRVRfMTAwLAorCSAgUENJX1NVQlZFTkRPUl9TUEVFREZBWF9QQ0ksIFBDSV9TVUJfSURfU0VETEJBVUVSLAorCSAgMCwgMCwgKHVuc2lnbmVkIGxvbmcpICJTZWRsYmF1ZXIgU3BlZWRmYXggKyBQQ0kiCisJfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2ZheHBjaV9pZHMpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2ZheHBjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAic3BlZWRmYXgrIHBjaSIsCisJLnByb2JlID0gc2ZheHBjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc2ZheF9yZW1vdmVfcGNpKSwKKwkuaWRfdGFibGUgPSBzZmF4cGNpX2lkcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0CitTcGVlZGZheF9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCXByX25vdGljZSgiU2VkbGJhdWVyIFNwZWVkZmF4KyBEcml2ZXIgUmV2LiAlc1xuIiwKKwkJU1BFRURGQVhfUkVWKTsKKwllcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzZmF4cGNpX2RyaXZlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0CitTcGVlZGZheF9jbGVhbnVwKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzZmF4cGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KFNwZWVkZmF4X2luaXQpOworbW9kdWxlX2V4aXQoU3BlZWRmYXhfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vdzY2OTIuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi93NjY5Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZjEwNzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vdzY2OTIuYwpAQCAtMCwwICsxLDE0NDAgQEAKKy8qCisgKiB3NjY5Mi5jICAgICBtSVNETiBkcml2ZXIgZm9yIFdpbmJvbmQgdzY2OTIgYmFzZWQgY2FyZHMKKyAqCisgKiBBdXRob3IgICAgICBLYXJzdGVuIEtlaWwgPGtrZWlsQHN1c2UuZGU+CisgKiAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgdzY2OTIgSTRMIGRyaXZlciBmcm9tIFBldHIgTm92YWsgPHBldHIubm92YWtAaS5jej4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOSAgYnkgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21JU0ROaHcuaD4KKyNpbmNsdWRlICJ3NjY5Mi5oIgorCisjZGVmaW5lIFc2NjkyX1JFVgkiMi4wIgorCisjZGVmaW5lIERCVVNZX1RJTUVSX1ZBTFVFCTgwCisKK2VudW0geworCVc2NjkyX0FTVVMsCisJVzY2OTJfV0lOQk9ORCwKKwlXNjY5Ml9VU1IKK307CisKKy8qIHByaXZhdGUgZGF0YSBpbiB0aGUgUENJIGRldmljZXMgbGlzdCAqLworc3RydWN0IHc2NjkybWFwIHsKKwl1X2ludAlzdWJ0eXBlOworCWNoYXIJKm5hbWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHc2NjkybWFwICB3NjY5Ml9tYXBbXSA9Cit7CisJe1c2NjkyX0FTVVMsICJEeW5hbGluay9Bc3VzQ29tIElTNjRQSCJ9LAorCXtXNjY5Ml9XSU5CT05ELCAiV2luYm9uZCBXNjY5MiJ9LAorCXtXNjY5Ml9VU1IsICJVU1IgVzY2OTIifQorfTsKKworI2lmbmRlZiBQQ0lfVkVORE9SX0lEX1VTUgorI2RlZmluZSBQQ0lfVkVORE9SX0lEX1VTUgkweDE2ZWMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9VU1JfNjY5MgkweDM0MDkKKyNlbmRpZgorCitzdHJ1Y3QgdzY2OTJfY2ggeworCXN0cnVjdCBiY2hhbm5lbAkJYmNoOworCXUzMgkJCWFkZHI7CisJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CisJdTgJCQliX21vZGU7Cit9OworCitzdHJ1Y3QgdzY2OTJfaHcgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CisJY2hhcgkJCW5hbWVbTUlTRE5fTUFYX0lETEVOXTsKKwl1MzIJCQlpcnE7CisJdTMyCQkJaXJxY250OworCXUzMgkJCWFkZHI7CisJdTMyCQkJZm1hc2s7CS8qIGZlYXR1cmUgbWFzayAtIGJpdCBzZXQgcGVyIGNhcmQgbnIgKi8KKwlpbnQJCQlzdWJ0eXBlOworCXNwaW5sb2NrX3QJCWxvY2s7CS8qIGh3IGxvY2sgKi8KKwl1OAkJCWltYXNrOworCXU4CQkJcGN0bDsKKwl1OAkJCXhhZGRyOworCXU4CQkJeGRhdGE7CisJdTgJCQlzdGF0ZTsKKwlzdHJ1Y3QgdzY2OTJfY2gJCWJjWzJdOworCXN0cnVjdCBkY2hhbm5lbAkJZGNoOworCWNoYXIJCQlsb2dbNjRdOworfTsKKworc3RhdGljIExJU1RfSEVBRChDYXJkcyk7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhjYXJkX2xvY2spOyAvKiBwcm90ZWN0IENhcmRzICovCisKK3N0YXRpYyBpbnQgdzY2OTJfY250Oworc3RhdGljIGludCBkZWJ1ZzsKK3N0YXRpYyB1MzIgbGVkOworc3RhdGljIHUzMiBwb3RzOworCitzdGF0aWMgdm9pZAorX3NldF9kZWJ1ZyhzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQpCit7CisJY2FyZC0+ZGNoLmRlYnVnID0gZGVidWc7CisJY2FyZC0+YmNbMF0uYmNoLmRlYnVnID0gZGVidWc7CisJY2FyZC0+YmNbMV0uYmNoLmRlYnVnID0gZGVidWc7Cit9CisKK3N0YXRpYyBpbnQKK3NldF9kZWJ1Zyhjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWludCByZXQ7CisJc3RydWN0IHc2NjkyX2h3ICpjYXJkOworCisJcmV0ID0gcGFyYW1fc2V0X3VpbnQodmFsLCBrcCk7CisJaWYgKCFyZXQpIHsKKwkJcmVhZF9sb2NrKCZjYXJkX2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhcmQsICZDYXJkcywgbGlzdCkKKwkJCV9zZXRfZGVidWcoY2FyZCk7CisJCXJlYWRfdW5sb2NrKCZjYXJkX2xvY2spOworCX0KKwlyZXR1cm4gcmV0OworfQorCitNT0RVTEVfQVVUSE9SKCJLYXJzdGVuIEtlaWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9WRVJTSU9OKFc2NjkyX1JFVik7Cittb2R1bGVfcGFyYW1fY2FsbChkZWJ1Zywgc2V0X2RlYnVnLCBwYXJhbV9nZXRfdWludCwgJmRlYnVnLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVzY2OTIgZGVidWcgbWFzayIpOworbW9kdWxlX3BhcmFtKGxlZCwgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhsZWQsICJXNjY5MiBMRUQgc3VwcG9ydCBiaXRtYXNrIChvbmUgYml0IHBlciBjYXJkKSIpOworbW9kdWxlX3BhcmFtKHBvdHMsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MocG90cywgIlc2NjkyIFBPVFMgc3VwcG9ydCBiaXRtYXNrIChvbmUgYml0IHBlciBjYXJkKSIpOworCitzdGF0aWMgaW5saW5lIHU4CitSZWFkVzY2OTIoc3RydWN0IHc2NjkyX2h3ICpjYXJkLCB1OCBvZmZzZXQpCit7CisJcmV0dXJuIGluYihjYXJkLT5hZGRyICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitXcml0ZVc2NjkyKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCwgdTggb2Zmc2V0LCB1OCB2YWx1ZSkKK3sKKwlvdXRiKHZhbHVlLCBjYXJkLT5hZGRyICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1OAorUmVhZFc2NjkyQihzdHJ1Y3QgdzY2OTJfY2ggKmJjLCB1OCBvZmZzZXQpCit7CisJcmV0dXJuIGluYihiYy0+YWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorV3JpdGVXNjY5MkIoc3RydWN0IHc2NjkyX2NoICpiYywgdTggb2Zmc2V0LCB1OCB2YWx1ZSkKK3sKKwlvdXRiKHZhbHVlLCBiYy0+YWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkCitlbmFibGVfaHdpcnEoc3RydWN0IHc2NjkyX2h3ICpjYXJkKQoreworCVdyaXRlVzY2OTIoY2FyZCwgV19JTUFTSywgY2FyZC0+aW1hc2spOworfQorCitzdGF0aWMgdm9pZAorZGlzYWJsZV9od2lycShzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQpCit7CisJV3JpdGVXNjY5MihjYXJkLCBXX0lNQVNLLCAweGZmKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKlc2NjkyVmVyW10gPSB7IlYwMCIsICJWMDEiLCAiVjEwIiwgIlYxMSJ9OworCitzdGF0aWMgdm9pZAorVzY2OTJWZXJzaW9uKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCkKK3sKKwlpbnQgdmFsOworCisJdmFsID0gUmVhZFc2NjkyKGNhcmQsIFdfRF9SQkNIKTsKKwlwcl9ub3RpY2UoIiVzOiBXaW5ib25kIFc2NjkyIHZlcnNpb246ICVzXG4iLCBjYXJkLT5uYW1lLAorCQlXNjY5MlZlclsodmFsID4+IDYpICYgM10pOworfQorCitzdGF0aWMgdm9pZAordzY2OTJfbGVkX2hhbmRsZXIoc3RydWN0IHc2NjkyX2h3ICpjYXJkLCBpbnQgb24pCit7CisJaWYgKCghKGNhcmQtPmZtYXNrICYgbGVkKSkgfHwgY2FyZC0+c3VidHlwZSA9PSBXNjY5Ml9VU1IpCisJCXJldHVybjsKKwlpZiAob24pIHsKKwkJY2FyZC0+eGRhdGEgJj0gMHhmYjsJLyogIExFRCBPTiAqLworCQlXcml0ZVc2NjkyKGNhcmQsIFdfWERBVEEsIGNhcmQtPnhkYXRhKTsKKwl9IGVsc2UgeworCQljYXJkLT54ZGF0YSB8PSAweDA0OwkvKiAgTEVEIE9GRiAqLworCQlXcml0ZVc2NjkyKGNhcmQsIFdfWERBVEEsIGNhcmQtPnhkYXRhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitwaF9jb21tYW5kKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCwgdTggY21kKQoreworCXByX2RlYnVnKCIlczogcGhfY29tbWFuZCAleFxuIiwgY2FyZC0+bmFtZSwgY21kKTsKKwlXcml0ZVc2NjkyKGNhcmQsIFdfQ0lYLCBjbWQpOworfQorCitzdGF0aWMgdm9pZAorVzY2OTJfbmV3X3BoKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCkKK3sKKwlpZiAoY2FyZC0+c3RhdGUgPT0gV19MMUNNRF9SU1QpCisJCXBoX2NvbW1hbmQoY2FyZCwgV19MMUNNRF9EUkMpOworCXNjaGVkdWxlX2V2ZW50KCZjYXJkLT5kY2gsIEZMR19QSENIQU5HRSk7Cit9CisKK3N0YXRpYyB2b2lkCitXNjY5Ml9waF9iaChzdHJ1Y3QgZGNoYW5uZWwgKmRjaCkKK3sKKwlzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQgPSBkY2gtPmh3OworCisJc3dpdGNoIChjYXJkLT5zdGF0ZSkgeworCWNhc2UgV19MMUNNRF9SU1Q6CisJCWRjaC0+c3RhdGUgPSAwOworCQlsMV9ldmVudChkY2gtPmwxLCBIV19SRVNFVF9JTkQpOworCQlicmVhazsKKwljYXNlIFdfTDFJTkRfQ0Q6CisJCWRjaC0+c3RhdGUgPSAzOworCQlsMV9ldmVudChkY2gtPmwxLCBIV19ERUFDVF9DTkYpOworCQlicmVhazsKKwljYXNlIFdfTDFJTkRfRFJEOgorCQlkY2gtPnN0YXRlID0gMzsKKwkJbDFfZXZlbnQoZGNoLT5sMSwgSFdfREVBQ1RfSU5EKTsKKwkJYnJlYWs7CisJY2FzZSBXX0wxSU5EX0NFOgorCQlkY2gtPnN0YXRlID0gNDsKKwkJbDFfZXZlbnQoZGNoLT5sMSwgSFdfUE9XRVJVUF9JTkQpOworCQlicmVhazsKKwljYXNlIFdfTDFJTkRfTEQ6CisJCWlmIChkY2gtPnN0YXRlIDw9IDUpIHsKKwkJCWRjaC0+c3RhdGUgPSA1OworCQkJbDFfZXZlbnQoZGNoLT5sMSwgQU5ZU0lHTkFMKTsKKwkJfSBlbHNlIHsKKwkJCWRjaC0+c3RhdGUgPSA4OworCQkJbDFfZXZlbnQoZGNoLT5sMSwgTE9TVEZSQU1JTkcpOworCQl9CisJCWJyZWFrOworCWNhc2UgV19MMUlORF9BUkQ6CisJCWRjaC0+c3RhdGUgPSA2OworCQlsMV9ldmVudChkY2gtPmwxLCBJTkZPMik7CisJCWJyZWFrOworCWNhc2UgV19MMUlORF9BSTg6CisJCWRjaC0+c3RhdGUgPSA3OworCQlsMV9ldmVudChkY2gtPmwxLCBJTkZPNF9QOCk7CisJCWJyZWFrOworCWNhc2UgV19MMUlORF9BSTEwOgorCQlkY2gtPnN0YXRlID0gNzsKKwkJbDFfZXZlbnQoZGNoLT5sMSwgSU5GTzRfUDEwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoIiVzOiBURSB1bmtub3duIHN0YXRlICUwMnggZGNoIHN0YXRlICUwMnhcbiIsCisJCQljYXJkLT5uYW1lLCBjYXJkLT5zdGF0ZSwgZGNoLT5zdGF0ZSk7CisJCWJyZWFrOworCX0KKwlwcl9kZWJ1ZygiJXM6IFRFIG5ld3N0YXRlICUwMnhcbiIsIGNhcmQtPm5hbWUsIGRjaC0+c3RhdGUpOworfQorCitzdGF0aWMgdm9pZAorVzY2OTJfZW1wdHlfRGZpZm8oc3RydWN0IHc2NjkyX2h3ICpjYXJkLCBpbnQgY291bnQpCit7CisJc3RydWN0IGRjaGFubmVsICpkY2ggPSAmY2FyZC0+ZGNoOworCXU4ICpwdHI7CisKKwlwcl9kZWJ1ZygiJXM6IGVtcHR5X0RmaWZvICVkXG4iLCBjYXJkLT5uYW1lLCBjb3VudCk7CisJaWYgKCFkY2gtPnJ4X3NrYikgeworCQlkY2gtPnJ4X3NrYiA9IG1JX2FsbG9jX3NrYihjYXJkLT5kY2gubWF4bGVuLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFkY2gtPnJ4X3NrYikgeworCQkJcHJfaW5mbygiJXM6IEQgcmVjZWl2ZSBvdXQgb2YgbWVtb3J5XG4iLCBjYXJkLT5uYW1lKTsKKwkJCVdyaXRlVzY2OTIoY2FyZCwgV19EX0NNRFIsIFdfRF9DTURSX1JBQ0spOworCQkJcmV0dXJuOworCQl9CisJfQorCWlmICgoZGNoLT5yeF9za2ItPmxlbiArIGNvdW50KSA+PSBkY2gtPm1heGxlbikgeworCQlwcl9kZWJ1ZygiJXM6IGVtcHR5X0RmaWZvIG92ZXJydW4gJWRcbiIsIGNhcmQtPm5hbWUsCisJCQlkY2gtPnJ4X3NrYi0+bGVuICsgY291bnQpOworCQlXcml0ZVc2NjkyKGNhcmQsIFdfRF9DTURSLCBXX0RfQ01EUl9SQUNLKTsKKwkJcmV0dXJuOworCX0KKwlwdHIgPSBza2JfcHV0KGRjaC0+cnhfc2tiLCBjb3VudCk7CisJaW5zYihjYXJkLT5hZGRyICsgV19EX1JGSUZPLCBwdHIsIGNvdW50KTsKKwlXcml0ZVc2NjkyKGNhcmQsIFdfRF9DTURSLCBXX0RfQ01EUl9SQUNLKTsKKwlpZiAoZGVidWcgJiBERUJVR19IV19ERklGTykgeworCQlzbnByaW50ZihjYXJkLT5sb2csIDYzLCAiRC1yZWN2ICVzICVkICIsCisJCQljYXJkLT5uYW1lLCBjb3VudCk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKGNhcmQtPmxvZywgRFVNUF9QUkVGSVhfT0ZGU0VULCBwdHIsIGNvdW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitXNjY5Ml9maWxsX0RmaWZvKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCkKK3sKKwlzdHJ1Y3QgZGNoYW5uZWwgKmRjaCA9ICZjYXJkLT5kY2g7CisJaW50IGNvdW50OworCXU4ICpwdHI7CisJdTggY21kID0gV19EX0NNRFJfWE1TOworCisJcHJfZGVidWcoIiVzOiBmaWxsX0RmaWZvXG4iLCBjYXJkLT5uYW1lKTsKKwlpZiAoIWRjaC0+dHhfc2tiKQorCQlyZXR1cm47CisJY291bnQgPSBkY2gtPnR4X3NrYi0+bGVuIC0gZGNoLT50eF9pZHg7CisJaWYgKGNvdW50IDw9IDApCisJCXJldHVybjsKKwlpZiAoY291bnQgPiBXX0RfRklGT19USFJFU0gpCisJCWNvdW50ID0gV19EX0ZJRk9fVEhSRVNIOworCWVsc2UKKwkJY21kIHw9IFdfRF9DTURSX1hNRTsKKwlwdHIgPSBkY2gtPnR4X3NrYi0+ZGF0YSArIGRjaC0+dHhfaWR4OworCWRjaC0+dHhfaWR4ICs9IGNvdW50OworCW91dHNiKGNhcmQtPmFkZHIgKyBXX0RfWEZJRk8sIHB0ciwgY291bnQpOworCVdyaXRlVzY2OTIoY2FyZCwgV19EX0NNRFIsIGNtZCk7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoRkxHX0JVU1lfVElNRVIsICZkY2gtPkZsYWdzKSkgeworCQlwcl9kZWJ1ZygiJXM6IGZpbGxfRGZpZm8gZGJ1c3l0aW1lciBydW5uaW5nXG4iLCBjYXJkLT5uYW1lKTsKKwkJZGVsX3RpbWVyKCZkY2gtPnRpbWVyKTsKKwl9CisJaW5pdF90aW1lcigmZGNoLT50aW1lcik7CisJZGNoLT50aW1lci5leHBpcmVzID0gamlmZmllcyArICgoREJVU1lfVElNRVJfVkFMVUUgKiBIWikvMTAwMCk7CisJYWRkX3RpbWVyKCZkY2gtPnRpbWVyKTsKKwlpZiAoZGVidWcgJiBERUJVR19IV19ERklGTykgeworCQlzbnByaW50ZihjYXJkLT5sb2csIDYzLCAiRC1zZW5kICVzICVkICIsCisJCQljYXJkLT5uYW1lLCBjb3VudCk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKGNhcmQtPmxvZywgRFVNUF9QUkVGSVhfT0ZGU0VULCBwdHIsIGNvdW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitkX3JldHJhbnNtaXQoc3RydWN0IHc2NjkyX2h3ICpjYXJkKQoreworCXN0cnVjdCBkY2hhbm5lbCAqZGNoID0gJmNhcmQtPmRjaDsKKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0JVU1lfVElNRVIsICZkY2gtPkZsYWdzKSkKKwkJZGVsX3RpbWVyKCZkY2gtPnRpbWVyKTsKKyNpZmRlZiBGSVhNRQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0wxX0JVU1ksICZkY2gtPkZsYWdzKSkKKwkJZGNoYW5uZWxfc2NoZWRfZXZlbnQoZGNoLCBEX0NMRUFSQlVTWSk7CisjZW5kaWYKKwlpZiAodGVzdF9iaXQoRkxHX1RYX0JVU1ksICZkY2gtPkZsYWdzKSkgeworCQkvKiBSZXN0YXJ0IGZyYW1lICovCisJCWRjaC0+dHhfaWR4ID0gMDsKKwkJVzY2OTJfZmlsbF9EZmlmbyhjYXJkKTsKKwl9IGVsc2UgaWYgKGRjaC0+dHhfc2tiKSB7IC8qIHNob3VsZCBub3QgaGFwcGVuICovCisJCXByX2luZm8oIiVzOiAlcyB3aXRob3V0IFRYX0JVU1lcbiIsIGNhcmQtPm5hbWUsIF9fZnVuY19fKTsKKwkJdGVzdF9hbmRfc2V0X2JpdChGTEdfVFhfQlVTWSwgJmRjaC0+RmxhZ3MpOworCQlkY2gtPnR4X2lkeCA9IDA7CisJCVc2NjkyX2ZpbGxfRGZpZm8oY2FyZCk7CisJfSBlbHNlIHsKKwkJcHJfaW5mbygiJXM6IFhEVSBubyBUWF9CVVNZXG4iLCBjYXJkLT5uYW1lKTsKKwkJaWYgKGdldF9uZXh0X2RmcmFtZShkY2gpKQorCQkJVzY2OTJfZmlsbF9EZmlmbyhjYXJkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfcnhEKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCkgeworCXU4CXN0YXQ7CisJaW50CWNvdW50OworCisJc3RhdCA9IFJlYWRXNjY5MihjYXJkLCBXX0RfUlNUQSk7CisJaWYgKHN0YXQgJiAoV19EX1JTVEFfUkRPViB8IFdfRF9SU1RBX0NSQ0UgfCBXX0RfUlNUQV9STUIpKSB7CisJCWlmIChzdGF0ICYgV19EX1JTVEFfUkRPVikgeworCQkJcHJfZGVidWcoIiVzOiBELWNoYW5uZWwgUkRPVlxuIiwgY2FyZC0+bmFtZSk7CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCQljYXJkLT5kY2guZXJyX3J4Kys7CisjZW5kaWYKKwkJfQorCQlpZiAoc3RhdCAmIFdfRF9SU1RBX0NSQ0UpIHsKKwkJCXByX2RlYnVnKCIlczogRC1jaGFubmVsIENSQyBlcnJvclxuIiwgY2FyZC0+bmFtZSk7CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCQljYXJkLT5kY2guZXJyX2NyYysrOworI2VuZGlmCisJCX0KKwkJaWYgKHN0YXQgJiBXX0RfUlNUQV9STUIpIHsKKwkJCXByX2RlYnVnKCIlczogRC1jaGFubmVsIEFCT1JUXG4iLCBjYXJkLT5uYW1lKTsKKyNpZmRlZiBFUlJPUl9TVEFUSVNUSUMKKwkJCWNhcmQtPmRjaC5lcnJfcngrKzsKKyNlbmRpZgorCQl9CisJCWlmIChjYXJkLT5kY2gucnhfc2tiKQorCQkJZGV2X2tmcmVlX3NrYihjYXJkLT5kY2gucnhfc2tiKTsKKwkJY2FyZC0+ZGNoLnJ4X3NrYiA9IE5VTEw7CisJCVdyaXRlVzY2OTIoY2FyZCwgV19EX0NNRFIsIFdfRF9DTURSX1JBQ0sgfCBXX0RfQ01EUl9SUlNUKTsKKwl9IGVsc2UgeworCQljb3VudCA9IFJlYWRXNjY5MihjYXJkLCBXX0RfUkJDTCkgJiAoV19EX0ZJRk9fVEhSRVNIIC0gMSk7CisJCWlmIChjb3VudCA9PSAwKQorCQkJY291bnQgPSBXX0RfRklGT19USFJFU0g7CisJCVc2NjkyX2VtcHR5X0RmaWZvKGNhcmQsIGNvdW50KTsKKwkJcmVjdl9EY2hhbm5lbCgmY2FyZC0+ZGNoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfdHhEKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCkgeworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0JVU1lfVElNRVIsICZjYXJkLT5kY2guRmxhZ3MpKQorCQlkZWxfdGltZXIoJmNhcmQtPmRjaC50aW1lcik7CisJaWYgKGNhcmQtPmRjaC50eF9za2IgJiYgY2FyZC0+ZGNoLnR4X2lkeCA8IGNhcmQtPmRjaC50eF9za2ItPmxlbikgeworCQlXNjY5Ml9maWxsX0RmaWZvKGNhcmQpOworCX0gZWxzZSB7CisJCWlmIChjYXJkLT5kY2gudHhfc2tiKQorCQkJZGV2X2tmcmVlX3NrYihjYXJkLT5kY2gudHhfc2tiKTsKKwkJaWYgKGdldF9uZXh0X2RmcmFtZSgmY2FyZC0+ZGNoKSkKKwkJCVc2NjkyX2ZpbGxfRGZpZm8oY2FyZCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX3N0YXR1c0Qoc3RydWN0IHc2NjkyX2h3ICpjYXJkKQoreworCXN0cnVjdCBkY2hhbm5lbCAqZGNoID0gJmNhcmQtPmRjaDsKKwl1OCBleHZhbCwgdjEsIGNpcjsKKworCWV4dmFsID0gUmVhZFc2NjkyKGNhcmQsIFdfRF9FWElSKTsKKworCXByX2RlYnVnKCIlczogRF9FWElSICUwMnhcbiIsIGNhcmQtPm5hbWUsIGV4dmFsKTsKKwlpZiAoZXh2YWwgJiAoV19EX0VYSV9YRFVOIHwgV19EX0VYSV9YQ09MKSkgeworCQkvKiBUcmFuc21pdCB1bmRlcnJ1bi9jb2xsaXNpb24gKi8KKwkJcHJfZGVidWcoIiVzOiBELWNoYW5uZWwgdW5kZXJydW4vY29sbGlzaW9uXG4iLCBjYXJkLT5uYW1lKTsKKyNpZmRlZiBFUlJPUl9TVEFUSVNUSUMKKwkJZGNoLT5lcnJfdHgrKzsKKyNlbmRpZgorCQlkX3JldHJhbnNtaXQoY2FyZCk7CisJfQorCWlmIChleHZhbCAmIFdfRF9FWElfUkRPVikgewkvKiBSRE9WICovCisJCXByX2RlYnVnKCIlczogRC1jaGFubmVsIFJET1ZcbiIsIGNhcmQtPm5hbWUpOworCQlXcml0ZVc2NjkyKGNhcmQsIFdfRF9DTURSLCBXX0RfQ01EUl9SUlNUKTsKKwl9CisJaWYgKGV4dmFsICYgV19EX0VYSV9USU4yKQkvKiBUSU4yIC0gbmV2ZXIgKi8KKwkJcHJfZGVidWcoIiVzOiBzcHVyaW91cyBUSU4yIGludGVycnVwdFxuIiwgY2FyZC0+bmFtZSk7CisJaWYgKGV4dmFsICYgV19EX0VYSV9NT0MpIHsJLyogTU9DIC0gbm90IHN1cHBvcnRlZCAqLworCQl2MSA9IFJlYWRXNjY5MihjYXJkLCBXX01PU1IpOworCQlwcl9kZWJ1ZygiJXM6IHNwdXJpb3VzIE1PQyBpbnRlcnJ1cHQgTU9TUiAlMDJ4XG4iLAorCQkJY2FyZC0+bmFtZSwgdjEpOworCX0KKwlpZiAoZXh2YWwgJiBXX0RfRVhJX0lTQykgewkvKiBJU0MgLSBMZXZlbDEgY2hhbmdlICovCisJCWNpciA9IFJlYWRXNjY5MihjYXJkLCBXX0NJUik7CisJCXByX2RlYnVnKCIlczogSVNDIENJUiAlMDJYXG4iLCBjYXJkLT5uYW1lLCBjaXIpOworCQlpZiAoY2lyICYgV19DSVJfSUNDKSB7CisJCQl2MSA9IGNpciAmIFdfQ0lSX0NPRF9NQVNLOworCQkJcHJfZGVidWcoIiVzOiBwaF9zdGF0ZV9jaGFuZ2UgJXggLT4gJXhcbiIsIGNhcmQtPm5hbWUsCisJCQkJZGNoLT5zdGF0ZSwgdjEpOworCQkJY2FyZC0+c3RhdGUgPSB2MTsKKwkJCWlmIChjYXJkLT5mbWFzayAmIGxlZCkgeworCQkJCXN3aXRjaCAodjEpIHsKKwkJCQljYXNlIFdfTDFJTkRfQUk4OgorCQkJCWNhc2UgV19MMUlORF9BSTEwOgorCQkJCQl3NjY5Ml9sZWRfaGFuZGxlcihjYXJkLCAxKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJdzY2OTJfbGVkX2hhbmRsZXIoY2FyZCwgMCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCVc2NjkyX25ld19waChjYXJkKTsKKwkJfQorCQlpZiAoY2lyICYgV19DSVJfU0NDKSB7CisJCQl2MSA9IFJlYWRXNjY5MihjYXJkLCBXX1NRUik7CisJCQlwcl9kZWJ1ZygiJXM6IFNDQyBTUVIgJTAyWFxuIiwgY2FyZC0+bmFtZSwgdjEpOworCQl9CisJfQorCWlmIChleHZhbCAmIFdfRF9FWElfV0VYUCkKKwkJcHJfZGVidWcoIiVzOiBzcHVyaW91cyBXRVhQIGludGVycnVwdCFcbiIsIGNhcmQtPm5hbWUpOworCWlmIChleHZhbCAmIFdfRF9FWElfVEVYUCkKKwkJcHJfZGVidWcoIiVzOiBzcHVyaW91cyBURVhQIGludGVycnVwdCFcbiIsIGNhcmQtPm5hbWUpOworfQorCitzdGF0aWMgdm9pZAorVzY2OTJfZW1wdHlfQmZpZm8oc3RydWN0IHc2NjkyX2NoICp3Y2gsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQgPSB3Y2gtPmJjaC5odzsKKwl1OCAqcHRyOworCisJcHJfZGVidWcoIiVzOiBlbXB0eV9CZmlmbyAlZFxuIiwgY2FyZC0+bmFtZSwgY291bnQpOworCWlmICh1bmxpa2VseSh3Y2gtPmJjaC5zdGF0ZSA9PSBJU0ROX1BfTk9ORSkpIHsKKwkJcHJfZGVidWcoIiVzOiBlbXB0eV9CZmlmbyBJU0ROX1BfTk9ORVxuIiwgY2FyZC0+bmFtZSk7CisJCVdyaXRlVzY2OTJCKHdjaCwgV19CX0NNRFIsIFdfQl9DTURSX1JBQ0sgfCBXX0JfQ01EUl9SQUNUKTsKKwkJaWYgKHdjaC0+YmNoLnJ4X3NrYikKKwkJCXNrYl90cmltKHdjaC0+YmNoLnJ4X3NrYiwgMCk7CisJCXJldHVybjsKKwl9CisJaWYgKCF3Y2gtPmJjaC5yeF9za2IpIHsKKwkJd2NoLT5iY2gucnhfc2tiID0gbUlfYWxsb2Nfc2tiKHdjaC0+YmNoLm1heGxlbiwgR0ZQX0FUT01JQyk7CisJCWlmICh1bmxpa2VseSghd2NoLT5iY2gucnhfc2tiKSkgeworCQkJcHJfaW5mbygiJXM6IEIgcmVjZWl2ZSBvdXQgb2YgbWVtb3J5XG4iLCBjYXJkLT5uYW1lKTsKKwkJCVdyaXRlVzY2OTJCKHdjaCwgV19CX0NNRFIsIFdfQl9DTURSX1JBQ0sgfAorCQkJCVdfQl9DTURSX1JBQ1QpOworCQkJcmV0dXJuOworCQl9CisJfQorCWlmICh3Y2gtPmJjaC5yeF9za2ItPmxlbiArIGNvdW50ID4gd2NoLT5iY2gubWF4bGVuKSB7CisJCXByX2RlYnVnKCIlczogZW1wdHlfQmZpZm8gaW5jb21pbmcgcGFja2V0IHRvbyBsYXJnZVxuIiwKKwkJCWNhcmQtPm5hbWUpOworCQlXcml0ZVc2NjkyQih3Y2gsIFdfQl9DTURSLCBXX0JfQ01EUl9SQUNLIHwgV19CX0NNRFJfUkFDVCk7CisJCXNrYl90cmltKHdjaC0+YmNoLnJ4X3NrYiwgMCk7CisJCXJldHVybjsKKwl9CisJcHRyID0gc2tiX3B1dCh3Y2gtPmJjaC5yeF9za2IsIGNvdW50KTsKKwlpbnNiKHdjaC0+YWRkciArIFdfQl9SRklGTywgcHRyLCBjb3VudCk7CisJV3JpdGVXNjY5MkIod2NoLCBXX0JfQ01EUiwgV19CX0NNRFJfUkFDSyB8IFdfQl9DTURSX1JBQ1QpOworCWlmIChkZWJ1ZyAmIERFQlVHX0hXX0RGSUZPKSB7CisJCXNucHJpbnRmKGNhcmQtPmxvZywgNjMsICJCJTFkLXJlY3YgJXMgJWQgIiwKKwkJCXdjaC0+YmNoLm5yLCBjYXJkLT5uYW1lLCBjb3VudCk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKGNhcmQtPmxvZywgRFVNUF9QUkVGSVhfT0ZGU0VULCBwdHIsIGNvdW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitXNjY5Ml9maWxsX0JmaWZvKHN0cnVjdCB3NjY5Ml9jaCAqd2NoKQoreworCXN0cnVjdCB3NjY5Ml9odyAqY2FyZCA9IHdjaC0+YmNoLmh3OworCWludCBjb3VudDsKKwl1OCAqcHRyLCBjbWQgPSBXX0JfQ01EUl9SQUNUIHwgV19CX0NNRFJfWE1TOworCisJcHJfZGVidWcoIiVzOiBmaWxsIEJmaWZvXG4iLCBjYXJkLT5uYW1lKTsKKwlpZiAoIXdjaC0+YmNoLnR4X3NrYikKKwkJcmV0dXJuOworCWNvdW50ID0gd2NoLT5iY2gudHhfc2tiLT5sZW4gLSB3Y2gtPmJjaC50eF9pZHg7CisJaWYgKGNvdW50IDw9IDApCisJCXJldHVybjsKKwlwdHIgPSB3Y2gtPmJjaC50eF9za2ItPmRhdGEgKyB3Y2gtPmJjaC50eF9pZHg7CisJaWYgKGNvdW50ID4gV19CX0ZJRk9fVEhSRVNIKQorCQljb3VudCA9IFdfQl9GSUZPX1RIUkVTSDsKKwllbHNlIGlmICh0ZXN0X2JpdChGTEdfSERMQywgJndjaC0+YmNoLkZsYWdzKSkKKwkJY21kIHw9IFdfQl9DTURSX1hNRTsKKworCXByX2RlYnVnKCIlczogZmlsbCBCZmlmbyVkLyVkXG4iLCBjYXJkLT5uYW1lLAorCQkJY291bnQsIHdjaC0+YmNoLnR4X2lkeCk7CisJd2NoLT5iY2gudHhfaWR4ICs9IGNvdW50OworCW91dHNiKHdjaC0+YWRkciArIFdfQl9YRklGTywgcHRyLCBjb3VudCk7CisJV3JpdGVXNjY5MkIod2NoLCBXX0JfQ01EUiwgY21kKTsKKwlpZiAoZGVidWcgJiBERUJVR19IV19ERklGTykgeworCQlzbnByaW50ZihjYXJkLT5sb2csIDYzLCAiQiUxZC1zZW5kICVzICVkICIsCisJCQl3Y2gtPmJjaC5uciwgY2FyZC0+bmFtZSwgY291bnQpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcyhjYXJkLT5sb2csIERVTVBfUFJFRklYX09GRlNFVCwgcHRyLCBjb3VudCk7CisJfQorfQorCitzdGF0aWMgaW50CitzZXR2b2x1bWUoc3RydWN0IHc2NjkyX2NoICp3Y2gsIGludCBtaWMsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHc2NjkyX2h3ICpjYXJkID0gd2NoLT5iY2guaHc7CisJdTE2ICp2b2wgPSAodTE2ICopc2tiLT5kYXRhOworCXU4IHZhbDsKKworCWlmICgoIShjYXJkLT5mbWFzayAmIHBvdHMpKSB8fAorCSAgICAhdGVzdF9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmd2NoLT5iY2guRmxhZ3MpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoc2tiLT5sZW4gPCAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoKnZvbCA+IDcpCisJCXJldHVybiAtRUlOVkFMOworCXZhbCA9ICp2b2wgJiA3OworCXZhbCA9IDcgLSB2YWw7CisJaWYgKG1pYykgeworCQl2YWwgPDw9IDM7CisJCWNhcmQtPnhhZGRyICY9IDB4Yzc7CisJfSBlbHNlIHsKKwkJY2FyZC0+eGFkZHIgJj0gMHhmODsKKwl9CisJY2FyZC0+eGFkZHIgfD0gdmFsOworCVdyaXRlVzY2OTIoY2FyZCwgV19YQUREUiwgY2FyZC0+eGFkZHIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitlbmFibGVfcG90cyhzdHJ1Y3QgdzY2OTJfY2ggKndjaCkKK3sKKwlzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQgPSB3Y2gtPmJjaC5odzsKKworCWlmICgoIShjYXJkLT5mbWFzayAmIHBvdHMpKSB8fAorCSAgICAhdGVzdF9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmd2NoLT5iY2guRmxhZ3MpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwl3Y2gtPmJfbW9kZSB8PSBXX0JfTU9ERV9FUENNIHwgV19CX01PREVfQlNXMDsKKwlXcml0ZVc2NjkyQih3Y2gsIFdfQl9NT0RFLCB3Y2gtPmJfbW9kZSk7CisJV3JpdGVXNjY5MkIod2NoLCBXX0JfQ01EUiwgV19CX0NNRFJfUlJTVCB8IFdfQl9DTURSX1hSU1QpOworCWNhcmQtPnBjdGwgfD0gKCh3Y2gtPmJjaC5uciAmIDIpID8gV19QQ1RMX1BDWCA6IDApOworCVdyaXRlVzY2OTIoY2FyZCwgV19QQ1RMLCBjYXJkLT5wY3RsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZGlzYWJsZV9wb3RzKHN0cnVjdCB3NjY5Ml9jaCAqd2NoKQoreworCXN0cnVjdCB3NjY5Ml9odyAqY2FyZCA9IHdjaC0+YmNoLmh3OworCisJaWYgKCEoY2FyZC0+Zm1hc2sgJiBwb3RzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJd2NoLT5iX21vZGUgJj0gfihXX0JfTU9ERV9FUENNIHwgV19CX01PREVfQlNXMCk7CisJV3JpdGVXNjY5MkIod2NoLCBXX0JfTU9ERSwgd2NoLT5iX21vZGUpOworCVdyaXRlVzY2OTJCKHdjaCwgV19CX0NNRFIsIFdfQl9DTURSX1JSU1QgfCBXX0JfQ01EUl9SQUNUIHwKKwkJV19CX0NNRFJfWFJTVCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3c2NjkyX21vZGUoc3RydWN0IHc2NjkyX2NoICp3Y2gsIHUzMiBwcikKK3sKKwlzdHJ1Y3QgdzY2OTJfaHcJKmNhcmQ7CisKKwljYXJkID0gd2NoLT5iY2guaHc7CisJcHJfZGVidWcoIiVzOiBCJWQgcHJvdG9jb2wgJXgtLT4leFxuIiwgY2FyZC0+bmFtZSwKKwkJd2NoLT5iY2gubnIsIHdjaC0+YmNoLnN0YXRlLCBwcik7CisJc3dpdGNoIChwcikgeworCWNhc2UgSVNETl9QX05PTkU6CisJCWlmICgoY2FyZC0+Zm1hc2sgJiBwb3RzKSAmJiAod2NoLT5iX21vZGUgJiBXX0JfTU9ERV9FUENNKSkKKwkJCWRpc2FibGVfcG90cyh3Y2gpOworCQl3Y2gtPmJfbW9kZSA9IDA7CisJCW1JU0ROX2NsZWFyX2JjaGFubmVsKCZ3Y2gtPmJjaCk7CisJCVdyaXRlVzY2OTJCKHdjaCwgV19CX01PREUsIHdjaC0+Yl9tb2RlKTsKKwkJV3JpdGVXNjY5MkIod2NoLCBXX0JfQ01EUiwgV19CX0NNRFJfUlJTVCB8IFdfQl9DTURSX1hSU1QpOworCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0hETEMsICZ3Y2gtPmJjaC5GbGFncyk7CisJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfVFJBTlNQQVJFTlQsICZ3Y2gtPmJjaC5GbGFncyk7CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfUkFXOgorCQl3Y2gtPmJfbW9kZSA9IFdfQl9NT0RFX01NUzsKKwkJV3JpdGVXNjY5MkIod2NoLCBXX0JfTU9ERSwgd2NoLT5iX21vZGUpOworCQlXcml0ZVc2NjkyQih3Y2gsIFdfQl9FWElNLCAwKTsKKwkJV3JpdGVXNjY5MkIod2NoLCBXX0JfQ01EUiwgV19CX0NNRFJfUlJTVCB8IFdfQl9DTURSX1JBQ1QgfAorCQkJV19CX0NNRFJfWFJTVCk7CisJCXRlc3RfYW5kX3NldF9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmd2NoLT5iY2guRmxhZ3MpOworCQlicmVhazsKKwljYXNlIElTRE5fUF9CX0hETEM6CisJCXdjaC0+Yl9tb2RlID0gV19CX01PREVfSVRGOworCQlXcml0ZVc2NjkyQih3Y2gsIFdfQl9NT0RFLCB3Y2gtPmJfbW9kZSk7CisJCVdyaXRlVzY2OTJCKHdjaCwgV19CX0FETTEsIDB4ZmYpOworCQlXcml0ZVc2NjkyQih3Y2gsIFdfQl9BRE0yLCAweGZmKTsKKwkJV3JpdGVXNjY5MkIod2NoLCBXX0JfRVhJTSwgMCk7CisJCVdyaXRlVzY2OTJCKHdjaCwgV19CX0NNRFIsIFdfQl9DTURSX1JSU1QgfCBXX0JfQ01EUl9SQUNUIHwKKwkJCVdfQl9DTURSX1hSU1QpOworCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19IRExDLCAmd2NoLT5iY2guRmxhZ3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCIlczogcHJvdG9jb2wgJXggbm90IGtub3duXG4iLCBjYXJkLT5uYW1lLCBwcik7CisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisJfQorCXdjaC0+YmNoLnN0YXRlID0gcHI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzZW5kX25leHQoc3RydWN0IHc2NjkyX2NoICp3Y2gpCit7CisJaWYgKHdjaC0+YmNoLnR4X3NrYiAmJiB3Y2gtPmJjaC50eF9pZHggPCB3Y2gtPmJjaC50eF9za2ItPmxlbikKKwkJVzY2OTJfZmlsbF9CZmlmbyh3Y2gpOworCWVsc2UgeworCQlpZiAod2NoLT5iY2gudHhfc2tiKSB7CisJCQkvKiBzZW5kIGNvbmZpcm0sIG9uIHRyYW5zLCBmcmVlIG9uIGhkbGMuICovCisJCQlpZiAodGVzdF9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmd2NoLT5iY2guRmxhZ3MpKQorCQkJCWNvbmZpcm1fQnNlbmQoJndjaC0+YmNoKTsKKwkJCWRldl9rZnJlZV9za2Iod2NoLT5iY2gudHhfc2tiKTsKKwkJfQorCQlpZiAoZ2V0X25leHRfYmZyYW1lKCZ3Y2gtPmJjaCkpCisJCQlXNjY5Ml9maWxsX0JmaWZvKHdjaCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorVzY2OTJCX2ludGVycnVwdChzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQsIGludCBjaCkKK3sKKwlzdHJ1Y3QgdzY2OTJfY2gJKndjaCA9ICZjYXJkLT5iY1tjaF07CisJaW50CQljb3VudDsKKwl1OAkJc3RhdCwgc3RhciA9IDA7CisKKwlzdGF0ID0gUmVhZFc2NjkyQih3Y2gsIFdfQl9FWElSKTsKKwlwcl9kZWJ1ZygiJXM6IEIlZCBFWElSICUwMnhcbiIsIGNhcmQtPm5hbWUsIHdjaC0+YmNoLm5yLCBzdGF0KTsKKwlpZiAoc3RhdCAmIFdfQl9FWElfUk1FKSB7CisJCXN0YXIgPSBSZWFkVzY2OTJCKHdjaCwgV19CX1NUQVIpOworCQlpZiAoc3RhciAmIChXX0JfU1RBUl9SRE9WIHwgV19CX1NUQVJfQ1JDRSB8IFdfQl9TVEFSX1JNQikpIHsKKwkJCWlmICgoc3RhciAmIFdfQl9TVEFSX1JET1YpICYmCisJCQkgICAgdGVzdF9iaXQoRkxHX0FDVElWRSwgJndjaC0+YmNoLkZsYWdzKSkgeworCQkJCXByX2RlYnVnKCIlczogQiVkIFJET1YgcHJvdG89JXhcbiIsIGNhcmQtPm5hbWUsCisJCQkJCXdjaC0+YmNoLm5yLCB3Y2gtPmJjaC5zdGF0ZSk7CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCQkJd2NoLT5iY2guZXJyX3JkbysrOworI2VuZGlmCisJCQl9CisJCQlpZiAodGVzdF9iaXQoRkxHX0hETEMsICZ3Y2gtPmJjaC5GbGFncykpIHsKKwkJCQlpZiAoc3RhciAmIFdfQl9TVEFSX0NSQ0UpIHsKKwkJCQkJcHJfZGVidWcoIiVzOiBCJWQgQ1JDIGVycm9yXG4iLAorCQkJCQkJY2FyZC0+bmFtZSwgd2NoLT5iY2gubnIpOworI2lmZGVmIEVSUk9SX1NUQVRJU1RJQworCQkJCQl3Y2gtPmJjaC5lcnJfY3JjKys7CisjZW5kaWYKKwkJCQl9CisJCQkJaWYgKHN0YXIgJiBXX0JfU1RBUl9STUIpIHsKKwkJCQkJcHJfZGVidWcoIiVzOiBCJWQgbWVzc2FnZSBhYm9ydFxuIiwKKwkJCQkJCWNhcmQtPm5hbWUsIHdjaC0+YmNoLm5yKTsKKyNpZmRlZiBFUlJPUl9TVEFUSVNUSUMKKwkJCQkJd2NoLT5iY2guZXJyX2ludisrOworI2VuZGlmCisJCQkJfQorCQkJfQorCQkJV3JpdGVXNjY5MkIod2NoLCBXX0JfQ01EUiwgV19CX0NNRFJfUkFDSyB8CisJCQkJV19CX0NNRFJfUlJTVCB8IFdfQl9DTURSX1JBQ1QpOworCQkJaWYgKHdjaC0+YmNoLnJ4X3NrYikKKwkJCQlza2JfdHJpbSh3Y2gtPmJjaC5yeF9za2IsIDApOworCQl9IGVsc2UgeworCQkJY291bnQgPSBSZWFkVzY2OTJCKHdjaCwgV19CX1JCQ0wpICYKKwkJCQkoV19CX0ZJRk9fVEhSRVNIIC0gMSk7CisJCQlpZiAoY291bnQgPT0gMCkKKwkJCQljb3VudCA9IFdfQl9GSUZPX1RIUkVTSDsKKwkJCVc2NjkyX2VtcHR5X0JmaWZvKHdjaCwgY291bnQpOworCQkJcmVjdl9CY2hhbm5lbCgmd2NoLT5iY2gsIDApOworCQl9CisJfQorCWlmIChzdGF0ICYgV19CX0VYSV9STVIpIHsKKwkJaWYgKCEoc3RhdCAmIFdfQl9FWElfUk1FKSkKKwkJCXN0YXIgPSBSZWFkVzY2OTJCKHdjaCwgV19CX1NUQVIpOworCQlpZiAoc3RhciAmIFdfQl9TVEFSX1JET1YpIHsKKwkJCXByX2RlYnVnKCIlczogQiVkIFJET1YgcHJvdG89JXhcbiIsIGNhcmQtPm5hbWUsCisJCQkJd2NoLT5iY2gubnIsIHdjaC0+YmNoLnN0YXRlKTsKKyNpZmRlZiBFUlJPUl9TVEFUSVNUSUMKKwkJCXdjaC0+YmNoLmVycl9yZG8rKzsKKyNlbmRpZgorCQkJV3JpdGVXNjY5MkIod2NoLCBXX0JfQ01EUiwgV19CX0NNRFJfUkFDSyB8CisJCQkJV19CX0NNRFJfUlJTVCB8IFdfQl9DTURSX1JBQ1QpOworCQl9IGVsc2UgeworCQkJVzY2OTJfZW1wdHlfQmZpZm8od2NoLCBXX0JfRklGT19USFJFU0gpOworCQkJaWYgKHRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJndjaC0+YmNoLkZsYWdzKSAmJgorCQkJICAgIHdjaC0+YmNoLnJ4X3NrYiAmJiAod2NoLT5iY2gucnhfc2tiLT5sZW4gPiAwKSkKKwkJCQlyZWN2X0JjaGFubmVsKCZ3Y2gtPmJjaCwgMCk7CisJCX0KKwl9CisJaWYgKHN0YXQgJiBXX0JfRVhJX1JET1YpIHsKKwkJLyogb25seSBpZiBpdCBpcyBub3QgaGFuZGxlZCB5ZXQgKi8KKwkJaWYgKCEoc3RhciAmIFdfQl9TVEFSX1JET1YpKSB7CisJCQlwcl9kZWJ1ZygiJXM6IEIlZCBSRE9WIElSUSBwcm90bz0leFxuIiwgY2FyZC0+bmFtZSwKKwkJCQl3Y2gtPmJjaC5uciwgd2NoLT5iY2guc3RhdGUpOworI2lmZGVmIEVSUk9SX1NUQVRJU1RJQworCQkJd2NoLT5iY2guZXJyX3JkbysrOworI2VuZGlmCisJCQlXcml0ZVc2NjkyQih3Y2gsIFdfQl9DTURSLCBXX0JfQ01EUl9SQUNLIHwKKwkJCQlXX0JfQ01EUl9SUlNUIHwgV19CX0NNRFJfUkFDVCk7CisJCX0KKwl9CisJaWYgKHN0YXQgJiBXX0JfRVhJX1hGUikgeworCQlpZiAoIShzdGF0ICYgKFdfQl9FWElfUk1FIHwgV19CX0VYSV9STVIpKSkgeworCQkJc3RhciA9IFJlYWRXNjY5MkIod2NoLCBXX0JfU1RBUik7CisJCQlwcl9kZWJ1ZygiJXM6IEIlZCBzdGFyICUwMnhcbiIsIGNhcmQtPm5hbWUsCisJCQkJd2NoLT5iY2gubnIsIHN0YXIpOworCQl9CisJCWlmIChzdGFyICYgV19CX1NUQVJfWERPVykgeworCQkJcHJfZGVidWcoIiVzOiBCJWQgWERPVyBwcm90bz0leFxuIiwgY2FyZC0+bmFtZSwKKwkJCQl3Y2gtPmJjaC5uciwgd2NoLT5iY2guc3RhdGUpOworI2lmZGVmIEVSUk9SX1NUQVRJU1RJQworCQkJd2NoLT5iY2guZXJyX3hkdSsrOworI2VuZGlmCisJCQlXcml0ZVc2NjkyQih3Y2gsIFdfQl9DTURSLCBXX0JfQ01EUl9YUlNUIHwKKwkJCQlXX0JfQ01EUl9SQUNUKTsKKwkJCS8qIHJlc2VuZCAqLworCQkJaWYgKHdjaC0+YmNoLnR4X3NrYikgeworCQkJCWlmICghdGVzdF9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmd2NoLT5iY2guRmxhZ3MpKQorCQkJCQl3Y2gtPmJjaC50eF9pZHggPSAwOworCQkJfQorCQl9CisJCXNlbmRfbmV4dCh3Y2gpOworCQlpZiAoc3RhdCAmIFdfQl9FWElfWERVTikKKwkJCXJldHVybjsgLyogaGFuZGxlIFhET1cgb25seSBvbmNlICovCisJfQorCWlmIChzdGF0ICYgV19CX0VYSV9YRFVOKSB7CisJCXByX2RlYnVnKCIlczogQiVkIFhEVU4gcHJvdG89JXhcbiIsIGNhcmQtPm5hbWUsCisJCQl3Y2gtPmJjaC5uciwgd2NoLT5iY2guc3RhdGUpOworI2lmZGVmIEVSUk9SX1NUQVRJU1RJQworCQl3Y2gtPmJjaC5lcnJfeGR1Kys7CisjZW5kaWYKKwkJV3JpdGVXNjY5MkIod2NoLCBXX0JfQ01EUiwgV19CX0NNRFJfWFJTVCB8IFdfQl9DTURSX1JBQ1QpOworCQkvKiByZXNlbmQgKi8KKwkJaWYgKHdjaC0+YmNoLnR4X3NrYikgeworCQkJaWYgKCF0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZ3Y2gtPmJjaC5GbGFncykpCisJCQkJd2NoLT5iY2gudHhfaWR4ID0gMDsKKwkJfQorCQlzZW5kX25leHQod2NoKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAordzY2OTJfaXJxKGludCBpbnRubywgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB3NjY5Ml9odwkqY2FyZCA9IGRldl9pZDsKKwl1OAkJaXN0YTsKKworCXNwaW5fbG9jaygmY2FyZC0+bG9jayk7CisJaXN0YSA9IFJlYWRXNjY5MihjYXJkLCBXX0lTVEEpOworCWlmICgoaXN0YSB8IGNhcmQtPmltYXNrKSA9PSBjYXJkLT5pbWFzaykgeworCQkvKiBwb3NzaWJsZSBhIHNoYXJlZCAgSVJRIHJlcWVzdCAqLworCQlzcGluX3VubG9jaygmY2FyZC0+bG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisJY2FyZC0+aXJxY250Kys7CisJcHJfZGVidWcoIiVzOiBpc3RhICUwMnhcbiIsIGNhcmQtPm5hbWUsIGlzdGEpOworCWlzdGEgJj0gfmNhcmQtPmltYXNrOworCWlmIChpc3RhICYgV19JTlRfQjFfRVhJKQorCQlXNjY5MkJfaW50ZXJydXB0KGNhcmQsIDApOworCWlmIChpc3RhICYgV19JTlRfQjJfRVhJKQorCQlXNjY5MkJfaW50ZXJydXB0KGNhcmQsIDEpOworCWlmIChpc3RhICYgV19JTlRfRF9STUUpCisJCWhhbmRsZV9yeEQoY2FyZCk7CisJaWYgKGlzdGEgJiBXX0lOVF9EX1JNUikKKwkJVzY2OTJfZW1wdHlfRGZpZm8oY2FyZCwgV19EX0ZJRk9fVEhSRVNIKTsKKwlpZiAoaXN0YSAmIFdfSU5UX0RfWEZSKQorCQloYW5kbGVfdHhEKGNhcmQpOworCWlmIChpc3RhICYgV19JTlRfRF9FWEkpCisJCWhhbmRsZV9zdGF0dXNEKGNhcmQpOworCWlmIChpc3RhICYgKFdfSU5UX1hJTlQwIHwgV19JTlRfWElOVDEpKSAvKiBYSU5UMC8xIC0gbmV2ZXIgKi8KKwkJcHJfZGVidWcoIiVzOiBXNjY5MiBzcHVyaW91cyBYSU5UIVxuIiwgY2FyZC0+bmFtZSk7CisvKiBFbmQgSVJRIEhhbmRsZXIgKi8KKwlzcGluX3VubG9jaygmY2FyZC0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZAorZGJ1c3lfdGltZXJfaGFuZGxlcihzdHJ1Y3QgZGNoYW5uZWwgKmRjaCkKK3sKKwlzdHJ1Y3QgdzY2OTJfaHcJKmNhcmQgPSBkY2gtPmh3OworCWludAkJcmJjaCwgc3RhcjsKKwl1X2xvbmcJCWZsYWdzOworCisJaWYgKHRlc3RfYml0KEZMR19CVVNZX1RJTUVSLCAmZGNoLT5GbGFncykpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJcmJjaCA9IFJlYWRXNjY5MihjYXJkLCBXX0RfUkJDSCk7CisJCXN0YXIgPSBSZWFkVzY2OTIoY2FyZCwgV19EX1NUQVIpOworCQlwcl9kZWJ1ZygiJXM6IEQtQ2hhbm5lbCBCdXN5IFJCQ0ggJTAyeCBTVEFSICUwMnhcbiIsCisJCQljYXJkLT5uYW1lLCByYmNoLCBzdGFyKTsKKwkJaWYgKHN0YXIgJiBXX0RfU1RBUl9YQlopCS8qIEQtQ2hhbm5lbCBCdXN5ICovCisJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19MMV9CVVNZLCAmZGNoLT5GbGFncyk7CisJCWVsc2UgeworCQkJLyogZGlzY2FyZCBmcmFtZTsgcmVzZXQgdHJhbnNjZWl2ZXIgKi8KKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQlVTWV9USU1FUiwgJmRjaC0+RmxhZ3MpOworCQkJaWYgKGRjaC0+dHhfaWR4KQorCQkJCWRjaC0+dHhfaWR4ID0gMDsKKwkJCWVsc2UKKwkJCQlwcl9pbmZvKCIlczogVzY2OTIgRC1DaGFubmVsIEJ1c3kgbm8gdHhfaWR4XG4iLAorCQkJCQljYXJkLT5uYW1lKTsKKwkJCS8qIFRyYW5zbWl0dGVyIHJlc2V0ICovCisJCQlXcml0ZVc2NjkyKGNhcmQsIFdfRF9DTURSLCBXX0RfQ01EUl9YUlNUKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJfQorfQorCit2b2lkIGluaXRXNjY5MihzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQpCit7CisJdTgJdmFsOworCisJY2FyZC0+ZGNoLnRpbWVyLmZ1bmN0aW9uID0gKHZvaWQgKilkYnVzeV90aW1lcl9oYW5kbGVyOworCWNhcmQtPmRjaC50aW1lci5kYXRhID0gKHVfbG9uZykmY2FyZC0+ZGNoOworCWluaXRfdGltZXIoJmNhcmQtPmRjaC50aW1lcik7CisJdzY2OTJfbW9kZSgmY2FyZC0+YmNbMF0sIElTRE5fUF9OT05FKTsKKwl3NjY5Ml9tb2RlKCZjYXJkLT5iY1sxXSwgSVNETl9QX05PTkUpOworCVdyaXRlVzY2OTIoY2FyZCwgV19EX0NUTCwgMHgwMCk7CisJZGlzYWJsZV9od2lycShjYXJkKTsKKwlXcml0ZVc2NjkyKGNhcmQsIFdfRF9TQU0sIDB4ZmYpOworCVdyaXRlVzY2OTIoY2FyZCwgV19EX1RBTSwgMHhmZik7CisJV3JpdGVXNjY5MihjYXJkLCBXX0RfTU9ERSwgV19EX01PREVfUkFDVCk7CisJY2FyZC0+c3RhdGUgPSBXX0wxQ01EX1JTVDsKKwlwaF9jb21tYW5kKGNhcmQsIFdfTDFDTURfUlNUKTsKKwlwaF9jb21tYW5kKGNhcmQsIFdfTDFDTURfRUNLKTsKKwkvKiBlbmFibGUgYWxsIElSUSBidXQgZXh0ZXJuICovCisJY2FyZC0+aW1hc2sgPSAweDE4OworCVdyaXRlVzY2OTIoY2FyZCwgV19EX0VYSU0sIDB4MDApOworCVdyaXRlVzY2OTJCKCZjYXJkLT5iY1swXSwgV19CX0VYSU0sIDApOworCVdyaXRlVzY2OTJCKCZjYXJkLT5iY1sxXSwgV19CX0VYSU0sIDApOworCS8qIFJlc2V0IEQtY2hhbiByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgKi8KKwlXcml0ZVc2NjkyKGNhcmQsIFdfRF9DTURSLCBXX0RfQ01EUl9SUlNUIHwgV19EX0NNRFJfWFJTVCk7CisJLyogUmVzZXQgQi1jaGFuIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciAqLworCVdyaXRlVzY2OTJCKCZjYXJkLT5iY1swXSwgV19CX0NNRFIsIFdfQl9DTURSX1JSU1QgfCBXX0JfQ01EUl9YUlNUKTsKKwlXcml0ZVc2NjkyQigmY2FyZC0+YmNbMV0sIFdfQl9DTURSLCBXX0JfQ01EUl9SUlNUIHwgV19CX0NNRFJfWFJTVCk7CisJLyogZW5hYmxlIHBlcmlwaGVyYWwgKi8KKwlpZiAoY2FyZC0+c3VidHlwZSA9PSBXNjY5Ml9VU1IpIHsKKwkJLyogc2VlbXMgdGhhdCBVU1IgaW1wbGVtZW50ZWQgc29tZSBwb3dlciBjb250cm9sIGZlYXR1cmVzCisJCSAqIFBpbiA3OSBpcyBjb25uZWN0ZWQgdG8gdGhlIG9zY2lsYXRvciBjaXJjdWl0IHNvIHdlCisJCSAqIGhhdmUgdG8gaGFuZGxlIGl0IGhlcmUKKwkJICovCisJCWNhcmQtPnBjdGwgPSAweDgwOworCQljYXJkLT54ZGF0YSA9IDA7CisJCVdyaXRlVzY2OTIoY2FyZCwgV19QQ1RMLCBjYXJkLT5wY3RsKTsKKwkJV3JpdGVXNjY5MihjYXJkLCBXX1hEQVRBLCBjYXJkLT54ZGF0YSk7CisJfSBlbHNlIHsKKwkJY2FyZC0+cGN0bCA9IFdfUENUTF9PRTUgfCBXX1BDVExfT0U0IHwgV19QQ1RMX09FMiB8CisJCQlXX1BDVExfT0UxIHwgV19QQ1RMX09FMDsKKwkJY2FyZC0+eGFkZHIgPSAweDAwOy8qIGFsbCBzdyBvZmYgKi8KKwkJaWYgKGNhcmQtPmZtYXNrICYgcG90cykKKwkJCWNhcmQtPnhkYXRhIHw9IDB4MDY7CS8qICBQT1dFUiBVUC8gTEVEIE9GRiAvIEFMQVcgKi8KKwkJaWYgKGNhcmQtPmZtYXNrICYgbGVkKQorCQkJY2FyZC0+eGRhdGEgfD0gMHgwNDsJLyogTEVEIE9GRiAqLworCQlpZiAoKGNhcmQtPmZtYXNrICYgcG90cykgfHwgKGNhcmQtPmZtYXNrICYgbGVkKSkgeworCQkJV3JpdGVXNjY5MihjYXJkLCBXX1BDVEwsIGNhcmQtPnBjdGwpOworCQkJV3JpdGVXNjY5MihjYXJkLCBXX1hBRERSLCBjYXJkLT54YWRkcik7CisJCQlXcml0ZVc2NjkyKGNhcmQsIFdfWERBVEEsIGNhcmQtPnhkYXRhKTsKKwkJCXZhbCA9IFJlYWRXNjY5MihjYXJkLCBXX1hBRERSKTsKKwkJCWlmIChkZWJ1ZyAmIERFQlVHX0hXKQorCQkJCXByX25vdGljZSgiJXM6IFdfWEFERFI9JTAyeFxuIiwKKwkJCQkJY2FyZC0+bmFtZSwgdmFsKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK3Jlc2V0X3c2NjkyKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCkKK3sKKwlXcml0ZVc2NjkyKGNhcmQsIFdfRF9DVEwsIFdfRF9DVExfU1JTVCk7CisJbWRlbGF5KDEwKTsKKwlXcml0ZVc2NjkyKGNhcmQsIFdfRF9DVEwsIDApOworfQorCitzdGF0aWMgaW50Citpbml0X2NhcmQoc3RydWN0IHc2NjkyX2h3ICpjYXJkKQoreworCWludAljbnQgPSAzOworCXVfbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJZGlzYWJsZV9od2lycShjYXJkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJaWYgKHJlcXVlc3RfaXJxKGNhcmQtPmlycSwgdzY2OTJfaXJxLCBJUlFGX1NIQVJFRCwgY2FyZC0+bmFtZSwgY2FyZCkpIHsKKwkJcHJfaW5mbygiJXM6IGNvdWxkbid0IGdldCBpbnRlcnJ1cHQgJWRcbiIsIGNhcmQtPm5hbWUsCisJCQljYXJkLT5pcnEpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJd2hpbGUgKGNudC0tKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCWluaXRXNjY5MihjYXJkKTsKKwkJZW5hYmxlX2h3aXJxKGNhcmQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCS8qIFRpbWVvdXQgMTBtcyAqLworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisJCWlmIChkZWJ1ZyAmIERFQlVHX0hXKQorCQkJcHJfbm90aWNlKCIlczogSVJRICVkIGNvdW50ICVkXG4iLCBjYXJkLT5uYW1lLAorCQkJCWNhcmQtPmlycSwgY2FyZC0+aXJxY250KTsKKwkJaWYgKCFjYXJkLT5pcnFjbnQpIHsKKwkJCXByX2luZm8oIiVzOiBJUlEoJWQpIGdldHRpbmcgbm8gSVJRcyBkdXJpbmcgaW5pdCAlZFxuIiwKKwkJCQljYXJkLT5uYW1lLCBjYXJkLT5pcnEsIDMgLSBjbnQpOworCQkJcmVzZXRfdzY2OTIoY2FyZCk7CisJCX0gZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCWZyZWVfaXJxKGNhcmQtPmlycSwgY2FyZCk7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQKK3c2NjkyX2wybDFCKHN0cnVjdCBtSVNETmNoYW5uZWwgKmNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBiY2hhbm5lbCAqYmNoID0gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgYmNoYW5uZWwsIGNoKTsKKwlzdHJ1Y3QgdzY2OTJfY2gJKmJjID0gY29udGFpbmVyX29mKGJjaCwgc3RydWN0IHc2NjkyX2NoLCBiY2gpOworCXN0cnVjdCB3NjY5Ml9odyAqY2FyZCA9IGJjaC0+aHc7CisJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IG1JU0ROaGVhZCAqaGggPSBtSVNETl9IRUFEX1Aoc2tiKTsKKwl1MzIgaWQ7CisJdV9sb25nIGZsYWdzOworCisJc3dpdGNoIChoaC0+cHJpbSkgeworCWNhc2UgUEhfREFUQV9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCXJldCA9IGJjaGFubmVsX3NlbmRkYXRhKGJjaCwgc2tiKTsKKwkJaWYgKHJldCA+IDApIHsgLyogZGlyZWN0IFRYICovCisJCQlpZCA9IGhoLT5pZDsgLyogc2tiIGNhbiBiZSBmcmVlZCAqLworCQkJcmV0ID0gMDsKKwkJCVc2NjkyX2ZpbGxfQmZpZm8oYmMpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQkJaWYgKCF0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZiY2gtPkZsYWdzKSkKKwkJCQlxdWV1ZV9jaF9mcmFtZShjaCwgUEhfREFUQV9DTkYsIGlkLCBOVUxMKTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiByZXQ7CisJY2FzZSBQSF9BQ1RJVkFURV9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChGTEdfQUNUSVZFLCAmYmNoLT5GbGFncykpCisJCQlyZXQgPSB3NjY5Ml9tb2RlKGJjLCBjaC0+cHJvdG9jb2wpOworCQllbHNlCisJCQlyZXQgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCWlmICghcmV0KQorCQkJX3F1ZXVlX2RhdGEoY2gsIFBIX0FDVElWQVRFX0lORCwgTUlTRE5fSURfQU5ZLCAwLAorCQkJCU5VTEwsIEdGUF9LRVJORUwpOworCQlicmVhazsKKwljYXNlIFBIX0RFQUNUSVZBVEVfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQltSVNETl9jbGVhcl9iY2hhbm5lbChiY2gpOworCQl3NjY5Ml9tb2RlKGJjLCBJU0ROX1BfTk9ORSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJX3F1ZXVlX2RhdGEoY2gsIFBIX0RFQUNUSVZBVEVfSU5ELCBNSVNETl9JRF9BTlksIDAsCisJCQlOVUxMLCBHRlBfS0VSTkVMKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6ICVzIHVua25vd24gcHJpbSgleCwleClcbiIsCisJCQljYXJkLT5uYW1lLCBfX2Z1bmNfXywgaGgtPnByaW0sIGhoLT5pZCk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCWlmICghcmV0KQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorY2hhbm5lbF9iY3RybChzdHJ1Y3QgYmNoYW5uZWwgKmJjaCwgc3RydWN0IG1JU0ROX2N0cmxfcmVxICpjcSkKK3sKKwlpbnQJcmV0ID0gMDsKKworCXN3aXRjaCAoY3EtPm9wKSB7CisJY2FzZSBNSVNETl9DVFJMX0dFVE9QOgorCQljcS0+b3AgPSAwOworCQlicmVhazsKKwkvKiBOb3RoaW5nIGltcGxlbWVudGVkIHlldCAqLworCWNhc2UgTUlTRE5fQ1RSTF9GSUxMX0VNUFRZOgorCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiB1bmtub3duIE9wICV4XG4iLCBfX2Z1bmNfXywgY3EtPm9wKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK29wZW5fYmNoYW5uZWwoc3RydWN0IHc2NjkyX2h3ICpjYXJkLCBzdHJ1Y3QgY2hhbm5lbF9yZXEgKnJxKQoreworCXN0cnVjdCBiY2hhbm5lbCAqYmNoOworCisJaWYgKHJxLT5hZHIuY2hhbm5lbCA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChycS0+cHJvdG9jb2wgPT0gSVNETl9QX05PTkUpCisJCXJldHVybiAtRUlOVkFMOworCWJjaCA9ICZjYXJkLT5iY1tycS0+YWRyLmNoYW5uZWwgLSAxXS5iY2g7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoRkxHX09QRU4sICZiY2gtPkZsYWdzKSkKKwkJcmV0dXJuIC1FQlVTWTsgLyogYi1jaGFubmVsIGNhbiBiZSBvbmx5IG9wZW4gb25jZSAqLworCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfRklMTEVNUFRZLCAmYmNoLT5GbGFncyk7CisJYmNoLT5jaC5wcm90b2NvbCA9IHJxLT5wcm90b2NvbDsKKwlycS0+Y2ggPSAmYmNoLT5jaDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY2hhbm5lbF9jdHJsKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCwgc3RydWN0IG1JU0ROX2N0cmxfcmVxICpjcSkKK3sKKwlpbnQJcmV0ID0gMDsKKworCXN3aXRjaCAoY3EtPm9wKSB7CisJY2FzZSBNSVNETl9DVFJMX0dFVE9QOgorCQljcS0+b3AgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCIlczogdW5rbm93biBDVFJMIE9QICV4XG4iLCBjYXJkLT5uYW1lLCBjcS0+b3ApOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAordzY2OTJfYmN0cmwoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHUzMiBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmNoYW5uZWwgKmJjaCA9IGNvbnRhaW5lcl9vZihjaCwgc3RydWN0IGJjaGFubmVsLCBjaCk7CisJc3RydWN0IHc2NjkyX2NoICpiYyA9IGNvbnRhaW5lcl9vZihiY2gsIHN0cnVjdCB3NjY5Ml9jaCwgYmNoKTsKKwlzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQgPSBiY2gtPmh3OworCWludCByZXQgPSAtRUlOVkFMOworCXVfbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCIlczogJXMgY21kOiV4ICVwXG4iLCBjYXJkLT5uYW1lLCBfX2Z1bmNfXywgY21kLCBhcmcpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBDTE9TRV9DSEFOTkVMOgorCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX09QRU4sICZiY2gtPkZsYWdzKTsKKwkJaWYgKHRlc3RfYml0KEZMR19BQ1RJVkUsICZiY2gtPkZsYWdzKSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJCW1JU0ROX2ZyZWViY2hhbm5lbChiY2gpOworCQkJdzY2OTJfbW9kZShiYywgSVNETl9QX05PTkUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQl9IGVsc2UgeworCQkJc2tiX3F1ZXVlX3B1cmdlKCZiY2gtPnJxdWV1ZSk7CisJCQliY2gtPnJjb3VudCA9IDA7CisJCX0KKwkJY2gtPnByb3RvY29sID0gSVNETl9QX05PTkU7CisJCWNoLT5wZWVyID0gTlVMTDsKKwkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgQ09OVFJPTF9DSEFOTkVMOgorCQlyZXQgPSBjaGFubmVsX2JjdHJsKGJjaCwgYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6ICVzIHVua25vd24gcHJpbSgleClcbiIsCisJCQljYXJkLT5uYW1lLCBfX2Z1bmNfXywgY21kKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAordzY2OTJfbDJsMUQoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG1JU0ROZGV2aWNlCSpkZXYgPSBjb250YWluZXJfb2YoY2gsIHN0cnVjdCBtSVNETmRldmljZSwgRCk7CisJc3RydWN0IGRjaGFubmVsCQkqZGNoID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRjaGFubmVsLCBkZXYpOworCXN0cnVjdCB3NjY5Ml9odwkJKmNhcmQgPSBjb250YWluZXJfb2YoZGNoLCBzdHJ1Y3QgdzY2OTJfaHcsIGRjaCk7CisJaW50CQkJcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgbUlTRE5oZWFkCSpoaCA9IG1JU0ROX0hFQURfUChza2IpOworCXUzMgkJCWlkOworCXVfbG9uZwkJCWZsYWdzOworCisJc3dpdGNoIChoaC0+cHJpbSkgeworCWNhc2UgUEhfREFUQV9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCXJldCA9IGRjaGFubmVsX3NlbmRkYXRhKGRjaCwgc2tiKTsKKwkJaWYgKHJldCA+IDApIHsgLyogZGlyZWN0IFRYICovCisJCQlpZCA9IGhoLT5pZDsgLyogc2tiIGNhbiBiZSBmcmVlZCAqLworCQkJVzY2OTJfZmlsbF9EZmlmbyhjYXJkKTsKKwkJCXJldCA9IDA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCQlxdWV1ZV9jaF9mcmFtZShjaCwgUEhfREFUQV9DTkYsIGlkLCBOVUxMKTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiByZXQ7CisJY2FzZSBQSF9BQ1RJVkFURV9SRVE6CisJCXJldCA9IGwxX2V2ZW50KGRjaC0+bDEsIGhoLT5wcmltKTsKKwkJYnJlYWs7CisJY2FzZSBQSF9ERUFDVElWQVRFX1JFUToKKwkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19MMl9BQ1RJVkFURUQsICZkY2gtPkZsYWdzKTsKKwkJcmV0ID0gbDFfZXZlbnQoZGNoLT5sMSwgaGgtPnByaW0pOworCQlicmVhazsKKwl9CisKKwlpZiAoIXJldCkKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3c2NjkyX2wxY2FsbGJhY2soc3RydWN0IGRjaGFubmVsICpkY2gsIHUzMiBjbWQpCit7CisJc3RydWN0IHc2NjkyX2h3ICpjYXJkID0gY29udGFpbmVyX29mKGRjaCwgc3RydWN0IHc2NjkyX2h3LCBkY2gpOworCXVfbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCIlczogY21kKCV4KSBzdGF0ZSglMDJ4KVxuIiwgY2FyZC0+bmFtZSwgY21kLCBjYXJkLT5zdGF0ZSk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIElORk8zX1A4OgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlwaF9jb21tYW5kKGNhcmQsIFdfTDFDTURfQVI4KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIElORk8zX1AxMDoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJcGhfY29tbWFuZChjYXJkLCBXX0wxQ01EX0FSMTApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgSFdfUkVTRVRfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlpZiAoY2FyZC0+c3RhdGUgIT0gV19MMUlORF9EUkQpCisJCQlwaF9jb21tYW5kKGNhcmQsIFdfTDFDTURfUlNUKTsKKwkJcGhfY29tbWFuZChjYXJkLCBXX0wxQ01EX0VDSyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBIV19ERUFDVF9SRVE6CisJCXNrYl9xdWV1ZV9wdXJnZSgmZGNoLT5zcXVldWUpOworCQlpZiAoZGNoLT50eF9za2IpIHsKKwkJCWRldl9rZnJlZV9za2IoZGNoLT50eF9za2IpOworCQkJZGNoLT50eF9za2IgPSBOVUxMOworCQl9CisJCWRjaC0+dHhfaWR4ID0gMDsKKwkJaWYgKGRjaC0+cnhfc2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiKGRjaC0+cnhfc2tiKTsKKwkJCWRjaC0+cnhfc2tiID0gTlVMTDsKKwkJfQorCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RYX0JVU1ksICZkY2gtPkZsYWdzKTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQlVTWV9USU1FUiwgJmRjaC0+RmxhZ3MpKQorCQkJZGVsX3RpbWVyKCZkY2gtPnRpbWVyKTsKKwkJYnJlYWs7CisJY2FzZSBIV19QT1dFUlVQX1JFUToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJcGhfY29tbWFuZChjYXJkLCBXX0wxQ01EX0VDSyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBQSF9BQ1RJVkFURV9JTkQ6CisJCXRlc3RfYW5kX3NldF9iaXQoRkxHX0FDVElWRSwgJmRjaC0+RmxhZ3MpOworCQlfcXVldWVfZGF0YSgmZGNoLT5kZXYuRCwgY21kLCBNSVNETl9JRF9BTlksIDAsIE5VTEwsCisJCQlHRlBfQVRPTUlDKTsKKwkJYnJlYWs7CisJY2FzZSBQSF9ERUFDVElWQVRFX0lORDoKKwkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19BQ1RJVkUsICZkY2gtPkZsYWdzKTsKKwkJX3F1ZXVlX2RhdGEoJmRjaC0+ZGV2LkQsIGNtZCwgTUlTRE5fSURfQU5ZLCAwLCBOVUxMLAorCQkJR0ZQX0FUT01JQyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCIlczogJXMgdW5rbm93biBjb21tYW5kICV4XG4iLCBjYXJkLT5uYW1lLAorCQkJX19mdW5jX18sIGNtZCk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK29wZW5fZGNoYW5uZWwoc3RydWN0IHc2NjkyX2h3ICpjYXJkLCBzdHJ1Y3QgY2hhbm5lbF9yZXEgKnJxKQoreworCXByX2RlYnVnKCIlczogJXMgZGV2KCVkKSBvcGVuIGZyb20gJXBcbiIsIGNhcmQtPm5hbWUsIF9fZnVuY19fLAorCQljYXJkLT5kY2guZGV2LmlkLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMSkpOworCWlmIChycS0+cHJvdG9jb2wgIT0gSVNETl9QX1RFX1MwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocnEtPmFkci5jaGFubmVsID09IDEpCisJCS8qIEUtQ2hhbm5lbCBub3Qgc3VwcG9ydGVkICovCisJCXJldHVybiAtRUlOVkFMOworCXJxLT5jaCA9ICZjYXJkLT5kY2guZGV2LkQ7CisJcnEtPmNoLT5wcm90b2NvbCA9IHJxLT5wcm90b2NvbDsKKwlpZiAoY2FyZC0+ZGNoLnN0YXRlID09IDcpCisJCV9xdWV1ZV9kYXRhKHJxLT5jaCwgUEhfQUNUSVZBVEVfSU5ELCBNSVNETl9JRF9BTlksCisJCSAgICAwLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordzY2OTJfZGN0cmwoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHUzMiBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbUlTRE5kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihjaCwgc3RydWN0IG1JU0ROZGV2aWNlLCBEKTsKKwlzdHJ1Y3QgZGNoYW5uZWwgKmRjaCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkY2hhbm5lbCwgZGV2KTsKKwlzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQgPSBjb250YWluZXJfb2YoZGNoLCBzdHJ1Y3QgdzY2OTJfaHcsIGRjaCk7CisJc3RydWN0IGNoYW5uZWxfcmVxICpycTsKKwlpbnQgZXJyID0gMDsKKworCXByX2RlYnVnKCIlczogRENUUkw6ICV4ICVwXG4iLCBjYXJkLT5uYW1lLCBjbWQsIGFyZyk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE9QRU5fQ0hBTk5FTDoKKwkJcnEgPSBhcmc7CisJCWlmIChycS0+cHJvdG9jb2wgPT0gSVNETl9QX1RFX1MwKQorCQkJZXJyID0gb3Blbl9kY2hhbm5lbChjYXJkLCBycSk7CisJCWVsc2UKKwkJCWVyciA9IG9wZW5fYmNoYW5uZWwoY2FyZCwgcnEpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQorCQkJcHJfaW5mbygiJXM6IGNhbm5vdCBnZXQgbW9kdWxlXG4iLCBjYXJkLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9TRV9DSEFOTkVMOgorCQlwcl9kZWJ1ZygiJXM6IGRldiglZCkgY2xvc2UgZnJvbSAlcFxuIiwgY2FyZC0+bmFtZSwKKwkJCWRjaC0+ZGV2LmlkLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwkJYnJlYWs7CisJY2FzZSBDT05UUk9MX0NIQU5ORUw6CisJCWVyciA9IGNoYW5uZWxfY3RybChjYXJkLCBhcmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiJXM6IHVua25vd24gRENUUkwgY29tbWFuZCAleFxuIiwgY2FyZC0+bmFtZSwgY21kKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK3NldHVwX3c2NjkyKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCkKK3sKKwl1MzIJdmFsOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjYXJkLT5hZGRyLCAyNTYsIGNhcmQtPm5hbWUpKSB7CisJCXByX2luZm8oIiVzOiBjb25maWcgcG9ydCAleC0leCBhbHJlYWR5IGluIHVzZVxuIiwgY2FyZC0+bmFtZSwKKwkJICAgICAgIGNhcmQtPmFkZHIsIGNhcmQtPmFkZHIgKyAyNTUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJVzY2OTJWZXJzaW9uKGNhcmQpOworCWNhcmQtPmJjWzBdLmFkZHIgPSBjYXJkLT5hZGRyOworCWNhcmQtPmJjWzFdLmFkZHIgPSBjYXJkLT5hZGRyICsgMHg0MDsKKwl2YWwgPSBSZWFkVzY2OTIoY2FyZCwgV19JU1RBKTsKKwlpZiAoZGVidWcgJiBERUJVR19IVykKKwkJcHJfbm90aWNlKCIlcyBJU1RBPSUwMnhcbiIsIGNhcmQtPm5hbWUsIHZhbCk7CisJdmFsID0gUmVhZFc2NjkyKGNhcmQsIFdfSU1BU0spOworCWlmIChkZWJ1ZyAmIERFQlVHX0hXKQorCQlwcl9ub3RpY2UoIiVzIElNQVNLPSUwMnhcbiIsIGNhcmQtPm5hbWUsIHZhbCk7CisJdmFsID0gUmVhZFc2NjkyKGNhcmQsIFdfRF9FWElSKTsKKwlpZiAoZGVidWcgJiBERUJVR19IVykKKwkJcHJfbm90aWNlKCIlcyBEX0VYSVI9JTAyeFxuIiwgY2FyZC0+bmFtZSwgdmFsKTsKKwl2YWwgPSBSZWFkVzY2OTIoY2FyZCwgV19EX0VYSU0pOworCWlmIChkZWJ1ZyAmIERFQlVHX0hXKQorCQlwcl9ub3RpY2UoIiVzIERfRVhJTT0lMDJ4XG4iLCBjYXJkLT5uYW1lLCB2YWwpOworCXZhbCA9IFJlYWRXNjY5MihjYXJkLCBXX0RfUlNUQSk7CisJaWYgKGRlYnVnICYgREVCVUdfSFcpCisJCXByX25vdGljZSgiJXMgRF9SU1RBPSUwMnhcbiIsIGNhcmQtPm5hbWUsIHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlX2NhcmQoc3RydWN0IHc2NjkyX2h3ICpjYXJkKQoreworCXVfbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJZGlzYWJsZV9od2lycShjYXJkKTsKKwl3NjY5Ml9tb2RlKCZjYXJkLT5iY1swXSwgSVNETl9QX05PTkUpOworCXc2NjkyX21vZGUoJmNhcmQtPmJjWzFdLCBJU0ROX1BfTk9ORSk7CisJaWYgKChjYXJkLT5mbWFzayAmIGxlZCkgfHwgY2FyZC0+c3VidHlwZSA9PSBXNjY5Ml9VU1IpIHsKKwkJY2FyZC0+eGRhdGEgfD0gMHgwNDsJLyogIExFRCBPRkYgKi8KKwkJV3JpdGVXNjY5MihjYXJkLCBXX1hEQVRBLCBjYXJkLT54ZGF0YSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwlmcmVlX2lycShjYXJkLT5pcnEsIGNhcmQpOworCWwxX2V2ZW50KGNhcmQtPmRjaC5sMSwgQ0xPU0VfQ0hBTk5FTCk7CisJbUlTRE5fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhcmQtPmRjaC5kZXYpOworCXJlbGVhc2VfcmVnaW9uKGNhcmQtPmFkZHIsIDI1Nik7CisJbUlTRE5fZnJlZWJjaGFubmVsKCZjYXJkLT5iY1sxXS5iY2gpOworCW1JU0ROX2ZyZWViY2hhbm5lbCgmY2FyZC0+YmNbMF0uYmNoKTsKKwltSVNETl9mcmVlZGNoYW5uZWwoJmNhcmQtPmRjaCk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmY2FyZC0+bGlzdCk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCXBjaV9kaXNhYmxlX2RldmljZShjYXJkLT5wZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEoY2FyZC0+cGRldiwgTlVMTCk7CisJa2ZyZWUoY2FyZCk7Cit9CisKK3N0YXRpYyBpbnQKK3NldHVwX2luc3RhbmNlKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCkKK3sKKwlpbnQJCWksIGVycjsKKwl1X2xvbmcJCWZsYWdzOworCisJc25wcmludGYoY2FyZC0+bmFtZSwgTUlTRE5fTUFYX0lETEVOIC0gMSwgInc2NjkyLiVkIiwgdzY2OTJfY250ICsgMSk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjYXJkLT5saXN0LCAmQ2FyZHMpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwljYXJkLT5mbWFzayA9ICgxIDw8IHc2NjkyX2NudCk7CisJX3NldF9kZWJ1ZyhjYXJkKTsKKwlzcGluX2xvY2tfaW5pdCgmY2FyZC0+bG9jayk7CisJbUlTRE5faW5pdGRjaGFubmVsKCZjYXJkLT5kY2gsIE1BWF9ERlJBTUVfTEVOX0wxLCBXNjY5Ml9waF9iaCk7CisJY2FyZC0+ZGNoLmRldi5EcHJvdG9jb2xzID0gKDEgPDwgSVNETl9QX1RFX1MwKTsKKwljYXJkLT5kY2guZGV2LkQuc2VuZCA9IHc2NjkyX2wybDFEOworCWNhcmQtPmRjaC5kZXYuRC5jdHJsID0gdzY2OTJfZGN0cmw7CisJY2FyZC0+ZGNoLmRldi5CcHJvdG9jb2xzID0gKDEgPDwgKElTRE5fUF9CX1JBVyAmIElTRE5fUF9CX01BU0spKSB8CisJCSgxIDw8IChJU0ROX1BfQl9IRExDICYgSVNETl9QX0JfTUFTSykpOworCWNhcmQtPmRjaC5odyA9IGNhcmQ7CisJY2FyZC0+ZGNoLmRldi5ucmJjaGFuID0gMjsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCW1JU0ROX2luaXRiY2hhbm5lbCgmY2FyZC0+YmNbaV0uYmNoLCBNQVhfREFUQV9NRU0pOworCQljYXJkLT5iY1tpXS5iY2guaHcgPSBjYXJkOworCQljYXJkLT5iY1tpXS5iY2gubnIgPSBpICsgMTsKKwkJY2FyZC0+YmNbaV0uYmNoLmNoLm5yID0gaSArIDE7CisJCWNhcmQtPmJjW2ldLmJjaC5jaC5zZW5kID0gdzY2OTJfbDJsMUI7CisJCWNhcmQtPmJjW2ldLmJjaC5jaC5jdHJsID0gdzY2OTJfYmN0cmw7CisJCXNldF9jaGFubmVsbWFwKGkgKyAxLCBjYXJkLT5kY2guZGV2LmNoYW5uZWxtYXApOworCQlsaXN0X2FkZCgmY2FyZC0+YmNbaV0uYmNoLmNoLmxpc3QsICZjYXJkLT5kY2guZGV2LmJjaGFubmVscyk7CisJfQorCWVyciA9IHNldHVwX3c2NjkyKGNhcmQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3Jfc2V0dXA7CisJZXJyID0gbUlTRE5fcmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT5kY2guZGV2LCAmY2FyZC0+cGRldi0+ZGV2LAorCQljYXJkLT5uYW1lKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yX3JlZzsKKwllcnIgPSBpbml0X2NhcmQoY2FyZCk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcl9pbml0OworCWVyciA9IGNyZWF0ZV9sMSgmY2FyZC0+ZGNoLCB3NjY5Ml9sMWNhbGxiYWNrKTsKKwlpZiAoIWVycikgeworCQl3NjY5Ml9jbnQrKzsKKwkJcHJfbm90aWNlKCJXNjY5MiAlZCBjYXJkcyBpbnN0YWxsZWRcbiIsIHc2NjkyX2NudCk7CisJCXJldHVybiAwOworCX0KKworCWZyZWVfaXJxKGNhcmQtPmlycSwgY2FyZCk7CitlcnJvcl9pbml0OgorCW1JU0ROX3VucmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT5kY2guZGV2KTsKK2Vycm9yX3JlZzoKKwlyZWxlYXNlX3JlZ2lvbihjYXJkLT5hZGRyLCAyNTYpOworZXJyb3Jfc2V0dXA6CisJbUlTRE5fZnJlZWJjaGFubmVsKCZjYXJkLT5iY1sxXS5iY2gpOworCW1JU0ROX2ZyZWViY2hhbm5lbCgmY2FyZC0+YmNbMF0uYmNoKTsKKwltSVNETl9mcmVlZGNoYW5uZWwoJmNhcmQtPmRjaCk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmY2FyZC0+bGlzdCk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCWtmcmVlKGNhcmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0Cit3NjY5Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlpbnQJCWVyciA9IC1FTk9NRU07CisJc3RydWN0IHc2NjkyX2h3CSpjYXJkOworCXN0cnVjdCB3NjY5Mm1hcAkqbSA9IChzdHJ1Y3QgdzY2OTJtYXAgKillbnQtPmRyaXZlcl9kYXRhOworCisJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3NjY5Ml9odyksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkgeworCQlwcl9pbmZvKCJObyBrbWVtIGZvciB3NjY5MiBjYXJkXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJY2FyZC0+cGRldiA9IHBkZXY7CisJY2FyZC0+c3VidHlwZSA9IG0tPnN1YnR5cGU7CisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlrZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJtSVNETl93NjY5MjogZm91bmQgYWRhcHRlciAlcyBhdCAlc1xuIiwKKwkgICAgICAgbS0+bmFtZSwgcGNpX25hbWUocGRldikpOworCisJY2FyZC0+YWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKwljYXJkLT5pcnEgPSBwZGV2LT5pcnE7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCWVyciA9IHNldHVwX2luc3RhbmNlKGNhcmQpOworCWlmIChlcnIpCisJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQKK3c2NjkyX3JlbW92ZV9wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHc2NjkyX2h3CSpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGNhcmQpCisJCXJlbGVhc2VfY2FyZChjYXJkKTsKKwllbHNlCisJCWlmIChkZWJ1ZykKKwkJCXByX25vdGljZSgiJXM6IGRydmRhdGEgYWxscmVhZHkgcmVtb3ZlZFxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdzY2OTJfaWRzW10gPSB7CisJeyBQQ0lfVkVORE9SX0lEX0RZTkFMSU5LLCBQQ0lfREVWSUNFX0lEX0RZTkFMSU5LX0lTNjRQSCwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsICh1bG9uZykmdzY2OTJfbWFwWzBdfSwKKwl7IFBDSV9WRU5ET1JfSURfV0lOQk9ORDIsIFBDSV9ERVZJQ0VfSURfV0lOQk9ORDJfNjY5MiwKKwkgIFBDSV9WRU5ET1JfSURfVVNSLCBQQ0lfREVWSUNFX0lEX1VTUl82NjkyLCAwLCAwLAorCSAgKHVsb25nKSZ3NjY5Ml9tYXBbMl19LAorCXsgUENJX1ZFTkRPUl9JRF9XSU5CT05EMiwgUENJX0RFVklDRV9JRF9XSU5CT05EMl82NjkyLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgKHVsb25nKSZ3NjY5Ml9tYXBbMV19LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB3NjY5Ml9pZHMpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdzY2OTJfZHJpdmVyID0geworCS5uYW1lID0gICJ3NjY5MiIsCisJLnByb2JlID0gdzY2OTJfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHc2NjkyX3JlbW92ZV9wY2kpLAorCS5pZF90YWJsZSA9IHc2NjkyX2lkcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHc2NjkyX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJcHJfbm90aWNlKCJXaW5ib25kIFc2NjkyIFBDSSBkcml2ZXIgUmV2LiAlc1xuIiwgVzY2OTJfUkVWKTsKKworCWVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnc2NjkyX2RyaXZlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHc2NjkyX2NsZWFudXAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnc2NjkyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHc2NjkyX2luaXQpOworbW9kdWxlX2V4aXQodzY2OTJfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vdzY2OTIuaCBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi93NjY5Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NTY5NzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vdzY2OTIuaApAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIFdpbmJvbmQgVzY2OTIgc3BlY2lmaWMgZGVmaW5lcworICoKKyAqIEF1dGhvciAgICAgICBLYXJzdGVuIEtlaWwgPGtlaWxAaXNkbjRsaW51eC5kZT4KKyAqCQliYXNlZCBvbiB0aGUgdzY2OTIgSTRMIGRyaXZlciBmcm9tIFBldHIgTm92YWsgPHBldHIubm92YWtAaS5jej4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOSAgYnkgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKy8qIFNwZWNpZmljYXRpb25zIG9mIFc2NjkyIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFdfRF9SRklGTwkweDAwCS8qIFIgKi8KKyNkZWZpbmUgV19EX1hGSUZPCTB4MDQJLyogVyAqLworI2RlZmluZSBXX0RfQ01EUgkweDA4CS8qIFcgKi8KKyNkZWZpbmUgV19EX01PREUJMHgwYwkvKiBSL1cgKi8KKyNkZWZpbmUgV19EX1RJTVIJMHgxMAkvKiBSL1cgKi8KKyNkZWZpbmUgV19JU1RBCQkweDE0CS8qIFJfY2xyICovCisjZGVmaW5lIFdfSU1BU0sJCTB4MTgJLyogUi9XICovCisjZGVmaW5lIFdfRF9FWElSCTB4MWMJLyogUl9jbHIgKi8KKyNkZWZpbmUgV19EX0VYSU0JMHgyMAkvKiBSL1cgKi8KKyNkZWZpbmUgV19EX1NUQVIJMHgyNAkvKiBSICovCisjZGVmaW5lIFdfRF9SU1RBCTB4MjgJLyogUiAqLworI2RlZmluZSBXX0RfU0FNCQkweDJjCS8qIFIvVyAqLworI2RlZmluZSBXX0RfU0FQMQkweDMwCS8qIFIvVyAqLworI2RlZmluZSBXX0RfU0FQMgkweDM0CS8qIFIvVyAqLworI2RlZmluZSBXX0RfVEFNCQkweDM4CS8qIFIvVyAqLworI2RlZmluZSBXX0RfVEVJMQkweDNjCS8qIFIvVyAqLworI2RlZmluZSBXX0RfVEVJMgkweDQwCS8qIFIvVyAqLworI2RlZmluZSBXX0RfUkJDSAkweDQ0CS8qIFIgKi8KKyNkZWZpbmUgV19EX1JCQ0wJMHg0OAkvKiBSICovCisjZGVmaW5lIFdfVElNUjIJCTB4NGMJLyogVyAqLworI2RlZmluZSBXX0wxX1JDCQkweDUwCS8qIFIvVyAqLworI2RlZmluZSBXX0RfQ1RMCQkweDU0CS8qIFIvVyAqLworI2RlZmluZSBXX0NJUgkJMHg1OAkvKiBSICovCisjZGVmaW5lIFdfQ0lYCQkweDVjCS8qIFcgKi8KKyNkZWZpbmUgV19TUVIJCTB4NjAJLyogUiAqLworI2RlZmluZSBXX1NRWAkJMHg2NAkvKiBXICovCisjZGVmaW5lIFdfUENUTAkJMHg2OAkvKiBSL1cgKi8KKyNkZWZpbmUgV19NT1IJCTB4NmMJLyogUiAqLworI2RlZmluZSBXX01PWAkJMHg3MAkvKiBSL1cgKi8KKyNkZWZpbmUgV19NT1NSCQkweDc0CS8qIFJfY2xyICovCisjZGVmaW5lIFdfTU9DUgkJMHg3OAkvKiBSL1cgKi8KKyNkZWZpbmUgV19HQ1IJCTB4N2MJLyogUi9XICovCisKKyNkZWZpbmUJV19CX1JGSUZPCTB4ODAJLyogUiAqLworI2RlZmluZQlXX0JfWEZJRk8JMHg4NAkvKiBXICovCisjZGVmaW5lCVdfQl9DTURSCTB4ODgJLyogVyAqLworI2RlZmluZQlXX0JfTU9ERQkweDhjCS8qIFIvVyAqLworI2RlZmluZQlXX0JfRVhJUgkweDkwCS8qIFJfY2xyICovCisjZGVmaW5lCVdfQl9FWElNCTB4OTQJLyogUi9XICovCisjZGVmaW5lCVdfQl9TVEFSCTB4OTgJLyogUiAqLworI2RlZmluZQlXX0JfQURNMQkweDljCS8qIFIvVyAqLworI2RlZmluZQlXX0JfQURNMgkweGEwCS8qIFIvVyAqLworI2RlZmluZQlXX0JfQURSMQkweGE0CS8qIFIvVyAqLworI2RlZmluZQlXX0JfQURSMgkweGE4CS8qIFIvVyAqLworI2RlZmluZQlXX0JfUkJDTAkweGFjCS8qIFIgKi8KKyNkZWZpbmUJV19CX1JCQ0gJMHhiMAkvKiBSICovCisKKyNkZWZpbmUgV19YQUREUgkJMHhmNAkvKiBSL1cgKi8KKyNkZWZpbmUgV19YREFUQQkJMHhmOAkvKiBSL1cgKi8KKyNkZWZpbmUgV19FUENUTAkJMHhmYwkvKiBXICovCisKKy8qIFc2NjkyIHJlZ2lzdGVyIGJpdHMgKi8KKworI2RlZmluZQlXX0RfQ01EUl9YUlNUCTB4MDEKKyNkZWZpbmUJV19EX0NNRFJfWE1FCTB4MDIKKyNkZWZpbmUJV19EX0NNRFJfWE1TCTB4MDgKKyNkZWZpbmUJV19EX0NNRFJfU1RUCTB4MTAKKyNkZWZpbmUJV19EX0NNRFJfUlJTVAkweDQwCisjZGVmaW5lCVdfRF9DTURSX1JBQ0sJMHg4MAorCisjZGVmaW5lCVdfRF9NT0RFX1JMUAkweDAxCisjZGVmaW5lCVdfRF9NT0RFX0RMUAkweDAyCisjZGVmaW5lCVdfRF9NT0RFX01GRAkweDA0CisjZGVmaW5lCVdfRF9NT0RFX1RFRQkweDA4CisjZGVmaW5lCVdfRF9NT0RFX1RNUwkweDEwCisjZGVmaW5lCVdfRF9NT0RFX1JBQ1QJMHg0MAorI2RlZmluZQlXX0RfTU9ERV9NTVMJMHg4MAorCisjZGVmaW5lIFdfSU5UX0IyX0VYSQkweDAxCisjZGVmaW5lIFdfSU5UX0IxX0VYSQkweDAyCisjZGVmaW5lIFdfSU5UX0RfRVhJCTB4MDQKKyNkZWZpbmUgV19JTlRfWElOVDAJMHgwOAorI2RlZmluZSBXX0lOVF9YSU5UMQkweDEwCisjZGVmaW5lIFdfSU5UX0RfWEZSCTB4MjAKKyNkZWZpbmUgV19JTlRfRF9STUUJMHg0MAorI2RlZmluZSBXX0lOVF9EX1JNUgkweDgwCisKKyNkZWZpbmUgV19EX0VYSV9XRVhQCTB4MDEKKyNkZWZpbmUgV19EX0VYSV9URVhQCTB4MDIKKyNkZWZpbmUgV19EX0VYSV9JU0MJMHgwNAorI2RlZmluZSBXX0RfRVhJX01PQwkweDA4CisjZGVmaW5lIFdfRF9FWElfVElOMgkweDEwCisjZGVmaW5lIFdfRF9FWElfWENPTAkweDIwCisjZGVmaW5lIFdfRF9FWElfWERVTgkweDQwCisjZGVmaW5lIFdfRF9FWElfUkRPVgkweDgwCisKKyNkZWZpbmUJV19EX1NUQVJfRFJEWQkweDEwCisjZGVmaW5lCVdfRF9TVEFSX1hCWgkweDIwCisjZGVmaW5lCVdfRF9TVEFSX1hET1cJMHg4MAorCisjZGVmaW5lIFdfRF9SU1RBX1JNQgkweDEwCisjZGVmaW5lIFdfRF9SU1RBX0NSQ0UJMHgyMAorI2RlZmluZSBXX0RfUlNUQV9SRE9WCTB4NDAKKworI2RlZmluZSBXX0RfQ1RMX1NSU1QJMHgyMAorCisjZGVmaW5lIFdfQ0lSX1NDQwkweDgwCisjZGVmaW5lIFdfQ0lSX0lDQwkweDQwCisjZGVmaW5lIFdfQ0lSX0NPRF9NQVNLCTB4MGYKKworI2RlZmluZSBXX1BDVExfUENYCTB4MDEKKyNkZWZpbmUgV19QQ1RMX1hNT0RFCTB4MDIKKyNkZWZpbmUgV19QQ1RMX09FMAkweDA0CisjZGVmaW5lIFdfUENUTF9PRTEJMHgwOAorI2RlZmluZSBXX1BDVExfT0UyCTB4MTAKKyNkZWZpbmUgV19QQ1RMX09FMwkweDIwCisjZGVmaW5lIFdfUENUTF9PRTQJMHg0MAorI2RlZmluZSBXX1BDVExfT0U1CTB4ODAKKworI2RlZmluZQlXX0JfQ01EUl9YUlNUCTB4MDEKKyNkZWZpbmUJV19CX0NNRFJfWE1FCTB4MDIKKyNkZWZpbmUJV19CX0NNRFJfWE1TCTB4MDQKKyNkZWZpbmUJV19CX0NNRFJfUkFDVAkweDIwCisjZGVmaW5lCVdfQl9DTURSX1JSU1QJMHg0MAorI2RlZmluZQlXX0JfQ01EUl9SQUNLCTB4ODAKKworI2RlZmluZQlXX0JfTU9ERV9GVFMwCTB4MDEKKyNkZWZpbmUJV19CX01PREVfRlRTMQkweDAyCisjZGVmaW5lCVdfQl9NT0RFX1NXNTYJMHgwNAorI2RlZmluZQlXX0JfTU9ERV9CU1cwCTB4MDgKKyNkZWZpbmUJV19CX01PREVfQlNXMQkweDEwCisjZGVmaW5lCVdfQl9NT0RFX0VQQ00JMHgyMAorI2RlZmluZQlXX0JfTU9ERV9JVEYJMHg0MAorI2RlZmluZQlXX0JfTU9ERV9NTVMJMHg4MAorCisjZGVmaW5lCVdfQl9FWElfWERVTgkweDAxCisjZGVmaW5lCVdfQl9FWElfWEZSCTB4MDIKKyNkZWZpbmUJV19CX0VYSV9SRE9WCTB4MTAKKyNkZWZpbmUJV19CX0VYSV9STUUJMHgyMAorI2RlZmluZQlXX0JfRVhJX1JNUgkweDQwCisKKyNkZWZpbmUJV19CX1NUQVJfWEJaCTB4MDEKKyNkZWZpbmUJV19CX1NUQVJfWERPVwkweDA0CisjZGVmaW5lCVdfQl9TVEFSX1JNQgkweDEwCisjZGVmaW5lCVdfQl9TVEFSX0NSQ0UJMHgyMAorI2RlZmluZQlXX0JfU1RBUl9SRE9WCTB4NDAKKworI2RlZmluZQlXX0JfUkJDSF9MT1YJMHgyMAorCisvKiBXNjY5MiBMYXllcjEgY29tbWFuZHMgKi8KKworI2RlZmluZQlXX0wxQ01EX0VDSwkweDAwCisjZGVmaW5lIFdfTDFDTURfUlNUCTB4MDEKKyNkZWZpbmUgV19MMUNNRF9TQ1AJMHgwNAorI2RlZmluZSBXX0wxQ01EX1NTUAkweDAyCisjZGVmaW5lIFdfTDFDTURfQVI4CTB4MDgKKyNkZWZpbmUgV19MMUNNRF9BUjEwCTB4MDkKKyNkZWZpbmUgV19MMUNNRF9FQUwJMHgwYQorI2RlZmluZSBXX0wxQ01EX0RSQwkweDBmCisKKy8qIFc2NjkyIExheWVyMSBpbmRpY2F0aW9ucyAqLworCisjZGVmaW5lIFdfTDFJTkRfQ0UJMHgwNworI2RlZmluZSBXX0wxSU5EX0RSRAkweDAwCisjZGVmaW5lIFdfTDFJTkRfTEQJMHgwNAorI2RlZmluZSBXX0wxSU5EX0FSRAkweDA4CisjZGVmaW5lIFdfTDFJTkRfVEkJMHgwYQorI2RlZmluZSBXX0wxSU5EX0FUSQkweDBiCisjZGVmaW5lIFdfTDFJTkRfQUk4CTB4MGMKKyNkZWZpbmUgV19MMUlORF9BSTEwCTB4MGQKKyNkZWZpbmUgV19MMUlORF9DRAkweDBmCisKKy8qIEZJRk8gdGhyZXNob2xkcyAqLworI2RlZmluZSBXX0RfRklGT19USFJFU0gJNjQKKyNkZWZpbmUgV19CX0ZJRk9fVEhSRVNICTY0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnCmluZGV4IDc4MzJkOGIuLjM0NjRlYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9LY29uZmlnCkBAIC0zOTEsNiArMzkxLDcgQEAKIGNvbmZpZyBISVNBWF9TVDU0ODEKIAl0cmlzdGF0ZSAiU1Q1NDgxIFVTQiBJU0ROIG1vZGVtIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBJU0ROX0hETEMKIAlzZWxlY3QgQ1JDX0NDSVRUCiAJc2VsZWN0IEJJVFJFVkVSU0UKIAloZWxwCkBAIC00MTgsMTEgKzQxOSw2IEBACiAJICAodGhlIGxhdHRlciBhbHNvIG5lZWRzIHlvdSB0byBzZWxlY3QgIklTQSBQbHVnIGFuZCBQbGF5IHN1cHBvcnQiCiAJICBmcm9tIHRoZSBtZW51ICJQbHVnIGFuZCBQbGF5IGNvbmZpZ3VyYXRpb24iKQogCi1jb25maWcgSElTQVhfSERMQwotCWJvb2wKLQlkZXBlbmRzIG9uIEhJU0FYX1NUNTQ4MQotCWRlZmF1bHQgeQotCiBjb25maWcgSElTQVhfQVZNX0ExX1BDTUNJQQogCWJvb2wKIAlkZXBlbmRzIG9uIEhJU0FYX0FWTV9BMV9DUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L01ha2VmaWxlIGIvZHJpdmVycy9pc2RuL2hpc2F4L01ha2VmaWxlCmluZGV4IGM3YTM3OTQuLmFiNjM4YjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L01ha2VmaWxlCkBAIC0xNiwxMCArMTYsNiBAQAogb2JqLSQoQ09ORklHX0hJU0FYX0hGQzRTOFMpCQkrPSBoZmM0czhzX2wxLm8KIG9iai0kKENPTkZJR19ISVNBWF9GUklUWl9QQ0lQTlApICAgICAgICArPSBoaXNheF9pc2FjLm8gaGlzYXhfZmNwY2lwbnAubwogCi1pZmRlZiBDT05GSUdfSElTQVhfSERMQwotb2JqLSQoQ09ORklHX0lTRE5fRFJWX0hJU0FYKQkJKz0gaXNkbmhkbGMubwotZW5kaWYKLQogIyBNdWx0aXBhcnQgb2JqZWN0cy4KIAogaGlzYXhfc3Q1NDgxLXkgCQkJCTo9IHN0NTQ4MV9pbml0Lm8gc3Q1NDgxX3VzYi5vIHN0NTQ4MV9kLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2FtZDc5MzBfZm4uYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hbWQ3OTMwX2ZuLmMKaW5kZXggMzQxZmFmNS4uYmY1MjZhN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hbWQ3OTMwX2ZuLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2FtZDc5MzBfZm4uYwpAQCAtMjM4LDggKzIzOCw2IEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSwgdHF1ZXVlKTsKICAgICAgICAgc3RydWN0IFBTdGFjayAqc3RwdHI7CiAKLQlpZiAoIWNzKQotCQlyZXR1cm47CiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChEX0NMRUFSQlVTWSwgJmNzLT5ldmVudCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY3MtPmRlYnVnKQogCQkJZGVidWdsMShjcywgIkFtZDc5MzA6IGJoLCBELUNoYW5uZWwgQnVzeSBjbGVhcmVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCmluZGV4IDAyNWEyMGQuLjQ3NWIxYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCkBAIC04MzMsOCArODMzLDYgQEAKIH07CiAvKiAqSU5ERU5ULU9OKiAqLwogCi0jZGVmaW5lIEZOQ09VTlQgKHNpemVvZihmbmxpc3QpL3NpemVvZihzdHJ1Y3QgRnNtTm9kZSkpCi0KIGludCBfX2luaXQKIENhbGxjTmV3KHZvaWQpCiB7CkBAIC04NDIsNyArODQwLDcgQEAKIAljYWxsY2ZzbS5ldmVudF9jb3VudCA9IEVWRU5UX0NPVU5UOwogCWNhbGxjZnNtLnN0ckV2ZW50ID0gc3RyRXZlbnQ7CiAJY2FsbGNmc20uc3RyU3RhdGUgPSBzdHJTdGF0ZTsKLQlyZXR1cm4gRnNtTmV3KCZjYWxsY2ZzbSwgZm5saXN0LCBGTkNPVU5UKTsKKwlyZXR1cm4gRnNtTmV3KCZjYWxsY2ZzbSwgZm5saXN0LCBBUlJBWV9TSVpFKGZubGlzdCkpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwppbmRleCAzZDMzN2Q5Li5kMTEwYTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKQEAgLTE1MDYsOCArMTUwNiw2IEBACiAJdV9sb25nCWZsYWdzOwogLy8gICAgICBzdHJ1Y3QgUFN0YWNrICpzdHB0cjsKIAotCWlmICghY3MpCi0JCXJldHVybjsKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERfTDFTVEFURUNIQU5HRSwgJmNzLT5ldmVudCkpIHsKIAkJaWYgKCFjcy0+aHcuaGZjcGNpLm50X21vZGUpCiAJCQlzd2l0Y2ggKGNzLT5kYy5oZmNwY2kucGhfc3RhdGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfc3guYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfc3guYwppbmRleCBkOTJlOGQ2Li40MTlmODdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3N4LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19zeC5jCkBAIC0xMjU1LDggKzEyNTUsNiBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IElzZG5DYXJkU3RhdGUsIHRxdWV1ZSk7CiAJdV9sb25nIGZsYWdzOwogCi0JaWYgKCFjcykKLQkJcmV0dXJuOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRF9MMVNUQVRFQ0hBTkdFLCAmY3MtPmV2ZW50KSkgewogCQlpZiAoIWNzLT5ody5oZmNzeC5udF9tb2RlKQogCQkJc3dpdGNoIChjcy0+ZGMuaGZjc3gucGhfc3RhdGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pY2MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pY2MuYwppbmRleCA2ODJjYWMzLi45YWJhNjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaWNjLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2ljYy5jCkBAIC04Myw4ICs4Myw2IEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSwgdHF1ZXVlKTsKIAlzdHJ1Y3QgUFN0YWNrICpzdHB0cjsKIAkKLQlpZiAoIWNzKQotCQlyZXR1cm47CiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChEX0NMRUFSQlVTWSwgJmNzLT5ldmVudCkpIHsKIAkJaWYgKGNzLT5kZWJ1ZykKIAkJCWRlYnVnbDEoY3MsICJELUNoYW5uZWwgQnVzeSBjbGVhcmVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNhYy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzYWMuYwppbmRleCAwN2IxNjczLi5hMTkzNTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNhYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2FjLmMKQEAgLTg2LDggKzg2LDYgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBJc2RuQ2FyZFN0YXRlLCB0cXVldWUpOwogCXN0cnVjdCBQU3RhY2sgKnN0cHRyOwogCQotCWlmICghY3MpCi0JCXJldHVybjsKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERfQ0xFQVJCVVNZLCAmY3MtPmV2ZW50KSkgewogCQlpZiAoY3MtPmRlYnVnKQogCQkJZGVidWdsMShjcywgIkQtQ2hhbm5lbCBCdXN5IGNsZWFyZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RuaGRsYy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5oZGxjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2OWE3N2EuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5oZGxjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MDMgKzAsMCBAQAotLyoKLSAqIGlzZG5oZGxjLmMgIC0tICBHZW5lcmFsIHB1cnBvc2UgSVNETiBIRExDIGRlY29kZXIuCi0gKgotICpDb3B5cmlnaHQgKEMpIDIwMDIJV29sZmdhbmcgTcO8ZXMgICAgICA8d29sZmdhbmdAaWtzdy1tdWVlcy5kZT4KLSAqCQkyMDAxIAlGcm9kZSBJc2Frc2VuICAgICAgPGZpc2Frc2VuQGJld2FuLmNvbT4KLSAqICAgICAgICAgICAgICAyMDAxIAlLYWkgR2VybWFzY2hld3NraSAgPGthaS5nZXJtYXNjaGV3c2tpQGdteC5kZT4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMtY2NpdHQuaD4KLSNpbmNsdWRlICJpc2RuaGRsYy5oIgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1NT0RVTEVfQVVUSE9SKCJXb2xmZ2FuZyBNw7xlcyA8d29sZmdhbmdAaWtzdy1tdWVlcy5kZT4sICIKLQkgICAgICAiRnJvZGUgSXNha3NlbiA8ZmlzYWtzZW5AYmV3YW4uY29tPiwgIgotCSAgICAgICJLYWkgR2VybWFzY2hld3NraSA8a2FpLmdlcm1hc2NoZXdza2lAZ214LmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmFsIHB1cnBvc2UgSVNETiBIRExDIGRlY29kZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotZW51bSB7Ci0JSERMQ19GQVNUX0lETEUsSERMQ19HRVRfRkxBR19CMCxIRExDX0dFVEZMQUdfQjFBNixIRExDX0dFVEZMQUdfQjcsCi0JSERMQ19HRVRfREFUQSxIRExDX0ZBU1RfRkxBRwotfTsKLQotZW51bSB7Ci0JSERMQ19TRU5EX0RBVEEsSERMQ19TRU5EX0NSQzEsSERMQ19TRU5EX0ZBU1RfRkxBRywKLQlIRExDX1NFTkRfRklSU1RfRkxBRyxIRExDX1NFTkRfQ1JDMixIRExDX1NFTkRfQ0xPU0lOR19GTEFHLAotCUhETENfU0VORF9JRExFMSxIRExDX1NFTkRfRkFTVF9JRExFLEhETENfU0VOREZMQUdfQjAsCi0JSERMQ19TRU5ERkxBR19CMUE2LEhETENfU0VOREZMQUdfQjcsU1RPUFBFRAotfTsKLQotdm9pZCBpc2RuaGRsY19yY3ZfaW5pdCAoc3RydWN0IGlzZG5oZGxjX3ZhcnMgKmhkbGMsIGludCBkb19hZGFwdDU2KQotewotICAgCWhkbGMtPmJpdF9zaGlmdCA9IDA7Ci0JaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JaGRsYy0+ZGF0YV9iaXRzID0gMDsKLQloZGxjLT5mZmJpdF9zaGlmdCA9IDA7Ci0JaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7Ci0JaGRsYy0+c3RhdGUgPSBIRExDX0dFVF9EQVRBOwotCWhkbGMtPmRvX2FkYXB0NTYgPSBkb19hZGFwdDU2OwotCWhkbGMtPmRjaGFubmVsID0gMDsKLQloZGxjLT5jcmMgPSAwOwotCWhkbGMtPmNiaW4gPSAwOwotCWhkbGMtPnNoaWZ0X3JlZyA9IDA7Ci0JaGRsYy0+ZmZ2YWx1ZSA9IDA7Ci0JaGRsYy0+ZHN0cG9zID0gMDsKLX0KLQotdm9pZCBpc2RuaGRsY19vdXRfaW5pdCAoc3RydWN0IGlzZG5oZGxjX3ZhcnMgKmhkbGMsIGludCBpc19kX2NoYW5uZWwsIGludCBkb19hZGFwdDU2KQotewotICAgCWhkbGMtPmJpdF9zaGlmdCA9IDA7Ci0JaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JaGRsYy0+ZGF0YV9iaXRzID0gMDsKLQloZGxjLT5mZmJpdF9zaGlmdCA9IDA7Ci0JaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7Ci0JaGRsYy0+ZG9fY2xvc2luZyA9IDA7Ci0JaGRsYy0+ZmZ2YWx1ZSA9IDA7Ci0JaWYgKGlzX2RfY2hhbm5lbCkgewotCQloZGxjLT5kY2hhbm5lbCA9IDE7Ci0JCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0ZJUlNUX0ZMQUc7Ci0JfSBlbHNlIHsKLQkJaGRsYy0+ZGNoYW5uZWwgPSAwOwotCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9GQVNUX0ZMQUc7Ci0JCWhkbGMtPmZmdmFsdWUgPSAweDdlOwotCX0KLQloZGxjLT5jYmluID0gMHg3ZTsKLQloZGxjLT5iaXRfc2hpZnQgPSAwOwotCWlmKGRvX2FkYXB0NTYpewotCQloZGxjLT5kb19hZGFwdDU2ID0gMTsKLQkJaGRsYy0+ZGF0YV9iaXRzID0gMDsKLQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRGTEFHX0IwOwotCX0gZWxzZSB7Ci0JCWhkbGMtPmRvX2FkYXB0NTYgPSAwOwotCQloZGxjLT5kYXRhX2JpdHMgPSA4OwotCX0KLQloZGxjLT5zaGlmdF9yZWcgPSAwOwotfQotCi0vKgotICBpc2RuaGRsY19kZWNvZGUgLSBkZWNvZGVzIEhETEMgZnJhbWVzIGZyb20gYSB0cmFuc3BhcmVudCBiaXQgc3RyZWFtLgotCi0gIFRoZSBzb3VyY2UgYnVmZmVyIGlzIHNjYW5uZWQgZm9yIHZhbGlkIEhETEMgZnJhbWVzIGxvb2tpbmcgZm9yCi0gIGZsYWdzICgwMTExMTExMCkgdG8gaW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGEgZnJhbWUuIElmIHRoZSBzdGFydCBvZgotICB0aGUgZnJhbWUgaXMgZm91bmQsIHRoZSBiaXQgc3R1ZmZpbmcgaXMgcmVtb3ZlZCAoMCBhZnRlciA1IDEncykuCi0gIFdoZW4gYSBuZXcgZmxhZyBpcyBmb3VuZCwgdGhlIGNvbXBsZXRlIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkCi0gIGFuZCB0aGUgQ1JDIGlzIGNoZWNrZWQuCi0gIElmIGEgdmFsaWQgZnJhbWUgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBmcmFtZSBsZW5ndGgKLSAgZXhjbHVkaW5nIHRoZSBDUkMgd2l0aCB0aGUgYml0IEhETENfRU5EX09GX0ZSQU1FIHNldC4KLSAgSWYgdGhlIGJlZ2lubmluZyBvZiBhIHZhbGlkIGZyYW1lIGlzIGZvdW5kLCB0aGUgZnVuY3Rpb24gcmV0dXJucwotICB0aGUgbGVuZ3RoLgotICBJZiBhIGZyYW1pbmcgZXJyb3IgaXMgZm91bmQgKHRvbyBtYW55IDFzIGFuZCBub3QgYSBmbGFnKSB0aGUgZnVuY3Rpb24KLSAgcmV0dXJucyB0aGUgbGVuZ3RoIHdpdGggdGhlIGJpdCBIRExDX0ZSQU1JTkdfRVJST1Igc2V0LgotICBJZiBhIENSQyBlcnJvciBpcyBmb3VuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGVuZ3RoIHdpdGggdGhlCi0gIGJpdCBIRExDX0NSQ19FUlJPUiBzZXQuCi0gIElmIHRoZSBmcmFtZSBsZW5ndGggZXhjZWVkcyB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHNpemUsIHRoZSBmdW5jdGlvbgotICByZXR1cm5zIHRoZSBsZW5ndGggd2l0aCB0aGUgYml0IEhETENfTEVOR1RIX0VSUk9SIHNldC4KLQotICBzcmMgLSBzb3VyY2UgYnVmZmVyCi0gIHNsZW4gLSBzb3VyY2UgYnVmZmVyIGxlbmd0aAotICBjb3VudCAtIG51bWJlciBvZiBieXRlcyByZW1vdmVkIChkZWNvZGVkKSBmcm9tIHRoZSBzb3VyY2UgYnVmZmVyCi0gIGRzdCBfIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICBkc2l6ZSAtIGRlc3RpbmF0aW9uIGJ1ZmZlciBzaXplCi0gIHJldHVybnMgLSBudW1iZXIgb2YgZGVjb2RlZCBieXRlcyBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGFuZCBzdGF0dXMKLSAgZmxhZy4KLSAqLwotaW50IGlzZG5oZGxjX2RlY29kZSAoc3RydWN0IGlzZG5oZGxjX3ZhcnMgKmhkbGMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKLQkJICAgICBpbnQgc2xlbiwgaW50ICpjb3VudCwgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgZHNpemUpCi17Ci0JaW50IHN0YXR1cz0wOwotCi0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZmFzdF9mbGFnW109ewotCQkweDAwLDB4MDAsMHgwMCwweDIwLDB4MzAsMHgzOCwweDNjLDB4M2UsMHgzZgotCX07Ci0KLQlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmYXN0X2ZsYWdfdmFsdWVbXT17Ci0JCTB4MDAsMHg3ZSwweGZjLDB4ZjksMHhmMywweGU3LDB4Y2YsMHg5ZiwweDNmCi0JfTsKLQotCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGZhc3RfYWJvcnRbXT17Ci0JCTB4MDAsMHgwMCwweDgwLDB4YzAsMHhlMCwweGYwLDB4ZjgsMHhmYywweGZlLDB4ZmYKLQl9OwotCi0JKmNvdW50ID0gc2xlbjsKLQotCXdoaWxlKHNsZW4gPiAwKXsKLQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT0wKXsKLQkJCWhkbGMtPmNiaW4gPSAqc3JjKys7Ci0JCQlzbGVuLS07Ci0JCQloZGxjLT5iaXRfc2hpZnQgPSA4OwotCQkJaWYoaGRsYy0+ZG9fYWRhcHQ1Nil7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0IC0tOwotCQkJfQotCQl9Ci0KLQkJc3dpdGNoKGhkbGMtPnN0YXRlKXsKLQkJY2FzZSBTVE9QUEVEOgotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgSERMQ19GQVNUX0lETEU6Ci0JCQlpZihoZGxjLT5jYmluID09IDB4ZmYpewotCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQloZGxjLT5zdGF0ZSA9IEhETENfR0VUX0ZMQUdfQjA7Ci0JCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCWhkbGMtPmJpdF9zaGlmdCA9IDg7Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX0dFVF9GTEFHX0IwOgotCQkJaWYoIShoZGxjLT5jYmluICYgMHg4MCkpIHsKLQkJCQloZGxjLT5zdGF0ZSA9IEhETENfR0VURkxBR19CMUE2OwotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJfSBlbHNlIHsKLQkJCQlpZighaGRsYy0+ZG9fYWRhcHQ1Nil7Ci0JCQkJCWlmKCsraGRsYy0+aGRsY19iaXRzMSA+PTggKSBpZihoZGxjLT5iaXRfc2hpZnQ9PTEpCi0JCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfRkFTVF9JRExFOwotCQkJCX0KLQkJCX0KLQkJCWhkbGMtPmNiaW48PD0xOwotCQkJaGRsYy0+Yml0X3NoaWZ0IC0tOwotCQkJYnJlYWs7Ci0JCWNhc2UgSERMQ19HRVRGTEFHX0IxQTY6Ci0JCQlpZihoZGxjLT5jYmluICYgMHg4MCl7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSsrOwotCQkJCWlmKGhkbGMtPmhkbGNfYml0czE9PTYpewotCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfR0VURkxBR19CNzsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJfQotCQkJaGRsYy0+Y2Jpbjw8PTE7Ci0JCQloZGxjLT5iaXRfc2hpZnQgLS07Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX0dFVEZMQUdfQjc6Ci0JCQlpZihoZGxjLT5jYmluICYgMHg4MCkgewotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfRkxBR19CMDsKLQkJCX0gZWxzZSB7Ci0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVF9EQVRBOwotCQkJCWhkbGMtPmNyYyA9IDB4ZmZmZjsKLQkJCQloZGxjLT5zaGlmdF9yZWcgPSAwOwotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJCWhkbGMtPmRhdGFfYml0cyA9IDA7Ci0JCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7Ci0JCQl9Ci0JCQloZGxjLT5jYmluPDw9MTsKLQkJCWhkbGMtPmJpdF9zaGlmdCAtLTsKLQkJCWJyZWFrOwotCQljYXNlIEhETENfR0VUX0RBVEE6Ci0JCQlpZihoZGxjLT5jYmluICYgMHg4MCl7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSsrOwotCQkJCXN3aXRjaChoZGxjLT5oZGxjX2JpdHMxKXsKLQkJCQljYXNlIDY6Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgNzoKLQkJCQkJaWYoaGRsYy0+ZGF0YV9yZWNlaXZlZCkgewotCQkJCQkJLy8gYmFkIGZyYW1lCi0JCQkJCQlzdGF0dXMgPSAtSERMQ19GUkFNSU5HX0VSUk9SOwotCQkJCQl9Ci0JCQkJCWlmKCFoZGxjLT5kb19hZGFwdDU2KXsKLQkJCQkJCWlmKGhkbGMtPmNiaW49PWZhc3RfYWJvcnRbaGRsYy0+Yml0X3NoaWZ0KzFdKXsKLQkJCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfRkFTVF9JRExFOwotCQkJCQkJCWhkbGMtPmJpdF9zaGlmdD0xOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQl9IGVsc2UgewotCQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVF9GTEFHX0IwOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWhkbGMtPnNoaWZ0X3JlZz4+PTE7Ci0JCQkJCWhkbGMtPnNoaWZ0X3JlZyB8PSAweDgwOwotCQkJCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlzd2l0Y2goaGRsYy0+aGRsY19iaXRzMSl7Ci0JCQkJY2FzZSA1OgotCQkJCQlicmVhazsKLQkJCQljYXNlIDY6Ci0JCQkJCWlmKGhkbGMtPmRhdGFfcmVjZWl2ZWQpewotCQkJCQkJaWYgKGhkbGMtPmRzdHBvcyA8IDIpIHsKLQkJCQkJCQlzdGF0dXMgPSAtSERMQ19GUkFNSU5HX0VSUk9SOwotCQkJCQkJfSBlbHNlIGlmIChoZGxjLT5jcmMgIT0gMHhmMGI4KXsKLQkJCQkJCQkvLyBjcmMgZXJyb3IKLQkJCQkJCQlzdGF0dXMgPSAtSERMQ19DUkNfRVJST1I7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCS8vIHJlbW92ZSBDUkMKLQkJCQkJCQloZGxjLT5kc3Rwb3MgLT0gMjsKLQkJCQkJCQkvLyBnb29kIGZyYW1lCi0JCQkJCQkJc3RhdHVzID0gaGRsYy0+ZHN0cG9zOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWhkbGMtPmNyYyA9IDB4ZmZmZjsKLQkJCQkJaGRsYy0+c2hpZnRfcmVnID0gMDsKLQkJCQkJaGRsYy0+ZGF0YV9iaXRzID0gMDsKLQkJCQkJaWYoIWhkbGMtPmRvX2FkYXB0NTYpewotCQkJCQkJaWYoaGRsYy0+Y2Jpbj09ZmFzdF9mbGFnW2hkbGMtPmJpdF9zaGlmdF0pewotCQkJCQkJCWhkbGMtPmZmdmFsdWUgPSBmYXN0X2ZsYWdfdmFsdWVbaGRsYy0+Yml0X3NoaWZ0XTsKLQkJCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfRkFTVF9GTEFHOwotCQkJCQkJCWhkbGMtPmZmYml0X3NoaWZ0ID0gaGRsYy0+Yml0X3NoaWZ0OwotCQkJCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDE7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfREFUQTsKLQkJCQkJCQloZGxjLT5kYXRhX3JlY2VpdmVkID0gMDsKLQkJCQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfREFUQTsKLQkJCQkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAwOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWhkbGMtPnNoaWZ0X3JlZz4+PTE7Ci0JCQkJCWhkbGMtPmRhdGFfYml0cysrOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQl9Ci0JCQlpZiAoc3RhdHVzKSB7Ci0JCQkJaGRsYy0+ZHN0cG9zID0gMDsKLQkJCQkqY291bnQgLT0gc2xlbjsKLQkJCQloZGxjLT5jYmluIDw8PSAxOwotCQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0JCQlpZihoZGxjLT5kYXRhX2JpdHM9PTgpewotCQkJCWhkbGMtPmRhdGFfYml0cyA9IDA7Ci0JCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDE7Ci0JCQkJaGRsYy0+Y3JjID0gY3JjX2NjaXR0X2J5dGUoaGRsYy0+Y3JjLCBoZGxjLT5zaGlmdF9yZWcpOwotCi0JCQkJLy8gZ29vZCBieXRlIHJlY2VpdmVkCi0JCQkJaWYgKGhkbGMtPmRzdHBvcyA8IGRzaXplKSB7Ci0JCQkJCWRzdFtoZGxjLT5kc3Rwb3MrK10gPSBoZGxjLT5zaGlmdF9yZWc7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLy8gZnJhbWUgdG9vIGxvbmcKLQkJCQkJc3RhdHVzID0gLUhETENfTEVOR1RIX0VSUk9SOwotCQkJCQloZGxjLT5kc3Rwb3MgPSAwOwotCQkJCX0KLQkJCX0KLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5iaXRfc2hpZnQtLTsKLQkJCWJyZWFrOwotCQljYXNlIEhETENfRkFTVF9GTEFHOgotCQkJaWYoaGRsYy0+Y2Jpbj09aGRsYy0+ZmZ2YWx1ZSl7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0ID0gMDsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYoaGRsYy0+Y2JpbiA9PSAweGZmKXsKLQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0ZBU1RfSURMRTsKLQkJCQkJaGRsYy0+Yml0X3NoaWZ0PTA7Ci0JCQkJfSBlbHNlIGlmKGhkbGMtPmZmYml0X3NoaWZ0PT04KXsKLQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVEZMQUdfQjc7Ci0JCQkJCWJyZWFrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWhkbGMtPnNoaWZ0X3JlZyA9IGZhc3RfYWJvcnRbaGRsYy0+ZmZiaXRfc2hpZnQtMV07Ci0JCQkJCWhkbGMtPmhkbGNfYml0czEgPSBoZGxjLT5mZmJpdF9zaGlmdC0yOwotCQkJCQlpZihoZGxjLT5oZGxjX2JpdHMxPDApaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJCWhkbGMtPmRhdGFfYml0cyA9IGhkbGMtPmZmYml0X3NoaWZ0LTE7Ci0JCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfREFUQTsKLQkJCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCX0KLQkqY291bnQgLT0gc2xlbjsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAgaXNkbmhkbGNfZW5jb2RlIC0gZW5jb2RlcyBIRExDIGZyYW1lcyB0byBhIHRyYW5zcGFyZW50IGJpdCBzdHJlYW0uCi0KLSAgVGhlIGJpdCBzdHJlYW0gc3RhcnRzIHdpdGggYSBiZWdpbm5pbmcgZmxhZyAoMDExMTExMTApLiBBZnRlcgotICB0aGF0IGVhY2ggYnl0ZSBpcyBhZGRlZCB0byB0aGUgYml0IHN0cmVhbSB3aXRoIGJpdCBzdHVmZmluZyBhZGRlZAotICAoMCBhZnRlciA1IDEncykuCi0gIFdoZW4gdGhlIGxhc3QgYnl0ZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHNvdXJjZSBidWZmZXIsIHRoZQotICBDUkMgKDIgYnl0ZXMgaXMgYWRkZWQpIGFuZCB0aGUgZnJhbWUgdGVybWluYXRlcyB3aXRoIHRoZSBlbmRpbmcgZmxhZy4KLSAgRm9yIHRoZSBkY2hhbm5lbCwgdGhlIGlkbGUgY2hhcmFjdGVyIChhbGwgMSdzKSBpcyBhbHNvIGFkZGVkIGF0IHRoZSBlbmQuCi0gIElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggZW1wdHkgc291cmNlIGJ1ZmZlciAoc2xlbj0wKSwgZmxhZ3Mgb3IKLSAgaWRsZSBjaGFyYWN0ZXIgd2lsbCBiZSBnZW5lcmF0ZWQuCi0KLSAgc3JjIC0gc291cmNlIGJ1ZmZlcgotICBzbGVuIC0gc291cmNlIGJ1ZmZlciBsZW5ndGgKLSAgY291bnQgLSBudW1iZXIgb2YgYnl0ZXMgcmVtb3ZlZCAoZW5jb2RlZCkgZnJvbSBzb3VyY2UgYnVmZmVyCi0gIGRzdCBfIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICBkc2l6ZSAtIGRlc3RpbmF0aW9uIGJ1ZmZlciBzaXplCi0gIHJldHVybnMgLSBudW1iZXIgb2YgZW5jb2RlZCBieXRlcyBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyCi0qLwotaW50IGlzZG5oZGxjX2VuY29kZShzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYywgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAotCQl1bnNpZ25lZCBzaG9ydCBzbGVuLCBpbnQgKmNvdW50LAotCQl1bnNpZ25lZCBjaGFyICpkc3QsIGludCBkc2l6ZSkKLXsKLQlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB4ZmFzdF9mbGFnX3ZhbHVlW10gPSB7Ci0JCTB4N2UsMHgzZiwweDlmLDB4Y2YsMHhlNywweGYzLDB4ZjksMHhmYywweDdlCi0JfTsKLQotCWludCBsZW4gPSAwOwotCi0JKmNvdW50ID0gc2xlbjsKLQotCXdoaWxlIChkc2l6ZSA+IDApIHsKLQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT0wKXsKLQkJCWlmKHNsZW4gJiYgIWhkbGMtPmRvX2Nsb3NpbmcpewotCQkJCWhkbGMtPnNoaWZ0X3JlZyA9ICpzcmMrKzsKLQkJCQlzbGVuLS07Ci0JCQkJaWYgKHNsZW4gPT0gMCkKLQkJCQkJaGRsYy0+ZG9fY2xvc2luZyA9IDE7ICAvKiBjbG9zaW5nIHNlcXVlbmNlLCBDUkMgKyBmbGFnKHMpICovCi0JCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYoaGRsYy0+c3RhdGUgPT0gSERMQ19TRU5EX0RBVEEpewotCQkJCQlpZihoZGxjLT5kYXRhX3JlY2VpdmVkKXsKLQkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0NSQzE7Ci0JCQkJCQloZGxjLT5jcmMgXj0gMHhmZmZmOwotCQkJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKLQkJCQkJCWhkbGMtPnNoaWZ0X3JlZyA9IGhkbGMtPmNyYyAmIDB4ZmY7Ci0JCQkJCX0gZWxzZSBpZighaGRsYy0+ZG9fYWRhcHQ1Nil7Ci0JCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9GQVNUX0ZMQUc7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VOREZMQUdfQjA7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCX0KLQkJfQotCi0JCXN3aXRjaChoZGxjLT5zdGF0ZSl7Ci0JCWNhc2UgU1RPUFBFRDoKLQkJCXdoaWxlIChkc2l6ZS0tKQotCQkJCSpkc3QrKyA9IDB4ZmY7Ci0KLQkJCXJldHVybiBkc2l6ZTsKLQkJY2FzZSBIRExDX1NFTkRfRkFTVF9GTEFHOgotCQkJaGRsYy0+ZG9fY2xvc2luZyA9IDA7Ci0JCQlpZihzbGVuID09IDApewotCQkJCSpkc3QrKyA9IGhkbGMtPmZmdmFsdWU7Ci0JCQkJbGVuKys7Ci0JCQkJZHNpemUtLTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmKGhkbGMtPmJpdF9zaGlmdD09OCl7Ci0JCQkJaGRsYy0+Y2JpbiA9IGhkbGMtPmZmdmFsdWU+Pig4LWhkbGMtPmRhdGFfYml0cyk7Ci0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfREFUQTsKLQkJCQloZGxjLT5jcmMgPSAweGZmZmY7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDE7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX1NFTkRGTEFHX0IwOgotCQkJaGRsYy0+ZG9fY2xvc2luZyA9IDA7Ci0JCQloZGxjLT5jYmluIDw8PSAxOwotCQkJaGRsYy0+ZGF0YV9iaXRzKys7Ci0JCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5ERkxBR19CMUE2OwotCQkJYnJlYWs7Ci0JCWNhc2UgSERMQ19TRU5ERkxBR19CMUE2OgotCQkJaGRsYy0+Y2JpbiA8PD0gMTsKLQkJCWhkbGMtPmRhdGFfYml0cysrOwotCQkJaGRsYy0+Y2JpbisrOwotCQkJaWYoKytoZGxjLT5oZGxjX2JpdHMxID09IDYpCi0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRGTEFHX0I3OwotCQkJYnJlYWs7Ci0JCWNhc2UgSERMQ19TRU5ERkxBR19CNzoKLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCWlmKHNsZW4gPT0gMCl7Ci0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRGTEFHX0IwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT04KXsKLQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9EQVRBOwotCQkJCWhkbGMtPmNyYyA9IDB4ZmZmZjsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCQloZGxjLT5kYXRhX3JlY2VpdmVkID0gMTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEhETENfU0VORF9GSVJTVF9GTEFHOgotCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDE7Ci0JCQlpZihoZGxjLT5kYXRhX2JpdHM9PTgpewotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0RBVEE7Ci0JCQkJaGRsYy0+Y3JjID0gMHhmZmZmOwotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaGRsYy0+Y2JpbiA8PD0gMTsKLQkJCWhkbGMtPmRhdGFfYml0cysrOwotCQkJaWYoaGRsYy0+c2hpZnRfcmVnICYgMHgwMSkKLQkJCQloZGxjLT5jYmluKys7Ci0JCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7Ci0JCQloZGxjLT5iaXRfc2hpZnQtLTsKLQkJCWlmKGhkbGMtPmJpdF9zaGlmdD09MCl7Ci0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfREFUQTsKLQkJCQloZGxjLT5jcmMgPSAweGZmZmY7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX1NFTkRfREFUQToKLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCWlmKGhkbGMtPmhkbGNfYml0czEgPT0gNSl7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZihoZGxjLT5iaXRfc2hpZnQ9PTgpewotCQkJCWhkbGMtPmNyYyA9IGNyY19jY2l0dF9ieXRlKGhkbGMtPmNyYywgaGRsYy0+c2hpZnRfcmVnKTsKLQkJCX0KLQkJCWlmKGhkbGMtPnNoaWZ0X3JlZyAmIDB4MDEpewotCQkJCWhkbGMtPmhkbGNfYml0czErKzsKLQkJCQloZGxjLT5jYmluKys7Ci0JCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOwotCQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJfSBlbHNlIHsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0LS07Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX1NFTkRfQ1JDMToKLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCWlmKGhkbGMtPmhkbGNfYml0czEgPT0gNSl7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZihoZGxjLT5zaGlmdF9yZWcgJiAweDAxKXsKLQkJCQloZGxjLT5oZGxjX2JpdHMxKys7Ci0JCQkJaGRsYy0+Y2JpbisrOwotCQkJCWhkbGMtPnNoaWZ0X3JlZyA+Pj0gMTsKLQkJCQloZGxjLT5iaXRfc2hpZnQtLTsKLQkJCX0gZWxzZSB7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOwotCQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJfQotCQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT0wKXsKLQkJCQloZGxjLT5zaGlmdF9yZWcgPSAoaGRsYy0+Y3JjID4+IDgpOwotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0NSQzI7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEhETENfU0VORF9DUkMyOgotCQkJaGRsYy0+Y2JpbiA8PD0gMTsKLQkJCWhkbGMtPmRhdGFfYml0cysrOwotCQkJaWYoaGRsYy0+aGRsY19iaXRzMSA9PSA1KXsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmKGhkbGMtPnNoaWZ0X3JlZyAmIDB4MDEpewotCQkJCWhkbGMtPmhkbGNfYml0czErKzsKLQkJCQloZGxjLT5jYmluKys7Ci0JCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOwotCQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJfSBlbHNlIHsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0LS07Ci0JCQl9Ci0JCQlpZihoZGxjLT5iaXRfc2hpZnQ9PTApewotCQkJCWhkbGMtPnNoaWZ0X3JlZyA9IDB4N2U7Ci0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfQ0xPU0lOR19GTEFHOwotCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDg7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX1NFTkRfQ0xPU0lOR19GTEFHOgotCQkJaGRsYy0+Y2JpbiA8PD0gMTsKLQkJCWhkbGMtPmRhdGFfYml0cysrOwotCQkJaWYoaGRsYy0+aGRsY19iaXRzMSA9PSA1KXsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmKGhkbGMtPnNoaWZ0X3JlZyAmIDB4MDEpewotCQkJCWhkbGMtPmNiaW4rKzsKLQkJCX0KLQkJCWhkbGMtPnNoaWZ0X3JlZyA+Pj0gMTsKLQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT0wKXsKLQkJCQloZGxjLT5mZnZhbHVlID0geGZhc3RfZmxhZ192YWx1ZVtoZGxjLT5kYXRhX2JpdHNdOwotCQkJCWlmKGhkbGMtPmRjaGFubmVsKXsKLQkJCQkJaGRsYy0+ZmZ2YWx1ZSA9IDB4N2U7Ci0JCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0lETEUxOwotCQkJCQloZGxjLT5iaXRfc2hpZnQgPSA4LWhkbGMtPmRhdGFfYml0czsKLQkJCQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT0wKQotCQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfRkFTVF9JRExFOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmKCFoZGxjLT5kb19hZGFwdDU2KXsKLQkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0ZBU1RfRkxBRzsKLQkJCQkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAwOwotCQkJCQl9IGVsc2UgewotCQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRGTEFHX0IwOwotCQkJCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7Ci0JCQkJCX0KLQkJCQkJLy8gRmluaXNoZWQgd2l0aCB0aGlzIGZyYW1lLCBzZW5kIGZsYWdzCi0JCQkJCWlmIChkc2l6ZSA+IDEpIGRzaXplID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX1NFTkRfSURMRTE6Ci0JCQloZGxjLT5kb19jbG9zaW5nID0gMDsKLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5jYmluKys7Ci0JCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT0wKXsKLQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9GQVNUX0lETEU7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0ID0gMDsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEhETENfU0VORF9GQVNUX0lETEU6Ci0JCQloZGxjLT5kb19jbG9zaW5nID0gMDsKLQkJCWhkbGMtPmNiaW4gPSAweGZmOwotCQkJaGRsYy0+ZGF0YV9iaXRzID0gODsKLQkJCWlmKGhkbGMtPmJpdF9zaGlmdCA9PSA4KXsKLQkJCQloZGxjLT5jYmluID0gMHg3ZTsKLQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9GSVJTVF9GTEFHOwotCQkJfSBlbHNlIHsKLQkJCQkqZHN0KysgPSBoZGxjLT5jYmluOwotCQkJCWhkbGMtPmJpdF9zaGlmdCA9IGhkbGMtPmRhdGFfYml0cyA9IDA7Ci0JCQkJbGVuKys7Ci0JCQkJZHNpemUgPSAwOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlpZihoZGxjLT5kb19hZGFwdDU2KXsKLQkJCWlmKGhkbGMtPmRhdGFfYml0cz09Nyl7Ci0JCQkJaGRsYy0+Y2JpbiA8PD0gMTsKLQkJCQloZGxjLT5jYmluKys7Ci0JCQkJaGRsYy0+ZGF0YV9iaXRzKys7Ci0JCQl9Ci0JCX0KLQkJaWYoaGRsYy0+ZGF0YV9iaXRzPT04KXsKLQkJCSpkc3QrKyA9IGhkbGMtPmNiaW47Ci0JCQloZGxjLT5kYXRhX2JpdHMgPSAwOwotCQkJbGVuKys7Ci0JCQlkc2l6ZS0tOwotCQl9Ci0JfQotCSpjb3VudCAtPSBzbGVuOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotRVhQT1JUX1NZTUJPTChpc2RuaGRsY19yY3ZfaW5pdCk7Ci1FWFBPUlRfU1lNQk9MKGlzZG5oZGxjX2RlY29kZSk7Ci1FWFBPUlRfU1lNQk9MKGlzZG5oZGxjX291dF9pbml0KTsKLUVYUE9SVF9TWU1CT0woaXNkbmhkbGNfZW5jb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RuaGRsYy5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5oZGxjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMGE5NWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5oZGxjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogaXNkbmhkbGMuaCAgLS0gIEdlbmVyYWwgcHVycG9zZSBJU0ROIEhETEMgZGVjb2Rlci4KLSAqCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBhIEhETEMgZGVjb2Rlci9lbmNvZGVyIGluIHNvZnR3YXJlLgotICogTmVjY2Vzc2FyeSBiZWNhdXNlIHNvbWUgSVNETiBkZXZpY2VzIGRvbid0IGhhdmUgSERMQwotICogY29udHJvbGxlcnMuIEFsc28gaW5jbHVkZWQ6IGEgYml0IHJldmVyc2FsIHRhYmxlLgotICoKLSAqQ29weXJpZ2h0IChDKSAyMDAyICAgIFdvbGZnYW5nIE3DvGVzICAgICAgPHdvbGZnYW5nQGlrc3ctbXVlZXMuZGU+Ci0gKgkJMjAwMSAJRnJvZGUgSXNha3NlbiAgICAgIDxmaXNha3NlbkBiZXdhbi5jb20+Ci0gKiAgICAgICAgICAgICAgMjAwMSAJS2FpIEdlcm1hc2NoZXdza2kgIDxrYWkuZ2VybWFzY2hld3NraUBnbXguZGU+Ci0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19JU0ROSERMQ19IX18KLSNkZWZpbmUgX19JU0ROSERMQ19IX18KLQotc3RydWN0IGlzZG5oZGxjX3ZhcnMgewotCWludCBiaXRfc2hpZnQ7Ci0JaW50IGhkbGNfYml0czE7Ci0JaW50IGRhdGFfYml0czsKLQlpbnQgZmZiaXRfc2hpZnQ7IAkvLyBlbmNvZGluZyBvbmx5Ci0JaW50IHN0YXRlOwotCWludCBkc3Rwb3M7Ci0KLQl1bnNpZ25lZCBzaG9ydCBjcmM7Ci0KLQl1bnNpZ25lZCBjaGFyIGNiaW47Ci0JdW5zaWduZWQgY2hhciBzaGlmdF9yZWc7Ci0JdW5zaWduZWQgY2hhciBmZnZhbHVlOwotCi0JdW5zaWduZWQgaW50IGRhdGFfcmVjZWl2ZWQ6MTsgCS8vIHNldCBpZiB0cmFuc2ZlcnJpbmcgZGF0YQotCXVuc2lnbmVkIGludCBkY2hhbm5lbDoxOyAJLy8gc2V0IGlmIEQgY2hhbm5lbCAoc2VuZCBpZGxlIGluc3RlYWQgb2YgZmxhZ3MpCi0JdW5zaWduZWQgaW50IGRvX2FkYXB0NTY6MTsgCS8vIHNldCBpZiA1NksgYWRhcHRhdGlvbgotCXVuc2lnbmVkIGludCBkb19jbG9zaW5nOjE7IAkvLyBzZXQgaWYgaW4gY2xvc2luZyBwaGFzZSAobmVlZCB0byBzZW5kIENSQyArIGZsYWcKLX07Ci0KLQotLyoKLSAgVGhlIHJldHVybiB2YWx1ZSBmcm9tIGlzZG5oZGxjX2RlY29kZSBpcwotICB0aGUgZnJhbWUgbGVuZ3RoLCAwIGlmIG5vIGNvbXBsZXRlIGZyYW1lIHdhcyBkZWNvZGVkLAotICBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlcgotKi8KLSNkZWZpbmUgSERMQ19GUkFNSU5HX0VSUk9SICAgICAxCi0jZGVmaW5lIEhETENfQ1JDX0VSUk9SICAgICAgICAgMgotI2RlZmluZSBIRExDX0xFTkdUSF9FUlJPUiAgICAgIDMKLQotZXh0ZXJuIHZvaWQgaXNkbmhkbGNfcmN2X2luaXQgKHN0cnVjdCBpc2RuaGRsY192YXJzICpoZGxjLCBpbnQgZG9fYWRhcHQ1Nik7Ci0KLWV4dGVybiBpbnQgaXNkbmhkbGNfZGVjb2RlIChzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYywgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgc2xlbixpbnQgKmNvdW50LAotCSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgZHNpemUpOwotCi1leHRlcm4gdm9pZCBpc2RuaGRsY19vdXRfaW5pdCAoc3RydWN0IGlzZG5oZGxjX3ZhcnMgKmhkbGMsaW50IGlzX2RfY2hhbm5lbCxpbnQgZG9fYWRhcHQ1Nik7Ci0KLWV4dGVybiBpbnQgaXNkbmhkbGNfZW5jb2RlIChzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYyxjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsdW5zaWduZWQgc2hvcnQgc2xlbixpbnQgKmNvdW50LAotCSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0LGludCBkc2l6ZSk7Ci0KLSNlbmRpZiAvKiBfX0lTRE5IRExDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jCmluZGV4IDMxN2YxNmYuLjljZTZhYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMKQEAgLTY0Nyw4ICs2NDcsNiBAQAogCXtTVF9MMV9GOCwgRVZfVElNRVJfREVBQ1QsIGwxX3RpbWVyX2RlYWN0fSwKIH07CiAKLSNkZWZpbmUgTDFTX0ZOX0NPVU5UIChzaXplb2YoTDFTRm5MaXN0KS9zaXplb2Yoc3RydWN0IEZzbU5vZGUpKQotCiAjaWZkZWYgSElTQVhfVUlOVEVSRkFDRQogc3RhdGljIHZvaWQKIGwxX2RlYWN0X3JlcV91KHN0cnVjdCBGc21JbnN0ICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCkBAIC03MDYsOCArNzA0LDYgQEAKIAl7U1RfTDFfUkVTRVQsIEVWX1RJTUVSX0RFQUNULCBsMV90aW1lcl9kZWFjdH0sCiB9OwogCi0jZGVmaW5lIEwxVV9GTl9DT1VOVCAoc2l6ZW9mKEwxVUZuTGlzdCkvc2l6ZW9mKHN0cnVjdCBGc21Ob2RlKSkKLQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkCkBAIC03NTQsOCArNzUwLDYgQEAKIAl7U1RfTDFfV0FJVF9ERUFDVCwgRVZfVElNRVJfREVBQ1QsIGwxYl90aW1lcl9kZWFjdH0sCiB9OwogCi0jZGVmaW5lIEwxQl9GTl9DT1VOVCAoc2l6ZW9mKEwxQkZuTGlzdCkvc2l6ZW9mKHN0cnVjdCBGc21Ob2RlKSkKLQogaW50IF9faW5pdCAKIElzZG5sMU5ldyh2b2lkKQogewpAQCAtNzY1LDcgKzc1OSw3IEBACiAJbDFmc21fcy5ldmVudF9jb3VudCA9IEwxX0VWRU5UX0NPVU5UOwogCWwxZnNtX3Muc3RyRXZlbnQgPSBzdHJMMUV2ZW50OwogCWwxZnNtX3Muc3RyU3RhdGUgPSBzdHJMMVNTdGF0ZTsKLQlyZXR2YWwgPSBGc21OZXcoJmwxZnNtX3MsIEwxU0ZuTGlzdCwgTDFTX0ZOX0NPVU5UKTsKKwlyZXR2YWwgPSBGc21OZXcoJmwxZnNtX3MsIEwxU0ZuTGlzdCwgQVJSQVlfU0laRShMMVNGbkxpc3QpKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC03NzMsNyArNzY3LDcgQEAKIAlsMWZzbV9iLmV2ZW50X2NvdW50ID0gTDFfRVZFTlRfQ09VTlQ7CiAJbDFmc21fYi5zdHJFdmVudCA9IHN0ckwxRXZlbnQ7CiAJbDFmc21fYi5zdHJTdGF0ZSA9IHN0ckwxQlN0YXRlOwotCXJldHZhbCA9IEZzbU5ldygmbDFmc21fYiwgTDFCRm5MaXN0LCBMMUJfRk5fQ09VTlQpOworCXJldHZhbCA9IEZzbU5ldygmbDFmc21fYiwgTDFCRm5MaXN0LCBBUlJBWV9TSVpFKEwxQkZuTGlzdCkpOwogCWlmIChyZXR2YWwpIHsKIAkJRnNtRnJlZSgmbDFmc21fcyk7CiAJCXJldHVybiByZXR2YWw7CkBAIC03ODMsNyArNzc3LDcgQEAKIAlsMWZzbV91LmV2ZW50X2NvdW50ID0gTDFfRVZFTlRfQ09VTlQ7CiAJbDFmc21fdS5zdHJFdmVudCA9IHN0ckwxRXZlbnQ7CiAJbDFmc21fdS5zdHJTdGF0ZSA9IHN0ckwxVVN0YXRlOwotCXJldHZhbCA9IEZzbU5ldygmbDFmc21fdSwgTDFVRm5MaXN0LCBMMVVfRk5fQ09VTlQpOworCXJldHZhbCA9IEZzbU5ldygmbDFmc21fdSwgTDFVRm5MaXN0LCBBUlJBWV9TSVpFKEwxVUZuTGlzdCkpOwogCWlmIChyZXR2YWwpIHsKIAkJRnNtRnJlZSgmbDFmc21fcyk7CiAJCUZzbUZyZWUoJmwxZnNtX2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMi5jCmluZGV4IDM0NDZmMjQuLjdiOTQ5NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDIuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwyLmMKQEAgLTE2MjMsOCArMTYyMyw2IEBACiAJe1NUX0wyXzgsIEVWX0wxX0RFQUNUSVZBVEUsIGwyX3BlcnNpc3RlbnRfZGF9LAogfTsKIAotI2RlZmluZSBMMl9GTl9DT1VOVCAoc2l6ZW9mKEwyRm5MaXN0KS9zaXplb2Yoc3RydWN0IEZzbU5vZGUpKQotCiBzdGF0aWMgdm9pZAogaXNkbmwyX2wxbDIoc3RydWN0IFBTdGFjayAqc3QsIGludCBwciwgdm9pZCAqYXJnKQogewpAQCAtMTgzNiw3ICsxODM0LDcgQEAKIAlsMmZzbS5ldmVudF9jb3VudCA9IEwyX0VWRU5UX0NPVU5UOwogCWwyZnNtLnN0ckV2ZW50ID0gc3RyTDJFdmVudDsKIAlsMmZzbS5zdHJTdGF0ZSA9IHN0ckwyU3RhdGU7Ci0JcmV0dXJuIEZzbU5ldygmbDJmc20sIEwyRm5MaXN0LCBMMl9GTl9DT1VOVCk7CisJcmV0dXJuIEZzbU5ldygmbDJmc20sIEwyRm5MaXN0LCBBUlJBWV9TSVpFKEwyRm5MaXN0KSk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDMuYwppbmRleCA5MzVmMjMzLi4wNjc2NjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMy5jCkBAIC01NDMsOCArNTQzLDYgQEAKIH07CiAvKiAqSU5ERU5ULU9OKiAqLwogCi0jZGVmaW5lIEwzX0ZOX0NPVU5UIChzaXplb2YoTDNGbkxpc3QpL3NpemVvZihzdHJ1Y3QgRnNtTm9kZSkpCi0KIHZvaWQKIGwzX21zZyhzdHJ1Y3QgUFN0YWNrICpzdCwgaW50IHByLCB2b2lkICphcmcpCiB7CkBAIC01ODcsNyArNTg1LDcgQEAKIAlsM2ZzbS5ldmVudF9jb3VudCA9IEwzX0VWRU5UX0NPVU5UOwogCWwzZnNtLnN0ckV2ZW50ID0gc3RyTDNFdmVudDsKIAlsM2ZzbS5zdHJTdGF0ZSA9IHN0ckwzU3RhdGU7Ci0JcmV0dXJuIEZzbU5ldygmbDNmc20sIEwzRm5MaXN0LCBMM19GTl9DT1VOVCk7CisJcmV0dXJuIEZzbU5ldygmbDNmc20sIEwzRm5MaXN0LCBBUlJBWV9TSVpFKEwzRm5MaXN0KSk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9sM18xdHI2LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNfMXRyNi5jCmluZGV4IGM1YzM2ZWUuLmIwNTU0ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9sM18xdHI2LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2wzXzF0cjYuYwpAQCAtNjk4LDkgKzY5OCw2IEBACiAJIENDX1QzMDhfMiwgbDNfMXRyNl90MzA4XzJ9LAogfTsKIAotI2RlZmluZSBET1dOU1RMX0xFTiBcCi0JKHNpemVvZihkb3duc3RsKSAvIHNpemVvZihzdHJ1Y3Qgc3RhdGVlbnRyeSkpCi0KIHN0YXRpYyBzdHJ1Y3Qgc3RhdGVlbnRyeSBkYXRhc3RsbjFbXSA9CiB7CiAJe1NCSVQoMCksCkBAIC03MzUsOSArNzMyLDYgQEAKIAkgTVRfTjFfUkVMX0FDSywgbDNfMXRyNl9yZWxfYWNrfQogfTsKIAotI2RlZmluZSBEQVRBU1RMTjFfTEVOIFwKLQkoc2l6ZW9mKGRhdGFzdGxuMSkgLyBzaXplb2Yoc3RydWN0IHN0YXRlZW50cnkpKQotCiBzdGF0aWMgc3RydWN0IHN0YXRlZW50cnkgbWFuc3RhdGVsaXN0W10gPQogewogICAgICAgICB7U0JJVCgyKSwKQEAgLTc0Niw4ICs3NDAsNiBAQAogICAgICAgICAgRExfUkVMRUFTRSB8IElORElDQVRJT04sIGwzXzF0cjZfZGxfcmVsZWFzZX0sCiB9OwogIAotI2RlZmluZSBNQU5TTExFTiBcCi0gICAgICAgIChzaXplb2YobWFuc3RhdGVsaXN0KSAvIHNpemVvZihzdHJ1Y3Qgc3RhdGVlbnRyeSkpCiAvKiAqSU5ERU5ULU9OKiAqLwogCiBzdGF0aWMgdm9pZApAQCAtODQwLDExICs4MzIsMTEgQEAKIAkJCQltdCA9IE1UX04xX0lOVkFMSUQ7CiAJCQl9CiAJCX0KLQkJZm9yIChpID0gMDsgaSA8IERBVEFTVExOMV9MRU47IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YXN0bG4xKTsgaSsrKQogCQkJaWYgKChtdCA9PSBkYXRhc3RsbjFbaV0ucHJpbWl0aXZlKSAmJgogCQkJICAgICgoMSA8PCBwcm9jLT5zdGF0ZSkgJiBkYXRhc3RsbjFbaV0uc3RhdGUpKQogCQkJCWJyZWFrOwotCQlpZiAoaSA9PSBEQVRBU1RMTjFfTEVOKSB7CisJCWlmIChpID09IEFSUkFZX1NJWkUoZGF0YXN0bG4xKSkgewogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJaWYgKHN0LT5sMy5kZWJ1ZyAmIEwzX0RFQl9TVEFURSkgewogCQkJCXNwcmludGYodG1wLCAidXAxdHI2JXNzdGF0ZSAlZCBtdCAleCB1bmhhbmRsZWQiLApAQCAtODkyLDExICs4ODQsMTEgQEAKIAkJcHJvYyA9IGFyZzsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgRE9XTlNUTF9MRU47IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkb3duc3RsKTsgaSsrKQogCQlpZiAoKHByID09IGRvd25zdGxbaV0ucHJpbWl0aXZlKSAmJgogCQkgICAgKCgxIDw8IHByb2MtPnN0YXRlKSAmIGRvd25zdGxbaV0uc3RhdGUpKQogCQkJYnJlYWs7Ci0JaWYgKGkgPT0gRE9XTlNUTF9MRU4pIHsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGRvd25zdGwpKSB7CiAJCWlmIChzdC0+bDMuZGVidWcgJiBMM19ERUJfU1RBVEUpIHsKIAkJCXNwcmludGYodG1wLCAiZG93bjF0cjYgc3RhdGUgJWQgcHJpbSAlZCB1bmhhbmRsZWQiLAogCQkJCXByb2MtPnN0YXRlLCBwcik7CkBAIC05MjIsMTEgKzkxNCwxMSBAQAogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiSGlTYXggbWFuMXRyNiB3aXRob3V0IHByb2MgcHI9JTA0eFxuIiwgcHIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUFOU0xMRU47IGkrKykKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWFuc3RhdGVsaXN0KTsgaSsrKQogICAgICAgICAgICAgICAgIGlmICgocHIgPT0gbWFuc3RhdGVsaXN0W2ldLnByaW1pdGl2ZSkgJiYKICAgICAgICAgICAgICAgICAgICAgKCgxIDw8IHByb2MtPnN0YXRlKSAmIG1hbnN0YXRlbGlzdFtpXS5zdGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGkgPT0gTUFOU0xMRU4pIHsKKyAgICAgICAgaWYgKGkgPT0gQVJSQVlfU0laRShtYW5zdGF0ZWxpc3QpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0LT5sMy5kZWJ1ZyAmIEwzX0RFQl9TVEFURSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbDNfZGVidWcoc3QsICJjciAlZCBtYW4xdHI2IHN0YXRlICVkIHByaW0gJWQgdW5oYW5kbGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYy0+Y2FsbHJlZiAmIDB4N2YsIHByb2MtPnN0YXRlLCBwcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMKaW5kZXggOTlmZWFlOC4uYTEyZmE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2wzZHNzMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9sM2RzczEuYwpAQCAtMjgyMCw5ICsyODIwLDYgQEAKIAkgQ0NfVDMwOSwgbDNkc3MxX2RsX3JlbGVhc2V9LAogfTsKIAotI2RlZmluZSBET1dOU0xMRU4gXAotCShzaXplb2YoZG93bnN0YXRlbGlzdCkgLyBzaXplb2Yoc3RydWN0IHN0YXRlZW50cnkpKQotCiBzdGF0aWMgc3RydWN0IHN0YXRlZW50cnkgZGF0YXN0YXRlbGlzdFtdID0KIHsKIAl7QUxMX1NUQVRFUywKQEAgLTI4NzUsOSArMjg3Miw2IEBACiAJIE1UX1JFU1VNRV9SRUpFQ1QsIGwzZHNzMV9yZXN1bWVfcmVqfSwKIH07CiAKLSNkZWZpbmUgREFUQVNMTEVOIFwKLQkoc2l6ZW9mKGRhdGFzdGF0ZWxpc3QpIC8gc2l6ZW9mKHN0cnVjdCBzdGF0ZWVudHJ5KSkKLQogc3RhdGljIHN0cnVjdCBzdGF0ZWVudHJ5IGdsb2JhbG1lc19saXN0W10gPQogewogCXtBTExfU1RBVEVTLApAQCAtMjg4OCw4ICsyODgyLDYgQEAKIAkgTVRfUkVTVEFSVF9BQ0tOT1dMRURHRSwgbDNkc3MxX3Jlc3RhcnRfYWNrfSwKICovCiB9OwotI2RlZmluZSBHTE9CQUxNX0xFTiBcCi0JKHNpemVvZihnbG9iYWxtZXNfbGlzdCkgLyBzaXplb2Yoc3RydWN0IHN0YXRlZW50cnkpKQogCiBzdGF0aWMgc3RydWN0IHN0YXRlZW50cnkgbWFuc3RhdGVsaXN0W10gPQogewpAQCAtMjkwMyw4ICsyODk1LDYgQEAKICAgICAgICAgIERMX1JFTEVBU0UgfCBJTkRJQ0FUSU9OLCBsM2RzczFfZGxfcmVsZWFzZX0sCiB9OwogCi0jZGVmaW5lIE1BTlNMTEVOIFwKLSAgICAgICAgKHNpemVvZihtYW5zdGF0ZWxpc3QpIC8gc2l6ZW9mKHN0cnVjdCBzdGF0ZWVudHJ5KSkKIC8qICpJTkRFTlQtT04qICovCiAKIApAQCAtMjkxOCwxMSArMjkwOCwxMSBAQAogCXN0cnVjdCBsM19wcm9jZXNzICpwcm9jID0gc3QtPmwzLmdsb2JhbDsKIAogCXByb2MtPmNhbGxyZWYgPSBza2ItPmRhdGFbMl07IC8qIGNyIGZsYWcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgR0xPQkFMTV9MRU47IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShnbG9iYWxtZXNfbGlzdCk7IGkrKykKIAkJaWYgKChtdCA9PSBnbG9iYWxtZXNfbGlzdFtpXS5wcmltaXRpdmUpICYmCiAJCSAgICAoKDEgPDwgcHJvYy0+c3RhdGUpICYgZ2xvYmFsbWVzX2xpc3RbaV0uc3RhdGUpKQogCQkJYnJlYWs7Ci0JaWYgKGkgPT0gR0xPQkFMTV9MRU4pIHsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGdsb2JhbG1lc19saXN0KSkgewogCQlpZiAoc3QtPmwzLmRlYnVnICYgTDNfREVCX1NUQVRFKSB7CiAJCQlsM19kZWJ1ZyhzdCwgImRzczEgZ2xvYmFsIHN0YXRlICVkIG10ICV4IHVuaGFuZGxlZCIsCiAJCQkJcHJvYy0+c3RhdGUsIG10KTsKQEAgLTMwOTcsMTEgKzMwODcsMTEgQEAKIAl9CiAJaWYgKChwID0gZmluZGllKHNrYi0+ZGF0YSwgc2tiLT5sZW4sIElFX0RJU1BMQVksIDApKSAhPSBOVUxMKSAKIAkgIGwzZHNzMV9kZWxpdmVyX2Rpc3BsYXkocHJvYywgcHIsIHApOyAvKiBEaXNwbGF5IElFIGluY2x1ZGVkICovCi0JZm9yIChpID0gMDsgaSA8IERBVEFTTExFTjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGFzdGF0ZWxpc3QpOyBpKyspCiAJCWlmICgobXQgPT0gZGF0YXN0YXRlbGlzdFtpXS5wcmltaXRpdmUpICYmCiAJCSAgICAoKDEgPDwgcHJvYy0+c3RhdGUpICYgZGF0YXN0YXRlbGlzdFtpXS5zdGF0ZSkpCiAJCQlicmVhazsKLQlpZiAoaSA9PSBEQVRBU0xMRU4pIHsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGRhdGFzdGF0ZWxpc3QpKSB7CiAJCWlmIChzdC0+bDMuZGVidWcgJiBMM19ERUJfU1RBVEUpIHsKIAkJCWwzX2RlYnVnKHN0LCAiZHNzMXVwJXNzdGF0ZSAlZCBtdCAlI3ggdW5oYW5kbGVkIiwKIAkJCQkocHIgPT0gKERMX0RBVEEgfCBJTkRJQ0FUSU9OKSkgPyAiICIgOiAiKGJyb2FkY2FzdCkgIiwKQEAgLTMxNTYsMTEgKzMxNDYsMTEgQEAKIAkJcmV0dXJuOwogCX0gIAogCi0JZm9yIChpID0gMDsgaSA8IERPV05TTExFTjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRvd25zdGF0ZWxpc3QpOyBpKyspCiAJCWlmICgocHIgPT0gZG93bnN0YXRlbGlzdFtpXS5wcmltaXRpdmUpICYmCiAJCSAgICAoKDEgPDwgcHJvYy0+c3RhdGUpICYgZG93bnN0YXRlbGlzdFtpXS5zdGF0ZSkpCiAJCQlicmVhazsKLQlpZiAoaSA9PSBET1dOU0xMRU4pIHsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGRvd25zdGF0ZWxpc3QpKSB7CiAJCWlmIChzdC0+bDMuZGVidWcgJiBMM19ERUJfU1RBVEUpIHsKIAkJCWwzX2RlYnVnKHN0LCAiZHNzMWRvd24gc3RhdGUgJWQgcHJpbSAlI3ggdW5oYW5kbGVkIiwKIAkJCQlwcm9jLT5zdGF0ZSwgcHIpOwpAQCAtMzE4NCwxMSArMzE3NCwxMSBAQAogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiSGlTYXggZHNzMW1hbiB3aXRob3V0IHByb2MgcHI9JTA0eFxuIiwgcHIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUFOU0xMRU47IGkrKykKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWFuc3RhdGVsaXN0KTsgaSsrKQogICAgICAgICAgICAgICAgIGlmICgocHIgPT0gbWFuc3RhdGVsaXN0W2ldLnByaW1pdGl2ZSkgJiYKICAgICAgICAgICAgICAgICAgICAgKCgxIDw8IHByb2MtPnN0YXRlKSAmIG1hbnN0YXRlbGlzdFtpXS5zdGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGkgPT0gTUFOU0xMRU4pIHsKKyAgICAgICAgaWYgKGkgPT0gQVJSQVlfU0laRShtYW5zdGF0ZWxpc3QpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0LT5sMy5kZWJ1ZyAmIEwzX0RFQl9TVEFURSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbDNfZGVidWcoc3QsICJjciAlZCBkc3MxbWFuIHN0YXRlICVkIHByaW0gJSN4IHVuaGFuZGxlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2MtPmNhbGxyZWYgJiAweDdmLCBwcm9jLT5zdGF0ZSwgcHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2wzbmkxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYwppbmRleCBmNzA0MWQ1Li40NjIyZDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYwpAQCAtMjc1NSw5ICsyNzU1LDYgQEAKIAkgQ0NfVFNQSUQsIGwzbmkxX3NwaWRfdG91dCB9LAogfTsKIAotI2RlZmluZSBET1dOU0xMRU4gXAotCShzaXplb2YoZG93bnN0YXRlbGlzdCkgLyBzaXplb2Yoc3RydWN0IHN0YXRlZW50cnkpKQotCiBzdGF0aWMgc3RydWN0IHN0YXRlZW50cnkgZGF0YXN0YXRlbGlzdFtdID0KIHsKIAl7QUxMX1NUQVRFUywKQEAgLTI4MTAsOSArMjgwNyw2IEBACiAJIE1UX1JFU1VNRV9SRUpFQ1QsIGwzbmkxX3Jlc3VtZV9yZWp9LAogfTsKIAotI2RlZmluZSBEQVRBU0xMRU4gXAotCShzaXplb2YoZGF0YXN0YXRlbGlzdCkgLyBzaXplb2Yoc3RydWN0IHN0YXRlZW50cnkpKQotCiBzdGF0aWMgc3RydWN0IHN0YXRlZW50cnkgZ2xvYmFsbWVzX2xpc3RbXSA9CiB7CiAJe0FMTF9TVEFURVMsCkBAIC0yODI1LDggKzI4MTksNiBAQAogCXsgU0JJVCggMCApLCBNVF9ETF9FU1RBQkxJU0hFRCwgbDNuaTFfc3BpZF9zZW5kIH0sCiAJeyBTQklUKCAyMCApIHwgU0JJVCggMjEgKSB8IFNCSVQoIDIyICksIE1UX0lORk9STUFUSU9OLCBsM25pMV9zcGlkX2VwaWQgfSwKIH07Ci0jZGVmaW5lIEdMT0JBTE1fTEVOIFwKLQkoc2l6ZW9mKGdsb2JhbG1lc19saXN0KSAvIHNpemVvZihzdHJ1Y3Qgc3RhdGVlbnRyeSkpCiAKIHN0YXRpYyBzdHJ1Y3Qgc3RhdGVlbnRyeSBtYW5zdGF0ZWxpc3RbXSA9CiB7CkBAIC0yODQwLDggKzI4MzIsNiBAQAogICAgICAgICAgRExfUkVMRUFTRSB8IElORElDQVRJT04sIGwzbmkxX2RsX3JlbGVhc2V9LAogfTsKIAotI2RlZmluZSBNQU5TTExFTiBcCi0gICAgICAgIChzaXplb2YobWFuc3RhdGVsaXN0KSAvIHNpemVvZihzdHJ1Y3Qgc3RhdGVlbnRyeSkpCiAvKiAqSU5ERU5ULU9OKiAqLwogCiAKQEAgLTI4NTgsMTEgKzI4NDgsMTEgQEAKIAkJcHJvYy0+Y2FsbHJlZiA9IHNrYi0+ZGF0YVsyXTsgLyogY3IgZmxhZyAqLwogCWVsc2UKIAkJcHJvYy0+Y2FsbHJlZiA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IEdMT0JBTE1fTEVOOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ2xvYmFsbWVzX2xpc3QpOyBpKyspCiAJCWlmICgobXQgPT0gZ2xvYmFsbWVzX2xpc3RbaV0ucHJpbWl0aXZlKSAmJgogCQkgICAgKCgxIDw8IHByb2MtPnN0YXRlKSAmIGdsb2JhbG1lc19saXN0W2ldLnN0YXRlKSkKIAkJCWJyZWFrOwotCWlmIChpID09IEdMT0JBTE1fTEVOKSB7CisJaWYgKGkgPT0gQVJSQVlfU0laRShnbG9iYWxtZXNfbGlzdCkpIHsKIAkJaWYgKHN0LT5sMy5kZWJ1ZyAmIEwzX0RFQl9TVEFURSkgewogCQkJbDNfZGVidWcoc3QsICJuaTEgZ2xvYmFsIHN0YXRlICVkIG10ICV4IHVuaGFuZGxlZCIsCiAJCQkJcHJvYy0+c3RhdGUsIG10KTsKQEAgLTMwNDksMTEgKzMwMzksMTEgQEAKIAl9CiAJaWYgKChwID0gZmluZGllKHNrYi0+ZGF0YSwgc2tiLT5sZW4sIElFX0RJU1BMQVksIDApKSAhPSBOVUxMKSAKIAkgIGwzbmkxX2RlbGl2ZXJfZGlzcGxheShwcm9jLCBwciwgcCk7IC8qIERpc3BsYXkgSUUgaW5jbHVkZWQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgREFUQVNMTEVOOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YXN0YXRlbGlzdCk7IGkrKykKIAkJaWYgKChtdCA9PSBkYXRhc3RhdGVsaXN0W2ldLnByaW1pdGl2ZSkgJiYKIAkJICAgICgoMSA8PCBwcm9jLT5zdGF0ZSkgJiBkYXRhc3RhdGVsaXN0W2ldLnN0YXRlKSkKIAkJCWJyZWFrOwotCWlmIChpID09IERBVEFTTExFTikgeworCWlmIChpID09IEFSUkFZX1NJWkUoZGF0YXN0YXRlbGlzdCkpIHsKIAkJaWYgKHN0LT5sMy5kZWJ1ZyAmIEwzX0RFQl9TVEFURSkgewogCQkJbDNfZGVidWcoc3QsICJuaTF1cCVzc3RhdGUgJWQgbXQgJSN4IHVuaGFuZGxlZCIsCiAJCQkJKHByID09IChETF9EQVRBIHwgSU5ESUNBVElPTikpID8gIiAiIDogIihicm9hZGNhc3QpICIsCkBAIC0zMTA4LDExICszMDk4LDExIEBACiAJCXJldHVybjsKIAl9ICAKIAotCWZvciAoaSA9IDA7IGkgPCBET1dOU0xMRU47IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkb3duc3RhdGVsaXN0KTsgaSsrKQogCQlpZiAoKHByID09IGRvd25zdGF0ZWxpc3RbaV0ucHJpbWl0aXZlKSAmJgogCQkgICAgKCgxIDw8IHByb2MtPnN0YXRlKSAmIGRvd25zdGF0ZWxpc3RbaV0uc3RhdGUpKQogCQkJYnJlYWs7Ci0JaWYgKGkgPT0gRE9XTlNMTEVOKSB7CisJaWYgKGkgPT0gQVJSQVlfU0laRShkb3duc3RhdGVsaXN0KSkgewogCQlpZiAoc3QtPmwzLmRlYnVnICYgTDNfREVCX1NUQVRFKSB7CiAJCQlsM19kZWJ1ZyhzdCwgIm5pMWRvd24gc3RhdGUgJWQgcHJpbSAlI3ggdW5oYW5kbGVkIiwKIAkJCQlwcm9jLT5zdGF0ZSwgcHIpOwpAQCAtMzEzNiwxMSArMzEyNiwxMSBAQAogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiSGlTYXggbmkxbWFuIHdpdGhvdXQgcHJvYyBwcj0lMDR4XG4iLCBwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBNQU5TTExFTjsgaSsrKQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtYW5zdGF0ZWxpc3QpOyBpKyspCiAgICAgICAgICAgICAgICAgaWYgKChwciA9PSBtYW5zdGF0ZWxpc3RbaV0ucHJpbWl0aXZlKSAmJgogICAgICAgICAgICAgICAgICAgICAoKDEgPDwgcHJvYy0+c3RhdGUpICYgbWFuc3RhdGVsaXN0W2ldLnN0YXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoaSA9PSBNQU5TTExFTikgeworICAgICAgICBpZiAoaSA9PSBBUlJBWV9TSVpFKG1hbnN0YXRlbGlzdCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3QtPmwzLmRlYnVnICYgTDNfREVCX1NUQVRFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsM19kZWJ1ZyhzdCwgImNyICVkIG5pMW1hbiBzdGF0ZSAlZCBwcmltICUjeCB1bmhhbmRsZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jLT5jYWxscmVmICYgMHg3ZiwgcHJvYy0+c3RhdGUsIHByKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9xOTMxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvcTkzMS5jCmluZGV4IGFhY2JmMGQuLjhiODUzZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9xOTMxLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3E5MzEuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJfQogfTsKIAotI2RlZmluZSBNVFNJWkUgc2l6ZW9mKG10bGlzdCkvc2l6ZW9mKHN0cnVjdCBNZXNzYWdlVHlwZSkKKyNkZWZpbmUgTVRTSVpFIEFSUkFZX1NJWkUobXRsaXN0KQogCiBzdGF0aWMKIHN0cnVjdCBNZXNzYWdlVHlwZSBtdF9uMFtdID0KQEAgLTE1Nyw3ICsxNTcsNyBAQAogCXtNVF9OMF9DTE9fQUNLLCAiQ0xPc2UgQUNLbm93bGVkZ2UifQogfTsKIAotI2RlZmluZSBNVF9OMF9MRU4gKHNpemVvZihtdF9uMCkgLyBzaXplb2Yoc3RydWN0IE1lc3NhZ2VUeXBlKSkKKyNkZWZpbmUgTVRfTjBfTEVOIEFSUkFZX1NJWkUobXRfbjApCiAKIHN0YXRpYwogc3RydWN0IE1lc3NhZ2VUeXBlIG10X24xW10gPQpAQCAtMTk0LDcgKzE5NCw3IEBACiAJe01UX04xX1NUQVQsICJTVEFUdXMifQogfTsKIAotI2RlZmluZSBNVF9OMV9MRU4gKHNpemVvZihtdF9uMSkgLyBzaXplb2Yoc3RydWN0IE1lc3NhZ2VUeXBlKSkKKyNkZWZpbmUgTVRfTjFfTEVOIEFSUkFZX1NJWkUobXRfbjEpCiAKIAogc3RhdGljIGludApAQCAtNDM4LDcgKzQzOCw3IEBACiAJfSwKIH07CiAKLSNkZWZpbmUgQ1ZTSVpFIHNpemVvZihjdmxpc3QpL3NpemVvZihzdHJ1Y3QgQ2F1c2VWYWx1ZSkKKyNkZWZpbmUgQ1ZTSVpFIEFSUkFZX1NJWkUoY3ZsaXN0KQogCiBzdGF0aWMKIGludApAQCAtNTE2LDcgKzUxNiw3IEBACiAJe0NBVVNFX1VzZXJJbmZvRGlzY2FyZGVkLCAiVXNlciBJbmZvIERpc2NhcmRlZCJ9CiB9OwogCi1zdGF0aWMgaW50IGNhdXNlXzF0cjZfbGVuID0gKHNpemVvZihjYXVzZV8xdHI2KSAvIHNpemVvZihzdHJ1Y3QgTWVzc2FnZVR5cGUpKTsKK3N0YXRpYyBpbnQgY2F1c2VfMXRyNl9sZW4gPSBBUlJBWV9TSVpFKGNhdXNlXzF0cjYpOwogCiBzdGF0aWMgaW50CiBwcmNhdXNlXzF0cjYoY2hhciAqZGVzdCwgdV9jaGFyICogcCkKQEAgLTg2NSw3ICs4NjUsNyBAQAogCXsgMHg5NiwgIlJlZGlyZWN0aW9uIG5hbWUiIH0sCiAJeyAweDllLCAiVGV4dCIgfSwKIH07Ci0jZGVmaW5lIERUQUdTSVpFIHNpemVvZihkdGFnbGlzdCkvc2l6ZW9mKHN0cnVjdCBEVGFnKQorI2RlZmluZSBEVEFHU0laRSBBUlJBWV9TSVpFKGR0YWdsaXN0KQogCiBzdGF0aWMgaW50CiBkaXNwdGV4dF9uaTEoY2hhciAqZGVzdCwgdV9jaGFyICogcCkKQEAgLTEwNzQsNyArMTA3NCw3IEBACiB9OwogCiAKLSNkZWZpbmUgSUVTSVpFIHNpemVvZihpZWxpc3QpL3NpemVvZihzdHJ1Y3QgSW5mb3JtYXRpb25FbGVtZW50KQorI2RlZmluZSBJRVNJWkUgQVJSQVlfU0laRShpZWxpc3QpCiAKIHN0YXRpYwogc3RydWN0IEluZm9ybWF0aW9uRWxlbWVudCBpZWxpc3RfbmkxW10gPSB7CkBAIC0xMTAyLDcgKzExMDIsNyBAQAogfTsKIAogCi0jZGVmaW5lIElFU0laRV9OSTEgc2l6ZW9mKGllbGlzdF9uaTEpL3NpemVvZihzdHJ1Y3QgSW5mb3JtYXRpb25FbGVtZW50KQorI2RlZmluZSBJRVNJWkVfTkkxIEFSUkFZX1NJWkUoaWVsaXN0X25pMSkKIAogc3RhdGljCiBzdHJ1Y3QgSW5mb3JtYXRpb25FbGVtZW50IGllbGlzdF9uaTFfY3M1W10gPSB7CkBAIC0xMTEwLDE0ICsxMTEwLDE0IEBACiAJeyAweDJhLCAiRGlzcGxheSB0ZXh0IiwgZGlzcHRleHRfbmkxIH0sCiB9OwogCi0jZGVmaW5lIElFU0laRV9OSTFfQ1M1IHNpemVvZihpZWxpc3RfbmkxX2NzNSkvc2l6ZW9mKHN0cnVjdCBJbmZvcm1hdGlvbkVsZW1lbnQpCisjZGVmaW5lIElFU0laRV9OSTFfQ1M1IEFSUkFZX1NJWkUoaWVsaXN0X25pMV9jczUpCiAKIHN0YXRpYwogc3RydWN0IEluZm9ybWF0aW9uRWxlbWVudCBpZWxpc3RfbmkxX2NzNltdID0gewogCXsgMHg3YiwgIkNhbGwgYXBwZWFyYW5jZSIsIGdlbmVyYWxfbmkxIH0sCiB9OwogCi0jZGVmaW5lIElFU0laRV9OSTFfQ1M2IHNpemVvZihpZWxpc3RfbmkxX2NzNikvc2l6ZW9mKHN0cnVjdCBJbmZvcm1hdGlvbkVsZW1lbnQpCisjZGVmaW5lIElFU0laRV9OSTFfQ1M2IEFSUkFZX1NJWkUoaWVsaXN0X25pMV9jczYpCiAKIHN0YXRpYyBzdHJ1Y3QgSW5mb3JtYXRpb25FbGVtZW50IHdlXzBbXSA9CiB7CkBAIC0xMTMzLDcgKzExMzMsNyBAQAogCXtXRTBfdXNlckluZm8sICJVc2VyIEluZm8iLCBnZW5lcmFsfQogfTsKIAotI2RlZmluZSBXRV8wX0xFTiAoc2l6ZW9mKHdlXzApIC8gc2l6ZW9mKHN0cnVjdCBJbmZvcm1hdGlvbkVsZW1lbnQpKQorI2RlZmluZSBXRV8wX0xFTiBBUlJBWV9TSVpFKHdlXzApCiAKIHN0YXRpYyBzdHJ1Y3QgSW5mb3JtYXRpb25FbGVtZW50IHdlXzZbXSA9CiB7CkBAIC0xMTQ1LDcgKzExNDUsNyBAQAogCXtXRTZfc3RhdHVzQ2FsbGVkLCAiU3RhdHVzIENhbGxlZCIsIGdlbmVyYWx9LAogCXtXRTZfYWRkVHJhbnNBdHRyLCAiQWRkaXRpb25hbCBUcmFuc21pc3Npb24gQXR0cmlidXRlcyIsIGdlbmVyYWx9CiB9OwotI2RlZmluZSBXRV82X0xFTiAoc2l6ZW9mKHdlXzYpIC8gc2l6ZW9mKHN0cnVjdCBJbmZvcm1hdGlvbkVsZW1lbnQpKQorI2RlZmluZSBXRV82X0xFTiBBUlJBWV9TSVpFKHdlXzYpCiAKIGludAogUXVpY2tIZXgoY2hhciAqdHh0LCB1X2NoYXIgKiBwLCBpbnQgY250KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MS5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MS5oCmluZGV4IGNmZjdhNjMuLjY0Zjc4YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODEuaAorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxLmgKQEAgLTIyNiw3ICsyMjYsNyBAQAogI2RlZmluZSBJTkZPKGZvcm1hdCwgYXJnLi4uKSBcCiBwcmludGsoS0VSTl9JTkZPICIlczolczogIiBmb3JtYXQgIlxuIiAsIF9fRklMRV9fLCAgX19mdW5jX18gLCAjIyBhcmcpCiAKLSNpbmNsdWRlICJpc2RuaGRsYy5oIgorI2luY2x1ZGUgPGxpbnV4L2lzZG4vaGRsYy5oPgogI2luY2x1ZGUgImZzbS5oIgogI2luY2x1ZGUgImhpc2F4X2lmLmgiCiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2IuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jCmluZGV4IDAwNzRiNjAuLjk1YjFjZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jCkBAIC0yMTgsNyArMjE4LDEwIEBACiAJaWYgKGJjcy0+bW9kZSAhPSBMMV9NT0RFX05VTEwpIHsKIAkJLy8gT3BlbiB0aGUgQiBjaGFubmVsCiAJCWlmIChiY3MtPm1vZGUgIT0gTDFfTU9ERV9UUkFOUykgewotCQkJaXNkbmhkbGNfb3V0X2luaXQoJmJfb3V0LT5oZGxjX3N0YXRlLCAwLCBiY3MtPm1vZGUgPT0gTDFfTU9ERV9IRExDXzU2Syk7CisJCQl1MzIgZmVhdHVyZXMgPSBIRExDX0JJVFJFVkVSU0U7CisJCQlpZiAoYmNzLT5tb2RlID09IEwxX01PREVfSERMQ181NkspCisJCQkJZmVhdHVyZXMgfD0gSERMQ181NktCSVQ7CisJCQlpc2RuaGRsY19vdXRfaW5pdCgmYl9vdXQtPmhkbGNfc3RhdGUsIGZlYXR1cmVzKTsKIAkJfQogCQlzdDU0ODFfdXNiX3BpcGVfcmVzZXQoYWRhcHRlciwgKGJjcy0+Y2hhbm5lbCsxKSoyLCBOVUxMLCBOVUxMKTsKIAkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfZC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9kLmMKaW5kZXggMDc3OTkxYy4uMzllOGU0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9kLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9kLmMKQEAgLTQxNyw3ICs0MTcsNyBAQAogCiAJREJHKDIsImxlbj0lZCIsc2tiLT5sZW4pOwogCi0JaXNkbmhkbGNfb3V0X2luaXQoJmRfb3V0LT5oZGxjX3N0YXRlLCAxLCAwKTsKKwlpc2RuaGRsY19vdXRfaW5pdCgmZF9vdXQtPmhkbGNfc3RhdGUsIEhETENfRENIQU5ORUwgfCBIRExDX0JJVFJFVkVSU0UpOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoYnVmX25yLCAmZF9vdXQtPmJ1c3kpKSB7CiAJCVdBUk5JTkcoImVwICVkIHVyYiAlZCBidXN5ICUjbHgiLCBFUF9EX09VVCwgYnVmX25yLCBkX291dC0+YnVzeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX3VzYi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV91c2IuYwppbmRleCAyYjNhMDU1Li4xMGQ0MWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX3VzYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfdXNiLmMKQEAgLTYzNywxMCArNjM3LDEzIEBACiAJdXNiX3VubGlua191cmIoaW4tPnVyYlsxXSk7CiAKIAlpZiAoaW4tPm1vZGUgIT0gTDFfTU9ERV9OVUxMKSB7Ci0JCWlmIChpbi0+bW9kZSAhPSBMMV9NT0RFX1RSQU5TKQotCQkJaXNkbmhkbGNfcmN2X2luaXQoJmluLT5oZGxjX3N0YXRlLAotCQkJCWluLT5tb2RlID09IEwxX01PREVfSERMQ181NkspOwotCQkKKwkJaWYgKGluLT5tb2RlICE9IEwxX01PREVfVFJBTlMpIHsKKwkJCXUzMiBmZWF0dXJlcyA9IEhETENfQklUUkVWRVJTRTsKKworCQkJaWYgKGluLT5tb2RlID09IEwxX01PREVfSERMQ181NkspCisJCQkJZmVhdHVyZXMgfD0gSERMQ181NktCSVQ7CisJCQlpc2RuaGRsY19yY3ZfaW5pdCgmaW4tPmhkbGNfc3RhdGUsIGZlYXR1cmVzKTsKKwkJfQogCQlzdDU0ODFfdXNiX3BpcGVfcmVzZXQoaW4tPmFkYXB0ZXIsIGluLT5lcCwgTlVMTCwgTlVMTCk7CiAJCXN0NTQ4MV91c2JfZGV2aWNlX2N0cmxfbXNnKGluLT5hZGFwdGVyLCBpbi0+Y291bnRlciwKIAkJCQkJICAgaW4tPnBhY2tldF9zaXplLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlaS5jCmluZGV4IGNlYjBkZjkuLjZlNjU0MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWkuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVpLmMKQEAgLTQ0Nyw4ICs0NDcsNiBAQAogCXtTVF9URUlfSURWRVJJRlksIEVWX0NIS1JFUSwgdGVpX2lkX2Noa19yZXF9LAogfTsKIAotI2RlZmluZSBURUlfRk5fQ09VTlQgKHNpemVvZihUZWlGbkxpc3QpL3NpemVvZihzdHJ1Y3QgRnNtTm9kZSkpCi0KIGludCBfX2luaXQKIFRlaU5ldyh2b2lkKQogewpAQCAtNDU2LDcgKzQ1NCw3IEBACiAJdGVpZnNtLmV2ZW50X2NvdW50ID0gVEVJX0VWRU5UX0NPVU5UOwogCXRlaWZzbS5zdHJFdmVudCA9IHN0clRlaUV2ZW50OwogCXRlaWZzbS5zdHJTdGF0ZSA9IHN0clRlaVN0YXRlOwotCXJldHVybiBGc21OZXcoJnRlaWZzbSwgVGVpRm5MaXN0LCBURUlfRk5fQ09VTlQpOworCXJldHVybiBGc21OZXcoJnRlaWZzbSwgVGVpRm5MaXN0LCBBUlJBWV9TSVpFKFRlaUZuTGlzdCkpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdzY2OTIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCmluZGV4IGJiMWM4ZGQuLmM0ZDg2MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCkBAIC0xMDUsOCArMTA1LDYgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBJc2RuQ2FyZFN0YXRlLCB0cXVldWUpOwogCXN0cnVjdCBQU3RhY2sgKnN0cHRyOwogCi0JaWYgKCFjcykKLQkJcmV0dXJuOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRF9DTEVBUkJVU1ksICZjcy0+ZXZlbnQpKSB7CiAJCWlmIChjcy0+ZGVidWcpCiAJCQlkZWJ1Z2wxKGNzLCAiRC1DaGFubmVsIEJ1c3kgY2xlYXJlZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jCmluZGV4IDU3OTk3NGMuLjcyZWI5MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fbmV0LmMKQEAgLTExOSw3ICsxMTksNyBAQAogLyogc2VuZCBhIHBhY2tldCBvbiB0aGlzIGludGVyZmFjZS4gKi8KIC8qIG5ldyBzdHlsZSBmb3Iga2VybmVsID49IDIuMy4zMyAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIGRldjsKQEAgLTE0OCw3ICsxNDgsNyBAQAogCWlmIChscC0+c2tfY291bnQgPD0gMykgewogCQlzY2hlZHVsZV93b3JrKCYoKGh5c2RuX2NhcmQgKikgZGV2LT5tbF9wcml2KS0+aXJxX3F1ZXVlKTsKIAl9Ci0JcmV0dXJuICgwKTsJCS8qIHN1Y2Nlc3MgKi8KKwlyZXR1cm4gTkVUREVWX1RYX09LOwkvKiBzdWNjZXNzICovCiB9CQkJCS8qIG5ldF9zZW5kX3BhY2tldCAqLwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9pNGwvS2NvbmZpZwppbmRleCBlZDM1MTBmLi5kZDc0NGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9LY29uZmlnCkBAIC0yLDYgKzIsOCBAQAogIyBPbGQgSVNETjRMaW51eCBjb25maWcKICMKIAoraWYgSVNETl9JNEwKKwogY29uZmlnIElTRE5fUFBQCiAJYm9vbCAiU3VwcG9ydCBzeW5jaHJvbm91cyBQUFAiCiAJZGVwZW5kcyBvbiBJTkVUCkBAIC0xMzUsMyArMTM3LDEyIEBACiBzb3VyY2UgImRyaXZlcnMvaXNkbi9oeXNkbi9LY29uZmlnIgogCiBlbmRtZW51CisjIGVuZCBJU0ROX0k0TAorZW5kaWYKKworY29uZmlnIElTRE5fSERMQworCXRyaXN0YXRlIAorCWRlcGVuZHMgb24gSElTQVhfU1Q1NDgxCisJc2VsZWN0IENSQ19DQ0lUVAorCXNlbGVjdCBCSVRSRVZFUlNFCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvTWFrZWZpbGUgYi9kcml2ZXJzL2lzZG4vaTRsL01ha2VmaWxlCmluZGV4IDQ5YTA2YzAuLmNiOWQzYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKIAogb2JqLSQoQ09ORklHX0lTRE5fSTRMKQkJKz0gaXNkbi5vCiBvYmotJChDT05GSUdfSVNETl9QUFBfQlNEQ09NUCkJKz0gaXNkbl9ic2Rjb21wLm8KK29iai0kKENPTkZJR19JU0ROX0hETEMpCQkrPSBpc2RuaGRsYy5vCiAKICMgTXVsdGlwYXJ0IG9iamVjdHMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYwppbmRleCBkZTRhYWQwLi45MGI1NmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jCkBAIC0xNzYsNyArMTc2LDggQEAKIC8qIFByb3RvdHlwZXMgKi8KIAogc3RhdGljIGludCBpc2RuX25ldF9mb3JjZV9kaWFsX2xwKGlzZG5fbmV0X2xvY2FsICopOwotc3RhdGljIGludCBpc2RuX25ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIG5ldGRldl90eF90IGlzZG5fbmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwKKwkJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAogc3RhdGljIHZvaWQgaXNkbl9uZXRfY2lzY29oZGxja19jb25uZWN0ZWQoaXNkbl9uZXRfbG9jYWwgKmxwKTsKIHN0YXRpYyB2b2lkIGlzZG5fbmV0X2Npc2NvaGRsY2tfZGlzY29ubmVjdGVkKGlzZG5fbmV0X2xvY2FsICpscCk7CkBAIC0xMDUxLDEyICsxMDUyLDEyIEBACiAJaXNkbl9uZXRfZGV2ICpuZDsKIAlpc2RuX25ldF9sb2NhbCAqc2xwOwogCWlzZG5fbmV0X2xvY2FsICpscCA9IChpc2RuX25ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihuZGV2KTsKLQlpbnQgcmV0diA9IDA7CisJaW50IHJldHYgPSBORVRERVZfVFhfT0s7CiAKIAlpZiAoKChpc2RuX25ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihuZGV2KSktPm1hc3RlcikgewogCQlwcmludGsoImlzZG4gQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAkvKiBGb3IgdGhlIG90aGVyIGVuY2FwcyB0aGUgaGVhZGVyIGhhcyBhbHJlYWR5IGJlZW4gYnVpbHQgKi8KQEAgLTExNjAsNyArMTE2MSw3IEBACiAgKiBJZiB0aGlzIGludGVyZmFjZSBpc24ndCBjb25uZWN0ZWQgdG8gYSBJU0ROLUNoYW5uZWwsIGZpbmQgYSBmcmVlIGNoYW5uZWwsCiAgKiBhbmQgc3RhcnQgZGlhbGluZy4KICAqLwotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBpc2RuX25ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCWlzZG5fbmV0X2xvY2FsICpscCA9IChpc2RuX25ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihuZGV2KTsKQEAgLTEyMDIsNyArMTIwMyw3IEBACiAJCQlpZiAoIShJU0ROX05FVF9ESUFMTU9ERSgqbHApID09IElTRE5fTkVUX0RNX0FVVE8pKSB7CiAJCQkJaXNkbl9uZXRfdW5yZWFjaGFibGUobmRldiwgc2tiLCAiZGlhbCByZWplY3RlZDogaW50ZXJmYWNlIG5vdCBpbiBkaWFsbW9kZSBgYXV0byciKTsKIAkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJCX0KIAkJCWlmIChscC0+cGhvbmVbMV0pIHsKIAkJCQl1bG9uZyBmbGFnczsKQEAgLTEyMTUsNyArMTIxNiw3IEBACiAJCQkJCWlmKHRpbWVfYmVmb3JlKGppZmZpZXMsIGxwLT5kaWFsd2FpdF90aW1lcikpIHsKIAkJCQkJCWlzZG5fbmV0X3VucmVhY2hhYmxlKG5kZXYsIHNrYiwgImRpYWwgcmVqZWN0ZWQ6IHJldHJ5LXRpbWUgbm90IHJlYWNoZWQiKTsKIAkJCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCQkJCXJldHVybiAwOworCQkJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJCQkJfSBlbHNlCiAJCQkJCQlscC0+ZGlhbHdhaXRfdGltZXIgPSAwOwogCQkJCX0KQEAgLTEyNDMsNyArMTI0NCw3IEBACiAJCQkJCWlzZG5fbmV0X3VucmVhY2hhYmxlKG5kZXYsIHNrYiwKIAkJCQkJCQkgICAiTm8gY2hhbm5lbCIpOwogCQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQkJCXJldHVybiAwOworCQkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJCX0KIAkJCQkvKiBMb2cgcGFja2V0LCB3aGljaCB0cmlnZ2VyZWQgZGlhbGluZyAqLwogCQkJCWlmIChkZXYtPm5ldF92ZXJib3NlKQpAQCAtMTI1OCw3ICsxMjU5LDcgQEAKIAkJCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCQkJCWlzZG5fbmV0X3VuYmluZF9jaGFubmVsKGxwKTsKIAkJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOwotCQkJCQkJcmV0dXJuIDA7CS8qIFNUTiAoc2tiIHRvIG5pcnZhbmEpIDspICovCisJCQkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwkvKiBTVE4gKHNrYiB0byBuaXJ2YW5hKSA7KSAqLwogCQkJCQl9CiAjaWZkZWYgQ09ORklHX0lQUFBfRklMVEVSCiAJCQkJCWlmIChpc2RuX3BwcF9hdXRvZGlhbF9maWx0ZXIoc2tiLCBscCkpIHsKQEAgLTEyNjcsNyArMTI2OCw3IEBACiAJCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKIAkJCQkJCWlzZG5fbmV0X3VucmVhY2hhYmxlKG5kZXYsIHNrYiwgImRpYWwgcmVqZWN0ZWQ6IHBhY2tldCBmaWx0ZXJlZCIpOwogCQkJCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJCQkJcmV0dXJuIDA7CisJCQkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJCQl9CiAjZW5kaWYKIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CkBAIC0xMjg1LDcgKzEyODYsNyBAQAogCQkJCWlzZG5fbmV0X3VucmVhY2hhYmxlKG5kZXYsIHNrYiwKIAkJCQkJCSAgICAgIk5vIHBob25lIG51bWJlciIpOwogCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJfQogCQl9IGVsc2UgewogCQkJLyogRGV2aWNlIGlzIGNvbm5lY3RlZCB0byBhbiBJU0ROIGNoYW5uZWwgKi8gCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKaW5kZXggYWEzMGI1Yy4uMmQxNGI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYwpAQCAtMTIyMyw3ICsxMjIzLDcgQEAKIAlpc2RuX25ldF9kZXYgKm5kOwogCXVuc2lnbmVkIGludCBwcm90byA9IFBQUF9JUDsgICAgIC8qIDB4MjEgKi8KIAlzdHJ1Y3QgaXBwcF9zdHJ1Y3QgKmlwdCwqaXB0czsKLQlpbnQgc2xvdCwgcmV0dmFsID0gMDsKKwlpbnQgc2xvdCwgcmV0dmFsID0gTkVUREVWX1RYX09LOwogCiAJbWxwID0gKGlzZG5fbmV0X2xvY2FsICopIG5ldGRldl9wcml2KG5ldGRldik7CiAJbmQgPSBtbHAtPm5ldGRldjsgICAgICAgLyogZ2V0IG1hc3RlciBscCAqLwpAQCAtMTI0MCw3ICsxMjQwLDcgQEAKIAlpZiAoIShpcHRzLT5wcHBjZmcgJiBTQ19FTkFCTEVfSVApKSB7CS8qIFBQUCBjb25uZWN0ZWQgPyAqLwogCQlpZiAoaXB0cy0+ZGVidWcgJiAweDEpCiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogSVAgZnJhbWUgZGVsYXllZC5cbiIsIG5ldGRldi0+bmFtZSk7Ci0JCXJldHZhbCA9IDE7CisJCXJldHZhbCA9IE5FVERFVl9UWF9CVVNZOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEyNjEsNyArMTI2MSw3IEBACiAJbHAgPSBpc2RuX25ldF9nZXRfbG9ja2VkX2xwKG5kKTsKIAlpZiAoIWxwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBhbGwgY2hhbm5lbHMgYnVzeSAtIHJlcXVldWluZyFcbiIsIG5ldGRldi0+bmFtZSk7Ci0JCXJldHZhbCA9IDE7CisJCXJldHZhbCA9IE5FVERFVl9UWF9CVVNZOwogCQlnb3RvIG91dDsKIAl9CiAJLyogd2UgaGF2ZSBvdXIgbHAgbG9ja2VkIGZyb20gbm93IG9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5oZGxjLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5oZGxjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk4OWFhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbmhkbGMuYwpAQCAtMCwwICsxLDYzMCBAQAorLyoKKyAqIGlzZG5oZGxjLmMgIC0tICBHZW5lcmFsIHB1cnBvc2UgSVNETiBIRExDIGRlY29kZXIuCisgKgorICogQ29weXJpZ2h0IChDKQorICoJMjAwOQlLYXJzdGVuIEtlaWwJCTxrZWlsQGIxLXN5c3RlbXMuZGU+CisgKgkyMDAyCVdvbGZnYW5nIE3DvGVzCQk8d29sZmdhbmdAaWtzdy1tdWVlcy5kZT4KKyAqCTIwMDEJRnJvZGUgSXNha3NlbgkJPGZpc2Frc2VuQGJld2FuLmNvbT4KKyAqICAgICAgMjAwMQlLYWkgR2VybWFzY2hld3NraQk8a2FpLmdlcm1hc2NoZXdza2lAZ214LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY3JjLWNjaXR0Lmg+CisjaW5jbHVkZSA8bGludXgvaXNkbi9oZGxjLmg+CisjaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK01PRFVMRV9BVVRIT1IoIldvbGZnYW5nIE3DvGVzIDx3b2xmZ2FuZ0Bpa3N3LW11ZWVzLmRlPiwgIgorCSAgICAgICJGcm9kZSBJc2Frc2VuIDxmaXNha3NlbkBiZXdhbi5jb20+LCAiCisJICAgICAgIkthaSBHZXJtYXNjaGV3c2tpIDxrYWkuZ2VybWFzY2hld3NraUBnbXguZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyYWwgcHVycG9zZSBJU0ROIEhETEMgZGVjb2RlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitlbnVtIHsKKwlIRExDX0ZBU1RfSURMRSwgSERMQ19HRVRfRkxBR19CMCwgSERMQ19HRVRGTEFHX0IxQTYsIEhETENfR0VURkxBR19CNywKKwlIRExDX0dFVF9EQVRBLCBIRExDX0ZBU1RfRkxBRworfTsKKworZW51bSB7CisJSERMQ19TRU5EX0RBVEEsIEhETENfU0VORF9DUkMxLCBIRExDX1NFTkRfRkFTVF9GTEFHLAorCUhETENfU0VORF9GSVJTVF9GTEFHLCBIRExDX1NFTkRfQ1JDMiwgSERMQ19TRU5EX0NMT1NJTkdfRkxBRywKKwlIRExDX1NFTkRfSURMRTEsIEhETENfU0VORF9GQVNUX0lETEUsIEhETENfU0VOREZMQUdfQjAsCisJSERMQ19TRU5ERkxBR19CMUE2LCBIRExDX1NFTkRGTEFHX0I3LCBTVE9QUEVELCBIRExDX1NFTkRGTEFHX09ORQorfTsKKwordm9pZCBpc2RuaGRsY19yY3ZfaW5pdChzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYywgdTMyIGZlYXR1cmVzKQoreworCW1lbXNldChoZGxjLCAwLCBzaXplb2Yoc3RydWN0IGlzZG5oZGxjX3ZhcnMpKTsKKwloZGxjLT5zdGF0ZSA9IEhETENfR0VUX0RBVEE7CisJaWYgKGZlYXR1cmVzICYgSERMQ181NktCSVQpCisJCWhkbGMtPmRvX2FkYXB0NTYgPSAxOworCWlmIChmZWF0dXJlcyAmIEhETENfQklUUkVWRVJTRSkKKwkJaGRsYy0+ZG9fYml0cmV2ZXJzZSA9IDE7Cit9CitFWFBPUlRfU1lNQk9MKGlzZG5oZGxjX291dF9pbml0KTsKKwordm9pZCBpc2RuaGRsY19vdXRfaW5pdChzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYywgdTMyIGZlYXR1cmVzKQoreworCW1lbXNldChoZGxjLCAwLCBzaXplb2Yoc3RydWN0IGlzZG5oZGxjX3ZhcnMpKTsKKwlpZiAoZmVhdHVyZXMgJiBIRExDX0RDSEFOTkVMKSB7CisJCWhkbGMtPmRjaGFubmVsID0gMTsKKwkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfRklSU1RfRkxBRzsKKwl9IGVsc2UgeworCQloZGxjLT5kY2hhbm5lbCA9IDA7CisJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0ZBU1RfRkxBRzsKKwkJaGRsYy0+ZmZ2YWx1ZSA9IDB4N2U7CisJfQorCWhkbGMtPmNiaW4gPSAweDdlOworCWlmIChmZWF0dXJlcyAmIEhETENfNTZLQklUKSB7CisJCWhkbGMtPmRvX2FkYXB0NTYgPSAxOworCQloZGxjLT5zdGF0ZSA9IEhETENfU0VOREZMQUdfQjA7CisJfSBlbHNlCisJCWhkbGMtPmRhdGFfYml0cyA9IDg7CisJaWYgKGZlYXR1cmVzICYgSERMQ19CSVRSRVZFUlNFKQorCQloZGxjLT5kb19iaXRyZXZlcnNlID0gMTsKK30KK0VYUE9SVF9TWU1CT0woaXNkbmhkbGNfcmN2X2luaXQpOworCitzdGF0aWMgaW50CitjaGVja19mcmFtZShzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYykKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKGhkbGMtPmRzdHBvcyA8IDIpIAkvKiB0b28gc21hbGwgLSBmcmFtaW5nIGVycm9yICovCisJCXN0YXR1cyA9IC1IRExDX0ZSQU1JTkdfRVJST1I7CisJZWxzZSBpZiAoaGRsYy0+Y3JjICE9IDB4ZjBiOCkJLyogY3JjIGVycm9yICovCisJCXN0YXR1cyA9IC1IRExDX0NSQ19FUlJPUjsKKwllbHNlIHsKKwkJLyogcmVtb3ZlIENSQyAqLworCQloZGxjLT5kc3Rwb3MgLT0gMjsKKwkJLyogZ29vZCBmcmFtZSAqLworCQlzdGF0dXMgPSBoZGxjLT5kc3Rwb3M7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgIGlzZG5oZGxjX2RlY29kZSAtIGRlY29kZXMgSERMQyBmcmFtZXMgZnJvbSBhIHRyYW5zcGFyZW50IGJpdCBzdHJlYW0uCisKKyAgVGhlIHNvdXJjZSBidWZmZXIgaXMgc2Nhbm5lZCBmb3IgdmFsaWQgSERMQyBmcmFtZXMgbG9va2luZyBmb3IKKyAgZmxhZ3MgKDAxMTExMTEwKSB0byBpbmRpY2F0ZSB0aGUgc3RhcnQgb2YgYSBmcmFtZS4gSWYgdGhlIHN0YXJ0IG9mCisgIHRoZSBmcmFtZSBpcyBmb3VuZCwgdGhlIGJpdCBzdHVmZmluZyBpcyByZW1vdmVkICgwIGFmdGVyIDUgMSdzKS4KKyAgV2hlbiBhIG5ldyBmbGFnIGlzIGZvdW5kLCB0aGUgY29tcGxldGUgZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQKKyAgYW5kIHRoZSBDUkMgaXMgY2hlY2tlZC4KKyAgSWYgYSB2YWxpZCBmcmFtZSBpcyBmb3VuZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZyYW1lIGxlbmd0aAorICBleGNsdWRpbmcgdGhlIENSQyB3aXRoIHRoZSBiaXQgSERMQ19FTkRfT0ZfRlJBTUUgc2V0LgorICBJZiB0aGUgYmVnaW5uaW5nIG9mIGEgdmFsaWQgZnJhbWUgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiByZXR1cm5zCisgIHRoZSBsZW5ndGguCisgIElmIGEgZnJhbWluZyBlcnJvciBpcyBmb3VuZCAodG9vIG1hbnkgMXMgYW5kIG5vdCBhIGZsYWcpIHRoZSBmdW5jdGlvbgorICByZXR1cm5zIHRoZSBsZW5ndGggd2l0aCB0aGUgYml0IEhETENfRlJBTUlOR19FUlJPUiBzZXQuCisgIElmIGEgQ1JDIGVycm9yIGlzIGZvdW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBsZW5ndGggd2l0aCB0aGUKKyAgYml0IEhETENfQ1JDX0VSUk9SIHNldC4KKyAgSWYgdGhlIGZyYW1lIGxlbmd0aCBleGNlZWRzIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgc2l6ZSwgdGhlIGZ1bmN0aW9uCisgIHJldHVybnMgdGhlIGxlbmd0aCB3aXRoIHRoZSBiaXQgSERMQ19MRU5HVEhfRVJST1Igc2V0LgorCisgIHNyYyAtIHNvdXJjZSBidWZmZXIKKyAgc2xlbiAtIHNvdXJjZSBidWZmZXIgbGVuZ3RoCisgIGNvdW50IC0gbnVtYmVyIG9mIGJ5dGVzIHJlbW92ZWQgKGRlY29kZWQpIGZyb20gdGhlIHNvdXJjZSBidWZmZXIKKyAgZHN0IF8gZGVzdGluYXRpb24gYnVmZmVyCisgIGRzaXplIC0gZGVzdGluYXRpb24gYnVmZmVyIHNpemUKKyAgcmV0dXJucyAtIG51bWJlciBvZiBkZWNvZGVkIGJ5dGVzIGluIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYW5kIHN0YXR1cworICBmbGFnLgorICovCitpbnQgaXNkbmhkbGNfZGVjb2RlKHN0cnVjdCBpc2RuaGRsY192YXJzICpoZGxjLCBjb25zdCB1OCAqc3JjLCBpbnQgc2xlbiwKKwlpbnQgKmNvdW50LCB1OCAqZHN0LCBpbnQgZHNpemUpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmYXN0X2ZsYWdbXSA9IHsKKwkJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgzMCwgMHgzOCwgMHgzYywgMHgzZSwgMHgzZgorCX07CisKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmYXN0X2ZsYWdfdmFsdWVbXSA9IHsKKwkJMHgwMCwgMHg3ZSwgMHhmYywgMHhmOSwgMHhmMywgMHhlNywgMHhjZiwgMHg5ZiwgMHgzZgorCX07CisKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmYXN0X2Fib3J0W10gPSB7CisJCTB4MDAsIDB4MDAsIDB4ODAsIDB4YzAsIDB4ZTAsIDB4ZjAsIDB4ZjgsIDB4ZmMsIDB4ZmUsIDB4ZmYKKwl9OworCisjZGVmaW5lIGhhbmRsZV9mYXN0X2ZsYWcoaCkgXAorCWRvIHtcCisJCWlmIChoLT5jYmluID09IGZhc3RfZmxhZ1toLT5iaXRfc2hpZnRdKSB7XAorCQkJaC0+ZmZ2YWx1ZSA9IGZhc3RfZmxhZ192YWx1ZVtoLT5iaXRfc2hpZnRdO1wKKwkJCWgtPnN0YXRlID0gSERMQ19GQVNUX0ZMQUc7XAorCQkJaC0+ZmZiaXRfc2hpZnQgPSBoLT5iaXRfc2hpZnQ7XAorCQkJaC0+Yml0X3NoaWZ0ID0gMTtcCisJCX0gZWxzZSB7XAorCQkJaC0+c3RhdGUgPSBIRExDX0dFVF9EQVRBO1wKKwkJCWgtPmRhdGFfcmVjZWl2ZWQgPSAwO1wKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBoYW5kbGVfYWJvcnQoaCkgXAorCWRvIHtcCisJCWgtPnNoaWZ0X3JlZyA9IGZhc3RfYWJvcnRbaC0+ZmZiaXRfc2hpZnQgLSAxXTtcCisJCWgtPmhkbGNfYml0czEgPSBoLT5mZmJpdF9zaGlmdCAtIDI7XAorCQlpZiAoaC0+aGRsY19iaXRzMSA8IDApXAorCQkJaC0+aGRsY19iaXRzMSA9IDA7XAorCQloLT5kYXRhX2JpdHMgPSBoLT5mZmJpdF9zaGlmdCAtIDE7XAorCQloLT5zdGF0ZSA9IEhETENfR0VUX0RBVEE7XAorCQloLT5kYXRhX3JlY2VpdmVkID0gMDtcCisJfSB3aGlsZSAoMCkKKworCSpjb3VudCA9IHNsZW47CisKKwl3aGlsZSAoc2xlbiA+IDApIHsKKwkJaWYgKGhkbGMtPmJpdF9zaGlmdCA9PSAwKSB7CisJCQkvKiB0aGUgY29kZSBpcyBmb3IgYml0cmV2ZXJzZSBzdHJlYW1zICovCisJCQlpZiAoaGRsYy0+ZG9fYml0cmV2ZXJzZSA9PSAwKQorCQkJCWhkbGMtPmNiaW4gPSBiaXRyZXY4KCpzcmMrKyk7CisJCQllbHNlCisJCQkJaGRsYy0+Y2JpbiA9ICpzcmMrKzsKKwkJCXNsZW4tLTsKKwkJCWhkbGMtPmJpdF9zaGlmdCA9IDg7CisJCQlpZiAoaGRsYy0+ZG9fYWRhcHQ1NikKKwkJCQloZGxjLT5iaXRfc2hpZnQtLTsKKwkJfQorCisJCXN3aXRjaCAoaGRsYy0+c3RhdGUpIHsKKwkJY2FzZSBTVE9QUEVEOgorCQkJcmV0dXJuIDA7CisJCWNhc2UgSERMQ19GQVNUX0lETEU6CisJCQlpZiAoaGRsYy0+Y2JpbiA9PSAweGZmKSB7CisJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfRkxBR19CMDsKKwkJCWhkbGMtPmhkbGNfYml0czEgPSAwOworCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKKwkJCWJyZWFrOworCQljYXNlIEhETENfR0VUX0ZMQUdfQjA6CisJCQlpZiAoIShoZGxjLT5jYmluICYgMHg4MCkpIHsKKwkJCQloZGxjLT5zdGF0ZSA9IEhETENfR0VURkxBR19CMUE2OworCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoKCFoZGxjLT5kb19hZGFwdDU2KSAmJgorCQkJCSAgICAoKytoZGxjLT5oZGxjX2JpdHMxID49IDgpICYmCisJCQkJICAgIChoZGxjLT5iaXRfc2hpZnQgPT0gMSkpCisJCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfRkFTVF9JRExFOworCQkJfQorCQkJaGRsYy0+Y2JpbiA8PD0gMTsKKwkJCWhkbGMtPmJpdF9zaGlmdC0tOworCQkJYnJlYWs7CisJCWNhc2UgSERMQ19HRVRGTEFHX0IxQTY6CisJCQlpZiAoaGRsYy0+Y2JpbiAmIDB4ODApIHsKKwkJCQloZGxjLT5oZGxjX2JpdHMxKys7CisJCQkJaWYgKGhkbGMtPmhkbGNfYml0czEgPT0gNikKKwkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVEZMQUdfQjc7CisJCQl9IGVsc2UKKwkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKKwkJCWhkbGMtPmNiaW4gPDw9IDE7CisJCQloZGxjLT5iaXRfc2hpZnQtLTsKKwkJCWJyZWFrOworCQljYXNlIEhETENfR0VURkxBR19CNzoKKwkJCWlmIChoZGxjLT5jYmluICYgMHg4MCkgeworCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfRkxBR19CMDsKKwkJCX0gZWxzZSB7CisJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVF9EQVRBOworCQkJCWhkbGMtPmNyYyA9IDB4ZmZmZjsKKwkJCQloZGxjLT5zaGlmdF9yZWcgPSAwOworCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOworCQkJCWhkbGMtPmRhdGFfYml0cyA9IDA7CisJCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7CisJCQl9CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+Yml0X3NoaWZ0LS07CisJCQlicmVhazsKKwkJY2FzZSBIRExDX0dFVF9EQVRBOgorCQkJaWYgKGhkbGMtPmNiaW4gJiAweDgwKSB7CisJCQkJaGRsYy0+aGRsY19iaXRzMSsrOworCQkJCXN3aXRjaCAoaGRsYy0+aGRsY19iaXRzMSkgeworCQkJCWNhc2UgNjoKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA3OgorCQkJCQlpZiAoaGRsYy0+ZGF0YV9yZWNlaXZlZCkKKwkJCQkJCS8qIGJhZCBmcmFtZSAqLworCQkJCQkJc3RhdHVzID0gLUhETENfRlJBTUlOR19FUlJPUjsKKwkJCQkJaWYgKCFoZGxjLT5kb19hZGFwdDU2KSB7CisJCQkJCQlpZiAoaGRsYy0+Y2JpbiA9PSBmYXN0X2Fib3J0CisJCQkJCQkgICAgW2hkbGMtPmJpdF9zaGlmdCArIDFdKSB7CisJCQkJCQkJaGRsYy0+c3RhdGUgPQorCQkJCQkJCQlIRExDX0ZBU1RfSURMRTsKKwkJCQkJCQloZGxjLT5iaXRfc2hpZnQgPSAxOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9IGVsc2UKKwkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfRkxBR19CMDsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOworCQkJCQloZGxjLT5zaGlmdF9yZWcgfD0gMHg4MDsKKwkJCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJc3dpdGNoIChoZGxjLT5oZGxjX2JpdHMxKSB7CisJCQkJY2FzZSA1OgorCQkJCQlicmVhazsKKwkJCQljYXNlIDY6CisJCQkJCWlmIChoZGxjLT5kYXRhX3JlY2VpdmVkKQorCQkJCQkJc3RhdHVzID0gY2hlY2tfZnJhbWUoaGRsYyk7CisJCQkJCWhkbGMtPmNyYyA9IDB4ZmZmZjsKKwkJCQkJaGRsYy0+c2hpZnRfcmVnID0gMDsKKwkJCQkJaGRsYy0+ZGF0YV9iaXRzID0gMDsKKwkJCQkJaWYgKCFoZGxjLT5kb19hZGFwdDU2KQorCQkJCQkJaGFuZGxlX2Zhc3RfZmxhZyhoZGxjKTsKKwkJCQkJZWxzZSB7CisJCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfR0VUX0RBVEE7CisJCQkJCQloZGxjLT5kYXRhX3JlY2VpdmVkID0gMDsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7CisJCQkJCWhkbGMtPmRhdGFfYml0cysrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQl9CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJaGRsYy0+ZHN0cG9zID0gMDsKKwkJCQkqY291bnQgLT0gc2xlbjsKKwkJCQloZGxjLT5jYmluIDw8PSAxOworCQkJCWhkbGMtPmJpdF9zaGlmdC0tOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisJCQlpZiAoaGRsYy0+ZGF0YV9iaXRzID09IDgpIHsKKwkJCQloZGxjLT5kYXRhX2JpdHMgPSAwOworCQkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAxOworCQkJCWhkbGMtPmNyYyA9IGNyY19jY2l0dF9ieXRlKGhkbGMtPmNyYywKKwkJCQkJCWhkbGMtPnNoaWZ0X3JlZyk7CisKKwkJCQkvKiBnb29kIGJ5dGUgcmVjZWl2ZWQgKi8KKwkJCQlpZiAoaGRsYy0+ZHN0cG9zIDwgZHNpemUpCisJCQkJCWRzdFtoZGxjLT5kc3Rwb3MrK10gPSBoZGxjLT5zaGlmdF9yZWc7CisJCQkJZWxzZSB7CisJCQkJCS8qIGZyYW1lIHRvbyBsb25nICovCisJCQkJCXN0YXR1cyA9IC1IRExDX0xFTkdUSF9FUlJPUjsKKwkJCQkJaGRsYy0+ZHN0cG9zID0gMDsKKwkJCQl9CisJCQl9CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+Yml0X3NoaWZ0LS07CisJCQlicmVhazsKKwkJY2FzZSBIRExDX0ZBU1RfRkxBRzoKKwkJCWlmIChoZGxjLT5jYmluID09IGhkbGMtPmZmdmFsdWUpIHsKKwkJCQloZGxjLT5iaXRfc2hpZnQgPSAwOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoaGRsYy0+Y2JpbiA9PSAweGZmKSB7CisJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19GQVNUX0lETEU7CisJCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDA7CisJCQkJfSBlbHNlIGlmIChoZGxjLT5mZmJpdF9zaGlmdCA9PSA4KSB7CisJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRGTEFHX0I3OworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UKKwkJCQkJaGFuZGxlX2Fib3J0KGhkbGMpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKwkqY291bnQgLT0gc2xlbjsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXNkbmhkbGNfZGVjb2RlKTsKKy8qCisgIGlzZG5oZGxjX2VuY29kZSAtIGVuY29kZXMgSERMQyBmcmFtZXMgdG8gYSB0cmFuc3BhcmVudCBiaXQgc3RyZWFtLgorCisgIFRoZSBiaXQgc3RyZWFtIHN0YXJ0cyB3aXRoIGEgYmVnaW5uaW5nIGZsYWcgKDAxMTExMTEwKS4gQWZ0ZXIKKyAgdGhhdCBlYWNoIGJ5dGUgaXMgYWRkZWQgdG8gdGhlIGJpdCBzdHJlYW0gd2l0aCBiaXQgc3R1ZmZpbmcgYWRkZWQKKyAgKDAgYWZ0ZXIgNSAxJ3MpLgorICBXaGVuIHRoZSBsYXN0IGJ5dGUgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2UgYnVmZmVyLCB0aGUKKyAgQ1JDICgyIGJ5dGVzIGlzIGFkZGVkKSBhbmQgdGhlIGZyYW1lIHRlcm1pbmF0ZXMgd2l0aCB0aGUgZW5kaW5nIGZsYWcuCisgIEZvciB0aGUgZGNoYW5uZWwsIHRoZSBpZGxlIGNoYXJhY3RlciAoYWxsIDEncykgaXMgYWxzbyBhZGRlZCBhdCB0aGUgZW5kLgorICBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGVtcHR5IHNvdXJjZSBidWZmZXIgKHNsZW49MCksIGZsYWdzIG9yCisgIGlkbGUgY2hhcmFjdGVyIHdpbGwgYmUgZ2VuZXJhdGVkLgorCisgIHNyYyAtIHNvdXJjZSBidWZmZXIKKyAgc2xlbiAtIHNvdXJjZSBidWZmZXIgbGVuZ3RoCisgIGNvdW50IC0gbnVtYmVyIG9mIGJ5dGVzIHJlbW92ZWQgKGVuY29kZWQpIGZyb20gc291cmNlIGJ1ZmZlcgorICBkc3QgXyBkZXN0aW5hdGlvbiBidWZmZXIKKyAgZHNpemUgLSBkZXN0aW5hdGlvbiBidWZmZXIgc2l6ZQorICByZXR1cm5zIC0gbnVtYmVyIG9mIGVuY29kZWQgYnl0ZXMgaW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorKi8KK2ludCBpc2RuaGRsY19lbmNvZGUoc3RydWN0IGlzZG5oZGxjX3ZhcnMgKmhkbGMsIGNvbnN0IHU4ICpzcmMsIHUxNiBzbGVuLAorCWludCAqY291bnQsIHU4ICpkc3QsIGludCBkc2l6ZSkKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB4ZmFzdF9mbGFnX3ZhbHVlW10gPSB7CisJCTB4N2UsIDB4M2YsIDB4OWYsIDB4Y2YsIDB4ZTcsIDB4ZjMsIDB4ZjksIDB4ZmMsIDB4N2UKKwl9OworCisJaW50IGxlbiA9IDA7CisKKwkqY291bnQgPSBzbGVuOworCisJLyogc3BlY2lhbCBoYW5kbGluZyBmb3Igb25lIGJ5dGUgZnJhbWVzICovCisJaWYgKChzbGVuID09IDEpICYmIChoZGxjLT5zdGF0ZSA9PSBIRExDX1NFTkRfRkFTVF9GTEFHKSkKKwkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRGTEFHX09ORTsKKwl3aGlsZSAoZHNpemUgPiAwKSB7CisJCWlmIChoZGxjLT5iaXRfc2hpZnQgPT0gMCkgeworCQkJaWYgKHNsZW4gJiYgIWhkbGMtPmRvX2Nsb3NpbmcpIHsKKwkJCQloZGxjLT5zaGlmdF9yZWcgPSAqc3JjKys7CisJCQkJc2xlbi0tOworCQkJCWlmIChzbGVuID09IDApCisJCQkJCS8qIGNsb3Npbmcgc2VxdWVuY2UsIENSQyArIGZsYWcocykgKi8KKwkJCQkJaGRsYy0+ZG9fY2xvc2luZyA9IDE7CisJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGhkbGMtPnN0YXRlID09IEhETENfU0VORF9EQVRBKSB7CisJCQkJCWlmIChoZGxjLT5kYXRhX3JlY2VpdmVkKSB7CisJCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9DUkMxOworCQkJCQkJaGRsYy0+Y3JjIF49IDB4ZmZmZjsKKwkJCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDg7CisJCQkJCQloZGxjLT5zaGlmdF9yZWcgPQorCQkJCQkJCWhkbGMtPmNyYyAmIDB4ZmY7CisJCQkJCX0gZWxzZSBpZiAoIWhkbGMtPmRvX2FkYXB0NTYpCisJCQkJCQloZGxjLT5zdGF0ZSA9CisJCQkJCQkJSERMQ19TRU5EX0ZBU1RfRkxBRzsKKwkJCQkJZWxzZQorCQkJCQkJaGRsYy0+c3RhdGUgPQorCQkJCQkJCUhETENfU0VOREZMQUdfQjA7CisJCQkJfQorCisJCQl9CisJCX0KKworCQlzd2l0Y2ggKGhkbGMtPnN0YXRlKSB7CisJCWNhc2UgU1RPUFBFRDoKKwkJCXdoaWxlIChkc2l6ZS0tKQorCQkJCSpkc3QrKyA9IDB4ZmY7CisJCQlyZXR1cm4gZHNpemU7CisJCWNhc2UgSERMQ19TRU5EX0ZBU1RfRkxBRzoKKwkJCWhkbGMtPmRvX2Nsb3NpbmcgPSAwOworCQkJaWYgKHNsZW4gPT0gMCkgeworCQkJCS8qIHRoZSBjb2RlIGlzIGZvciBiaXRyZXZlcnNlIHN0cmVhbXMgKi8KKwkJCQlpZiAoaGRsYy0+ZG9fYml0cmV2ZXJzZSA9PSAwKQorCQkJCQkqZHN0KysgPSBiaXRyZXY4KGhkbGMtPmZmdmFsdWUpOworCQkJCWVsc2UKKwkJCQkJKmRzdCsrID0gaGRsYy0+ZmZ2YWx1ZTsKKwkJCQlsZW4rKzsKKwkJCQlkc2l6ZS0tOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgSERMQ19TRU5ERkxBR19PTkU6CisJCQlpZiAoaGRsYy0+Yml0X3NoaWZ0ID09IDgpIHsKKwkJCQloZGxjLT5jYmluID0gaGRsYy0+ZmZ2YWx1ZSA+PgorCQkJCQkoOCAtIGhkbGMtPmRhdGFfYml0cyk7CisJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfREFUQTsKKwkJCQloZGxjLT5jcmMgPSAweGZmZmY7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDE7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIRExDX1NFTkRGTEFHX0IwOgorCQkJaGRsYy0+ZG9fY2xvc2luZyA9IDA7CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKKwkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5ERkxBR19CMUE2OworCQkJYnJlYWs7CisJCWNhc2UgSERMQ19TRU5ERkxBR19CMUE2OgorCQkJaGRsYy0+Y2JpbiA8PD0gMTsKKwkJCWhkbGMtPmRhdGFfYml0cysrOworCQkJaGRsYy0+Y2JpbisrOworCQkJaWYgKCsraGRsYy0+aGRsY19iaXRzMSA9PSA2KQorCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5ERkxBR19CNzsKKwkJCWJyZWFrOworCQljYXNlIEhETENfU0VOREZMQUdfQjc6CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQlpZiAoc2xlbiA9PSAwKSB7CisJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRGTEFHX0IwOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGhkbGMtPmJpdF9zaGlmdCA9PSA4KSB7CisJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfREFUQTsKKwkJCQloZGxjLT5jcmMgPSAweGZmZmY7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDE7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIRExDX1NFTkRfRklSU1RfRkxBRzoKKwkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAxOworCQkJaWYgKGhkbGMtPmRhdGFfYml0cyA9PSA4KSB7CisJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfREFUQTsKKwkJCQloZGxjLT5jcmMgPSAweGZmZmY7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQlpZiAoaGRsYy0+c2hpZnRfcmVnICYgMHgwMSkKKwkJCQloZGxjLT5jYmluKys7CisJCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7CisJCQloZGxjLT5iaXRfc2hpZnQtLTsKKwkJCWlmIChoZGxjLT5iaXRfc2hpZnQgPT0gMCkgeworCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0RBVEE7CisJCQkJaGRsYy0+Y3JjID0gMHhmZmZmOworCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSERMQ19TRU5EX0RBVEE6CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQlpZiAoaGRsYy0+aGRsY19iaXRzMSA9PSA1KSB7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaGRsYy0+Yml0X3NoaWZ0ID09IDgpCisJCQkJaGRsYy0+Y3JjID0gY3JjX2NjaXR0X2J5dGUoaGRsYy0+Y3JjLAorCQkJCQloZGxjLT5zaGlmdF9yZWcpOworCQkJaWYgKGhkbGMtPnNoaWZ0X3JlZyAmIDB4MDEpIHsKKwkJCQloZGxjLT5oZGxjX2JpdHMxKys7CisJCQkJaGRsYy0+Y2JpbisrOworCQkJCWhkbGMtPnNoaWZ0X3JlZyA+Pj0gMTsKKwkJCQloZGxjLT5iaXRfc2hpZnQtLTsKKwkJCX0gZWxzZSB7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOworCQkJCWhkbGMtPmJpdF9zaGlmdC0tOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSERMQ19TRU5EX0NSQzE6CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQlpZiAoaGRsYy0+aGRsY19iaXRzMSA9PSA1KSB7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaGRsYy0+c2hpZnRfcmVnICYgMHgwMSkgeworCQkJCWhkbGMtPmhkbGNfYml0czErKzsKKwkJCQloZGxjLT5jYmluKys7CisJCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOworCQkJCWhkbGMtPmJpdF9zaGlmdC0tOworCQkJfSBlbHNlIHsKKwkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKKwkJCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7CisJCQkJaGRsYy0+Yml0X3NoaWZ0LS07CisJCQl9CisJCQlpZiAoaGRsYy0+Yml0X3NoaWZ0ID09IDApIHsKKwkJCQloZGxjLT5zaGlmdF9yZWcgPSAoaGRsYy0+Y3JjID4+IDgpOworCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0NSQzI7CisJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEhETENfU0VORF9DUkMyOgorCQkJaGRsYy0+Y2JpbiA8PD0gMTsKKwkJCWhkbGMtPmRhdGFfYml0cysrOworCQkJaWYgKGhkbGMtPmhkbGNfYml0czEgPT0gNSkgeworCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGhkbGMtPnNoaWZ0X3JlZyAmIDB4MDEpIHsKKwkJCQloZGxjLT5oZGxjX2JpdHMxKys7CisJCQkJaGRsYy0+Y2JpbisrOworCQkJCWhkbGMtPnNoaWZ0X3JlZyA+Pj0gMTsKKwkJCQloZGxjLT5iaXRfc2hpZnQtLTsKKwkJCX0gZWxzZSB7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOworCQkJCWhkbGMtPmJpdF9zaGlmdC0tOworCQkJfQorCQkJaWYgKGhkbGMtPmJpdF9zaGlmdCA9PSAwKSB7CisJCQkJaGRsYy0+c2hpZnRfcmVnID0gMHg3ZTsKKwkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9DTE9TSU5HX0ZMQUc7CisJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEhETENfU0VORF9DTE9TSU5HX0ZMQUc6CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQlpZiAoaGRsYy0+aGRsY19iaXRzMSA9PSA1KSB7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaGRsYy0+c2hpZnRfcmVnICYgMHgwMSkKKwkJCQloZGxjLT5jYmluKys7CisJCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7CisJCQloZGxjLT5iaXRfc2hpZnQtLTsKKwkJCWlmIChoZGxjLT5iaXRfc2hpZnQgPT0gMCkgeworCQkJCWhkbGMtPmZmdmFsdWUgPQorCQkJCQl4ZmFzdF9mbGFnX3ZhbHVlW2hkbGMtPmRhdGFfYml0c107CisJCQkJaWYgKGhkbGMtPmRjaGFubmVsKSB7CisJCQkJCWhkbGMtPmZmdmFsdWUgPSAweDdlOworCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9JRExFMTsKKwkJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gOC1oZGxjLT5kYXRhX2JpdHM7CisJCQkJCWlmIChoZGxjLT5iaXRfc2hpZnQgPT0gMCkKKwkJCQkJCWhkbGMtPnN0YXRlID0KKwkJCQkJCQlIRExDX1NFTkRfRkFTVF9JRExFOworCQkJCX0gZWxzZSB7CisJCQkJCWlmICghaGRsYy0+ZG9fYWRhcHQ1NikgeworCQkJCQkJaGRsYy0+c3RhdGUgPQorCQkJCQkJCUhETENfU0VORF9GQVNUX0ZMQUc7CisJCQkJCQloZGxjLT5kYXRhX3JlY2VpdmVkID0gMDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5ERkxBR19CMDsKKwkJCQkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAwOworCQkJCQl9CisJCQkJCS8qIEZpbmlzaGVkIHRoaXMgZnJhbWUsIHNlbmQgZmxhZ3MgKi8KKwkJCQkJaWYgKGRzaXplID4gMSkKKwkJCQkJCWRzaXplID0gMTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIRExDX1NFTkRfSURMRTE6CisJCQloZGxjLT5kb19jbG9zaW5nID0gMDsKKwkJCWhkbGMtPmNiaW4gPDw9IDE7CisJCQloZGxjLT5jYmluKys7CisJCQloZGxjLT5kYXRhX2JpdHMrKzsKKwkJCWhkbGMtPmJpdF9zaGlmdC0tOworCQkJaWYgKGhkbGMtPmJpdF9zaGlmdCA9PSAwKSB7CisJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfRkFTVF9JRExFOworCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIRExDX1NFTkRfRkFTVF9JRExFOgorCQkJaGRsYy0+ZG9fY2xvc2luZyA9IDA7CisJCQloZGxjLT5jYmluID0gMHhmZjsKKwkJCWhkbGMtPmRhdGFfYml0cyA9IDg7CisJCQlpZiAoaGRsYy0+Yml0X3NoaWZ0ID09IDgpIHsKKwkJCQloZGxjLT5jYmluID0gMHg3ZTsKKwkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9GSVJTVF9GTEFHOworCQkJfSBlbHNlIHsKKwkJCQkvKiB0aGUgY29kZSBpcyBmb3IgYml0cmV2ZXJzZSBzdHJlYW1zICovCisJCQkJaWYgKGhkbGMtPmRvX2JpdHJldmVyc2UgPT0gMCkKKwkJCQkJKmRzdCsrID0gYml0cmV2OChoZGxjLT5jYmluKTsKKwkJCQllbHNlCisJCQkJCSpkc3QrKyA9IGhkbGMtPmNiaW47CisJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gMDsKKwkJCQloZGxjLT5kYXRhX2JpdHMgPSAwOworCQkJCWxlbisrOworCQkJCWRzaXplID0gMDsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJaWYgKGhkbGMtPmRvX2FkYXB0NTYpIHsKKwkJCWlmIChoZGxjLT5kYXRhX2JpdHMgPT0gNykgeworCQkJCWhkbGMtPmNiaW4gPDw9IDE7CisJCQkJaGRsYy0+Y2JpbisrOworCQkJCWhkbGMtPmRhdGFfYml0cysrOworCQkJfQorCQl9CisJCWlmIChoZGxjLT5kYXRhX2JpdHMgPT0gOCkgeworCQkJLyogdGhlIGNvZGUgaXMgZm9yIGJpdHJldmVyc2Ugc3RyZWFtcyAqLworCQkJaWYgKGhkbGMtPmRvX2JpdHJldmVyc2UgPT0gMCkKKwkJCQkqZHN0KysgPSBiaXRyZXY4KGhkbGMtPmNiaW4pOworCQkJZWxzZQorCQkJCSpkc3QrKyA9IGhkbGMtPmNiaW47CisJCQloZGxjLT5kYXRhX2JpdHMgPSAwOworCQkJbGVuKys7CisJCQlkc2l6ZS0tOworCQl9CisJfQorCSpjb3VudCAtPSBzbGVuOworCisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0woaXNkbmhkbGNfZW5jb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9od2NoYW5uZWwuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9od2NoYW5uZWwuYwppbmRleCAwNDgxYTBjLi5lODA0OWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vaHdjaGFubmVsLmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL2h3Y2hhbm5lbC5jCkBAIC0xMTQsMTMgKzExNCwxNCBAQAogfQogRVhQT1JUX1NZTUJPTChtSVNETl9mcmVlZGNoYW5uZWwpOwogCi1pbnQKLW1JU0ROX2ZyZWViY2hhbm5lbChzdHJ1Y3QgYmNoYW5uZWwgKmNoKQordm9pZAorbUlTRE5fY2xlYXJfYmNoYW5uZWwoc3RydWN0IGJjaGFubmVsICpjaCkKIHsKIAlpZiAoY2gtPnR4X3NrYikgewogCQlkZXZfa2ZyZWVfc2tiKGNoLT50eF9za2IpOwogCQljaC0+dHhfc2tiID0gTlVMTDsKIAl9CisJY2gtPnR4X2lkeCA9IDA7CiAJaWYgKGNoLT5yeF9za2IpIHsKIAkJZGV2X2tmcmVlX3NrYihjaC0+cnhfc2tiKTsKIAkJY2gtPnJ4X3NrYiA9IE5VTEw7CkBAIC0xMjksNiArMTMwLDE2IEBACiAJCWRldl9rZnJlZV9za2IoY2gtPm5leHRfc2tiKTsKIAkJY2gtPm5leHRfc2tiID0gTlVMTDsKIAl9CisJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19UWF9CVVNZLCAmY2gtPkZsYWdzKTsKKwl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RYX05FWFQsICZjaC0+RmxhZ3MpOworCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQUNUSVZFLCAmY2gtPkZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0wobUlTRE5fY2xlYXJfYmNoYW5uZWwpOworCitpbnQKK21JU0ROX2ZyZWViY2hhbm5lbChzdHJ1Y3QgYmNoYW5uZWwgKmNoKQoreworCW1JU0ROX2NsZWFyX2JjaGFubmVsKGNoKTsKIAlza2JfcXVldWVfcHVyZ2UoJmNoLT5ycXVldWUpOwogCWNoLT5yY291bnQgPSAwOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vbGF5ZXIyLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbGF5ZXIyLmMKaW5kZXggOWMyNTg5ZS4uZTE3ZjAwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2xheWVyMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9sYXllcjIuYwpAQCAtMTgzMiw4ICsxODMyLDYgQEAKIAl7U1RfTDJfOCwgRVZfTDFfREVBQ1RJVkFURSwgbDJfcGVyc2lzdGFudF9kYX0sCiB9OwogCi0jZGVmaW5lIEwyX0ZOX0NPVU5UIChzaXplb2YoTDJGbkxpc3QpL3NpemVvZihzdHJ1Y3QgRnNtTm9kZSkpCi0KIHN0YXRpYyBpbnQKIHBoX2RhdGFfaW5kaWNhdGlvbihzdHJ1Y3QgbGF5ZXIyICpsMiwgc3RydWN0IG1JU0ROaGVhZCAqaGgsIHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19hc2ljLmMgYi9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19hc2ljLmMKaW5kZXggYTBmNjgzOC4uNTg4YTViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fYXNpYy5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX2FzaWMuYwpAQCAtMjk0LDEwICsyOTQsMTEgQEAKIAlpbnQgaSA9IDAsIGogPSAwOwogCiAJZm9yICg7OykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZkZXYtPmludGVycnVwdFtqXTsKKwkJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAkJaWYgKGogPj0gTUFDSU9fREVWX0NPVU5UX0lSUVMpCiAJCQlicmVhazsKKwkJcmVzID0gJmRldi0+aW50ZXJydXB0W2pdOwogCQlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgaSsrKTsKIAkJaWYgKGlycSA9PSBOT19JUlEpCiAJCQlicmVhazsKQEAgLTMyMSw5ICszMjIsMTAgQEAKIAlpbnQgaW5kZXg7CiAKIAlmb3IgKGluZGV4ID0gMDsgb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgaW5kZXgsICZyKSA9PSAwOyBpbmRleCsrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmRldi0+cmVzb3VyY2VbaW5kZXhdOworCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAkJaWYgKGluZGV4ID49IE1BQ0lPX0RFVl9DT1VOVF9SRVNPVVJDRVMpCiAJCQlicmVhazsKKwkJcmVzID0gJmRldi0+cmVzb3VyY2VbaW5kZXhdOwogCQkqcmVzID0gcjsKIAkJcmVzLT5uYW1lID0gZGV2X25hbWUoJmRldi0+b2ZkZXYuZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jCmluZGV4IDQwMDIzMzEuLjhiOTM2NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMKQEAgLTIzOSw4ICsyMzksOCBAQAogCSAqIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUgKE9TWCBkb2Vzbid0KS4uLgogCSAqLwogCWlmKCB4Lm92ZXJoZWF0X3RlbXAgPT0gKDgwIDw8IDgpICkgewotCQl4Lm92ZXJoZWF0X3RlbXAgPSA2NSA8PCA4OwotCQl4Lm92ZXJoZWF0X2h5c3QgPSA2MCA8PCA4OworCQl4Lm92ZXJoZWF0X3RlbXAgPSA3NSA8PCA4OworCQl4Lm92ZXJoZWF0X2h5c3QgPSA3MCA8PCA4OwogCQl3cml0ZV9yZWcoIHgudGhlcm1vc3RhdCwgMiwgeC5vdmVyaGVhdF9oeXN0LCAyICk7CiAJCXdyaXRlX3JlZyggeC50aGVybW9zdGF0LCAzLCB4Lm92ZXJoZWF0X3RlbXAsIDIgKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLWJhc2UuYyBiL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS1iYXNlLmMKaW5kZXggNmUxODZiMS4uNjUyYmQzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLWJhc2UuYworKysgYi9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jCkBAIC01ODIsNyArNTgyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBTVEFUVVNUWVBFX1RBQkxFOgogCQlzeiA9IDA7Ci0JCXRhYmxlX2FyZ3MgPSBzdHJzdHIobGMtPnVzcl9hcmd2X3N0ciwgIiAiKTsKKwkJdGFibGVfYXJncyA9IHN0cmNocihsYy0+dXNyX2FyZ3Zfc3RyLCAnICcpOwogCQlCVUdfT04oIXRhYmxlX2FyZ3MpOyAvKiBUaGVyZSB3aWxsIGFsd2F5cyBiZSBhICcgJyAqLwogCQl0YWJsZV9hcmdzKys7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tbXBhdGguYyBiL2RyaXZlcnMvbWQvZG0tbXBhdGguYwppbmRleCA2ZjBkOTBkLi4zMmQwYjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLW1wYXRoLmMKKysrIGIvZHJpdmVycy9tZC9kbS1tcGF0aC5jCkBAIC02NCw2ICs2NCw3IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCiAJY29uc3QgY2hhciAqaHdfaGFuZGxlcl9uYW1lOworCWNoYXIgKmh3X2hhbmRsZXJfcGFyYW1zOwogCXVuc2lnbmVkIG5yX3ByaW9yaXR5X2dyb3VwczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHByaW9yaXR5X2dyb3VwczsKIAl1bnNpZ25lZCBwZ19pbml0X3JlcXVpcmVkOwkvKiBwZ19pbml0IG5lZWRzIGNhbGxpbmc/ICovCkBAIC0yMTksNiArMjIwLDcgQEAKIAl9CiAKIAlrZnJlZShtLT5od19oYW5kbGVyX25hbWUpOworCWtmcmVlKG0tPmh3X2hhbmRsZXJfcGFyYW1zKTsKIAltZW1wb29sX2Rlc3Ryb3kobS0+bXBpb19wb29sKTsKIAlrZnJlZShtKTsKIH0KQEAgLTYxNSw2ICs2MTcsMTcgQEAKIAkJCWRtX3B1dF9kZXZpY2UodGksIHAtPnBhdGguZGV2KTsKIAkJCWdvdG8gYmFkOwogCQl9CisKKwkJaWYgKG0tPmh3X2hhbmRsZXJfcGFyYW1zKSB7CisJCQlyID0gc2NzaV9kaF9zZXRfcGFyYW1zKHEsIG0tPmh3X2hhbmRsZXJfcGFyYW1zKTsKKwkJCWlmIChyIDwgMCkgeworCQkJCXRpLT5lcnJvciA9ICJ1bmFibGUgdG8gc2V0IGhhcmR3YXJlICIKKwkJCQkJCQkiaGFuZGxlciBwYXJhbWV0ZXJzIjsKKwkJCQlzY3NpX2RoX2RldGFjaChxKTsKKwkJCQlkbV9wdXRfZGV2aWNlKHRpLCBwLT5wYXRoLmRldik7CisJCQkJZ290byBiYWQ7CisJCQl9CisJCX0KIAl9CiAKIAlyID0gcHMtPnR5cGUtPmFkZF9wYXRoKHBzLCAmcC0+cGF0aCwgYXMtPmFyZ2MsIGFzLT5hcmd2LCAmdGktPmVycm9yKTsKQEAgLTcwNSw2ICs3MTgsNyBAQAogc3RhdGljIGludCBwYXJzZV9od19oYW5kbGVyKHN0cnVjdCBhcmdfc2V0ICphcywgc3RydWN0IG11bHRpcGF0aCAqbSkKIHsKIAl1bnNpZ25lZCBod19hcmdjOworCWludCByZXQ7CiAJc3RydWN0IGRtX3RhcmdldCAqdGkgPSBtLT50aTsKIAogCXN0YXRpYyBzdHJ1Y3QgcGFyYW0gX3BhcmFtc1tdID0gewpAQCAtNzI2LDE3ICs3NDAsMzMgQEAKIAlyZXF1ZXN0X21vZHVsZSgic2NzaV9kaF8lcyIsIG0tPmh3X2hhbmRsZXJfbmFtZSk7CiAJaWYgKHNjc2lfZGhfaGFuZGxlcl9leGlzdChtLT5od19oYW5kbGVyX25hbWUpID09IDApIHsKIAkJdGktPmVycm9yID0gInVua25vd24gaGFyZHdhcmUgaGFuZGxlciB0eXBlIjsKLQkJa2ZyZWUobS0+aHdfaGFuZGxlcl9uYW1lKTsKLQkJbS0+aHdfaGFuZGxlcl9uYW1lID0gTlVMTDsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbDsKIAl9CiAKLQlpZiAoaHdfYXJnYyA+IDEpCi0JCURNV0FSTigiSWdub3JpbmcgdXNlci1zcGVjaWZpZWQgYXJndW1lbnRzIGZvciAiCi0JCSAgICAgICAiaGFyZHdhcmUgaGFuZGxlciBcIiVzXCIiLCBtLT5od19oYW5kbGVyX25hbWUpOworCWlmIChod19hcmdjID4gMSkgeworCQljaGFyICpwOworCQlpbnQgaSwgaiwgbGVuID0gNDsKKworCQlmb3IgKGkgPSAwOyBpIDw9IGh3X2FyZ2MgLSAyOyBpKyspCisJCQlsZW4gKz0gc3RybGVuKGFzLT5hcmd2W2ldKSArIDE7CisJCXAgPSBtLT5od19oYW5kbGVyX3BhcmFtcyA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwKSB7CisJCQl0aS0+ZXJyb3IgPSAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIjsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJaiA9IHNwcmludGYocCwgIiVkIiwgaHdfYXJnYyAtIDEpOworCQlmb3IgKGkgPSAwLCBwKz1qKzE7IGkgPD0gaHdfYXJnYyAtIDI7IGkrKywgcCs9aisxKQorCQkJaiA9IHNwcmludGYocCwgIiVzIiwgYXMtPmFyZ3ZbaV0pOworCX0KIAljb25zdW1lKGFzLCBod19hcmdjIC0gMSk7CiAKIAlyZXR1cm4gMDsKK2ZhaWw6CisJa2ZyZWUobS0+aHdfaGFuZGxlcl9uYW1lKTsKKwltLT5od19oYW5kbGVyX25hbWUgPSBOVUxMOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcGFyc2VfZmVhdHVyZXMoc3RydWN0IGFyZ19zZXQgKmFzLCBzdHJ1Y3QgbXVsdGlwYXRoICptKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCmluZGV4IDMzZjE3OWUuLmNjOWRjNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYworKysgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKQEAgLTExMjksNyArMTEyOSw3IEBACiAJaWYgKGVycm9yID09IC1FT1BOT1RTVVBQKQogCQlnb3RvIG91dDsKIAotCWlmICgoZXJyb3IgPT0gLUVXT1VMREJMT0NLKSAmJiBiaW9fcndfYWhlYWQoYmlvKSkKKwlpZiAoKGVycm9yID09IC1FV09VTERCTE9DSykgJiYgYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQUhFQUQpKQogCQlnb3RvIG91dDsKIAogCWlmICh1bmxpa2VseShlcnJvcikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMgYi9kcml2ZXJzL21kL2RtLXN0cmlwZS5jCmluZGV4IDNlNTYzZDIuLmUwZWZjMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMKKysrIGIvZHJpdmVycy9tZC9kbS1zdHJpcGUuYwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJaWYgKCFlcnJvcikKIAkJcmV0dXJuIDA7IC8qIEkvTyBjb21wbGV0ZSAqLwogCi0JaWYgKChlcnJvciA9PSAtRVdPVUxEQkxPQ0spICYmIGJpb19yd19haGVhZChiaW8pKQorCWlmICgoZXJyb3IgPT0gLUVXT1VMREJMT0NLKSAmJiBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19BSEVBRCkpCiAJCXJldHVybiBlcnJvcjsKIAogCWlmIChlcnJvciA9PSAtRU9QTk9UU1VQUCkKQEAgLTMzNiw3ICszMzYsNyBAQAogCXVuc2lnbmVkIGNodW5rX3NpemUgPSAoc2MtPmNodW5rX21hc2sgKyAxKSA8PCA5OwogCiAJYmxrX2xpbWl0c19pb19taW4obGltaXRzLCBjaHVua19zaXplKTsKLQlsaW1pdHMtPmlvX29wdCA9IGNodW5rX3NpemUgKiBzYy0+c3RyaXBlczsKKwlibGtfbGltaXRzX2lvX29wdChsaW1pdHMsIGNodW5rX3NpemUgKiBzYy0+c3RyaXBlcyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdGFyZ2V0X3R5cGUgc3RyaXBlX3RhcmdldCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCBiNDg0NWIxLi5lZWUyOGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkvKgogCSAqIEEgbGlzdCBvZiBpb3MgdGhhdCBhcnJpdmVkIHdoaWxlIHdlIHdlcmUgc3VzcGVuZGVkLgogCSAqLwotCWF0b21pY190IHBlbmRpbmc7CisJYXRvbWljX3QgcGVuZGluZ1syXTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXN0cnVjdCBiaW9fbGlzdCBkZWZlcnJlZDsKQEAgLTQ1MywxMyArNDUzLDE0IEBACiB7CiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gaW8tPm1kOwogCWludCBjcHU7CisJaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGlvLT5iaW8pOwogCiAJaW8tPnN0YXJ0X3RpbWUgPSBqaWZmaWVzOwogCiAJY3B1ID0gcGFydF9zdGF0X2xvY2soKTsKIAlwYXJ0X3JvdW5kX3N0YXRzKGNwdSwgJmRtX2Rpc2sobWQpLT5wYXJ0MCk7CiAJcGFydF9zdGF0X3VubG9jaygpOwotCWRtX2Rpc2sobWQpLT5wYXJ0MC5pbl9mbGlnaHQgPSBhdG9taWNfaW5jX3JldHVybigmbWQtPnBlbmRpbmcpOworCWRtX2Rpc2sobWQpLT5wYXJ0MC5pbl9mbGlnaHRbcnddID0gYXRvbWljX2luY19yZXR1cm4oJm1kLT5wZW5kaW5nW3J3XSk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuZF9pb19hY2N0KHN0cnVjdCBkbV9pbyAqaW8pCkBAIC00NzksOCArNDgwLDkgQEAKIAkgKiBBZnRlciB0aGlzIGlzIGRlY3JlbWVudGVkIHRoZSBiaW8gbXVzdCBub3QgYmUgdG91Y2hlZCBpZiBpdCBpcwogCSAqIGEgYmFycmllci4KIAkgKi8KLQlkbV9kaXNrKG1kKS0+cGFydDAuaW5fZmxpZ2h0ID0gcGVuZGluZyA9Ci0JCWF0b21pY19kZWNfcmV0dXJuKCZtZC0+cGVuZGluZyk7CisJZG1fZGlzayhtZCktPnBhcnQwLmluX2ZsaWdodFtyd10gPSBwZW5kaW5nID0KKwkJYXRvbWljX2RlY19yZXR1cm4oJm1kLT5wZW5kaW5nW3J3XSk7CisJcGVuZGluZyArPSBhdG9taWNfcmVhZCgmbWQtPnBlbmRpbmdbcndeMHgxXSk7CiAKIAkvKiBudWRnZSBhbnlvbmUgd2FpdGluZyBvbiBzdXNwZW5kIHF1ZXVlICovCiAJaWYgKCFwZW5kaW5nKQpAQCAtNTg2LDcgKzU4OCw3IEBACiAJCQkgKi8KIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZtZC0+ZGVmZXJyZWRfbG9jaywgZmxhZ3MpOwogCQkJaWYgKF9fbm9mbHVzaF9zdXNwZW5kaW5nKG1kKSkgewotCQkJCWlmICghYmlvX2JhcnJpZXIoaW8tPmJpbykpCisJCQkJaWYgKCFiaW9fcndfZmxhZ2dlZChpby0+YmlvLCBCSU9fUldfQkFSUklFUikpCiAJCQkJCWJpb19saXN0X2FkZF9oZWFkKCZtZC0+ZGVmZXJyZWQsCiAJCQkJCQkJICBpby0+YmlvKTsKIAkJCX0gZWxzZQpAQCAtNTk4LDcgKzYwMCw3IEBACiAJCWlvX2Vycm9yID0gaW8tPmVycm9yOwogCQliaW8gPSBpby0+YmlvOwogCi0JCWlmIChiaW9fYmFycmllcihiaW8pKSB7CisJCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkgewogCQkJLyoKIAkJCSAqIFRoZXJlIGNhbiBiZSBqdXN0IG9uZSBiYXJyaWVyIHJlcXVlc3Qgc28gd2UgdXNlCiAJCQkgKiBhIHBlci1kZXZpY2UgdmFyaWFibGUgZm9yIGVycm9yIHJlcG9ydGluZy4KQEAgLTEyMDksNyArMTIxMSw3IEBACiAKIAljaS5tYXAgPSBkbV9nZXRfdGFibGUobWQpOwogCWlmICh1bmxpa2VseSghY2kubWFwKSkgewotCQlpZiAoIWJpb19iYXJyaWVyKGJpbykpCisJCWlmICghYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpCiAJCQliaW9faW9fZXJyb3IoYmlvKTsKIAkJZWxzZQogCQkJaWYgKCFtZC0+YmFycmllcl9lcnJvcikKQEAgLTEzMjEsNyArMTMyMyw3IEBACiAJICogd2UgaGF2ZSB0byBxdWV1ZSB0aGlzIGlvIGZvciBsYXRlci4KIAkgKi8KIAlpZiAodW5saWtlbHkodGVzdF9iaXQoRE1GX1FVRVVFX0lPX1RPX1RIUkVBRCwgJm1kLT5mbGFncykpIHx8Ci0JICAgIHVubGlrZWx5KGJpb19iYXJyaWVyKGJpbykpKSB7CisJICAgIHVubGlrZWx5KGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKSkgewogCQl1cF9yZWFkKCZtZC0+aW9fbG9jayk7CiAKIAkJaWYgKHVubGlrZWx5KHRlc3RfYml0KERNRl9CTE9DS19JT19GT1JfU1VTUEVORCwgJm1kLT5mbGFncykpICYmCkBAIC0xMzQ0LDcgKzEzNDYsNyBAQAogewogCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCA9IHEtPnF1ZXVlZGF0YTsKIAotCWlmICh1bmxpa2VseShiaW9fYmFycmllcihiaW8pKSkgeworCWlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkpIHsKIAkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNzg1LDcgKzE3ODcsOCBAQAogCWlmICghbWQtPmRpc2spCiAJCWdvdG8gYmFkX2Rpc2s7CiAKLQlhdG9taWNfc2V0KCZtZC0+cGVuZGluZywgMCk7CisJYXRvbWljX3NldCgmbWQtPnBlbmRpbmdbMF0sIDApOworCWF0b21pY19zZXQoJm1kLT5wZW5kaW5nWzFdLCAwKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZC0+d2FpdCk7CiAJSU5JVF9XT1JLKCZtZC0+d29yaywgZG1fd3Ffd29yayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbWQtPmV2ZW50cSk7CkBAIC0yMDg4LDcgKzIwOTEsOCBAQAogCQkJCWJyZWFrOwogCQkJfQogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JCX0gZWxzZSBpZiAoIWF0b21pY19yZWFkKCZtZC0+cGVuZGluZykpCisJCX0gZWxzZSBpZiAoIWF0b21pY19yZWFkKCZtZC0+cGVuZGluZ1swXSkgJiYKKwkJCQkJIWF0b21pY19yZWFkKCZtZC0+cGVuZGluZ1sxXSkpCiAJCQlicmVhazsKIAogCQlpZiAoaW50ZXJydXB0aWJsZSA9PSBUQVNLX0lOVEVSUlVQVElCTEUgJiYKQEAgLTIxNjQsNyArMjE2OCw3IEBACiAJCWlmIChkbV9yZXF1ZXN0X2Jhc2VkKG1kKSkKIAkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGMpOwogCQllbHNlIHsKLQkJCWlmIChiaW9fYmFycmllcihjKSkKKwkJCWlmIChiaW9fcndfZmxhZ2dlZChjLCBCSU9fUldfQkFSUklFUikpCiAJCQkJcHJvY2Vzc19iYXJyaWVyKG1kLCBjKTsKIAkJCWVsc2UKIAkJCQlfX3NwbGl0X2FuZF9wcm9jZXNzX2JpbyhtZCwgYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2xpbmVhci5jIGIvZHJpdmVycy9tZC9saW5lYXIuYwppbmRleCA1ZmUzOWMyLi5lYTQ4NDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2xpbmVhci5jCisrKyBiL2RyaXZlcnMvbWQvbGluZWFyLmMKQEAgLTI4OCw3ICsyODgsNyBAQAogCXNlY3Rvcl90IHN0YXJ0X3NlY3RvcjsKIAlpbnQgY3B1OwogCi0JaWYgKHVubGlrZWx5KGJpb19iYXJyaWVyKGJpbykpKSB7CisJaWYgKHVubGlrZWx5KGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKSkgewogCQliaW9fZW5kaW8oYmlvLCAtRU9QTk9UU1VQUCk7CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCmluZGV4IDcxNDA5MDkuLjg5ZTc2ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwpAQCAtOTAsNyArOTAsNyBAQAogCiAJaWYgKHVwdG9kYXRlKQogCQltdWx0aXBhdGhfZW5kX2JoX2lvKG1wX2JoLCAwKTsKLQllbHNlIGlmICghYmlvX3J3X2FoZWFkKGJpbykpIHsKKwllbHNlIGlmICghYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQUhFQUQpKSB7CiAJCS8qCiAJCSAqIG9vcHMsIElPIGVycm9yOgogCQkgKi8KQEAgLTE0NCw3ICsxNDQsNyBAQAogCWNvbnN0IGludCBydyA9IGJpb19kYXRhX2RpcihiaW8pOwogCWludCBjcHU7CiAKLQlpZiAodW5saWtlbHkoYmlvX2JhcnJpZXIoYmlvKSkpIHsKKwlpZiAodW5saWtlbHkoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpKSB7CiAJCWJpb19lbmRpbyhiaW8sIC1FT1BOT1RTVVBQKTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMC5jIGIvZHJpdmVycy9tZC9yYWlkMC5jCmluZGV4IDg5OGUyYmQuLmY4NDVlZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDAuYworKysgYi9kcml2ZXJzL21kL3JhaWQwLmMKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCWNvbnN0IGludCBydyA9IGJpb19kYXRhX2RpcihiaW8pOwogCWludCBjcHU7CiAKLQlpZiAodW5saWtlbHkoYmlvX2JhcnJpZXIoYmlvKSkpIHsKKwlpZiAodW5saWtlbHkoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpKSB7CiAJCWJpb19lbmRpbyhiaW8sIC1FT1BOT1RTVVBQKTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IDg3MjZmZDcuLmZmN2VkMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTc4Miw4ICs3ODIsOSBAQAogCXN0cnVjdCBiaW9fbGlzdCBibDsKIAlzdHJ1Y3QgcGFnZSAqKmJlaGluZF9wYWdlcyA9IE5VTEw7CiAJY29uc3QgaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGJpbyk7Ci0JY29uc3QgaW50IGRvX3N5bmMgPSBiaW9fc3luYyhiaW8pOwotCWludCBjcHUsIGRvX2JhcnJpZXJzOworCWNvbnN0IGJvb2wgZG9fc3luYyA9IGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTyk7CisJaW50IGNwdTsKKwlib29sIGRvX2JhcnJpZXJzOwogCW1ka19yZGV2X3QgKmJsb2NrZWRfcmRldjsKIAogCS8qCkBAIC03OTcsNyArNzk4LDggQEAKIAogCW1kX3dyaXRlX3N0YXJ0KG1kZGV2LCBiaW8pOyAvKiB3YWl0IG9uIHN1cGVyYmxvY2sgdXBkYXRlIGVhcmx5ICovCiAKLQlpZiAodW5saWtlbHkoIW1kZGV2LT5iYXJyaWVyc193b3JrICYmIGJpb19iYXJyaWVyKGJpbykpKSB7CisJaWYgKHVubGlrZWx5KCFtZGRldi0+YmFycmllcnNfd29yayAmJgorCQkgICAgIGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKSkgewogCQlpZiAocncgPT0gV1JJVEUpCiAJCQltZF93cml0ZV9lbmQobWRkZXYpOwogCQliaW9fZW5kaW8oYmlvLCAtRU9QTk9UU1VQUCk7CkBAIC05MjUsNyArOTI3LDcgQEAKIAlhdG9taWNfc2V0KCZyMV9iaW8tPnJlbWFpbmluZywgMCk7CiAJYXRvbWljX3NldCgmcjFfYmlvLT5iZWhpbmRfcmVtYWluaW5nLCAwKTsKIAotCWRvX2JhcnJpZXJzID0gYmlvX2JhcnJpZXIoYmlvKTsKKwlkb19iYXJyaWVycyA9IGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpOwogCWlmIChkb19iYXJyaWVycykKIAkJc2V0X2JpdChSMUJJT19CYXJyaWVyLCAmcjFfYmlvLT5zdGF0ZSk7CiAKQEAgLTE2MDAsNyArMTYwMiw3IEBACiAJCQkgKiBXZSBhbHJlYWR5IGhhdmUgYSBucl9wZW5kaW5nIHJlZmVyZW5jZSBvbiB0aGVzZSByZGV2cy4KIAkJCSAqLwogCQkJaW50IGk7Ci0JCQljb25zdCBpbnQgZG9fc3luYyA9IGJpb19zeW5jKHIxX2Jpby0+bWFzdGVyX2Jpbyk7CisJCQljb25zdCBib29sIGRvX3N5bmMgPSBiaW9fcndfZmxhZ2dlZChyMV9iaW8tPm1hc3Rlcl9iaW8sIEJJT19SV19TWU5DSU8pOwogCQkJY2xlYXJfYml0KFIxQklPX0JhcnJpZXJSZXRyeSwgJnIxX2Jpby0+c3RhdGUpOwogCQkJY2xlYXJfYml0KFIxQklPX0JhcnJpZXIsICZyMV9iaW8tPnN0YXRlKTsKIAkJCWZvciAoaT0wOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKQpAQCAtMTY1NCw3ICsxNjU2LDcgQEAKIAkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyMV9iaW8tPnNlY3Rvcik7CiAJCQkJcmFpZF9lbmRfYmlvX2lvKHIxX2Jpbyk7CiAJCQl9IGVsc2UgewotCQkJCWNvbnN0IGludCBkb19zeW5jID0gYmlvX3N5bmMocjFfYmlvLT5tYXN0ZXJfYmlvKTsKKwkJCQljb25zdCBib29sIGRvX3N5bmMgPSBiaW9fcndfZmxhZ2dlZChyMV9iaW8tPm1hc3Rlcl9iaW8sIEJJT19SV19TWU5DSU8pOwogCQkJCXIxX2Jpby0+Ymlvc1tyMV9iaW8tPnJlYWRfZGlza10gPQogCQkJCQltZGRldi0+cm8gPyBJT19CTE9DS0VEIDogTlVMTDsKIAkJCQlyMV9iaW8tPnJlYWRfZGlzayA9IGRpc2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCAzZDkwMjBjLi5kMGEyMTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTc5NiwxMiArNzk2LDEyIEBACiAJaW50IGk7CiAJaW50IGNodW5rX3NlY3RzID0gY29uZi0+Y2h1bmtfbWFzayArIDE7CiAJY29uc3QgaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGJpbyk7Ci0JY29uc3QgaW50IGRvX3N5bmMgPSBiaW9fc3luYyhiaW8pOworCWNvbnN0IGJvb2wgZG9fc3luYyA9IGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTyk7CiAJc3RydWN0IGJpb19saXN0IGJsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbWRrX3JkZXZfdCAqYmxvY2tlZF9yZGV2OwogCi0JaWYgKHVubGlrZWx5KGJpb19iYXJyaWVyKGJpbykpKSB7CisJaWYgKHVubGlrZWx5KGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKSkgewogCQliaW9fZW5kaW8oYmlvLCAtRU9QTk9UU1VQUCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTE2MTAsNyArMTYxMCw3IEBACiAJCQkJcmFpZF9lbmRfYmlvX2lvKHIxMF9iaW8pOwogCQkJCWJpb19wdXQoYmlvKTsKIAkJCX0gZWxzZSB7Ci0JCQkJY29uc3QgaW50IGRvX3N5bmMgPSBiaW9fc3luYyhyMTBfYmlvLT5tYXN0ZXJfYmlvKTsKKwkJCQljb25zdCBib29sIGRvX3N5bmMgPSBiaW9fcndfZmxhZ2dlZChyMTBfYmlvLT5tYXN0ZXJfYmlvLCBCSU9fUldfU1lOQ0lPKTsKIAkJCQliaW9fcHV0KGJpbyk7CiAJCQkJcmRldiA9IGNvbmYtPm1pcnJvcnNbbWlycm9yXS5yZGV2OwogCQkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggYjhhMmM1ZC4uODI2ZWIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtMzYwNiw3ICszNjA2LDcgQEAKIAljb25zdCBpbnQgcncgPSBiaW9fZGF0YV9kaXIoYmkpOwogCWludCBjcHUsIHJlbWFpbmluZzsKIAotCWlmICh1bmxpa2VseShiaW9fYmFycmllcihiaSkpKSB7CisJaWYgKHVubGlrZWx5KGJpb19yd19mbGFnZ2VkKGJpLCBCSU9fUldfQkFSUklFUikpKSB7CiAJCWJpb19lbmRpbyhiaSwgLUVPUE5PVFNVUFApOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1mdW5jdGlvbnMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWZ1bmN0aW9ucy5jCmluZGV4IDE2NzkyYTYuLjY1NTQ3NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWZ1bmN0aW9ucy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWZ1bmN0aW9ucy5jCkBAIC01OCwxMyArNTgsMjQgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHZvaWQgaXJfaW5wdXRfaW5pdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIsCi0JCSAgIGludCBpcl90eXBlLCBJUl9LRVlUQUJfVFlQRSAqaXJfY29kZXMpCisJCSAgIGludCBpcl90eXBlLCBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzKQogewogCWludCBpOwogCiAJaXItPmlyX3R5cGUgPSBpcl90eXBlOworCisJbWVtc2V0KGlyLT5pcl9jb2Rlcywgc2l6ZW9mKGlyLT5pcl9jb2RlcyksIDApOworCisJLyoKKwkgKiBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIHVzZSB0aGUgbmV3IElSIHRhYmxlcworCSAqIHdpdGggdGhlIG9sZCBhcHByb2FjaC4gTGF0ZXIgcGF0Y2hlcyB3aWxsIHJlcGxhY2UgdGhpcyB0byBhCisJICogcHJvcGVyIG1ldGhvZAorCSAqLworCiAJaWYgKGlyX2NvZGVzKQotCQltZW1jcHkoaXItPmlyX2NvZGVzLCBpcl9jb2Rlcywgc2l6ZW9mKGlyLT5pcl9jb2RlcykpOworCQlmb3IgKGkgPSAwOyBpIDwgaXJfY29kZXMtPnNpemU7IGkrKykKKwkJCWlmIChpcl9jb2Rlcy0+c2NhbltpXS5zY2FuY29kZSA8IElSX0tFWVRBQl9TSVpFKQorCQkJCWlyLT5pcl9jb2Rlc1tpcl9jb2Rlcy0+c2NhbltpXS5zY2FuY29kZV0gPSBpcl9jb2Rlcy0+c2NhbltpXS5rZXljb2RlOwogCiAJZGV2LT5rZXljb2RlICAgICA9IGlyLT5pcl9jb2RlczsKIAlkZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKElSX0tFWVRBQl9UWVBFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYwppbmRleCA0MjE2MzI4Li5mNjc5MDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jCkBAIC0xLDggKzEsNiBAQAogLyoKLQotCi0gICAgS2V5dGFibGVzIGZvciBzdXBwb3J0ZWQgcmVtb3RlIGNvbnRyb2xzLiBUaGlzIGZpbGUgaXMgcGFydCBvZgotICAgIHZpZGVvNGxpbnV4LgorICAgIEtleXRhYmxlcyBmb3Igc3VwcG9ydGVkIHJlbW90ZSBjb250cm9scywgdXNlZCBvbiBkcml2ZXJzL21lZGlhCisgICAgZGV2aWNlcy4KIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE3LDcgKzE1LDEzIEBACiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KIAorLyoKKyAqIE5PVElDRSBGT1IgREVWRUxPUEVSUzoKKyAqICAgVGhlIElSIG1hcHBpbmdzIHNob3VsZCBiZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB3aGF0J3MKKyAqICAgc3BlY2lmaWVkIGF0OgorICogICAgICBodHRwOi8vbGludXh0di5vcmcvd2lraS9pbmRleC5waHAvUmVtb3RlX0NvbnRyb2xsZXJzCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIApAQCAtMjUsNTg5ICsyOSw2MjcgQEAKICNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KIAogLyogZW1wdHkga2V5dGFibGUsIGNhbiBiZSB1c2VkIGFzIHBsYWNlaG9sZGVyIGZvciBub3QteWV0IGNyZWF0ZWQga2V5dGFibGVzICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbXB0eVtJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAweDJhIF0gPSBLRVlfQ09GRkVFLAorc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19lbXB0eVtdID0geworCXsgMHgyYSwgS0VZX0NPRkZFRSB9LAogfTsKIAotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZW1wdHkpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2VtcHR5X3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfZW1wdHksCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2VtcHR5KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbXB0eV90YWJsZSk7CiAKIC8qIE1pY2hhbCBNYWpjaHJvd2ljeiA8bW1hamNocm93aWN6QGdtYWlsLmNvbT4gKi8KLUlSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3Byb3RldXNfMjMwOVtJUl9LRVlUQUJfU0laRV0gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3Byb3RldXNfMjMwOVtdID0gewogCS8qIG51bWVyaWMgKi8KLQlbIDB4MDAgXSA9IEtFWV8wLAotCVsgMHgwMSBdID0gS0VZXzEsCi0JWyAweDAyIF0gPSBLRVlfMiwKLQlbIDB4MDMgXSA9IEtFWV8zLAotCVsgMHgwNCBdID0gS0VZXzQsCi0JWyAweDA1IF0gPSBLRVlfNSwKLQlbIDB4MDYgXSA9IEtFWV82LAotCVsgMHgwNyBdID0gS0VZXzcsCi0JWyAweDA4IF0gPSBLRVlfOCwKLQlbIDB4MDkgXSA9IEtFWV85LAorCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKIAotCVsgMHg1YyBdID0gS0VZX1BPV0VSLCAgICAgLyogcG93ZXIgICAgICAgKi8KLQlbIDB4MjAgXSA9IEtFWV9GLCAgICAgICAgIC8qIGZ1bGwgc2NyZWVuICovCi0JWyAweDBmIF0gPSBLRVlfQkFDS1NQQUNFLCAvKiByZWNhbGwgICAgICAqLwotCVsgMHgxYiBdID0gS0VZX0VOVEVSLCAgICAgLyogbXV0ZSAgICAgICAgKi8KLQlbIDB4NDEgXSA9IEtFWV9SRUNPUkQsICAgIC8qIHJlY29yZCAgICAgICovCi0JWyAweDQzIF0gPSBLRVlfU1RPUCwgICAgICAvKiBzdG9wICAgICAgICAqLwotCVsgMHgxNiBdID0gS0VZX1MsCi0JWyAweDFhIF0gPSBLRVlfUSwgICAgICAgICAvKiBvZmYgICAgICAgICAqLwotCVsgMHgyZSBdID0gS0VZX1JFRCwKLQlbIDB4MWYgXSA9IEtFWV9ET1dOLCAgICAgIC8qIGNoYW5uZWwgLSAgICovCi0JWyAweDFjIF0gPSBLRVlfVVAsICAgICAgICAvKiBjaGFubmVsICsgICAqLwotCVsgMHgxMCBdID0gS0VZX0xFRlQsICAgICAgLyogdm9sdW1lIC0gICAgKi8KLQlbIDB4MWUgXSA9IEtFWV9SSUdIVCwgICAgIC8qIHZvbHVtZSArICAgICovCi0JWyAweDE0IF0gPSBLRVlfRjEsCisJeyAweDVjLCBLRVlfUE9XRVIgfSwJCS8qIHBvd2VyICAgICAgICovCisJeyAweDIwLCBLRVlfWk9PTSB9LAkJLyogZnVsbCBzY3JlZW4gKi8KKwl7IDB4MGYsIEtFWV9CQUNLU1BBQ0UgfSwJLyogcmVjYWxsICAgICAgKi8KKwl7IDB4MWIsIEtFWV9FTlRFUiB9LAkJLyogbXV0ZSAgICAgICAgKi8KKwl7IDB4NDEsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZCAgICAgICovCisJeyAweDQzLCBLRVlfU1RPUCB9LAkJLyogc3RvcCAgICAgICAgKi8KKwl7IDB4MTYsIEtFWV9TIH0sCisJeyAweDFhLCBLRVlfUE9XRVIyIH0sCQkvKiBvZmYgICAgICAgICAqLworCXsgMHgyZSwgS0VZX1JFRCB9LAorCXsgMHgxZiwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwgLSAgICovCisJeyAweDFjLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgKyAgICovCisJeyAweDEwLCBLRVlfVk9MVU1FRE9XTiB9LAkvKiB2b2x1bWUgLSAgICAqLworCXsgMHgxZSwgS0VZX1ZPTFVNRVVQIH0sCQkvKiB2b2x1bWUgKyAgICAqLworCXsgMHgxNCwgS0VZX0YxIH0sCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19wcm90ZXVzXzIzMDkpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3Byb3RldXNfMjMwOV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3Byb3RldXNfMjMwOSwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcHJvdGV1c18yMzA5KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19wcm90ZXVzXzIzMDlfdGFibGUpOworCiAvKiBNYXR0IEplc3NvbiA8ZHZiQGplc3Nvbi5lY2xpcHNlLmNvLnVrICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFfZHZidFtJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAweDI4IF0gPSBLRVlfMCwgICAgICAgICAvLycwJyAvICdlbnRlcicKLQlbIDB4MjIgXSA9IEtFWV8xLCAgICAgICAgIC8vJzEnCi0JWyAweDEyIF0gPSBLRVlfMiwgICAgICAgICAvLycyJyAvICd1cCBhcnJvdycKLQlbIDB4MzIgXSA9IEtFWV8zLCAgICAgICAgIC8vJzMnCi0JWyAweDI0IF0gPSBLRVlfNCwgICAgICAgICAvLyc0JyAvICdsZWZ0IGFycm93JwotCVsgMHgxNCBdID0gS0VZXzUsICAgICAgICAgLy8nNScKLQlbIDB4MzQgXSA9IEtFWV82LCAgICAgICAgIC8vJzYnIC8gJ3JpZ2h0IGFycm93JwotCVsgMHgyNiBdID0gS0VZXzcsICAgICAgICAgLy8nNycKLQlbIDB4MTYgXSA9IEtFWV84LCAgICAgICAgIC8vJzgnIC8gJ2Rvd24gYXJyb3cnCi0JWyAweDM2IF0gPSBLRVlfOSwgICAgICAgICAvLyc5Jworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19hdmVybWVkaWFfZHZidFtdID0geworCXsgMHgyOCwgS0VZXzAgfSwJCS8qICcwJyAvICdlbnRlcicgKi8KKwl7IDB4MjIsIEtFWV8xIH0sCQkvKiAnMScgKi8KKwl7IDB4MTIsIEtFWV8yIH0sCQkvKiAnMicgLyAndXAgYXJyb3cnICovCisJeyAweDMyLCBLRVlfMyB9LAkJLyogJzMnICovCisJeyAweDI0LCBLRVlfNCB9LAkJLyogJzQnIC8gJ2xlZnQgYXJyb3cnICovCisJeyAweDE0LCBLRVlfNSB9LAkJLyogJzUnICovCisJeyAweDM0LCBLRVlfNiB9LAkJLyogJzYnIC8gJ3JpZ2h0IGFycm93JyAqLworCXsgMHgyNiwgS0VZXzcgfSwJCS8qICc3JyAqLworCXsgMHgxNiwgS0VZXzggfSwJCS8qICc4JyAvICdkb3duIGFycm93JyAqLworCXsgMHgzNiwgS0VZXzkgfSwJCS8qICc5JyAqLwogCi0JWyAweDIwIF0gPSBLRVlfTElTVCwgICAgICAgIC8vICdzb3VyY2UnCi0JWyAweDEwIF0gPSBLRVlfVEVYVCwgICAgICAgIC8vICd0ZWxldGV4dCcKLQlbIDB4MDAgXSA9IEtFWV9QT1dFUiwgICAgICAgLy8gJ3Bvd2VyJwotCVsgMHgwNCBdID0gS0VZX0FVRElPLCAgICAgICAvLyAnYXVkaW8nCi0JWyAweDA2IF0gPSBLRVlfWk9PTSwgICAgICAgIC8vICdmdWxsIHNjcmVlbicKLQlbIDB4MTggXSA9IEtFWV9WSURFTywgICAgICAgLy8gJ2Rpc3BsYXknCi0JWyAweDM4IF0gPSBLRVlfU0VBUkNILCAgICAgIC8vICdsb29wJwotCVsgMHgwOCBdID0gS0VZX0lORk8sICAgICAgICAvLyAncHJldmlldycKLQlbIDB4MmEgXSA9IEtFWV9SRVdJTkQsICAgICAgLy8gJ2JhY2t3YXJkIDw8JwotCVsgMHgxYSBdID0gS0VZX0ZBU1RGT1JXQVJELCAvLyAnZm9yd2FyZCA+PicKLQlbIDB4M2EgXSA9IEtFWV9SRUNPUkQsICAgICAgLy8gJ2NhcHR1cmUnCi0JWyAweDBhIF0gPSBLRVlfTVVURSwgICAgICAgIC8vICdtdXRlJwotCVsgMHgyYyBdID0gS0VZX1JFQ09SRCwgICAgICAvLyAncmVjb3JkJwotCVsgMHgxYyBdID0gS0VZX1BBVVNFLCAgICAgICAvLyAncGF1c2UnCi0JWyAweDNjIF0gPSBLRVlfU1RPUCwgICAgICAgIC8vICdzdG9wJwotCVsgMHgwYyBdID0gS0VZX1BMQVksICAgICAgICAvLyAncGxheScKLQlbIDB4MmUgXSA9IEtFWV9SRUQsICAgICAgICAgLy8gJ3JlZCcKLQlbIDB4MDEgXSA9IEtFWV9CTFVFLCAgICAgICAgLy8gJ2JsdWUnIC8gJ2NhbmNlbCcKLQlbIDB4MGUgXSA9IEtFWV9ZRUxMT1csICAgICAgLy8gJ3llbGxvdycgLyAnb2snCi0JWyAweDIxIF0gPSBLRVlfR1JFRU4sICAgICAgIC8vICdncmVlbicKLQlbIDB4MTEgXSA9IEtFWV9DSEFOTkVMRE9XTiwgLy8gJ2NoYW5uZWwgLScKLQlbIDB4MzEgXSA9IEtFWV9DSEFOTkVMVVAsICAgLy8gJ2NoYW5uZWwgKycKLQlbIDB4MWUgXSA9IEtFWV9WT0xVTUVET1dOLCAgLy8gJ3ZvbHVtZSAtJwotCVsgMHgzZSBdID0gS0VZX1ZPTFVNRVVQLCAgICAvLyAndm9sdW1lICsnCisJeyAweDIwLCBLRVlfTElTVCB9LAkJLyogJ3NvdXJjZScgKi8KKwl7IDB4MTAsIEtFWV9URVhUIH0sCQkvKiAndGVsZXRleHQnICovCisJeyAweDAwLCBLRVlfUE9XRVIgfSwJCS8qICdwb3dlcicgKi8KKwl7IDB4MDQsIEtFWV9BVURJTyB9LAkJLyogJ2F1ZGlvJyAqLworCXsgMHgwNiwgS0VZX1pPT00gfSwJCS8qICdmdWxsIHNjcmVlbicgKi8KKwl7IDB4MTgsIEtFWV9WSURFTyB9LAkJLyogJ2Rpc3BsYXknICovCisJeyAweDM4LCBLRVlfU0VBUkNIIH0sCQkvKiAnbG9vcCcgKi8KKwl7IDB4MDgsIEtFWV9JTkZPIH0sCQkvKiAncHJldmlldycgKi8KKwl7IDB4MmEsIEtFWV9SRVdJTkQgfSwJCS8qICdiYWNrd2FyZCA8PCcgKi8KKwl7IDB4MWEsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiAnZm9yd2FyZCA+PicgKi8KKwl7IDB4M2EsIEtFWV9SRUNPUkQgfSwJCS8qICdjYXB0dXJlJyAqLworCXsgMHgwYSwgS0VZX01VVEUgfSwJCS8qICdtdXRlJyAqLworCXsgMHgyYywgS0VZX1JFQ09SRCB9LAkJLyogJ3JlY29yZCcgKi8KKwl7IDB4MWMsIEtFWV9QQVVTRSB9LAkJLyogJ3BhdXNlJyAqLworCXsgMHgzYywgS0VZX1NUT1AgfSwJCS8qICdzdG9wJyAqLworCXsgMHgwYywgS0VZX1BMQVkgfSwJCS8qICdwbGF5JyAqLworCXsgMHgyZSwgS0VZX1JFRCB9LAkJLyogJ3JlZCcgKi8KKwl7IDB4MDEsIEtFWV9CTFVFIH0sCQkvKiAnYmx1ZScgLyAnY2FuY2VsJyAqLworCXsgMHgwZSwgS0VZX1lFTExPVyB9LAkJLyogJ3llbGxvdycgLyAnb2snICovCisJeyAweDIxLCBLRVlfR1JFRU4gfSwJCS8qICdncmVlbicgKi8KKwl7IDB4MTEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiAnY2hhbm5lbCAtJyAqLworCXsgMHgzMSwgS0VZX0NIQU5ORUxVUCB9LAkvKiAnY2hhbm5lbCArJyAqLworCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwJLyogJ3ZvbHVtZSAtJyAqLworCXsgMHgzZSwgS0VZX1ZPTFVNRVVQIH0sCQkvKiAndm9sdW1lICsnICovCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfZHZidCk7CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXZlcm1lZGlhX2R2YnRfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19hdmVybWVkaWFfZHZidCwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYXZlcm1lZGlhX2R2YnQpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJtZWRpYV9kdmJ0X3RhYmxlKTsKIAogLyogTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+ICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFfbTEzNWFbSVJfS0VZVEFCX1NJWkVdID0gewotCVsweDAwXSA9IEtFWV9QT1dFUjIsCi0JWzB4MmVdID0gS0VZX0RPVCwJCS8qICcuJyAqLwotCVsweDAxXSA9IEtFWV9NT0RFLAkJLyogVFYvRk0gKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhW10gPSB7CisJeyAweDAwLCBLRVlfUE9XRVIyIH0sCisJeyAweDJlLCBLRVlfRE9UIH0sCQkvKiAnLicgKi8KKwl7IDB4MDEsIEtFWV9NT0RFIH0sCQkvKiBUVi9GTSAqLwogCi0JWzB4MDVdID0gS0VZXzEsCi0JWzB4MDZdID0gS0VZXzIsCi0JWzB4MDddID0gS0VZXzMsCi0JWzB4MDldID0gS0VZXzQsCi0JWzB4MGFdID0gS0VZXzUsCi0JWzB4MGJdID0gS0VZXzYsCi0JWzB4MGRdID0gS0VZXzcsCi0JWzB4MGVdID0gS0VZXzgsCi0JWzB4MGZdID0gS0VZXzksCi0JWzB4MTFdID0gS0VZXzAsCisJeyAweDA1LCBLRVlfMSB9LAorCXsgMHgwNiwgS0VZXzIgfSwKKwl7IDB4MDcsIEtFWV8zIH0sCisJeyAweDA5LCBLRVlfNCB9LAorCXsgMHgwYSwgS0VZXzUgfSwKKwl7IDB4MGIsIEtFWV82IH0sCisJeyAweDBkLCBLRVlfNyB9LAorCXsgMHgwZSwgS0VZXzggfSwKKwl7IDB4MGYsIEtFWV85IH0sCisJeyAweDExLCBLRVlfMCB9LAogCi0JWzB4MTNdID0gS0VZX1JJR0hULAkJLyogLT4gKi8KLQlbMHgxMl0gPSBLRVlfTEVGVCwJCS8qIDwtICovCisJeyAweDEzLCBLRVlfUklHSFQgfSwJCS8qIC0+ICovCisJeyAweDEyLCBLRVlfTEVGVCB9LAkJLyogPC0gKi8KIAotCVsweDE3XSA9IEtFWV9TTEVFUCwJCS8qIENhcHR1cmFyIEltYWdlbSAqLwotCVsweDEwXSA9IEtFWV9TSFVGRkxFLAkJLyogQW1vc3RyYSAqLworCXsgMHgxNywgS0VZX1NMRUVQIH0sCQkvKiBDYXB0dXJhciBJbWFnZW0gKi8KKwl7IDB4MTAsIEtFWV9TSFVGRkxFIH0sCQkvKiBBbW9zdHJhICovCiAKIAkvKiBGSVhNRTogVGhlIGtleXMgYmVsbG93IGFyZW4ndCBvayAqLwogCi0JWzB4NDNdID0gS0VZX0NIQU5ORUxVUCwKLQlbMHg0Ml0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWzB4MWZdID0gS0VZX1ZPTFVNRVVQLAotCVsweDFlXSA9IEtFWV9WT0xVTUVET1dOLAotCVsweDBjXSA9IEtFWV9FTlRFUiwKKwl7IDB4NDMsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4NDIsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxZiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFlLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwYywgS0VZX0VOVEVSIH0sCiAKLQlbMHgxNF0gPSBLRVlfTVVURSwKLQlbMHgwOF0gPSBLRVlfQVVESU8sCisJeyAweDE0LCBLRVlfTVVURSB9LAorCXsgMHgwOCwgS0VZX0FVRElPIH0sCiAKLQlbMHgwM10gPSBLRVlfVEVYVCwKLQlbMHgwNF0gPSBLRVlfRVBHLAotCVsweDJiXSA9IEtFWV9UVjIsCQkvKiBUVjIgKi8KKwl7IDB4MDMsIEtFWV9URVhUIH0sCisJeyAweDA0LCBLRVlfRVBHIH0sCisJeyAweDJiLCBLRVlfVFYyIH0sCQkvKiBUVjIgKi8KIAotCVsweDFkXSA9IEtFWV9SRUQsCi0JWzB4MWNdID0gS0VZX1lFTExPVywKLQlbMHg0MV0gPSBLRVlfR1JFRU4sCi0JWzB4NDBdID0gS0VZX0JMVUUsCisJeyAweDFkLCBLRVlfUkVEIH0sCisJeyAweDFjLCBLRVlfWUVMTE9XIH0sCisJeyAweDQxLCBLRVlfR1JFRU4gfSwKKwl7IDB4NDAsIEtFWV9CTFVFIH0sCiAKLQlbMHgxYV0gPSBLRVlfUExBWVBBVVNFLAotCVsweDE5XSA9IEtFWV9SRUNPUkQsCi0JWzB4MThdID0gS0VZX1BMQVksCi0JWzB4MWJdID0gS0VZX1NUT1AsCisJeyAweDFhLCBLRVlfUExBWVBBVVNFIH0sCisJeyAweDE5LCBLRVlfUkVDT1JEIH0sCisJeyAweDE4LCBLRVlfUExBWSB9LAorCXsgMHgxYiwgS0VZX1NUT1AgfSwKIH07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfbTEzNWEpOworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19hdmVybWVkaWFfbTEzNWEpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJtZWRpYV9tMTM1YV90YWJsZSk7CiAKIC8qIE9sZHJpY2ggSmVkbGlja2EgPG9sZGl1bS5wcm9Ac2V6bmFtLmN6PiAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhX2NhcmRidXNbSVJfS0VZVEFCX1NJWkVdID0gewotCVsweDAwXSA9IEtFWV9QT1dFUiwKLQlbMHgwMV0gPSBLRVlfVFVORVIsCQkvKiBUVi9GTSAqLwotCVsweDAzXSA9IEtFWV9URVhULAkJLyogVGVsZXRleHQgKi8KLQlbMHgwNF0gPSBLRVlfRVBHLAotCVsweDA1XSA9IEtFWV8xLAotCVsweDA2XSA9IEtFWV8yLAotCVsweDA3XSA9IEtFWV8zLAotCVsweDA4XSA9IEtFWV9BVURJTywKLQlbMHgwOV0gPSBLRVlfNCwKLQlbMHgwYV0gPSBLRVlfNSwKLQlbMHgwYl0gPSBLRVlfNiwKLQlbMHgwY10gPSBLRVlfWk9PTSwJCS8qIEZ1bGwgc2NyZWVuICovCi0JWzB4MGRdID0gS0VZXzcsCi0JWzB4MGVdID0gS0VZXzgsCi0JWzB4MGZdID0gS0VZXzksCi0JWzB4MTBdID0gS0VZX1BBR0VVUCwJCS8qIDE2LUNIIFBSRVYgKi8KLQlbMHgxMV0gPSBLRVlfMCwKLQlbMHgxMl0gPSBLRVlfSU5GTywKLQlbMHgxM10gPSBLRVlfQUdBSU4sCQkvKiBDSCBSVE4gLSBjaGFubmVsIHJldHVybiAqLwotCVsweDE0XSA9IEtFWV9NVVRFLAotCVsweDE1XSA9IEtFWV9FRElULAkJLyogQXV0b3NjYW4gKi8KLQlbMHgxN10gPSBLRVlfU0FWRSwJCS8qIFNjcmVlbnNob3QgKi8KLQlbMHgxOF0gPSBLRVlfUExBWVBBVVNFLAotCVsweDE5XSA9IEtFWV9SRUNPUkQsCi0JWzB4MWFdID0gS0VZX1BMQVksCi0JWzB4MWJdID0gS0VZX1NUT1AsCi0JWzB4MWNdID0gS0VZX0ZBU1RGT1JXQVJELAotCVsweDFkXSA9IEtFWV9SRVdJTkQsCi0JWzB4MWVdID0gS0VZX1ZPTFVNRURPV04sCi0JWzB4MWZdID0gS0VZX1ZPTFVNRVVQLAotCVsweDIyXSA9IEtFWV9TTEVFUCwJCS8qIFNsZWVwICovCi0JWzB4MjNdID0gS0VZX1pPT00sCQkvKiBBc3BlY3QgKi8KLQlbMHgyNl0gPSBLRVlfU0NSRUVOLAkJLyogUG9zICovCi0JWzB4MjddID0gS0VZX0FOR0xFLAkJLyogU2l6ZSAqLwotCVsweDI4XSA9IEtFWV9TRUxFQ1QsCQkvKiBTZWxlY3QgKi8KLQlbMHgyOV0gPSBLRVlfQkxVRSwJCS8qIEJsdWUvUGljdHVyZSAqLwotCVsweDJhXSA9IEtFWV9CQUNLU1BBQ0UsCS8qIEJhY2sgKi8KLQlbMHgyYl0gPSBLRVlfTUVESUEsCQkvKiBQSVAgKFBpY3R1cmUtaW4tcGljdHVyZSkgKi8KLQlbMHgyY10gPSBLRVlfRE9XTiwKLQlbMHgyZV0gPSBLRVlfRE9ULAotCVsweDJmXSA9IEtFWV9UViwJCS8qIExpdmUgVFYgKi8KLQlbMHgzMl0gPSBLRVlfTEVGVCwKLQlbMHgzM10gPSBLRVlfQ0xFQVIsCQkvKiBDbGVhciAqLwotCVsweDM1XSA9IEtFWV9SRUQsCQkvKiBSZWQvVFYgKi8KLQlbMHgzNl0gPSBLRVlfVVAsCi0JWzB4MzddID0gS0VZX0hPTUUsCQkvKiBIb21lICovCi0JWzB4MzldID0gS0VZX0dSRUVOLAkJLyogR3JlZW4vVmlkZW8gKi8KLQlbMHgzZF0gPSBLRVlfWUVMTE9XLAkJLyogWWVsbG93L011c2ljICovCi0JWzB4M2VdID0gS0VZX09LLAkJLyogT2sgKi8KLQlbMHgzZl0gPSBLRVlfUklHSFQsCi0JWzB4NDBdID0gS0VZX05FWFQsCQkvKiBOZXh0ICovCi0JWzB4NDFdID0gS0VZX1BSRVZJT1VTLAkvKiBQcmV2aW91cyAqLwotCVsweDQyXSA9IEtFWV9DSEFOTkVMRE9XTiwJLyogQ2hhbm5lbCBkb3duICovCi0JWzB4NDNdID0gS0VZX0NIQU5ORUxVUAkvKiBDaGFubmVsIHVwICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzW10gPSB7CisJeyAweDAwLCBLRVlfUE9XRVIgfSwKKwl7IDB4MDEsIEtFWV9UVU5FUiB9LAkJLyogVFYvRk0gKi8KKwl7IDB4MDMsIEtFWV9URVhUIH0sCQkvKiBUZWxldGV4dCAqLworCXsgMHgwNCwgS0VZX0VQRyB9LAorCXsgMHgwNSwgS0VZXzEgfSwKKwl7IDB4MDYsIEtFWV8yIH0sCisJeyAweDA3LCBLRVlfMyB9LAorCXsgMHgwOCwgS0VZX0FVRElPIH0sCisJeyAweDA5LCBLRVlfNCB9LAorCXsgMHgwYSwgS0VZXzUgfSwKKwl7IDB4MGIsIEtFWV82IH0sCisJeyAweDBjLCBLRVlfWk9PTSB9LAkJLyogRnVsbCBzY3JlZW4gKi8KKwl7IDB4MGQsIEtFWV83IH0sCisJeyAweDBlLCBLRVlfOCB9LAorCXsgMHgwZiwgS0VZXzkgfSwKKwl7IDB4MTAsIEtFWV9QQUdFVVAgfSwJCS8qIDE2LUNIIFBSRVYgKi8KKwl7IDB4MTEsIEtFWV8wIH0sCisJeyAweDEyLCBLRVlfSU5GTyB9LAorCXsgMHgxMywgS0VZX0FHQUlOIH0sCQkvKiBDSCBSVE4gLSBjaGFubmVsIHJldHVybiAqLworCXsgMHgxNCwgS0VZX01VVEUgfSwKKwl7IDB4MTUsIEtFWV9FRElUIH0sCQkvKiBBdXRvc2NhbiAqLworCXsgMHgxNywgS0VZX1NBVkUgfSwJCS8qIFNjcmVlbnNob3QgKi8KKwl7IDB4MTgsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4MTksIEtFWV9SRUNPUkQgfSwKKwl7IDB4MWEsIEtFWV9QTEFZIH0sCisJeyAweDFiLCBLRVlfU1RPUCB9LAorCXsgMHgxYywgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDFkLCBLRVlfUkVXSU5EIH0sCisJeyAweDFlLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxZiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDIyLCBLRVlfU0xFRVAgfSwJCS8qIFNsZWVwICovCisJeyAweDIzLCBLRVlfWk9PTSB9LAkJLyogQXNwZWN0ICovCisJeyAweDI2LCBLRVlfU0NSRUVOIH0sCQkvKiBQb3MgKi8KKwl7IDB4MjcsIEtFWV9BTkdMRSB9LAkJLyogU2l6ZSAqLworCXsgMHgyOCwgS0VZX1NFTEVDVCB9LAkJLyogU2VsZWN0ICovCisJeyAweDI5LCBLRVlfQkxVRSB9LAkJLyogQmx1ZS9QaWN0dXJlICovCisJeyAweDJhLCBLRVlfQkFDS1NQQUNFIH0sCS8qIEJhY2sgKi8KKwl7IDB4MmIsIEtFWV9NRURJQSB9LAkJLyogUElQIChQaWN0dXJlLWluLXBpY3R1cmUpICovCisJeyAweDJjLCBLRVlfRE9XTiB9LAorCXsgMHgyZSwgS0VZX0RPVCB9LAorCXsgMHgyZiwgS0VZX1RWIH0sCQkvKiBMaXZlIFRWICovCisJeyAweDMyLCBLRVlfTEVGVCB9LAorCXsgMHgzMywgS0VZX0NMRUFSIH0sCQkvKiBDbGVhciAqLworCXsgMHgzNSwgS0VZX1JFRCB9LAkJLyogUmVkL1RWICovCisJeyAweDM2LCBLRVlfVVAgfSwKKwl7IDB4MzcsIEtFWV9IT01FIH0sCQkvKiBIb21lICovCisJeyAweDM5LCBLRVlfR1JFRU4gfSwJCS8qIEdyZWVuL1ZpZGVvICovCisJeyAweDNkLCBLRVlfWUVMTE9XIH0sCQkvKiBZZWxsb3cvTXVzaWMgKi8KKwl7IDB4M2UsIEtFWV9PSyB9LAkJLyogT2sgKi8KKwl7IDB4M2YsIEtFWV9SSUdIVCB9LAorCXsgMHg0MCwgS0VZX05FWFQgfSwJCS8qIE5leHQgKi8KKwl7IDB4NDEsIEtFWV9QUkVWSU9VUyB9LAkJLyogUHJldmlvdXMgKi8KKwl7IDB4NDIsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBDaGFubmVsIGRvd24gKi8KKwl7IDB4NDMsIEtFWV9DSEFOTkVMVVAgfSwJLyogQ2hhbm5lbCB1cCAqLwogfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzKTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfYXZlcm1lZGlhX2NhcmRidXMsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfY2FyZGJ1c190YWJsZSk7CiAKIC8qIEF0dGlsYSBLb25kb3JvcyA8YXR0aWxhLmtvbmRvcm9zQGNoZWxsby5odT4gKi8KLUlSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2FwYWNfdmlld2NvbXBbSVJfS0VZVEFCX1NJWkVdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19hcGFjX3ZpZXdjb21wW10gPSB7CiAKLQlbIDB4MDEgXSA9IEtFWV8xLAotCVsgMHgwMiBdID0gS0VZXzIsCi0JWyAweDAzIF0gPSBLRVlfMywKLQlbIDB4MDQgXSA9IEtFWV80LAotCVsgMHgwNSBdID0gS0VZXzUsCi0JWyAweDA2IF0gPSBLRVlfNiwKLQlbIDB4MDcgXSA9IEtFWV83LAotCVsgMHgwOCBdID0gS0VZXzgsCi0JWyAweDA5IF0gPSBLRVlfOSwKLQlbIDB4MDAgXSA9IEtFWV8wLAotCVsgMHgxNyBdID0gS0VZX0xBU1QsICAgICAgICAvLyArMTAwCi0JWyAweDBhIF0gPSBLRVlfTElTVCwgICAgICAgIC8vIHJlY2FsbAorCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAorCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MTcsIEtFWV9MQVNUIH0sCQkvKiArMTAwICovCisJeyAweDBhLCBLRVlfTElTVCB9LAkJLyogcmVjYWxsICovCiAKIAotCVsgMHgxYyBdID0gS0VZX1RVTkVSLCAgICAgICAvLyBUVi9GTQotCVsgMHgxNSBdID0gS0VZX1NFQVJDSCwgICAgICAvLyBzY2FuCi0JWyAweDEyIF0gPSBLRVlfUE9XRVIsICAgICAgIC8vIHBvd2VyCi0JWyAweDFmIF0gPSBLRVlfVk9MVU1FRE9XTiwgIC8vIHZvbCB1cAotCVsgMHgxYiBdID0gS0VZX1ZPTFVNRVVQLCAgICAvLyB2b2wgZG93bgotCVsgMHgxZSBdID0gS0VZX0NIQU5ORUxET1dOLCAvLyBjaG4gdXAKLQlbIDB4MWEgXSA9IEtFWV9DSEFOTkVMVVAsICAgLy8gY2huIGRvd24KKwl7IDB4MWMsIEtFWV9UVU5FUiB9LAkJLyogVFYvRk0gKi8KKwl7IDB4MTUsIEtFWV9TRUFSQ0ggfSwJCS8qIHNjYW4gKi8KKwl7IDB4MTIsIEtFWV9QT1dFUiB9LAkJLyogcG93ZXIgKi8KKwl7IDB4MWYsIEtFWV9WT0xVTUVET1dOIH0sCS8qIHZvbCB1cCAqLworCXsgMHgxYiwgS0VZX1ZPTFVNRVVQIH0sCQkvKiB2b2wgZG93biAqLworCXsgMHgxZSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNobiB1cCAqLworCXsgMHgxYSwgS0VZX0NIQU5ORUxVUCB9LAkvKiBjaG4gZG93biAqLwogCi0JWyAweDExIF0gPSBLRVlfVklERU8sICAgICAgIC8vIHZpZGVvCi0JWyAweDBmIF0gPSBLRVlfWk9PTSwgICAgICAgIC8vIGZ1bGwgc2NyZWVuCi0JWyAweDEzIF0gPSBLRVlfTVVURSwgICAgICAgIC8vIG11dGUvdW5tdXRlCi0JWyAweDEwIF0gPSBLRVlfVEVYVCwgICAgICAgIC8vIG1pbgorCXsgMHgxMSwgS0VZX1ZJREVPIH0sCQkvKiB2aWRlbyAqLworCXsgMHgwZiwgS0VZX1pPT00gfSwJCS8qIGZ1bGwgc2NyZWVuICovCisJeyAweDEzLCBLRVlfTVVURSB9LAkJLyogbXV0ZS91bm11dGUgKi8KKwl7IDB4MTAsIEtFWV9URVhUIH0sCQkvKiBtaW4gKi8KIAotCVsgMHgwZCBdID0gS0VZX1NUT1AsICAgICAgICAvLyBmcmVlemUKLQlbIDB4MGUgXSA9IEtFWV9SRUNPUkQsICAgICAgLy8gcmVjb3JkCi0JWyAweDFkIF0gPSBLRVlfUExBWVBBVVNFLCAgIC8vIHN0b3AKLQlbIDB4MTkgXSA9IEtFWV9QTEFZLCAgICAgICAgLy8gcGxheQorCXsgMHgwZCwgS0VZX1NUT1AgfSwJCS8qIGZyZWV6ZSAqLworCXsgMHgwZSwgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkICovCisJeyAweDFkLCBLRVlfUExBWVBBVVNFIH0sCS8qIHN0b3AgKi8KKwl7IDB4MTksIEtFWV9QTEFZIH0sCQkvKiBwbGF5ICovCiAKLQlbIDB4MTYgXSA9IEtFWV9HT1RPLCAgICAgICAgLy8gb3NkCi0JWyAweDE0IF0gPSBLRVlfUkVGUkVTSCwgICAgIC8vIGRlZmF1bHQKLQlbIDB4MGMgXSA9IEtFWV9LUFBMVVMsICAgICAgLy8gZmluZSB0dW5lID4+Pj4KLQlbIDB4MTggXSA9IEtFWV9LUE1JTlVTICAgICAgLy8gZmluZSB0dW5lIDw8PDwKKwl7IDB4MTYsIEtFWV9HT1RPIH0sCQkvKiBvc2QgKi8KKwl7IDB4MTQsIEtFWV9SRUZSRVNIIH0sCQkvKiBkZWZhdWx0ICovCisJeyAweDBjLCBLRVlfS1BQTFVTIH0sCQkvKiBmaW5lIHR1bmUgPj4+PiAqLworCXsgMHgxOCwgS0VZX0tQTUlOVVMgfSwJCS8qIGZpbmUgdHVuZSA8PDw8ICovCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hcGFjX3ZpZXdjb21wKTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19hcGFjX3ZpZXdjb21wX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfYXBhY192aWV3Y29tcCwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYXBhY192aWV3Y29tcCksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXBhY192aWV3Y29tcF90YWJsZSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGl4ZWx2aWV3W0lSX0tFWVRBQl9TSVpFXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfcGl4ZWx2aWV3W10gPSB7CiAKLQlbIDB4MWUgXSA9IEtFWV9QT1dFUiwgICAgICAgLy8gcG93ZXIKLQlbIDB4MDcgXSA9IEtFWV9NRURJQSwgICAgICAgLy8gc291cmNlCi0JWyAweDFjIF0gPSBLRVlfU0VBUkNILCAgICAgIC8vIHNjYW4KKwl7IDB4MWUsIEtFWV9QT1dFUiB9LAkvKiBwb3dlciAqLworCXsgMHgwNywgS0VZX01FRElBIH0sCS8qIHNvdXJjZSAqLworCXsgMHgxYywgS0VZX1NFQVJDSCB9LAkvKiBzY2FuICovCiAKLS8qIEZJWE1FOiBkdXBsaWNhdGUga2V5Y29kZXM/Ci0gKgotICogVGhlc2UgZm91ciBrZXlzIHNlZW0gdG8gc2hhcmUgdGhlIHNhbWUgR1BJTyBhcyBDSCssIENILSwgPDw8IGFuZCA+Pj4KLSAqIFRoZSBHUElPIHZhbHVlcyBhcmUKLSAqIDYzOTdmYiBmb3IgYm90aCAiU2NhbiA8IiBhbmQgIkNIIC0iLAotICogNjM5ZmZiIGZvciAiU2NhbiA+IiBhbmQgIkNIKyIsCi0gKiA2Mzg0ZmIgZm9yICJUdW5lIDwiIGFuZCAiPDw8IiwKLSAqIDYzOGNmYiBmb3IgIlR1bmUgPiIgYW5kICI+Pj4iLCByZWdhcmRsZXNzIG9mIHRoZSBtYXNrLgotICoKLSAqCVsgMHgxNyBdID0gS0VZX0JBQ0ssICAgICAgICAvLyBmbSBzY2FuIDw8Ci0gKglbIDB4MWYgXSA9IEtFWV9GT1JXQVJELCAgICAgLy8gZm0gc2NhbiA+PgotICoKLSAqCVsgMHgwNCBdID0gS0VZX0xFRlQsICAgICAgICAvLyBmbSB0dW5pbmcgPAotICoJWyAweDBjIF0gPSBLRVlfUklHSFQsICAgICAgIC8vIGZtIHR1bmluZyA+Ci0gKgotICogRm9yIG5vdywgdGhlc2UgZm91ciBrZXlzIGFyZSBkaXNhYmxlZC4gUHJlc3NpbmcgdGhlbSB3aWxsIGdlbmVyYXRlCi0gKiB0aGUgQ0grL0NILS88PDwvPj4+IGV2ZW50cwotICovCiAKLQlbIDB4MDMgXSA9IEtFWV9UVU5FUiwgICAgICAgLy8gVFYvRk0KKwl7IDB4MDMsIEtFWV9UVU5FUiB9LAkJLyogVFYvRk0gKi8KIAotCVsgMHgwMCBdID0gS0VZX1JFQ09SRCwKLQlbIDB4MDggXSA9IEtFWV9TVE9QLAotCVsgMHgxMSBdID0gS0VZX1BMQVksCisJeyAweDAwLCBLRVlfUkVDT1JEIH0sCisJeyAweDA4LCBLRVlfU1RPUCB9LAorCXsgMHgxMSwgS0VZX1BMQVkgfSwKIAotCVsgMHgxYSBdID0gS0VZX1BMQVlQQVVTRSwgICAvLyBmcmVlemUKLQlbIDB4MTkgXSA9IEtFWV9aT09NLCAgICAgICAgLy8gem9vbQotCVsgMHgwZiBdID0gS0VZX1RFWFQsICAgICAgICAvLyBtaW4KKwl7IDB4MWEsIEtFWV9QTEFZUEFVU0UgfSwJLyogZnJlZXplICovCisJeyAweDE5LCBLRVlfWk9PTSB9LAkJLyogem9vbSAqLworCXsgMHgwZiwgS0VZX1RFWFQgfSwJCS8qIG1pbiAqLwogCi0JWyAweDAxIF0gPSBLRVlfMSwKLQlbIDB4MGIgXSA9IEtFWV8yLAotCVsgMHgxYiBdID0gS0VZXzMsCi0JWyAweDA1IF0gPSBLRVlfNCwKLQlbIDB4MDkgXSA9IEtFWV81LAotCVsgMHgxNSBdID0gS0VZXzYsCi0JWyAweDA2IF0gPSBLRVlfNywKLQlbIDB4MGEgXSA9IEtFWV84LAotCVsgMHgxMiBdID0gS0VZXzksCi0JWyAweDAyIF0gPSBLRVlfMCwKLQlbIDB4MTAgXSA9IEtFWV9MQVNULCAgICAgICAgLy8gKzEwMAotCVsgMHgxMyBdID0gS0VZX0xJU1QsICAgICAgICAvLyByZWNhbGwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDBiLCBLRVlfMiB9LAorCXsgMHgxYiwgS0VZXzMgfSwKKwl7IDB4MDUsIEtFWV80IH0sCisJeyAweDA5LCBLRVlfNSB9LAorCXsgMHgxNSwgS0VZXzYgfSwKKwl7IDB4MDYsIEtFWV83IH0sCisJeyAweDBhLCBLRVlfOCB9LAorCXsgMHgxMiwgS0VZXzkgfSwKKwl7IDB4MDIsIEtFWV8wIH0sCisJeyAweDEwLCBLRVlfTEFTVCB9LAkJLyogKzEwMCAqLworCXsgMHgxMywgS0VZX0xJU1QgfSwJCS8qIHJlY2FsbCAqLwogCi0JWyAweDFmIF0gPSBLRVlfQ0hBTk5FTFVQLCAgIC8vIGNobiBkb3duCi0JWyAweDE3IF0gPSBLRVlfQ0hBTk5FTERPV04sIC8vIGNobiB1cAotCVsgMHgxNiBdID0gS0VZX1ZPTFVNRVVQLCAgICAvLyB2b2wgZG93bgotCVsgMHgxNCBdID0gS0VZX1ZPTFVNRURPV04sICAvLyB2b2wgdXAKKwl7IDB4MWYsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2huIGRvd24gKi8KKwl7IDB4MTcsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaG4gdXAgKi8KKwl7IDB4MTYsIEtFWV9WT0xVTUVVUCB9LAkJLyogdm9sIGRvd24gKi8KKwl7IDB4MTQsIEtFWV9WT0xVTUVET1dOIH0sCS8qIHZvbCB1cCAqLwogCi0JWyAweDA0IF0gPSBLRVlfS1BNSU5VUywgICAgIC8vIDw8PAotCVsgMHgwZSBdID0gS0VZX1NFVFVQLCAgICAgICAvLyBmdW5jdGlvbgotCVsgMHgwYyBdID0gS0VZX0tQUExVUywgICAgICAvLyA+Pj4KKwl7IDB4MDQsIEtFWV9LUE1JTlVTIH0sCQkvKiA8PDwgKi8KKwl7IDB4MGUsIEtFWV9TRVRVUCB9LAkJLyogZnVuY3Rpb24gKi8KKwl7IDB4MGMsIEtFWV9LUFBMVVMgfSwJCS8qID4+PiAqLwogCi0JWyAweDBkIF0gPSBLRVlfR09UTywgICAgICAgIC8vIG10cwotCVsgMHgxZCBdID0gS0VZX1JFRlJFU0gsICAgICAvLyByZXNldAotCVsgMHgxOCBdID0gS0VZX01VVEUgICAgICAgICAvLyBtdXRlL3VubXV0ZQorCXsgMHgwZCwgS0VZX0dPVE8gfSwJCS8qIG10cyAqLworCXsgMHgxZCwgS0VZX1JFRlJFU0ggfSwJCS8qIHJlc2V0ICovCisJeyAweDE4LCBLRVlfTVVURSB9LAkJLyogbXV0ZS91bm11dGUgKi8KIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3BpeGVsdmlldyk7CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcGl4ZWx2aWV3X3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfcGl4ZWx2aWV3LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19waXhlbHZpZXcpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3BpeGVsdmlld190YWJsZSk7CiAKIC8qCiAgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KICAgIHByZXNlbnQgb24gUFYgTVBFRyA4MDAwR1QKICAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGl4ZWx2aWV3X25ld1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWzB4M2NdID0gS0VZX1BBVVNFLAkJLyogVGltZXNoaWZ0ICovCi0JWzB4MTJdID0gS0VZX1BPV0VSLAorc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19waXhlbHZpZXdfbmV3W10gPSB7CisJeyAweDNjLCBLRVlfVElNRSB9LAkJLyogVGltZXNoaWZ0ICovCisJeyAweDEyLCBLRVlfUE9XRVIgfSwKIAotCVsweDNkXSA9IEtFWV8xLAotCVsweDM4XSA9IEtFWV8yLAotCVsweDE4XSA9IEtFWV8zLAotCVsweDM1XSA9IEtFWV80LAotCVsweDM5XSA9IEtFWV81LAotCVsweDE1XSA9IEtFWV82LAotCVsweDM2XSA9IEtFWV83LAotCVsweDNhXSA9IEtFWV84LAotCVsweDFlXSA9IEtFWV85LAotCVsweDNlXSA9IEtFWV8wLAorCXsgMHgzZCwgS0VZXzEgfSwKKwl7IDB4MzgsIEtFWV8yIH0sCisJeyAweDE4LCBLRVlfMyB9LAorCXsgMHgzNSwgS0VZXzQgfSwKKwl7IDB4MzksIEtFWV81IH0sCisJeyAweDE1LCBLRVlfNiB9LAorCXsgMHgzNiwgS0VZXzcgfSwKKwl7IDB4M2EsIEtFWV84IH0sCisJeyAweDFlLCBLRVlfOSB9LAorCXsgMHgzZSwgS0VZXzAgfSwKIAotCVsweDFjXSA9IEtFWV9BR0FJTiwJCS8qIExPT1AJKi8KLQlbMHgzZl0gPSBLRVlfTUVESUEsCQkvKiBTb3VyY2UgKi8KLQlbMHgxZl0gPSBLRVlfTEFTVCwJCS8qICsxMDAgKi8KLQlbMHgxYl0gPSBLRVlfTVVURSwKKwl7IDB4MWMsIEtFWV9BR0FJTiB9LAkJLyogTE9PUAkqLworCXsgMHgzZiwgS0VZX01FRElBIH0sCQkvKiBTb3VyY2UgKi8KKwl7IDB4MWYsIEtFWV9MQVNUIH0sCQkvKiArMTAwICovCisJeyAweDFiLCBLRVlfTVVURSB9LAogCi0JWzB4MTddID0gS0VZX0NIQU5ORUxET1dOLAotCVsweDE2XSA9IEtFWV9DSEFOTkVMVVAsCi0JWzB4MTBdID0gS0VZX1ZPTFVNRVVQLAotCVsweDE0XSA9IEtFWV9WT0xVTUVET1dOLAotCVsweDEzXSA9IEtFWV9aT09NLAorCXsgMHgxNywgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDE2LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MTQsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDEzLCBLRVlfWk9PTSB9LAogCi0JWzB4MTldID0gS0VZX1NIVUZGTEUsCQkvKiBTTkFQU0hPVCAqLwotCVsweDFhXSA9IEtFWV9TRUFSQ0gsCQkvKiBzY2FuICovCisJeyAweDE5LCBLRVlfQ0FNRVJBIH0sCQkvKiBTTkFQU0hPVCAqLworCXsgMHgxYSwgS0VZX1NFQVJDSCB9LAkJLyogc2NhbiAqLwogCi0JWzB4MzddID0gS0VZX1JFV0lORCwJCS8qIDw8ICovCi0JWzB4MzJdID0gS0VZX1JFQ09SRCwJCS8qIG8gKHJlZCkgKi8KLQlbMHgzM10gPSBLRVlfRk9SV0FSRCwJCS8qID4+ICovCi0JWzB4MTFdID0gS0VZX1NUT1AsCQkvKiBzcXVhcmUgKi8KLQlbMHgzYl0gPSBLRVlfUExBWSwJCS8qID4gKi8KLQlbMHgzMF0gPSBLRVlfUExBWVBBVVNFLAkJLyogfHwgKi8KKwl7IDB4MzcsIEtFWV9SRVdJTkQgfSwJCS8qIDw8ICovCisJeyAweDMyLCBLRVlfUkVDT1JEIH0sCQkvKiBvIChyZWQpICovCisJeyAweDMzLCBLRVlfRk9SV0FSRCB9LAkJLyogPj4gKi8KKwl7IDB4MTEsIEtFWV9TVE9QIH0sCQkvKiBzcXVhcmUgKi8KKwl7IDB4M2IsIEtFWV9QTEFZIH0sCQkvKiA+ICovCisJeyAweDMwLCBLRVlfUExBWVBBVVNFIH0sCS8qIHx8ICovCiAKLQlbMHgzMV0gPSBLRVlfVFYsCi0JWzB4MzRdID0gS0VZX1JBRElPLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3BpeGVsdmlld19uZXcpOwotCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19uZWJ1bGFbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgMHgwMCBdID0gS0VZXzAsCi0JWyAweDAxIF0gPSBLRVlfMSwKLQlbIDB4MDIgXSA9IEtFWV8yLAotCVsgMHgwMyBdID0gS0VZXzMsCi0JWyAweDA0IF0gPSBLRVlfNCwKLQlbIDB4MDUgXSA9IEtFWV81LAotCVsgMHgwNiBdID0gS0VZXzYsCi0JWyAweDA3IF0gPSBLRVlfNywKLQlbIDB4MDggXSA9IEtFWV84LAotCVsgMHgwOSBdID0gS0VZXzksCi0JWyAweDBhIF0gPSBLRVlfVFYsCi0JWyAweDBiIF0gPSBLRVlfQVVYLAotCVsgMHgwYyBdID0gS0VZX0RWRCwKLQlbIDB4MGQgXSA9IEtFWV9QT1dFUiwKLQlbIDB4MGUgXSA9IEtFWV9NSFAsCS8qIGxhYmVsbGVkICdQaWN0dXJlJyAqLwotCVsgMHgwZiBdID0gS0VZX0FVRElPLAotCVsgMHgxMCBdID0gS0VZX0lORk8sCi0JWyAweDExIF0gPSBLRVlfRjEzLAkvKiAxNjo5ICovCi0JWyAweDEyIF0gPSBLRVlfRjE0LAkvKiAxNDo5ICovCi0JWyAweDEzIF0gPSBLRVlfRVBHLAotCVsgMHgxNCBdID0gS0VZX0VYSVQsCi0JWyAweDE1IF0gPSBLRVlfTUVOVSwKLQlbIDB4MTYgXSA9IEtFWV9VUCwKLQlbIDB4MTcgXSA9IEtFWV9ET1dOLAotCVsgMHgxOCBdID0gS0VZX0xFRlQsCi0JWyAweDE5IF0gPSBLRVlfUklHSFQsCi0JWyAweDFhIF0gPSBLRVlfRU5URVIsCi0JWyAweDFiIF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgMHgxYyBdID0gS0VZX0NIQU5ORUxET1dOLAotCVsgMHgxZCBdID0gS0VZX1ZPTFVNRVVQLAotCVsgMHgxZSBdID0gS0VZX1ZPTFVNRURPV04sCi0JWyAweDFmIF0gPSBLRVlfUkVELAotCVsgMHgyMCBdID0gS0VZX0dSRUVOLAotCVsgMHgyMSBdID0gS0VZX1lFTExPVywKLQlbIDB4MjIgXSA9IEtFWV9CTFVFLAotCVsgMHgyMyBdID0gS0VZX1NVQlRJVExFLAotCVsgMHgyNCBdID0gS0VZX0YxNSwJLyogQUQgKi8KLQlbIDB4MjUgXSA9IEtFWV9URVhULAotCVsgMHgyNiBdID0gS0VZX01VVEUsCi0JWyAweDI3IF0gPSBLRVlfUkVXSU5ELAotCVsgMHgyOCBdID0gS0VZX1NUT1AsCi0JWyAweDI5IF0gPSBLRVlfUExBWSwKLQlbIDB4MmEgXSA9IEtFWV9GQVNURk9SV0FSRCwKLQlbIDB4MmIgXSA9IEtFWV9GMTYsCS8qIGNoYXB0ZXIgKi8KLQlbIDB4MmMgXSA9IEtFWV9QQVVTRSwKLQlbIDB4MmQgXSA9IEtFWV9QTEFZLAotCVsgMHgyZSBdID0gS0VZX1JFQ09SRCwKLQlbIDB4MmYgXSA9IEtFWV9GMTcsCS8qIHBpY3R1cmUgaW4gcGljdHVyZSAqLwotCVsgMHgzMCBdID0gS0VZX0tQUExVUywJLyogem9vbSBpbiAqLwotCVsgMHgzMSBdID0gS0VZX0tQTUlOVVMsCS8qIHpvb20gb3V0ICovCi0JWyAweDMyIF0gPSBLRVlfRjE4LAkvKiBjYXB0dXJlICovCi0JWyAweDMzIF0gPSBLRVlfRjE5LAkvKiB3ZWIgKi8KLQlbIDB4MzQgXSA9IEtFWV9FTUFJTCwKLQlbIDB4MzUgXSA9IEtFWV9QSE9ORSwKLQlbIDB4MzYgXSA9IEtFWV9QQworCXsgMHgzMSwgS0VZX1RWIH0sCisJeyAweDM0LCBLRVlfUkFESU8gfSwKIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX25lYnVsYSk7CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcGl4ZWx2aWV3X25ld190YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3BpeGVsdmlld19uZXcsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3BpeGVsdmlld19uZXcpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3BpeGVsdmlld19uZXdfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX25lYnVsYVtdID0geworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MGEsIEtFWV9UViB9LAorCXsgMHgwYiwgS0VZX0FVWCB9LAorCXsgMHgwYywgS0VZX0RWRCB9LAorCXsgMHgwZCwgS0VZX1BPV0VSIH0sCisJeyAweDBlLCBLRVlfTUhQIH0sCS8qIGxhYmVsbGVkICdQaWN0dXJlJyAqLworCXsgMHgwZiwgS0VZX0FVRElPIH0sCisJeyAweDEwLCBLRVlfSU5GTyB9LAorCXsgMHgxMSwgS0VZX0YxMyB9LAkvKiAxNjo5ICovCisJeyAweDEyLCBLRVlfRjE0IH0sCS8qIDE0OjkgKi8KKwl7IDB4MTMsIEtFWV9FUEcgfSwKKwl7IDB4MTQsIEtFWV9FWElUIH0sCisJeyAweDE1LCBLRVlfTUVOVSB9LAorCXsgMHgxNiwgS0VZX1VQIH0sCisJeyAweDE3LCBLRVlfRE9XTiB9LAorCXsgMHgxOCwgS0VZX0xFRlQgfSwKKwl7IDB4MTksIEtFWV9SSUdIVCB9LAorCXsgMHgxYSwgS0VZX0VOVEVSIH0sCisJeyAweDFiLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDFjLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MWQsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MWYsIEtFWV9SRUQgfSwKKwl7IDB4MjAsIEtFWV9HUkVFTiB9LAorCXsgMHgyMSwgS0VZX1lFTExPVyB9LAorCXsgMHgyMiwgS0VZX0JMVUUgfSwKKwl7IDB4MjMsIEtFWV9TVUJUSVRMRSB9LAorCXsgMHgyNCwgS0VZX0YxNSB9LAkvKiBBRCAqLworCXsgMHgyNSwgS0VZX1RFWFQgfSwKKwl7IDB4MjYsIEtFWV9NVVRFIH0sCisJeyAweDI3LCBLRVlfUkVXSU5EIH0sCisJeyAweDI4LCBLRVlfU1RPUCB9LAorCXsgMHgyOSwgS0VZX1BMQVkgfSwKKwl7IDB4MmEsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgyYiwgS0VZX0YxNiB9LAkvKiBjaGFwdGVyICovCisJeyAweDJjLCBLRVlfUEFVU0UgfSwKKwl7IDB4MmQsIEtFWV9QTEFZIH0sCisJeyAweDJlLCBLRVlfUkVDT1JEIH0sCisJeyAweDJmLCBLRVlfRjE3IH0sCS8qIHBpY3R1cmUgaW4gcGljdHVyZSAqLworCXsgMHgzMCwgS0VZX0tQUExVUyB9LAkvKiB6b29tIGluICovCisJeyAweDMxLCBLRVlfS1BNSU5VUyB9LAkvKiB6b29tIG91dCAqLworCXsgMHgzMiwgS0VZX0YxOCB9LAkvKiBjYXB0dXJlICovCisJeyAweDMzLCBLRVlfRjE5IH0sCS8qIHdlYiAqLworCXsgMHgzNCwgS0VZX0VNQUlMIH0sCisJeyAweDM1LCBLRVlfUEhPTkUgfSwKKwl7IDB4MzYsIEtFWV9QQyB9LAorfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX25lYnVsYV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX25lYnVsYSwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfbmVidWxhKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19uZWJ1bGFfdGFibGUpOwogCiAvKiBEaWdpdGFsTm93IEROVFYgTGl2ZSBEVkItVCBSZW1vdGUgKi8KLUlSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJfdFtJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAweDAwIF0gPSBLRVlfRVNDLAkJLyogJ2dvIHVwIGEgbGV2ZWw/JyAqLworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZiX3RbXSA9IHsKKwl7IDB4MDAsIEtFWV9FU0MgfSwJCS8qICdnbyB1cCBhIGxldmVsPycgKi8KIAkvKiBLZXlzIDAgdG8gOSAqLwotCVsgMHgwYSBdID0gS0VZXzAsCi0JWyAweDAxIF0gPSBLRVlfMSwKLQlbIDB4MDIgXSA9IEtFWV8yLAotCVsgMHgwMyBdID0gS0VZXzMsCi0JWyAweDA0IF0gPSBLRVlfNCwKLQlbIDB4MDUgXSA9IEtFWV81LAotCVsgMHgwNiBdID0gS0VZXzYsCi0JWyAweDA3IF0gPSBLRVlfNywKLQlbIDB4MDggXSA9IEtFWV84LAotCVsgMHgwOSBdID0gS0VZXzksCisJeyAweDBhLCBLRVlfMCB9LAorCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAogCi0JWyAweDBiIF0gPSBLRVlfVFVORVIsCQkvKiB0di9mbSAqLwotCVsgMHgwYyBdID0gS0VZX1NFQVJDSCwJCS8qIHNjYW4gKi8KLQlbIDB4MGQgXSA9IEtFWV9TVE9QLAotCVsgMHgwZSBdID0gS0VZX1BBVVNFLAotCVsgMHgwZiBdID0gS0VZX0xJU1QsCQkvKiBzb3VyY2UgKi8KKwl7IDB4MGIsIEtFWV9UVU5FUiB9LAkJLyogdHYvZm0gKi8KKwl7IDB4MGMsIEtFWV9TRUFSQ0ggfSwJCS8qIHNjYW4gKi8KKwl7IDB4MGQsIEtFWV9TVE9QIH0sCisJeyAweDBlLCBLRVlfUEFVU0UgfSwKKwl7IDB4MGYsIEtFWV9MSVNUIH0sCQkvKiBzb3VyY2UgKi8KIAotCVsgMHgxMCBdID0gS0VZX01VVEUsCi0JWyAweDExIF0gPSBLRVlfUkVXSU5ELAkJLyogYmFja3dhcmQgPDwgKi8KLQlbIDB4MTIgXSA9IEtFWV9QT1dFUiwKLQlbIDB4MTMgXSA9IEtFWV9TLAkJCS8qIHNuYXAgKi8KLQlbIDB4MTQgXSA9IEtFWV9BVURJTywJCS8qIHN0ZXJlbyAqLwotCVsgMHgxNSBdID0gS0VZX0NMRUFSLAkJLyogcmVzZXQgKi8KLQlbIDB4MTYgXSA9IEtFWV9QTEFZLAotCVsgMHgxNyBdID0gS0VZX0VOVEVSLAotCVsgMHgxOCBdID0gS0VZX1pPT00sCQkvKiBmdWxsIHNjcmVlbiAqLwotCVsgMHgxOSBdID0gS0VZX0ZBU1RGT1JXQVJELAkvKiBmb3J3YXJkID4+ICovCi0JWyAweDFhIF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgMHgxYiBdID0gS0VZX1ZPTFVNRVVQLAotCVsgMHgxYyBdID0gS0VZX0lORk8sCQkvKiBwcmV2aWV3ICovCi0JWyAweDFkIF0gPSBLRVlfUkVDT1JELAkJLyogcmVjb3JkICovCi0JWyAweDFlIF0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWyAweDFmIF0gPSBLRVlfVk9MVU1FRE9XTiwKKwl7IDB4MTAsIEtFWV9NVVRFIH0sCisJeyAweDExLCBLRVlfUkVXSU5EIH0sCQkvKiBiYWNrd2FyZCA8PCAqLworCXsgMHgxMiwgS0VZX1BPV0VSIH0sCisJeyAweDEzLCBLRVlfQ0FNRVJBIH0sCQkvKiBzbmFwICovCisJeyAweDE0LCBLRVlfQVVESU8gfSwJCS8qIHN0ZXJlbyAqLworCXsgMHgxNSwgS0VZX0NMRUFSIH0sCQkvKiByZXNldCAqLworCXsgMHgxNiwgS0VZX1BMQVkgfSwKKwl7IDB4MTcsIEtFWV9FTlRFUiB9LAorCXsgMHgxOCwgS0VZX1pPT00gfSwJCS8qIGZ1bGwgc2NyZWVuICovCisJeyAweDE5LCBLRVlfRkFTVEZPUldBUkQgfSwJLyogZm9yd2FyZCA+PiAqLworCXsgMHgxYSwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxYiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFjLCBLRVlfSU5GTyB9LAkJLyogcHJldmlldyAqLworCXsgMHgxZCwgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkICovCisJeyAweDFlLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MWYsIEtFWV9WT0xVTUVET1dOIH0sCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19kbnR2X2xpdmVfZHZiX3QpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJfdF90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJfdCwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZG50dl9saXZlX2R2Yl90KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19kbnR2X2xpdmVfZHZiX3RfdGFibGUpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIElPLURBVEEgQkNUVjdFIFJlbW90ZSAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfaW9kYXRhX2JjdHY3ZVtJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAweDQwIF0gPSBLRVlfVFYsCi0JWyAweDIwIF0gPSBLRVlfUkFESU8sCQkvKiBGTSAqLwotCVsgMHg2MCBdID0gS0VZX0VQRywKLQlbIDB4MDAgXSA9IEtFWV9QT1dFUiwKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfaW9kYXRhX2JjdHY3ZVtdID0geworCXsgMHg0MCwgS0VZX1RWIH0sCisJeyAweDIwLCBLRVlfUkFESU8gfSwJCS8qIEZNICovCisJeyAweDYwLCBLRVlfRVBHIH0sCisJeyAweDAwLCBLRVlfUE9XRVIgfSwKIAogCS8qIEtleXMgMCB0byA5ICovCi0JWyAweDQ0IF0gPSBLRVlfMCwJCS8qIDEwICovCi0JWyAweDUwIF0gPSBLRVlfMSwKLQlbIDB4MzAgXSA9IEtFWV8yLAotCVsgMHg3MCBdID0gS0VZXzMsCi0JWyAweDQ4IF0gPSBLRVlfNCwKLQlbIDB4MjggXSA9IEtFWV81LAotCVsgMHg2OCBdID0gS0VZXzYsCi0JWyAweDU4IF0gPSBLRVlfNywKLQlbIDB4MzggXSA9IEtFWV84LAotCVsgMHg3OCBdID0gS0VZXzksCisJeyAweDQ0LCBLRVlfMCB9LAkJLyogMTAgKi8KKwl7IDB4NTAsIEtFWV8xIH0sCisJeyAweDMwLCBLRVlfMiB9LAorCXsgMHg3MCwgS0VZXzMgfSwKKwl7IDB4NDgsIEtFWV80IH0sCisJeyAweDI4LCBLRVlfNSB9LAorCXsgMHg2OCwgS0VZXzYgfSwKKwl7IDB4NTgsIEtFWV83IH0sCisJeyAweDM4LCBLRVlfOCB9LAorCXsgMHg3OCwgS0VZXzkgfSwKIAotCVsgMHgxMCBdID0gS0VZX0wsCQkJLyogTGl2ZSAqLwotCVsgMHgwOCBdID0gS0VZX1QsCQkJLyogVGltZSBTaGlmdCAqLworCXsgMHgxMCwgS0VZX0wgfSwJCS8qIExpdmUgKi8KKwl7IDB4MDgsIEtFWV9USU1FIH0sCQkvKiBUaW1lIFNoaWZ0ICovCiAKLQlbIDB4MTggXSA9IEtFWV9QTEFZUEFVU0UsCQkvKiBQbGF5ICovCisJeyAweDE4LCBLRVlfUExBWVBBVVNFIH0sCS8qIFBsYXkgKi8KIAotCVsgMHgyNCBdID0gS0VZX0VOVEVSLAkJLyogMTEgKi8KLQlbIDB4NjQgXSA9IEtFWV9FU0MsCQkvKiAxMiAqLwotCVsgMHgwNCBdID0gS0VZX00sCQkJLyogTXVsdGkgKi8KKwl7IDB4MjQsIEtFWV9FTlRFUiB9LAkJLyogMTEgKi8KKwl7IDB4NjQsIEtFWV9FU0MgfSwJCS8qIDEyICovCisJeyAweDA0LCBLRVlfTSB9LAkJLyogTXVsdGkgKi8KIAotCVsgMHg1NCBdID0gS0VZX1ZJREVPLAotCVsgMHgzNCBdID0gS0VZX0NIQU5ORUxVUCwKLQlbIDB4NzQgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDB4MTQgXSA9IEtFWV9NVVRFLAorCXsgMHg1NCwgS0VZX1ZJREVPIH0sCisJeyAweDM0LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDc0LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MTQsIEtFWV9NVVRFIH0sCiAKLQlbIDB4NGMgXSA9IEtFWV9TLAkJCS8qIFNWSURFTyAqLwotCVsgMHgyYyBdID0gS0VZX0NIQU5ORUxET1dOLAotCVsgMHg2YyBdID0gS0VZX1ZPTFVNRURPV04sCi0JWyAweDBjIF0gPSBLRVlfWk9PTSwKKwl7IDB4NGMsIEtFWV9WQ1IgfSwJCS8qIFNWSURFTyAqLworCXsgMHgyYywgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDZjLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwYywgS0VZX1pPT00gfSwKIAotCVsgMHg1YyBdID0gS0VZX1BBVVNFLAotCVsgMHgzYyBdID0gS0VZX0MsCQkJLyogfHwgKHJlZCkgKi8KLQlbIDB4N2MgXSA9IEtFWV9SRUNPUkQsCQkvKiByZWNvcmRpbmcgKi8KLQlbIDB4MWMgXSA9IEtFWV9TVE9QLAorCXsgMHg1YywgS0VZX1BBVVNFIH0sCisJeyAweDNjLCBLRVlfUkVEIH0sCQkvKiB8fCAocmVkKSAqLworCXsgMHg3YywgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkaW5nICovCisJeyAweDFjLCBLRVlfU1RPUCB9LAogCi0JWyAweDQxIF0gPSBLRVlfUkVXSU5ELAkJLyogYmFja3dhcmQgPDwgKi8KLQlbIDB4MjEgXSA9IEtFWV9QTEFZLAotCVsgMHg2MSBdID0gS0VZX0ZBU1RGT1JXQVJELAkvKiBmb3J3YXJkID4+ICovCi0JWyAweDAxIF0gPSBLRVlfTkVYVCwJCS8qIHNraXAgPnwgKi8KKwl7IDB4NDEsIEtFWV9SRVdJTkQgfSwJCS8qIGJhY2t3YXJkIDw8ICovCisJeyAweDIxLCBLRVlfUExBWSB9LAorCXsgMHg2MSwgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qIGZvcndhcmQgPj4gKi8KKwl7IDB4MDEsIEtFWV9ORVhUIH0sCQkvKiBza2lwID58ICovCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19pb2RhdGFfYmN0djdlKTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19pb2RhdGFfYmN0djdlX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfaW9kYXRhX2JjdHY3ZSwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfaW9kYXRhX2JjdHY3ZSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfaW9kYXRhX2JjdHY3ZV90YWJsZSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogQURTIFRlY2ggSW5zdGFudCBUViBEVkItVCBQQ0kgUmVtb3RlICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hZHN0ZWNoX2R2Yl90X3BjaVtJUl9LRVlUQUJfU0laRV0gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2Fkc3RlY2hfZHZiX3RfcGNpW10gPSB7CiAJLyogS2V5cyAwIHRvIDkgKi8KLQlbIDB4NGQgXSA9IEtFWV8wLAotCVsgMHg1NyBdID0gS0VZXzEsCi0JWyAweDRmIF0gPSBLRVlfMiwKLQlbIDB4NTMgXSA9IEtFWV8zLAotCVsgMHg1NiBdID0gS0VZXzQsCi0JWyAweDRlIF0gPSBLRVlfNSwKLQlbIDB4NWUgXSA9IEtFWV82LAotCVsgMHg1NCBdID0gS0VZXzcsCi0JWyAweDRjIF0gPSBLRVlfOCwKLQlbIDB4NWMgXSA9IEtFWV85LAorCXsgMHg0ZCwgS0VZXzAgfSwKKwl7IDB4NTcsIEtFWV8xIH0sCisJeyAweDRmLCBLRVlfMiB9LAorCXsgMHg1MywgS0VZXzMgfSwKKwl7IDB4NTYsIEtFWV80IH0sCisJeyAweDRlLCBLRVlfNSB9LAorCXsgMHg1ZSwgS0VZXzYgfSwKKwl7IDB4NTQsIEtFWV83IH0sCisJeyAweDRjLCBLRVlfOCB9LAorCXsgMHg1YywgS0VZXzkgfSwKIAotCVsgMHg1YiBdID0gS0VZX1BPV0VSLAotCVsgMHg1ZiBdID0gS0VZX01VVEUsCi0JWyAweDU1IF0gPSBLRVlfR09UTywKLQlbIDB4NWQgXSA9IEtFWV9TRUFSQ0gsCi0JWyAweDE3IF0gPSBLRVlfRVBHLAkJLyogR3VpZGUgKi8KLQlbIDB4MWYgXSA9IEtFWV9NRU5VLAotCVsgMHgwZiBdID0gS0VZX1VQLAotCVsgMHg0NiBdID0gS0VZX0RPV04sCi0JWyAweDE2IF0gPSBLRVlfTEVGVCwKLQlbIDB4MWUgXSA9IEtFWV9SSUdIVCwKLQlbIDB4MGUgXSA9IEtFWV9TRUxFQ1QsCQkvKiBFbnRlciAqLwotCVsgMHg1YSBdID0gS0VZX0lORk8sCi0JWyAweDUyIF0gPSBLRVlfRVhJVCwKLQlbIDB4NTkgXSA9IEtFWV9QUkVWSU9VUywKLQlbIDB4NTEgXSA9IEtFWV9ORVhULAotCVsgMHg1OCBdID0gS0VZX1JFV0lORCwKLQlbIDB4NTAgXSA9IEtFWV9GT1JXQVJELAotCVsgMHg0NCBdID0gS0VZX1BMQVlQQVVTRSwKLQlbIDB4MDcgXSA9IEtFWV9TVE9QLAotCVsgMHgxYiBdID0gS0VZX1JFQ09SRCwKLQlbIDB4MTMgXSA9IEtFWV9UVU5FUiwJCS8qIExpdmUgKi8KLQlbIDB4MGEgXSA9IEtFWV9BLAotCVsgMHgxMiBdID0gS0VZX0IsCi0JWyAweDAzIF0gPSBLRVlfUFJPRzEsCQkvKiAxICovCi0JWyAweDAxIF0gPSBLRVlfUFJPRzIsCQkvKiAyICovCi0JWyAweDAwIF0gPSBLRVlfUFJPRzMsCQkvKiAzICovCi0JWyAweDA2IF0gPSBLRVlfRFZELAotCVsgMHg0OCBdID0gS0VZX0FVWCwJCS8qIFBob3RvICovCi0JWyAweDQwIF0gPSBLRVlfVklERU8sCi0JWyAweDE5IF0gPSBLRVlfQVVESU8sCQkvKiBNdXNpYyAqLwotCVsgMHgwYiBdID0gS0VZX0NIQU5ORUxVUCwKLQlbIDB4MDggXSA9IEtFWV9DSEFOTkVMRE9XTiwKLQlbIDB4MTUgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDB4MWMgXSA9IEtFWV9WT0xVTUVET1dOLAorCXsgMHg1YiwgS0VZX1BPV0VSIH0sCisJeyAweDVmLCBLRVlfTVVURSB9LAorCXsgMHg1NSwgS0VZX0dPVE8gfSwKKwl7IDB4NWQsIEtFWV9TRUFSQ0ggfSwKKwl7IDB4MTcsIEtFWV9FUEcgfSwJCS8qIEd1aWRlICovCisJeyAweDFmLCBLRVlfTUVOVSB9LAorCXsgMHgwZiwgS0VZX1VQIH0sCisJeyAweDQ2LCBLRVlfRE9XTiB9LAorCXsgMHgxNiwgS0VZX0xFRlQgfSwKKwl7IDB4MWUsIEtFWV9SSUdIVCB9LAorCXsgMHgwZSwgS0VZX1NFTEVDVCB9LAkJLyogRW50ZXIgKi8KKwl7IDB4NWEsIEtFWV9JTkZPIH0sCisJeyAweDUyLCBLRVlfRVhJVCB9LAorCXsgMHg1OSwgS0VZX1BSRVZJT1VTIH0sCisJeyAweDUxLCBLRVlfTkVYVCB9LAorCXsgMHg1OCwgS0VZX1JFV0lORCB9LAorCXsgMHg1MCwgS0VZX0ZPUldBUkQgfSwKKwl7IDB4NDQsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4MDcsIEtFWV9TVE9QIH0sCisJeyAweDFiLCBLRVlfUkVDT1JEIH0sCisJeyAweDEzLCBLRVlfVFVORVIgfSwJCS8qIExpdmUgKi8KKwl7IDB4MGEsIEtFWV9BIH0sCisJeyAweDEyLCBLRVlfQiB9LAorCXsgMHgwMywgS0VZX1BST0cxIH0sCQkvKiAxICovCisJeyAweDAxLCBLRVlfUFJPRzIgfSwJCS8qIDIgKi8KKwl7IDB4MDAsIEtFWV9QUk9HMyB9LAkJLyogMyAqLworCXsgMHgwNiwgS0VZX0RWRCB9LAorCXsgMHg0OCwgS0VZX0FVWCB9LAkJLyogUGhvdG8gKi8KKwl7IDB4NDAsIEtFWV9WSURFTyB9LAorCXsgMHgxOSwgS0VZX0FVRElPIH0sCQkvKiBNdXNpYyAqLworCXsgMHgwYiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwOCwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDE1LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MWMsIEtFWV9WT0xVTUVET1dOIH0sCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hZHN0ZWNoX2R2Yl90X3BjaSk7CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYWRzdGVjaF9kdmJfdF9wY2lfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19hZHN0ZWNoX2R2Yl90X3BjaSwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYWRzdGVjaF9kdmJfdF9wY2kpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2Fkc3RlY2hfZHZiX3RfcGNpX3RhYmxlKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKiBNU0kgVFZAbnl3aGVyZSBNQVNURVIgcmVtb3RlICovCiAKLUlSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX21zaV90dmFueXdoZXJlW0lSX0tFWVRBQl9TSVpFXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfbXNpX3R2YW55d2hlcmVbXSA9IHsKIAkvKiBLZXlzIDAgdG8gOSAqLwotCVsgMHgwMCBdID0gS0VZXzAsCi0JWyAweDAxIF0gPSBLRVlfMSwKLQlbIDB4MDIgXSA9IEtFWV8yLAotCVsgMHgwMyBdID0gS0VZXzMsCi0JWyAweDA0IF0gPSBLRVlfNCwKLQlbIDB4MDUgXSA9IEtFWV81LAotCVsgMHgwNiBdID0gS0VZXzYsCi0JWyAweDA3IF0gPSBLRVlfNywKLQlbIDB4MDggXSA9IEtFWV84LAotCVsgMHgwOSBdID0gS0VZXzksCisJeyAweDAwLCBLRVlfMCB9LAorCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAogCi0JWyAweDBjIF0gPSBLRVlfTVVURSwKLQlbIDB4MGYgXSA9IEtFWV9TQ1JFRU4sCQkvKiBGdWxsIFNjcmVlbiAqLwotCVsgMHgxMCBdID0gS0VZX0YsCQkJLyogRnVudGlvbiAqLwotCVsgMHgxMSBdID0gS0VZX1QsCQkJLyogVGltZSBzaGlmdCAqLwotCVsgMHgxMiBdID0gS0VZX1BPV0VSLAotCVsgMHgxMyBdID0gS0VZX01FRElBLAkJLyogTVRTICovCi0JWyAweDE0IF0gPSBLRVlfU0xPVywKLQlbIDB4MTYgXSA9IEtFWV9SRVdJTkQsCQkvKiBiYWNrd2FyZCA8PCAqLwotCVsgMHgxNyBdID0gS0VZX0VOVEVSLAkJLyogUmV0dXJuICovCi0JWyAweDE4IF0gPSBLRVlfRkFTVEZPUldBUkQsCS8qIGZvcndhcmQgPj4gKi8KLQlbIDB4MWEgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAweDFiIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDFlIF0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWyAweDFmIF0gPSBLRVlfVk9MVU1FRE9XTiwKKwl7IDB4MGMsIEtFWV9NVVRFIH0sCisJeyAweDBmLCBLRVlfU0NSRUVOIH0sCQkvKiBGdWxsIFNjcmVlbiAqLworCXsgMHgxMCwgS0VZX0ZOIH0sCQkvKiBGdW50aW9uICovCisJeyAweDExLCBLRVlfVElNRSB9LAkJLyogVGltZSBzaGlmdCAqLworCXsgMHgxMiwgS0VZX1BPV0VSIH0sCisJeyAweDEzLCBLRVlfTUVESUEgfSwJCS8qIE1UUyAqLworCXsgMHgxNCwgS0VZX1NMT1cgfSwKKwl7IDB4MTYsIEtFWV9SRVdJTkQgfSwJCS8qIGJhY2t3YXJkIDw8ICovCisJeyAweDE3LCBLRVlfRU5URVIgfSwJCS8qIFJldHVybiAqLworCXsgMHgxOCwgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qIGZvcndhcmQgPj4gKi8KKwl7IDB4MWEsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MWIsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxZSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDFmLCBLRVlfVk9MVU1FRE9XTiB9LAogfTsKIAotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfbXNpX3R2YW55d2hlcmUpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfbXNpX3R2YW55d2hlcmUsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX21zaV90dmFueXdoZXJlKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZV90YWJsZSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtNjI2LDcgKzY2OCw3IEBACiAKICovCiAKLUlSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3BsdXNbSVJfS0VZVEFCX1NJWkVdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZV9wbHVzW10gPSB7CiAKIC8qICAtLS0tIFJlbW90ZSBCdXR0b24gTGF5b3V0IC0tLS0KIApAQCAtNjQ4LDU5NiArNjkwLDY0NSBAQAogICAgICA8PCAgICAgIEZVTkMgICAgPj4gICAgIFJFU0VUCiAqLwogCi0JWzB4MDFdID0gS0VZX0tQMSwgICAgICAgICAgICAgLyogMSAqLwotCVsweDBiXSA9IEtFWV9LUDIsICAgICAgICAgICAgIC8qIDIgKi8KLQlbMHgxYl0gPSBLRVlfS1AzLCAgICAgICAgICAgICAvKiAzICovCi0JWzB4MDVdID0gS0VZX0tQNCwgICAgICAgICAgICAgLyogNCAqLwotCVsweDA5XSA9IEtFWV9LUDUsICAgICAgICAgICAgIC8qIDUgKi8KLQlbMHgxNV0gPSBLRVlfS1A2LCAgICAgICAgICAgICAvKiA2ICovCi0JWzB4MDZdID0gS0VZX0tQNywgICAgICAgICAgICAgLyogNyAqLwotCVsweDBhXSA9IEtFWV9LUDgsICAgICAgICAgICAgIC8qIDggKi8KLQlbMHgxMl0gPSBLRVlfS1A5LCAgICAgICAgICAgICAvKiA5ICovCi0JWzB4MDJdID0gS0VZX0tQMCwgICAgICAgICAgICAgLyogMCAqLwotCVsweDEwXSA9IEtFWV9LUFBMVVMsICAgICAgICAgIC8qICsgKi8KLQlbMHgxM10gPSBLRVlfQUdBSU4sICAgICAgICAgICAvKiBSZWNhbGwgKi8KKwl7IDB4MDEsIEtFWV8xIH0sCQkvKiAxICovCisJeyAweDBiLCBLRVlfMiB9LAkJLyogMiAqLworCXsgMHgxYiwgS0VZXzMgfSwJCS8qIDMgKi8KKwl7IDB4MDUsIEtFWV80IH0sCQkvKiA0ICovCisJeyAweDA5LCBLRVlfNSB9LAkJLyogNSAqLworCXsgMHgxNSwgS0VZXzYgfSwJCS8qIDYgKi8KKwl7IDB4MDYsIEtFWV83IH0sCQkvKiA3ICovCisJeyAweDBhLCBLRVlfOCB9LAkJLyogOCAqLworCXsgMHgxMiwgS0VZXzkgfSwJCS8qIDkgKi8KKwl7IDB4MDIsIEtFWV8wIH0sCQkvKiAwICovCisJeyAweDEwLCBLRVlfS1BQTFVTIH0sCQkvKiArICovCisJeyAweDEzLCBLRVlfQUdBSU4gfSwJCS8qIFJlY2FsbCAqLwogCi0JWzB4MWVdID0gS0VZX1BPV0VSLCAgICAgICAgICAgLyogUG93ZXIgKi8KLQlbMHgwN10gPSBLRVlfVFVORVIsICAgICAgICAgICAvKiBTb3VyY2UgKi8KLQlbMHgxY10gPSBLRVlfU0VBUkNILCAgICAgICAgICAvKiBTY2FuICovCi0JWzB4MThdID0gS0VZX01VVEUsICAgICAgICAgICAgLyogTXV0ZSAqLworCXsgMHgxZSwgS0VZX1BPV0VSIH0sCQkvKiBQb3dlciAqLworCXsgMHgwNywgS0VZX1RVTkVSIH0sCQkvKiBTb3VyY2UgKi8KKwl7IDB4MWMsIEtFWV9TRUFSQ0ggfSwJCS8qIFNjYW4gKi8KKwl7IDB4MTgsIEtFWV9NVVRFIH0sCQkvKiBNdXRlICovCiAKLQlbMHgwM10gPSBLRVlfUkFESU8sICAgICAgICAgICAvKiBUVi9GTSAqLworCXsgMHgwMywgS0VZX1JBRElPIH0sCQkvKiBUVi9GTSAqLwogCS8qIFRoZSBuZXh0IGZvdXIga2V5cyBhcmUgZHVwbGljYXRlcyB0aGF0IGFwcGVhciB0byBzZW5kIHRoZQogCSAgIHNhbWUgSVIgY29kZSBhcyBDaCssIENoLSwgPj4sIGFuZCA8PCAuICBUaGUgcmF3IGNvZGUgYXNzaWduZWQKIAkgICB0byB0aGVtIGlzIHRoZSBhY3R1YWwgY29kZSArIDB4MjAgLSB0aGV5IHdpbGwgbmV2ZXIgYmUKIAkgICBkZXRlY3RlZCBhcyBzdWNoIHVubGVzcyBzb21lIHdheSBpcyBkaXNjb3ZlcmVkIHRvIGRpc3Rpbmd1aXNoCiAJICAgdGhlc2UgYnV0dG9ucyBmcm9tIHRob3NlIHRoYXQgaGF2ZSB0aGUgc2FtZSBjb2RlLiAqLwotCVsweDNmXSA9IEtFWV9SSUdIVCwgICAgICAgICAgIC8qIHw+IGFuZCBDaCsgKi8KLQlbMHgzN10gPSBLRVlfTEVGVCwgICAgICAgICAgICAvKiA8fCBhbmQgQ2gtICovCi0JWzB4MmNdID0gS0VZX1VQLCAgICAgICAgICAgICAgLyogXl5VcCBhbmQgPj4gKi8KLQlbMHgyNF0gPSBLRVlfRE9XTiwgICAgICAgICAgICAvKiB2dkRuIGFuZCA8PCAqLworCXsgMHgzZiwgS0VZX1JJR0hUIH0sCQkvKiB8PiBhbmQgQ2grICovCisJeyAweDM3LCBLRVlfTEVGVCB9LAkJLyogPHwgYW5kIENoLSAqLworCXsgMHgyYywgS0VZX1VQIH0sCQkvKiBeXlVwIGFuZCA+PiAqLworCXsgMHgyNCwgS0VZX0RPV04gfSwJCS8qIHZ2RG4gYW5kIDw8ICovCiAKLQlbMHgwMF0gPSBLRVlfUkVDT1JELCAgICAgICAgICAvKiBSZWNvcmQgKi8KLQlbMHgwOF0gPSBLRVlfU1RPUCwgICAgICAgICAgICAvKiBTdG9wICovCi0JWzB4MTFdID0gS0VZX1BMQVksICAgICAgICAgICAgLyogUGxheSAqLworCXsgMHgwMCwgS0VZX1JFQ09SRCB9LAkJLyogUmVjb3JkICovCisJeyAweDA4LCBLRVlfU1RPUCB9LAkJLyogU3RvcCAqLworCXsgMHgxMSwgS0VZX1BMQVkgfSwJCS8qIFBsYXkgKi8KIAotCVsweDBmXSA9IEtFWV9DTE9TRSwgICAgICAgICAgIC8qIE1pbmltaXplICovCi0JWzB4MTldID0gS0VZX1pPT00sICAgICAgICAgICAgLyogWm9vbSAqLwotCVsweDFhXSA9IEtFWV9TSFVGRkxFLCAgICAgICAgIC8qIFNuYXBzaG90ICovCi0JWzB4MGRdID0gS0VZX0xBTkdVQUdFLCAgICAgICAgLyogTVRTICovCisJeyAweDBmLCBLRVlfQ0xPU0UgfSwJCS8qIE1pbmltaXplICovCisJeyAweDE5LCBLRVlfWk9PTSB9LAkJLyogWm9vbSAqLworCXsgMHgxYSwgS0VZX0NBTUVSQSB9LAkJLyogU25hcHNob3QgKi8KKwl7IDB4MGQsIEtFWV9MQU5HVUFHRSB9LAkJLyogTVRTICovCiAKLQlbMHgxNF0gPSBLRVlfVk9MVU1FRE9XTiwgICAgICAvKiBWb2wtICovCi0JWzB4MTZdID0gS0VZX1ZPTFVNRVVQLCAgICAgICAgLyogVm9sKyAqLwotCVsweDE3XSA9IEtFWV9DSEFOTkVMRE9XTiwgICAgIC8qIENoLSAqLwotCVsweDFmXSA9IEtFWV9DSEFOTkVMVVAsICAgICAgIC8qIENoKyAqLworCXsgMHgxNCwgS0VZX1ZPTFVNRURPV04gfSwJLyogVm9sLSAqLworCXsgMHgxNiwgS0VZX1ZPTFVNRVVQIH0sCQkvKiBWb2wrICovCisJeyAweDE3LCBLRVlfQ0hBTk5FTERPV04gfSwJLyogQ2gtICovCisJeyAweDFmLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIENoKyAqLwogCi0JWzB4MDRdID0gS0VZX1JFV0lORCwgICAgICAgICAgLyogPDwgKi8KLQlbMHgwZV0gPSBLRVlfTUVOVSwgICAgICAgICAgICAvKiBGdW5jdGlvbiAqLwotCVsweDBjXSA9IEtFWV9GQVNURk9SV0FSRCwgICAgIC8qID4+ICovCi0JWzB4MWRdID0gS0VZX1JFU1RBUlQsICAgICAgICAgLyogUmVzZXQgKi8KKwl7IDB4MDQsIEtFWV9SRVdJTkQgfSwJCS8qIDw8ICovCisJeyAweDBlLCBLRVlfTUVOVSB9LAkJLyogRnVuY3Rpb24gKi8KKwl7IDB4MGMsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiA+PiAqLworCXsgMHgxZCwgS0VZX1JFU1RBUlQgfSwJCS8qIFJlc2V0ICovCiB9OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfcGx1cyk7CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZV9wbHVzX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfcGx1cywKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfcGx1cyksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfcGx1c190YWJsZSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogQ2luZXJneSAxNDAwIERWQi1UICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19jaW5lcmd5XzE0MDBbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgMHgwMSBdID0gS0VZX1BPV0VSLAotCVsgMHgwMiBdID0gS0VZXzEsCi0JWyAweDAzIF0gPSBLRVlfMiwKLQlbIDB4MDQgXSA9IEtFWV8zLAotCVsgMHgwNSBdID0gS0VZXzQsCi0JWyAweDA2IF0gPSBLRVlfNSwKLQlbIDB4MDcgXSA9IEtFWV82LAotCVsgMHgwOCBdID0gS0VZXzcsCi0JWyAweDA5IF0gPSBLRVlfOCwKLQlbIDB4MGEgXSA9IEtFWV85LAotCVsgMHgwYyBdID0gS0VZXzAsCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2NpbmVyZ3lfMTQwMFtdID0geworCXsgMHgwMSwgS0VZX1BPV0VSIH0sCisJeyAweDAyLCBLRVlfMSB9LAorCXsgMHgwMywgS0VZXzIgfSwKKwl7IDB4MDQsIEtFWV8zIH0sCisJeyAweDA1LCBLRVlfNCB9LAorCXsgMHgwNiwgS0VZXzUgfSwKKwl7IDB4MDcsIEtFWV82IH0sCisJeyAweDA4LCBLRVlfNyB9LAorCXsgMHgwOSwgS0VZXzggfSwKKwl7IDB4MGEsIEtFWV85IH0sCisJeyAweDBjLCBLRVlfMCB9LAogCi0JWyAweDBiIF0gPSBLRVlfVklERU8sCi0JWyAweDBkIF0gPSBLRVlfUkVGUkVTSCwKLQlbIDB4MGUgXSA9IEtFWV9TRUxFQ1QsCi0JWyAweDBmIF0gPSBLRVlfRVBHLAotCVsgMHgxMCBdID0gS0VZX1VQLAotCVsgMHgxMSBdID0gS0VZX0xFRlQsCi0JWyAweDEyIF0gPSBLRVlfT0ssCi0JWyAweDEzIF0gPSBLRVlfUklHSFQsCi0JWyAweDE0IF0gPSBLRVlfRE9XTiwKLQlbIDB4MTUgXSA9IEtFWV9URVhULAotCVsgMHgxNiBdID0gS0VZX0lORk8sCisJeyAweDBiLCBLRVlfVklERU8gfSwKKwl7IDB4MGQsIEtFWV9SRUZSRVNIIH0sCisJeyAweDBlLCBLRVlfU0VMRUNUIH0sCisJeyAweDBmLCBLRVlfRVBHIH0sCisJeyAweDEwLCBLRVlfVVAgfSwKKwl7IDB4MTEsIEtFWV9MRUZUIH0sCisJeyAweDEyLCBLRVlfT0sgfSwKKwl7IDB4MTMsIEtFWV9SSUdIVCB9LAorCXsgMHgxNCwgS0VZX0RPV04gfSwKKwl7IDB4MTUsIEtFWV9URVhUIH0sCisJeyAweDE2LCBLRVlfSU5GTyB9LAogCi0JWyAweDE3IF0gPSBLRVlfUkVELAotCVsgMHgxOCBdID0gS0VZX0dSRUVOLAotCVsgMHgxOSBdID0gS0VZX1lFTExPVywKLQlbIDB4MWEgXSA9IEtFWV9CTFVFLAorCXsgMHgxNywgS0VZX1JFRCB9LAorCXsgMHgxOCwgS0VZX0dSRUVOIH0sCisJeyAweDE5LCBLRVlfWUVMTE9XIH0sCisJeyAweDFhLCBLRVlfQkxVRSB9LAogCi0JWyAweDFiIF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgMHgxYyBdID0gS0VZX1ZPTFVNRVVQLAotCVsgMHgxZCBdID0gS0VZX01VVEUsCi0JWyAweDFlIF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MWYgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKwl7IDB4MWIsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MWMsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxZCwgS0VZX01VVEUgfSwKKwl7IDB4MWUsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDFmLCBLRVlfQ0hBTk5FTERPV04gfSwKIAotCVsgMHg0MCBdID0gS0VZX1BBVVNFLAotCVsgMHg0YyBdID0gS0VZX1BMQVksCi0JWyAweDU4IF0gPSBLRVlfUkVDT1JELAotCVsgMHg1NCBdID0gS0VZX1BSRVZJT1VTLAotCVsgMHg0OCBdID0gS0VZX1NUT1AsCi0JWyAweDVjIF0gPSBLRVlfTkVYVCwKKwl7IDB4NDAsIEtFWV9QQVVTRSB9LAorCXsgMHg0YywgS0VZX1BMQVkgfSwKKwl7IDB4NTgsIEtFWV9SRUNPUkQgfSwKKwl7IDB4NTQsIEtFWV9QUkVWSU9VUyB9LAorCXsgMHg0OCwgS0VZX1NUT1AgfSwKKwl7IDB4NWMsIEtFWV9ORVhUIH0sCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19jaW5lcmd5XzE0MDApOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2NpbmVyZ3lfMTQwMF90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2NpbmVyZ3lfMTQwMCwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfY2luZXJneV8xNDAwKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19jaW5lcmd5XzE0MDBfdGFibGUpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIEFWRVJUViBTVFVESU8gMzAzIFJlbW90ZSAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcnR2XzMwM1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAweDJhIF0gPSBLRVlfMSwKLQlbIDB4MzIgXSA9IEtFWV8yLAotCVsgMHgzYSBdID0gS0VZXzMsCi0JWyAweDRhIF0gPSBLRVlfNCwKLQlbIDB4NTIgXSA9IEtFWV81LAotCVsgMHg1YSBdID0gS0VZXzYsCi0JWyAweDZhIF0gPSBLRVlfNywKLQlbIDB4NzIgXSA9IEtFWV84LAotCVsgMHg3YSBdID0gS0VZXzksCi0JWyAweDBlIF0gPSBLRVlfMCwKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYXZlcnR2XzMwM1tdID0geworCXsgMHgyYSwgS0VZXzEgfSwKKwl7IDB4MzIsIEtFWV8yIH0sCisJeyAweDNhLCBLRVlfMyB9LAorCXsgMHg0YSwgS0VZXzQgfSwKKwl7IDB4NTIsIEtFWV81IH0sCisJeyAweDVhLCBLRVlfNiB9LAorCXsgMHg2YSwgS0VZXzcgfSwKKwl7IDB4NzIsIEtFWV84IH0sCisJeyAweDdhLCBLRVlfOSB9LAorCXsgMHgwZSwgS0VZXzAgfSwKIAotCVsgMHgwMiBdID0gS0VZX1BPV0VSLAotCVsgMHgyMiBdID0gS0VZX1ZJREVPLAotCVsgMHg0MiBdID0gS0VZX0FVRElPLAotCVsgMHg2MiBdID0gS0VZX1pPT00sCi0JWyAweDBhIF0gPSBLRVlfVFYsCi0JWyAweDEyIF0gPSBLRVlfQ0QsCi0JWyAweDFhIF0gPSBLRVlfVEVYVCwKKwl7IDB4MDIsIEtFWV9QT1dFUiB9LAorCXsgMHgyMiwgS0VZX1ZJREVPIH0sCisJeyAweDQyLCBLRVlfQVVESU8gfSwKKwl7IDB4NjIsIEtFWV9aT09NIH0sCisJeyAweDBhLCBLRVlfVFYgfSwKKwl7IDB4MTIsIEtFWV9DRCB9LAorCXsgMHgxYSwgS0VZX1RFWFQgfSwKIAotCVsgMHgxNiBdID0gS0VZX1NVQlRJVExFLAotCVsgMHgxZSBdID0gS0VZX1JFV0lORCwKLQlbIDB4MDYgXSA9IEtFWV9QUklOVCwKKwl7IDB4MTYsIEtFWV9TVUJUSVRMRSB9LAorCXsgMHgxZSwgS0VZX1JFV0lORCB9LAorCXsgMHgwNiwgS0VZX1BSSU5UIH0sCiAKLQlbIDB4MmUgXSA9IEtFWV9TRUFSQ0gsCi0JWyAweDM2IF0gPSBLRVlfU0xFRVAsCi0JWyAweDNlIF0gPSBLRVlfU0hVRkZMRSwKLQlbIDB4MjYgXSA9IEtFWV9NVVRFLAorCXsgMHgyZSwgS0VZX1NFQVJDSCB9LAorCXsgMHgzNiwgS0VZX1NMRUVQIH0sCisJeyAweDNlLCBLRVlfU0hVRkZMRSB9LAorCXsgMHgyNiwgS0VZX01VVEUgfSwKIAotCVsgMHg0ZSBdID0gS0VZX1JFQ09SRCwKLQlbIDB4NTYgXSA9IEtFWV9QQVVTRSwKLQlbIDB4NWUgXSA9IEtFWV9TVE9QLAotCVsgMHg0NiBdID0gS0VZX1BMQVksCisJeyAweDRlLCBLRVlfUkVDT1JEIH0sCisJeyAweDU2LCBLRVlfUEFVU0UgfSwKKwl7IDB4NWUsIEtFWV9TVE9QIH0sCisJeyAweDQ2LCBLRVlfUExBWSB9LAogCi0JWyAweDZlIF0gPSBLRVlfUkVELAotCVsgMHgwYiBdID0gS0VZX0dSRUVOLAotCVsgMHg2NiBdID0gS0VZX1lFTExPVywKLQlbIDB4MDMgXSA9IEtFWV9CTFVFLAorCXsgMHg2ZSwgS0VZX1JFRCB9LAorCXsgMHgwYiwgS0VZX0dSRUVOIH0sCisJeyAweDY2LCBLRVlfWUVMTE9XIH0sCisJeyAweDAzLCBLRVlfQkxVRSB9LAogCi0JWyAweDc2IF0gPSBLRVlfTEVGVCwKLQlbIDB4N2UgXSA9IEtFWV9SSUdIVCwKLQlbIDB4MTMgXSA9IEtFWV9ET1dOLAotCVsgMHgxYiBdID0gS0VZX1VQLAorCXsgMHg3NiwgS0VZX0xFRlQgfSwKKwl7IDB4N2UsIEtFWV9SSUdIVCB9LAorCXsgMHgxMywgS0VZX0RPV04gfSwKKwl7IDB4MWIsIEtFWV9VUCB9LAogfTsKIAotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXZlcnR2XzMwMyk7CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXZlcnR2XzMwM190YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2F2ZXJ0dl8zMDMsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2F2ZXJ0dl8zMDMpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJ0dl8zMDNfdGFibGUpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIERpZ2l0YWxOb3cgRE5UViBMaXZlISBEVkItVCBQcm8gUmVtb3RlICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZidF9wcm9bSVJfS0VZVEFCX1NJWkVdID0gewotCVsgMHgxNiBdID0gS0VZX1BPV0VSLAotCVsgMHg1YiBdID0gS0VZX0hPTUUsCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJ0X3Byb1tdID0geworCXsgMHgxNiwgS0VZX1BPV0VSIH0sCisJeyAweDViLCBLRVlfSE9NRSB9LAogCi0JWyAweDU1IF0gPSBLRVlfVFYsCQkvKiBsaXZlIHR2ICovCi0JWyAweDU4IF0gPSBLRVlfVFVORVIsCQkvKiBkaWdpdGFsIFJhZGlvICovCi0JWyAweDVhIF0gPSBLRVlfUkFESU8sCQkvKiBGTSByYWRpbyAqLwotCVsgMHg1OSBdID0gS0VZX0RWRCwJCS8qIGR2ZCBtZW51ICovCi0JWyAweDAzIF0gPSBLRVlfMSwKLQlbIDB4MDEgXSA9IEtFWV8yLAotCVsgMHgwNiBdID0gS0VZXzMsCi0JWyAweDA5IF0gPSBLRVlfNCwKLQlbIDB4MWQgXSA9IEtFWV81LAotCVsgMHgxZiBdID0gS0VZXzYsCi0JWyAweDBkIF0gPSBLRVlfNywKLQlbIDB4MTkgXSA9IEtFWV84LAotCVsgMHgxYiBdID0gS0VZXzksCi0JWyAweDBjIF0gPSBLRVlfQ0FOQ0VMLAotCVsgMHgxNSBdID0gS0VZXzAsCi0JWyAweDRhIF0gPSBLRVlfQ0xFQVIsCi0JWyAweDEzIF0gPSBLRVlfQkFDSywKLQlbIDB4MDAgXSA9IEtFWV9UQUIsCi0JWyAweDRiIF0gPSBLRVlfVVAsCi0JWyAweDRlIF0gPSBLRVlfTEVGVCwKLQlbIDB4NGYgXSA9IEtFWV9PSywKLQlbIDB4NTIgXSA9IEtFWV9SSUdIVCwKLQlbIDB4NTEgXSA9IEtFWV9ET1dOLAotCVsgMHgxZSBdID0gS0VZX1ZPTFVNRVVQLAotCVsgMHgwYSBdID0gS0VZX1ZPTFVNRURPV04sCi0JWyAweDAyIF0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWyAweDA1IF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgMHgxMSBdID0gS0VZX1JFQ09SRCwKLQlbIDB4MTQgXSA9IEtFWV9QTEFZLAotCVsgMHg0YyBdID0gS0VZX1BBVVNFLAotCVsgMHgxYSBdID0gS0VZX1NUT1AsCi0JWyAweDQwIF0gPSBLRVlfUkVXSU5ELAotCVsgMHgxMiBdID0gS0VZX0ZBU1RGT1JXQVJELAotCVsgMHg0MSBdID0gS0VZX1BSRVZJT1VTU09ORywJLyogcmVwbGF5IHw8ICovCi0JWyAweDQyIF0gPSBLRVlfTkVYVFNPTkcsCS8qIHNraXAgPnwgKi8KLQlbIDB4NTQgXSA9IEtFWV9DQU1FUkEsCQkvKiBjYXB0dXJlICovCi0JWyAweDUwIF0gPSBLRVlfTEFOR1VBR0UsCS8qIHNhcCAqLwotCVsgMHg0NyBdID0gS0VZX1RWMiwJCS8qIHBpcCAqLwotCVsgMHg0ZCBdID0gS0VZX1NDUkVFTiwKLQlbIDB4NDMgXSA9IEtFWV9TVUJUSVRMRSwKLQlbIDB4MTAgXSA9IEtFWV9NVVRFLAotCVsgMHg0OSBdID0gS0VZX0FVRElPLAkJLyogbC9yICovCi0JWyAweDA3IF0gPSBLRVlfU0xFRVAsCi0JWyAweDA4IF0gPSBLRVlfVklERU8sCQkvKiBhL3YgKi8KLQlbIDB4MGUgXSA9IEtFWV9QUkVWSU9VUywJLyogcmVjYWxsICovCi0JWyAweDQ1IF0gPSBLRVlfWk9PTSwJCS8qIHpvb20gKyAqLwotCVsgMHg0NiBdID0gS0VZX0FOR0xFLAkJLyogem9vbSAtICovCi0JWyAweDU2IF0gPSBLRVlfUkVELAotCVsgMHg1NyBdID0gS0VZX0dSRUVOLAotCVsgMHg1YyBdID0gS0VZX1lFTExPVywKLQlbIDB4NWQgXSA9IEtFWV9CTFVFLAorCXsgMHg1NSwgS0VZX1RWIH0sCQkvKiBsaXZlIHR2ICovCisJeyAweDU4LCBLRVlfVFVORVIgfSwJCS8qIGRpZ2l0YWwgUmFkaW8gKi8KKwl7IDB4NWEsIEtFWV9SQURJTyB9LAkJLyogRk0gcmFkaW8gKi8KKwl7IDB4NTksIEtFWV9EVkQgfSwJCS8qIGR2ZCBtZW51ICovCisJeyAweDAzLCBLRVlfMSB9LAorCXsgMHgwMSwgS0VZXzIgfSwKKwl7IDB4MDYsIEtFWV8zIH0sCisJeyAweDA5LCBLRVlfNCB9LAorCXsgMHgxZCwgS0VZXzUgfSwKKwl7IDB4MWYsIEtFWV82IH0sCisJeyAweDBkLCBLRVlfNyB9LAorCXsgMHgxOSwgS0VZXzggfSwKKwl7IDB4MWIsIEtFWV85IH0sCisJeyAweDBjLCBLRVlfQ0FOQ0VMIH0sCisJeyAweDE1LCBLRVlfMCB9LAorCXsgMHg0YSwgS0VZX0NMRUFSIH0sCisJeyAweDEzLCBLRVlfQkFDSyB9LAorCXsgMHgwMCwgS0VZX1RBQiB9LAorCXsgMHg0YiwgS0VZX1VQIH0sCisJeyAweDRlLCBLRVlfTEVGVCB9LAorCXsgMHg0ZiwgS0VZX09LIH0sCisJeyAweDUyLCBLRVlfUklHSFQgfSwKKwl7IDB4NTEsIEtFWV9ET1dOIH0sCisJeyAweDFlLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MGEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAyLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDUsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MTEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MTQsIEtFWV9QTEFZIH0sCisJeyAweDRjLCBLRVlfUEFVU0UgfSwKKwl7IDB4MWEsIEtFWV9TVE9QIH0sCisJeyAweDQwLCBLRVlfUkVXSU5EIH0sCisJeyAweDEyLCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4NDEsIEtFWV9QUkVWSU9VU1NPTkcgfSwJLyogcmVwbGF5IHw8ICovCisJeyAweDQyLCBLRVlfTkVYVFNPTkcgfSwJCS8qIHNraXAgPnwgKi8KKwl7IDB4NTQsIEtFWV9DQU1FUkEgfSwJCS8qIGNhcHR1cmUgKi8KKwl7IDB4NTAsIEtFWV9MQU5HVUFHRSB9LAkJLyogc2FwICovCisJeyAweDQ3LCBLRVlfVFYyIH0sCQkvKiBwaXAgKi8KKwl7IDB4NGQsIEtFWV9TQ1JFRU4gfSwKKwl7IDB4NDMsIEtFWV9TVUJUSVRMRSB9LAorCXsgMHgxMCwgS0VZX01VVEUgfSwKKwl7IDB4NDksIEtFWV9BVURJTyB9LAkJLyogbC9yICovCisJeyAweDA3LCBLRVlfU0xFRVAgfSwKKwl7IDB4MDgsIEtFWV9WSURFTyB9LAkJLyogYS92ICovCisJeyAweDBlLCBLRVlfUFJFVklPVVMgfSwJCS8qIHJlY2FsbCAqLworCXsgMHg0NSwgS0VZX1pPT00gfSwJCS8qIHpvb20gKyAqLworCXsgMHg0NiwgS0VZX0FOR0xFIH0sCQkvKiB6b29tIC0gKi8KKwl7IDB4NTYsIEtFWV9SRUQgfSwKKwl7IDB4NTcsIEtFWV9HUkVFTiB9LAorCXsgMHg1YywgS0VZX1lFTExPVyB9LAorCXsgMHg1ZCwgS0VZX0JMVUUgfSwKIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJ0X3Bybyk7CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfZG50dl9saXZlX2R2YnRfcHJvX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfZG50dl9saXZlX2R2YnRfcHJvLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19kbnR2X2xpdmVfZHZidF9wcm8pLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJ0X3Byb190YWJsZSk7CiAKLUlSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2VtX3RlcnJhdGVjW0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbIDB4MDEgXSA9IEtFWV9DSEFOTkVMLAotCVsgMHgwMiBdID0gS0VZX1NFTEVDVCwKLQlbIDB4MDMgXSA9IEtFWV9NVVRFLAotCVsgMHgwNCBdID0gS0VZX1BPV0VSLAotCVsgMHgwNSBdID0gS0VZXzEsCi0JWyAweDA2IF0gPSBLRVlfMiwKLQlbIDB4MDcgXSA9IEtFWV8zLAotCVsgMHgwOCBdID0gS0VZX0NIQU5ORUxVUCwKLQlbIDB4MDkgXSA9IEtFWV80LAotCVsgMHgwYSBdID0gS0VZXzUsCi0JWyAweDBiIF0gPSBLRVlfNiwKLQlbIDB4MGMgXSA9IEtFWV9DSEFOTkVMRE9XTiwKLQlbIDB4MGQgXSA9IEtFWV83LAotCVsgMHgwZSBdID0gS0VZXzgsCi0JWyAweDBmIF0gPSBLRVlfOSwKLQlbIDB4MTAgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDB4MTEgXSA9IEtFWV8wLAotCVsgMHgxMiBdID0gS0VZX01FTlUsCi0JWyAweDEzIF0gPSBLRVlfUFJJTlQsCi0JWyAweDE0IF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MTYgXSA9IEtFWV9QQVVTRSwKLQlbIDB4MTggXSA9IEtFWV9SRUNPUkQsCi0JWyAweDE5IF0gPSBLRVlfUkVXSU5ELAotCVsgMHgxYSBdID0gS0VZX1BMQVksCi0JWyAweDFiIF0gPSBLRVlfRk9SV0FSRCwKLQlbIDB4MWMgXSA9IEtFWV9CQUNLU1BBQ0UsCi0JWyAweDFlIF0gPSBLRVlfU1RPUCwKLQlbIDB4NDAgXSA9IEtFWV9aT09NLAorc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19lbV90ZXJyYXRlY1tdID0geworCXsgMHgwMSwgS0VZX0NIQU5ORUwgfSwKKwl7IDB4MDIsIEtFWV9TRUxFQ1QgfSwKKwl7IDB4MDMsIEtFWV9NVVRFIH0sCisJeyAweDA0LCBLRVlfUE9XRVIgfSwKKwl7IDB4MDUsIEtFWV8xIH0sCisJeyAweDA2LCBLRVlfMiB9LAorCXsgMHgwNywgS0VZXzMgfSwKKwl7IDB4MDgsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDksIEtFWV80IH0sCisJeyAweDBhLCBLRVlfNSB9LAorCXsgMHgwYiwgS0VZXzYgfSwKKwl7IDB4MGMsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwZCwgS0VZXzcgfSwKKwl7IDB4MGUsIEtFWV84IH0sCisJeyAweDBmLCBLRVlfOSB9LAorCXsgMHgxMCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDExLCBLRVlfMCB9LAorCXsgMHgxMiwgS0VZX01FTlUgfSwKKwl7IDB4MTMsIEtFWV9QUklOVCB9LAorCXsgMHgxNCwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MTYsIEtFWV9QQVVTRSB9LAorCXsgMHgxOCwgS0VZX1JFQ09SRCB9LAorCXsgMHgxOSwgS0VZX1JFV0lORCB9LAorCXsgMHgxYSwgS0VZX1BMQVkgfSwKKwl7IDB4MWIsIEtFWV9GT1JXQVJEIH0sCisJeyAweDFjLCBLRVlfQkFDS1NQQUNFIH0sCisJeyAweDFlLCBLRVlfU1RPUCB9LAorCXsgMHg0MCwgS0VZX1pPT00gfSwKIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2VtX3RlcnJhdGVjKTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19lbV90ZXJyYXRlY190YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2VtX3RlcnJhdGVjLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19lbV90ZXJyYXRlYyksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZW1fdGVycmF0ZWNfdGFibGUpOwogCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19waW5uYWNsZV9ncmV5W0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbIDB4M2EgXSA9IEtFWV8wLAotCVsgMHgzMSBdID0gS0VZXzEsCi0JWyAweDMyIF0gPSBLRVlfMiwKLQlbIDB4MzMgXSA9IEtFWV8zLAotCVsgMHgzNCBdID0gS0VZXzQsCi0JWyAweDM1IF0gPSBLRVlfNSwKLQlbIDB4MzYgXSA9IEtFWV82LAotCVsgMHgzNyBdID0gS0VZXzcsCi0JWyAweDM4IF0gPSBLRVlfOCwKLQlbIDB4MzkgXSA9IEtFWV85LAorc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19waW5uYWNsZV9ncmV5W10gPSB7CisJeyAweDNhLCBLRVlfMCB9LAorCXsgMHgzMSwgS0VZXzEgfSwKKwl7IDB4MzIsIEtFWV8yIH0sCisJeyAweDMzLCBLRVlfMyB9LAorCXsgMHgzNCwgS0VZXzQgfSwKKwl7IDB4MzUsIEtFWV81IH0sCisJeyAweDM2LCBLRVlfNiB9LAorCXsgMHgzNywgS0VZXzcgfSwKKwl7IDB4MzgsIEtFWV84IH0sCisJeyAweDM5LCBLRVlfOSB9LAogCi0JWyAweDJmIF0gPSBLRVlfUE9XRVIsCisJeyAweDJmLCBLRVlfUE9XRVIgfSwKIAotCVsgMHgyZSBdID0gS0VZX1AsCi0JWyAweDFmIF0gPSBLRVlfTCwKLQlbIDB4MmIgXSA9IEtFWV9JLAorCXsgMHgyZSwgS0VZX1AgfSwKKwl7IDB4MWYsIEtFWV9MIH0sCisJeyAweDJiLCBLRVlfSSB9LAogCi0JWyAweDJkIF0gPSBLRVlfU0NSRUVOLAotCVsgMHgxZSBdID0gS0VZX1pPT00sCi0JWyAweDFiIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDBmIF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MTcgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAweDFjIF0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWyAweDI1IF0gPSBLRVlfSU5GTywKKwl7IDB4MmQsIEtFWV9TQ1JFRU4gfSwKKwl7IDB4MWUsIEtFWV9aT09NIH0sCisJeyAweDFiLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MGYsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDE3LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDFjLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MjUsIEtFWV9JTkZPIH0sCiAKLQlbIDB4M2MgXSA9IEtFWV9NVVRFLAorCXsgMHgzYywgS0VZX01VVEUgfSwKIAotCVsgMHgzZCBdID0gS0VZX0xFRlQsCi0JWyAweDNiIF0gPSBLRVlfUklHSFQsCisJeyAweDNkLCBLRVlfTEVGVCB9LAorCXsgMHgzYiwgS0VZX1JJR0hUIH0sCiAKLQlbIDB4M2YgXSA9IEtFWV9VUCwKLQlbIDB4M2UgXSA9IEtFWV9ET1dOLAotCVsgMHgxYSBdID0gS0VZX0VOVEVSLAorCXsgMHgzZiwgS0VZX1VQIH0sCisJeyAweDNlLCBLRVlfRE9XTiB9LAorCXsgMHgxYSwgS0VZX0VOVEVSIH0sCiAKLQlbIDB4MWQgXSA9IEtFWV9NRU5VLAotCVsgMHgxOSBdID0gS0VZX0FHQUlOLAotCVsgMHgxNiBdID0gS0VZX1BSRVZJT1VTU09ORywKLQlbIDB4MTMgXSA9IEtFWV9ORVhUU09ORywKLQlbIDB4MTUgXSA9IEtFWV9QQVVTRSwKLQlbIDB4MGUgXSA9IEtFWV9SRVdJTkQsCi0JWyAweDBkIF0gPSBLRVlfUExBWSwKLQlbIDB4MGIgXSA9IEtFWV9TVE9QLAotCVsgMHgwNyBdID0gS0VZX0ZPUldBUkQsCi0JWyAweDI3IF0gPSBLRVlfUkVDT1JELAotCVsgMHgyNiBdID0gS0VZX1RVTkVSLAotCVsgMHgyOSBdID0gS0VZX1RFWFQsCi0JWyAweDJhIF0gPSBLRVlfTUVESUEsCi0JWyAweDE4IF0gPSBLRVlfRVBHLAorCXsgMHgxZCwgS0VZX01FTlUgfSwKKwl7IDB4MTksIEtFWV9BR0FJTiB9LAorCXsgMHgxNiwgS0VZX1BSRVZJT1VTU09ORyB9LAorCXsgMHgxMywgS0VZX05FWFRTT05HIH0sCisJeyAweDE1LCBLRVlfUEFVU0UgfSwKKwl7IDB4MGUsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MGQsIEtFWV9QTEFZIH0sCisJeyAweDBiLCBLRVlfU1RPUCB9LAorCXsgMHgwNywgS0VZX0ZPUldBUkQgfSwKKwl7IDB4MjcsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MjYsIEtFWV9UVU5FUiB9LAorCXsgMHgyOSwgS0VZX1RFWFQgfSwKKwl7IDB4MmEsIEtFWV9NRURJQSB9LAorCXsgMHgxOCwgS0VZX0VQRyB9LAogfTsKIAotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcGlubmFjbGVfZ3JleSk7CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcGlubmFjbGVfZ3JleV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3Bpbm5hY2xlX2dyZXksCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3Bpbm5hY2xlX2dyZXkpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3Bpbm5hY2xlX2dyZXlfdGFibGUpOwogCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19mbHl2aWRlb1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAweDBmIF0gPSBLRVlfMCwKLQlbIDB4MDMgXSA9IEtFWV8xLAotCVsgMHgwNCBdID0gS0VZXzIsCi0JWyAweDA1IF0gPSBLRVlfMywKLQlbIDB4MDcgXSA9IEtFWV80LAotCVsgMHgwOCBdID0gS0VZXzUsCi0JWyAweDA5IF0gPSBLRVlfNiwKLQlbIDB4MGIgXSA9IEtFWV83LAotCVsgMHgwYyBdID0gS0VZXzgsCi0JWyAweDBkIF0gPSBLRVlfOSwKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZmx5dmlkZW9bXSA9IHsKKwl7IDB4MGYsIEtFWV8wIH0sCisJeyAweDAzLCBLRVlfMSB9LAorCXsgMHgwNCwgS0VZXzIgfSwKKwl7IDB4MDUsIEtFWV8zIH0sCisJeyAweDA3LCBLRVlfNCB9LAorCXsgMHgwOCwgS0VZXzUgfSwKKwl7IDB4MDksIEtFWV82IH0sCisJeyAweDBiLCBLRVlfNyB9LAorCXsgMHgwYywgS0VZXzggfSwKKwl7IDB4MGQsIEtFWV85IH0sCiAKLQlbIDB4MGUgXSA9IEtFWV9NT0RFLCAgICAgICAgIC8vIEFpci9DYWJsZQotCVsgMHgxMSBdID0gS0VZX1ZJREVPLCAgICAgICAgLy8gVmlkZW8KLQlbIDB4MTUgXSA9IEtFWV9BVURJTywgICAgICAgIC8vIEF1ZGlvCi0JWyAweDAwIF0gPSBLRVlfUE9XRVIsICAgICAgICAvLyBQb3dlcgotCVsgMHgxOCBdID0gS0VZX1RVTkVSLCAgICAgICAgLy8gQVYgU291cmNlCi0JWyAweDAyIF0gPSBLRVlfWk9PTSwgICAgICAgICAvLyBGdWxsc2NyZWVuCi0JWyAweDFhIF0gPSBLRVlfTEFOR1VBR0UsICAgICAvLyBTdGVyZW8KLQlbIDB4MWIgXSA9IEtFWV9NVVRFLCAgICAgICAgIC8vIE11dGUKLQlbIDB4MTQgXSA9IEtFWV9WT0xVTUVVUCwgICAgIC8vIFZvbHVtZSArCi0JWyAweDE3IF0gPSBLRVlfVk9MVU1FRE9XTiwgICAvLyBWb2x1bWUgLQotCVsgMHgxMiBdID0gS0VZX0NIQU5ORUxVUCwgICAgLy8gQ2hhbm5lbCArCi0JWyAweDEzIF0gPSBLRVlfQ0hBTk5FTERPV04sICAvLyBDaGFubmVsIC0KLQlbIDB4MDYgXSA9IEtFWV9BR0FJTiwgICAgICAgIC8vIFJlY2FsbAotCVsgMHgxMCBdID0gS0VZX0VOVEVSLCAgICAgICAgLy8gRW50ZXIKKwl7IDB4MGUsIEtFWV9NT0RFIH0sCS8qIEFpci9DYWJsZSAqLworCXsgMHgxMSwgS0VZX1ZJREVPIH0sCS8qIFZpZGVvICovCisJeyAweDE1LCBLRVlfQVVESU8gfSwJLyogQXVkaW8gKi8KKwl7IDB4MDAsIEtFWV9QT1dFUiB9LAkvKiBQb3dlciAqLworCXsgMHgxOCwgS0VZX1RVTkVSIH0sCS8qIEFWIFNvdXJjZSAqLworCXsgMHgwMiwgS0VZX1pPT00gfSwJLyogRnVsbHNjcmVlbiAqLworCXsgMHgxYSwgS0VZX0xBTkdVQUdFIH0sCS8qIFN0ZXJlbyAqLworCXsgMHgxYiwgS0VZX01VVEUgfSwJLyogTXV0ZSAqLworCXsgMHgxNCwgS0VZX1ZPTFVNRVVQIH0sCS8qIFZvbHVtZSArICovCisJeyAweDE3LCBLRVlfVk9MVU1FRE9XTiB9LC8qIFZvbHVtZSAtICovCisJeyAweDEyLCBLRVlfQ0hBTk5FTFVQIH0sLyogQ2hhbm5lbCArICovCisJeyAweDEzLCBLRVlfQ0hBTk5FTERPV04gfSwvKiBDaGFubmVsIC0gKi8KKwl7IDB4MDYsIEtFWV9BR0FJTiB9LAkvKiBSZWNhbGwgKi8KKwl7IDB4MTAsIEtFWV9FTlRFUiB9LAkvKiBFbnRlciAqLwogCi0JWyAweDE5IF0gPSBLRVlfQkFDSywgICAgICAgICAvLyBSZXdpbmQgICggPDw8ICkKLQlbIDB4MWYgXSA9IEtFWV9GT1JXQVJELCAgICAgIC8vIEZvcndhcmQgKCA+Pj4gKQotCVsgMHgwYSBdID0gS0VZX0FOR0xFLCAgICAgICAgLy8gKG5vIGxhYmVsLCBtYXkgYmUgdXNlZCBhcyB0aGUgUEFVU0UgYnV0dG9uKQorCXsgMHgxOSwgS0VZX0JBQ0sgfSwJLyogUmV3aW5kICAoIDw8PCApICovCisJeyAweDFmLCBLRVlfRk9SV0FSRCB9LAkvKiBGb3J3YXJkICggPj4+ICkgKi8KKwl7IDB4MGEsIEtFWV9BTkdMRSB9LAkvKiBubyBsYWJlbCwgbWF5IGJlIHVzZWQgYXMgdGhlIFBBVVNFIGJ1dHRvbiAqLwogfTsKIAotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZmx5dmlkZW8pOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2ZseXZpZGVvX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfZmx5dmlkZW8sCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2ZseXZpZGVvKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19mbHl2aWRlb190YWJsZSk7CiAKLUlSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2ZseWR2YltJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAweDAxIF0gPSBLRVlfWk9PTSwJCS8vIEZ1bGwgU2NyZWVuCi0JWyAweDAwIF0gPSBLRVlfUE9XRVIsCQkvLyBQb3dlcgorc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19mbHlkdmJbXSA9IHsKKwl7IDB4MDEsIEtFWV9aT09NIH0sCQkvKiBGdWxsIFNjcmVlbiAqLworCXsgMHgwMCwgS0VZX1BPV0VSIH0sCQkvKiBQb3dlciAqLwogCi0JWyAweDAzIF0gPSBLRVlfMSwKLQlbIDB4MDQgXSA9IEtFWV8yLAotCVsgMHgwNSBdID0gS0VZXzMsCi0JWyAweDA3IF0gPSBLRVlfNCwKLQlbIDB4MDggXSA9IEtFWV81LAotCVsgMHgwOSBdID0gS0VZXzYsCi0JWyAweDBiIF0gPSBLRVlfNywKLQlbIDB4MGMgXSA9IEtFWV84LAotCVsgMHgwZCBdID0gS0VZXzksCi0JWyAweDA2IF0gPSBLRVlfQUdBSU4sCQkvLyBSZWNhbGwKLQlbIDB4MGYgXSA9IEtFWV8wLAotCVsgMHgxMCBdID0gS0VZX01VVEUsCQkvLyBNdXRlCi0JWyAweDAyIF0gPSBLRVlfUkFESU8sCQkvLyBUVi9SYWRpbwotCVsgMHgxYiBdID0gS0VZX0xBTkdVQUdFLAkJLy8gU0FQIChTZWNvbmQgQXVkaW8gUHJvZ3JhbSkKKwl7IDB4MDMsIEtFWV8xIH0sCisJeyAweDA0LCBLRVlfMiB9LAorCXsgMHgwNSwgS0VZXzMgfSwKKwl7IDB4MDcsIEtFWV80IH0sCisJeyAweDA4LCBLRVlfNSB9LAorCXsgMHgwOSwgS0VZXzYgfSwKKwl7IDB4MGIsIEtFWV83IH0sCisJeyAweDBjLCBLRVlfOCB9LAorCXsgMHgwZCwgS0VZXzkgfSwKKwl7IDB4MDYsIEtFWV9BR0FJTiB9LAkJLyogUmVjYWxsICovCisJeyAweDBmLCBLRVlfMCB9LAorCXsgMHgxMCwgS0VZX01VVEUgfSwJCS8qIE11dGUgKi8KKwl7IDB4MDIsIEtFWV9SQURJTyB9LAkJLyogVFYvUmFkaW8gKi8KKwl7IDB4MWIsIEtFWV9MQU5HVUFHRSB9LAkJLyogU0FQIChTZWNvbmQgQXVkaW8gUHJvZ3JhbSkgKi8KIAotCVsgMHgxNCBdID0gS0VZX1ZPTFVNRVVQLAkJLy8gVk9MKwotCVsgMHgxNyBdID0gS0VZX1ZPTFVNRURPV04sCS8vIFZPTC0KLQlbIDB4MTIgXSA9IEtFWV9DSEFOTkVMVVAsCQkvLyBDSCsKLQlbIDB4MTMgXSA9IEtFWV9DSEFOTkVMRE9XTiwJLy8gQ0gtCi0JWyAweDFkIF0gPSBLRVlfRU5URVIsCQkvLyBFbnRlcgorCXsgMHgxNCwgS0VZX1ZPTFVNRVVQIH0sCQkvKiBWT0wrICovCisJeyAweDE3LCBLRVlfVk9MVU1FRE9XTiB9LAkvKiBWT0wtICovCisJeyAweDEyLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIENIKyAqLworCXsgMHgxMywgS0VZX0NIQU5ORUxET1dOIH0sCS8qIENILSAqLworCXsgMHgxZCwgS0VZX0VOVEVSIH0sCQkvKiBFbnRlciAqLwogCi0JWyAweDFhIF0gPSBLRVlfTU9ERSwJCS8vIFBJUAotCVsgMHgxOCBdID0gS0VZX1RVTkVSLAkJLy8gU291cmNlCisJeyAweDFhLCBLRVlfTU9ERSB9LAkJLyogUElQICovCisJeyAweDE4LCBLRVlfVFVORVIgfSwJCS8qIFNvdXJjZSAqLwogCi0JWyAweDFlIF0gPSBLRVlfUkVDT1JELAkJLy8gUmVjb3JkL1BhdXNlCi0JWyAweDE1IF0gPSBLRVlfQU5HTEUsCQkvLyBTd2FwIChubyBsYWJlbCBvbiBrZXkpCi0JWyAweDFjIF0gPSBLRVlfUEFVU0UsCQkvLyBUaW1lc2hpZnQvUGF1c2UKLQlbIDB4MTkgXSA9IEtFWV9CQUNLLAkJLy8gUmV3aW5kIDw8Ci0JWyAweDBhIF0gPSBLRVlfUExBWVBBVVNFLAkJLy8gUGxheS9QYXVzZQotCVsgMHgxZiBdID0gS0VZX0ZPUldBUkQsCQkvLyBGb3J3YXJkID4+Ci0JWyAweDE2IF0gPSBLRVlfUFJFVklPVVMsCQkvLyBCYWNrIHw8PAotCVsgMHgxMSBdID0gS0VZX1NUT1AsCQkvLyBTdG9wCi0JWyAweDBlIF0gPSBLRVlfTkVYVCwJCS8vIEVuZCA+PnwKKwl7IDB4MWUsIEtFWV9SRUNPUkQgfSwJCS8qIFJlY29yZC9QYXVzZSAqLworCXsgMHgxNSwgS0VZX0FOR0xFIH0sCQkvKiBTd2FwIChubyBsYWJlbCBvbiBrZXkpICovCisJeyAweDFjLCBLRVlfUEFVU0UgfSwJCS8qIFRpbWVzaGlmdC9QYXVzZSAqLworCXsgMHgxOSwgS0VZX0JBQ0sgfSwJCS8qIFJld2luZCA8PCAqLworCXsgMHgwYSwgS0VZX1BMQVlQQVVTRSB9LAkvKiBQbGF5L1BhdXNlICovCisJeyAweDFmLCBLRVlfRk9SV0FSRCB9LAkJLyogRm9yd2FyZCA+PiAqLworCXsgMHgxNiwgS0VZX1BSRVZJT1VTIH0sCQkvKiBCYWNrIHw8PCAqLworCXsgMHgxMSwgS0VZX1NUT1AgfSwJCS8qIFN0b3AgKi8KKwl7IDB4MGUsIEtFWV9ORVhUIH0sCQkvKiBFbmQgPj58ICovCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19mbHlkdmIpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2ZseWR2Yl90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2ZseWR2YiwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZmx5ZHZiKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19mbHlkdmJfdGFibGUpOwogCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19jaW5lcmd5W0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbIDB4MDAgXSA9IEtFWV8wLAotCVsgMHgwMSBdID0gS0VZXzEsCi0JWyAweDAyIF0gPSBLRVlfMiwKLQlbIDB4MDMgXSA9IEtFWV8zLAotCVsgMHgwNCBdID0gS0VZXzQsCi0JWyAweDA1IF0gPSBLRVlfNSwKLQlbIDB4MDYgXSA9IEtFWV82LAotCVsgMHgwNyBdID0gS0VZXzcsCi0JWyAweDA4IF0gPSBLRVlfOCwKLQlbIDB4MDkgXSA9IEtFWV85LAorc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19jaW5lcmd5W10gPSB7CisJeyAweDAwLCBLRVlfMCB9LAorCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAogCi0JWyAweDBhIF0gPSBLRVlfUE9XRVIsCi0JWyAweDBiIF0gPSBLRVlfUFJPRzEsICAgICAgICAgICAvLyBhcHAKLQlbIDB4MGMgXSA9IEtFWV9aT09NLCAgICAgICAgICAgIC8vIHpvb20vZnVsbHNjcmVlbgotCVsgMHgwZCBdID0gS0VZX0NIQU5ORUxVUCwgICAgICAgLy8gY2hhbm5lbAotCVsgMHgwZSBdID0gS0VZX0NIQU5ORUxET1dOLCAgICAgLy8gY2hhbm5lbC0KLQlbIDB4MGYgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDB4MTAgXSA9IEtFWV9WT0xVTUVET1dOLAotCVsgMHgxMSBdID0gS0VZX1RVTkVSLCAgICAgICAgICAgLy8gQVYKLQlbIDB4MTIgXSA9IEtFWV9OVU1MT0NLLCAgICAgICAgIC8vIC0vLS0KLQlbIDB4MTMgXSA9IEtFWV9BVURJTywgICAgICAgICAgIC8vIGF1ZGlvCi0JWyAweDE0IF0gPSBLRVlfTVVURSwKLQlbIDB4MTUgXSA9IEtFWV9VUCwKLQlbIDB4MTYgXSA9IEtFWV9ET1dOLAotCVsgMHgxNyBdID0gS0VZX0xFRlQsCi0JWyAweDE4IF0gPSBLRVlfUklHSFQsCi0JWyAweDE5IF0gPSBCVE5fTEVGVCwKLQlbIDB4MWEgXSA9IEJUTl9SSUdIVCwKLQlbIDB4MWIgXSA9IEtFWV9XV1csICAgICAgICAgICAgIC8vIHRleHQKLQlbIDB4MWMgXSA9IEtFWV9SRVdJTkQsCi0JWyAweDFkIF0gPSBLRVlfRk9SV0FSRCwKLQlbIDB4MWUgXSA9IEtFWV9SRUNPUkQsCi0JWyAweDFmIF0gPSBLRVlfUExBWSwKLQlbIDB4MjAgXSA9IEtFWV9QUkVWSU9VU1NPTkcsCi0JWyAweDIxIF0gPSBLRVlfTkVYVFNPTkcsCi0JWyAweDIyIF0gPSBLRVlfUEFVU0UsCi0JWyAweDIzIF0gPSBLRVlfU1RPUCwKKwl7IDB4MGEsIEtFWV9QT1dFUiB9LAorCXsgMHgwYiwgS0VZX1BST0cxIH0sCQkvKiBhcHAgKi8KKwl7IDB4MGMsIEtFWV9aT09NIH0sCQkvKiB6b29tL2Z1bGxzY3JlZW4gKi8KKwl7IDB4MGQsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCAqLworCXsgMHgwZSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwtICovCisJeyAweDBmLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MTAsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDExLCBLRVlfVFVORVIgfSwJCS8qIEFWICovCisJeyAweDEyLCBLRVlfTlVNTE9DSyB9LAkJLyogLS8tLSAqLworCXsgMHgxMywgS0VZX0FVRElPIH0sCQkvKiBhdWRpbyAqLworCXsgMHgxNCwgS0VZX01VVEUgfSwKKwl7IDB4MTUsIEtFWV9VUCB9LAorCXsgMHgxNiwgS0VZX0RPV04gfSwKKwl7IDB4MTcsIEtFWV9MRUZUIH0sCisJeyAweDE4LCBLRVlfUklHSFQgfSwKKwl7IDB4MTksIEJUTl9MRUZULCB9LAorCXsgMHgxYSwgQlROX1JJR0hULCB9LAorCXsgMHgxYiwgS0VZX1dXVyB9LAkJLyogdGV4dCAqLworCXsgMHgxYywgS0VZX1JFV0lORCB9LAorCXsgMHgxZCwgS0VZX0ZPUldBUkQgfSwKKwl7IDB4MWUsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MWYsIEtFWV9QTEFZIH0sCisJeyAweDIwLCBLRVlfUFJFVklPVVNTT05HIH0sCisJeyAweDIxLCBLRVlfTkVYVFNPTkcgfSwKKwl7IDB4MjIsIEtFWV9QQVVTRSB9LAorCXsgMHgyMywgS0VZX1NUT1AgfSwKIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2NpbmVyZ3kpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2NpbmVyZ3lfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19jaW5lcmd5LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19jaW5lcmd5KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19jaW5lcmd5X3RhYmxlKTsKIAogLyogQWxmb25zIEdlc2VyIDxhLmdlc2VyQGNveC5uZXQ+CiAgKiB1cGRhdGVzIGZyb20gSm9iIEQuIFIuIEJvcmdlcyA8am9iZHJiQGlnLmNvbS5icj4gKi8KLUlSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2V6dHZbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgMHgxMiBdID0gS0VZX1BPV0VSLAotCVsgMHgwMSBdID0gS0VZX1RWLCAgICAgICAgICAgICAvLyBEVlIKLQlbIDB4MTUgXSA9IEtFWV9EVkQsICAgICAgICAgICAgLy8gRFZECi0JWyAweDE3IF0gPSBLRVlfQVVESU8sICAgICAgICAgIC8vIG11c2ljCi0JCQkJICAgICAvLyBEVlIgbW9kZSAvIERWRCBtb2RlIC8gbXVzaWMgbW9kZQorc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19lenR2W10gPSB7CisJeyAweDEyLCBLRVlfUE9XRVIgfSwKKwl7IDB4MDEsIEtFWV9UViB9LAkvKiBEVlIgKi8KKwl7IDB4MTUsIEtFWV9EVkQgfSwJLyogRFZEICovCisJeyAweDE3LCBLRVlfQVVESU8gfSwJLyogbXVzaWMgKi8KKwkJCQkvKiBEVlIgbW9kZSAvIERWRCBtb2RlIC8gbXVzaWMgbW9kZSAqLwogCi0JWyAweDFiIF0gPSBLRVlfTVVURSwgICAgICAgICAgIC8vIG11dGUKLQlbIDB4MDIgXSA9IEtFWV9MQU5HVUFHRSwgICAgICAgLy8gTVRTL1NBUCAvIGF1ZGlvIC8gYXV0b3NlZWsKLQlbIDB4MWUgXSA9IEtFWV9TVUJUSVRMRSwgICAgICAgLy8gY2xvc2VkIGNhcHRpb25pbmcgLyBzdWJ0aXRsZSAvIHNlZWsKLQlbIDB4MTYgXSA9IEtFWV9aT09NLCAgICAgICAgICAgLy8gZnVsbCBzY3JlZW4KLQlbIDB4MWMgXSA9IEtFWV9WSURFTywgICAgICAgICAgLy8gdmlkZW8gc291cmNlIC8gZWplY3QgLyBkZWxhbGwKLQlbIDB4MWQgXSA9IEtFWV9SRVNUQVJULCAgICAgICAgLy8gcGxheWJhY2sgLyBhbmdsZSAvIGRlbAotCVsgMHgyZiBdID0gS0VZX1NFQVJDSCwgICAgICAgICAvLyBzY2FuIC8gbWVudSAvIHBsYXlsaXN0Ci0JWyAweDMwIF0gPSBLRVlfQ0hBTk5FTCwgICAgICAgIC8vIENIIHN1cmZpbmcgLyBib29rbWFyayAvIG1lbW8KKwl7IDB4MWIsIEtFWV9NVVRFIH0sCS8qIG11dGUgKi8KKwl7IDB4MDIsIEtFWV9MQU5HVUFHRSB9LAkvKiBNVFMvU0FQIC8gYXVkaW8gLyBhdXRvc2VlayAqLworCXsgMHgxZSwgS0VZX1NVQlRJVExFIH0sCS8qIGNsb3NlZCBjYXB0aW9uaW5nIC8gc3VidGl0bGUgLyBzZWVrICovCisJeyAweDE2LCBLRVlfWk9PTSB9LAkvKiBmdWxsIHNjcmVlbiAqLworCXsgMHgxYywgS0VZX1ZJREVPIH0sCS8qIHZpZGVvIHNvdXJjZSAvIGVqZWN0IC8gZGVsYWxsICovCisJeyAweDFkLCBLRVlfUkVTVEFSVCB9LAkvKiBwbGF5YmFjayAvIGFuZ2xlIC8gZGVsICovCisJeyAweDJmLCBLRVlfU0VBUkNIIH0sCS8qIHNjYW4gLyBtZW51IC8gcGxheWxpc3QgKi8KKwl7IDB4MzAsIEtFWV9DSEFOTkVMIH0sCS8qIENIIHN1cmZpbmcgLyBib29rbWFyayAvIG1lbW8gKi8KIAotCVsgMHgzMSBdID0gS0VZX0hFTFAsICAgICAgICAgICAvLyBoZWxwCi0JWyAweDMyIF0gPSBLRVlfTU9ERSwgICAgICAgICAgIC8vIG51bS9tZW1vCi0JWyAweDMzIF0gPSBLRVlfRVNDLCAgICAgICAgICAgIC8vIGNhbmNlbAorCXsgMHgzMSwgS0VZX0hFTFAgfSwJLyogaGVscCAqLworCXsgMHgzMiwgS0VZX01PREUgfSwJLyogbnVtL21lbW8gKi8KKwl7IDB4MzMsIEtFWV9FU0MgfSwJLyogY2FuY2VsICovCiAKLQlbIDB4MGMgXSA9IEtFWV9VUCwgICAgICAgICAgICAgLy8gdXAKLQlbIDB4MTAgXSA9IEtFWV9ET1dOLCAgICAgICAgICAgLy8gZG93bgotCVsgMHgwOCBdID0gS0VZX0xFRlQsICAgICAgICAgICAvLyBsZWZ0Ci0JWyAweDA0IF0gPSBLRVlfUklHSFQsICAgICAgICAgIC8vIHJpZ2h0Ci0JWyAweDAzIF0gPSBLRVlfU0VMRUNULCAgICAgICAgIC8vIHNlbGVjdAorCXsgMHgwYywgS0VZX1VQIH0sCS8qIHVwICovCisJeyAweDEwLCBLRVlfRE9XTiB9LAkvKiBkb3duICovCisJeyAweDA4LCBLRVlfTEVGVCB9LAkvKiBsZWZ0ICovCisJeyAweDA0LCBLRVlfUklHSFQgfSwJLyogcmlnaHQgKi8KKwl7IDB4MDMsIEtFWV9TRUxFQ1QgfSwJLyogc2VsZWN0ICovCiAKLQlbIDB4MWYgXSA9IEtFWV9SRVdJTkQsICAgICAgICAgLy8gcmV3aW5kCi0JWyAweDIwIF0gPSBLRVlfUExBWVBBVVNFLCAgICAgIC8vIHBsYXkvcGF1c2UKLQlbIDB4MjkgXSA9IEtFWV9GT1JXQVJELCAgICAgICAgLy8gZm9yd2FyZAotCVsgMHgxNCBdID0gS0VZX0FHQUlOLCAgICAgICAgICAvLyByZXBlYXQKLQlbIDB4MmIgXSA9IEtFWV9SRUNPUkQsICAgICAgICAgLy8gcmVjb3JkaW5nCi0JWyAweDJjIF0gPSBLRVlfU1RPUCwgICAgICAgICAgIC8vIHN0b3AKLQlbIDB4MmQgXSA9IEtFWV9QTEFZLCAgICAgICAgICAgLy8gcGxheQotCVsgMHgyZSBdID0gS0VZX1NIVUZGTEUsICAgICAgICAvLyBzbmFwc2hvdCAvIHNodWZmbGUKKwl7IDB4MWYsIEtFWV9SRVdJTkQgfSwJLyogcmV3aW5kICovCisJeyAweDIwLCBLRVlfUExBWVBBVVNFIH0sLyogcGxheS9wYXVzZSAqLworCXsgMHgyOSwgS0VZX0ZPUldBUkQgfSwJLyogZm9yd2FyZCAqLworCXsgMHgxNCwgS0VZX0FHQUlOIH0sCS8qIHJlcGVhdCAqLworCXsgMHgyYiwgS0VZX1JFQ09SRCB9LAkvKiByZWNvcmRpbmcgKi8KKwl7IDB4MmMsIEtFWV9TVE9QIH0sCS8qIHN0b3AgKi8KKwl7IDB4MmQsIEtFWV9QTEFZIH0sCS8qIHBsYXkgKi8KKwl7IDB4MmUsIEtFWV9DQU1FUkEgfSwJLyogc25hcHNob3QgLyBzaHVmZmxlICovCiAKLQlbIDB4MDAgXSA9IEtFWV8wLAotCVsgMHgwNSBdID0gS0VZXzEsCi0JWyAweDA2IF0gPSBLRVlfMiwKLQlbIDB4MDcgXSA9IEtFWV8zLAotCVsgMHgwOSBdID0gS0VZXzQsCi0JWyAweDBhIF0gPSBLRVlfNSwKLQlbIDB4MGIgXSA9IEtFWV82LAotCVsgMHgwZCBdID0gS0VZXzcsCi0JWyAweDBlIF0gPSBLRVlfOCwKLQlbIDB4MGYgXSA9IEtFWV85LAorCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDUsIEtFWV8xIH0sCisJeyAweDA2LCBLRVlfMiB9LAorCXsgMHgwNywgS0VZXzMgfSwKKwl7IDB4MDksIEtFWV80IH0sCisJeyAweDBhLCBLRVlfNSB9LAorCXsgMHgwYiwgS0VZXzYgfSwKKwl7IDB4MGQsIEtFWV83IH0sCisJeyAweDBlLCBLRVlfOCB9LAorCXsgMHgwZiwgS0VZXzkgfSwKIAotCVsgMHgyYSBdID0gS0VZX1ZPTFVNRVVQLAotCVsgMHgxMSBdID0gS0VZX1ZPTFVNRURPV04sCi0JWyAweDE4IF0gPSBLRVlfQ0hBTk5FTFVQLCAgICAgIC8vIENILnRyYWNraW5nIHVwCi0JWyAweDE5IF0gPSBLRVlfQ0hBTk5FTERPV04sICAgIC8vIENILnRyYWNraW5nIGRvd24KKwl7IDB4MmEsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxMSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MTgsIEtFWV9DSEFOTkVMVVAgfSwvKiBDSC50cmFja2luZyB1cCAqLworCXsgMHgxOSwgS0VZX0NIQU5ORUxET1dOIH0sLyogQ0gudHJhY2tpbmcgZG93biAqLwogCi0JWyAweDEzIF0gPSBLRVlfRU5URVIsICAgICAgICAvLyBlbnRlcgotCVsgMHgyMSBdID0gS0VZX0RPVCwgICAgICAgICAgLy8gLiAoZGVjaW1hbCBkb3QpCisJeyAweDEzLCBLRVlfRU5URVIgfSwJLyogZW50ZXIgKi8KKwl7IDB4MjEsIEtFWV9ET1QgfSwJLyogLiAoZGVjaW1hbCBkb3QpICovCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lenR2KTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19lenR2X3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfZXp0diwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZXp0diksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZXp0dl90YWJsZSk7CiAKIC8qIEFsZXggSGVybWFubiA8Z2FhZkBnbXgubmV0PiAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhW0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbIDB4MjggXSA9IEtFWV8xLAotCVsgMHgxOCBdID0gS0VZXzIsCi0JWyAweDM4IF0gPSBLRVlfMywKLQlbIDB4MjQgXSA9IEtFWV80LAotCVsgMHgxNCBdID0gS0VZXzUsCi0JWyAweDM0IF0gPSBLRVlfNiwKLQlbIDB4MmMgXSA9IEtFWV83LAotCVsgMHgxYyBdID0gS0VZXzgsCi0JWyAweDNjIF0gPSBLRVlfOSwKLQlbIDB4MjIgXSA9IEtFWV8wLAorc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19hdmVybWVkaWFbXSA9IHsKKwl7IDB4MjgsIEtFWV8xIH0sCisJeyAweDE4LCBLRVlfMiB9LAorCXsgMHgzOCwgS0VZXzMgfSwKKwl7IDB4MjQsIEtFWV80IH0sCisJeyAweDE0LCBLRVlfNSB9LAorCXsgMHgzNCwgS0VZXzYgfSwKKwl7IDB4MmMsIEtFWV83IH0sCisJeyAweDFjLCBLRVlfOCB9LAorCXsgMHgzYywgS0VZXzkgfSwKKwl7IDB4MjIsIEtFWV8wIH0sCiAKLQlbIDB4MjAgXSA9IEtFWV9UViwJCS8qIFRWL0ZNICovCi0JWyAweDEwIF0gPSBLRVlfQ0QsCQkvKiBDRCAqLwotCVsgMHgzMCBdID0gS0VZX1RFWFQsCQkvKiBURUxFVEVYVCAqLwotCVsgMHgwMCBdID0gS0VZX1BPV0VSLAkJLyogUE9XRVIgKi8KKwl7IDB4MjAsIEtFWV9UViB9LAkJLyogVFYvRk0gKi8KKwl7IDB4MTAsIEtFWV9DRCB9LAkJLyogQ0QgKi8KKwl7IDB4MzAsIEtFWV9URVhUIH0sCQkvKiBURUxFVEVYVCAqLworCXsgMHgwMCwgS0VZX1BPV0VSIH0sCQkvKiBQT1dFUiAqLwogCi0JWyAweDA4IF0gPSBLRVlfVklERU8sCQkvKiBWSURFTyAqLwotCVsgMHgwNCBdID0gS0VZX0FVRElPLAkJLyogQVVESU8gKi8KLQlbIDB4MGMgXSA9IEtFWV9aT09NLAkJLyogRlVMTCBTQ1JFRU4gKi8KKwl7IDB4MDgsIEtFWV9WSURFTyB9LAkJLyogVklERU8gKi8KKwl7IDB4MDQsIEtFWV9BVURJTyB9LAkJLyogQVVESU8gKi8KKwl7IDB4MGMsIEtFWV9aT09NIH0sCQkvKiBGVUxMIFNDUkVFTiAqLwogCi0JWyAweDEyIF0gPSBLRVlfU1VCVElUTEUsCS8qIERJU1BMQVkgKi8KLQlbIDB4MzIgXSA9IEtFWV9SRVdJTkQsCQkvKiBMT09QCSovCi0JWyAweDAyIF0gPSBLRVlfUFJJTlQsCQkvKiBQUkVWSUVXICovCisJeyAweDEyLCBLRVlfU1VCVElUTEUgfSwJCS8qIERJU1BMQVkgKi8KKwl7IDB4MzIsIEtFWV9SRVdJTkQgfSwJCS8qIExPT1AJKi8KKwl7IDB4MDIsIEtFWV9QUklOVCB9LAkJLyogUFJFVklFVyAqLwogCi0JWyAweDJhIF0gPSBLRVlfU0VBUkNILAkJLyogQVVUT1NDQU4gKi8KLQlbIDB4MWEgXSA9IEtFWV9TTEVFUCwJCS8qIEZSRUVaRSAqLwotCVsgMHgzYSBdID0gS0VZX1NIVUZGTEUsCQkvKiBTTkFQU0hPVCAqLwotCVsgMHgwYSBdID0gS0VZX01VVEUsCQkvKiBNVVRFICovCisJeyAweDJhLCBLRVlfU0VBUkNIIH0sCQkvKiBBVVRPU0NBTiAqLworCXsgMHgxYSwgS0VZX1NMRUVQIH0sCQkvKiBGUkVFWkUgKi8KKwl7IDB4M2EsIEtFWV9DQU1FUkEgfSwJCS8qIFNOQVBTSE9UICovCisJeyAweDBhLCBLRVlfTVVURSB9LAkJLyogTVVURSAqLwogCi0JWyAweDI2IF0gPSBLRVlfUkVDT1JELAkJLyogUkVDT1JEICovCi0JWyAweDE2IF0gPSBLRVlfUEFVU0UsCQkvKiBQQVVTRSAqLwotCVsgMHgzNiBdID0gS0VZX1NUT1AsCQkvKiBTVE9QICovCi0JWyAweDA2IF0gPSBLRVlfUExBWSwJCS8qIFBMQVkgKi8KKwl7IDB4MjYsIEtFWV9SRUNPUkQgfSwJCS8qIFJFQ09SRCAqLworCXsgMHgxNiwgS0VZX1BBVVNFIH0sCQkvKiBQQVVTRSAqLworCXsgMHgzNiwgS0VZX1NUT1AgfSwJCS8qIFNUT1AgKi8KKwl7IDB4MDYsIEtFWV9QTEFZIH0sCQkvKiBQTEFZICovCiAKLQlbIDB4MmUgXSA9IEtFWV9SRUQsCQkvKiBSRUQgKi8KLQlbIDB4MjEgXSA9IEtFWV9HUkVFTiwJCS8qIEdSRUVOICovCi0JWyAweDBlIF0gPSBLRVlfWUVMTE9XLAkJLyogWUVMTE9XICovCi0JWyAweDAxIF0gPSBLRVlfQkxVRSwJCS8qIEJMVUUgKi8KKwl7IDB4MmUsIEtFWV9SRUQgfSwJCS8qIFJFRCAqLworCXsgMHgyMSwgS0VZX0dSRUVOIH0sCQkvKiBHUkVFTiAqLworCXsgMHgwZSwgS0VZX1lFTExPVyB9LAkJLyogWUVMTE9XICovCisJeyAweDAxLCBLRVlfQkxVRSB9LAkJLyogQkxVRSAqLwogCi0JWyAweDFlIF0gPSBLRVlfVk9MVU1FRE9XTiwJLyogVk9MVU1FLSAqLwotCVsgMHgzZSBdID0gS0VZX1ZPTFVNRVVQLAkvKiBWT0xVTUUrICovCi0JWyAweDExIF0gPSBLRVlfQ0hBTk5FTERPV04sCS8qIENIQU5ORUwvUEFHRS0gKi8KLQlbIDB4MzEgXSA9IEtFWV9DSEFOTkVMVVAJLyogQ0hBTk5FTC9QQUdFKyAqLworCXsgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwJLyogVk9MVU1FLSAqLworCXsgMHgzZSwgS0VZX1ZPTFVNRVVQIH0sCQkvKiBWT0xVTUUrICovCisJeyAweDExLCBLRVlfQ0hBTk5FTERPV04gfSwJLyogQ0hBTk5FTC9QQUdFLSAqLworCXsgMHgzMSwgS0VZX0NIQU5ORUxVUCB9CQkvKiBDSEFOTkVML1BBR0UrICovCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWEpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2F2ZXJtZWRpYV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2F2ZXJtZWRpYSwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYXZlcm1lZGlhKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfdGFibGUpOwogCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc192aWRlb21hdGVfdHZfcHZyW0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbIDB4MTQgXSA9IEtFWV9NVVRFLAotCVsgMHgyNCBdID0gS0VZX1pPT00sCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3ZpZGVvbWF0ZV90dl9wdnJbXSA9IHsKKwl7IDB4MTQsIEtFWV9NVVRFIH0sCisJeyAweDI0LCBLRVlfWk9PTSB9LAogCi0JWyAweDAxIF0gPSBLRVlfRFZELAotCVsgMHgyMyBdID0gS0VZX1JBRElPLAotCVsgMHgwMCBdID0gS0VZX1RWLAorCXsgMHgwMSwgS0VZX0RWRCB9LAorCXsgMHgyMywgS0VZX1JBRElPIH0sCisJeyAweDAwLCBLRVlfVFYgfSwKIAotCVsgMHgwYSBdID0gS0VZX1JFV0lORCwKLQlbIDB4MDggXSA9IEtFWV9QTEFZUEFVU0UsCi0JWyAweDBmIF0gPSBLRVlfRk9SV0FSRCwKKwl7IDB4MGEsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MDgsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4MGYsIEtFWV9GT1JXQVJEIH0sCiAKLQlbIDB4MDIgXSA9IEtFWV9QUkVWSU9VUywKLQlbIDB4MDcgXSA9IEtFWV9TVE9QLAotCVsgMHgwNiBdID0gS0VZX05FWFQsCisJeyAweDAyLCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4MDcsIEtFWV9TVE9QIH0sCisJeyAweDA2LCBLRVlfTkVYVCB9LAogCi0JWyAweDBjIF0gPSBLRVlfVVAsCi0JWyAweDBlIF0gPSBLRVlfRE9XTiwKLQlbIDB4MGIgXSA9IEtFWV9MRUZULAotCVsgMHgwZCBdID0gS0VZX1JJR0hULAotCVsgMHgxMSBdID0gS0VZX09LLAorCXsgMHgwYywgS0VZX1VQIH0sCisJeyAweDBlLCBLRVlfRE9XTiB9LAorCXsgMHgwYiwgS0VZX0xFRlQgfSwKKwl7IDB4MGQsIEtFWV9SSUdIVCB9LAorCXsgMHgxMSwgS0VZX09LIH0sCiAKLQlbIDB4MDMgXSA9IEtFWV9NRU5VLAotCVsgMHgwOSBdID0gS0VZX1NFVFVQLAotCVsgMHgwNSBdID0gS0VZX1ZJREVPLAotCVsgMHgyMiBdID0gS0VZX0NIQU5ORUwsCisJeyAweDAzLCBLRVlfTUVOVSB9LAorCXsgMHgwOSwgS0VZX1NFVFVQIH0sCisJeyAweDA1LCBLRVlfVklERU8gfSwKKwl7IDB4MjIsIEtFWV9DSEFOTkVMIH0sCiAKLQlbIDB4MTIgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDB4MTUgXSA9IEtFWV9WT0xVTUVET1dOLAotCVsgMHgxMCBdID0gS0VZX0NIQU5ORUxVUCwKLQlbIDB4MTMgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKwl7IDB4MTIsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxNSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MTAsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MTMsIEtFWV9DSEFOTkVMRE9XTiB9LAogCi0JWyAweDA0IF0gPSBLRVlfUkVDT1JELAorCXsgMHgwNCwgS0VZX1JFQ09SRCB9LAogCi0JWyAweDE2IF0gPSBLRVlfMSwKLQlbIDB4MTcgXSA9IEtFWV8yLAotCVsgMHgxOCBdID0gS0VZXzMsCi0JWyAweDE5IF0gPSBLRVlfNCwKLQlbIDB4MWEgXSA9IEtFWV81LAotCVsgMHgxYiBdID0gS0VZXzYsCi0JWyAweDFjIF0gPSBLRVlfNywKLQlbIDB4MWQgXSA9IEtFWV84LAotCVsgMHgxZSBdID0gS0VZXzksCi0JWyAweDFmIF0gPSBLRVlfMCwKKwl7IDB4MTYsIEtFWV8xIH0sCisJeyAweDE3LCBLRVlfMiB9LAorCXsgMHgxOCwgS0VZXzMgfSwKKwl7IDB4MTksIEtFWV80IH0sCisJeyAweDFhLCBLRVlfNSB9LAorCXsgMHgxYiwgS0VZXzYgfSwKKwl7IDB4MWMsIEtFWV83IH0sCisJeyAweDFkLCBLRVlfOCB9LAorCXsgMHgxZSwgS0VZXzkgfSwKKwl7IDB4MWYsIEtFWV8wIH0sCiAKLQlbIDB4MjAgXSA9IEtFWV9MQU5HVUFHRSwKLQlbIDB4MjEgXSA9IEtFWV9TTEVFUCwKKwl7IDB4MjAsIEtFWV9MQU5HVUFHRSB9LAorCXsgMHgyMSwgS0VZX1NMRUVQIH0sCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc192aWRlb21hdGVfdHZfcHZyKTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc192aWRlb21hdGVfdHZfcHZyX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfdmlkZW9tYXRlX3R2X3B2ciwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfdmlkZW9tYXRlX3R2X3B2ciksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfdmlkZW9tYXRlX3R2X3B2cl90YWJsZSk7CiAKIC8qIE1pY2hhZWwgVG9rYXJldiA8bWp0QHRscy5tc2sucnU+CiAgICBodHRwOi8vd3d3LmNvcnBpdC5ydS9tanQvYmVob2xkVFYvcmVtb3RlX2NvbnRyb2wuanBnCi0gICBrZXl0YWJsZSBpcyB1c2VkIGJ5IE1BTkxJIE1UVjAwWyAweDBjIF0gYW5kIEJlaG9sZFRWIDQwWzEzXSBhdAorICAga2V5dGFibGUgaXMgdXNlZCBieSBNQU5MSSBNVFYwMFsweDBjXSBhbmQgQmVob2xkVFYgNDBbMTNdIGF0CiAgICBsZWFzdCwgYW5kIHByb2JhYmx5IG90aGVyIGNhcmRzIHRvby4KICAgIFRoZSAiYXNjaWktYXJ0IHBpY3R1cmUiIGJlbG93IChpbiBjb21tZW50cywgZmlyc3Qgcm93CiAgICBpcyB0aGUga2V5Y29kZSBpbiBoZXgsIGFuZCBzdWJzZXF1ZW50IHJvdyhzKSBzaG93cwogICAgdGhlIGJ1dHRvbiBsYWJlbHMgKHNldmVyYWwgdmFyaWFudHMgd2hlbiBhcHByb3ByaWF0ZSkKICAgIGhlbHBzIHRvIGRlc2NpZGUgd2hpY2gga2V5Y29kZXMgdG8gYXNzaWduIHRvIHRoZSBidXR0b25zLgogICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19tYW5saVtJUl9LRVlUQUJfU0laRV0gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX21hbmxpW10gPSB7CiAKIAkvKiAgMHgxYyAgICAgICAgICAgIDB4MTIgICoKIAkgKiBGVU5DVElPTiAgICAgICAgIFBPV0VSICoKIAkgKiAgIEZNICAgICAgICAgICAgICAofCkgICoKIAkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JWyAweDFjIF0gPSBLRVlfUkFESU8sCS8qWFhYKi8KLQlbIDB4MTIgXSA9IEtFWV9QT1dFUiwKKwl7IDB4MWMsIEtFWV9SQURJTyB9LAkvKlhYWCovCisJeyAweDEyLCBLRVlfUE9XRVIgfSwKIAogCS8qICAweDAxICAgIDB4MDIgICAgMHgwMyAgKgogCSAqICAgMSAgICAgICAyICAgICAgIDMgICAgKgpAQCAtMTI0OCwyOSArMTMzOSwyOSBAQAogCSAqICAweDA3ICAgIDB4MDggICAgMHgwOSAgKgogCSAqICAgNyAgICAgICA4ICAgICAgIDkgICAgKgogCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQlbIDB4MDEgXSA9IEtFWV8xLAotCVsgMHgwMiBdID0gS0VZXzIsCi0JWyAweDAzIF0gPSBLRVlfMywKLQlbIDB4MDQgXSA9IEtFWV80LAotCVsgMHgwNSBdID0gS0VZXzUsCi0JWyAweDA2IF0gPSBLRVlfNiwKLQlbIDB4MDcgXSA9IEtFWV83LAotCVsgMHgwOCBdID0gS0VZXzgsCi0JWyAweDA5IF0gPSBLRVlfOSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKIAogCS8qICAweDBhICAgIDB4MDAgICAgMHgxNyAgKgogCSAqIFJFQ0FMTCAgICAwICAgICAgKzEwMCAgKgogCSAqICAgICAgICAgICAgICAgICAgUExVUyAgKgogCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQlbIDB4MGEgXSA9IEtFWV9BR0FJTiwJLypYWFggS0VZX1JFV0lORD8gKi8KLQlbIDB4MDAgXSA9IEtFWV8wLAotCVsgMHgxNyBdID0gS0VZX0RJR0lUUywJLypYWFgqLworCXsgMHgwYSwgS0VZX0FHQUlOIH0sCS8qWFhYIEtFWV9SRVdJTkQ/ICovCisJeyAweDAwLCBLRVlfMCB9LAorCXsgMHgxNywgS0VZX0RJR0lUUyB9LAkvKlhYWCovCiAKIAkvKiAgMHgxNCAgICAgICAgICAgIDB4MTAgICoKIAkgKiAgTUVOVSAgICAgICAgICAgIElORk8gICoKIAkgKiAgT1NEICAgICAgICAgICAgICAgICAgICovCi0JWyAweDE0IF0gPSBLRVlfTUVOVSwKLQlbIDB4MTAgXSA9IEtFWV9JTkZPLAorCXsgMHgxNCwgS0VZX01FTlUgfSwKKwl7IDB4MTAsIEtFWV9JTkZPIH0sCiAKIAkvKiAgICAgICAgICAweDBiICAgICAgICAgICoKIAkgKiAgICAgICAgICAgVXAgICAgICAgICAgICoKQEAgLTEyODEsMTggKzEzNzIsMTggQEAKIAkgKiAgICAgICAgIDB4MDE1ICAgICAgICAgICoKIAkgKiAgICAgICAgIERvd24gICAgICAgICAgICoKIAkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JWyAweDBiIF0gPSBLRVlfVVAsCS8qWFhYIEtFWV9TQ1JPTExVUD8gKi8KLQlbIDB4MTggXSA9IEtFWV9MRUZULAkvKlhYWCBLRVlfQkFDSz8gKi8KLQlbIDB4MTYgXSA9IEtFWV9PSywJLypYWFggS0VZX1NFTEVDVD8gS0VZX0VOVEVSPyAqLwotCVsgMHgwYyBdID0gS0VZX1JJR0hULAkvKlhYWCBLRVlfRk9SV0FSRD8gKi8KLQlbIDB4MTUgXSA9IEtFWV9ET1dOLAkvKlhYWCBLRVlfU0NST0xMRE9XTj8gKi8KKwl7IDB4MGIsIEtFWV9VUCB9LAorCXsgMHgxOCwgS0VZX0xFRlQgfSwKKwl7IDB4MTYsIEtFWV9PSyB9LAkvKlhYWCBLRVlfU0VMRUNUPyBLRVlfRU5URVI/ICovCisJeyAweDBjLCBLRVlfUklHSFQgfSwKKwl7IDB4MTUsIEtFWV9ET1dOIH0sCiAKIAkvKiAgMHgxMSAgICAgICAgICAgIDB4MGQgICoKIAkgKiAgVFYvQVYgICAgICAgICAgIE1PREUgICoKIAkgKiAgU09VUkNFICAgICAgICAgU1RFUkVPICoKIAkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JWyAweDExIF0gPSBLRVlfVFYsCS8qWFhYKi8KLQlbIDB4MGQgXSA9IEtFWV9NT0RFLAkvKlhYWCB0aGVyZSdzIG5vIEtFWV9TVEVSRU8gKi8KKwl7IDB4MTEsIEtFWV9UViB9LAkvKlhYWCovCisJeyAweDBkLCBLRVlfTU9ERSB9LAkvKlhYWCB0aGVyZSdzIG5vIEtFWV9TVEVSRU8JKi8KIAogCS8qICAweDBmICAgIDB4MWIgICAgMHgxYSAgKgogCSAqICBBVURJTyAgIFZvbCsgICAgQ2hhbisgKgpAQCAtMTMwMSw4OTEgKzEzOTIsOTY3IEBACiAJICogIDB4MGUgICAgMHgxZiAgICAweDFlICAqCiAJICogIFNMRUVQICAgVm9sLSAgICBDaGFuLSAqCiAJICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCVsgMHgwZiBdID0gS0VZX0FVRElPLAotCVsgMHgxYiBdID0gS0VZX1ZPTFVNRVVQLAotCVsgMHgxYSBdID0gS0VZX0NIQU5ORUxVUCwKLQlbIDB4MGUgXSA9IEtFWV9TTEVFUCwJLypYWFggbWF5YmUgS0VZX1BBVVNFICovCi0JWyAweDFmIF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MWUgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKwl7IDB4MGYsIEtFWV9BVURJTyB9LAorCXsgMHgxYiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFhLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDBlLCBLRVlfVElNRSB9LAorCXsgMHgxZiwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MWUsIEtFWV9DSEFOTkVMRE9XTiB9LAogCiAJLyogICAgICAgICAweDEzICAgICAweDE5ICAqCiAJICogICAgICAgICBNVVRFICAgU05BUFNIT1QqCiAJICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCVsgMHgxMyBdID0gS0VZX01VVEUsCi0JWyAweDE5IF0gPSBLRVlfUkVDT1JELAkvKlhYWCovCisJeyAweDEzLCBLRVlfTVVURSB9LAorCXsgMHgxOSwgS0VZX0NBTUVSQSB9LAogCi0JLy8gMHgxZCB1bnVzZWQgPworCS8qIDB4MWQgdW51c2VkID8gKi8KIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX21hbmxpKTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19tYW5saV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX21hbmxpLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19tYW5saSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfbWFubGlfdGFibGUpOwogCiAvKiBNaWtlIEJhaWtvdiA8bWlrZUBiYWlrb3YuY29tPiAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZ290dmlldzcxMzVbSVJfS0VZVEFCX1NJWkVdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19nb3R2aWV3NzEzNVtdID0gewogCi0JWyAweDExIF0gPSBLRVlfUE9XRVIsCi0JWyAweDM1IF0gPSBLRVlfVFYsCi0JWyAweDFiIF0gPSBLRVlfMCwKLQlbIDB4MjkgXSA9IEtFWV8xLAotCVsgMHgxOSBdID0gS0VZXzIsCi0JWyAweDM5IF0gPSBLRVlfMywKLQlbIDB4MWYgXSA9IEtFWV80LAotCVsgMHgyYyBdID0gS0VZXzUsCi0JWyAweDIxIF0gPSBLRVlfNiwKLQlbIDB4MjQgXSA9IEtFWV83LAotCVsgMHgxOCBdID0gS0VZXzgsCi0JWyAweDJiIF0gPSBLRVlfOSwKLQlbIDB4M2IgXSA9IEtFWV9BR0FJTiwgLyogTE9PUCAqLwotCVsgMHgwNiBdID0gS0VZX0FVRElPLAotCVsgMHgzMSBdID0gS0VZX1BSSU5ULCAvKiBQUkVWSUVXICovCi0JWyAweDNlIF0gPSBLRVlfVklERU8sCi0JWyAweDEwIF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgMHgyMCBdID0gS0VZX0NIQU5ORUxET1dOLAotCVsgMHgwYyBdID0gS0VZX1ZPTFVNRURPV04sCi0JWyAweDI4IF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDA4IF0gPSBLRVlfTVVURSwKLQlbIDB4MjYgXSA9IEtFWV9TRUFSQ0gsIC8qU0NBTiovCi0JWyAweDNmIF0gPSBLRVlfU0hVRkZMRSwgLyogU05BUFNIT1QgKi8KLQlbIDB4MTIgXSA9IEtFWV9SRUNPUkQsCi0JWyAweDMyIF0gPSBLRVlfU1RPUCwKLQlbIDB4M2MgXSA9IEtFWV9QTEFZLAotCVsgMHgxZCBdID0gS0VZX1JFV0lORCwKLQlbIDB4MmQgXSA9IEtFWV9QQVVTRSwKLQlbIDB4MGQgXSA9IEtFWV9GT1JXQVJELAotCVsgMHgwNSBdID0gS0VZX1pPT00sICAvKkZVTEwqLworCXsgMHgxMSwgS0VZX1BPV0VSIH0sCisJeyAweDM1LCBLRVlfVFYgfSwKKwl7IDB4MWIsIEtFWV8wIH0sCisJeyAweDI5LCBLRVlfMSB9LAorCXsgMHgxOSwgS0VZXzIgfSwKKwl7IDB4MzksIEtFWV8zIH0sCisJeyAweDFmLCBLRVlfNCB9LAorCXsgMHgyYywgS0VZXzUgfSwKKwl7IDB4MjEsIEtFWV82IH0sCisJeyAweDI0LCBLRVlfNyB9LAorCXsgMHgxOCwgS0VZXzggfSwKKwl7IDB4MmIsIEtFWV85IH0sCisJeyAweDNiLCBLRVlfQUdBSU4gfSwJLyogTE9PUCAqLworCXsgMHgwNiwgS0VZX0FVRElPIH0sCisJeyAweDMxLCBLRVlfUFJJTlQgfSwJLyogUFJFVklFVyAqLworCXsgMHgzZSwgS0VZX1ZJREVPIH0sCisJeyAweDEwLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDIwLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MGMsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDI4LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDgsIEtFWV9NVVRFIH0sCisJeyAweDI2LCBLRVlfU0VBUkNIIH0sCS8qIFNDQU4gKi8KKwl7IDB4M2YsIEtFWV9DQU1FUkEgfSwJLyogU05BUFNIT1QgKi8KKwl7IDB4MTIsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MzIsIEtFWV9TVE9QIH0sCisJeyAweDNjLCBLRVlfUExBWSB9LAorCXsgMHgxZCwgS0VZX1JFV0lORCB9LAorCXsgMHgyZCwgS0VZX1BBVVNFIH0sCisJeyAweDBkLCBLRVlfRk9SV0FSRCB9LAorCXsgMHgwNSwgS0VZX1pPT00gfSwJLypGVUxMKi8KIAotCVsgMHgyYSBdID0gS0VZX0YyMSwgLyogTElWRSBUSU1FU0hJRlQgKi8KLQlbIDB4MGUgXSA9IEtFWV9GMjIsIC8qIE1JTiBUSU1FU0hJRlQgKi8KLQlbIDB4MWUgXSA9IEtFWV9GMjMsIC8qIFRJTUVTSElGVCAqLwotCVsgMHgzOCBdID0gS0VZX0YyNCwgLyogTk9STUFMIFRJTUVTSElGVCAqLworCXsgMHgyYSwgS0VZX0YyMSB9LAkvKiBMSVZFIFRJTUVTSElGVCAqLworCXsgMHgwZSwgS0VZX0YyMiB9LAkvKiBNSU4gVElNRVNISUZUICovCisJeyAweDFlLCBLRVlfVElNRSB9LAkvKiBUSU1FU0hJRlQgKi8KKwl7IDB4MzgsIEtFWV9GMjQgfSwJLyogTk9STUFMIFRJTUVTSElGVCAqLwogfTsKIAotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZ290dmlldzcxMzUpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2dvdHZpZXc3MTM1X3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfZ290dmlldzcxMzUsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2dvdHZpZXc3MTM1KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19nb3R2aWV3NzEzNV90YWJsZSk7CiAKLUlSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3B1cnBsZXR2W0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbIDB4MDMgXSA9IEtFWV9QT1dFUiwKLQlbIDB4NmYgXSA9IEtFWV9NVVRFLAotCVsgMHgxMCBdID0gS0VZX0JBQ0tTUEFDRSwgICAgICAgLyogUmVjYWxsICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3B1cnBsZXR2W10gPSB7CisJeyAweDAzLCBLRVlfUE9XRVIgfSwKKwl7IDB4NmYsIEtFWV9NVVRFIH0sCisJeyAweDEwLCBLRVlfQkFDS1NQQUNFIH0sCS8qIFJlY2FsbCAqLwogCi0JWyAweDExIF0gPSBLRVlfMCwKLQlbIDB4MDQgXSA9IEtFWV8xLAotCVsgMHgwNSBdID0gS0VZXzIsCi0JWyAweDA2IF0gPSBLRVlfMywKLQlbIDB4MDggXSA9IEtFWV80LAotCVsgMHgwOSBdID0gS0VZXzUsCi0JWyAweDBhIF0gPSBLRVlfNiwKLQlbIDB4MGMgXSA9IEtFWV83LAotCVsgMHgwZCBdID0gS0VZXzgsCi0JWyAweDBlIF0gPSBLRVlfOSwKLQlbIDB4MTIgXSA9IEtFWV9ET1QsICAgICAgICAgICAvKiAxMDArICovCisJeyAweDExLCBLRVlfMCB9LAorCXsgMHgwNCwgS0VZXzEgfSwKKwl7IDB4MDUsIEtFWV8yIH0sCisJeyAweDA2LCBLRVlfMyB9LAorCXsgMHgwOCwgS0VZXzQgfSwKKwl7IDB4MDksIEtFWV81IH0sCisJeyAweDBhLCBLRVlfNiB9LAorCXsgMHgwYywgS0VZXzcgfSwKKwl7IDB4MGQsIEtFWV84IH0sCisJeyAweDBlLCBLRVlfOSB9LAorCXsgMHgxMiwgS0VZX0RPVCB9LAkvKiAxMDArICovCiAKLQlbIDB4MDcgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDB4MGIgXSA9IEtFWV9WT0xVTUVET1dOLAotCVsgMHgxYSBdID0gS0VZX0tQUExVUywKLQlbIDB4MTggXSA9IEtFWV9LUE1JTlVTLAotCVsgMHgxNSBdID0gS0VZX1VQLAotCVsgMHgxZCBdID0gS0VZX0RPV04sCi0JWyAweDBmIF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgMHgxMyBdID0gS0VZX0NIQU5ORUxET1dOLAotCVsgMHg0OCBdID0gS0VZX1pPT00sCisJeyAweDA3LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MGIsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDFhLCBLRVlfS1BQTFVTIH0sCisJeyAweDE4LCBLRVlfS1BNSU5VUyB9LAorCXsgMHgxNSwgS0VZX1VQIH0sCisJeyAweDFkLCBLRVlfRE9XTiB9LAorCXsgMHgwZiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxMywgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDQ4LCBLRVlfWk9PTSB9LAogCi0JWyAweDFiIF0gPSBLRVlfVklERU8sICAgICAgICAgICAvKiBWaWRlbyBzb3VyY2UgKi8KLQlbIDB4NDkgXSA9IEtFWV9MQU5HVUFHRSwgICAgICAgIC8qIE1UUyBTZWxlY3QgKi8KLQlbIDB4MTkgXSA9IEtFWV9TRUFSQ0gsICAgICAgICAgIC8qIEF1dG8gU2NhbiAqLworCXsgMHgxYiwgS0VZX1ZJREVPIH0sCS8qIFZpZGVvIHNvdXJjZSAqLworCXsgMHgxZiwgS0VZX0NBTUVSQSB9LAkvKiBTbmFwc2hvdCAqLworCXsgMHg0OSwgS0VZX0xBTkdVQUdFIH0sCS8qIE1UUyBTZWxlY3QgKi8KKwl7IDB4MTksIEtFWV9TRUFSQ0ggfSwJLyogQXV0byBTY2FuICovCiAKLQlbIDB4NGIgXSA9IEtFWV9SRUNPUkQsCi0JWyAweDQ2IF0gPSBLRVlfUExBWSwKLQlbIDB4NDUgXSA9IEtFWV9QQVVTRSwgICAgICAgICAgIC8qIFBhdXNlICovCi0JWyAweDQ0IF0gPSBLRVlfU1RPUCwKLQlbIDB4NDAgXSA9IEtFWV9GT1JXQVJELCAgICAgICAgIC8qIEZvcndhcmQgPyAqLwotCVsgMHg0MiBdID0gS0VZX1JFV0lORCwgICAgICAgICAgLyogQmFja3dhcmQgPyAqLworCXsgMHg0YiwgS0VZX1JFQ09SRCB9LAorCXsgMHg0NiwgS0VZX1BMQVkgfSwKKwl7IDB4NDUsIEtFWV9QQVVTRSB9LAkvKiBQYXVzZSAqLworCXsgMHg0NCwgS0VZX1NUT1AgfSwKKwl7IDB4NDMsIEtFWV9USU1FIH0sCS8qIFRpbWUgU2hpZnQgKi8KKwl7IDB4MTcsIEtFWV9DSEFOTkVMIH0sCS8qIFNVUkYgQ0ggKi8KKwl7IDB4NDAsIEtFWV9GT1JXQVJEIH0sCS8qIEZvcndhcmQgPyAqLworCXsgMHg0MiwgS0VZX1JFV0lORCB9LAkvKiBCYWNrd2FyZCA/ICovCiAKIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3B1cnBsZXR2KTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19wdXJwbGV0dl90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3B1cnBsZXR2LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19wdXJwbGV0diksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcHVycGxldHZfdGFibGUpOwogCiAvKiBNYXBwaW5nIGZvciB0aGUgMjgga2V5IHJlbW90ZSBjb250cm9sIGFzIHNlZW4gYXQKICAgIGh0dHA6Ly93d3cuc2VkbmFjb21wdXRlci5jb20vcGhvdG8vY2FyZGJ1cy10di5qcGcKICAgIFBhdmVsIE1paGF5bG92IDxiaW5AYmFzaC5pbmZvPgogICAgQWxzbyBmb3IgdGhlIHJlbW90ZSBidW5kbGVkIHdpdGggS296dW1pIEtUVi0wMUMgY2FyZCAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGN0dl9zZWRuYVtJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAweDAwIF0gPSBLRVlfMCwKLQlbIDB4MDEgXSA9IEtFWV8xLAotCVsgMHgwMiBdID0gS0VZXzIsCi0JWyAweDAzIF0gPSBLRVlfMywKLQlbIDB4MDQgXSA9IEtFWV80LAotCVsgMHgwNSBdID0gS0VZXzUsCi0JWyAweDA2IF0gPSBLRVlfNiwKLQlbIDB4MDcgXSA9IEtFWV83LAotCVsgMHgwOCBdID0gS0VZXzgsCi0JWyAweDA5IF0gPSBLRVlfOSwKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfcGN0dl9zZWRuYVtdID0geworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKIAotCVsgMHgwYSBdID0gS0VZX0FHQUlOLCAgICAgICAgICAvKiBSZWNhbGwgKi8KLQlbIDB4MGIgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAweDBjIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDBkIF0gPSBLRVlfTU9ERSwgICAgICAgICAgIC8qIFN0ZXJlbyAqLwotCVsgMHgwZSBdID0gS0VZX1NUT1AsCi0JWyAweDBmIF0gPSBLRVlfUFJFVklPVVNTT05HLAotCVsgMHgxMCBdID0gS0VZX1pPT00sCi0JWyAweDExIF0gPSBLRVlfVFVORVIsICAgICAgICAgIC8qIFNvdXJjZSAqLwotCVsgMHgxMiBdID0gS0VZX1BPV0VSLAotCVsgMHgxMyBdID0gS0VZX01VVEUsCi0JWyAweDE1IF0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWyAweDE4IF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MTkgXSA9IEtFWV9TSFVGRkxFLCAgICAgICAgLyogU25hcHNob3QgKi8KLQlbIDB4MWEgXSA9IEtFWV9ORVhUU09ORywKLQlbIDB4MWIgXSA9IEtFWV9URVhULCAgICAgICAgICAgLyogVGltZSBTaGlmdCAqLwotCVsgMHgxYyBdID0gS0VZX1JBRElPLCAgICAgICAgICAvKiBGTSBSYWRpbyAqLwotCVsgMHgxZCBdID0gS0VZX1JFQ09SRCwKLQlbIDB4MWUgXSA9IEtFWV9QQVVTRSwKKwl7IDB4MGEsIEtFWV9BR0FJTiB9LAkvKiBSZWNhbGwgKi8KKwl7IDB4MGIsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MGMsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwZCwgS0VZX01PREUgfSwJLyogU3RlcmVvICovCisJeyAweDBlLCBLRVlfU1RPUCB9LAorCXsgMHgwZiwgS0VZX1BSRVZJT1VTU09ORyB9LAorCXsgMHgxMCwgS0VZX1pPT00gfSwKKwl7IDB4MTEsIEtFWV9UVU5FUiB9LAkvKiBTb3VyY2UgKi8KKwl7IDB4MTIsIEtFWV9QT1dFUiB9LAorCXsgMHgxMywgS0VZX01VVEUgfSwKKwl7IDB4MTUsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxOCwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MTksIEtFWV9DQU1FUkEgfSwJLyogU25hcHNob3QgKi8KKwl7IDB4MWEsIEtFWV9ORVhUU09ORyB9LAorCXsgMHgxYiwgS0VZX1RJTUUgfSwJLyogVGltZSBTaGlmdCAqLworCXsgMHgxYywgS0VZX1JBRElPIH0sCS8qIEZNIFJhZGlvICovCisJeyAweDFkLCBLRVlfUkVDT1JEIH0sCisJeyAweDFlLCBLRVlfUEFVU0UgfSwKIAkvKiBhZGRpdGlvbmFsIGNvZGVzIGZvciBLb3p1bWkncyByZW1vdGUgKi8KLQlbMHgxNF0gPSBLRVlfSU5GTywgICAgICAgIC8qIE9TRCAqLwotCVsweDE2XSA9IEtFWV9PSywgICAgICAgICAgLyogT0sgKi8KLQlbMHgxN10gPSBLRVlfRElHSVRTLCAgICAgIC8qIFBsdXMgKi8KLQlbMHgxZl0gPSBLRVlfUExBWSwgICAgICAgIC8qIFBsYXkgKi8KKwl7IDB4MTQsIEtFWV9JTkZPIH0sCS8qIE9TRCAqLworCXsgMHgxNiwgS0VZX09LIH0sCS8qIE9LICovCisJeyAweDE3LCBLRVlfRElHSVRTIH0sCS8qIFBsdXMgKi8KKwl7IDB4MWYsIEtFWV9QTEFZIH0sCS8qIFBsYXkgKi8KIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3BjdHZfc2VkbmEpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3BjdHZfc2VkbmFfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19wY3R2X3NlZG5hLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19wY3R2X3NlZG5hKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19wY3R2X3NlZG5hX3RhYmxlKTsKIAogLyogTWFyayBQaGFsYW4gPHBoYWxhbm1AbzIuaWU+ICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19wdjk1MVtJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAweDAwIF0gPSBLRVlfMCwKLQlbIDB4MDEgXSA9IEtFWV8xLAotCVsgMHgwMiBdID0gS0VZXzIsCi0JWyAweDAzIF0gPSBLRVlfMywKLQlbIDB4MDQgXSA9IEtFWV80LAotCVsgMHgwNSBdID0gS0VZXzUsCi0JWyAweDA2IF0gPSBLRVlfNiwKLQlbIDB4MDcgXSA9IEtFWV83LAotCVsgMHgwOCBdID0gS0VZXzgsCi0JWyAweDA5IF0gPSBLRVlfOSwKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfcHY5NTFbXSA9IHsKKwl7IDB4MDAsIEtFWV8wIH0sCisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDMsIEtFWV8zIH0sCisJeyAweDA0LCBLRVlfNCB9LAorCXsgMHgwNSwgS0VZXzUgfSwKKwl7IDB4MDYsIEtFWV82IH0sCisJeyAweDA3LCBLRVlfNyB9LAorCXsgMHgwOCwgS0VZXzggfSwKKwl7IDB4MDksIEtFWV85IH0sCiAKLQlbIDB4MTIgXSA9IEtFWV9QT1dFUiwKLQlbIDB4MTAgXSA9IEtFWV9NVVRFLAotCVsgMHgxZiBdID0gS0VZX1ZPTFVNRURPV04sCi0JWyAweDFiIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDFhIF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgMHgxZSBdID0gS0VZX0NIQU5ORUxET1dOLAotCVsgMHgwZSBdID0gS0VZX1BBR0VVUCwKLQlbIDB4MWQgXSA9IEtFWV9QQUdFRE9XTiwKLQlbIDB4MTMgXSA9IEtFWV9TT1VORCwKKwl7IDB4MTIsIEtFWV9QT1dFUiB9LAorCXsgMHgxMCwgS0VZX01VVEUgfSwKKwl7IDB4MWYsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDFiLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MWEsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MWUsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwZSwgS0VZX1BBR0VVUCB9LAorCXsgMHgxZCwgS0VZX1BBR0VET1dOIH0sCisJeyAweDEzLCBLRVlfU09VTkQgfSwKIAotCVsgMHgxOCBdID0gS0VZX0tQUExVU01JTlVTLAkvKiBDSCArLy0gKi8KLQlbIDB4MTYgXSA9IEtFWV9TVUJUSVRMRSwJCS8qIENDICovCi0JWyAweDBkIF0gPSBLRVlfVEVYVCwJCS8qIFRUWCAqLwotCVsgMHgwYiBdID0gS0VZX1RWLAkJLyogQUlSL0NCTCAqLwotCVsgMHgxMSBdID0gS0VZX1BDLAkJLyogUEMvVFYgKi8KLQlbIDB4MTcgXSA9IEtFWV9PSywJCS8qIENIIFJUTiAqLwotCVsgMHgxOSBdID0gS0VZX01PREUsIAkJLyogRlVOQyAqLwotCVsgMHgwYyBdID0gS0VZX1NFQVJDSCwgCQkvKiBBVVRPU0NBTiAqLworCXsgMHgxOCwgS0VZX0tQUExVU01JTlVTIH0sCS8qIENIICsvLSAqLworCXsgMHgxNiwgS0VZX1NVQlRJVExFIH0sCQkvKiBDQyAqLworCXsgMHgwZCwgS0VZX1RFWFQgfSwJCS8qIFRUWCAqLworCXsgMHgwYiwgS0VZX1RWIH0sCQkvKiBBSVIvQ0JMICovCisJeyAweDExLCBLRVlfUEMgfSwJCS8qIFBDL1RWICovCisJeyAweDE3LCBLRVlfT0sgfSwJCS8qIENIIFJUTiAqLworCXsgMHgxOSwgS0VZX01PREUgfSwJCS8qIEZVTkMgKi8KKwl7IDB4MGMsIEtFWV9TRUFSQ0ggfSwJCS8qIEFVVE9TQ0FOICovCiAKIAkvKiBOb3Qgc3VyZSB3aGF0IHRvIGRvIHdpdGggdGhlc2Ugb25lcyEgKi8KLQlbIDB4MGYgXSA9IEtFWV9TRUxFQ1QsIAkJLyogU09VUkNFICovCi0JWyAweDBhIF0gPSBLRVlfS1BQTFVTLAkJLyogKzEwMCAqLwotCVsgMHgxNCBdID0gS0VZX0VRVUFMLAkJLyogU1lOQyAqLwotCVsgMHgxYyBdID0gS0VZX01FRElBLCAgICAgICAgICAgICAvKiBQQy9UViAqLworCXsgMHgwZiwgS0VZX1NFTEVDVCB9LAkJLyogU09VUkNFICovCisJeyAweDBhLCBLRVlfS1BQTFVTIH0sCQkvKiArMTAwICovCisJeyAweDE0LCBLRVlfRVFVQUwgfSwJCS8qIFNZTkMgKi8KKwl7IDB4MWMsIEtFWV9NRURJQSB9LAkJLyogUEMvVFYgKi8KIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3B2OTUxKTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19wdjk1MV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3B2OTUxLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19wdjk1MSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcHY5NTFfdGFibGUpOwogCiAvKiBnZW5lcmljIFJDNSBrZXl0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBzZWUgaHR0cDovL3VzZXJzLnBhbmRvcmEuYmUvbmVueWEvZWxlY3Ryb25pY3MvcmM1L2NvZGVzMDAuaHRtICovCiAvKiB1c2VkIGJ5IG9sZCAoYmxhY2spIEhhdXBwYXVnZSByZW1vdGVzICAgICAgICAgICAgICAgICAgICAgICAgICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19yYzVfdHZbSVJfS0VZVEFCX1NJWkVdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19yYzVfdHZbXSA9IHsKIAkvKiBLZXlzIDAgdG8gOSAqLwotCVsgMHgwMCBdID0gS0VZXzAsCi0JWyAweDAxIF0gPSBLRVlfMSwKLQlbIDB4MDIgXSA9IEtFWV8yLAotCVsgMHgwMyBdID0gS0VZXzMsCi0JWyAweDA0IF0gPSBLRVlfNCwKLQlbIDB4MDUgXSA9IEtFWV81LAotCVsgMHgwNiBdID0gS0VZXzYsCi0JWyAweDA3IF0gPSBLRVlfNywKLQlbIDB4MDggXSA9IEtFWV84LAotCVsgMHgwOSBdID0gS0VZXzksCisJeyAweDAwLCBLRVlfMCB9LAorCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAogCi0JWyAweDBiIF0gPSBLRVlfQ0hBTk5FTCwJCS8qIGNoYW5uZWwgLyBwcm9ncmFtIChqYXBhbjogMTEpICovCi0JWyAweDBjIF0gPSBLRVlfUE9XRVIsCQkvKiBzdGFuZGJ5ICovCi0JWyAweDBkIF0gPSBLRVlfTVVURSwJCS8qIG11dGUgLyBkZW11dGUgKi8KLQlbIDB4MGYgXSA9IEtFWV9UViwJCS8qIGRpc3BsYXkgKi8KLQlbIDB4MTAgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDB4MTEgXSA9IEtFWV9WT0xVTUVET1dOLAotCVsgMHgxMiBdID0gS0VZX0JSSUdIVE5FU1NVUCwKLQlbIDB4MTMgXSA9IEtFWV9CUklHSFRORVNTRE9XTiwKLQlbIDB4MWUgXSA9IEtFWV9TRUFSQ0gsCQkvKiBzZWFyY2ggKyAqLwotCVsgMHgyMCBdID0gS0VZX0NIQU5ORUxVUCwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLwotCVsgMHgyMSBdID0gS0VZX0NIQU5ORUxET1dOLAkvKiBjaGFubmVsIC8gcHJvZ3JhbSAtICovCi0JWyAweDIyIF0gPSBLRVlfQ0hBTk5FTCwJCS8qIGFsdCAvIGNoYW5uZWwgKi8KLQlbIDB4MjMgXSA9IEtFWV9MQU5HVUFHRSwJLyogMXN0IC8gMm5kIGxhbmd1YWdlICovCi0JWyAweDI2IF0gPSBLRVlfU0xFRVAsCQkvKiBzbGVlcHRpbWVyICovCi0JWyAweDJlIF0gPSBLRVlfTUVOVSwJCS8qIDJuZCBjb250cm9scyAoVVNBOiBtZW51KSAqLwotCVsgMHgzMCBdID0gS0VZX1BBVVNFLAotCVsgMHgzMiBdID0gS0VZX1JFV0lORCwKLQlbIDB4MzMgXSA9IEtFWV9HT1RPLAotCVsgMHgzNSBdID0gS0VZX1BMQVksCi0JWyAweDM2IF0gPSBLRVlfU1RPUCwKLQlbIDB4MzcgXSA9IEtFWV9SRUNPUkQsCQkvKiByZWNvcmRpbmcgKi8KLQlbIDB4M2MgXSA9IEtFWV9URVhULCAgICAJLyogdGVsZXRleHQgc3VibW9kZSAoSmFwYW46IDEyKSAqLwotCVsgMHgzZCBdID0gS0VZX1NVU1BFTkQsCQkvKiBzeXN0ZW0gc3RhbmRieSAqLworCXsgMHgwYiwgS0VZX0NIQU5ORUwgfSwJCS8qIGNoYW5uZWwgLyBwcm9ncmFtIChqYXBhbjogMTEpICovCisJeyAweDBjLCBLRVlfUE9XRVIgfSwJCS8qIHN0YW5kYnkgKi8KKwl7IDB4MGQsIEtFWV9NVVRFIH0sCQkvKiBtdXRlIC8gZGVtdXRlICovCisJeyAweDBmLCBLRVlfVFYgfSwJCS8qIGRpc3BsYXkgKi8KKwl7IDB4MTAsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxMSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MTIsIEtFWV9CUklHSFRORVNTVVAgfSwKKwl7IDB4MTMsIEtFWV9CUklHSFRORVNTRE9XTiB9LAorCXsgMHgxZSwgS0VZX1NFQVJDSCB9LAkJLyogc2VhcmNoICsgKi8KKwl7IDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLworCXsgMHgyMSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtIC0gKi8KKwl7IDB4MjIsIEtFWV9DSEFOTkVMIH0sCQkvKiBhbHQgLyBjaGFubmVsICovCisJeyAweDIzLCBLRVlfTEFOR1VBR0UgfSwJCS8qIDFzdCAvIDJuZCBsYW5ndWFnZSAqLworCXsgMHgyNiwgS0VZX1NMRUVQIH0sCQkvKiBzbGVlcHRpbWVyICovCisJeyAweDJlLCBLRVlfTUVOVSB9LAkJLyogMm5kIGNvbnRyb2xzIChVU0E6IG1lbnUpICovCisJeyAweDMwLCBLRVlfUEFVU0UgfSwKKwl7IDB4MzIsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MzMsIEtFWV9HT1RPIH0sCisJeyAweDM1LCBLRVlfUExBWSB9LAorCXsgMHgzNiwgS0VZX1NUT1AgfSwKKwl7IDB4MzcsIEtFWV9SRUNPUkQgfSwJCS8qIHJlY29yZGluZyAqLworCXsgMHgzYywgS0VZX1RFWFQgfSwJCS8qIHRlbGV0ZXh0IHN1Ym1vZGUgKEphcGFuOiAxMikgKi8KKwl7IDB4M2QsIEtFWV9TVVNQRU5EIH0sCQkvKiBzeXN0ZW0gc3RhbmRieSAqLwogCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19yYzVfdHYpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3JjNV90dl90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3JjNV90diwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcmM1X3R2KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19yYzVfdHZfdGFibGUpOwogCiAvKiBUYWJsZSBmb3IgTGVhZHRlayBXaW5mYXN0IFJlbW90ZSBDb250cm9scyAtIHVzZWQgYnkgYm90aCBidHR2IGFuZCBjeDg4ICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc193aW5mYXN0W0lSX0tFWVRBQl9TSVpFXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfd2luZmFzdFtdID0gewogCS8qIEtleXMgMCB0byA5ICovCi0JWyAweDEyIF0gPSBLRVlfMCwKLQlbIDB4MDUgXSA9IEtFWV8xLAotCVsgMHgwNiBdID0gS0VZXzIsCi0JWyAweDA3IF0gPSBLRVlfMywKLQlbIDB4MDkgXSA9IEtFWV80LAotCVsgMHgwYSBdID0gS0VZXzUsCi0JWyAweDBiIF0gPSBLRVlfNiwKLQlbIDB4MGQgXSA9IEtFWV83LAotCVsgMHgwZSBdID0gS0VZXzgsCi0JWyAweDBmIF0gPSBLRVlfOSwKKwl7IDB4MTIsIEtFWV8wIH0sCisJeyAweDA1LCBLRVlfMSB9LAorCXsgMHgwNiwgS0VZXzIgfSwKKwl7IDB4MDcsIEtFWV8zIH0sCisJeyAweDA5LCBLRVlfNCB9LAorCXsgMHgwYSwgS0VZXzUgfSwKKwl7IDB4MGIsIEtFWV82IH0sCisJeyAweDBkLCBLRVlfNyB9LAorCXsgMHgwZSwgS0VZXzggfSwKKwl7IDB4MGYsIEtFWV85IH0sCiAKLQlbIDB4MDAgXSA9IEtFWV9QT1dFUiwKLQlbIDB4MWIgXSA9IEtFWV9BVURJTywgICAgICAgICAgIC8qIEF1ZGlvIFNvdXJjZSAqLwotCVsgMHgwMiBdID0gS0VZX1RVTkVSLAkJLyogVFYvRk0sIG5vdCBvbiBZMDQwMDA1MiAqLwotCVsgMHgxZSBdID0gS0VZX1ZJREVPLCAgICAgICAgICAgLyogVmlkZW8gU291cmNlICovCi0JWyAweDE2IF0gPSBLRVlfSU5GTywgICAgICAgICAgICAvKiBEaXNwbGF5IGluZm9ybWF0aW9uICovCi0JWyAweDA0IF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDA4IF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MGMgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAweDEwIF0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWyAweDAzIF0gPSBLRVlfWk9PTSwJCS8qIGZ1bGxzY3JlZW4gKi8KLQlbIDB4MWYgXSA9IEtFWV9URVhULAkJLyogY2xvc2VkIGNhcHRpb24vdGVsZXRleHQgKi8KLQlbIDB4MjAgXSA9IEtFWV9TTEVFUCwKLQlbIDB4MjkgXSA9IEtFWV9DTEVBUiwgICAgICAgICAgIC8qIGJvc3Mga2V5ICovCi0JWyAweDE0IF0gPSBLRVlfTVVURSwKLQlbIDB4MmIgXSA9IEtFWV9SRUQsCi0JWyAweDJjIF0gPSBLRVlfR1JFRU4sCi0JWyAweDJkIF0gPSBLRVlfWUVMTE9XLAotCVsgMHgyZSBdID0gS0VZX0JMVUUsCi0JWyAweDE4IF0gPSBLRVlfS1BQTFVTLAkJLyogZmluZSB0dW5lICsgLCBub3Qgb24gWTA0MDA1MiAqLwotCVsgMHgxOSBdID0gS0VZX0tQTUlOVVMsCQkvKiBmaW5lIHR1bmUgLSAsIG5vdCBvbiBZMDQwMDUyICovCi0JWyAweDJhIF0gPSBLRVlfTUVESUEsICAgICAgICAgICAvKiBQSVAgKFBpY3R1cmUgaW4gcGljdHVyZSAqLwotCVsgMHgyMSBdID0gS0VZX0RPVCwKLQlbIDB4MTMgXSA9IEtFWV9FTlRFUiwKLQlbIDB4MTEgXSA9IEtFWV9MQVNULCAgICAgICAgICAgIC8qIFJlY2FsbCAobGFzdCBjaGFubmVsICovCi0JWyAweDIyIF0gPSBLRVlfUFJFVklPVVMsCi0JWyAweDIzIF0gPSBLRVlfUExBWVBBVVNFLAotCVsgMHgyNCBdID0gS0VZX05FWFQsCi0JWyAweDI1IF0gPSBLRVlfQVJDSElWRSwgICAgICAgLyogVGltZSBTaGlmdGluZyAqLwotCVsgMHgyNiBdID0gS0VZX1NUT1AsCi0JWyAweDI3IF0gPSBLRVlfUkVDT1JELAotCVsgMHgyOCBdID0gS0VZX1NBVkUsICAgICAgICAgIC8qIFNjcmVlbnNob3QgKi8KLQlbIDB4MmYgXSA9IEtFWV9NRU5VLAotCVsgMHgzMCBdID0gS0VZX0NBTkNFTCwKLQlbIDB4MzEgXSA9IEtFWV9DSEFOTkVMLCAgICAgICAvKiBDaGFubmVsIFN1cmYgKi8KLQlbIDB4MzIgXSA9IEtFWV9TVUJUSVRMRSwKLQlbIDB4MzMgXSA9IEtFWV9MQU5HVUFHRSwKLQlbIDB4MzQgXSA9IEtFWV9SRVdJTkQsCi0JWyAweDM1IF0gPSBLRVlfRkFTVEZPUldBUkQsCi0JWyAweDM2IF0gPSBLRVlfVFYsCi0JWyAweDM3IF0gPSBLRVlfUkFESU8sICAgICAgICAgLyogRk0gKi8KLQlbIDB4MzggXSA9IEtFWV9EVkQsCisJeyAweDAwLCBLRVlfUE9XRVIgfSwKKwl7IDB4MWIsIEtFWV9BVURJTyB9LAkJLyogQXVkaW8gU291cmNlICovCisJeyAweDAyLCBLRVlfVFVORVIgfSwJCS8qIFRWL0ZNLCBub3Qgb24gWTA0MDAwNTIgKi8KKwl7IDB4MWUsIEtFWV9WSURFTyB9LAkJLyogVmlkZW8gU291cmNlICovCisJeyAweDE2LCBLRVlfSU5GTyB9LAkJLyogRGlzcGxheSBpbmZvcm1hdGlvbiAqLworCXsgMHgwNCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDA4LCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwYywgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxMCwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDAzLCBLRVlfWk9PTSB9LAkJLyogZnVsbHNjcmVlbiAqLworCXsgMHgxZiwgS0VZX1RFWFQgfSwJCS8qIGNsb3NlZCBjYXB0aW9uL3RlbGV0ZXh0ICovCisJeyAweDIwLCBLRVlfU0xFRVAgfSwKKwl7IDB4MjksIEtFWV9DTEVBUiB9LAkJLyogYm9zcyBrZXkgKi8KKwl7IDB4MTQsIEtFWV9NVVRFIH0sCisJeyAweDJiLCBLRVlfUkVEIH0sCisJeyAweDJjLCBLRVlfR1JFRU4gfSwKKwl7IDB4MmQsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4MmUsIEtFWV9CTFVFIH0sCisJeyAweDE4LCBLRVlfS1BQTFVTIH0sCQkvKiBmaW5lIHR1bmUgKyAsIG5vdCBvbiBZMDQwMDUyICovCisJeyAweDE5LCBLRVlfS1BNSU5VUyB9LAkJLyogZmluZSB0dW5lIC0gLCBub3Qgb24gWTA0MDA1MiAqLworCXsgMHgyYSwgS0VZX01FRElBIH0sCQkvKiBQSVAgKFBpY3R1cmUgaW4gcGljdHVyZSAqLworCXsgMHgyMSwgS0VZX0RPVCB9LAorCXsgMHgxMywgS0VZX0VOVEVSIH0sCisJeyAweDExLCBLRVlfTEFTVCB9LAkJLyogUmVjYWxsIChsYXN0IGNoYW5uZWwgKi8KKwl7IDB4MjIsIEtFWV9QUkVWSU9VUyB9LAorCXsgMHgyMywgS0VZX1BMQVlQQVVTRSB9LAorCXsgMHgyNCwgS0VZX05FWFQgfSwKKwl7IDB4MjUsIEtFWV9USU1FIH0sCQkvKiBUaW1lIFNoaWZ0aW5nICovCisJeyAweDI2LCBLRVlfU1RPUCB9LAorCXsgMHgyNywgS0VZX1JFQ09SRCB9LAorCXsgMHgyOCwgS0VZX1NBVkUgfSwJCS8qIFNjcmVlbnNob3QgKi8KKwl7IDB4MmYsIEtFWV9NRU5VIH0sCisJeyAweDMwLCBLRVlfQ0FOQ0VMIH0sCisJeyAweDMxLCBLRVlfQ0hBTk5FTCB9LAkJLyogQ2hhbm5lbCBTdXJmICovCisJeyAweDMyLCBLRVlfU1VCVElUTEUgfSwKKwl7IDB4MzMsIEtFWV9MQU5HVUFHRSB9LAorCXsgMHgzNCwgS0VZX1JFV0lORCB9LAorCXsgMHgzNSwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDM2LCBLRVlfVFYgfSwKKwl7IDB4MzcsIEtFWV9SQURJTyB9LAkJLyogRk0gKi8KKwl7IDB4MzgsIEtFWV9EVkQgfSwKIAotCVsgMHgzZSBdID0gS0VZX0YyMSwgICAgICAgICAgIC8qIE1DRSArVk9MLCBvbiBZMDRHMDAzMyAqLwotCVsgMHgzYSBdID0gS0VZX0YyMiwgICAgICAgICAgIC8qIE1DRSAtVk9MLCBvbiBZMDRHMDAzMyAqLwotCVsgMHgzYiBdID0gS0VZX0YyMywgICAgICAgICAgIC8qIE1DRSArQ0gsICBvbiBZMDRHMDAzMyAqLwotCVsgMHgzZiBdID0gS0VZX0YyNCAgICAgICAgICAgIC8qIE1DRSAtQ0gsICBvbiBZMDRHMDAzMyAqLworCXsgMHgzZSwgS0VZX0YyMSB9LAkJLyogTUNFICtWT0wsIG9uIFkwNEcwMDMzICovCisJeyAweDNhLCBLRVlfRjIyIH0sCQkvKiBNQ0UgLVZPTCwgb24gWTA0RzAwMzMgKi8KKwl7IDB4M2IsIEtFWV9GMjMgfSwJCS8qIE1DRSArQ0gsICBvbiBZMDRHMDAzMyAqLworCXsgMHgzZiwgS0VZX0YyNCB9CQkvKiBNQ0UgLUNILCAgb24gWTA0RzAwMzMgKi8KIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3dpbmZhc3QpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3dpbmZhc3RfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc193aW5mYXN0LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc193aW5mYXN0KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc193aW5mYXN0X3RhYmxlKTsKIAotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGlubmFjbGVfY29sb3JbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgMHg1OSBdID0gS0VZX01VVEUsCi0JWyAweDRhIF0gPSBLRVlfUE9XRVIsCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3Bpbm5hY2xlX2NvbG9yW10gPSB7CisJeyAweDU5LCBLRVlfTVVURSB9LAorCXsgMHg0YSwgS0VZX1BPV0VSIH0sCiAKLQlbIDB4MTggXSA9IEtFWV9URVhULAotCVsgMHgyNiBdID0gS0VZX1RWLAotCVsgMHgzZCBdID0gS0VZX1BSSU5ULAorCXsgMHgxOCwgS0VZX1RFWFQgfSwKKwl7IDB4MjYsIEtFWV9UViB9LAorCXsgMHgzZCwgS0VZX1BSSU5UIH0sCiAKLQlbIDB4NDggXSA9IEtFWV9SRUQsCi0JWyAweDA0IF0gPSBLRVlfR1JFRU4sCi0JWyAweDExIF0gPSBLRVlfWUVMTE9XLAotCVsgMHgwMCBdID0gS0VZX0JMVUUsCisJeyAweDQ4LCBLRVlfUkVEIH0sCisJeyAweDA0LCBLRVlfR1JFRU4gfSwKKwl7IDB4MTEsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4MDAsIEtFWV9CTFVFIH0sCiAKLQlbIDB4MmQgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDB4MWUgXSA9IEtFWV9WT0xVTUVET1dOLAorCXsgMHgyZCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFlLCBLRVlfVk9MVU1FRE9XTiB9LAogCi0JWyAweDQ5IF0gPSBLRVlfTUVOVSwKKwl7IDB4NDksIEtFWV9NRU5VIH0sCiAKLQlbIDB4MTYgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAweDE3IF0gPSBLRVlfQ0hBTk5FTERPV04sCisJeyAweDE2LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDE3LCBLRVlfQ0hBTk5FTERPV04gfSwKIAotCVsgMHgyMCBdID0gS0VZX1VQLAotCVsgMHgyMSBdID0gS0VZX0RPV04sCi0JWyAweDIyIF0gPSBLRVlfTEVGVCwKLQlbIDB4MjMgXSA9IEtFWV9SSUdIVCwKLQlbIDB4MGQgXSA9IEtFWV9TRUxFQ1QsCisJeyAweDIwLCBLRVlfVVAgfSwKKwl7IDB4MjEsIEtFWV9ET1dOIH0sCisJeyAweDIyLCBLRVlfTEVGVCB9LAorCXsgMHgyMywgS0VZX1JJR0hUIH0sCisJeyAweDBkLCBLRVlfU0VMRUNUIH0sCiAKKwl7IDB4MDgsIEtFWV9CQUNLIH0sCisJeyAweDA3LCBLRVlfUkVGUkVTSCB9LAogCisJeyAweDJmLCBLRVlfWk9PTSB9LAorCXsgMHgyOSwgS0VZX1JFQ09SRCB9LAogCi0JWyAweDA4IF0gPSBLRVlfQkFDSywKLQlbIDB4MDcgXSA9IEtFWV9SRUZSRVNILAorCXsgMHg0YiwgS0VZX1BBVVNFIH0sCisJeyAweDRkLCBLRVlfUkVXSU5EIH0sCisJeyAweDJlLCBLRVlfUExBWSB9LAorCXsgMHg0ZSwgS0VZX0ZPUldBUkQgfSwKKwl7IDB4NTMsIEtFWV9QUkVWSU9VUyB9LAorCXsgMHg0YywgS0VZX1NUT1AgfSwKKwl7IDB4NTQsIEtFWV9ORVhUIH0sCiAKLQlbIDB4MmYgXSA9IEtFWV9aT09NLAotCVsgMHgyOSBdID0gS0VZX1JFQ09SRCwKKwl7IDB4NjksIEtFWV8wIH0sCisJeyAweDZhLCBLRVlfMSB9LAorCXsgMHg2YiwgS0VZXzIgfSwKKwl7IDB4NmMsIEtFWV8zIH0sCisJeyAweDZkLCBLRVlfNCB9LAorCXsgMHg2ZSwgS0VZXzUgfSwKKwl7IDB4NmYsIEtFWV82IH0sCisJeyAweDcwLCBLRVlfNyB9LAorCXsgMHg3MSwgS0VZXzggfSwKKwl7IDB4NzIsIEtFWV85IH0sCiAKLQlbIDB4NGIgXSA9IEtFWV9QQVVTRSwKLQlbIDB4NGQgXSA9IEtFWV9SRVdJTkQsCi0JWyAweDJlIF0gPSBLRVlfUExBWSwKLQlbIDB4NGUgXSA9IEtFWV9GT1JXQVJELAotCVsgMHg1MyBdID0gS0VZX1BSRVZJT1VTLAotCVsgMHg0YyBdID0gS0VZX1NUT1AsCi0JWyAweDU0IF0gPSBLRVlfTkVYVCwKLQotCVsgMHg2OSBdID0gS0VZXzAsCi0JWyAweDZhIF0gPSBLRVlfMSwKLQlbIDB4NmIgXSA9IEtFWV8yLAotCVsgMHg2YyBdID0gS0VZXzMsCi0JWyAweDZkIF0gPSBLRVlfNCwKLQlbIDB4NmUgXSA9IEtFWV81LAotCVsgMHg2ZiBdID0gS0VZXzYsCi0JWyAweDcwIF0gPSBLRVlfNywKLQlbIDB4NzEgXSA9IEtFWV84LAotCVsgMHg3MiBdID0gS0VZXzksCi0KLQlbIDB4NzQgXSA9IEtFWV9DSEFOTkVMLAotCVsgMHgwYSBdID0gS0VZX0JBQ0tTUEFDRSwKKwl7IDB4NzQsIEtFWV9DSEFOTkVMIH0sCisJeyAweDBhLCBLRVlfQkFDS1NQQUNFIH0sCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19waW5uYWNsZV9jb2xvcik7CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcGlubmFjbGVfY29sb3JfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19waW5uYWNsZV9jb2xvciwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcGlubmFjbGVfY29sb3IpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3Bpbm5hY2xlX2NvbG9yX3RhYmxlKTsKIAogLyogSGF1cHBhdWdlOiB0aGUgbmV3ZXIsIGdyYXkgcmVtb3RlcyAoc2VlbXMgdGhlcmUgYXJlIG11bHRpcGxlCiAgKiBzbGlnaHRseSBkaWZmZXJlbnQgdmVyc2lvbnMpLCBzaGlwcGVkIHdpdGggY3g4OCtpdnR2IGNhcmRzLgogICogYWxtb3N0IHJjNSBjb2RpbmcsIGJ1dCBzb21lIG5vbi1zdGFuZGFyZCBrZXlzICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3W0lSX0tFWVRBQl9TSVpFXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfaGF1cHBhdWdlX25ld1tdID0gewogCS8qIEtleXMgMCB0byA5ICovCi0JWyAweDAwIF0gPSBLRVlfMCwKLQlbIDB4MDEgXSA9IEtFWV8xLAotCVsgMHgwMiBdID0gS0VZXzIsCi0JWyAweDAzIF0gPSBLRVlfMywKLQlbIDB4MDQgXSA9IEtFWV80LAotCVsgMHgwNSBdID0gS0VZXzUsCi0JWyAweDA2IF0gPSBLRVlfNiwKLQlbIDB4MDcgXSA9IEtFWV83LAotCVsgMHgwOCBdID0gS0VZXzgsCi0JWyAweDA5IF0gPSBLRVlfOSwKKwl7IDB4MDAsIEtFWV8wIH0sCisJeyAweDAxLCBLRVlfMSB9LAorCXsgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDMsIEtFWV8zIH0sCisJeyAweDA0LCBLRVlfNCB9LAorCXsgMHgwNSwgS0VZXzUgfSwKKwl7IDB4MDYsIEtFWV82IH0sCisJeyAweDA3LCBLRVlfNyB9LAorCXsgMHgwOCwgS0VZXzggfSwKKwl7IDB4MDksIEtFWV85IH0sCiAKLQlbIDB4MGEgXSA9IEtFWV9URVhULCAgICAgIAkvKiBrZXlwYWQgYXN0ZXJpc2sgYXMgd2VsbCAqLwotCVsgMHgwYiBdID0gS0VZX1JFRCwJCS8qIHJlZCBidXR0b24gKi8KLQlbIDB4MGMgXSA9IEtFWV9SQURJTywKLQlbIDB4MGQgXSA9IEtFWV9NRU5VLAotCVsgMHgwZSBdID0gS0VZX1NVQlRJVExFLAkvKiBhbHNvIHRoZSAjIGtleSAqLwotCVsgMHgwZiBdID0gS0VZX01VVEUsCi0JWyAweDEwIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDExIF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MTIgXSA9IEtFWV9QUkVWSU9VUywJLyogcHJldmlvdXMgY2hhbm5lbCAqLwotCVsgMHgxNCBdID0gS0VZX1VQLAotCVsgMHgxNSBdID0gS0VZX0RPV04sCi0JWyAweDE2IF0gPSBLRVlfTEVGVCwKLQlbIDB4MTcgXSA9IEtFWV9SSUdIVCwKLQlbIDB4MTggXSA9IEtFWV9WSURFTywJCS8qIFZpZGVvcyAqLwotCVsgMHgxOSBdID0gS0VZX0FVRElPLAkJLyogTXVzaWMgKi8KKwl7IDB4MGEsIEtFWV9URVhUIH0sCQkvKiBrZXlwYWQgYXN0ZXJpc2sgYXMgd2VsbCAqLworCXsgMHgwYiwgS0VZX1JFRCB9LAkJLyogcmVkIGJ1dHRvbiAqLworCXsgMHgwYywgS0VZX1JBRElPIH0sCisJeyAweDBkLCBLRVlfTUVOVSB9LAorCXsgMHgwZSwgS0VZX1NVQlRJVExFIH0sCQkvKiBhbHNvIHRoZSAjIGtleSAqLworCXsgMHgwZiwgS0VZX01VVEUgfSwKKwl7IDB4MTAsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxMSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MTIsIEtFWV9QUkVWSU9VUyB9LAkJLyogcHJldmlvdXMgY2hhbm5lbCAqLworCXsgMHgxNCwgS0VZX1VQIH0sCisJeyAweDE1LCBLRVlfRE9XTiB9LAorCXsgMHgxNiwgS0VZX0xFRlQgfSwKKwl7IDB4MTcsIEtFWV9SSUdIVCB9LAorCXsgMHgxOCwgS0VZX1ZJREVPIH0sCQkvKiBWaWRlb3MgKi8KKwl7IDB4MTksIEtFWV9BVURJTyB9LAkJLyogTXVzaWMgKi8KIAkvKiAweDFhOiBQaWN0dXJlcyAtIHByZXN1bWUgdGhpcyBtZWFucwogCSAgICJNdWx0aW1lZGlhIEhvbWUgUGxhdGZvcm0iIC0KIAkgICBubyAiUElDVFVSRVMiIGtleSBpbiBpbnB1dC5oCiAJICovCi0JWyAweDFhIF0gPSBLRVlfTUhQLAorCXsgMHgxYSwgS0VZX01IUCB9LAogCi0JWyAweDFiIF0gPSBLRVlfRVBHLAkJLyogR3VpZGUgKi8KLQlbIDB4MWMgXSA9IEtFWV9UViwKLQlbIDB4MWUgXSA9IEtFWV9ORVhUU09ORywJLyogc2tpcCA+fCAqLwotCVsgMHgxZiBdID0gS0VZX0VYSVQsCQkvKiBiYWNrL2V4aXQgKi8KLQlbIDB4MjAgXSA9IEtFWV9DSEFOTkVMVVAsCS8qIGNoYW5uZWwgLyBwcm9ncmFtICsgKi8KLQlbIDB4MjEgXSA9IEtFWV9DSEFOTkVMRE9XTiwJLyogY2hhbm5lbCAvIHByb2dyYW0gLSAqLwotCVsgMHgyMiBdID0gS0VZX0NIQU5ORUwsCQkvKiBzb3VyY2UgKG9sZCBibGFjayByZW1vdGUpICovCi0JWyAweDI0IF0gPSBLRVlfUFJFVklPVVNTT05HLAkvKiByZXBsYXkgfDwgKi8KLQlbIDB4MjUgXSA9IEtFWV9FTlRFUiwJCS8qIE9LICovCi0JWyAweDI2IF0gPSBLRVlfU0xFRVAsCQkvKiBtaW5pbWl6ZSAob2xkIGJsYWNrIHJlbW90ZSkgKi8KLQlbIDB4MjkgXSA9IEtFWV9CTFVFLAkJLyogYmx1ZSBrZXkgKi8KLQlbIDB4MmUgXSA9IEtFWV9HUkVFTiwJCS8qIGdyZWVuIGJ1dHRvbiAqLwotCVsgMHgzMCBdID0gS0VZX1BBVVNFLAkJLyogcGF1c2UgKi8KLQlbIDB4MzIgXSA9IEtFWV9SRVdJTkQsCQkvKiBiYWNrd2FyZCA8PCAqLwotCVsgMHgzNCBdID0gS0VZX0ZBU1RGT1JXQVJELAkvKiBmb3J3YXJkID4+ICovCi0JWyAweDM1IF0gPSBLRVlfUExBWSwKLQlbIDB4MzYgXSA9IEtFWV9TVE9QLAotCVsgMHgzNyBdID0gS0VZX1JFQ09SRCwJCS8qIHJlY29yZGluZyAqLwotCVsgMHgzOCBdID0gS0VZX1lFTExPVywJCS8qIHllbGxvdyBrZXkgKi8KLQlbIDB4M2IgXSA9IEtFWV9TRUxFQ1QsCQkvKiB0b3AgcmlnaHQgYnV0dG9uICovCi0JWyAweDNjIF0gPSBLRVlfWk9PTSwJCS8qIGZ1bGwgKi8KLQlbIDB4M2QgXSA9IEtFWV9QT1dFUiwJCS8qIHN5c3RlbSBwb3dlciAoZ3JlZW4gYnV0dG9uKSAqLworCXsgMHgxYiwgS0VZX0VQRyB9LAkJLyogR3VpZGUgKi8KKwl7IDB4MWMsIEtFWV9UViB9LAorCXsgMHgxZSwgS0VZX05FWFRTT05HIH0sCQkvKiBza2lwID58ICovCisJeyAweDFmLCBLRVlfRVhJVCB9LAkJLyogYmFjay9leGl0ICovCisJeyAweDIwLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtICsgKi8KKwl7IDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsIC8gcHJvZ3JhbSAtICovCisJeyAweDIyLCBLRVlfQ0hBTk5FTCB9LAkJLyogc291cmNlIChvbGQgYmxhY2sgcmVtb3RlKSAqLworCXsgMHgyNCwgS0VZX1BSRVZJT1VTU09ORyB9LAkvKiByZXBsYXkgfDwgKi8KKwl7IDB4MjUsIEtFWV9FTlRFUiB9LAkJLyogT0sgKi8KKwl7IDB4MjYsIEtFWV9TTEVFUCB9LAkJLyogbWluaW1pemUgKG9sZCBibGFjayByZW1vdGUpICovCisJeyAweDI5LCBLRVlfQkxVRSB9LAkJLyogYmx1ZSBrZXkgKi8KKwl7IDB4MmUsIEtFWV9HUkVFTiB9LAkJLyogZ3JlZW4gYnV0dG9uICovCisJeyAweDMwLCBLRVlfUEFVU0UgfSwJCS8qIHBhdXNlICovCisJeyAweDMyLCBLRVlfUkVXSU5EIH0sCQkvKiBiYWNrd2FyZCA8PCAqLworCXsgMHgzNCwgS0VZX0ZBU1RGT1JXQVJEIH0sCS8qIGZvcndhcmQgPj4gKi8KKwl7IDB4MzUsIEtFWV9QTEFZIH0sCisJeyAweDM2LCBLRVlfU1RPUCB9LAorCXsgMHgzNywgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkaW5nICovCisJeyAweDM4LCBLRVlfWUVMTE9XIH0sCQkvKiB5ZWxsb3cga2V5ICovCisJeyAweDNiLCBLRVlfU0VMRUNUIH0sCQkvKiB0b3AgcmlnaHQgYnV0dG9uICovCisJeyAweDNjLCBLRVlfWk9PTSB9LAkJLyogZnVsbCAqLworCXsgMHgzZCwgS0VZX1BPV0VSIH0sCQkvKiBzeXN0ZW0gcG93ZXIgKGdyZWVuIGJ1dHRvbikgKi8KIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2hhdXBwYXVnZV9uZXcpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2hhdXBwYXVnZV9uZXdfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3X3RhYmxlKTsKIAotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfbnBndGVjaFtJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAweDFkIF0gPSBLRVlfU1dJVENIVklERU9NT0RFLCAvKiBzd2l0Y2ggaW5wdXRzICovCi0JWyAweDJhIF0gPSBLRVlfRlJPTlQsCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX25wZ3RlY2hbXSA9IHsKKwl7IDB4MWQsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwJLyogc3dpdGNoIGlucHV0cyAqLworCXsgMHgyYSwgS0VZX0ZST05UIH0sCiAKLQlbIDB4M2UgXSA9IEtFWV8xLAotCVsgMHgwMiBdID0gS0VZXzIsCi0JWyAweDA2IF0gPSBLRVlfMywKLQlbIDB4MGEgXSA9IEtFWV80LAotCVsgMHgwZSBdID0gS0VZXzUsCi0JWyAweDEyIF0gPSBLRVlfNiwKLQlbIDB4MTYgXSA9IEtFWV83LAotCVsgMHgxYSBdID0gS0VZXzgsCi0JWyAweDFlIF0gPSBLRVlfOSwKLQlbIDB4M2EgXSA9IEtFWV8wLAotCVsgMHgyMiBdID0gS0VZX05VTUxPQ0ssICAgICAgICAgLyogLS8tLSAqLwotCVsgMHgyMCBdID0gS0VZX1JFRlJFU0gsCisJeyAweDNlLCBLRVlfMSB9LAorCXsgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDYsIEtFWV8zIH0sCisJeyAweDBhLCBLRVlfNCB9LAorCXsgMHgwZSwgS0VZXzUgfSwKKwl7IDB4MTIsIEtFWV82IH0sCisJeyAweDE2LCBLRVlfNyB9LAorCXsgMHgxYSwgS0VZXzggfSwKKwl7IDB4MWUsIEtFWV85IH0sCisJeyAweDNhLCBLRVlfMCB9LAorCXsgMHgyMiwgS0VZX05VTUxPQ0sgfSwJCS8qIC0vLS0gKi8KKwl7IDB4MjAsIEtFWV9SRUZSRVNIIH0sCiAKLQlbIDB4MDMgXSA9IEtFWV9CUklHSFRORVNTRE9XTiwKLQlbIDB4MjggXSA9IEtFWV9BVURJTywKLQlbIDB4M2MgXSA9IEtFWV9VUCwKLQlbIDB4M2YgXSA9IEtFWV9MRUZULAotCVsgMHgyZSBdID0gS0VZX01VVEUsCi0JWyAweDNiIF0gPSBLRVlfUklHSFQsCi0JWyAweDAwIF0gPSBLRVlfRE9XTiwKLQlbIDB4MDcgXSA9IEtFWV9CUklHSFRORVNTVVAsCi0JWyAweDJjIF0gPSBLRVlfVEVYVCwKKwl7IDB4MDMsIEtFWV9CUklHSFRORVNTRE9XTiB9LAorCXsgMHgyOCwgS0VZX0FVRElPIH0sCisJeyAweDNjLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDNmLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgyZSwgS0VZX01VVEUgfSwKKwl7IDB4M2IsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwMCwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDA3LCBLRVlfQlJJR0hUTkVTU1VQIH0sCisJeyAweDJjLCBLRVlfVEVYVCB9LAogCi0JWyAweDM3IF0gPSBLRVlfUkVDT1JELAotCVsgMHgxNyBdID0gS0VZX1BMQVksCi0JWyAweDEzIF0gPSBLRVlfUEFVU0UsCi0JWyAweDI2IF0gPSBLRVlfU1RPUCwKLQlbIDB4MTggXSA9IEtFWV9GQVNURk9SV0FSRCwKLQlbIDB4MTQgXSA9IEtFWV9SRVdJTkQsCi0JWyAweDMzIF0gPSBLRVlfWk9PTSwKLQlbIDB4MzIgXSA9IEtFWV9LRVlCT0FSRCwKLQlbIDB4MzAgXSA9IEtFWV9HT1RPLCAgICAgICAgICAgIC8qIFBvaW50aW5nIGFycm93ICovCi0JWyAweDM2IF0gPSBLRVlfTUFDUk8sICAgICAgICAgICAvKiBNYXhpbWl6ZS9NaW5pbWl6ZSAoeWVsbG93KSAqLwotCVsgMHgwYiBdID0gS0VZX1JBRElPLAotCVsgMHgxMCBdID0gS0VZX1BPV0VSLAorCXsgMHgzNywgS0VZX1JFQ09SRCB9LAorCXsgMHgxNywgS0VZX1BMQVkgfSwKKwl7IDB4MTMsIEtFWV9QQVVTRSB9LAorCXsgMHgyNiwgS0VZX1NUT1AgfSwKKwl7IDB4MTgsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgxNCwgS0VZX1JFV0lORCB9LAorCXsgMHgzMywgS0VZX1pPT00gfSwKKwl7IDB4MzIsIEtFWV9LRVlCT0FSRCB9LAorCXsgMHgzMCwgS0VZX0dPVE8gfSwJCS8qIFBvaW50aW5nIGFycm93ICovCisJeyAweDM2LCBLRVlfTUFDUk8gfSwJCS8qIE1heGltaXplL01pbmltaXplICh5ZWxsb3cpICovCisJeyAweDBiLCBLRVlfUkFESU8gfSwKKwl7IDB4MTAsIEtFWV9QT1dFUiB9LAogCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19ucGd0ZWNoKTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19ucGd0ZWNoX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfbnBndGVjaCwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfbnBndGVjaCksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfbnBndGVjaF90YWJsZSk7CiAKIC8qIE5vcndvb2QgTWljcm8gKG5vbi1Qcm8pIFRWIFR1bmVyCiAgICBCeSBQZXRlciBOYXVsbHMgPHBldGVyQGNob2NreS5vcmc+CiAgICBLZXkgY29tbWVudHMgYXJlIHRoZSBmdW5jdGlvbnMgZ2l2ZW4gaW4gdGhlIG1hbnVhbCAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfbm9yd29vZFtJUl9LRVlUQUJfU0laRV0gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX25vcndvb2RbXSA9IHsKIAkvKiBLZXlzIDAgdG8gOSAqLwotCVsgMHgyMCBdID0gS0VZXzAsCi0JWyAweDIxIF0gPSBLRVlfMSwKLQlbIDB4MjIgXSA9IEtFWV8yLAotCVsgMHgyMyBdID0gS0VZXzMsCi0JWyAweDI0IF0gPSBLRVlfNCwKLQlbIDB4MjUgXSA9IEtFWV81LAotCVsgMHgyNiBdID0gS0VZXzYsCi0JWyAweDI3IF0gPSBLRVlfNywKLQlbIDB4MjggXSA9IEtFWV84LAotCVsgMHgyOSBdID0gS0VZXzksCisJeyAweDIwLCBLRVlfMCB9LAorCXsgMHgyMSwgS0VZXzEgfSwKKwl7IDB4MjIsIEtFWV8yIH0sCisJeyAweDIzLCBLRVlfMyB9LAorCXsgMHgyNCwgS0VZXzQgfSwKKwl7IDB4MjUsIEtFWV81IH0sCisJeyAweDI2LCBLRVlfNiB9LAorCXsgMHgyNywgS0VZXzcgfSwKKwl7IDB4MjgsIEtFWV84IH0sCisJeyAweDI5LCBLRVlfOSB9LAogCi0JWyAweDc4IF0gPSBLRVlfVFVORVIsICAgICAgICAgICAgIC8qIFZpZGVvIFNvdXJjZSAgICAgICAgKi8KLQlbIDB4MmMgXSA9IEtFWV9FWElULCAgICAgICAgICAgICAgLyogT3Blbi9DbG9zZSBzb2Z0d2FyZSAqLwotCVsgMHgyYSBdID0gS0VZX1NFTEVDVCwgICAgICAgICAgICAvKiAyIERpZ2l0IFNlbGVjdCAgICAgICovCi0JWyAweDY5IF0gPSBLRVlfQUdBSU4sICAgICAgICAgICAgIC8qIFJlY2FsbCAgICAgICAgICAgICAgKi8KKwl7IDB4NzgsIEtFWV9UVU5FUiB9LAkJLyogVmlkZW8gU291cmNlICAgICAgICAqLworCXsgMHgyYywgS0VZX0VYSVQgfSwJCS8qIE9wZW4vQ2xvc2Ugc29mdHdhcmUgKi8KKwl7IDB4MmEsIEtFWV9TRUxFQ1QgfSwJCS8qIDIgRGlnaXQgU2VsZWN0ICAgICAgKi8KKwl7IDB4NjksIEtFWV9BR0FJTiB9LAkJLyogUmVjYWxsICAgICAgICAgICAgICAqLwogCi0JWyAweDMyIF0gPSBLRVlfQlJJR0hUTkVTU1VQLCAgICAgIC8qIEJyaWdodG5lc3MgaW5jcmVhc2UgKi8KLQlbIDB4MzMgXSA9IEtFWV9CUklHSFRORVNTRE9XTiwgICAgLyogQnJpZ2h0bmVzcyBkZWNyZWFzZSAqLwotCVsgMHg2YiBdID0gS0VZX0tQUExVUywgICAgICAgICAgICAvKiAobm90IG5hbWVkID4+Pj4+KSAgICovCi0JWyAweDZjIF0gPSBLRVlfS1BNSU5VUywgICAgICAgICAgIC8qIChub3QgbmFtZWQgPDw8PDwpICAgKi8KKwl7IDB4MzIsIEtFWV9CUklHSFRORVNTVVAgfSwJLyogQnJpZ2h0bmVzcyBpbmNyZWFzZSAqLworCXsgMHgzMywgS0VZX0JSSUdIVE5FU1NET1dOIH0sCS8qIEJyaWdodG5lc3MgZGVjcmVhc2UgKi8KKwl7IDB4NmIsIEtFWV9LUFBMVVMgfSwJCS8qIChub3QgbmFtZWQgPj4+Pj4pICAgKi8KKwl7IDB4NmMsIEtFWV9LUE1JTlVTIH0sCQkvKiAobm90IG5hbWVkIDw8PDw8KSAgICovCiAKLQlbIDB4MmQgXSA9IEtFWV9NVVRFLCAgICAgICAgICAgICAgLyogTXV0ZSAgICAgICAgICAgICAgICAqLwotCVsgMHgzMCBdID0gS0VZX1ZPTFVNRVVQLCAgICAgICAgICAvKiBWb2x1bWUgdXAgICAgICAgICAgICovCi0JWyAweDMxIF0gPSBLRVlfVk9MVU1FRE9XTiwgICAgICAgIC8qIFZvbHVtZSBkb3duICAgICAgICAgKi8KLQlbIDB4NjAgXSA9IEtFWV9DSEFOTkVMVVAsICAgICAgICAgLyogQ2hhbm5lbCB1cCAgICAgICAgICAqLwotCVsgMHg2MSBdID0gS0VZX0NIQU5ORUxET1dOLCAgICAgICAvKiBDaGFubmVsIGRvd24gICAgICAgICovCisJeyAweDJkLCBLRVlfTVVURSB9LAkJLyogTXV0ZSAgICAgICAgICAgICAgICAqLworCXsgMHgzMCwgS0VZX1ZPTFVNRVVQIH0sCQkvKiBWb2x1bWUgdXAgICAgICAgICAgICovCisJeyAweDMxLCBLRVlfVk9MVU1FRE9XTiB9LAkvKiBWb2x1bWUgZG93biAgICAgICAgICovCisJeyAweDYwLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIENoYW5uZWwgdXAgICAgICAgICAgKi8KKwl7IDB4NjEsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBDaGFubmVsIGRvd24gICAgICAgICovCiAKLQlbIDB4M2YgXSA9IEtFWV9SRUNPUkQsICAgICAgICAgICAgLyogUmVjb3JkICAgICAgICAgICAgICAqLwotCVsgMHgzNyBdID0gS0VZX1BMQVksICAgICAgICAgICAgICAvKiBQbGF5ICAgICAgICAgICAgICAgICovCi0JWyAweDM2IF0gPSBLRVlfUEFVU0UsICAgICAgICAgICAgIC8qIFBhdXNlICAgICAgICAgICAgICAgKi8KLQlbIDB4MmIgXSA9IEtFWV9TVE9QLCAgICAgICAgICAgICAgLyogU3RvcCAgICAgICAgICAgICAgICAqLwotCVsgMHg2NyBdID0gS0VZX0ZBU1RGT1JXQVJELCAgICAgICAvKiBGb3dhcmQgICAgICAgICAgICAgICovCi0JWyAweDY2IF0gPSBLRVlfUkVXSU5ELCAgICAgICAgICAgIC8qIFJld2luZCAgICAgICAgICAgICAgKi8KLQlbIDB4M2UgXSA9IEtFWV9TRUFSQ0gsICAgICAgICAgICAgLyogQXV0byBTY2FuICAgICAgICAgICAqLwotCVsgMHgyZSBdID0gS0VZX0NBTUVSQSwgICAgICAgICAgICAvKiBDYXB0dXJlIFZpZGVvICAgICAgICovCi0JWyAweDZkIF0gPSBLRVlfTUVOVSwgICAgICAgICAgICAgIC8qIFNob3cvSGlkZSBDb250cm9sICAgKi8KLQlbIDB4MmYgXSA9IEtFWV9aT09NLCAgICAgICAgICAgICAgLyogRnVsbCBTY3JlZW4gICAgICAgICAqLwotCVsgMHgzNCBdID0gS0VZX1JBRElPLCAgICAgICAgICAgICAvKiBGTSAgICAgICAgICAgICAgICAgICovCi0JWyAweDY1IF0gPSBLRVlfUE9XRVIsICAgICAgICAgICAgIC8qIENvbXB1dGVyIHBvd2VyICAgICAgKi8KKwl7IDB4M2YsIEtFWV9SRUNPUkQgfSwJCS8qIFJlY29yZCAgICAgICAgICAgICAgKi8KKwl7IDB4MzcsIEtFWV9QTEFZIH0sCQkvKiBQbGF5ICAgICAgICAgICAgICAgICovCisJeyAweDM2LCBLRVlfUEFVU0UgfSwJCS8qIFBhdXNlICAgICAgICAgICAgICAgKi8KKwl7IDB4MmIsIEtFWV9TVE9QIH0sCQkvKiBTdG9wICAgICAgICAgICAgICAgICovCisJeyAweDY3LCBLRVlfRkFTVEZPUldBUkQgfSwJLyogRm93YXJkICAgICAgICAgICAgICAqLworCXsgMHg2NiwgS0VZX1JFV0lORCB9LAkJLyogUmV3aW5kICAgICAgICAgICAgICAqLworCXsgMHgzZSwgS0VZX1NFQVJDSCB9LAkJLyogQXV0byBTY2FuICAgICAgICAgICAqLworCXsgMHgyZSwgS0VZX0NBTUVSQSB9LAkJLyogQ2FwdHVyZSBWaWRlbyAgICAgICAqLworCXsgMHg2ZCwgS0VZX01FTlUgfSwJCS8qIFNob3cvSGlkZSBDb250cm9sICAgKi8KKwl7IDB4MmYsIEtFWV9aT09NIH0sCQkvKiBGdWxsIFNjcmVlbiAgICAgICAgICovCisJeyAweDM0LCBLRVlfUkFESU8gfSwJCS8qIEZNICAgICAgICAgICAgICAgICAgKi8KKwl7IDB4NjUsIEtFWV9QT1dFUiB9LAkJLyogQ29tcHV0ZXIgcG93ZXIgICAgICAqLwogfTsKIAotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfbm9yd29vZCk7CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfbm9yd29vZF90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX25vcndvb2QsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX25vcndvb2QpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX25vcndvb2RfdGFibGUpOwogCiAvKiBGcm9tIHJlYWRpbmcgdGhlIGZvbGxvd2luZyByZW1vdGVzOgogICogWmVuaXRoIFVuaXZlcnNhbCA3IC8gVFYgTW9kZSA4MDcgLyBWQ1IgTW9kZSA4MzcKICAqIEhhdXBwYXVnZSAoZnJvbSBOT1ZBLUNJLXMgYm94IHByb2R1Y3QpCiAgKiBUaGlzIGlzIGEgIm1pZGRsZSBvZiB0aGUgcm9hZCIgYXBwcm9hY2gsIGRpZmZlcmVuY2VzIGFyZSBub3RlZAogICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19idWRnZXRfY2lfb2xkW0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbIDB4MDAgXSA9IEtFWV8wLAotCVsgMHgwMSBdID0gS0VZXzEsCi0JWyAweDAyIF0gPSBLRVlfMiwKLQlbIDB4MDMgXSA9IEtFWV8zLAotCVsgMHgwNCBdID0gS0VZXzQsCi0JWyAweDA1IF0gPSBLRVlfNSwKLQlbIDB4MDYgXSA9IEtFWV82LAotCVsgMHgwNyBdID0gS0VZXzcsCi0JWyAweDA4IF0gPSBLRVlfOCwKLQlbIDB4MDkgXSA9IEtFWV85LAotCVsgMHgwYSBdID0gS0VZX0VOVEVSLAotCVsgMHgwYiBdID0gS0VZX1JFRCwKLQlbIDB4MGMgXSA9IEtFWV9QT1dFUiwgICAgICAgICAgICAgLyogUkFESU8gb24gSGF1cHBhdWdlICovCi0JWyAweDBkIF0gPSBLRVlfTVVURSwKLQlbIDB4MGYgXSA9IEtFWV9BLCAgICAgICAgICAgICAgICAgLyogVFYgb24gSGF1cHBhdWdlICovCi0JWyAweDEwIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDExIF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MTQgXSA9IEtFWV9CLAotCVsgMHgxYyBdID0gS0VZX1VQLAotCVsgMHgxZCBdID0gS0VZX0RPV04sCi0JWyAweDFlIF0gPSBLRVlfT1BUSU9OLCAgICAgICAgICAgIC8qIFJFU0VSVkVEIG9uIEhhdXBwYXVnZSAqLwotCVsgMHgxZiBdID0gS0VZX0JSRUFLLAotCVsgMHgyMCBdID0gS0VZX0NIQU5ORUxVUCwKLQlbIDB4MjEgXSA9IEtFWV9DSEFOTkVMRE9XTiwKLQlbIDB4MjIgXSA9IEtFWV9QUkVWSU9VUywgICAgICAgICAgLyogUHJldi4gQ2ggb24gWmVuaXRoLCBTT1VSQ0Ugb24gSGF1cHBhdWdlICovCi0JWyAweDI0IF0gPSBLRVlfUkVTVEFSVCwKLQlbIDB4MjUgXSA9IEtFWV9PSywKLQlbIDB4MjYgXSA9IEtFWV9DWUNMRVdJTkRPV1MsICAgICAgLyogTUlOSU1JWkUgb24gSGF1cHBhdWdlICovCi0JWyAweDI4IF0gPSBLRVlfRU5URVIsICAgICAgICAgICAgIC8qIFZDUiBtb2RlIG9uIFplbml0aCAqLwotCVsgMHgyOSBdID0gS0VZX1BBVVNFLAotCVsgMHgyYiBdID0gS0VZX1JJR0hULAotCVsgMHgyYyBdID0gS0VZX0xFRlQsCi0JWyAweDJlIF0gPSBLRVlfTUVOVSwgICAgICAgICAgICAgIC8qIEZVTEwgU0NSRUVOIG9uIEhhdXBwYXVnZSAqLwotCVsgMHgzMCBdID0gS0VZX1NMT1csCi0JWyAweDMxIF0gPSBLRVlfUFJFVklPVVMsICAgICAgICAgIC8qIFZDUiBtb2RlIG9uIFplbml0aCAqLwotCVsgMHgzMiBdID0gS0VZX1JFV0lORCwKLQlbIDB4MzQgXSA9IEtFWV9GQVNURk9SV0FSRCwKLQlbIDB4MzUgXSA9IEtFWV9QTEFZLAotCVsgMHgzNiBdID0gS0VZX1NUT1AsCi0JWyAweDM3IF0gPSBLRVlfUkVDT1JELAotCVsgMHgzOCBdID0gS0VZX1RVTkVSLCAgICAgICAgICAgICAvKiBUVi9WQ1Igb24gWmVuaXRoICovCi0JWyAweDNhIF0gPSBLRVlfQywKLQlbIDB4M2MgXSA9IEtFWV9FWElULAotCVsgMHgzZCBdID0gS0VZX1BPV0VSMiwKLQlbIDB4M2UgXSA9IEtFWV9UVU5FUiwKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYnVkZ2V0X2NpX29sZFtdID0geworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MGEsIEtFWV9FTlRFUiB9LAorCXsgMHgwYiwgS0VZX1JFRCB9LAorCXsgMHgwYywgS0VZX1BPV0VSIH0sCQkvKiBSQURJTyBvbiBIYXVwcGF1Z2UgKi8KKwl7IDB4MGQsIEtFWV9NVVRFIH0sCisJeyAweDBmLCBLRVlfQSB9LAkJLyogVFYgb24gSGF1cHBhdWdlICovCisJeyAweDEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDE0LCBLRVlfQiB9LAorCXsgMHgxYywgS0VZX1VQIH0sCisJeyAweDFkLCBLRVlfRE9XTiB9LAorCXsgMHgxZSwgS0VZX09QVElPTiB9LAkJLyogUkVTRVJWRUQgb24gSGF1cHBhdWdlICovCisJeyAweDFmLCBLRVlfQlJFQUsgfSwKKwl7IDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgyMiwgS0VZX1BSRVZJT1VTIH0sCQkvKiBQcmV2IENoIG9uIFplbml0aCwgU09VUkNFIG9uIEhhdXBwYXVnZSAqLworCXsgMHgyNCwgS0VZX1JFU1RBUlQgfSwKKwl7IDB4MjUsIEtFWV9PSyB9LAorCXsgMHgyNiwgS0VZX0NZQ0xFV0lORE9XUyB9LAkvKiBNSU5JTUlaRSBvbiBIYXVwcGF1Z2UgKi8KKwl7IDB4MjgsIEtFWV9FTlRFUiB9LAkJLyogVkNSIG1vZGUgb24gWmVuaXRoICovCisJeyAweDI5LCBLRVlfUEFVU0UgfSwKKwl7IDB4MmIsIEtFWV9SSUdIVCB9LAorCXsgMHgyYywgS0VZX0xFRlQgfSwKKwl7IDB4MmUsIEtFWV9NRU5VIH0sCQkvKiBGVUxMIFNDUkVFTiBvbiBIYXVwcGF1Z2UgKi8KKwl7IDB4MzAsIEtFWV9TTE9XIH0sCisJeyAweDMxLCBLRVlfUFJFVklPVVMgfSwJCS8qIFZDUiBtb2RlIG9uIFplbml0aCAqLworCXsgMHgzMiwgS0VZX1JFV0lORCB9LAorCXsgMHgzNCwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDM1LCBLRVlfUExBWSB9LAorCXsgMHgzNiwgS0VZX1NUT1AgfSwKKwl7IDB4MzcsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MzgsIEtFWV9UVU5FUiB9LAkJLyogVFYvVkNSIG9uIFplbml0aCAqLworCXsgMHgzYSwgS0VZX0MgfSwKKwl7IDB4M2MsIEtFWV9FWElUIH0sCisJeyAweDNkLCBLRVlfUE9XRVIyIH0sCisJeyAweDNlLCBLRVlfVFVORVIgfSwKIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2J1ZGdldF9jaV9vbGQpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2J1ZGdldF9jaV9vbGRfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19idWRnZXRfY2lfb2xkLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19idWRnZXRfY2lfb2xkKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19idWRnZXRfY2lfb2xkX3RhYmxlKTsKIAogLyoKICAqIE1hcmMgRmFyZ2FzIDx0ZWxlbmlla29AdGVsZW5pZWtvLmNvbT4KICAqIHRoaXMgaXMgdGhlIHJlbW90ZSBjb250cm9sIHRoYXQgY29tZXMgd2l0aCB0aGUgYXN1cyBwNzEzMQogICogd2hpY2ggaGFzIGEgbGFiZWwgc2F5aW5nIGlzICJNb2RlbCBQQy0zOSIKICAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXN1c19wYzM5W0lSX0tFWVRBQl9TSVpFXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYXN1c19wYzM5W10gPSB7CiAJLyogS2V5cyAwIHRvIDkgKi8KLQlbIDB4MTUgXSA9IEtFWV8wLAotCVsgMHgyOSBdID0gS0VZXzEsCi0JWyAweDJkIF0gPSBLRVlfMiwKLQlbIDB4MmIgXSA9IEtFWV8zLAotCVsgMHgwOSBdID0gS0VZXzQsCi0JWyAweDBkIF0gPSBLRVlfNSwKLQlbIDB4MGIgXSA9IEtFWV82LAotCVsgMHgzMSBdID0gS0VZXzcsCi0JWyAweDM1IF0gPSBLRVlfOCwKLQlbIDB4MzMgXSA9IEtFWV85LAorCXsgMHgxNSwgS0VZXzAgfSwKKwl7IDB4MjksIEtFWV8xIH0sCisJeyAweDJkLCBLRVlfMiB9LAorCXsgMHgyYiwgS0VZXzMgfSwKKwl7IDB4MDksIEtFWV80IH0sCisJeyAweDBkLCBLRVlfNSB9LAorCXsgMHgwYiwgS0VZXzYgfSwKKwl7IDB4MzEsIEtFWV83IH0sCisJeyAweDM1LCBLRVlfOCB9LAorCXsgMHgzMywgS0VZXzkgfSwKIAotCVsgMHgzZSBdID0gS0VZX1JBRElPLAkJLyogcmFkaW8gKi8KLQlbIDB4MDMgXSA9IEtFWV9NRU5VLAkJLyogZHZkL21lbnUgKi8KLQlbIDB4MmEgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDB4MTkgXSA9IEtFWV9WT0xVTUVET1dOLAotCVsgMHgzNyBdID0gS0VZX1VQLAotCVsgMHgzYiBdID0gS0VZX0RPV04sCi0JWyAweDI3IF0gPSBLRVlfTEVGVCwKLQlbIDB4MmYgXSA9IEtFWV9SSUdIVCwKLQlbIDB4MjUgXSA9IEtFWV9WSURFTywJCS8qIHZpZGVvICovCi0JWyAweDM5IF0gPSBLRVlfQVVESU8sCQkvKiBtdXNpYyAqLworCXsgMHgzZSwgS0VZX1JBRElPIH0sCQkvKiByYWRpbyAqLworCXsgMHgwMywgS0VZX01FTlUgfSwJCS8qIGR2ZC9tZW51ICovCisJeyAweDJhLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MTksIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDM3LCBLRVlfVVAgfSwKKwl7IDB4M2IsIEtFWV9ET1dOIH0sCisJeyAweDI3LCBLRVlfTEVGVCB9LAorCXsgMHgyZiwgS0VZX1JJR0hUIH0sCisJeyAweDI1LCBLRVlfVklERU8gfSwJCS8qIHZpZGVvICovCisJeyAweDM5LCBLRVlfQVVESU8gfSwJCS8qIG11c2ljICovCiAKLQlbIDB4MjEgXSA9IEtFWV9UViwJCS8qIHR2ICovCi0JWyAweDFkIF0gPSBLRVlfRVhJVCwJCS8qIGJhY2sgKi8KLQlbIDB4MGEgXSA9IEtFWV9DSEFOTkVMVVAsCS8qIGNoYW5uZWwgLyBwcm9ncmFtICsgKi8KLQlbIDB4MWIgXSA9IEtFWV9DSEFOTkVMRE9XTiwJLyogY2hhbm5lbCAvIHByb2dyYW0gLSAqLwotCVsgMHgxYSBdID0gS0VZX0VOVEVSLAkJLyogZW50ZXIgKi8KKwl7IDB4MjEsIEtFWV9UViB9LAkJLyogdHYgKi8KKwl7IDB4MWQsIEtFWV9FWElUIH0sCQkvKiBiYWNrICovCisJeyAweDBhLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtICsgKi8KKwl7IDB4MWIsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsIC8gcHJvZ3JhbSAtICovCisJeyAweDFhLCBLRVlfRU5URVIgfSwJCS8qIGVudGVyICovCiAKLQlbIDB4MDYgXSA9IEtFWV9QQVVTRSwJCS8qIHBsYXkvcGF1c2UgKi8KLQlbIDB4MWUgXSA9IEtFWV9QUkVWSU9VUywJLyogcmV3ICovCi0JWyAweDI2IF0gPSBLRVlfTkVYVCwJCS8qIGZvcndhcmQgKi8KLQlbIDB4MGUgXSA9IEtFWV9SRVdJTkQsCQkvKiBiYWNrd2FyZCA8PCAqLwotCVsgMHgzYSBdID0gS0VZX0ZBU1RGT1JXQVJELAkvKiBmb3J3YXJkID4+ICovCi0JWyAweDM2IF0gPSBLRVlfU1RPUCwKLQlbIDB4MmUgXSA9IEtFWV9SRUNPUkQsCQkvKiByZWNvcmRpbmcgKi8KLQlbIDB4MTYgXSA9IEtFWV9QT1dFUiwJCS8qIHRoZSBidXR0b24gdGhhdCByZWFkcyAiY2xvc2UiICovCisJeyAweDA2LCBLRVlfUEFVU0UgfSwJCS8qIHBsYXkvcGF1c2UgKi8KKwl7IDB4MWUsIEtFWV9QUkVWSU9VUyB9LAkJLyogcmV3ICovCisJeyAweDI2LCBLRVlfTkVYVCB9LAkJLyogZm9yd2FyZCAqLworCXsgMHgwZSwgS0VZX1JFV0lORCB9LAkJLyogYmFja3dhcmQgPDwgKi8KKwl7IDB4M2EsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBmb3J3YXJkID4+ICovCisJeyAweDM2LCBLRVlfU1RPUCB9LAorCXsgMHgyZSwgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkaW5nICovCisJeyAweDE2LCBLRVlfUE9XRVIgfSwJCS8qIHRoZSBidXR0b24gdGhhdCByZWFkcyAiY2xvc2UiICovCiAKLQlbIDB4MTEgXSA9IEtFWV9aT09NLAkJLyogZnVsbCBzY3JlZW4gKi8KLQlbIDB4MTMgXSA9IEtFWV9NQUNSTywJCS8qIHJlY2FsbCAqLwotCVsgMHgyMyBdID0gS0VZX0hPTUUsCQkvKiBob21lICovCi0JWyAweDA1IF0gPSBLRVlfUFZSLAkJLyogcGljdHVyZSAqLwotCVsgMHgzZCBdID0gS0VZX01VVEUsCQkvKiBtdXRlICovCi0JWyAweDAxIF0gPSBLRVlfRFZELAkJLyogZHZkICovCisJeyAweDExLCBLRVlfWk9PTSB9LAkJLyogZnVsbCBzY3JlZW4gKi8KKwl7IDB4MTMsIEtFWV9NQUNSTyB9LAkJLyogcmVjYWxsICovCisJeyAweDIzLCBLRVlfSE9NRSB9LAkJLyogaG9tZSAqLworCXsgMHgwNSwgS0VZX1BWUiB9LAkJLyogcGljdHVyZSAqLworCXsgMHgzZCwgS0VZX01VVEUgfSwJCS8qIG11dGUgKi8KKwl7IDB4MDEsIEtFWV9EVkQgfSwJCS8qIGR2ZCAqLwogfTsKIAotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXN1c19wYzM5KTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19hc3VzX3BjMzlfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19hc3VzX3BjMzksCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2FzdXNfcGMzOSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXN1c19wYzM5X3RhYmxlKTsKIAogCiAvKiBFbmNvcmUgRU5MVFYtRk0gIC0gYmxhY2sgcGxhc3RpYywgd2hpdGUgZnJvbnQgY292ZXIgd2l0aCB3aGl0ZSBnbG93aW5nIGJ1dHRvbnMKICAgICBKdWFuIFBhYmxvIFNvcm1hbmkgPHNvcm1hbkBnbWFpbC5jb20+ICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbmNvcmVfZW5sdHZbSVJfS0VZVEFCX1NJWkVdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19lbmNvcmVfZW5sdHZbXSA9IHsKIAogCS8qIFBvd2VyIGJ1dHRvbiBkb2VzIG5vdGhpbmcsIG5laXRoZXIgaW4gV2luZG93cyBhcHAsCiAJIGFsdGhvdWdoIGl0IHNlbmRzIGRhdGEgKHVzZWQgZm9yIEJJT1Mgd2FrZXVwPykgKi8KLQlbIDB4MGQgXSA9IEtFWV9NVVRFLAorCXsgMHgwZCwgS0VZX01VVEUgfSwKIAotCVsgMHgxZSBdID0gS0VZX1RWLAotCVsgMHgwMCBdID0gS0VZX1ZJREVPLAotCVsgMHgwMSBdID0gS0VZX0FVRElPLAkJLyogbXVzaWMgKi8KLQlbIDB4MDIgXSA9IEtFWV9NSFAsCQkvKiBwaWN0dXJlICovCisJeyAweDFlLCBLRVlfVFYgfSwKKwl7IDB4MDAsIEtFWV9WSURFTyB9LAorCXsgMHgwMSwgS0VZX0FVRElPIH0sCQkvKiBtdXNpYyAqLworCXsgMHgwMiwgS0VZX01IUCB9LAkJLyogcGljdHVyZSAqLwogCi0JWyAweDFmIF0gPSBLRVlfMSwKLQlbIDB4MDMgXSA9IEtFWV8yLAotCVsgMHgwNCBdID0gS0VZXzMsCi0JWyAweDA1IF0gPSBLRVlfNCwKLQlbIDB4MWMgXSA9IEtFWV81LAotCVsgMHgwNiBdID0gS0VZXzYsCi0JWyAweDA3IF0gPSBLRVlfNywKLQlbIDB4MDggXSA9IEtFWV84LAotCVsgMHgxZCBdID0gS0VZXzksCi0JWyAweDBhIF0gPSBLRVlfMCwKKwl7IDB4MWYsIEtFWV8xIH0sCisJeyAweDAzLCBLRVlfMiB9LAorCXsgMHgwNCwgS0VZXzMgfSwKKwl7IDB4MDUsIEtFWV80IH0sCisJeyAweDFjLCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgxZCwgS0VZXzkgfSwKKwl7IDB4MGEsIEtFWV8wIH0sCiAKLQlbIDB4MDkgXSA9IEtFWV9MSVNULCAgICAgICAgLyogLS8tLSAqLwotCVsgMHgwYiBdID0gS0VZX0xBU1QsICAgICAgICAvKiByZWNhbGwgKi8KKwl7IDB4MDksIEtFWV9MSVNUIH0sCQkvKiAtLy0tICovCisJeyAweDBiLCBLRVlfTEFTVCB9LAkJLyogcmVjYWxsICovCiAKLQlbIDB4MTQgXSA9IEtFWV9IT01FLAkJLyogd2luIHN0YXJ0IG1lbnUgKi8KLQlbIDB4MTUgXSA9IEtFWV9FWElULAkJLyogZXhpdCAqLwotCVsgMHgxNiBdID0gS0VZX1VQLAotCVsgMHgxMiBdID0gS0VZX0RPV04sCi0JWyAweDBjIF0gPSBLRVlfUklHSFQsCi0JWyAweDE3IF0gPSBLRVlfTEVGVCwKKwl7IDB4MTQsIEtFWV9IT01FIH0sCQkvKiB3aW4gc3RhcnQgbWVudSAqLworCXsgMHgxNSwgS0VZX0VYSVQgfSwJCS8qIGV4aXQgKi8KKwl7IDB4MTYsIEtFWV9DSEFOTkVMVVAgfSwJLyogVVAgKi8KKwl7IDB4MTIsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBET1dOICovCisJeyAweDBjLCBLRVlfVk9MVU1FVVAgfSwJCS8qIFJJR0hUICovCisJeyAweDE3LCBLRVlfVk9MVU1FRE9XTiB9LAkvKiBMRUZUICovCiAKLQlbIDB4MTggXSA9IEtFWV9FTlRFUiwJCS8qIE9LICovCisJeyAweDE4LCBLRVlfRU5URVIgfSwJCS8qIE9LICovCiAKLQlbIDB4MGUgXSA9IEtFWV9FU0MsCi0JWyAweDEzIF0gPSBLRVlfRCwJCS8qIGRlc2t0b3AgKi8KLQlbIDB4MTEgXSA9IEtFWV9UQUIsCi0JWyAweDE5IF0gPSBLRVlfU1dJVENIVklERU9NT0RFLAkvKiBzd2l0Y2ggKi8KKwl7IDB4MGUsIEtFWV9FU0MgfSwKKwl7IDB4MTMsIEtFWV9DWUNMRVdJTkRPV1MgfSwJLyogZGVza3RvcCAqLworCXsgMHgxMSwgS0VZX1RBQiB9LAorCXsgMHgxOSwgS0VZX1NXSVRDSFZJREVPTU9ERSB9LAkvKiBzd2l0Y2ggKi8KIAotCVsgMHgxYSBdID0gS0VZX01FTlUsCi0JWyAweDFiIF0gPSBLRVlfWk9PTSwJCS8qIGZ1bGxzY3JlZW4gKi8KLQlbIDB4NDQgXSA9IEtFWV9USU1FLAkJLyogdGltZSBzaGlmdCAqLwotCVsgMHg0MCBdID0gS0VZX01PREUsCQkvKiBzb3VyY2UgKi8KKwl7IDB4MWEsIEtFWV9NRU5VIH0sCisJeyAweDFiLCBLRVlfWk9PTSB9LAkJLyogZnVsbHNjcmVlbiAqLworCXsgMHg0NCwgS0VZX1RJTUUgfSwJCS8qIHRpbWUgc2hpZnQgKi8KKwl7IDB4NDAsIEtFWV9NT0RFIH0sCQkvKiBzb3VyY2UgKi8KIAotCVsgMHg1YSBdID0gS0VZX1JFQ09SRCwKLQlbIDB4NDIgXSA9IEtFWV9QTEFZLAkJLyogcGxheS9wYXVzZSAqLwotCVsgMHg0NSBdID0gS0VZX1NUT1AsCi0JWyAweDQzIF0gPSBLRVlfQ0FNRVJBLAkJLyogY2FtZXJhIGljb24gKi8KKwl7IDB4NWEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4NDIsIEtFWV9QTEFZIH0sCQkvKiBwbGF5L3BhdXNlICovCisJeyAweDQ1LCBLRVlfU1RPUCB9LAorCXsgMHg0MywgS0VZX0NBTUVSQSB9LAkJLyogY2FtZXJhIGljb24gKi8KIAotCVsgMHg0OCBdID0gS0VZX1JFV0lORCwKLQlbIDB4NGEgXSA9IEtFWV9GQVNURk9SV0FSRCwKLQlbIDB4NDkgXSA9IEtFWV9QUkVWSU9VUywKLQlbIDB4NGIgXSA9IEtFWV9ORVhULAorCXsgMHg0OCwgS0VZX1JFV0lORCB9LAorCXsgMHg0YSwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDQ5LCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4NGIsIEtFWV9ORVhUIH0sCiAKLQlbIDB4NGMgXSA9IEtFWV9GQVZPUklURVMsCS8qIHR2IHdhbGwgKi8KLQlbIDB4NGQgXSA9IEtFWV9TT1VORCwJCS8qIERWRCBzb3VuZCAqLwotCVsgMHg0ZSBdID0gS0VZX0xBTkdVQUdFLAkvKiBEVkQgbGFuZyAqLwotCVsgMHg0ZiBdID0gS0VZX1RFWFQsCQkvKiBEVkQgdGV4dCAqLworCXsgMHg0YywgS0VZX0ZBVk9SSVRFUyB9LAkvKiB0diB3YWxsICovCisJeyAweDRkLCBLRVlfU09VTkQgfSwJCS8qIERWRCBzb3VuZCAqLworCXsgMHg0ZSwgS0VZX0xBTkdVQUdFIH0sCQkvKiBEVkQgbGFuZyAqLworCXsgMHg0ZiwgS0VZX1RFWFQgfSwJCS8qIERWRCB0ZXh0ICovCiAKLQlbIDB4NTAgXSA9IEtFWV9TTEVFUCwJCS8qIHNodXRkb3duICovCi0JWyAweDUxIF0gPSBLRVlfTU9ERSwJCS8qIHN0ZXJlbyA+IG1haW4gKi8KLQlbIDB4NTIgXSA9IEtFWV9TRUxFQ1QsCQkvKiBzdGVyZW8gPiBzYXAgKi8KLQlbIDB4NTMgXSA9IEtFWV9QUk9HMSwJCS8qIHRlbGV0ZXh0ICovCisJeyAweDUwLCBLRVlfU0xFRVAgfSwJCS8qIHNodXRkb3duICovCisJeyAweDUxLCBLRVlfTU9ERSB9LAkJLyogc3RlcmVvID4gbWFpbiAqLworCXsgMHg1MiwgS0VZX1NFTEVDVCB9LAkJLyogc3RlcmVvID4gc2FwICovCisJeyAweDUzLCBLRVlfUFJPRzEgfSwJCS8qIHRlbGV0ZXh0ICovCiAKIAotCVsgMHg1OSBdID0gS0VZX1JFRCwJCS8qIEFQMSAqLwotCVsgMHg0MSBdID0gS0VZX0dSRUVOLAkJLyogQVAyICovCi0JWyAweDQ3IF0gPSBLRVlfWUVMTE9XLAkJLyogQVAzICovCi0JWyAweDU3IF0gPSBLRVlfQkxVRSwJCS8qIEFQNCAqLworCXsgMHg1OSwgS0VZX1JFRCB9LAkJLyogQVAxICovCisJeyAweDQxLCBLRVlfR1JFRU4gfSwJCS8qIEFQMiAqLworCXsgMHg0NywgS0VZX1lFTExPVyB9LAkJLyogQVAzICovCisJeyAweDU3LCBLRVlfQkxVRSB9LAkJLyogQVA0ICovCiB9OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZW5jb3JlX2VubHR2KTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2VuY29yZV9lbmx0dl90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2VuY29yZV9lbmx0diwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZW5jb3JlX2VubHR2KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbmNvcmVfZW5sdHZfdGFibGUpOwogCiAvKiBFbmNvcmUgRU5MVFYyLUZNICAtIHNpbHZlciBwbGFzdGljIC0gIldhbmQgTWVkaWEiIHdyaXR0ZW4gYXQgdGhlIGJvdHRvbgogICAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPiAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW5jb3JlX2VubHR2MltJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWzB4NGNdID0gS0VZX1BPV0VSMiwKLQlbMHg0YV0gPSBLRVlfVFVORVIsCi0JWzB4NDBdID0gS0VZXzEsCi0JWzB4NjBdID0gS0VZXzIsCi0JWzB4NTBdID0gS0VZXzMsCi0JWzB4NzBdID0gS0VZXzQsCi0JWzB4NDhdID0gS0VZXzUsCi0JWzB4NjhdID0gS0VZXzYsCi0JWzB4NThdID0gS0VZXzcsCi0JWzB4NzhdID0gS0VZXzgsCi0JWzB4NDRdID0gS0VZXzksCi0JWzB4NTRdID0gS0VZXzAsCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2VuY29yZV9lbmx0djJbXSA9IHsKKwl7IDB4NGMsIEtFWV9QT1dFUjIgfSwKKwl7IDB4NGEsIEtFWV9UVU5FUiB9LAorCXsgMHg0MCwgS0VZXzEgfSwKKwl7IDB4NjAsIEtFWV8yIH0sCisJeyAweDUwLCBLRVlfMyB9LAorCXsgMHg3MCwgS0VZXzQgfSwKKwl7IDB4NDgsIEtFWV81IH0sCisJeyAweDY4LCBLRVlfNiB9LAorCXsgMHg1OCwgS0VZXzcgfSwKKwl7IDB4NzgsIEtFWV84IH0sCisJeyAweDQ0LCBLRVlfOSB9LAorCXsgMHg1NCwgS0VZXzAgfSwKIAotCVsweDY0XSA9IEtFWV9MQVNULAkJLyogKzEwMCAqLwotCVsweDRlXSA9IEtFWV9BR0FJTiwJCS8qIFJlY2FsbCAqLworCXsgMHg2NCwgS0VZX0xBU1QgfSwJCS8qICsxMDAgKi8KKwl7IDB4NGUsIEtFWV9BR0FJTiB9LAkJLyogUmVjYWxsICovCiAKLQlbMHg2Y10gPSBLRVlfU1dJVENIVklERU9NT0RFLAkvKiBWaWRlbyBTb3VyY2UgKi8KLQlbMHg1ZV0gPSBLRVlfTUVOVSwKLQlbMHg1Nl0gPSBLRVlfU0NSRUVOLAotCVsweDdhXSA9IEtFWV9TRVRVUCwKKwl7IDB4NmMsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwJLyogVmlkZW8gU291cmNlICovCisJeyAweDVlLCBLRVlfTUVOVSB9LAorCXsgMHg1NiwgS0VZX1NDUkVFTiB9LAorCXsgMHg3YSwgS0VZX1NFVFVQIH0sCiAKLQlbMHg0Nl0gPSBLRVlfTVVURSwKLQlbMHg1Y10gPSBLRVlfTU9ERSwJCS8qIFN0ZXJlbyAqLwotCVsweDc0XSA9IEtFWV9JTkZPLAotCVsweDdjXSA9IEtFWV9DTEVBUiwKKwl7IDB4NDYsIEtFWV9NVVRFIH0sCisJeyAweDVjLCBLRVlfTU9ERSB9LAkJLyogU3RlcmVvICovCisJeyAweDc0LCBLRVlfSU5GTyB9LAorCXsgMHg3YywgS0VZX0NMRUFSIH0sCiAKLQlbMHg1NV0gPSBLRVlfVVAsCi0JWzB4NDldID0gS0VZX0RPV04sCi0JWzB4N2VdID0gS0VZX0xFRlQsCi0JWzB4NTldID0gS0VZX1JJR0hULAotCVsweDZhXSA9IEtFWV9FTlRFUiwKKwl7IDB4NTUsIEtFWV9VUCB9LAorCXsgMHg0OSwgS0VZX0RPV04gfSwKKwl7IDB4N2UsIEtFWV9MRUZUIH0sCisJeyAweDU5LCBLRVlfUklHSFQgfSwKKwl7IDB4NmEsIEtFWV9FTlRFUiB9LAogCi0JWzB4NDJdID0gS0VZX1ZPTFVNRVVQLAotCVsweDYyXSA9IEtFWV9WT0xVTUVET1dOLAotCVsweDUyXSA9IEtFWV9DSEFOTkVMVVAsCi0JWzB4NzJdID0gS0VZX0NIQU5ORUxET1dOLAorCXsgMHg0MiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDYyLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHg1MiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHg3MiwgS0VZX0NIQU5ORUxET1dOIH0sCiAKLQlbMHg0MV0gPSBLRVlfUkVDT1JELAotCVsweDUxXSA9IEtFWV9TSFVGRkxFLAkvKiBTbmFwc2hvdCAqLwotCVsweDc1XSA9IEtFWV9USU1FLAkvKiBUaW1lc2hpZnQgKi8KLQlbMHg3MV0gPSBLRVlfVFYyLAkvKiBQSVAgKi8KKwl7IDB4NDEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4NTEsIEtFWV9DQU1FUkEgfSwJCS8qIFNuYXBzaG90ICovCisJeyAweDc1LCBLRVlfVElNRSB9LAkJLyogVGltZXNoaWZ0ICovCisJeyAweDcxLCBLRVlfVFYyIH0sCQkvKiBQSVAgKi8KIAotCVsweDQ1XSA9IEtFWV9SRVdJTkQsCi0JWzB4NmZdID0gS0VZX1BBVVNFLAotCVsweDdkXSA9IEtFWV9GT1JXQVJELAotCVsweDc5XSA9IEtFWV9TVE9QLAorCXsgMHg0NSwgS0VZX1JFV0lORCB9LAorCXsgMHg2ZiwgS0VZX1BBVVNFIH0sCisJeyAweDdkLCBLRVlfRk9SV0FSRCB9LAorCXsgMHg3OSwgS0VZX1NUT1AgfSwKIH07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbmNvcmVfZW5sdHYyKTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2VuY29yZV9lbmx0djJfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19lbmNvcmVfZW5sdHYyLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19lbmNvcmVfZW5sdHYyKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbmNvcmVfZW5sdHYyX3RhYmxlKTsKIAogLyogZm9yIHRoZSBUZWNobm90cmVuZCAxNTAwIGJ1bmRsZWQgcmVtb3RlcyAoZ3JleSBhbmQgYmxhY2spOiAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfdHRfMTUwMFtJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAweDAxIF0gPSBLRVlfUE9XRVIsCi0JWyAweDAyIF0gPSBLRVlfU0hVRkZMRSwJLyogPyBkb3VibGUtYXJyb3cga2V5ICovCi0JWyAweDAzIF0gPSBLRVlfMSwKLQlbIDB4MDQgXSA9IEtFWV8yLAotCVsgMHgwNSBdID0gS0VZXzMsCi0JWyAweDA2IF0gPSBLRVlfNCwKLQlbIDB4MDcgXSA9IEtFWV81LAotCVsgMHgwOCBdID0gS0VZXzYsCi0JWyAweDA5IF0gPSBLRVlfNywKLQlbIDB4MGEgXSA9IEtFWV84LAotCVsgMHgwYiBdID0gS0VZXzksCi0JWyAweDBjIF0gPSBLRVlfMCwKLQlbIDB4MGQgXSA9IEtFWV9VUCwKLQlbIDB4MGUgXSA9IEtFWV9MRUZULAotCVsgMHgwZiBdID0gS0VZX09LLAotCVsgMHgxMCBdID0gS0VZX1JJR0hULAotCVsgMHgxMSBdID0gS0VZX0RPV04sCi0JWyAweDEyIF0gPSBLRVlfSU5GTywKLQlbIDB4MTMgXSA9IEtFWV9FWElULAotCVsgMHgxNCBdID0gS0VZX1JFRCwKLQlbIDB4MTUgXSA9IEtFWV9HUkVFTiwKLQlbIDB4MTYgXSA9IEtFWV9ZRUxMT1csCi0JWyAweDE3IF0gPSBLRVlfQkxVRSwKLQlbIDB4MTggXSA9IEtFWV9NVVRFLAotCVsgMHgxOSBdID0gS0VZX1RFWFQsCi0JWyAweDFhIF0gPSBLRVlfTU9ERSwJLyogPyBUVi9SYWRpbyAqLwotCVsgMHgyMSBdID0gS0VZX09QVElPTiwKLQlbIDB4MjIgXSA9IEtFWV9FUEcsCi0JWyAweDIzIF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgMHgyNCBdID0gS0VZX0NIQU5ORUxET1dOLAotCVsgMHgyNSBdID0gS0VZX1ZPTFVNRVVQLAotCVsgMHgyNiBdID0gS0VZX1ZPTFVNRURPV04sCi0JWyAweDI3IF0gPSBLRVlfU0VUVVAsCi0JWyAweDNhIF0gPSBLRVlfUkVDT1JELCAvKiB0aGVzZSBrZXlzIGFyZSBvbmx5IGluIHRoZSBibGFjayByZW1vdGUgKi8KLQlbIDB4M2IgXSA9IEtFWV9QTEFZLAotCVsgMHgzYyBdID0gS0VZX1NUT1AsCi0JWyAweDNkIF0gPSBLRVlfUkVXSU5ELAotCVsgMHgzZSBdID0gS0VZX1BBVVNFLAotCVsgMHgzZiBdID0gS0VZX0ZPUldBUkQsCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3R0XzE1MDBbXSA9IHsKKwl7IDB4MDEsIEtFWV9QT1dFUiB9LAorCXsgMHgwMiwgS0VZX1NIVUZGTEUgfSwJCS8qID8gZG91YmxlLWFycm93IGtleSAqLworCXsgMHgwMywgS0VZXzEgfSwKKwl7IDB4MDQsIEtFWV8yIH0sCisJeyAweDA1LCBLRVlfMyB9LAorCXsgMHgwNiwgS0VZXzQgfSwKKwl7IDB4MDcsIEtFWV81IH0sCisJeyAweDA4LCBLRVlfNiB9LAorCXsgMHgwOSwgS0VZXzcgfSwKKwl7IDB4MGEsIEtFWV84IH0sCisJeyAweDBiLCBLRVlfOSB9LAorCXsgMHgwYywgS0VZXzAgfSwKKwl7IDB4MGQsIEtFWV9VUCB9LAorCXsgMHgwZSwgS0VZX0xFRlQgfSwKKwl7IDB4MGYsIEtFWV9PSyB9LAorCXsgMHgxMCwgS0VZX1JJR0hUIH0sCisJeyAweDExLCBLRVlfRE9XTiB9LAorCXsgMHgxMiwgS0VZX0lORk8gfSwKKwl7IDB4MTMsIEtFWV9FWElUIH0sCisJeyAweDE0LCBLRVlfUkVEIH0sCisJeyAweDE1LCBLRVlfR1JFRU4gfSwKKwl7IDB4MTYsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4MTcsIEtFWV9CTFVFIH0sCisJeyAweDE4LCBLRVlfTVVURSB9LAorCXsgMHgxOSwgS0VZX1RFWFQgfSwKKwl7IDB4MWEsIEtFWV9NT0RFIH0sCQkvKiA/IFRWL1JhZGlvICovCisJeyAweDIxLCBLRVlfT1BUSU9OIH0sCisJeyAweDIyLCBLRVlfRVBHIH0sCisJeyAweDIzLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDI0LCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MjUsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgyNiwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MjcsIEtFWV9TRVRVUCB9LAorCXsgMHgzYSwgS0VZX1JFQ09SRCB9LAkJLyogdGhlc2Uga2V5cyBhcmUgb25seSBpbiB0aGUgYmxhY2sgcmVtb3RlICovCisJeyAweDNiLCBLRVlfUExBWSB9LAorCXsgMHgzYywgS0VZX1NUT1AgfSwKKwl7IDB4M2QsIEtFWV9SRVdJTkQgfSwKKwl7IDB4M2UsIEtFWV9QQVVTRSB9LAorCXsgMHgzZiwgS0VZX0ZPUldBUkQgfSwKIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3R0XzE1MDApOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3R0XzE1MDBfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc190dF8xNTAwLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc190dF8xNTAwKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc190dF8xNTAwX3RhYmxlKTsKIAogLyogRFZpQ08gRlVTSU9OIEhEVFYgTUNFIHJlbW90ZSAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZnVzaW9uaGR0dl9tY2VbSVJfS0VZVEFCX1NJWkVdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19mdXNpb25oZHR2X21jZVtdID0gewogCi0JWyAweDBiIF0gPSBLRVlfMSwKLQlbIDB4MTcgXSA9IEtFWV8yLAotCVsgMHgxYiBdID0gS0VZXzMsCi0JWyAweDA3IF0gPSBLRVlfNCwKLQlbIDB4NTAgXSA9IEtFWV81LAotCVsgMHg1NCBdID0gS0VZXzYsCi0JWyAweDQ4IF0gPSBLRVlfNywKLQlbIDB4NGMgXSA9IEtFWV84LAotCVsgMHg1OCBdID0gS0VZXzksCi0JWyAweDAzIF0gPSBLRVlfMCwKKwl7IDB4MGIsIEtFWV8xIH0sCisJeyAweDE3LCBLRVlfMiB9LAorCXsgMHgxYiwgS0VZXzMgfSwKKwl7IDB4MDcsIEtFWV80IH0sCisJeyAweDUwLCBLRVlfNSB9LAorCXsgMHg1NCwgS0VZXzYgfSwKKwl7IDB4NDgsIEtFWV83IH0sCisJeyAweDRjLCBLRVlfOCB9LAorCXsgMHg1OCwgS0VZXzkgfSwKKwl7IDB4MDMsIEtFWV8wIH0sCiAKLQlbIDB4NWUgXSA9IEtFWV9PSywKLQlbIDB4NTEgXSA9IEtFWV9VUCwKLQlbIDB4NTMgXSA9IEtFWV9ET1dOLAotCVsgMHg1YiBdID0gS0VZX0xFRlQsCi0JWyAweDVmIF0gPSBLRVlfUklHSFQsCisJeyAweDVlLCBLRVlfT0sgfSwKKwl7IDB4NTEsIEtFWV9VUCB9LAorCXsgMHg1MywgS0VZX0RPV04gfSwKKwl7IDB4NWIsIEtFWV9MRUZUIH0sCisJeyAweDVmLCBLRVlfUklHSFQgfSwKIAotCVsgMHgwMiBdID0gS0VZX1RWLAkJLyogTGFiZWxlZCBEVFYgb24gcmVtb3RlICovCi0JWyAweDBlIF0gPSBLRVlfTVAzLAotCVsgMHgxYSBdID0gS0VZX0RWRCwKLQlbIDB4MWUgXSA9IEtFWV9GQVZPUklURVMsCS8qIExhYmVsZWQgQ1BGIG9uIHJlbW90ZSAqLwotCVsgMHgxNiBdID0gS0VZX1NFVFVQLAotCVsgMHg0NiBdID0gS0VZX1BPV0VSMiwJCS8qIFRWIE9uL09mZiBidXR0b24gb24gcmVtb3RlICovCi0JWyAweDBhIF0gPSBLRVlfRVBHLAkJLyogTGFiZWxlZCBHdWlkZSBvbiByZW1vdGUgKi8KKwl7IDB4MDIsIEtFWV9UViB9LAkJLyogTGFiZWxlZCBEVFYgb24gcmVtb3RlICovCisJeyAweDBlLCBLRVlfTVAzIH0sCisJeyAweDFhLCBLRVlfRFZEIH0sCisJeyAweDFlLCBLRVlfRkFWT1JJVEVTIH0sCS8qIExhYmVsZWQgQ1BGIG9uIHJlbW90ZSAqLworCXsgMHgxNiwgS0VZX1NFVFVQIH0sCisJeyAweDQ2LCBLRVlfUE9XRVIyIH0sCQkvKiBUViBPbi9PZmYgYnV0dG9uIG9uIHJlbW90ZSAqLworCXsgMHgwYSwgS0VZX0VQRyB9LAkJLyogTGFiZWxlZCBHdWlkZSBvbiByZW1vdGUgKi8KIAotCVsgMHg0OSBdID0gS0VZX0JBQ0ssCi0JWyAweDU5IF0gPSBLRVlfSU5GTywJCS8qIExhYmVsZWQgTU9SRSBvbiByZW1vdGUgKi8KLQlbIDB4NGQgXSA9IEtFWV9NRU5VLAkJLyogTGFiZWxlZCBEVkRNRU5VIG9uIHJlbW90ZSAqLwotCVsgMHg1NSBdID0gS0VZX0NZQ0xFV0lORE9XUywJLyogTGFiZWxlZCBBTFQtVEFCIG9uIHJlbW90ZSAqLworCXsgMHg0OSwgS0VZX0JBQ0sgfSwKKwl7IDB4NTksIEtFWV9JTkZPIH0sCQkvKiBMYWJlbGVkIE1PUkUgb24gcmVtb3RlICovCisJeyAweDRkLCBLRVlfTUVOVSB9LAkJLyogTGFiZWxlZCBEVkRNRU5VIG9uIHJlbW90ZSAqLworCXsgMHg1NSwgS0VZX0NZQ0xFV0lORE9XUyB9LAkvKiBMYWJlbGVkIEFMVC1UQUIgb24gcmVtb3RlICovCiAKLQlbIDB4MGYgXSA9IEtFWV9QUkVWSU9VU1NPTkcsCS8qIExhYmVsZWQgfDw8IFJFUExBWSBvbiByZW1vdGUgKi8KLQlbIDB4MTIgXSA9IEtFWV9ORVhUU09ORywJLyogTGFiZWxlZCA+PnwgU0tJUCBvbiByZW1vdGUgKi8KLQlbIDB4NDIgXSA9IEtFWV9FTlRFUiwgCQkvKiBMYWJlbGVkIFNUQVJUIHdpdGggYSBncmVlbgotCQkJCQkgKiBNUyB3aW5kb3dzIGxvZ28gb24gcmVtb3RlICovCisJeyAweDBmLCBLRVlfUFJFVklPVVNTT05HIH0sCS8qIExhYmVsZWQgfDw8IFJFUExBWSBvbiByZW1vdGUgKi8KKwl7IDB4MTIsIEtFWV9ORVhUU09ORyB9LAkJLyogTGFiZWxlZCA+PnwgU0tJUCBvbiByZW1vdGUgKi8KKwl7IDB4NDIsIEtFWV9FTlRFUiB9LAkJLyogTGFiZWxlZCBTVEFSVCB3aXRoIGEgZ3JlZW4KKwkJCQkJICAgTVMgd2luZG93cyBsb2dvIG9uIHJlbW90ZSAqLwogCi0JWyAweDE1IF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDA1IF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MTEgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAweDA5IF0gPSBLRVlfQ0hBTk5FTERPV04sCisJeyAweDE1LCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDUsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDExLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDA5LCBLRVlfQ0hBTk5FTERPV04gfSwKIAotCVsgMHg1MiBdID0gS0VZX0NBTUVSQSwKLQlbIDB4NWEgXSA9IEtFWV9UVU5FUiwKLQlbIDB4MTkgXSA9IEtFWV9PUEVOLAorCXsgMHg1MiwgS0VZX0NBTUVSQSB9LAorCXsgMHg1YSwgS0VZX1RVTkVSIH0sCisJeyAweDE5LCBLRVlfT1BFTiB9LAogCi0JWyAweDEzIF0gPSBLRVlfTU9ERSwJCS8qIDQ6MyAxNjo5IHNlbGVjdCAqLwotCVsgMHgxZiBdID0gS0VZX1pPT00sCisJeyAweDEzLCBLRVlfTU9ERSB9LAkJLyogNDozIDE2Ojkgc2VsZWN0ICovCisJeyAweDFmLCBLRVlfWk9PTSB9LAogCi0JWyAweDQzIF0gPSBLRVlfUkVXSU5ELAotCVsgMHg0NyBdID0gS0VZX1BMQVlQQVVTRSwKLQlbIDB4NGYgXSA9IEtFWV9GQVNURk9SV0FSRCwKLQlbIDB4NTcgXSA9IEtFWV9NVVRFLAotCVsgMHgwZCBdID0gS0VZX1NUT1AsCi0JWyAweDAxIF0gPSBLRVlfUkVDT1JELAotCVsgMHg0ZSBdID0gS0VZX1BPV0VSLAorCXsgMHg0MywgS0VZX1JFV0lORCB9LAorCXsgMHg0NywgS0VZX1BMQVlQQVVTRSB9LAorCXsgMHg0ZiwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDU3LCBLRVlfTVVURSB9LAorCXsgMHgwZCwgS0VZX1NUT1AgfSwKKwl7IDB4MDEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4NGUsIEtFWV9QT1dFUiB9LAogfTsKIAotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZnVzaW9uaGR0dl9tY2UpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2Z1c2lvbmhkdHZfbWNlX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfZnVzaW9uaGR0dl9tY2UsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2Z1c2lvbmhkdHZfbWNlKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19mdXNpb25oZHR2X21jZV90YWJsZSk7CiAKIC8qIFBpbm5hY2xlIFBDVFYgSEQgODAwaSBtaW5pIHJlbW90ZSAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGlubmFjbGVfcGN0dl9oZFtJUl9LRVlUQUJfU0laRV0gPSB7CitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3Bpbm5hY2xlX3BjdHZfaGRbXSA9IHsKIAotCVsweDBmXSA9IEtFWV8xLAotCVsweDE1XSA9IEtFWV8yLAotCVsweDEwXSA9IEtFWV8zLAotCVsweDE4XSA9IEtFWV80LAotCVsweDFiXSA9IEtFWV81LAotCVsweDFlXSA9IEtFWV82LAotCVsweDExXSA9IEtFWV83LAotCVsweDIxXSA9IEtFWV84LAotCVsweDEyXSA9IEtFWV85LAotCVsweDI3XSA9IEtFWV8wLAorCXsgMHgwZiwgS0VZXzEgfSwKKwl7IDB4MTUsIEtFWV8yIH0sCisJeyAweDEwLCBLRVlfMyB9LAorCXsgMHgxOCwgS0VZXzQgfSwKKwl7IDB4MWIsIEtFWV81IH0sCisJeyAweDFlLCBLRVlfNiB9LAorCXsgMHgxMSwgS0VZXzcgfSwKKwl7IDB4MjEsIEtFWV84IH0sCisJeyAweDEyLCBLRVlfOSB9LAorCXsgMHgyNywgS0VZXzAgfSwKIAotCVsweDI0XSA9IEtFWV9aT09NLAotCVsweDJhXSA9IEtFWV9TVUJUSVRMRSwKKwl7IDB4MjQsIEtFWV9aT09NIH0sCisJeyAweDJhLCBLRVlfU1VCVElUTEUgfSwKIAotCVsweDAwXSA9IEtFWV9NVVRFLAotCVsweDAxXSA9IEtFWV9FTlRFUiwJLyogUGlubmFjbGUgTG9nbyAqLwotCVsweDM5XSA9IEtFWV9QT1dFUiwKKwl7IDB4MDAsIEtFWV9NVVRFIH0sCisJeyAweDAxLCBLRVlfRU5URVIgfSwJLyogUGlubmFjbGUgTG9nbyAqLworCXsgMHgzOSwgS0VZX1BPV0VSIH0sCiAKLQlbMHgwM10gPSBLRVlfVk9MVU1FVVAsCi0JWzB4MDldID0gS0VZX1ZPTFVNRURPV04sCi0JWzB4MDZdID0gS0VZX0NIQU5ORUxVUCwKLQlbMHgwY10gPSBLRVlfQ0hBTk5FTERPV04sCisJeyAweDAzLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDksIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDA2LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDBjLCBLRVlfQ0hBTk5FTERPV04gfSwKIAotCVsweDJkXSA9IEtFWV9SRVdJTkQsCi0JWzB4MzBdID0gS0VZX1BMQVlQQVVTRSwKLQlbMHgzM10gPSBLRVlfRkFTVEZPUldBUkQsCi0JWzB4M2NdID0gS0VZX1NUT1AsCi0JWzB4MzZdID0gS0VZX1JFQ09SRCwKLQlbMHgzZl0gPSBLRVlfRVBHLAkvKiBMYWJlbGVkICI/IiAqLworCXsgMHgyZCwgS0VZX1JFV0lORCB9LAorCXsgMHgzMCwgS0VZX1BMQVlQQVVTRSB9LAorCXsgMHgzMywgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDNjLCBLRVlfU1RPUCB9LAorCXsgMHgzNiwgS0VZX1JFQ09SRCB9LAorCXsgMHgzZiwgS0VZX0VQRyB9LAkvKiBMYWJlbGVkICI/IiAqLwogfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3Bpbm5hY2xlX3BjdHZfaGQpOworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcGlubmFjbGVfcGN0dl9oZF90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3Bpbm5hY2xlX3BjdHZfaGQsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3Bpbm5hY2xlX3BjdHZfaGQpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3Bpbm5hY2xlX3BjdHZfaGRfdGFibGUpOwogCiAvKgogICogSWdvciBLdXpuZXRzb3YgPGlnazcyQHlhLnJ1PgpAQCAtMjE5OCwxMyArMjM2NSwxMyBAQAogICogdGhlIGJ1dHRvbiBsYWJlbHMgKHNldmVyYWwgdmFyaWFudHMgd2hlbiBhcHByb3ByaWF0ZSkKICAqIGhlbHBzIHRvIGRlc2NpZGUgd2hpY2gga2V5Y29kZXMgdG8gYXNzaWduIHRvIHRoZSBidXR0b25zLgogICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19iZWhvbGRbSVJfS0VZVEFCX1NJWkVdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19iZWhvbGRbXSA9IHsKIAogCS8qICAweDFjICAgICAgICAgICAgMHgxMiAgKgogCSAqICBUVi9GTSAgICAgICAgICBQT1dFUiAgKgogCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQlbIDB4MWMgXSA9IEtFWV9UVU5FUiwJLypYWFggS0VZX1RWIEtFWV9SQURJTyAqLwotCVsgMHgxMiBdID0gS0VZX1BPV0VSLAorCXsgMHgxYywgS0VZX1RVTkVSIH0sCS8qIFhYWCBLRVlfVFYgLyBLRVlfUkFESU8gKi8KKwl7IDB4MTIsIEtFWV9QT1dFUiB9LAogCiAJLyogIDB4MDEgICAgMHgwMiAgICAweDAzICAqCiAJICogICAxICAgICAgIDIgICAgICAgMyAgICAqCkBAIC0yMjE1LDI4ICsyMzgyLDI4IEBACiAJICogIDB4MDcgICAgMHgwOCAgICAweDA5ICAqCiAJICogICA3ICAgICAgIDggICAgICAgOSAgICAqCiAJICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCVsgMHgwMSBdID0gS0VZXzEsCi0JWyAweDAyIF0gPSBLRVlfMiwKLQlbIDB4MDMgXSA9IEtFWV8zLAotCVsgMHgwNCBdID0gS0VZXzQsCi0JWyAweDA1IF0gPSBLRVlfNSwKLQlbIDB4MDYgXSA9IEtFWV82LAotCVsgMHgwNyBdID0gS0VZXzcsCi0JWyAweDA4IF0gPSBLRVlfOCwKLQlbIDB4MDkgXSA9IEtFWV85LAorCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCisJeyAweDAzLCBLRVlfMyB9LAorCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgwNywgS0VZXzcgfSwKKwl7IDB4MDgsIEtFWV84IH0sCisJeyAweDA5LCBLRVlfOSB9LAogCiAJLyogIDB4MGEgICAgMHgwMCAgICAweDE3ICAqCiAJICogUkVDQUxMICAgIDAgICAgICBNT0RFICAqCiAJICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCVsgMHgwYSBdID0gS0VZX0FHQUlOLAotCVsgMHgwMCBdID0gS0VZXzAsCi0JWyAweDE3IF0gPSBLRVlfTU9ERSwKKwl7IDB4MGEsIEtFWV9BR0FJTiB9LAorCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MTcsIEtFWV9NT0RFIH0sCiAKIAkvKiAgMHgxNCAgICAgICAgICAweDEwICAgICoKIAkgKiBBU1BFQ1QgICAgICBGVUxMU0NSRUVOICoKIAkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JWyAweDE0IF0gPSBLRVlfU0NSRUVOLAotCVsgMHgxMCBdID0gS0VZX1pPT00sCisJeyAweDE0LCBLRVlfU0NSRUVOIH0sCisJeyAweDEwLCBLRVlfWk9PTSB9LAogCiAJLyogICAgICAgICAgMHgwYiAgICAgICAgICAqCiAJICogICAgICAgICAgIFVwICAgICAgICAgICAqCkBAIC0yMjQ3LDE3ICsyNDE0LDE3IEBACiAJICogICAgICAgICAweDAxNSAgICAgICAgICAqCiAJICogICAgICAgICBEb3duICAgICAgICAgICAqCiAJICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCVsgMHgwYiBdID0gS0VZX0NIQU5ORUxVUCwJLypYWFggS0VZX1VQICovCi0JWyAweDE4IF0gPSBLRVlfVk9MVU1FRE9XTiwJLypYWFggS0VZX0xFRlQgKi8KLQlbIDB4MTYgXSA9IEtFWV9PSywJCS8qWFhYIEtFWV9FTlRFUiAqLwotCVsgMHgwYyBdID0gS0VZX1ZPTFVNRVVQLAkvKlhYWCBLRVlfUklHSFQgKi8KLQlbIDB4MTUgXSA9IEtFWV9DSEFOTkVMRE9XTiwJLypYWFggS0VZX0RPV04gKi8KKwl7IDB4MGIsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MTgsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDE2LCBLRVlfT0sgfSwJCS8qIFhYWCBLRVlfRU5URVIgKi8KKwl7IDB4MGMsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxNSwgS0VZX0NIQU5ORUxET1dOIH0sCiAKIAkvKiAgMHgxMSAgICAgICAgICAgIDB4MGQgICoKIAkgKiAgTVVURSAgICAgICAgICAgIElORk8gICoKIAkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JWyAweDExIF0gPSBLRVlfTVVURSwKLQlbIDB4MGQgXSA9IEtFWV9JTkZPLAorCXsgMHgxMSwgS0VZX01VVEUgfSwKKwl7IDB4MGQsIEtFWV9JTkZPIH0sCiAKIAkvKiAgMHgwZiAgICAweDFiICAgIDB4MWEgICoKIAkgKiBSRUNPUkQgUExBWS9QQVVTRSBTVE9QICoKQEAgLTIyNjYsMzAgKzI0MzMsMzQgQEAKIAkgKlRFTEVURVhUICBBVURJTyAgU09VUkNFICoKIAkgKiAgICAgICAgICAgUkVEICAgWUVMTE9XICoKIAkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JWyAweDBmIF0gPSBLRVlfUkVDT1JELAotCVsgMHgxYiBdID0gS0VZX1BMQVlQQVVTRSwKLQlbIDB4MWEgXSA9IEtFWV9TVE9QLAotCVsgMHgwZSBdID0gS0VZX1RFWFQsCi0JWyAweDFmIF0gPSBLRVlfUkVELAkvKlhYWCBLRVlfQVVESU8gKi8KLQlbIDB4MWUgXSA9IEtFWV9ZRUxMT1csCS8qWFhYIEtFWV9TT1VSQ0UgKi8KKwl7IDB4MGYsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MWIsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4MWEsIEtFWV9TVE9QIH0sCisJeyAweDBlLCBLRVlfVEVYVCB9LAorCXsgMHgxZiwgS0VZX1JFRCB9LAkvKlhYWCBLRVlfQVVESU8JKi8KKwl7IDB4MWUsIEtFWV9ZRUxMT1cgfSwJLypYWFggS0VZX1NPVVJDRQkqLwogCiAJLyogIDB4MWQgICAweDEzICAgICAweDE5ICAqCiAJICogU0xFRVAgIFBSRVZJRVcgICBEVkIgICAqCiAJICogICAgICAgICBHUkVFTiAgICBCTFVFICAqCiAJICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCVsgMHgxZCBdID0gS0VZX1NMRUVQLAotCVsgMHgxMyBdID0gS0VZX0dSRUVOLAotCVsgMHgxOSBdID0gS0VZX0JMVUUsCS8qWFhYIEtFWV9TQVQgKi8KKwl7IDB4MWQsIEtFWV9TTEVFUCB9LAorCXsgMHgxMywgS0VZX0dSRUVOIH0sCisJeyAweDE5LCBLRVlfQkxVRSB9LAkvKiBYWFggS0VZX1NBVAkqLwogCiAJLyogIDB4NTggICAgICAgICAgIDB4NWMgICAqCiAJICogRlJFRVpFICAgICAgICBTTkFQU0hPVCAqCiAJICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCVsgMHg1OCBdID0gS0VZX1NMT1csCi0JWyAweDVjIF0gPSBLRVlfU0FWRSwKKwl7IDB4NTgsIEtFWV9TTE9XIH0sCisJeyAweDVjLCBLRVlfQ0FNRVJBIH0sCiAKIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2JlaG9sZCk7CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYmVob2xkX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfYmVob2xkLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19iZWhvbGQpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2JlaG9sZF90YWJsZSk7CiAKIC8qIEJlaG9sZGVyIEludGwuIEx0ZC4gMjAwOAogICogRG1pdHJ5IEJlbGltb3YgZC5iZWxpbW92QGdvb2dsZS5jb20KQEAgLTIyOTksMTYgKzI0NzAsMTYgQEAKICAqIHRoZSBidXR0b24gbGFiZWxzIChzZXZlcmFsIHZhcmlhbnRzIHdoZW4gYXBwcm9wcmlhdGUpCiAgKiBoZWxwcyB0byBkZXNjaWRlIHdoaWNoIGtleWNvZGVzIHRvIGFzc2lnbiB0byB0aGUgYnV0dG9ucy4KICAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYmVob2xkX2NvbHVtYnVzW0lSX0tFWVRBQl9TSVpFXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfYmVob2xkX2NvbHVtYnVzW10gPSB7CiAKIAkvKiAgMHgxMyAgIDB4MTEgICAweDFDICAgMHgxMiAgKgogCSAqICBNdXRlICBTb3VyY2UgIFRWL0ZNICBQb3dlciAqCiAJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLQlbMHgxM10gPSBLRVlfTVVURSwKLQlbMHgxMV0gPSBLRVlfUFJPUFMsCi0JWzB4MUNdID0gS0VZX1RVTkVSLAkvKiBLRVlfVFYvS0VZX1JBRElPICovCi0JWzB4MTJdID0gS0VZX1BPV0VSLAorCXsgMHgxMywgS0VZX01VVEUgfSwKKwl7IDB4MTEsIEtFWV9QUk9QUyB9LAorCXsgMHgxQywgS0VZX1RVTkVSIH0sCS8qIEtFWV9UVi9LRVlfUkFESU8JKi8KKwl7IDB4MTIsIEtFWV9QT1dFUiB9LAogCiAJLyogIDB4MDEgICAgMHgwMiAgICAweDAzICAweDBEICAgICoKIAkgKiAgIDEgICAgICAgMiAgICAgICAzICAgU3RlcmVvICAgKgpAQCAtMjMxOSwxNzMgKzI0OTAsMTg4IEBACiAJICogIDB4MDcgICAgMHgwOCAgICAweDA5ICAweDEwICAgICoKIAkgKiAgIDcgICAgICAgOCAgICAgICA5ICAgIFpvb20gCSAgKgogCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCVsweDAxXSA9IEtFWV8xLAotCVsweDAyXSA9IEtFWV8yLAotCVsweDAzXSA9IEtFWV8zLAotCVsweDBEXSA9IEtFWV9TRVRVUCwJICAvKiBTZXR1cCBrZXkgKi8KLQlbMHgwNF0gPSBLRVlfNCwKLQlbMHgwNV0gPSBLRVlfNSwKLQlbMHgwNl0gPSBLRVlfNiwKLQlbMHgxOV0gPSBLRVlfQk9PS01BUktTLCAvKiBTbmFwc2hvdCBrZXkgKi8KLQlbMHgwN10gPSBLRVlfNywKLQlbMHgwOF0gPSBLRVlfOCwKLQlbMHgwOV0gPSBLRVlfOSwKLQlbMHgxMF0gPSBLRVlfWk9PTSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MEQsIEtFWV9TRVRVUCB9LAkgIC8qIFNldHVwIGtleSAqLworCXsgMHgwNCwgS0VZXzQgfSwKKwl7IDB4MDUsIEtFWV81IH0sCisJeyAweDA2LCBLRVlfNiB9LAorCXsgMHgxOSwgS0VZX0NBTUVSQSB9LAkvKiBTbmFwc2hvdCBrZXkgKi8KKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MTAsIEtFWV9aT09NIH0sCiAKIAkvKiAgMHgwQSAgICAweDAwICAgIDB4MEIgICAgICAgMHgwQyAgICoKIAkgKiBSRUNBTEwgICAgMCAgICBDaGFubmVsVXAgIFZvbHVtZVVwICoKIAkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JWzB4MEFdID0gS0VZX0FHQUlOLAotCVsweDAwXSA9IEtFWV8wLAotCVsweDBCXSA9IEtFWV9DSEFOTkVMVVAsCi0JWzB4MENdID0gS0VZX1ZPTFVNRVVQLAorCXsgMHgwQSwgS0VZX0FHQUlOIH0sCisJeyAweDAwLCBLRVlfMCB9LAorCXsgMHgwQiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwQywgS0VZX1ZPTFVNRVVQIH0sCiAKIAkvKiAgIDB4MUIgICAgICAweDFEICAgICAgMHgxNSAgICAgICAgMHgxOCAgICAgKgogCSAqIFRpbWVzaGlmdCAgUmVjb3JkICBDaGFubmVsRG93biAgVm9sdW1lRG93biAqCiAJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLQlbMHgxQl0gPSBLRVlfUkVXSU5ELAotCVsweDFEXSA9IEtFWV9SRUNPUkQsCi0JWzB4MTVdID0gS0VZX0NIQU5ORUxET1dOLAotCVsweDE4XSA9IEtFWV9WT0xVTUVET1dOLAorCXsgMHgxQiwgS0VZX1RJTUUgfSwKKwl7IDB4MUQsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MTUsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxOCwgS0VZX1ZPTFVNRURPV04gfSwKIAogCS8qICAgMHgwRSAgIDB4MUUgICAgIDB4MEYgICAgIDB4MUEgICoKIAkgKiAgIFN0b3AgICBQYXVzZSAgUHJldmlvdXNlICBOZXh0ICAqCiAJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotCVsweDBFXSA9IEtFWV9TVE9QLAotCVsweDFFXSA9IEtFWV9QQVVTRSwKLQlbMHgwRl0gPSBLRVlfUFJFVklPVVMsCi0JWzB4MUFdID0gS0VZX05FWFQsCisJeyAweDBFLCBLRVlfU1RPUCB9LAorCXsgMHgxRSwgS0VZX1BBVVNFIH0sCisJeyAweDBGLCBLRVlfUFJFVklPVVMgfSwKKwl7IDB4MUEsIEtFWV9ORVhUIH0sCiAKIH07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19iZWhvbGRfY29sdW1idXMpOworCitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYmVob2xkX2NvbHVtYnVzX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfYmVob2xkX2NvbHVtYnVzLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19iZWhvbGRfY29sdW1idXMpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2JlaG9sZF9jb2x1bWJ1c190YWJsZSk7CiAKIC8qCiAgKiBSZW1vdGUgY29udHJvbCBmb3IgdGhlIEdlbml1cyBUVkdPIEExMU1DRQogICogQWRyaWFuIFBhcmRpbmkgPHBhcmRvLmJzc29AZ21haWwuY29tPgogICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19nZW5pdXNfdHZnb19hMTFtY2VbSVJfS0VZVEFCX1NJWkVdID0geworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19nZW5pdXNfdHZnb19hMTFtY2VbXSA9IHsKIAkvKiBLZXlzIDAgdG8gOSAqLwotCVsweDQ4XSA9IEtFWV8wLAotCVsweDA5XSA9IEtFWV8xLAotCVsweDFkXSA9IEtFWV8yLAotCVsweDFmXSA9IEtFWV8zLAotCVsweDE5XSA9IEtFWV80LAotCVsweDFiXSA9IEtFWV81LAotCVsweDExXSA9IEtFWV82LAotCVsweDE3XSA9IEtFWV83LAotCVsweDEyXSA9IEtFWV84LAotCVsweDE2XSA9IEtFWV85LAorCXsgMHg0OCwgS0VZXzAgfSwKKwl7IDB4MDksIEtFWV8xIH0sCisJeyAweDFkLCBLRVlfMiB9LAorCXsgMHgxZiwgS0VZXzMgfSwKKwl7IDB4MTksIEtFWV80IH0sCisJeyAweDFiLCBLRVlfNSB9LAorCXsgMHgxMSwgS0VZXzYgfSwKKwl7IDB4MTcsIEtFWV83IH0sCisJeyAweDEyLCBLRVlfOCB9LAorCXsgMHgxNiwgS0VZXzkgfSwKIAotCVsweDU0XSA9IEtFWV9SRUNPUkQsCQkvKiByZWNvcmRpbmcgKi8KLQlbMHgwNl0gPSBLRVlfTVVURSwJCS8qIG11dGUgKi8KLQlbMHgxMF0gPSBLRVlfUE9XRVIsCi0JWzB4NDBdID0gS0VZX0xBU1QsCQkvKiByZWNhbGwgKi8KLQlbMHg0Y10gPSBLRVlfQ0hBTk5FTFVQLAkJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLwotCVsweDAwXSA9IEtFWV9DSEFOTkVMRE9XTiwJLyogY2hhbm5lbCAvIHByb2dyYW0gLSAqLwotCVsweDBkXSA9IEtFWV9WT0xVTUVVUCwKLQlbMHgxNV0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbMHg0ZF0gPSBLRVlfT0ssCQkvKiBhbHNvIGxhYmVsZWQgYXMgUGF1c2UgKi8KLQlbMHgxY10gPSBLRVlfWk9PTSwJCS8qIGZ1bGwgc2NyZWVuIGFuZCBTdG9wKi8KLQlbMHgwMl0gPSBLRVlfTU9ERSwJCS8qIEFWIFNvdXJjZSBvciBSZXdpbmQqLwotCVsweDA0XSA9IEtFWV9MSVNULAkJLyogLS8tLSAqLworCXsgMHg1NCwgS0VZX1JFQ09SRCB9LAkJLyogcmVjb3JkaW5nICovCisJeyAweDA2LCBLRVlfTVVURSB9LAkJLyogbXV0ZSAqLworCXsgMHgxMCwgS0VZX1BPV0VSIH0sCisJeyAweDQwLCBLRVlfTEFTVCB9LAkJLyogcmVjYWxsICovCisJeyAweDRjLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIGNoYW5uZWwgLyBwcm9ncmFtICsgKi8KKwl7IDB4MDAsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBjaGFubmVsIC8gcHJvZ3JhbSAtICovCisJeyAweDBkLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MTUsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDRkLCBLRVlfT0sgfSwJCS8qIGFsc28gbGFiZWxlZCBhcyBQYXVzZSAqLworCXsgMHgxYywgS0VZX1pPT00gfSwJCS8qIGZ1bGwgc2NyZWVuIGFuZCBTdG9wKi8KKwl7IDB4MDIsIEtFWV9NT0RFIH0sCQkvKiBBViBTb3VyY2Ugb3IgUmV3aW5kKi8KKwl7IDB4MDQsIEtFWV9MSVNUIH0sCQkvKiAtLy0tICovCiAJLyogc21hbGwgYXJyb3dzIGFib3ZlIG51bWJlcnMgKi8KLQlbMHgxYV0gPSBLRVlfTkVYVCwJCS8qIGFsc28gRmFzdCBGb3J3YXJkICovCi0JWzB4MGVdID0gS0VZX1BSRVZJT1VTLAkvKiBhbHNvIFJld2luZCAqLworCXsgMHgxYSwgS0VZX05FWFQgfSwJCS8qIGFsc28gRmFzdCBGb3J3YXJkICovCisJeyAweDBlLCBLRVlfUFJFVklPVVMgfSwJCS8qIGFsc28gUmV3aW5kICovCiAJLyogdGhlc2UgYXJlIGluIGEgcmF0aGVyIG5vbiBzdGFuZGFyZCBsYXlvdXQgYW5kIGhhdmUKIAlhbiBhbHRlcm5hdGUgbmFtZSB3cml0dGVuICovCi0JWzB4MWVdID0gS0VZX1VQLAkJLyogVmlkZW8gU2V0dGluZyAqLwotCVsweDBhXSA9IEtFWV9ET1dOLAkJLyogVmlkZW8gRGVmYXVsdCAqLwotCVsweDA1XSA9IEtFWV9MRUZULAkJLyogU25hcHNob3QgKi8KLQlbMHgwY10gPSBLRVlfUklHSFQsCQkvKiBIaWRlIFBhbmVsICovCisJeyAweDFlLCBLRVlfVVAgfSwJCS8qIFZpZGVvIFNldHRpbmcgKi8KKwl7IDB4MGEsIEtFWV9ET1dOIH0sCQkvKiBWaWRlbyBEZWZhdWx0ICovCisJeyAweDA1LCBLRVlfQ0FNRVJBIH0sCQkvKiBTbmFwc2hvdCAqLworCXsgMHgwYywgS0VZX1JJR0hUIH0sCQkvKiBIaWRlIFBhbmVsICovCiAJLyogRm91ciBidXR0b25zIHdpdGhvdXQgbGFiZWwgKi8KLQlbMHg0OV0gPSBLRVlfUkVELAotCVsweDBiXSA9IEtFWV9HUkVFTiwKLQlbMHgxM10gPSBLRVlfWUVMTE9XLAotCVsweDUwXSA9IEtFWV9CTFVFLAorCXsgMHg0OSwgS0VZX1JFRCB9LAorCXsgMHgwYiwgS0VZX0dSRUVOIH0sCisJeyAweDEzLCBLRVlfWUVMTE9XIH0sCisJeyAweDUwLCBLRVlfQkxVRSB9LAogfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2dlbml1c190dmdvX2ExMW1jZSk7CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19nZW5pdXNfdHZnb19hMTFtY2VfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19nZW5pdXNfdHZnb19hMTFtY2UsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2dlbml1c190dmdvX2ExMW1jZSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZ2VuaXVzX3R2Z29fYTExbWNlX3RhYmxlKTsKIAogLyoKICAqIFJlbW90ZSBjb250cm9sIGZvciBQb3dlcmNvbG9yIFJlYWwgQW5nZWwgMzMwCiAgKiBEYW5pZWwgRnJhZ2EgPGZyYWdhYnJAZ21haWwuY29tPgogICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19wb3dlcmNvbG9yX3JlYWxfYW5nZWxbSVJfS0VZVEFCX1NJWkVdID0gewotCVsweDM4XSA9IEtFWV9TV0lUQ0hWSURFT01PREUsCS8qIHN3aXRjaCBpbnB1dHMgKi8KLQlbMHgwY10gPSBLRVlfTUVESUEsCQkvKiBUdXJuIE9OL09GRiBBcHAgKi8KLQlbMHgwMF0gPSBLRVlfMCwKLQlbMHgwMV0gPSBLRVlfMSwKLQlbMHgwMl0gPSBLRVlfMiwKLQlbMHgwM10gPSBLRVlfMywKLQlbMHgwNF0gPSBLRVlfNCwKLQlbMHgwNV0gPSBLRVlfNSwKLQlbMHgwNl0gPSBLRVlfNiwKLQlbMHgwN10gPSBLRVlfNywKLQlbMHgwOF0gPSBLRVlfOCwKLQlbMHgwOV0gPSBLRVlfOSwKLQlbMHgwYV0gPSBLRVlfRElHSVRTLAkJLyogc2luZ2xlLCBkb3VibGUsIHRyaXBwbGUgZGlnaXQgKi8KLQlbMHgyOV0gPSBLRVlfUFJFVklPVVMsCQkvKiBwcmV2aW91cyBjaGFubmVsICovCi0JWzB4MTJdID0gS0VZX0JSSUdIVE5FU1NVUCwKLQlbMHgxM10gPSBLRVlfQlJJR0hUTkVTU0RPV04sCi0JWzB4MmJdID0gS0VZX01PREUsCQkvKiBzdGVyZW8vbW9ubyAqLwotCVsweDJjXSA9IEtFWV9URVhULAkJLyogdGVsZXRleHQgKi8KLQlbMHgyMF0gPSBLRVlfVVAsCQkvKiBjaGFubmVsIHVwICovCi0JWzB4MjFdID0gS0VZX0RPV04sCQkvKiBjaGFubmVsIGRvd24gKi8KLQlbMHgxMF0gPSBLRVlfUklHSFQsCQkvKiB2b2x1bWUgdXAgKi8KLQlbMHgxMV0gPSBLRVlfTEVGVCwJCS8qIHZvbHVtZSBkb3duICovCi0JWzB4MGRdID0gS0VZX01VVEUsCi0JWzB4MWZdID0gS0VZX1JFQ09SRCwKLQlbMHgxN10gPSBLRVlfUExBWSwKLQlbMHgxNl0gPSBLRVlfUEFVU0UsCi0JWzB4MGJdID0gS0VZX1NUT1AsCi0JWzB4MjddID0gS0VZX0ZBU1RGT1JXQVJELAotCVsweDI2XSA9IEtFWV9SRVdJTkQsCi0JWzB4MWVdID0gS0VZX1NFQVJDSCwJCS8qIGF1dG9zY2FuICovCi0JWzB4MGVdID0gS0VZX1NIVUZGTEUsCQkvKiBzbmFwc2hvdCAqLwotCVsweDJkXSA9IEtFWV9TRVRVUCwKLQlbMHgwZl0gPSBLRVlfU0NSRUVOLAkJLyogZnVsbCBzY3JlZW4gKi8KLQlbMHgxNF0gPSBLRVlfUkFESU8sCQkvKiBGTSByYWRpbyAqLwotCVsweDI1XSA9IEtFWV9QT1dFUiwJCS8qIHBvd2VyICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3Bvd2VyY29sb3JfcmVhbF9hbmdlbFtdID0geworCXsgMHgzOCwgS0VZX1NXSVRDSFZJREVPTU9ERSB9LAkvKiBzd2l0Y2ggaW5wdXRzICovCisJeyAweDBjLCBLRVlfTUVESUEgfSwJCS8qIFR1cm4gT04vT0ZGIEFwcCAqLworCXsgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDEsIEtFWV8xIH0sCisJeyAweDAyLCBLRVlfMiB9LAorCXsgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDQsIEtFWV80IH0sCisJeyAweDA1LCBLRVlfNSB9LAorCXsgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCBLRVlfOCB9LAorCXsgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MGEsIEtFWV9ESUdJVFMgfSwJCS8qIHNpbmdsZSwgZG91YmxlLCB0cmlwcGxlIGRpZ2l0ICovCisJeyAweDI5LCBLRVlfUFJFVklPVVMgfSwJCS8qIHByZXZpb3VzIGNoYW5uZWwgKi8KKwl7IDB4MTIsIEtFWV9CUklHSFRORVNTVVAgfSwKKwl7IDB4MTMsIEtFWV9CUklHSFRORVNTRE9XTiB9LAorCXsgMHgyYiwgS0VZX01PREUgfSwJCS8qIHN0ZXJlby9tb25vICovCisJeyAweDJjLCBLRVlfVEVYVCB9LAkJLyogdGVsZXRleHQgKi8KKwl7IDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwJLyogY2hhbm5lbCB1cCAqLworCXsgMHgyMSwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIGNoYW5uZWwgZG93biAqLworCXsgMHgxMCwgS0VZX1ZPTFVNRVVQIH0sCQkvKiB2b2x1bWUgdXAgKi8KKwl7IDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCS8qIHZvbHVtZSBkb3duICovCisJeyAweDBkLCBLRVlfTVVURSB9LAorCXsgMHgxZiwgS0VZX1JFQ09SRCB9LAorCXsgMHgxNywgS0VZX1BMQVkgfSwKKwl7IDB4MTYsIEtFWV9QQVVTRSB9LAorCXsgMHgwYiwgS0VZX1NUT1AgfSwKKwl7IDB4MjcsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgyNiwgS0VZX1JFV0lORCB9LAorCXsgMHgxZSwgS0VZX1NFQVJDSCB9LAkJLyogYXV0b3NjYW4gKi8KKwl7IDB4MGUsIEtFWV9DQU1FUkEgfSwJCS8qIHNuYXBzaG90ICovCisJeyAweDJkLCBLRVlfU0VUVVAgfSwKKwl7IDB4MGYsIEtFWV9TQ1JFRU4gfSwJCS8qIGZ1bGwgc2NyZWVuICovCisJeyAweDE0LCBLRVlfUkFESU8gfSwJCS8qIEZNIHJhZGlvICovCisJeyAweDI1LCBLRVlfUE9XRVIgfSwJCS8qIHBvd2VyICovCiB9OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcG93ZXJjb2xvcl9yZWFsX2FuZ2VsKTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3Bvd2VyY29sb3JfcmVhbF9hbmdlbF90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3Bvd2VyY29sb3JfcmVhbF9hbmdlbCwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfcG93ZXJjb2xvcl9yZWFsX2FuZ2VsKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19wb3dlcmNvbG9yX3JlYWxfYW5nZWxfdGFibGUpOwogCiAvKiBLd29ybGQgUGx1cyBUViBBbmFsb2cgTGl0ZSBQQ0kgSVIKICAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgogICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19rd29ybGRfcGx1c190dl9hbmFsb2dbSVJfS0VZVEFCX1NJWkVdID0gewotCVsweDBjXSA9IEtFWV9QUk9HMSwJCS8qIEt3b3JsZCBrZXkgKi8KLQlbMHgxNl0gPSBLRVlfQ0xPU0VDRCwJCS8qIC0+ICkgKi8KLQlbMHgxZF0gPSBLRVlfUE9XRVIyLAorc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19rd29ybGRfcGx1c190dl9hbmFsb2dbXSA9IHsKKwl7IDB4MGMsIEtFWV9QUk9HMSB9LAkJLyogS3dvcmxkIGtleSAqLworCXsgMHgxNiwgS0VZX0NMT1NFQ0QgfSwJCS8qIC0+ICkgKi8KKwl7IDB4MWQsIEtFWV9QT1dFUjIgfSwKIAotCVsweDAwXSA9IEtFWV8xLAotCVsweDAxXSA9IEtFWV8yLAotCVsweDAyXSA9IEtFWV8zLAkJCS8qIFR3byBrZXlzIGhhdmUgdGhlIHNhbWUgY29kZTogMyBhbmQgbGVmdCAqLwotCVsweDAzXSA9IEtFWV80LAkJCS8qIFR3byBrZXlzIGhhdmUgdGhlIHNhbWUgY29kZTogMyBhbmQgcmlnaHQgKi8KLQlbMHgwNF0gPSBLRVlfNSwKLQlbMHgwNV0gPSBLRVlfNiwKLQlbMHgwNl0gPSBLRVlfNywKLQlbMHgwN10gPSBLRVlfOCwKLQlbMHgwOF0gPSBLRVlfOSwKLQlbMHgwYV0gPSBLRVlfMCwKKwl7IDB4MDAsIEtFWV8xIH0sCisJeyAweDAxLCBLRVlfMiB9LAorCXsgMHgwMiwgS0VZXzMgfSwJCS8qIFR3byBrZXlzIGhhdmUgdGhlIHNhbWUgY29kZTogMyBhbmQgbGVmdCAqLworCXsgMHgwMywgS0VZXzQgfSwJCS8qIFR3byBrZXlzIGhhdmUgdGhlIHNhbWUgY29kZTogMyBhbmQgcmlnaHQgKi8KKwl7IDB4MDQsIEtFWV81IH0sCisJeyAweDA1LCBLRVlfNiB9LAorCXsgMHgwNiwgS0VZXzcgfSwKKwl7IDB4MDcsIEtFWV84IH0sCisJeyAweDA4LCBLRVlfOSB9LAorCXsgMHgwYSwgS0VZXzAgfSwKIAotCVsweDA5XSA9IEtFWV9BR0FJTiwKLQlbMHgxNF0gPSBLRVlfTVVURSwKKwl7IDB4MDksIEtFWV9BR0FJTiB9LAorCXsgMHgxNCwgS0VZX01VVEUgfSwKIAotCVsweDIwXSA9IEtFWV9VUCwKLQlbMHgyMV0gPSBLRVlfRE9XTiwKLQlbMHgwYl0gPSBLRVlfRU5URVIsCisJeyAweDIwLCBLRVlfVVAgfSwKKwl7IDB4MjEsIEtFWV9ET1dOIH0sCisJeyAweDBiLCBLRVlfRU5URVIgfSwKIAotCVsweDEwXSA9IEtFWV9DSEFOTkVMVVAsCi0JWzB4MTFdID0gS0VZX0NIQU5ORUxET1dOLAorCXsgMHgxMCwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxMSwgS0VZX0NIQU5ORUxET1dOIH0sCiAKIAkvKiBDb3VsZG4ndCBtYXAga2V5IGxlZnQva2V5IHJpZ2h0IHNpbmNlIHRob3NlCiAJICAgY29uZmxpY3Qgd2l0aCAnMycgYW5kICc0JyBzY2FuY29kZXMKIAkgICBJIGR1bm5vIHdoYXQgdGhlIG9yaWdpbmFsIGRyaXZlciBkb2VzCiAJICovCiAKLQlbMHgxM10gPSBLRVlfVk9MVU1FVVAsCi0JWzB4MTJdID0gS0VZX1ZPTFVNRURPV04sCisJeyAweDEzLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MTIsIEtFWV9WT0xVTUVET1dOIH0sCiAKIAkvKiBUaGUgbG93ZXIgcGFydCBvZiB0aGUgSVIKIAkgICBUaGVyZSBhcmUgc2V2ZXJhbCBkdXBsaWNhdGVkIGtleWNvZGVzIHRoZXJlLgpAQCAtMjQ5NiwyODAgKzI2ODIsNDY4IEBACiAJICAgQWxzbywgaXQgaXMgbm90IHJlbGF0ZWQgdG8gdGhlIHRpbWUgYmV0d2VlbiBrZXl1cAogCSAgIGFuZCBrZXlkb3duLgogCSAqLwotCVsweDE5XSA9IEtFWV9QQVVTRSwJCS8qIFRpbWVzaGlmdCAqLwotCVsweDFhXSA9IEtFWV9TVE9QLAotCVsweDFiXSA9IEtFWV9SRUNPUkQsCisJeyAweDE5LCBLRVlfVElNRX0sCQkvKiBUaW1lc2hpZnQgKi8KKwl7IDB4MWEsIEtFWV9TVE9QfSwKKwl7IDB4MWIsIEtFWV9SRUNPUkR9LAogCi0JWzB4MjJdID0gS0VZX1RFWFQsCisJeyAweDIyLCBLRVlfVEVYVH0sCiAKLQlbMHgxNV0gPSBLRVlfQVVESU8sCQkvKiAoKCopKSAqLwotCVsweDBmXSA9IEtFWV9aT09NLAotCVsweDFjXSA9IEtFWV9TSFVGRkxFLAkJLyogc25hcHNob3QgKi8KKwl7IDB4MTUsIEtFWV9BVURJT30sCQkvKiAoKCopKSAqLworCXsgMHgwZiwgS0VZX1pPT019LAorCXsgMHgxYywgS0VZX0NBTUVSQX0sCQkvKiBzbmFwc2hvdCAqLwogCi0JWzB4MThdID0gS0VZX1JFRCwJCS8qIEIgKi8KLQlbMHgyM10gPSBLRVlfR1JFRU4sCQkvKiBDICovCisJeyAweDE4LCBLRVlfUkVEfSwJCS8qIEIgKi8KKwl7IDB4MjMsIEtFWV9HUkVFTn0sCQkvKiBDICovCiB9OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfa3dvcmxkX3BsdXNfdHZfYW5hbG9nKTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19rd29ybGRfcGx1c190dl9hbmFsb2dfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19rd29ybGRfcGx1c190dl9hbmFsb2csCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZyksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfa3dvcmxkX3BsdXNfdHZfYW5hbG9nX3RhYmxlKTsKIAogLyogS2Fpb215IFRWblBDIFUyCiAgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KICAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfa2Fpb215W0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbMHg0M10gPSBLRVlfUE9XRVIyLAotCVsweDAxXSA9IEtFWV9MSVNULAotCVsweDBiXSA9IEtFWV9aT09NLAotCVsweDAzXSA9IEtFWV9QT1dFUiwKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfa2Fpb215W10gPSB7CisJeyAweDQzLCBLRVlfUE9XRVIyfSwKKwl7IDB4MDEsIEtFWV9MSVNUfSwKKwl7IDB4MGIsIEtFWV9aT09NfSwKKwl7IDB4MDMsIEtFWV9QT1dFUn0sCiAKLQlbMHgwNF0gPSBLRVlfMSwKLQlbMHgwOF0gPSBLRVlfMiwKLQlbMHgwMl0gPSBLRVlfMywKKwl7IDB4MDQsIEtFWV8xfSwKKwl7IDB4MDgsIEtFWV8yfSwKKwl7IDB4MDIsIEtFWV8zfSwKIAotCVsweDBmXSA9IEtFWV80LAotCVsweDA1XSA9IEtFWV81LAotCVsweDA2XSA9IEtFWV82LAorCXsgMHgwZiwgS0VZXzR9LAorCXsgMHgwNSwgS0VZXzV9LAorCXsgMHgwNiwgS0VZXzZ9LAogCi0JWzB4MGNdID0gS0VZXzcsCi0JWzB4MGRdID0gS0VZXzgsCi0JWzB4MGFdID0gS0VZXzksCisJeyAweDBjLCBLRVlfN30sCisJeyAweDBkLCBLRVlfOH0sCisJeyAweDBhLCBLRVlfOX0sCiAKLQlbMHgxMV0gPSBLRVlfMCwKKwl7IDB4MTEsIEtFWV8wfSwKIAotCVsweDA5XSA9IEtFWV9DSEFOTkVMVVAsCi0JWzB4MDddID0gS0VZX0NIQU5ORUxET1dOLAorCXsgMHgwOSwgS0VZX0NIQU5ORUxVUH0sCisJeyAweDA3LCBLRVlfQ0hBTk5FTERPV059LAogCi0JWzB4MGVdID0gS0VZX1ZPTFVNRVVQLAotCVsweDEzXSA9IEtFWV9WT0xVTUVET1dOLAorCXsgMHgwZSwgS0VZX1ZPTFVNRVVQfSwKKwl7IDB4MTMsIEtFWV9WT0xVTUVET1dOfSwKIAotCVsweDEwXSA9IEtFWV9IT01FLAotCVsweDEyXSA9IEtFWV9FTlRFUiwKKwl7IDB4MTAsIEtFWV9IT01FfSwKKwl7IDB4MTIsIEtFWV9FTlRFUn0sCiAKLQlbMHgxNF0gPSBLRVlfUkVDT1JELAotCVsweDE1XSA9IEtFWV9TVE9QLAotCVsweDE2XSA9IEtFWV9QTEFZLAotCVsweDE3XSA9IEtFWV9NVVRFLAorCXsgMHgxNCwgS0VZX1JFQ09SRH0sCisJeyAweDE1LCBLRVlfU1RPUH0sCisJeyAweDE2LCBLRVlfUExBWX0sCisJeyAweDE3LCBLRVlfTVVURX0sCiAKLQlbMHgxOF0gPSBLRVlfVVAsCi0JWzB4MTldID0gS0VZX0RPV04sCi0JWzB4MWFdID0gS0VZX0xFRlQsCi0JWzB4MWJdID0gS0VZX1JJR0hULAorCXsgMHgxOCwgS0VZX1VQfSwKKwl7IDB4MTksIEtFWV9ET1dOfSwKKwl7IDB4MWEsIEtFWV9MRUZUfSwKKwl7IDB4MWIsIEtFWV9SSUdIVH0sCiAKLQlbMHgxY10gPSBLRVlfUkVELAotCVsweDFkXSA9IEtFWV9HUkVFTiwKLQlbMHgxZV0gPSBLRVlfWUVMTE9XLAotCVsweDFmXSA9IEtFWV9CTFVFLAorCXsgMHgxYywgS0VZX1JFRH0sCisJeyAweDFkLCBLRVlfR1JFRU59LAorCXsgMHgxZSwgS0VZX1lFTExPV30sCisJeyAweDFmLCBLRVlfQkxVRX0sCiB9OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfa2Fpb215KTsKLQotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhX2ExNmRbSVJfS0VZVEFCX1NJWkVdID0gewotCVsweDIwXSA9IEtFWV9MSVNULAotCVsweDAwXSA9IEtFWV9QT1dFUiwKLQlbMHgyOF0gPSBLRVlfMSwKLQlbMHgxOF0gPSBLRVlfMiwKLQlbMHgzOF0gPSBLRVlfMywKLQlbMHgyNF0gPSBLRVlfNCwKLQlbMHgxNF0gPSBLRVlfNSwKLQlbMHgzNF0gPSBLRVlfNiwKLQlbMHgyY10gPSBLRVlfNywKLQlbMHgxY10gPSBLRVlfOCwKLQlbMHgzY10gPSBLRVlfOSwKLQlbMHgxMl0gPSBLRVlfU1VCVElUTEUsCi0JWzB4MjJdID0gS0VZXzAsCi0JWzB4MzJdID0gS0VZX1JFV0lORCwKLQlbMHgzYV0gPSBLRVlfU0hVRkZMRSwKLQlbMHgwMl0gPSBLRVlfUFJJTlQsCi0JWzB4MTFdID0gS0VZX0NIQU5ORUxET1dOLAotCVsweDMxXSA9IEtFWV9DSEFOTkVMVVAsCi0JWzB4MGNdID0gS0VZX1pPT00sCi0JWzB4MWVdID0gS0VZX1ZPTFVNRURPV04sCi0JWzB4M2VdID0gS0VZX1ZPTFVNRVVQLAotCVsweDBhXSA9IEtFWV9NVVRFLAotCVsweDA0XSA9IEtFWV9BVURJTywKLQlbMHgyNl0gPSBLRVlfUkVDT1JELAotCVsweDA2XSA9IEtFWV9QTEFZLAotCVsweDM2XSA9IEtFWV9TVE9QLAotCVsweDE2XSA9IEtFWV9QQVVTRSwKLQlbMHgyZV0gPSBLRVlfUkVXSU5ELAotCVsweDBlXSA9IEtFWV9GQVNURk9SV0FSRCwKLQlbMHgzMF0gPSBLRVlfVEVYVCwKLQlbMHgyMV0gPSBLRVlfR1JFRU4sCi0JWzB4MDFdID0gS0VZX0JMVUUsCi0JWzB4MDhdID0gS0VZX0VQRywKLQlbMHgyYV0gPSBLRVlfTUVOVSwKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19rYWlvbXlfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19rYWlvbXksCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2thaW9teSksCiB9OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXZlcm1lZGlhX2ExNmQpOworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfa2Fpb215X3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19hdmVybWVkaWFfYTE2ZFtdID0geworCXsgMHgyMCwgS0VZX0xJU1R9LAorCXsgMHgwMCwgS0VZX1BPV0VSfSwKKwl7IDB4MjgsIEtFWV8xfSwKKwl7IDB4MTgsIEtFWV8yfSwKKwl7IDB4MzgsIEtFWV8zfSwKKwl7IDB4MjQsIEtFWV80fSwKKwl7IDB4MTQsIEtFWV81fSwKKwl7IDB4MzQsIEtFWV82fSwKKwl7IDB4MmMsIEtFWV83fSwKKwl7IDB4MWMsIEtFWV84fSwKKwl7IDB4M2MsIEtFWV85fSwKKwl7IDB4MTIsIEtFWV9TVUJUSVRMRX0sCisJeyAweDIyLCBLRVlfMH0sCisJeyAweDMyLCBLRVlfUkVXSU5EfSwKKwl7IDB4M2EsIEtFWV9TSFVGRkxFfSwKKwl7IDB4MDIsIEtFWV9QUklOVH0sCisJeyAweDExLCBLRVlfQ0hBTk5FTERPV059LAorCXsgMHgzMSwgS0VZX0NIQU5ORUxVUH0sCisJeyAweDBjLCBLRVlfWk9PTX0sCisJeyAweDFlLCBLRVlfVk9MVU1FRE9XTn0sCisJeyAweDNlLCBLRVlfVk9MVU1FVVB9LAorCXsgMHgwYSwgS0VZX01VVEV9LAorCXsgMHgwNCwgS0VZX0FVRElPfSwKKwl7IDB4MjYsIEtFWV9SRUNPUkR9LAorCXsgMHgwNiwgS0VZX1BMQVl9LAorCXsgMHgzNiwgS0VZX1NUT1B9LAorCXsgMHgxNiwgS0VZX1BBVVNFfSwKKwl7IDB4MmUsIEtFWV9SRVdJTkR9LAorCXsgMHgwZSwgS0VZX0ZBU1RGT1JXQVJEfSwKKwl7IDB4MzAsIEtFWV9URVhUfSwKKwl7IDB4MjEsIEtFWV9HUkVFTn0sCisJeyAweDAxLCBLRVlfQkxVRX0sCisJeyAweDA4LCBLRVlfRVBHfSwKKwl7IDB4MmEsIEtFWV9NRU5VfSwKK307CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXZlcm1lZGlhX2ExNmRfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19hdmVybWVkaWFfYTE2ZCwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYXZlcm1lZGlhX2ExNmQpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJtZWRpYV9hMTZkX3RhYmxlKTsKIAogLyogRW5jb3JlIEVOTFRWLUZNIHY1LjMKICAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgogICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbmNvcmVfZW5sdHZfZm01M1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWzB4MTBdID0gS0VZX1BPV0VSMiwKLQlbMHgwNl0gPSBLRVlfTVVURSwKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZW5jb3JlX2VubHR2X2ZtNTNbXSA9IHsKKwl7IDB4MTAsIEtFWV9QT1dFUjJ9LAorCXsgMHgwNiwgS0VZX01VVEV9LAogCi0JWzB4MDldID0gS0VZXzEsCi0JWzB4MWRdID0gS0VZXzIsCi0JWzB4MWZdID0gS0VZXzMsCi0JWzB4MTldID0gS0VZXzQsCi0JWzB4MWJdID0gS0VZXzUsCi0JWzB4MTFdID0gS0VZXzYsCi0JWzB4MTddID0gS0VZXzcsCi0JWzB4MTJdID0gS0VZXzgsCi0JWzB4MTZdID0gS0VZXzksCi0JWzB4NDhdID0gS0VZXzAsCisJeyAweDA5LCBLRVlfMX0sCisJeyAweDFkLCBLRVlfMn0sCisJeyAweDFmLCBLRVlfM30sCisJeyAweDE5LCBLRVlfNH0sCisJeyAweDFiLCBLRVlfNX0sCisJeyAweDExLCBLRVlfNn0sCisJeyAweDE3LCBLRVlfN30sCisJeyAweDEyLCBLRVlfOH0sCisJeyAweDE2LCBLRVlfOX0sCisJeyAweDQ4LCBLRVlfMH0sCiAKLQlbMHgwNF0gPSBLRVlfTElTVCwJCS8qIC0vLS0gKi8KLQlbMHg0MF0gPSBLRVlfTEFTVCwJCS8qIHJlY2FsbCAqLworCXsgMHgwNCwgS0VZX0xJU1R9LAkJLyogLS8tLSAqLworCXsgMHg0MCwgS0VZX0xBU1R9LAkJLyogcmVjYWxsICovCiAKLQlbMHgwMl0gPSBLRVlfTU9ERSwJCS8qIFRWL0FWICovCi0JWzB4MDVdID0gS0VZX1NIVUZGTEUsCQkvKiBTTkFQU0hPVCAqLworCXsgMHgwMiwgS0VZX01PREV9LAkJLyogVFYvQVYgKi8KKwl7IDB4MDUsIEtFWV9DQU1FUkF9LAkJLyogU05BUFNIT1QgKi8KIAotCVsweDRjXSA9IEtFWV9DSEFOTkVMVVAsCQkvKiBVUCAqLwotCVsweDAwXSA9IEtFWV9DSEFOTkVMRE9XTiwJLyogRE9XTiAqLwotCVsweDBkXSA9IEtFWV9WT0xVTUVVUCwJCS8qIFJJR0hUICovCi0JWzB4MTVdID0gS0VZX1ZPTFVNRURPV04sCS8qIExFRlQgKi8KLQlbMHg0OV0gPSBLRVlfRU5URVIsCQkvKiBPSyAqLworCXsgMHg0YywgS0VZX0NIQU5ORUxVUH0sCQkvKiBVUCAqLworCXsgMHgwMCwgS0VZX0NIQU5ORUxET1dOfSwJLyogRE9XTiAqLworCXsgMHgwZCwgS0VZX1ZPTFVNRVVQfSwJCS8qIFJJR0hUICovCisJeyAweDE1LCBLRVlfVk9MVU1FRE9XTn0sCS8qIExFRlQgKi8KKwl7IDB4NDksIEtFWV9FTlRFUn0sCQkvKiBPSyAqLwogCi0JWzB4NTRdID0gS0VZX1JFQ09SRCwKLQlbMHg0ZF0gPSBLRVlfUExBWSwJCS8qIHBhdXNlICovCisJeyAweDU0LCBLRVlfUkVDT1JEfSwKKwl7IDB4NGQsIEtFWV9QTEFZfSwJCS8qIHBhdXNlICovCiAKLQlbMHgxZV0gPSBLRVlfVVAsCQkvKiB2aWRlbyBzZXR0aW5nICovCi0JWzB4MGVdID0gS0VZX1JJR0hULAkJLyogPC0gKi8KLQlbMHgxYV0gPSBLRVlfTEVGVCwJCS8qIC0+ICovCisJeyAweDFlLCBLRVlfTUVOVX0sCQkvKiB2aWRlbyBzZXR0aW5nICovCisJeyAweDBlLCBLRVlfUklHSFR9LAkJLyogPC0gKi8KKwl7IDB4MWEsIEtFWV9MRUZUfSwJCS8qIC0+ICovCiAKLQlbMHgwYV0gPSBLRVlfRE9XTiwJCS8qIHZpZGVvIGRlZmF1bHQgKi8KLQlbMHgwY10gPSBLRVlfWk9PTSwJCS8qIGhpZGUgcGFubmVsICovCi0JWzB4NDddID0gS0VZX1NMRUVQLAkJLyogc2h1dGRvd24gKi8KKwl7IDB4MGEsIEtFWV9DTEVBUn0sCQkvKiB2aWRlbyBkZWZhdWx0ICovCisJeyAweDBjLCBLRVlfWk9PTX0sCQkvKiBoaWRlIHBhbm5lbCAqLworCXsgMHg0NywgS0VZX1NMRUVQfSwJCS8qIHNodXRkb3duICovCiB9OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZW5jb3JlX2VubHR2X2ZtNTMpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2VuY29yZV9lbmx0dl9mbTUzX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfZW5jb3JlX2VubHR2X2ZtNTMsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX2VuY29yZV9lbmx0dl9mbTUzKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbmNvcmVfZW5sdHZfZm01M190YWJsZSk7CiAKIC8qIFpvZ2lzIFJlYWwgQXVkaW8gMjIwIC0gMzIga2V5cyBJUiAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcmVhbF9hdWRpb18yMjBfMzJfa2V5c1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWzB4MWNdID0gS0VZX1JBRElPLAotCVsweDEyXSA9IEtFWV9QT1dFUjIsCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3JlYWxfYXVkaW9fMjIwXzMyX2tleXNbXSA9IHsKKwl7IDB4MWMsIEtFWV9SQURJT30sCisJeyAweDEyLCBLRVlfUE9XRVIyfSwKIAotCVsweDAxXSA9IEtFWV8xLAotCVsweDAyXSA9IEtFWV8yLAotCVsweDAzXSA9IEtFWV8zLAotCVsweDA0XSA9IEtFWV80LAotCVsweDA1XSA9IEtFWV81LAotCVsweDA2XSA9IEtFWV82LAotCVsweDA3XSA9IEtFWV83LAotCVsweDA4XSA9IEtFWV84LAotCVsweDA5XSA9IEtFWV85LAotCVsweDAwXSA9IEtFWV8wLAorCXsgMHgwMSwgS0VZXzF9LAorCXsgMHgwMiwgS0VZXzJ9LAorCXsgMHgwMywgS0VZXzN9LAorCXsgMHgwNCwgS0VZXzR9LAorCXsgMHgwNSwgS0VZXzV9LAorCXsgMHgwNiwgS0VZXzZ9LAorCXsgMHgwNywgS0VZXzd9LAorCXsgMHgwOCwgS0VZXzh9LAorCXsgMHgwOSwgS0VZXzl9LAorCXsgMHgwMCwgS0VZXzB9LAogCi0JWzB4MGNdID0gS0VZX1ZPTFVNRVVQLAotCVsweDE4XSA9IEtFWV9WT0xVTUVET1dOLAotCVsweDBiXSA9IEtFWV9DSEFOTkVMVVAsCi0JWzB4MTVdID0gS0VZX0NIQU5ORUxET1dOLAotCVsweDE2XSA9IEtFWV9FTlRFUiwKKwl7IDB4MGMsIEtFWV9WT0xVTUVVUH0sCisJeyAweDE4LCBLRVlfVk9MVU1FRE9XTn0sCisJeyAweDBiLCBLRVlfQ0hBTk5FTFVQfSwKKwl7IDB4MTUsIEtFWV9DSEFOTkVMRE9XTn0sCisJeyAweDE2LCBLRVlfRU5URVJ9LAogCi0JWzB4MTFdID0gS0VZX0xJU1QsCQkvKiBTb3VyY2UgKi8KLQlbMHgwZF0gPSBLRVlfQVVESU8sCQkvKiBzdGVyZW8gKi8KKwl7IDB4MTEsIEtFWV9MSVNUfSwJCS8qIFNvdXJjZSAqLworCXsgMHgwZCwgS0VZX0FVRElPfSwJCS8qIHN0ZXJlbyAqLwogCi0JWzB4MGZdID0gS0VZX1BSRVZJT1VTLAkJLyogUHJldiAqLwotCVsweDFiXSA9IEtFWV9QQVVTRSwJCS8qIFRpbWVzaGlmdCAqLwotCVsweDFhXSA9IEtFWV9ORVhULAkJLyogTmV4dCAqLworCXsgMHgwZiwgS0VZX1BSRVZJT1VTfSwJCS8qIFByZXYgKi8KKwl7IDB4MWIsIEtFWV9USU1FfSwJCS8qIFRpbWVzaGlmdCAqLworCXsgMHgxYSwgS0VZX05FWFR9LAkJLyogTmV4dCAqLwogCi0JWzB4MGVdID0gS0VZX1NUT1AsCi0JWzB4MWZdID0gS0VZX1BMQVksCi0JWzB4MWVdID0gS0VZX1BMQVlQQVVTRSwJCS8qIFBhdXNlICovCisJeyAweDBlLCBLRVlfU1RPUH0sCisJeyAweDFmLCBLRVlfUExBWX0sCisJeyAweDFlLCBLRVlfUExBWVBBVVNFfSwJCS8qIFBhdXNlICovCiAKLQlbMHgxZF0gPSBLRVlfUkVDT1JELAotCVsweDEzXSA9IEtFWV9NVVRFLAotCVsweDE5XSA9IEtFWV9TSFVGRkxFLAkJLyogU25hcHNob3QgKi8KKwl7IDB4MWQsIEtFWV9SRUNPUkR9LAorCXsgMHgxMywgS0VZX01VVEV9LAorCXsgMHgxOSwgS0VZX0NBTUVSQX0sCQkvKiBTbmFwc2hvdCAqLwogCiB9OwotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcmVhbF9hdWRpb18yMjBfMzJfa2V5cyk7CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcmVhbF9hdWRpb18yMjBfMzJfa2V5c190YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3JlYWxfYXVkaW9fMjIwXzMyX2tleXMsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3JlYWxfYXVkaW9fMjIwXzMyX2tleXMpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3JlYWxfYXVkaW9fMjIwXzMyX2tleXNfdGFibGUpOwogCiAvKiBBVEkgVFYgV29uZGVyIEhEIDYwMCBVU0IKICAgIERldmluIEhlaXRtdWVsbGVyIDxkZXZpbi5oZWl0bXVlbGxlckBnbWFpbC5jb20+CiAgKi8KLUlSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F0aV90dl93b25kZXJfaGRfNjAwW0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbMHgwMF0gPSBLRVlfUkVDT1JELAkJLyogUm93IDEgKi8KLQlbMHgwMV0gPSBLRVlfUExBWVBBVVNFLAotCVsweDAyXSA9IEtFWV9TVE9QLAotCVsweDAzXSA9IEtFWV9QT1dFUiwKLQlbMHgwNF0gPSBLRVlfUFJFVklPVVMsCS8qIFJvdyAyICovCi0JWzB4MDVdID0gS0VZX1JFV0lORCwKLQlbMHgwNl0gPSBLRVlfRk9SV0FSRCwKLQlbMHgwN10gPSBLRVlfTkVYVCwKLQlbMHgwOF0gPSBLRVlfRVBHLAkJLyogUm93IDMgKi8KLQlbMHgwOV0gPSBLRVlfSE9NRSwKLQlbMHgwYV0gPSBLRVlfTUVOVSwKLQlbMHgwYl0gPSBLRVlfQ0hBTk5FTFVQLAotCVsweDBjXSA9IEtFWV9CQUNLLAkJLyogUm93IDQgKi8KLQlbMHgwZF0gPSBLRVlfVVAsCi0JWzB4MGVdID0gS0VZX0lORk8sCi0JWzB4MGZdID0gS0VZX0NIQU5ORUxET1dOLAotCVsweDEwXSA9IEtFWV9MRUZULAkJLyogUm93IDUgKi8KLQlbMHgxMV0gPSBLRVlfU0VMRUNULAotCVsweDEyXSA9IEtFWV9SSUdIVCwKLQlbMHgxM10gPSBLRVlfVk9MVU1FVVAsCi0JWzB4MTRdID0gS0VZX0xBU1QsCQkvKiBSb3cgNiAqLwotCVsweDE1XSA9IEtFWV9ET1dOLAotCVsweDE2XSA9IEtFWV9NVVRFLAotCVsweDE3XSA9IEtFWV9WT0xVTUVET1dOLAorc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSBpcl9jb2Rlc19hdGlfdHZfd29uZGVyX2hkXzYwMFtdID0geworCXsgMHgwMCwgS0VZX1JFQ09SRH0sCQkvKiBSb3cgMSAqLworCXsgMHgwMSwgS0VZX1BMQVlQQVVTRX0sCisJeyAweDAyLCBLRVlfU1RPUH0sCisJeyAweDAzLCBLRVlfUE9XRVJ9LAorCXsgMHgwNCwgS0VZX1BSRVZJT1VTfSwJLyogUm93IDIgKi8KKwl7IDB4MDUsIEtFWV9SRVdJTkR9LAorCXsgMHgwNiwgS0VZX0ZPUldBUkR9LAorCXsgMHgwNywgS0VZX05FWFR9LAorCXsgMHgwOCwgS0VZX0VQR30sCQkvKiBSb3cgMyAqLworCXsgMHgwOSwgS0VZX0hPTUV9LAorCXsgMHgwYSwgS0VZX01FTlV9LAorCXsgMHgwYiwgS0VZX0NIQU5ORUxVUH0sCisJeyAweDBjLCBLRVlfQkFDS30sCQkvKiBSb3cgNCAqLworCXsgMHgwZCwgS0VZX1VQfSwKKwl7IDB4MGUsIEtFWV9JTkZPfSwKKwl7IDB4MGYsIEtFWV9DSEFOTkVMRE9XTn0sCisJeyAweDEwLCBLRVlfTEVGVH0sCQkvKiBSb3cgNSAqLworCXsgMHgxMSwgS0VZX1NFTEVDVH0sCisJeyAweDEyLCBLRVlfUklHSFR9LAorCXsgMHgxMywgS0VZX1ZPTFVNRVVQfSwKKwl7IDB4MTQsIEtFWV9MQVNUfSwJCS8qIFJvdyA2ICovCisJeyAweDE1LCBLRVlfRE9XTn0sCisJeyAweDE2LCBLRVlfTVVURX0sCisJeyAweDE3LCBLRVlfVk9MVU1FRE9XTn0sCiB9OwotCi1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdGlfdHZfd29uZGVyX2hkXzYwMCk7CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDBfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19hdGlfdHZfd29uZGVyX2hkXzYwMCwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDApLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F0aV90dl93b25kZXJfaGRfNjAwX3RhYmxlKTsKIAogLyogRFZCV29ybGQgcmVtb3RlcwogICAgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBtZS5ieT4KICAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZG0xMTA1X25lY1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWzB4MGFdID0gS0VZX1EsCQkvKnBvd2VyKi8KLQlbMHgwY10gPSBLRVlfTSwJCS8qbXV0ZSovCi0JWzB4MTFdID0gS0VZXzEsCi0JWzB4MTJdID0gS0VZXzIsCi0JWzB4MTNdID0gS0VZXzMsCi0JWzB4MTRdID0gS0VZXzQsCi0JWzB4MTVdID0gS0VZXzUsCi0JWzB4MTZdID0gS0VZXzYsCi0JWzB4MTddID0gS0VZXzcsCi0JWzB4MThdID0gS0VZXzgsCi0JWzB4MTldID0gS0VZXzksCi0JWzB4MTBdID0gS0VZXzAsCi0JWzB4MWNdID0gS0VZX1BBR0VVUCwJLypjaCsqLwotCVsweDBmXSA9IEtFWV9QQUdFRE9XTiwJLypjaC0qLwotCVsweDFhXSA9IEtFWV9PLAkJLyp2b2wrKi8KLQlbMHgwZV0gPSBLRVlfWiwJCS8qdm9sLSovCi0JWzB4MDRdID0gS0VZX1IsCQkvKnJlYyovCi0JWzB4MDldID0gS0VZX0QsCQkvKmZhdiovCi0JWzB4MDhdID0gS0VZX0JBQ0tTUEFDRSwJLypyZXdpbmQqLwotCVsweDA3XSA9IEtFWV9BLAkJLypmYXN0Ki8KLQlbMHgwYl0gPSBLRVlfUCwJCS8qcGF1c2UqLwotCVsweDAyXSA9IEtFWV9FU0MsCS8qY2FuY2VsKi8KLQlbMHgwM10gPSBLRVlfRywJCS8qdGFiKi8KLQlbMHgwMF0gPSBLRVlfVVAsCS8qdXAqLwotCVsweDFmXSA9IEtFWV9FTlRFUiwJLypvayovCi0JWzB4MDFdID0gS0VZX0RPV04sCS8qZG93biovCi0JWzB4MDVdID0gS0VZX0MsCQkvKmNhcCovCi0JWzB4MDZdID0gS0VZX1MsCQkvKnN0b3AqLwotCVsweDQwXSA9IEtFWV9GLAkJLypmdWxsKi8KLQlbMHgxZV0gPSBLRVlfVywJCS8qdHZtb2RlKi8KLQlbMHgxYl0gPSBLRVlfQiwJCS8qcmVjYWxsKi8KK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZG0xMTA1X25lY1tdID0geworCXsgMHgwYSwgS0VZX1BPV0VSMn0sCQkvKiBwb3dlciAqLworCXsgMHgwYywgS0VZX01VVEV9LAkJLyogbXV0ZSAqLworCXsgMHgxMSwgS0VZXzF9LAorCXsgMHgxMiwgS0VZXzJ9LAorCXsgMHgxMywgS0VZXzN9LAorCXsgMHgxNCwgS0VZXzR9LAorCXsgMHgxNSwgS0VZXzV9LAorCXsgMHgxNiwgS0VZXzZ9LAorCXsgMHgxNywgS0VZXzd9LAorCXsgMHgxOCwgS0VZXzh9LAorCXsgMHgxOSwgS0VZXzl9LAorCXsgMHgxMCwgS0VZXzB9LAorCXsgMHgxYywgS0VZX0NIQU5ORUxVUH0sCQkvKiBjaCsgKi8KKwl7IDB4MGYsIEtFWV9DSEFOTkVMRE9XTn0sCS8qIGNoLSAqLworCXsgMHgxYSwgS0VZX1ZPTFVNRVVQfSwJCS8qIHZvbCsgKi8KKwl7IDB4MGUsIEtFWV9WT0xVTUVET1dOfSwJLyogdm9sLSAqLworCXsgMHgwNCwgS0VZX1JFQ09SRH0sCQkvKiByZWMgKi8KKwl7IDB4MDksIEtFWV9DSEFOTkVMfSwJCS8qIGZhdiAqLworCXsgMHgwOCwgS0VZX0JBQ0tTUEFDRX0sCQkvKiByZXdpbmQgKi8KKwl7IDB4MDcsIEtFWV9GQVNURk9SV0FSRH0sCS8qIGZhc3QgKi8KKwl7IDB4MGIsIEtFWV9QQVVTRX0sCQkvKiBwYXVzZSAqLworCXsgMHgwMiwgS0VZX0VTQ30sCQkvKiBjYW5jZWwgKi8KKwl7IDB4MDMsIEtFWV9UQUJ9LAkJLyogdGFiICovCisJeyAweDAwLCBLRVlfVVB9LAkJLyogdXAgKi8KKwl7IDB4MWYsIEtFWV9FTlRFUn0sCQkvKiBvayAqLworCXsgMHgwMSwgS0VZX0RPV059LAkJLyogZG93biAqLworCXsgMHgwNSwgS0VZX1JFQ09SRH0sCQkvKiBjYXAgKi8KKwl7IDB4MDYsIEtFWV9TVE9QfSwJCS8qIHN0b3AgKi8KKwl7IDB4NDAsIEtFWV9aT09NfSwJCS8qIGZ1bGwgKi8KKwl7IDB4MWUsIEtFWV9UVn0sCQkvKiB0dm1vZGUgKi8KKwl7IDB4MWIsIEtFWV9CfSwJCQkvKiByZWNhbGwgKi8KIH07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19kbTExMDVfbmVjKTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19kbTExMDVfbmVjX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfZG0xMTA1X25lYywKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZG0xMTA1X25lYyksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZG0xMTA1X25lY190YWJsZSk7CisKKy8qIFRlcnJhdGVjIENpbmVyZ3kgSHlicmlkIFQgVVNCIFhTCisgICBEZXZpbiBIZWl0bXVlbGxlciA8ZGhlaXRtdWVsbGVyQGxpbnV4dHYub3JnPgorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3RlcnJhdGVjX2NpbmVyZ3lfeHNbXSA9IHsKKwl7IDB4NDEsIEtFWV9IT01FfSwKKwl7IDB4MDEsIEtFWV9QT1dFUn0sCisJeyAweDQyLCBLRVlfTUVOVX0sCisJeyAweDAyLCBLRVlfMX0sCisJeyAweDAzLCBLRVlfMn0sCisJeyAweDA0LCBLRVlfM30sCisJeyAweDQzLCBLRVlfU1VCVElUTEV9LAorCXsgMHgwNSwgS0VZXzR9LAorCXsgMHgwNiwgS0VZXzV9LAorCXsgMHgwNywgS0VZXzZ9LAorCXsgMHg0NCwgS0VZX1RFWFR9LAorCXsgMHgwOCwgS0VZXzd9LAorCXsgMHgwOSwgS0VZXzh9LAorCXsgMHgwYSwgS0VZXzl9LAorCXsgMHg0NSwgS0VZX0RFTEVURX0sCisJeyAweDBiLCBLRVlfVFVORVJ9LAorCXsgMHgwYywgS0VZXzB9LAorCXsgMHgwZCwgS0VZX01PREV9LAorCXsgMHg0NiwgS0VZX1RWfSwKKwl7IDB4NDcsIEtFWV9EVkR9LAorCXsgMHg0OSwgS0VZX1ZJREVPfSwKKwl7IDB4NGIsIEtFWV9BVVh9LAorCXsgMHgxMCwgS0VZX1VQfSwKKwl7IDB4MTEsIEtFWV9MRUZUfSwKKwl7IDB4MTIsIEtFWV9PS30sCisJeyAweDEzLCBLRVlfUklHSFR9LAorCXsgMHgxNCwgS0VZX0RPV059LAorCXsgMHgwZiwgS0VZX0VQR30sCisJeyAweDE2LCBLRVlfSU5GT30sCisJeyAweDRkLCBLRVlfQkFDS1NQQUNFfSwKKwl7IDB4MWMsIEtFWV9WT0xVTUVVUH0sCisJeyAweDRjLCBLRVlfUExBWX0sCisJeyAweDFiLCBLRVlfQ0hBTk5FTFVQfSwKKwl7IDB4MWUsIEtFWV9WT0xVTUVET1dOfSwKKwl7IDB4MWQsIEtFWV9NVVRFfSwKKwl7IDB4MWYsIEtFWV9DSEFOTkVMRE9XTn0sCisJeyAweDE3LCBLRVlfUkVEfSwKKwl7IDB4MTgsIEtFWV9HUkVFTn0sCisJeyAweDE5LCBLRVlfWUVMTE9XfSwKKwl7IDB4MWEsIEtFWV9CTFVFfSwKKwl7IDB4NTgsIEtFWV9SRUNPUkR9LAorCXsgMHg0OCwgS0VZX1NUT1B9LAorCXsgMHg0MCwgS0VZX1BBVVNFfSwKKwl7IDB4NTQsIEtFWV9MQVNUfSwKKwl7IDB4NGUsIEtFWV9SRVdJTkR9LAorCXsgMHg0ZiwgS0VZX0ZBU1RGT1JXQVJEfSwKKwl7IDB4NWMsIEtFWV9ORVhUfSwKK307CitzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfdGVycmF0ZWNfY2luZXJneV94c190YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3RlcnJhdGVjX2NpbmVyZ3lfeHMsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3RlcnJhdGVjX2NpbmVyZ3lfeHMpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3RlcnJhdGVjX2NpbmVyZ3lfeHNfdGFibGUpOwogCiAvKiBFVkdBIGluRHR1YmUKICAgIERldmluIEhlaXRtdWVsbGVyIDxkZXZpbi5oZWl0bXVlbGxlckBnbWFpbC5jb20+CiAgKi8KLUlSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2V2Z2FfaW5kdHViZVtJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWzB4MTJdID0gS0VZX1BPV0VSLAotCVsweDAyXSA9IEtFWV9NT0RFLAkvKiBUViAqLwotCVsweDE0XSA9IEtFWV9NVVRFLAotCVsweDFhXSA9IEtFWV9DSEFOTkVMVVAsCi0JWzB4MTZdID0gS0VZX1RWMiwJLyogUElQICovCi0JWzB4MWRdID0gS0VZX1ZPTFVNRVVQLAotCVsweDA1XSA9IEtFWV9DSEFOTkVMRE9XTiwKLQlbMHgwZl0gPSBLRVlfUExBWVBBVVNFLAotCVsweDE5XSA9IEtFWV9WT0xVTUVET1dOLAotCVsweDFjXSA9IEtFWV9SRVdJTkQsCi0JWzB4MGRdID0gS0VZX1JFQ09SRCwKLQlbMHgxOF0gPSBLRVlfRk9SV0FSRCwKLQlbMHgxZV0gPSBLRVlfUFJFVklPVVMsCi0JWzB4MWJdID0gS0VZX1NUT1AsCi0JWzB4MWZdID0gS0VZX05FWFQsCi0JWzB4MTNdID0gS0VZX0NBTUVSQSwKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgaXJfY29kZXNfZXZnYV9pbmR0dWJlW10gPSB7CisJeyAweDEyLCBLRVlfUE9XRVJ9LAorCXsgMHgwMiwgS0VZX01PREV9LAkvKiBUViAqLworCXsgMHgxNCwgS0VZX01VVEV9LAorCXsgMHgxYSwgS0VZX0NIQU5ORUxVUH0sCisJeyAweDE2LCBLRVlfVFYyfSwJLyogUElQICovCisJeyAweDFkLCBLRVlfVk9MVU1FVVB9LAorCXsgMHgwNSwgS0VZX0NIQU5ORUxET1dOfSwKKwl7IDB4MGYsIEtFWV9QTEFZUEFVU0V9LAorCXsgMHgxOSwgS0VZX1ZPTFVNRURPV059LAorCXsgMHgxYywgS0VZX1JFV0lORH0sCisJeyAweDBkLCBLRVlfUkVDT1JEfSwKKwl7IDB4MTgsIEtFWV9GT1JXQVJEfSwKKwl7IDB4MWUsIEtFWV9QUkVWSU9VU30sCisJeyAweDFiLCBLRVlfU1RPUH0sCisJeyAweDFmLCBLRVlfTkVYVH0sCisJeyAweDEzLCBLRVlfQ0FNRVJBfSwKIH07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19ldmdhX2luZHR1YmUpOworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2V2Z2FfaW5kdHViZV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2V2Z2FfaW5kdHViZSwKKwkuc2l6ZSA9IEFSUkFZX1NJWkUoaXJfY29kZXNfZXZnYV9pbmR0dWJlKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19ldmdhX2luZHR1YmVfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3ZpZGVvbWF0ZV9zMzUwW10gPSB7CisJeyAweDAwLCBLRVlfVFZ9LAorCXsgMHgwMSwgS0VZX0RWRH0sCisJeyAweDA0LCBLRVlfUkVDT1JEfSwKKwl7IDB4MDUsIEtFWV9WSURFT30sCS8qIFRWL1ZpZGVvICovCisJeyAweDA3LCBLRVlfU1RPUH0sCisJeyAweDA4LCBLRVlfUExBWVBBVVNFfSwKKwl7IDB4MGEsIEtFWV9SRVdJTkR9LAorCXsgMHgwZiwgS0VZX0ZBU1RGT1JXQVJEfSwKKwl7IDB4MTAsIEtFWV9DSEFOTkVMVVB9LAorCXsgMHgxMiwgS0VZX1ZPTFVNRVVQfSwKKwl7IDB4MTMsIEtFWV9DSEFOTkVMRE9XTn0sCisJeyAweDE0LCBLRVlfTVVURX0sCisJeyAweDE1LCBLRVlfVk9MVU1FRE9XTn0sCisJeyAweDE2LCBLRVlfMX0sCisJeyAweDE3LCBLRVlfMn0sCisJeyAweDE4LCBLRVlfM30sCisJeyAweDE5LCBLRVlfNH0sCisJeyAweDFhLCBLRVlfNX0sCisJeyAweDFiLCBLRVlfNn0sCisJeyAweDFjLCBLRVlfN30sCisJeyAweDFkLCBLRVlfOH0sCisJeyAweDFlLCBLRVlfOX0sCisJeyAweDFmLCBLRVlfMH0sCisJeyAweDIxLCBLRVlfU0xFRVB9LAorCXsgMHgyNCwgS0VZX1pPT019LAorCXsgMHgyNSwgS0VZX0xBU1R9LAkvKiBSZWNhbGwgKi8KKwl7IDB4MjYsIEtFWV9TVUJUSVRMRX0sCS8qIENDICovCisJeyAweDI3LCBLRVlfTEFOR1VBR0V9LAkvKiBNVFMgKi8KKwl7IDB4MjksIEtFWV9DSEFOTkVMfSwJLyogU1VSRiAqLworCXsgMHgyYiwgS0VZX0F9LAorCXsgMHgyYywgS0VZX0J9LAorCXsgMHgyZiwgS0VZX0NBTUVSQX0sCS8qIFNuYXBzaG90ICovCisJeyAweDIzLCBLRVlfUkFESU99LAorCXsgMHgwMiwgS0VZX1BSRVZJT1VTU09OR30sCisJeyAweDA2LCBLRVlfTkVYVFNPTkd9LAorCXsgMHgwMywgS0VZX0VQR30sCisJeyAweDA5LCBLRVlfU0VUVVB9LAorCXsgMHgyMiwgS0VZX0JBQ0tTUEFDRX0sCisJeyAweDBjLCBLRVlfVVB9LAorCXsgMHgwZSwgS0VZX0RPV059LAorCXsgMHgwYiwgS0VZX0xFRlR9LAorCXsgMHgwZCwgS0VZX1JJR0hUfSwKKwl7IDB4MTEsIEtFWV9FTlRFUn0sCisJeyAweDIwLCBLRVlfVEVYVH0sCit9Oworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3ZpZGVvbWF0ZV9zMzUwX3RhYmxlID0geworCS5zY2FuID0gaXJfY29kZXNfdmlkZW9tYXRlX3MzNTAsCisJLnNpemUgPSBBUlJBWV9TSVpFKGlyX2NvZGVzX3ZpZGVvbWF0ZV9zMzUwKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc192aWRlb21hdGVfczM1MF90YWJsZSk7CisKKy8qIEdBRE1FSSBVVFYzMzArIFJNMDA4WiByZW1vdGUKKyAgIFNoaW5lIExpdSA8c2hpbmVsQGZveG1haWwuY29tPgorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2dhZG1laV9ybTAwOHpbXSA9IHsKKwl7IDB4MTQsIEtFWV9QT1dFUjJ9LAkJLyogUE9XRVIgT0ZGICovCisJeyAweDBjLCBLRVlfTVVURX0sCQkvKiBNVVRFICovCisKKwl7IDB4MTgsIEtFWV9UVn0sCQkvKiBUViAqLworCXsgMHgwZSwgS0VZX1ZJREVPfSwJCS8qIEFWICovCisJeyAweDBiLCBLRVlfQVVESU99LAkJLyogU1YgKi8KKwl7IDB4MGYsIEtFWV9SQURJT30sCQkvKiBGTSAqLworCisJeyAweDAwLCBLRVlfMX0sCisJeyAweDAxLCBLRVlfMn0sCisJeyAweDAyLCBLRVlfM30sCisJeyAweDAzLCBLRVlfNH0sCisJeyAweDA0LCBLRVlfNX0sCisJeyAweDA1LCBLRVlfNn0sCisJeyAweDA2LCBLRVlfN30sCisJeyAweDA3LCBLRVlfOH0sCisJeyAweDA4LCBLRVlfOX0sCisJeyAweDA5LCBLRVlfMH0sCisJeyAweDBhLCBLRVlfSU5GT30sCQkvKiBPU0QgKi8KKwl7IDB4MWMsIEtFWV9CQUNLU1BBQ0V9LAkJLyogTEFTVCAqLworCisJeyAweDBkLCBLRVlfUExBWX0sCQkvKiBQTEFZICovCisJeyAweDFlLCBLRVlfQ0FNRVJBfSwJCS8qIFNOQVBTSE9UICovCisJeyAweDFhLCBLRVlfUkVDT1JEfSwJCS8qIFJFQ09SRCAqLworCXsgMHgxNywgS0VZX1NUT1B9LAkJLyogU1RPUCAqLworCisJeyAweDFmLCBLRVlfVVB9LAkJLyogVVAgKi8KKwl7IDB4NDQsIEtFWV9ET1dOfSwJCS8qIERPV04gKi8KKwl7IDB4NDYsIEtFWV9UQUJ9LAkJLyogQkFDSyAqLworCXsgMHg0YSwgS0VZX1pPT019LAkJLyogRlVMTFNFQ1JFRU4gKi8KKworCXsgMHgxMCwgS0VZX1ZPTFVNRVVQfSwJCS8qIFZPTFVNRVVQICovCisJeyAweDExLCBLRVlfVk9MVU1FRE9XTn0sCS8qIFZPTFVNRURPV04gKi8KKwl7IDB4MTIsIEtFWV9DSEFOTkVMVVB9LAkJLyogQ0hBTk5FTFVQICovCisJeyAweDEzLCBLRVlfQ0hBTk5FTERPV059LAkvKiBDSEFOTkVMRE9XTiAqLworCXsgMHgxNSwgS0VZX0VOVEVSfSwJCS8qIE9LICovCit9Oworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2dhZG1laV9ybTAwOHpfdGFibGUgPSB7CisJLnNjYW4gPSBpcl9jb2Rlc19nYWRtZWlfcm0wMDh6LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19nYWRtZWlfcm0wMDh6KSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19nYWRtZWlfcm0wMDh6X3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKaW5kZXggYjEwOTM1Ni4uYmM0YjAwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKQEAgLTI3LDcgKzI3LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWcgbGV2ZWwgIgogCQkgIihpbmZvPTEsIG1hcD0yLCByZWc9NCwgYWR2PTgsIGNhbD0xNiAob3ItYWJsZSkpIik7CiAKLXN0YXRpYyBpbnQgdGRhMTgyNzFfY2FsX29uX3N0YXJ0dXA7CitzdGF0aWMgaW50IHRkYTE4MjcxX2NhbF9vbl9zdGFydHVwID0gLTE7CiBtb2R1bGVfcGFyYW1fbmFtZWQoY2FsLCB0ZGExODI3MV9jYWxfb25fc3RhcnR1cCwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoY2FsLCAicGVyZm9ybSBSRiB0cmFja2luZyBmaWx0ZXIgY2FsaWJyYXRpb24gb24gc3RhcnR1cCIpOwogCkBAIC0xMTkyLDEwICsxMTkyLDI1IEBACiAJY2FzZSAwOgogCQlnb3RvIGZhaWw7CiAJY2FzZSAxOgorCXsKIAkJLyogbmV3IHR1bmVyIGluc3RhbmNlICovCisJCWludCByZl9jYWxfb25fc3RhcnR1cDsKKwogCQlwcml2LT5nYXRlID0gKGNmZykgPyBjZmctPmdhdGUgOiBUREExODI3MV9HQVRFX0FVVE87CiAJCXByaXYtPnJvbGUgPSAoY2ZnKSA/IGNmZy0+cm9sZSA6IFREQTE4MjcxX01BU1RFUjsKIAkJcHJpdi0+Y29uZmlnID0gKGNmZykgPyBjZmctPmNvbmZpZyA6IDA7CisKKwkJLyogdGRhMTgyNzFfY2FsX29uX3N0YXJ0dXAgPT0gLTEgd2hlbiBjYWwKKwkJICogbW9kdWxlIG9wdGlvbiBpcyB1bnNldCAqLworCQlpZiAodGRhMTgyNzFfY2FsX29uX3N0YXJ0dXAgPT0gLTEpIHsKKwkJCS8qIGhvbm9yIGF0dGFjaC10aW1lIGNvbmZpZ3VyYXRpb24gKi8KKwkJCXJmX2NhbF9vbl9zdGFydHVwID0KKwkJCQkoKGNmZykgJiYgKGNmZy0+cmZfY2FsX29uX3N0YXJ0dXApKSA/IDEgOiAwOworCQl9IGVsc2UgeworCQkJLyogbW9kdWxlIG9wdGlvbiBvdmVycmlkZXMgYXR0YWNoIGNvbmZpZ3VyYXRpb24gKi8KKwkJCXJmX2NhbF9vbl9zdGFydHVwID0gdGRhMTgyNzFfY2FsX29uX3N0YXJ0dXA7CisJCX0KKwogCQlwcml2LT5jYWxfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAkJbXV0ZXhfaW5pdCgmcHJpdi0+bG9jayk7CiAKQEAgLTEyMTMsMTEgKzEyMjgsMTIgQEAKIAkJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CiAJCXRkYTE4MjcxX2luaXRfcmVncyhmZSk7CiAKLQkJaWYgKCh0ZGExODI3MV9jYWxfb25fc3RhcnR1cCkgJiYgKHByaXYtPmlkID09IFREQTE4MjcxSERDMikpCisJCWlmICgocmZfY2FsX29uX3N0YXJ0dXApICYmIChwcml2LT5pZCA9PSBUREExODI3MUhEQzIpKQogCQkJdGRhMTgyNzFjMl9yZl9jYWxfaW5pdChmZSk7CiAKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKIAkJYnJlYWs7CisJfQogCWRlZmF1bHQ6CiAJCS8qIGV4aXN0aW5nIHR1bmVyIGluc3RhbmNlICovCiAJCWZlLT50dW5lcl9wcml2ID0gcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1wcml2LmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtcHJpdi5oCmluZGV4IDc0YmViMjguLmU2YTgwYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLXByaXYuaApAQCAtMTM3LDE3ICsxMzcsMTcgQEAKICNkZWZpbmUgdGRhX3ByaW50ayhrZXJuLCBmbXQsIGFyZy4uLikgXAogCXByaW50ayhrZXJuICIlczogIiBmbXQsIF9fZnVuY19fLCAjI2FyZykKIAotI2RlZmluZSBkcHJpbnRrKGtlcm4sIGx2bCwgZm10LCBhcmcuLi4pIGRvIHtcCisjZGVmaW5lIHRkYV9kcHJpbnRrKGx2bCwgZm10LCBhcmcuLi4pIGRvIHtcCiAJaWYgKHRkYTE4MjcxX2RlYnVnICYgbHZsKSBcCi0JCXRkYV9wcmludGsoa2VybiwgZm10LCAjI2FyZyk7IH0gd2hpbGUgKDApCisJCXRkYV9wcmludGsoS0VSTl9ERUJVRywgZm10LCAjI2FyZyk7IH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgdGRhX2luZm8oZm10LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gICAgICAgICAgICAgIGZtdCwgIyNhcmcpCi0jZGVmaW5lIHRkYV93YXJuKGZtdCwgYXJnLi4uKSB0ZGFfcHJpbnRrKEtFUk5fV0FSTklORywgICAgICBmbXQsICMjYXJnKQotI2RlZmluZSB0ZGFfZXJyKGZtdCwgYXJnLi4uKSAgdGRhX3ByaW50ayhLRVJOX0VSUiwgICAgICAgICAgZm10LCAjI2FyZykKLSNkZWZpbmUgdGRhX2RiZyhmbXQsIGFyZy4uLikgIGRwcmludGsoS0VSTl9ERUJVRywgREJHX0lORk8sIGZtdCwgIyNhcmcpCi0jZGVmaW5lIHRkYV9tYXAoZm10LCBhcmcuLi4pICBkcHJpbnRrKEtFUk5fREVCVUcsIERCR19NQVAsICBmbXQsICMjYXJnKQotI2RlZmluZSB0ZGFfcmVnKGZtdCwgYXJnLi4uKSAgZHByaW50ayhLRVJOX0RFQlVHLCBEQkdfUkVHLCAgZm10LCAjI2FyZykKLSNkZWZpbmUgdGRhX2NhbChmbXQsIGFyZy4uLikgIGRwcmludGsoS0VSTl9ERUJVRywgREJHX0NBTCwgIGZtdCwgIyNhcmcpCisjZGVmaW5lIHRkYV9pbmZvKGZtdCwgYXJnLi4uKSAgICAgcHJpbnRrKEtFUk5fSU5GTyAgICAgZm10LCAjI2FyZykKKyNkZWZpbmUgdGRhX3dhcm4oZm10LCBhcmcuLi4pIHRkYV9wcmludGsoS0VSTl9XQVJOSU5HLCBmbXQsICMjYXJnKQorI2RlZmluZSB0ZGFfZXJyKGZtdCwgYXJnLi4uKSAgdGRhX3ByaW50ayhLRVJOX0VSUiwgICAgIGZtdCwgIyNhcmcpCisjZGVmaW5lIHRkYV9kYmcoZm10LCBhcmcuLi4pICB0ZGFfZHByaW50ayhEQkdfSU5GTywgICAgZm10LCAjI2FyZykKKyNkZWZpbmUgdGRhX21hcChmbXQsIGFyZy4uLikgIHRkYV9kcHJpbnRrKERCR19NQVAsICAgICBmbXQsICMjYXJnKQorI2RlZmluZSB0ZGFfcmVnKGZtdCwgYXJnLi4uKSAgdGRhX2RwcmludGsoREJHX1JFRywgICAgIGZtdCwgIyNhcmcpCisjZGVmaW5lIHRkYV9jYWwoZm10LCBhcmcuLi4pICB0ZGFfZHByaW50ayhEQkdfQ0FMLCAgICAgZm10LCAjI2FyZykKIAogI2RlZmluZSB0ZGFfZmFpbChyZXQpCQkJCQkJCSAgICAgXAogKHsJCQkJCQkJCQkgICAgIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS5oIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmgKaW5kZXggNTNhOTg5Mi4uNzFiYWM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmgKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmgKQEAgLTc3LDYgKzc3LDkgQEAKIAkvKiB1c2UgaTJjIGdhdGUgcHJvdmlkZWQgYnkgYW5hbG9nIG9yIGRpZ2l0YWwgZGVtb2QgKi8KIAllbnVtIHRkYTE4MjcxX2kyY19nYXRlIGdhdGU7CiAKKwkvKiBmb3JjZSByZiB0cmFja2luZyBmaWx0ZXIgY2FsaWJyYXRpb24gb24gc3RhcnR1cCAqLworCXVuc2lnbmVkIGludCByZl9jYWxfb25fc3RhcnR1cDoxOworCiAJLyogc29tZSBpMmMgcHJvdmlkZXJzIGNhbnQgd3JpdGUgYWxsIDM5IHJlZ2lzdGVycyBhdCBvbmNlICovCiAJdW5zaWduZWQgaW50IHNtYWxsX2kyYzoxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItc2ltcGxlLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItc2ltcGxlLmMKaW5kZXggMTQ5ZDU0Yy4uOGFiYmNjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXNpbXBsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci1zaW1wbGUuYwpAQCAtMTQ0LDYgKzE0NCw4IEBACiAJY2FzZSBUVU5FUl9MR19OVFNDX1RBUEU6CiAJY2FzZSBUVU5FUl9UQ0xfTUYwMkdJUF81TjoKIAkJcmV0dXJuICgoc3RhdHVzICYgVFVORVJfU0lHTkFMKSA9PSBUVU5FUl9TVEVSRU9fTUszKTsKKwljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjE2TUs1OgorCQlyZXR1cm4gc3RhdHVzIHwgVFVORVJfU1RFUkVPOwogCWRlZmF1bHQ6CiAJCXJldHVybiBzdGF0dXMgJiBUVU5FUl9TVEVSRU87CiAJfQpAQCAtNTA4LDYgKzUxMCwxMCBAQAogCWNhc2UgVFVORVJfVENMX01GMDJHSVBfNU46CiAJCWJ1ZmZlclszXSA9IDB4MTk7CiAJCWJyZWFrOworCWNhc2UgVFVORVJfUEhJTElQU19GTTEyMTZNSzU6CisJCWJ1ZmZlclsyXSA9IDB4ODg7CisJCWJ1ZmZlclszXSA9IDB4MDk7CisJCWJyZWFrOwogCWNhc2UgVFVORVJfVE5GXzUzMzVNRjoKIAkJYnVmZmVyWzNdID0gMHgxMTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCmluZGV4IDZhN2YxYTQuLjVjNmVmMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCkBAIC0xMzAxLDYgKzEzMDEsMjUgQEAKIAl9LAogfTsKIAorLyogLS0tLS0gVFVORVJfUEFSVFNOSUNfUFRJXzVORjA1IC0gUGFydHNuaWMgKERhZXdvbykgUFRJLTVORjA1IE5UU0MgLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9wYXJ0c25pY19wdGlfNW5mMDVfcmFuZ2VzW10gPSB7CisJLyogVGhlIGRhdGFzaGVldCBzcGVjaWZpZWQgY2hhbm5lbCByYW5nZXMgYW5kIHRoZSBiYW5kc3dpdGNoIGJ5dGUgKi8KKwkvKiBUaGUgY29udHJvbCBieXRlIHZhbHVlIG9mIDB4OGUgaXMganVzdCBhIGd1ZXNzICovCisJeyAxNiAqIDEzMy4yNSAvKk1IeiovLCAweDhlLCAweDAxLCB9LCAvKiBDaGFubmVscyAgICAyIC0gICAgQiAqLworCXsgMTYgKiAzNjcuMjUgLypNSHoqLywgMHg4ZSwgMHgwMiwgfSwgLyogQ2hhbm5lbHMgICAgQyAtIFcrMTEgKi8KKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MDgsIH0sIC8qIENoYW5uZWxzIFcrMTIgLSAgIDY5ICovCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9wYXJ0c25pY19wdGlfNW5mMDVfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfcGFydHNuaWNfcHRpXzVuZjA1X3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGFydHNuaWNfcHRpXzVuZjA1X3JhbmdlcyksCisJCS5jYl9maXJzdF9pZl9sb3dlcl9mcmVxID0gMSwgLyogbm90IHNwZWNpZmllZCBidXQgc2FmZSB0byBkbyAqLworCX0sCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHR1bmVydHlwZSB0dW5lcnNbXSA9IHsKQEAgLTE3NTMsNiArMTc3MiwxMiBAQAogCQkucGFyYW1zID0gdHVuZXJfZnExMjE2bG1lX21rM19wYXJhbXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2ZxMTIxNmxtZV9tazNfcGFyYW1zKSwKIAl9LAorCisJW1RVTkVSX1BBUlRTTklDX1BUSV81TkYwNV0gPSB7CisJCS5uYW1lID0gIlBhcnRzbmljIChEYWV3b28pIFBUSS01TkYwNSIsCisJCS5wYXJhbXMgPSB0dW5lcl9wYXJ0c25pY19wdGlfNW5mMDVfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9wYXJ0c25pY19wdGlfNW5mMDVfcGFyYW1zKSwKKwl9LAogfTsKIEVYUE9SVF9TWU1CT0wodHVuZXJzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKaW5kZXggYjAxOTg2OS4uMWQwZTRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCkBAIC0yLDYgKzIsMTkgQEAKICMgRFZCIGRldmljZSBjb25maWd1cmF0aW9uCiAjCiAKK2NvbmZpZyBEVkJfTUFYX0FEQVBURVJTCisJaW50ICJtYXhpbXVtIG51bWJlciBvZiBEVkIvQVRTQyBhZGFwdGVycyIKKwlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVmYXVsdCA4CisJcmFuZ2UgMSAyNTUKKwloZWxwCisJICBNYXhpbXVtIG51bWJlciBvZiBEVkIvQVRTQyBhZGFwdGVycy4gSW5jcmVhc2luZyB0aGlzIG51bWJlcgorCSAgaW5jcmVhc2VzIHRoZSBtZW1vcnkgY29uc3VtcHRpb24gb2YgdGhlIERWQiBzdWJzeXN0ZW0gZXZlbgorCSAgaWYgYSBtdWNoIGxvd2VyIG51bWJlciBvZiBEVkIvQVRTQyBhZGFwdGVycyBpcyBwcmVzZW50LgorCSAgT25seSB2YWx1ZXMgaW4gdGhlIHJhbmdlIDQtMzIgYXJlIHRlc3RlZC4KKworCSAgSWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgdGhpcywgdXNlIHRoZSBkZWZhdWx0IHZhbHVlIDgKKwogY29uZmlnIERWQl9EWU5BTUlDX01JTk9SUwogCWJvb2wgIkR5bmFtaWMgRFZCIG1pbm9yIGFsbG9jYXRpb24iCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZmUtdHVuZXIuYwppbmRleCA5YTYzMDdhLi44NTBhNmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZmUtdHVuZXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZmUtdHVuZXIuYwpAQCAtNjYsNyArNjYsNyBAQAogI2VuZGlmCiAKIC8qIFNreVN0YXIyIERWQi1TIHJldiAyLjMgKi8KLSNpZiBGRV9TVVBQT1JURUQoTVQzMTIpCisjaWYgRkVfU1VQUE9SVEVEKE1UMzEyKSAmJiBGRV9TVVBQT1JURUQoUExMKQogc3RhdGljIGludCBmbGV4Y29wX3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKIHsKIC8qIHUxNiB3el9oYWxmX3BlcmlvZF9mb3JfNDVfbWh6W10gPSB7IDB4MDFmZiwgMHgwMTU0LCAweDAwZmYsIDB4MDBjYyB9OyAqLwpAQCAtMTU1LDU1ICsxNTUsMzQgQEAKIAkuZGVtb2RfYWRkcmVzcyA9IDB4MGUsCiB9OwogCi1zdGF0aWMgaW50IHNreXN0YXIyM19zYW1zdW5nX3RiZHUxODEzMl90dW5lcl9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAotCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQotewotCXU4IGJ1Zls0XTsKLQl1MzIgZGl2OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDYxLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLAotCS5sZW4gPSBzaXplb2YoYnVmKSB9OwotCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBmZS0+ZHZiLT5wcml2OwotCWRpdiA9IChwYXJhbXMtPmZyZXF1ZW5jeSArICgxMjUvMikpIC8gMTI1OwotCi0JYnVmWzBdID0gKGRpdiA+PiA4KSAmIDB4N2Y7Ci0JYnVmWzFdID0gKGRpdiA+PiAwKSAmIDB4ZmY7Ci0JYnVmWzJdID0gMHg4NCB8ICgoZGl2ID4+IDEwKSAmIDB4NjApOwotCWJ1ZlszXSA9IDB4ODA7Ci0KLQlpZiAocGFyYW1zLT5mcmVxdWVuY3kgPCAxNTUwMDAwKQotCQlidWZbM10gfD0gMHgwMjsKLQotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaWYgKGkyY190cmFuc2ZlcigmZmMtPmZjX2kyY19hZGFwWzBdLmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBza3lzdGFyMl9yZXYyM19hdHRhY2goc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyAqb3BzOworCiAJZmMtPmZlID0gZHZiX2F0dGFjaChtdDMxMl9hdHRhY2gsICZza3lzdGFyMjNfc2Ftc3VuZ190YmR1MTgxMzJfY29uZmlnLCBpMmMpOwotCWlmIChmYy0+ZmUgIT0gTlVMTCkgewotCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyAqb3BzID0gJmZjLT5mZS0+b3BzOwotCQlvcHMtPnR1bmVyX29wcy5zZXRfcGFyYW1zICAgPQotCQkJc2t5c3RhcjIzX3NhbXN1bmdfdGJkdTE4MTMyX3R1bmVyX3NldF9wYXJhbXM7Ci0JCW9wcy0+ZGlzZXFjX3NlbmRfbWFzdGVyX2NtZCA9IGZsZXhjb3BfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZDsKLQkJb3BzLT5kaXNlcWNfc2VuZF9idXJzdCAgICAgID0gZmxleGNvcF9kaXNlcWNfc2VuZF9idXJzdDsKLQkJb3BzLT5zZXRfdG9uZSAgICAgICAgICAgICAgID0gZmxleGNvcF9zZXRfdG9uZTsKLQkJb3BzLT5zZXRfdm9sdGFnZSAgICAgICAgICAgID0gZmxleGNvcF9zZXRfdm9sdGFnZTsKLQkJZmMtPmZlX3NsZWVwICAgICAgICAgICAgICAgID0gb3BzLT5zbGVlcDsKLQkJb3BzLT5zbGVlcCAgICAgICAgICAgICAgICAgID0gZmxleGNvcF9zbGVlcDsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOworCWlmICghZmMtPmZlKQorCQlyZXR1cm4gMDsKKworCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmMtPmZlLCAweDYxLCBpMmMsCisJCQlEVkJfUExMX1NBTVNVTkdfVEJEVTE4MTMyKSkKKwkJcmV0dXJuIDA7CisKKwlvcHMgPSAmZmMtPmZlLT5vcHM7CisJb3BzLT5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kID0gZmxleGNvcF9kaXNlcWNfc2VuZF9tYXN0ZXJfY21kOworCW9wcy0+ZGlzZXFjX3NlbmRfYnVyc3QgICAgICA9IGZsZXhjb3BfZGlzZXFjX3NlbmRfYnVyc3Q7CisJb3BzLT5zZXRfdG9uZSAgICAgICAgICAgICAgID0gZmxleGNvcF9zZXRfdG9uZTsKKwlvcHMtPnNldF92b2x0YWdlICAgICAgICAgICAgPSBmbGV4Y29wX3NldF92b2x0YWdlOworCWZjLT5mZV9zbGVlcCAgICAgICAgICAgICAgICA9IG9wcy0+c2xlZXA7CisJb3BzLT5zbGVlcCAgICAgICAgICAgICAgICAgID0gZmxleGNvcF9zbGVlcDsKKwlyZXR1cm4gMTsKIH0KICNlbHNlCiAjZGVmaW5lIHNreXN0YXIyX3JldjIzX2F0dGFjaCBOVUxMCiAjZW5kaWYKIAogLyogU2t5U3RhcjIgRFZCLVMgcmV2IDIuNiAqLwotI2lmIEZFX1NVUFBPUlRFRChTVFYwMjk5KQorI2lmIEZFX1NVUFBPUlRFRChTVFYwMjk5KSAmJiBGRV9TVVBQT1JURUQoUExMKQogc3RhdGljIGludCBzYW1zdW5nX3RibXUyNDExMl9zZXRfc3ltYm9sX3JhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJdTMyIHNyYXRlLCB1MzIgcmF0aW8pCiB7CkBAIC0yMzIsMzEgKzIxMSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Ftc3VuZ190Ym11MjQxMTJfdHVuZXJfc2V0X3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKLXsKLQl1OCBidWZbNF07Ci0JdTMyIGRpdjsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7Ci0JLmFkZHIgPSAweDYxLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gc2l6ZW9mKGJ1ZikgfTsKLQlzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjID0gZmUtPmR2Yi0+cHJpdjsKLQlkaXYgPSBwYXJhbXMtPmZyZXF1ZW5jeSAvIDEyNTsKLQotCWJ1ZlswXSA9IChkaXYgPj4gOCkgJiAweDdmOwotCWJ1ZlsxXSA9IGRpdiAmIDB4ZmY7Ci0JYnVmWzJdID0gMHg4NDsgLyogMHhDNCAqLwotCWJ1ZlszXSA9IDB4MDg7Ci0KLQlpZiAocGFyYW1zLT5mcmVxdWVuY3kgPCAxNTAwMDAwKQotCQlidWZbM10gfD0gMHgxMDsKLQotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaWYgKGkyY190cmFuc2ZlcigmZmMtPmZjX2kyY19hZGFwWzBdLmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHU4IHNhbXN1bmdfdGJtdTI0MTEyX2luaXR0YWJbXSA9IHsKIAkweDAxLCAweDE1LAogCTB4MDIsIDB4MzAsCkBAIC0zMTgsMTUgKzI3MiwxOCBAQAogCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewogCWZjLT5mZSA9IGR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsICZzYW1zdW5nX3RibXUyNDExMl9jb25maWcsIGkyYyk7Ci0JaWYgKGZjLT5mZSAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzICpvcHMgID0gJmZjLT5mZS0+b3BzOwotCQlvcHMtPnR1bmVyX29wcy5zZXRfcGFyYW1zID0gc2Ftc3VuZ190Ym11MjQxMTJfdHVuZXJfc2V0X3BhcmFtczsKLQkJb3BzLT5zZXRfdm9sdGFnZSA9IGZsZXhjb3Bfc2V0X3ZvbHRhZ2U7Ci0JCWZjLT5mZV9zbGVlcCA9IG9wcy0+c2xlZXA7Ci0JCW9wcy0+c2xlZXAgPSBmbGV4Y29wX3NsZWVwOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7CisJaWYgKCFmYy0+ZmUpCisJCXJldHVybiAwOworCisJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmYy0+ZmUsIDB4NjEsIGkyYywKKwkJCURWQl9QTExfU0FNU1VOR19UQk1VMjQxMTIpKQorCQlyZXR1cm4gMDsKKworCWZjLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZmxleGNvcF9zZXRfdm9sdGFnZTsKKwlmYy0+ZmVfc2xlZXAgPSBmYy0+ZmUtPm9wcy5zbGVlcDsKKwlmYy0+ZmUtPm9wcy5zbGVlcCA9IGZsZXhjb3Bfc2xlZXA7CisJcmV0dXJuIDE7CisKIH0KICNlbHNlCiAjZGVmaW5lIHNreXN0YXIyX3JldjI2X2F0dGFjaCBOVUxMCkBAIC00MjEsNyArMzc4LDcgQEAKIAlpZiAoIWZjLT5mZSkKIAkJcmV0dXJuIDA7CiAKLQlpMmNfdHVuZXIgPSBjeDI0MTIzX2dldF90dW5lcl9pMmNfYWRhcHRlcihmYy0+ZmUpOzsKKwlpMmNfdHVuZXIgPSBjeDI0MTIzX2dldF90dW5lcl9pMmNfYWRhcHRlcihmYy0+ZmUpOwogCWlmICghaTJjX3R1bmVyKQogCQlyZXR1cm4gMDsKIApAQCAtNDQ5LDcgKzQwNiw3IEBACiAjZW5kaWYKIAogLyogQWlyU3RhciBEVkItVCAqLwotI2lmIEZFX1NVUFBPUlRFRChNVDM1MikKKyNpZiBGRV9TVVBQT1JURUQoTVQzNTIpICYmIEZFX1NVUFBPUlRFRChQTEwpCiBzdGF0aWMgaW50IHNhbXN1bmdfdGR0YzkyNTFkaDBfZGVtb2RfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdGF0aWMgdTggbXQzNTJfY2xvY2tfY29uZmlnW10gPSB7IDB4ODksIDB4MTgsIDB4MmQgfTsKQEAgLTQ2NywzMiArNDI0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYW1zdW5nX3RkdGM5MjUxZGgwX2NhbGNfcmVncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywgdTgqIHBsbGJ1ZiwgaW50IGJ1Zl9sZW4pCi17Ci0JdTMyIGRpdjsKLQl1bnNpZ25lZCBjaGFyIGJzID0gMDsKLQotCWlmIChidWZfbGVuIDwgNSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLSNkZWZpbmUgSUZfRlJFUVVFTkNZeDYgMjE3ICAgIC8qIDYgKiAzNi4xNjY2NjY2NjY2N01IeiAqLwotCWRpdiA9ICgoKHBhcmFtcy0+ZnJlcXVlbmN5ICsgODMzMzMpICogMykgLyA1MDAwMDApICsgSUZfRlJFUVVFTkNZeDY7Ci0JaWYgKHBhcmFtcy0+ZnJlcXVlbmN5ID49IDQ4MDAwMDAwICYmIHBhcmFtcy0+ZnJlcXVlbmN5IDw9IDE1NDAwMDAwMCkgXAotCQlicyA9IDB4MDk7Ci0JaWYgKHBhcmFtcy0+ZnJlcXVlbmN5ID49IDE2MTAwMDAwMCAmJiBwYXJhbXMtPmZyZXF1ZW5jeSA8PSA0MzkwMDAwMDApIFwKLQkJYnMgPSAweDBhOwotCWlmIChwYXJhbXMtPmZyZXF1ZW5jeSA+PSA0NDcwMDAwMDAgJiYgcGFyYW1zLT5mcmVxdWVuY3kgPD0gODYzMDAwMDAwKSBcCi0JCWJzID0gMHgwODsKLQotCXBsbGJ1ZlswXSA9IDB4NjE7Ci0JcGxsYnVmWzFdID0gZGl2ID4+IDg7Ci0JcGxsYnVmWzJdID0gZGl2ICYgMHhmZjsKLQlwbGxidWZbM10gPSAweGNjOwotCXBsbGJ1Zls0XSA9IGJzOwotCXJldHVybiA1OwotfQotCiBzdGF0aWMgc3RydWN0IG10MzUyX2NvbmZpZyBzYW1zdW5nX3RkdGM5MjUxZGgwX2NvbmZpZyA9IHsKIAkuZGVtb2RfYWRkcmVzcyA9IDB4MGYsCiAJLmRlbW9kX2luaXQgICAgPSBzYW1zdW5nX3RkdGM5MjUxZGgwX2RlbW9kX2luaXQsCkBAIC01MDIsMTEgKzQzMywxMSBAQAogCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewogCWZjLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmc2Ftc3VuZ190ZHRjOTI1MWRoMF9jb25maWcsIGkyYyk7Ci0JaWYgKGZjLT5mZSAhPSBOVUxMKSB7Ci0JCWZjLT5mZS0+b3BzLnR1bmVyX29wcy5jYWxjX3JlZ3MgPSBzYW1zdW5nX3RkdGM5MjUxZGgwX2NhbGNfcmVnczsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOworCWlmICghZmMtPmZlKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAhIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZjLT5mZSwgMHg2MSwgTlVMTCwKKwkJCSAgICBEVkJfUExMX1NBTVNVTkdfVERUQzkyNTFESDApOwogfQogI2Vsc2UKICNkZWZpbmUgYWlyc3Rhcl9kdmJ0X2F0dGFjaCBOVUxMCkBAIC01ODAsNTQgKzUxMSw3IEBACiAjZW5kaWYKIAogLyogQ2FibGVTdGFyMiBEVkItQyAqLwotI2lmIEZFX1NVUFBPUlRFRChTVFYwMjk3KQotc3RhdGljIGludCBhbHBzX3RkZWU0X3N0djAyOTdfdHVuZXJfc2V0X3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKLQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCi17Ci0Jc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyA9IGZlLT5kdmItPnByaXY7Ci0JdTggYnVmWzRdOwotCXUxNiBkaXY7Ci0JaW50IHJldDsKLQotLyogNjIuNSBrSHogKiAxMCAqLwotI2RlZmluZSBSRUZfRlJFUSAgICA2MjUKLSNkZWZpbmUgRlJFUV9PRkZTRVQgMzYxMjUKLQotCWRpdiA9ICgoZmVwLT5mcmVxdWVuY3kvMTAwMCArIEZSRVFfT0ZGU0VUKSAqIDEwKSAvIFJFRl9GUkVROwotLyogNCBNSHogPSA0MDAwIEtIeiAqLwotCi0JYnVmWzBdID0gKHU4KSggZGl2ID4+IDgpICYgMHg3ZjsKLQlidWZbMV0gPSAodTgpICAgICAgICBkaXYgJiAweGZmOwotCi0vKiBGKG9zYykgPSBOICogUmVmZXJlbmNlIEZyZXEuICg2Mi41IGtIeikKLSAqIGJ5dGUgMiA6ICAwIE4xNCBOMTMgTjEyIE4xMSBOMTAgTjkgIE44Ci0gKiBieXRlIDMgOiBONyBONiAgTjUgIE40ICBOMyAgTjIgIE4xICBOMAotICogYnl0ZSA0IDogMSAgKiAgICogICBBR0QgUjMgIFIyICBSMSAgUjAKLSAqIGJ5dGUgNSA6IEMxICogICBSRSAgUlRTIEJTNCBCUzMgQlMyIEJTMQotICogQUdEID0gMSwgUjMgUjIgUjEgUjAgPSAwIDEgMCAxID0+IGJ5dGUgNCA9IDEqKjEwMTAxID0gMHg5NSAqLwotCWJ1ZlsyXSA9IDB4OTU7Ci0KLS8qIFJhbmdlKE1IeikgIEMxICogIFJFIFJUUyBCUzQgQlMzIEJTMiBCUzEgIEJ5dGUgNQotICogIDQ3IC0gMTUzICAgMCAgKiAgMCAgIDAgICAwICAgMCAgIDAgICAxICAgMHgwMQotICogMTUzIC0gNDMwICAgMCAgKiAgMCAgIDAgICAwICAgMCAgIDEgICAwICAgMHgwMgotICogNDMwIC0gODIyICAgMCAgKiAgMCAgIDAgICAxICAgMCAgIDAgICAwICAgMHgwOAotICogODIyIC0gODYyICAgMSAgKiAgMCAgIDAgICAxICAgMCAgIDAgICAwICAgMHg4OCAqLwotCi0JICAgICBpZiAoZmVwLT5mcmVxdWVuY3kgPD0gMTUzMDAwMDAwKSBidWZbM10gPSAweDAxOwotCWVsc2UgaWYgKGZlcC0+ZnJlcXVlbmN5IDw9IDQzMDAwMDAwMCkgYnVmWzNdID0gMHgwMjsKLQllbHNlIGlmIChmZXAtPmZyZXF1ZW5jeSA8PSA4MjIwMDAwMDApIGJ1ZlszXSA9IDB4MDg7Ci0JZWxzZSBidWZbM10gPSAweDg4OwotCi0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKLQlkZWJfdHVuZXIoInR1bmVyIGJ1ZmZlciBmb3IgJWQgSHo6ICV4ICV4ICV4ICV4XG4iLCBmZXAtPmZyZXF1ZW5jeSwKLQlidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10pOwotCXJldCA9IGZjLT5pMmNfcmVxdWVzdCgmZmMtPmZjX2kyY19hZGFwWzJdLAotCQkJRkNfV1JJVEUsIDB4NjEsIGJ1ZlswXSwgJmJ1ZlsxXSwgMyk7Ci0JZGViX3R1bmVyKCJ0dW5lciB3cml0ZSByZXR1cm5lZDogJWRcbiIscmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCisjaWYgRkVfU1VQUE9SVEVEKFNUVjAyOTcpICYmIEZFX1NVUFBPUlRFRChQTEwpCiBzdGF0aWMgdTggYWxwc190ZGVlNF9zdHYwMjk3X2luaXR0YWJbXSA9IHsKIAkweDgwLCAweDAxLAogCTB4ODAsIDB4MDAsCkBAIC03MTEsMTMgKzU5NSwyNSBAQAogewogCWZjLT5mY19pMmNfYWRhcFswXS5ub19iYXNlX2FkZHIgPSAxOwogCWZjLT5mZSA9IGR2Yl9hdHRhY2goc3R2MDI5N19hdHRhY2gsICZhbHBzX3RkZWU0X3N0djAyOTdfY29uZmlnLCBpMmMpOwotCWlmICghZmMtPmZlKSB7Ci0JCS8qIFJlc2V0IGZvciBuZXh0IGZyb250ZW5kIHRvIHRyeSAqLwotCQlmYy0+ZmNfaTJjX2FkYXBbMF0ubm9fYmFzZV9hZGRyID0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCWZjLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gYWxwc190ZGVlNF9zdHYwMjk3X3R1bmVyX3NldF9wYXJhbXM7CisJaWYgKCFmYy0+ZmUpCisJCWdvdG8gZmFpbDsKKworCS8qIFRoaXMgdHVuZXIgZG9lc24ndCB1c2UgdGhlIHN0djAyOTcncyBJMkMgZ2F0ZSwgYnV0IGluc3RlYWQgdGhlCisJICogdHVuZXIgaXMgY29ubmVjdGVkIHRvIGEgZGlmZmVyZW50IGZsZXhjb3AgSTJDIGFkYXB0ZXIuICAqLworCWlmIChmYy0+ZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmYy0+ZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZjLT5mZSwgMCk7CisJZmMtPmZlLT5vcHMuaTJjX2dhdGVfY3RybCA9IE5VTEw7CisKKwlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZjLT5mZSwgMHg2MSwKKwkJCSZmYy0+ZmNfaTJjX2FkYXBbMl0uaTJjX2FkYXAsIERWQl9QTExfVERFRTQpKQorCQlnb3RvIGZhaWw7CisKIAlyZXR1cm4gMTsKKworZmFpbDoKKwkvKiBSZXNldCBmb3IgbmV4dCBmcm9udGVuZCB0byB0cnkgKi8KKwlmYy0+ZmNfaTJjX2FkYXBbMF0ubm9fYmFzZV9hZGRyID0gMDsKKwlyZXR1cm4gMDsKIH0KICNlbHNlCiAjZGVmaW5lIGNhYmxlc3RhcjJfYXR0YWNoIE5VTEwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMKaW5kZXggZmVjMWQ3Ny4uOTEzNTNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMKQEAgLTEwNTksNyArMTA1OSw3IEBACiAJCWRwcmludGsodmVyYm9zZSwgRFNUX0VSUk9SLCAxLCAiRFNUIHR5cGUgaGFzIFRTPTE4OCIpOwogCX0KIAlpZiAoc3RhdGUtPmJvYXJkX2luZm9bMF0gPT0gMHhiYykgewotCQlpZiAoc3RhdGUtPnR5cGVfZmxhZ3MgIT0gRFNUX1RZUEVfSVNfQVRTQykKKwkJaWYgKHN0YXRlLT5kc3RfdHlwZSAhPSBEU1RfVFlQRV9JU19BVFNDKQogCQkJc3RhdGUtPnR5cGVfZmxhZ3MgfD0gRFNUX1RZUEVfSEFTX1RTMTg4OwogCQllbHNlCiAJCQlzdGF0ZS0+dHlwZV9mbGFncyB8PSBEU1RfVFlQRV9IQVNfTkVXVFVORV8yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCmluZGV4IDRkYmQ3ZDQuLjJkMDk5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKQEAgLTQ0LDYgKzQ0LDE0IEBACiAjaW5jbHVkZSAiY3gyNDExNi5oIgogI2luY2x1ZGUgInowMTk0YS5oIgogCisjZGVmaW5lIFVOU0VUICgtMVUpCisKKyNkZWZpbmUgRE0xMTA1X0JPQVJEX05PQVVUTwkJVU5TRVQKKyNkZWZpbmUgRE0xMTA1X0JPQVJEX1VOS05PV04JCTAKKyNkZWZpbmUgRE0xMTA1X0JPQVJEX0RWQldPUkxEXzIwMDIJMQorI2RlZmluZSBETTExMDVfQk9BUkRfRFZCV09STERfMjAwNAkyCisjZGVmaW5lIERNMTEwNV9CT0FSRF9BWEVTU19ETTA1CQkzCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgogICogUENJIElEJ3MKQEAgLTE1MywyMCArMTYxLDEwNSBAQAogCiAvKiBHUElPJ3MgZm9yIExOQiBwb3dlciBjb250cm9sICovCiAjZGVmaW5lIERNMTEwNV9MTkJfTUFTSwkJCQkweDAwMDAwMDAwCisjZGVmaW5lIERNMTEwNV9MTkJfT0ZGCQkJCTB4MDAwMjAwMDAKICNkZWZpbmUgRE0xMTA1X0xOQl8xM1YJCQkJMHgwMDAxMDEwMAogI2RlZmluZSBETTExMDVfTE5CXzE4VgkJCQkweDAwMDAwMTAwCiAKIC8qIEdQSU8ncyBmb3IgTE5CIHBvd2VyIGNvbnRyb2wgZm9yIEF4ZXNzIERNMDUgKi8KICNkZWZpbmUgRE0wNV9MTkJfTUFTSwkJCQkweDAwMDAwMDAwCisjZGVmaW5lIERNMDVfTE5CX09GRgkJCQkweDAwMDIwMDAwLyogYWN0dWFsbHkgMTN2ICovCiAjZGVmaW5lIERNMDVfTE5CXzEzVgkJCQkweDAwMDIwMDAwCiAjZGVmaW5lIERNMDVfTE5CXzE4VgkJCQkweDAwMDMwMDAwCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FyZFtdICA9IHtbMCAuLi4gM10gPSBVTlNFVCB9OworbW9kdWxlX3BhcmFtX2FycmF5KGNhcmQsICBpbnQsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhjYXJkLCAiY2FyZCB0eXBlIik7CisKIHN0YXRpYyBpbnQgaXJfZGVidWc7CiBtb2R1bGVfcGFyYW0oaXJfZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlyX2RlYnVnLCAiZW5hYmxlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgSVIgZGVjb2RpbmciKTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBkbTExMDVfZGV2Y291bnQ7CisKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCitzdHJ1Y3QgZG0xMTA1X2JvYXJkIHsKKwljaGFyICAgICAgICAgICAgICAgICAgICAqbmFtZTsKK307CisKK3N0cnVjdCBkbTExMDVfc3ViaWQgeworCXUxNiAgICAgc3VidmVuZG9yOworCXUxNiAgICAgc3ViZGV2aWNlOworCXUzMiAgICAgY2FyZDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG0xMTA1X2JvYXJkIGRtMTEwNV9ib2FyZHNbXSA9IHsKKwlbRE0xMTA1X0JPQVJEX1VOS05PV05dID0geworCQkubmFtZQkJPSAiVU5LTk9XTi9HRU5FUklDIiwKKwl9LAorCVtETTExMDVfQk9BUkRfRFZCV09STERfMjAwMl0gPSB7CisJCS5uYW1lCQk9ICJEVkJXb3JsZCBQQ0kgMjAwMiIsCisJfSwKKwlbRE0xMTA1X0JPQVJEX0RWQldPUkxEXzIwMDRdID0geworCQkubmFtZQkJPSAiRFZCV29ybGQgUENJIDIwMDQiLAorCX0sCisJW0RNMTEwNV9CT0FSRF9BWEVTU19ETTA1XSA9IHsKKwkJLm5hbWUJCT0gIkF4ZXNzL0Vhc3lUdiBETTA1IiwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbTExMDVfc3ViaWQgZG0xMTA1X3N1Ymlkc1tdID0geworCXsKKwkJLnN1YnZlbmRvciA9IDB4MDAwMCwKKwkJLnN1YmRldmljZSA9IDB4MjAwMiwKKwkJLmNhcmQgICAgICA9IERNMTEwNV9CT0FSRF9EVkJXT1JMRF8yMDAyLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDAwMSwKKwkJLnN1YmRldmljZSA9IDB4MjAwMiwKKwkJLmNhcmQgICAgICA9IERNMTEwNV9CT0FSRF9EVkJXT1JMRF8yMDAyLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDAwMCwKKwkJLnN1YmRldmljZSA9IDB4MjAwNCwKKwkJLmNhcmQgICAgICA9IERNMTEwNV9CT0FSRF9EVkJXT1JMRF8yMDA0LAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDAwMSwKKwkJLnN1YmRldmljZSA9IDB4MjAwNCwKKwkJLmNhcmQgICAgICA9IERNMTEwNV9CT0FSRF9EVkJXT1JMRF8yMDA0LAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MTk1ZCwKKwkJLnN1YmRldmljZSA9IDB4MTEwNSwKKwkJLmNhcmQgICAgICA9IERNMTEwNV9CT0FSRF9BWEVTU19ETTA1LAorCX0sCit9OworCitzdGF0aWMgdm9pZCBkbTExMDVfY2FyZF9saXN0KHN0cnVjdCBwY2lfZGV2ICpwY2kpCit7CisJaW50IGk7CisKKwlpZiAoMCA9PSBwY2ktPnN1YnN5c3RlbV92ZW5kb3IgJiYKKwkJCTAgPT0gcGNpLT5zdWJzeXN0ZW1fZGV2aWNlKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImRtMTEwNTogWW91ciBib2FyZCBoYXMgbm8gdmFsaWQgUENJIFN1YnN5c3RlbSBJRFxuIgorCQkJImRtMTEwNTogYW5kIHRodXMgY2FuJ3QgYmUgYXV0b2RldGVjdGVkXG4iCisJCQkiZG0xMTA1OiBQbGVhc2UgcGFzcyBjYXJkPTxuPiBpbnNtb2Qgb3B0aW9uIHRvXG4iCisJCQkiZG0xMTA1OiB3b3JrYXJvdW5kIHRoYXQuICBSZWRpcmVjdCBjb21wbGFpbnRzIHRvXG4iCisJCQkiZG0xMTA1OiB0aGUgdmVuZG9yIG9mIHRoZSBUViBjYXJkLiAgQmVzdCByZWdhcmRzLFxuIgorCQkJImRtMTEwNTogLS0gdHV4XG4iKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJkbTExMDU6IFlvdXIgYm9hcmQgaXNuJ3Qga25vd24gKHlldCkgdG8gdGhlIGRyaXZlci5cbiIKKwkJCSJkbTExMDU6IFlvdSBjYW4gdHJ5IHRvIHBpY2sgb25lIG9mIHRoZSBleGlzdGluZ1xuIgorCQkJImRtMTEwNTogY2FyZCBjb25maWdzIHZpYSBjYXJkPTxuPiBpbnNtb2Qgb3B0aW9uLlxuIgorCQkJImRtMTEwNTogVXBkYXRpbmcgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG1pZ2h0IGhlbHBcbiIKKwkJCSJkbTExMDU6IGFzIHdlbGwuXG4iKTsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICJIZXJlIGlzIGEgbGlzdCBvZiB2YWxpZCBjaG9pY2VzIGZvciB0aGUgY2FyZD08bj4gIgorCQkgICAiaW5zbW9kIG9wdGlvbjpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRtMTEwNV9ib2FyZHMpOyBpKyspCisJCXByaW50ayhLRVJOX0VSUiAiZG0xMTA1OiAgICBjYXJkPSVkIC0+ICVzXG4iLAorCQkJCWksIGRtMTEwNV9ib2FyZHNbaV0ubmFtZSk7Cit9CisKIC8qIGluZnJhcmVkIHJlbW90ZSBjb250cm9sICovCiBzdHJ1Y3QgaW5mcmFyZWQgewogCXN0cnVjdCBpbnB1dF9kZXYJKmlucHV0X2RldjsKQEAgLTE5Myw2ICsyODYsOCBAQAogCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOwogCXN0cnVjdCBkdmJfbmV0IGR2Ym5ldDsKIAl1bnNpZ25lZCBpbnQgZnVsbF90c191c2VyczsKKwl1bnNpZ25lZCBpbnQgYm9hcmRucjsKKwlpbnQgbnI7CiAKIAkvKiBpMmMgKi8KIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7CkBAIC0yMTEsNyArMzA2LDYgQEAKIAl1bnNpZ25lZCBpbnQJUGFja2V0RXJyb3JDb3VudDsKIAl1bnNpZ25lZCBpbnQgZG1hcnN0OwogCXNwaW5sb2NrX3QgbG9jazsKLQogfTsKIAogI2RlZmluZSBkbV9pb19tZW0ocmVnKQkoKHVuc2lnbmVkIGxvbmcpKCZkbTExMDVkdmItPmlvX21lbVtyZWddKSkKQEAgLTMyNiwxNiArNDIwLDIwIEBACiBzdGF0aWMgaW50IGRtMTEwNWR2Yl9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQogewogCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IGZyb250ZW5kX3RvX2RtMTEwNWR2YihmZSk7Ci0JdTMyIGxuYl9tYXNrLCBsbmJfMTN2LCBsbmJfMTh2OworCXUzMiBsbmJfbWFzaywgbG5iXzEzdiwgbG5iXzE4diwgbG5iX29mZjsKIAotCXN3aXRjaCAoZG0xMTA1ZHZiLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKSB7Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX0RNMDU6CisJc3dpdGNoIChkbTExMDVkdmItPmJvYXJkbnIpIHsKKwljYXNlIERNMTEwNV9CT0FSRF9BWEVTU19ETTA1OgogCQlsbmJfbWFzayA9IERNMDVfTE5CX01BU0s7CisJCWxuYl9vZmYgPSBETTA1X0xOQl9PRkY7CiAJCWxuYl8xM3YgPSBETTA1X0xOQl8xM1Y7CiAJCWxuYl8xOHYgPSBETTA1X0xOQl8xOFY7CiAJCWJyZWFrOworCWNhc2UgRE0xMTA1X0JPQVJEX0RWQldPUkxEXzIwMDI6CisJY2FzZSBETTExMDVfQk9BUkRfRFZCV09STERfMjAwNDoKIAlkZWZhdWx0OgogCQlsbmJfbWFzayA9IERNMTEwNV9MTkJfTUFTSzsKKwkJbG5iX29mZiA9IERNMTEwNV9MTkJfT0ZGOwogCQlsbmJfMTN2ID0gRE0xMTA1X0xOQl8xM1Y7CiAJCWxuYl8xOHYgPSBETTExMDVfTE5CXzE4VjsKIAl9CkBAIC0zNDMsOCArNDQxLDEwIEBACiAJb3V0bChsbmJfbWFzaywgZG1faW9fbWVtKERNMTEwNV9HUElPQ1RSKSk7CiAJaWYgKHZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTgpCiAJCW91dGwobG5iXzE4diAsIGRtX2lvX21lbShETTExMDVfR1BJT1ZBTCkpOwotCWVsc2UKKwllbHNlIGlmICh2b2x0YWdlID09IFNFQ19WT0xUQUdFXzEzKQogCQlvdXRsKGxuYl8xM3YsIGRtX2lvX21lbShETTExMDVfR1BJT1ZBTCkpOworCWVsc2UKKwkJb3V0bChsbmJfb2ZmLCBkbV9pb19tZW0oRE0xMTA1X0dQSU9WQUwpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDc3LDcgKzU3Nyw3IEBACiBpbnQgX19kZXZpbml0IGRtMTEwNV9pcl9pbml0KHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNSkKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JSVJfS0VZVEFCX1RZUEUgKmlyX2NvZGVzID0gaXJfY29kZXNfZG0xMTA1X25lYzsKKwlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzID0gJmlyX2NvZGVzX2RtMTEwNV9uZWNfdGFibGU7CiAJaW50IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOwogCWludCBlcnIgPSAtRU5PTUVNOwogCkBAIC01ODksOCArNjg5LDggQEAKIHsKIAlpbnQgcmV0OwogCi0Jc3dpdGNoIChkbTExMDVkdmItPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpIHsKLQljYXNlIFBDSV9ERVZJQ0VfSURfRFcyMDA0OgorCXN3aXRjaCAoZG0xMTA1ZHZiLT5ib2FyZG5yKSB7CisJY2FzZSBETTExMDVfQk9BUkRfRFZCV09STERfMjAwNDoKIAkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCiAJCQljeDI0MTE2X2F0dGFjaCwgJnNlcml0X3NwMjYzM19jb25maWcsCiAJCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7CkBAIC01OTgsNiArNjk4LDggQEAKIAkJCWRtMTEwNWR2Yi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNWR2Yl9zZXRfdm9sdGFnZTsKIAogCQlicmVhazsKKwljYXNlIERNMTEwNV9CT0FSRF9EVkJXT1JMRF8yMDAyOgorCWNhc2UgRE0xMTA1X0JPQVJEX0FYRVNTX0RNMDU6CiAJZGVmYXVsdDoKIAkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCiAJCQlzdHYwMjk5X2F0dGFjaCwgJnNoYXJwX3owMTk0YV9jb25maWcsCkBAIC02NzYsMTEgKzc3OCwzMSBAQAogCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4OwogCXN0cnVjdCBkbXhfZGVtdXggKmRteDsKIAlpbnQgcmV0ID0gLUVOT01FTTsKKwlpbnQgaTsKIAogCWRtMTEwNWR2YiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbTExMDVkdmIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRtMTEwNWR2YikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwkvKiBib2FyZCBjb25maWcgKi8KKwlkbTExMDVkdmItPm5yID0gZG0xMTA1X2RldmNvdW50OworCWRtMTEwNWR2Yi0+Ym9hcmRuciA9IFVOU0VUOworCWlmIChjYXJkW2RtMTEwNWR2Yi0+bnJdIDwgQVJSQVlfU0laRShkbTExMDVfYm9hcmRzKSkKKwkJZG0xMTA1ZHZiLT5ib2FyZG5yID0gY2FyZFtkbTExMDVkdmItPm5yXTsKKwlmb3IgKGkgPSAwOyBVTlNFVCA9PSBkbTExMDVkdmItPmJvYXJkbnIgJiYKKwkJCQlpIDwgQVJSQVlfU0laRShkbTExMDVfc3ViaWRzKTsgaSsrKQorCQlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PQorCQkJZG0xMTA1X3N1Ymlkc1tpXS5zdWJ2ZW5kb3IgJiYKKwkJCQlwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09CisJCQkJCWRtMTEwNV9zdWJpZHNbaV0uc3ViZGV2aWNlKQorCQkJZG0xMTA1ZHZiLT5ib2FyZG5yID0gZG0xMTA1X3N1Ymlkc1tpXS5jYXJkOworCisJaWYgKFVOU0VUID09IGRtMTEwNWR2Yi0+Ym9hcmRucikgeworCQlkbTExMDVkdmItPmJvYXJkbnIgPSBETTExMDVfQk9BUkRfVU5LTk9XTjsKKwkJZG0xMTA1X2NhcmRfbGlzdChwZGV2KTsKKwl9CisKKwlkbTExMDVfZGV2Y291bnQrKzsKIAlkbTExMDVkdmItPnBkZXYgPSBwZGV2OwogCWRtMTEwNWR2Yi0+YnVmZmVyX3NpemUgPSA1ICogRE0xMTA1X0RNQV9CWVRFUzsKIAlkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQgPSAwOwpAQCAtODUzLDYgKzk3NSw3IEBACiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWRtMTEwNV9kZXZjb3VudC0tOwogCWtmcmVlKGRtMTEwNWR2Yik7CiB9CiAKQEAgLTg2MSwxNyArOTg0LDEyIEBACiAJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1RSSUdFTSwKIAkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfRE0xMTA1LAogCQkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKLQkJLnN1YmRldmljZSA9IFBDSV9ERVZJQ0VfSURfRFcyMDAyLAotCX0sIHsKLQkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfVFJJR0VNLAotCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9ETTExMDUsCi0JCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAotCQkuc3ViZGV2aWNlID0gUENJX0RFVklDRV9JRF9EVzIwMDQsCisJCS5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAogCX0sIHsKIAkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfQVhFU1MsCiAJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX0RNMDUsCi0JCS5zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0FYRVNTLAotCQkuc3ViZGV2aWNlID0gUENJX0RFVklDRV9JRF9ETTA1LAorCQkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCiAJfSwgewogCQkvKiBlbXB0eSAqLwogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCmluZGV4IDZkNjEyMWUuLjM3NTBmZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCkBAIC00MzAsNiArNDMwLDggQEAKIC8qIHN0b3AgZmVlZCBidXQgb25seSBtYXJrIHRoZSBzcGVjaWZpZWQgZmlsdGVyIGFzIHN0b3BwZWQgKHN0YXRlIHNldCkgKi8KIHN0YXRpYyBpbnQgZHZiX2RteGRldl9mZWVkX3N0b3Aoc3RydWN0IGRteGRldl9maWx0ZXIgKmRteGRldmZpbHRlcikKIHsKKwlzdHJ1Y3QgZG14ZGV2X2ZlZWQgKmZlZWQ7CisKIAlkdmJfZG14ZGV2X2ZpbHRlcl9zdGF0ZV9zZXQoZG14ZGV2ZmlsdGVyLCBETVhERVZfU1RBVEVfU0VUKTsKIAogCXN3aXRjaCAoZG14ZGV2ZmlsdGVyLT50eXBlKSB7CkBAIC00MzgsNyArNDQwLDggQEAKIAkJZG14ZGV2ZmlsdGVyLT5mZWVkLnNlYy0+c3RvcF9maWx0ZXJpbmcoZG14ZGV2ZmlsdGVyLT5mZWVkLnNlYyk7CiAJCWJyZWFrOwogCWNhc2UgRE1YREVWX1RZUEVfUEVTOgotCQlkbXhkZXZmaWx0ZXItPmZlZWQudHMtPnN0b3BfZmlsdGVyaW5nKGRteGRldmZpbHRlci0+ZmVlZC50cyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmVlZCwgJmRteGRldmZpbHRlci0+ZmVlZC50cywgbmV4dCkKKwkJCWZlZWQtPnRzLT5zdG9wX2ZpbHRlcmluZyhmZWVkLT50cyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDQ5LDEzICs0NTIsMjMgQEAKIC8qIHN0YXJ0IGZlZWQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgZmlsdGVyICovCiBzdGF0aWMgaW50IGR2Yl9kbXhkZXZfZmVlZF9zdGFydChzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZmlsdGVyKQogeworCXN0cnVjdCBkbXhkZXZfZmVlZCAqZmVlZDsKKwlpbnQgcmV0OworCiAJZHZiX2RteGRldl9maWx0ZXJfc3RhdGVfc2V0KGZpbHRlciwgRE1YREVWX1NUQVRFX0dPKTsKIAogCXN3aXRjaCAoZmlsdGVyLT50eXBlKSB7CiAJY2FzZSBETVhERVZfVFlQRV9TRUM6CiAJCXJldHVybiBmaWx0ZXItPmZlZWQuc2VjLT5zdGFydF9maWx0ZXJpbmcoZmlsdGVyLT5mZWVkLnNlYyk7CiAJY2FzZSBETVhERVZfVFlQRV9QRVM6Ci0JCXJldHVybiBmaWx0ZXItPmZlZWQudHMtPnN0YXJ0X2ZpbHRlcmluZyhmaWx0ZXItPmZlZWQudHMpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZlZWQsICZmaWx0ZXItPmZlZWQudHMsIG5leHQpIHsKKwkJCXJldCA9IGZlZWQtPnRzLT5zdGFydF9maWx0ZXJpbmcoZmVlZC0+dHMpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlkdmJfZG14ZGV2X2ZlZWRfc3RvcChmaWx0ZXIpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNDg3LDYgKzUwMCw5IEBACiAKIHN0YXRpYyBpbnQgZHZiX2RteGRldl9maWx0ZXJfc3RvcChzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZG14ZGV2ZmlsdGVyKQogeworCXN0cnVjdCBkbXhkZXZfZmVlZCAqZmVlZDsKKwlzdHJ1Y3QgZG14X2RlbXV4ICpkZW11eDsKKwogCWlmIChkbXhkZXZmaWx0ZXItPnN0YXRlIDwgRE1YREVWX1NUQVRFX0dPKQogCQlyZXR1cm4gMDsKIApAQCAtNTAzLDEzICs1MTksMTIgQEAKIAkJZG14ZGV2ZmlsdGVyLT5mZWVkLnNlYyA9IE5VTEw7CiAJCWJyZWFrOwogCWNhc2UgRE1YREVWX1RZUEVfUEVTOgotCQlpZiAoIWRteGRldmZpbHRlci0+ZmVlZC50cykKLQkJCWJyZWFrOwogCQlkdmJfZG14ZGV2X2ZlZWRfc3RvcChkbXhkZXZmaWx0ZXIpOwotCQlkbXhkZXZmaWx0ZXItPmRldi0+ZGVtdXgtPgotCQkgICAgcmVsZWFzZV90c19mZWVkKGRteGRldmZpbHRlci0+ZGV2LT5kZW11eCwKLQkJCQkgICAgZG14ZGV2ZmlsdGVyLT5mZWVkLnRzKTsKLQkJZG14ZGV2ZmlsdGVyLT5mZWVkLnRzID0gTlVMTDsKKwkJZGVtdXggPSBkbXhkZXZmaWx0ZXItPmRldi0+ZGVtdXg7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmVlZCwgJmRteGRldmZpbHRlci0+ZmVlZC50cywgbmV4dCkgeworCQkJZGVtdXgtPnJlbGVhc2VfdHNfZmVlZChkZW11eCwgZmVlZC0+dHMpOworCQkJZmVlZC0+dHMgPSBOVUxMOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmIChkbXhkZXZmaWx0ZXItPnN0YXRlID09IERNWERFVl9TVEFURV9BTExPQ0FURUQpCkBAIC01MjEsMTkgKzUzNiw4OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBkdmJfZG14ZGV2X2RlbGV0ZV9waWRzKHN0cnVjdCBkbXhkZXZfZmlsdGVyICpkbXhkZXZmaWx0ZXIpCit7CisJc3RydWN0IGRteGRldl9mZWVkICpmZWVkLCAqdG1wOworCisJLyogZGVsZXRlIGFsbCBQSURzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZlZWQsIHRtcCwgJmRteGRldmZpbHRlci0+ZmVlZC50cywgbmV4dCkgeworCQlsaXN0X2RlbCgmZmVlZC0+bmV4dCk7CisJCWtmcmVlKGZlZWQpOworCX0KKworCUJVR19PTighbGlzdF9lbXB0eSgmZG14ZGV2ZmlsdGVyLT5mZWVkLnRzKSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGR2Yl9kbXhkZXZfZmlsdGVyX3Jlc2V0KHN0cnVjdCBkbXhkZXZfZmlsdGVyICpkbXhkZXZmaWx0ZXIpCiB7CiAJaWYgKGRteGRldmZpbHRlci0+c3RhdGUgPCBETVhERVZfU1RBVEVfU0VUKQogCQlyZXR1cm4gMDsKIAorCWlmIChkbXhkZXZmaWx0ZXItPnR5cGUgPT0gRE1YREVWX1RZUEVfUEVTKQorCQlkdmJfZG14ZGV2X2RlbGV0ZV9waWRzKGRteGRldmZpbHRlcik7CisKIAlkbXhkZXZmaWx0ZXItPnR5cGUgPSBETVhERVZfVFlQRV9OT05FOwogCWR2Yl9kbXhkZXZfZmlsdGVyX3N0YXRlX3NldChkbXhkZXZmaWx0ZXIsIERNWERFVl9TVEFURV9BTExPQ0FURUQpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGR2Yl9kbXhkZXZfc3RhcnRfZmVlZChzdHJ1Y3QgZG14ZGV2ICpkbXhkZXYsCisJCQkJIHN0cnVjdCBkbXhkZXZfZmlsdGVyICpmaWx0ZXIsCisJCQkJIHN0cnVjdCBkbXhkZXZfZmVlZCAqZmVlZCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdGltZW91dCA9IHsgMCB9OworCXN0cnVjdCBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMgKnBhcmEgPSAmZmlsdGVyLT5wYXJhbXMucGVzOworCWRteF9vdXRwdXRfdCBvdHlwZTsKKwlpbnQgcmV0OworCWludCB0c190eXBlOworCWVudW0gZG14X3RzX3BlcyB0c19wZXM7CisJc3RydWN0IGRteF90c19mZWVkICp0c2ZlZWQ7CisKKwlmZWVkLT50cyA9IE5VTEw7CisJb3R5cGUgPSBwYXJhLT5vdXRwdXQ7CisKKwl0c19wZXMgPSAoZW51bSBkbXhfdHNfcGVzKXBhcmEtPnBlc190eXBlOworCisJaWYgKHRzX3BlcyA8IERNWF9QRVNfT1RIRVIpCisJCXRzX3R5cGUgPSBUU19ERUNPREVSOworCWVsc2UKKwkJdHNfdHlwZSA9IDA7CisKKwlpZiAob3R5cGUgPT0gRE1YX09VVF9UU19UQVApCisJCXRzX3R5cGUgfD0gVFNfUEFDS0VUOworCWVsc2UgaWYgKG90eXBlID09IERNWF9PVVRfVFNERU1VWF9UQVApCisJCXRzX3R5cGUgfD0gVFNfUEFDS0VUIHwgVFNfREVNVVg7CisJZWxzZSBpZiAob3R5cGUgPT0gRE1YX09VVF9UQVApCisJCXRzX3R5cGUgfD0gVFNfUEFDS0VUIHwgVFNfREVNVVggfCBUU19QQVlMT0FEX09OTFk7CisKKwlyZXQgPSBkbXhkZXYtPmRlbXV4LT5hbGxvY2F0ZV90c19mZWVkKGRteGRldi0+ZGVtdXgsICZmZWVkLT50cywKKwkJCQkJICAgICAgZHZiX2RteGRldl90c19jYWxsYmFjayk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwl0c2ZlZWQgPSBmZWVkLT50czsKKwl0c2ZlZWQtPnByaXYgPSBmaWx0ZXI7CisKKwlyZXQgPSB0c2ZlZWQtPnNldCh0c2ZlZWQsIGZlZWQtPnBpZCwgdHNfdHlwZSwgdHNfcGVzLCAzMjc2OCwgdGltZW91dCk7CisJaWYgKHJldCA8IDApIHsKKwkJZG14ZGV2LT5kZW11eC0+cmVsZWFzZV90c19mZWVkKGRteGRldi0+ZGVtdXgsIHRzZmVlZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gdHNmZWVkLT5zdGFydF9maWx0ZXJpbmcodHNmZWVkKTsKKwlpZiAocmV0IDwgMCkgeworCQlkbXhkZXYtPmRlbXV4LT5yZWxlYXNlX3RzX2ZlZWQoZG14ZGV2LT5kZW11eCwgdHNmZWVkKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkdmJfZG14ZGV2X2ZpbHRlcl9zdGFydChzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZmlsdGVyKQogewogCXN0cnVjdCBkbXhkZXYgKmRteGRldiA9IGZpbHRlci0+ZGV2OworCXN0cnVjdCBkbXhkZXZfZmVlZCAqZmVlZDsKIAl2b2lkICptZW07CiAJaW50IHJldCwgaTsKIApAQCAtNjMxLDU2ICs3MTUsMTQgQEAKIAkJYnJlYWs7CiAJfQogCWNhc2UgRE1YREVWX1RZUEVfUEVTOgotCXsKLQkJc3RydWN0IHRpbWVzcGVjIHRpbWVvdXQgPSB7IDAgfTsKLQkJc3RydWN0IGRteF9wZXNfZmlsdGVyX3BhcmFtcyAqcGFyYSA9ICZmaWx0ZXItPnBhcmFtcy5wZXM7Ci0JCWRteF9vdXRwdXRfdCBvdHlwZTsKLQkJaW50IHRzX3R5cGU7Ci0JCWVudW0gZG14X3RzX3BlcyB0c19wZXM7Ci0JCXN0cnVjdCBkbXhfdHNfZmVlZCAqKnRzZmVlZCA9ICZmaWx0ZXItPmZlZWQudHM7Ci0KLQkJZmlsdGVyLT5mZWVkLnRzID0gTlVMTDsKLQkJb3R5cGUgPSBwYXJhLT5vdXRwdXQ7Ci0KLQkJdHNfcGVzID0gKGVudW0gZG14X3RzX3BlcylwYXJhLT5wZXNfdHlwZTsKLQotCQlpZiAodHNfcGVzIDwgRE1YX1BFU19PVEhFUikKLQkJCXRzX3R5cGUgPSBUU19ERUNPREVSOwotCQllbHNlCi0JCQl0c190eXBlID0gMDsKLQotCQlpZiAob3R5cGUgPT0gRE1YX09VVF9UU19UQVApCi0JCQl0c190eXBlIHw9IFRTX1BBQ0tFVDsKLQkJZWxzZSBpZiAob3R5cGUgPT0gRE1YX09VVF9UU0RFTVVYX1RBUCkKLQkJCXRzX3R5cGUgfD0gVFNfUEFDS0VUIHwgVFNfREVNVVg7Ci0JCWVsc2UgaWYgKG90eXBlID09IERNWF9PVVRfVEFQKQotCQkJdHNfdHlwZSB8PSBUU19QQUNLRVQgfCBUU19ERU1VWCB8IFRTX1BBWUxPQURfT05MWTsKLQotCQlyZXQgPSBkbXhkZXYtPmRlbXV4LT5hbGxvY2F0ZV90c19mZWVkKGRteGRldi0+ZGVtdXgsCi0JCQkJCQkgICAgICB0c2ZlZWQsCi0JCQkJCQkgICAgICBkdmJfZG14ZGV2X3RzX2NhbGxiYWNrKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCSgqdHNmZWVkKS0+cHJpdiA9IGZpbHRlcjsKLQotCQlyZXQgPSAoKnRzZmVlZCktPnNldCgqdHNmZWVkLCBwYXJhLT5waWQsIHRzX3R5cGUsIHRzX3BlcywKLQkJCQkgICAgIDMyNzY4LCB0aW1lb3V0KTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRteGRldi0+ZGVtdXgtPnJlbGVhc2VfdHNfZmVlZChkbXhkZXYtPmRlbXV4LAotCQkJCQkJICAgICAgICp0c2ZlZWQpOwotCQkJcmV0dXJuIHJldDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShmZWVkLCAmZmlsdGVyLT5mZWVkLnRzLCBuZXh0KSB7CisJCQlyZXQgPSBkdmJfZG14ZGV2X3N0YXJ0X2ZlZWQoZG14ZGV2LCBmaWx0ZXIsIGZlZWQpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlkdmJfZG14ZGV2X2ZpbHRlcl9zdG9wKGZpbHRlcik7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KIAkJfQotCi0JCXJldCA9IGZpbHRlci0+ZmVlZC50cy0+c3RhcnRfZmlsdGVyaW5nKGZpbHRlci0+ZmVlZC50cyk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkbXhkZXYtPmRlbXV4LT5yZWxlYXNlX3RzX2ZlZWQoZG14ZGV2LT5kZW11eCwKLQkJCQkJCSAgICAgICAqdHNmZWVkKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQogCQlicmVhazsKLQl9CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNzE4LDcgKzc2MCw3IEBACiAJZHZiX3JpbmdidWZmZXJfaW5pdCgmZG14ZGV2ZmlsdGVyLT5idWZmZXIsIE5VTEwsIDgxOTIpOwogCWRteGRldmZpbHRlci0+dHlwZSA9IERNWERFVl9UWVBFX05PTkU7CiAJZHZiX2RteGRldl9maWx0ZXJfc3RhdGVfc2V0KGRteGRldmZpbHRlciwgRE1YREVWX1NUQVRFX0FMTE9DQVRFRCk7Ci0JZG14ZGV2ZmlsdGVyLT5mZWVkLnRzID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmZG14ZGV2ZmlsdGVyLT5mZWVkLnRzKTsKIAlpbml0X3RpbWVyKCZkbXhkZXZmaWx0ZXItPnRpbWVyKTsKIAogCWR2YmRldi0+dXNlcnMrKzsKQEAgLTc2MCw2ICs4MDIsNTUgQEAKIAkJZmlsdGVyLT5tb2RlW2ldIF49IDB4ZmY7CiB9CiAKK3N0YXRpYyBpbnQgZHZiX2RteGRldl9hZGRfcGlkKHN0cnVjdCBkbXhkZXYgKmRteGRldiwKKwkJCSAgICAgIHN0cnVjdCBkbXhkZXZfZmlsdGVyICpmaWx0ZXIsIHUxNiBwaWQpCit7CisJc3RydWN0IGRteGRldl9mZWVkICpmZWVkOworCisJaWYgKChmaWx0ZXItPnR5cGUgIT0gRE1YREVWX1RZUEVfUEVTKSB8fAorCSAgICAoZmlsdGVyLT5zdGF0ZSA8IERNWERFVl9TVEFURV9TRVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIG9ubHkgVFMgcGFja2V0IGZpbHRlcnMgbWF5IGhhdmUgbXVsdGlwbGUgUElEcyAqLworCWlmICgoZmlsdGVyLT5wYXJhbXMucGVzLm91dHB1dCAhPSBETVhfT1VUX1RTREVNVVhfVEFQKSAmJgorCSAgICAoIWxpc3RfZW1wdHkoJmZpbHRlci0+ZmVlZC50cykpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZlZWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG14ZGV2X2ZlZWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZmVlZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZlZWQtPnBpZCA9IHBpZDsKKwlsaXN0X2FkZCgmZmVlZC0+bmV4dCwgJmZpbHRlci0+ZmVlZC50cyk7CisKKwlpZiAoZmlsdGVyLT5zdGF0ZSA+PSBETVhERVZfU1RBVEVfR08pCisJCXJldHVybiBkdmJfZG14ZGV2X3N0YXJ0X2ZlZWQoZG14ZGV2LCBmaWx0ZXIsIGZlZWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHZiX2RteGRldl9yZW1vdmVfcGlkKHN0cnVjdCBkbXhkZXYgKmRteGRldiwKKwkJCQkgIHN0cnVjdCBkbXhkZXZfZmlsdGVyICpmaWx0ZXIsIHUxNiBwaWQpCit7CisJc3RydWN0IGRteGRldl9mZWVkICpmZWVkLCAqdG1wOworCisJaWYgKChmaWx0ZXItPnR5cGUgIT0gRE1YREVWX1RZUEVfUEVTKSB8fAorCSAgICAoZmlsdGVyLT5zdGF0ZSA8IERNWERFVl9TVEFURV9TRVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmZWVkLCB0bXAsICZmaWx0ZXItPmZlZWQudHMsIG5leHQpIHsKKwkJaWYgKChmZWVkLT5waWQgPT0gcGlkKSAmJiAoZmVlZC0+dHMgIT0gTlVMTCkpIHsKKwkJCWZlZWQtPnRzLT5zdG9wX2ZpbHRlcmluZyhmZWVkLT50cyk7CisJCQlmaWx0ZXItPmRldi0+ZGVtdXgtPnJlbGVhc2VfdHNfZmVlZChmaWx0ZXItPmRldi0+ZGVtdXgsCisJCQkJCQkJICAgIGZlZWQtPnRzKTsKKwkJCWxpc3RfZGVsKCZmZWVkLT5uZXh0KTsKKwkJCWtmcmVlKGZlZWQpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZHZiX2RteGRldl9maWx0ZXJfc2V0KHN0cnVjdCBkbXhkZXYgKmRteGRldiwKIAkJCQkgc3RydWN0IGRteGRldl9maWx0ZXIgKmRteGRldmZpbHRlciwKIAkJCQkgc3RydWN0IGRteF9zY3RfZmlsdGVyX3BhcmFtcyAqcGFyYW1zKQpAQCAtNzg0LDcgKzg3NSwxMCBAQAogCQkJCSAgICAgc3RydWN0IGRteGRldl9maWx0ZXIgKmRteGRldmZpbHRlciwKIAkJCQkgICAgIHN0cnVjdCBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMgKnBhcmFtcykKIHsKKwlpbnQgcmV0OworCiAJZHZiX2RteGRldl9maWx0ZXJfc3RvcChkbXhkZXZmaWx0ZXIpOworCWR2Yl9kbXhkZXZfZmlsdGVyX3Jlc2V0KGRteGRldmZpbHRlcik7CiAKIAlpZiAocGFyYW1zLT5wZXNfdHlwZSA+IERNWF9QRVNfT1RIRVIgfHwgcGFyYW1zLT5wZXNfdHlwZSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzk1LDYgKzg4OSwxMSBAQAogCiAJZHZiX2RteGRldl9maWx0ZXJfc3RhdGVfc2V0KGRteGRldmZpbHRlciwgRE1YREVWX1NUQVRFX1NFVCk7CiAKKwlyZXQgPSBkdmJfZG14ZGV2X2FkZF9waWQoZG14ZGV2LCBkbXhkZXZmaWx0ZXIsCisJCQkJIGRteGRldmZpbHRlci0+cGFyYW1zLnBlcy5waWQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCiAJaWYgKHBhcmFtcy0+ZmxhZ3MgJiBETVhfSU1NRURJQVRFX1NUQVJUKQogCQlyZXR1cm4gZHZiX2RteGRldl9maWx0ZXJfc3RhcnQoZG14ZGV2ZmlsdGVyKTsKIApAQCAtOTU4LDYgKzEwNTcsMjQgQEAKIAkJCQkJICAgICAmKChzdHJ1Y3QgZG14X3N0YyAqKXBhcmcpLT5iYXNlKTsKIAkJYnJlYWs7CiAKKwljYXNlIERNWF9BRERfUElEOgorCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkbXhkZXZmaWx0ZXItPm11dGV4KSkgeworCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gZHZiX2RteGRldl9hZGRfcGlkKGRteGRldiwgZG14ZGV2ZmlsdGVyLCAqKHUxNiAqKXBhcmcpOworCQltdXRleF91bmxvY2soJmRteGRldmZpbHRlci0+bXV0ZXgpOworCQlicmVhazsKKworCWNhc2UgRE1YX1JFTU9WRV9QSUQ6CisJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRteGRldmZpbHRlci0+bXV0ZXgpKSB7CisJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBkdmJfZG14ZGV2X3JlbW92ZV9waWQoZG14ZGV2LCBkbXhkZXZmaWx0ZXIsICoodTE2ICopcGFyZyk7CisJCW11dGV4X3VubG9jaygmZG14ZGV2ZmlsdGVyLT5tdXRleCk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5oCmluZGV4IDI5NzQ2ZTcuLmMxMzc5YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5oCkBAIC01MywxMyArNTMsMjAgQEAKIAlETVhERVZfU1RBVEVfVElNRURPVVQKIH07CiAKK3N0cnVjdCBkbXhkZXZfZmVlZCB7CisJdTE2IHBpZDsKKwlzdHJ1Y3QgZG14X3RzX2ZlZWQgKnRzOworCXN0cnVjdCBsaXN0X2hlYWQgbmV4dDsKK307CisKIHN0cnVjdCBkbXhkZXZfZmlsdGVyIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCBkbXhfc2VjdGlvbl9maWx0ZXIgKnNlYzsKIAl9IGZpbHRlcjsKIAogCXVuaW9uIHsKLQkJc3RydWN0IGRteF90c19mZWVkICp0czsKKwkJLyogbGlzdCBvZiBUUyBhbmQgUEVTIGZlZWRzIChzdHJ1Y3QgZG14ZGV2X2ZlZWQpICovCisJCXN0cnVjdCBsaXN0X2hlYWQgdHM7CiAJCXN0cnVjdCBkbXhfc2VjdGlvbl9mZWVkICpzZWM7CiAJfSBmZWVkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCmluZGV4IGNmZTI3NjguLmVlZjZkMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jCkBAIC00MjUsMTMgKzQyNSw5IEBACiAJCWlmICgoRFZSX0ZFRUQoZmVlZCkpICYmIChkdnJfZG9uZSsrKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChmZWVkLT5waWQgPT0gcGlkKSB7CisJCWlmIChmZWVkLT5waWQgPT0gcGlkKQogCQkJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRfdHlwZShmZWVkLCBidWYpOwotCQkJaWYgKERWUl9GRUVEKGZlZWQpKQotCQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGZlZWQtPnBpZCA9PSAweDIwMDApCisJCWVsc2UgaWYgKGZlZWQtPnBpZCA9PSAweDIwMDApCiAJCQlmZWVkLT5jYi50cyhidWYsIDE4OCwgTlVMTCwgMCwgJmZlZWQtPmZlZWQudHMsIERNWF9PSyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCBmNTBjYTcyLi5kMTNlYmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtNzIsNiArNzIsNyBAQAogI2RlZmluZSBGRVNUQVRFX1pJR1pBR19GQVNUIDMyCiAjZGVmaW5lIEZFU1RBVEVfWklHWkFHX1NMT1cgNjQKICNkZWZpbmUgRkVTVEFURV9ESVNFUUMgMTI4CisjZGVmaW5lIEZFU1RBVEVfRVJST1IgMjU2CiAjZGVmaW5lIEZFU1RBVEVfV0FJVEZPUkxPQ0sgKEZFU1RBVEVfVFVOSU5HX0ZBU1QgfCBGRVNUQVRFX1RVTklOR19TTE9XIHwgRkVTVEFURV9aSUdaQUdfRkFTVCB8IEZFU1RBVEVfWklHWkFHX1NMT1cgfCBGRVNUQVRFX0RJU0VRQykKICNkZWZpbmUgRkVTVEFURV9TRUFSQ0hJTkdfRkFTVCAoRkVTVEFURV9UVU5JTkdfRkFTVCB8IEZFU1RBVEVfWklHWkFHX0ZBU1QpCiAjZGVmaW5lIEZFU1RBVEVfU0VBUkNISU5HX1NMT1cgKEZFU1RBVEVfVFVOSU5HX1NMT1cgfCBGRVNUQVRFX1pJR1pBR19TTE9XKQpAQCAtMjY5LDYgKzI3MCw3IEBACiB7CiAJaW50IGF1dG9pbnZlcnNpb247CiAJaW50IHJlYWR5ID0gMDsKKwlpbnQgZmVfc2V0X2VyciA9IDA7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKIAlpbnQgb3JpZ2luYWxfaW52ZXJzaW9uID0gZmVwcml2LT5wYXJhbWV0ZXJzLmludmVyc2lvbjsKIAl1MzIgb3JpZ2luYWxfZnJlcXVlbmN5ID0gZmVwcml2LT5wYXJhbWV0ZXJzLmZyZXF1ZW5jeTsKQEAgLTM0NSw3ICszNDcsMTEgQEAKIAlpZiAoYXV0b2ludmVyc2lvbikKIAkJZmVwcml2LT5wYXJhbWV0ZXJzLmludmVyc2lvbiA9IGZlcHJpdi0+aW52ZXJzaW9uOwogCWlmIChmZS0+b3BzLnNldF9mcm9udGVuZCkKLQkJZmUtPm9wcy5zZXRfZnJvbnRlbmQoZmUsICZmZXByaXYtPnBhcmFtZXRlcnMpOworCQlmZV9zZXRfZXJyID0gZmUtPm9wcy5zZXRfZnJvbnRlbmQoZmUsICZmZXByaXYtPnBhcmFtZXRlcnMpOworCWlmIChmZV9zZXRfZXJyIDwgMCkgeworCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9FUlJPUjsKKwkJcmV0dXJuIGZlX3NldF9lcnI7CisJfQogCiAJZmVwcml2LT5wYXJhbWV0ZXJzLmZyZXF1ZW5jeSA9IG9yaWdpbmFsX2ZyZXF1ZW5jeTsKIAlmZXByaXYtPnBhcmFtZXRlcnMuaW52ZXJzaW9uID0gb3JpZ2luYWxfaW52ZXJzaW9uOwpAQCAtMzU3LDYgKzM2Myw3IEBACiBzdGF0aWMgdm9pZCBkdmJfZnJvbnRlbmRfc3d6aWd6YWcoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJZmVfc3RhdHVzX3QgcyA9IDA7CisJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKIAogCS8qIGlmIHdlJ3ZlIGdvdCBubyBwYXJhbWV0ZXJzLCBqdXN0IGtlZXAgaWRsaW5nICovCkBAIC0zNzAsOCArMzc3LDEyIEBACiAJaWYgKGZlcHJpdi0+dHVuZV9tb2RlX2ZsYWdzICYgRkVfVFVORV9NT0RFX09ORVNIT1QpIHsKIAkJaWYgKGZlcHJpdi0+c3RhdGUgJiBGRVNUQVRFX1JFVFVORSkgewogCQkJaWYgKGZlLT5vcHMuc2V0X2Zyb250ZW5kKQotCQkJCWZlLT5vcHMuc2V0X2Zyb250ZW5kKGZlLCAmZmVwcml2LT5wYXJhbWV0ZXJzKTsKLQkJCWZlcHJpdi0+c3RhdGUgPSBGRVNUQVRFX1RVTkVEOworCQkJCXJldHZhbCA9IGZlLT5vcHMuc2V0X2Zyb250ZW5kKGZlLAorCQkJCQkJCSZmZXByaXYtPnBhcmFtZXRlcnMpOworCQkJaWYgKHJldHZhbCA8IDApCisJCQkJZmVwcml2LT5zdGF0ZSA9IEZFU1RBVEVfRVJST1I7CisJCQllbHNlCisJCQkJZmVwcml2LT5zdGF0ZSA9IEZFU1RBVEVfVFVORUQ7CiAJCX0KIAkJZmVwcml2LT5kZWxheSA9IDMqSFo7CiAJCWZlcHJpdi0+cXVhbGl0eSA9IDA7CkBAIC00NDksNyArNDYwLDExIEBACiAJCWZlcHJpdi0+ZGVsYXkgPSBmZXByaXYtPm1pbl9kZWxheTsKIAogCQkvKiBwZWZvcm0gYSB0dW5lICovCi0JCWlmIChkdmJfZnJvbnRlbmRfc3d6aWd6YWdfYXV0b3R1bmUoZmUsIGZlcHJpdi0+Y2hlY2tfd3JhcHBlZCkpIHsKKwkJcmV0dmFsID0gZHZiX2Zyb250ZW5kX3N3emlnemFnX2F1dG90dW5lKGZlLAorCQkJCQkJCWZlcHJpdi0+Y2hlY2tfd3JhcHBlZCk7CisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAocmV0dmFsKSB7CiAJCQkvKiBPSywgaWYgd2UndmUgcnVuIG91dCBvZiB0cmlhbHMgYXQgdGhlIGZhc3Qgc3BlZWQuCiAJCQkgKiBEcm9wIGJhY2sgdG8gc2xvdyBmb3IgdGhlIF9uZXh0XyBhdHRlbXB0ICovCiAJCQlmZXByaXYtPnN0YXRlID0gRkVTVEFURV9TRUFSQ0hJTkdfU0xPVzsKQEAgLTgyMyw2ICs4MzgsMTUgQEAKIAkJfQogCX0KIAorCS8qIGNoZWNrIGZvciBzdXBwb3J0ZWQgbW9kdWxhdGlvbiAqLworCWlmIChmZS0+b3BzLmluZm8udHlwZSA9PSBGRV9RQU0gJiYKKwkgICAgKHBhcm1zLT51LnFhbS5tb2R1bGF0aW9uID4gUUFNX0FVVE8gfHwKKwkgICAgICEoKDEgPDwgKHBhcm1zLT51LnFhbS5tb2R1bGF0aW9uICsgMTApKSAmIGZlLT5vcHMuaW5mby5jYXBzKSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBhZGFwdGVyICVpIGZyb250ZW5kICVpIG1vZHVsYXRpb24gJXUgbm90IHN1cHBvcnRlZFxuIiwKKwkJICAgICAgIGZlLT5kdmItPm51bSwgZmUtPmlkLCBwYXJtcy0+dS5xYW0ubW9kdWxhdGlvbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ5OSw3ICsxNTIzLDggQEAKIAogCQkvKiBpZiByZXR1bmUgd2FzIHJlcXVlc3RlZCBidXQgaGFzbid0IG9jY3VyZWQgeWV0LCBwcmV2ZW50CiAJCSAqIHRoYXQgdXNlciBnZXQgc2lnbmFsIHN0YXRlIGZyb20gcHJldmlvdXMgdHVuaW5nICovCi0JCWlmKGZlcHJpdi0+c3RhdGUgPT0gRkVTVEFURV9SRVRVTkUpIHsKKwkJaWYgKGZlcHJpdi0+c3RhdGUgPT0gRkVTVEFURV9SRVRVTkUgfHwKKwkJICAgIGZlcHJpdi0+c3RhdGUgPT0gRkVTVEFURV9FUlJPUikgewogCQkJZXJyPTA7CiAJCQkqc3RhdHVzID0gMDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCmluZGV4IDgyODBmOGQuLjhjOWFlMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKQEAgLTkwNCw3ICs5MDQsNyBAQAogc3RhdGljIGludCBkdmJfbmV0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB1OCBtYXNrX25vcm1hbFs2XT17MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCmluZGV4IDQ4NzkxOWIuLjg5NWUyZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCkBAIC0zMCw3ICszMCwxMiBAQAogCiAjZGVmaW5lIERWQl9NQUpPUiAyMTIKIAorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9NQVhfQURBUFRFUlMpICYmIENPTkZJR19EVkJfTUFYX0FEQVBURVJTID4gMAorI2RlZmluZSBEVkJfTUFYX0FEQVBURVJTIENPTkZJR19EVkJfTUFYX0FEQVBURVJTCisjZWxzZQorI3dhcm5pbmcgaW52YWxpZCBDT05GSUdfRFZCX01BWF9BREFQVEVSUyB2YWx1ZQogI2RlZmluZSBEVkJfTUFYX0FEQVBURVJTIDgKKyNlbmRpZgogCiAjZGVmaW5lIERWQl9VTlNFVCAoLTEpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwppbmRleCA0OTZjMWEzLi44YjhiYzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCkBAIC0yNTMsNyArMjUzLDcgQEAKIAkgIEFmYXRlY2ggQUY5MDA1IGJhc2VkIHJlY2VpdmVyLgogCiBjb25maWcgRFZCX1VTQl9EVzIxMDIKLQl0cmlzdGF0ZSAiRHZiV29ybGQgRFZCLVMvUzIgVVNCMi4wIHN1cHBvcnQiCisJdHJpc3RhdGUgIkR2YldvcmxkICYgVGVWaWkgRFZCLVMvUzIgVVNCMi4wIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9QTEwgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1NUVjAyOTkgaWYgIURWQl9GRV9DVVNUT01JU0UKQEAgLTI2Miw5ICsyNjIsMTEgQEAKIAlzZWxlY3QgRFZCX0NYMjQxMTYgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1NJMjFYWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfVERBMTAwMjEgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX01UMzEyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9aTDEwMDM5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBEdmJXb3JsZCBEVkItUy9TMiBVU0IyLjAgcmVjZWl2ZXJzCi0JICBhbmQgdGhlIFRlVmlpIFM2NTAuCisJICBhbmQgdGhlIFRlVmlpIFM2NTAsIFM2MzAuCiAKIGNvbmZpZyBEVkJfVVNCX0NJTkVSR1lfVDIKIAl0cmlzdGF0ZSAiVGVycmF0ZWMgQ2luZXJneVQyL3FhbnUgVVNCIDIuMCBEVkItVCByZWNlaXZlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYTgwMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hODAwLmMKaW5kZXggZGM4Yzg3OC4uNjI0NzIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hODAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hODAwLmMKQEAgLTM4LDQxICszOCw0MSBAQAogfQogCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGE4MDBfcmNfa2V5c1tdID0gewotCXsgMHgwMiwgMHgwMSwgS0VZX1BST0cxIH0sICAgICAgIC8qIFNPVVJDRSAqLwotCXsgMHgwMiwgMHgwMCwgS0VZX1BPV0VSIH0sICAgICAgIC8qIFBPV0VSICovCi0JeyAweDAyLCAweDA1LCBLRVlfMSB9LCAgICAgICAgICAgLyogMSAqLwotCXsgMHgwMiwgMHgwNiwgS0VZXzIgfSwgICAgICAgICAgIC8qIDIgKi8KLQl7IDB4MDIsIDB4MDcsIEtFWV8zIH0sICAgICAgICAgICAvKiAzICovCi0JeyAweDAyLCAweDA5LCBLRVlfNCB9LCAgICAgICAgICAgLyogNCAqLwotCXsgMHgwMiwgMHgwYSwgS0VZXzUgfSwgICAgICAgICAgIC8qIDUgKi8KLQl7IDB4MDIsIDB4MGIsIEtFWV82IH0sICAgICAgICAgICAvKiA2ICovCi0JeyAweDAyLCAweDBkLCBLRVlfNyB9LCAgICAgICAgICAgLyogNyAqLwotCXsgMHgwMiwgMHgwZSwgS0VZXzggfSwgICAgICAgICAgIC8qIDggKi8KLQl7IDB4MDIsIDB4MGYsIEtFWV85IH0sICAgICAgICAgICAvKiA5ICovCi0JeyAweDAyLCAweDEyLCBLRVlfTEVGVCB9LCAgICAgICAgLyogTCAvIERJU1BMQVkgKi8KLQl7IDB4MDIsIDB4MTEsIEtFWV8wIH0sICAgICAgICAgICAvKiAwICovCi0JeyAweDAyLCAweDEzLCBLRVlfUklHSFQgfSwgICAgICAgLyogUiAvIENIIFJUTiAqLwotCXsgMHgwMiwgMHgxNywgS0VZX1BST0cyIH0sICAgICAgIC8qIFNOQVAgU0hPVCAqLwotCXsgMHgwMiwgMHgxMCwgS0VZX1BST0czIH0sICAgICAgIC8qIDE2LUNIIFBSRVYgKi8KLQl7IDB4MDIsIDB4MWUsIEtFWV9WT0xVTUVET1dOIH0sICAvKiBWT0wgRE9XTiAqLwotCXsgMHgwMiwgMHgwYywgS0VZX1pPT00gfSwgICAgICAgIC8qIEZVTEwgU0NSRUVOICovCi0JeyAweDAyLCAweDFmLCBLRVlfVk9MVU1FVVAgfSwgICAgLyogVk9MIFVQICovCi0JeyAweDAyLCAweDE0LCBLRVlfTVVURSB9LCAgICAgICAgLyogTVVURSAqLwotCXsgMHgwMiwgMHgwOCwgS0VZX0FVRElPIH0sICAgICAgIC8qIEFVRElPICovCi0JeyAweDAyLCAweDE5LCBLRVlfUkVDT1JEIH0sICAgICAgLyogUkVDT1JEICovCi0JeyAweDAyLCAweDE4LCBLRVlfUExBWSB9LCAgICAgICAgLyogUExBWSAqLwotCXsgMHgwMiwgMHgxYiwgS0VZX1NUT1AgfSwgICAgICAgIC8qIFNUT1AgKi8KLQl7IDB4MDIsIDB4MWEsIEtFWV9QTEFZUEFVU0UgfSwgICAvKiBUSU1FU0hJRlQgLyBQQVVTRSAqLwotCXsgMHgwMiwgMHgxZCwgS0VZX0JBQ0sgfSwgICAgICAgIC8qIDw8IC8gUkVEICovCi0JeyAweDAyLCAweDFjLCBLRVlfRk9SV0FSRCB9LCAgICAgLyogPj4gLyBZRUxMT1cgKi8KLQl7IDB4MDIsIDB4MDMsIEtFWV9URVhUIH0sICAgICAgICAvKiBURUxFVEVYVCAqLwotCXsgMHgwMiwgMHgwNCwgS0VZX0VQRyB9LCAgICAgICAgIC8qIEVQRyAqLwotCXsgMHgwMiwgMHgxNSwgS0VZX01FTlUgfSwgICAgICAgIC8qIE1FTlUgKi8KKwl7IDB4MDIwMSwgS0VZX1BST0cxIH0sICAgICAgIC8qIFNPVVJDRSAqLworCXsgMHgwMjAwLCBLRVlfUE9XRVIgfSwgICAgICAgLyogUE9XRVIgKi8KKwl7IDB4MDIwNSwgS0VZXzEgfSwgICAgICAgICAgIC8qIDEgKi8KKwl7IDB4MDIwNiwgS0VZXzIgfSwgICAgICAgICAgIC8qIDIgKi8KKwl7IDB4MDIwNywgS0VZXzMgfSwgICAgICAgICAgIC8qIDMgKi8KKwl7IDB4MDIwOSwgS0VZXzQgfSwgICAgICAgICAgIC8qIDQgKi8KKwl7IDB4MDIwYSwgS0VZXzUgfSwgICAgICAgICAgIC8qIDUgKi8KKwl7IDB4MDIwYiwgS0VZXzYgfSwgICAgICAgICAgIC8qIDYgKi8KKwl7IDB4MDIwZCwgS0VZXzcgfSwgICAgICAgICAgIC8qIDcgKi8KKwl7IDB4MDIwZSwgS0VZXzggfSwgICAgICAgICAgIC8qIDggKi8KKwl7IDB4MDIwZiwgS0VZXzkgfSwgICAgICAgICAgIC8qIDkgKi8KKwl7IDB4MDIxMiwgS0VZX0xFRlQgfSwgICAgICAgIC8qIEwgLyBESVNQTEFZICovCisJeyAweDAyMTEsIEtFWV8wIH0sICAgICAgICAgICAvKiAwICovCisJeyAweDAyMTMsIEtFWV9SSUdIVCB9LCAgICAgICAvKiBSIC8gQ0ggUlROICovCisJeyAweDAyMTcsIEtFWV9QUk9HMiB9LCAgICAgICAvKiBTTkFQIFNIT1QgKi8KKwl7IDB4MDIxMCwgS0VZX1BST0czIH0sICAgICAgIC8qIDE2LUNIIFBSRVYgKi8KKwl7IDB4MDIxZSwgS0VZX1ZPTFVNRURPV04gfSwgIC8qIFZPTCBET1dOICovCisJeyAweDAyMGMsIEtFWV9aT09NIH0sICAgICAgICAvKiBGVUxMIFNDUkVFTiAqLworCXsgMHgwMjFmLCBLRVlfVk9MVU1FVVAgfSwgICAgLyogVk9MIFVQICovCisJeyAweDAyMTQsIEtFWV9NVVRFIH0sICAgICAgICAvKiBNVVRFICovCisJeyAweDAyMDgsIEtFWV9BVURJTyB9LCAgICAgICAvKiBBVURJTyAqLworCXsgMHgwMjE5LCBLRVlfUkVDT1JEIH0sICAgICAgLyogUkVDT1JEICovCisJeyAweDAyMTgsIEtFWV9QTEFZIH0sICAgICAgICAvKiBQTEFZICovCisJeyAweDAyMWIsIEtFWV9TVE9QIH0sICAgICAgICAvKiBTVE9QICovCisJeyAweDAyMWEsIEtFWV9QTEFZUEFVU0UgfSwgICAvKiBUSU1FU0hJRlQgLyBQQVVTRSAqLworCXsgMHgwMjFkLCBLRVlfQkFDSyB9LCAgICAgICAgLyogPDwgLyBSRUQgKi8KKwl7IDB4MDIxYywgS0VZX0ZPUldBUkQgfSwgICAgIC8qID4+IC8gWUVMTE9XICovCisJeyAweDAyMDMsIEtFWV9URVhUIH0sICAgICAgICAvKiBURUxFVEVYVCAqLworCXsgMHgwMjA0LCBLRVlfRVBHIH0sICAgICAgICAgLyogRVBHICovCisJeyAweDAyMTUsIEtFWV9NRU5VIH0sICAgICAgICAvKiBNRU5VICovCiAKLQl7IDB4MDMsIDB4MDMsIEtFWV9DSEFOTkVMVVAgfSwgICAvKiBDSCBVUCAqLwotCXsgMHgwMywgMHgwMiwgS0VZX0NIQU5ORUxET1dOIH0sIC8qIENIIERPV04gKi8KLQl7IDB4MDMsIDB4MDEsIEtFWV9GSVJTVCB9LCAgICAgICAvKiB8PDwgLyBHUkVFTiAqLwotCXsgMHgwMywgMHgwMCwgS0VZX0xBU1QgfSwgICAgICAgIC8qID4+fCAvIEJMVUUgKi8KKwl7IDB4MDMwMywgS0VZX0NIQU5ORUxVUCB9LCAgIC8qIENIIFVQICovCisJeyAweDAzMDIsIEtFWV9DSEFOTkVMRE9XTiB9LCAvKiBDSCBET1dOICovCisJeyAweDAzMDEsIEtFWV9GSVJTVCB9LCAgICAgICAvKiB8PDwgLyBHUkVFTiAqLworCXsgMHgwMzAwLCBLRVlfTEFTVCB9LCAgICAgICAgLyogPj58IC8gQkxVRSAqLwogCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1yZW1vdGUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LXJlbW90ZS5jCmluZGV4IDdjNTk2ZjkuLmY0Mzc5YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LXJlbW90ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LXJlbW90ZS5jCkBAIC0zNSw0MyArMzUsNDMgQEAKIAogc3RydWN0IGR2Yl91c2JfcmNfa2V5IGFmOTAwNV9yY19rZXlzW10gPSB7CiAKLQl7MHgwMSwgMHhiNywgS0VZX1BPV0VSfSwKLQl7MHgwMSwgMHhhNywgS0VZX1ZPTFVNRVVQfSwKLQl7MHgwMSwgMHg4NywgS0VZX0NIQU5ORUxVUH0sCi0JezB4MDEsIDB4N2YsIEtFWV9NVVRFfSwKLQl7MHgwMSwgMHhiZiwgS0VZX1ZPTFVNRURPV059LAotCXsweDAxLCAweDNmLCBLRVlfQ0hBTk5FTERPV059LAotCXsweDAxLCAweGRmLCBLRVlfMX0sCi0JezB4MDEsIDB4NWYsIEtFWV8yfSwKLQl7MHgwMSwgMHg5ZiwgS0VZXzN9LAotCXsweDAxLCAweDFmLCBLRVlfNH0sCi0JezB4MDEsIDB4ZWYsIEtFWV81fSwKLQl7MHgwMSwgMHg2ZiwgS0VZXzZ9LAotCXsweDAxLCAweGFmLCBLRVlfN30sCi0JezB4MDEsIDB4MjcsIEtFWV84fSwKLQl7MHgwMSwgMHgwNywgS0VZXzl9LAotCXsweDAxLCAweGNmLCBLRVlfWk9PTX0sCi0JezB4MDEsIDB4NGYsIEtFWV8wfSwKLQl7MHgwMSwgMHg4ZiwgS0VZX0dPVE99LAkvKiBtYXJrZWQganVtcCBvbiB0aGUgcmVtb3RlICovCisJezB4MDFiNywgS0VZX1BPV0VSfSwKKwl7MHgwMWE3LCBLRVlfVk9MVU1FVVB9LAorCXsweDAxODcsIEtFWV9DSEFOTkVMVVB9LAorCXsweDAxN2YsIEtFWV9NVVRFfSwKKwl7MHgwMWJmLCBLRVlfVk9MVU1FRE9XTn0sCisJezB4MDEzZiwgS0VZX0NIQU5ORUxET1dOfSwKKwl7MHgwMWRmLCBLRVlfMX0sCisJezB4MDE1ZiwgS0VZXzJ9LAorCXsweDAxOWYsIEtFWV8zfSwKKwl7MHgwMTFmLCBLRVlfNH0sCisJezB4MDFlZiwgS0VZXzV9LAorCXsweDAxNmYsIEtFWV82fSwKKwl7MHgwMWFmLCBLRVlfN30sCisJezB4MDEyNywgS0VZXzh9LAorCXsweDAxMDcsIEtFWV85fSwKKwl7MHgwMWNmLCBLRVlfWk9PTX0sCisJezB4MDE0ZiwgS0VZXzB9LAorCXsweDAxOGYsIEtFWV9HT1RPfSwJLyogbWFya2VkIGp1bXAgb24gdGhlIHJlbW90ZSAqLwogCi0JezB4MDAsIDB4YmQsIEtFWV9QT1dFUn0sCi0JezB4MDAsIDB4N2QsIEtFWV9WT0xVTUVVUH0sCi0JezB4MDAsIDB4ZmQsIEtFWV9DSEFOTkVMVVB9LAotCXsweDAwLCAweDlkLCBLRVlfTVVURX0sCi0JezB4MDAsIDB4NWQsIEtFWV9WT0xVTUVET1dOfSwKLQl7MHgwMCwgMHhkZCwgS0VZX0NIQU5ORUxET1dOfSwKLQl7MHgwMCwgMHhhZCwgS0VZXzF9LAotCXsweDAwLCAweDZkLCBLRVlfMn0sCi0JezB4MDAsIDB4ZWQsIEtFWV8zfSwKLQl7MHgwMCwgMHg4ZCwgS0VZXzR9LAotCXsweDAwLCAweDRkLCBLRVlfNX0sCi0JezB4MDAsIDB4Y2QsIEtFWV82fSwKLQl7MHgwMCwgMHhiNSwgS0VZXzd9LAotCXsweDAwLCAweDc1LCBLRVlfOH0sCi0JezB4MDAsIDB4ZjUsIEtFWV85fSwKLQl7MHgwMCwgMHg5NSwgS0VZX1pPT019LAotCXsweDAwLCAweDU1LCBLRVlfMH0sCi0JezB4MDAsIDB4ZDUsIEtFWV9HT1RPfSwJLyogbWFya2VkIGp1bXAgb24gdGhlIHJlbW90ZSAqLworCXsweDAwYmQsIEtFWV9QT1dFUn0sCisJezB4MDA3ZCwgS0VZX1ZPTFVNRVVQfSwKKwl7MHgwMGZkLCBLRVlfQ0hBTk5FTFVQfSwKKwl7MHgwMDlkLCBLRVlfTVVURX0sCisJezB4MDA1ZCwgS0VZX1ZPTFVNRURPV059LAorCXsweDAwZGQsIEtFWV9DSEFOTkVMRE9XTn0sCisJezB4MDBhZCwgS0VZXzF9LAorCXsweDAwNmQsIEtFWV8yfSwKKwl7MHgwMGVkLCBLRVlfM30sCisJezB4MDA4ZCwgS0VZXzR9LAorCXsweDAwNGQsIEtFWV81fSwKKwl7MHgwMGNkLCBLRVlfNn0sCisJezB4MDBiNSwgS0VZXzd9LAorCXsweDAwNzUsIEtFWV84fSwKKwl7MHgwMGY1LCBLRVlfOX0sCisJezB4MDA5NSwgS0VZX1pPT019LAorCXsweDAwNTUsIEtFWV8wfSwKKwl7MHgwMGQ1LCBLRVlfR09UT30sCS8qIG1hcmtlZCBqdW1wIG9uIHRoZSByZW1vdGUgKi8KIH07CiAKIGludCBhZjkwMDVfcmNfa2V5c19zaXplID0gQVJSQVlfU0laRShhZjkwMDVfcmNfa2V5cyk7CkBAIC0xMzEsOCArMTMxLDggQEAKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCWZvciAoaSA9IDA7IGkgPCBhZjkwMDVfcmNfa2V5c19zaXplOyBpKyspIHsKLQkJCQlpZiAoYWY5MDA1X3JjX2tleXNbaV0uY3VzdG9tID09IGN1c3QKLQkJCQkgICAgJiYgYWY5MDA1X3JjX2tleXNbaV0uZGF0YSA9PSBkYXQpIHsKKwkJCQlpZiAocmM1X2N1c3RvbSgmYWY5MDA1X3JjX2tleXNbaV0pID09IGN1c3QKKwkJCQkgICAgJiYgcmM1X2RhdGEoJmFmOTAwNV9yY19rZXlzW2ldKSA9PSBkYXQpIHsKIAkJCQkJKmV2ZW50ID0gYWY5MDA1X3JjX2tleXNbaV0uZXZlbnQ7CiAJCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKIAkJCQkJZGViX2RlY29kZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKaW5kZXggMjY2OTBkZi4uOTljZGQwZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYwpAQCAtNTM4LDI0ICs1MzgsMjIgQEAKIC8qIGR1bXAgZWVwcm9tICovCiBzdGF0aWMgaW50IGFmOTAxNV9lZXByb21fZHVtcChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7Ci0JY2hhciBidWZbNCszKjE2KzFdLCBidWYyWzRdOwogCXU4IHJlZywgdmFsOwogCiAJZm9yIChyZWcgPSAwOyA7IHJlZysrKSB7CiAJCWlmIChyZWcgJSAxNiA9PSAwKSB7CiAJCQlpZiAocmVnKQotCQkJCWRlYl9pbmZvKCIlc1xuIiwgYnVmKTsKLQkJCXNwcmludGYoYnVmLCAiJTAyeDogIiwgcmVnKTsKKwkJCQlkZWJfaW5mbyhLRVJOX0NPTlQgIlxuIik7CisJCQlkZWJfaW5mbyhLRVJOX0RFQlVHICIlMDJ4OiIsIHJlZyk7CiAJCX0KIAkJaWYgKGFmOTAxNV9yZWFkX3JlZ19pMmMoZCwgQUY5MDE1X0kyQ19FRVBST00sIHJlZywgJnZhbCkgPT0gMCkKLQkJCXNwcmludGYoYnVmMiwgIiUwMnggIiwgdmFsKTsKKwkJCWRlYl9pbmZvKEtFUk5fQ09OVCAiICUwMngiLCB2YWwpOwogCQllbHNlCi0JCQlzdHJjcHkoYnVmMiwgIi0tICIpOwotCQlzdHJjYXQoYnVmLCBidWYyKTsKKwkJCWRlYl9pbmZvKEtFUk5fQ09OVCAiIC0tIik7CiAJCWlmIChyZWcgPT0gMHhmZikKIAkJCWJyZWFrOwogCX0KLQlkZWJfaW5mbygiJXNcbiIsIGJ1Zik7CisJZGViX2luZm8oS0VSTl9DT05UICJcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDQ1LDggKzEwNDMsOCBAQAogCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKIAogCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemU7IGkrKykgewotCQlpZiAoIWJ1ZlsxXSAmJiBrZXltYXBbaV0uY3VzdG9tID09IGJ1ZlswXSAmJgotCQkgICAga2V5bWFwW2ldLmRhdGEgPT0gYnVmWzJdKSB7CisJCWlmICghYnVmWzFdICYmIHJjNV9jdXN0b20oJmtleW1hcFtpXSkgPT0gYnVmWzBdICYmCisJCSAgICByYzVfZGF0YSgma2V5bWFwW2ldKSA9PSBidWZbMl0pIHsKIAkJCSpldmVudCA9IGtleW1hcFtpXS5ldmVudDsKIAkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKIAkJCWJyZWFrOwpAQCAtMTI2Niw2ICsxMjY0LDcgQEAKIAl7VVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAgVVNCX1BJRF9DT05DRVBUUk9OSUNfQ1RWRElHUkNVKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfS1dPUkxEX01DODEwKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9LWUUsICAgICAgIFVTQl9QSURfR0VOSVVTX1RWR09fRFZCX1QwMyl9LAorLyogMjUgKi97VVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAgVVNCX1BJRF9LV09STERfMzk5VV8yKX0sCiAJezB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhZjkwMTVfdXNiX3RhYmxlKTsKQEAgLTEzNDYsNyArMTM0NSw4IEBACiAJCQl7CiAJCQkJLm5hbWUgPSAiS1dvcmxkIFBsdXNUViBEdWFsIERWQi1UIFN0aWNrICIgXAogCQkJCQkiKERWQi1UIDM5OVUpIiwKLQkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbNF0sIE5VTEx9LAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVs0XSwKKwkJCQkJICAgICAmYWY5MDE1X3VzYl90YWJsZVsyNV0sIE5VTEx9LAogCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKIAkJCX0sCiAJCQl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaAppbmRleCA4ZDgxYTE3Li5jNDFmMzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKQEAgLTEyMSwyMSArMTIxLDIxIEBACiAKIC8qIExlYWR0ZWsgV2luRmFzdCBEVFYgRG9uZ2xlIEdvbGQgKi8KIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgYWY5MDE1X3JjX2tleXNfbGVhZHRla1tdID0gewotCXsgMHgwMCwgMHgxZSwgS0VZXzEgfSwKLQl7IDB4MDAsIDB4MWYsIEtFWV8yIH0sCi0JeyAweDAwLCAweDIwLCBLRVlfMyB9LAotCXsgMHgwMCwgMHgyMSwgS0VZXzQgfSwKLQl7IDB4MDAsIDB4MjIsIEtFWV81IH0sCi0JeyAweDAwLCAweDIzLCBLRVlfNiB9LAotCXsgMHgwMCwgMHgyNCwgS0VZXzcgfSwKLQl7IDB4MDAsIDB4MjUsIEtFWV84IH0sCi0JeyAweDAwLCAweDI2LCBLRVlfOSB9LAotCXsgMHgwMCwgMHgyNywgS0VZXzAgfSwKLQl7IDB4MDAsIDB4MjgsIEtFWV9FTlRFUiB9LAotCXsgMHgwMCwgMHg0ZiwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDAwLCAweDUwLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwMCwgMHg1MSwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDAwLCAweDUyLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAwMWUsIEtFWV8xIH0sCisJeyAweDAwMWYsIEtFWV8yIH0sCisJeyAweDAwMjAsIEtFWV8zIH0sCisJeyAweDAwMjEsIEtFWV80IH0sCisJeyAweDAwMjIsIEtFWV81IH0sCisJeyAweDAwMjMsIEtFWV82IH0sCisJeyAweDAwMjQsIEtFWV83IH0sCisJeyAweDAwMjUsIEtFWV84IH0sCisJeyAweDAwMjYsIEtFWV85IH0sCisJeyAweDAwMjcsIEtFWV8wIH0sCisJeyAweDAwMjgsIEtFWV9FTlRFUiB9LAorCXsgMHgwMDRmLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDA1MCwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDA1MSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDAwNTIsIEtFWV9DSEFOTkVMVVAgfSwKIH07CiAKIHN0YXRpYyB1OCBhZjkwMTVfaXJfdGFibGVfbGVhZHRla1tdID0gewpAQCAtMTkzLDYwICsxOTMsNjAgQEAKIAogLyogVHdpbkhhbiBBenVyZVdhdmUgQUQtVFU3MDAoNzA0SikgKi8KIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgYWY5MDE1X3JjX2tleXNfdHdpbmhhbltdID0gewotCXsgMHgwNSwgMHgzZiwgS0VZX1BPV0VSIH0sCi0JeyAweDAwLCAweDE5LCBLRVlfRkFWT1JJVEVTIH0sICAgIC8qIEZhdm9yaXRlIExpc3QgKi8KLQl7IDB4MDAsIDB4MDQsIEtFWV9URVhUIH0sICAgICAgICAgLyogVGVsZXRleHQgKi8KLQl7IDB4MDAsIDB4MGUsIEtFWV9QT1dFUiB9LAotCXsgMHgwMCwgMHgwZSwgS0VZX0lORk8gfSwgICAgICAgICAvKiBQcmV2aWV3ICovCi0JeyAweDAwLCAweDA4LCBLRVlfRVBHIH0sICAgICAgICAgIC8qIEluZm8vRVBHICovCi0JeyAweDAwLCAweDBmLCBLRVlfTElTVCB9LCAgICAgICAgIC8qIFJlY29yZCBMaXN0ICovCi0JeyAweDAwLCAweDFlLCBLRVlfMSB9LAotCXsgMHgwMCwgMHgxZiwgS0VZXzIgfSwKLQl7IDB4MDAsIDB4MjAsIEtFWV8zIH0sCi0JeyAweDAwLCAweDIxLCBLRVlfNCB9LAotCXsgMHgwMCwgMHgyMiwgS0VZXzUgfSwKLQl7IDB4MDAsIDB4MjMsIEtFWV82IH0sCi0JeyAweDAwLCAweDI0LCBLRVlfNyB9LAotCXsgMHgwMCwgMHgyNSwgS0VZXzggfSwKLQl7IDB4MDAsIDB4MjYsIEtFWV85IH0sCi0JeyAweDAwLCAweDI3LCBLRVlfMCB9LAotCXsgMHgwMCwgMHgyOSwgS0VZX0NBTkNFTCB9LCAgICAgICAvKiBDYW5jZWwgKi8KLQl7IDB4MDAsIDB4NGMsIEtFWV9DTEVBUiB9LCAgICAgICAgLyogQ2xlYXIgKi8KLQl7IDB4MDAsIDB4MmEsIEtFWV9CQUNLIH0sICAgICAgICAgLyogQmFjayAqLwotCXsgMHgwMCwgMHgyYiwgS0VZX1RBQiB9LCAgICAgICAgICAvKiBUYWIgKi8KLQl7IDB4MDAsIDB4NTIsIEtFWV9VUCB9LCAgICAgICAgICAgLyogdXAgYXJyb3cgKi8KLQl7IDB4MDAsIDB4NTEsIEtFWV9ET1dOIH0sICAgICAgICAgLyogZG93biBhcnJvdyAqLwotCXsgMHgwMCwgMHg0ZiwgS0VZX1JJR0hUIH0sICAgICAgICAvKiByaWdodCBhcnJvdyAqLwotCXsgMHgwMCwgMHg1MCwgS0VZX0xFRlQgfSwgICAgICAgICAvKiBsZWZ0IGFycm93ICovCi0JeyAweDAwLCAweDI4LCBLRVlfRU5URVIgfSwgICAgICAgIC8qIEVudGVyIC8gb2sgKi8KLQl7IDB4MDIsIDB4NTIsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwMiwgMHg1MSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MDAsIDB4NGUsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwMCwgMHg0YiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwMCwgMHg0YSwgS0VZX1JFQ09SRCB9LAotCXsgMHgwMSwgMHgxMSwgS0VZX1BMQVkgfSwKLQl7IDB4MDAsIDB4MTcsIEtFWV9QQVVTRSB9LAotCXsgMHgwMCwgMHgwYywgS0VZX1JFV0lORCB9LCAgICAgICAvKiBGUiA8PCAqLwotCXsgMHgwMCwgMHgxMSwgS0VZX0ZBU1RGT1JXQVJEIH0sICAvKiBGRiA+PiAqLwotCXsgMHgwMSwgMHgxNSwgS0VZX1BSRVZJT1VTIH0sICAgICAvKiBSZXBsYXkgKi8KLQl7IDB4MDEsIDB4MGUsIEtFWV9ORVhUIH0sICAgICAgICAgLyogU2tpcCAqLwotCXsgMHgwMCwgMHgxMywgS0VZX0NBTUVSQSB9LCAgICAgICAvKiBDYXB0dXJlICovCi0JeyAweDAxLCAweDBmLCBLRVlfTEFOR1VBR0UgfSwgICAgIC8qIFNBUCAqLwotCXsgMHgwMSwgMHgxMywgS0VZX1RWMiB9LCAgICAgICAgICAvKiBQSVAgKi8KLQl7IDB4MDAsIDB4MWQsIEtFWV9aT09NIH0sICAgICAgICAgLyogRnVsbCBTY3JlZW4gKi8KLQl7IDB4MDEsIDB4MTcsIEtFWV9TVUJUSVRMRSB9LCAgICAgLyogU3VidGl0bGUgLyBDQyAqLwotCXsgMHgwMCwgMHgxMCwgS0VZX01VVEUgfSwKLQl7IDB4MDEsIDB4MTksIEtFWV9BVURJTyB9LCAgICAgICAgLyogTC9SICovIC8qIFRPRE8gYmV0dGVyIGV2ZW50ICovCi0JeyAweDAxLCAweDE2LCBLRVlfU0xFRVAgfSwgICAgICAgIC8qIEhpYmVybmF0ZSAqLwotCXsgMHgwMSwgMHgxNiwgS0VZX1NXSVRDSFZJREVPTU9ERSB9LAorCXsgMHgwNTNmLCBLRVlfUE9XRVIgfSwKKwl7IDB4MDAxOSwgS0VZX0ZBVk9SSVRFUyB9LCAgICAvKiBGYXZvcml0ZSBMaXN0ICovCisJeyAweDAwMDQsIEtFWV9URVhUIH0sICAgICAgICAgLyogVGVsZXRleHQgKi8KKwl7IDB4MDAwZSwgS0VZX1BPV0VSIH0sCisJeyAweDAwMGUsIEtFWV9JTkZPIH0sICAgICAgICAgLyogUHJldmlldyAqLworCXsgMHgwMDA4LCBLRVlfRVBHIH0sICAgICAgICAgIC8qIEluZm8vRVBHICovCisJeyAweDAwMGYsIEtFWV9MSVNUIH0sICAgICAgICAgLyogUmVjb3JkIExpc3QgKi8KKwl7IDB4MDAxZSwgS0VZXzEgfSwKKwl7IDB4MDAxZiwgS0VZXzIgfSwKKwl7IDB4MDAyMCwgS0VZXzMgfSwKKwl7IDB4MDAyMSwgS0VZXzQgfSwKKwl7IDB4MDAyMiwgS0VZXzUgfSwKKwl7IDB4MDAyMywgS0VZXzYgfSwKKwl7IDB4MDAyNCwgS0VZXzcgfSwKKwl7IDB4MDAyNSwgS0VZXzggfSwKKwl7IDB4MDAyNiwgS0VZXzkgfSwKKwl7IDB4MDAyNywgS0VZXzAgfSwKKwl7IDB4MDAyOSwgS0VZX0NBTkNFTCB9LCAgICAgICAvKiBDYW5jZWwgKi8KKwl7IDB4MDA0YywgS0VZX0NMRUFSIH0sICAgICAgICAvKiBDbGVhciAqLworCXsgMHgwMDJhLCBLRVlfQkFDSyB9LCAgICAgICAgIC8qIEJhY2sgKi8KKwl7IDB4MDAyYiwgS0VZX1RBQiB9LCAgICAgICAgICAvKiBUYWIgKi8KKwl7IDB4MDA1MiwgS0VZX1VQIH0sICAgICAgICAgICAvKiB1cCBhcnJvdyAqLworCXsgMHgwMDUxLCBLRVlfRE9XTiB9LCAgICAgICAgIC8qIGRvd24gYXJyb3cgKi8KKwl7IDB4MDA0ZiwgS0VZX1JJR0hUIH0sICAgICAgICAvKiByaWdodCBhcnJvdyAqLworCXsgMHgwMDUwLCBLRVlfTEVGVCB9LCAgICAgICAgIC8qIGxlZnQgYXJyb3cgKi8KKwl7IDB4MDAyOCwgS0VZX0VOVEVSIH0sICAgICAgICAvKiBFbnRlciAvIG9rICovCisJeyAweDAyNTIsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwMjUxLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMDRlLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDA0YiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwMDRhLCBLRVlfUkVDT1JEIH0sCisJeyAweDAxMTEsIEtFWV9QTEFZIH0sCisJeyAweDAwMTcsIEtFWV9QQVVTRSB9LAorCXsgMHgwMDBjLCBLRVlfUkVXSU5EIH0sICAgICAgIC8qIEZSIDw8ICovCisJeyAweDAwMTEsIEtFWV9GQVNURk9SV0FSRCB9LCAgLyogRkYgPj4gKi8KKwl7IDB4MDExNSwgS0VZX1BSRVZJT1VTIH0sICAgICAvKiBSZXBsYXkgKi8KKwl7IDB4MDEwZSwgS0VZX05FWFQgfSwgICAgICAgICAvKiBTa2lwICovCisJeyAweDAwMTMsIEtFWV9DQU1FUkEgfSwgICAgICAgLyogQ2FwdHVyZSAqLworCXsgMHgwMTBmLCBLRVlfTEFOR1VBR0UgfSwgICAgIC8qIFNBUCAqLworCXsgMHgwMTEzLCBLRVlfVFYyIH0sICAgICAgICAgIC8qIFBJUCAqLworCXsgMHgwMDFkLCBLRVlfWk9PTSB9LCAgICAgICAgIC8qIEZ1bGwgU2NyZWVuICovCisJeyAweDAxMTcsIEtFWV9TVUJUSVRMRSB9LCAgICAgLyogU3VidGl0bGUgLyBDQyAqLworCXsgMHgwMDEwLCBLRVlfTVVURSB9LAorCXsgMHgwMTE5LCBLRVlfQVVESU8gfSwgICAgICAgIC8qIEwvUiAqLyAvKiBUT0RPIGJldHRlciBldmVudCAqLworCXsgMHgwMTE2LCBLRVlfU0xFRVAgfSwgICAgICAgIC8qIEhpYmVybmF0ZSAqLworCXsgMHgwMTE2LCBLRVlfU1dJVENIVklERU9NT0RFIH0sCiAJCQkJCSAgLyogQS9WICovIC8qIFRPRE8gZG9lcyBub3Qgd29yayAqLwotCXsgMHgwMCwgMHgwNiwgS0VZX0FHQUlOIH0sICAgICAgICAvKiBSZWNhbGwgKi8KLQl7IDB4MDEsIDB4MTYsIEtFWV9LUFBMVVMgfSwgICAgICAgLyogWm9vbSsgKi8gLyogVE9ETyBkb2VzIG5vdCB3b3JrICovCi0JeyAweDAxLCAweDE2LCBLRVlfS1BNSU5VUyB9LCAgICAgIC8qIFpvb20tICovIC8qIFRPRE8gZG9lcyBub3Qgd29yayAqLwotCXsgMHgwMiwgMHgxNSwgS0VZX1JFRCB9LAotCXsgMHgwMiwgMHgwYSwgS0VZX0dSRUVOIH0sCi0JeyAweDAyLCAweDFjLCBLRVlfWUVMTE9XIH0sCi0JeyAweDAyLCAweDA1LCBLRVlfQkxVRSB9LAorCXsgMHgwMDA2LCBLRVlfQUdBSU4gfSwgICAgICAgIC8qIFJlY2FsbCAqLworCXsgMHgwMTE2LCBLRVlfS1BQTFVTIH0sICAgICAgIC8qIFpvb20rICovIC8qIFRPRE8gZG9lcyBub3Qgd29yayAqLworCXsgMHgwMTE2LCBLRVlfS1BNSU5VUyB9LCAgICAgIC8qIFpvb20tICovIC8qIFRPRE8gZG9lcyBub3Qgd29yayAqLworCXsgMHgwMjE1LCBLRVlfUkVEIH0sCisJeyAweDAyMGEsIEtFWV9HUkVFTiB9LAorCXsgMHgwMjFjLCBLRVlfWUVMTE9XIH0sCisJeyAweDAyMDUsIEtFWV9CTFVFIH0sCiB9OwogCiBzdGF0aWMgdTggYWY5MDE1X2lyX3RhYmxlX3R3aW5oYW5bXSA9IHsKQEAgLTMwNCwyNCArMzA0LDI0IEBACiAKIC8qIEEtTGluayBEVFUobSkgKi8KIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgYWY5MDE1X3JjX2tleXNfYV9saW5rW10gPSB7Ci0JeyAweDAwLCAweDFlLCBLRVlfMSB9LAotCXsgMHgwMCwgMHgxZiwgS0VZXzIgfSwKLQl7IDB4MDAsIDB4MjAsIEtFWV8zIH0sCi0JeyAweDAwLCAweDIxLCBLRVlfNCB9LAotCXsgMHgwMCwgMHgyMiwgS0VZXzUgfSwKLQl7IDB4MDAsIDB4MjMsIEtFWV82IH0sCi0JeyAweDAwLCAweDI0LCBLRVlfNyB9LAotCXsgMHgwMCwgMHgyNSwgS0VZXzggfSwKLQl7IDB4MDAsIDB4MjYsIEtFWV85IH0sCi0JeyAweDAwLCAweDI3LCBLRVlfMCB9LAotCXsgMHgwMCwgMHgyZSwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwMCwgMHgyZCwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDA0LCAweDI4LCBLRVlfWk9PTSB9LAotCXsgMHgwMCwgMHg0MSwgS0VZX01VVEUgfSwKLQl7IDB4MDAsIDB4NDIsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDAwLCAweDQzLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MDAsIDB4NDQsIEtFWV9HT1RPIH0sICAgICAgICAgLyoganVtcCAqLwotCXsgMHgwNSwgMHg0NSwgS0VZX1BPV0VSIH0sCisJeyAweDAwMWUsIEtFWV8xIH0sCisJeyAweDAwMWYsIEtFWV8yIH0sCisJeyAweDAwMjAsIEtFWV8zIH0sCisJeyAweDAwMjEsIEtFWV80IH0sCisJeyAweDAwMjIsIEtFWV81IH0sCisJeyAweDAwMjMsIEtFWV82IH0sCisJeyAweDAwMjQsIEtFWV83IH0sCisJeyAweDAwMjUsIEtFWV84IH0sCisJeyAweDAwMjYsIEtFWV85IH0sCisJeyAweDAwMjcsIEtFWV8wIH0sCisJeyAweDAwMmUsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDAyZCwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDA0MjgsIEtFWV9aT09NIH0sCisJeyAweDAwNDEsIEtFWV9NVVRFIH0sCisJeyAweDAwNDIsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAwNDMsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwMDQ0LCBLRVlfR09UTyB9LCAgICAgICAgIC8qIGp1bXAgKi8KKwl7IDB4MDU0NSwgS0VZX1BPV0VSIH0sCiB9OwogCiBzdGF0aWMgdTggYWY5MDE1X2lyX3RhYmxlX2FfbGlua1tdID0gewpAQCAtMzQ3LDI0ICszNDcsMjQgQEAKIAogLyogTVNJIERJR0lWT1ggbWluaSBJSSBWMy4wICovCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGFmOTAxNV9yY19rZXlzX21zaVtdID0gewotCXsgMHgwMCwgMHgxZSwgS0VZXzEgfSwKLQl7IDB4MDAsIDB4MWYsIEtFWV8yIH0sCi0JeyAweDAwLCAweDIwLCBLRVlfMyB9LAotCXsgMHgwMCwgMHgyMSwgS0VZXzQgfSwKLQl7IDB4MDAsIDB4MjIsIEtFWV81IH0sCi0JeyAweDAwLCAweDIzLCBLRVlfNiB9LAotCXsgMHgwMCwgMHgyNCwgS0VZXzcgfSwKLQl7IDB4MDAsIDB4MjUsIEtFWV84IH0sCi0JeyAweDAwLCAweDI2LCBLRVlfOSB9LAotCXsgMHgwMCwgMHgyNywgS0VZXzAgfSwKLQl7IDB4MDMsIDB4MGYsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MDMsIDB4MGUsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwMCwgMHg0MiwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MDAsIDB4NDMsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwNSwgMHg0NSwgS0VZX1BPV0VSIH0sCi0JeyAweDAwLCAweDUyLCBLRVlfVVAgfSwgICAgICAgICAgIC8qIHVwICovCi0JeyAweDAwLCAweDUxLCBLRVlfRE9XTiB9LCAgICAgICAgIC8qIGRvd24gKi8KLQl7IDB4MDAsIDB4MjgsIEtFWV9FTlRFUiB9LAorCXsgMHgwMDFlLCBLRVlfMSB9LAorCXsgMHgwMDFmLCBLRVlfMiB9LAorCXsgMHgwMDIwLCBLRVlfMyB9LAorCXsgMHgwMDIxLCBLRVlfNCB9LAorCXsgMHgwMDIyLCBLRVlfNSB9LAorCXsgMHgwMDIzLCBLRVlfNiB9LAorCXsgMHgwMDI0LCBLRVlfNyB9LAorCXsgMHgwMDI1LCBLRVlfOCB9LAorCXsgMHgwMDI2LCBLRVlfOSB9LAorCXsgMHgwMDI3LCBLRVlfMCB9LAorCXsgMHgwMzBmLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAzMGUsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwMDQyLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMDQzLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDU0NSwgS0VZX1BPV0VSIH0sCisJeyAweDAwNTIsIEtFWV9VUCB9LCAgICAgICAgICAgLyogdXAgKi8KKwl7IDB4MDA1MSwgS0VZX0RPV04gfSwgICAgICAgICAvKiBkb3duICovCisJeyAweDAwMjgsIEtFWV9FTlRFUiB9LAogfTsKIAogc3RhdGljIHU4IGFmOTAxNV9pcl90YWJsZV9tc2lbXSA9IHsKQEAgLTM5MCw0MiArMzkwLDQyIEBACiAKIC8qIE1ZR0lDVFYgVTcxOCAqLwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBhZjkwMTVfcmNfa2V5c19teWdpY3R2W10gPSB7Ci0JeyAweDAwLCAweDNkLCBLRVlfU1dJVENIVklERU9NT0RFIH0sCisJeyAweDAwM2QsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwKIAkJCQkJICAvKiBUViAvIEFWICovCi0JeyAweDA1LCAweDQ1LCBLRVlfUE9XRVIgfSwKLQl7IDB4MDAsIDB4MWUsIEtFWV8xIH0sCi0JeyAweDAwLCAweDFmLCBLRVlfMiB9LAotCXsgMHgwMCwgMHgyMCwgS0VZXzMgfSwKLQl7IDB4MDAsIDB4MjEsIEtFWV80IH0sCi0JeyAweDAwLCAweDIyLCBLRVlfNSB9LAotCXsgMHgwMCwgMHgyMywgS0VZXzYgfSwKLQl7IDB4MDAsIDB4MjQsIEtFWV83IH0sCi0JeyAweDAwLCAweDI1LCBLRVlfOCB9LAotCXsgMHgwMCwgMHgyNiwgS0VZXzkgfSwKLQl7IDB4MDAsIDB4MjcsIEtFWV8wIH0sCi0JeyAweDAwLCAweDQxLCBLRVlfTVVURSB9LAotCXsgMHgwMCwgMHgyYSwgS0VZX0VTQyB9LCAgICAgICAgICAvKiBFc2MgKi8KLQl7IDB4MDAsIDB4MmUsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MDAsIDB4MmQsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwMCwgMHg0MiwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MDAsIDB4NDMsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwMCwgMHg1MiwgS0VZX1VQIH0sICAgICAgICAgICAvKiB1cCBhcnJvdyAqLwotCXsgMHgwMCwgMHg1MSwgS0VZX0RPV04gfSwgICAgICAgICAvKiBkb3duIGFycm93ICovCi0JeyAweDAwLCAweDRmLCBLRVlfUklHSFQgfSwgICAgICAgIC8qIHJpZ2h0IGFycm93ICovCi0JeyAweDAwLCAweDUwLCBLRVlfTEVGVCB9LCAgICAgICAgIC8qIGxlZnQgYXJyb3cgKi8KLQl7IDB4MDAsIDB4MjgsIEtFWV9FTlRFUiB9LCAgICAgICAgLyogb2sgKi8KLQl7IDB4MDEsIDB4MTUsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MDMsIDB4MTMsIEtFWV9QTEFZIH0sCi0JeyAweDAxLCAweDEzLCBLRVlfUEFVU0UgfSwKLQl7IDB4MDEsIDB4MTYsIEtFWV9TVE9QIH0sCi0JeyAweDAzLCAweDA3LCBLRVlfUkVXSU5EIH0sICAgICAgIC8qIEZSIDw8ICovCi0JeyAweDAzLCAweDA5LCBLRVlfRkFTVEZPUldBUkQgfSwgIC8qIEZGID4+ICovCi0JeyAweDAwLCAweDNiLCBLRVlfVElNRSB9LCAgICAgICAgIC8qIFRpbWVTaGlmdCAqLwotCXsgMHgwMCwgMHgzZSwgS0VZX0NBTUVSQSB9LCAgICAgICAvKiBTbmFwc2hvdCAqLwotCXsgMHgwMywgMHgxNiwgS0VZX0NZQ0xFV0lORE9XUyB9LCAvKiB5ZWxsb3csIG1pbiAvIG1heCAqLwotCXsgMHgwMCwgMHgwMCwgS0VZX1pPT00gfSwgICAgICAgICAvKiAnc2VsZWN0JyAoPykgKi8KLQl7IDB4MDMsIDB4MTYsIEtFWV9TSFVGRkxFIH0sICAgICAgLyogU2h1ZmZsZSAqLwotCXsgMHgwMywgMHg0NSwgS0VZX1BPV0VSIH0sCisJeyAweDA1NDUsIEtFWV9QT1dFUiB9LAorCXsgMHgwMDFlLCBLRVlfMSB9LAorCXsgMHgwMDFmLCBLRVlfMiB9LAorCXsgMHgwMDIwLCBLRVlfMyB9LAorCXsgMHgwMDIxLCBLRVlfNCB9LAorCXsgMHgwMDIyLCBLRVlfNSB9LAorCXsgMHgwMDIzLCBLRVlfNiB9LAorCXsgMHgwMDI0LCBLRVlfNyB9LAorCXsgMHgwMDI1LCBLRVlfOCB9LAorCXsgMHgwMDI2LCBLRVlfOSB9LAorCXsgMHgwMDI3LCBLRVlfMCB9LAorCXsgMHgwMDQxLCBLRVlfTVVURSB9LAorCXsgMHgwMDJhLCBLRVlfRVNDIH0sICAgICAgICAgIC8qIEVzYyAqLworCXsgMHgwMDJlLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAwMmQsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwMDQyLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMDQzLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDA1MiwgS0VZX1VQIH0sICAgICAgICAgICAvKiB1cCBhcnJvdyAqLworCXsgMHgwMDUxLCBLRVlfRE9XTiB9LCAgICAgICAgIC8qIGRvd24gYXJyb3cgKi8KKwl7IDB4MDA0ZiwgS0VZX1JJR0hUIH0sICAgICAgICAvKiByaWdodCBhcnJvdyAqLworCXsgMHgwMDUwLCBLRVlfTEVGVCB9LCAgICAgICAgIC8qIGxlZnQgYXJyb3cgKi8KKwl7IDB4MDAyOCwgS0VZX0VOVEVSIH0sICAgICAgICAvKiBvayAqLworCXsgMHgwMTE1LCBLRVlfUkVDT1JEIH0sCisJeyAweDAzMTMsIEtFWV9QTEFZIH0sCisJeyAweDAxMTMsIEtFWV9QQVVTRSB9LAorCXsgMHgwMTE2LCBLRVlfU1RPUCB9LAorCXsgMHgwMzA3LCBLRVlfUkVXSU5EIH0sICAgICAgIC8qIEZSIDw8ICovCisJeyAweDAzMDksIEtFWV9GQVNURk9SV0FSRCB9LCAgLyogRkYgPj4gKi8KKwl7IDB4MDAzYiwgS0VZX1RJTUUgfSwgICAgICAgICAvKiBUaW1lU2hpZnQgKi8KKwl7IDB4MDAzZSwgS0VZX0NBTUVSQSB9LCAgICAgICAvKiBTbmFwc2hvdCAqLworCXsgMHgwMzE2LCBLRVlfQ1lDTEVXSU5ET1dTIH0sIC8qIHllbGxvdywgbWluIC8gbWF4ICovCisJeyAweDAwMDAsIEtFWV9aT09NIH0sICAgICAgICAgLyogJ3NlbGVjdCcgKD8pICovCisJeyAweDAzMTYsIEtFWV9TSFVGRkxFIH0sICAgICAgLyogU2h1ZmZsZSAqLworCXsgMHgwMzQ1LCBLRVlfUE9XRVIgfSwKIH07CiAKIHN0YXRpYyB1OCBhZjkwMTVfaXJfdGFibGVfbXlnaWN0dltdID0gewpAQCAtNTE2LDQxICs1MTYsNDEgQEAKIAogLyogQXZlck1lZGlhIFZvbGFyIFggKi8KIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhW10gPSB7Ci0JeyAweDA1LCAweDNkLCBLRVlfUFJPRzEgfSwgICAgICAgLyogU09VUkNFICovCi0JeyAweDA1LCAweDEyLCBLRVlfUE9XRVIgfSwgICAgICAgLyogUE9XRVIgKi8KLQl7IDB4MDUsIDB4MWUsIEtFWV8xIH0sICAgICAgICAgICAvKiAxICovCi0JeyAweDA1LCAweDFmLCBLRVlfMiB9LCAgICAgICAgICAgLyogMiAqLwotCXsgMHgwNSwgMHgyMCwgS0VZXzMgfSwgICAgICAgICAgIC8qIDMgKi8KLQl7IDB4MDUsIDB4MjEsIEtFWV80IH0sICAgICAgICAgICAvKiA0ICovCi0JeyAweDA1LCAweDIyLCBLRVlfNSB9LCAgICAgICAgICAgLyogNSAqLwotCXsgMHgwNSwgMHgyMywgS0VZXzYgfSwgICAgICAgICAgIC8qIDYgKi8KLQl7IDB4MDUsIDB4MjQsIEtFWV83IH0sICAgICAgICAgICAvKiA3ICovCi0JeyAweDA1LCAweDI1LCBLRVlfOCB9LCAgICAgICAgICAgLyogOCAqLwotCXsgMHgwNSwgMHgyNiwgS0VZXzkgfSwgICAgICAgICAgIC8qIDkgKi8KLQl7IDB4MDUsIDB4M2YsIEtFWV9MRUZUIH0sICAgICAgICAvKiBMIC8gRElTUExBWSAqLwotCXsgMHgwNSwgMHgyNywgS0VZXzAgfSwgICAgICAgICAgIC8qIDAgKi8KLQl7IDB4MDUsIDB4MGYsIEtFWV9SSUdIVCB9LCAgICAgICAvKiBSIC8gQ0ggUlROICovCi0JeyAweDA1LCAweDE4LCBLRVlfUFJPRzIgfSwgICAgICAgLyogU05BUCBTSE9UICovCi0JeyAweDA1LCAweDFjLCBLRVlfUFJPRzMgfSwgICAgICAgLyogMTYtQ0ggUFJFViAqLwotCXsgMHgwNSwgMHgyZCwgS0VZX1ZPTFVNRURPV04gfSwgIC8qIFZPTCBET1dOICovCi0JeyAweDA1LCAweDNlLCBLRVlfWk9PTSB9LCAgICAgICAgLyogRlVMTCBTQ1JFRU4gKi8KLQl7IDB4MDUsIDB4MmUsIEtFWV9WT0xVTUVVUCB9LCAgICAvKiBWT0wgVVAgKi8KLQl7IDB4MDUsIDB4MTAsIEtFWV9NVVRFIH0sICAgICAgICAvKiBNVVRFICovCi0JeyAweDA1LCAweDA0LCBLRVlfQVVESU8gfSwgICAgICAgLyogQVVESU8gKi8KLQl7IDB4MDUsIDB4MTUsIEtFWV9SRUNPUkQgfSwgICAgICAvKiBSRUNPUkQgKi8KLQl7IDB4MDUsIDB4MTEsIEtFWV9QTEFZIH0sICAgICAgICAvKiBQTEFZICovCi0JeyAweDA1LCAweDE2LCBLRVlfU1RPUCB9LCAgICAgICAgLyogU1RPUCAqLwotCXsgMHgwNSwgMHgwYywgS0VZX1BMQVlQQVVTRSB9LCAgIC8qIFRJTUVTSElGVCAvIFBBVVNFICovCi0JeyAweDA1LCAweDA1LCBLRVlfQkFDSyB9LCAgICAgICAgLyogPDwgLyBSRUQgKi8KLQl7IDB4MDUsIDB4MDksIEtFWV9GT1JXQVJEIH0sICAgICAvKiA+PiAvIFlFTExPVyAqLwotCXsgMHgwNSwgMHgxNywgS0VZX1RFWFQgfSwgICAgICAgIC8qIFRFTEVURVhUICovCi0JeyAweDA1LCAweDBhLCBLRVlfRVBHIH0sICAgICAgICAgLyogRVBHICovCi0JeyAweDA1LCAweDEzLCBLRVlfTUVOVSB9LCAgICAgICAgLyogTUVOVSAqLworCXsgMHgwNTNkLCBLRVlfUFJPRzEgfSwgICAgICAgLyogU09VUkNFICovCisJeyAweDA1MTIsIEtFWV9QT1dFUiB9LCAgICAgICAvKiBQT1dFUiAqLworCXsgMHgwNTFlLCBLRVlfMSB9LCAgICAgICAgICAgLyogMSAqLworCXsgMHgwNTFmLCBLRVlfMiB9LCAgICAgICAgICAgLyogMiAqLworCXsgMHgwNTIwLCBLRVlfMyB9LCAgICAgICAgICAgLyogMyAqLworCXsgMHgwNTIxLCBLRVlfNCB9LCAgICAgICAgICAgLyogNCAqLworCXsgMHgwNTIyLCBLRVlfNSB9LCAgICAgICAgICAgLyogNSAqLworCXsgMHgwNTIzLCBLRVlfNiB9LCAgICAgICAgICAgLyogNiAqLworCXsgMHgwNTI0LCBLRVlfNyB9LCAgICAgICAgICAgLyogNyAqLworCXsgMHgwNTI1LCBLRVlfOCB9LCAgICAgICAgICAgLyogOCAqLworCXsgMHgwNTI2LCBLRVlfOSB9LCAgICAgICAgICAgLyogOSAqLworCXsgMHgwNTNmLCBLRVlfTEVGVCB9LCAgICAgICAgLyogTCAvIERJU1BMQVkgKi8KKwl7IDB4MDUyNywgS0VZXzAgfSwgICAgICAgICAgIC8qIDAgKi8KKwl7IDB4MDUwZiwgS0VZX1JJR0hUIH0sICAgICAgIC8qIFIgLyBDSCBSVE4gKi8KKwl7IDB4MDUxOCwgS0VZX1BST0cyIH0sICAgICAgIC8qIFNOQVAgU0hPVCAqLworCXsgMHgwNTFjLCBLRVlfUFJPRzMgfSwgICAgICAgLyogMTYtQ0ggUFJFViAqLworCXsgMHgwNTJkLCBLRVlfVk9MVU1FRE9XTiB9LCAgLyogVk9MIERPV04gKi8KKwl7IDB4MDUzZSwgS0VZX1pPT00gfSwgICAgICAgIC8qIEZVTEwgU0NSRUVOICovCisJeyAweDA1MmUsIEtFWV9WT0xVTUVVUCB9LCAgICAvKiBWT0wgVVAgKi8KKwl7IDB4MDUxMCwgS0VZX01VVEUgfSwgICAgICAgIC8qIE1VVEUgKi8KKwl7IDB4MDUwNCwgS0VZX0FVRElPIH0sICAgICAgIC8qIEFVRElPICovCisJeyAweDA1MTUsIEtFWV9SRUNPUkQgfSwgICAgICAvKiBSRUNPUkQgKi8KKwl7IDB4MDUxMSwgS0VZX1BMQVkgfSwgICAgICAgIC8qIFBMQVkgKi8KKwl7IDB4MDUxNiwgS0VZX1NUT1AgfSwgICAgICAgIC8qIFNUT1AgKi8KKwl7IDB4MDUwYywgS0VZX1BMQVlQQVVTRSB9LCAgIC8qIFRJTUVTSElGVCAvIFBBVVNFICovCisJeyAweDA1MDUsIEtFWV9CQUNLIH0sICAgICAgICAvKiA8PCAvIFJFRCAqLworCXsgMHgwNTA5LCBLRVlfRk9SV0FSRCB9LCAgICAgLyogPj4gLyBZRUxMT1cgKi8KKwl7IDB4MDUxNywgS0VZX1RFWFQgfSwgICAgICAgIC8qIFRFTEVURVhUICovCisJeyAweDA1MGEsIEtFWV9FUEcgfSwgICAgICAgICAvKiBFUEcgKi8KKwl7IDB4MDUxMywgS0VZX01FTlUgfSwgICAgICAgIC8qIE1FTlUgKi8KIAotCXsgMHgwNSwgMHgwZSwgS0VZX0NIQU5ORUxVUCB9LCAgIC8qIENIIFVQICovCi0JeyAweDA1LCAweDBkLCBLRVlfQ0hBTk5FTERPV04gfSwgLyogQ0ggRE9XTiAqLwotCXsgMHgwNSwgMHgxOSwgS0VZX0ZJUlNUIH0sICAgICAgIC8qIHw8PCAvIEdSRUVOICovCi0JeyAweDA1LCAweDA4LCBLRVlfTEFTVCB9LCAgICAgICAgLyogPj58IC8gQkxVRSAqLworCXsgMHgwNTBlLCBLRVlfQ0hBTk5FTFVQIH0sICAgLyogQ0ggVVAgKi8KKwl7IDB4MDUwZCwgS0VZX0NIQU5ORUxET1dOIH0sIC8qIENIIERPV04gKi8KKwl7IDB4MDUxOSwgS0VZX0ZJUlNUIH0sICAgICAgIC8qIHw8PCAvIEdSRUVOICovCisJeyAweDA1MDgsIEtFWV9MQVNUIH0sICAgICAgICAvKiA+PnwgLyBCTFVFICovCiB9OwogCiBzdGF0aWMgdTggYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYVtdID0gewpAQCAtNjIyLDM0ICs2MjIsMzQgQEAKIAogLyogRGlnaXR0cmFkZSBEVkItVCBVU0IgU3RpY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgYWY5MDE1X3JjX2tleXNfZGlnaXR0cmFkZVtdID0gewotCXsgMHgwMSwgMHgwZiwgS0VZX0xBU1QgfSwJLyogUkVUVVJOICovCi0JeyAweDA1LCAweDE3LCBLRVlfVEVYVCB9LAkvKiBURUxFVEVYVCAqLwotCXsgMHgwMSwgMHgwOCwgS0VZX0VQRyB9LAkvKiBFUEcgKi8KLQl7IDB4MDUsIDB4MTMsIEtFWV9QT1dFUiB9LAkvKiBQT1dFUiAqLwotCXsgMHgwMSwgMHgwOSwgS0VZX1pPT00gfSwJLyogRlVMTFNDUkVFTiAqLwotCXsgMHgwMCwgMHg0MCwgS0VZX0FVRElPIH0sCS8qIERVQUwgU09VTkQgKi8KLQl7IDB4MDAsIDB4MmMsIEtFWV9QUklOVCB9LAkvKiBTTkFQU0hPVCAqLwotCXsgMHgwNSwgMHgxNiwgS0VZX1NVQlRJVExFIH0sCS8qIFNVQlRJVExFICovCi0JeyAweDAwLCAweDUyLCBLRVlfQ0hBTk5FTFVQIH0sCS8qIENIIFVwICovCi0JeyAweDAwLCAweDUxLCBLRVlfQ0hBTk5FTERPV04gfSwvKiBDaCBEbiAqLwotCXsgMHgwMCwgMHg1NywgS0VZX1ZPTFVNRVVQIH0sCS8qIFZvbCBVcCAqLwotCXsgMHgwMCwgMHg1NiwgS0VZX1ZPTFVNRURPV04gfSwJLyogVm9sIERuICovCi0JeyAweDAxLCAweDEwLCBLRVlfTVVURSB9LAkvKiBNVVRFICovCi0JeyAweDAwLCAweDI3LCBLRVlfMCB9LAotCXsgMHgwMCwgMHgxZSwgS0VZXzEgfSwKLQl7IDB4MDAsIDB4MWYsIEtFWV8yIH0sCi0JeyAweDAwLCAweDIwLCBLRVlfMyB9LAotCXsgMHgwMCwgMHgyMSwgS0VZXzQgfSwKLQl7IDB4MDAsIDB4MjIsIEtFWV81IH0sCi0JeyAweDAwLCAweDIzLCBLRVlfNiB9LAotCXsgMHgwMCwgMHgyNCwgS0VZXzcgfSwKLQl7IDB4MDAsIDB4MjUsIEtFWV84IH0sCi0JeyAweDAwLCAweDI2LCBLRVlfOSB9LAotCXsgMHgwMSwgMHgxNywgS0VZX1BMQVlQQVVTRSB9LAkvKiBUSU1FU0hJRlQgKi8KLQl7IDB4MDEsIDB4MTUsIEtFWV9SRUNPUkQgfSwJLyogUkVDT1JEICovCi0JeyAweDAzLCAweDEzLCBLRVlfUExBWSB9LAkvKiBQTEFZICovCi0JeyAweDAxLCAweDE2LCBLRVlfU1RPUCB9LAkvKiBTVE9QICovCi0JeyAweDAxLCAweDEzLCBLRVlfUEFVU0UgfSwJLyogUEFVU0UgKi8KKwl7IDB4MDEwZiwgS0VZX0xBU1QgfSwJLyogUkVUVVJOICovCisJeyAweDA1MTcsIEtFWV9URVhUIH0sCS8qIFRFTEVURVhUICovCisJeyAweDAxMDgsIEtFWV9FUEcgfSwJLyogRVBHICovCisJeyAweDA1MTMsIEtFWV9QT1dFUiB9LAkvKiBQT1dFUiAqLworCXsgMHgwMTA5LCBLRVlfWk9PTSB9LAkvKiBGVUxMU0NSRUVOICovCisJeyAweDAwNDAsIEtFWV9BVURJTyB9LAkvKiBEVUFMIFNPVU5EICovCisJeyAweDAwMmMsIEtFWV9QUklOVCB9LAkvKiBTTkFQU0hPVCAqLworCXsgMHgwNTE2LCBLRVlfU1VCVElUTEUgfSwJLyogU1VCVElUTEUgKi8KKwl7IDB4MDA1MiwgS0VZX0NIQU5ORUxVUCB9LAkvKiBDSCBVcCAqLworCXsgMHgwMDUxLCBLRVlfQ0hBTk5FTERPV04gfSwvKiBDaCBEbiAqLworCXsgMHgwMDU3LCBLRVlfVk9MVU1FVVAgfSwJLyogVm9sIFVwICovCisJeyAweDAwNTYsIEtFWV9WT0xVTUVET1dOIH0sCS8qIFZvbCBEbiAqLworCXsgMHgwMTEwLCBLRVlfTVVURSB9LAkvKiBNVVRFICovCisJeyAweDAwMjcsIEtFWV8wIH0sCisJeyAweDAwMWUsIEtFWV8xIH0sCisJeyAweDAwMWYsIEtFWV8yIH0sCisJeyAweDAwMjAsIEtFWV8zIH0sCisJeyAweDAwMjEsIEtFWV80IH0sCisJeyAweDAwMjIsIEtFWV81IH0sCisJeyAweDAwMjMsIEtFWV82IH0sCisJeyAweDAwMjQsIEtFWV83IH0sCisJeyAweDAwMjUsIEtFWV84IH0sCisJeyAweDAwMjYsIEtFWV85IH0sCisJeyAweDAxMTcsIEtFWV9QTEFZUEFVU0UgfSwJLyogVElNRVNISUZUICovCisJeyAweDAxMTUsIEtFWV9SRUNPUkQgfSwJLyogUkVDT1JEICovCisJeyAweDAzMTMsIEtFWV9QTEFZIH0sCS8qIFBMQVkgKi8KKwl7IDB4MDExNiwgS0VZX1NUT1AgfSwJLyogU1RPUCAqLworCXsgMHgwMTEzLCBLRVlfUEFVU0UgfSwJLyogUEFVU0UgKi8KIH07CiAKIHN0YXRpYyB1OCBhZjkwMTVfaXJfdGFibGVfZGlnaXR0cmFkZVtdID0gewpAQCAtNjg1LDM0ICs2ODUsMzQgQEAKIAogLyogVFJFS1NUT1IgRFZCLVQgVVNCIFN0aWNrICovCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGFmOTAxNV9yY19rZXlzX3RyZWtzdG9yW10gPSB7Ci0JeyAweDA3LCAweDA0LCBLRVlfQUdBSU4gfSwJCS8qIEhvbWUgKi8KLQl7IDB4MDcsIDB4MDUsIEtFWV9NVVRFIH0sCQkvKiBNdXRlICovCi0JeyAweDA3LCAweDA2LCBLRVlfVVAgfSwJCQkvKiBVcCAqLwotCXsgMHgwNywgMHgwNywgS0VZX0RPV04gfSwJCS8qIERvd24gKi8KLQl7IDB4MDcsIDB4MDksIEtFWV9SSUdIVCB9LAkJLyogUmlnaHQgKi8KLQl7IDB4MDcsIDB4MGEsIEtFWV9FTlRFUiB9LAkJLyogT0sgKi8KLQl7IDB4MDcsIDB4MGIsIEtFWV9GQVNURk9SV0FSRCB9LAkvKiBGYXN0IGZvcndhcmQgKi8KLQl7IDB4MDcsIDB4MGMsIEtFWV9SRVdJTkQgfSwJCS8qIFJld2luZCAqLwotCXsgMHgwNywgMHgwZCwgS0VZX1BMQVkgfSwJCS8qIFBsYXkvUGF1c2UgKi8KLQl7IDB4MDcsIDB4MGUsIEtFWV9WT0xVTUVVUCB9LAkJLyogVm9sdW1lICsgKi8KLQl7IDB4MDcsIDB4MGYsIEtFWV9WT0xVTUVET1dOIH0sCQkvKiBWb2x1bWUgLSAqLwotCXsgMHgwNywgMHgxMCwgS0VZX1JFQ09SRCB9LAkJLyogUmVjb3JkICovCi0JeyAweDA3LCAweDExLCBLRVlfU1RPUCB9LAkJLyogU3RvcCAqLwotCXsgMHgwNywgMHgxMiwgS0VZX1pPT00gfSwJCS8qIFRWICovCi0JeyAweDA3LCAweDEzLCBLRVlfRVBHIH0sCQkvKiBJbmZvL0VQRyAqLwotCXsgMHgwNywgMHgxNCwgS0VZX0NIQU5ORUxET1dOIH0sCS8qIENoYW5uZWwgLSAqLwotCXsgMHgwNywgMHgxNSwgS0VZX0NIQU5ORUxVUCB9LAkJLyogQ2hhbm5lbCArICovCi0JeyAweDA3LCAweDFlLCBLRVlfMSB9LAotCXsgMHgwNywgMHgxZiwgS0VZXzIgfSwKLQl7IDB4MDcsIDB4MjAsIEtFWV8zIH0sCi0JeyAweDA3LCAweDIxLCBLRVlfNCB9LAotCXsgMHgwNywgMHgyMiwgS0VZXzUgfSwKLQl7IDB4MDcsIDB4MjMsIEtFWV82IH0sCi0JeyAweDA3LCAweDI0LCBLRVlfNyB9LAotCXsgMHgwNywgMHgyNSwgS0VZXzggfSwKLQl7IDB4MDcsIDB4MjYsIEtFWV85IH0sCi0JeyAweDA3LCAweDA4LCBLRVlfTEVGVCB9LAkJLyogTEVGVCAqLwotCXsgMHgwNywgMHgyNywgS0VZXzAgfSwKKwl7IDB4MDcwNCwgS0VZX0FHQUlOIH0sCQkvKiBIb21lICovCisJeyAweDA3MDUsIEtFWV9NVVRFIH0sCQkvKiBNdXRlICovCisJeyAweDA3MDYsIEtFWV9VUCB9LAkJCS8qIFVwICovCisJeyAweDA3MDcsIEtFWV9ET1dOIH0sCQkvKiBEb3duICovCisJeyAweDA3MDksIEtFWV9SSUdIVCB9LAkJLyogUmlnaHQgKi8KKwl7IDB4MDcwYSwgS0VZX0VOVEVSIH0sCQkvKiBPSyAqLworCXsgMHgwNzBiLCBLRVlfRkFTVEZPUldBUkQgfSwJLyogRmFzdCBmb3J3YXJkICovCisJeyAweDA3MGMsIEtFWV9SRVdJTkQgfSwJCS8qIFJld2luZCAqLworCXsgMHgwNzBkLCBLRVlfUExBWSB9LAkJLyogUGxheS9QYXVzZSAqLworCXsgMHgwNzBlLCBLRVlfVk9MVU1FVVAgfSwJCS8qIFZvbHVtZSArICovCisJeyAweDA3MGYsIEtFWV9WT0xVTUVET1dOIH0sCQkvKiBWb2x1bWUgLSAqLworCXsgMHgwNzEwLCBLRVlfUkVDT1JEIH0sCQkvKiBSZWNvcmQgKi8KKwl7IDB4MDcxMSwgS0VZX1NUT1AgfSwJCS8qIFN0b3AgKi8KKwl7IDB4MDcxMiwgS0VZX1pPT00gfSwJCS8qIFRWICovCisJeyAweDA3MTMsIEtFWV9FUEcgfSwJCS8qIEluZm8vRVBHICovCisJeyAweDA3MTQsIEtFWV9DSEFOTkVMRE9XTiB9LAkvKiBDaGFubmVsIC0gKi8KKwl7IDB4MDcxNSwgS0VZX0NIQU5ORUxVUCB9LAkJLyogQ2hhbm5lbCArICovCisJeyAweDA3MWUsIEtFWV8xIH0sCisJeyAweDA3MWYsIEtFWV8yIH0sCisJeyAweDA3MjAsIEtFWV8zIH0sCisJeyAweDA3MjEsIEtFWV80IH0sCisJeyAweDA3MjIsIEtFWV81IH0sCisJeyAweDA3MjMsIEtFWV82IH0sCisJeyAweDA3MjQsIEtFWV83IH0sCisJeyAweDA3MjUsIEtFWV84IH0sCisJeyAweDA3MjYsIEtFWV85IH0sCisJeyAweDA3MDgsIEtFWV9MRUZUIH0sCQkvKiBMRUZUICovCisJeyAweDA3MjcsIEtFWV8wIH0sCiB9OwogCiBzdGF0aWMgdTggYWY5MDE1X2lyX3RhYmxlX3RyZWtzdG9yW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYwppbmRleCBjNmU3YjQyLi43MzgxYWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKQEAgLTM4OSw4ICszODksOCBAQAogCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKIAogCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemU7IGkrKykgewotCQlpZiAoa2V5bWFwW2ldLmN1c3RvbSA9PSBpcmNvZGVbMF0gJiYKLQkJICAgIGtleW1hcFtpXS5kYXRhID09IGlyY29kZVsxXSkgeworCQlpZiAocmM1X2N1c3RvbSgma2V5bWFwW2ldKSA9PSBpcmNvZGVbMF0gJiYKKwkJICAgIHJjNV9kYXRhKCZrZXltYXBbaV0pID09IGlyY29kZVsxXSkgewogCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OwogCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOwogCQkJcmV0dXJuIDA7CkBAIC00MDAsNTAgKzQwMCw1MCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGFueXNlZV9yY19rZXlzW10gPSB7Ci0JeyAweDAxLCAweDAwLCBLRVlfMCB9LAotCXsgMHgwMSwgMHgwMSwgS0VZXzEgfSwKLQl7IDB4MDEsIDB4MDIsIEtFWV8yIH0sCi0JeyAweDAxLCAweDAzLCBLRVlfMyB9LAotCXsgMHgwMSwgMHgwNCwgS0VZXzQgfSwKLQl7IDB4MDEsIDB4MDUsIEtFWV81IH0sCi0JeyAweDAxLCAweDA2LCBLRVlfNiB9LAotCXsgMHgwMSwgMHgwNywgS0VZXzcgfSwKLQl7IDB4MDEsIDB4MDgsIEtFWV84IH0sCi0JeyAweDAxLCAweDA5LCBLRVlfOSB9LAotCXsgMHgwMSwgMHgwYSwgS0VZX1BPV0VSIH0sCi0JeyAweDAxLCAweDBiLCBLRVlfRE9DVU1FTlRTIH0sICAgIC8qICogKi8KLQl7IDB4MDEsIDB4MTksIEtFWV9GQVZPUklURVMgfSwKLQl7IDB4MDEsIDB4MjAsIEtFWV9TTEVFUCB9LAotCXsgMHgwMSwgMHgyMSwgS0VZX01PREUgfSwgICAgICAgICAvKiA0OjMgLyAxNjo5IHNlbGVjdCAqLwotCXsgMHgwMSwgMHgyMiwgS0VZX1pPT00gfSwKLQl7IDB4MDEsIDB4NDcsIEtFWV9URVhUIH0sCi0JeyAweDAxLCAweDE2LCBLRVlfVFYgfSwgICAgICAgICAgIC8qIFRWIC8gcmFkaW8gc2VsZWN0ICovCi0JeyAweDAxLCAweDFlLCBLRVlfTEFOR1VBR0UgfSwgICAgIC8qIFNlY29uZCBBdWRpbyBQcm9ncmFtICovCi0JeyAweDAxLCAweDFhLCBLRVlfU1VCVElUTEUgfSwKLQl7IDB4MDEsIDB4MWIsIEtFWV9DQU1FUkEgfSwgICAgICAgLyogc2NyZWVuc2hvdCAqLwotCXsgMHgwMSwgMHg0MiwgS0VZX01VVEUgfSwKLQl7IDB4MDEsIDB4MGUsIEtFWV9NRU5VIH0sCi0JeyAweDAxLCAweDBmLCBLRVlfRVBHIH0sCi0JeyAweDAxLCAweDE3LCBLRVlfSU5GTyB9LAotCXsgMHgwMSwgMHgxMCwgS0VZX0VYSVQgfSwKLQl7IDB4MDEsIDB4MTMsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwMSwgMHgxMiwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MDEsIDB4MTEsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MDEsIDB4MTQsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwMSwgMHgxNSwgS0VZX09LIH0sCi0JeyAweDAxLCAweDFkLCBLRVlfUkVEIH0sCi0JeyAweDAxLCAweDFmLCBLRVlfR1JFRU4gfSwKLQl7IDB4MDEsIDB4MWMsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4MDEsIDB4NDQsIEtFWV9CTFVFIH0sCi0JeyAweDAxLCAweDBjLCBLRVlfU0hVRkZMRSB9LCAgICAgIC8qIHNuYXBzaG90ICovCi0JeyAweDAxLCAweDQ4LCBLRVlfU1RPUCB9LAotCXsgMHgwMSwgMHg1MCwgS0VZX1BMQVkgfSwKLQl7IDB4MDEsIDB4NTEsIEtFWV9QQVVTRSB9LAotCXsgMHgwMSwgMHg0OSwgS0VZX1JFQ09SRCB9LAotCXsgMHgwMSwgMHgxOCwgS0VZX1BSRVZJT1VTIH0sICAgICAvKiB8PDwgKi8KLQl7IDB4MDEsIDB4MGQsIEtFWV9ORVhUIH0sICAgICAgICAgLyogPj58ICovCi0JeyAweDAxLCAweDI0LCBLRVlfUFJPRzEgfSwgICAgICAgIC8qIEYxICovCi0JeyAweDAxLCAweDI1LCBLRVlfUFJPRzIgfSwgICAgICAgIC8qIEYyICovCisJeyAweDAxMDAsIEtFWV8wIH0sCisJeyAweDAxMDEsIEtFWV8xIH0sCisJeyAweDAxMDIsIEtFWV8yIH0sCisJeyAweDAxMDMsIEtFWV8zIH0sCisJeyAweDAxMDQsIEtFWV80IH0sCisJeyAweDAxMDUsIEtFWV81IH0sCisJeyAweDAxMDYsIEtFWV82IH0sCisJeyAweDAxMDcsIEtFWV83IH0sCisJeyAweDAxMDgsIEtFWV84IH0sCisJeyAweDAxMDksIEtFWV85IH0sCisJeyAweDAxMGEsIEtFWV9QT1dFUiB9LAorCXsgMHgwMTBiLCBLRVlfRE9DVU1FTlRTIH0sICAgIC8qICogKi8KKwl7IDB4MDExOSwgS0VZX0ZBVk9SSVRFUyB9LAorCXsgMHgwMTIwLCBLRVlfU0xFRVAgfSwKKwl7IDB4MDEyMSwgS0VZX01PREUgfSwgICAgICAgICAvKiA0OjMgLyAxNjo5IHNlbGVjdCAqLworCXsgMHgwMTIyLCBLRVlfWk9PTSB9LAorCXsgMHgwMTQ3LCBLRVlfVEVYVCB9LAorCXsgMHgwMTE2LCBLRVlfVFYgfSwgICAgICAgICAgIC8qIFRWIC8gcmFkaW8gc2VsZWN0ICovCisJeyAweDAxMWUsIEtFWV9MQU5HVUFHRSB9LCAgICAgLyogU2Vjb25kIEF1ZGlvIFByb2dyYW0gKi8KKwl7IDB4MDExYSwgS0VZX1NVQlRJVExFIH0sCisJeyAweDAxMWIsIEtFWV9DQU1FUkEgfSwgICAgICAgLyogc2NyZWVuc2hvdCAqLworCXsgMHgwMTQyLCBLRVlfTVVURSB9LAorCXsgMHgwMTBlLCBLRVlfTUVOVSB9LAorCXsgMHgwMTBmLCBLRVlfRVBHIH0sCisJeyAweDAxMTcsIEtFWV9JTkZPIH0sCisJeyAweDAxMTAsIEtFWV9FWElUIH0sCisJeyAweDAxMTMsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwMTEyLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMTExLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAxMTQsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwMTE1LCBLRVlfT0sgfSwKKwl7IDB4MDExZCwgS0VZX1JFRCB9LAorCXsgMHgwMTFmLCBLRVlfR1JFRU4gfSwKKwl7IDB4MDExYywgS0VZX1lFTExPVyB9LAorCXsgMHgwMTQ0LCBLRVlfQkxVRSB9LAorCXsgMHgwMTBjLCBLRVlfU0hVRkZMRSB9LCAgICAgIC8qIHNuYXBzaG90ICovCisJeyAweDAxNDgsIEtFWV9TVE9QIH0sCisJeyAweDAxNTAsIEtFWV9QTEFZIH0sCisJeyAweDAxNTEsIEtFWV9QQVVTRSB9LAorCXsgMHgwMTQ5LCBLRVlfUkVDT1JEIH0sCisJeyAweDAxMTgsIEtFWV9QUkVWSU9VUyB9LCAgICAgLyogfDw8ICovCisJeyAweDAxMGQsIEtFWV9ORVhUIH0sICAgICAgICAgLyogPj58ICovCisJeyAweDAxMjQsIEtFWV9QUk9HMSB9LCAgICAgICAgLyogRjEgKi8KKwl7IDB4MDEyNSwgS0VZX1BST0cyIH0sICAgICAgICAvKiBGMiAqLwogfTsKIAogLyogRFZCIFVTQiBEcml2ZXIgc3R1ZmYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWNvcmUuYwppbmRleCA4MGUzN2EwLi5lMzdhYzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NpbmVyZ3lUMi1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jaW5lcmd5VDItY29yZS5jCkBAIC04NSw0MyArODUsNDMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBjaW5lcmd5dDJfcmNfa2V5c1tdID0gewotCXsgMHgwNCwJMHgwMSwJS0VZX1BPV0VSIH0sCi0JeyAweDA0LAkweDAyLAlLRVlfMSB9LAotCXsgMHgwNCwJMHgwMywJS0VZXzIgfSwKLQl7IDB4MDQsCTB4MDQsCUtFWV8zIH0sCi0JeyAweDA0LAkweDA1LAlLRVlfNCB9LAotCXsgMHgwNCwJMHgwNiwJS0VZXzUgfSwKLQl7IDB4MDQsCTB4MDcsCUtFWV82IH0sCi0JeyAweDA0LAkweDA4LAlLRVlfNyB9LAotCXsgMHgwNCwJMHgwOSwJS0VZXzggfSwKLQl7IDB4MDQsCTB4MGEsCUtFWV85IH0sCi0JeyAweDA0LAkweDBjLAlLRVlfMCB9LAotCXsgMHgwNCwJMHgwYiwJS0VZX1ZJREVPIH0sCi0JeyAweDA0LAkweDBkLAlLRVlfUkVGUkVTSCB9LAotCXsgMHgwNCwJMHgwZSwJS0VZX1NFTEVDVCB9LAotCXsgMHgwNCwJMHgwZiwJS0VZX0VQRyB9LAotCXsgMHgwNCwJMHgxMCwJS0VZX1VQIH0sCi0JeyAweDA0LAkweDE0LAlLRVlfRE9XTiB9LAotCXsgMHgwNCwJMHgxMSwJS0VZX0xFRlQgfSwKLQl7IDB4MDQsCTB4MTMsCUtFWV9SSUdIVCB9LAotCXsgMHgwNCwJMHgxMiwJS0VZX09LIH0sCi0JeyAweDA0LAkweDE1LAlLRVlfVEVYVCB9LAotCXsgMHgwNCwJMHgxNiwJS0VZX0lORk8gfSwKLQl7IDB4MDQsCTB4MTcsCUtFWV9SRUQgfSwKLQl7IDB4MDQsCTB4MTgsCUtFWV9HUkVFTiB9LAotCXsgMHgwNCwJMHgxOSwJS0VZX1lFTExPVyB9LAotCXsgMHgwNCwJMHgxYSwJS0VZX0JMVUUgfSwKLQl7IDB4MDQsCTB4MWMsCUtFWV9WT0xVTUVVUCB9LAotCXsgMHgwNCwJMHgxZSwJS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MDQsCTB4MWQsCUtFWV9NVVRFIH0sCi0JeyAweDA0LAkweDFiLAlLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDA0LAkweDFmLAlLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MDQsCTB4NDAsCUtFWV9QQVVTRSB9LAotCXsgMHgwNCwJMHg0YywJS0VZX1BMQVkgfSwKLQl7IDB4MDQsCTB4NTgsCUtFWV9SRUNPUkQgfSwKLQl7IDB4MDQsCTB4NTQsCUtFWV9QUkVWSU9VUyB9LAotCXsgMHgwNCwJMHg0OCwJS0VZX1NUT1AgfSwKLQl7IDB4MDQsCTB4NWMsCUtFWV9ORVhUIH0KKwl7IDB4MDQwMSwgS0VZX1BPV0VSIH0sCisJeyAweDA0MDIsIEtFWV8xIH0sCisJeyAweDA0MDMsIEtFWV8yIH0sCisJeyAweDA0MDQsIEtFWV8zIH0sCisJeyAweDA0MDUsIEtFWV80IH0sCisJeyAweDA0MDYsIEtFWV81IH0sCisJeyAweDA0MDcsIEtFWV82IH0sCisJeyAweDA0MDgsIEtFWV83IH0sCisJeyAweDA0MDksIEtFWV84IH0sCisJeyAweDA0MGEsIEtFWV85IH0sCisJeyAweDA0MGMsIEtFWV8wIH0sCisJeyAweDA0MGIsIEtFWV9WSURFTyB9LAorCXsgMHgwNDBkLCBLRVlfUkVGUkVTSCB9LAorCXsgMHgwNDBlLCBLRVlfU0VMRUNUIH0sCisJeyAweDA0MGYsIEtFWV9FUEcgfSwKKwl7IDB4MDQxMCwgS0VZX1VQIH0sCisJeyAweDA0MTQsIEtFWV9ET1dOIH0sCisJeyAweDA0MTEsIEtFWV9MRUZUIH0sCisJeyAweDA0MTMsIEtFWV9SSUdIVCB9LAorCXsgMHgwNDEyLCBLRVlfT0sgfSwKKwl7IDB4MDQxNSwgS0VZX1RFWFQgfSwKKwl7IDB4MDQxNiwgS0VZX0lORk8gfSwKKwl7IDB4MDQxNywgS0VZX1JFRCB9LAorCXsgMHgwNDE4LCBLRVlfR1JFRU4gfSwKKwl7IDB4MDQxOSwgS0VZX1lFTExPVyB9LAorCXsgMHgwNDFhLCBLRVlfQkxVRSB9LAorCXsgMHgwNDFjLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDQxZSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDQxZCwgS0VZX01VVEUgfSwKKwl7IDB4MDQxYiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwNDFmLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDQ0MCwgS0VZX1BBVVNFIH0sCisJeyAweDA0NGMsIEtFWV9QTEFZIH0sCisJeyAweDA0NTgsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MDQ1NCwgS0VZX1BSRVZJT1VTIH0sCisJeyAweDA0NDgsIEtFWV9TVE9QIH0sCisJeyAweDA0NWMsIEtFWV9ORVhUIH0KIH07CiAKIC8qIE51bWJlciBvZiBrZXlwcmVzc2VzIHRvIGlnbm9yZSBiZWZvcmUgZGV0ZWN0IHJlcGVhdGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jaW5lcmd5VDItZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWZlLmMKaW5kZXggNjQ5ZjI1Yy4uOWNkNTFhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jaW5lcmd5VDItZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NpbmVyZ3lUMi1mZS5jCkBAIC0yNzUsNiArMjc1LDcgQEAKIAlwYXJhbS50cHMgPSBjcHVfdG9fbGUxNihjb21wdXRlX3RwcyhmZXApKTsKIAlwYXJhbS5mcmVxID0gY3B1X3RvX2xlMzIoZmVwLT5mcmVxdWVuY3kgLyAxMDAwKTsKIAlwYXJhbS5iYW5kd2lkdGggPSA4IC0gZmVwLT51Lm9mZG0uYmFuZHdpZHRoIC0gQkFORFdJRFRIXzhfTUhaOworCXBhcmFtLmZsYWdzID0gMDsKIAogCWVyciA9IGR2Yl91c2JfZ2VuZXJpY19ydyhzdGF0ZS0+ZCwKIAkJCShjaGFyICopJnBhcmFtLCBzaXplb2YocGFyYW0pLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCmluZGV4IDQwNmQ3ZmIuLmY2NTU5MWZiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIm14bDUwMDVzLmgiCiAjaW5jbHVkZSAiZGliNzAwMHAuaCIKICNpbmNsdWRlICJkaWIwMDcwLmgiCi0jaW5jbHVkZSAibGdzOGdsNS5oIgorI2luY2x1ZGUgImxnczhneHguaCIKIAogLyogZGVidWcgKi8KIHN0YXRpYyBpbnQgZHZiX3VzYl9jeHVzYl9kZWJ1ZzsKQEAgLTM5Miw4ICszOTIsOCBAQAogCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKIAogCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemU7IGkrKykgewotCQlpZiAoa2V5bWFwW2ldLmN1c3RvbSA9PSBpcmNvZGVbMl0gJiYKLQkJICAgIGtleW1hcFtpXS5kYXRhID09IGlyY29kZVszXSkgeworCQlpZiAocmM1X2N1c3RvbSgma2V5bWFwW2ldKSA9PSBpcmNvZGVbMl0gJiYKKwkJICAgIHJjNV9kYXRhKCZrZXltYXBbaV0pID09IGlyY29kZVszXSkgewogCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OwogCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOwogCkBAIC00MjAsOCArNDIwLDggQEAKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKLQkJaWYgKGtleW1hcFtpXS5jdXN0b20gPT0gaXJjb2RlWzFdICYmCi0JCSAgICBrZXltYXBbaV0uZGF0YSA9PSBpcmNvZGVbMl0pIHsKKwkJaWYgKHJjNV9jdXN0b20oJmtleW1hcFtpXSkgPT0gaXJjb2RlWzFdICYmCisJCSAgICByYzVfZGF0YSgma2V5bWFwW2ldKSA9PSBpcmNvZGVbMl0pIHsKIAkJCSpldmVudCA9IGtleW1hcFtpXS5ldmVudDsKIAkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKIApAQCAtNDQ2LDggKzQ0Niw4IEBACiAJCXJldHVybiAwOwogCiAJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7Ci0JCWlmIChrZXltYXBbaV0uY3VzdG9tID09IGlyY29kZVswXSAmJgotCQkgICAga2V5bWFwW2ldLmRhdGEgPT0gaXJjb2RlWzFdKSB7CisJCWlmIChyYzVfY3VzdG9tKCZrZXltYXBbaV0pID09IGlyY29kZVswXSAmJgorCQkgICAgcmM1X2RhdGEoJmtleW1hcFtpXSkgPT0gaXJjb2RlWzFdKSB7CiAJCQkqZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CiAJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CiAKQEAgLTQ1OSwxMjggKzQ1OSwxMjggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBkdmljb19tY2VfcmNfa2V5c1tdID0gewotCXsgMHhmZSwgMHgwMiwgS0VZX1RWIH0sCi0JeyAweGZlLCAweDBlLCBLRVlfTVAzIH0sCi0JeyAweGZlLCAweDFhLCBLRVlfRFZEIH0sCi0JeyAweGZlLCAweDFlLCBLRVlfRkFWT1JJVEVTIH0sCi0JeyAweGZlLCAweDE2LCBLRVlfU0VUVVAgfSwKLQl7IDB4ZmUsIDB4NDYsIEtFWV9QT1dFUjIgfSwKLQl7IDB4ZmUsIDB4MGEsIEtFWV9FUEcgfSwKLQl7IDB4ZmUsIDB4NDksIEtFWV9CQUNLIH0sCi0JeyAweGZlLCAweDRkLCBLRVlfTUVOVSB9LAotCXsgMHhmZSwgMHg1MSwgS0VZX1VQIH0sCi0JeyAweGZlLCAweDViLCBLRVlfTEVGVCB9LAotCXsgMHhmZSwgMHg1ZiwgS0VZX1JJR0hUIH0sCi0JeyAweGZlLCAweDUzLCBLRVlfRE9XTiB9LAotCXsgMHhmZSwgMHg1ZSwgS0VZX09LIH0sCi0JeyAweGZlLCAweDU5LCBLRVlfSU5GTyB9LAotCXsgMHhmZSwgMHg1NSwgS0VZX1RBQiB9LAotCXsgMHhmZSwgMHgwZiwgS0VZX1BSRVZJT1VTU09ORyB9LC8qIFJlcGxheSAqLwotCXsgMHhmZSwgMHgxMiwgS0VZX05FWFRTT05HIH0sCS8qIFNraXAgKi8KLQl7IDB4ZmUsIDB4NDIsIEtFWV9FTlRFUgkgfSwJLyogV2luZG93cy9TdGFydCAqLwotCXsgMHhmZSwgMHgxNSwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweGZlLCAweDA1LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHhmZSwgMHgxMSwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHhmZSwgMHgwOSwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweGZlLCAweDUyLCBLRVlfQ0FNRVJBIH0sCi0JeyAweGZlLCAweDVhLCBLRVlfVFVORVIgfSwJLyogTGl2ZSAqLwotCXsgMHhmZSwgMHgxOSwgS0VZX09QRU4gfSwKLQl7IDB4ZmUsIDB4MGIsIEtFWV8xIH0sCi0JeyAweGZlLCAweDE3LCBLRVlfMiB9LAotCXsgMHhmZSwgMHgxYiwgS0VZXzMgfSwKLQl7IDB4ZmUsIDB4MDcsIEtFWV80IH0sCi0JeyAweGZlLCAweDUwLCBLRVlfNSB9LAotCXsgMHhmZSwgMHg1NCwgS0VZXzYgfSwKLQl7IDB4ZmUsIDB4NDgsIEtFWV83IH0sCi0JeyAweGZlLCAweDRjLCBLRVlfOCB9LAotCXsgMHhmZSwgMHg1OCwgS0VZXzkgfSwKLQl7IDB4ZmUsIDB4MTMsIEtFWV9BTkdMRSB9LAkvKiBBc3BlY3QgKi8KLQl7IDB4ZmUsIDB4MDMsIEtFWV8wIH0sCi0JeyAweGZlLCAweDFmLCBLRVlfWk9PTSB9LAotCXsgMHhmZSwgMHg0MywgS0VZX1JFV0lORCB9LAotCXsgMHhmZSwgMHg0NywgS0VZX1BMQVlQQVVTRSB9LAotCXsgMHhmZSwgMHg0ZiwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweGZlLCAweDU3LCBLRVlfTVVURSB9LAotCXsgMHhmZSwgMHgwZCwgS0VZX1NUT1AgfSwKLQl7IDB4ZmUsIDB4MDEsIEtFWV9SRUNPUkQgfSwKLQl7IDB4ZmUsIDB4NGUsIEtFWV9QT1dFUiB9LAorCXsgMHhmZTAyLCBLRVlfVFYgfSwKKwl7IDB4ZmUwZSwgS0VZX01QMyB9LAorCXsgMHhmZTFhLCBLRVlfRFZEIH0sCisJeyAweGZlMWUsIEtFWV9GQVZPUklURVMgfSwKKwl7IDB4ZmUxNiwgS0VZX1NFVFVQIH0sCisJeyAweGZlNDYsIEtFWV9QT1dFUjIgfSwKKwl7IDB4ZmUwYSwgS0VZX0VQRyB9LAorCXsgMHhmZTQ5LCBLRVlfQkFDSyB9LAorCXsgMHhmZTRkLCBLRVlfTUVOVSB9LAorCXsgMHhmZTUxLCBLRVlfVVAgfSwKKwl7IDB4ZmU1YiwgS0VZX0xFRlQgfSwKKwl7IDB4ZmU1ZiwgS0VZX1JJR0hUIH0sCisJeyAweGZlNTMsIEtFWV9ET1dOIH0sCisJeyAweGZlNWUsIEtFWV9PSyB9LAorCXsgMHhmZTU5LCBLRVlfSU5GTyB9LAorCXsgMHhmZTU1LCBLRVlfVEFCIH0sCisJeyAweGZlMGYsIEtFWV9QUkVWSU9VU1NPTkcgfSwvKiBSZXBsYXkgKi8KKwl7IDB4ZmUxMiwgS0VZX05FWFRTT05HIH0sCS8qIFNraXAgKi8KKwl7IDB4ZmU0MiwgS0VZX0VOVEVSCSB9LAkvKiBXaW5kb3dzL1N0YXJ0ICovCisJeyAweGZlMTUsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHhmZTA1LCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHhmZTExLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweGZlMDksIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHhmZTUyLCBLRVlfQ0FNRVJBIH0sCisJeyAweGZlNWEsIEtFWV9UVU5FUiB9LAkvKiBMaXZlICovCisJeyAweGZlMTksIEtFWV9PUEVOIH0sCisJeyAweGZlMGIsIEtFWV8xIH0sCisJeyAweGZlMTcsIEtFWV8yIH0sCisJeyAweGZlMWIsIEtFWV8zIH0sCisJeyAweGZlMDcsIEtFWV80IH0sCisJeyAweGZlNTAsIEtFWV81IH0sCisJeyAweGZlNTQsIEtFWV82IH0sCisJeyAweGZlNDgsIEtFWV83IH0sCisJeyAweGZlNGMsIEtFWV84IH0sCisJeyAweGZlNTgsIEtFWV85IH0sCisJeyAweGZlMTMsIEtFWV9BTkdMRSB9LAkvKiBBc3BlY3QgKi8KKwl7IDB4ZmUwMywgS0VZXzAgfSwKKwl7IDB4ZmUxZiwgS0VZX1pPT00gfSwKKwl7IDB4ZmU0MywgS0VZX1JFV0lORCB9LAorCXsgMHhmZTQ3LCBLRVlfUExBWVBBVVNFIH0sCisJeyAweGZlNGYsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHhmZTU3LCBLRVlfTVVURSB9LAorCXsgMHhmZTBkLCBLRVlfU1RPUCB9LAorCXsgMHhmZTAxLCBLRVlfUkVDT1JEIH0sCisJeyAweGZlNGUsIEtFWV9QT1dFUiB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBkdmljb19wb3J0YWJsZV9yY19rZXlzW10gPSB7Ci0JeyAweGZjLCAweDAyLCBLRVlfU0VUVVAgfSwgICAgICAgLyogUHJvZmlsZSAqLwotCXsgMHhmYywgMHg0MywgS0VZX1BPV0VSMiB9LAotCXsgMHhmYywgMHgwNiwgS0VZX0VQRyB9LAotCXsgMHhmYywgMHg1YSwgS0VZX0JBQ0sgfSwKLQl7IDB4ZmMsIDB4MDUsIEtFWV9NRU5VIH0sCi0JeyAweGZjLCAweDQ3LCBLRVlfSU5GTyB9LAotCXsgMHhmYywgMHgwMSwgS0VZX1RBQiB9LAotCXsgMHhmYywgMHg0MiwgS0VZX1BSRVZJT1VTU09ORyB9LC8qIFJlcGxheSAqLwotCXsgMHhmYywgMHg0OSwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweGZjLCAweDA5LCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHhmYywgMHg1NCwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHhmYywgMHgwYiwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweGZjLCAweDE2LCBLRVlfQ0FNRVJBIH0sCi0JeyAweGZjLCAweDQwLCBLRVlfVFVORVIgfSwJLyogQVRWL0RUViAqLwotCXsgMHhmYywgMHg0NSwgS0VZX09QRU4gfSwKLQl7IDB4ZmMsIDB4MTksIEtFWV8xIH0sCi0JeyAweGZjLCAweDE4LCBLRVlfMiB9LAotCXsgMHhmYywgMHgxYiwgS0VZXzMgfSwKLQl7IDB4ZmMsIDB4MWEsIEtFWV80IH0sCi0JeyAweGZjLCAweDU4LCBLRVlfNSB9LAotCXsgMHhmYywgMHg1OSwgS0VZXzYgfSwKLQl7IDB4ZmMsIDB4MTUsIEtFWV83IH0sCi0JeyAweGZjLCAweDE0LCBLRVlfOCB9LAotCXsgMHhmYywgMHgxNywgS0VZXzkgfSwKLQl7IDB4ZmMsIDB4NDQsIEtFWV9BTkdMRSB9LAkvKiBBc3BlY3QgKi8KLQl7IDB4ZmMsIDB4NTUsIEtFWV8wIH0sCi0JeyAweGZjLCAweDA3LCBLRVlfWk9PTSB9LAotCXsgMHhmYywgMHgwYSwgS0VZX1JFV0lORCB9LAotCXsgMHhmYywgMHgwOCwgS0VZX1BMQVlQQVVTRSB9LAotCXsgMHhmYywgMHg0YiwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweGZjLCAweDViLCBLRVlfTVVURSB9LAotCXsgMHhmYywgMHgwNCwgS0VZX1NUT1AgfSwKLQl7IDB4ZmMsIDB4NTYsIEtFWV9SRUNPUkQgfSwKLQl7IDB4ZmMsIDB4NTcsIEtFWV9QT1dFUiB9LAotCXsgMHhmYywgMHg0MSwgS0VZX1VOS05PV04gfSwgICAgLyogSU5QVVQgKi8KLQl7IDB4ZmMsIDB4MDAsIEtFWV9VTktOT1dOIH0sICAgIC8qIEhEICovCisJeyAweGZjMDIsIEtFWV9TRVRVUCB9LCAgICAgICAvKiBQcm9maWxlICovCisJeyAweGZjNDMsIEtFWV9QT1dFUjIgfSwKKwl7IDB4ZmMwNiwgS0VZX0VQRyB9LAorCXsgMHhmYzVhLCBLRVlfQkFDSyB9LAorCXsgMHhmYzA1LCBLRVlfTUVOVSB9LAorCXsgMHhmYzQ3LCBLRVlfSU5GTyB9LAorCXsgMHhmYzAxLCBLRVlfVEFCIH0sCisJeyAweGZjNDIsIEtFWV9QUkVWSU9VU1NPTkcgfSwvKiBSZXBsYXkgKi8KKwl7IDB4ZmM0OSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweGZjMDksIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweGZjNTQsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4ZmMwYiwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweGZjMTYsIEtFWV9DQU1FUkEgfSwKKwl7IDB4ZmM0MCwgS0VZX1RVTkVSIH0sCS8qIEFUVi9EVFYgKi8KKwl7IDB4ZmM0NSwgS0VZX09QRU4gfSwKKwl7IDB4ZmMxOSwgS0VZXzEgfSwKKwl7IDB4ZmMxOCwgS0VZXzIgfSwKKwl7IDB4ZmMxYiwgS0VZXzMgfSwKKwl7IDB4ZmMxYSwgS0VZXzQgfSwKKwl7IDB4ZmM1OCwgS0VZXzUgfSwKKwl7IDB4ZmM1OSwgS0VZXzYgfSwKKwl7IDB4ZmMxNSwgS0VZXzcgfSwKKwl7IDB4ZmMxNCwgS0VZXzggfSwKKwl7IDB4ZmMxNywgS0VZXzkgfSwKKwl7IDB4ZmM0NCwgS0VZX0FOR0xFIH0sCS8qIEFzcGVjdCAqLworCXsgMHhmYzU1LCBLRVlfMCB9LAorCXsgMHhmYzA3LCBLRVlfWk9PTSB9LAorCXsgMHhmYzBhLCBLRVlfUkVXSU5EIH0sCisJeyAweGZjMDgsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4ZmM0YiwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweGZjNWIsIEtFWV9NVVRFIH0sCisJeyAweGZjMDQsIEtFWV9TVE9QIH0sCisJeyAweGZjNTYsIEtFWV9SRUNPUkQgfSwKKwl7IDB4ZmM1NywgS0VZX1BPV0VSIH0sCisJeyAweGZjNDEsIEtFWV9VTktOT1dOIH0sICAgIC8qIElOUFVUICovCisJeyAweGZjMDAsIEtFWV9VTktOT1dOIH0sICAgIC8qIEhEICovCiB9OwogCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGQ2ODBfZG1iX3JjX2tleXNbXSA9IHsKLQl7IDB4MDAsIDB4MzgsIEtFWV9VTktOT1dOIH0sCS8qIFRWL0FWICovCi0JeyAweDA4LCAweDBjLCBLRVlfWk9PTSB9LAotCXsgMHgwOCwgMHgwMCwgS0VZXzAgfSwKLQl7IDB4MDAsIDB4MDEsIEtFWV8xIH0sCi0JeyAweDA4LCAweDAyLCBLRVlfMiB9LAotCXsgMHgwMCwgMHgwMywgS0VZXzMgfSwKLQl7IDB4MDgsIDB4MDQsIEtFWV80IH0sCi0JeyAweDAwLCAweDA1LCBLRVlfNSB9LAotCXsgMHgwOCwgMHgwNiwgS0VZXzYgfSwKLQl7IDB4MDAsIDB4MDcsIEtFWV83IH0sCi0JeyAweDA4LCAweDA4LCBLRVlfOCB9LAotCXsgMHgwMCwgMHgwOSwgS0VZXzkgfSwKLQl7IDB4MDAsIDB4MGEsIEtFWV9NVVRFIH0sCi0JeyAweDA4LCAweDI5LCBLRVlfQkFDSyB9LAotCXsgMHgwMCwgMHgxMiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwOCwgMHgxMywgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDAwLCAweDJiLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MDgsIDB4MmMsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDAwLCAweDIwLCBLRVlfVVAgfSwKLQl7IDB4MDgsIDB4MjEsIEtFWV9ET1dOIH0sCi0JeyAweDAwLCAweDExLCBLRVlfTEVGVCB9LAotCXsgMHgwOCwgMHgxMCwgS0VZX1JJR0hUIH0sCi0JeyAweDAwLCAweDBkLCBLRVlfT0sgfSwKLQl7IDB4MDgsIDB4MWYsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MDAsIDB4MTcsIEtFWV9QTEFZUEFVU0UgfSwKLQl7IDB4MDgsIDB4MTYsIEtFWV9QTEFZUEFVU0UgfSwKLQl7IDB4MDAsIDB4MGIsIEtFWV9TVE9QIH0sCi0JeyAweDA4LCAweDI3LCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MDAsIDB4MjYsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MDgsIDB4MWUsIEtFWV9VTktOT1dOIH0sICAgIC8qIFRpbWUgU2hpZnQgKi8KLQl7IDB4MDAsIDB4MGUsIEtFWV9VTktOT1dOIH0sICAgIC8qIFNuYXBzaG90ICovCi0JeyAweDA4LCAweDJkLCBLRVlfVU5LTk9XTiB9LCAgICAvKiBNb3VzZSBDdXJzb3IgKi8KLQl7IDB4MDAsIDB4MGYsIEtFWV9VTktOT1dOIH0sICAgIC8qIE1pbmltaXplL01heGltaXplICovCi0JeyAweDA4LCAweDE0LCBLRVlfVU5LTk9XTiB9LCAgICAvKiBTaHVmZmxlICovCi0JeyAweDAwLCAweDI1LCBLRVlfUE9XRVIgfSwKKwl7IDB4MDAzOCwgS0VZX1VOS05PV04gfSwJLyogVFYvQVYgKi8KKwl7IDB4MDgwYywgS0VZX1pPT00gfSwKKwl7IDB4MDgwMCwgS0VZXzAgfSwKKwl7IDB4MDAwMSwgS0VZXzEgfSwKKwl7IDB4MDgwMiwgS0VZXzIgfSwKKwl7IDB4MDAwMywgS0VZXzMgfSwKKwl7IDB4MDgwNCwgS0VZXzQgfSwKKwl7IDB4MDAwNSwgS0VZXzUgfSwKKwl7IDB4MDgwNiwgS0VZXzYgfSwKKwl7IDB4MDAwNywgS0VZXzcgfSwKKwl7IDB4MDgwOCwgS0VZXzggfSwKKwl7IDB4MDAwOSwgS0VZXzkgfSwKKwl7IDB4MDAwYSwgS0VZX01VVEUgfSwKKwl7IDB4MDgyOSwgS0VZX0JBQ0sgfSwKKwl7IDB4MDAxMiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwODEzLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDAyYiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDA4MmMsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAwMjAsIEtFWV9VUCB9LAorCXsgMHgwODIxLCBLRVlfRE9XTiB9LAorCXsgMHgwMDExLCBLRVlfTEVGVCB9LAorCXsgMHgwODEwLCBLRVlfUklHSFQgfSwKKwl7IDB4MDAwZCwgS0VZX09LIH0sCisJeyAweDA4MWYsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MDAxNywgS0VZX1BMQVlQQVVTRSB9LAorCXsgMHgwODE2LCBLRVlfUExBWVBBVVNFIH0sCisJeyAweDAwMGIsIEtFWV9TVE9QIH0sCisJeyAweDA4MjcsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgwMDI2LCBLRVlfUkVXSU5EIH0sCisJeyAweDA4MWUsIEtFWV9VTktOT1dOIH0sICAgIC8qIFRpbWUgU2hpZnQgKi8KKwl7IDB4MDAwZSwgS0VZX1VOS05PV04gfSwgICAgLyogU25hcHNob3QgKi8KKwl7IDB4MDgyZCwgS0VZX1VOS05PV04gfSwgICAgLyogTW91c2UgQ3Vyc29yICovCisJeyAweDAwMGYsIEtFWV9VTktOT1dOIH0sICAgIC8qIE1pbmltaXplL01heGltaXplICovCisJeyAweDA4MTQsIEtFWV9VTktOT1dOIH0sICAgIC8qIFNodWZmbGUgKi8KKwl7IDB4MDAyNSwgS0VZX1BPV0VSIH0sCiB9OwogCiBzdGF0aWMgaW50IGN4dXNiX2RlZTE2MDFfZGVtb2RfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKQEAgLTEwOTQsOCArMTA5NCwxOCBAQAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgc3RydWN0IGxnczhnbDVfY29uZmlnIGxnczhnbDVfY2ZnID0geworc3RhdGljIHN0cnVjdCBsZ3M4Z3h4X2NvbmZpZyBkNjgwX2xnczhnbDVfY2ZnID0geworCS5wcm9kID0gTEdTOEdYWF9QUk9EX0xHUzhHTDUsCiAJLmRlbW9kX2FkZHJlc3MgPSAweDE5LAorCS5zZXJpYWxfdHMgPSAwLAorCS50c19jbGtfcG9sID0gMCwKKwkudHNfY2xrX2dhdGVkID0gMSwKKwkuaWZfY2xrX2ZyZXEgPSAzMDQwMCwgLyogMzAuNCBNSHogKi8KKwkuaWZfZnJlcSA9IDU3MjUsIC8qIDUuNzI1IE1IeiAqLworCS5pZl9uZWdfY2VudGVyID0gMCwKKwkuZXh0X2FkYyA9IDAsCisJLmFkY19zaWduZWQgPSAwLAorCS5pZl9uZWdfZWRnZSA9IDAsCiB9OwogCiBzdGF0aWMgaW50IGN4dXNiX2Q2ODBfZG1iX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQpAQCAtMTEzNSw3ICsxMTQ1LDcgQEAKIAltc2xlZXAoMTAwKTsKIAogCS8qIEF0dGFjaCBmcm9udGVuZCAqLwotCWFkYXAtPmZlID0gZHZiX2F0dGFjaChsZ3M4Z2w1X2F0dGFjaCwgJmxnczhnbDVfY2ZnLCAmZC0+aTJjX2FkYXApOworCWFkYXAtPmZlID0gZHZiX2F0dGFjaChsZ3M4Z3h4X2F0dGFjaCwgJmQ2ODBfbGdzOGdsNV9jZmcsICZkLT5pMmNfYWRhcCk7CiAJaWYgKGFkYXAtPmZlID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwppbmRleCA4MThiMmFiLi5kMWQ2ZjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCXN0cnVjdCBpMmNfYWRhcHRlciAqdHVuX2kyYzsKIAl0dW5faTJjID0gZGliNzAwMHBfZ2V0X2kyY19tYXN0ZXIoYWRhcC0+ZmUsIERJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUiwgMSk7CiAJcmV0dXJuIGR2Yl9hdHRhY2gobXQyMjY2X2F0dGFjaCwgYWRhcC0+ZmUsIHR1bl9pMmMsCi0JCSZzdGs3NzAwZF9tdDIyNjZfY29uZmlnW2FkYXAtPmlkXSkgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOzsKKwkJJnN0azc3MDBkX210MjI2Nl9jb25maWdbYWRhcC0+aWRdKSA9PSBOVUxMID8gLUVOT0RFViA6IDA7CiB9CiAKIC8qIFNUSzc3MDAtUEg6IERpZ2l0YWwvQW5hbG9nIEh5YnJpZCBUdW5lciwgZS5oLiBDaW5lcmd5IEhUIFVTQiBIRSAqLwpAQCAtNTA5LDcgKzUwOSw4IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCQlmb3IgKGk9MDtpPGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7Ci0JCQlpZiAoa2V5bWFwW2ldLmN1c3RvbSA9PSBrZXlbMy0yXSAmJiBrZXltYXBbaV0uZGF0YSA9PSBrZXlbMy0zXSkgeworCQkJaWYgKHJjNV9jdXN0b20oJmtleW1hcFtpXSkgPT0ga2V5WzMtMl0gJiYKKwkJCSAgICByYzVfZGF0YSgma2V5bWFwW2ldKSA9PSBrZXlbMy0zXSkgewogCQkJCXN0LT5yY19jb3VudGVyID0gMDsKIAkJCQkqZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CiAJCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOwpAQCAtNTIyLDcgKzUyMyw4IEBACiAJZGVmYXVsdDogewogCQkvKiBSQy01IHByb3RvY29sIGNoYW5nZXMgdG9nZ2xlIGJpdCBvbiBuZXcga2V5cHJlc3MgKi8KIAkJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7Ci0JCQlpZiAoa2V5bWFwW2ldLmN1c3RvbSA9PSBrZXlbMy0yXSAmJiBrZXltYXBbaV0uZGF0YSA9PSBrZXlbMy0zXSkgeworCQkJaWYgKHJjNV9jdXN0b20oJmtleW1hcFtpXSkgPT0ga2V5WzMtMl0gJiYKKwkJCSAgICByYzVfZGF0YSgma2V5bWFwW2ldKSA9PSBrZXlbMy0zXSkgewogCQkJCWlmIChkLT5sYXN0X2V2ZW50ID09IGtleW1hcFtpXS5ldmVudCAmJgogCQkJCQlrZXlbMy0xXSA9PSBzdC0+cmNfdG9nZ2xlKSB7CiAJCQkJCXN0LT5yY19jb3VudGVyKys7CkBAIC02MTYsOCArNjE4LDggQEAKIAogCS8qIEZpbmQgdGhlIGtleSBpbiB0aGUgbWFwICovCiAJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7Ci0JCWlmIChrZXltYXBbaV0uY3VzdG9tID09IHBvbGxfcmVwbHkuc3lzdGVtX2xzYiAmJgotCQkgICAga2V5bWFwW2ldLmRhdGEgPT0gcG9sbF9yZXBseS5kYXRhKSB7CisJCWlmIChyYzVfY3VzdG9tKCZrZXltYXBbaV0pID09IHBvbGxfcmVwbHkuc3lzdGVtX2xzYiAmJgorCQkgICAgcmM1X2RhdGEoJmtleW1hcFtpXSkgPT0gcG9sbF9yZXBseS5kYXRhKSB7CiAJCQkqZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CiAJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKQEAgLTY4NCwxOTMgKzY4NiwxOTMgQEAKIAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBkaWIwNzAwX3JjX2tleXNbXSA9IHsKIAkvKiBLZXkgY29kZXMgZm9yIHRoZSB0aW55IFBpbm5hY2xlIHJlbW90ZSovCi0JeyAweDA3LCAweDAwLCBLRVlfTVVURSB9LAotCXsgMHgwNywgMHgwMSwgS0VZX01FTlUgfSwgLy8gUGlubmFjbGUgbG9nbwotCXsgMHgwNywgMHgzOSwgS0VZX1BPV0VSIH0sCi0JeyAweDA3LCAweDAzLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MDcsIDB4MDksIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDA3LCAweDA2LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDA3LCAweDBjLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MDcsIDB4MGYsIEtFWV8xIH0sCi0JeyAweDA3LCAweDE1LCBLRVlfMiB9LAotCXsgMHgwNywgMHgxMCwgS0VZXzMgfSwKLQl7IDB4MDcsIDB4MTgsIEtFWV80IH0sCi0JeyAweDA3LCAweDFiLCBLRVlfNSB9LAotCXsgMHgwNywgMHgxZSwgS0VZXzYgfSwKLQl7IDB4MDcsIDB4MTEsIEtFWV83IH0sCi0JeyAweDA3LCAweDIxLCBLRVlfOCB9LAotCXsgMHgwNywgMHgxMiwgS0VZXzkgfSwKLQl7IDB4MDcsIDB4MjcsIEtFWV8wIH0sCi0JeyAweDA3LCAweDI0LCBLRVlfU0NSRUVOIH0sIC8vICdTcXVhcmUnIGtleQotCXsgMHgwNywgMHgyYSwgS0VZX1RFWFQgfSwgICAvLyAnVCcga2V5Ci0JeyAweDA3LCAweDJkLCBLRVlfUkVXSU5EIH0sCi0JeyAweDA3LCAweDMwLCBLRVlfUExBWSB9LAotCXsgMHgwNywgMHgzMywgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDA3LCAweDM2LCBLRVlfUkVDT1JEIH0sCi0JeyAweDA3LCAweDNjLCBLRVlfU1RPUCB9LAotCXsgMHgwNywgMHgzZiwgS0VZX0NBTkNFTCB9LCAvLyAnPycga2V5CisJeyAweDA3MDAsIEtFWV9NVVRFIH0sCisJeyAweDA3MDEsIEtFWV9NRU5VIH0sIC8qIFBpbm5hY2xlIGxvZ28gKi8KKwl7IDB4MDczOSwgS0VZX1BPV0VSIH0sCisJeyAweDA3MDMsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwNzA5LCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwNzA2LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDA3MGMsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwNzBmLCBLRVlfMSB9LAorCXsgMHgwNzE1LCBLRVlfMiB9LAorCXsgMHgwNzEwLCBLRVlfMyB9LAorCXsgMHgwNzE4LCBLRVlfNCB9LAorCXsgMHgwNzFiLCBLRVlfNSB9LAorCXsgMHgwNzFlLCBLRVlfNiB9LAorCXsgMHgwNzExLCBLRVlfNyB9LAorCXsgMHgwNzIxLCBLRVlfOCB9LAorCXsgMHgwNzEyLCBLRVlfOSB9LAorCXsgMHgwNzI3LCBLRVlfMCB9LAorCXsgMHgwNzI0LCBLRVlfU0NSRUVOIH0sIC8qICdTcXVhcmUnIGtleSAqLworCXsgMHgwNzJhLCBLRVlfVEVYVCB9LCAgIC8qICdUJyBrZXkgKi8KKwl7IDB4MDcyZCwgS0VZX1JFV0lORCB9LAorCXsgMHgwNzMwLCBLRVlfUExBWSB9LAorCXsgMHgwNzMzLCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4MDczNiwgS0VZX1JFQ09SRCB9LAorCXsgMHgwNzNjLCBLRVlfU1RPUCB9LAorCXsgMHgwNzNmLCBLRVlfQ0FOQ0VMIH0sIC8qICc/JyBrZXkgKi8KIAkvKiBLZXkgY29kZXMgZm9yIHRoZSBUZXJyYXRlYyBDaW5lcmd5IERUIFhTIERpdmVyc2l0eSwgc2ltaWxhciB0byBjaW5lcmd5VDIuYyAqLwotCXsgMHhlYiwgMHgwMSwgS0VZX1BPV0VSIH0sCi0JeyAweGViLCAweDAyLCBLRVlfMSB9LAotCXsgMHhlYiwgMHgwMywgS0VZXzIgfSwKLQl7IDB4ZWIsIDB4MDQsIEtFWV8zIH0sCi0JeyAweGViLCAweDA1LCBLRVlfNCB9LAotCXsgMHhlYiwgMHgwNiwgS0VZXzUgfSwKLQl7IDB4ZWIsIDB4MDcsIEtFWV82IH0sCi0JeyAweGViLCAweDA4LCBLRVlfNyB9LAotCXsgMHhlYiwgMHgwOSwgS0VZXzggfSwKLQl7IDB4ZWIsIDB4MGEsIEtFWV85IH0sCi0JeyAweGViLCAweDBiLCBLRVlfVklERU8gfSwKLQl7IDB4ZWIsIDB4MGMsIEtFWV8wIH0sCi0JeyAweGViLCAweDBkLCBLRVlfUkVGUkVTSCB9LAotCXsgMHhlYiwgMHgwZiwgS0VZX0VQRyB9LAotCXsgMHhlYiwgMHgxMCwgS0VZX1VQIH0sCi0JeyAweGViLCAweDExLCBLRVlfTEVGVCB9LAotCXsgMHhlYiwgMHgxMiwgS0VZX09LIH0sCi0JeyAweGViLCAweDEzLCBLRVlfUklHSFQgfSwKLQl7IDB4ZWIsIDB4MTQsIEtFWV9ET1dOIH0sCi0JeyAweGViLCAweDE2LCBLRVlfSU5GTyB9LAotCXsgMHhlYiwgMHgxNywgS0VZX1JFRCB9LAotCXsgMHhlYiwgMHgxOCwgS0VZX0dSRUVOIH0sCi0JeyAweGViLCAweDE5LCBLRVlfWUVMTE9XIH0sCi0JeyAweGViLCAweDFhLCBLRVlfQkxVRSB9LAotCXsgMHhlYiwgMHgxYiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHhlYiwgMHgxYywgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweGViLCAweDFkLCBLRVlfTVVURSB9LAotCXsgMHhlYiwgMHgxZSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4ZWIsIDB4MWYsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHhlYiwgMHg0MCwgS0VZX1BBVVNFIH0sCi0JeyAweGViLCAweDQxLCBLRVlfSE9NRSB9LAotCXsgMHhlYiwgMHg0MiwgS0VZX01FTlUgfSwgLyogRFZEIE1lbnUgKi8KLQl7IDB4ZWIsIDB4NDMsIEtFWV9TVUJUSVRMRSB9LAotCXsgMHhlYiwgMHg0NCwgS0VZX1RFWFQgfSwgLyogVGVsZXRleHQgKi8KLQl7IDB4ZWIsIDB4NDUsIEtFWV9ERUxFVEUgfSwKLQl7IDB4ZWIsIDB4NDYsIEtFWV9UViB9LAotCXsgMHhlYiwgMHg0NywgS0VZX0RWRCB9LAotCXsgMHhlYiwgMHg0OCwgS0VZX1NUT1AgfSwKLQl7IDB4ZWIsIDB4NDksIEtFWV9WSURFTyB9LAotCXsgMHhlYiwgMHg0YSwgS0VZX0FVRElPIH0sIC8qIE11c2ljICovCi0JeyAweGViLCAweDRiLCBLRVlfU0NSRUVOIH0sIC8qIFBpYyAqLwotCXsgMHhlYiwgMHg0YywgS0VZX1BMQVkgfSwKLQl7IDB4ZWIsIDB4NGQsIEtFWV9CQUNLIH0sCi0JeyAweGViLCAweDRlLCBLRVlfUkVXSU5EIH0sCi0JeyAweGViLCAweDRmLCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4ZWIsIDB4NTQsIEtFWV9QUkVWSU9VUyB9LAotCXsgMHhlYiwgMHg1OCwgS0VZX1JFQ09SRCB9LAotCXsgMHhlYiwgMHg1YywgS0VZX05FWFQgfSwKKwl7IDB4ZWIwMSwgS0VZX1BPV0VSIH0sCisJeyAweGViMDIsIEtFWV8xIH0sCisJeyAweGViMDMsIEtFWV8yIH0sCisJeyAweGViMDQsIEtFWV8zIH0sCisJeyAweGViMDUsIEtFWV80IH0sCisJeyAweGViMDYsIEtFWV81IH0sCisJeyAweGViMDcsIEtFWV82IH0sCisJeyAweGViMDgsIEtFWV83IH0sCisJeyAweGViMDksIEtFWV84IH0sCisJeyAweGViMGEsIEtFWV85IH0sCisJeyAweGViMGIsIEtFWV9WSURFTyB9LAorCXsgMHhlYjBjLCBLRVlfMCB9LAorCXsgMHhlYjBkLCBLRVlfUkVGUkVTSCB9LAorCXsgMHhlYjBmLCBLRVlfRVBHIH0sCisJeyAweGViMTAsIEtFWV9VUCB9LAorCXsgMHhlYjExLCBLRVlfTEVGVCB9LAorCXsgMHhlYjEyLCBLRVlfT0sgfSwKKwl7IDB4ZWIxMywgS0VZX1JJR0hUIH0sCisJeyAweGViMTQsIEtFWV9ET1dOIH0sCisJeyAweGViMTYsIEtFWV9JTkZPIH0sCisJeyAweGViMTcsIEtFWV9SRUQgfSwKKwl7IDB4ZWIxOCwgS0VZX0dSRUVOIH0sCisJeyAweGViMTksIEtFWV9ZRUxMT1cgfSwKKwl7IDB4ZWIxYSwgS0VZX0JMVUUgfSwKKwl7IDB4ZWIxYiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHhlYjFjLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4ZWIxZCwgS0VZX01VVEUgfSwKKwl7IDB4ZWIxZSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4ZWIxZiwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweGViNDAsIEtFWV9QQVVTRSB9LAorCXsgMHhlYjQxLCBLRVlfSE9NRSB9LAorCXsgMHhlYjQyLCBLRVlfTUVOVSB9LCAvKiBEVkQgTWVudSAqLworCXsgMHhlYjQzLCBLRVlfU1VCVElUTEUgfSwKKwl7IDB4ZWI0NCwgS0VZX1RFWFQgfSwgLyogVGVsZXRleHQgKi8KKwl7IDB4ZWI0NSwgS0VZX0RFTEVURSB9LAorCXsgMHhlYjQ2LCBLRVlfVFYgfSwKKwl7IDB4ZWI0NywgS0VZX0RWRCB9LAorCXsgMHhlYjQ4LCBLRVlfU1RPUCB9LAorCXsgMHhlYjQ5LCBLRVlfVklERU8gfSwKKwl7IDB4ZWI0YSwgS0VZX0FVRElPIH0sIC8qIE11c2ljICovCisJeyAweGViNGIsIEtFWV9TQ1JFRU4gfSwgLyogUGljICovCisJeyAweGViNGMsIEtFWV9QTEFZIH0sCisJeyAweGViNGQsIEtFWV9CQUNLIH0sCisJeyAweGViNGUsIEtFWV9SRVdJTkQgfSwKKwl7IDB4ZWI0ZiwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweGViNTQsIEtFWV9QUkVWSU9VUyB9LAorCXsgMHhlYjU4LCBLRVlfUkVDT1JEIH0sCisJeyAweGViNWMsIEtFWV9ORVhUIH0sCiAKIAkvKiBLZXkgY29kZXMgZm9yIHRoZSBIYXVwYXVnZSBXaW5UViBOb3ZhLVRELCBjb3BpZWQgZnJvbSBub3ZhLXQtdXNiMi5jIChOb3ZhLVQgVVNCMikgKi8KLQl7IDB4MWUsIDB4MDAsIEtFWV8wIH0sCi0JeyAweDFlLCAweDAxLCBLRVlfMSB9LAotCXsgMHgxZSwgMHgwMiwgS0VZXzIgfSwKLQl7IDB4MWUsIDB4MDMsIEtFWV8zIH0sCi0JeyAweDFlLCAweDA0LCBLRVlfNCB9LAotCXsgMHgxZSwgMHgwNSwgS0VZXzUgfSwKLQl7IDB4MWUsIDB4MDYsIEtFWV82IH0sCi0JeyAweDFlLCAweDA3LCBLRVlfNyB9LAotCXsgMHgxZSwgMHgwOCwgS0VZXzggfSwKLQl7IDB4MWUsIDB4MDksIEtFWV85IH0sCi0JeyAweDFlLCAweDBhLCBLRVlfS1BBU1RFUklTSyB9LAotCXsgMHgxZSwgMHgwYiwgS0VZX1JFRCB9LAotCXsgMHgxZSwgMHgwYywgS0VZX1JBRElPIH0sCi0JeyAweDFlLCAweDBkLCBLRVlfTUVOVSB9LAotCXsgMHgxZSwgMHgwZSwgS0VZX0dSQVZFIH0sIC8qICMgKi8KLQl7IDB4MWUsIDB4MGYsIEtFWV9NVVRFIH0sCi0JeyAweDFlLCAweDEwLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4MWUsIDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDFlLCAweDEyLCBLRVlfQ0hBTk5FTCB9LAotCXsgMHgxZSwgMHgxNCwgS0VZX1VQIH0sCi0JeyAweDFlLCAweDE1LCBLRVlfRE9XTiB9LAotCXsgMHgxZSwgMHgxNiwgS0VZX0xFRlQgfSwKLQl7IDB4MWUsIDB4MTcsIEtFWV9SSUdIVCB9LAotCXsgMHgxZSwgMHgxOCwgS0VZX1ZJREVPIH0sCi0JeyAweDFlLCAweDE5LCBLRVlfQVVESU8gfSwKLQl7IDB4MWUsIDB4MWEsIEtFWV9NRURJQSB9LAotCXsgMHgxZSwgMHgxYiwgS0VZX0VQRyB9LAotCXsgMHgxZSwgMHgxYywgS0VZX1RWIH0sCi0JeyAweDFlLCAweDFlLCBLRVlfTkVYVCB9LAotCXsgMHgxZSwgMHgxZiwgS0VZX0JBQ0sgfSwKLQl7IDB4MWUsIDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MWUsIDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgxZSwgMHgyNCwgS0VZX0xBU1QgfSwgLyogU2tpcCBiYWNrd2FyZHMgKi8KLQl7IDB4MWUsIDB4MjUsIEtFWV9PSyB9LAotCXsgMHgxZSwgMHgyOSwgS0VZX0JMVUV9LAotCXsgMHgxZSwgMHgyZSwgS0VZX0dSRUVOIH0sCi0JeyAweDFlLCAweDMwLCBLRVlfUEFVU0UgfSwKLQl7IDB4MWUsIDB4MzIsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MWUsIDB4MzQsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHgxZSwgMHgzNSwgS0VZX1BMQVkgfSwKLQl7IDB4MWUsIDB4MzYsIEtFWV9TVE9QIH0sCi0JeyAweDFlLCAweDM3LCBLRVlfUkVDT1JEIH0sCi0JeyAweDFlLCAweDM4LCBLRVlfWUVMTE9XIH0sCi0JeyAweDFlLCAweDNiLCBLRVlfR09UTyB9LAotCXsgMHgxZSwgMHgzZCwgS0VZX1BPV0VSIH0sCisJeyAweDFlMDAsIEtFWV8wIH0sCisJeyAweDFlMDEsIEtFWV8xIH0sCisJeyAweDFlMDIsIEtFWV8yIH0sCisJeyAweDFlMDMsIEtFWV8zIH0sCisJeyAweDFlMDQsIEtFWV80IH0sCisJeyAweDFlMDUsIEtFWV81IH0sCisJeyAweDFlMDYsIEtFWV82IH0sCisJeyAweDFlMDcsIEtFWV83IH0sCisJeyAweDFlMDgsIEtFWV84IH0sCisJeyAweDFlMDksIEtFWV85IH0sCisJeyAweDFlMGEsIEtFWV9LUEFTVEVSSVNLIH0sCisJeyAweDFlMGIsIEtFWV9SRUQgfSwKKwl7IDB4MWUwYywgS0VZX1JBRElPIH0sCisJeyAweDFlMGQsIEtFWV9NRU5VIH0sCisJeyAweDFlMGUsIEtFWV9HUkFWRSB9LCAvKiAjICovCisJeyAweDFlMGYsIEtFWV9NVVRFIH0sCisJeyAweDFlMTAsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxZTExLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxZTEyLCBLRVlfQ0hBTk5FTCB9LAorCXsgMHgxZTE0LCBLRVlfVVAgfSwKKwl7IDB4MWUxNSwgS0VZX0RPV04gfSwKKwl7IDB4MWUxNiwgS0VZX0xFRlQgfSwKKwl7IDB4MWUxNywgS0VZX1JJR0hUIH0sCisJeyAweDFlMTgsIEtFWV9WSURFTyB9LAorCXsgMHgxZTE5LCBLRVlfQVVESU8gfSwKKwl7IDB4MWUxYSwgS0VZX01FRElBIH0sCisJeyAweDFlMWIsIEtFWV9FUEcgfSwKKwl7IDB4MWUxYywgS0VZX1RWIH0sCisJeyAweDFlMWUsIEtFWV9ORVhUIH0sCisJeyAweDFlMWYsIEtFWV9CQUNLIH0sCisJeyAweDFlMjAsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MWUyMSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDFlMjQsIEtFWV9MQVNUIH0sIC8qIFNraXAgYmFja3dhcmRzICovCisJeyAweDFlMjUsIEtFWV9PSyB9LAorCXsgMHgxZTI5LCBLRVlfQkxVRX0sCisJeyAweDFlMmUsIEtFWV9HUkVFTiB9LAorCXsgMHgxZTMwLCBLRVlfUEFVU0UgfSwKKwl7IDB4MWUzMiwgS0VZX1JFV0lORCB9LAorCXsgMHgxZTM0LCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4MWUzNSwgS0VZX1BMQVkgfSwKKwl7IDB4MWUzNiwgS0VZX1NUT1AgfSwKKwl7IDB4MWUzNywgS0VZX1JFQ09SRCB9LAorCXsgMHgxZTM4LCBLRVlfWUVMTE9XIH0sCisJeyAweDFlM2IsIEtFWV9HT1RPIH0sCisJeyAweDFlM2QsIEtFWV9QT1dFUiB9LAogCiAJLyogS2V5IGNvZGVzIGZvciB0aGUgTGVhZHRlayBXaW5mYXN0IERUViBEb25nbGUgKi8KLQl7IDB4MDAsIDB4NDIsIEtFWV9QT1dFUiB9LAotCXsgMHgwNywgMHg3YywgS0VZX1RVTkVSIH0sCi0JeyAweDBmLCAweDRlLCBLRVlfUFJJTlQgfSwgLyogUFJFVklFVyAqLwotCXsgMHgwOCwgMHg0MCwgS0VZX1NDUkVFTiB9LCAvKiBmdWxsIHNjcmVlbiB0b2dnbGUqLwotCXsgMHgwZiwgMHg3MSwgS0VZX0RPVCB9LCAvKiBmcmVxdWVuY3kgKi8KLQl7IDB4MDcsIDB4NDMsIEtFWV8wIH0sCi0JeyAweDBjLCAweDQxLCBLRVlfMSB9LAotCXsgMHgwNCwgMHg0MywgS0VZXzIgfSwKLQl7IDB4MGIsIDB4N2YsIEtFWV8zIH0sCi0JeyAweDBlLCAweDQxLCBLRVlfNCB9LAotCXsgMHgwNiwgMHg0MywgS0VZXzUgfSwKLQl7IDB4MDksIDB4N2YsIEtFWV82IH0sCi0JeyAweDBkLCAweDdlLCBLRVlfNyB9LAotCXsgMHgwNSwgMHg3YywgS0VZXzggfSwKLQl7IDB4MGEsIDB4NDAsIEtFWV85IH0sCi0JeyAweDBlLCAweDRlLCBLRVlfQ0xFQVIgfSwKLQl7IDB4MDQsIDB4N2MsIEtFWV9DSEFOTkVMIH0sIC8qIHNob3cgY2hhbm5lbCBudW1iZXIgKi8KLQl7IDB4MGYsIDB4NDEsIEtFWV9MQVNUIH0sIC8qIHJlY2FsbCAqLwotCXsgMHgwMywgMHg0MiwgS0VZX01VVEUgfSwKLQl7IDB4MDYsIDB4NGMsIEtFWV9SRVNFUlZFRCB9LCAvKiBQSVAgYnV0dG9uKi8KLQl7IDB4MDEsIDB4NzIsIEtFWV9TSFVGRkxFIH0sIC8qIFNOQVBTSE9UICovCi0JeyAweDBjLCAweDRlLCBLRVlfUExBWVBBVVNFIH0sIC8qIFRJTUVTSElGVCAqLwotCXsgMHgwYiwgMHg3MCwgS0VZX1JFQ09SRCB9LAotCXsgMHgwMywgMHg3ZCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDAxLCAweDdkLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwMiwgMHg0MiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwMCwgMHg3ZCwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDAwNDIsIEtFWV9QT1dFUiB9LAorCXsgMHgwNzdjLCBLRVlfVFVORVIgfSwKKwl7IDB4MGY0ZSwgS0VZX1BSSU5UIH0sIC8qIFBSRVZJRVcgKi8KKwl7IDB4MDg0MCwgS0VZX1NDUkVFTiB9LCAvKiBmdWxsIHNjcmVlbiB0b2dnbGUqLworCXsgMHgwZjcxLCBLRVlfRE9UIH0sIC8qIGZyZXF1ZW5jeSAqLworCXsgMHgwNzQzLCBLRVlfMCB9LAorCXsgMHgwYzQxLCBLRVlfMSB9LAorCXsgMHgwNDQzLCBLRVlfMiB9LAorCXsgMHgwYjdmLCBLRVlfMyB9LAorCXsgMHgwZTQxLCBLRVlfNCB9LAorCXsgMHgwNjQzLCBLRVlfNSB9LAorCXsgMHgwOTdmLCBLRVlfNiB9LAorCXsgMHgwZDdlLCBLRVlfNyB9LAorCXsgMHgwNTdjLCBLRVlfOCB9LAorCXsgMHgwYTQwLCBLRVlfOSB9LAorCXsgMHgwZTRlLCBLRVlfQ0xFQVIgfSwKKwl7IDB4MDQ3YywgS0VZX0NIQU5ORUwgfSwgLyogc2hvdyBjaGFubmVsIG51bWJlciAqLworCXsgMHgwZjQxLCBLRVlfTEFTVCB9LCAvKiByZWNhbGwgKi8KKwl7IDB4MDM0MiwgS0VZX01VVEUgfSwKKwl7IDB4MDY0YywgS0VZX1JFU0VSVkVEIH0sIC8qIFBJUCBidXR0b24qLworCXsgMHgwMTcyLCBLRVlfU0hVRkZMRSB9LCAvKiBTTkFQU0hPVCAqLworCXsgMHgwYzRlLCBLRVlfUExBWVBBVVNFIH0sIC8qIFRJTUVTSElGVCAqLworCXsgMHgwYjcwLCBLRVlfUkVDT1JEIH0sCisJeyAweDAzN2QsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwMTdkLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMjQyLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAwN2QsIEtFWV9DSEFOTkVMRE9XTiB9LAogCiAJLyogS2V5IGNvZGVzIGZvciBOb3ZhLVREICJjcmVkaXQgY2FyZCIgcmVtb3RlIGNvbnRyb2wuICovCi0JeyAweDFkLCAweDAwLCBLRVlfMCB9LAotCXsgMHgxZCwgMHgwMSwgS0VZXzEgfSwKLQl7IDB4MWQsIDB4MDIsIEtFWV8yIH0sCi0JeyAweDFkLCAweDAzLCBLRVlfMyB9LAotCXsgMHgxZCwgMHgwNCwgS0VZXzQgfSwKLQl7IDB4MWQsIDB4MDUsIEtFWV81IH0sCi0JeyAweDFkLCAweDA2LCBLRVlfNiB9LAotCXsgMHgxZCwgMHgwNywgS0VZXzcgfSwKLQl7IDB4MWQsIDB4MDgsIEtFWV84IH0sCi0JeyAweDFkLCAweDA5LCBLRVlfOSB9LAotCXsgMHgxZCwgMHgwYSwgS0VZX1RFWFQgfSwKLQl7IDB4MWQsIDB4MGQsIEtFWV9NRU5VIH0sCi0JeyAweDFkLCAweDBmLCBLRVlfTVVURSB9LAotCXsgMHgxZCwgMHgxMCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDFkLCAweDExLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxZCwgMHgxMiwgS0VZX0NIQU5ORUwgfSwKLQl7IDB4MWQsIDB4MTQsIEtFWV9VUCB9LAotCXsgMHgxZCwgMHgxNSwgS0VZX0RPV04gfSwKLQl7IDB4MWQsIDB4MTYsIEtFWV9MRUZUIH0sCi0JeyAweDFkLCAweDE3LCBLRVlfUklHSFQgfSwKLQl7IDB4MWQsIDB4MWMsIEtFWV9UViB9LAotCXsgMHgxZCwgMHgxZSwgS0VZX05FWFQgfSwKLQl7IDB4MWQsIDB4MWYsIEtFWV9CQUNLIH0sCi0JeyAweDFkLCAweDIwLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDFkLCAweDIxLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MWQsIDB4MjQsIEtFWV9MQVNUIH0sCi0JeyAweDFkLCAweDI1LCBLRVlfT0sgfSwKLQl7IDB4MWQsIDB4MzAsIEtFWV9QQVVTRSB9LAotCXsgMHgxZCwgMHgzMiwgS0VZX1JFV0lORCB9LAotCXsgMHgxZCwgMHgzNCwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweDFkLCAweDM1LCBLRVlfUExBWSB9LAotCXsgMHgxZCwgMHgzNiwgS0VZX1NUT1AgfSwKLQl7IDB4MWQsIDB4MzcsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MWQsIDB4M2IsIEtFWV9HT1RPIH0sCi0JeyAweDFkLCAweDNkLCBLRVlfUE9XRVIgfSwKKwl7IDB4MWQwMCwgS0VZXzAgfSwKKwl7IDB4MWQwMSwgS0VZXzEgfSwKKwl7IDB4MWQwMiwgS0VZXzIgfSwKKwl7IDB4MWQwMywgS0VZXzMgfSwKKwl7IDB4MWQwNCwgS0VZXzQgfSwKKwl7IDB4MWQwNSwgS0VZXzUgfSwKKwl7IDB4MWQwNiwgS0VZXzYgfSwKKwl7IDB4MWQwNywgS0VZXzcgfSwKKwl7IDB4MWQwOCwgS0VZXzggfSwKKwl7IDB4MWQwOSwgS0VZXzkgfSwKKwl7IDB4MWQwYSwgS0VZX1RFWFQgfSwKKwl7IDB4MWQwZCwgS0VZX01FTlUgfSwKKwl7IDB4MWQwZiwgS0VZX01VVEUgfSwKKwl7IDB4MWQxMCwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDFkMTEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDFkMTIsIEtFWV9DSEFOTkVMIH0sCisJeyAweDFkMTQsIEtFWV9VUCB9LAorCXsgMHgxZDE1LCBLRVlfRE9XTiB9LAorCXsgMHgxZDE2LCBLRVlfTEVGVCB9LAorCXsgMHgxZDE3LCBLRVlfUklHSFQgfSwKKwl7IDB4MWQxYywgS0VZX1RWIH0sCisJeyAweDFkMWUsIEtFWV9ORVhUIH0sCisJeyAweDFkMWYsIEtFWV9CQUNLIH0sCisJeyAweDFkMjAsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MWQyMSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDFkMjQsIEtFWV9MQVNUIH0sCisJeyAweDFkMjUsIEtFWV9PSyB9LAorCXsgMHgxZDMwLCBLRVlfUEFVU0UgfSwKKwl7IDB4MWQzMiwgS0VZX1JFV0lORCB9LAorCXsgMHgxZDM0LCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4MWQzNSwgS0VZX1BMQVkgfSwKKwl7IDB4MWQzNiwgS0VZX1NUT1AgfSwKKwl7IDB4MWQzNywgS0VZX1JFQ09SRCB9LAorCXsgMHgxZDNiLCBLRVlfR09UTyB9LAorCXsgMHgxZDNkLCBLRVlfUE9XRVIgfSwKIH07CiAKIC8qIFNUSzc3MDBQOiBIYXVwcGF1Z2UgTm92YS1UIFN0aWNrLCBBVmVyTWVkaWEgVm9sYXIgKi8KQEAgLTE0OTcsNiArMTQ5OSw4IEBACiAJeyBVU0JfREVWSUNFKFVTQl9WSURfTEVBRFRFSywgICBVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9IKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLAlVU0JfUElEX1RFUlJBVEVDX1QzKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLAlVU0JfUElEX1RFUlJBVEVDX1Q1KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1lVQU4sICAgICAgVVNCX1BJRF9ZVUFOX1NUSzc3MDBEKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1lVQU4sCVVTQl9QSURfWVVBTl9TVEs3NzAwRF8yKSB9LAogCXsgMCB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkaWIwNzAwX3VzYl9pZF90YWJsZSk7CkBAIC0xNjI0LDcgKzE2MjgsNyBAQAogCQkJfQogCQl9LAogCi0JCS5udW1fZGV2aWNlX2Rlc2NzID0gNCwKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSA1LAogCQkuZGV2aWNlcyA9IHsKIAkJCXsgICAiUGlubmFjbGUgUENUViAyMDAwZSIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMTFdLCBOVUxMIH0sCkBAIC0xNjQyLDYgKzE2NDYsMTAgQEAKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVsxNF0sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCisJCQl7ICAgIllVQU4gSGlnaC1UZWNoIERpQmNvbSBTVEs3NzAwRCIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNTVdLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAogCiAJCX0sCiAKQEAgLTE4MjIsNyArMTgzMCw3IEBACiAJCQl9LAogCQl9LAogCi0JCS5udW1fZGV2aWNlX2Rlc2NzID0gOCwKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSA5LAogCQkuZGV2aWNlcyA9IHsKIAkJCXsgICAiVGVycmF0ZWMgQ2luZXJneSBIVCBVU0IgWEUiLAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzI3XSwgTlVMTCB9LApAQCAtMTg1Niw3ICsxODY0LDEwIEBACiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNTFdLCBOVUxMIH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAotCisJCQl7ICAgIllVQU4gSGlnaC1UZWNoIFNUSzc3MDBEIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs1NF0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCiAJCX0sCiAJCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKIAkJLnJjX2tleV9tYXAgICAgICAgPSBkaWIwNzAwX3JjX2tleXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLWNvbW1vbi5jCmluZGV4IDhkYmFkMWUuLmRhMzQ5NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLWNvbW1vbi5jCkBAIC0zMTgsMTMyICszMTgsMTMyIEBACiAgKi8KIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBkaWJ1c2JfcmNfa2V5c1tdID0gewogCS8qIEtleSBjb2RlcyBmb3IgdGhlIGxpdHRsZSBBcnRlYyBUMS9Ud2luaGFuL0hBTUEvIHJlbW90ZS4gKi8KLQl7IDB4MDAsIDB4MTYsIEtFWV9QT1dFUiB9LAotCXsgMHgwMCwgMHgxMCwgS0VZX01VVEUgfSwKLQl7IDB4MDAsIDB4MDMsIEtFWV8xIH0sCi0JeyAweDAwLCAweDAxLCBLRVlfMiB9LAotCXsgMHgwMCwgMHgwNiwgS0VZXzMgfSwKLQl7IDB4MDAsIDB4MDksIEtFWV80IH0sCi0JeyAweDAwLCAweDFkLCBLRVlfNSB9LAotCXsgMHgwMCwgMHgxZiwgS0VZXzYgfSwKLQl7IDB4MDAsIDB4MGQsIEtFWV83IH0sCi0JeyAweDAwLCAweDE5LCBLRVlfOCB9LAotCXsgMHgwMCwgMHgxYiwgS0VZXzkgfSwKLQl7IDB4MDAsIDB4MTUsIEtFWV8wIH0sCi0JeyAweDAwLCAweDA1LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDAwLCAweDAyLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MDAsIDB4MWUsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHgwMCwgMHgwYSwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MDAsIDB4MTEsIEtFWV9SRUNPUkQgfSwKLQl7IDB4MDAsIDB4MTcsIEtFWV9GQVZPUklURVMgfSwgLyogSGVhcnQgc3ltYm9sIC0gQ2hhbm5lbCBsaXN0LiAqLwotCXsgMHgwMCwgMHgxNCwgS0VZX1BMQVkgfSwKLQl7IDB4MDAsIDB4MWEsIEtFWV9TVE9QIH0sCi0JeyAweDAwLCAweDQwLCBLRVlfUkVXSU5EIH0sCi0JeyAweDAwLCAweDEyLCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MDAsIDB4MGUsIEtFWV9QUkVWSU9VUyB9LCAvKiBSZWNhbGwgLSBQcmV2aW91cyBjaGFubmVsLiAqLwotCXsgMHgwMCwgMHg0YywgS0VZX1BBVVNFIH0sCi0JeyAweDAwLCAweDRkLCBLRVlfU0NSRUVOIH0sIC8qIEZ1bGwgc2NyZWVuIG1vZGUuICovCi0JeyAweDAwLCAweDU0LCBLRVlfQVVESU8gfSwgLyogTVRTIC0gU3dpdGNoIHRvIHNlY29uZGFyeSBhdWRpby4gKi8KKwl7IDB4MDAxNiwgS0VZX1BPV0VSIH0sCisJeyAweDAwMTAsIEtFWV9NVVRFIH0sCisJeyAweDAwMDMsIEtFWV8xIH0sCisJeyAweDAwMDEsIEtFWV8yIH0sCisJeyAweDAwMDYsIEtFWV8zIH0sCisJeyAweDAwMDksIEtFWV80IH0sCisJeyAweDAwMWQsIEtFWV81IH0sCisJeyAweDAwMWYsIEtFWV82IH0sCisJeyAweDAwMGQsIEtFWV83IH0sCisJeyAweDAwMTksIEtFWV84IH0sCisJeyAweDAwMWIsIEtFWV85IH0sCisJeyAweDAwMTUsIEtFWV8wIH0sCisJeyAweDAwMDUsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDAwMiwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDAwMWUsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwMDBhLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMDExLCBLRVlfUkVDT1JEIH0sCisJeyAweDAwMTcsIEtFWV9GQVZPUklURVMgfSwgLyogSGVhcnQgc3ltYm9sIC0gQ2hhbm5lbCBsaXN0LiAqLworCXsgMHgwMDE0LCBLRVlfUExBWSB9LAorCXsgMHgwMDFhLCBLRVlfU1RPUCB9LAorCXsgMHgwMDQwLCBLRVlfUkVXSU5EIH0sCisJeyAweDAwMTIsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgwMDBlLCBLRVlfUFJFVklPVVMgfSwgLyogUmVjYWxsIC0gUHJldmlvdXMgY2hhbm5lbC4gKi8KKwl7IDB4MDA0YywgS0VZX1BBVVNFIH0sCisJeyAweDAwNGQsIEtFWV9TQ1JFRU4gfSwgLyogRnVsbCBzY3JlZW4gbW9kZS4gKi8KKwl7IDB4MDA1NCwgS0VZX0FVRElPIH0sIC8qIE1UUyAtIFN3aXRjaCB0byBzZWNvbmRhcnkgYXVkaW8uICovCiAJLyogYWRkaXRpb25hbCBrZXlzIFR3aW5IYW4gVmlzaW9uUGx1cywgdGhlIEFydGVjIHNlZW1pbmdseSBub3QgaGF2ZSAqLwotCXsgMHgwMCwgMHgwYywgS0VZX0NBTkNFTCB9LCAvKiBDYW5jZWwgKi8KLQl7IDB4MDAsIDB4MWMsIEtFWV9FUEcgfSwgLyogRVBHICovCi0JeyAweDAwLCAweDAwLCBLRVlfVEFCIH0sIC8qIFRhYiAqLwotCXsgMHgwMCwgMHg0OCwgS0VZX0lORk8gfSwgLyogUHJldmlldyAqLwotCXsgMHgwMCwgMHgwNCwgS0VZX0xJU1QgfSwgLyogUmVjb3JkTGlzdCAqLwotCXsgMHgwMCwgMHgwZiwgS0VZX1RFWFQgfSwgLyogVGVsZXRleHQgKi8KKwl7IDB4MDAwYywgS0VZX0NBTkNFTCB9LCAvKiBDYW5jZWwgKi8KKwl7IDB4MDAxYywgS0VZX0VQRyB9LCAvKiBFUEcgKi8KKwl7IDB4MDAwMCwgS0VZX1RBQiB9LCAvKiBUYWIgKi8KKwl7IDB4MDA0OCwgS0VZX0lORk8gfSwgLyogUHJldmlldyAqLworCXsgMHgwMDA0LCBLRVlfTElTVCB9LCAvKiBSZWNvcmRMaXN0ICovCisJeyAweDAwMGYsIEtFWV9URVhUIH0sIC8qIFRlbGV0ZXh0ICovCiAJLyogS2V5IGNvZGVzIGZvciB0aGUgS1dvcmxkL0FEU1RlY2gvSmV0V2F5IHJlbW90ZS4gKi8KLQl7IDB4ODYsIDB4MTIsIEtFWV9QT1dFUiB9LAotCXsgMHg4NiwgMHgwZiwgS0VZX1NFTEVDVCB9LCAvKiBzb3VyY2UgKi8KLQl7IDB4ODYsIDB4MGMsIEtFWV9VTktOT1dOIH0sIC8qIHNjYW4gKi8KLQl7IDB4ODYsIDB4MGIsIEtFWV9FUEcgfSwKLQl7IDB4ODYsIDB4MTAsIEtFWV9NVVRFIH0sCi0JeyAweDg2LCAweDAxLCBLRVlfMSB9LAotCXsgMHg4NiwgMHgwMiwgS0VZXzIgfSwKLQl7IDB4ODYsIDB4MDMsIEtFWV8zIH0sCi0JeyAweDg2LCAweDA0LCBLRVlfNCB9LAotCXsgMHg4NiwgMHgwNSwgS0VZXzUgfSwKLQl7IDB4ODYsIDB4MDYsIEtFWV82IH0sCi0JeyAweDg2LCAweDA3LCBLRVlfNyB9LAotCXsgMHg4NiwgMHgwOCwgS0VZXzggfSwKLQl7IDB4ODYsIDB4MDksIEtFWV85IH0sCi0JeyAweDg2LCAweDBhLCBLRVlfMCB9LAotCXsgMHg4NiwgMHgxOCwgS0VZX1pPT00gfSwKLQl7IDB4ODYsIDB4MWMsIEtFWV9VTktOT1dOIH0sIC8qIHByZXZpZXcgKi8KLQl7IDB4ODYsIDB4MTMsIEtFWV9VTktOT1dOIH0sIC8qIHNuYXAgKi8KLQl7IDB4ODYsIDB4MDAsIEtFWV9VTkRPIH0sCi0JeyAweDg2LCAweDFkLCBLRVlfUkVDT1JEIH0sCi0JeyAweDg2LCAweDBkLCBLRVlfU1RPUCB9LAotCXsgMHg4NiwgMHgwZSwgS0VZX1BBVVNFIH0sCi0JeyAweDg2LCAweDE2LCBLRVlfUExBWSB9LAotCXsgMHg4NiwgMHgxMSwgS0VZX0JBQ0sgfSwKLQl7IDB4ODYsIDB4MTksIEtFWV9GT1JXQVJEIH0sCi0JeyAweDg2LCAweDE0LCBLRVlfVU5LTk9XTiB9LCAvKiBwaXAgKi8KLQl7IDB4ODYsIDB4MTUsIEtFWV9FU0MgfSwKLQl7IDB4ODYsIDB4MWEsIEtFWV9VUCB9LAotCXsgMHg4NiwgMHgxZSwgS0VZX0RPV04gfSwKLQl7IDB4ODYsIDB4MWYsIEtFWV9MRUZUIH0sCi0JeyAweDg2LCAweDFiLCBLRVlfUklHSFQgfSwKKwl7IDB4ODYxMiwgS0VZX1BPV0VSIH0sCisJeyAweDg2MGYsIEtFWV9TRUxFQ1QgfSwgLyogc291cmNlICovCisJeyAweDg2MGMsIEtFWV9VTktOT1dOIH0sIC8qIHNjYW4gKi8KKwl7IDB4ODYwYiwgS0VZX0VQRyB9LAorCXsgMHg4NjEwLCBLRVlfTVVURSB9LAorCXsgMHg4NjAxLCBLRVlfMSB9LAorCXsgMHg4NjAyLCBLRVlfMiB9LAorCXsgMHg4NjAzLCBLRVlfMyB9LAorCXsgMHg4NjA0LCBLRVlfNCB9LAorCXsgMHg4NjA1LCBLRVlfNSB9LAorCXsgMHg4NjA2LCBLRVlfNiB9LAorCXsgMHg4NjA3LCBLRVlfNyB9LAorCXsgMHg4NjA4LCBLRVlfOCB9LAorCXsgMHg4NjA5LCBLRVlfOSB9LAorCXsgMHg4NjBhLCBLRVlfMCB9LAorCXsgMHg4NjE4LCBLRVlfWk9PTSB9LAorCXsgMHg4NjFjLCBLRVlfVU5LTk9XTiB9LCAvKiBwcmV2aWV3ICovCisJeyAweDg2MTMsIEtFWV9VTktOT1dOIH0sIC8qIHNuYXAgKi8KKwl7IDB4ODYwMCwgS0VZX1VORE8gfSwKKwl7IDB4ODYxZCwgS0VZX1JFQ09SRCB9LAorCXsgMHg4NjBkLCBLRVlfU1RPUCB9LAorCXsgMHg4NjBlLCBLRVlfUEFVU0UgfSwKKwl7IDB4ODYxNiwgS0VZX1BMQVkgfSwKKwl7IDB4ODYxMSwgS0VZX0JBQ0sgfSwKKwl7IDB4ODYxOSwgS0VZX0ZPUldBUkQgfSwKKwl7IDB4ODYxNCwgS0VZX1VOS05PV04gfSwgLyogcGlwICovCisJeyAweDg2MTUsIEtFWV9FU0MgfSwKKwl7IDB4ODYxYSwgS0VZX1VQIH0sCisJeyAweDg2MWUsIEtFWV9ET1dOIH0sCisJeyAweDg2MWYsIEtFWV9MRUZUIH0sCisJeyAweDg2MWIsIEtFWV9SSUdIVCB9LAogCiAJLyogS2V5IGNvZGVzIGZvciB0aGUgRGlCY29tIE1PRDMwMDAgcmVtb3RlLiAqLwotCXsgMHg4MCwgMHgwMCwgS0VZX01VVEUgfSwKLQl7IDB4ODAsIDB4MDEsIEtFWV9URVhUIH0sCi0JeyAweDgwLCAweDAyLCBLRVlfSE9NRSB9LAotCXsgMHg4MCwgMHgwMywgS0VZX1BPV0VSIH0sCisJeyAweDgwMDAsIEtFWV9NVVRFIH0sCisJeyAweDgwMDEsIEtFWV9URVhUIH0sCisJeyAweDgwMDIsIEtFWV9IT01FIH0sCisJeyAweDgwMDMsIEtFWV9QT1dFUiB9LAogCi0JeyAweDgwLCAweDA0LCBLRVlfUkVEIH0sCi0JeyAweDgwLCAweDA1LCBLRVlfR1JFRU4gfSwKLQl7IDB4ODAsIDB4MDYsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4ODAsIDB4MDcsIEtFWV9CTFVFIH0sCisJeyAweDgwMDQsIEtFWV9SRUQgfSwKKwl7IDB4ODAwNSwgS0VZX0dSRUVOIH0sCisJeyAweDgwMDYsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4ODAwNywgS0VZX0JMVUUgfSwKIAotCXsgMHg4MCwgMHgwOCwgS0VZX0RWRCB9LAotCXsgMHg4MCwgMHgwOSwgS0VZX0FVRElPIH0sCi0JeyAweDgwLCAweDBhLCBLRVlfTUVESUEgfSwgICAgICAvKiBQaWN0dXJlcyAqLwotCXsgMHg4MCwgMHgwYiwgS0VZX1ZJREVPIH0sCisJeyAweDgwMDgsIEtFWV9EVkQgfSwKKwl7IDB4ODAwOSwgS0VZX0FVRElPIH0sCisJeyAweDgwMGEsIEtFWV9NRURJQSB9LCAgICAgIC8qIFBpY3R1cmVzICovCisJeyAweDgwMGIsIEtFWV9WSURFTyB9LAogCi0JeyAweDgwLCAweDBjLCBLRVlfQkFDSyB9LAotCXsgMHg4MCwgMHgwZCwgS0VZX1VQIH0sCi0JeyAweDgwLCAweDBlLCBLRVlfUkFESU8gfSwKLQl7IDB4ODAsIDB4MGYsIEtFWV9FUEcgfSwKKwl7IDB4ODAwYywgS0VZX0JBQ0sgfSwKKwl7IDB4ODAwZCwgS0VZX1VQIH0sCisJeyAweDgwMGUsIEtFWV9SQURJTyB9LAorCXsgMHg4MDBmLCBLRVlfRVBHIH0sCiAKLQl7IDB4ODAsIDB4MTAsIEtFWV9MRUZUIH0sCi0JeyAweDgwLCAweDExLCBLRVlfT0sgfSwKLQl7IDB4ODAsIDB4MTIsIEtFWV9SSUdIVCB9LAotCXsgMHg4MCwgMHgxMywgS0VZX1VOS05PV04gfSwgICAgLyogU0FQICovCisJeyAweDgwMTAsIEtFWV9MRUZUIH0sCisJeyAweDgwMTEsIEtFWV9PSyB9LAorCXsgMHg4MDEyLCBLRVlfUklHSFQgfSwKKwl7IDB4ODAxMywgS0VZX1VOS05PV04gfSwgICAgLyogU0FQICovCiAKLQl7IDB4ODAsIDB4MTQsIEtFWV9UViB9LAotCXsgMHg4MCwgMHgxNSwgS0VZX0RPV04gfSwKLQl7IDB4ODAsIDB4MTYsIEtFWV9NRU5VIH0sICAgICAgIC8qIERWRCBNZW51ICovCi0JeyAweDgwLCAweDE3LCBLRVlfTEFTVCB9LAorCXsgMHg4MDE0LCBLRVlfVFYgfSwKKwl7IDB4ODAxNSwgS0VZX0RPV04gfSwKKwl7IDB4ODAxNiwgS0VZX01FTlUgfSwgICAgICAgLyogRFZEIE1lbnUgKi8KKwl7IDB4ODAxNywgS0VZX0xBU1QgfSwKIAotCXsgMHg4MCwgMHgxOCwgS0VZX1JFQ09SRCB9LAotCXsgMHg4MCwgMHgxOSwgS0VZX1NUT1AgfSwKLQl7IDB4ODAsIDB4MWEsIEtFWV9QQVVTRSB9LAotCXsgMHg4MCwgMHgxYiwgS0VZX1BMQVkgfSwKKwl7IDB4ODAxOCwgS0VZX1JFQ09SRCB9LAorCXsgMHg4MDE5LCBLRVlfU1RPUCB9LAorCXsgMHg4MDFhLCBLRVlfUEFVU0UgfSwKKwl7IDB4ODAxYiwgS0VZX1BMQVkgfSwKIAotCXsgMHg4MCwgMHgxYywgS0VZX1BSRVZJT1VTIH0sCi0JeyAweDgwLCAweDFkLCBLRVlfUkVXSU5EIH0sCi0JeyAweDgwLCAweDFlLCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4ODAsIDB4MWYsIEtFWV9ORVhUfSwKKwl7IDB4ODAxYywgS0VZX1BSRVZJT1VTIH0sCisJeyAweDgwMWQsIEtFWV9SRVdJTkQgfSwKKwl7IDB4ODAxZSwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDgwMWYsIEtFWV9ORVhUfSwKIAotCXsgMHg4MCwgMHg0MCwgS0VZXzEgfSwKLQl7IDB4ODAsIDB4NDEsIEtFWV8yIH0sCi0JeyAweDgwLCAweDQyLCBLRVlfMyB9LAotCXsgMHg4MCwgMHg0MywgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHg4MDQwLCBLRVlfMSB9LAorCXsgMHg4MDQxLCBLRVlfMiB9LAorCXsgMHg4MDQyLCBLRVlfMyB9LAorCXsgMHg4MDQzLCBLRVlfQ0hBTk5FTFVQIH0sCiAKLQl7IDB4ODAsIDB4NDQsIEtFWV80IH0sCi0JeyAweDgwLCAweDQ1LCBLRVlfNSB9LAotCXsgMHg4MCwgMHg0NiwgS0VZXzYgfSwKLQl7IDB4ODAsIDB4NDcsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHg4MDQ0LCBLRVlfNCB9LAorCXsgMHg4MDQ1LCBLRVlfNSB9LAorCXsgMHg4MDQ2LCBLRVlfNiB9LAorCXsgMHg4MDQ3LCBLRVlfQ0hBTk5FTERPV04gfSwKIAotCXsgMHg4MCwgMHg0OCwgS0VZXzcgfSwKLQl7IDB4ODAsIDB4NDksIEtFWV84IH0sCi0JeyAweDgwLCAweDRhLCBLRVlfOSB9LAotCXsgMHg4MCwgMHg0YiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDgwNDgsIEtFWV83IH0sCisJeyAweDgwNDksIEtFWV84IH0sCisJeyAweDgwNGEsIEtFWV85IH0sCisJeyAweDgwNGIsIEtFWV9WT0xVTUVVUCB9LAogCi0JeyAweDgwLCAweDRjLCBLRVlfQ0xFQVIgfSwKLQl7IDB4ODAsIDB4NGQsIEtFWV8wIH0sCi0JeyAweDgwLCAweDRlLCBLRVlfRU5URVIgfSwKLQl7IDB4ODAsIDB4NGYsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDgwNGMsIEtFWV9DTEVBUiB9LAorCXsgMHg4MDRkLCBLRVlfMCB9LAorCXsgMHg4MDRlLCBLRVlfRU5URVIgfSwKKwl7IDB4ODA0ZiwgS0VZX1ZPTFVNRURPV04gfSwKIH07CiBFWFBPUlRfU1lNQk9MKGRpYnVzYl9yY19rZXlzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1jLmMKaW5kZXggMDU5Y2VjOS4uYTA1YjlmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYy5jCkBAIC00Miw2ICs0Miw4IEBACiAvKiAxMSAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9VTFRJTUFfRUxFQ1RST05JQywJVVNCX1BJRF9BUlRFQ19UMTRfV0FSTSkgfSwKIC8qIDEyICovCXsgVVNCX0RFVklDRShVU0JfVklEX0xFQURURUssCQlVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9DT0xEKSB9LAogLyogMTMgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfTEVBRFRFSywJCVVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX1dBUk0pIH0sCisvKiAxNCAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9IVU1BWF9DT0VYLAlVU0JfUElEX0RWQl9UX1VTQl9TVElDS19ISUdIX1NQRUVEX0NPTEQpIH0sCisvKiAxNSAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9IVU1BWF9DT0VYLAlVU0JfUElEX0RWQl9UX1VTQl9TVElDS19ISUdIX1NQRUVEX1dBUk0pIH0sCiAJCQl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBkaWJ1c2JfZGliMzAwMG1jX3RhYmxlKTsKQEAgLTY2LDcgKzY4LDcgQEAKIAkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCiAJCQkuc3RyZWFtID0gewogCQkJCS50eXBlID0gVVNCX0JVTEssCi0JCQkJLmNvdW50ID0gNywKKwkJCQkuY291bnQgPSA4LAogCQkJCS5lbmRwb2ludCA9IDB4MDYsCiAJCQkJLnUgPSB7CiAJCQkJCS5idWxrID0gewpAQCAtODgsNyArOTAsNyBAQAogCiAJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKIAotCS5udW1fZGV2aWNlX2Rlc2NzID0gNywKKwkubnVtX2RldmljZV9kZXNjcyA9IDgsCiAJLmRldmljZXMgPSB7CiAJCXsgICAiRGlCY29tIFVTQjIuMCBEVkItVCByZWZlcmVuY2UgZGVzaWduIChNT0QzMDAwUCkiLAogCQkJeyAmZGlidXNiX2RpYjMwMDBtY190YWJsZVswXSwgTlVMTCB9LApAQCAtMTE5LDYgKzEyMSwxMCBAQAogCQkJeyAmZGlidXNiX2RpYjMwMDBtY190YWJsZVsxMl0sIE5VTEwgfSwKIAkJCXsgJmRpYnVzYl9kaWIzMDAwbWNfdGFibGVbMTNdLCBOVUxMIH0sCiAJCX0sCisJCXsgICAiSHVtYXgvQ29leCBEVkItVCBVU0IgU3RpY2sgMi4wIEhpZ2ggU3BlZWQiLAorCQkJeyAmZGlidXNiX2RpYjMwMDBtY190YWJsZVsxNF0sIE5VTEwgfSwKKwkJCXsgJmRpYnVzYl9kaWIzMDAwbWNfdGFibGVbMTVdLCBOVUxMIH0sCisJCX0sCiAJCXsgTlVMTCB9LAogCX0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYwppbmRleCBiNTQ1Y2YzLi45NTUxNDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlnaXR2LmMKQEAgLTE2Miw2MSArMTYyLDYxIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgZGlnaXR2X3JjX2tleXNbXSA9IHsKLQl7IDB4NWYsIDB4NTUsIEtFWV8wIH0sCi0JeyAweDZmLCAweDU1LCBLRVlfMSB9LAotCXsgMHg5ZiwgMHg1NSwgS0VZXzIgfSwKLQl7IDB4YWYsIDB4NTUsIEtFWV8zIH0sCi0JeyAweDVmLCAweDU2LCBLRVlfNCB9LAotCXsgMHg2ZiwgMHg1NiwgS0VZXzUgfSwKLQl7IDB4OWYsIDB4NTYsIEtFWV82IH0sCi0JeyAweGFmLCAweDU2LCBLRVlfNyB9LAotCXsgMHg1ZiwgMHg1OSwgS0VZXzggfSwKLQl7IDB4NmYsIDB4NTksIEtFWV85IH0sCi0JeyAweDlmLCAweDU5LCBLRVlfVFYgfSwKLQl7IDB4YWYsIDB4NTksIEtFWV9BVVggfSwKLQl7IDB4NWYsIDB4NWEsIEtFWV9EVkQgfSwKLQl7IDB4NmYsIDB4NWEsIEtFWV9QT1dFUiB9LAotCXsgMHg5ZiwgMHg1YSwgS0VZX01IUCB9LCAgICAgLyogbGFiZWxsZWQgJ1BpY3R1cmUnICovCi0JeyAweGFmLCAweDVhLCBLRVlfQVVESU8gfSwKLQl7IDB4NWYsIDB4NjUsIEtFWV9JTkZPIH0sCi0JeyAweDZmLCAweDY1LCBLRVlfRjEzIH0sICAgICAvKiAxNjo5ICovCi0JeyAweDlmLCAweDY1LCBLRVlfRjE0IH0sICAgICAvKiAxNDo5ICovCi0JeyAweGFmLCAweDY1LCBLRVlfRVBHIH0sCi0JeyAweDVmLCAweDY2LCBLRVlfRVhJVCB9LAotCXsgMHg2ZiwgMHg2NiwgS0VZX01FTlUgfSwKLQl7IDB4OWYsIDB4NjYsIEtFWV9VUCB9LAotCXsgMHhhZiwgMHg2NiwgS0VZX0RPV04gfSwKLQl7IDB4NWYsIDB4NjksIEtFWV9MRUZUIH0sCi0JeyAweDZmLCAweDY5LCBLRVlfUklHSFQgfSwKLQl7IDB4OWYsIDB4NjksIEtFWV9FTlRFUiB9LAotCXsgMHhhZiwgMHg2OSwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHg1ZiwgMHg2YSwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDZmLCAweDZhLCBLRVlfVk9MVU1FVVAgfSwKLQl7IDB4OWYsIDB4NmEsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweGFmLCAweDZhLCBLRVlfUkVEIH0sCi0JeyAweDVmLCAweDk1LCBLRVlfR1JFRU4gfSwKLQl7IDB4NmYsIDB4OTUsIEtFWV9ZRUxMT1cgfSwKLQl7IDB4OWYsIDB4OTUsIEtFWV9CTFVFIH0sCi0JeyAweGFmLCAweDk1LCBLRVlfU1VCVElUTEUgfSwKLQl7IDB4NWYsIDB4OTYsIEtFWV9GMTUgfSwgICAgIC8qIEFEICovCi0JeyAweDZmLCAweDk2LCBLRVlfVEVYVCB9LAotCXsgMHg5ZiwgMHg5NiwgS0VZX01VVEUgfSwKLQl7IDB4YWYsIDB4OTYsIEtFWV9SRVdJTkQgfSwKLQl7IDB4NWYsIDB4OTksIEtFWV9TVE9QIH0sCi0JeyAweDZmLCAweDk5LCBLRVlfUExBWSB9LAotCXsgMHg5ZiwgMHg5OSwgS0VZX0ZBU1RGT1JXQVJEIH0sCi0JeyAweGFmLCAweDk5LCBLRVlfRjE2IH0sICAgICAvKiBjaGFwdGVyICovCi0JeyAweDVmLCAweDlhLCBLRVlfUEFVU0UgfSwKLQl7IDB4NmYsIDB4OWEsIEtFWV9QTEFZIH0sCi0JeyAweDlmLCAweDlhLCBLRVlfUkVDT1JEIH0sCi0JeyAweGFmLCAweDlhLCBLRVlfRjE3IH0sICAgICAvKiBwaWN0dXJlIGluIHBpY3R1cmUgKi8KLQl7IDB4NWYsIDB4YTUsIEtFWV9LUFBMVVMgfSwgIC8qIHpvb20gaW4gKi8KLQl7IDB4NmYsIDB4YTUsIEtFWV9LUE1JTlVTIH0sIC8qIHpvb20gb3V0ICovCi0JeyAweDlmLCAweGE1LCBLRVlfRjE4IH0sICAgICAvKiBjYXB0dXJlICovCi0JeyAweGFmLCAweGE1LCBLRVlfRjE5IH0sICAgICAvKiB3ZWIgKi8KLQl7IDB4NWYsIDB4YTYsIEtFWV9FTUFJTCB9LAotCXsgMHg2ZiwgMHhhNiwgS0VZX1BIT05FIH0sCi0JeyAweDlmLCAweGE2LCBLRVlfUEMgfSwKKwl7IDB4NWY1NSwgS0VZXzAgfSwKKwl7IDB4NmY1NSwgS0VZXzEgfSwKKwl7IDB4OWY1NSwgS0VZXzIgfSwKKwl7IDB4YWY1NSwgS0VZXzMgfSwKKwl7IDB4NWY1NiwgS0VZXzQgfSwKKwl7IDB4NmY1NiwgS0VZXzUgfSwKKwl7IDB4OWY1NiwgS0VZXzYgfSwKKwl7IDB4YWY1NiwgS0VZXzcgfSwKKwl7IDB4NWY1OSwgS0VZXzggfSwKKwl7IDB4NmY1OSwgS0VZXzkgfSwKKwl7IDB4OWY1OSwgS0VZX1RWIH0sCisJeyAweGFmNTksIEtFWV9BVVggfSwKKwl7IDB4NWY1YSwgS0VZX0RWRCB9LAorCXsgMHg2ZjVhLCBLRVlfUE9XRVIgfSwKKwl7IDB4OWY1YSwgS0VZX01IUCB9LCAgICAgLyogbGFiZWxsZWQgJ1BpY3R1cmUnICovCisJeyAweGFmNWEsIEtFWV9BVURJTyB9LAorCXsgMHg1ZjY1LCBLRVlfSU5GTyB9LAorCXsgMHg2ZjY1LCBLRVlfRjEzIH0sICAgICAvKiAxNjo5ICovCisJeyAweDlmNjUsIEtFWV9GMTQgfSwgICAgIC8qIDE0OjkgKi8KKwl7IDB4YWY2NSwgS0VZX0VQRyB9LAorCXsgMHg1ZjY2LCBLRVlfRVhJVCB9LAorCXsgMHg2ZjY2LCBLRVlfTUVOVSB9LAorCXsgMHg5ZjY2LCBLRVlfVVAgfSwKKwl7IDB4YWY2NiwgS0VZX0RPV04gfSwKKwl7IDB4NWY2OSwgS0VZX0xFRlQgfSwKKwl7IDB4NmY2OSwgS0VZX1JJR0hUIH0sCisJeyAweDlmNjksIEtFWV9FTlRFUiB9LAorCXsgMHhhZjY5LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDVmNmEsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHg2ZjZhLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4OWY2YSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4YWY2YSwgS0VZX1JFRCB9LAorCXsgMHg1Zjk1LCBLRVlfR1JFRU4gfSwKKwl7IDB4NmY5NSwgS0VZX1lFTExPVyB9LAorCXsgMHg5Zjk1LCBLRVlfQkxVRSB9LAorCXsgMHhhZjk1LCBLRVlfU1VCVElUTEUgfSwKKwl7IDB4NWY5NiwgS0VZX0YxNSB9LCAgICAgLyogQUQgKi8KKwl7IDB4NmY5NiwgS0VZX1RFWFQgfSwKKwl7IDB4OWY5NiwgS0VZX01VVEUgfSwKKwl7IDB4YWY5NiwgS0VZX1JFV0lORCB9LAorCXsgMHg1Zjk5LCBLRVlfU1RPUCB9LAorCXsgMHg2Zjk5LCBLRVlfUExBWSB9LAorCXsgMHg5Zjk5LCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4YWY5OSwgS0VZX0YxNiB9LCAgICAgLyogY2hhcHRlciAqLworCXsgMHg1ZjlhLCBLRVlfUEFVU0UgfSwKKwl7IDB4NmY5YSwgS0VZX1BMQVkgfSwKKwl7IDB4OWY5YSwgS0VZX1JFQ09SRCB9LAorCXsgMHhhZjlhLCBLRVlfRjE3IH0sICAgICAvKiBwaWN0dXJlIGluIHBpY3R1cmUgKi8KKwl7IDB4NWZhNSwgS0VZX0tQUExVUyB9LCAgLyogem9vbSBpbiAqLworCXsgMHg2ZmE1LCBLRVlfS1BNSU5VUyB9LCAvKiB6b29tIG91dCAqLworCXsgMHg5ZmE1LCBLRVlfRjE4IH0sICAgICAvKiBjYXB0dXJlICovCisJeyAweGFmYTUsIEtFWV9GMTkgfSwgICAgIC8qIHdlYiAqLworCXsgMHg1ZmE2LCBLRVlfRU1BSUwgfSwKKwl7IDB4NmZhNiwgS0VZX1BIT05FIH0sCisJeyAweDlmYTYsIEtFWV9QQyB9LAogfTsKIAogc3RhdGljIGludCBkaWdpdHZfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQpAQCAtMjM4LDggKzIzOCw4IEBACiAJaWYgKGtleVsxXSAhPSAwKQogCXsKIAkJICBmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKLQkJCWlmIChkLT5wcm9wcy5yY19rZXlfbWFwW2ldLmN1c3RvbSA9PSBrZXlbMV0gJiYKLQkJCSAgICBkLT5wcm9wcy5yY19rZXlfbWFwW2ldLmRhdGEgPT0ga2V5WzJdKSB7CisJCQlpZiAocmM1X2N1c3RvbSgmZC0+cHJvcHMucmNfa2V5X21hcFtpXSkgPT0ga2V5WzFdICYmCisJCQkgICAgcmM1X2RhdGEoJmQtPnByb3BzLnJjX2tleV9tYXBbaV0pID09IGtleVsyXSkgewogCQkJCSpldmVudCA9IGQtPnByb3BzLnJjX2tleV9tYXBbaV0uZXZlbnQ7CiAJCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOwogCQkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYwppbmRleCA4MWE2Y2JmLi5hMWIxMmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0dDIwMHUuYwpAQCAtNTgsMjQgKzU4LDI0IEBACiAvKiByZW1vdGUgY29udHJvbCAqLwogLyoga2V5IGxpc3QgZm9yIHRoZSB0aW55IHJlbW90ZSBjb250cm9sIChZYWt1bW8sIGRvbid0IGtub3cgYWJvdXQgdGhlIG90aGVycykgKi8KIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgZHR0MjAwdV9yY19rZXlzW10gPSB7Ci0JeyAweDgwLCAweDAxLCBLRVlfTVVURSB9LAotCXsgMHg4MCwgMHgwMiwgS0VZX0NIQU5ORUxET1dOIH0sCi0JeyAweDgwLCAweDAzLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHg4MCwgMHgwNCwgS0VZXzEgfSwKLQl7IDB4ODAsIDB4MDUsIEtFWV8yIH0sCi0JeyAweDgwLCAweDA2LCBLRVlfMyB9LAotCXsgMHg4MCwgMHgwNywgS0VZXzQgfSwKLQl7IDB4ODAsIDB4MDgsIEtFWV81IH0sCi0JeyAweDgwLCAweDA5LCBLRVlfNiB9LAotCXsgMHg4MCwgMHgwYSwgS0VZXzcgfSwKLQl7IDB4ODAsIDB4MGMsIEtFWV9aT09NIH0sCi0JeyAweDgwLCAweDBkLCBLRVlfMCB9LAotCXsgMHg4MCwgMHgwZSwgS0VZX1NFTEVDVCB9LAotCXsgMHg4MCwgMHgxMiwgS0VZX1BPV0VSIH0sCi0JeyAweDgwLCAweDFhLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDgwLCAweDFiLCBLRVlfOCB9LAotCXsgMHg4MCwgMHgxZSwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDgwLCAweDFmLCBLRVlfOSB9LAorCXsgMHg4MDAxLCBLRVlfTVVURSB9LAorCXsgMHg4MDAyLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4ODAwMywgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4ODAwNCwgS0VZXzEgfSwKKwl7IDB4ODAwNSwgS0VZXzIgfSwKKwl7IDB4ODAwNiwgS0VZXzMgfSwKKwl7IDB4ODAwNywgS0VZXzQgfSwKKwl7IDB4ODAwOCwgS0VZXzUgfSwKKwl7IDB4ODAwOSwgS0VZXzYgfSwKKwl7IDB4ODAwYSwgS0VZXzcgfSwKKwl7IDB4ODAwYywgS0VZX1pPT00gfSwKKwl7IDB4ODAwZCwgS0VZXzAgfSwKKwl7IDB4ODAwZSwgS0VZX1NFTEVDVCB9LAorCXsgMHg4MDEyLCBLRVlfUE9XRVIgfSwKKwl7IDB4ODAxYSwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHg4MDFiLCBLRVlfOCB9LAorCXsgMHg4MDFlLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4ODAxZiwgS0VZXzkgfSwKIH07CiAKIHN0YXRpYyBpbnQgZHR0MjAwdV9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaTJjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaTJjLmMKaW5kZXggMzI2Zjc2MC4uY2VhZDA4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaTJjLmMKQEAgLTE5LDcgKzE5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3RybmNweShkLT5pMmNfYWRhcC5uYW1lLCBkLT5kZXNjLT5uYW1lLCBzaXplb2YoZC0+aTJjX2FkYXAubmFtZSkpOworCXN0cmxjcHkoZC0+aTJjX2FkYXAubmFtZSwgZC0+ZGVzYy0+bmFtZSwgc2l6ZW9mKGQtPmkyY19hZGFwLm5hbWUpKTsKIAlkLT5pMmNfYWRhcC5jbGFzcyA9IEkyQ19DTEFTU19UVl9ESUdJVEFMLAogCWQtPmkyY19hZGFwLmFsZ28gICAgICA9IGQtPnByb3BzLmkyY19hbGdvOwogCWQtPmkyY19hZGFwLmFsZ29fZGF0YSA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKaW5kZXggOTU5M2I3Mi4uMTg1YTUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaApAQCAtNTgsNiArNTgsNyBAQAogI2RlZmluZSBVU0JfVklEX0dJR0FCWVRFCQkJMHgxMDQ0CiAjZGVmaW5lIFVTQl9WSURfWVVBTgkJCQkweDExNjQKICNkZWZpbmUgVVNCX1ZJRF9YVEVOU0lPTlMJCQkweDFhZTcKKyNkZWZpbmUgVVNCX1ZJRF9IVU1BWF9DT0VYCQkJMHgxMGI5CiAKIC8qIFByb2R1Y3QgSURzICovCiAjZGVmaW5lIFVTQl9QSURfQURTVEVDSF9VU0IyX0NPTEQJCQkweGEzMzMKQEAgLTEwMyw2ICsxMDQsNyBAQAogI2RlZmluZSBVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCX1dBUk0JCQkweDBmYTEKICNkZWZpbmUgVVNCX1BJRF9JTlRFTF9DRTk1MDAJCQkJMHg5NTAwCiAjZGVmaW5lIFVTQl9QSURfS1dPUkxEXzM5OVUJCQkJMHhlMzk5CisjZGVmaW5lIFVTQl9QSURfS1dPUkxEXzM5OVVfMgkJCQkweGU0MDAKICNkZWZpbmUgVVNCX1BJRF9LV09STERfMzk1VQkJCQkweGUzOTYKICNkZWZpbmUgVVNCX1BJRF9LV09STERfMzk1VV8yCQkJCTB4ZTM5YgogI2RlZmluZSBVU0JfUElEX0tXT1JMRF8zOTVVXzMJCQkJMHhlMzk1CkBAIC0yNTIsNiArMjU0LDggQEAKICNkZWZpbmUgVVNCX1BJRF9ZVUFOX1NUSzc3MDBQSAkJCQkweDFmMDgKICNkZWZpbmUgVVNCX1BJRF9ZVUFOX1BEMzc4UwkJCQkweDJlZGMKICNkZWZpbmUgVVNCX1BJRF9ZVUFOX01DNzcwCQkJCTB4MDg3MQorI2RlZmluZSBVU0JfUElEX1lVQU5fU1RLNzcwMEQJCQkJMHgxZWZjCisjZGVmaW5lIFVTQl9QSURfWVVBTl9TVEs3NzAwRF8yCQkJCTB4MWU4YwogI2RlZmluZSBVU0JfUElEX0RXMjEwMgkJCQkJMHgyMTAyCiAjZGVmaW5lIFVTQl9QSURfWFRFTlNJT05TX1hEXzM4MAkJCTB4MDM4MQogI2RlZmluZSBVU0JfUElEX1RFTEVTVEFSX1NUQVJTVElDS18yCQkJMHg4MDAwCkBAIC0yNTksNSArMjYzLDcgQEAKICNkZWZpbmUgVVNCX1BJRF9TT05ZX1BMQVlUVgkJCQkweDAwMDMKICNkZWZpbmUgVVNCX1BJRF9FTEdBVE9fRVlFVFZfRFRUCQkJMHgwMDIxCiAjZGVmaW5lIFVTQl9QSURfRUxHQVRPX0VZRVRWX0RUVF9EbHgJCQkweDAwMjAKKyNkZWZpbmUgVVNCX1BJRF9EVkJfVF9VU0JfU1RJQ0tfSElHSF9TUEVFRF9DT0xECQkweDUwMDAKKyNkZWZpbmUgVVNCX1BJRF9EVkJfVF9VU0JfU1RJQ0tfSElHSF9TUEVFRF9XQVJNCQkweDUwMDEKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKaW5kZXggYzBjMmMyMi4uZWRkZTg3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYwpAQCAtOCw2ICs4LDcxIEBACiAjaW5jbHVkZSAiZHZiLXVzYi1jb21tb24uaCIKICNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KIAorc3RhdGljIGludCBkdmJfdXNiX2dldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LAorCQkJCSAgICBpbnQgc2NhbmNvZGUsIGludCAqa2V5Y29kZSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCisJc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOworCWludCBpOworCisJLyogU2VlIGlmIHdlIGNhbiBtYXRjaCB0aGUgcmF3IGtleSBjb2RlLiAqLworCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemU7IGkrKykKKwkJaWYgKGtleW1hcFtpXS5zY2FuID09IHNjYW5jb2RlKSB7CisJCQkqa2V5Y29kZSA9IGtleW1hcFtpXS5ldmVudDsKKwkJCXJldHVybiAwOworCQl9CisKKwkvKgorCSAqIElmIGlzIHRoZXJlIGV4dHJhIHNwYWNlLCByZXR1cm5zIEtFWV9SRVNFUlZFRCwKKwkgKiBvdGhlcndpc2UsIGlucHV0IGNvcmUgd29uJ3QgbGV0IGR2Yl91c2Jfc2V0a2V5Y29kZQorCSAqIHRvIHdvcmsKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspCisJCWlmIChrZXltYXBbaV0uZXZlbnQgPT0gS0VZX1JFU0VSVkVEIHx8CisJCSAgICBrZXltYXBbaV0uZXZlbnQgPT0gS0VZX1VOS05PV04pIHsKKwkJCSprZXljb2RlID0gS0VZX1JFU0VSVkVEOworCQkJcmV0dXJuIDA7CisJCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGR2Yl91c2Jfc2V0a2V5Y29kZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCisJCQkJICAgIGludCBzY2FuY29kZSwgaW50IGtleWNvZGUpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKworCXN0cnVjdCBkdmJfdXNiX3JjX2tleSAqa2V5bWFwID0gZC0+cHJvcHMucmNfa2V5X21hcDsKKwlpbnQgaTsKKworCS8qIFNlYXJjaCBpZiBpdCBpcyByZXBsYWNpbmcgYW4gZXhpc3Rpbmcga2V5Y29kZSAqLworCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemU7IGkrKykKKwkJaWYgKGtleW1hcFtpXS5zY2FuID09IHNjYW5jb2RlKSB7CisJCQlrZXltYXBbaV0uZXZlbnQgPSBrZXljb2RlOworCQkJcmV0dXJuIDA7CisJCX0KKworCS8qIFNlYXJjaCBpZiBpcyB0aGVyZSBhIGNsZWFuIGVudHJ5LiBJZiBzbywgdXNlIGl0ICovCisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKQorCQlpZiAoa2V5bWFwW2ldLmV2ZW50ID09IEtFWV9SRVNFUlZFRCB8fAorCQkgICAga2V5bWFwW2ldLmV2ZW50ID09IEtFWV9VTktOT1dOKSB7CisJCQlrZXltYXBbaV0uc2NhbiA9IHNjYW5jb2RlOworCQkJa2V5bWFwW2ldLmV2ZW50ID0ga2V5Y29kZTsKKwkJCXJldHVybiAwOworCQl9CisKKwkvKgorCSAqIEZJWE1FOiBDdXJyZW50bHksIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZgorCSAqIHNjYW5jb2RlIHRhYmxlLiBGb3IgaXQgdG8gaGFwcGVuLCBvbmUgcG9zc2liaWxpdHkKKwkgKiB3b3VsZCBiZSB0byBhbGxvY2F0ZSBhIHRhYmxlIHdpdGgga2V5X21hcF9zaXplICsgMSwKKwkgKiBjb3B5aW5nIGRhdGEsIGFwcGVuZGluZyB0aGUgbmV3IGtleSBvbiBpdCwgYW5kIGZyZWVpbmcKKwkgKiB0aGUgb2xkIG9uZSAtIG9yIG1heWJlIGp1c3QgYWxsb2NhdGluZyBzb21lIHNwYXJlIHNwYWNlCisJICovCisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwogLyogUmVtb3RlLWNvbnRyb2wgcG9sbCBmdW5jdGlvbiAtIGNhbGxlZCBldmVyeSBkaWItPnJjX3F1ZXJ5X2ludGVydmFsIG1zIHRvIHNlZQogICogd2hldGhlciB0aGUgcmVtb3RlIGNvbnRyb2wgaGFzIHJlY2VpdmVkIGFueXRoaW5nLgogICoKQEAgLTExMSw2ICsxNzYsOCBAQAogCWlucHV0X2Rldi0+cGh5cyA9IGQtPnJjX3BoeXM7CiAJdXNiX3RvX2lucHV0X2lkKGQtPnVkZXYsICZpbnB1dF9kZXYtPmlkKTsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmZC0+dWRldi0+ZGV2OworCWlucHV0X2Rldi0+Z2V0a2V5Y29kZSA9IGR2Yl91c2JfZ2V0a2V5Y29kZTsKKwlpbnB1dF9kZXYtPnNldGtleWNvZGUgPSBkdmJfdXNiX3NldGtleWNvZGU7CiAKIAkvKiBzZXQgdGhlIGJpdHMgZm9yIHRoZSBrZXlzICovCiAJZGViX3JjKCJrZXkgbWFwIHNpemU6ICVkXG4iLCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemUpOwpAQCAtMTI4LDYgKzE5NSw4IEBACiAJaW5wdXRfZGV2LT5yZXBbUkVQX1BFUklPRF0gPSBkLT5wcm9wcy5yY19pbnRlcnZhbDsKIAlpbnB1dF9kZXYtPnJlcFtSRVBfREVMQVldICA9IGQtPnByb3BzLnJjX2ludGVydmFsICsgMTUwOwogCisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBkKTsKKwogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOwogCWlmIChlcnIpIHsKIAkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKQEAgLTE3OCw4ICsyNDcsOCBAQAogCQkJfQogCQkJLyogU2VlIGlmIHdlIGNhbiBtYXRjaCB0aGUgcmF3IGtleSBjb2RlLiAqLwogCQkJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKQotCQkJCWlmIChrZXltYXBbaV0uY3VzdG9tID09IGtleWJ1ZlsxXSAmJgotCQkJCQlrZXltYXBbaV0uZGF0YSA9PSBrZXlidWZbM10pIHsKKwkJCQlpZiAocmM1X2N1c3RvbSgma2V5bWFwW2ldKSA9PSBrZXlidWZbMV0gJiYKKwkJCQkJcmM1X2RhdGEoJmtleW1hcFtpXSkgPT0ga2V5YnVmWzNdKSB7CiAJCQkJCSpldmVudCA9IGtleW1hcFtpXS5ldmVudDsKIAkJCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOwogCQkJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLmgKaW5kZXggZTQ0MWQyNy4uZmUyYjg3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLmgKQEAgLTgxLDEwICs4MSwyNSBAQAogICogQGV2ZW50OiB0aGUgaW5wdXQgZXZlbnQgYXNzaWduZWQgdG8ga2V5IGlkZW50aWZpZWQgYnkgY3VzdG9tIGFuZCBkYXRhCiAgKi8KIHN0cnVjdCBkdmJfdXNiX3JjX2tleSB7Ci0JdTggY3VzdG9tLGRhdGE7CisJdTE2IHNjYW47CiAJdTMyIGV2ZW50OwogfTsKIAorc3RhdGljIGlubGluZSB1OCByYzVfY3VzdG9tKHN0cnVjdCBkdmJfdXNiX3JjX2tleSAqa2V5KQoreworCXJldHVybiAoa2V5LT5zY2FuID4+IDgpICYgMHhmZjsKK30KKworc3RhdGljIGlubGluZSB1OCByYzVfZGF0YShzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleSkKK3sKKwlyZXR1cm4ga2V5LT5zY2FuICYgMHhmZjsKK30KKworc3RhdGljIGlubGluZSB1OCByYzVfc2NhbihzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleSkKK3sKKwlyZXR1cm4ga2V5LT5zY2FuICYgMHhmZmZmOworfQorCiBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2U7CiBzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyOwogc3RydWN0IHVzYl9kYXRhX3N0cmVhbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCmluZGV4IDc1ZGU0OWMuLjViYjk0NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIERWQiBVU0IgZnJhbWV3b3JrIGNvbXBsaWFudCBMaW51eCBkcml2ZXIgZm9yIHRoZQogKglEVkJXb3JsZCBEVkItUyAyMTAxLCAyMTAyLCBEVkItUzIgMjEwNCwgRFZCLUMgMzEwMSwKLSoJVGVWaWkgUzYwMCwgUzY1MCBDYXJkcworKglUZVZpaSBTNjAwLCBTNjMwLCBTNjUwIENhcmRzCiAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IElnb3IgTS4gTGlwbGlhbmluIChsaXBsaWFuaW5AbWUuYnkpCiAqCiAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSAiZWRzMTU0Ny5oIgogI2luY2x1ZGUgImN4MjQxMTYuaCIKICNpbmNsdWRlICJ0ZGExMDAyeC5oIgorI2luY2x1ZGUgIm10MzEyLmgiCisjaW5jbHVkZSAiemwxMDAzOS5oIgogCiAjaWZuZGVmIFVTQl9QSURfRFcyMTAyCiAjZGVmaW5lIFVTQl9QSURfRFcyMTAyIDB4MjEwMgpAQCAtMzksNiArNDEsMTAgQEAKICNkZWZpbmUgVVNCX1BJRF9URVZJSV9TNjUwIDB4ZDY1MAogI2VuZGlmCiAKKyNpZm5kZWYgVVNCX1BJRF9URVZJSV9TNjMwCisjZGVmaW5lIFVTQl9QSURfVEVWSUlfUzYzMCAweGQ2MzAKKyNlbmRpZgorCiAjZGVmaW5lIERXMjEwWF9SRUFEX01TRyAwCiAjZGVmaW5lIERXMjEwWF9XUklURV9NU0cgMQogCkBAIC00MzYsNiArNDQyLDY5IEBACiAJcmV0dXJuIG51bTsKIH0KIAorc3RhdGljIGludCBzNjMwX2kyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLAorCQkJCQkJCQlpbnQgbnVtKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWQpCisJCXJldHVybiAtRU5PREVWOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXN3aXRjaCAobnVtKSB7CisJY2FzZSAyOiB7IC8qIHJlYWQgKi8KKwkJdTggaWJ1Zlttc2dbMV0ubGVuXSwgb2J1ZlszXTsKKwkJb2J1ZlswXSA9IG1zZ1sxXS5sZW47CisJCW9idWZbMV0gPSAobXNnWzBdLmFkZHIgPDwgMSk7CisJCW9idWZbMl0gPSBtc2dbMF0uYnVmWzBdOworCisJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweDkwLCAwLCAwLAorCQkJCQlvYnVmLCAzLCBEVzIxMFhfV1JJVEVfTVNHKTsKKwkJbXNsZWVwKDUpOworCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHg5MSwgMCwgMCwKKwkJCQkJaWJ1ZiwgbXNnWzFdLmxlbiwgRFcyMTBYX1JFQURfTVNHKTsKKwkJbWVtY3B5KG1zZ1sxXS5idWYsIGlidWYsIG1zZ1sxXS5sZW4pOworCQlicmVhazsKKwl9CisJY2FzZSAxOgorCQlzd2l0Y2ggKG1zZ1swXS5hZGRyKSB7CisJCWNhc2UgMHg2MDoKKwkJY2FzZSAweDBlOiB7CisJCQkvKiB3cml0ZSB0byB6bDEwMzEzLCB6bDEwMDM5IHJlZ2lzdGVyLCAqLworCQkJdTggb2J1Zlttc2dbMF0ubGVuICsgMl07CisJCQlvYnVmWzBdID0gbXNnWzBdLmxlbiArIDE7CisJCQlvYnVmWzFdID0gKG1zZ1swXS5hZGRyIDw8IDEpOworCQkJbWVtY3B5KG9idWYgKyAyLCBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuKTsKKwkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweDgwLCAwLCAwLAorCQkJCQlvYnVmLCBtc2dbMF0ubGVuICsgMiwgRFcyMTBYX1dSSVRFX01TRyk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIChEVzIxMDJfUkNfUVVFUlkpOiB7CisJCQl1OCBpYnVmWzRdOworCQkJcmV0ICA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGI4LCAwLCAwLAorCQkJCQlpYnVmLCA0LCBEVzIxMFhfUkVBRF9NU0cpOworCQkJbXNnWzBdLmJ1ZlswXSA9IGlidWZbM107CisJCQlicmVhazsKKwkJfQorCQljYXNlIChEVzIxMDJfVk9MVEFHRV9DVFJMKTogeworCQkJdTggb2J1ZlsyXTsKKwkJCW9idWZbMF0gPSAweDAzOworCQkJb2J1ZlsxXSA9IG1zZ1swXS5idWZbMF07CisJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHg4YSwgMCwgMCwKKwkJCQkJb2J1ZiwgMiwgRFcyMTBYX1dSSVRFX01TRyk7CisJCQlicmVhazsKKwkJfQorCQl9CisKKwkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCXJldHVybiBudW07Cit9CisKIHN0YXRpYyB1MzIgZHcyMTB4X2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlyZXR1cm4gSTJDX0ZVTkNfSTJDOwpAQCAtNDY2LDYgKzUzNSwxMSBAQAogCS5mdW5jdGlvbmFsaXR5ID0gZHcyMTB4X2kyY19mdW5jLAogfTsKIAorc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHM2MzBfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyID0gczYzMF9pMmNfdHJhbnNmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBkdzIxMHhfaTJjX2Z1bmMsCit9OworCiBzdGF0aWMgaW50IGR3MjEweF9yZWFkX21hY19hZGRyZXNzKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggbWFjWzZdKQogewogCWludCBpOwpAQCAtNDkwLDYgKzU2NCwzNyBAQAogCXJldHVybiAwOwogfTsKIAorc3RhdGljIGludCBzNjMwX3JlYWRfbWFjX2FkZHJlc3Moc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCBtYWNbNl0pCit7CisJaW50IGksIHJldDsKKwl1OCBidWZbM10sIGVlcHJvbVsyNTZdLCBlZXByb21saW5lWzE2XTsKKworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlidWZbMF0gPSAxOworCQlidWZbMV0gPSAweGEwOworCQlidWZbMl0gPSBpOworCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHg5MCwgMCwgMCwKKwkJCQkJYnVmLCAzLCBEVzIxMFhfV1JJVEVfTVNHKTsKKwkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4OTEsIDAsIDAsCisJCQkJCWJ1ZiwgMSwgRFcyMTBYX1JFQURfTVNHKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWVycigicmVhZCBlZXByb20gZmFpbGVkLiIpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgeworCQkJZWVwcm9tbGluZVtpICUgMTZdID0gYnVmWzBdOworCQkJZWVwcm9tW2ldID0gYnVmWzBdOworCQl9CisKKwkJaWYgKChpICUgMTYpID09IDE1KSB7CisJCQlkZWJfeGZlcigiJTAyeDogIiwgaSAtIDE1KTsKKwkJCWRlYnVnX2R1bXAoZWVwcm9tbGluZSwgMTYsIGRlYl94ZmVyKTsKKwkJfQorCX0KKworCW1lbWNweShtYWMsIGVlcHJvbSArIDE2LCA2KTsKKwlyZXR1cm4gMDsKK307CisKIHN0YXRpYyBpbnQgZHcyMTB4X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7CiAJc3RhdGljIHU4IGNvbW1hbmRfMTN2WzFdID0gezB4MDB9OwpAQCAtNTM1LDYgKzY0MCwxMCBAQAogCS5pbnZlcnQgPSAxLAogfTsKIAorc3RhdGljIHN0cnVjdCBtdDMxMl9jb25maWcgemwzMTNfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwZSwKK307CisKIHN0YXRpYyBpbnQgZHcyMTA0X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICpkKQogewogCWlmICgoZC0+ZmUgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLCAmZHcyMTA0X2NvbmZpZywKQEAgLTU5Niw2ICs3MDUsMTggQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAorc3RhdGljIGludCBzNjMwX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICpkKQoreworCWQtPmZlID0gZHZiX2F0dGFjaChtdDMxMl9hdHRhY2gsICZ6bDMxM19jb25maWcsCisJCQkJJmQtPmRldi0+aTJjX2FkYXApOworCWlmIChkLT5mZSAhPSBOVUxMKSB7CisJCWQtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkdzIxMHhfc2V0X3ZvbHRhZ2U7CisJCWluZm8oIkF0dGFjaGVkIHpsMTAzMTMhXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlPOworfQorCiBzdGF0aWMgaW50IGR3MjEwMl90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKIAlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBhZGFwLT5mZSwgMHg2MCwKQEAgLTYxOSwxMjMgKzc0MCwxMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzNjMwX3psMTAwMzlfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJZHZiX2F0dGFjaCh6bDEwMDM5X2F0dGFjaCwgYWRhcC0+ZmUsIDB4NjAsCisJCSZhZGFwLT5kZXYtPmkyY19hZGFwKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGR3MjEweF9yY19rZXlzW10gPSB7Ci0JeyAweGY4LAkweDBhLCBLRVlfUSB9LAkJLypwb3dlciovCi0JeyAweGY4LAkweDBjLCBLRVlfTSB9LAkJLyptdXRlKi8KLQl7IDB4ZjgsCTB4MTEsIEtFWV8xIH0sCi0JeyAweGY4LAkweDEyLCBLRVlfMiB9LAotCXsgMHhmOCwJMHgxMywgS0VZXzMgfSwKLQl7IDB4ZjgsCTB4MTQsIEtFWV80IH0sCi0JeyAweGY4LAkweDE1LCBLRVlfNSB9LAotCXsgMHhmOCwJMHgxNiwgS0VZXzYgfSwKLQl7IDB4ZjgsCTB4MTcsIEtFWV83IH0sCi0JeyAweGY4LAkweDE4LCBLRVlfOCB9LAotCXsgMHhmOCwJMHgxOSwgS0VZXzkgfSwKLQl7IDB4ZjgsIDB4MTAsIEtFWV8wIH0sCi0JeyAweGY4LCAweDFjLCBLRVlfUEFHRVVQIH0sCS8qY2grKi8KLQl7IDB4ZjgsIDB4MGYsIEtFWV9QQUdFRE9XTiB9LAkvKmNoLSovCi0JeyAweGY4LCAweDFhLCBLRVlfTyB9LAkJLyp2b2wrKi8KLQl7IDB4ZjgsIDB4MGUsIEtFWV9aIH0sCQkvKnZvbC0qLwotCXsgMHhmOCwgMHgwNCwgS0VZX1IgfSwJCS8qcmVjKi8KLQl7IDB4ZjgsIDB4MDksIEtFWV9EIH0sCQkvKmZhdiovCi0JeyAweGY4LCAweDA4LCBLRVlfQkFDS1NQQUNFIH0sCS8qcmV3aW5kKi8KLQl7IDB4ZjgsIDB4MDcsIEtFWV9BIH0sCQkvKmZhc3QqLwotCXsgMHhmOCwgMHgwYiwgS0VZX1AgfSwJCS8qcGF1c2UqLwotCXsgMHhmOCwgMHgwMiwgS0VZX0VTQyB9LAkvKmNhbmNlbCovCi0JeyAweGY4LCAweDAzLCBLRVlfRyB9LAkJLyp0YWIqLwotCXsgMHhmOCwgMHgwMCwgS0VZX1VQIH0sCQkvKnVwKi8KLQl7IDB4ZjgsIDB4MWYsIEtFWV9FTlRFUiB9LAkvKm9rKi8KLQl7IDB4ZjgsIDB4MDEsIEtFWV9ET1dOIH0sCS8qZG93biovCi0JeyAweGY4LCAweDA1LCBLRVlfQyB9LAkJLypjYXAqLwotCXsgMHhmOCwgMHgwNiwgS0VZX1MgfSwJCS8qc3RvcCovCi0JeyAweGY4LCAweDQwLCBLRVlfRiB9LAkJLypmdWxsKi8KLQl7IDB4ZjgsIDB4MWUsIEtFWV9XIH0sCQkvKnR2bW9kZSovCi0JeyAweGY4LCAweDFiLCBLRVlfQiB9LAkJLypyZWNhbGwqLworCXsgMHhmODBhLCBLRVlfUSB9LAkJLypwb3dlciovCisJeyAweGY4MGMsIEtFWV9NIH0sCQkvKm11dGUqLworCXsgMHhmODExLCBLRVlfMSB9LAorCXsgMHhmODEyLCBLRVlfMiB9LAorCXsgMHhmODEzLCBLRVlfMyB9LAorCXsgMHhmODE0LCBLRVlfNCB9LAorCXsgMHhmODE1LCBLRVlfNSB9LAorCXsgMHhmODE2LCBLRVlfNiB9LAorCXsgMHhmODE3LCBLRVlfNyB9LAorCXsgMHhmODE4LCBLRVlfOCB9LAorCXsgMHhmODE5LCBLRVlfOSB9LAorCXsgMHhmODEwLCBLRVlfMCB9LAorCXsgMHhmODFjLCBLRVlfUEFHRVVQIH0sCS8qY2grKi8KKwl7IDB4ZjgwZiwgS0VZX1BBR0VET1dOIH0sCS8qY2gtKi8KKwl7IDB4ZjgxYSwgS0VZX08gfSwJCS8qdm9sKyovCisJeyAweGY4MGUsIEtFWV9aIH0sCQkvKnZvbC0qLworCXsgMHhmODA0LCBLRVlfUiB9LAkJLypyZWMqLworCXsgMHhmODA5LCBLRVlfRCB9LAkJLypmYXYqLworCXsgMHhmODA4LCBLRVlfQkFDS1NQQUNFIH0sCS8qcmV3aW5kKi8KKwl7IDB4ZjgwNywgS0VZX0EgfSwJCS8qZmFzdCovCisJeyAweGY4MGIsIEtFWV9QIH0sCQkvKnBhdXNlKi8KKwl7IDB4ZjgwMiwgS0VZX0VTQyB9LAkvKmNhbmNlbCovCisJeyAweGY4MDMsIEtFWV9HIH0sCQkvKnRhYiovCisJeyAweGY4MDAsIEtFWV9VUCB9LAkJLyp1cCovCisJeyAweGY4MWYsIEtFWV9FTlRFUiB9LAkvKm9rKi8KKwl7IDB4ZjgwMSwgS0VZX0RPV04gfSwJLypkb3duKi8KKwl7IDB4ZjgwNSwgS0VZX0MgfSwJCS8qY2FwKi8KKwl7IDB4ZjgwNiwgS0VZX1MgfSwJCS8qc3RvcCovCisJeyAweGY4NDAsIEtFWV9GIH0sCQkvKmZ1bGwqLworCXsgMHhmODFlLCBLRVlfVyB9LAkJLyp0dm1vZGUqLworCXsgMHhmODFiLCBLRVlfQiB9LAkJLypyZWNhbGwqLwogfTsKIAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSB0ZXZpaV9yY19rZXlzW10gPSB7Ci0JeyAweGY4LCAweDBhLCBLRVlfUE9XRVIgfSwKLQl7IDB4ZjgsIDB4MGMsIEtFWV9NVVRFIH0sCi0JeyAweGY4LCAweDExLCBLRVlfMSB9LAotCXsgMHhmOCwgMHgxMiwgS0VZXzIgfSwKLQl7IDB4ZjgsIDB4MTMsIEtFWV8zIH0sCi0JeyAweGY4LCAweDE0LCBLRVlfNCB9LAotCXsgMHhmOCwgMHgxNSwgS0VZXzUgfSwKLQl7IDB4ZjgsIDB4MTYsIEtFWV82IH0sCi0JeyAweGY4LCAweDE3LCBLRVlfNyB9LAotCXsgMHhmOCwgMHgxOCwgS0VZXzggfSwKLQl7IDB4ZjgsIDB4MTksIEtFWV85IH0sCi0JeyAweGY4LCAweDEwLCBLRVlfMCB9LAotCXsgMHhmOCwgMHgxYywgS0VZX01FTlUgfSwKLQl7IDB4ZjgsIDB4MGYsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweGY4LCAweDFhLCBLRVlfTEFTVCB9LAotCXsgMHhmOCwgMHgwZSwgS0VZX09QRU4gfSwKLQl7IDB4ZjgsIDB4MDQsIEtFWV9SRUNPUkQgfSwKLQl7IDB4ZjgsIDB4MDksIEtFWV9WT0xVTUVVUCB9LAotCXsgMHhmOCwgMHgwOCwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHhmOCwgMHgwNywgS0VZX1BWUiB9LAotCXsgMHhmOCwgMHgwYiwgS0VZX1RJTUUgfSwKLQl7IDB4ZjgsIDB4MDIsIEtFWV9SSUdIVCB9LAotCXsgMHhmOCwgMHgwMywgS0VZX0xFRlQgfSwKLQl7IDB4ZjgsIDB4MDAsIEtFWV9VUCB9LAotCXsgMHhmOCwgMHgxZiwgS0VZX09LIH0sCi0JeyAweGY4LCAweDAxLCBLRVlfRE9XTiB9LAotCXsgMHhmOCwgMHgwNSwgS0VZX1RVTkVSIH0sCi0JeyAweGY4LCAweDA2LCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4ZjgsIDB4NDAsIEtFWV9QTEFZUEFVU0UgfSwKLQl7IDB4ZjgsIDB4MWUsIEtFWV9SRVdJTkQgfSwKLQl7IDB4ZjgsIDB4MWIsIEtFWV9GQVZPUklURVMgfSwKLQl7IDB4ZjgsIDB4MWQsIEtFWV9CQUNLIH0sCi0JeyAweGY4LCAweDRkLCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4ZjgsIDB4NDQsIEtFWV9FUEcgfSwKLQl7IDB4ZjgsIDB4NGMsIEtFWV9JTkZPIH0sCi0JeyAweGY4LCAweDQxLCBLRVlfQUIgfSwKLQl7IDB4ZjgsIDB4NDMsIEtFWV9BVURJTyB9LAotCXsgMHhmOCwgMHg0NSwgS0VZX1NVQlRJVExFIH0sCi0JeyAweGY4LCAweDRhLCBLRVlfTElTVCB9LAotCXsgMHhmOCwgMHg0NiwgS0VZX0YxIH0sCi0JeyAweGY4LCAweDQ3LCBLRVlfRjIgfSwKLQl7IDB4ZjgsIDB4NWUsIEtFWV9GMyB9LAotCXsgMHhmOCwgMHg1YywgS0VZX0Y0IH0sCi0JeyAweGY4LCAweDUyLCBLRVlfRjUgfSwKLQl7IDB4ZjgsIDB4NWEsIEtFWV9GNiB9LAotCXsgMHhmOCwgMHg1NiwgS0VZX01PREUgfSwKLQl7IDB4ZjgsIDB4NTgsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwKKwl7IDB4ZjgwYSwgS0VZX1BPV0VSIH0sCisJeyAweGY4MGMsIEtFWV9NVVRFIH0sCisJeyAweGY4MTEsIEtFWV8xIH0sCisJeyAweGY4MTIsIEtFWV8yIH0sCisJeyAweGY4MTMsIEtFWV8zIH0sCisJeyAweGY4MTQsIEtFWV80IH0sCisJeyAweGY4MTUsIEtFWV81IH0sCisJeyAweGY4MTYsIEtFWV82IH0sCisJeyAweGY4MTcsIEtFWV83IH0sCisJeyAweGY4MTgsIEtFWV84IH0sCisJeyAweGY4MTksIEtFWV85IH0sCisJeyAweGY4MTAsIEtFWV8wIH0sCisJeyAweGY4MWMsIEtFWV9NRU5VIH0sCisJeyAweGY4MGYsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweGY4MWEsIEtFWV9MQVNUIH0sCisJeyAweGY4MGUsIEtFWV9PUEVOIH0sCisJeyAweGY4MDQsIEtFWV9SRUNPUkQgfSwKKwl7IDB4ZjgwOSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweGY4MDgsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4ZjgwNywgS0VZX1BWUiB9LAorCXsgMHhmODBiLCBLRVlfVElNRSB9LAorCXsgMHhmODAyLCBLRVlfUklHSFQgfSwKKwl7IDB4ZjgwMywgS0VZX0xFRlQgfSwKKwl7IDB4ZjgwMCwgS0VZX1VQIH0sCisJeyAweGY4MWYsIEtFWV9PSyB9LAorCXsgMHhmODAxLCBLRVlfRE9XTiB9LAorCXsgMHhmODA1LCBLRVlfVFVORVIgfSwKKwl7IDB4ZjgwNiwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweGY4NDAsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4ZjgxZSwgS0VZX1JFV0lORCB9LAorCXsgMHhmODFiLCBLRVlfRkFWT1JJVEVTIH0sCisJeyAweGY4MWQsIEtFWV9CQUNLIH0sCisJeyAweGY4NGQsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHhmODQ0LCBLRVlfRVBHIH0sCisJeyAweGY4NGMsIEtFWV9JTkZPIH0sCisJeyAweGY4NDEsIEtFWV9BQiB9LAorCXsgMHhmODQzLCBLRVlfQVVESU8gfSwKKwl7IDB4Zjg0NSwgS0VZX1NVQlRJVExFIH0sCisJeyAweGY4NGEsIEtFWV9MSVNUIH0sCisJeyAweGY4NDYsIEtFWV9GMSB9LAorCXsgMHhmODQ3LCBLRVlfRjIgfSwKKwl7IDB4Zjg1ZSwgS0VZX0YzIH0sCisJeyAweGY4NWMsIEtFWV9GNCB9LAorCXsgMHhmODUyLCBLRVlfRjUgfSwKKwl7IDB4Zjg1YSwgS0VZX0Y2IH0sCisJeyAweGY4NTYsIEtFWV9NT0RFIH0sCisJeyAweGY4NTgsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgdGJzX3JjX2tleXNbXSA9IHsKLQl7IDB4ZjgsCTB4ODQsIEtFWV9QT1dFUiB9LAotCXsgMHhmOCwJMHg5NCwgS0VZX01VVEUgfSwKLQl7IDB4ZjgsCTB4ODcsIEtFWV8xIH0sCi0JeyAweGY4LAkweDg2LCBLRVlfMiB9LAotCXsgMHhmOCwJMHg4NSwgS0VZXzMgfSwKLQl7IDB4ZjgsCTB4OGIsIEtFWV80IH0sCi0JeyAweGY4LAkweDhhLCBLRVlfNSB9LAotCXsgMHhmOCwJMHg4OSwgS0VZXzYgfSwKLQl7IDB4ZjgsCTB4OGYsIEtFWV83IH0sCi0JeyAweGY4LAkweDhlLCBLRVlfOCB9LAotCXsgMHhmOCwJMHg4ZCwgS0VZXzkgfSwKLQl7IDB4ZjgsIDB4OTIsIEtFWV8wIH0sCi0JeyAweGY4LCAweDk2LCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweGY4LCAweDkxLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4ZjgsIDB4OTMsIEtFWV9WT0xVTUVVUCB9LAotCXsgMHhmOCwgMHg4YywgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4ZjgsIDB4ODMsIEtFWV9SRUNPUkQgfSwKLQl7IDB4ZjgsIDB4OTgsIEtFWV9QQVVTRSAgfSwKLQl7IDB4ZjgsIDB4OTksIEtFWV9PSyB9LAotCXsgMHhmOCwgMHg5YSwgS0VZX1NIVUZGTEUgfSwKLQl7IDB4ZjgsIDB4ODEsIEtFWV9VUCB9LAotCXsgMHhmOCwgMHg5MCwgS0VZX0xFRlQgfSwKLQl7IDB4ZjgsIDB4ODIsIEtFWV9SSUdIVCB9LAotCXsgMHhmOCwgMHg4OCwgS0VZX0RPV04gfSwKLQl7IDB4ZjgsIDB4OTUsIEtFWV9GQVZPUklURVMgfSwKLQl7IDB4ZjgsIDB4OTcsIEtFWV9TVUJUSVRMRSB9LAotCXsgMHhmOCwgMHg5ZCwgS0VZX1pPT00gfSwKLQl7IDB4ZjgsIDB4OWYsIEtFWV9FWElUIH0sCi0JeyAweGY4LCAweDllLCBLRVlfTUVOVSB9LAotCXsgMHhmOCwgMHg5YywgS0VZX0VQRyB9LAotCXsgMHhmOCwgMHg4MCwgS0VZX1BSRVZJT1VTIH0sCi0JeyAweGY4LCAweDliLCBLRVlfTU9ERSB9CisJeyAweGY4ODQsIEtFWV9QT1dFUiB9LAorCXsgMHhmODk0LCBLRVlfTVVURSB9LAorCXsgMHhmODg3LCBLRVlfMSB9LAorCXsgMHhmODg2LCBLRVlfMiB9LAorCXsgMHhmODg1LCBLRVlfMyB9LAorCXsgMHhmODhiLCBLRVlfNCB9LAorCXsgMHhmODhhLCBLRVlfNSB9LAorCXsgMHhmODg5LCBLRVlfNiB9LAorCXsgMHhmODhmLCBLRVlfNyB9LAorCXsgMHhmODhlLCBLRVlfOCB9LAorCXsgMHhmODhkLCBLRVlfOSB9LAorCXsgMHhmODkyLCBLRVlfMCB9LAorCXsgMHhmODk2LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweGY4OTEsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHhmODkzLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4Zjg4YywgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4Zjg4MywgS0VZX1JFQ09SRCB9LAorCXsgMHhmODk4LCBLRVlfUEFVU0UgIH0sCisJeyAweGY4OTksIEtFWV9PSyB9LAorCXsgMHhmODlhLCBLRVlfU0hVRkZMRSB9LAorCXsgMHhmODgxLCBLRVlfVVAgfSwKKwl7IDB4Zjg5MCwgS0VZX0xFRlQgfSwKKwl7IDB4Zjg4MiwgS0VZX1JJR0hUIH0sCisJeyAweGY4ODgsIEtFWV9ET1dOIH0sCisJeyAweGY4OTUsIEtFWV9GQVZPUklURVMgfSwKKwl7IDB4Zjg5NywgS0VZX1NVQlRJVExFIH0sCisJeyAweGY4OWQsIEtFWV9aT09NIH0sCisJeyAweGY4OWYsIEtFWV9FWElUIH0sCisJeyAweGY4OWUsIEtFWV9NRU5VIH0sCisJeyAweGY4OWMsIEtFWV9FUEcgfSwKKwl7IDB4Zjg4MCwgS0VZX1BSRVZJT1VTIH0sCisJeyAweGY4OWIsIEtFWV9NT0RFIH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXlzX3RhYmxlIGtleXNfdGFibGVzW10gPSB7CkBAIC03NjMsOSArODkyLDkgQEAKIAl9CiAKIAkqc3RhdGUgPSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ7Ci0JaWYgKGR3MjEwMl9pMmNfdHJhbnNmZXIoJmQtPmkyY19hZGFwLCAmbXNnLCAxKSA9PSAxKSB7CisJaWYgKGQtPnByb3BzLmkyY19hbGdvLT5tYXN0ZXJfeGZlcigmZC0+aTJjX2FkYXAsICZtc2csIDEpID09IDEpIHsKIAkJZm9yIChpID0gMDsgaSA8IGtleW1hcF9zaXplIDsgaSsrKSB7Ci0JCQlpZiAoa2V5bWFwW2ldLmRhdGEgPT0gbXNnLmJ1ZlswXSkgeworCQkJaWYgKHJjNV9kYXRhKCZrZXltYXBbaV0pID09IG1zZy5idWZbMF0pIHsKIAkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CiAJCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OwogCQkJCWJyZWFrOwpAQCAtNzkyLDYgKzkyMSw3IEBACiAJe1VTQl9ERVZJQ0UoMHg5MDIyLCBVU0JfUElEX1RFVklJX1M2NTApfSwKIAl7VVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLCBVU0JfUElEX0NJTkVSR1lfUyl9LAogCXtVU0JfREVWSUNFKFVTQl9WSURfQ1lQUkVTUywgVVNCX1BJRF9EVzMxMDEpfSwKKwl7VVNCX0RFVklDRSgweDkwMjIsIFVTQl9QSURfVEVWSUlfUzYzMCl9LAogCXsgfQogfTsKIApAQCAtODA2LDYgKzkzNiw3IEBACiAJdTggcmVzZXQxNltdID0gezAsIDAsIDAsIDAsIDAsIDAsIDB9OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJY29uc3QgY2hhciAqZmlsZW5hbWUgPSAiZHZiLXVzYi1kdzIxMDEuZnciOworCiAJc3dpdGNoIChkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSB7CiAJY2FzZSAweDIxMDE6CiAJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaWxlbmFtZSwgJmRldi0+ZGV2KTsKQEAgLTEwNTMsNiArMTE4NCw0OCBAQAogCX0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBzNjMwX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKKwkuZmlybXdhcmUgPSAiZHZiLXVzYi1zNjMwLmZ3IiwKKwkubm9fcmVjb25uZWN0ID0gMSwKKworCS5pMmNfYWxnbyA9ICZzNjMwX2kyY19hbGdvLAorCS5yY19rZXlfbWFwID0gdGV2aWlfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRSh0ZXZpaV9yY19rZXlzKSwKKwkucmNfaW50ZXJ2YWwgPSAxNTAsCisJLnJjX3F1ZXJ5ID0gZHcyMTAyX3JjX3F1ZXJ5LAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHg4MSwKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuZG93bmxvYWRfZmlybXdhcmUgPSBkdzIxMDJfbG9hZF9maXJtd2FyZSwKKwkucmVhZF9tYWNfYWRkcmVzcyA9IHM2MzBfcmVhZF9tYWNfYWRkcmVzcywKKwkuYWRhcHRlciA9IHsKKwkJeworCQkJLmZyb250ZW5kX2F0dGFjaCA9IHM2MzBfZnJvbnRlbmRfYXR0YWNoLAorCQkJLnN0cmVhbWluZ19jdHJsID0gTlVMTCwKKwkJCS50dW5lcl9hdHRhY2ggPSBzNjMwX3psMTAwMzlfdHVuZXJfYXR0YWNoLAorCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkJCS5jb3VudCA9IDgsCisJCQkJLmVuZHBvaW50ID0gMHg4MiwKKwkJCQkudSA9IHsKKwkJCQkJLmJ1bGsgPSB7CisJCQkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCisJCQkJCX0KKwkJCQl9CisJCQl9LAorCQl9CisJfSwKKwkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJLmRldmljZXMgPSB7CisJCXsiVGVWaWkgUzYzMCBVU0IiLAorCQkJeyZkdzIxMDJfdGFibGVbNl0sIE5VTEx9LAorCQkJe05VTEx9LAorCQl9LAorCX0KK307CisKIHN0YXRpYyBpbnQgZHcyMTAyX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CkBAIC0xMDYxLDYgKzEyMzQsOCBAQAogCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmR3MjEwNF9wcm9wZXJ0aWVzLAogCQkJVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpIHx8CiAJICAgIDAgPT0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmZHczMTAxX3Byb3BlcnRpZXMsCisJCQlUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikgfHwKKwkgICAgMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZzNjMwX3Byb3BlcnRpZXMsCiAJCQlUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikpIHsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTA5NCw2ICsxMjY5LDYgQEAKIE1PRFVMRV9BVVRIT1IoIklnb3IgTS4gTGlwbGlhbmluIChjKSBsaXBsaWFuaW5AbWUuYnkiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBEVkJXb3JsZCBEVkItUyAyMTAxLCAyMTAyLCBEVkItUzIgMjEwNCwiCiAJCQkJIiBEVkItQyAzMTAxIFVTQjIuMCwiCi0JCQkJIiBUZVZpaSBTNjAwLCBTNjUwIFVTQjIuMCBkZXZpY2VzIik7CisJCQkJIiBUZVZpaSBTNjAwLCBTNjMwLCBTNjUwIFVTQjIuMCBkZXZpY2VzIik7CiBNT0RVTEVfVkVSU0lPTigiMC4xIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMKaW5kZXggNTQ2MjZhMC4uYWVjN2ExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJCWdvdG8gdW5sb2NrOwogCiAJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKQotCQlpZiAoZC0+cHJvcHMucmNfa2V5X21hcFtpXS5kYXRhID09IHJjX3N0YXRlWzFdKSB7CisJCWlmIChyYzVfZGF0YSgmZC0+cHJvcHMucmNfa2V5X21hcFtpXSkgPT0gcmNfc3RhdGVbMV0pIHsKIAkJCSpldmVudCA9IGQtPnByb3BzLnJjX2tleV9tYXBbaV0uZXZlbnQ7CiAKIAkJCXN3aXRjaChyY19zdGF0ZVswXSkgewpAQCAtNTYyLDQyICs1NjIsNDIgQEAKIAogLyogaXIga2V5bWFwcyAqLwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBtZWdhc2t5X3JjX2tleXMgW10gPSB7Ci0JeyAweDAsIDB4MTIsIEtFWV9QT1dFUiB9LAotCXsgMHgwLCAweDFlLCBLRVlfQ1lDTEVXSU5ET1dTIH0sIC8qIG1pbi9tYXggKi8KLQl7IDB4MCwgMHgwMiwgS0VZX0NIQU5ORUxVUCB9LAotCXsgMHgwLCAweDA1LCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MCwgMHgwMywgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDAsIDB4MDYsIEtFWV9WT0xVTUVET1dOIH0sCi0JeyAweDAsIDB4MDQsIEtFWV9NVVRFIH0sCi0JeyAweDAsIDB4MDcsIEtFWV9PSyB9LCAvKiBUUyAqLwotCXsgMHgwLCAweDA4LCBLRVlfU1RPUCB9LAotCXsgMHgwLCAweDA5LCBLRVlfTUVOVSB9LCAvKiBzd2FwICovCi0JeyAweDAsIDB4MGEsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MCwgMHgxYiwgS0VZX1BBVVNFIH0sCi0JeyAweDAsIDB4MWYsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHgwLCAweDBjLCBLRVlfUkVDT1JEIH0sCi0JeyAweDAsIDB4MGQsIEtFWV9DQU1FUkEgfSwgLyogc2NyZWVuc2hvdCAqLwotCXsgMHgwLCAweDBlLCBLRVlfQ09GRkVFIH0sIC8qICJNVFMiICovCisJeyAweDAwMTIsIEtFWV9QT1dFUiB9LAorCXsgMHgwMDFlLCBLRVlfQ1lDTEVXSU5ET1dTIH0sIC8qIG1pbi9tYXggKi8KKwl7IDB4MDAwMiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwMDA1LCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDAwMywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDAwMDYsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAwMDQsIEtFWV9NVVRFIH0sCisJeyAweDAwMDcsIEtFWV9PSyB9LCAvKiBUUyAqLworCXsgMHgwMDA4LCBLRVlfU1RPUCB9LAorCXsgMHgwMDA5LCBLRVlfTUVOVSB9LCAvKiBzd2FwICovCisJeyAweDAwMGEsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MDAxYiwgS0VZX1BBVVNFIH0sCisJeyAweDAwMWYsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgwMDBjLCBLRVlfUkVDT1JEIH0sCisJeyAweDAwMGQsIEtFWV9DQU1FUkEgfSwgLyogc2NyZWVuc2hvdCAqLworCXsgMHgwMDBlLCBLRVlfQ09GRkVFIH0sIC8qICJNVFMiICovCiB9OwogCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IHR2d2Fsa2VydHdpbl9yY19rZXlzIFtdID0gewotCXsgMHgwLCAweDAxLCBLRVlfWk9PTSB9LCAvKiBGdWxsIFNjcmVlbiAqLwotCXsgMHgwLCAweDAyLCBLRVlfQ0FNRVJBIH0sIC8qIHNuYXBzaG90ICovCi0JeyAweDAsIDB4MDMsIEtFWV9NVVRFIH0sCi0JeyAweDAsIDB4MDQsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MCwgMHgwNSwgS0VZX1BMQVlQQVVTRSB9LCAvKiBQbGF5L1BhdXNlICovCi0JeyAweDAsIDB4MDYsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHgwLCAweDA3LCBLRVlfUkVDT1JEIH0sCi0JeyAweDAsIDB4MDgsIEtFWV9TVE9QIH0sCi0JeyAweDAsIDB4MDksIEtFWV9USU1FIH0sIC8qIFRpbWVzaGlmdCAqLwotCXsgMHgwLCAweDBjLCBLRVlfQ09GRkVFIH0sIC8qIFJlY2FsbCAqLwotCXsgMHgwLCAweDBlLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDAsIDB4MTIsIEtFWV9QT1dFUiB9LAotCXsgMHgwLCAweDE1LCBLRVlfTUVOVSB9LCAvKiBzb3VyY2UgKi8KLQl7IDB4MCwgMHgxOCwgS0VZX0NZQ0xFV0lORE9XUyB9LCAvKiBUV0lOIFBJUCAqLwotCXsgMHgwLCAweDFhLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MCwgMHgxYiwgS0VZX1ZPTFVNRURPV04gfSwKLQl7IDB4MCwgMHgxZSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDAwMDEsIEtFWV9aT09NIH0sIC8qIEZ1bGwgU2NyZWVuICovCisJeyAweDAwMDIsIEtFWV9DQU1FUkEgfSwgLyogc25hcHNob3QgKi8KKwl7IDB4MDAwMywgS0VZX01VVEUgfSwKKwl7IDB4MDAwNCwgS0VZX1JFV0lORCB9LAorCXsgMHgwMDA1LCBLRVlfUExBWVBBVVNFIH0sIC8qIFBsYXkvUGF1c2UgKi8KKwl7IDB4MDAwNiwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDAwMDcsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MDAwOCwgS0VZX1NUT1AgfSwKKwl7IDB4MDAwOSwgS0VZX1RJTUUgfSwgLyogVGltZXNoaWZ0ICovCisJeyAweDAwMGMsIEtFWV9DT0ZGRUUgfSwgLyogUmVjYWxsICovCisJeyAweDAwMGUsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDAxMiwgS0VZX1BPV0VSIH0sCisJeyAweDAwMTUsIEtFWV9NRU5VIH0sIC8qIHNvdXJjZSAqLworCXsgMHgwMDE4LCBLRVlfQ1lDTEVXSU5ET1dTIH0sIC8qIFRXSU4gUElQICovCisJeyAweDAwMWEsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwMDFiLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMDFlLCBLRVlfVk9MVU1FVVAgfSwKIH07CiAKIC8qIERWQiBVU0IgRHJpdmVyIHN0dWZmICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMKaW5kZXggMDdmYjg0My4uYjQxZDY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ub3ZhLXQtdXNiMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivbm92YS10LXVzYjIuYwpAQCAtMjIsNTEgKzIyLDUxIEBACiAKIC8qIEhhdXBwYXVnZSBOT1ZBLVQgVVNCMiBrZXlzICovCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGhhdXBwX3JjX2tleXMgW10gPSB7Ci0JeyAweDFlLCAweDAwLCBLRVlfMCB9LAotCXsgMHgxZSwgMHgwMSwgS0VZXzEgfSwKLQl7IDB4MWUsIDB4MDIsIEtFWV8yIH0sCi0JeyAweDFlLCAweDAzLCBLRVlfMyB9LAotCXsgMHgxZSwgMHgwNCwgS0VZXzQgfSwKLQl7IDB4MWUsIDB4MDUsIEtFWV81IH0sCi0JeyAweDFlLCAweDA2LCBLRVlfNiB9LAotCXsgMHgxZSwgMHgwNywgS0VZXzcgfSwKLQl7IDB4MWUsIDB4MDgsIEtFWV84IH0sCi0JeyAweDFlLCAweDA5LCBLRVlfOSB9LAotCXsgMHgxZSwgMHgwYSwgS0VZX0tQQVNURVJJU0sgfSwKLQl7IDB4MWUsIDB4MGIsIEtFWV9SRUQgfSwKLQl7IDB4MWUsIDB4MGMsIEtFWV9SQURJTyB9LAotCXsgMHgxZSwgMHgwZCwgS0VZX01FTlUgfSwKLQl7IDB4MWUsIDB4MGUsIEtFWV9HUkFWRSB9LCAvKiAjICovCi0JeyAweDFlLCAweDBmLCBLRVlfTVVURSB9LAotCXsgMHgxZSwgMHgxMCwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDFlLCAweDExLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgxZSwgMHgxMiwgS0VZX0NIQU5ORUwgfSwKLQl7IDB4MWUsIDB4MTQsIEtFWV9VUCB9LAotCXsgMHgxZSwgMHgxNSwgS0VZX0RPV04gfSwKLQl7IDB4MWUsIDB4MTYsIEtFWV9MRUZUIH0sCi0JeyAweDFlLCAweDE3LCBLRVlfUklHSFQgfSwKLQl7IDB4MWUsIDB4MTgsIEtFWV9WSURFTyB9LAotCXsgMHgxZSwgMHgxOSwgS0VZX0FVRElPIH0sCi0JeyAweDFlLCAweDFhLCBLRVlfTUVESUEgfSwKLQl7IDB4MWUsIDB4MWIsIEtFWV9FUEcgfSwKLQl7IDB4MWUsIDB4MWMsIEtFWV9UViB9LAotCXsgMHgxZSwgMHgxZSwgS0VZX05FWFQgfSwKLQl7IDB4MWUsIDB4MWYsIEtFWV9CQUNLIH0sCi0JeyAweDFlLCAweDIwLCBLRVlfQ0hBTk5FTFVQIH0sCi0JeyAweDFlLCAweDIxLCBLRVlfQ0hBTk5FTERPV04gfSwKLQl7IDB4MWUsIDB4MjQsIEtFWV9MQVNUIH0sIC8qIFNraXAgYmFja3dhcmRzICovCi0JeyAweDFlLCAweDI1LCBLRVlfT0sgfSwKLQl7IDB4MWUsIDB4MjksIEtFWV9CTFVFfSwKLQl7IDB4MWUsIDB4MmUsIEtFWV9HUkVFTiB9LAotCXsgMHgxZSwgMHgzMCwgS0VZX1BBVVNFIH0sCi0JeyAweDFlLCAweDMyLCBLRVlfUkVXSU5EIH0sCi0JeyAweDFlLCAweDM0LCBLRVlfRkFTVEZPUldBUkQgfSwKLQl7IDB4MWUsIDB4MzUsIEtFWV9QTEFZIH0sCi0JeyAweDFlLCAweDM2LCBLRVlfU1RPUCB9LAotCXsgMHgxZSwgMHgzNywgS0VZX1JFQ09SRCB9LAotCXsgMHgxZSwgMHgzOCwgS0VZX1lFTExPVyB9LAotCXsgMHgxZSwgMHgzYiwgS0VZX0dPVE8gfSwKLQl7IDB4MWUsIDB4M2QsIEtFWV9QT1dFUiB9LAorCXsgMHgxZTAwLCBLRVlfMCB9LAorCXsgMHgxZTAxLCBLRVlfMSB9LAorCXsgMHgxZTAyLCBLRVlfMiB9LAorCXsgMHgxZTAzLCBLRVlfMyB9LAorCXsgMHgxZTA0LCBLRVlfNCB9LAorCXsgMHgxZTA1LCBLRVlfNSB9LAorCXsgMHgxZTA2LCBLRVlfNiB9LAorCXsgMHgxZTA3LCBLRVlfNyB9LAorCXsgMHgxZTA4LCBLRVlfOCB9LAorCXsgMHgxZTA5LCBLRVlfOSB9LAorCXsgMHgxZTBhLCBLRVlfS1BBU1RFUklTSyB9LAorCXsgMHgxZTBiLCBLRVlfUkVEIH0sCisJeyAweDFlMGMsIEtFWV9SQURJTyB9LAorCXsgMHgxZTBkLCBLRVlfTUVOVSB9LAorCXsgMHgxZTBlLCBLRVlfR1JBVkUgfSwgLyogIyAqLworCXsgMHgxZTBmLCBLRVlfTVVURSB9LAorCXsgMHgxZTEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MWUxMSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MWUxMiwgS0VZX0NIQU5ORUwgfSwKKwl7IDB4MWUxNCwgS0VZX1VQIH0sCisJeyAweDFlMTUsIEtFWV9ET1dOIH0sCisJeyAweDFlMTYsIEtFWV9MRUZUIH0sCisJeyAweDFlMTcsIEtFWV9SSUdIVCB9LAorCXsgMHgxZTE4LCBLRVlfVklERU8gfSwKKwl7IDB4MWUxOSwgS0VZX0FVRElPIH0sCisJeyAweDFlMWEsIEtFWV9NRURJQSB9LAorCXsgMHgxZTFiLCBLRVlfRVBHIH0sCisJeyAweDFlMWMsIEtFWV9UViB9LAorCXsgMHgxZTFlLCBLRVlfTkVYVCB9LAorCXsgMHgxZTFmLCBLRVlfQkFDSyB9LAorCXsgMHgxZTIwLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDFlMjEsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxZTI0LCBLRVlfTEFTVCB9LCAvKiBTa2lwIGJhY2t3YXJkcyAqLworCXsgMHgxZTI1LCBLRVlfT0sgfSwKKwl7IDB4MWUyOSwgS0VZX0JMVUV9LAorCXsgMHgxZTJlLCBLRVlfR1JFRU4gfSwKKwl7IDB4MWUzMCwgS0VZX1BBVVNFIH0sCisJeyAweDFlMzIsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MWUzNCwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDFlMzUsIEtFWV9QTEFZIH0sCisJeyAweDFlMzYsIEtFWV9TVE9QIH0sCisJeyAweDFlMzcsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MWUzOCwgS0VZX1lFTExPVyB9LAorCXsgMHgxZTNiLCBLRVlfR09UTyB9LAorCXsgMHgxZTNkLCBLRVlfUE9XRVIgfSwKIH07CiAKIC8qIEZpcm13YXJlIGJ1Zz8gc29tZXRpbWVzLCB3aGVuIGEgbmV3IGtleSBpcyBwcmVzc2VkLCB0aGUgcHJldmlvdXMgcHJlc3NlZCBrZXkKQEAgLTkyLDEwICs5MiwxMSBAQAogCQkJZGViX3JjKCJyYXcga2V5IGNvZGUgMHglMDJ4LCAweCUwMngsIDB4JTAyeCB0byBjOiAlMDJ4IGQ6ICUwMnggdG9nZ2xlOiAlZFxuIixrZXlbMV0sa2V5WzJdLGtleVszXSxjdXN0b20sZGF0YSx0b2dnbGUpOwogCiAJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoYXVwcF9yY19rZXlzKTsgaSsrKSB7Ci0JCQkJaWYgKGhhdXBwX3JjX2tleXNbaV0uZGF0YSA9PSBkYXRhICYmCi0JCQkJCWhhdXBwX3JjX2tleXNbaV0uY3VzdG9tID09IGN1c3RvbSkgeworCQkJCWlmIChyYzVfZGF0YSgmaGF1cHBfcmNfa2V5c1tpXSkgPT0gZGF0YSAmJgorCQkJCQlyYzVfY3VzdG9tKCZoYXVwcF9yY19rZXlzW2ldKSA9PSBjdXN0b20pIHsKIAotCQkJCQlkZWJfcmMoImM6ICV4LCBkOiAleFxuIixoYXVwcF9yY19rZXlzW2ldLmRhdGEsaGF1cHBfcmNfa2V5c1tpXS5jdXN0b20pOworCQkJCQlkZWJfcmMoImM6ICV4LCBkOiAleFxuIiwgcmM1X2RhdGEoJmhhdXBwX3JjX2tleXNbaV0pLAorCQkJCQkJCQkgcmM1X2N1c3RvbSgmaGF1cHBfcmNfa2V5c1tpXSkpOwogCiAJCQkJCSpldmVudCA9IGhhdXBwX3JjX2tleXNbaV0uZXZlbnQ7CiAJCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivb3BlcmExLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL29wZXJhMS5jCmluZGV4IDdlMzJkMTEuLmQ0ZTIzMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivb3BlcmExLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYwpAQCAtMzMyLDMyICszMzIsMzIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBvcGVyYTFfcmNfa2V5c1tdID0gewotCXsweDVmLCAweGEwLCBLRVlfMX0sCi0JezB4NTEsIDB4YWYsIEtFWV8yfSwKLQl7MHg1ZCwgMHhhMiwgS0VZXzN9LAotCXsweDQxLCAweGJlLCBLRVlfNH0sCi0JezB4MGIsIDB4ZjUsIEtFWV81fSwKLQl7MHg0MywgMHhiZCwgS0VZXzZ9LAotCXsweDQ3LCAweGI4LCBLRVlfN30sCi0JezB4NDksIDB4YjYsIEtFWV84fSwKLQl7MHgwNSwgMHhmYSwgS0VZXzl9LAotCXsweDQ1LCAweGJhLCBLRVlfMH0sCi0JezB4MDksIDB4ZjYsIEtFWV9VUH0sCS8qY2hhbnVwICovCi0JezB4MWIsIDB4ZTUsIEtFWV9ET1dOfSwJLypjaGFuZG93biAqLwotCXsweDVkLCAweGEzLCBLRVlfTEVGVH0sCS8qdm9sZG93biAqLwotCXsweDVmLCAweGExLCBLRVlfUklHSFR9LAkvKnZvbHVwICovCi0JezB4MDcsIDB4ZjgsIEtFWV9TUEFDRX0sCS8qdGFiICovCi0JezB4MWYsIDB4ZTEsIEtFWV9FTlRFUn0sCS8qcGxheSBvayAqLwotCXsweDFiLCAweGU0LCBLRVlfWn0sCS8qem9vbSAqLwotCXsweDU5LCAweGE2LCBLRVlfTX0sCS8qbXV0ZSAqLwotCXsweDViLCAweGE1LCBLRVlfRn0sCS8qdHYvZiAqLwotCXsweDE5LCAweGU3LCBLRVlfUn0sCS8qcmVjICovCi0JezB4MDEsIDB4ZmUsIEtFWV9TfSwJLypTdG9wICovCi0JezB4MDMsIDB4ZmQsIEtFWV9QfSwJLypwYXVzZSAqLwotCXsweDAzLCAweGZjLCBLRVlfV30sCS8qPC0gLT4gKi8KLQl7MHgwNywgMHhmOSwgS0VZX0N9LAkvKmNhcHR1cmUgKi8KLQl7MHg0NywgMHhiOSwgS0VZX1F9LAkvKmV4aXQgKi8KLQl7MHg0MywgMHhiYywgS0VZX099LAkvKnBvd2VyICovCisJezB4NWZhMCwgS0VZXzF9LAorCXsweDUxYWYsIEtFWV8yfSwKKwl7MHg1ZGEyLCBLRVlfM30sCisJezB4NDFiZSwgS0VZXzR9LAorCXsweDBiZjUsIEtFWV81fSwKKwl7MHg0M2JkLCBLRVlfNn0sCisJezB4NDdiOCwgS0VZXzd9LAorCXsweDQ5YjYsIEtFWV84fSwKKwl7MHgwNWZhLCBLRVlfOX0sCisJezB4NDViYSwgS0VZXzB9LAorCXsweDA5ZjYsIEtFWV9VUH0sCS8qY2hhbnVwICovCisJezB4MWJlNSwgS0VZX0RPV059LAkvKmNoYW5kb3duICovCisJezB4NWRhMywgS0VZX0xFRlR9LAkvKnZvbGRvd24gKi8KKwl7MHg1ZmExLCBLRVlfUklHSFR9LAkvKnZvbHVwICovCisJezB4MDdmOCwgS0VZX1NQQUNFfSwJLyp0YWIgKi8KKwl7MHgxZmUxLCBLRVlfRU5URVJ9LAkvKnBsYXkgb2sgKi8KKwl7MHgxYmU0LCBLRVlfWn0sCS8qem9vbSAqLworCXsweDU5YTYsIEtFWV9NfSwJLyptdXRlICovCisJezB4NWJhNSwgS0VZX0Z9LAkvKnR2L2YgKi8KKwl7MHgxOWU3LCBLRVlfUn0sCS8qcmVjICovCisJezB4MDFmZSwgS0VZX1N9LAkvKlN0b3AgKi8KKwl7MHgwM2ZkLCBLRVlfUH0sCS8qcGF1c2UgKi8KKwl7MHgwM2ZjLCBLRVlfV30sCS8qPC0gLT4gKi8KKwl7MHgwN2Y5LCBLRVlfQ30sCS8qY2FwdHVyZSAqLworCXsweDQ3YjksIEtFWV9RfSwJLypleGl0ICovCisJezB4NDNiYywgS0VZX099LAkvKnBvd2VyICovCiAKIH07CiAKQEAgLTQwNSw4ICs0MDUsNyBAQAogCQlzZW5kX2tleSA9IChzZW5kX2tleSAmIDB4ZmZmZikgfCAweDAxMDA7CiAKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3BlcmExX3JjX2tleXMpOyBpKyspIHsKLQkJCWlmICgob3BlcmExX3JjX2tleXNbaV0uY3VzdG9tICogMjU2ICsKLQkJCQkJb3BlcmExX3JjX2tleXNbaV0uZGF0YSkgPT0gKHNlbmRfa2V5ICYgMHhmZmZmKSkgeworCQkJaWYgKHJjNV9zY2FuKCZvcGVyYTFfcmNfa2V5c1tpXSkgPT0gKHNlbmRfa2V5ICYgMHhmZmZmKSkgewogCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKIAkJCQkqZXZlbnQgPSBvcGVyYTFfcmNfa2V5c1tpXS5ldmVudDsKIAkJCQlvcHN0LT5sYXN0X2tleV9wcmVzc2VkID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC5jCmluZGV4IDk4NmZmZjkuLmVmNGUzN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMnguYwpAQCAtMTc1LDggKzE3NSw4IEBACiAKIC8qIGtleXMgZm9yIHRoZSBlbmNsb3NlZCByZW1vdGUgY29udHJvbCAqLwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSB2cDcwMnhfcmNfa2V5c1tdID0gewotCXsgMHgwMCwgMHgwMSwgS0VZXzEgfSwKLQl7IDB4MDAsIDB4MDIsIEtFWV8yIH0sCisJeyAweDAwMDEsIEtFWV8xIH0sCisJeyAweDAwMDIsIEtFWV8yIH0sCiB9OwogCiAvKiByZW1vdGUgY29udHJvbCBzdHVmZiAoZG9lcyBub3Qgd29yayB3aXRoIG15IGJveCkgKi8KQEAgLTE5OCw3ICsxOTgsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZwNzAyeF9yY19rZXlzKTsgaSsrKQotCQlpZiAodnA3MDJ4X3JjX2tleXNbaV0uY3VzdG9tID09IGtleVsxXSkgeworCQlpZiAocmM1X2N1c3RvbSgmdnA3MDJ4X3JjX2tleXNbaV0pID09IGtleVsxXSkgewogCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOwogCQkJKmV2ZW50ID0gdnA3MDJ4X3JjX2tleXNbaV0uZXZlbnQ7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jCmluZGV4IGFjYjM0NTUuLmE1OWZhYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwNDUuYwpAQCAtMTAwLDU2ICsxMDAsNTYgQEAKIC8qIFRoZSBrZXltYXBwaW5nIHN0cnVjdC4gU29tZWhvdyB0aGlzIHNob3VsZCBiZSBsb2FkZWQgdG8gdGhlIGRyaXZlciwgYnV0CiAgKiBjdXJyZW50bHkgaXQgaXMgaGFyZGNvZGVkLiAqLwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSB2cDcwNDVfcmNfa2V5c1tdID0gewotCXsgMHgwMCwgMHgxNiwgS0VZX1BPV0VSIH0sCi0JeyAweDAwLCAweDEwLCBLRVlfTVVURSB9LAotCXsgMHgwMCwgMHgwMywgS0VZXzEgfSwKLQl7IDB4MDAsIDB4MDEsIEtFWV8yIH0sCi0JeyAweDAwLCAweDA2LCBLRVlfMyB9LAotCXsgMHgwMCwgMHgwOSwgS0VZXzQgfSwKLQl7IDB4MDAsIDB4MWQsIEtFWV81IH0sCi0JeyAweDAwLCAweDFmLCBLRVlfNiB9LAotCXsgMHgwMCwgMHgwZCwgS0VZXzcgfSwKLQl7IDB4MDAsIDB4MTksIEtFWV84IH0sCi0JeyAweDAwLCAweDFiLCBLRVlfOSB9LAotCXsgMHgwMCwgMHgxNSwgS0VZXzAgfSwKLQl7IDB4MDAsIDB4MDUsIEtFWV9DSEFOTkVMVVAgfSwKLQl7IDB4MDAsIDB4MDIsIEtFWV9DSEFOTkVMRE9XTiB9LAotCXsgMHgwMCwgMHgxZSwgS0VZX1ZPTFVNRVVQIH0sCi0JeyAweDAwLCAweDBhLCBLRVlfVk9MVU1FRE9XTiB9LAotCXsgMHgwMCwgMHgxMSwgS0VZX1JFQ09SRCB9LAotCXsgMHgwMCwgMHgxNywgS0VZX0ZBVk9SSVRFUyB9LCAvKiBIZWFydCBzeW1ib2wgLSBDaGFubmVsIGxpc3QuICovCi0JeyAweDAwLCAweDE0LCBLRVlfUExBWSB9LAotCXsgMHgwMCwgMHgxYSwgS0VZX1NUT1AgfSwKLQl7IDB4MDAsIDB4NDAsIEtFWV9SRVdJTkQgfSwKLQl7IDB4MDAsIDB4MTIsIEtFWV9GQVNURk9SV0FSRCB9LAotCXsgMHgwMCwgMHgwZSwgS0VZX1BSRVZJT1VTIH0sIC8qIFJlY2FsbCAtIFByZXZpb3VzIGNoYW5uZWwuICovCi0JeyAweDAwLCAweDRjLCBLRVlfUEFVU0UgfSwKLQl7IDB4MDAsIDB4NGQsIEtFWV9TQ1JFRU4gfSwgLyogRnVsbCBzY3JlZW4gbW9kZS4gKi8KLQl7IDB4MDAsIDB4NTQsIEtFWV9BVURJTyB9LCAvKiBNVFMgLSBTd2l0Y2ggdG8gc2Vjb25kYXJ5IGF1ZGlvLiAqLwotCXsgMHgwMCwgMHgwYywgS0VZX0NBTkNFTCB9LCAvKiBDYW5jZWwgKi8KLQl7IDB4MDAsIDB4MWMsIEtFWV9FUEcgfSwgLyogRVBHICovCi0JeyAweDAwLCAweDAwLCBLRVlfVEFCIH0sIC8qIFRhYiAqLwotCXsgMHgwMCwgMHg0OCwgS0VZX0lORk8gfSwgLyogUHJldmlldyAqLwotCXsgMHgwMCwgMHgwNCwgS0VZX0xJU1QgfSwgLyogUmVjb3JkTGlzdCAqLwotCXsgMHgwMCwgMHgwZiwgS0VZX1RFWFQgfSwgLyogVGVsZXRleHQgKi8KLQl7IDB4MDAsIDB4NDEsIEtFWV9QUkVWSU9VU1NPTkcgfSwKLQl7IDB4MDAsIDB4NDIsIEtFWV9ORVhUU09ORyB9LAotCXsgMHgwMCwgMHg0YiwgS0VZX1VQIH0sCi0JeyAweDAwLCAweDUxLCBLRVlfRE9XTiB9LAotCXsgMHgwMCwgMHg0ZSwgS0VZX0xFRlQgfSwKLQl7IDB4MDAsIDB4NTIsIEtFWV9SSUdIVCB9LAotCXsgMHgwMCwgMHg0ZiwgS0VZX0VOVEVSIH0sCi0JeyAweDAwLCAweDEzLCBLRVlfQ0FOQ0VMIH0sCi0JeyAweDAwLCAweDRhLCBLRVlfQ0xFQVIgfSwKLQl7IDB4MDAsIDB4NTQsIEtFWV9QUklOVCB9LCAvKiBDYXB0dXJlICovCi0JeyAweDAwLCAweDQzLCBLRVlfU1VCVElUTEUgfSwgLyogU3VidGl0bGUvQ0MgKi8KLQl7IDB4MDAsIDB4MDgsIEtFWV9WSURFTyB9LCAvKiBBL1YgKi8KLQl7IDB4MDAsIDB4MDcsIEtFWV9TTEVFUCB9LCAvKiBIaWJlcm5hdGUgKi8KLQl7IDB4MDAsIDB4NDUsIEtFWV9aT09NIH0sIC8qIFpvb20rICovCi0JeyAweDAwLCAweDE4LCBLRVlfUkVEfSwKLQl7IDB4MDAsIDB4NTMsIEtFWV9HUkVFTn0sCi0JeyAweDAwLCAweDVlLCBLRVlfWUVMTE9XfSwKLQl7IDB4MDAsIDB4NWYsIEtFWV9CTFVFfQorCXsgMHgwMDE2LCBLRVlfUE9XRVIgfSwKKwl7IDB4MDAxMCwgS0VZX01VVEUgfSwKKwl7IDB4MDAwMywgS0VZXzEgfSwKKwl7IDB4MDAwMSwgS0VZXzIgfSwKKwl7IDB4MDAwNiwgS0VZXzMgfSwKKwl7IDB4MDAwOSwgS0VZXzQgfSwKKwl7IDB4MDAxZCwgS0VZXzUgfSwKKwl7IDB4MDAxZiwgS0VZXzYgfSwKKwl7IDB4MDAwZCwgS0VZXzcgfSwKKwl7IDB4MDAxOSwgS0VZXzggfSwKKwl7IDB4MDAxYiwgS0VZXzkgfSwKKwl7IDB4MDAxNSwgS0VZXzAgfSwKKwl7IDB4MDAwNSwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwMDAyLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDAxZSwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDAwMGEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAwMTEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MDAxNywgS0VZX0ZBVk9SSVRFUyB9LCAvKiBIZWFydCBzeW1ib2wgLSBDaGFubmVsIGxpc3QuICovCisJeyAweDAwMTQsIEtFWV9QTEFZIH0sCisJeyAweDAwMWEsIEtFWV9TVE9QIH0sCisJeyAweDAwNDAsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MDAxMiwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDAwMGUsIEtFWV9QUkVWSU9VUyB9LCAvKiBSZWNhbGwgLSBQcmV2aW91cyBjaGFubmVsLiAqLworCXsgMHgwMDRjLCBLRVlfUEFVU0UgfSwKKwl7IDB4MDA0ZCwgS0VZX1NDUkVFTiB9LCAvKiBGdWxsIHNjcmVlbiBtb2RlLiAqLworCXsgMHgwMDU0LCBLRVlfQVVESU8gfSwgLyogTVRTIC0gU3dpdGNoIHRvIHNlY29uZGFyeSBhdWRpby4gKi8KKwl7IDB4MDAwYywgS0VZX0NBTkNFTCB9LCAvKiBDYW5jZWwgKi8KKwl7IDB4MDAxYywgS0VZX0VQRyB9LCAvKiBFUEcgKi8KKwl7IDB4MDAwMCwgS0VZX1RBQiB9LCAvKiBUYWIgKi8KKwl7IDB4MDA0OCwgS0VZX0lORk8gfSwgLyogUHJldmlldyAqLworCXsgMHgwMDA0LCBLRVlfTElTVCB9LCAvKiBSZWNvcmRMaXN0ICovCisJeyAweDAwMGYsIEtFWV9URVhUIH0sIC8qIFRlbGV0ZXh0ICovCisJeyAweDAwNDEsIEtFWV9QUkVWSU9VU1NPTkcgfSwKKwl7IDB4MDA0MiwgS0VZX05FWFRTT05HIH0sCisJeyAweDAwNGIsIEtFWV9VUCB9LAorCXsgMHgwMDUxLCBLRVlfRE9XTiB9LAorCXsgMHgwMDRlLCBLRVlfTEVGVCB9LAorCXsgMHgwMDUyLCBLRVlfUklHSFQgfSwKKwl7IDB4MDA0ZiwgS0VZX0VOVEVSIH0sCisJeyAweDAwMTMsIEtFWV9DQU5DRUwgfSwKKwl7IDB4MDA0YSwgS0VZX0NMRUFSIH0sCisJeyAweDAwNTQsIEtFWV9QUklOVCB9LCAvKiBDYXB0dXJlICovCisJeyAweDAwNDMsIEtFWV9TVUJUSVRMRSB9LCAvKiBTdWJ0aXRsZS9DQyAqLworCXsgMHgwMDA4LCBLRVlfVklERU8gfSwgLyogQS9WICovCisJeyAweDAwMDcsIEtFWV9TTEVFUCB9LCAvKiBIaWJlcm5hdGUgKi8KKwl7IDB4MDA0NSwgS0VZX1pPT00gfSwgLyogWm9vbSsgKi8KKwl7IDB4MDAxOCwgS0VZX1JFRH0sCisJeyAweDAwNTMsIEtFWV9HUkVFTn0sCisJeyAweDAwNWUsIEtFWV9ZRUxMT1d9LAorCXsgMHgwMDVmLCBLRVlfQkxVRX0KIH07CiAKIHN0YXRpYyBpbnQgdnA3MDQ1X3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKQEAgLTE2Niw3ICsxNjYsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZwNzA0NV9yY19rZXlzKTsgaSsrKQotCQlpZiAodnA3MDQ1X3JjX2tleXNbaV0uZGF0YSA9PSBrZXkpIHsKKwkJaWYgKHJjNV9kYXRhKCZ2cDcwNDVfcmNfa2V5c1tpXSkgPT0ga2V5KSB7CiAJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CiAJCQkqZXZlbnQgPSB2cDcwNDVfcmNfa2V5c1tpXS5ldmVudDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKaW5kZXggMzI1MjZmMS4uZDFiNjdmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCkBAIC04OSwxNSArODksMzMgQEAKIAl1OCBvcGVyYW5kWzUwOV07CiB9OwogCi0jZGVmaW5lIEFWQ19ERUJVR19GQ1BfU1VCQUNUSU9OUwkxCi0jZGVmaW5lIEFWQ19ERUJVR19GQ1BfUEFZTE9BRFMJCTIKKyNkZWZpbmUgQVZDX0RFQlVHX1JFQURfREVTQ1JJUFRPUiAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEFWQ19ERUJVR19EU0lUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBBVkNfREVCVUdfRFNEICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgQVZDX0RFQlVHX1JFR0lTVEVSX1JFTU9URV9DT05UUk9MICAgICAgMHgwMDA4CisjZGVmaW5lIEFWQ19ERUJVR19MTkJfQ09OVFJPTCAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBBVkNfREVCVUdfVFVORV9RUFNLICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgQVZDX0RFQlVHX1RVTkVfUVBTSzIgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIEFWQ19ERUJVR19IT1NUMkNBICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBBVkNfREVCVUdfQ0EySE9TVCAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgQVZDX0RFQlVHX0FQUExJQ0FUSU9OX1BNVCAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIEFWQ19ERUJVR19GQ1BfUEFZTE9BRFMgICAgICAgICAgICAgICAgIDB4ODAwMAogCiBzdGF0aWMgaW50IGF2Y19kZWJ1ZzsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXZjX2RlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlZlcmJvc2UgbG9nZ2luZyAoZGVmYXVsdCA9IDAiCi0JIiwgRkNQIHN1YmFjdGlvbnMgPSAiCV9fc3RyaW5naWZ5KEFWQ19ERUJVR19GQ1BfU1VCQUNUSU9OUykKLQkiLCBGQ1AgcGF5bG9hZHMgPSAiCV9fc3RyaW5naWZ5KEFWQ19ERUJVR19GQ1BfUEFZTE9BRFMpCi0JIiwgb3IgYWxsID0gLTEpIik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVmVyYm9zZSBsb2dnaW5nIChub25lID0gMCIKKwkiLCBGQ1Agc3ViYWN0aW9ucyIKKwkiOiBSRUFEIERFU0NSSVBUT1IgPSAiCQlfX3N0cmluZ2lmeShBVkNfREVCVUdfUkVBRF9ERVNDUklQVE9SKQorCSIsIERTSVQgPSAiCQkJX19zdHJpbmdpZnkoQVZDX0RFQlVHX0RTSVQpCisJIiwgUkVHSVNURVJfUkVNT1RFX0NPTlRST0wgPSAiCV9fc3RyaW5naWZ5KEFWQ19ERUJVR19SRUdJU1RFUl9SRU1PVEVfQ09OVFJPTCkKKwkiLCBMTkIgQ09OVFJPTCA9ICIJCV9fc3RyaW5naWZ5KEFWQ19ERUJVR19MTkJfQ09OVFJPTCkKKwkiLCBUVU5FIFFQU0sgPSAiCQlfX3N0cmluZ2lmeShBVkNfREVCVUdfVFVORV9RUFNLKQorCSIsIFRVTkUgUVBTSzIgPSAiCQlfX3N0cmluZ2lmeShBVkNfREVCVUdfVFVORV9RUFNLMikKKwkiLCBIT1NUMkNBID0gIgkJCV9fc3RyaW5naWZ5KEFWQ19ERUJVR19IT1NUMkNBKQorCSIsIENBMkhPU1QgPSAiCQkJX19zdHJpbmdpZnkoQVZDX0RFQlVHX0NBMkhPU1QpCisJIjsgQXBwbGljYXRpb24gc2VudCBQTVQgPSAiCV9fc3RyaW5naWZ5KEFWQ19ERUJVR19BUFBMSUNBVElPTl9QTVQpCisJIiwgRkNQIHBheWxvYWRzID0gIgkJX19zdHJpbmdpZnkoQVZDX0RFQlVHX0ZDUF9QQVlMT0FEUykKKwkiLCBvciBhIGNvbWJpbmF0aW9uLCBvciBhbGwgPSAtMSkiKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmRlYnVnX2ZjcF9jdHlwZSh1bnNpZ25lZCBpbnQgY3R5cGUpCiB7CkBAIC0xMTgsNDggKzEzNiw3MCBAQAogCQkJCSAgICBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aCkKIHsKIAlzd2l0Y2ggKG9wY29kZSkgewotCWNhc2UgQVZDX09QQ09ERV9WRU5ET1I6CQkJYnJlYWs7Ci0JY2FzZSBBVkNfT1BDT0RFX1JFQURfREVTQ1JJUFRPUjoJcmV0dXJuICJSZWFkRGVzY3JpcHRvciI7Ci0JY2FzZSBBVkNfT1BDT0RFX0RTSVQ6CQkJcmV0dXJuICJEaXJlY3RTZWxlY3RJbmZvLlR5cGUiOwotCWNhc2UgQVZDX09QQ09ERV9EU0Q6CQkJcmV0dXJuICJEaXJlY3RTZWxlY3REYXRhIjsKLQlkZWZhdWx0OgkJCQlyZXR1cm4gIj8iOworCWNhc2UgQVZDX09QQ09ERV9WRU5ET1I6CisJCWJyZWFrOworCWNhc2UgQVZDX09QQ09ERV9SRUFEX0RFU0NSSVBUT1I6CisJCXJldHVybiBhdmNfZGVidWcgJiBBVkNfREVCVUdfUkVBRF9ERVNDUklQVE9SID8KKwkJCQkiUmVhZERlc2NyaXB0b3IiIDogTlVMTDsKKwljYXNlIEFWQ19PUENPREVfRFNJVDoKKwkJcmV0dXJuIGF2Y19kZWJ1ZyAmIEFWQ19ERUJVR19EU0lUID8KKwkJCQkiRGlyZWN0U2VsZWN0SW5mby5UeXBlIiA6IE5VTEw7CisJY2FzZSBBVkNfT1BDT0RFX0RTRDoKKwkJcmV0dXJuIGF2Y19kZWJ1ZyAmIEFWQ19ERUJVR19EU0QgPyAiRGlyZWN0U2VsZWN0RGF0YSIgOiBOVUxMOworCWRlZmF1bHQ6CisJCXJldHVybiAiVW5rbm93biI7CiAJfQogCiAJaWYgKGxlbmd0aCA8IDcgfHwKIAkgICAgZGF0YVszXSAhPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wIHx8CiAJICAgIGRhdGFbNF0gIT0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMSB8fAogCSAgICBkYXRhWzVdICE9IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzIpCi0JCXJldHVybiAiVmVuZG9yIjsKKwkJcmV0dXJuICJWZW5kb3IvVW5rbm93biI7CiAKIAlzd2l0Y2ggKGRhdGFbNl0pIHsKLQljYXNlIFNGRV9WRU5ET1JfT1BDT0RFX1JFR0lTVEVSX1JFTU9URV9DT05UUk9MOglyZXR1cm4gIlJlZ2lzdGVyUkMiOwotCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfTE5CX0NPTlRST0w6CQlyZXR1cm4gIkxOQkNvbnRyb2wiOwotCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfVFVORV9RUFNLOgkJcmV0dXJuICJUdW5lUVBTSyI7Ci0JY2FzZSBTRkVfVkVORE9SX09QQ09ERV9UVU5FX1FQU0syOgkJcmV0dXJuICJUdW5lUVBTSzIiOwotCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfSE9TVDJDQToJCQlyZXR1cm4gIkhvc3QyQ0EiOwotCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfQ0EySE9TVDoJCQlyZXR1cm4gIkNBMkhvc3QiOworCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfUkVHSVNURVJfUkVNT1RFX0NPTlRST0w6CisJCXJldHVybiBhdmNfZGVidWcgJiBBVkNfREVCVUdfUkVHSVNURVJfUkVNT1RFX0NPTlRST0wgPworCQkJCSJSZWdpc3RlclJDIiA6IE5VTEw7CisJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9MTkJfQ09OVFJPTDoKKwkJcmV0dXJuIGF2Y19kZWJ1ZyAmIEFWQ19ERUJVR19MTkJfQ09OVFJPTCA/ICJMTkJDb250cm9sIiA6IE5VTEw7CisJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9UVU5FX1FQU0s6CisJCXJldHVybiBhdmNfZGVidWcgJiBBVkNfREVCVUdfVFVORV9RUFNLID8gIlR1bmVRUFNLIiA6IE5VTEw7CisJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9UVU5FX1FQU0syOgorCQlyZXR1cm4gYXZjX2RlYnVnICYgQVZDX0RFQlVHX1RVTkVfUVBTSzIgPyAiVHVuZVFQU0syIiA6IE5VTEw7CisJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9IT1NUMkNBOgorCQlyZXR1cm4gYXZjX2RlYnVnICYgQVZDX0RFQlVHX0hPU1QyQ0EgPyAiSG9zdDJDQSIgOiBOVUxMOworCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfQ0EySE9TVDoKKwkJcmV0dXJuIGF2Y19kZWJ1ZyAmIEFWQ19ERUJVR19DQTJIT1NUID8gIkNBMkhvc3QiIDogTlVMTDsKIAl9Ci0JcmV0dXJuICJWZW5kb3IiOworCXJldHVybiAiVmVuZG9yL1Vua25vd24iOwogfQogCiBzdGF0aWMgdm9pZCBkZWJ1Z19mY3AoY29uc3QgdTggKmRhdGEsIGludCBsZW5ndGgpCiB7Ci0JdW5zaWduZWQgaW50IHN1YnVuaXRfdHlwZSwgc3VidW5pdF9pZCwgb3A7Ci0JY29uc3QgY2hhciAqcHJlZml4ID0gZGF0YVswXSA+IDcgPyAiRkNQIDwtICIgOiAiRkNQIC0+ICI7CisJdW5zaWduZWQgaW50IHN1YnVuaXRfdHlwZSwgc3VidW5pdF9pZCwgb3Bjb2RlOworCWNvbnN0IGNoYXIgKm9wLCAqcHJlZml4OwogCi0JaWYgKGF2Y19kZWJ1ZyAmIEFWQ19ERUJVR19GQ1BfU1VCQUNUSU9OUykgewotCQlzdWJ1bml0X3R5cGUgPSBkYXRhWzFdID4+IDM7Ci0JCXN1YnVuaXRfaWQgPSBkYXRhWzFdICYgNzsKLQkJb3AgPSBzdWJ1bml0X3R5cGUgPT0gMHgxZSB8fCBzdWJ1bml0X2lkID09IDUgPyB+MCA6IGRhdGFbMl07CisJcHJlZml4ICAgICAgID0gZGF0YVswXSA+IDcgPyAiRkNQIDwtICIgOiAiRkNQIC0+ICI7CisJc3VidW5pdF90eXBlID0gZGF0YVsxXSA+PiAzOworCXN1YnVuaXRfaWQgICA9IGRhdGFbMV0gJiA3OworCW9wY29kZSAgICAgICA9IHN1YnVuaXRfdHlwZSA9PSAweDFlIHx8IHN1YnVuaXRfaWQgPT0gNSA/IH4wIDogZGF0YVsyXTsKKwlvcCAgICAgICAgICAgPSBkZWJ1Z19mY3Bfb3Bjb2RlKG9wY29kZSwgZGF0YSwgbGVuZ3RoKTsKKworCWlmIChvcCkgewogCQlwcmludGsoS0VSTl9JTkZPICIlc3N1PSV4LiV4IGw9JWQ6ICUtOHMgLSAlc1xuIiwKIAkJICAgICAgIHByZWZpeCwgc3VidW5pdF90eXBlLCBzdWJ1bml0X2lkLCBsZW5ndGgsCi0JCSAgICAgICBkZWJ1Z19mY3BfY3R5cGUoZGF0YVswXSksCi0JCSAgICAgICBkZWJ1Z19mY3Bfb3Bjb2RlKG9wLCBkYXRhLCBsZW5ndGgpKTsKKwkJICAgICAgIGRlYnVnX2ZjcF9jdHlwZShkYXRhWzBdKSwgb3ApOworCQlpZiAoYXZjX2RlYnVnICYgQVZDX0RFQlVHX0ZDUF9QQVlMT0FEUykKKwkJCXByaW50X2hleF9kdW1wKEtFUk5fSU5GTywgcHJlZml4LCBEVU1QX1BSRUZJWF9OT05FLAorCQkJCSAgICAgICAxNiwgMSwgZGF0YSwgbGVuZ3RoLCBmYWxzZSk7CiAJfQorfQogCi0JaWYgKGF2Y19kZWJ1ZyAmIEFWQ19ERUJVR19GQ1BfUEFZTE9BRFMpCi0JCXByaW50X2hleF9kdW1wKEtFUk5fSU5GTywgcHJlZml4LCBEVU1QX1BSRUZJWF9OT05FLCAxNiwgMSwKLQkJCSAgICAgICBkYXRhLCBsZW5ndGgsIGZhbHNlKTsKK3N0YXRpYyB2b2lkIGRlYnVnX3BtdChjaGFyICptc2csIGludCBsZW5ndGgpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiQVBQIFBNVCAtPiBsPSVkXG4iLCBsZW5ndGgpOworCXByaW50X2hleF9kdW1wKEtFUk5fSU5GTywgIkFQUCBQTVQgLT4gIiwgRFVNUF9QUkVGSVhfTk9ORSwKKwkJICAgICAgIDE2LCAxLCBtc2csIGxlbmd0aCwgZmFsc2UpOwogfQogCiBzdGF0aWMgaW50IF9fYXZjX3dyaXRlKHN0cnVjdCBmaXJlZHR2ICpmZHR2LApAQCAtMjU0LDYgKzI5NCwyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGFkZF9waWRfZmlsdGVyKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1OCAqb3BlcmFuZCkKK3sKKwlpbnQgaSwgbiwgcG9zID0gMTsKKworCWZvciAoaSA9IDAsIG4gPSAwOyBpIDwgMTY7IGkrKykgeworCQlpZiAodGVzdF9iaXQoaSwgJmZkdHYtPmNoYW5uZWxfYWN0aXZlKSkgeworCQkJb3BlcmFuZFtwb3MrK10gPSAweDEzOyAvKiBmbG93ZnVuY3Rpb24gcmVsYXkgKi8KKwkJCW9wZXJhbmRbcG9zKytdID0gMHg4MDsgLyogZHNkX3NlbF9zcGVjX3ZhbGlkX2ZsYWdzIC0+IFBJRCAqLworCQkJb3BlcmFuZFtwb3MrK10gPSAoZmR0di0+Y2hhbm5lbF9waWRbaV0gPj4gOCkgJiAweDFmOworCQkJb3BlcmFuZFtwb3MrK10gPSBmZHR2LT5jaGFubmVsX3BpZFtpXSAmIDB4ZmY7CisJCQlvcGVyYW5kW3BvcysrXSA9IDB4MDA7IC8qIHRhYmxlSUQgKi8KKwkJCW9wZXJhbmRbcG9zKytdID0gMHgwMDsgLyogZmlsdGVyX2xlbmd0aCAqLworCQkJbisrOworCQl9CisJfQorCW9wZXJhbmRbMF0gPSBuOworCisJcmV0dXJuIHBvczsKK30KKwogLyoKICAqIHR1bmluZyBjb21tYW5kIGZvciBzZXR0aW5nIHRoZSByZWxhdGl2ZSBMTkIgZnJlcXVlbmN5CiAgKiAobm90IHN1cHBvcnRlZCBieSB0aGUgQVZDIHN0YW5kYXJkKQpAQCAtMzE2LDcgKzM3Niw4IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdmNfdHVuZXJfZHNkX2R2Yl9jKHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zLAorc3RhdGljIHZvaWQgYXZjX3R1bmVyX2RzZF9kdmJfYyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwKKwkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKIAkJCQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMpCiB7CiAJYy0+b3Bjb2RlID0gQVZDX09QQ09ERV9EU0Q7CkBAIC0zNzgsMTMgKzQzOSwxMyBAQAogCiAJYy0+b3BlcmFuZFsyMF0gPSAweDAwOwogCWMtPm9wZXJhbmRbMjFdID0gMHgwMDsKLQkvKiBOcl9vZl9kc2Rfc2VsX3NwZWNzID0gMCAtPiBubyBQSURzIGFyZSB0cmFuc21pdHRlZCAqLwotCWMtPm9wZXJhbmRbMjJdID0gMHgwMDsKIAotCWMtPmxlbmd0aCA9IDI4OworCS8qIEFkZCBQSURzIHRvIGZpbHRlciAqLworCWMtPmxlbmd0aCA9IEFMSUdOKDIyICsgYWRkX3BpZF9maWx0ZXIoZmR0diwgJmMtPm9wZXJhbmRbMjJdKSArIDMsIDQpOwogfQogCi1zdGF0aWMgdm9pZCBhdmNfdHVuZXJfZHNkX2R2Yl90KHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zLAorc3RhdGljIHZvaWQgYXZjX3R1bmVyX2RzZF9kdmJfdChzdHJ1Y3QgZmlyZWR0diAqZmR0diwKKwkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKIAkJCQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMpCiB7CiAJc3RydWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgKm9mZG0gPSAmcGFyYW1zLT51Lm9mZG07CkBAIC00ODEsMTAgKzU0Miw5IEBACiAKIAljLT5vcGVyYW5kWzE1XSA9IDB4MDA7IC8qIG5ldHdvcmtfSURbMF0gKi8KIAljLT5vcGVyYW5kWzE2XSA9IDB4MDA7IC8qIG5ldHdvcmtfSURbMV0gKi8KLQkvKiBOcl9vZl9kc2Rfc2VsX3NwZWNzID0gMCAtPiBubyBQSURzIGFyZSB0cmFuc21pdHRlZCAqLwotCWMtPm9wZXJhbmRbMTddID0gMHgwMDsKIAotCWMtPmxlbmd0aCA9IDI0OworCS8qIEFkZCBQSURzIHRvIGZpbHRlciAqLworCWMtPmxlbmd0aCA9IEFMSUdOKDE3ICsgYWRkX3BpZF9maWx0ZXIoZmR0diwgJmMtPm9wZXJhbmRbMTddKSArIDMsIDQpOwogfQogCiBpbnQgYXZjX3R1bmVyX2RzZChzdHJ1Y3QgZmlyZWR0diAqZmR0diwKQEAgLTUwMiw4ICs1NjIsOCBAQAogCXN3aXRjaCAoZmR0di0+dHlwZSkgewogCWNhc2UgRklSRURUVl9EVkJfUzoKIAljYXNlIEZJUkVEVFZfRFZCX1MyOiBhdmNfdHVuZXJfdHVuZXFwc2soZmR0diwgcGFyYW1zLCBjKTsgYnJlYWs7Ci0JY2FzZSBGSVJFRFRWX0RWQl9DOiBhdmNfdHVuZXJfZHNkX2R2Yl9jKHBhcmFtcywgYyk7IGJyZWFrOwotCWNhc2UgRklSRURUVl9EVkJfVDogYXZjX3R1bmVyX2RzZF9kdmJfdChwYXJhbXMsIGMpOyBicmVhazsKKwljYXNlIEZJUkVEVFZfRFZCX0M6IGF2Y190dW5lcl9kc2RfZHZiX2MoZmR0diwgcGFyYW1zLCBjKTsgYnJlYWs7CisJY2FzZSBGSVJFRFRWX0RWQl9UOiBhdmNfdHVuZXJfZHNkX2R2Yl90KGZkdHYsIHBhcmFtcywgYyk7IGJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KQEAgLTk2Myw2ICsxMDIzLDkgQEAKIAlpbnQgZXNfaW5mb19sZW5ndGg7CiAJaW50IGNyYzMyX2NzdW07CiAKKwlpZiAodW5saWtlbHkoYXZjX2RlYnVnICYgQVZDX0RFQlVHX0FQUExJQ0FUSU9OX1BNVCkpCisJCWRlYnVnX3BtdChtc2csIGxlbmd0aCk7CisKIAltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IGJlOTY3YWMuLmI3OTRlODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC04MSw2ICs4MSwxMyBAQAogCWhlbHAKIAkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorY29uZmlnIERWQl9aTDEwMDM5CisJdHJpc3RhdGUgIlphcmxpbmsgWkwxMDAzOSBzaWxpY29uIHR1bmVyIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisKIGNvbmZpZyBEVkJfUzVIMTQyMAogCXRyaXN0YXRlICJTYW1zdW5nIFM1SDE0MjAgYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQppbmRleCA4MzI0NzNjLi4zYjQ5ZDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBACiBvYmotJChDT05GSUdfRFZCX05YVDYwMDApICs9IG54dDYwMDAubwogb2JqLSQoQ09ORklHX0RWQl9NVDM1MikgKz0gbXQzNTIubwogb2JqLSQoQ09ORklHX0RWQl9aTDEwMDM2KSArPSB6bDEwMDM2Lm8KK29iai0kKENPTkZJR19EVkJfWkwxMDAzOSkgKz0gemwxMDAzOS5vCiBvYmotJChDT05GSUdfRFZCX1pMMTAzNTMpICs9IHpsMTAzNTMubwogb2JqLSQoQ09ORklHX0RWQl9DWDIyNzAyKSArPSBjeDIyNzAyLm8KIG9iai0kKENPTkZJR19EVkJfRFJYMzk3WEQpICs9IGRyeDM5N3hELm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMC5jCmluZGV4IGZiZDgzOGUuLjVmYmMwZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDAuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJICAgIHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA+IEhJRVJBUkNIWV80KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChwLT5iYW5kd2lkdGggPCBCQU5EV0lEVEhfOF9NSFogJiYgcC0+YmFuZHdpZHRoID4gQkFORFdJRFRIXzZfTUhaKQorCWlmIChwLT5iYW5kd2lkdGggPCBCQU5EV0lEVEhfOF9NSFogfHwgcC0+YmFuZHdpZHRoID4gQkFORFdJRFRIXzZfTUhaKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChwLT5iYW5kd2lkdGggPT0gQkFORFdJRFRIXzdfTUhaKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEzLmMKaW5kZXggZTRmZDUzMy4uMDc1YjJiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMy5jCkBAIC0zMDMsNiArMzAzLDcgQEAKIHsKIAlzMzIgTjsKIAlzNjQgRjsKKwl1NjQgZGl2aWRlbmQ7CiAJdTggUiwgcjsKIAl1OCB2Y29kaXY7CiAJdTggZmFjdG9yOwpAQCAtMzQ2LDcgKzM0NywxMCBAQAogCUYgPSBmcmVxX2h6OwogCUYgKj0gKHU2NCkgKFIgKiB2Y29kaXYgKiAyNjIxNDQpOwogCWRwcmludGsoIjEgTjogJWQsIEY6ICVsbGQsIFI6ICVkXG4iLCBOLCAobG9uZyBsb25nKUYsIFIpOwotCWRvX2RpdihGLCBzdGF0ZS0+Y29uZmlnLT54dGFsX2toeioxMDAwICogZmFjdG9yICogMik7CisJLyogZG9fZGl2IG5lZWRzIGFuIHU2NCBhcyBmaXJzdCBhcmd1bWVudCAqLworCWRpdmlkZW5kID0gRjsKKwlkb19kaXYoZGl2aWRlbmQsIHN0YXRlLT5jb25maWctPnh0YWxfa2h6ICogMTAwMCAqIGZhY3RvciAqIDIpOworCUYgPSBkaXZpZGVuZDsKIAlkcHJpbnRrKCIyIE46ICVkLCBGOiAlbGxkLCBSOiAlZFxuIiwgTiwgKGxvbmcgbG9uZylGLCBSKTsKIAlGIC09IChOICsgMzIpICogMjYyMTQ0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYwppbmRleCAwNTkyZjA0Li5kOGY5MjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCS8qICBjaGVjayBpZiBzeW1ib2wgcmF0ZSBpcyB3aXRoaW4gbGltaXRzICovCiAJaWYgKChzcmF0ZSA+IHN0YXRlLT5mcm9udGVuZC5vcHMuaW5mby5zeW1ib2xfcmF0ZV9tYXgpIHx8CiAJICAgIChzcmF0ZSA8IHN0YXRlLT5mcm9udGVuZC5vcHMuaW5mby5zeW1ib2xfcmF0ZV9taW4pKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7OworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAkvKiBjaG9vc2UgdGhlIHNhbXBsaW5nIHJhdGUgaGlnaCBlbm91Z2ggZm9yIHRoZSByZXF1aXJlZCBvcGVyYXRpb24sCiAJICAgd2hpbGUgb3B0aW1pemluZyB0aGUgcG93ZXIgY29uc3VtZWQgYnkgdGhlIGRlbW9kdWxhdG9yICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuYwppbmRleCBmZTg5NWJmLi5kYTkyY2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQkJCQlicmVhazsKIAkJCQljYXNlIEJBTkRfU0JBTkQ6CiAJCQkJCUxPNF9TRVRfVkNPX0hGRElWKGxvNCwgMCwgMCk7Ci0JCQkJCUxPNF9TRVRfQ1RSSU0obG80LCAxKTs7CisJCQkJCUxPNF9TRVRfQ1RSSU0obG80LCAxKTsKIAkJCQkJYyA9IDE7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgQkFORF9VSEY6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCmluZGV4IDgyMTdlNWIuLmZjOTZmYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCkBAIC04ODMsNyArODgzLDcgQEAKIAkyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKIAogCXUzMiB4dGFsID0gc3RhdGUtPmNmZy5idy0+eHRhbF9oeiAvIDEwMDA7Ci0JaW50IGZfcmVsID0gKCAocmZfa2h6ICsgeHRhbC8yKSAvIHh0YWwpICogeHRhbCAtIHJmX2toejsKKwlpbnQgZl9yZWwgPSBESVZfUk9VTkRfQ0xPU0VTVChyZl9raHosIHh0YWwpICogeHRhbCAtIHJmX2toejsKIAlpbnQgazsKIAlpbnQgY29lZl9yZVs4XSxjb2VmX2ltWzhdOwogCWludCBid19raHogPSBidzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCmluZGV4IDlmNjM0OTkuLjZkODY1ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYwpAQCAtMzg5LDYgKzM4OSw3NyBAQAogCX0KIH07CiAKKy8qIFNhbXN1bmcgVERUQzkyNTFESDAgRFZCLVQgTklNLCBhcyB1c2VkIG9uIEFpclN0YXIgMiAqLworc3RhdGljIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF9zYW1zdW5nX3RkdGM5MjUxZGgwID0geworCS5uYW1lCT0gIlNhbXN1bmcgVERUQzkyNTFESDAiLAorCS5taW4JPSAgNDgwMDAwMDAsCisJLm1heAk9IDg2MzAwMDAwMCwKKwkuaWZmcmVxCT0gIDM2MTY2NjY3LAorCS5jb3VudAk9IDMsCisJLmVudHJpZXMgPSB7CisJCXsgMTU3NTAwMDAwLCAxNjY2NjcsIDB4Y2MsIDB4MDkgfSwKKwkJeyA0NDMwMDAwMDAsIDE2NjY2NywgMHhjYywgMHgwYSB9LAorCQl7IDg2MzAwMDAwMCwgMTY2NjY3LCAweGNjLCAweDA4IH0sCisJfQorfTsKKworLyogU2Ftc3VuZyBUQkRVMTgxMzIgRFZCLVMgTklNIHdpdGggVFNBNTA1OSBQTEwsIHVzZWQgaW4gU2t5U3RhcjIgRFZCLVMgMi4zICovCitzdGF0aWMgc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX3NhbXN1bmdfdGJkdTE4MTMyID0geworCS5uYW1lID0gIlNhbXN1bmcgVEJEVTE4MTMyIiwKKwkubWluCT0gIDk1MDAwMCwKKwkubWF4CT0gMjE1MDAwMCwgLyogZ3Vlc3NlcyAqLworCS5pZmZyZXEgPSAwLAorCS5jb3VudCA9IDIsCisJLmVudHJpZXMgPSB7CisJCXsgMTU1MDAwMCwgMTI1LCAweDg0LCAweDgyIH0sCisJCXsgNDA5NTkzNywgMTI1LCAweDg0LCAweDgwIH0sCisJfQorCS8qIFRTQTUwNTkgUExMIGhhcyBhIDE3IGJpdCBkaXZpc29yIHJhdGhlciB0aGFuIHRoZSAxNSBiaXRzIHN1cHBvcnRlZAorCSAqIGJ5IHRoaXMgZHJpdmVyLiAgVGhlIHR3byBleHRyYSBiaXRzIGFyZSAweDYwIGluIHRoZSB0aGlyZCBieXRlLiAgMTUKKwkgKiBiaXRzIGlzIGVub3VnaCBmb3Igb3ZlciA0IEdIeiwgd2hpY2ggaXMgZW5vdWdoIHRvIGNvdmVyIHRoZSByYW5nZQorCSAqIG9mIHRoaXMgdHVuZXIuICBXZSBjb3VsZCB1c2UgdGhlIGFkZGl0aW9uYWwgZGl2aXNvciBiaXRzIGJ5IGFkZGluZworCSAqIG1vcmUgZW50cmllcywgZS5nLgorCSB7IDB4MGZmZmYgKiAxMjUgKyAxMjUvMiwgMTI1LCAweDg0IHwgMHgyMCwgfSwKKwkgeyAweDE3ZmZmICogMTI1ICsgMTI1LzIsIDEyNSwgMHg4NCB8IDB4NDAsIH0sCisJIHsgMHgxZmZmZiAqIDEyNSArIDEyNS8yLCAxMjUsIDB4ODQgfCAweDYwLCB9LCAqLworfTsKKworLyogU2Ftc3VuZyBUQk1VMjQxMTIgRFZCLVMgTklNIHdpdGggU0wxOTM1IHplcm8tSUYgdHVuZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfc2Ftc3VuZ190Ym11MjQxMTIgPSB7CisJLm5hbWUgPSAiU2Ftc3VuZyBUQk1VMjQxMTIiLAorCS5taW4JPSAgOTUwMDAwLAorCS5tYXgJPSAyMTUwMDAwLCAvKiBndWVzc2VzICovCisJLmlmZnJlcSA9IDAsCisJLmNvdW50ID0gMiwKKwkuZW50cmllcyA9IHsKKwkJeyAxNTAwMDAwLCAxMjUsIDB4ODQsIDB4MTggfSwKKwkJeyA5OTk5OTk5LCAxMjUsIDB4ODQsIDB4MDggfSwKKwl9Cit9OworCisvKiBBbHBzIFRERUU0IERWQi1DIE5JTSwgdXNlZCBvbiBDYWJsZXN0YXIgMiAqLworLyogYnl0ZSA0IDogMSAgKiAgICogICBBR0QgUjMgIFIyICBSMSAgUjAKKyAqIGJ5dGUgNSA6IEMxICogICBSRSAgUlRTIEJTNCBCUzMgQlMyIEJTMQorICogQUdEID0gMSwgUjMgUjIgUjEgUjAgPSAwIDEgMCAxID0+IGJ5dGUgNCA9IDEqKjEwMTAxID0gMHg5NQorICogUmFuZ2UoTUh6KSAgQzEgKiAgUkUgUlRTIEJTNCBCUzMgQlMyIEJTMSAgQnl0ZSA1CisgKiAgNDcgLSAxNTMgICAwICAqICAwICAgMCAgIDAgICAwICAgMCAgIDEgICAweDAxCisgKiAxNTMgLSA0MzAgICAwICAqICAwICAgMCAgIDAgICAwICAgMSAgIDAgICAweDAyCisgKiA0MzAgLSA4MjIgICAwICAqICAwICAgMCAgIDEgICAwICAgMCAgIDAgICAweDA4CisgKiA4MjIgLSA4NjIgICAxICAqICAwICAgMCAgIDEgICAwICAgMCAgIDAgICAweDg4ICovCitzdGF0aWMgc3RydWN0IGR2Yl9wbGxfZGVzYyBkdmJfcGxsX2FscHNfdGRlZTQgPSB7CisJLm5hbWUgPSAiQUxQUyBUREVFNCIsCisJLm1pbgk9ICA0NzAwMDAwMCwKKwkubWF4CT0gODYyMDAwMDAwLAorCS5pZmZyZXEJPSAgMzYxMjUwMDAsCisJLmNvdW50ID0gNCwKKwkuZW50cmllcyA9IHsKKwkJeyAxNTMwMDAwMDAsIDYyNTAwLCAweDk1LCAweDAxIH0sCisJCXsgNDMwMDAwMDAwLCA2MjUwMCwgMHg5NSwgMHgwMiB9LAorCQl7IDgyMjAwMDAwMCwgNjI1MDAsIDB4OTUsIDB4MDggfSwKKwkJeyA5OTk5OTk5OTksIDYyNTAwLCAweDk1LCAweDg4IH0sCisJfQorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCBkdmJfcGxsX2Rlc2MgKnBsbF9saXN0W10gPSB7CkBAIC00MDIsMTEgKzQ3MywxNSBAQAogCVtEVkJfUExMX1RVQTYwMzRdICAgICAgICAgICAgICAgID0gJmR2Yl9wbGxfdHVhNjAzNCwKIAlbRFZCX1BMTF9UREE2NjVYXSAgICAgICAgICAgICAgICA9ICZkdmJfcGxsX3RkYTY2NXgsCiAJW0RWQl9QTExfVERFRDRdICAgICAgICAgICAgICAgICAgPSAmZHZiX3BsbF90ZGVkNCwKKwlbRFZCX1BMTF9UREVFNF0gICAgICAgICAgICAgICAgICA9ICZkdmJfcGxsX2FscHNfdGRlZTQsCiAJW0RWQl9QTExfVERIVTJdICAgICAgICAgICAgICAgICAgPSAmZHZiX3BsbF90ZGh1MiwKIAlbRFZCX1BMTF9TQU1TVU5HX1RCTVZdICAgICAgICAgICA9ICZkdmJfcGxsX3NhbXN1bmdfdGJtdiwKIAlbRFZCX1BMTF9QSElMSVBTX1NEMTg3OF9UREE4MjYxXSA9ICZkdmJfcGxsX3BoaWxpcHNfc2QxODc4X3RkYTgyNjEsCiAJW0RWQl9QTExfT1BFUkExXSAgICAgICAgICAgICAgICAgPSAmZHZiX3BsbF9vcGVyYTEsCiAJW0RWQl9QTExfU0FNU1VOR19EVE9TNDAzSUgxMDJBXSAgPSAmZHZiX3BsbF9zYW1zdW5nX2R0b3M0MDNpaDEwMmEsCisJW0RWQl9QTExfU0FNU1VOR19URFRDOTI1MURIMF0gICAgPSAmZHZiX3BsbF9zYW1zdW5nX3RkdGM5MjUxZGgwLAorCVtEVkJfUExMX1NBTVNVTkdfVEJEVTE4MTMyXQkgPSAmZHZiX3BsbF9zYW1zdW5nX3RiZHUxODEzMiwKKwlbRFZCX1BMTF9TQU1TVU5HX1RCTVUyNDExMl0gICAgICA9ICZkdmJfcGxsX3NhbXN1bmdfdGJtdTI0MTEyLAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5oCmluZGV4IDA1MjM5ZjUuLjA4Njk2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuaApAQCAtMjMsNiArMjMsMTAgQEAKICNkZWZpbmUgRFZCX1BMTF9QSElMSVBTX1NEMTg3OF9UREE4MjYxIDEyCiAjZGVmaW5lIERWQl9QTExfT1BFUkExICAgICAgICAgICAgICAgICAxMwogI2RlZmluZSBEVkJfUExMX1NBTVNVTkdfRFRPUzQwM0lIMTAyQSAgMTQKKyNkZWZpbmUgRFZCX1BMTF9TQU1TVU5HX1REVEM5MjUxREgwICAgIDE1CisjZGVmaW5lIERWQl9QTExfU0FNU1VOR19UQkRVMTgxMzIgICAgICAxNgorI2RlZmluZSBEVkJfUExMX1NBTVNVTkdfVEJNVTI0MTEyICAgICAgMTcKKyNkZWZpbmUgRFZCX1BMTF9UREVFNAkJICAgICAgIDE4CiAKIC8qKgogICogQXR0YWNoIGEgZHZiLXBsbCB0byB0aGUgc3VwcGxpZWQgZnJvbnRlbmQgc3RydWN0dXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnczhneHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ3M4Z3h4LmMKaW5kZXggZmRlMjc2NC4uZWFiY2FkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnczhneHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdzOGd4eC5jCkBAIC0xLDkgKzEsOSBAQAogLyoKLSAqICAgIFN1cHBvcnQgZm9yIExlZ2VuZCBTaWxpY29uIERNQi1USCBkZW1vZHVsYXRvcgotICogICAgTEdTODkxMywgTEdTOEdMNQorICogICAgU3VwcG9ydCBmb3IgTGVnZW5kIFNpbGljb24gR0IyMDYwMCAoYS5rLmEgRE1CLVRIKSBkZW1vZHVsYXRvcgorICogICAgTEdTODkxMywgTEdTOEdMNSwgTEdTOEc3NQogICogICAgZXhwZXJpbWVudGFsIHN1cHBvcnQgTEdTOEc0MiwgTEdTOEc1MgogICoKLSAqICAgIENvcHlyaWdodCAoQykgMjAwNywyMDA4IERhdmlkIFQuTC4gV29uZyA8ZGF2aWR0bHdvbmdAZ21haWwuY29tPgorICogICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgRGF2aWQgVC5MLiBXb25nIDxkYXZpZHRsd29uZ0BnbWFpbC5jb20+CiAgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDggU2lyaXVzIEludGVybmF0aW9uYWwgKEhvbmcgS29uZykgTGltaXRlZAogICogICAgVGltb3RoeSBMZWUgPHRpbW90aHkubGVlQHNpcml1c2hrLmNvbT4gKGZvciBpbml0aWFsIHdvcmsgb24gTEdTOEdMNSkKICAqCkBAIC00Niw2ICs0Niw0MiBAQAogTU9EVUxFX1BBUk1fREVTQyhmYWtlX3NpZ25hbF9zdHIsICJmYWtlIHNpZ25hbCBzdHJlbmd0aCBmb3IgTEdTODkxMy4iCiAiU2lnbmFsIHN0cmVuZ3RoIGNhbGN1bGF0aW9uIGlzIHNsb3cuKGRlZmF1bHQ6b24pLiIpOwogCitzdGF0aWMgY29uc3QgdTggbGdzOGc3NV9pbml0ZGF0W10gPSB7CisJMHgwMSwgMHgzMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKKwkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAorCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCisJMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKKwkweDAwLCAweDAxLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAorCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCisJMHhFNCwgMHhGNSwgMHhBOCwgMHhGNSwgMHhCOCwgMHhGNSwgMHg4OCwgMHhGNSwKKwkweDg5LCAweEY1LCAweDg3LCAweDc1LCAweEQwLCAweDAwLCAweDExLCAweDUwLAorCTB4MTEsIDB4NTAsIDB4RjQsIDB4RjUsIDB4ODAsIDB4RjUsIDB4OTAsIDB4RjUsCisJMHhBMCwgMHhGNSwgMHhCMCwgMHg3NSwgMHg4MSwgMHgzMCwgMHg4MCwgMHgwMSwKKwkweDMyLCAweDkwLCAweDgwLCAweDEyLCAweDc0LCAweEZGLCAweEYwLCAweDkwLAorCTB4ODAsIDB4MTMsIDB4NzQsIDB4MUYsIDB4RjAsIDB4OTAsIDB4ODAsIDB4MjMsCisJMHg3NCwgMHgwMSwgMHhGMCwgMHg5MCwgMHg4MCwgMHgyMiwgMHhGMCwgMHg5MCwKKwkweDAwLCAweDQ4LCAweDc0LCAweDAwLCAweEYwLCAweDkwLCAweDgwLCAweDRELAorCTB4NzQsIDB4MDUsIDB4RjAsIDB4OTAsIDB4ODAsIDB4MDksIDB4RTAsIDB4NjAsCisJMHgyMSwgMHgxMiwgMHgwMCwgMHhERCwgMHgxNCwgMHg2MCwgMHgxQiwgMHgxMiwKKwkweDAwLCAweERELCAweDE0LCAweDYwLCAweDE1LCAweDEyLCAweDAwLCAweERELAorCTB4MTQsIDB4NjAsIDB4MEYsIDB4MTIsIDB4MDAsIDB4REQsIDB4MTQsIDB4NjAsCisJMHgwOSwgMHgxMiwgMHgwMCwgMHhERCwgMHgxNCwgMHg2MCwgMHgwMywgMHgxMiwKKwkweDAwLCAweERELCAweDkwLCAweDgwLCAweDQyLCAweEUwLCAweDYwLCAweDBCLAorCTB4MTQsIDB4NjAsIDB4MEMsIDB4MTQsIDB4NjAsIDB4MEQsIDB4MTQsIDB4NjAsCisJMHgwRSwgMHgwMSwgMHhCMywgMHg3NCwgMHgwNCwgMHgwMSwgMHhCOSwgMHg3NCwKKwkweDA1LCAweDAxLCAweEI5LCAweDc0LCAweDA3LCAweDAxLCAweEI5LCAweDc0LAorCTB4MEEsIDB4QzAsIDB4RTAsIDB4NzQsIDB4QzgsIDB4MTIsIDB4MDAsIDB4RTIsCisJMHhEMCwgMHhFMCwgMHgxNCwgMHg3MCwgMHhGNCwgMHg5MCwgMHg4MCwgMHgwOSwKKwkweEUwLCAweDcwLCAweEFFLCAweDEyLCAweDAwLCAweEY2LCAweDEyLCAweDAwLAorCTB4RkUsIDB4OTAsIDB4MDAsIDB4NDgsIDB4RTAsIDB4MDQsIDB4RjAsIDB4OTAsCisJMHg4MCwgMHg0RSwgMHhGMCwgMHgwMSwgMHg3MywgMHg5MCwgMHg4MCwgMHgwOCwKKwkweEYwLCAweDIyLCAweEY4LCAweDdBLCAweDBDLCAweDc5LCAweEZELCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RDksCisJMHhGNiwgMHhEQSwgMHhGMiwgMHhEOCwgMHhFRSwgMHgyMiwgMHg5MCwgMHg4MCwKKwkweDY1LCAweEUwLCAweDU0LCAweEZELCAweEYwLCAweDIyLCAweDkwLCAweDgwLAorCTB4NjUsIDB4RTAsIDB4NDQsIDB4QzIsIDB4RjAsIDB4MjIKK307CisKIC8qIExHUzhHWFggaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyAqLwogCiBzdGF0aWMgaW50IGxnczhneHhfd3JpdGVfcmVnKHN0cnVjdCBsZ3M4Z3h4X3N0YXRlICpwcml2LCB1OCByZWcsIHU4IGRhdGEpCkBAIC01NSw3ICs5MSw3IEBACiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMiB9OwogCiAJbXNnLmFkZHIgPSBwcml2LT5jb25maWctPmRlbW9kX2FkZHJlc3M7Ci0JaWYgKHJlZyA+PSAweEMwKQorCWlmIChwcml2LT5jb25maWctPnByb2QgIT0gTEdTOEdYWF9QUk9EX0xHUzhHNzUgJiYgcmVnID49IDB4QzApCiAJCW1zZy5hZGRyICs9IDB4MDI7CiAKIAlpZiAoZGVidWcgPj0gMikKQEAgLTg0LDcgKzEyMCw3IEBACiAJfTsKIAogCWRldl9hZGRyID0gcHJpdi0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOwotCWlmIChyZWcgPj0gMHhDMCkKKwlpZiAocHJpdi0+Y29uZmlnLT5wcm9kICE9IExHUzhHWFhfUFJPRF9MR1M4Rzc1ICYmIHJlZyA+PSAweEMwKQogCQlkZXZfYWRkciArPSAweDAyOwogCW1zZ1sxXS5hZGRyID0gIG1zZ1swXS5hZGRyID0gZGV2X2FkZHI7CiAKQEAgLTExMiwxOSArMTQ4LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgd2FpdF9yZWdfbWFzayhzdHJ1Y3QgbGdzOGd4eF9zdGF0ZSAqcHJpdiwgdTggcmVnLCB1OCBtYXNrLAorCXU4IHZhbCwgdTggZGVsYXksIHU4IHRyaWVzKQoreworCXU4IHQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHJpZXM7IGkrKykgeworCQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIHJlZywgJnQpOworCisJCWlmICgodCAmIG1hc2spID09IHZhbCkKKwkJCXJldHVybiAwOworCQltc2xlZXAoZGVsYXkpOworCX0KKworCXJldHVybiAxOworfQorCiBzdGF0aWMgaW50IGxnczhneHhfc2V0X2FkX21vZGUoc3RydWN0IGxnczhneHhfc3RhdGUgKnByaXYpCiB7CiAJY29uc3Qgc3RydWN0IGxnczhneHhfY29uZmlnICpjb25maWcgPSBwcml2LT5jb25maWc7CiAJdTggaWZfY29uZjsKIAotCWlmX2NvbmYgPSAweDEwOyAvKiBBR0Mgb3V0cHV0IG9uOyAqLworCWlmX2NvbmYgPSAweDEwOyAvKiBBR0Mgb3V0cHV0IG9uLCBSRl9BR0Mgb3V0cHV0IG9mZjsgKi8KIAogCWlmX2NvbmYgfD0KIAkJKChjb25maWctPmV4dF9hZGMpID8gMHg4MCA6IDB4MDApIHwKIAkJKChjb25maWctPmlmX25lZ19jZW50ZXIpID8gMHgwNCA6IDB4MDApIHwKIAkJKChjb25maWctPmlmX2ZyZXEgPT0gMCkgPyAweDA4IDogMHgwMCkgfCAvKiBCYXNlYmFuZCAqLwotCQkoKGNvbmZpZy0+ZXh0X2FkYyAmJiBjb25maWctPmFkY19zaWduZWQpID8gMHgwMiA6IDB4MDApIHwKLQkJKChjb25maWctPmV4dF9hZGMgJiYgY29uZmlnLT5pZl9uZWdfZWRnZSkgPyAweDAxIDogMHgwMCk7CisJCSgoY29uZmlnLT5hZGNfc2lnbmVkKSA/IDB4MDIgOiAweDAwKSB8CisJCSgoY29uZmlnLT5pZl9uZWdfZWRnZSkgPyAweDAxIDogMHgwMCk7CiAKIAlpZiAoY29uZmlnLT5leHRfYWRjICYmCiAJCShjb25maWctPnByb2QgPT0gTEdTOEdYWF9QUk9EX0xHUzhHNTIpKSB7CkBAIC0xNTcsMzkgKzIxMCw4MiBAQAogCX0KIAlkcHJpbnRrKCJBRkNfSU5JVF9GUkVRID0gMHglMDhYXG4iLCB2MzIpOwogCi0JbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgwOSwgMHhGRiAmICh2MzIpKTsKLQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDBBLCAweEZGICYgKHYzMiA+PiA4KSk7Ci0JbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgwQiwgMHhGRiAmICh2MzIgPj4gMTYpKTsKLQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDBDLCAweEZGICYgKHYzMiA+PiAyNCkpOworCWlmIChwcml2LT5jb25maWctPnByb2QgPT0gTEdTOEdYWF9QUk9EX0xHUzhHNzUpIHsKKwkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgwOCwgMHhGRiAmICh2MzIpKTsKKwkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgwOSwgMHhGRiAmICh2MzIgPj4gOCkpOworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDBBLCAweEZGICYgKHYzMiA+PiAxNikpOworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDBCLCAweEZGICYgKHYzMiA+PiAyNCkpOworCX0gZWxzZSB7CisJCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4MDksIDB4RkYgJiAodjMyKSk7CisJCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4MEEsIDB4RkYgJiAodjMyID4+IDgpKTsKKwkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgwQiwgMHhGRiAmICh2MzIgPj4gMTYpKTsKKwkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgwQywgMHhGRiAmICh2MzIgPj4gMjQpKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBsZ3M4Z3h4X2dldF9hZmNfcGhhc2Uoc3RydWN0IGxnczhneHhfc3RhdGUgKnByaXYpCit7CisJdTY0IHZhbDsKKwl1MzIgdjMyID0gMDsKKwl1OCByZWdfYWRkciwgdDsKKwlpbnQgaTsKKworCWlmIChwcml2LT5jb25maWctPnByb2QgPT0gTEdTOEdYWF9QUk9EX0xHUzhHNzUpCisJCXJlZ19hZGRyID0gMHgyMzsKKwllbHNlCisJCXJlZ19hZGRyID0gMHg0ODsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJbGdzOGd4eF9yZWFkX3JlZyhwcml2LCByZWdfYWRkciwgJnQpOworCQl2MzIgPDw9IDg7CisJCXYzMiB8PSB0OworCQlyZWdfYWRkci0tOworCX0KKworCXZhbCA9IHYzMjsKKwl2YWwgKj0gcHJpdi0+Y29uZmlnLT5pZl9jbGtfZnJlcTsKKwl2YWwgLz0gKHU2NCkxIDw8IDMyOworCWRwcmludGsoIkFGQyA9ICV1IGtIelxuIiwgKHUzMil2YWwpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGxnczhneHhfc2V0X21vZGVfYXV0byhzdHJ1Y3QgbGdzOGd4eF9zdGF0ZSAqcHJpdikKIHsKIAl1OCB0OworCXU4IHByb2QgPSBwcml2LT5jb25maWctPnByb2Q7CiAKLQlpZiAocHJpdi0+Y29uZmlnLT5wcm9kID09IExHUzhHWFhfUFJPRF9MR1M4OTEzKQorCWlmIChwcm9kID09IExHUzhHWFhfUFJPRF9MR1M4OTEzKQogCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweEM2LCAweDAxKTsKIAotCWxnczhneHhfcmVhZF9yZWcocHJpdiwgMHg3RSwgJnQpOwotCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4N0UsIHQgfCAweDAxKTsKKwlpZiAocHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTOEc3NSkgeworCQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIDB4MEMsICZ0KTsKKwkJdCAmPSAofjB4MDQpOworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDBDLCB0IHwgMHg4MCk7CisJCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4MzksIDB4MDApOworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDNELCAweDA0KTsKKwl9IGVsc2UgaWYgKHByb2QgPT0gTEdTOEdYWF9QUk9EX0xHUzg5MTMgfHwKKwkJcHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTOEdMNSB8fAorCQlwcm9kID09IExHUzhHWFhfUFJPRF9MR1M4RzQyIHx8CisJCXByb2QgPT0gTEdTOEdYWF9QUk9EX0xHUzhHNTIgfHwKKwkJcHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTOEc1NCkgeworCQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIDB4N0UsICZ0KTsKKwkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHg3RSwgdCB8IDB4MDEpOwogCi0JLyogY2xlYXIgRkVDIHNlbGYgcmVzZXQgKi8KLQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIDB4QzUsICZ0KTsKLQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweEM1LCB0ICYgMHhFMCk7CisJCS8qIGNsZWFyIEZFQyBzZWxmIHJlc2V0ICovCisJCWxnczhneHhfcmVhZF9yZWcocHJpdiwgMHhDNSwgJnQpOworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweEM1LCB0ICYgMHhFMCk7CisJfQogCi0JaWYgKHByaXYtPmNvbmZpZy0+cHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTODkxMykgeworCWlmIChwcm9kID09IExHUzhHWFhfUFJPRF9MR1M4OTEzKSB7CiAJCS8qIEZFQyBhdXRvIGRldGVjdCAqLwogCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweEMxLCAweDAzKTsKIAogCQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIDB4N0MsICZ0KTsKIAkJdCA9ICh0ICYgMHg4QykgfCAweDAzOwogCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDdDLCB0KTsKLQl9CiAKLQotCWlmIChwcml2LT5jb25maWctPnByb2QgPT0gTEdTOEdYWF9QUk9EX0xHUzg5MTMpIHsKIAkJLyogQkVSIHRlc3QgbW9kZSAqLwogCQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIDB4QzMsICZ0KTsKIAkJdCA9ICh0ICYgMHhFRikgfCAgMHgxMDsKQEAgLTIwNyw2ICszMDMsMzIgQEAKIAlpbnQgcmV0ID0gMDsKIAl1OCB0OwogCisJaWYgKHByaXYtPmNvbmZpZy0+cHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTOEc3NSkgeworCQl1OCB0MjsKKwkJbGdzOGd4eF9yZWFkX3JlZyhwcml2LCAweDBDLCAmdCk7CisJCXQgJj0gKH4weDgwKTsKKwkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgwQywgdCk7CisKKwkJbGdzOGd4eF9yZWFkX3JlZyhwcml2LCAweDBDLCAmdCk7CisJCWxnczhneHhfcmVhZF9yZWcocHJpdiwgMHgxOSwgJnQyKTsKKworCQlpZiAoKCh0JjB4MDMpID09IDB4MDEpICYmICh0MiYweDAxKSkgeworCQkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHg2RSwgMHgwNSk7CisJCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDM5LCAweDAyKTsKKwkJCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4MzksIDB4MDMpOworCQkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgzRCwgMHgwNSk7CisJCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDNFLCAweDI4KTsKKwkJCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4NTMsIDB4ODApOworCQl9IGVsc2UgeworCQkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHg2RSwgMHgzRik7CisJCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDM5LCAweDAwKTsKKwkJCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4M0QsIDB4MDQpOworCQl9CisKKwkJbGdzOGd4eF9zb2Z0X3Jlc2V0KHByaXYpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKiB0dXJuIG9mZiBhdXRvLWRldGVjdDsgbWFudWFsIHNldHRpbmdzICovCiAJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHg3RSwgMCk7CiAJaWYgKHByaXYtPmNvbmZpZy0+cHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTODkxMykKQEAgLTIyNiwxMSArMzQ4LDM5IEBACiAJaW50IHJldCA9IDA7CiAJdTggdDsKIAotCXJldCA9IGxnczhneHhfcmVhZF9yZWcocHJpdiwgMHg0QiwgJnQpOworCWlmIChwcml2LT5jb25maWctPnByb2QgPT0gTEdTOEdYWF9QUk9EX0xHUzhHNzUpCisJCXJldCA9IGxnczhneHhfcmVhZF9yZWcocHJpdiwgMHgxMywgJnQpOworCWVsc2UKKwkJcmV0ID0gbGdzOGd4eF9yZWFkX3JlZyhwcml2LCAweDRCLCAmdCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JKmxvY2tlZCA9ICgodCAmIDB4QzApID09IDB4QzApID8gMSA6IDA7CisJaWYgKHByaXYtPmNvbmZpZy0+cHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTOEc3NSkKKwkJKmxvY2tlZCA9ICgodCAmIDB4ODApID09IDB4ODApID8gMSA6IDA7CisJZWxzZQorCQkqbG9ja2VkID0gKCh0ICYgMHhDMCkgPT0gMHhDMCkgPyAxIDogMDsKKwlyZXR1cm4gMDsKK30KKworLyogV2FpdCBmb3IgQ29kZSBBY3F1aXNpdGlvbiBMb2NrICovCitzdGF0aWMgaW50IGxnczhneHhfd2FpdF9jYV9sb2NrKHN0cnVjdCBsZ3M4Z3h4X3N0YXRlICpwcml2LCB1OCAqbG9ja2VkKQoreworCWludCByZXQgPSAwOworCXU4IHJlZywgbWFzaywgdmFsOworCisJaWYgKHByaXYtPmNvbmZpZy0+cHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTOEc3NSkgeworCQlyZWcgPSAweDEzOworCQltYXNrID0gMHg4MDsKKwkJdmFsID0gMHg4MDsKKwl9IGVsc2UgeworCQlyZWcgPSAweDRCOworCQltYXNrID0gMHhDMDsKKwkJdmFsID0gMHhDMDsKKwl9CisKKwlyZXQgPSB3YWl0X3JlZ19tYXNrKHByaXYsIHJlZywgbWFzaywgdmFsLCA1MCwgNDApOworCSpsb2NrZWQgPSAocmV0ID09IDApID8gMSA6IDA7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM4LDIxICszODgsMzAgQEAKIAkJCQkJICB1OCAqZmluaXNoZWQpCiB7CiAJaW50IHJldCA9IDA7Ci0JdTggdDsKKwl1OCByZWcsIG1hc2ssIHZhbDsKIAotCXJldCA9IGxnczhneHhfcmVhZF9yZWcocHJpdiwgMHhBNCwgJnQpOwotCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuIHJldDsKKwlpZiAocHJpdi0+Y29uZmlnLT5wcm9kID09IExHUzhHWFhfUFJPRF9MR1M4Rzc1KSB7CisJCXJlZyA9IDB4MWY7CisJCW1hc2sgPSAweEMwOworCQl2YWwgPSAweDgwOworCX0gZWxzZSB7CisJCXJlZyA9IDB4QTQ7CisJCW1hc2sgPSAweDAzOworCQl2YWwgPSAweDAxOworCX0KIAotCSpmaW5pc2hlZCA9ICgodCAmIDB4MykgPT0gMHgxKSA/IDEgOiAwOworCXJldCA9IHdhaXRfcmVnX21hc2socHJpdiwgcmVnLCBtYXNrLCB2YWwsIDEwLCAyMCk7CisJKmZpbmlzaGVkID0gKHJldCA9PSAwKSA/IDEgOiAwOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbGdzOGd4eF9hdXRvbG9ja19naShzdHJ1Y3QgbGdzOGd4eF9zdGF0ZSAqcHJpdiwgdTggZ2ksIHU4ICpsb2NrZWQpCitzdGF0aWMgaW50IGxnczhneHhfYXV0b2xvY2tfZ2koc3RydWN0IGxnczhneHhfc3RhdGUgKnByaXYsIHU4IGdpLCB1OCBjcG4sCisJdTggKmxvY2tlZCkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCXU4IGFkX2ZpbmkgPSAwOworCXU4IHQxLCB0MjsKIAogCWlmIChnaSA9PSBHSV85NDUpCiAJCWRwcmludGsoInRyeSBHSSA5NDVcbiIpOwpAQCAtMjYwLDE3ICs0MTksMjkgQEAKIAkJZHByaW50aygidHJ5IEdJIDU5NVxuIik7CiAJZWxzZSBpZiAoZ2kgPT0gR0lfNDIwKQogCQlkcHJpbnRrKCJ0cnkgR0kgNDIwXG4iKTsKLQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDA0LCBnaSk7CisJaWYgKHByaXYtPmNvbmZpZy0+cHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTOEc3NSkgeworCQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIDB4MEMsICZ0MSk7CisJCWxnczhneHhfcmVhZF9yZWcocHJpdiwgMHgxOCwgJnQyKTsKKwkJdDEgJj0gfihHSV9NQVNLKTsKKwkJdDEgfD0gZ2k7CisJCXQyICY9IDB4RkU7CisJCXQyIHw9IGNwbiA/IDB4MDEgOiAweDAwOworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDBDLCB0MSk7CisJCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4MTgsIHQyKTsKKwl9IGVsc2UgeworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDA0LCBnaSk7CisJfQogCWxnczhneHhfc29mdF9yZXNldChwcml2KTsKLQltc2xlZXAoNTApOworCWVyciA9IGxnczhneHhfd2FpdF9jYV9sb2NrKHByaXYsIGxvY2tlZCk7CisJaWYgKGVyciB8fCAhKCpsb2NrZWQpKQorCQlyZXR1cm4gZXJyOwogCWVyciA9IGxnczhneHhfaXNfYXV0b2RldGVjdF9maW5pc2hlZChwcml2LCAmYWRfZmluaSk7CiAJaWYgKGVyciAhPSAwKQogCQlyZXR1cm4gZXJyOwogCWlmIChhZF9maW5pKSB7Ci0JCWVyciA9IGxnczhneHhfaXNfbG9ja2VkKHByaXYsIGxvY2tlZCk7Ci0JCWlmIChlcnIgIT0gMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCQlkcHJpbnRrKCJhdXRvIGRldGVjdCBmaW5pc2hlZFxuIik7CisJfSBlbHNlCisJCSpsb2NrZWQgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODUsMTMgKzQ1NiwxOCBAQAogCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlsZ3M4Z3h4X3NldF9tb2RlX2F1dG8ocHJpdik7Ci0JLyogR3VhcmQgSW50ZXJ2YWwgKi8KLQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDAzLCAwMCk7CisJaWYgKHByaXYtPmNvbmZpZy0+cHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTOEc3NSkgeworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDY3LCAweEFBKTsKKwkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHg2RSwgMHgzRik7CisJfSBlbHNlIHsKKwkJLyogR3VhcmQgSW50ZXJ2YWwgKi8KKwkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgwMywgMDApOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgewogCQkJdG1wX2dpID0gR0lfOTQ1OwotCQkJZXJyID0gbGdzOGd4eF9hdXRvbG9ja19naShwcml2LCBHSV85NDUsICZsb2NrZWQpOworCQkJZXJyID0gbGdzOGd4eF9hdXRvbG9ja19naShwcml2LCBHSV85NDUsIGosICZsb2NrZWQpOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIG91dDsKIAkJCWlmIChsb2NrZWQpCkBAIC0yOTksMTQgKzQ3NSwxNCBAQAogCQl9CiAJCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKIAkJCXRtcF9naSA9IEdJXzQyMDsKLQkJCWVyciA9IGxnczhneHhfYXV0b2xvY2tfZ2kocHJpdiwgR0lfNDIwLCAmbG9ja2VkKTsKKwkJCWVyciA9IGxnczhneHhfYXV0b2xvY2tfZ2kocHJpdiwgR0lfNDIwLCBqLCAmbG9ja2VkKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXQ7CiAJCQlpZiAobG9ja2VkKQogCQkJCWdvdG8gbG9ja2VkOwogCQl9CiAJCXRtcF9naSA9IEdJXzU5NTsKLQkJZXJyID0gbGdzOGd4eF9hdXRvbG9ja19naShwcml2LCBHSV81OTUsICZsb2NrZWQpOworCQllcnIgPSBsZ3M4Z3h4X2F1dG9sb2NrX2dpKHByaXYsIEdJXzU5NSwgMSwgJmxvY2tlZCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAkJaWYgKGxvY2tlZCkKQEAgLTMxNyw4ICs0OTMsMTMgQEAKIAlpZiAoKGVyciA9PSAwKSAmJiAobG9ja2VkID09IDEpKSB7CiAJCXU4IHQ7CiAKLQkJbGdzOGd4eF9yZWFkX3JlZyhwcml2LCAweEEyLCAmdCk7Ci0JCSpkZXRlY3RlZF9wYXJhbSA9IHQ7CisJCWlmIChwcml2LT5jb25maWctPnByb2QgIT0gTEdTOEdYWF9QUk9EX0xHUzhHNzUpIHsKKwkJCWxnczhneHhfcmVhZF9yZWcocHJpdiwgMHhBMiwgJnQpOworCQkJKmRldGVjdGVkX3BhcmFtID0gdDsKKwkJfSBlbHNlIHsKKwkJCWxnczhneHhfcmVhZF9yZWcocHJpdiwgMHgxRiwgJnQpOworCQkJKmRldGVjdGVkX3BhcmFtID0gdCAmIDB4M0Y7CisJCX0KIAogCQlpZiAodG1wX2dpID09IEdJXzk0NSkKIAkJCWRwcmludGsoIkdJIDk0NSBsb2NrZWRcbiIpOwpAQCAtMzQ1LDE4ICs1MjYsMjggQEAKIAogCWlmIChlcnIgIT0gMCkgewogCQlkcHJpbnRrKCJsZ3M4Z3h4X2F1dG9fZGV0ZWN0IGZhaWxlZFxuIik7Ci0JfQorCX0gZWxzZQorCQlkcHJpbnRrKCJkZXRlY3RlZCBwYXJhbSA9IDB4JTAyWFxuIiwgZGV0ZWN0ZWRfcGFyYW0pOwogCiAJLyogQXBwbHkgZGV0ZWN0ZWQgcGFyYW1ldGVycyAqLwogCWlmIChwcml2LT5jb25maWctPnByb2QgPT0gTEdTOEdYWF9QUk9EX0xHUzg5MTMpIHsKIAkJdTggaW50ZXJfbGVhdmVfbGVuID0gZGV0ZWN0ZWRfcGFyYW0gJiBUSU1fTUFTSyA7Ci0JCWludGVyX2xlYXZlX2xlbiA9IChpbnRlcl9sZWF2ZV9sZW4gPT0gVElNX0xPTkcpID8gMHg2MCA6IDB4NDA7CisJCS8qIEZpeCA4OTEzIHRpbWUgaW50ZXJsZWF2ZXIgZGV0ZWN0aW9uIGJ1ZyAqLworCQlpbnRlcl9sZWF2ZV9sZW4gPSAoaW50ZXJfbGVhdmVfbGVuID09IFRJTV9NSURETEUpID8gMHg2MCA6IDB4NDA7CiAJCWRldGVjdGVkX3BhcmFtICY9IENGX01BU0sgfCBTQ19NQVNLICB8IExHU19GRUNfTUFTSzsKIAkJZGV0ZWN0ZWRfcGFyYW0gfD0gaW50ZXJfbGVhdmVfbGVuOwogCX0KLQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDdELCBkZXRlY3RlZF9wYXJhbSk7Ci0JaWYgKHByaXYtPmNvbmZpZy0+cHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTODkxMykKLQkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHhDMCwgZGV0ZWN0ZWRfcGFyYW0pOworCWlmIChwcml2LT5jb25maWctPnByb2QgPT0gTEdTOEdYWF9QUk9EX0xHUzhHNzUpIHsKKwkJdTggdDsKKwkJbGdzOGd4eF9yZWFkX3JlZyhwcml2LCAweDE5LCAmdCk7CisJCXQgJj0gMHg4MTsKKwkJdCB8PSBkZXRlY3RlZF9wYXJhbSA8PCAxOworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDE5LCB0KTsKKwl9IGVsc2UgeworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDdELCBkZXRlY3RlZF9wYXJhbSk7CisJCWlmIChwcml2LT5jb25maWctPnByb2QgPT0gTEdTOEdYWF9QUk9EX0xHUzg5MTMpCisJCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweEMwLCBkZXRlY3RlZF9wYXJhbSk7CisJfQogCS8qIGxnczhneHhfc29mdF9yZXNldChwcml2KTsgKi8KIAogCS8qIEVudGVyIG1hbnVhbCBtb2RlICovCkBAIC0zNzgsOSArNTY5LDEwIEBACiAJdTggc2VyaWFsLCB1OCBjbGtfcG9sLCB1OCBjbGtfZ2F0ZWQpCiB7CiAJaW50IHJldCA9IDA7Ci0JdTggdDsKKwl1OCB0LCByZWdfYWRkcjsKIAotCXJldCA9IGxnczhneHhfcmVhZF9yZWcocHJpdiwgMHhDMiwgJnQpOworCXJlZ19hZGRyID0gKHByaXYtPmNvbmZpZy0+cHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTOEc3NSkgPyAweDMwIDogMHhDMjsKKwlyZXQgPSBsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIHJlZ19hZGRyLCAmdCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0zODksMTMgKzU4MSwyOSBAQAogCXQgfD0gY2xrX3BvbCA/IFRTX0NMS19JTlZFUlRFRCA6IFRTX0NMS19OT1JNQUw7CiAJdCB8PSBjbGtfZ2F0ZWQgPyBUU19DTEtfR0FURUQgOiBUU19DTEtfRlJFRVJVTjsKIAotCXJldCA9IGxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4QzIsIHQpOworCXJldCA9IGxnczhneHhfd3JpdGVfcmVnKHByaXYsIHJlZ19hZGRyLCB0KTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKIAlyZXR1cm4gMDsKIH0KIAorLyogQS9EIGlucHV0IHBlYWstdG8tcGVhayB2b2x0YWdlIHJhbmdlICovCitzdGF0aWMgaW50IGxnczhnNzVfc2V0X2FkY192cHAoc3RydWN0IGxnczhneHhfc3RhdGUgKnByaXYsCisJdTggc2VsKQoreworCXU4IHIyNiA9IDB4NzMsIHIyNyA9IDB4OTA7CisKKwlpZiAocHJpdi0+Y29uZmlnLT5wcm9kICE9IExHUzhHWFhfUFJPRF9MR1M4Rzc1KQorCQlyZXR1cm4gMDsKKworCXIyNiB8PSAoc2VsICYgMHgwMSkgPDwgNzsKKwlyMjcgfD0gKHNlbCAmIDB4MDIpID4+IDE7CisJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgyNiwgcjI2KTsKKwlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDI3LCByMjcpOworCisJcmV0dXJuIDA7Cit9CiAKIC8qIExHUzg5MTMgZGVtb2QgZnJvbnRlbmQgZnVuY3Rpb25zICovCiAKQEAgLTQxNyw2ICs2MjUsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBsZ3M4Zzc1X2luaXRfZGF0YShzdHJ1Y3QgbGdzOGd4eF9zdGF0ZSAqcHJpdikKK3sKKwljb25zdCB1OCAqcCA9IGxnczhnNzVfaW5pdGRhdDsKKwlpbnQgaTsKKworCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4QzYsIDB4NDApOworCisJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgzRCwgMHgwNCk7CisJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgzOSwgMHgwMCk7CisKKwlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDNBLCAweDAwKTsKKwlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDM4LCAweDAwKTsKKwlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDNCLCAweDAwKTsKKwlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDM4LCAweDAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YobGdzOGc3NV9pbml0ZGF0KTsgaSsrKSB7CisJCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4MzgsIDB4MDApOworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDNBLCAodTgpKGkmMHhmZikpOworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDNCLCAodTgpKGk+PjgpKTsKKwkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgzQywgKnApOworCQlwKys7CisJfQorCisJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHgzOCwgMHgwMCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBsZ3M4Z3h4X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGxnczhneHhfc3RhdGUgKnByaXYgPQpAQCAtNDI5LDYgKzY2NSw5IEBACiAJbGdzOGd4eF9yZWFkX3JlZyhwcml2LCAwLCAmZGF0YSk7CiAJZHByaW50aygicmVnIDAgPSAweCUwMlhcbiIsIGRhdGEpOwogCisJaWYgKGNvbmZpZy0+cHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTOEc3NSkKKwkJbGdzOGc3NV9zZXRfYWRjX3ZwcChwcml2LCBjb25maWctPmFkY192cHApOworCiAJLyogU2V0dXAgTVBFRyBvdXRwdXQgZm9ybWF0ICovCiAJZXJyID0gbGdzOGd4eF9zZXRfbXBlZ19tb2RlKHByaXYsIGNvbmZpZy0+c2VyaWFsX3RzLAogCQkJCSAgICBjb25maWctPnRzX2Nsa19wb2wsCkBAIC00MzksOCArNjc4LDcgQEAKIAlpZiAoY29uZmlnLT5wcm9kID09IExHUzhHWFhfUFJPRF9MR1M4OTEzKQogCQlsZ3M4OTEzX2luaXQocHJpdik7CiAJbGdzOGd4eF9zZXRfaWZfZnJlcShwcml2LCBwcml2LT5jb25maWctPmlmX2ZyZXEpOwotCWlmIChjb25maWctPnByb2QgIT0gTEdTOEdYWF9QUk9EX0xHUzg5MTMpCi0JCWxnczhneHhfc2V0X2FkX21vZGUocHJpdik7CisJbGdzOGd4eF9zZXRfYWRfbW9kZShwcml2KTsKIAogCXJldHVybiAwOwogfQpAQCAtNDg5LDkgKzcyNyw2IEBACiBzdGF0aWMgaW50IGxnczhneHhfZ2V0X2ZlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlX3BhcmFtcykKIHsKLQlzdHJ1Y3QgbGdzOGd4eF9zdGF0ZSAqcHJpdiA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCXU4IHQ7Ci0KIAlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOwogCiAJLyogVE9ETzogZ2V0IHJlYWwgcmVhZGluZ3MgZnJvbSBkZXZpY2UgKi8KQEAgLTUwMSwyOSArNzM2LDEwIEBACiAJLyogYmFuZHdpZHRoICovCiAJZmVfcGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoID0gQkFORFdJRFRIXzhfTUhaOwogCi0KLQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIDB4N0QsICZ0KTsKIAlmZV9wYXJhbXMtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPSBGRUNfQVVUTzsKIAlmZV9wYXJhbXMtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfQVVUTzsKIAotCS8qIGNvbnN0ZWxsYXRpb24gKi8KLQlzd2l0Y2ggKHQgJiBTQ19NQVNLKSB7Ci0JY2FzZSBTQ19RQU02NDoKLQkJZmVfcGFyYW1zLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IFFBTV82NDsKLQkJYnJlYWs7Ci0JY2FzZSBTQ19RQU0zMjoKLQkJZmVfcGFyYW1zLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IFFBTV8zMjsKLQkJYnJlYWs7Ci0JY2FzZSBTQ19RQU0xNjoKLQkJZmVfcGFyYW1zLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IFFBTV8xNjsKLQkJYnJlYWs7Ci0JY2FzZSBTQ19RQU00OgotCWNhc2UgU0NfUUFNNE5SOgotCQlmZV9wYXJhbXMtPnUub2ZkbS5jb25zdGVsbGF0aW9uID0gUVBTSzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZmVfcGFyYW1zLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IFFBTV82NDsKLQl9CisJZmVfcGFyYW1zLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IFFBTV9BVVRPOwogCiAJLyogdHJhbnNtaXNzaW9uIG1vZGUgKi8KIAlmZV9wYXJhbXMtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFX0FVVE87CkBAIC01NTIsOSArNzY4LDE5IEBACiB7CiAJc3RydWN0IGxnczhneHhfc3RhdGUgKnByaXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlzOCByZXQ7Ci0JdTggdDsKKwl1OCB0LCBsb2NrZWQgPSAwOwogCiAJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKwkqZmVfc3RhdHVzID0gMDsKKworCWxnczhneHhfZ2V0X2FmY19waGFzZShwcml2KTsKKwlsZ3M4Z3h4X2lzX2xvY2tlZChwcml2LCAmbG9ja2VkKTsKKwlpZiAocHJpdi0+Y29uZmlnLT5wcm9kID09IExHUzhHWFhfUFJPRF9MR1M4Rzc1KSB7CisJCWlmIChsb2NrZWQpCisJCQkqZmVfc3RhdHVzIHw9IEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfQ0FSUklFUiB8CisJCQkJRkVfSEFTX1ZJVEVSQkkgfCBGRV9IQVNfU1lOQyB8IEZFX0hBU19MT0NLOworCQlyZXR1cm4gMDsKKwl9CiAKIAlyZXQgPSBsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIDB4NEIsICZ0KTsKIAlpZiAocmV0ICE9IDApCkBAIC02NTgsMTIgKzg4NCwzMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGxnczhnNzVfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGxnczhneHhfc3RhdGUgKnByaXYsIHUxNiAqc2lnbmFsKQoreworCXU4IHQ7CisJczE2IHYgPSAwOworCisJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKworCWxnczhneHhfcmVhZF9yZWcocHJpdiwgMHhCMSwgJnQpOworCXYgfD0gdDsKKwl2IDw8PSA4OworCWxnczhneHhfcmVhZF9yZWcocHJpdiwgMHhCMCwgJnQpOworCXYgfD0gdDsKKworCSpzaWduYWwgPSB2OworCWRwcmludGsoIiVzOiBzaWduYWw9MHglMDJYXG4iLCBfX2Z1bmNfXywgKnNpZ25hbCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBsZ3M4Z3h4X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNpZ25hbCkKIHsKIAlzdHJ1Y3QgbGdzOGd4eF9zdGF0ZSAqcHJpdiA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJaWYgKHByaXYtPmNvbmZpZy0+cHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTODkxMykKIAkJcmV0dXJuIGxnczg5MTNfcmVhZF9zaWduYWxfc3RyZW5ndGgocHJpdiwgc2lnbmFsKTsKKwllbHNlIGlmIChwcml2LT5jb25maWctPnByb2QgPT0gTEdTOEdYWF9QUk9EX0xHUzhHNzUpCisJCXJldHVybiBsZ3M4Zzc1X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHByaXYsIHNpZ25hbCk7CiAJZWxzZQogCQlyZXR1cm4gbGdzOGd4eF9yZWFkX3NpZ25hbF9hZ2MocHJpdiwgc2lnbmFsKTsKIH0KQEAgLTY3NCw3ICs5MjEsMTAgQEAKIAl1OCB0OwogCSpzbnIgPSAwOwogCi0JbGdzOGd4eF9yZWFkX3JlZyhwcml2LCAweDk1LCAmdCk7CisJaWYgKHByaXYtPmNvbmZpZy0+cHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTOEc3NSkKKwkJbGdzOGd4eF9yZWFkX3JlZyhwcml2LCAweDM0LCAmdCk7CisJZWxzZQorCQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIDB4OTUsICZ0KTsKIAlkcHJpbnRrKCJBVkcgTm9pc2U9MHglMDJYXG4iLCB0KTsKIAkqc25yID0gMjU2IC0gdDsKIAkqc25yIDw8PSA4OwpAQCAtNjkwLDMxICs5NDAsNjggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcGFja2V0X2NvdW50ZXJfc3RhcnQoc3RydWN0IGxnczhneHhfc3RhdGUgKnByaXYpCit7CisJdTggb3JpZywgdDsKKworCWlmIChwcml2LT5jb25maWctPnByb2QgPT0gTEdTOEdYWF9QUk9EX0xHUzhHNzUpIHsKKwkJbGdzOGd4eF9yZWFkX3JlZyhwcml2LCAweDMwLCAmb3JpZyk7CisJCW9yaWcgJj0gMHhFNzsKKwkJdCA9IG9yaWcgfCAweDEwOworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDMwLCB0KTsKKwkJdCA9IG9yaWcgfCAweDE4OworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDMwLCB0KTsKKwkJdCA9IG9yaWcgfCAweDEwOworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDMwLCB0KTsKKwl9IGVsc2UgeworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweEM2LCAweDAxKTsKKwkJbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHhDNiwgMHg0MSk7CisJCWxnczhneHhfd3JpdGVfcmVnKHByaXYsIDB4QzYsIDB4MDEpOworCX0KK30KKworc3RhdGljIHZvaWQgcGFja2V0X2NvdW50ZXJfc3RvcChzdHJ1Y3QgbGdzOGd4eF9zdGF0ZSAqcHJpdikKK3sKKwl1OCB0OworCisJaWYgKHByaXYtPmNvbmZpZy0+cHJvZCA9PSBMR1M4R1hYX1BST0RfTEdTOEc3NSkgeworCQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIDB4MzAsICZ0KTsKKwkJdCAmPSAweEU3OworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweDMwLCB0KTsKKwl9IGVsc2UgeworCQlsZ3M4Z3h4X3dyaXRlX3JlZyhwcml2LCAweEM2LCAweDgxKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgbGdzOGd4eF9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCiB7CiAJc3RydWN0IGxnczhneHhfc3RhdGUgKnByaXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQl1OCByMCwgcjEsIHIyLCByMzsKLQl1MzIgdG90YWxfY250LCBlcnJfY250OworCXU4IHJlZ19lcnIsIHJlZ190b3RhbCwgdDsKKwl1MzIgdG90YWxfY250ID0gMCwgZXJyX2NudCA9IDA7CisJaW50IGk7CiAKIAlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOwogCi0JbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHhjNiwgMHgwMSk7Ci0JbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHhjNiwgMHg0MSk7Ci0JbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHhjNiwgMHgwMSk7Ci0KKwlwYWNrZXRfY291bnRlcl9zdGFydChwcml2KTsKIAltc2xlZXAoMjAwKTsKKwlwYWNrZXRfY291bnRlcl9zdG9wKHByaXYpOwogCi0JbGdzOGd4eF93cml0ZV9yZWcocHJpdiwgMHhjNiwgMHg4MSk7Ci0JbGdzOGd4eF9yZWFkX3JlZyhwcml2LCAweGQwLCAmcjApOwotCWxnczhneHhfcmVhZF9yZWcocHJpdiwgMHhkMSwgJnIxKTsKLQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIDB4ZDIsICZyMik7Ci0JbGdzOGd4eF9yZWFkX3JlZyhwcml2LCAweGQzLCAmcjMpOwotCXRvdGFsX2NudCA9IChyMyA8PCAyNCkgfCAocjIgPDwgMTYpIHwgKHIxIDw8IDgpIHwgKHIwKTsKLQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIDB4ZDQsICZyMCk7Ci0JbGdzOGd4eF9yZWFkX3JlZyhwcml2LCAweGQ1LCAmcjEpOwotCWxnczhneHhfcmVhZF9yZWcocHJpdiwgMHhkNiwgJnIyKTsKLQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIDB4ZDcsICZyMyk7Ci0JZXJyX2NudCA9IChyMyA8PCAyNCkgfCAocjIgPDwgMTYpIHwgKHIxIDw8IDgpIHwgKHIwKTsKKwlpZiAocHJpdi0+Y29uZmlnLT5wcm9kID09IExHUzhHWFhfUFJPRF9MR1M4Rzc1KSB7CisJCXJlZ190b3RhbCA9IDB4Mjg7IHJlZ19lcnIgPSAweDJDOworCX0gZWxzZSB7CisJCXJlZ190b3RhbCA9IDB4RDA7IHJlZ19lcnIgPSAweEQ0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJdG90YWxfY250IDw8PSA4OworCQlsZ3M4Z3h4X3JlYWRfcmVnKHByaXYsIHJlZ190b3RhbCszLWksICZ0KTsKKwkJdG90YWxfY250IHw9IHQ7CisJfQorCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJZXJyX2NudCA8PD0gODsKKwkJbGdzOGd4eF9yZWFkX3JlZyhwcml2LCByZWdfZXJyKzMtaSwgJnQpOworCQllcnJfY250IHw9IHQ7CisJfQogCWRwcmludGsoImVycm9yPSVkIHRvdGFsPSVkXG4iLCBlcnJfY250LCB0b3RhbF9jbnQpOwogCiAJaWYgKHRvdGFsX2NudCA9PSAwKQpAQCAtODAxLDYgKzEwODgsOSBAQAogCSAgICAgICBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKIAlwcml2LT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gcHJpdjsKIAorCWlmIChjb25maWctPnByb2QgPT0gTEdTOEdYWF9QUk9EX0xHUzhHNzUpCisJCWxnczhnNzVfaW5pdF9kYXRhKHByaXYpOworCiAJcmV0dXJuICZwcml2LT5mcm9udGVuZDsKIAogZXJyb3Jfb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnczhneHguaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ3M4Z3h4LmgKaW5kZXggMzIxZDM2Ni4uMzNjM2M1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnczhneHguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdzOGd4eC5oCkBAIC0xLDkgKzEsOSBAQAogLyoKLSAqICAgIFN1cHBvcnQgZm9yIExlZ2VuZCBTaWxpY29uIERNQi1USCBkZW1vZHVsYXRvcgotICogICAgTEdTODkxMywgTEdTOEdMNQorICogICAgU3VwcG9ydCBmb3IgTGVnZW5kIFNpbGljb24gR0IyMDYwMCAoYS5rLmEgRE1CLVRIKSBkZW1vZHVsYXRvcgorICogICAgTEdTODkxMywgTEdTOEdMNSwgTEdTOEc3NQogICogICAgZXhwZXJpbWVudGFsIHN1cHBvcnQgTEdTOEc0MiwgTEdTOEc1MgogICoKLSAqICAgIENvcHlyaWdodCAoQykgMjAwNywyMDA4IERhdmlkIFQuTC4gV29uZyA8ZGF2aWR0bHdvbmdAZ21haWwuY29tPgorICogICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgRGF2aWQgVC5MLiBXb25nIDxkYXZpZHRsd29uZ0BnbWFpbC5jb20+CiAgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDggU2lyaXVzIEludGVybmF0aW9uYWwgKEhvbmcgS29uZykgTGltaXRlZAogICogICAgVGltb3RoeSBMZWUgPHRpbW90aHkubGVlQHNpcml1c2hrLmNvbT4gKGZvciBpbml0aWFsIHdvcmsgb24gTEdTOEdMNSkKICAqCkBAIC0zNCw2ICszNCw3IEBACiAjZGVmaW5lIExHUzhHWFhfUFJPRF9MR1M4RzQyIDMKICNkZWZpbmUgTEdTOEdYWF9QUk9EX0xHUzhHNTIgNAogI2RlZmluZSBMR1M4R1hYX1BST0RfTEdTOEc1NCA1CisjZGVmaW5lIExHUzhHWFhfUFJPRF9MR1M4Rzc1IDYKIAogc3RydWN0IGxnczhneHhfY29uZmlnIHsKIApAQCAtNzAsNiArNzEsMTAgQEAKIAkvKklGIHVzZSBOZWdhdGl2ZSBjZW50ZXIgZnJlcXVlbmN5Ki8KIAl1OCBpZl9uZWdfY2VudGVyOwogCisJLyo4Rzc1IGludGVybmFsIEFEQyBpbnB1dCByYW5nZSBzZWxlY3Rpb24qLworCS8qMDogMC44VnBwLCAxOiAxLjBWcHAsIDI6IDEuNlZwcCwgMzogMi4wVnBwKi8KKwl1OCBhZGNfdnBwOworCiAJLyogc2xhdmUgYWRkcmVzcyBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgdHVuZXIgKi8KIAl1OCB0dW5lcl9hZGRyZXNzOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ3M4Z3h4X3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ3M4Z3h4X3ByaXYuaAppbmRleCA5Nzc2ZDMwLi44ZWYzNzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdzOGd4eF9wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnczhneHhfcHJpdi5oCkBAIC0xLDkgKzEsOSBAQAogLyoKLSAqICAgIFN1cHBvcnQgZm9yIExlZ2VuZCBTaWxpY29uIERNQi1USCBkZW1vZHVsYXRvcgotICogICAgTEdTODkxMywgTEdTOEdMNQorICogICAgU3VwcG9ydCBmb3IgTGVnZW5kIFNpbGljb24gR0IyMDYwMCAoYS5rLmEgRE1CLVRIKSBkZW1vZHVsYXRvcgorICogICAgTEdTODkxMywgTEdTOEdMNSwgTEdTOEc3NQogICogICAgZXhwZXJpbWVudGFsIHN1cHBvcnQgTEdTOEc0MiwgTEdTOEc1MgogICoKLSAqICAgIENvcHlyaWdodCAoQykgMjAwNywyMDA4IERhdmlkIFQuTC4gV29uZyA8ZGF2aWR0bHdvbmdAZ21haWwuY29tPgorICogICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgRGF2aWQgVC5MLiBXb25nIDxkYXZpZHRsd29uZ0BnbWFpbC5jb20+CiAgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDggU2lyaXVzIEludGVybmF0aW9uYWwgKEhvbmcgS29uZykgTGltaXRlZAogICogICAgVGltb3RoeSBMZWUgPHRpbW90aHkubGVlQHNpcml1c2hrLmNvbT4gKGZvciBpbml0aWFsIHdvcmsgb24gTEdTOEdMNSkKICAqCkBAIC0zOCw3ICszOCw3IEBACiAjZGVmaW5lIFNDX1FBTTY0CTB4MTAJLyogNjRRQU0gbW9kdWxhdGlvbiAqLwogI2RlZmluZSBTQ19RQU0zMgkweDBDCS8qIDMyUUFNIG1vZHVsYXRpb24gKi8KICNkZWZpbmUgU0NfUUFNMTYJMHgwOAkvKiAxNlFBTSBtb2R1bGF0aW9uICovCi0jZGVmaW5lIFNDX1FBTTROUgkweDA0CS8qIDRRQU0gbW9kdWxhdGlvbiAqLworI2RlZmluZSBTQ19RQU00TlIJMHgwNAkvKiA0UUFNLU5SIG1vZHVsYXRpb24gKi8KICNkZWZpbmUgU0NfUUFNNAkJMHgwMAkvKiA0UUFNIG1vZHVsYXRpb24gKi8KIAogI2RlZmluZSBMR1NfRkVDX01BU0sJMHgwMwkvKiBGRUMgUmF0ZSBNYXNrICovCkBAIC00Nyw4ICs0Nyw4IEBACiAjZGVmaW5lIExHU19GRUNfMF84CTB4MDIJLyogRkVDIFJhdGUgMC44ICovCiAKICNkZWZpbmUgVElNX01BU0sJICAweDIwCS8qIFRpbWUgSW50ZXJsZWF2ZSBMZW5ndGggTWFzayAqLwotI2RlZmluZSBUSU1fTE9ORwkgIDB4MDAJLyogVGltZSBJbnRlcmxlYXZlIExlbmd0aCA9IDcyMCAqLwotI2RlZmluZSBUSU1fTUlERExFICAgICAweDIwICAgLyogVGltZSBJbnRlcmxlYXZlIExlbmd0aCA9IDI0MCAqLworI2RlZmluZSBUSU1fTE9ORwkgIDB4MjAJLyogVGltZSBJbnRlcmxlYXZlIExlbmd0aCA9IDcyMCAqLworI2RlZmluZSBUSU1fTUlERExFICAgICAweDAwICAgLyogVGltZSBJbnRlcmxlYXZlIExlbmd0aCA9IDI0MCAqLwogCiAjZGVmaW5lIENGX01BU0sJMHg4MAkvKiBDb250cm9sIEZyYW1lIE1hc2sgKi8KICNkZWZpbmUgQ0ZfRU4JMHg4MAkvKiBDb250cm9sIEZyYW1lIE9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQzMTIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5jCmluZGV4IGY2OWRhYWEuLjQ3MjkwN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5jCkBAIC04NSw3ICs4NSw3IEBACiAJCWludCBpOwogCQlkcHJpbnRrKCJSKCVkKToiLCByZWcgJiAweDdmKTsKIAkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCQlwcmludGsoIiAlMDJ4IiwgYnVmW2ldKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwgYnVmW2ldKTsKIAkJcHJpbnRrKCJcbiIpOwogCX0KIApAQCAtMTAzLDcgKzEwMyw3IEBACiAJCWludCBpOwogCQlkcHJpbnRrKCJXKCVkKToiLCByZWcgJiAweDdmKTsKIAkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCQlwcmludGsoIiAlMDJ4Iiwgc3JjW2ldKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4Iiwgc3JjW2ldKTsKIAkJcHJpbnRrKCJcbiIpOwogCX0KIApAQCAtNzQ0LDcgKzc0NCw4IEBACiAJCS50eXBlID0gRkVfUVBTSywKIAkJLmZyZXF1ZW5jeV9taW4gPSA5NTAwMDAsCiAJCS5mcmVxdWVuY3lfbWF4ID0gMjE1MDAwMCwKLQkJLmZyZXF1ZW5jeV9zdGVwc2l6ZSA9IChNVDMxMl9QTExfQ0xLIC8gMTAwMCkgLyAxMjgsIC8qIEZJWE1FOiBhZGp1c3QgZnJlcSB0byByZWFsIHVzZWQgeHRhbCAqLworCQkvKiBGSVhNRTogYWRqdXN0IGZyZXEgdG8gcmVhbCB1c2VkIHh0YWwgKi8KKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZSA9IChNVDMxMl9QTExfQ0xLIC8gMTAwMCkgLyAxMjgsCiAJCS5zeW1ib2xfcmF0ZV9taW4gPSBNVDMxMl9TWVNfQ0xLIC8gMTI4LCAvKiBGSVhNRSBhcyBhYm92ZSAqLwogCQkuc3ltYm9sX3JhdGVfbWF4ID0gTVQzMTJfU1lTX0NMSyAvIDIsCiAJCS5jYXBzID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMC5jCmluZGV4IDFlZDVhN2QuLjYwZWUxOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDAuYwpAQCAtMzY3LDcgKzM2Nyw5IEBACiAJLyogTihJKSA9IGZsb29yKGYoVkNPKSAvIChmKFhUQUwpICogKFBTRDIgPyAyIDogMSkpKQkqLwogCW5pbnQgPSBmdmNvIC8gKHN0YXRlLT5yZWZlcmVuY2UgPDwgcHNkMik7CiAJLyogTihGKSA9IHJvdW5kKGYoVkNPKSAvIGYoWFRBTCkgKiAoUFNEMiA/IDIgOiAxKSAtIE4oSSkpICogMiBeIDkJKi8KLQluZnJhYyA9ICgoKGZ2Y28gLSAobmludCAqIHN0YXRlLT5yZWZlcmVuY2UgPDwgcHNkMikpIDw8ICg5IC0gcHNkMikpICsgc3RhdGUtPnJlZmVyZW5jZSAvIDIpIC8gc3RhdGUtPnJlZmVyZW5jZTsKKwluZnJhYyA9IERJVl9ST1VORF9DTE9TRVNUKChmdmNvIC0gKG5pbnQgKiBzdGF0ZS0+cmVmZXJlbmNlIDw8IHBzZDIpKQorCQkJCQkgPDwgKDkgLSBwc2QyKSwKKwkJCQkgIHN0YXRlLT5yZWZlcmVuY2UpOwogCWRwcmludGsodmVyYm9zZSwgRkVfREVCVUcsIDEsCiAJCSJmcmVxdWVuY3kgPSAldSwgc3JhdGUgPSAldSwgZyA9ICV1LCBvZGl2ID0gJXUsIHBzZDIgPSAldSwgZnh0YWwgPSAldSwgb3NtID0gJXUsIGZ2Y28gPSAldSwgTihJKSA9ICV1LCBOKEYpID0gJXUiLAogCQlmcmVxdWVuY3ksIHNyYXRlLCAodW5zaWduZWQgaW50KWcsICh1bnNpZ25lZCBpbnQpb2RpdiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2NvcmUuYwppbmRleCAxZGEwNDVmLi4zYmRlMzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jCkBAIC0yMzAsOCArMjMwLDggQEAKIAkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4NWMpOwogCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1ROUkNGRywgMHg2Yyk7CiAJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE5SQ0ZHLCAweDZmKTsKLQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9JMkNSUFQsIDB4MjQpOwotCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0kyQ1JQVCwgMHgyNCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfSTJDUlBULCAweDIwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9JMkNSUFQsIDB4MjApOwogCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX05DT0FSU0UsIDB4MTMpOwogCQkJbXNsZWVwKDMpOwogCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX0kyQ0NGRywgMHgwOCk7CkBAIC0zNzAsOCArMzcwLDggQEAKIAl1MzIgZmkyYzsKIAogCWRtZF9yZWcoZmkyYywgRjA5MDBfUDFfSTJDVF9PTiwgRjA5MDBfUDJfSTJDVF9PTik7Ci0JaWYgKGVuYWJsZSkKLQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBmaTJjLCAxKTsKKworCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgZmkyYywgZW5hYmxlKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfc3cuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3N3LmMKaW5kZXggYTVhMzE1My4uOTYyZmRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfc3cuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9zdy5jCkBAIC0xNzIxLDcgKzE3MjEsNyBAQAogCiAJczMyIHNyYXRlLCBkZW1vZF90aW1lb3V0LAogCQlmZWNfdGltZW91dCwgZnJlcTEsIGZyZXEwOwotCWVudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZSBzaWduYWxfdHlwZSA9IFNUVjA5MDBfTk9EQVRBOzsKKwllbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUgc2lnbmFsX3R5cGUgPSBTVFYwOTAwX05PREFUQTsKIAogCXN3aXRjaCAoZGVtb2QpIHsKIAljYXNlIFNUVjA5MDBfREVNT0RfMToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMC5jCmluZGV4IDcwZWZhYzguLmRjZjFiMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTAuYwpAQCAtMzYsNiArMzYsNyBAQAogCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOwogCiAJdTMyIG1jbGs7CisJdTggY2xrX2RpdjsKIAl1OCByZWdzWzhdOwogfTsKIApAQCAtMTAwLDM1ICsxMDEsMjUgQEAKIAlzdHJ1Y3Qgc3R2NjExMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CiAJaW50IHJjOwogCXU4IHJlZ1tdID0geyBzdGFydCB9OwotCXN0cnVjdCBpMmNfbXNnIG1zZ193ciA9IHsKLQkJLmFkZHIJPSBwcml2LT5pMmNfYWRkcmVzcywKLQkJLmZsYWdzCT0gMCwKLQkJLmJ1Zgk9IHJlZywKLQkJLmxlbgk9IDEsCisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsKKwkJCS5hZGRyCT0gcHJpdi0+aTJjX2FkZHJlc3MsCisJCQkuZmxhZ3MJPSAwLAorCQkJLmJ1Zgk9IHJlZywKKwkJCS5sZW4JPSAxLAorCQl9LCB7CisJCQkuYWRkcgk9IHByaXYtPmkyY19hZGRyZXNzLAorCQkJLmZsYWdzCT0gSTJDX01fUkQsCisJCQkuYnVmCT0gcmVncywKKwkJCS5sZW4JPSBsZW4sCisJCX0sCiAJfTsKIAotCXN0cnVjdCBpMmNfbXNnIG1zZ19yZCA9IHsKLQkJLmFkZHIJPSBwcml2LT5pMmNfYWRkcmVzcywKLQkJLmZsYWdzCT0gSTJDX01fUkQsCi0JCS5idWYJPSByZWdzLAotCQkubGVuCT0gbGVuLAotCX07Ci0JLyogd3JpdGUgc3ViYWRkciAqLwogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAKLQlyYyA9IGkyY190cmFuc2Zlcihwcml2LT5pMmMsICZtc2dfd3IsIDEpOwotCWlmIChyYyAhPSAxKQotCQlkcHJpbnRrKCIlczogaTJjIGVycm9yXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwotCS8qIHJlYWQgcmVnaXN0ZXJzICovCi0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQotCXJjID0gaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZ19yZCwgMSk7Ci0JaWYgKHJjICE9IDEpCisJcmMgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCBtc2csIDIpOworCWlmIChyYyAhPSAyKQogCQlkcHJpbnRrKCIlczogaTJjIGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQpAQCAtMjIxLDYgKzIxMiwxMCBAQAogCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDFdIHw9CiAJCQkJKCgoKHByaXYtPm1jbGsgLyAxMDAwMDAwKSAtIDE2KSAmIDB4MWYpIDw8IDMpOwogCisJLyogZGl2aXNvciB2YWx1ZSBmb3IgdGhlIG91dHB1dCBjbG9jayAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDJdICY9IH4weGMwOworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDJdIHw9IChwcml2LT5jbGtfZGl2IDw8IDYpOworCiAJc3R2NjExMF93cml0ZV9yZWdzKGZlLCAmcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMMV0sIFJTVFY2MTEwX0NUUkwxLCA4KTsKIAltc2xlZXAoMSk7CiAJc3R2NjExMF9zZXRfYmFuZHdpZHRoKGZlLCA3MjAwMDAwMCk7CkBAIC00MTgsNiArNDEzLDEwIEBACiAJfTsKIAlpbnQgcmV0OwogCisJLyogZGl2aXNvciB2YWx1ZSBmb3IgdGhlIG91dHB1dCBjbG9jayAqLworCXJlZzBbMl0gJj0gfjB4YzA7CisJcmVnMFsyXSB8PSAoY29uZmlnLT5jbGtfZGl2IDw8IDYpOworCiAJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKIAkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIApAQCAtNDM2LDYgKzQzNSw3IEBACiAJcHJpdi0+aTJjX2FkZHJlc3MgPSBjb25maWctPmkyY19hZGRyZXNzOwogCXByaXYtPmkyYyA9IGkyYzsKIAlwcml2LT5tY2xrID0gY29uZmlnLT5tY2xrOworCXByaXYtPmNsa19kaXYgPSBjb25maWctPmNsa19kaXY7CiAKIAltZW1jcHkoJnByaXYtPnJlZ3MsICZyZWcwWzFdLCA4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEwLmgKaW5kZXggMWMwMzE0ZC4uOWRiMjQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMC5oCkBAIC00MSw3ICs0MSw3IEBACiBzdHJ1Y3Qgc3R2NjExMF9jb25maWcgewogCXU4IGkyY19hZGRyZXNzOwogCXUzMiBtY2xrOwotCWludCBpcV93aXJpbmc7CisJdTggY2xrX2RpdjsJLyogZGl2aXNvciB2YWx1ZSBmb3IgdGhlIG91dHB1dCBjbG9jayAqLwogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TVFY2MTEwKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1NUVjYxMTBfTU9EVUxFKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwMjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyMS5jCmluZGV4IGY1ZDdiMzIuLjZjMWRiZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyMS5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIAl0bXAgPSAgKChzeW1ib2xyYXRlIDw8IDQpICUgRklOKSA8PCA4OwogCXJhdGlvID0gKHJhdGlvIDw8IDgpICsgdG1wIC8gRklOOwogCXRtcCA9ICh0bXAgJSBGSU4pIDw8IDg7Ci0JcmF0aW8gPSAocmF0aW8gPDwgOCkgKyAodG1wICsgRklOLzIpIC8gRklOOworCXJhdGlvID0gKHJhdGlvIDw8IDgpICsgRElWX1JPVU5EX0NMT1NFU1QodG1wLCBGSU4pOwogCiAJQkRSID0gcmF0aW87CiAJQkRSSSA9ICgoKFhJTiA8PCA1KSAvIHN5bWJvbHJhdGUpICsgMSkgLyAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjYxLmMKaW5kZXggYjZkMTc3Ny4uMzIwYzNjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNjEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2MS5jCkBAIC0xMzYsOSArMTM2LDkgQEAKIAogCQlpZiAoZnJlcXVlbmN5IDwgMTQ1MDAwMCkKIAkJCWJ1ZlszXSA9IDB4MDA7Ci0JCWlmIChmcmVxdWVuY3kgPCAyMDAwMDAwKQorCQllbHNlIGlmIChmcmVxdWVuY3kgPCAyMDAwMDAwKQogCQkJYnVmWzNdID0gMHg0MDsKLQkJaWYgKGZyZXF1ZW5jeSA8IDIxNTAwMDApCisJCWVsc2UgaWYgKGZyZXF1ZW5jeSA8IDIxNTAwMDApCiAJCQlidWZbM10gPSAweDgwOwogCiAJCS8qIFNldCBwYXJhbXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy92ZXMxODIwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdmVzMTgyMC5jCmluZGV4IDZlNzhlNDguLjU1MGEwN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy92ZXMxODIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3ZlczE4MjAuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJdG1wID0gKChzeW1ib2xyYXRlIDw8IDQpICUgZmluKSA8PCA4OwogCXJhdGlvID0gKHJhdGlvIDw8IDgpICsgdG1wIC8gZmluOwogCXRtcCA9ICh0bXAgJSBmaW4pIDw8IDg7Ci0JcmF0aW8gPSAocmF0aW8gPDwgOCkgKyAodG1wICsgZmluIC8gMikgLyBmaW47CisJcmF0aW8gPSAocmF0aW8gPDwgOCkgKyBESVZfUk9VTkRfQ0xPU0VTVCh0bXAsIGZpbik7CiAKIAlCRFIgPSByYXRpbzsKIAlCRFJJID0gKCgoc3RhdGUtPmNvbmZpZy0+eGluIDw8IDUpIC8gc3ltYm9scmF0ZSkgKyAxKSAvIDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzYuYwppbmRleCBlMjJhMGIzLi40ZTgxNGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJ6bDEwMDM2LmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM5LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYjI5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzOS5jCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogIERyaXZlciBmb3IgWmFybGluayBaTDEwMDM5IERWQi1TIHR1bmVyCisgKgorICogIENvcHlyaWdodCAyMDA3IEphbiBELiBMb3V3IDxqZC5sb3V3QG13ZWIuY28uemE+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJ6bDEwMDM5LmgiCisKK3N0YXRpYyBpbnQgZGVidWc7CisKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZykgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCitlbnVtIHpsMTAwMzlfbW9kZWxfaWQgeworCUlEX1pMMTAwMzkgPSAxCit9OworCitzdHJ1Y3QgemwxMDAzOV9zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJdTggaTJjX2FkZHI7CisJdTggaWQ7Cit9OworCitlbnVtIHpsMTAwMzlfcmVnX2FkZHIgeworCVBMTDAgPSAwLAorCVBMTDEsCisJUExMMiwKKwlQTEwzLAorCVJGRkUsCisJQkFTRTAsCisJQkFTRTEsCisJQkFTRTIsCisJTE8wLAorCUxPMSwKKwlMTzIsCisJTE8zLAorCUxPNCwKKwlMTzUsCisJTE82LAorCUdFTkVSQUwKK307CisKK3N0YXRpYyBpbnQgemwxMDAzOV9yZWFkKGNvbnN0IHN0cnVjdCB6bDEwMDM5X3N0YXRlICpzdGF0ZSwKKwkJCWNvbnN0IGVudW0gemwxMDAzOV9yZWdfYWRkciByZWcsIHU4ICpidWYsCisJCQljb25zdCBzaXplX3QgY291bnQpCit7CisJdTggcmVnYnVmW10gPSB7IHJlZyB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geworCQl7LyogV3JpdGUgcmVnaXN0ZXIgYWRkcmVzcyAqLworCQkJLmFkZHIgPSBzdGF0ZS0+aTJjX2FkZHIsCisJCQkuZmxhZ3MgPSAwLAorCQkJLmJ1ZiA9IHJlZ2J1ZiwKKwkJCS5sZW4gPSAxLAorCQl9LCB7LyogUmVhZCBjb3VudCBieXRlcyAqLworCQkJLmFkZHIgPSBzdGF0ZS0+aTJjX2FkZHIsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5idWYgPSBidWYsCisJCQkubGVuID0gY291bnQsCisJCX0sCisJfTsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMikgIT0gMikgeworCQlkcHJpbnRrKCIlczogaTJjIHJlYWQgZXJyb3JcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJcmV0dXJuIDA7IC8qIFN1Y2Nlc3MgKi8KK30KKworc3RhdGljIGludCB6bDEwMDM5X3dyaXRlKHN0cnVjdCB6bDEwMDM5X3N0YXRlICpzdGF0ZSwKKwkJCWNvbnN0IGVudW0gemwxMDAzOV9yZWdfYWRkciByZWcsIGNvbnN0IHU4ICpzcmMsCisJCQljb25zdCBzaXplX3QgY291bnQpCit7CisJdTggYnVmW2NvdW50ICsgMV07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHN0YXRlLT5pMmNfYWRkciwKKwkJLmZsYWdzID0gMCwKKwkJLmJ1ZiA9IGJ1ZiwKKwkJLmxlbiA9IGNvdW50ICsgMSwKKwl9OworCisJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKwkvKiBXcml0ZSByZWdpc3RlciBhZGRyZXNzIGFuZCBkYXRhIGluIG9uZSBnbyAqLworCWJ1ZlswXSA9IHJlZzsKKwltZW1jcHkoJmJ1ZlsxXSwgc3JjLCBjb3VudCk7CisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSAhPSAxKSB7CisJCWRwcmludGsoIiVzOiBpMmMgd3JpdGUgZXJyb3JcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJcmV0dXJuIDA7IC8qIFN1Y2Nlc3MgKi8KK30KKworc3RhdGljIGlubGluZSBpbnQgemwxMDAzOV9yZWFkcmVnKHN0cnVjdCB6bDEwMDM5X3N0YXRlICpzdGF0ZSwKKwkJCQljb25zdCBlbnVtIHpsMTAwMzlfcmVnX2FkZHIgcmVnLCB1OCAqdmFsKQoreworCXJldHVybiB6bDEwMDM5X3JlYWQoc3RhdGUsIHJlZywgdmFsLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgemwxMDAzOV93cml0ZXJlZyhzdHJ1Y3QgemwxMDAzOV9zdGF0ZSAqc3RhdGUsCisJCQkJY29uc3QgZW51bSB6bDEwMDM5X3JlZ19hZGRyIHJlZywKKwkJCQljb25zdCB1OCB2YWwpCit7CisJcmV0dXJuIHpsMTAwMzlfd3JpdGUoc3RhdGUsIHJlZywgJnZhbCwgMSk7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzOV9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB6bDEwMDM5X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCWludCByZXQ7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisJLyogUmVzZXQgbG9naWMgKi8KKwlyZXQgPSB6bDEwMDM5X3dyaXRlcmVnKHN0YXRlLCBHRU5FUkFMLCAweDQwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkcHJpbnRrKCJOb3RlOiBpMmMgd3JpdGUgZXJyb3Igbm9ybWFsIHdoZW4gcmVzZXR0aW5nIHRoZSAiCisJCQkidHVuZXJcbiIpOworCX0KKwkvKiBXYWtlIHVwICovCisJcmV0ID0gemwxMDAzOV93cml0ZXJlZyhzdGF0ZSwgR0VORVJBTCwgMHgwMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZHByaW50aygiVHVuZXIgcG93ZXIgdXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsMTAwMzlfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHpsMTAwMzlfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJaW50IHJldDsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKwlyZXQgPSB6bDEwMDM5X3dyaXRlcmVnKHN0YXRlLCBHRU5FUkFMLCAweDgwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkcHJpbnRrKCJUdW5lciBzbGVlcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzOV9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJc3RydWN0IHpsMTAwMzlfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJdTggYnVmWzZdOworCXU4IGJmOworCXUzMiBmYnc7CisJdTMyIGRpdjsKKwlpbnQgcmV0OworCisJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKwlkcHJpbnRrKCJTZXQgZnJlcXVlbmN5ID0gJWQsIHN5bWJvbCByYXRlID0gJWRcbiIsCisJCQlwYXJhbXMtPmZyZXF1ZW5jeSwgcGFyYW1zLT51LnFwc2suc3ltYm9sX3JhdGUpOworCisJLyogQXNzdW1lZCAxMC4xMTEgTUh6IGNyeXN0YWwgb3NjaWxsYXRvciAqLworCS8qIENhbmNlbGxlZCBudW0vZGVuIDgwIHRvIHByZXZlbnQgb3ZlcmZsb3cgKi8KKwlkaXYgPSAocGFyYW1zLT5mcmVxdWVuY3kgKiAxMDAwKSAvIDEyNjM4NzsKKwlmYncgPSAocGFyYW1zLT51LnFwc2suc3ltYm9sX3JhdGUgKiAyNykgLyAzMjAwMDsKKwkvKiBDYW5jZWxsZWQgbnVtL2RlbiAxMCB0byBwcmV2ZW50IG92ZXJmbG93ICovCisJYmYgPSAoKGZidyAqIDUwODgpIC8gMTAxMTEwMCkgLSAxOworCisJLypQTEwgZGl2aWRlciovCisJYnVmWzBdID0gKGRpdiA+PiA4KSAmIDB4N2Y7CisJYnVmWzFdID0gKGRpdiA+PiAwKSAmIDB4ZmY7CisJLypSZWZlcmVuY2UgZGl2aWRlciovCisJLyogU2VsZWN0IHJlZmVyZW5jZSByYXRpbyBvZiA4MCAqLworCWJ1ZlsyXSA9IDB4MUQ7CisJLypQTEwgdGVzdCBtb2RlcyovCisJYnVmWzNdID0gMHg0MDsKKwkvKlJGIENvbnRyb2wgcmVnaXN0ZXIqLworCWJ1Zls0XSA9IDB4NkU7IC8qIEJ5cGFzcyBlbmFibGUgKi8KKwkvKkJhc2ViYW5kIGZpbHRlciBjdXRvZmYgKi8KKwlidWZbNV0gPSBiZjsKKworCS8qIE9wZW4gaTJjIGdhdGUgKi8KKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCS8qIEJSID0gMTAsIEVuYWJsZSBmaWx0ZXIgYWRqdXN0bWVudCAqLworCXJldCA9IHpsMTAwMzlfd3JpdGVyZWcoc3RhdGUsIEJBU0UxLCAweDBBKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKwkvKiBXcml0ZSBuZXcgY29uZmlnIHZhbHVlcyAqLworCXJldCA9IHpsMTAwMzlfd3JpdGUoc3RhdGUsIFBMTDAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCS8qIEJSID0gMTAsIERpc2FibGUgZmlsdGVyIGFkanVzdG1lbnQgKi8KKwlyZXQgPSB6bDEwMDM5X3dyaXRlcmVnKHN0YXRlLCBCQVNFMSwgMHg2QSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBDbG9zZSBpMmMgZ2F0ZSAqLworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJcmV0dXJuIDA7CitlcnJvcjoKKwlkcHJpbnRrKCJFcnJvciBzZXR0aW5nIHR1bmVyXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHpsMTAwMzlfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgemwxMDAzOV9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisJa2ZyZWUoc3RhdGUpOworCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfdHVuZXJfb3BzIHpsMTAwMzlfb3BzID0geworCS5yZWxlYXNlID0gemwxMDAzOV9yZWxlYXNlLAorCS5pbml0ID0gemwxMDAzOV9pbml0LAorCS5zbGVlcCA9IHpsMTAwMzlfc2xlZXAsCisJLnNldF9wYXJhbXMgPSB6bDEwMDM5X3NldF9wYXJhbXMsCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICp6bDEwMDM5X2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJdTggaTJjX2FkZHIsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXN0cnVjdCB6bDEwMDM5X3N0YXRlICpzdGF0ZSA9IE5VTEw7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpsMTAwMzlfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKworCXN0YXRlLT5pMmMgPSBpMmM7CisJc3RhdGUtPmkyY19hZGRyID0gaTJjX2FkZHI7CisKKwkvKiBPcGVuIGkyYyBnYXRlICovCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKwkvKiBjaGVjayBpZiB0aGlzIGlzIGEgdmFsaWQgdHVuZXIgKi8KKwlpZiAoemwxMDAzOV9yZWFkcmVnKHN0YXRlLCBHRU5FUkFMLCAmc3RhdGUtPmlkKSA8IDApIHsKKwkJLyogQ2xvc2UgaTJjIGdhdGUgKi8KKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJCWdvdG8gZXJyb3I7CisJfQorCS8qIENsb3NlIGkyYyBnYXRlICovCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCXN0YXRlLT5pZCA9IHN0YXRlLT5pZCAmIDB4MGY7CisJc3dpdGNoIChzdGF0ZS0+aWQpIHsKKwljYXNlIElEX1pMMTAwMzk6CisJCXN0cmNweShmZS0+b3BzLnR1bmVyX29wcy5pbmZvLm5hbWUsCisJCQkiWmFybGluayBaTDEwMDM5IERWQi1TIHR1bmVyIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIkNoaXAgSUQ9JXggZG9lcyBub3QgbWF0Y2ggYSBrbm93biB0eXBlXG4iLCBzdGF0ZS0+aWQpOworCQlicmVhazsKKwkJZ290byBlcnJvcjsKKwl9CisKKwltZW1jcHkoJmZlLT5vcHMudHVuZXJfb3BzLCAmemwxMDAzOV9vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX3R1bmVyX29wcykpOworCWZlLT50dW5lcl9wcml2ID0gc3RhdGU7CisJZHByaW50aygiVHVuZXIgYXR0YWNoZWQgQCBpMmMgYWRkcmVzcyAweCUwMnhcbiIsIGkyY19hZGRyKTsKKwlyZXR1cm4gZmU7CitlcnJvcjoKKwlrZnJlZShzdGF0ZSk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHpsMTAwMzlfYXR0YWNoKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJaYXJsaW5rIFpMMTAwMzkgRFZCLVMgdHVuZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJKYW4gRC4gTG91dyA8amQubG91d0Btd2ViLmNvLnphPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzkuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVlZTdlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM5LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAgICBEcml2ZXIgZm9yIFphcmxpbmsgWkwxMDAzOSBEVkItUyB0dW5lcgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA3IEphbiBELiBMb3V3IDxqZC5sb3V3QG13ZWIuY28uemE+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2lmbmRlZiBaTDEwMDM5X0gKKyNkZWZpbmUgWkwxMDAzOV9ICisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfWkwxMDAzOSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9aTDEwMDM5X01PRFVMRSkgXAorCSAgICAmJiBkZWZpbmVkKE1PRFVMRSkpCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICp6bDEwMDM5X2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJdTggaTJjX2FkZHIsCisJCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnpsMTAwMzlfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQl1OCBpMmNfYWRkciwKKwkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX0RWQl9aTDEwMDM5ICovCisKKyNlbmRpZiAvKiBaTDEwMDM5X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5jCmluZGV4IDY2ZjVjMWYuLjhjNjEyNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYwpAQCAtMzgsNiArMzgsOCBAQAogCXN0cnVjdCB6bDEwMzUzX2NvbmZpZyBjb25maWc7CiAKIAllbnVtIGZlX2JhbmR3aWR0aCBiYW5kd2lkdGg7CisgICAgICAgdTMyIHVjYmxvY2tzOworICAgICAgIHUzMiBmcmVxdWVuY3k7CiB9OwogCiBzdGF0aWMgaW50IGRlYnVnOwpAQCAtMTk5LDYgKzIwMSw4IEBACiAJdTE2IHRwcyA9IDA7CiAJc3RydWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgKm9wID0gJnBhcmFtLT51Lm9mZG07CiAKKyAgICAgICBzdGF0ZS0+ZnJlcXVlbmN5ID0gcGFyYW0tPmZyZXF1ZW5jeTsKKwogCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCBSRVNFVCwgMHg4MCk7CiAJdWRlbGF5KDIwMCk7CiAJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIDB4RUEsIDB4MDEpOwpAQCAtNDY0LDcgKzQ2OCw3IEBACiAJCWJyZWFrOwogCX0KIAotCXBhcmFtLT5mcmVxdWVuY3kgPSAwOworICAgICAgIHBhcmFtLT5mcmVxdWVuY3kgPSBzdGF0ZS0+ZnJlcXVlbmN5OwogCW9wLT5iYW5kd2lkdGggPSBzdGF0ZS0+YmFuZHdpZHRoOwogCXBhcmFtLT5pbnZlcnNpb24gPSBJTlZFUlNJT05fQVVUTzsKIApAQCAtNTQyLDkgKzU0NiwxMyBAQAogc3RhdGljIGludCB6bDEwMzUzX3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdWNibG9ja3MpCiB7CiAJc3RydWN0IHpsMTAzNTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisgICAgICAgdTMyIHVibCA9IDA7CiAKLQkqdWNibG9ja3MgPSB6bDEwMzUzX3JlYWRfcmVnaXN0ZXIoc3RhdGUsIFJTX1VCQ18xKSA8PCA4IHwKLQkJICAgIHpsMTAzNTNfcmVhZF9yZWdpc3RlcihzdGF0ZSwgUlNfVUJDXzApOworICAgICAgIHVibCA9IHpsMTAzNTNfcmVhZF9yZWdpc3RlcihzdGF0ZSwgUlNfVUJDXzEpIDw8IDggfAorCSAgICAgemwxMDM1M19yZWFkX3JlZ2lzdGVyKHN0YXRlLCBSU19VQkNfMCk7CisKKyAgICAgICBzdGF0ZS0+dWNibG9ja3MgKz0gdWJsOworICAgICAgICp1Y2Jsb2NrcyA9IHN0YXRlLT51Y2Jsb2NrczsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jCmluZGV4IDU5OGVhZjguLjgwZDE0YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKQEAgLTQzOSw3ICs0MzksNyBAQAogCWlmIChkZW5vbWluYXRvciA9PSAwKQogCQlyZXR1cm4gfjA7CiAKLQlyZXR1cm4gKG51bWVyYXRvciArIGRlbm9taW5hdG9yIC8gMikgLyBkZW5vbWluYXRvcjsKKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QobnVtZXJhdG9yLCBkZW5vbWluYXRvcik7CiB9CiAKIC8qIExHIElubm90ZWsgVERURS1FMDAxUCAoSW5maW5lb24gVFVBNjAzNCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYwppbmRleCBjZTY0YzYyMS4uODk4NmQ5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID49IDQpCisJaWYgKGlucHV0ID49IDQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJYXY3MTEwLT5jdXJyZW50X2lucHV0ID0gaW5wdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCmluZGV4IDM3MWE3MTYuLmI1YzY4MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAljYXNlIDB4MTAxMjoKIAkJLyogVGhlIGhhdXBwYXVnZSBrZXltYXAgaXMgYSBzdXBlcnNldCBvZiB0aGVzZSByZW1vdGVzICovCiAJCWlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmYnVkZ2V0X2NpLT5pci5zdGF0ZSwKLQkJCSAgICAgIElSX1RZUEVfUkM1LCBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3KTsKKwkJCSAgICAgIElSX1RZUEVfUkM1LCAmaXJfY29kZXNfaGF1cHBhdWdlX25ld190YWJsZSk7CiAKIAkJaWYgKHJjNV9kZXZpY2UgPCAwKQogCQkJYnVkZ2V0X2NpLT5pci5yYzVfZGV2aWNlID0gMHgxZjsKQEAgLTIzNyw3ICsyMzcsNyBAQAogCWNhc2UgMHgxMDFhOgogCQkvKiBmb3IgdGhlIFRlY2hub3RyZW5kIDE1MDAgYnVuZGxlZCByZW1vdGUgKi8KIAkJaXJfaW5wdXRfaW5pdChpbnB1dF9kZXYsICZidWRnZXRfY2ktPmlyLnN0YXRlLAotCQkJICAgICAgSVJfVFlQRV9SQzUsIGlyX2NvZGVzX3R0XzE1MDApOworCQkJICAgICAgSVJfVFlQRV9SQzUsICZpcl9jb2Rlc190dF8xNTAwX3RhYmxlKTsKIAogCQlpZiAocmM1X2RldmljZSA8IDApCiAJCQlidWRnZXRfY2ktPmlyLnJjNV9kZXZpY2UgPSBJUl9ERVZJQ0VfQU5ZOwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJZGVmYXVsdDoKIAkJLyogdW5rbm93biByZW1vdGUgKi8KIAkJaXJfaW5wdXRfaW5pdChpbnB1dF9kZXYsICZidWRnZXRfY2ktPmlyLnN0YXRlLAotCQkJICAgICAgSVJfVFlQRV9SQzUsIGlyX2NvZGVzX2J1ZGdldF9jaV9vbGQpOworCQkJICAgICAgSVJfVFlQRV9SQzUsICZpcl9jb2Rlc19idWRnZXRfY2lfb2xkX3RhYmxlKTsKIAogCQlpZiAocmM1X2RldmljZSA8IDApCiAJCQlidWRnZXRfY2ktPmlyLnJjNV9kZXZpY2UgPSBJUl9ERVZJQ0VfQU5ZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCmluZGV4IDMzMTVjYWMuLjI1YTM2YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKQEAgLTI4OCwxNiArMjg4LDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJhZGlvLXR5cGhvb24uCiAKLWNvbmZpZyBSQURJT19UWVBIT09OX1BST0NfRlMKLQlib29sICJTdXBwb3J0IGZvciAvcHJvYy9yYWRpby10eXBob29uIgotCWRlcGVuZHMgb24gUFJPQ19GUyAmJiBSQURJT19UWVBIT09OCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0aGUgdHlwaG9vbiByYWRpbyBjYXJkIGRyaXZlciB0byB3cml0ZQotCSAgc3RhdHVzIGluZm9ybWF0aW9uIChmcmVxdWVuY3ksIHZvbHVtZSwgbXV0ZWQsIG11dGUgZnJlcXVlbmN5LAotCSAgYmFzZSBhZGRyZXNzKSB0byAvcHJvYy9yYWRpby10eXBob29uLiBUaGUgZmlsZSBjYW4gYmUgdmlld2VkIHdpdGgKLQkgIHlvdXIgZmF2b3JpdGUgcGFnZXIgKGkuZS4gdXNlICJtb3JlIC9wcm9jL3JhZGlvLXR5cGhvb24iIG9yICJsZXNzCi0JICAvcHJvYy9yYWRpby10eXBob29uIiBvciBzaW1wbHkgImNhdCAvcHJvYy9yYWRpby10eXBob29uIikuCi0KIGNvbmZpZyBSQURJT19UWVBIT09OX1BPUlQKIAloZXggIlR5cGhvb24gSS9PIHBvcnQgKDB4MzE2IG9yIDB4MzM2KSIKIAlkZXBlbmRzIG9uIFJBRElPX1RZUEhPT049eQpAQCAtMzM5LDYgKzMyOSwyOSBAQAogCWhlbHAKIAkgIEVudGVyIHRoZSBJL08gcG9ydCBvZiB5b3VyIFpvbHRyaXggcmFkaW8gY2FyZC4KIAorY29uZmlnIEkyQ19TSTQ3MTMKKwl0cmlzdGF0ZSAiSTJDIGRyaXZlciBmb3IgU2lsaWNvbiBMYWJzIFNpNDcxMyBkZXZpY2UiCisJZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fVjRMMgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCB0byBTaTQ3MTMgSTJDIGRldmljZS4KKwkgIFRoaXMgZGV2aWNlIGRyaXZlciBzdXBwb3J0cyBvbmx5IGkyYyBidXMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNpNDcxMy4KKworY29uZmlnIFJBRElPX1NJNDcxMworCXRyaXN0YXRlICJTaWxpY29uIExhYnMgU2k0NzEzIEZNIFJhZGlvIFRyYW5zbWl0dGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fVjRMMgorCXNlbGVjdCBJMkNfU0k0NzEzCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IHRvIFNpNDcxMyBGTSBSYWRpbyBUcmFuc21pdHRlci4KKwkgIFRoaXMgZGV2aWNlIGNhbiB0cmFuc21pdCBhdWRpbyB0aHJvdWdoIEZNLiBJdCBjYW4gdHJhbnNtaXQKKwkgIEVEUyBhbmQgRUJEUyBzaWduYWxzIGFzIHdlbGwuIFRoaXMgbW9kdWxlIGlzIHRoZSB2NGwyIHJhZGlvCisJICBpbnRlcmZhY2UgZm9yIHRoZSBpMmMgZHJpdmVyIG9mIHRoaXMgZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByYWRpby1zaTQ3MTMuCisKIGNvbmZpZyBVU0JfRFNCUgogCXRyaXN0YXRlICJELUxpbmsvR2VtVGVrIFVTQiBGTSByYWRpbyBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX1Y0TDIKQEAgLTM1MSwyOSArMzY0LDExIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkc2JyMTAwLgogCi1jb25maWcgVVNCX1NJNDcwWAotCXRyaXN0YXRlICJTaWxpY29uIExhYnMgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIFVTQiBkZXZpY2VzIHdpdGggdGhlIFNpbGljb24gTGFicyBTSTQ3MHgKLQkgIGNoaXAuIEN1cnJlbnRseSB0aGVzZSBkZXZpY2VzIGFyZSBrbm93biB0byB3b3JrOgotCSAgLSAxMGM0OjgxOGE6IFNpbGljb24gTGFicyBVU0IgRk0gUmFkaW8gUmVmZXJlbmNlIERlc2lnbgotCSAgLSAwNmUxOmExNTU6IEFEUy9UZWNoIEZNIFJhZGlvIFJlY2VpdmVyIChmb3JtZXJseSBJbnN0YW50IEZNIE11c2ljKQotCSAgLSAxYjgwOmQ3MDA6IEtXb3JsZCBVU0IgRk0gUmFkaW8gU25hcE11c2ljIE1vYmlsZSA3MDAgKEZNNzAwKQorY29uZmlnIFJBRElPX1NJNDcwWAorCWJvb2wgIlNpbGljb24gTGFicyBTaTQ3MHggRk0gUmFkaW8gUmVjZWl2ZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIKIAotCSAgU291bmQgaXMgcHJvdmlkZWQgYnkgdGhlIEFMU0EgVVNCIEF1ZGlvL01JREkgZHJpdmVyLiBUaGVyZWZvcmUKLQkgIGlmIHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGUgZGV2aWNlIHNvbGVseSBmb3IgUkRTIHJlY2VpdmluZywKLQkgIGl0IGlzIHJlY29tbWVuZGVkIHRvIGFsc28gc2VsZWN0IFNORF9VU0JfQVVESU8uCi0KLQkgIFBsZWFzZSBoYXZlIGEgbG9vayBhdCB0aGUgZG9jdW1lbnRhdGlvbiwgZXNwZWNpYWxseSBvbiBob3cKLQkgIHRvIHJlZGlyZWN0IHRoZSBhdWRpbyBzdHJlYW0gZnJvbSB0aGUgcmFkaW8gdG8geW91ciBzb3VuZCBkZXZpY2U6Ci0JICBEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NpNDcweC50eHQKLQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRoaXMgdHlwZSBvZiByYWRpbyB0byB5b3VyCi0JICBjb21wdXRlcidzIFVTQiBwb3J0LgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByYWRpby1zaTQ3MHguCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L0tjb25maWciCiAKIGNvbmZpZyBVU0JfTVI4MDAKIAl0cmlzdGF0ZSAiQXZlck1lZGlhIE1SIDgwMCBVU0IgRk0gcmFkaW8gc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlCmluZGV4IDBmMmIzNWIuLjJhMWJlM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9NYWtlZmlsZQpAQCAtMTUsOSArMTUsMTEgQEAKIG9iai0kKENPTkZJR19SQURJT19HRU1URUspICs9IHJhZGlvLWdlbXRlay5vCiBvYmotJChDT05GSUdfUkFESU9fR0VNVEVLX1BDSSkgKz0gcmFkaW8tZ2VtdGVrLXBjaS5vCiBvYmotJChDT05GSUdfUkFESU9fVFJVU1QpICs9IHJhZGlvLXRydXN0Lm8KK29iai0kKENPTkZJR19JMkNfU0k0NzEzKSArPSBzaTQ3MTMtaTJjLm8KK29iai0kKENPTkZJR19SQURJT19TSTQ3MTMpICs9IHJhZGlvLXNpNDcxMy5vCiBvYmotJChDT05GSUdfUkFESU9fTUFFU1RSTykgKz0gcmFkaW8tbWFlc3Ryby5vCiBvYmotJChDT05GSUdfVVNCX0RTQlIpICs9IGRzYnIxMDAubwotb2JqLSQoQ09ORklHX1VTQl9TSTQ3MFgpICs9IHJhZGlvLXNpNDcweC5vCitvYmotJChDT05GSUdfUkFESU9fU0k0NzBYKSArPSBzaTQ3MHgvCiBvYmotJChDT05GSUdfVVNCX01SODAwKSArPSByYWRpby1tcjgwMC5vCiBvYmotJChDT05GSUdfUkFESU9fVEVBNTc2NCkgKz0gcmFkaW8tdGVhNTc2NC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwppbmRleCBkMzBmYzBjLi44YjE0NDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCkBAIC0zNTksNyArMzU5LDggQEAKIAlzdHJsY3B5KHYtPmNhcmQsICJBRFMgQ2FkZXQiLCBzaXplb2Yodi0+Y2FyZCkpOwogCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gQ0FERVRfVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPIHwgVjRMMl9DQVBfUkVBRFdSSVRFOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU8gfAorCQkJICBWNEwyX0NBUF9SRUFEV1JJVEUgfCBWNEwyX0NBUF9SRFNfQ0FQVFVSRTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzcyLDcgKzM3Myw3IEBACiAJc3dpdGNoICh2LT5pbmRleCkgewogCWNhc2UgMDoKIAkJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwotCQl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPOworCQl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwgVjRMMl9UVU5FUl9DQVBfUkRTOwogCQl2LT5yYW5nZWxvdyA9IDE0MDA7ICAgICAvKiA4Ny41IE1IeiAqLwogCQl2LT5yYW5nZWhpZ2ggPSAxNzI4OyAgICAvKiAxMDguMCBNSHogKi8KIAkJdi0+cnhzdWJjaGFucyA9IGNhZGV0X2dldHN0ZXJlbyhkZXYpOwpAQCAtMzg2LDYgKzM4Nyw3IEBACiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQorCQl2LT5yeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX1JEUzsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQlzdHJsY3B5KHYtPm5hbWUsICJBTSIsIHNpemVvZih2LT5uYW1lKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg1ZjMxOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg2MyArMCwwIEBACi0vKgotICogIGRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMKLSAqCi0gKiAgRHJpdmVyIGZvciBVU0IgcmFkaW9zIGZvciB0aGUgU2lsaWNvbiBMYWJzIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlcnM6Ci0gKiAgIC0gU2lsaWNvbiBMYWJzIFVTQiBGTSBSYWRpbyBSZWZlcmVuY2UgRGVzaWduCi0gKiAgIC0gQURTL1RlY2ggRk0gUmFkaW8gUmVjZWl2ZXIgKGZvcm1lcmx5IEluc3RhbnQgRk0gTXVzaWMpIChSRFgtMTU1LUVGKQotICogICAtIEtXb3JsZCBVU0IgRk0gUmFkaW8gU25hcE11c2ljIE1vYmlsZSA3MDAgKEZNNzAwKQotICogICAtIFNhbmVpIEVsZWN0cmljLCBJbmMuIEZNIFVTQiBSYWRpbyAoc29sZCBhcyBEZWFsRXh0cmVtZS5jb20gUENlYXIpCi0gKgotICogIENvcHlyaWdodCAoYykgMjAwOSBUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0KLS8qCi0gKiBIaXN0b3J5OgotICogMjAwOC0wMS0xMglUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+Ci0gKgkJVmVyc2lvbiAxLjAuMAotICoJCS0gRmlyc3Qgd29ya2luZyB2ZXJzaW9uCi0gKiAyMDA4LTAxLTEzCVRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KLSAqCQlWZXJzaW9uIDEuMC4xCi0gKgkJLSBJbXByb3ZlZCBlcnJvciBoYW5kbGluZywgZXZlcnkgZnVuY3Rpb24gbm93IHJldHVybnMgZXJybm8KLSAqCQktIEltcHJvdmVkIG11bHRpIHVzZXIgYWNjZXNzIChzdGFydC9tdXRlL3N0b3ApCi0gKgkJLSBDaGFubmVsIGRvZXNuJ3QgZ2V0IGxvc3QgYW55bW9yZSBhZnRlciBzdGFydC9tdXRlL3N0b3AKLSAqCQktIFJEUyBzdXBwb3J0IGFkZGVkIChwb2xsaW5nIG1vZGUgdmlhIGludGVycnVwdCBFUCAxKQotICoJCS0gbWFya2VkIGRlZmF1bHQgbW9kdWxlIHBhcmFtZXRlcnMgd2l0aCAqdmFsdWUqCi0gKgkJLSBzd2l0Y2hlZCBmcm9tIGJpdCBzdHJ1Y3RzIHRvIGJpdCBtYXNrcwotICoJCS0gaGVhZGVyIGZpbGUgY2xlYW5lZCBhbmQgaW50ZWdyYXRlZAotICogMjAwOC0wMS0xNAlUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+Ci0gKiAJCVZlcnNpb24gMS4wLjIKLSAqIAkJLSBoZXggdmFsdWVzIGFyZSBub3cgbG93ZXIgY2FzZQotICogCQktIGNvbW1lbnRlZCBVU0IgSUQgZm9yIEFEUy9UZWNoIG1vdmVkIG9uIHRvZG8gbGlzdAotICogCQktIGJsYWNrbGlzdGVkIHNpNDcweCBpbiBoaWQtcXVpcmtzLmMKLSAqIAkJLSByZHMgYnVmZmVyIGhhbmRsaW5nIGZ1bmN0aW9ucyBpbnRlZ3JhdGVkIGludG8gKl93b3JrLCAqX3JlYWQKLSAqIAkJLSByZHNfY29tbWFuZCBpbiBzaTQ3MHhfcG9sbCBleGNoYW5nZWQgYWdhaW5zdCBzaW1wbGUgcmV0dmFsCi0gKiAJCS0gY2hlY2sgZm9yIGZpcm13YXJlIHZlcnNpb24gMTUKLSAqIAkJLSBjb2RlIG9yZGVyIGFuZCBwcm90b3R5cGVzIHN0aWxsIHJlbWFpbiB0aGUgc2FtZQotICogCQktIHNwYWNpbmcgYW5kIGJvdHRvbSBvZiBiYW5kIGNvZGVzIHJlbWFpbiB0aGUgc2FtZQotICogMjAwOC0wMS0xNglUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+Ci0gKgkJVmVyc2lvbiAxLjAuMwotICogCQktIGNvZGUgcmVvcmRlcmVkIHRvIGF2b2lkIGZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqCQktIHN3aXRjaC9jYXNlIGRlZmF1bHRzIGFyZSBub3cgbW9yZSB1c2VyLWZyaWVuZGx5Ci0gKgkJLSB1bmlmaWVkIGNvbW1lbnQgc3R5bGUKLSAqCQktIGFwcGxpZWQgYWxsIGNoZWNrcGF0Y2gucGwgdjEuMTIgc3VnZ2VzdGlvbnMKLSAqCQkgIGV4Y2VwdCB0aGUgd2FybmluZyBhYm91dCB0aGUgdG9vIGxvbmcgbGluZXMgd2l0aCBiaXQgY29tbWVudHMKLSAqCQktIHJlbmFtZWQgRk1SQURJTyB0byBSQURJTyB0byBjdXQgbGluZSBsZW5ndGggKGNoZWNrcGF0Y2gucGwpCi0gKiAyMDA4LTAxLTIyCVRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KLSAqCQlWZXJzaW9uIDEuMC40Ci0gKgkJLSBhdm9pZCBwb3NzLiBsb2NraW5nIHdoZW4gZG9pbmcgY29weV90b191c2VyIHdoaWNoIG1heSBzbGVlcAotICoJCS0gUkRTIGlzIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkIG9uIHJlYWQgbm93Ci0gKgkJLSBjb2RlIGNsZWFuZWQgb2YgdW5uZWNlc3NhcnkgcmRzX2NvbW1hbmRzCi0gKgkJLSBVU0IgVmVuZG9yL1Byb2R1Y3QgSUQgZm9yIEFEUy9UZWNoIEZNIFJhZGlvIFJlY2VpdmVyIHZlcmlmaWVkCi0gKgkJICAodGhhbmtzIHRvIEd1aWxsYXVtZSBSQU1PVVNTRSkKLSAqIDIwMDgtMDEtMjcJVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgotICoJCVZlcnNpb24gMS4wLjUKLSAqCQktIG51bWJlciBvZiBzZWVrX3JldHJpZXMgY2hhbmdlZCB0byB0dW5lX3RpbWVvdXQKLSAqCQktIGZpeGVkIHByb2JsZW0gd2l0aCBpbmNvbXBsZXRlIHR1bmUgb3BlcmF0aW9ucyBieSBvd24gYnVmZmVycwotICoJCS0gb3B0aW1pemF0aW9uIG9mIHZhcmlhYmxlcyBhbmQgcHJpbnRmIHR5cGVzCi0gKgkJLSBpbXByb3ZlZCBlcnJvciBsb2dnaW5nCi0gKiAyMDA4LTAxLTMxCVRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KLSAqCQlPbGl2ZXIgTmV1a3VtIDxvbGl2ZXJAbmV1a3VtLm9yZz4KLSAqCQlWZXJzaW9uIDEuMC42Ci0gKgkJLSBmaXhlZCBjb3Zlcml0eSBjaGVja2VyIHdhcm5pbmdzIGluICpfdXNiX2RyaXZlcl9kaXNjb25uZWN0Ci0gKgkJLSBwcm9iZSgpL29wZW4oKSByYWNlIGJ5IGNvcnJlY3Qgb3JkZXJpbmcgaW4gcHJvYmUoKQotICoJCS0gRE1BIGNvaGVyZW5jeSBydWxlcyBieSBzZXBhcmF0ZSBhbGxvY2F0aW9uIG9mIGFsbCBidWZmZXJzCi0gKgkJLSB1c2Ugb2YgZW5kaWFubmVzcyBtYWNyb3MKLSAqCQktIGFidXNlIG9mIHNwaW5sb2NrLCByZXBsYWNlZCBieSBtdXRleAotICoJCS0gcmFjeSBoYW5kbGluZyBvZiB0aW1lciBpbiBkaXNjb25uZWN0LAotICoJCSAgcmVwbGFjZWQgYnkgZGVsYXllZF93b3JrCi0gKgkJLSByYWN5IGludGVycnVwdGlibGVfc2xlZXBfb24oKSwKLSAqCQkgIHJlcGxhY2VkIHdpdGggd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCkKLSAqCQktIGhhbmRsZSBzaWduYWxzIGluIHJlYWQoKQotICogMjAwOC0wMi0wOAlUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+Ci0gKgkJT2xpdmVyIE5ldWt1bSA8b2xpdmVyQG5ldWt1bS5vcmc+Ci0gKgkJVmVyc2lvbiAxLjAuNwotICoJCS0gdXNiIGF1dG9zdXNwZW5kIHN1cHBvcnQKLSAqCQktIHVucGx1Z2dpbmcgZml4ZWQKLSAqIDIwMDgtMDUtMDcJVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgotICoJCVZlcnNpb24gMS4wLjgKLSAqCQktIGhhcmR3YXJlIGZyZXF1ZW5jeSBzZWVrIHN1cHBvcnQKLSAqCQktIGFmYyBpbmRpY2F0aW9uCi0gKgkJLSBtb3JlIHNhZmV0eSBjaGVja3MsIGxldCBzaTQ3MHhfZ2V0X2ZyZXEgcmV0dXJuIGVycm5vCi0gKgkJLSB2aWRpb2MgYmVoYXZpb3IgY29ycmVjdGVkIGFjY29yZGluZyB0byB2NGwyIHNwZWMKLSAqIDIwMDgtMTAtMjAJQWxleGV5IEtsaW1vdiA8a2xpbW92LmxpbnV4QGdtYWlsLmNvbT4KLSAqIAkJLSBhZGQgc3VwcG9ydCBmb3IgS1dvcmxkIFVTQiBGTSBSYWRpbyBGTTcwMAotICogCQktIGJsYWNrbGlzdGVkIEtXb3JsZCByYWRpbyBpbiBoaWQtY29yZS5jIGFuZCBoaWQtaWRzLmgKLSAqIDIwMDgtMTItMDMJTWFyayBMb3JkIDxtbG9yZEBwb2JveC5jb20+Ci0gKgkJLSBhZGQgc3VwcG9ydCBmb3IgRGVhbEV4dHJlbWUgVVNCIFJhZGlvCi0gKiAyMDA5LTAxLTMxCUJvYiBSb3NzIDxwaWdpcm9uQGdteC5jb20+Ci0gKgkJLSBjb3JyZWN0aW9uIG9mIHN0ZXJlbyBkZXRlY3Rpb24vc2V0dGluZwotICoJCS0gY29ycmVjdGlvbiBvZiBzaWduYWwgc3RyZW5ndGggaW5kaWNhdG9yIHNjYWxpbmcKLSAqIDIwMDktMDEtMzEJUmljayBCcm9uc29uIDxyaWNrQGVmbi5vcmc+Ci0gKgkJVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgotICoJCS0gYWRkIExFRCBzdGF0dXMgb3V0cHV0Ci0gKgkJLSBnZXQgSFcvU1cgdmVyc2lvbiBmcm9tIHNjcmF0Y2hwYWQKLSAqCi0gKiBUb0RvOgotICogLSBhZGQgZmlybXdhcmUgZG93bmxvYWQvdXBkYXRlIHN1cHBvcnQKLSAqIC0gUkRTIHN1cHBvcnQ6IGludGVycnVwdCBtb2RlLCBpbnN0ZWFkIG9mIHBvbGxpbmcKLSAqLwotCi0KLS8qIGRyaXZlciBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBEUklWRVJfQVVUSE9SICJUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+IgotI2RlZmluZSBEUklWRVJfTkFNRSAicmFkaW8tc2k0NzB4IgotI2RlZmluZSBEUklWRVJfS0VSTkVMX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMSwgMCwgOSkKLSNkZWZpbmUgRFJJVkVSX0NBUkQgIlNpbGljb24gTGFicyBTaTQ3MHggRk0gUmFkaW8gUmVjZWl2ZXIiCi0jZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgcmFkaW8gZHJpdmVyIGZvciBTaTQ3MHggRk0gUmFkaW8gUmVjZWl2ZXJzIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS4wLjkiCi0KLQotLyoga2VybmVsIGluY2x1ZGVzICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bWVkaWEvcmRzLmg+Ci0jaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgotCi0KLS8qIFVTQiBEZXZpY2UgSUQgTGlzdCAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNpNDcweF91c2JfZHJpdmVyX2lkX3RhYmxlW10gPSB7Ci0JLyogU2lsaWNvbiBMYWJzIFVTQiBGTSBSYWRpbyBSZWZlcmVuY2UgRGVzaWduICovCi0JeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDEwYzQsIDB4ODE4YSwgVVNCX0NMQVNTX0hJRCwgMCwgMCkgfSwKLQkvKiBBRFMvVGVjaCBGTSBSYWRpbyBSZWNlaXZlciAoZm9ybWVybHkgSW5zdGFudCBGTSBNdXNpYykgKi8KLQl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MDZlMSwgMHhhMTU1LCBVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAotCS8qIEtXb3JsZCBVU0IgRk0gUmFkaW8gU25hcE11c2ljIE1vYmlsZSA3MDAgKEZNNzAwKSAqLwotCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgxYjgwLCAweGQ3MDAsIFVTQl9DTEFTU19ISUQsIDAsIDApIH0sCi0JLyogU2FuZWkgRWxlY3RyaWMsIEluYy4gRk0gVVNCIFJhZGlvIChzb2xkIGFzIERlYWxFeHRyZW1lLmNvbSBQQ2VhcikgKi8KLQl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MTBjNSwgMHg4MTlhLCBVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAotCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHNpNDcweF91c2JfZHJpdmVyX2lkX3RhYmxlKTsKLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogTW9kdWxlIFBhcmFtZXRlcnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogUmFkaW8gTnIgKi8KLXN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJSYWRpbyBOciIpOwotCi0vKiBTcGFjaW5nIChrSHopICovCi0vKiAwOiAyMDAga0h6IChVU0EsIEF1c3RyYWxpYSkgKi8KLS8qIDE6IDEwMCBrSHogKEV1cm9wZSwgSmFwYW4pICovCi0vKiAyOiAgNTAga0h6ICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgc3BhY2UgPSAyOwotbW9kdWxlX3BhcmFtKHNwYWNlLCB1c2hvcnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhzcGFjZSwgIlNwYWNpbmc6IDA9MjAwa0h6IDE9MTAwa0h6ICoyPTUwa0h6KiIpOwotCi0vKiBCb3R0b20gb2YgQmFuZCAoTUh6KSAqLwotLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlKSovCi0vKiAxOiA3NiAgIC0gMTA4IE1IeiAoSmFwYW4gd2lkZSBiYW5kKSAqLwotLyogMjogNzYgICAtICA5MCBNSHogKEphcGFuKSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IGJhbmQgPSAxOwotbW9kdWxlX3BhcmFtKGJhbmQsIHVzaG9ydCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGJhbmQsICJCYW5kOiAwPTg3LjUuLjEwOE1IeiAqMT03Ni4uMTA4TUh6KiAyPTc2Li45ME1IeiIpOwotCi0vKiBEZS1lbXBoYXNpcyAqLwotLyogMDogNzUgdXMgKFVTQSkgKi8KLS8qIDE6IDUwIHVzIChFdXJvcGUsIEF1c3RyYWxpYSwgSmFwYW4pICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgZGUgPSAxOwotbW9kdWxlX3BhcmFtKGRlLCB1c2hvcnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZSwgIkRlLWVtcGhhc2lzOiAwPTc1dXMgKjE9NTB1cyoiKTsKLQotLyogVVNCIHRpbWVvdXQgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXNiX3RpbWVvdXQgPSA1MDA7Ci1tb2R1bGVfcGFyYW0odXNiX3RpbWVvdXQsIHVpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyh1c2JfdGltZW91dCwgIlVTQiB0aW1lb3V0IChtcyk6ICo1MDAqIik7Ci0KLS8qIFR1bmUgdGltZW91dCAqLwotc3RhdGljIHVuc2lnbmVkIGludCB0dW5lX3RpbWVvdXQgPSAzMDAwOwotbW9kdWxlX3BhcmFtKHR1bmVfdGltZW91dCwgdWludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHR1bmVfdGltZW91dCwgIlR1bmUgdGltZW91dDogKjMwMDAqIik7Ci0KLS8qIFNlZWsgdGltZW91dCAqLwotc3RhdGljIHVuc2lnbmVkIGludCBzZWVrX3RpbWVvdXQgPSA1MDAwOwotbW9kdWxlX3BhcmFtKHNlZWtfdGltZW91dCwgdWludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHNlZWtfdGltZW91dCwgIlNlZWsgdGltZW91dDogKjUwMDAqIik7Ci0KLS8qIFJEUyBidWZmZXIgYmxvY2tzICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHJkc19idWYgPSAxMDA7Ci1tb2R1bGVfcGFyYW0ocmRzX2J1ZiwgdWludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJkc19idWYsICJSRFMgYnVmZmVyIGVudHJpZXM6ICoxMDAqIik7Ci0KLS8qIFJEUyBtYXhpbXVtIGJsb2NrIGVycm9ycyAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heF9yZHNfZXJyb3JzID0gMTsKLS8qIDAgbWVhbnMgICAwICBlcnJvcnMgcmVxdWlyaW5nIGNvcnJlY3Rpb24gKi8KLS8qIDEgbWVhbnMgMS0yICBlcnJvcnMgcmVxdWlyaW5nIGNvcnJlY3Rpb24gKHVzZWQgYnkgb3JpZ2luYWwgVVNCUmFkaW8uZXhlKSAqLwotLyogMiBtZWFucyAzLTUgIGVycm9ycyByZXF1aXJpbmcgY29ycmVjdGlvbiAqLwotLyogMyBtZWFucyAgIDYrIGVycm9ycyBvciBlcnJvcnMgaW4gY2hlY2t3b3JkLCBjb3JyZWN0aW9uIG5vdCBwb3NzaWJsZSAqLwotbW9kdWxlX3BhcmFtKG1heF9yZHNfZXJyb3JzLCB1c2hvcnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhtYXhfcmRzX2Vycm9ycywgIlJEUyBtYXhpbXVtIGJsb2NrIGVycm9yczogKjEqIik7Ci0KLS8qIFJEUyBwb2xsIGZyZXF1ZW5jeSAqLwotc3RhdGljIHVuc2lnbmVkIGludCByZHNfcG9sbF90aW1lID0gNDA7Ci0vKiA0MCBpcyB1c2VkIGJ5IHRoZSBvcmlnaW5hbCBVU0JSYWRpby5leGUgKi8KLS8qIDUwIGlzIHVzZWQgYnkgcmFkaW8tY2FkZXQgKi8KLS8qIDc1IHNob3VsZCBiZSBva2F5ICovCi0vKiA4MCBpcyB0aGUgdXN1YWwgUkRTIHJlY2VpdmUgaW50ZXJ2YWwgKi8KLW1vZHVsZV9wYXJhbShyZHNfcG9sbF90aW1lLCB1aW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocmRzX3BvbGxfdGltZSwgIlJEUyBwb2xsIHRpbWUgKG1zKTogKjQwKiIpOwotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSZWdpc3RlciBEZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBSQURJT19SRUdJU1RFUl9TSVpFCTIJLyogMTYgcmVnaXN0ZXIgYml0IHdpZHRoICovCi0jZGVmaW5lIFJBRElPX1JFR0lTVEVSX05VTQkxNgkvKiBERVZJQ0VJRCAgIC4uLiBSRFNEICovCi0jZGVmaW5lIFJEU19SRUdJU1RFUl9OVU0JNgkvKiBTVEFUVVNSU1NJIC4uLiBSRFNEICovCi0KLSNkZWZpbmUgREVWSUNFSUQJCTAJLyogRGV2aWNlIElEICovCi0jZGVmaW5lIERFVklDRUlEX1BOCQkweGYwMDAJLyogYml0cyAxNS4uMTI6IFBhcnQgTnVtYmVyICovCi0jZGVmaW5lIERFVklDRUlEX01GR0lECQkweDBmZmYJLyogYml0cyAxMS4uMDA6IE1hbnVmYWN0dXJlciBJRCAqLwotCi0jZGVmaW5lIENISVBJRAkJCTEJLyogQ2hpcCBJRCAqLwotI2RlZmluZSBDSElQSURfUkVWCQkweGZjMDAJLyogYml0cyAxNS4uMTA6IENoaXAgVmVyc2lvbiAqLwotI2RlZmluZSBDSElQSURfREVWCQkweDAyMDAJLyogYml0cyAwOS4uMDk6IERldmljZSAqLwotI2RlZmluZSBDSElQSURfRklSTVdBUkUJCTB4MDFmZgkvKiBiaXRzIDA4Li4wMDogRmlybXdhcmUgVmVyc2lvbiAqLwotCi0jZGVmaW5lIFBPV0VSQ0ZHCQkyCS8qIFBvd2VyIENvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgUE9XRVJDRkdfRFNNVVRFCQkweDgwMDAJLyogYml0cyAxNS4uMTU6IFNvZnRtdXRlIERpc2FibGUgKi8KLSNkZWZpbmUgUE9XRVJDRkdfRE1VVEUJCTB4NDAwMAkvKiBiaXRzIDE0Li4xNDogTXV0ZSBEaXNhYmxlICovCi0jZGVmaW5lIFBPV0VSQ0ZHX01PTk8JCTB4MjAwMAkvKiBiaXRzIDEzLi4xMzogTW9ubyBTZWxlY3QgKi8KLSNkZWZpbmUgUE9XRVJDRkdfUkRTTQkJMHgwODAwCS8qIGJpdHMgMTEuLjExOiBSRFMgTW9kZSAoU2k0NzAxIG9ubHkpICovCi0jZGVmaW5lIFBPV0VSQ0ZHX1NLTU9ERQkJMHgwNDAwCS8qIGJpdHMgMTAuLjEwOiBTZWVrIE1vZGUgKi8KLSNkZWZpbmUgUE9XRVJDRkdfU0VFS1VQCQkweDAyMDAJLyogYml0cyAwOS4uMDk6IFNlZWsgRGlyZWN0aW9uICovCi0jZGVmaW5lIFBPV0VSQ0ZHX1NFRUsJCTB4MDEwMAkvKiBiaXRzIDA4Li4wODogU2VlayAqLwotI2RlZmluZSBQT1dFUkNGR19ESVNBQkxFCTB4MDA0MAkvKiBiaXRzIDA2Li4wNjogUG93ZXJ1cCBEaXNhYmxlICovCi0jZGVmaW5lIFBPV0VSQ0ZHX0VOQUJMRQkJMHgwMDAxCS8qIGJpdHMgMDAuLjAwOiBQb3dlcnVwIEVuYWJsZSAqLwotCi0jZGVmaW5lIENIQU5ORUwJCQkzCS8qIENoYW5uZWwgKi8KLSNkZWZpbmUgQ0hBTk5FTF9UVU5FCQkweDgwMDAJLyogYml0cyAxNS4uMTU6IFR1bmUgKi8KLSNkZWZpbmUgQ0hBTk5FTF9DSEFOCQkweDAzZmYJLyogYml0cyAwOS4uMDA6IENoYW5uZWwgU2VsZWN0ICovCi0KLSNkZWZpbmUgU1lTQ09ORklHMQkJNAkvKiBTeXN0ZW0gQ29uZmlndXJhdGlvbiAxICovCi0jZGVmaW5lIFNZU0NPTkZJRzFfUkRTSUVOCTB4ODAwMAkvKiBiaXRzIDE1Li4xNTogUkRTIEludGVycnVwdCBFbmFibGUgKFNpNDcwMSBvbmx5KSAqLwotI2RlZmluZSBTWVNDT05GSUcxX1NUQ0lFTgkweDQwMDAJLyogYml0cyAxNC4uMTQ6IFNlZWsvVHVuZSBDb21wbGV0ZSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIFNZU0NPTkZJRzFfUkRTCQkweDEwMDAJLyogYml0cyAxMi4uMTI6IFJEUyBFbmFibGUgKFNpNDcwMSBvbmx5KSAqLwotI2RlZmluZSBTWVNDT05GSUcxX0RFCQkweDA4MDAJLyogYml0cyAxMS4uMTE6IERlLWVtcGhhc2lzICgwPTc1dXMgMT01MHVzKSAqLwotI2RlZmluZSBTWVNDT05GSUcxX0FHQ0QJCTB4MDQwMAkvKiBiaXRzIDEwLi4xMDogQUdDIERpc2FibGUgKi8KLSNkZWZpbmUgU1lTQ09ORklHMV9CTE5EQURKCTB4MDBjMAkvKiBiaXRzIDA3Li4wNjogU3RlcmVvL01vbm8gQmxlbmQgTGV2ZWwgQWRqdXN0bWVudCAqLwotI2RlZmluZSBTWVNDT05GSUcxX0dQSU8zCTB4MDAzMAkvKiBiaXRzIDA1Li4wNDogR2VuZXJhbCBQdXJwb3NlIEkvTyAzICovCi0jZGVmaW5lIFNZU0NPTkZJRzFfR1BJTzIJMHgwMDBjCS8qIGJpdHMgMDMuLjAyOiBHZW5lcmFsIFB1cnBvc2UgSS9PIDIgKi8KLSNkZWZpbmUgU1lTQ09ORklHMV9HUElPMQkweDAwMDMJLyogYml0cyAwMS4uMDA6IEdlbmVyYWwgUHVycG9zZSBJL08gMSAqLwotCi0jZGVmaW5lIFNZU0NPTkZJRzIJCTUJLyogU3lzdGVtIENvbmZpZ3VyYXRpb24gMiAqLwotI2RlZmluZSBTWVNDT05GSUcyX1NFRUtUSAkweGZmMDAJLyogYml0cyAxNS4uMDg6IFJTU0kgU2VlayBUaHJlc2hvbGQgKi8KLSNkZWZpbmUgU1lTQ09ORklHMl9CQU5ECQkweDAwODAJLyogYml0cyAwNy4uMDY6IEJhbmQgU2VsZWN0ICovCi0jZGVmaW5lIFNZU0NPTkZJRzJfU1BBQ0UJMHgwMDMwCS8qIGJpdHMgMDUuLjA0OiBDaGFubmVsIFNwYWNpbmcgKi8KLSNkZWZpbmUgU1lTQ09ORklHMl9WT0xVTUUJMHgwMDBmCS8qIGJpdHMgMDMuLjAwOiBWb2x1bWUgKi8KLQotI2RlZmluZSBTWVNDT05GSUczCQk2CS8qIFN5c3RlbSBDb25maWd1cmF0aW9uIDMgKi8KLSNkZWZpbmUgU1lTQ09ORklHM19TTVVURVIJMHhjMDAwCS8qIGJpdHMgMTUuLjE0OiBTb2Z0bXV0ZSBBdHRhY2svUmVjb3ZlciBSYXRlICovCi0jZGVmaW5lIFNZU0NPTkZJRzNfU01VVEVBCTB4MzAwMAkvKiBiaXRzIDEzLi4xMjogU29mdG11dGUgQXR0ZW51YXRpb24gKi8KLSNkZWZpbmUgU1lTQ09ORklHM19TS1NOUgkweDAwZjAJLyogYml0cyAwNy4uMDQ6IFNlZWsgU05SIFRocmVzaG9sZCAqLwotI2RlZmluZSBTWVNDT05GSUczX1NLQ05UCTB4MDAwZgkvKiBiaXRzIDAzLi4wMDogU2VlayBGTSBJbXB1bHNlIERldGVjdGlvbiBUaHJlc2hvbGQgKi8KLQotI2RlZmluZSBURVNUMQkJCTcJLyogVGVzdCAxICovCi0jZGVmaW5lIFRFU1QxX0FISVpFTgkJMHg0MDAwCS8qIGJpdHMgMTQuLjE0OiBBdWRpbyBIaWdoLVogRW5hYmxlICovCi0KLSNkZWZpbmUgVEVTVDIJCQk4CS8qIFRlc3QgMiAqLwotLyogVEVTVDIgb25seSBjb250YWlucyByZXNlcnZlZCBiaXRzICovCi0KLSNkZWZpbmUgQk9PVENPTkZJRwkJOQkvKiBCb290IENvbmZpZ3VyYXRpb24gKi8KLS8qIEJPT1RDT05GSUcgb25seSBjb250YWlucyByZXNlcnZlZCBiaXRzICovCi0KLSNkZWZpbmUgU1RBVFVTUlNTSQkJMTAJLyogU3RhdHVzIFJTU0kgKi8KLSNkZWZpbmUgU1RBVFVTUlNTSV9SRFNSCQkweDgwMDAJLyogYml0cyAxNS4uMTU6IFJEUyBSZWFkeSAoU2k0NzAxIG9ubHkpICovCi0jZGVmaW5lIFNUQVRVU1JTU0lfU1RDCQkweDQwMDAJLyogYml0cyAxNC4uMTQ6IFNlZWsvVHVuZSBDb21wbGV0ZSAqLwotI2RlZmluZSBTVEFUVVNSU1NJX1NGCQkweDIwMDAJLyogYml0cyAxMy4uMTM6IFNlZWsgRmFpbC9CYW5kIExpbWl0ICovCi0jZGVmaW5lIFNUQVRVU1JTU0lfQUZDUkwJMHgxMDAwCS8qIGJpdHMgMTIuLjEyOiBBRkMgUmFpbCAqLwotI2RlZmluZSBTVEFUVVNSU1NJX1JEU1MJCTB4MDgwMAkvKiBiaXRzIDExLi4xMTogUkRTIFN5bmNocm9uaXplZCAoU2k0NzAxIG9ubHkpICovCi0jZGVmaW5lIFNUQVRVU1JTU0lfQkxFUkEJMHgwNjAwCS8qIGJpdHMgMTAuLjA5OiBSRFMgQmxvY2sgQSBFcnJvcnMgKFNpNDcwMSBvbmx5KSAqLwotI2RlZmluZSBTVEFUVVNSU1NJX1NUCQkweDAxMDAJLyogYml0cyAwOC4uMDg6IFN0ZXJlbyBJbmRpY2F0b3IgKi8KLSNkZWZpbmUgU1RBVFVTUlNTSV9SU1NJCQkweDAwZmYJLyogYml0cyAwNy4uMDA6IFJTU0kgKFJlY2VpdmVkIFNpZ25hbCBTdHJlbmd0aCBJbmRpY2F0b3IpICovCi0KLSNkZWZpbmUgUkVBRENIQU4JCTExCS8qIFJlYWQgQ2hhbm5lbCAqLwotI2RlZmluZSBSRUFEQ0hBTl9CTEVSQgkJMHhjMDAwCS8qIGJpdHMgMTUuLjE0OiBSRFMgQmxvY2sgRCBFcnJvcnMgKFNpNDcwMSBvbmx5KSAqLwotI2RlZmluZSBSRUFEQ0hBTl9CTEVSQwkJMHgzMDAwCS8qIGJpdHMgMTMuLjEyOiBSRFMgQmxvY2sgQyBFcnJvcnMgKFNpNDcwMSBvbmx5KSAqLwotI2RlZmluZSBSRUFEQ0hBTl9CTEVSRAkJMHgwYzAwCS8qIGJpdHMgMTEuLjEwOiBSRFMgQmxvY2sgQiBFcnJvcnMgKFNpNDcwMSBvbmx5KSAqLwotI2RlZmluZSBSRUFEQ0hBTl9SRUFEQ0hBTgkweDAzZmYJLyogYml0cyAwOS4uMDA6IFJlYWQgQ2hhbm5lbCAqLwotCi0jZGVmaW5lIFJEU0EJCQkxMgkvKiBSRFNBICovCi0jZGVmaW5lIFJEU0FfUkRTQQkJMHhmZmZmCS8qIGJpdHMgMTUuLjAwOiBSRFMgQmxvY2sgQSBEYXRhIChTaTQ3MDEgb25seSkgKi8KLQotI2RlZmluZSBSRFNCCQkJMTMJLyogUkRTQiAqLwotI2RlZmluZSBSRFNCX1JEU0IJCTB4ZmZmZgkvKiBiaXRzIDE1Li4wMDogUkRTIEJsb2NrIEIgRGF0YSAoU2k0NzAxIG9ubHkpICovCi0KLSNkZWZpbmUgUkRTQwkJCTE0CS8qIFJEU0MgKi8KLSNkZWZpbmUgUkRTQ19SRFNDCQkweGZmZmYJLyogYml0cyAxNS4uMDA6IFJEUyBCbG9jayBDIERhdGEgKFNpNDcwMSBvbmx5KSAqLwotCi0jZGVmaW5lIFJEU0QJCQkxNQkvKiBSRFNEICovCi0jZGVmaW5lIFJEU0RfUkRTRAkJMHhmZmZmCS8qIGJpdHMgMTUuLjAwOiBSRFMgQmxvY2sgRCBEYXRhIChTaTQ3MDEgb25seSkgKi8KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVVNCIEhJRCBSZXBvcnRzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFJlcG9ydHMgMS0xNiBnaXZlIGRpcmVjdCByZWFkL3dyaXRlIGFjY2VzcyB0byB0aGUgMTYgU2k0NzB4IHJlZ2lzdGVycyAqLwotLyogd2l0aCB0aGUgKFJFUE9SVF9JRCAtIDEpIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlZ2lzdGVyIGFkZHJlc3MgYWNyb3NzIFVTQiAqLwotLyogZW5kcG9pbnQgMCB1c2luZyBHRVRfUkVQT1JUIGFuZCBTRVRfUkVQT1JUICovCi0jZGVmaW5lIFJFR0lTVEVSX1JFUE9SVF9TSVpFCShSQURJT19SRUdJU1RFUl9TSVpFICsgMSkKLSNkZWZpbmUgUkVHSVNURVJfUkVQT1JUKHJlZykJKChyZWcpICsgMSkKLQotLyogUmVwb3J0IDE3IGdpdmVzIGRpcmVjdCByZWFkL3dyaXRlIGFjY2VzcyB0byB0aGUgZW50aXJlIFNpNDcweCByZWdpc3RlciAqLwotLyogbWFwIGFjcm9zcyBlbmRwb2ludCAwIHVzaW5nIEdFVF9SRVBPUlQgYW5kIFNFVF9SRVBPUlQgKi8KLSNkZWZpbmUgRU5USVJFX1JFUE9SVF9TSVpFCShSQURJT19SRUdJU1RFUl9OVU0gKiBSQURJT19SRUdJU1RFUl9TSVpFICsgMSkKLSNkZWZpbmUgRU5USVJFX1JFUE9SVAkJMTcKLQotLyogUmVwb3J0IDE4IGlzIHVzZWQgdG8gc2VuZCB0aGUgbG93ZXN0IDYgU2k0NzB4IHJlZ2lzdGVycyB1cCB0aGUgSElEICovCi0vKiBpbnRlcnJ1cHQgZW5kcG9pbnQgMSB0byBXaW5kb3dzIGV2ZXJ5IDIwIG1pbGxpc2Vjb25kcyBmb3Igc3RhdHVzICovCi0jZGVmaW5lIFJEU19SRVBPUlRfU0laRQkJKFJEU19SRUdJU1RFUl9OVU0gKiBSQURJT19SRUdJU1RFUl9TSVpFICsgMSkKLSNkZWZpbmUgUkRTX1JFUE9SVAkJMTgKLQotLyogUmVwb3J0IDE5OiBMRUQgc3RhdGUgKi8KLSNkZWZpbmUgTEVEX1JFUE9SVF9TSVpFCQkzCi0jZGVmaW5lIExFRF9SRVBPUlQJCTE5Ci0KLS8qIFJlcG9ydCAxOTogc3RyZWFtICovCi0jZGVmaW5lIFNUUkVBTV9SRVBPUlRfU0laRQkzCi0jZGVmaW5lIFNUUkVBTV9SRVBPUlQJCTE5Ci0KLS8qIFJlcG9ydCAyMDogc2NyYXRjaCAqLwotI2RlZmluZSBTQ1JBVENIX1BBR0VfU0laRQk2MwotI2RlZmluZSBTQ1JBVENIX1JFUE9SVF9TSVpFCShTQ1JBVENIX1BBR0VfU0laRSArIDEpCi0jZGVmaW5lIFNDUkFUQ0hfUkVQT1JUCQkyMAotCi0vKiBSZXBvcnRzIDE5LTIyOiBmbGFzaCB1cGdyYWRlIG9mIHRoZSBDODA1MUYzMjEgKi8KLSNkZWZpbmUgV1JJVEVfUkVQT1JUX1NJWkUJNAotI2RlZmluZSBXUklURV9SRVBPUlQJCTE5Ci0jZGVmaW5lIEZMQVNIX1JFUE9SVF9TSVpFCTY0Ci0jZGVmaW5lIEZMQVNIX1JFUE9SVAkJMjAKLSNkZWZpbmUgQ1JDX1JFUE9SVF9TSVpFCQkzCi0jZGVmaW5lIENSQ19SRVBPUlQJCTIxCi0jZGVmaW5lIFJFU1BPTlNFX1JFUE9SVF9TSVpFCTIKLSNkZWZpbmUgUkVTUE9OU0VfUkVQT1JUCQkyMgotCi0vKiBSZXBvcnQgMjM6IGN1cnJlbnRseSB1bnVzZWQsIGJ1dCBjYW4gYWNjZXB0IDYwIGJ5dGUgcmVwb3J0cyBvbiB0aGUgSElEICovCi0vKiBpbnRlcnJ1cHQgb3V0IGVuZHBvaW50IDIgZXZlcnkgMSBtaWxsaXNlY29uZCAqLwotI2RlZmluZSBVTlVTRURfUkVQT1JUCQkyMwotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTb2Z0d2FyZS9IYXJkd2FyZSBWZXJzaW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBSQURJT19TV19WRVJTSU9OX05PVF9CT09UTE9BREFCTEUJNgotI2RlZmluZSBSQURJT19TV19WRVJTSU9OCQkJNwotI2RlZmluZSBSQURJT19TV19WRVJTSU9OX0NVUlJFTlQJCTE1Ci0jZGVmaW5lIFJBRElPX0hXX1ZFUlNJT04JCQkxCi0KLSNkZWZpbmUgU0NSQVRDSF9QQUdFX1NXX1ZFUlNJT04JMQotI2RlZmluZSBTQ1JBVENIX1BBR0VfSFdfVkVSU0lPTgkyCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIExFRCBTdGF0ZSBEZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBMRURfQ09NTUFORAkJMHgzNQotCi0jZGVmaW5lIE5PX0NIQU5HRV9MRUQJCTB4MDAKLSNkZWZpbmUgQUxMX0NPTE9SX0xFRAkJMHgwMQkvKiBzdHJlYW1pbmcgc3RhdGUgKi8KLSNkZWZpbmUgQkxJTktfR1JFRU5fTEVECQkweDAyCS8qIGNvbm5lY3Qgc3RhdGUgKi8KLSNkZWZpbmUgQkxJTktfUkVEX0xFRAkJMHgwNAotI2RlZmluZSBCTElOS19PUkFOR0VfTEVECTB4MTAJLyogZGlzY29ubmVjdCBzdGF0ZSAqLwotI2RlZmluZSBTT0xJRF9HUkVFTl9MRUQJCTB4MjAJLyogdHVuaW5nL3NlZWtpbmcgc3RhdGUgKi8KLSNkZWZpbmUgU09MSURfUkVEX0xFRAkJMHg0MAkvKiBib290bG9hZCBzdGF0ZSAqLwotI2RlZmluZSBTT0xJRF9PUkFOR0VfTEVECTB4ODAKLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU3RyZWFtIFN0YXRlIERlZmluaXRpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFNUUkVBTV9DT01NQU5ECTB4MzYKLSNkZWZpbmUgU1RSRUFNX1ZJRFBJRAkweDAwCi0jZGVmaW5lIFNUUkVBTV9BVURJTwkweGZmCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEJvb3Rsb2FkZXIgLyBGbGFzaCBDb21tYW5kcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiB1bmlxdWUgaWQgc2VudCB0byBib290bG9hZGVyIGFuZCByZXF1aXJlZCB0byBwdXQgaW50byBhIGJvb3Rsb2FkIHN0YXRlICovCi0jZGVmaW5lIFVOSVFVRV9CTF9JRAkJMHgzNAotCi0vKiBtYXNrIGZvciB0aGUgZmxhc2ggZGF0YSAqLwotI2RlZmluZSBGTEFTSF9EQVRBX01BU0sJCTB4NTUKLQotLyogYm9vdGxvYWRlciBjb21tYW5kcyAqLwotI2RlZmluZSBHRVRfU1dfVkVSU0lPTl9DT01NQU5ECTB4MDAKLSNkZWZpbmUgU0VUX1BBR0VfQ09NTUFORAkweDAxCi0jZGVmaW5lIEVSQVNFX1BBR0VfQ09NTUFORAkweDAyCi0jZGVmaW5lIFdSSVRFX1BBR0VfQ09NTUFORAkweDAzCi0jZGVmaW5lIENSQ19PTl9QQUdFX0NPTU1BTkQJMHgwNAotI2RlZmluZSBSRUFEX0ZMQVNIX0JZVEVfQ09NTUFORAkweDA1Ci0jZGVmaW5lIFJFU0VUX0RFVklDRV9DT01NQU5ECTB4MDYKLSNkZWZpbmUgR0VUX0hXX1ZFUlNJT05fQ09NTUFORAkweDA3Ci0jZGVmaW5lIEJMQU5LCQkJMHhmZgotCi0vKiBib290bG9hZGVyIGNvbW1hbmQgcmVzcG9uc2VzICovCi0jZGVmaW5lIENPTU1BTkRfT0sJCTB4MDEKLSNkZWZpbmUgQ09NTUFORF9GQUlMRUQJCTB4MDIKLSNkZWZpbmUgQ09NTUFORF9QRU5ESU5HCQkweDAzCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdlbmVyYWwgRHJpdmVyIERlZmluaXRpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBzaTQ3MHhfZGV2aWNlIC0gcHJpdmF0ZSBkYXRhCi0gKi8KLXN0cnVjdCBzaTQ3MHhfZGV2aWNlIHsKLQkvKiByZWZlcmVuY2UgdG8gVVNCIGFuZCB2aWRlbyBkZXZpY2UgKi8KLQlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvZGV2OwotCi0JLyogZHJpdmVyIG1hbmFnZW1lbnQgKi8KLQl1bnNpZ25lZCBpbnQgdXNlcnM7Ci0JdW5zaWduZWQgY2hhciBkaXNjb25uZWN0ZWQ7Ci0Jc3RydWN0IG11dGV4IGRpc2Nvbm5lY3RfbG9jazsKLQotCS8qIFNpbGFicyBpbnRlcm5hbCByZWdpc3RlcnMgKDAuLjE1KSAqLwotCXVuc2lnbmVkIHNob3J0IHJlZ2lzdGVyc1tSQURJT19SRUdJU1RFUl9OVU1dOwotCi0JLyogUkRTIHJlY2VpdmUgYnVmZmVyICovCi0Jc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwotCXdhaXRfcXVldWVfaGVhZF90IHJlYWRfcXVldWU7Ci0Jc3RydWN0IG11dGV4IGxvY2s7CQkvKiBidWZmZXIgbG9ja2luZyAqLwotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsJCS8qIHNpemUgaXMgYWx3YXlzIG11bHRpcGxlIG9mIHRocmVlICovCi0JdW5zaWduZWQgaW50IGJ1Zl9zaXplOwotCXVuc2lnbmVkIGludCByZF9pbmRleDsKLQl1bnNpZ25lZCBpbnQgd3JfaW5kZXg7Ci0KLQkvKiBzY3JhdGNoIHBhZ2UgKi8KLQl1bnNpZ25lZCBjaGFyIHNvZnR3YXJlX3ZlcnNpb247Ci0JdW5zaWduZWQgY2hhciBoYXJkd2FyZV92ZXJzaW9uOwotfTsKLQotCi0vKgotICogVGhlIGZyZXF1ZW5jeSBpcyBzZXQgaW4gdW5pdHMgb2YgNjIuNSBIeiB3aGVuIHVzaW5nIFY0TDJfVFVORVJfQ0FQX0xPVywKLSAqIDYyLjUga0h6IG90aGVyd2lzZS4KLSAqIFRoZSB0dW5lciBpcyBhYmxlIHRvIGhhdmUgYSBjaGFubmVsIHNwYWNpbmcgb2YgNTAsIDEwMCBvciAyMDAga0h6LgotICogdHVuZXItPmNhcGFiaWxpdHkgaXMgdGhlcmVmb3JlIHNldCB0byBWNEwyX1RVTkVSX0NBUF9MT1cKLSAqIFRoZSBGUkVRX01VTCBpcyB0aGVuOiAxIE1IeiAvIDYyLjUgSHogPSAxNjAwMAotICovCi0jZGVmaW5lIEZSRVFfTVVMICgxMDAwMDAwIC8gNjIuNSkKLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zIC0gUkVHSVNURVJfUkVQT1JUcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogc2k0NzB4X2dldF9yZXBvcnQgLSByZWNlaXZlIGEgSElEIHJlcG9ydAotICovCi1zdGF0aWMgaW50IHNpNDcweF9nZXRfcmVwb3J0KHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBjaGFyICpyZXBvcnQgPSAodW5zaWduZWQgY2hhciAqKSBidWY7Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LAotCQl1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCi0JCUhJRF9SRVFfR0VUX1JFUE9SVCwKLQkJVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9JTiwKLQkJcmVwb3J0WzBdLCAyLAotCQlidWYsIHNpemUsIHVzYl90aW1lb3V0KTsKLQotCWlmIChyZXR2YWwgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCi0JCQkiOiBzaTQ3MHhfZ2V0X3JlcG9ydDogdXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLAotCQkJcmV0dmFsKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfc2V0X3JlcG9ydCAtIHNlbmQgYSBISUQgcmVwb3J0Ci0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3NldF9yZXBvcnQoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLCB2b2lkICpidWYsIGludCBzaXplKQotewotCXVuc2lnbmVkIGNoYXIgKnJlcG9ydCA9ICh1bnNpZ25lZCBjaGFyICopIGJ1ZjsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsCi0JCXVzYl9zbmRjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKLQkJSElEX1JFUV9TRVRfUkVQT1JULAotCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKLQkJcmVwb3J0WzBdLCAyLAotCQlidWYsIHNpemUsIHVzYl90aW1lb3V0KTsKLQotCWlmIChyZXR2YWwgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCi0JCQkiOiBzaTQ3MHhfc2V0X3JlcG9ydDogdXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLAotCQkJcmV0dmFsKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfZ2V0X3JlZ2lzdGVyIC0gcmVhZCByZWdpc3RlcgotICovCi1zdGF0aWMgaW50IHNpNDcweF9nZXRfcmVnaXN0ZXIoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLCBpbnQgcmVnbnIpCi17Ci0JdW5zaWduZWQgY2hhciBidWZbUkVHSVNURVJfUkVQT1JUX1NJWkVdOwotCWludCByZXR2YWw7Ci0KLQlidWZbMF0gPSBSRUdJU1RFUl9SRVBPUlQocmVnbnIpOwotCi0JcmV0dmFsID0gc2k0NzB4X2dldF9yZXBvcnQocmFkaW8sICh2b2lkICopICZidWYsIHNpemVvZihidWYpKTsKLQotCWlmIChyZXR2YWwgPj0gMCkKLQkJcmFkaW8tPnJlZ2lzdGVyc1tyZWducl0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmJ1ZlsxXSk7Ci0KLQlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF9zZXRfcmVnaXN0ZXIgLSB3cml0ZSByZWdpc3RlcgotICovCi1zdGF0aWMgaW50IHNpNDcweF9zZXRfcmVnaXN0ZXIoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLCBpbnQgcmVnbnIpCi17Ci0JdW5zaWduZWQgY2hhciBidWZbUkVHSVNURVJfUkVQT1JUX1NJWkVdOwotCWludCByZXR2YWw7Ci0KLQlidWZbMF0gPSBSRUdJU1RFUl9SRVBPUlQocmVnbnIpOwotCXB1dF91bmFsaWduZWRfYmUxNihyYWRpby0+cmVnaXN0ZXJzW3JlZ25yXSwgJmJ1ZlsxXSk7Ci0KLQlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlcG9ydChyYWRpbywgKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCi0JcmV0dXJuIChyZXR2YWwgPCAwKSA/IC1FSU5WQUwgOiAwOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfc2V0X2NoYW4gLSBzZXQgdGhlIGNoYW5uZWwKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfc2V0X2NoYW4oc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLCB1bnNpZ25lZCBzaG9ydCBjaGFuKQotewotCWludCByZXR2YWw7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCWJvb2wgdGltZWRfb3V0ID0gMDsKLQotCS8qIHN0YXJ0IHR1bmluZyAqLwotCXJhZGlvLT5yZWdpc3RlcnNbQ0hBTk5FTF0gJj0gfkNIQU5ORUxfQ0hBTjsKLQlyYWRpby0+cmVnaXN0ZXJzW0NIQU5ORUxdIHw9IENIQU5ORUxfVFVORSB8IGNoYW47Ci0JcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgQ0hBTk5FTCk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gZG9uZTsKLQotCS8qIHdhaXQgdGlsbCB0dW5lIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkICovCi0JdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHR1bmVfdGltZW91dCk7Ci0JZG8gewotCQlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlZ2lzdGVyKHJhZGlvLCBTVEFUVVNSU1NJKTsKLQkJaWYgKHJldHZhbCA8IDApCi0JCQlnb3RvIHN0b3A7Ci0JCXRpbWVkX291dCA9IHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCk7Ci0JfSB3aGlsZSAoKChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9TVEMpID09IDApICYmCi0JCSghdGltZWRfb3V0KSk7Ci0JaWYgKChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9TVEMpID09IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUgIjogdHVuZSBkb2VzIG5vdCBjb21wbGV0ZVxuIik7Ci0JaWYgKHRpbWVkX291dCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogdHVuZSB0aW1lZCBvdXQgYWZ0ZXIgJXUgbXNcbiIsIHR1bmVfdGltZW91dCk7Ci0KLXN0b3A6Ci0JLyogc3RvcCB0dW5pbmcgKi8KLQlyYWRpby0+cmVnaXN0ZXJzW0NIQU5ORUxdICY9IH5DSEFOTkVMX1RVTkU7Ci0JcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgQ0hBTk5FTCk7Ci0KLWRvbmU6Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi0vKgotICogc2k0NzB4X2dldF9mcmVxIC0gZ2V0IHRoZSBmcmVxdWVuY3kKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfZ2V0X2ZyZXEoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLCB1bnNpZ25lZCBpbnQgKmZyZXEpCi17Ci0JdW5zaWduZWQgaW50IHNwYWNpbmcsIGJhbmRfYm90dG9tOwotCXVuc2lnbmVkIHNob3J0IGNoYW47Ci0JaW50IHJldHZhbDsKLQotCS8qIFNwYWNpbmcgKGtIeikgKi8KLQlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9TUEFDRSkgPj4gNCkgewotCS8qIDA6IDIwMCBrSHogKFVTQSwgQXVzdHJhbGlhKSAqLwotCWNhc2UgMDoKLQkJc3BhY2luZyA9IDAuMjAwICogRlJFUV9NVUw7IGJyZWFrOwotCS8qIDE6IDEwMCBrSHogKEV1cm9wZSwgSmFwYW4pICovCi0JY2FzZSAxOgotCQlzcGFjaW5nID0gMC4xMDAgKiBGUkVRX01VTDsgYnJlYWs7Ci0JLyogMjogIDUwIGtIeiAqLwotCWRlZmF1bHQ6Ci0JCXNwYWNpbmcgPSAwLjA1MCAqIEZSRVFfTVVMOyBicmVhazsKLQl9OwotCi0JLyogQm90dG9tIG9mIEJhbmQgKE1IeikgKi8KLQlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9CQU5EKSA+PiA2KSB7Ci0JLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlKSAqLwotCWNhc2UgMDoKLQkJYmFuZF9ib3R0b20gPSA4Ny41ICogRlJFUV9NVUw7IGJyZWFrOwotCS8qIDE6IDc2ICAgLSAxMDggTUh6IChKYXBhbiB3aWRlIGJhbmQpICovCi0JZGVmYXVsdDoKLQkJYmFuZF9ib3R0b20gPSA3NiAgICogRlJFUV9NVUw7IGJyZWFrOwotCS8qIDI6IDc2ICAgLSAgOTAgTUh6IChKYXBhbikgKi8KLQljYXNlIDI6Ci0JCWJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKLQl9OwotCi0JLyogcmVhZCBjaGFubmVsICovCi0JcmV0dmFsID0gc2k0NzB4X2dldF9yZWdpc3RlcihyYWRpbywgUkVBRENIQU4pOwotCWNoYW4gPSByYWRpby0+cmVnaXN0ZXJzW1JFQURDSEFOXSAmIFJFQURDSEFOX1JFQURDSEFOOwotCi0JLyogRnJlcXVlbmN5IChNSHopID0gU3BhY2luZyAoa0h6KSB4IENoYW5uZWwgKyBCb3R0b20gb2YgQmFuZCAoTUh6KSAqLwotCSpmcmVxID0gY2hhbiAqIHNwYWNpbmcgKyBiYW5kX2JvdHRvbTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF9zZXRfZnJlcSAtIHNldCB0aGUgZnJlcXVlbmN5Ci0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3NldF9mcmVxKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgdW5zaWduZWQgaW50IGZyZXEpCi17Ci0JdW5zaWduZWQgaW50IHNwYWNpbmcsIGJhbmRfYm90dG9tOwotCXVuc2lnbmVkIHNob3J0IGNoYW47Ci0KLQkvKiBTcGFjaW5nIChrSHopICovCi0Jc3dpdGNoICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSAmIFNZU0NPTkZJRzJfU1BBQ0UpID4+IDQpIHsKLQkvKiAwOiAyMDAga0h6IChVU0EsIEF1c3RyYWxpYSkgKi8KLQljYXNlIDA6Ci0JCXNwYWNpbmcgPSAwLjIwMCAqIEZSRVFfTVVMOyBicmVhazsKLQkvKiAxOiAxMDAga0h6IChFdXJvcGUsIEphcGFuKSAqLwotCWNhc2UgMToKLQkJc3BhY2luZyA9IDAuMTAwICogRlJFUV9NVUw7IGJyZWFrOwotCS8qIDI6ICA1MCBrSHogKi8KLQlkZWZhdWx0OgotCQlzcGFjaW5nID0gMC4wNTAgKiBGUkVRX01VTDsgYnJlYWs7Ci0JfTsKLQotCS8qIEJvdHRvbSBvZiBCYW5kIChNSHopICovCi0Jc3dpdGNoICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSAmIFNZU0NPTkZJRzJfQkFORCkgPj4gNikgewotCS8qIDA6IDg3LjUgLSAxMDggTUh6IChVU0EsIEV1cm9wZSkgKi8KLQljYXNlIDA6Ci0JCWJhbmRfYm90dG9tID0gODcuNSAqIEZSRVFfTVVMOyBicmVhazsKLQkvKiAxOiA3NiAgIC0gMTA4IE1IeiAoSmFwYW4gd2lkZSBiYW5kKSAqLwotCWRlZmF1bHQ6Ci0JCWJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKLQkvKiAyOiA3NiAgIC0gIDkwIE1IeiAoSmFwYW4pICovCi0JY2FzZSAyOgotCQliYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7Ci0JfTsKLQotCS8qIENoYW4gPSBbIEZyZXEgKE1oeikgLSBCb3R0b20gb2YgQmFuZCAoTUh6KSBdIC8gU3BhY2luZyAoa0h6KSAqLwotCWNoYW4gPSAoZnJlcSAtIGJhbmRfYm90dG9tKSAvIHNwYWNpbmc7Ci0KLQlyZXR1cm4gc2k0NzB4X3NldF9jaGFuKHJhZGlvLCBjaGFuKTsKLX0KLQotCi0vKgotICogc2k0NzB4X3NldF9zZWVrIC0gc2V0IHNlZWsKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfc2V0X3NlZWsoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLAotCQl1bnNpZ25lZCBpbnQgd3JhcF9hcm91bmQsIHVuc2lnbmVkIGludCBzZWVrX3Vwd2FyZCkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JYm9vbCB0aW1lZF9vdXQgPSAwOwotCi0JLyogc3RhcnQgc2Vla2luZyAqLwotCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddIHw9IFBPV0VSQ0ZHX1NFRUs7Ci0JaWYgKHdyYXBfYXJvdW5kID09IDEpCi0JCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICY9IH5QT1dFUkNGR19TS01PREU7Ci0JZWxzZQotCQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSB8PSBQT1dFUkNGR19TS01PREU7Ci0JaWYgKHNlZWtfdXB3YXJkID09IDEpCi0JCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddIHw9IFBPV0VSQ0ZHX1NFRUtVUDsKLQllbHNlCi0JCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICY9IH5QT1dFUkNGR19TRUVLVVA7Ci0JcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgUE9XRVJDRkcpOwotCWlmIChyZXR2YWwgPCAwKQotCQlnb3RvIGRvbmU7Ci0KLQkvKiB3YWl0IHRpbGwgc2VlayBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCAqLwotCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhzZWVrX3RpbWVvdXQpOwotCWRvIHsKLQkJcmV0dmFsID0gc2k0NzB4X2dldF9yZWdpc3RlcihyYWRpbywgU1RBVFVTUlNTSSk7Ci0JCWlmIChyZXR2YWwgPCAwKQotCQkJZ290byBzdG9wOwotCQl0aW1lZF9vdXQgPSB0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpOwotCX0gd2hpbGUgKCgocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfU1RDKSA9PSAwKSAmJgotCQkoIXRpbWVkX291dCkpOwotCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfU1RDKSA9PSAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FICI6IHNlZWsgZG9lcyBub3QgY29tcGxldGVcbiIpOwotCWlmIChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9TRikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogc2VlayBmYWlsZWQgLyBiYW5kIGxpbWl0IHJlYWNoZWRcbiIpOwotCWlmICh0aW1lZF9vdXQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKLQkJCSI6IHNlZWsgdGltZWQgb3V0IGFmdGVyICV1IG1zXG4iLCBzZWVrX3RpbWVvdXQpOwotCi1zdG9wOgotCS8qIHN0b3Agc2Vla2luZyAqLwotCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICY9IH5QT1dFUkNGR19TRUVLOwotCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFBPV0VSQ0ZHKTsKLQotZG9uZToKLQkvKiB0cnkgYWdhaW4sIGlmIHRpbWVkIG91dCAqLwotCWlmICgocmV0dmFsID09IDApICYmIHRpbWVkX291dCkKLQkJcmV0dmFsID0gLUVBR0FJTjsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF9zdGFydCAtIHN3aXRjaCBvbiByYWRpbwotICovCi1zdGF0aWMgaW50IHNpNDcweF9zdGFydChzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCi17Ci0JaW50IHJldHZhbDsKLQotCS8qIHBvd2VyY2ZnICovCi0JcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gPQotCQlQT1dFUkNGR19ETVVURSB8IFBPV0VSQ0ZHX0VOQUJMRSB8IFBPV0VSQ0ZHX1JEU007Ci0JcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgUE9XRVJDRkcpOwotCWlmIChyZXR2YWwgPCAwKQotCQlnb3RvIGRvbmU7Ci0KLQkvKiBzeXNjb25maWcgMSAqLwotCXJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gPSBTWVNDT05GSUcxX0RFOwotCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFNZU0NPTkZJRzEpOwotCWlmIChyZXR2YWwgPCAwKQotCQlnb3RvIGRvbmU7Ci0KLQkvKiBzeXNjb25maWcgMiAqLwotCXJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMl0gPQotCQkoMHgzZiAgPDwgOCkgfAkJCQkvKiBTRUVLVEggKi8KLQkJKChiYW5kICA8PCA2KSAmIFNZU0NPTkZJRzJfQkFORCkgIHwJLyogQkFORCAqLwotCQkoKHNwYWNlIDw8IDQpICYgU1lTQ09ORklHMl9TUEFDRSkgfAkvKiBTUEFDRSAqLwotCQkxNTsJCQkJCS8qIFZPTFVNRSAobWF4KSAqLwotCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFNZU0NPTkZJRzIpOwotCWlmIChyZXR2YWwgPCAwKQotCQlnb3RvIGRvbmU7Ci0KLQkvKiByZXNldCBsYXN0IGNoYW5uZWwgKi8KLQlyZXR2YWwgPSBzaTQ3MHhfc2V0X2NoYW4ocmFkaW8sCi0JCXJhZGlvLT5yZWdpc3RlcnNbQ0hBTk5FTF0gJiBDSEFOTkVMX0NIQU4pOwotCi1kb25lOgotCXJldHVybiByZXR2YWw7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF9zdG9wIC0gc3dpdGNoIG9mZiByYWRpbwotICovCi1zdGF0aWMgaW50IHNpNDcweF9zdG9wKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbykKLXsKLQlpbnQgcmV0dmFsOwotCi0JLyogc3lzY29uZmlnIDEgKi8KLQlyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzFdICY9IH5TWVNDT05GSUcxX1JEUzsKLQlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBTWVNDT05GSUcxKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJZ290byBkb25lOwotCi0JLyogcG93ZXJjZmcgKi8KLQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmPSB+UE9XRVJDRkdfRE1VVEU7Ci0JLyogUE9XRVJDRkdfRU5BQkxFIGhhcyB0byBhdXRvbWF0aWNhbGx5IGdvIGxvdyAqLwotCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddIHw9IFBPV0VSQ0ZHX0VOQUJMRSB8CVBPV0VSQ0ZHX0RJU0FCTEU7Ci0JcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgUE9XRVJDRkcpOwotCi1kb25lOgotCXJldHVybiByZXR2YWw7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF9yZHNfb24gLSBzd2l0Y2ggb24gcmRzIHJlY2VwdGlvbgotICovCi1zdGF0aWMgaW50IHNpNDcweF9yZHNfb24oc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQotewotCWludCByZXR2YWw7Ci0KLQkvKiBzeXNjb25maWcgMSAqLwotCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKLQlyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzFdIHw9IFNZU0NPTkZJRzFfUkRTOwotCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFNZU0NPTkZJRzEpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzFdICY9IH5TWVNDT05GSUcxX1JEUzsKLQltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIEVOVElSRV9SRVBPUlQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIHNpNDcweF9nZXRfYWxsX3JlZ2lzdGVycyAtIHJlYWQgZW50aXJlIHJlZ2lzdGVycwotICovCi1zdGF0aWMgaW50IHNpNDcweF9nZXRfYWxsX3JlZ2lzdGVycyhzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCi17Ci0JdW5zaWduZWQgY2hhciBidWZbRU5USVJFX1JFUE9SVF9TSVpFXTsKLQlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGNoYXIgcmVnbnI7Ci0KLQlidWZbMF0gPSBFTlRJUkVfUkVQT1JUOwotCi0JcmV0dmFsID0gc2k0NzB4X2dldF9yZXBvcnQocmFkaW8sICh2b2lkICopICZidWYsIHNpemVvZihidWYpKTsKLQotCWlmIChyZXR2YWwgPj0gMCkKLQkJZm9yIChyZWduciA9IDA7IHJlZ25yIDwgUkFESU9fUkVHSVNURVJfTlVNOyByZWducisrKQotCQkJcmFkaW8tPnJlZ2lzdGVyc1tyZWducl0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoCi0JCQkJJmJ1ZltyZWduciAqIFJBRElPX1JFR0lTVEVSX1NJWkUgKyAxXSk7Ci0KLQlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7Ci19Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIFJEU19SRVBPUlQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVycyAtIHJlYWQgcmRzIHJlZ2lzdGVycwotICovCi1zdGF0aWMgaW50IHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVycyhzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCi17Ci0JdW5zaWduZWQgY2hhciBidWZbUkRTX1JFUE9SVF9TSVpFXTsKLQlpbnQgcmV0dmFsOwotCWludCBzaXplOwotCXVuc2lnbmVkIGNoYXIgcmVnbnI7Ci0KLQlidWZbMF0gPSBSRFNfUkVQT1JUOwotCi0JcmV0dmFsID0gdXNiX2ludGVycnVwdF9tc2cocmFkaW8tPnVzYmRldiwKLQkJdXNiX3JjdmludHBpcGUocmFkaW8tPnVzYmRldiwgMSksCi0JCSh2b2lkICopICZidWYsIHNpemVvZihidWYpLCAmc2l6ZSwgdXNiX3RpbWVvdXQpOwotCWlmIChzaXplICE9IHNpemVvZihidWYpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FICI6IHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVyczogIgotCQkJInJldHVybiBzaXplIGRpZmZlcnM6ICVkICE9ICV6dVxuIiwgc2l6ZSwgc2l6ZW9mKGJ1ZikpOwotCWlmIChyZXR2YWwgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FICI6IHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVyczogIgotCQkJInVzYl9pbnRlcnJ1cHRfbXNnIHJldHVybmVkICVkXG4iLCByZXR2YWwpOwotCi0JaWYgKHJldHZhbCA+PSAwKQotCQlmb3IgKHJlZ25yID0gMDsgcmVnbnIgPCBSRFNfUkVHSVNURVJfTlVNOyByZWducisrKQotCQkJcmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJICsgcmVnbnJdID0KLQkJCQlnZXRfdW5hbGlnbmVkX2JlMTYoCi0JCQkJJmJ1ZltyZWduciAqIFJBRElPX1JFR0lTVEVSX1NJWkUgKyAxXSk7Ci0KLQlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7Ci19Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIExFRF9SRVBPUlQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIHNpNDcweF9zZXRfbGVkX3N0YXRlIC0gc2V0cyB0aGUgbGVkIHN0YXRlCi0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3NldF9sZWRfc3RhdGUoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLAotCQl1bnNpZ25lZCBjaGFyIGxlZF9zdGF0ZSkKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZltMRURfUkVQT1JUX1NJWkVdOwotCWludCByZXR2YWw7Ci0KLQlidWZbMF0gPSBMRURfUkVQT1JUOwotCWJ1ZlsxXSA9IExFRF9DT01NQU5EOwotCWJ1ZlsyXSA9IGxlZF9zdGF0ZTsKLQotCXJldHZhbCA9IHNpNDcweF9zZXRfcmVwb3J0KHJhZGlvLCAodm9pZCAqKSAmYnVmLCBzaXplb2YoYnVmKSk7Ci0KLQlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7Ci19Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIFNDUkFUQ0hfUkVQT1JUCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBzaTQ3MHhfZ2V0X3NjcmF0Y2hfdmVyc2lvbnMgLSBnZXRzIHRoZSBzY3JhdGNoIHBhZ2UgYW5kIHZlcnNpb24gaW5mb3MKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfZ2V0X3NjcmF0Y2hfcGFnZV92ZXJzaW9ucyhzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCi17Ci0JdW5zaWduZWQgY2hhciBidWZbU0NSQVRDSF9SRVBPUlRfU0laRV07Ci0JaW50IHJldHZhbDsKLQotCWJ1ZlswXSA9IFNDUkFUQ0hfUkVQT1JUOwotCi0JcmV0dmFsID0gc2k0NzB4X2dldF9yZXBvcnQocmFkaW8sICh2b2lkICopICZidWYsIHNpemVvZihidWYpKTsKLQotCWlmIChyZXR2YWwgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FICI6IHNpNDcweF9nZXRfc2NyYXRjaDogIgotCQkJInNpNDcweF9nZXRfcmVwb3J0IHJldHVybmVkICVkXG4iLCByZXR2YWwpOwotCWVsc2UgewotCQlyYWRpby0+c29mdHdhcmVfdmVyc2lvbiA9IGJ1ZlsxXTsKLQkJcmFkaW8tPmhhcmR3YXJlX3ZlcnNpb24gPSBidWZbMl07Ci0JfQotCi0JcmV0dXJuIChyZXR2YWwgPCAwKSA/IC1FSU5WQUwgOiAwOwotfQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSRFMgRHJpdmVyIEZ1bmN0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogc2k0NzB4X3JkcyAtIHJkcyBwcm9jZXNzaW5nIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyB2b2lkIHNpNDcweF9yZHMoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQotewotCXVuc2lnbmVkIGNoYXIgYmxvY2tudW07Ci0JdW5zaWduZWQgc2hvcnQgYmxlcjsgLyogcmRzIGJsb2NrIGVycm9ycyAqLwotCXVuc2lnbmVkIHNob3J0IHJkczsKLQl1bnNpZ25lZCBjaGFyIHRtcGJ1ZlszXTsKLQotCS8qIGdldCByZHMgYmxvY2tzICovCi0JaWYgKHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVycyhyYWRpbykgPCAwKQotCQlyZXR1cm47Ci0JaWYgKChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9SRFNSKSA9PSAwKSB7Ci0JCS8qIE5vIFJEUyBncm91cCByZWFkeSAqLwotCQlyZXR1cm47Ci0JfQotCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfUkRTUykgPT0gMCkgewotCQkvKiBSRFMgZGVjb2RlciBub3Qgc3luY2hyb25pemVkICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBjb3B5IGFsbCBmb3VyIFJEUyBibG9ja3MgdG8gaW50ZXJuYWwgYnVmZmVyICovCi0JbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOwotCWZvciAoYmxvY2tudW0gPSAwOyBibG9ja251bSA8IDQ7IGJsb2NrbnVtKyspIHsKLQkJc3dpdGNoIChibG9ja251bSkgewotCQlkZWZhdWx0OgotCQkJYmxlciA9IChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYKLQkJCQkJU1RBVFVTUlNTSV9CTEVSQSkgPj4gOTsKLQkJCXJkcyA9IHJhZGlvLT5yZWdpc3RlcnNbUkRTQV07Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJYmxlciA9IChyYWRpby0+cmVnaXN0ZXJzW1JFQURDSEFOXSAmCi0JCQkJCVJFQURDSEFOX0JMRVJCKSA+PiAxNDsKLQkJCXJkcyA9IHJhZGlvLT5yZWdpc3RlcnNbUkRTQl07Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJYmxlciA9IChyYWRpby0+cmVnaXN0ZXJzW1JFQURDSEFOXSAmCi0JCQkJCVJFQURDSEFOX0JMRVJDKSA+PiAxMjsKLQkJCXJkcyA9IHJhZGlvLT5yZWdpc3RlcnNbUkRTQ107Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJYmxlciA9IChyYWRpby0+cmVnaXN0ZXJzW1JFQURDSEFOXSAmCi0JCQkJCVJFQURDSEFOX0JMRVJEKSA+PiAxMDsKLQkJCXJkcyA9IHJhZGlvLT5yZWdpc3RlcnNbUkRTRF07Ci0JCQlicmVhazsKLQkJfTsKLQotCQkvKiBGaWxsIHRoZSBWNEwyIFJEUyBidWZmZXIgKi8KLQkJcHV0X3VuYWxpZ25lZF9sZTE2KHJkcywgJnRtcGJ1Zik7Ci0JCXRtcGJ1ZlsyXSA9IGJsb2NrbnVtOwkJLyogb2Zmc2V0IG5hbWUgKi8KLQkJdG1wYnVmWzJdIHw9IGJsb2NrbnVtIDw8IDM7CS8qIHJlY2VpdmVkIG9mZnNldCAqLwotCQlpZiAoYmxlciA+IG1heF9yZHNfZXJyb3JzKQotCQkJdG1wYnVmWzJdIHw9IDB4ODA7IC8qIHVuY29ycmVjdGFibGUgZXJyb3JzICovCi0JCWVsc2UgaWYgKGJsZXIgPiAwKQotCQkJdG1wYnVmWzJdIHw9IDB4NDA7IC8qIGNvcnJlY3RlZCBlcnJvcihzKSAqLwotCi0JCS8qIGNvcHkgUkRTIGJsb2NrIHRvIGludGVybmFsIGJ1ZmZlciAqLwotCQltZW1jcHkoJnJhZGlvLT5idWZmZXJbcmFkaW8tPndyX2luZGV4XSwgJnRtcGJ1ZiwgMyk7Ci0JCXJhZGlvLT53cl9pbmRleCArPSAzOwotCi0JCS8qIHdyYXAgd3JpdGUgcG9pbnRlciAqLwotCQlpZiAocmFkaW8tPndyX2luZGV4ID49IHJhZGlvLT5idWZfc2l6ZSkKLQkJCXJhZGlvLT53cl9pbmRleCA9IDA7Ci0KLQkJLyogY2hlY2sgZm9yIG92ZXJmbG93ICovCi0JCWlmIChyYWRpby0+d3JfaW5kZXggPT0gcmFkaW8tPnJkX2luZGV4KSB7Ci0JCQkvKiBpbmNyZW1lbnQgYW5kIHdyYXAgcmVhZCBwb2ludGVyICovCi0JCQlyYWRpby0+cmRfaW5kZXggKz0gMzsKLQkJCWlmIChyYWRpby0+cmRfaW5kZXggPj0gcmFkaW8tPmJ1Zl9zaXplKQotCQkJCXJhZGlvLT5yZF9pbmRleCA9IDA7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7Ci0KLQkvKiB3YWtlIHVwIHJlYWQgcXVldWUgKi8KLQlpZiAocmFkaW8tPndyX2luZGV4ICE9IHJhZGlvLT5yZF9pbmRleCkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZyYWRpby0+cmVhZF9xdWV1ZSk7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF93b3JrIC0gcmRzIHdvcmsgZnVuY3Rpb24KLSAqLwotc3RhdGljIHZvaWQgc2k0NzB4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2k0NzB4X2RldmljZSwKLQkJd29yay53b3JrKTsKLQotCS8qIHNhZmV0eSBjaGVja3MgKi8KLQlpZiAocmFkaW8tPmRpc2Nvbm5lY3RlZCkKLQkJcmV0dXJuOwotCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcxXSAmIFNZU0NPTkZJRzFfUkRTKSA9PSAwKQotCQlyZXR1cm47Ci0KLQlzaTQ3MHhfcmRzKHJhZGlvKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJhZGlvLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKHJkc19wb2xsX3RpbWUpKTsKLX0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRmlsZSBPcGVyYXRpb25zIEludGVyZmFjZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogc2k0NzB4X2ZvcHNfcmVhZCAtIHJlYWQgUkRTIGRhdGEKLSAqLwotc3RhdGljIHNzaXplX3Qgc2k0NzB4X2ZvcHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlpbnQgcmV0dmFsID0gMDsKLQl1bnNpZ25lZCBpbnQgYmxvY2tfY291bnQgPSAwOwotCi0JLyogc3dpdGNoIG9uIHJkcyByZWNlcHRpb24gKi8KLQlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gJiBTWVNDT05GSUcxX1JEUykgPT0gMCkgewotCQlzaTQ3MHhfcmRzX29uKHJhZGlvKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyYWRpby0+d29yaywKLQkJCW1zZWNzX3RvX2ppZmZpZXMocmRzX3BvbGxfdGltZSkpOwotCX0KLQotCS8qIGJsb2NrIGlmIG5vIG5ldyBkYXRhIGF2YWlsYWJsZSAqLwotCXdoaWxlIChyYWRpby0+d3JfaW5kZXggPT0gcmFkaW8tPnJkX2luZGV4KSB7Ci0JCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJcmV0dmFsID0gLUVXT1VMREJMT0NLOwotCQkJZ290byBkb25lOwotCQl9Ci0JCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocmFkaW8tPnJlYWRfcXVldWUsCi0JCQlyYWRpby0+d3JfaW5kZXggIT0gcmFkaW8tPnJkX2luZGV4KSA8IDApIHsKLQkJCXJldHZhbCA9IC1FSU5UUjsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KLQotCS8qIGNhbGN1bGF0ZSBibG9jayBjb3VudCBmcm9tIGJ5dGUgY291bnQgKi8KLQljb3VudCAvPSAzOwotCi0JLyogY29weSBSRFMgYmxvY2sgb3V0IG9mIGludGVybmFsIGJ1ZmZlciBhbmQgdG8gdXNlciBidWZmZXIgKi8KLQltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7Ci0Jd2hpbGUgKGJsb2NrX2NvdW50IDwgY291bnQpIHsKLQkJaWYgKHJhZGlvLT5yZF9pbmRleCA9PSByYWRpby0+d3JfaW5kZXgpCi0JCQlicmVhazsKLQotCQkvKiBhbHdheXMgdHJhbnNmZXIgcmRzIGNvbXBsZXRlIGJsb2NrcyAqLwotCQlpZiAoY29weV90b191c2VyKGJ1ZiwgJnJhZGlvLT5idWZmZXJbcmFkaW8tPnJkX2luZGV4XSwgMykpCi0JCQkvKiByZXR2YWwgPSAtRUZBVUxUOyAqLwotCQkJYnJlYWs7Ci0KLQkJLyogaW5jcmVtZW50IGFuZCB3cmFwIHJlYWQgcG9pbnRlciAqLwotCQlyYWRpby0+cmRfaW5kZXggKz0gMzsKLQkJaWYgKHJhZGlvLT5yZF9pbmRleCA+PSByYWRpby0+YnVmX3NpemUpCi0JCQlyYWRpby0+cmRfaW5kZXggPSAwOwotCi0JCS8qIGluY3JlbWVudCBjb3VudGVycyAqLwotCQlibG9ja19jb3VudCsrOwotCQlidWYgKz0gMzsKLQkJcmV0dmFsICs9IDM7Ci0JfQotCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOwotCi1kb25lOgotCXJldHVybiByZXR2YWw7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF9mb3BzX3BvbGwgLSBwb2xsIFJEUyBkYXRhCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2k0NzB4X2ZvcHNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwdHMpCi17Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlpbnQgcmV0dmFsID0gMDsKLQotCS8qIHN3aXRjaCBvbiByZHMgcmVjZXB0aW9uICovCi0JaWYgKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzFdICYgU1lTQ09ORklHMV9SRFMpID09IDApIHsKLQkJc2k0NzB4X3Jkc19vbihyYWRpbyk7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcmFkaW8tPndvcmssCi0JCQltc2Vjc190b19qaWZmaWVzKHJkc19wb2xsX3RpbWUpKTsKLQl9Ci0KLQlwb2xsX3dhaXQoZmlsZSwgJnJhZGlvLT5yZWFkX3F1ZXVlLCBwdHMpOwotCi0JaWYgKHJhZGlvLT5yZF9pbmRleCAhPSByYWRpby0+d3JfaW5kZXgpCi0JCXJldHZhbCA9IFBPTExJTiB8IFBPTExSRE5PUk07Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfZm9wc19vcGVuIC0gZmlsZSBvcGVuCi0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X2ZvcHNfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCByZXR2YWw7Ci0KLQlsb2NrX2tlcm5lbCgpOwotCXJhZGlvLT51c2VycysrOwotCi0JcmV0dmFsID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHJhZGlvLT5pbnRmKTsKLQlpZiAocmV0dmFsIDwgMCkgewotCQlyYWRpby0+dXNlcnMtLTsKLQkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBkb25lOwotCX0KLQotCWlmIChyYWRpby0+dXNlcnMgPT0gMSkgewotCQkvKiBzdGFydCByYWRpbyAqLwotCQlyZXR2YWwgPSBzaTQ3MHhfc3RhcnQocmFkaW8pOwotCQlpZiAocmV0dmFsIDwgMCkKLQkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShyYWRpby0+aW50Zik7Ci0JfQotCi1kb25lOgotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfZm9wc19yZWxlYXNlIC0gZmlsZSByZWxlYXNlCi0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X2ZvcHNfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCByZXR2YWwgPSAwOwotCi0JLyogc2FmZXR5IGNoZWNrICovCi0JaWYgKCFyYWRpbykgewotCQlyZXR2YWwgPSAtRU5PREVWOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7Ci0JcmFkaW8tPnVzZXJzLS07Ci0JaWYgKHJhZGlvLT51c2VycyA9PSAwKSB7Ci0JCWlmIChyYWRpby0+ZGlzY29ubmVjdGVkKSB7Ci0JCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYpOwotCQkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7Ci0JCQlrZnJlZShyYWRpbyk7Ci0JCQlnb3RvIHVubG9jazsKLQkJfQotCi0JCS8qIHN0b3AgcmRzIHJlY2VwdGlvbiAqLwotCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJhZGlvLT53b3JrKTsKLQotCQkvKiBjYW5jZWwgcmVhZCBwcm9jZXNzZXMgKi8KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZyYWRpby0+cmVhZF9xdWV1ZSk7Ci0KLQkJLyogc3RvcCByYWRpbyAqLwotCQlyZXR2YWwgPSBzaTQ3MHhfc3RvcChyYWRpbyk7Ci0JCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShyYWRpby0+aW50Zik7Ci0JfQotdW5sb2NrOgotCW11dGV4X3VubG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7Ci1kb25lOgotCXJldHVybiByZXR2YWw7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF9mb3BzIC0gZmlsZSBvcGVyYXRpb25zIGludGVyZmFjZQotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHNpNDcweF9mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucmVhZAkJPSBzaTQ3MHhfZm9wc19yZWFkLAotCS5wb2xsCQk9IHNpNDcweF9mb3BzX3BvbGwsCi0JLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKLQkub3BlbgkJPSBzaTQ3MHhfZm9wc19vcGVuLAotCS5yZWxlYXNlCT0gc2k0NzB4X2ZvcHNfcmVsZWFzZSwKLX07Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFZpZGVvNExpbnV4IEludGVyZmFjZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogc2k0NzB4X3Y0bDJfcXVlcnljdHJsIC0gcXVlcnkgY29udHJvbAotICovCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHNpNDcweF92NGwyX3F1ZXJ5Y3RybFtdID0gewotCXsKLQkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUJCT0gIlZvbHVtZSIsCi0JCS5taW5pbXVtCT0gMCwKLQkJLm1heGltdW0JPSAxNSwKLQkJLnN0ZXAJCT0gMSwKLQkJLmRlZmF1bHRfdmFsdWUJPSAxNSwKLQl9LAotCXsKLQkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JCS5uYW1lCQk9ICJNdXRlIiwKLQkJLm1pbmltdW0JPSAwLAotCQkubWF4aW11bQk9IDEsCi0JCS5zdGVwCQk9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlCT0gMSwKLQl9LAotfTsKLQotCi0vKgotICogc2k0NzB4X3ZpZGlvY19xdWVyeWNhcCAtIHF1ZXJ5IGRldmljZSBjYXBhYmlsaXRpZXMKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXBhYmlsaXR5KQotewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlzdHJsY3B5KGNhcGFiaWxpdHktPmRyaXZlciwgRFJJVkVSX05BTUUsIHNpemVvZihjYXBhYmlsaXR5LT5kcml2ZXIpKTsKLQlzdHJsY3B5KGNhcGFiaWxpdHktPmNhcmQsIERSSVZFUl9DQVJELCBzaXplb2YoY2FwYWJpbGl0eS0+Y2FyZCkpOwotCXVzYl9tYWtlX3BhdGgocmFkaW8tPnVzYmRldiwgY2FwYWJpbGl0eS0+YnVzX2luZm8sIHNpemVvZihjYXBhYmlsaXR5LT5idXNfaW5mbykpOwotCWNhcGFiaWxpdHktPnZlcnNpb24gPSBEUklWRVJfS0VSTkVMX1ZFUlNJT047Ci0JY2FwYWJpbGl0eS0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfSFdfRlJFUV9TRUVLIHwKLQkJVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKLQotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfdmlkaW9jX3F1ZXJ5Y3RybCAtIGVudW1lcmF0ZSBjb250cm9sIGl0ZW1zCi0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCi17Ci0JdW5zaWduZWQgY2hhciBpID0gMDsKLQlpbnQgcmV0dmFsID0gLUVJTlZBTDsKLQotCS8qIGFib3J0IGlmIHFjLT5pZCBpcyBiZWxvdyBWNEwyX0NJRF9CQVNFICovCi0JaWYgKHFjLT5pZCA8IFY0TDJfQ0lEX0JBU0UpCi0JCWdvdG8gZG9uZTsKLQotCS8qIHNlYXJjaCB2aWRlbyBjb250cm9sICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2k0NzB4X3Y0bDJfcXVlcnljdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgPT0gc2k0NzB4X3Y0bDJfcXVlcnljdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYoc2k0NzB4X3Y0bDJfcXVlcnljdHJsW2ldKSwgc2l6ZW9mKCpxYykpOwotCQkJcmV0dmFsID0gMDsgLyogZm91bmQgKi8KLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogZGlzYWJsZSB1bnN1cHBvcnRlZCBiYXNlIGNvbnRyb2xzICovCi0JLyogdG8gc2F0aXNmeSBrcmFkaW8gYW5kIHN1Y2ggYXBwcyAqLwotCWlmICgocmV0dmFsID09IC1FSU5WQUwpICYmIChxYy0+aWQgPCBWNEwyX0NJRF9MQVNUUDEpKSB7Ci0JCXFjLT5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEOwotCQlyZXR2YWwgPSAwOwotCX0KLQotZG9uZToKLQlpZiAocmV0dmFsIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogcXVlcnkgY29udHJvbHMgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi0vKgotICogc2k0NzB4X3ZpZGlvY19nX2N0cmwgLSBnZXQgdGhlIHZhbHVlIG9mIGEgY29udHJvbAotICovCi1zdGF0aWMgaW50IHNpNDcweF92aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBzYWZldHkgY2hlY2tzICovCi0JaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpIHsKLQkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBkb25lOwotCX0KLQotCXN3aXRjaCAoY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY3RybC0+dmFsdWUgPSByYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYKLQkJCQlTWVNDT05GSUcyX1ZPTFVNRTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQljdHJsLT52YWx1ZSA9ICgocmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJgotCQkJCVBPV0VSQ0ZHX0RNVVRFKSA9PSAwKSA/IDEgOiAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR2YWwgPSAtRUlOVkFMOwotCX0KLQotZG9uZToKLQlpZiAocmV0dmFsIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogZ2V0IGNvbnRyb2wgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi0vKgotICogc2k0NzB4X3ZpZGlvY19zX2N0cmwgLSBzZXQgdGhlIHZhbHVlIG9mIGEgY29udHJvbAotICovCi1zdGF0aWMgaW50IHNpNDcweF92aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBzYWZldHkgY2hlY2tzICovCi0JaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpIHsKLQkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBkb25lOwotCX0KLQotCXN3aXRjaCAoY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJcmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSAmPSB+U1lTQ09ORklHMl9WT0xVTUU7Ci0JCXJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMl0gfD0gY3RybC0+dmFsdWU7Ci0JCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFNZU0NPTkZJRzIpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWlmIChjdHJsLT52YWx1ZSA9PSAxKQotCQkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJj0gflBPV0VSQ0ZHX0RNVVRFOwotCQllbHNlCi0JCQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSB8PSBQT1dFUkNGR19ETVVURTsKLQkJcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgUE9XRVJDRkcpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR2YWwgPSAtRUlOVkFMOwotCX0KLQotZG9uZToKLQlpZiAocmV0dmFsIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogc2V0IGNvbnRyb2wgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi0vKgotICogc2k0NzB4X3ZpZGlvY19nX2F1ZGlvIC0gZ2V0IGF1ZGlvIGF0dHJpYnV0ZXMKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCXN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKLXsKLQkvKiBkcml2ZXIgY29uc3RhbnRzICovCi0JYXVkaW8tPmluZGV4ID0gMDsKLQlzdHJjcHkoYXVkaW8tPm5hbWUsICJSYWRpbyIpOwotCWF1ZGlvLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCWF1ZGlvLT5tb2RlID0gMDsKLQotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfdmlkaW9jX2dfdHVuZXIgLSBnZXQgdHVuZXIgYXR0cmlidXRlcwotICovCi1zdGF0aWMgaW50IHNpNDcweF92aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnR1bmVyKQotewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBzYWZldHkgY2hlY2tzICovCi0JaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpIHsKLQkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBkb25lOwotCX0KLQlpZiAodHVuZXItPmluZGV4ICE9IDApIHsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJZ290byBkb25lOwotCX0KLQotCXJldHZhbCA9IHNpNDcweF9nZXRfcmVnaXN0ZXIocmFkaW8sIFNUQVRVU1JTU0kpOwotCWlmIChyZXR2YWwgPCAwKQotCQlnb3RvIGRvbmU7Ci0KLQkvKiBkcml2ZXIgY29uc3RhbnRzICovCi0Jc3RyY3B5KHR1bmVyLT5uYW1lLCAiRk0iKTsKLQl0dW5lci0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JdHVuZXItPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1cgfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU87Ci0KLQkvKiByYW5nZSBsaW1pdHMgKi8KLQlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9CQU5EKSA+PiA2KSB7Ci0JLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlLCBkZWZhdWx0KSAqLwotCWRlZmF1bHQ6Ci0JCXR1bmVyLT5yYW5nZWxvdyAgPSAgODcuNSAqIEZSRVFfTVVMOwotCQl0dW5lci0+cmFuZ2VoaWdoID0gMTA4ICAgKiBGUkVRX01VTDsKLQkJYnJlYWs7Ci0JLyogMTogNzYgICAtIDEwOCBNSHogKEphcGFuIHdpZGUgYmFuZCkgKi8KLQljYXNlIDEgOgotCQl0dW5lci0+cmFuZ2Vsb3cgID0gIDc2ICAgKiBGUkVRX01VTDsKLQkJdHVuZXItPnJhbmdlaGlnaCA9IDEwOCAgICogRlJFUV9NVUw7Ci0JCWJyZWFrOwotCS8qIDI6IDc2ICAgLSAgOTAgTUh6IChKYXBhbikgKi8KLQljYXNlIDIgOgotCQl0dW5lci0+cmFuZ2Vsb3cgID0gIDc2ICAgKiBGUkVRX01VTDsKLQkJdHVuZXItPnJhbmdlaGlnaCA9ICA5MCAgICogRlJFUV9NVUw7Ci0JCWJyZWFrOwotCX07Ci0KLQkvKiBzdGVyZW8gaW5kaWNhdG9yID09IHN0ZXJlbyAoaW5zdGVhZCBvZiBtb25vKSAqLwotCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfU1QpID09IDApCi0JCXR1bmVyLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQllbHNlCi0JCXR1bmVyLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQotCS8qIG1vbm8vc3RlcmVvIHNlbGVjdG9yICovCi0JaWYgKChyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmIFBPV0VSQ0ZHX01PTk8pID09IDApCi0JCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQllbHNlCi0JCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0KLQkvKiBtaW4gaXMgd29yc3QsIG1heCBpcyBiZXN0OyBzaWduYWw6MC4uMHhmZmZmOyByc3NpOiAwLi4weGZmICovCi0JLyogbWVhc3VyZWQgaW4gdW5pdHMgb2YgZGLCtVYgaW4gMSBkYiBpbmNyZW1lbnRzIChtYXggYXQgfjc1IGRiwrVWKSAqLwotCXR1bmVyLT5zaWduYWwgPSAocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfUlNTSSk7Ci0JLyogdGhlIGlkZWFsIGZhY3RvciBpcyAweGZmZmYvNzUgPSA4NzMsOCAqLwotCXR1bmVyLT5zaWduYWwgPSAodHVuZXItPnNpZ25hbCAqIDg3MykgKyAoOCAqIHR1bmVyLT5zaWduYWwgLyAxMCk7Ci0KLQkvKiBhdXRvbWF0aWMgZnJlcXVlbmN5IGNvbnRyb2w6IC0xOiBmcmVxIHRvIGxvdywgMSBmcmVxIHRvIGhpZ2ggKi8KLQkvKiBBRkNSTCBkb2VzIG9ubHkgaW5kaWNhdGUgdGhhdCBmcmVxLiBkaWZmZXJzLCBub3QgaWYgdG9vIGxvdy9oaWdoICovCi0JdHVuZXItPmFmYyA9IChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9BRkNSTCkgPyAxIDogMDsKLQotZG9uZToKLQlpZiAocmV0dmFsIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogZ2V0IHR1bmVyIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF92aWRpb2Nfc190dW5lciAtIHNldCB0dW5lciBhdHRyaWJ1dGVzCi0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdHVuZXIpCi17Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlpbnQgcmV0dmFsID0gLUVJTlZBTDsKLQotCS8qIHNhZmV0eSBjaGVja3MgKi8KLQlpZiAocmFkaW8tPmRpc2Nvbm5lY3RlZCkgewotCQlyZXR2YWwgPSAtRUlPOwotCQlnb3RvIGRvbmU7Ci0JfQotCWlmICh0dW5lci0+aW5kZXggIT0gMCkKLQkJZ290byBkb25lOwotCi0JLyogbW9uby9zdGVyZW8gc2VsZWN0b3IgKi8KLQlzd2l0Y2ggKHR1bmVyLT5hdWRtb2RlKSB7Ci0JY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKLQkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gfD0gUE9XRVJDRkdfTU9OTzsgIC8qIGZvcmNlIG1vbm8gKi8KLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgotCQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmPSB+UE9XRVJDRkdfTU9OTzsgLyogdHJ5IHN0ZXJlbyAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlnb3RvIGRvbmU7Ci0JfQotCi0JcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgUE9XRVJDRkcpOwotCi1kb25lOgotCWlmIChyZXR2YWwgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCi0JCQkiOiBzZXQgdHVuZXIgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi0vKgotICogc2k0NzB4X3ZpZGlvY19nX2ZyZXF1ZW5jeSAtIGdldCB0dW5lciBvciBtb2R1bGF0b3IgcmFkaW8gZnJlcXVlbmN5Ci0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQotewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBzYWZldHkgY2hlY2tzICovCi0JaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpIHsKLQkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBkb25lOwotCX0KLQlpZiAoZnJlcS0+dHVuZXIgIT0gMCkgewotCQlyZXR2YWwgPSAtRUlOVkFMOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JZnJlcS0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JcmV0dmFsID0gc2k0NzB4X2dldF9mcmVxKHJhZGlvLCAmZnJlcS0+ZnJlcXVlbmN5KTsKLQotZG9uZToKLQlpZiAocmV0dmFsIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogZ2V0IGZyZXF1ZW5jeSBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfdmlkaW9jX3NfZnJlcXVlbmN5IC0gc2V0IHR1bmVyIG9yIG1vZHVsYXRvciByYWRpbyBmcmVxdWVuY3kKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmZyZXEpCi17Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlpbnQgcmV0dmFsID0gMDsKLQotCS8qIHNhZmV0eSBjaGVja3MgKi8KLQlpZiAocmFkaW8tPmRpc2Nvbm5lY3RlZCkgewotCQlyZXR2YWwgPSAtRUlPOwotCQlnb3RvIGRvbmU7Ci0JfQotCWlmIChmcmVxLT50dW5lciAhPSAwKSB7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlyZXR2YWwgPSBzaTQ3MHhfc2V0X2ZyZXEocmFkaW8sIGZyZXEtPmZyZXF1ZW5jeSk7Ci0KLWRvbmU6Ci0JaWYgKHJldHZhbCA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKLQkJCSI6IHNldCBmcmVxdWVuY3kgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi0vKgotICogc2k0NzB4X3ZpZGlvY19zX2h3X2ZyZXFfc2VlayAtIHNldCBoYXJkd2FyZSBmcmVxdWVuY3kgc2VlawotICovCi1zdGF0aWMgaW50IHNpNDcweF92aWRpb2Nfc19od19mcmVxX3NlZWsoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCXN0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlayAqc2VlaykKLXsKLQlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCByZXR2YWwgPSAwOwotCi0JLyogc2FmZXR5IGNoZWNrcyAqLwotCWlmIChyYWRpby0+ZGlzY29ubmVjdGVkKSB7Ci0JCXJldHZhbCA9IC1FSU87Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JaWYgKHNlZWstPnR1bmVyICE9IDApIHsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJZ290byBkb25lOwotCX0KLQotCXJldHZhbCA9IHNpNDcweF9zZXRfc2VlayhyYWRpbywgc2Vlay0+d3JhcF9hcm91bmQsIHNlZWstPnNlZWtfdXB3YXJkKTsKLQotZG9uZToKLQlpZiAocmV0dmFsIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogc2V0IGhhcmR3YXJlIGZyZXF1ZW5jeSBzZWVrIGZhaWxlZCB3aXRoICVkXG4iLAotCQkJcmV0dmFsKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfaW9jdGxfb3BzIC0gdmlkZW8gZGV2aWNlIGlvY3RsIG9wZXJhdGlvbnMKLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBzaTQ3MHhfaW9jdGxfb3BzID0gewotCS52aWRpb2NfcXVlcnljYXAJPSBzaTQ3MHhfdmlkaW9jX3F1ZXJ5Y2FwLAotCS52aWRpb2NfcXVlcnljdHJsCT0gc2k0NzB4X3ZpZGlvY19xdWVyeWN0cmwsCi0JLnZpZGlvY19nX2N0cmwJCT0gc2k0NzB4X3ZpZGlvY19nX2N0cmwsCi0JLnZpZGlvY19zX2N0cmwJCT0gc2k0NzB4X3ZpZGlvY19zX2N0cmwsCi0JLnZpZGlvY19nX2F1ZGlvCQk9IHNpNDcweF92aWRpb2NfZ19hdWRpbywKLQkudmlkaW9jX2dfdHVuZXIJCT0gc2k0NzB4X3ZpZGlvY19nX3R1bmVyLAotCS52aWRpb2Nfc190dW5lcgkJPSBzaTQ3MHhfdmlkaW9jX3NfdHVuZXIsCi0JLnZpZGlvY19nX2ZyZXF1ZW5jeQk9IHNpNDcweF92aWRpb2NfZ19mcmVxdWVuY3ksCi0JLnZpZGlvY19zX2ZyZXF1ZW5jeQk9IHNpNDcweF92aWRpb2Nfc19mcmVxdWVuY3ksCi0JLnZpZGlvY19zX2h3X2ZyZXFfc2Vlawk9IHNpNDcweF92aWRpb2Nfc19od19mcmVxX3NlZWssCi19OwotCi0KLS8qCi0gKiBzaTQ3MHhfdmlkZGV2X3RlbXBsYXRlIC0gdmlkZW8gZGV2aWNlIGludGVyZmFjZQotICovCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBzaTQ3MHhfdmlkZGV2X3RlbXBsYXRlID0gewotCS5mb3BzCQkJPSAmc2k0NzB4X2ZvcHMsCi0JLm5hbWUJCQk9IERSSVZFUl9OQU1FLAotCS5yZWxlYXNlCQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAotCS5pb2N0bF9vcHMJCT0gJnNpNDcweF9pb2N0bF9vcHMsCi19OwotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBVU0IgSW50ZXJmYWNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBzaTQ3MHhfdXNiX2RyaXZlcl9wcm9iZSAtIHByb2JlIGZvciB0aGUgZGV2aWNlCi0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3VzYl9kcml2ZXJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW87Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBwcml2YXRlIGRhdGEgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gKi8KLQlyYWRpbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaTQ3MHhfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyYWRpbykgewotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9pbml0aWFsOwotCX0KLQlyYWRpby0+dXNlcnMgPSAwOwotCXJhZGlvLT5kaXNjb25uZWN0ZWQgPSAwOwotCXJhZGlvLT51c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXJhZGlvLT5pbnRmID0gaW50ZjsKLQltdXRleF9pbml0KCZyYWRpby0+ZGlzY29ubmVjdF9sb2NrKTsKLQltdXRleF9pbml0KCZyYWRpby0+bG9jayk7Ci0KLQkvKiB2aWRlbyBkZXZpY2UgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gKi8KLQlyYWRpby0+dmlkZW9kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKLQlpZiAoIXJhZGlvLT52aWRlb2RldikgewotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9yYWRpbzsKLQl9Ci0JbWVtY3B5KHJhZGlvLT52aWRlb2RldiwgJnNpNDcweF92aWRkZXZfdGVtcGxhdGUsCi0JCQlzaXplb2Yoc2k0NzB4X3ZpZGRldl90ZW1wbGF0ZSkpOwotCXZpZGVvX3NldF9kcnZkYXRhKHJhZGlvLT52aWRlb2RldiwgcmFkaW8pOwotCi0JLyogc2hvdyBzb21lIGluZm9zIGFib3V0IHRoZSBzcGVjaWZpYyBzaTQ3MHggZGV2aWNlICovCi0JaWYgKHNpNDcweF9nZXRfYWxsX3JlZ2lzdGVycyhyYWRpbykgPCAwKSB7Ci0JCXJldHZhbCA9IC1FSU87Ci0JCWdvdG8gZXJyX3ZpZGVvOwotCX0KLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IERldmljZUlEPTB4JTQuNGh4IENoaXBJRD0weCU0LjRoeFxuIiwKLQkJCXJhZGlvLT5yZWdpc3RlcnNbREVWSUNFSURdLCByYWRpby0+cmVnaXN0ZXJzW0NISVBJRF0pOwotCi0JLyogZ2V0IHNvZnR3YXJlIGFuZCBoYXJkd2FyZSB2ZXJzaW9ucyAqLwotCWlmIChzaTQ3MHhfZ2V0X3NjcmF0Y2hfcGFnZV92ZXJzaW9ucyhyYWRpbykgPCAwKSB7Ci0JCXJldHZhbCA9IC1FSU87Ci0JCWdvdG8gZXJyX3ZpZGVvOwotCX0KLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FCi0JCQkiOiBzb2Z0d2FyZSB2ZXJzaW9uICVkLCBoYXJkd2FyZSB2ZXJzaW9uICVkXG4iLAotCQkJcmFkaW8tPnNvZnR3YXJlX3ZlcnNpb24sIHJhZGlvLT5oYXJkd2FyZV92ZXJzaW9uKTsKLQotCS8qIGNoZWNrIGlmIGRldmljZSBhbmQgZmlybXdhcmUgaXMgY3VycmVudCAqLwotCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tDSElQSURdICYgQ0hJUElEX0ZJUk1XQVJFKQotCQkJPCBSQURJT19TV19WRVJTSU9OX0NVUlJFTlQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogVGhpcyBkcml2ZXIgaXMga25vd24gdG8gd29yayB3aXRoICIKLQkJCSJmaXJtd2FyZSB2ZXJzaW9uICVodSxcbiIsIFJBRElPX1NXX1ZFUlNJT05fQ1VSUkVOVCk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKLQkJCSI6IGJ1dCB0aGUgZGV2aWNlIGhhcyBmaXJtd2FyZSB2ZXJzaW9uICVodS5cbiIsCi0JCQlyYWRpby0+cmVnaXN0ZXJzW0NISVBJRF0gJiBDSElQSURfRklSTVdBUkUpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCi0JCQkiOiBJZiB5b3UgaGF2ZSBzb21lIHRyb3VibGUgdXNpbmcgdGhpcyBkcml2ZXIsXG4iKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogcGxlYXNlIHJlcG9ydCB0byBWNEwgTUwgYXQgIgotCQkJImxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZ1xuIik7Ci0JfQotCi0JLyogc2V0IGluaXRpYWwgZnJlcXVlbmN5ICovCi0Jc2k0NzB4X3NldF9mcmVxKHJhZGlvLCA4Ny41ICogRlJFUV9NVUwpOyAvKiBhdmFpbGFibGUgaW4gYWxsIHJlZ2lvbnMgKi8KLQotCS8qIHNldCBsZWQgdG8gY29ubmVjdCBzdGF0ZSAqLwotCXNpNDcweF9zZXRfbGVkX3N0YXRlKHJhZGlvLCBCTElOS19HUkVFTl9MRUQpOwotCi0JLyogcmRzIGJ1ZmZlciBhbGxvY2F0aW9uICovCi0JcmFkaW8tPmJ1Zl9zaXplID0gcmRzX2J1ZiAqIDM7Ci0JcmFkaW8tPmJ1ZmZlciA9IGttYWxsb2MocmFkaW8tPmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJhZGlvLT5idWZmZXIpIHsKLQkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBlcnJfdmlkZW87Ci0JfQotCi0JLyogcmRzIGJ1ZmZlciBjb25maWd1cmF0aW9uICovCi0JcmFkaW8tPndyX2luZGV4ID0gMDsKLQlyYWRpby0+cmRfaW5kZXggPSAwOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJhZGlvLT5yZWFkX3F1ZXVlKTsKLQotCS8qIHByZXBhcmUgcmRzIHdvcmsgZnVuY3Rpb24gKi8KLQlJTklUX0RFTEFZRURfV09SSygmcmFkaW8tPndvcmssIHNpNDcweF93b3JrKTsKLQotCS8qIHJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLwotCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucik7Ci0JaWYgKHJldHZhbCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCi0JCQkJIjogQ291bGQgbm90IHJlZ2lzdGVyIHZpZGVvIGRldmljZVxuIik7Ci0JCWdvdG8gZXJyX2FsbDsKLQl9Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCByYWRpbyk7Ci0KLQlyZXR1cm4gMDsKLWVycl9hbGw6Ci0Ja2ZyZWUocmFkaW8tPmJ1ZmZlcik7Ci1lcnJfdmlkZW86Ci0JdmlkZW9fZGV2aWNlX3JlbGVhc2UocmFkaW8tPnZpZGVvZGV2KTsKLWVycl9yYWRpbzoKLQlrZnJlZShyYWRpbyk7Ci1lcnJfaW5pdGlhbDoKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfdXNiX2RyaXZlcl9zdXNwZW5kIC0gc3VzcGVuZCB0aGUgZGV2aWNlCi0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3VzYl9kcml2ZXJfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJcG1fbWVzc2FnZV90IG1lc3NhZ2UpCi17Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQotCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogc3VzcGVuZGluZyBub3cuLi5cbiIpOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZyYWRpby0+d29yayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKgotICogc2k0NzB4X3VzYl9kcml2ZXJfcmVzdW1lIC0gcmVzdW1lIHRoZSBkZXZpY2UKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfdXNiX2RyaXZlcl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQotCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogcmVzdW1pbmcgbm93Li4uXG4iKTsKLQotCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKLQlpZiAocmFkaW8tPnVzZXJzICYmIHJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gJiBTWVNDT05GSUcxX1JEUykKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyYWRpby0+d29yaywKLQkJCW1zZWNzX3RvX2ppZmZpZXMocmRzX3BvbGxfdGltZSkpOwotCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF91c2JfZHJpdmVyX2Rpc2Nvbm5lY3QgLSBkaXNjb25uZWN0IHRoZSBkZXZpY2UKLSAqLwotc3RhdGljIHZvaWQgc2k0NzB4X3VzYl9kcml2ZXJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCi0JbXV0ZXhfbG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7Ci0JcmFkaW8tPmRpc2Nvbm5lY3RlZCA9IDE7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZyYWRpby0+d29yayk7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKLQlpZiAocmFkaW8tPnVzZXJzID09IDApIHsKLQkJLyogc2V0IGxlZCB0byBkaXNjb25uZWN0IHN0YXRlICovCi0JCXNpNDcweF9zZXRfbGVkX3N0YXRlKHJhZGlvLCBCTElOS19PUkFOR0VfTEVEKTsKLQotCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYpOwotCQlrZnJlZShyYWRpby0+YnVmZmVyKTsKLQkJa2ZyZWUocmFkaW8pOwotCX0KLQltdXRleF91bmxvY2soJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfdXNiX2RyaXZlciAtIHVzYiBkcml2ZXIgaW50ZXJmYWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzaTQ3MHhfdXNiX2RyaXZlciA9IHsKLQkubmFtZQkJCT0gRFJJVkVSX05BTUUsCi0JLnByb2JlCQkJPSBzaTQ3MHhfdXNiX2RyaXZlcl9wcm9iZSwKLQkuZGlzY29ubmVjdAkJPSBzaTQ3MHhfdXNiX2RyaXZlcl9kaXNjb25uZWN0LAotCS5zdXNwZW5kCQk9IHNpNDcweF91c2JfZHJpdmVyX3N1c3BlbmQsCi0JLnJlc3VtZQkJCT0gc2k0NzB4X3VzYl9kcml2ZXJfcmVzdW1lLAotCS5pZF90YWJsZQkJPSBzaTQ3MHhfdXNiX2RyaXZlcl9pZF90YWJsZSwKLQkuc3VwcG9ydHNfYXV0b3N1c3BlbmQJPSAxLAotfTsKLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogTW9kdWxlIEludGVyZmFjZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogc2k0NzB4X21vZHVsZV9pbml0IC0gbW9kdWxlIGluaXQKLSAqLwotc3RhdGljIGludCBfX2luaXQgc2k0NzB4X21vZHVsZV9pbml0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiLCBWZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7Ci0JcmV0dXJuIHVzYl9yZWdpc3Rlcigmc2k0NzB4X3VzYl9kcml2ZXIpOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfbW9kdWxlX2V4aXQgLSBtb2R1bGUgZXhpdAotICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2k0NzB4X21vZHVsZV9leGl0KHZvaWQpCi17Ci0JdXNiX2RlcmVnaXN0ZXIoJnNpNDcweF91c2JfZHJpdmVyKTsKLX0KLQotCi1tb2R1bGVfaW5pdChzaTQ3MHhfbW9kdWxlX2luaXQpOwotbW9kdWxlX2V4aXQoc2k0NzB4X21vZHVsZV9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcxMy5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWMxNGI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MTMuYwpAQCAtMCwwICsxLDM2NyBAQAorLyoKKyAqIGRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzEzLmMKKyAqCisgKiBQbGF0Zm9ybSBEcml2ZXIgZm9yIFNpbGljb24gTGFicyBTaTQ3MTMgRk0gUmFkaW8gVHJhbnNtaXR0ZXI6CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lhIC0gSU5kVAorICogQ29udGFjdDogRWR1YXJkbyBWYWxlbnRpbiA8ZWR1YXJkby52YWxlbnRpbkBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3JhZGlvLXNpNDcxMy5oPgorCisvKiBtb2R1bGUgcGFyYW1ldGVycyAqLworc3RhdGljIGludCByYWRpb19uciA9IC0xOwkvKiByYWRpbyBkZXZpY2UgbWlub3IgKC0xID09PiBhdXRvIGFzc2lnbikgKi8KK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsCisJCSAiTWlub3IgbnVtYmVyIGZvciByYWRpbyBkZXZpY2UgKC0xID09PiBhdXRvIGFzc2lnbikiKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRWR1YXJkbyBWYWxlbnRpbiA8ZWR1YXJkby52YWxlbnRpbkBub2tpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBsYXRmb3JtIGRyaXZlciBmb3IgU2k0NzEzIEZNIFJhZGlvIFRyYW5zbWl0dGVyIik7CitNT0RVTEVfVkVSU0lPTigiMC4wLjEiKTsKKworLyogRHJpdmVyIHN0YXRlIHN0cnVjdCAqLworc3RydWN0IHJhZGlvX3NpNDcxM19kZXZpY2UgeworCXN0cnVjdCB2NGwyX2RldmljZQkJdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZQkJKnJhZGlvX2RldjsKK307CisKKy8qIHJhZGlvX3NpNDcxM19mb3BzIC0gZmlsZSBvcGVyYXRpb25zIGludGVyZmFjZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyByYWRpb19zaTQ3MTNfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKK307CisKKy8qIFZpZGVvNExpbnV4IEludGVyZmFjZSAqLworc3RhdGljIGludCByYWRpb19zaTQ3MTNfZmlsbF9hdWRvdXQoc3RydWN0IHY0bDJfYXVkaW9vdXQgKnZhbykKK3sKKwkvKiBUT0RPOiBjaGVjayBwcmVzZW5jZSBvZiBhdWRpbyBvdXRwdXQgKi8KKwlzdHJsY3B5KHZhby0+bmFtZSwgIkZNIE1vZHVsYXRvciBBdWRpbyBPdXQiLCAzMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByYWRpb19zaTQ3MTNfZW51bWF1ZG91dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvb3V0ICp2YW8pCit7CisJcmV0dXJuIHJhZGlvX3NpNDcxM19maWxsX2F1ZG91dCh2YW8pOworfQorCitzdGF0aWMgaW50IHJhZGlvX3NpNDcxM19nX2F1ZG91dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW9vdXQgKnZhbykKK3sKKwlpbnQgcnZhbCA9IHJhZGlvX3NpNDcxM19maWxsX2F1ZG91dCh2YW8pOworCisJdmFvLT5pbmRleCA9IDA7CisKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGludCByYWRpb19zaTQ3MTNfc19hdWRvdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvb3V0ICp2YW8pCit7CisJcmV0dXJuIHZhby0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworLyogcmFkaW9fc2k0NzEzX3F1ZXJ5Y2FwIC0gcXVlcnkgZGV2aWNlIGNhcGFiaWxpdGllcyAqLworc3RhdGljIGludCByYWRpb19zaTQ3MTNfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcGFiaWxpdHkpCit7CisJc3RydWN0IHJhZGlvX3NpNDcxM19kZXZpY2UgKnJzZGV2OworCisJcnNkZXYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKworCXN0cmxjcHkoY2FwYWJpbGl0eS0+ZHJpdmVyLCAicmFkaW8tc2k0NzEzIiwgc2l6ZW9mKGNhcGFiaWxpdHktPmRyaXZlcikpOworCXN0cmxjcHkoY2FwYWJpbGl0eS0+Y2FyZCwgIlNpbGljb24gTGFicyBTaTQ3MTMgTW9kdWxhdG9yIiwKKwkJCQlzaXplb2YoY2FwYWJpbGl0eS0+Y2FyZCkpOworCWNhcGFiaWxpdHktPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX01PRFVMQVRPUiB8IFY0TDJfQ0FQX1JEU19PVVRQVVQ7CisKKwlyZXR1cm4gMDsKK30KKworLyogcmFkaW9fc2k0NzEzX3F1ZXJ5Y3RybCAtIGVudW1lcmF0ZSBjb250cm9sIGl0ZW1zICovCitzdGF0aWMgaW50IHJhZGlvX3NpNDcxM19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCS8qIE11c3QgYmUgc29ydGVkIGZyb20gbG93IHRvIGhpZ2ggY29udHJvbCBJRCEgKi8KKwlzdGF0aWMgY29uc3QgdTMyIHVzZXJfY3RybHNbXSA9IHsKKwkJVjRMMl9DSURfVVNFUl9DTEFTUywKKwkJVjRMMl9DSURfQVVESU9fTVVURSwKKwkJMAorCX07CisKKwkvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCisJc3RhdGljIGNvbnN0IHUzMiBmbXR4X2N0cmxzW10gPSB7CisJCVY0TDJfQ0lEX0ZNX1RYX0NMQVNTLAorCQlWNEwyX0NJRF9SRFNfVFhfREVWSUFUSU9OLAorCQlWNEwyX0NJRF9SRFNfVFhfUEksCisJCVY0TDJfQ0lEX1JEU19UWF9QVFksCisJCVY0TDJfQ0lEX1JEU19UWF9QU19OQU1FLAorCQlWNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVCwKKwkJVjRMMl9DSURfQVVESU9fTElNSVRFUl9FTkFCTEVELAorCQlWNEwyX0NJRF9BVURJT19MSU1JVEVSX1JFTEVBU0VfVElNRSwKKwkJVjRMMl9DSURfQVVESU9fTElNSVRFUl9ERVZJQVRJT04sCisJCVY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0VOQUJMRUQsCisJCVY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0dBSU4sCisJCVY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1RIUkVTSE9MRCwKKwkJVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fQVRUQUNLX1RJTUUsCisJCVY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1JFTEVBU0VfVElNRSwKKwkJVjRMMl9DSURfUElMT1RfVE9ORV9FTkFCTEVELAorCQlWNEwyX0NJRF9QSUxPVF9UT05FX0RFVklBVElPTiwKKwkJVjRMMl9DSURfUElMT1RfVE9ORV9GUkVRVUVOQ1ksCisJCVY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVMsCisJCVY0TDJfQ0lEX1RVTkVfUE9XRVJfTEVWRUwsCisJCVY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1IsCisJCTAKKwl9OworCXN0YXRpYyBjb25zdCB1MzIgKmN0cmxfY2xhc3Nlc1tdID0geworCQl1c2VyX2N0cmxzLAorCQlmbXR4X2N0cmxzLAorCQlOVUxMCisJfTsKKwlzdHJ1Y3QgcmFkaW9fc2k0NzEzX2RldmljZSAqcnNkZXY7CisKKwlyc2RldiA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJcWMtPmlkID0gdjRsMl9jdHJsX25leHQoY3RybF9jbGFzc2VzLCBxYy0+aWQpOworCWlmIChxYy0+aWQgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocWMtPmlkID09IFY0TDJfQ0lEX1VTRVJfQ0xBU1MgfHwgcWMtPmlkID09IFY0TDJfQ0lEX0ZNX1RYX0NMQVNTKQorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDAsIDAsIDApOworCisJcmV0dXJuIHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZyc2Rldi0+djRsMl9kZXYsIDAsIGNvcmUsCisJCQkJCQlxdWVyeWN0cmwsIHFjKTsKK30KKworLyoKKyAqIHY0bDIgaW9jdGwgY2FsbCBiYWNrcy4KKyAqIHdlIGFyZSBqdXN0IGEgd3JhcHBlciBmb3IgdjRsMl9zdWJfZGV2cy4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdjRsMl9kZXZpY2UgKmdldF92NGwyX2RldihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gJigoc3RydWN0IHJhZGlvX3NpNDcxM19kZXZpY2UgKil2aWRlb19kcnZkYXRhKGZpbGUpKS0+djRsMl9kZXY7Cit9CisKK3N0YXRpYyBpbnQgcmFkaW9fc2k0NzEzX2dfZXh0X2N0cmxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwLAorCQkJCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICp2ZWNzKQoreworCXJldHVybiB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycihnZXRfdjRsMl9kZXYoZmlsZSksIDAsIGNvcmUsCisJCQkJCQkJZ19leHRfY3RybHMsIHZlY3MpOworfQorCitzdGF0aWMgaW50IHJhZGlvX3NpNDcxM19zX2V4dF9jdHJscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcCwKKwkJCQkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqdmVjcykKK3sKKwlyZXR1cm4gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoZ2V0X3Y0bDJfZGV2KGZpbGUpLCAwLCBjb3JlLAorCQkJCQkJCXNfZXh0X2N0cmxzLCB2ZWNzKTsKK30KKworc3RhdGljIGludCByYWRpb19zaTQ3MTNfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwLAorCQkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqdmMpCit7CisJcmV0dXJuIHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKGdldF92NGwyX2RldihmaWxlKSwgMCwgY29yZSwKKwkJCQkJCQlnX2N0cmwsIHZjKTsKK30KKworc3RhdGljIGludCByYWRpb19zaTQ3MTNfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwLAorCQkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqdmMpCit7CisJcmV0dXJuIHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKGdldF92NGwyX2RldihmaWxlKSwgMCwgY29yZSwKKwkJCQkJCQlzX2N0cmwsIHZjKTsKK30KKworc3RhdGljIGludCByYWRpb19zaTQ3MTNfZ19tb2R1bGF0b3Ioc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnAsCisJCQkJCQlzdHJ1Y3QgdjRsMl9tb2R1bGF0b3IgKnZtKQoreworCXJldHVybiB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycihnZXRfdjRsMl9kZXYoZmlsZSksIDAsIHR1bmVyLAorCQkJCQkJCWdfbW9kdWxhdG9yLCB2bSk7Cit9CisKK3N0YXRpYyBpbnQgcmFkaW9fc2k0NzEzX3NfbW9kdWxhdG9yKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwLAorCQkJCQkJc3RydWN0IHY0bDJfbW9kdWxhdG9yICp2bSkKK3sKKwlyZXR1cm4gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoZ2V0X3Y0bDJfZGV2KGZpbGUpLCAwLCB0dW5lciwKKwkJCQkJCQlzX21vZHVsYXRvciwgdm0pOworfQorCitzdGF0aWMgaW50IHJhZGlvX3NpNDcxM19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcCwKKwkJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqdmYpCit7CisJcmV0dXJuIHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKGdldF92NGwyX2RldihmaWxlKSwgMCwgdHVuZXIsCisJCQkJCQkJZ19mcmVxdWVuY3ksIHZmKTsKK30KKworc3RhdGljIGludCByYWRpb19zaTQ3MTNfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnAsCisJCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKnZmKQoreworCXJldHVybiB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycihnZXRfdjRsMl9kZXYoZmlsZSksIDAsIHR1bmVyLAorCQkJCQkJCXNfZnJlcXVlbmN5LCB2Zik7Cit9CisKK3N0YXRpYyBsb25nIHJhZGlvX3NpNDcxM19kZWZhdWx0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwLCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJcmV0dXJuIHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKGdldF92NGwyX2RldihmaWxlKSwgMCwgY29yZSwKKwkJCQkJCQlpb2N0bCwgY21kLCBhcmcpOworfQorCitzdGF0aWMgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHJhZGlvX3NpNDcxM19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19lbnVtYXVkb3V0CT0gcmFkaW9fc2k0NzEzX2VudW1hdWRvdXQsCisJLnZpZGlvY19nX2F1ZG91dAk9IHJhZGlvX3NpNDcxM19nX2F1ZG91dCwKKwkudmlkaW9jX3NfYXVkb3V0CT0gcmFkaW9fc2k0NzEzX3NfYXVkb3V0LAorCS52aWRpb2NfcXVlcnljYXAJPSByYWRpb19zaTQ3MTNfcXVlcnljYXAsCisJLnZpZGlvY19xdWVyeWN0cmwJPSByYWRpb19zaTQ3MTNfcXVlcnljdHJsLAorCS52aWRpb2NfZ19leHRfY3RybHMJPSByYWRpb19zaTQ3MTNfZ19leHRfY3RybHMsCisJLnZpZGlvY19zX2V4dF9jdHJscwk9IHJhZGlvX3NpNDcxM19zX2V4dF9jdHJscywKKwkudmlkaW9jX2dfY3RybAkJPSByYWRpb19zaTQ3MTNfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsCQk9IHJhZGlvX3NpNDcxM19zX2N0cmwsCisJLnZpZGlvY19nX21vZHVsYXRvcgk9IHJhZGlvX3NpNDcxM19nX21vZHVsYXRvciwKKwkudmlkaW9jX3NfbW9kdWxhdG9yCT0gcmFkaW9fc2k0NzEzX3NfbW9kdWxhdG9yLAorCS52aWRpb2NfZ19mcmVxdWVuY3kJPSByYWRpb19zaTQ3MTNfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeQk9IHJhZGlvX3NpNDcxM19zX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX2RlZmF1bHQJCT0gcmFkaW9fc2k0NzEzX2RlZmF1bHQsCit9OworCisvKiByYWRpb19zaTQ3MTNfdmRldl90ZW1wbGF0ZSAtIHZpZGVvIGRldmljZSBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHJhZGlvX3NpNDcxM192ZGV2X3RlbXBsYXRlID0geworCS5mb3BzCQkJPSAmcmFkaW9fc2k0NzEzX2ZvcHMsCisJLm5hbWUJCQk9ICJyYWRpby1zaTQ3MTMiLAorCS5yZWxlYXNlCQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAorCS5pb2N0bF9vcHMJCT0gJnJhZGlvX3NpNDcxM19pb2N0bF9vcHMsCit9OworCisvKiBQbGF0Zm9ybSBkcml2ZXIgaW50ZXJmYWNlICovCisvKiByYWRpb19zaTQ3MTNfcGRyaXZlcl9wcm9iZSAtIHByb2JlIGZvciB0aGUgZGV2aWNlICovCitzdGF0aWMgaW50IHJhZGlvX3NpNDcxM19wZHJpdmVyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJhZGlvX3NpNDcxM19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCByYWRpb19zaTQ3MTNfZGV2aWNlICpyc2RldjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwlpbnQgcnZhbCA9IDA7CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBwcm9jZWVkIHdpdGhvdXQgcGxhdGZvcm0gZGF0YS5cbiIpOworCQlydmFsID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCXJzZGV2ID0ga3phbGxvYyhzaXplb2YgKnJzZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJzZGV2KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvYyB2aWRlbyBkZXZpY2UuXG4iKTsKKwkJcnZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlydmFsID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJnJzZGV2LT52NGwyX2Rldik7CisJaWYgKHJ2YWwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHY0bDIgZGV2aWNlLlxuIik7CisJCWdvdG8gZnJlZV9yc2RldjsKKwl9CisKKwlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKHBkYXRhLT5pMmNfYnVzKTsKKwlpZiAoIWFkYXB0ZXIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGdldCBpMmMgYWRhcHRlciAlZFxuIiwKKwkJCQkJCQlwZGF0YS0+aTJjX2J1cyk7CisJCXJ2YWwgPSAtRU5PREVWOworCQlnb3RvIHVucmVnaXN0ZXJfdjRsMl9kZXY7CisJfQorCisJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2X2JvYXJkKCZyc2Rldi0+djRsMl9kZXYsIGFkYXB0ZXIsICJzaTQ3MTNfaTJjIiwKKwkJCQkJcGRhdGEtPnN1YmRldl9ib2FyZF9pbmZvLCBOVUxMKTsKKwlpZiAoIXNkKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBnZXQgdjRsMiBzdWJkZXZpY2VcbiIpOworCQlydmFsID0gLUVOT0RFVjsKKwkJZ290byB1bnJlZ2lzdGVyX3Y0bDJfZGV2OworCX0KKworCXJzZGV2LT5yYWRpb19kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoIXJzZGV2LT5yYWRpb19kZXYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jIHZpZGVvIGRldmljZS5cbiIpOworCQlydmFsID0gLUVOT01FTTsKKwkJZ290byB1bnJlZ2lzdGVyX3Y0bDJfZGV2OworCX0KKworCW1lbWNweShyc2Rldi0+cmFkaW9fZGV2LCAmcmFkaW9fc2k0NzEzX3ZkZXZfdGVtcGxhdGUsCisJCQlzaXplb2YocmFkaW9fc2k0NzEzX3ZkZXZfdGVtcGxhdGUpKTsKKwl2aWRlb19zZXRfZHJ2ZGF0YShyc2Rldi0+cmFkaW9fZGV2LCByc2Rldik7CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShyc2Rldi0+cmFkaW9fZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2aWRlbyBkZXZpY2UuXG4iKTsKKwkJcnZhbCA9IC1FSU87CisJCWdvdG8gZnJlZV92ZGV2OworCX0KKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTmV3IGRldmljZSBzdWNjZXNzZnVsbHkgcHJvYmVkXG4iKTsKKworCWdvdG8gZXhpdDsKKworZnJlZV92ZGV2OgorCXZpZGVvX2RldmljZV9yZWxlYXNlKHJzZGV2LT5yYWRpb19kZXYpOwordW5yZWdpc3Rlcl92NGwyX2RldjoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZyc2Rldi0+djRsMl9kZXYpOworZnJlZV9yc2RldjoKKwlrZnJlZShyc2Rldik7CitleGl0OgorCXJldHVybiBydmFsOworfQorCisvKiByYWRpb19zaTQ3MTNfcGRyaXZlcl9yZW1vdmUgLSByZW1vdmUgdGhlIGRldmljZSAqLworc3RhdGljIGludCBfX2V4aXQgcmFkaW9fc2k0NzEzX3Bkcml2ZXJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByYWRpb19zaTQ3MTNfZGV2aWNlICpyc2RldiA9IGNvbnRhaW5lcl9vZih2NGwyX2RldiwKKwkJCQkJCXN0cnVjdCByYWRpb19zaTQ3MTNfZGV2aWNlLAorCQkJCQkJdjRsMl9kZXYpOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UocnNkZXYtPnJhZGlvX2Rldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmcnNkZXYtPnY0bDJfZGV2KTsKKwlrZnJlZShyc2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmFkaW9fc2k0NzEzX3Bkcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInJhZGlvLXNpNDcxMyIsCisJfSwKKwkucHJvYmUJCT0gcmFkaW9fc2k0NzEzX3Bkcml2ZXJfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gX19leGl0X3AocmFkaW9fc2k0NzEzX3Bkcml2ZXJfcmVtb3ZlKSwKK307CisKKy8qIE1vZHVsZSBJbnRlcmZhY2UgKi8KK3N0YXRpYyBpbnQgX19pbml0IHJhZGlvX3NpNDcxM19tb2R1bGVfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJhZGlvX3NpNDcxM19wZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHJhZGlvX3NpNDcxM19tb2R1bGVfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZyYWRpb19zaTQ3MTNfcGRyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHJhZGlvX3NpNDcxM19tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChyYWRpb19zaTQ3MTNfbW9kdWxlX2V4aXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDY2NjU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvS2NvbmZpZwpAQCAtMCwwICsxLDM3IEBACitjb25maWcgVVNCX1NJNDcwWAorCXRyaXN0YXRlICJTaWxpY29uIExhYnMgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVyIHN1cHBvcnQgd2l0aCBVU0IiCisJZGVwZW5kcyBvbiBVU0IgJiYgUkFESU9fU0k0NzBYCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgVVNCIGRldmljZXMgd2l0aCB0aGUgU2lsaWNvbiBMYWJzIFNJNDcweAorCSAgY2hpcC4gQ3VycmVudGx5IHRoZXNlIGRldmljZXMgYXJlIGtub3duIHRvIHdvcms6CisJICAtIDEwYzQ6ODE4YTogU2lsaWNvbiBMYWJzIFVTQiBGTSBSYWRpbyBSZWZlcmVuY2UgRGVzaWduCisJICAtIDA2ZTE6YTE1NTogQURTL1RlY2ggRk0gUmFkaW8gUmVjZWl2ZXIgKGZvcm1lcmx5IEluc3RhbnQgRk0gTXVzaWMpCisJICAtIDFiODA6ZDcwMDogS1dvcmxkIFVTQiBGTSBSYWRpbyBTbmFwTXVzaWMgTW9iaWxlIDcwMCAoRk03MDApCisJICAtIDEwYzU6ODE5YTogU2FuZWkgRWxlY3RyaWMgRk0gVVNCIFJhZGlvIChha2EgRGVhbEV4dHJlbWUuY29tIFBDZWFyKQorCisJICBTb3VuZCBpcyBwcm92aWRlZCBieSB0aGUgQUxTQSBVU0IgQXVkaW8vTUlESSBkcml2ZXIuIFRoZXJlZm9yZQorCSAgaWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBkZXZpY2Ugc29sZWx5IGZvciBSRFMgcmVjZWl2aW5nLAorCSAgaXQgaXMgcmVjb21tZW5kZWQgdG8gYWxzbyBzZWxlY3QgU05EX1VTQl9BVURJTy4KKworCSAgUGxlYXNlIGhhdmUgYSBsb29rIGF0IHRoZSBkb2N1bWVudGF0aW9uLCBlc3BlY2lhbGx5IG9uIGhvdworCSAgdG8gcmVkaXJlY3QgdGhlIGF1ZGlvIHN0cmVhbSBmcm9tIHRoZSByYWRpbyB0byB5b3VyIHNvdW5kIGRldmljZToKKwkgIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2k0NzB4LnR4dAorCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIHJhZGlvIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJhZGlvLXVzYi1zaTQ3MHguCisKK2NvbmZpZyBJMkNfU0k0NzBYCisJdHJpc3RhdGUgIlNpbGljb24gTGFicyBTaTQ3MHggRk0gUmFkaW8gUmVjZWl2ZXIgc3VwcG9ydCB3aXRoIEkyQyIKKwlkZXBlbmRzIG9uIEkyQyAmJiBSQURJT19TSTQ3MFggJiYgIVVTQl9TSTQ3MFgKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgZHJpdmVyIGZvciBJMkMgZGV2aWNlcyB3aXRoIHRoZSBTaWxpY29uIExhYnMgU0k0NzB4CisJICBjaGlwLgorCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIHJhZGlvIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgSTJDIHBvcnQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJhZGlvLWkyYy1zaTQ3MHguCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OTY0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHJhZGlvcyB3aXRoIFNpbGljb24gTGFicyBTaTQ3MHggRk0gUmFkaW8gUmVjZWl2ZXJzCisjCisKK3JhZGlvLXVzYi1zaTQ3MHgtb2Jqcwk6PSByYWRpby1zaTQ3MHgtdXNiLm8gcmFkaW8tc2k0NzB4LWNvbW1vbi5vCityYWRpby1pMmMtc2k0NzB4LW9ianMJOj0gcmFkaW8tc2k0NzB4LWkyYy5vIHJhZGlvLXNpNDcweC1jb21tb24ubworCitvYmotJChDT05GSUdfVVNCX1NJNDcwWCkgKz0gcmFkaW8tdXNiLXNpNDcweC5vCitvYmotJChDT05GSUdfSTJDX1NJNDcwWCkgKz0gcmFkaW8taTJjLXNpNDcweC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzMzE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1jb21tb24uYwpAQCAtMCwwICsxLDc5OCBAQAorLyoKKyAqICBkcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMKKyAqCisgKiAgRHJpdmVyIGZvciByYWRpb3Mgd2l0aCBTaWxpY29uIExhYnMgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVycworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworCisvKgorICogSGlzdG9yeToKKyAqIDIwMDgtMDEtMTIJVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgorICoJCVZlcnNpb24gMS4wLjAKKyAqCQktIEZpcnN0IHdvcmtpbmcgdmVyc2lvbgorICogMjAwOC0wMS0xMwlUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CisgKgkJVmVyc2lvbiAxLjAuMQorICoJCS0gSW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcsIGV2ZXJ5IGZ1bmN0aW9uIG5vdyByZXR1cm5zIGVycm5vCisgKgkJLSBJbXByb3ZlZCBtdWx0aSB1c2VyIGFjY2VzcyAoc3RhcnQvbXV0ZS9zdG9wKQorICoJCS0gQ2hhbm5lbCBkb2Vzbid0IGdldCBsb3N0IGFueW1vcmUgYWZ0ZXIgc3RhcnQvbXV0ZS9zdG9wCisgKgkJLSBSRFMgc3VwcG9ydCBhZGRlZCAocG9sbGluZyBtb2RlIHZpYSBpbnRlcnJ1cHQgRVAgMSkKKyAqCQktIG1hcmtlZCBkZWZhdWx0IG1vZHVsZSBwYXJhbWV0ZXJzIHdpdGggKnZhbHVlKgorICoJCS0gc3dpdGNoZWQgZnJvbSBiaXQgc3RydWN0cyB0byBiaXQgbWFza3MKKyAqCQktIGhlYWRlciBmaWxlIGNsZWFuZWQgYW5kIGludGVncmF0ZWQKKyAqIDIwMDgtMDEtMTQJVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgorICogCQlWZXJzaW9uIDEuMC4yCisgKiAJCS0gaGV4IHZhbHVlcyBhcmUgbm93IGxvd2VyIGNhc2UKKyAqIAkJLSBjb21tZW50ZWQgVVNCIElEIGZvciBBRFMvVGVjaCBtb3ZlZCBvbiB0b2RvIGxpc3QKKyAqIAkJLSBibGFja2xpc3RlZCBzaTQ3MHggaW4gaGlkLXF1aXJrcy5jCisgKiAJCS0gcmRzIGJ1ZmZlciBoYW5kbGluZyBmdW5jdGlvbnMgaW50ZWdyYXRlZCBpbnRvICpfd29yaywgKl9yZWFkCisgKiAJCS0gcmRzX2NvbW1hbmQgaW4gc2k0NzB4X3BvbGwgZXhjaGFuZ2VkIGFnYWluc3Qgc2ltcGxlIHJldHZhbAorICogCQktIGNoZWNrIGZvciBmaXJtd2FyZSB2ZXJzaW9uIDE1CisgKiAJCS0gY29kZSBvcmRlciBhbmQgcHJvdG90eXBlcyBzdGlsbCByZW1haW4gdGhlIHNhbWUKKyAqIAkJLSBzcGFjaW5nIGFuZCBib3R0b20gb2YgYmFuZCBjb2RlcyByZW1haW4gdGhlIHNhbWUKKyAqIDIwMDgtMDEtMTYJVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgorICoJCVZlcnNpb24gMS4wLjMKKyAqIAkJLSBjb2RlIHJlb3JkZXJlZCB0byBhdm9pZCBmdW5jdGlvbiBwcm90b3R5cGVzCisgKgkJLSBzd2l0Y2gvY2FzZSBkZWZhdWx0cyBhcmUgbm93IG1vcmUgdXNlci1mcmllbmRseQorICoJCS0gdW5pZmllZCBjb21tZW50IHN0eWxlCisgKgkJLSBhcHBsaWVkIGFsbCBjaGVja3BhdGNoLnBsIHYxLjEyIHN1Z2dlc3Rpb25zCisgKgkJICBleGNlcHQgdGhlIHdhcm5pbmcgYWJvdXQgdGhlIHRvbyBsb25nIGxpbmVzIHdpdGggYml0IGNvbW1lbnRzCisgKgkJLSByZW5hbWVkIEZNUkFESU8gdG8gUkFESU8gdG8gY3V0IGxpbmUgbGVuZ3RoIChjaGVja3BhdGNoLnBsKQorICogMjAwOC0wMS0yMglUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CisgKgkJVmVyc2lvbiAxLjAuNAorICoJCS0gYXZvaWQgcG9zcy4gbG9ja2luZyB3aGVuIGRvaW5nIGNvcHlfdG9fdXNlciB3aGljaCBtYXkgc2xlZXAKKyAqCQktIFJEUyBpcyBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlZCBvbiByZWFkIG5vdworICoJCS0gY29kZSBjbGVhbmVkIG9mIHVubmVjZXNzYXJ5IHJkc19jb21tYW5kcworICoJCS0gVVNCIFZlbmRvci9Qcm9kdWN0IElEIGZvciBBRFMvVGVjaCBGTSBSYWRpbyBSZWNlaXZlciB2ZXJpZmllZAorICoJCSAgKHRoYW5rcyB0byBHdWlsbGF1bWUgUkFNT1VTU0UpCisgKiAyMDA4LTAxLTI3CVRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KKyAqCQlWZXJzaW9uIDEuMC41CisgKgkJLSBudW1iZXIgb2Ygc2Vla19yZXRyaWVzIGNoYW5nZWQgdG8gdHVuZV90aW1lb3V0CisgKgkJLSBmaXhlZCBwcm9ibGVtIHdpdGggaW5jb21wbGV0ZSB0dW5lIG9wZXJhdGlvbnMgYnkgb3duIGJ1ZmZlcnMKKyAqCQktIG9wdGltaXphdGlvbiBvZiB2YXJpYWJsZXMgYW5kIHByaW50ZiB0eXBlcworICoJCS0gaW1wcm92ZWQgZXJyb3IgbG9nZ2luZworICogMjAwOC0wMS0zMQlUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CisgKgkJT2xpdmVyIE5ldWt1bSA8b2xpdmVyQG5ldWt1bS5vcmc+CisgKgkJVmVyc2lvbiAxLjAuNgorICoJCS0gZml4ZWQgY292ZXJpdHkgY2hlY2tlciB3YXJuaW5ncyBpbiAqX3VzYl9kcml2ZXJfZGlzY29ubmVjdAorICoJCS0gcHJvYmUoKS9vcGVuKCkgcmFjZSBieSBjb3JyZWN0IG9yZGVyaW5nIGluIHByb2JlKCkKKyAqCQktIERNQSBjb2hlcmVuY3kgcnVsZXMgYnkgc2VwYXJhdGUgYWxsb2NhdGlvbiBvZiBhbGwgYnVmZmVycworICoJCS0gdXNlIG9mIGVuZGlhbm5lc3MgbWFjcm9zCisgKgkJLSBhYnVzZSBvZiBzcGlubG9jaywgcmVwbGFjZWQgYnkgbXV0ZXgKKyAqCQktIHJhY3kgaGFuZGxpbmcgb2YgdGltZXIgaW4gZGlzY29ubmVjdCwKKyAqCQkgIHJlcGxhY2VkIGJ5IGRlbGF5ZWRfd29yaworICoJCS0gcmFjeSBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCksCisgKgkJICByZXBsYWNlZCB3aXRoIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgpCisgKgkJLSBoYW5kbGUgc2lnbmFscyBpbiByZWFkKCkKKyAqIDIwMDgtMDItMDgJVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgorICoJCU9saXZlciBOZXVrdW0gPG9saXZlckBuZXVrdW0ub3JnPgorICoJCVZlcnNpb24gMS4wLjcKKyAqCQktIHVzYiBhdXRvc3VzcGVuZCBzdXBwb3J0CisgKgkJLSB1bnBsdWdnaW5nIGZpeGVkCisgKiAyMDA4LTA1LTA3CVRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KKyAqCQlWZXJzaW9uIDEuMC44CisgKgkJLSBoYXJkd2FyZSBmcmVxdWVuY3kgc2VlayBzdXBwb3J0CisgKgkJLSBhZmMgaW5kaWNhdGlvbgorICoJCS0gbW9yZSBzYWZldHkgY2hlY2tzLCBsZXQgc2k0NzB4X2dldF9mcmVxIHJldHVybiBlcnJubworICoJCS0gdmlkaW9jIGJlaGF2aW9yIGNvcnJlY3RlZCBhY2NvcmRpbmcgdG8gdjRsMiBzcGVjCisgKiAyMDA4LTEwLTIwCUFsZXhleSBLbGltb3YgPGtsaW1vdi5saW51eEBnbWFpbC5jb20+CisgKiAJCS0gYWRkIHN1cHBvcnQgZm9yIEtXb3JsZCBVU0IgRk0gUmFkaW8gRk03MDAKKyAqIAkJLSBibGFja2xpc3RlZCBLV29ybGQgcmFkaW8gaW4gaGlkLWNvcmUuYyBhbmQgaGlkLWlkcy5oCisgKiAyMDA4LTEyLTAzCU1hcmsgTG9yZCA8bWxvcmRAcG9ib3guY29tPgorICoJCS0gYWRkIHN1cHBvcnQgZm9yIERlYWxFeHRyZW1lIFVTQiBSYWRpbworICogMjAwOS0wMS0zMQlCb2IgUm9zcyA8cGlnaXJvbkBnbXguY29tPgorICoJCS0gY29ycmVjdGlvbiBvZiBzdGVyZW8gZGV0ZWN0aW9uL3NldHRpbmcKKyAqCQktIGNvcnJlY3Rpb24gb2Ygc2lnbmFsIHN0cmVuZ3RoIGluZGljYXRvciBzY2FsaW5nCisgKiAyMDA5LTAxLTMxCVJpY2sgQnJvbnNvbiA8cmlja0BlZm4ub3JnPgorICoJCVRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KKyAqCQktIGFkZCBMRUQgc3RhdHVzIG91dHB1dAorICoJCS0gZ2V0IEhXL1NXIHZlcnNpb24gZnJvbSBzY3JhdGNocGFkCisgKiAyMDA5LTA2LTE2ICAgRWRvdWFyZCBMYWZhcmd1ZSA8ZWRvdWFyZEBsYWZhcmd1ZS5uYW1lPgorICoJCVZlcnNpb24gMS4wLjEwCisgKgkJLSBhZGQgc3VwcG9ydCBmb3IgaW50ZXJydXB0IG1vZGUgZm9yIFJEUyBlbmRwb2ludCwKKyAqICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgcG9sbGluZy4KKyAqICAgICAgICAgICAgICAgIEltcHJvdmVzIFJEUyByZWNlcHRpb24gc2lnbmlmaWNhbnRseQorICovCisKKworLyoga2VybmVsIGluY2x1ZGVzICovCisjaW5jbHVkZSAicmFkaW8tc2k0NzB4LmgiCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1vZHVsZSBQYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNwYWNpbmcgKGtIeikgKi8KKy8qIDA6IDIwMCBrSHogKFVTQSwgQXVzdHJhbGlhKSAqLworLyogMTogMTAwIGtIeiAoRXVyb3BlLCBKYXBhbikgKi8KKy8qIDI6ICA1MCBrSHogKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBzcGFjZSA9IDI7Cittb2R1bGVfcGFyYW0oc3BhY2UsIHVzaG9ydCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNwYWNlLCAiU3BhY2luZzogMD0yMDBrSHogMT0xMDBrSHogKjI9NTBrSHoqIik7CisKKy8qIEJvdHRvbSBvZiBCYW5kIChNSHopICovCisvKiAwOiA4Ny41IC0gMTA4IE1IeiAoVVNBLCBFdXJvcGUpKi8KKy8qIDE6IDc2ICAgLSAxMDggTUh6IChKYXBhbiB3aWRlIGJhbmQpICovCisvKiAyOiA3NiAgIC0gIDkwIE1IeiAoSmFwYW4pICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmFuZCA9IDE7Cittb2R1bGVfcGFyYW0oYmFuZCwgdXNob3J0LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYmFuZCwgIkJhbmQ6IDA9ODcuNS4uMTA4TUh6ICoxPTc2Li4xMDhNSHoqIDI9NzYuLjkwTUh6Iik7CisKKy8qIERlLWVtcGhhc2lzICovCisvKiAwOiA3NSB1cyAoVVNBKSAqLworLyogMTogNTAgdXMgKEV1cm9wZSwgQXVzdHJhbGlhLCBKYXBhbikgKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZSA9IDE7Cittb2R1bGVfcGFyYW0oZGUsIHVzaG9ydCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlLCAiRGUtZW1waGFzaXM6IDA9NzV1cyAqMT01MHVzKiIpOworCisvKiBUdW5lIHRpbWVvdXQgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHVuZV90aW1lb3V0ID0gMzAwMDsKK21vZHVsZV9wYXJhbSh0dW5lX3RpbWVvdXQsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh0dW5lX3RpbWVvdXQsICJUdW5lIHRpbWVvdXQ6ICozMDAwKiIpOworCisvKiBTZWVrIHRpbWVvdXQgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2Vla190aW1lb3V0ID0gNTAwMDsKK21vZHVsZV9wYXJhbShzZWVrX3RpbWVvdXQsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhzZWVrX3RpbWVvdXQsICJTZWVrIHRpbWVvdXQ6ICo1MDAwKiIpOworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZW5lcmljIEZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X3NldF9jaGFuIC0gc2V0IHRoZSBjaGFubmVsCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X3NldF9jaGFuKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgdW5zaWduZWQgc2hvcnQgY2hhbikKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlib29sIHRpbWVkX291dCA9IDA7CisKKwkvKiBzdGFydCB0dW5pbmcgKi8KKwlyYWRpby0+cmVnaXN0ZXJzW0NIQU5ORUxdICY9IH5DSEFOTkVMX0NIQU47CisJcmFkaW8tPnJlZ2lzdGVyc1tDSEFOTkVMXSB8PSBDSEFOTkVMX1RVTkUgfCBjaGFuOworCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIENIQU5ORUwpOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGRvbmU7CisKKwkvKiB3YWl0IHRpbGwgdHVuZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0dW5lX3RpbWVvdXQpOworCWRvIHsKKwkJcmV0dmFsID0gc2k0NzB4X2dldF9yZWdpc3RlcihyYWRpbywgU1RBVFVTUlNTSSk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZ290byBzdG9wOworCQl0aW1lZF9vdXQgPSB0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpOworCX0gd2hpbGUgKCgocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfU1RDKSA9PSAwKSAmJgorCQkoIXRpbWVkX291dCkpOworCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfU1RDKSA9PSAwKQorCQlkZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsICJ0dW5lIGRvZXMgbm90IGNvbXBsZXRlXG4iKTsKKwlpZiAodGltZWRfb3V0KQorCQlkZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCisJCQkidHVuZSB0aW1lZCBvdXQgYWZ0ZXIgJXUgbXNcbiIsIHR1bmVfdGltZW91dCk7CisKK3N0b3A6CisJLyogc3RvcCB0dW5pbmcgKi8KKwlyYWRpby0+cmVnaXN0ZXJzW0NIQU5ORUxdICY9IH5DSEFOTkVMX1RVTkU7CisJcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgQ0hBTk5FTCk7CisKK2RvbmU6CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKgorICogc2k0NzB4X2dldF9mcmVxIC0gZ2V0IHRoZSBmcmVxdWVuY3kKKyAqLworc3RhdGljIGludCBzaTQ3MHhfZ2V0X2ZyZXEoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLCB1bnNpZ25lZCBpbnQgKmZyZXEpCit7CisJdW5zaWduZWQgaW50IHNwYWNpbmcsIGJhbmRfYm90dG9tOworCXVuc2lnbmVkIHNob3J0IGNoYW47CisJaW50IHJldHZhbDsKKworCS8qIFNwYWNpbmcgKGtIeikgKi8KKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9TUEFDRSkgPj4gNCkgeworCS8qIDA6IDIwMCBrSHogKFVTQSwgQXVzdHJhbGlhKSAqLworCWNhc2UgMDoKKwkJc3BhY2luZyA9IDAuMjAwICogRlJFUV9NVUw7IGJyZWFrOworCS8qIDE6IDEwMCBrSHogKEV1cm9wZSwgSmFwYW4pICovCisJY2FzZSAxOgorCQlzcGFjaW5nID0gMC4xMDAgKiBGUkVRX01VTDsgYnJlYWs7CisJLyogMjogIDUwIGtIeiAqLworCWRlZmF1bHQ6CisJCXNwYWNpbmcgPSAwLjA1MCAqIEZSRVFfTVVMOyBicmVhazsKKwl9OworCisJLyogQm90dG9tIG9mIEJhbmQgKE1IeikgKi8KKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9CQU5EKSA+PiA2KSB7CisJLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlKSAqLworCWNhc2UgMDoKKwkJYmFuZF9ib3R0b20gPSA4Ny41ICogRlJFUV9NVUw7IGJyZWFrOworCS8qIDE6IDc2ICAgLSAxMDggTUh6IChKYXBhbiB3aWRlIGJhbmQpICovCisJZGVmYXVsdDoKKwkJYmFuZF9ib3R0b20gPSA3NiAgICogRlJFUV9NVUw7IGJyZWFrOworCS8qIDI6IDc2ICAgLSAgOTAgTUh6IChKYXBhbikgKi8KKwljYXNlIDI6CisJCWJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKKwl9OworCisJLyogcmVhZCBjaGFubmVsICovCisJcmV0dmFsID0gc2k0NzB4X2dldF9yZWdpc3RlcihyYWRpbywgUkVBRENIQU4pOworCWNoYW4gPSByYWRpby0+cmVnaXN0ZXJzW1JFQURDSEFOXSAmIFJFQURDSEFOX1JFQURDSEFOOworCisJLyogRnJlcXVlbmN5IChNSHopID0gU3BhY2luZyAoa0h6KSB4IENoYW5uZWwgKyBCb3R0b20gb2YgQmFuZCAoTUh6KSAqLworCSpmcmVxID0gY2hhbiAqIHNwYWNpbmcgKyBiYW5kX2JvdHRvbTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKworLyoKKyAqIHNpNDcweF9zZXRfZnJlcSAtIHNldCB0aGUgZnJlcXVlbmN5CisgKi8KK2ludCBzaTQ3MHhfc2V0X2ZyZXEoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLCB1bnNpZ25lZCBpbnQgZnJlcSkKK3sKKwl1bnNpZ25lZCBpbnQgc3BhY2luZywgYmFuZF9ib3R0b207CisJdW5zaWduZWQgc2hvcnQgY2hhbjsKKworCS8qIFNwYWNpbmcgKGtIeikgKi8KKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9TUEFDRSkgPj4gNCkgeworCS8qIDA6IDIwMCBrSHogKFVTQSwgQXVzdHJhbGlhKSAqLworCWNhc2UgMDoKKwkJc3BhY2luZyA9IDAuMjAwICogRlJFUV9NVUw7IGJyZWFrOworCS8qIDE6IDEwMCBrSHogKEV1cm9wZSwgSmFwYW4pICovCisJY2FzZSAxOgorCQlzcGFjaW5nID0gMC4xMDAgKiBGUkVRX01VTDsgYnJlYWs7CisJLyogMjogIDUwIGtIeiAqLworCWRlZmF1bHQ6CisJCXNwYWNpbmcgPSAwLjA1MCAqIEZSRVFfTVVMOyBicmVhazsKKwl9OworCisJLyogQm90dG9tIG9mIEJhbmQgKE1IeikgKi8KKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9CQU5EKSA+PiA2KSB7CisJLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlKSAqLworCWNhc2UgMDoKKwkJYmFuZF9ib3R0b20gPSA4Ny41ICogRlJFUV9NVUw7IGJyZWFrOworCS8qIDE6IDc2ICAgLSAxMDggTUh6IChKYXBhbiB3aWRlIGJhbmQpICovCisJZGVmYXVsdDoKKwkJYmFuZF9ib3R0b20gPSA3NiAgICogRlJFUV9NVUw7IGJyZWFrOworCS8qIDI6IDc2ICAgLSAgOTAgTUh6IChKYXBhbikgKi8KKwljYXNlIDI6CisJCWJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKKwl9OworCisJLyogQ2hhbiA9IFsgRnJlcSAoTWh6KSAtIEJvdHRvbSBvZiBCYW5kIChNSHopIF0gLyBTcGFjaW5nIChrSHopICovCisJY2hhbiA9IChmcmVxIC0gYmFuZF9ib3R0b20pIC8gc3BhY2luZzsKKworCXJldHVybiBzaTQ3MHhfc2V0X2NoYW4ocmFkaW8sIGNoYW4pOworfQorCisKKy8qCisgKiBzaTQ3MHhfc2V0X3NlZWsgLSBzZXQgc2VlaworICovCitzdGF0aWMgaW50IHNpNDcweF9zZXRfc2VlayhzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8sCisJCXVuc2lnbmVkIGludCB3cmFwX2Fyb3VuZCwgdW5zaWduZWQgaW50IHNlZWtfdXB3YXJkKQoreworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlib29sIHRpbWVkX291dCA9IDA7CisKKwkvKiBzdGFydCBzZWVraW5nICovCisJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gfD0gUE9XRVJDRkdfU0VFSzsKKwlpZiAod3JhcF9hcm91bmQgPT0gMSkKKwkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJj0gflBPV0VSQ0ZHX1NLTU9ERTsKKwllbHNlCisJCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddIHw9IFBPV0VSQ0ZHX1NLTU9ERTsKKwlpZiAoc2Vla191cHdhcmQgPT0gMSkKKwkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gfD0gUE9XRVJDRkdfU0VFS1VQOworCWVsc2UKKwkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJj0gflBPV0VSQ0ZHX1NFRUtVUDsKKwlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBQT1dFUkNGRyk7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gZG9uZTsKKworCS8qIHdhaXQgdGlsbCBzZWVrIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkICovCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHNlZWtfdGltZW91dCk7CisJZG8geworCQlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlZ2lzdGVyKHJhZGlvLCBTVEFUVVNSU1NJKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlnb3RvIHN0b3A7CisJCXRpbWVkX291dCA9IHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCk7CisJfSB3aGlsZSAoKChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9TVEMpID09IDApICYmCisJCSghdGltZWRfb3V0KSk7CisJaWYgKChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9TVEMpID09IDApCisJCWRldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwgInNlZWsgZG9lcyBub3QgY29tcGxldGVcbiIpOworCWlmIChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9TRikKKwkJZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAorCQkJInNlZWsgZmFpbGVkIC8gYmFuZCBsaW1pdCByZWFjaGVkXG4iKTsKKwlpZiAodGltZWRfb3V0KQorCQlkZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCisJCQkic2VlayB0aW1lZCBvdXQgYWZ0ZXIgJXUgbXNcbiIsIHNlZWtfdGltZW91dCk7CisKK3N0b3A6CisJLyogc3RvcCBzZWVraW5nICovCisJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJj0gflBPV0VSQ0ZHX1NFRUs7CisJcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgUE9XRVJDRkcpOworCitkb25lOgorCS8qIHRyeSBhZ2FpbiwgaWYgdGltZWQgb3V0ICovCisJaWYgKChyZXR2YWwgPT0gMCkgJiYgdGltZWRfb3V0KQorCQlyZXR2YWwgPSAtRUFHQUlOOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKgorICogc2k0NzB4X3N0YXJ0IC0gc3dpdGNoIG9uIHJhZGlvCisgKi8KK2ludCBzaTQ3MHhfc3RhcnQoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQoreworCWludCByZXR2YWw7CisKKwkvKiBwb3dlcmNmZyAqLworCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddID0KKwkJUE9XRVJDRkdfRE1VVEUgfCBQT1dFUkNGR19FTkFCTEUgfCBQT1dFUkNGR19SRFNNOworCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFBPV0VSQ0ZHKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBkb25lOworCisJLyogc3lzY29uZmlnIDEgKi8KKwlyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzFdID0gU1lTQ09ORklHMV9ERTsKKwlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBTWVNDT05GSUcxKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBkb25lOworCisJLyogc3lzY29uZmlnIDIgKi8KKwlyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdID0KKwkJKDB4M2YgIDw8IDgpIHwJCQkJLyogU0VFS1RIICovCisJCSgoYmFuZCAgPDwgNikgJiBTWVNDT05GSUcyX0JBTkQpICB8CS8qIEJBTkQgKi8KKwkJKChzcGFjZSA8PCA0KSAmIFNZU0NPTkZJRzJfU1BBQ0UpIHwJLyogU1BBQ0UgKi8KKwkJMTU7CQkJCQkvKiBWT0xVTUUgKG1heCkgKi8KKwlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBTWVNDT05GSUcyKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBkb25lOworCisJLyogcmVzZXQgbGFzdCBjaGFubmVsICovCisJcmV0dmFsID0gc2k0NzB4X3NldF9jaGFuKHJhZGlvLAorCQlyYWRpby0+cmVnaXN0ZXJzW0NIQU5ORUxdICYgQ0hBTk5FTF9DSEFOKTsKKworZG9uZToKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCisgKiBzaTQ3MHhfc3RvcCAtIHN3aXRjaCBvZmYgcmFkaW8KKyAqLworaW50IHNpNDcweF9zdG9wKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbykKK3sKKwlpbnQgcmV0dmFsOworCisJLyogc3lzY29uZmlnIDEgKi8KKwlyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzFdICY9IH5TWVNDT05GSUcxX1JEUzsKKwlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBTWVNDT05GSUcxKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBkb25lOworCisJLyogcG93ZXJjZmcgKi8KKwlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmPSB+UE9XRVJDRkdfRE1VVEU7CisJLyogUE9XRVJDRkdfRU5BQkxFIGhhcyB0byBhdXRvbWF0aWNhbGx5IGdvIGxvdyAqLworCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddIHw9IFBPV0VSQ0ZHX0VOQUJMRSB8CVBPV0VSQ0ZHX0RJU0FCTEU7CisJcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgUE9XRVJDRkcpOworCitkb25lOgorCXJldHVybiByZXR2YWw7Cit9CisKKworLyoKKyAqIHNpNDcweF9yZHNfb24gLSBzd2l0Y2ggb24gcmRzIHJlY2VwdGlvbgorICovCitpbnQgc2k0NzB4X3Jkc19vbihzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCit7CisJaW50IHJldHZhbDsKKworCS8qIHN5c2NvbmZpZyAxICovCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOworCXJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gfD0gU1lTQ09ORklHMV9SRFM7CisJcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgU1lTQ09ORklHMSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gJj0gflNZU0NPTkZJRzFfUkRTOworCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmlkZW80TGludXggSW50ZXJmYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzaTQ3MHhfdmlkaW9jX3F1ZXJ5Y3RybCAtIGVudW1lcmF0ZSBjb250cm9sIGl0ZW1zCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKworCS8qIGFib3J0IGlmIHFjLT5pZCBpcyBiZWxvdyBWNEwyX0NJRF9CQVNFICovCisJaWYgKHFjLT5pZCA8IFY0TDJfQ0lEX0JBU0UpCisJCWdvdG8gZG9uZTsKKworCS8qIHNlYXJjaCB2aWRlbyBjb250cm9sICovCisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxNSwgMSwgMTUpOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwl9CisKKwkvKiBkaXNhYmxlIHVuc3VwcG9ydGVkIGJhc2UgY29udHJvbHMgKi8KKwkvKiB0byBzYXRpc2Z5IGtyYWRpbyBhbmQgc3VjaCBhcHBzICovCisJaWYgKChyZXR2YWwgPT0gLUVJTlZBTCkgJiYgKHFjLT5pZCA8IFY0TDJfQ0lEX0xBU1RQMSkpIHsKKwkJcWMtPmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQ7CisJCXJldHZhbCA9IDA7CisJfQorCitkb25lOgorCWlmIChyZXR2YWwgPCAwKQorCQlkZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCisJCQkicXVlcnkgY29udHJvbHMgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKgorICogc2k0NzB4X3ZpZGlvY19nX2N0cmwgLSBnZXQgdGhlIHZhbHVlIG9mIGEgY29udHJvbAorICovCitzdGF0aWMgaW50IHNpNDcweF92aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiBzYWZldHkgY2hlY2tzICovCisJcmV0dmFsID0gc2k0NzB4X2Rpc2Nvbm5lY3RfY2hlY2socmFkaW8pOworCWlmIChyZXR2YWwpCisJCWdvdG8gZG9uZTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJY3RybC0+dmFsdWUgPSByYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYKKwkJCQlTWVNDT05GSUcyX1ZPTFVNRTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQljdHJsLT52YWx1ZSA9ICgocmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJgorCQkJCVBPV0VSQ0ZHX0RNVVRFKSA9PSAwKSA/IDEgOiAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRUlOVkFMOworCX0KKworZG9uZToKKwlpZiAocmV0dmFsIDwgMCkKKwkJZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAorCQkJImdldCBjb250cm9sIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyoKKyAqIHNpNDcweF92aWRpb2Nfc19jdHJsIC0gc2V0IHRoZSB2YWx1ZSBvZiBhIGNvbnRyb2wKKyAqLworc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCWludCByZXR2YWwgPSAwOworCisJLyogc2FmZXR5IGNoZWNrcyAqLworCXJldHZhbCA9IHNpNDcweF9kaXNjb25uZWN0X2NoZWNrKHJhZGlvKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGRvbmU7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMl0gJj0gflNZU0NPTkZJRzJfVk9MVU1FOworCQlyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdIHw9IGN0cmwtPnZhbHVlOworCQlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBTWVNDT05GSUcyKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoY3RybC0+dmFsdWUgPT0gMSkKKwkJCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICY9IH5QT1dFUkNGR19ETVVURTsKKwkJZWxzZQorCQkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gfD0gUE9XRVJDRkdfRE1VVEU7CisJCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFBPV0VSQ0ZHKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwl9CisKK2RvbmU6CisJaWYgKHJldHZhbCA8IDApCisJCWRldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKKwkJCSJzZXQgY29udHJvbCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCisgKiBzaTQ3MHhfdmlkaW9jX2dfYXVkaW8gLSBnZXQgYXVkaW8gYXR0cmlidXRlcworICovCitzdGF0aWMgaW50IHNpNDcweF92aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfYXVkaW8gKmF1ZGlvKQoreworCS8qIGRyaXZlciBjb25zdGFudHMgKi8KKwlhdWRpby0+aW5kZXggPSAwOworCXN0cmNweShhdWRpby0+bmFtZSwgIlJhZGlvIik7CisJYXVkaW8tPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJYXVkaW8tPm1vZGUgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIHNpNDcweF92aWRpb2NfZ190dW5lciAtIGdldCB0dW5lciBhdHRyaWJ1dGVzCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl90dW5lciAqdHVuZXIpCit7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qIHNhZmV0eSBjaGVja3MgKi8KKwlyZXR2YWwgPSBzaTQ3MHhfZGlzY29ubmVjdF9jaGVjayhyYWRpbyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBkb25lOworCisJaWYgKHR1bmVyLT5pbmRleCAhPSAwKSB7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlZ2lzdGVyKHJhZGlvLCBTVEFUVVNSU1NJKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBkb25lOworCisJLyogZHJpdmVyIGNvbnN0YW50cyAqLworCXN0cmNweSh0dW5lci0+bmFtZSwgIkZNIik7CisJdHVuZXItPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TSTQ3MFgpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9TSTQ3MFhfTU9EVUxFKQorCXR1bmVyLT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XIHwgVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwKKwkJCSAgICBWNEwyX1RVTkVSX0NBUF9SRFM7CisjZWxzZQorCXR1bmVyLT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XIHwgVjRMMl9UVU5FUl9DQVBfU1RFUkVPOworI2VuZGlmCisKKwkvKiByYW5nZSBsaW1pdHMgKi8KKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9CQU5EKSA+PiA2KSB7CisJLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlLCBkZWZhdWx0KSAqLworCWRlZmF1bHQ6CisJCXR1bmVyLT5yYW5nZWxvdyAgPSAgODcuNSAqIEZSRVFfTVVMOworCQl0dW5lci0+cmFuZ2VoaWdoID0gMTA4ICAgKiBGUkVRX01VTDsKKwkJYnJlYWs7CisJLyogMTogNzYgICAtIDEwOCBNSHogKEphcGFuIHdpZGUgYmFuZCkgKi8KKwljYXNlIDE6CisJCXR1bmVyLT5yYW5nZWxvdyAgPSAgNzYgICAqIEZSRVFfTVVMOworCQl0dW5lci0+cmFuZ2VoaWdoID0gMTA4ICAgKiBGUkVRX01VTDsKKwkJYnJlYWs7CisJLyogMjogNzYgICAtICA5MCBNSHogKEphcGFuKSAqLworCWNhc2UgMjoKKwkJdHVuZXItPnJhbmdlbG93ICA9ICA3NiAgICogRlJFUV9NVUw7CisJCXR1bmVyLT5yYW5nZWhpZ2ggPSAgOTAgICAqIEZSRVFfTVVMOworCQlicmVhazsKKwl9OworCisJLyogc3RlcmVvIGluZGljYXRvciA9PSBzdGVyZW8gKGluc3RlYWQgb2YgbW9ubykgKi8KKwlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSV0gJiBTVEFUVVNSU1NJX1NUKSA9PSAwKQorCQl0dW5lci0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CisJZWxzZQorCQl0dW5lci0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NJNDcwWCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX1NJNDcwWF9NT0RVTEUpCisJLyogSWYgdGhlcmUgaXMgYSByZWxpYWJsZSBtZXRob2Qgb2YgZGV0ZWN0aW5nIGFuIFJEUyBjaGFubmVsLAorCSAgIHRoZW4gdGhpcyBjb2RlIHNob3VsZCBjaGVjayBmb3IgdGhhdCBiZWZvcmUgc2V0dGluZyB0aGlzCisJICAgUkRTIHN1YmNoYW5uZWwuICovCisJdHVuZXItPnJ4c3ViY2hhbnMgfD0gVjRMMl9UVU5FUl9TVUJfUkRTOworI2VuZGlmCisKKwkvKiBtb25vL3N0ZXJlbyBzZWxlY3RvciAqLworCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJiBQT1dFUkNGR19NT05PKSA9PSAwKQorCQl0dW5lci0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJZWxzZQorCQl0dW5lci0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCisJLyogbWluIGlzIHdvcnN0LCBtYXggaXMgYmVzdDsgc2lnbmFsOjAuLjB4ZmZmZjsgcnNzaTogMC4uMHhmZiAqLworCS8qIG1lYXN1cmVkIGluIHVuaXRzIG9mIGRi7KiJViBpbiAxIGRiIGluY3JlbWVudHMgKG1heCBhdCB+NzUgZGLsqIlWKSAqLworCXR1bmVyLT5zaWduYWwgPSAocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfUlNTSSk7CisJLyogdGhlIGlkZWFsIGZhY3RvciBpcyAweGZmZmYvNzUgPSA4NzMsOCAqLworCXR1bmVyLT5zaWduYWwgPSAodHVuZXItPnNpZ25hbCAqIDg3MykgKyAoOCAqIHR1bmVyLT5zaWduYWwgLyAxMCk7CisKKwkvKiBhdXRvbWF0aWMgZnJlcXVlbmN5IGNvbnRyb2w6IC0xOiBmcmVxIHRvIGxvdywgMSBmcmVxIHRvIGhpZ2ggKi8KKwkvKiBBRkNSTCBkb2VzIG9ubHkgaW5kaWNhdGUgdGhhdCBmcmVxLiBkaWZmZXJzLCBub3QgaWYgdG9vIGxvdy9oaWdoICovCisJdHVuZXItPmFmYyA9IChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9BRkNSTCkgPyAxIDogMDsKKworZG9uZToKKwlpZiAocmV0dmFsIDwgMCkKKwkJZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAorCQkJImdldCB0dW5lciBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCisgKiBzaTQ3MHhfdmlkaW9jX3NfdHVuZXIgLSBzZXQgdHVuZXIgYXR0cmlidXRlcworICovCitzdGF0aWMgaW50IHNpNDcweF92aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnR1bmVyKQoreworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisKKwkvKiBzYWZldHkgY2hlY2tzICovCisJcmV0dmFsID0gc2k0NzB4X2Rpc2Nvbm5lY3RfY2hlY2socmFkaW8pOworCWlmIChyZXR2YWwpCisJCWdvdG8gZG9uZTsKKworCWlmICh0dW5lci0+aW5kZXggIT0gMCkKKwkJZ290byBkb25lOworCisJLyogbW9uby9zdGVyZW8gc2VsZWN0b3IgKi8KKwlzd2l0Y2ggKHR1bmVyLT5hdWRtb2RlKSB7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKKwkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gfD0gUE9XRVJDRkdfTU9OTzsgIC8qIGZvcmNlIG1vbm8gKi8KKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmPSB+UE9XRVJDRkdfTU9OTzsgLyogdHJ5IHN0ZXJlbyAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGRvbmU7CisJfQorCisJcmV0dmFsID0gc2k0NzB4X3NldF9yZWdpc3RlcihyYWRpbywgUE9XRVJDRkcpOworCitkb25lOgorCWlmIChyZXR2YWwgPCAwKQorCQlkZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCisJCQkic2V0IHR1bmVyIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyoKKyAqIHNpNDcweF92aWRpb2NfZ19mcmVxdWVuY3kgLSBnZXQgdHVuZXIgb3IgbW9kdWxhdG9yIHJhZGlvIGZyZXF1ZW5jeQorICovCitzdGF0aWMgaW50IHNpNDcweF92aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCWludCByZXR2YWwgPSAwOworCisJLyogc2FmZXR5IGNoZWNrcyAqLworCXJldHZhbCA9IHNpNDcweF9kaXNjb25uZWN0X2NoZWNrKHJhZGlvKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoZnJlcS0+dHVuZXIgIT0gMCkgeworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CisJfQorCisJZnJlcS0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJcmV0dmFsID0gc2k0NzB4X2dldF9mcmVxKHJhZGlvLCAmZnJlcS0+ZnJlcXVlbmN5KTsKKworZG9uZToKKwlpZiAocmV0dmFsIDwgMCkKKwkJZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAorCQkJImdldCBmcmVxdWVuY3kgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKgorICogc2k0NzB4X3ZpZGlvY19zX2ZyZXF1ZW5jeSAtIHNldCB0dW5lciBvciBtb2R1bGF0b3IgcmFkaW8gZnJlcXVlbmN5CisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQoreworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiBzYWZldHkgY2hlY2tzICovCisJcmV0dmFsID0gc2k0NzB4X2Rpc2Nvbm5lY3RfY2hlY2socmFkaW8pOworCWlmIChyZXR2YWwpCisJCWdvdG8gZG9uZTsKKworCWlmIChmcmVxLT50dW5lciAhPSAwKSB7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlyZXR2YWwgPSBzaTQ3MHhfc2V0X2ZyZXEocmFkaW8sIGZyZXEtPmZyZXF1ZW5jeSk7CisKK2RvbmU6CisJaWYgKHJldHZhbCA8IDApCisJCWRldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKKwkJCSJzZXQgZnJlcXVlbmN5IGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyoKKyAqIHNpNDcweF92aWRpb2Nfc19od19mcmVxX3NlZWsgLSBzZXQgaGFyZHdhcmUgZnJlcXVlbmN5IHNlZWsKKyAqLworc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX3NfaHdfZnJlcV9zZWVrKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWsgKnNlZWspCit7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qIHNhZmV0eSBjaGVja3MgKi8KKwlyZXR2YWwgPSBzaTQ3MHhfZGlzY29ubmVjdF9jaGVjayhyYWRpbyk7CisJaWYgKHJldHZhbCkKKwkJZ290byBkb25lOworCisJaWYgKHNlZWstPnR1bmVyICE9IDApIHsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKworCXJldHZhbCA9IHNpNDcweF9zZXRfc2VlayhyYWRpbywgc2Vlay0+d3JhcF9hcm91bmQsIHNlZWstPnNlZWtfdXB3YXJkKTsKKworZG9uZToKKwlpZiAocmV0dmFsIDwgMCkKKwkJZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAorCQkJInNldCBoYXJkd2FyZSBmcmVxdWVuY3kgc2VlayBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCisgKiBzaTQ3MHhfaW9jdGxfb3BzIC0gdmlkZW8gZGV2aWNlIGlvY3RsIG9wZXJhdGlvbnMKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBzaTQ3MHhfaW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAJPSBzaTQ3MHhfdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfcXVlcnljdHJsCT0gc2k0NzB4X3ZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwJCT0gc2k0NzB4X3ZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwJCT0gc2k0NzB4X3ZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19nX2F1ZGlvCQk9IHNpNDcweF92aWRpb2NfZ19hdWRpbywKKwkudmlkaW9jX2dfdHVuZXIJCT0gc2k0NzB4X3ZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lcgkJPSBzaTQ3MHhfdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeQk9IHNpNDcweF92aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeQk9IHNpNDcweF92aWRpb2Nfc19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2h3X2ZyZXFfc2Vlawk9IHNpNDcweF92aWRpb2Nfc19od19mcmVxX3NlZWssCit9OworCisKKy8qCisgKiBzaTQ3MHhfdmlkZGV2X3RlbXBsYXRlIC0gdmlkZW8gZGV2aWNlIGludGVyZmFjZQorICovCitzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNpNDcweF92aWRkZXZfdGVtcGxhdGUgPSB7CisJLmZvcHMJCQk9ICZzaTQ3MHhfZm9wcywKKwkubmFtZQkJCT0gRFJJVkVSX05BTUUsCisJLnJlbGVhc2UJCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisJLmlvY3RsX29wcwkJPSAmc2k0NzB4X2lvY3RsX29wcywKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ1M2I2YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1pMmMuYwpAQCAtMCwwICsxLDQwMSBAQAorLyoKKyAqIGRyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1pMmMuYworICoKKyAqIEkyQyBkcml2ZXIgZm9yIHJhZGlvcyB3aXRoIFNpbGljb24gTGFicyBTaTQ3MHggRk0gUmFkaW8gUmVjZWl2ZXJzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uTHRkCisgKiBBdXRob3I6IEpvb255b3VuZyBTaGltIDxqeTA5MjIuc2hpbUBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKworLyoKKyAqIFRvRG86CisgKiAtIFJEUyBzdXBwb3J0CisgKi8KKworCisvKiBkcml2ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPiI7CisjZGVmaW5lIERSSVZFUl9LRVJORUxfVkVSU0lPTiBLRVJORUxfVkVSU0lPTigxLCAwLCAwKQorI2RlZmluZSBEUklWRVJfQ0FSRCAiU2lsaWNvbiBMYWJzIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlciIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkkyQyByYWRpbyBkcml2ZXIgZm9yIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlcnMiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAuMCIKKworLyoga2VybmVsIGluY2x1ZGVzICovCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgInJhZGlvLXNpNDcweC5oIgorCisKKy8qIEkyQyBEZXZpY2UgSUQgTGlzdCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNpNDcweF9pMmNfaWRbXSA9IHsKKwkvKiBHZW5lcmljIEVudHJ5ICovCisJeyAic2k0NzB4IiwgMCB9LAorCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNpNDcweF9pMmNfaWQpOworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNb2R1bGUgUGFyYW1ldGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSYWRpbyBOciAqLworc3RhdGljIGludCByYWRpb19uciA9IC0xOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhyYWRpb19uciwgIlJhZGlvIE5yIik7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEkyQyBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBXcml0ZSBzdGFydHMgd2l0aCB0aGUgdXBwZXIgYnl0ZSBvZiByZWdpc3RlciAweDAyICovCisjZGVmaW5lIFdSSVRFX1JFR19OVU0JCTgKKyNkZWZpbmUgV1JJVEVfSU5ERVgoaSkJCShpICsgMHgwMikKKworLyogUmVhZCBzdGFydHMgd2l0aCB0aGUgdXBwZXIgYnl0ZSBvZiByZWdpc3RlciAweDBhICovCisjZGVmaW5lIFJFQURfUkVHX05VTQkJUkFESU9fUkVHSVNURVJfTlVNCisjZGVmaW5lIFJFQURfSU5ERVgoaSkJCSgoaSArIFJBRElPX1JFR0lTVEVSX05VTSAtIDB4MGEpICUgUkVBRF9SRUdfTlVNKQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZW5lcmFsIERyaXZlciBGdW5jdGlvbnMgLSBSRUdJU1RFUnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHNpNDcweF9nZXRfcmVnaXN0ZXIgLSByZWFkIHJlZ2lzdGVyCisgKi8KK2ludCBzaTQ3MHhfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgaW50IHJlZ25yKQoreworCXUxNiBidWZbUkVBRF9SRUdfTlVNXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzFdID0geworCQl7IHJhZGlvLT5jbGllbnQtPmFkZHIsIEkyQ19NX1JELCBzaXplb2YodTE2KSAqIFJFQURfUkVHX05VTSwKKwkJCSh2b2lkICopYnVmIH0sCisJfTsKKworCWlmIChpMmNfdHJhbnNmZXIocmFkaW8tPmNsaWVudC0+YWRhcHRlciwgbXNncywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FSU87CisKKwlyYWRpby0+cmVnaXN0ZXJzW3JlZ25yXSA9IF9fYmUxNl90b19jcHUoYnVmW1JFQURfSU5ERVgocmVnbnIpXSk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogc2k0NzB4X3NldF9yZWdpc3RlciAtIHdyaXRlIHJlZ2lzdGVyCisgKi8KK2ludCBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgaW50IHJlZ25yKQoreworCWludCBpOworCXUxNiBidWZbV1JJVEVfUkVHX05VTV07CisJc3RydWN0IGkyY19tc2cgbXNnc1sxXSA9IHsKKwkJeyByYWRpby0+Y2xpZW50LT5hZGRyLCAwLCBzaXplb2YodTE2KSAqIFdSSVRFX1JFR19OVU0sCisJCQkodm9pZCAqKWJ1ZiB9LAorCX07CisKKwlmb3IgKGkgPSAwOyBpIDwgV1JJVEVfUkVHX05VTTsgaSsrKQorCQlidWZbaV0gPSBfX2NwdV90b19iZTE2KHJhZGlvLT5yZWdpc3RlcnNbV1JJVEVfSU5ERVgoaSldKTsKKworCWlmIChpMmNfdHJhbnNmZXIocmFkaW8tPmNsaWVudC0+YWRhcHRlciwgbXNncywgMSkgIT0gMSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zIC0gRU5USVJFIFJFR0lTVEVSUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X2dldF9hbGxfcmVnaXN0ZXJzIC0gcmVhZCBlbnRpcmUgcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X2dldF9hbGxfcmVnaXN0ZXJzKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbykKK3sKKwlpbnQgaTsKKwl1MTYgYnVmW1JFQURfUkVHX05VTV07CisJc3RydWN0IGkyY19tc2cgbXNnc1sxXSA9IHsKKwkJeyByYWRpby0+Y2xpZW50LT5hZGRyLCBJMkNfTV9SRCwgc2l6ZW9mKHUxNikgKiBSRUFEX1JFR19OVU0sCisJCQkodm9pZCAqKWJ1ZiB9LAorCX07CisKKwlpZiAoaTJjX3RyYW5zZmVyKHJhZGlvLT5jbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCisJZm9yIChpID0gMDsgaSA8IFJFQURfUkVHX05VTTsgaSsrKQorCQlyYWRpby0+cmVnaXN0ZXJzW2ldID0gX19iZTE2X3RvX2NwdShidWZbUkVBRF9JTkRFWChpKV0pOworCisJcmV0dXJuIDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIERJU0NPTk5FQ1RfQ0hFQ0sKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHNpNDcweF9kaXNjb25uZWN0X2NoZWNrIC0gY2hlY2sgd2hldGhlciByYWRpbyBkaXNjb25uZWN0cworICovCitpbnQgc2k0NzB4X2Rpc2Nvbm5lY3RfY2hlY2soc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQoreworCXJldHVybiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlIE9wZXJhdGlvbnMgSW50ZXJmYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzaTQ3MHhfZm9wc19vcGVuIC0gZmlsZSBvcGVuCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X2ZvcHNfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCWludCByZXR2YWwgPSAwOworCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOworCXJhZGlvLT51c2VycysrOworCisJaWYgKHJhZGlvLT51c2VycyA9PSAxKQorCQkvKiBzdGFydCByYWRpbyAqLworCQlyZXR2YWwgPSBzaTQ3MHhfc3RhcnQocmFkaW8pOworCisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCisgKiBzaTQ3MHhfZm9wc19yZWxlYXNlIC0gZmlsZSByZWxlYXNlCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X2ZvcHNfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCWludCByZXR2YWwgPSAwOworCisJLyogc2FmZXR5IGNoZWNrICovCisJaWYgKCFyYWRpbykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7CisJcmFkaW8tPnVzZXJzLS07CisJaWYgKHJhZGlvLT51c2VycyA9PSAwKQorCQkvKiBzdG9wIHJhZGlvICovCisJCXJldHZhbCA9IHNpNDcweF9zdG9wKHJhZGlvKTsKKworCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKgorICogc2k0NzB4X2ZvcHMgLSBmaWxlIG9wZXJhdGlvbnMgaW50ZXJmYWNlCisgKi8KK2NvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBzaTQ3MHhfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKKwkub3BlbgkJPSBzaTQ3MHhfZm9wc19vcGVuLAorCS5yZWxlYXNlCT0gc2k0NzB4X2ZvcHNfcmVsZWFzZSwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZpZGVvNExpbnV4IEludGVyZmFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X3ZpZGlvY19xdWVyeWNhcCAtIHF1ZXJ5IGRldmljZSBjYXBhYmlsaXRpZXMKKyAqLworaW50IHNpNDcweF92aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcGFiaWxpdHkpCit7CisJc3RybGNweShjYXBhYmlsaXR5LT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoY2FwYWJpbGl0eS0+ZHJpdmVyKSk7CisJc3RybGNweShjYXBhYmlsaXR5LT5jYXJkLCBEUklWRVJfQ0FSRCwgc2l6ZW9mKGNhcGFiaWxpdHktPmNhcmQpKTsKKwljYXBhYmlsaXR5LT52ZXJzaW9uID0gRFJJVkVSX0tFUk5FTF9WRVJTSU9OOworCWNhcGFiaWxpdHktPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX0hXX0ZSRVFfU0VFSyB8CisJCVY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CisKKwlyZXR1cm4gMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSTJDIEludGVyZmFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X2kyY19wcm9iZSAtIHByb2JlIGZvciB0aGUgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHNpNDcweF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbzsKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBjaGFyIHZlcnNpb25fd2FybmluZyA9IDA7CisKKwkvKiBwcml2YXRlIGRhdGEgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gKi8KKwlyYWRpbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaTQ3MHhfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYWRpbykgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9pbml0aWFsOworCX0KKwlyYWRpby0+dXNlcnMgPSAwOworCXJhZGlvLT5jbGllbnQgPSBjbGllbnQ7CisJbXV0ZXhfaW5pdCgmcmFkaW8tPmxvY2spOworCisJLyogdmlkZW8gZGV2aWNlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uICovCisJcmFkaW8tPnZpZGVvZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCFyYWRpby0+dmlkZW9kZXYpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmFkaW87CisJfQorCW1lbWNweShyYWRpby0+dmlkZW9kZXYsICZzaTQ3MHhfdmlkZGV2X3RlbXBsYXRlLAorCQkJc2l6ZW9mKHNpNDcweF92aWRkZXZfdGVtcGxhdGUpKTsKKwl2aWRlb19zZXRfZHJ2ZGF0YShyYWRpby0+dmlkZW9kZXYsIHJhZGlvKTsKKworCS8qIHBvd2VyIHVwIDogbmVlZCAxMTBtcyAqLworCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddID0gUE9XRVJDRkdfRU5BQkxFOworCWlmIChzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBQT1dFUkNGRykgPCAwKSB7CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZXJyX2FsbDsKKwl9CisJbXNsZWVwKDExMCk7CisKKwkvKiBnZXQgZGV2aWNlIGFuZCBjaGlwIHZlcnNpb25zICovCisJaWYgKHNpNDcweF9nZXRfYWxsX3JlZ2lzdGVycyhyYWRpbykgPCAwKSB7CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZXJyX3ZpZGVvOworCX0KKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJEZXZpY2VJRD0weCU0LjRoeCBDaGlwSUQ9MHglNC40aHhcbiIsCisJCQlyYWRpby0+cmVnaXN0ZXJzW0RFVklDRUlEXSwgcmFkaW8tPnJlZ2lzdGVyc1tDSElQSURdKTsKKwlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbQ0hJUElEXSAmIENISVBJRF9GSVJNV0FSRSkgPCBSQURJT19GV19WRVJTSU9OKSB7CisJCWRldl93YXJuKCZjbGllbnQtPmRldiwKKwkJCSJUaGlzIGRyaXZlciBpcyBrbm93biB0byB3b3JrIHdpdGggIgorCQkJImZpcm13YXJlIHZlcnNpb24gJWh1LFxuIiwgUkFESU9fRldfVkVSU0lPTik7CisJCWRldl93YXJuKCZjbGllbnQtPmRldiwKKwkJCSJidXQgdGhlIGRldmljZSBoYXMgZmlybXdhcmUgdmVyc2lvbiAlaHUuXG4iLAorCQkJcmFkaW8tPnJlZ2lzdGVyc1tDSElQSURdICYgQ0hJUElEX0ZJUk1XQVJFKTsKKwkJdmVyc2lvbl93YXJuaW5nID0gMTsKKwl9CisKKwkvKiBnaXZlIG91dCB2ZXJzaW9uIHdhcm5pbmcgKi8KKwlpZiAodmVyc2lvbl93YXJuaW5nID09IDEpIHsKKwkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LAorCQkJIklmIHlvdSBoYXZlIHNvbWUgdHJvdWJsZSB1c2luZyB0aGlzIGRyaXZlcixcbiIpOworCQlkZXZfd2FybigmY2xpZW50LT5kZXYsCisJCQkicGxlYXNlIHJlcG9ydCB0byBWNEwgTUwgYXQgIgorCQkJImxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZ1xuIik7CisJfQorCisJLyogc2V0IGluaXRpYWwgZnJlcXVlbmN5ICovCisJc2k0NzB4X3NldF9mcmVxKHJhZGlvLCA4Ny41ICogRlJFUV9NVUwpOyAvKiBhdmFpbGFibGUgaW4gYWxsIHJlZ2lvbnMgKi8KKworCS8qIHJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLworCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYsIFZGTF9UWVBFX1JBRElPLAorCQkJcmFkaW9fbnIpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHZpZGVvIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2FsbDsKKwl9CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcmFkaW8pOworCisJcmV0dXJuIDA7CitlcnJfYWxsOgorZXJyX3ZpZGVvOgorCXZpZGVvX2RldmljZV9yZWxlYXNlKHJhZGlvLT52aWRlb2Rldik7CitlcnJfcmFkaW86CisJa2ZyZWUocmFkaW8pOworZXJyX2luaXRpYWw6CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKgorICogc2k0NzB4X2kyY19yZW1vdmUgLSByZW1vdmUgdGhlIGRldmljZQorICovCitzdGF0aWMgX19kZXZleGl0IGludCBzaTQ3MHhfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2KTsKKwlrZnJlZShyYWRpbyk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogc2k0NzB4X2kyY19kcml2ZXIgLSBpMmMgZHJpdmVyIGludGVyZmFjZQorICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2k0NzB4X2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gInNpNDcweCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJCT0gc2k0NzB4X2kyY19wcm9iZSwKKwkucmVtb3ZlCQkJPSBfX2RldmV4aXRfcChzaTQ3MHhfaTJjX3JlbW92ZSksCisJLmlkX3RhYmxlCQk9IHNpNDcweF9pMmNfaWQsCit9OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNb2R1bGUgSW50ZXJmYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzaTQ3MHhfaTJjX2luaXQgLSBtb2R1bGUgaW5pdAorICovCitzdGF0aWMgaW50IF9faW5pdCBzaTQ3MHhfaTJjX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9ERVNDICIsIFZlcnNpb24gIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnNpNDcweF9pMmNfZHJpdmVyKTsKK30KKworCisvKgorICogc2k0NzB4X2kyY19leGl0IC0gbW9kdWxlIGV4aXQKKyAqLworc3RhdGljIHZvaWQgX19leGl0IHNpNDcweF9pMmNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZzaTQ3MHhfaTJjX2RyaXZlcik7Cit9CisKKworbW9kdWxlX2luaXQoc2k0NzB4X2kyY19pbml0KTsKK21vZHVsZV9leGl0KHNpNDcweF9pMmNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LXVzYi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LXVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZDBlMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMKQEAgLTAsMCArMSw5ODggQEAKKy8qCisgKiAgZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LXVzYi5jCisgKgorICogIFVTQiBkcml2ZXIgZm9yIHJhZGlvcyB3aXRoIFNpbGljb24gTGFicyBTaTQ3MHggRk0gUmFkaW8gUmVjZWl2ZXJzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisKKy8qCisgKiBUb0RvOgorICogLSBhZGQgZmlybXdhcmUgZG93bmxvYWQvdXBkYXRlIHN1cHBvcnQKKyAqLworCisKKy8qIGRyaXZlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBEUklWRVJfQVVUSE9SICJUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+IgorI2RlZmluZSBEUklWRVJfS0VSTkVMX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMSwgMCwgMTApCisjZGVmaW5lIERSSVZFUl9DQVJEICJTaWxpY29uIExhYnMgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVyIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIHJhZGlvIGRyaXZlciBmb3IgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVycyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMC4xMCIKKworLyoga2VybmVsIGluY2x1ZGVzICovCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisKKyNpbmNsdWRlICJyYWRpby1zaTQ3MHguaCIKKworCisvKiBVU0IgRGV2aWNlIElEIExpc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzaTQ3MHhfdXNiX2RyaXZlcl9pZF90YWJsZVtdID0geworCS8qIFNpbGljb24gTGFicyBVU0IgRk0gUmFkaW8gUmVmZXJlbmNlIERlc2lnbiAqLworCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgxMGM0LCAweDgxOGEsIFVTQl9DTEFTU19ISUQsIDAsIDApIH0sCisJLyogQURTL1RlY2ggRk0gUmFkaW8gUmVjZWl2ZXIgKGZvcm1lcmx5IEluc3RhbnQgRk0gTXVzaWMpICovCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDA2ZTEsIDB4YTE1NSwgVVNCX0NMQVNTX0hJRCwgMCwgMCkgfSwKKwkvKiBLV29ybGQgVVNCIEZNIFJhZGlvIFNuYXBNdXNpYyBNb2JpbGUgNzAwIChGTTcwMCkgKi8KKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MWI4MCwgMHhkNzAwLCBVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAorCS8qIFNhbmVpIEVsZWN0cmljLCBJbmMuIEZNIFVTQiBSYWRpbyAoc29sZCBhcyBEZWFsRXh0cmVtZS5jb20gUENlYXIpICovCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDEwYzUsIDB4ODE5YSwgVVNCX0NMQVNTX0hJRCwgMCwgMCkgfSwKKwkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzaTQ3MHhfdXNiX2RyaXZlcl9pZF90YWJsZSk7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1vZHVsZSBQYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFJhZGlvIE5yICovCitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJhZGlvX25yLCAiUmFkaW8gTnIiKTsKKworLyogVVNCIHRpbWVvdXQgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNiX3RpbWVvdXQgPSA1MDA7Cittb2R1bGVfcGFyYW0odXNiX3RpbWVvdXQsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh1c2JfdGltZW91dCwgIlVTQiB0aW1lb3V0IChtcyk6ICo1MDAqIik7CisKKy8qIFJEUyBidWZmZXIgYmxvY2tzICovCitzdGF0aWMgdW5zaWduZWQgaW50IHJkc19idWYgPSAxMDA7Cittb2R1bGVfcGFyYW0ocmRzX2J1ZiwgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJkc19idWYsICJSRFMgYnVmZmVyIGVudHJpZXM6ICoxMDAqIik7CisKKy8qIFJEUyBtYXhpbXVtIGJsb2NrIGVycm9ycyAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heF9yZHNfZXJyb3JzID0gMTsKKy8qIDAgbWVhbnMgICAwICBlcnJvcnMgcmVxdWlyaW5nIGNvcnJlY3Rpb24gKi8KKy8qIDEgbWVhbnMgMS0yICBlcnJvcnMgcmVxdWlyaW5nIGNvcnJlY3Rpb24gKHVzZWQgYnkgb3JpZ2luYWwgVVNCUmFkaW8uZXhlKSAqLworLyogMiBtZWFucyAzLTUgIGVycm9ycyByZXF1aXJpbmcgY29ycmVjdGlvbiAqLworLyogMyBtZWFucyAgIDYrIGVycm9ycyBvciBlcnJvcnMgaW4gY2hlY2t3b3JkLCBjb3JyZWN0aW9uIG5vdCBwb3NzaWJsZSAqLworbW9kdWxlX3BhcmFtKG1heF9yZHNfZXJyb3JzLCB1c2hvcnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfcmRzX2Vycm9ycywgIlJEUyBtYXhpbXVtIGJsb2NrIGVycm9yczogKjEqIik7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVTQiBISUQgUmVwb3J0cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSZXBvcnRzIDEtMTYgZ2l2ZSBkaXJlY3QgcmVhZC93cml0ZSBhY2Nlc3MgdG8gdGhlIDE2IFNpNDcweCByZWdpc3RlcnMgKi8KKy8qIHdpdGggdGhlIChSRVBPUlRfSUQgLSAxKSBjb3JyZXNwb25kaW5nIHRvIHRoZSByZWdpc3RlciBhZGRyZXNzIGFjcm9zcyBVU0IgKi8KKy8qIGVuZHBvaW50IDAgdXNpbmcgR0VUX1JFUE9SVCBhbmQgU0VUX1JFUE9SVCAqLworI2RlZmluZSBSRUdJU1RFUl9SRVBPUlRfU0laRQkoUkFESU9fUkVHSVNURVJfU0laRSArIDEpCisjZGVmaW5lIFJFR0lTVEVSX1JFUE9SVChyZWcpCSgocmVnKSArIDEpCisKKy8qIFJlcG9ydCAxNyBnaXZlcyBkaXJlY3QgcmVhZC93cml0ZSBhY2Nlc3MgdG8gdGhlIGVudGlyZSBTaTQ3MHggcmVnaXN0ZXIgKi8KKy8qIG1hcCBhY3Jvc3MgZW5kcG9pbnQgMCB1c2luZyBHRVRfUkVQT1JUIGFuZCBTRVRfUkVQT1JUICovCisjZGVmaW5lIEVOVElSRV9SRVBPUlRfU0laRQkoUkFESU9fUkVHSVNURVJfTlVNICogUkFESU9fUkVHSVNURVJfU0laRSArIDEpCisjZGVmaW5lIEVOVElSRV9SRVBPUlQJCTE3CisKKy8qIFJlcG9ydCAxOCBpcyB1c2VkIHRvIHNlbmQgdGhlIGxvd2VzdCA2IFNpNDcweCByZWdpc3RlcnMgdXAgdGhlIEhJRCAqLworLyogaW50ZXJydXB0IGVuZHBvaW50IDEgdG8gV2luZG93cyBldmVyeSAyMCBtaWxsaXNlY29uZHMgZm9yIHN0YXR1cyAqLworI2RlZmluZSBSRFNfUkVQT1JUX1NJWkUJCShSRFNfUkVHSVNURVJfTlVNICogUkFESU9fUkVHSVNURVJfU0laRSArIDEpCisjZGVmaW5lIFJEU19SRVBPUlQJCTE4CisKKy8qIFJlcG9ydCAxOTogTEVEIHN0YXRlICovCisjZGVmaW5lIExFRF9SRVBPUlRfU0laRQkJMworI2RlZmluZSBMRURfUkVQT1JUCQkxOQorCisvKiBSZXBvcnQgMTk6IHN0cmVhbSAqLworI2RlZmluZSBTVFJFQU1fUkVQT1JUX1NJWkUJMworI2RlZmluZSBTVFJFQU1fUkVQT1JUCQkxOQorCisvKiBSZXBvcnQgMjA6IHNjcmF0Y2ggKi8KKyNkZWZpbmUgU0NSQVRDSF9QQUdFX1NJWkUJNjMKKyNkZWZpbmUgU0NSQVRDSF9SRVBPUlRfU0laRQkoU0NSQVRDSF9QQUdFX1NJWkUgKyAxKQorI2RlZmluZSBTQ1JBVENIX1JFUE9SVAkJMjAKKworLyogUmVwb3J0cyAxOS0yMjogZmxhc2ggdXBncmFkZSBvZiB0aGUgQzgwNTFGMzIxICovCisjZGVmaW5lIFdSSVRFX1JFUE9SVF9TSVpFCTQKKyNkZWZpbmUgV1JJVEVfUkVQT1JUCQkxOQorI2RlZmluZSBGTEFTSF9SRVBPUlRfU0laRQk2NAorI2RlZmluZSBGTEFTSF9SRVBPUlQJCTIwCisjZGVmaW5lIENSQ19SRVBPUlRfU0laRQkJMworI2RlZmluZSBDUkNfUkVQT1JUCQkyMQorI2RlZmluZSBSRVNQT05TRV9SRVBPUlRfU0laRQkyCisjZGVmaW5lIFJFU1BPTlNFX1JFUE9SVAkJMjIKKworLyogUmVwb3J0IDIzOiBjdXJyZW50bHkgdW51c2VkLCBidXQgY2FuIGFjY2VwdCA2MCBieXRlIHJlcG9ydHMgb24gdGhlIEhJRCAqLworLyogaW50ZXJydXB0IG91dCBlbmRwb2ludCAyIGV2ZXJ5IDEgbWlsbGlzZWNvbmQgKi8KKyNkZWZpbmUgVU5VU0VEX1JFUE9SVAkJMjMKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU29mdHdhcmUvSGFyZHdhcmUgVmVyc2lvbnMgZnJvbSBTY3JhdGNoIFBhZ2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUkFESU9fU1dfVkVSU0lPTl9OT1RfQk9PVExPQURBQkxFCTYKKyNkZWZpbmUgUkFESU9fU1dfVkVSU0lPTgkJCTcKKyNkZWZpbmUgUkFESU9fSFdfVkVSU0lPTgkJCTEKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTEVEIFN0YXRlIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIExFRF9DT01NQU5ECQkweDM1CisKKyNkZWZpbmUgTk9fQ0hBTkdFX0xFRAkJMHgwMAorI2RlZmluZSBBTExfQ09MT1JfTEVECQkweDAxCS8qIHN0cmVhbWluZyBzdGF0ZSAqLworI2RlZmluZSBCTElOS19HUkVFTl9MRUQJCTB4MDIJLyogY29ubmVjdCBzdGF0ZSAqLworI2RlZmluZSBCTElOS19SRURfTEVECQkweDA0CisjZGVmaW5lIEJMSU5LX09SQU5HRV9MRUQJMHgxMAkvKiBkaXNjb25uZWN0IHN0YXRlICovCisjZGVmaW5lIFNPTElEX0dSRUVOX0xFRAkJMHgyMAkvKiB0dW5pbmcvc2Vla2luZyBzdGF0ZSAqLworI2RlZmluZSBTT0xJRF9SRURfTEVECQkweDQwCS8qIGJvb3Rsb2FkIHN0YXRlICovCisjZGVmaW5lIFNPTElEX09SQU5HRV9MRUQJMHg4MAorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTdHJlYW0gU3RhdGUgRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU1RSRUFNX0NPTU1BTkQJMHgzNgorI2RlZmluZSBTVFJFQU1fVklEUElECTB4MDAKKyNkZWZpbmUgU1RSRUFNX0FVRElPCTB4ZmYKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQm9vdGxvYWRlciAvIEZsYXNoIENvbW1hbmRzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHVuaXF1ZSBpZCBzZW50IHRvIGJvb3Rsb2FkZXIgYW5kIHJlcXVpcmVkIHRvIHB1dCBpbnRvIGEgYm9vdGxvYWQgc3RhdGUgKi8KKyNkZWZpbmUgVU5JUVVFX0JMX0lECQkweDM0CisKKy8qIG1hc2sgZm9yIHRoZSBmbGFzaCBkYXRhICovCisjZGVmaW5lIEZMQVNIX0RBVEFfTUFTSwkJMHg1NQorCisvKiBib290bG9hZGVyIGNvbW1hbmRzICovCisjZGVmaW5lIEdFVF9TV19WRVJTSU9OX0NPTU1BTkQJMHgwMAorI2RlZmluZSBTRVRfUEFHRV9DT01NQU5ECTB4MDEKKyNkZWZpbmUgRVJBU0VfUEFHRV9DT01NQU5ECTB4MDIKKyNkZWZpbmUgV1JJVEVfUEFHRV9DT01NQU5ECTB4MDMKKyNkZWZpbmUgQ1JDX09OX1BBR0VfQ09NTUFORAkweDA0CisjZGVmaW5lIFJFQURfRkxBU0hfQllURV9DT01NQU5ECTB4MDUKKyNkZWZpbmUgUkVTRVRfREVWSUNFX0NPTU1BTkQJMHgwNgorI2RlZmluZSBHRVRfSFdfVkVSU0lPTl9DT01NQU5ECTB4MDcKKyNkZWZpbmUgQkxBTksJCQkweGZmCisKKy8qIGJvb3Rsb2FkZXIgY29tbWFuZCByZXNwb25zZXMgKi8KKyNkZWZpbmUgQ09NTUFORF9PSwkJMHgwMQorI2RlZmluZSBDT01NQU5EX0ZBSUxFRAkJMHgwMgorI2RlZmluZSBDT01NQU5EX1BFTkRJTkcJCTB4MDMKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zIC0gUkVHSVNURVJfUkVQT1JUcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X2dldF9yZXBvcnQgLSByZWNlaXZlIGEgSElEIHJlcG9ydAorICovCitzdGF0aWMgaW50IHNpNDcweF9nZXRfcmVwb3J0KHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpyZXBvcnQgPSAodW5zaWduZWQgY2hhciAqKSBidWY7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LAorCQl1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCisJCUhJRF9SRVFfR0VUX1JFUE9SVCwKKwkJVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9JTiwKKwkJcmVwb3J0WzBdLCAyLAorCQlidWYsIHNpemUsIHVzYl90aW1lb3V0KTsKKworCWlmIChyZXR2YWwgPCAwKQorCQlkZXZfd2FybigmcmFkaW8tPmludGYtPmRldiwKKwkJCSJzaTQ3MHhfZ2V0X3JlcG9ydDogdXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLAorCQkJcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCisgKiBzaTQ3MHhfc2V0X3JlcG9ydCAtIHNlbmQgYSBISUQgcmVwb3J0CisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X3NldF9yZXBvcnQoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLCB2b2lkICpidWYsIGludCBzaXplKQoreworCXVuc2lnbmVkIGNoYXIgKnJlcG9ydCA9ICh1bnNpZ25lZCBjaGFyICopIGJ1ZjsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsCisJCXVzYl9zbmRjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKKwkJSElEX1JFUV9TRVRfUkVQT1JULAorCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKKwkJcmVwb3J0WzBdLCAyLAorCQlidWYsIHNpemUsIHVzYl90aW1lb3V0KTsKKworCWlmIChyZXR2YWwgPCAwKQorCQlkZXZfd2FybigmcmFkaW8tPmludGYtPmRldiwKKwkJCSJzaTQ3MHhfc2V0X3JlcG9ydDogdXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLAorCQkJcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCisgKiBzaTQ3MHhfZ2V0X3JlZ2lzdGVyIC0gcmVhZCByZWdpc3RlcgorICovCitpbnQgc2k0NzB4X2dldF9yZWdpc3RlcihzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8sIGludCByZWducikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltSRUdJU1RFUl9SRVBPUlRfU0laRV07CisJaW50IHJldHZhbDsKKworCWJ1ZlswXSA9IFJFR0lTVEVSX1JFUE9SVChyZWducik7CisKKwlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlcG9ydChyYWRpbywgKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKHJldHZhbCA+PSAwKQorCQlyYWRpby0+cmVnaXN0ZXJzW3JlZ25yXSA9IGdldF91bmFsaWduZWRfYmUxNigmYnVmWzFdKTsKKworCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKK30KKworCisvKgorICogc2k0NzB4X3NldF9yZWdpc3RlciAtIHdyaXRlIHJlZ2lzdGVyCisgKi8KK2ludCBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgaW50IHJlZ25yKQoreworCXVuc2lnbmVkIGNoYXIgYnVmW1JFR0lTVEVSX1JFUE9SVF9TSVpFXTsKKwlpbnQgcmV0dmFsOworCisJYnVmWzBdID0gUkVHSVNURVJfUkVQT1JUKHJlZ25yKTsKKwlwdXRfdW5hbGlnbmVkX2JlMTYocmFkaW8tPnJlZ2lzdGVyc1tyZWducl0sICZidWZbMV0pOworCisJcmV0dmFsID0gc2k0NzB4X3NldF9yZXBvcnQocmFkaW8sICh2b2lkICopICZidWYsIHNpemVvZihidWYpKTsKKworCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zIC0gRU5USVJFX1JFUE9SVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X2dldF9hbGxfcmVnaXN0ZXJzIC0gcmVhZCBlbnRpcmUgcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X2dldF9hbGxfcmVnaXN0ZXJzKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltFTlRJUkVfUkVQT1JUX1NJWkVdOworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciByZWducjsKKworCWJ1ZlswXSA9IEVOVElSRV9SRVBPUlQ7CisKKwlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlcG9ydChyYWRpbywgKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKHJldHZhbCA+PSAwKQorCQlmb3IgKHJlZ25yID0gMDsgcmVnbnIgPCBSQURJT19SRUdJU1RFUl9OVU07IHJlZ25yKyspCisJCQlyYWRpby0+cmVnaXN0ZXJzW3JlZ25yXSA9IGdldF91bmFsaWduZWRfYmUxNigKKwkJCQkmYnVmW3JlZ25yICogUkFESU9fUkVHSVNURVJfU0laRSArIDFdKTsKKworCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zIC0gTEVEX1JFUE9SVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X3NldF9sZWRfc3RhdGUgLSBzZXRzIHRoZSBsZWQgc3RhdGUKKyAqLworc3RhdGljIGludCBzaTQ3MHhfc2V0X2xlZF9zdGF0ZShzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8sCisJCXVuc2lnbmVkIGNoYXIgbGVkX3N0YXRlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmW0xFRF9SRVBPUlRfU0laRV07CisJaW50IHJldHZhbDsKKworCWJ1ZlswXSA9IExFRF9SRVBPUlQ7CisJYnVmWzFdID0gTEVEX0NPTU1BTkQ7CisJYnVmWzJdID0gbGVkX3N0YXRlOworCisJcmV0dmFsID0gc2k0NzB4X3NldF9yZXBvcnQocmFkaW8sICh2b2lkICopICZidWYsIHNpemVvZihidWYpKTsKKworCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zIC0gU0NSQVRDSF9SRVBPUlQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHNpNDcweF9nZXRfc2NyYXRjaF92ZXJzaW9ucyAtIGdldHMgdGhlIHNjcmF0Y2ggcGFnZSBhbmQgdmVyc2lvbiBpbmZvcworICovCitzdGF0aWMgaW50IHNpNDcweF9nZXRfc2NyYXRjaF9wYWdlX3ZlcnNpb25zKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltTQ1JBVENIX1JFUE9SVF9TSVpFXTsKKwlpbnQgcmV0dmFsOworCisJYnVmWzBdID0gU0NSQVRDSF9SRVBPUlQ7CisKKwlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlcG9ydChyYWRpbywgKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKHJldHZhbCA8IDApCisJCWRldl93YXJuKCZyYWRpby0+aW50Zi0+ZGV2LCAic2k0NzB4X2dldF9zY3JhdGNoOiAiCisJCQkic2k0NzB4X2dldF9yZXBvcnQgcmV0dXJuZWQgJWRcbiIsIHJldHZhbCk7CisJZWxzZSB7CisJCXJhZGlvLT5zb2Z0d2FyZV92ZXJzaW9uID0gYnVmWzFdOworCQlyYWRpby0+aGFyZHdhcmVfdmVyc2lvbiA9IGJ1ZlsyXTsKKwl9CisKKwlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIERJU0NPTk5FQ1RfQ0hFQ0sKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHNpNDcweF9kaXNjb25uZWN0X2NoZWNrIC0gY2hlY2sgd2hldGhlciByYWRpbyBkaXNjb25uZWN0cworICovCitpbnQgc2k0NzB4X2Rpc2Nvbm5lY3RfY2hlY2soc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQoreworCWlmIChyYWRpby0+ZGlzY29ubmVjdGVkKQorCQlyZXR1cm4gLUVJTzsKKwllbHNlCisJCXJldHVybiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSRFMgRHJpdmVyIEZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X2ludF9pbl9jYWxsYmFjayAtIHJkcyBjYWxsYmFjayBhbmQgcHJvY2Vzc2luZyBmdW5jdGlvbgorICoKKyAqIFRPRE86IGRvIHdlIG5lZWQgdG8gdXNlIG11dGV4IGxvY2tzIGluIHNvbWUgc2VjdGlvbnM/CisgKi8KK3N0YXRpYyB2b2lkIHNpNDcweF9pbnRfaW5fY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltSRFNfUkVQT1JUX1NJWkVdOworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciByZWducjsKKwl1bnNpZ25lZCBjaGFyIGJsb2NrbnVtOworCXVuc2lnbmVkIHNob3J0IGJsZXI7IC8qIHJkcyBibG9jayBlcnJvcnMgKi8KKwl1bnNpZ25lZCBzaG9ydCByZHM7CisJdW5zaWduZWQgY2hhciB0bXBidWZbM107CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwKKwkJCQl1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAorCQkJCXVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pIHsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCWRldl93YXJuKCZyYWRpby0+aW50Zi0+ZGV2LAorCQkJICJub24temVybyB1cmIgc3RhdHVzICglZClcbiIsIHVyYi0+c3RhdHVzKTsKKwkJCWdvdG8gcmVzdWJtaXQ7IC8qIE1heWJlIHdlIGNhbiByZWNvdmVyLiAqLworCQl9CisJfQorCisJLyogc2FmZXR5IGNoZWNrcyAqLworCWlmIChyYWRpby0+ZGlzY29ubmVjdGVkKQorCQlyZXR1cm47CisJaWYgKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzFdICYgU1lTQ09ORklHMV9SRFMpID09IDApCisJCWdvdG8gcmVzdWJtaXQ7CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkgeworCQkvKiBVcGRhdGUgUkRTIHJlZ2lzdGVycyB3aXRoIFVSQiBkYXRhICovCisJCWJ1ZlswXSA9IFJEU19SRVBPUlQ7CisJCWZvciAocmVnbnIgPSAwOyByZWduciA8IFJEU19SRUdJU1RFUl9OVU07IHJlZ25yKyspCisJCQlyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0kgKyByZWducl0gPQorCQkJICAgIGdldF91bmFsaWduZWRfYmUxNigmcmFkaW8tPmludF9pbl9idWZmZXJbCisJCQkJcmVnbnIgKiBSQURJT19SRUdJU1RFUl9TSVpFICsgMV0pOworCQkvKiBnZXQgcmRzIGJsb2NrcyAqLworCQlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSV0gJiBTVEFUVVNSU1NJX1JEU1IpID09IDApIHsKKwkJCS8qIE5vIFJEUyBncm91cCByZWFkeSwgYmV0dGVyIGx1Y2sgbmV4dCB0aW1lICovCisJCQlnb3RvIHJlc3VibWl0OworCQl9CisJCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfUkRTUykgPT0gMCkgeworCQkJLyogUkRTIGRlY29kZXIgbm90IHN5bmNocm9uaXplZCAqLworCQkJZ290byByZXN1Ym1pdDsKKwkJfQorCQlmb3IgKGJsb2NrbnVtID0gMDsgYmxvY2tudW0gPCA0OyBibG9ja251bSsrKSB7CisJCQlzd2l0Y2ggKGJsb2NrbnVtKSB7CisJCQlkZWZhdWx0OgorCQkJCWJsZXIgPSAocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmCisJCQkJCQlTVEFUVVNSU1NJX0JMRVJBKSA+PiA5OworCQkJCXJkcyA9IHJhZGlvLT5yZWdpc3RlcnNbUkRTQV07CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJYmxlciA9IChyYWRpby0+cmVnaXN0ZXJzW1JFQURDSEFOXSAmCisJCQkJCQlSRUFEQ0hBTl9CTEVSQikgPj4gMTQ7CisJCQkJcmRzID0gcmFkaW8tPnJlZ2lzdGVyc1tSRFNCXTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlibGVyID0gKHJhZGlvLT5yZWdpc3RlcnNbUkVBRENIQU5dICYKKwkJCQkJCVJFQURDSEFOX0JMRVJDKSA+PiAxMjsKKwkJCQlyZHMgPSByYWRpby0+cmVnaXN0ZXJzW1JEU0NdOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCWJsZXIgPSAocmFkaW8tPnJlZ2lzdGVyc1tSRUFEQ0hBTl0gJgorCQkJCQkJUkVBRENIQU5fQkxFUkQpID4+IDEwOworCQkJCXJkcyA9IHJhZGlvLT5yZWdpc3RlcnNbUkRTRF07CisJCQkJYnJlYWs7CisJCQl9OworCisJCQkvKiBGaWxsIHRoZSBWNEwyIFJEUyBidWZmZXIgKi8KKwkJCXB1dF91bmFsaWduZWRfbGUxNihyZHMsICZ0bXBidWYpOworCQkJdG1wYnVmWzJdID0gYmxvY2tudW07CQkvKiBvZmZzZXQgbmFtZSAqLworCQkJdG1wYnVmWzJdIHw9IGJsb2NrbnVtIDw8IDM7CS8qIHJlY2VpdmVkIG9mZnNldCAqLworCQkJaWYgKGJsZXIgPiBtYXhfcmRzX2Vycm9ycykKKwkJCQl0bXBidWZbMl0gfD0gMHg4MDsgLyogdW5jb3JyZWN0YWJsZSBlcnJvcnMgKi8KKwkJCWVsc2UgaWYgKGJsZXIgPiAwKQorCQkJCXRtcGJ1ZlsyXSB8PSAweDQwOyAvKiBjb3JyZWN0ZWQgZXJyb3IocykgKi8KKworCQkJLyogY29weSBSRFMgYmxvY2sgdG8gaW50ZXJuYWwgYnVmZmVyICovCisJCQltZW1jcHkoJnJhZGlvLT5idWZmZXJbcmFkaW8tPndyX2luZGV4XSwgJnRtcGJ1ZiwgMyk7CisJCQlyYWRpby0+d3JfaW5kZXggKz0gMzsKKworCQkJLyogd3JhcCB3cml0ZSBwb2ludGVyICovCisJCQlpZiAocmFkaW8tPndyX2luZGV4ID49IHJhZGlvLT5idWZfc2l6ZSkKKwkJCQlyYWRpby0+d3JfaW5kZXggPSAwOworCisJCQkvKiBjaGVjayBmb3Igb3ZlcmZsb3cgKi8KKwkJCWlmIChyYWRpby0+d3JfaW5kZXggPT0gcmFkaW8tPnJkX2luZGV4KSB7CisJCQkJLyogaW5jcmVtZW50IGFuZCB3cmFwIHJlYWQgcG9pbnRlciAqLworCQkJCXJhZGlvLT5yZF9pbmRleCArPSAzOworCQkJCWlmIChyYWRpby0+cmRfaW5kZXggPj0gcmFkaW8tPmJ1Zl9zaXplKQorCQkJCQlyYWRpby0+cmRfaW5kZXggPSAwOworCQkJfQorCQl9CisJCWlmIChyYWRpby0+d3JfaW5kZXggIT0gcmFkaW8tPnJkX2luZGV4KQorCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZyYWRpby0+cmVhZF9xdWV1ZSk7CisJfQorCityZXN1Ym1pdDoKKwkvKiBSZXN1Ym1pdCBpZiB3ZSdyZSBzdGlsbCBydW5uaW5nLiAqLworCWlmIChyYWRpby0+aW50X2luX3J1bm5pbmcgJiYgcmFkaW8tPnVzYmRldikgeworCQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihyYWRpby0+aW50X2luX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl93YXJuKCZyYWRpby0+aW50Zi0+ZGV2LAorCQkJICAgICAgICJyZXN1Ym1pdHRpbmcgdXJiIGZhaWxlZCAoJWQpIiwgcmV0dmFsKTsKKwkJCXJhZGlvLT5pbnRfaW5fcnVubmluZyA9IDA7CisJCX0KKwl9Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGUgT3BlcmF0aW9ucyBJbnRlcmZhY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHNpNDcweF9mb3BzX3JlYWQgLSByZWFkIFJEUyBkYXRhCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNpNDcweF9mb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgaW50IGJsb2NrX2NvdW50ID0gMDsKKworCS8qIHN3aXRjaCBvbiByZHMgcmVjZXB0aW9uICovCisJaWYgKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzFdICYgU1lTQ09ORklHMV9SRFMpID09IDApCisJCXNpNDcweF9yZHNfb24ocmFkaW8pOworCisJLyogYmxvY2sgaWYgbm8gbmV3IGRhdGEgYXZhaWxhYmxlICovCisJd2hpbGUgKHJhZGlvLT53cl9pbmRleCA9PSByYWRpby0+cmRfaW5kZXgpIHsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlyZXR2YWwgPSAtRVdPVUxEQkxPQ0s7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShyYWRpby0+cmVhZF9xdWV1ZSwKKwkJCXJhZGlvLT53cl9pbmRleCAhPSByYWRpby0+cmRfaW5kZXgpIDwgMCkgeworCQkJcmV0dmFsID0gLUVJTlRSOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJLyogY2FsY3VsYXRlIGJsb2NrIGNvdW50IGZyb20gYnl0ZSBjb3VudCAqLworCWNvdW50IC89IDM7CisKKwkvKiBjb3B5IFJEUyBibG9jayBvdXQgb2YgaW50ZXJuYWwgYnVmZmVyIGFuZCB0byB1c2VyIGJ1ZmZlciAqLworCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKKwl3aGlsZSAoYmxvY2tfY291bnQgPCBjb3VudCkgeworCQlpZiAocmFkaW8tPnJkX2luZGV4ID09IHJhZGlvLT53cl9pbmRleCkKKwkJCWJyZWFrOworCisJCS8qIGFsd2F5cyB0cmFuc2ZlciByZHMgY29tcGxldGUgYmxvY2tzICovCisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmcmFkaW8tPmJ1ZmZlcltyYWRpby0+cmRfaW5kZXhdLCAzKSkKKwkJCS8qIHJldHZhbCA9IC1FRkFVTFQ7ICovCisJCQlicmVhazsKKworCQkvKiBpbmNyZW1lbnQgYW5kIHdyYXAgcmVhZCBwb2ludGVyICovCisJCXJhZGlvLT5yZF9pbmRleCArPSAzOworCQlpZiAocmFkaW8tPnJkX2luZGV4ID49IHJhZGlvLT5idWZfc2l6ZSkKKwkJCXJhZGlvLT5yZF9pbmRleCA9IDA7CisKKwkJLyogaW5jcmVtZW50IGNvdW50ZXJzICovCisJCWJsb2NrX2NvdW50Kys7CisJCWJ1ZiArPSAzOworCQlyZXR2YWwgKz0gMzsKKwl9CisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisKK2RvbmU6CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKgorICogc2k0NzB4X2ZvcHNfcG9sbCAtIHBvbGwgUkRTIGRhdGEKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBzaTQ3MHhfZm9wc19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQlzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0cykKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCWludCByZXR2YWwgPSAwOworCisJLyogc3dpdGNoIG9uIHJkcyByZWNlcHRpb24gKi8KKwlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMV0gJiBTWVNDT05GSUcxX1JEUykgPT0gMCkKKwkJc2k0NzB4X3Jkc19vbihyYWRpbyk7CisKKwlwb2xsX3dhaXQoZmlsZSwgJnJhZGlvLT5yZWFkX3F1ZXVlLCBwdHMpOworCisJaWYgKHJhZGlvLT5yZF9pbmRleCAhPSByYWRpby0+d3JfaW5kZXgpCisJCXJldHZhbCA9IFBPTExJTiB8IFBPTExSRE5PUk07CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCisgKiBzaTQ3MHhfZm9wc19vcGVuIC0gZmlsZSBvcGVuCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X2ZvcHNfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCWludCByZXR2YWw7CisKKwlsb2NrX2tlcm5lbCgpOworCXJhZGlvLT51c2VycysrOworCisJcmV0dmFsID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHJhZGlvLT5pbnRmKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlyYWRpby0+dXNlcnMtLTsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBkb25lOworCX0KKworCWlmIChyYWRpby0+dXNlcnMgPT0gMSkgeworCQkvKiBzdGFydCByYWRpbyAqLworCQlyZXR2YWwgPSBzaTQ3MHhfc3RhcnQocmFkaW8pOworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHJhZGlvLT5pbnRmKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCS8qIGluaXRpYWxpemUgaW50ZXJydXB0IHVyYiAqLworCQl1c2JfZmlsbF9pbnRfdXJiKHJhZGlvLT5pbnRfaW5fdXJiLCByYWRpby0+dXNiZGV2LAorCQkJdXNiX3JjdmludHBpcGUocmFkaW8tPnVzYmRldiwKKwkJCXJhZGlvLT5pbnRfaW5fZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJcmFkaW8tPmludF9pbl9idWZmZXIsCisJCQlsZTE2X3RvX2NwdShyYWRpby0+aW50X2luX2VuZHBvaW50LT53TWF4UGFja2V0U2l6ZSksCisJCQlzaTQ3MHhfaW50X2luX2NhbGxiYWNrLAorCQkJcmFkaW8sCisJCQlyYWRpby0+aW50X2luX2VuZHBvaW50LT5iSW50ZXJ2YWwpOworCisJCXJhZGlvLT5pbnRfaW5fcnVubmluZyA9IDE7CisJCW1iKCk7CisKKwkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocmFkaW8tPmludF9pbl91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfaW5mbygmcmFkaW8tPmludGYtPmRldiwKKwkJCQkgInN1Ym1pdHRpbmcgaW50IHVyYiBmYWlsZWQgKCVkKVxuIiwgcmV0dmFsKTsKKwkJCXJhZGlvLT5pbnRfaW5fcnVubmluZyA9IDA7CisJCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocmFkaW8tPmludGYpOworCQl9CisJfQorCitkb25lOgorCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCisgKiBzaTQ3MHhfZm9wc19yZWxlYXNlIC0gZmlsZSByZWxlYXNlCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X2ZvcHNfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCWludCByZXR2YWwgPSAwOworCisJLyogc2FmZXR5IGNoZWNrICovCisJaWYgKCFyYWRpbykgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGRvbmU7CisJfQorCisJbXV0ZXhfbG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7CisJcmFkaW8tPnVzZXJzLS07CisJaWYgKHJhZGlvLT51c2VycyA9PSAwKSB7CisJCS8qIHNodXRkb3duIGludGVycnVwdCBoYW5kbGVyICovCisJCWlmIChyYWRpby0+aW50X2luX3J1bm5pbmcpIHsKKwkJCXJhZGlvLT5pbnRfaW5fcnVubmluZyA9IDA7CisJCWlmIChyYWRpby0+aW50X2luX3VyYikKKwkJCXVzYl9raWxsX3VyYihyYWRpby0+aW50X2luX3VyYik7CisJCX0KKworCQlpZiAocmFkaW8tPmRpc2Nvbm5lY3RlZCkgeworCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2KTsKKwkJCWtmcmVlKHJhZGlvLT5pbnRfaW5fYnVmZmVyKTsKKwkJCWtmcmVlKHJhZGlvLT5idWZmZXIpOworCQkJa2ZyZWUocmFkaW8pOworCQkJZ290byB1bmxvY2s7CisJCX0KKworCQkvKiBjYW5jZWwgcmVhZCBwcm9jZXNzZXMgKi8KKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZyYWRpby0+cmVhZF9xdWV1ZSk7CisKKwkJLyogc3RvcCByYWRpbyAqLworCQlyZXR2YWwgPSBzaTQ3MHhfc3RvcChyYWRpbyk7CisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShyYWRpby0+aW50Zik7CisJfQordW5sb2NrOgorCW11dGV4X3VubG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7Citkb25lOgorCXJldHVybiByZXR2YWw7Cit9CisKKworLyoKKyAqIHNpNDcweF9mb3BzIC0gZmlsZSBvcGVyYXRpb25zIGludGVyZmFjZQorICovCitjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgc2k0NzB4X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5yZWFkCQk9IHNpNDcweF9mb3BzX3JlYWQsCisJLnBvbGwJCT0gc2k0NzB4X2ZvcHNfcG9sbCwKKwkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAorCS5vcGVuCQk9IHNpNDcweF9mb3BzX29wZW4sCisJLnJlbGVhc2UJPSBzaTQ3MHhfZm9wc19yZWxlYXNlLAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmlkZW80TGludXggSW50ZXJmYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzaTQ3MHhfdmlkaW9jX3F1ZXJ5Y2FwIC0gcXVlcnkgZGV2aWNlIGNhcGFiaWxpdGllcworICovCitpbnQgc2k0NzB4X3ZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwYWJpbGl0eSkKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJc3RybGNweShjYXBhYmlsaXR5LT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoY2FwYWJpbGl0eS0+ZHJpdmVyKSk7CisJc3RybGNweShjYXBhYmlsaXR5LT5jYXJkLCBEUklWRVJfQ0FSRCwgc2l6ZW9mKGNhcGFiaWxpdHktPmNhcmQpKTsKKwl1c2JfbWFrZV9wYXRoKHJhZGlvLT51c2JkZXYsIGNhcGFiaWxpdHktPmJ1c19pbmZvLAorCQkJc2l6ZW9mKGNhcGFiaWxpdHktPmJ1c19pbmZvKSk7CisJY2FwYWJpbGl0eS0+dmVyc2lvbiA9IERSSVZFUl9LRVJORUxfVkVSU0lPTjsKKwljYXBhYmlsaXR5LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9IV19GUkVRX1NFRUsgfAorCQlWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPIHwgVjRMMl9DQVBfUkRTX0NBUFRVUkU7CisKKwlyZXR1cm4gMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVVNCIEludGVyZmFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X3VzYl9kcml2ZXJfcHJvYmUgLSBwcm9iZSBmb3IgdGhlIGRldmljZQorICovCitzdGF0aWMgaW50IHNpNDcweF91c2JfZHJpdmVyX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlpbnQgaSwgaW50X2VuZF9zaXplLCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGNoYXIgdmVyc2lvbl93YXJuaW5nID0gMDsKKworCS8qIHByaXZhdGUgZGF0YSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiAqLworCXJhZGlvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNpNDcweF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJhZGlvKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2luaXRpYWw7CisJfQorCXJhZGlvLT51c2VycyA9IDA7CisJcmFkaW8tPmRpc2Nvbm5lY3RlZCA9IDA7CisJcmFkaW8tPnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJcmFkaW8tPmludGYgPSBpbnRmOworCW11dGV4X2luaXQoJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOworCW11dGV4X2luaXQoJnJhZGlvLT5sb2NrKTsKKworCWlmYWNlX2Rlc2MgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKworCS8qIFNldCB1cCBpbnRlcnJ1cHQgZW5kcG9pbnQgaW5mb3JtYXRpb24uICovCisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisJCWlmICgoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PQorCQkgVVNCX0RJUl9JTikgJiYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYKKwkJIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpKQorCQkJcmFkaW8tPmludF9pbl9lbmRwb2ludCA9IGVuZHBvaW50OworCX0KKwlpZiAoIXJhZGlvLT5pbnRfaW5fZW5kcG9pbnQpIHsKKwkJZGV2X2luZm8oJmludGYtPmRldiwgImNvdWxkIG5vdCBmaW5kIGludGVycnVwdCBpbiBlbmRwb2ludFxuIik7CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZXJyX3JhZGlvOworCX0KKworCWludF9lbmRfc2l6ZSA9IGxlMTZfdG9fY3B1KHJhZGlvLT5pbnRfaW5fZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKworCXJhZGlvLT5pbnRfaW5fYnVmZmVyID0ga21hbGxvYyhpbnRfZW5kX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghcmFkaW8tPmludF9pbl9idWZmZXIpIHsKKwkJZGV2X2luZm8oJmludGYtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBpbnRfaW5fYnVmZmVyIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3JhZGlvOworCX0KKworCXJhZGlvLT5pbnRfaW5fdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJhZGlvLT5pbnRfaW5fdXJiKSB7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgaW50X2luX3VyYiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9pbnRidWZmZXI7CisJfQorCisJLyogdmlkZW8gZGV2aWNlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uICovCisJcmFkaW8tPnZpZGVvZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCFyYWRpby0+dmlkZW9kZXYpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW50YnVmZmVyOworCX0KKwltZW1jcHkocmFkaW8tPnZpZGVvZGV2LCAmc2k0NzB4X3ZpZGRldl90ZW1wbGF0ZSwKKwkJCXNpemVvZihzaTQ3MHhfdmlkZGV2X3RlbXBsYXRlKSk7CisJdmlkZW9fc2V0X2RydmRhdGEocmFkaW8tPnZpZGVvZGV2LCByYWRpbyk7CisKKwkvKiBnZXQgZGV2aWNlIGFuZCBjaGlwIHZlcnNpb25zICovCisJaWYgKHNpNDcweF9nZXRfYWxsX3JlZ2lzdGVycyhyYWRpbykgPCAwKSB7CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZXJyX3ZpZGVvOworCX0KKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiRGV2aWNlSUQ9MHglNC40aHggQ2hpcElEPTB4JTQuNGh4XG4iLAorCQkJcmFkaW8tPnJlZ2lzdGVyc1tERVZJQ0VJRF0sIHJhZGlvLT5yZWdpc3RlcnNbQ0hJUElEXSk7CisJaWYgKChyYWRpby0+cmVnaXN0ZXJzW0NISVBJRF0gJiBDSElQSURfRklSTVdBUkUpIDwgUkFESU9fRldfVkVSU0lPTikgeworCQlkZXZfd2FybigmaW50Zi0+ZGV2LAorCQkJIlRoaXMgZHJpdmVyIGlzIGtub3duIHRvIHdvcmsgd2l0aCAiCisJCQkiZmlybXdhcmUgdmVyc2lvbiAlaHUsXG4iLCBSQURJT19GV19WRVJTSU9OKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwKKwkJCSJidXQgdGhlIGRldmljZSBoYXMgZmlybXdhcmUgdmVyc2lvbiAlaHUuXG4iLAorCQkJcmFkaW8tPnJlZ2lzdGVyc1tDSElQSURdICYgQ0hJUElEX0ZJUk1XQVJFKTsKKwkJdmVyc2lvbl93YXJuaW5nID0gMTsKKwl9CisKKwkvKiBnZXQgc29mdHdhcmUgYW5kIGhhcmR3YXJlIHZlcnNpb25zICovCisJaWYgKHNpNDcweF9nZXRfc2NyYXRjaF9wYWdlX3ZlcnNpb25zKHJhZGlvKSA8IDApIHsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBlcnJfdmlkZW87CisJfQorCWRldl9pbmZvKCZpbnRmLT5kZXYsICJzb2Z0d2FyZSB2ZXJzaW9uICVkLCBoYXJkd2FyZSB2ZXJzaW9uICVkXG4iLAorCQkJcmFkaW8tPnNvZnR3YXJlX3ZlcnNpb24sIHJhZGlvLT5oYXJkd2FyZV92ZXJzaW9uKTsKKwlpZiAocmFkaW8tPnNvZnR3YXJlX3ZlcnNpb24gPCBSQURJT19TV19WRVJTSU9OKSB7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkiVGhpcyBkcml2ZXIgaXMga25vd24gdG8gd29yayB3aXRoICIKKwkJCSJzb2Z0d2FyZSB2ZXJzaW9uICVodSxcbiIsIFJBRElPX1NXX1ZFUlNJT04pOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LAorCQkJImJ1dCB0aGUgZGV2aWNlIGhhcyBzb2Z0d2FyZSB2ZXJzaW9uICVodS5cbiIsCisJCQlyYWRpby0+c29mdHdhcmVfdmVyc2lvbik7CisJCXZlcnNpb25fd2FybmluZyA9IDE7CisJfQorCWlmIChyYWRpby0+aGFyZHdhcmVfdmVyc2lvbiA8IFJBRElPX0hXX1ZFUlNJT04pIHsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwKKwkJCSJUaGlzIGRyaXZlciBpcyBrbm93biB0byB3b3JrIHdpdGggIgorCQkJImhhcmR3YXJlIHZlcnNpb24gJWh1LFxuIiwgUkFESU9fSFdfVkVSU0lPTik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkiYnV0IHRoZSBkZXZpY2UgaGFzIGhhcmR3YXJlIHZlcnNpb24gJWh1LlxuIiwKKwkJCXJhZGlvLT5oYXJkd2FyZV92ZXJzaW9uKTsKKwkJdmVyc2lvbl93YXJuaW5nID0gMTsKKwl9CisKKwkvKiBnaXZlIG91dCB2ZXJzaW9uIHdhcm5pbmcgKi8KKwlpZiAodmVyc2lvbl93YXJuaW5nID09IDEpIHsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwKKwkJCSJJZiB5b3UgaGF2ZSBzb21lIHRyb3VibGUgdXNpbmcgdGhpcyBkcml2ZXIsXG4iKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwKKwkJCSJwbGVhc2UgcmVwb3J0IHRvIFY0TCBNTCBhdCAiCisJCQkibGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnXG4iKTsKKwl9CisKKwkvKiBzZXQgaW5pdGlhbCBmcmVxdWVuY3kgKi8KKwlzaTQ3MHhfc2V0X2ZyZXEocmFkaW8sIDg3LjUgKiBGUkVRX01VTCk7IC8qIGF2YWlsYWJsZSBpbiBhbGwgcmVnaW9ucyAqLworCisJLyogc2V0IGxlZCB0byBjb25uZWN0IHN0YXRlICovCisJc2k0NzB4X3NldF9sZWRfc3RhdGUocmFkaW8sIEJMSU5LX0dSRUVOX0xFRCk7CisKKwkvKiByZHMgYnVmZmVyIGFsbG9jYXRpb24gKi8KKwlyYWRpby0+YnVmX3NpemUgPSByZHNfYnVmICogMzsKKwlyYWRpby0+YnVmZmVyID0ga21hbGxvYyhyYWRpby0+YnVmX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghcmFkaW8tPmJ1ZmZlcikgeworCQlyZXR2YWwgPSAtRUlPOworCQlnb3RvIGVycl92aWRlbzsKKwl9CisKKwkvKiByZHMgYnVmZmVyIGNvbmZpZ3VyYXRpb24gKi8KKwlyYWRpby0+d3JfaW5kZXggPSAwOworCXJhZGlvLT5yZF9pbmRleCA9IDA7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcmFkaW8tPnJlYWRfcXVldWUpOworCisJLyogcmVnaXN0ZXIgdmlkZW8gZGV2aWNlICovCisJcmV0dmFsID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2RldiwgVkZMX1RZUEVfUkFESU8sCisJCQlyYWRpb19ucik7CisJaWYgKHJldHZhbCkgeworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHZpZGVvIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2FsbDsKKwl9CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCByYWRpbyk7CisKKwlyZXR1cm4gMDsKK2Vycl9hbGw6CisJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CitlcnJfdmlkZW86CisJdmlkZW9fZGV2aWNlX3JlbGVhc2UocmFkaW8tPnZpZGVvZGV2KTsKK2Vycl9pbnRidWZmZXI6CisJa2ZyZWUocmFkaW8tPmludF9pbl9idWZmZXIpOworZXJyX3JhZGlvOgorCWtmcmVlKHJhZGlvKTsKK2Vycl9pbml0aWFsOgorCXJldHVybiByZXR2YWw7Cit9CisKKworLyoKKyAqIHNpNDcweF91c2JfZHJpdmVyX3N1c3BlbmQgLSBzdXNwZW5kIHRoZSBkZXZpY2UKKyAqLworc3RhdGljIGludCBzaTQ3MHhfdXNiX2RyaXZlcl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQlwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAic3VzcGVuZGluZyBub3cuLi5cbiIpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIHNpNDcweF91c2JfZHJpdmVyX3Jlc3VtZSAtIHJlc3VtZSB0aGUgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X3VzYl9kcml2ZXJfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJyZXN1bWluZyBub3cuLi5cbiIpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIHNpNDcweF91c2JfZHJpdmVyX2Rpc2Nvbm5lY3QgLSBkaXNjb25uZWN0IHRoZSBkZXZpY2UKKyAqLworc3RhdGljIHZvaWQgc2k0NzB4X3VzYl9kcml2ZXJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJbXV0ZXhfbG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7CisJcmFkaW8tPmRpc2Nvbm5lY3RlZCA9IDE7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpZiAocmFkaW8tPnVzZXJzID09IDApIHsKKwkJLyogc2V0IGxlZCB0byBkaXNjb25uZWN0IHN0YXRlICovCisJCXNpNDcweF9zZXRfbGVkX3N0YXRlKHJhZGlvLCBCTElOS19PUkFOR0VfTEVEKTsKKworCQkvKiBGcmVlIGRhdGEgc3RydWN0dXJlcy4gKi8KKwkJdXNiX2ZyZWVfdXJiKHJhZGlvLT5pbnRfaW5fdXJiKTsKKworCQlrZnJlZShyYWRpby0+aW50X2luX2J1ZmZlcik7CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2Rldik7CisJCWtmcmVlKHJhZGlvLT5idWZmZXIpOworCQlrZnJlZShyYWRpbyk7CisJfQorCW11dGV4X3VubG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7Cit9CisKKworLyoKKyAqIHNpNDcweF91c2JfZHJpdmVyIC0gdXNiIGRyaXZlciBpbnRlcmZhY2UKKyAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNpNDcweF91c2JfZHJpdmVyID0geworCS5uYW1lCQkJPSBEUklWRVJfTkFNRSwKKwkucHJvYmUJCQk9IHNpNDcweF91c2JfZHJpdmVyX3Byb2JlLAorCS5kaXNjb25uZWN0CQk9IHNpNDcweF91c2JfZHJpdmVyX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQJCT0gc2k0NzB4X3VzYl9kcml2ZXJfc3VzcGVuZCwKKwkucmVzdW1lCQkJPSBzaTQ3MHhfdXNiX2RyaXZlcl9yZXN1bWUsCisJLmlkX3RhYmxlCQk9IHNpNDcweF91c2JfZHJpdmVyX2lkX3RhYmxlLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZAk9IDEsCit9OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNb2R1bGUgSW50ZXJmYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzaTQ3MHhfbW9kdWxlX2luaXQgLSBtb2R1bGUgaW5pdAorICovCitzdGF0aWMgaW50IF9faW5pdCBzaTQ3MHhfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9ERVNDICIsIFZlcnNpb24gIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZzaTQ3MHhfdXNiX2RyaXZlcik7Cit9CisKKworLyoKKyAqIHNpNDcweF9tb2R1bGVfZXhpdCAtIG1vZHVsZSBleGl0CisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBzaTQ3MHhfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2k0NzB4X3VzYl9kcml2ZXIpOworfQorCisKK21vZHVsZV9pbml0KHNpNDcweF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChzaTQ3MHhfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC5oIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBhZjE5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC5oCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogIGRyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC5oCisgKgorICogIERyaXZlciBmb3IgcmFkaW9zIHdpdGggU2lsaWNvbiBMYWJzIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlcnMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKworLyogZHJpdmVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIERSSVZFUl9OQU1FICJyYWRpby1zaTQ3MHgiCisKKworLyoga2VybmVsIGluY2x1ZGVzICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvcmRzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZWdpc3RlciBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSQURJT19SRUdJU1RFUl9TSVpFCTIJLyogMTYgcmVnaXN0ZXIgYml0IHdpZHRoICovCisjZGVmaW5lIFJBRElPX1JFR0lTVEVSX05VTQkxNgkvKiBERVZJQ0VJRCAgIC4uLiBSRFNEICovCisjZGVmaW5lIFJEU19SRUdJU1RFUl9OVU0JNgkvKiBTVEFUVVNSU1NJIC4uLiBSRFNEICovCisKKyNkZWZpbmUgREVWSUNFSUQJCTAJLyogRGV2aWNlIElEICovCisjZGVmaW5lIERFVklDRUlEX1BOCQkweGYwMDAJLyogYml0cyAxNS4uMTI6IFBhcnQgTnVtYmVyICovCisjZGVmaW5lIERFVklDRUlEX01GR0lECQkweDBmZmYJLyogYml0cyAxMS4uMDA6IE1hbnVmYWN0dXJlciBJRCAqLworCisjZGVmaW5lIENISVBJRAkJCTEJLyogQ2hpcCBJRCAqLworI2RlZmluZSBDSElQSURfUkVWCQkweGZjMDAJLyogYml0cyAxNS4uMTA6IENoaXAgVmVyc2lvbiAqLworI2RlZmluZSBDSElQSURfREVWCQkweDAyMDAJLyogYml0cyAwOS4uMDk6IERldmljZSAqLworI2RlZmluZSBDSElQSURfRklSTVdBUkUJCTB4MDFmZgkvKiBiaXRzIDA4Li4wMDogRmlybXdhcmUgVmVyc2lvbiAqLworCisjZGVmaW5lIFBPV0VSQ0ZHCQkyCS8qIFBvd2VyIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgUE9XRVJDRkdfRFNNVVRFCQkweDgwMDAJLyogYml0cyAxNS4uMTU6IFNvZnRtdXRlIERpc2FibGUgKi8KKyNkZWZpbmUgUE9XRVJDRkdfRE1VVEUJCTB4NDAwMAkvKiBiaXRzIDE0Li4xNDogTXV0ZSBEaXNhYmxlICovCisjZGVmaW5lIFBPV0VSQ0ZHX01PTk8JCTB4MjAwMAkvKiBiaXRzIDEzLi4xMzogTW9ubyBTZWxlY3QgKi8KKyNkZWZpbmUgUE9XRVJDRkdfUkRTTQkJMHgwODAwCS8qIGJpdHMgMTEuLjExOiBSRFMgTW9kZSAoU2k0NzAxIG9ubHkpICovCisjZGVmaW5lIFBPV0VSQ0ZHX1NLTU9ERQkJMHgwNDAwCS8qIGJpdHMgMTAuLjEwOiBTZWVrIE1vZGUgKi8KKyNkZWZpbmUgUE9XRVJDRkdfU0VFS1VQCQkweDAyMDAJLyogYml0cyAwOS4uMDk6IFNlZWsgRGlyZWN0aW9uICovCisjZGVmaW5lIFBPV0VSQ0ZHX1NFRUsJCTB4MDEwMAkvKiBiaXRzIDA4Li4wODogU2VlayAqLworI2RlZmluZSBQT1dFUkNGR19ESVNBQkxFCTB4MDA0MAkvKiBiaXRzIDA2Li4wNjogUG93ZXJ1cCBEaXNhYmxlICovCisjZGVmaW5lIFBPV0VSQ0ZHX0VOQUJMRQkJMHgwMDAxCS8qIGJpdHMgMDAuLjAwOiBQb3dlcnVwIEVuYWJsZSAqLworCisjZGVmaW5lIENIQU5ORUwJCQkzCS8qIENoYW5uZWwgKi8KKyNkZWZpbmUgQ0hBTk5FTF9UVU5FCQkweDgwMDAJLyogYml0cyAxNS4uMTU6IFR1bmUgKi8KKyNkZWZpbmUgQ0hBTk5FTF9DSEFOCQkweDAzZmYJLyogYml0cyAwOS4uMDA6IENoYW5uZWwgU2VsZWN0ICovCisKKyNkZWZpbmUgU1lTQ09ORklHMQkJNAkvKiBTeXN0ZW0gQ29uZmlndXJhdGlvbiAxICovCisjZGVmaW5lIFNZU0NPTkZJRzFfUkRTSUVOCTB4ODAwMAkvKiBiaXRzIDE1Li4xNTogUkRTIEludGVycnVwdCBFbmFibGUgKFNpNDcwMSBvbmx5KSAqLworI2RlZmluZSBTWVNDT05GSUcxX1NUQ0lFTgkweDQwMDAJLyogYml0cyAxNC4uMTQ6IFNlZWsvVHVuZSBDb21wbGV0ZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFNZU0NPTkZJRzFfUkRTCQkweDEwMDAJLyogYml0cyAxMi4uMTI6IFJEUyBFbmFibGUgKFNpNDcwMSBvbmx5KSAqLworI2RlZmluZSBTWVNDT05GSUcxX0RFCQkweDA4MDAJLyogYml0cyAxMS4uMTE6IERlLWVtcGhhc2lzICgwPTc1dXMgMT01MHVzKSAqLworI2RlZmluZSBTWVNDT05GSUcxX0FHQ0QJCTB4MDQwMAkvKiBiaXRzIDEwLi4xMDogQUdDIERpc2FibGUgKi8KKyNkZWZpbmUgU1lTQ09ORklHMV9CTE5EQURKCTB4MDBjMAkvKiBiaXRzIDA3Li4wNjogU3RlcmVvL01vbm8gQmxlbmQgTGV2ZWwgQWRqdXN0bWVudCAqLworI2RlZmluZSBTWVNDT05GSUcxX0dQSU8zCTB4MDAzMAkvKiBiaXRzIDA1Li4wNDogR2VuZXJhbCBQdXJwb3NlIEkvTyAzICovCisjZGVmaW5lIFNZU0NPTkZJRzFfR1BJTzIJMHgwMDBjCS8qIGJpdHMgMDMuLjAyOiBHZW5lcmFsIFB1cnBvc2UgSS9PIDIgKi8KKyNkZWZpbmUgU1lTQ09ORklHMV9HUElPMQkweDAwMDMJLyogYml0cyAwMS4uMDA6IEdlbmVyYWwgUHVycG9zZSBJL08gMSAqLworCisjZGVmaW5lIFNZU0NPTkZJRzIJCTUJLyogU3lzdGVtIENvbmZpZ3VyYXRpb24gMiAqLworI2RlZmluZSBTWVNDT05GSUcyX1NFRUtUSAkweGZmMDAJLyogYml0cyAxNS4uMDg6IFJTU0kgU2VlayBUaHJlc2hvbGQgKi8KKyNkZWZpbmUgU1lTQ09ORklHMl9CQU5ECQkweDAwODAJLyogYml0cyAwNy4uMDY6IEJhbmQgU2VsZWN0ICovCisjZGVmaW5lIFNZU0NPTkZJRzJfU1BBQ0UJMHgwMDMwCS8qIGJpdHMgMDUuLjA0OiBDaGFubmVsIFNwYWNpbmcgKi8KKyNkZWZpbmUgU1lTQ09ORklHMl9WT0xVTUUJMHgwMDBmCS8qIGJpdHMgMDMuLjAwOiBWb2x1bWUgKi8KKworI2RlZmluZSBTWVNDT05GSUczCQk2CS8qIFN5c3RlbSBDb25maWd1cmF0aW9uIDMgKi8KKyNkZWZpbmUgU1lTQ09ORklHM19TTVVURVIJMHhjMDAwCS8qIGJpdHMgMTUuLjE0OiBTb2Z0bXV0ZSBBdHRhY2svUmVjb3ZlciBSYXRlICovCisjZGVmaW5lIFNZU0NPTkZJRzNfU01VVEVBCTB4MzAwMAkvKiBiaXRzIDEzLi4xMjogU29mdG11dGUgQXR0ZW51YXRpb24gKi8KKyNkZWZpbmUgU1lTQ09ORklHM19TS1NOUgkweDAwZjAJLyogYml0cyAwNy4uMDQ6IFNlZWsgU05SIFRocmVzaG9sZCAqLworI2RlZmluZSBTWVNDT05GSUczX1NLQ05UCTB4MDAwZgkvKiBiaXRzIDAzLi4wMDogU2VlayBGTSBJbXB1bHNlIERldGVjdGlvbiBUaHJlc2hvbGQgKi8KKworI2RlZmluZSBURVNUMQkJCTcJLyogVGVzdCAxICovCisjZGVmaW5lIFRFU1QxX0FISVpFTgkJMHg0MDAwCS8qIGJpdHMgMTQuLjE0OiBBdWRpbyBIaWdoLVogRW5hYmxlICovCisKKyNkZWZpbmUgVEVTVDIJCQk4CS8qIFRlc3QgMiAqLworLyogVEVTVDIgb25seSBjb250YWlucyByZXNlcnZlZCBiaXRzICovCisKKyNkZWZpbmUgQk9PVENPTkZJRwkJOQkvKiBCb290IENvbmZpZ3VyYXRpb24gKi8KKy8qIEJPT1RDT05GSUcgb25seSBjb250YWlucyByZXNlcnZlZCBiaXRzICovCisKKyNkZWZpbmUgU1RBVFVTUlNTSQkJMTAJLyogU3RhdHVzIFJTU0kgKi8KKyNkZWZpbmUgU1RBVFVTUlNTSV9SRFNSCQkweDgwMDAJLyogYml0cyAxNS4uMTU6IFJEUyBSZWFkeSAoU2k0NzAxIG9ubHkpICovCisjZGVmaW5lIFNUQVRVU1JTU0lfU1RDCQkweDQwMDAJLyogYml0cyAxNC4uMTQ6IFNlZWsvVHVuZSBDb21wbGV0ZSAqLworI2RlZmluZSBTVEFUVVNSU1NJX1NGCQkweDIwMDAJLyogYml0cyAxMy4uMTM6IFNlZWsgRmFpbC9CYW5kIExpbWl0ICovCisjZGVmaW5lIFNUQVRVU1JTU0lfQUZDUkwJMHgxMDAwCS8qIGJpdHMgMTIuLjEyOiBBRkMgUmFpbCAqLworI2RlZmluZSBTVEFUVVNSU1NJX1JEU1MJCTB4MDgwMAkvKiBiaXRzIDExLi4xMTogUkRTIFN5bmNocm9uaXplZCAoU2k0NzAxIG9ubHkpICovCisjZGVmaW5lIFNUQVRVU1JTU0lfQkxFUkEJMHgwNjAwCS8qIGJpdHMgMTAuLjA5OiBSRFMgQmxvY2sgQSBFcnJvcnMgKFNpNDcwMSBvbmx5KSAqLworI2RlZmluZSBTVEFUVVNSU1NJX1NUCQkweDAxMDAJLyogYml0cyAwOC4uMDg6IFN0ZXJlbyBJbmRpY2F0b3IgKi8KKyNkZWZpbmUgU1RBVFVTUlNTSV9SU1NJCQkweDAwZmYJLyogYml0cyAwNy4uMDA6IFJTU0kgKFJlY2VpdmVkIFNpZ25hbCBTdHJlbmd0aCBJbmRpY2F0b3IpICovCisKKyNkZWZpbmUgUkVBRENIQU4JCTExCS8qIFJlYWQgQ2hhbm5lbCAqLworI2RlZmluZSBSRUFEQ0hBTl9CTEVSQgkJMHhjMDAwCS8qIGJpdHMgMTUuLjE0OiBSRFMgQmxvY2sgRCBFcnJvcnMgKFNpNDcwMSBvbmx5KSAqLworI2RlZmluZSBSRUFEQ0hBTl9CTEVSQwkJMHgzMDAwCS8qIGJpdHMgMTMuLjEyOiBSRFMgQmxvY2sgQyBFcnJvcnMgKFNpNDcwMSBvbmx5KSAqLworI2RlZmluZSBSRUFEQ0hBTl9CTEVSRAkJMHgwYzAwCS8qIGJpdHMgMTEuLjEwOiBSRFMgQmxvY2sgQiBFcnJvcnMgKFNpNDcwMSBvbmx5KSAqLworI2RlZmluZSBSRUFEQ0hBTl9SRUFEQ0hBTgkweDAzZmYJLyogYml0cyAwOS4uMDA6IFJlYWQgQ2hhbm5lbCAqLworCisjZGVmaW5lIFJEU0EJCQkxMgkvKiBSRFNBICovCisjZGVmaW5lIFJEU0FfUkRTQQkJMHhmZmZmCS8qIGJpdHMgMTUuLjAwOiBSRFMgQmxvY2sgQSBEYXRhIChTaTQ3MDEgb25seSkgKi8KKworI2RlZmluZSBSRFNCCQkJMTMJLyogUkRTQiAqLworI2RlZmluZSBSRFNCX1JEU0IJCTB4ZmZmZgkvKiBiaXRzIDE1Li4wMDogUkRTIEJsb2NrIEIgRGF0YSAoU2k0NzAxIG9ubHkpICovCisKKyNkZWZpbmUgUkRTQwkJCTE0CS8qIFJEU0MgKi8KKyNkZWZpbmUgUkRTQ19SRFNDCQkweGZmZmYJLyogYml0cyAxNS4uMDA6IFJEUyBCbG9jayBDIERhdGEgKFNpNDcwMSBvbmx5KSAqLworCisjZGVmaW5lIFJEU0QJCQkxNQkvKiBSRFNEICovCisjZGVmaW5lIFJEU0RfUkRTRAkJMHhmZmZmCS8qIGJpdHMgMTUuLjAwOiBSRFMgQmxvY2sgRCBEYXRhIChTaTQ3MDEgb25seSkgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBEcml2ZXIgRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHNpNDcweF9kZXZpY2UgLSBwcml2YXRlIGRhdGEKKyAqLworc3RydWN0IHNpNDcweF9kZXZpY2UgeworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvZGV2OworCisJLyogZHJpdmVyIG1hbmFnZW1lbnQgKi8KKwl1bnNpZ25lZCBpbnQgdXNlcnM7CisKKwkvKiBTaWxhYnMgaW50ZXJuYWwgcmVnaXN0ZXJzICgwLi4xNSkgKi8KKwl1bnNpZ25lZCBzaG9ydCByZWdpc3RlcnNbUkFESU9fUkVHSVNURVJfTlVNXTsKKworCS8qIFJEUyByZWNlaXZlIGJ1ZmZlciAqLworCXdhaXRfcXVldWVfaGVhZF90IHJlYWRfcXVldWU7CisJc3RydWN0IG11dGV4IGxvY2s7CQkvKiBidWZmZXIgbG9ja2luZyAqLworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsJCS8qIHNpemUgaXMgYWx3YXlzIG11bHRpcGxlIG9mIHRocmVlICovCisJdW5zaWduZWQgaW50IGJ1Zl9zaXplOworCXVuc2lnbmVkIGludCByZF9pbmRleDsKKwl1bnNpZ25lZCBpbnQgd3JfaW5kZXg7CisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU0k0NzBYKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfU0k0NzBYX01PRFVMRSkKKwkvKiByZWZlcmVuY2UgdG8gVVNCIGFuZCB2aWRlbyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCisJLyogSW50ZXJydXB0IGVuZHBvaW50IGhhbmRsaW5nICovCisJY2hhciAqaW50X2luX2J1ZmZlcjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludF9pbl9lbmRwb2ludDsKKwlzdHJ1Y3QgdXJiICppbnRfaW5fdXJiOworCWludCBpbnRfaW5fcnVubmluZzsKKworCS8qIHNjcmF0Y2ggcGFnZSAqLworCXVuc2lnbmVkIGNoYXIgc29mdHdhcmVfdmVyc2lvbjsKKwl1bnNpZ25lZCBjaGFyIGhhcmR3YXJlX3ZlcnNpb247CisKKwkvKiBkcml2ZXIgbWFuYWdlbWVudCAqLworCXVuc2lnbmVkIGNoYXIgZGlzY29ubmVjdGVkOworCXN0cnVjdCBtdXRleCBkaXNjb25uZWN0X2xvY2s7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0kyQ19TSTQ3MFgpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19TSTQ3MFhfTU9EVUxFKQorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisjZW5kaWYKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpcm13YXJlIFZlcnNpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgUkFESU9fRldfVkVSU0lPTgkxNQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGcmVxdWVuY3kgTXVsdGlwbGljYXRvcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogVGhlIGZyZXF1ZW5jeSBpcyBzZXQgaW4gdW5pdHMgb2YgNjIuNSBIeiB3aGVuIHVzaW5nIFY0TDJfVFVORVJfQ0FQX0xPVywKKyAqIDYyLjUga0h6IG90aGVyd2lzZS4KKyAqIFRoZSB0dW5lciBpcyBhYmxlIHRvIGhhdmUgYSBjaGFubmVsIHNwYWNpbmcgb2YgNTAsIDEwMCBvciAyMDAga0h6LgorICogdHVuZXItPmNhcGFiaWxpdHkgaXMgdGhlcmVmb3JlIHNldCB0byBWNEwyX1RVTkVSX0NBUF9MT1cKKyAqIFRoZSBGUkVRX01VTCBpcyB0aGVuOiAxIE1IeiAvIDYyLjUgSHogPSAxNjAwMAorICovCisjZGVmaW5lIEZSRVFfTVVMICgxMDAwMDAwIC8gNjIuNSkKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29tbW9uIEZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBzaTQ3MHhfZm9wczsKK2V4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNpNDcweF92aWRkZXZfdGVtcGxhdGU7CitpbnQgc2k0NzB4X2dldF9yZWdpc3RlcihzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8sIGludCByZWducik7CitpbnQgc2k0NzB4X3NldF9yZWdpc3RlcihzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8sIGludCByZWducik7CitpbnQgc2k0NzB4X2Rpc2Nvbm5lY3RfY2hlY2soc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKTsKK2ludCBzaTQ3MHhfc2V0X2ZyZXEoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLCB1bnNpZ25lZCBpbnQgZnJlcSk7CitpbnQgc2k0NzB4X3N0YXJ0KHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyk7CitpbnQgc2k0NzB4X3N0b3Aoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKTsKK2ludCBzaTQ3MHhfcmRzX29uKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyk7CitpbnQgc2k0NzB4X3ZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwYWJpbGl0eSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcxMy1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzLWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMDAyOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcxMy1pMmMuYwpAQCAtMCwwICsxLDIwNjAgQEAKKy8qCisgKiBkcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcxMy1pMmMuYworICoKKyAqIFNpbGljb24gTGFicyBTaTQ3MTMgRk0gUmFkaW8gVHJhbnNtaXR0ZXIgSTJDIGNvbW1hbmRzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29udGFjdDogRWR1YXJkbyBWYWxlbnRpbiA8ZWR1YXJkby52YWxlbnRpbkBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorCisjaW5jbHVkZSAic2k0NzEzLWkyYy5oIgorCisvKiBtb2R1bGUgcGFyYW1ldGVycyAqLworc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAgLSAyKSIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJFZHVhcmRvIFZhbGVudGluIDxlZHVhcmRvLnZhbGVudGluQG5va2lhLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSTJDIGRyaXZlciBmb3IgU2k0NzEzIEZNIFJhZGlvIFRyYW5zbWl0dGVyIik7CitNT0RVTEVfVkVSU0lPTigiMC4wLjEiKTsKKworI2RlZmluZSBERUZBVUxUX1JEU19QSQkJCTB4MDAKKyNkZWZpbmUgREVGQVVMVF9SRFNfUFRZCQkJMHgwMAorI2RlZmluZSBERUZBVUxUX1JEU19QU19OQU1FCQkiIgorI2RlZmluZSBERUZBVUxUX1JEU19SQURJT19URVhUCQlERUZBVUxUX1JEU19QU19OQU1FCisjZGVmaW5lIERFRkFVTFRfUkRTX0RFVklBVElPTgkJMHgwMEM4CisjZGVmaW5lIERFRkFVTFRfUkRTX1BTX1JFUEVBVF9DT1VOVAkweDAwMDMKKyNkZWZpbmUgREVGQVVMVF9MSU1JVEVSX1JUSU1FCQkweDEzOTIKKyNkZWZpbmUgREVGQVVMVF9MSU1JVEVSX0RFVgkJMHgxMDJDQQorI2RlZmluZSBERUZBVUxUX1BJTE9UX0ZSRVFVRU5DWSAJMHg0QTM4CisjZGVmaW5lIERFRkFVTFRfUElMT1RfREVWSUFUSU9OCQkweDFBNUUKKyNkZWZpbmUgREVGQVVMVF9BQ09NUF9BVElNRQkJMHgwMDAwCisjZGVmaW5lIERFRkFVTFRfQUNPTVBfUlRJTUUJCTB4RjQyNDBMCisjZGVmaW5lIERFRkFVTFRfQUNPTVBfR0FJTgkJMHgwRgorI2RlZmluZSBERUZBVUxUX0FDT01QX1RIUkVTSE9MRCAJKC0weDI4KQorI2RlZmluZSBERUZBVUxUX01VVEUJCQkweDAxCisjZGVmaW5lIERFRkFVTFRfUE9XRVJfTEVWRUwJCTg4CisjZGVmaW5lIERFRkFVTFRfRlJFUVVFTkNZCQk4ODAwCisjZGVmaW5lIERFRkFVTFRfUFJFRU1QSEFTSVMJCUZNUEVfRVUKKyNkZWZpbmUgREVGQVVMVF9UVU5FX1JOTAkJMHhGRgorCisjZGVmaW5lIHRvX3NpNDcxM19kZXZpY2Uoc2QpCWNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNpNDcxM19kZXZpY2UsIHNkKQorCisvKiBmcmVxdWVuY3kgZG9tYWluIHRyYW5zZm9ybWF0aW9uICh1c2luZyB0aW1lcyAxMCB0byBhdm9pZCBmbG9hdHMpICovCisjZGVmaW5lIEZSRVFERVZfVU5JVAkxMDAwMDAKKyNkZWZpbmUgRlJFUVY0TDJfTVVMVEkJNjI1CisjZGVmaW5lIHNpNDcxM190b192NGwyKGYpCSgoZiAqIEZSRVFERVZfVU5JVCkgLyBGUkVRVjRMMl9NVUxUSSkKKyNkZWZpbmUgdjRsMl90b19zaTQ3MTMoZikJKChmICogRlJFUVY0TDJfTVVMVEkpIC8gRlJFUURFVl9VTklUKQorI2RlZmluZSBGUkVRX1JBTkdFX0xPVwkJCTc2MDAKKyNkZWZpbmUgRlJFUV9SQU5HRV9ISUdICQkJMTA4MDAKKworI2RlZmluZSBNQVhfQVJHUyA3CisKKyNkZWZpbmUgUkRTX0JMT0NLCQkJOAorI2RlZmluZSBSRFNfQkxPQ0tfQ0xFQVIJCQkweDAzCisjZGVmaW5lIFJEU19CTE9DS19MT0FECQkJMHgwNAorI2RlZmluZSBSRFNfUkFESU9URVhUXzJBCQkweDIwCisjZGVmaW5lIFJEU19SQURJT1RFWFRfQkxLX1NJWkUJCTQKKyNkZWZpbmUgUkRTX1JBRElPVEVYVF9JTkRFWF9NQVgJCTB4MEYKKyNkZWZpbmUgUkRTX0NBUlJJQUdFX1JFVFVSTgkJMHgwRAorCisjZGVmaW5lIHJkc19wc19uYmxvY2tzKGxlbikJKChsZW4gLyBSRFNfQkxPQ0spICsgKGxlbiAlIFJEU19CTE9DSyA/IDEgOiAwKSkKKworI2RlZmluZSBnZXRfc3RhdHVzX2JpdChwLCBiLCBtKQkoKChwKSAmIChtKSkgPj4gKGIpKQorI2RlZmluZSBzZXRfYml0cyhwLCB2LCBiLCBtKQkoKChwKSAmIH4obSkpIHwgKCh2KSA8PCAoYikpKQorCisjZGVmaW5lIEFUVEFDS19USU1FX1VOSVQJNTAwCisKKyNkZWZpbmUgUE9XRVJfT0ZGCQkJMHgwMAorI2RlZmluZSBQT1dFUl9PTgkJCTB4MDEKKworI2RlZmluZSBtc2IoeCkgICAgICAgICAgICAgICAgICAoKHU4KSgodTE2KSB4ID4+IDgpKQorI2RlZmluZSBsc2IoeCkgICAgICAgICAgICAgICAgICAoKHU4KSgodTE2KSB4ICYgIDB4MDBGRikpCisjZGVmaW5lIGNvbXBvc2VfdTE2KG1zYiwgbHNiKQkoKCh1MTYpbXNiIDw8IDgpIHwgbHNiKQorI2RlZmluZSBjaGVja19jb21tYW5kX2ZhaWxlZChzdGF0dXMpCSghKHN0YXR1cyAmIFNJNDcxM19DVFMpIHx8IFwKKwkJCQkJKHN0YXR1cyAmIFNJNDcxM19FUlIpKQorLyogbXV0ZSBkZWZpbml0aW9uICovCisjZGVmaW5lIHNldF9tdXRlKHApCSgocCAmIDEpIHwgKChwICYgMSkgPDwgMSkpOworI2RlZmluZSBnZXRfbXV0ZShwKQkocCAmIDB4MDEpCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkdfQlVGRkVSKGRldmljZSwgbWVzc2FnZSwgYnVmZmVyLCBzaXplKQkJCVwKKwl7CQkJCQkJCQlcCisJCWludCBpOwkJCQkJCQlcCisJCWNoYXIgc3RyWyhzaXplKSo1XTsJCQkJCVwKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykJCQkJXAorCQkJc3ByaW50ZihzdHIgKyBpICogNSwgIiAweCUwMngiLCBidWZmZXJbaV0pOwlcCisJCXY0bDJfZGJnKDIsIGRlYnVnLCBkZXZpY2UsICIlczolc1xuIiwgbWVzc2FnZSwgc3RyKTsJXAorCX0KKyNlbHNlCisjZGVmaW5lIERCR19CVUZGRVIoZGV2aWNlLCBtZXNzYWdlLCBidWZmZXIsIHNpemUpCisjZW5kaWYKKworLyoKKyAqIFZhbHVlcyBmb3IgbGltaXRlciByZWxlYXNlIHRpbWUgKHNvcnRlZCBieSBzZWNvbmQgY29sdW1uKQorICoJZGV2aWNlCXJlbGVhc2UKKyAqCXZhbHVlCXRpbWUgKHVzKQorICovCitzdGF0aWMgbG9uZyBsaW1pdGVyX3RpbWVzW10gPSB7CisJMjAwMCwJMjUwLAorCTEwMDAsCTUwMCwKKwk1MTAsCTEwMDAsCisJMjU1LAkyMDAwLAorCTE3MCwJMzAwMCwKKwkxMjcsCTQwMjAsCisJMTAyLAk1MDEwLAorCTg1LAk2MDIwLAorCTczLAk3MDEwLAorCTY0LAk3OTkwLAorCTU3LAk4OTcwLAorCTUxLAkxMDAzMCwKKwkyNSwJMjA0NzAsCisJMTcsCTMwMTEwLAorCTEzLAkzOTM4MCwKKwkxMCwJNTExOTAsCisJOCwJNjM2OTAsCisJNywJNzMxNDAsCisJNiwJODUzMzAsCisJNSwJMTAyMzkwLAorfTsKKworLyoKKyAqIFZhbHVlcyBmb3IgYXVkaW8gY29tcHJlc3Npb24gcmVsZWFzZSB0aW1lIChzb3J0ZWQgYnkgc2Vjb25kIGNvbHVtbikKKyAqCWRldmljZQlyZWxlYXNlCisgKgl2YWx1ZQl0aW1lICh1cykKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgYWNvbXBfcnRpbWVzW10gPSB7CisJMCwJMTAwMDAwLAorCTEsCTIwMDAwMCwKKwkyLAkzNTAwMDAsCisJMywJNTI1MDAwLAorCTQsCTEwMDAwMDAsCit9OworCisvKgorICogVmFsdWVzIGZvciBwcmVlbXBoYXNpcyAoc29ydGVkIGJ5IHNlY29uZCBjb2x1bW4pCisgKglkZXZpY2UJcHJlZW1waGFzaXMKKyAqCXZhbHVlCXZhbHVlICh2NGwyKQorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwcmVlbXBoYXNpc192YWx1ZXNbXSA9IHsKKwlGTVBFX0RJU0FCTEVELAlWNEwyX1BSRUVNUEhBU0lTX0RJU0FCTEVELAorCUZNUEVfRVUsCVY0TDJfUFJFRU1QSEFTSVNfNTBfdVMsCisJRk1QRV9VU0EsCVY0TDJfUFJFRU1QSEFTSVNfNzVfdVMsCit9OworCitzdGF0aWMgaW50IHVzZWNzX3RvX2Rldih1bnNpZ25lZCBsb25nIHVzZWNzLCB1bnNpZ25lZCBsb25nIGNvbnN0IGFycmF5W10sCisJCQlpbnQgc2l6ZSkKK3sKKwlpbnQgaTsKKwlpbnQgcnZhbCA9IC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIDI7IGkrKykKKwkJaWYgKGFycmF5WyhpICogMikgKyAxXSA+PSB1c2VjcykgeworCQkJcnZhbCA9IGFycmF5W2kgKiAyXTsKKwkJCWJyZWFrOworCQl9CisKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZGV2X3RvX3VzZWNzKGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBjb25zdCBhcnJheVtdLAorCQkJaW50IHNpemUpCit7CisJaW50IGk7CisJaW50IHJ2YWwgPSAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IHNpemUgLyAyOyBpKyspCisJCWlmIChhcnJheVtpICogMl0gPT0gdmFsdWUpIHsKKwkJCXJ2YWwgPSBhcnJheVsoaSAqIDIpICsgMV07CisJCQlicmVhazsKKwkJfQorCisJcmV0dXJuIHJ2YWw7Cit9CisKKy8qIHNpNDcxM19oYW5kbGVyOiBJUlEgaGFuZGxlciwganVzdCBjb21wbGV0ZSB3b3JrICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2k0NzEzX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2ID0gZGV2OworCisJdjRsMl9kYmcoMiwgZGVidWcsICZzZGV2LT5zZCwKKwkJCSIlczogc2VuZGluZyBzaWduYWwgdG8gY29tcGxldGlvbiB3b3JrLlxuIiwgX19mdW5jX18pOworCWNvbXBsZXRlKCZzZGV2LT53b3JrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIHNpNDcxM19zZW5kX2NvbW1hbmQgLSBzZW5kcyBhIGNvbW1hbmQgdG8gc2k0NzEzIGFuZCB3YWl0cyBpdHMgcmVzcG9uc2UKKyAqIEBzZGV2OiBzaTQ3MTNfZGV2aWNlIHN0cnVjdHVyZSBmb3IgdGhlIGRldmljZSB3ZSBhcmUgY29tbXVuaWNhdGluZworICogQGNvbW1hbmQ6IGNvbW1hbmQgaWQKKyAqIEBhcmdzOiBjb21tYW5kIGFyZ3VtZW50cyB3ZSBhcmUgc2VuZGluZyAodXAgdG8gNykKKyAqIEBhcmduOiBhY3R1YWwgc2l6ZSBvZiBAYXJncworICogQHJlc3BvbnNlOiBidWZmZXIgdG8gcGxhY2UgdGhlIGV4cGVjdGVkIHJlc3BvbnNlIGZyb20gdGhlIGRldmljZSAodXAgdG8gMTUpCisgKiBAcmVzcG46IGFjdHVhbCBzaXplIG9mIEByZXNwb25zZQorICogQHVzZWNzOiBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSByZWFkaW5nIHRoZSByZXNwb25zZSAoaW4gdXNlY3MpCisgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX3NlbmRfY29tbWFuZChzdHJ1Y3Qgc2k0NzEzX2RldmljZSAqc2RldiwgY29uc3QgdTggY29tbWFuZCwKKwkJCQljb25zdCB1OCBhcmdzW10sIGNvbnN0IGludCBhcmduLAorCQkJCXU4IHJlc3BvbnNlW10sIGNvbnN0IGludCByZXNwbiwgY29uc3QgaW50IHVzZWNzKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZzZGV2LT5zZCk7CisJdTggZGF0YTFbTUFYX0FSR1MgKyAxXTsKKwlpbnQgZXJyOworCisJaWYgKCFjbGllbnQtPmFkYXB0ZXIpCisJCXJldHVybiAtRU5PREVWOworCisJLyogRmlyc3Qgc2VuZCB0aGUgY29tbWFuZCBhbmQgaXRzIGFyZ3VtZW50cyAqLworCWRhdGExWzBdID0gY29tbWFuZDsKKwltZW1jcHkoZGF0YTEgKyAxLCBhcmdzLCBhcmduKTsKKwlEQkdfQlVGRkVSKCZzZGV2LT5zZCwgIlBhcmFtZXRlcnMiLCBkYXRhMSwgYXJnbiArIDEpOworCisJZXJyID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgZGF0YTEsIGFyZ24gKyAxKTsKKwlpZiAoZXJyICE9IGFyZ24gKyAxKSB7CisJCXY0bDJfZXJyKCZzZGV2LT5zZCwgIkVycm9yIHdoaWxlIHNlbmRpbmcgY29tbWFuZCAweCUwMnhcbiIsCisJCQljb21tYW5kKTsKKwkJcmV0dXJuIChlcnIgPiAwKSA/IC1FSU8gOiBlcnI7CisJfQorCisJLyogV2FpdCByZXNwb25zZSBmcm9tIGludGVycnVwdCAqLworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzZGV2LT53b3JrLAorCQkJCXVzZWNzX3RvX2ppZmZpZXModXNlY3MpICsgMSkpCisJCXY0bDJfd2Fybigmc2Rldi0+c2QsCisJCQkJIiglcykgRGV2aWNlIHRvb2sgdG9vIG11Y2ggdGltZSB0byBhbnN3ZXIuXG4iLAorCQkJCV9fZnVuY19fKTsKKworCS8qIFRoZW4gZ2V0IHRoZSByZXNwb25zZSAqLworCWVyciA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIHJlc3BvbnNlLCByZXNwbik7CisJaWYgKGVyciAhPSByZXNwbikgeworCQl2NGwyX2Vycigmc2Rldi0+c2QsCisJCQkiRXJyb3Igd2hpbGUgcmVhZGluZyByZXNwb25zZSBmb3IgY29tbWFuZCAweCUwMnhcbiIsCisJCQljb21tYW5kKTsKKwkJcmV0dXJuIChlcnIgPiAwKSA/IC1FSU8gOiBlcnI7CisJfQorCisJREJHX0JVRkZFUigmc2Rldi0+c2QsICJSZXNwb25zZSIsIHJlc3BvbnNlLCByZXNwbik7CisJaWYgKGNoZWNrX2NvbW1hbmRfZmFpbGVkKHJlc3BvbnNlWzBdKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHVybiAwOworfQorCisvKgorICogc2k0NzEzX3JlYWRfcHJvcGVydHkgLSByZWFkcyBhIHNpNDcxMyBwcm9wZXJ0eQorICogQHNkZXY6IHNpNDcxM19kZXZpY2Ugc3RydWN0dXJlIGZvciB0aGUgZGV2aWNlIHdlIGFyZSBjb21tdW5pY2F0aW5nCisgKiBAcHJvcDogcHJvcGVydHkgaWRlbnRpZmljYXRpb24gbnVtYmVyCisgKiBAcHY6IHByb3BlcnR5IHZhbHVlIHRvIGJlIHJldHVybmVkIG9uIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCBzaTQ3MTNfcmVhZF9wcm9wZXJ0eShzdHJ1Y3Qgc2k0NzEzX2RldmljZSAqc2RldiwgdTE2IHByb3AsIHUzMiAqcHYpCit7CisJaW50IGVycjsKKwl1OCB2YWxbU0k0NzEzX0dFVF9QUk9QX05SRVNQXTsKKwkvKgorCSAqIAkuRmlyc3QgYnl0ZSA9IDAKKwkgKiAJLlNlY29uZCBieXRlID0gcHJvcGVydHkncyBNU0IKKwkgKiAJLlRoaXJkIGJ5dGUgPSBwcm9wZXJ0eSdzIExTQgorCSAqLworCWNvbnN0IHU4IGFyZ3NbU0k0NzEzX0dFVF9QUk9QX05BUkdTXSA9IHsKKwkJMHgwMCwKKwkJbXNiKHByb3ApLAorCQlsc2IocHJvcCksCisJfTsKKworCWVyciA9IHNpNDcxM19zZW5kX2NvbW1hbmQoc2RldiwgU0k0NzEzX0NNRF9HRVRfUFJPUEVSVFksCisJCQkJICBhcmdzLCBBUlJBWV9TSVpFKGFyZ3MpLCB2YWwsCisJCQkJICBBUlJBWV9TSVpFKHZhbCksIERFRkFVTFRfVElNRU9VVCk7CisKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCSpwdiA9IGNvbXBvc2VfdTE2KHZhbFsyXSwgdmFsWzNdKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmc2Rldi0+c2QsCisJCQkiJXM6IHByb3BlcnR5PTB4JTAyeCB2YWx1ZT0weCUwMnggc3RhdHVzPTB4JTAyeFxuIiwKKwkJCV9fZnVuY19fLCBwcm9wLCAqcHYsIHZhbFswXSk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogc2k0NzEzX3dyaXRlX3Byb3BlcnR5IC0gbW9kaWZpZXMgYSBzaTQ3MTMgcHJvcGVydHkKKyAqIEBzZGV2OiBzaTQ3MTNfZGV2aWNlIHN0cnVjdHVyZSBmb3IgdGhlIGRldmljZSB3ZSBhcmUgY29tbXVuaWNhdGluZworICogQHByb3A6IHByb3BlcnR5IGlkZW50aWZpY2F0aW9uIG51bWJlcgorICogQHZhbDogbmV3IHZhbHVlIGZvciB0aGF0IHByb3BlcnR5CisgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX3dyaXRlX3Byb3BlcnR5KHN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2LCB1MTYgcHJvcCwgdTE2IHZhbCkKK3sKKwlpbnQgcnZhbDsKKwl1OCByZXNwW1NJNDcxM19TRVRfUFJPUF9OUkVTUF07CisJLyoKKwkgKiAJLkZpcnN0IGJ5dGUgPSAwCisJICogCS5TZWNvbmQgYnl0ZSA9IHByb3BlcnR5J3MgTVNCCisJICogCS5UaGlyZCBieXRlID0gcHJvcGVydHkncyBMU0IKKwkgKiAJLkZvdXJ0aCBieXRlID0gdmFsdWUncyBNU0IKKwkgKiAJLkZpZnRoIGJ5dGUgPSB2YWx1ZSdzIExTQgorCSAqLworCWNvbnN0IHU4IGFyZ3NbU0k0NzEzX1NFVF9QUk9QX05BUkdTXSA9IHsKKwkJMHgwMCwKKwkJbXNiKHByb3ApLAorCQlsc2IocHJvcCksCisJCW1zYih2YWwpLAorCQlsc2IodmFsKSwKKwl9OworCisJcnZhbCA9IHNpNDcxM19zZW5kX2NvbW1hbmQoc2RldiwgU0k0NzEzX0NNRF9TRVRfUFJPUEVSVFksCisJCQkJCWFyZ3MsIEFSUkFZX1NJWkUoYXJncyksCisJCQkJCXJlc3AsIEFSUkFZX1NJWkUocmVzcCksCisJCQkJCURFRkFVTFRfVElNRU9VVCk7CisKKwlpZiAocnZhbCA8IDApCisJCXJldHVybiBydmFsOworCisJdjRsMl9kYmcoMSwgZGVidWcsICZzZGV2LT5zZCwKKwkJCSIlczogcHJvcGVydHk9MHglMDJ4IHZhbHVlPTB4JTAyeCBzdGF0dXM9MHglMDJ4XG4iLAorCQkJX19mdW5jX18sIHByb3AsIHZhbCwgcmVzcFswXSk7CisKKwkvKgorCSAqIEFzIHRoZXJlIGlzIG5vIGNvbW1hbmQgcmVzcG9uc2UgZm9yIFNFVF9QUk9QRVJUWSwKKwkgKiB3YWl0IFRjb21wIHRpbWUgdG8gZmluaXNoIGJlZm9yZSBwcm9jZWVkLCBpbiBvcmRlcgorCSAqIHRvIGhhdmUgcHJvcGVydHkgcHJvcGVybHkgc2V0LgorCSAqLworCW1zbGVlcChUSU1FT1VUX1NFVF9QUk9QRVJUWSk7CisKKwlyZXR1cm4gcnZhbDsKK30KKworLyoKKyAqIHNpNDcxM19wb3dlcnVwIC0gUG93ZXJzIHRoZSBkZXZpY2UgdXAKKyAqIEBzZGV2OiBzaTQ3MTNfZGV2aWNlIHN0cnVjdHVyZSBmb3IgdGhlIGRldmljZSB3ZSBhcmUgY29tbXVuaWNhdGluZworICovCitzdGF0aWMgaW50IHNpNDcxM19wb3dlcnVwKHN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2KQoreworCWludCBlcnI7CisJdTggcmVzcFtTSTQ3MTNfUFdVUF9OUkVTUF07CisJLyoKKwkgKiAJLkZpcnN0IGJ5dGUgPSBFbmFibGVkIGludGVycnVwdHMgYW5kIGJvb3QgZnVuY3Rpb24KKwkgKiAJLlNlY29uZCBieXRlID0gSW5wdXQgb3BlcmF0aW9uIG1vZGUKKwkgKi8KKwljb25zdCB1OCBhcmdzW1NJNDcxM19QV1VQX05BUkdTXSA9IHsKKwkJU0k0NzEzX1BXVVBfQ1RTSUVOIHwgU0k0NzEzX1BXVVBfR1BPMk9FTiB8IFNJNDcxM19QV1VQX0ZVTkNfVFgsCisJCVNJNDcxM19QV1VQX09QTU9EX0FOQUxPRywKKwl9OworCisJaWYgKHNkZXYtPnBvd2VyX3N0YXRlKQorCQlyZXR1cm4gMDsKKworCXNkZXYtPnBsYXRmb3JtX2RhdGEtPnNldF9wb3dlcigxKTsKKwllcnIgPSBzaTQ3MTNfc2VuZF9jb21tYW5kKHNkZXYsIFNJNDcxM19DTURfUE9XRVJfVVAsCisJCQkJCWFyZ3MsIEFSUkFZX1NJWkUoYXJncyksCisJCQkJCXJlc3AsIEFSUkFZX1NJWkUocmVzcCksCisJCQkJCVRJTUVPVVRfUE9XRVJfVVApOworCisJaWYgKCFlcnIpIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsICZzZGV2LT5zZCwgIlBvd2VydXAgcmVzcG9uc2U6IDB4JTAyeFxuIiwKKwkJCQlyZXNwWzBdKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsICZzZGV2LT5zZCwgIkRldmljZSBpbiBwb3dlciB1cCBtb2RlXG4iKTsKKwkJc2Rldi0+cG93ZXJfc3RhdGUgPSBQT1dFUl9PTjsKKworCQllcnIgPSBzaTQ3MTNfd3JpdGVfcHJvcGVydHkoc2RldiwgU0k0NzEzX0dQT19JRU4sCisJCQkJCQlTSTQ3MTNfU1RDX0lOVCB8IFNJNDcxM19DVFMpOworCX0gZWxzZSB7CisJCXNkZXYtPnBsYXRmb3JtX2RhdGEtPnNldF9wb3dlcigwKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogc2k0NzEzX3Bvd2VyZG93biAtIFBvd2VycyB0aGUgZGV2aWNlIGRvd24KKyAqIEBzZGV2OiBzaTQ3MTNfZGV2aWNlIHN0cnVjdHVyZSBmb3IgdGhlIGRldmljZSB3ZSBhcmUgY29tbXVuaWNhdGluZworICovCitzdGF0aWMgaW50IHNpNDcxM19wb3dlcmRvd24oc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYpCit7CisJaW50IGVycjsKKwl1OCByZXNwW1NJNDcxM19QV0ROX05SRVNQXTsKKworCWlmICghc2Rldi0+cG93ZXJfc3RhdGUpCisJCXJldHVybiAwOworCisJZXJyID0gc2k0NzEzX3NlbmRfY29tbWFuZChzZGV2LCBTSTQ3MTNfQ01EX1BPV0VSX0RPV04sCisJCQkJCU5VTEwsIDAsCisJCQkJCXJlc3AsIEFSUkFZX1NJWkUocmVzcCksCisJCQkJCURFRkFVTFRfVElNRU9VVCk7CisKKwlpZiAoIWVycikgeworCQl2NGwyX2RiZygxLCBkZWJ1ZywgJnNkZXYtPnNkLCAiUG93ZXIgZG93biByZXNwb25zZTogMHglMDJ4XG4iLAorCQkJCXJlc3BbMF0pOworCQl2NGwyX2RiZygxLCBkZWJ1ZywgJnNkZXYtPnNkLCAiRGV2aWNlIGluIHJlc2V0IG1vZGVcbiIpOworCQlzZGV2LT5wbGF0Zm9ybV9kYXRhLT5zZXRfcG93ZXIoMCk7CisJCXNkZXYtPnBvd2VyX3N0YXRlID0gUE9XRVJfT0ZGOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBzaTQ3MTNfY2hlY2tyZXYgLSBDaGVja3MgaWYgd2UgYXJlIHRyZWF0aW5nIGEgZGV2aWNlIHdpdGggdGhlIGNvcnJlY3QgcmV2LgorICogQHNkZXY6IHNpNDcxM19kZXZpY2Ugc3RydWN0dXJlIGZvciB0aGUgZGV2aWNlIHdlIGFyZSBjb21tdW5pY2F0aW5nCisgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX2NoZWNrcmV2KHN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZzZGV2LT5zZCk7CisJaW50IHJ2YWw7CisJdTggcmVzcFtTSTQ3MTNfR0VUUkVWX05SRVNQXTsKKworCW11dGV4X2xvY2soJnNkZXYtPm11dGV4KTsKKworCXJ2YWwgPSBzaTQ3MTNfc2VuZF9jb21tYW5kKHNkZXYsIFNJNDcxM19DTURfR0VUX1JFViwKKwkJCQkJTlVMTCwgMCwKKwkJCQkJcmVzcCwgQVJSQVlfU0laRShyZXNwKSwKKwkJCQkJREVGQVVMVF9USU1FT1VUKTsKKworCWlmIChydmFsIDwgMCkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAocmVzcFsxXSA9PSBTSTQ3MTNfUFJPRFVDVF9OVU1CRVIpIHsKKwkJdjRsMl9pbmZvKCZzZGV2LT5zZCwgImNoaXAgZm91bmQgQCAweCUwMnggKCVzKVxuIiwKKwkJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKwl9IGVsc2UgeworCQl2NGwyX2Vycigmc2Rldi0+c2QsICJJbnZhbGlkIHByb2R1Y3QgbnVtYmVyXG4iKTsKKwkJcnZhbCA9IC1FSU5WQUw7CisJfQorCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzZGV2LT5tdXRleCk7CisJcmV0dXJuIHJ2YWw7Cit9CisKKy8qCisgKiBzaTQ3MTNfd2FpdF9zdGMgLSBXYWl0cyBTVEMgaW50ZXJydXB0IGFuZCBjbGVhcnMgc3RhdHVzIGJpdHMuIFVzZWZ1bGwKKyAqCQkgICAgIGZvciBUWF9UVU5FX1BPV0VSLCBUWF9UVU5FX0ZSRVEgYW5kIFRYX1RVTkVfTUVBUworICogQHNkZXY6IHNpNDcxM19kZXZpY2Ugc3RydWN0dXJlIGZvciB0aGUgZGV2aWNlIHdlIGFyZSBjb21tdW5pY2F0aW5nCisgKiBAdXNlY3M6IHRpbWVvdXQgdG8gd2FpdCBmb3IgU1RDIGludGVycnVwdCBzaWduYWwKKyAqLworc3RhdGljIGludCBzaTQ3MTNfd2FpdF9zdGMoc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYsIGNvbnN0IGludCB1c2VjcykKK3sKKwlpbnQgZXJyOworCXU4IHJlc3BbU0k0NzEzX0dFVF9TVEFUVVNfTlJFU1BdOworCisJLyogV2FpdCByZXNwb25zZSBmcm9tIFNUQyBpbnRlcnJ1cHQgKi8KKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc2Rldi0+d29yaywKKwkJCXVzZWNzX3RvX2ppZmZpZXModXNlY3MpICsgMSkpCisJCXY0bDJfd2Fybigmc2Rldi0+c2QsCisJCQkiJXM6IGRldmljZSB0b29rIHRvbyBtdWNoIHRpbWUgdG8gYW5zd2VyICglZCB1c2VjKS5cbiIsCisJCQkJX19mdW5jX18sIHVzZWNzKTsKKworCS8qIENsZWFyIHN0YXR1cyBiaXRzICovCisJZXJyID0gc2k0NzEzX3NlbmRfY29tbWFuZChzZGV2LCBTSTQ3MTNfQ01EX0dFVF9JTlRfU1RBVFVTLAorCQkJCQlOVUxMLCAwLAorCQkJCQlyZXNwLCBBUlJBWV9TSVpFKHJlc3ApLAorCQkJCQlERUZBVUxUX1RJTUVPVVQpOworCisJaWYgKGVyciA8IDApCisJCWdvdG8gZXhpdDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmc2Rldi0+c2QsCisJCQkiJXM6IHN0YXR1cyBiaXRzOiAweCUwMnhcbiIsIF9fZnVuY19fLCByZXNwWzBdKTsKKworCWlmICghKHJlc3BbMF0gJiBTSTQ3MTNfU1RDX0lOVCkpCisJCWVyciA9IC1FSU87CisKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIHNpNDcxM190eF90dW5lX2ZyZXEgLSBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgUkYgY2FycmllciBhbmQgc2V0cyB0aGUgdHVuaW5nCisgKiAJCQlmcmVxdWVuY3kgYmV0d2VlbiA3NiBhbmQgMTA4IE1IeiBpbiAxMCBrSHogdW5pdHMgYW5kCisgKiAJCQlzdGVwcyBvZiA1MCBrSHouCisgKiBAc2Rldjogc2k0NzEzX2RldmljZSBzdHJ1Y3R1cmUgZm9yIHRoZSBkZXZpY2Ugd2UgYXJlIGNvbW11bmljYXRpbmcKKyAqIEBmcmVxdWVuY3k6IGRlc2lyZWQgZnJlcXVlbmN5ICg3NiAtIDEwOCBNSHosIHVuaXQgMTAgS0h6LCBzdGVwIDUwIGtIeikKKyAqLworc3RhdGljIGludCBzaTQ3MTNfdHhfdHVuZV9mcmVxKHN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2LCB1MTYgZnJlcXVlbmN5KQoreworCWludCBlcnI7CisJdTggdmFsW1NJNDcxM19UWEZSRVFfTlJFU1BdOworCS8qCisJICogCS5GaXJzdCBieXRlID0gMAorCSAqIAkuU2Vjb25kIGJ5dGUgPSBmcmVxdWVuY3kncyBNU0IKKwkgKiAJLlRoaXJkIGJ5dGUgPSBmcmVxdWVuY3kncyBMU0IKKwkgKi8KKwljb25zdCB1OCBhcmdzW1NJNDcxM19UWEZSRVFfTkFSR1NdID0geworCQkweDAwLAorCQltc2IoZnJlcXVlbmN5KSwKKwkJbHNiKGZyZXF1ZW5jeSksCisJfTsKKworCWVyciA9IHNpNDcxM19zZW5kX2NvbW1hbmQoc2RldiwgU0k0NzEzX0NNRF9UWF9UVU5FX0ZSRVEsCisJCQkJICBhcmdzLCBBUlJBWV9TSVpFKGFyZ3MpLCB2YWwsCisJCQkJICBBUlJBWV9TSVpFKHZhbCksIERFRkFVTFRfVElNRU9VVCk7CisKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmc2Rldi0+c2QsCisJCQkiJXM6IGZyZXF1ZW5jeT0weCUwMnggc3RhdHVzPTB4JTAyeFxuIiwgX19mdW5jX18sCisJCQlmcmVxdWVuY3ksIHZhbFswXSk7CisKKwllcnIgPSBzaTQ3MTNfd2FpdF9zdGMoc2RldiwgVElNRU9VVF9UWF9UVU5FKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBjb21wb3NlX3UxNihhcmdzWzFdLCBhcmdzWzJdKTsKK30KKworLyoKKyAqIHNpNDcxM190eF90dW5lX3Bvd2VyIC0gU2V0cyB0aGUgUkYgdm9sdGFnZSBsZXZlbCBiZXR3ZWVuIDg4IGFuZCAxMTUgZEJ1ViBpbgorICogCQkJMSBkQiB1bml0cy4gQSB2YWx1ZSBvZiAweDAwIGluZGljYXRlcyBvZmYuIFRoZSBjb21tYW5kCisgKiAJCQlhbHNvIHNldHMgdGhlIGFudGVubmEgdHVuaW5nIGNhcGFjaXRhbmNlLiBBIHZhbHVlIG9mIDAKKyAqIAkJCWluZGljYXRlcyBhdXRvdHVuaW5nLCBhbmQgYSB2YWx1ZSBvZiAxIC0gMTkxIGluZGljYXRlcworICogCQkJYSBtYW51YWwgb3ZlcnJpZGUsIHdoaWNoIHJlc3VsdHMgaW4gYSB0dW5pbmcKKyAqIAkJCWNhcGFjaXRhbmNlIG9mIDAuMjUgcEYgeCBAYW50Y2FwLgorICogQHNkZXY6IHNpNDcxM19kZXZpY2Ugc3RydWN0dXJlIGZvciB0aGUgZGV2aWNlIHdlIGFyZSBjb21tdW5pY2F0aW5nCisgKiBAcG93ZXI6IHR1bmluZyBwb3dlciAoODggLSAxMTUgZEJ1ViwgdW5pdC9zdGVwIDEgZEIpCisgKiBAYW50Y2FwOiB2YWx1ZSBvZiBhbnRlbm5hIHR1bmluZyBjYXBhY2l0b3IgKDAgLSAxOTEpCisgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX3R4X3R1bmVfcG93ZXIoc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYsIHU4IHBvd2VyLAorCQkJCXU4IGFudGNhcCkKK3sKKwlpbnQgZXJyOworCXU4IHZhbFtTSTQ3MTNfVFhQV1JfTlJFU1BdOworCS8qCisJICogCS5GaXJzdCBieXRlID0gMAorCSAqIAkuU2Vjb25kIGJ5dGUgPSAwCisJICogCS5UaGlyZCBieXRlID0gcG93ZXIKKwkgKiAJLkZvdXJ0aCBieXRlID0gYW50Y2FwCisJICovCisJY29uc3QgdTggYXJnc1tTSTQ3MTNfVFhQV1JfTkFSR1NdID0geworCQkweDAwLAorCQkweDAwLAorCQlwb3dlciwKKwkJYW50Y2FwLAorCX07CisKKwlpZiAoKChwb3dlciA+IDApICYmIChwb3dlciA8IFNJNDcxM19NSU5fUE9XRVIpKSB8fAorCQlwb3dlciA+IFNJNDcxM19NQVhfUE9XRVIgfHwgYW50Y2FwID4gU0k0NzEzX01BWF9BTlRDQVApCisJCXJldHVybiAtRURPTTsKKworCWVyciA9IHNpNDcxM19zZW5kX2NvbW1hbmQoc2RldiwgU0k0NzEzX0NNRF9UWF9UVU5FX1BPV0VSLAorCQkJCSAgYXJncywgQVJSQVlfU0laRShhcmdzKSwgdmFsLAorCQkJCSAgQVJSQVlfU0laRSh2YWwpLCBERUZBVUxUX1RJTUVPVVQpOworCisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwl2NGwyX2RiZygxLCBkZWJ1ZywgJnNkZXYtPnNkLAorCQkJIiVzOiBwb3dlcj0weCUwMnggYW50Y2FwPTB4JTAyeCBzdGF0dXM9MHglMDJ4XG4iLAorCQkJX19mdW5jX18sIHBvd2VyLCBhbnRjYXAsIHZhbFswXSk7CisKKwlyZXR1cm4gc2k0NzEzX3dhaXRfc3RjKHNkZXYsIFRJTUVPVVRfVFhfVFVORV9QT1dFUik7Cit9CisKKy8qCisgKiBzaTQ3MTNfdHhfdHVuZV9tZWFzdXJlIC0gRW50ZXJzIHJlY2VpdmUgbW9kZSBhbmQgbWVhc3VyZXMgdGhlIHJlY2VpdmVkIG5vaXNlCisgKiAJCQlsZXZlbCBpbiB1bml0cyBvZiBkQnVWIG9uIHRoZSBzZWxlY3RlZCBmcmVxdWVuY3kuCisgKiAJCQlUaGUgRnJlcXVlbmN5IG11c3QgYmUgYmV0d2VlbiA3NiBhbmQgMTA4IE1IeiBpbiAxMCBrSHoKKyAqIAkJCXVuaXRzIGFuZCBzdGVwcyBvZiA1MCBrSHouIFRoZSBjb21tYW5kIGFsc28gc2V0cyB0aGUKKyAqIAkJCWFudGVubmEJdHVuaW5nIGNhcGFjaXRhbmNlLiBBIHZhbHVlIG9mIDAgbWVhbnMKKyAqIAkJCWF1dG90dW5pbmcsIGFuZCBhIHZhbHVlIG9mIDEgdG8gMTkxIGluZGljYXRlcyBtYW51YWwKKyAqIAkJCW92ZXJyaWRlLgorICogQHNkZXY6IHNpNDcxM19kZXZpY2Ugc3RydWN0dXJlIGZvciB0aGUgZGV2aWNlIHdlIGFyZSBjb21tdW5pY2F0aW5nCisgKiBAZnJlcXVlbmN5OiBkZXNpcmVkIGZyZXF1ZW5jeSAoNzYgLSAxMDggTUh6LCB1bml0IDEwIEtIeiwgc3RlcCA1MCBrSHopCisgKiBAYW50Y2FwOiB2YWx1ZSBvZiBhbnRlbm5hIHR1bmluZyBjYXBhY2l0b3IgKDAgLSAxOTEpCisgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX3R4X3R1bmVfbWVhc3VyZShzdHJ1Y3Qgc2k0NzEzX2RldmljZSAqc2RldiwgdTE2IGZyZXF1ZW5jeSwKKwkJCQkJdTggYW50Y2FwKQoreworCWludCBlcnI7CisJdTggdmFsW1NJNDcxM19UWE1FQV9OUkVTUF07CisJLyoKKwkgKiAJLkZpcnN0IGJ5dGUgPSAwCisJICogCS5TZWNvbmQgYnl0ZSA9IGZyZXF1ZW5jeSdzIE1TQgorCSAqIAkuVGhpcmQgYnl0ZSA9IGZyZXF1ZW5jeSdzIExTQgorCSAqIAkuRm91cnRoIGJ5dGUgPSBhbnRjYXAKKwkgKi8KKwljb25zdCB1OCBhcmdzW1NJNDcxM19UWE1FQV9OQVJHU10gPSB7CisJCTB4MDAsCisJCW1zYihmcmVxdWVuY3kpLAorCQlsc2IoZnJlcXVlbmN5KSwKKwkJYW50Y2FwLAorCX07CisKKwlzZGV2LT50dW5lX3JubCA9IERFRkFVTFRfVFVORV9STkw7CisKKwlpZiAoYW50Y2FwID4gU0k0NzEzX01BWF9BTlRDQVApCisJCXJldHVybiAtRURPTTsKKworCWVyciA9IHNpNDcxM19zZW5kX2NvbW1hbmQoc2RldiwgU0k0NzEzX0NNRF9UWF9UVU5FX01FQVNVUkUsCisJCQkJICBhcmdzLCBBUlJBWV9TSVpFKGFyZ3MpLCB2YWwsCisJCQkJICBBUlJBWV9TSVpFKHZhbCksIERFRkFVTFRfVElNRU9VVCk7CisKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmc2Rldi0+c2QsCisJCQkiJXM6IGZyZXF1ZW5jeT0weCUwMnggYW50Y2FwPTB4JTAyeCBzdGF0dXM9MHglMDJ4XG4iLAorCQkJX19mdW5jX18sIGZyZXF1ZW5jeSwgYW50Y2FwLCB2YWxbMF0pOworCisJcmV0dXJuIHNpNDcxM193YWl0X3N0YyhzZGV2LCBUSU1FT1VUX1RYX1RVTkUpOworfQorCisvKgorICogc2k0NzEzX3R4X3R1bmVfc3RhdHVzLSBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIHR4X3R1bmVfZnJlcSwgdHhfdHVuZV9tZWEgb3IKKyAqIAkJCXR4X3R1bmVfcG93ZXIgY29tbWFuZHMuIFRoaXMgY29tbWFuZCByZXR1cm4gdGhlIGN1cnJlbnQKKyAqIAkJCWZyZXF1ZW5jeSwgb3V0cHV0IHZvbHRhZ2UgaW4gZEJ1ViwgdGhlIGFudGVubmEgdHVubmluZworICogCQkJY2FwYWNpdGFuY2UgdmFsdWUgYW5kIHRoZSByZWNlaXZlZCBub2lzZSBsZXZlbC4gVGhlCisgKiAJCQljb21tYW5kIGFsc28gY2xlYXJzIHRoZSBzdGNpbnQgaW50ZXJydXB0IGJpdCB3aGVuIHRoZQorICogCQkJZmlyc3QgYml0IG9mIGl0cyBhcmd1bWVudHMgaXMgaGlnaC4KKyAqIEBzZGV2OiBzaTQ3MTNfZGV2aWNlIHN0cnVjdHVyZSBmb3IgdGhlIGRldmljZSB3ZSBhcmUgY29tbXVuaWNhdGluZworICogQGludGFjazogMHgwMSB0byBjbGVhciB0aGUgc2Vlay90dW5lIGNvbXBsZXRlIGludGVycnVwdCBzdGF0dXMgaW5kaWNhdG9yLgorICogQGZyZXF1ZW5jeTogcmV0dXJuZWQgZnJlcXVlbmN5CisgKiBAcG93ZXI6IHJldHVybmVkIHBvd2VyCisgKiBAYW50Y2FwOiByZXR1cm5lZCBhbnRlbm5hIGNhcGFjaXRhbmNlCisgKiBAbm9pc2U6IHJldHVybmVkIG5vaXNlIGxldmVsCisgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX3R4X3R1bmVfc3RhdHVzKHN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2LCB1OCBpbnRhY2ssCisJCQkJCXUxNiAqZnJlcXVlbmN5LAl1OCAqcG93ZXIsCisJCQkJCXU4ICphbnRjYXAsIHU4ICpub2lzZSkKK3sKKwlpbnQgZXJyOworCXU4IHZhbFtTSTQ3MTNfVFhTVEFUVVNfTlJFU1BdOworCS8qCisJICogCS5GaXJzdCBieXRlID0gaW50YWNrIGJpdAorCSAqLworCWNvbnN0IHU4IGFyZ3NbU0k0NzEzX1RYU1RBVFVTX05BUkdTXSA9IHsKKwkJaW50YWNrICYgU0k0NzEzX0lOVEFDS19NQVNLLAorCX07CisKKwllcnIgPSBzaTQ3MTNfc2VuZF9jb21tYW5kKHNkZXYsIFNJNDcxM19DTURfVFhfVFVORV9TVEFUVVMsCisJCQkJICBhcmdzLCBBUlJBWV9TSVpFKGFyZ3MpLCB2YWwsCisJCQkJICBBUlJBWV9TSVpFKHZhbCksIERFRkFVTFRfVElNRU9VVCk7CisKKwlpZiAoIWVycikgeworCQl2NGwyX2RiZygxLCBkZWJ1ZywgJnNkZXYtPnNkLAorCQkJIiVzOiBzdGF0dXM9MHglMDJ4XG4iLCBfX2Z1bmNfXywgdmFsWzBdKTsKKwkJKmZyZXF1ZW5jeSA9IGNvbXBvc2VfdTE2KHZhbFsyXSwgdmFsWzNdKTsKKwkJc2Rldi0+ZnJlcXVlbmN5ID0gKmZyZXF1ZW5jeTsKKwkJKnBvd2VyID0gdmFsWzVdOworCQkqYW50Y2FwID0gdmFsWzZdOworCQkqbm9pc2UgPSB2YWxbN107CisJCXY0bDJfZGJnKDEsIGRlYnVnLCAmc2Rldi0+c2QsICIlczogcmVzcG9uc2U6ICVkIHggMTAga0h6ICIKKwkJCQkiKHBvd2VyICVkLCBhbnRjYXAgJWQsIHJubCAlZClcbiIsIF9fZnVuY19fLAorCQkJCSpmcmVxdWVuY3ksICpwb3dlciwgKmFudGNhcCwgKm5vaXNlKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogc2k0NzEzX3R4X3Jkc19idWZmIC0gTG9hZHMgdGhlIFJEUyBncm91cCBidWZmZXIgRklGTyBvciBjaXJjdWxhciBidWZmZXIuCisgKiBAc2Rldjogc2k0NzEzX2RldmljZSBzdHJ1Y3R1cmUgZm9yIHRoZSBkZXZpY2Ugd2UgYXJlIGNvbW11bmljYXRpbmcKKyAqIEBtb2RlOiB0aGUgYnVmZmVyIG9wZXJhdGlvbiBtb2RlLgorICogQHJkc2I6IFJEUyBCbG9jayBCCisgKiBAcmRzYzogUkRTIEJsb2NrIEMKKyAqIEByZHNkOiBSRFMgQmxvY2sgRAorICogQGNibGVmdDogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBjaXJjdWxhciBidWZmZXIgYmxvY2tzIG1pbnVzIHRoZQorICogICAgICAgICAgbnVtYmVyIG9mIHVzZWQgY2lyY3VsYXIgYnVmZmVyIGJsb2Nrcy4KKyAqLworc3RhdGljIGludCBzaTQ3MTNfdHhfcmRzX2J1ZmYoc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYsIHU4IG1vZGUsIHUxNiByZHNiLAorCQkJCXUxNiByZHNjLCB1MTYgcmRzZCwgczggKmNibGVmdCkKK3sKKwlpbnQgZXJyOworCXU4IHZhbFtTSTQ3MTNfUkRTQlVGRl9OUkVTUF07CisKKwljb25zdCB1OCBhcmdzW1NJNDcxM19SRFNCVUZGX05BUkdTXSA9IHsKKwkJbW9kZSAmIFNJNDcxM19SRFNCVUZGX01PREVfTUFTSywKKwkJbXNiKHJkc2IpLAorCQlsc2IocmRzYiksCisJCW1zYihyZHNjKSwKKwkJbHNiKHJkc2MpLAorCQltc2IocmRzZCksCisJCWxzYihyZHNkKSwKKwl9OworCisJZXJyID0gc2k0NzEzX3NlbmRfY29tbWFuZChzZGV2LCBTSTQ3MTNfQ01EX1RYX1JEU19CVUZGLAorCQkJCSAgYXJncywgQVJSQVlfU0laRShhcmdzKSwgdmFsLAorCQkJCSAgQVJSQVlfU0laRSh2YWwpLCBERUZBVUxUX1RJTUVPVVQpOworCisJaWYgKCFlcnIpIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsICZzZGV2LT5zZCwKKwkJCSIlczogc3RhdHVzPTB4JTAyeFxuIiwgX19mdW5jX18sIHZhbFswXSk7CisJCSpjYmxlZnQgPSAoczgpdmFsWzJdIC0gdmFsWzNdOworCQl2NGwyX2RiZygxLCBkZWJ1ZywgJnNkZXYtPnNkLCAiJXM6IHJlc3BvbnNlOiBpbnRlcnJ1cHRzIgorCQkJCSIgMHglMDJ4IGNiIGF2YWlsOiAlZCBjYiB1c2VkICVkIGZpZm8gYXZhaWwiCisJCQkJIiAlZCBmaWZvIHVzZWQgJWRcbiIsIF9fZnVuY19fLCB2YWxbMV0sCisJCQkJdmFsWzJdLCB2YWxbM10sIHZhbFs0XSwgdmFsWzVdKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogc2k0NzEzX3R4X3Jkc19wcyAtIExvYWRzIHRoZSBwcm9ncmFtIHNlcnZpY2UgYnVmZmVyLgorICogQHNkZXY6IHNpNDcxM19kZXZpY2Ugc3RydWN0dXJlIGZvciB0aGUgZGV2aWNlIHdlIGFyZSBjb21tdW5pY2F0aW5nCisgKiBAcHNpZDogcHJvZ3JhbSBzZXJ2aWNlIGlkIHRvIGJlIGxvYWRlZC4KKyAqIEBwc2NoYXI6IGFzc3VtZWQgNCBzaXplIGNoYXIgYXJyYXkgdG8gYmUgbG9hZGVkIGludG8gdGhlIHByb2dyYW0gc2VydmljZQorICovCitzdGF0aWMgaW50IHNpNDcxM190eF9yZHNfcHMoc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYsIHU4IHBzaWQsCisJCQkJdW5zaWduZWQgY2hhciAqcHNjaGFyKQoreworCWludCBlcnI7CisJdTggdmFsW1NJNDcxM19SRFNQU19OUkVTUF07CisKKwljb25zdCB1OCBhcmdzW1NJNDcxM19SRFNQU19OQVJHU10gPSB7CisJCXBzaWQgJiBTSTQ3MTNfUkRTUFNfUFNJRF9NQVNLLAorCQlwc2NoYXJbMF0sCisJCXBzY2hhclsxXSwKKwkJcHNjaGFyWzJdLAorCQlwc2NoYXJbM10sCisJfTsKKworCWVyciA9IHNpNDcxM19zZW5kX2NvbW1hbmQoc2RldiwgU0k0NzEzX0NNRF9UWF9SRFNfUFMsCisJCQkJICBhcmdzLCBBUlJBWV9TSVpFKGFyZ3MpLCB2YWwsCisJCQkJICBBUlJBWV9TSVpFKHZhbCksIERFRkFVTFRfVElNRU9VVCk7CisKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCAmc2Rldi0+c2QsICIlczogc3RhdHVzPTB4JTAyeFxuIiwgX19mdW5jX18sIHZhbFswXSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNpNDcxM19zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYsIHU4IHZhbHVlKQoreworCWludCBydmFsOworCisJbXV0ZXhfbG9jaygmc2Rldi0+bXV0ZXgpOworCisJaWYgKHZhbHVlKQorCQlydmFsID0gc2k0NzEzX3Bvd2VydXAoc2Rldik7CisJZWxzZQorCQlydmFsID0gc2k0NzEzX3Bvd2VyZG93bihzZGV2KTsKKworCW11dGV4X3VubG9jaygmc2Rldi0+bXV0ZXgpOworCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50IHNpNDcxM19zZXRfbXV0ZShzdHJ1Y3Qgc2k0NzEzX2RldmljZSAqc2RldiwgdTE2IG11dGUpCit7CisJaW50IHJ2YWwgPSAwOworCisJbXV0ZSA9IHNldF9tdXRlKG11dGUpOworCisJbXV0ZXhfbG9jaygmc2Rldi0+bXV0ZXgpOworCisJaWYgKHNkZXYtPnBvd2VyX3N0YXRlKQorCQlydmFsID0gc2k0NzEzX3dyaXRlX3Byb3BlcnR5KHNkZXYsCisJCQkJU0k0NzEzX1RYX0xJTkVfSU5QVVRfTVVURSwgbXV0ZSk7CisKKwlpZiAocnZhbCA+PSAwKQorCQlzZGV2LT5tdXRlID0gZ2V0X211dGUobXV0ZSk7CisKKwltdXRleF91bmxvY2soJnNkZXYtPm11dGV4KTsKKworCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50IHNpNDcxM19zZXRfcmRzX3BzX25hbWUoc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYsIGNoYXIgKnBzX25hbWUpCit7CisJaW50IHJ2YWwgPSAwLCBpOworCXU4IGxlbiA9IDA7CisKKwkvKiBXZSB3YW50IHRvIGNsZWFyIHRoZSB3aG9sZSB0aGluZyAqLworCWlmICghc3RybGVuKHBzX25hbWUpKQorCQltZW1zZXQocHNfbmFtZSwgMCwgTUFYX1JEU19QU19OQU1FICsgMSk7CisKKwltdXRleF9sb2NrKCZzZGV2LT5tdXRleCk7CisKKwlpZiAoc2Rldi0+cG93ZXJfc3RhdGUpIHsKKwkJLyogV3JpdGUgdGhlIG5ldyBwcyBuYW1lIGFuZCBjbGVhciB0aGUgcGFkZGluZyAqLworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1JEU19QU19OQU1FOyBpICs9IChSRFNfQkxPQ0sgLyAyKSkgeworCQkJcnZhbCA9IHNpNDcxM190eF9yZHNfcHMoc2RldiwgKGkgLyAoUkRTX0JMT0NLIC8gMikpLAorCQkJCQkJcHNfbmFtZSArIGkpOworCQkJaWYgKHJ2YWwgPCAwKQorCQkJCWdvdG8gdW5sb2NrOworCQl9CisKKwkJLyogU2V0dXAgdGhlIHNpemUgdG8gYmUgc2VudCAqLworCQlpZiAoc3RybGVuKHBzX25hbWUpKQorCQkJbGVuID0gc3RybGVuKHBzX25hbWUpIC0gMTsKKwkJZWxzZQorCQkJbGVuID0gMTsKKworCQlydmFsID0gc2k0NzEzX3dyaXRlX3Byb3BlcnR5KHNkZXYsCisJCQkJU0k0NzEzX1RYX1JEU19QU19NRVNTQUdFX0NPVU5ULAorCQkJCXJkc19wc19uYmxvY2tzKGxlbikpOworCQlpZiAocnZhbCA8IDApCisJCQlnb3RvIHVubG9jazsKKworCQlydmFsID0gc2k0NzEzX3dyaXRlX3Byb3BlcnR5KHNkZXYsCisJCQkJU0k0NzEzX1RYX1JEU19QU19SRVBFQVRfQ09VTlQsCisJCQkJREVGQVVMVF9SRFNfUFNfUkVQRUFUX0NPVU5UICogMik7CisJCWlmIChydmFsIDwgMCkKKwkJCWdvdG8gdW5sb2NrOworCX0KKworCXN0cm5jcHkoc2Rldi0+cmRzX2luZm8ucHNfbmFtZSwgcHNfbmFtZSwgTUFYX1JEU19QU19OQU1FKTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmc2Rldi0+bXV0ZXgpOworCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50IHNpNDcxM19zZXRfcmRzX3JhZGlvX3RleHQoc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYsIGNoYXIgKnJ0KQoreworCWludCBydmFsID0gMCwgaTsKKwl1MTYgdF9pbmRleCA9IDA7CisJdTggYl9pbmRleCA9IDAsIGNyX2luc2VydGVkID0gMDsKKwlzOCBsZWZ0OworCisJbXV0ZXhfbG9jaygmc2Rldi0+bXV0ZXgpOworCisJaWYgKCFzZGV2LT5wb3dlcl9zdGF0ZSkKKwkJZ290byBjb3B5OworCisJcnZhbCA9IHNpNDcxM190eF9yZHNfYnVmZihzZGV2LCBSRFNfQkxPQ0tfQ0xFQVIsIDAsIDAsIDAsICZsZWZ0KTsKKwlpZiAocnZhbCA8IDApCisJCWdvdG8gdW5sb2NrOworCisJaWYgKCFzdHJsZW4ocnQpKQorCQlnb3RvIGNvcHk7CisKKwlkbyB7CisJCS8qIFJEUyBzcGVjIHNheXMgdGhhdCBpZiB0aGUgbGFzdCBibG9jayBpc24ndCB1c2VkLAorCQkgKiB0aGVuIGFwcGx5IGEgY2FycmlhZ2UgcmV0dXJuCisJCSAqLworCQlpZiAodF9pbmRleCA8IChSRFNfUkFESU9URVhUX0lOREVYX01BWCAqCisJCQlSRFNfUkFESU9URVhUX0JMS19TSVpFKSkgeworCQkJZm9yIChpID0gMDsgaSA8IFJEU19SQURJT1RFWFRfQkxLX1NJWkU7IGkrKykgeworCQkJCWlmICghcnRbdF9pbmRleCArIGldIHx8IHJ0W3RfaW5kZXggKyBpXSA9PQorCQkJCQlSRFNfQ0FSUklBR0VfUkVUVVJOKSB7CisJCQkJCXJ0W3RfaW5kZXggKyBpXSA9IFJEU19DQVJSSUFHRV9SRVRVUk47CisJCQkJCWNyX2luc2VydGVkID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJcnZhbCA9IHNpNDcxM190eF9yZHNfYnVmZihzZGV2LCBSRFNfQkxPQ0tfTE9BRCwKKwkJCQljb21wb3NlX3UxNihSRFNfUkFESU9URVhUXzJBLCBiX2luZGV4KyspLAorCQkJCWNvbXBvc2VfdTE2KHJ0W3RfaW5kZXhdLCBydFt0X2luZGV4ICsgMV0pLAorCQkJCWNvbXBvc2VfdTE2KHJ0W3RfaW5kZXggKyAyXSwgcnRbdF9pbmRleCArIDNdKSwKKwkJCQkmbGVmdCk7CisJCWlmIChydmFsIDwgMCkKKwkJCWdvdG8gdW5sb2NrOworCisJCXRfaW5kZXggKz0gUkRTX1JBRElPVEVYVF9CTEtfU0laRTsKKworCQlpZiAoY3JfaW5zZXJ0ZWQpCisJCQlicmVhazsKKwl9IHdoaWxlIChsZWZ0ID4gMCk7CisKK2NvcHk6CisJc3RybmNweShzZGV2LT5yZHNfaW5mby5yYWRpb190ZXh0LCBydCwgTUFYX1JEU19SQURJT19URVhUKTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmc2Rldi0+bXV0ZXgpOworCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50IHNpNDcxM19jaG9vc2VfZWNvbnRyb2xfYWN0aW9uKHN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2LCB1MzIgaWQsCisJCXUzMiAqKnNoYWRvdywgczMyICpiaXQsIHMzMiAqbWFzaywgdTE2ICpwcm9wZXJ0eSwgaW50ICptdWwsCisJCXVuc2lnbmVkIGxvbmcgKip0YWJsZSwgaW50ICpzaXplKQoreworCXMzMiBydmFsID0gMDsKKworCXN3aXRjaCAoaWQpIHsKKwkvKiBGTV9UWCBjbGFzcyBjb250cm9scyAqLworCWNhc2UgVjRMMl9DSURfUkRTX1RYX1BJOgorCQkqcHJvcGVydHkgPSBTSTQ3MTNfVFhfUkRTX1BJOworCQkqbXVsID0gMTsKKwkJKnNoYWRvdyA9ICZzZGV2LT5yZHNfaW5mby5waTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9USFJFU0hPTEQ6CisJCSpwcm9wZXJ0eSA9IFNJNDcxM19UWF9BQ09NUF9USFJFU0hPTEQ7CisJCSptdWwgPSAxOworCQkqc2hhZG93ID0gJnNkZXYtPmFjb21wX2luZm8udGhyZXNob2xkOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0dBSU46CisJCSpwcm9wZXJ0eSA9IFNJNDcxM19UWF9BQ09NUF9HQUlOOworCQkqbXVsID0gMTsKKwkJKnNoYWRvdyA9ICZzZGV2LT5hY29tcF9pbmZvLmdhaW47CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUElMT1RfVE9ORV9GUkVRVUVOQ1k6CisJCSpwcm9wZXJ0eSA9IFNJNDcxM19UWF9QSUxPVF9GUkVRVUVOQ1k7CisJCSptdWwgPSAxOworCQkqc2hhZG93ID0gJnNkZXYtPnBpbG90X2luZm8uZnJlcXVlbmN5OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0FUVEFDS19USU1FOgorCQkqcHJvcGVydHkgPSBTSTQ3MTNfVFhfQUNPTVBfQVRUQUNLX1RJTUU7CisJCSptdWwgPSBBVFRBQ0tfVElNRV9VTklUOworCQkqc2hhZG93ID0gJnNkZXYtPmFjb21wX2luZm8uYXR0YWNrX3RpbWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUElMT1RfVE9ORV9ERVZJQVRJT046CisJCSpwcm9wZXJ0eSA9IFNJNDcxM19UWF9QSUxPVF9ERVZJQVRJT047CisJCSptdWwgPSAxMDsKKwkJKnNoYWRvdyA9ICZzZGV2LT5waWxvdF9pbmZvLmRldmlhdGlvbjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0RFVklBVElPTjoKKwkJKnByb3BlcnR5ID0gU0k0NzEzX1RYX0FVRElPX0RFVklBVElPTjsKKwkJKm11bCA9IDEwOworCQkqc2hhZG93ID0gJnNkZXYtPmxpbWl0ZXJfaW5mby5kZXZpYXRpb247CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUkRTX1RYX0RFVklBVElPTjoKKwkJKnByb3BlcnR5ID0gU0k0NzEzX1RYX1JEU19ERVZJQVRJT047CisJCSptdWwgPSAxOworCQkqc2hhZG93ID0gJnNkZXYtPnJkc19pbmZvLmRldmlhdGlvbjsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX1JEU19UWF9QVFk6CisJCSpwcm9wZXJ0eSA9IFNJNDcxM19UWF9SRFNfUFNfTUlTQzsKKwkJKmJpdCA9IDU7CisJCSptYXNrID0gMHgxRiA8PCA1OworCQkqc2hhZG93ID0gJnNkZXYtPnJkc19pbmZvLnB0eTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0VOQUJMRUQ6CisJCSpwcm9wZXJ0eSA9IFNJNDcxM19UWF9BQ09NUF9FTkFCTEU7CisJCSpiaXQgPSAxOworCQkqbWFzayA9IDEgPDwgMTsKKwkJKnNoYWRvdyA9ICZzZGV2LT5saW1pdGVyX2luZm8uZW5hYmxlZDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9FTkFCTEVEOgorCQkqcHJvcGVydHkgPSBTSTQ3MTNfVFhfQUNPTVBfRU5BQkxFOworCQkqYml0ID0gMDsKKwkJKm1hc2sgPSAxIDw8IDA7CisJCSpzaGFkb3cgPSAmc2Rldi0+YWNvbXBfaW5mby5lbmFibGVkOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRU5BQkxFRDoKKwkJKnByb3BlcnR5ID0gU0k0NzEzX1RYX0NPTVBPTkVOVF9FTkFCTEU7CisJCSpiaXQgPSAwOworCQkqbWFzayA9IDEgPDwgMDsKKwkJKnNoYWRvdyA9ICZzZGV2LT5waWxvdF9pbmZvLmVuYWJsZWQ7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX1JFTEVBU0VfVElNRToKKwkJKnByb3BlcnR5ID0gU0k0NzEzX1RYX0xJTUlURVJfUkVMRUFTRV9USU1FOworCQkqdGFibGUgPSBsaW1pdGVyX3RpbWVzOworCQkqc2l6ZSA9IEFSUkFZX1NJWkUobGltaXRlcl90aW1lcyk7CisJCSpzaGFkb3cgPSAmc2Rldi0+bGltaXRlcl9pbmZvLnJlbGVhc2VfdGltZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9SRUxFQVNFX1RJTUU6CisJCSpwcm9wZXJ0eSA9IFNJNDcxM19UWF9BQ09NUF9SRUxFQVNFX1RJTUU7CisJCSp0YWJsZSA9IGFjb21wX3J0aW1lczsKKwkJKnNpemUgPSBBUlJBWV9TSVpFKGFjb21wX3J0aW1lcyk7CisJCSpzaGFkb3cgPSAmc2Rldi0+YWNvbXBfaW5mby5yZWxlYXNlX3RpbWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUzoKKwkJKnByb3BlcnR5ID0gU0k0NzEzX1RYX1BSRUVNUEhBU0lTOworCQkqdGFibGUgPSBwcmVlbXBoYXNpc192YWx1ZXM7CisJCSpzaXplID0gQVJSQVlfU0laRShwcmVlbXBoYXNpc192YWx1ZXMpOworCQkqc2hhZG93ID0gJnNkZXYtPnByZWVtcGhhc2lzOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJ2YWwgPSAtRUlOVkFMOworCX07CisKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGludCBzaTQ3MTNfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpOworCisvKiB3cml0ZSBzdHJpbmcgcHJvcGVydHkgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX3dyaXRlX2Vjb250cm9sX3N0cmluZyhzdHJ1Y3Qgc2k0NzEzX2RldmljZSAqc2RldiwKKwkJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY29udHJvbCkKK3sKKwlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgdnFjOworCWludCBsZW47CisJczMyIHJ2YWwgPSAwOworCisJdnFjLmlkID0gY29udHJvbC0+aWQ7CisJcnZhbCA9IHNpNDcxM19xdWVyeWN0cmwoJnNkZXYtPnNkLCAmdnFjKTsKKwlpZiAocnZhbCA8IDApCisJCWdvdG8gZXhpdDsKKworCXN3aXRjaCAoY29udHJvbC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1JEU19UWF9QU19OQU1FOiB7CisJCWNoYXIgcHNfbmFtZVtNQVhfUkRTX1BTX05BTUUgKyAxXTsKKworCQlsZW4gPSBjb250cm9sLT5zaXplIC0gMTsKKwkJaWYgKGxlbiA+IE1BWF9SRFNfUFNfTkFNRSkgeworCQkJcnZhbCA9IC1FUkFOR0U7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJcnZhbCA9IGNvcHlfZnJvbV91c2VyKHBzX25hbWUsIGNvbnRyb2wtPnN0cmluZywgbGVuKTsKKwkJaWYgKHJ2YWwgPCAwKQorCQkJZ290byBleGl0OworCQlwc19uYW1lW2xlbl0gPSAnXDAnOworCisJCWlmIChzdHJsZW4ocHNfbmFtZSkgJSB2cWMuc3RlcCkgeworCQkJcnZhbCA9IC1FUkFOR0U7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlydmFsID0gc2k0NzEzX3NldF9yZHNfcHNfbmFtZShzZGV2LCBwc19uYW1lKTsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVDogeworCQljaGFyIHJhZGlvX3RleHRbTUFYX1JEU19SQURJT19URVhUICsgMV07CisKKwkJbGVuID0gY29udHJvbC0+c2l6ZSAtIDE7CisJCWlmIChsZW4gPiBNQVhfUkRTX1JBRElPX1RFWFQpIHsKKwkJCXJ2YWwgPSAtRVJBTkdFOworCQkJZ290byBleGl0OworCQl9CisJCXJ2YWwgPSBjb3B5X2Zyb21fdXNlcihyYWRpb190ZXh0LCBjb250cm9sLT5zdHJpbmcsIGxlbik7CisJCWlmIChydmFsIDwgMCkKKwkJCWdvdG8gZXhpdDsKKwkJcmFkaW9fdGV4dFtsZW5dID0gJ1wwJzsKKworCQlpZiAoc3RybGVuKHJhZGlvX3RleHQpICUgdnFjLnN0ZXApIHsKKwkJCXJ2YWwgPSAtRVJBTkdFOworCQkJZ290byBleGl0OworCQl9CisKKwkJcnZhbCA9IHNpNDcxM19zZXRfcmRzX3JhZGlvX3RleHQoc2RldiwgcmFkaW9fdGV4dCk7CisJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJ2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKwl9OworCitleGl0OgorCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50IHZhbGlkYXRlX3JhbmdlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjb250cm9sKQoreworCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCB2cWM7CisJaW50IHJ2YWw7CisKKwl2cWMuaWQgPSBjb250cm9sLT5pZDsKKwlydmFsID0gc2k0NzEzX3F1ZXJ5Y3RybChzZCwgJnZxYyk7CisJaWYgKHJ2YWwgPCAwKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAoY29udHJvbC0+dmFsdWUgPCB2cWMubWluaW11bSB8fCBjb250cm9sLT52YWx1ZSA+IHZxYy5tYXhpbXVtKQorCQlydmFsID0gLUVSQU5HRTsKKworZXhpdDoKKwlyZXR1cm4gcnZhbDsKK30KKworLyogcHJvcGVydGllcyB3aGljaCB1c2UgdHhfdHVuZV9wb3dlciovCitzdGF0aWMgaW50IHNpNDcxM193cml0ZV9lY29udHJvbF90dW5lKHN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2LAorCQkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjb250cm9sKQoreworCXMzMiBydmFsID0gMDsKKwl1OCBwb3dlciwgYW50Y2FwOworCisJcnZhbCA9IHZhbGlkYXRlX3JhbmdlKCZzZGV2LT5zZCwgY29udHJvbCk7CisJaWYgKHJ2YWwgPCAwKQorCQlnb3RvIGV4aXQ7CisKKwltdXRleF9sb2NrKCZzZGV2LT5tdXRleCk7CisKKwlzd2l0Y2ggKGNvbnRyb2wtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9UVU5FX1BPV0VSX0xFVkVMOgorCQlwb3dlciA9IGNvbnRyb2wtPnZhbHVlOworCQlhbnRjYXAgPSBzZGV2LT5hbnRlbm5hX2NhcGFjaXRvcjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9UVU5FX0FOVEVOTkFfQ0FQQUNJVE9SOgorCQlwb3dlciA9IHNkZXYtPnBvd2VyX2xldmVsOworCQlhbnRjYXAgPSBjb250cm9sLT52YWx1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnZhbCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOworCX07CisKKwlpZiAoc2Rldi0+cG93ZXJfc3RhdGUpCisJCXJ2YWwgPSBzaTQ3MTNfdHhfdHVuZV9wb3dlcihzZGV2LCBwb3dlciwgYW50Y2FwKTsKKworCWlmIChydmFsID09IDApIHsKKwkJc2Rldi0+cG93ZXJfbGV2ZWwgPSBwb3dlcjsKKwkJc2Rldi0+YW50ZW5uYV9jYXBhY2l0b3IgPSBhbnRjYXA7CisJfQorCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzZGV2LT5tdXRleCk7CitleGl0OgorCXJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50IHNpNDcxM193cml0ZV9lY29udHJvbF9pbnRlZ2VycyhzdHJ1Y3Qgc2k0NzEzX2RldmljZSAqc2RldiwKKwkJCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmNvbnRyb2wpCit7CisJczMyIHJ2YWw7CisJdTMyICpzaGFkb3cgPSBOVUxMLCB2YWwgPSAwOworCXMzMiBiaXQgPSAwLCBtYXNrID0gMDsKKwl1MTYgcHJvcGVydHkgPSAwOworCWludCBtdWwgPSAwOworCXVuc2lnbmVkIGxvbmcgKnRhYmxlID0gTlVMTDsKKwlpbnQgc2l6ZSA9IDA7CisKKwlydmFsID0gdmFsaWRhdGVfcmFuZ2UoJnNkZXYtPnNkLCBjb250cm9sKTsKKwlpZiAocnZhbCA8IDApCisJCWdvdG8gZXhpdDsKKworCXJ2YWwgPSBzaTQ3MTNfY2hvb3NlX2Vjb250cm9sX2FjdGlvbihzZGV2LCBjb250cm9sLT5pZCwgJnNoYWRvdywgJmJpdCwKKwkJCSZtYXNrLCAmcHJvcGVydHksICZtdWwsICZ0YWJsZSwgJnNpemUpOworCWlmIChydmFsIDwgMCkKKwkJZ290byBleGl0OworCisJdmFsID0gY29udHJvbC0+dmFsdWU7CisJaWYgKG11bCkgeworCQl2YWwgPSBjb250cm9sLT52YWx1ZSAvIG11bDsKKwl9IGVsc2UgaWYgKHRhYmxlKSB7CisJCXJ2YWwgPSB1c2Vjc190b19kZXYoY29udHJvbC0+dmFsdWUsIHRhYmxlLCBzaXplKTsKKwkJaWYgKHJ2YWwgPCAwKQorCQkJZ290byBleGl0OworCQl2YWwgPSBydmFsOworCQlydmFsID0gMDsKKwl9CisKKwltdXRleF9sb2NrKCZzZGV2LT5tdXRleCk7CisKKwlpZiAoc2Rldi0+cG93ZXJfc3RhdGUpIHsKKwkJaWYgKG1hc2spIHsKKwkJCXJ2YWwgPSBzaTQ3MTNfcmVhZF9wcm9wZXJ0eShzZGV2LCBwcm9wZXJ0eSwgJnZhbCk7CisJCQlpZiAocnZhbCA8IDApCisJCQkJZ290byB1bmxvY2s7CisJCQl2YWwgPSBzZXRfYml0cyh2YWwsIGNvbnRyb2wtPnZhbHVlLCBiaXQsIG1hc2spOworCQl9CisKKwkJcnZhbCA9IHNpNDcxM193cml0ZV9wcm9wZXJ0eShzZGV2LCBwcm9wZXJ0eSwgdmFsKTsKKwkJaWYgKHJ2YWwgPCAwKQorCQkJZ290byB1bmxvY2s7CisJCWlmIChtYXNrKQorCQkJdmFsID0gY29udHJvbC0+dmFsdWU7CisJfQorCisJaWYgKG11bCkgeworCQkqc2hhZG93ID0gdmFsICogbXVsOworCX0gZWxzZSBpZiAodGFibGUpIHsKKwkJcnZhbCA9IGRldl90b191c2Vjcyh2YWwsIHRhYmxlLCBzaXplKTsKKwkJaWYgKHJ2YWwgPCAwKQorCQkJZ290byB1bmxvY2s7CisJCSpzaGFkb3cgPSBydmFsOworCQlydmFsID0gMDsKKwl9IGVsc2UgeworCQkqc2hhZG93ID0gdmFsOworCX0KKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmc2Rldi0+bXV0ZXgpOworZXhpdDoKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGludCBzaTQ3MTNfc19mcmVxdWVuY3koc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKTsKK3N0YXRpYyBpbnQgc2k0NzEzX3NfbW9kdWxhdG9yKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX21vZHVsYXRvciAqKTsKKy8qCisgKiBzaTQ3MTNfc2V0dXAgLSBTZXRzIHRoZSBkZXZpY2UgdXAgd2l0aCBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisgKiBAc2Rldjogc2k0NzEzX2RldmljZSBzdHJ1Y3R1cmUgZm9yIHRoZSBkZXZpY2Ugd2UgYXJlIGNvbW11bmljYXRpbmcKKyAqLworc3RhdGljIGludCBzaTQ3MTNfc2V0dXAoc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgY3RybDsKKwlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgZjsKKwlzdHJ1Y3QgdjRsMl9tb2R1bGF0b3Igdm07CisJc3RydWN0IHNpNDcxM19kZXZpY2UgKnRtcDsKKwlpbnQgcnZhbCA9IDA7CisKKwl0bXAgPSBrbWFsbG9jKHNpemVvZigqdG1wKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogR2V0IGEgbG9jYWwgY29weSB0byBhdm9pZCByYWNlICovCisJbXV0ZXhfbG9jaygmc2Rldi0+bXV0ZXgpOworCW1lbWNweSh0bXAsIHNkZXYsIHNpemVvZigqc2RldikpOworCW11dGV4X3VubG9jaygmc2Rldi0+bXV0ZXgpOworCisJY3RybC5pZCA9IFY0TDJfQ0lEX1JEU19UWF9QSTsKKwljdHJsLnZhbHVlID0gdG1wLT5yZHNfaW5mby5waTsKKwlydmFsIHw9IHNpNDcxM193cml0ZV9lY29udHJvbF9pbnRlZ2VycyhzZGV2LCAmY3RybCk7CisKKwljdHJsLmlkID0gVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fVEhSRVNIT0xEOworCWN0cmwudmFsdWUgPSB0bXAtPmFjb21wX2luZm8udGhyZXNob2xkOworCXJ2YWwgfD0gc2k0NzEzX3dyaXRlX2Vjb250cm9sX2ludGVnZXJzKHNkZXYsICZjdHJsKTsKKworCWN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9HQUlOOworCWN0cmwudmFsdWUgPSB0bXAtPmFjb21wX2luZm8uZ2FpbjsKKwlydmFsIHw9IHNpNDcxM193cml0ZV9lY29udHJvbF9pbnRlZ2VycyhzZGV2LCAmY3RybCk7CisKKwljdHJsLmlkID0gVjRMMl9DSURfUElMT1RfVE9ORV9GUkVRVUVOQ1k7CisJY3RybC52YWx1ZSA9IHRtcC0+cGlsb3RfaW5mby5mcmVxdWVuY3k7CisJcnZhbCB8PSBzaTQ3MTNfd3JpdGVfZWNvbnRyb2xfaW50ZWdlcnMoc2RldiwgJmN0cmwpOworCisJY3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0FUVEFDS19USU1FOworCWN0cmwudmFsdWUgPSB0bXAtPmFjb21wX2luZm8uYXR0YWNrX3RpbWU7CisJcnZhbCB8PSBzaTQ3MTNfd3JpdGVfZWNvbnRyb2xfaW50ZWdlcnMoc2RldiwgJmN0cmwpOworCisJY3RybC5pZCA9IFY0TDJfQ0lEX1BJTE9UX1RPTkVfREVWSUFUSU9OOworCWN0cmwudmFsdWUgPSB0bXAtPnBpbG90X2luZm8uZGV2aWF0aW9uOworCXJ2YWwgfD0gc2k0NzEzX3dyaXRlX2Vjb250cm9sX2ludGVnZXJzKHNkZXYsICZjdHJsKTsKKworCWN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0RFVklBVElPTjsKKwljdHJsLnZhbHVlID0gdG1wLT5saW1pdGVyX2luZm8uZGV2aWF0aW9uOworCXJ2YWwgfD0gc2k0NzEzX3dyaXRlX2Vjb250cm9sX2ludGVnZXJzKHNkZXYsICZjdHJsKTsKKworCWN0cmwuaWQgPSBWNEwyX0NJRF9SRFNfVFhfREVWSUFUSU9OOworCWN0cmwudmFsdWUgPSB0bXAtPnJkc19pbmZvLmRldmlhdGlvbjsKKwlydmFsIHw9IHNpNDcxM193cml0ZV9lY29udHJvbF9pbnRlZ2VycyhzZGV2LCAmY3RybCk7CisKKwljdHJsLmlkID0gVjRMMl9DSURfUkRTX1RYX1BUWTsKKwljdHJsLnZhbHVlID0gdG1wLT5yZHNfaW5mby5wdHk7CisJcnZhbCB8PSBzaTQ3MTNfd3JpdGVfZWNvbnRyb2xfaW50ZWdlcnMoc2RldiwgJmN0cmwpOworCisJY3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfRU5BQkxFRDsKKwljdHJsLnZhbHVlID0gdG1wLT5saW1pdGVyX2luZm8uZW5hYmxlZDsKKwlydmFsIHw9IHNpNDcxM193cml0ZV9lY29udHJvbF9pbnRlZ2VycyhzZGV2LCAmY3RybCk7CisKKwljdHJsLmlkID0gVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fRU5BQkxFRDsKKwljdHJsLnZhbHVlID0gdG1wLT5hY29tcF9pbmZvLmVuYWJsZWQ7CisJcnZhbCB8PSBzaTQ3MTNfd3JpdGVfZWNvbnRyb2xfaW50ZWdlcnMoc2RldiwgJmN0cmwpOworCisJY3RybC5pZCA9IFY0TDJfQ0lEX1BJTE9UX1RPTkVfRU5BQkxFRDsKKwljdHJsLnZhbHVlID0gdG1wLT5waWxvdF9pbmZvLmVuYWJsZWQ7CisJcnZhbCB8PSBzaTQ3MTNfd3JpdGVfZWNvbnRyb2xfaW50ZWdlcnMoc2RldiwgJmN0cmwpOworCisJY3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfUkVMRUFTRV9USU1FOworCWN0cmwudmFsdWUgPSB0bXAtPmxpbWl0ZXJfaW5mby5yZWxlYXNlX3RpbWU7CisJcnZhbCB8PSBzaTQ3MTNfd3JpdGVfZWNvbnRyb2xfaW50ZWdlcnMoc2RldiwgJmN0cmwpOworCisJY3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1JFTEVBU0VfVElNRTsKKwljdHJsLnZhbHVlID0gdG1wLT5hY29tcF9pbmZvLnJlbGVhc2VfdGltZTsKKwlydmFsIHw9IHNpNDcxM193cml0ZV9lY29udHJvbF9pbnRlZ2VycyhzZGV2LCAmY3RybCk7CisKKwljdHJsLmlkID0gVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUzsKKwljdHJsLnZhbHVlID0gdG1wLT5wcmVlbXBoYXNpczsKKwlydmFsIHw9IHNpNDcxM193cml0ZV9lY29udHJvbF9pbnRlZ2VycyhzZGV2LCAmY3RybCk7CisKKwljdHJsLmlkID0gVjRMMl9DSURfUkRTX1RYX1BTX05BTUU7CisJcnZhbCB8PSBzaTQ3MTNfc2V0X3Jkc19wc19uYW1lKHNkZXYsIHRtcC0+cmRzX2luZm8ucHNfbmFtZSk7CisKKwljdHJsLmlkID0gVjRMMl9DSURfUkRTX1RYX1JBRElPX1RFWFQ7CisJcnZhbCB8PSBzaTQ3MTNfc2V0X3Jkc19yYWRpb190ZXh0KHNkZXYsIHRtcC0+cmRzX2luZm8ucmFkaW9fdGV4dCk7CisKKwkvKiBEZXZpY2UgcHJvY2VkdXJlIG5lZWRzIHRvIHNldCBmcmVxdWVuY3kgZmlyc3QgKi8KKwlmLmZyZXF1ZW5jeSA9IHRtcC0+ZnJlcXVlbmN5ID8gdG1wLT5mcmVxdWVuY3kgOiBERUZBVUxUX0ZSRVFVRU5DWTsKKwlmLmZyZXF1ZW5jeSA9IHNpNDcxM190b192NGwyKGYuZnJlcXVlbmN5KTsKKwlydmFsIHw9IHNpNDcxM19zX2ZyZXF1ZW5jeSgmc2Rldi0+c2QsICZmKTsKKworCWN0cmwuaWQgPSBWNEwyX0NJRF9UVU5FX1BPV0VSX0xFVkVMOworCWN0cmwudmFsdWUgPSB0bXAtPnBvd2VyX2xldmVsOworCXJ2YWwgfD0gc2k0NzEzX3dyaXRlX2Vjb250cm9sX3R1bmUoc2RldiwgJmN0cmwpOworCisJY3RybC5pZCA9IFY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1I7CisJY3RybC52YWx1ZSA9IHRtcC0+YW50ZW5uYV9jYXBhY2l0b3I7CisJcnZhbCB8PSBzaTQ3MTNfd3JpdGVfZWNvbnRyb2xfdHVuZShzZGV2LCAmY3RybCk7CisKKwl2bS5pbmRleCA9IDA7CisJaWYgKHRtcC0+c3RlcmVvKQorCQl2bS50eHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCWVsc2UKKwkJdm0udHhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CisJaWYgKHRtcC0+cmRzX2luZm8uZW5hYmxlZCkKKwkJdm0udHhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9SRFM7CisJc2k0NzEzX3NfbW9kdWxhdG9yKCZzZGV2LT5zZCwgJnZtKTsKKworCWtmcmVlKHRtcCk7CisKKwlyZXR1cm4gcnZhbDsKK30KKworLyoKKyAqIHNpNDcxM19pbml0aWFsaXplIC0gU2V0cyB0aGUgZGV2aWNlIHVwIHdpdGggZGVmYXVsdCBjb25maWd1cmF0aW9uLgorICogQHNkZXY6IHNpNDcxM19kZXZpY2Ugc3RydWN0dXJlIGZvciB0aGUgZGV2aWNlIHdlIGFyZSBjb21tdW5pY2F0aW5nCisgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX2luaXRpYWxpemUoc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYpCit7CisJaW50IHJ2YWw7CisKKwlydmFsID0gc2k0NzEzX3NldF9wb3dlcl9zdGF0ZShzZGV2LCBQT1dFUl9PTik7CisJaWYgKHJ2YWwgPCAwKQorCQlnb3RvIGV4aXQ7CisKKwlydmFsID0gc2k0NzEzX2NoZWNrcmV2KHNkZXYpOworCWlmIChydmFsIDwgMCkKKwkJZ290byBleGl0OworCisJcnZhbCA9IHNpNDcxM19zZXRfcG93ZXJfc3RhdGUoc2RldiwgUE9XRVJfT0ZGKTsKKwlpZiAocnZhbCA8IDApCisJCWdvdG8gZXhpdDsKKworCW11dGV4X2xvY2soJnNkZXYtPm11dGV4KTsKKworCXNkZXYtPnJkc19pbmZvLnBpID0gREVGQVVMVF9SRFNfUEk7CisJc2Rldi0+cmRzX2luZm8ucHR5ID0gREVGQVVMVF9SRFNfUFRZOworCXNkZXYtPnJkc19pbmZvLmRldmlhdGlvbiA9IERFRkFVTFRfUkRTX0RFVklBVElPTjsKKwlzdHJsY3B5KHNkZXYtPnJkc19pbmZvLnBzX25hbWUsIERFRkFVTFRfUkRTX1BTX05BTUUsIE1BWF9SRFNfUFNfTkFNRSk7CisJc3RybGNweShzZGV2LT5yZHNfaW5mby5yYWRpb190ZXh0LCBERUZBVUxUX1JEU19SQURJT19URVhULAorCQkJCQkJCU1BWF9SRFNfUkFESU9fVEVYVCk7CisJc2Rldi0+cmRzX2luZm8uZW5hYmxlZCA9IDE7CisKKwlzZGV2LT5saW1pdGVyX2luZm8ucmVsZWFzZV90aW1lID0gREVGQVVMVF9MSU1JVEVSX1JUSU1FOworCXNkZXYtPmxpbWl0ZXJfaW5mby5kZXZpYXRpb24gPSBERUZBVUxUX0xJTUlURVJfREVWOworCXNkZXYtPmxpbWl0ZXJfaW5mby5lbmFibGVkID0gMTsKKworCXNkZXYtPnBpbG90X2luZm8uZGV2aWF0aW9uID0gREVGQVVMVF9QSUxPVF9ERVZJQVRJT047CisJc2Rldi0+cGlsb3RfaW5mby5mcmVxdWVuY3kgPSBERUZBVUxUX1BJTE9UX0ZSRVFVRU5DWTsKKwlzZGV2LT5waWxvdF9pbmZvLmVuYWJsZWQgPSAxOworCisJc2Rldi0+YWNvbXBfaW5mby5yZWxlYXNlX3RpbWUgPSBERUZBVUxUX0FDT01QX1JUSU1FOworCXNkZXYtPmFjb21wX2luZm8uYXR0YWNrX3RpbWUgPSBERUZBVUxUX0FDT01QX0FUSU1FOworCXNkZXYtPmFjb21wX2luZm8udGhyZXNob2xkID0gREVGQVVMVF9BQ09NUF9USFJFU0hPTEQ7CisJc2Rldi0+YWNvbXBfaW5mby5nYWluID0gREVGQVVMVF9BQ09NUF9HQUlOOworCXNkZXYtPmFjb21wX2luZm8uZW5hYmxlZCA9IDE7CisKKwlzZGV2LT5mcmVxdWVuY3kgPSBERUZBVUxUX0ZSRVFVRU5DWTsKKwlzZGV2LT5wcmVlbXBoYXNpcyA9IERFRkFVTFRfUFJFRU1QSEFTSVM7CisJc2Rldi0+bXV0ZSA9IERFRkFVTFRfTVVURTsKKwlzZGV2LT5wb3dlcl9sZXZlbCA9IERFRkFVTFRfUE9XRVJfTEVWRUw7CisJc2Rldi0+YW50ZW5uYV9jYXBhY2l0b3IgPSAwOworCXNkZXYtPnN0ZXJlbyA9IDE7CisJc2Rldi0+dHVuZV9ybmwgPSBERUZBVUxUX1RVTkVfUk5MOworCisJbXV0ZXhfdW5sb2NrKCZzZGV2LT5tdXRleCk7CisKK2V4aXQ6CisJcmV0dXJuIHJ2YWw7Cit9CisKKy8qIHJlYWQgc3RyaW5nIHByb3BlcnR5ICovCitzdGF0aWMgaW50IHNpNDcxM19yZWFkX2Vjb250cm9sX3N0cmluZyhzdHJ1Y3Qgc2k0NzEzX2RldmljZSAqc2RldiwKKwkJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY29udHJvbCkKK3sKKwlzMzIgcnZhbCA9IDA7CisKKwlzd2l0Y2ggKGNvbnRyb2wtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9SRFNfVFhfUFNfTkFNRToKKwkJaWYgKHN0cmxlbihzZGV2LT5yZHNfaW5mby5wc19uYW1lKSArIDEgPiBjb250cm9sLT5zaXplKSB7CisJCQljb250cm9sLT5zaXplID0gTUFYX1JEU19QU19OQU1FICsgMTsKKwkJCXJ2YWwgPSAtRU5PU1BDOworCQkJZ290byBleGl0OworCQl9CisJCXJ2YWwgPSBjb3B5X3RvX3VzZXIoY29udHJvbC0+c3RyaW5nLCBzZGV2LT5yZHNfaW5mby5wc19uYW1lLAorCQkJCQlzdHJsZW4oc2Rldi0+cmRzX2luZm8ucHNfbmFtZSkgKyAxKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhUOgorCQlpZiAoc3RybGVuKHNkZXYtPnJkc19pbmZvLnJhZGlvX3RleHQpICsgMSA+IGNvbnRyb2wtPnNpemUpIHsKKwkJCWNvbnRyb2wtPnNpemUgPSBNQVhfUkRTX1JBRElPX1RFWFQgKyAxOworCQkJcnZhbCA9IC1FTk9TUEM7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJcnZhbCA9IGNvcHlfdG9fdXNlcihjb250cm9sLT5zdHJpbmcsIHNkZXYtPnJkc19pbmZvLnJhZGlvX3RleHQsCisJCQkJCXN0cmxlbihzZGV2LT5yZHNfaW5mby5yYWRpb190ZXh0KSArIDEpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJ2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKwl9OworCitleGl0OgorCXJldHVybiBydmFsOworfQorCisvKgorICogc2k0NzEzX3VwZGF0ZV90dW5lX3N0YXR1cyAtIHVwZGF0ZSBwcm9wZXJ0aWVzIGZyb20gdHhfdHVuZV9zdGF0dXMKKyAqIGNvbW1hbmQuIE11c3QgYmUgY2FsbGVkIHdpdGggc2Rldi0+bXV0ZXggaGVsZC4KKyAqIEBzZGV2OiBzaTQ3MTNfZGV2aWNlIHN0cnVjdHVyZSBmb3IgdGhlIGRldmljZSB3ZSBhcmUgY29tbXVuaWNhdGluZworICovCitzdGF0aWMgaW50IHNpNDcxM191cGRhdGVfdHVuZV9zdGF0dXMoc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYpCit7CisJaW50IHJ2YWw7CisJdTE2IGYgPSAwOworCXU4IHAgPSAwLCBhID0gMCwgbiA9IDA7CisKKwlydmFsID0gc2k0NzEzX3R4X3R1bmVfc3RhdHVzKHNkZXYsIDB4MDAsICZmLCAmcCwgJmEsICZuKTsKKworCWlmIChydmFsIDwgMCkKKwkJZ290byBleGl0OworCisJc2Rldi0+cG93ZXJfbGV2ZWwgPSBwOworCXNkZXYtPmFudGVubmFfY2FwYWNpdG9yID0gYTsKKwlzZGV2LT50dW5lX3JubCA9IG47CisKK2V4aXQ6CisJcmV0dXJuIHJ2YWw7Cit9CisKKy8qIHByb3BlcnRpZXMgd2hpY2ggdXNlIHR4X3R1bmVfc3RhdHVzICovCitzdGF0aWMgaW50IHNpNDcxM19yZWFkX2Vjb250cm9sX3R1bmUoc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYsCisJCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmNvbnRyb2wpCit7CisJczMyIHJ2YWwgPSAwOworCisJbXV0ZXhfbG9jaygmc2Rldi0+bXV0ZXgpOworCisJaWYgKHNkZXYtPnBvd2VyX3N0YXRlKSB7CisJCXJ2YWwgPSBzaTQ3MTNfdXBkYXRlX3R1bmVfc3RhdHVzKHNkZXYpOworCQlpZiAocnZhbCA8IDApCisJCQlnb3RvIHVubG9jazsKKwl9CisKKwlzd2l0Y2ggKGNvbnRyb2wtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9UVU5FX1BPV0VSX0xFVkVMOgorCQljb250cm9sLT52YWx1ZSA9IHNkZXYtPnBvd2VyX2xldmVsOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1I6CisJCWNvbnRyb2wtPnZhbHVlID0gc2Rldi0+YW50ZW5uYV9jYXBhY2l0b3I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ2YWwgPSAtRUlOVkFMOworCX07CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJnNkZXYtPm11dGV4KTsKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGludCBzaTQ3MTNfcmVhZF9lY29udHJvbF9pbnRlZ2VycyhzdHJ1Y3Qgc2k0NzEzX2RldmljZSAqc2RldiwKKwkJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY29udHJvbCkKK3sKKwlzMzIgcnZhbDsKKwl1MzIgKnNoYWRvdyA9IE5VTEwsIHZhbCA9IDA7CisJczMyIGJpdCA9IDAsIG1hc2sgPSAwOworCXUxNiBwcm9wZXJ0eSA9IDA7CisJaW50IG11bCA9IDA7CisJdW5zaWduZWQgbG9uZyAqdGFibGUgPSBOVUxMOworCWludCBzaXplID0gMDsKKworCXJ2YWwgPSBzaTQ3MTNfY2hvb3NlX2Vjb250cm9sX2FjdGlvbihzZGV2LCBjb250cm9sLT5pZCwgJnNoYWRvdywgJmJpdCwKKwkJCSZtYXNrLCAmcHJvcGVydHksICZtdWwsICZ0YWJsZSwgJnNpemUpOworCWlmIChydmFsIDwgMCkKKwkJZ290byBleGl0OworCisJbXV0ZXhfbG9jaygmc2Rldi0+bXV0ZXgpOworCisJaWYgKHNkZXYtPnBvd2VyX3N0YXRlKSB7CisJCXJ2YWwgPSBzaTQ3MTNfcmVhZF9wcm9wZXJ0eShzZGV2LCBwcm9wZXJ0eSwgJnZhbCk7CisJCWlmIChydmFsIDwgMCkKKwkJCWdvdG8gdW5sb2NrOworCisJCS8qIEtlZXAgbmVnYXRpdmUgdmFsdWVzIGZvciB0aHJlc2hvbGQgKi8KKwkJaWYgKGNvbnRyb2wtPmlkID09IFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1RIUkVTSE9MRCkKKwkJCSpzaGFkb3cgPSAoczE2KXZhbDsKKwkJZWxzZSBpZiAobWFzaykKKwkJCSpzaGFkb3cgPSBnZXRfc3RhdHVzX2JpdCh2YWwsIGJpdCwgbWFzayk7CisJCWVsc2UgaWYgKG11bCkKKwkJCSpzaGFkb3cgPSB2YWwgKiBtdWw7CisJCWVsc2UKKwkJCSpzaGFkb3cgPSBkZXZfdG9fdXNlY3ModmFsLCB0YWJsZSwgc2l6ZSk7CisJfQorCisJY29udHJvbC0+dmFsdWUgPSAqc2hhZG93OworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzZGV2LT5tdXRleCk7CitleGl0OgorCXJldHVybiBydmFsOworfQorCisvKgorICogVmlkZW80TGludXggU3ViZGV2IEludGVyZmFjZQorICovCisvKiBzaTQ3MTNfc19leHRfY3RybHMgLSBzZXQgZXh0ZW5kZWQgY29udHJvbHMgdmFsdWUgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX3NfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscykKK3sKKwlzdHJ1Y3Qgc2k0NzEzX2RldmljZSAqc2RldiA9IHRvX3NpNDcxM19kZXZpY2Uoc2QpOworCWludCBpOworCisJaWYgKGN0cmxzLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19GTV9UWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKKwkJaW50IGVycjsKKworCQlzd2l0Y2ggKChjdHJscy0+Y29udHJvbHMgKyBpKS0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9SRFNfVFhfUFNfTkFNRToKKwkJY2FzZSBWNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVDoKKwkJCWVyciA9IHNpNDcxM193cml0ZV9lY29udHJvbF9zdHJpbmcoc2RldiwKKwkJCQkJCQljdHJscy0+Y29udHJvbHMgKyBpKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1I6CisJCWNhc2UgVjRMMl9DSURfVFVORV9QT1dFUl9MRVZFTDoKKwkJCWVyciA9IHNpNDcxM193cml0ZV9lY29udHJvbF90dW5lKHNkZXYsCisJCQkJCQkJY3RybHMtPmNvbnRyb2xzICsgaSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciA9IHNpNDcxM193cml0ZV9lY29udHJvbF9pbnRlZ2VycyhzZGV2LAorCQkJCQkJCWN0cmxzLT5jb250cm9scyArIGkpOworCQl9CisKKwkJaWYgKGVyciA8IDApIHsKKwkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKiBzaTQ3MTNfZ19leHRfY3RybHMgLSBnZXQgZXh0ZW5kZWQgY29udHJvbHMgdmFsdWUgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX2dfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscykKK3sKKwlzdHJ1Y3Qgc2k0NzEzX2RldmljZSAqc2RldiA9IHRvX3NpNDcxM19kZXZpY2Uoc2QpOworCWludCBpOworCisJaWYgKGN0cmxzLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19GTV9UWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKKwkJaW50IGVycjsKKworCQlzd2l0Y2ggKChjdHJscy0+Y29udHJvbHMgKyBpKS0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9SRFNfVFhfUFNfTkFNRToKKwkJY2FzZSBWNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVDoKKwkJCWVyciA9IHNpNDcxM19yZWFkX2Vjb250cm9sX3N0cmluZyhzZGV2LAorCQkJCQkJCWN0cmxzLT5jb250cm9scyArIGkpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfVFVORV9BTlRFTk5BX0NBUEFDSVRPUjoKKwkJY2FzZSBWNEwyX0NJRF9UVU5FX1BPV0VSX0xFVkVMOgorCQkJZXJyID0gc2k0NzEzX3JlYWRfZWNvbnRyb2xfdHVuZShzZGV2LAorCQkJCQkJCWN0cmxzLT5jb250cm9scyArIGkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIgPSBzaTQ3MTNfcmVhZF9lY29udHJvbF9pbnRlZ2VycyhzZGV2LAorCQkJCQkJCWN0cmxzLT5jb250cm9scyArIGkpOworCQl9CisKKwkJaWYgKGVyciA8IDApIHsKKwkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKiBzaTQ3MTNfcXVlcnljdHJsIC0gZW51bWVyYXRlIGNvbnRyb2wgaXRlbXMgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCWludCBydmFsID0gMDsKKworCXN3aXRjaCAocWMtPmlkKSB7CisJLyogVXNlciBjbGFzcyBjb250cm9scyAqLworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcnZhbCA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCBERUZBVUxUX01VVEUpOworCQlicmVhazsKKwkvKiBGTV9UWCBjbGFzcyBjb250cm9scyAqLworCWNhc2UgVjRMMl9DSURfUkRTX1RYX1BJOgorCQlydmFsID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDB4RkZGRiwgMSwgREVGQVVMVF9SRFNfUEkpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1JEU19UWF9QVFk6CisJCXJ2YWwgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMzEsIDEsIERFRkFVTFRfUkRTX1BUWSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUkRTX1RYX0RFVklBVElPTjoKKwkJcnZhbCA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCBNQVhfUkRTX0RFVklBVElPTiwKKwkJCQkJCTEwLCBERUZBVUxUX1JEU19ERVZJQVRJT04pOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1JEU19UWF9QU19OQU1FOgorCQkvKgorCQkgKiBSZXBvcnQgc3RlcCBhcyA4LiBGcm9tIFJEUyBzcGVjLCBwc25hbWUKKwkJICogc2hvdWxkIGJlIDguIEJ1dCB0aGVyZSBhcmUgcmVjZWl2ZXJzIHdoaWNoIHNjcm9sbCBzdHJpbmdzCisJCSAqIHNpemVkIGFzIDh4Ti4KKwkJICovCisJCXJ2YWwgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgTUFYX1JEU19QU19OQU1FLCA4LCAwKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVDoKKwkJLyoKKwkJICogUmVwb3J0IHN0ZXAgYXMgMzIgKDJBIGJsb2NrKS4gRnJvbSBSRFMgc3BlYywKKwkJICogcmFkaW8gdGV4dCBzaG91bGQgYmUgMzIgZm9yIDJBIGJsb2NrLiBCdXQgdGhlcmUgYXJlIHJlY2VpdmVycworCQkgKiB3aGljaCBzY3JvbGwgc3RyaW5ncyBzaXplZCBhcyAzMnhOLiBTZXR0aW5nIGRlZmF1bHQgdG8gMzIuCisJCSAqLworCQlydmFsID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIE1BWF9SRFNfUkFESU9fVEVYVCwgMzIsIDApOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQVVESU9fTElNSVRFUl9FTkFCTEVEOgorCQlydmFsID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfUkVMRUFTRV9USU1FOgorCQlydmFsID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDI1MCwgTUFYX0xJTUlURVJfUkVMRUFTRV9USU1FLAorCQkJCQkJNTAsIERFRkFVTFRfTElNSVRFUl9SVElNRSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fTElNSVRFUl9ERVZJQVRJT046CisJCXJ2YWwgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgTUFYX0xJTUlURVJfREVWSUFUSU9OLAorCQkJCQkJMTAsIERFRkFVTFRfTElNSVRFUl9ERVYpOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fRU5BQkxFRDoKKwkJcnZhbCA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9HQUlOOgorCQlydmFsID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIE1BWF9BQ09NUF9HQUlOLCAxLAorCQkJCQkJREVGQVVMVF9BQ09NUF9HQUlOKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9USFJFU0hPTEQ6CisJCXJ2YWwgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgTUlOX0FDT01QX1RIUkVTSE9MRCwKKwkJCQkJCU1BWF9BQ09NUF9USFJFU0hPTEQsIDEsCisJCQkJCQlERUZBVUxUX0FDT01QX1RIUkVTSE9MRCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fQVRUQUNLX1RJTUU6CisJCXJ2YWwgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgTUFYX0FDT01QX0FUVEFDS19USU1FLAorCQkJCQkJNTAwLCBERUZBVUxUX0FDT01QX0FUSU1FKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9SRUxFQVNFX1RJTUU6CisJCXJ2YWwgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMTAwMDAwLCBNQVhfQUNPTVBfUkVMRUFTRV9USU1FLAorCQkJCQkJMTAwMDAwLCBERUZBVUxUX0FDT01QX1JUSU1FKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRU5BQkxFRDoKKwkJcnZhbCA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9QSUxPVF9UT05FX0RFVklBVElPTjoKKwkJcnZhbCA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCBNQVhfUElMT1RfREVWSUFUSU9OLAorCQkJCQkJMTAsIERFRkFVTFRfUElMT1RfREVWSUFUSU9OKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9QSUxPVF9UT05FX0ZSRVFVRU5DWToKKwkJcnZhbCA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCBNQVhfUElMT1RfRlJFUVVFTkNZLAorCQkJCQkJMSwgREVGQVVMVF9QSUxPVF9GUkVRVUVOQ1kpOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUzoKKwkJcnZhbCA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCBWNEwyX1BSRUVNUEhBU0lTX0RJU0FCTEVELAorCQkJCQkJVjRMMl9QUkVFTVBIQVNJU183NV91UywgMSwKKwkJCQkJCVY0TDJfUFJFRU1QSEFTSVNfNTBfdVMpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1RVTkVfUE9XRVJfTEVWRUw6CisJCXJ2YWwgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTIwLCAxLCBERUZBVUxUX1BPV0VSX0xFVkVMKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9UVU5FX0FOVEVOTkFfQ0FQQUNJVE9SOgorCQlydmFsID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDE5MSwgMSwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKwl9OworCisJcmV0dXJuIHJ2YWw7Cit9CisKKy8qIHNpNDcxM19nX2N0cmwgLSBnZXQgdGhlIHZhbHVlIG9mIGEgY29udHJvbCAqLworc3RhdGljIGludCBzaTQ3MTNfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYgPSB0b19zaTQ3MTNfZGV2aWNlKHNkKTsKKwlpbnQgcnZhbCA9IDA7CisKKwlpZiAoIXNkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmc2Rldi0+bXV0ZXgpOworCisJaWYgKHNkZXYtPnBvd2VyX3N0YXRlKSB7CisJCXJ2YWwgPSBzaTQ3MTNfcmVhZF9wcm9wZXJ0eShzZGV2LCBTSTQ3MTNfVFhfTElORV9JTlBVVF9NVVRFLAorCQkJCQkJJnNkZXYtPm11dGUpOworCisJCWlmIChydmFsIDwgMCkKKwkJCWdvdG8gdW5sb2NrOworCX0KKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWN0cmwtPnZhbHVlID0gZ2V0X211dGUoc2Rldi0+bXV0ZSk7CisJCWJyZWFrOworCX0KKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmc2Rldi0+bXV0ZXgpOworCXJldHVybiBydmFsOworfQorCisvKiBzaTQ3MTNfc19jdHJsIC0gc2V0IHRoZSB2YWx1ZSBvZiBhIGNvbnRyb2wgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2ID0gdG9fc2k0NzEzX2RldmljZShzZCk7CisJaW50IHJ2YWwgPSAwOworCisJaWYgKCFzZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWlmIChjdHJsLT52YWx1ZSkgeworCQkJcnZhbCA9IHNpNDcxM19zZXRfbXV0ZShzZGV2LCBjdHJsLT52YWx1ZSk7CisJCQlpZiAocnZhbCA8IDApCisJCQkJZ290byBleGl0OworCisJCQlydmFsID0gc2k0NzEzX3NldF9wb3dlcl9zdGF0ZShzZGV2LCBQT1dFUl9ET1dOKTsKKwkJfSBlbHNlIHsKKwkJCXJ2YWwgPSBzaTQ3MTNfc2V0X3Bvd2VyX3N0YXRlKHNkZXYsIFBPV0VSX1VQKTsKKwkJCWlmIChydmFsIDwgMCkKKwkJCQlnb3RvIGV4aXQ7CisKKwkJCXJ2YWwgPSBzaTQ3MTNfc2V0dXAoc2Rldik7CisJCQlpZiAocnZhbCA8IDApCisJCQkJZ290byBleGl0OworCisJCQlydmFsID0gc2k0NzEzX3NldF9tdXRlKHNkZXYsIGN0cmwtPnZhbHVlKTsKKwkJfQorCQlicmVhazsKKwl9CisKK2V4aXQ6CisJcmV0dXJuIHJ2YWw7Cit9CisKKy8qIHNpNDcxM19pb2N0bCAtIGRlYWwgd2l0aCBwcml2YXRlIGlvY3RscyAob25seSBybmwgZm9yIG5vdykgKi8KK2xvbmcgc2k0NzEzX2lvY3RsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2k0NzEzX2RldmljZSAqc2RldiA9IHRvX3NpNDcxM19kZXZpY2Uoc2QpOworCXN0cnVjdCBzaTQ3MTNfcm5sICpybmwgPSBhcmc7CisJdTE2IGZyZXF1ZW5jeTsKKwlpbnQgcnZhbCA9IDA7CisKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZzZGV2LT5tdXRleCk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJNDcxM19JT0NfTUVBU1VSRV9STkw6CisJCWZyZXF1ZW5jeSA9IHY0bDJfdG9fc2k0NzEzKHJubC0+ZnJlcXVlbmN5KTsKKworCQlpZiAoc2Rldi0+cG93ZXJfc3RhdGUpIHsKKwkJCS8qIFNldCBkZXNpcmVkIG1lYXN1cmVtZW50IGZyZXF1ZW5jeSAqLworCQkJcnZhbCA9IHNpNDcxM190eF90dW5lX21lYXN1cmUoc2RldiwgZnJlcXVlbmN5LCAwKTsKKwkJCWlmIChydmFsIDwgMCkKKwkJCQlnb3RvIHVubG9jazsKKwkJCS8qIGdldCByZXN1bHRzIGZyb20gdHVuZSBzdGF0dXMgKi8KKwkJCXJ2YWwgPSBzaTQ3MTNfdXBkYXRlX3R1bmVfc3RhdHVzKHNkZXYpOworCQkJaWYgKHJ2YWwgPCAwKQorCQkJCWdvdG8gdW5sb2NrOworCQl9CisJCXJubC0+cm5sID0gc2Rldi0+dHVuZV9ybmw7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogbm90aGluZyAqLworCQlydmFsID0gLUVOT0lPQ1RMQ01EOworCX0KKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmc2Rldi0+bXV0ZXgpOworCXJldHVybiBydmFsOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNpNDcxM19zdWJkZXZfY29yZV9vcHMgPSB7CisJLnF1ZXJ5Y3RybAk9IHNpNDcxM19xdWVyeWN0cmwsCisJLmdfZXh0X2N0cmxzCT0gc2k0NzEzX2dfZXh0X2N0cmxzLAorCS5zX2V4dF9jdHJscwk9IHNpNDcxM19zX2V4dF9jdHJscywKKwkuZ19jdHJsCQk9IHNpNDcxM19nX2N0cmwsCisJLnNfY3RybAkJPSBzaTQ3MTNfc19jdHJsLAorCS5pb2N0bAkJPSBzaTQ3MTNfaW9jdGwsCit9OworCisvKiBzaTQ3MTNfZ19tb2R1bGF0b3IgLSBnZXQgbW9kdWxhdG9yIGF0dHJpYnV0ZXMgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX2dfbW9kdWxhdG9yKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX21vZHVsYXRvciAqdm0pCit7CisJc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYgPSB0b19zaTQ3MTNfZGV2aWNlKHNkKTsKKwlpbnQgcnZhbCA9IDA7CisKKwlpZiAoIXNkZXYpIHsKKwkJcnZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAodm0tPmluZGV4ID4gMCkgeworCQlydmFsID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCXN0cm5jcHkodm0tPm5hbWUsICJGTSBNb2R1bGF0b3IiLCAzMik7CisJdm0tPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBWNEwyX1RVTkVSX0NBUF9MT1cgfAorCQkJCQkJVjRMMl9UVU5FUl9DQVBfUkRTOworCisJLyogUmVwb3J0IGN1cnJlbnQgZnJlcXVlbmN5IHJhbmdlIGxpbWl0cyAqLworCXZtLT5yYW5nZWxvdyA9IHNpNDcxM190b192NGwyKEZSRVFfUkFOR0VfTE9XKTsKKwl2bS0+cmFuZ2VoaWdoID0gc2k0NzEzX3RvX3Y0bDIoRlJFUV9SQU5HRV9ISUdIKTsKKworCW11dGV4X2xvY2soJnNkZXYtPm11dGV4KTsKKworCWlmIChzZGV2LT5wb3dlcl9zdGF0ZSkgeworCQl1MzIgY29tcF9lbiA9IDA7CisKKwkJcnZhbCA9IHNpNDcxM19yZWFkX3Byb3BlcnR5KHNkZXYsIFNJNDcxM19UWF9DT01QT05FTlRfRU5BQkxFLAorCQkJCQkJJmNvbXBfZW4pOworCQlpZiAocnZhbCA8IDApCisJCQlnb3RvIHVubG9jazsKKworCQlzZGV2LT5zdGVyZW8gPSBnZXRfc3RhdHVzX2JpdChjb21wX2VuLCAxLCAxIDw8IDEpOworCQlzZGV2LT5yZHNfaW5mby5lbmFibGVkID0gZ2V0X3N0YXR1c19iaXQoY29tcF9lbiwgMiwgMSA8PCAyKTsKKwl9CisKKwkvKiBSZXBvcnQgY3VycmVudCBhdWRpbyBtb2RlOiBtb25vIG9yIHN0ZXJlbyAqLworCWlmIChzZGV2LT5zdGVyZW8pCisJCXZtLT50eHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCWVsc2UKKwkJdm0tPnR4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCisJLyogUmVwb3J0IHJkcyBmZWF0dXJlIHN0YXR1cyAqLworCWlmIChzZGV2LT5yZHNfaW5mby5lbmFibGVkKQorCQl2bS0+dHhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9SRFM7CisJZWxzZQorCQl2bS0+dHhzdWJjaGFucyAmPSB+VjRMMl9UVU5FUl9TVUJfUkRTOworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzZGV2LT5tdXRleCk7CitleGl0OgorCXJldHVybiBydmFsOworfQorCisvKiBzaTQ3MTNfc19tb2R1bGF0b3IgLSBzZXQgbW9kdWxhdG9yIGF0dHJpYnV0ZXMgKi8KK3N0YXRpYyBpbnQgc2k0NzEzX3NfbW9kdWxhdG9yKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX21vZHVsYXRvciAqdm0pCit7CisJc3RydWN0IHNpNDcxM19kZXZpY2UgKnNkZXYgPSB0b19zaTQ3MTNfZGV2aWNlKHNkKTsKKwlpbnQgcnZhbCA9IDA7CisJdTE2IHN0ZXJlbywgcmRzOworCXUzMiBwOworCisJaWYgKCFzZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICh2bS0+aW5kZXggPiAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFNldCBhdWRpbyBtb2RlOiBtb25vIG9yIHN0ZXJlbyAqLworCWlmICh2bS0+dHhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX1NURVJFTykKKwkJc3RlcmVvID0gMTsKKwllbHNlIGlmICh2bS0+dHhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX01PTk8pCisJCXN0ZXJlbyA9IDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJkcyA9ICEhKHZtLT50eHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfUkRTKTsKKworCW11dGV4X2xvY2soJnNkZXYtPm11dGV4KTsKKworCWlmIChzZGV2LT5wb3dlcl9zdGF0ZSkgeworCQlydmFsID0gc2k0NzEzX3JlYWRfcHJvcGVydHkoc2RldiwKKwkJCQkJCVNJNDcxM19UWF9DT01QT05FTlRfRU5BQkxFLCAmcCk7CisJCWlmIChydmFsIDwgMCkKKwkJCWdvdG8gdW5sb2NrOworCisJCXAgPSBzZXRfYml0cyhwLCBzdGVyZW8sIDEsIDEgPDwgMSk7CisJCXAgPSBzZXRfYml0cyhwLCByZHMsIDIsIDEgPDwgMik7CisKKwkJcnZhbCA9IHNpNDcxM193cml0ZV9wcm9wZXJ0eShzZGV2LAorCQkJCQkJU0k0NzEzX1RYX0NPTVBPTkVOVF9FTkFCTEUsIHApOworCQlpZiAocnZhbCA8IDApCisJCQlnb3RvIHVubG9jazsKKwl9CisKKwlzZGV2LT5zdGVyZW8gPSBzdGVyZW87CisJc2Rldi0+cmRzX2luZm8uZW5hYmxlZCA9IHJkczsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmc2Rldi0+bXV0ZXgpOworCXJldHVybiBydmFsOworfQorCisvKiBzaTQ3MTNfZ19mcmVxdWVuY3kgLSBnZXQgdHVuZXIgb3IgbW9kdWxhdG9yIHJhZGlvIGZyZXF1ZW5jeSAqLworc3RhdGljIGludCBzaTQ3MTNfZ19mcmVxdWVuY3koc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2ID0gdG9fc2k0NzEzX2RldmljZShzZCk7CisJaW50IHJ2YWwgPSAwOworCisJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisKKwltdXRleF9sb2NrKCZzZGV2LT5tdXRleCk7CisKKwlpZiAoc2Rldi0+cG93ZXJfc3RhdGUpIHsKKwkJdTE2IGZyZXE7CisJCXU4IHAsIGEsIG47CisKKwkJcnZhbCA9IHNpNDcxM190eF90dW5lX3N0YXR1cyhzZGV2LCAweDAwLCAmZnJlcSwgJnAsICZhLCAmbik7CisJCWlmIChydmFsIDwgMCkKKwkJCWdvdG8gdW5sb2NrOworCisJCXNkZXYtPmZyZXF1ZW5jeSA9IGZyZXE7CisJfQorCisJZi0+ZnJlcXVlbmN5ID0gc2k0NzEzX3RvX3Y0bDIoc2Rldi0+ZnJlcXVlbmN5KTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmc2Rldi0+bXV0ZXgpOworCXJldHVybiBydmFsOworfQorCisvKiBzaTQ3MTNfc19mcmVxdWVuY3kgLSBzZXQgdHVuZXIgb3IgbW9kdWxhdG9yIHJhZGlvIGZyZXF1ZW5jeSAqLworc3RhdGljIGludCBzaTQ3MTNfc19mcmVxdWVuY3koc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2ID0gdG9fc2k0NzEzX2RldmljZShzZCk7CisJaW50IHJ2YWwgPSAwOworCXUxNiBmcmVxdWVuY3kgPSB2NGwyX3RvX3NpNDcxMyhmLT5mcmVxdWVuY3kpOworCisJLyogQ2hlY2sgZnJlcXVlbmN5IHJhbmdlICovCisJaWYgKGZyZXF1ZW5jeSA8IEZSRVFfUkFOR0VfTE9XIHx8IGZyZXF1ZW5jeSA+IEZSRVFfUkFOR0VfSElHSCkKKwkJcmV0dXJuIC1FRE9NOworCisJbXV0ZXhfbG9jaygmc2Rldi0+bXV0ZXgpOworCisJaWYgKHNkZXYtPnBvd2VyX3N0YXRlKSB7CisJCXJ2YWwgPSBzaTQ3MTNfdHhfdHVuZV9mcmVxKHNkZXYsIGZyZXF1ZW5jeSk7CisJCWlmIChydmFsIDwgMCkKKwkJCWdvdG8gdW5sb2NrOworCQlmcmVxdWVuY3kgPSBydmFsOworCQlydmFsID0gMDsKKwl9CisJc2Rldi0+ZnJlcXVlbmN5ID0gZnJlcXVlbmN5OworCWYtPmZyZXF1ZW5jeSA9IHNpNDcxM190b192NGwyKGZyZXF1ZW5jeSk7CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJnNkZXYtPm11dGV4KTsKKwlyZXR1cm4gcnZhbDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgc2k0NzEzX3N1YmRldl90dW5lcl9vcHMgPSB7CisJLmdfZnJlcXVlbmN5CT0gc2k0NzEzX2dfZnJlcXVlbmN5LAorCS5zX2ZyZXF1ZW5jeQk9IHNpNDcxM19zX2ZyZXF1ZW5jeSwKKwkuZ19tb2R1bGF0b3IJPSBzaTQ3MTNfZ19tb2R1bGF0b3IsCisJLnNfbW9kdWxhdG9yCT0gc2k0NzEzX3NfbW9kdWxhdG9yLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2k0NzEzX3N1YmRldl9vcHMgPSB7CisJLmNvcmUJCT0gJnNpNDcxM19zdWJkZXZfY29yZV9vcHMsCisJLnR1bmVyCQk9ICZzaTQ3MTNfc3ViZGV2X3R1bmVyX29wcywKK307CisKKy8qCisgKiBJMkMgZHJpdmVyIGludGVyZmFjZQorICovCisvKiBzaTQ3MTNfcHJvYmUgLSBwcm9iZSBmb3IgdGhlIGRldmljZSAqLworc3RhdGljIGludCBzaTQ3MTNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2OworCWludCBydmFsOworCisJc2RldiA9IGt6YWxsb2Moc2l6ZW9mICpzZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNkZXYpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJGYWlsZWQgdG8gYWxsb2MgdmlkZW8gZGV2aWNlLlxuIik7CisJCXJ2YWwgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJc2Rldi0+cGxhdGZvcm1fZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFzZGV2LT5wbGF0Zm9ybV9kYXRhKSB7CisJCXY0bDJfZXJyKCZzZGV2LT5zZCwgIk5vIHBsYXRmb3JtIGRhdGEgcmVnaXN0ZXJlZC5cbiIpOworCQlydmFsID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX3NkZXY7CisJfQorCisJdjRsMl9pMmNfc3ViZGV2X2luaXQoJnNkZXYtPnNkLCBjbGllbnQsICZzaTQ3MTNfc3ViZGV2X29wcyk7CisKKwltdXRleF9pbml0KCZzZGV2LT5tdXRleCk7CisJaW5pdF9jb21wbGV0aW9uKCZzZGV2LT53b3JrKTsKKworCWlmIChjbGllbnQtPmlycSkgeworCQlydmFsID0gcmVxdWVzdF9pcnEoY2xpZW50LT5pcnEsCisJCQlzaTQ3MTNfaGFuZGxlciwgSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX0RJU0FCTEVELAorCQkJY2xpZW50LT5uYW1lLCBzZGV2KTsKKwkJaWYgKHJ2YWwgPCAwKSB7CisJCQl2NGwyX2Vycigmc2Rldi0+c2QsICJDb3VsZCBub3QgcmVxdWVzdCBJUlFcbiIpOworCQkJZ290byBmcmVlX3NkZXY7CisJCX0KKwkJdjRsMl9kYmcoMSwgZGVidWcsICZzZGV2LT5zZCwgIklSUSByZXF1ZXN0ZWQuXG4iKTsKKwl9IGVsc2UgeworCQl2NGwyX3dhcm4oJnNkZXYtPnNkLCAiSVJRIG5vdCBjb25maWd1cmVkLiBVc2luZyB0aW1lb3V0cy5cbiIpOworCX0KKworCXJ2YWwgPSBzaTQ3MTNfaW5pdGlhbGl6ZShzZGV2KTsKKwlpZiAocnZhbCA8IDApIHsKKwkJdjRsMl9lcnIoJnNkZXYtPnNkLCAiRmFpbGVkIHRvIHByb2JlIGRldmljZSBpbmZvcm1hdGlvbi5cbiIpOworCQlnb3RvIGZyZWVfaXJxOworCX0KKworCXJldHVybiAwOworCitmcmVlX2lycToKKwlpZiAoY2xpZW50LT5pcnEpCisJCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBzZGV2KTsKK2ZyZWVfc2RldjoKKwlrZnJlZShzZGV2KTsKK2V4aXQ6CisJcmV0dXJuIHJ2YWw7Cit9CisKKy8qIHNpNDcxM19yZW1vdmUgLSByZW1vdmUgdGhlIGRldmljZSAqLworc3RhdGljIGludCBzaTQ3MTNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzaTQ3MTNfZGV2aWNlICpzZGV2ID0gdG9fc2k0NzEzX2RldmljZShzZCk7CisKKwlpZiAoc2Rldi0+cG93ZXJfc3RhdGUpCisJCXNpNDcxM19zZXRfcG93ZXJfc3RhdGUoc2RldiwgUE9XRVJfRE9XTik7CisKKwlpZiAoY2xpZW50LT5pcnEgPiAwKQorCQlmcmVlX2lycShjbGllbnQtPmlycSwgc2Rldik7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisKKwlrZnJlZShzZGV2KTsKKworCXJldHVybiAwOworfQorCisvKiBzaTQ3MTNfaTJjX2RyaXZlciAtIGkyYyBkcml2ZXIgaW50ZXJmYWNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc2k0NzEzX2lkW10gPSB7CisJeyAic2k0NzEzIiAsIDAgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNpNDcxM19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzaTQ3MTNfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2k0NzEzIiwKKwl9LAorCS5wcm9iZQkJPSBzaTQ3MTNfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gc2k0NzEzX3JlbW92ZSwKKwkuaWRfdGFibGUgICAgICAgPSBzaTQ3MTNfaWQsCit9OworCisvKiBNb2R1bGUgSW50ZXJmYWNlICovCitzdGF0aWMgaW50IF9faW5pdCBzaTQ3MTNfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnNpNDcxM19pMmNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNpNDcxM19tb2R1bGVfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZzaTQ3MTNfaTJjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNpNDcxM19tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChzaTQ3MTNfbW9kdWxlX2V4aXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcxMy1pMmMuaCBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzLWkyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZjhjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcxMy1pMmMuaApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIGRyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzEzLWkyYy5oCisgKgorICogUHJvcGVydHkgYW5kIGNvbW1hbmRzIGRlZmluaXRpb25zIGZvciBTaTQ3MTMgcmFkaW8gdHJhbnNtaXR0ZXIgY2hpcC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEgLSBJTmRUCisgKiBDb250YWN0OiBFZHVhcmRvIFZhbGVudGluIDxlZHVhcmRvLnZhbGVudGluQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqLworCisjaWZuZGVmIFNJNDcxM19JMkNfSAorI2RlZmluZSBTSTQ3MTNfSTJDX0gKKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+CisjaW5jbHVkZSA8bWVkaWEvc2k0NzEzLmg+CisKKyNkZWZpbmUgU0k0NzEzX1BST0RVQ1RfTlVNQkVSCQkweDBECisKKy8qIENvbW1hbmQgVGltZW91dHMgKi8KKyNkZWZpbmUgREVGQVVMVF9USU1FT1VUCQkJNTAwCisjZGVmaW5lIFRJTUVPVVRfU0VUX1BST1BFUlRZCQkyMAorI2RlZmluZSBUSU1FT1VUX1RYX1RVTkVfUE9XRVIJCTMwMDAwCisjZGVmaW5lIFRJTUVPVVRfVFhfVFVORQkJCTExMDAwMAorI2RlZmluZSBUSU1FT1VUX1BPV0VSX1VQCQkyMDAwMDAKKworLyoKKyAqIENvbW1hbmQgYW5kIGl0cyBhcmd1bWVudHMgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBTSTQ3MTNfUFdVUF9DVFNJRU4JCSgxPDw3KQorI2RlZmluZSBTSTQ3MTNfUFdVUF9HUE8yT0VOCQkoMTw8NikKKyNkZWZpbmUgU0k0NzEzX1BXVVBfUEFUQ0gJCSgxPDw1KQorI2RlZmluZSBTSTQ3MTNfUFdVUF9YT1NDRU4JCSgxPDw0KQorI2RlZmluZSBTSTQ3MTNfUFdVUF9GVU5DX1RYCQkweDAyCisjZGVmaW5lIFNJNDcxM19QV1VQX0ZVTkNfUEFUQ0gJCTB4MEYKKyNkZWZpbmUgU0k0NzEzX1BXVVBfT1BNT0RfQU5BTE9HCTB4NTAKKyNkZWZpbmUgU0k0NzEzX1BXVVBfT1BNT0RfRElHSVRBTAkweDBGCisjZGVmaW5lIFNJNDcxM19QV1VQX05BUkdTCQkyCisjZGVmaW5lIFNJNDcxM19QV1VQX05SRVNQCQkxCisjZGVmaW5lIFNJNDcxM19DTURfUE9XRVJfVVAJCTB4MDEKKworI2RlZmluZSBTSTQ3MTNfR0VUUkVWX05SRVNQCQk5CisjZGVmaW5lIFNJNDcxM19DTURfR0VUX1JFVgkJMHgxMAorCisjZGVmaW5lIFNJNDcxM19QV0ROX05SRVNQCQkxCisjZGVmaW5lIFNJNDcxM19DTURfUE9XRVJfRE9XTgkJMHgxMQorCisjZGVmaW5lIFNJNDcxM19TRVRfUFJPUF9OQVJHUwkJNQorI2RlZmluZSBTSTQ3MTNfU0VUX1BST1BfTlJFU1AJCTEKKyNkZWZpbmUgU0k0NzEzX0NNRF9TRVRfUFJPUEVSVFkJCTB4MTIKKworI2RlZmluZSBTSTQ3MTNfR0VUX1BST1BfTkFSR1MJCTMKKyNkZWZpbmUgU0k0NzEzX0dFVF9QUk9QX05SRVNQCQk0CisjZGVmaW5lIFNJNDcxM19DTURfR0VUX1BST1BFUlRZCQkweDEzCisKKyNkZWZpbmUgU0k0NzEzX0dFVF9TVEFUVVNfTlJFU1AJCTEKKyNkZWZpbmUgU0k0NzEzX0NNRF9HRVRfSU5UX1NUQVRVUwkweDE0CisKKyNkZWZpbmUgU0k0NzEzX0NNRF9QQVRDSF9BUkdTCQkweDE1CisjZGVmaW5lIFNJNDcxM19DTURfUEFUQ0hfREFUQQkJMHgxNgorCisjZGVmaW5lIFNJNDcxM19NQVhfRlJFUQkJCTEwODAwCisjZGVmaW5lIFNJNDcxM19NSU5fRlJFUQkJCTc2MDAKKyNkZWZpbmUgU0k0NzEzX1RYRlJFUV9OQVJHUwkJMworI2RlZmluZSBTSTQ3MTNfVFhGUkVRX05SRVNQCQkxCisjZGVmaW5lIFNJNDcxM19DTURfVFhfVFVORV9GUkVRCQkweDMwCisKKyNkZWZpbmUgU0k0NzEzX01BWF9QT1dFUgkJMTIwCisjZGVmaW5lIFNJNDcxM19NSU5fUE9XRVIJCTg4CisjZGVmaW5lIFNJNDcxM19NQVhfQU5UQ0FQCQkxOTEKKyNkZWZpbmUgU0k0NzEzX01JTl9BTlRDQVAJCTAKKyNkZWZpbmUgU0k0NzEzX1RYUFdSX05BUkdTCQk0CisjZGVmaW5lIFNJNDcxM19UWFBXUl9OUkVTUAkJMQorI2RlZmluZSBTSTQ3MTNfQ01EX1RYX1RVTkVfUE9XRVIJMHgzMQorCisjZGVmaW5lIFNJNDcxM19UWE1FQV9OQVJHUwkJNAorI2RlZmluZSBTSTQ3MTNfVFhNRUFfTlJFU1AJCTEKKyNkZWZpbmUgU0k0NzEzX0NNRF9UWF9UVU5FX01FQVNVUkUJMHgzMgorCisjZGVmaW5lIFNJNDcxM19JTlRBQ0tfTUFTSwkJMHgwMQorI2RlZmluZSBTSTQ3MTNfVFhTVEFUVVNfTkFSR1MJCTEKKyNkZWZpbmUgU0k0NzEzX1RYU1RBVFVTX05SRVNQCQk4CisjZGVmaW5lIFNJNDcxM19DTURfVFhfVFVORV9TVEFUVVMJMHgzMworCisjZGVmaW5lIFNJNDcxM19PVkVSTU9EX0JJVAkJKDEgPDwgMikKKyNkZWZpbmUgU0k0NzEzX0lBTEhfQklUCQkJKDEgPDwgMSkKKyNkZWZpbmUgU0k0NzEzX0lBTExfQklUCQkJKDEgPDwgMCkKKyNkZWZpbmUgU0k0NzEzX0FTUVNUQVRVU19OQVJHUwkJMQorI2RlZmluZSBTSTQ3MTNfQVNRU1RBVFVTX05SRVNQCQk1CisjZGVmaW5lIFNJNDcxM19DTURfVFhfQVNRX1NUQVRVUwkweDM0CisKKyNkZWZpbmUgU0k0NzEzX1JEU0JVRkZfTU9ERV9NQVNLCTB4ODcKKyNkZWZpbmUgU0k0NzEzX1JEU0JVRkZfTkFSR1MJCTcKKyNkZWZpbmUgU0k0NzEzX1JEU0JVRkZfTlJFU1AJCTYKKyNkZWZpbmUgU0k0NzEzX0NNRF9UWF9SRFNfQlVGRgkJMHgzNQorCisjZGVmaW5lIFNJNDcxM19SRFNQU19QU0lEX01BU0sJCTB4MUYKKyNkZWZpbmUgU0k0NzEzX1JEU1BTX05BUkdTCQk1CisjZGVmaW5lIFNJNDcxM19SRFNQU19OUkVTUAkJMQorI2RlZmluZSBTSTQ3MTNfQ01EX1RYX1JEU19QUwkJMHgzNgorCisjZGVmaW5lIFNJNDcxM19DTURfR1BPX0NUTAkJMHg4MAorI2RlZmluZSBTSTQ3MTNfQ01EX0dQT19TRVQJCTB4ODEKKworLyoKKyAqIEJpdHMgZnJvbSBzdGF0dXMgcmVzcG9uc2UKKyAqLworI2RlZmluZSBTSTQ3MTNfQ1RTCQkJKDE8PDcpCisjZGVmaW5lIFNJNDcxM19FUlIJCQkoMTw8NikKKyNkZWZpbmUgU0k0NzEzX1JEU19JTlQJCQkoMTw8MikKKyNkZWZpbmUgU0k0NzEzX0FTUV9JTlQJCQkoMTw8MSkKKyNkZWZpbmUgU0k0NzEzX1NUQ19JTlQJCQkoMTw8MCkKKworLyoKKyAqIFByb3BlcnR5IGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgU0k0NzEzX0dQT19JRU4JCQkweDAwMDEKKyNkZWZpbmUgU0k0NzEzX0RJR19JTlBVVF9GT1JNQVQJCTB4MDEwMQorI2RlZmluZSBTSTQ3MTNfRElHX0lOUFVUX1NBTVBMRV9SQVRFCTB4MDEwMworI2RlZmluZSBTSTQ3MTNfUkVGQ0xLX0ZSRVEJCTB4MDIwMQorI2RlZmluZSBTSTQ3MTNfUkVGQ0xLX1BSRVNDQUxFCQkweDAyMDIKKyNkZWZpbmUgU0k0NzEzX1RYX0NPTVBPTkVOVF9FTkFCTEUJMHgyMTAwCisjZGVmaW5lIFNJNDcxM19UWF9BVURJT19ERVZJQVRJT04JMHgyMTAxCisjZGVmaW5lIFNJNDcxM19UWF9QSUxPVF9ERVZJQVRJT04JMHgyMTAyCisjZGVmaW5lIFNJNDcxM19UWF9SRFNfREVWSUFUSU9OCQkweDIxMDMKKyNkZWZpbmUgU0k0NzEzX1RYX0xJTkVfSU5QVVRfTEVWRUwJMHgyMTA0CisjZGVmaW5lIFNJNDcxM19UWF9MSU5FX0lOUFVUX01VVEUJMHgyMTA1CisjZGVmaW5lIFNJNDcxM19UWF9QUkVFTVBIQVNJUwkJMHgyMTA2CisjZGVmaW5lIFNJNDcxM19UWF9QSUxPVF9GUkVRVUVOQ1kJMHgyMTA3CisjZGVmaW5lIFNJNDcxM19UWF9BQ09NUF9FTkFCTEUJCTB4MjIwMAorI2RlZmluZSBTSTQ3MTNfVFhfQUNPTVBfVEhSRVNIT0xECTB4MjIwMQorI2RlZmluZSBTSTQ3MTNfVFhfQUNPTVBfQVRUQUNLX1RJTUUJMHgyMjAyCisjZGVmaW5lIFNJNDcxM19UWF9BQ09NUF9SRUxFQVNFX1RJTUUJMHgyMjAzCisjZGVmaW5lIFNJNDcxM19UWF9BQ09NUF9HQUlOCQkweDIyMDQKKyNkZWZpbmUgU0k0NzEzX1RYX0xJTUlURVJfUkVMRUFTRV9USU1FCTB4MjIwNQorI2RlZmluZSBTSTQ3MTNfVFhfQVNRX0lOVEVSUlVQVF9TT1VSQ0UJMHgyMzAwCisjZGVmaW5lIFNJNDcxM19UWF9BU1FfTEVWRUxfTE9XCQkweDIzMDEKKyNkZWZpbmUgU0k0NzEzX1RYX0FTUV9EVVJBVElPTl9MT1cJMHgyMzAyCisjZGVmaW5lIFNJNDcxM19UWF9BU1FfTEVWRUxfSElHSAkweDIzMDMKKyNkZWZpbmUgU0k0NzEzX1RYX0FTUV9EVVJBVElPTl9ISUdICTB4MjMwNAorI2RlZmluZSBTSTQ3MTNfVFhfUkRTX0lOVEVSUlVQVF9TT1VSQ0UJMHgyQzAwCisjZGVmaW5lIFNJNDcxM19UWF9SRFNfUEkJCTB4MkMwMQorI2RlZmluZSBTSTQ3MTNfVFhfUkRTX1BTX01JWAkJMHgyQzAyCisjZGVmaW5lIFNJNDcxM19UWF9SRFNfUFNfTUlTQwkJMHgyQzAzCisjZGVmaW5lIFNJNDcxM19UWF9SRFNfUFNfUkVQRUFUX0NPVU5UCTB4MkMwNAorI2RlZmluZSBTSTQ3MTNfVFhfUkRTX1BTX01FU1NBR0VfQ09VTlQJMHgyQzA1CisjZGVmaW5lIFNJNDcxM19UWF9SRFNfUFNfQUYJCTB4MkMwNgorI2RlZmluZSBTSTQ3MTNfVFhfUkRTX0ZJRk9fU0laRQkJMHgyQzA3CisKKyNkZWZpbmUgUFJFRU1QSEFTSVNfVVNBCQkJNzUKKyNkZWZpbmUgUFJFRU1QSEFTSVNfRVUJCQk1MAorI2RlZmluZSBQUkVFTVBIQVNJU19ESVNBQkxFRAkJMAorI2RlZmluZSBGTVBFX1VTQQkJCTB4MDAKKyNkZWZpbmUgRk1QRV9FVQkJCQkweDAxCisjZGVmaW5lIEZNUEVfRElTQUJMRUQJCQkweDAyCisKKyNkZWZpbmUgUE9XRVJfVVAJCQkweDAxCisjZGVmaW5lIFBPV0VSX0RPV04JCQkweDAwCisKK3N0cnVjdCByZHNfaW5mbyB7CisJdTMyIHBpOworI2RlZmluZSBNQVhfUkRTX1BUWQkJCTMxCisJdTMyIHB0eTsKKyNkZWZpbmUgTUFYX1JEU19ERVZJQVRJT04JCTkwMDAwCisJdTMyIGRldmlhdGlvbjsKKy8qCisgKiBQU05BTUUgaXMga25vd24gdG8gYmUgZGVmaW5lZCBhcyA4IGNoYXJhY3RlciBzaXplZCAoUkRTIFNwZWMpLgorICogSG93ZXZlciwgdGhlcmUgaXMgcmVjZWl2ZXJzIHdoaWNoIHNjcm9sbCBQU05BTUUgOHhOIHNpemVkLgorICovCisjZGVmaW5lIE1BWF9SRFNfUFNfTkFNRQkJCTk2CisJdTggcHNfbmFtZVtNQVhfUkRTX1BTX05BTUUgKyAxXTsKKy8qCisgKiBNQVhfUkRTX1JBRElPX1RFWFQgaXMga25vd24gdG8gYmUgZGVmaW5lZCBhcyAzMiAoMkEgZ3JvdXApIG9yIDY0ICgyQiBncm91cCkKKyAqIGNoYXJhY3RlciBzaXplZCAoUkRTIFNwZWMpLgorICogSG93ZXZlciwgdGhlcmUgaXMgcmVjZWl2ZXJzIHdoaWNoIHNjcm9sbCB0aGVtIGFzIHdlbGwuCisgKi8KKyNkZWZpbmUgTUFYX1JEU19SQURJT19URVhUCQkzODQKKwl1OCByYWRpb190ZXh0W01BWF9SRFNfUkFESU9fVEVYVCArIDFdOworCXUzMiBlbmFibGVkOworfTsKKworc3RydWN0IGxpbWl0ZXJfaW5mbyB7CisjZGVmaW5lIE1BWF9MSU1JVEVSX1JFTEVBU0VfVElNRQkxMDIzOTAKKwl1MzIgcmVsZWFzZV90aW1lOworI2RlZmluZSBNQVhfTElNSVRFUl9ERVZJQVRJT04JCTkwMDAwCisJdTMyIGRldmlhdGlvbjsKKwl1MzIgZW5hYmxlZDsKK307CisKK3N0cnVjdCBwaWxvdF9pbmZvIHsKKyNkZWZpbmUgTUFYX1BJTE9UX0RFVklBVElPTgkJOTAwMDAKKwl1MzIgZGV2aWF0aW9uOworI2RlZmluZSBNQVhfUElMT1RfRlJFUVVFTkNZCQkxOTAwMAorCXUzMiBmcmVxdWVuY3k7CisJdTMyIGVuYWJsZWQ7Cit9OworCitzdHJ1Y3QgYWNvbXBfaW5mbyB7CisjZGVmaW5lIE1BWF9BQ09NUF9SRUxFQVNFX1RJTUUJCTEwMDAwMDAKKwl1MzIgcmVsZWFzZV90aW1lOworI2RlZmluZSBNQVhfQUNPTVBfQVRUQUNLX1RJTUUJCTUwMDAKKwl1MzIgYXR0YWNrX3RpbWU7CisjZGVmaW5lIE1BWF9BQ09NUF9USFJFU0hPTEQJCTAKKyNkZWZpbmUgTUlOX0FDT01QX1RIUkVTSE9MRAkJKC00MCkKKwlzMzIgdGhyZXNob2xkOworI2RlZmluZSBNQVhfQUNPTVBfR0FJTgkJCTIwCisJdTMyIGdhaW47CisJdTMyIGVuYWJsZWQ7Cit9OworCisvKgorICogc2k0NzEzX2RldmljZSAtIHByaXZhdGUgZGF0YQorICovCitzdHJ1Y3Qgc2k0NzEzX2RldmljZSB7CisJLyogdjRsMl9zdWJkZXYgYW5kIGkyYyByZWZlcmVuY2UgKHY0bDJfc3ViZGV2IHByaXYgZGF0YSkgKi8KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJLyogcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgKi8KKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJc3RydWN0IGNvbXBsZXRpb24gd29yazsKKwlzdHJ1Y3Qgc2k0NzEzX3BsYXRmb3JtX2RhdGEgKnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHJkc19pbmZvIHJkc19pbmZvOworCXN0cnVjdCBsaW1pdGVyX2luZm8gbGltaXRlcl9pbmZvOworCXN0cnVjdCBwaWxvdF9pbmZvIHBpbG90X2luZm87CisJc3RydWN0IGFjb21wX2luZm8gYWNvbXBfaW5mbzsKKwl1MzIgZnJlcXVlbmN5OworCXUzMiBwcmVlbXBoYXNpczsKKwl1MzIgbXV0ZTsKKwl1MzIgcG93ZXJfbGV2ZWw7CisJdTMyIHBvd2VyX3N0YXRlOworCXUzMiBhbnRlbm5hX2NhcGFjaXRvcjsKKwl1MzIgc3RlcmVvOworCXUzMiB0dW5lX3JubDsKK307CisjZW5kaWYgLyogaWZuZGVmIFNJNDcxM19JMkNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IGRjZjlmYTkuLjFkNzU4NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKQEAgLTIwMyw5ICsyMDMsOSBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNzNTNsMzJhLgogCiBjb25maWcgVklERU9fTTUyNzkwCi0gICAgICAgdHJpc3RhdGUgIk1pdHN1YmlzaGkgTTUyNzkwIEEvViBzd2l0Y2giCi0gICAgICAgZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwotICAgICAgIC0tLWhlbHAtLS0KKwl0cmlzdGF0ZSAiTWl0c3ViaXNoaSBNNTI3OTAgQS9WIHN3aXRjaCIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCisJLS0taGVscC0tLQogCSBTdXBwb3J0IGZvciB0aGUgTWl0c3ViaXNoaSBNNTI3OTAgQS9WIHN3aXRjaC4KIAogCSBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYwppbmRleCAxNGJhZmZjLi5iOGE0YjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWR2Yi5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZGV2LT51cmJfc3RyZWFtaW5nKSB7Ci0JCWRwcmludGsoMiwgIiVzOiBpc28geGZlciBhbHJlYWR5IHJ1bm5pbmchXG4iLCBfX2Z1bmNfXyk7CisJCWRwcmludGsoMiwgIiVzOiBidWxrIHhmZXIgYWxyZWFkeSBydW5uaW5nIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1pMmMuYwppbmRleCAxM2U0OTQzLi5jYmRiNjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWkyYy5jCkBAIC0zMjAsNyArMzIwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgYXUwODI4X2kyY19hZGFwX3RlbXBsYXRlID0gewogCS5uYW1lICAgICAgICAgICAgICA9IERSSVZFUl9OQU1FLAogCS5vd25lciAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS5pZCAgICAgICAgICAgICAgICA9IEkyQ19IV19CX0FVMDgyOCwKIAkuYWxnbyAgICAgICAgICAgICAgPSAmYXUwODI4X2kyY19hbGdvX3RlbXBsYXRlLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwppbmRleCBjYTY1NThjLi5iNDIyNTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwpAQCAtMTI3NCw2ICsxMjc0LDcgQEAKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkuaGFzX3JlbW90ZQk9IDEsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDNjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCA4Y2M2ZGQyLi45MzlkMWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC0yNjUyLDYgKzI2NTIsOCBAQAogCQlWNEwyX0NBUF9WQklfQ0FQVFVSRSB8CiAJCVY0TDJfQ0FQX1JFQURXUklURSB8CiAJCVY0TDJfQ0FQX1NUUkVBTUlORzsKKwlpZiAoYnR2LT5oYXNfc2FhNjU4OCkKKwkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfUkRTX0NBUFRVUkU7CiAJaWYgKG5vX292ZXJsYXkgPD0gMCkKIAkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfVklERU9fT1ZFUkxBWTsKIApAQCAtNDU5MywxNCArNDU5NSwxMCBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBidHR2X3BjaV90YmxbXSA9IHsKLQl7UENJX1ZFTkRPUl9JRF9CUk9PS1RSRUUsIFBDSV9ERVZJQ0VfSURfQlQ4NDgsCi0JIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAotCXtQQ0lfVkVORE9SX0lEX0JST09LVFJFRSwgUENJX0RFVklDRV9JRF9CVDg0OSwKLQkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCi0Je1BDSV9WRU5ET1JfSURfQlJPT0tUUkVFLCBQQ0lfREVWSUNFX0lEX0JUODc4LAotCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKLQl7UENJX1ZFTkRPUl9JRF9CUk9PS1RSRUUsIFBDSV9ERVZJQ0VfSURfQlQ4NzksCi0JIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkRFVklDRShCUk9PS1RSRUUsIFBDSV9ERVZJQ0VfSURfQlQ4NDgpLCAwfSwKKwl7UENJX1ZERVZJQ0UoQlJPT0tUUkVFLCBQQ0lfREVWSUNFX0lEX0JUODQ5KSwgMH0sCisJe1BDSV9WREVWSUNFKEJST09LVFJFRSwgUENJX0RFVklDRV9JRF9CVDg3OCksIDB9LAorCXtQQ0lfVkRFVklDRShCUk9PS1RSRUUsIFBDSV9ERVZJQ0VfSURfQlQ4NzkpLCAwfSwKIAl7MCx9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMKaW5kZXggZWJkMWVlOS4uYmVkYTM2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYwpAQCAtMzUyLDcgKzM1Miw2IEBACiAJCS8qIGJ0ODc4ICovCiAJCXN0cmxjcHkoYnR2LT5jLmkyY19hZGFwLm5hbWUsICJidDg3OCIsCiAJCQlzaXplb2YoYnR2LT5jLmkyY19hZGFwLm5hbWUpKTsKLQkJYnR2LT5jLmkyY19hZGFwLmlkID0gSTJDX0hXX0JfQlQ4NDg7CS8qIEZJWE1FICovCiAJCWJ0di0+Yy5pMmNfYWRhcC5hbGdvID0gJmJ0dHZfYWxnbzsKIAl9IGVsc2UgewogCQkvKiBidDg0OCAqLwpAQCAtMzYyLDcgKzM2MSw2IEBACiAKIAkJc3RybGNweShidHYtPmMuaTJjX2FkYXAubmFtZSwgImJ0dHYiLAogCQkJc2l6ZW9mKGJ0di0+Yy5pMmNfYWRhcC5uYW1lKSk7Ci0JCWJ0di0+Yy5pMmNfYWRhcC5pZCA9IEkyQ19IV19CX0JUODQ4OwogCQltZW1jcHkoJmJ0di0+aTJjX2FsZ28sICZidHR2X2kyY19hbGdvX2JpdF90ZW1wbGF0ZSwKIAkJICAgICAgIHNpemVvZihidHR2X2kyY19hbGdvX2JpdF90ZW1wbGF0ZSkpOwogCQlidHYtPmkyY19hbGdvLnVkZWxheSA9IGkyY191ZGVsYXk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jCmluZGV4IDJmMjg5ZDkuLmViZDUxYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIGludCBidHR2X2lucHV0X2luaXQoc3RydWN0IGJ0dHYgKmJ0dikKIHsKIAlzdHJ1Y3QgY2FyZF9pciAqaXI7Ci0JSVJfS0VZVEFCX1RZUEUgKmlyX2NvZGVzID0gTlVMTDsKKwlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzID0gTlVMTDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJaW50IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOwogCWludCBlcnIgPSAtRU5PTUVNOwpAQCAtMjYzLDcgKzI2Myw3IEBACiAJY2FzZSBCVFRWX0JPQVJEX0FWRVJNRURJQToKIAljYXNlIEJUVFZfQk9BUkRfQVZQSE9ORTk4OgogCWNhc2UgQlRUVl9CT0FSRF9BVkVSTUVESUE5ODoKLQkJaXJfY29kZXMgICAgICAgICA9IGlyX2NvZGVzX2F2ZXJtZWRpYTsKKwkJaXJfY29kZXMgICAgICAgICA9ICZpcl9jb2Rlc19hdmVybWVkaWFfdGFibGU7CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweGY4ODAwMDsKIAkJaXItPm1hc2tfa2V5ZG93biA9IDB4MDEwMDAwOwogCQlpci0+cG9sbGluZyAgICAgID0gNTA7IC8vIG1zCkBAIC0yNzEsMTQgKzI3MSwxNCBAQAogCiAJY2FzZSBCVFRWX0JPQVJEX0FWRFZCVF83NjE6CiAJY2FzZSBCVFRWX0JPQVJEX0FWRFZCVF83NzE6Ci0JCWlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc19hdmVybWVkaWFfZHZidDsKKwkJaXJfY29kZXMgICAgICAgICA9ICZpcl9jb2Rlc19hdmVybWVkaWFfZHZidF90YWJsZTsKIAkJaXItPm1hc2tfa2V5Y29kZSA9IDB4MGYwMGMwOwogCQlpci0+bWFza19rZXlkb3duID0gMHgwMDAwMjA7CiAJCWlyLT5wb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKIAkJYnJlYWs7CiAKIAljYXNlIEJUVFZfQk9BUkRfUFhFTFZXUExUVlBBSzoKLQkJaXJfY29kZXMgICAgICAgICA9IGlyX2NvZGVzX3BpeGVsdmlldzsKKwkJaXJfY29kZXMgICAgICAgICA9ICZpcl9jb2Rlc19waXhlbHZpZXdfdGFibGU7CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweDAwM2UwMDsKIAkJaXItPm1hc2tfa2V5dXAgICA9IDB4MDEwMDAwOwogCQlpci0+cG9sbGluZyAgICAgID0gNTA7IC8vIG1zCkBAIC0yODYsNTQgKzI4Niw1NSBAQAogCWNhc2UgQlRUVl9CT0FSRF9QVl9NNDkwMDoKIAljYXNlIEJUVFZfQk9BUkRfUFZfQlQ4NzhQXzlCOgogCWNhc2UgQlRUVl9CT0FSRF9QVl9CVDg3OFBfUExVUzoKLQkJaXJfY29kZXMgICAgICAgICA9IGlyX2NvZGVzX3BpeGVsdmlldzsKKwkJaXJfY29kZXMgICAgICAgICA9ICZpcl9jb2Rlc19waXhlbHZpZXdfdGFibGU7CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweDAwMWYwMDsKIAkJaXItPm1hc2tfa2V5dXAgICA9IDB4MDA4MDAwOwogCQlpci0+cG9sbGluZyAgICAgID0gNTA7IC8vIG1zCiAJCWJyZWFrOwogCiAJY2FzZSBCVFRWX0JPQVJEX1dJTkZBU1QyMDAwOgotCQlpcl9jb2RlcyAgICAgICAgID0gaXJfY29kZXNfd2luZmFzdDsKKwkJaXJfY29kZXMgICAgICAgICA9ICZpcl9jb2Rlc193aW5mYXN0X3RhYmxlOwogCQlpci0+bWFza19rZXljb2RlID0gMHgxZjg7CiAJCWJyZWFrOwogCWNhc2UgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYxOgogCWNhc2UgQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYzOgotCQlpcl9jb2RlcyAgICAgICAgID0gaXJfY29kZXNfd2luZmFzdDsKKwkJaXJfY29kZXMgICAgICAgICA9ICZpcl9jb2Rlc193aW5mYXN0X3RhYmxlOwogCQlpci0+bWFza19rZXljb2RlID0gMHgwMDA4ZTAwMDsKIAkJaXItPm1hc2tfa2V5ZG93biA9IDB4MDAyMDAwMDA7CiAJCWJyZWFrOwogCWNhc2UgQlRUVl9CT0FSRF9BUEFDX1ZJRVdDT01QOgotCQlpcl9jb2RlcyAgICAgICAgID0gaXJfY29kZXNfYXBhY192aWV3Y29tcDsKKwkJaXJfY29kZXMgICAgICAgICA9ICZpcl9jb2Rlc19hcGFjX3ZpZXdjb21wX3RhYmxlOwogCQlpci0+bWFza19rZXljb2RlID0gMHgwMDFmMDA7CiAJCWlyLT5tYXNrX2tleXVwICAgPSAweDAwODAwMDsKIAkJaXItPnBvbGxpbmcgICAgICA9IDUwOyAvLyBtcwogCQlicmVhazsKKwljYXNlIEJUVFZfQk9BUkRfQVNLRVlfQ1BIMDNYOgogCWNhc2UgQlRUVl9CT0FSRF9DT05DRVBUUk9OSUNfQ1RWRk1JMjoKIAljYXNlIEJUVFZfQk9BUkRfQ09OVFZGTUk6Ci0JCWlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc19waXhlbHZpZXc7CisJCWlyX2NvZGVzICAgICAgICAgPSAmaXJfY29kZXNfcGl4ZWx2aWV3X3RhYmxlOwogCQlpci0+bWFza19rZXljb2RlID0gMHgwMDFGMDA7CiAJCWlyLT5tYXNrX2tleXVwICAgPSAweDAwNjAwMDsKIAkJaXItPnBvbGxpbmcgICAgICA9IDUwOyAvLyBtcwogCQlicmVhazsKIAljYXNlIEJUVFZfQk9BUkRfTkVCVUxBX0RJR0lUVjoKLQkJaXJfY29kZXMgPSBpcl9jb2Rlc19uZWJ1bGE7CisJCWlyX2NvZGVzID0gJmlyX2NvZGVzX25lYnVsYV90YWJsZTsKIAkJYnR2LT5jdXN0b21faXJxID0gYnR0dl9yYzVfaXJxOwogCQlpci0+cmM1X2dwaW8gPSAxOwogCQlicmVhazsKIAljYXNlIEJUVFZfQk9BUkRfTUFDSFRWX01BR0lDVFY6Ci0JCWlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc19hcGFjX3ZpZXdjb21wOworCQlpcl9jb2RlcyAgICAgICAgID0gJmlyX2NvZGVzX2FwYWNfdmlld2NvbXBfdGFibGU7CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweDAwMUYwMDsKIAkJaXItPm1hc2tfa2V5dXAgICA9IDB4MDA0MDAwOwogCQlpci0+cG9sbGluZyAgICAgID0gNTA7IC8qIG1zICovCiAJCWJyZWFrOwogCWNhc2UgQlRUVl9CT0FSRF9LT1pVTUlfS1RWXzAxQzoKLQkJaXJfY29kZXMgICAgICAgICA9IGlyX2NvZGVzX3BjdHZfc2VkbmE7CisJCWlyX2NvZGVzICAgICAgICAgPSAmaXJfY29kZXNfcGN0dl9zZWRuYV90YWJsZTsKIAkJaXItPm1hc2tfa2V5Y29kZSA9IDB4MDAxZjAwOwogCQlpci0+bWFza19rZXl1cCAgID0gMHgwMDYwMDA7CiAJCWlyLT5wb2xsaW5nICAgICAgPSA1MDsgLyogbXMgKi8KIAkJYnJlYWs7CiAJY2FzZSBCVFRWX0JPQVJEX0VOTFRWX0ZNXzI6Ci0JCWlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc19lbmNvcmVfZW5sdHYyOworCQlpcl9jb2RlcyAgICAgICAgID0gJmlyX2NvZGVzX2VuY29yZV9lbmx0djJfdGFibGU7CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweDAwZmQwMDsKIAkJaXItPm1hc2tfa2V5dXAgICA9IDB4MDAwMDgwOwogCQlpci0+cG9sbGluZyAgICAgID0gMTsgLyogbXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCmluZGV4IGM0ZDE4MWQuLjljMTQ5YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwpAQCAtNDkwLDcgKzQ5MCw2IEBACiAJaW50IHJldDsKIAogCWNhZmVfc21idXNfZW5hYmxlX2lycShjYW0pOwotCWFkYXAtPmlkID0gSTJDX0hXX1NNQlVTX0NBRkU7CiAJYWRhcC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlhZGFwLT5hbGdvID0gJmNhZmVfc21idXNfYWxnbzsKIAlzdHJjcHkoYWRhcC0+bmFtZSwgImNhZmVfY2NpYyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKaW5kZXggMzZmMmQ3Ni4uZjExZTQ3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCkBAIC01Niw3ICs1Niw4IEBACiAJLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXXzQxOF9BViwKIAkuaHdfbXV4ZXIgPSBDWDE4X0hXX0NTNTM0NSwKIAkuaHdfYWxsID0gQ1gxOF9IV19UVkVFUFJPTSB8IENYMThfSFdfNDE4X0FWIHwgQ1gxOF9IV19UVU5FUiB8Ci0JCSAgQ1gxOF9IV19DUzUzNDUgfCBDWDE4X0hXX0RWQiB8IENYMThfSFdfR1BJT19SRVNFVF9DVFJMLAorCQkgIENYMThfSFdfQ1M1MzQ1IHwgQ1gxOF9IV19EVkIgfCBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCB8CisJCSAgQ1gxOF9IV19aOEYwODExX0lSX0hBVVAsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEU3IH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsIENYMThfQVZfU1ZJREVPMSAgICB9LApAQCAtMTAyLDcgKzEwMyw4IEBACiAJLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXXzQxOF9BViwKIAkuaHdfbXV4ZXIgPSBDWDE4X0hXX0NTNTM0NSwKIAkuaHdfYWxsID0gQ1gxOF9IV19UVkVFUFJPTSB8IENYMThfSFdfNDE4X0FWIHwgQ1gxOF9IV19UVU5FUiB8Ci0JCSAgQ1gxOF9IV19DUzUzNDUgfCBDWDE4X0hXX0RWQiB8IENYMThfSFdfR1BJT19SRVNFVF9DVFJMLAorCQkgIENYMThfSFdfQ1M1MzQ1IHwgQ1gxOF9IV19EVkIgfCBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCB8CisJCSAgQ1gxOF9IV19aOEYwODExX0lSX0hBVVAsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEU3IH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsIENYMThfQVZfU1ZJREVPMSAgICB9LApAQCAtMjA0LDcgKzIwNiw3IEBACiAJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKIAkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfNDE4X0FWLAogCS5od19tdXhlciA9IENYMThfSFdfR1BJT19NVVgsCi0JLmh3X2FsbCA9IENYMThfSFdfNDE4X0FWIHwgQ1gxOF9IV19UVU5FUiB8CisJLmh3X2FsbCA9IENYMThfSFdfVFZFRVBST00gfCBDWDE4X0hXXzQxOF9BViB8IENYMThfSFdfVFVORVIgfAogCQkgIENYMThfSFdfR1BJT19NVVggfCBDWDE4X0hXX0RWQiB8IENYMThfSFdfR1BJT19SRVNFVF9DVFJMLAogCS52aWRlb19pbnB1dHMgPSB7CiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1ZJRF9UVU5FUiwgIDAsIENYMThfQVZfQ09NUE9TSVRFMiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmgKaW5kZXggM2M1NTJiNi4uNDQ0ZTNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5oCkBAIC0yMiwxMyArMjIsMTcgQEAKICAqLwogCiAvKiBoYXJkd2FyZSBmbGFncyAqLwotI2RlZmluZSBDWDE4X0hXX1RVTkVSCQkoMSA8PCAwKQotI2RlZmluZSBDWDE4X0hXX1RWRUVQUk9NCSgxIDw8IDEpCi0jZGVmaW5lIENYMThfSFdfQ1M1MzQ1CQkoMSA8PCAyKQotI2RlZmluZSBDWDE4X0hXX0RWQgkJKDEgPDwgMykKLSNkZWZpbmUgQ1gxOF9IV180MThfQVYJCSgxIDw8IDQpCi0jZGVmaW5lIENYMThfSFdfR1BJT19NVVgJKDEgPDwgNSkKLSNkZWZpbmUgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwJKDEgPDwgNikKKyNkZWZpbmUgQ1gxOF9IV19UVU5FUgkJCSgxIDw8IDApCisjZGVmaW5lIENYMThfSFdfVFZFRVBST00JCSgxIDw8IDEpCisjZGVmaW5lIENYMThfSFdfQ1M1MzQ1CQkJKDEgPDwgMikKKyNkZWZpbmUgQ1gxOF9IV19EVkIJCQkoMSA8PCAzKQorI2RlZmluZSBDWDE4X0hXXzQxOF9BVgkJCSgxIDw8IDQpCisjZGVmaW5lIENYMThfSFdfR1BJT19NVVgJCSgxIDw8IDUpCisjZGVmaW5lIENYMThfSFdfR1BJT19SRVNFVF9DVFJMCQkoMSA8PCA2KQorI2RlZmluZSBDWDE4X0hXX1o4RjA4MTFfSVJfVFhfSEFVUAkoMSA8PCA3KQorI2RlZmluZSBDWDE4X0hXX1o4RjA4MTFfSVJfUlhfSEFVUAkoMSA8PCA4KQorI2RlZmluZSBDWDE4X0hXX1o4RjA4MTFfSVJfSEFVUAkoQ1gxOF9IV19aOEYwODExX0lSX1JYX0hBVVAgfCBcCisJCQkJIENYMThfSFdfWjhGMDgxMV9JUl9UWF9IQVVQKQogCiAvKiB2aWRlbyBpbnB1dHMgKi8KICNkZWZpbmUJQ1gxOF9DQVJEX0lOUFVUX1ZJRF9UVU5FUgkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jCmluZGV4IDkyMDI2ZTgyLi5kZDAyMjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwpAQCAtMjY4LDYgKzI2OCwyMCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgY3gxOF9lZXByb21fZHVtcChzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGNoYXIgKmVlZGF0YSwgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCUNYMThfSU5GTygiZWVwcm9tIGR1bXA6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKDAgPT0gKGkgJSAxNikpCisJCQlDWDE4X0lORk8oImVlcHJvbSAlMDJ4OiIsIGkpOworCQlwcmludGsoS0VSTl9DT05UICIgJTAyeCIsIGVlZGF0YVtpXSk7CisJCWlmICgxNSA9PSAoaSAlIDE2KSkKKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJfQorfQorCiAvKiBIYXVwcGF1Z2UgY2FyZD8gZ2V0IHZhbHVlcyBmcm9tIHR2ZWVwcm9tICovCiB2b2lkIGN4MThfcmVhZF9lZXByb20oc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdHZlZXByb20gKnR2KQogewpAQCAtMjc5LDggKzI5MywyNiBAQAogCWMuYWRhcHRlciA9ICZjeC0+aTJjX2FkYXBbMF07CiAJYy5hZGRyID0gMHhBMCA+PiAxOwogCi0JdHZlZXByb21fcmVhZCgmYywgZWVkYXRhLCBzaXplb2YoZWVkYXRhKSk7Ci0JdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmYywgdHYsIGVlZGF0YSk7CisJbWVtc2V0KHR2LCAwLCBzaXplb2YoKnR2KSk7CisJaWYgKHR2ZWVwcm9tX3JlYWQoJmMsIGVlZGF0YSwgc2l6ZW9mKGVlZGF0YSkpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGN4LT5jYXJkLT50eXBlKSB7CisJY2FzZSBDWDE4X0NBUkRfSFZSXzE2MDBfRVNNVDoKKwljYXNlIENYMThfQ0FSRF9IVlJfMTYwMF9TQU1TVU5HOgorCQl0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9nKCZjLCB0diwgZWVkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBDWDE4X0NBUkRfWVVBTl9NUEM3MTg6CisJCXR2LT5tb2RlbCA9IDB4NzE4OworCQljeDE4X2VlcHJvbV9kdW1wKGN4LCBlZWRhdGEsIHNpemVvZihlZWRhdGEpKTsKKwkJQ1gxOF9JTkZPKCJlZXByb20gUENJIElEOiAlMDJ4JTAyeDolMDJ4JTAyeFxuIiwKKwkJCSAgZWVkYXRhWzJdLCBlZWRhdGFbMV0sIGVlZGF0YVs0XSwgZWVkYXRhWzNdKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdHYtPm1vZGVsID0gMHhmZmZmZmZmZjsKKwkJY3gxOF9lZXByb21fZHVtcChjeCwgZWVkYXRhLCBzaXplb2YoZWVkYXRhKSk7CisJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIHZvaWQgY3gxOF9wcm9jZXNzX2VlcHJvbShzdHJ1Y3QgY3gxOCAqY3gpCkBAIC0yOTgsNiArMzMwLDExIEBACiAJY2FzZSA3NDAwMCAuLi4gNzQ5OTk6CiAJCWN4LT5jYXJkID0gY3gxOF9nZXRfY2FyZChDWDE4X0NBUkRfSFZSXzE2MDBfRVNNVCk7CiAJCWJyZWFrOworCWNhc2UgMHg3MTg6CisJCXJldHVybjsKKwljYXNlIDB4ZmZmZmZmZmY6CisJCUNYMThfSU5GTygiVW5rbm93biBFRVBST00gZW5jb2RpbmdcbiIpOworCQlyZXR1cm47CiAJY2FzZSAwOgogCQlDWDE4X0VSUigiSW52YWxpZCBFRVBST01cbiIpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKaW5kZXggMjk5NjljMS4uMDRkOWMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYwpAQCAtNjkwLDcgKzY5MCw3IEBACiAJaW50IHJlczsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXYgPSB2aWRlb19kZXZkYXRhKGZpbHApOwogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2Rldik7Ci0Jc3RydWN0IGN4MTggKmN4ID0gcy0+Y3g7OworCXN0cnVjdCBjeDE4ICpjeCA9IHMtPmN4OwogCiAJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAlpZiAoY3gxOF9pbml0X29uX2ZpcnN0X29wZW4oY3gpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jCmluZGV4IDg1OTFlNGYuLmRhMzk1ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiY3gxOC1ncGlvLmgiCiAjaW5jbHVkZSAiY3gxOC1pMmMuaCIKICNpbmNsdWRlICJjeDE4LWlycS5oIgorI2luY2x1ZGUgPG1lZGlhL2lyLWtiZC1pMmMuaD4KIAogI2RlZmluZSBDWDE4X1JFR19JMkNfMV9XUiAgIDB4ZjE1MDAwCiAjZGVmaW5lIENYMThfUkVHX0kyQ18xX1JEICAgMHhmMTUwMDgKQEAgLTQwLDE2ICs0MSwyMCBAQAogI2RlZmluZSBHRVRTRExfQklUICAgICAgMHgwMDA4CiAKICNkZWZpbmUgQ1gxOF9DUzUzNDVfSTJDX0FERFIJCTB4NGMKKyNkZWZpbmUgQ1gxOF9aOEYwODExX0lSX1RYX0kyQ19BRERSCTB4NzAKKyNkZWZpbmUgQ1gxOF9aOEYwODExX0lSX1JYX0kyQ19BRERSCTB4NzEKIAogLyogVGhpcyBhcnJheSBzaG91bGQgbWF0Y2ggdGhlIENYMThfSFdfIGRlZmluZXMgKi8KIHN0YXRpYyBjb25zdCB1OCBod19hZGRyc1tdID0gewotCTAsCQkJLyogQ1gxOF9IV19UVU5FUiAqLwotCTAsCQkJLyogQ1gxOF9IV19UVkVFUFJPTSAqLwotCUNYMThfQ1M1MzQ1X0kyQ19BRERSLAkvKiBDWDE4X0hXX0NTNTM0NSAqLwotCTAsCQkJLyogQ1gxOF9IV19EVkIgKi8KLQkwLAkJCS8qIENYMThfSFdfNDE4X0FWICovCi0JMCwJCQkvKiBDWDE4X0hXX0dQSU9fTVVYICovCi0JMCwJCQkvKiBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCAqLworCTAsCQkJCS8qIENYMThfSFdfVFVORVIgKi8KKwkwLAkJCQkvKiBDWDE4X0hXX1RWRUVQUk9NICovCisJQ1gxOF9DUzUzNDVfSTJDX0FERFIsCQkvKiBDWDE4X0hXX0NTNTM0NSAqLworCTAsCQkJCS8qIENYMThfSFdfRFZCICovCisJMCwJCQkJLyogQ1gxOF9IV180MThfQVYgKi8KKwkwLAkJCQkvKiBDWDE4X0hXX0dQSU9fTVVYICovCisJMCwJCQkJLyogQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwgKi8KKwlDWDE4X1o4RjA4MTFfSVJfVFhfSTJDX0FERFIsCS8qIENYMThfSFdfWjhGMDgxMV9JUl9UWF9IQVVQICovCisJQ1gxOF9aOEYwODExX0lSX1JYX0kyQ19BRERSLAkvKiBDWDE4X0hXX1o4RjA4MTFfSVJfUlhfSEFVUCAqLwogfTsKIAogLyogVGhpcyBhcnJheSBzaG91bGQgbWF0Y2ggdGhlIENYMThfSFdfIGRlZmluZXMgKi8KQEAgLTYyLDYgKzY3LDggQEAKIAkwLAkvKiBDWDE4X0hXXzQxOF9BViAqLwogCTAsCS8qIENYMThfSFdfR1BJT19NVVggKi8KIAkwLAkvKiBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCAqLworCTAsCS8qIENYMThfSFdfWjhGMDgxMV9JUl9UWF9IQVVQICovCisJMCwJLyogQ1gxOF9IV19aOEYwODExX0lSX1JYX0hBVVAgKi8KIH07CiAKIC8qIFRoaXMgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZSBDWDE4X0hXXyBkZWZpbmVzICovCkBAIC03Myw2ICs4MCw4IEBACiAJTlVMTCwJCS8qIENYMThfSFdfNDE4X0FWICovCiAJTlVMTCwJCS8qIENYMThfSFdfR1BJT19NVVggKi8KIAlOVUxMLAkJLyogQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwgKi8KKwlOVUxMLAkJLyogQ1gxOF9IV19aOEYwODExX0lSX1RYX0hBVVAgKi8KKwlOVUxMLAkJLyogQ1gxOF9IV19aOEYwODExX0lSX1JYX0hBVVAgKi8KIH07CiAKIC8qIFRoaXMgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZSBDWDE4X0hXXyBkZWZpbmVzICovCkBAIC04NCw4ICs5MywzOCBAQAogCSJjeDIzNDE4X0FWIiwKIAkiZ3Bpb19tdXgiLAogCSJncGlvX3Jlc2V0X2N0cmwiLAorCSJpcl90eF96OGYwODExX2hhdXAiLAorCSJpcl9yeF96OGYwODExX2hhdXAiLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhIHo4ZjA4MTFfaXJfaW5pdF9kYXRhID0geworCS5pcl9jb2RlcyA9ICZpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3X3RhYmxlLAorCS5pbnRlcm5hbF9nZXRfa2V5X2Z1bmMgPSBJUl9LQkRfR0VUX0tFWV9IQVVQX1hWUiwKKwkudHlwZSA9IElSX1RZUEVfUkM1LAorCS5uYW1lID0gIkNYMjM0MTggWjhGMDgxMSBIYXVwcGF1Z2UiLAorfTsKKworc3RhdGljIGludCBjeDE4X2kyY19uZXdfaXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCB1MzIgaHcsIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkgICB1OCBhZGRyKQoreworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCXVuc2lnbmVkIHNob3J0IGFkZHJfbGlzdFsyXSA9IHsgYWRkciwgSTJDX0NMSUVOVF9FTkQgfTsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOworCXN0cmxjcHkoaW5mby50eXBlLCB0eXBlLCBJMkNfTkFNRV9TSVpFKTsKKworCS8qIE91ciBkZWZhdWx0IGluZm9ybWF0aW9uIGZvciBpci1rYmQtaTJjLmMgdG8gdXNlICovCisJc3dpdGNoIChodykgeworCWNhc2UgQ1gxOF9IV19aOEYwODExX0lSX1JYX0hBVVA6CisJCWluZm8ucGxhdGZvcm1fZGF0YSA9ICZ6OGYwODExX2lyX2luaXRfZGF0YTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGkyY19uZXdfcHJvYmVkX2RldmljZShhZGFwLCAmaW5mbywgYWRkcl9saXN0KSA9PSBOVUxMID8gLTEgOiAwOworfQorCiBpbnQgY3gxOF9pMmNfcmVnaXN0ZXIoc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpZHgpCiB7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKQEAgLTExNSwxMSArMTU0LDE0IEBACiAJCXJldHVybiBzZCAhPSBOVUxMID8gMCA6IC0xOwogCX0KIAorCWlmIChodyAmIENYMThfSFdfWjhGMDgxMV9JUl9IQVVQKQorCQlyZXR1cm4gY3gxOF9pMmNfbmV3X2lyKGFkYXAsIGh3LCB0eXBlLCBod19hZGRyc1tpZHhdKTsKKwogCS8qIElzIGl0IG5vdCBhbiBJMkMgZGV2aWNlIG9yIG9uZSB3ZSBkbyBub3Qgd2lzaCB0byByZWdpc3Rlcj8gKi8KIAlpZiAoIWh3X2FkZHJzW2lkeF0pCiAJCXJldHVybiAtMTsKIAotCS8qIEl0J3MgYW4gSTJDIGRldmljZSBvdGhlciB0aGFuIGFuIGFuYWxvZyB0dW5lciAqLworCS8qIEl0J3MgYW4gSTJDIGRldmljZSBvdGhlciB0aGFuIGFuIGFuYWxvZyB0dW5lciBvciBJUiBjaGlwICovCiAJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZjeC0+djRsMl9kZXYsIGFkYXAsIG1vZCwgdHlwZSwgaHdfYWRkcnNbaWR4XSk7CiAJaWYgKHNkICE9IE5VTEwpCiAJCXNkLT5ncnBfaWQgPSBodzsKQEAgLTE5MCw3ICsyMzIsNiBAQAogLyogdGVtcGxhdGUgZm9yIGkyYy1iaXQtYWxnbyAqLwogc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBjeDE4X2kyY19hZGFwX3RlbXBsYXRlID0gewogCS5uYW1lID0gImN4MTggaTJjIGRyaXZlciIsCi0JLmlkID0gSTJDX0hXX0JfQ1gyMzQxWCwKIAkuYWxnbyA9IE5VTEwsICAgICAgICAgICAgICAgICAgIC8qIHNldCBieSBpMmMtYWxnby1iaXQgKi8KIAkuYWxnb19kYXRhID0gTlVMTCwgICAgICAgICAgICAgIC8qIGZpbGxlZCBmcm9tIHRlbXBsYXRlICovCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYwppbmRleCBkN2IxOTIxLi5mYzc2ZTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKQEAgLTYwNSw3ICs2MDUsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoaW5wIDwgMCB8fCBpbnAgPj0gY3gtPm5vZl9pbnB1dHMpCisJaWYgKGlucCA+PSBjeC0+bm9mX2lucHV0cykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoaW5wID09IGN4LT5hY3RpdmVfaW5wdXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWNvbmYtcmVnLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1jb25mLXJlZy5oCmluZGV4IGE2ZjM5OGEuLjMxYTg3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWNvbmYtcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtY29uZi1yZWcuaApAQCAtNjAsMTAgKzYwLDEwIEBACiAjZGVmaW5lIFBXUl9SRVNFVE9VVF9FTiAgICAgICAgIDB4MTAwICAvKiBiaXQ4ICovCiAKIGVudW0gQVZfTU9ERXsKLSAgICAgICBQT0xBUklTX0FWTU9ERV9ERUZBVUxUID0gMCwKLSAgICAgICBQT0xBUklTX0FWTU9ERV9ESUdJVEFMID0gMHgxMCwKLSAgICAgICBQT0xBUklTX0FWTU9ERV9BTkFMT0dUX1RWID0gMHgyMCwKLSAgICAgICBQT0xBUklTX0FWTU9ERV9FTlhURVJOQUxfQVYgPSAweDMwLAorCVBPTEFSSVNfQVZNT0RFX0RFRkFVTFQgPSAwLAorCVBPTEFSSVNfQVZNT0RFX0RJR0lUQUwgPSAweDEwLAorCVBPTEFSSVNfQVZNT0RFX0FOQUxPR1RfVFYgPSAweDIwLAorCVBPTEFSSVNfQVZNT0RFX0VOWFRFUk5BTF9BViA9IDB4MzAsCiAKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtaTJjLmMKaW5kZXggMzMyMTlkYy4uNThkOWNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtaTJjLmMKQEAgLTQzMiw3ICs0MzIsNiBAQAogc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBjeDIzMXh4X2FkYXBfdGVtcGxhdGUgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm5hbWUgPSAiY3gyMzF4eCIsCi0JLmlkID0gSTJDX0hXX0JfQ1gyMzFYWCwKIAkuYWxnbyA9ICZjeDIzMXh4X2FsZ28sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtdmlkZW8uYwppbmRleCA2MDliYWU2Li4zNjUwMzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LXZpZGVvLmMKQEAgLTkyMyw4ICs5MjMsOCBAQAogCiAJZi0+Zm10LnBpeC53aWR0aCA9IGRldi0+d2lkdGg7CiAJZi0+Zm10LnBpeC5oZWlnaHQgPSBkZXYtPmhlaWdodDsKLQlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gZGV2LT5mb3JtYXQtPmZvdXJjYzs7Ci0JZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAoZGV2LT53aWR0aCAqIGRldi0+Zm9ybWF0LT5kZXB0aCArIDcpID4+IDM7OworCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBkZXYtPmZvcm1hdC0+Zm91cmNjOworCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gKGRldi0+d2lkdGggKiBkZXYtPmZvcm1hdC0+ZGVwdGggKyA3KSA+PiAzOwogCWYtPmZtdC5waXguc2l6ZWltYWdlID0gZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgKiBkZXYtPmhlaWdodDsKIAlmLT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHguaAppbmRleCBhMGY4MjNhLi42NGUyZGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LmgKQEAgLTI4Miw3ICsyODIsNyBAQAogCiAJc3RydWN0IGN4MjMxeHhfaW5wdXQgaW5wdXRbTUFYX0NYMjMxWFhfSU5QVVRdOwogCXN0cnVjdCBjeDIzMXh4X2lucHV0IHJhZGlvOwotCUlSX0tFWVRBQl9UWVBFICppcl9jb2RlczsKKwlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzOwogfTsKIAogLyogZGV2aWNlIHN0YXRlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5jCmluZGV4IDA4NTgyZTUuLjAzMTYyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMKQEAgLTQ0Myw2ICs0NDMsNyBAQAogCQlnb3RvIGVycjsKIAogCUlOSVRfV09SSygmc3RhdGUtPndvcmssIG5ldHVwX3JlYWRfY2lfc3RhdHVzKTsKKwlzY2hlZHVsZV93b3JrKCZzdGF0ZS0+d29yayk7CiAKIAljaV9kYmdfcHJpbnQoIiVzOiBDSSBpbml0aWFsaXplZCFcbiIsIF9fZnVuY19fKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwppbmRleCAxYTEwNDhiLi42YzNiNTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwpAQCAtNjMwLDYgKzYzMCwzOSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKK3ZvaWQgbWM0MTdfZ3Bpb19zZXQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHUzMiBtYXNrKQoreworCXUzMiB2YWw7CisKKwkvKiBTZXQgdGhlIGdwaW8gdmFsdWUgKi8KKwltYzQxN19yZWdpc3Rlcl9yZWFkKGRldiwgMHg5MDBDLCAmdmFsKTsKKwl2YWwgfD0gKG1hc2sgJiAweDAwMGZmZmYpOworCW1jNDE3X3JlZ2lzdGVyX3dyaXRlKGRldiwgMHg5MDBDLCB2YWwpOworfQorCit2b2lkIG1jNDE3X2dwaW9fY2xlYXIoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHUzMiBtYXNrKQoreworCXUzMiB2YWw7CisKKwkvKiBDbGVhciB0aGUgZ3BpbyB2YWx1ZSAqLworCW1jNDE3X3JlZ2lzdGVyX3JlYWQoZGV2LCAweDkwMEMsICZ2YWwpOworCXZhbCAmPSB+KG1hc2sgJiAweDAwMDBmZmZmKTsKKwltYzQxN19yZWdpc3Rlcl93cml0ZShkZXYsIDB4OTAwQywgdmFsKTsKK30KKwordm9pZCBtYzQxN19ncGlvX2VuYWJsZShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgdTMyIG1hc2ssIGludCBhc291dHB1dCkKK3sKKwl1MzIgdmFsOworCisJLyogRW5hYmxlIEdQSU8gZGlyZWN0aW9uIGJpdHMgKi8KKwltYzQxN19yZWdpc3Rlcl9yZWFkKGRldiwgMHg5MDIwLCAmdmFsKTsKKwlpZiAoYXNvdXRwdXQpCisJCXZhbCB8PSAobWFzayAmIDB4MDAwMGZmZmYpOworCWVsc2UKKwkJdmFsICY9IH4obWFzayAmIDB4MDAwMGZmZmYpOworCisJbWM0MTdfcmVnaXN0ZXJfd3JpdGUoZGV2LCAweDkwMjAsIHZhbCk7Cit9CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogTVBFRyBlbmNvZGVyIEFQSSAqLwpAQCAtOTU1LDI1ICs5ODgsOCBAQAogCXJldHZhbCB8PSBtYzQxN19yZWdpc3Rlcl93cml0ZShkZXYsIElWVFZfUkVHX0hXX0JMT0NLUywKIAkJSVZUVl9DTURfSFdfQkxPQ0tTX1JTVCk7CiAKLQkvKiBSZXN0b3JlIEdQSU8gc2V0dGluZ3MsIG1ha2Ugc3VyZSBFSU8xNCBpcyBlbmFibGVkIGFzIGFuIG91dHB1dC4gKi8KLQlkcHJpbnRrKDIsICIlczogR1BJTyBvdXRwdXQgRUlPIDAtMTUgd2FzID0gMHgleFxuIiwKLQkJX19mdW5jX18sIGdwaW9fb3V0cHV0KTsKLQkvKiBQb3dlci11cCBzZWVtcyB0byBoYXZlIEdQSU9zIEFGVS4gVGhpcyB3YXMgY2F1c2luZyBkaWdpdGFsIHNpZGUKLQkgKiB0byBmYWlsIGF0IHBvd2VyLXVwLiBTZWVtcyBHUElPcyBzaG91bGQgYmUgc2V0IHRvIDB4MTBmZjA0MTEgYXQKLQkgKiBwb3dlci11cC4KLQkgKiBncGlvX291dHB1dCB8PSAoMTw8MTQpOwotCSAqLwotCS8qIE5vdGU6IEdQSU8xNCBpcyBzcGVjaWZpYyB0byB0aGUgSFZSMTgwMCBoZXJlICovCi0JZ3Bpb19vdXRwdXQgPSAweDEwZmYwNDExIHwgKDE8PDE0KTsKLQlyZXR2YWwgfD0gbWM0MTdfcmVnaXN0ZXJfd3JpdGUoZGV2LCAweDkwMjAsIGdwaW9fb3V0cHV0IHwgKDE8PDE0KSk7Ci0JZHByaW50aygyLCAiJXM6IEdQSU8gb3V0cHV0IEVJTyAwLTE1IG5vdyA9IDB4JXhcbiIsCi0JCV9fZnVuY19fLCBncGlvX291dHB1dCk7Ci0KLQlkcHJpbnRrKDEsICIlczogR1BJTyB2YWx1ZSAgRUlPIDAtMTUgd2FzID0gMHgleFxuIiwKLQkJX19mdW5jX18sIHZhbHVlKTsKLQl2YWx1ZSB8PSAoMTw8MTQpOwotCWRwcmludGsoMSwgIiVzOiBHUElPIHZhbHVlICBFSU8gMC0xNSBub3cgPSAweCV4XG4iLAotCQlfX2Z1bmNfXywgdmFsdWUpOworCS8qIEYvVyBwb3dlciB1cCBkaXN0dXJicyB0aGUgR1BJT3MsIHJlc3RvcmUgc3RhdGUgKi8KKwlyZXR2YWwgfD0gbWM0MTdfcmVnaXN0ZXJfd3JpdGUoZGV2LCAweDkwMjAsIGdwaW9fb3V0cHV0KTsKIAlyZXR2YWwgfD0gbWM0MTdfcmVnaXN0ZXJfd3JpdGUoZGV2LCAweDkwMEMsIHZhbHVlKTsKIAogCXJldHZhbCB8PSBtYzQxN19yZWdpc3Rlcl9yZWFkKGRldiwgSVZUVl9SRUdfVlBVLCAmdmFsdWUpOwpAQCAtMTc4OCw5ICsxODA0LDYgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQkvKiBJbml0aWFsaXplIE1DNDE3IHJlZ2lzdGVycyAqLwotCWN4MjM4ODVfbWM0MTdfaW5pdChkZXYpOwotCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWQgW21wZWddXG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGRldi0+djRsX2RldmljZS0+bnVtKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKaW5kZXggY2UyOWI1ZS4uMzE0M2Q4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCkBAIC0yMDEsNiArMjAxLDE1IEBACiAJCS5uYW1lCQk9ICJNeWdpY2EgWDg1MDYgRE1CLVRIIiwKIAkJLnBvcnRiCQk9IENYMjM4ODVfTVBFR19EVkIsCiAJfSwKKwlbQ1gyMzg4NV9CT0FSRF9NQUdJQ1BST19QUk9IRFRWRTJdID0geworCQkubmFtZQkJPSAiTWFnaWMtUHJvIFByb0hEVFYgRXh0cmVtZSAyIiwKKwkJLnBvcnRiCQk9IENYMjM4ODVfTVBFR19EVkIsCisJfSwKKwlbQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MF0gPSB7CisJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMTg1MCIsCisJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRU5DT0RFUiwKKwkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9iY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfYm9hcmRzKTsKIApAQCAtMzI0LDYgKzMzMywxNCBAQAogCQkuc3VidmVuZG9yID0gMHgxNGYxLAogCQkuc3ViZGV2aWNlID0gMHg4NjUxLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9NWUdJQ0FfWDg1MDYsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgxNGYxLAorCQkuc3ViZGV2aWNlID0gMHg4NjU3LAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9NQUdJQ1BST19QUk9IRFRWRTIsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHg4NTQxLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MCwKIAl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBjeDIzODg1X2lkY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfc3ViaWRzKTsKQEAgLTQ4Myw4ICs1MDAsMTMgQEAKIAkJLyogV2luVFYtSFZSMTcwMCAoUENJZSwgT0VNLCBObyBJUiwgZnVsbCBoZWlnaHQpCiAJCSAqIERWQi1UIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCiAJCWJyZWFrOworCWNhc2UgODUwMjE6CisJCS8qIFdpblRWLUhWUjE4NTAgKFBDSWUsIE9FTSwgUkNBIGluLCBJUiwgRk0sCisJCQlEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLworCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogd2FybmluZzogdW5rbm93biBoYXVwcGF1Z2UgbW9kZWwgIyVkXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogd2FybmluZzogIgorCQkJInVua25vd24gaGF1cHBhdWdlIG1vZGVsICMlZFxuIiwKIAkJCWRldi0+bmFtZSwgdHYubW9kZWwpOwogCQlicmVhazsKIAl9CkBAIC01NzQsMTMgKzU5NiwyMyBAQAogCQkvKiBDWDIzNDE3IEdQSU8ncyAqLwogCQkvKiBFSU8xNSBaaWxvZyBSZXNldCAqLwogCQkvKiBFSU8xNCBTNUgxNDA5L0NYMjQyMjcgUmVzZXQgKi8KKwkJbWM0MTdfZ3Bpb19lbmFibGUoZGV2LCBHUElPXzE1IHwgR1BJT18xNCwgMSk7CisKKwkJLyogUHV0IHRoZSBkZW1vZCBpbnRvIHJlc2V0IGFuZCBwcm90ZWN0IHRoZSBlZXByb20gKi8KKwkJbWM0MTdfZ3Bpb19jbGVhcihkZXYsIEdQSU9fMTUgfCBHUElPXzE0KTsKKwkJbWRlbGF5KDEwMCk7CisKKwkJLyogQnJpbmcgdGhlIGRlbW9kIGFuZCBibGFzdGVyIG91dCBvZiByZXNldCAqLworCQltYzQxN19ncGlvX3NldChkZXYsIEdQSU9fMTUgfCBHUElPXzE0KTsKKwkJbWRlbGF5KDEwMCk7CiAKIAkJLyogRm9yY2UgdGhlIFREQTgyOTVBIGludG8gcmVzZXQgYW5kIGJhY2sgKi8KLQkJY3hfc2V0KEdQMF9JTywgMHgwMDA0MDAwNCk7CisJCWN4MjM4ODVfZ3Bpb19lbmFibGUoZGV2LCBHUElPXzIsIDEpOworCQljeDIzODg1X2dwaW9fc2V0KGRldiwgR1BJT18yKTsKIAkJbWRlbGF5KDIwKTsKLQkJY3hfY2xlYXIoR1AwX0lPLCAweDAwMDAwMDA0KTsKKwkJY3gyMzg4NV9ncGlvX2NsZWFyKGRldiwgR1BJT18yKTsKIAkJbWRlbGF5KDIwKTsKLQkJY3hfc2V0KEdQMF9JTywgMHgwMDA0MDAwNCk7CisJCWN4MjM4ODVfZ3Bpb19zZXQoZGV2LCBHUElPXzIpOwogCQltZGVsYXkoMjApOwogCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyMDA6CkBAIC03MTUsMTQgKzc0Nyw0NSBAQAogCQljeDIzODg1X2dwaW9fc2V0KGRldiwgR1BJT185KTsKIAkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX01ZR0lDQV9YODUwNjoKKwljYXNlIENYMjM4ODVfQk9BUkRfTUFHSUNQUk9fUFJPSERUVkUyOgogCQkvKiBHUElPLTEgcmVzZXQgWEM1MDAwICovCi0JCS8qIEdQSU8tMiByZXNldCBMR1M4R0w1ICovCisJCS8qIEdQSU8tMiByZXNldCBMR1M4R0w1IC8gTEdTOEc3NSAqLwogCQljeF9zZXQoR1AwX0lPLCAweDAwMDYwMDAwKTsKIAkJY3hfY2xlYXIoR1AwX0lPLCAweDAwMDAwMDA2KTsKIAkJbWRlbGF5KDEwMCk7CiAJCWN4X3NldChHUDBfSU8sIDB4MDAwNjAwMDYpOwogCQltZGVsYXkoMTAwKTsKIAkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODUwOgorCQkvKiBHUElPLTAgNjU2X0NMSyAqLworCQkvKiBHUElPLTEgNjU2X0QwICovCisJCS8qIEdQSU8tMiBXYWtlIyAqLworCQkvKiBHUElPLTMtMTAgY3gyMzQxNyBkYXRhMC03ICovCisJCS8qIEdQSU8tMTEtMTQgY3gyMzQxNyBhZGRyMC0zICovCisJCS8qIEdQSU8tMTUtMTggY3gyMzQxNyBSRUFEWSwgQ1MsIFJELCBXUiAqLworCQkvKiBHUElPLTE5IElSX1JYICovCisJCS8qIEdQSU8tMjAgQ19JUl9UWCAqLworCQkvKiBHUElPLTIxIEkyUyBEQVQgKi8KKwkJLyogR1BJTy0yMiBJMlMgV0NMSyAqLworCQkvKiBHUElPLTIzIEkyUyBCQ0xLICovCisJCS8qIEFMVCBHUElPOiBFWFAgR1BJTyBMQVRDSCAqLworCisJCS8qIENYMjM0MTcgR1BJTydzICovCisJCS8qIEdQSU8tMTQgUzVIMTQxMS9DWDI0MjI4IFJlc2V0ICovCisJCS8qIEdQSU8tMTMgRUVQUk9NIHdyaXRlIHByb3RlY3QgKi8KKwkJbWM0MTdfZ3Bpb19lbmFibGUoZGV2LCBHUElPXzE0IHwgR1BJT18xMywgMSk7CisKKwkJLyogUHV0IHRoZSBkZW1vZCBpbnRvIHJlc2V0IGFuZCBwcm90ZWN0IHRoZSBlZXByb20gKi8KKwkJbWM0MTdfZ3Bpb19jbGVhcihkZXYsIEdQSU9fMTQgfCBHUElPXzEzKTsKKwkJbWRlbGF5KDEwMCk7CisKKwkJLyogQnJpbmcgdGhlIGRlbW9kIG91dCBvZiByZXNldCAqLworCQltYzQxN19ncGlvX3NldChkZXYsIEdQSU9fMTQpOworCQltZGVsYXkoMTAwKTsKKworCQkvKiBDWDI0MjI4IEdQSU8gKi8KKwkJLyogQ29ubmVjdGVkIHRvIElGIC8gTXV4ICovCisJCWJyZWFrOwogCX0KIH0KIApAQCAtNzM5LDYgKzgwMiw3IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjc1OgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1NToKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyMTA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODUwOgogCQkvKiBGSVhNRTogSW1wbGVtZW50IG1lICovCiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUxfRVhQOgpAQCAtNzc4LDYgKzg0Miw3IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjc1OgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1NToKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyMTA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODUwOgogCQlpZiAoZGV2LT5pMmNfYnVzWzBdLmkyY19yYyA9PSAwKQogCQkJaGF1cHBhdWdlX2VlcHJvbShkZXYsIGVlcHJvbSsweGMwKTsKIAkJYnJlYWs7CkBAIC04MjcsNiArODkyLDcgQEAKIAkJdHMyLT5zcmNfc2VsX3ZhbCAgID0gQ1gyMzg4NV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU87CiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9NWUdJQ0FfWDg1MDY6CisJY2FzZSBDWDIzODg1X0JPQVJEX01BR0lDUFJPX1BST0hEVFZFMjoKIAkJdHMxLT5nZW5fY3RybF92YWwgID0gMHg1OyAvKiBQYXJhbGxlbCAqLwogCQl0czEtPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KIAkJdHMxLT5zcmNfc2VsX3ZhbCAgID0gQ1gyMzg4NV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU87CkBAIC04NDQsNiArOTEwLDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNzU6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjU1OgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTIxMDoKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4NTA6CiAJZGVmYXVsdDoKIAkJdHMyLT5nZW5fY3RybF92YWwgID0gMHhjOyAvKiBTZXJpYWwgYnVzICsgcHVuY3R1cmVkIGNsb2NrICovCiAJCXRzMi0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCmluZGV4IGJmN2JiMWMuLjQwZDQzOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKQEAgLTcxMywxMiArNzEzLDI2IEBACiAJCWRldi0+aHdyZXZpc2lvbiA9IDB4YTE7CiAJCWJyZWFrOwogCWNhc2UgMHgwMjoKLQkJLyogQ1gyMzg4NS0xM1ogKi8KKwkJLyogQ1gyMzg4NS0xM1ovMTRaICovCiAJCWRldi0+aHdyZXZpc2lvbiA9IDB4YjA7CiAJCWJyZWFrOwogCWNhc2UgMHgwMzoKLQkJLyogQ1gyMzg4OC0yMlogKi8KLQkJZGV2LT5od3JldmlzaW9uID0gMHhjMDsKKwkJaWYgKGRldi0+cGNpLT5kZXZpY2UgPT0gMHg4ODgwKSB7CisJCQkvKiBDWDIzODg4LTIxWi8yMlogKi8KKwkJCWRldi0+aHdyZXZpc2lvbiA9IDB4YzA7CisJCX0gZWxzZSB7CisJCQkvKiBDWDIzODg1LTE0WiAqLworCQkJZGV2LT5od3JldmlzaW9uID0gMHhhNDsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4MDQ6CisJCWlmIChkZXYtPnBjaS0+ZGV2aWNlID09IDB4ODg4MCkgeworCQkJLyogQ1gyMzg4OC0zMVogKi8KKwkJCWRldi0+aHdyZXZpc2lvbiA9IDB4ZDA7CisJCX0gZWxzZSB7CisJCQkvKiBDWDIzODg1LTE1WiwgQ1gyMzg4OC0zMVogKi8KKwkJCWRldi0+aHdyZXZpc2lvbiA9IDB4YTU7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSAweDBlOgogCQkvKiBDWDIzODg3LTE1WiAqLwpAQCAtNzU2LDYgKzc3MCw3IEBACiAKIAkvKiBDb25maWd1cmUgdGhlIGludGVybmFsIG1lbW9yeSAqLwogCWlmIChkZXYtPnBjaS0+ZGV2aWNlID09IDB4ODg4MCkgeworCQkvKiBDb3VsZCBiZSA4ODcgb3IgODg4LCBhc3N1bWUgYSBkZWZhdWx0ICovCiAJCWRldi0+YnJpZGdlID0gQ1gyMzg4NV9CUklER0VfODg3OwogCQkvKiBBcHBseSBhIHNlbnNpYmxlIGNsb2NrIGZyZXF1ZW5jeSBmb3IgdGhlIFBDSWUgYnJpZGdlICovCiAJCWRldi0+Y2xrX2ZyZXEgPSAyNTAwMDAwMDsKQEAgLTg2OCw2ICs4ODMsMTQgQEAKIAlkcHJpbnRrKDEsICIlcygpIHJhZGlvX3R5cGUgPSAweCV4IHJhZGlvX2FkZHIgPSAweCV4XG4iLAogCQlfX2Z1bmNfXywgZGV2LT5yYWRpb190eXBlLCBkZXYtPnJhZGlvX2FkZHIpOwogCisJLyogVGhlIGN4MjM0MTcgZW5jb2RlciBoYXMgR1BJTydzIHRoYXQgbmVlZCB0byBiZSBpbml0aWFsaXNlZAorCSAqIGJlZm9yZSBEVkIsIHNvIHRoYXQgZGVtb2R1bGF0b3JzIGFuZCB0dW5lcnMgYXJlIG91dCBvZgorCSAqIHJlc2V0IGJlZm9yZSBEVkIgdXNlcyB0aGVtLgorCSAqLworCWlmICgoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGIgPT0gQ1gyMzg4NV9NUEVHX0VOQ09ERVIpIHx8CisJCShjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YyA9PSBDWDIzODg1X01QRUdfRU5DT0RFUikpCisJCQljeDIzODg1X21jNDE3X2luaXQoZGV2KTsKKwogCS8qIGluaXQgaGFyZHdhcmUgKi8KIAljeDIzODg1X3Jlc2V0KGRldik7CiAKQEAgLTEyNTAsNiArMTI3Myw3IEBACiAJc3dpdGNoIChkZXYtPmJyaWRnZSkgewogCWNhc2UgQ1gyMzg4NV9CUklER0VfODg1OgogCWNhc2UgQ1gyMzg4NV9CUklER0VfODg3OgorCWNhc2UgQ1gyMzg4NV9CUklER0VfODg4OgogCQkvKiBlbmFibGUgaXJxcyAqLwogCQlkcHJpbnRrKDEsICIlcygpIGVuYWJsaW5nIFRTIGludCdzIGFuZCBETUFcbiIsIF9fZnVuY19fKTsKIAkJY3hfc2V0KHBvcnQtPnJlZ190c19pbnRfbXNrLCAgcG9ydC0+dHNfaW50X21za192YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYwppbmRleCA4NmFjNTI5Li4wMjJmYWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYwpAQCAtMzk2LDcgKzM5Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc3R2MDkwMF9jb25maWcgbmV0dXBfc3R2MDkwMF9jb25maWcgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAotCS54dGFsID0gMjcwMDAwMDAsCisJLnh0YWwgPSA4MDAwMDAwLAogCS5jbGttb2RlID0gMywvKiAwLUNMS0ksIDItWFRBTEksIGVsc2UgQVVUTyAqLwogCS5kaXNlcWNfbW9kZSA9IDIsLyogMi8zIFBXTSAqLwogCS50c19jb25maWdfcmVncyA9IHN0djA5MDBfdHNfcmVncywKQEAgLTQwOCwxNCArNDA4LDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc3R2NjExMF9jb25maWcgbmV0dXBfc3R2NjExMF90dW5lcmNvbmZpZ19hID0gewogCS5pMmNfYWRkcmVzcyA9IDB4NjAsCi0JLm1jbGsgPSAyNzAwMDAwMCwKLQkuaXFfd2lyaW5nID0gMCwKKwkubWNsayA9IDE2MDAwMDAwLAorCS5jbGtfZGl2ID0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc3R2NjExMF9jb25maWcgbmV0dXBfc3R2NjExMF90dW5lcmNvbmZpZ19iID0gewogCS5pMmNfYWRkcmVzcyA9IDB4NjMsCi0JLm1jbGsgPSAyNzAwMDAwMCwKLQkuaXFfd2lyaW5nID0gMSwKKwkubWNsayA9IDE2MDAwMDAwLAorCS5jbGtfZGl2ID0gMSwKIH07CiAKIHN0YXRpYyBpbnQgdGJzX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCkBAIC00ODcsNiArNDg3LDI2IEBACiAJCXBvcnQtPnNldF9mcm9udGVuZF9zYXZlKGZlLCBwYXJhbSkgOiAtRU5PREVWOwogfQogCitzdGF0aWMgc3RydWN0IGxnczhneHhfY29uZmlnIG1hZ2ljcHJvX3Byb2hkdHZlMl9sZ3M4Zzc1X2NvbmZpZyA9IHsKKwkucHJvZCA9IExHUzhHWFhfUFJPRF9MR1M4Rzc1LAorCS5kZW1vZF9hZGRyZXNzID0gMHgxOSwKKwkuc2VyaWFsX3RzID0gMCwKKwkudHNfY2xrX3BvbCA9IDEsCisJLnRzX2Nsa19nYXRlZCA9IDEsCisJLmlmX2Nsa19mcmVxID0gMzA0MDAsIC8qIDMwLjQgTUh6ICovCisJLmlmX2ZyZXEgPSA2NTAwLCAvKiA2LjUwIE1IeiAqLworCS5pZl9uZWdfY2VudGVyID0gMSwKKwkuZXh0X2FkYyA9IDAsCisJLmFkY19zaWduZWQgPSAxLAorCS5hZGNfdnBwID0gMiwgLyogMS42IFZwcCAqLworCS5pZl9uZWdfZWRnZSA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHhjNTAwMF9jb25maWcgbWFnaWNwcm9fcHJvaGR0dmUyX3hjNTAwMF9jb25maWcgPSB7CisJLmkyY19hZGRyZXNzID0gMHg2MSwKKwkuaWZfa2h6ID0gNjUwMCwKK307CisKIHN0YXRpYyBpbnQgZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBvcnQtPmRldjsKQEAgLTgzMyw2ICs4NTMsMzAgQEAKIAkJCQkmbXlnaWNhX3g4NTA2X3hjNTAwMF9jb25maWcpOwogCQl9CiAJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9NQUdJQ1BST19QUk9IRFRWRTI6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOworCQlpMmNfYnVzMiA9ICZkZXYtPmkyY19idXNbMV07CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChsZ3M4Z3h4X2F0dGFjaCwKKwkJCSZtYWdpY3Byb19wcm9oZHR2ZTJfbGdzOGc3NV9jb25maWcsCisJCQkmaTJjX2J1cy0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLAorCQkJCWZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCSZpMmNfYnVzMi0+aTJjX2FkYXAsCisJCQkJJm1hZ2ljcHJvX3Byb2hkdHZlMl94YzUwMDBfY29uZmlnKTsKKwkJfQorCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4NTA6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOworCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQxMV9hdHRhY2gsCisJCQkmaGN3X3M1aDE0MTFfY29uZmlnLAorCQkJJmkyY19idXMtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCisJCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJMHg2MCwgJmRldi0+aTJjX2J1c1swXS5pMmNfYWRhcCwKKwkJCQkmaGF1cHBhdWdlX3RkYTE4MjcxX2NvbmZpZyk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRoZSBmcm9udGVuZCBvZiB5b3VyIERWQi9BVFNDIGNhcmQgIgogCQkJIiBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYwppbmRleCAzODRkZWMzLi40MTcyY2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYwpAQCAtMjgzLDcgKzI4Myw2IEBACiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGN4MjM4ODVfaTJjX2FkYXBfdGVtcGxhdGUgPSB7CiAJLm5hbWUgICAgICAgICAgICAgID0gImN4MjM4ODUiLAogCS5vd25lciAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS5pZCAgICAgICAgICAgICAgICA9IEkyQ19IV19CX0NYMjM4ODUsCiAJLmFsZ28gICAgICAgICAgICAgID0gJmN4MjM4ODVfaTJjX2FsZ29fdGVtcGxhdGUsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAppbmRleCAyMTRhNTVlLi44NmYyNjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKQEAgLTc2LDYgKzc2LDggQEAKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1NSAgICAgICAgMjAKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTIxMCAgICAgICAgMjEKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9NWUdJQ0FfWDg1MDYgICAgICAgICAgICAgMjIKKyNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9NQUdJQ1BST19QUk9IRFRWRTIgICAgICAgMjMKKyNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MCAgICAgICAgMjQKIAogI2RlZmluZSBHUElPXzAgMHgwMDAwMDAwMQogI2RlZmluZSBHUElPXzEgMHgwMDAwMDAwMgpAQCAtODcsNiArODksMTIgQEAKICNkZWZpbmUgR1BJT183IDB4MDAwMDAwODAKICNkZWZpbmUgR1BJT184IDB4MDAwMDAxMDAKICNkZWZpbmUgR1BJT185IDB4MDAwMDAyMDAKKyNkZWZpbmUgR1BJT18xMCAweDAwMDAwNDAwCisjZGVmaW5lIEdQSU9fMTEgMHgwMDAwMDgwMAorI2RlZmluZSBHUElPXzEyIDB4MDAwMDEwMDAKKyNkZWZpbmUgR1BJT18xMyAweDAwMDAyMDAwCisjZGVmaW5lIEdQSU9fMTQgMHgwMDAwNDAwMAorI2RlZmluZSBHUElPXzE1IDB4MDAwMDgwMDAKIAogLyogQ3VycmVudGx5IHVuc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXI6IFBBTC9ILCBOVFNDL0tyLCBTRUNBTSBCL0cvSC9MQyAqLwogI2RlZmluZSBDWDIzODg1X05PUk1TIChcCkBAIC0zMzEsNiArMzM5LDcgQEAKIAkJQ1gyMzg4NV9CUklER0VfVU5ERUZJTkVEID0gMCwKIAkJQ1gyMzg4NV9CUklER0VfODg1ID0gODg1LAogCQlDWDIzODg1X0JSSURHRV84ODcgPSA4ODcsCisJCUNYMjM4ODVfQlJJREdFXzg4OCA9IDg4OCwKIAl9IGJyaWRnZTsKIAogCS8qIEFuYWxvZyB2aWRlbyAqLwpAQCAtMzk1LDcgKzQwNCw3IEBACiAJdTMyICBjbWRzX3N0YXJ0OwogCXUzMiAgY3RybF9zdGFydDsKIAl1MzIgIGNkdDsKLQl1MzIgIGZpZm9fc3RhcnQ7OworCXUzMiAgZmlmb19zdGFydDsKIAl1MzIgIGZpZm9fc2l6ZTsKIAl1MzIgIHB0cjFfcmVnOwogCXUzMiAgcHRyMl9yZWc7CkBAIC01MDQsNiArNTEzLDkgQEAKIGV4dGVybiB2b2lkIGN4MjM4ODVfbWM0MTdfaW5pdChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldik7CiBleHRlcm4gaW50IG1jNDE3X21lbW9yeV9yZWFkKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB1MzIgYWRkcmVzcywgdTMyICp2YWx1ZSk7CiBleHRlcm4gaW50IG1jNDE3X21lbW9yeV93cml0ZShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgdTMyIGFkZHJlc3MsIHUzMiB2YWx1ZSk7CitleHRlcm4gdm9pZCBtYzQxN19ncGlvX3NldChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgdTMyIG1hc2spOworZXh0ZXJuIHZvaWQgbWM0MTdfZ3Bpb19jbGVhcihzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgdTMyIG1hc2spOworZXh0ZXJuIHZvaWQgbWM0MTdfZ3Bpb19lbmFibGUoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHUzMiBtYXNrLCBpbnQgYXNvdXRwdXQpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKaW5kZXggMGJlNTFiNi4uMWFlYWYxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYwpAQCAtMzIxLDYgKzMyMSwxNSBAQAogCS8qIFNlbGVjdCBBRkUgY2xvY2sgcGFkIG91dHB1dCBzb3VyY2UgKi8KIAljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxNDQsIDB4MDUpOwogCisJLyogRHJpdmUgR1BJTzIgZGlyZWN0aW9uIGFuZCB2YWx1ZXMgZm9yIEhWUjE3MDAKKwkgKiB3aGVyZSBhbiBvbmJvYXJkIG11eCBzZWxlY3RzIHRoZSBvdXRwdXQgb2YgZGVtb2R1bGF0b3IKKwkgKiB2cyB0aGUgNDE3LiBGYWlsdXJlIHRvIHNldCB0aGlzIHJlc3VsdHMgaW4gbm8gRFRWLgorCSAqIEl0J3Mgc2FmZSB0byBzZXQgdGhpcyBhY3Jvc3MgYWxsIEhhdXBwYXVnZSBib2FyZHMKKwkgKiBjdXJyZW50bHksIHJlZ2FyZGxlc3Mgb2YgdGhlIGJvYXJkIHR5cGUuCisJICovCisJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTYwLCAweDFkKTsKKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxNjQsIDB4MDApOworCiAJLyogRG8gdGhlIGZpcm13YXJlIGxvYWQgaW4gYSB3b3JrIGhhbmRsZXIgdG8gcHJldmVudC4KIAkgICBPdGhlcndpc2UgdGhlIGtlcm5lbCBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZQogCSAgIGJpdC1iYW5naW5nIGkyYyBpbnRlcmZhY2UgdG8gZmluaXNoIHVwbG9hZGluZyB0aGUKQEAgLTE1NzgsMTIgKzE1ODcsNiBAQAogCXN0YXRlLT5pZCA9IGlkOwogCXN0YXRlLT5yZXYgPSBkZXZpY2VfaWQ7CiAKLQlpZiAoc3RhdGUtPmlzX2N4MjM4ODUpIHsKLQkJLyogRHJpdmUgR1BJTzIgZGlyZWN0aW9uIGFuZCB2YWx1ZXMgKi8KLQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTYwLCAweDFkKTsKLQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTY0LCAweDAwKTsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtZmlybXdhcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWZpcm13YXJlLmMKaW5kZXggMGRmNTNiMC4uMWY0ODNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtZmlybXdhcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1maXJtd2FyZS5jCkBAIC0yMywxMCArMjMsNiBAQAogCiAjaW5jbHVkZSAiY3gyNTg0MC1jb3JlLmgiCiAKLSNkZWZpbmUgRldGSUxFICJ2NGwtY3gyNTg0MC5mdyIKLSNkZWZpbmUgRldGSUxFX0NYMjM4ODUgInY0bC1jeDIzODg1LWF2Y29yZS0wMS5mdyIKLSNkZWZpbmUgRldGSUxFX0NYMjMxWFggInY0bC1jeDIzMXh4LWF2Y29yZS0wMS5mdyIKLQogLyoKICAqIE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4gLSBUaGUgRldTRU5EIHBhcmFtZXRlciBjb250cm9scyB0aGUKICAqIHNpemUgb2YgdGhlIGZpcm13YXJlIGNodW5rcyBzZW50IGRvd24gdGhlIEkyQyBidXMgdG8gdGhlIGNoaXAuCkBAIC00MCwxMSArMzYsMTEgQEAKIAogI2RlZmluZSBGV0RFVih4KSAmKCh4KS0+ZGV2KQogCi1zdGF0aWMgY2hhciAqZmlybXdhcmUgPSBGV0ZJTEU7CitzdGF0aWMgY2hhciAqZmlybXdhcmUgPSAiIjsKIAogbW9kdWxlX3BhcmFtKGZpcm13YXJlLCBjaGFycCwgMDQ0NCk7CiAKLU1PRFVMRV9QQVJNX0RFU0MoZmlybXdhcmUsICJGaXJtd2FyZSBpbWFnZSBbZGVmYXVsdDogIiBGV0ZJTEUgIl0iKTsKK01PRFVMRV9QQVJNX0RFU0MoZmlybXdhcmUsICJGaXJtd2FyZSBpbWFnZSB0byBsb2FkIik7CiAKIHN0YXRpYyB2b2lkIHN0YXJ0X2Z3X2xvYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKQEAgLTY1LDYgKzYxLDE5IEBACiAJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4ODAzLCAweDAzKTsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgKmdldF9md19uYW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCisJaWYgKGZpcm13YXJlWzBdKQorCQlyZXR1cm4gZmlybXdhcmU7CisJaWYgKHN0YXRlLT5pc19jeDIzODg1KQorCQlyZXR1cm4gInY0bC1jeDIzODg1LWF2Y29yZS0wMS5mdyI7CisJaWYgKHN0YXRlLT5pc19jeDIzMXh4KQorCQlyZXR1cm4gInY0bC1jeDIzMXh4LWF2Y29yZS0wMS5mdyI7CisJcmV0dXJuICJ2NGwtY3gyNTg0MC5mdyI7Cit9CisKIHN0YXRpYyBpbnQgY2hlY2tfZndfbG9hZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgc2l6ZSkKIHsKIAkvKiBETF9BRERSX0hCIERMX0FERFJfTEIgKi8KQEAgLTcyLDExICs4MSwxMyBAQAogCXMgfD0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg4MDApOwogCiAJaWYgKHNpemUgIT0gcykgewotCQl2NGxfZXJyKGNsaWVudCwgImZpcm13YXJlICVzIGxvYWQgZmFpbGVkXG4iLCBmaXJtd2FyZSk7CisJCXY0bF9lcnIoY2xpZW50LCAiZmlybXdhcmUgJXMgbG9hZCBmYWlsZWRcbiIsCisJCQkJZ2V0X2Z3X25hbWUoY2xpZW50KSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXY0bF9pbmZvKGNsaWVudCwgImxvYWRlZCAlcyBmaXJtd2FyZSAoJWQgYnl0ZXMpXG4iLCBmaXJtd2FyZSwgc2l6ZSk7CisJdjRsX2luZm8oY2xpZW50LCAibG9hZGVkICVzIGZpcm13YXJlICglZCBieXRlcylcbiIsCisJCQlnZXRfZndfbmFtZShjbGllbnQpLCBzaXplKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTYsMjEgKzEwNywyNCBAQAogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMOwogCXU4IGJ1ZmZlcltGV1NFTkRdOwogCWNvbnN0IHU4ICpwdHI7CisJY29uc3QgY2hhciAqZnduYW1lID0gZ2V0X2Z3X25hbWUoY2xpZW50KTsKIAlpbnQgc2l6ZSwgcmV0dmFsOwogCWludCBNQVhfQlVGX1NJWkUgPSBGV1NFTkQ7CisJdTMyIGdwaW9fb2UgPSAwLCBncGlvX2RhID0gMDsKIAotCWlmIChzdGF0ZS0+aXNfY3gyMzg4NSkKLQkJZmlybXdhcmUgPSBGV0ZJTEVfQ1gyMzg4NTsKLQllbHNlIGlmIChzdGF0ZS0+aXNfY3gyMzF4eCkKLQkJZmlybXdhcmUgPSBGV0ZJTEVfQ1gyMzFYWDsKKwlpZiAoc3RhdGUtPmlzX2N4MjM4ODUpIHsKKwkJLyogUHJlc2VydmUgdGhlIEdQSU8gT0UgYW5kIG91dHB1dCBiaXRzICovCisJCWdwaW9fb2UgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDE2MCk7CisJCWdwaW9fZGEgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDE2NCk7CisJfQogCiAJaWYgKChzdGF0ZS0+aXNfY3gyMzF4eCkgJiYgTUFYX0JVRl9TSVpFID4gMTYpIHsKIAkJdjRsX2VycihjbGllbnQsICIgRmlybXdhcmUgZG93bmxvYWQgc2l6ZSBjaGFuZ2VkIHRvIDE2IGJ5dGVzIG1heCBsZW5ndGhcbiIpOwogCQlNQVhfQlVGX1NJWkUgPSAxNjsgIC8qIGN4MjMxeHggY2Fubm90IGFjY2VwdCBtb3JlIHRoYW4gMTYgYnl0ZXMgYXQgYSB0aW1lICovCiAJfQogCi0JaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaXJtd2FyZSwgRldERVYoY2xpZW50KSkgIT0gMCkgewotCQl2NGxfZXJyKGNsaWVudCwgInVuYWJsZSB0byBvcGVuIGZpcm13YXJlICVzXG4iLCBmaXJtd2FyZSk7CisJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd25hbWUsIEZXREVWKGNsaWVudCkpICE9IDApIHsKKwkJdjRsX2VycihjbGllbnQsICJ1bmFibGUgdG8gb3BlbiBmaXJtd2FyZSAlc1xuIiwgZnduYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNDIsNSArMTU2LDExIEBACiAJc2l6ZSA9IGZ3LT5zaXplOwogCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCisJaWYgKHN0YXRlLT5pc19jeDIzODg1KSB7CisJCS8qIFJlc3RvcmUgR1BJTyBjb25maWd1cmF0aW9uIGFmdGVyIGYvdyBsb2FkICovCisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDE2MCwgZ3Bpb19vZSk7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDE2NCwgZ3Bpb19kYSk7CisJfQorCiAJcmV0dXJuIGNoZWNrX2Z3X2xvYWQoY2xpZW50LCBzaXplKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCmluZGV4IDM5NDY1MzAuLmU1ZjA3ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtMTI4Myw2ICsxMjgzLDUxIEBACiAJCX0sCiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKKwlbQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjIwMDBIX0pdID0geworCQkubmFtZSAgICAgICAgICAgPSAiV2luRmFzdCBEVFYyMDAwIEggcmV2LiBKIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IDAsCisJCQkuZ3BpbzAgID0gMHgwMDAxNzMwMCwKKwkJCS5ncGlvMSAgPSAweDAwMDA4MjA3LAorCQkJLmdwaW8yCT0gMHgwMDAwMDAwMCwKKwkJCS5ncGlvMyAgPSAweDAyMDAwMDAwLAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmdwaW8wICA9IDB4MDAwMTgzMDAsCisJCQkuZ3BpbzEgID0gMHgwMDAwZjIwNywKKwkJCS5ncGlvMgk9IDB4MDAwMTczMDQsCisJCQkuZ3BpbzMgID0gMHgwMjAwMDAwMCwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMSwKKwkJCS5ncGlvMCAgPSAweDAwMDE4MzAxLAorCQkJLmdwaW8xICA9IDB4MDAwMGYyMDcsCisJCQkuZ3BpbzIJPSAweDAwMDE3MzA0LAorCQkJLmdwaW8zICA9IDB4MDIwMDAwMDAsCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweDAwMDE4MzAxLAorCQkJLmdwaW8xICA9IDB4MDAwMGYyMDcsCisJCQkuZ3BpbzIJPSAweDAwMDE3MzA0LAorCQkJLmdwaW8zICA9IDB4MDIwMDAwMDAsCisJCX19LAorCQkucmFkaW8gPSB7CisJCQkgLnR5cGUgID0gQ1g4OF9SQURJTywKKwkJCSAuZ3BpbzAgPSAweDAwMDE1NzAyLAorCQkJIC5ncGlvMSA9IDB4MDAwMGYyMDcsCisJCQkgLmdwaW8yID0gMHgwMDAxNTcwMiwKKwkJCSAuZ3BpbzMgPSAweDAyMDAwMDAwLAorCQl9LAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCX0sCiAJW0NYODhfQk9BUkRfR0VOSUFURUNIX0RWQlNdID0gewogCQkubmFtZSAgICAgICAgICA9ICJHZW5pYXRlY2ggRFZCLVMiLAogCQkudHVuZXJfdHlwZSAgICA9IFRVTkVSX0FCU0VOVCwKQEAgLTE5MDgsNyArMTk1Myw4IEBACiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5pbnB1dCAgICAgICAgICA9IHt7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0RWQiwKLQkJCS52bXV4ICAgPSAxLAorCQkJLnZtdXggICA9IDAsCisJCQkuZ3BpbzAgID0gMHg4MDgwLAogCQl9IH0sCiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKQEAgLTIyODIsNiArMjMyOCwxMCBAQAogCQkuc3ViZGV2aWNlID0gMHg2NjVlLAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjIwMDBILAogCX0seworCQkuc3VidmVuZG9yID0gMHgxMDdkLAorCQkuc3ViZGV2aWNlID0gMHg2ZjJiLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjIwMDBIX0osCisJfSx7CiAJCS5zdWJ2ZW5kb3IgPSAweDE4YWMsCiAJCS5zdWJkZXZpY2UgPSAweGQ4MDAsIC8qIEZ1c2lvbkhEVFYgMyBHb2xkIChvcmlnaW5hbCByZXZpc2lvbikgKi8KIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl8zX0dPTERfUSwKQEAgLTMxNjIsNyArMzIxMiwxMSBAQAogCWNhc2UgIENYODhfQk9BUkRfUFJPRl82MjAwOgogCWNhc2UgIENYODhfQk9BUkRfUFJPRl83MzAwOgogCWNhc2UgIENYODhfQk9BUkRfU0FUVFJBREVfU1Q0MjAwOgorCQljeF93cml0ZShNT19HUDBfSU8sIDB4ODAwMCk7CisJCW1zbGVlcCgxMDApOwogCQljeF93cml0ZShNT19TUlNUX0lPLCAwKTsKKwkJbXNsZWVwKDEwKTsKKwkJY3hfd3JpdGUoTU9fR1AwX0lPLCAweDgwODApOwogCQltc2xlZXAoMTAwKTsKIAkJY3hfd3JpdGUoTU9fU1JTVF9JTywgMSk7CiAJCW1zbGVlcCgxMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCBlMjM3YjUwLi42ZTVkMTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtNDI0LDE3ICs0MjQsMTYgQEAKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2PSBmZS0+ZHZiLT5wcml2OwogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CiAKKwljeF9zZXQoTU9fR1AwX0lPLCAweDYwNDApOwogCXN3aXRjaCAodm9sdGFnZSkgewogCQljYXNlIFNFQ19WT0xUQUdFXzEzOgotCQkJcHJpbnRrKCJMTkIgVm9sdGFnZSBTRUNfVk9MVEFHRV8xM1xuIik7Ci0JCQljeF93cml0ZShNT19HUDBfSU8sIDB4MDAwMDYwNDApOworCQkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDIwKTsKIAkJCWJyZWFrOwogCQljYXNlIFNFQ19WT0xUQUdFXzE4OgotCQkJcHJpbnRrKCJMTkIgVm9sdGFnZSBTRUNfVk9MVEFHRV8xOFxuIik7Ci0JCQljeF93cml0ZShNT19HUDBfSU8sIDB4MDAwMDYwNjApOworCQkJY3hfc2V0KE1PX0dQMF9JTywgMHgyMCk7CiAJCQlicmVhazsKIAkJY2FzZSBTRUNfVk9MVEFHRV9PRkY6Ci0JCQlwcmludGsoIkxOQiBWb2x0YWdlIFNFQ19WT0xUQUdFX29mZlxuIik7CisJCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MjApOwogCQkJYnJlYWs7CiAJfQogCkBAIC00OTksOSArNDk4LDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgemwxMDM1M19jb25maWcgY3g4OF9nZW5pYXRlY2hfeDgwMDBfbXQgPSB7Ci0gICAgICAgLmRlbW9kX2FkZHJlc3MgPSAoMHgxZSA+PiAxKSwKLSAgICAgICAubm9fdHVuZXIgPSAxLAotICAgICAgIC5kaXNhYmxlX2kyY19nYXRlX2N0cmwgPSAxLAorCS5kZW1vZF9hZGRyZXNzID0gKDB4MWUgPj4gMSksCisJLm5vX3R1bmVyID0gMSwKKwkuZGlzYWJsZV9pMmNfZ2F0ZV9jdHJsID0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgczVoMTQxMV9jb25maWcgZHZpY29fZnVzaW9uaGR0djdfY29uZmlnID0gewpAQCAtNjk2LDYgKzY5NSw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMjAwMEg6CisJY2FzZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMjAwMEhfSjoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwTFA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKaW5kZXggZDkxZjVjNS4uNzhiMzYzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCkBAIC0yMyw3ICsyMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNDgsNyArNDgsNyBAQAogCiAJLyogcG9sbCBleHRlcm5hbCBkZWNvZGVyICovCiAJaW50IHBvbGxpbmc7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCXN0cnVjdCBocnRpbWVyIHRpbWVyOwogCXUzMiBncGlvX2FkZHI7CiAJdTMyIGxhc3RfZ3BpbzsKIAl1MzIgbWFza19rZXljb2RlOwpAQCAtMTQ0LDE5ICsxNDQsMjggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGN4ODhfaXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgY3g4OF9pcl93b3JrKHN0cnVjdCBocnRpbWVyICp0aW1lcikKIHsKLQlzdHJ1Y3QgY3g4OF9JUiAqaXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGN4ODhfSVIsIHdvcmsud29yayk7CisJdW5zaWduZWQgbG9uZyBtaXNzZWQ7CisJc3RydWN0IGN4ODhfSVIgKmlyID0gY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgY3g4OF9JUiwgdGltZXIpOwogCiAJY3g4OF9pcl9oYW5kbGVfa2V5KGlyKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKGlyLT5wb2xsaW5nKSk7CisJbWlzc2VkID0gaHJ0aW1lcl9mb3J3YXJkX25vdygmaXItPnRpbWVyLAorCQkJCSAgICAga3RpbWVfc2V0KDAsIGlyLT5wb2xsaW5nICogMTAwMDAwMCkpOworCWlmIChtaXNzZWQgPiAxKQorCQlpcl9kcHJpbnRrKCJNaXNzZWQgdGlja3MgJWxkXG4iLCBtaXNzZWQgLSAxKTsKKworCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7CiB9CiAKIHZvaWQgY3g4OF9pcl9zdGFydChzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCBzdHJ1Y3QgY3g4OF9JUiAqaXIpCiB7CiAJaWYgKGlyLT5wb2xsaW5nKSB7Ci0JCUlOSVRfREVMQVlFRF9XT1JLKCZpci0+d29yaywgY3g4OF9pcl93b3JrKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpci0+d29yaywgMCk7CisJCWhydGltZXJfaW5pdCgmaXItPnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOworCQlpci0+dGltZXIuZnVuY3Rpb24gPSBjeDg4X2lyX3dvcms7CisJCWhydGltZXJfc3RhcnQoJmlyLT50aW1lciwKKwkJCSAgICAgIGt0aW1lX3NldCgwLCBpci0+cG9sbGluZyAqIDEwMDAwMDApLAorCQkJICAgICAgSFJUSU1FUl9NT0RFX1JFTCk7CiAJfQogCWlmIChpci0+c2FtcGxpbmcpIHsKIAkJY29yZS0+cGNpX2lycW1hc2sgfD0gUENJX0lOVF9JUl9TTVBJTlQ7CkBAIC0xNzMsNyArMTgyLDcgQEAKIAl9CiAKIAlpZiAoaXItPnBvbGxpbmcpCi0JCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaXItPndvcmspOworCQlocnRpbWVyX2NhbmNlbCgmaXItPnRpbWVyKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTgyLDcgKzE5MSw3IEBACiB7CiAJc3RydWN0IGN4ODhfSVIgKmlyOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQlJUl9LRVlUQUJfVFlQRSAqaXJfY29kZXMgPSBOVUxMOworCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXMgPSBOVUxMOwogCWludCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKIAlpbnQgZXJyID0gLUVOT01FTTsKIApAQCAtMTk4LDE0ICsyMDcsMTQgQEAKIAljYXNlIENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UOgogCWNhc2UgQ1g4OF9CT0FSRF9LV09STERfRFZCX1Q6CiAJY2FzZSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVF9DWDIyNzAyOgotCQlpcl9jb2RlcyA9IGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJfdDsKKwkJaXJfY29kZXMgPSAmaXJfY29kZXNfZG50dl9saXZlX2R2Yl90X3RhYmxlOwogCQlpci0+Z3Bpb19hZGRyID0gTU9fR1AxX0lPOwogCQlpci0+bWFza19rZXljb2RlID0gMHgxZjsKIAkJaXItPm1hc2tfa2V5dXAgPSAweDYwOwogCQlpci0+cG9sbGluZyA9IDUwOyAvKiBtcyAqLwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8xNDAwX0RWQl9UMToKLQkJaXJfY29kZXMgPSBpcl9jb2Rlc19jaW5lcmd5XzE0MDA7CisJCWlyX2NvZGVzID0gJmlyX2NvZGVzX2NpbmVyZ3lfMTQwMF90YWJsZTsKIAkJaXJfdHlwZSA9IElSX1RZUEVfUEQ7CiAJCWlyLT5zYW1wbGluZyA9IDB4ZWIwNDsgLyogYWRkcmVzcyAqLwogCQlicmVhazsKQEAgLTIyMCwxMyArMjI5LDE0IEBACiAJY2FzZSBDWDg4X0JPQVJEX1BDSERUVl9IRDMwMDA6CiAJY2FzZSBDWDg4X0JPQVJEX1BDSERUVl9IRDU1MDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9JUk9OTFk6Ci0JCWlyX2NvZGVzID0gaXJfY29kZXNfaGF1cHBhdWdlX25ldzsKKwkJaXJfY29kZXMgPSAmaXJfY29kZXNfaGF1cHBhdWdlX25ld190YWJsZTsKIAkJaXJfdHlwZSA9IElSX1RZUEVfUkM1OwogCQlpci0+c2FtcGxpbmcgPSAxOwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYyMDAwSDoKKwljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYyMDAwSF9KOgogCWNhc2UgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjE4MDBIOgotCQlpcl9jb2RlcyA9IGlyX2NvZGVzX3dpbmZhc3Q7CisJCWlyX2NvZGVzID0gJmlyX2NvZGVzX3dpbmZhc3RfdGFibGU7CiAJCWlyLT5ncGlvX2FkZHIgPSBNT19HUDBfSU87CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweDhmODsKIAkJaXItPm1hc2tfa2V5dXAgPSAweDEwMDsKQEAgLTIzNSwxNCArMjQ1LDE0IEBACiAJY2FzZSBDWDg4X0JPQVJEX1dJTkZBU1QyMDAwWFBfRVhQRVJUOgogCWNhc2UgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjEwMDA6CiAJY2FzZSBDWDg4X0JPQVJEX1dJTkZBU1RfVFYyMDAwX1hQX0dMT0JBTDoKLQkJaXJfY29kZXMgPSBpcl9jb2Rlc193aW5mYXN0OworCQlpcl9jb2RlcyA9ICZpcl9jb2Rlc193aW5mYXN0X3RhYmxlOwogCQlpci0+Z3Bpb19hZGRyID0gTU9fR1AwX0lPOwogCQlpci0+bWFza19rZXljb2RlID0gMHg4Zjg7CiAJCWlyLT5tYXNrX2tleXVwID0gMHgxMDA7CiAJCWlyLT5wb2xsaW5nID0gMTsgLyogbXMgKi8KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0lPREFUQV9HVkJDVFY3RToKLQkJaXJfY29kZXMgPSBpcl9jb2Rlc19pb2RhdGFfYmN0djdlOworCQlpcl9jb2RlcyA9ICZpcl9jb2Rlc19pb2RhdGFfYmN0djdlX3RhYmxlOwogCQlpci0+Z3Bpb19hZGRyID0gTU9fR1AwX0lPOwogCQlpci0+bWFza19rZXljb2RlID0gMHhmZDsKIAkJaXItPm1hc2tfa2V5ZG93biA9IDB4MDI7CkBAIC0yNTAsNyArMjYwLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1BST0xJTktfUExBWVRWUFZSOgogCWNhc2UgQ1g4OF9CT0FSRF9QSVhFTFZJRVdfUExBWVRWX1VMVFJBX1BSTzoKLQkJaXJfY29kZXMgPSBpcl9jb2Rlc19waXhlbHZpZXc7CisJCWlyX2NvZGVzID0gJmlyX2NvZGVzX3BpeGVsdmlld190YWJsZTsKIAkJaXItPmdwaW9fYWRkciA9IE1PX0dQMV9JTzsKIAkJaXItPm1hc2tfa2V5Y29kZSA9IDB4MWY7CiAJCWlyLT5tYXNrX2tleXVwID0gMHg4MDsKQEAgLTI1OCwyOCArMjY4LDI4IEBACiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9QUk9MSU5LX1BWXzgwMDBHVDoKIAljYXNlIENYODhfQk9BUkRfUFJPTElOS19QVl9HTE9CQUxfWFRSRU1FOgotCQlpcl9jb2RlcyA9IGlyX2NvZGVzX3BpeGVsdmlld19uZXc7CisJCWlyX2NvZGVzID0gJmlyX2NvZGVzX3BpeGVsdmlld19uZXdfdGFibGU7CiAJCWlyLT5ncGlvX2FkZHIgPSBNT19HUDFfSU87CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweDNmOwogCQlpci0+bWFza19rZXl1cCA9IDB4ODA7CiAJCWlyLT5wb2xsaW5nID0gMTsgLyogbXMgKi8KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0tXT1JMRF9MVFY4ODM6Ci0JCWlyX2NvZGVzID0gaXJfY29kZXNfcGl4ZWx2aWV3OworCQlpcl9jb2RlcyA9ICZpcl9jb2Rlc19waXhlbHZpZXdfdGFibGU7CiAJCWlyLT5ncGlvX2FkZHIgPSBNT19HUDFfSU87CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweDFmOwogCQlpci0+bWFza19rZXl1cCA9IDB4NjA7CiAJCWlyLT5wb2xsaW5nID0gMTsgLyogbXMgKi8KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0FEU1RFQ0hfRFZCX1RfUENJOgotCQlpcl9jb2RlcyA9IGlyX2NvZGVzX2Fkc3RlY2hfZHZiX3RfcGNpOworCQlpcl9jb2RlcyA9ICZpcl9jb2Rlc19hZHN0ZWNoX2R2Yl90X3BjaV90YWJsZTsKIAkJaXItPmdwaW9fYWRkciA9IE1PX0dQMV9JTzsKIAkJaXItPm1hc2tfa2V5Y29kZSA9IDB4YmY7CiAJCWlyLT5tYXNrX2tleXVwID0gMHg0MDsKIAkJaXItPnBvbGxpbmcgPSA1MDsgLyogbXMgKi8KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX01TSV9UVkFOWVdIRVJFX01BU1RFUjoKLQkJaXJfY29kZXMgPSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZTsKKwkJaXJfY29kZXMgPSAmaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfdGFibGU7CiAJCWlyLT5ncGlvX2FkZHIgPSBNT19HUDFfSU87CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweDFmOwogCQlpci0+bWFza19rZXl1cCA9IDB4NDA7CkBAIC0yODcsNDAgKzI5Nyw0MCBAQAogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfQVZFUlRWXzMwMzoKIAljYXNlIENYODhfQk9BUkRfQVZFUlRWX1NUVURJT18zMDM6Ci0JCWlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc19hdmVydHZfMzAzOworCQlpcl9jb2RlcyAgICAgICAgID0gJmlyX2NvZGVzX2F2ZXJ0dl8zMDNfdGFibGU7CiAJCWlyLT5ncGlvX2FkZHIgICAgPSBNT19HUDJfSU87CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweGZiOwogCQlpci0+bWFza19rZXlkb3duID0gMHgwMjsKIAkJaXItPnBvbGxpbmcgICAgICA9IDUwOyAvKiBtcyAqLwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UX1BSTzoKLQkJaXJfY29kZXMgPSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZidF9wcm87Ci0JCWlyX3R5cGUgPSBJUl9UWVBFX1BEOwotCQlpci0+c2FtcGxpbmcgPSAweGZmMDA7IC8qIGFkZHJlc3MgKi8KKwkJaXJfY29kZXMgICAgICAgICA9ICZpcl9jb2Rlc19kbnR2X2xpdmVfZHZidF9wcm9fdGFibGU7CisJCWlyX3R5cGUgICAgICAgICAgPSBJUl9UWVBFX1BEOworCQlpci0+c2FtcGxpbmcgICAgID0gMHhmZjAwOyAvKiBhZGRyZXNzICovCiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9OT1JXT09EX01JQ1JPOgotCQlpcl9jb2RlcyAgICAgICAgID0gaXJfY29kZXNfbm9yd29vZDsKKwkJaXJfY29kZXMgICAgICAgICA9ICZpcl9jb2Rlc19ub3J3b29kX3RhYmxlOwogCQlpci0+Z3Bpb19hZGRyICAgID0gTU9fR1AxX0lPOwogCQlpci0+bWFza19rZXljb2RlID0gMHgwZTsKIAkJaXItPm1hc2tfa2V5dXAgICA9IDB4ODA7CiAJCWlyLT5wb2xsaW5nICAgICAgPSA1MDsgLyogbXMgKi8KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX05QR1RFQ0hfUkVBTFRWX1RPUDEwRk06Ci0JCWlyX2NvZGVzID0gaXJfY29kZXNfbnBndGVjaDsKLQkJaXItPmdwaW9fYWRkciA9IE1PX0dQMF9JTzsKKwkJaXJfY29kZXMgICAgICAgICA9ICZpcl9jb2Rlc19ucGd0ZWNoX3RhYmxlOworCQlpci0+Z3Bpb19hZGRyICAgID0gTU9fR1AwX0lPOwogCQlpci0+bWFza19rZXljb2RlID0gMHhmYTsKLQkJaXItPnBvbGxpbmcgPSA1MDsgLyogbXMgKi8KKwkJaXItPnBvbGxpbmcgICAgICA9IDUwOyAvKiBtcyAqLwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfUElOTkFDTEVfUENUVl9IRF84MDBpOgotCQlpcl9jb2RlcyA9IGlyX2NvZGVzX3Bpbm5hY2xlX3BjdHZfaGQ7Ci0JCWlyX3R5cGUgPSBJUl9UWVBFX1JDNTsKLQkJaXItPnNhbXBsaW5nID0gMTsKKwkJaXJfY29kZXMgICAgICAgICA9ICZpcl9jb2Rlc19waW5uYWNsZV9wY3R2X2hkX3RhYmxlOworCQlpcl90eXBlICAgICAgICAgID0gSVJfVFlQRV9SQzU7CisJCWlyLT5zYW1wbGluZyAgICAgPSAxOwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfUE9XRVJDT0xPUl9SRUFMX0FOR0VMOgotCQlpcl9jb2RlcyA9IGlyX2NvZGVzX3Bvd2VyY29sb3JfcmVhbF9hbmdlbDsKLQkJaXItPmdwaW9fYWRkciA9IE1PX0dQMl9JTzsKKwkJaXJfY29kZXMgICAgICAgICA9ICZpcl9jb2Rlc19wb3dlcmNvbG9yX3JlYWxfYW5nZWxfdGFibGU7CisJCWlyLT5ncGlvX2FkZHIgICAgPSBNT19HUDJfSU87CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweDdlOwotCQlpci0+cG9sbGluZyA9IDEwMDsgLyogbXMgKi8KKwkJaXItPnBvbGxpbmcgICAgICA9IDEwMDsgLyogbXMgKi8KIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAppbmRleCA5ZDgzNzYyLi5kNWNlYTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKQEAgLTIzNyw2ICsyMzcsNyBAQAogI2RlZmluZSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfSFRfUENJX01LSUkgNzkKICNkZWZpbmUgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSVJPTkxZICAgICAgICA4MAogI2RlZmluZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTgwMEggICAgICAgIDgxCisjZGVmaW5lIENYODhfQk9BUkRfV0lORkFTVF9EVFYyMDAwSF9KICAgICAgODIKIAogZW51bSBjeDg4X2l0eXBlIHsKIAlDWDg4X1ZNVVhfQ09NUE9TSVRFMSA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCmluZGV4IDFjMmU1NDQuLjdlM2M3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCkBAIC0yOTksNiArMjk5LDcgQEAKIAlbRU0yODIwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjUwXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJUZXJyYXRlYyBDaW5lcmd5IDI1MCBVU0IiLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAorCQkuaGFzX2lyX2kyYyAgID0gMSwKIAkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAogCQkuaW5wdXQgICAgICAgID0geyB7CkBAIC0zMTgsNiArMzE5LDcgQEAKIAlbRU0yODIwX0JPQVJEX1BJTk5BQ0xFX1VTQl8yXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJQaW5uYWNsZSBQQ1RWIFVTQiAyIiwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKKwkJLmhhc19pcl9pMmMgICA9IDEsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExWCwKIAkJLmlucHV0ICAgICAgICA9IHsgewpAQCAtMzQyLDYgKzM0NCw3IEBACiAJCQkJVERBOTg4N19QT1JUMl9BQ1RJVkUsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmhhc19tc3AzNHh4ICA9IDEsCisJCS5oYXNfaXJfaTJjICAgPSAxLAogCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLApAQCAtNTU4LDYgKzU2MSwyNyBAQAogCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSB9LAogCX0sCisJW0VNMjg2MV9CT0FSRF9HQURNRUlfVVRWMzMwUExVU10gPSB7CisJCS5uYW1lICAgICAgICAgPSAiR2FkbWVpIFVUVjMzMCsiLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfVE5GXzUzMzVNRiwKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmlyX2NvZGVzICAgICA9ICZpcl9jb2Rlc19nYWRtZWlfcm0wMDh6X3RhYmxlLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS54Y2xrICAgICAgICAgPSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfMTJNSFosCisJCS5pbnB1dCAgICAgICAgPSB7IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTIsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCX0gfSwKKwl9LAogCVtFTTI4NjBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJUZXJyYXRlYyBDaW5lcmd5IEEgSHlicmlkIFhTIiwKIAkJLnZhbGlkICAgICAgICA9IEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVELApAQCAtNzE1LDcgKzczOSw3IEBACiAJCS5tdHNfZmlybXdhcmUgPSAxLAogCQkuaGFzX2R2YiAgICAgID0gMSwKIAkJLmR2Yl9ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2RpZ2l0YWwsCi0JCS5pcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3LAorCQkuaXJfY29kZXMgICAgID0gJmlyX2NvZGVzX2hhdXBwYXVnZV9uZXdfdGFibGUsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKQEAgLTc0MCw3ICs3NjQsNyBAQAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAogCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkubXRzX2Zpcm13YXJlID0gMSwKLQkJLmlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXcsCisJCS5pcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfaGF1cHBhdWdlX25ld190YWJsZSwKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAogCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLApAQCAtNzY2LDcgKzc5MCw3IEBACiAJCS5tdHNfZmlybXdhcmUgICA9IDEsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCiAJCS5kdmJfZ3BpbyAgICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2RpZ2l0YWwsCi0JCS5pcl9jb2RlcyAgICAgICA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXcsCisJCS5pcl9jb2RlcyAgICAgICA9ICZpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3X3RhYmxlLAogCQkuZGVjb2RlciAgICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmlucHV0ICAgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLApAQCAtNzkyLDcgKzgxNiw3IEBACiAJCS5tdHNfZmlybXdhcmUgICA9IDEsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCiAJCS5kdmJfZ3BpbyAgICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2RpZ2l0YWwsCi0JCS5pcl9jb2RlcyAgICAgICA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXcsCisJCS5pcl9jb2RlcyAgICAgICA9ICZpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3X3RhYmxlLAogCQkuZGVjb2RlciAgICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmlucHV0ICAgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLApAQCAtODE4LDcgKzg0Miw3IEBACiAJCS5tdHNfZmlybXdhcmUgICA9IDEsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCiAJCS5kdmJfZ3BpbyAgICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2RpZ2l0YWwsCi0JCS5pcl9jb2RlcyAgICAgICA9IGlyX2NvZGVzX3Bpbm5hY2xlX3BjdHZfaGQsCisJCS5pcl9jb2RlcyAgICAgICA9ICZpcl9jb2Rlc19waW5uYWNsZV9wY3R2X2hkX3RhYmxlLAogCQkuZGVjb2RlciAgICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmlucHV0ICAgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLApAQCAtODQ0LDcgKzg2OCw3IEBACiAJCS5tdHNfZmlybXdhcmUgICA9IDEsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCiAJCS5kdmJfZ3BpbyAgICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2RpZ2l0YWwsCi0JCS5pcl9jb2RlcyAgICAgICA9IGlyX2NvZGVzX2F0aV90dl93b25kZXJfaGRfNjAwLAorCQkuaXJfY29kZXMgICAgICAgPSAmaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDBfdGFibGUsCiAJCS5kZWNvZGVyICAgICAgICA9IEVNMjhYWF9UVlA1MTUwLAogCQkuaW5wdXQgICAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCkBAIC04NzAsNiArODk0LDggQEAKIAkJLmRlY29kZXIgICAgICAgID0gRU0yOFhYX1RWUDUxNTAsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCiAJCS5kdmJfZ3BpbyAgICAgICA9IGRlZmF1bHRfZGlnaXRhbCwKKwkJLmlyX2NvZGVzICAgICAgID0gJmlyX2NvZGVzX3RlcnJhdGVjX2NpbmVyZ3lfeHNfdGFibGUsCisJCS54Y2xrICAgICAgICAgICA9IEVNMjhYWF9YQ0xLX0ZSRVFVRU5DWV8xMk1IWiwgLyogTkVDIElSICovCiAJCS5pbnB1dCAgICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKQEAgLTkzNyw2ICs5NjMsNyBAQAogCVtFTTI4MDBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yMDBdID0gewogCQkubmFtZSAgICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgMjAwIFVTQiIsCiAJCS5pc19lbTI4MDAgICAgPSAxLAorCQkuaGFzX2lyX2kyYyAgID0gMSwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKIAkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLApAQCAtMTAxMCw3ICsxMDM3LDggQEAKIAkJfSB9LAogCX0sCiAJW0VNMjgyMF9CT0FSRF9QSU5OQUNMRV9EVkNfOTBdID0gewotCQkubmFtZSAgICAgICAgID0gIlBpbm5hY2xlIERhenpsZSBEVkMgOTAvMTAwLzEwMS8xMDcgLyBLYWlzZXIgQmFhcyBWaWRlbyB0byBEVkQgbWFrZXIiLAorCQkubmFtZSAgICAgICAgID0gIlBpbm5hY2xlIERhenpsZSBEVkMgOTAvMTAwLzEwMS8xMDcgLyBLYWlzZXIgQmFhcyBWaWRlbyB0byBEVkQgbWFrZXIgIgorCQkJCSIvIEt3b3JsZCBEVkQgTWFrZXIgMiIsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsIC8qIGNhcHR1cmUgb25seSBib2FyZCAqLwogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCiAJCS5pbnB1dCAgICAgICAgPSB7IHsKQEAgLTE0MjAsNyArMTQ0OCw3IEBACiAJCS5tdHNfZmlybXdhcmUgPSAxLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCiAJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCi0JCS5pcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19rYWlvbXksCisJCS5pcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfa2Fpb215X3RhYmxlLAogCQkuaW5wdXQgICAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCkBAIC0xNTIwLDcgKzE1NDgsNyBAQAogCQkubXRzX2Zpcm13YXJlID0gMSwKIAkJLmhhc19kdmIgICAgICA9IDEsCiAJCS5kdmJfZ3BpbyAgICAgPSBldmdhX2luZHR1YmVfZGlnaXRhbCwKLQkJLmlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2V2Z2FfaW5kdHViZSwKKwkJLmlyX2NvZGVzICAgICA9ICZpcl9jb2Rlc19ldmdhX2luZHR1YmVfdGFibGUsCiAJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCkBAIC0xNTkxLDYgKzE2MTksOCBAQAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODcwX0JPQVJEX0tXT1JMRF8zNTVVIH0sCiAJeyBVU0JfREVWSUNFKDB4MWI4MCwgMHhlMzAyKSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9QSU5OQUNMRV9EVkNfOTAgfSwgLyogS2Fpc2VyIEJhYXMgVmlkZW8gdG8gRFZEIG1ha2VyICovCisJeyBVU0JfREVWSUNFKDB4MWI4MCwgMHhlMzA0KSwKKwkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9QSU5OQUNMRV9EVkNfOTAgfSwgLyogS3dvcmxkIERWRCBNYWtlciAyICovCiAJeyBVU0JfREVWSUNFKDB4MGNjZCwgMHgwMDM2KSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzI1MCB9LAogCXsgVVNCX0RFVklDRSgweDBjY2QsIDB4MDA0YyksCkBAIC0xNjQ5LDYgKzE2NzksOCBAQAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODYxX0JPQVJEX1BMRVhUT1JfUFhfVFYxMDBVIH0sCiAJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwNTE1KSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9JT0RBVEFfR1ZNVlBfU1ogfSwKKwl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDUwYTYpLAorCQkJLmRyaXZlcl9pbmZvID0gRU0yODYwX0JPQVJEX0dBRE1FSV9VVFYzMzAgfSwKIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGVtMjh4eF9pZF90YWJsZSk7CkBAIC0xNjYxLDcgKzE2OTMsNyBAQAogCXsweDZjZTA1YThmLCBFTTI4MjBfQk9BUkRfUFJPTElOS19QTEFZVFZfVVNCMiwgVFVORVJfWU1FQ19UVkZfNTUzM01GfSwKIAl7MHg3MmNjNWE4YiwgRU0yODIwX0JPQVJEX1BST0xJTktfUExBWVRWX0JPWDRfVVNCMiwgVFVORVJfWU1FQ19UVkZfNTUzM01GfSwKIAl7MHg5NjZhMDQ0MSwgRU0yODgwX0JPQVJEX0tXT1JMRF9EVkJfMzEwVSwgVFVORVJfWEMyMDI4fSwKLQl7MHg5NTY3ZWIxYSwgRU0yODgwX0JPQVJEX0VNUElSRV9EVUFMX1RWLCBUVU5FUl9YQzIwMjh9LAorCXsweDE2NmEwNDQxLCBFTTI4ODBfQk9BUkRfRU1QSVJFX0RVQUxfVFYsIFRVTkVSX1hDMjAyOH0sCiAJezB4Y2VlNDRhOTksIEVNMjg4Ml9CT0FSRF9FVkdBX0lORFRVQkUsIFRVTkVSX1hDMjAyOH0sCiAJezB4Yjg4NDZiMjAsIEVNMjg4MV9CT0FSRF9QSU5OQUNMRV9IWUJSSURfUFJPLCBUVU5FUl9YQzIwMjh9LAogfTsKQEAgLTE2NzIsNiArMTcwNCw3IEBACiAJezB4ZjUxMjAwZTMsIEVNMjgwMF9CT0FSRF9WR0VBUl9QT0NLRVRUViwgVFVORVJfTEdfUEFMX05FV19UQVBDfSwKIAl7MHgxYmE1MDA4MCwgRU0yODYwX0JPQVJEX1NBQTcxMVhfUkVGRVJFTkNFX0RFU0lHTiwgVFVORVJfQUJTRU5UfSwKIAl7MHhjNTEyMDBlMywgRU0yODIwX0JPQVJEX0dBRE1FSV9UVlIyMDAsIFRVTkVSX0xHX1BBTF9ORVdfVEFQQ30sCisJezB4NGJhNTAwODAsIEVNMjg2MV9CT0FSRF9HQURNRUlfVVRWMzMwUExVUywgVFVORVJfVE5GXzUzMzVNRn0sCiB9OwogCiAvKiBJMkMgcG9zc2libGUgYWRkcmVzcyB0byBzYWE3MTE1LCB0dnA1MTUwLCBtc3AzNDAwLCB0dmF1ZGlvICovCkBAIC0yMTcwLDggKzIyMDMsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHZvaWQgZW0yOHh4X3JlZ2lzdGVyX2kyY19pcihzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0Jc3RydWN0IElSX2kyY19pbml0X2RhdGEgaW5pdF9kYXRhOwogCWNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJfbGlzdFtdID0gewogCQkgMHgzMCwgMHg0NywgSTJDX0NMSUVOVF9FTkQKIAl9OwpAQCAtMjE3OSw0NSArMjIxMCwzMyBAQAogCWlmIChkaXNhYmxlX2lyKQogCQlyZXR1cm47CiAKLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKLQltZW1zZXQoJmluaXRfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhKSk7Ci0Jc3RybGNweShpbmZvLnR5cGUsICJpcl92aWRlbyIsIEkyQ19OQU1FX1NJWkUpOworCW1lbXNldCgmZGV2LT5pbmZvLCAwLCBzaXplb2YoJmRldi0+aW5mbykpOworCW1lbXNldCgmZGV2LT5pbml0X2RhdGEsIDAsIHNpemVvZihkZXYtPmluaXRfZGF0YSkpOworCXN0cmxjcHkoZGV2LT5pbmZvLnR5cGUsICJpcl92aWRlbyIsIEkyQ19OQU1FX1NJWkUpOwogCiAJLyogZGV0ZWN0ICYgY29uZmlndXJlICovCiAJc3dpdGNoIChkZXYtPm1vZGVsKSB7Ci0JY2FzZSAoRU0yODAwX0JPQVJEX1VOS05PV04pOgorCWNhc2UgRU0yODAwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjAwOgorCWNhc2UgRU0yODIwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjUwOgorCQlkZXYtPmluaXRfZGF0YS5pcl9jb2RlcyA9ICZpcl9jb2Rlc19lbV90ZXJyYXRlY190YWJsZTsKKwkJZGV2LT5pbml0X2RhdGEuZ2V0X2tleSA9IGVtMjh4eF9nZXRfa2V5X3RlcnJhdGVjOworCQlkZXYtPmluaXRfZGF0YS5uYW1lID0gImkyYyBJUiAoRU0yOFhYIFRlcnJhdGVjKSI7CiAJCWJyZWFrOwotCWNhc2UgKEVNMjgyMF9CT0FSRF9VTktOT1dOKToKKwljYXNlIEVNMjgyMF9CT0FSRF9QSU5OQUNMRV9VU0JfMjoKKwkJZGV2LT5pbml0X2RhdGEuaXJfY29kZXMgPSAmaXJfY29kZXNfcGlubmFjbGVfZ3JleV90YWJsZTsKKwkJZGV2LT5pbml0X2RhdGEuZ2V0X2tleSA9IGVtMjh4eF9nZXRfa2V5X3Bpbm5hY2xlX3VzYl9ncmV5OworCQlkZXYtPmluaXRfZGF0YS5uYW1lID0gImkyYyBJUiAoRU0yOFhYIFBpbm5hY2xlIFBDVFYpIjsKIAkJYnJlYWs7Ci0JY2FzZSAoRU0yODAwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjAwKToKLQljYXNlIChFTTI4MjBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yNTApOgotCQlpbml0X2RhdGEuaXJfY29kZXMgPSBpcl9jb2Rlc19lbV90ZXJyYXRlYzsKLQkJaW5pdF9kYXRhLmdldF9rZXkgPSBlbTI4eHhfZ2V0X2tleV90ZXJyYXRlYzsKLQkJaW5pdF9kYXRhLm5hbWUgPSAiaTJjIElSIChFTTI4WFggVGVycmF0ZWMpIjsKLQkJYnJlYWs7Ci0JY2FzZSAoRU0yODIwX0JPQVJEX1BJTk5BQ0xFX1VTQl8yKToKLQkJaW5pdF9kYXRhLmlyX2NvZGVzID0gaXJfY29kZXNfcGlubmFjbGVfZ3JleTsKLQkJaW5pdF9kYXRhLmdldF9rZXkgPSBlbTI4eHhfZ2V0X2tleV9waW5uYWNsZV91c2JfZ3JleTsKLQkJaW5pdF9kYXRhLm5hbWUgPSAiaTJjIElSIChFTTI4WFggUGlubmFjbGUgUENUVikiOwotCQlicmVhazsKLQljYXNlIChFTTI4MjBfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX1VTQl8yKToKLQkJaW5pdF9kYXRhLmlyX2NvZGVzID0gaXJfY29kZXNfaGF1cHBhdWdlX25ldzsKLQkJaW5pdF9kYXRhLmdldF9rZXkgPSBlbTI4eHhfZ2V0X2tleV9lbV9oYXVwOwotCQlpbml0X2RhdGEubmFtZSA9ICJpMmMgSVIgKEVNMjg0MCBIYXVwcGF1Z2UpIjsKLQkJYnJlYWs7Ci0JY2FzZSAoRU0yODIwX0JPQVJEX01TSV9WT1hfVVNCXzIpOgotCQlicmVhazsKLQljYXNlIChFTTI4MDBfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1VTQklJKToKLQkJYnJlYWs7Ci0JY2FzZSAoRU0yODAwX0JPQVJEX0tXT1JMRF9VU0IyODAwKToKLQkJYnJlYWs7Ci0JY2FzZSAoRU0yODAwX0JPQVJEX0dSQUJCRUVYX1VTQjI4MDApOgorCWNhc2UgRU0yODIwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9VU0JfMjoKKwkJZGV2LT5pbml0X2RhdGEuaXJfY29kZXMgPSAmaXJfY29kZXNfaGF1cHBhdWdlX25ld190YWJsZTsKKwkJZGV2LT5pbml0X2RhdGEuZ2V0X2tleSA9IGVtMjh4eF9nZXRfa2V5X2VtX2hhdXA7CisJCWRldi0+aW5pdF9kYXRhLm5hbWUgPSAiaTJjIElSIChFTTI4NDAgSGF1cHBhdWdlKSI7CiAJCWJyZWFrOwogCX0KIAotCWlmIChpbml0X2RhdGEubmFtZSkKLQkJaW5mby5wbGF0Zm9ybV9kYXRhID0gJmluaXRfZGF0YTsKLQlpMmNfbmV3X3Byb2JlZF9kZXZpY2UoJmRldi0+aTJjX2FkYXAsICZpbmZvLCBhZGRyX2xpc3QpOworCWlmIChkZXYtPmluaXRfZGF0YS5uYW1lKQorCQlkZXYtPmluZm8ucGxhdGZvcm1fZGF0YSA9ICZkZXYtPmluaXRfZGF0YTsKKwlpMmNfbmV3X3Byb2JlZF9kZXZpY2UoJmRldi0+aTJjX2FkYXAsICZkZXYtPmluZm8sIGFkZHJfbGlzdCk7CiB9CiAKIHZvaWQgZW0yOHh4X2NhcmRfc2V0dXAoc3RydWN0IGVtMjh4eCAqZGV2KQpAQCAtMjI1Myw3ICsyMjcyLDcgQEAKIAljYXNlIEVNMjg4M19CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzk1MDoKIAl7CiAJCXN0cnVjdCB0dmVlcHJvbSB0djsKLSNpZmRlZiBDT05GSUdfTU9EVUxFUworI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRVMpICYmIGRlZmluZWQoTU9EVUxFKQogCQlyZXF1ZXN0X21vZHVsZSgidHZlZXByb20iKTsKICNlbmRpZgogCQkvKiBDYWxsIGZpcnN0IFRWZWVwcm9tICovCkBAIC0yMjY3LDEwICsyMjg2LDYgQEAKIAkJCWRldi0+aTJzX3NwZWVkID0gMjA0ODAwMDsKIAkJCWRldi0+Ym9hcmQuaGFzX21zcDM0eHggPSAxOwogCQl9Ci0jaWZkZWYgQ09ORklHX01PRFVMRVMKLQkJaWYgKHR2Lmhhc19pcikKLQkJCXJlcXVlc3RfbW9kdWxlKCJpci1rYmQtaTJjIik7Ci0jZW5kaWYKIAkJYnJlYWs7CiAJfQogCWNhc2UgRU0yODgyX0JPQVJEX0tXT1JMRF9BVFNDXzMxNVU6CkBAIC0yMzExLDYgKzIzMjYsMTAgQEAKIAkJYnJlYWs7CiAJfQogCisjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFUykgJiYgZGVmaW5lZChNT0RVTEUpCisJaWYgKGRldi0+Ym9hcmQuaGFzX2lyX2kyYyAmJiAhZGlzYWJsZV9pcikKKwkJcmVxdWVzdF9tb2R1bGUoImlyLWtiZC1pMmMiKTsKKyNlbmRpZgogCWlmIChkZXYtPmJvYXJkLmhhc19zbmFwc2hvdF9idXR0b24pCiAJCWVtMjh4eF9yZWdpc3Rlcl9zbmFwc2hvdF9idXR0b24oZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCmluZGV4IDI3ZTMzYTIuLjcxNDc0ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKQEAgLTQ1OSw3ICs0NTksNiBAQAogc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBlbTI4eHhfYWRhcF90ZW1wbGF0ZSA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmFtZSA9ICJlbTI4eHgiLAotCS5pZCA9IEkyQ19IV19CX0VNMjhYWCwKIAkuYWxnbyA9ICZlbTI4eHhfYWxnbywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKaW5kZXggYWIwNzlkOS4uYTZiZGJjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCiAvKiBzdXBwb3J0ZWQgY29udHJvbHMgKi8KIC8qIENvbW1vbiB0byBhbGwgYm9hcmRzICovCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIGVtMjh4eF9xY3RybFtdID0geworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBhYzk3X3FjdHJsW10gPSB7CiAJewogCQkuaWQgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTEzMyw3ICsxMzMsNyBAQAogCQkubWF4aW11bSA9IDB4MWYsCiAJCS5zdGVwID0gMHgxLAogCQkuZGVmYXVsdF92YWx1ZSA9IDB4MWYsCi0JCS5mbGFncyA9IDAsCisJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKIAl9LCB7CiAJCS5pZCA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKQEAgLTYwOSwxMCArNjA5LDI5IEBACiB9CiAKIC8qCi0gKiBlbTI4eHhfZ2V0X2N0cmwoKQotICogcmV0dXJuIHRoZSBjdXJyZW50IHNhdHVyYXRpb24sIGJyaWdodG5lc3Mgb3IgY29udHJhc3QsIG11dGUgc3RhdGUKKyAqIGFjOTdfcXVlcnljdHJsKCkKKyAqIHJldHVybiB0aGUgYWM5NyBzdXBwb3J0ZWQgY29udHJvbHMKICAqLwotc3RhdGljIGludCBlbTI4eHhfZ2V0X2N0cmwoc3RydWN0IGVtMjh4eCAqZGV2LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBhYzk3X3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWM5N19xY3RybCk7IGkrKykgeworCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSBhYzk3X3FjdHJsW2ldLmlkKSB7CisJCQltZW1jcHkocWMsICYoYWM5N19xY3RybFtpXSksIHNpemVvZigqcWMpKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogQ29udHJvbCBpcyBub3QgYWM5NyByZWxhdGVkICovCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBhYzk3X2dldF9jdHJsKCkKKyAqIHJldHVybiB0aGUgY3VycmVudCB2YWx1ZXMgZm9yIGFjOTcgbXV0ZSBhbmQgdm9sdW1lCisgKi8KK3N0YXRpYyBpbnQgYWM5N19nZXRfY3RybChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTYyMiwyOSArNjQxLDQxIEBACiAJCWN0cmwtPnZhbHVlID0gZGV2LT52b2x1bWU7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQkvKiBDb250cm9sIGlzIG5vdCBhYzk3IHJlbGF0ZWQgKi8KKwkJcmV0dXJuIDE7CiAJfQogfQogCiAvKgotICogZW0yOHh4X3NldF9jdHJsKCkKLSAqIG11dGUgb3Igc2V0IG5ldyBzYXR1cmF0aW9uLCBicmlnaHRuZXNzIG9yIGNvbnRyYXN0CisgKiBhYzk3X3NldF9jdHJsKCkKKyAqIHNldCB2YWx1ZXMgZm9yIGFjOTcgbXV0ZSBhbmQgdm9sdW1lCiAgKi8KLXN0YXRpYyBpbnQgZW0yOHh4X3NldF9jdHJsKHN0cnVjdCBlbTI4eHggKmRldiwgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgYWM5N19zZXRfY3RybChzdHJ1Y3QgZW0yOHh4ICpkZXYsIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhYzk3X3FjdHJsKTsgaSsrKQorCQlpZiAoY3RybC0+aWQgPT0gYWM5N19xY3RybFtpXS5pZCkKKwkJCWdvdG8gaGFuZGxlOworCisJLyogQW5ub3VuY2UgdGhhdCBoYXNuJ3QgaGFuZGxlIGl0ICovCisJcmV0dXJuIDE7CisKK2hhbmRsZToKKwlpZiAoY3RybC0+dmFsdWUgPCBhYzk3X3FjdHJsW2ldLm1pbmltdW0gfHwKKwkgICAgY3RybC0+dmFsdWUgPiBhYzk3X3FjdHJsW2ldLm1heGltdW0pCisJCXJldHVybiAtRVJBTkdFOworCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJaWYgKGN0cmwtPnZhbHVlICE9IGRldi0+bXV0ZSkgewotCQkJZGV2LT5tdXRlID0gY3RybC0+dmFsdWU7Ci0JCQlyZXR1cm4gZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoZGV2KTsKLQkJfQotCQlyZXR1cm4gMDsKKwkJZGV2LT5tdXRlID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCQlkZXYtPnZvbHVtZSA9IGN0cmwtPnZhbHVlOwotCQlyZXR1cm4gZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoZGV2KTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CiAJfQorCisJcmV0dXJuIGVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KGRldik7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfZGV2KHN0cnVjdCBlbTI4eHggKmRldikKQEAgLTk3NCw2ICsxMDA1LDkgQEAKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAgKmZoICAgID0gcHJpdjsKIAlzdHJ1Y3QgZW0yOHh4ICAgICAgKmRldiAgID0gZmgtPmRldjsKIAorCWlmICghZGV2LT5hdWRpb19tb2RlLmhhc19hdWRpbykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlzd2l0Y2ggKGEtPmluZGV4KSB7CiAJY2FzZSBFTTI4WFhfQU1VWF9WSURFTzoKIAkJc3RyY3B5KGEtPm5hbWUsICJUZWxldmlzaW9uIik7CkBAIC0xMDE1LDYgKzEwNDksOSBAQAogCXN0cnVjdCBlbTI4eHggICAgICAqZGV2ID0gZmgtPmRldjsKIAogCisJaWYgKCFkZXYtPmF1ZGlvX21vZGUuaGFzX2F1ZGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChhLT5pbmRleCA+PSBNQVhfRU0yOFhYX0lOUFVUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoMCA9PSBJTlBVVChhLT5pbmRleCktPnR5cGUpCkBAIC0xMDM4LDcgKzEwNzUsNiBAQAogCXN0cnVjdCBlbTI4eHhfZmggICAgICAqZmggID0gcHJpdjsKIAlzdHJ1Y3QgZW0yOHh4ICAgICAgICAgKmRldiA9IGZoLT5kZXY7CiAJaW50ICAgICAgICAgICAgICAgICAgIGlkICA9IHFjLT5pZDsKLQlpbnQgICAgICAgICAgICAgICAgICAgaTsKIAlpbnQgICAgICAgICAgICAgICAgICAgcmM7CiAKIAlyYyA9IGNoZWNrX2RldihkZXYpOwpAQCAtMTA0OSwxNSArMTA4NSwxNCBAQAogCiAJcWMtPmlkID0gaWQ7CiAKLQlpZiAoIWRldi0+Ym9hcmQuaGFzX21zcDM0eHgpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW0yOHh4X3FjdHJsKTsgaSsrKSB7Ci0JCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSBlbTI4eHhfcWN0cmxbaV0uaWQpIHsKLQkJCQltZW1jcHkocWMsICYoZW0yOHh4X3FjdHJsW2ldKSwgc2l6ZW9mKCpxYykpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9CisJLyogZW51bWJlcmF0ZSBBQzk3IGNvbnRyb2xzICovCisJaWYgKGRldi0+YXVkaW9fbW9kZS5hYzk3ICE9IEVNMjhYWF9OT19BQzk3KSB7CisJCXJjID0gYWM5N19xdWVyeWN0cmwocWMpOworCQlpZiAoIXJjKQorCQkJcmV0dXJuIDA7CiAJfQogCisJLyogZW51bWJlcmF0ZSBWNEwyIGRldmljZSBjb250cm9scyAqLwogCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIHF1ZXJ5Y3RybCwgcWMpOwogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKQEAgLTEwODIsMTQgKzExMTcsMTYgQEAKIAogCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKLQlpZiAoZGV2LT5ib2FyZC5oYXNfbXNwMzR4eCkKKwkvKiBTZXQgYW4gQUM5NyBjb250cm9sICovCisJaWYgKGRldi0+YXVkaW9fbW9kZS5hYzk3ICE9IEVNMjhYWF9OT19BQzk3KQorCQlyYyA9IGFjOTdfZ2V0X2N0cmwoZGV2LCBjdHJsKTsKKwllbHNlCisJCXJjID0gMTsKKworCS8qIEl0IHdlcmUgbm90IGFuIEFDOTcgY29udHJvbC4gU2VuZHMgaXQgdG8gdGhlIHY0bDIgZGV2IGludGVyZmFjZSAqLworCWlmIChyYyA9PSAxKSB7CiAJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBjb3JlLCBnX2N0cmwsIGN0cmwpOwotCWVsc2UgewotCQlyYyA9IGVtMjh4eF9nZXRfY3RybChkZXYsIGN0cmwpOwotCQlpZiAocmMgPCAwKSB7Ci0JCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgY29yZSwgZ19jdHJsLCBjdHJsKTsKLQkJCXJjID0gMDsKLQkJfQorCQlyYyA9IDA7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwpAQCAtMTEwMSw3ICsxMTM4LDYgQEAKIHsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgKmZoICA9IHByaXY7CiAJc3RydWN0IGVtMjh4eCAgICAgICAgICpkZXYgPSBmaC0+ZGV2OwotCXU4ICAgICAgICAgICAgICAgICAgICBpOwogCWludCAgICAgICAgICAgICAgICAgICByYzsKIAogCXJjID0gY2hlY2tfZGV2KGRldik7CkBAIC0xMTEwLDI4ICsxMTQ2LDMxIEBACiAKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCi0JaWYgKGRldi0+Ym9hcmQuaGFzX21zcDM0eHgpCi0JCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBjb3JlLCBzX2N0cmwsIGN0cmwpOwotCWVsc2UgeworCS8qIFNldCBhbiBBQzk3IGNvbnRyb2wgKi8KKwlpZiAoZGV2LT5hdWRpb19tb2RlLmFjOTcgIT0gRU0yOFhYX05PX0FDOTcpCisJCXJjID0gYWM5N19zZXRfY3RybChkZXYsIGN0cmwpOworCWVsc2UKIAkJcmMgPSAxOwotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbTI4eHhfcWN0cmwpOyBpKyspIHsKLQkJCWlmIChjdHJsLT5pZCA9PSBlbTI4eHhfcWN0cmxbaV0uaWQpIHsKLQkJCQlpZiAoY3RybC0+dmFsdWUgPCBlbTI4eHhfcWN0cmxbaV0ubWluaW11bSB8fAotCQkJCSAgICBjdHJsLT52YWx1ZSA+IGVtMjh4eF9xY3RybFtpXS5tYXhpbXVtKSB7Ci0JCQkJCXJjID0gLUVSQU5HRTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQogCi0JCQkJcmMgPSBlbTI4eHhfc2V0X2N0cmwoZGV2LCBjdHJsKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCS8qIENvbnRyb2wgbm90IGZvdW5kIC0gdHJ5IHRvIHNlbmQgaXQgdG8gdGhlIGF0dGFjaGVkIGRldmljZXMgKi8KKwkvKiBJdCBpc24ndCBhbiBBQzk3IGNvbnRyb2wuIFNlbmRzIGl0IHRvIHRoZSB2NGwyIGRldiBpbnRlcmZhY2UgKi8KIAlpZiAocmMgPT0gMSkgewogCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgY29yZSwgc19jdHJsLCBjdHJsKTsKLQkJcmMgPSAwOworCisJCS8qCisJCSAqIEluIHRoZSBjYXNlIG9mIG5vbi1BQzk3IHZvbHVtZSBjb250cm9scywgd2Ugc3RpbGwgbmVlZAorCQkgKiB0byBkbyBzb21lIHNldHVwcyBhdCBlbTI4eHgsIGluIG9yZGVyIHRvIG11dGUvdW5tdXRlCisJCSAqIGFuZCB0byBhZGp1c3QgYXVkaW8gdm9sdW1lLiBIb3dldmVyLCB0aGUgdmFsdWUgcmFuZ2VzCisJCSAqIHNob3VsZCBiZSBjaGVja2VkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIFY0TCBzdWJkcml2ZXIuCisJCSAqLworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCWRldi0+bXV0ZSA9IGN0cmwtPnZhbHVlOworCQkJcmMgPSBlbTI4eHhfYXVkaW9fYW5hbG9nX3NldChkZXYpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJZGV2LT52b2x1bWUgPSBjdHJsLT52YWx1ZTsKKwkJCXJjID0gZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoZGV2KTsKKwkJfQogCX0KIAogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKQEAgLTEyNzUsOCArMTMxNCw5IEBACiAJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBjb3JlLCBnX3JlZ2lzdGVyLCByZWcpOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUjoKLQkJLyogTm90IHN1cHBvcnRlZCB5ZXQgKi8KLQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIFRPRE86IGlzIHRoaXMgY29ycmVjdD8gKi8KKwkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIGdfcmVnaXN0ZXIsIHJlZyk7CisJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCWlmICghdjRsMl9jaGlwX21hdGNoX2hvc3QoJnJlZy0+bWF0Y2gpKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzI3LDggKzEzNjcsOSBAQAogCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgY29yZSwgc19yZWdpc3RlciwgcmVnKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFI6Ci0JCS8qIE5vdCBzdXBwb3J0ZWQgeWV0ICovCi0JCXJldHVybiAtRUlOVkFMOworCQkvKiBUT0RPOiBpcyB0aGlzIGNvcnJlY3Q/ICovCisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBjb3JlLCBzX3JlZ2lzdGVyLCByZWcpOworCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgogCQlpZiAoIXY0bDJfY2hpcF9tYXRjaF9ob3N0KCZyZWctPm1hdGNoKSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTQzMSw5ICsxNDcyLDExIEBACiAJY2FwLT5jYXBhYmlsaXRpZXMgPQogCQkJVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFIHwKIAkJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAotCQkJVjRMMl9DQVBfQVVESU8gfAogCQkJVjRMMl9DQVBfUkVBRFdSSVRFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOwogCisJaWYgKGRldi0+YXVkaW9fbW9kZS5oYXNfYXVkaW8pCisJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX0FVRElPOworCiAJaWYgKGRldi0+dHVuZXJfdHlwZSAhPSBUVU5FUl9BQlNFTlQpCiAJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1RVTkVSOwogCkBAIC0xNjU0LDkgKzE2OTcsOSBAQAogCQlxYy0+aWQgPj0gVjRMMl9DSURfTEFTVFAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVtMjh4eF9xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSBlbTI4eHhfcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihlbTI4eHhfcWN0cmxbaV0pLCBzaXplb2YoKnFjKSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWM5N19xY3RybCk7IGkrKykgeworCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSBhYzk3X3FjdHJsW2ldLmlkKSB7CisJCQltZW1jcHkocWMsICYoYWM5N19xY3RybFtpXSksIHNpemVvZigqcWMpKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAppbmRleCBhMmFkZDYxLi4wZjJiYTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaApAQCAtMTA4LDYgKzEwOCw3IEBACiAjZGVmaW5lIEVNMjg4Ml9CT0FSRF9LV09STERfQVRTQ18zMTVVCQkgIDY5CiAjZGVmaW5lIEVNMjg4Ml9CT0FSRF9FVkdBX0lORFRVQkUJCSAgNzAKICNkZWZpbmUgRU0yODIwX0JPQVJEX1NJTFZFUkNSRVNUX1dFQkNBTSAgICAgICAgICAgNzEKKyNkZWZpbmUgRU0yODYxX0JPQVJEX0dBRE1FSV9VVFYzMzBQTFVTICAgICAgICAgICA3MgogCiAvKiBMaW1pdHMgbWluaW11bSBhbmQgZGVmYXVsdCBudW1iZXIgb2YgYnVmZmVycyAqLwogI2RlZmluZSBFTTI4WFhfTUlOX0JVRiA0CkBAIC0zOTgsNiArMzk5LDcgQEAKIAl1bnNpZ25lZCBpbnQgaGFzX3NuYXBzaG90X2J1dHRvbjoxOwogCXVuc2lnbmVkIGludCBpc193ZWJjYW06MTsKIAl1bnNpZ25lZCBpbnQgdmFsaWQ6MTsKKwl1bnNpZ25lZCBpbnQgaGFzX2lyX2kyYzoxOwogCiAJdW5zaWduZWQgY2hhciB4Y2xrLCBpMmNfc3BlZWQ7CiAJdW5zaWduZWQgY2hhciByYWRpb19hZGRyOwpAQCAtNDA4LDcgKzQxMCw3IEBACiAKIAlzdHJ1Y3QgZW0yOHh4X2lucHV0ICAgICAgIGlucHV0W01BWF9FTTI4WFhfSU5QVVRdOwogCXN0cnVjdCBlbTI4eHhfaW5wdXQJICByYWRpbzsKLQlJUl9LRVlUQUJfVFlQRSAgICAgICAgICAgICppcl9jb2RlczsKKwlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgICppcl9jb2RlczsKIH07CiAKIHN0cnVjdCBlbTI4eHhfZWVwcm9tIHsKQEAgLTU5NSw2ICs1OTcsMTAgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHNidXR0b25fcXVlcnlfd29yazsKIAogCXN0cnVjdCBlbTI4eHhfZHZiICpkdmI7CisKKwkvKiBJMkMga2V5Ym9hcmQgZGF0YSAqLworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCXN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhIGluaXRfZGF0YTsKIH07CiAKIHN0cnVjdCBlbTI4eHhfb3BzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZwppbmRleCBlOTk0ZGNhLi44ODk3MjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCkBAIC00Nyw2ICs0NywxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfZmluZXBpeC4KIAorY29uZmlnIFVTQl9HU1BDQV9KRUlMSU5KCisJdHJpc3RhdGUgIkplaWxpbiBKUEVHIFVTQiBWNEwyIGRyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoaXMgSmVpbGluIGNoaXAuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX2plaWxpbmouCisKIGNvbmZpZyBVU0JfR1NQQ0FfTUFSUwogCXRyaXN0YXRlICJNYXJzIFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKQEAgLTEwMyw5ICsxMTIsOSBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3BhYzczMTEuCiAKIGNvbmZpZyBVU0JfR1NQQ0FfU045QzIwWAotICAgICAgIHRyaXN0YXRlICJTTjlDMjBYIFVTQiBDYW1lcmEgRHJpdmVyIgotICAgICAgIGRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKLSAgICAgICBoZWxwCisJdHJpc3RhdGUgIlNOOUMyMFggVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKIAkgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZQogCSBzbjljMjB4IGNoaXBzIChTTjlDMjAxIGFuZCBTTjlDMjAyKS4KIApAQCAtMTEzLDEwICsxMjIsMTAgQEAKIAkgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3NuOWMyMHguCiAKIGNvbmZpZyBVU0JfR1NQQ0FfU045QzIwWF9FVkRFVgotICAgICAgIGJvb2wgIkVuYWJsZSBldmRldiBzdXBwb3J0IgorCWJvb2wgIkVuYWJsZSBldmRldiBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX0dTUENBX1NOOUMyMFggJiYgSU5QVVQKLSAgICAgICAtLS1oZWxwLS0tCi0JIFNheSBZIGhlcmUgaW4gb3JkZXIgdG8gZW5hYmxlIGV2ZGV2IHN1cHBvcnQgZm9yIHNuOWMyMHggd2ViY2FtIGJ1dHRvbi4KKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGluIG9yZGVyIHRvIGVuYWJsZSBldmRldiBzdXBwb3J0IGZvciBzbjljMjB4IHdlYmNhbSBidXR0b24uCiAKIGNvbmZpZyBVU0JfR1NQQ0FfU09OSVhCCiAJdHJpc3RhdGUgIlNPTklYIEJheWVyIFVTQiBDYW1lcmEgRHJpdmVyIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKaW5kZXggZjZkM2I4Ni4uMDM1NjE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCkBAIC0yLDYgKzIsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9DT05FWCkgICAgKz0gZ3NwY2FfY29uZXgubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9FVE9NUykgICAgKz0gZ3NwY2FfZXRvbXMubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYKSAgKz0gZ3NwY2FfZmluZXBpeC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0pFSUxJTkopICArPSBnc3BjYV9qZWlsaW5qLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfTUFSUykgICAgICs9IGdzcGNhX21hcnMubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9NUjk3MzEwQSkgKz0gZ3NwY2FfbXI5NzMxMGEubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9PVjUxOSkgICAgKz0gZ3NwY2Ffb3Y1MTkubwpAQCAtMzAsNiArMzEsNyBAQAogZ3NwY2FfY29uZXgtb2JqcyAgICA6PSBjb25leC5vCiBnc3BjYV9ldG9tcy1vYmpzICAgIDo9IGV0b21zLm8KIGdzcGNhX2ZpbmVwaXgtb2JqcyAgOj0gZmluZXBpeC5vCitnc3BjYV9qZWlsaW5qLW9ianMgIDo9IGplaWxpbmoubwogZ3NwY2FfbWFycy1vYmpzICAgICA6PSBtYXJzLm8KIGdzcGNhX21yOTczMTBhLW9ianMgOj0gbXI5NzMxMGEubwogZ3NwY2Ffb3Y1MTktb2JqcyAgICA6PSBvdjUxOS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKaW5kZXggOGQ0OGVhMS4uZWNhMDAzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwpAQCAtODIwLDcgKzgyMCw3IEBACiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwotCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOworCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CiAKIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYwppbmRleCAyYzIwZDA2Li5jMTQ2MWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCkBAIC02MzUsMTAgKzYzNSwxMCBAQAogCXNkLT5zZW5zb3IgPSBpZC0+ZHJpdmVyX2luZm87CiAJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BBUzEwNikgewogCQljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7Ci0JCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHNpZl9tb2RlIC8gc2l6ZW9mIHNpZl9tb2RlWzBdOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOwogCX0gZWxzZSB7CiAJCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKLQkJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF07CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CiAJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBDT0xPUl9JRFgpOwogCX0KIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IGI4NTYxZGYuLmNmNjU0MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EgVVNCIENhbWVyYSBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgNiwgMCkKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDcsIDApCiAKICNpZmRlZiBHU1BDQV9ERUJVRwogaW50IGdzcGNhX2RlYnVnID0gRF9FUlIgfCBEX1BST0JFOwpAQCAtNDg2LDYgKzQ4Niw3IEBACiAJfQogCVBERUJVRyhEX1NUUkVBTSwgInVzZSBhbHQgJWQgZXAgMHglMDJ4IiwKIAkJCWksIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOworCWdzcGNhX2Rldi0+YWx0ID0gaTsJCS8qIG1lbW9yaXplIHRoZSBjdXJyZW50IGFsdCBzZXR0aW5nICovCiAJaWYgKGdzcGNhX2Rldi0+bmJhbHQgPiAxKSB7CiAJCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlLCBpKTsKIAkJaWYgKHJldCA8IDApIHsKQEAgLTQ5Myw3ICs0OTQsNiBAQAogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAl9Ci0JZ3NwY2FfZGV2LT5hbHQgPSBpOwkJLyogbWVtb3JpemUgdGhlIGN1cnJlbnQgYWx0IHNldHRpbmcgKi8KIAlyZXR1cm4gZXA7CiB9CiAKQEAgLTUxMiw3ICs1MTIsMTAgQEAKIAlpZiAoIWdzcGNhX2Rldi0+Y2FtLmJ1bGspIHsJCS8qIGlzb2MgKi8KIAogCQkvKiBTZWUgcGFyYWdyYXBoIDUuOSAvIHRhYmxlIDUtMTEgb2YgdGhlIHVzYiAyLjAgc3BlYy4gKi8KLQkJcHNpemUgPSAocHNpemUgJiAweDA3ZmYpICogKDEgKyAoKHBzaXplID4+IDExKSAmIDMpKTsKKwkJaWYgKGdzcGNhX2Rldi0+cGt0X3NpemUgPT0gMCkKKwkJCXBzaXplID0gKHBzaXplICYgMHgwN2ZmKSAqICgxICsgKChwc2l6ZSA+PiAxMSkgJiAzKSk7CisJCWVsc2UKKwkJCXBzaXplID0gZ3NwY2FfZGV2LT5wa3Rfc2l6ZTsKIAkJbnBrdCA9IGdzcGNhX2Rldi0+Y2FtLm5wa3Q7CiAJCWlmIChucGt0ID09IDApCiAJCQlucGt0ID0gMzI7CQkvKiBkZWZhdWx0IHZhbHVlICovCkBAIC01OTcsMTMgKzYwMCwxOCBAQAogCS8qIHNldCB0aGUgaGlnaGVyIGFsdGVybmF0ZSBzZXR0aW5nIGFuZAogCSAqIGxvb3AgdW50aWwgdXJiIHN1Ym1pdCBzdWNjZWVkcyAqLwogCWdzcGNhX2Rldi0+YWx0ID0gZ3NwY2FfZGV2LT5uYmFsdDsKKwlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5pc29jX2luaXQpIHsKKwkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5pc29jX2luaXQoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisJZXAgPSBnZXRfZXAoZ3NwY2FfZGV2KTsKKwlpZiAoZXAgPT0gTlVMTCkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CiAJZm9yICg7OykgewogCQlQREVCVUcoRF9TVFJFQU0sICJpbml0IHRyYW5zZmVyIGFsdCAlZCIsIGdzcGNhX2Rldi0+YWx0KTsKLQkJZXAgPSBnZXRfZXAoZ3NwY2FfZGV2KTsKLQkJaWYgKGVwID09IE5VTEwpIHsKLQkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIG91dDsKLQkJfQogCQlyZXQgPSBjcmVhdGVfdXJicyhnc3BjYV9kZXYsIGVwKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKQEAgLTYyOCwyMSArNjM2LDMyIEBACiAJCS8qIHN1Ym1pdCB0aGUgVVJCcyAqLwogCQlmb3IgKG4gPSAwOyBuIDwgZ3NwY2FfZGV2LT5udXJiczsgbisrKSB7CiAJCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihnc3BjYV9kZXYtPnVyYltuXSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAocmV0IDwgMCkgewotCQkJCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwKLQkJCQkJInVzYl9zdWJtaXRfdXJiIFslZF0gZXJyICVkIiwgbiwgcmV0KTsKLQkJCQlnc3BjYV9kZXYtPnN0cmVhbWluZyA9IDA7Ci0JCQkJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7Ci0JCQkJaWYgKHJldCA9PSAtRU5PU1BDKSB7Ci0JCQkJCW1zbGVlcCgyMCk7CS8qIHdhaXQgZm9yIGtpbGwKLQkJCQkJCQkgKiBjb21wbGV0ZSAqLwotCQkJCQlicmVhazsJLyogdHJ5IHRoZSBwcmV2aW91cyBhbHQgKi8KLQkJCQl9Ci0JCQkJZ290byBvdXQ7Ci0JCQl9CisJCQlpZiAocmV0IDwgMCkKKwkJCQlicmVhazsKIAkJfQogCQlpZiAocmV0ID49IDApCiAJCQlicmVhazsKKwkJUERFQlVHKERfRVJSfERfU1RSRUFNLAorCQkJInVzYl9zdWJtaXRfdXJiIGFsdCAlZCBlcnIgJWQiLCBnc3BjYV9kZXYtPmFsdCwgcmV0KTsKKwkJZ3NwY2FfZGV2LT5zdHJlYW1pbmcgPSAwOworCQlkZXN0cm95X3VyYnMoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCAhPSAtRU5PU1BDKQorCQkJZ290byBvdXQ7CisKKwkJLyogdGhlIGJhbmR3aWR0aCBpcyBub3Qgd2lkZSBlbm91Z2gKKwkJICogbmVnb2NpYXRlIG9yIHRyeSBhIGxvd2VyIGFsdGVybmF0ZSBzZXR0aW5nICovCisJCW1zbGVlcCgyMCk7CS8qIHdhaXQgZm9yIGtpbGwgY29tcGxldGUgKi8KKwkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+aXNvY19uZWdvKSB7CisJCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmlzb2NfbmVnbyhnc3BjYV9kZXYpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXQ7CisJCX0gZWxzZSB7CisJCQllcCA9IGdldF9lcChnc3BjYV9kZXYpOworCQkJaWYgKGVwID09IE5VTEwpIHsKKwkJCQlyZXQgPSAtRUlPOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CiAJfQogb3V0OgogCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CkBAIC0xNDczLDEyICsxNDkyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCi0JCQl2NGwyX3N0ZF9pZCAqcGFybSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAogc3RhdGljIGludCB2aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCXN0cnVjdCB2aWRlb19tYnVmICptYnVmKQpAQCAtMTk0OSw3ICsxOTYyLDYgQEAKIAkudmlkaW9jX3NfanBlZ2NvbXAJPSB2aWRpb2Nfc19qcGVnY29tcCwKIAkudmlkaW9jX2dfcGFybQkJPSB2aWRpb2NfZ19wYXJtLAogCS52aWRpb2Nfc19wYXJtCQk9IHZpZGlvY19zX3Bhcm0sCi0JLnZpZGlvY19zX3N0ZAkJPSB2aWRpb2Nfc19zdGQsCiAJLnZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMgPSB2aWRpb2NfZW51bV9mcmFtZXNpemVzLAogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIAkudmlkaW9jX2dfcmVnaXN0ZXIJPSB2aWRpb2NfZ19yZWdpc3RlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaAppbmRleCA0NmM0ZWZmLi43MGIxZmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCkBAIC05OCw5ICs5OCwxMSBAQAogLyogbWFuZGF0b3J5IG9wZXJhdGlvbnMgKi8KIAljYW1fY2Zfb3AgY29uZmlnOwkvKiBjYWxsZWQgb24gcHJvYmUgKi8KIAljYW1fb3AgaW5pdDsJCS8qIGNhbGxlZCBvbiBwcm9iZSBhbmQgcmVzdW1lICovCi0JY2FtX29wIHN0YXJ0OwkJLyogY2FsbGVkIG9uIHN0cmVhbSBvbiAqLworCWNhbV9vcCBzdGFydDsJCS8qIGNhbGxlZCBvbiBzdHJlYW0gb24gYWZ0ZXIgVVJCcyBjcmVhdGlvbiAqLwogCWNhbV9wa3Rfb3AgcGt0X3NjYW47CiAvKiBvcHRpb25hbCBvcGVyYXRpb25zICovCisJY2FtX29wIGlzb2NfaW5pdDsJLyogY2FsbGVkIG9uIHN0cmVhbSBvbiBiZWZvcmUgZ2V0dGluZyB0aGUgRVAgKi8KKwljYW1fb3AgaXNvY19uZWdvOwkvKiBjYWxsZWQgd2hlbiBVUkIgc3VibWl0IGZhaWxlZCB3aXRoIE5PU1BDICovCiAJY2FtX3Zfb3Agc3RvcE47CQkvKiBjYWxsZWQgb24gc3RyZWFtIG9mZiAtIG1haW4gYWx0ICovCiAJY2FtX3Zfb3Agc3RvcDA7CQkvKiBjYWxsZWQgb24gc3RyZWFtIG9mZiAmIGRpc2Nvbm5lY3QgLSBhbHQgMCAqLwogCWNhbV92X29wIGRxX2NhbGxiYWNrOwkvKiBjYWxsZWQgd2hlbiBhIGZyYW1lIGhhcyBiZWVuIGRlcXVldWVkICovCkBAIC0xNzgsNiArMTgwLDcgQEAKIAlfX3U4IGlmYWNlOwkJCS8qIFVTQiBpbnRlcmZhY2UgbnVtYmVyICovCiAJX191OCBhbHQ7CQkJLyogVVNCIGFsdGVybmF0ZSBzZXR0aW5nICovCiAJX191OCBuYmFsdDsJCQkvKiBudW1iZXIgb2YgVVNCIGFsdGVybmF0ZSBzZXR0aW5ncyAqLworCXUxNiBwa3Rfc2l6ZTsJCQkvKiBJU09DIHBhY2tldCBzaXplICovCiB9OwogCiBpbnQgZ3NwY2FfZGV2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9qZWlsaW5qLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2plaWxpbmouYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmZhM2VkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9qZWlsaW5qLmMKQEAgLTAsMCArMSwzODggQEAKKy8qCisgKiBKZWlsaW5qIHN1YmRyaXZlcgorICoKKyAqIFN1cHBvcnRzIHNvbWUgSmVpbGluIGR1YWwtbW9kZSBjYW1lcmFzIHdoaWNoIHVzZSBidWxrIHRyYW5zcG9ydCBhbmQKKyAqIGRvd25sb2FkIHJhdyBKUEVHIGRhdGEuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZW9kb3JlIEtpbGdvcmUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgImplaWxpbmoiCisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlICJnc3BjYS5oIgorI2luY2x1ZGUgImpwZWcuaCIKKworTU9EVUxFX0FVVEhPUigiVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9KRUlMSU5KIFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIERlZmF1bHQgdGltZW91dHMsIGluIG1zICovCisjZGVmaW5lIEpFSUxJTkpfQ01EX1RJTUVPVVQgNTAwCisjZGVmaW5lIEpFSUxJTkpfREFUQV9USU1FT1VUIDEwMDAKKworLyogTWF4aW11bSB0cmFuc2ZlciBzaXplIHRvIHVzZS4gKi8KKyNkZWZpbmUgSkVJTElOSl9NQVhfVFJBTlNGRVIgMHgyMDAKKworI2RlZmluZSBGUkFNRV9IRUFERVJfTEVOIDB4MTAKKworLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKwljb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpjYXBfbW9kZTsKKwkvKiBEcml2ZXIgc3R1ZmYgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19zdHJ1Y3Q7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtfdGhyZWFkOworCXU4IHF1YWxpdHk7CQkJCSAvKiBpbWFnZSBxdWFsaXR5ICovCisJdTgganBlZ3F1YWw7CQkJCS8qIHdlYmNhbSBxdWFsaXR5ICovCisJdTggKmpwZWdfaGRyOworfTsKKworCXN0cnVjdCBqbGpfY29tbWFuZCB7CisJCXVuc2lnbmVkIGNoYXIgaW5zdHJ1Y3Rpb25bMl07CisJCXVuc2lnbmVkIGNoYXIgYWNrX3dhbnRlZDsKKwl9OworCisvKiBBRkFJQ1QgdGhlc2UgY2FtZXJhcyB3aWxsIG9ubHkgZG8gMzIweDI0MC4gKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGpsal9tb2RlW10gPSB7CisJeyAzMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAwfQorfTsKKworLyoKKyAqIGNhbSB1c2VzIGVuZHBvaW50IDB4MDMgdG8gc2VuZCBjb21tYW5kcywgMHg4NCBmb3IgcmVhZCBjb21tYW5kcywKKyAqIGFuZCAweDgyIGZvciBidWxrIHRyYW5zZmVyLgorICovCisKKy8qIEFsbCBjb21tYW5kcyBhcmUgdHdvIGJ5dGVzIG9ubHkgKi8KK3N0YXRpYyBpbnQgamxqX3dyaXRlMihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHVuc2lnbmVkIGNoYXIgKmNvbW1hbmQpCit7CisJaW50IHJldHZhbDsKKworCW1lbWNweShnc3BjYV9kZXYtPnVzYl9idWYsIGNvbW1hbmQsIDIpOworCXJldHZhbCA9IHVzYl9idWxrX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRidWxrcGlwZShnc3BjYV9kZXYtPmRldiwgMyksCisJCQlnc3BjYV9kZXYtPnVzYl9idWYsIDIsIE5VTEwsIDUwMCk7CisJaWYgKHJldHZhbCA8IDApCisJCVBERUJVRyhEX0VSUiwgImNvbW1hbmQgd3JpdGUgWyUwMnhdIGVycm9yICVkIiwKKwkJCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0sIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogUmVzcG9uc2VzIGFyZSBvbmUgYnl0ZSBvbmx5ICovCitzdGF0aWMgaW50IGpsal9yZWFkMShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHVuc2lnbmVkIGNoYXIgcmVzcG9uc2UpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9idWxrX21zZyhnc3BjYV9kZXYtPmRldiwKKwl1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODQpLAorCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgTlVMTCwgNTAwKTsKKwlyZXNwb25zZSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJUERFQlVHKERfRVJSLCAicmVhZCBjb21tYW5kIFslMDJ4XSBlcnJvciAlZCIsCisJCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgamxqX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gLTE7CisJdTggcmVzcG9uc2UgPSAweGZmOworCXN0cnVjdCBqbGpfY29tbWFuZCBzdGFydF9jb21tYW5kc1tdID0geworCQl7ezB4NzEsIDB4ODF9LCAwfSwKKwkJe3sweDcwLCAweDA1fSwgMH0sCisJCXt7MHg5NSwgMHg3MH0sIDF9LAorCQl7ezB4NzEsIDB4ODF9LCAwfSwKKwkJe3sweDcwLCAweDA0fSwgMH0sCisJCXt7MHg5NSwgMHg3MH0sIDF9LAorCQl7ezB4NzEsIDB4MDB9LCAwfSwKKwkJe3sweDcwLCAweDA4fSwgMH0sCisJCXt7MHg5NSwgMHg3MH0sIDF9LAorCQl7ezB4OTQsIDB4MDJ9LCAwfSwKKwkJe3sweGRlLCAweDI0fSwgMH0sCisJCXt7MHg5NCwgMHgwMn0sIDB9LAorCQl7ezB4ZGQsIDB4ZjB9LCAwfSwKKwkJe3sweDk0LCAweDAyfSwgMH0sCisJCXt7MHhlMywgMHgyY30sIDB9LAorCQl7ezB4OTQsIDB4MDJ9LCAwfSwKKwkJe3sweGU0LCAweDAwfSwgMH0sCisJCXt7MHg5NCwgMHgwMn0sIDB9LAorCQl7ezB4ZTUsIDB4MDB9LCAwfSwKKwkJe3sweDk0LCAweDAyfSwgMH0sCisJCXt7MHhlNiwgMHgyY30sIDB9LAorCQl7ezB4OTQsIDB4MDN9LCAwfSwKKwkJe3sweGFhLCAweDAwfSwgMH0sCisJCXt7MHg3MSwgMHgxZX0sIDB9LAorCQl7ezB4NzAsIDB4MDZ9LCAwfSwKKwkJe3sweDcxLCAweDgwfSwgMH0sCisJCXt7MHg3MCwgMHgwN30sIDB9CisJfTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGFydF9jb21tYW5kcyk7IGkrKykgeworCQlyZXR2YWwgPSBqbGpfd3JpdGUyKGdzcGNhX2Rldiwgc3RhcnRfY29tbWFuZHNbaV0uaW5zdHJ1Y3Rpb24pOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJCWlmIChzdGFydF9jb21tYW5kc1tpXS5hY2tfd2FudGVkKQorCQkJcmV0dmFsID0gamxqX3JlYWQxKGdzcGNhX2RldiwgcmVzcG9uc2UpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCVBERUJVRyhEX0VSUiwgImpsal9zdGFydCByZXR2YWwgaXMgJWQiLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgamxqX3N0b3Aoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCBpOworCWludCByZXR2YWw7CisJc3RydWN0IGpsal9jb21tYW5kIHN0b3BfY29tbWFuZHNbXSA9IHsKKwkJe3sweDcxLCAweDAwfSwgMH0sCisJCXt7MHg3MCwgMHgwOX0sIDB9LAorCQl7ezB4NzEsIDB4ODB9LCAwfSwKKwkJe3sweDcwLCAweDA1fSwgMH0KKwl9OworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0b3BfY29tbWFuZHMpOyBpKyspIHsKKwkJcmV0dmFsID0gamxqX3dyaXRlMihnc3BjYV9kZXYsIHN0b3BfY29tbWFuZHNbaV0uaW5zdHJ1Y3Rpb24pOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIGFuZCBydW5zIHdoZW5ldmVyIHRoZSBjYW1lcmEKKyAqIGlzIHN0cmVhbWluZyBkYXRhLiBCZWNhdXNlIGl0IGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIGl0IGlzIGFsbG93ZWQgdG8gc2xlZXAKKyAqIHNvIHdlIGNhbiB1c2Ugc3luY2hyb25vdXMgVVNCIGNhbGxzLiBUbyBhdm9pZCBwb3NzaWJsZSBjb2xsaXNpb25zIHdpdGggb3RoZXIKKyAqIHRocmVhZHMgYXR0ZW1wdGluZyB0byB1c2UgdGhlIGNhbWVyYSdzIFVTQiBpbnRlcmZhY2UgdGhlIGdzcGNhIHVzYl9sb2NrIGlzCisgKiB1c2VkIHdoZW4gcGVyZm9ybWluZyB0aGUgb25lIFVTQiBjb250cm9sIG9wZXJhdGlvbiBpbnNpZGUgdGhlIHdvcmtxdWV1ZSwKKyAqIHdoaWNoIHRlbGxzIHRoZSBjYW1lcmEgdG8gY2xvc2UgdGhlIHN0cmVhbS4gSW4gcHJhY3RpY2UgdGhlIG9ubHkgdGhpbmcKKyAqIHdoaWNoIG5lZWRzIHRvIGJlIHByb3RlY3RlZCBhZ2FpbnN0IGlzIHRoZSB1c2Jfc2V0X2ludGVyZmFjZSBjYWxsIHRoYXQKKyAqIGdzcGNhIG1ha2VzIGR1cmluZyBzdHJlYW1fb2ZmLiBPdGhlcndpc2UgdGhlIGNhbWVyYSBkb2Vzbid0IHByb3ZpZGUgYW55CisgKiBjb250cm9scyB0aGF0IHRoZSB1c2VyIGNvdWxkIHRyeSB0byBjaGFuZ2UuCisgKi8KKworc3RhdGljIHZvaWQgamxqX2Rvc3RyZWFtKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc2QgKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2QsIHdvcmtfc3RydWN0KTsKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAmZGV2LT5nc3BjYV9kZXY7CisJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKKwlpbnQgYmxvY2tzX2xlZnQ7IC8qIDB4MjAwLXNpemVkIGJsb2NrcyByZW1haW5pbmcgaW4gY3VycmVudCBmcmFtZS4gKi8KKwlpbnQgc2l6ZV9pbl9ibG9ja3M7CisJaW50IGFjdF9sZW47CisJaW50IGRpc2NhcmRpbmcgPSAwOyAvKiB0cnVlIGlmIHdlIGZhaWxlZCB0byBnZXQgc3BhY2UgZm9yIGZyYW1lLiAqLworCWludCBwYWNrZXRfdHlwZTsKKwlpbnQgcmV0OworCXU4ICpidWZmZXI7CisKKwlidWZmZXIgPSBrbWFsbG9jKEpFSUxJTkpfTUFYX1RSQU5TRkVSLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJaWYgKCFidWZmZXIpIHsKKwkJUERFQlVHKERfRVJSLCAiQ291bGRuJ3QgYWxsb2NhdGUgVVNCIGJ1ZmZlciIpOworCQlnb3RvIHF1aXRfc3RyZWFtOworCX0KKwl3aGlsZSAoZ3NwY2FfZGV2LT5wcmVzZW50ICYmIGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KQorCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJLyogU3RhcnQgYSBuZXcgZnJhbWUsIGFuZCBhZGQgdGhlIEpQRUcgaGVhZGVyLCBmaXJzdCB0aGluZyAqLworCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKGdzcGNhX2Rldik7CisJCWlmIChmcmFtZSAmJiAhZGlzY2FyZGluZykKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCWRldi0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKKwkJIGVsc2UKKwkJCWRpc2NhcmRpbmcgPSAxOworCQkvKgorCQkgKiBOb3cgcmVxdWVzdCBkYXRhIGJsb2NrIDAuIExpbmUgMCByZXBvcnRzIHRoZSBzaXplCisJCSAqIHRvIGRvd25sb2FkLCBpbiBibG9ja3Mgb2Ygc2l6ZSAweDIwMCwgYW5kIGFsc28gdGVsbHMgdGhlCisJCSAqICJhY3R1YWwiIGRhdGEgc2l6ZSwgaW4gYnl0ZXMsIHdoaWNoIHNlZW1zIGJlc3QgdG8gaWdub3JlLgorCQkgKi8KKwkJcmV0ID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJCXVzYl9yY3ZidWxrcGlwZShnc3BjYV9kZXYtPmRldiwgMHg4MiksCisJCQkJYnVmZmVyLCBKRUlMSU5KX01BWF9UUkFOU0ZFUiwgJmFjdF9sZW4sCisJCQkJSkVJTElOSl9EQVRBX1RJTUVPVVQpOworCQlQREVCVUcoRF9TVFJFQU0sCisJCQkiR290ICVkIGJ5dGVzIG91dCBvZiAlZCBmb3IgQmxvY2sgMCIsCisJCQlhY3RfbGVuLCBKRUlMSU5KX01BWF9UUkFOU0ZFUik7CisJCWlmIChyZXQgPCAwIHx8IGFjdF9sZW4gPCBGUkFNRV9IRUFERVJfTEVOKQorCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJc2l6ZV9pbl9ibG9ja3MgPSBidWZmZXJbMHgwYV07CisJCWJsb2Nrc19sZWZ0ID0gYnVmZmVyWzB4MGFdIC0gMTsKKwkJUERFQlVHKERfU1RSRUFNLCAiYmxvY2tzX2xlZnQgPSAweCV4IiwgYmxvY2tzX2xlZnQpOworCQlwYWNrZXRfdHlwZSA9IElOVEVSX1BBQ0tFVDsKKwkJaWYgKGZyYW1lICYmICFkaXNjYXJkaW5nKQorCQkJLyogVG9zcyBsaW5lIDAgb2YgZGF0YSBibG9jayAwLCBrZWVwIHRoZSByZXN0LiAqLworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgcGFja2V0X3R5cGUsCisJCQkJZnJhbWUsIGJ1ZmZlciArIEZSQU1FX0hFQURFUl9MRU4sCisJCQkJSkVJTElOSl9NQVhfVFJBTlNGRVIgLSBGUkFNRV9IRUFERVJfTEVOKTsKKwkJCWVsc2UKKwkJCQlkaXNjYXJkaW5nID0gMTsKKwkJd2hpbGUgKGJsb2Nrc19sZWZ0ID4gMCkgeworCQkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJCXJldCA9IHVzYl9idWxrX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCQl1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODIpLAorCQkJCWJ1ZmZlciwgSkVJTElOSl9NQVhfVFJBTlNGRVIsICZhY3RfbGVuLAorCQkJCUpFSUxJTkpfREFUQV9USU1FT1VUKTsKKwkJCWlmIChyZXQgPCAwIHx8IGFjdF9sZW4gPCBKRUlMSU5KX01BWF9UUkFOU0ZFUikKKwkJCQlnb3RvIHF1aXRfc3RyZWFtOworCQkJUERFQlVHKERfU1RSRUFNLAorCQkJCSIlZCBibG9ja3MgcmVtYWluaW5nIGZvciBmcmFtZSIsIGJsb2Nrc19sZWZ0KTsKKwkJCWJsb2Nrc19sZWZ0IC09IDE7CisJCQlpZiAoYmxvY2tzX2xlZnQgPT0gMCkKKwkJCQlwYWNrZXRfdHlwZSA9IExBU1RfUEFDS0VUOworCQkJZWxzZQorCQkJCXBhY2tldF90eXBlID0gSU5URVJfUEFDS0VUOworCQkJaWYgKGZyYW1lICYmICFkaXNjYXJkaW5nKQorCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIHBhY2tldF90eXBlLAorCQkJCQkJZnJhbWUsIGJ1ZmZlciwKKwkJCQkJCUpFSUxJTkpfTUFYX1RSQU5TRkVSKTsKKwkJCWVsc2UKKwkJCQlkaXNjYXJkaW5nID0gMTsKKwkJfQorCX0KK3F1aXRfc3RyZWFtOgorCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCisJCWpsal9zdG9wKGdzcGNhX2Rldik7CisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwlrZnJlZShidWZmZXIpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lIGp1c3QgYmVmb3JlIHNkX2luaXQgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBjYW0gKmNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKwlzdHJ1Y3Qgc2QgKmRldiAgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWRldi0+cXVhbGl0eSAgPSA4NTsKKwlkZXYtPmpwZWdxdWFsID0gODU7CisJUERFQlVHKERfUFJPQkUsCisJCSJKRUlMSU5KIGNhbWVyYSBkZXRlY3RlZCIKKwkJIiAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisJY2FtLT5jYW1fbW9kZSA9IGpsal9tb2RlOworCWNhbS0+bm1vZGVzID0gMTsKKwljYW0tPmJ1bGsgPSAxOworCS8qIFdlIGRvbid0IHVzZSB0aGUgYnVmZmVyIGdzcGNhIGFsbG9jYXRlcyBzbyBtYWtlIGl0IHNtYWxsLiAqLworCWNhbS0+YnVsa19zaXplID0gMzI7CisJSU5JVF9XT1JLKCZkZXYtPndvcmtfc3RydWN0LCBqbGpfZG9zdHJlYW0pOworCXJldHVybiAwOworfQorCisvKiBjYWxsZWQgb24gc3RyZWFtb2ZmIHdpdGggYWx0PT0wIGFuZCBvbiBkaXNjb25uZWN0ICovCisvKiB0aGUgdXNiX2xvY2sgaXMgaGVsZCBhdCBlbnRyeSAtIHJlc3RvcmUgb24gZXhpdCAqLworc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqZGV2ID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkvKiB3YWl0IGZvciB0aGUgd29yayBxdWV1ZSB0byB0ZXJtaW5hdGUgKi8KKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCS8qIFRoaXMgd2FpdHMgZm9yIGpsal9kb3N0cmVhbSB0byBmaW5pc2ggKi8KKwlkZXN0cm95X3dvcmtxdWV1ZShkZXYtPndvcmtfdGhyZWFkKTsKKwlkZXYtPndvcmtfdGhyZWFkID0gTlVMTDsKKwltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwlrZnJlZShkZXYtPmpwZWdfaGRyKTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXJldHVybiAwOworfQorCisvKiBTZXQgdXAgZm9yIGdldHRpbmcgZnJhbWVzLiAqLworc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpkZXYgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0OworCisJLyogY3JlYXRlIHRoZSBKUEVHIGhlYWRlciAqLworCWRldi0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShkZXYtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKKwkJCTB4MjEpOyAgICAgICAgICAvKiBKUEVHIDQyMiAqLworCWpwZWdfc2V0X3F1YWwoZGV2LT5qcGVnX2hkciwgZGV2LT5xdWFsaXR5KTsKKwlQREVCVUcoRF9TVFJFQU0sICJTdGFydCBzdHJlYW1pbmcgYXQgMzIweDI0MCIpOworCXJldCA9IGpsal9zdGFydChnc3BjYV9kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIlN0YXJ0IHN0cmVhbWluZyBjb21tYW5kIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBTdGFydCB0aGUgd29ya3F1ZXVlIGZ1bmN0aW9uIHRvIGRvIHRoZSBzdHJlYW1pbmcgKi8KKwlkZXYtPndvcmtfdGhyZWFkID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoTU9EVUxFX05BTUUpOworCXF1ZXVlX3dvcmsoZGV2LT53b3JrX3RocmVhZCwgJmRldi0+d29ya19zdHJ1Y3QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRhYmxlIG9mIHN1cHBvcnRlZCBVU0IgZGV2aWNlcyAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwOTc5LCAweDAyODApfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lICAgPSBNT0RVTEVfTkFNRSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ICAgPSBzZF9pbml0LAorCS5zdGFydCAgPSBzZF9zdGFydCwKKwkuc3RvcDAgID0gc2Rfc3RvcDAsCit9OworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsCisJCQkmc2RfZGVzYywKKwkJCXNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lICAgICAgID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlICAgICAgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jCmluZGV4IDcxMjczMjEuLjZiODlmMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYwpAQCAtMTc4LDggKzE3OCwxMCBAQAogCiAJc2Vuc19wcml2LT5zZXR0aW5ncyA9CiAJa21hbGxvYyhzaXplb2YoczMyKSpBUlJBWV9TSVpFKHM1azgzYV9jdHJscyksIEdGUF9LRVJORUwpOwotCWlmICghc2Vuc19wcml2LT5zZXR0aW5ncykKKwlpZiAoIXNlbnNfcHJpdi0+c2V0dGluZ3MpIHsKKwkJa2ZyZWUoc2Vuc19wcml2KTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBzNWs4M2FfbW9kZXM7CiAJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gQVJSQVlfU0laRShzNWs4M2FfbW9kZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCmluZGV4IDMwMTMyNTEuLjE0MGM4ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKQEAgLTMsNiArMywyMSBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBLeWxlIEd1aW5uIDxlbHlrMDNAZ21haWwuY29tPgogICoKKyAqIFN1cHBvcnQgZm9yIHRoZSBNUjk3MzEwQSBjYW1lcmFzIGluIGFkZGl0aW9uIHRvIHRoZSBBaXB0ZWsgUGVuY2FtIFZHQSsKKyAqIGFuZCBmb3IgdGhlIHJvdXRpbmVzIGZvciBkZXRlY3RpbmcgYW5kIGNsYXNzaWZ5aW5nIHRoZXNlIHZhcmlvdXMgY2FtZXJhcywKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1PgorICoKKyAqIEFja25vd2xlZGdlbWVudHM6CisgKgorICogVGhlIE1SOTczMTFBIHN1cHBvcnQgaW4gZ3NwY2EvbWFycy5jIGhhcyBiZWVuIGhlbHBmdWwgaW4gdW5kZXJzdGFuZGluZyBzb21lCisgKiBvZiB0aGUgcmVnaXN0ZXJzIGluIHRoZXNlIGNhbWVyYXMuCisgKgorICogSGFucyBkZSBHb2VkZSA8aGRnb2VkZUByZWRoYXQuY29tPiBhbmQKKyAqIFRob21hcyBLYWlzZXIgPHRob21hc0BrYWlzZXItbGludXgubGk+CisgKiBoYXZlIGFzc2lzdGVkIHdpdGggdGhlaXIgZXhwZXJpZW5jZS4gRWFjaCBvZiB0aGVtIGhhcyBhbHNvIGhlbHBlZCBieQorICogdGVzdGluZyBhIHByZXZpb3VzbHkgdW5zdXBwb3J0ZWQgY2FtZXJhLgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTIyLDE4ICszNywxMDggQEAKIAogI2luY2x1ZGUgImdzcGNhLmgiCiAKLU1PRFVMRV9BVVRIT1IoIkt5bGUgR3Vpbm4gPGVseWswM0BnbWFpbC5jb20+Iik7CisjZGVmaW5lIENBTV9UWVBFX0NJRgkJCTAKKyNkZWZpbmUgQ0FNX1RZUEVfVkdBCQkJMQorCisjZGVmaW5lIE1SOTczMTBBX0JSSUdIVE5FU1NfTUlOCQktMjU0CisjZGVmaW5lIE1SOTczMTBBX0JSSUdIVE5FU1NfTUFYCQkyNTUKKyNkZWZpbmUgTVI5NzMxMEFfQlJJR0hUTkVTU19ERUZBVUxUCTAKKworI2RlZmluZSBNUjk3MzEwQV9FWFBPU1VSRV9NSU4JCTMwMAorI2RlZmluZSBNUjk3MzEwQV9FWFBPU1VSRV9NQVgJCTQwOTUKKyNkZWZpbmUgTVI5NzMxMEFfRVhQT1NVUkVfREVGQVVMVAkxMDAwCisKKyNkZWZpbmUgTVI5NzMxMEFfR0FJTl9NSU4JCTAKKyNkZWZpbmUgTVI5NzMxMEFfR0FJTl9NQVgJCTMxCisjZGVmaW5lIE1SOTczMTBBX0dBSU5fREVGQVVMVAkJMjUKKworTU9EVUxFX0FVVEhPUigiS3lsZSBHdWlubiA8ZWx5azAzQGdtYWlsLmNvbT4sIgorCSAgICAgICJUaGVvZG9yZSBLaWxnb3JlIDxraWxnb3RhQGF1YnVybi5lZHU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBL01hcnMtU2VtaSBNUjk3MzEwQSBVU0IgQ2FtZXJhIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCisvKiBnbG9iYWwgcGFyYW1ldGVycyAqLworaW50IGZvcmNlX3NlbnNvcl90eXBlID0gLTE7Cittb2R1bGVfcGFyYW0oZm9yY2Vfc2Vuc29yX3R5cGUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3NlbnNvcl90eXBlLCAiRm9yY2Ugc2Vuc29yIHR5cGUgKC0xIChhdXRvKSwgMCBvciAxKSIpOworCiAvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLwogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsgIC8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAl1OCBzb2ZfcmVhZDsKKwl1OCBjYW1fdHlwZTsJLyogMCBpcyBDSUYgYW5kIDEgaXMgVkdBICovCisJdTggc2Vuc29yX3R5cGU7CS8qIFdlIHVzZSAwIGFuZCAxIGhlcmUsIHRvby4gKi8KKwl1OCBkb19sY2Rfc3RvcDsKKworCWludCBicmlnaHRuZXNzOworCXUxNiBleHBvc3VyZTsKKwl1OCBnYWluOwogfTsKIAorc3RydWN0IHNlbnNvcl93X2RhdGEgeworCXU4IHJlZzsKKwl1OCBmbGFnczsKKwl1OCBkYXRhWzE2XTsKKwlpbnQgbGVuOworfTsKKworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CitzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIHZvaWQgc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCiBzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKwl7CisjZGVmaW5lIEJSSUdIVE5FU1NfSURYIDAKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkJyaWdodG5lc3MiLAorCQkJLm1pbmltdW0gPSBNUjk3MzEwQV9CUklHSFRORVNTX01JTiwKKwkJCS5tYXhpbXVtID0gTVI5NzMxMEFfQlJJR0hUTkVTU19NQVgsCisJCQkuc3RlcCA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IE1SOTczMTBBX0JSSUdIVE5FU1NfREVGQVVMVCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCQkuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwl9LAorCXsKKyNkZWZpbmUgRVhQT1NVUkVfSURYIDEKKwkJeworCQkJLmlkID0gVjRMMl9DSURfRVhQT1NVUkUsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJFeHBvc3VyZSIsCisJCQkubWluaW11bSA9IE1SOTczMTBBX0VYUE9TVVJFX01JTiwKKwkJCS5tYXhpbXVtID0gTVI5NzMxMEFfRVhQT1NVUkVfTUFYLAorCQkJLnN0ZXAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSBNUjk3MzEwQV9FWFBPU1VSRV9ERUZBVUxULAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJLnNldCA9IHNkX3NldGV4cG9zdXJlLAorCQkuZ2V0ID0gc2RfZ2V0ZXhwb3N1cmUsCisJfSwKKwl7CisjZGVmaW5lIEdBSU5fSURYIDIKKwkJeworCQkJLmlkID0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkdhaW4iLAorCQkJLm1pbmltdW0gPSBNUjk3MzEwQV9HQUlOX01JTiwKKwkJCS5tYXhpbXVtID0gTVI5NzMxMEFfR0FJTl9NQVgsCisJCQkuc3RlcCA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IE1SOTczMTBBX0dBSU5fREVGQVVMVCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRnYWluLAorCQkuZ2V0ID0gc2RfZ2V0Z2FpbiwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKQEAgLTY1LDcgKzE3MCw3IEBACiB9OwogCiAvKiB0aGUgYnl0ZXMgdG8gd3JpdGUgYXJlIGluIGdzcGNhX2Rldi0+dXNiX2J1ZiAqLwotc3RhdGljIGludCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIGludCBsZW4pCitzdGF0aWMgaW50IG1yX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgaW50IGxlbikKIHsKIAlpbnQgcmM7CiAKQEAgLTc4LDE1ICsxODMsMjQ5IEBACiAJcmV0dXJuIHJjOwogfQogCisvKiB0aGUgYnl0ZXMgYXJlIHJlYWQgaW50byBnc3BjYV9kZXYtPnVzYl9idWYgKi8KK3N0YXRpYyBpbnQgbXJfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIGludCBsZW4pCit7CisJaW50IHJjOworCisJcmMgPSB1c2JfYnVsa19tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgIHVzYl9yY3ZidWxrcGlwZShnc3BjYV9kZXYtPmRldiwgMyksCisJCQkgIGdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuLCBOVUxMLCA1MDApOworCWlmIChyYyA8IDApCisJCVBERUJVRyhEX0VSUiwgInJlZyByZWFkIFslMDJ4XSBlcnJvciAlZCIsCisJCSAgICAgICBnc3BjYV9kZXYtPnVzYl9idWZbMF0sIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgc2Vuc29yX3dyaXRlX3JlZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4IHJlZywgdTggZmxhZ3MsCisJY29uc3QgdTggKmRhdGEsIGludCBsZW4pCit7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHgxZjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSBmbGFnczsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMl0gPSByZWc7CisJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1ZiArIDMsIGRhdGEsIGxlbik7CisKKwlyZXR1cm4gbXJfd3JpdGUoZ3NwY2FfZGV2LCBsZW4gKyAzKTsKK30KKworc3RhdGljIGludCBzZW5zb3Jfd3JpdGVfcmVncyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJY29uc3Qgc3RydWN0IHNlbnNvcl93X2RhdGEgKmRhdGEsIGludCBsZW4pCit7CisJaW50IGksIHJjOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXJjID0gc2Vuc29yX3dyaXRlX3JlZyhnc3BjYV9kZXYsIGRhdGFbaV0ucmVnLCBkYXRhW2ldLmZsYWdzLAorCQkJCQkgIGRhdGFbaV0uZGF0YSwgZGF0YVtpXS5sZW4pOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlbnNvcl93cml0ZTEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCByZWcsIHU4IGRhdGEpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGJ1ZiwgY29uZmlybV9yZWc7CisJaW50IHJjOworCisJYnVmID0gZGF0YTsKKwlyYyA9IHNlbnNvcl93cml0ZV9yZWcoZ3NwY2FfZGV2LCByZWcsIDB4MDEsICZidWYsIDEpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCWJ1ZiA9IDB4MDE7CisJY29uZmlybV9yZWcgPSBzZC0+c2Vuc29yX3R5cGUgPyAweDEzIDogMHgxMTsKKwlyYyA9IHNlbnNvcl93cml0ZV9yZWcoZ3NwY2FfZGV2LCBjb25maXJtX3JlZywgMHgwMCwgJmJ1ZiwgMSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FtX2dldF9yZXNwb25zZTE2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlfX3U4ICpkYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmOworCWludCBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDIxOworCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAxKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwllcnJfY29kZSA9IG1yX3JlYWQoZ3NwY2FfZGV2LCAxNik7CisJcmV0dXJuIGVycl9jb2RlOworfQorCitzdGF0aWMgaW50IHplcm9fdGhlX3BvaW50ZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCV9fdTggKmRhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWY7CisJaW50IGVycl9jb2RlOworCXU4IHN0YXR1cyA9IDA7CisJaW50IHRyaWVzID0gMDsKKworCWVycl9jb2RlID0gY2FtX2dldF9yZXNwb25zZTE2KGdzcGNhX2Rldik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZXJyX2NvZGUgPSBtcl93cml0ZShnc3BjYV9kZXYsIDEpOworCWRhdGFbMF0gPSAweDE5OworCWRhdGFbMV0gPSAweDUxOworCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwllcnJfY29kZSA9IGNhbV9nZXRfcmVzcG9uc2UxNihnc3BjYV9kZXYpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDE5OworCWRhdGFbMV0gPSAweGJhOworCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwllcnJfY29kZSA9IGNhbV9nZXRfcmVzcG9uc2UxNihnc3BjYV9kZXYpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDE5OworCWRhdGFbMV0gPSAweDAwOworCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwllcnJfY29kZSA9IGNhbV9nZXRfcmVzcG9uc2UxNihnc3BjYV9kZXYpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDE5OworCWRhdGFbMV0gPSAweDAwOworCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwl3aGlsZSAoc3RhdHVzICE9IDB4MGEgJiYgdHJpZXMgPCAyNTYpIHsKKwkJZXJyX2NvZGUgPSBjYW1fZ2V0X3Jlc3BvbnNlMTYoZ3NwY2FfZGV2KTsKKwkJc3RhdHVzID0gZGF0YVswXTsKKwkJdHJpZXMrKzsKKwkJaWYgKGVycl9jb2RlIDwgMCkKKwkJCXJldHVybiBlcnJfY29kZTsKKwl9CisJaWYgKHN0YXR1cyAhPSAweDBhKQorCQlQREVCVUcoRF9FUlIsICJzdGF0dXMgaXMgJTAyeCIsIHN0YXR1cyk7CisKKwl0cmllcyA9IDA7CisJd2hpbGUgKHRyaWVzIDwgNCkgeworCQlkYXRhWzBdID0gMHgxOTsKKwkJZGF0YVsxXSA9IDB4MDA7CisJCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAyKTsKKwkJaWYgKGVycl9jb2RlIDwgMCkKKwkJCXJldHVybiBlcnJfY29kZTsKKworCQllcnJfY29kZSA9IGNhbV9nZXRfcmVzcG9uc2UxNihnc3BjYV9kZXYpOworCQlzdGF0dXMgPSBkYXRhWzBdOworCQl0cmllcysrOworCQlpZiAoZXJyX2NvZGUgPCAwKQorCQkJcmV0dXJuIGVycl9jb2RlOworCX0KKworCWRhdGFbMF0gPSAweDE5OworCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAxKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwllcnJfY29kZSA9IG1yX3JlYWQoZ3NwY2FfZGV2LCAxNik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1OCBnZXRfc2Vuc29yX2lkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgZXJyX2NvZGU7CisKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweDFlOworCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAxKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwllcnJfY29kZSA9IG1yX3JlYWQoZ3NwY2FfZGV2LCAxNik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJUERFQlVHKERfUFJPQkUsICJCeXRlIHplcm8gcmVwb3J0ZWQgaXMgJTAxeCIsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CisKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgY2FtICpjYW07CisJX191OCAqZGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZjsKKwlpbnQgZXJyX2NvZGU7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisKKwlpZiAoaWQtPmlkUHJvZHVjdCA9PSAweDAxMGUpIHsKKwkJc2QtPmNhbV90eXBlID0gQ0FNX1RZUEVfQ0lGOworCQljYW0tPm5tb2Rlcy0tOworCisJCWRhdGFbMF0gPSAweDAxOworCQlkYXRhWzFdID0gMHgwMTsKKwkJZXJyX2NvZGUgPSBtcl93cml0ZShnc3BjYV9kZXYsIDIpOworCQlpZiAoZXJyX2NvZGUgPCAwKQorCQkJcmV0dXJuIGVycl9jb2RlOworCisJCW1zbGVlcCgyMDApOworCQlkYXRhWzBdID0gZ2V0X3NlbnNvcl9pZChnc3BjYV9kZXYpOworCQkvKgorCQkgKiBLbm93biBDSUYgY2FtZXJhcy4gSWYgeW91IGhhdmUgYW5vdGhlciB0byByZXBvcnQsIHBsZWFzZSBkbworCQkgKgorCQkgKiBOYW1lCQkJYnl0ZSBqdXN0IHJlYWQJCXNkLT5zZW5zb3JfdHlwZQorCQkgKgkJCQkJcmVwb3J0ZWQgYnkKKwkJICogU2FrYXIgU3B5LXNob3QJMHgyOAkJVC4gS2lsZ29yZQkwCisJCSAqIElubm92YWdlCQkweGY1ICh1bnN0YWJsZSkJVC4gS2lsZ29yZQkwCisJCSAqIFZpdml0YXIgTWluaQkJMHg1MwkJSC4gRGUgR29lZGUJMAorCQkgKiBWaXZpdGFyIE1pbmkJCTB4MDQgLyAweDI0CUUuIFJvZHJpZ3VlegkwCisJCSAqIFZpdml0YXIgTWluaQkJMHgwOAkJVC4gS2lsZ29yZQkxCisJCSAqIEVsdGEtTWVkaWEgODIxMmRjCTB4MjMJCVQuIEthaXNlcgkxCisJCSAqIFBoaWxpcHMgZGlnLiBrZXljaC4JMHgzNwkJVC4gS2lsZ29yZQkxCisJCSAqLworCQlpZiAoKGRhdGFbMF0gJiAweDc4KSA9PSA4IHx8CisJCSAgICAoKGRhdGFbMF0gJiAweDIpID09IDB4MiAmJiBkYXRhWzBdICE9IDB4NTMpKQorCQkJc2QtPnNlbnNvcl90eXBlID0gMTsKKwkJZWxzZQorCQkJc2QtPnNlbnNvcl90eXBlID0gMDsKKworCQlQREVCVUcoRF9QUk9CRSwgIk1SOTczMTBBIENJRiBjYW1lcmEgZGV0ZWN0ZWQsIHNlbnNvcjogJWQiLAorCQkgICAgICAgc2QtPnNlbnNvcl90eXBlKTsKKworCQlpZiAoZm9yY2Vfc2Vuc29yX3R5cGUgIT0gLTEpIHsKKwkJCXNkLT5zZW5zb3JfdHlwZSA9ICEhIGZvcmNlX3NlbnNvcl90eXBlOworCQkJUERFQlVHKERfUFJPQkUsICJGb3JjaW5nIHNlbnNvciB0eXBlIHRvOiAlZCIsCisJCQkgICAgICAgc2QtPnNlbnNvcl90eXBlKTsKKwkJfQorCisJCWlmIChzZC0+c2Vuc29yX3R5cGUgPT0gMCkKKwkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBCUklHSFRORVNTX0lEWCk7CisJfSBlbHNlIHsKKwkJc2QtPmNhbV90eXBlID0gQ0FNX1RZUEVfVkdBOworCQlQREVCVUcoRF9QUk9CRSwgIk1SOTczMTBBIFZHQSBjYW1lcmEgZGV0ZWN0ZWQiKTsKKwkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEJSSUdIVE5FU1NfSURYKSB8CisJCQkJICAgICAgKDEgPDwgRVhQT1NVUkVfSURYKSB8ICgxIDw8IEdBSU5fSURYKTsKKwl9CisKKwlzZC0+YnJpZ2h0bmVzcyA9IE1SOTczMTBBX0JSSUdIVE5FU1NfREVGQVVMVDsKKwlzZC0+ZXhwb3N1cmUgPSBNUjk3MzEwQV9FWFBPU1VSRV9ERUZBVUxUOworCXNkLT5nYWluID0gTVI5NzMxMEFfR0FJTl9ERUZBVUxUOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk2LDI5ICs0MzUsMjEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzdGFydF9jaWZfY2FtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJX191OCAqZGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZjsKIAlpbnQgZXJyX2NvZGU7CisJY29uc3QgX191OCBzdGFydHVwX3N0cmluZ1tdID0geworCQkweDAwLAorCQkweDBkLAorCQkweDAxLAorCQkweDAwLCAvKiBIc2l6ZS84IGZvciAzNTIgb3IgMzIwICovCisJCTB4MDAsIC8qIFZzaXplLzQgZm9yIDI4OCBvciAyNDAgKi8KKwkJMHgxMywgLyogb3IgMHhiYiwgZGVwZW5kcyBvbiBzZW5zb3IgKi8KKwkJMHgwMCwgLyogSHN0YXJ0LCBkZXBlbmRzIG9uIHJlcy4gKi8KKwkJMHgwMCwgLyogcmVzZXJ2ZWQgPyAqLworCQkweDAwLCAvKiBWc3RhcnQsIGRlcGVuZHMgb24gcmVzLiBhbmQgc2Vuc29yICovCisJCTB4NTAsIC8qIDB4NTQgdG8gZ2V0IDE3NiBvciAxNjAgKi8KKwkJMHhjMAorCX07CiAKLQlzZC0+c29mX3JlYWQgPSAwOwotCi0JLyogTm90ZTogIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucyBndWVzc2VkIGZyb20gTVI5NzExM0EgZHJpdmVyICovCi0KKwkvKiBOb3RlOiBTb21lIG9mIHRoZSBhYm92ZSBkZXNjcmlwdGlvbnMgZ3Vlc3NlZCBmcm9tIE1SOTcxMTNBIGRyaXZlciAqLwogCWRhdGFbMF0gPSAweDAxOwogCWRhdGFbMV0gPSAweDAxOwotCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwllcnJfY29kZSA9IG1yX3dyaXRlKGdzcGNhX2RldiwgMik7CiAJaWYgKGVycl9jb2RlIDwgMCkKIAkJcmV0dXJuIGVycl9jb2RlOwogCisJbWVtY3B5KGRhdGEsIHN0YXJ0dXBfc3RyaW5nLCAxMSk7CisJaWYgKHNkLT5zZW5zb3JfdHlwZSkKKwkJZGF0YVs1XSA9IDB4YmI7CisKKwlzd2l0Y2ggKGdzcGNhX2Rldi0+d2lkdGgpIHsKKwljYXNlIDE2MDoKKwkJZGF0YVs5XSB8PSAweDA0OyAgLyogcmVnIDgsIDI6MSBzY2FsZSBkb3duIGZyb20gMzIwICovCisJCS8qIGZhbGwgdGhydSAqLworCWNhc2UgMzIwOgorCWRlZmF1bHQ6CisJCWRhdGFbM10gPSAweDI4OwkJCSAgIC8qIHJlZyAyLCBIIHNpemUvOCAqLworCQlkYXRhWzRdID0gMHgzYzsJCQkgICAvKiByZWcgMywgViBzaXplLzQgKi8KKwkJZGF0YVs2XSA9IDB4MTQ7CQkJICAgLyogcmVnIDUsIEggc3RhcnQgICovCisJCWRhdGFbOF0gPSAweDFhICsgc2QtPnNlbnNvcl90eXBlOyAgLyogcmVnIDcsIFYgc3RhcnQgICovCisJCWJyZWFrOworCWNhc2UgMTc2OgorCQlkYXRhWzldIHw9IDB4MDQ7ICAvKiByZWcgOCwgMjoxIHNjYWxlIGRvd24gZnJvbSAzNTIgKi8KKwkJLyogZmFsbCB0aHJ1ICovCisJY2FzZSAzNTI6CisJCWRhdGFbM10gPSAweDJjOwkJCSAgIC8qIHJlZyAyLCBIIHNpemUvOCAqLworCQlkYXRhWzRdID0gMHg0ODsJCQkgICAvKiByZWcgMywgViBzaXplLzQgKi8KKwkJZGF0YVs2XSA9IDB4MDY7CQkJICAgLyogcmVnIDUsIEggc3RhcnQgICovCisJCWRhdGFbOF0gPSAweDA2ICsgc2QtPnNlbnNvcl90eXBlOyAgLyogcmVnIDcsIFYgc3RhcnQgICovCisJCWJyZWFrOworCX0KKwllcnJfY29kZSA9IG1yX3dyaXRlKGdzcGNhX2RldiwgMTEpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWlmICghc2QtPnNlbnNvcl90eXBlKSB7CisJCWNvbnN0IHN0cnVjdCBzZW5zb3Jfd19kYXRhIGNpZl9zZW5zb3IwX2luaXRfZGF0YVtdID0geworCQkJezB4MDIsIDB4MDAsIHsweDAzLCAweDVhLCAweGI1LCAweDAxLAorCQkJCSAgICAgIDB4MGYsIDB4MTQsIDB4MGYsIDB4MTB9LCA4fSwKKwkJCXsweDBjLCAweDAwLCB7MHgwNCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgxZn0sIDV9LAorCQkJezB4MTIsIDB4MDAsIHsweDA3fSwgMX0sCisJCQl7MHgxZiwgMHgwMCwgezB4MDZ9LCAxfSwKKwkJCXsweDI3LCAweDAwLCB7MHgwNH0sIDF9LAorCQkJezB4MjksIDB4MDAsIHsweDBjfSwgMX0sCisJCQl7MHg0MCwgMHgwMCwgezB4NDAsIDB4MDAsIDB4MDR9LCAzfSwKKwkJCXsweDUwLCAweDAwLCB7MHg2MH0sIDF9LAorCQkJezB4NjAsIDB4MDAsIHsweDA2fSwgMX0sCisJCQl7MHg2YiwgMHgwMCwgezB4ODUsIDB4ODUsIDB4YzgsIDB4YzgsIDB4YzgsIDB4Yzh9LCA2fSwKKwkJCXsweDcyLCAweDAwLCB7MHgxZSwgMHg1Nn0sIDJ9LAorCQkJezB4NzUsIDB4MDAsIHsweDU4LCAweDQwLCAweGEyLCAweDAyLCAweDMxLCAweDAyLAorCQkJCSAgICAgIDB4MzEsIDB4ODAsIDB4MDB9LCA5fSwKKwkJCXsweDExLCAweDAwLCB7MHgwMX0sIDF9LAorCQkJezAsIDAsIHswfSwgMH0KKwkJfTsKKwkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIGNpZl9zZW5zb3IwX2luaXRfZGF0YSwKKwkJCQkJIEFSUkFZX1NJWkUoY2lmX3NlbnNvcjBfaW5pdF9kYXRhKSk7CisJfSBlbHNlIHsJLyogc2QtPnNlbnNvcl90eXBlID0gMSAqLworCQljb25zdCBzdHJ1Y3Qgc2Vuc29yX3dfZGF0YSBjaWZfc2Vuc29yMV9pbml0X2RhdGFbXSA9IHsKKwkJCS8qIFJlZyAzLDQsIDcsOCBnZXQgc2V0IGJ5IHRoZSBjb250cm9scyAqLworCQkJezB4MDIsIDB4MDAsIHsweDEwfSwgMX0sCisJCQl7MHgwNSwgMHgwMSwgezB4MjJ9LCAxfSwgLyogNS82IGFsc28gc2VlbiBhcyA2NWgvMzJoICovCisJCQl7MHgwNiwgMHgwMSwgezB4MDB9LCAxfSwKKwkJCXsweDA5LCAweDAyLCB7MHgwZX0sIDF9LAorCQkJezB4MGEsIDB4MDIsIHsweDA1fSwgMX0sCisJCQl7MHgwYiwgMHgwMiwgezB4MDV9LCAxfSwKKwkJCXsweDBjLCAweDAyLCB7MHgwZn0sIDF9LAorCQkJezB4MGQsIDB4MDIsIHsweDA3fSwgMX0sCisJCQl7MHgwZSwgMHgwMiwgezB4MGN9LCAxfSwKKwkJCXsweDBmLCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MTAsIDB4MDAsIHsweDA2fSwgMX0sCisJCQl7MHgxMSwgMHgwMCwgezB4MDd9LCAxfSwKKwkJCXsweDEyLCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MTMsIDB4MDAsIHsweDAxfSwgMX0sCisJCQl7MCwgMCwgezB9LCAwfQorCQl9OworCQllcnJfY29kZSA9IHNlbnNvcl93cml0ZV9yZWdzKGdzcGNhX2RldiwgY2lmX3NlbnNvcjFfaW5pdF9kYXRhLAorCQkJCQkgQVJSQVlfU0laRShjaWZfc2Vuc29yMV9pbml0X2RhdGEpKTsKKwl9CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7CisJc2V0Z2Fpbihnc3BjYV9kZXYpOworCisJbXNsZWVwKDIwMCk7CisKIAlkYXRhWzBdID0gMHgwMDsKLQlkYXRhWzFdID0gMHgwZDsKLQlkYXRhWzJdID0gMHgwMTsKLQlkYXRhWzVdID0gMHgyYjsKLQlkYXRhWzddID0gMHgwMDsKLQlkYXRhWzldID0gMHg1MDsgIC8qIHJlZyA4LCBubyBzY2FsZSBkb3duICovCi0JZGF0YVsxMF0gPSAweGMwOworCWRhdGFbMV0gPSAweDRkOyAgLyogSVNPQyB0cmFuc2ZlcmluZyBlbmFibGUuLi4gKi8KKwllcnJfY29kZSA9IG1yX3dyaXRlKGdzcGNhX2RldiwgMik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfdmdhX2NhbShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTggKmRhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWY7CisJaW50IGVycl9jb2RlOworCWNvbnN0IF9fdTggc3RhcnR1cF9zdHJpbmdbXSA9IHsweDAwLCAweDBkLCAweDAxLCAweDAwLCAweDAwLCAweDJiLAorCQkJCSAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGMwfTsKKworCS8qIFdoYXQgc29tZSBvZiB0aGVzZSBtZWFuIGlzIGV4cGxhaW5lZCBpbiBzdGFydF9jaWZfY2FtKCksIGFib3ZlICovCisJc2QtPnNvZl9yZWFkID0gMDsKKworCS8qCisJICogV2UgaGF2ZSB0byBrbm93IHdoaWNoIGNhbWVyYSB3ZSBoYXZlLCBiZWNhdXNlIHRoZSByZWdpc3RlciB3cml0ZXMKKwkgKiBkZXBlbmQgdXBvbiB0aGUgY2FtZXJhLiBUaGlzIHRlc3QsIHJ1biBiZWZvcmUgd2UgYWN0dWFsbHkgZW50ZXIKKwkgKiB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgZGlzdGluZ3Vpc2hlcyBtb3N0IG9mIHRoZSBjYW1lcmFzLCBJZgorCSAqIG5lZWRlZCwgYW5vdGhlciByb3V0aW5lIGlzIGRvbmUgbGF0ZXIsIHRvby4KKwkgKi8KKwltZW1zZXQoZGF0YSwgMCwgMTYpOworCWRhdGFbMF0gPSAweDIwOworCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAxKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwllcnJfY29kZSA9IG1yX3JlYWQoZ3NwY2FfZGV2LCAxNik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJUERFQlVHKERfUFJPQkUsICJCeXRlIHJlcG9ydGVkIGlzICUwMngiLCBkYXRhWzBdKTsKKworCW1zbGVlcCgyMDApOworCS8qCisJICogS25vd24gVkdBIGNhbWVyYXMuIElmIHlvdSBoYXZlIGFub3RoZXIgdG8gcmVwb3J0LCBwbGVhc2UgZG8KKwkgKgorCSAqIE5hbWUJCQlieXRlIGp1c3QgcmVhZAkJc2QtPnNlbnNvcl90eXBlCisJICoJCQkJc2QtPmRvX2xjZF9zdG9wCisJICogQWlwdGVrIFBlbmNhbSBWR0ErCTB4MzEJCTAJMQorCSAqIElPTiBkaWdpdGFsCQkweDMxCQkwCTEKKwkgKiBBcmd1cyBEQy0xNjIwCTB4MzAJCTEJMAorCSAqIEFyZ3VzIFF1aWNrQ2xpeAkweDMwCQkxCTEgKG5vdCBjYXVnaHQgaGVyZSkKKwkgKi8KKwlzZC0+c2Vuc29yX3R5cGUgPSBkYXRhWzBdICYgMTsKKwlzZC0+ZG9fbGNkX3N0b3AgPSAofmRhdGFbMF0pICYgMTsKKworCisKKwkvKiBTdHJlYW1pbmcgc2V0dXAgYmVnaW5zIGhlcmUuICovCisKKworCWRhdGFbMF0gPSAweDAxOworCWRhdGFbMV0gPSAweDAxOworCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwkvKgorCSAqIEEgc2Vjb25kIHRlc3QgY2FuIG5vdyByZXNvbHZlIGFueSByZW1haW5pbmcgYW1iaWd1aXR5IGluIHRoZQorCSAqIGlkZW50aWZpY2F0aW9uIG9mIHRoZSBjYW1lcmEgdHlwZSwKKwkgKi8KKwlpZiAoIXNkLT5zZW5zb3JfdHlwZSkgeworCQlkYXRhWzBdID0gZ2V0X3NlbnNvcl9pZChnc3BjYV9kZXYpOworCQlpZiAoZGF0YVswXSA9PSAweDdmKSB7CisJCQlzZC0+c2Vuc29yX3R5cGUgPSAxOworCQkJUERFQlVHKERfUFJPQkUsICJzZW5zb3JfdHlwZSBjb3JyZWN0ZWQgdG8gMSIpOworCQl9CisJCW1zbGVlcCgyMDApOworCX0KKworCWlmIChmb3JjZV9zZW5zb3JfdHlwZSAhPSAtMSkgeworCQlzZC0+c2Vuc29yX3R5cGUgPSAhISBmb3JjZV9zZW5zb3JfdHlwZTsKKwkJUERFQlVHKERfUFJPQkUsICJGb3JjaW5nIHNlbnNvciB0eXBlIHRvOiAlZCIsCisJCSAgICAgICBzZC0+c2Vuc29yX3R5cGUpOworCX0KKworCS8qCisJICogS25vd24gVkdBIGNhbWVyYXMuCisJICogVGhpcyB0ZXN0IGlzIG9ubHkgcnVuIGlmIHRoZSBwcmV2aW91cyB0ZXN0IHJldHVybmVkIDB4MzAsIGJ1dAorCSAqIGhlcmUgaXMgdGhlIGluZm9ybWF0aW9uIGZvciBhbGwgb3RoZXJzLCB0b28sIGp1c3QgZm9yIHJlZmVyZW5jZS4KKwkgKgorCSAqIE5hbWUJCQlieXRlIGp1c3QgcmVhZAkJc2QtPnNlbnNvcl90eXBlCisJICoKKwkgKiBBaXB0ZWsgUGVuY2FtIFZHQSsJMHhmYgkodGhpcyB0ZXN0IG5vdCBydW4pCTEKKwkgKiBJT04gZGlnaXRhbAkJMHhiZAkodGhpcyB0ZXN0IG5vdCBydW4pCTEKKwkgKiBBcmd1cyBEQy0xNjIwCTB4ZTUJKG5vIGNoYW5nZSkJCTAKKwkgKiBBcmd1cyBRdWlja0NsaXgJMHg3ZgkocmVjbGFzc2lmaWVkKQkJMQorCSAqLworCW1lbWNweShkYXRhLCBzdGFydHVwX3N0cmluZywgMTEpOworCWlmICghc2QtPnNlbnNvcl90eXBlKSB7CisJCWRhdGFbNV0gID0gMHgwMDsKKwkJZGF0YVsxMF0gPSAweDkxOworCX0KIAogCXN3aXRjaCAoZ3NwY2FfZGV2LT53aWR0aCkgewogCWNhc2UgMTYwOgpAQCAtMTI5LDEwICs2NTEsMTIgQEAKIAkJLyogZmFsbCB0aHJ1ICovCiAJY2FzZSA2NDA6CiAJZGVmYXVsdDoKLQkJZGF0YVszXSA9IDB4NTA7ICAvKiByZWcgMiwgSCBzaXplICovCi0JCWRhdGFbNF0gPSAweDc4OyAgLyogcmVnIDMsIFYgc2l6ZSAqLworCQlkYXRhWzNdID0gMHg1MDsgIC8qIHJlZyAyLCBIIHNpemUvOCAqLworCQlkYXRhWzRdID0gMHg3ODsgIC8qIHJlZyAzLCBWIHNpemUvNCAqLwogCQlkYXRhWzZdID0gMHgwNDsgIC8qIHJlZyA1LCBIIHN0YXJ0ICovCiAJCWRhdGFbOF0gPSAweDAzOyAgLyogcmVnIDcsIFYgc3RhcnQgKi8KKwkJaWYgKHNkLT5kb19sY2Rfc3RvcCkKKwkJCWRhdGFbOF0gPSAweDA0OyAgLyogQmF5ZXIgdGlsZSBzaGlmdGVkICovCiAJCWJyZWFrOwogCiAJY2FzZSAxNzY6CkBAIC0xNDMsMTM2ICs2NjcsMjMwIEBACiAJCWRhdGFbNF0gPSAweDQ4OyAgLyogcmVnIDMsIFYgc2l6ZSAqLwogCQlkYXRhWzZdID0gMHg5NDsgIC8qIHJlZyA1LCBIIHN0YXJ0ICovCiAJCWRhdGFbOF0gPSAweDYzOyAgLyogcmVnIDcsIFYgc3RhcnQgKi8KKwkJaWYgKHNkLT5kb19sY2Rfc3RvcCkKKwkJCWRhdGFbOF0gPSAweDY0OyAgLyogQmF5ZXIgdGlsZSBzaGlmdGVkICovCiAJCWJyZWFrOwogCX0KIAotCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAxMSk7CisJZXJyX2NvZGUgPSBtcl93cml0ZShnc3BjYV9kZXYsIDExKTsKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKLQlkYXRhWzBdID0gMHgwYTsKLQlkYXRhWzFdID0gMHg4MDsKLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CisJaWYgKCFzZC0+c2Vuc29yX3R5cGUpIHsKKwkJLyogVGhlIG9ubHkga25vd24gc2Vuc29yX3R5cGUgMCBjYW0gaXMgdGhlIEFyZ3VzIERDLTE2MjAgKi8KKwkJY29uc3Qgc3RydWN0IHNlbnNvcl93X2RhdGEgdmdhX3NlbnNvcjBfaW5pdF9kYXRhW10gPSB7CisJCQl7MHgwMSwgMHgwMCwgezB4MGMsIDB4MDAsIDB4MDR9LCAzfSwKKwkJCXsweDE0LCAweDAwLCB7MHgwMSwgMHhlNCwgMHgwMiwgMHg4NH0sIDR9LAorCQkJezB4MjAsIDB4MDAsIHsweDAwLCAweDgwLCAweDAwLCAweDA4fSwgNH0sCisJCQl7MHgyNSwgMHgwMCwgezB4MDMsIDB4YTksIDB4ODB9LCAzfSwKKwkJCXsweDMwLCAweDAwLCB7MHgzMCwgMHgxOCwgMHgxMCwgMHgxOH0sIDR9LAorCQkJezAsIDAsIHswfSwgMH0KKwkJfTsKKwkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIHZnYV9zZW5zb3IwX2luaXRfZGF0YSwKKwkJCQkJIEFSUkFZX1NJWkUodmdhX3NlbnNvcjBfaW5pdF9kYXRhKSk7CisJfSBlbHNlIHsJLyogc2QtPnNlbnNvcl90eXBlID0gMSAqLworCQljb25zdCBzdHJ1Y3Qgc2Vuc29yX3dfZGF0YSB2Z2Ffc2Vuc29yMV9pbml0X2RhdGFbXSA9IHsKKwkJCXsweDAyLCAweDAwLCB7MHgwNiwgMHg1OSwgMHgwYywgMHgxNiwgMHgwMCwKKwkJCQkweDA3LCAweDAwLCAweDAxfSwgOH0sCisJCQl7MHgxMSwgMHgwNCwgezB4MDF9LCAxfSwKKwkJCS8qezB4MGEsIDB4MDAsIHsweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAqLworCQkJezB4MGEsIDB4MDAsIHsweDAxLCAweDA2LCAweDAwLCAweDAwLCAweDAxLAorCQkJCTB4MDAsIDB4MGF9LCA3fSwKKwkJCXsweDExLCAweDA0LCB7MHgwMX0sIDF9LAorCQkJezB4MTIsIDB4MDAsIHsweDAwLCAweDYzLCAweDAwLCAweDcwLCAweDAwLCAweDAwfSwgNn0sCisJCQl7MHgxMSwgMHgwNCwgezB4MDF9LCAxfSwKKwkJCXswLCAwLCB7MH0sIDB9CisJCX07CisJCWVycl9jb2RlID0gc2Vuc29yX3dyaXRlX3JlZ3MoZ3NwY2FfZGV2LCB2Z2Ffc2Vuc29yMV9pbml0X2RhdGEsCisJCQkJCSBBUlJBWV9TSVpFKHZnYV9zZW5zb3IxX2luaXRfZGF0YSkpOworCX0KIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKLQlkYXRhWzBdID0gMHgxNDsKLQlkYXRhWzFdID0gMHgwYTsKLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7Ci0JaWYgKGVycl9jb2RlIDwgMCkKLQkJcmV0dXJuIGVycl9jb2RlOwotCi0JZGF0YVswXSA9IDB4MWI7Ci0JZGF0YVsxXSA9IDB4MDA7Ci0JZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOwotCWlmIChlcnJfY29kZSA8IDApCi0JCXJldHVybiBlcnJfY29kZTsKLQotCWRhdGFbMF0gPSAweDE1OwotCWRhdGFbMV0gPSAweDE2OwotCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKLQlpZiAoZXJyX2NvZGUgPCAwKQotCQlyZXR1cm4gZXJyX2NvZGU7Ci0KLQlkYXRhWzBdID0gMHgxNjsKLQlkYXRhWzFdID0gMHgxMDsKLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7Ci0JaWYgKGVycl9jb2RlIDwgMCkKLQkJcmV0dXJuIGVycl9jb2RlOwotCi0JZGF0YVswXSA9IDB4MTc7Ci0JZGF0YVsxXSA9IDB4M2E7Ci0JZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOwotCWlmIChlcnJfY29kZSA8IDApCi0JCXJldHVybiBlcnJfY29kZTsKLQotCWRhdGFbMF0gPSAweDE4OwotCWRhdGFbMV0gPSAweDY4OwotCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKLQlpZiAoZXJyX2NvZGUgPCAwKQotCQlyZXR1cm4gZXJyX2NvZGU7Ci0KLQlkYXRhWzBdID0gMHgxZjsKLQlkYXRhWzFdID0gMHgwMDsKLQlkYXRhWzJdID0gMHgwMjsKLQlkYXRhWzNdID0gMHgwNjsKLQlkYXRhWzRdID0gMHg1OTsKLQlkYXRhWzVdID0gMHgwYzsKLQlkYXRhWzZdID0gMHgxNjsKLQlkYXRhWzddID0gMHgwMDsKLQlkYXRhWzhdID0gMHgwNzsKLQlkYXRhWzldID0gMHgwMDsKLQlkYXRhWzEwXSA9IDB4MDE7Ci0JZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDExKTsKLQlpZiAoZXJyX2NvZGUgPCAwKQotCQlyZXR1cm4gZXJyX2NvZGU7Ci0KLQlkYXRhWzBdID0gMHgxZjsKLQlkYXRhWzFdID0gMHgwNDsKLQlkYXRhWzJdID0gMHgxMTsKLQlkYXRhWzNdID0gMHgwMTsKLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgNCk7Ci0JaWYgKGVycl9jb2RlIDwgMCkKLQkJcmV0dXJuIGVycl9jb2RlOwotCi0JZGF0YVswXSA9IDB4MWY7Ci0JZGF0YVsxXSA9IDB4MDA7Ci0JZGF0YVsyXSA9IDB4MGE7Ci0JZGF0YVszXSA9IDB4MDA7Ci0JZGF0YVs0XSA9IDB4MDE7Ci0JZGF0YVs1XSA9IDB4MDA7Ci0JZGF0YVs2XSA9IDB4MDA7Ci0JZGF0YVs3XSA9IDB4MDE7Ci0JZGF0YVs4XSA9IDB4MDA7Ci0JZGF0YVs5XSA9IDB4MGE7Ci0JZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDEwKTsKLQlpZiAoZXJyX2NvZGUgPCAwKQotCQlyZXR1cm4gZXJyX2NvZGU7Ci0KLQlkYXRhWzBdID0gMHgxZjsKLQlkYXRhWzFdID0gMHgwNDsKLQlkYXRhWzJdID0gMHgxMTsKLQlkYXRhWzNdID0gMHgwMTsKLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgNCk7Ci0JaWYgKGVycl9jb2RlIDwgMCkKLQkJcmV0dXJuIGVycl9jb2RlOwotCi0JZGF0YVswXSA9IDB4MWY7Ci0JZGF0YVsxXSA9IDB4MDA7Ci0JZGF0YVsyXSA9IDB4MTI7Ci0JZGF0YVszXSA9IDB4MDA7Ci0JZGF0YVs0XSA9IDB4NjM7Ci0JZGF0YVs1XSA9IDB4MDA7Ci0JZGF0YVs2XSA9IDB4NzA7Ci0JZGF0YVs3XSA9IDB4MDA7Ci0JZGF0YVs4XSA9IDB4MDA7Ci0JZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDkpOwotCWlmIChlcnJfY29kZSA8IDApCi0JCXJldHVybiBlcnJfY29kZTsKLQotCWRhdGFbMF0gPSAweDFmOwotCWRhdGFbMV0gPSAweDA0OwotCWRhdGFbMl0gPSAweDExOwotCWRhdGFbM10gPSAweDAxOwotCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCA0KTsKLQlpZiAoZXJyX2NvZGUgPCAwKQotCQlyZXR1cm4gZXJyX2NvZGU7Ci0KKwltc2xlZXAoMjAwKTsKIAlkYXRhWzBdID0gMHgwMDsKIAlkYXRhWzFdID0gMHg0ZDsgIC8qIElTT0MgdHJhbnNmZXJpbmcgZW5hYmxlLi4uICovCi0JZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAyKTsKKworCXJldHVybiBlcnJfY29kZTsKK30KKworc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBlcnJfY29kZTsKKwlzdHJ1Y3QgY2FtICpjYW07CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJc2QtPnNvZl9yZWFkID0gMDsKKwkvKgorCSAqIFNvbWUgb2YgdGhlIHN1cHBvcnRlZCBjYW1lcmFzIHJlcXVpcmUgdGhlIG1lbW9yeSBwb2ludGVyIHRvIGJlCisJICogc2V0IHRvIDAsIG9yIGVsc2UgdGhleSB3aWxsIG5vdCBzdHJlYW0uCisJICovCisJemVyb190aGVfcG9pbnRlcihnc3BjYV9kZXYpOworCW1zbGVlcCgyMDApOworCWlmIChzZC0+Y2FtX3R5cGUgPT0gQ0FNX1RZUEVfQ0lGKSB7CisJCWVycl9jb2RlID0gc3RhcnRfY2lmX2NhbShnc3BjYV9kZXYpOworCX0gZWxzZSB7CisJCWVycl9jb2RlID0gc3RhcnRfdmdhX2NhbShnc3BjYV9kZXYpOworCX0KIAlyZXR1cm4gZXJyX2NvZGU7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IHJlc3VsdDsKIAogCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDE7CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsKLQlyZXN1bHQgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCXJlc3VsdCA9IG1yX3dyaXRlKGdzcGNhX2RldiwgMik7CiAJaWYgKHJlc3VsdCA8IDApCiAJCVBERUJVRyhEX0VSUiwgIkNhbWVyYSBTdG9wIGZhaWxlZCIpOworCisJLyogTm90IGFsbCB0aGUgY2FtcyBuZWVkIHRoaXMsIGJ1dCBldmVuIGlmIG5vdCwgcHJvYmFibHkgYSBnb29kIGlkZWEgKi8KKwl6ZXJvX3RoZV9wb2ludGVyKGdzcGNhX2Rldik7CisJaWYgKHNkLT5kb19sY2Rfc3RvcCkgeworCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweDE5OworCQlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSAweDU0OworCQlyZXN1bHQgPSBtcl93cml0ZShnc3BjYV9kZXYsIDIpOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCVBERUJVRyhEX0VSUiwgIkNhbWVyYSBTdG9wIGZhaWxlZCIpOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IHZhbDsKKworCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQlJJR0hUTkVTU19JRFgpKQorCQlyZXR1cm47CisKKwkvKiBOb3RlIHJlZ2lzdGVyIDcgaXMgYWxzbyBzZWVuIGFzIDB4OHggb3IgMHhDeCBpbiBkdW1wcyAqLworCWlmIChzZC0+YnJpZ2h0bmVzcyA+IDApIHsKKwkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIDcsIDB4MDApOworCQl2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwl9IGVsc2UgeworCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgNywgMHgwMSk7CisJCXZhbCA9IDI1NyAtIHNkLT5icmlnaHRuZXNzOworCX0KKwlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgOCwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCB2YWw7CisKKwlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IEVYUE9TVVJFX0lEWCkpCisJCXJldHVybjsKKworCWlmIChzZC0+c2Vuc29yX3R5cGUpIHsKKwkJdmFsID0gc2QtPmV4cG9zdXJlID4+IDQ7CisJCXNlbnNvcl93cml0ZTEoZ3NwY2FfZGV2LCAzLCB2YWwpOworCQl2YWwgPSBzZC0+ZXhwb3N1cmUgJiAweGY7CisJCXNlbnNvcl93cml0ZTEoZ3NwY2FfZGV2LCA0LCB2YWwpOworCX0gZWxzZSB7CisJCXU4IGNsb2NrZGl2OworCQlpbnQgZXhwb3N1cmU7CisKKwkJLyogV2UgaGF2ZSBib3RoIGEgY2xvY2sgZGl2aWRlciBhbmQgYW4gZXhwb3N1cmUgcmVnaXN0ZXIuCisJCSAgIFdlIGZpcnN0IGNhbGN1bGF0ZSB0aGUgY2xvY2sgZGl2aWRlciwgYXMgdGhhdCBkZXRlcm1pbmVzCisJCSAgIHRoZSBtYXhpbXVtIGV4cG9zdXJlIGFuZCB0aGVuIHdlIGNhbGN1bGF5dGUgdGhlIGV4cG9zdXJlCisJCSAgIHJlZ2lzdGVyIHNldHRpbmcgKHdoaWNoIGdvZXMgZnJvbSAwIC0gNTExKS4KKworCQkgICBOb3RlIG91ciAwIC0gNDA5NSBleHBvc3VyZSBpcyBtYXBwZWQgdG8gMCAtIDUxMQorCQkgICBtaWxsaXNlY29uZHMgZXhwb3N1cmUgdGltZSAqLworCQljbG9ja2RpdiA9ICg2MCAqIHNkLT5leHBvc3VyZSArIDc5OTkpIC8gODAwMDsKKworCQkvKiBMaW1pdCBmcmFtZXJhdGUgdG8gbm90IGV4Y2VlZCB1c2IgYmFuZHdpZHRoICovCisJCWlmIChjbG9ja2RpdiA8IDMgJiYgZ3NwY2FfZGV2LT53aWR0aCA+PSAzMjApCisJCQljbG9ja2RpdiA9IDM7CisJCWVsc2UgaWYgKGNsb2NrZGl2IDwgMikKKwkJCWNsb2NrZGl2ID0gMjsKKworCQkvKiBGcmFtZSBleHBvc3VyZSB0aW1lIGluIG1zID0gMTAwMCAqIGNsb2NrZGl2IC8gNjAgLT4KKwkJZXhwb3N1cmUgPSAoc2QtPmV4cG9zdXJlIC8gOCkgKiA1MTEgLyAoMTAwMCAqIGNsb2NrZGl2IC8gNjApICovCisJCWV4cG9zdXJlID0gKDYwICogNTExICogc2QtPmV4cG9zdXJlKSAvICg4MDAwICogY2xvY2tkaXYpOworCQlpZiAoZXhwb3N1cmUgPiA1MTEpCisJCQlleHBvc3VyZSA9IDUxMTsKKworCQkvKiBleHBvc3VyZSByZWdpc3RlciB2YWx1ZSBpcyByZXZlcnNlZCEgKi8KKwkJZXhwb3N1cmUgPSA1MTEgLSBleHBvc3VyZTsKKworCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMHgwMiwgY2xvY2tkaXYpOworCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMHgwZSwgZXhwb3N1cmUgJiAweGZmKTsKKwkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIDB4MGYsIGV4cG9zdXJlID4+IDgpOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBHQUlOX0lEWCkpCisJCXJldHVybjsKKworCWlmIChzZC0+c2Vuc29yX3R5cGUpIHsKKwkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIDB4MGUsIHNkLT5nYWluKTsKKwl9IGVsc2UgeworCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMHgxMCwgc2QtPmdhaW4pOworCX0KK30KKworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5icmlnaHRuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+ZXhwb3N1cmUgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmV4cG9zdXJlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmdhaW4gPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRnYWluKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5nYWluOworCXJldHVybiAwOwogfQogCiAvKiBJbmNsdWRlIHBhYyBjb21tb24gc29mIGRldGVjdGlvbiBmdW5jdGlvbnMgKi8KQEAgLTMyMCw4ICs5MzgsOSBAQAogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewotCXtVU0JfREVWSUNFKDB4MDhjYSwgMHgwMTExKX0sCi0Je1VTQl9ERVZJQ0UoMHgwOTNhLCAweDAxMGYpfSwKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MDExMSl9LAkvKiBBaXB0ZWsgUGVuY2FtIFZHQSsgKi8KKwl7VVNCX0RFVklDRSgweDA5M2EsIDB4MDEwZil9LAkvKiBBbGwgb3RoZXIga25vd24gTVI5NzMxMEEgVkdBIGNhbXMgKi8KKwl7VVNCX0RFVklDRSgweDA5M2EsIDB4MDEwZSl9LAkvKiBBbGwga25vd24gTVI5NzMxMEEgQ0lGIGNhbXMgKi8KIAl7fQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKaW5kZXggOTVhOTdhYi4uOTY2NTk0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCkBAIC0zNSwyNSArMzUsMTcgQEAKIAogI2RlZmluZSBQQUMyMDdfQlJJR0hUTkVTU19NSU4JCTAKICNkZWZpbmUgUEFDMjA3X0JSSUdIVE5FU1NfTUFYCQkyNTUKLSNkZWZpbmUgUEFDMjA3X0JSSUdIVE5FU1NfREVGQVVMVAk0IC8qIHBvd2VyIG9uIGRlZmF1bHQ6IDQgKi8KKyNkZWZpbmUgUEFDMjA3X0JSSUdIVE5FU1NfREVGQVVMVAk0NgogCi0vKiBBbiBleHBvc3VyZSB2YWx1ZSBvZiA0IGFsc28gd29ya3MgKDMgZG9lcyBub3QpIGJ1dCB0aGVuIHdlIG5lZWQgdG8gbG93ZXIKLSAgIHRoZSBjb21wcmVzc2lvbiBiYWxhbmNlIHNldHRpbmcgd2hlbiBpbiAzNTJ4Mjg4IG1vZGUsIG90aGVyd2lzZSB0aGUgdXNiCi0gICBiYW5kd2lkdGggaXMgbm90IGVub3VnaCBhbmQgcGFja2V0cyBnZXQgZHJvcHBlZCByZXN1bHRpbmcgaW4gY29ycnVwdAotICAgZnJhbWVzLiBUaGUgcHJvYmxlbSB3aXRoIHRoaXMgaXMgdGhhdCB3aGVuIHRoZSBjb21wcmVzc2lvbiBiYWxhbmNlIGdldHMKLSAgIGxvd2VyZWQgYmVsb3cgMHg4MCwgdGhlIHBhYzIwNyBzdGFydHMgdXNpbmcgYSBkaWZmZXJlbnQgY29tcHJlc3Npb24KLSAgIGFsZ29yaXRobSBmb3Igc29tZSBsaW5lcywgdGhlc2UgbGluZXMgZ2V0IHByZWZpeGVkIHdpdGggYSAweDJkZDIgcHJlZml4Ci0gICBhbmQgY3VycmVudGx5IHdlIGRvIG5vdCBrbm93IGhvdyB0byBkZWNvbXByZXNzIHRoZXNlIGxpbmVzLCBzbyBmb3Igbm93Ci0gICB3ZSB1c2UgYSBtaW5pbXVtIGV4cG9zdXJlIHZhbHVlIG9mIDUgKi8KLSNkZWZpbmUgUEFDMjA3X0VYUE9TVVJFX01JTgkJNQorI2RlZmluZSBQQUMyMDdfRVhQT1NVUkVfTUlOCQkzCiAjZGVmaW5lIFBBQzIwN19FWFBPU1VSRV9NQVgJCTI2Ci0jZGVmaW5lIFBBQzIwN19FWFBPU1VSRV9ERUZBVUxUCQk1IC8qIHBvd2VyIG9uIGRlZmF1bHQ6IDMgPz8gKi8KLSNkZWZpbmUgUEFDMjA3X0VYUE9TVVJFX0tORUUJCTExIC8qIDQgPSAzMCBmcHMsIDExID0gOCwgMTUgPSA2ICovCisjZGVmaW5lIFBBQzIwN19FWFBPU1VSRV9ERUZBVUxUCQk1IC8qIHBvd2VyIG9uIGRlZmF1bHQ6IDMgKi8KKyNkZWZpbmUgUEFDMjA3X0VYUE9TVVJFX0tORUUJCTggLyogNCA9IDMwIGZwcywgMTEgPSA4LCAxNSA9IDYgKi8KIAogI2RlZmluZSBQQUMyMDdfR0FJTl9NSU4JCQkwCiAjZGVmaW5lIFBBQzIwN19HQUlOX01BWAkJCTMxCiAjZGVmaW5lIFBBQzIwN19HQUlOX0RFRkFVTFQgICAgICAgICAJOSAvKiBwb3dlciBvbiBkZWZhdWx0OiA5ICovCi0jZGVmaW5lIFBBQzIwN19HQUlOX0tORUUJCTIwCisjZGVmaW5lIFBBQzIwN19HQUlOX0tORUUJCTMxCiAKICNkZWZpbmUgUEFDMjA3X0FVVE9HQUlOX0RFQURaT05FCTMwCiAKQEAgLTE2NiwxNiArMTU4LDEyIEBACiB9OwogCiBzdGF0aWMgY29uc3QgX191OCBwYWMyMDdfc2Vuc29yX2luaXRbXVs4XSA9IHsKLQl7MHgxMCwgMHgxMiwgMHgwZCwgMHgxMiwgMHgwYywgMHgwMSwgMHgyOSwgMHhmMH0sCi0JezB4MDAsIDB4NjQsIDB4NjQsIDB4NjQsIDB4MDQsIDB4MTAsIDB4ZjAsIDB4MzB9LAorCXsweDEwLCAweDEyLCAweDBkLCAweDEyLCAweDBjLCAweDAxLCAweDI5LCAweDg0fSwKKwl7MHg0OSwgMHg2NCwgMHg2NCwgMHg2NCwgMHgwNCwgMHgxMCwgMHhmMCwgMHgzMH0sCiAJezB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4YTAsIDB4ZjgsIDB4MDAsIDB4MDB9LAotCXsweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDk2LCAweDAwLCAweGEyLCAweDAyfSwKIAl7MHgzMiwgMHgwMCwgMHg5NiwgMHgwMCwgMHhBMiwgMHgwMiwgMHhhZiwgMHgwMH0sCiB9OwogCi0JCQkvKiA0OCByZWdfNzIgUmF0ZSBDb250cm9sIGVuZCBCYWxTaXplXzRhID0weDM2ICovCi1zdGF0aWMgY29uc3QgX191OCBQYWNSZWc3MltdID0geyAweDAwLCAweDAwLCAweDM2LCAweDAwIH07Ci0KIHN0YXRpYyBpbnQgcGFjMjA3X3dyaXRlX3JlZ3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgaW5kZXgsCiAJY29uc3QgdTggKmJ1ZmZlciwgdTE2IGxlbmd0aCkKIHsKQEAgLTI3NCw3ICsyNjIsNiBAQAogCQkJCSAqIEJpdF8xPUxFRCwKIAkJCQkgKiBCaXRfMj1Db21wcmVzc2lvbiB0ZXN0IG1vZGUgZW5hYmxlICovCiAJcGFjMjA3X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MGYsIDB4MDApOyAvKiBQb3dlciBDb250cm9sICovCi0JcGFjMjA3X3dyaXRlX3JlZyhnc3BjYV9kZXYsIDB4MTEsIDB4MzApOyAvKiBBbmFsb2cgQmlhcyAqLwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODksMTUgKzI3NiwxMyBAQAogCXBhYzIwN193cml0ZV9yZWdzKGdzcGNhX2RldiwgMHgwMDAyLCBwYWMyMDdfc2Vuc29yX2luaXRbMF0sIDgpOwogCXBhYzIwN193cml0ZV9yZWdzKGdzcGNhX2RldiwgMHgwMDBhLCBwYWMyMDdfc2Vuc29yX2luaXRbMV0sIDgpOwogCXBhYzIwN193cml0ZV9yZWdzKGdzcGNhX2RldiwgMHgwMDEyLCBwYWMyMDdfc2Vuc29yX2luaXRbMl0sIDgpOwotCXBhYzIwN193cml0ZV9yZWdzKGdzcGNhX2RldiwgMHgwMDQwLCBwYWMyMDdfc2Vuc29yX2luaXRbM10sIDgpOwotCXBhYzIwN193cml0ZV9yZWdzKGdzcGNhX2RldiwgMHgwMDQyLCBwYWMyMDdfc2Vuc29yX2luaXRbNF0sIDgpOwotCXBhYzIwN193cml0ZV9yZWdzKGdzcGNhX2RldiwgMHgwMDQ4LCBQYWNSZWc3MiwgNCk7CisJcGFjMjA3X3dyaXRlX3JlZ3MoZ3NwY2FfZGV2LCAweDAwNDIsIHBhYzIwN19zZW5zb3JfaW5pdFszXSwgOCk7CiAKIAkvKiBDb21wcmVzc2lvbiBCYWxhbmNlICovCiAJaWYgKGdzcGNhX2Rldi0+d2lkdGggPT0gMTc2KQogCQlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHg0YSwgMHhmZik7CiAJZWxzZQotCQlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHg0YSwgMHg4OCk7CisJCXBhYzIwN193cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDRhLCAweDMwKTsKIAlwYWMyMDdfd3JpdGVfcmVnKGdzcGNhX2RldiwgMHg0YiwgMHgwMCk7IC8qIFNyYW0gdGVzdCB2YWx1ZSAqLwogCXBhYzIwN193cml0ZV9yZWcoZ3NwY2FfZGV2LCAweDA4LCBzZC0+YnJpZ2h0bmVzcyk7CiAKQEAgLTM0Niw3ICszMzEsNyBAQAogCWlmIChzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA+IDApCiAJCXNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzLS07CiAJZWxzZSBpZiAoZ3NwY2FfYXV0b19nYWluX25fZXhwb3N1cmUoZ3NwY2FfZGV2LCBhdmdfbHVtLAotCQkJMTAwICsgc2QtPmJyaWdodG5lc3MgLyAyLCBQQUMyMDdfQVVUT0dBSU5fREVBRFpPTkUsCisJCQkxMDAsIFBBQzIwN19BVVRPR0FJTl9ERUFEWk9ORSwKIAkJCVBBQzIwN19HQUlOX0tORUUsIFBBQzIwN19FWFBPU1VSRV9LTkVFKSkKIAkJc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPSBQQUNfQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMKaW5kZXggZTFlM2EzYS4uMDUyNzE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMKQEAgLTEwNTcsNiArMTA1Nyw3IEBACiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwogc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDkpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMwMn0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MDApLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMxMX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MDEpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMxMX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI2MDMpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFDNzMxMX0sCkBAIC0xMDY4LDYgKzEwNjksNyBAQAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjIyKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX1BBQzczMDJ9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjI0KSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX1BBQzczMDJ9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjI2KSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX1BBQzczMDJ9LAorCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjI5KSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX1BBQzczMDJ9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjJhKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX1BBQzczMDJ9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNjJjKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX1BBQzczMDJ9LAogCXt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIweC5jCmluZGV4IGZjZmJiZDMuLmNkYWQzZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIweC5jCkBAIC05NCw2ICs5NCwxNiBAQAogI2VuZGlmCiB9OwogCitzdHJ1Y3QgaTJjX3JlZ191OCB7CisJdTggcmVnOworCXU4IHZhbDsKK307CisKK3N0cnVjdCBpMmNfcmVnX3UxNiB7CisJdTggcmVnOworCXUxNiB2YWw7Cit9OworCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHMzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzMzIgdmFsKTsKQEAgLTQwMyw3ICs0MTMsNyBAQAogCQkucHJpdiA9IDMgfCBNT0RFX1JBVyB8IE1PREVfU1hHQX0sCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGhzdl9yZWRfeFtdID0geworc3RhdGljIGNvbnN0IHMxNiBoc3ZfcmVkX3hbXSA9IHsKIAk0MSwgIDQ0LCAgNDYsICA0OCwgIDUwLCAgNTIsICA1NCwgIDU2LAogCTU4LCAgNjAsICA2MiwgIDY0LCAgNjYsICA2OCwgIDcwLCAgNzIsCiAJNzQsICA3NiwgIDc4LCAgODAsICA4MSwgIDgzLCAgODUsICA4NywKQEAgLTQ1MSw3ICs0NjEsNyBAQAogCTI0LCAgMjYsICAyOCwgIDMwLCAgMzMsICAzNSwgIDM3LCAgMzksIDQxCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGhzdl9yZWRfeVtdID0geworc3RhdGljIGNvbnN0IHMxNiBoc3ZfcmVkX3lbXSA9IHsKIAk4MiwgIDgwLCAgNzgsICA3NiwgIDc0LCAgNzMsICA3MSwgIDY5LAogCTY3LCAgNjUsICA2MywgIDYxLCAgNTgsICA1NiwgIDU0LCAgNTIsCiAJNTAsICA0OCwgIDQ2LCAgNDQsICA0MSwgIDM5LCAgMzcsICAzNSwKQEAgLTQ5OSw3ICs1MDksNyBAQAogCTk2LCA5NCwgOTIsIDkxLCA4OSwgODcsIDg1LCA4NCwgODIKIH07CiAKLXN0YXRpYyBjb25zdCBpbnQgaHN2X2dyZWVuX3hbXSA9IHsKK3N0YXRpYyBjb25zdCBzMTYgaHN2X2dyZWVuX3hbXSA9IHsKIAktMTI0LCAtMTI0LCAtMTI1LCAtMTI1LCAtMTI1LCAtMTI1LCAtMTI1LCAtMTI1LAogCS0xMjUsIC0xMjYsIC0xMjYsIC0xMjUsIC0xMjUsIC0xMjUsIC0xMjUsIC0xMjUsCiAJLTEyNSwgLTEyNCwgLTEyNCwgLTEyNCwgLTEyMywgLTEyMywgLTEyMiwgLTEyMiwKQEAgLTU0Nyw3ICs1NTcsNyBAQAogCS0xMjAsIC0xMjAsIC0xMjEsIC0xMjIsIC0xMjIsIC0xMjMsIC0xMjMsIC0xMjQsIC0xMjQKIH07CiAKLXN0YXRpYyBjb25zdCBpbnQgaHN2X2dyZWVuX3lbXSA9IHsKK3N0YXRpYyBjb25zdCBzMTYgaHN2X2dyZWVuX3lbXSA9IHsKIAktMTAwLCAtOTksIC05OCwgLTk3LCAtOTUsIC05NCwgLTkzLCAtOTEsCiAJLTkwLCAtODksIC04NywgLTg2LCAtODQsIC04MywgLTgxLCAtODAsCiAJLTc4LCAtNzYsIC03NSwgLTczLCAtNzEsIC03MCwgLTY4LCAtNjYsCkBAIC01OTUsNyArNjA1LDcgQEAKIAktMTA5LCAtMTA4LCAtMTA3LCAtMTA2LCAtMTA1LCAtMTA0LCAtMTAzLCAtMTAyLCAtMTAwCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGhzdl9ibHVlX3hbXSA9IHsKK3N0YXRpYyBjb25zdCBzMTYgaHN2X2JsdWVfeFtdID0gewogCTExMiwgMTEzLCAxMTQsIDExNCwgMTE1LCAxMTYsIDExNywgMTE3LAogCTExOCwgMTE4LCAxMTksIDExOSwgMTIwLCAxMjAsIDEyMCwgMTIxLAogCTEyMSwgMTIxLCAxMjIsIDEyMiwgMTIyLCAxMjIsIDEyMiwgMTIyLApAQCAtNjQzLDcgKzY1Myw3IEBACiAJMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMgogfTsKIAotc3RhdGljIGNvbnN0IGludCBoc3ZfYmx1ZV95W10gPSB7CitzdGF0aWMgY29uc3QgczE2IGhzdl9ibHVlX3lbXSA9IHsKIAktMTEsIC0xMywgLTE1LCAtMTcsIC0xOSwgLTIxLCAtMjMsIC0yNSwKIAktMjcsIC0yOSwgLTMxLCAtMzMsIC0zNSwgLTM3LCAtMzksIC00MSwKIAktNDMsIC00NSwgLTQ2LCAtNDgsIC01MCwgLTUyLCAtNTQsIC01NSwKQEAgLTc5MiwyMSArODAyLDIxIEBACiAJMHg3OCAvKiA4eCAqLwogfTsKIAotc3RhdGljIHU4IHNvaTk2OF9pbml0W11bMl0gPSB7CitzdGF0aWMgc3RydWN0IGkyY19yZWdfdTggc29pOTY4X2luaXRbXSA9IHsKIAl7MHgxMiwgMHg4MH0sIHsweDBjLCAweDAwfSwgezB4MGYsIDB4MWZ9LAogCXsweDExLCAweDgwfSwgezB4MzgsIDB4NTJ9LCB7MHgxZSwgMHgwMH0sCiAJezB4MzMsIDB4MDh9LCB7MHgzNSwgMHg4Y30sIHsweDM2LCAweDBjfSwKIAl7MHgzNywgMHgwNH0sIHsweDQ1LCAweDA0fSwgezB4NDcsIDB4ZmZ9LAogCXsweDNlLCAweDAwfSwgezB4M2YsIDB4MDB9LCB7MHgzYiwgMHgyMH0sCiAJezB4M2EsIDB4OTZ9LCB7MHgzZCwgMHgwYX0sIHsweDE0LCAweDhlfSwKLQl7MHgxMywgMHg4YX0sIHsweDEyLCAweDQwfSwgezB4MTcsIDB4MTN9LAorCXsweDEzLCAweDhifSwgezB4MTIsIDB4NDB9LCB7MHgxNywgMHgxM30sCiAJezB4MTgsIDB4NjN9LCB7MHgxOSwgMHgwMX0sIHsweDFhLCAweDc5fSwKIAl7MHgzMiwgMHgyNH0sIHsweDAzLCAweDAwfSwgezB4MTEsIDB4NDB9LAogCXsweDJhLCAweDEwfSwgezB4MmIsIDB4ZTB9LCB7MHgxMCwgMHgzMn0sCiAJezB4MDAsIDB4MDB9LCB7MHgwMSwgMHg4MH0sIHsweDAyLCAweDgwfSwKIH07CiAKLXN0YXRpYyB1OCBvdjc2NjBfaW5pdFtdWzJdID0geworc3RhdGljIHN0cnVjdCBpMmNfcmVnX3U4IG92NzY2MF9pbml0W10gPSB7CiAJezB4MGUsIDB4ODB9LCB7MHgwZCwgMHgwOH0sIHsweDBmLCAweGMzfSwKIAl7MHgwNCwgMHhjM30sIHsweDEwLCAweDQwfSwgezB4MTEsIDB4NDB9LAogCXsweDEyLCAweDA1fSwgezB4MTMsIDB4YmF9LCB7MHgxNCwgMHgyYX0sCkBAIC04MTUsNyArODI1LDcgQEAKIAl7MHgyZSwgMHgwYn0sIHsweDAxLCAweDc4fSwgezB4MDIsIDB4NTB9LAogfTsKIAotc3RhdGljIHU4IG92NzY3MF9pbml0W11bMl0gPSB7CitzdGF0aWMgc3RydWN0IGkyY19yZWdfdTggb3Y3NjcwX2luaXRbXSA9IHsKIAl7MHgxMiwgMHg4MH0sIHsweDExLCAweDgwfSwgezB4M2EsIDB4MDR9LCB7MHgxMiwgMHgwMX0sCiAJezB4MzIsIDB4YjZ9LCB7MHgwMywgMHgwYX0sIHsweDBjLCAweDAwfSwgezB4M2UsIDB4MDB9LAogCXsweDcwLCAweDNhfSwgezB4NzEsIDB4MzV9LCB7MHg3MiwgMHgxMX0sIHsweDczLCAweGYwfSwKQEAgLTg3Miw3ICs4ODIsNyBAQAogCXsweDkzLCAweDAwfSwKIH07CiAKLXN0YXRpYyB1OCBvdjk2NTBfaW5pdFtdWzJdID0geworc3RhdGljIHN0cnVjdCBpMmNfcmVnX3U4IG92OTY1MF9pbml0W10gPSB7CiAJezB4MTIsIDB4ODB9LCB7MHgwMCwgMHgwMH0sIHsweDAxLCAweDc4fSwKIAl7MHgwMiwgMHg3OH0sIHsweDAzLCAweDM2fSwgezB4MDQsIDB4MDN9LAogCXsweDA1LCAweDAwfSwgezB4MDYsIDB4MDB9LCB7MHgwOCwgMHgwMH0sCkBAIC05MDIsNyArOTEyLDcgQEAKIAl7MHhhYSwgMHg5Mn0sIHsweGFiLCAweDBhfSwKIH07CiAKLXN0YXRpYyB1OCBvdjk2NTVfaW5pdFtdWzJdID0geworc3RhdGljIHN0cnVjdCBpMmNfcmVnX3U4IG92OTY1NV9pbml0W10gPSB7CiAJezB4MTIsIDB4ODB9LCB7MHgxMiwgMHgwMX0sIHsweDBkLCAweDAwfSwgezB4MGUsIDB4NjF9LAogCXsweDExLCAweDgwfSwgezB4MTMsIDB4YmF9LCB7MHgxNCwgMHgyZX0sIHsweDE2LCAweDI0fSwKIAl7MHgxZSwgMHgwNH0sIHsweDFlLCAweDA0fSwgezB4MWUsIDB4MDR9LCB7MHgyNywgMHgwOH0sCkBAIC05MzksNyArOTQ5LDcgQEAKIAl7MHgwMCwgMHgwM30sIHsweDAwLCAweDBhfSwgezB4MDAsIDB4MTB9LCB7MHgwMCwgMHgxM30sCiB9OwogCi1zdGF0aWMgdTE2IG10OXYxMTJfaW5pdFtdWzJdID0geworc3RhdGljIHN0cnVjdCBpMmNfcmVnX3UxNiBtdDl2MTEyX2luaXRbXSA9IHsKIAl7MHhmMCwgMHgwMDAwfSwgezB4MGQsIDB4MDAyMX0sIHsweDBkLCAweDAwMjB9LAogCXsweDM0LCAweGMwMTl9LCB7MHgwYSwgMHgwMDExfSwgezB4MGIsIDB4MDAwYn0sCiAJezB4MjAsIDB4MDcwM30sIHsweDM1LCAweDIwMjJ9LCB7MHhmMCwgMHgwMDAxfSwKQEAgLTk1OCw3ICs5NjgsNyBAQAogCXsweDJjLCAweDAwYWV9LCB7MHgyZCwgMHgwMGFlfSwgezB4MmUsIDB4MDBhZX0sCiB9OwogCi1zdGF0aWMgdTE2IG10OXYxMTFfaW5pdFtdWzJdID0geworc3RhdGljIHN0cnVjdCBpMmNfcmVnX3UxNiBtdDl2MTExX2luaXRbXSA9IHsKIAl7MHgwMSwgMHgwMDA0fSwgezB4MGQsIDB4MDAwMX0sIHsweDBkLCAweDAwMDB9LAogCXsweDAxLCAweDAwMDF9LCB7MHgwMiwgMHgwMDE2fSwgezB4MDMsIDB4MDFlMX0sCiAJezB4MDQsIDB4MDI4MX0sIHsweDA1LCAweDAwMDR9LCB7MHgwNywgMHgzMDAyfSwKQEAgLTk4NSw3ICs5OTUsNyBAQAogCXsweDBlLCAweDAwMDh9LAl7MHgwNiwgMHgwMDJkfSwJezB4MDUsIDB4MDAwNH0sCiB9OwogCi1zdGF0aWMgdTE2IG10OXYwMTFfaW5pdFtdWzJdID0geworc3RhdGljIHN0cnVjdCBpMmNfcmVnX3UxNiBtdDl2MDExX2luaXRbXSA9IHsKIAl7MHgwNywgMHgwMDAyfSwJezB4MGQsIDB4MDAwMX0sCXsweDBkLCAweDAwMDB9LAogCXsweDAxLCAweDAwMDh9LAl7MHgwMiwgMHgwMDE2fSwJezB4MDMsIDB4MDFlMX0sCiAJezB4MDQsIDB4MDI4MX0sCXsweDA1LCAweDAwODN9LAl7MHgwNiwgMHgwMDA2fSwKQEAgLTEwMTIsNyArMTAyMiw3IEBACiAJezB4MDYsIDB4MDAyOX0sCXsweDA1LCAweDAwMDl9LAogfTsKIAotc3RhdGljIHUxNiBtdDltMDAxX2luaXRbXVsyXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaTJjX3JlZ191MTYgbXQ5bTAwMV9pbml0W10gPSB7CiAJezB4MGQsIDB4MDAwMX0sIHsweDBkLCAweDAwMDB9LCB7MHgwMSwgMHgwMDBlfSwKIAl7MHgwMiwgMHgwMDE0fSwgezB4MDMsIDB4MDNjMX0sIHsweDA0LCAweDA1MDF9LAogCXsweDA1LCAweDAwODN9LCB7MHgwNiwgMHgwMDA2fSwgezB4MGQsIDB4MDAwMn0sCkBAIC0xMDI1LDE0ICsxMDM1LDE0IEBACiAJezB4MmUsIDB4MDAyOX0sIHsweDA3LCAweDAwMDJ9LAogfTsKIAotc3RhdGljIHUxNiBtdDltMTExX2luaXRbXVsyXSA9IHsKLQl7MHhmMCwgMHgwMDAwfSwgezB4MGQsIDB4MDAwOH0sIHsweDBkLCAweDAwMDl9LAotCXsweDBkLCAweDAwMDh9LCB7MHhmMCwgMHgwMDAxfSwgezB4M2EsIDB4NDMwMH0sCi0JezB4OWIsIDB4NDMwMH0sIHsweGExLCAweDAyODB9LCB7MHhhNCwgMHgwMjAwfSwKLQl7MHgwNiwgMHgzMDhlfSwgezB4ZjAsIDB4MDAwMH0sCitzdGF0aWMgc3RydWN0IGkyY19yZWdfdTE2IG10OW0xMTFfaW5pdFtdID0geworCXsweGYwLCAweDAwMDB9LCB7MHgwZCwgMHgwMDIxfSwgezB4MGQsIDB4MDAwOH0sCisJezB4ZjAsIDB4MDAwMX0sIHsweDNhLCAweDQzMDB9LCB7MHg5YiwgMHg0MzAwfSwKKwl7MHgwNiwgMHg3MDhlfSwgezB4ZjAsIDB4MDAwMn0sIHsweDJlLCAweDBhMWV9LAorCXsweGYwLCAweDAwMDB9LAogfTsKIAotc3RhdGljIHU4IGh2NzEzMXJfaW5pdFtdWzJdID0geworc3RhdGljIHN0cnVjdCBpMmNfcmVnX3U4IGh2NzEzMXJfaW5pdFtdID0gewogCXsweDAyLCAweDA4fSwgezB4MDIsIDB4MDB9LCB7MHgwMSwgMHgwOH0sCiAJezB4MDIsIDB4MDB9LCB7MHgyMCwgMHgwMH0sIHsweDIxLCAweGQwfSwKIAl7MHgyMiwgMHgwMH0sIHsweDIzLCAweDA5fSwgezB4MDEsIDB4MDh9LApAQCAtMTA0Myw3ICsxMDUzLDcgQEAKIAl7MHgyMywgMHgwOX0sIHsweDAxLCAweDA4fSwKIH07CiAKLWludCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcsIHUxNiBsZW5ndGgpCitzdGF0aWMgaW50IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZywgdTE2IGxlbmd0aCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJaW50IHJlc3VsdDsKQEAgLTEwNjIsNyArMTA3Miw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcsIGNvbnN0IHU4ICpidWZmZXIsIGludCBsZW5ndGgpCitzdGF0aWMgaW50IHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZywKKwkJIGNvbnN0IHU4ICpidWZmZXIsIGludCBsZW5ndGgpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCByZXN1bHQ7CkBAIC0xMDgyLDEzICsxMDkzLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCByZWdfdzEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCBjb25zdCB1OCB2YWx1ZSkKK3N0YXRpYyBpbnQgcmVnX3cxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZywgY29uc3QgdTggdmFsdWUpCiB7CiAJdTggZGF0YVsxXSA9IHt2YWx1ZX07CiAJcmV0dXJuIHJlZ193KGdzcGNhX2RldiwgcmVnLCBkYXRhLCAxKTsKIH0KIAotaW50IGkyY193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgY29uc3QgdTggKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaTJjX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBjb25zdCB1OCAqYnVmZmVyKQogewogCWludCBpOwogCXJlZ193KGdzcGNhX2RldiwgMHgxMGMwLCBidWZmZXIsIDgpOwpAQCAtMTA5NiwxNSArMTEwNywxNSBAQAogCQlyZWdfcihnc3BjYV9kZXYsIDB4MTBjMCwgMSk7CiAJCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gJiAweDA0KSB7CiAJCQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdICYgMHgwOCkKLQkJCQlyZXR1cm4gLTE7CisJCQkJcmV0dXJuIC1FSU87CiAJCQlyZXR1cm4gMDsKIAkJfQogCQltc2xlZXAoMSk7CiAJfQotCXJldHVybiAtMTsKKwlyZXR1cm4gLUVJTzsKIH0KIAotaW50IGkyY193MShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4IHJlZywgdTggdmFsKQorc3RhdGljIGludCBpMmNfdzEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCByZWcsIHU4IHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKQEAgLTExMjYsNyArMTEzNyw3IEBACiAJcmV0dXJuIGkyY193KGdzcGNhX2Rldiwgcm93KTsKIH0KIAotaW50IGkyY193MihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4IHJlZywgdTE2IHZhbCkKK3N0YXRpYyBpbnQgaTJjX3cyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1MTYgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1OCByb3dbOF07CkBAIC0xMTUyLDcgKzExNjMsNyBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1OCByb3dbOF07CiAKLQlyb3dbMF0gPSAweDgxIHwgMHgxMDsKKwlyb3dbMF0gPSAweDgxIHwgKDEgPDwgNCk7CiAJcm93WzFdID0gc2QtPmkyY19hZGRyOwogCXJvd1syXSA9IHJlZzsKIAlyb3dbM10gPSAwOwpAQCAtMTE2MCwxNCArMTE3MSwxNSBAQAogCXJvd1s1XSA9IDA7CiAJcm93WzZdID0gMDsKIAlyb3dbN10gPSAweDEwOwotCXJlZ193KGdzcGNhX2RldiwgMHgxMGMwLCByb3csIDgpOwotCW1zbGVlcCgxKTsKLQlyb3dbMF0gPSAweDgxIHwgKDIgPDwgNCkgfCAweDAyOworCWlmIChpMmNfdyhnc3BjYV9kZXYsIHJvdykgPCAwKQorCQlyZXR1cm4gLUVJTzsKKwlyb3dbMF0gPSAweDgxIHwgKDEgPDwgNCkgfCAweDAyOwogCXJvd1syXSA9IDA7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDEwYzAsIHJvdywgOCk7Ci0JbXNsZWVwKDEpOwotCXJlZ19yKGdzcGNhX2RldiwgMHgxMGMyLCA1KTsKLQkqdmFsID0gZ3NwY2FfZGV2LT51c2JfYnVmWzNdOworCWlmIChpMmNfdyhnc3BjYV9kZXYsIHJvdykgPCAwKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAocmVnX3IoZ3NwY2FfZGV2LCAweDEwYzIsIDUpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisJKnZhbCA9IGdzcGNhX2Rldi0+dXNiX2J1Zls0XTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE3Niw3ICsxMTg4LDcgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJdTggcm93WzhdOwogCi0Jcm93WzBdID0gMHg4MSB8IDB4MTA7CisJcm93WzBdID0gMHg4MSB8ICgxIDw8IDQpOwogCXJvd1sxXSA9IHNkLT5pMmNfYWRkcjsKIAlyb3dbMl0gPSByZWc7CiAJcm93WzNdID0gMDsKQEAgLTExODQsMTQgKzExOTYsMTUgQEAKIAlyb3dbNV0gPSAwOwogCXJvd1s2XSA9IDA7CiAJcm93WzddID0gMHgxMDsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MTBjMCwgcm93LCA4KTsKLQltc2xlZXAoMSk7Ci0Jcm93WzBdID0gMHg4MSB8ICgzIDw8IDQpIHwgMHgwMjsKKwlpZiAoaTJjX3coZ3NwY2FfZGV2LCByb3cpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisJcm93WzBdID0gMHg4MSB8ICgyIDw8IDQpIHwgMHgwMjsKIAlyb3dbMl0gPSAwOwotCXJlZ193KGdzcGNhX2RldiwgMHgxMGMwLCByb3csIDgpOwotCW1zbGVlcCgxKTsKLQlyZWdfcihnc3BjYV9kZXYsIDB4MTBjMiwgNSk7Ci0JKnZhbCA9IChnc3BjYV9kZXYtPnVzYl9idWZbMl0gPDwgOCkgfCBnc3BjYV9kZXYtPnVzYl9idWZbM107CisJaWYgKGkyY193KGdzcGNhX2Rldiwgcm93KSA8IDApCisJCXJldHVybiAtRUlPOworCWlmIChyZWdfcihnc3BjYV9kZXYsIDB4MTBjMiwgNSkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKwkqdmFsID0gKGdzcGNhX2Rldi0+dXNiX2J1ZlszXSA8PCA4KSB8IGdzcGNhX2Rldi0+dXNiX2J1Zls0XTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTIwMSw4ICsxMjE0LDggQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvdjk2NTBfaW5pdCk7IGkrKykgewotCQlpZiAoaTJjX3cxKGdzcGNhX2Rldiwgb3Y5NjUwX2luaXRbaV1bMF0sCi0JCQkJb3Y5NjUwX2luaXRbaV1bMV0pIDwgMCkgeworCQlpZiAoaTJjX3cxKGdzcGNhX2Rldiwgb3Y5NjUwX2luaXRbaV0ucmVnLAorCQkJCW92OTY1MF9pbml0W2ldLnZhbCkgPCAwKSB7CiAJCQllcnIoIk9WOTY1MCBzZW5zb3IgaW5pdGlhbGl6YXRpb24gZmFpbGVkIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQpAQCAtMTIxOCw4ICsxMjMxLDggQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvdjk2NTVfaW5pdCk7IGkrKykgewotCQlpZiAoaTJjX3cxKGdzcGNhX2Rldiwgb3Y5NjU1X2luaXRbaV1bMF0sCi0JCQkJb3Y5NjU1X2luaXRbaV1bMV0pIDwgMCkgeworCQlpZiAoaTJjX3cxKGdzcGNhX2Rldiwgb3Y5NjU1X2luaXRbaV0ucmVnLAorCQkJCW92OTY1NV9pbml0W2ldLnZhbCkgPCAwKSB7CiAJCQllcnIoIk9WOTY1NSBzZW5zb3IgaW5pdGlhbGl6YXRpb24gZmFpbGVkIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQpAQCAtMTIzNywxNCArMTI1MCwxNCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNvaTk2OF9pbml0KTsgaSsrKSB7Ci0JCWlmIChpMmNfdzEoZ3NwY2FfZGV2LCBzb2k5NjhfaW5pdFtpXVswXSwKLQkJCQlzb2k5NjhfaW5pdFtpXVsxXSkgPCAwKSB7CisJCWlmIChpMmNfdzEoZ3NwY2FfZGV2LCBzb2k5NjhfaW5pdFtpXS5yZWcsCisJCQkJc29pOTY4X2luaXRbaV0udmFsKSA8IDApIHsKIAkJCWVycigiU09JOTY4IHNlbnNvciBpbml0aWFsaXphdGlvbiBmYWlsZWQiKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQogCS8qIGRpc2FibGUgaGZsaXAgYW5kIHZmbGlwICovCi0JZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpOworCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBIRkxJUF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8ICgxIDw8IEVYUE9TVVJFX0lEWCk7CiAJc2QtPmhzdGFydCA9IDYwOwogCXNkLT52c3RhcnQgPSAxMTsKIAlyZXR1cm4gMDsKQEAgLTEyNTYsOCArMTI2OSw4IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3Y3NjYwX2luaXQpOyBpKyspIHsKLQkJaWYgKGkyY193MShnc3BjYV9kZXYsIG92NzY2MF9pbml0W2ldWzBdLAotCQkJCW92NzY2MF9pbml0W2ldWzFdKSA8IDApIHsKKwkJaWYgKGkyY193MShnc3BjYV9kZXYsIG92NzY2MF9pbml0W2ldLnJlZywKKwkJCQlvdjc2NjBfaW5pdFtpXS52YWwpIDwgMCkgewogCQkJZXJyKCJPVjc2NjAgc2Vuc29yIGluaXRpYWxpemF0aW9uIGZhaWxlZCIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTEyNzUsOCArMTI4OCw4IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3Y3NjcwX2luaXQpOyBpKyspIHsKLQkJaWYgKGkyY193MShnc3BjYV9kZXYsIG92NzY3MF9pbml0W2ldWzBdLAotCQkJCW92NzY3MF9pbml0W2ldWzFdKSA8IDApIHsKKwkJaWYgKGkyY193MShnc3BjYV9kZXYsIG92NzY3MF9pbml0W2ldLnJlZywKKwkJCQlvdjc2NzBfaW5pdFtpXS52YWwpIDwgMCkgewogCQkJZXJyKCJPVjc2NzAgc2Vuc29yIGluaXRpYWxpemF0aW9uIGZhaWxlZCIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTEyOTksOCArMTMxMiw4IEBACiAJcmV0ID0gaTJjX3IyKGdzcGNhX2RldiwgMHhmZiwgJnZhbHVlKTsKIAlpZiAoKHJldCA9PSAwKSAmJiAodmFsdWUgPT0gMHg4MjQzKSkgewogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdDl2MDExX2luaXQpOyBpKyspIHsKLQkJCWlmIChpMmNfdzIoZ3NwY2FfZGV2LCBtdDl2MDExX2luaXRbaV1bMF0sCi0JCQkJCW10OXYwMTFfaW5pdFtpXVsxXSkgPCAwKSB7CisJCQlpZiAoaTJjX3cyKGdzcGNhX2RldiwgbXQ5djAxMV9pbml0W2ldLnJlZywKKwkJCQkJbXQ5djAxMV9pbml0W2ldLnZhbCkgPCAwKSB7CiAJCQkJZXJyKCJNVDlWMDExIHNlbnNvciBpbml0aWFsaXphdGlvbiBmYWlsZWQiKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KQEAgLTEzMTcsOCArMTMzMCw4IEBACiAJcmV0ID0gaTJjX3IyKGdzcGNhX2RldiwgMHhmZiwgJnZhbHVlKTsKIAlpZiAoKHJldCA9PSAwKSAmJiAodmFsdWUgPT0gMHg4MjNhKSkgewogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdDl2MTExX2luaXQpOyBpKyspIHsKLQkJCWlmIChpMmNfdzIoZ3NwY2FfZGV2LCBtdDl2MTExX2luaXRbaV1bMF0sCi0JCQkJCW10OXYxMTFfaW5pdFtpXVsxXSkgPCAwKSB7CisJCQlpZiAoaTJjX3cyKGdzcGNhX2RldiwgbXQ5djExMV9pbml0W2ldLnJlZywKKwkJCQkJbXQ5djExMV9pbml0W2ldLnZhbCkgPCAwKSB7CiAJCQkJZXJyKCJNVDlWMTExIHNlbnNvciBpbml0aWFsaXphdGlvbiBmYWlsZWQiKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KQEAgLTEzMzksOCArMTM1Miw4IEBACiAJcmV0ID0gaTJjX3IyKGdzcGNhX2RldiwgMHgwMCwgJnZhbHVlKTsKIAlpZiAoKHJldCA9PSAwKSAmJiAodmFsdWUgPT0gMHgxMjI5KSkgewogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdDl2MTEyX2luaXQpOyBpKyspIHsKLQkJCWlmIChpMmNfdzIoZ3NwY2FfZGV2LCBtdDl2MTEyX2luaXRbaV1bMF0sCi0JCQkJCW10OXYxMTJfaW5pdFtpXVsxXSkgPCAwKSB7CisJCQlpZiAoaTJjX3cyKGdzcGNhX2RldiwgbXQ5djExMl9pbml0W2ldLnJlZywKKwkJCQkJbXQ5djExMl9pbml0W2ldLnZhbCkgPCAwKSB7CiAJCQkJZXJyKCJNVDlWMTEyIHNlbnNvciBpbml0aWFsaXphdGlvbiBmYWlsZWQiKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KQEAgLTEzNjAsMTIgKzEzNzMsMTMgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXQ5bTExMV9pbml0KTsgaSsrKSB7Ci0JCWlmIChpMmNfdzIoZ3NwY2FfZGV2LCBtdDltMTExX2luaXRbaV1bMF0sCi0JCQkJbXQ5bTExMV9pbml0W2ldWzFdKSA8IDApIHsKKwkJaWYgKGkyY193Mihnc3BjYV9kZXYsIG10OW0xMTFfaW5pdFtpXS5yZWcsCisJCQkJbXQ5bTExMV9pbml0W2ldLnZhbCkgPCAwKSB7CiAJCQllcnIoIk1UOU0xMTEgc2Vuc29yIGluaXRpYWxpemF0aW9uIGZhaWxlZCIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CisJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEVYUE9TVVJFX0lEWCkgfCAoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgR0FJTl9JRFgpOwogCXNkLT5oc3RhcnQgPSAwOwogCXNkLT52c3RhcnQgPSAyOwogCXJldHVybiAwOwpAQCAtMTM3Niw4ICsxMzkwLDggQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXQ5bTAwMV9pbml0KTsgaSsrKSB7Ci0JCWlmIChpMmNfdzIoZ3NwY2FfZGV2LCBtdDltMDAxX2luaXRbaV1bMF0sCi0JCQkJbXQ5bTAwMV9pbml0W2ldWzFdKSA8IDApIHsKKwkJaWYgKGkyY193Mihnc3BjYV9kZXYsIG10OW0wMDFfaW5pdFtpXS5yZWcsCisJCQkJbXQ5bTAwMV9pbml0W2ldLnZhbCkgPCAwKSB7CiAJCQllcnIoIk1UOU0wMDEgc2Vuc29yIGluaXRpYWxpemF0aW9uIGZhaWxlZCIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTEzOTUsOCArMTQwOSw4IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHY3MTMxcl9pbml0KTsgaSsrKSB7Ci0JCWlmIChpMmNfdzEoZ3NwY2FfZGV2LCBodjcxMzFyX2luaXRbaV1bMF0sCi0JCQkJaHY3MTMxcl9pbml0W2ldWzFdKSA8IDApIHsKKwkJaWYgKGkyY193MShnc3BjYV9kZXYsIGh2NzEzMXJfaW5pdFtpXS5yZWcsCisJCQkJaHY3MTMxcl9pbml0W2ldLnZhbCkgPCAwKSB7CiAJCQllcnIoIkhWNzEzMVIgU2Vuc29yIGluaXRpYWxpemF0aW9uIGZhaWxlZCIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTE2MjAsNyArMTYzNCw2IEBACiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfT1Y3NjYwOgogCWNhc2UgU0VOU09SX09WNzY3MDoKLQljYXNlIFNFTlNPUl9TT0k5Njg6CiAJY2FzZSBTRU5TT1JfT1Y5NjU1OgogCWNhc2UgU0VOU09SX09WOTY1MDoKIAkJZXhwWzBdIHw9ICgzIDw8IDQpOwpAQCAtMTYyOSw3ICsxNjQyLDYgQEAKIAkJZXhwWzRdID0gc2QtPmV4cG9zdXJlID4+IDg7CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX01UOU0wMDE6Ci0JY2FzZSBTRU5TT1JfTVQ5TTExMToKIAljYXNlIFNFTlNPUl9NVDlWMTEyOgogCWNhc2UgU0VOU09SX01UOVYxMTE6CiAJY2FzZSBTRU5TT1JfTVQ5VjAxMToKQEAgLTE2NDUsNiArMTY1Nyw4IEBACiAJCWV4cFs0XSA9ICgoc2QtPmV4cG9zdXJlICogMHhmZmZmZmYpIC8gMHhmZmZmKSA+PiA4OwogCQlleHBbNV0gPSAoKHNkLT5leHBvc3VyZSAqIDB4ZmZmZmZmKSAvIDB4ZmZmZikgJiAweGZmOwogCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKIAl9CiAJaTJjX3coZ3NwY2FfZGV2LCBleHApOwogCXJldHVybiAwOwpAQCAtMTY3MSw3ICsxNjg1LDYgQEAKIAkJZ2Fpbls0XSA9IG1pY3JvbjFfZ2FpbltzZC0+Z2Fpbl0gJiAweGZmOwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9NVDlWMTEyOgotCWNhc2UgU0VOU09SX01UOU0xMTE6CiAJCWdhaW5bMF0gfD0gKDMgPDwgNCk7CiAJCWdhaW5bMl0gPSAweDJmOwogCQlnYWluWzNdID0gbWljcm9uMV9nYWluW3NkLT5nYWluXSA+PiA4OwpAQCAtMTY4OCw2ICsxNzAxLDggQEAKIAkJZ2FpblsyXSA9IDB4MzA7CiAJCWdhaW5bM10gPSBodjcxMzFyX2dhaW5bc2QtPmdhaW5dOwogCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKIAl9CiAJaTJjX3coZ3NwY2FfZGV2LCBnYWluKTsKIAlyZXR1cm4gMDsKQEAgLTE5OTAsNyArMjAwNSw5IEBACiAJc2QtPmkyY19hZGRyID0gaWQtPmRyaXZlcl9pbmZvICYgMHhmZjsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX01UOU0xMTE6CiAJY2FzZSBTRU5TT1JfT1Y5NjUwOgorCWNhc2UgU0VOU09SX1NPSTk2ODoKIAkJY2FtLT5jYW1fbW9kZSA9IHN4Z2FfbW9kZTsKIAkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHN4Z2FfbW9kZSk7CiAJCWJyZWFrOwpAQCAtMjEwNiw2ICsyMTIzLDI1IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXU4IHZhbHVlOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX1NPSTk2ODoKKwkJaWYgKG1vZGUgJiBNT0RFX1NYR0EpIHsKKwkJCWkyY193MShnc3BjYV9kZXYsIDB4MTcsIDB4MWQpOworCQkJaTJjX3cxKGdzcGNhX2RldiwgMHgxOCwgMHhiZCk7CisJCQlpMmNfdzEoZ3NwY2FfZGV2LCAweDE5LCAweDAxKTsKKwkJCWkyY193MShnc3BjYV9kZXYsIDB4MWEsIDB4ODEpOworCQkJaTJjX3cxKGdzcGNhX2RldiwgMHgxMiwgMHgwMCk7CisJCQlzZC0+aHN0YXJ0ID0gMTQwOworCQkJc2QtPnZzdGFydCA9IDE5OworCQl9IGVsc2UgeworCQkJaTJjX3cxKGdzcGNhX2RldiwgMHgxNywgMHgxMyk7CisJCQlpMmNfdzEoZ3NwY2FfZGV2LCAweDE4LCAweDYzKTsKKwkJCWkyY193MShnc3BjYV9kZXYsIDB4MTksIDB4MDEpOworCQkJaTJjX3cxKGdzcGNhX2RldiwgMHgxYSwgMHg3OSk7CisJCQlpMmNfdzEoZ3NwY2FfZGV2LCAweDEyLCAweDQwKTsKKwkJCXNkLT5oc3RhcnQgPSA2MDsKKwkJCXNkLT52c3RhcnQgPSAxMTsKKwkJfQorCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjk2NTA6CiAJCWlmIChtb2RlICYgTU9ERV9TWEdBKSB7CiAJCQlpMmNfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDFiKTsKQEAgLTIxMjMsNiArMjE1OSwxNyBAQAogCQkJaTJjX3cxKGdzcGNhX2RldiwgMHgxMiwgKHZhbHVlICYgMHg3KSB8IDB4NDApOwogCQl9CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX01UOU0xMTE6CisJCWlmIChtb2RlICYgTU9ERV9TWEdBKSB7CisJCQlpMmNfdzIoZ3NwY2FfZGV2LCAweGYwLCAweDAwMDIpOworCQkJaTJjX3cyKGdzcGNhX2RldiwgMHhjOCwgMHg5NzBiKTsKKwkJCWkyY193Mihnc3BjYV9kZXYsIDB4ZjAsIDB4MDAwMCk7CisJCX0gZWxzZSB7CisJCQlpMmNfdzIoZ3NwY2FfZGV2LCAweGYwLCAweDAwMDIpOworCQkJaTJjX3cyKGdzcGNhX2RldiwgMHhjOCwgMHg4MDAwKTsKKwkJCWkyY193Mihnc3BjYV9kZXYsIDB4ZjAsIDB4MDAwMCk7CisJCX0KKwkJYnJlYWs7CiAJfQogfQogCkBAIC0yMjExLDE1ICsyMjU4LDEwIEBACiAJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKIH0KIAotc3RhdGljIHZvaWQgZG9fYXV0b2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIGRvX2F1dG9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiBhdmdfbHVtKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgYXZnX2x1bSwgbmV3X2V4cDsKLQotCWlmICghc2QtPmF1dG9fZXhwb3N1cmUpCi0JCXJldHVybjsKLQotCWF2Z19sdW0gPSBhdG9taWNfcmVhZCgmc2QtPmF2Z19sdW0pOworCXMxNiBuZXdfZXhwOwogCiAJLyoKIAkgKiBzb21lIGhhcmRjb2RlZCB2YWx1ZXMgYXJlIHByZXNlbnQKQEAgLTIyNjYsNiArMjMwOCwzOSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgZG9fYXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgYXZnX2x1bSkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoYXZnX2x1bSA8IE1JTl9BVkdfTFVNKSB7CisJCWlmIChzZC0+Z2FpbiArIDEgPD0gMjgpIHsKKwkJCXNkLT5nYWluKys7CisJCQlzZXRfZ2Fpbihnc3BjYV9kZXYpOworCQl9CisJfQorCWlmIChhdmdfbHVtID4gTUFYX0FWR19MVU0pIHsKKwkJaWYgKHNkLT5nYWluIC0gMSA+PSAwKSB7CisJCQlzZC0+Z2Fpbi0tOworCQkJc2V0X2dhaW4oZ3NwY2FfZGV2KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc2RfZHFjYWxsYmFjayhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBhdmdfbHVtOworCisJaWYgKCFzZC0+YXV0b19leHBvc3VyZSkKKwkJcmV0dXJuOworCisJYXZnX2x1bSA9IGF0b21pY19yZWFkKCZzZC0+YXZnX2x1bSk7CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1NPSTk2OCkKKwkJZG9fYXV0b2dhaW4oZ3NwY2FfZGV2LCBhdmdfbHVtKTsKKwllbHNlCisJCWRvX2F1dG9leHBvc3VyZShnc3BjYV9kZXYsIGF2Z19sdW0pOworfQorCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KIAkJCXU4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCkBAIC0yMzMzLDcgKzI0MDgsNyBAQAogCS5zdG9wTiA9IHNkX3N0b3BOLAogCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAotCS5kcV9jYWxsYmFjayA9IGRvX2F1dG9leHBvc3VyZSwKKwkuZHFfY2FsbGJhY2sgPSBzZF9kcWNhbGxiYWNrLAogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIAkuc2V0X3JlZ2lzdGVyID0gc2RfZGJnX3NfcmVnaXN0ZXIsCiAJLmdldF9yZWdpc3RlciA9IHNkX2RiZ19nX3JlZ2lzdGVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKaW5kZXggZDYzMzJhYi4uMzNmNGQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCkBAIC03MjcsNyArNzI3LDcgQEAKIAl7MHhhMSwgMHgyMSwgMHgxMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJCQkJCQkvKiBPdXRmb3JtYXQgPSByYXdSR0IgKi8KIAl7MHhhMSwgMHgyMSwgMHgxMywgMHhiOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGluaXQgQ09NOCAqLwotCXsweGQxLCAweDIxLCAweDAwLCAweDAxLCAweDc0LCAweDc0LCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHgyMSwgMHgwMCwgMHgwMSwgMHg3NCwgMHg5MiwgMHgwMCwgMHgxMH0sCiAJCQkJCQkvKiBHQUlOIEJMVUUgUkVEIFZSRUYgKi8KIAl7MHhkMSwgMHgyMSwgMHgwNCwgMHgwMCwgMHg3ZCwgMHg2MiwgMHgwMCwgMHgxMH0sCiAJCQkJCQkvKiBDT00gMSBCQVZFIEdFQVZFIEFFQ0hIICovCkBAIC03ODMsNyArNzgzLDcgQEAKIAl7MHhjMSwgMHgyMSwgMHg4OCwgMHhhZiwgMHhjNywgMHhkZiwgMHgwMCwgMHgxMH0sIC8qIGdhbW1hIGN1cnZlICovCiAJezB4YzEsIDB4MjEsIDB4OGIsIDB4OTksIDB4OTksIDB4Y2YsIDB4MDAsIDB4MTB9LCAvKiByZXNlcnZlZCAqLwogCXsweGIxLCAweDIxLCAweDkyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogRE1fTE5ML0ggKi8KLQl7MHhiMSwgMHgyMSwgMHhhMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MjEsIDB4YTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogLyoqKioqKiAoc29tZSBleGNoYW5nZXMgaW4gdGhlIHdpbiB0cmFjZSkgKioqKioqLwogCXsweGExLCAweDIxLCAweDFlLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogTVZGUCAqLwogCQkJCQkJLyogYml0c1szLi4wXXJlc2VydmVkICovCkBAIC0xMTQ1LDE3ICsxMTQ1LDEyIEBACiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDIpOwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NjA6Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjEpOwotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDIwKTsKLQkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg2MCk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDApOwotCQlicmVhazsKIAljYXNlIFNFTlNPUl9TUDgwNzA4OgogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDYzKTsKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgMHgyMCk7CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjIpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQyKTsKLQkJbWRlbGF5KDEwMCk7CisJCW1zbGVlcCgxMDApOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAyLCAweDYyKTsKIAkJYnJlYWs7CiAvKgljYXNlIFNFTlNPUl9IVjcxMzFSOiAqLwpAQCAtMTYyNCw2ICsxNjE5LDggQEAKIAogc3RhdGljIHZvaWQgc2V0aW5mcmFyZWQoc3RydWN0IHNkICpzZCkKIHsKKwlpZiAoc2QtPmdzcGNhX2Rldi5jdHJsX2RpcyAmICgxIDw8IElORlJBUkVEX0lEWCkpCisJCXJldHVybjsKIC8qZml4bWU6IGRpZmZlcmVudCBzZXF1ZW5jZSBmb3IgU3RhckNhbSBDbGlwIGFuZCBTdGFyQ2FtIDM3MGkgKi8KIC8qIENsaXAgKi8KIAlpMmNfdzEoJnNkLT5nc3BjYV9kZXYsIDB4MDIsCQkJLyogZ3BpbyAqLwpAQCAtMTYzNywxNiArMTYzNCwxOSBAQAogCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgRlJFUV9JRFgpKQogCQlyZXR1cm47CiAJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzY2MCkgeworCQl1OCBjb204OworCisJCWNvbTggPSAweGRmOwkJLyogYXV0byBnYWluL3diL2V4cG8gKi8KIAkJc3dpdGNoIChzZC0+ZnJlcSkgewogCQljYXNlIDA6IC8qIEJhbmRpbmcgZmlsdGVyIGRpc2FibGVkICovCi0JCQlpMmNfdzEoZ3NwY2FfZGV2LCAweDEzLCAweGRmKTsKKwkJCWkyY193MShnc3BjYV9kZXYsIDB4MTMsIGNvbTggfCAweDIwKTsKIAkJCWJyZWFrOwogCQljYXNlIDE6IC8qIDUwIGh6ICovCi0JCQlpMmNfdzEoZ3NwY2FfZGV2LCAweDEzLCAweGZmKTsKKwkJCWkyY193MShnc3BjYV9kZXYsIDB4MTMsIGNvbTgpOwogCQkJaTJjX3cxKGdzcGNhX2RldiwgMHgzYiwgMHgwYSk7CiAJCQlicmVhazsKIAkJY2FzZSAyOiAvKiA2MCBoeiAqLwotCQkJaTJjX3cxKGdzcGNhX2RldiwgMHgxMywgMHhmZik7CisJCQlpMmNfdzEoZ3NwY2FfZGV2LCAweDEzLCBjb204KTsKIAkJCWkyY193MShnc3BjYV9kZXYsIDB4M2IsIDB4MDIpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE3OTYsMTIgKzE3OTYsNiBAQAogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDYwKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjYwOgotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDA1KTsKLQkJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMDUpCi0JCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweGZmKTsKLQkJZWxzZQotCQkJcmVnX3cxKGdzcGNhX2RldiwgMHg5OSwgMHg1Yik7Ci0JCWJyZWFrOwogCWNhc2UgU0VOU09SX1NQODA3MDg6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MDUpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDU5KTsKQEAgLTIzMjUsMTggKzIzMTksMTkgQEAKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjA3YyksIEJTSShTTjlDMTAyUCwgSFY3MTMxUiwgMHgxMSl9LAogLyoJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwN2UpLCBCU0koU045QzEwMlAsIE9WNzYzMCwgMHg/Pyl9LCAqLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGMwKSwgQlNJKFNOOUMxMDUsIE1JMDM2MCwgMHg1ZCl9LAotLyoJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYzgpLCBCU0koU045QzEwNSwgT002ODAxLCAweD8/KX0sICovCisvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBjOCksIEJTSShTTjlDMTA1LCBPTTY4MDIsIDB4Pz8pfSwgKi8KIC8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGNjKSwgQlNJKFNOOUMxMDUsIEhWNzEzMUdQLCAweD8/KX0sICovCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwZWMpLCBCU0koU045QzEwNSwgTU80MDAwLCAweDIxKX0sCiAvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBlZiksIEJTSShTTjlDMTA1LCBJQ00xMDVDLCAweD8/KX0sICovCiAvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBmYSksIEJTSShTTjlDMTA1LCBPVjc2NDgsIDB4Pz8pfSwgKi8KIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBmYiksIEJTSShTTjlDMTA1LCBPVjc2NjAsIDB4MjEpfSwKLQl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBmYyksIEJTSShTTjlDMTA1LCBIVjcxMzFSLCAweDExKX0sCiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBmYyksIEJTSShTTjlDMTA1LCBIVjcxMzFSLCAweDExKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwZmUpLCBCU0koU045QzEwNSwgT1Y3NjMwLCAweDIxKX0sCiAjZW5kaWYKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEwMCksIEJTSShTTjlDMTIwLCBNSTAzNjAsIDB4NWQpfSwgLypzbjljMTI4Ki8KLS8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTA4KSwgQlNJKFNOOUMxMjAsIE9NNjgwMSwgMHg/Pyl9LCAqLworLyoJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMDIpLCBCU0koU045QzEyMCwgUE8yMDMwTiwgPz8pfSwgKi8KKy8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTA4KSwgQlNJKFNOOUMxMjAsIE9NNjgwMiwgMHgyMSl9LCAqLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTBhKSwgQlNJKFNOOUMxMjAsIE9WNzY0OCwgMHgyMSl9LCAvKnNuOWMxMjgqLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTBiKSwgQlNJKFNOOUMxMjAsIE9WNzY2MCwgMHgyMSl9LCAvKnNuOWMxMjgqLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTBjKSwgQlNJKFNOOUMxMjAsIEhWNzEzMVIsIDB4MTEpfSwgLypzbjljMTI4Ki8KQEAgLTIzNTIsNiArMjM0Nyw3IEBACiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzMCksIEJTSShTTjlDMTIwLCBNSTAzNjAsIDB4NWQpfSwKICNlbmRpZgorLyoJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMzIpLCBCU0koU045QzEyMCwgT1Y3NjcwLCAweDIxKX0sICovCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMzgpLCBCU0koU045QzEyMCwgTU80MDAwLCAweDIxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2EpLCBCU0koU045QzEyMCwgT1Y3NjQ4LCAweDIxKX0sCiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKQEAgLTIzNTksNyArMjM1NSw5IEBACiAjZW5kaWYKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYyksIEJTSShTTjlDMTIwLCBIVjcxMzFSLCAweDExKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2UpLCBCU0koU045QzEyMCwgT1Y3NjMwLCAweDIxKX0sCi0Je1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDMpLCBCU0koU045QzEyMCwgU1A4MDcwOCwgMHgxOCl9LAorLyoJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDIpLCBCU0koU045QzEyMCwgUE8yMDMwTiwgPz8pfSwgKnNuOWMxMjBiKi8KKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjE0MyksIEJTSShTTjlDMTIwLCBTUDgwNzA4LCAweDE4KX0sIC8qc245YzEyMGIqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTQ4KSwgQlNJKFNOOUMxMjAsIE9NNjgwMiwgMHgyMSl9LCAvKnNuOWMxMjBiKi8KIAl7fQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYwppbmRleCBkNDhiMjdjLi5iNzRhMzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYwpAQCAtMTkyMyw3ICsxOTIzLDcgQEAKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIAljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7Ci0JY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF07CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKIAlzZC0+c3VidHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKIAlzZC0+YnJpZ2h0bmVzcyA9IHNkX2N0cmxzW01ZX0JSSUdIVE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmNvbnRyYXN0ID0gc2RfY3RybHNbTVlfQ09OVFJBU1RdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCmluZGV4IDNhMGM4OTMuLmExOTkyOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCkBAIC0yODYsNyArMjg2LDcgQEAKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIAljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7Ci0JY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF07CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKIAlzZC0+YnJpZ2h0bmVzcyA9IHNkX2N0cmxzW1NEX0JSSUdIVE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmNvbnRyYXN0ID0gc2RfY3RybHNbU0RfQ09OVFJBU1RdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmNvbG9ycyA9IHNkX2N0cmxzW1NEX0NPTE9SXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYwppbmRleCAyZWQyNjY5Li45Njk2YzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYwpAQCAtMTMwNCwxOSArMTMwNCw3MCBAQAogCXJldHVybiBnc3BjYV9kZXYtPnVzYl9idWZbMF07CiB9CiAKKy8qIHNlbmQgMSBvciAyIGJ5dGVzIHRvIHRoZSBzZW5zb3IgdmlhIHRoZSBTeW5jaHJvbm91cyBTZXJpYWwgSW50ZXJmYWNlICovCitzdGF0aWMgaW50IHNzaV93KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJdTE2IHJlZywgdTE2IHZhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IHJldCwgcmV0cnk7CisKKwlyZXQgPSByZWdfd3JpdGUoZGV2LCAweDg4MDIsIHJlZyA+PiA4KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJcmV0ID0gcmVnX3dyaXRlKGRldiwgMHg4ODAxLCByZWcgJiAweDAwZmYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwlpZiAoKHJlZyAmIDB4ZmYwMCkgPT0gMHgxMDAwKSB7CQkvKiBpZiAyIGJ5dGVzICovCisJCXJldCA9IHJlZ193cml0ZShkZXYsIDB4ODgwNSwgdmFsICYgMHgwMGZmKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwkJdmFsID4+PSA4OworCX0KKwlyZXQgPSByZWdfd3JpdGUoZGV2LCAweDg4MDAsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogcG9sbCB1bnRpbCBub3QgYnVzeSAqLworCXJldHJ5ID0gMTA7CisJZm9yICg7OykgeworCQlyZXQgPSByZWdfcmVhZChnc3BjYV9kZXYsIDB4ODgwMyk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoLS1yZXRyeSA8PSAwKSB7CisJCQlQREVCVUcoRF9FUlIsICJzc2lfdyBidXN5ICUwMngiLAorCQkJCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0pOworCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCQltc2xlZXAoOCk7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCB3cml0ZV92ZWN0b3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3QgdTE2ICgqZGF0YSlbMl0pCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAl3aGlsZSAoKCpkYXRhKVsxXSAhPSAwKSB7Ci0JCXJldCA9IHJlZ193cml0ZShkZXYsICgqZGF0YSlbMV0sICgqZGF0YSlbMF0pOworCQlpZiAoKCpkYXRhKVsxXSAmIDB4ODAwMCkgeworCQkJaWYgKCgqZGF0YSlbMV0gPT0gMHhkZDAwKQkvKiBkZWxheSAqLworCQkJCW1zbGVlcCgoKmRhdGEpWzBdKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSByZWdfd3JpdGUoZGV2LCAoKmRhdGEpWzFdLCAoKmRhdGEpWzBdKTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHNzaV93KGdzcGNhX2RldiwgKCpkYXRhKVsxXSwgKCpkYXRhKVswXSk7CisJCX0KIAkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCQkJYnJlYWs7CiAJCWRhdGErKzsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKaW5kZXggMGRhOGUwZC4uN2FmNTExYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCkBAIC0xMzAsOCArMTMwLDggQEAKIAkJCQkgICAgICBTVFYwNlhYX1VSQl9NU0dfVElNRU9VVCk7CiAJCQkJICAgICAgaWYgKGVyciA8IDApCiAJCQkJCXJldHVybiBlcnI7Ci0gICAgICAgfQotICAgICAgIHJldHVybiBzdHYwNnh4X3dyaXRlX3NlbnNvcl9maW5pc2goc2QpOworCX0KKwlyZXR1cm4gc3R2MDZ4eF93cml0ZV9zZW5zb3JfZmluaXNoKHNkKTsKIH0KIAogaW50IHN0djA2eHhfd3JpdGVfc2Vuc29yX3dvcmRzKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHUxNiAqZGF0YSwgdTggbGVuKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwppbmRleCA1MTI3YmJmLi5hYThmOTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwpAQCAtMzIsMjYgKzMyLDI3IEBACiBzdHJ1Y3Qgc2QgewogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKLQl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7Ci0JdW5zaWduZWQgY2hhciBjb250cmFzdDsKLQl1bnNpZ25lZCBjaGFyIGNvbG9yczsKLQl1bnNpZ25lZCBjaGFyIGF1dG9nYWluOworCXM4IGJyaWdodG5lc3M7CisJdTggY29udHJhc3Q7CisJdTggY29sb3JzOworCXU4IGF1dG9nYWluOwogCXU4IHF1YWxpdHk7CiAjZGVmaW5lIFFVQUxJVFlfTUlOIDcwCiAjZGVmaW5lIFFVQUxJVFlfTUFYIDk1CiAjZGVmaW5lIFFVQUxJVFlfREVGIDg1CiAKLQljaGFyIGJyaWRnZTsKKwl1OCBicmlkZ2U7CiAjZGVmaW5lIEJSSURHRV9TUENBNTA0IDAKICNkZWZpbmUgQlJJREdFX1NQQ0E1MDRCIDEKICNkZWZpbmUgQlJJREdFX1NQQ0E1MDRDIDIKICNkZWZpbmUgQlJJREdFX1NQQ0E1MzMgMwogI2RlZmluZSBCUklER0VfU1BDQTUzNiA0Ci0JY2hhciBzdWJ0eXBlOworCXU4IHN1YnR5cGU7CiAjZGVmaW5lIEFpcHRla01pbmlQZW5DYW0xMyAxCiAjZGVmaW5lIExvZ2l0ZWNoQ2xpY2tTbWFydDQyMCAyCiAjZGVmaW5lIExvZ2l0ZWNoQ2xpY2tTbWFydDgyMCAzCiAjZGVmaW5lIE1lZ2FwaXhWNCA0CisjZGVmaW5lIE1lZ2FJbWFnZVZJIDUKIAogCXU4ICpqcGVnX2hkcjsKIH07CkBAIC02NywyMSArNjgsMjAgQEAKIHN0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAogc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7Ci0jZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCiAJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCi0JCS5taW5pbXVtID0gMCwKLQkJLm1heGltdW0gPSAweGZmLAorCQkubWluaW11bSA9IC0xMjgsCisJCS5tYXhpbXVtID0gMTI3LAogCQkuc3RlcCAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMCwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMAorCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCiAJfSwKLSNkZWZpbmUgU0RfQ09OVFJBU1QgMQogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULApAQCAtOTAsMTIgKzkwLDEyIEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAweGZmLAogCQkuc3RlcCAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMHgyMCwKKyNkZWZpbmUgQ09OVFJBU1RfREVGIDB4MjAKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF9ERUYsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAogCX0sCi0jZGVmaW5lIFNEX0NPTE9SIDIKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLApAQCAtMTA0LDEyICsxMDQsMTIgQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDB4ZmYsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweDFhLAorI2RlZmluZSBDT0xPUl9ERUYgMHgxYQorCQkuZGVmYXVsdF92YWx1ZSA9IENPTE9SX0RFRiwKIAkgICAgfSwKIAkgICAgLnNldCA9IHNkX3NldGNvbG9ycywKIAkgICAgLmdldCA9IHNkX2dldGNvbG9ycywKIAl9LAotI2RlZmluZSBTRF9BVVRPR0FJTiAzCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQVVUT0dBSU4sCkBAIC0xMTgsNyArMTE4LDggQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDEsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAorI2RlZmluZSBBVVRPR0FJTl9ERUYgMQorCQkuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKIAkgICAgfSwKIAkgICAgLnNldCA9IHNkX3NldGF1dG9nYWluLAogCSAgICAuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCkBAIC0xODAsMTQgKzE4MSwyMCBAQAogI2RlZmluZSBTUENBNTA0X1BDQ0FNNjAwX09GRlNFVF9NT0RFCSA1CiAjZGVmaW5lIFNQQ0E1MDRfUENDQU02MDBfT0ZGU0VUX0RBVEEJIDE0CiAgLyogRnJhbWUgcGFja2V0IGhlYWRlciBvZmZzZXRzIGZvciB0aGUgc3BjYTUzMyAqLwotI2RlZmluZSBTUENBNTMzX09GRlNFVF9EQVRBICAgICAgMTYKKyNkZWZpbmUgU1BDQTUzM19PRkZTRVRfREFUQQkxNgogI2RlZmluZSBTUENBNTMzX09GRlNFVF9GUkFNU0VRCTE1CiAvKiBGcmFtZSBwYWNrZXQgaGVhZGVyIG9mZnNldHMgZm9yIHRoZSBzcGNhNTM2ICovCi0jZGVmaW5lIFNQQ0E1MzZfT0ZGU0VUX0RBVEEgICAgICA0Ci0jZGVmaW5lIFNQQ0E1MzZfT0ZGU0VUX0ZSQU1TRVEJIDEKKyNkZWZpbmUgU1BDQTUzNl9PRkZTRVRfREFUQQk0CisjZGVmaW5lIFNQQ0E1MzZfT0ZGU0VUX0ZSQU1TRVEJMQorCitzdHJ1Y3QgY21kIHsKKwl1OCByZXE7CisJdTE2IHZhbDsKKwl1MTYgaWR4OworfTsKIAogLyogSW5pdGlhbGlzYXRpb24gZGF0YSBmb3IgdGhlIENyZWF0aXZlIFBDLUNBTSA2MDAgKi8KLXN0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA0X3BjY2FtNjAwX2luaXRfZGF0YVtdWzNdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjbWQgc3BjYTUwNF9wY2NhbTYwMF9pbml0X2RhdGFbXSA9IHsKIC8qCXsweGEwLCAweDAwMDAsIDB4MDUwM30sICAqIGNhcHR1cmUgbW9kZSAqLwogCXsweDAwLCAweDAwMDAsIDB4MjAwMH0sCiAJezB4MDAsIDB4MDAxMywgMHgyMzAxfSwKQEAgLTIxMSwyMiArMjE4LDIwIEBACiAJezB4MDAsIDB4MDAwMywgMHgyMDAwfSwKIAl7MHgwMCwgMHgwMDEzLCAweDIzMDF9LAogCXsweDAwLCAweDAwMDMsIDB4MjAwMH0sCi0Je30KIH07CiAKIC8qIENyZWF0aXZlIFBDLUNBTSA2MDAgc3BlY2lmaWMgb3BlbiBkYXRhLCBzZW50IGJlZm9yZSB1c2luZyB0aGUKICAqIGdlbmVyaWMgaW5pdGlhbGlzYXRpb24gZGF0YSBmcm9tIHNwY2E1MDRfb3Blbl9kYXRhLgogICovCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwNF9wY2NhbTYwMF9vcGVuX2RhdGFbXVszXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY21kIHNwY2E1MDRfcGNjYW02MDBfb3Blbl9kYXRhW10gPSB7CiAJezB4MDAsIDB4MDAwMSwgMHgyNTAxfSwKIAl7MHgyMCwgMHgwNTAwLCAweDAwMDF9LAkvKiBzbmFwc2hvdCBtb2RlICovCiAJezB4MDAsIDB4MDAwMywgMHgyODgwfSwKIAl7MHgwMCwgMHgwMDAxLCAweDI4ODF9LAotCXt9CiB9OwogCiAvKiBJbml0aWFsaXNhdGlvbiBkYXRhIGZvciB0aGUgbG9naXRlY2ggY2xpY2tzbWFydCA0MjAgKi8KLXN0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA0QV9jbGlja3NtYXJ0NDIwX2luaXRfZGF0YVtdWzNdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjbWQgc3BjYTUwNEFfY2xpY2tzbWFydDQyMF9pbml0X2RhdGFbXSA9IHsKIC8qCXsweGEwLCAweDAwMDAsIDB4MDUwM30sICAqIGNhcHR1cmUgbW9kZSAqLwogCXsweDAwLCAweDAwMDAsIDB4MjAwMH0sCiAJezB4MDAsIDB4MDAxMywgMHgyMzAxfSwKQEAgLTI0Myw3ICsyNDgsNyBAQAogCXsweGIwLCAweDAwMDEsIDB4MDAwMH0sCiAKIAotCXsweDBhMSwgMHgwMDgwLCAweDAwMDF9LAorCXsweGExLCAweDAwODAsIDB4MDAwMX0sCiAJezB4MzAsIDB4MDA0OSwgMHgwMDAwfSwKIAl7MHgzMCwgMHgwMDYwLCAweDAwMDV9LAogCXsweDBjLCAweDAwMDQsIDB4MDAwMH0sCkBAIC0yNTMsMTEgKzI1OCwxMCBAQAogCXsweDAwLCAweDAwMDMsIDB4MjAwMH0sCiAJezB4MDAsIDB4MDAwMCwgMHgyMDAwfSwKIAotCXt9CiB9OwogCiAvKiBjbGlja3NtYXJ0IDQyMCBvcGVuIGRhdGEgPyAqLwotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDRBX2NsaWNrc21hcnQ0MjBfb3Blbl9kYXRhW11bM10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNtZCBzcGNhNTA0QV9jbGlja3NtYXJ0NDIwX29wZW5fZGF0YVtdID0gewogCXsweDAwLCAweDAwMDEsIDB4MjUwMX0sCiAJezB4MjAsIDB4MDUwMiwgMHgwMDAwfSwKIAl7MHgwNiwgMHgwMDAwLCAweDAwMDB9LApAQCAtNDAxLDEwICs0MDUsOSBAQAogCXsweDAwLCAweDAwMjgsIDB4Mjg3Zn0sCiAKIAl7MHhhMCwgMHgwMDAwLCAweDA1MDN9LAotCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBxdGFibGVfY3JlYXRpdmVfcGNjYW1bMl1bNjRdID0geworc3RhdGljIGNvbnN0IHU4IHF0YWJsZV9jcmVhdGl2ZV9wY2NhbVsyXVs2NF0gPSB7CiAJewkJCQkvKiBRLXRhYmxlIFktY29tcG9uZW50cyAqLwogCSAweDA1LCAweDAzLCAweDAzLCAweDA1LCAweDA3LCAweDBjLCAweDBmLCAweDEyLAogCSAweDA0LCAweDA0LCAweDA0LCAweDA2LCAweDA4LCAweDExLCAweDEyLCAweDExLApAQCAtNDI5LDcgKzQzMiw3IEBACiAgKgkJZXhjZXB0IGZvciBvbmUgYnl0ZS4gUG9zc2libHkgYSB0eXBvPwogICoJCU5XRzogMTgvMDUvMjAwMy4KICAqLwotc3RhdGljIGNvbnN0IF9fdTggcXRhYmxlX3NwY2E1MDRfZGVmYXVsdFsyXVs2NF0gPSB7CitzdGF0aWMgY29uc3QgdTggcXRhYmxlX3NwY2E1MDRfZGVmYXVsdFsyXVs2NF0gPSB7CiAJewkJCQkvKiBRLXRhYmxlIFktY29tcG9uZW50cyAqLwogCSAweDA1LCAweDAzLCAweDAzLCAweDA1LCAweDA3LCAweDBjLCAweDBmLCAweDEyLAogCSAweDA0LCAweDA0LCAweDA0LCAweDA2LCAweDA4LCAweDExLCAweDEyLCAweDExLApAQCAtNDUzLDkgKzQ1Niw5IEBACiAKIC8qIHJlYWQgPGxlbj4gYnl0ZXMgdG8gZ3NwY2FfZGV2LT51c2JfYnVmICovCiBzdGF0aWMgdm9pZCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCSAgX191MTYgcmVxLAotCQkgIF9fdTE2IGluZGV4LAotCQkgIF9fdTE2IGxlbikKKwkJICB1OCByZXEsCisJCSAgdTE2IGluZGV4LAorCQkgIHUxNiBsZW4pCiB7CiAjaWZkZWYgR1NQQ0FfREVCVUcKIAlpZiAobGVuID4gVVNCX0JVRl9TWikgewpAQCAtNDczLDMxICs0NzYsMjYgQEAKIAkJCTUwMCk7CiB9CiAKLS8qIHdyaXRlIDxsZW4+IGJ5dGVzIGZyb20gZ3NwY2FfZGV2LT51c2JfYnVmICovCi1zdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCSAgIF9fdTE2IHJlcSwKLQkJICAgX191MTYgdmFsdWUsCi0JCSAgIF9fdTE2IGluZGV4LAotCQkgICBfX3UxNiBsZW4pCisvKiB3cml0ZSBvbmUgYnl0ZSAqLworc3RhdGljIHZvaWQgcmVnX3dfMShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgIHU4IHJlcSwKKwkJICAgdTE2IHZhbHVlLAorCQkgICB1MTYgaW5kZXgsCisJCSAgIHUxNiBieXRlKQogewotI2lmZGVmIEdTUENBX0RFQlVHCi0JaWYgKGxlbiA+IFVTQl9CVUZfU1opIHsKLQkJZXJyKCJyZWdfdzogYnVmZmVyIG92ZXJmbG93Iik7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSBieXRlOwogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCiAJCQlyZXEsCiAJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQl2YWx1ZSwgaW5kZXgsCi0JCQlsZW4gPyBnc3BjYV9kZXYtPnVzYl9idWYgOiBOVUxMLCBsZW4sCisJCQlnc3BjYV9kZXYtPnVzYl9idWYsIDEsCiAJCQk1MDApOwogfQogCiAvKiB3cml0ZSByZXEgLyBpbmRleCAvIHZhbHVlICovCiBzdGF0aWMgaW50IHJlZ193X3JpdihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAotCQkgICAgIF9fdTE2IHJlcSwgX191MTYgaW5kZXgsIF9fdTE2IHZhbHVlKQorCQkgICAgIHU4IHJlcSwgdTE2IGluZGV4LCB1MTYgdmFsdWUpCiB7CiAJaW50IHJldDsKIApAQCAtNTE1LDcgKzUxMyw3IEBACiAKIC8qIHJlYWQgMSBieXRlICovCiBzdGF0aWMgaW50IHJlZ19yXzEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJX191MTYgdmFsdWUpCS8qIHdWYWx1ZSAqLworCQkJdTE2IHZhbHVlKQkvKiB3VmFsdWUgKi8KIHsKIAlpbnQgcmV0OwogCkBAIC01MzYsOSArNTM0LDkgQEAKIAogLyogcmVhZCAxIG9yIDIgYnl0ZXMgLSByZXR1cm5zIDwgMCBpZiBlcnJvciAqLwogc3RhdGljIGludCByZWdfcl8xMihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQlfX3UxNiByZXEsCS8qIGJSZXF1ZXN0ICovCi0JCQlfX3UxNiBpbmRleCwJLyogd0luZGV4ICovCi0JCQlfX3UxNiBsZW5ndGgpCS8qIHdMZW5ndGggKDEgb3IgMiBvbmx5KSAqLworCQkJdTggcmVxLAkJLyogYlJlcXVlc3QgKi8KKwkJCXUxNiBpbmRleCwJLyogd0luZGV4ICovCisJCQl1MTYgbGVuZ3RoKQkvKiB3TGVuZ3RoICgxIG9yIDIgb25seSkgKi8KIHsKIAlpbnQgcmV0OwogCkBAIC01NTksNDMgKzU1Nyw0MCBAQAogfQogCiBzdGF0aWMgaW50IHdyaXRlX3ZlY3RvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQljb25zdCBfX3UxNiBkYXRhW11bM10pCisJCQljb25zdCBzdHJ1Y3QgY21kICpkYXRhLCBpbnQgbmNtZHMpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWludCByZXQsIGkgPSAwOworCWludCByZXQ7CiAKLQl3aGlsZSAoZGF0YVtpXVswXSAhPSAwIHx8IGRhdGFbaV1bMV0gIT0gMCB8fCBkYXRhW2ldWzJdICE9IDApIHsKLQkJcmV0ID0gcmVnX3dfcml2KGRldiwgZGF0YVtpXVswXSwgZGF0YVtpXVsyXSwgZGF0YVtpXVsxXSk7CisJd2hpbGUgKC0tbmNtZHMgPj0gMCkgeworCQlyZXQgPSByZWdfd19yaXYoZGV2LCBkYXRhLT5yZXEsIGRhdGEtPmlkeCwgZGF0YS0+dmFsKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCVBERUJVRyhEX0VSUiwKLQkJCQkiUmVnaXN0ZXIgd3JpdGUgZmFpbGVkIGZvciAweCV4LDB4JXgsMHgleCIsCi0JCQkJZGF0YVtpXVswXSwgZGF0YVtpXVsxXSwgZGF0YVtpXVsyXSk7CisJCQkgICAiUmVnaXN0ZXIgd3JpdGUgZmFpbGVkIGZvciAweCUwMngsIDB4JTA0eCwgMHglMDR4IiwKKwkJCQlkYXRhLT5yZXEsIGRhdGEtPnZhbCwgZGF0YS0+aWR4KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KLQkJaSsrOworCQlkYXRhKys7CiAJfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNwY2E1MHhfc2V0dXBfcXRhYmxlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCQl1bnNpZ25lZCBpbnQgcmVxdWVzdCwKLQkJCQl1bnNpZ25lZCBpbnQgeWJhc2UsCi0JCQkJdW5zaWduZWQgaW50IGNiYXNlLAotCQkJCWNvbnN0IF9fdTggcXRhYmxlWzJdWzY0XSkKKwkJCQljb25zdCB1OCBxdGFibGVbMl1bNjRdKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgaSwgZXJyOwogCiAJLyogbG9vcCBvdmVyIHkgY29tcG9uZW50cyAqLwogCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWVyciA9IHJlZ193X3JpdihkZXYsIHJlcXVlc3QsIHliYXNlICsgaSwgcXRhYmxlWzBdW2ldKTsKKwkJZXJyID0gcmVnX3dfcml2KGRldiwgMHgwMCwgMHgyODAwICsgaSwgcXRhYmxlWzBdW2ldKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KIAogCS8qIGxvb3Agb3ZlciBjIGNvbXBvbmVudHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQllcnIgPSByZWdfd19yaXYoZGV2LCByZXF1ZXN0LCBjYmFzZSArIGksIHF0YWJsZVsxXVtpXSk7CisJCWVyciA9IHJlZ193X3JpdihkZXYsIDB4MDAsIDB4Mjg0MCArIGksIHF0YWJsZVsxXVtpXSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC02MDMsMzQgKzU5OCwzNCBAQAogfQogCiBzdGF0aWMgdm9pZCBzcGNhNTA0X2Fja25vd2xlZGdlZF9jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCSAgICAgX191MTYgcmVxLCBfX3UxNiBpZHgsIF9fdTE2IHZhbCkKKwkJCSAgICAgdTggcmVxLCB1MTYgaWR4LCB1MTYgdmFsKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlfX3U4IG5vdGRvbmU7CisJaW50IG5vdGRvbmU7CiAKIAlyZWdfd19yaXYoZGV2LCByZXEsIGlkeCwgdmFsKTsKIAlub3Rkb25lID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAxLCAweDAwMDEsIDEpOwogCXJlZ193X3JpdihkZXYsIHJlcSwgaWR4LCB2YWwpOwogCi0JUERFQlVHKERfRlJBTSwgImJlZm9yZSB3YWl0IDB4JXgiLCBub3Rkb25lKTsKKwlQREVCVUcoRF9GUkFNLCAiYmVmb3JlIHdhaXQgMHglMDR4Iiwgbm90ZG9uZSk7CiAKIAltc2xlZXAoMjAwKTsKIAlub3Rkb25lID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAxLCAweDAwMDEsIDEpOwotCVBERUJVRyhEX0ZSQU0sICJhZnRlciB3YWl0IDB4JXgiLCBub3Rkb25lKTsKKwlQREVCVUcoRF9GUkFNLCAiYWZ0ZXIgd2FpdCAweCUwNHgiLCBub3Rkb25lKTsKIH0KIAogc3RhdGljIHZvaWQgc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJX191MTYgcmVxLAotCQkJX191MTYgaWR4LCBfX3UxNiB2YWwsIF9fdTggc3RhdCwgX191OCBjb3VudCkKKwkJCXU4IHJlcSwKKwkJCXUxNiBpZHgsIHUxNiB2YWwsIHU4IHN0YXQsIHU4IGNvdW50KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlfX3U4IHN0YXR1czsKLQlfX3U4IGVuZGNvZGU7CisJaW50IHN0YXR1czsKKwl1OCBlbmRjb2RlOwogCiAJcmVnX3dfcml2KGRldiwgcmVxLCBpZHgsIHZhbCk7CiAJc3RhdHVzID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAxLCAweDAwMDEsIDEpOwogCWVuZGNvZGUgPSBzdGF0OwotCVBERUJVRyhEX0ZSQU0sICJTdGF0dXMgMHgleCBOZWVkIDB4JXgiLCBzdGF0dXMsIHN0YXQpOworCVBERUJVRyhEX0ZSQU0sICJTdGF0dXMgMHgleCBOZWVkIDB4JTA0eCIsIHN0YXR1cywgc3RhdCk7CiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuOwogCWNvdW50ID0gMjAwOwpAQCAtNjQwLDcgKzYzNSw3IEBACiAvKgkJcmVnX3dfcml2KGRldiwgcmVxLCBpZHgsIHZhbCk7ICovCiAJCXN0YXR1cyA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMSwgMHgwMDAxLCAxKTsKIAkJaWYgKHN0YXR1cyA9PSBlbmRjb2RlKSB7Ci0JCQlQREVCVUcoRF9GUkFNLCAic3RhdHVzIDB4JXggYWZ0ZXIgd2FpdCAweCV4IiwKKwkJCVBERUJVRyhEX0ZSQU0sICJzdGF0dXMgMHglMDR4IGFmdGVyIHdhaXQgJWQiLAogCQkJCXN0YXR1cywgMjAwIC0gY291bnQpOwogCQkJCWJyZWFrOwogCQl9CkBAIC02NjcsOCArNjYyLDcgQEAKIAl3aGlsZSAoLS1jb3VudCA+IDApIHsKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDIxLCAxLCAxKTsKIAkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAhPSAwKSB7Ci0JCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAwOwotCQkJcmVnX3coZ3NwY2FfZGV2LCAweDIxLCAwLCAxLCAxKTsKKwkJCXJlZ193XzEoZ3NwY2FfZGV2LCAweDIxLCAwLCAxLCAwKTsKIAkJCXJlZ19yKGdzcGNhX2RldiwgMHgyMSwgMSwgMSk7CiAJCQlzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CiAJCQlicmVhazsKQEAgLTY3OSw3ICs2NzMsNyBAQAogCiBzdGF0aWMgdm9pZCBzcGNhNTB4X0dldEZpcm13YXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlfX3U4ICpkYXRhOworCXU4ICpkYXRhOwogCiAJZGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZjsKIAlyZWdfcihnc3BjYV9kZXYsIDB4MjAsIDAsIDUpOwpAQCAtNjkzLDQxICs2ODcsMzQgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCV9fdTggU2l6ZTsKLQlfX3U4IFR5cGU7CisJdTggU2l6ZTsKIAlpbnQgcmM7CiAKLQlTaXplID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7Ci0JVHlwZSA9IDA7CisJU2l6ZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OwogCXN3aXRjaCAoc2QtPmJyaWRnZSkgewogCWNhc2UgQlJJREdFX1NQQ0E1MzM6Ci0JCXJlZ193KGdzcGNhX2RldiwgMHgzMSwgMCwgMCwgMCk7CisJCXJlZ193X3JpdihkZXYsIDB4MzEsIDAsIDApOwogCQlzcGNhNTA0Ql9XYWl0Q21kU3RhdHVzKGdzcGNhX2Rldik7CiAJCXJjID0gc3BjYTUwNEJfUG9sbGluZ0RhdGFSZWFkeShnc3BjYV9kZXYpOwogCQlzcGNhNTB4X0dldEZpcm13YXJlKGdzcGNhX2Rldik7Ci0JCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDI7CQkJLyogdHlwZSAqLwotCQlyZWdfdyhnc3BjYV9kZXYsIDB4MjQsIDAsIDgsIDEpOworCQlyZWdfd18xKGdzcGNhX2RldiwgMHgyNCwgMCwgOCwgMik7CQkvKiB0eXBlICovCiAJCXJlZ19yKGdzcGNhX2RldiwgMHgyNCwgOCwgMSk7CiAKLQkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gU2l6ZTsKLQkJcmVnX3coZ3NwY2FfZGV2LCAweDI1LCAwLCA0LCAxKTsKKwkJcmVnX3dfMShnc3BjYV9kZXYsIDB4MjUsIDAsIDQsIFNpemUpOwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MjUsIDQsIDEpOwkJCS8qIHNpemUgKi8KIAkJcmMgPSBzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CiAKIAkJLyogSW5pdCB0aGUgY2FtIHdpZHRoIGhlaWdodCB3aXRoIHNvbWUgdmFsdWVzIGdldCBvbiBpbml0ID8gKi8KLQkJcmVnX3coZ3NwY2FfZGV2LCAweDMxLCAwLCA0LCAwKTsKKwkJcmVnX3dfcml2KGRldiwgMHgzMSwgMCwgMHgwNCk7CiAJCXNwY2E1MDRCX1dhaXRDbWRTdGF0dXMoZ3NwY2FfZGV2KTsKIAkJcmMgPSBzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAvKiBjYXNlIEJSSURHRV9TUENBNTA0QjogKi8KIC8qIGNhc2UgQlJJREdFX1NQQ0E1MzY6ICovCi0JCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IFNpemU7Ci0JCXJlZ193KGdzcGNhX2RldiwgMHgyNSwgMCwgNCwgMSk7CisJCXJlZ193XzEoZ3NwY2FfZGV2LCAweDI1LCAwLCA0LCBTaXplKTsKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDI1LCA0LCAxKTsJCQkvKiBzaXplICovCi0JCVR5cGUgPSA2OwotCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSBUeXBlOwotCQlyZWdfdyhnc3BjYV9kZXYsIDB4MjcsIDAsIDAsIDEpOworCQlyZWdfd18xKGdzcGNhX2RldiwgMHgyNywgMCwgMCwgNik7CiAJCXJlZ19yKGdzcGNhX2RldiwgMHgyNywgMCwgMSk7CQkJLyogdHlwZSAqLwogCQlyYyA9IHNwY2E1MDRCX1BvbGxpbmdEYXRhUmVhZHkoZ3NwY2FfZGV2KTsKIAkJYnJlYWs7CkBAIC03NjcsMTcgKzc1NCw1MSBAQAogCiBzdGF0aWMgdm9pZCBzcGNhNTA0Ql9zZXRRdGFibGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDM7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDI2LCAwLCAwLCAxKTsKKwlyZWdfd18xKGdzcGNhX2RldiwgMHgyNiwgMCwgMCwgMyk7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweDI2LCAwLCAxKTsKIAlzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CiB9CiAKLXN0YXRpYyB2b2lkIHNwNXh4X2luaXRDb250QnJpZ0h1ZVJlZ2lzdGVycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCXUxNiByZWc7CisKKwlyZWcgPSBzZC0+YnJpZGdlID09IEJSSURHRV9TUENBNTM2ID8gMHgyMGYwIDogMHgyMWE3OworCXJlZ193X3JpdihkZXYsIDB4MDAsIHJlZywgc2QtPmJyaWdodG5lc3MpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwl1MTYgcmVnOworCisJcmVnID0gc2QtPmJyaWRnZSA9PSBCUklER0VfU1BDQTUzNiA/IDB4MjBmMSA6IDB4MjFhODsKKwlyZWdfd19yaXYoZGV2LCAweDAwLCByZWcsIHNkLT5jb250cmFzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwl1MTYgcmVnOworCisJcmVnID0gc2QtPmJyaWRnZSA9PSBCUklER0VfU1BDQTUzNiA/IDB4MjBmNiA6IDB4MjFhZTsKKwlyZWdfd19yaXYoZGV2LCAweDAwLCByZWcsIHNkLT5jb2xvcnMpOworfQorCitzdGF0aWMgdm9pZCBpbml0X2N0bF9yZWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJaW50IHBvbGxyZWcgPSAxOwogCisJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisKIAlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKIAljYXNlIEJSSURHRV9TUENBNTA0OgogCWNhc2UgQlJJREdFX1NQQ0E1MDRDOgpAQCAtNzg2LDIwICs4MDcsMTQgQEAKIAlkZWZhdWx0OgogLyoJY2FzZSBCUklER0VfU1BDQTUzMzogKi8KIC8qCWNhc2UgQlJJREdFX1NQQ0E1MDRCOiAqLwotCQlyZWdfdyhnc3BjYV9kZXYsIDAsIDAsIDB4MjFhNywgMCk7CS8qIGJyaWdodG5lc3MgKi8KLQkJcmVnX3coZ3NwY2FfZGV2LCAwLCAweDIwLCAweDIxYTgsIDApOwkvKiBjb250cmFzdCAqLwotCQlyZWdfdyhnc3BjYV9kZXYsIDAsIDAsIDB4MjFhZCwgMCk7CS8qIGh1ZSAqLwotCQlyZWdfdyhnc3BjYV9kZXYsIDAsIDEsIDB4MjFhYywgMCk7CS8qIHNhdC9odWUgKi8KLQkJcmVnX3coZ3NwY2FfZGV2LCAwLCAweDIwLCAweDIxYWUsIDApOwkvKiBzYXR1cmF0aW9uICovCi0JCXJlZ193KGdzcGNhX2RldiwgMCwgMCwgMHgyMWEzLCAwKTsJLyogZ2FtbWEgKi8KKwkJcmVnX3dfcml2KGRldiwgMCwgMHgwMCwgMHgyMWFkKTsJLyogaHVlICovCisJCXJlZ193X3JpdihkZXYsIDAsIDB4MDEsIDB4MjFhYyk7CS8qIHNhdC9odWUgKi8KKwkJcmVnX3dfcml2KGRldiwgMCwgMHgwMCwgMHgyMWEzKTsJLyogZ2FtbWEgKi8KIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfU1BDQTUzNjoKLQkJcmVnX3coZ3NwY2FfZGV2LCAwLCAwLCAweDIwZjAsIDApOwotCQlyZWdfdyhnc3BjYV9kZXYsIDAsIDB4MjEsIDB4MjBmMSwgMCk7Ci0JCXJlZ193KGdzcGNhX2RldiwgMCwgMHg0MCwgMHgyMGY1LCAwKTsKLQkJcmVnX3coZ3NwY2FfZGV2LCAwLCAxLCAweDIwZjQsIDApOwotCQlyZWdfdyhnc3BjYV9kZXYsIDAsIDB4NDAsIDB4MjBmNiwgMCk7Ci0JCXJlZ193KGdzcGNhX2RldiwgMCwgMCwgMHgyMDg5LCAwKTsKKwkJcmVnX3dfcml2KGRldiwgMCwgMHg0MCwgMHgyMGY1KTsKKwkJcmVnX3dfcml2KGRldiwgMCwgMHgwMSwgMHgyMGY0KTsKKwkJcmVnX3dfcml2KGRldiwgMCwgMHgwMCwgMHgyMDg5KTsKIAkJYnJlYWs7CiAJfQogCWlmIChwb2xscmVnKQpAQCAtODQwLDIwICs4NTUsMjQgQEAKIC8qCWNhc2UgQlJJREdFX1NQQ0E1MDQ6ICovCiAvKgljYXNlIEJSSURHRV9TUENBNTM2OiAqLwogCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7Ci0JCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOworCQljYW0tPm5tb2RlcyA9QVJSQVlfU0laRSh2Z2FfbW9kZSk7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX1NQQ0E1MzM6CiAJCWNhbS0+Y2FtX21vZGUgPSBjdXN0b21fbW9kZTsKLQkJY2FtLT5ubW9kZXMgPSBzaXplb2YgY3VzdG9tX21vZGUgLyBzaXplb2YgY3VzdG9tX21vZGVbMF07CisJCWlmIChzZC0+c3VidHlwZSA9PSBNZWdhSW1hZ2VWSSkJCS8qIDMyMHgyNDAgb25seSAqLworCQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKGN1c3RvbV9tb2RlKSAtIDE7CisJCWVsc2UKKwkJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShjdXN0b21fbW9kZSk7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX1NQQ0E1MDRDOgogCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGUyOwotCQljYW0tPm5tb2RlcyA9IHNpemVvZiB2Z2FfbW9kZTIgLyBzaXplb2YgdmdhX21vZGUyWzBdOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUyKTsKIAkJYnJlYWs7CiAJfQotCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+Y29udHJhc3QgPSBzZF9jdHJsc1tTRF9DT05UUkFTVF0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+Y29sb3JzID0gc2RfY3RybHNbU0RfQ09MT1JdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKKwlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl9ERUY7CiAJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX0RFRjsKIAlyZXR1cm4gMDsKIH0KQEAgLTg2MywzMiArODgyLDI5IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlpbnQgcmM7Ci0JX191OCBpOwotCV9fdTggaW5mb1s2XTsKLQlpbnQgZXJyX2NvZGU7CisJaW50IGksIGVycl9jb2RlOworCXU4IGluZm9bNl07CiAKIAlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKIAljYXNlIEJSSURHRV9TUENBNTA0QjoKLQkJcmVnX3coZ3NwY2FfZGV2LCAweDFkLCAwLCAwLCAwKTsKLQkJcmVnX3coZ3NwY2FfZGV2LCAwLCAxLCAweDIzMDYsIDApOwotCQlyZWdfdyhnc3BjYV9kZXYsIDAsIDAsIDB4MGQwNCwgMCk7Ci0JCXJlZ193KGdzcGNhX2RldiwgMCwgMCwgMHgyMDAwLCAwKTsKLQkJcmVnX3coZ3NwY2FfZGV2LCAwLCAweDEzLCAweDIzMDEsIDApOwotCQlyZWdfdyhnc3BjYV9kZXYsIDAsIDAsIDB4MjMwNiwgMCk7CisJCXJlZ193X3JpdihkZXYsIDB4MWQsIDB4MDAsIDApOworCQlyZWdfd19yaXYoZGV2LCAwLCAweDAxLCAweDIzMDYpOworCQlyZWdfd19yaXYoZGV2LCAwLCAweDAwLCAweDBkMDQpOworCQlyZWdfd19yaXYoZGV2LCAwLCAweDAwLCAweDIwMDApOworCQlyZWdfd19yaXYoZGV2LCAwLCAweDEzLCAweDIzMDEpOworCQlyZWdfd19yaXYoZGV2LCAwLCAweDAwLCAweDIzMDYpOwogCQkvKiBmYWxsIHRocnUgKi8KIAljYXNlIEJSSURHRV9TUENBNTMzOgotCQlyYyA9IHNwY2E1MDRCX1BvbGxpbmdEYXRhUmVhZHkoZ3NwY2FfZGV2KTsKKwkJc3BjYTUwNEJfUG9sbGluZ0RhdGFSZWFkeShnc3BjYV9kZXYpOwogCQlzcGNhNTB4X0dldEZpcm13YXJlKGdzcGNhX2Rldik7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX1NQQ0E1MzY6CiAJCXNwY2E1MHhfR2V0RmlybXdhcmUoZ3NwY2FfZGV2KTsKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwLCAweDUwMDIsIDEpOwotCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAwOwotCQlyZWdfdyhnc3BjYV9kZXYsIDB4MjQsIDAsIDAsIDEpOworCQlyZWdfd18xKGdzcGNhX2RldiwgMHgyNCwgMCwgMCwgMCk7CiAJCXJlZ19yKGdzcGNhX2RldiwgMHgyNCwgMCwgMSk7Ci0JCXJjID0gc3BjYTUwNEJfUG9sbGluZ0RhdGFSZWFkeShnc3BjYV9kZXYpOwotCQlyZWdfdyhnc3BjYV9kZXYsIDB4MzQsIDAsIDAsIDApOworCQlzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CisJCXJlZ193X3JpdihkZXYsIDB4MzQsIDAsIDApOwogCQlzcGNhNTA0Ql9XYWl0Q21kU3RhdHVzKGdzcGNhX2Rldik7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX1NQQ0E1MDRDOgkvKiBwY2NhbTYwMCAqLwpAQCAtODk4LDEyICs5MTQsMTMgQEAKIAkJc3BjYTUwNF93YWl0X3N0YXR1cyhnc3BjYV9kZXYpOwogCQlpZiAoc2QtPnN1YnR5cGUgPT0gTG9naXRlY2hDbGlja1NtYXJ0NDIwKQogCQkJd3JpdGVfdmVjdG9yKGdzcGNhX2RldiwKLQkJCQkJc3BjYTUwNEFfY2xpY2tzbWFydDQyMF9vcGVuX2RhdGEpOworCQkJCXNwY2E1MDRBX2NsaWNrc21hcnQ0MjBfb3Blbl9kYXRhLAorCQkJCUFSUkFZX1NJWkUoc3BjYTUwNEFfY2xpY2tzbWFydDQyMF9vcGVuX2RhdGEpKTsKIAkJZWxzZQotCQkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwNF9wY2NhbTYwMF9vcGVuX2RhdGEpOworCQkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwNF9wY2NhbTYwMF9vcGVuX2RhdGEsCisJCQkJQVJSQVlfU0laRShzcGNhNTA0X3BjY2FtNjAwX29wZW5fZGF0YSkpOwogCQllcnJfY29kZSA9IHNwY2E1MHhfc2V0dXBfcXRhYmxlKGdzcGNhX2RldiwKLQkJCQkJCTB4MDAsIDB4MjgwMCwKLQkJCQkJCTB4Mjg0MCwgcXRhYmxlX2NyZWF0aXZlX3BjY2FtKTsKKwkJCQkJCXF0YWJsZV9jcmVhdGl2ZV9wY2NhbSk7CiAJCWlmIChlcnJfY29kZSA8IDApIHsKIAkJCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwgInNwY2E1MHhfc2V0dXBfcXRhYmxlIGZhaWxlZCIpOwogCQkJcmV0dXJuIGVycl9jb2RlOwpAQCAtOTQxLDggKzk1OCw4IEBACiAJCQkJCQkJNiwgMCwgMHg4NiwgMSk7ICovCiAvKgkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kIChnc3BjYV9kZXYsIDB4MjQsCiAJCQkJCQkJMCwgMCwgMHg5RCwgMSk7ICovCi0JCQlyZWdfd19yaXYoZGV2LCAweDAsIDB4MjcwYywgMHgwNSk7IC8qIEw5MiBzbm8xdC50eHQgKi8KLQkJCXJlZ193X3JpdihkZXYsIDB4MCwgMHgyMzEwLCAweDA1KTsKKwkJCXJlZ193X3JpdihkZXYsIDB4MDAsIDB4MjcwYywgMHgwNSk7IC8qIEw5MiBzbm8xdC50eHQgKi8KKwkJCXJlZ193X3JpdihkZXYsIDB4MDAsIDB4MjMxMCwgMHgwNSk7CiAJCQlzcGNhNTA0QV9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MDEsCiAJCQkJCQkJMHgwZiwgMCwgMHhmZiwgMCk7CiAJCX0KQEAgLTk1MCw4ICs5NjcsNiBAQAogCQlyZWdfd19yaXYoZGV2LCAwLCAweDIwMDAsIDApOwogCQlyZWdfd19yaXYoZGV2LCAwLCAweDI4ODMsIDEpOwogCQllcnJfY29kZSA9IHNwY2E1MHhfc2V0dXBfcXRhYmxlKGdzcGNhX2RldiwKLQkJCQkJCTB4MDAsIDB4MjgwMCwKLQkJCQkJCTB4Mjg0MCwKIAkJCQkJCXF0YWJsZV9zcGNhNTA0X2RlZmF1bHQpOwogCQlpZiAoZXJyX2NvZGUgPCAwKSB7CiAJCQlQREVCVUcoRF9FUlIsICJzcGNhNTB4X3NldHVwX3F0YWJsZSBmYWlsZWQiKTsKQEAgLTk2NiwxMCArOTgxLDkgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWludCByYzsKIAlpbnQgZW5hYmxlOwotCV9fdTggaTsKLQlfX3U4IGluZm9bNl07CisJaW50IGk7CisJdTggaW5mb1s2XTsKIAogCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KIAlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKQEAgLTk4NywxNiArMTAwMSwyMCBAQAogLyoJY2FzZSBCUklER0VfU1BDQTUwNEI6ICovCiAvKgljYXNlIEJSSURHRV9TUENBNTMzOiAqLwogLyoJY2FzZSBCUklER0VfU1BDQTUzNjogKi8KLQkJaWYgKHNkLT5zdWJ0eXBlID09IE1lZ2FwaXhWNCB8fAotCQkgICAgc2QtPnN1YnR5cGUgPT0gTG9naXRlY2hDbGlja1NtYXJ0ODIwKSB7Ci0JCQlyZWdfdyhnc3BjYV9kZXYsIDB4ZjAsIDAsIDAsIDApOworCQlzd2l0Y2ggKHNkLT5zdWJ0eXBlKSB7CisJCWNhc2UgTWVnYXBpeFY0OgorCQljYXNlIExvZ2l0ZWNoQ2xpY2tTbWFydDgyMDoKKwkJY2FzZSBNZWdhSW1hZ2VWSToKKwkJCXJlZ193X3JpdihkZXYsIDB4ZjAsIDAsIDApOwogCQkJc3BjYTUwNEJfV2FpdENtZFN0YXR1cyhnc3BjYV9kZXYpOwogCQkJcmVnX3IoZ3NwY2FfZGV2LCAweGYwLCA0LCAwKTsKIAkJCXNwY2E1MDRCX1dhaXRDbWRTdGF0dXMoZ3NwY2FfZGV2KTsKLQkJfSBlbHNlIHsKLQkJCXJlZ193KGdzcGNhX2RldiwgMHgzMSwgMCwgNCwgMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJlZ193X3JpdihkZXYsIDB4MzEsIDAsIDB4MDQpOwogCQkJc3BjYTUwNEJfV2FpdENtZFN0YXR1cyhnc3BjYV9kZXYpOwotCQkJcmMgPSBzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CisJCQlzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CisJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAljYXNlIEJSSURHRV9TUENBNTA0OgpAQCAtMTAzMCwxNSArMTA0OCwxNyBAQAogCQkJc3BjYTUwNF9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MjQsIDAsIDApOwogCQl9CiAJCXNwY2E1MDRCX1NldFNpemVUeXBlKGdzcGNhX2Rldik7Ci0JCXJlZ193X3JpdihkZXYsIDB4MCwgMHgyNzBjLCAweDA1KTsJLyogTDkyIHNubzF0LnR4dCAqLwotCQlyZWdfd19yaXYoZGV2LCAweDAsIDB4MjMxMCwgMHgwNSk7CisJCXJlZ193X3JpdihkZXYsIDB4MDAsIDB4MjcwYywgMHgwNSk7CS8qIEw5MiBzbm8xdC50eHQgKi8KKwkJcmVnX3dfcml2KGRldiwgMHgwMCwgMHgyMzEwLCAweDA1KTsKIAkJYnJlYWs7CiAJY2FzZSBCUklER0VfU1BDQTUwNEM6CiAJCWlmIChzZC0+c3VidHlwZSA9PSBMb2dpdGVjaENsaWNrU21hcnQ0MjApIHsKIAkJCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsCi0JCQkJCXNwY2E1MDRBX2NsaWNrc21hcnQ0MjBfaW5pdF9kYXRhKTsKKwkJCQlzcGNhNTA0QV9jbGlja3NtYXJ0NDIwX2luaXRfZGF0YSwKKwkJCQlBUlJBWV9TSVpFKHNwY2E1MDRBX2NsaWNrc21hcnQ0MjBfaW5pdF9kYXRhKSk7CiAJCX0gZWxzZSB7Ci0JCQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTA0X3BjY2FtNjAwX2luaXRfZGF0YSk7CisJCQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTA0X3BjY2FtNjAwX2luaXRfZGF0YSwKKwkJCQlBUlJBWV9TSVpFKHNwY2E1MDRfcGNjYW02MDBfaW5pdF9kYXRhKSk7CiAJCX0KIAkJZW5hYmxlID0gKHNkLT5hdXRvZ2FpbiA/IDB4MDQgOiAweDAxKTsKIAkJcmVnX3dfcml2KGRldiwgMHgwYywgMHgwMDAwLCBlbmFibGUpOwkvKiBhdXRvIGV4cG9zdXJlICovCkBAIC0xMDUwLDcgKzEwNzAsNyBAQAogCQlzcGNhNTA0Ql9TZXRTaXplVHlwZShnc3BjYV9kZXYpOwogCQlicmVhazsKIAl9Ci0Jc3A1eHhfaW5pdENvbnRCcmlnSHVlUmVnaXN0ZXJzKGdzcGNhX2Rldik7CisJaW5pdF9jdGxfcmVnKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNjQsNyArMTA4NCw3IEBACiAvKgljYXNlIEJSSURHRV9TUENBNTMzOiAqLwogLyoJY2FzZSBCUklER0VfU1BDQTUzNjogKi8KIC8qCWNhc2UgQlJJREdFX1NQQ0E1MDRCOiAqLwotCQlyZWdfdyhnc3BjYV9kZXYsIDB4MzEsIDAsIDAsIDApOworCQlyZWdfd19yaXYoZGV2LCAweDMxLCAwLCAwKTsKIAkJc3BjYTUwNEJfV2FpdENtZFN0YXR1cyhnc3BjYV9kZXYpOwogCQlzcGNhNTA0Ql9Qb2xsaW5nRGF0YVJlYWR5KGdzcGNhX2Rldik7CiAJCWJyZWFrOwpAQCAtMTA4Miw3ICsxMTAyLDcgQEAKIAkJCQkJCQkweDBmLCAweDAwLCAweGZmLCAxKTsKIAkJfSBlbHNlIHsKIAkJCXNwY2E1MDRfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LCAwLCAwKTsKLQkJCXJlZ193X3JpdihkZXYsIDB4MDEsIDB4MDAwZiwgMHgwMCk7CisJCQlyZWdfd19yaXYoZGV2LCAweDAxLCAweDAwMGYsIDB4MDAwMCk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTA5NywxMiArMTExNywxMiBAQAogCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KLQkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KKwkJCXU4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBpLCBzb2YgPSAwOwotCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGZmZDlbXSA9IHsweGZmLCAweGQ5fTsKKwlzdGF0aWMgdTggZmZkOVtdID0gezB4ZmYsIDB4ZDl9OwogCiAvKiBmcmFtZXMgYXJlIGpwZWcgNC4xLjEgd2l0aG91dCAweGZmIGVzY2FwZSAqLwogCXN3aXRjaCAoc2QtPmJyaWRnZSkgewpAQCAtMTE5MCw2MyArMTIxMCw2IEBACiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQotCXN3aXRjaCAoc2QtPmJyaWRnZSkgewotCWRlZmF1bHQ6Ci0vKgljYXNlIEJSSURHRV9TUENBNTMzOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEI6ICovCi0vKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEM6ICovCi0JCXJlZ193X3JpdihkZXYsIDB4MCwgMHgyMWE3LCBzZC0+YnJpZ2h0bmVzcyk7Ci0JCWJyZWFrOwotCWNhc2UgQlJJREdFX1NQQ0E1MzY6Ci0JCXJlZ193X3JpdihkZXYsIDB4MCwgMHgyMGYwLCBzZC0+YnJpZ2h0bmVzcyk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7Ci0KLQlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKLQlkZWZhdWx0OgotLyoJY2FzZSBCUklER0VfU1BDQTUzMzogKi8KLS8qCWNhc2UgQlJJREdFX1NQQ0E1MDRCOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNDogKi8KLS8qCWNhc2UgQlJJREdFX1NQQ0E1MDRDOiAqLwotCQlyZWdfd19yaXYoZGV2LCAweDAsIDB4MjFhOCwgc2QtPmNvbnRyYXN0KTsKLQkJYnJlYWs7Ci0JY2FzZSBCUklER0VfU1BDQTUzNjoKLQkJcmVnX3dfcml2KGRldiwgMHgwLCAweDIwZjEsIHNkLT5jb250cmFzdCk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCi0Jc3dpdGNoIChzZC0+YnJpZGdlKSB7Ci0JZGVmYXVsdDoKLS8qCWNhc2UgQlJJREdFX1NQQ0E1MzM6ICovCi0vKgljYXNlIEJSSURHRV9TUENBNTA0QjogKi8KLS8qCWNhc2UgQlJJREdFX1NQQ0E1MDQ6ICovCi0vKgljYXNlIEJSSURHRV9TUENBNTA0QzogKi8KLQkJcmVnX3dfcml2KGRldiwgMHgwLCAweDIxYWUsIHNkLT5jb2xvcnMpOwotCQlicmVhazsKLQljYXNlIEJSSURHRV9TUENBNTM2OgotCQlyZWdfd19yaXYoZGV2LCAweDAsIDB4MjBmNiwgc2QtPmNvbG9ycyk7Ci0JCWJyZWFrOwotCX0KLX0KLQogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTEzODQsNiArMTM0Nyw3IEBACiAJe1VTQl9ERVZJQ0UoMHgwNGZjLCAweDUzNjApLCBCUyhTUENBNTM2LCAwKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNGZjLCAweGZmZmYpLCBCUyhTUENBNTA0QiwgMCl9LAogCXtVU0JfREVWSUNFKDB4MDUyYiwgMHgxNTEzKSwgQlMoU1BDQTUzMywgTWVnYXBpeFY0KX0sCisJe1VTQl9ERVZJQ0UoMHgwNTJiLCAweDE4MDMpLCBCUyhTUENBNTMzLCBNZWdhSW1hZ2VWSSl9LAogCXtVU0JfREVWSUNFKDB4MDU0NiwgMHgzMTU1KSwgQlMoU1BDQTUzMywgMCl9LAogCXtVU0JfREVWSUNFKDB4MDU0NiwgMHgzMTkxKSwgQlMoU1BDQTUwNEIsIDApfSwKIAl7VVNCX0RFVklDRSgweDA1NDYsIDB4MzI3MyksIEJTKFNQQ0E1MDRCLCAwKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCmluZGV4IDQwNDIxNGIuLjFkMzIxYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCkBAIC0yNjQsNiArMjY0LDEwIEBACiAKIC8qIHNlbnNvciBzcGVjaWZpYyBkYXRhICovCiBzdHJ1Y3QgYWRkaXRpb25hbF9zZW5zb3JfZGF0YSB7CisJY29uc3QgdTggbjNbNl07CisJY29uc3QgdTggKm40LCBuNHN6OworCWNvbnN0IHU4IHJlZzgwLCByZWc4ZTsKKwljb25zdCB1OCBuc2V0OFs2XTsKIAljb25zdCB1OCBkYXRhMVsxMF07CiAJY29uc3QgdTggZGF0YTJbOV07CiAJY29uc3QgdTggZGF0YTNbOV07CkBAIC0yNzIsMTQgKzI3Niw1NSBAQAogCWNvbnN0IHU4IHN0cmVhbVs0XTsKIH07CiAKK3N0YXRpYyBjb25zdCB1OCBuNF9vbTY4MDJbXSA9IHsKKwkweDA5LCAweDAxLCAweDEyLCAweDA0LCAweDY2LCAweDhhLCAweDgwLCAweDNjLAorCTB4ODEsIDB4MjIsIDB4ODQsIDB4NTAsIDB4OGEsIDB4NzgsIDB4OGIsIDB4NjgsCisJMHg4YywgMHg4OCwgMHg4ZSwgMHgzMywgMHg4ZiwgMHgyNCwgMHhhYSwgMHhiMSwKKwkweGEyLCAweDYwLCAweGE1LCAweDMwLCAweGE2LCAweDNhLCAweGE4LCAweGU4LAorCTB4YWUsIDB4MDUsIDB4YjEsIDB4MDAsIDB4YmIsIDB4MDQsIDB4YmMsIDB4NDgsCisJMHhiZSwgMHgzNiwgMHhjNiwgMHg4OCwgMHhlOSwgMHgwMCwgMHhjNSwgMHhjMCwKKwkweDY1LCAweDBhLCAweGJiLCAweDg2LCAweGFmLCAweDU4LCAweGIwLCAweDY4LAorCTB4ODcsIDB4NDAsIDB4ODksIDB4MmIsIDB4OGQsIDB4ZmYsIDB4ODMsIDB4NDAsCisJMHhhYywgMHg4NCwgMHhhZCwgMHg4NiwgMHhhZiwgMHg0NgorfTsKK3N0YXRpYyBjb25zdCB1OCBuNF9vdGhlcltdID0geworCTB4NjYsIDB4MDAsIDB4N2YsIDB4MDAsIDB4ODAsIDB4YWMsIDB4ODEsIDB4NjksCisJMHg4NCwgMHg0MCwgMHg4NSwgMHg3MCwgMHg4NiwgMHgyMCwgMHg4YSwgMHg2OCwKKwkweDhiLCAweDU4LCAweDhjLCAweDg4LCAweDhkLCAweGZmLCAweDhlLCAweGI4LAorCTB4OGYsIDB4MjgsIDB4YTIsIDB4NjAsIDB4YTUsIDB4NDAsIDB4YTgsIDB4YTgsCisJMHhhYywgMHg4NCwgMHhhZCwgMHg4NCwgMHhhZSwgMHgyNCwgMHhhZiwgMHg1NiwKKwkweGIwLCAweDY4LCAweGIxLCAweDAwLCAweGIyLCAweDg4LCAweGJiLCAweGM1LAorCTB4YmMsIDB4NGEsIDB4YmUsIDB4MzYsIDB4YzIsIDB4ODgsIDB4YzUsIDB4YzAsCisJMHhjNiwgMHhkYSwgMHhlOSwgMHgyNiwgMHhlYiwgMHgwMAorfTsKK3N0YXRpYyBjb25zdCB1OCBuNF90YXM1MTMwYVtdID0geworCTB4ODAsIDB4M2MsIDB4ODEsIDB4NjgsIDB4ODMsIDB4YTAsIDB4ODQsIDB4MjAsCisJMHg4YSwgMHg2OCwgMHg4YiwgMHg1OCwgMHg4YywgMHg4OCwgMHg4ZSwgMHhiNCwKKwkweDhmLCAweDI0LCAweGExLCAweGIxLCAweGEyLCAweDMwLCAweGE1LCAweDEwLAorCTB4YTYsIDB4NGEsIDB4YWUsIDB4MDMsIDB4YjEsIDB4NDQsIDB4YjIsIDB4MDgsCisJMHhiNywgMHgwNiwgMHhiOSwgMHhlNywgMHhiYiwgMHhjNCwgMHhiYywgMHg0YSwKKwkweGJlLCAweDM2LCAweGJmLCAweGZmLCAweGMyLCAweDg4LCAweGM1LCAweGM4LAorCTB4YzYsIDB4ZGEKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkaXRpb25hbF9zZW5zb3JfZGF0YSBzZW5zb3JfZGF0YVtdID0gewotICAgIHsJCQkJLyogT002ODAyICovCisgICAgewkJCQkvKiAwOiBPTTY4MDIgKi8KKwkubjMgPQorCQl7MHg2MSwgMHg2OCwgMHg2NSwgMHgwYSwgMHg2MCwgMHgwNH0sCisJLm40ID0gbjRfb202ODAyLAorCS5uNHN6ID0gc2l6ZW9mIG40X29tNjgwMiwKKwkucmVnODAgPSAweDNjLAorCS5yZWc4ZSA9IDB4MzMsCisJLm5zZXQ4ID0gezB4YTgsIDB4ZjAsIDB4YzYsIDB4ODgsIDB4YzAsIDB4MDB9LAogCS5kYXRhMSA9CiAJCXsweGMyLCAweDI4LCAweDBmLCAweDIyLCAweGNkLCAweDI3LCAweDJjLCAweDA2LAogCQkgMHhiMywgMHhmY30sCiAJLmRhdGEyID0KIAkJezB4ODAsIDB4ZmYsIDB4ZmYsIDB4ODAsIDB4ZmYsIDB4ZmYsIDB4ODAsIDB4ZmYsCiAJCSAweGZmfSwKKwkuZGF0YTMgPQorCQl7MHg4MCwgMHhmZiwgMHhmZiwgMHg4MCwgMHhmZiwgMHhmZiwgMHg4MCwgMHhmZiwKKwkJIDB4ZmZ9LAogCS5kYXRhNCA9CS8qRnJlcSAoNTAvNjBIeikuIFNwbGl0dGVkIGZvciB0ZXN0IHB1cnBvc2UgKi8KIAkJezB4NjYsIDB4Y2EsIDB4YTgsIDB4ZjB9LAogCS5kYXRhNSA9CS8qIHRoaXMgY291bGQgYmUgcmVtb3ZlZCBsYXRlciAqLwpAQCAtMjg3LDEzICszMzIsMjMgQEAKIAkuc3RyZWFtID0KIAkJezB4MGIsIDB4MDQsIDB4MGEsIDB4Nzh9LAogICAgIH0sCi0gICAgewkJCQkvKiBPVEhFUiAqLworICAgIHsJCQkJLyogMTogT1RIRVIgKi8KKwkubjMgPQorCQl7MHg2MSwgMHhjMiwgMHg2NSwgMHg4OCwgMHg2MCwgMHgwMH0sCisJLm40ID0gbjRfb3RoZXIsCisJLm40c3ogPSBzaXplb2YgbjRfb3RoZXIsCisJLnJlZzgwID0gMHhhYywKKwkucmVnOGUgPSAweGI4LAorCS5uc2V0OCA9IHsweGE4LCAweGE4LCAweGM2LCAweGRhLCAweGMwLCAweDAwfSwKIAkuZGF0YTEgPQogCQl7MHhjMSwgMHg0OCwgMHgwNCwgMHgxYiwgMHhjYSwgMHgyZSwgMHgzMywgMHgzYSwKIAkJIDB4ZTgsIDB4ZmN9LAogCS5kYXRhMiA9CiAJCXsweDRlLCAweDljLCAweGVjLCAweDQwLCAweDgwLCAweGMwLCAweDQ4LCAweDk2LAogCQkgMHhkOX0sCisJLmRhdGEzID0KKwkJezB4NGUsIDB4OWMsIDB4ZWMsIDB4NDAsIDB4ODAsIDB4YzAsIDB4NDgsIDB4OTYsCisJCSAweGQ5fSwKIAkuZGF0YTQgPQogCQl7MHg2NiwgMHgwMCwgMHhhOCwgMHhhOH0sCiAJLmRhdGE1ID0KQEAgLTMwMSwxMyArMzU2LDIzIEBACiAJLnN0cmVhbSA9CiAJCXsweDBiLCAweDA0LCAweDBhLCAweDAwfSwKICAgICB9LAotICAgIHsJCQkJLyogVEFTNTEzMEEgKi8KKyAgICB7CQkJCS8qIDI6IFRBUzUxMzBBICovCisJLm4zID0KKwkJezB4NjEsIDB4YzIsIDB4NjUsIDB4MGQsIDB4NjAsIDB4MDh9LAorCS5uNCA9IG40X3RhczUxMzBhLAorCS5uNHN6ID0gc2l6ZW9mIG40X3RhczUxMzBhLAorCS5yZWc4MCA9IDB4M2MsCisJLnJlZzhlID0gMHhiNCwKKwkubnNldDggPSB7MHhhOCwgMHhmMCwgMHhjNiwgMHhkYSwgMHhjMCwgMHgwMH0sCiAJLmRhdGExID0KIAkJezB4YmIsIDB4MjgsIDB4MTAsIDB4MTAsIDB4YmIsIDB4MjgsIDB4MWUsIDB4MjcsCiAJCSAweGM4LCAweGZjfSwKIAkuZGF0YTIgPQogCQl7MHg2MCwgMHhhOCwgMHhlMCwgMHg2MCwgMHhhOCwgMHhlMCwgMHg2MCwgMHhhOCwKIAkJIDB4ZTB9LAorCS5kYXRhMyA9CisJCXsweDYwLCAweGE4LCAweGUwLCAweDYwLCAweGE4LCAweGUwLCAweDYwLCAweGE4LAorCQkgMHhlMH0sCiAJLmRhdGE0ID0JLyogRnJlcSAoNTAvNjBIeikuIFNwbGl0dGVkIGZvciB0ZXN0IHB1cnBvc2UgKi8KIAkJezB4NjYsIDB4MDAsIDB4YTgsIDB4ZTh9LAogCS5kYXRhNSA9CkBAIC0zNjQsNyArNDI5LDcgQEAKIAl7MHgwMCwgMHgxOCwgMHgyYiwgMHg0NCwgMHg2MCwgMHg3MCwgMHg4MCwgMHg4ZSwJLyogMTAgKi8KIAkgMHg5YywgMHhhYSwgMHhiNywgMHhjNCwgMHhkMCwgMHhkOCwgMHhlMiwgMHhmMCwKIAkgMHhmZn0sCi0JezB4MDAsIDB4MWEsIDB4MzQsIDB4NTIsIDB4NjYsIDB4N2UsIDB4OEQsIDB4OUIsCS8qIDExICovCisJezB4MDAsIDB4MWEsIDB4MzQsIDB4NTIsIDB4NjYsIDB4N2UsIDB4OGQsIDB4OWIsCS8qIDExICovCiAJIDB4YTgsIDB4YjQsIDB4YzAsIDB4Y2IsIDB4ZDYsIDB4ZTEsIDB4ZWIsIDB4ZjUsCiAJIDB4ZmZ9LAogCXsweDAwLCAweDNmLCAweDVhLCAweDZlLCAweDdmLCAweDhlLCAweDljLCAweGE4LAkvKiAxMiAqLwpAQCAtMzg1LDggKzQ1MCw2IEBACiAJezB4NjIsIDB4MDgsIDB4NjMsIDB4NzAsIDB4NjQsIDB4MWQsIDB4NjAsIDB4MDl9LAogCXsweDYyLCAweDIwLCAweDYzLCAweDAxLCAweDY0LCAweDAyLCAweDYwLCAweDA5fSwKIAl7MHg2MiwgMHgwNywgMHg2MywgMHgwMywgMHg2NCwgMHgwMCwgMHg2MCwgMHgwOX0sCi0JezB4NjIsIDB4MDcsIDB4NjMsIDB4MDMsIDB4NjQsIDB4MDAsIDB4NjAsIDB4MDl9LAotCXt9LAogfTsKIAogc3RhdGljIHU4IHNlbnNvcl9yZXNldFtdID0gezB4NjEsIDB4NjgsIDB4NjIsIDB4ZmYsIDB4NjAsIDB4MDd9OwpAQCAtNjMzLDEwICs2OTYsMTAgQEAKIAkgKiBidXQgd29udCBodXJ0IGFueXdheSwgYW5kIGNhbiBoZWxwIHNvbWVvbmUgd2l0aCBzaW1pbGFyIHdlYmNhbQogCSAqIHRvIHNlZSB0aGUgaW5pdGlhbCBwYXJhbWV0ZXJzLiovCiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWNvbnN0IHN0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhICpzZW5zb3I7CiAJaW50IGk7CiAJdTE2IHNlbnNvcl9pZDsKIAl1OCB0ZXN0X2J5dGUgPSAwOwotCXUxNiByZWc4MCwgcmVnOGU7CiAKIAlzdGF0aWMgY29uc3QgdTggcmVhZF9pbmRleHNbXSA9CiAJCXsgMHgwYSwgMHgwYiwgMHg2NiwgMHg4MCwgMHg4MSwgMHg4ZSwgMHg4ZiwgMHhhNSwKQEAgLTY0NSwzNyArNzA4LDYgQEAKIAkJCXsweDA4LCAweDAzLCAweDA5LCAweDAzLCAweDEyLCAweDA0fTsKIAlzdGF0aWMgY29uc3QgdTggbjJbXSA9CiAJCQl7MHgwOCwgMHgwMH07Ci0Jc3RhdGljIGNvbnN0IHU4IG4zWzZdID0KLQkJCXsweDYxLCAweDY4LCAweDY1LCAweDBhLCAweDYwLCAweDA0fTsKLQlzdGF0aWMgY29uc3QgdTggbjNfb3RoZXJbNl0gPQotCQkJezB4NjEsIDB4YzIsIDB4NjUsIDB4ODgsIDB4NjAsIDB4MDB9OwotCXN0YXRpYyBjb25zdCB1OCBuNFtdID0KLQkJezB4MDksIDB4MDEsIDB4MTIsIDB4MDQsIDB4NjYsIDB4OGEsIDB4ODAsIDB4M2MsCi0JCSAweDgxLCAweDIyLCAweDg0LCAweDUwLCAweDhhLCAweDc4LCAweDhiLCAweDY4LAotCQkgMHg4YywgMHg4OCwgMHg4ZSwgMHgzMywgMHg4ZiwgMHgyNCwgMHhhYSwgMHhiMSwKLQkJIDB4YTIsIDB4NjAsIDB4YTUsIDB4MzAsIDB4YTYsIDB4M2EsIDB4YTgsIDB4ZTgsCi0JCSAweGFlLCAweDA1LCAweGIxLCAweDAwLCAweGJiLCAweDA0LCAweGJjLCAweDQ4LAotCQkgMHhiZSwgMHgzNiwgMHhjNiwgMHg4OCwgMHhlOSwgMHgwMCwgMHhjNSwgMHhjMCwKLQkJIDB4NjUsIDB4MGEsIDB4YmIsIDB4ODYsIDB4YWYsIDB4NTgsIDB4YjAsIDB4NjgsCi0JCSAweDg3LCAweDQwLCAweDg5LCAweDJiLCAweDhkLCAweGZmLCAweDgzLCAweDQwLAotCQkgMHhhYywgMHg4NCwgMHhhZCwgMHg4NiwgMHhhZiwgMHg0Nn07Ci0Jc3RhdGljIGNvbnN0IHU4IG40X290aGVyW10gPQotCQl7MHg2NiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHg4MCwgMHhhYywgMHg4MSwgMHg2OSwKLQkJIDB4ODQsIDB4NDAsIDB4ODUsIDB4NzAsIDB4ODYsIDB4MjAsIDB4OGEsIDB4NjgsCi0JCSAweDhiLCAweDU4LCAweDhjLCAweDg4LCAweDhkLCAweGZmLCAweDhlLCAweGI4LAotCQkgMHg4ZiwgMHgyOCwgMHhhMiwgMHg2MCwgMHhhNSwgMHg0MCwgMHhhOCwgMHhhOCwKLQkJIDB4YWMsIDB4ODQsIDB4YWQsIDB4ODQsIDB4YWUsIDB4MjQsIDB4YWYsIDB4NTYsCi0JCSAweGIwLCAweDY4LCAweGIxLCAweDAwLCAweGIyLCAweDg4LCAweGJiLCAweGM1LAotCQkgMHhiYywgMHg0YSwgMHhiZSwgMHgzNiwgMHhjMiwgMHg4OCwgMHhjNSwgMHhjMCwKLQkJIDB4YzYsIDB4ZGEsIDB4ZTksIDB4MjYsIDB4ZWIsIDB4MDB9OwotCXN0YXRpYyBjb25zdCB1OCBuc2V0OFs2XSA9Ci0JCQl7IDB4YTgsIDB4ZjAsIDB4YzYsIDB4ODgsIDB4YzAsIDB4MDAgfTsKLQlzdGF0aWMgY29uc3QgdTggbnNldDhfb3RoZXJbNl0gPQotCQkJeyAweGE4LCAweGE4LCAweGM2LCAweGRhLCAweGMwLCAweDAwIH07Ci0Jc3RhdGljIGNvbnN0IHU4IG5zZXQ5WzRdID0KLQkJCXsgMHgwYiwgMHgwNCwgMHgwYSwgMHg3OCB9OwotCXN0YXRpYyBjb25zdCB1OCBuc2V0OV9vdGhlcls0XSA9Ci0JCQl7IDB4MGIsIDB4MDQsIDB4MGEsIDB4MDAgfTsKIAogCXNlbnNvcl9pZCA9IChyZWdfcihnc3BjYV9kZXYsIDB4MDYpIDw8IDgpCiAJCQl8IHJlZ19yKGdzcGNhX2RldiwgMHgwNyk7CkBAIC03MDksOCArNzQxLDcgQEAKIAkJfQogCQlpZiAoaSA8IDApIHsKIAkJCWVycigiQmFkIHNlbnNvciByZXNldCAlMDJ4IiwgdGVzdF9ieXRlKTsKLS8qCQkJcmV0dXJuIC1FSU87ICovCi0vKmZpeG1lOiB0ZXN0IC0gY29udGludWUgKi8KKwkJCXJldHVybiAtRUlPOwogCQl9CiAJCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4yLCBzaXplb2YgbjIpOwogCX0KQEAgLTcyMywzMSArNzU0LDE3IEBACiAJCWkrKzsKIAl9CiAKLQlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfT1RIRVIpIHsKLQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjMsIHNpemVvZiBuMyk7Ci0JCXJlZ193X2J1Zihnc3BjYV9kZXYsIG40LCBzaXplb2YgbjQpOwotCQlyZWdfcihnc3BjYV9kZXYsIDB4MDA4MCk7Ci0JCXJlZ193KGdzcGNhX2RldiwgMHgyYzgwKTsKLQkJcmVnODAgPSAweDM4ODA7Ci0JCXJlZzhlID0gMHgzMzhlOwotCX0gZWxzZSB7Ci0JCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4zX290aGVyLCBzaXplb2YgbjNfb3RoZXIpOwotCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuNF9vdGhlciwgc2l6ZW9mIG40X290aGVyKTsKLQkJc2QtPmdhbW1hID0gNTsKLQkJcmVnODAgPSAweGFjODA7Ci0JCXJlZzhlID0gMHhiODhlOwotCX0KKwlzZW5zb3IgPSAmc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl07CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yLT5uMywgc2l6ZW9mIHNlbnNvci0+bjMpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+bjQsIHNlbnNvci0+bjRzeik7CiAKLQlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4ZDAsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExLAotCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExKTsKLQlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4YzcsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyLAotCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyKTsKLQlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4ZTAsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyLAotCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyKTsKKwlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4ZDAsIHNlbnNvci0+ZGF0YTEsIHNpemVvZiBzZW5zb3ItPmRhdGExKTsKKwlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4YzcsIHNlbnNvci0+ZGF0YTIsIHNpemVvZiBzZW5zb3ItPmRhdGEyKTsKKwlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4ZTAsIHNlbnNvci0+ZGF0YTMsIHNpemVvZiBzZW5zb3ItPmRhdGEzKTsKIAotCXJlZ193KGdzcGNhX2RldiwgcmVnODApOwotCXJlZ193KGdzcGNhX2RldiwgcmVnODApOwotCXJlZ193KGdzcGNhX2RldiwgcmVnOGUpOworCXJlZ193KGdzcGNhX2RldiwgKHNlbnNvci0+cmVnODAgPDwgOCkgKyAweDgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIChzZW5zb3ItPnJlZzgwIDw8IDgpICsgMHg4MCk7CisJcmVnX3coZ3NwY2FfZGV2LCAoc2Vuc29yLT5yZWc4ZSA8PCA4KSArIDB4OGUpOwogCiAJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CkBAIC03NjAsMjUgKzc3NywxNCBAQAogCXJlZ193KGdzcGNhX2RldiwgMHgyMDg4KTsKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MjA4OSk7CiAKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCwKLQkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCk7Ci0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTUsCi0JCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTUpOwotCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVEhFUikgewotCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OCwgc2l6ZW9mIG5zZXQ4KTsKLQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDksIHNpemVvZiBuc2V0OSk7Ci0JCXJlZ193KGdzcGNhX2RldiwgMHgyODgwKTsKLQl9IGVsc2UgewotCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OF9vdGhlciwgc2l6ZW9mIG5zZXQ4X290aGVyKTsKLQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDlfb3RoZXIsIHNpemVvZiBuc2V0OV9vdGhlcik7Ci0JfQorCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+ZGF0YTQsIHNpemVvZiBzZW5zb3ItPmRhdGE0KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3ItPmRhdGE1LCBzaXplb2Ygc2Vuc29yLT5kYXRhNSk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yLT5uc2V0OCwgc2l6ZW9mIHNlbnNvci0+bnNldDgpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+c3RyZWFtLCBzaXplb2Ygc2Vuc29yLT5zdHJlYW0pOwogCi0JcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGQwLCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSwKLQkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSk7Ci0JcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGM3LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMiwKLQkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMik7Ci0JcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGUwLCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMiwKLQkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMik7CisJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGQwLCBzZW5zb3ItPmRhdGExLCBzaXplb2Ygc2Vuc29yLT5kYXRhMSk7CisJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGM3LCBzZW5zb3ItPmRhdGEyLCBzaXplb2Ygc2Vuc29yLT5kYXRhMik7CisJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGUwLCBzZW5zb3ItPmRhdGEzLCBzaXplb2Ygc2Vuc29yLT5kYXRhMyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTgyOCw3ICs4MzQsNiBAQAogICogaSBhZGRlZCBzb21lIG1vZHVsZSBwYXJhbWV0ZXJzIGZvciB0ZXN0IHdpdGggc29tZSB1c2VycyAqLwogc3RhdGljIHZvaWQgcG9sbF9zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdGF0aWMgY29uc3QgdTggcG9sbDFbXSA9CiAJCXsweDY3LCAweDA1LCAweDY4LCAweDgxLCAweDY5LCAweDgwLCAweDZhLCAweDgyLAogCQkgMHg2YiwgMHg2OCwgMHg2YywgMHg2OSwgMHg3MiwgMHhkOSwgMHg3MywgMHgzNCwKQEAgLTg0NCwyNCArODQ5LDIzIEBACiAJCSAweGExLCAweGIxLCAweGRhLCAweDZiLCAweGRiLCAweDk4LCAweGRmLCAweDBjLAogCQkgMHhjMiwgMHg4MCwgMHhjMywgMHgxMH07CiAKLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT002ODAyKSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgIltTZW5zb3IgcmVxdWlyZXMgcG9sbGluZ10iKTsKLQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgcG9sbDEsIHNpemVvZiBwb2xsMSk7Ci0JCXJlZ193X2J1Zihnc3BjYV9kZXYsIHBvbGwyLCBzaXplb2YgcG9sbDIpOwotCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsMywgc2l6ZW9mIHBvbGwzKTsKLQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgcG9sbDQsIHNpemVvZiBwb2xsNCk7Ci0JfQorCVBERUJVRyhEX1NUUkVBTSwgIltTZW5zb3IgcmVxdWlyZXMgcG9sbGluZ10iKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsMSwgc2l6ZW9mIHBvbGwxKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsMiwgc2l6ZW9mIHBvbGwyKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsMywgc2l6ZW9mIHBvbGwzKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsNCwgc2l6ZW9mIHBvbGw0KTsKIH0KIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWNvbnN0IHN0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhICpzZW5zb3I7CiAJaW50IGksIG1vZGU7CiAJdTggdDJbXSA9IHsgMHgwNywgMHgwMCwgMHgwZCwgMHg2MCwgMHgwZSwgMHg4MCB9OwogCXN0YXRpYyBjb25zdCB1OCB0M1tdID0KIAkJeyAweDA3LCAweDAwLCAweDg4LCAweDAyLCAweDA2LCAweDAwLCAweGU3LCAweDAxIH07CiAKLQltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLiBwcml2OworCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIDA6CQkvKiA2NDB4NDgwICgweDAwKSAqLwogCQlicmVhazsKQEAgLTg4OSwzNCArODkzLDMzIEBACiAJZGVmYXVsdDoKIC8qCWNhc2UgU0VOU09SX1RBUzUxMzBBOiAqLwogCQlpID0gMDsKLQkJd2hpbGUgKHRhczUxMzBhX3NlbnNvcl9pbml0W2ldWzBdICE9IDApIHsKKwkJZm9yICg7OykgewogCQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgdGFzNTEzMGFfc2Vuc29yX2luaXRbaV0sCiAJCQkJCSBzaXplb2YgdGFzNTEzMGFfc2Vuc29yX2luaXRbMF0pOworCQkJaWYgKGkgPj0gQVJSQVlfU0laRSh0YXM1MTMwYV9zZW5zb3JfaW5pdCkgLSAxKQorCQkJCWJyZWFrOwogCQkJaSsrOwogCQl9CiAJCXJlZ193KGdzcGNhX2RldiwgMHgzYzgwKTsKIAkJLyoganVzdCBpbiBjYXNlIGFuZCB0byBrZWVwIHN5bmMgd2l0aCBsb2dzIChmb3IgbWluZSkgKi8KLQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgdGFzNTEzMGFfc2Vuc29yX2luaXRbM10sCisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHRhczUxMzBhX3NlbnNvcl9pbml0W2ldLAogCQkJCSBzaXplb2YgdGFzNTEzMGFfc2Vuc29yX2luaXRbMF0pOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4M2M4MCk7CiAJCWJyZWFrOwogCX0KLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCwKLQkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCk7CisJc2Vuc29yID0gJnNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+ZGF0YTQsIHNpemVvZiBzZW5zb3ItPmRhdGE0KTsKIAlyZWdfcihnc3BjYV9kZXYsIDB4MDAxMik7CiAJcmVnX3dfYnVmKGdzcGNhX2RldiwgdDIsIHNpemVvZiB0Mik7CiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGIzLCB0Mywgc2l6ZW9mIHQzKTsKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MDAxMyk7CiAJbXNsZWVwKDE1KTsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0sCi0JCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtKTsKLQlwb2xsX3NlbnNvcihnc3BjYV9kZXYpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+c3RyZWFtLCBzaXplb2Ygc2Vuc29yLT5zdHJlYW0pOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+c3RyZWFtLCBzaXplb2Ygc2Vuc29yLT5zdHJlYW0pOwogCi0JLyogcmVzdGFydCBvbiBlYWNoIHN0YXJ0LCBqdXN0IGluIGNhc2UsIHNvbWV0aW1lcyByZWdzIGdvZXMgd3JvbmcKLQkgKiB3aGVuIHVzaW5nIGNvbnRyb2xzIGZyb20gYXBwICovCi0Jc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwotCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7Ci0Jc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09NNjgwMikKKwkJcG9sbF9zZW5zb3IoZ3NwY2FfZGV2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC05MjYsMTAgKzkyOSw5IEBACiAKIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0sCiAJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtKTsKLQltc2xlZXAoMjApOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0pOwotCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVEhFUikgeworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PTTY4MDIpIHsKIAkJbXNsZWVwKDIwKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAzMDkpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCmluZGV4IDlmMjQzZDcuLjRiNDRkZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYwpAQCAtNDI2LDcgKzQyNiw3IEBACiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgcGFja2V0X3R5cGUwLAogCQkJZnJhbWUsIGRhdGEgKyAyLCBnc3BjYV9kZXYtPndpZHRoKTsKIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBwYWNrZXRfdHlwZTEsCi0JCQlmcmFtZSwgZGF0YSArIGdzcGNhX2Rldi0+d2lkdGggKyA2LCBnc3BjYV9kZXYtPndpZHRoKTsKKwkJCWZyYW1lLCBkYXRhICsgZ3NwY2FfZGV2LT53aWR0aCArIDUsIGdzcGNhX2Rldi0+d2lkdGgpOwogfQogCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwppbmRleCAyNmRkMTU1Li42MTkyNTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKQEAgLTMyLDE0ICszMiwxNCBAQAogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwogCi0JX191OCBoZmxpcDsKLQlfX3U4IHZmbGlwOwotCV9fdTggbGlnaHRmcmVxOwotCV9fdTggc2hhcnBuZXNzOworCXU4IGhmbGlwOworCXU4IHZmbGlwOworCXU4IGxpZ2h0ZnJlcTsKKwl1OCBzaGFycG5lc3M7CiAKIAl1OCBpbWFnZV9vZmZzZXQ7CiAKLQljaGFyIGJyaWRnZTsKKwl1OCBicmlkZ2U7CiAjZGVmaW5lIEJSSURHRV9WQzAzMjEgMAogI2RlZmluZSBCUklER0VfVkMwMzIzIDEKIAl1OCBzZW5zb3I7CkBAIC01Miw2ICs1MiwxMCBAQAogI2RlZmluZSBTRU5TT1JfT1Y3NjcwIDYKICNkZWZpbmUgU0VOU09SX1BPMTIwMCA3CiAjZGVmaW5lIFNFTlNPUl9QTzMxMzBOQyA4CisJdTggZmxhZ3M7CisjZGVmaW5lIEZMX1NBTVNVTkcgMHgwMQkJLyogU2Ftc3VuZ1ExICgyIHNlbnNvcnMpICovCisjZGVmaW5lIEZMX0hGTElQIDB4MDIJCS8qIG1pcnJvcmVkIGJ5IGRlZmF1bHQgKi8KKyNkZWZpbmUgRkxfVkZMSVAgMHgwNAkJLyogdmVydGljYWwgZmxpcHBlZCBieSBkZWZhdWx0ICovCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC02NSw3ICs2OSw3IEBACiBzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCiBzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKLS8qIG5leHQgMiBjb250cm9scyB3b3JrIHdpdGggb3Y3NjYwIGFuZCBvdjc2NzAgb25seSAqLworLyogbmV4dCAyIGNvbnRyb2xzIHdvcmsgd2l0aCBzb21lIHNlbnNvcnMgb25seSAqLwogI2RlZmluZSBIRkxJUF9JRFggMAogCXsKIAkgICAgewpAQCAtMTUyLDkgKzE1Niw5IEBACiAJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKIAkJLnByaXYgPSAwfSwKLQl7MTI4MCwgMTAyNCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwgLyogbWkxM3gwX3NvYyBvbmx5ICovCisJezEyODAsIDk2MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwgLyogbWkxMzEwX3NvYyBvbmx5ICovCiAJCS5ieXRlc3BlcmxpbmUgPSAxMjgwLAotCQkuc2l6ZWltYWdlID0gMTI4MCAqIDEwMjQgKiAxIC8gNCArIDU5MCwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiA5NjAgKiAzIC8gOCArIDU5MCwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKIAkJLnByaXYgPSAyfSwKIH07CkBAIC0xODgsMTEgKzE5MiwxMSBAQAogI2RlZmluZSBPVjc2NjBfTVZGUF9NSVJST1IJMHgyMAogI2RlZmluZSBPVjc2NjBfTVZGUF9WRkxJUAkweDEwCiAKLXN0YXRpYyBjb25zdCBfX3U4IG1pMDM2MF9tYXRyaXhbOV0gPSB7CitzdGF0aWMgY29uc3QgdTggbWkwMzYwX21hdHJpeFs5XSA9IHsKIAkweDUwLCAweGY4LCAweGY4LCAweGY1LCAweDUwLCAweGZiLCAweGZmLCAweGYxLCAweDUwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBtaTAzNjBfaW5pdFZHQV9KUEdbXVs0XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBtaTAzNjBfaW5pdFZHQV9KUEdbXVs0XSA9IHsKIAl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCiAJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAogCXsweGIzLCAweDAwLCAweDI0LCAweGNjfSwKQEAgLTMwMSw3ICszMDUsNyBAQAogCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBfX3U4IG1pMDM2MF9pbml0UVZHQV9KUEdbXVs0XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBtaTAzNjBfaW5pdFFWR0FfSlBHW11bNF0gPSB7CiAJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAogCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKIAl7MHhiMywgMHgwMCwgMHgyNCwgMHhjY30sCkBAIC00MjEsMjExICs0MjUsOTUgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IF9fdTggbWkxMzEwX3NvY2luaXRWR0FfSlBHW11bNF0gPSB7CitzdGF0aWMgY29uc3QgdTggbWkxMzEwX3NvY2luaXRWR0FfSlBHW11bNF0gPSB7CiAJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAogCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHgyNCwgMHhjY30sCi0JezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAotCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwKLQl7MHhiMywgMHgwNiwgMHgwMywgMHhjY30sCi0JezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKIAl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKLQl7MHhiMywgMHgwNCwgMHgwZCwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAogCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAotCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMywgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4YzAsIDB4Y2N9LAogCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAotCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKLQl7MHhiOCwgMHgwMSwgMHg3ZCwgMHhjY30sCi0JezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAotCXsweGI4LCAweDI3LCAweDIwLCAweGNjfSwKLQl7MHhiOCwgMHgyNiwgMHg4MCwgMHhjY30sCi0JezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAotCXsweGI4LCAweDAwLCAweDEzLCAweGNjfSwKLQl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCi0JezB4YjgsIDB4ODEsIDB4MDEsIDB4Y2N9LAotCXsweGI4LCAweDJjLCAweDVhLCAweGNjfSwKLQl7MHhiOCwgMHgyZCwgMHhmZiwgMHhjY30sCi0JezB4YjgsIDB4MmUsIDB4ZWUsIDB4Y2N9LAotCXsweGI4LCAweDJmLCAweGZiLCAweGNjfSwKLQl7MHhiOCwgMHgzMCwgMHg1MiwgMHhjY30sCi0JezB4YjgsIDB4MzEsIDB4ZjgsIDB4Y2N9LAotCXsweGI4LCAweDMyLCAweGYxLCAweGNjfSwKLQl7MHhiOCwgMHgzMywgMHhmZiwgMHhjY30sCi0JezB4YjgsIDB4MzQsIDB4NTQsIDB4Y2N9LAotCXsweGI4LCAweDM1LCAweDAwLCAweGNjfSwKLQl7MHhiOCwgMHgzNiwgMHgwMCwgMHhjY30sCi0JezB4YjgsIDB4MzcsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjUsIDB4Y2N9LAorCXsweGI4LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwMCwgMHhkMCwgMHhjY30sCisJezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCisJezB4NWIsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDJmLCAweGRlLCAweDIwLCAweGJifSwKIAl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4MDAsIDB4MDEsIDB4MDAsIDB4ZGR9LAotCXsweDBkLCAweDAwLCAweDA5LCAweGJifSwKLQl7MHgwZCwgMHgwMCwgMHgwOCwgMHhiYn0sCisJezB4MjAsIDB4MDMsIDB4MDIsIDB4YmJ9LAkvKiBoL3YgZmxpcCAqLwogCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCi0JezB4MDYsIDB4MDAsIDB4MTQsIDB4YmJ9LAotCXsweDNhLCAweDEwLCAweDAwLCAweGJifSwKLQl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCi0JezB4OWIsIDB4MTAsIDB4MDAsIDB4YmJ9LAotCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHgwNSwgMHgwMCwgMHgwNywgMHhiYn0sCisJezB4MzQsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDM1LCAweGZmLCAweDAwLCAweGJifSwKKwl7MHhkYywgMHgwNywgMHgwMiwgMHhiYn0sCisJezB4ZGQsIDB4M2MsIDB4MTgsIDB4YmJ9LAorCXsweGRlLCAweDkyLCAweDZkLCAweGJifSwKKwl7MHhkZiwgMHhjZCwgMHhiMSwgMHhiYn0sCisJezB4ZTAsIDB4ZmYsIDB4ZTcsIDB4YmJ9LAorCXsweDA2LCAweGYwLCAweDBkLCAweGJifSwKKwl7MHgwNiwgMHg3MCwgMHgwZSwgMHhiYn0sCisJezB4NGMsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDRkLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MmUsIDB4MGMsIDB4NTUsIDB4YmJ9LAorCXsweDIxLCAweGI2LCAweDZlLCAweGJifSwKKwl7MHgzNiwgMHgzMCwgMHgxMCwgMHhiYn0sCisJezB4MzcsIDB4MDAsIDB4YzEsIDB4YmJ9LAogCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCi0JezB4MmIsIDB4MDAsIDB4MjgsIDB4YmJ9LAotCXsweDJjLCAweDAwLCAweDMwLCAweGJifSwKLQl7MHgyZCwgMHgwMCwgMHgzMCwgMHhiYn0sCi0JezB4MmUsIDB4MDAsIDB4MjgsIDB4YmJ9LAotCXsweDQxLCAweDAwLCAweGQ3LCAweGJifSwKLQl7MHgwOSwgMHgwMiwgMHgzYSwgMHhiYn0sCi0JezB4MGMsIDB4MDAsIDB4MDAsIDB4YmJ9LAotCXsweDIwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgwNSwgMHgwMCwgMHg4YywgMHhiYn0sCi0JezB4MDYsIDB4MDAsIDB4MzIsIDB4YmJ9LAotCXsweDA3LCAweDAwLCAweGM2LCAweGJifSwKLQl7MHgwOCwgMHgwMCwgMHgxOSwgMHhiYn0sCi0JezB4MjQsIDB4ODAsIDB4NmYsIDB4YmJ9LAotCXsweGM4LCAweDAwLCAweDBmLCAweGJifSwKLQl7MHgyMCwgMHgwMCwgMHgwZiwgMHhiYn0sCisJezB4MDcsIDB4MDAsIDB4ODQsIDB4YmJ9LAorCXsweDA4LCAweDAyLCAweDRhLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHgxMCwgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MzksIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHg1OCwgMHgwMiwgMHg2NywgMHhiYn0sCisJezB4NTcsIDB4MDIsIDB4MDAsIDB4YmJ9LAorCXsweDVhLCAweDAyLCAweDY3LCAweGJifSwKKwl7MHg1OSwgMHgwMiwgMHgwMCwgMHhiYn0sCisJezB4NWMsIDB4MTIsIDB4MGQsIDB4YmJ9LAorCXsweDVkLCAweDE2LCAweDExLCAweGJifSwKKwl7MHgzOSwgMHgwNiwgMHgxOCwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4MTgsIDB4YmJ9LAorCXsweDNiLCAweDA2LCAweDE4LCAweGJifSwKKwl7MHgzYywgMHgwNiwgMHgxOCwgMHhiYn0sCisJezB4NjQsIDB4N2IsIDB4NWIsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzNiwgMHgzMCwgMHgxMCwgMHhiYn0sCisJezB4MzcsIDB4MDAsIDB4YzAsIDB4YmJ9LAorCXsweGJjLCAweDBlLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwZiwgMHgwNSwgMHhjY30sCisJezB4YmMsIDB4MTAsIDB4YzAsIDB4Y2N9LAorCXsweGJjLCAweDExLCAweDAzLCAweGNjfSwKIAl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCiAJezB4YjYsIDB4MDMsIDB4MDIsIDB4Y2N9LAogCXsweGI2LCAweDAyLCAweDgwLCAweGNjfSwKIAl7MHhiNiwgMHgwNSwgMHgwMSwgMHhjY30sCiAJezB4YjYsIDB4MDQsIDB4ZTAsIDB4Y2N9LAotCXsweGI2LCAweDEyLCAweDc4LCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjYsIDB4MTMsIDB4MjUsIDB4Y2N9LAogCXsweGI2LCAweDE4LCAweDAyLCAweGNjfSwKIAl7MHhiNiwgMHgxNywgMHg1OCwgMHhjY30sCiAJezB4YjYsIDB4MTYsIDB4MDAsIDB4Y2N9LAogCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKIAl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCi0JezB4YjMsIDB4MDIsIDB4MDIsIDB4Y2N9LAogCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKIAl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCi0JezB4YmYsIDB4Y2MsIDB4MTAsIDB4Y2N9LAotCXsweGI5LCAweDEyLCAweDAwLCAweGNjfSwKLQl7MHhiOSwgMHgxMywgMHgwYSwgMHhjY30sCi0JezB4YjksIDB4MTQsIDB4MGEsIDB4Y2N9LAotCXsweGI5LCAweDE1LCAweDBhLCAweGNjfSwKLQl7MHhiOSwgMHgxNiwgMHgwYSwgMHhjY30sCi0JezB4YjksIDB4MTgsIDB4MDAsIDB4Y2N9LAotCXsweGI5LCAweDE5LCAweDBmLCAweGNjfSwKLQl7MHhiOSwgMHgxYSwgMHgwZiwgMHhjY30sCi0JezB4YjksIDB4MWIsIDB4MGYsIDB4Y2N9LAotCXsweGI5LCAweDFjLCAweDBmLCAweGNjfSwKLQl7MHhiOCwgMHg4ZSwgMHgwMCwgMHhjY30sCi0JezB4YjgsIDB4OGYsIDB4ZmYsIDB4Y2N9LAotCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKLQl7MHgwMywgMHgwMywgMHhjMCwgMHhiYn0sCi0JezB4MDYsIDB4MDAsIDB4MTAsIDB4YmJ9LAotCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKLQl7MHhiOCwgMHgwYywgMHgyMCwgMHhjY30sCi0JezB4YjgsIDB4MGQsIDB4NzAsIDB4Y2N9LAotCXsweGI2LCAweDEzLCAweDEzLCAweGNjfSwKLQl7MHgyZiwgMHgwMCwgMHhDMCwgMHhiYn0sCi0JezB4YjgsIDB4YTAsIDB4MTIsIDB4Y2N9LAotCXt9LAotfTsKLXN0YXRpYyBjb25zdCBfX3U4IG1pMTMxMF9zb2Npbml0UVZHQV9KUEdbXVs0XSA9IHsKLQl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCi0JezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAotCXsweGIzLCAweDAwLCAweDI0LCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHgyNSwgMHhjY30sCi0JezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAotCXsweGIzLCAweDA2LCAweDAzLCAweGNjfSwKLQl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCi0JezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAotCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKLQl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCi0JezB4YjMsIDB4MzUsIDB4ZGQsIDB4Y2N9LAotCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKLQl7MHhiMywgMHgwNCwgMHgwZCwgMHhjY30sCi0JezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAotCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCi0JezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAotCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAotCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKLQl7MHhiOCwgMHgwMSwgMHg3ZCwgMHhjY30sCi0JezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAotCXsweGI4LCAweDI3LCAweDIwLCAweGNjfSwKLQl7MHhiOCwgMHgyNiwgMHg4MCwgMHhjY30sCi0JezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAotCXsweGI4LCAweDAwLCAweDEzLCAweGNjfSwKLQl7MHhiYywgMHgwMCwgMHhkMSwgMHhjY30sCi0JezB4YjgsIDB4ODEsIDB4MDEsIDB4Y2N9LAotCXsweGI4LCAweDJjLCAweDVhLCAweGNjfSwKLQl7MHhiOCwgMHgyZCwgMHhmZiwgMHhjY30sCi0JezB4YjgsIDB4MmUsIDB4ZWUsIDB4Y2N9LAotCXsweGI4LCAweDJmLCAweGZiLCAweGNjfSwKLQl7MHhiOCwgMHgzMCwgMHg1MiwgMHhjY30sCi0JezB4YjgsIDB4MzEsIDB4ZjgsIDB4Y2N9LAotCXsweGI4LCAweDMyLCAweGYxLCAweGNjfSwKLQl7MHhiOCwgMHgzMywgMHhmZiwgMHhjY30sCi0JezB4YjgsIDB4MzQsIDB4NTQsIDB4Y2N9LAotCXsweGI4LCAweDM1LCAweDAwLCAweGNjfSwKLQl7MHhiOCwgMHgzNiwgMHgwMCwgMHhjY30sCi0JezB4YjgsIDB4MzcsIDB4MDAsIDB4Y2N9LAotCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCi0JezB4MGQsIDB4MDAsIDB4MDksIDB4YmJ9LAotCXsweDBkLCAweDAwLCAweDA4LCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCi0JezB4MDAsIDB4MDEsIDB4MDAsIDB4ZGR9LAotCXsweDA2LCAweDAwLCAweDE0LCAweGJifSwKLQl7MHgzYSwgMHgxMCwgMHgwMCwgMHhiYn0sCi0JezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAotCXsweDliLCAweDEwLCAweDAwLCAweGJifSwKLQl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCi0JezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAotCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKLQl7MHgyYiwgMHgwMCwgMHgyOCwgMHhiYn0sCi0JezB4MmMsIDB4MDAsIDB4MzAsIDB4YmJ9LAotCXsweDJkLCAweDAwLCAweDMwLCAweGJifSwKLQl7MHgyZSwgMHgwMCwgMHgyOCwgMHhiYn0sCi0JezB4NDEsIDB4MDAsIDB4ZDcsIDB4YmJ9LAotCXsweDA5LCAweDAyLCAweDNhLCAweGJifSwKLQl7MHgwYywgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4MjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAotCXsweDA1LCAweDAwLCAweDhjLCAweGJifSwKLQl7MHgwNiwgMHgwMCwgMHgzMiwgMHhiYn0sCi0JezB4MDcsIDB4MDAsIDB4YzYsIDB4YmJ9LAotCXsweDA4LCAweDAwLCAweDE5LCAweGJifSwKLQl7MHgyNCwgMHg4MCwgMHg2ZiwgMHhiYn0sCi0JezB4YzgsIDB4MDAsIDB4MGYsIDB4YmJ9LAotCXsweDIwLCAweDAwLCAweDBmLCAweGJifSwKLQl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCi0JezB4YjYsIDB4MDMsIDB4MDEsIDB4Y2N9LAotCXsweGI2LCAweDAyLCAweDQwLCAweGNjfSwKLQl7MHhiNiwgMHgwNSwgMHgwMCwgMHhjY30sCi0JezB4YjYsIDB4MDQsIDB4ZjAsIDB4Y2N9LAotCXsweGI2LCAweDEyLCAweDc4LCAweGNjfSwKLQl7MHhiNiwgMHgxOCwgMHgwMCwgMHhjY30sCi0JezB4YjYsIDB4MTcsIDB4OTYsIDB4Y2N9LAotCXsweGI2LCAweDE2LCAweDAwLCAweGNjfSwKLQl7MHhiNiwgMHgyMiwgMHgxMiwgMHhjY30sCi0JezB4YjYsIDB4MjMsIDB4MGIsIDB4Y2N9LAotCXsweGIzLCAweDAyLCAweDAyLCAweGNjfSwKLQl7MHhiZiwgMHhjMCwgMHgzOSwgMHhjY30sCi0JezB4YmYsIDB4YzEsIDB4MDQsIDB4Y2N9LAotCXsweGJmLCAweGNjLCAweDEwLCAweGNjfSwKLQl7MHhiOSwgMHgxMiwgMHgwMCwgMHhjY30sCi0JezB4YjksIDB4MTMsIDB4MGEsIDB4Y2N9LAotCXsweGI5LCAweDE0LCAweDBhLCAweGNjfSwKLQl7MHhiOSwgMHgxNSwgMHgwYSwgMHhjY30sCi0JezB4YjksIDB4MTYsIDB4MGEsIDB4Y2N9LAotCXsweGI5LCAweDE4LCAweDAwLCAweGNjfSwKLQl7MHhiOSwgMHgxOSwgMHgwZiwgMHhjY30sCi0JezB4YjksIDB4MWEsIDB4MGYsIDB4Y2N9LAotCXsweGI5LCAweDFiLCAweDBmLCAweGNjfSwKLQl7MHhiOSwgMHgxYywgMHgwZiwgMHhjY30sCi0JezB4YjgsIDB4OGUsIDB4MDAsIDB4Y2N9LAotCXsweGI4LCAweDhmLCAweGZmLCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgwMCwgMHhjY30sCiAJezB4YmMsIDB4MDIsIDB4MTgsIDB4Y2N9LAogCXsweGJjLCAweDAzLCAweDUwLCAweGNjfSwKIAl7MHhiYywgMHgwNCwgMHgxOCwgMHhjY30sCkBAIC02MzYsMTMzICs1MjQsMzM1IEBACiAJezB4YmMsIDB4MGEsIDB4MTAsIDB4Y2N9LAogCXsweGJjLCAweDBiLCAweDAwLCAweGNjfSwKIAl7MHhiYywgMHgwYywgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHg4MCwgMHgwMCwgMHgwMywgMHhiYn0sCisJezB4ODEsIDB4YzcsIDB4MTQsIDB4YmJ9LAorCXsweDgyLCAweGViLCAweGU4LCAweGJifSwKKwl7MHg4MywgMHhmZSwgMHhmNCwgMHhiYn0sCisJezB4ODQsIDB4Y2QsIDB4MTAsIDB4YmJ9LAorCXsweDg1LCAweGYzLCAweGVlLCAweGJifSwKKwl7MHg4NiwgMHhmZiwgMHhmMSwgMHhiYn0sCisJezB4ODcsIDB4Y2QsIDB4MTAsIDB4YmJ9LAorCXsweDg4LCAweGYzLCAweGVlLCAweGJifSwKKwl7MHg4OSwgMHgwMSwgMHhmMSwgMHhiYn0sCisJezB4OGEsIDB4ZTUsIDB4MTcsIDB4YmJ9LAorCXsweDhiLCAweGU4LCAweGUyLCAweGJifSwKKwl7MHg4YywgMHhmNywgMHhlZCwgMHhiYn0sCisJezB4OGQsIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweDhlLCAweGVjLCAweDEwLCAweGJifSwKKwl7MHg4ZiwgMHhmMCwgMHhlZCwgMHhiYn0sCisJezB4OTAsIDB4ZjksIDB4ZjIsIDB4YmJ9LAorCXsweDkxLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHg5MiwgMHhlOSwgMHgwZCwgMHhiYn0sCisJezB4OTMsIDB4ZjQsIDB4ZjIsIDB4YmJ9LAorCXsweDk0LCAweGZiLCAweGY1LCAweGJifSwKKwl7MHg5NSwgMHgwMCwgMHhmZiwgMHhiYn0sCisJezB4YjYsIDB4MGYsIDB4MDgsIDB4YmJ9LAorCXsweGI3LCAweDNkLCAweDE2LCAweGJifSwKKwl7MHhiOCwgMHgwYywgMHgwNCwgMHhiYn0sCisJezB4YjksIDB4MWMsIDB4MDcsIDB4YmJ9LAorCXsweGJhLCAweDBhLCAweDAzLCAweGJifSwKKwl7MHhiYiwgMHgxYiwgMHgwOSwgMHhiYn0sCisJezB4YmMsIDB4MTcsIDB4MGQsIDB4YmJ9LAorCXsweGJkLCAweDIzLCAweDFkLCAweGJifSwKKwl7MHhiZSwgMHgwMCwgMHgyOCwgMHhiYn0sCisJezB4YmYsIDB4MTEsIDB4MDksIDB4YmJ9LAorCXsweGMwLCAweDE2LCAweDE1LCAweGJifSwKKwl7MHhjMSwgMHgwMCwgMHgxYiwgMHhiYn0sCisJezB4YzIsIDB4MGUsIDB4MDcsIDB4YmJ9LAorCXsweGMzLCAweDE0LCAweDEwLCAweGJifSwKKwl7MHhjNCwgMHgwMCwgMHgxNywgMHhiYn0sCisJezB4MDYsIDB4NzQsIDB4OGUsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwNiwgMHhmNCwgMHg4ZSwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4NTAsIDB4ZGR9LAorCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MjQsIDB4NTAsIDB4MjAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzNCwgMHgwYywgMHg1MCwgMHhiYn0sCiAJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKIAl7MHgwMywgMHgwMywgMHhjMCwgMHhiYn0sCi0JezB4MDYsIDB4MDAsIDB4MTAsIDB4YmJ9LAotCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKLQl7MHhiOCwgMHgwYywgMHgyMCwgMHhjY30sCi0JezB4YjgsIDB4MGQsIDB4NzAsIDB4Y2N9LAotCXsweGI2LCAweDEzLCAweDEzLCAweGNjfSwKLQl7MHgyZiwgMHgwMCwgMHhDMCwgMHhiYn0sCi0JezB4YjgsIDB4YTAsIDB4MTIsIDB4Y2N9LAorCXt9LAorfTsKK3N0YXRpYyBjb25zdCB1OCBtaTEzMTBfc29jaW5pdFFWR0FfSlBHW11bNF0gPSB7CisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjQsIDB4Y2N9LAl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgyMiwgMHgwMywgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4YzAsIDB4Y2N9LAl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgxNiwgMHgwNCwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4ZmYsIDB4Y2N9LAl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MDAsIDB4Y2N9LAl7MHhiYywgMHgwMCwgMHhmMCwgMHhjY30sCisJezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4YzgsIDB4OWYsIDB4MGIsIDB4YmJ9LAl7MHg1YiwgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4MmYsIDB4ZGUsIDB4MjAsIDB4YmJ9LAl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MjAsIDB4MDMsIDB4MDIsIDB4YmJ9LAkvKiBoL3YgZmxpcCAqLworCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwNSwgMHgwMCwgMHgwNywgMHhiYn0sCXsweDM0LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgzNSwgMHhmZiwgMHgwMCwgMHhiYn0sCXsweGRjLCAweDA3LCAweDAyLCAweGJifSwKKwl7MHhkZCwgMHgzYywgMHgxOCwgMHhiYn0sCXsweGRlLCAweDkyLCAweDZkLCAweGJifSwKKwl7MHhkZiwgMHhjZCwgMHhiMSwgMHhiYn0sCXsweGUwLCAweGZmLCAweGU3LCAweGJifSwKKwl7MHgwNiwgMHhmMCwgMHgwZCwgMHhiYn0sCXsweDA2LCAweDcwLCAweDBlLCAweGJifSwKKwl7MHg0YywgMHgwMCwgMHgwMSwgMHhiYn0sCXsweDRkLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDJlLCAweDBjLCAweDU1LCAweGJifSwKKwl7MHgyMSwgMHhiNiwgMHg2ZSwgMHhiYn0sCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKKwl7MHgzNywgMHgwMCwgMHhjMSwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNywgMHgwMCwgMHg4NCwgMHhiYn0sCXsweDA4LCAweDAyLCAweDRhLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHgxMCwgMHhiYn0sCXsweDA2LCAweDAwLCAweDM5LCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDU4LCAweDAyLCAweDY3LCAweGJifSwKKwl7MHg1NywgMHgwMiwgMHgwMCwgMHhiYn0sCXsweDVhLCAweDAyLCAweDY3LCAweGJifSwKKwl7MHg1OSwgMHgwMiwgMHgwMCwgMHhiYn0sCXsweDVjLCAweDEyLCAweDBkLCAweGJifSwKKwl7MHg1ZCwgMHgxNiwgMHgxMSwgMHhiYn0sCXsweDM5LCAweDA2LCAweDE4LCAweGJifSwKKwl7MHgzYSwgMHgwNiwgMHgxOCwgMHhiYn0sCXsweDNiLCAweDA2LCAweDE4LCAweGJifSwKKwl7MHgzYywgMHgwNiwgMHgxOCwgMHhiYn0sCXsweDY0LCAweDdiLCAweDViLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKKwl7MHgzNywgMHgwMCwgMHhjMCwgMHhiYn0sCXsweGJjLCAweDBlLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwZiwgMHgwNSwgMHhjY30sCXsweGJjLCAweDEwLCAweGMwLCAweGNjfSwKKwl7MHhiYywgMHgxMSwgMHgwMywgMHhjY30sCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwMywgMHgwMSwgMHhjY30sCXsweGI2LCAweDAyLCAweDQwLCAweGNjfSwKKwl7MHhiNiwgMHgwNSwgMHgwMCwgMHhjY30sCXsweGI2LCAweDA0LCAweGYwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCXsweGI2LCAweDEzLCAweDI1LCAweGNjfSwKKwl7MHhiNiwgMHgxOCwgMHgwMCwgMHhjY30sCXsweGI2LCAweDE3LCAweDk2LCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKKwl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHg4MCwgMHgwMCwgMHgwMywgMHhiYn0sCXsweDgxLCAweGM3LCAweDE0LCAweGJifSwKKwl7MHg4MiwgMHhlYiwgMHhlOCwgMHhiYn0sCXsweDgzLCAweGZlLCAweGY0LCAweGJifSwKKwl7MHg4NCwgMHhjZCwgMHgxMCwgMHhiYn0sCXsweDg1LCAweGYzLCAweGVlLCAweGJifSwKKwl7MHg4NiwgMHhmZiwgMHhmMSwgMHhiYn0sCXsweDg3LCAweGNkLCAweDEwLCAweGJifSwKKwl7MHg4OCwgMHhmMywgMHhlZSwgMHhiYn0sCXsweDg5LCAweDAxLCAweGYxLCAweGJifSwKKwl7MHg4YSwgMHhlNSwgMHgxNywgMHhiYn0sCXsweDhiLCAweGU4LCAweGUyLCAweGJifSwKKwl7MHg4YywgMHhmNywgMHhlZCwgMHhiYn0sCXsweDhkLCAweDAwLCAweGZmLCAweGJifSwKKwl7MHg4ZSwgMHhlYywgMHgxMCwgMHhiYn0sCXsweDhmLCAweGYwLCAweGVkLCAweGJifSwKKwl7MHg5MCwgMHhmOSwgMHhmMiwgMHhiYn0sCXsweDkxLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHg5MiwgMHhlOSwgMHgwZCwgMHhiYn0sCXsweDkzLCAweGY0LCAweGYyLCAweGJifSwKKwl7MHg5NCwgMHhmYiwgMHhmNSwgMHhiYn0sCXsweDk1LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhiNiwgMHgwZiwgMHgwOCwgMHhiYn0sCXsweGI3LCAweDNkLCAweDE2LCAweGJifSwKKwl7MHhiOCwgMHgwYywgMHgwNCwgMHhiYn0sCXsweGI5LCAweDFjLCAweDA3LCAweGJifSwKKwl7MHhiYSwgMHgwYSwgMHgwMywgMHhiYn0sCXsweGJiLCAweDFiLCAweDA5LCAweGJifSwKKwl7MHhiYywgMHgxNywgMHgwZCwgMHhiYn0sCXsweGJkLCAweDIzLCAweDFkLCAweGJifSwKKwl7MHhiZSwgMHgwMCwgMHgyOCwgMHhiYn0sCXsweGJmLCAweDExLCAweDA5LCAweGJifSwKKwl7MHhjMCwgMHgxNiwgMHgxNSwgMHhiYn0sCXsweGMxLCAweDAwLCAweDFiLCAweGJifSwKKwl7MHhjMiwgMHgwZSwgMHgwNywgMHhiYn0sCXsweGMzLCAweDE0LCAweDEwLCAweGJifSwKKwl7MHhjNCwgMHgwMCwgMHgxNywgMHhiYn0sCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCXsweDA2LCAweGY0LCAweDhlLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHg1MCwgMHhkZH0sCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDI0LCAweDUwLCAweDIwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDM0LCAweDBjLCAweDUwLCAweGJifSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMywgMHgwMywgMHhjMCwgMHhiYn0sCiAJe30sCiB9Owogc3RhdGljIGNvbnN0IHU4IG1pMTMxMF9zb2NfSW5pdFNYR0FfSlBHW11bNF0gPSB7CiAJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAogCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHgyNCwgMHhjY30sCi0JezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCiAJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAotCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKLQl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKIAl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCiAJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAogCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MDMsIDB4MGEsIDB4Y2N9LAogCXsweGIzLCAweDA0LCAweDBkLCAweGNjfSwKIAl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAotCXsweGIzLCAweDIyLCAweDA0LCAweGNjfSwKLQl7MHhiMywgMHgyMywgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDMsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGMwLCAweGNjfSwKIAl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKIAl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCi0JezB4YjgsIDB4MDEsIDB4N2QsIDB4Y2N9LAotCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKLQl7MHhiOCwgMHgyNywgMHgyMCwgMHhjY30sCi0JezB4YjgsIDB4MjYsIDB4ODAsIDB4Y2N9LAotCXsweGI4LCAweDA2LCAweDAwLCAweGNjfSwKLQl7MHhiOCwgMHgwNywgMHgwNSwgMHhjY30sCi0JezB4YjgsIDB4MDgsIDB4MDAsIDB4Y2N9LAotCXsweGI4LCAweDA5LCAweDA0LCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHgyNSwgMHhjY30sCi0JezB4YjgsIDB4MDAsIDB4MTEsIDB4Y2N9LAotCXsweGJjLCAweDAwLCAweDcxLCAweGNjfSwKLQl7MHhiOCwgMHg4MSwgMHgwMSwgMHhjY30sCi0JezB4YjgsIDB4MmMsIDB4NWEsIDB4Y2N9LAotCXsweGI4LCAweDJkLCAweGZmLCAweGNjfSwKLQl7MHhiOCwgMHgyZSwgMHhlZSwgMHhjY30sCi0JezB4YjgsIDB4MmYsIDB4ZmIsIDB4Y2N9LAotCXsweGI4LCAweDMwLCAweDUyLCAweGNjfSwKLQl7MHhiOCwgMHgzMSwgMHhmOCwgMHhjY30sCi0JezB4YjgsIDB4MzIsIDB4ZjEsIDB4Y2N9LAotCXsweGI4LCAweDMzLCAweGZmLCAweGNjfSwKLQl7MHhiOCwgMHgzNCwgMHg1NCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjUsIDB4Y2N9LAorCXsweGI4LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwMCwgMHg3MCwgMHhjY30sCisJezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCisJezB4NWIsIDB4MDAsIDB4MDEsIDB4YmJ9LAogCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCi0JezB4MGQsIDB4MDAsIDB4MDksIDB4YmJ9LAotCXsweDBkLCAweDAwLCAweDA4LCAweGJifSwKKwl7MHgyMCwgMHgwMywgMHgwMiwgMHhiYn0sCS8qIGgvdiBmbGlwICovCiAJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAotCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKLQl7MHgwNiwgMHgwMCwgMHgxNCwgMHhiYn0sCi0JezB4M2EsIDB4MTAsIDB4MDAsIDB4YmJ9LAotCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKLQl7MHg5YiwgMHgxMCwgMHgwMCwgMHhiYn0sCi0JezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweDA1LCAweDAwLCAweDA3LCAweGJifSwKKwl7MHgzNCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MzUsIDB4ZmYsIDB4MDAsIDB4YmJ9LAorCXsweGRjLCAweDA3LCAweDAyLCAweGJifSwKKwl7MHhkZCwgMHgzYywgMHgxOCwgMHhiYn0sCisJezB4ZGUsIDB4OTIsIDB4NmQsIDB4YmJ9LAorCXsweGRmLCAweGNkLCAweGIxLCAweGJifSwKKwl7MHhlMCwgMHhmZiwgMHhlNywgMHhiYn0sCisJezB4MDYsIDB4ZjAsIDB4MGQsIDB4YmJ9LAorCXsweDA2LCAweDcwLCAweDBlLCAweGJifSwKKwl7MHg0YywgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4NGQsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgyZSwgMHgwYywgMHg2MCwgMHhiYn0sCisJezB4MjEsIDB4YjYsIDB4NmUsIDB4YmJ9LAorCXsweDM3LCAweDAxLCAweDQwLCAweGJifSwKIAl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4MDAsIDB4MDEsIDB4MDAsIDB4ZGR9LAotCXsweDJiLCAweDAwLCAweDI4LCAweGJifSwKLQl7MHgyYywgMHgwMCwgMHgzMCwgMHhiYn0sCi0JezB4MmQsIDB4MDAsIDB4MzAsIDB4YmJ9LAotCXsweDJlLCAweDAwLCAweDI4LCAweGJifSwKLQl7MHg0MSwgMHgwMCwgMHhkNywgMHhiYn0sCi0JezB4MDksIDB4MDIsIDB4M2EsIDB4YmJ9LAotCXsweDBjLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgyMCwgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4MDUsIDB4MDAsIDB4OGMsIDB4YmJ9LAotCXsweDA2LCAweDAwLCAweDMyLCAweGJifSwKLQl7MHgwNywgMHgwMCwgMHhjNiwgMHhiYn0sCi0JezB4MDgsIDB4MDAsIDB4MTksIDB4YmJ9LAotCXsweDI0LCAweDgwLCAweDZmLCAweGJifSwKLQl7MHhjOCwgMHgwMCwgMHgwZiwgMHhiYn0sCi0JezB4MjAsIDB4MDAsIDB4MDMsIDB4YmJ9LAorCXsweDA3LCAweDAwLCAweDg0LCAweGJifSwKKwl7MHgwOCwgMHgwMiwgMHg0YSwgMHhiYn0sCisJezB4MDUsIDB4MDEsIDB4MTAsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDM5LCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4NTgsIDB4MDIsIDB4NjcsIDB4YmJ9LAorCXsweDU3LCAweDAyLCAweDAwLCAweGJifSwKKwl7MHg1YSwgMHgwMiwgMHg2NywgMHhiYn0sCisJezB4NTksIDB4MDIsIDB4MDAsIDB4YmJ9LAorCXsweDVjLCAweDEyLCAweDBkLCAweGJifSwKKwl7MHg1ZCwgMHgxNiwgMHgxMSwgMHhiYn0sCisJezB4MzksIDB4MDYsIDB4MTgsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDE4LCAweGJifSwKKwl7MHgzYiwgMHgwNiwgMHgxOCwgMHhiYn0sCisJezB4M2MsIDB4MDYsIDB4MTgsIDB4YmJ9LAorCXsweDY0LCAweDdiLCAweDViLCAweGJifSwKIAl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCiAJezB4YjYsIDB4MDMsIDB4MDUsIDB4Y2N9LAogCXsweGI2LCAweDAyLCAweDAwLCAweGNjfSwKLQl7MHhiNiwgMHgwNSwgMHgwNCwgMHhjY30sCi0JezB4YjYsIDB4MDQsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDA1LCAweDAzLCAweGNjfSwKKwl7MHhiNiwgMHgwNCwgMHhjMCwgMHhjY30sCiAJezB4YjYsIDB4MTIsIDB4ZjgsIDB4Y2N9LAotCXsweGI2LCAweDE4LCAweDBhLCAweGNjfSwKLQl7MHhiNiwgMHgxNywgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MTMsIDB4MjksIDB4Y2N9LAorCXsweGI2LCAweDE4LCAweDA5LCAweGNjfSwKKwl7MHhiNiwgMHgxNywgMHg2MCwgMHhjY30sCiAJezB4YjYsIDB4MTYsIDB4MDAsIDB4Y2N9LAogCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKIAl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCi0JezB4YjMsIDB4MDIsIDB4MDIsIDB4Y2N9LAogCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKIAl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCi0JezB4YmYsIDB4Y2MsIDB4MTAsIDB4Y2N9LAotCXsweGI5LCAweDEyLCAweDAwLCAweGNjfSwKLQl7MHhiOSwgMHgxMywgMHgxNCwgMHhjY30sCi0JezB4YjksIDB4MTQsIDB4MTQsIDB4Y2N9LAotCXsweGI5LCAweDE1LCAweDE0LCAweGNjfSwKLQl7MHhiOSwgMHgxNiwgMHgxNCwgMHhjY30sCi0JezB4YjksIDB4MTgsIDB4MDAsIDB4Y2N9LAotCXsweGI5LCAweDE5LCAweDFlLCAweGNjfSwKLQl7MHhiOSwgMHgxYSwgMHgxZSwgMHhjY30sCi0JezB4YjksIDB4MWIsIDB4MWUsIDB4Y2N9LAotCXsweGI5LCAweDFjLCAweDFlLCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAotCXsweGI4LCAweDhlLCAweDAwLCAweGNjfSwKLQl7MHhiOCwgMHg4ZiwgMHhmZiwgMHhjY30sCi0JezB4YjYsIDB4MTIsIDB4ZjgsIDB4Y2N9LAotCXsweGI4LCAweDBjLCAweDIwLCAweGNjfSwKLQl7MHhiOCwgMHgwZCwgMHg3MCwgMHhjY30sCi0JezB4YjYsIDB4MTMsIDB4MTMsIDB4Y2N9LAotCXsweDJmLCAweDAwLCAweEMwLCAweGJifSwKLQl7MHhiOCwgMHhhMCwgMHgxMiwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4ODAsIDB4ZGR9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4MjIsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDIzLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyNCwgMHg3ZiwgMHgwMCwgMHhiYn0sCisJezB4MjgsIDB4ZWEsIDB4MDIsIDB4YmJ9LAorCXsweDI5LCAweDg2LCAweDdhLCAweGJifSwKKwl7MHg1ZSwgMHg1MiwgMHg0YywgMHhiYn0sCisJezB4NWYsIDB4MjAsIDB4MjQsIDB4YmJ9LAorCXsweDYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMiwgMHgwMCwgMHhlZSwgMHhiYn0sCisJezB4MDMsIDB4MzksIDB4MjMsIDB4YmJ9LAorCXsweDA0LCAweDA3LCAweDI0LCAweGJifSwKKwl7MHgwOSwgMHgwMCwgMHhjMCwgMHhiYn0sCisJezB4MGEsIDB4MDAsIDB4NzksIDB4YmJ9LAorCXsweDBiLCAweDAwLCAweDA0LCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHg1YywgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4ZDksIDB4YmJ9LAorCXsweDBlLCAweDAwLCAweDUzLCAweGJifSwKKwl7MHgwZiwgMHgwMCwgMHgyMSwgMHhiYn0sCisJezB4MTAsIDB4MDAsIDB4YTQsIDB4YmJ9LAorCXsweDExLCAweDAwLCAweGU1LCAweGJifSwKKwl7MHgxNSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTYsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE3LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTksIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFhLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFkLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDIwLCAweGRkfSwKKwl7MHgwNiwgMHhmMCwgMHg4ZSwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4ODAsIDB4ZGR9LAorCXsweDA2LCAweDcwLCAweDhlLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweDVlLCAweDZhLCAweDUzLCAweGJifSwKKwl7MHg1ZiwgMHg0MCwgMHgyYywgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDIwLCAweGRkfSwKKwl7MHg1OCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4NTMsIDB4MDksIDB4MDMsIDB4YmJ9LAorCXsweDU0LCAweDMxLCAweDE4LCAweGJifSwKKwl7MHg1NSwgMHg4YiwgMHg1ZiwgMHhiYn0sCisJezB4NTYsIDB4YzAsIDB4YTksIDB4YmJ9LAorCXsweDU3LCAweGUwLCAweGQyLCAweGJifSwKKwl7MHhlMSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZGMsIDB4MDksIDB4MDMsIDB4YmJ9LAorCXsweGRkLCAweDMxLCAweDE4LCAweGJifSwKKwl7MHhkZSwgMHg4YiwgMHg1ZiwgMHhiYn0sCisJezB4ZGYsIDB4YzAsIDB4YTksIDB4YmJ9LAorCXsweGUwLCAweGUwLCAweGQyLCAweGJifSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDA2LCAweGYwLCAweDhlLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MmYsIDB4ZGUsIDB4MjAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgyNCwgMHg1MCwgMHgyMCwgMHhiYn0sCisJezB4YmMsIDB4MGUsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDBmLCAweDA1LCAweGNjfSwKKwl7MHhiYywgMHgxMCwgMHhjMCwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDM0LCAweDBjLCAweDUwLCAweGJifSwKKwl7MHhiYywgMHgxMSwgMHgwMywgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDgwLCAweDAwLCAweDAzLCAweGJifSwKKwl7MHg4MSwgMHhjNywgMHgxNCwgMHhiYn0sCisJezB4ODIsIDB4ZWIsIDB4ZTgsIDB4YmJ9LAorCXsweDgzLCAweGZlLCAweGY0LCAweGJifSwKKwl7MHg4NCwgMHhjZCwgMHgxMCwgMHhiYn0sCisJezB4ODUsIDB4ZjMsIDB4ZWUsIDB4YmJ9LAorCXsweDg2LCAweGZmLCAweGYxLCAweGJifSwKKwl7MHg4NywgMHhjZCwgMHgxMCwgMHhiYn0sCisJezB4ODgsIDB4ZjMsIDB4ZWUsIDB4YmJ9LAorCXsweDg5LCAweDAxLCAweGYxLCAweGJifSwKKwl7MHg4YSwgMHhlNSwgMHgxNywgMHhiYn0sCisJezB4OGIsIDB4ZTgsIDB4ZTIsIDB4YmJ9LAorCXsweDhjLCAweGY3LCAweGVkLCAweGJifSwKKwl7MHg4ZCwgMHgwMCwgMHhmZiwgMHhiYn0sCisJezB4OGUsIDB4ZWMsIDB4MTAsIDB4YmJ9LAorCXsweDhmLCAweGYwLCAweGVkLCAweGJifSwKKwl7MHg5MCwgMHhmOSwgMHhmMiwgMHhiYn0sCisJezB4OTEsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDkyLCAweGU5LCAweDBkLCAweGJifSwKKwl7MHg5MywgMHhmNCwgMHhmMiwgMHhiYn0sCisJezB4OTQsIDB4ZmIsIDB4ZjUsIDB4YmJ9LAorCXsweDk1LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhiNiwgMHgwZiwgMHgwOCwgMHhiYn0sCisJezB4YjcsIDB4M2QsIDB4MTYsIDB4YmJ9LAorCXsweGI4LCAweDBjLCAweDA0LCAweGJifSwKKwl7MHhiOSwgMHgxYywgMHgwNywgMHhiYn0sCisJezB4YmEsIDB4MGEsIDB4MDMsIDB4YmJ9LAorCXsweGJiLCAweDFiLCAweDA5LCAweGJifSwKKwl7MHhiYywgMHgxNywgMHgwZCwgMHhiYn0sCisJezB4YmQsIDB4MjMsIDB4MWQsIDB4YmJ9LAorCXsweGJlLCAweDAwLCAweDI4LCAweGJifSwKKwl7MHhiZiwgMHgxMSwgMHgwOSwgMHhiYn0sCisJezB4YzAsIDB4MTYsIDB4MTUsIDB4YmJ9LAorCXsweGMxLCAweDAwLCAweDFiLCAweGJifSwKKwl7MHhjMiwgMHgwZSwgMHgwNywgMHhiYn0sCisJezB4YzMsIDB4MTQsIDB4MTAsIDB4YmJ9LAorCXsweGM0LCAweDAwLCAweDE3LCAweGJifSwKKwl7MHgwNiwgMHg3NCwgMHg4ZSwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAzLCAweDAzLCAweGMwLCAweGJifSwKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IF9fdTggbWkxMzIwX2dhbW1hWzE3XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBtaTEzMjBfZ2FtbWFbMTddID0gewogCTB4MDAsIDB4MTMsIDB4MzgsIDB4NTksIDB4NzksIDB4OTIsIDB4YTcsIDB4YjksIDB4YzgsCiAJMHhkNCwgMHhkZiwgMHhlNywgMHhlZSwgMHhmNCwgMHhmOSwgMHhmYywgMHhmZgogfTsKLXN0YXRpYyBjb25zdCBfX3U4IG1pMTMyMF9tYXRyaXhbOV0gPSB7CitzdGF0aWMgY29uc3QgdTggbWkxMzIwX21hdHJpeFs5XSA9IHsKIAkweDU0LCAweGRhLCAweDA2LCAweGYxLCAweDUwLCAweGY0LCAweGY3LCAweGVhLCAweDUyCiB9Owotc3RhdGljIGNvbnN0IF9fdTggbWkxMzIwX2luaXRWR0FfZGF0YVtdWzRdID0geworc3RhdGljIGNvbnN0IHU4IG1pMTMyMF9pbml0VkdBX2RhdGFbXVs0XSA9IHsKIAl7MHhiMywgMHgwMSwgMHgwMSwgMHhjY30sCXsweDAwLCAweDAwLCAweDMzLCAweGRkfSwKIAl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCXsweDAwLCAweDAwLCAweDMzLCAweGRkfSwKIAl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCXsweDAwLCAweDAwLCAweDMzLCAweGRkfSwKQEAgLTg0MSw3ICs5MzEsNyBAQAogCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IF9fdTggbWkxMzIwX2luaXRRVkdBX2RhdGFbXVs0XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBtaTEzMjBfaW5pdFFWR0FfZGF0YVtdWzRdID0gewogCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwJezB4MDAsIDB4MDAsIDB4MzMsIDB4ZGR9LAogCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwJezB4MDAsIDB4MDAsIDB4MzMsIDB4ZGR9LAogCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwJezB4MDAsIDB4MDAsIDB4MzMsIDB4ZGR9LApAQCAtOTQ4LDcgKzEwMzgsNyBAQAogCXsweDA3LCAweDAwLCAweGUwLCAweGJifSwKIAl7MHgwOCwgMHgwMCwgMHgwYiwgMHhiYn0sCiAJezB4MjEsIDB4MDAsIDB4MGMsIDB4YmJ9LAotCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCS8qIGgvdiBmbGlwICovCiAJezB4YmYsIDB4YzAsIDB4MjYsIDB4Y2N9LAogCXsweGJmLCAweGMxLCAweDAyLCAweGNjfSwKIAl7MHhiZiwgMHhjYywgMHgwNCwgMHhjY30sCkBAIC05NTgsNyArMTA0OCw3IEBACiAJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAogCXsweDA3LCAweDAxLCAweDQyLCAweGJifSwKIAl7MHgwOCwgMHgwMCwgMHgxMSwgMHhiYn0sCi0JezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwJLyogaC92IGZsaXAgKi8KIAl7MHgyMSwgMHg4MCwgMHgwMCwgMHhiYn0sCiAJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAogCXsweDI0LCAweDgwLCAweDAwLCAweGJifSwKQEAgLTEwNTEsNyArMTE0MSw3IEBACiAJezB4MDcsIDB4MDAsIDB4ZTAsIDB4YmJ9LAogCXsweDA4LCAweDAwLCAweDBiLCAweGJifSwKIAl7MHgyMSwgMHgwMCwgMHgwYywgMHhiYn0sCi0JezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwJLyogaC92IGZsaXAgKi8KIAl7MHhiZiwgMHhjMCwgMHgyNiwgMHhjY30sCiAJezB4YmYsIDB4YzEsIDB4MDIsIDB4Y2N9LAogCXsweGJmLCAweGNjLCAweDA0LCAweGNjfSwKQEAgLTEwNzEsNyArMTE2MSw3IEBACiAJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAogCXsweDA3LCAweDAxLCAweDQyLCAweGJifSwKIAl7MHgwOCwgMHgwMCwgMHgxMSwgMHhiYn0sCi0JezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwJLyogaC92IGZsaXAgKi8KIAl7MHgyMSwgMHg4MCwgMHgwMCwgMHhiYn0sCiAJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAogCXsweDI0LCAweDgwLCAweDAwLCAweGJifSwKQEAgLTExNjEsNyArMTI1MSw3IEBACiAJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAogCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKIAl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCi0JezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwJLyogaC92IGZsaXAgKi8KIAl7MHgwMCwgMHgwMCwgMHgyMCwgMHhkZH0sCiAJezB4YmYsIDB4YzAsIDB4MjYsIDB4Y2N9LAogCXsweGJmLCAweGMxLCAweDAyLCAweGNjfSwKQEAgLTExNzIsNyArMTI2Miw3IEBACiAJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAogCXsweDA3LCAweDAxLCAweDQyLCAweGJifSwKIAl7MHgwOCwgMHgwMCwgMHgxMSwgMHhiYn0sCi0JezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwJLyogaC92IGZsaXAgKi8KIAl7MHgyMSwgMHg4MCwgMHgwMCwgMHhiYn0sCiAJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAogCXsweDI0LCAweDgwLCAweDAwLCAweGJifSwKQEAgLTEyMzAsNyArMTMyMCw3IEBACiAJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAogCXsweDA3LCAweDAwLCAweDg1LCAweGJifSwKIAl7MHgwOCwgMHgwMCwgMHgyNywgMHhiYn0sCi0JezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwJLyogaC92IGZsaXAgKi8KIAl7MHgyMSwgMHg4MCwgMHgwMCwgMHhiYn0sCiAJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAogCXsweDI0LCAweDgwLCAweDAwLCAweGJifSwKQEAgLTEyNDksMTUgKzEzMzksMTUgQEAKIAl7MHg2NCwgMHg1ZSwgMHgxYywgMHhiYn0sCiAJe30KIH07Ci1zdGF0aWMgY29uc3QgX191OCBwbzMxMzBfZ2FtbWFbMTddID0geworc3RhdGljIGNvbnN0IHU4IHBvMzEzMF9nYW1tYVsxN10gPSB7CiAJMHgwMCwgMHgxMywgMHgzOCwgMHg1OSwgMHg3OSwgMHg5MiwgMHhhNywgMHhiOSwgMHhjOCwKIAkweGQ0LCAweGRmLCAweGU3LCAweGVlLCAweGY0LCAweGY5LCAweGZjLCAweGZmCiB9Owotc3RhdGljIGNvbnN0IF9fdTggcG8zMTMwX21hdHJpeFs5XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBwbzMxMzBfbWF0cml4WzldID0gewogCTB4NWYsIDB4ZWMsIDB4ZjUsIDB4ZjEsIDB4NWEsIDB4ZjUsIDB4ZjEsIDB4ZWMsIDB4NjMKIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IHBvMzEzMF9pbml0VkdBX2RhdGFbXVs0XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBwbzMxMzBfaW5pdFZHQV9kYXRhW11bNF0gPSB7CiAJezB4YjAsIDB4NGQsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgwMSwgMHgwMSwgMHhjY30sCiAJezB4MDAsIDB4MDAsIDB4NTAsIDB4ZGR9LAl7MHhiMCwgMHgwMywgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDAsIDB4MDQsIDB4Y2N9LAl7MHhiMywgMHgwMCwgMHgyNCwgMHhjY30sCkBAIC0xMzQwLDcgKzE0MzAsNyBAQAogCXsweGIzLCAweDVjLCAweDAwLCAweGNjfSwJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IF9fdTggcG8zMTMwX3J1bmRhdGFbXVs0XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBwbzMxMzBfcnVuZGF0YVtdWzRdID0gewogCXsweDAwLCAweDQ3LCAweDQ1LCAweGFhfSwJezB4MDAsIDB4NDgsIDB4OWIsIDB4YWF9LAogCXsweDAwLCAweDQ5LCAweDNhLCAweGFhfSwJezB4MDAsIDB4NGEsIDB4MDEsIDB4YWF9LAogCXsweDAwLCAweDQ0LCAweDQwLCAweGFhfSwKQEAgLTEzNTUsNyArMTQ0NSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IHBvMzEzMF9pbml0UVZHQV9kYXRhW11bNF0gPSB7CitzdGF0aWMgY29uc3QgdTggcG8zMTMwX2luaXRRVkdBX2RhdGFbXVs0XSA9IHsKIAl7MHhiMCwgMHg0ZCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKIAl7MHgwMCwgMHgwMCwgMHg1MCwgMHhkZH0sCXsweGIwLCAweDAzLCAweDA5LCAweGNjfSwKIAl7MHhiMywgMHgwMCwgMHgwNCwgMHhjY30sCXsweGIzLCAweDAwLCAweDI0LCAweGNjfSwKQEAgLTE0NDEsMTIxICsxNTMxLDIwNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBodjcxMzFyX2dhbW1hWzE3XSA9IHsKLS8qCTB4MDAsIDB4MTMsIDB4MzgsIDB4NTksIDB4NzksIDB4OTIsIDB4YTcsIDB4YjksIDB4YzgsCi0gKgkweGQ0LCAweGRmLCAweGU3LCAweGVlLCAweGY0LCAweGY5LCAweGZjLCAweGZmICovCi0JMHgwNCwgMHgxYSwgMHgzNiwgMHg1NSwgMHg2ZiwgMHg4NywgMHg5ZCwgMHhiMCwgMHhjMSwKLQkweGNmLCAweGRhLCAweGU0LCAweGVjLCAweGYzLCAweGY4LCAweGZkLCAweGZmCi19Owotc3RhdGljIGNvbnN0IF9fdTggaHY3MTMxcl9tYXRyaXhbOV0gPSB7Ci0JMHg1ZiwgMHhlYywgMHhmNSwgMHhmMSwgMHg1YSwgMHhmNSwgMHhmMSwgMHhlYywgMHg2MwotfTsKLXN0YXRpYyBjb25zdCBfX3U4IGh2NzEzMXJfaW5pdFZHQV9kYXRhW11bNF0gPSB7Ci0JezB4YjAsIDB4NGQsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgwMSwgMHgwMSwgMHhjY30sCi0JezB4MDAsIDB4MDAsIDB4NTAsIDB4ZGR9LAl7MHhiMCwgMHgwMywgMHgwMSwgMHhjY30sCi0JezB4YjMsIDB4MDAsIDB4MjQsIDB4Y2N9LAotCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAotCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAotCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKLQl7MHhiMywgMHgwMSwgMHg0NSwgMHhjY30sCXsweGIzLCAweDAzLCAweDBiLCAweGNjfSwKLQl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCi0JezB4YjMsIDB4MTQsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAotCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweDkxLCAweGNjfSwJezB4YjMsIDB4MDAsIDB4MjcsIDB4Y2N9LAotCXsweGJjLCAweDAwLCAweDczLCAweGNjfSwKLQl7MHhiOCwgMHgwMCwgMHgyMywgMHhjY30sCXsweDAwLCAweDAxLCAweDBjLCAweGFhfSwKLQl7MHgwMCwgMHgxNCwgMHgwMSwgMHhhYX0sCXsweDAwLCAweDE1LCAweGU2LCAweGFhfSwKLQl7MHgwMCwgMHgxNiwgMHgwMiwgMHhhYX0sCi0JezB4MDAsIDB4MTcsIDB4ODYsIDB4YWF9LAl7MHgwMCwgMHgyMywgMHgwMCwgMHhhYX0sCi0JezB4MDAsIDB4MjUsIDB4MDksIDB4YWF9LAl7MHgwMCwgMHgyNiwgMHgyNywgMHhhYX0sCi0JezB4MDAsIDB4MjcsIDB4YzAsIDB4YWF9LAotCXsweGI4LCAweDJjLCAweDYwLCAweGNjfSwJezB4YjgsIDB4MmQsIDB4ZjgsIDB4Y2N9LAotCXsweGI4LCAweDJlLCAweGY4LCAweGNjfSwJezB4YjgsIDB4MmYsIDB4ZjgsIDB4Y2N9LAotCXsweGI4LCAweDMwLCAweDUwLCAweGNjfSwKLQl7MHhiOCwgMHgzMSwgMHhmOCwgMHhjY30sCXsweGI4LCAweDMyLCAweGY4LCAweGNjfSwKLQl7MHhiOCwgMHgzMywgMHhmOCwgMHhjY30sCXsweGI4LCAweDM0LCAweDY1LCAweGNjfSwKLQl7MHhiOCwgMHgzNSwgMHgwMCwgMHhjY30sCi0JezB4YjgsIDB4MzYsIDB4MDAsIDB4Y2N9LAl7MHhiOCwgMHgzNywgMHgwMCwgMHhjY30sCi0JezB4YjgsIDB4MjcsIDB4MjAsIDB4Y2N9LAl7MHhiOCwgMHgwMSwgMHg3ZCwgMHhjY30sCi0JezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAotCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwJezB4YjgsIDB4ZmUsIDB4MDAsIDB4Y2N9LAotCXsweGI4LCAweGZmLCAweDI4LCAweGNjfSwJezB4YjksIDB4MDAsIDB4MjgsIDB4Y2N9LAotCXsweGI5LCAweDAxLCAweDI4LCAweGNjfSwKLQl7MHhiOSwgMHgwMiwgMHgyOCwgMHhjY30sCXsweGI5LCAweDAzLCAweDAwLCAweGNjfSwKLQl7MHhiOSwgMHgwNCwgMHgwMCwgMHhjY30sCXsweGI5LCAweDA1LCAweDNjLCAweGNjfSwKLQl7MHhiOSwgMHgwNiwgMHgzYywgMHhjY30sCi0JezB4YjksIDB4MDcsIDB4M2MsIDB4Y2N9LAl7MHhiOSwgMHgwOCwgMHgzYywgMHhjY30sCi0JezB4YjgsIDB4OGUsIDB4MDAsIDB4Y2N9LAl7MHhiOCwgMHg4ZiwgMHhmZiwgMHhjY30sCi0JezB4MDAsIDB4MzAsIDB4MTgsIDB4YWF9LAotCXt9Ci19OwotCi1zdGF0aWMgY29uc3QgX191OCBodjcxMzFyX2luaXRRVkdBX2RhdGFbXVs0XSA9IHsKLQl7MHhiMCwgMHg0ZCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKLQl7MHgwMCwgMHgwMCwgMHg1MCwgMHhkZH0sCXsweGIwLCAweDAzLCAweDAxLCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHgyNCwgMHhjY30sCi0JezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCi0JezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MDYsIDB4MDEsIDB4Y2N9LAotCXsweGIzLCAweDAzLCAweDBiLCAweGNjfSwJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAotCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAotCXsweGIzLCAweDIyLCAweDAxLCAweGNjfSwKLQl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCi0JezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgzNSwgMHg5MSwgMHhjY30sCi0JezB4YjMsIDB4MDAsIDB4MjcsIDB4Y2N9LAl7MHhiYywgMHgwMCwgMHhkMSwgMHhjY30sCi0JezB4YjgsIDB4MDAsIDB4MjEsIDB4Y2N9LAotCXsweDAwLCAweDAxLCAweDBjLCAweGFhfSwJezB4MDAsIDB4MTQsIDB4MDEsIDB4YWF9LAotCXsweDAwLCAweDE1LCAweGU2LCAweGFhfSwJezB4MDAsIDB4MTYsIDB4MDIsIDB4YWF9LAotCXsweDAwLCAweDE3LCAweDg2LCAweGFhfSwKLQl7MHgwMCwgMHgyMywgMHgwMCwgMHhhYX0sCXsweDAwLCAweDI1LCAweDAxLCAweGFhfSwKLQl7MHgwMCwgMHgyNiwgMHhkNCwgMHhhYX0sCXsweDAwLCAweDI3LCAweGMwLCAweGFhfSwKLQl7MHhiYywgMHgwMiwgMHgwOCwgMHhjY30sCi0JezB4YmMsIDB4MDMsIDB4NzAsIDB4Y2N9LAl7MHhiYywgMHgwNCwgMHgwOCwgMHhjY30sCi0JezB4YmMsIDB4MDUsIDB4MDAsIDB4Y2N9LAl7MHhiYywgMHgwNiwgMHgwMCwgMHhjY30sCi0JezB4YmMsIDB4MDgsIDB4M2MsIDB4Y2N9LAotCXsweGJjLCAweDA5LCAweDQwLCAweGNjfSwJezB4YmMsIDB4MGEsIDB4MDQsIDB4Y2N9LAotCXsweGJjLCAweDBiLCAweDAwLCAweGNjfSwJezB4YmMsIDB4MGMsIDB4MDAsIDB4Y2N9LAotCXsweGI4LCAweGZlLCAweDAyLCAweGNjfSwKLQl7MHhiOCwgMHhmZiwgMHgwNywgMHhjY30sCXsweGI5LCAweDAwLCAweDE0LCAweGNjfSwKLQl7MHhiOSwgMHgwMSwgMHgxNCwgMHhjY30sCXsweGI5LCAweDAyLCAweDE0LCAweGNjfSwKLQl7MHhiOSwgMHgwMywgMHgwMCwgMHhjY30sCi0JezB4YjksIDB4MDQsIDB4MDIsIDB4Y2N9LAl7MHhiOSwgMHgwNSwgMHgwNSwgMHhjY30sCi0JezB4YjksIDB4MDYsIDB4MGYsIDB4Y2N9LAl7MHhiOSwgMHgwNywgMHgwZiwgMHhjY30sCi0JezB4YjksIDB4MDgsIDB4MGYsIDB4Y2N9LAotCXsweGI4LCAweDJjLCAweDYwLCAweGNjfSwJezB4YjgsIDB4MmQsIDB4ZjgsIDB4Y2N9LAotCXsweGI4LCAweDJlLCAweGY4LCAweGNjfSwJezB4YjgsIDB4MmYsIDB4ZjgsIDB4Y2N9LAotCXsweGI4LCAweDMwLCAweDUwLCAweGNjfSwKLQl7MHhiOCwgMHgzMSwgMHhmOCwgMHhjY30sCXsweGI4LCAweDMyLCAweGY4LCAweGNjfSwKLQl7MHhiOCwgMHgzMywgMHhmOCwgMHhjY30sCi0JezB4YjgsIDB4MzQsIDB4NjUsIDB4Y2N9LAl7MHhiOCwgMHgzNSwgMHgwMCwgMHhjY30sCi0JezB4YjgsIDB4MzYsIDB4MDAsIDB4Y2N9LAl7MHhiOCwgMHgzNywgMHgwMCwgMHhjY30sCi0JezB4YjgsIDB4MjcsIDB4MjAsIDB4Y2N9LAotCXsweGI4LCAweDAxLCAweDdkLCAweGNjfSwJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAotCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwJezB4YjgsIDB4ZmUsIDB4MDAsIDB4Y2N9LAotCXsweGI4LCAweGZmLCAweDI4LCAweGNjfSwKLQl7MHhiOSwgMHgwMCwgMHgyOCwgMHhjY30sCXsweGI5LCAweDAxLCAweDI4LCAweGNjfSwKLQl7MHhiOSwgMHgwMiwgMHgyOCwgMHhjY30sCXsweGI5LCAweDAzLCAweDAwLCAweGNjfSwKLQl7MHhiOSwgMHgwNCwgMHgwMCwgMHhjY30sCi0JezB4YjksIDB4MDUsIDB4M2MsIDB4Y2N9LAl7MHhiOSwgMHgwNiwgMHgzYywgMHhjY30sCi0JezB4YjksIDB4MDcsIDB4M2MsIDB4Y2N9LAl7MHhiOSwgMHgwOCwgMHgzYywgMHhjY30sCi0JezB4YjgsIDB4OGUsIDB4MDAsIDB4Y2N9LAotCXsweGI4LCAweDhmLCAweGZmLCAweGNjfSwJezB4MDAsIDB4MzAsIDB4MTgsIDB4YWF9LAotCXt9Ci19OwotCi1zdGF0aWMgY29uc3QgX191OCBvdjc2NjBfZ2FtbWFbMTddID0geworc3RhdGljIGNvbnN0IHU4IGh2NzEzMXJfZ2FtbWFbMTddID0gewogCTB4MDAsIDB4MTMsIDB4MzgsIDB4NTksIDB4NzksIDB4OTIsIDB4YTcsIDB4YjksIDB4YzgsCiAJMHhkNCwgMHhkZiwgMHhlNywgMHhlZSwgMHhmNCwgMHhmOSwgMHhmYywgMHhmZgogfTsKLXN0YXRpYyBjb25zdCBfX3U4IG92NzY2MF9tYXRyaXhbOV0gPSB7CitzdGF0aWMgY29uc3QgdTggaHY3MTMxcl9tYXRyaXhbOV0gPSB7CisJMHg1ZiwgMHhlYywgMHhmNSwgMHhmMSwgMHg1YSwgMHhmNSwgMHhmMSwgMHhlYywgMHg2MworfTsKK3N0YXRpYyBjb25zdCB1OCBodjcxMzFyX2luaXRWR0FfZGF0YVtdWzRdID0geworCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDIwLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHgyNCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAorCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAzLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0NSwgMHhjY30sCisJezB4YjMsIDB4MDMsIDB4MGIsIDB4Y2N9LAorCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKKwl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIyLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCisJezB4YjMsIDB4MTQsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE1LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHg5MSwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjcsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweDczLCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgyMywgMHhjY30sCisJezB4YjgsIDB4MmMsIDB4NTAsIDB4Y2N9LAorCXsweGI4LCAweDJkLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgyZSwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MmYsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDMwLCAweDUwLCAweGNjfSwKKwl7MHhiOCwgMHgzMSwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MzIsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDMzLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzNCwgMHg1OCwgMHhjY30sCisJezB4YjgsIDB4MzUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM2LCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHgzNywgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MjcsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDAxLCAweDdkLCAweGNjfSwKKwl7MHhiOCwgMHg4MSwgMHgwOSwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweGI4LCAweDhlLCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHg4ZiwgMHhmZiwgMHhjY30sCisJezB4MDAsIDB4MDEsIDB4MGMsIDB4YWF9LAorCXsweDAwLCAweDE0LCAweDAxLCAweGFhfSwKKwl7MHgwMCwgMHgxNSwgMHhlNiwgMHhhYX0sCisJezB4MDAsIDB4MTYsIDB4MDIsIDB4YWF9LAorCXsweDAwLCAweDE3LCAweDg2LCAweGFhfSwKKwl7MHgwMCwgMHgyMywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4MjUsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweDI2LCAweGE5LCAweGFhfSwKKwl7MHgwMCwgMHgyNywgMHg4MCwgMHhhYX0sCisJezB4MDAsIDB4MzAsIDB4MTgsIDB4YWF9LAorCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwMywgMHgwMiwgMHhjY30sCisJezB4YjYsIDB4MDIsIDB4ODAsIDB4Y2N9LAorCXsweGI2LCAweDA1LCAweDAxLCAweGNjfSwKKwl7MHhiNiwgMHgwNCwgMHhlMCwgMHhjY30sCisJezB4YjYsIDB4MTIsIDB4NzgsIDB4Y2N9LAorCXsweGI2LCAweDE4LCAweDAyLCAweGNjfSwKKwl7MHhiNiwgMHgxNywgMHg1OCwgMHhjY30sCisJezB4YjYsIDB4MTYsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKKwl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDIsIDB4Y2N9LAorCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MTAsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgxMywgMHhjY30sCisJezB4YjksIDB4MTIsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDEzLCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxNCwgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTUsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE2LCAweDBhLCAweGNjfSwKKwl7MHhiOCwgMHgwYywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MGQsIDB4NzAsIDB4Y2N9LAorCXsweGI5LCAweDE4LCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgxOSwgMHgwZiwgMHhjY30sCisJezB4YjksIDB4MWEsIDB4MGYsIDB4Y2N9LAorCXsweGI5LCAweDFiLCAweDBmLCAweGNjfSwKKwl7MHhiOSwgMHgxYywgMHgwZiwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3QgdTggaHY3MTMxcl9pbml0UVZHQV9kYXRhW11bNF0gPSB7CisJezB4YjMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwKKwl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDI0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDMsIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQ1LCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYiwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweDkxLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNywgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4ZDMsIDB4Y2N9LAorCXsweGI4LCAweDAwLCAweDIzLCAweGNjfSwKKwl7MHhiOCwgMHgyYywgMHg1MCwgMHhjY30sCisJezB4YjgsIDB4MmQsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgyZiwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MzAsIDB4NTAsIDB4Y2N9LAorCXsweGI4LCAweDMxLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMiwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MzMsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDM0LCAweDU4LCAweGNjfSwKKwl7MHhiOCwgMHgzNSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MzYsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM3LCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHgyNywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MDEsIDB4N2QsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4YjgsIDB4OGUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDhmLCAweGZmLCAweGNjfSwKKwl7MHgwMCwgMHgwMSwgMHgwYywgMHhhYX0sCisJezB4MDAsIDB4MTQsIDB4MDEsIDB4YWF9LAorCXsweDAwLCAweDE1LCAweGU2LCAweGFhfSwKKwl7MHgwMCwgMHgxNiwgMHgwMiwgMHhhYX0sCisJezB4MDAsIDB4MTcsIDB4ODYsIDB4YWF9LAorCXsweDAwLCAweDIzLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHgyNSwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4MjYsIDB4YTksIDB4YWF9LAorCXsweDAwLCAweDI3LCAweDgwLCAweGFhfSwKKwl7MHgwMCwgMHgzMCwgMHgxOCwgMHhhYX0sCisJezB4YjYsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDAzLCAweDAxLCAweGNjfSwKKwl7MHhiNiwgMHgwMiwgMHg0MCwgMHhjY30sCisJezB4YjYsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDA0LCAweGYwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHg3OCwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDk2LCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4YzAsIDB4MzksIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDA0LCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgxMCwgMHhjY30sCisJezB4YmMsIDB4MDIsIDB4MTgsIDB4Y2N9LAorCXsweGJjLCAweDAzLCAweDUwLCAweGNjfSwKKwl7MHhiYywgMHgwNCwgMHgxOCwgMHhjY30sCisJezB4YmMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDA2LCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwOCwgMHgzMCwgMHhjY30sCisJezB4YmMsIDB4MDksIDB4NDAsIDB4Y2N9LAorCXsweGJjLCAweDBhLCAweDEwLCAweGNjfSwKKwl7MHhiYywgMHgwYiwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MGMsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDEyLCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgxMywgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTQsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE1LCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxNiwgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTgsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDE5LCAweDBmLCAweGNjfSwKKwl7MHhiOCwgMHgwYywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MGQsIDB4NzAsIDB4Y2N9LAorCXsweGI5LCAweDFhLCAweDBmLCAweGNjfSwKKwl7MHhiOSwgMHgxYiwgMHgwZiwgMHhjY30sCisJezB4YjksIDB4MWMsIDB4MGYsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgxMywgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXt9Cit9OworCitzdGF0aWMgY29uc3QgdTggb3Y3NjYwX2dhbW1hWzE3XSA9IHsKKwkweDAwLCAweDEzLCAweDM4LCAweDU5LCAweDc5LCAweDkyLCAweGE3LCAweGI5LCAweGM4LAorCTB4ZDQsIDB4ZGYsIDB4ZTcsIDB4ZWUsIDB4ZjQsIDB4ZjksIDB4ZmMsIDB4ZmYKK307CitzdGF0aWMgY29uc3QgdTggb3Y3NjYwX21hdHJpeFs5XSA9IHsKIAkweDVhLCAweGYwLCAweGY2LCAweGYzLCAweDU3LCAweGY2LCAweGYzLCAweGVmLCAweDYyCiB9Owotc3RhdGljIGNvbnN0IF9fdTggb3Y3NjYwX2luaXRWR0FfZGF0YVtdWzRdID0geworc3RhdGljIGNvbnN0IHU4IG92NzY2MF9pbml0VkdBX2RhdGFbXVs0XSA9IHsKIAl7MHhiMCwgMHg0ZCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKIAl7MHgwMCwgMHgwMCwgMHg1MCwgMHhkZH0sCiAJezB4YjAsIDB4MDMsIDB4MDEsIDB4Y2N9LApAQCAtMTYxMyw3ICsxNzg5LDcgQEAKIAl7MHgwMCwgMHgyOSwgMHgzYywgMHhhYX0sCXsweGIzLCAweDAxLCAweDQ1LCAweGNjfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBfX3U4IG92NzY2MF9pbml0UVZHQV9kYXRhW11bNF0gPSB7CitzdGF0aWMgY29uc3QgdTggb3Y3NjYwX2luaXRRVkdBX2RhdGFbXVs0XSA9IHsKIAl7MHhiMCwgMHg0ZCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKIAl7MHgwMCwgMHgwMCwgMHg1MCwgMHhkZH0sCXsweGIwLCAweDAzLCAweDAxLCAweGNjfSwKIAl7MHhiMywgMHgwMCwgMHgyMSwgMHhjY30sCXsweGIzLCAweDAwLCAweDI2LCAweGNjfSwKQEAgLTE2ODIsMjYgKzE4NTgsMjYgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IF9fdTggb3Y3NjYwXzUwSFpbXVs0XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBvdjc2NjBfNTBIWltdWzRdID0gewogCXsweDAwLCAweDNiLCAweDA4LCAweGFhfSwKIAl7MHgwMCwgMHg5ZCwgMHg0MCwgMHhhYX0sCiAJezB4MDAsIDB4MTMsIDB4YTcsIDB4YWF9LAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBvdjc2NjBfNjBIWltdWzRdID0geworc3RhdGljIGNvbnN0IHU4IG92NzY2MF82MEhaW11bNF0gPSB7CiAJezB4MDAsIDB4M2IsIDB4MDAsIDB4YWF9LAogCXsweDAwLCAweDllLCAweDQwLCAweGFhfSwKIAl7MHgwMCwgMHgxMywgMHhhNywgMHhhYX0sCiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IG92NzY2MF9Ob0ZsaWtlcltdWzRdID0geworc3RhdGljIGNvbnN0IHU4IG92NzY2MF9Ob0ZsaWtlcltdWzRdID0gewogCXsweDAwLCAweDEzLCAweDg3LCAweGFhfSwKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IF9fdTggb3Y3NjcwX2luaXRWR0FfSlBHW11bNF0gPSB7CitzdGF0aWMgY29uc3QgdTggb3Y3NjcwX2luaXRWR0FfSlBHW11bNF0gPSB7CiAJezB4YjMsIDB4MDEsIDB4MDUsIDB4Y2N9LAogCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAogCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKQEAgLTE4MzEsNyArMjAwNyw3IEBACiAJe30sCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBvdjc2NzBfaW5pdFFWR0FfSlBHW11bNF0gPSB7CitzdGF0aWMgY29uc3QgdTggb3Y3NjcwX2luaXRRVkdBX0pQR1tdWzRdID0gewogCXsweGIzLCAweDAxLCAweDA1LCAweGNjfSwJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAogCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAogCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LApAQCAtMTk2NiwxNCArMjE0MiwxNCBAQAogfTsKIAogLyogUE8xMjAwIC0gdmFsdWVzIGZyb20gdXNidm0zMjYuaW5mIGFuZCBtcy13aW4gdHJhY2UgKi8KLXN0YXRpYyBjb25zdCBfX3U4IHBvMTIwMF9nYW1tYVsxN10gPSB7CitzdGF0aWMgY29uc3QgdTggcG8xMjAwX2dhbW1hWzE3XSA9IHsKIAkweDAwLCAweDEzLCAweDM4LCAweDU5LCAweDc5LCAweDkyLCAweGE3LCAweGI5LCAweGM4LAogCTB4ZDQsIDB4ZGYsIDB4ZTcsIDB4ZWUsIDB4ZjQsIDB4ZjksIDB4ZmMsIDB4ZmYKIH07Ci1zdGF0aWMgY29uc3QgX191OCBwbzEyMDBfbWF0cml4WzldID0geworc3RhdGljIGNvbnN0IHU4IHBvMTIwMF9tYXRyaXhbOV0gPSB7CiAJMHg2MCwgMHhmOSwgMHhlNSwgMHhlNywgMHg1MCwgMHgwNSwgMHhmMywgMHhlNiwgMHg1ZQogfTsKLXN0YXRpYyBjb25zdCBfX3U4IHBvMTIwMF9pbml0VkdBX2RhdGFbXVs0XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBwbzEyMDBfaW5pdFZHQV9kYXRhW11bNF0gPSB7CiAJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAkvKiByZXNldD8gKi8KIAl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCiAvKgl7MHgwMCwgMHgwMCwgMHgzMywgMHhkZH0sICovCkBAIC0yMjc2LDkgKzI0NTIsOSBAQAogCiAvKiByZWFkICdsZW4nIGJ5dGVzIGluIGdzcGNhX2Rldi0+dXNiX2J1ZiAqLwogc3RhdGljIHZvaWQgcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkgIF9fdTE2IHJlcSwKLQkJICBfX3UxNiBpbmRleCwKLQkJICBfX3UxNiBsZW4pCisJCSAgdTE2IHJlcSwKKwkJICB1MTYgaW5kZXgsCisJCSAgdTE2IGxlbikKIHsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtMjI5MCw5ICsyNDY2LDkgQEAKIH0KIAogc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKLQkJCSAgICBfX3UxNiByZXEsCi0JCQkgICAgX191MTYgdmFsdWUsCi0JCQkgICAgX191MTYgaW5kZXgpCisJCQkgICAgdTE2IHJlcSwKKwkJCSAgICB1MTYgdmFsdWUsCisJCQkgICAgdTE2IGluZGV4KQogewogCXVzYl9jb250cm9sX21zZyhkZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKQEAgLTIzNDIsMTEgKzI1MTgsMTggQEAKIAogc3RhdGljIGludCB2YzAzMnhfcHJvYmVfc2Vuc29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBpOwogCXUxNiB2YWx1ZTsKIAljb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gKnB0c2Vuc29yX2luZm87CiAKKy8qZml4bWU6IHNob3VsZCBhbHNvIGNoZWNrIHRoZSBvdGhlciBzZW5zb3IgKGJhY2sgbWkxMzIwX3NvYywgZnJvbnQgbWM1MDFjYikqLworCWlmIChzZC0+ZmxhZ3MgJiBGTF9TQU1TVU5HKSB7CisJCXJlZ193KGRldiwgMHhhMCwgMHgwMSwgMHhiMzAxKTsKKwkJcmVnX3coZGV2LCAweDg5LCAweGYwZmYsIDB4ZmZmZik7IC8qIHNlbGVjdCB0aGUgYmFjayBzZW5zb3IgKi8KKwl9CisKIAlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YmZjZiwgMSk7CiAJUERFQlVHKERfUFJPQkUsICJjaGVjayBzZW5zb3IgaGVhZGVyICUwMngiLCBnc3BjYV9kZXYtPnVzYl9idWZbMF0pOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNlbnNvcl9pbmZvX2RhdGEpOyBpKyspIHsKQEAgLTI0MDYsMTcgKzI1ODksMTcgQEAKIH0KIAogc3RhdGljIHZvaWQgcHV0X3RhYl90b19yZWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJY29uc3QgX191OCAqdGFiLCBfX3U4IHRhYnNpemUsIF9fdTE2IGFkZHIpCisJCQljb25zdCB1OCAqdGFiLCB1OCB0YWJzaXplLCB1MTYgYWRkcikKIHsKIAlpbnQgajsKLQlfX3UxNiBhZCA9IGFkZHI7CisJdTE2IGFkID0gYWRkcjsKIAogCWZvciAoaiA9IDA7IGogPCB0YWJzaXplOyBqKyspCiAJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCB0YWJbal0sIGFkKyspOwogfQogCiBzdGF0aWMgdm9pZCB1c2JfZXhjaGFuZ2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJY29uc3QgX191OCBkYXRhW11bNF0pCisJCQljb25zdCB1OCBkYXRhW11bNF0pCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBpID0gMDsKQEAgLTI0NjYsNyArMjY0OSw4IEBACiAJfTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQlzZC0+YnJpZGdlID0gaWQtPmRyaXZlcl9pbmZvOworCXNkLT5icmlkZ2UgPSBpZC0+ZHJpdmVyX2luZm8gPj4gODsKKwlzZC0+ZmxhZ3MgPSBpZC0+ZHJpdmVyX2luZm8gJiAweGZmOwogCXNlbnNvciA9IHZjMDMyeF9wcm9iZV9zZW5zb3IoZ3NwY2FfZGV2KTsKIAlzd2l0Y2ggKHNlbnNvcikgewogCWNhc2UgLTE6CkBAIC0yNTE5LDggKzI3MDMsNiBAQAogCQljYXNlIFNFTlNPUl9NSTEzMjBfU09DOgogCQkJY2FtLT5jYW1fbW9kZSA9IGJpX21vZGU7CiAJCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoYmlfbW9kZSk7Ci0JCQljYW0tPmlucHV0X2ZsYWdzID0gVjRMMl9JTl9TVF9WRkxJUCB8Ci0JCQkJCSAgIFY0TDJfSU5fU1RfSEZMSVA7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjNfbW9kZTsKQEAgLTI1MzIsMTQgKzI3MTQsMTQgQEAKIAogCXNkLT5oZmxpcCA9IEhGTElQX0RFRjsKIAlzZC0+dmZsaXAgPSBWRkxJUF9ERUY7Ci0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzY3MCkgewotCQlzZC0+aGZsaXAgPSAxOwotCQlzZC0+dmZsaXAgPSAxOwotCX0KKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NjcwKQorCQlzZC0+ZmxhZ3MgfD0gRkxfSEZMSVAgfCBGTF9WRkxJUDsKIAlzZC0+bGlnaHRmcmVxID0gRlJFUV9ERUY7CiAJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX09WNzY3MCkKIAkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IExJR0hURlJFUV9JRFgpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX01JMTMxMF9TT0M6CisJY2FzZSBTRU5TT1JfTUkxMzIwX1NPQzoKIAljYXNlIFNFTlNPUl9PVjc2NjA6CiAJY2FzZSBTRU5TT1JfT1Y3NjcwOgogCWNhc2UgU0VOU09SX1BPMTIwMDoKQEAgLTI1NjgsMzkgKzI3NTAsNTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogZm9yIE9WNzY2MCBhbmQgT1Y3NjcwIG9ubHkgKi8KKy8qIHNvbWUgc2Vuc29ycyBvbmx5ICovCiBzdGF0aWMgdm9pZCBzZXRodmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3U4IGRhdGE7CisJdTggZGF0YVsyXSwgaGZsaXAsIHZmbGlwOwogCisJaGZsaXAgPSBzZC0+aGZsaXA7CisJaWYgKHNkLT5mbGFncyAmIEZMX0hGTElQKQorCQloZmxpcCA9ICFoZmxpcDsKKwl2ZmxpcCA9IHNkLT52ZmxpcDsKKwlpZiAoc2QtPmZsYWdzICYgRkxfVkZMSVApCisJCXZmbGlwID0gIXZmbGlwOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX09WNzY2MDoKLQkJZGF0YSA9IDE7CisJY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKKwljYXNlIFNFTlNPUl9NSTEzMjBfU09DOgorCQlkYXRhWzBdID0gZGF0YVsxXSA9IDA7CQkvKiBzZWxlY3QgcGFnZSAwICovCisJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4ZjAsIGRhdGEsIDIpOworCQlkYXRhWzBdID0gc2QtPnNlbnNvciA9PSBTRU5TT1JfTUkxMzEwX1NPQyA/IDB4MDMgOiAweDAxOworCQlkYXRhWzFdID0gMHgwMiAqIGhmbGlwCisJCQl8IDB4MDEgKiB2ZmxpcDsKKwkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgyMCwgZGF0YSwgMik7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzY2MDoKIAljYXNlIFNFTlNPUl9PVjc2NzA6Ci0JCWRhdGEgPSA3OworCQlkYXRhWzBdID0gc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NjYwID8gMHgwMSA6IDB4MDc7CisJCWRhdGFbMF0gfD0gT1Y3NjYwX01WRlBfTUlSUk9SICogaGZsaXAKKwkJCXwgT1Y3NjYwX01WRlBfVkZMSVAgKiB2ZmxpcDsKKwkJaTJjX3dyaXRlKGdzcGNhX2RldiwgT1Y3NjYwX1JFR19NVkZQLCBkYXRhLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfUE8xMjAwOgotCQlkYXRhID0gMDsKLQkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMywgJmRhdGEsIDEpOwotCQlkYXRhID0gMHg4MCAqIHNkLT5oZmxpcAotCQkJfCAweDQwICogc2QtPnZmbGlwCisJCWRhdGFbMF0gPSAwOworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAzLCBkYXRhLCAxKTsKKwkJZGF0YVswXSA9IDB4ODAgKiBoZmxpcAorCQkJfCAweDQwICogdmZsaXAKIAkJCXwgMHgwNjsKLQkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgxZSwgJmRhdGEsIDEpOwotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDFlLCBkYXRhLCAxKTsKKwkJYnJlYWs7CiAJfQotCWRhdGEgfD0gT1Y3NjYwX01WRlBfTUlSUk9SICogc2QtPmhmbGlwCi0JCXwgT1Y3NjYwX01WRlBfVkZMSVAgKiBzZC0+dmZsaXA7Ci0JaTJjX3dyaXRlKGdzcGNhX2RldiwgT1Y3NjYwX1JFR19NVkZQLCAmZGF0YSwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldGxpZ2h0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXN0YXRpYyBjb25zdCBfX3U4ICgqb3Y3NjYwX2ZyZXFfdGJbM10pWzRdID0KKwlzdGF0aWMgY29uc3QgdTggKCpvdjc2NjBfZnJlcV90YlszXSlbNF0gPQogCQl7b3Y3NjYwX05vRmxpa2VyLCBvdjc2NjBfNTBIWiwgb3Y3NjYwXzYwSFp9OwogCiAJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX09WNzY2MCkKQEAgLTI2MTIsNyArMjgwNSw3IEBACiBzdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3U4IGRhdGE7CisJdTggZGF0YTsKIAogCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9QTzEyMDApCiAJCXJldHVybjsKQEAgLTI2MjUsOSArMjgxOCw5IEBACiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JY29uc3QgX191OCAoKmluaXQpWzRdOwotCWNvbnN0IF9fdTggKkdhbW1hVCA9IE5VTEw7Ci0JY29uc3QgX191OCAqTWF0cml4VCA9IE5VTEw7CisJY29uc3QgdTggKCppbml0KVs0XTsKKwljb25zdCB1OCAqR2FtbWFUID0gTlVMTDsKKwljb25zdCB1OCAqTWF0cml4VCA9IE5VTEw7CiAJaW50IG1vZGU7CiAJc3RhdGljIGNvbnN0IHU4ICgqbWkxMzIwX3NvY19pbml0W10pWzRdID0gewogCQltaTEzMjBfc29jX0luaXRTWEdBLApAQCAtMjYzNSw2ICsyODI4LDEzIEBACiAJCW1pMTMyMF9zb2NfSW5pdFFWR0EsCiAJfTsKIAorLypmaXhtZTogYmFjayBzZW5zb3Igb25seSovCisJaWYgKHNkLT5mbGFncyAmIEZMX1NBTVNVTkcpIHsKKwkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODksIDB4ZjBmZiwgMHhmZmZmKTsKKwkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTksIDB4ODM0OCwgMHgwMDBlKTsKKwkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTksIDB4MDAwMCwgMHgwMDFhKTsKKwl9CisKIAkvKiBBc3N1bWUgc3RhcnQgdXNlIHRoZSBnb29kIHJlc29sdXRpb24gZnJvbSBnc3BjYV9kZXYtPm1vZGUgKi8KIAlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfVkMwMzIxKSB7CiAJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZmLCAweGJmZWMpOwpAQCAtMjczNywxNiArMjkzNywyMiBAQAogCQlwdXRfdGFiX3RvX3JlZyhnc3BjYV9kZXYsIE1hdHJpeFQsIDksIDB4YjgyYyk7CiAKIAkJLyogc2V0IHRoZSBsZWQgb24gMHgwODkyIDB4MDg5NiAqLwotCQlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfUE8xMjAwKSB7Ci0JCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4OSwgMHhmZmZmLCAweGZkZmYpOwotCQkJbXNsZWVwKDEwMCk7Ci0JCQlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKLQkJCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOwotCQl9IGVsc2UgewotCQkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7Ci0JCQlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKKwkJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJCWNhc2UgU0VOU09SX1BPMTIwMDoKKwkJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweDA0MDAsIDB4MTQxNSk7CisJCQlicmVhazsKKwkJY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKKwkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweDA1OGMsIDB4MDAwMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweGZmZmYsIDB4ZmRmZik7CisJCQlicmVhazsKIAkJfQorCQltc2xlZXAoMTAwKTsKKwkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CisJCXNldGh2ZmxpcChnc3BjYV9kZXYpOworCQlzZXRsaWdodGZyZXEoZ3NwY2FfZGV2KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNzU0LDggKzI5NjAsMTIgQEAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX01JMTMxMF9TT0MpCisJCXJlZ193KGRldiwgMHg4OSwgMHgwNThjLCAweDAwZmYpOworCWVsc2UKKwkJcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7CiAJcmVnX3coZGV2LCAweGEwLCAweDAxLCAweGIzMDEpOwogCXJlZ193KGRldiwgMHhhMCwgMHgwOSwgMHhiMDAzKTsKIH0KQEAgLTI3NjQsMTUgKzI5NzQsMjAgQEAKIHN0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCiAJCXJldHVybjsKLQlyZWdfdyhkZXYsIDB4ODksIDB4ZmZmZiwgMHhmZmZmKTsKKy8qZml4bWU6IGlzIHRoaXMgdXNlZnVsPyovCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX01JMTMxMF9TT0MpCisJCXJlZ193KGRldiwgMHg4OSwgMHgwNThjLCAweDAwZmYpOworCWVsc2UKKwkJcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCS8qIHRhcmdldCAqLwotCQkJX191OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLworCQkJdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KIAkJCWludCBsZW4pCQkJLyogaXNvIHBrdCBsZW5ndGggKi8KIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0yODcyLDIxICszMDg3LDEyIEBACiBzdGF0aWMgaW50IHNkX3F1ZXJ5bWVudShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKm1lbnUpCiB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmZyZXFfbm1bM10gPSB7Ik5vRmxpa2VyIiwgIjUwIEh6IiwgIjYwIEh6In07CisKIAlzd2l0Y2ggKG1lbnUtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWToKLQkJc3dpdGNoIChtZW51LT5pbmRleCkgewotCQljYXNlIDA6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9ESVNBQkxFRCAqLwotCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICJOb0ZsaWtlciIpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgMToJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzUwSFogKi8KLQkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNTAgSHoiKTsKLQkJCXJldHVybiAwOwotCQlkZWZhdWx0OgotLyoJCWNhc2UgMjoJCSAqIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KLQkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNjAgSHoiKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWJyZWFrOworCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgZnJlcV9ubVttZW51LT5pbmRleF0pOworCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yOTA2LDE5ICszMTEyLDIzIEBACiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KKyNkZWZpbmUgQkYoYnJpZGdlLCBmbGFncykgXAorCS5kcml2ZXJfaW5mbyA9IChCUklER0VfICMjIGJyaWRnZSA8PCA4KSBcCisJCXwgKGZsYWdzKQogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7Ci0Je1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNWIpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIzfSwKLQl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg5MiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjF9LAotCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwODk2KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyMX0sCi0Je1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4OTcpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIxfSwKLQl7VVNCX0RFVklDRSgweDBhYzgsIDB4MDMyMSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjF9LAotCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgwMzIzKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyM30sCi0Je1VTQl9ERVZJQ0UoMHgwYWM4LCAweDAzMjgpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIxfSwKLQl7VVNCX0RFVklDRSgweDBhYzgsIDB4YzAwMSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjF9LAotCXtVU0JfREVWSUNFKDB4MGFjOCwgMHhjMDAyKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyMX0sCi0Je1VTQl9ERVZJQ0UoMHgxNWI4LCAweDYwMDEpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIzfSwKLQl7VVNCX0RFVklDRSgweDE1YjgsIDB4NjAwMiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjN9LAotCXtVU0JfREVWSUNFKDB4MTdlZiwgMHg0ODAyKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyM30sCisJe1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwNWIpLCBCRihWQzAzMjMsIEZMX1ZGTElQKX0sCisJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4OTIpLCBCRihWQzAzMjEsIDApfSwKKwl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg5NiksIEJGKFZDMDMyMSwgMCl9LAorCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwODk3KSwgQkYoVkMwMzIxLCAwKX0sCisJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDAzMjEpLCBCRihWQzAzMjEsIDApfSwKKwl7VVNCX0RFVklDRSgweDBhYzgsIDB4MDMyMyksIEJGKFZDMDMyMywgMCl9LAorCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgwMzI4KSwgQkYoVkMwMzIxLCAwKX0sCisJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweGMwMDEpLCBCRihWQzAzMjEsIDApfSwKKwl7VVNCX0RFVklDRSgweDBhYzgsIDB4YzAwMiksIEJGKFZDMDMyMSwgMCl9LAorCXtVU0JfREVWSUNFKDB4MGFjOCwgMHhjMzAxKSwgQkYoVkMwMzIzLCBGTF9TQU1TVU5HKX0sCisJe1VTQl9ERVZJQ0UoMHgxNWI4LCAweDYwMDEpLCBCRihWQzAzMjMsIDApfSwKKwl7VVNCX0RFVklDRSgweDE1YjgsIDB4NjAwMiksIEJGKFZDMDMyMywgMCl9LAorCXtVU0JfREVWSUNFKDB4MTdlZiwgMHg0ODAyKSwgQkYoVkMwMzIzLCAwKX0sCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYwppbmRleCAzZDI3NTZmLi5jZGYzMzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCkBAIC03NTc0LDcgKzc1NzQsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgPSBzZF9jdHJscywKLQkubmN0cmxzID0gc2l6ZW9mIHNkX2N0cmxzIC8gc2l6ZW9mIHNkX2N0cmxzWzBdLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKIAkuY29uZmlnID0gc2RfY29uZmlnLAogCS5pbml0ID0gc2RfaW5pdCwKIAkuc3RhcnQgPSBzZF9zdGFydCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29udHJvbC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb250cm9sLmMKaW5kZXggMDY3OTE3NC4uNWE2Yjc4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb250cm9sLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb250cm9sLmMKQEAgLTE3OCwyNCArMTc4LDI0IEBACiAKIGludCBoZHB2cl9zZXRfb3B0aW9ucyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCiB7Ci0gICAgICAgaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX1ZJREVPX1NURF9UWVBFLCBkZXYtPm9wdGlvbnMudmlkZW9fc3RkKTsKKwloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfVklERU9fU1REX1RZUEUsIGRldi0+b3B0aW9ucy52aWRlb19zdGQpOwogCi0gICAgICAgaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX1ZJREVPX0lOUFVUX1ZBTFVFLAorCWhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9WSURFT19JTlBVVF9WQUxVRSwKIAkJCSBkZXYtPm9wdGlvbnMudmlkZW9faW5wdXQrMSk7CiAKLSAgICAgICBoZHB2cl9zZXRfYXVkaW8oZGV2LCBkZXYtPm9wdGlvbnMuYXVkaW9faW5wdXQrMSwKKwloZHB2cl9zZXRfYXVkaW8oZGV2LCBkZXYtPm9wdGlvbnMuYXVkaW9faW5wdXQrMSwKIAkJICAgICAgIGRldi0+b3B0aW9ucy5hdWRpb19jb2RlYyk7CiAKLSAgICAgICBoZHB2cl9zZXRfYml0cmF0ZShkZXYpOwotICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9CSVRSQVRFX01PREVfVkFMVUUsCisJaGRwdnJfc2V0X2JpdHJhdGUoZGV2KTsKKwloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQklUUkFURV9NT0RFX1ZBTFVFLAogCQkJIGRldi0+b3B0aW9ucy5iaXRyYXRlX21vZGUpOwotICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9HT1BfTU9ERV9WQUxVRSwgZGV2LT5vcHRpb25zLmdvcF9tb2RlKTsKKwloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfR09QX01PREVfVkFMVUUsIGRldi0+b3B0aW9ucy5nb3BfbW9kZSk7CiAKLSAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQlJJR0hUTkVTUywgZGV2LT5vcHRpb25zLmJyaWdodG5lc3MpOwotICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9DT05UUkFTVCwgICBkZXYtPm9wdGlvbnMuY29udHJhc3QpOwotICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9IVUUsICAgICAgICBkZXYtPm9wdGlvbnMuaHVlKTsKLSAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfU0FUVVJBVElPTiwgZGV2LT5vcHRpb25zLnNhdHVyYXRpb24pOwotICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9TSEFSUE5FU1MsICBkZXYtPm9wdGlvbnMuc2hhcnBuZXNzKTsKKwloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQlJJR0hUTkVTUywgZGV2LT5vcHRpb25zLmJyaWdodG5lc3MpOworCWhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9DT05UUkFTVCwgICBkZXYtPm9wdGlvbnMuY29udHJhc3QpOworCWhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9IVUUsICAgICAgICBkZXYtPm9wdGlvbnMuaHVlKTsKKwloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfU0FUVVJBVElPTiwgZGV2LT5vcHRpb25zLnNhdHVyYXRpb24pOworCWhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9TSEFSUE5FU1MsICBkZXYtPm9wdGlvbnMuc2hhcnBuZXNzKTsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwppbmRleCAxODhiZDVhLi4xYzliYzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJY2hhciAqcHJpbnRfYnVmID0ga3phbGxvYyg1KmJ1Zl9zaXplKzEsIEdGUF9LRVJORUwpOwogCWlmICghcHJpbnRfYnVmKSB7CiAJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7Ci0JCWdvdG8gZXJyb3I7CisJCXJldHVybiByZXR2YWw7CiAJfQogI2VuZGlmCiAKQEAgLTE0MCw3ICsxNDAsNyBAQAogCWlmIChyZXQgIT0gNDYpIHsKIAkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsCiAJCQkgInVuZXhwZWN0ZWQgYW5zd2VyIG9mIHN0YXR1cyByZXF1ZXN0LCBsZW4gJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyb3I7CisJCWdvdG8gdW5sb2NrOwogCX0KICNpZmRlZiBIRFBWUl9ERUJVRwogCWVsc2UgewpAQCAtMTYzLDcgKzE2Myw3IEBACiAJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAidW5rbm93biBmaXJtd2FyZSB2ZXJzaW9uIDB4JXhcbiIsCiAJCQlkZXYtPnVzYmNfYnVmWzFdKTsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKKwkJZ290byB1bmxvY2s7CiAJfQogCiAJcmVzcG9uc2UgPSBkZXYtPnVzYmNfYnVmKzM4OwpAQCAtMTg4LDEwICsxODgsMTAgQEAKIAkJCSAgICAgIDEwMDAwKTsKIAl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAogCQkgIm1hZ2ljIHJlcXVlc3QgcmV0dXJuZWQgJWRcbiIsIHJldCk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOwogCiAJcmV0dmFsID0gcmV0ICE9IDg7Ci1lcnJvcjoKK3VubG9jazoKKwltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMzUwLDYgKzM1MCw3IEBACiAKIAltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKIAlpZiAoaGRwdnJfYWxsb2NfYnVmZmVycyhkZXYsIE5VTV9CVUZGRVJTKSkgeworCQltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOwogCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwKIAkJCSAiYWxsb2NhdGluZyB0cmFuc2ZlciBidWZmZXJzIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CkBAIC0zODEsNyArMzgyLDYgQEAKIAogZXJyb3I6CiAJaWYgKGRldikgewotCQltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOwogCQkvKiB0aGlzIGZyZWVzIGFsbG9jYXRlZCBtZW1vcnkgKi8KIAkJaGRwdnJfZGVsZXRlKGRldik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKaW5kZXggYzRiNWQxNS4uMjk2MzMwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYwpAQCAtMTI3LDcgKzEyNyw2IEBACiAJCXNpemVvZihpMmNfYWRhcC0+bmFtZSkpOwogCWkyY19hZGFwLT5hbGdvICA9ICZoZHB2cl9hbGdvOwogCWkyY19hZGFwLT5jbGFzcyA9IEkyQ19DTEFTU19UVl9BTkFMT0c7Ci0JaTJjX2FkYXAtPmlkICAgID0gSTJDX0hXX0JfSERQVlI7CiAJaTJjX2FkYXAtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJaTJjX2FkYXAtPmRldi5wYXJlbnQgPSAmZGV2LT51ZGV2LT5kZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYwppbmRleCBkNjc4NzY1Li4yZWI5ZGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jCkBAIC0zNzUsNiArMzc1LDcgQEAKIAkgKiBpbiByZXN1bXB0aW9uICovCiAJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CiAJZGV2LT5vcGVuX2NvdW50Kys7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKIAogCWZoLT5kZXYgPSBkZXY7CiAKQEAgLTM4Myw3ICszODQsNiBAQAogCiAJcmV0dmFsID0gMDsKIGVycjoKLQltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTUxOSw4ICs1MTksMTAgQEAKIAogCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOwogCi0JaWYgKHZpZGVvX2lzX3VucmVnaXN0ZXJlZChkZXYtPnZpZGVvX2RldikpCisJaWYgKHZpZGVvX2lzX3VucmVnaXN0ZXJlZChkZXYtPnZpZGVvX2RldikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKIAkJcmV0dXJuIC1FSU87CisJfQogCiAJaWYgKGRldi0+c3RhdHVzID09IFNUQVRVU19JRExFKSB7CiAJCWlmIChoZHB2cl9zdGFydF9zdHJlYW1pbmcoZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwppbmRleCA4NmYyZmVmLi4yNDdkMzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwpAQCAtMTIyLDEyICsxMjIsMTIgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZ2V0X2tleV9oYXVwKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCitzdGF0aWMgaW50IGdldF9rZXlfaGF1cChzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQogewogCXJldHVybiBnZXRfa2V5X2hhdXBfY29tbW9uIChpciwgaXJfa2V5LCBpcl9yYXcsIDMsIDApOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBnZXRfa2V5X2hhdXBfeHZyKHN0cnVjdCBJUl9pMmMgKmlyLCB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCitzdGF0aWMgaW50IGdldF9rZXlfaGF1cF94dnIoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKIHsKIAlyZXR1cm4gZ2V0X2tleV9oYXVwX2NvbW1vbiAoaXIsIGlyX2tleSwgaXJfcmF3LCA2LCAzKTsKIH0KQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiBzdGF0aWMgaW50IGlyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlJUl9LRVlUQUJfVFlQRSAqaXJfY29kZXMgPSBOVUxMOworCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXMgPSBOVUxMOwogCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOwogCWludCBpcl90eXBlOwogCXN0cnVjdCBJUl9pMmMgKmlyOwpAQCAtMzIyLDEzICszMjIsMTMgQEAKIAkJbmFtZSAgICAgICAgPSAiUGl4ZWx2aWV3IjsKIAkJaXItPmdldF9rZXkgPSBnZXRfa2V5X3BpeGVsdmlldzsKIAkJaXJfdHlwZSAgICAgPSBJUl9UWVBFX09USEVSOwotCQlpcl9jb2RlcyAgICA9IGlyX2NvZGVzX2VtcHR5OworCQlpcl9jb2RlcyAgICA9ICZpcl9jb2Rlc19lbXB0eV90YWJsZTsKIAkJYnJlYWs7CiAJY2FzZSAweDRiOgogCQluYW1lICAgICAgICA9ICJQVjk1MSI7CiAJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV9wdjk1MTsKIAkJaXJfdHlwZSAgICAgPSBJUl9UWVBFX09USEVSOwotCQlpcl9jb2RlcyAgICA9IGlyX2NvZGVzX3B2OTUxOworCQlpcl9jb2RlcyAgICA9ICZpcl9jb2Rlc19wdjk1MV90YWJsZTsKIAkJYnJlYWs7CiAJY2FzZSAweDE4OgogCWNhc2UgMHgxYToKQEAgLTMzNiwzNiArMzM2LDM4IEBACiAJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV9oYXVwOwogCQlpcl90eXBlICAgICA9IElSX1RZUEVfUkM1OwogCQlpZiAoaGF1cHBhdWdlID09IDEpIHsKLQkJCWlyX2NvZGVzICAgID0gaXJfY29kZXNfaGF1cHBhdWdlX25ldzsKKwkJCWlyX2NvZGVzICAgID0gJmlyX2NvZGVzX2hhdXBwYXVnZV9uZXdfdGFibGU7CiAJCX0gZWxzZSB7Ci0JCQlpcl9jb2RlcyAgICA9IGlyX2NvZGVzX3JjNV90djsKKwkJCWlyX2NvZGVzICAgID0gJmlyX2NvZGVzX3JjNV90dl90YWJsZTsKIAkJfQogCQlicmVhazsKIAljYXNlIDB4MzA6CiAJCW5hbWUgICAgICAgID0gIktOQyBPbmUiOwogCQlpci0+Z2V0X2tleSA9IGdldF9rZXlfa25jMTsKIAkJaXJfdHlwZSAgICAgPSBJUl9UWVBFX09USEVSOwotCQlpcl9jb2RlcyAgICA9IGlyX2NvZGVzX2VtcHR5OworCQlpcl9jb2RlcyAgICA9ICZpcl9jb2Rlc19lbXB0eV90YWJsZTsKIAkJYnJlYWs7CiAJY2FzZSAweDZiOgogCQluYW1lICAgICAgICA9ICJGdXNpb25IRFRWIjsKIAkJaXItPmdldF9rZXkgPSBnZXRfa2V5X2Z1c2lvbmhkdHY7CiAJCWlyX3R5cGUgICAgID0gSVJfVFlQRV9SQzU7Ci0JCWlyX2NvZGVzICAgID0gaXJfY29kZXNfZnVzaW9uaGR0dl9tY2U7CisJCWlyX2NvZGVzICAgID0gJmlyX2NvZGVzX2Z1c2lvbmhkdHZfbWNlX3RhYmxlOwogCQlicmVhazsKIAljYXNlIDB4N2E6CiAJY2FzZSAweDQ3OgogCWNhc2UgMHg3MToKIAljYXNlIDB4MmQ6Ci0JCWlmIChhZGFwLT5pZCA9PSBJMkNfSFdfQl9DWDIzODh4KSB7CisJCWlmIChhZGFwLT5pZCA9PSBJMkNfSFdfQl9DWDIzODh4IHx8CisJCSAgICBhZGFwLT5pZCA9PSBJMkNfSFdfQl9DWDIzNDFYKSB7CiAJCQkvKiBIYW5kbGVkIGJ5IGN4ODgtaW5wdXQgKi8KLQkJCW5hbWUgICAgICAgID0gIkNYMjM4OHggcmVtb3RlIjsKKwkJCW5hbWUgPSBhZGFwLT5pZCA9PSBJMkNfSFdfQl9DWDIzNDFYID8gIkNYMjM0MXggcmVtb3RlIgorCQkJCQkJCSAgICA6ICJDWDIzODh4IHJlbW90ZSI7CiAJCQlpcl90eXBlICAgICA9IElSX1RZUEVfUkM1OwogCQkJaXItPmdldF9rZXkgPSBnZXRfa2V5X2hhdXBfeHZyOwogCQkJaWYgKGhhdXBwYXVnZSA9PSAxKSB7Ci0JCQkJaXJfY29kZXMgICAgPSBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3OworCQkJCWlyX2NvZGVzICAgID0gJmlyX2NvZGVzX2hhdXBwYXVnZV9uZXdfdGFibGU7CiAJCQl9IGVsc2UgewotCQkJCWlyX2NvZGVzICAgID0gaXJfY29kZXNfcmM1X3R2OworCQkJCWlyX2NvZGVzICAgID0gJmlyX2NvZGVzX3JjNV90dl90YWJsZTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIEhhbmRsZWQgYnkgc2FhNzEzNC1pbnB1dCAqLwpAQCAtMzc3LDcgKzM3OSw3IEBACiAJCW5hbWUgICAgICAgID0gIkFWZXJNZWRpYSBDYXJkYnVzIHJlbW90ZSI7CiAJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV9hdmVybWVkaWFfY2FyZGJ1czsKIAkJaXJfdHlwZSAgICAgPSBJUl9UWVBFX09USEVSOwotCQlpcl9jb2RlcyAgICA9IGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzOworCQlpcl9jb2RlcyAgICA9ICZpcl9jb2Rlc19hdmVybWVkaWFfY2FyZGJ1c190YWJsZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZHByaW50aygxLCBERVZOQU1FICI6IFVuc3VwcG9ydGVkIGkyYyBhZGRyZXNzIDB4JTAyeFxuIiwgYWRkcik7CkBAIC0zOTIsNyArMzk0LDM2IEBACiAKIAkJaXJfY29kZXMgPSBpbml0X2RhdGEtPmlyX2NvZGVzOwogCQluYW1lID0gaW5pdF9kYXRhLT5uYW1lOwotCQlpci0+Z2V0X2tleSA9IGluaXRfZGF0YS0+Z2V0X2tleTsKKwkJaWYgKGluaXRfZGF0YS0+dHlwZSkKKwkJCWlyX3R5cGUgPSBpbml0X2RhdGEtPnR5cGU7CisKKwkJc3dpdGNoIChpbml0X2RhdGEtPmludGVybmFsX2dldF9rZXlfZnVuYykgeworCQljYXNlIElSX0tCRF9HRVRfS0VZX0NVU1RPTToKKwkJCS8qIFRoZSBicmlkZ2UgZHJpdmVyIHByb3ZpZGVkIHVzIGl0cyBvd24gZnVuY3Rpb24gKi8KKwkJCWlyLT5nZXRfa2V5ID0gaW5pdF9kYXRhLT5nZXRfa2V5OworCQkJYnJlYWs7CisJCWNhc2UgSVJfS0JEX0dFVF9LRVlfUElYRUxWSUVXOgorCQkJaXItPmdldF9rZXkgPSBnZXRfa2V5X3BpeGVsdmlldzsKKwkJCWJyZWFrOworCQljYXNlIElSX0tCRF9HRVRfS0VZX1BWOTUxOgorCQkJaXItPmdldF9rZXkgPSBnZXRfa2V5X3B2OTUxOworCQkJYnJlYWs7CisJCWNhc2UgSVJfS0JEX0dFVF9LRVlfSEFVUDoKKwkJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV9oYXVwOworCQkJYnJlYWs7CisJCWNhc2UgSVJfS0JEX0dFVF9LRVlfS05DMToKKwkJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV9rbmMxOworCQkJYnJlYWs7CisJCWNhc2UgSVJfS0JEX0dFVF9LRVlfRlVTSU9OSERUVjoKKwkJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV9mdXNpb25oZHR2OworCQkJYnJlYWs7CisJCWNhc2UgSVJfS0JEX0dFVF9LRVlfSEFVUF9YVlI6CisJCQlpci0+Z2V0X2tleSA9IGdldF9rZXlfaGF1cF94dnI7CisJCQlicmVhazsKKwkJY2FzZSBJUl9LQkRfR0VUX0tFWV9BVkVSTUVESUFfQ0FSREJVUzoKKwkJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV9hdmVybWVkaWFfY2FyZGJ1czsKKwkJCWJyZWFrOworCQl9CiAJfQogCiAJLyogTWFrZSBzdXJlIHdlIGFyZSBhbGwgc2V0dXAgYmVmb3JlIGdvaW5nIG9uICovCkBAIC00NTQsNyArNDg1LDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBpcl9rYmRfaWRbXSA9IHsKIAkvKiBHZW5lcmljIGVudHJ5IGZvciBhbnkgSVIgcmVjZWl2ZXIgKi8KIAl7ICJpcl92aWRlbyIsIDAgfSwKLQkvKiBJUiBkZXZpY2Ugc3BlY2lmaWMgZW50cmllcyBjb3VsZCBiZSBhZGRlZCBoZXJlICovCisJLyogSVIgZGV2aWNlIHNwZWNpZmljIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkIGhlcmUgKi8KKwl7ICJpcl9yeF96OGYwODExX2hhdXAiLCAwIH0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYwppbmRleCAyODgzYzg3Li40ODczYjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmMKQEAgLTk3NywyNiArOTc3LDI3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyogQVZlck1lZGlhIFBWUi0xNTAgUGx1cyAoTTExMykgY2FyZCAqLworLyogQVZlck1lZGlhIFBWUi0xNTAgUGx1cyAvIEFWZXJUViBNMTEzIGNhcmRzIHdpdGggYSBEYWV3b28vUGFydHNuaWMgVHVuZXIgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpdnR2X2NhcmRfcGNpX2luZm8gaXZ0dl9wY2lfYXZlcl9wdnIxNTBbXSA9IHsKLQl7IFBDSV9ERVZJQ0VfSURfSVZUVjE2LCBJVlRWX1BDSV9JRF9BVkVSTUVESUEsIDB4YzAzNSB9LAorCXsgUENJX0RFVklDRV9JRF9JVlRWMTYsIElWVFZfUENJX0lEX0FWRVJNRURJQSwgMHhjMDM0IH0sIC8qIE5UU0MgKi8KKwl7IFBDSV9ERVZJQ0VfSURfSVZUVjE2LCBJVlRWX1BDSV9JRF9BVkVSTUVESUEsIDB4YzAzNSB9LCAvKiBOVFNDIEZNICovCiAJeyAwLCAwLCAwIH0KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXZ0dl9jYXJkIGl2dHZfY2FyZF9hdmVyX3B2cjE1MCA9IHsKIAkudHlwZSA9IElWVFZfQ0FSRF9BVkVSX1BWUjE1MFBMVVMsCi0JLm5hbWUgPSAiQVZlck1lZGlhIFBWUi0xNTAgUGx1cyIsCisJLm5hbWUgPSAiQVZlck1lZGlhIFBWUi0xNTAgUGx1cyAvIEFWZXJUViBNMTEzIFBhcnRzbmljIChEYWV3b28pIFR1bmVyIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBJVlRWX0NBUF9FTkNPREVSLAogCS5od192aWRlbyA9IElWVFZfSFdfQ1gyNTg0MCwKIAkuaHdfYXVkaW8gPSBJVlRWX0hXX0NYMjU4NDAsCiAJLmh3X2F1ZGlvX2N0cmwgPSBJVlRWX0hXX0NYMjU4NDAsCiAJLmh3X211eGVyID0gSVZUVl9IV19HUElPLAotCS5od19hbGwgPSBJVlRWX0hXX0NYMjU4NDAgfCBJVlRWX0hXX1RVTkVSLAorCS5od19hbGwgPSBJVlRWX0hXX0NYMjU4NDAgfCBJVlRWX0hXX1RVTkVSIHwKKwkJICBJVlRWX0hXX1dNODczOSB8IElWVFZfSFdfR1BJTywKIAkudmlkZW9faW5wdXRzID0gewogCQl7IElWVFZfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBDWDI1ODQwX0NPTVBPU0lURTIgfSwKLQkJeyBJVlRWX0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwKLQkJICBDWDI1ODQwX1NWSURFT19MVU1BMyB8IENYMjU4NDBfU1ZJREVPX0NIUk9NQTQgfSwKKwkJeyBJVlRWX0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwgQ1gyNTg0MF9TVklERU8zICAgIH0sCiAJCXsgSVZUVl9DQVJEX0lOUFVUX0NPTVBPU0lURTEsIDEsIENYMjU4NDBfQ09NUE9TSVRFMSB9LAogCX0sCiAJLmF1ZGlvX2lucHV0cyA9IHsKQEAgLTEwMDQsMTggKzEwMDUsNjYgQEAKIAkJeyBJVlRWX0NBUkRfSU5QVVRfTElORV9JTjEsICAgQ1gyNTg0MF9BVURJT19TRVJJQUwsIDEgfSwKIAl9LAogCS5yYWRpb19pbnB1dCA9IHsgSVZUVl9DQVJEX0lOUFVUX0FVRF9UVU5FUiwgQ1gyNTg0MF9BVURJT19TRVJJQUwsIDIgfSwKLQkuZ3Bpb19pbml0ID0geyAuZGlyZWN0aW9uID0gMHgwODAwLCAuaW5pdGlhbF92YWx1ZSA9IDAgfSwKLQkuZ3Bpb19hdWRpb19pbnB1dCAgPSB7IC5tYXNrID0gMHgwODAwLCAudHVuZXIgPSAwLCAubGluZWluID0gMCwgLnJhZGlvID0gMHgwODAwIH0sCisJLyogVGhlIDc0SEM0MDUyIER1YWwgNDoxIG11bHRpcGxleGVyIGlzIGNvbnRyb2xsZWQgYnkgMiBHUElPIGxpbmVzICovCisJLmdwaW9faW5pdCA9IHsgLmRpcmVjdGlvbiA9IDB4YzAwMCwgLmluaXRpYWxfdmFsdWUgPSAwIH0sCisJLmdwaW9fYXVkaW9faW5wdXQgID0geyAubWFzayAgID0gMHhjMDAwLAorCQkJICAgICAgIC50dW5lciAgPSAweDAwMDAsCisJCQkgICAgICAgLmxpbmVpbiA9IDB4NDAwMCwKKwkJCSAgICAgICAucmFkaW8gID0gMHg4MDAwIH0sCiAJLnR1bmVycyA9IHsKLQkJLyogVGhpcyBjYXJkIGhhcyBhIFBhcnRzbmljIFBUSS01TkYwNSB0dW5lciAqLwotCQl7IC5zdGQgPSBWNEwyX1NURF9NTiwgLnR1bmVyID0gVFVORVJfVENMXzIwMDJOIH0sCisJCS8qIFN1YnN5c3RlbSBJRCdzIDB4YzAzWzQ1XSBoYXZlIGEgUGFydHNuaWMgUFRJLTVORjA1IHR1bmVyICovCisJCXsgLnN0ZCA9IFY0TDJfU1REX01OLCAudHVuZXIgPSBUVU5FUl9QQVJUU05JQ19QVElfNU5GMDUgfSwKIAl9LAogCS5wY2lfbGlzdCA9IGl2dHZfcGNpX2F2ZXJfcHZyMTUwLAorCS8qIFN1YnN5c3RlbSBJRCAweGMwMzUgaGFzIGEgVEVBNTc2Nyg/KSBGTSB0dW5lciwgMHhjMDM0IGRvZXMgbm90ICovCiAJLmkyYyA9ICZpdnR2X2kyY19yYWRpbywKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorLyogQVZlck1lZGlhIFVsdHJhVFYgMTUwMCBNQ0UgKG5ld2VyIG5vbi1jeDg4IHZlcnNpb24sIE0xMTMgdmFyaWFudCkgY2FyZCAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGl2dHZfY2FyZF9wY2lfaW5mbyBpdnR2X3BjaV9hdmVyX3VsdHJhMTUwMG1jZVtdID0geworCXsgUENJX0RFVklDRV9JRF9JVlRWMTYsIElWVFZfUENJX0lEX0FWRVJNRURJQSwgMHhjMDE5IH0sCisJeyAwLCAwLCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXZ0dl9jYXJkIGl2dHZfY2FyZF9hdmVyX3VsdHJhMTUwMG1jZSA9IHsKKwkudHlwZSA9IElWVFZfQ0FSRF9BVkVSX1VMVFJBMTUwME1DRSwKKwkubmFtZSA9ICJBVmVyTWVkaWEgVWx0cmFUViAxNTAwIE1DRSAvIEFWZXJUViBNMTEzIFBoaWxpcHMgVHVuZXIiLAorCS52NGwyX2NhcGFiaWxpdGllcyA9IElWVFZfQ0FQX0VOQ09ERVIsCisJLmh3X3ZpZGVvID0gSVZUVl9IV19DWDI1ODQwLAorCS5od19hdWRpbyA9IElWVFZfSFdfQ1gyNTg0MCwKKwkuaHdfYXVkaW9fY3RybCA9IElWVFZfSFdfQ1gyNTg0MCwKKwkuaHdfbXV4ZXIgPSBJVlRWX0hXX0dQSU8sCisJLmh3X2FsbCA9IElWVFZfSFdfQ1gyNTg0MCB8IElWVFZfSFdfVFVORVIgfAorCQkgIElWVFZfSFdfV004NzM5IHwgSVZUVl9IV19HUElPLAorCS52aWRlb19pbnB1dHMgPSB7CisJCXsgSVZUVl9DQVJEX0lOUFVUX1ZJRF9UVU5FUiwgIDAsIENYMjU4NDBfQ09NUE9TSVRFMiB9LAorCQl7IElWVFZfQ0FSRF9JTlBVVF9TVklERU8xLCAgICAxLCBDWDI1ODQwX1NWSURFTzMgICAgfSwKKwkJeyBJVlRWX0NBUkRfSU5QVVRfQ09NUE9TSVRFMSwgMSwgQ1gyNTg0MF9DT01QT1NJVEUxIH0sCisJfSwKKwkuYXVkaW9faW5wdXRzID0geworCQl7IElWVFZfQ0FSRF9JTlBVVF9BVURfVFVORVIsICBDWDI1ODQwX0FVRElPNSwgICAgICAgMCB9LAorCQl7IElWVFZfQ0FSRF9JTlBVVF9MSU5FX0lOMSwgICBDWDI1ODQwX0FVRElPX1NFUklBTCwgMSB9LAorCX0sCisJLnJhZGlvX2lucHV0ID0geyBJVlRWX0NBUkRfSU5QVVRfQVVEX1RVTkVSLCBDWDI1ODQwX0FVRElPX1NFUklBTCwgMiB9LAorCS8qIFRoZSA3NEhDNDA1MiBEdWFsIDQ6MSBtdWx0aXBsZXhlciBpcyBjb250cm9sbGVkIGJ5IDIgR1BJTyBsaW5lcyAqLworCS5ncGlvX2luaXQgPSB7IC5kaXJlY3Rpb24gPSAweGMwMDAsIC5pbml0aWFsX3ZhbHVlID0gMCB9LAorCS5ncGlvX2F1ZGlvX2lucHV0ICA9IHsgLm1hc2sgICA9IDB4YzAwMCwKKwkJCSAgICAgICAudHVuZXIgID0gMHgwMDAwLAorCQkJICAgICAgIC5saW5laW4gPSAweDQwMDAsCisJCQkgICAgICAgLnJhZGlvICA9IDB4ODAwMCB9LAorCS50dW5lcnMgPSB7CisJCS8qIFRoZSBVbHRyYVRWIDE1MDAgTUNFIGhhcyBhIFBoaWxpcHMgRk0xMjM2IE1LNSBUVi9GTSB0dW5lciAqLworCQl7IC5zdGQgPSBWNEwyX1NURF9NTiwgLnR1bmVyID0gVFVORVJfUEhJTElQU19GTTEyMzZfTUszIH0sCisJfSwKKwkucGNpX2xpc3QgPSBpdnR2X3BjaV9hdmVyX3VsdHJhMTUwMG1jZSwKKwkuaTJjID0gJml2dHZfaTJjX3N0ZCwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwogLyogQVZlck1lZGlhIEVaTWFrZXIgUENJIERlbHV4ZSBjYXJkICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXZ0dl9jYXJkX3BjaV9pbmZvIGl2dHZfcGNpX2F2ZXJfZXptYWtlcltdID0gewpAQCAtMTE4MCw2ICsxMjI5LDcgQEAKIAkmaXZ0dl9jYXJkX2F2ZXJfZXptYWtlciwKIAkmaXZ0dl9jYXJkX2F2ZXJfbTEwNCwKIAkmaXZ0dl9jYXJkX2J1ZmZhbG8sCisJJml2dHZfY2FyZF9hdmVyX3VsdHJhMTUwMG1jZSwKIAogCS8qIFZhcmlhdGlvbnMgb2Ygc3RhbmRhcmQgY2FyZHMgYnV0IHdpdGggdGhlIHNhbWUgUENJIElEcy4KIAkgICBUaGVzZSBjYXJkcyBtdXN0IGNvbWUgbGFzdCBpbiB0aGlzIGxpc3QuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuaAppbmRleCAwYjhmZTg1Li5lOTlhMGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmgKQEAgLTUwLDcgKzUwLDggQEAKICNkZWZpbmUgSVZUVl9DQVJEX0FWRVJfRVpNQUtFUiAgICAgICAyMyAvKiBBVmVyTWVkaWEgRVpNYWtlciBQQ0kgRGVsdXhlICovCiAjZGVmaW5lIElWVFZfQ0FSRF9BVkVSX00xMDQgICAgICAgICAgMjQgLyogQXZlck1lZGlhIE0xMDQgbWluaVBDSSBjYXJkICovCiAjZGVmaW5lIElWVFZfQ0FSRF9CVUZGQUxPX01WNUwgICAgICAgMjUgLyogQnVmZmFsbyBQQy1NVjVML1BDSSBjYXJkICovCi0jZGVmaW5lIElWVFZfQ0FSRF9MQVNUIAkJICAgICAyNQorI2RlZmluZSBJVlRWX0NBUkRfQVZFUl9VTFRSQTE1MDBNQ0UgIDI2IC8qIEFWZXJNZWRpYSBVbHRyYVRWIDE1MDAgTUNFICovCisjZGVmaW5lIElWVFZfQ0FSRF9MQVNUIAkJICAgICAyNgogCiAvKiBWYXJpYW50cyBvZiBleGlzdGluZyBjYXJkcyBidXQgd2l0aCB0aGUgc2FtZSBQQ0kgSURzLiBUaGUgZHJpdmVyCiAgICBkZXRlY3RzIHRoZXNlIGJhc2VkIG9uIG90aGVyIGRldmljZSBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKaW5kZXggNTU4ZjhhOC4uNjNlYTBmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKQEAgLTE4Niw2ICsxODYsNyBAQAogCQkgIlx0XHRcdDI0ID0gQXZlck1lZGlhIEVaTWFrZXIgUENJIERlbHV4ZVxuIgogCQkgIlx0XHRcdDI1ID0gQXZlck1lZGlhIE0xMDQgKG5vdCB5ZXQgd29ya2luZylcbiIKIAkJICJcdFx0XHQyNiA9IEJ1ZmZhbG8gUEMtTVY1TC9QQ0lcbiIKKwkJICJcdFx0XHQyNyA9IEFWZXJNZWRpYSBVbHRyYVRWIDE1MDAgTUNFXG4iCiAJCSAiXHRcdFx0IDAgPSBBdXRvZGV0ZWN0IChkZWZhdWx0KVxuIgogCQkgIlx0XHRcdC0xID0gSWdub3JlIHRoaXMgY2FyZFxuXHRcdCIpOwogTU9EVUxFX1BBUk1fREVTQyhwYWwsICJTZXQgUEFMIHN0YW5kYXJkOiBCR0gsIERLLCBJLCBNLCBOLCBOYywgNjAiKTsKQEAgLTIxOCw3ICsyMTksNyBAQAogCQkgIlx0XHRcdERlZmF1bHQ6IDAgKGludGVybGFjZWQpIik7CiBNT0RVTEVfUEFSTV9ERVNDKGl2dHZfeXV2X3RocmVzaG9sZCwKIAkJICJJZiBpdnR2X3l1dl9tb2RlIGlzIDIgKGF1dG8pIHRoZW4gcGxheWJhY2sgY29udGVudCBhc1xuXHRcdHByb2dyZXNzaXZlIGlmIHNyYyBoZWlnaHQgPD0gaXZ0dl95dXZ0aHJlc2hvbGRcbiIKLQkJICJcdFx0XHREZWZhdWx0OiA0ODAiKTs7CisJCSAiXHRcdFx0RGVmYXVsdDogNDgwIik7CiBNT0RVTEVfUEFSTV9ERVNDKGVuY19tcGdfYnVmZmVycywKIAkJICJFbmNvZGVyIE1QRyBCdWZmZXJzIChpbiBNQilcbiIKIAkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KElWVFZfREVGQVVMVF9FTkNfTVBHX0JVRkZFUlMpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uYwppbmRleCA4NWFjNzA3Li5hZWRlMDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jCkBAIC0yMzYsMTggKzIzNiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3ViZGV2X3Nfc3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKLXsKLQlzdHJ1Y3QgaXZ0diAqaXR2ID0gc2RfdG9faXZ0dihzZCk7Ci0JdTE2IG1hc2ssIGRhdGE7Ci0KLQltYXNrID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0Lm1hc2s7Ci0JZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC50dW5lcjsKLQlpZiAobWFzaykKLQkJd3JpdGVfcmVnKChyZWFkX3JlZyhJVlRWX1JFR19HUElPX09VVCkgJiB+bWFzaykgfCAoZGF0YSAmIG1hc2spLCBJVlRWX1JFR19HUElPX09VVCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc3ViZGV2X3NfYXVkaW9fcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJCSAgdTMyIGlucHV0LCB1MzIgb3V0cHV0LCB1MzIgY29uZmlnKQogewpAQCAtMzQ0LDcgKzMzMiw2IEBACiAJLmdfY3RybCA9IHN1YmRldl9nX2N0cmwsCiAJLnNfY3RybCA9IHN1YmRldl9zX2N0cmwsCiAJLnF1ZXJ5Y3RybCA9IHN1YmRldl9xdWVyeWN0cmwsCi0JLnNfc3RkID0gc3ViZGV2X3Nfc3RkLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgc3ViZGV2X3R1bmVyX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKaW5kZXggZTUyYWEzMi4uOGYxNWEzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKQEAgLTUwOSw3ICs1MDksNiBAQAogLyogdGVtcGxhdGUgZm9yIG91ci1iaXQgYmFuZ2VyICovCiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGl2dHZfaTJjX2FkYXBfaHdfdGVtcGxhdGUgPSB7CiAJLm5hbWUgPSAiaXZ0diBpMmMgZHJpdmVyIiwKLQkuaWQgPSBJMkNfSFdfQl9DWDIzNDFYLAogCS5hbGdvID0gJml2dHZfYWxnbywKIAkuYWxnb19kYXRhID0gTlVMTCwJCQkvKiBmaWxsZWQgZnJvbSB0ZW1wbGF0ZSAqLwogCS5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtNTYwLDcgKzU1OSw2IEBACiAvKiB0ZW1wbGF0ZSBmb3IgaTJjLWJpdC1hbGdvICovCiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGl2dHZfaTJjX2FkYXBfdGVtcGxhdGUgPSB7CiAJLm5hbWUgPSAiaXZ0diBpMmMgZHJpdmVyIiwKLQkuaWQgPSBJMkNfSFdfQl9DWDIzNDFYLAogCS5hbGdvID0gTlVMTCwgICAgICAgICAgICAgICAgICAgLyogc2V0IGJ5IGkyYy1hbGdvLWJpdCAqLwogCS5hbGdvX2RhdGEgPSBOVUxMLCAgICAgICAgICAgICAgLyogZmlsbGVkIGZyb20gdGVtcGxhdGUgKi8KIAkub3duZXIgPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKaW5kZXggMWQ2Njg1NS4uZDA3NjViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKQEAgLTE5MTUsOCArMTkxNSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtZXllX3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfS0FXQVNBS0ksIFBDSV9ERVZJQ0VfSURfTUNISVBfS0w1QTcyMDAyLAotCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAorCXsgUENJX1ZERVZJQ0UoS0FXQVNBS0ksIFBDSV9ERVZJQ0VfSURfTUNISVBfS0w1QTcyMDAyKSwgMCB9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmMKaW5kZXggNDE2OTMzYy4uY2MwNmQ1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5jCkBAIC02NSw5ICs2NSwxMCBAQAogCQl1MzIgaW5wdXQ7CiAKIAkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IG1zcDM0MDAgdjRsMiBzZXRfc3RlcmVvIik7CisJCXNwID0gKHNpZCA8IEFSUkFZX1NJWkUocm91dGluZ19zY2hlbWVzKSkgPworCQkJcm91dGluZ19zY2hlbWVzW3NpZF0gOiBOVUxMOwogCi0JCWlmICgoc2lkIDwgQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZXMpKSAmJgotCQkgICAgKChzcCA9IHJvdXRpbmdfc2NoZW1lc1tzaWRdKSAhPSBOVUxMKSAmJgorCQlpZiAoKHNwICE9IE5VTEwpICYmCiAJCSAgICAoaGR3LT5pbnB1dF92YWwgPj0gMCkgJiYKIAkJICAgIChoZHctPmlucHV0X3ZhbCA8IHNwLT5jbnQpKSB7CiAJCQlpbnB1dCA9IHNwLT5kZWZbaGR3LT5pbnB1dF92YWxdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKaW5kZXggNjEwYmQ4NC4uYTMzNGIxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCkBAIC01NDAsNyArNTQwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgcHZyMl9pMmNfYWRhcF90ZW1wbGF0ZSA9IHsKIAkub3duZXIgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5jbGFzcwkgICAgICAgPSAwLAotCS5pZCAgICAgICAgICAgID0gSTJDX0hXX0JfQlQ4NDgsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKaW5kZXggOGQxN2NmNi4uZjk3NmRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKQEAgLTEwNTcsNyArMTA1Nyw4IEBACiAJCWdvdG8gZXJyOwogCWlmIChwZGV2LT5mZWF0dXJlcyAmIEZFQVRVUkVfTU9UT1JfUEFOVElMVCkgewogCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmdmRldi0+ZGV2LCAmZGV2X2F0dHJfcGFuX3RpbHQpOwotCQlpZiAocmMpIGdvdG8gZXJyX2J1dHRvbjsKKwkJaWYgKHJjKQorCQkJZ290byBlcnJfYnV0dG9uOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTA3Miw2ICsxMDczLDcgQEAKIHN0YXRpYyB2b2lkIHB3Y19yZW1vdmVfc3lzZnNfZmlsZXMoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCiAJaWYgKHBkZXYtPmZlYXR1cmVzICYgRkVBVFVSRV9NT1RPUl9QQU5USUxUKQogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX3Bhbl90aWx0KTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnZkZXYtPmRldiwgJmRldl9hdHRyX2J1dHRvbik7CkBAIC0xMjI5LDEzICsxMjMxLDExIEBACiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UocGRldi0+dmRldik7CiAKICNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgotCWlmIChwZGV2LT5idXR0b25fZGV2KSB7CisJaWYgKHBkZXYtPmJ1dHRvbl9kZXYpCiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHBkZXYtPmJ1dHRvbl9kZXYpOwotCQlpbnB1dF9mcmVlX2RldmljZShwZGV2LT5idXR0b25fZGV2KTsKLQkJa2ZyZWUocGRldi0+YnV0dG9uX2Rldi0+cGh5cyk7Ci0JCXBkZXYtPmJ1dHRvbl9kZXYgPSBOVUxMOwotCX0KICNlbmRpZgorCisJa2ZyZWUocGRldik7CiB9CiAKIC8qIE5vdGUgdGhhdCBhbGwgY2xlYW51cCBpcyBkb25lIGluIHRoZSByZXZlcnNlIG9yZGVyIGFzIGluIF9vcGVuICovCkBAIC0xMjgxLDggKzEyODEsNiBAQAogCQlQV0NfREVCVUdfT1BFTigiPDwgdmlkZW9fY2xvc2UoKSB2b3Blbj0lZFxuIiwgcGRldi0+dm9wZW4pOwogCX0gZWxzZSB7CiAJCXB3Y19jbGVhbnVwKHBkZXYpOwotCQkvKiBGcmVlIG1lbW9yeSAoZG9uJ3Qgc2V0IHBkZXYgdG8gMCBqdXN0IHlldCkgKi8KLQkJa2ZyZWUocGRldik7CiAJCS8qIHNlYXJjaCBkZXZpY2VfaGludFtdIHRhYmxlIGlmIHdlIG9jY3VweSBhIHNsb3QsIGJ5IGFueSBjaGFuY2UgKi8KIAkJZm9yIChoaW50ID0gMDsgaGludCA8IE1BWF9ERVZfSElOVFM7IGhpbnQrKykKIAkJCWlmIChkZXZpY2VfaGludFtoaW50XS5wZGV2ID09IHBkZXYpCkBAIC0xNDk5LDEzICsxNDk3LDEwIEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2ID0gTlVMTDsKIAlpbnQgdmVuZG9yX2lkLCBwcm9kdWN0X2lkLCB0eXBlX2lkOwotCWludCBpLCBoaW50LCByYzsKKwlpbnQgaGludCwgcmM7CiAJaW50IGZlYXR1cmVzID0gMDsKIAlpbnQgdmlkZW9fbnIgPSAtMTsgLyogZGVmYXVsdDogdXNlIG5leHQgYXZhaWxhYmxlIGRldmljZSAqLwogCWNoYXIgc2VyaWFsX251bWJlclszMF0sICpuYW1lOwotI2lmZGVmIENPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWCi0JY2hhciAqcGh5cyA9IE5VTEw7Ci0jZW5kaWYKIAogCXZlbmRvcl9pZCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOwogCXByb2R1Y3RfaWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CkBAIC0xNzU3LDggKzE3NTIsNyBAQAogCXBkZXYtPnZmcmFtZXMgPSBkZWZhdWx0X2ZwczsKIAlzdHJjcHkocGRldi0+c2VyaWFsLCBzZXJpYWxfbnVtYmVyKTsKIAlwZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOwotCWlmICh2ZW5kb3JfaWQgPT0gMHgwNDZEICYmIHByb2R1Y3RfaWQgPT0gMHgwOEI1KQotCXsKKwlpZiAodmVuZG9yX2lkID09IDB4MDQ2RCAmJiBwcm9kdWN0X2lkID09IDB4MDhCNSkgewogCQkvKiBMb2dpdGVjaCBRdWlja0NhbSBPcmJpdAogCQkgICBUaGUgcmFuZ2VzIGhhdmUgYmVlbiBkZXRlcm1pbmVkIGV4cGVyaW1lbnRhbGx5OyB0aGV5IG1heSBkaWZmZXIgZnJvbSBjYW0gdG8gY2FtLgogCQkgICBBbHNvLCB0aGUgZXhhY3QgcmFuZ2VzIGxlZnQtcmlnaHQgYW5kIHVwLWRvd24gYXJlIGRpZmZlcmVudCBmb3IgbXkgY2FtCkBAIC0xNzgwLDggKzE3NzQsOCBAQAogCXBkZXYtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAlpZiAoIXBkZXYtPnZkZXYpIHsKIAkJUFdDX0VSUk9SKCJFcnIsIGNhbm5vdCBhbGxvY2F0ZSB2aWRlb19kZXZpY2Ugc3RydXR1cmUuIEZhaWxpbmcgcHJvYmUuIik7Ci0JCWtmcmVlKHBkZXYpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX21lbTsKIAl9CiAJbWVtY3B5KHBkZXYtPnZkZXYsICZwd2NfdGVtcGxhdGUsIHNpemVvZihwd2NfdGVtcGxhdGUpKTsKIAlwZGV2LT52ZGV2LT5wYXJlbnQgPSAmaW50Zi0+ZGV2OwpAQCAtMTgwNiwyNSArMTgwMCwyMyBAQAogCX0KIAogCXBkZXYtPnZkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKLQlpID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHBkZXYtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKTsKLQlpZiAoaSA8IDApIHsKLQkJUFdDX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgYXMgdmlkZW8gZGV2aWNlICglZCkuXG4iLCBpKTsKLQkJcmMgPSBpOwotCQlnb3RvIGVycjsKKwlyYyA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShwZGV2LT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucik7CisJaWYgKHJjIDwgMCkgeworCQlQV0NfRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBhcyB2aWRlbyBkZXZpY2UgKCVkKS5cbiIsIHJjKTsKKwkJZ290byBlcnJfdmlkZW9fcmVsZWFzZTsKIAl9Ci0JZWxzZSB7Ci0JCVBXQ19JTkZPKCJSZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZC5cbiIsIHBkZXYtPnZkZXYtPm51bSk7Ci0JfQorCisJUFdDX0lORk8oIlJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkLlxuIiwgcGRldi0+dmRldi0+bnVtKTsKIAogCS8qIG9jY3VweSBzbG90ICovCiAJaWYgKGhpbnQgPCBNQVhfREVWX0hJTlRTKQogCQlkZXZpY2VfaGludFtoaW50XS5wZGV2ID0gcGRldjsKIAogCVBXQ19ERUJVR19QUk9CRSgicHJvYmUoKSBmdW5jdGlvbiByZXR1cm5pbmcgc3RydWN0IGF0IDB4JXAuXG4iLCBwZGV2KTsKLQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBwZGV2KTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHBkZXYpOwogCXJjID0gcHdjX2NyZWF0ZV9zeXNmc19maWxlcyhwZGV2LT52ZGV2KTsKIAlpZiAocmMpCi0JCWdvdG8gZXJyX3VucmVnOworCQlnb3RvIGVycl92aWRlb191bnJlZzsKIAogCS8qIFNldCB0aGUgbGVkcyBvZmYgKi8KIAlwd2Nfc2V0X2xlZHMocGRldiwgMCwgMCk7CkBAIC0xODM1LDE2ICsxODI3LDE2IEBACiAJcGRldi0+YnV0dG9uX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghcGRldi0+YnV0dG9uX2RldikgewogCQlQV0NfRVJST1IoIkVyciwgaW5zdWZmaWNpZW50IG1lbW9yeSBmb3Igd2ViY2FtIHNuYXBzaG90IGJ1dHRvbiBkZXZpY2UuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyYyA9IC1FTk9NRU07CisJCXB3Y19yZW1vdmVfc3lzZnNfZmlsZXMocGRldi0+dmRldik7CisJCWdvdG8gZXJyX3ZpZGVvX3VucmVnOwogCX0KIAorCXVzYl9tYWtlX3BhdGgodWRldiwgcGRldi0+YnV0dG9uX3BoeXMsIHNpemVvZihwZGV2LT5idXR0b25fcGh5cykpOworCXN0cmxjYXQocGRldi0+YnV0dG9uX3BoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKHBkZXYtPmJ1dHRvbl9waHlzKSk7CisKIAlwZGV2LT5idXR0b25fZGV2LT5uYW1lID0gIlBXQyBzbmFwc2hvdCBidXR0b24iOwotCXBoeXMgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwidXNiLSVzLSVzIiwgcGRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgcGRldi0+dWRldi0+ZGV2cGF0aCk7Ci0JaWYgKCFwaHlzKSB7Ci0JCWlucHV0X2ZyZWVfZGV2aWNlKHBkZXYtPmJ1dHRvbl9kZXYpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JcGRldi0+YnV0dG9uX2Rldi0+cGh5cyA9IHBoeXM7CisJcGRldi0+YnV0dG9uX2Rldi0+cGh5cyA9IHBkZXYtPmJ1dHRvbl9waHlzOwogCXVzYl90b19pbnB1dF9pZChwZGV2LT51ZGV2LCAmcGRldi0+YnV0dG9uX2Rldi0+aWQpOwogCXBkZXYtPmJ1dHRvbl9kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+dWRldi0+ZGV2OwogCXBkZXYtPmJ1dHRvbl9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKTsKQEAgLTE4NTMsMjUgKzE4NDUsMjcgQEAKIAlyYyA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShwZGV2LT5idXR0b25fZGV2KTsKIAlpZiAocmMpIHsKIAkJaW5wdXRfZnJlZV9kZXZpY2UocGRldi0+YnV0dG9uX2Rldik7Ci0JCWtmcmVlKHBkZXYtPmJ1dHRvbl9kZXYtPnBoeXMpOwogCQlwZGV2LT5idXR0b25fZGV2ID0gTlVMTDsKLQkJcmV0dXJuIHJjOworCQlwd2NfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHBkZXYtPnZkZXYpOworCQlnb3RvIGVycl92aWRlb191bnJlZzsKIAl9CiAjZW5kaWYKIAogCXJldHVybiAwOwogCi1lcnJfdW5yZWc6CitlcnJfdmlkZW9fdW5yZWc6CiAJaWYgKGhpbnQgPCBNQVhfREVWX0hJTlRTKQogCQlkZXZpY2VfaGludFtoaW50XS5wZGV2ID0gTlVMTDsKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZShwZGV2LT52ZGV2KTsKLWVycjoKLQl2aWRlb19kZXZpY2VfcmVsZWFzZShwZGV2LT52ZGV2KTsgLyogRHJpcC4uLiBkcmlwLi4uIGRyaXAuLi4gKi8KLQlrZnJlZShwZGV2KTsgLyogT29wcywgbm8gbWVtb3J5IGxlYWtzIHBsZWFzZSAqLworCXBkZXYtPnZkZXYgPSBOVUxMOwkvKiBTbyB3ZSBkb24ndCB0cnkgdG8gcmVsZWFzZSBpdCBiZWxvdyAqLworZXJyX3ZpZGVvX3JlbGVhc2U6CisJdmlkZW9fZGV2aWNlX3JlbGVhc2UocGRldi0+dmRldik7CitlcnJfZnJlZV9tZW06CisJa2ZyZWUocGRldik7CiAJcmV0dXJuIHJjOwogfQogCi0vKiBUaGUgdXNlciBqYW5rZWQgb3V0IHRoZSBjYWJsZS4uLiAqLworLyogVGhlIHVzZXIgeWFua2VkIG91dCB0aGUgY2FibGUuLi4gKi8KIHN0YXRpYyB2b2lkIHVzYl9wd2NfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKQEAgLTE5MDIsNyArMTg5Niw3IEBACiAJLyogQWxlcnQgd2FpdGluZyBwcm9jZXNzZXMgKi8KIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBkZXYtPmZyYW1lcSk7CiAJLyogV2FpdCB1bnRpbCBkZXZpY2UgaXMgY2xvc2VkICovCi0JaWYocGRldi0+dm9wZW4pIHsKKwlpZiAocGRldi0+dm9wZW4pIHsKIAkJbXV0ZXhfbG9jaygmcGRldi0+bW9kbG9jayk7CiAJCXBkZXYtPnVucGx1Z2dlZCA9IDE7CiAJCW11dGV4X3VubG9jaygmcGRldi0+bW9kbG9jayk7CkBAIC0xOTExLDggKzE5MDUsNiBAQAogCQkvKiBEZXZpY2UgaXMgY2xvc2VkLCBzbyB3ZSBjYW4gc2FmZWx5IHVucmVnaXN0ZXIgaXQgKi8KIAkJUFdDX0RFQlVHX1BST0JFKCJVbnJlZ2lzdGVyaW5nIHZpZGVvIGRldmljZSBpbiBkaXNjb25uZWN0KCkuXG4iKTsKIAkJcHdjX2NsZWFudXAocGRldik7Ci0JCS8qIEZyZWUgbWVtb3J5IChkb24ndCBzZXQgcGRldiB0byAwIGp1c3QgeWV0KSAqLwotCQlrZnJlZShwZGV2KTsKIAogZGlzY29ubmVjdF9vdXQ6CiAJCS8qIHNlYXJjaCBkZXZpY2VfaGludFtdIHRhYmxlIGlmIHdlIG9jY3VweSBhIHNsb3QsIGJ5IGFueSBjaGFuY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy12NGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy12NGwuYwppbmRleCAyODc2Y2UwLi5iZGI0Y2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXY0bC5jCkBAIC0xMDMzLDcgKzEwMzMsNyBAQAogCQkJaWYgKHN0ZC0+aW5kZXggIT0gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCXN0ZC0+aWQgPSBWNEwyX1NURF9VTktOT1dOOwotCQkJc3RybmNweShzdGQtPm5hbWUsICJ3ZWJjYW0iLCBzaXplb2Yoc3RkLT5uYW1lKSk7CisJCQlzdHJsY3B5KHN0ZC0+bmFtZSwgIndlYmNhbSIsIHNpemVvZihzdGQtPm5hbWUpKTsKIAkJCXJldHVybiAwOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLmgKaW5kZXggMGI2NThkZS4uMDkwMjM1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLmgKQEAgLTEzNSwxMiArMTM1LDYgQEAKICNkZWZpbmUgREVWSUNFX1VTRV9DT0RFQzMoeCkgKCh4KT49NzAwKQogI2RlZmluZSBERVZJQ0VfVVNFX0NPREVDMjMoeCkgKCh4KT49Njc1KQogCi0KLSNpZm5kZWYgVjRMMl9QSVhfRk1UX1BXQzEKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1BXQzEJdjRsMl9mb3VyY2MoJ1AnLCdXJywnQycsJzEnKQotI2RlZmluZSBWNEwyX1BJWF9GTVRfUFdDMgl2NGwyX2ZvdXJjYygnUCcsJ1cnLCdDJywnMicpCi0jZW5kaWYKLQogLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzIHdlcmUgYmFzZWQgb24gY3BpYS5oLiBXaHkgcmVpbnZlbnQgdGhlIHdoZWVsPyA6LSkgKi8KIHN0cnVjdCBwd2NfaXNvX2J1ZgogewpAQCAtMjU5LDYgKzI1Myw3IEBACiAgICBpbnQgc25hcHNob3RfYnV0dG9uX3N0YXR1czsJCS8qIHNldCB0byAxIHdoZW4gdGhlIHVzZXIgcHVzaCB0aGUgYnV0dG9uLCByZXNldCB0byAwIHdoZW4gdGhpcyB2YWx1ZSBpcyByZWFkICovCiAjaWZkZWYgQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVYKICAgIHN0cnVjdCBpbnB1dF9kZXYgKmJ1dHRvbl9kZXY7CS8qIHdlYmNhbSBzbmFwc2hvdCBidXR0b24gaW5wdXQgKi8KKyAgIGNoYXIgYnV0dG9uX3BoeXNbNjRdOwogI2VuZGlmCiAKICAgIC8qKiogTWlzYy4gZGF0YSAqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCmluZGV4IGMyNWU4MWEuLmMzZTk2ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCkBAIC00MCw3ICs0MCw3IEBACiAvKiBpbnNtb2Qgb3B0aW9ucyAqLwogc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeHRhbDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmJkczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbW1iczsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGx2bDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYnVmYmxvY2tzID0gMTAwOwogCkBAIC00OCw4ICs0OCw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIik7CiBtb2R1bGVfcGFyYW0oeHRhbCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoeHRhbCwgInNlbGVjdCBvc2NpbGxhdG9yIGZyZXF1ZW5jeSAoMC4uMyksIGRlZmF1bHQgMCIpOwotbW9kdWxlX3BhcmFtKHJiZHMsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJiZHMsICJzZWxlY3QgbW9kZSwgMD1SRFMsIDE9UkJEUywgZGVmYXVsdCAwIik7Cittb2R1bGVfcGFyYW0obW1icywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobW1icywgImVuYWJsZSBNTUJTIG1vZGU6IDA9b2ZmIChkZWZhdWx0KSwgMT1vbiIpOwogbW9kdWxlX3BhcmFtKHBsdmwsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBsdmwsICJzZWxlY3QgcGF1c2UgbGV2ZWwgKDAuLjMpLCBkZWZhdWx0IDAiKTsKIG1vZHVsZV9wYXJhbShidWZibG9ja3MsIGludCwgMCk7CkBAIC03OCw2ICs3OCw3IEBACiAJdW5zaWduZWQgY2hhciBsYXN0X2Jsb2NrbnVtOwogCXdhaXRfcXVldWVfaGVhZF90IHJlYWRfcXVldWU7CiAJaW50IGRhdGFfYXZhaWxhYmxlX2Zvcl9yZWFkOworCXU4IHN5bmM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE2NTg4ICp0b19zYWE2NTg4KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCkBAIC0yNjEsMTMgKzI2MiwxNiBAQAogCXVuc2lnbmVkIGNoYXIgdG1wOwogCiAJLyogQWx0aG91Z2ggd2Ugb25seSBuZWVkIDMgYnl0ZXMsIHdlIGhhdmUgdG8gcmVhZCBhdCBsZWFzdCA2LgotCSAgIFNBQTY1ODggcmV0dXJucyBnYXJiYWdlIG90aGVyd2lzZSAqLworCSAgIFNBQTY1ODggcmV0dXJucyBnYXJiYWdlIG90aGVyd2lzZS4gKi8KIAlpZiAoNiAhPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAmdG1wYnVmWzBdLCA2KSkgewogCQlpZiAoZGVidWcgPiAxKQogCQkJZHByaW50ayhQUkVGSVggInJlYWQgZXJyb3IhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAorCXMtPnN5bmMgPSB0bXBidWZbMF0gJiAweDEwOworCWlmICghcy0+c3luYykKKwkJcmV0dXJuOwogCWJsb2NrbnVtID0gdG1wYnVmWzBdID4+IDU7CiAJaWYgKGJsb2NrbnVtID09IHMtPmxhc3RfYmxvY2tudW0pIHsKIAkJaWYgKGRlYnVnID4gMykKQEAgLTI4Niw5ICsyOTAsOCBAQAogCSAgIG9jY3VycmVkIGR1cmluZyByZWNlcHRpb24gb2YgdGhpcyBibG9jay4KIAkgICBCaXQgNjogQ29ycmVjdGVkIGJpdC4gSW5kaWNhdGVzIHRoYXQgYW4gZXJyb3Igd2FzCiAJICAgY29ycmVjdGVkIGZvciB0aGlzIGRhdGEgYmxvY2suCi0JICAgQml0cyA1LTM6IFJlY2VpdmVkIE9mZnNldC4gSW5kaWNhdGVzIHRoZSBvZmZzZXQgcmVjZWl2ZWQKLQkgICBieSB0aGUgc3luYyBzeXN0ZW0uCi0JICAgQml0cyAyLTA6IE9mZnNldCBOYW1lLiBJbmRpY2F0ZXMgdGhlIG9mZnNldCBhcHBsaWVkIHRvIHRoaXMgZGF0YS4KKwkgICBCaXRzIDUtMzogU2FtZSBhcyBiaXRzIDAtMi4KKwkgICBCaXRzIDItMDogQmxvY2sgbnVtYmVyLgogCiAJICAgU0FBNjU4OCBieXRlIG9yZGVyIGlzIFN0YXR1cy1NU0ItTFNCLCBzbyB3ZSBoYXZlIHRvIHN3YXAgdGhlCiAJICAgZmlyc3QgYW5kIHRoZSBsYXN0IG9mIHRoZSAzIGJ5dGVzIGJsb2NrLgpAQCAtMjk4LDEyICszMDEsMjEgQEAKIAl0bXBidWZbMl0gPSB0bXBidWZbMF07CiAJdG1wYnVmWzBdID0gdG1wOwogCisJLyogTWFwICdJbnZhbGlkIGJsb2NrIEUnIHRvICdJbnZhbGlkIEJsb2NrJyAqLworCWlmIChibG9ja251bSA9PSA2KQorCQlibG9ja251bSA9IFY0TDJfUkRTX0JMT0NLX0lOVkFMSUQ7CisJLyogQW5kIGlmIGFyZSBub3QgaW4gbW1icyBtb2RlLCB0aGVuICdCbG9jayBFJyBpcyBhbHNvIG1hcHBlZAorCSAgIHRvICdJbnZhbGlkIEJsb2NrJy4gQXMgZmFyIGFzIEkgY2FuIHRlbGwgTU1CUyBpcyBkaXNjb250aW51ZWQsCisJICAgYW5kIGlmIHRoZXJlIGlzIGV2ZXIgYSBuZWVkIHRvIHN1cHBvcnQgRSBibG9ja3MsIHRoZW4gcGxlYXNlCisJICAgY29udGFjdCB0aGUgbGludXgtbWVkaWEgbWFpbGluZ2xpc3QuICovCisJZWxzZSBpZiAoIW1tYnMgJiYgYmxvY2tudW0gPT0gNSkKKwkJYmxvY2tudW0gPSBWNEwyX1JEU19CTE9DS19JTlZBTElEOwogCXRtcCA9IGJsb2NrbnVtOwogCXRtcCB8PSBibG9ja251bSA8PCAzOwkvKiBSZWNlaXZlZCBvZmZzZXQgPT0gT2Zmc2V0IE5hbWUgKE9LID8pICovCiAJaWYgKCh0bXBidWZbMl0gJiAweDAzKSA9PSAweDAzKQotCQl0bXAgfD0gMHg4MDsJLyogdW5jb3JyZWN0YWJsZSBlcnJvciAqLworCQl0bXAgfD0gVjRMMl9SRFNfQkxPQ0tfRVJST1I7CSAvKiB1bmNvcnJlY3RhYmxlIGVycm9yICovCiAJZWxzZSBpZiAoKHRtcGJ1ZlsyXSAmIDB4MDMpICE9IDB4MDApCi0JCXRtcCB8PSAweDQwOwkvKiBjb3JyZWN0ZWQgZXJyb3IgKi8KKwkJdG1wIHw9IFY0TDJfUkRTX0JMT0NLX0NPUlJFQ1RFRDsgLyogY29ycmVjdGVkIGVycm9yICovCiAJdG1wYnVmWzJdID0gdG1wOwkvKiBJcyB0aGlzIGVub3VnaCA/IFNob3VsZCB3ZSBhbHNvIGNoZWNrIG90aGVyIGJpdHMgPyAqLwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKQEAgLTMyMSwxNCArMzMzLDE0IEBACiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDIwKSk7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNjU4OF9jb25maWd1cmUoc3RydWN0IHNhYTY1ODggKnMpCitzdGF0aWMgdm9pZCBzYWE2NTg4X2NvbmZpZ3VyZShzdHJ1Y3Qgc2FhNjU4OCAqcykKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmcy0+c2QpOwogCXVuc2lnbmVkIGNoYXIgYnVmWzNdOwogCWludCByYzsKIAogCWJ1ZlswXSA9IGNTeW5jUmVzdGFydDsKLQlpZiAocmJkcykKKwlpZiAobW1icykKIAkJYnVmWzBdIHw9IGNQcm9jZXNzaW5nTW9kZVJCRFM7CiAKIAlidWZbMV0gPSBjRmx5d2hlZWxEZWZhdWx0OwpAQCAtMzc0LDggKzM4Niw2IEBACiAJcmMgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDMpOwogCWlmIChyYyAhPSAzKQogCQlwcmludGsoUFJFRklYICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDMpXG4iLCByYyk7Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNDE2LDYgKzQyNiwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhYTY1ODhfZ190dW5lcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJc3RydWN0IHNhYTY1ODggKnMgPSB0b19zYWE2NTg4KHNkKTsKKworCXZ0LT5jYXBhYmlsaXR5IHw9IFY0TDJfVFVORVJfQ0FQX1JEUzsKKwlpZiAocy0+c3luYykKKwkJdnQtPnJ4c3ViY2hhbnMgfD0gVjRMMl9UVU5FUl9TVUJfUkRTOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTY1ODhfc190dW5lcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJc3RydWN0IHNhYTY1ODggKnMgPSB0b19zYWE2NTg4KHNkKTsKKworCXNhYTY1ODhfY29uZmlndXJlKHMpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNhYTY1ODhfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKQEAgLTQzMCw4ICs0NTgsMTQgQEAKIAkuaW9jdGwgPSBzYWE2NTg4X2lvY3RsLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgc2FhNjU4OF90dW5lcl9vcHMgPSB7CisJLmdfdHVuZXIgPSBzYWE2NTg4X2dfdHVuZXIsCisJLnNfdHVuZXIgPSBzYWE2NTg4X3NfdHVuZXIsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE2NTg4X29wcyA9IHsKIAkuY29yZSA9ICZzYWE2NTg4X2NvcmVfb3BzLAorCS50dW5lciA9ICZzYWE2NTg4X3R1bmVyX29wcywKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKaW5kZXggNWJjY2UwOS4uMjJiZmQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKQEAgLTQ3LDYgKzQ3LDcgQEAKIAlzZWxlY3QgRFZCX1REQTEwMDQ4IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfVERBODI5MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9aTDEwMDM5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQiBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIFBoaWxpcHMgc2FhNzEzNCBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jCmluZGV4IDYzYzRiOGYuLjFlYWJmZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE2NzUyaHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCQlpZiAoc2V0ICYmIG5ldyAhPSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiAmJgogCQkgICAgKCFoYXNfYWMzIHx8IG5ldyAhPSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzKSkKIAkJCXJldHVybiAtRVJBTkdFOwotCQluZXcgPSBvbGQ7CisJCXBhcmFtcy0+YXVfZW5jb2RpbmcgPSBuZXc7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgogCQlvbGQgPSBwYXJhbXMtPmF1X2wyX2JpdHJhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKaW5kZXggOGIwYjY0YS4uZDQ4YzQ1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYwpAQCAtNDAsNiArNDAsNyBAQAogICovCiAKIC8qIGRlZmF1bHRzICovCisjZGVmaW5lIE1JWEVSX0FERFJfVU5TRUxFQ1RFRAktMQogI2RlZmluZSBNSVhFUl9BRERSX1RWVFVORVIJMAogI2RlZmluZSBNSVhFUl9BRERSX0xJTkUxCTEKICNkZWZpbmUgTUlYRVJfQUREUl9MSU5FMgkyCkBAIC02OCw3ICs2OSw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXNwaW5sb2NrX3QgbWl4ZXJfbG9jazsKIAlpbnQgbWl4ZXJfdm9sdW1lW01JWEVSX0FERFJfTEFTVCsxXVsyXTsKLQlpbnQgY2FwdHVyZV9zb3VyY2VbTUlYRVJfQUREUl9MQVNUKzFdWzJdOworCWludCBjYXB0dXJlX3NvdXJjZV9hZGRyOworCWludCBjYXB0dXJlX3NvdXJjZVsyXTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICpjYXB0dXJlX2N0bFtNSVhFUl9BRERSX0xBU1QrMV07CiAJc3RydWN0IHBjaV9kZXYgKnBjaTsKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldjsKIApAQCAtMzE0LDYgKzMxNywxMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFNldHRpbmcgdGhlIGNhcHR1cmUgc291cmNlIGFuZCB1cGRhdGluZyB0aGUgQUxTQSBjb250cm9scworICovCitzdGF0aWMgaW50IHNuZF9zYWE3MTM0X2NhcHNyY19zZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICBpbnQgbGVmdCwgaW50IHJpZ2h0LCBib29sIGZvcmNlX25vdGlmeSkKK3sKKwlzbmRfY2FyZF9zYWE3MTM0X3QgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IGNoYW5nZSA9IDAsIGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlpbnQgYWN0aXZlLCBvbGRfYWRkcjsKKwl1MzIgYW5hYmFyLCB4YmFyaW47CisJaW50IGFuYWxvZ19pbywgcmF0ZTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldjsKKworCWRldiA9IGNoaXAtPmRldjsKKworCXNwaW5fbG9ja19pcnEoJmNoaXAtPm1peGVyX2xvY2spOworCisJYWN0aXZlID0gbGVmdCAhPSAwIHx8IHJpZ2h0ICE9IDA7CisJb2xkX2FkZHIgPSBjaGlwLT5jYXB0dXJlX3NvdXJjZV9hZGRyOworCisJLyogVGhlIGFjdGl2ZSBjYXB0dXJlIHNvdXJjZSBjYW5ub3QgYmUgZGVhY3RpdmF0ZWQgKi8KKwlpZiAoYWN0aXZlKSB7CisJCWNoYW5nZSA9IG9sZF9hZGRyICE9IGFkZHIgfHwKKwkJCSBjaGlwLT5jYXB0dXJlX3NvdXJjZVswXSAhPSBsZWZ0IHx8CisJCQkgY2hpcC0+Y2FwdHVyZV9zb3VyY2VbMV0gIT0gcmlnaHQ7CisKKwkJY2hpcC0+Y2FwdHVyZV9zb3VyY2VbMF0gPSBsZWZ0OworCQljaGlwLT5jYXB0dXJlX3NvdXJjZVsxXSA9IHJpZ2h0OworCQljaGlwLT5jYXB0dXJlX3NvdXJjZV9hZGRyID0gYWRkcjsKKwkJZGV2LT5kbWFzb3VuZC5pbnB1dCA9IGFkZHI7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bWl4ZXJfbG9jayk7CisKKwlpZiAoY2hhbmdlKSB7CisJCXN3aXRjaCAoZGV2LT5wY2ktPmRldmljZSkgeworCisJCWNhc2UgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQ6CisJCQlzd2l0Y2ggKGFkZHIpIHsKKwkJCWNhc2UgTUlYRVJfQUREUl9UVlRVTkVSOgorCQkJCXNhYV9hbmRvcmIoU0FBNzEzNF9BVURJT19GT1JNQVRfQ1RSTCwKKwkJCQkJICAgMHhjMCwgMHhjMCk7CisJCQkJc2FhX2FuZG9yYihTQUE3MTM0X1NJRl9TQU1QTEVfRlJFUSwKKwkJCQkJICAgMHgwMywgMHgwMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE1JWEVSX0FERFJfTElORTE6CisJCQljYXNlIE1JWEVSX0FERFJfTElORTI6CisJCQkJYW5hbG9nX2lvID0gKE1JWEVSX0FERFJfTElORTEgPT0gYWRkcikgPworCQkJCQkgICAgIDB4MDAgOiAweDA4OworCQkJCXJhdGUgPSAoMzIwMDAgPT0gZGV2LT5kbWFzb3VuZC5yYXRlKSA/CisJCQkJCTB4MDEgOiAweDAzOworCQkJCXNhYV9hbmRvcmIoU0FBNzEzNF9BTkFMT0dfSU9fU0VMRUNULAorCQkJCQkgICAweDA4LCBhbmFsb2dfaW8pOworCQkJCXNhYV9hbmRvcmIoU0FBNzEzNF9BVURJT19GT1JNQVRfQ1RSTCwKKwkJCQkJICAgMHhjMCwgMHg4MCk7CisJCQkJc2FhX2FuZG9yYihTQUE3MTM0X1NJRl9TQU1QTEVfRlJFUSwKKwkJCQkJICAgMHgwMywgcmF0ZSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWJyZWFrOworCQljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzOgorCQljYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM1OgorCQkJeGJhcmluID0gMHgwMzsgLyogYWRjICovCisJCQlhbmFiYXIgPSAwOworCQkJc3dpdGNoIChhZGRyKSB7CisJCQljYXNlIE1JWEVSX0FERFJfVFZUVU5FUjoKKwkJCQl4YmFyaW4gPSAwOyAvKiBEZW1vZHVsYXRvciAqLworCQkJCWFuYWJhciA9IDI7IC8qIERBQ3MgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgTUlYRVJfQUREUl9MSU5FMToKKwkJCQlhbmFiYXIgPSAwOyAgLyogYXV4MSwgYXV4MSAqLworCQkJCWJyZWFrOworCQkJY2FzZSBNSVhFUl9BRERSX0xJTkUyOgorCQkJCWFuYWJhciA9IDk7ICAvKiBhdXgyLCBhdXgyICovCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIG91dHB1dCB4YmFyIGFsd2F5cyBtYWluIGNoYW5uZWwgKi8KKwkJCXNhYV9kc3Bfd3JpdGVsKGRldiwgU0FBNzEzM19ESUdJVEFMX09VVFBVVF9TRUwxLAorCQkJCSAgICAgICAweGJiYmIxMCk7CisKKwkJCWlmIChsZWZ0IHx8IHJpZ2h0KSB7CisJCQkJLyogV2UndmUgZ290IGRhdGEsIHR1cm4gdGhlIGlucHV0IG9uICovCisJCQkJc2FhX2RzcF93cml0ZWwoZGV2LCBTQUE3MTMzX0RJR0lUQUxfSU5QVVRfWEJBUjEsCisJCQkJCSAgICAgICB4YmFyaW4pOworCQkJCXNhYV93cml0ZWwoU0FBNzEzM19BTkFMT0dfSU9fU0VMRUNULCBhbmFiYXIpOworCQkJfSBlbHNlIHsKKwkJCQlzYWFfZHNwX3dyaXRlbChkZXYsIFNBQTcxMzNfRElHSVRBTF9JTlBVVF9YQkFSMSwKKwkJCQkJICAgICAgIDApOworCQkJCXNhYV93cml0ZWwoU0FBNzEzM19BTkFMT0dfSU9fU0VMRUNULCAwKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGNoYW5nZSkgeworCQlpZiAoZm9yY2Vfbm90aWZ5KQorCQkJc25kX2N0bF9ub3RpZnkoY2hpcC0+Y2FyZCwKKwkJCQkgICAgICAgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsCisJCQkJICAgICAgICZjaGlwLT5jYXB0dXJlX2N0bFthZGRyXS0+aWQpOworCisJCWlmIChvbGRfYWRkciAhPSBNSVhFUl9BRERSX1VOU0VMRUNURUQgJiYgb2xkX2FkZHIgIT0gYWRkcikKKwkJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsCisJCQkJICAgICAgIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAorCQkJCSAgICAgICAmY2hpcC0+Y2FwdHVyZV9jdGxbb2xkX2FkZHJdLT5pZCk7CisJfQorCisJcmV0dXJuIGNoYW5nZTsKK30KIAogLyoKICAqIEFMU0EgUENNIHByZXBhcmF0aW9uCkBAIC00MDEsNiArNTEzLDEwIEBACiAKIAlkZXYtPmRtYXNvdW5kLnJhdGUgPSBydW50aW1lLT5yYXRlOwogCisJLyogU2V0dXAgYW5kIHVwZGF0ZSB0aGUgY2FyZC9BTFNBIGNvbnRyb2xzICovCisJc25kX3NhYTcxMzRfY2Fwc3JjX3NldChzYWE3MTM0LT5jYXB0dXJlX2N0bFtkZXYtPmRtYXNvdW5kLmlucHV0XSwgMSwgMSwKKwkJCSAgICAgICB0cnVlKTsKKwogCXJldHVybiAwOwogCiB9CkBAIC00MzUsNiArNTUxLDE2IEBACiAKIC8qCiAgKiBBTFNBIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBkZWZpbml0aW9uCisgKgorICogIFJlcG9ydCBvbmx5IDMya0h6IGZvciBBTFNBOgorICoKKyAqICAtIFNBQTcxMzMvMzUgdXNlcyBEREVQIChEZW1EZWMgRWFzeSBQcm9ncmFtbWluZyBtb2RlKSwgd2hpY2ggd29ya3MgaW4gMzJrSHoKKyAqICAgIG9ubHkKKyAqICAtIFNBQTcxMzQgZm9yIFRWIG1vZGUgdXNlcyBEZW1EZWMgbW9kZSAoMzJrSHopCisgKiAgLSBSYWRpbyB3b3JrcyBpbiAzMmtIeiBvbmx5CisgKiAgLSBXaGVuIHJlY29yZGluZyA0OGtIeiBmcm9tIExpbmUxL0xpbmUyLCBzd2l0Y2hpbmcgb2YgY2FwdHVyZSBzb3VyY2UgdG8gVFYKKyAqICAgIG1lYW5zCisgKiAgICBzd2l0Y2hpbmcgdG8gMzJrSHogd2l0aG91dCBhbnkgZnJlcXVlbmN5IHRyYW5zbGF0aW9uCiAgKi8KIAogc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZSA9CkBAIC00NDgsOSArNTc0LDkgQEAKIAkJCQlTTkRSVl9QQ01fRk1UQklUX1U4IHwgXAogCQkJCVNORFJWX1BDTV9GTVRCSVRfVTE2X0xFIHwgXAogCQkJCVNORFJWX1BDTV9GTVRCSVRfVTE2X0JFLAotCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV8zMjAwMCwKIAkucmF0ZV9taW4gPQkJMzIwMDAsCi0JLnJhdGVfbWF4ID0JCTQ4MDAwLAorCS5yYXRlX21heCA9CQkzMjAwMCwKIAkuY2hhbm5lbHNfbWluID0JCTEsCiAJLmNoYW5uZWxzX21heCA9CQkyLAogCS5idWZmZXJfYnl0ZXNfbWF4ID0JKDI1NioxMDI0KSwKQEAgLTgzNiw4ICs5NjIsMTMgQEAKIAlpbnQgYWRkciA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCiAJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bWl4ZXJfbG9jayk7Ci0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjaGlwLT5jYXB0dXJlX3NvdXJjZVthZGRyXVswXTsKLQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IGNoaXAtPmNhcHR1cmVfc291cmNlW2FkZHJdWzFdOworCWlmIChjaGlwLT5jYXB0dXJlX3NvdXJjZV9hZGRyID09IGFkZHIpIHsKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjaGlwLT5jYXB0dXJlX3NvdXJjZVswXTsKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBjaGlwLT5jYXB0dXJlX3NvdXJjZVsxXTsKKwl9IGVsc2UgeworCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IDA7CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gMDsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxKCZjaGlwLT5taXhlcl9sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtODQ2LDg3ICs5NzcsMjIgQEAKIHN0YXRpYyBpbnQgc25kX3NhYTcxMzRfY2Fwc3JjX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICoga2NvbnRyb2wsCiAJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICogdWNvbnRyb2wpCiB7Ci0Jc25kX2NhcmRfc2FhNzEzNF90ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCWludCBjaGFuZ2UsIGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAlpbnQgbGVmdCwgcmlnaHQ7Ci0JdTMyIGFuYWJhciwgeGJhcmluOwotCWludCBhbmFsb2dfaW8sIHJhdGU7Ci0Jc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY7Ci0KLQlkZXYgPSBjaGlwLT5kZXY7Ci0KIAlsZWZ0ID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxOwogCXJpZ2h0ID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gJiAxOwotCXNwaW5fbG9ja19pcnEoJmNoaXAtPm1peGVyX2xvY2spOwogCi0JY2hhbmdlID0gY2hpcC0+Y2FwdHVyZV9zb3VyY2VbYWRkcl1bMF0gIT0gbGVmdCB8fAotCQkgY2hpcC0+Y2FwdHVyZV9zb3VyY2VbYWRkcl1bMV0gIT0gcmlnaHQ7Ci0JY2hpcC0+Y2FwdHVyZV9zb3VyY2VbYWRkcl1bMF0gPSBsZWZ0OwotCWNoaXAtPmNhcHR1cmVfc291cmNlW2FkZHJdWzFdID0gcmlnaHQ7Ci0JZGV2LT5kbWFzb3VuZC5pbnB1dD1hZGRyOwotCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bWl4ZXJfbG9jayk7Ci0KLQotCWlmIChjaGFuZ2UpIHsKLQkgIHN3aXRjaCAoZGV2LT5wY2ktPmRldmljZSkgewotCi0JICAgY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNDoKLQkJc3dpdGNoIChhZGRyKSB7Ci0JCQljYXNlIE1JWEVSX0FERFJfVFZUVU5FUjoKLQkJCQlzYWFfYW5kb3JiKFNBQTcxMzRfQVVESU9fRk9STUFUX0NUUkwsIDB4YzAsIDB4YzApOwotCQkJCXNhYV9hbmRvcmIoU0FBNzEzNF9TSUZfU0FNUExFX0ZSRVEsICAgMHgwMywgMHgwMCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE1JWEVSX0FERFJfTElORTE6Ci0JCQljYXNlIE1JWEVSX0FERFJfTElORTI6Ci0JCQkJYW5hbG9nX2lvID0gKE1JWEVSX0FERFJfTElORTEgPT0gYWRkcikgPyAweDAwIDogMHgwODsKLQkJCQlyYXRlID0gKDMyMDAwID09IGRldi0+ZG1hc291bmQucmF0ZSkgPyAweDAxIDogMHgwMzsKLQkJCQlzYWFfYW5kb3JiKFNBQTcxMzRfQU5BTE9HX0lPX1NFTEVDVCwgIDB4MDgsIGFuYWxvZ19pbyk7Ci0JCQkJc2FhX2FuZG9yYihTQUE3MTM0X0FVRElPX0ZPUk1BVF9DVFJMLCAweGMwLCAweDgwKTsKLQkJCQlzYWFfYW5kb3JiKFNBQTcxMzRfU0lGX1NBTVBMRV9GUkVRLCAgIDB4MDMsIHJhdGUpOwotCQkJCWJyZWFrOwotCQl9Ci0KLQkJYnJlYWs7Ci0JICAgY2FzZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMzoKLQkgICBjYXNlIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM1OgotCQl4YmFyaW4gPSAweDAzOyAvLyBhZGMKLQkJYW5hYmFyID0gMDsKLQkJc3dpdGNoIChhZGRyKSB7Ci0JCQljYXNlIE1JWEVSX0FERFJfVFZUVU5FUjoKLQkJCQl4YmFyaW4gPSAwOyAvLyBEZW1vZHVsYXRvcgotCQkJCWFuYWJhciA9IDI7IC8vIERBQ3MKLQkJCQlicmVhazsKLQkJCWNhc2UgTUlYRVJfQUREUl9MSU5FMToKLQkJCQlhbmFiYXIgPSAwOyAgLy8gYXV4MSwgYXV4MQotCQkJCWJyZWFrOwotCQkJY2FzZSBNSVhFUl9BRERSX0xJTkUyOgotCQkJCWFuYWJhciA9IDk7ICAvLyBhdXgyLCBhdXgyCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBvdXRwdXQgeGJhciBhbHdheXMgbWFpbiBjaGFubmVsICovCi0JCXNhYV9kc3Bfd3JpdGVsKGRldiwgU0FBNzEzM19ESUdJVEFMX09VVFBVVF9TRUwxLCAweGJiYmIxMCk7Ci0KLQkJaWYgKGxlZnQgfHwgcmlnaHQpIHsgLy8gV2UndmUgZ290IGRhdGEsIHR1cm4gdGhlIGlucHV0IG9uCi0JCSAgc2FhX2RzcF93cml0ZWwoZGV2LCBTQUE3MTMzX0RJR0lUQUxfSU5QVVRfWEJBUjEsIHhiYXJpbik7Ci0JCSAgc2FhX3dyaXRlbChTQUE3MTMzX0FOQUxPR19JT19TRUxFQ1QsIGFuYWJhcik7Ci0JCX0gZWxzZSB7Ci0JCSAgc2FhX2RzcF93cml0ZWwoZGV2LCBTQUE3MTMzX0RJR0lUQUxfSU5QVVRfWEJBUjEsIDApOwotCQkgIHNhYV93cml0ZWwoU0FBNzEzM19BTkFMT0dfSU9fU0VMRUNULCAwKTsKLQkJfQotCQlicmVhazsKLQkgIH0KLQl9Ci0KLQlyZXR1cm4gY2hhbmdlOworCXJldHVybiBzbmRfc2FhNzEzNF9jYXBzcmNfc2V0KGtjb250cm9sLCBsZWZ0LCByaWdodCwgZmFsc2UpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3NhYTcxMzRfY29udHJvbHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfc2FhNzEzNF92b2x1bWVfY29udHJvbHNbXSA9IHsKIFNBQTcxM3hfVk9MVU1FKCJWaWRlbyBWb2x1bWUiLCAwLCBNSVhFUl9BRERSX1RWVFVORVIpLAotU0FBNzEzeF9DQVBTUkMoIlZpZGVvIENhcHR1cmUgU3dpdGNoIiwgMCwgTUlYRVJfQUREUl9UVlRVTkVSKSwKIFNBQTcxM3hfVk9MVU1FKCJMaW5lIFZvbHVtZSIsIDEsIE1JWEVSX0FERFJfTElORTEpLAotU0FBNzEzeF9DQVBTUkMoIkxpbmUgQ2FwdHVyZSBTd2l0Y2giLCAxLCBNSVhFUl9BRERSX0xJTkUxKSwKIFNBQTcxM3hfVk9MVU1FKCJMaW5lIFZvbHVtZSIsIDIsIE1JWEVSX0FERFJfTElORTIpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9zYWE3MTM0X2NhcHR1cmVfY29udHJvbHNbXSA9IHsKK1NBQTcxM3hfQ0FQU1JDKCJWaWRlbyBDYXB0dXJlIFN3aXRjaCIsIDAsIE1JWEVSX0FERFJfVFZUVU5FUiksCitTQUE3MTN4X0NBUFNSQygiTGluZSBDYXB0dXJlIFN3aXRjaCIsIDEsIE1JWEVSX0FERFJfTElORTEpLAogU0FBNzEzeF9DQVBTUkMoIkxpbmUgQ2FwdHVyZSBTd2l0Y2giLCAyLCBNSVhFUl9BRERSX0xJTkUyKSwKIH07CiAKQEAgLTk0MSwxNyArMTAwNywzMyBAQAogc3RhdGljIGludCBzbmRfY2FyZF9zYWE3MTM0X25ld19taXhlcihzbmRfY2FyZF9zYWE3MTM0X3QgKiBjaGlwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGNoaXAtPmNhcmQ7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2w7CiAJdW5zaWduZWQgaW50IGlkeDsKLQlpbnQgZXJyOworCWludCBlcnIsIGFkZHI7CiAKIAlpZiAoc25kX0JVR19PTighY2hpcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJTQUE3MTM0IE1peGVyIik7CiAKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX3NhYTcxMzRfY29udHJvbHMpOyBpZHgrKykgewotCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX3NhYTcxMzRfY29udHJvbHNbaWR4XSwgY2hpcCkpKSA8IDApCisJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9zYWE3MTM0X3ZvbHVtZV9jb250cm9scyk7IGlkeCsrKSB7CisJCWtjb250cm9sID0gc25kX2N0bF9uZXcxKCZzbmRfc2FhNzEzNF92b2x1bWVfY29udHJvbHNbaWR4XSwKKwkJCQkJY2hpcCk7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIGtjb250cm9sKTsKKwkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KKworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfc2FhNzEzNF9jYXB0dXJlX2NvbnRyb2xzKTsgaWR4KyspIHsKKwkJa2NvbnRyb2wgPSBzbmRfY3RsX25ldzEoJnNuZF9zYWE3MTM0X2NhcHR1cmVfY29udHJvbHNbaWR4XSwKKwkJCQkJY2hpcCk7CisJCWFkZHIgPSBzbmRfc2FhNzEzNF9jYXB0dXJlX2NvbnRyb2xzW2lkeF0ucHJpdmF0ZV92YWx1ZTsKKwkJY2hpcC0+Y2FwdHVyZV9jdGxbYWRkcl0gPSBrY29udHJvbDsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwga2NvbnRyb2wpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJY2hpcC0+Y2FwdHVyZV9zb3VyY2VfYWRkciA9IE1JWEVSX0FERFJfVU5TRUxFQ1RFRDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggNmVlYmUzZS4uMWIyOTQ4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KICNpbmNsdWRlICJ0ZWE1NzY3LmgiCiAjaW5jbHVkZSAidGRhMTgyNzEuaCIKKyNpbmNsdWRlICJ4YzUwMDAuaCIKIAogLyogY29tbWx5IHVzZWQgc3RyaW5ncyAqLwogc3RhdGljIGNoYXIgbmFtZV9tdXRlW10gICAgPSAibXV0ZSI7CkBAIC0yNjUsNiArMjY2LDU2IEBACiAJCQkuZ3BpbyA9IDB4MTAwMDAsCiAJCX0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9ST1ZFUk1FRElBX0xJTktfUFJPX0ZNXSA9IHsKKwkJLyogUm92ZXJNZWRpYSBUViBMaW5rIFBybyBGTSAoTFIxMzggUkVWOkkpICovCisJCS8qIEV1Z2VuZSBZdWRpbiA8RXVnZW5lLll1ZGluQGdtYWlsLmNvbT4gKi8KKwkJLm5hbWUJCT0gIlJvdmVyTWVkaWEgVFYgTGluayBQcm8gRk0iLAorCQkuYXVkaW9fY2xvY2sJPSAweDAwMjAwMDAwLAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLCAvKiBUQ0wgTUZQRTA1IDIgKi8KKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5ncGlvbWFzayAgICAgICA9IDB4ZTAwMCwKKwkJLmlucHV0cyAgICAgICAgID0geyB7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDgwMDAsCisJCQkudHYgICA9IDEsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV90dl9tb25vLAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJCS5ncGlvID0gMHgwMDAwLAorCQkJLnR2ICAgPSAxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDAsCisJCQkuYW11eCA9IExJTkUyLAorCQkJLmdwaW8gPSAweDQwMDAsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMiwKKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gTElORTIsCisJCQkuZ3BpbyA9IDB4NDAwMCwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTIsCisJCQkuZ3BpbyA9IDB4NDAwMCwKKwkJfSB9LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IExJTkUyLAorCQkJLmdwaW8gPSAweDIwMDAsCisJCX0sCisJCS5tdXRlID0geworCQkJLm5hbWUgPSBuYW1lX211dGUsCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDgwMDAsCisJCX0sCisJfSwKIAlbU0FBNzEzNF9CT0FSRF9FTVBSRVNTXSA9IHsKIAkJLyogIkdlcnQgVmVydm9vcnQiIDxnZXJ0LnZlcnZvb3J0QHBoaWxpcHMuY29tPiAqLwogCQkubmFtZQkJPSAiRU1QUkVTUyIsCkBAIC0xMzY0LDYgKzE0MTUsNDIgQEAKIAkJCS5hbXV4ID0gTElORTEsCiAJCX0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1RVRElPXzUwNV0gPSB7CisJCS8qIFZhc2lsaXkgVGVtbmlrb3YgPHZha2FAbmV3bWFpbC5ydT4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkF2ZXJNZWRpYSBBdmVyVFYgU3R1ZGlvIDUwNSIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmlucHV0cyAgICAgICAgID0geyB7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IExJTkUyLAorCQkJLnR2ICAgPSAxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDAsCisJCQkuYW11eCA9IExJTkUyLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDIsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUyLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDgsCisJCQkuYW11eCA9IExJTkUyLAorCQl9IH0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ID0gTElORTIsCisJCX0sCisJCS5tdXRlID0geworCQkJLm5hbWUgPSBuYW1lX211dGUsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LAorCX0sCiAJW1NBQTcxMzRfQk9BUkRfVVBNT1NUX1BVUlBMRV9UVl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJVUE1PU1QgUFVSUExFIFRWIiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKQEAgLTE2MzMsNyArMTcyMCw3IEBACiAJCX19LAogCQkucmFkaW8gPSB7CiAJCQkubmFtZSA9IG5hbWVfcmFkaW8sCi0JCQkuYW11eCA9IExJTkUxLAorCQkJLmFtdXggPSBUViwKIAkJCS5ncGlvID0gMHgwMDMwMDAwMSwKIAkJfSwKIAkJLm11dGUgPSB7CkBAIC0zNjYzLDggKzM3NTAsOCBAQAogCQkJLmFtdXggPSBUViwKIAkJCS5ncGlvID0gMHgwMjAwMDAwLAogCQl9LAotICAgICAgIH0sCi0gICAgICAgW1NBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9BTkFMT0ddID0geworCX0sCisJW1NBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9BTkFMT0ddID0gewogCSAgICAgICAubmFtZSAgICAgICAgICAgPSAiQVNVU1RlSyBQNzEzMSBBbmFsb2ciLAogCSAgICAgICAuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAogCSAgICAgICAudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCkBAIC00MDgxLDYgKzQxNjgsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJkc19hZGRyIAk9IDB4MTAsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMDAwODAwMCwKIAkJLmlucHV0cyAgICAgICAgID0ge3sKQEAgLTQxNDUsNiArNDIzMyw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmRzX2FkZHIgCT0gMHgxMCwKIAkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwMDA4MDAwLAogCQkuaW5wdXRzICAgICAgICAgPSB7ewpAQCAtNDE3NSw2ICs0MjY0LDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yZHNfYWRkciAJPSAweDEwLAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAwMDgwMDAsCiAJCS5pbnB1dHMgICAgICAgICA9IHt7CkBAIC00MzUwLDYgKzQ0NDAsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJkc19hZGRyIAk9IDB4MTAsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV90diwKQEAgLTQzNzgsNiArNDQ2OSw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmRzX2FkZHIgCT0gMHgxMCwKIAkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX3R2LApAQCAtNDQwNiw2ICs0NDk4LDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yZHNfYWRkciAJPSAweDEwLAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5pbnB1dHMgICAgICAgICA9IHt7CiAJCQkubmFtZSA9IG5hbWVfdHYsCkBAIC00NDM0LDYgKzQ1MjcsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJkc19hZGRyIAk9IDB4MTAsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV90diwKQEAgLTQ1NDAsNiArNDYzNCw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmRzX2FkZHIgCT0gMHgxMCwKIAkJLmVtcHJlc3NfYWRkciAJPSAweDIwLAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5pbnB1dHMgICAgICAgICA9IHsgewpAQCAtNDg2MSw3ICs0OTU2LDcgQEAKIAkJLyogSWdvciBLdXpuZXRzb3YgPGlna0BpZ2sucnU+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJCZWhvbGRlciBCZWhvbGRUViBINiIsCiAJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCi0JCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTUQxMjE2TUVYX01LMywKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCkBAIC01MTE2LDYgKzUyMTEsNTMgQEAKIAkJCS5ncGlvID0gMHgwMCwKIAkJfSwKIAl9LAorCVtTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9TMzUwXSA9IHsKKwkJLyogSmFuIEQuIExvdXcgPGpkLmxvdXdAbXdlYi5jby56YSAqLworCQkubmFtZQkJPSAiQ29tcHJvIFZpZGVvTWF0ZSBTMzUwL1MzMDAiLAorCQkuYXVkaW9fY2xvY2sJPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKKwkJLnJhZGlvX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5tcGVnCQk9IFNBQTcxMzRfTVBFR19EVkIsCisJCS5pbnB1dHMgPSB7IHsKKwkJCS5uYW1lCT0gbmFtZV9jb21wMSwKKwkJCS52bXV4CT0gMCwKKwkJCS5hbXV4CT0gTElORTEsCisJCX0sIHsKKwkJCS5uYW1lCT0gbmFtZV9zdmlkZW8sCisJCQkudm11eAk9IDgsIC8qIE5vdCB0ZXN0ZWQgKi8KKwkJCS5hbXV4CT0gTElORTEKKwkJfSB9LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfQkVIT0xEX1g3XSA9IHsKKwkJLyogQmVob2xkZXIgSW50bC4gTHRkLiBEbWl0cnkgQmVsaW1vdiA8ZC5iZWxpbW92QGdtYWlsLmNvbT4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkJlaG9sZGVyIEJlaG9sZFRWIFg3IiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfWEM1MDAwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmlucHV0cyAgICAgICAgID0geyB7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDIsCisJCQkuYW11eCA9IFRWLAorCQkJLnR2ICAgPSAxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDAsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA5LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSB9LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IFRWLAorCQl9LAorCX0sCisKIH07CiAKIGNvbnN0IHVuc2lnbmVkIGludCBzYWE3MTM0X2Jjb3VudCA9IEFSUkFZX1NJWkUoc2FhNzEzNF9ib2FyZHMpOwpAQCAtNTM3NCw2ICs1NTE2LDEyIEBACiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCwKIAkJLnN1YnZlbmRvciAgICA9IDB4MTQ2MSwgLyogQXZlcm1lZGlhIFRlY2hub2xvZ2llcyBJbmMgKi8KKwkJLnN1YmRldmljZSAgICA9IDB4YTExNSwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX1NUVURJT181MDUsCisJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzAsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE0NjEsIC8qIEF2ZXJtZWRpYSBUZWNobm9sb2dpZXMgSW5jICovCiAJCS5zdWJkZXZpY2UgICAgPSAweDIxMDgsCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV8zMDUsCiAJfSx7CkBAIC02MjIzLDcgKzYzNzEsMjQgQEAKIAkJLnN1YnZlbmRvciAgICA9IDB4MTQ2MSwgLyogQXZlcm1lZGlhIFRlY2hub2xvZ2llcyBJbmMgKi8KIAkJLnN1YmRldmljZSAgICA9IDB4ZjMxZCwKIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0dPXzAwN19GTV9QTFVTLAotCisJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzAsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE4NWIsCisJCS5zdWJkZXZpY2UgICAgPSAweGM5MDAsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9TMzUwLAorCX0sIHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHg1YWNlLCAvKiBCZWhvbGRlciBJbnRsLiBMdGQuICovCisJCS5zdWJkZXZpY2UgICAgPSAweDc1OTUsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0JFSE9MRF9YNywKKwl9LCB7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKKwkJLnN1YnZlbmRvciAgICA9IDB4MTlkMSwgLyogUm92ZXJNZWRpYSAqLworCQkuc3ViZGV2aWNlICAgID0gMHgwMTM4LCAvKiBMaWZlVmlldyBGbHlUViBQcmltZTMwIE9FTSAqLworCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9ST1ZFUk1FRElBX0xJTktfUFJPX0ZNLAogCX0sIHsKIAkJLyogLS0tIGJvYXJkcyB3aXRob3V0IGVlcHJvbSArIHN1YnN5c3RlbSBJRCAtLS0gKi8KIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKQEAgLTYzMTAsNiArNjQ3NSwzMiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50IHNhYTcxMzRfeGM1MDAwX2NhbGxiYWNrKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCSAgIGludCBjb21tYW5kLCBpbnQgYXJnKQoreworCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfWDc6CisJCWlmIChjb21tYW5kID09IFhDNTAwMF9UVU5FUl9SRVNFVCkgeworCQkvKiBEb3duIGFuZCBVUCBwaGVyaXBoZXJpYWwgUkVTRVQgcGluIGZvciByZXNldCBhbGwgY2hpcHMgKi8KKwkJCXNhYV93cml0ZWIoU0FBNzEzNF9TUEVDSUFMX01PREUsIDB4MDApOworCQkJbXNsZWVwKDEwKTsKKwkJCXNhYV93cml0ZWIoU0FBNzEzNF9TUEVDSUFMX01PREUsIDB4MDEpOworCQkJbXNsZWVwKDEwKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsIDB4MDZlMjAwMDAsIDB4MDZlMjAwMDApOworCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgMHgwNmEyMDAwMCwgMHgwNmEyMDAwMCk7CisJCXNhYV9hbmRvcmwoU0FBNzEzM19BTkFMT0dfSU9fU0VMRUNUID4+IDIsIDB4MDIsIDB4MDIpOworCQlzYWFfYW5kb3JsKFNBQTcxMzRfQU5BTE9HX0lOX0NUUkwxID4+IDIsIDB4ODEsIDB4ODEpOworCQlzYWFfYW5kb3JsKFNBQTcxMzRfQVVESU9fQ0xPQ0swID4+IDIsIDB4MDMxODdkZTcsIDB4MDMxODdkZTcpOworCQlzYWFfYW5kb3JsKFNBQTcxMzRfQVVESU9fUExMX0NUUkwgPj4gMiwgMHgwMywgMHgwMyk7CisJCXNhYV9hbmRvcmwoU0FBNzEzNF9BVURJT19DTE9DS1NfUEVSX0ZJRUxEMCA+PiAyLAorCQkJICAgMHgwMDAxZTAwMCwgMHgwMDAxZTAwMCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGludCBzYWE3MTM0X3RkYTgyOTBfODI3eF9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKIAkJCQkJIGludCBjb21tYW5kLCBpbnQgYXJnKQpAQCAtNjQwNiw2ICs2NTk3LDggQEAKIAkJCXJldHVybiBzYWE3MTM0X3RkYTgyOTBfY2FsbGJhY2soZGV2LCBjb21tYW5kLCBhcmcpOwogCQljYXNlIFRVTkVSX1hDMjAyODoKIAkJCXJldHVybiBzYWE3MTM0X3hjMjAyOF9jYWxsYmFjayhkZXYsIGNvbW1hbmQsIGFyZyk7CisJCWNhc2UgVFVORVJfWEM1MDAwOgorCQkJcmV0dXJuIHNhYTcxMzRfeGM1MDAwX2NhbGxiYWNrKGRldiwgY29tbWFuZCwgYXJnKTsKIAkJfQogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAic2FhNzEzNDogRXJyb3IgLSBkZXZpY2Ugc3RydWN0IHVuZGVmaW5lZC5cbiIpOwpAQCAtNjQ3Niw2ICs2NjY5LDcgQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX1ZTVFJFQU1fWFBFUlQ6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9YUEVSVDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX1NUVURJT18zMDU6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVFVESU9fNTA1OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfMzA1OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1RVRElPXzMwNzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBXzMwNzoKQEAgLTY1MDAsNyArNjY5NCw3IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfTFIzMDE6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9IWUJSSURfTE5BOgotICAgICAgIGNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0FOQUxPRzoKKwljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9BTkFMT0c6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlREVU86CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BST1RFVVNfMjMwOToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNkFSOgpAQCAtNjUyNSw2ICs2NzE5LDcgQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfUkVBTF9BTkdFTF8yMjA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9QTFVTX1RWX0FOQUxPRzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0dPXzAwN19GTV9QTFVTOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9ST1ZFUk1FRElBX0xJTktfUFJPX0ZNOgogCQlkZXYtPmhhc19yZW1vdGUgPSBTQUE3MTM0X1JFTU9URV9HUElPOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCU19MUjMwMDoKQEAgLTY2NTMsNiArNjg0OCw3IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF9NNjM6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF9NNl9FWFRSQToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEX0g2OgorCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfWDc6CiAJCWRldi0+aGFzX3JlbW90ZSA9IFNBQTcxMzRfUkVNT1RFX0kyQzsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BMTY5X0I6CkBAIC02NjczLDYgKzY4NjksMTEgQEAKIAkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BNT0RFMCA+PiAyLCAgIDB4ODAwNDAxMDAsIDB4ODAwNDAxMDApOwogCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgMHg4MDA0MDEwMCwgMHgwMDA0MDEwMCk7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfUzM1MDoKKwkJZGV2LT5oYXNfcmVtb3RlID0gU0FBNzEzNF9SRU1PVEVfR1BJTzsKKwkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BNT0RFMCA+PiAyLCAgIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDApOworCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwppbmRleCA5NGEwMjNhLi5jYjc4Yzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCkBAIC0xMDEyLDggKzEwMTIsMTAgQEAKIAkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldl9hZGRyKCZkZXYtPnY0bDJfZGV2LAogCQkJCSZkZXYtPmkyY19hZGFwLAkic2FhNjU4OCIsICJzYWE2NTg4IiwKIAkJCQlzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5yZHNfYWRkcik7Ci0JCWlmIChzZCkKKwkJaWYgKHNkKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogZm91bmQgUkRTIGRlY29kZXJcbiIsIGRldi0+bmFtZSk7CisJCQlkZXYtPmhhc19yZHMgPSAxOworCQl9CiAJfQogCiAJcmVxdWVzdF9zdWJtb2R1bGVzKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCmluZGV4IDk4ZjNlZmQuLmViZGUyMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiemwxMDM1My5oIgogCiAjaW5jbHVkZSAiemwxMDAzNi5oIgorI2luY2x1ZGUgInpsMTAwMzkuaCIKICNpbmNsdWRlICJtdDMxMi5oIgogCiBNT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdIik7CkBAIC05NjgsNiArOTY5LDEwIEBACiAJLnR1bmVyX2FkZHJlc3MgPSAweDYwLAogfTsKIAorc3RhdGljIHN0cnVjdCBtdDMxMl9jb25maWcgemwxMDMxM19jb21wcm9fczM1MF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDBlLAorfTsKKwogc3RhdGljIHN0cnVjdCBsZ2R0MzMwNV9jb25maWcgaGN3X2xnZHQzMzA1X2NvbmZpZyA9IHsKIAkuaTJjX2FkZHIgICAgICAgICAgID0gMHgwZSwKIAkubXBlZ19tb2RlICAgICAgICAgID0gTEdEVDMzMDVfTVBFR19TRVJJQUwsCkBAIC0xNDU3LDcgKzE0NjIsNyBAQAogCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKIAkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmRldi0+aTJjX2FkYXAsIDB4NjEsCi0JCQkJICAgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKTsKKwkJCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRVhfTUszKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0E3MDBfUFJPOgpAQCAtMTQ3Myw2ICsxNDc4LDE2IEBACiAJCQl9CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9TMzUwOgorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzMTJfYXR0YWNoLAorCQkJCSZ6bDEwMzEzX2NvbXByb19zMzUwX2NvbmZpZywgJmRldi0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCisJCQlpZiAoZHZiX2F0dGFjaCh6bDEwMDM5X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJCTB4NjAsICZkZXYtPmkyY19hZGFwKSA9PSBOVUxMKQorCQkJCXdwcmludGsoIiVzOiBObyB6bDEwMDM5IGZvdW5kIVxuIiwKKwkJCQkJX19mdW5jX18pOworCisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXdwcmludGsoIkh1aD8gdW5rbm93biBEVkIgY2FyZD9cbiIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCmluZGV4IDZlMjE5YzIuLmUxZTgzYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYwpAQCAtMzk0LDcgKzM5NCw3IEBACiB7CiAJc3RydWN0IGNhcmRfaXIgKmlyOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQlJUl9LRVlUQUJfVFlQRSAqaXJfY29kZXMgPSBOVUxMOworCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXMgPSBOVUxMOwogCXUzMiBtYXNrX2tleWNvZGUgPSAwOwogCXUzMiBtYXNrX2tleWRvd24gPSAwOwogCXUzMiBtYXNrX2tleXVwICAgPSAwOwpAQCAtNDE1LDI3ICs0MTUsMjggQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZVklERU8zMDAwOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlUVlBMQVRJTlVNX0ZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlUVlBMQVRJTlVNX01JTkkyOgotCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19mbHl2aWRlbzsKKwljYXNlIFNBQTcxMzRfQk9BUkRfUk9WRVJNRURJQV9MSU5LX1BST19GTToKKwkJaXJfY29kZXMgICAgID0gJmlyX2NvZGVzX2ZseXZpZGVvX3RhYmxlOwogCQltYXNrX2tleWNvZGUgPSAweEVDMDAwMDA7CiAJCW1hc2tfa2V5ZG93biA9IDB4MDA0MDAwMDsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1k0MDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1k2MDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1k2MDBfTUszOgotCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19jaW5lcmd5OworCQlpcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfY2luZXJneV90YWJsZTsKIAkJbWFza19rZXljb2RlID0gMHgwMDAwM2Y7CiAJCW1hc2tfa2V5dXAgICA9IDB4MDQwMDAwOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRUNTX1RWUDNYUDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfRUNTX1RWUDNYUF80Q0I1OgotCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19lenR2OworCQlpcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfZXp0dl90YWJsZTsKIAkJbWFza19rZXljb2RlID0gMHgwMDAxN2M7CiAJCW1hc2tfa2V5dXAgICA9IDB4MDAwMDAyOwogCQlwb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9YUEVSVDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZBQ1NTTUFSVFRWOgotCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19waXhlbHZpZXc7CisJCWlyX2NvZGVzICAgICA9ICZpcl9jb2Rlc19waXhlbHZpZXdfdGFibGU7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAwMDFGOwogCQltYXNrX2tleXVwICAgPSAweDAwMDAyMDsKIAkJcG9sbGluZyAgICAgID0gNTA7IC8vIG1zCkBAIC00NDUsMTMgKzQ0NiwxNCBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfMzA1OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfMzA3OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1RVRElPXzMwNToKKwljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX1NUVURJT181MDU6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVFVESU9fMzA3OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1RVRElPXzUwNzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX1NUVURJT181MDdVQToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0dPXzAwN19GTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX00xMDI6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9HT18wMDdfRk1fUExVUzoKLQkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfYXZlcm1lZGlhOworCQlpcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfYXZlcm1lZGlhX3RhYmxlOwogCQltYXNrX2tleWNvZGUgPSAweDAwMDdDODsKIAkJbWFza19rZXlkb3duID0gMHgwMDAwMTA7CiAJCXBvbGxpbmcgICAgICA9IDUwOyAvLyBtcwpAQCAtNDYwLDE0ICs0NjIsMTQgQEAKIAkJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgMHg0KTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9NMTM1QToKLQkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhOworCQlpcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhX3RhYmxlOwogCQltYXNrX2tleWRvd24gPSAweDAwNDAwMDA7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAwMTNmOwogCQluZWNfZ3BpbyAgICAgPSAxOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBXzc3NzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNkFSOgotCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19hdmVybWVkaWE7CisJCWlyX2NvZGVzICAgICA9ICZpcl9jb2Rlc19hdmVybWVkaWFfdGFibGU7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDJGMjAwOwogCQltYXNrX2tleWRvd24gPSAweDAwMDQwMDsKIAkJcG9sbGluZyAgICAgID0gNTA7IC8vIG1zCkBAIC00NzYsNyArNDc4LDcgQEAKIAkJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMSwgMHgxKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BMTZEOgotCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19hdmVybWVkaWFfYTE2ZDsKKwkJaXJfY29kZXMgICAgID0gJmlyX2NvZGVzX2F2ZXJtZWRpYV9hMTZkX3RhYmxlOwogCQltYXNrX2tleWNvZGUgPSAweDAyRjIwMDsKIAkJbWFza19rZXlkb3duID0gMHgwMDA0MDA7CiAJCXBvbGxpbmcgICAgICA9IDUwOyAvKiBtcyAqLwpAQCAtNDg1LDE0ICs0ODcsMTQgQEAKIAkJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMSwgMHgxKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9URVJNSU5BVE9SOgotCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19waXhlbHZpZXc7CisJCWlyX2NvZGVzICAgICA9ICZpcl9jb2Rlc19waXhlbHZpZXdfdGFibGU7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAwMDFmOwogCQltYXNrX2tleXVwICAgPSAweDAwMDA2MDsKIAkJcG9sbGluZyAgICAgID0gNTA7IC8vIG1zCiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9NQU5MSV9NVFYwMDE6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX01BTkxJX01UVjAwMjoKLQkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfbWFubGk7CisJCWlyX2NvZGVzICAgICA9ICZpcl9jb2Rlc19tYW5saV90YWJsZTsKIAkJbWFza19rZXljb2RlID0gMHgwMDFmMDA7CiAJCW1hc2tfa2V5dXAgICA9IDB4MDA0MDAwOwogCQlwb2xsaW5nICAgICAgPSA1MDsgLyogbXMgKi8KQEAgLTUxMSwyNSArNTEzLDI1IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdfOUZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3UkRTX01LMzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN1JEU19NSzU6Ci0JCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX21hbmxpOworCQlpcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfbWFubGlfdGFibGU7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAzZjAwOwogCQltYXNrX2tleXVwICAgPSAweDAwNDAwMDsKIAkJcG9sbGluZyAgICAgID0gNTA7IC8qIG1zICovCiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfQ09MVU1CVVNfVFZGTToKLQkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfYmVob2xkX2NvbHVtYnVzOworCQlpcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfYmVob2xkX2NvbHVtYnVzX3RhYmxlOwogCQltYXNrX2tleWNvZGUgPSAweDAwM2YwMDsKIAkJbWFza19rZXl1cCAgID0gMHgwMDQwMDA7CiAJCXBvbGxpbmcgICAgICA9IDUwOyAvLyBtcwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfU0VETkFfUENfVFZfQ0FSREJVUzoKLQkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfcGN0dl9zZWRuYTsKKwkJaXJfY29kZXMgICAgID0gJmlyX2NvZGVzX3BjdHZfc2VkbmFfdGFibGU7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAxZjAwOwogCQltYXNrX2tleXVwICAgPSAweDAwNDAwMDsKIAkJcG9sbGluZyAgICAgID0gNTA7IC8vIG1zCiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9HT1RWSUVXXzcxMzU6Ci0JCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2dvdHZpZXc3MTM1OworCQlpcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfZ290dmlldzcxMzVfdGFibGU7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAwM0NDOwogCQltYXNrX2tleWRvd24gPSAweDAwMDAxMDsKIAkJcG9sbGluZwkgICAgID0gNTsgLyogbXMgKi8KQEAgLTUzOCw3MyArNTQwLDc4IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9UVl9QVlI6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9HT0xEX1BMVVM6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9UVl9HT0xEX1BMVVNJSToKLQkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfdmlkZW9tYXRlX3R2X3B2cjsKKwkJaXJfY29kZXMgICAgID0gJmlyX2NvZGVzX3ZpZGVvbWF0ZV90dl9wdnJfdGFibGU7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAwMDNGOwogCQltYXNrX2tleXVwICAgPSAweDQwMDAwMDsKIAkJcG9sbGluZyAgICAgID0gNTA7IC8vIG1zCiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QUk9URVVTXzIzMDk6Ci0JCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX3Byb3RldXNfMjMwOTsKKwkJaXJfY29kZXMgICAgID0gJmlyX2NvZGVzX3Byb3RldXNfMjMwOV90YWJsZTsKIAkJbWFza19rZXljb2RlID0gMHgwMDAwN0Y7CiAJCW1hc2tfa2V5dXAgICA9IDB4MDAwMDgwOwogCQlwb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzMwMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwOgotCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc192aWRlb21hdGVfdHZfcHZyOworCQlpcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfdmlkZW9tYXRlX3R2X3B2cl90YWJsZTsKIAkJbWFza19rZXljb2RlID0gMHgwMDNGMDA7CiAJCW1hc2tfa2V5dXAgICA9IDB4MDQwMDAwOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCU19MUjMwMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVF9MUjMwMToKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVERVTzoKLQkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfZmx5ZHZiOworCQlpcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfZmx5ZHZiX3RhYmxlOwogCQltYXNrX2tleWNvZGUgPSAweDAwMDFGMDA7CiAJCW1hc2tfa2V5ZG93biA9IDB4MDA0MDAwMDsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9IWUJSSURfTE5BOgotICAgICAgIGNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0FOQUxPRzoKLQkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfYXN1c19wYzM5OworCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0FOQUxPRzoKKwkJaXJfY29kZXMgICAgID0gJmlyX2NvZGVzX2FzdXNfcGMzOV90YWJsZTsKIAkJbWFza19rZXlkb3duID0gMHgwMDQwMDAwOwogCQlyYzVfZ3BpbyA9IDE7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9FTkNPUkVfRU5MVFY6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0VOQ09SRV9FTkxUVl9GTToKLQkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfZW5jb3JlX2VubHR2OworCQlpcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfZW5jb3JlX2VubHR2X3RhYmxlOwogCQltYXNrX2tleWNvZGUgPSAweDAwMDA3ZjsKIAkJbWFza19rZXl1cCAgID0gMHgwNDAwMDA7CiAJCXBvbGxpbmcgICAgICA9IDUwOyAvLyBtcwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWX0ZNNTM6Ci0JCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2VuY29yZV9lbmx0dl9mbTUzOworCQlpcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfZW5jb3JlX2VubHR2X2ZtNTNfdGFibGU7CiAJCW1hc2tfa2V5ZG93biA9IDB4MDA0MDAwMDsKIAkJbWFza19rZXljb2RlID0gMHgwMDAwN2Y7CiAJCW5lY19ncGlvID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEXzEwTU9PTlNUVk1BU1RFUjM6Ci0JCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2VuY29yZV9lbmx0djsKKwkJaXJfY29kZXMgICAgID0gJmlyX2NvZGVzX2VuY29yZV9lbmx0dl90YWJsZTsKIAkJbWFza19rZXljb2RlID0gMHg1ZjgwMDAwOwogCQltYXNrX2tleXVwICAgPSAweDgwMDAwMDA7CiAJCXBvbGxpbmcgICAgICA9IDUwOyAvL21zCiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9HRU5JVVNfVFZHT19BMTFNQ0U6Ci0JCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2dlbml1c190dmdvX2ExMW1jZTsKKwkJaXJfY29kZXMgICAgID0gJmlyX2NvZGVzX2dlbml1c190dmdvX2ExMW1jZV90YWJsZTsKIAkJbWFza19rZXljb2RlID0gMHhmZjsKIAkJbWFza19rZXlkb3duID0gMHhmMDAwMDA7CiAJCXBvbGxpbmcgPSA1MDsgLyogbXMgKi8KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1JFQUxfQU5HRUxfMjIwOgotCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19yZWFsX2F1ZGlvXzIyMF8zMl9rZXlzOworCQlpcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfcmVhbF9hdWRpb18yMjBfMzJfa2V5c190YWJsZTsKIAkJbWFza19rZXljb2RlID0gMHgzZjAwOwogCQltYXNrX2tleXVwICAgPSAweDQwMDA7CiAJCXBvbGxpbmcgPSA1MDsgLyogbXMgKi8KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9QTFVTX1RWX0FOQUxPRzoKLQkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfa3dvcmxkX3BsdXNfdHZfYW5hbG9nOworCQlpcl9jb2RlcyAgICAgPSAmaXJfY29kZXNfa3dvcmxkX3BsdXNfdHZfYW5hbG9nX3RhYmxlOwogCQltYXNrX2tleWNvZGUgPSAweDdmOwogCQlwb2xsaW5nID0gNDA7IC8qIG1zICovCiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfUzM1MDoKKwkJaXJfY29kZXMgICAgID0gJmlyX2NvZGVzX3ZpZGVvbWF0ZV9zMzUwX3RhYmxlOworCQltYXNrX2tleWNvZGUgPSAweDAwM2YwMDsKKwkJbWFza19rZXlkb3duID0gMHgwNDAwMDA7CisJCWJyZWFrOwogCX0KIAlpZiAoTlVMTCA9PSBpcl9jb2RlcykgewogCQlwcmludGsoIiVzOiBPb3BzOiBJUiBjb25maWcgZXJyb3IgW2NhcmQ9JWRdXG4iLApAQCAtNjg0LDggKzY5MSw2IEBACiAKIHZvaWQgc2FhNzEzNF9wcm9iZV9pMmNfaXIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0Jc3RydWN0IElSX2kyY19pbml0X2RhdGEgaW5pdF9kYXRhOwogCWNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJfbGlzdFtdID0gewogCQkweDdhLCAweDQ3LCAweDcxLCAweDJkLAogCQlJMkNfQ0xJRU5UX0VORApAQCAtNzA1LDMyICs3MTAsMzQgQEAKIAkJcmV0dXJuOwogCX0KIAotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOwotCW1lbXNldCgmaW5pdF9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IElSX2kyY19pbml0X2RhdGEpKTsKLQlzdHJsY3B5KGluZm8udHlwZSwgImlyX3ZpZGVvIiwgSTJDX05BTUVfU0laRSk7CisJbWVtc2V0KCZkZXYtPmluZm8sIDAsIHNpemVvZihkZXYtPmluZm8pKTsKKwltZW1zZXQoJmRldi0+aW5pdF9kYXRhLCAwLCBzaXplb2YoZGV2LT5pbml0X2RhdGEpKTsKKwlzdHJsY3B5KGRldi0+aW5mby50eXBlLCAiaXJfdmlkZW8iLCBJMkNfTkFNRV9TSVpFKTsKIAogCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV9QQ1RWXzExMGk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BJTk5BQ0xFX1BDVFZfMzEwaToKLQkJaW5pdF9kYXRhLm5hbWUgPSAiUGlubmFjbGUgUENUViI7CisJCWRldi0+aW5pdF9kYXRhLm5hbWUgPSAiUGlubmFjbGUgUENUViI7CiAJCWlmIChwaW5uYWNsZV9yZW1vdGUgPT0gMCkgewotCQkJaW5pdF9kYXRhLmdldF9rZXkgPSBnZXRfa2V5X3Bpbm5hY2xlX2NvbG9yOwotCQkJaW5pdF9kYXRhLmlyX2NvZGVzID0gaXJfY29kZXNfcGlubmFjbGVfY29sb3I7CisJCQlkZXYtPmluaXRfZGF0YS5nZXRfa2V5ID0gZ2V0X2tleV9waW5uYWNsZV9jb2xvcjsKKwkJCWRldi0+aW5pdF9kYXRhLmlyX2NvZGVzID0gJmlyX2NvZGVzX3Bpbm5hY2xlX2NvbG9yX3RhYmxlOworCQkJZGV2LT5pbmZvLmFkZHIgPSAweDQ3OwogCQl9IGVsc2UgewotCQkJaW5pdF9kYXRhLmdldF9rZXkgPSBnZXRfa2V5X3Bpbm5hY2xlX2dyZXk7Ci0JCQlpbml0X2RhdGEuaXJfY29kZXMgPSBpcl9jb2Rlc19waW5uYWNsZV9ncmV5OworCQkJZGV2LT5pbml0X2RhdGEuZ2V0X2tleSA9IGdldF9rZXlfcGlubmFjbGVfZ3JleTsKKwkJCWRldi0+aW5pdF9kYXRhLmlyX2NvZGVzID0gJmlyX2NvZGVzX3Bpbm5hY2xlX2dyZXlfdGFibGU7CisJCQlkZXYtPmluZm8uYWRkciA9IDB4NDc7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1VQTU9TVF9QVVJQTEVfVFY6Ci0JCWluaXRfZGF0YS5uYW1lID0gIlB1cnBsZSBUViI7Ci0JCWluaXRfZGF0YS5nZXRfa2V5ID0gZ2V0X2tleV9wdXJwbGV0djsKLQkJaW5pdF9kYXRhLmlyX2NvZGVzID0gaXJfY29kZXNfcHVycGxldHY7CisJCWRldi0+aW5pdF9kYXRhLm5hbWUgPSAiUHVycGxlIFRWIjsKKwkJZGV2LT5pbml0X2RhdGEuZ2V0X2tleSA9IGdldF9rZXlfcHVycGxldHY7CisJCWRldi0+aW5pdF9kYXRhLmlyX2NvZGVzID0gJmlyX2NvZGVzX3B1cnBsZXR2X3RhYmxlOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfTVNJX1RWQVRBTllXSEVSRV9QTFVTOgotCQlpbml0X2RhdGEubmFtZSA9ICJNU0kgVFZAbnl3aGVyZSBQbHVzIjsKLQkJaW5pdF9kYXRhLmdldF9rZXkgPSBnZXRfa2V5X21zaV90dmFueXdoZXJlX3BsdXM7Ci0JCWluaXRfZGF0YS5pcl9jb2RlcyA9IGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3BsdXM7Ci0JCWluZm8uYWRkciA9IDB4MzA7CisJCWRldi0+aW5pdF9kYXRhLm5hbWUgPSAiTVNJIFRWQG55d2hlcmUgUGx1cyI7CisJCWRldi0+aW5pdF9kYXRhLmdldF9rZXkgPSBnZXRfa2V5X21zaV90dmFueXdoZXJlX3BsdXM7CisJCWRldi0+aW5pdF9kYXRhLmlyX2NvZGVzID0gJmlyX2NvZGVzX21zaV90dmFueXdoZXJlX3BsdXNfdGFibGU7CisJCWRldi0+aW5mby5hZGRyID0gMHgzMDsKIAkJLyogTVNJIFRWQG55d2hlcmUgUGx1cyBjb250cm9sbGVyIGRvZXNuJ3Qgc2VlbSB0bwogCQkgICByZXNwb25kIHRvIHByb2JlcyB1bmxlc3Mgd2UgcmVhZCBzb21ldGhpbmcgZnJvbQogCQkgICBhbiBleGlzdGluZyBkZXZpY2UuIFdlaXJkLi4uCkBAIC03NDEsOSArNzQ4LDkgQEAKIAkJCSgxID09IHJjKSA/ICJ5ZXMiIDogIm5vIik7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMDoKLQkJaW5pdF9kYXRhLm5hbWUgPSAiSFZSIDExMTAiOwotCQlpbml0X2RhdGEuZ2V0X2tleSA9IGdldF9rZXlfaHZyMTExMDsKLQkJaW5pdF9kYXRhLmlyX2NvZGVzID0gaXJfY29kZXNfaGF1cHBhdWdlX25ldzsKKwkJZGV2LT5pbml0X2RhdGEubmFtZSA9ICJIVlIgMTExMCI7CisJCWRldi0+aW5pdF9kYXRhLmdldF9rZXkgPSBnZXRfa2V5X2h2cjExMTA7CisJCWRldi0+aW5pdF9kYXRhLmlyX2NvZGVzID0gJmlyX2NvZGVzX2hhdXBwYXVnZV9uZXdfdGFibGU7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNjA3Rk1fTUszOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNjA3Rk1fTUs1OgpAQCAtNzU3LDI2ICs3NjQsMjcgQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEX002MzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEX002X0VYVFJBOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfSDY6Ci0JCWluaXRfZGF0YS5uYW1lID0gIkJlaG9sZFRWIjsKLQkJaW5pdF9kYXRhLmdldF9rZXkgPSBnZXRfa2V5X2JlaG9sZG02eHg7Ci0JCWluaXRfZGF0YS5pcl9jb2RlcyA9IGlyX2NvZGVzX2JlaG9sZDsKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEX1g3OgorCQlkZXYtPmluaXRfZGF0YS5uYW1lID0gIkJlaG9sZFRWIjsKKwkJZGV2LT5pbml0X2RhdGEuZ2V0X2tleSA9IGdldF9rZXlfYmVob2xkbTZ4eDsKKwkJZGV2LT5pbml0X2RhdGEuaXJfY29kZXMgPSAmaXJfY29kZXNfYmVob2xkX3RhYmxlOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0NBUkRCVVNfNTAxOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQ0FSREJVU181MDY6Ci0JCWluZm8uYWRkciA9IDB4NDA7CisJCWRldi0+aW5mby5hZGRyID0gMHg0MDsKIAkJYnJlYWs7CiAJfQogCi0JaWYgKGluaXRfZGF0YS5uYW1lKQotCQlpbmZvLnBsYXRmb3JtX2RhdGEgPSAmaW5pdF9kYXRhOworCWlmIChkZXYtPmluaXRfZGF0YS5uYW1lKQorCQlkZXYtPmluZm8ucGxhdGZvcm1fZGF0YSA9ICZkZXYtPmluaXRfZGF0YTsKIAkvKiBObyBuZWVkIHRvIHByb2JlIGlmIGFkZHJlc3MgaXMga25vd24gKi8KLQlpZiAoaW5mby5hZGRyKSB7Ci0JCWkyY19uZXdfZGV2aWNlKCZkZXYtPmkyY19hZGFwLCAmaW5mbyk7CisJaWYgKGRldi0+aW5mby5hZGRyKSB7CisJCWkyY19uZXdfZGV2aWNlKCZkZXYtPmkyY19hZGFwLCAmZGV2LT5pbmZvKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIEFkZHJlc3Mgbm90IGtub3duLCBmYWxsYmFjayB0byBwcm9iaW5nICovCi0JaTJjX25ld19wcm9iZWRfZGV2aWNlKCZkZXYtPmkyY19hZGFwLCAmaW5mbywgYWRkcl9saXN0KTsKKwlpMmNfbmV3X3Byb2JlZF9kZXZpY2UoJmRldi0+aTJjX2FkYXAsICZkZXYtPmluZm8sIGFkZHJfbGlzdCk7CiB9CiAKIHN0YXRpYyBpbnQgc2FhNzEzNF9yYzVfaXJxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKaW5kZXggYmE4NzEyOC4uZGEyNmY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCkBAIC0xNDQ0LDcgKzE0NDQsNiBAQAogCQkJZmgtPmNhcC5vcHMtPmJ1Zl9xdWV1ZSgmZmgtPmNhcCxmaC0+Y2FwLnJlYWRfYnVmKTsKIAkJCWZoLT5jYXAucmVhZF9vZmYgPSAwOwogCQl9Ci0JCW11dGV4X3VubG9jaygmZmgtPmNhcC52Yl9sb2NrKTsKIAkJYnVmID0gZmgtPmNhcC5yZWFkX2J1ZjsKIAl9CiAKQEAgLTE3OTAsNyArMTc4OSw3IEBACiAJaWYgKDAgIT0gZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKGkgPCAwICB8fCAgaSA+PSBTQUE3MTM0X0lOUFVUX01BWCkKKwlpZiAoaSA+PSBTQUE3MTM0X0lOUFVUX01BWCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKE5VTEwgPT0gY2FyZF9pbihkZXYsIGkpLm5hbWUpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTgxOSw2ICsxODE4LDggQEAKIAkJVjRMMl9DQVBfUkVBRFdSSVRFIHwKIAkJVjRMMl9DQVBfU1RSRUFNSU5HIHwKIAkJVjRMMl9DQVBfVFVORVI7CisJaWYgKGRldi0+aGFzX3JkcykKKwkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfUkRTX0NBUFRVUkU7CiAJaWYgKHNhYTcxMzRfbm9fb3ZlcmxheSA8PSAwKQogCQljYXAtPmNhcGFiaWxpdGllcyB8PSBWNEwyX0NBUF9WSURFT19PVkVSTEFZOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCBmYjU2NGYxLi5kMThiYjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTI5Miw2ICsyOTIsMTAgQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNjA3UkRTX01LNSAgICAgMTY2CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzYwOVJEU19NSzMgICAgIDE2NwogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF82MDlSRFNfTUs1ICAgICAxNjgKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfUzM1MCAgICAgICAgMTY5CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX1NUVURJT181MDUgIDE3MAorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF9YNyAgICAgICAgICAgICAxNzEKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9ST1ZFUk1FRElBX0xJTktfUFJPX0ZNIDE3MgogCiAjZGVmaW5lIFNBQTcxMzRfTUFYQk9BUkRTIDMyCiAjZGVmaW5lIFNBQTcxMzRfSU5QVVRfTUFYIDgKQEAgLTUzOSw2ICs1NDMsNyBAQAogCXN0cnVjdCBpMmNfYWRhcHRlciAgICAgICAgIGkyY19hZGFwOwogCXN0cnVjdCBpMmNfY2xpZW50ICAgICAgICAgIGkyY19jbGllbnQ7CiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgZWVkYXRhWzI1Nl07CisJaW50IAkJCSAgIGhhc19yZHM7CiAKIAkvKiB2aWRlbyBvdmVybGF5ICovCiAJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgICAgb3ZidWY7CkBAIC01ODQsNiArNTg5LDEwIEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgbm9zaWduYWw7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgaW5zdXNwZW5kOwogCisJLyogSTJDIGtleWJvYXJkIGRhdGEgKi8KKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gICAgICBpbmZvOworCXN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhICAgIGluaXRfZGF0YTsKKwogCS8qIFNBQTcxMzRfTVBFR18qICovCiAJc3RydWN0IHNhYTcxMzRfdHMgICAgICAgICAgdHM7CiAJc3RydWN0IHNhYTcxMzRfZG1hcXVldWUgICAgdHNfcTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCmluZGV4IDM4YTcxNjAuLjM2ZWU0M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaApAQCAtMTIzLDggKzEyMyw4IEBACiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2IsIEJSSURHRV9TTjlDMTIwKSwgfSwKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBICYmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfTU9EVUxFCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2MsIEJSSURHRV9TTjlDMTIwKSwgfSwKLSNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNlLCBCUklER0VfU045QzEyMCksIH0sCisjZW5kaWYKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMKaW5kZXggYjE1NGJkOS4uMGI5OTZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMKQEAgLTE0MDAsNyArMTQwMCw2IEBACiAJfQogCiAJc3RrX2NyZWF0ZV9zeXNmc19maWxlcygmZGV2LT52ZGV2KTsKLQl1c2JfYXV0b3BtX2VuYWJsZShkZXYtPmludGVyZmFjZSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLmMKaW5kZXggOGI0ZTdkYWYuLjZhOTE3MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYwpAQCAtNzM0LDEwICs3MzQsNiBAQAogCXJldHVybiAwOwogCiAgbm9tZW1fZXJyOgotCWZvciAoaSA9IDA7IGkgPCBTVFY2ODBfTlVNU0NSQVRDSDsgaSsrKSB7Ci0JCWtmcmVlKHN0djY4MC0+c2NyYXRjaFtpXS5kYXRhKTsKLQkJc3R2NjgwLT5zY3JhdGNoW2ldLmRhdGEgPSBOVUxMOwotCX0KIAlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTVNCVUY7IGkrKykgewogCQl1c2Jfa2lsbF91cmIoc3R2NjgwLT51cmJbaV0pOwogCQl1c2JfZnJlZV91cmIoc3R2NjgwLT51cmJbaV0pOwpAQCAtNzQ1LDYgKzc0MSwxMSBAQAogCQlrZnJlZShzdHY2ODAtPnNidWZbaV0uZGF0YSk7CiAJCXN0djY4MC0+c2J1ZltpXS5kYXRhID0gTlVMTDsKIAl9CisJLyogdXNlZCBpbiBpcnEsIGZyZWUgb25seSBhcyBhbGwgVVJCcyBhcmUgZGVhZCAqLworCWZvciAoaSA9IDA7IGkgPCBTVFY2ODBfTlVNU0NSQVRDSDsgaSsrKSB7CisJCWtmcmVlKHN0djY4MC0+c2NyYXRjaFtpXS5kYXRhKTsKKwkJc3R2NjgwLT5zY3JhdGNoW2ldLmRhdGEgPSBOVUxMOworCX0KIAlyZXR1cm4gLUVOT01FTTsKIAogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwppbmRleCA1Mzc1OTQyLi4yODE2ZjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwpAQCAtODE5LDggKzgxOSw4IEBACiAKIAkJZmVfdHVuZXJfb3BzLT5nZXRfZnJlcXVlbmN5KCZ0LT5mZSwgJmFic19mcmVxKTsKIAkJZi0+ZnJlcXVlbmN5ID0gKFY0TDJfVFVORVJfUkFESU8gPT0gdC0+bW9kZSkgPwotCQkJKGFic19mcmVxICogMiArIDEyNS8yKSAvIDEyNSA6Ci0JCQkoYWJzX2ZyZXEgKyA2MjUwMC8yKSAvIDYyNTAwOworCQkJRElWX1JPVU5EX0NMT1NFU1QoYWJzX2ZyZXEgKiAyLCAxMjUpIDoKKwkJCURJVl9ST1VORF9DTE9TRVNUKGFic19mcmVxLCA2MjUwMCk7CiAJCXJldHVybiAwOwogCX0KIAlmLT5mcmVxdWVuY3kgPSAoVjRMMl9UVU5FUl9SQURJTyA9PSB0LT5tb2RlKSA/CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKaW5kZXggYWMwMjgwOC4uZDUzM2VhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwpAQCAtNjQ2LDE0ICs2NDYsMTQgQEAKIAkJdHZlZS0+aGFzX3JhZGlvID0gMTsKIAl9CiAKLQlpZiAodHVuZXIxIDwgc2l6ZW9mKGhhdXBwYXVnZV90dW5lcikvc2l6ZW9mKHN0cnVjdCBIQVVQUEFVR0VfVFVORVIpKSB7CisJaWYgKHR1bmVyMSA8IEFSUkFZX1NJWkUoaGF1cHBhdWdlX3R1bmVyKSkgewogCQl0dmVlLT50dW5lcl90eXBlID0gaGF1cHBhdWdlX3R1bmVyW3R1bmVyMV0uaWQ7CiAJCXRfbmFtZTEgPSBoYXVwcGF1Z2VfdHVuZXJbdHVuZXIxXS5uYW1lOwogCX0gZWxzZSB7CiAJCXRfbmFtZTEgPSAidW5rbm93biI7CiAJfQogCi0JaWYgKHR1bmVyMiA8IHNpemVvZihoYXVwcGF1Z2VfdHVuZXIpL3NpemVvZihzdHJ1Y3QgSEFVUFBBVUdFX1RVTkVSKSkgeworCWlmICh0dW5lcjIgPCBBUlJBWV9TSVpFKGhhdXBwYXVnZV90dW5lcikpIHsKIAkJdHZlZS0+dHVuZXIyX3R5cGUgPSBoYXVwcGF1Z2VfdHVuZXJbdHVuZXIyXS5pZDsKIAkJdF9uYW1lMiA9IGhhdXBwYXVnZV90dW5lclt0dW5lcjJdLm5hbWU7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCmluZGV4IDM2YTZiYTkuLmMzMjI1YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwpAQCAtMzQsNyArMzQsNyBAQAogc3RhdGljIHN0cnVjdCB1dmNfY29udHJvbF9pbmZvIHV2Y19jdHJsc1tdID0gewogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfQlJJR0hUTkVTU19DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfUFVfQlJJR0hUTkVTU19DT05UUk9MLAogCQkuaW5kZXgJCT0gMCwKIAkJLnNpemUJCT0gMiwKIAkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKQEAgLTQyLDcgKzQyLDcgQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfQ09OVFJBU1RfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX1BVX0NPTlRSQVNUX0NPTlRST0wsCiAJCS5pbmRleAkJPSAxLAogCQkuc2l6ZQkJPSAyLAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQpAQCAtNTAsNyArNTAsNyBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9IVUVfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX1BVX0hVRV9DT05UUk9MLAogCQkuaW5kZXgJCT0gMiwKIAkJLnNpemUJCT0gMiwKIAkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKQEAgLTU4LDcgKzU4LDcgQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfU0FUVVJBVElPTl9DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfUFVfU0FUVVJBVElPTl9DT05UUk9MLAogCQkuaW5kZXgJCT0gMywKIAkJLnNpemUJCT0gMiwKIAkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKQEAgLTY2LDcgKzY2LDcgQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfU0hBUlBORVNTX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19QVV9TSEFSUE5FU1NfQ09OVFJPTCwKIAkJLmluZGV4CQk9IDQsCiAJCS5zaXplCQk9IDIsCiAJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCkBAIC03NCw3ICs3NCw3IEBACiAJfSwKIAl7CiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCi0JCS5zZWxlY3Rvcgk9IFBVX0dBTU1BX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19QVV9HQU1NQV9DT05UUk9MLAogCQkuaW5kZXgJCT0gNSwKIAkJLnNpemUJCT0gMiwKIAkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKQEAgLTgyLDcgKzgyLDcgQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRV9DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfUFVfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRV9DT05UUk9MLAogCQkuaW5kZXgJCT0gNiwKIAkJLnNpemUJCT0gMiwKIAkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKQEAgLTkwLDcgKzkwLDcgQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfV0hJVEVfQkFMQU5DRV9DT01QT05FTlRfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX1BVX1dISVRFX0JBTEFOQ0VfQ09NUE9ORU5UX0NPTlRST0wsCiAJCS5pbmRleAkJPSA3LAogCQkuc2l6ZQkJPSA0LAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQpAQCAtOTgsNyArOTgsNyBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9CQUNLTElHSFRfQ09NUEVOU0FUSU9OX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19QVV9CQUNLTElHSFRfQ09NUEVOU0FUSU9OX0NPTlRST0wsCiAJCS5pbmRleAkJPSA4LAogCQkuc2l6ZQkJPSAyLAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQpAQCAtMTA2LDcgKzEwNiw3IEBACiAJfSwKIAl7CiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCi0JCS5zZWxlY3Rvcgk9IFBVX0dBSU5fQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX1BVX0dBSU5fQ09OVFJPTCwKIAkJLmluZGV4CQk9IDksCiAJCS5zaXplCQk9IDIsCiAJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCkBAIC0xMTQsNyArMTE0LDcgQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfUE9XRVJfTElORV9GUkVRVUVOQ1lfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX1BVX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0NPTlRST0wsCiAJCS5pbmRleAkJPSAxMCwKIAkJLnNpemUJCT0gMSwKIAkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKQEAgLTEyMiw3ICsxMjIsNyBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9IVUVfQVVUT19DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfUFVfSFVFX0FVVE9fQ09OVFJPTCwKIAkJLmluZGV4CQk9IDExLAogCQkuc2l6ZQkJPSAxLAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9DVVIKQEAgLTEzMCw3ICsxMzAsNyBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFX0FVVE9fQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX1BVX1dISVRFX0JBTEFOQ0VfVEVNUEVSQVRVUkVfQVVUT19DT05UUk9MLAogCQkuaW5kZXgJCT0gMTIsCiAJCS5zaXplCQk9IDEsCiAJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX0NVUgpAQCAtMTM4LDcgKzEzOCw3IEBACiAJfSwKIAl7CiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCi0JCS5zZWxlY3Rvcgk9IFBVX1dISVRFX0JBTEFOQ0VfQ09NUE9ORU5UX0FVVE9fQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX1BVX1dISVRFX0JBTEFOQ0VfQ09NUE9ORU5UX0FVVE9fQ09OVFJPTCwKIAkJLmluZGV4CQk9IDEzLAogCQkuc2l6ZQkJPSAxLAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9DVVIKQEAgLTE0Niw3ICsxNDYsNyBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9ESUdJVEFMX01VTFRJUExJRVJfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX1BVX0RJR0lUQUxfTVVMVElQTElFUl9DT05UUk9MLAogCQkuaW5kZXgJCT0gMTQsCiAJCS5zaXplCQk9IDIsCiAJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfRElHSVRBTF9NVUxUSVBMSUVSX0xJTUlUX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19QVV9ESUdJVEFMX01VTFRJUExJRVJfTElNSVRfQ09OVFJPTCwKIAkJLmluZGV4CQk9IDE1LAogCQkuc2l6ZQkJPSAyLAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQpAQCAtMTYyLDIxICsxNjIsMjEgQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfQU5BTE9HX1ZJREVPX1NUQU5EQVJEX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19QVV9BTkFMT0dfVklERU9fU1RBTkRBUkRfQ09OVFJPTCwKIAkJLmluZGV4CQk9IDE2LAogCQkuc2l6ZQkJPSAxLAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfR0VUX0NVUiwKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfQU5BTE9HX0xPQ0tfU1RBVFVTX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19QVV9BTkFMT0dfTE9DS19TVEFUVVNfQ09OVFJPTCwKIAkJLmluZGV4CQk9IDE3LAogCQkuc2l6ZQkJPSAxLAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfR0VUX0NVUiwKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAotCQkuc2VsZWN0b3IJPSBDVF9TQ0FOTklOR19NT0RFX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19DVF9TQ0FOTklOR19NT0RFX0NPTlRST0wsCiAJCS5pbmRleAkJPSAwLAogCQkuc2l6ZQkJPSAxLAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9DVVIKQEAgLTE4NCw3ICsxODQsNyBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCi0JCS5zZWxlY3Rvcgk9IENUX0FFX01PREVfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX0NUX0FFX01PREVfQ09OVFJPTCwKIAkJLmluZGV4CQk9IDEsCiAJCS5zaXplCQk9IDEsCiAJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX0NVUgpAQCAtMTkzLDcgKzE5Myw3IEBACiAJfSwKIAl7CiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKLQkJLnNlbGVjdG9yCT0gQ1RfQUVfUFJJT1JJVFlfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX0NUX0FFX1BSSU9SSVRZX0NPTlRST0wsCiAJCS5pbmRleAkJPSAyLAogCQkuc2l6ZQkJPSAxLAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9DVVIKQEAgLTIwMSw3ICsyMDEsNyBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCi0JCS5zZWxlY3Rvcgk9IENUX0VYUE9TVVJFX1RJTUVfQUJTT0xVVEVfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX0NUX0VYUE9TVVJFX1RJTUVfQUJTT0xVVEVfQ09OVFJPTCwKIAkJLmluZGV4CQk9IDMsCiAJCS5zaXplCQk9IDQsCiAJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCkBAIC0yMDksNyArMjA5LDcgQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAotCQkuc2VsZWN0b3IJPSBDVF9FWFBPU1VSRV9USU1FX1JFTEFUSVZFX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19DVF9FWFBPU1VSRV9USU1FX1JFTEFUSVZFX0NPTlRST0wsCiAJCS5pbmRleAkJPSA0LAogCQkuc2l6ZQkJPSAxLAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9DVVIKQEAgLTIxNyw3ICsyMTcsNyBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCi0JCS5zZWxlY3Rvcgk9IENUX0ZPQ1VTX0FCU09MVVRFX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19DVF9GT0NVU19BQlNPTFVURV9DT05UUk9MLAogCQkuaW5kZXgJCT0gNSwKIAkJLnNpemUJCT0gMiwKIAkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKQEAgLTIyNSw3ICsyMjUsNyBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCi0JCS5zZWxlY3Rvcgk9IENUX0ZPQ1VTX1JFTEFUSVZFX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19DVF9GT0NVU19SRUxBVElWRV9DT05UUk9MLAogCQkuaW5kZXgJCT0gNiwKIAkJLnNpemUJCT0gMiwKIAkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKQEAgLTIzMyw3ICsyMzMsNyBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCi0JCS5zZWxlY3Rvcgk9IENUX0lSSVNfQUJTT0xVVEVfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX0NUX0lSSVNfQUJTT0xVVEVfQ09OVFJPTCwKIAkJLmluZGV4CQk9IDcsCiAJCS5zaXplCQk9IDIsCiAJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCkBAIC0yNDEsNyArMjQxLDcgQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAotCQkuc2VsZWN0b3IJPSBDVF9JUklTX1JFTEFUSVZFX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19DVF9JUklTX1JFTEFUSVZFX0NPTlRST0wsCiAJCS5pbmRleAkJPSA4LAogCQkuc2l6ZQkJPSAxLAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9DVVIKQEAgLTI0OSw3ICsyNDksNyBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCi0JCS5zZWxlY3Rvcgk9IENUX1pPT01fQUJTT0xVVEVfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX0NUX1pPT01fQUJTT0xVVEVfQ09OVFJPTCwKIAkJLmluZGV4CQk9IDksCiAJCS5zaXplCQk9IDIsCiAJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCkBAIC0yNTcsNyArMjU3LDcgQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAotCQkuc2VsZWN0b3IJPSBDVF9aT09NX1JFTEFUSVZFX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19DVF9aT09NX1JFTEFUSVZFX0NPTlRST0wsCiAJCS5pbmRleAkJPSAxMCwKIAkJLnNpemUJCT0gMywKIAkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKQEAgLTI2NSw3ICsyNjUsNyBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCi0JCS5zZWxlY3Rvcgk9IENUX1BBTlRJTFRfQUJTT0xVVEVfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX0NUX1BBTlRJTFRfQUJTT0xVVEVfQ09OVFJPTCwKIAkJLmluZGV4CQk9IDExLAogCQkuc2l6ZQkJPSA4LAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQpAQCAtMjczLDcgKzI3Myw3IEBACiAJfSwKIAl7CiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKLQkJLnNlbGVjdG9yCT0gQ1RfUEFOVElMVF9SRUxBVElWRV9DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfQ1RfUEFOVElMVF9SRUxBVElWRV9DT05UUk9MLAogCQkuaW5kZXgJCT0gMTIsCiAJCS5zaXplCQk9IDQsCiAJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCkBAIC0yODEsNyArMjgxLDcgQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAotCQkuc2VsZWN0b3IJPSBDVF9ST0xMX0FCU09MVVRFX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19DVF9ST0xMX0FCU09MVVRFX0NPTlRST0wsCiAJCS5pbmRleAkJPSAxMywKIAkJLnNpemUJCT0gMiwKIAkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKQEAgLTI4OSw3ICsyODksNyBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCi0JCS5zZWxlY3Rvcgk9IENUX1JPTExfUkVMQVRJVkVfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX0NUX1JPTExfUkVMQVRJVkVfQ09OVFJPTCwKIAkJLmluZGV4CQk9IDE0LAogCQkuc2l6ZQkJPSAyLAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJfSwKIAl7CiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKLQkJLnNlbGVjdG9yCT0gQ1RfRk9DVVNfQVVUT19DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfQ1RfRk9DVVNfQVVUT19DT05UUk9MLAogCQkuaW5kZXgJCT0gMTcsCiAJCS5zaXplCQk9IDEsCiAJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX0NVUgpAQCAtMzA1LDcgKzMwNSw3IEBACiAJfSwKIAl7CiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKLQkJLnNlbGVjdG9yCT0gQ1RfUFJJVkFDWV9DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfQ1RfUFJJVkFDWV9DT05UUk9MLAogCQkuaW5kZXgJCT0gMTgsCiAJCS5zaXplCQk9IDEsCiAJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX0NVUgpAQCAtMzMyLDEzICszMzIsMTMgQEAKIAlfX3M4IHpvb20gPSAoX19zOClkYXRhWzBdOwogCiAJc3dpdGNoIChxdWVyeSkgewotCWNhc2UgR0VUX0NVUjoKKwljYXNlIFVWQ19HRVRfQ1VSOgogCQlyZXR1cm4gKHpvb20gPT0gMCkgPyAwIDogKHpvb20gPiAwID8gZGF0YVsyXSA6IC1kYXRhWzJdKTsKIAotCWNhc2UgR0VUX01JTjoKLQljYXNlIEdFVF9NQVg6Ci0JY2FzZSBHRVRfUkVTOgotCWNhc2UgR0VUX0RFRjoKKwljYXNlIFVWQ19HRVRfTUlOOgorCWNhc2UgVVZDX0dFVF9NQVg6CisJY2FzZSBVVkNfR0VUX1JFUzoKKwljYXNlIFVWQ19HRVRfREVGOgogCWRlZmF1bHQ6CiAJCXJldHVybiBkYXRhWzJdOwogCX0KQEAgLTM1Niw3ICszNTYsNyBAQAogCQkuaWQJCT0gVjRMMl9DSURfQlJJR0hUTkVTUywKIAkJLm5hbWUJCT0gIkJyaWdodG5lc3MiLAogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9CUklHSFRORVNTX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19QVV9CUklHSFRORVNTX0NPTlRST0wsCiAJCS5zaXplCQk9IDE2LAogCQkub2Zmc2V0CQk9IDAsCiAJCS52NGwyX3R5cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApAQCAtMzY2LDcgKzM2Niw3IEBACiAJCS5pZAkJPSBWNEwyX0NJRF9DT05UUkFTVCwKIAkJLm5hbWUJCT0gIkNvbnRyYXN0IiwKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfQ09OVFJBU1RfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX1BVX0NPTlRSQVNUX0NPTlRST0wsCiAJCS5zaXplCQk9IDE2LAogCQkub2Zmc2V0CQk9IDAsCiAJCS52NGwyX3R5cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApAQCAtMzc2LDcgKzM3Niw3IEBACiAJCS5pZAkJPSBWNEwyX0NJRF9IVUUsCiAJCS5uYW1lCQk9ICJIdWUiLAogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9IVUVfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX1BVX0hVRV9DT05UUk9MLAogCQkuc2l6ZQkJPSAxNiwKIAkJLm9mZnNldAkJPSAwLAogCQkudjRsMl90eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTM4Niw3ICszODYsNyBAQAogCQkuaWQJCT0gVjRMMl9DSURfU0FUVVJBVElPTiwKIAkJLm5hbWUJCT0gIlNhdHVyYXRpb24iLAogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9TQVRVUkFUSU9OX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19QVV9TQVRVUkFUSU9OX0NPTlRST0wsCiAJCS5zaXplCQk9IDE2LAogCQkub2Zmc2V0CQk9IDAsCiAJCS52NGwyX3R5cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApAQCAtMzk2LDcgKzM5Niw3IEBACiAJCS5pZAkJPSBWNEwyX0NJRF9TSEFSUE5FU1MsCiAJCS5uYW1lCQk9ICJTaGFycG5lc3MiLAogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9TSEFSUE5FU1NfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX1BVX1NIQVJQTkVTU19DT05UUk9MLAogCQkuc2l6ZQkJPSAxNiwKIAkJLm9mZnNldAkJPSAwLAogCQkudjRsMl90eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTQwNiw3ICs0MDYsNyBAQAogCQkuaWQJCT0gVjRMMl9DSURfR0FNTUEsCiAJCS5uYW1lCQk9ICJHYW1tYSIsCiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCi0JCS5zZWxlY3Rvcgk9IFBVX0dBTU1BX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19QVV9HQU1NQV9DT05UUk9MLAogCQkuc2l6ZQkJPSAxNiwKIAkJLm9mZnNldAkJPSAwLAogCQkudjRsMl90eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTQxNiw3ICs0MTYsNyBAQAogCQkuaWQJCT0gVjRMMl9DSURfQkFDS0xJR0hUX0NPTVBFTlNBVElPTiwKIAkJLm5hbWUJCT0gIkJhY2tsaWdodCBDb21wZW5zYXRpb24iLAogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9CQUNLTElHSFRfQ09NUEVOU0FUSU9OX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19QVV9CQUNLTElHSFRfQ09NUEVOU0FUSU9OX0NPTlRST0wsCiAJCS5zaXplCQk9IDE2LAogCQkub2Zmc2V0CQk9IDAsCiAJCS52NGwyX3R5cGUJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApAQCAtNDI2LDcgKzQyNiw3IEBACiAJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAogCQkubmFtZQkJPSAiR2FpbiIsCiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCi0JCS5zZWxlY3Rvcgk9IFBVX0dBSU5fQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX1BVX0dBSU5fQ09OVFJPTCwKIAkJLnNpemUJCT0gMTYsCiAJCS5vZmZzZXQJCT0gMCwKIAkJLnY0bDJfdHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC00MzYsNyArNDM2LDcgQEAKIAkJLmlkCQk9IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLAogCQkubmFtZQkJPSAiUG93ZXIgTGluZSBGcmVxdWVuY3kiLAogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfUFVfUE9XRVJfTElORV9GUkVRVUVOQ1lfQ09OVFJPTCwKIAkJLnNpemUJCT0gMiwKIAkJLm9mZnNldAkJPSAwLAogCQkudjRsMl90eXBlCT0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCQkuaWQJCT0gVjRMMl9DSURfSFVFX0FVVE8sCiAJCS5uYW1lCQk9ICJIdWUsIEF1dG8iLAogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9IVUVfQVVUT19DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfUFVfSFVFX0FVVE9fQ09OVFJPTCwKIAkJLnNpemUJCT0gMSwKIAkJLm9mZnNldAkJPSAwLAogCQkudjRsMl90eXBlCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCQkuaWQJCT0gVjRMMl9DSURfRVhQT1NVUkVfQVVUTywKIAkJLm5hbWUJCT0gIkV4cG9zdXJlLCBBdXRvIiwKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAotCQkuc2VsZWN0b3IJPSBDVF9BRV9NT0RFX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19DVF9BRV9NT0RFX0NPTlRST0wsCiAJCS5zaXplCQk9IDQsCiAJCS5vZmZzZXQJCT0gMCwKIAkJLnY0bDJfdHlwZQk9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCkBAIC00NzAsNyArNDcwLDcgQEAKIAkJLmlkCQk9IFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE9fUFJJT1JJVFksCiAJCS5uYW1lCQk9ICJFeHBvc3VyZSwgQXV0byBQcmlvcml0eSIsCiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKLQkJLnNlbGVjdG9yCT0gQ1RfQUVfUFJJT1JJVFlfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX0NUX0FFX1BSSU9SSVRZX0NPTlRST0wsCiAJCS5zaXplCQk9IDEsCiAJCS5vZmZzZXQJCT0gMCwKIAkJLnY0bDJfdHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCkBAIC00ODAsNyArNDgwLDcgQEAKIAkJLmlkCQk9IFY0TDJfQ0lEX0VYUE9TVVJFX0FCU09MVVRFLAogCQkubmFtZQkJPSAiRXhwb3N1cmUgKEFic29sdXRlKSIsCiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKLQkJLnNlbGVjdG9yCT0gQ1RfRVhQT1NVUkVfVElNRV9BQlNPTFVURV9DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfQ1RfRVhQT1NVUkVfVElNRV9BQlNPTFVURV9DT05UUk9MLAogCQkuc2l6ZQkJPSAzMiwKIAkJLm9mZnNldAkJPSAwLAogCQkudjRsMl90eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCQkuaWQJCT0gVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFLAogCQkubmFtZQkJPSAiV2hpdGUgQmFsYW5jZSBUZW1wZXJhdHVyZSwgQXV0byIsCiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCi0JCS5zZWxlY3Rvcgk9IFBVX1dISVRFX0JBTEFOQ0VfVEVNUEVSQVRVUkVfQVVUT19DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfUFVfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRV9BVVRPX0NPTlRST0wsCiAJCS5zaXplCQk9IDEsCiAJCS5vZmZzZXQJCT0gMCwKIAkJLnY0bDJfdHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCkBAIC01MDAsNyArNTAwLDcgQEAKIAkJLmlkCQk9IFY0TDJfQ0lEX1dISVRFX0JBTEFOQ0VfVEVNUEVSQVRVUkUsCiAJCS5uYW1lCQk9ICJXaGl0ZSBCYWxhbmNlIFRlbXBlcmF0dXJlIiwKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRV9DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfUFVfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRV9DT05UUk9MLAogCQkuc2l6ZQkJPSAxNiwKIAkJLm9mZnNldAkJPSAwLAogCQkudjRsMl90eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTUxMCw3ICs1MTAsNyBAQAogCQkuaWQJCT0gVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFLAogCQkubmFtZQkJPSAiV2hpdGUgQmFsYW5jZSBDb21wb25lbnQsIEF1dG8iLAogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9XSElURV9CQUxBTkNFX0NPTVBPTkVOVF9BVVRPX0NPTlRST0wsCisJCS5zZWxlY3Rvcgk9IFVWQ19QVV9XSElURV9CQUxBTkNFX0NPTVBPTkVOVF9BVVRPX0NPTlRST0wsCiAJCS5zaXplCQk9IDEsCiAJCS5vZmZzZXQJCT0gMCwKIAkJLnY0bDJfdHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCkBAIC01MjAsNyArNTIwLDcgQEAKIAkJLmlkCQk9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKIAkJLm5hbWUJCT0gIldoaXRlIEJhbGFuY2UgQmx1ZSBDb21wb25lbnQiLAogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9XSElURV9CQUxBTkNFX0NPTVBPTkVOVF9DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfUFVfV0hJVEVfQkFMQU5DRV9DT01QT05FTlRfQ09OVFJPTCwKIAkJLnNpemUJCT0gMTYsCiAJCS5vZmZzZXQJCT0gMCwKIAkJLnY0bDJfdHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC01MzAsNyArNTMwLDcgQEAKIAkJLmlkCQk9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAogCQkubmFtZQkJPSAiV2hpdGUgQmFsYW5jZSBSZWQgQ29tcG9uZW50IiwKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfV0hJVEVfQkFMQU5DRV9DT01QT05FTlRfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX1BVX1dISVRFX0JBTEFOQ0VfQ09NUE9ORU5UX0NPTlRST0wsCiAJCS5zaXplCQk9IDE2LAogCQkub2Zmc2V0CQk9IDE2LAogCQkudjRsMl90eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTU0MCw3ICs1NDAsNyBAQAogCQkuaWQJCT0gVjRMMl9DSURfRk9DVVNfQUJTT0xVVEUsCiAJCS5uYW1lCQk9ICJGb2N1cyAoYWJzb2x1dGUpIiwKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAotCQkuc2VsZWN0b3IJPSBDVF9GT0NVU19BQlNPTFVURV9DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfQ1RfRk9DVVNfQUJTT0xVVEVfQ09OVFJPTCwKIAkJLnNpemUJCT0gMTYsCiAJCS5vZmZzZXQJCT0gMCwKIAkJLnY0bDJfdHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC01NTAsNyArNTUwLDcgQEAKIAkJLmlkCQk9IFY0TDJfQ0lEX0ZPQ1VTX0FVVE8sCiAJCS5uYW1lCQk9ICJGb2N1cywgQXV0byIsCiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKLQkJLnNlbGVjdG9yCT0gQ1RfRk9DVVNfQVVUT19DT05UUk9MLAorCQkuc2VsZWN0b3IJPSBVVkNfQ1RfRk9DVVNfQVVUT19DT05UUk9MLAogCQkuc2l6ZQkJPSAxLAogCQkub2Zmc2V0CQk9IDAsCiAJCS52NGwyX3R5cGUJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLApAQCAtNTYwLDcgKzU2MCw3IEBACiAJCS5pZAkJPSBWNEwyX0NJRF9aT09NX0FCU09MVVRFLAogCQkubmFtZQkJPSAiWm9vbSwgQWJzb2x1dGUiLAogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCi0JCS5zZWxlY3Rvcgk9IENUX1pPT01fQUJTT0xVVEVfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX0NUX1pPT01fQUJTT0xVVEVfQ09OVFJPTCwKIAkJLnNpemUJCT0gMTYsCiAJCS5vZmZzZXQJCT0gMCwKIAkJLnY0bDJfdHlwZQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC01NzAsNyArNTcwLDcgQEAKIAkJLmlkCQk9IFY0TDJfQ0lEX1pPT01fQ09OVElOVU9VUywKIAkJLm5hbWUJCT0gIlpvb20sIENvbnRpbnVvdXMiLAogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCi0JCS5zZWxlY3Rvcgk9IENUX1pPT01fUkVMQVRJVkVfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX0NUX1pPT01fUkVMQVRJVkVfQ09OVFJPTCwKIAkJLnNpemUJCT0gMCwKIAkJLm9mZnNldAkJPSAwLAogCQkudjRsMl90eXBlCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTU4Miw3ICs1ODIsNyBAQAogCQkuaWQJCT0gVjRMMl9DSURfUFJJVkFDWSwKIAkJLm5hbWUJCT0gIlByaXZhY3kiLAogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCi0JCS5zZWxlY3Rvcgk9IENUX1BSSVZBQ1lfQ09OVFJPTCwKKwkJLnNlbGVjdG9yCT0gVVZDX0NUX1BSSVZBQ1lfQ09OVFJPTCwKIAkJLnNpemUJCT0gMSwKIAkJLm9mZnNldAkJPSAwLAogCQkudjRsMl90eXBlCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKQEAgLTY3NSwxNiArNjc1LDE2IEBACiBzdGF0aWMgaW50IHV2Y19lbnRpdHlfbWF0Y2hfZ3VpZChzdHJ1Y3QgdXZjX2VudGl0eSAqZW50aXR5LCBfX3U4IGd1aWRbMTZdKQogewogCXN3aXRjaCAoVVZDX0VOVElUWV9UWVBFKGVudGl0eSkpIHsKLQljYXNlIElUVF9DQU1FUkE6CisJY2FzZSBVVkNfSVRUX0NBTUVSQToKIAkJcmV0dXJuIG1lbWNtcCh1dmNfY2FtZXJhX2d1aWQsIGd1aWQsIDE2KSA9PSAwOwogCi0JY2FzZSBJVFRfTUVESUFfVFJBTlNQT1JUX0lOUFVUOgorCWNhc2UgVVZDX0lUVF9NRURJQV9UUkFOU1BPUlRfSU5QVVQ6CiAJCXJldHVybiBtZW1jbXAodXZjX21lZGlhX3RyYW5zcG9ydF9pbnB1dF9ndWlkLCBndWlkLCAxNikgPT0gMDsKIAotCWNhc2UgVkNfUFJPQ0VTU0lOR19VTklUOgorCWNhc2UgVVZDX1ZDX1BST0NFU1NJTkdfVU5JVDoKIAkJcmV0dXJuIG1lbWNtcCh1dmNfcHJvY2Vzc2luZ19ndWlkLCBndWlkLCAxNikgPT0gMDsKIAotCWNhc2UgVkNfRVhURU5TSU9OX1VOSVQ6CisJY2FzZSBVVkNfVkNfRVhURU5TSU9OX1VOSVQ6CiAJCXJldHVybiBtZW1jbXAoZW50aXR5LT5leHRlbnNpb24uZ3VpZEV4dGVuc2lvbkNvZGUsCiAJCQkgICAgICBndWlkLCAxNikgPT0gMDsKIApAQCAtNzI5LDcgKzcyOSw3IEBACiAJfQogfQogCi1zdHJ1Y3QgdXZjX2NvbnRyb2wgKnV2Y19maW5kX2NvbnRyb2woc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorc3RydWN0IHV2Y19jb250cm9sICp1dmNfZmluZF9jb250cm9sKHN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluLAogCV9fdTMyIHY0bDJfaWQsIHN0cnVjdCB1dmNfY29udHJvbF9tYXBwaW5nICoqbWFwcGluZykKIHsKIAlzdHJ1Y3QgdXZjX2NvbnRyb2wgKmN0cmwgPSBOVUxMOwpAQCAtNzQyLDE3ICs3NDIsMTcgQEAKIAl2NGwyX2lkICY9IFY0TDJfQ1RSTF9JRF9NQVNLOwogCiAJLyogRmluZCB0aGUgY29udHJvbC4gKi8KLQlfX3V2Y19maW5kX2NvbnRyb2wodmlkZW8tPnByb2Nlc3NpbmcsIHY0bDJfaWQsIG1hcHBpbmcsICZjdHJsLCBuZXh0KTsKKwlfX3V2Y19maW5kX2NvbnRyb2woY2hhaW4tPnByb2Nlc3NpbmcsIHY0bDJfaWQsIG1hcHBpbmcsICZjdHJsLCBuZXh0KTsKIAlpZiAoY3RybCAmJiAhbmV4dCkKIAkJcmV0dXJuIGN0cmw7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudGl0eSwgJnZpZGVvLT5pdGVybXMsIGNoYWluKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRpdHksICZjaGFpbi0+aXRlcm1zLCBjaGFpbikgewogCQlfX3V2Y19maW5kX2NvbnRyb2woZW50aXR5LCB2NGwyX2lkLCBtYXBwaW5nLCAmY3RybCwgbmV4dCk7CiAJCWlmIChjdHJsICYmICFuZXh0KQogCQkJcmV0dXJuIGN0cmw7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRpdHksICZ2aWRlby0+ZXh0ZW5zaW9ucywgY2hhaW4pIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudGl0eSwgJmNoYWluLT5leHRlbnNpb25zLCBjaGFpbikgewogCQlfX3V2Y19maW5kX2NvbnRyb2woZW50aXR5LCB2NGwyX2lkLCBtYXBwaW5nLCAmY3RybCwgbmV4dCk7CiAJCWlmIChjdHJsICYmICFuZXh0KQogCQkJcmV0dXJuIGN0cmw7CkBAIC03NjUsNyArNzY1LDcgQEAKIAlyZXR1cm4gY3RybDsKIH0KIAotaW50IHV2Y19xdWVyeV92NGwyX2N0cmwoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAoraW50IHV2Y19xdWVyeV92NGwyX2N0cmwoc3RydWN0IHV2Y192aWRlb19jaGFpbiAqY2hhaW4sCiAJc3RydWN0IHY0bDJfcXVlcnljdHJsICp2NGwyX2N0cmwpCiB7CiAJc3RydWN0IHV2Y19jb250cm9sICpjdHJsOwpAQCAtNzc1LDcgKzc3NSw3IEBACiAJX191OCAqZGF0YTsKIAlpbnQgcmV0OwogCi0JY3RybCA9IHV2Y19maW5kX2NvbnRyb2wodmlkZW8sIHY0bDJfY3RybC0+aWQsICZtYXBwaW5nKTsKKwljdHJsID0gdXZjX2ZpbmRfY29udHJvbChjaGFpbiwgdjRsMl9jdHJsLT5pZCwgJm1hcHBpbmcpOwogCWlmIChjdHJsID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC03OTMsMTEgKzc5MywxMyBAQAogCQl2NGwyX2N0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsKIAogCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9ERUYpIHsKLQkJaWYgKChyZXQgPSB1dmNfcXVlcnlfY3RybCh2aWRlby0+ZGV2LCBHRVRfREVGLCBjdHJsLT5lbnRpdHktPmlkLAotCQkJCXZpZGVvLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAotCQkJCWRhdGEsIGN0cmwtPmluZm8tPnNpemUpKSA8IDApCisJCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfREVGLCBjdHJsLT5lbnRpdHktPmlkLAorCQkJCSAgICAgY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCisJCQkJICAgICBkYXRhLCBjdHJsLT5pbmZvLT5zaXplKTsKKwkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKLQkJdjRsMl9jdHJsLT5kZWZhdWx0X3ZhbHVlID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIEdFVF9ERUYsIGRhdGEpOworCQl2NGwyX2N0cmwtPmRlZmF1bHRfdmFsdWUgPQorCQkJbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfREVGLCBkYXRhKTsKIAl9CiAKIAlzd2l0Y2ggKG1hcHBpbmctPnY0bDJfdHlwZSkgewpAQCAtODI5LDI1ICs4MzEsMjggQEAKIAl9CiAKIAlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfTUlOKSB7Ci0JCWlmICgocmV0ID0gdXZjX3F1ZXJ5X2N0cmwodmlkZW8tPmRldiwgR0VUX01JTiwgY3RybC0+ZW50aXR5LT5pZCwKLQkJCQl2aWRlby0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKLQkJCQlkYXRhLCBjdHJsLT5pbmZvLT5zaXplKSkgPCAwKQorCQlyZXQgPSB1dmNfcXVlcnlfY3RybChjaGFpbi0+ZGV2LCBVVkNfR0VUX01JTiwgY3RybC0+ZW50aXR5LT5pZCwKKwkJCQkgICAgIGNoYWluLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAorCQkJCSAgICAgZGF0YSwgY3RybC0+aW5mby0+c2l6ZSk7CisJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdXQ7Ci0JCXY0bDJfY3RybC0+bWluaW11bSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBHRVRfTUlOLCBkYXRhKTsKKwkJdjRsMl9jdHJsLT5taW5pbXVtID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfTUlOLCBkYXRhKTsKIAl9CiAJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX01BWCkgewotCQlpZiAoKHJldCA9IHV2Y19xdWVyeV9jdHJsKHZpZGVvLT5kZXYsIEdFVF9NQVgsIGN0cmwtPmVudGl0eS0+aWQsCi0JCQkJdmlkZW8tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCi0JCQkJZGF0YSwgY3RybC0+aW5mby0+c2l6ZSkpIDwgMCkKKwkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoY2hhaW4tPmRldiwgVVZDX0dFVF9NQVgsIGN0cmwtPmVudGl0eS0+aWQsCisJCQkJICAgICBjaGFpbi0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKKwkJCQkgICAgIGRhdGEsIGN0cmwtPmluZm8tPnNpemUpOworCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwotCQl2NGwyX2N0cmwtPm1heGltdW0gPSBtYXBwaW5nLT5nZXQobWFwcGluZywgR0VUX01BWCwgZGF0YSk7CisJCXY0bDJfY3RybC0+bWF4aW11bSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX01BWCwgZGF0YSk7CiAJfQogCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9SRVMpIHsKLQkJaWYgKChyZXQgPSB1dmNfcXVlcnlfY3RybCh2aWRlby0+ZGV2LCBHRVRfUkVTLCBjdHJsLT5lbnRpdHktPmlkLAotCQkJCXZpZGVvLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAotCQkJCWRhdGEsIGN0cmwtPmluZm8tPnNpemUpKSA8IDApCisJCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfUkVTLCBjdHJsLT5lbnRpdHktPmlkLAorCQkJCSAgICAgY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCisJCQkJICAgICBkYXRhLCBjdHJsLT5pbmZvLT5zaXplKTsKKwkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKLQkJdjRsMl9jdHJsLT5zdGVwID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIEdFVF9SRVMsIGRhdGEpOworCQl2NGwyX2N0cmwtPnN0ZXAgPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9SRVMsIGRhdGEpOwogCX0KIAogCXJldCA9IDA7CkBAIC04ODEsOSArODg2LDkgQEAKICAqIChVVkNfQ1RSTF9EQVRBX0JBQ0tVUCkgZm9yIGFsbCBkaXJ0eSBjb250cm9scy4gQm90aCBmdW5jdGlvbnMgcmVsZWFzZSB0aGUKICAqIGNvbnRyb2wgbG9jay4KICAqLwotaW50IHV2Y19jdHJsX2JlZ2luKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbykKK2ludCB1dmNfY3RybF9iZWdpbihzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbikKIHsKLQlyZXR1cm4gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2aWRlby0+Y3RybF9tdXRleCkgPyAtRVJFU1RBUlRTWVMgOiAwOworCXJldHVybiBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNoYWluLT5jdHJsX211dGV4KSA/IC1FUkVTVEFSVFNZUyA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgdXZjX2N0cmxfY29tbWl0X2VudGl0eShzdHJ1Y3QgdXZjX2RldmljZSAqZGV2LApAQCAtOTEyLDcgKzkxNyw3IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoIXJvbGxiYWNrKQotCQkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoZGV2LCBTRVRfQ1VSLCBjdHJsLT5lbnRpdHktPmlkLAorCQkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoZGV2LCBVVkNfU0VUX0NVUiwgY3RybC0+ZW50aXR5LT5pZCwKIAkJCQlkZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAogCQkJCXV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9DVVJSRU5UKSwKIAkJCQljdHJsLT5pbmZvLT5zaXplKTsKQEAgLTkzMywzNCArOTM4LDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBfX3V2Y19jdHJsX2NvbW1pdChzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sIGludCByb2xsYmFjaykKK2ludCBfX3V2Y19jdHJsX2NvbW1pdChzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbiwgaW50IHJvbGxiYWNrKQogewogCXN0cnVjdCB1dmNfZW50aXR5ICplbnRpdHk7CiAJaW50IHJldCA9IDA7CiAKIAkvKiBGaW5kIHRoZSBjb250cm9sLiAqLwotCXJldCA9IHV2Y19jdHJsX2NvbW1pdF9lbnRpdHkodmlkZW8tPmRldiwgdmlkZW8tPnByb2Nlc3NpbmcsIHJvbGxiYWNrKTsKKwlyZXQgPSB1dmNfY3RybF9jb21taXRfZW50aXR5KGNoYWluLT5kZXYsIGNoYWluLT5wcm9jZXNzaW5nLCByb2xsYmFjayk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZG9uZTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50aXR5LCAmdmlkZW8tPml0ZXJtcywgY2hhaW4pIHsKLQkJcmV0ID0gdXZjX2N0cmxfY29tbWl0X2VudGl0eSh2aWRlby0+ZGV2LCBlbnRpdHksIHJvbGxiYWNrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudGl0eSwgJmNoYWluLT5pdGVybXMsIGNoYWluKSB7CisJCXJldCA9IHV2Y19jdHJsX2NvbW1pdF9lbnRpdHkoY2hhaW4tPmRldiwgZW50aXR5LCByb2xsYmFjayk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBkb25lOwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50aXR5LCAmdmlkZW8tPmV4dGVuc2lvbnMsIGNoYWluKSB7Ci0JCXJldCA9IHV2Y19jdHJsX2NvbW1pdF9lbnRpdHkodmlkZW8tPmRldiwgZW50aXR5LCByb2xsYmFjayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRpdHksICZjaGFpbi0+ZXh0ZW5zaW9ucywgY2hhaW4pIHsKKwkJcmV0ID0gdXZjX2N0cmxfY29tbWl0X2VudGl0eShjaGFpbi0+ZGV2LCBlbnRpdHksIHJvbGxiYWNrKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGRvbmU7CiAJfQogCiBkb25lOgotCW11dGV4X3VubG9jaygmdmlkZW8tPmN0cmxfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hhaW4tPmN0cmxfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKLWludCB1dmNfY3RybF9nZXQoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAoraW50IHV2Y19jdHJsX2dldChzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbiwKIAlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqeGN0cmwpCiB7CiAJc3RydWN0IHV2Y19jb250cm9sICpjdHJsOwpAQCAtOTY5LDEzICs5NzQsMTMgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmV0OwogCi0JY3RybCA9IHV2Y19maW5kX2NvbnRyb2wodmlkZW8sIHhjdHJsLT5pZCwgJm1hcHBpbmcpOworCWN0cmwgPSB1dmNfZmluZF9jb250cm9sKGNoYWluLCB4Y3RybC0+aWQsICZtYXBwaW5nKTsKIAlpZiAoY3RybCA9PSBOVUxMIHx8IChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9DVVIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFjdHJsLT5sb2FkZWQpIHsKLQkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwodmlkZW8tPmRldiwgR0VUX0NVUiwgY3RybC0+ZW50aXR5LT5pZCwKLQkJCQl2aWRlby0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKKwkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoY2hhaW4tPmRldiwgVVZDX0dFVF9DVVIsIGN0cmwtPmVudGl0eS0+aWQsCisJCQkJY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCiAJCQkJdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX0NVUlJFTlQpLAogCQkJCWN0cmwtPmluZm8tPnNpemUpOwogCQlpZiAocmV0IDwgMCkKQEAgLTk4NCw3ICs5ODksNyBAQAogCQljdHJsLT5sb2FkZWQgPSAxOwogCX0KIAotCXhjdHJsLT52YWx1ZSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBHRVRfQ1VSLAorCXhjdHJsLT52YWx1ZSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX0NVUiwKIAkJdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX0NVUlJFTlQpKTsKIAogCWlmIChtYXBwaW5nLT52NGwyX3R5cGUgPT0gVjRMMl9DVFJMX1RZUEVfTUVOVSkgewpAQCAtMTAwMCw3ICsxMDA1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHV2Y19jdHJsX3NldChzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCitpbnQgdXZjX2N0cmxfc2V0KHN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluLAogCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICp4Y3RybCkKIHsKIAlzdHJ1Y3QgdXZjX2NvbnRyb2wgKmN0cmw7CkBAIC0xMDA4LDcgKzEwMTMsNyBAQAogCXMzMiB2YWx1ZSA9IHhjdHJsLT52YWx1ZTsKIAlpbnQgcmV0OwogCi0JY3RybCA9IHV2Y19maW5kX2NvbnRyb2wodmlkZW8sIHhjdHJsLT5pZCwgJm1hcHBpbmcpOworCWN0cmwgPSB1dmNfZmluZF9jb250cm9sKGNoYWluLCB4Y3RybC0+aWQsICZtYXBwaW5nKTsKIAlpZiAoY3RybCA9PSBOVUxMIHx8IChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX1NFVF9DVVIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMDIzLDggKzEwMjgsOCBAQAogCQkJbWVtc2V0KHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9DVVJSRU5UKSwKIAkJCQkwLCBjdHJsLT5pbmZvLT5zaXplKTsKIAkJfSBlbHNlIHsKLQkJCXJldCA9IHV2Y19xdWVyeV9jdHJsKHZpZGVvLT5kZXYsIEdFVF9DVVIsCi0JCQkJY3RybC0+ZW50aXR5LT5pZCwgdmlkZW8tPmRldi0+aW50Zm51bSwKKwkJCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfQ1VSLAorCQkJCWN0cmwtPmVudGl0eS0+aWQsIGNoYWluLT5kZXYtPmludGZudW0sCiAJCQkJY3RybC0+aW5mby0+c2VsZWN0b3IsCiAJCQkJdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX0NVUlJFTlQpLAogCQkJCWN0cmwtPmluZm8tPnNpemUpOwpAQCAtMTA1Myw3ICsxMDU4LDcgQEAKICAqIER5bmFtaWMgY29udHJvbHMKICAqLwogCi1pbnQgdXZjX3h1X2N0cmxfcXVlcnkoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAoraW50IHV2Y194dV9jdHJsX3F1ZXJ5KHN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluLAogCXN0cnVjdCB1dmNfeHVfY29udHJvbCAqeGN0cmwsIGludCBzZXQpCiB7CiAJc3RydWN0IHV2Y19lbnRpdHkgKmVudGl0eTsKQEAgLTEwNjMsNyArMTA2OCw3IEBACiAJaW50IHJldDsKIAogCS8qIEZpbmQgdGhlIGV4dGVuc2lvbiB1bml0LiAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50aXR5LCAmdmlkZW8tPmV4dGVuc2lvbnMsIGNoYWluKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRpdHksICZjaGFpbi0+ZXh0ZW5zaW9ucywgY2hhaW4pIHsKIAkJaWYgKGVudGl0eS0+aWQgPT0geGN0cmwtPnVuaXQpCiAJCQlicmVhazsKIAl9CkBAIC0xMTAyLDcgKzExMDcsNyBAQAogCSAgICAoIXNldCAmJiAhKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX0NVUikpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZpZGVvLT5jdHJsX211dGV4KSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjaGFpbi0+Y3RybF9tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAltZW1jcHkodXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX0JBQ0tVUCksCkBAIC0xMTE1LDkgKzExMjAsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSB1dmNfcXVlcnlfY3RybCh2aWRlby0+ZGV2LCBzZXQgPyBTRVRfQ1VSIDogR0VUX0NVUiwgeGN0cmwtPnVuaXQsCi0JCQkgICAgIHZpZGVvLT5kZXYtPmludGZudW0sIHhjdHJsLT5zZWxlY3RvciwgZGF0YSwKLQkJCSAgICAgeGN0cmwtPnNpemUpOworCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIHNldCA/IFVWQ19TRVRfQ1VSIDogVVZDX0dFVF9DVVIsCisJCQkgICAgIHhjdHJsLT51bml0LCBjaGFpbi0+ZGV2LT5pbnRmbnVtLCB4Y3RybC0+c2VsZWN0b3IsCisJCQkgICAgIGRhdGEsIHhjdHJsLT5zaXplKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKQEAgLTExMzIsNyArMTEzNyw3IEBACiAJCSAgICAgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfQkFDS1VQKSwKIAkJICAgICAgIHhjdHJsLT5zaXplKTsKIAotCW11dGV4X3VubG9jaygmdmlkZW8tPmN0cmxfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hhaW4tPmN0cmxfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyMTEsNyArMTIxNiw3IEBACiAJaWYgKCFmb3VuZCkKIAkJcmV0dXJuOwogCi0JaWYgKFVWQ19FTlRJVFlfVFlQRShlbnRpdHkpID09IFZDX0VYVEVOU0lPTl9VTklUKSB7CisJaWYgKFVWQ19FTlRJVFlfVFlQRShlbnRpdHkpID09IFVWQ19WQ19FWFRFTlNJT05fVU5JVCkgewogCQkvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGNvbnRyb2wgaW5mb3JtYXRpb24gYW5kIGxlbmd0aCBtYXRjaAogCQkgKiB0aGUgdXNlciBzdXBwbGllZCBpbmZvcm1hdGlvbi4KIAkJICovCkBAIC0xMjE5LDggKzEyMjQsOSBAQAogCQlfX2xlMTYgc2l6ZTsKIAkJX191OCBpbmY7CiAKLQkJaWYgKChyZXQgPSB1dmNfcXVlcnlfY3RybChkZXYsIEdFVF9MRU4sIGN0cmwtPmVudGl0eS0+aWQsCi0JCQlkZXYtPmludGZudW0sIGluZm8tPnNlbGVjdG9yLCAoX191OCAqKSZzaXplLCAyKSkgPCAwKSB7CisJCXJldCA9IHV2Y19xdWVyeV9jdHJsKGRldiwgVVZDX0dFVF9MRU4sIGN0cmwtPmVudGl0eS0+aWQsCisJCQlkZXYtPmludGZudW0sIGluZm8tPnNlbGVjdG9yLCAoX191OCAqKSZzaXplLCAyKTsKKwkJaWYgKHJldCA8IDApIHsKIAkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkdFVF9MRU4gZmFpbGVkIG9uICIKIAkJCQkiY29udHJvbCAiIFVWQ19HVUlEX0ZPUk1BVCAiLyV1ICglZCkuXG4iLAogCQkJCVVWQ19HVUlEX0FSR1MoaW5mby0+ZW50aXR5KSwgaW5mby0+c2VsZWN0b3IsCkBAIC0xMjM2LDggKzEyNDIsOSBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQkJaWYgKChyZXQgPSB1dmNfcXVlcnlfY3RybChkZXYsIEdFVF9JTkZPLCBjdHJsLT5lbnRpdHktPmlkLAotCQkJZGV2LT5pbnRmbnVtLCBpbmZvLT5zZWxlY3RvciwgJmluZiwgMSkpIDwgMCkgeworCQlyZXQgPSB1dmNfcXVlcnlfY3RybChkZXYsIFVWQ19HRVRfSU5GTywgY3RybC0+ZW50aXR5LT5pZCwKKwkJCWRldi0+aW50Zm51bSwgaW5mby0+c2VsZWN0b3IsICZpbmYsIDEpOworCQlpZiAocmV0IDwgMCkgewogCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiR0VUX0lORk8gZmFpbGVkIG9uICIKIAkJCQkiY29udHJvbCAiIFVWQ19HVUlEX0ZPUk1BVCAiLyV1ICglZCkuXG4iLAogCQkJCVVWQ19HVUlEX0FSR1MoaW5mby0+ZW50aXR5KSwgaW5mby0+c2VsZWN0b3IsCkBAIC0xMzkxLDcgKzEzOTgsNyBAQAogCXVuc2lnbmVkIGludCBzaXplOwogCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKFVWQ19FTlRJVFlfVFlQRShlbnRpdHkpICE9IFZDX1BST0NFU1NJTkdfVU5JVCkKKwlpZiAoVVZDX0VOVElUWV9UWVBFKGVudGl0eSkgIT0gVVZDX1ZDX1BST0NFU1NJTkdfVU5JVCkKIAkJcmV0dXJuOwogCiAJY29udHJvbHMgPSBlbnRpdHktPnByb2Nlc3NpbmcuYm1Db250cm9sczsKQEAgLTE0MjcsMTMgKzE0MzQsMTMgQEAKIAkJdW5zaWduZWQgaW50IGJDb250cm9sU2l6ZSA9IDAsIG5jb250cm9scyA9IDA7CiAJCV9fdTggKmJtQ29udHJvbHMgPSBOVUxMOwogCi0JCWlmIChVVkNfRU5USVRZX1RZUEUoZW50aXR5KSA9PSBWQ19FWFRFTlNJT05fVU5JVCkgeworCQlpZiAoVVZDX0VOVElUWV9UWVBFKGVudGl0eSkgPT0gVVZDX1ZDX0VYVEVOU0lPTl9VTklUKSB7CiAJCQlibUNvbnRyb2xzID0gZW50aXR5LT5leHRlbnNpb24uYm1Db250cm9sczsKIAkJCWJDb250cm9sU2l6ZSA9IGVudGl0eS0+ZXh0ZW5zaW9uLmJDb250cm9sU2l6ZTsKLQkJfSBlbHNlIGlmIChVVkNfRU5USVRZX1RZUEUoZW50aXR5KSA9PSBWQ19QUk9DRVNTSU5HX1VOSVQpIHsKKwkJfSBlbHNlIGlmIChVVkNfRU5USVRZX1RZUEUoZW50aXR5KSA9PSBVVkNfVkNfUFJPQ0VTU0lOR19VTklUKSB7CiAJCQlibUNvbnRyb2xzID0gZW50aXR5LT5wcm9jZXNzaW5nLmJtQ29udHJvbHM7CiAJCQliQ29udHJvbFNpemUgPSBlbnRpdHktPnByb2Nlc3NpbmcuYkNvbnRyb2xTaXplOwotCQl9IGVsc2UgaWYgKFVWQ19FTlRJVFlfVFlQRShlbnRpdHkpID09IElUVF9DQU1FUkEpIHsKKwkJfSBlbHNlIGlmIChVVkNfRU5USVRZX1RZUEUoZW50aXR5KSA9PSBVVkNfSVRUX0NBTUVSQSkgewogCQkJYm1Db250cm9scyA9IGVudGl0eS0+Y2FtZXJhLmJtQ29udHJvbHM7CiAJCQliQ29udHJvbFNpemUgPSBlbnRpdHktPmNhbWVyYS5iQ29udHJvbFNpemU7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYwppbmRleCAwNGI0NzgzLi44NzU2YmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCkBAIC0yNDksMjMgKzI0OSwyMyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShlbnRpdHksICZkZXYtPmVudGl0aWVzLCBsaXN0KSB7CiAJCXN3aXRjaCAoVVZDX0VOVElUWV9UWVBFKGVudGl0eSkpIHsKLQkJY2FzZSBUVF9TVFJFQU1JTkc6CisJCWNhc2UgVVZDX1RUX1NUUkVBTUlORzoKIAkJCWlmIChlbnRpdHktPm91dHB1dC5iU291cmNlSUQgPT0gaWQpCiAJCQkJcmV0dXJuIGVudGl0eTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgVkNfUFJPQ0VTU0lOR19VTklUOgorCQljYXNlIFVWQ19WQ19QUk9DRVNTSU5HX1VOSVQ6CiAJCQlpZiAoZW50aXR5LT5wcm9jZXNzaW5nLmJTb3VyY2VJRCA9PSBpZCkKIAkJCQlyZXR1cm4gZW50aXR5OwogCQkJYnJlYWs7CiAKLQkJY2FzZSBWQ19TRUxFQ1RPUl9VTklUOgorCQljYXNlIFVWQ19WQ19TRUxFQ1RPUl9VTklUOgogCQkJZm9yIChpID0gMDsgaSA8IGVudGl0eS0+c2VsZWN0b3IuYk5ySW5QaW5zOyArK2kpCiAJCQkJaWYgKGVudGl0eS0+c2VsZWN0b3IuYmFTb3VyY2VJRFtpXSA9PSBpZCkKIAkJCQkJcmV0dXJuIGVudGl0eTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgVkNfRVhURU5TSU9OX1VOSVQ6CisJCWNhc2UgVVZDX1ZDX0VYVEVOU0lPTl9VTklUOgogCQkJZm9yIChpID0gMDsgaSA8IGVudGl0eS0+ZXh0ZW5zaW9uLmJOckluUGluczsgKytpKQogCQkJCWlmIChlbnRpdHktPmV4dGVuc2lvbi5iYVNvdXJjZUlEW2ldID09IGlkKQogCQkJCQlyZXR1cm4gZW50aXR5OwpAQCAtMjc2LDggKzI3NiwyMCBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IHV2Y19zdHJlYW1pbmcgKnV2Y19zdHJlYW1fYnlfaWQoc3RydWN0IHV2Y19kZXZpY2UgKmRldiwgaW50IGlkKQoreworCXN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW07CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0cmVhbSwgJmRldi0+c3RyZWFtcywgbGlzdCkgeworCQlpZiAoc3RyZWFtLT5oZWFkZXIuYlRlcm1pbmFsTGluayA9PSBpZCkKKwkJCXJldHVybiBzdHJlYW07CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRGVzY3JpcHRvcnMgaGFuZGxpbmcKKyAqIERlc2NyaXB0b3JzIHBhcnNpbmcKICAqLwogCiBzdGF0aWMgaW50IHV2Y19wYXJzZV9mb3JtYXQoc3RydWN0IHV2Y19kZXZpY2UgKmRldiwKQEAgLTI5Nyw5ICszMDksOSBAQAogCWZvcm1hdC0+aW5kZXggPSBidWZmZXJbM107CiAKIAlzd2l0Y2ggKGJ1ZmZlclsyXSkgewotCWNhc2UgVlNfRk9STUFUX1VOQ09NUFJFU1NFRDoKLQljYXNlIFZTX0ZPUk1BVF9GUkFNRV9CQVNFRDoKLQkJbiA9IGJ1ZmZlclsyXSA9PSBWU19GT1JNQVRfVU5DT01QUkVTU0VEID8gMjcgOiAyODsKKwljYXNlIFVWQ19WU19GT1JNQVRfVU5DT01QUkVTU0VEOgorCWNhc2UgVVZDX1ZTX0ZPUk1BVF9GUkFNRV9CQVNFRDoKKwkJbiA9IGJ1ZmZlclsyXSA9PSBVVkNfVlNfRk9STUFUX1VOQ09NUFJFU1NFRCA/IDI3IDogMjg7CiAJCWlmIChidWZsZW4gPCBuKSB7CiAJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0RFU0NSLCAiZGV2aWNlICVkIHZpZGVvc3RyZWFtaW5nICIKIAkJCSAgICAgICAiaW50ZXJmYWNlICVkIEZPUk1BVCBlcnJvclxuIiwKQEAgLTMyNSwxNiArMzM3LDE2IEBACiAJCX0KIAogCQlmb3JtYXQtPmJwcCA9IGJ1ZmZlclsyMV07Ci0JCWlmIChidWZmZXJbMl0gPT0gVlNfRk9STUFUX1VOQ09NUFJFU1NFRCkgewotCQkJZnR5cGUgPSBWU19GUkFNRV9VTkNPTVBSRVNTRUQ7CisJCWlmIChidWZmZXJbMl0gPT0gVVZDX1ZTX0ZPUk1BVF9VTkNPTVBSRVNTRUQpIHsKKwkJCWZ0eXBlID0gVVZDX1ZTX0ZSQU1FX1VOQ09NUFJFU1NFRDsKIAkJfSBlbHNlIHsKLQkJCWZ0eXBlID0gVlNfRlJBTUVfRlJBTUVfQkFTRUQ7CisJCQlmdHlwZSA9IFVWQ19WU19GUkFNRV9GUkFNRV9CQVNFRDsKIAkJCWlmIChidWZmZXJbMjddKQogCQkJCWZvcm1hdC0+ZmxhZ3MgPSBVVkNfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKIAkJfQogCQlicmVhazsKIAotCWNhc2UgVlNfRk9STUFUX01KUEVHOgorCWNhc2UgVVZDX1ZTX0ZPUk1BVF9NSlBFRzoKIAkJaWYgKGJ1ZmxlbiA8IDExKSB7CiAJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0RFU0NSLCAiZGV2aWNlICVkIHZpZGVvc3RyZWFtaW5nICIKIAkJCSAgICAgICAiaW50ZXJmYWNlICVkIEZPUk1BVCBlcnJvclxuIiwKQEAgLTM0NywxMCArMzU5LDEwIEBACiAJCWZvcm1hdC0+ZmNjID0gVjRMMl9QSVhfRk1UX01KUEVHOwogCQlmb3JtYXQtPmZsYWdzID0gVVZDX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CiAJCWZvcm1hdC0+YnBwID0gMDsKLQkJZnR5cGUgPSBWU19GUkFNRV9NSlBFRzsKKwkJZnR5cGUgPSBVVkNfVlNfRlJBTUVfTUpQRUc7CiAJCWJyZWFrOwogCi0JY2FzZSBWU19GT1JNQVRfRFY6CisJY2FzZSBVVkNfVlNfRk9STUFUX0RWOgogCQlpZiAoYnVmbGVuIDwgOSkgewogCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9ERVNDUiwgImRldmljZSAlZCB2aWRlb3N0cmVhbWluZyAiCiAJCQkgICAgICAgImludGVyZmFjZSAlZCBGT1JNQVQgZXJyb3JcbiIsCkBAIC0zOTUsOCArNDA3LDggQEAKIAkJZm9ybWF0LT5uZnJhbWVzID0gMTsKIAkJYnJlYWs7CiAKLQljYXNlIFZTX0ZPUk1BVF9NUEVHMlRTOgotCWNhc2UgVlNfRk9STUFUX1NUUkVBTV9CQVNFRDoKKwljYXNlIFVWQ19WU19GT1JNQVRfTVBFRzJUUzoKKwljYXNlIFVWQ19WU19GT1JNQVRfU1RSRUFNX0JBU0VEOgogCQkvKiBOb3Qgc3VwcG9ydGVkIHlldC4gKi8KIAlkZWZhdWx0OgogCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0RFU0NSLCAiZGV2aWNlICVkIHZpZGVvc3RyZWFtaW5nICIKQEAgLTQxNiw3ICs0MjgsNyBAQAogCSAqLwogCXdoaWxlIChidWZsZW4gPiAyICYmIGJ1ZmZlclsyXSA9PSBmdHlwZSkgewogCQlmcmFtZSA9ICZmb3JtYXQtPmZyYW1lW2Zvcm1hdC0+bmZyYW1lc107Ci0JCWlmIChmdHlwZSAhPSBWU19GUkFNRV9GUkFNRV9CQVNFRCkKKwkJaWYgKGZ0eXBlICE9IFVWQ19WU19GUkFNRV9GUkFNRV9CQVNFRCkKIAkJCW4gPSBidWZsZW4gPiAyNSA/IGJ1ZmZlclsyNV0gOiAwOwogCQllbHNlCiAJCQluID0gYnVmbGVuID4gMjEgPyBidWZmZXJbMjFdIDogMDsKQEAgLTQzNiw3ICs0NDgsNyBAQAogCQlmcmFtZS0+d0hlaWdodCA9IGdldF91bmFsaWduZWRfbGUxNigmYnVmZmVyWzddKTsKIAkJZnJhbWUtPmR3TWluQml0UmF0ZSA9IGdldF91bmFsaWduZWRfbGUzMigmYnVmZmVyWzldKTsKIAkJZnJhbWUtPmR3TWF4Qml0UmF0ZSA9IGdldF91bmFsaWduZWRfbGUzMigmYnVmZmVyWzEzXSk7Ci0JCWlmIChmdHlwZSAhPSBWU19GUkFNRV9GUkFNRV9CQVNFRCkgeworCQlpZiAoZnR5cGUgIT0gVVZDX1ZTX0ZSQU1FX0ZSQU1FX0JBU0VEKSB7CiAJCQlmcmFtZS0+ZHdNYXhWaWRlb0ZyYW1lQnVmZmVyU2l6ZSA9CiAJCQkJZ2V0X3VuYWxpZ25lZF9sZTMyKCZidWZmZXJbMTddKTsKIAkJCWZyYW1lLT5kd0RlZmF1bHRGcmFtZUludGVydmFsID0KQEAgLTQ5MSwxMiArNTAzLDEyIEBACiAJCWJ1ZmZlciArPSBidWZmZXJbMF07CiAJfQogCi0JaWYgKGJ1ZmxlbiA+IDIgJiYgYnVmZmVyWzJdID09IFZTX1NUSUxMX0lNQUdFX0ZSQU1FKSB7CisJaWYgKGJ1ZmxlbiA+IDIgJiYgYnVmZmVyWzJdID09IFVWQ19WU19TVElMTF9JTUFHRV9GUkFNRSkgewogCQlidWZsZW4gLT0gYnVmZmVyWzBdOwogCQlidWZmZXIgKz0gYnVmZmVyWzBdOwogCX0KIAotCWlmIChidWZsZW4gPiAyICYmIGJ1ZmZlclsyXSA9PSBWU19DT0xPUkZPUk1BVCkgeworCWlmIChidWZsZW4gPiAyICYmIGJ1ZmZlclsyXSA9PSBVVkNfVlNfQ09MT1JGT1JNQVQpIHsKIAkJaWYgKGJ1ZmxlbiA8IDYpIHsKIAkJCXV2Y190cmFjZShVVkNfVFJBQ0VfREVTQ1IsICJkZXZpY2UgJWQgdmlkZW9zdHJlYW1pbmcgIgogCQkJICAgICAgICJpbnRlcmZhY2UgJWQgQ09MT1JGT1JNQVQgZXJyb3JcbiIsCkBAIC01MzAsNyArNTQyLDcgQEAKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MKLQkJIT0gU0NfVklERU9TVFJFQU1JTkcpIHsKKwkJIT0gVVZDX1NDX1ZJREVPU1RSRUFNSU5HKSB7CiAJCXV2Y190cmFjZShVVkNfVFJBQ0VfREVTQ1IsICJkZXZpY2UgJWQgaW50ZXJmYWNlICVkIGlzbid0IGEgIgogCQkJInZpZGVvIHN0cmVhbWluZyBpbnRlcmZhY2VcbiIsIGRldi0+dWRldi0+ZGV2bnVtLAogCQkJaW50Zi0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwpAQCAtNTUxLDYgKzU2Myw3IEBACiAJfQogCiAJbXV0ZXhfaW5pdCgmc3RyZWFtaW5nLT5tdXRleCk7CisJc3RyZWFtaW5nLT5kZXYgPSBkZXY7CiAJc3RyZWFtaW5nLT5pbnRmID0gdXNiX2dldF9pbnRmKGludGYpOwogCXN0cmVhbWluZy0+aW50Zm51bSA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAKQEAgLTU4OSwxMiArNjAyLDEyIEBACiAKIAkvKiBQYXJzZSB0aGUgaGVhZGVyIGRlc2NyaXB0b3IuICovCiAJc3dpdGNoIChidWZmZXJbMl0pIHsKLQljYXNlIFZTX09VVFBVVF9IRUFERVI6CisJY2FzZSBVVkNfVlNfT1VUUFVUX0hFQURFUjoKIAkJc3RyZWFtaW5nLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7CiAJCXNpemUgPSA5OwogCQlicmVhazsKIAotCWNhc2UgVlNfSU5QVVRfSEVBREVSOgorCWNhc2UgVVZDX1ZTX0lOUFVUX0hFQURFUjoKIAkJc3RyZWFtaW5nLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCQlzaXplID0gMTM7CiAJCWJyZWFrOwpAQCAtNjE4LDcgKzYzMSw3IEBACiAKIAlzdHJlYW1pbmctPmhlYWRlci5iTnVtRm9ybWF0cyA9IHA7CiAJc3RyZWFtaW5nLT5oZWFkZXIuYkVuZHBvaW50QWRkcmVzcyA9IGJ1ZmZlcls2XTsKLQlpZiAoYnVmZmVyWzJdID09IFZTX0lOUFVUX0hFQURFUikgeworCWlmIChidWZmZXJbMl0gPT0gVVZDX1ZTX0lOUFVUX0hFQURFUikgewogCQlzdHJlYW1pbmctPmhlYWRlci5ibUluZm8gPSBidWZmZXJbN107CiAJCXN0cmVhbWluZy0+aGVhZGVyLmJUZXJtaW5hbExpbmsgPSBidWZmZXJbOF07CiAJCXN0cmVhbWluZy0+aGVhZGVyLmJTdGlsbENhcHR1cmVNZXRob2QgPSBidWZmZXJbOV07CkBAIC02NDQsMTUgKzY1NywxNSBAQAogCV9idWZsZW4gPSBidWZsZW47CiAKIAkvKiBDb3VudCB0aGUgZm9ybWF0IGFuZCBmcmFtZSBkZXNjcmlwdG9ycy4gKi8KLQl3aGlsZSAoX2J1ZmxlbiA+IDIgJiYgX2J1ZmZlclsxXSA9PSBDU19JTlRFUkZBQ0UpIHsKKwl3aGlsZSAoX2J1ZmxlbiA+IDIgJiYgX2J1ZmZlclsxXSA9PSBVU0JfRFRfQ1NfSU5URVJGQUNFKSB7CiAJCXN3aXRjaCAoX2J1ZmZlclsyXSkgewotCQljYXNlIFZTX0ZPUk1BVF9VTkNPTVBSRVNTRUQ6Ci0JCWNhc2UgVlNfRk9STUFUX01KUEVHOgotCQljYXNlIFZTX0ZPUk1BVF9GUkFNRV9CQVNFRDoKKwkJY2FzZSBVVkNfVlNfRk9STUFUX1VOQ09NUFJFU1NFRDoKKwkJY2FzZSBVVkNfVlNfRk9STUFUX01KUEVHOgorCQljYXNlIFVWQ19WU19GT1JNQVRfRlJBTUVfQkFTRUQ6CiAJCQluZm9ybWF0cysrOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBWU19GT1JNQVRfRFY6CisJCWNhc2UgVVZDX1ZTX0ZPUk1BVF9EVjoKIAkJCS8qIERWIGZvcm1hdCBoYXMgbm8gZnJhbWUgZGVzY3JpcHRvci4gV2Ugd2lsbCBjcmVhdGUgYQogCQkJICogZHVtbXkgZnJhbWUgZGVzY3JpcHRvciB3aXRoIGEgZHVtbXkgZnJhbWUgaW50ZXJ2YWwuCiAJCQkgKi8KQEAgLTY2MSwyMiArNjc0LDIyIEBACiAJCQluaW50ZXJ2YWxzKys7CiAJCQlicmVhazsKIAotCQljYXNlIFZTX0ZPUk1BVF9NUEVHMlRTOgotCQljYXNlIFZTX0ZPUk1BVF9TVFJFQU1fQkFTRUQ6CisJCWNhc2UgVVZDX1ZTX0ZPUk1BVF9NUEVHMlRTOgorCQljYXNlIFVWQ19WU19GT1JNQVRfU1RSRUFNX0JBU0VEOgogCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9ERVNDUiwgImRldmljZSAlZCB2aWRlb3N0cmVhbWluZyAiCiAJCQkJImludGVyZmFjZSAlZCBGT1JNQVQgJXUgaXMgbm90IHN1cHBvcnRlZC5cbiIsCiAJCQkJZGV2LT51ZGV2LT5kZXZudW0sCiAJCQkJYWx0cy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCBfYnVmZmVyWzJdKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgVlNfRlJBTUVfVU5DT01QUkVTU0VEOgotCQljYXNlIFZTX0ZSQU1FX01KUEVHOgorCQljYXNlIFVWQ19WU19GUkFNRV9VTkNPTVBSRVNTRUQ6CisJCWNhc2UgVVZDX1ZTX0ZSQU1FX01KUEVHOgogCQkJbmZyYW1lcysrOwogCQkJaWYgKF9idWZsZW4gPiAyNSkKIAkJCQluaW50ZXJ2YWxzICs9IF9idWZmZXJbMjVdID8gX2J1ZmZlclsyNV0gOiAzOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBWU19GUkFNRV9GUkFNRV9CQVNFRDoKKwkJY2FzZSBVVkNfVlNfRlJBTUVfRlJBTUVfQkFTRUQ6CiAJCQluZnJhbWVzKys7CiAJCQlpZiAoX2J1ZmxlbiA+IDIxKQogCQkJCW5pbnRlcnZhbHMgKz0gX2J1ZmZlclsyMV0gPyBfYnVmZmVyWzIxXSA6IDM7CkBAIC03MDksMTIgKzcyMiwxMiBAQAogCXN0cmVhbWluZy0+bmZvcm1hdHMgPSBuZm9ybWF0czsKIAogCS8qIFBhcnNlIHRoZSBmb3JtYXQgZGVzY3JpcHRvcnMuICovCi0Jd2hpbGUgKGJ1ZmxlbiA+IDIgJiYgYnVmZmVyWzFdID09IENTX0lOVEVSRkFDRSkgeworCXdoaWxlIChidWZsZW4gPiAyICYmIGJ1ZmZlclsxXSA9PSBVU0JfRFRfQ1NfSU5URVJGQUNFKSB7CiAJCXN3aXRjaCAoYnVmZmVyWzJdKSB7Ci0JCWNhc2UgVlNfRk9STUFUX1VOQ09NUFJFU1NFRDoKLQkJY2FzZSBWU19GT1JNQVRfTUpQRUc6Ci0JCWNhc2UgVlNfRk9STUFUX0RWOgotCQljYXNlIFZTX0ZPUk1BVF9GUkFNRV9CQVNFRDoKKwkJY2FzZSBVVkNfVlNfRk9STUFUX1VOQ09NUFJFU1NFRDoKKwkJY2FzZSBVVkNfVlNfRk9STUFUX01KUEVHOgorCQljYXNlIFVWQ19WU19GT1JNQVRfRFY6CisJCWNhc2UgVVZDX1ZTX0ZPUk1BVF9GUkFNRV9CQVNFRDoKIAkJCWZvcm1hdC0+ZnJhbWUgPSBmcmFtZTsKIAkJCXJldCA9IHV2Y19wYXJzZV9mb3JtYXQoZGV2LCBzdHJlYW1pbmcsIGZvcm1hdCwKIAkJCQkmaW50ZXJ2YWwsIGJ1ZmZlciwgYnVmbGVuKTsKQEAgLTc1MSw3ICs3NjQsNyBAQAogCQkJc3RyZWFtaW5nLT5tYXhwc2l6ZSA9IHBzaXplOwogCX0KIAotCWxpc3RfYWRkX3RhaWwoJnN0cmVhbWluZy0+bGlzdCwgJmRldi0+c3RyZWFtaW5nKTsKKwlsaXN0X2FkZF90YWlsKCZzdHJlYW1pbmctPmxpc3QsICZkZXYtPnN0cmVhbXMpOwogCXJldHVybiAwOwogCiBlcnJvcjoKQEAgLTgxOSw3ICs4MzIsNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAKIAkJdW5pdC0+aWQgPSBidWZmZXJbM107Ci0JCXVuaXQtPnR5cGUgPSBWQ19FWFRFTlNJT05fVU5JVDsKKwkJdW5pdC0+dHlwZSA9IFVWQ19WQ19FWFRFTlNJT05fVU5JVDsKIAkJbWVtY3B5KHVuaXQtPmV4dGVuc2lvbi5ndWlkRXh0ZW5zaW9uQ29kZSwgJmJ1ZmZlcls0XSwgMTYpOwogCQl1bml0LT5leHRlbnNpb24uYk51bUNvbnRyb2xzID0gYnVmZmVyWzIwXTsKIAkJdW5pdC0+ZXh0ZW5zaW9uLmJOckluUGlucyA9IGdldF91bmFsaWduZWRfbGUxNigmYnVmZmVyWzIxXSk7CkBAIC04NTYsNyArODY5LDcgQEAKIAlfX3UxNiB0eXBlOwogCiAJc3dpdGNoIChidWZmZXJbMl0pIHsKLQljYXNlIFZDX0hFQURFUjoKKwljYXNlIFVWQ19WQ19IRUFERVI6CiAJCW4gPSBidWZsZW4gPj0gMTIgPyBidWZmZXJbMTFdIDogMDsKIAogCQlpZiAoYnVmbGVuIDwgMTIgfHwgYnVmbGVuIDwgMTIgKyBuKSB7CkBAIC04ODMsNyArODk2LDcgQEAKIAkJfQogCQlicmVhazsKIAotCWNhc2UgVkNfSU5QVVRfVEVSTUlOQUw6CisJY2FzZSBVVkNfVkNfSU5QVVRfVEVSTUlOQUw6CiAJCWlmIChidWZsZW4gPCA4KSB7CiAJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0RFU0NSLCAiZGV2aWNlICVkIHZpZGVvY29udHJvbCAiCiAJCQkJImludGVyZmFjZSAlZCBJTlBVVF9URVJNSU5BTCBlcnJvclxuIiwKQEAgLTkwOCwxMSArOTIxLDExIEBACiAJCXAgPSAwOwogCQlsZW4gPSA4OwogCi0JCWlmICh0eXBlID09IElUVF9DQU1FUkEpIHsKKwkJaWYgKHR5cGUgPT0gVVZDX0lUVF9DQU1FUkEpIHsKIAkJCW4gPSBidWZsZW4gPj0gMTUgPyBidWZmZXJbMTRdIDogMDsKIAkJCWxlbiA9IDE1OwogCi0JCX0gZWxzZSBpZiAodHlwZSA9PSBJVFRfTUVESUFfVFJBTlNQT1JUX0lOUFVUKSB7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBVVkNfSVRUX01FRElBX1RSQU5TUE9SVF9JTlBVVCkgewogCQkJbiA9IGJ1ZmxlbiA+PSA5ID8gYnVmZmVyWzhdIDogMDsKIAkJCXAgPSBidWZsZW4gPj0gMTAgKyBuID8gYnVmZmVyWzkrbl0gOiAwOwogCQkJbGVuID0gMTA7CkBAIC05MzIsNyArOTQ1LDcgQEAKIAkJdGVybS0+aWQgPSBidWZmZXJbM107CiAJCXRlcm0tPnR5cGUgPSB0eXBlIHwgVVZDX1RFUk1fSU5QVVQ7CiAKLQkJaWYgKFVWQ19FTlRJVFlfVFlQRSh0ZXJtKSA9PSBJVFRfQ0FNRVJBKSB7CisJCWlmIChVVkNfRU5USVRZX1RZUEUodGVybSkgPT0gVVZDX0lUVF9DQU1FUkEpIHsKIAkJCXRlcm0tPmNhbWVyYS5iQ29udHJvbFNpemUgPSBuOwogCQkJdGVybS0+Y2FtZXJhLmJtQ29udHJvbHMgPSAoX191OCAqKXRlcm0gKyBzaXplb2YgKnRlcm07CiAJCQl0ZXJtLT5jYW1lcmEud09iamVjdGl2ZUZvY2FsTGVuZ3RoTWluID0KQEAgLTk0Miw3ICs5NTUsOCBAQAogCQkJdGVybS0+Y2FtZXJhLndPY3VsYXJGb2NhbExlbmd0aCA9CiAJCQkJZ2V0X3VuYWxpZ25lZF9sZTE2KCZidWZmZXJbMTJdKTsKIAkJCW1lbWNweSh0ZXJtLT5jYW1lcmEuYm1Db250cm9scywgJmJ1ZmZlclsxNV0sIG4pOwotCQl9IGVsc2UgaWYgKFVWQ19FTlRJVFlfVFlQRSh0ZXJtKSA9PSBJVFRfTUVESUFfVFJBTlNQT1JUX0lOUFVUKSB7CisJCX0gZWxzZSBpZiAoVVZDX0VOVElUWV9UWVBFKHRlcm0pID09CisJCQkgICBVVkNfSVRUX01FRElBX1RSQU5TUE9SVF9JTlBVVCkgewogCQkJdGVybS0+bWVkaWEuYkNvbnRyb2xTaXplID0gbjsKIAkJCXRlcm0tPm1lZGlhLmJtQ29udHJvbHMgPSAoX191OCAqKXRlcm0gKyBzaXplb2YgKnRlcm07CiAJCQl0ZXJtLT5tZWRpYS5iVHJhbnNwb3J0TW9kZVNpemUgPSBwOwpAQCAtOTU1LDkgKzk2OSw5IEBACiAJCWlmIChidWZmZXJbN10gIT0gMCkKIAkJCXVzYl9zdHJpbmcodWRldiwgYnVmZmVyWzddLCB0ZXJtLT5uYW1lLAogCQkJCSAgIHNpemVvZiB0ZXJtLT5uYW1lKTsKLQkJZWxzZSBpZiAoVVZDX0VOVElUWV9UWVBFKHRlcm0pID09IElUVF9DQU1FUkEpCisJCWVsc2UgaWYgKFVWQ19FTlRJVFlfVFlQRSh0ZXJtKSA9PSBVVkNfSVRUX0NBTUVSQSkKIAkJCXNwcmludGYodGVybS0+bmFtZSwgIkNhbWVyYSAldSIsIGJ1ZmZlclszXSk7Ci0JCWVsc2UgaWYgKFVWQ19FTlRJVFlfVFlQRSh0ZXJtKSA9PSBJVFRfTUVESUFfVFJBTlNQT1JUX0lOUFVUKQorCQllbHNlIGlmIChVVkNfRU5USVRZX1RZUEUodGVybSkgPT0gVVZDX0lUVF9NRURJQV9UUkFOU1BPUlRfSU5QVVQpCiAJCQlzcHJpbnRmKHRlcm0tPm5hbWUsICJNZWRpYSAldSIsIGJ1ZmZlclszXSk7CiAJCWVsc2UKIAkJCXNwcmludGYodGVybS0+bmFtZSwgIklucHV0ICV1IiwgYnVmZmVyWzNdKTsKQEAgLTk2NSw3ICs5NzksNyBAQAogCQlsaXN0X2FkZF90YWlsKCZ0ZXJtLT5saXN0LCAmZGV2LT5lbnRpdGllcyk7CiAJCWJyZWFrOwogCi0JY2FzZSBWQ19PVVRQVVRfVEVSTUlOQUw6CisJY2FzZSBVVkNfVkNfT1VUUFVUX1RFUk1JTkFMOgogCQlpZiAoYnVmbGVuIDwgOSkgewogCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9ERVNDUiwgImRldmljZSAlZCB2aWRlb2NvbnRyb2wgIgogCQkJCSJpbnRlcmZhY2UgJWQgT1VUUFVUX1RFUk1JTkFMIGVycm9yXG4iLApAQCAtMTAwMiw3ICsxMDE2LDcgQEAKIAkJbGlzdF9hZGRfdGFpbCgmdGVybS0+bGlzdCwgJmRldi0+ZW50aXRpZXMpOwogCQlicmVhazsKIAotCWNhc2UgVkNfU0VMRUNUT1JfVU5JVDoKKwljYXNlIFVWQ19WQ19TRUxFQ1RPUl9VTklUOgogCQlwID0gYnVmbGVuID49IDUgPyBidWZmZXJbNF0gOiAwOwogCiAJCWlmIChidWZsZW4gPCA1IHx8IGJ1ZmxlbiA8IDYgKyBwKSB7CkBAIC0xMDMxLDcgKzEwNDUsNyBAQAogCQlsaXN0X2FkZF90YWlsKCZ1bml0LT5saXN0LCAmZGV2LT5lbnRpdGllcyk7CiAJCWJyZWFrOwogCi0JY2FzZSBWQ19QUk9DRVNTSU5HX1VOSVQ6CisJY2FzZSBVVkNfVkNfUFJPQ0VTU0lOR19VTklUOgogCQluID0gYnVmbGVuID49IDggPyBidWZmZXJbN10gOiAwOwogCQlwID0gZGV2LT51dmNfdmVyc2lvbiA+PSAweDAxMTAgPyAxMCA6IDk7CiAKQEAgLTEwNjYsNyArMTA4MCw3IEBACiAJCWxpc3RfYWRkX3RhaWwoJnVuaXQtPmxpc3QsICZkZXYtPmVudGl0aWVzKTsKIAkJYnJlYWs7CiAKLQljYXNlIFZDX0VYVEVOU0lPTl9VTklUOgorCWNhc2UgVVZDX1ZDX0VYVEVOU0lPTl9VTklUOgogCQlwID0gYnVmbGVuID49IDIyID8gYnVmZmVyWzIxXSA6IDA7CiAJCW4gPSBidWZsZW4gPj0gMjQgKyBwID8gYnVmZmVyWzIyK3BdIDogMDsKIApAQCAtMTE1OCw0MyArMTE3Miw0MCBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFVTQiBwcm9iZSBhbmQgZGlzY29ubmVjdAorICogVVZDIGRldmljZSBzY2FuCiAgKi8KIAogLyoKLSAqIFVucmVnaXN0ZXIgdGhlIHZpZGVvIGRldmljZXMuCi0gKi8KLXN0YXRpYyB2b2lkIHV2Y191bnJlZ2lzdGVyX3ZpZGVvKHN0cnVjdCB1dmNfZGV2aWNlICpkZXYpCi17Ci0JaWYgKGRldi0+dmlkZW8udmRldikgewotCQlpZiAoZGV2LT52aWRlby52ZGV2LT5taW5vciA9PSAtMSkKLQkJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmlkZW8udmRldik7Ci0JCWVsc2UKLQkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmlkZW8udmRldik7Ci0JCWRldi0+dmlkZW8udmRldiA9IE5VTEw7Ci0JfQotfQotCi0vKgogICogU2NhbiB0aGUgVVZDIGRlc2NyaXB0b3JzIHRvIGxvY2F0ZSBhIGNoYWluIHN0YXJ0aW5nIGF0IGFuIE91dHB1dCBUZXJtaW5hbAogICogYW5kIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyB1bml0czoKICAqCi0gKiAtIG9uZSBPdXRwdXQgVGVybWluYWwgKFVTQiBTdHJlYW1pbmcgb3IgRGlzcGxheSkKKyAqIC0gb25lIG9yIG1vcmUgT3V0cHV0IFRlcm1pbmFscyAoVVNCIFN0cmVhbWluZyBvciBEaXNwbGF5KQogICogLSB6ZXJvIG9yIG9uZSBQcm9jZXNzaW5nIFVuaXQKLSAqIC0gemVybywgb25lIG9yIG1vZGUgc2luZ2xlLWlucHV0IFNlbGVjdG9yIFVuaXRzCisgKiAtIHplcm8sIG9uZSBvciBtb3JlIHNpbmdsZS1pbnB1dCBTZWxlY3RvciBVbml0cwogICogLSB6ZXJvIG9yIG9uZSBtdWx0aXBsZS1pbnB1dCBTZWxlY3RvciBVbml0cywgcHJvdmlkZWQgYWxsIGlucHV0cyBhcmUKICAqICAgY29ubmVjdGVkIHRvIGlucHV0IHRlcm1pbmFscwogICogLSB6ZXJvLCBvbmUgb3IgbW9kZSBzaW5nbGUtaW5wdXQgRXh0ZW5zaW9uIFVuaXRzCiAgKiAtIG9uZSBvciBtb3JlIElucHV0IFRlcm1pbmFscyAoQ2FtZXJhLCBFeHRlcm5hbCBvciBVU0IgU3RyZWFtaW5nKQogICoKLSAqIEEgc2lkZSBmb3J3YXJkIHNjYW4gaXMgbWFkZSBvbiBlYWNoIGRldGVjdGVkIGVudGl0eSB0byBjaGVjayBmb3IgYWRkaXRpb25hbAotICogZXh0ZW5zaW9uIHVuaXRzLgorICogVGhlIHRlcm1pbmFsIGFuZCB1bml0cyBtdXN0IG1hdGNoIG9uIG9mIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlczoKKyAqCisgKiBJVFRfKigwKSAtPiArLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tKyAtPiBUVF9TVFJFQU1JTkcoMCkKKyAqIC4uLiAgICAgICAgIHwgU1V7MCwxfSB8IC0+IHwgUFV7MCwxfSB8IC0+IHwgWFV7MCxufSB8ICAgIC4uLgorICogSVRUXyoobikgLT4gKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLSsgLT4gVFRfU1RSRUFNSU5HKG4pCisgKgorICogICAgICAgICAgICAgICAgICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0rIC0+IE9UVF8qKDApCisgKiBUVF9TVFJFQU1JTkcgLT4gfCBQVXswLDF9IHwgLT4gfCBYVXswLG59IHwgICAgLi4uCisgKiAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLSsgLT4gT1RUXyoobikKKyAqCisgKiBUaGUgUHJvY2Vzc2luZyBVbml0IGFuZCBFeHRlbnNpb24gVW5pdHMgY2FuIGJlIGluIGFueSBvcmRlci4gQWRkaXRpb25hbAorICogRXh0ZW5zaW9uIFVuaXRzIGNvbm5lY3RlZCB0byB0aGUgbWFpbiBjaGFpbiBhcyBzaW5nbGUtdW5pdCBicmFuY2hlcyBhcmUKKyAqIGFsc28gc3VwcG9ydGVkLiBTaW5nbGUtaW5wdXQgU2VsZWN0b3IgVW5pdHMgYXJlIGlnbm9yZWQuCiAgKi8KLXN0YXRpYyBpbnQgdXZjX3NjYW5fY2hhaW5fZW50aXR5KHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKK3N0YXRpYyBpbnQgdXZjX3NjYW5fY2hhaW5fZW50aXR5KHN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluLAogCXN0cnVjdCB1dmNfZW50aXR5ICplbnRpdHkpCiB7CiAJc3dpdGNoIChVVkNfRU5USVRZX1RZUEUoZW50aXR5KSkgewotCWNhc2UgVkNfRVhURU5TSU9OX1VOSVQ6CisJY2FzZSBVVkNfVkNfRVhURU5TSU9OX1VOSVQ6CiAJCWlmICh1dmNfdHJhY2VfcGFyYW0gJiBVVkNfVFJBQ0VfUFJPQkUpCiAJCQlwcmludGsoIiA8LSBYVSAlZCIsIGVudGl0eS0+aWQpOwogCkBAIC0xMjA0LDIzICsxMjE1LDIzIEBACiAJCQlyZXR1cm4gLTE7CiAJCX0KIAotCQlsaXN0X2FkZF90YWlsKCZlbnRpdHktPmNoYWluLCAmdmlkZW8tPmV4dGVuc2lvbnMpOworCQlsaXN0X2FkZF90YWlsKCZlbnRpdHktPmNoYWluLCAmY2hhaW4tPmV4dGVuc2lvbnMpOwogCQlicmVhazsKIAotCWNhc2UgVkNfUFJPQ0VTU0lOR19VTklUOgorCWNhc2UgVVZDX1ZDX1BST0NFU1NJTkdfVU5JVDoKIAkJaWYgKHV2Y190cmFjZV9wYXJhbSAmIFVWQ19UUkFDRV9QUk9CRSkKIAkJCXByaW50aygiIDwtIFBVICVkIiwgZW50aXR5LT5pZCk7CiAKLQkJaWYgKHZpZGVvLT5wcm9jZXNzaW5nICE9IE5VTEwpIHsKKwkJaWYgKGNoYWluLT5wcm9jZXNzaW5nICE9IE5VTEwpIHsKIAkJCXV2Y190cmFjZShVVkNfVFJBQ0VfREVTQ1IsICJGb3VuZCBtdWx0aXBsZSAiCiAJCQkJIlByb2Nlc3NpbmcgVW5pdHMgaW4gY2hhaW4uXG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCi0JCXZpZGVvLT5wcm9jZXNzaW5nID0gZW50aXR5OworCQljaGFpbi0+cHJvY2Vzc2luZyA9IGVudGl0eTsKIAkJYnJlYWs7CiAKLQljYXNlIFZDX1NFTEVDVE9SX1VOSVQ6CisJY2FzZSBVVkNfVkNfU0VMRUNUT1JfVU5JVDoKIAkJaWYgKHV2Y190cmFjZV9wYXJhbSAmIFVWQ19UUkFDRV9QUk9CRSkKIAkJCXByaW50aygiIDwtIFNVICVkIiwgZW50aXR5LT5pZCk7CiAKQEAgLTEyMjgsMjUgKzEyMzksMjUgQEAKIAkJaWYgKGVudGl0eS0+c2VsZWN0b3IuYk5ySW5QaW5zID09IDEpCiAJCQlicmVhazsKIAotCQlpZiAodmlkZW8tPnNlbGVjdG9yICE9IE5VTEwpIHsKKwkJaWYgKGNoYWluLT5zZWxlY3RvciAhPSBOVUxMKSB7CiAJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0RFU0NSLCAiRm91bmQgbXVsdGlwbGUgU2VsZWN0b3IgIgogCQkJCSJVbml0cyBpbiBjaGFpbi5cbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKLQkJdmlkZW8tPnNlbGVjdG9yID0gZW50aXR5OworCQljaGFpbi0+c2VsZWN0b3IgPSBlbnRpdHk7CiAJCWJyZWFrOwogCi0JY2FzZSBJVFRfVkVORE9SX1NQRUNJRklDOgotCWNhc2UgSVRUX0NBTUVSQToKLQljYXNlIElUVF9NRURJQV9UUkFOU1BPUlRfSU5QVVQ6CisJY2FzZSBVVkNfSVRUX1ZFTkRPUl9TUEVDSUZJQzoKKwljYXNlIFVWQ19JVFRfQ0FNRVJBOgorCWNhc2UgVVZDX0lUVF9NRURJQV9UUkFOU1BPUlRfSU5QVVQ6CiAJCWlmICh1dmNfdHJhY2VfcGFyYW0gJiBVVkNfVFJBQ0VfUFJPQkUpCiAJCQlwcmludGsoIiA8LSBJVCAlZFxuIiwgZW50aXR5LT5pZCk7CiAKLQkJbGlzdF9hZGRfdGFpbCgmZW50aXR5LT5jaGFpbiwgJnZpZGVvLT5pdGVybXMpOworCQlsaXN0X2FkZF90YWlsKCZlbnRpdHktPmNoYWluLCAmY2hhaW4tPml0ZXJtcyk7CiAJCWJyZWFrOwogCi0JY2FzZSBUVF9TVFJFQU1JTkc6CisJY2FzZSBVVkNfVFRfU1RSRUFNSU5HOgogCQlpZiAodXZjX3RyYWNlX3BhcmFtICYgVVZDX1RSQUNFX1BST0JFKQogCQkJcHJpbnRrKCIgPC0gSVQgJWRcbiIsIGVudGl0eS0+aWQpOwogCkBAIC0xMjU2LDE0ICsxMjY3LDcgQEAKIAkJCXJldHVybiAtMTsKIAkJfQogCi0JCWlmICh2aWRlby0+c3Rlcm0gIT0gTlVMTCkgewotCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9ERVNDUiwgIkZvdW5kIG11bHRpcGxlIHN0cmVhbWluZyAiCi0JCQkJImVudGl0aWVzIGluIGNoYWluLlxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQlsaXN0X2FkZF90YWlsKCZlbnRpdHktPmNoYWluLCAmdmlkZW8tPml0ZXJtcyk7Ci0JCXZpZGVvLT5zdGVybSA9IGVudGl0eTsKKwkJbGlzdF9hZGRfdGFpbCgmZW50aXR5LT5jaGFpbiwgJmNoYWluLT5pdGVybXMpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xMjc1LDcgKzEyNzksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHV2Y19zY2FuX2NoYWluX2ZvcndhcmQoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorc3RhdGljIGludCB1dmNfc2Nhbl9jaGFpbl9mb3J3YXJkKHN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluLAogCXN0cnVjdCB1dmNfZW50aXR5ICplbnRpdHksIHN0cnVjdCB1dmNfZW50aXR5ICpwcmV2KQogewogCXN0cnVjdCB1dmNfZW50aXR5ICpmb3J3YXJkOwpAQCAtMTI4NiwyOCArMTI5MCw1MSBAQAogCWZvdW5kID0gMDsKIAogCXdoaWxlICgxKSB7Ci0JCWZvcndhcmQgPSB1dmNfZW50aXR5X2J5X3JlZmVyZW5jZSh2aWRlby0+ZGV2LCBlbnRpdHktPmlkLAorCQlmb3J3YXJkID0gdXZjX2VudGl0eV9ieV9yZWZlcmVuY2UoY2hhaW4tPmRldiwgZW50aXR5LT5pZCwKIAkJCWZvcndhcmQpOwogCQlpZiAoZm9yd2FyZCA9PSBOVUxMKQogCQkJYnJlYWs7Ci0KLQkJaWYgKFVWQ19FTlRJVFlfVFlQRShmb3J3YXJkKSAhPSBWQ19FWFRFTlNJT05fVU5JVCB8fAotCQkgICAgZm9yd2FyZCA9PSBwcmV2KQorCQlpZiAoZm9yd2FyZCA9PSBwcmV2KQogCQkJY29udGludWU7CiAKLQkJaWYgKGZvcndhcmQtPmV4dGVuc2lvbi5iTnJJblBpbnMgIT0gMSkgewotCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9ERVNDUiwgIkV4dGVuc2lvbiB1bml0ICVkIGhhcyAiCi0JCQkJIm1vcmUgdGhhbiAxIGlucHV0IHBpbi5cbiIsIGVudGl0eS0+aWQpOwotCQkJcmV0dXJuIC0xOwotCQl9CisJCXN3aXRjaCAoVVZDX0VOVElUWV9UWVBFKGZvcndhcmQpKSB7CisJCWNhc2UgVVZDX1ZDX0VYVEVOU0lPTl9VTklUOgorCQkJaWYgKGZvcndhcmQtPmV4dGVuc2lvbi5iTnJJblBpbnMgIT0gMSkgeworCQkJCXV2Y190cmFjZShVVkNfVFJBQ0VfREVTQ1IsICJFeHRlbnNpb24gdW5pdCAlZCAiCisJCQkJCSAgImhhcyBtb3JlIHRoYW4gMSBpbnB1dCBwaW4uXG4iLAorCQkJCQkgIGVudGl0eS0+aWQpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQogCi0JCWxpc3RfYWRkX3RhaWwoJmZvcndhcmQtPmNoYWluLCAmdmlkZW8tPmV4dGVuc2lvbnMpOwotCQlpZiAodXZjX3RyYWNlX3BhcmFtICYgVVZDX1RSQUNFX1BST0JFKSB7Ci0JCQlpZiAoIWZvdW5kKQotCQkJCXByaW50aygiICgtPiBYVSIpOworCQkJbGlzdF9hZGRfdGFpbCgmZm9yd2FyZC0+Y2hhaW4sICZjaGFpbi0+ZXh0ZW5zaW9ucyk7CisJCQlpZiAodXZjX3RyYWNlX3BhcmFtICYgVVZDX1RSQUNFX1BST0JFKSB7CisJCQkJaWYgKCFmb3VuZCkKKwkJCQkJcHJpbnRrKCIgKC0+Iik7CiAKLQkJCXByaW50aygiICVkIiwgZm9yd2FyZC0+aWQpOwotCQkJZm91bmQgPSAxOworCQkJCXByaW50aygiIFhVICVkIiwgZm9yd2FyZC0+aWQpOworCQkJCWZvdW5kID0gMTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgVVZDX09UVF9WRU5ET1JfU1BFQ0lGSUM6CisJCWNhc2UgVVZDX09UVF9ESVNQTEFZOgorCQljYXNlIFVWQ19PVFRfTUVESUFfVFJBTlNQT1JUX09VVFBVVDoKKwkJY2FzZSBVVkNfVFRfU1RSRUFNSU5HOgorCQkJaWYgKFVWQ19FTlRJVFlfSVNfSVRFUk0oZm9yd2FyZCkpIHsKKwkJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0RFU0NSLCAiVW5zdXBwb3J0ZWQgaW5wdXQgIgorCQkJCQkidGVybWluYWwgJXUuXG4iLCBmb3J3YXJkLT5pZCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWxpc3RfYWRkX3RhaWwoJmZvcndhcmQtPmNoYWluLCAmY2hhaW4tPm90ZXJtcyk7CisJCQlpZiAodXZjX3RyYWNlX3BhcmFtICYgVVZDX1RSQUNFX1BST0JFKSB7CisJCQkJaWYgKCFmb3VuZCkKKwkJCQkJcHJpbnRrKCIgKC0+Iik7CisKKwkJCQlwcmludGsoIiBPVCAlZCIsIGZvcndhcmQtPmlkKTsKKwkJCQlmb3VuZCA9IDE7CisJCQl9CisJCQlicmVhazsKIAkJfQogCX0KIAlpZiAoZm91bmQpCkBAIC0xMzE2LDIyICsxMzQzLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXZjX3NjYW5fY2hhaW5fYmFja3dhcmQoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorc3RhdGljIGludCB1dmNfc2Nhbl9jaGFpbl9iYWNrd2FyZChzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbiwKIAlzdHJ1Y3QgdXZjX2VudGl0eSAqZW50aXR5KQogewogCXN0cnVjdCB1dmNfZW50aXR5ICp0ZXJtOwogCWludCBpZCA9IC0xLCBpOwogCiAJc3dpdGNoIChVVkNfRU5USVRZX1RZUEUoZW50aXR5KSkgewotCWNhc2UgVkNfRVhURU5TSU9OX1VOSVQ6CisJY2FzZSBVVkNfVkNfRVhURU5TSU9OX1VOSVQ6CiAJCWlkID0gZW50aXR5LT5leHRlbnNpb24uYmFTb3VyY2VJRFswXTsKIAkJYnJlYWs7CiAKLQljYXNlIFZDX1BST0NFU1NJTkdfVU5JVDoKKwljYXNlIFVWQ19WQ19QUk9DRVNTSU5HX1VOSVQ6CiAJCWlkID0gZW50aXR5LT5wcm9jZXNzaW5nLmJTb3VyY2VJRDsKIAkJYnJlYWs7CiAKLQljYXNlIFZDX1NFTEVDVE9SX1VOSVQ6CisJY2FzZSBVVkNfVkNfU0VMRUNUT1JfVU5JVDoKIAkJLyogU2luZ2xlLWlucHV0IHNlbGVjdG9yIHVuaXRzIGFyZSBpZ25vcmVkLiAqLwogCQlpZiAoZW50aXR5LT5zZWxlY3Rvci5iTnJJblBpbnMgPT0gMSkgewogCQkJaWQgPSBlbnRpdHktPnNlbGVjdG9yLmJhU291cmNlSURbMF07CkBAIC0xMzQxLDEwICsxMzY4LDEwIEBACiAJCWlmICh1dmNfdHJhY2VfcGFyYW0gJiBVVkNfVFJBQ0VfUFJPQkUpCiAJCQlwcmludGsoIiA8LSBJVCIpOwogCi0JCXZpZGVvLT5zZWxlY3RvciA9IGVudGl0eTsKKwkJY2hhaW4tPnNlbGVjdG9yID0gZW50aXR5OwogCQlmb3IgKGkgPSAwOyBpIDwgZW50aXR5LT5zZWxlY3Rvci5iTnJJblBpbnM7ICsraSkgewogCQkJaWQgPSBlbnRpdHktPnNlbGVjdG9yLmJhU291cmNlSURbaV07Ci0JCQl0ZXJtID0gdXZjX2VudGl0eV9ieV9pZCh2aWRlby0+ZGV2LCBpZCk7CisJCQl0ZXJtID0gdXZjX2VudGl0eV9ieV9pZChjaGFpbi0+ZGV2LCBpZCk7CiAJCQlpZiAodGVybSA9PSBOVUxMIHx8ICFVVkNfRU5USVRZX0lTX0lURVJNKHRlcm0pKSB7CiAJCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9ERVNDUiwgIlNlbGVjdG9yIHVuaXQgJWQgIgogCQkJCQkiaW5wdXQgJWQgaXNuJ3QgY29ubmVjdGVkIHRvIGFuICIKQEAgLTEzNTUsOCArMTM4Miw4IEBACiAJCQlpZiAodXZjX3RyYWNlX3BhcmFtICYgVVZDX1RSQUNFX1BST0JFKQogCQkJCXByaW50aygiICVkIiwgdGVybS0+aWQpOwogCi0JCQlsaXN0X2FkZF90YWlsKCZ0ZXJtLT5jaGFpbiwgJnZpZGVvLT5pdGVybXMpOwotCQkJdXZjX3NjYW5fY2hhaW5fZm9yd2FyZCh2aWRlbywgdGVybSwgZW50aXR5KTsKKwkJCWxpc3RfYWRkX3RhaWwoJnRlcm0tPmNoYWluLCAmY2hhaW4tPml0ZXJtcyk7CisJCQl1dmNfc2Nhbl9jaGFpbl9mb3J3YXJkKGNoYWluLCB0ZXJtLCBlbnRpdHkpOwogCQl9CiAKIAkJaWYgKHV2Y190cmFjZV9wYXJhbSAmIFVWQ19UUkFDRV9QUk9CRSkKQEAgLTEzNjksMTI1ICsxMzk2LDE3MCBAQAogCXJldHVybiBpZDsKIH0KIAotc3RhdGljIGludCB1dmNfc2Nhbl9jaGFpbihzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8pCitzdGF0aWMgaW50IHV2Y19zY2FuX2NoYWluKHN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluLAorCQkJICBzdHJ1Y3QgdXZjX2VudGl0eSAqb3Rlcm0pCiB7CiAJc3RydWN0IHV2Y19lbnRpdHkgKmVudGl0eSwgKnByZXY7CiAJaW50IGlkOwogCi0JZW50aXR5ID0gdmlkZW8tPm90ZXJtOworCWVudGl0eSA9IG90ZXJtOworCWxpc3RfYWRkX3RhaWwoJmVudGl0eS0+Y2hhaW4sICZjaGFpbi0+b3Rlcm1zKTsKIAl1dmNfdHJhY2UoVVZDX1RSQUNFX1BST0JFLCAiU2Nhbm5pbmcgVVZDIGNoYWluOiBPVCAlZCIsIGVudGl0eS0+aWQpOwogCi0JaWYgKFVWQ19FTlRJVFlfVFlQRShlbnRpdHkpID09IFRUX1NUUkVBTUlORykKLQkJdmlkZW8tPnN0ZXJtID0gZW50aXR5OwotCiAJaWQgPSBlbnRpdHktPm91dHB1dC5iU291cmNlSUQ7CiAJd2hpbGUgKGlkICE9IDApIHsKIAkJcHJldiA9IGVudGl0eTsKLQkJZW50aXR5ID0gdXZjX2VudGl0eV9ieV9pZCh2aWRlby0+ZGV2LCBpZCk7CisJCWVudGl0eSA9IHV2Y19lbnRpdHlfYnlfaWQoY2hhaW4tPmRldiwgaWQpOwogCQlpZiAoZW50aXR5ID09IE5VTEwpIHsKIAkJCXV2Y190cmFjZShVVkNfVFJBQ0VfREVTQ1IsICJGb3VuZCByZWZlcmVuY2UgdG8gIgogCQkJCSJ1bmtub3duIGVudGl0eSAlZC5cbiIsIGlkKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGVudGl0eS0+Y2hhaW4ubmV4dCB8fCBlbnRpdHktPmNoYWluLnByZXYpIHsKKwkJCXV2Y190cmFjZShVVkNfVFJBQ0VfREVTQ1IsICJGb3VuZCByZWZlcmVuY2UgdG8gIgorCQkJCSJlbnRpdHkgJWQgYWxyZWFkeSBpbiBjaGFpbi5cbiIsIGlkKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJLyogUHJvY2VzcyBlbnRpdHkgKi8KLQkJaWYgKHV2Y19zY2FuX2NoYWluX2VudGl0eSh2aWRlbywgZW50aXR5KSA8IDApCi0JCQlyZXR1cm4gLTE7CisJCWlmICh1dmNfc2Nhbl9jaGFpbl9lbnRpdHkoY2hhaW4sIGVudGl0eSkgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJLyogRm9yd2FyZCBzY2FuICovCi0JCWlmICh1dmNfc2Nhbl9jaGFpbl9mb3J3YXJkKHZpZGVvLCBlbnRpdHksIHByZXYpIDwgMCkKLQkJCXJldHVybiAtMTsKKwkJaWYgKHV2Y19zY2FuX2NoYWluX2ZvcndhcmQoY2hhaW4sIGVudGl0eSwgcHJldikgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJLyogU3RvcCB3aGVuIGEgdGVybWluYWwgaXMgZm91bmQuICovCi0JCWlmICghVVZDX0VOVElUWV9JU19VTklUKGVudGl0eSkpCisJCWlmIChVVkNfRU5USVRZX0lTX1RFUk0oZW50aXR5KSkKIAkJCWJyZWFrOwogCiAJCS8qIEJhY2t3YXJkIHNjYW4gKi8KLQkJaWQgPSB1dmNfc2Nhbl9jaGFpbl9iYWNrd2FyZCh2aWRlbywgZW50aXR5KTsKKwkJaWQgPSB1dmNfc2Nhbl9jaGFpbl9iYWNrd2FyZChjaGFpbiwgZW50aXR5KTsKIAkJaWYgKGlkIDwgMCkKIAkJCXJldHVybiBpZDsKIAl9CiAKLQlpZiAodmlkZW8tPnN0ZXJtID09IE5VTEwpIHsKLQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9ERVNDUiwgIk5vIHN0cmVhbWluZyBlbnRpdHkgZm91bmQgaW4gIgotCQkJImNoYWluLlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXZjX3ByaW50X3Rlcm1zKHN0cnVjdCBsaXN0X2hlYWQgKnRlcm1zLCBjaGFyICpidWZmZXIpCit7CisJc3RydWN0IHV2Y19lbnRpdHkgKnRlcm07CisJdW5zaWduZWQgaW50IG50ZXJtcyA9IDA7CisJY2hhciAqcCA9IGJ1ZmZlcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGVybSwgdGVybXMsIGNoYWluKSB7CisJCXAgKz0gc3ByaW50ZihwLCAiJXUiLCB0ZXJtLT5pZCk7CisJCWlmICh0ZXJtLT5jaGFpbi5uZXh0ICE9IHRlcm1zKSB7CisJCQlwICs9IHNwcmludGYocCwgIiwiKTsKKwkJCWlmICgrK250ZXJtcyA+PSA0KSB7CisJCQkJcCArPSBzcHJpbnRmKHAsICIuLi4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBwIC0gYnVmZmVyOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdXZjX3ByaW50X2NoYWluKHN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluKQoreworCXN0YXRpYyBjaGFyIGJ1ZmZlcls0M107CisJY2hhciAqcCA9IGJ1ZmZlcjsKKworCXAgKz0gdXZjX3ByaW50X3Rlcm1zKCZjaGFpbi0+aXRlcm1zLCBwKTsKKwlwICs9IHNwcmludGYocCwgIiAtPiAiKTsKKwl1dmNfcHJpbnRfdGVybXMoJmNoYWluLT5vdGVybXMsIHApOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworLyoKKyAqIFNjYW4gdGhlIGRldmljZSBmb3IgdmlkZW8gY2hhaW5zIGFuZCByZWdpc3RlciB2aWRlbyBkZXZpY2VzLgorICoKKyAqIENoYWlucyBhcmUgc2Nhbm5lZCBzdGFydGluZyBhdCB0aGVpciBvdXRwdXQgdGVybWluYWxzIGFuZCB3YWxrZWQgYmFja3dhcmRzLgorICovCitzdGF0aWMgaW50IHV2Y19zY2FuX2RldmljZShzdHJ1Y3QgdXZjX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluOworCXN0cnVjdCB1dmNfZW50aXR5ICp0ZXJtOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZXJtLCAmZGV2LT5lbnRpdGllcywgbGlzdCkgeworCQlpZiAoIVVWQ19FTlRJVFlfSVNfT1RFUk0odGVybSkpCisJCQljb250aW51ZTsKKworCQkvKiBJZiB0aGUgdGVybWluYWwgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBhIGNoYWluLCBza2lwIGl0LgorCQkgKiBUaGlzIGNhbiBoYXBwZW4gZm9yIGNoYWlucyB0aGF0IGhhdmUgbXVsdGlwbGUgb3V0cHV0CisJCSAqIHRlcm1pbmFscywgd2hlcmUgYWxsIG91dHB1dCB0ZXJtaW5hbHMgYmVzaWRlIHRoZSBmaXJzdCBvbmUKKwkJICogd2lsbCBiZSBpbnNlcnRlZCBpbiB0aGUgY2hhaW4gaW4gZm9yd2FyZCBzY2Fucy4KKwkJICovCisJCWlmICh0ZXJtLT5jaGFpbi5uZXh0IHx8IHRlcm0tPmNoYWluLnByZXYpCisJCQljb250aW51ZTsKKworCQljaGFpbiA9IGt6YWxsb2Moc2l6ZW9mKCpjaGFpbiksIEdGUF9LRVJORUwpOworCQlpZiAoY2hhaW4gPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCUlOSVRfTElTVF9IRUFEKCZjaGFpbi0+aXRlcm1zKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmNoYWluLT5vdGVybXMpOworCQlJTklUX0xJU1RfSEVBRCgmY2hhaW4tPmV4dGVuc2lvbnMpOworCQltdXRleF9pbml0KCZjaGFpbi0+Y3RybF9tdXRleCk7CisJCWNoYWluLT5kZXYgPSBkZXY7CisKKwkJaWYgKHV2Y19zY2FuX2NoYWluKGNoYWluLCB0ZXJtKSA8IDApIHsKKwkJCWtmcmVlKGNoYWluKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdXZjX3RyYWNlKFVWQ19UUkFDRV9QUk9CRSwgIkZvdW5kIGEgdmFsaWQgdmlkZW8gY2hhaW4gKCVzKS5cbiIsCisJCQkgIHV2Y19wcmludF9jaGFpbihjaGFpbikpOworCisJCWxpc3RfYWRkX3RhaWwoJmNoYWluLT5saXN0LCAmZGV2LT5jaGFpbnMpOworCX0KKworCWlmIChsaXN0X2VtcHR5KCZkZXYtPmNoYWlucykpIHsKKwkJdXZjX3ByaW50ayhLRVJOX0lORk8sICJObyB2YWxpZCB2aWRlbyBjaGFpbiBmb3VuZC5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBSZWdpc3RlciB0aGUgdmlkZW8gZGV2aWNlcy4KLSAqCi0gKiBUaGUgZHJpdmVyIGN1cnJlbnRseSBzdXBwb3J0cyBhIHNpbmdsZSB2aWRlbyBkZXZpY2UgcGVyIGNvbnRyb2wgaW50ZXJmYWNlCi0gKiBvbmx5LiBUaGUgdGVybWluYWwgYW5kIHVuaXRzIG11c3QgbWF0Y2ggdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6Ci0gKgotICogSVRUXyogLT4gVkNfUFJPQ0VTU0lOR19VTklUIC0+IFZDX0VYVEVOU0lPTl9VTklUezAsbn0gLT4gVFRfU1RSRUFNSU5HCi0gKiBUVF9TVFJFQU1JTkcgLT4gVkNfUFJPQ0VTU0lOR19VTklUIC0+IFZDX0VYVEVOU0lPTl9VTklUezAsbn0gLT4gT1RUXyoKLSAqCi0gKiBUaGUgRXh0ZW5zaW9uIFVuaXRzLCBpZiBwcmVzZW50LCBtdXN0IGhhdmUgYSBzaW5nbGUgaW5wdXQgcGluLiBUaGUKLSAqIFByb2Nlc3NpbmcgVW5pdCBhbmQgRXh0ZW5zaW9uIFVuaXRzIGNhbiBiZSBpbiBhbnkgb3JkZXIuIEFkZGl0aW9uYWwKLSAqIEV4dGVuc2lvbiBVbml0cyBjb25uZWN0ZWQgdG8gdGhlIG1haW4gY2hhaW4gYXMgc2luZ2xlLXVuaXQgYnJhbmNoZXMgYXJlCi0gKiBhbHNvIHN1cHBvcnRlZC4KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVmlkZW8gZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24KICAqLwotc3RhdGljIGludCB1dmNfcmVnaXN0ZXJfdmlkZW8oc3RydWN0IHV2Y19kZXZpY2UgKmRldikKKworLyoKKyAqIFVucmVnaXN0ZXIgdGhlIHZpZGVvIGRldmljZXMuCisgKi8KK3N0YXRpYyB2b2lkIHV2Y191bnJlZ2lzdGVyX3ZpZGVvKHN0cnVjdCB1dmNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RyZWFtLCAmZGV2LT5zdHJlYW1zLCBsaXN0KSB7CisJCWlmIChzdHJlYW0tPnZkZXYgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJlYW0tPnZkZXYtPm1pbm9yID09IC0xKQorCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uoc3RyZWFtLT52ZGV2KTsKKwkJZWxzZQorCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uoc3RyZWFtLT52ZGV2KTsKKwkJc3RyZWFtLT52ZGV2ID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdXZjX3JlZ2lzdGVyX3ZpZGVvKHN0cnVjdCB1dmNfZGV2aWNlICpkZXYsCisJCXN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0pCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKLQlzdHJ1Y3QgdXZjX2VudGl0eSAqdGVybTsKLQlpbnQgZm91bmQgPSAwLCByZXQ7Ci0KLQkvKiBDaGVjayBpZiB0aGUgY29udHJvbCBpbnRlcmZhY2UgbWF0Y2hlcyB0aGUgc3RydWN0dXJlIHdlIGV4cGVjdC4gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlcm0sICZkZXYtPmVudGl0aWVzLCBsaXN0KSB7Ci0JCXN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW1pbmc7Ci0KLQkJaWYgKCFVVkNfRU5USVRZX0lTX1RFUk0odGVybSkgfHwgIVVWQ19FTlRJVFlfSVNfT1RFUk0odGVybSkpCi0JCQljb250aW51ZTsKLQotCQltZW1zZXQoJmRldi0+dmlkZW8sIDAsIHNpemVvZiBkZXYtPnZpZGVvKTsKLQkJbXV0ZXhfaW5pdCgmZGV2LT52aWRlby5jdHJsX211dGV4KTsKLQkJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkZW8uaXRlcm1zKTsKLQkJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkZW8uZXh0ZW5zaW9ucyk7Ci0JCWRldi0+dmlkZW8ub3Rlcm0gPSB0ZXJtOwotCQlkZXYtPnZpZGVvLmRldiA9IGRldjsKLQkJaWYgKHV2Y19zY2FuX2NoYWluKCZkZXYtPnZpZGVvKSA8IDApCi0JCQljb250aW51ZTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0cmVhbWluZywgJmRldi0+c3RyZWFtaW5nLCBsaXN0KSB7Ci0JCQlpZiAoc3RyZWFtaW5nLT5oZWFkZXIuYlRlcm1pbmFsTGluayA9PQotCQkJICAgIGRldi0+dmlkZW8uc3Rlcm0tPmlkKSB7Ci0JCQkJZGV2LT52aWRlby5zdHJlYW1pbmcgPSBzdHJlYW1pbmc7Ci0JCQkJZm91bmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKGZvdW5kKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKCFmb3VuZCkgewotCQl1dmNfcHJpbnRrKEtFUk5fSU5GTywgIk5vIHZhbGlkIHZpZGVvIGNoYWluIGZvdW5kLlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAodXZjX3RyYWNlX3BhcmFtICYgVVZDX1RSQUNFX1BST0JFKSB7Ci0JCXV2Y19wcmludGsoS0VSTl9JTkZPLCAiRm91bmQgYSB2YWxpZCB2aWRlbyBjaGFpbiAoIik7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkodGVybSwgJmRldi0+dmlkZW8uaXRlcm1zLCBjaGFpbikgewotCQkJcHJpbnRrKCIlZCIsIHRlcm0tPmlkKTsKLQkJCWlmICh0ZXJtLT5jaGFpbi5uZXh0ICE9ICZkZXYtPnZpZGVvLml0ZXJtcykKLQkJCQlwcmludGsoIiwiKTsKLQkJfQotCQlwcmludGsoIiAtPiAlZCkuXG4iLCBkZXYtPnZpZGVvLm90ZXJtLT5pZCk7Ci0JfQotCi0JLyogSW5pdGlhbGl6ZSB0aGUgdmlkZW8gYnVmZmVycyBxdWV1ZS4gKi8KLQl1dmNfcXVldWVfaW5pdCgmZGV2LT52aWRlby5xdWV1ZSwgZGV2LT52aWRlby5zdHJlYW1pbmctPnR5cGUpOworCWludCByZXQ7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBzdHJlYW1pbmcgaW50ZXJmYWNlIHdpdGggZGVmYXVsdCBzdHJlYW1pbmcKIAkgKiBwYXJhbWV0ZXJzLgogCSAqLwotCWlmICgocmV0ID0gdXZjX3ZpZGVvX2luaXQoJmRldi0+dmlkZW8pKSA8IDApIHsKKwlyZXQgPSB1dmNfdmlkZW9faW5pdChzdHJlYW0pOworCWlmIChyZXQgPCAwKSB7CiAJCXV2Y19wcmludGsoS0VSTl9FUlIsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZGV2aWNlICIKIAkJCSIoJWQpLlxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKQEAgLTE0OTUsOCArMTU2NywxMSBAQAogCiAJLyogUmVnaXN0ZXIgdGhlIGRldmljZSB3aXRoIFY0TC4gKi8KIAl2ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7Ci0JaWYgKHZkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOworCWlmICh2ZGV2ID09IE5VTEwpIHsKKwkJdXZjX3ByaW50ayhLRVJOX0VSUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSB2aWRlbyBkZXZpY2UgKCVkKS5cbiIsCisJCQkgICByZXQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAkvKiBXZSBhbHJlYWR5IGhvbGQgYSByZWZlcmVuY2UgdG8gZGV2LT51ZGV2LiBUaGUgdmlkZW8gZGV2aWNlIHdpbGwgYmUKIAkgKiB1bnJlZ2lzdGVyZWQgYmVmb3JlIHRoZSByZWZlcmVuY2UgaXMgcmVsZWFzZWQsIHNvIHdlIGRvbid0IG5lZWQgdG8KQEAgLTE1MTEsMTkgKzE1ODYsNzQgQEAKIAkvKiBTZXQgdGhlIGRyaXZlciBkYXRhIGJlZm9yZSBjYWxsaW5nIHZpZGVvX3JlZ2lzdGVyX2RldmljZSwgb3RoZXJ3aXNlCiAJICogdXZjX3Y0bDJfb3BlbiBtaWdodCByYWNlIHVzLgogCSAqLwotCWRldi0+dmlkZW8udmRldiA9IHZkZXY7Ci0JdmlkZW9fc2V0X2RydmRhdGEodmRldiwgJmRldi0+dmlkZW8pOworCXN0cmVhbS0+dmRldiA9IHZkZXY7CisJdmlkZW9fc2V0X2RydmRhdGEodmRldiwgc3RyZWFtKTsKIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpIDwgMCkgewotCQlkZXYtPnZpZGVvLnZkZXYgPSBOVUxMOworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CisJaWYgKHJldCA8IDApIHsKKwkJdXZjX3ByaW50ayhLRVJOX0VSUiwgIkZhaWxlZCB0byByZWdpc3RlciB2aWRlbyBkZXZpY2UgKCVkKS5cbiIsCisJCQkgICByZXQpOworCQlzdHJlYW0tPnZkZXYgPSBOVUxMOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2ZGV2KTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiAwOwogfQogCiAvKgorICogUmVnaXN0ZXIgYWxsIHZpZGVvIGRldmljZXMgaW4gYWxsIGNoYWlucy4KKyAqLworc3RhdGljIGludCB1dmNfcmVnaXN0ZXJfdGVybXMoc3RydWN0IHV2Y19kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbiwgc3RydWN0IGxpc3RfaGVhZCAqdGVybXMpCit7CisJc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbTsKKwlzdHJ1Y3QgdXZjX2VudGl0eSAqdGVybTsKKwlpbnQgcmV0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZXJtLCB0ZXJtcywgY2hhaW4pIHsKKwkJaWYgKFVWQ19FTlRJVFlfVFlQRSh0ZXJtKSAhPSBVVkNfVFRfU1RSRUFNSU5HKQorCQkJY29udGludWU7CisKKwkJc3RyZWFtID0gdXZjX3N0cmVhbV9ieV9pZChkZXYsIHRlcm0tPmlkKTsKKwkJaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisJCQl1dmNfcHJpbnRrKEtFUk5fSU5GTywgIk5vIHN0cmVhbWluZyBpbnRlcmZhY2UgZm91bmQgIgorCQkJCSAgICJmb3IgdGVybWluYWwgJXUuIiwgdGVybS0+aWQpOworCQkJY29udGludWU7CisJCX0KKworCQlzdHJlYW0tPmNoYWluID0gY2hhaW47CisJCXJldCA9IHV2Y19yZWdpc3Rlcl92aWRlbyhkZXYsIHN0cmVhbSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1dmNfcmVnaXN0ZXJfY2hhaW5zKHN0cnVjdCB1dmNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHV2Y192aWRlb19jaGFpbiAqY2hhaW47CisJaW50IHJldDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZkZXYtPmNoYWlucywgbGlzdCkgeworCQlyZXQgPSB1dmNfcmVnaXN0ZXJfdGVybXMoZGV2LCBjaGFpbiwgJmNoYWluLT5pdGVybXMpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gdXZjX3JlZ2lzdGVyX3Rlcm1zKGRldiwgY2hhaW4sICZjaGFpbi0+b3Rlcm1zKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVTQiBwcm9iZSwgZGlzY29ubmVjdCwgc3VzcGVuZCBhbmQgcmVzdW1lCisgKi8KKworLyoKICAqIERlbGV0ZSB0aGUgVVZDIGRldmljZS4KICAqCiAgKiBDYWxsZWQgYnkgdGhlIGtlcm5lbCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgdXZjX2RldmljZSBzdHJ1Y3R1cmUKQEAgLTE1NDQsNyArMTY3NCw3IEBACiAJc3RydWN0IHV2Y19kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgdXZjX2RldmljZSwga3JlZik7CiAJc3RydWN0IGxpc3RfaGVhZCAqcCwgKm47CiAKLQkvKiBVbnJlZ2lzdGVyIHRoZSB2aWRlbyBkZXZpY2UuICovCisJLyogVW5yZWdpc3RlciB0aGUgdmlkZW8gZGV2aWNlcy4gKi8KIAl1dmNfdW5yZWdpc3Rlcl92aWRlbyhkZXYpOwogCXVzYl9wdXRfaW50ZihkZXYtPmludGYpOwogCXVzYl9wdXRfZGV2KGRldi0+dWRldik7CkBAIC0xNTUyLDEzICsxNjgyLDE5IEBACiAJdXZjX3N0YXR1c19jbGVhbnVwKGRldik7CiAJdXZjX2N0cmxfY2xlYW51cF9kZXZpY2UoZGV2KTsKIAorCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmZGV2LT5jaGFpbnMpIHsKKwkJc3RydWN0IHV2Y192aWRlb19jaGFpbiAqY2hhaW47CisJCWNoYWluID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluLCBsaXN0KTsKKwkJa2ZyZWUoY2hhaW4pOworCX0KKwogCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmZGV2LT5lbnRpdGllcykgewogCQlzdHJ1Y3QgdXZjX2VudGl0eSAqZW50aXR5OwogCQllbnRpdHkgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCB1dmNfZW50aXR5LCBsaXN0KTsKIAkJa2ZyZWUoZW50aXR5KTsKIAl9CiAKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJmRldi0+c3RyZWFtaW5nKSB7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZkZXYtPnN0cmVhbXMpIHsKIAkJc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbWluZzsKIAkJc3RyZWFtaW5nID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgdXZjX3N0cmVhbWluZywgbGlzdCk7CiAJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJnV2Y19kcml2ZXIuZHJpdmVyLApAQCAtMTU5Miw3ICsxNzI4LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5lbnRpdGllcyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRldi0+c3RyZWFtaW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5jaGFpbnMpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnN0cmVhbXMpOwogCWtyZWZfaW5pdCgmZGV2LT5rcmVmKTsKIAlhdG9taWNfc2V0KCZkZXYtPnVzZXJzLCAwKTsKIApAQCAtMTYzMyw4ICsxNzcwLDEyIEBACiAJaWYgKHV2Y19jdHJsX2luaXRfZGV2aWNlKGRldikgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JLyogUmVnaXN0ZXIgdGhlIHZpZGVvIGRldmljZXMuICovCi0JaWYgKHV2Y19yZWdpc3Rlcl92aWRlbyhkZXYpIDwgMCkKKwkvKiBTY2FuIHRoZSBkZXZpY2UgZm9yIHZpZGVvIGNoYWlucy4gKi8KKwlpZiAodXZjX3NjYW5fZGV2aWNlKGRldikgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogUmVnaXN0ZXIgdmlkZW8gZGV2aWNlcy4gKi8KKwlpZiAodXZjX3JlZ2lzdGVyX2NoYWlucyhkZXYpIDwgMCkKIAkJZ290byBlcnJvcjsKIAogCS8qIFNhdmUgb3VyIGRhdGEgcG9pbnRlciBpbiB0aGUgaW50ZXJmYWNlIGRhdGEuICovCkBAIC0xNjY0LDcgKzE4MDUsOCBAQAogCSAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAKLQlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzID09IFNDX1ZJREVPU1RSRUFNSU5HKQorCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0KKwkgICAgVVZDX1NDX1ZJREVPU1RSRUFNSU5HKQogCQlyZXR1cm47CiAKIAkvKiB1dmNfdjRsMl9vcGVuKCkgbWlnaHQgcmFjZSB1dmNfZGlzY29ubmVjdCgpLiBBIHN0YXRpYyBkcml2ZXItd2lkZQpAQCAtMTY4NywzMSArMTgyOSwzNiBAQAogc3RhdGljIGludCB1dmNfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7CiAJc3RydWN0IHV2Y19kZXZpY2UgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbTsKIAogCXV2Y190cmFjZShVVkNfVFJBQ0VfU1VTUEVORCwgIlN1c3BlbmRpbmcgaW50ZXJmYWNlICV1XG4iLAogCQlpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKIAogCS8qIENvbnRyb2xzIGFyZSBjYWNoZWQgb24gdGhlIGZseSBzbyB0aGV5IGRvbid0IG5lZWQgdG8gYmUgc2F2ZWQuICovCi0JaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBTQ19WSURFT0NPTlRST0wpCisJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyA9PQorCSAgICBVVkNfU0NfVklERU9DT05UUk9MKQogCQlyZXR1cm4gdXZjX3N0YXR1c19zdXNwZW5kKGRldik7CiAKLQlpZiAoZGV2LT52aWRlby5zdHJlYW1pbmctPmludGYgIT0gaW50ZikgewotCQl1dmNfdHJhY2UoVVZDX1RSQUNFX1NVU1BFTkQsICJTdXNwZW5kOiB2aWRlbyBzdHJlYW1pbmcgVVNCICIKLQkJCQkiaW50ZXJmYWNlIG1pc21hdGNoLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RyZWFtLCAmZGV2LT5zdHJlYW1zLCBsaXN0KSB7CisJCWlmIChzdHJlYW0tPmludGYgPT0gaW50ZikKKwkJCXJldHVybiB1dmNfdmlkZW9fc3VzcGVuZChzdHJlYW0pOwogCX0KIAotCXJldHVybiB1dmNfdmlkZW9fc3VzcGVuZCgmZGV2LT52aWRlbyk7CisJdXZjX3RyYWNlKFVWQ19UUkFDRV9TVVNQRU5ELCAiU3VzcGVuZDogdmlkZW8gc3RyZWFtaW5nIFVTQiBpbnRlcmZhY2UgIgorCQkJIm1pc21hdGNoLlxuIik7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgX191dmNfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBpbnQgcmVzZXQpCiB7CiAJc3RydWN0IHV2Y19kZXZpY2UgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbTsKIAogCXV2Y190cmFjZShVVkNfVFJBQ0VfU1VTUEVORCwgIlJlc3VtaW5nIGludGVyZmFjZSAldVxuIiwKIAkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CiAKLQlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzID09IFNDX1ZJREVPQ09OVFJPTCkgeworCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0KKwkgICAgVVZDX1NDX1ZJREVPQ09OVFJPTCkgewogCQlpZiAocmVzZXQpIHsKIAkJCWludCByZXQgPSB1dmNfY3RybF9yZXN1bWVfZGV2aWNlKGRldik7CiAKQEAgLTE3MjIsMTMgKzE4NjksMTQgQEAKIAkJcmV0dXJuIHV2Y19zdGF0dXNfcmVzdW1lKGRldik7CiAJfQogCi0JaWYgKGRldi0+dmlkZW8uc3RyZWFtaW5nLT5pbnRmICE9IGludGYpIHsKLQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9TVVNQRU5ELCAiUmVzdW1lOiB2aWRlbyBzdHJlYW1pbmcgVVNCICIKLQkJCQkiaW50ZXJmYWNlIG1pc21hdGNoLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RyZWFtLCAmZGV2LT5zdHJlYW1zLCBsaXN0KSB7CisJCWlmIChzdHJlYW0tPmludGYgPT0gaW50ZikKKwkJCXJldHVybiB1dmNfdmlkZW9fcmVzdW1lKHN0cmVhbSk7CiAJfQogCi0JcmV0dXJuIHV2Y192aWRlb19yZXN1bWUoJmRldi0+dmlkZW8pOworCXV2Y190cmFjZShVVkNfVFJBQ0VfU1VTUEVORCwgIlJlc3VtZTogdmlkZW8gc3RyZWFtaW5nIFVTQiBpbnRlcmZhY2UgIgorCQkJIm1pc21hdGNoLlxuIik7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgdXZjX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKQEAgLTE4ODAsNyArMjAyOCw4IEBACiAJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAogCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCiAJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKLQkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYIH0sCisJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1BST0JFX01JTk1BWAorCQkJCXwgVVZDX1FVSVJLX1BST0JFX0RFRiB9LAogCS8qIFN5bnRlayAoSFAgU3BhcnRhbikgKi8KIAl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQogCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKQEAgLTE5NDMsNyArMjA5Miw4IEBACiAJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAogCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCiAJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKLQkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfRVhUUkFGSUVMRFMgfSwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYCisJCQkJfCBVVkNfUVVJUktfUFJPQkVfRVhUUkFGSUVMRFMgfSwKIAkvKiBFY2FtbSBQaWNvIGlNYWdlICovCiAJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKIAkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfaXNpZ2h0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfaXNpZ2h0LmMKaW5kZXggNDM2ZjQ2Mi4uYTkyODViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2lzaWdodC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19pc2lnaHQuYwpAQCAtOTksNyArOTksNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHV2Y192aWRlb19kZWNvZGVfaXNpZ2h0KHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAordm9pZCB1dmNfdmlkZW9fZGVjb2RlX2lzaWdodChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJCXN0cnVjdCB1dmNfYnVmZmVyICpidWYpCiB7CiAJaW50IHJldCwgaTsKQEAgLTEyMCw3ICsxMjAsNyBAQAogCQkgKiBwcm9jZXNzZXMgdGhlIGRhdGEgb2YgdGhlIGZpcnN0IHBheWxvYWQgb2YgdGhlIG5ldyBmcmFtZS4KIAkJICovCiAJCWRvIHsKLQkJCXJldCA9IGlzaWdodF9kZWNvZGUoJnZpZGVvLT5xdWV1ZSwgYnVmLAorCQkJcmV0ID0gaXNpZ2h0X2RlY29kZSgmc3RyZWFtLT5xdWV1ZSwgYnVmLAogCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciArCiAJCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0LAogCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpOwpAQCAtMTMwLDcgKzEzMCw4IEBACiAKIAkJCWlmIChidWYtPnN0YXRlID09IFVWQ19CVUZfU1RBVEVfRE9ORSB8fAogCQkJICAgIGJ1Zi0+c3RhdGUgPT0gVVZDX0JVRl9TVEFURV9FUlJPUikKLQkJCQlidWYgPSB1dmNfcXVldWVfbmV4dF9idWZmZXIoJnZpZGVvLT5xdWV1ZSwgYnVmKTsKKwkJCQlidWYgPSB1dmNfcXVldWVfbmV4dF9idWZmZXIoJnN0cmVhbS0+cXVldWUsCisJCQkJCQkJYnVmKTsKIAkJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCmluZGV4IDVlNzdjYWQuLjllNzM1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwpAQCAtNDAsNyArNDAsNyBAQAogICogdGFibGUgZm9yIHRoZSBjb250cm9scyB0aGF0IGNhbiBiZSBtYXBwZWQgZGlyZWN0bHksIGFuZCBoYW5kbGUgdGhlIG90aGVycwogICogbWFudWFsbHkuCiAgKi8KLXN0YXRpYyBpbnQgdXZjX3Y0bDJfcXVlcnlfbWVudShzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCitzdGF0aWMgaW50IHV2Y192NGwyX3F1ZXJ5X21lbnUoc3RydWN0IHV2Y192aWRlb19jaGFpbiAqY2hhaW4sCiAJc3RydWN0IHY0bDJfcXVlcnltZW51ICpxdWVyeV9tZW51KQogewogCXN0cnVjdCB1dmNfbWVudV9pbmZvICptZW51X2luZm87CkBAIC00OSw3ICs0OSw3IEBACiAJdTMyIGluZGV4ID0gcXVlcnlfbWVudS0+aW5kZXg7CiAJdTMyIGlkID0gcXVlcnlfbWVudS0+aWQ7CiAKLQljdHJsID0gdXZjX2ZpbmRfY29udHJvbCh2aWRlbywgcXVlcnlfbWVudS0+aWQsICZtYXBwaW5nKTsKKwljdHJsID0gdXZjX2ZpbmRfY29udHJvbChjaGFpbiwgcXVlcnlfbWVudS0+aWQsICZtYXBwaW5nKTsKIAlpZiAoY3RybCA9PSBOVUxMIHx8IG1hcHBpbmctPnY0bDJfdHlwZSAhPSBWNEwyX0NUUkxfVFlQRV9NRU5VKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTAzLDcgKzEwMyw3IEBACiAJcmV0dXJuIGludGVydmFsOwogfQogCi1zdGF0aWMgaW50IHV2Y192NGwyX3RyeV9mb3JtYXQoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorc3RhdGljIGludCB1dmNfdjRsMl90cnlfZm9ybWF0KHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQsIHN0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgKnByb2JlLAogCXN0cnVjdCB1dmNfZm9ybWF0ICoqdXZjX2Zvcm1hdCwgc3RydWN0IHV2Y19mcmFtZSAqKnV2Y19mcmFtZSkKIHsKQEAgLTExNiw3ICsxMTYsNyBAQAogCWludCByZXQgPSAwOwogCV9fdTggKmZjYzsKIAotCWlmIChmbXQtPnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSkKKwlpZiAoZm10LT50eXBlICE9IHN0cmVhbS0+dHlwZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmY2MgPSAoX191OCAqKSZmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQ7CkBAIC0xMjYsOCArMTI2LDggQEAKIAkJCWZtdC0+Zm10LnBpeC53aWR0aCwgZm10LT5mbXQucGl4LmhlaWdodCk7CiAKIAkvKiBDaGVjayBpZiB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgdGhlIHJlcXVlc3RlZCBmb3JtYXQuICovCi0JZm9yIChpID0gMDsgaSA8IHZpZGVvLT5zdHJlYW1pbmctPm5mb3JtYXRzOyArK2kpIHsKLQkJZm9ybWF0ID0gJnZpZGVvLT5zdHJlYW1pbmctPmZvcm1hdFtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgc3RyZWFtLT5uZm9ybWF0czsgKytpKSB7CisJCWZvcm1hdCA9ICZzdHJlYW0tPmZvcm1hdFtpXTsKIAkJaWYgKGZvcm1hdC0+ZmNjID09IGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCkKIAkJCWJyZWFrOwogCX0KQEAgLTE5MSwxMiArMTkxLDEzIEBACiAJICogZGV2ZWxvcGVycyB0ZXN0IHRoZWlyIHdlYmNhbXMgd2l0aCB0aGUgTGludXggZHJpdmVyIGFzIHdlbGwgYXMgd2l0aAogCSAqIHRoZSBXaW5kb3dzIGRyaXZlcikuCiAJICovCi0JaWYgKHZpZGVvLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19QUk9CRV9FWFRSQUZJRUxEUykKKwlpZiAoc3RyZWFtLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19QUk9CRV9FWFRSQUZJRUxEUykKIAkJcHJvYmUtPmR3TWF4VmlkZW9GcmFtZVNpemUgPQotCQkJdmlkZW8tPnN0cmVhbWluZy0+Y3RybC5kd01heFZpZGVvRnJhbWVTaXplOworCQkJc3RyZWFtLT5jdHJsLmR3TWF4VmlkZW9GcmFtZVNpemU7CiAKIAkvKiBQcm9iZSB0aGUgZGV2aWNlLiAqLwotCWlmICgocmV0ID0gdXZjX3Byb2JlX3ZpZGVvKHZpZGVvLCBwcm9iZSkpIDwgMCkKKwlyZXQgPSB1dmNfcHJvYmVfdmlkZW8oc3RyZWFtLCBwcm9iZSk7CisJaWYgKHJldCA8IDApCiAJCWdvdG8gZG9uZTsKIAogCWZtdC0+Zm10LnBpeC53aWR0aCA9IGZyYW1lLT53V2lkdGg7CkBAIC0yMTYsMTMgKzIxNywxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdXZjX3Y0bDJfZ2V0X2Zvcm1hdChzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCitzdGF0aWMgaW50IHV2Y192NGwyX2dldF9mb3JtYXQoc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSwKIAlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKLQlzdHJ1Y3QgdXZjX2Zvcm1hdCAqZm9ybWF0ID0gdmlkZW8tPnN0cmVhbWluZy0+Y3VyX2Zvcm1hdDsKLQlzdHJ1Y3QgdXZjX2ZyYW1lICpmcmFtZSA9IHZpZGVvLT5zdHJlYW1pbmctPmN1cl9mcmFtZTsKKwlzdHJ1Y3QgdXZjX2Zvcm1hdCAqZm9ybWF0ID0gc3RyZWFtLT5jdXJfZm9ybWF0OworCXN0cnVjdCB1dmNfZnJhbWUgKmZyYW1lID0gc3RyZWFtLT5jdXJfZnJhbWU7CiAKLQlpZiAoZm10LT50eXBlICE9IHZpZGVvLT5zdHJlYW1pbmctPnR5cGUpCisJaWYgKGZtdC0+dHlwZSAhPSBzdHJlYW0tPnR5cGUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGZvcm1hdCA9PSBOVUxMIHx8IGZyYW1lID09IE5VTEwpCkBAIC0yMzMsMTQgKzIzNCwxNCBAQAogCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBmcmFtZS0+d0hlaWdodDsKIAlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CiAJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGZvcm1hdC0+YnBwICogZnJhbWUtPndXaWR0aCAvIDg7Ci0JZm10LT5mbXQucGl4LnNpemVpbWFnZSA9IHZpZGVvLT5zdHJlYW1pbmctPmN0cmwuZHdNYXhWaWRlb0ZyYW1lU2l6ZTsKKwlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gc3RyZWFtLT5jdHJsLmR3TWF4VmlkZW9GcmFtZVNpemU7CiAJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBmb3JtYXQtPmNvbG9yc3BhY2U7CiAJZm10LT5mbXQucGl4LnByaXYgPSAwOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXZjX3Y0bDJfc2V0X2Zvcm1hdChzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCitzdGF0aWMgaW50IHV2Y192NGwyX3NldF9mb3JtYXQoc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSwKIAlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKIAlzdHJ1Y3QgdXZjX3N0cmVhbWluZ19jb250cm9sIHByb2JlOwpAQCAtMjQ4LDM5ICsyNDksMzkgQEAKIAlzdHJ1Y3QgdXZjX2ZyYW1lICpmcmFtZTsKIAlpbnQgcmV0OwogCi0JaWYgKGZtdC0+dHlwZSAhPSB2aWRlby0+c3RyZWFtaW5nLT50eXBlKQorCWlmIChmbXQtPnR5cGUgIT0gc3RyZWFtLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh1dmNfcXVldWVfYWxsb2NhdGVkKCZ2aWRlby0+cXVldWUpKQorCWlmICh1dmNfcXVldWVfYWxsb2NhdGVkKCZzdHJlYW0tPnF1ZXVlKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXJldCA9IHV2Y192NGwyX3RyeV9mb3JtYXQodmlkZW8sIGZtdCwgJnByb2JlLCAmZm9ybWF0LCAmZnJhbWUpOworCXJldCA9IHV2Y192NGwyX3RyeV9mb3JtYXQoc3RyZWFtLCBmbXQsICZwcm9iZSwgJmZvcm1hdCwgJmZyYW1lKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCW1lbWNweSgmdmlkZW8tPnN0cmVhbWluZy0+Y3RybCwgJnByb2JlLCBzaXplb2YgcHJvYmUpOwotCXZpZGVvLT5zdHJlYW1pbmctPmN1cl9mb3JtYXQgPSBmb3JtYXQ7Ci0JdmlkZW8tPnN0cmVhbWluZy0+Y3VyX2ZyYW1lID0gZnJhbWU7CisJbWVtY3B5KCZzdHJlYW0tPmN0cmwsICZwcm9iZSwgc2l6ZW9mIHByb2JlKTsKKwlzdHJlYW0tPmN1cl9mb3JtYXQgPSBmb3JtYXQ7CisJc3RyZWFtLT5jdXJfZnJhbWUgPSBmcmFtZTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHV2Y192NGwyX2dldF9zdHJlYW1wYXJtKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKK3N0YXRpYyBpbnQgdXZjX3Y0bDJfZ2V0X3N0cmVhbXBhcm0oc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSwKIAkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSkKIHsKIAl1aW50MzJfdCBudW1lcmF0b3IsIGRlbm9taW5hdG9yOwogCi0JaWYgKHBhcm0tPnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSkKKwlpZiAocGFybS0+dHlwZSAhPSBzdHJlYW0tPnR5cGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbnVtZXJhdG9yID0gdmlkZW8tPnN0cmVhbWluZy0+Y3RybC5kd0ZyYW1lSW50ZXJ2YWw7CisJbnVtZXJhdG9yID0gc3RyZWFtLT5jdHJsLmR3RnJhbWVJbnRlcnZhbDsKIAlkZW5vbWluYXRvciA9IDEwMDAwMDAwOwogCXV2Y19zaW1wbGlmeV9mcmFjdGlvbigmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsIDgsIDMzMyk7CiAKIAltZW1zZXQocGFybSwgMCwgc2l6ZW9mICpwYXJtKTsKLQlwYXJtLT50eXBlID0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZTsKKwlwYXJtLT50eXBlID0gc3RyZWFtLT50eXBlOwogCi0JaWYgKHZpZGVvLT5zdHJlYW1pbmctPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJaWYgKHN0cmVhbS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKIAkJcGFybS0+cGFybS5jYXB0dXJlLmNhcGFiaWxpdHkgPSBWNEwyX0NBUF9USU1FUEVSRlJBTUU7CiAJCXBhcm0tPnBhcm0uY2FwdHVyZS5jYXB0dXJlbW9kZSA9IDA7CiAJCXBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUubnVtZXJhdG9yID0gbnVtZXJhdG9yOwpAQCAtMjk3LDE5ICsyOTgsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1dmNfdjRsMl9zZXRfc3RyZWFtcGFybShzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCitzdGF0aWMgaW50IHV2Y192NGwyX3NldF9zdHJlYW1wYXJtKHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcm0pCiB7Ci0Jc3RydWN0IHV2Y19mcmFtZSAqZnJhbWUgPSB2aWRlby0+c3RyZWFtaW5nLT5jdXJfZnJhbWU7CisJc3RydWN0IHV2Y19mcmFtZSAqZnJhbWUgPSBzdHJlYW0tPmN1cl9mcmFtZTsKIAlzdHJ1Y3QgdXZjX3N0cmVhbWluZ19jb250cm9sIHByb2JlOwogCXN0cnVjdCB2NGwyX2ZyYWN0IHRpbWVwZXJmcmFtZTsKIAl1aW50MzJfdCBpbnRlcnZhbDsKIAlpbnQgcmV0OwogCi0JaWYgKHBhcm0tPnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSkKKwlpZiAocGFybS0+dHlwZSAhPSBzdHJlYW0tPnR5cGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHV2Y19xdWV1ZV9zdHJlYW1pbmcoJnZpZGVvLT5xdWV1ZSkpCisJaWYgKHV2Y19xdWV1ZV9zdHJlYW1pbmcoJnN0cmVhbS0+cXVldWUpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKHBhcm0tPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQpAQCAtMzE3LDcgKzMxOCw3IEBACiAJZWxzZQogCQl0aW1lcGVyZnJhbWUgPSBwYXJtLT5wYXJtLm91dHB1dC50aW1lcGVyZnJhbWU7CiAKLQltZW1jcHkoJnByb2JlLCAmdmlkZW8tPnN0cmVhbWluZy0+Y3RybCwgc2l6ZW9mIHByb2JlKTsKKwltZW1jcHkoJnByb2JlLCAmc3RyZWFtLT5jdHJsLCBzaXplb2YgcHJvYmUpOwogCWludGVydmFsID0gdXZjX2ZyYWN0aW9uX3RvX2ludGVydmFsKHRpbWVwZXJmcmFtZS5udW1lcmF0b3IsCiAJCXRpbWVwZXJmcmFtZS5kZW5vbWluYXRvcik7CiAKQEAgLTMyNiwxMCArMzI3LDExIEBACiAJcHJvYmUuZHdGcmFtZUludGVydmFsID0gdXZjX3RyeV9mcmFtZV9pbnRlcnZhbChmcmFtZSwgaW50ZXJ2YWwpOwogCiAJLyogUHJvYmUgdGhlIGRldmljZSB3aXRoIHRoZSBuZXcgc2V0dGluZ3MuICovCi0JaWYgKChyZXQgPSB1dmNfcHJvYmVfdmlkZW8odmlkZW8sICZwcm9iZSkpIDwgMCkKKwlyZXQgPSB1dmNfcHJvYmVfdmlkZW8oc3RyZWFtLCAmcHJvYmUpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JbWVtY3B5KCZ2aWRlby0+c3RyZWFtaW5nLT5jdHJsLCAmcHJvYmUsIHNpemVvZiBwcm9iZSk7CisJbWVtY3B5KCZzdHJlYW0tPmN0cmwsICZwcm9iZSwgc2l6ZW9mIHByb2JlKTsKIAogCS8qIFJldHVybiB0aGUgYWN0dWFsIGZyYW1lIHBlcmlvZC4gKi8KIAl0aW1lcGVyZnJhbWUubnVtZXJhdG9yID0gcHJvYmUuZHdGcmFtZUludGVydmFsOwpAQCAtMzgyLDggKzM4NCw4IEBACiAKIAkvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGFscmVhZHkgaGFzIGEgcHJpdmlsZWdlZCBoYW5kbGUuICovCiAJbXV0ZXhfbG9jaygmdXZjX2RyaXZlci5vcGVuX211dGV4KTsKLQlpZiAoYXRvbWljX2luY19yZXR1cm4oJmhhbmRsZS0+ZGV2aWNlLT5hY3RpdmUpICE9IDEpIHsKLQkJYXRvbWljX2RlYygmaGFuZGxlLT5kZXZpY2UtPmFjdGl2ZSk7CisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZoYW5kbGUtPnN0cmVhbS0+YWN0aXZlKSAhPSAxKSB7CisJCWF0b21pY19kZWMoJmhhbmRsZS0+c3RyZWFtLT5hY3RpdmUpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0zOTgsNyArNDAwLDcgQEAKIHN0YXRpYyB2b2lkIHV2Y19kaXNtaXNzX3ByaXZpbGVnZXMoc3RydWN0IHV2Y19maCAqaGFuZGxlKQogewogCWlmIChoYW5kbGUtPnN0YXRlID09IFVWQ19IQU5ETEVfQUNUSVZFKQotCQlhdG9taWNfZGVjKCZoYW5kbGUtPmRldmljZS0+YWN0aXZlKTsKKwkJYXRvbWljX2RlYygmaGFuZGxlLT5zdHJlYW0tPmFjdGl2ZSk7CiAKIAloYW5kbGUtPnN0YXRlID0gVVZDX0hBTkRMRV9QQVNTSVZFOwogfQpAQCAtNDE0LDQ1ICs0MTYsNDcgQEAKIAogc3RhdGljIGludCB1dmNfdjRsMl9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbzsKKwlzdHJ1Y3QgdXZjX3N0cmVhbWluZyAqc3RyZWFtOwogCXN0cnVjdCB1dmNfZmggKmhhbmRsZTsKIAlpbnQgcmV0ID0gMDsKIAogCXV2Y190cmFjZShVVkNfVFJBQ0VfQ0FMTFMsICJ1dmNfdjRsMl9vcGVuXG4iKTsKIAltdXRleF9sb2NrKCZ1dmNfZHJpdmVyLm9wZW5fbXV0ZXgpOwotCXZpZGVvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJlYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JaWYgKHZpZGVvLT5kZXYtPnN0YXRlICYgVVZDX0RFVl9ESVNDT05ORUNURUQpIHsKKwlpZiAoc3RyZWFtLT5kZXYtPnN0YXRlICYgVVZDX0RFVl9ESVNDT05ORUNURUQpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBkb25lOwogCX0KIAotCXJldCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSh2aWRlby0+ZGV2LT5pbnRmKTsKKwlyZXQgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc3RyZWFtLT5kZXYtPmludGYpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGRvbmU7CiAKIAkvKiBDcmVhdGUgdGhlIGRldmljZSBoYW5kbGUuICovCiAJaGFuZGxlID0ga3phbGxvYyhzaXplb2YgKmhhbmRsZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGhhbmRsZSA9PSBOVUxMKSB7Ci0JCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZSh2aWRlby0+ZGV2LT5pbnRmKTsKKwkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHN0cmVhbS0+ZGV2LT5pbnRmKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBkb25lOwogCX0KIAotCWlmIChhdG9taWNfaW5jX3JldHVybigmdmlkZW8tPmRldi0+dXNlcnMpID09IDEpIHsKLQkJaWYgKChyZXQgPSB1dmNfc3RhdHVzX3N0YXJ0KHZpZGVvLT5kZXYpKSA8IDApIHsKLQkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZSh2aWRlby0+ZGV2LT5pbnRmKTsKLQkJCWF0b21pY19kZWMoJnZpZGVvLT5kZXYtPnVzZXJzKTsKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnN0cmVhbS0+ZGV2LT51c2VycykgPT0gMSkgeworCQlyZXQgPSB1dmNfc3RhdHVzX3N0YXJ0KHN0cmVhbS0+ZGV2KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzdHJlYW0tPmRldi0+aW50Zik7CisJCQlhdG9taWNfZGVjKCZzdHJlYW0tPmRldi0+dXNlcnMpOwogCQkJa2ZyZWUoaGFuZGxlKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KIAotCWhhbmRsZS0+ZGV2aWNlID0gdmlkZW87CisJaGFuZGxlLT5jaGFpbiA9IHN0cmVhbS0+Y2hhaW47CisJaGFuZGxlLT5zdHJlYW0gPSBzdHJlYW07CiAJaGFuZGxlLT5zdGF0ZSA9IFVWQ19IQU5ETEVfUEFTU0lWRTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBoYW5kbGU7CiAKLQlrcmVmX2dldCgmdmlkZW8tPmRldi0+a3JlZik7CisJa3JlZl9nZXQoJnN0cmVhbS0+ZGV2LT5rcmVmKTsKIAogZG9uZToKIAltdXRleF91bmxvY2soJnV2Y19kcml2ZXIub3Blbl9tdXRleCk7CkBAIC00NjEsMjAgKzQ2NSwyMCBAQAogCiBzdGF0aWMgaW50IHV2Y192NGwyX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgdXZjX2ZoICpoYW5kbGUgPSAoc3RydWN0IHV2Y19maCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXZjX3N0cmVhbWluZyAqc3RyZWFtID0gaGFuZGxlLT5zdHJlYW07CiAKIAl1dmNfdHJhY2UoVVZDX1RSQUNFX0NBTExTLCAidXZjX3Y0bDJfcmVsZWFzZVxuIik7CiAKIAkvKiBPbmx5IGZyZWUgcmVzb3VyY2VzIGlmIHRoaXMgaXMgYSBwcml2aWxlZ2VkIGhhbmRsZS4gKi8KIAlpZiAodXZjX2hhc19wcml2aWxlZ2VzKGhhbmRsZSkpIHsKLQkJdXZjX3ZpZGVvX2VuYWJsZSh2aWRlbywgMCk7CisJCXV2Y192aWRlb19lbmFibGUoc3RyZWFtLCAwKTsKIAotCQltdXRleF9sb2NrKCZ2aWRlby0+cXVldWUubXV0ZXgpOwotCQlpZiAodXZjX2ZyZWVfYnVmZmVycygmdmlkZW8tPnF1ZXVlKSA8IDApCisJCW11dGV4X2xvY2soJnN0cmVhbS0+cXVldWUubXV0ZXgpOworCQlpZiAodXZjX2ZyZWVfYnVmZmVycygmc3RyZWFtLT5xdWV1ZSkgPCAwKQogCQkJdXZjX3ByaW50ayhLRVJOX0VSUiwgInV2Y192NGwyX3JlbGVhc2U6IFVuYWJsZSB0byAiCiAJCQkJCSJmcmVlIGJ1ZmZlcnMuXG4iKTsKLQkJbXV0ZXhfdW5sb2NrKCZ2aWRlby0+cXVldWUubXV0ZXgpOworCQltdXRleF91bmxvY2soJnN0cmVhbS0+cXVldWUubXV0ZXgpOwogCX0KIAogCS8qIFJlbGVhc2UgdGhlIGZpbGUgaGFuZGxlLiAqLwpAQCAtNDgyLDE5ICs0ODYsMjAgQEAKIAlrZnJlZShoYW5kbGUpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAKLQlpZiAoYXRvbWljX2RlY19yZXR1cm4oJnZpZGVvLT5kZXYtPnVzZXJzKSA9PSAwKQotCQl1dmNfc3RhdHVzX3N0b3AodmlkZW8tPmRldik7CisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZzdHJlYW0tPmRldi0+dXNlcnMpID09IDApCisJCXV2Y19zdGF0dXNfc3RvcChzdHJlYW0tPmRldik7CiAKLQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UodmlkZW8tPmRldi0+aW50Zik7Ci0Ja3JlZl9wdXQoJnZpZGVvLT5kZXYtPmtyZWYsIHV2Y19kZWxldGUpOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzdHJlYW0tPmRldi0+aW50Zik7CisJa3JlZl9wdXQoJnN0cmVhbS0+ZGV2LT5rcmVmLCB1dmNfZGVsZXRlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGxvbmcgdXZjX3Y0bDJfZG9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAlzdHJ1Y3QgdXZjX2ZoICpoYW5kbGUgPSAoc3RydWN0IHV2Y19maCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbiA9IGhhbmRsZS0+Y2hhaW47CisJc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSA9IGhhbmRsZS0+c3RyZWFtOwogCWxvbmcgcmV0ID0gMDsKIAogCXN3aXRjaCAoY21kKSB7CkBAIC01MDYsMTAgKzUxMSwxMCBAQAogCQltZW1zZXQoY2FwLCAwLCBzaXplb2YgKmNhcCk7CiAJCXN0cmxjcHkoY2FwLT5kcml2ZXIsICJ1dmN2aWRlbyIsIHNpemVvZiBjYXAtPmRyaXZlcik7CiAJCXN0cmxjcHkoY2FwLT5jYXJkLCB2ZGV2LT5uYW1lLCBzaXplb2YgY2FwLT5jYXJkKTsKLQkJdXNiX21ha2VfcGF0aCh2aWRlby0+ZGV2LT51ZGV2LAorCQl1c2JfbWFrZV9wYXRoKHN0cmVhbS0+ZGV2LT51ZGV2LAogCQkJICAgICAgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAkJY2FwLT52ZXJzaW9uID0gRFJJVkVSX1ZFUlNJT05fTlVNQkVSOwotCQlpZiAodmlkZW8tPnN0cmVhbWluZy0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCWlmIChzdHJlYW0tPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQkJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFCiAJCQkJCSAgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CiAJCWVsc2UKQEAgLTUyMCw3ICs1MjUsNyBAQAogCiAJLyogR2V0LCBTZXQgJiBRdWVyeSBjb250cm9sICovCiAJY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCQlyZXR1cm4gdXZjX3F1ZXJ5X3Y0bDJfY3RybCh2aWRlbywgYXJnKTsKKwkJcmV0dXJuIHV2Y19xdWVyeV92NGwyX2N0cmwoY2hhaW4sIGFyZyk7CiAKIAljYXNlIFZJRElPQ19HX0NUUkw6CiAJewpAQCAtNTMwLDEyICs1MzUsMTIgQEAKIAkJbWVtc2V0KCZ4Y3RybCwgMCwgc2l6ZW9mIHhjdHJsKTsKIAkJeGN0cmwuaWQgPSBjdHJsLT5pZDsKIAotCSAgICAgICByZXQgPSB1dmNfY3RybF9iZWdpbih2aWRlbyk7Ci0JICAgICAgIGlmIChyZXQgPCAwKQorCQlyZXQgPSB1dmNfY3RybF9iZWdpbihjaGFpbik7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAotCQlyZXQgPSB1dmNfY3RybF9nZXQodmlkZW8sICZ4Y3RybCk7Ci0JCXV2Y19jdHJsX3JvbGxiYWNrKHZpZGVvKTsKKwkJcmV0ID0gdXZjX2N0cmxfZ2V0KGNoYWluLCAmeGN0cmwpOworCQl1dmNfY3RybF9yb2xsYmFjayhjaGFpbik7CiAJCWlmIChyZXQgPj0gMCkKIAkJCWN0cmwtPnZhbHVlID0geGN0cmwudmFsdWU7CiAJCWJyZWFrOwpAQCAtNTUwLDIxICs1NTUsMjEgQEAKIAkJeGN0cmwuaWQgPSBjdHJsLT5pZDsKIAkJeGN0cmwudmFsdWUgPSBjdHJsLT52YWx1ZTsKIAotCSAgICAgICByZXQgPSB1dmNfY3RybF9iZWdpbih2aWRlbyk7Ci0JICAgICAgIGlmIChyZXQgPCAwKQorCQl1dmNfY3RybF9iZWdpbihjaGFpbik7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAotCQlyZXQgPSB1dmNfY3RybF9zZXQodmlkZW8sICZ4Y3RybCk7CisJCXJldCA9IHV2Y19jdHJsX3NldChjaGFpbiwgJnhjdHJsKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXV2Y19jdHJsX3JvbGxiYWNrKHZpZGVvKTsKKwkJCXV2Y19jdHJsX3JvbGxiYWNrKGNoYWluKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KLQkJcmV0ID0gdXZjX2N0cmxfY29tbWl0KHZpZGVvKTsKKwkJcmV0ID0gdXZjX2N0cmxfY29tbWl0KGNoYWluKTsKIAkJYnJlYWs7CiAJfQogCiAJY2FzZSBWSURJT0NfUVVFUllNRU5VOgotCQlyZXR1cm4gdXZjX3Y0bDJfcXVlcnlfbWVudSh2aWRlbywgYXJnKTsKKwkJcmV0dXJuIHV2Y192NGwyX3F1ZXJ5X21lbnUoY2hhaW4sIGFyZyk7CiAKIAljYXNlIFZJRElPQ19HX0VYVF9DVFJMUzoKIAl7CkBAIC01NzIsMjAgKzU3NywyMCBAQAogCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybCA9IGN0cmxzLT5jb250cm9sczsKIAkJdW5zaWduZWQgaW50IGk7CiAKLQkgICAgICAgcmV0ID0gdXZjX2N0cmxfYmVnaW4odmlkZW8pOwotCSAgICAgICBpZiAocmV0IDwgMCkKKwkJcmV0ID0gdXZjX2N0cmxfYmVnaW4oY2hhaW4pOworCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKIAkJZm9yIChpID0gMDsgaSA8IGN0cmxzLT5jb3VudDsgKytjdHJsLCArK2kpIHsKLQkJCXJldCA9IHV2Y19jdHJsX2dldCh2aWRlbywgY3RybCk7CisJCQlyZXQgPSB1dmNfY3RybF9nZXQoY2hhaW4sIGN0cmwpOwogCQkJaWYgKHJldCA8IDApIHsKLQkJCQl1dmNfY3RybF9yb2xsYmFjayh2aWRlbyk7CisJCQkJdXZjX2N0cmxfcm9sbGJhY2soY2hhaW4pOwogCQkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOwogCQkJCXJldHVybiByZXQ7CiAJCQl9CiAJCX0KIAkJY3RybHMtPmVycm9yX2lkeCA9IDA7Ci0JCXJldCA9IHV2Y19jdHJsX3JvbGxiYWNrKHZpZGVvKTsKKwkJcmV0ID0gdXZjX2N0cmxfcm9sbGJhY2soY2hhaW4pOwogCQlicmVhazsKIAl9CiAKQEAgLTU5NiwxNCArNjAxLDE0IEBACiAJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsID0gY3RybHMtPmNvbnRyb2xzOwogCQl1bnNpZ25lZCBpbnQgaTsKIAotCQlyZXQgPSB1dmNfY3RybF9iZWdpbih2aWRlbyk7CisJCXJldCA9IHV2Y19jdHJsX2JlZ2luKGNoYWluKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCiAJCWZvciAoaSA9IDA7IGkgPCBjdHJscy0+Y291bnQ7ICsrY3RybCwgKytpKSB7Ci0JCQlyZXQgPSB1dmNfY3RybF9zZXQodmlkZW8sIGN0cmwpOworCQkJcmV0ID0gdXZjX2N0cmxfc2V0KGNoYWluLCBjdHJsKTsKIAkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJdXZjX2N0cmxfcm9sbGJhY2sodmlkZW8pOworCQkJCXV2Y19jdHJsX3JvbGxiYWNrKGNoYWluKTsKIAkJCQljdHJscy0+ZXJyb3JfaWR4ID0gaTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQpAQCAtNjEyLDMxICs2MTcsMzEgQEAKIAkJY3RybHMtPmVycm9yX2lkeCA9IDA7CiAKIAkJaWYgKGNtZCA9PSBWSURJT0NfU19FWFRfQ1RSTFMpCi0JCQlyZXQgPSB1dmNfY3RybF9jb21taXQodmlkZW8pOworCQkJcmV0ID0gdXZjX2N0cmxfY29tbWl0KGNoYWluKTsKIAkJZWxzZQotCQkJcmV0ID0gdXZjX2N0cmxfcm9sbGJhY2sodmlkZW8pOworCQkJcmV0ID0gdXZjX2N0cmxfcm9sbGJhY2soY2hhaW4pOwogCQlicmVhazsKIAl9CiAKIAkvKiBHZXQsIFNldCAmIEVudW0gaW5wdXQgKi8KIAljYXNlIFZJRElPQ19FTlVNSU5QVVQ6CiAJewotCQljb25zdCBzdHJ1Y3QgdXZjX2VudGl0eSAqc2VsZWN0b3IgPSB2aWRlby0+c2VsZWN0b3I7CisJCWNvbnN0IHN0cnVjdCB1dmNfZW50aXR5ICpzZWxlY3RvciA9IGNoYWluLT5zZWxlY3RvcjsKIAkJc3RydWN0IHY0bDJfaW5wdXQgKmlucHV0ID0gYXJnOwogCQlzdHJ1Y3QgdXZjX2VudGl0eSAqaXRlcm0gPSBOVUxMOwogCQl1MzIgaW5kZXggPSBpbnB1dC0+aW5kZXg7CiAJCWludCBwaW4gPSAwOwogCiAJCWlmIChzZWxlY3RvciA9PSBOVUxMIHx8Ci0JCSAgICAodmlkZW8tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX0lHTk9SRV9TRUxFQ1RPUl9VTklUKSkgeworCQkgICAgKGNoYWluLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19JR05PUkVfU0VMRUNUT1JfVU5JVCkpIHsKIAkJCWlmIChpbmRleCAhPSAwKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaXRlcm0gPSBsaXN0X2ZpcnN0X2VudHJ5KCZ2aWRlby0+aXRlcm1zLAorCQkJaXRlcm0gPSBsaXN0X2ZpcnN0X2VudHJ5KCZjaGFpbi0+aXRlcm1zLAogCQkJCQlzdHJ1Y3QgdXZjX2VudGl0eSwgY2hhaW4pOwogCQkJcGluID0gaXRlcm0tPmlkOwogCQl9IGVsc2UgaWYgKHBpbiA8IHNlbGVjdG9yLT5zZWxlY3Rvci5iTnJJblBpbnMpIHsKIAkJCXBpbiA9IHNlbGVjdG9yLT5zZWxlY3Rvci5iYVNvdXJjZUlEW2luZGV4XTsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlcm0sIHZpZGVvLT5pdGVybXMubmV4dCwgY2hhaW4pIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlcm0sIGNoYWluLT5pdGVybXMubmV4dCwgY2hhaW4pIHsKIAkJCQlpZiAoaXRlcm0tPmlkID09IHBpbikKIAkJCQkJYnJlYWs7CiAJCQl9CkBAIC02NDgsNyArNjUzLDcgQEAKIAkJbWVtc2V0KGlucHV0LCAwLCBzaXplb2YgKmlucHV0KTsKIAkJaW5wdXQtPmluZGV4ID0gaW5kZXg7CiAJCXN0cmxjcHkoaW5wdXQtPm5hbWUsIGl0ZXJtLT5uYW1lLCBzaXplb2YgaW5wdXQtPm5hbWUpOwotCQlpZiAoVVZDX0VOVElUWV9UWVBFKGl0ZXJtKSA9PSBJVFRfQ0FNRVJBKQorCQlpZiAoVVZDX0VOVElUWV9UWVBFKGl0ZXJtKSA9PSBVVkNfSVRUX0NBTUVSQSkKIAkJCWlucHV0LT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKIAkJYnJlYWs7CiAJfQpAQCAtNjU3LDE1ICs2NjIsMTUgQEAKIAl7CiAJCXU4IGlucHV0OwogCi0JCWlmICh2aWRlby0+c2VsZWN0b3IgPT0gTlVMTCB8fAotCQkgICAgKHZpZGVvLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19JR05PUkVfU0VMRUNUT1JfVU5JVCkpIHsKKwkJaWYgKGNoYWluLT5zZWxlY3RvciA9PSBOVUxMIHx8CisJCSAgICAoY2hhaW4tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX0lHTk9SRV9TRUxFQ1RPUl9VTklUKSkgewogCQkJKihpbnQgKilhcmcgPSAwOwogCQkJYnJlYWs7CiAJCX0KIAotCQlyZXQgPSB1dmNfcXVlcnlfY3RybCh2aWRlby0+ZGV2LCBHRVRfQ1VSLCB2aWRlby0+c2VsZWN0b3ItPmlkLAotCQkJdmlkZW8tPmRldi0+aW50Zm51bSwgU1VfSU5QVVRfU0VMRUNUX0NPTlRST0wsCi0JCQkmaW5wdXQsIDEpOworCQlyZXQgPSB1dmNfcXVlcnlfY3RybChjaGFpbi0+ZGV2LCBVVkNfR0VUX0NVUiwKKwkJCWNoYWluLT5zZWxlY3Rvci0+aWQsIGNoYWluLT5kZXYtPmludGZudW0sCisJCQlVVkNfU1VfSU5QVVRfU0VMRUNUX0NPTlRST0wsICZpbnB1dCwgMSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIApAQCAtNjgwLDE5ICs2ODUsMTkgQEAKIAkJaWYgKChyZXQgPSB1dmNfYWNxdWlyZV9wcml2aWxlZ2VzKGhhbmRsZSkpIDwgMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJaWYgKHZpZGVvLT5zZWxlY3RvciA9PSBOVUxMIHx8Ci0JCSAgICAodmlkZW8tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX0lHTk9SRV9TRUxFQ1RPUl9VTklUKSkgeworCQlpZiAoY2hhaW4tPnNlbGVjdG9yID09IE5VTEwgfHwKKwkJICAgIChjaGFpbi0+ZGV2LT5xdWlya3MgJiBVVkNfUVVJUktfSUdOT1JFX1NFTEVDVE9SX1VOSVQpKSB7CiAJCQlpZiAoaW5wdXQgIT0gMSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGlucHV0ID09IDAgfHwgaW5wdXQgPiB2aWRlby0+c2VsZWN0b3ItPnNlbGVjdG9yLmJOckluUGlucykKKwkJaWYgKGlucHV0ID09IDAgfHwgaW5wdXQgPiBjaGFpbi0+c2VsZWN0b3ItPnNlbGVjdG9yLmJOckluUGlucykKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXJldHVybiB1dmNfcXVlcnlfY3RybCh2aWRlby0+ZGV2LCBTRVRfQ1VSLCB2aWRlby0+c2VsZWN0b3ItPmlkLAotCQkJdmlkZW8tPmRldi0+aW50Zm51bSwgU1VfSU5QVVRfU0VMRUNUX0NPTlRST0wsCi0JCQkmaW5wdXQsIDEpOworCQlyZXR1cm4gdXZjX3F1ZXJ5X2N0cmwoY2hhaW4tPmRldiwgVVZDX1NFVF9DVVIsCisJCQljaGFpbi0+c2VsZWN0b3ItPmlkLCBjaGFpbi0+ZGV2LT5pbnRmbnVtLAorCQkJVVZDX1NVX0lOUFVUX1NFTEVDVF9DT05UUk9MLCAmaW5wdXQsIDEpOwogCX0KIAogCS8qIFRyeSwgR2V0LCBTZXQgJiBFbnVtIGZvcm1hdCAqLwpAQCAtNzAzLDE1ICs3MDgsMTUgQEAKIAkJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBmbXQtPnR5cGU7CiAJCV9fdTMyIGluZGV4ID0gZm10LT5pbmRleDsKIAotCQlpZiAoZm10LT50eXBlICE9IHZpZGVvLT5zdHJlYW1pbmctPnR5cGUgfHwKLQkJICAgIGZtdC0+aW5kZXggPj0gdmlkZW8tPnN0cmVhbWluZy0+bmZvcm1hdHMpCisJCWlmIChmbXQtPnR5cGUgIT0gc3RyZWFtLT50eXBlIHx8CisJCSAgICBmbXQtPmluZGV4ID49IHN0cmVhbS0+bmZvcm1hdHMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQltZW1zZXQoZm10LCAwLCBzaXplb2YoKmZtdCkpOwogCQlmbXQtPmluZGV4ID0gaW5kZXg7CiAJCWZtdC0+dHlwZSA9IHR5cGU7CiAKLQkJZm9ybWF0ID0gJnZpZGVvLT5zdHJlYW1pbmctPmZvcm1hdFtmbXQtPmluZGV4XTsKKwkJZm9ybWF0ID0gJnN0cmVhbS0+Zm9ybWF0W2ZtdC0+aW5kZXhdOwogCQlmbXQtPmZsYWdzID0gMDsKIAkJaWYgKGZvcm1hdC0+ZmxhZ3MgJiBVVkNfRk1UX0ZMQUdfQ09NUFJFU1NFRCkKIAkJCWZtdC0+ZmxhZ3MgfD0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOwpAQCAtNzI5LDE3ICs3MzQsMTcgQEAKIAkJaWYgKChyZXQgPSB1dmNfYWNxdWlyZV9wcml2aWxlZ2VzKGhhbmRsZSkpIDwgMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJcmV0dXJuIHV2Y192NGwyX3RyeV9mb3JtYXQodmlkZW8sIGFyZywgJnByb2JlLCBOVUxMLCBOVUxMKTsKKwkJcmV0dXJuIHV2Y192NGwyX3RyeV9mb3JtYXQoc3RyZWFtLCBhcmcsICZwcm9iZSwgTlVMTCwgTlVMTCk7CiAJfQogCiAJY2FzZSBWSURJT0NfU19GTVQ6CiAJCWlmICgocmV0ID0gdXZjX2FjcXVpcmVfcHJpdmlsZWdlcyhoYW5kbGUpKSA8IDApCiAJCQlyZXR1cm4gcmV0OwogCi0JCXJldHVybiB1dmNfdjRsMl9zZXRfZm9ybWF0KHZpZGVvLCBhcmcpOworCQlyZXR1cm4gdXZjX3Y0bDJfc2V0X2Zvcm1hdChzdHJlYW0sIGFyZyk7CiAKIAljYXNlIFZJRElPQ19HX0ZNVDoKLQkJcmV0dXJuIHV2Y192NGwyX2dldF9mb3JtYXQodmlkZW8sIGFyZyk7CisJCXJldHVybiB1dmNfdjRsMl9nZXRfZm9ybWF0KHN0cmVhbSwgYXJnKTsKIAogCS8qIEZyYW1lIHNpemUgZW51bWVyYXRpb24gKi8KIAljYXNlIFZJRElPQ19FTlVNX0ZSQU1FU0laRVM6CkBAIC03NTAsMTAgKzc1NSwxMCBAQAogCQlpbnQgaTsKIAogCQkvKiBMb29rIGZvciB0aGUgZ2l2ZW4gcGl4ZWwgZm9ybWF0ICovCi0JCWZvciAoaSA9IDA7IGkgPCB2aWRlby0+c3RyZWFtaW5nLT5uZm9ybWF0czsgaSsrKSB7Ci0JCQlpZiAodmlkZW8tPnN0cmVhbWluZy0+Zm9ybWF0W2ldLmZjYyA9PQorCQlmb3IgKGkgPSAwOyBpIDwgc3RyZWFtLT5uZm9ybWF0czsgaSsrKSB7CisJCQlpZiAoc3RyZWFtLT5mb3JtYXRbaV0uZmNjID09CiAJCQkJCWZzaXplLT5waXhlbF9mb3JtYXQpIHsKLQkJCQlmb3JtYXQgPSAmdmlkZW8tPnN0cmVhbWluZy0+Zm9ybWF0W2ldOworCQkJCWZvcm1hdCA9ICZzdHJlYW0tPmZvcm1hdFtpXTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtNzc5LDEwICs3ODQsMTAgQEAKIAkJaW50IGk7CiAKIAkJLyogTG9vayBmb3IgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCBhbmQgZnJhbWUgc2l6ZSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgdmlkZW8tPnN0cmVhbWluZy0+bmZvcm1hdHM7IGkrKykgewotCQkJaWYgKHZpZGVvLT5zdHJlYW1pbmctPmZvcm1hdFtpXS5mY2MgPT0KKwkJZm9yIChpID0gMDsgaSA8IHN0cmVhbS0+bmZvcm1hdHM7IGkrKykgeworCQkJaWYgKHN0cmVhbS0+Zm9ybWF0W2ldLmZjYyA9PQogCQkJCQlmaXZhbC0+cGl4ZWxfZm9ybWF0KSB7Ci0JCQkJZm9ybWF0ID0gJnZpZGVvLT5zdHJlYW1pbmctPmZvcm1hdFtpXTsKKwkJCQlmb3JtYXQgPSAmc3RyZWFtLT5mb3JtYXRbaV07CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTgzMiwyMSArODM3LDIxIEBACiAKIAkvKiBHZXQgJiBTZXQgc3RyZWFtaW5nIHBhcmFtZXRlcnMgKi8KIAljYXNlIFZJRElPQ19HX1BBUk06Ci0JCXJldHVybiB1dmNfdjRsMl9nZXRfc3RyZWFtcGFybSh2aWRlbywgYXJnKTsKKwkJcmV0dXJuIHV2Y192NGwyX2dldF9zdHJlYW1wYXJtKHN0cmVhbSwgYXJnKTsKIAogCWNhc2UgVklESU9DX1NfUEFSTToKIAkJaWYgKChyZXQgPSB1dmNfYWNxdWlyZV9wcml2aWxlZ2VzKGhhbmRsZSkpIDwgMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJcmV0dXJuIHV2Y192NGwyX3NldF9zdHJlYW1wYXJtKHZpZGVvLCBhcmcpOworCQlyZXR1cm4gdXZjX3Y0bDJfc2V0X3N0cmVhbXBhcm0oc3RyZWFtLCBhcmcpOwogCiAJLyogQ3JvcHBpbmcgYW5kIHNjYWxpbmcgKi8KIAljYXNlIFZJRElPQ19DUk9QQ0FQOgogCXsKIAkJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2NhcCA9IGFyZzsKLQkJc3RydWN0IHV2Y19mcmFtZSAqZnJhbWUgPSB2aWRlby0+c3RyZWFtaW5nLT5jdXJfZnJhbWU7CisJCXN0cnVjdCB1dmNfZnJhbWUgKmZyYW1lID0gc3RyZWFtLT5jdXJfZnJhbWU7CiAKLQkJaWYgKGNjYXAtPnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSkKKwkJaWYgKGNjYXAtPnR5cGUgIT0gc3RyZWFtLT50eXBlKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJY2NhcC0+Ym91bmRzLmxlZnQgPSAwOwpAQCAtODcwLDE2ICs4NzUsMTYgQEAKIAl7CiAJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyYiA9IGFyZzsKIAkJdW5zaWduZWQgaW50IGJ1ZnNpemUgPQotCQkJdmlkZW8tPnN0cmVhbWluZy0+Y3RybC5kd01heFZpZGVvRnJhbWVTaXplOworCQkJc3RyZWFtLT5jdHJsLmR3TWF4VmlkZW9GcmFtZVNpemU7CiAKLQkJaWYgKHJiLT50eXBlICE9IHZpZGVvLT5zdHJlYW1pbmctPnR5cGUgfHwKKwkJaWYgKHJiLT50eXBlICE9IHN0cmVhbS0+dHlwZSB8fAogCQkgICAgcmItPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJaWYgKChyZXQgPSB1dmNfYWNxdWlyZV9wcml2aWxlZ2VzKGhhbmRsZSkpIDwgMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJcmV0ID0gdXZjX2FsbG9jX2J1ZmZlcnMoJnZpZGVvLT5xdWV1ZSwgcmItPmNvdW50LCBidWZzaXplKTsKKwkJcmV0ID0gdXZjX2FsbG9jX2J1ZmZlcnMoJnN0cmVhbS0+cXVldWUsIHJiLT5jb3VudCwgYnVmc2l6ZSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIApAQCAtODkyLDM5ICs4OTcsNDAgQEAKIAl7CiAJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwogCi0JCWlmIChidWYtPnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSkKKwkJaWYgKGJ1Zi0+dHlwZSAhPSBzdHJlYW0tPnR5cGUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAoIXV2Y19oYXNfcHJpdmlsZWdlcyhoYW5kbGUpKQogCQkJcmV0dXJuIC1FQlVTWTsKIAotCQlyZXR1cm4gdXZjX3F1ZXJ5X2J1ZmZlcigmdmlkZW8tPnF1ZXVlLCBidWYpOworCQlyZXR1cm4gdXZjX3F1ZXJ5X2J1ZmZlcigmc3RyZWFtLT5xdWV1ZSwgYnVmKTsKIAl9CiAKIAljYXNlIFZJRElPQ19RQlVGOgogCQlpZiAoIXV2Y19oYXNfcHJpdmlsZWdlcyhoYW5kbGUpKQogCQkJcmV0dXJuIC1FQlVTWTsKIAotCQlyZXR1cm4gdXZjX3F1ZXVlX2J1ZmZlcigmdmlkZW8tPnF1ZXVlLCBhcmcpOworCQlyZXR1cm4gdXZjX3F1ZXVlX2J1ZmZlcigmc3RyZWFtLT5xdWV1ZSwgYXJnKTsKIAogCWNhc2UgVklESU9DX0RRQlVGOgogCQlpZiAoIXV2Y19oYXNfcHJpdmlsZWdlcyhoYW5kbGUpKQogCQkJcmV0dXJuIC1FQlVTWTsKIAotCQlyZXR1cm4gdXZjX2RlcXVldWVfYnVmZmVyKCZ2aWRlby0+cXVldWUsIGFyZywKKwkJcmV0dXJuIHV2Y19kZXF1ZXVlX2J1ZmZlcigmc3RyZWFtLT5xdWV1ZSwgYXJnLAogCQkJZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwogCiAJY2FzZSBWSURJT0NfU1RSRUFNT046CiAJewogCQlpbnQgKnR5cGUgPSBhcmc7CiAKLQkJaWYgKCp0eXBlICE9IHZpZGVvLT5zdHJlYW1pbmctPnR5cGUpCisJCWlmICgqdHlwZSAhPSBzdHJlYW0tPnR5cGUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAoIXV2Y19oYXNfcHJpdmlsZWdlcyhoYW5kbGUpKQogCQkJcmV0dXJuIC1FQlVTWTsKIAotCQlpZiAoKHJldCA9IHV2Y192aWRlb19lbmFibGUodmlkZW8sIDEpKSA8IDApCisJCXJldCA9IHV2Y192aWRlb19lbmFibGUoc3RyZWFtLCAxKTsKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCQlicmVhazsKIAl9CkBAIC05MzMsMTMgKzkzOSwxMyBAQAogCXsKIAkJaW50ICp0eXBlID0gYXJnOwogCi0JCWlmICgqdHlwZSAhPSB2aWRlby0+c3RyZWFtaW5nLT50eXBlKQorCQlpZiAoKnR5cGUgIT0gc3RyZWFtLT50eXBlKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJaWYgKCF1dmNfaGFzX3ByaXZpbGVnZXMoaGFuZGxlKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKLQkJcmV0dXJuIHV2Y192aWRlb19lbmFibGUodmlkZW8sIDApOworCQlyZXR1cm4gdXZjX3ZpZGVvX2VuYWJsZShzdHJlYW0sIDApOwogCX0KIAogCS8qIEFuYWxvZyB2aWRlbyBzdGFuZGFyZHMgbWFrZSBubyBzZW5zZSBmb3IgZGlnaXRhbCBjYW1lcmFzLiAqLwpAQCAtMTAxMywxMCArMTAxOSwxMCBAQAogCX0KIAogCWNhc2UgVVZDSU9DX0NUUkxfR0VUOgotCQlyZXR1cm4gdXZjX3h1X2N0cmxfcXVlcnkodmlkZW8sIGFyZywgMCk7CisJCXJldHVybiB1dmNfeHVfY3RybF9xdWVyeShjaGFpbiwgYXJnLCAwKTsKIAogCWNhc2UgVVZDSU9DX0NUUkxfU0VUOgotCQlyZXR1cm4gdXZjX3h1X2N0cmxfcXVlcnkodmlkZW8sIGFyZywgMSk7CisJCXJldHVybiB1dmNfeHVfY3RybF9xdWVyeShjaGFpbiwgYXJnLCAxKTsKIAogCWRlZmF1bHQ6CiAJCWlmICgocmV0ID0gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoZmlsZSwgY21kLCBhcmcsCkBAIC0xMDcwLDcgKzEwNzYsOSBAQAogCiBzdGF0aWMgaW50IHV2Y192NGwyX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHV2Y19maCAqaGFuZGxlID0gKHN0cnVjdCB1dmNfZmggKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSA9IGhhbmRsZS0+c3RyZWFtOworCXN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlID0gJnN0cmVhbS0+cXVldWU7CiAJc3RydWN0IHV2Y19idWZmZXIgKnVuaW5pdGlhbGl6ZWRfdmFyKGJ1ZmZlcik7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgbG9uZyBhZGRyLCBzdGFydCwgc2l6ZTsKQEAgLTEwODIsMTUgKzEwOTAsMTUgQEAKIAlzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CiAJc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKIAotCW11dGV4X2xvY2soJnZpZGVvLT5xdWV1ZS5tdXRleCk7CisJbXV0ZXhfbG9jaygmcXVldWUtPm11dGV4KTsKIAotCWZvciAoaSA9IDA7IGkgPCB2aWRlby0+cXVldWUuY291bnQ7ICsraSkgewotCQlidWZmZXIgPSAmdmlkZW8tPnF1ZXVlLmJ1ZmZlcltpXTsKKwlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPmNvdW50OyArK2kpIHsKKwkJYnVmZmVyID0gJnF1ZXVlLT5idWZmZXJbaV07CiAJCWlmICgoYnVmZmVyLT5idWYubS5vZmZzZXQgPj4gUEFHRV9TSElGVCkgPT0gdm1hLT52bV9wZ29mZikKIAkJCWJyZWFrOwogCX0KIAotCWlmIChpID09IHZpZGVvLT5xdWV1ZS5jb3VudCB8fCBzaXplICE9IHZpZGVvLT5xdWV1ZS5idWZfc2l6ZSkgeworCWlmIChpID09IHF1ZXVlLT5jb3VudCB8fCBzaXplICE9IHF1ZXVlLT5idWZfc2l6ZSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMTEwMSw3ICsxMTA5LDcgQEAKIAkgKi8KIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOwogCi0JYWRkciA9ICh1bnNpZ25lZCBsb25nKXZpZGVvLT5xdWV1ZS5tZW0gKyBidWZmZXItPmJ1Zi5tLm9mZnNldDsKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpcXVldWUtPm1lbSArIGJ1ZmZlci0+YnVmLm0ub2Zmc2V0OwogCXdoaWxlIChzaXplID4gMCkgewogCQlwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopYWRkcik7CiAJCWlmICgocmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCBzdGFydCwgcGFnZSkpIDwgMCkKQEAgLTExMTcsMTcgKzExMjUsMTggQEAKIAl1dmNfdm1fb3Blbih2bWEpOwogCiBkb25lOgotCW11dGV4X3VubG9jaygmdmlkZW8tPnF1ZXVlLm11dGV4KTsKKwltdXRleF91bmxvY2soJnF1ZXVlLT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCB1dmNfdjRsMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHV2Y19maCAqaGFuZGxlID0gKHN0cnVjdCB1dmNfZmggKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSA9IGhhbmRsZS0+c3RyZWFtOwogCiAJdXZjX3RyYWNlKFVWQ19UUkFDRV9DQUxMUywgInV2Y192NGwyX3BvbGxcbiIpOwogCi0JcmV0dXJuIHV2Y19xdWV1ZV9wb2xsKCZ2aWRlby0+cXVldWUsIGZpbGUsIHdhaXQpOworCXJldHVybiB1dmNfcXVldWVfcG9sbCgmc3RyZWFtLT5xdWV1ZSwgZmlsZSwgd2FpdCk7CiB9CiAKIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB1dmNfZm9wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKaW5kZXggMDFiNjMzYy4uNWI3NTdmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKQEAgLTYxLDcgKzYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdXZjX2ZpeHVwX3ZpZGVvX2N0cmwoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorc3RhdGljIHZvaWQgdXZjX2ZpeHVwX3ZpZGVvX2N0cmwoc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSwKIAlzdHJ1Y3QgdXZjX3N0cmVhbWluZ19jb250cm9sICpjdHJsKQogewogCXN0cnVjdCB1dmNfZm9ybWF0ICpmb3JtYXQ7CkBAIC02OSwxMCArNjksMTAgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWlmIChjdHJsLT5iRm9ybWF0SW5kZXggPD0gMCB8fAotCSAgICBjdHJsLT5iRm9ybWF0SW5kZXggPiB2aWRlby0+c3RyZWFtaW5nLT5uZm9ybWF0cykKKwkgICAgY3RybC0+YkZvcm1hdEluZGV4ID4gc3RyZWFtLT5uZm9ybWF0cykKIAkJcmV0dXJuOwogCi0JZm9ybWF0ID0gJnZpZGVvLT5zdHJlYW1pbmctPmZvcm1hdFtjdHJsLT5iRm9ybWF0SW5kZXggLSAxXTsKKwlmb3JtYXQgPSAmc3RyZWFtLT5mb3JtYXRbY3RybC0+YkZvcm1hdEluZGV4IC0gMV07CiAKIAlmb3IgKGkgPSAwOyBpIDwgZm9ybWF0LT5uZnJhbWVzOyArK2kpIHsKIAkJaWYgKGZvcm1hdC0+ZnJhbWVbaV0uYkZyYW1lSW5kZXggPT0gY3RybC0+YkZyYW1lSW5kZXgpIHsKQEAgLTg2LDEyICs4NiwxMiBAQAogCiAJaWYgKCEoZm9ybWF0LT5mbGFncyAmIFVWQ19GTVRfRkxBR19DT01QUkVTU0VEKSB8fAogCSAgICAgKGN0cmwtPmR3TWF4VmlkZW9GcmFtZVNpemUgPT0gMCAmJgotCSAgICAgIHZpZGVvLT5kZXYtPnV2Y192ZXJzaW9uIDwgMHgwMTEwKSkKKwkgICAgICBzdHJlYW0tPmRldi0+dXZjX3ZlcnNpb24gPCAweDAxMTApKQogCQljdHJsLT5kd01heFZpZGVvRnJhbWVTaXplID0KIAkJCWZyYW1lLT5kd01heFZpZGVvRnJhbWVCdWZmZXJTaXplOwogCi0JaWYgKHZpZGVvLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19GSVhfQkFORFdJRFRIICYmCi0JICAgIHZpZGVvLT5zdHJlYW1pbmctPmludGYtPm51bV9hbHRzZXR0aW5nID4gMSkgeworCWlmIChzdHJlYW0tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX0ZJWF9CQU5EV0lEVEggJiYKKwkgICAgc3RyZWFtLT5pbnRmLT5udW1fYWx0c2V0dGluZyA+IDEpIHsKIAkJdTMyIGludGVydmFsOwogCQl1MzIgYmFuZHdpZHRoOwogCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJYmFuZHdpZHRoID0gZnJhbWUtPndXaWR0aCAqIGZyYW1lLT53SGVpZ2h0IC8gOCAqIGZvcm1hdC0+YnBwOwogCQliYW5kd2lkdGggKj0gMTAwMDAwMDAgLyBpbnRlcnZhbCArIDE7CiAJCWJhbmR3aWR0aCAvPSAxMDAwOwotCQlpZiAodmlkZW8tPmRldi0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCWlmIChzdHJlYW0tPmRldi0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCiAJCQliYW5kd2lkdGggLz0gODsKIAkJYmFuZHdpZHRoICs9IDEyOwogCkBAIC0xMTYsNDAgKzExNiw0MyBAQAogCX0KIH0KIAotc3RhdGljIGludCB1dmNfZ2V0X3ZpZGVvX2N0cmwoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorc3RhdGljIGludCB1dmNfZ2V0X3ZpZGVvX2N0cmwoc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSwKIAlzdHJ1Y3QgdXZjX3N0cmVhbWluZ19jb250cm9sICpjdHJsLCBpbnQgcHJvYmUsIF9fdTggcXVlcnkpCiB7CiAJX191OCAqZGF0YTsKIAlfX3UxNiBzaXplOwogCWludCByZXQ7CiAKLQlzaXplID0gdmlkZW8tPmRldi0+dXZjX3ZlcnNpb24gPj0gMHgwMTEwID8gMzQgOiAyNjsKKwlzaXplID0gc3RyZWFtLT5kZXYtPnV2Y192ZXJzaW9uID49IDB4MDExMCA/IDM0IDogMjY7CiAJZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXQgPSBfX3V2Y19xdWVyeV9jdHJsKHZpZGVvLT5kZXYsIHF1ZXJ5LCAwLCB2aWRlby0+c3RyZWFtaW5nLT5pbnRmbnVtLAotCQlwcm9iZSA/IFZTX1BST0JFX0NPTlRST0wgOiBWU19DT01NSVRfQ09OVFJPTCwgZGF0YSwgc2l6ZSwKLQkJVVZDX0NUUkxfU1RSRUFNSU5HX1RJTUVPVVQpOworCWlmICgoc3RyZWFtLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19QUk9CRV9ERUYpICYmIHF1ZXJ5ID09IFVWQ19HRVRfREVGKQorCQlyZXR1cm4gLUVJTzsKIAotCWlmICgocXVlcnkgPT0gR0VUX01JTiB8fCBxdWVyeSA9PSBHRVRfTUFYKSAmJiByZXQgPT0gMikgeworCXJldCA9IF9fdXZjX3F1ZXJ5X2N0cmwoc3RyZWFtLT5kZXYsIHF1ZXJ5LCAwLCBzdHJlYW0tPmludGZudW0sCisJCXByb2JlID8gVVZDX1ZTX1BST0JFX0NPTlRST0wgOiBVVkNfVlNfQ09NTUlUX0NPTlRST0wsIGRhdGEsCisJCXNpemUsIFVWQ19DVFJMX1NUUkVBTUlOR19USU1FT1VUKTsKKworCWlmICgocXVlcnkgPT0gVVZDX0dFVF9NSU4gfHwgcXVlcnkgPT0gVVZDX0dFVF9NQVgpICYmIHJldCA9PSAyKSB7CiAJCS8qIFNvbWUgY2FtZXJhcywgbW9zdGx5IGJhc2VkIG9uIEJpc29uIEVsZWN0cm9uaWNzIGNoaXBzZXRzLAogCQkgKiBhbnN3ZXIgYSBHRVRfTUlOIG9yIEdFVF9NQVggcmVxdWVzdCB3aXRoIHRoZSB3Q29tcFF1YWxpdHkKIAkJICogZmllbGQgb25seS4KIAkJICovCi0JCXV2Y193YXJuX29uY2UodmlkZW8tPmRldiwgVVZDX1dBUk5fTUlOTUFYLCAiVVZDIG5vbiAiCisJCXV2Y193YXJuX29uY2Uoc3RyZWFtLT5kZXYsIFVWQ19XQVJOX01JTk1BWCwgIlVWQyBub24gIgogCQkJImNvbXBsaWFuY2UgLSBHRVRfTUlOL01BWChQUk9CRSkgaW5jb3JyZWN0bHkgIgogCQkJInN1cHBvcnRlZC4gRW5hYmxpbmcgd29ya2Fyb3VuZC5cbiIpOwogCQltZW1zZXQoY3RybCwgMCwgc2l6ZW9mIGN0cmwpOwogCQljdHJsLT53Q29tcFF1YWxpdHkgPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKWRhdGEpOwogCQlyZXQgPSAwOwogCQlnb3RvIG91dDsKLQl9IGVsc2UgaWYgKHF1ZXJ5ID09IEdFVF9ERUYgJiYgcHJvYmUgPT0gMSAmJiByZXQgIT0gc2l6ZSkgeworCX0gZWxzZSBpZiAocXVlcnkgPT0gVVZDX0dFVF9ERUYgJiYgcHJvYmUgPT0gMSAmJiByZXQgIT0gc2l6ZSkgewogCQkvKiBNYW55IGNhbWVyYXMgZG9uJ3Qgc3VwcG9ydCB0aGUgR0VUX0RFRiByZXF1ZXN0IG9uIHRoZWlyCiAJCSAqIHZpZGVvIHByb2JlIGNvbnRyb2wuIFdhcm4gb25jZSBhbmQgcmV0dXJuLCB0aGUgY2FsbGVyIHdpbGwKIAkJICogZmFsbCBiYWNrIHRvIEdFVF9DVVIuCiAJCSAqLwotCQl1dmNfd2Fybl9vbmNlKHZpZGVvLT5kZXYsIFVWQ19XQVJOX1BST0JFX0RFRiwgIlVWQyBub24gIgorCQl1dmNfd2Fybl9vbmNlKHN0cmVhbS0+ZGV2LCBVVkNfV0FSTl9QUk9CRV9ERUYsICJVVkMgbm9uICIKIAkJCSJjb21wbGlhbmNlIC0gR0VUX0RFRihQUk9CRSkgbm90IHN1cHBvcnRlZC4gIgogCQkJIkVuYWJsaW5nIHdvcmthcm91bmQuXG4iKTsKIAkJcmV0ID0gLUVJTzsKQEAgLTE4MSw3ICsxODQsNyBAQAogCQljdHJsLT5iTWluVmVyc2lvbiA9IGRhdGFbMzJdOwogCQljdHJsLT5iTWF4VmVyc2lvbiA9IGRhdGFbMzNdOwogCX0gZWxzZSB7Ci0JCWN0cmwtPmR3Q2xvY2tGcmVxdWVuY3kgPSB2aWRlby0+ZGV2LT5jbG9ja19mcmVxdWVuY3k7CisJCWN0cmwtPmR3Q2xvY2tGcmVxdWVuY3kgPSBzdHJlYW0tPmRldi0+Y2xvY2tfZnJlcXVlbmN5OwogCQljdHJsLT5ibUZyYW1pbmdJbmZvID0gMDsKIAkJY3RybC0+YlByZWZlcmVkVmVyc2lvbiA9IDA7CiAJCWN0cmwtPmJNaW5WZXJzaW9uID0gMDsKQEAgLTE5Miw3ICsxOTUsNyBAQAogCSAqIGR3TWF4UGF5bG9hZFRyYW5zZmVyU2l6ZSBmaWVsZHMuIFRyeSB0byBnZXQgdGhlIHZhbHVlIGZyb20gdGhlCiAJICogZm9ybWF0IGFuZCBmcmFtZSBkZXNjcmlwdG9ycy4KIAkgKi8KLQl1dmNfZml4dXBfdmlkZW9fY3RybCh2aWRlbywgY3RybCk7CisJdXZjX2ZpeHVwX3ZpZGVvX2N0cmwoc3RyZWFtLCBjdHJsKTsKIAlyZXQgPSAwOwogCiBvdXQ6CkBAIC0yMDAsMTQgKzIwMywxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdXZjX3NldF92aWRlb19jdHJsKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKK3N0YXRpYyBpbnQgdXZjX3NldF92aWRlb19jdHJsKHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJc3RydWN0IHV2Y19zdHJlYW1pbmdfY29udHJvbCAqY3RybCwgaW50IHByb2JlKQogewogCV9fdTggKmRhdGE7CiAJX191MTYgc2l6ZTsKIAlpbnQgcmV0OwogCi0Jc2l6ZSA9IHZpZGVvLT5kZXYtPnV2Y192ZXJzaW9uID49IDB4MDExMCA/IDM0IDogMjY7CisJc2l6ZSA9IHN0cmVhbS0+ZGV2LT51dmNfdmVyc2lvbiA+PSAweDAxMTAgPyAzNCA6IDI2OwogCWRhdGEgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmIChkYXRhID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjMyLDEwICsyMzUsOSBAQAogCQlkYXRhWzMzXSA9IGN0cmwtPmJNYXhWZXJzaW9uOwogCX0KIAotCXJldCA9IF9fdXZjX3F1ZXJ5X2N0cmwodmlkZW8tPmRldiwgU0VUX0NVUiwgMCwKLQkJdmlkZW8tPnN0cmVhbWluZy0+aW50Zm51bSwKLQkJcHJvYmUgPyBWU19QUk9CRV9DT05UUk9MIDogVlNfQ09NTUlUX0NPTlRST0wsIGRhdGEsIHNpemUsCi0JCVVWQ19DVFJMX1NUUkVBTUlOR19USU1FT1VUKTsKKwlyZXQgPSBfX3V2Y19xdWVyeV9jdHJsKHN0cmVhbS0+ZGV2LCBVVkNfU0VUX0NVUiwgMCwgc3RyZWFtLT5pbnRmbnVtLAorCQlwcm9iZSA/IFVWQ19WU19QUk9CRV9DT05UUk9MIDogVVZDX1ZTX0NPTU1JVF9DT05UUk9MLCBkYXRhLAorCQlzaXplLCBVVkNfQ1RSTF9TVFJFQU1JTkdfVElNRU9VVCk7CiAJaWYgKHJldCAhPSBzaXplKSB7CiAJCXV2Y19wcmludGsoS0VSTl9FUlIsICJGYWlsZWQgdG8gc2V0IFVWQyAlcyBjb250cm9sIDogIgogCQkJIiVkIChleHAuICV1KS5cbiIsIHByb2JlID8gInByb2JlIiA6ICJjb21taXQiLApAQCAtMjQ3LDcgKzI0OSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHV2Y19wcm9iZV92aWRlbyhzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCitpbnQgdXZjX3Byb2JlX3ZpZGVvKHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJc3RydWN0IHV2Y19zdHJlYW1pbmdfY29udHJvbCAqcHJvYmUpCiB7CiAJc3RydWN0IHV2Y19zdHJlYW1pbmdfY29udHJvbCBwcm9iZV9taW4sIHByb2JlX21heDsKQEAgLTI1NSw3ICsyNTcsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZ2aWRlby0+c3RyZWFtaW5nLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmc3RyZWFtLT5tdXRleCk7CiAKIAkvKiBQZXJmb3JtIHByb2JpbmcuIFRoZSBkZXZpY2Ugc2hvdWxkIGFkanVzdCB0aGUgcmVxdWVzdGVkIHZhbHVlcwogCSAqIGFjY29yZGluZyB0byBpdHMgY2FwYWJpbGl0aWVzLiBIb3dldmVyLCBzb21lIGRldmljZXMsIG5hbWVseSB0aGUKQEAgLTI2NCwxNSArMjY2LDE2IEBACiAJICogdGhhdCByZWFzb24sIGlmIHRoZSBuZWVkZWQgYmFuZHdpZHRoIGV4Y2VlZHMgdGhlIG1heGltdW0gYXZhaWxhYmxlCiAJICogYmFuZHdpZHRoLCB0cnkgdG8gbG93ZXIgdGhlIHF1YWxpdHkuCiAJICovCi0JaWYgKChyZXQgPSB1dmNfc2V0X3ZpZGVvX2N0cmwodmlkZW8sIHByb2JlLCAxKSkgPCAwKQorCXJldCA9IHV2Y19zZXRfdmlkZW9fY3RybChzdHJlYW0sIHByb2JlLCAxKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBkb25lOwogCiAJLyogR2V0IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBmb3IgY29tcHJlc3Npb24gc2V0dGluZ3MuICovCi0JaWYgKCEodmlkZW8tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX1BST0JFX01JTk1BWCkpIHsKLQkJcmV0ID0gdXZjX2dldF92aWRlb19jdHJsKHZpZGVvLCAmcHJvYmVfbWluLCAxLCBHRVRfTUlOKTsKKwlpZiAoIShzdHJlYW0tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX1BST0JFX01JTk1BWCkpIHsKKwkJcmV0ID0gdXZjX2dldF92aWRlb19jdHJsKHN0cmVhbSwgJnByb2JlX21pbiwgMSwgVVZDX0dFVF9NSU4pOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZG9uZTsKLQkJcmV0ID0gdXZjX2dldF92aWRlb19jdHJsKHZpZGVvLCAmcHJvYmVfbWF4LCAxLCBHRVRfTUFYKTsKKwkJcmV0ID0gdXZjX2dldF92aWRlb19jdHJsKHN0cmVhbSwgJnByb2JlX21heCwgMSwgVVZDX0dFVF9NQVgpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZG9uZTsKIApAQCAtMjgwLDE4ICsyODMsMjEgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0JCWlmICgocmV0ID0gdXZjX3NldF92aWRlb19jdHJsKHZpZGVvLCBwcm9iZSwgMSkpIDwgMCB8fAotCQkgICAgKHJldCA9IHV2Y19nZXRfdmlkZW9fY3RybCh2aWRlbywgcHJvYmUsIDEsIEdFVF9DVVIpKSA8IDApCisJCXJldCA9IHV2Y19zZXRfdmlkZW9fY3RybChzdHJlYW0sIHByb2JlLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGRvbmU7CisJCXJldCA9IHV2Y19nZXRfdmlkZW9fY3RybChzdHJlYW0sIHByb2JlLCAxLCBVVkNfR0VUX0NVUik7CisJCWlmIChyZXQgPCAwKQogCQkJZ290byBkb25lOwogCi0JCWlmICh2aWRlby0+c3RyZWFtaW5nLT5pbnRmLT5udW1fYWx0c2V0dGluZyA9PSAxKQorCQlpZiAoc3RyZWFtLT5pbnRmLT5udW1fYWx0c2V0dGluZyA9PSAxKQogCQkJYnJlYWs7CiAKIAkJYmFuZHdpZHRoID0gcHJvYmUtPmR3TWF4UGF5bG9hZFRyYW5zZmVyU2l6ZTsKLQkJaWYgKGJhbmR3aWR0aCA8PSB2aWRlby0+c3RyZWFtaW5nLT5tYXhwc2l6ZSkKKwkJaWYgKGJhbmR3aWR0aCA8PSBzdHJlYW0tPm1heHBzaXplKQogCQkJYnJlYWs7CiAKLQkJaWYgKHZpZGVvLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19QUk9CRV9NSU5NQVgpIHsKKwkJaWYgKHN0cmVhbS0+ZGV2LT5xdWlya3MgJiBVVkNfUVVJUktfUFJPQkVfTUlOTUFYKSB7CiAJCQlyZXQgPSAtRU5PU1BDOwogCQkJZ290byBkb25lOwogCQl9CkBAIC0zMDQsMTQgKzMxMCwxNCBAQAogCX0KIAogZG9uZToKLQltdXRleF91bmxvY2soJnZpZGVvLT5zdHJlYW1pbmctPm11dGV4KTsKKwltdXRleF91bmxvY2soJnN0cmVhbS0+bXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKLWludCB1dmNfY29tbWl0X3ZpZGVvKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKK2ludCB1dmNfY29tbWl0X3ZpZGVvKHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJc3RydWN0IHV2Y19zdHJlYW1pbmdfY29udHJvbCAqcHJvYmUpCiB7Ci0JcmV0dXJuIHV2Y19zZXRfdmlkZW9fY3RybCh2aWRlbywgcHJvYmUsIDApOworCXJldHVybiB1dmNfc2V0X3ZpZGVvX2N0cmwoc3RyZWFtLCBwcm9iZSwgMCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzYzLDcgKzM2OSw3IEBACiAgKiB0byBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgYnVmIHBhcmFtZXRlci4gdXZjX3ZpZGVvX2RlY29kZV9kYXRhIGFuZAogICogdXZjX3ZpZGVvX2RlY29kZV9lbmQgd2lsbCBuZXZlciBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgYnVmZmVyLgogICovCi1zdGF0aWMgaW50IHV2Y192aWRlb19kZWNvZGVfc3RhcnQoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorc3RhdGljIGludCB1dmNfdmlkZW9fZGVjb2RlX3N0YXJ0KHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJCXN0cnVjdCB1dmNfYnVmZmVyICpidWYsIGNvbnN0IF9fdTggKmRhdGEsIGludCBsZW4pCiB7CiAJX191OCBmaWQ7CkBAIC0zODksMjUgKzM5NSwyNSBAQAogCSAqIE5VTEwuCiAJICovCiAJaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0JCXZpZGVvLT5sYXN0X2ZpZCA9IGZpZDsKKwkJc3RyZWFtLT5sYXN0X2ZpZCA9IGZpZDsKIAkJcmV0dXJuIC1FTk9EQVRBOwogCX0KIAogCS8qIFN5bmNocm9uaXplIHRvIHRoZSBpbnB1dCBzdHJlYW0gYnkgd2FpdGluZyBmb3IgdGhlIEZJRCBiaXQgdG8gYmUKIAkgKiB0b2dnbGVkIHdoZW4gdGhlIHRoZSBidWZmZXIgc3RhdGUgaXMgbm90IFVWQ19CVUZfU1RBVEVfQUNUSVZFLgotCSAqIHZpZGVvLT5sYXN0X2ZpZCBpcyBpbml0aWFsaXplZCB0byAtMSwgc28gdGhlIGZpcnN0IGlzb2Nocm9ub3VzCisJICogc3RyZWFtLT5sYXN0X2ZpZCBpcyBpbml0aWFsaXplZCB0byAtMSwgc28gdGhlIGZpcnN0IGlzb2Nocm9ub3VzCiAJICogZnJhbWUgd2lsbCBhbHdheXMgYmUgaW4gc3luYy4KIAkgKgotCSAqIElmIHRoZSBkZXZpY2UgZG9lc24ndCB0b2dnbGUgdGhlIEZJRCBiaXQsIGludmVydCB2aWRlby0+bGFzdF9maWQKKwkgKiBJZiB0aGUgZGV2aWNlIGRvZXNuJ3QgdG9nZ2xlIHRoZSBGSUQgYml0LCBpbnZlcnQgc3RyZWFtLT5sYXN0X2ZpZAogCSAqIHdoZW4gdGhlIEVPRiBiaXQgaXMgc2V0IHRvIGZvcmNlIHN5bmNocm9uaXNhdGlvbiBvbiB0aGUgbmV4dCBwYWNrZXQuCiAJICovCiAJaWYgKGJ1Zi0+c3RhdGUgIT0gVVZDX0JVRl9TVEFURV9BQ1RJVkUpIHsKLQkJaWYgKGZpZCA9PSB2aWRlby0+bGFzdF9maWQpIHsKKwkJaWYgKGZpZCA9PSBzdHJlYW0tPmxhc3RfZmlkKSB7CiAJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0ZSQU1FLCAiRHJvcHBpbmcgcGF5bG9hZCAob3V0IG9mICIKIAkJCQkic3luYykuXG4iKTsKLQkJCWlmICgodmlkZW8tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX1NUUkVBTV9OT19GSUQpICYmCisJCQlpZiAoKHN0cmVhbS0+ZGV2LT5xdWlya3MgJiBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRCkgJiYKIAkJCSAgICAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRU9GKSkKLQkJCQl2aWRlby0+bGFzdF9maWQgXj0gVVZDX1NUUkVBTV9GSUQ7CisJCQkJc3RyZWFtLT5sYXN0X2ZpZCBePSBVVkNfU1RSRUFNX0ZJRDsKIAkJCXJldHVybiAtRU5PREFUQTsKIAkJfQogCkBAIC00MjIsNyArNDI4LDcgQEAKIAkgKiBsYXN0IHBheWxvYWQgY2FuIGJlIGxvc3QgYW55d2F5KS4gV2UgdGh1cyBtdXN0IGNoZWNrIGlmIHRoZSBGSUQgaGFzCiAJICogYmVlbiB0b2dnbGVkLgogCSAqCi0JICogdmlkZW8tPmxhc3RfZmlkIGlzIGluaXRpYWxpemVkIHRvIC0xLCBzbyB0aGUgZmlyc3QgaXNvY2hyb25vdXMKKwkgKiBzdHJlYW0tPmxhc3RfZmlkIGlzIGluaXRpYWxpemVkIHRvIC0xLCBzbyB0aGUgZmlyc3QgaXNvY2hyb25vdXMKIAkgKiBmcmFtZSB3aWxsIG5ldmVyIHRyaWdnZXIgYW4gZW5kIG9mIGZyYW1lIGRldGVjdGlvbi4KIAkgKgogCSAqIEVtcHR5IGJ1ZmZlcnMgKGJ5dGVzdXNlZCA9PSAwKSBkb24ndCB0cmlnZ2VyIGVuZCBvZiBmcmFtZSBkZXRlY3Rpb24KQEAgLTQzMCwyMiArNDM2LDIyIEBACiAJICogYXZvaWRzIGRldGVjdGluZyBlbmQgb2YgZnJhbWUgY29uZGl0aW9ucyBhdCBGSUQgdG9nZ2xpbmcgaWYgdGhlCiAJICogcHJldmlvdXMgcGF5bG9hZCBoYWQgdGhlIEVPRiBiaXQgc2V0LgogCSAqLwotCWlmIChmaWQgIT0gdmlkZW8tPmxhc3RfZmlkICYmIGJ1Zi0+YnVmLmJ5dGVzdXNlZCAhPSAwKSB7CisJaWYgKGZpZCAhPSBzdHJlYW0tPmxhc3RfZmlkICYmIGJ1Zi0+YnVmLmJ5dGVzdXNlZCAhPSAwKSB7CiAJCXV2Y190cmFjZShVVkNfVFJBQ0VfRlJBTUUsICJGcmFtZSBjb21wbGV0ZSAoRklEIGJpdCAiCiAJCQkJInRvZ2dsZWQpLlxuIik7CiAJCWJ1Zi0+c3RhdGUgPSBVVkNfQlVGX1NUQVRFX0RPTkU7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCXZpZGVvLT5sYXN0X2ZpZCA9IGZpZDsKKwlzdHJlYW0tPmxhc3RfZmlkID0gZmlkOwogCiAJcmV0dXJuIGRhdGFbMF07CiB9CiAKLXN0YXRpYyB2b2lkIHV2Y192aWRlb19kZWNvZGVfZGF0YShzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCitzdGF0aWMgdm9pZCB1dmNfdmlkZW9fZGVjb2RlX2RhdGEoc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSwKIAkJc3RydWN0IHV2Y19idWZmZXIgKmJ1ZiwgY29uc3QgX191OCAqZGF0YSwgaW50IGxlbikKIHsKLQlzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSA9ICZ2aWRlby0+cXVldWU7CisJc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUgPSAmc3RyZWFtLT5xdWV1ZTsKIAl1bnNpZ25lZCBpbnQgbWF4bGVuLCBuYnl0ZXM7CiAJdm9pZCAqbWVtOwogCkBAIC00NjYsNyArNDcyLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHV2Y192aWRlb19kZWNvZGVfZW5kKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKK3N0YXRpYyB2b2lkIHV2Y192aWRlb19kZWNvZGVfZW5kKHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJCXN0cnVjdCB1dmNfYnVmZmVyICpidWYsIGNvbnN0IF9fdTggKmRhdGEsIGludCBsZW4pCiB7CiAJLyogTWFyayB0aGUgYnVmZmVyIGFzIGRvbmUgaWYgdGhlIEVPRiBtYXJrZXIgaXMgc2V0LiAqLwpAQCAtNDc1LDggKzQ4MSw4IEBACiAJCWlmIChkYXRhWzBdID09IGxlbikKIAkJCXV2Y190cmFjZShVVkNfVFJBQ0VfRlJBTUUsICJFT0YgaW4gZW1wdHkgcGF5bG9hZC5cbiIpOwogCQlidWYtPnN0YXRlID0gVVZDX0JVRl9TVEFURV9ET05FOwotCQlpZiAodmlkZW8tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX1NUUkVBTV9OT19GSUQpCi0JCQl2aWRlby0+bGFzdF9maWQgXj0gVVZDX1NUUkVBTV9GSUQ7CisJCWlmIChzdHJlYW0tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX1NUUkVBTV9OT19GSUQpCisJCQlzdHJlYW0tPmxhc3RfZmlkIF49IFVWQ19TVFJFQU1fRklEOwogCX0KIH0KIApAQCAtNDkxLDI2ICs0OTcsMjYgQEAKICAqIHV2Y192aWRlb19lbmNvZGVfZGF0YSBpcyBjYWxsZWQgZm9yIGV2ZXJ5IFVSQiBhbmQgY29waWVzIHRoZSBkYXRhIGZyb20gdGhlCiAgKiB2aWRlbyBidWZmZXIgdG8gdGhlIHRyYW5zZmVyIGJ1ZmZlci4KICAqLwotc3RhdGljIGludCB1dmNfdmlkZW9fZW5jb2RlX2hlYWRlcihzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCitzdGF0aWMgaW50IHV2Y192aWRlb19lbmNvZGVfaGVhZGVyKHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJCXN0cnVjdCB1dmNfYnVmZmVyICpidWYsIF9fdTggKmRhdGEsIGludCBsZW4pCiB7CiAJZGF0YVswXSA9IDI7CS8qIEhlYWRlciBsZW5ndGggKi8KIAlkYXRhWzFdID0gVVZDX1NUUkVBTV9FT0ggfCBVVkNfU1RSRUFNX0VPRgotCQl8ICh2aWRlby0+bGFzdF9maWQgJiBVVkNfU1RSRUFNX0ZJRCk7CisJCXwgKHN0cmVhbS0+bGFzdF9maWQgJiBVVkNfU1RSRUFNX0ZJRCk7CiAJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBpbnQgdXZjX3ZpZGVvX2VuY29kZV9kYXRhKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKK3N0YXRpYyBpbnQgdXZjX3ZpZGVvX2VuY29kZV9kYXRhKHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJCXN0cnVjdCB1dmNfYnVmZmVyICpidWYsIF9fdTggKmRhdGEsIGludCBsZW4pCiB7Ci0Jc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUgPSAmdmlkZW8tPnF1ZXVlOworCXN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlID0gJnN0cmVhbS0+cXVldWU7CiAJdW5zaWduZWQgaW50IG5ieXRlczsKIAl2b2lkICptZW07CiAKIAkvKiBDb3B5IHZpZGVvIGRhdGEgdG8gdGhlIFVSQiBidWZmZXIuICovCiAJbWVtID0gcXVldWUtPm1lbSArIGJ1Zi0+YnVmLm0ub2Zmc2V0ICsgcXVldWUtPmJ1Zl91c2VkOwogCW5ieXRlcyA9IG1pbigodW5zaWduZWQgaW50KWxlbiwgYnVmLT5idWYuYnl0ZXN1c2VkIC0gcXVldWUtPmJ1Zl91c2VkKTsKLQluYnl0ZXMgPSBtaW4odmlkZW8tPmJ1bGsubWF4X3BheWxvYWRfc2l6ZSAtIHZpZGVvLT5idWxrLnBheWxvYWRfc2l6ZSwKKwluYnl0ZXMgPSBtaW4oc3RyZWFtLT5idWxrLm1heF9wYXlsb2FkX3NpemUgLSBzdHJlYW0tPmJ1bGsucGF5bG9hZF9zaXplLAogCQkJbmJ5dGVzKTsKIAltZW1jcHkoZGF0YSwgbWVtLCBuYnl0ZXMpOwogCkBAIC01MjYsOCArNTMyLDggQEAKIC8qCiAgKiBDb21wbGV0aW9uIGhhbmRsZXIgZm9yIHZpZGVvIFVSQnMuCiAgKi8KLXN0YXRpYyB2b2lkIHV2Y192aWRlb19kZWNvZGVfaXNvYyhzdHJ1Y3QgdXJiICp1cmIsCi0Jc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLCBzdHJ1Y3QgdXZjX2J1ZmZlciAqYnVmKQorc3RhdGljIHZvaWQgdXZjX3ZpZGVvX2RlY29kZV9pc29jKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSwKKwlzdHJ1Y3QgdXZjX2J1ZmZlciAqYnVmKQogewogCXU4ICptZW07CiAJaW50IHJldCwgaTsKQEAgLTU0MiwzMSArNTQ4LDMyIEBACiAJCS8qIERlY29kZSB0aGUgcGF5bG9hZCBoZWFkZXIuICovCiAJCW1lbSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CiAJCWRvIHsKLQkJCXJldCA9IHV2Y192aWRlb19kZWNvZGVfc3RhcnQodmlkZW8sIGJ1ZiwgbWVtLAorCQkJcmV0ID0gdXZjX3ZpZGVvX2RlY29kZV9zdGFydChzdHJlYW0sIGJ1ZiwgbWVtLAogCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCk7CiAJCQlpZiAocmV0ID09IC1FQUdBSU4pCi0JCQkJYnVmID0gdXZjX3F1ZXVlX25leHRfYnVmZmVyKCZ2aWRlby0+cXVldWUsIGJ1Zik7CisJCQkJYnVmID0gdXZjX3F1ZXVlX25leHRfYnVmZmVyKCZzdHJlYW0tPnF1ZXVlLAorCQkJCQkJCSAgICBidWYpOwogCQl9IHdoaWxlIChyZXQgPT0gLUVBR0FJTik7CiAKIAkJaWYgKHJldCA8IDApCiAJCQljb250aW51ZTsKIAogCQkvKiBEZWNvZGUgdGhlIHBheWxvYWQgZGF0YS4gKi8KLQkJdXZjX3ZpZGVvX2RlY29kZV9kYXRhKHZpZGVvLCBidWYsIG1lbSArIHJldCwKKwkJdXZjX3ZpZGVvX2RlY29kZV9kYXRhKHN0cmVhbSwgYnVmLCBtZW0gKyByZXQsCiAJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggLSByZXQpOwogCiAJCS8qIFByb2Nlc3MgdGhlIGhlYWRlciBhZ2Fpbi4gKi8KLQkJdXZjX3ZpZGVvX2RlY29kZV9lbmQodmlkZW8sIGJ1ZiwgbWVtLAorCQl1dmNfdmlkZW9fZGVjb2RlX2VuZChzdHJlYW0sIGJ1ZiwgbWVtLAogCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKIAogCQlpZiAoYnVmLT5zdGF0ZSA9PSBVVkNfQlVGX1NUQVRFX0RPTkUgfHwKIAkJICAgIGJ1Zi0+c3RhdGUgPT0gVVZDX0JVRl9TVEFURV9FUlJPUikKLQkJCWJ1ZiA9IHV2Y19xdWV1ZV9uZXh0X2J1ZmZlcigmdmlkZW8tPnF1ZXVlLCBidWYpOworCQkJYnVmID0gdXZjX3F1ZXVlX25leHRfYnVmZmVyKCZzdHJlYW0tPnF1ZXVlLCBidWYpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgdXZjX3ZpZGVvX2RlY29kZV9idWxrKHN0cnVjdCB1cmIgKnVyYiwKLQlzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sIHN0cnVjdCB1dmNfYnVmZmVyICpidWYpCitzdGF0aWMgdm9pZCB1dmNfdmlkZW9fZGVjb2RlX2J1bGsoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdXZjX3N0cmVhbWluZyAqc3RyZWFtLAorCXN0cnVjdCB1dmNfYnVmZmVyICpidWYpCiB7CiAJdTggKm1lbTsKIAlpbnQgbGVuLCByZXQ7CkBAIC01NzYsMjQgKzU4MywyNSBAQAogCiAJbWVtID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAJbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwotCXZpZGVvLT5idWxrLnBheWxvYWRfc2l6ZSArPSBsZW47CisJc3RyZWFtLT5idWxrLnBheWxvYWRfc2l6ZSArPSBsZW47CiAKIAkvKiBJZiB0aGUgVVJCIGlzIHRoZSBmaXJzdCBvZiBpdHMgcGF5bG9hZCwgZGVjb2RlIGFuZCBzYXZlIHRoZQogCSAqIGhlYWRlci4KIAkgKi8KLQlpZiAodmlkZW8tPmJ1bGsuaGVhZGVyX3NpemUgPT0gMCAmJiAhdmlkZW8tPmJ1bGsuc2tpcF9wYXlsb2FkKSB7CisJaWYgKHN0cmVhbS0+YnVsay5oZWFkZXJfc2l6ZSA9PSAwICYmICFzdHJlYW0tPmJ1bGsuc2tpcF9wYXlsb2FkKSB7CiAJCWRvIHsKLQkJCXJldCA9IHV2Y192aWRlb19kZWNvZGVfc3RhcnQodmlkZW8sIGJ1ZiwgbWVtLCBsZW4pOworCQkJcmV0ID0gdXZjX3ZpZGVvX2RlY29kZV9zdGFydChzdHJlYW0sIGJ1ZiwgbWVtLCBsZW4pOwogCQkJaWYgKHJldCA9PSAtRUFHQUlOKQotCQkJCWJ1ZiA9IHV2Y19xdWV1ZV9uZXh0X2J1ZmZlcigmdmlkZW8tPnF1ZXVlLCBidWYpOworCQkJCWJ1ZiA9IHV2Y19xdWV1ZV9uZXh0X2J1ZmZlcigmc3RyZWFtLT5xdWV1ZSwKKwkJCQkJCQkgICAgYnVmKTsKIAkJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOwogCiAJCS8qIElmIGFuIGVycm9yIG9jY3VyZWQgc2tpcCB0aGUgcmVzdCBvZiB0aGUgcGF5bG9hZC4gKi8KIAkJaWYgKHJldCA8IDAgfHwgYnVmID09IE5VTEwpIHsKLQkJCXZpZGVvLT5idWxrLnNraXBfcGF5bG9hZCA9IDE7CisJCQlzdHJlYW0tPmJ1bGsuc2tpcF9wYXlsb2FkID0gMTsKIAkJfSBlbHNlIHsKLQkJCW1lbWNweSh2aWRlby0+YnVsay5oZWFkZXIsIG1lbSwgcmV0KTsKLQkJCXZpZGVvLT5idWxrLmhlYWRlcl9zaXplID0gcmV0OworCQkJbWVtY3B5KHN0cmVhbS0+YnVsay5oZWFkZXIsIG1lbSwgcmV0KTsKKwkJCXN0cmVhbS0+YnVsay5oZWFkZXJfc2l6ZSA9IHJldDsKIAogCQkJbWVtICs9IHJldDsKIAkJCWxlbiAtPSByZXQ7CkBAIC02MDYsMzMgKzYxNCwzNCBAQAogCSAqLwogCiAJLyogUHJvY2VzcyB2aWRlbyBkYXRhLiAqLwotCWlmICghdmlkZW8tPmJ1bGsuc2tpcF9wYXlsb2FkICYmIGJ1ZiAhPSBOVUxMKQotCQl1dmNfdmlkZW9fZGVjb2RlX2RhdGEodmlkZW8sIGJ1ZiwgbWVtLCBsZW4pOworCWlmICghc3RyZWFtLT5idWxrLnNraXBfcGF5bG9hZCAmJiBidWYgIT0gTlVMTCkKKwkJdXZjX3ZpZGVvX2RlY29kZV9kYXRhKHN0cmVhbSwgYnVmLCBtZW0sIGxlbik7CiAKIAkvKiBEZXRlY3QgdGhlIHBheWxvYWQgZW5kIGJ5IGEgVVJCIHNtYWxsZXIgdGhhbiB0aGUgbWF4aW11bSBzaXplIChvcgogCSAqIGEgcGF5bG9hZCBzaXplIGVxdWFsIHRvIHRoZSBtYXhpbXVtKSBhbmQgcHJvY2VzcyB0aGUgaGVhZGVyIGFnYWluLgogCSAqLwogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggfHwKLQkgICAgdmlkZW8tPmJ1bGsucGF5bG9hZF9zaXplID49IHZpZGVvLT5idWxrLm1heF9wYXlsb2FkX3NpemUpIHsKLQkJaWYgKCF2aWRlby0+YnVsay5za2lwX3BheWxvYWQgJiYgYnVmICE9IE5VTEwpIHsKLQkJCXV2Y192aWRlb19kZWNvZGVfZW5kKHZpZGVvLCBidWYsIHZpZGVvLT5idWxrLmhlYWRlciwKLQkJCQl2aWRlby0+YnVsay5wYXlsb2FkX3NpemUpOworCSAgICBzdHJlYW0tPmJ1bGsucGF5bG9hZF9zaXplID49IHN0cmVhbS0+YnVsay5tYXhfcGF5bG9hZF9zaXplKSB7CisJCWlmICghc3RyZWFtLT5idWxrLnNraXBfcGF5bG9hZCAmJiBidWYgIT0gTlVMTCkgeworCQkJdXZjX3ZpZGVvX2RlY29kZV9lbmQoc3RyZWFtLCBidWYsIHN0cmVhbS0+YnVsay5oZWFkZXIsCisJCQkJc3RyZWFtLT5idWxrLnBheWxvYWRfc2l6ZSk7CiAJCQlpZiAoYnVmLT5zdGF0ZSA9PSBVVkNfQlVGX1NUQVRFX0RPTkUgfHwKIAkJCSAgICBidWYtPnN0YXRlID09IFVWQ19CVUZfU1RBVEVfRVJST1IpCi0JCQkJYnVmID0gdXZjX3F1ZXVlX25leHRfYnVmZmVyKCZ2aWRlby0+cXVldWUsIGJ1Zik7CisJCQkJYnVmID0gdXZjX3F1ZXVlX25leHRfYnVmZmVyKCZzdHJlYW0tPnF1ZXVlLAorCQkJCQkJCSAgICBidWYpOwogCQl9CiAKLQkJdmlkZW8tPmJ1bGsuaGVhZGVyX3NpemUgPSAwOwotCQl2aWRlby0+YnVsay5za2lwX3BheWxvYWQgPSAwOwotCQl2aWRlby0+YnVsay5wYXlsb2FkX3NpemUgPSAwOworCQlzdHJlYW0tPmJ1bGsuaGVhZGVyX3NpemUgPSAwOworCQlzdHJlYW0tPmJ1bGsuc2tpcF9wYXlsb2FkID0gMDsKKwkJc3RyZWFtLT5idWxrLnBheWxvYWRfc2l6ZSA9IDA7CiAJfQogfQogCi1zdGF0aWMgdm9pZCB1dmNfdmlkZW9fZW5jb2RlX2J1bGsoc3RydWN0IHVyYiAqdXJiLAotCXN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywgc3RydWN0IHV2Y19idWZmZXIgKmJ1ZikKK3N0YXRpYyB2b2lkIHV2Y192aWRlb19lbmNvZGVfYnVsayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCisJc3RydWN0IHV2Y19idWZmZXIgKmJ1ZikKIHsKIAl1OCAqbWVtID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JaW50IGxlbiA9IHZpZGVvLT51cmJfc2l6ZSwgcmV0OworCWludCBsZW4gPSBzdHJlYW0tPnVyYl9zaXplLCByZXQ7CiAKIAlpZiAoYnVmID09IE5VTEwpIHsKIAkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMDsKQEAgLTY0MCw0MCArNjQ5LDQwIEBACiAJfQogCiAJLyogSWYgdGhlIFVSQiBpcyB0aGUgZmlyc3Qgb2YgaXRzIHBheWxvYWQsIGFkZCB0aGUgaGVhZGVyLiAqLwotCWlmICh2aWRlby0+YnVsay5oZWFkZXJfc2l6ZSA9PSAwKSB7Ci0JCXJldCA9IHV2Y192aWRlb19lbmNvZGVfaGVhZGVyKHZpZGVvLCBidWYsIG1lbSwgbGVuKTsKLQkJdmlkZW8tPmJ1bGsuaGVhZGVyX3NpemUgPSByZXQ7Ci0JCXZpZGVvLT5idWxrLnBheWxvYWRfc2l6ZSArPSByZXQ7CisJaWYgKHN0cmVhbS0+YnVsay5oZWFkZXJfc2l6ZSA9PSAwKSB7CisJCXJldCA9IHV2Y192aWRlb19lbmNvZGVfaGVhZGVyKHN0cmVhbSwgYnVmLCBtZW0sIGxlbik7CisJCXN0cmVhbS0+YnVsay5oZWFkZXJfc2l6ZSA9IHJldDsKKwkJc3RyZWFtLT5idWxrLnBheWxvYWRfc2l6ZSArPSByZXQ7CiAJCW1lbSArPSByZXQ7CiAJCWxlbiAtPSByZXQ7CiAJfQogCiAJLyogUHJvY2VzcyB2aWRlbyBkYXRhLiAqLwotCXJldCA9IHV2Y192aWRlb19lbmNvZGVfZGF0YSh2aWRlbywgYnVmLCBtZW0sIGxlbik7CisJcmV0ID0gdXZjX3ZpZGVvX2VuY29kZV9kYXRhKHN0cmVhbSwgYnVmLCBtZW0sIGxlbik7CiAKLQl2aWRlby0+YnVsay5wYXlsb2FkX3NpemUgKz0gcmV0OworCXN0cmVhbS0+YnVsay5wYXlsb2FkX3NpemUgKz0gcmV0OwogCWxlbiAtPSByZXQ7CiAKLQlpZiAoYnVmLT5idWYuYnl0ZXN1c2VkID09IHZpZGVvLT5xdWV1ZS5idWZfdXNlZCB8fAotCSAgICB2aWRlby0+YnVsay5wYXlsb2FkX3NpemUgPT0gdmlkZW8tPmJ1bGsubWF4X3BheWxvYWRfc2l6ZSkgewotCQlpZiAoYnVmLT5idWYuYnl0ZXN1c2VkID09IHZpZGVvLT5xdWV1ZS5idWZfdXNlZCkgewotCQkJdmlkZW8tPnF1ZXVlLmJ1Zl91c2VkID0gMDsKKwlpZiAoYnVmLT5idWYuYnl0ZXN1c2VkID09IHN0cmVhbS0+cXVldWUuYnVmX3VzZWQgfHwKKwkgICAgc3RyZWFtLT5idWxrLnBheWxvYWRfc2l6ZSA9PSBzdHJlYW0tPmJ1bGsubWF4X3BheWxvYWRfc2l6ZSkgeworCQlpZiAoYnVmLT5idWYuYnl0ZXN1c2VkID09IHN0cmVhbS0+cXVldWUuYnVmX3VzZWQpIHsKKwkJCXN0cmVhbS0+cXVldWUuYnVmX3VzZWQgPSAwOwogCQkJYnVmLT5zdGF0ZSA9IFVWQ19CVUZfU1RBVEVfRE9ORTsKLQkJCXV2Y19xdWV1ZV9uZXh0X2J1ZmZlcigmdmlkZW8tPnF1ZXVlLCBidWYpOwotCQkJdmlkZW8tPmxhc3RfZmlkIF49IFVWQ19TVFJFQU1fRklEOworCQkJdXZjX3F1ZXVlX25leHRfYnVmZmVyKCZzdHJlYW0tPnF1ZXVlLCBidWYpOworCQkJc3RyZWFtLT5sYXN0X2ZpZCBePSBVVkNfU1RSRUFNX0ZJRDsKIAkJfQogCi0JCXZpZGVvLT5idWxrLmhlYWRlcl9zaXplID0gMDsKLQkJdmlkZW8tPmJ1bGsucGF5bG9hZF9zaXplID0gMDsKKwkJc3RyZWFtLT5idWxrLmhlYWRlcl9zaXplID0gMDsKKwkJc3RyZWFtLT5idWxrLnBheWxvYWRfc2l6ZSA9IDA7CiAJfQogCi0JdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gdmlkZW8tPnVyYl9zaXplIC0gbGVuOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHN0cmVhbS0+dXJiX3NpemUgLSBsZW47CiB9CiAKIHN0YXRpYyB2b2lkIHV2Y192aWRlb19jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlID0gJnZpZGVvLT5xdWV1ZTsKKwlzdHJ1Y3QgdXZjX3N0cmVhbWluZyAqc3RyZWFtID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlID0gJnN0cmVhbS0+cXVldWU7CiAJc3RydWN0IHV2Y19idWZmZXIgKmJ1ZiA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwpAQCAtNjg3LDcgKzY5Niw3IEBACiAJCQkiY29tcGxldGlvbiBoYW5kbGVyLlxuIiwgdXJiLT5zdGF0dXMpOwogCiAJY2FzZSAtRU5PRU5UOgkJLyogdXNiX2tpbGxfdXJiKCkgY2FsbGVkLiAqLwotCQlpZiAodmlkZW8tPmZyb3plbikKKwkJaWYgKHN0cmVhbS0+ZnJvemVuKQogCQkJcmV0dXJuOwogCiAJY2FzZSAtRUNPTk5SRVNFVDoJLyogdXNiX3VubGlua191cmIoKSBjYWxsZWQuICovCkBAIC03MDIsNyArNzExLDcgQEAKIAkJCQkgICAgICAgcXVldWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5pcnFsb2NrLCBmbGFncyk7CiAKLQl2aWRlby0+ZGVjb2RlKHVyYiwgdmlkZW8sIGJ1Zik7CisJc3RyZWFtLT5kZWNvZGUodXJiLCBzdHJlYW0sIGJ1Zik7CiAKIAlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpIDwgMCkgewogCQl1dmNfcHJpbnRrKEtFUk5fRVJSLCAiRmFpbGVkIHRvIHJlc3VibWl0IHZpZGVvIFVSQiAoJWQpLlxuIiwKQEAgLTcxMywxOSArNzIyLDE5IEBACiAvKgogICogRnJlZSB0cmFuc2ZlciBidWZmZXJzLgogICovCi1zdGF0aWMgdm9pZCB1dmNfZnJlZV91cmJfYnVmZmVycyhzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8pCitzdGF0aWMgdm9pZCB1dmNfZnJlZV91cmJfYnVmZmVycyhzdHJ1Y3QgdXZjX3N0cmVhbWluZyAqc3RyZWFtKQogewogCXVuc2lnbmVkIGludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFVWQ19VUkJTOyArK2kpIHsKLQkJaWYgKHZpZGVvLT51cmJfYnVmZmVyW2ldKSB7Ci0JCQl1c2JfYnVmZmVyX2ZyZWUodmlkZW8tPmRldi0+dWRldiwgdmlkZW8tPnVyYl9zaXplLAotCQkJCXZpZGVvLT51cmJfYnVmZmVyW2ldLCB2aWRlby0+dXJiX2RtYVtpXSk7Ci0JCQl2aWRlby0+dXJiX2J1ZmZlcltpXSA9IE5VTEw7CisJCWlmIChzdHJlYW0tPnVyYl9idWZmZXJbaV0pIHsKKwkJCXVzYl9idWZmZXJfZnJlZShzdHJlYW0tPmRldi0+dWRldiwgc3RyZWFtLT51cmJfc2l6ZSwKKwkJCQlzdHJlYW0tPnVyYl9idWZmZXJbaV0sIHN0cmVhbS0+dXJiX2RtYVtpXSk7CisJCQlzdHJlYW0tPnVyYl9idWZmZXJbaV0gPSBOVUxMOwogCQl9CiAJfQogCi0JdmlkZW8tPnVyYl9zaXplID0gMDsKKwlzdHJlYW0tPnVyYl9zaXplID0gMDsKIH0KIAogLyoKQEAgLTczOSwxNSArNzQ4LDE1IEBACiAgKgogICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIHBhY2tldHMgb24gc3VjY2VzcyBvciAwIHdoZW4gb3V0IG9mIG1lbW9yeS4KICAqLwotc3RhdGljIGludCB1dmNfYWxsb2NfdXJiX2J1ZmZlcnMoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorc3RhdGljIGludCB1dmNfYWxsb2NfdXJiX2J1ZmZlcnMoc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSwKIAl1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IHBzaXplLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJdW5zaWduZWQgaW50IG5wYWNrZXRzOwogCXVuc2lnbmVkIGludCBpOwogCiAJLyogQnVmZmVycyBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQsIGJhaWwgb3V0LiAqLwotCWlmICh2aWRlby0+dXJiX3NpemUpCi0JCXJldHVybiB2aWRlby0+dXJiX3NpemUgLyBwc2l6ZTsKKwlpZiAoc3RyZWFtLT51cmJfc2l6ZSkKKwkJcmV0dXJuIHN0cmVhbS0+dXJiX3NpemUgLyBwc2l6ZTsKIAogCS8qIENvbXB1dGUgdGhlIG51bWJlciBvZiBwYWNrZXRzLiBCdWxrIGVuZHBvaW50cyBtaWdodCB0cmFuc2ZlciBVVkMKIAkgKiBwYXlsb2FkcyBhY2Nyb3NzIG11bHRpcGxlIFVSQnMuCkBAIC03NTksMTcgKzc2OCwxNyBAQAogCS8qIFJldHJ5IGFsbG9jYXRpb25zIHVudGlsIG9uZSBzdWNjZWVkLiAqLwogCWZvciAoOyBucGFja2V0cyA+IDE7IG5wYWNrZXRzIC89IDIpIHsKIAkJZm9yIChpID0gMDsgaSA8IFVWQ19VUkJTOyArK2kpIHsKLQkJCXZpZGVvLT51cmJfYnVmZmVyW2ldID0gdXNiX2J1ZmZlcl9hbGxvYygKLQkJCQl2aWRlby0+ZGV2LT51ZGV2LCBwc2l6ZSAqIG5wYWNrZXRzLAotCQkJCWdmcF9mbGFncyB8IF9fR0ZQX05PV0FSTiwgJnZpZGVvLT51cmJfZG1hW2ldKTsKLQkJCWlmICghdmlkZW8tPnVyYl9idWZmZXJbaV0pIHsKLQkJCQl1dmNfZnJlZV91cmJfYnVmZmVycyh2aWRlbyk7CisJCQlzdHJlYW0tPnVyYl9idWZmZXJbaV0gPSB1c2JfYnVmZmVyX2FsbG9jKAorCQkJCXN0cmVhbS0+ZGV2LT51ZGV2LCBwc2l6ZSAqIG5wYWNrZXRzLAorCQkJCWdmcF9mbGFncyB8IF9fR0ZQX05PV0FSTiwgJnN0cmVhbS0+dXJiX2RtYVtpXSk7CisJCQlpZiAoIXN0cmVhbS0+dXJiX2J1ZmZlcltpXSkgeworCQkJCXV2Y19mcmVlX3VyYl9idWZmZXJzKHN0cmVhbSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAogCQlpZiAoaSA9PSBVVkNfVVJCUykgewotCQkJdmlkZW8tPnVyYl9zaXplID0gcHNpemUgKiBucGFja2V0czsKKwkJCXN0cmVhbS0+dXJiX3NpemUgPSBwc2l6ZSAqIG5wYWNrZXRzOwogCQkJcmV0dXJuIG5wYWNrZXRzOwogCQl9CiAJfQpAQCAtNzgwLDI5ICs3ODksMzAgQEAKIC8qCiAgKiBVbmluaXRpYWxpemUgaXNvY2hyb25vdXMvYnVsayBVUkJzIGFuZCBmcmVlIHRyYW5zZmVyIGJ1ZmZlcnMuCiAgKi8KLXN0YXRpYyB2b2lkIHV2Y191bmluaXRfdmlkZW8oc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLCBpbnQgZnJlZV9idWZmZXJzKQorc3RhdGljIHZvaWQgdXZjX3VuaW5pdF92aWRlbyhzdHJ1Y3QgdXZjX3N0cmVhbWluZyAqc3RyZWFtLCBpbnQgZnJlZV9idWZmZXJzKQogewogCXN0cnVjdCB1cmIgKnVyYjsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBVVkNfVVJCUzsgKytpKSB7Ci0JCWlmICgodXJiID0gdmlkZW8tPnVyYltpXSkgPT0gTlVMTCkKKwkJdXJiID0gc3RyZWFtLT51cmJbaV07CisJCWlmICh1cmIgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCiAJCXVzYl9raWxsX3VyYih1cmIpOwogCQl1c2JfZnJlZV91cmIodXJiKTsKLQkJdmlkZW8tPnVyYltpXSA9IE5VTEw7CisJCXN0cmVhbS0+dXJiW2ldID0gTlVMTDsKIAl9CiAKIAlpZiAoZnJlZV9idWZmZXJzKQotCQl1dmNfZnJlZV91cmJfYnVmZmVycyh2aWRlbyk7CisJCXV2Y19mcmVlX3VyYl9idWZmZXJzKHN0cmVhbSk7CiB9CiAKIC8qCiAgKiBJbml0aWFsaXplIGlzb2Nocm9ub3VzIFVSQnMgYW5kIGFsbG9jYXRlIHRyYW5zZmVyIGJ1ZmZlcnMuIFRoZSBwYWNrZXQgc2l6ZQogICogaXMgZ2l2ZW4gYnkgdGhlIGVuZHBvaW50LgogICovCi1zdGF0aWMgaW50IHV2Y19pbml0X3ZpZGVvX2lzb2Moc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorc3RhdGljIGludCB1dmNfaW5pdF92aWRlb19pc29jKHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCB1cmIgKnVyYjsKQEAgLTgxMiw5ICs4MjIsOSBAQAogCiAJcHNpemUgPSBsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSk7CiAJcHNpemUgPSAocHNpemUgJiAweDA3ZmYpICogKDEgKyAoKHBzaXplID4+IDExKSAmIDMpKTsKLQlzaXplID0gdmlkZW8tPnN0cmVhbWluZy0+Y3RybC5kd01heFZpZGVvRnJhbWVTaXplOworCXNpemUgPSBzdHJlYW0tPmN0cmwuZHdNYXhWaWRlb0ZyYW1lU2l6ZTsKIAotCW5wYWNrZXRzID0gdXZjX2FsbG9jX3VyYl9idWZmZXJzKHZpZGVvLCBzaXplLCBwc2l6ZSwgZ2ZwX2ZsYWdzKTsKKwlucGFja2V0cyA9IHV2Y19hbGxvY191cmJfYnVmZmVycyhzdHJlYW0sIHNpemUsIHBzaXplLCBnZnBfZmxhZ3MpOwogCWlmIChucGFja2V0cyA9PSAwKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtODIzLDE4ICs4MzMsMTggQEAKIAlmb3IgKGkgPSAwOyBpIDwgVVZDX1VSQlM7ICsraSkgewogCQl1cmIgPSB1c2JfYWxsb2NfdXJiKG5wYWNrZXRzLCBnZnBfZmxhZ3MpOwogCQlpZiAodXJiID09IE5VTEwpIHsKLQkJCXV2Y191bmluaXRfdmlkZW8odmlkZW8sIDEpOworCQkJdXZjX3VuaW5pdF92aWRlbyhzdHJlYW0sIDEpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQl1cmItPmRldiA9IHZpZGVvLT5kZXYtPnVkZXY7Ci0JCXVyYi0+Y29udGV4dCA9IHZpZGVvOwotCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUodmlkZW8tPmRldi0+dWRldiwKKwkJdXJiLT5kZXYgPSBzdHJlYW0tPmRldi0+dWRldjsKKwkJdXJiLT5jb250ZXh0ID0gc3RyZWFtOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoc3RyZWFtLT5kZXYtPnVkZXYsCiAJCQkJZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CiAJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVAgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKIAkJdXJiLT5pbnRlcnZhbCA9IGVwLT5kZXNjLmJJbnRlcnZhbDsKLQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB2aWRlby0+dXJiX2J1ZmZlcltpXTsKLQkJdXJiLT50cmFuc2Zlcl9kbWEgPSB2aWRlby0+dXJiX2RtYVtpXTsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBzdHJlYW0tPnVyYl9idWZmZXJbaV07CisJCXVyYi0+dHJhbnNmZXJfZG1hID0gc3RyZWFtLT51cmJfZG1hW2ldOwogCQl1cmItPmNvbXBsZXRlID0gdXZjX3ZpZGVvX2NvbXBsZXRlOwogCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gbnBhY2tldHM7CiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemU7CkBAIC04NDQsNyArODU0LDcgQEAKIAkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gcHNpemU7CiAJCX0KIAotCQl2aWRlby0+dXJiW2ldID0gdXJiOworCQlzdHJlYW0tPnVyYltpXSA9IHVyYjsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTg1NCw3ICs4NjQsNyBAQAogICogSW5pdGlhbGl6ZSBidWxrIFVSQnMgYW5kIGFsbG9jYXRlIHRyYW5zZmVyIGJ1ZmZlcnMuIFRoZSBwYWNrZXQgc2l6ZSBpcwogICogZ2l2ZW4gYnkgdGhlIGVuZHBvaW50LgogICovCi1zdGF0aWMgaW50IHV2Y19pbml0X3ZpZGVvX2J1bGsoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorc3RhdGljIGludCB1dmNfaW5pdF92aWRlb19idWxrKHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCB1cmIgKnVyYjsKQEAgLTg2MywzOSArODczLDM5IEBACiAJdTMyIHNpemU7CiAKIAlwc2l6ZSA9IGxlMTZfdG9fY3B1KGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKSAmIDB4MDdmZjsKLQlzaXplID0gdmlkZW8tPnN0cmVhbWluZy0+Y3RybC5kd01heFBheWxvYWRUcmFuc2ZlclNpemU7Ci0JdmlkZW8tPmJ1bGsubWF4X3BheWxvYWRfc2l6ZSA9IHNpemU7CisJc2l6ZSA9IHN0cmVhbS0+Y3RybC5kd01heFBheWxvYWRUcmFuc2ZlclNpemU7CisJc3RyZWFtLT5idWxrLm1heF9wYXlsb2FkX3NpemUgPSBzaXplOwogCi0JbnBhY2tldHMgPSB1dmNfYWxsb2NfdXJiX2J1ZmZlcnModmlkZW8sIHNpemUsIHBzaXplLCBnZnBfZmxhZ3MpOworCW5wYWNrZXRzID0gdXZjX2FsbG9jX3VyYl9idWZmZXJzKHN0cmVhbSwgc2l6ZSwgcHNpemUsIGdmcF9mbGFncyk7CiAJaWYgKG5wYWNrZXRzID09IDApCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc2l6ZSA9IG5wYWNrZXRzICogcHNpemU7CiAKIAlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbigmZXAtPmRlc2MpKQotCQlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKHZpZGVvLT5kZXYtPnVkZXYsCisJCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUoc3RyZWFtLT5kZXYtPnVkZXYsCiAJCQkJICAgICAgIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOwogCWVsc2UKLQkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZSh2aWRlby0+ZGV2LT51ZGV2LAorCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHN0cmVhbS0+ZGV2LT51ZGV2LAogCQkJCSAgICAgICBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKIAotCWlmICh2aWRlby0+c3RyZWFtaW5nLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKQorCWlmIChzdHJlYW0tPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpCiAJCXNpemUgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IFVWQ19VUkJTOyArK2kpIHsKIAkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBnZnBfZmxhZ3MpOwogCQlpZiAodXJiID09IE5VTEwpIHsKLQkJCXV2Y191bmluaXRfdmlkZW8odmlkZW8sIDEpOworCQkJdXZjX3VuaW5pdF92aWRlbyhzdHJlYW0sIDEpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHZpZGVvLT5kZXYtPnVkZXYsIHBpcGUsCi0JCQl2aWRlby0+dXJiX2J1ZmZlcltpXSwgc2l6ZSwgdXZjX3ZpZGVvX2NvbXBsZXRlLAotCQkJdmlkZW8pOworCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHN0cmVhbS0+ZGV2LT51ZGV2LCBwaXBlLAorCQkJc3RyZWFtLT51cmJfYnVmZmVyW2ldLCBzaXplLCB1dmNfdmlkZW9fY29tcGxldGUsCisJCQlzdHJlYW0pOwogCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0JCXVyYi0+dHJhbnNmZXJfZG1hID0gdmlkZW8tPnVyYl9kbWFbaV07CisJCXVyYi0+dHJhbnNmZXJfZG1hID0gc3RyZWFtLT51cmJfZG1hW2ldOwogCi0JCXZpZGVvLT51cmJbaV0gPSB1cmI7CisJCXN0cmVhbS0+dXJiW2ldID0gdXJiOwogCX0KIAogCXJldHVybiAwOwpAQCAtOTA0LDM1ICs5MTQsMzUgQEAKIC8qCiAgKiBJbml0aWFsaXplIGlzb2Nocm9ub3VzL2J1bGsgVVJCcyBhbmQgYWxsb2NhdGUgdHJhbnNmZXIgYnVmZmVycy4KICAqLwotc3RhdGljIGludCB1dmNfaW5pdF92aWRlbyhzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sIGdmcF90IGdmcF9mbGFncykKK3N0YXRpYyBpbnQgdXZjX2luaXRfdmlkZW8oc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdmlkZW8tPnN0cmVhbWluZy0+aW50ZjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHN0cmVhbS0+aW50ZjsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOwogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAgPSBOVUxMOwotCWludCBpbnRmbnVtID0gdmlkZW8tPnN0cmVhbWluZy0+aW50Zm51bTsKKwlpbnQgaW50Zm51bSA9IHN0cmVhbS0+aW50Zm51bTsKIAl1bnNpZ25lZCBpbnQgYmFuZHdpZHRoLCBwc2l6ZSwgaTsKIAlpbnQgcmV0OwogCi0JdmlkZW8tPmxhc3RfZmlkID0gLTE7Ci0JdmlkZW8tPmJ1bGsuaGVhZGVyX3NpemUgPSAwOwotCXZpZGVvLT5idWxrLnNraXBfcGF5bG9hZCA9IDA7Ci0JdmlkZW8tPmJ1bGsucGF5bG9hZF9zaXplID0gMDsKKwlzdHJlYW0tPmxhc3RfZmlkID0gLTE7CisJc3RyZWFtLT5idWxrLmhlYWRlcl9zaXplID0gMDsKKwlzdHJlYW0tPmJ1bGsuc2tpcF9wYXlsb2FkID0gMDsKKwlzdHJlYW0tPmJ1bGsucGF5bG9hZF9zaXplID0gMDsKIAogCWlmIChpbnRmLT5udW1fYWx0c2V0dGluZyA+IDEpIHsKIAkJLyogSXNvY2hyb25vdXMgZW5kcG9pbnQsIHNlbGVjdCB0aGUgYWx0ZXJuYXRlIHNldHRpbmcuICovCi0JCWJhbmR3aWR0aCA9IHZpZGVvLT5zdHJlYW1pbmctPmN0cmwuZHdNYXhQYXlsb2FkVHJhbnNmZXJTaXplOworCQliYW5kd2lkdGggPSBzdHJlYW0tPmN0cmwuZHdNYXhQYXlsb2FkVHJhbnNmZXJTaXplOwogCiAJCWlmIChiYW5kd2lkdGggPT0gMCkgewogCQkJdXZjX3ByaW50ayhLRVJOX1dBUk5JTkcsICJkZXZpY2UgJXMgcmVxdWVzdGVkIG51bGwgIgogCQkJCSJiYW5kd2lkdGgsIGRlZmF1bHRpbmcgdG8gbG93ZXN0LlxuIiwKLQkJCQl2aWRlby0+dmRldi0+bmFtZSk7CisJCQkJc3RyZWFtLT5kZXYtPm5hbWUpOwogCQkJYmFuZHdpZHRoID0gMTsKIAkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCBpbnRmLT5udW1fYWx0c2V0dGluZzsgKytpKSB7CiAJCQlhbHRzID0gJmludGYtPmFsdHNldHRpbmdbaV07CiAJCQllcCA9IHV2Y19maW5kX2VuZHBvaW50KGFsdHMsCi0JCQkJdmlkZW8tPnN0cmVhbWluZy0+aGVhZGVyLmJFbmRwb2ludEFkZHJlc3MpOworCQkJCXN0cmVhbS0+aGVhZGVyLmJFbmRwb2ludEFkZHJlc3MpOwogCQkJaWYgKGVwID09IE5VTEwpCiAJCQkJY29udGludWU7CiAKQEAgLTk0NiwxOCArOTU2LDE5IEBACiAJCWlmIChpID49IGludGYtPm51bV9hbHRzZXR0aW5nKQogCQkJcmV0dXJuIC1FSU87CiAKLQkJaWYgKChyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh2aWRlby0+ZGV2LT51ZGV2LCBpbnRmbnVtLCBpKSkgPCAwKQorCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShzdHJlYW0tPmRldi0+dWRldiwgaW50Zm51bSwgaSk7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAotCQlyZXQgPSB1dmNfaW5pdF92aWRlb19pc29jKHZpZGVvLCBlcCwgZ2ZwX2ZsYWdzKTsKKwkJcmV0ID0gdXZjX2luaXRfdmlkZW9faXNvYyhzdHJlYW0sIGVwLCBnZnBfZmxhZ3MpOwogCX0gZWxzZSB7CiAJCS8qIEJ1bGsgZW5kcG9pbnQsIHByb2NlZWQgdG8gVVJCIGluaXRpYWxpemF0aW9uLiAqLwogCQllcCA9IHV2Y19maW5kX2VuZHBvaW50KCZpbnRmLT5hbHRzZXR0aW5nWzBdLAotCQkJCXZpZGVvLT5zdHJlYW1pbmctPmhlYWRlci5iRW5kcG9pbnRBZGRyZXNzKTsKKwkJCQlzdHJlYW0tPmhlYWRlci5iRW5kcG9pbnRBZGRyZXNzKTsKIAkJaWYgKGVwID09IE5VTEwpCiAJCQlyZXR1cm4gLUVJTzsKIAotCQlyZXQgPSB1dmNfaW5pdF92aWRlb19idWxrKHZpZGVvLCBlcCwgZ2ZwX2ZsYWdzKTsKKwkJcmV0ID0gdXZjX2luaXRfdmlkZW9fYnVsayhzdHJlYW0sIGVwLCBnZnBfZmxhZ3MpOwogCX0KIAogCWlmIChyZXQgPCAwKQpAQCAtOTY1LDEwICs5NzYsMTEgQEAKIAogCS8qIFN1Ym1pdCB0aGUgVVJCcy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgVVZDX1VSQlM7ICsraSkgewotCQlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHZpZGVvLT51cmJbaV0sIGdmcF9mbGFncykpIDwgMCkgeworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihzdHJlYW0tPnVyYltpXSwgZ2ZwX2ZsYWdzKTsKKwkJaWYgKHJldCA8IDApIHsKIAkJCXV2Y19wcmludGsoS0VSTl9FUlIsICJGYWlsZWQgdG8gc3VibWl0IFVSQiAldSAiCiAJCQkJCSIoJWQpLlxuIiwgaSwgcmV0KTsKLQkJCXV2Y191bmluaXRfdmlkZW8odmlkZW8sIDEpOworCQkJdXZjX3VuaW5pdF92aWRlbyhzdHJlYW0sIDEpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTk4NywxNCArOTk5LDE0IEBACiAgKiB2aWRlbyBidWZmZXJzIGluIGFueSB3YXkuIFdlIG1hcmsgdGhlIGRldmljZSBhcyBmcm96ZW4gdG8gbWFrZSBzdXJlIHRoZSBVUkIKICAqIGNvbXBsZXRpb24gaGFuZGxlciB3b24ndCB0cnkgdG8gY2FuY2VsIHRoZSBxdWV1ZSB3aGVuIHdlIGtpbGwgdGhlIFVSQnMuCiAgKi8KLWludCB1dmNfdmlkZW9fc3VzcGVuZChzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8pCitpbnQgdXZjX3ZpZGVvX3N1c3BlbmQoc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSkKIHsKLQlpZiAoIXV2Y19xdWV1ZV9zdHJlYW1pbmcoJnZpZGVvLT5xdWV1ZSkpCisJaWYgKCF1dmNfcXVldWVfc3RyZWFtaW5nKCZzdHJlYW0tPnF1ZXVlKSkKIAkJcmV0dXJuIDA7CiAKLQl2aWRlby0+ZnJvemVuID0gMTsKLQl1dmNfdW5pbml0X3ZpZGVvKHZpZGVvLCAwKTsKLQl1c2Jfc2V0X2ludGVyZmFjZSh2aWRlby0+ZGV2LT51ZGV2LCB2aWRlby0+c3RyZWFtaW5nLT5pbnRmbnVtLCAwKTsKKwlzdHJlYW0tPmZyb3plbiA9IDE7CisJdXZjX3VuaW5pdF92aWRlbyhzdHJlYW0sIDApOworCXVzYl9zZXRfaW50ZXJmYWNlKHN0cmVhbS0+ZGV2LT51ZGV2LCBzdHJlYW0tPmludGZudW0sIDApOwogCXJldHVybiAwOwogfQogCkBAIC0xMDA2LDIyICsxMDE4LDI0IEBACiAgKiBidWZmZXJzLCBtYWtpbmcgc3VyZSB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIGFyZSBub3RpZmllZCBvZiB0aGUgcHJvYmxlbQogICogaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuCiAgKi8KLWludCB1dmNfdmlkZW9fcmVzdW1lKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbykKK2ludCB1dmNfdmlkZW9fcmVzdW1lKHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0pCiB7CiAJaW50IHJldDsKIAotCXZpZGVvLT5mcm96ZW4gPSAwOworCXN0cmVhbS0+ZnJvemVuID0gMDsKIAotCWlmICgocmV0ID0gdXZjX2NvbW1pdF92aWRlbyh2aWRlbywgJnZpZGVvLT5zdHJlYW1pbmctPmN0cmwpKSA8IDApIHsKLQkJdXZjX3F1ZXVlX2VuYWJsZSgmdmlkZW8tPnF1ZXVlLCAwKTsKKwlyZXQgPSB1dmNfY29tbWl0X3ZpZGVvKHN0cmVhbSwgJnN0cmVhbS0+Y3RybCk7CisJaWYgKHJldCA8IDApIHsKKwkJdXZjX3F1ZXVlX2VuYWJsZSgmc3RyZWFtLT5xdWV1ZSwgMCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKCF1dmNfcXVldWVfc3RyZWFtaW5nKCZ2aWRlby0+cXVldWUpKQorCWlmICghdXZjX3F1ZXVlX3N0cmVhbWluZygmc3RyZWFtLT5xdWV1ZSkpCiAJCXJldHVybiAwOwogCi0JaWYgKChyZXQgPSB1dmNfaW5pdF92aWRlbyh2aWRlbywgR0ZQX05PSU8pKSA8IDApCi0JCXV2Y19xdWV1ZV9lbmFibGUoJnZpZGVvLT5xdWV1ZSwgMCk7CisJcmV0ID0gdXZjX2luaXRfdmlkZW8oc3RyZWFtLCBHRlBfTk9JTyk7CisJaWYgKHJldCA8IDApCisJCXV2Y19xdWV1ZV9lbmFibGUoJnN0cmVhbS0+cXVldWUsIDApOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwNDAsNDcgKzEwNTQsNTMgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIGRldmljZSB3aXRoIFY0TC4KICAqLwotaW50IHV2Y192aWRlb19pbml0KHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbykKK2ludCB1dmNfdmlkZW9faW5pdChzdHJ1Y3QgdXZjX3N0cmVhbWluZyAqc3RyZWFtKQogewotCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgKnByb2JlID0gJnZpZGVvLT5zdHJlYW1pbmctPmN0cmw7CisJc3RydWN0IHV2Y19zdHJlYW1pbmdfY29udHJvbCAqcHJvYmUgPSAmc3RyZWFtLT5jdHJsOwogCXN0cnVjdCB1dmNfZm9ybWF0ICpmb3JtYXQgPSBOVUxMOwogCXN0cnVjdCB1dmNfZnJhbWUgKmZyYW1lID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmV0OwogCi0JaWYgKHZpZGVvLT5zdHJlYW1pbmctPm5mb3JtYXRzID09IDApIHsKKwlpZiAoc3RyZWFtLT5uZm9ybWF0cyA9PSAwKSB7CiAJCXV2Y19wcmludGsoS0VSTl9JTkZPLCAiTm8gc3VwcG9ydGVkIHZpZGVvIGZvcm1hdHMgZm91bmQuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJYXRvbWljX3NldCgmc3RyZWFtLT5hY3RpdmUsIDApOworCisJLyogSW5pdGlhbGl6ZSB0aGUgdmlkZW8gYnVmZmVycyBxdWV1ZS4gKi8KKwl1dmNfcXVldWVfaW5pdCgmc3RyZWFtLT5xdWV1ZSwgc3RyZWFtLT50eXBlKTsKKwogCS8qIEFsdGVybmF0ZSBzZXR0aW5nIDAgc2hvdWxkIGJlIHRoZSBkZWZhdWx0LCB5ZXQgdGhlIFhCb3ggTGl2ZSBWaXNpb24KIAkgKiBDYW0gKGFuZCBwb3NzaWJseSBvdGhlciBkZXZpY2VzKSBjcmFzaCBvciBvdGhlcndpc2UgbWlzYmVoYXZlIGlmCiAJICogdGhleSBkb24ndCByZWNlaXZlIGEgU0VUX0lOVEVSRkFDRSByZXF1ZXN0IGJlZm9yZSBhbnkgb3RoZXIgdmlkZW8KIAkgKiBjb250cm9sIHJlcXVlc3QuCiAJICovCi0JdXNiX3NldF9pbnRlcmZhY2UodmlkZW8tPmRldi0+dWRldiwgdmlkZW8tPnN0cmVhbWluZy0+aW50Zm51bSwgMCk7CisJdXNiX3NldF9pbnRlcmZhY2Uoc3RyZWFtLT5kZXYtPnVkZXYsIHN0cmVhbS0+aW50Zm51bSwgMCk7CiAKIAkvKiBTZXQgdGhlIHN0cmVhbWluZyBwcm9iZSBjb250cm9sIHdpdGggZGVmYXVsdCBzdHJlYW1pbmcgcGFyYW1ldGVycwogCSAqIHJldHJpZXZlZCBmcm9tIHRoZSBkZXZpY2UuIFdlYmNhbXMgdGhhdCBkb24ndCBzdXBvcnQgR0VUX0RFRgogCSAqIHJlcXVlc3RzIG9uIHRoZSBwcm9iZSBjb250cm9sIHdpbGwganVzdCBrZWVwIHRoZWlyIGN1cnJlbnQgc3RyZWFtaW5nCiAJICogcGFyYW1ldGVycy4KIAkgKi8KLQlpZiAodXZjX2dldF92aWRlb19jdHJsKHZpZGVvLCBwcm9iZSwgMSwgR0VUX0RFRikgPT0gMCkKLQkJdXZjX3NldF92aWRlb19jdHJsKHZpZGVvLCBwcm9iZSwgMSk7CisJaWYgKHV2Y19nZXRfdmlkZW9fY3RybChzdHJlYW0sIHByb2JlLCAxLCBVVkNfR0VUX0RFRikgPT0gMCkKKwkJdXZjX3NldF92aWRlb19jdHJsKHN0cmVhbSwgcHJvYmUsIDEpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgc3RyZWFtaW5nIHBhcmFtZXRlcnMgd2l0aCB0aGUgcHJvYmUgY29udHJvbCBjdXJyZW50CiAJICogdmFsdWUuIFRoaXMgbWFrZXMgc3VyZSBTRVRfQ1VSIHJlcXVlc3RzIG9uIHRoZSBzdHJlYW1pbmcgY29tbWl0CiAJICogY29udHJvbCB3aWxsIGFsd2F5cyB1c2UgdmFsdWVzIHJldHJpZXZlZCBmcm9tIGEgc3VjY2Vzc2Z1bCBHRVRfQ1VSCiAJICogcmVxdWVzdCBvbiB0aGUgcHJvYmUgY29udHJvbCwgYXMgcmVxdWlyZWQgYnkgdGhlIFVWQyBzcGVjaWZpY2F0aW9uLgogCSAqLwotCWlmICgocmV0ID0gdXZjX2dldF92aWRlb19jdHJsKHZpZGVvLCBwcm9iZSwgMSwgR0VUX0NVUikpIDwgMCkKKwlyZXQgPSB1dmNfZ2V0X3ZpZGVvX2N0cmwoc3RyZWFtLCBwcm9iZSwgMSwgVVZDX0dFVF9DVVIpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogQ2hlY2sgaWYgdGhlIGRlZmF1bHQgZm9ybWF0IGRlc2NyaXB0b3IgZXhpc3RzLiBVc2UgdGhlIGZpcnN0CiAJICogYXZhaWxhYmxlIGZvcm1hdCBvdGhlcndpc2UuCiAJICovCi0JZm9yIChpID0gdmlkZW8tPnN0cmVhbWluZy0+bmZvcm1hdHM7IGkgPiAwOyAtLWkpIHsKLQkJZm9ybWF0ID0gJnZpZGVvLT5zdHJlYW1pbmctPmZvcm1hdFtpLTFdOworCWZvciAoaSA9IHN0cmVhbS0+bmZvcm1hdHM7IGkgPiAwOyAtLWkpIHsKKwkJZm9ybWF0ID0gJnN0cmVhbS0+Zm9ybWF0W2ktMV07CiAJCWlmIChmb3JtYXQtPmluZGV4ID09IHByb2JlLT5iRm9ybWF0SW5kZXgpCiAJCQlicmVhazsKIAl9CkBAIC0xMTA1LDIxICsxMTI1LDIwIEBACiAJcHJvYmUtPmJGb3JtYXRJbmRleCA9IGZvcm1hdC0+aW5kZXg7CiAJcHJvYmUtPmJGcmFtZUluZGV4ID0gZnJhbWUtPmJGcmFtZUluZGV4OwogCi0JdmlkZW8tPnN0cmVhbWluZy0+Y3VyX2Zvcm1hdCA9IGZvcm1hdDsKLQl2aWRlby0+c3RyZWFtaW5nLT5jdXJfZnJhbWUgPSBmcmFtZTsKLQlhdG9taWNfc2V0KCZ2aWRlby0+YWN0aXZlLCAwKTsKKwlzdHJlYW0tPmN1cl9mb3JtYXQgPSBmb3JtYXQ7CisJc3RyZWFtLT5jdXJfZnJhbWUgPSBmcmFtZTsKIAogCS8qIFNlbGVjdCB0aGUgdmlkZW8gZGVjb2RpbmcgZnVuY3Rpb24gKi8KLQlpZiAodmlkZW8tPnN0cmVhbWluZy0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJaWYgKHZpZGVvLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19CVUlMVElOX0lTSUdIVCkKLQkJCXZpZGVvLT5kZWNvZGUgPSB1dmNfdmlkZW9fZGVjb2RlX2lzaWdodDsKLQkJZWxzZSBpZiAodmlkZW8tPnN0cmVhbWluZy0+aW50Zi0+bnVtX2FsdHNldHRpbmcgPiAxKQotCQkJdmlkZW8tPmRlY29kZSA9IHV2Y192aWRlb19kZWNvZGVfaXNvYzsKKwlpZiAoc3RyZWFtLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQlpZiAoc3RyZWFtLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19CVUlMVElOX0lTSUdIVCkKKwkJCXN0cmVhbS0+ZGVjb2RlID0gdXZjX3ZpZGVvX2RlY29kZV9pc2lnaHQ7CisJCWVsc2UgaWYgKHN0cmVhbS0+aW50Zi0+bnVtX2FsdHNldHRpbmcgPiAxKQorCQkJc3RyZWFtLT5kZWNvZGUgPSB1dmNfdmlkZW9fZGVjb2RlX2lzb2M7CiAJCWVsc2UKLQkJCXZpZGVvLT5kZWNvZGUgPSB1dmNfdmlkZW9fZGVjb2RlX2J1bGs7CisJCQlzdHJlYW0tPmRlY29kZSA9IHV2Y192aWRlb19kZWNvZGVfYnVsazsKIAl9IGVsc2UgewotCQlpZiAodmlkZW8tPnN0cmVhbWluZy0+aW50Zi0+bnVtX2FsdHNldHRpbmcgPT0gMSkKLQkJCXZpZGVvLT5kZWNvZGUgPSB1dmNfdmlkZW9fZW5jb2RlX2J1bGs7CisJCWlmIChzdHJlYW0tPmludGYtPm51bV9hbHRzZXR0aW5nID09IDEpCisJCQlzdHJlYW0tPmRlY29kZSA9IHV2Y192aWRlb19lbmNvZGVfYnVsazsKIAkJZWxzZSB7CiAJCQl1dmNfcHJpbnRrKEtFUk5fSU5GTywgIklzb2Nocm9ub3VzIGVuZHBvaW50cyBhcmUgbm90ICIKIAkJCQkic3VwcG9ydGVkIGZvciB2aWRlbyBvdXRwdXQgZGV2aWNlcy5cbiIpOwpAQCAtMTEzMywzMSArMTE1MiwzMiBAQAogLyoKICAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSB2aWRlbyBzdHJlYW0uCiAgKi8KLWludCB1dmNfdmlkZW9fZW5hYmxlKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywgaW50IGVuYWJsZSkKK2ludCB1dmNfdmlkZW9fZW5hYmxlKHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sIGludCBlbmFibGUpCiB7CiAJaW50IHJldDsKIAogCWlmICghZW5hYmxlKSB7Ci0JCXV2Y191bmluaXRfdmlkZW8odmlkZW8sIDEpOwotCQl1c2Jfc2V0X2ludGVyZmFjZSh2aWRlby0+ZGV2LT51ZGV2LAotCQkJdmlkZW8tPnN0cmVhbWluZy0+aW50Zm51bSwgMCk7Ci0JCXV2Y19xdWV1ZV9lbmFibGUoJnZpZGVvLT5xdWV1ZSwgMCk7CisJCXV2Y191bmluaXRfdmlkZW8oc3RyZWFtLCAxKTsKKwkJdXNiX3NldF9pbnRlcmZhY2Uoc3RyZWFtLT5kZXYtPnVkZXYsIHN0cmVhbS0+aW50Zm51bSwgMCk7CisJCXV2Y19xdWV1ZV9lbmFibGUoJnN0cmVhbS0+cXVldWUsIDApOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoKHZpZGVvLT5zdHJlYW1pbmctPmN1cl9mb3JtYXQtPmZsYWdzICYgVVZDX0ZNVF9GTEFHX0NPTVBSRVNTRUQpIHx8CisJaWYgKChzdHJlYW0tPmN1cl9mb3JtYXQtPmZsYWdzICYgVVZDX0ZNVF9GTEFHX0NPTVBSRVNTRUQpIHx8CiAJICAgIHV2Y19ub19kcm9wX3BhcmFtKQotCQl2aWRlby0+cXVldWUuZmxhZ3MgJj0gflVWQ19RVUVVRV9EUk9QX0lOQ09NUExFVEU7CisJCXN0cmVhbS0+cXVldWUuZmxhZ3MgJj0gflVWQ19RVUVVRV9EUk9QX0lOQ09NUExFVEU7CiAJZWxzZQotCQl2aWRlby0+cXVldWUuZmxhZ3MgfD0gVVZDX1FVRVVFX0RST1BfSU5DT01QTEVURTsKKwkJc3RyZWFtLT5xdWV1ZS5mbGFncyB8PSBVVkNfUVVFVUVfRFJPUF9JTkNPTVBMRVRFOwogCi0JaWYgKChyZXQgPSB1dmNfcXVldWVfZW5hYmxlKCZ2aWRlby0+cXVldWUsIDEpKSA8IDApCisJcmV0ID0gdXZjX3F1ZXVlX2VuYWJsZSgmc3RyZWFtLT5xdWV1ZSwgMSk7CisJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKIAkvKiBDb21taXQgdGhlIHN0cmVhbWluZyBwYXJhbWV0ZXJzLiAqLwotCWlmICgocmV0ID0gdXZjX2NvbW1pdF92aWRlbyh2aWRlbywgJnZpZGVvLT5zdHJlYW1pbmctPmN0cmwpKSA8IDApCisJcmV0ID0gdXZjX2NvbW1pdF92aWRlbyhzdHJlYW0sICZzdHJlYW0tPmN0cmwpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIHV2Y19pbml0X3ZpZGVvKHZpZGVvLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm4gdXZjX2luaXRfdmlkZW8oc3RyZWFtLCBHRlBfS0VSTkVMKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKaW5kZXggM2M3OGQzYy4uZTc5NThhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCkBAIC02NywxNTUgKzY3LDEyIEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi92aWRlby5oPgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVVZDIGNvbnN0YW50cwogICovCiAKLSNkZWZpbmUgU0NfVU5ERUZJTkVECQkJMHgwMAotI2RlZmluZSBTQ19WSURFT0NPTlRST0wJCQkweDAxCi0jZGVmaW5lIFNDX1ZJREVPU1RSRUFNSU5HCQkweDAyCi0jZGVmaW5lIFNDX1ZJREVPX0lOVEVSRkFDRV9DT0xMRUNUSU9OCTB4MDMKLQotI2RlZmluZSBQQ19QUk9UT0NPTF9VTkRFRklORUQJCTB4MDAKLQotI2RlZmluZSBDU19VTkRFRklORUQJCQkweDIwCi0jZGVmaW5lIENTX0RFVklDRQkJCTB4MjEKLSNkZWZpbmUgQ1NfQ09ORklHVVJBVElPTgkJMHgyMgotI2RlZmluZSBDU19TVFJJTkcJCQkweDIzCi0jZGVmaW5lIENTX0lOVEVSRkFDRQkJCTB4MjQKLSNkZWZpbmUgQ1NfRU5EUE9JTlQJCQkweDI1Ci0KLS8qIFZpZGVvQ29udHJvbCBjbGFzcyBzcGVjaWZpYyBpbnRlcmZhY2UgZGVzY3JpcHRvciAqLwotI2RlZmluZSBWQ19ERVNDUklQVE9SX1VOREVGSU5FRAkJMHgwMAotI2RlZmluZSBWQ19IRUFERVIJCQkweDAxCi0jZGVmaW5lIFZDX0lOUFVUX1RFUk1JTkFMCQkweDAyCi0jZGVmaW5lIFZDX09VVFBVVF9URVJNSU5BTAkJMHgwMwotI2RlZmluZSBWQ19TRUxFQ1RPUl9VTklUCQkweDA0Ci0jZGVmaW5lIFZDX1BST0NFU1NJTkdfVU5JVAkJMHgwNQotI2RlZmluZSBWQ19FWFRFTlNJT05fVU5JVAkJMHgwNgotCi0vKiBWaWRlb1N0cmVhbWluZyBjbGFzcyBzcGVjaWZpYyBpbnRlcmZhY2UgZGVzY3JpcHRvciAqLwotI2RlZmluZSBWU19VTkRFRklORUQJCQkweDAwCi0jZGVmaW5lIFZTX0lOUFVUX0hFQURFUgkJCTB4MDEKLSNkZWZpbmUgVlNfT1VUUFVUX0hFQURFUgkJMHgwMgotI2RlZmluZSBWU19TVElMTF9JTUFHRV9GUkFNRQkJMHgwMwotI2RlZmluZSBWU19GT1JNQVRfVU5DT01QUkVTU0VECQkweDA0Ci0jZGVmaW5lIFZTX0ZSQU1FX1VOQ09NUFJFU1NFRAkJMHgwNQotI2RlZmluZSBWU19GT1JNQVRfTUpQRUcJCQkweDA2Ci0jZGVmaW5lIFZTX0ZSQU1FX01KUEVHCQkJMHgwNwotI2RlZmluZSBWU19GT1JNQVRfTVBFRzJUUwkJMHgwYQotI2RlZmluZSBWU19GT1JNQVRfRFYJCQkweDBjCi0jZGVmaW5lIFZTX0NPTE9SRk9STUFUCQkJMHgwZAotI2RlZmluZSBWU19GT1JNQVRfRlJBTUVfQkFTRUQJCTB4MTAKLSNkZWZpbmUgVlNfRlJBTUVfRlJBTUVfQkFTRUQJCTB4MTEKLSNkZWZpbmUgVlNfRk9STUFUX1NUUkVBTV9CQVNFRAkJMHgxMgotCi0vKiBFbmRwb2ludCB0eXBlICovCi0jZGVmaW5lIEVQX1VOREVGSU5FRAkJCTB4MDAKLSNkZWZpbmUgRVBfR0VORVJBTAkJCTB4MDEKLSNkZWZpbmUgRVBfRU5EUE9JTlQJCQkweDAyCi0jZGVmaW5lIEVQX0lOVEVSUlVQVAkJCTB4MDMKLQotLyogUmVxdWVzdCBjb2RlcyAqLwotI2RlZmluZSBSQ19VTkRFRklORUQJCQkweDAwCi0jZGVmaW5lIFNFVF9DVVIJCQkJMHgwMQotI2RlZmluZSBHRVRfQ1VSCQkJCTB4ODEKLSNkZWZpbmUgR0VUX01JTgkJCQkweDgyCi0jZGVmaW5lIEdFVF9NQVgJCQkJMHg4MwotI2RlZmluZSBHRVRfUkVTCQkJCTB4ODQKLSNkZWZpbmUgR0VUX0xFTgkJCQkweDg1Ci0jZGVmaW5lIEdFVF9JTkZPCQkJMHg4NgotI2RlZmluZSBHRVRfREVGCQkJCTB4ODcKLQotLyogVmlkZW9Db250cm9sIGludGVyZmFjZSBjb250cm9scyAqLwotI2RlZmluZSBWQ19DT05UUk9MX1VOREVGSU5FRAkJMHgwMAotI2RlZmluZSBWQ19WSURFT19QT1dFUl9NT0RFX0NPTlRST0wJMHgwMQotI2RlZmluZSBWQ19SRVFVRVNUX0VSUk9SX0NPREVfQ09OVFJPTAkweDAyCi0KLS8qIFRlcm1pbmFsIGNvbnRyb2xzICovCi0jZGVmaW5lIFRFX0NPTlRST0xfVU5ERUZJTkVECQkweDAwCi0KLS8qIFNlbGVjdG9yIFVuaXQgY29udHJvbHMgKi8KLSNkZWZpbmUgU1VfQ09OVFJPTF9VTkRFRklORUQJCTB4MDAKLSNkZWZpbmUgU1VfSU5QVVRfU0VMRUNUX0NPTlRST0wJCTB4MDEKLQotLyogQ2FtZXJhIFRlcm1pbmFsIGNvbnRyb2xzICovCi0jZGVmaW5lIENUX0NPTlRST0xfVU5ERUZJTkVECQkJCTB4MDAKLSNkZWZpbmUgQ1RfU0NBTk5JTkdfTU9ERV9DT05UUk9MCQkJMHgwMQotI2RlZmluZSBDVF9BRV9NT0RFX0NPTlRST0wJCQkJMHgwMgotI2RlZmluZSBDVF9BRV9QUklPUklUWV9DT05UUk9MCQkJCTB4MDMKLSNkZWZpbmUgQ1RfRVhQT1NVUkVfVElNRV9BQlNPTFVURV9DT05UUk9MCQkweDA0Ci0jZGVmaW5lIENUX0VYUE9TVVJFX1RJTUVfUkVMQVRJVkVfQ09OVFJPTAkJMHgwNQotI2RlZmluZSBDVF9GT0NVU19BQlNPTFVURV9DT05UUk9MCQkJMHgwNgotI2RlZmluZSBDVF9GT0NVU19SRUxBVElWRV9DT05UUk9MCQkJMHgwNwotI2RlZmluZSBDVF9GT0NVU19BVVRPX0NPTlRST0wJCQkJMHgwOAotI2RlZmluZSBDVF9JUklTX0FCU09MVVRFX0NPTlRST0wJCQkweDA5Ci0jZGVmaW5lIENUX0lSSVNfUkVMQVRJVkVfQ09OVFJPTAkJCTB4MGEKLSNkZWZpbmUgQ1RfWk9PTV9BQlNPTFVURV9DT05UUk9MCQkJMHgwYgotI2RlZmluZSBDVF9aT09NX1JFTEFUSVZFX0NPTlRST0wJCQkweDBjCi0jZGVmaW5lIENUX1BBTlRJTFRfQUJTT0xVVEVfQ09OVFJPTAkJCTB4MGQKLSNkZWZpbmUgQ1RfUEFOVElMVF9SRUxBVElWRV9DT05UUk9MCQkJMHgwZQotI2RlZmluZSBDVF9ST0xMX0FCU09MVVRFX0NPTlRST0wJCQkweDBmCi0jZGVmaW5lIENUX1JPTExfUkVMQVRJVkVfQ09OVFJPTAkJCTB4MTAKLSNkZWZpbmUgQ1RfUFJJVkFDWV9DT05UUk9MCQkJCTB4MTEKLQotLyogUHJvY2Vzc2luZyBVbml0IGNvbnRyb2xzICovCi0jZGVmaW5lIFBVX0NPTlRST0xfVU5ERUZJTkVECQkJCTB4MDAKLSNkZWZpbmUgUFVfQkFDS0xJR0hUX0NPTVBFTlNBVElPTl9DT05UUk9MCQkweDAxCi0jZGVmaW5lIFBVX0JSSUdIVE5FU1NfQ09OVFJPTAkJCQkweDAyCi0jZGVmaW5lIFBVX0NPTlRSQVNUX0NPTlRST0wJCQkJMHgwMwotI2RlZmluZSBQVV9HQUlOX0NPTlRST0wJCQkJCTB4MDQKLSNkZWZpbmUgUFVfUE9XRVJfTElORV9GUkVRVUVOQ1lfQ09OVFJPTAkJCTB4MDUKLSNkZWZpbmUgUFVfSFVFX0NPTlRST0wJCQkJCTB4MDYKLSNkZWZpbmUgUFVfU0FUVVJBVElPTl9DT05UUk9MCQkJCTB4MDcKLSNkZWZpbmUgUFVfU0hBUlBORVNTX0NPTlRST0wJCQkJMHgwOAotI2RlZmluZSBQVV9HQU1NQV9DT05UUk9MCQkJCTB4MDkKLSNkZWZpbmUgUFVfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRV9DT05UUk9MCQkweDBhCi0jZGVmaW5lIFBVX1dISVRFX0JBTEFOQ0VfVEVNUEVSQVRVUkVfQVVUT19DT05UUk9MCTB4MGIKLSNkZWZpbmUgUFVfV0hJVEVfQkFMQU5DRV9DT01QT05FTlRfQ09OVFJPTAkJMHgwYwotI2RlZmluZSBQVV9XSElURV9CQUxBTkNFX0NPTVBPTkVOVF9BVVRPX0NPTlRST0wJCTB4MGQKLSNkZWZpbmUgUFVfRElHSVRBTF9NVUxUSVBMSUVSX0NPTlRST0wJCQkweDBlCi0jZGVmaW5lIFBVX0RJR0lUQUxfTVVMVElQTElFUl9MSU1JVF9DT05UUk9MCQkweDBmCi0jZGVmaW5lIFBVX0hVRV9BVVRPX0NPTlRST0wJCQkJMHgxMAotI2RlZmluZSBQVV9BTkFMT0dfVklERU9fU1RBTkRBUkRfQ09OVFJPTAkJMHgxMQotI2RlZmluZSBQVV9BTkFMT0dfTE9DS19TVEFUVVNfQ09OVFJPTAkJCTB4MTIKLQotI2RlZmluZSBMWFVfTU9UT1JfUEFOVElMVF9SRUxBVElWRV9DT05UUk9MCQkweDAxCi0jZGVmaW5lIExYVV9NT1RPUl9QQU5USUxUX1JFU0VUX0NPTlRST0wJCQkweDAyCi0jZGVmaW5lIExYVV9NT1RPUl9GT0NVU19NT1RPUl9DT05UUk9MCQkJMHgwMwotCi0vKiBWaWRlb1N0cmVhbWluZyBpbnRlcmZhY2UgY29udHJvbHMgKi8KLSNkZWZpbmUgVlNfQ09OVFJPTF9VTkRFRklORUQJCTB4MDAKLSNkZWZpbmUgVlNfUFJPQkVfQ09OVFJPTAkJMHgwMQotI2RlZmluZSBWU19DT01NSVRfQ09OVFJPTAkJMHgwMgotI2RlZmluZSBWU19TVElMTF9QUk9CRV9DT05UUk9MCQkweDAzCi0jZGVmaW5lIFZTX1NUSUxMX0NPTU1JVF9DT05UUk9MCQkweDA0Ci0jZGVmaW5lIFZTX1NUSUxMX0lNQUdFX1RSSUdHRVJfQ09OVFJPTAkweDA1Ci0jZGVmaW5lIFZTX1NUUkVBTV9FUlJPUl9DT0RFX0NPTlRST0wJMHgwNgotI2RlZmluZSBWU19HRU5FUkFURV9LRVlfRlJBTUVfQ09OVFJPTAkweDA3Ci0jZGVmaW5lIFZTX1VQREFURV9GUkFNRV9TRUdNRU5UX0NPTlRST0wJMHgwOAotI2RlZmluZSBWU19TWU5DX0RFTEFZX0NPTlRST0wJCTB4MDkKLQotI2RlZmluZSBUVF9WRU5ET1JfU1BFQ0lGSUMJCTB4MDEwMAotI2RlZmluZSBUVF9TVFJFQU1JTkcJCQkweDAxMDEKLQotLyogSW5wdXQgVGVybWluYWwgdHlwZXMgKi8KLSNkZWZpbmUgSVRUX1ZFTkRPUl9TUEVDSUZJQwkJMHgwMjAwCi0jZGVmaW5lIElUVF9DQU1FUkEJCQkweDAyMDEKLSNkZWZpbmUgSVRUX01FRElBX1RSQU5TUE9SVF9JTlBVVAkweDAyMDIKLQotLyogT3V0cHV0IFRlcm1pbmFsIHR5cGVzICovCi0jZGVmaW5lIE9UVF9WRU5ET1JfU1BFQ0lGSUMJCTB4MDMwMAotI2RlZmluZSBPVFRfRElTUExBWQkJCTB4MDMwMQotI2RlZmluZSBPVFRfTUVESUFfVFJBTlNQT1JUX09VVFBVVAkweDAzMDIKLQotLyogRXh0ZXJuYWwgVGVybWluYWwgdHlwZXMgKi8KLSNkZWZpbmUgRVhURVJOQUxfVkVORE9SX1NQRUNJRklDCTB4MDQwMAotI2RlZmluZSBDT01QT1NJVEVfQ09OTkVDVE9SCQkweDA0MDEKLSNkZWZpbmUgU1ZJREVPX0NPTk5FQ1RPUgkJMHgwNDAyCi0jZGVmaW5lIENPTVBPTkVOVF9DT05ORUNUT1IJCTB4MDQwMwotCiAjZGVmaW5lIFVWQ19URVJNX0lOUFVUCQkJMHgwMDAwCiAjZGVmaW5lIFVWQ19URVJNX09VVFBVVAkJCTB4ODAwMAogCkBAIC0yMjMsMTIgKzgwLDEyIEBACiAjZGVmaW5lIFVWQ19FTlRJVFlfSVNfVU5JVChlbnRpdHkpCSgoKGVudGl0eSktPnR5cGUgJiAweGZmMDApID09IDApCiAjZGVmaW5lIFVWQ19FTlRJVFlfSVNfVEVSTShlbnRpdHkpCSgoKGVudGl0eSktPnR5cGUgJiAweGZmMDApICE9IDApCiAjZGVmaW5lIFVWQ19FTlRJVFlfSVNfSVRFUk0oZW50aXR5KSBcCi0JKCgoZW50aXR5KS0+dHlwZSAmIDB4ODAwMCkgPT0gVVZDX1RFUk1fSU5QVVQpCisJKFVWQ19FTlRJVFlfSVNfVEVSTShlbnRpdHkpICYmIFwKKwkoKGVudGl0eSktPnR5cGUgJiAweDgwMDApID09IFVWQ19URVJNX0lOUFVUKQogI2RlZmluZSBVVkNfRU5USVRZX0lTX09URVJNKGVudGl0eSkgXAotCSgoKGVudGl0eSktPnR5cGUgJiAweDgwMDApID09IFVWQ19URVJNX09VVFBVVCkKKwkoVVZDX0VOVElUWV9JU19URVJNKGVudGl0eSkgJiYgXAorCSgoZW50aXR5KS0+dHlwZSAmIDB4ODAwMCkgPT0gVVZDX1RFUk1fT1VUUFVUKQogCi0jZGVmaW5lIFVWQ19TVEFUVVNfVFlQRV9DT05UUk9MCQkxCi0jZGVmaW5lIFVWQ19TVEFUVVNfVFlQRV9TVFJFQU1JTkcJMgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEdVSURzCkBAIC0yNDksMTkgKzEwNiw2IEBACiAJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIFwKIAkgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMn0KIAotI2RlZmluZSBVVkNfR1VJRF9MT0dJVEVDSF9ERVZfSU5GTyBcCi0JezB4ODIsIDB4MDYsIDB4NjEsIDB4NjMsIDB4NzAsIDB4NTAsIDB4YWIsIDB4NDksIFwKLQkgMHhiOCwgMHhjYywgMHhiMywgMHg4NSwgMHg1ZSwgMHg4ZCwgMHgyMiwgMHgxZX0KLSNkZWZpbmUgVVZDX0dVSURfTE9HSVRFQ0hfVVNFUl9IVyBcCi0JezB4ODIsIDB4MDYsIDB4NjEsIDB4NjMsIDB4NzAsIDB4NTAsIDB4YWIsIDB4NDksIFwKLQkgMHhiOCwgMHhjYywgMHhiMywgMHg4NSwgMHg1ZSwgMHg4ZCwgMHgyMiwgMHgxZn0KLSNkZWZpbmUgVVZDX0dVSURfTE9HSVRFQ0hfVklERU8gXAotCXsweDgyLCAweDA2LCAweDYxLCAweDYzLCAweDcwLCAweDUwLCAweGFiLCAweDQ5LCBcCi0JIDB4YjgsIDB4Y2MsIDB4YjMsIDB4ODUsIDB4NWUsIDB4OGQsIDB4MjIsIDB4NTB9Ci0jZGVmaW5lIFVWQ19HVUlEX0xPR0lURUNIX01PVE9SIFwKLQl7MHg4MiwgMHgwNiwgMHg2MSwgMHg2MywgMHg3MCwgMHg1MCwgMHhhYiwgMHg0OSwgXAotCSAweGI4LCAweGNjLCAweGIzLCAweDg1LCAweDVlLCAweDhkLCAweDIyLCAweDU2fQotCiAjZGVmaW5lIFVWQ19HVUlEX0ZPUk1BVF9NSlBFRyBcCiAJeyAnTScsICAnSicsICAnUCcsICAnRycsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIFwKIAkgMHg4MCwgMHgwMCwgMHgwMCwgMHhhYSwgMHgwMCwgMHgzOCwgMHg5YiwgMHg3MX0KQEAgLTMxNCw2ICsxNTgsNyBAQAogI2RlZmluZSBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRAkJMHgwMDAwMDAxMAogI2RlZmluZSBVVkNfUVVJUktfSUdOT1JFX1NFTEVDVE9SX1VOSVQJMHgwMDAwMDAyMAogI2RlZmluZSBVVkNfUVVJUktfRklYX0JBTkRXSURUSAkJMHgwMDAwMDA4MAorI2RlZmluZSBVVkNfUVVJUktfUFJPQkVfREVGCQkweDAwMDAwMTAwCiAKIC8qIEZvcm1hdCBmbGFncyAqLwogI2RlZmluZSBVVkNfRk1UX0ZMQUdfQ09NUFJFU1NFRAkJMHgwMDAwMDAwMQpAQCAtNTE4LDI2ICszNjMsNiBAQAogCV9fdTggYlRyaWdnZXJVc2FnZTsKIH07CiAKLXN0cnVjdCB1dmNfc3RyZWFtaW5nIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0KLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKLQlpbnQgaW50Zm51bTsKLQlfX3UxNiBtYXhwc2l6ZTsKLQotCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2hlYWRlciBoZWFkZXI7Ci0JZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7Ci0KLQl1bnNpZ25lZCBpbnQgbmZvcm1hdHM7Ci0Jc3RydWN0IHV2Y19mb3JtYXQgKmZvcm1hdDsKLQotCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgY3RybDsKLQlzdHJ1Y3QgdXZjX2Zvcm1hdCAqY3VyX2Zvcm1hdDsKLQlzdHJ1Y3QgdXZjX2ZyYW1lICpjdXJfZnJhbWU7Ci0KLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci19OwotCiBlbnVtIHV2Y19idWZmZXJfc3RhdGUgewogCVVWQ19CVUZfU1RBVEVfSURMRQk9IDAsCiAJVVZDX0JVRl9TVEFURV9RVUVVRUQJPSAxLApAQCAtNTc5LDI2ICs0MDQsNDUgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGlycXF1ZXVlOwogfTsKIAotc3RydWN0IHV2Y192aWRlb19kZXZpY2Ugeworc3RydWN0IHV2Y192aWRlb19jaGFpbiB7CiAJc3RydWN0IHV2Y19kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwotCWF0b21pY190IGFjdGl2ZTsKLQl1bnNpZ25lZCBpbnQgZnJvemVuIDogMTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGl0ZXJtczsJCS8qIElucHV0IHRlcm1pbmFscyAqLwotCXN0cnVjdCB1dmNfZW50aXR5ICpvdGVybTsJCS8qIE91dHB1dCB0ZXJtaW5hbCAqLwotCXN0cnVjdCB1dmNfZW50aXR5ICpzdGVybTsJCS8qIFVTQiBzdHJlYW1pbmcgdGVybWluYWwgKi8KLQlzdHJ1Y3QgdXZjX2VudGl0eSAqcHJvY2Vzc2luZzsKLQlzdHJ1Y3QgdXZjX2VudGl0eSAqc2VsZWN0b3I7Ci0Jc3RydWN0IGxpc3RfaGVhZCBleHRlbnNpb25zOworCXN0cnVjdCBsaXN0X2hlYWQgb3Rlcm1zOwkJLyogT3V0cHV0IHRlcm1pbmFscyAqLworCXN0cnVjdCB1dmNfZW50aXR5ICpwcm9jZXNzaW5nOwkJLyogUHJvY2Vzc2luZyB1bml0ICovCisJc3RydWN0IHV2Y19lbnRpdHkgKnNlbGVjdG9yOwkJLyogU2VsZWN0b3IgdW5pdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZXh0ZW5zaW9uczsJCS8qIEV4dGVuc2lvbiB1bml0cyAqLworCiAJc3RydWN0IG11dGV4IGN0cmxfbXV0ZXg7Cit9OwogCitzdHJ1Y3QgdXZjX3N0cmVhbWluZyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCB1dmNfZGV2aWNlICpkZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKKwlzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbjsKKwlhdG9taWNfdCBhY3RpdmU7CisKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlpbnQgaW50Zm51bTsKKwlfX3UxNiBtYXhwc2l6ZTsKKworCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2hlYWRlciBoZWFkZXI7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisKKwl1bnNpZ25lZCBpbnQgbmZvcm1hdHM7CisJc3RydWN0IHV2Y19mb3JtYXQgKmZvcm1hdDsKKworCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgY3RybDsKKwlzdHJ1Y3QgdXZjX2Zvcm1hdCAqY3VyX2Zvcm1hdDsKKwlzdHJ1Y3QgdXZjX2ZyYW1lICpjdXJfZnJhbWU7CisKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisKKwl1bnNpZ25lZCBpbnQgZnJvemVuIDogMTsKIAlzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlIHF1ZXVlOwotCi0JLyogVmlkZW8gc3RyZWFtaW5nIG9iamVjdCwgbXVzdCBhbHdheXMgYmUgbm9uLU5VTEwuICovCi0Jc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbWluZzsKLQotCXZvaWQgKCpkZWNvZGUpIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKKwl2b2lkICgqZGVjb2RlKSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdXZjX3N0cmVhbWluZyAqdmlkZW8sCiAJCQlzdHJ1Y3QgdXZjX2J1ZmZlciAqYnVmKTsKIAogCS8qIENvbnRleHQgZGF0YSB1c2VkIGJ5IHRoZSBidWxrIGNvbXBsZXRpb24gaGFuZGxlci4gKi8KQEAgLTY0MCw4ICs0ODQsMTAgQEAKIAlfX3UzMiBjbG9ja19mcmVxdWVuY3k7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGVudGl0aWVzOworCXN0cnVjdCBsaXN0X2hlYWQgY2hhaW5zOwogCi0Jc3RydWN0IHV2Y192aWRlb19kZXZpY2UgdmlkZW87CisJLyogVmlkZW8gU3RyZWFtaW5nIGludGVyZmFjZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHN0cmVhbXM7CiAKIAkvKiBTdGF0dXMgSW50ZXJydXB0IEVuZHBvaW50ICovCiAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICppbnRfZXA7CkBAIC02NDksOSArNDk1LDYgQEAKIAlfX3U4ICpzdGF0dXM7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJY2hhciBpbnB1dF9waHlzWzY0XTsKLQotCS8qIFZpZGVvIFN0cmVhbWluZyBpbnRlcmZhY2VzICovCi0Jc3RydWN0IGxpc3RfaGVhZCBzdHJlYW1pbmc7CiB9OwogCiBlbnVtIHV2Y19oYW5kbGVfc3RhdGUgewpAQCAtNjYwLDcgKzUwMyw4IEBACiB9OwogCiBzdHJ1Y3QgdXZjX2ZoIHsKLQlzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluOworCXN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW07CiAJZW51bSB1dmNfaGFuZGxlX3N0YXRlIHN0YXRlOwogfTsKIApAQCAtNzU3LDEzICs2MDEsMTMgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdXZjX2ZvcHM7CiAKIC8qIFZpZGVvICovCi1leHRlcm4gaW50IHV2Y192aWRlb19pbml0KHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbyk7Ci1leHRlcm4gaW50IHV2Y192aWRlb19zdXNwZW5kKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbyk7Ci1leHRlcm4gaW50IHV2Y192aWRlb19yZXN1bWUoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvKTsKLWV4dGVybiBpbnQgdXZjX3ZpZGVvX2VuYWJsZShzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sIGludCBlbmFibGUpOwotZXh0ZXJuIGludCB1dmNfcHJvYmVfdmlkZW8oc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorZXh0ZXJuIGludCB1dmNfdmlkZW9faW5pdChzdHJ1Y3QgdXZjX3N0cmVhbWluZyAqc3RyZWFtKTsKK2V4dGVybiBpbnQgdXZjX3ZpZGVvX3N1c3BlbmQoc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSk7CitleHRlcm4gaW50IHV2Y192aWRlb19yZXN1bWUoc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSk7CitleHRlcm4gaW50IHV2Y192aWRlb19lbmFibGUoc3RydWN0IHV2Y19zdHJlYW1pbmcgKnN0cmVhbSwgaW50IGVuYWJsZSk7CitleHRlcm4gaW50IHV2Y19wcm9iZV92aWRlbyhzdHJ1Y3QgdXZjX3N0cmVhbWluZyAqc3RyZWFtLAogCQlzdHJ1Y3QgdXZjX3N0cmVhbWluZ19jb250cm9sICpwcm9iZSk7Ci1leHRlcm4gaW50IHV2Y19jb21taXRfdmlkZW8oc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorZXh0ZXJuIGludCB1dmNfY29tbWl0X3ZpZGVvKHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgKmN0cmwpOwogZXh0ZXJuIGludCB1dmNfcXVlcnlfY3RybChzdHJ1Y3QgdXZjX2RldmljZSAqZGV2LCBfX3U4IHF1ZXJ5LCBfX3U4IHVuaXQsCiAJCV9fdTggaW50Zm51bSwgX191OCBjcywgdm9pZCAqZGF0YSwgX191MTYgc2l6ZSk7CkBAIC03NzcsOSArNjIxLDkgQEAKIGV4dGVybiBpbnQgdXZjX3N0YXR1c19yZXN1bWUoc3RydWN0IHV2Y19kZXZpY2UgKmRldik7CiAKIC8qIENvbnRyb2xzICovCi1leHRlcm4gc3RydWN0IHV2Y19jb250cm9sICp1dmNfZmluZF9jb250cm9sKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKK2V4dGVybiBzdHJ1Y3QgdXZjX2NvbnRyb2wgKnV2Y19maW5kX2NvbnRyb2woc3RydWN0IHV2Y192aWRlb19jaGFpbiAqY2hhaW4sCiAJCV9fdTMyIHY0bDJfaWQsIHN0cnVjdCB1dmNfY29udHJvbF9tYXBwaW5nICoqbWFwcGluZyk7Ci1leHRlcm4gaW50IHV2Y19xdWVyeV92NGwyX2N0cmwoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorZXh0ZXJuIGludCB1dmNfcXVlcnlfdjRsMl9jdHJsKHN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluLAogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnY0bDJfY3RybCk7CiAKIGV4dGVybiBpbnQgdXZjX2N0cmxfYWRkX2luZm8oc3RydWN0IHV2Y19jb250cm9sX2luZm8gKmluZm8pOwpAQCAtNzg5LDIzICs2MzMsMjMgQEAKIGV4dGVybiBpbnQgdXZjX2N0cmxfcmVzdW1lX2RldmljZShzdHJ1Y3QgdXZjX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHV2Y19jdHJsX2luaXQodm9pZCk7CiAKLWV4dGVybiBpbnQgdXZjX2N0cmxfYmVnaW4oc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvKTsKLWV4dGVybiBpbnQgX191dmNfY3RybF9jb21taXQoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLCBpbnQgcm9sbGJhY2spOwotc3RhdGljIGlubGluZSBpbnQgdXZjX2N0cmxfY29tbWl0KHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbykKK2V4dGVybiBpbnQgdXZjX2N0cmxfYmVnaW4oc3RydWN0IHV2Y192aWRlb19jaGFpbiAqY2hhaW4pOworZXh0ZXJuIGludCBfX3V2Y19jdHJsX2NvbW1pdChzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbiwgaW50IHJvbGxiYWNrKTsKK3N0YXRpYyBpbmxpbmUgaW50IHV2Y19jdHJsX2NvbW1pdChzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbikKIHsKLQlyZXR1cm4gX191dmNfY3RybF9jb21taXQodmlkZW8sIDApOworCXJldHVybiBfX3V2Y19jdHJsX2NvbW1pdChjaGFpbiwgMCk7CiB9Ci1zdGF0aWMgaW5saW5lIGludCB1dmNfY3RybF9yb2xsYmFjayhzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8pCitzdGF0aWMgaW5saW5lIGludCB1dmNfY3RybF9yb2xsYmFjayhzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbikKIHsKLQlyZXR1cm4gX191dmNfY3RybF9jb21taXQodmlkZW8sIDEpOworCXJldHVybiBfX3V2Y19jdHJsX2NvbW1pdChjaGFpbiwgMSk7CiB9CiAKLWV4dGVybiBpbnQgdXZjX2N0cmxfZ2V0KHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKK2V4dGVybiBpbnQgdXZjX2N0cmxfZ2V0KHN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluLAogCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqeGN0cmwpOwotZXh0ZXJuIGludCB1dmNfY3RybF9zZXQoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorZXh0ZXJuIGludCB1dmNfY3RybF9zZXQoc3RydWN0IHV2Y192aWRlb19jaGFpbiAqY2hhaW4sCiAJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICp4Y3RybCk7CiAKLWV4dGVybiBpbnQgdXZjX3h1X2N0cmxfcXVlcnkoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorZXh0ZXJuIGludCB1dmNfeHVfY3RybF9xdWVyeShzdHJ1Y3QgdXZjX3ZpZGVvX2NoYWluICpjaGFpbiwKIAkJc3RydWN0IHV2Y194dV9jb250cm9sICpjdHJsLCBpbnQgc2V0KTsKIAogLyogVXRpbGl0eSBmdW5jdGlvbnMgKi8KQEAgLTgxNyw3ICs2NjEsNyBAQAogCQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzLCBfX3U4IGVwYWRkcik7CiAKIC8qIFF1aXJrcyBzdXBwb3J0ICovCi12b2lkIHV2Y192aWRlb19kZWNvZGVfaXNpZ2h0KHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAordm9pZCB1dmNfdmlkZW9fZGVjb2RlX2lzaWdodChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1dmNfc3RyZWFtaW5nICpzdHJlYW0sCiAJCXN0cnVjdCB1dmNfYnVmZmVyICpidWYpOwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCmluZGV4IDAyZjJhNmQuLjc2MWZiZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKQEAgLTc2LDkgKzc2LDggQEAKIAkJCWRwcmludGsoIlZJRElPQ19HX0NUUkw6ICVkXG4iLCBlcnIpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJcmV0dXJuICgoY3RybDIudmFsdWUgLSBxY3RybDIubWluaW11bSkgKiA2NTUzNQotCQkJICsgKHFjdHJsMi5tYXhpbXVtIC0gcWN0cmwyLm1pbmltdW0pIC8gMikKLQkJCS8gKHFjdHJsMi5tYXhpbXVtIC0gcWN0cmwyLm1pbmltdW0pOworCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoKGN0cmwyLnZhbHVlLXFjdHJsMi5taW5pbXVtKSAqIDY1NTM1LAorCQkJCQkgcWN0cmwyLm1heGltdW0gLSBxY3RybDIubWluaW11bSk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCmluZGV4IGI5MWQ2NmEuLjNhMGM2NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKQEAgLTE1Niw2ICsxNTYsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAocWN0cmwtPmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfR1JBQkJFRCkKIAkJcmV0dXJuIC1FQlVTWTsKKwlpZiAocWN0cmwtPnR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfU1RSSU5HKQorCQlyZXR1cm4gMDsKIAlpZiAocWN0cmwtPnR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfQlVUVE9OIHx8CiAJICAgIHFjdHJsLT50eXBlID09IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NCB8fAogCSAgICBxY3RybC0+dHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9DVFJMX0NMQVNTKQpAQCAtMzQwLDYgKzM0MiwxMiBAQAogCQkiU2VwaWEiLAogCQlOVUxMCiAJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqdHVuZV9wcmVlbXBoYXNpc1tdID0geworCQkiTm8gcHJlZW1waGFzaXMiLAorCQkiNTAgdXNlY29uZHMiLAorCQkiNzUgdXNlY29uZHMiLAorCQlOVUxMLAorCX07CiAKIAlzd2l0Y2ggKGlkKSB7CiAJCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVROgpAQCAtMzc4LDYgKzM4Niw4IEBACiAJCQlyZXR1cm4gY2FtZXJhX2V4cG9zdXJlX2F1dG87CiAJCWNhc2UgVjRMMl9DSURfQ09MT1JGWDoKIAkJCXJldHVybiBjb2xvcmZ4OworCQljYXNlIFY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVM6CisJCQlyZXR1cm4gdHVuZV9wcmVlbXBoYXNpczsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiBOVUxMOwogCX0KQEAgLTQ3Niw2ICs0ODYsMjggQEAKIAljYXNlIFY0TDJfQ0lEX1pPT01fQ09OVElOVU9VUzoJCXJldHVybiAiWm9vbSwgQ29udGludW91cyI7CiAJY2FzZSBWNEwyX0NJRF9QUklWQUNZOgkJCXJldHVybiAiUHJpdmFjeSI7CiAKKwkvKiBGTSBSYWRpbyBNb2R1bGF0b3IgY29udHJvbCAqLworCWNhc2UgVjRMMl9DSURfRk1fVFhfQ0xBU1M6CQlyZXR1cm4gIkZNIFJhZGlvIE1vZHVsYXRvciBDb250cm9scyI7CisJY2FzZSBWNEwyX0NJRF9SRFNfVFhfREVWSUFUSU9OOgkJcmV0dXJuICJSRFMgU2lnbmFsIERldmlhdGlvbiI7CisJY2FzZSBWNEwyX0NJRF9SRFNfVFhfUEk6CQlyZXR1cm4gIlJEUyBQcm9ncmFtIElEIjsKKwljYXNlIFY0TDJfQ0lEX1JEU19UWF9QVFk6CQlyZXR1cm4gIlJEUyBQcm9ncmFtIFR5cGUiOworCWNhc2UgVjRMMl9DSURfUkRTX1RYX1BTX05BTUU6CQlyZXR1cm4gIlJEUyBQUyBOYW1lIjsKKwljYXNlIFY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhUOglyZXR1cm4gIlJEUyBSYWRpbyBUZXh0IjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfRU5BQkxFRDoJcmV0dXJuICJBdWRpbyBMaW1pdGVyIEZlYXR1cmUgRW5hYmxlZCI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX1JFTEVBU0VfVElNRTogcmV0dXJuICJBdWRpbyBMaW1pdGVyIFJlbGVhc2UgVGltZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0RFVklBVElPTjoJcmV0dXJuICJBdWRpbyBMaW1pdGVyIERldmlhdGlvbiI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9FTkFCTEVEOiByZXR1cm4gIkF1ZGlvIENvbXByZXNzaW9uIEZlYXR1cmUgRW5hYmxlZCI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9HQUlOOglyZXR1cm4gIkF1ZGlvIENvbXByZXNzaW9uIEdhaW4iOworCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fVEhSRVNIT0xEOiByZXR1cm4gIkF1ZGlvIENvbXByZXNzaW9uIFRocmVzaG9sZCI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9BVFRBQ0tfVElNRTogcmV0dXJuICJBdWRpbyBDb21wcmVzc2lvbiBBdHRhY2sgVGltZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9SRUxFQVNFX1RJTUU6IHJldHVybiAiQXVkaW8gQ29tcHJlc3Npb24gUmVsZWFzZSBUaW1lIjsKKwljYXNlIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRU5BQkxFRDoJcmV0dXJuICJQaWxvdCBUb25lIEZlYXR1cmUgRW5hYmxlZCI7CisJY2FzZSBWNEwyX0NJRF9QSUxPVF9UT05FX0RFVklBVElPTjoJcmV0dXJuICJQaWxvdCBUb25lIERldmlhdGlvbiI7CisJY2FzZSBWNEwyX0NJRF9QSUxPVF9UT05FX0ZSRVFVRU5DWToJcmV0dXJuICJQaWxvdCBUb25lIEZyZXF1ZW5jeSI7CisJY2FzZSBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTOglyZXR1cm4gIlByZS1lbXBoYXNpcyBzZXR0aW5ncyI7CisJY2FzZSBWNEwyX0NJRF9UVU5FX1BPV0VSX0xFVkVMOgkJcmV0dXJuICJUdW5lIFBvd2VyIExldmVsIjsKKwljYXNlIFY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1I6CXJldHVybiAiVHVuZSBBbnRlbm5hIENhcGFjaXRvciI7CisKIAlkZWZhdWx0OgogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC01MDgsNiArNTQwLDkgQEAKIAljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE9fUFJJT1JJVFk6CiAJY2FzZSBWNEwyX0NJRF9GT0NVU19BVVRPOgogCWNhc2UgVjRMMl9DSURfUFJJVkFDWToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfRU5BQkxFRDoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0VOQUJMRUQ6CisJY2FzZSBWNEwyX0NJRF9QSUxPVF9UT05FX0VOQUJMRUQ6CiAJCXFjdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTjsKIAkJbWluID0gMDsKIAkJbWF4ID0gc3RlcCA9IDE7CkBAIC01MzYsMTIgKzU3MSwxOCBAQAogCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDoKIAljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE86CiAJY2FzZSBWNEwyX0NJRF9DT0xPUkZYOgorCWNhc2UgVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUzoKIAkJcWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9NRU5VOwogCQlzdGVwID0gMTsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9SRFNfVFhfUFNfTkFNRToKKwljYXNlIFY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhUOgorCQlxY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX1NUUklORzsKKwkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9VU0VSX0NMQVNTOgogCWNhc2UgVjRMMl9DSURfQ0FNRVJBX0NMQVNTOgogCWNhc2UgVjRMMl9DSURfTVBFR19DTEFTUzoKKwljYXNlIFY0TDJfQ0lEX0ZNX1RYX0NMQVNTOgogCQlxY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0NUUkxfQ0xBU1M7CiAJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFk7CiAJCW1pbiA9IG1heCA9IHN0ZXAgPSBkZWYgPSAwOwpAQCAtNTcwLDYgKzYxMSwxNyBAQAogCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgogCWNhc2UgVjRMMl9DSURfR0FNTUE6CiAJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CisJY2FzZSBWNEwyX0NJRF9SRFNfVFhfREVWSUFUSU9OOgorCWNhc2UgVjRMMl9DSURfQVVESU9fTElNSVRFUl9SRUxFQVNFX1RJTUU6CisJY2FzZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0RFVklBVElPTjoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0dBSU46CisJY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9USFJFU0hPTEQ6CisJY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9BVFRBQ0tfVElNRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1JFTEVBU0VfVElNRToKKwljYXNlIFY0TDJfQ0lEX1BJTE9UX1RPTkVfREVWSUFUSU9OOgorCWNhc2UgVjRMMl9DSURfUElMT1RfVE9ORV9GUkVRVUVOQ1k6CisJY2FzZSBWNEwyX0NJRF9UVU5FX1BPV0VSX0xFVkVMOgorCWNhc2UgVjRMMl9DSURfVFVORV9BTlRFTk5BX0NBUEFDSVRPUjoKIAkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUjsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9QQU5fUkVMQVRJVkU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCmluZGV4IDAwNTZiMTEuLjk5Nzk3NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jCkBAIC02MDAsOSArNjAwLDM3IEBACiAgICAgICAgY29tcGF0X2NhZGRyX3QgY29udHJvbHM7IC8qIGFjdHVhbGx5IHN0cnVjdCB2NGwyX2V4dF9jb250cm9sMzIgKiAqLwogfTsKIAorc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wzMiB7CisJX191MzIgaWQ7CisJX191MzIgc2l6ZTsKKwlfX3UzMiByZXNlcnZlZDJbMV07CisJdW5pb24geworCQlfX3MzMiB2YWx1ZTsKKwkJX19zNjQgdmFsdWU2NDsKKwkJY29tcGF0X2NhZGRyX3Qgc3RyaW5nOyAvKiBhY3R1YWxseSBjaGFyICogKi8KKwl9OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gcmVhbGx5IGJlbG9uZyBpbiB2NGwyLWNvbW1vbiwgYnV0IHRoYXQgY2F1c2VzCisgICBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBtb2R1bGVzLiBXZSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoaXMsIGJ1dAorICAgZm9yIG5vdyB0aGlzIHdpbGwgZG8uICovCisKKy8qIFJldHVybiBub24temVybyBpZiB0aGlzIGNvbnRyb2wgaXMgYSBwb2ludGVyIHR5cGUuIEN1cnJlbnRseSBvbmx5CisgICB0eXBlIFNUUklORyBpcyBhIHBvaW50ZXIgdHlwZS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGN0cmxfaXNfcG9pbnRlcih1MzIgaWQpCit7CisJc3dpdGNoIChpZCkgeworCWNhc2UgVjRMMl9DSURfUkRTX1RYX1BTX05BTUU6CisJY2FzZSBWNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVDoKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCiBzdGF0aWMgaW50IGdldF92NGwyX2V4dF9jb250cm9sczMyKHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqa3AsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9sczMyIF9fdXNlciAqdXApCiB7Ci0Jc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgX191c2VyICp1Y29udHJvbHM7CisJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wzMiBfX3VzZXIgKnVjb250cm9sczsKIAlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCBfX3VzZXIgKmtjb250cm9sczsKIAlpbnQgbjsKIAljb21wYXRfY2FkZHJfdCBwOwpAQCAtNjI2LDE1ICs2NTQsMTcgQEAKIAlrY29udHJvbHMgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShuICogc2l6ZW9mKHN0cnVjdCB2NGwyX2V4dF9jb250cm9sKSk7CiAJa3AtPmNvbnRyb2xzID0ga2NvbnRyb2xzOwogCXdoaWxlICgtLW4gPj0gMCkgewotCQlpZiAoY29weV9pbl91c2VyKCZrY29udHJvbHMtPmlkLCAmdWNvbnRyb2xzLT5pZCwgc2l6ZW9mKF9fdTMyKSkpCisJCWlmIChjb3B5X2luX3VzZXIoa2NvbnRyb2xzLCB1Y29udHJvbHMsIHNpemVvZigqa2NvbnRyb2xzKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKGNvcHlfaW5fdXNlcigma2NvbnRyb2xzLT5yZXNlcnZlZDIsICZ1Y29udHJvbHMtPnJlc2VydmVkMiwgc2l6ZW9mKHVjb250cm9scy0+cmVzZXJ2ZWQyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJLyogTm90ZTogaWYgdGhlIHZvaWQgKiBwYXJ0IG9mIHRoZSB1bmlvbiBldmVyIGJlY29tZXMgcmVsZXZhbnQKLQkJICAgdGhlbiB3ZSBuZWVkIHRvIGtub3cgdGhlIHR5cGUgb2YgdGhlIGNvbnRyb2wgaW4gb3JkZXIgdG8gZG8KLQkJICAgdGhlIHJpZ2h0IHRoaW5nIGhlcmUuIEx1Y2tpbHksIHRoYXQgaXMgbm90IHlldCBhbiBpc3N1ZS4gKi8KLQkJaWYgKGNvcHlfaW5fdXNlcigma2NvbnRyb2xzLT52YWx1ZSwgJnVjb250cm9scy0+dmFsdWUsIHNpemVvZih1Y29udHJvbHMtPnZhbHVlKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGN0cmxfaXNfcG9pbnRlcihrY29udHJvbHMtPmlkKSkgeworCQkJdm9pZCBfX3VzZXIgKnM7CisKKwkJCWlmIChnZXRfdXNlcihwLCAmdWNvbnRyb2xzLT5zdHJpbmcpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcyA9IGNvbXBhdF9wdHIocCk7CisJCQlpZiAocHV0X3VzZXIocywgJmtjb250cm9scy0+c3RyaW5nKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQogCQl1Y29udHJvbHMrKzsKIAkJa2NvbnRyb2xzKys7CiAJfQpAQCAtNjQzLDcgKzY3Myw3IEBACiAKIHN0YXRpYyBpbnQgcHV0X3Y0bDJfZXh0X2NvbnRyb2xzMzIoc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICprcCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzMzIgX191c2VyICp1cCkKIHsKLQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCBfX3VzZXIgKnVjb250cm9sczsKKwlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbDMyIF9fdXNlciAqdWNvbnRyb2xzOwogCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sIF9fdXNlciAqa2NvbnRyb2xzID0ga3AtPmNvbnRyb2xzOwogCWludCBuID0ga3AtPmNvdW50OwogCWNvbXBhdF9jYWRkcl90IHA7CkBAIC02NjQsMTUgKzY5NCwxNCBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXdoaWxlICgtLW4gPj0gMCkgewotCQlpZiAoY29weV9pbl91c2VyKCZ1Y29udHJvbHMtPmlkLCAma2NvbnRyb2xzLT5pZCwgc2l6ZW9mKF9fdTMyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKGNvcHlfaW5fdXNlcigmdWNvbnRyb2xzLT5yZXNlcnZlZDIsICZrY29udHJvbHMtPnJlc2VydmVkMiwKLQkJCQkJc2l6ZW9mKHVjb250cm9scy0+cmVzZXJ2ZWQyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJLyogTm90ZTogaWYgdGhlIHZvaWQgKiBwYXJ0IG9mIHRoZSB1bmlvbiBldmVyIGJlY29tZXMgcmVsZXZhbnQKLQkJICAgdGhlbiB3ZSBuZWVkIHRvIGtub3cgdGhlIHR5cGUgb2YgdGhlIGNvbnRyb2wgaW4gb3JkZXIgdG8gZG8KLQkJICAgdGhlIHJpZ2h0IHRoaW5nIGhlcmUuIEx1Y2tpbHksIHRoYXQgaXMgbm90IHlldCBhbiBpc3N1ZS4gKi8KLQkJaWYgKGNvcHlfaW5fdXNlcigmdWNvbnRyb2xzLT52YWx1ZSwgJmtjb250cm9scy0+dmFsdWUsIHNpemVvZih1Y29udHJvbHMtPnZhbHVlKSkpCisJCXVuc2lnbmVkIHNpemUgPSBzaXplb2YoKnVjb250cm9scyk7CisKKwkJLyogRG8gbm90IG1vZGlmeSB0aGUgcG9pbnRlciB3aGVuIGNvcHlpbmcgYSBwb2ludGVyIGNvbnRyb2wuCisJCSAgIFRoZSBjb250ZW50cyBvZiB0aGUgcG9pbnRlciB3YXMgY2hhbmdlZCwgbm90IHRoZSBwb2ludGVyCisJCSAgIGl0c2VsZi4gKi8KKwkJaWYgKGN0cmxfaXNfcG9pbnRlcihrY29udHJvbHMtPmlkKSkKKwkJCXNpemUgLT0gc2l6ZW9mKHVjb250cm9scy0+dmFsdWU2NCk7CisJCWlmIChjb3B5X2luX3VzZXIodWNvbnRyb2xzLCBrY29udHJvbHMsIHNpemUpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXVjb250cm9scysrOwogCQlrY29udHJvbHMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKaW5kZXggZjJhZmM0ZS4uMzBjYzMzNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jCkBAIC00Miw2ICs0MiwxMiBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgdmZkLT5uYW1lLCAjIyBhcmcpO1wKIAkJfSB3aGlsZSAoMCkKIAorI2RlZmluZSBkYmdhcmczKGZtdCwgYXJnLi4uKSBcCisJCWRvIHsJCQkJCQkJXAorCQkgICAgaWYgKHZmZC0+ZGVidWcgJiBWNEwyX0RFQlVHX0lPQ1RMX0FSRykJCVwKKwkJCXByaW50ayhLRVJOX0NPTlQgIiVzOiAiIGZtdCwgdmZkLT5uYW1lLCAjIyBhcmcpO1wKKwkJfSB3aGlsZSAoMCkKKwogLyogWmVybyBvdXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0IHBvaW50ZWQgdG8gYnkgcC4gIEV2ZXJ0aGluZyBhZnRlciwgYnV0CiAgKiBub3QgaW5jbHVkaW5nLCB0aGUgc3BlY2lmaWVkIGZpZWxkIGlzIGNsZWFyZWQuICovCiAjZGVmaW5lIENMRUFSX0FGVEVSX0ZJRUxEKHAsIGZpZWxkKSBcCkBAIC01MDcsMTEgKzUxMywxMiBAQAogCWRiZ2FyZyhjbWQsICIiKTsKIAlwcmludGsoS0VSTl9DT05UICJjbGFzcz0weCV4IiwgYy0+Y3RybF9jbGFzcyk7CiAJZm9yIChpID0gMDsgaSA8IGMtPmNvdW50OyBpKyspIHsKLQkJaWYgKHNob3dfdmFscykKKwkJaWYgKHNob3dfdmFscyAmJiAhYy0+Y29udHJvbHNbaV0uc2l6ZSkKIAkJCXByaW50ayhLRVJOX0NPTlQgIiBpZC92YWw9MHgleC8weCV4IiwKIAkJCQljLT5jb250cm9sc1tpXS5pZCwgYy0+Y29udHJvbHNbaV0udmFsdWUpOwogCQllbHNlCi0JCQlwcmludGsoS0VSTl9DT05UICIgaWQ9MHgleCIsIGMtPmNvbnRyb2xzW2ldLmlkKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIiBpZD0weCV4LHNpemU9JXUiLAorCQkJCWMtPmNvbnRyb2xzW2ldLmlkLCBjLT5jb250cm9sc1tpXS5zaXplKTsKIAl9CiAJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIH07CkBAIC01MjIsMTAgKzUyOSw5IEBACiAKIAkvKiB6ZXJvIHRoZSByZXNlcnZlZCBmaWVsZHMgKi8KIAljLT5yZXNlcnZlZFswXSA9IGMtPnJlc2VydmVkWzFdID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgYy0+Y291bnQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBjLT5jb3VudDsgaSsrKQogCQljLT5jb250cm9sc1tpXS5yZXNlcnZlZDJbMF0gPSAwOwotCQljLT5jb250cm9sc1tpXS5yZXNlcnZlZDJbMV0gPSAwOwotCX0KKwogCS8qIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSBjYW5ub3QgYmUgdXNlZCBhcyBjb250cm9sIGNsYXNzCiAJICAgd2hlbiB1c2luZyBleHRlbmRlZCBjb250cm9scy4KIAkgICBPbmx5IHdoZW4gcGFzc2VkIGluIHRocm91Z2ggVklESU9DX0dfQ1RSTCBhbmQgVklESU9DX1NfQ1RSTApAQCAtMTcyNiwyNCArMTczMiwyOSBAQAogCiAJCXJldCA9IG9wcy0+dmlkaW9jX2VudW1fZnJhbWVzaXplcyhmaWxlLCBmaCwgcCk7CiAJCWRiZ2FyZyhjbWQsCi0JCQkiaW5kZXg9JWQsIHBpeGVsZm9ybWF0PSVkLCB0eXBlPSVkICIsCi0JCQlwLT5pbmRleCwgcC0+cGl4ZWxfZm9ybWF0LCBwLT50eXBlKTsKKwkJCSJpbmRleD0lZCwgcGl4ZWxmb3JtYXQ9JWMlYyVjJWMsIHR5cGU9JWQgIiwKKwkJCXAtPmluZGV4LAorCQkJKHAtPnBpeGVsX2Zvcm1hdCAmIDB4ZmYpLAorCQkJKHAtPnBpeGVsX2Zvcm1hdCA+PiAgOCkgJiAweGZmLAorCQkJKHAtPnBpeGVsX2Zvcm1hdCA+PiAxNikgJiAweGZmLAorCQkJKHAtPnBpeGVsX2Zvcm1hdCA+PiAyNCkgJiAweGZmLAorCQkJcC0+dHlwZSk7CiAJCXN3aXRjaCAocC0+dHlwZSkgewogCQljYXNlIFY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRFOgotCQkJZGJnYXJnMigid2lkdGggPSAlZCwgaGVpZ2h0PSVkXG4iLAorCQkJZGJnYXJnMygid2lkdGggPSAlZCwgaGVpZ2h0PSVkXG4iLAogCQkJCXAtPmRpc2NyZXRlLndpZHRoLCBwLT5kaXNjcmV0ZS5oZWlnaHQpOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9GUk1TSVpFX1RZUEVfU1RFUFdJU0U6Ci0JCQlkYmdhcmcyKCJtaW4gJWR4JWQsIG1heCAlZHglZCwgc3RlcCAlZHglZFxuIiwKKwkJCWRiZ2FyZzMoIm1pbiAlZHglZCwgbWF4ICVkeCVkLCBzdGVwICVkeCVkXG4iLAogCQkJCXAtPnN0ZXB3aXNlLm1pbl93aWR0aCwgIHAtPnN0ZXB3aXNlLm1pbl9oZWlnaHQsCiAJCQkJcC0+c3RlcHdpc2Uuc3RlcF93aWR0aCwgcC0+c3RlcHdpc2Uuc3RlcF9oZWlnaHQsCiAJCQkJcC0+c3RlcHdpc2UubWF4X3dpZHRoLCAgcC0+c3RlcHdpc2UubWF4X2hlaWdodCk7CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX0ZSTVNJWkVfVFlQRV9DT05USU5VT1VTOgotCQkJZGJnYXJnMigiY29udGludW91c1xuIik7CisJCQlkYmdhcmczKCJjb250aW51b3VzXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZGJnYXJnMigiLSBVbmtub3duIHR5cGUhXG4iKTsKKwkJCWRiZ2FyZzMoIi0gVW5rbm93biB0eXBlIVxuIik7CiAJCX0KIAogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKaW5kZXggOTdiMDgyZi4uZjNiNmUxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKQEAgLTE3NzYsNyArMTc3Niw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgdmlub19pMmNfYWRhcHRlciA9IHsKIAkubmFtZQkJCT0gIlZJTk8gSTJDIGJ1cyIsCi0JLmlkCQkJPSBJMkNfSFdfU0dJX1ZJTk8sCiAJLmFsZ28JCQk9ICZzZ2lfYWxnbywKIAkuYWxnb19kYXRhCQk9ICZpMmNfc2dpX3Zpbm9fZGF0YSwKIAkub3duZXIgCQkJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMKaW5kZXggNmMzZjIzZS4uNjAyNDg0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMKQEAgLTE0OTcsNyArMTQ5Nyw2IEBACiAJfTsKIAogCXN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcCA9IHsKLQkJLmlkID0gICAgICAgICAgICAgICAgSTJDX0hXX1NNQlVTX1c5OTY4Q0YsCiAJCS5vd25lciA9ICAgICAgICAgICAgIFRISVNfTU9EVUxFLAogCQkuYWxnbyA9ICAgICAgICAgICAgICAmYWxnbywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYwppbmRleCAwM2RjMmYzLi4wYzRkOWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYwpAQCAtNzMyLDcgKzczMiw2IEBACiAJbWVtY3B5KCZ6ci0+aTJjX2FsZ28sICZ6b3Jhbl9pMmNfYml0X2RhdGFfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEpKTsKIAl6ci0+aTJjX2FsZ28uZGF0YSA9IHpyOwotCXpyLT5pMmNfYWRhcHRlci5pZCA9IEkyQ19IV19CX1pSMzYwNjc7CiAJc3RybGNweSh6ci0+aTJjX2FkYXB0ZXIubmFtZSwgWlJfREVWTkFNRSh6ciksCiAJCXNpemVvZih6ci0+aTJjX2FkYXB0ZXIubmFtZSkpOwogCWkyY19zZXRfYWRhcGRhdGEoJnpyLT5pMmNfYWRhcHRlciwgJnpyLT52NGwyX2Rldik7CkBAIC0xMTY5LDcgKzExNjgsNyBAQAogCW0tPnR5cGUgPSAwOwogCiAJbS0+ZmxhZ3MgPSBDT0RFQ19GTEFHX0VOQ09ERVIgfCBDT0RFQ19GTEFHX0RFQ09ERVI7Ci0Jc3RybmNweShtLT5uYW1lLCBaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKG0tPm5hbWUpKTsKKwlzdHJsY3B5KG0tPm5hbWUsIFpSX0RFVk5BTUUoenIpLCBzaXplb2YobS0+bmFtZSkpOwogCW0tPmRhdGEgPSB6cjsKIAogCXN3aXRjaCAodHlwZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKaW5kZXggMjYyMmE2ZS4uOWFhZTAxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogWm9yYW4gMzY0eHggYmFzZWQgVVNCIHdlYmNhbSBtb2R1bGUgdmVyc2lvbiAwLjcyCisgKiBab3JhbiAzNjR4eCBiYXNlZCBVU0Igd2ViY2FtIG1vZHVsZSB2ZXJzaW9uIDAuNzMKICAqCiAgKiBBbGxvd3MgeW91IHRvIHVzZSB5b3VyIFVTQiB3ZWJjYW0gd2l0aCBWNEwyIGFwcGxpY2F0aW9ucwogICogVGhpcyBpcyBzdGlsbCBpbiBoZWF2eSBkZXZlbG9wcGVtZW50ICEKQEAgLTEwLDYgKzEwLDggQEAKICAqIEhlYXZpbHkgaW5zcGlyZWQgYnkgdXNiLXNrZWxldG9uLmMsIHZpY2FtLmMsIGNwaWEuYyBhbmQgc3BjYTUweC5jIGRyaXZlcnMKICAqIFY0TDIgdmVyc2lvbiBpbnNwaXJlZCBieSBtZXllLmMgZHJpdmVyCiAgKgorICogU29tZSB2aWRlbyBidWZmZXIgY29kZSBieSBMYW1hcnF1ZSBiYXNlZCBvbiBzMjI1NWRydi5jIGFuZCB2aXZpLmMgZHJpdmVycy4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC0yNyw2ICsyOSw3IEBACiAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtMzUsMjQgKzM4LDQwIEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaD4KIAogCiAvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC43MiIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjczIgorI2RlZmluZSBaUjM2NFhYX1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLCA3LCAzKQogI2RlZmluZSBEUklWRVJfQVVUSE9SICJBbnRvaW5lIEphY3F1ZXQsIGh0dHA6Ly9yb3lhbGUuemVyZXpvLmNvbS8iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJab3JhbiAzNjR4eCIKIAogCiAvKiBDYW1lcmEgKi8KLSNkZWZpbmUgRlJBTUVTIDIKLSNkZWZpbmUgTUFYX0ZSQU1FX1NJWkUgMTAwMDAwCisjZGVmaW5lIEZSQU1FUyAxCisjZGVmaW5lIE1BWF9GUkFNRV9TSVpFIDIwMDAwMAogI2RlZmluZSBCVUZGRVJfU0laRSAweDEwMDAKICNkZWZpbmUgQ1RSTF9USU1FT1VUIDUwMAogCisjZGVmaW5lIFpSMzY0WFhfREVGX0JVRlMJNAorI2RlZmluZSBaUjM2NFhYX1JFQURfSURMRQkwCisjZGVmaW5lIFpSMzY0WFhfUkVBRF9GUkFNRQkxCiAKIC8qIERlYnVnIG1hY3JvICovCi0jZGVmaW5lIERCRyh4Li4uKSBpZiAoZGVidWcpIHByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgeCkKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoZGVidWcpIHsgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiICIgZm10LCAjI2FyZ3MpOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCiAKKy8qI2RlZmluZSBGVUxMX0RFQlVHIDEqLworI2lmZGVmIEZVTExfREVCVUcKKyNkZWZpbmUgX0RCRyBEQkcKKyNlbHNlCisjZGVmaW5lIF9EQkcoZm10LCBhcmdzLi4uKQorI2VuZGlmCiAKIC8qIEluaXQgbWV0aG9kcywgbmVlZCB0byBmaW5kIG5pY2VyIG5hbWVzIGZvciB0aGVzZQogICogdGhlIGV4YWN0IG5hbWVzIG9mIHRoZSBjaGlwc2V0cyB3b3VsZCBiZSB0aGUgYmVzdCBpZiBzb21lb25lIGZpbmRzIGl0ICovCkBAIC0xMDEsMjQgKzEyMCw5MyBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKIAorc3RydWN0IHpyMzY0eHhfbW9kZSB7CisJdTMyIGNvbG9yOwkvKiBvdXRwdXQgdmlkZW8gY29sb3IgZm9ybWF0ICovCisJdTMyIGJyaWdodG5lc3M7CS8qIGJyaWdodG5lc3MgKi8KK307CisKKy8qIGZyYW1lIHN0cnVjdHVyZSAqLworc3RydWN0IHpyMzY0eHhfZnJhbWVpIHsKKwl1bnNpZ25lZCBsb25nIHVsU3RhdGU7CS8qIHVsU3RhdGU6WlIzNjRYWF9SRUFEX0lETEUsCisJCQkJCSAgIFpSMzY0WFhfUkVBRF9GUkFNRSAqLworCXZvaWQgKmxwdmJpdHM7CQkvKiBpbWFnZSBkYXRhICovCisJdW5zaWduZWQgbG9uZyBjdXJfc2l6ZTsJLyogY3VycmVudCBkYXRhIGNvcGllZCB0byBpdCAqLworfTsKKworLyogaW1hZ2UgYnVmZmVyIHN0cnVjdHVyZSAqLworc3RydWN0IHpyMzY0eHhfYnVmZmVyaSB7CisJdW5zaWduZWQgbG9uZyBkd0ZyYW1lczsJCQkvKiBudW1iZXIgb2YgZnJhbWVzIGluIGJ1ZmZlciAqLworCXN0cnVjdCB6cjM2NHh4X2ZyYW1laSBmcmFtZVtGUkFNRVNdOwkvKiBhcnJheSBvZiBGUkFNRSBzdHJ1Y3R1cmVzICovCit9OworCitzdHJ1Y3QgenIzNjR4eF9kbWFxdWV1ZSB7CisJc3RydWN0IGxpc3RfaGVhZAlhY3RpdmU7CisJc3RydWN0IHpyMzY0eHhfY2FtZXJhCSpjYW07Cit9OworCitzdHJ1Y3QgenIzNjR4eF9waXBlaW5mbyB7CisJdTMyIHRyYW5zZmVyX3NpemU7CisJdTggKnRyYW5zZmVyX2J1ZmZlcjsKKwl1MzIgc3RhdGU7CisJdm9pZCAqc3RyZWFtX3VyYjsKKwl2b2lkICpjYW07CS8qIGJhY2sgcG9pbnRlciB0byB6cjM2NHh4X2NhbWVyYSBzdHJ1Y3QgKi8KKwl1MzIgZXJyX2NvdW50OworCXUzMiBpZHg7Cit9OworCitzdHJ1Y3QgenIzNjR4eF9mbXQgeworCWNoYXIgKm5hbWU7CisJdTMyIGZvdXJjYzsKKwlpbnQgZGVwdGg7Cit9OworCisvKiBpbWFnZSBmb3JtYXRzLiAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgenIzNjR4eF9mbXQgZm9ybWF0c1tdID0geworCXsKKwkJLm5hbWUgPSAiSlBHIiwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9KUEVHLAorCQkuZGVwdGggPSAyNAorCX0KK307CiAKIC8qIENhbWVyYSBzdHVmZiAqLwogc3RydWN0IHpyMzY0eHhfY2FtZXJhIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJLyogc2F2ZSBvZmYgdGhlIHVzYiBkZXZpY2UgcG9pbnRlciAqLwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7LyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwkvKiB2NGwgdmlkZW8gZGV2aWNlICovCi0JdTggKmZyYW1lYnVmOwogCWludCBuYjsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJc3RydWN0IHpyMzY0eHhfYnVmZmVyaQkJYnVmZmVyOwogCWludCBza2lwOwotCWludCBicmlnaHRuZXNzOwogCWludCB3aWR0aDsKIAlpbnQgaGVpZ2h0OwogCWludCBtZXRob2Q7CiAJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IG11dGV4IG9wZW5fbG9jazsKIAlpbnQgdXNlcnM7CisKKwlzcGlubG9ja190CQlzbG9jazsKKwlzdHJ1Y3QgenIzNjR4eF9kbWFxdWV1ZQl2aWRxOworCWludAkJCXJlc291cmNlczsKKwlpbnQJCQlsYXN0X2ZyYW1lOworCWludAkJCWN1cl9mcmFtZTsKKwl1bnNpZ25lZCBsb25nCQlmcmFtZV9jb3VudDsKKwlpbnQJCQliX2FjcXVpcmU7CisJc3RydWN0IHpyMzY0eHhfcGlwZWluZm8JcGlwZVsxXTsKKworCXU4CQkJcmVhZF9lbmRwb2ludDsKKworCWNvbnN0IHN0cnVjdCB6cjM2NHh4X2ZtdCAqZm10OworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZQl2Yl92aWRxOworCWVudW0gdjRsMl9idWZfdHlwZQl0eXBlOworCXN0cnVjdCB6cjM2NHh4X21vZGUJbW9kZTsKIH07CiAKKy8qIGJ1ZmZlciBmb3Igb25lIHZpZGVvIGZyYW1lICovCitzdHJ1Y3QgenIzNjR4eF9idWZmZXIgeworCS8qIGNvbW1vbiB2NGwgYnVmZmVyIHN0dWZmIC0tIG11c3QgYmUgZmlyc3QgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyIHZiOworCWNvbnN0IHN0cnVjdCB6cjM2NHh4X2ZtdCAqZm10OworfTsKIAogLyogZnVuY3Rpb24gdXNlZCB0byBzZW5kIGluaXRpYWxpc2F0aW9uIGNvbW1hbmRzIHRvIHRoZSBjYW1lcmEgKi8KIHN0YXRpYyBpbnQgc2VuZF9jb250cm9sX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLApAQCAtMjcyLDEzOSArMzYwLDExNiBAQAogfTsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGhlYWRlcjM7CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVmlkZW9idWYgb3BlcmF0aW9ucworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIGludCBidWZmZXJfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50ICpjb3VudCwKKwkJCXVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbSA9IHZxLT5wcml2X2RhdGE7CisKKwkqc2l6ZSA9IGNhbS0+d2lkdGggKiBjYW0tPmhlaWdodCAqIChjYW0tPmZtdC0+ZGVwdGggPj4gMyk7CisKKwlpZiAoKmNvdW50ID09IDApCisJCSpjb3VudCA9IFpSMzY0WFhfREVGX0JVRlM7CisKKwl3aGlsZSAoKnNpemUgKiAoKmNvdW50KSA+IFpSMzY0WFhfREVGX0JVRlMgKiAxMDI0ICogMTAyNCkKKwkJKCpjb3VudCktLTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2J1ZmZlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgenIzNjR4eF9idWZmZXIgKmJ1ZikKK3sKKwlfREJHKCIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGluX2ludGVycnVwdCgpKQorCQlCVUcoKTsKKworCXZpZGVvYnVmX3ZtYWxsb2NfZnJlZSgmYnVmLT52Yik7CisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Cit9CisKK3N0YXRpYyBpbnQgYnVmZmVyX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkgIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKK3sKKwlzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbSA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHpyMzY0eHhfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCB6cjM2NHh4X2J1ZmZlciwKKwkJCQkJCSAgdmIpOworCWludCByYzsKKworCURCRygiJXMsIGZpZWxkPSVkLCBmbXQgbmFtZSA9ICVzXG4iLCBfX2Z1bmNfXywgZmllbGQsIGNhbS0+Zm10ICE9IE5VTEwgPworCSAgICBjYW0tPmZtdC0+bmFtZSA6ICIiKTsKKwlpZiAoY2FtLT5mbXQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWYtPnZiLnNpemUgPSBjYW0tPndpZHRoICogY2FtLT5oZWlnaHQgKiAoY2FtLT5mbXQtPmRlcHRoID4+IDMpOworCisJaWYgKGJ1Zi0+dmIuYmFkZHIgIT0gMCAmJiBidWYtPnZiLmJzaXplIDwgYnVmLT52Yi5zaXplKSB7CisJCURCRygiaW52YWxpZCBidWZmZXIgcHJlcGFyZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJ1Zi0+Zm10ID0gY2FtLT5mbXQ7CisJYnVmLT52Yi53aWR0aCA9IGNhbS0+d2lkdGg7CisJYnVmLT52Yi5oZWlnaHQgPSBjYW0tPmhlaWdodDsKKwlidWYtPnZiLmZpZWxkID0gZmllbGQ7CisKKwlpZiAoYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ORUVEU19JTklUKSB7CisJCXJjID0gdmlkZW9idWZfaW9sb2NrKHZxLCAmYnVmLT52YiwgTlVMTCk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIGZhaWw7CisJfQorCisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCXJldHVybiAwOworZmFpbDoKKwlmcmVlX2J1ZmZlcih2cSwgYnVmKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgenIzNjR4eF9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IHpyMzY0eHhfYnVmZmVyLAorCQkJCQkJICB2Yik7CisJc3RydWN0IHpyMzY0eHhfY2FtZXJhICpjYW0gPSB2cS0+cHJpdl9kYXRhOworCisJX0RCRygiJXNcbiIsIF9fZnVuY19fKTsKKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJmNhbS0+dmlkcS5hY3RpdmUpOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkJICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHpyMzY0eHhfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCB6cjM2NHh4X2J1ZmZlciwKKwkJCQkJCSAgdmIpOworCisJX0RCRygiJXNcbiIsIF9fZnVuY19fKTsKKwlmcmVlX2J1ZmZlcih2cSwgYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgenIzNjR4eF92aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgPSBidWZmZXJfcmVsZWFzZSwKK307CiAKIC8qKioqKioqKioqKioqKioqKioqKi8KIC8qIFY0TDIgaW50ZWdyYXRpb24gKi8KIC8qKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgenIzNjR4eF92aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJICAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpOwogCi0vKiB0aGlzIGZ1bmN0aW9uIHJlYWRzIGEgZnVsbCBKUEVHIHBpY3R1cmUgc3luY2hyb25vdXNseQotICogVE9ETzogZG8gaXQgYXN5bmNocm9ub3VzbHkuLi4gKi8KLXN0YXRpYyBpbnQgcmVhZF9mcmFtZShzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbSwgaW50IGZyYW1lbnVtKQotewotCWludCBpLCBuLCB0ZW1wLCBoZWFkLCBzaXplLCBhY3R1YWxfbGVuZ3RoOwotCXVuc2lnbmVkIGNoYXIgKnB0ciA9IE5VTEwsICpqcGVnOwotCi0gICAgICByZWRvOgotCS8qIGhhcmR3YXJlIGJyaWdodG5lc3MgKi8KLQluID0gc2VuZF9jb250cm9sX21zZyhjYW0tPnVkZXYsIDEsIDB4MjAwMSwgMCwgTlVMTCwgMCk7Ci0JdGVtcCA9ICgweDYwIDw8IDgpICsgMTI3IC0gY2FtLT5icmlnaHRuZXNzOwotCW4gPSBzZW5kX2NvbnRyb2xfbXNnKGNhbS0+dWRldiwgMSwgdGVtcCwgMCwgTlVMTCwgMCk7Ci0KLQkvKiBkdXJpbmcgdGhlIGZpcnN0IGxvb3Agd2UgYXJlIGdvaW5nIHRvIGluc2VydCBKUEVHIGhlYWRlciAqLwotCWhlYWQgPSAwOwotCS8qIHRoaXMgaXMgdGhlIHBsYWNlIGluIG1lbW9yeSB3aGVyZSB3ZSBhcmUgZ29pbmcgdG8gYnVpbGQKLQkgKiB0aGUgSlBFRyBpbWFnZSAqLwotCWpwZWcgPSBjYW0tPmZyYW1lYnVmICsgZnJhbWVudW0gKiBNQVhfRlJBTUVfU0laRTsKLQkvKiByZWFkIGRhdGEuLi4gKi8KLQlkbyB7Ci0JCW4gPSB1c2JfYnVsa19tc2coY2FtLT51ZGV2LAotCQkJCSB1c2JfcmN2YnVsa3BpcGUoY2FtLT51ZGV2LCAweDgxKSwKLQkJCQkgY2FtLT5idWZmZXIsIEJVRkZFUl9TSVpFLCAmYWN0dWFsX2xlbmd0aCwKLQkJCQkgQ1RSTF9USU1FT1VUKTsKLQkJREJHKCJidWZmZXIgOiAlZCAlZCIsIGNhbS0+YnVmZmVyWzBdLCBjYW0tPmJ1ZmZlclsxXSk7Ci0JCURCRygiYnVsayA6IG49JWQgc2l6ZT0lZCIsIG4sIGFjdHVhbF9sZW5ndGgpOwotCQlpZiAobiA8IDApIHsKLQkJCWRldl9lcnIoJmNhbS0+dWRldi0+ZGV2LCAiZXJyb3IgcmVhZGluZyBidWxrIG1zZ1xuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlpZiAoYWN0dWFsX2xlbmd0aCA8IDAgfHwgYWN0dWFsX2xlbmd0aCA+IEJVRkZFUl9TSVpFKSB7Ci0JCQlkZXZfZXJyKCZjYW0tPnVkZXYtPmRldiwgIndyb25nIG51bWJlciBvZiBieXRlc1xuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCS8qIHN3YXAgYnl0ZXMgaWYgY2FtZXJhIG5lZWRzIGl0ICovCi0JCWlmIChjYW0tPm1ldGhvZCA9PSBNRVRIT0QwKSB7Ci0JCQl1MTYgKmJ1ZiA9ICh1MTYqKWNhbS0+YnVmZmVyOwotCQkJZm9yIChpID0gMDsgaSA8IEJVRkZFUl9TSVpFLzI7IGkrKykKLQkJCQlzd2FiMTZzKGJ1ZiArIGkpOwotCQl9Ci0KLQkJLyogd3JpdGUgdGhlIEpQRUcgaGVhZGVyICovCi0JCWlmICghaGVhZCkgewotCQkJREJHKCJqcGVnIGhlYWRlciIpOwotCQkJcHRyID0ganBlZzsKLQkJCW1lbWNweShwdHIsIGhlYWRlcjEsIHNpemVvZihoZWFkZXIxKSk7Ci0JCQlwdHIgKz0gc2l6ZW9mKGhlYWRlcjEpOwotCQkJaGVhZGVyMyA9IDA7Ci0JCQltZW1jcHkocHRyLCAmaGVhZGVyMywgMSk7Ci0JCQlwdHIrKzsKLQkJCW1lbWNweShwdHIsIGNhbS0+YnVmZmVyLCA2NCk7Ci0JCQlwdHIgKz0gNjQ7Ci0JCQloZWFkZXIzID0gMTsKLQkJCW1lbWNweShwdHIsICZoZWFkZXIzLCAxKTsKLQkJCXB0cisrOwotCQkJbWVtY3B5KHB0ciwgY2FtLT5idWZmZXIgKyA2NCwgNjQpOwotCQkJcHRyICs9IDY0OwotCQkJbWVtY3B5KHB0ciwgaGVhZGVyMiwgc2l6ZW9mKGhlYWRlcjIpKTsKLQkJCXB0ciArPSBzaXplb2YoaGVhZGVyMik7Ci0JCQltZW1jcHkocHRyLCBjYW0tPmJ1ZmZlciArIDEyOCwKLQkJCSAgICAgICBhY3R1YWxfbGVuZ3RoIC0gMTI4KTsKLQkJCXB0ciArPSBhY3R1YWxfbGVuZ3RoIC0gMTI4OwotCQkJaGVhZCA9IDE7Ci0JCQlEQkcoImhlYWRlciA6ICVkICVkICVkICVkICVkICVkICVkICVkICVkIiwKLQkJCSAgICBjYW0tPmJ1ZmZlclswXSwgY2FtLT5idWZmZXJbMV0sIGNhbS0+YnVmZmVyWzJdLAotCQkJICAgIGNhbS0+YnVmZmVyWzNdLCBjYW0tPmJ1ZmZlcls0XSwgY2FtLT5idWZmZXJbNV0sCi0JCQkgICAgY2FtLT5idWZmZXJbNl0sIGNhbS0+YnVmZmVyWzddLCBjYW0tPmJ1ZmZlcls4XSk7Ci0JCX0gZWxzZSB7Ci0JCQltZW1jcHkocHRyLCBjYW0tPmJ1ZmZlciwgYWN0dWFsX2xlbmd0aCk7Ci0JCQlwdHIgKz0gYWN0dWFsX2xlbmd0aDsKLQkJfQotCX0KLQkvKiAuLi4gdW50aWwgdGhlcmUgaXMgbm8gbW9yZSAqLwotCXdoaWxlIChhY3R1YWxfbGVuZ3RoID09IEJVRkZFUl9TSVpFKTsKLQotCS8qIHdlIHNraXAgdGhlIDIgZmlyc3QgZnJhbWVzIHdoaWNoIGFyZSB1c3VhbGx5IGJ1Z2d5ICovCi0JaWYgKGNhbS0+c2tpcCkgewotCQljYW0tPnNraXAtLTsKLQkJZ290byByZWRvOwotCX0KLQotCS8qIGdvIGJhY2sgdG8gZmluZCB0aGUgSlBFRyBFT0kgbWFya2VyICovCi0Jc2l6ZSA9IHB0ciAtIGpwZWc7Ci0JcHRyIC09IDI7Ci0Jd2hpbGUgKHB0ciA+IGpwZWcpIHsKLQkJaWYgKCpwdHIgPT0gMHhGRiAmJiAqKHB0ciArIDEpID09IDB4RDkKLQkJICAgICYmICoocHRyICsgMikgPT0gMHhGRikKLQkJCWJyZWFrOwotCQlwdHItLTsKLQl9Ci0JaWYgKHB0ciA9PSBqcGVnKQotCQlEQkcoIk5vIEVPSSBtYXJrZXIiKTsKLQotCS8qIFNvbWV0aW1lcyB0aGVyZSBpcyBqdW5rIGRhdGEgaW4gdGhlIG1pZGRsZSBvZiB0aGUgcGljdHVyZSwKLQkgKiB3ZSB3YW50IHRvIHNraXAgdGhpcyBib2d1cyBmcmFtZXMgKi8KLQl3aGlsZSAocHRyID4ganBlZykgewotCQlpZiAoKnB0ciA9PSAweEZGICYmICoocHRyICsgMSkgPT0gMHhGRgotCQkgICAgJiYgKihwdHIgKyAyKSA9PSAweEZGKQotCQkJYnJlYWs7Ci0JCXB0ci0tOwotCX0KLQlpZiAocHRyICE9IGpwZWcpIHsKLQkJREJHKCJCb2d1cyBmcmFtZSA/ICVkIiwgY2FtLT5uYik7Ci0JCWdvdG8gcmVkbzsKLQl9Ci0KLQlEQkcoImpwZWcgOiAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCIsCi0JICAgIGpwZWdbMF0sIGpwZWdbMV0sIGpwZWdbMl0sIGpwZWdbM10sCi0JICAgIGpwZWdbNF0sIGpwZWdbNV0sIGpwZWdbNl0sIGpwZWdbN10pOwotCi0JcmV0dXJuIHNpemU7Ci19Ci0KLQotc3RhdGljIHNzaXplX3QgenIzNjR4eF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY250LAorc3RhdGljIHNzaXplX3QgenIzNjR4eF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCiAJCQkgICAgbG9mZl90ICogcHBvcykKIHsKLQl1bnNpZ25lZCBsb25nIGNvdW50ID0gY250OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtOworCXN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCURCRygienIzNjR4eF9yZWFkOiByZWFkICVkIGJ5dGVzLiIsIChpbnQpIGNvdW50KTsKLQotCWlmICh2ZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCV9EQkcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MTIsMjEgKzQ3NywyNzYgQEAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIE5vTWFuIFN1eCAhICovCi0JY291bnQgPSByZWFkX2ZyYW1lKGNhbSwgMCk7CisJaWYgKGNhbS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgJiYKKwkgICAgenIzNjR4eF92aWRpb2Nfc3RyZWFtb24oZmlsZSwgY2FtLCBjYW0tPnR5cGUpID09IDApIHsKKwkJREJHKCIlczogcmVhZGluZyAlZCBieXRlcyBhdCBwb3MgJWQuXG4iLCBfX2Z1bmNfXywgKGludCkgY291bnQsCisJCSAgICAoaW50KSAqcHBvcyk7CiAKLQlpZiAoY29weV90b191c2VyKGJ1ZiwgY2FtLT5mcmFtZWJ1ZiwgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKKwkJLyogTm9NYW4gU3V4ICEgKi8KKwkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfb25lKCZjYW0tPnZiX3ZpZHEsIGJ1ZiwgY291bnQsIHBwb3MsCisJCQkJCWZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwl9CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIDA7CiB9CiAKKy8qIHZpZGVvIGJ1ZmZlciB2bWFsbG9jIGltcGxlbWVudGF0aW9uIGJhc2VkIHBhcnRseSBvbiBWSVZJIGRyaXZlciB3aGljaCBpcworICogICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA2IGJ5CisgKiAgICAgICAgICAgICAgICAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYi0tYS50LS1pbmZyYWRlYWQub3JnPgorICogICAgICAgICAgICAgICAgICBUZWQgV2FsdGhlciA8dGVkLS1hLnQtLWVudW1lcmEuY29tPgorICogICAgICAgICAgICAgICAgICBKb2huIFNva29sIDxzb2tvbC0tYS50LS12aWRlb3RlY2hub2xvZ3kuY29tPgorICogICAgICAgICAgICAgICAgICBodHRwOi8vdjRsLnZpZGVvdGVjaG5vbG9neS5jb20vCisgKgorICovCitzdGF0aWMgdm9pZCB6cjM2NHh4X2ZpbGxidWZmKHN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtLAorCQkJICAgICBzdHJ1Y3QgenIzNjR4eF9idWZmZXIgKmJ1ZiwKKwkJCSAgICAgaW50IGpwZ3NpemUpCit7CisJaW50IHBvcyA9IDA7CisJc3RydWN0IHRpbWV2YWwgdHM7CisJY29uc3QgY2hhciAqdG1wYnVmOworCWNoYXIgKnZidWYgPSB2aWRlb2J1Zl90b192bWFsbG9jKCZidWYtPnZiKTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfZnJhbWU7CisJc3RydWN0IHpyMzY0eHhfZnJhbWVpICpmcm07CisKKwlpZiAoIXZidWYpCisJCXJldHVybjsKKworCWxhc3RfZnJhbWUgPSBjYW0tPmxhc3RfZnJhbWU7CisJaWYgKGxhc3RfZnJhbWUgIT0gLTEpIHsKKwkJZnJtID0gJmNhbS0+YnVmZmVyLmZyYW1lW2xhc3RfZnJhbWVdOworCQl0bXBidWYgPSAoY29uc3QgY2hhciAqKWNhbS0+YnVmZmVyLmZyYW1lW2xhc3RfZnJhbWVdLmxwdmJpdHM7CisJCXN3aXRjaCAoYnVmLT5mbXQtPmZvdXJjYykgeworCQljYXNlIFY0TDJfUElYX0ZNVF9KUEVHOgorCQkJYnVmLT52Yi5zaXplID0ganBnc2l6ZTsKKwkJCW1lbWNweSh2YnVmLCB0bXBidWYsIGJ1Zi0+dmIuc2l6ZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6IHVua25vd24gZm9ybWF0P1xuIik7CisJCX0KKwkJY2FtLT5sYXN0X2ZyYW1lID0gLTE7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6ID09PT09PT1ubyBmcmFtZVxuIik7CisJCXJldHVybjsKKwl9CisJREJHKCIlczogQnVmZmVyIDB4JTA4bHggc2l6ZT0gJWRcbiIsIF9fZnVuY19fLAorCQkodW5zaWduZWQgbG9uZyl2YnVmLCBwb3MpOworCS8qIHRlbGwgdjRsIGJ1ZmZlciB3YXMgZmlsbGVkICovCisKKwlidWYtPnZiLmZpZWxkX2NvdW50ID0gY2FtLT5mcmFtZV9jb3VudCAqIDI7CisJZG9fZ2V0dGltZW9mZGF5KCZ0cyk7CisJYnVmLT52Yi50cyA9IHRzOworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ET05FOworfQorCitzdGF0aWMgaW50IHpyMzY0eHhfZ290X2ZyYW1lKHN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtLCBpbnQganBnc2l6ZSkKK3sKKwlzdHJ1Y3QgenIzNjR4eF9kbWFxdWV1ZSAqZG1hX3EgPSAmY2FtLT52aWRxOworCXN0cnVjdCB6cjM2NHh4X2J1ZmZlciAqYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWludCByYyA9IDA7CisKKwlEQkcoIndha2V1cDogJXBcbiIsICZkbWFfcSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+c2xvY2ssIGZsYWdzKTsKKworCWlmIChsaXN0X2VtcHR5KCZkbWFfcS0+YWN0aXZlKSkgeworCQlEQkcoIk5vIGFjdGl2ZSBxdWV1ZSB0byBzZXJ2ZVxuIik7CisJCXJjID0gLTE7CisJCWdvdG8gdW5sb2NrOworCX0KKwlidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwKKwkJCSBzdHJ1Y3QgenIzNjR4eF9idWZmZXIsIHZiLnF1ZXVlKTsKKworCWlmICghd2FpdHF1ZXVlX2FjdGl2ZSgmYnVmLT52Yi5kb25lKSkgeworCQkvKiBubyBvbmUgYWN0aXZlICovCisJCXJjID0gLTE7CisJCWdvdG8gdW5sb2NrOworCX0KKwlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CisJZG9fZ2V0dGltZW9mZGF5KCZidWYtPnZiLnRzKTsKKwlEQkcoIlslcC8lZF0gd2FrZXVwXG4iLCBidWYsIGJ1Zi0+dmIuaSk7CisJenIzNjR4eF9maWxsYnVmZihjYW0sIGJ1ZiwganBnc2l6ZSk7CisJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKKwlEQkcoIndha2V1cCBbYnVmL2ldIFslcC8lZF1cbiIsIGJ1ZiwgYnVmLT52Yi5pKTsKK3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPnNsb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gbW92ZXMgdGhlIHVzYiBzdHJlYW0gcmVhZCBwaXBlIGRhdGEKKyAqIGludG8gdGhlIHN5c3RlbSBidWZmZXJzLgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIEVBR0FJTiBpZiBtb3JlIGRhdGEgdG8gcHJvY2VzcyAoY2FsbCB0aGlzCisgKiBmdW5jdGlvbiBhZ2FpbikuCisgKi8KK3N0YXRpYyBpbnQgenIzNjR4eF9yZWFkX3ZpZGVvX2NhbGxiYWNrKHN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtLAorCQkJCQlzdHJ1Y3QgenIzNjR4eF9waXBlaW5mbyAqcGlwZV9pbmZvLAorCQkJCQlzdHJ1Y3QgdXJiICpwdXJiKQoreworCXVuc2lnbmVkIGNoYXIgKnBkZXN0OworCXVuc2lnbmVkIGNoYXIgKnBzcmM7CisJczMyIGlkeCA9IC0xOworCXN0cnVjdCB6cjM2NHh4X2ZyYW1laSAqZnJtOworCWludCBpID0gMDsKKwl1bnNpZ25lZCBjaGFyICpwdHIgPSBOVUxMOworCisJX0RCRygiYnVmZmVyIHRvIHVzZXJcbiIpOworCWlkeCA9IGNhbS0+Y3VyX2ZyYW1lOworCWZybSA9ICZjYW0tPmJ1ZmZlci5mcmFtZVtpZHhdOworCisJLyogc3dhcCBieXRlcyBpZiBjYW1lcmEgbmVlZHMgaXQgKi8KKwlpZiAoY2FtLT5tZXRob2QgPT0gTUVUSE9EMCkgeworCQl1MTYgKmJ1ZiA9ICh1MTYgKilwaXBlX2luZm8tPnRyYW5zZmVyX2J1ZmZlcjsKKwkJZm9yIChpID0gMDsgaSA8IHB1cmItPmFjdHVhbF9sZW5ndGgvMjsgaSsrKQorCQkJc3dhYjE2cyhidWYgKyBpKTsKKwl9CisKKwkvKiBzZWFyY2ggZG9uZS4gIG5vdyBmaW5kIG91dCBpZiBzaG91bGQgYmUgYWNxdWlyaW5nICovCisJaWYgKCFjYW0tPmJfYWNxdWlyZSkgeworCQkvKiB3ZSBmb3VuZCBhIGZyYW1lLCBidXQgdGhpcyBjaGFubmVsIGlzIHR1cm5lZCBvZmYgKi8KKwkJZnJtLT51bFN0YXRlID0gWlIzNjRYWF9SRUFEX0lETEU7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBzcmMgPSAodTggKilwaXBlX2luZm8tPnRyYW5zZmVyX2J1ZmZlcjsKKwlwdHIgPSBwZGVzdCA9IGZybS0+bHB2Yml0czsKKworCWlmIChmcm0tPnVsU3RhdGUgPT0gWlIzNjRYWF9SRUFEX0lETEUpIHsKKwkJZnJtLT51bFN0YXRlID0gWlIzNjRYWF9SRUFEX0ZSQU1FOworCQlmcm0tPmN1cl9zaXplID0gMDsKKworCQlfREJHKCJqcGVnIGhlYWRlciwgIik7CisJCW1lbWNweShwdHIsIGhlYWRlcjEsIHNpemVvZihoZWFkZXIxKSk7CisJCXB0ciArPSBzaXplb2YoaGVhZGVyMSk7CisJCWhlYWRlcjMgPSAwOworCQltZW1jcHkocHRyLCAmaGVhZGVyMywgMSk7CisJCXB0cisrOworCQltZW1jcHkocHRyLCBwc3JjLCA2NCk7CisJCXB0ciArPSA2NDsKKwkJaGVhZGVyMyA9IDE7CisJCW1lbWNweShwdHIsICZoZWFkZXIzLCAxKTsKKwkJcHRyKys7CisJCW1lbWNweShwdHIsIHBzcmMgKyA2NCwgNjQpOworCQlwdHIgKz0gNjQ7CisJCW1lbWNweShwdHIsIGhlYWRlcjIsIHNpemVvZihoZWFkZXIyKSk7CisJCXB0ciArPSBzaXplb2YoaGVhZGVyMik7CisJCW1lbWNweShwdHIsIHBzcmMgKyAxMjgsCisJCSAgICAgICBwdXJiLT5hY3R1YWxfbGVuZ3RoIC0gMTI4KTsKKwkJcHRyICs9IHB1cmItPmFjdHVhbF9sZW5ndGggLSAxMjg7CisJCV9EQkcoImhlYWRlciA6ICVkICVkICVkICVkICVkICVkICVkICVkICVkXG4iLAorCQkgICAgcHNyY1swXSwgcHNyY1sxXSwgcHNyY1syXSwKKwkJICAgIHBzcmNbM10sIHBzcmNbNF0sIHBzcmNbNV0sCisJCSAgICBwc3JjWzZdLCBwc3JjWzddLCBwc3JjWzhdKTsKKwkJZnJtLT5jdXJfc2l6ZSA9IHB0ciAtIHBkZXN0OworCX0gZWxzZSB7CisJCWlmIChmcm0tPmN1cl9zaXplICsgcHVyYi0+YWN0dWFsX2xlbmd0aCA+IE1BWF9GUkFNRV9TSVpFKSB7CisJCQlkZXZfaW5mbygmY2FtLT51ZGV2LT5kZXYsCisJCQkJICIlczogYnVmZmVyICglZCBieXRlcykgdG9vIHNtYWxsIHRvIGhvbGQgIgorCQkJCSAiZnJhbWUgZGF0YS4gRGlzY2FyZGluZyBmcmFtZSBkYXRhLlxuIiwKKwkJCQkgX19mdW5jX18sIE1BWF9GUkFNRV9TSVpFKTsKKwkJfSBlbHNlIHsKKwkJCXBkZXN0ICs9IGZybS0+Y3VyX3NpemU7CisJCQltZW1jcHkocGRlc3QsIHBzcmMsIHB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJZnJtLT5jdXJfc2l6ZSArPSBwdXJiLT5hY3R1YWxfbGVuZ3RoOworCQl9CisJfQorCS8qX0RCRygiY3VyX3NpemUgJWx1IHVyYiBzaXplICVkXG4iLCBmcm0tPmN1cl9zaXplLAorCQlwdXJiLT5hY3R1YWxfbGVuZ3RoKTsqLworCisJaWYgKHB1cmItPmFjdHVhbF9sZW5ndGggPCBwaXBlX2luZm8tPnRyYW5zZmVyX3NpemUpIHsKKwkJX0RCRygiKioqKioqKioqKioqKioqKkJ1ZmZlclslZF1mdWxsKioqKioqKioqKioqKlxuIiwgaWR4KTsKKwkJY2FtLT5sYXN0X2ZyYW1lID0gY2FtLT5jdXJfZnJhbWU7CisJCWNhbS0+Y3VyX2ZyYW1lKys7CisJCS8qIGVuZCBvZiBzeXN0ZW0gZnJhbWUgcmluZyBidWZmZXIsIHN0YXJ0IGF0IHplcm8gKi8KKwkJaWYgKGNhbS0+Y3VyX2ZyYW1lID09IGNhbS0+YnVmZmVyLmR3RnJhbWVzKQorCQkJY2FtLT5jdXJfZnJhbWUgPSAwOworCisJCS8qIGZyYW1lIHJlYWR5ICovCisJCS8qIGdvIGJhY2sgdG8gZmluZCB0aGUgSlBFRyBFT0kgbWFya2VyICovCisJCXB0ciA9IHBkZXN0ID0gZnJtLT5scHZiaXRzOworCQlwdHIgKz0gZnJtLT5jdXJfc2l6ZSAtIDI7CisJCXdoaWxlIChwdHIgPiBwZGVzdCkgeworCQkJaWYgKCpwdHIgPT0gMHhGRiAmJiAqKHB0ciArIDEpID09IDB4RDkKKwkJCSAgICAmJiAqKHB0ciArIDIpID09IDB4RkYpCisJCQkJYnJlYWs7CisJCQlwdHItLTsKKwkJfQorCQlpZiAocHRyID09IHBkZXN0KQorCQkJREJHKCJObyBFT0kgbWFya2VyXG4iKTsKKworCQkvKiBTb21ldGltZXMgdGhlcmUgaXMganVuayBkYXRhIGluIHRoZSBtaWRkbGUgb2YgdGhlIHBpY3R1cmUsCisJCSAqIHdlIHdhbnQgdG8gc2tpcCB0aGlzIGJvZ3VzIGZyYW1lcyAqLworCQl3aGlsZSAocHRyID4gcGRlc3QpIHsKKwkJCWlmICgqcHRyID09IDB4RkYgJiYgKihwdHIgKyAxKSA9PSAweEZGCisJCQkgICAgJiYgKihwdHIgKyAyKSA9PSAweEZGKQorCQkJCWJyZWFrOworCQkJcHRyLS07CisJCX0KKwkJaWYgKHB0ciAhPSBwZGVzdCkgeworCQkJREJHKCJCb2d1cyBmcmFtZSA/ICVkXG4iLCArKyhjYW0tPm5iKSk7CisJCX0gZWxzZSBpZiAoY2FtLT5iX2FjcXVpcmUpIHsKKwkJCS8qIHdlIHNraXAgdGhlIDIgZmlyc3QgZnJhbWVzIHdoaWNoIGFyZSB1c3VhbGx5IGJ1Z2d5ICovCisJCQlpZiAoY2FtLT5za2lwKQorCQkJCWNhbS0+c2tpcC0tOworCQkJZWxzZSB7CisJCQkJX0RCRygianBlZyglbHUpOiAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwKKwkJCQkgICAgZnJtLT5jdXJfc2l6ZSwKKwkJCQkgICAgcGRlc3RbMF0sIHBkZXN0WzFdLCBwZGVzdFsyXSwgcGRlc3RbM10sCisJCQkJICAgIHBkZXN0WzRdLCBwZGVzdFs1XSwgcGRlc3RbNl0sIHBkZXN0WzddKTsKKworCQkJCXpyMzY0eHhfZ290X2ZyYW1lKGNhbSwgZnJtLT5jdXJfc2l6ZSk7CisJCQl9CisJCX0KKwkJY2FtLT5mcmFtZV9jb3VudCsrOworCQlmcm0tPnVsU3RhdGUgPSBaUjM2NFhYX1JFQURfSURMRTsKKwkJZnJtLT5jdXJfc2l6ZSA9IDA7CisJfQorCS8qIGRvbmUgc3VjY2Vzc2Z1bGx5ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVzX2dldChzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbSkKK3sKKwkvKiBpcyBpdCBmcmVlPyAqLworCW11dGV4X2xvY2soJmNhbS0+bG9jayk7CisJaWYgKGNhbS0+cmVzb3VyY2VzKSB7CisJCS8qIG5vLCBzb21lb25lIGVsc2UgdXNlcyBpdCAqLworCQltdXRleF91bmxvY2soJmNhbS0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwkvKiBpdCdzIGZyZWUsIGdyYWIgaXQgKi8KKwljYW0tPnJlc291cmNlcyA9IDE7CisJX0RCRygicmVzOiBnZXRcbiIpOworCW11dGV4X3VubG9jaygmY2FtLT5sb2NrKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmVzX2NoZWNrKHN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtKQoreworCXJldHVybiBjYW0tPnJlc291cmNlczsKK30KKworc3RhdGljIHZvaWQgcmVzX2ZyZWUoc3RydWN0IHpyMzY0eHhfY2FtZXJhICpjYW0pCit7CisJbXV0ZXhfbG9jaygmY2FtLT5sb2NrKTsKKwljYW0tPnJlc291cmNlcyA9IDA7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmxvY2spOworCV9EQkcoInJlczogcHV0XG4iKTsKK30KIAogc3RhdGljIGludCB6cjM2NHh4X3ZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7Ci0Jc3RyY3B5KGNhcC0+ZHJpdmVyLCBEUklWRVJfREVTQyk7Ci0JY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfUkVBRFdSSVRFOworCXN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXN0cmxjcHkoY2FwLT5kcml2ZXIsIERSSVZFUl9ERVNDLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKKwlzdHJsY3B5KGNhcC0+Y2FyZCwgY2FtLT51ZGV2LT5wcm9kdWN0LCBzaXplb2YoY2FwLT5jYXJkKSk7CisJc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXZfbmFtZSgmY2FtLT51ZGV2LT5kZXYpLAorCQlzaXplb2YoY2FwLT5idXNfaW5mbykpOworCWNhcC0+dmVyc2lvbiA9IFpSMzY0WFhfVkVSU0lPTl9DT0RFOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCQkgICAgVjRMMl9DQVBfUkVBRFdSSVRFIHwKKwkJCSAgICBWNEwyX0NBUF9TVFJFQU1JTkc7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDU4LDEyICs3NzgsMTEgQEAKIHN0YXRpYyBpbnQgenIzNjR4eF92aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmMpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IHpyMzY0eHhfY2FtZXJhICpjYW07CiAKLQlpZiAodmRldiA9PSBOVUxMKQorCWlmIChmaWxlID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwotCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCWNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGMtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgpAQCAtNDcyLDcgKzc5MSw3IEBACiAJCWMtPm1pbmltdW0gPSAwOwogCQljLT5tYXhpbXVtID0gMTI3OwogCQljLT5zdGVwID0gMTsKLQkJYy0+ZGVmYXVsdF92YWx1ZSA9IGNhbS0+YnJpZ2h0bmVzczsKKwkJYy0+ZGVmYXVsdF92YWx1ZSA9IGNhbS0+bW9kZS5icmlnaHRuZXNzOwogCQljLT5mbGFncyA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC00ODQsMzYgKzgwMyw0MiBAQAogc3RhdGljIGludCB6cjM2NHh4X3ZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmMpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IHpyMzY0eHhfY2FtZXJhICpjYW07CisJaW50IHRlbXA7CiAKLQlpZiAodmRldiA9PSBOVUxMKQorCWlmIChmaWxlID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwotCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCWNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGMtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQljYW0tPmJyaWdodG5lc3MgPSBjLT52YWx1ZTsKKwkJY2FtLT5tb2RlLmJyaWdodG5lc3MgPSBjLT52YWx1ZTsKKwkJLyogaGFyZHdhcmUgYnJpZ2h0bmVzcyAqLworCQltdXRleF9sb2NrKCZjYW0tPmxvY2spOworCQlzZW5kX2NvbnRyb2xfbXNnKGNhbS0+dWRldiwgMSwgMHgyMDAxLCAwLCBOVUxMLCAwKTsKKwkJdGVtcCA9ICgweDYwIDw8IDgpICsgMTI3IC0gY2FtLT5tb2RlLmJyaWdodG5lc3M7CisJCXNlbmRfY29udHJvbF9tc2coY2FtLT51ZGV2LCAxLCB0ZW1wLCAwLCBOVUxMLCAwKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmxvY2spOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB6cjM2NHh4X3ZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmMpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IHpyMzY0eHhfY2FtZXJhICpjYW07CiAKLQlpZiAodmRldiA9PSBOVUxMKQorCWlmIChmaWxlID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwotCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCWNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGMtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQljLT52YWx1ZSA9IGNhbS0+YnJpZ2h0bmVzczsKKwkJYy0+dmFsdWUgPSBjYW0tPm1vZGUuYnJpZ2h0bmVzczsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MjcsNDcgKzg1Miw2MyBAQAogCWlmIChmLT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCWYtPmZsYWdzID0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOwotCXN0cmNweShmLT5kZXNjcmlwdGlvbiwgIkpQRUciKTsKLQlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9KUEVHOworCXN0cmNweShmLT5kZXNjcmlwdGlvbiwgZm9ybWF0c1swXS5uYW1lKTsKKwlmLT5waXhlbGZvcm1hdCA9IGZvcm1hdHNbMF0uZm91cmNjOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgY2hhciAqZGVjb2RlX2ZvdXJjYyhfX3UzMiBwaXhlbGZvcm1hdCwgY2hhciAqYnVmKQoreworCWJ1ZlswXSA9IHBpeGVsZm9ybWF0ICYgMHhmZjsKKwlidWZbMV0gPSAocGl4ZWxmb3JtYXQgPj4gOCkgJiAweGZmOworCWJ1ZlsyXSA9IChwaXhlbGZvcm1hdCA+PiAxNikgJiAweGZmOworCWJ1ZlszXSA9IChwaXhlbGZvcm1hdCA+PiAyNCkgJiAweGZmOworCWJ1Zls0XSA9ICdcMCc7CisJcmV0dXJuIGJ1ZjsKK30KKwogc3RhdGljIGludCB6cjM2NHh4X3ZpZGlvY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtOworCXN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwljaGFyIHBpeGVsZm9ybWF0X25hbWVbNV07CiAKLQlpZiAodmRldiA9PSBOVUxMKQorCWlmIChjYW0gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CiAKLQlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfSlBFRykKKwlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfSlBFRykgeworCQlEQkcoIiVzOiB1bnN1cHBvcnRlZCBwaXhlbGZvcm1hdCBWNEwyX1BJWF9GTVRfJXNcbiIsIF9fZnVuY19fLAorCQkgICAgZGVjb2RlX2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0LCBwaXhlbGZvcm1hdF9uYW1lKSk7CiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChmLT5mbXQucGl4LmZpZWxkICE9IFY0TDJfRklFTERfQU5ZICYmCi0JICAgIGYtPmZtdC5waXguZmllbGQgIT0gVjRMMl9GSUVMRF9OT05FKQotCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIShmLT5mbXQucGl4LndpZHRoID09IDE2MCAmJiBmLT5mbXQucGl4LmhlaWdodCA9PSAxMjApICYmCisJICAgICEoZi0+Zm10LnBpeC53aWR0aCA9PSA2NDAgJiYgZi0+Zm10LnBpeC5oZWlnaHQgPT0gNDgwKSkgeworCQlmLT5mbXQucGl4LndpZHRoID0gMzIwOworCQlmLT5mbXQucGl4LmhlaWdodCA9IDI0MDsKKwl9CisKIAlmLT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwotCWYtPmZtdC5waXgud2lkdGggPSBjYW0tPndpZHRoOwotCWYtPmZtdC5waXguaGVpZ2h0ID0gY2FtLT5oZWlnaHQ7CiAJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBmLT5mbXQucGl4LndpZHRoICogMjsKIAlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGYtPmZtdC5waXguaGVpZ2h0ICogZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmU7CiAJZi0+Zm10LnBpeC5jb2xvcnNwYWNlID0gMDsKIAlmLT5mbXQucGl4LnByaXYgPSAwOworCURCRygiJXM6IFY0TDJfUElYX0ZNVF8lcyAoJWQpIG9rIVxuIiwgX19mdW5jX18sCisJICAgIGRlY29kZV9mb3VyY2MoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCwgcGl4ZWxmb3JtYXRfbmFtZSksCisJICAgIGYtPmZtdC5waXguZmllbGQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHpyMzY0eHhfdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbTsKIAotCWlmICh2ZGV2ID09IE5VTEwpCisJaWYgKGZpbGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfSlBFRzsKKwlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gZm9ybWF0c1swXS5mb3VyY2M7CiAJZi0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKIAlmLT5mbXQucGl4LndpZHRoID0gY2FtLT53aWR0aDsKIAlmLT5mbXQucGl4LmhlaWdodCA9IGNhbS0+aGVpZ2h0OwpAQCAtNTgxLDM4ICs5MjIsMzI3IEBACiBzdGF0aWMgaW50IHpyMzY0eHhfdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbTsKKwlzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxID0gJmNhbS0+dmJfdmlkcTsKKwljaGFyIHBpeGVsZm9ybWF0X25hbWVbNV07CisJaW50IHJldCA9IHpyMzY0eHhfdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBjYW0sIGYpOworCWludCBpOwogCi0JaWYgKHZkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKLQlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfSlBFRykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGYtPmZtdC5waXguZmllbGQgIT0gVjRMMl9GSUVMRF9BTlkgJiYKLQkgICAgZi0+Zm10LnBpeC5maWVsZCAhPSBWNEwyX0ZJRUxEX05PTkUpCi0JCXJldHVybiAtRUlOVkFMOwotCWYtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Ci0JZi0+Zm10LnBpeC53aWR0aCA9IGNhbS0+d2lkdGg7Ci0JZi0+Zm10LnBpeC5oZWlnaHQgPSBjYW0tPmhlaWdodDsKKwltdXRleF9sb2NrKCZxLT52Yl9sb2NrKTsKKworCWlmICh2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCZjYW0tPnZiX3ZpZHEpKSB7CisJCURCRygiJXMgcXVldWUgYnVzeVxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChyZXNfY2hlY2soY2FtKSkgeworCQlEQkcoIiVzIGNhbid0IGNoYW5nZSBmb3JtYXQgYWZ0ZXIgc3RhcnRlZFxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWNhbS0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOworCWNhbS0+aGVpZ2h0ID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisJZGV2X2luZm8oJmNhbS0+dWRldi0+ZGV2LCAiJXM6ICVkeCVkIG1vZGUgc2VsZWN0ZWRcbiIsIF9fZnVuY19fLAorCQkgY2FtLT53aWR0aCwgY2FtLT5oZWlnaHQpOwogCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gZi0+Zm10LnBpeC53aWR0aCAqIDI7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmLT5mbXQucGl4LmhlaWdodCAqIGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lOwogCWYtPmZtdC5waXguY29sb3JzcGFjZSA9IDA7CiAJZi0+Zm10LnBpeC5wcml2ID0gMDsKLQlEQkcoIm9rISIpOworCWNhbS0+dmJfdmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisJY2FtLT5tb2RlLmNvbG9yID0gVjRMMl9QSVhfRk1UX0pQRUc7CisKKwlpZiAoZi0+Zm10LnBpeC53aWR0aCA9PSAxNjAgJiYgZi0+Zm10LnBpeC5oZWlnaHQgPT0gMTIwKQorCQltb2RlID0gMTsKKwllbHNlIGlmIChmLT5mbXQucGl4LndpZHRoID09IDY0MCAmJiBmLT5mbXQucGl4LmhlaWdodCA9PSA0ODApCisJCW1vZGUgPSAyOworCWVsc2UKKwkJbW9kZSA9IDA7CisKKwltMGQxWzBdID0gbW9kZTsKKwltMVsyXS52YWx1ZSA9IDB4ZjAwMCArIG1vZGU7CisJbTJbMV0udmFsdWUgPSAweGYwMDAgKyBtb2RlOworCWhlYWRlcjJbNDM3XSA9IGNhbS0+aGVpZ2h0IC8gMjU2OworCWhlYWRlcjJbNDM4XSA9IGNhbS0+aGVpZ2h0ICUgMjU2OworCWhlYWRlcjJbNDM5XSA9IGNhbS0+d2lkdGggLyAyNTY7CisJaGVhZGVyMls0NDBdID0gY2FtLT53aWR0aCAlIDI1NjsKKworCWZvciAoaSA9IDA7IGluaXRbY2FtLT5tZXRob2RdW2ldLnNpemUgIT0gLTE7IGkrKykgeworCQlyZXQgPQorCQkgICAgc2VuZF9jb250cm9sX21zZyhjYW0tPnVkZXYsIDEsIGluaXRbY2FtLT5tZXRob2RdW2ldLnZhbHVlLAorCQkJCSAgICAgMCwgaW5pdFtjYW0tPm1ldGhvZF1baV0uYnl0ZXMsCisJCQkJICAgICBpbml0W2NhbS0+bWV0aG9kXVtpXS5zaXplKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJmNhbS0+dWRldi0+ZGV2LAorCQkJICAgImVycm9yIGR1cmluZyByZXNvbHV0aW9uIGNoYW5nZSBzZXF1ZW5jZTogJWRcbiIsIGkpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBBZGRlZCBzb21lIGRlbGF5IGhlcmUsIHNpbmNlIG9wZW5pbmcvY2xvc2luZyB0aGUgY2FtZXJhIHF1aWNrbHksCisJICogbGlrZSBFa2lnYSBkb2VzIGR1cmluZyBpdHMgc3RhcnR1cCwgY2FuIGNyYXNoIHRoZSB3ZWJjYW0KKwkgKi8KKwltZGVsYXkoMTAwKTsKKwljYW0tPnNraXAgPSAyOworCXJldCA9IDA7CisKK291dDoKKwltdXRleF91bmxvY2soJnEtPnZiX2xvY2spOworCisJREJHKCIlczogVjRMMl9QSVhfRk1UXyVzICglZCkgb2shXG4iLCBfX2Z1bmNfXywKKwkgICAgZGVjb2RlX2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0LCBwaXhlbGZvcm1hdF9uYW1lKSwKKwkgICAgZi0+Zm10LnBpeC5maWVsZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB6cjM2NHh4X3ZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcCkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHpyMzY0eHhfY2FtZXJhICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXJjID0gdmlkZW9idWZfcmVxYnVmcygmY2FtLT52Yl92aWRxLCBwKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgenIzNjR4eF92aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCit7CisJaW50IHJjOworCXN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlyYyA9IHZpZGVvYnVmX3F1ZXJ5YnVmKCZjYW0tPnZiX3ZpZHEsIHApOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB6cjM2NHh4X3ZpZGlvY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCXZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCWludCByYzsKKwlzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJX0RCRygiJXNcbiIsIF9fZnVuY19fKTsKKwlyYyA9IHZpZGVvYnVmX3FidWYoJmNhbS0+dmJfdmlkcSwgcCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHpyMzY0eHhfdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCXZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfYnVmZmVyICpwKQoreworCWludCByYzsKKwlzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJX0RCRygiJXNcbiIsIF9fZnVuY19fKTsKKwlyYyA9IHZpZGVvYnVmX2RxYnVmKCZjYW0tPnZiX3ZpZHEsIHAsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfcGlwZV9jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnB1cmIpCit7CisJc3RydWN0IHpyMzY0eHhfcGlwZWluZm8gKnBpcGVfaW5mbzsKKwlzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbTsKKwlpbnQgcGlwZTsKKworCXBpcGVfaW5mbyA9IHB1cmItPmNvbnRleHQ7CisJX0RCRygiJXMgJXAsIHN0YXR1cyAlZFxuIiwgX19mdW5jX18sIHB1cmIsIHB1cmItPnN0YXR1cyk7CisJaWYgKHBpcGVfaW5mbyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiBubyBjb250ZXh0IVxuIik7CisJCXJldHVybjsKKwl9CisKKwljYW0gPSBwaXBlX2luZm8tPmNhbTsKKwlpZiAoY2FtID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6IG5vIGNvbnRleHQhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHNodXR0aW5nIGRvd24sIGRvIG5vdCByZXN1Ym1pdCwgZXhpdCBpbW1lZGlhdGVseSAqLworCWlmIChwdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikgeworCQlEQkcoIiVzLCBlcnIgc2h1dGRvd25cbiIsIF9fZnVuY19fKTsKKwkJcGlwZV9pbmZvLT5lcnJfY291bnQrKzsKKwkJcmV0dXJuOworCX0KKworCWlmIChwaXBlX2luZm8tPnN0YXRlID09IDApIHsKKwkJREJHKCJleGl0aW5nIFVTQiBwaXBlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwdXJiLT5hY3R1YWxfbGVuZ3RoIDwgMCB8fAorCSAgICBwdXJiLT5hY3R1YWxfbGVuZ3RoID4gcGlwZV9pbmZvLT50cmFuc2Zlcl9zaXplKSB7CisJCWRldl9lcnIoJmNhbS0+dWRldi0+ZGV2LCAid3JvbmcgbnVtYmVyIG9mIGJ5dGVzXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwdXJiLT5zdGF0dXMgPT0gMCkKKwkJenIzNjR4eF9yZWFkX3ZpZGVvX2NhbGxiYWNrKGNhbSwgcGlwZV9pbmZvLCBwdXJiKTsKKwllbHNlIHsKKwkJcGlwZV9pbmZvLT5lcnJfY291bnQrKzsKKwkJREJHKCIlczogZmFpbGVkIFVSQiAlZFxuIiwgX19mdW5jX18sIHB1cmItPnN0YXR1cyk7CisJfQorCisJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShjYW0tPnVkZXYsIGNhbS0+cmVhZF9lbmRwb2ludCk7CisKKwkvKiByZXVzZSB1cmIgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihwaXBlX2luZm8tPnN0cmVhbV91cmIsIGNhbS0+dWRldiwKKwkJCSAgcGlwZSwKKwkJCSAgcGlwZV9pbmZvLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgIHBpcGVfaW5mby0+dHJhbnNmZXJfc2l6ZSwKKwkJCSAgcmVhZF9waXBlX2NvbXBsZXRpb24sIHBpcGVfaW5mbyk7CisKKwlpZiAocGlwZV9pbmZvLT5zdGF0ZSAhPSAwKSB7CisJCXB1cmItPnN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHBpcGVfaW5mby0+c3RyZWFtX3VyYiwKKwkJCQkJICAgICAgR0ZQX0FUT01JQyk7CisKKwkJaWYgKHB1cmItPnN0YXR1cykKKwkJCWRldl9lcnIoJmNhbS0+dWRldi0+ZGV2LAorCQkJCSJlcnJvciBzdWJtaXR0aW5nIHVyYiAoZXJyb3I9JWkpXG4iLAorCQkJCXB1cmItPnN0YXR1cyk7CisJfSBlbHNlCisJCURCRygicmVhZCBwaXBlIGNvbXBsZXRlIHN0YXRlIDBcbiIpOworfQorCitzdGF0aWMgaW50IHpyMzY0eHhfc3RhcnRfcmVhZHBpcGUoc3RydWN0IHpyMzY0eHhfY2FtZXJhICpjYW0pCit7CisJaW50IHBpcGU7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgenIzNjR4eF9waXBlaW5mbyAqcGlwZV9pbmZvID0gY2FtLT5waXBlOworCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUoY2FtLT51ZGV2LCBjYW0tPnJlYWRfZW5kcG9pbnQpOworCURCRygiJXM6IHN0YXJ0IHBpcGUgSU4geCV4XG4iLCBfX2Z1bmNfXywgY2FtLT5yZWFkX2VuZHBvaW50KTsKKworCXBpcGVfaW5mby0+c3RhdGUgPSAxOworCXBpcGVfaW5mby0+ZXJyX2NvdW50ID0gMDsKKwlwaXBlX2luZm8tPnN0cmVhbV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghcGlwZV9pbmZvLT5zdHJlYW1fdXJiKSB7CisJCWRldl9lcnIoJmNhbS0+dWRldi0+ZGV2LCAiUmVhZFN0cmVhbTogVW5hYmxlIHRvIGFsbG9jIFVSQlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkvKiB0cmFuc2ZlciBidWZmZXIgYWxsb2NhdGVkIGluIGJvYXJkX2luaXQgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihwaXBlX2luZm8tPnN0cmVhbV91cmIsIGNhbS0+dWRldiwKKwkJCSAgcGlwZSwKKwkJCSAgcGlwZV9pbmZvLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgIHBpcGVfaW5mby0+dHJhbnNmZXJfc2l6ZSwKKwkJCSAgcmVhZF9waXBlX2NvbXBsZXRpb24sIHBpcGVfaW5mbyk7CisKKwlEQkcoInN1Ym1pdHRpbmcgVVJCICVwXG4iLCBwaXBlX2luZm8tPnN0cmVhbV91cmIpOworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBpcGVfaW5mby0+c3RyZWFtX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogc3RhcnQgcmVhZCBwaXBlIGZhaWxlZFxuIik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHpyMzY0eHhfc3RvcF9yZWFkcGlwZShzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbSkKK3sKKwlzdHJ1Y3QgenIzNjR4eF9waXBlaW5mbyAqcGlwZV9pbmZvOworCisJaWYgKGNhbSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiBpbnZhbGlkIGRldmljZVxuIik7CisJCXJldHVybjsKKwl9CisJREJHKCJzdG9wIHJlYWQgcGlwZVxuIik7CisJcGlwZV9pbmZvID0gY2FtLT5waXBlOworCWlmIChwaXBlX2luZm8pIHsKKwkJaWYgKHBpcGVfaW5mby0+c3RhdGUgIT0gMCkKKwkJCXBpcGVfaW5mby0+c3RhdGUgPSAwOworCisJCWlmIChwaXBlX2luZm8tPnN0cmVhbV91cmIpIHsKKwkJCS8qIGNhbmNlbCB1cmIgKi8KKwkJCXVzYl9raWxsX3VyYihwaXBlX2luZm8tPnN0cmVhbV91cmIpOworCQkJdXNiX2ZyZWVfdXJiKHBpcGVfaW5mby0+c3RyZWFtX3VyYik7CisJCQlwaXBlX2luZm8tPnN0cmVhbV91cmIgPSBOVUxMOworCQl9CisJfQorCXJldHVybjsKK30KKworLyogc3RhcnRzIGFjcXVpc2l0aW9uIHByb2Nlc3MgKi8KK3N0YXRpYyBpbnQgenIzNjR4eF9zdGFydF9hY3F1aXJlKHN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtKQoreworCWludCBqOworCisJREJHKCJzdGFydCBhY3F1aXJlXG4iKTsKKworCWNhbS0+bGFzdF9mcmFtZSA9IC0xOworCWNhbS0+Y3VyX2ZyYW1lID0gMDsKKwlmb3IgKGogPSAwOyBqIDwgRlJBTUVTOyBqKyspIHsKKwkJY2FtLT5idWZmZXIuZnJhbWVbal0udWxTdGF0ZSA9IFpSMzY0WFhfUkVBRF9JRExFOworCQljYW0tPmJ1ZmZlci5mcmFtZVtqXS5jdXJfc2l6ZSA9IDA7CisJfQorCWNhbS0+Yl9hY3F1aXJlID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgenIzNjR4eF9zdG9wX2FjcXVpcmUoc3RydWN0IHpyMzY0eHhfY2FtZXJhICpjYW0pCit7CisJY2FtLT5iX2FjcXVpcmUgPSAwOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHpyMzY0eHhfdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCSAgIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQogewotCXJldHVybiAwOworCXN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlpbnQgajsKKwlpbnQgcmVzOworCisJREJHKCIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGNhbS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJZGV2X2VycigmY2FtLT51ZGV2LT5kZXYsICJpbnZhbGlkIGZoIHR5cGUwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChjYW0tPnR5cGUgIT0gdHlwZSkgeworCQlkZXZfZXJyKCZjYW0tPnVkZXYtPmRldiwgImludmFsaWQgZmggdHlwZTFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIXJlc19nZXQoY2FtKSkgeworCQlkZXZfZXJyKCZjYW0tPnVkZXYtPmRldiwgInN0cmVhbSBidXN5XG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwljYW0tPmxhc3RfZnJhbWUgPSAtMTsKKwljYW0tPmN1cl9mcmFtZSA9IDA7CisJY2FtLT5mcmFtZV9jb3VudCA9IDA7CisJZm9yIChqID0gMDsgaiA8IEZSQU1FUzsgaisrKSB7CisJCWNhbS0+YnVmZmVyLmZyYW1lW2pdLnVsU3RhdGUgPSBaUjM2NFhYX1JFQURfSURMRTsKKwkJY2FtLT5idWZmZXIuZnJhbWVbal0uY3VyX3NpemUgPSAwOworCX0KKwlyZXMgPSB2aWRlb2J1Zl9zdHJlYW1vbigmY2FtLT52Yl92aWRxKTsKKwlpZiAocmVzID09IDApIHsKKwkJenIzNjR4eF9zdGFydF9hY3F1aXJlKGNhbSk7CisJfSBlbHNlIHsKKwkJcmVzX2ZyZWUoY2FtKTsKKwl9CisJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIGludCB6cjM2NHh4X3ZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJICAgIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQogeworCWludCByZXM7CisJc3RydWN0IHpyMzY0eHhfY2FtZXJhICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJREJHKCIlc1xuIiwgX19mdW5jX18pOworCWlmIChjYW0tPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCWRldl9lcnIoJmNhbS0+dWRldi0+ZGV2LCAiaW52YWxpZCBmaCB0eXBlMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoY2FtLT50eXBlICE9IHR5cGUpIHsKKwkJZGV2X2VycigmY2FtLT51ZGV2LT5kZXYsICJpbnZhbGlkIGZoIHR5cGUxXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXpyMzY0eHhfc3RvcF9hY3F1aXJlKGNhbSk7CisJcmVzID0gdmlkZW9idWZfc3RyZWFtb2ZmKCZjYW0tPnZiX3ZpZHEpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOworCXJlc19mcmVlKGNhbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYyMSwyOCArMTI1MSwxOSBAQAogc3RhdGljIGludCB6cjM2NHh4X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHpyMzY0eHhfY2FtZXJhICpjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKwlzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBjYW0tPnVkZXY7CiAJaW50IGksIGVycjsKIAotCURCRygienIzNjR4eF9vcGVuIik7CisJREJHKCIlc1xuIiwgX19mdW5jX18pOwogCi0JbXV0ZXhfbG9jaygmY2FtLT5sb2NrKTsKKwltdXRleF9sb2NrKCZjYW0tPm9wZW5fbG9jayk7CiAKIAlpZiAoY2FtLT51c2VycykgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICghY2FtLT5mcmFtZWJ1ZikgewotCQljYW0tPmZyYW1lYnVmID0gdm1hbGxvY18zMihNQVhfRlJBTUVfU0laRSAqIEZSQU1FUyk7Ci0JCWlmICghY2FtLT5mcmFtZWJ1ZikgewotCQkJZGV2X2VycigmY2FtLT51ZGV2LT5kZXYsICJ2bWFsbG9jXzMyIGZhaWxlZCFcbiIpOwotCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCiAJZm9yIChpID0gMDsgaW5pdFtjYW0tPm1ldGhvZF1baV0uc2l6ZSAhPSAtMTsgaSsrKSB7CiAJCWVyciA9CiAJCSAgICBzZW5kX2NvbnRyb2xfbXNnKHVkZXYsIDEsIGluaXRbY2FtLT5tZXRob2RdW2ldLnZhbHVlLApAQCAtNjU4LDYgKzEyNzksMTQgQEAKIAljYW0tPnNraXAgPSAyOwogCWNhbS0+dXNlcnMrKzsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSB2ZGV2OworCWNhbS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwljYW0tPmZtdCA9IGZvcm1hdHM7CisKKwl2aWRlb2J1Zl9xdWV1ZV92bWFsbG9jX2luaXQoJmNhbS0+dmJfdmlkcSwgJnpyMzY0eHhfdmlkZW9fcW9wcywKKwkJCQkgICAgTlVMTCwgJmNhbS0+c2xvY2ssCisJCQkJICAgIGNhbS0+dHlwZSwKKwkJCQkgICAgVjRMMl9GSUVMRF9OT05FLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IHpyMzY0eHhfYnVmZmVyKSwgY2FtKTsKIAogCS8qIEFkZGVkIHNvbWUgZGVsYXkgaGVyZSwgc2luY2Ugb3BlbmluZy9jbG9zaW5nIHRoZSBjYW1lcmEgcXVpY2tseSwKIAkgKiBsaWtlIEVraWdhIGRvZXMgZHVyaW5nIGl0cyBzdGFydHVwLCBjYW4gY3Jhc2ggdGhlIHdlYmNhbQpAQCAtNjY2LDI4ICsxMjk1LDcwIEBACiAJZXJyID0gMDsKIAogb3V0OgotCW11dGV4X3VubG9jaygmY2FtLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmNhbS0+b3Blbl9sb2NrKTsKKwlEQkcoIiVzOiAlZFxuIiwgX19mdW5jX18sIGVycik7CiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgenIzNjR4eF9kZXN0cm95KHN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCWlmICghY2FtKSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiLCAlczogbm8gZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJbXV0ZXhfbG9jaygmY2FtLT5vcGVuX2xvY2spOworCWlmIChjYW0tPnZkZXYpCisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGNhbS0+dmRldik7CisJY2FtLT52ZGV2ID0gTlVMTDsKKworCS8qIHN0b3BzIHRoZSByZWFkIHBpcGUgaWYgaXQgaXMgcnVubmluZyAqLworCWlmIChjYW0tPmJfYWNxdWlyZSkKKwkJenIzNjR4eF9zdG9wX2FjcXVpcmUoY2FtKTsKKworCXpyMzY0eHhfc3RvcF9yZWFkcGlwZShjYW0pOworCisJLyogcmVsZWFzZSBzeXMgYnVmZmVycyAqLworCWZvciAoaSA9IDA7IGkgPCBGUkFNRVM7IGkrKykgeworCQlpZiAoY2FtLT5idWZmZXIuZnJhbWVbaV0ubHB2Yml0cykgeworCQkJREJHKCJ2ZnJlZSAlcFxuIiwgY2FtLT5idWZmZXIuZnJhbWVbaV0ubHB2Yml0cyk7CisJCQl2ZnJlZShjYW0tPmJ1ZmZlci5mcmFtZVtpXS5scHZiaXRzKTsKKwkJfQorCQljYW0tPmJ1ZmZlci5mcmFtZVtpXS5scHZiaXRzID0gTlVMTDsKKwl9CisKKwkvKiByZWxlYXNlIHRyYW5zZmVyIGJ1ZmZlciAqLworCWtmcmVlKGNhbS0+cGlwZS0+dHJhbnNmZXJfYnVmZmVyKTsKKwljYW0tPnBpcGUtPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPm9wZW5fbG9jayk7CisJa2ZyZWUoY2FtKTsKKwljYW0gPSBOVUxMOworfQogCiAvKiByZWxlYXNlIHRoZSBjYW1lcmEgKi8KIHN0YXRpYyBpbnQgenIzNjR4eF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCXN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCWludCBpLCBlcnI7CiAKLQlEQkcoInpyMzY0eHhfcmVsZWFzZSIpOworCURCRygiJXNcbiIsIF9fZnVuY19fKTsKKwljYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JaWYgKHZkZXYgPT0gTlVMTCkKKwlpZiAoIWNhbSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CiAKKwltdXRleF9sb2NrKCZjYW0tPm9wZW5fbG9jayk7CiAJdWRldiA9IGNhbS0+dWRldjsKIAotCW11dGV4X2xvY2soJmNhbS0+bG9jayk7CisJLyogdHVybiBvZmYgc3RyZWFtICovCisJaWYgKHJlc19jaGVjayhjYW0pKSB7CisJCWlmIChjYW0tPmJfYWNxdWlyZSkKKwkJCXpyMzY0eHhfc3RvcF9hY3F1aXJlKGNhbSk7CisJCXZpZGVvYnVmX3N0cmVhbW9mZigmY2FtLT52Yl92aWRxKTsKKwkJcmVzX2ZyZWUoY2FtKTsKKwl9CiAKIAljYW0tPnVzZXJzLS07CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKQEAgLTcxMCw0MCArMTM4MSw0MyBAQAogCWVyciA9IDA7CiAKIG91dDoKLQltdXRleF91bmxvY2soJmNhbS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPm9wZW5fbG9jayk7CisKIAlyZXR1cm4gZXJyOwogfQogCiAKIHN0YXRpYyBpbnQgenIzNjR4eF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQl2b2lkICpwb3M7Ci0JdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtOworCXN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlpbnQgcmV0OwogCi0JREJHKCJ6cjM2NHh4X21tYXA6ICVsZFxuIiwgc2l6ZSk7Ci0KLQlpZiAodmRldiA9PSBOVUxMKQorCWlmIChjYW0gPT0gTlVMTCkgeworCQlEQkcoIiVzOiBjYW0gPT0gTlVMTFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKLQljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKLQotCXBvcyA9IGNhbS0+ZnJhbWVidWY7Ci0Jd2hpbGUgKHNpemUgPiAwKSB7Ci0JCWlmICh2bV9pbnNlcnRfcGFnZSh2bWEsIHN0YXJ0LCB2bWFsbG9jX3RvX3BhZ2UocG9zKSkpCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJc3RhcnQgKz0gUEFHRV9TSVpFOwotCQlwb3MgKz0gUEFHRV9TSVpFOwotCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKLQkJCXNpemUgLT0gUEFHRV9TSVpFOwotCQllbHNlCi0JCQlzaXplID0gMDsKIAl9CisJREJHKCJtbWFwIGNhbGxlZCwgdm1hPTB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKXZtYSk7CiAKLQlyZXR1cm4gMDsKKwlyZXQgPSB2aWRlb2J1Zl9tbWFwX21hcHBlcigmY2FtLT52Yl92aWRxLCB2bWEpOworCisJREJHKCJ2bWEgc3RhcnQ9MHglMDhseCwgc2l6ZT0lbGQsIHJldD0lZFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcpdm1hLT52bV9zdGFydCwKKwkJKHVuc2lnbmVkIGxvbmcpdm1hLT52bV9lbmQgLSAodW5zaWduZWQgbG9uZyl2bWEtPnZtX3N0YXJ0LCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgenIzNjR4eF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxID0gJmNhbS0+dmJfdmlkcTsKKwlfREJHKCIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGNhbS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiBQT0xMRVJSOworCisJcmV0dXJuIHZpZGVvYnVmX3BvbGxfc3RyZWFtKGZpbGUsIHEsIHdhaXQpOworfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHpyMzY0eHhfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTc1Miw2ICsxNDI2LDcgQEAKIAkucmVhZCA9IHpyMzY0eHhfcmVhZCwKIAkubW1hcCA9IHpyMzY0eHhfbW1hcCwKIAkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCisJLnBvbGwgPSB6cjM2NHh4X3BvbGwsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHpyMzY0eHhfaW9jdGxfb3BzID0gewpAQCAtNzY4LDYgKzE0NDMsMTAgQEAKIAkudmlkaW9jX3F1ZXJ5Y3RybAk9IHpyMzY0eHhfdmlkaW9jX3F1ZXJ5Y3RybCwKIAkudmlkaW9jX2dfY3RybAkJPSB6cjM2NHh4X3ZpZGlvY19nX2N0cmwsCiAJLnZpZGlvY19zX2N0cmwJCT0genIzNjR4eF92aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfcmVxYnVmcyAgICAgICAgID0genIzNjR4eF92aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmICAgICAgICA9IHpyMzY0eHhfdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiAgICAgICAgICAgID0genIzNjR4eF92aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmICAgICAgICAgICA9IHpyMzY0eHhfdmlkaW9jX2RxYnVmLAogfTsKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgenIzNjR4eF90ZW1wbGF0ZSA9IHsKQEAgLTc4MywxNSArMTQ2Miw3NiBAQAogLyoqKioqKioqKioqKioqKioqKiovCiAvKiBVU0IgaW50ZWdyYXRpb24gKi8KIC8qKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCB6cjM2NHh4X2JvYXJkX2luaXQoc3RydWN0IHpyMzY0eHhfY2FtZXJhICpjYW0pCit7CisJc3RydWN0IHpyMzY0eHhfcGlwZWluZm8gKnBpcGUgPSBjYW0tPnBpcGU7CisJdW5zaWduZWQgbG9uZyBpOworCisJREJHKCJib2FyZCBpbml0OiAlcFxuIiwgY2FtKTsKKwltZW1zZXQocGlwZSwgMCwgc2l6ZW9mKCpwaXBlKSk7CisJcGlwZS0+Y2FtID0gY2FtOworCXBpcGUtPnRyYW5zZmVyX3NpemUgPSBCVUZGRVJfU0laRTsKKworCXBpcGUtPnRyYW5zZmVyX2J1ZmZlciA9IGt6YWxsb2MocGlwZS0+dHJhbnNmZXJfc2l6ZSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKHBpcGUtPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCURCRygib3V0IG9mIG1lbW9yeSFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljYW0tPmJfYWNxdWlyZSA9IDA7CisJY2FtLT5mcmFtZV9jb3VudCA9IDA7CisKKwkvKioqIHN0YXJ0IGNyZWF0ZSBzeXN0ZW0gYnVmZmVycyAqKiovCisJZm9yIChpID0gMDsgaSA8IEZSQU1FUzsgaSsrKSB7CisJCS8qIGFsd2F5cyBhbGxvY2F0ZSBtYXhpbXVtIHNpemUgZm9yIHN5c3RlbSBidWZmZXJzICovCisJCWNhbS0+YnVmZmVyLmZyYW1lW2ldLmxwdmJpdHMgPSB2bWFsbG9jKE1BWF9GUkFNRV9TSVpFKTsKKworCQlEQkcoInZhbGxvYyAlcCwgaWR4ICVsdSwgcGRhdGEgJXBcbiIsCisJCQkmY2FtLT5idWZmZXIuZnJhbWVbaV0sIGksCisJCQljYW0tPmJ1ZmZlci5mcmFtZVtpXS5scHZiaXRzKTsKKwkJaWYgKGNhbS0+YnVmZmVyLmZyYW1lW2ldLmxwdmJpdHMgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBvdXQgb2YgbWVtb3J5LiAiCisJCQkgICAgICAgIlVzaW5nIGxlc3MgZnJhbWVzXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IG91dCBvZiBtZW1vcnkuIEFib3J0aW5nXG4iKTsKKwkJa2ZyZWUoY2FtLT5waXBlLT50cmFuc2Zlcl9idWZmZXIpOworCQljYW0tPnBpcGUtPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0gZWxzZQorCQljYW0tPmJ1ZmZlci5kd0ZyYW1lcyA9IGk7CisKKwkvKiBtYWtlIHN1cmUgaW50ZXJuYWwgc3RhdGVzIGFyZSBzZXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRlJBTUVTOyBpKyspIHsKKwkJY2FtLT5idWZmZXIuZnJhbWVbaV0udWxTdGF0ZSA9IFpSMzY0WFhfUkVBRF9JRExFOworCQljYW0tPmJ1ZmZlci5mcmFtZVtpXS5jdXJfc2l6ZSA9IDA7CisJfQorCisJY2FtLT5jdXJfZnJhbWUgPSAwOworCWNhbS0+bGFzdF9mcmFtZSA9IC0xOworCS8qKiogZW5kIGNyZWF0ZSBzeXN0ZW0gYnVmZmVycyAqKiovCisKKwkvKiBzdGFydCByZWFkIHBpcGUgKi8KKwl6cjM2NHh4X3N0YXJ0X3JlYWRwaXBlKGNhbSk7CisJREJHKCI6IGJvYXJkIGluaXRpYWxpemVkXG4iKTsKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGludCB6cjM2NHh4X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAJc3RydWN0IHpyMzY0eHhfY2FtZXJhICpjYW0gPSBOVUxMOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKIAlpbnQgZXJyOworCWludCBpOwogCi0JREJHKCJwcm9iaW5nLi4uIik7CisJREJHKCJwcm9iaW5nLi4uXG4iKTsKIAogCWRldl9pbmZvKCZpbnRmLT5kZXYsIERSSVZFUl9ERVNDICIgY29tcGF0aWJsZSB3ZWJjYW0gcGx1Z2dlZFxuIik7CiAJZGV2X2luZm8oJmludGYtPmRldiwgIm1vZGVsICUwNHg6JTA0eCBkZXRlY3RlZFxuIiwKQEAgLTgxMCwyMiArMTU1MCwxNyBAQAogCWlmIChjYW0tPnZkZXYgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJjYW0tPnZkZXY6IG91dCBvZiBtZW1vcnkgIVxuIik7CiAJCWtmcmVlKGNhbSk7CisJCWNhbSA9IE5VTEw7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1jcHkoY2FtLT52ZGV2LCAmenIzNjR4eF90ZW1wbGF0ZSwgc2l6ZW9mKHpyMzY0eHhfdGVtcGxhdGUpKTsKKwljYW0tPnZkZXYtPnBhcmVudCA9ICZpbnRmLT5kZXY7CiAJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52ZGV2LCBjYW0pOwogCWlmIChkZWJ1ZykKIAkJY2FtLT52ZGV2LT5kZWJ1ZyA9IFY0TDJfREVCVUdfSU9DVEwgfCBWNEwyX0RFQlVHX0lPQ1RMX0FSRzsKIAogCWNhbS0+dWRldiA9IHVkZXY7CiAKLQlpZiAoKGNhbS0+YnVmZmVyID0ga21hbGxvYyhCVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJZGV2X2luZm8oJnVkZXYtPmRldiwgImNhbS0+YnVmZmVyOiBvdXQgb2YgbWVtb3J5ICFcbiIpOwotCQl2aWRlb19kZXZpY2VfcmVsZWFzZShjYW0tPnZkZXYpOwotCQlrZnJlZShjYW0pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIDE6CiAJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICIxNjB4MTIwIG1vZGUgc2VsZWN0ZWRcbiIpOwpAQCAtODUyLDIxICsxNTg3LDUzIEBACiAJaGVhZGVyMls0MzldID0gY2FtLT53aWR0aCAvIDI1NjsKIAloZWFkZXIyWzQ0MF0gPSBjYW0tPndpZHRoICUgMjU2OwogCisJY2FtLT51c2VycyA9IDA7CiAJY2FtLT5uYiA9IDA7Ci0JY2FtLT5icmlnaHRuZXNzID0gNjQ7CisJY2FtLT5tb2RlLmJyaWdodG5lc3MgPSA2NDsKIAltdXRleF9pbml0KCZjYW0tPmxvY2spOworCW11dGV4X2luaXQoJmNhbS0+b3Blbl9sb2NrKTsKIAorCURCRygiZGV2OiAlcCwgdWRldiAlcCBpbnRlcmZhY2UgJXBcbiIsIGNhbSwgY2FtLT51ZGV2LCBpbnRmKTsKKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gICovCisJaWZhY2VfZGVzYyA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCURCRygibnVtIGVuZHBvaW50cyAlZFxuIiwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKwkJaWYgKCFjYW0tPnJlYWRfZW5kcG9pbnQgJiYgdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oZW5kcG9pbnQpKSB7CisJCQkvKiB3ZSBmb3VuZCB0aGUgYnVsayBpbiBlbmRwb2ludCAqLworCQkJY2FtLT5yZWFkX2VuZHBvaW50ID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCX0KKwl9CisKKwlpZiAoIWNhbS0+cmVhZF9lbmRwb2ludCkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJDb3VsZCBub3QgZmluZCBidWxrLWluIGVuZHBvaW50XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogdjRsICovCisJSU5JVF9MSVNUX0hFQUQoJmNhbS0+dmlkcS5hY3RpdmUpOworCWNhbS0+dmlkcS5jYW0gPSBjYW07CiAJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGNhbS0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmdWRldi0+ZGV2LCAidmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZFxuIik7CiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKGNhbS0+dmRldik7Ci0JCWtmcmVlKGNhbS0+YnVmZmVyKTsKIAkJa2ZyZWUoY2FtKTsKKwkJY2FtID0gTlVMTDsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhbSk7CiAKKwkvKiBsb2FkIHpyMzY0eHggYm9hcmQgc3BlY2lmaWMgKi8KKwllcnIgPSB6cjM2NHh4X2JvYXJkX2luaXQoY2FtKTsKKwlpZiAoZXJyKSB7CisJCXNwaW5fbG9ja19pbml0KCZjYW0tPnNsb2NrKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmY2FtLT5zbG9jayk7CisKIAlkZXZfaW5mbygmdWRldi0+ZGV2LCBEUklWRVJfREVTQyAiIGNvbnRyb2xsaW5nIHZpZGVvIGRldmljZSAlZFxuIiwKIAkJIGNhbS0+dmRldi0+bnVtKTsKIAlyZXR1cm4gMDsKQEAgLTg3NiwxNyArMTY0MywxMCBAQAogc3RhdGljIHZvaWQgenIzNjR4eF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmNhbS0+dmJfdmlkcSk7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAlkZXZfaW5mbygmaW50Zi0+ZGV2LCBEUklWRVJfREVTQyAiIHdlYmNhbSB1bnBsdWdnZWRcbiIpOwotCWlmIChjYW0tPnZkZXYpCi0JCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGNhbS0+dmRldik7Ci0JY2FtLT52ZGV2ID0gTlVMTDsKLQlrZnJlZShjYW0tPmJ1ZmZlcik7Ci0JY2FtLT5idWZmZXIgPSBOVUxMOwotCXZmcmVlKGNhbS0+ZnJhbWVidWYpOwotCWNhbS0+ZnJhbWVidWYgPSBOVUxMOwotCWtmcmVlKGNhbSk7Ci0JY2FtID0gTlVMTDsKKwl6cjM2NHh4X2Rlc3Ryb3koY2FtKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCmluZGV4IDVkMGJhNGYuLjc2ZmEyZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCkBAIC0xMDE1LDkgKzEwMTUsOSBAQAogewogCVNHRVNpbXBsZTY0X3QgKnBTZ2UgPSAoU0dFU2ltcGxlNjRfdCAqKSBwQWRkcjsKIAlwU2dlLT5BZGRyZXNzLkxvdyA9IGNwdV90b19sZTMyCi0JCQkobG93ZXJfMzJfYml0cygodW5zaWduZWQgbG9uZykoZG1hX2FkZHIpKSk7CisJCQkobG93ZXJfMzJfYml0cyhkbWFfYWRkcikpOwogCXBTZ2UtPkFkZHJlc3MuSGlnaCA9IGNwdV90b19sZTMyCi0JCQkodXBwZXJfMzJfYml0cygodW5zaWduZWQgbG9uZylkbWFfYWRkcikpOworCQkJKHVwcGVyXzMyX2JpdHMoZG1hX2FkZHIpKTsKIAlwU2dlLT5GbGFnc0xlbmd0aCA9IGNwdV90b19sZTMyCiAJCQkoKGZsYWdzbGVuZ3RoIHwgTVBUX1NHRV9GTEFHU182NF9CSVRfQUREUkVTU0lORykpOwogfQpAQCAtMTAzOCw4ICsxMDM4LDggQEAKIAl1MzIgdG1wOwogCiAJcFNnZS0+QWRkcmVzcy5Mb3cgPSBjcHVfdG9fbGUzMgotCQkJKGxvd2VyXzMyX2JpdHMoKHVuc2lnbmVkIGxvbmcpKGRtYV9hZGRyKSkpOwotCXRtcCA9ICh1MzIpKHVwcGVyXzMyX2JpdHMoKHVuc2lnbmVkIGxvbmcpZG1hX2FkZHIpKTsKKwkJCShsb3dlcl8zMl9iaXRzKGRtYV9hZGRyKSk7CisJdG1wID0gKHUzMikodXBwZXJfMzJfYml0cyhkbWFfYWRkcikpOwogCiAJLyoKIAkgKiAxMDc4IGVycmF0YSB3b3JrYXJvdW5kIGZvciB0aGUgMzZHQiBsaW1pdGF0aW9uCkBAIC0xMTAxLDcgKzExMDEsNyBAQAogCQlwQ2hhaW4tPk5leHRDaGFpbk9mZnNldCA9IG5leHQ7CiAKIAkJcENoYWluLT5BZGRyZXNzLkxvdyA9IGNwdV90b19sZTMyKHRtcCk7Ci0JCXRtcCA9ICh1MzIpKHVwcGVyXzMyX2JpdHMoKHVuc2lnbmVkIGxvbmcpZG1hX2FkZHIpKTsKKwkJdG1wID0gKHUzMikodXBwZXJfMzJfYml0cyhkbWFfYWRkcikpOwogCQlwQ2hhaW4tPkFkZHJlc3MuSGlnaCA9IGNwdV90b19sZTMyKHRtcCk7CiB9CiAKQEAgLTEyOTcsMTIgKzEyOTcsOCBAQAogCXBzZ2UgPSAoY2hhciAqKSZpb2NfaW5pdC0+SG9zdFBhZ2VCdWZmZXJTR0U7CiAJZmxhZ3NfbGVuZ3RoID0gTVBJX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CiAJICAgIE1QSV9TR0VfRkxBR1NfU1lTVEVNX0FERFJFU1MgfAotCSAgICBNUElfU0dFX0ZMQUdTXzMyX0JJVF9BRERSRVNTSU5HIHwKIAkgICAgTVBJX1NHRV9GTEFHU19IT1NUX1RPX0lPQyB8CiAJICAgIE1QSV9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUjsKLQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID09IHNpemVvZih1NjQpKSB7Ci0JICAgIGZsYWdzX2xlbmd0aCB8PSBNUElfU0dFX0ZMQUdTXzY0X0JJVF9BRERSRVNTSU5HOwotCX0KIAlmbGFnc19sZW5ndGggPSBmbGFnc19sZW5ndGggPDwgTVBJX1NHRV9GTEFHU19TSElGVDsKIAlmbGFnc19sZW5ndGggfD0gaW9jLT5Ib3N0UGFnZUJ1ZmZlcl9zejsKIAlpb2MtPmFkZF9zZ2UocHNnZSwgZmxhZ3NfbGVuZ3RoLCBpb2MtPkhvc3RQYWdlQnVmZmVyX2RtYSk7CkBAIC0yMjI0LDggKzIyMjAsNiBAQAogCWludAkgaGFyZDsKIAlpbnQJIHJjPTA7CiAJaW50CSBpaTsKLQl1OAkgY2JfaWR4OwotCWludAkgaGFuZGxlcnM7CiAJaW50CSByZXQgPSAwOwogCWludAkgcmVzZXRfYWx0X2lvY19hY3RpdmUgPSAwOwogCWludAkgaXJxX2FsbG9jYXRlZCA9IDA7CkBAIC0yNTQ4LDM0ICsyNTQyLDYgQEAKIAkJbXB0X2dldF9tYW51ZmFjdHVyaW5nX3BnXzAoaW9jKTsKIAl9CiAKLQkvKgotCSAqIENhbGwgZWFjaCBjdXJyZW50bHkgcmVnaXN0ZXJlZCBwcm90b2NvbCBJT0MgcmVzZXQgaGFuZGxlcgotCSAqIHdpdGggcG9zdC1yZXNldCBpbmRpY2F0aW9uLgotCSAqIE5PVEU6IElmIHdlJ3JlIGRvaW5nIF9JT0NfQlJJTkdVUCwgdGhlcmUgY2FuIGJlIG5vCi0JICogTXB0UmVzZXRIYW5kbGVyc1tdIHJlZ2lzdGVyZWQgeWV0LgotCSAqLwotCWlmIChoYXJkX3Jlc2V0X2RvbmUpIHsKLQkJcmMgPSBoYW5kbGVycyA9IDA7Ci0JCWZvciAoY2JfaWR4ID0gTVBUX01BWF9QUk9UT0NPTF9EUklWRVJTLTE7IGNiX2lkeDsgY2JfaWR4LS0pIHsKLQkJCWlmICgocmV0ID09IDApICYmIE1wdFJlc2V0SGFuZGxlcnNbY2JfaWR4XSkgewotCQkJCWRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKLQkJCQkgICAgIkNhbGxpbmcgSU9DIHBvc3RfcmVzZXQgaGFuZGxlciAjJWRcbiIsCi0JCQkJICAgIGlvYy0+bmFtZSwgY2JfaWR4KSk7Ci0JCQkJcmMgKz0gbXB0X3NpZ25hbF9yZXNldChjYl9pZHgsIGlvYywgTVBUX0lPQ19QT1NUX1JFU0VUKTsKLQkJCQloYW5kbGVycysrOwotCQkJfQotCi0JCQlpZiAoYWx0X2lvY19yZWFkeSAmJiBNcHRSZXNldEhhbmRsZXJzW2NiX2lkeF0pIHsKLQkJCQlkcnNwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKLQkJCQkgICAgIkNhbGxpbmcgSU9DIHBvc3RfcmVzZXQgaGFuZGxlciAjJWRcbiIsCi0JCQkJICAgIGlvYy0+YWx0X2lvYy0+bmFtZSwgY2JfaWR4KSk7Ci0JCQkJcmMgKz0gbXB0X3NpZ25hbF9yZXNldChjYl9pZHgsIGlvYy0+YWx0X2lvYywgTVBUX0lPQ19QT1NUX1JFU0VUKTsKLQkJCQloYW5kbGVycysrOwotCQkJfQotCQl9Ci0JCS8qIEZJWE1FPyAgRXhhbWluZSByZXN1bHRzIGhlcmU/ICovCi0JfQotCiAgb3V0OgogCWlmICgocmV0ICE9IDApICYmIGlycV9hbGxvY2F0ZWQpIHsKIAkJZnJlZV9pcnEoaW9jLT5wY2lfaXJxLCBpb2MpOwpAQCAtMzkzOCw2ICszOTA0LDcgQEAKIAlpbnQgY291bnQgPSAwOwogCXUzMiBkaWFnMXZhbCA9IDA7CiAJTXBpRndIZWFkZXJfdCAqY2FjaGVkX2Z3OwkvKiBQb2ludGVyIHRvIEZXICovCisJdTgJIGNiX2lkeDsKIAogCS8qIENsZWFyIGFueSBleGlzdGluZyBpbnRlcnJ1cHRzICovCiAJQ0hJUFJFR19XUklURTMyKCZpb2MtPmNoaXAtPkludFN0YXR1cywgMCk7CkBAIC0zOTU2LDYgKzM5MjMsMTggQEAKIAkJZWxzZQogCQkJbWRlbGF5KDEpOwogCisJCS8qCisJCSAqIENhbGwgZWFjaCBjdXJyZW50bHkgcmVnaXN0ZXJlZCBwcm90b2NvbCBJT0MgcmVzZXQgaGFuZGxlcgorCQkgKiB3aXRoIHByZS1yZXNldCBpbmRpY2F0aW9uLgorCQkgKiBOT1RFOiBJZiB3ZSdyZSBkb2luZyBfSU9DX0JSSU5HVVAsIHRoZXJlIGNhbiBiZSBubworCQkgKiBNcHRSZXNldEhhbmRsZXJzW10gcmVnaXN0ZXJlZCB5ZXQuCisJCSAqLworCQlmb3IgKGNiX2lkeCA9IE1QVF9NQVhfUFJPVE9DT0xfRFJJVkVSUy0xOyBjYl9pZHg7IGNiX2lkeC0tKSB7CisJCQlpZiAoTXB0UmVzZXRIYW5kbGVyc1tjYl9pZHhdKQorCQkJCSgqKE1wdFJlc2V0SGFuZGxlcnNbY2JfaWR4XSkpKGlvYywKKwkJCQkJCU1QVF9JT0NfUFJFX1JFU0VUKTsKKwkJfQorCiAJCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDYwOyBjb3VudCArKykgewogCQkJZG9vcmJlbGwgPSBDSElQUkVHX1JFQUQzMigmaW9jLT5jaGlwLT5Eb29yYmVsbCk7CiAJCQlkb29yYmVsbCAmPSBNUElfSU9DX1NUQVRFX01BU0s7CkBAIC00MDUyLDI1ICs0MDMxLDE1IEBACiAJCSAqIE5PVEU6IElmIHdlJ3JlIGRvaW5nIF9JT0NfQlJJTkdVUCwgdGhlcmUgY2FuIGJlIG5vCiAJCSAqIE1wdFJlc2V0SGFuZGxlcnNbXSByZWdpc3RlcmVkIHlldC4KIAkJICovCi0JCXsKLQkJCXU4CSBjYl9pZHg7Ci0JCQlpbnQJIHIgPSAwOwotCi0JCQlmb3IgKGNiX2lkeCA9IE1QVF9NQVhfUFJPVE9DT0xfRFJJVkVSUy0xOyBjYl9pZHg7IGNiX2lkeC0tKSB7Ci0JCQkJaWYgKE1wdFJlc2V0SGFuZGxlcnNbY2JfaWR4XSkgewotCQkJCQlkcHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UCi0JCQkJCQkiQ2FsbGluZyBJT0MgcHJlX3Jlc2V0IGhhbmRsZXIgIyVkXG4iLAotCQkJCQkJaW9jLT5uYW1lLCBjYl9pZHgpKTsKLQkJCQkJciArPSBtcHRfc2lnbmFsX3Jlc2V0KGNiX2lkeCwgaW9jLCBNUFRfSU9DX1BSRV9SRVNFVCk7Ci0JCQkJCWlmIChpb2MtPmFsdF9pb2MpIHsKLQkJCQkJCWRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKLQkJCQkJCQkiQ2FsbGluZyBhbHQtJXMgcHJlX3Jlc2V0IGhhbmRsZXIgIyVkXG4iLAotCQkJCQkJCWlvYy0+bmFtZSwgaW9jLT5hbHRfaW9jLT5uYW1lLCBjYl9pZHgpKTsKLQkJCQkJCXIgKz0gbXB0X3NpZ25hbF9yZXNldChjYl9pZHgsIGlvYy0+YWx0X2lvYywgTVBUX0lPQ19QUkVfUkVTRVQpOwotCQkJCQl9CisJCWZvciAoY2JfaWR4ID0gTVBUX01BWF9QUk9UT0NPTF9EUklWRVJTLTE7IGNiX2lkeDsgY2JfaWR4LS0pIHsKKwkJCWlmIChNcHRSZXNldEhhbmRsZXJzW2NiX2lkeF0pIHsKKwkJCQltcHRfc2lnbmFsX3Jlc2V0KGNiX2lkeCwKKwkJCQkJaW9jLCBNUFRfSU9DX1BSRV9SRVNFVCk7CisJCQkJaWYgKGlvYy0+YWx0X2lvYykgeworCQkJCQltcHRfc2lnbmFsX3Jlc2V0KGNiX2lkeCwKKwkJCQkJaW9jLT5hbHRfaW9jLCBNUFRfSU9DX1BSRV9SRVNFVCk7CiAJCQkJfQogCQkJfQotCQkJLyogRklYTUU/ICBFeGFtaW5lIHJlc3VsdHMgaGVyZT8gKi8KIAkJfQogCiAJCWlmIChpb2MtPmNhY2hlZF9mdykKQEAgLTY5NTYsNyArNjkyNSw3IEBACiBpbnQKIG1wdF9IYXJkUmVzZXRIYW5kbGVyKE1QVF9BREFQVEVSICppb2MsIGludCBzbGVlcEZsYWcpCiB7Ci0JaW50CQkgcmM7CisJaW50CSByYzsKIAl1OAkgY2JfaWR4OwogCXVuc2lnbmVkIGxvbmcJIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcJIHRpbWVfY291bnQ7CkBAIC02OTgyLDggKzY5NTEsNiBAQAogCQlpb2MtPmFsdF9pb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzcyA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT50YXNrbWdtdF9sb2NrLCBmbGFncyk7CiAKLQkvKiBGSVhNRTogSWYgZG9faW9jX3JlY292ZXJ5IGZhaWxzLCByZXBlYXQuLi4uCi0JICovCiAKIAkvKiBUaGUgU0NTSSBkcml2ZXIgbmVlZHMgdG8gYWRqdXN0IHRpbWVvdXRzIG9uIGFsbCBjdXJyZW50CiAJICogY29tbWFuZHMgcHJpb3IgdG8gdGhlIGRpYWdub3N0aWMgcmVzZXQgYmVpbmcgaXNzdWVkLgpAQCAtNzAyMCw2ICs2OTg3LDE1IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+dGFza21nbXRfbG9jaywgZmxhZ3MpOwogCisJZm9yIChjYl9pZHggPSBNUFRfTUFYX1BST1RPQ09MX0RSSVZFUlMtMTsgY2JfaWR4OyBjYl9pZHgtLSkgeworCQlpZiAoTXB0UmVzZXRIYW5kbGVyc1tjYl9pZHhdKSB7CisJCQltcHRfc2lnbmFsX3Jlc2V0KGNiX2lkeCwgaW9jLCBNUFRfSU9DX1BPU1RfUkVTRVQpOworCQkJaWYgKGlvYy0+YWx0X2lvYykKKwkJCQltcHRfc2lnbmFsX3Jlc2V0KGNiX2lkeCwKKwkJCQkJaW9jLT5hbHRfaW9jLCBNUFRfSU9DX1BPU1RfUkVTRVQpOworCQl9CisJfQorCiAJZHRtcHJpbnRrKGlvYywKIAkgICAgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UCiAJCSJIYXJkUmVzZXRIYW5kbGVyOiBjb21wbGV0ZWQgKCVkIHNlY29uZHMpOiAlc1xuIiwgaW9jLT5uYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAppbmRleCAxYzg1MTRkLi44ZGQ0ZDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaApAQCAtNzYsOCArNzYsOCBAQAogI2RlZmluZSBDT1BZUklHSFQJIkNvcHlyaWdodCAoYykgMTk5OS0yMDA4ICIgTU9EVUxFQVVUSE9SCiAjZW5kaWYKIAotI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDQuMTAiCi0jZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wNC4wOSIKKyNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjA0LjEyIgorI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDQuMTIiCiAjZGVmaW5lIFdIQVRfTUFHSUNfU1RSSU5HCQkiQCIgIigiICIjIiAiKSIKIAogI2RlZmluZSBzaG93X21wdG1vZF92ZXIocyx2ZXIpICBcCkBAIC0xNTcsOCArMTU3LDkgQEAKIC8qCiAgKglUcnkgdG8ga2VlcCB0aGVzZSBhdCAyXk4tMQogICovCi0jZGVmaW5lIE1QVF9GQ19DQU5fUVVFVUUJMTI3CisjZGVmaW5lIE1QVF9GQ19DQU5fUVVFVUUJMTAyNAogI2RlZmluZSBNUFRfU0NTSV9DQU5fUVVFVUUJMTI3CisjZGVmaW5lIE1QVF9TQVNfQ0FOX1FVRVVFCTEyNwogCiAvKgogICogU2V0IHRoZSBNQVhfU0dFIHZhbHVlIGJhc2VkIG9uIHVzZXIgaW5wdXQuCkBAIC04NzksMjMgKzg4MCw5IEBACiAKIHR5cGVkZWYgc3RydWN0IF9NUFRfU0NTSV9IT1NUIHsKIAlNUFRfQURBUFRFUgkJICppb2M7Ci0JaW50CQkJICBwb3J0OwotCXUzMgkJCSAgcGFkMDsKLQlNUFRfTE9DQUxfUkVQTFkJCSAqcExvY2FsOwkJLyogdXNlZCBmb3IgaW50ZXJuYWwgY29tbWFuZHMgKi8KLQlzdHJ1Y3QgdGltZXJfbGlzdAkgIHRpbWVyOwotCQkvKiBQb29sIG9mIG1lbW9yeSBmb3IgaG9sZGluZyBTQ3BudHMgYmVmb3JlIGRvaW5nCi0JCSAqIE9TIGNhbGxiYWNrcy4gZnJlZVEgaXMgdGhlIGZyZWUgcG9vbC4KLQkJICovCi0JdTgJCQkgIG5lZ29OdnJhbTsJCS8qIERWIGRpc2FibGVkLCBuZWdvIE5WUkFNICovCi0JdTgJCQkgIHBhZDE7Ci0JdTgJCQkgIHJzdmRbMl07Ci0JTVBUX0ZSQU1FX0hEUgkJICpjbWRQdHI7CQkvKiBQdHIgdG8gbm9uT1MgcmVxdWVzdCAqLwotCXN0cnVjdCBzY3NpX2NtbmQJICphYm9ydFNDcG50OwotCU1QVF9MT0NBTF9SRVBMWQkJICBsb2NhbFJlcGx5OwkJLyogaW50ZXJuYWwgY21kIHJlcGx5IHN0cnVjdCAqLwogCXVzaG9ydAkJCSAgc2VsX3RpbWVvdXRbTVBUX01BWF9GQ19ERVZJQ0VTXTsKIAljaGFyIAkJCSAgKmluZm9fa2J1ZjsKIAlsb25nCQkJICBsYXN0X3F1ZXVlX2Z1bGw7Ci0JdTE2CQkJICB0bV9pb2NzdGF0dXM7CiAJdTE2CQkJICBzcGlfcGVuZGluZzsKIAlzdHJ1Y3QgbGlzdF9oZWFkCSAgdGFyZ2V0X3Jlc2V0X2xpc3Q7CiB9IE1QVF9TQ1NJX0hPU1Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKaW5kZXggZTYxZGYxMy4uZWJmNmFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYwpAQCAtMTI4OCwyNSArMTI4OCw2IEBACiAJZHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVCAiU2NzaUxvb2t1cCBAICVwXG4iLAogCQkgaW9jLT5uYW1lLCBpb2MtPlNjc2lMb29rdXApKTsKIAotCS8qIENsZWFyIHRoZSBUTSBmbGFncwotCSAqLwotCWhkLT5hYm9ydFNDcG50ID0gTlVMTDsKLQotCS8qIENsZWFyIHRoZSBwb2ludGVyIHVzZWQgdG8gc3RvcmUKLQkgKiBzaW5nbGUtdGhyZWFkZWQgY29tbWFuZHMsIGkuZS4sIHRob3NlCi0JICogaXNzdWVkIGR1cmluZyBhIGJ1cyBzY2FuLCBkdiBhbmQKLQkgKiBjb25maWd1cmF0aW9uIHBhZ2VzLgotCSAqLwotCWhkLT5jbWRQdHIgPSBOVUxMOwotCi0JLyogSW5pdGlhbGl6ZSB0aGlzIFNDU0kgSG9zdHMnIHRpbWVycwotCSAqIFRvIHVzZSwgc2V0IHRoZSB0aW1lciBleHBpcmVzIGZpZWxkCi0JICogYW5kIGFkZF90aW1lcgotCSAqLwotCWluaXRfdGltZXIoJmhkLT50aW1lcik7Ci0JaGQtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgaGQ7Ci0JaGQtPnRpbWVyLmZ1bmN0aW9uID0gbXB0c2NzaWhfdGltZXJfZXhwaXJlZDsKLQogCWhkLT5sYXN0X3F1ZXVlX2Z1bGwgPSAwOwogCiAJc2gtPnRyYW5zcG9ydHQgPSBtcHRmY190cmFuc3BvcnRfdGVtcGxhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYwppbmRleCBhOWU0OGUyLi5iYzJlYzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMKQEAgLTc5NSw3ICs3OTUsNyBAQAogCQkJSU9DX0FORF9ORVRERVZfTkFNRVNfc19zKGRldiksCiAJCQlsZTMyX3RvX2NwdShwU2ltcGxlLT5GbGFnc0xlbmd0aCkpKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCmluZGV4IDU1ZmYyNTIuLjgzODczZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwpAQCAtNzIsNiArNzIsNyBAQAogICovCiAjZGVmaW5lIE1QVFNBU19SQUlEX0NIQU5ORUwJMQogCisjZGVmaW5lIFNBU19DT05GSUdfUEFHRV9USU1FT1VUCQkzMAogTU9EVUxFX0FVVEhPUihNT0RVTEVBVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKG15X05BTUUpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtMzI0LDcgKzMyNSw2IEBACiB7CiAJc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50LCAqbmV4dDsKIAlzdHJ1Y3QgbXB0c2FzX3RhcmdldF9yZXNldF9ldmVudCAqdGFyZ2V0X3Jlc2V0X2xpc3QsICpuOwotCXU4CWZsdXNoX3E7CiAJTVBUX1NDU0lfSE9TVAkqaGQgPSBzaG9zdF9wcml2KGlvYy0+c2gpOwogCiAJLyogZmx1c2ggdGhlIHRhcmdldF9yZXNldF9saXN0ICovCkBAIC0zNDQsMTUgKzM0NCwxMCBAQAogCSAgICAgIWlvYy0+ZndfZXZlbnRfcSB8fCBpbl9pbnRlcnJ1cHQoKSkKIAkJcmV0dXJuOwogCi0JZmx1c2hfcSA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ3X2V2ZW50LCBuZXh0LCAmaW9jLT5md19ldmVudF9saXN0LCBsaXN0KSB7CiAJCWlmIChjYW5jZWxfZGVsYXllZF93b3JrKCZmd19ldmVudC0+d29yaykpCiAJCQltcHRzYXNfZnJlZV9md19ldmVudChpb2MsIGZ3X2V2ZW50KTsKLQkJZWxzZQotCQkJZmx1c2hfcSA9IDE7CiAJfQotCWlmIChmbHVzaF9xKQotCQlmbHVzaF93b3JrcXVldWUoaW9jLT5md19ldmVudF9xKTsKIH0KIAogCkBAIC02NjEsNyArNjU2LDcgQEAKIAljZmcucGFnZUFkZHIgPSBzdGFyZ2V0LT5pZDsKIAljZmcuY2ZnaGRyLmhkciA9ICZoZHI7CiAJY2ZnLmFjdGlvbiA9IE1QSV9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwotCWNmZy50aW1lb3V0ID0gMTA7CisJY2ZnLnRpbWVvdXQgPSBTQVNfQ09ORklHX1BBR0VfVElNRU9VVDsKIAogCWlmIChtcHRfY29uZmlnKGlvYywgJmNmZykgIT0gMCkKIAkJZ290byBvdXQ7CkBAIC04NTEsNyArODQ2LDEzIEBACiAJCXBvcnRfZGV0YWlscy0+bnVtX3BoeXMtLTsKIAkJcG9ydF9kZXRhaWxzLT5waHlfYml0bWFzayAmPSB+ICgxIDw8IHBoeV9pbmZvLT5waHlfaWQpOwogCQltZW1zZXQoJnBoeV9pbmZvLT5hdHRhY2hlZCwgMCwgc2l6ZW9mKHN0cnVjdCBtcHRzYXNfZGV2aW5mbykpOwotCQlzYXNfcG9ydF9kZWxldGVfcGh5KHBvcnRfZGV0YWlscy0+cG9ydCwgcGh5X2luZm8tPnBoeSk7CisJCWlmIChwaHlfaW5mby0+cGh5KSB7CisJCQlkZXZ0cHJpbnRrKGlvYywgZGV2X3ByaW50ayhLRVJOX0RFQlVHLAorCQkJCSZwaHlfaW5mby0+cGh5LT5kZXYsIE1ZSU9DX3NfRk1UCisJCQkJImRlbGV0ZSBwaHkgJWQsIHBoeS1vYmogKDB4JXApXG4iLCBpb2MtPm5hbWUsCisJCQkJcGh5X2luZm8tPnBoeV9pZCwgcGh5X2luZm8tPnBoeSkpOworCQkJc2FzX3BvcnRfZGVsZXRlX3BoeShwb3J0X2RldGFpbHMtPnBvcnQsIHBoeV9pbmZvLT5waHkpOworCQl9CiAJCXBoeV9pbmZvLT5wb3J0X2RldGFpbHMgPSBOVUxMOwogCX0KIApAQCAtMTI3Miw3ICsxMjczLDYgQEAKIAkJfQogCQltcHRzYXNfY2xlYW51cF9md19ldmVudF9xKGlvYyk7CiAJCW1wdHNhc19xdWV1ZV9yZXNjYW4oaW9jKTsKLQkJbXB0c2FzX2Z3X2V2ZW50X29uKGlvYyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTMxOCw3ICsxMzE4LDcgQEAKIAljZmcucGFnZUFkZHIgPSBmb3JtICsgZm9ybV9zcGVjaWZpYzsKIAljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CiAJY2ZnLmRpciA9IDA7CS8qIHJlYWQgKi8KLQljZmcudGltZW91dCA9IDEwOworCWNmZy50aW1lb3V0ID0gU0FTX0NPTkZJR19QQUdFX1RJTUVPVVQ7CiAKIAllcnJvciA9IG1wdF9jb25maWcoaW9jLCAmY2ZnKTsKIAlpZiAoZXJyb3IpCkBAIC0xNTkyLDYgKzE1OTIsNyBAQAogCQltcHRzYXNfc2Nhbl9zYXNfdG9wb2xvZ3koaW9jKTsKIAkJaW9jLT5pbl9yZXNjYW4gPSAwOwogCQltcHRzYXNfZnJlZV9md19ldmVudChpb2MsIGZ3X2V2ZW50KTsKKwkJbXB0c2FzX2Z3X2V2ZW50X29uKGlvYyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE4OTEsNyArMTg5Miw3IEBACiAJLmVoX2J1c19yZXNldF9oYW5kbGVyCQk9IG1wdHNjc2loX2J1c19yZXNldCwKIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCQk9IG1wdHNjc2loX2hvc3RfcmVzZXQsCiAJLmJpb3NfcGFyYW0JCQk9IG1wdHNjc2loX2Jpb3NfcGFyYW0sCi0JLmNhbl9xdWV1ZQkJCT0gTVBUX0ZDX0NBTl9RVUVVRSwKKwkuY2FuX3F1ZXVlCQkJPSBNUFRfU0FTX0NBTl9RVUVVRSwKIAkudGhpc19pZAkJCT0gLTEsCiAJLnNnX3RhYmxlc2l6ZQkJCT0gTVBUX1NDU0lfU0dfREVQVEgsCiAJLm1heF9zZWN0b3JzCQkJPSA4MTkyLApAQCAtMTkyNiw3ICsxOTI3LDcgQEAKIAljZmcucGFnZUFkZHIgPSBwaHktPmlkZW50aWZ5LnBoeV9pZGVudGlmaWVyOwogCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKIAljZmcuZGlyID0gMDsgICAgLyogcmVhZCAqLwotCWNmZy50aW1lb3V0ID0gMTA7CisJY2ZnLnRpbWVvdXQgPSBTQVNfQ09ORklHX1BBR0VfVElNRU9VVDsKIAogCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOwogCWlmIChlcnJvcikKQEAgLTIyNzgsNyArMjI3OSw3IEBACiAJY2ZnLnBhZ2VBZGRyID0gMDsKIAljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CiAJY2ZnLmRpciA9IDA7CS8qIHJlYWQgKi8KLQljZmcudGltZW91dCA9IDEwOworCWNmZy50aW1lb3V0ID0gU0FTX0NPTkZJR19QQUdFX1RJTUVPVVQ7CiAKIAllcnJvciA9IG1wdF9jb25maWcoaW9jLCAmY2ZnKTsKIAlpZiAoZXJyb3IpCkBAIC0yMzQ5LDcgKzIzNTAsNyBAQAogCiAJY2ZnLmNmZ2hkci5laGRyID0gJmhkcjsKIAljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7Ci0JY2ZnLnRpbWVvdXQgPSAxMDsKKwljZmcudGltZW91dCA9IFNBU19DT05GSUdfUEFHRV9USU1FT1VUOwogCWNmZy5jZmdoZHIuZWhkci0+UGFnZVR5cGUgPSBNUElfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOwogCWNmZy5jZmdoZHIuZWhkci0+RXh0UGFnZVR5cGUgPSBNUElfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19JT19VTklUOwogCWNmZy5jZmdoZHIuZWhkci0+UGFnZVZlcnNpb24gPSBNUElfU0FTSU9VTklUUEFHRTFfUEFHRVZFUlNJT047CkBAIC0yNDExLDcgKzI0MTIsNyBAQAogCiAJY2ZnLmNmZ2hkci5laGRyID0gJmhkcjsKIAljZmcuZGlyID0gMDsJLyogcmVhZCAqLwotCWNmZy50aW1lb3V0ID0gMTA7CisJY2ZnLnRpbWVvdXQgPSBTQVNfQ09ORklHX1BBR0VfVElNRU9VVDsKIAogCS8qIEdldCBQaHkgUGcgMCBmb3IgZWFjaCBQaHkuICovCiAJY2ZnLnBoeXNBZGRyID0gLTE7CkBAIC0yNDc5LDcgKzI0ODAsNyBAQAogCWNmZy5waHlzQWRkciA9IC0xOwogCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKIAljZmcuZGlyID0gMDsJLyogcmVhZCAqLwotCWNmZy50aW1lb3V0ID0gMTA7CisJY2ZnLnRpbWVvdXQgPSBTQVNfQ09ORklHX1BBR0VfVElNRU9VVDsKIAogCW1lbXNldChkZXZpY2VfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBtcHRzYXNfZGV2aW5mbykpOwogCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOwpAQCAtMjU1NCw3ICsyNTU1LDcgQEAKIAljZmcucGFnZUFkZHIgPSBmb3JtICsgZm9ybV9zcGVjaWZpYzsKIAljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CiAJY2ZnLmRpciA9IDA7CS8qIHJlYWQgKi8KLQljZmcudGltZW91dCA9IDEwOworCWNmZy50aW1lb3V0ID0gU0FTX0NPTkZJR19QQUdFX1RJTUVPVVQ7CiAKIAltZW1zZXQocG9ydF9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IG1wdHNhc19wb3J0aW5mbykpOwogCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOwpAQCAtMjYzNSw3ICsyNjM2LDcgQEAKIAljZmcucGFnZUFkZHIgPSBmb3JtICsgZm9ybV9zcGVjaWZpYzsKIAljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CiAJY2ZnLmRpciA9IDA7CS8qIHJlYWQgKi8KLQljZmcudGltZW91dCA9IDEwOworCWNmZy50aW1lb3V0ID0gU0FTX0NPTkZJR19QQUdFX1RJTUVPVVQ7CiAKIAllcnJvciA9IG1wdF9jb25maWcoaW9jLCAmY2ZnKTsKIAlpZiAoZXJyb3IpCkBAIC0zMzA3LDYgKzMzMDgsNyBAQAogCWV4cGFuZGVyX2RhdGEgPSAoTXBpRXZlbnREYXRhU2FzRXhwYW5kZXJTdGF0dXNDaGFuZ2VfdCAqKQogCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YTsKIAltZW1jcHkoJnNhc19hZGRyZXNzLCAmZXhwYW5kZXJfZGF0YS0+U0FTQWRkcmVzcywgc2l6ZW9mKF9fbGU2NCkpOworCXNhc19hZGRyZXNzID0gbGU2NF90b19jcHUoc2FzX2FkZHJlc3MpOwogCXBvcnRfaW5mbyA9IG1wdHNhc19maW5kX3BvcnRpbmZvX2J5X3Nhc19hZGRyZXNzKGlvYywgc2FzX2FkZHJlc3MpOwogCiAJaWYgKGV4cGFuZGVyX2RhdGEtPlJlYXNvbkNvZGUgPT0gTVBJX0VWRU5UX1NBU19FWFBfUkNfQURERUQpIHsKQEAgLTQ3NjAsMTAgKzQ3NjIsOSBAQAogCiAJLyogc2V0IDE2IGJ5dGUgY2RiJ3MgKi8KIAlzaC0+bWF4X2NtZF9sZW4gPSAxNjsKLQotCXNoLT5tYXhfaWQgPSBpb2MtPnBmYWN0c1swXS5Qb3J0U0NTSUlEOworCXNoLT5jYW5fcXVldWUgPSBtaW5fdChpbnQsIGlvYy0+cmVxX2RlcHRoIC0gMTAsIHNoLT5jYW5fcXVldWUpOworCXNoLT5tYXhfaWQgPSAtMTsKIAlzaC0+bWF4X2x1biA9IG1heF9sdW47Ci0KIAlzaC0+dHJhbnNwb3J0dCA9IG1wdHNhc190cmFuc3BvcnRfdGVtcGxhdGU7CiAKIAkvKiBSZXF1aXJlZCBlbnRyeS4KQEAgLTQ4MjEsMjUgKzQ4MjIsNiBAQAogCWRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQgIlNjc2lMb29rdXAgQCAlcFxuIiwKIAkJIGlvYy0+bmFtZSwgaW9jLT5TY3NpTG9va3VwKSk7CiAKLQkvKiBDbGVhciB0aGUgVE0gZmxhZ3MKLQkgKi8KLQloZC0+YWJvcnRTQ3BudCA9IE5VTEw7Ci0KLQkvKiBDbGVhciB0aGUgcG9pbnRlciB1c2VkIHRvIHN0b3JlCi0JICogc2luZ2xlLXRocmVhZGVkIGNvbW1hbmRzLCBpLmUuLCB0aG9zZQotCSAqIGlzc3VlZCBkdXJpbmcgYSBidXMgc2NhbiwgZHYgYW5kCi0JICogY29uZmlndXJhdGlvbiBwYWdlcy4KLQkgKi8KLQloZC0+Y21kUHRyID0gTlVMTDsKLQotCS8qIEluaXRpYWxpemUgdGhpcyBTQ1NJIEhvc3RzJyB0aW1lcnMKLQkgKiBUbyB1c2UsIHNldCB0aGUgdGltZXIgZXhwaXJlcyBmaWVsZAotCSAqIGFuZCBhZGRfdGltZXIKLQkgKi8KLQlpbml0X3RpbWVyKCZoZC0+dGltZXIpOwotCWhkLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGhkOwotCWhkLT50aW1lci5mdW5jdGlvbiA9IG1wdHNjc2loX3RpbWVyX2V4cGlyZWQ7Ci0KIAlpb2MtPnNhc19kYXRhLnB0Q2xlYXIgPSBtcHRfcHRfY2xlYXI7CiAKIAloZC0+bGFzdF9xdWV1ZV9mdWxsID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwppbmRleCA4NDQwZjc4Zi4uYzI5NTc4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwpAQCAtNjI4LDYgKzYyOCwxNiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKKwlpZiAoaW9jLT5idXNfdHlwZSA9PSBTQVMpIHsKKwkJVmlydERldmljZSAqdmRldmljZSA9IHNjLT5kZXZpY2UtPmhvc3RkYXRhOworCisJCWlmICghdmRldmljZSB8fCAhdmRldmljZS0+dnRhcmdldCB8fAorCQkgICAgdmRldmljZS0+dnRhcmdldC0+ZGVsZXRlZCkgeworCQkJc2MtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKIAlzYy0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAJc2MtPnJlc3VsdCA9IERJRF9PSyA8PCAxNjsJCS8qIFNldCBkZWZhdWx0IHJlcGx5IGFzIE9LICovCiAJcFNjc2lSZXEgPSAoU0NTSUlPUmVxdWVzdF90ICopIG1mOwpAQCAtNjg5LDYgKzY5OSw3IEBACiAKIAkJc3dpdGNoKHN0YXR1cykgewogCQljYXNlIE1QSV9JT0NTVEFUVVNfQlVTWToJCQkvKiAweDAwMDIgKi8KKwkJY2FzZSBNUElfSU9DU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM6CS8qIDB4MDAwNiAqLwogCQkJLyogQ0hFQ0tNRSEKIAkJCSAqIE1heWJlOiBEUklWRVJfQlVTWSB8IFNVR0dFU1RfUkVUUlkgfCBESURfU09GVF9FUlJPUiAocmV0cnkpCiAJCQkgKiBCdXQgbm90OiBESURfQlVTX0JVU1kgbGVzdCBvbmUgcmlzawpAQCAtODcyLDcgKzg4Myw2IEBACiAJCWNhc2UgTVBJX0lPQ1NUQVRVU19JTlZBTElEX1NHTDoJCQkvKiAweDAwMDMgKi8KIAkJY2FzZSBNUElfSU9DU1RBVFVTX0lOVEVSTkFMX0VSUk9SOgkJLyogMHgwMDA0ICovCiAJCWNhc2UgTVBJX0lPQ1NUQVRVU19SRVNFUlZFRDoJCQkvKiAweDAwMDUgKi8KLQkJY2FzZSBNUElfSU9DU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM6CS8qIDB4MDAwNiAqLwogCQljYXNlIE1QSV9JT0NTVEFUVVNfSU5WQUxJRF9GSUVMRDoJCS8qIDB4MDAwNyAqLwogCQljYXNlIE1QSV9JT0NTVEFUVVNfSU5WQUxJRF9TVEFURToJCS8qIDB4MDAwOCAqLwogCQljYXNlIE1QSV9JT0NTVEFUVVNfU0NTSV9JT19EQVRBX0VSUk9SOgkJLyogMHgwMDQ2ICovCkBAIC04OTIsNyArOTAyLDcgQEAKICNlbmRpZgogCiAJfSAvKiBlbmQgb2YgYWRkcmVzcyByZXBseSBjYXNlICovCi0KK291dDoKIAkvKiBVbm1hcCB0aGUgRE1BIGJ1ZmZlcnMsIGlmIGFueS4gKi8KIAlzY3NpX2RtYV91bm1hcChzYyk7CiAKQEAgLTE3MjksOSArMTczOSw2IEBACiAJICovCiAJbWYgPSBNUFRfSU5ERVhfMl9NRlBUUihpb2MsIHNjcG50X2lkeCk7CiAJY3R4MmFib3J0ID0gbWYtPnUuZnJhbWUuaHdoZHIubXNnY3R4dS5Nc2dDb250ZXh0OwotCi0JaGQtPmFib3J0U0NwbnQgPSBTQ3BudDsKLQogCXJldHZhbCA9IG1wdHNjc2loX0lzc3VlVGFza01nbXQoaGQsCiAJCQkgTVBJX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLLAogCQkJIHZkZXZpY2UtPnZ0YXJnZXQtPmNoYW5uZWwsCkBAIC0yMjkzLDcgKzIzMDAsMTAgQEAKIAkJZWxzZQogCQkJbWF4X2RlcHRoID0gTVBUX1NDU0lfQ01EX1BFUl9ERVZfTE9XOwogCX0gZWxzZQotCQltYXhfZGVwdGggPSBNUFRfU0NTSV9DTURfUEVSX0RFVl9ISUdIOworCQkgbWF4X2RlcHRoID0gaW9jLT5zaC0+Y2FuX3F1ZXVlOworCisJaWYgKCFzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQorCQltYXhfZGVwdGggPSAxOwogCiAJaWYgKHFkZXB0aCA+IG1heF9kZXB0aCkKIAkJcWRlcHRoID0gbWF4X2RlcHRoOwpAQCAtMjYyNyw1MCArMjYzNyw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KLS8qCW1wdHNjc2loX3RpbWVyX2V4cGlyZWQgLSBDYWxsIGJhY2sgZm9yIHRpbWVyIHByb2Nlc3MuCi0gKglVc2VkIG9ubHkgZm9yIGR2IGZ1bmN0aW9uYWxpdHkuCi0gKglAZGF0YTogUG9pbnRlciB0byBNUFRfU0NTSV9IT1NUIHJlY2FzdCBhcyBhbiB1bnNpZ25lZCBsb25nCi0gKgotICovCi12b2lkCi1tcHRzY3NpaF90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlNUFRfU0NTSV9IT1NUICpoZCA9IChNUFRfU0NTSV9IT1NUICopIGRhdGE7Ci0JTVBUX0FEQVBURVIgCSppb2MgPSBoZC0+aW9jOwotCi0JZGR2cHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UICJUaW1lciBFeHBpcmVkISBDbWQgJXBcbiIsIGlvYy0+bmFtZSwgaGQtPmNtZFB0cikpOwotCi0JaWYgKGhkLT5jbWRQdHIpIHsKLQkJTVBJSGVhZGVyX3QgKmNtZCA9IChNUElIZWFkZXJfdCAqKWhkLT5jbWRQdHI7Ci0KLQkJaWYgKGNtZC0+RnVuY3Rpb24gPT0gTVBJX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCkgewotCQkJLyogRGVzaXJlIHRvIGlzc3VlIGEgdGFzayBtYW5hZ2VtZW50IHJlcXVlc3QgaGVyZS4KLQkJCSAqIFRNIHJlcXVlc3RzIE1VU1QgYmUgc2luZ2xlIHRocmVhZGVkLgotCQkJICogSWYgb2xkIGVoIGNvZGUgYW5kIG5vIFRNIGN1cnJlbnQsIGlzc3VlIHJlcXVlc3QuCi0JCQkgKiBJZiBuZXcgZWggY29kZSwgZG8gbm90aGluZy4gV2FpdCBmb3IgT1MgY21kIHRpbWVvdXQKLQkJCSAqCWZvciBidXMgcmVzZXQuCi0JCQkgKi8KLQkJfSBlbHNlIHsKLQkJCS8qIFBlcmZvcm0gYSBGVyByZWxvYWQgKi8KLQkJCWlmIChtcHRfSGFyZFJlc2V0SGFuZGxlcihpb2MsIE5PX1NMRUVQKSA8IDApIHsKLQkJCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAiRmlybXdhcmUgUmVsb2FkIEZBSUxFRCFcbiIsIGlvYy0+bmFtZSk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBUaGlzIHNob3VsZCBORVZFUiBoYXBwZW4gKi8KLQkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQgIk51bGwgY21kUHRyISEhIVxuIiwgaW9jLT5uYW1lKTsKLQl9Ci0KLQkvKiBObyBtb3JlIHByb2Nlc3NpbmcuCi0JICogVE0gY2FsbCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdCBmb3IgU0NTSSBUTSBNYW5hZ2VtZW50LgotCSAqIFRoZSBGVyB3aWxsIHJlcGx5IHRvIGFsbCBvdXRzdGFuZGluZyBjb21tYW5kcywgY2FsbGJhY2sgd2lsbCBmaW5pc2ggY2xlYW51cC4KLQkgKiBIYXJkIHJlc2V0IGNsZWFuLXVwIHdpbGwgZnJlZSBhbGwgcmVzb3VyY2VzLgotCSAqLwotCWRkdnByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVCAiVGltZXIgRXhwaXJlZCBDb21wbGV0ZSFcbiIsIGlvYy0+bmFtZSkpOwotCi0JcmV0dXJuOwotfQogCiAvKioKICAqCW1wdHNjc2loX2dldF9jb21wbGV0aW9uX2NvZGUgLQpAQCAtMzI2NSw2ICszMjMxLDUgQEAKIEVYUE9SVF9TWU1CT0wobXB0c2NzaWhfZXZlbnRfcHJvY2Vzcyk7CiBFWFBPUlRfU1lNQk9MKG1wdHNjc2loX2lvY19yZXNldCk7CiBFWFBPUlRfU1lNQk9MKG1wdHNjc2loX2NoYW5nZV9xdWV1ZV9kZXB0aCk7Ci1FWFBPUlRfU1lNQk9MKG1wdHNjc2loX3RpbWVyX2V4cGlyZWQpOwogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmgKaW5kZXggZWIzZjY3Ny4uZTBiMzNlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaApAQCAtMTI5LDcgKzEyOSw2IEBACiBleHRlcm4gaW50IG1wdHNjc2loX2V2ZW50X3Byb2Nlc3MoTVBUX0FEQVBURVIgKmlvYywgRXZlbnROb3RpZmljYXRpb25SZXBseV90ICpwRXZSZXBseSk7CiBleHRlcm4gaW50IG1wdHNjc2loX2lvY19yZXNldChNUFRfQURBUFRFUiAqaW9jLCBpbnQgcG9zdF9yZXNldCk7CiBleHRlcm4gaW50IG1wdHNjc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpOwotZXh0ZXJuIHZvaWQgbXB0c2NzaWhfdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpOwogZXh0ZXJuIHU4IG1wdHNjc2loX3JhaWRfaWRfdG9fbnVtKE1QVF9BREFQVEVSICppb2MsIHU4IGNoYW5uZWwsIHU4IGlkKTsKIGV4dGVybiBpbnQgbXB0c2NzaWhfaXNfcGh5c19kaXNrKE1QVF9BREFQVEVSICppb2MsIHU4IGNoYW5uZWwsIHU4IGlkKTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbXB0c2NzaWhfaG9zdF9hdHRyc1tdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKaW5kZXggYzViODA4Zi4uNjlmNDI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCkBAIC0xNDcyLDI4ICsxNDcyLDcgQEAKIAlkcHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UICJTY3NpTG9va3VwIEAgJXBcbiIsCiAJCSBpb2MtPm5hbWUsIGlvYy0+U2NzaUxvb2t1cCkpOwogCi0JLyogQ2xlYXIgdGhlIFRNIGZsYWdzCi0JICovCi0JaGQtPmFib3J0U0NwbnQgPSBOVUxMOwotCi0JLyogQ2xlYXIgdGhlIHBvaW50ZXIgdXNlZCB0byBzdG9yZQotCSAqIHNpbmdsZS10aHJlYWRlZCBjb21tYW5kcywgaS5lLiwgdGhvc2UKLQkgKiBpc3N1ZWQgZHVyaW5nIGEgYnVzIHNjYW4sIGR2IGFuZAotCSAqIGNvbmZpZ3VyYXRpb24gcGFnZXMuCi0JICovCi0JaGQtPmNtZFB0ciA9IE5VTEw7Ci0KLQkvKiBJbml0aWFsaXplIHRoaXMgU0NTSSBIb3N0cycgdGltZXJzCi0JICogVG8gdXNlLCBzZXQgdGhlIHRpbWVyIGV4cGlyZXMgZmllbGQKLQkgKiBhbmQgYWRkX3RpbWVyCi0JICovCi0JaW5pdF90aW1lcigmaGQtPnRpbWVyKTsKLQloZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBoZDsKLQloZC0+dGltZXIuZnVuY3Rpb24gPSBtcHRzY3NpaF90aW1lcl9leHBpcmVkOwotCiAJaW9jLT5zcGlfZGF0YS5TYWZfVGUgPSBtcHRfc2FmX3RlOwotCi0JaGQtPm5lZ29OdnJhbSA9IE1QVF9TQ1NJQ0ZHX1VTRV9OVlJBTTsKIAlkZHZwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKIAkJInNhZl90ZSAleFxuIiwKIAkJaW9jLT5uYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL0tjb25maWcgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwppbmRleCA2OGFiMzlkLi5kZjFmODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwpAQCAtMjMzLDYgKzIzMywxOSBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaXNsMjkwMDMuCiAKK2NvbmZpZyBFUDkzWFhfUFdNCisJdHJpc3RhdGUgIkVQOTN4eCBQV00gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfRVA5M1hYCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBkZXZpY2UgZHJpdmVyIHN1cHBvcnQgZm9yIHRoZSBQV00gY2hhbm5lbHMKKwkgIG9uIHRoZSBDaXJydXMgRVA5M3h4IHByb2Nlc3NvcnMuICBUaGUgRVA5MzA3IGNoaXAgb25seSBoYXMgb25lCisJICBQV00gY2hhbm5lbCBhbGwgdGhlIG90aGVycyBoYXZlIHR3bywgdGhlIHNlY29uZCBjaGFubmVsIGlzIGFuCisJICBhbHRlcm5hdGUgZnVuY3Rpb24gb2YgdGhlIEVHUElPMTQgcGluLiAgQSBzeXNmcyBpbnRlcmZhY2UgaXMKKwkgIHByb3ZpZGVkIHRvIGNvbnRyb2wgdGhlIFBXTSBjaGFubmVscy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgZXA5M3h4X3B3bS4KKwogc291cmNlICJkcml2ZXJzL21pc2MvYzJwb3J0L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWlzYy9lZXByb20vS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9taXNjL2NiNzEwL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKaW5kZXggMzZmNzMzYy4uZjk4MmQyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBAQAogb2JqLSQoQ09ORklHX1NHSV9HUlUpCQkrPSBzZ2ktZ3J1Lwogb2JqLSQoQ09ORklHX0hQX0lMTykJCSs9IGhwaWxvLm8KIG9iai0kKENPTkZJR19JU0wyOTAwMykJCSs9IGlzbDI5MDAzLm8KK29iai0kKENPTkZJR19FUDkzWFhfUFdNKQkrPSBlcDkzeHhfcHdtLm8KIG9iai0kKENPTkZJR19DMlBPUlQpCQkrPSBjMnBvcnQvCiBvYmoteQkJCQkrPSBlZXByb20vCiBvYmoteQkJCQkrPSBjYjcxMC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYyBiL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYwppbmRleCAzNDg0NDNiLi43YjAzOTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMKKysrIGIvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jCkBAIC0zMywyNCArMzMsNDQgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgZW5jbG9zdXJlX2NsYXNzOwogCiAvKioKLSAqIGVuY2xvc3VyZV9maW5kIC0gZmluZCBhbiBlbmNsb3N1cmUgZ2l2ZW4gYSBkZXZpY2UKLSAqIEBkZXY6CXRoZSBkZXZpY2UgdG8gZmluZCBmb3IKKyAqIGVuY2xvc3VyZV9maW5kIC0gZmluZCBhbiBlbmNsb3N1cmUgZ2l2ZW4gYSBwYXJlbnQgZGV2aWNlCisgKiBAZGV2Ogl0aGUgcGFyZW50IHRvIG1hdGNoIGFnYWluc3QKKyAqIEBzdGFydDoJT3B0aW9uYWwgZW5jbG9zdXJlIGRldmljZSB0byBzdGFydCBmcm9tIChOVUxMIGlmIG5vbmUpCiAgKgotICogTG9va3MgdGhyb3VnaCB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGVuY2xvc3VyZXMgdG8gc2VlCi0gKiBpZiBpdCBjYW4gZmluZCBhIG1hdGNoIGZvciBhIGRldmljZS4gIFJldHVybnMgTlVMTCBpZiBubwotICogZW5jbG9zdXJlIGlzIGZvdW5kLiBPYnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBlbmNsb3N1cmUgY2xhc3MKLSAqIGRldmljZSB3aGljaCBtdXN0IGJlIHJlbGVhc2VkIHdpdGggZGV2aWNlX3B1dCgpLgorICogTG9va3MgdGhyb3VnaCB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGVuY2xvc3VyZXMgdG8gZmluZCBhbGwgdGhvc2UKKyAqIHdpdGggQGRldiBhcyBhIHBhcmVudC4gIFJldHVybnMgTlVMTCBpZiBubyBlbmNsb3N1cmUgaXMKKyAqIGZvdW5kLiBAc3RhcnQgY2FuIGJlIHVzZWQgYXMgYSBzdGFydGluZyBwb2ludCB0byBvYnRhaW4gbXVsdGlwbGUKKyAqIGVuY2xvc3VyZXMgcGVyIHBhcmVudCAoc2hvdWxkIGJlZ2luIHdpdGggTlVMTCBhbmQgdGhlbiBiZSBzZXQgdG8KKyAqIGVhY2ggcmV0dXJuZWQgZW5jbG9zdXJlIGRldmljZSkuIE9idGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlCisgKiBlbmNsb3N1cmUgY2xhc3MgZGV2aWNlIHdoaWNoIG11c3QgYmUgcmVsZWFzZWQgd2l0aCBkZXZpY2VfcHV0KCkuCisgKiBJZiBAc3RhcnQgaXMgbm90IE5VTEwsIGEgcmVmZXJlbmNlIG11c3QgYmUgdGFrZW4gb24gaXQgd2hpY2ggaXMKKyAqIHJlbGVhc2VkIGJlZm9yZSByZXR1cm5pbmcgKHRoaXMgYWxsb3dzIGEgbG9vcCB0aHJvdWdoIGFsbAorICogZW5jbG9zdXJlcyB0byBleGl0IHdpdGggb25seSB0aGUgcmVmZXJlbmNlIG9uIHRoZSBlbmNsb3N1cmUgb2YKKyAqIGludGVyZXN0IGhlbGQpLiAgTm90ZSB0aGF0IHRoZSBAZGV2IG1heSBjb3JyZXNwb25kIHRvIHRoZSBhY3R1YWwKKyAqIGRldmljZSBob3VzaW5nIHRoZSBlbmNsb3N1cmUsIGluIHdoaWNoIGNhc2Ugbm8gaXRlcmF0aW9uIHZpYSBAc3RhcnQKKyAqIGlzIHJlcXVpcmVkLgogICovCi1zdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZW5jbG9zdXJlX2ZpbmQoc3RydWN0IGRldmljZSAqZGV2KQorc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVuY2xvc3VyZV9maW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKnN0YXJ0KQogewogCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2OwogCiAJbXV0ZXhfbG9jaygmY29udGFpbmVyX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShlZGV2LCAmY29udGFpbmVyX2xpc3QsIG5vZGUpIHsKLQkJaWYgKGVkZXYtPmVkZXYucGFyZW50ID09IGRldikgewotCQkJZ2V0X2RldmljZSgmZWRldi0+ZWRldik7Ci0JCQltdXRleF91bmxvY2soJmNvbnRhaW5lcl9saXN0X2xvY2spOwotCQkJcmV0dXJuIGVkZXY7CisJZWRldiA9IGxpc3RfcHJlcGFyZV9lbnRyeShzdGFydCwgJmNvbnRhaW5lcl9saXN0LCBub2RlKTsKKwlpZiAoc3RhcnQpCisJCXB1dF9kZXZpY2UoJnN0YXJ0LT5lZGV2KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoZWRldiwgJmNvbnRhaW5lcl9saXN0LCBub2RlKSB7CisJCXN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGVkZXYtPmVkZXYucGFyZW50OworCQkvKiBwYXJlbnQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZSwgc28gaXRlcmF0ZSB1cCB0bworCQkgKiB0aGUgcm9vdCBvZiB0aGUgdHJlZSBpZiBuZWNlc3NhcnkgKi8KKwkJd2hpbGUgKHBhcmVudCkgeworCQkJaWYgKHBhcmVudCA9PSBkZXYpIHsKKwkJCQlnZXRfZGV2aWNlKCZlZGV2LT5lZGV2KTsKKwkJCQltdXRleF91bmxvY2soJmNvbnRhaW5lcl9saXN0X2xvY2spOworCQkJCXJldHVybiBlZGV2OworCQkJfQorCQkJcGFyZW50ID0gcGFyZW50LT5wYXJlbnQ7CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZjb250YWluZXJfbGlzdF9sb2NrKTsKQEAgLTI5NSw2ICszMTUsOSBAQAogCiAJY2RldiA9ICZlZGV2LT5jb21wb25lbnRbY29tcG9uZW50XTsKIAorCWlmIChjZGV2LT5kZXYgPT0gZGV2KQorCQlyZXR1cm4gLUVFWElTVDsKKwogCWlmIChjZGV2LT5kZXYpCiAJCWVuY2xvc3VyZV9yZW1vdmVfbGlua3MoY2Rldik7CiAKQEAgLTMxMiwxOSArMzM1LDI1IEBACiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciBhbiBlcnJvci4KICAqCiAgKi8KLWludCBlbmNsb3N1cmVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiwgaW50IGNvbXBvbmVudCkKK2ludCBlbmNsb3N1cmVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiwgc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICpjZGV2OworCWludCBpOwogCi0JaWYgKCFlZGV2IHx8IGNvbXBvbmVudCA+PSBlZGV2LT5jb21wb25lbnRzKQorCWlmICghZWRldiB8fCAhZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNkZXYgPSAmZWRldi0+Y29tcG9uZW50W2NvbXBvbmVudF07Ci0KLQlkZXZpY2VfZGVsKCZjZGV2LT5jZGV2KTsKLQlwdXRfZGV2aWNlKGNkZXYtPmRldik7Ci0JY2Rldi0+ZGV2ID0gTlVMTDsKLQlyZXR1cm4gZGV2aWNlX2FkZCgmY2Rldi0+Y2Rldik7CisJZm9yIChpID0gMDsgaSA8IGVkZXYtPmNvbXBvbmVudHM7IGkrKykgeworCQljZGV2ID0gJmVkZXYtPmNvbXBvbmVudFtpXTsKKwkJaWYgKGNkZXYtPmRldiA9PSBkZXYpIHsKKwkJCWVuY2xvc3VyZV9yZW1vdmVfbGlua3MoY2Rldik7CisJCQlkZXZpY2VfZGVsKCZjZGV2LT5jZGV2KTsKKwkJCXB1dF9kZXZpY2UoZGV2KTsKKwkJCWNkZXYtPmRldiA9IE5VTEw7CisJCQlyZXR1cm4gZGV2aWNlX2FkZCgmY2Rldi0+Y2Rldik7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9ERVY7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlbmNsb3N1cmVfcmVtb3ZlX2RldmljZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lcDkzeHhfcHdtLmMgYi9kcml2ZXJzL21pc2MvZXA5M3h4X3B3bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNDY5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2MvZXA5M3h4X3B3bS5jCkBAIC0wLDAgKzEsMzg0IEBACisvKgorICogIFNpbXBsZSBQV00gZHJpdmVyIGZvciBFUDkzWFgKKyAqCisgKgkoYykgQ29weXJpZ2h0IDIwMDkgIE1hdHRoaWV1IENyYXBldCA8bWNyYXBldEBnbWFpbC5jb20+CisgKgkoYykgQ29weXJpZ2h0IDIwMDkgIEggSGFydGxleSBTd2VldGVuIDxoc3dlZXRlbkB2aXNpb25lbmdyYXZlcnMuY29tPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIEVQOTMwNyBoYXMgb25seSBvbmUgY2hhbm5lbDoKKyAqICAgIC0gUFdNT1VUCisgKgorICogIEVQOTMwMS8wMi8xMi8xNSBoYXZlIHR3byBjaGFubmVsczoKKyAqICAgIC0gUFdNT1VUCisgKiAgICAtIFBXTU9VVDEgKGFsdGVybmF0ZSBmdW5jdGlvbiBmb3IgRUdQSU8xNCkKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KKworI2RlZmluZSBFUDkzWFhfUFdNeF9URVJNX0NPVU5UCTB4MDAKKyNkZWZpbmUgRVA5M1hYX1BXTXhfRFVUWV9DWUNMRQkweDA0CisjZGVmaW5lIEVQOTNYWF9QV014X0VOQUJMRQkweDA4CisjZGVmaW5lIEVQOTNYWF9QV014X0lOVkVSVAkweDBDCisKKyNkZWZpbmUgRVA5M1hYX1BXTV9NQVhfQ09VTlQJMHhGRkZGCisKK3N0cnVjdCBlcDkzeHhfcHdtIHsKKwl2b2lkIF9faW9tZW0JKm1taW9fYmFzZTsKKwlzdHJ1Y3QgY2xrCSpjbGs7CisJdTMyCQlkdXR5X3BlcmNlbnQ7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZXA5M3h4X3B3bV93cml0ZWwoc3RydWN0IGVwOTN4eF9wd20gKnB3bSwKKwkJdW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IG9mZikKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBwd20tPm1taW9fYmFzZSArIG9mZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGVwOTN4eF9wd21fcmVhZGwoc3RydWN0IGVwOTN4eF9wd20gKnB3bSwKKwkJdW5zaWduZWQgaW50IG9mZikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwocHdtLT5tbWlvX2Jhc2UgKyBvZmYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXA5M3h4X3B3bV93cml0ZV90YyhzdHJ1Y3QgZXA5M3h4X3B3bSAqcHdtLCB1MTYgdmFsdWUpCit7CisJZXA5M3h4X3B3bV93cml0ZWwocHdtLCB2YWx1ZSwgRVA5M1hYX1BXTXhfVEVSTV9DT1VOVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGVwOTN4eF9wd21fcmVhZF90YyhzdHJ1Y3QgZXA5M3h4X3B3bSAqcHdtKQoreworCXJldHVybiBlcDkzeHhfcHdtX3JlYWRsKHB3bSwgRVA5M1hYX1BXTXhfVEVSTV9DT1VOVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlcDkzeHhfcHdtX3dyaXRlX2RjKHN0cnVjdCBlcDkzeHhfcHdtICpwd20sIHUxNiB2YWx1ZSkKK3sKKwllcDkzeHhfcHdtX3dyaXRlbChwd20sIHZhbHVlLCBFUDkzWFhfUFdNeF9EVVRZX0NZQ0xFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVwOTN4eF9wd21fZW5hYmxlKHN0cnVjdCBlcDkzeHhfcHdtICpwd20pCit7CisJZXA5M3h4X3B3bV93cml0ZWwocHdtLCAweDEsIEVQOTNYWF9QV014X0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlcDkzeHhfcHdtX2Rpc2FibGUoc3RydWN0IGVwOTN4eF9wd20gKnB3bSkKK3sKKwllcDkzeHhfcHdtX3dyaXRlbChwd20sIDB4MCwgRVA5M1hYX1BXTXhfRU5BQkxFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXA5M3h4X3B3bV9pc19lbmFibGVkKHN0cnVjdCBlcDkzeHhfcHdtICpwd20pCit7CisJcmV0dXJuIGVwOTN4eF9wd21fcmVhZGwocHdtLCBFUDkzWFhfUFdNeF9FTkFCTEUpICYgMHgxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXA5M3h4X3B3bV9pbnZlcnQoc3RydWN0IGVwOTN4eF9wd20gKnB3bSkKK3sKKwllcDkzeHhfcHdtX3dyaXRlbChwd20sIDB4MSwgRVA5M1hYX1BXTXhfSU5WRVJUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVwOTN4eF9wd21fbm9ybWFsKHN0cnVjdCBlcDkzeHhfcHdtICpwd20pCit7CisJZXA5M3h4X3B3bV93cml0ZWwocHdtLCAweDAsIEVQOTNYWF9QV014X0lOVkVSVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGVwOTN4eF9wd21faXNfaW52ZXJ0ZWQoc3RydWN0IGVwOTN4eF9wd20gKnB3bSkKK3sKKwlyZXR1cm4gZXA5M3h4X3B3bV9yZWFkbChwd20sIEVQOTNYWF9QV014X0lOVkVSVCkgJiAweDE7Cit9CisKKy8qCisgKiAvc3lzL2RldmljZXMvcGxhdGZvcm0vZXA5M3h4LXB3bS5OCisgKiAgIC9taW5fZnJlcSAgICAgIHJlYWQtb25seSAgIG1pbmltdW0gcHdtIG91dHB1dCBmcmVxdWVuY3kKKyAqICAgL21heF9yZXEgICAgICAgcmVhZC1vbmx5ICAgbWF4aW11bSBwd20gb3V0cHV0IGZyZXF1ZW5jeQorICogICAvZnJlcSAgICAgICAgICByZWFkLXdyaXRlICBwd20gb3V0cHV0IGZyZXF1ZW5jeSAoMCA9IGRpc2FibGUgb3V0cHV0KQorICogICAvZHV0eV9wZXJjZW50ICByZWFkLXdyaXRlICBwd20gZHV0eSBjeWNsZSBwZXJjZW50ICgxLi45OSkKKyAqICAgL2ludmVydCAgICAgICAgcmVhZC13cml0ZSAgaW52ZXJ0IHB3bSBvdXRwdXQKKyAqLworCitzdGF0aWMgc3NpemVfdCBlcDkzeHhfcHdtX2dldF9taW5fZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBlcDkzeHhfcHdtICpwd20gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUocHdtLT5jbGspOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCByYXRlIC8gKEVQOTNYWF9QV01fTUFYX0NPVU5UICsgMSkpOworfQorCitzdGF0aWMgc3NpemVfdCBlcDkzeHhfcHdtX2dldF9tYXhfZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBlcDkzeHhfcHdtICpwd20gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUocHdtLT5jbGspOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCByYXRlIC8gMik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVwOTN4eF9wd21fZ2V0X2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZXA5M3h4X3B3bSAqcHdtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoZXA5M3h4X3B3bV9pc19lbmFibGVkKHB3bSkpIHsKKwkJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKHB3bS0+Y2xrKTsKKwkJdTE2IHRlcm0gPSBlcDkzeHhfcHdtX3JlYWRfdGMocHdtKTsKKworCQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHJhdGUgLyAodGVybSArIDEpKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gc3ByaW50ZihidWYsICJkaXNhYmxlZFxuIik7CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBlcDkzeHhfcHdtX3NldF9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZXA5M3h4X3B3bSAqcHdtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJbG9uZyB2YWw7CisJaW50IGVycjsKKworCWVyciA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmFsID09IDApIHsKKwkJZXA5M3h4X3B3bV9kaXNhYmxlKHB3bSk7CisJfSBlbHNlIGlmICh2YWwgPD0gKGNsa19nZXRfcmF0ZShwd20tPmNsaykgLyAyKSkgeworCQl1MzIgdGVybSwgZHV0eTsKKworCQl2YWwgPSAoY2xrX2dldF9yYXRlKHB3bS0+Y2xrKSAvIHZhbCkgLSAxOworCQlpZiAodmFsID4gRVA5M1hYX1BXTV9NQVhfQ09VTlQpCisJCQl2YWwgPSBFUDkzWFhfUFdNX01BWF9DT1VOVDsKKwkJaWYgKHZhbCA8IDEpCisJCQl2YWwgPSAxOworCisJCXRlcm0gPSBlcDkzeHhfcHdtX3JlYWRfdGMocHdtKTsKKwkJZHV0eSA9ICgodmFsICsgMSkgKiBwd20tPmR1dHlfcGVyY2VudCAvIDEwMCkgLSAxOworCisJCS8qIElmIHB3bSBpcyBydW5uaW5nLCBvcmRlciBpcyBpbXBvcnRhbnQgKi8KKwkJaWYgKHZhbCA+IHRlcm0pIHsKKwkJCWVwOTN4eF9wd21fd3JpdGVfdGMocHdtLCB2YWwpOworCQkJZXA5M3h4X3B3bV93cml0ZV9kYyhwd20sIGR1dHkpOworCQl9IGVsc2UgeworCQkJZXA5M3h4X3B3bV93cml0ZV9kYyhwd20sIGR1dHkpOworCQkJZXA5M3h4X3B3bV93cml0ZV90Yyhwd20sIHZhbCk7CisJCX0KKworCQlpZiAoIWVwOTN4eF9wd21faXNfZW5hYmxlZChwd20pKQorCQkJZXA5M3h4X3B3bV9lbmFibGUocHdtKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVwOTN4eF9wd21fZ2V0X2R1dHlfcGVyY2VudChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBlcDkzeHhfcHdtICpwd20gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwd20tPmR1dHlfcGVyY2VudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVwOTN4eF9wd21fc2V0X2R1dHlfcGVyY2VudChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGVwOTN4eF9wd20gKnB3bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWxvbmcgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbCA+IDAgJiYgdmFsIDwgMTAwKSB7CisJCXUzMiB0ZXJtID0gZXA5M3h4X3B3bV9yZWFkX3RjKHB3bSk7CisJCWVwOTN4eF9wd21fd3JpdGVfZGMocHdtLCAoKHRlcm0gKyAxKSAqIHZhbCAvIDEwMCkgLSAxKTsKKwkJcHdtLT5kdXR5X3BlcmNlbnQgPSB2YWw7CisJCXJldHVybiBjb3VudDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHNzaXplX3QgZXA5M3h4X3B3bV9nZXRfaW52ZXJ0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGVwOTN4eF9wd20gKnB3bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGVwOTN4eF9wd21faXNfaW52ZXJ0ZWQocHdtKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVwOTN4eF9wd21fc2V0X2ludmVydChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGVwOTN4eF9wd20gKnB3bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWxvbmcgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbCA9PSAwKQorCQllcDkzeHhfcHdtX25vcm1hbChwd20pOworCWVsc2UgaWYgKHZhbCA9PSAxKQorCQllcDkzeHhfcHdtX2ludmVydChwd20pOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihtaW5fZnJlcSwgU19JUlVHTywgZXA5M3h4X3B3bV9nZXRfbWluX2ZyZXEsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG1heF9mcmVxLCBTX0lSVUdPLCBlcDkzeHhfcHdtX2dldF9tYXhfZnJlcSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZnJlcSwgU19JV1VHTyB8IFNfSVJVR08sCisJCSAgIGVwOTN4eF9wd21fZ2V0X2ZyZXEsIGVwOTN4eF9wd21fc2V0X2ZyZXEpOworc3RhdGljIERFVklDRV9BVFRSKGR1dHlfcGVyY2VudCwgU19JV1VHTyB8IFNfSVJVR08sCisJCSAgIGVwOTN4eF9wd21fZ2V0X2R1dHlfcGVyY2VudCwgZXA5M3h4X3B3bV9zZXRfZHV0eV9wZXJjZW50KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihpbnZlcnQsIFNfSVdVR08gfCBTX0lSVUdPLAorCQkgICBlcDkzeHhfcHdtX2dldF9pbnZlcnQsIGVwOTN4eF9wd21fc2V0X2ludmVydCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICplcDkzeHhfcHdtX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX21pbl9mcmVxLmF0dHIsCisJJmRldl9hdHRyX21heF9mcmVxLmF0dHIsCisJJmRldl9hdHRyX2ZyZXEuYXR0ciwKKwkmZGV2X2F0dHJfZHV0eV9wZXJjZW50LmF0dHIsCisJJmRldl9hdHRyX2ludmVydC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGVwOTN4eF9wd21fc3lzZnNfZmlsZXMgPSB7CisJLmF0dHJzCT0gZXA5M3h4X3B3bV9hdHRycywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVwOTN4eF9wd21fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZXA5M3h4X3B3bSAqcHdtOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBlcnI7CisKKwllcnIgPSBlcDkzeHhfcHdtX2FjcXVpcmVfZ3BpbyhwZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcHdtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVwOTN4eF9wd20pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXB3bSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbm9fbWVtOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBmYWlsX25vX21lbV9yZXNvdXJjZTsKKwl9CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGZhaWxfbm9fbWVtX3Jlc291cmNlOworCX0KKworCXB3bS0+bW1pb19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChwd20tPm1taW9fYmFzZSA9PSBOVUxMKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBmYWlsX25vX2lvcmVtYXA7CisJfQorCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmVwOTN4eF9wd21fc3lzZnNfZmlsZXMpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbF9ub19zeXNmczsKKworCXB3bS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAicHdtX2NsayIpOworCWlmIChJU19FUlIocHdtLT5jbGspKSB7CisJCWVyciA9IFBUUl9FUlIocHdtLT5jbGspOworCQlnb3RvIGZhaWxfbm9fY2xrOworCX0KKworCXB3bS0+ZHV0eV9wZXJjZW50ID0gNTA7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwd20pOworCisJLyogZGlzYWJsZSBwd20gYXQgc3RhcnR1cC4gQXZvaWRzIHplcm8gdmFsdWUuICovCisJZXA5M3h4X3B3bV9kaXNhYmxlKHB3bSk7CisJZXA5M3h4X3B3bV93cml0ZV90Yyhwd20sIEVQOTNYWF9QV01fTUFYX0NPVU5UKTsKKwllcDkzeHhfcHdtX3dyaXRlX2RjKHB3bSwgRVA5M1hYX1BXTV9NQVhfQ09VTlQgLyAyKTsKKworCWNsa19lbmFibGUocHdtLT5jbGspOworCisJcmV0dXJuIDA7CisKK2ZhaWxfbm9fY2xrOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZlcDkzeHhfcHdtX3N5c2ZzX2ZpbGVzKTsKK2ZhaWxfbm9fc3lzZnM6CisJaW91bm1hcChwd20tPm1taW9fYmFzZSk7CitmYWlsX25vX2lvcmVtYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CitmYWlsX25vX21lbV9yZXNvdXJjZToKKwlrZnJlZShwd20pOworZmFpbF9ub19tZW06CisJZXA5M3h4X3B3bV9yZWxlYXNlX2dwaW8ocGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2V4aXQgZXA5M3h4X3B3bV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZXA5M3h4X3B3bSAqcHdtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJZXA5M3h4X3B3bV9kaXNhYmxlKHB3bSk7CisJY2xrX2Rpc2FibGUocHdtLT5jbGspOworCWNsa19wdXQocHdtLT5jbGspOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZlcDkzeHhfcHdtX3N5c2ZzX2ZpbGVzKTsKKwlpb3VubWFwKHB3bS0+bW1pb19iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlrZnJlZShwd20pOworCWVwOTN4eF9wd21fcmVsZWFzZV9ncGlvKHBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVwOTN4eF9wd21fZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJlcDkzeHgtcHdtIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKGVwOTN4eF9wd21fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVwOTN4eF9wd21faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmVwOTN4eF9wd21fZHJpdmVyLCBlcDkzeHhfcHdtX3Byb2JlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVwOTN4eF9wd21fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlcDkzeHhfcHdtX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGVwOTN4eF9wd21faW5pdCk7Cittb2R1bGVfZXhpdChlcDkzeHhfcHdtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXR0aGlldSBDcmFwZXQgPG1jcmFwZXRAZ21haWwuY29tPiwgIgorCSAgICAgICJIIEhhcnRsZXkgU3dlZXRlbiA8aHN3ZWV0ZW5AdmlzaW9uZW5ncmF2ZXJzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRVA5M3h4IFBXTSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06ZXA5M3h4LXB3bSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS14cC94cG5ldC5jIGIvZHJpdmVycy9taXNjL3NnaS14cC94cG5ldC5jCmluZGV4IDVkNzc4ZWMuLjE2ZjBhYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBuZXQuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwbmV0LmMKQEAgLTI0MCw3ICsyNDAsNiBAQAogCQkodm9pZCAqKXNrYi0+aGVhZCwgKHZvaWQgKilza2ItPmRhdGEsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSwKIAkJc2tiX2VuZF9wb2ludGVyKHNrYiksIHNrYi0+bGVuKTsKIAotCXhwbmV0X2RldmljZS0+bGFzdF9yeCA9IGppZmZpZXM7CiAJeHBuZXRfZGV2aWNlLT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJeHBuZXRfZGV2aWNlLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbiArIEVUSF9ITEVOOwogCkBAIC00MzYsNyArNDM1LDcgQEAKIAogCWlmIChza2ItPmRhdGFbMF0gPT0gMHgzMykgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOwkvKiBub3RoaW5nIG5lZWRlZCB0byBiZSBkb25lICovCisJCXJldHVybiBORVRERVZfVFhfT0s7CS8qIG5vdGhpbmcgbmVlZGVkIHRvIGJlIGRvbmUgKi8KIAl9CiAKIAkvKgpAQCAtNTAzLDcgKzUwMiw3IEBACiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IGUxYWE4NDcuLjg3NDFkMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC00MzAsNyArNDMxLDcgQEAKIAkJCQljbGsgPSAyNTU7CiAJCQlob3N0LT5jY2xrID0gaG9zdC0+bWNsayAvICgyICogKGNsayArIDEpKTsKIAkJfQotCQlpZiAoaG9zdC0+aHdfZGVzaWduZXIgPT0gMHg4MCkKKwkJaWYgKGhvc3QtPmh3X2Rlc2lnbmVyID09IEFNQkFfVkVORE9SX1NUKQogCQkJY2xrIHw9IE1DSV9GQ0VOOyAvKiBCdWcgZml4IGluIFNUIElQIGJsb2NrICovCiAJCWNsayB8PSBNQ0lfQ0xLX0VOQUJMRTsKIAl9CkBAIC00NDMsNyArNDQ0LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBNTUNfUE9XRVJfVVA6CiAJCS8qIFRoZSBTVCB2ZXJzaW9uIGRvZXMgbm90IGhhdmUgdGhpcywgZmFsbCB0aHJvdWdoIHRvIFBPV0VSX09OICovCi0JCWlmIChob3N0LT5od19kZXNpZ25lciAhPSAweDgwKSB7CisJCWlmIChob3N0LT5od19kZXNpZ25lciAhPSBBTUJBX1ZFTkRPUl9TVCkgewogCQkJcHdyIHw9IE1DSV9QV1JfVVA7CiAJCQlicmVhazsKIAkJfQpAQCAtNDUzLDcgKzQ1NCw3IEBACiAJfQogCiAJaWYgKGlvcy0+YnVzX21vZGUgPT0gTU1DX0JVU01PREVfT1BFTkRSQUlOKSB7Ci0JCWlmIChob3N0LT5od19kZXNpZ25lciAhPSAweDgwKQorCQlpZiAoaG9zdC0+aHdfZGVzaWduZXIgIT0gQU1CQV9WRU5ET1JfU1QpCiAJCQlwd3IgfD0gTUNJX1JPRDsKIAkJZWxzZSB7CiAJCQkvKgpAQCAtNDcyLDE3ICs0NzMsNDEgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgbW1jaV9nZXRfcm8oc3RydWN0IG1tY19ob3N0ICptbWMpCit7CisJc3RydWN0IG1tY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwlpZiAoaG9zdC0+Z3Bpb193cCA9PSAtRU5PU1lTKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXJldHVybiBncGlvX2dldF92YWx1ZShob3N0LT5ncGlvX3dwKTsKK30KKworc3RhdGljIGludCBtbWNpX2dldF9jZChzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKK3sKKwlzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJaWYgKGhvc3QtPmdwaW9fY2QgPT0gLUVOT1NZUykKKwkJc3RhdHVzID0gaG9zdC0+cGxhdC0+c3RhdHVzKG1tY19kZXYoaG9zdC0+bW1jKSk7CisJZWxzZQorCQlzdGF0dXMgPSBncGlvX2dldF92YWx1ZShob3N0LT5ncGlvX2NkKTsKKworCXJldHVybiAhc3RhdHVzOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtbWNpX29wcyA9IHsKIAkucmVxdWVzdAk9IG1tY2lfcmVxdWVzdCwKIAkuc2V0X2lvcwk9IG1tY2lfc2V0X2lvcywKKwkuZ2V0X3JvCQk9IG1tY2lfZ2V0X3JvLAorCS5nZXRfY2QJCT0gbW1jaV9nZXRfY2QsCiB9OwogCiBzdGF0aWMgdm9pZCBtbWNpX2NoZWNrX3N0YXR1cyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IG1tY2lfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgbW1jaV9ob3N0ICopZGF0YTsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBzdGF0dXMgPSBtbWNpX2dldF9jZChob3N0LT5tbWMpOwogCi0Jc3RhdHVzID0gaG9zdC0+cGxhdC0+c3RhdHVzKG1tY19kZXYoaG9zdC0+bW1jKSk7CiAJaWYgKHN0YXR1cyBeIGhvc3QtPm9sZHN0YXQpCiAJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgMCk7CiAKQEAgLTUxNSwxMiArNTQwLDE1IEBACiAKIAlob3N0ID0gbW1jX3ByaXYobW1jKTsKIAlob3N0LT5tbWMgPSBtbWM7Ci0JLyogQml0cyAxMiB0aHJ1IDE5IGlzIHRoZSBkZXNpZ25lciAqLwotCWhvc3QtPmh3X2Rlc2lnbmVyID0gKGRldi0+cGVyaXBoaWQgPj4gMTIpICYgMHhmZjsKLQkvKiBCaXRzIDIwIHRocnUgMjMgaXMgdGhlIHJldmlzb24gKi8KLQlob3N0LT5od19yZXZpc2lvbiA9IChkZXYtPnBlcmlwaGlkID4+IDIwKSAmIDB4ZjsKKworCWhvc3QtPmdwaW9fd3AgPSAtRU5PU1lTOworCWhvc3QtPmdwaW9fY2QgPSAtRU5PU1lTOworCisJaG9zdC0+aHdfZGVzaWduZXIgPSBhbWJhX21hbmYoZGV2KTsKKwlob3N0LT5od19yZXZpc2lvbiA9IGFtYmFfcmV2KGRldik7CiAJREJHKGhvc3QsICJkZXNpZ25lciBJRCA9IDB4JTAyeFxuIiwgaG9zdC0+aHdfZGVzaWduZXIpOwogCURCRyhob3N0LCAicmV2aXNpb24gPSAweCUwMXhcbiIsIGhvc3QtPmh3X3JldmlzaW9uKTsKKwogCWhvc3QtPmNsayA9IGNsa19nZXQoJmRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKGhvc3QtPmNsaykpIHsKIAkJcmV0ID0gUFRSX0VSUihob3N0LT5jbGspOwpAQCAtNTkxLDYgKzYxOSwyNyBAQAogCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSU1BU0sxKTsKIAl3cml0ZWwoMHhmZmYsIGhvc3QtPmJhc2UgKyBNTUNJQ0xFQVIpOwogCisjaWZkZWYgQ09ORklHX0dQSU9MSUIKKwlpZiAoZ3Bpb19pc192YWxpZChwbGF0LT5ncGlvX2NkKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QocGxhdC0+Z3Bpb19jZCwgRFJJVkVSX05BTUUgIiAoY2QpIik7CisJCWlmIChyZXQgPT0gMCkKKwkJCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBsYXQtPmdwaW9fY2QpOworCQlpZiAocmV0ID09IDApCisJCQlob3N0LT5ncGlvX2NkID0gcGxhdC0+Z3Bpb19jZDsKKwkJZWxzZSBpZiAocmV0ICE9IC1FTk9TWVMpCisJCQlnb3RvIGVycl9ncGlvX2NkOworCX0KKwlpZiAoZ3Bpb19pc192YWxpZChwbGF0LT5ncGlvX3dwKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QocGxhdC0+Z3Bpb193cCwgRFJJVkVSX05BTUUgIiAod3ApIik7CisJCWlmIChyZXQgPT0gMCkKKwkJCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBsYXQtPmdwaW9fd3ApOworCQlpZiAocmV0ID09IDApCisJCQlob3N0LT5ncGlvX3dwID0gcGxhdC0+Z3Bpb193cDsKKwkJZWxzZSBpZiAocmV0ICE9IC1FTk9TWVMpCisJCQlnb3RvIGVycl9ncGlvX3dwOworCX0KKyNlbmRpZgorCiAJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnFbMF0sIG1tY2lfaXJxLCBJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUgIiAoY21kKSIsIGhvc3QpOwogCWlmIChyZXQpCiAJCWdvdG8gdW5tYXA7CkBAIC02MDIsNiArNjUxLDcgQEAKIAl3cml0ZWwoTUNJX0lSUUVOQUJMRSwgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7CiAKIAlhbWJhX3NldF9kcnZkYXRhKGRldiwgbW1jKTsKKwlob3N0LT5vbGRzdGF0ID0gbW1jaV9nZXRfY2QoaG9zdC0+bW1jKTsKIAogCW1tY19hZGRfaG9zdChtbWMpOwogCkBAIC02MjAsNiArNjcwLDEyIEBACiAgaXJxMF9mcmVlOgogCWZyZWVfaXJxKGRldi0+aXJxWzBdLCBob3N0KTsKICB1bm1hcDoKKwlpZiAoaG9zdC0+Z3Bpb193cCAhPSAtRU5PU1lTKQorCQlncGlvX2ZyZWUoaG9zdC0+Z3Bpb193cCk7CisgZXJyX2dwaW9fd3A6CisJaWYgKGhvc3QtPmdwaW9fY2QgIT0gLUVOT1NZUykKKwkJZ3Bpb19mcmVlKGhvc3QtPmdwaW9fY2QpOworIGVycl9ncGlvX2NkOgogCWlvdW5tYXAoaG9zdC0+YmFzZSk7CiAgY2xrX2Rpc2FibGU6CiAJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKQEAgLTY1NSw2ICs3MTEsMTEgQEAKIAkJZnJlZV9pcnEoZGV2LT5pcnFbMF0sIGhvc3QpOwogCQlmcmVlX2lycShkZXYtPmlycVsxXSwgaG9zdCk7CiAKKwkJaWYgKGhvc3QtPmdwaW9fd3AgIT0gLUVOT1NZUykKKwkJCWdwaW9fZnJlZShob3N0LT5ncGlvX3dwKTsKKwkJaWYgKGhvc3QtPmdwaW9fY2QgIT0gLUVOT1NZUykKKwkJCWdwaW9fZnJlZShob3N0LT5ncGlvX2NkKTsKKwogCQlpb3VubWFwKGhvc3QtPmJhc2UpOwogCQljbGtfZGlzYWJsZShob3N0LT5jbGspOwogCQljbGtfcHV0KGhvc3QtPmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCmluZGV4IDA0NDFiYWMuLjgzOWYyNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCkBAIC0xNTEsNiArMTUxLDggQEAKIAlzdHJ1Y3QgbW1jX2RhdGEJCSpkYXRhOwogCXN0cnVjdCBtbWNfaG9zdAkJKm1tYzsKIAlzdHJ1Y3QgY2xrCQkqY2xrOworCWludAkJCWdwaW9fY2Q7CisJaW50CQkJZ3Bpb193cDsKIAogCXVuc2lnbmVkIGludAkJZGF0YV94ZmVyZWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKaW5kZXggODY2NGZlZS4uZTc1NjNhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKQEAgLTUsNyArNSw3IEBACiAgKiAoQykgMjAwMCBSZWQgSGF0LiBHUEwnZAogICoKICAqCi0gKiAxMC8xMC8yMDAwCU5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqIDEwLzEwLzIwMDAJTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KICAqIAktIGNvbXBsZXRlbHkgcmV2YW1wZWQgbWV0aG9kIGZ1bmN0aW9ucyBzbyB0aGV5IGFyZSBhd2FyZSBhbmQKICAqIAkgIGluZGVwZW5kZW50IG9mIHRoZSBmbGFzaCBnZW9tZXRyeSAoYnVzd2lkdGgsIGludGVybGVhdmUsIGV0Yy4pCiAgKiAJLSBzY2FsYWJpbGl0eSB2cyBjb2RlIHNpemUgaXMgY29tcGxldGVseSBzZXQgYXQgY29tcGlsZS10aW1lCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jCmluZGV4IDZjNzQwZjMuLjA2NjdhNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jCkBAIC00LDcgKzQsNyBAQAogICoKICAqIChDKSAyMDAwIFJlZCBIYXQuIEdQTCdkCiAgKgotICogMTAvMTAvMjAwMAlOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiAxMC8xMC8yMDAwCU5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CiAgKiAJLSBjb21wbGV0ZWx5IHJldmFtcGVkIG1ldGhvZCBmdW5jdGlvbnMgc28gdGhleSBhcmUgYXdhcmUgYW5kCiAgKiAJICBpbmRlcGVuZGVudCBvZiB0aGUgZmxhc2ggZ2VvbWV0cnkgKGJ1c3dpZHRoLCBpbnRlcmxlYXZlLCBldGMuKQogICogCS0gc2NhbGFiaWxpdHkgdnMgY29kZSBzaXplIGlzIGNvbXBsZXRlbHkgc2V0IGF0IGNvbXBpbGUtdGltZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9iZmluLWFzeW5jLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2JmaW4tYXN5bmMtZmxhc2guYwppbmRleCAzNjVjNzdiLi5hN2M4MDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2JmaW4tYXN5bmMtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2JmaW4tYXN5bmMtZmxhc2guYwpAQCAtNiw3ICs2LDcgQEAKICAqIGZvciBleGFtcGxlLiAgQWxsIGJvYXJkLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZ29lcyBpbiB5b3VyCiAgKiBib2FyZCByZXNvdXJjZXMgZmlsZS4KICAqCi0gKiBDb3B5cmlnaHQgMjAwMCBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiBDb3B5cmlnaHQgMjAwMCBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgogICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2NlaXZhLmMgYi9kcml2ZXJzL210ZC9tYXBzL2NlaXZhLmMKaW5kZXggNjBlNjhiZC4uZDQxZjM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9jZWl2YS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvY2VpdmEuYwpAQCAtOSw3ICs5LDcgQEAKICAqIEJhc2VkIG9uOiBzYTExMDAtZmxhc2guYywgd2hpY2ggaGFzIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0OgogICogRmxhc2ggbWVtb3J5IGFjY2VzcyBvbiBTQTExeDAgYmFzZWQgZGV2aWNlcwogICoKLSAqIChDKSAyMDAwIE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqIChDKSAyMDAwIE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CiAgKgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvZGMyMTI4NS5jIGIvZHJpdmVycy9tdGQvbWFwcy9kYzIxMjg1LmMKaW5kZXggNDI5NjlmZS4uYjNjYjNhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9kYzIxMjg1LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9kYzIxMjg1LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTVREIG1hcCBkcml2ZXIgZm9yIGZsYXNoIG9uIHRoZSBEQzIxMjg1ICh0aGUgU3Ryb25nQVJNLTExMCBjb21wYW5pb24gY2hpcCkKICAqCi0gKiAoQykgMjAwMCAgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICogKEMpIDIwMDAgIE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CiAgKgogICogVGhpcyBjb2RlIGlzIEdQTAogICovCkBAIC0yNDksNSArMjQ5LDUgQEAKIAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGRyaXZlciBmb3IgREMyMTI4NSBib2FyZHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaXBhcS1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9pcGFxLWZsYXNoLmMKaW5kZXggNzQ4Yzg1Zi4uNzY3MDhlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9pcGFxLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9pcGFxLWZsYXNoLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogRmxhc2ggbWVtb3J5IGFjY2VzcyBvbiBpUEFRIEhhbmRoZWxkcyAoZWl0aGVyIFNBMTEwMCBvciBQWEEyNTAgYmFzZWQpCiAgKgotICogKEMpIDIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICogKEMpIDIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KICAqIChDKSAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55IDxqYW1leS5oaWNrc0BocC5jb20+CiAgKiAoQykgMjAwMyBDaHJpc3RpYW4gUGVsbGVncmluIDxjaHJpQGFzY2Vuc2l0LmNvbT4sIDxjaHJpQGluZmlzLnVuaXYudHMuaXQ+OiBjb25jYXRlbmF0aW9uIG9mIG11bHRpcGxlIGZsYXNoZXMKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMKaW5kZXggNjQzYWEwNi4uNzRmYTA3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jCkBAIC0xNzUsNSArMTc1LDUgQEAKIG1vZHVsZV9leGl0KGNsZWFudXBfcHhhMnh4X2ZsYXNoKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPiIpOworTU9EVUxFX0FVVEhPUigiTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBkcml2ZXIgZm9yIEludGVsIFhTY2FsZSBQWEEyeHgiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCmluZGV4IGM2MjEwZjUuLmZkYjk3ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBGbGFzaCBtZW1vcnkgYWNjZXNzIG9uIFNBMTF4MCBiYXNlZCBkZXZpY2VzCiAgKgotICogKEMpIDIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICogKEMpIDIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRibG9jay5jIGIvZHJpdmVycy9tdGQvbXRkYmxvY2suYwppbmRleCA3N2RiNWNlLi4yZDcwMjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRibG9jay5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGJsb2NrLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogRGlyZWN0IE1URCBibG9jayBkZXZpY2UgYWNjZXNzCiAgKgotICogKEMpIDIwMDAtMjAwMyBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiAoQykgMjAwMC0yMDAzIE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CiAgKiAoQykgMTk5OS0yMDAzIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqLwogCkBAIC00MDMsNSArNDAzLDUgQEAKIAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+IGV0IGFsLiIpOworTU9EVUxFX0FVVEhPUigiTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4gZXQgYWwuIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNhY2hpbmcgcmVhZC9lcmFzZS93cml0ZWJhY2sgYmxvY2sgZGV2aWNlIGVtdWxhdGlvbiBhY2Nlc3MgdG8gTVREIGRldmljZXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZHBhcnQuYyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYwppbmRleCAzNDlmY2JlLi43NDI1MDRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkcGFydC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFNpbXBsZSBNVEQgcGFydGl0aW9uaW5nIGxheWVyCiAgKgotICogKEMpIDIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICogKEMpIDIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KICAqCiAgKiBUaGlzIGNvZGUgaXMgR1BMCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC90czcyNTAuYyBiL2RyaXZlcnMvbXRkL25hbmQvdHM3MjUwLmMKaW5kZXggMmM0MTBhMC4uMGY1NTYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC90czcyNTAuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3RzNzI1MC5jCkBAIC0yNCw4ICsyNCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKwogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3RzNzJ4eC5oPgorCiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDEuYyBiL2RyaXZlcnMvbmV0LzNjNTAxLmMKaW5kZXggMzY3YmVjNi4uZjYwMzA5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDEuYworKysgYi9kcml2ZXJzL25ldC8zYzUwMS5jCkBAIC00MDksNyArNDA5LDcgQEAKICAqIG5vIHJlYWwgY2hvaWNlLgogICovCiAKLXN0YXRpYyBpbnQgZWxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGVsX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJCQlpZiAoZWxfZGVidWcgPiAyKQogCQkJCXByX2RlYnVnKCIgcXVldWVkIHhtaXQuXG4iKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCQkvKiBBIHJlY2VpdmUgdXBzZXQgb3VyIGxvYWQsIGRlc3BpdGUgb3VyIGJlc3QgZWZmb3J0cyAqLwogCQlpZiAoZWxfZGVidWcgPiAyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDEuaCBiL2RyaXZlcnMvbmV0LzNjNTAxLmgKaW5kZXggZjQwYjA0OS4uMTgzZmQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDEuaAorKysgYi9kcml2ZXJzL25ldC8zYzUwMS5oCkBAIC02LDcgKzYsNyBAQAogc3RhdGljIGludCAgZWwxX3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyKTsKIHN0YXRpYyBpbnQgIGVsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlbF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCAgZWxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBlbF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGVsX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQgZWxfcmVjZWl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGVsX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDMuYyBiL2RyaXZlcnMvbmV0LzNjNTAzLmMKaW5kZXggMTM0NjM4YS4uYzcxZTEyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDMuYworKysgYi9kcml2ZXJzL25ldC8zYzUwMy5jCkBAIC0zODMsNyArMzgzLDcgQEAKIHN0YXRpYyBpbnQKIGVsMl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgaW50IHJldHZhbCA9IC1FQUdBSU47CisgICAgaW50IHJldHZhbDsKIAogICAgIGlmIChkZXYtPmlycSA8IDIpIHsKIAlpbnQgaXJxbGlzdFtdID0gezUsIDksIDMsIDQsIDB9OwpAQCAtMzkxLDcgKzM5MSw4IEBACiAKIAlvdXRiKEVHQUNGUl9OT1JNLCBFMzNHX0dBQ0ZSKTsJLyogRW5hYmxlIFJBTSBhbmQgaW50ZXJydXB0cy4gKi8KIAlkbyB7Ci0JICAgIGlmIChyZXF1ZXN0X2lycSAoKmlycXAsIE5VTEwsIDAsICJib2d1cyIsIGRldikgIT0gLUVCVVNZKSB7CisJICAgIHJldHZhbCA9IHJlcXVlc3RfaXJxKCppcnFwLCBOVUxMLCAwLCAiYm9ndXMiLCBkZXYpOworCSAgICBpZiAocmV0dmFsID49IDApIHsKIAkJLyogVHdpbmtsZSB0aGUgaW50ZXJydXB0LCBhbmQgY2hlY2sgaWYgaXQncyBzZWVuLiAqLwogCQl1bnNpZ25lZCBsb25nIGNvb2tpZSA9IHByb2JlX2lycV9vbigpOwogCQlvdXRiX3AoMHgwNCA8PCAoKCppcnFwID09IDkpID8gMiA6ICppcnFwKSwgRTMzR19JRENGUik7CkBAIC00MDAsMTEgKzQwMSwxNCBAQAogCQkgICAgJiYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSA9ICppcnFwLAogCQkgICAgZWlwX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpKSA9PSAwKSkKIAkJICAgIGJyZWFrOworCSAgICB9IGVsc2UgeworCQkgICAgaWYgKHJldHZhbCAhPSAtRUJVU1kpCisJCQkgICAgcmV0dXJuIHJldHZhbDsKIAkgICAgfQogCX0gd2hpbGUgKCorK2lycXApOwogCWlmICgqaXJxcCA9PSAwKSB7CiAJICAgIG91dGIoRUdBQ0ZSX0lSUU9GRiwgRTMzR19HQUNGUik7CS8qIGRpc2FibGUgaW50ZXJydXB0cy4gKi8KLQkgICAgcmV0dXJuIHJldHZhbDsKKwkgICAgcmV0dXJuIC1FQUdBSU47CiAJfQogICAgIH0gZWxzZSB7CiAJaWYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgZWlwX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDUuYyBiL2RyaXZlcnMvbmV0LzNjNTA1LmMKaW5kZXggZjcxYjM1NC4uYTIxYzlkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDUuYworKysgYi9kcml2ZXJzL25ldC8zYzUwNS5jCkBAIC05NzYsNyArOTc2LDcgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgYm9vbCBzZW5kX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIG5ldGRldl90eF90IHNlbmRfcGFja2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJZWxwX2RldmljZSAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyB0YXJnZXQ7CkBAIC0xMDY3LDcgKzEwNjcsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgZWxwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBlbHBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJZWxwX2RldmljZSAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMTAxLDcgKzExMDEsNyBAQAogCXByaW1lX3J4KGRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDcuYyBiL2RyaXZlcnMvbmV0LzNjNTA3LmMKaW5kZXggOTZiODY2NS4uYTZkYzhiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDcuYworKysgYi9kcml2ZXJzL25ldC8zYzUwNy5jCkBAIC0yODQsNyArMjg0LDggQEAKIAogc3RhdGljIGludAllbDE2X3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyKTsKIHN0YXRpYyBpbnQJZWwxNl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludAllbDE2X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGVsMTZfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZWwxNl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIGVsMTZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50CWVsMTZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC01MDksNyArNTEwLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IGVsMTZfc2VuZF9wYWNrZXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZWwxNl9zZW5kX3BhY2tldCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKQEAgLTUzNyw3ICs1MzksNyBAQAogCiAJLyogWW91IG1pZ2h0IG5lZWQgdG8gY2xlYW4gdXAgYW5kIHJlY29yZCBUeCBzdGF0aXN0aWNzIGhlcmUuICovCiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKglUaGUgdHlwaWNhbCB3b3JrbG9hZCBvZiB0aGUgZHJpdmVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDkuYyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKaW5kZXggZDIxMzdlZi4uM2IwMGE0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDkuYworKysgYi9kcml2ZXJzL25ldC8zYzUwOS5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIHN0YXRpYyB1c2hvcnQgaWRfcmVhZF9lZXByb20oaW50IGluZGV4KTsKIHN0YXRpYyB1c2hvcnQgcmVhZF9lZXByb20oaW50IGlvYWRkciwgaW50IGluZGV4KTsKIHN0YXRpYyBpbnQgZWwzX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGVsM19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGVsM19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGVsM19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZWwzX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTgxNiw3ICs4MTYsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogZWwzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTg5Miw3ICs4OTIsNyBAQAogCQkJb3V0YigweDAwLCBpb2FkZHIgKyBUWF9TVEFUVVMpOyAvKiBQb3AgdGhlIHN0YXR1cyBzdGFjay4gKi8KIAkJfQogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBUaGUgRUwzIGludGVycnVwdCBoYW5kbGVyLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MTUuYyBiL2RyaXZlcnMvbmV0LzNjNTE1LmMKaW5kZXggNGE3YzMyOC4uNGFkY2I5NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTE1LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MTUuYwpAQCAtMzY5LDggKzM2OSw4IEBACiAJCQkgICAgc3RydWN0IHBucF9kZXYgKmlkZXYsIGludCBjYXJkX251bWJlcik7CiBzdGF0aWMgaW50IGNvcmtzY3Jld19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgY29ya3NjcmV3X3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyBpbnQgY29ya3NjcmV3X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBjb3Jrc2NyZXdfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgY29ya3NjcmV3X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgY29ya3NjcmV3X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGJvb21lcmFuZ19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTk5OCw4ICs5OTgsOCBAQAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotc3RhdGljIGludCBjb3Jrc2NyZXdfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgY29ya3NjcmV3X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY29ya3NjcmV3X3ByaXZhdGUgKnZwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC0xMDU2LDcgKzEwNTYsNyBAQAogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCQl9CiAJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJLyogUHV0IG91dCB0aGUgZG91Ymxld29yZCBoZWFkZXIuLi4gKi8KIAlvdXRsKHNrYi0+bGVuLCBpb2FkZHIgKyBUWF9GSUZPKTsKQEAgLTExMTksNyArMTExOSw3IEBACiAJCQlvdXRiKDB4MDAsIGlvYWRkciArIFR4U3RhdHVzKTsJLyogUG9wIHRoZSBzdGF0dXMgc3RhY2suICovCiAJCX0KIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgYWxsIG9mIHRoZSBSeCB0aHJlYWQgd29yayBhbmQgY2xlYW5zIHVwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyMy5jIGIvZHJpdmVycy9uZXQvM2M1MjMuYwppbmRleCBjZGQ5NTVjLi5jYjBiNzMwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjMuYworKysgYi9kcml2ZXJzL25ldC8zYzUyMy5jCkBAIC0xODMsNyArMTgzLDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBlbG1jX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGludCBlbG1jX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGVsbWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGVsbWNfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZWxtY19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZWxtY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlbG1jX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjaWZkZWYgRUxNQ19NVUxUSUNBU1QKQEAgLTExMjksNyArMTEyOSw3IEBACiAgKiBzZW5kIGZyYW1lCiAgKi8KIAotc3RhdGljIGludCBlbG1jX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZWxtY19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBsZW47CiAJaW50IGk7CkBAIC0xMTk4LDcgKzExOTgsNyBAQAogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogI2VuZGlmCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTI3LmMgYi9kcml2ZXJzL25ldC8zYzUyNy5jCmluZGV4IGFhYThhOWYuLjYwMjFlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTI3LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MjcuYwpAQCAtMjEzLDcgKzIxMyw4IEBACiBzdGF0aWMgaW50ICAgICAgbWMzMl9jb21tYW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBjbWQsIHZvaWQgKmRhdGEsIGludCBsZW4pOwogc3RhdGljIGludAltYzMyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZAltYzMyX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50CW1jMzJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbWMzMl9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBtYzMyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGludAltYzMyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHN0cnVjdAluZXRfZGV2aWNlX3N0YXRzICptYzMyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTEwMjAsNyArMTAyMSw4IEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgbWMzMl9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IG1jMzJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWMzMl9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBoZWFkID0gYXRvbWljX3JlYWQoJmxwLT50eF9yaW5nX2hlYWQpOwpAQCAtMTAzNSw3ICsxMDM3LDcgQEAKIAogCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHsKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlhdG9taWNfZGVjKCZscC0+dHhfY291bnQpOwpAQCAtMTA2Niw3ICsxMDY4LDcgQEAKIAlwLT5jb250cm9sICAgICAmPSB+Q09OVFJPTF9FT0w7CiAKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzU5eC5jIGIvZHJpdmVycy9uZXQvM2M1OXguYwppbmRleCA0NTY3NTg4Li43YWRmZjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzU5eC5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKQEAgLTcxNiw4ICs3MTYsMTAgQEAKIHN0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKnZwLCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sIGludCB2YWx1ZSk7CiBzdGF0aWMgdm9pZCB2b3J0ZXhfdGltZXIodW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgcnhfb29tX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyBpbnQgdm9ydGV4X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGJvb21lcmFuZ19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHZvcnRleF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBib29tZXJhbmdfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgdm9ydGV4X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBib29tZXJhbmdfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3Qgdm9ydGV4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwpAQCAtMjAzNSw3ICsyMDM3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogdm9ydGV4X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgdm9ydGV4X3ByaXZhdGUgKnZwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTIwODcsMTAgKzIwODksMTAgQEAKIAkJCWlvd3JpdGU4KDB4MDAsIGlvYWRkciArIFR4U3RhdHVzKTsgLyogUG9wIHRoZSBzdGF0dXMgc3RhY2suICovCiAJCX0KIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBib29tZXJhbmdfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2b3J0ZXhfcHJpdmF0ZSAqdnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjE3Nyw3ICsyMTc5LDcgQEAKIAlpb3dyaXRlMTYoRG93blVuc3RhbGwsIGlvYWRkciArIEVMM19DTUQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwLT5sb2NrLCBmbGFncyk7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgYWxsIG9mIHRoZSBSeCB0aHJlYWQgd29yayBhbmQgY2xlYW5zIHVwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC83OTkwLmMgYi9kcml2ZXJzL25ldC83OTkwLmMKaW5kZXggNjlmNWI3ZC4uYjFlNTc2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvNzk5MC5jCisrKyBiL2RyaXZlcnMvbmV0Lzc5OTAuYwpAQCAtNTg1LDcgKzU4NSw3IEBACiAJCWxwLT50eF9mdWxsID0gMTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmbHAtPmRldmxvY2ssIGZsYWdzKTsKIAotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxhbmNlX3N0YXJ0X3htaXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5Y3AuYyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCmluZGV4IGQwZGJiZjMuLjQ2MmQ5ZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MTM5Y3AuYworKysgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwpAQCAtNzM2LDcgKzczNiw4IEBACiAJCW5ldGlmX3dha2VfcXVldWUoY3AtPmRldik7CiB9CiAKLXN0YXRpYyBpbnQgY3Bfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBjcF9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBjcF9wcml2YXRlICpjcCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgZW50cnk7CkBAIC04OTAsNyArODkxLDcgQEAKIAljcHc4KFR4UG9sbCwgTm9ybWFsVHhQb2xsKTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFNldCBvciBjbGVhciB0aGUgbXVsdGljYXN0IGZpbHRlciBmb3IgdGhpcyBhZGFwdG9yLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCmluZGV4IDBlMmJhMjEuLjRhMzYyODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKQEAgLTYyOCw4ICs2MjgsOCBAQAogc3RhdGljIHZvaWQgcnRsODEzOV9zdGFydF90aHJlYWQoc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHApOwogc3RhdGljIHZvaWQgcnRsODEzOV90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJ0bDgxMzlfaW5pdF9yaW5nIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgcnRsODEzOV9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHJ0bDgxMzlfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIHN0YXRpYyB2b2lkIHJ0bDgxMzlfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2VuZGlmCkBAIC0xNjg3LDcgKzE2ODcsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBydGw4MTM5X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgcnRsODEzOV9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKQEAgLTE3MDcsNyArMTcwOCw3IEBACiAJfSBlbHNlIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7CkBAIC0xNzMyLDcgKzE3MzMsNyBAQAogCQlwcl9kZWJ1ZygiJXM6IFF1ZXVlZCBUeCBwYWNrZXQgc2l6ZSAldSB0byBzbG90ICVkLlxuIiwKIAkJCWRldi0+bmFtZSwgbGVuLCBlbnRyeSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgyNTk2LmMgYi9kcml2ZXJzL25ldC84MjU5Ni5jCmluZGV4IDc3NTQ3NTQuLmVhNmIxMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgyNTk2LmMKKysrIGIvZHJpdmVycy9uZXQvODI1OTYuYwpAQCAtMzU2LDcgKzM1Niw3IEBACiAJMHg3ZiAvKiAgKm11bHRpIElBICovIH07CiAKIHN0YXRpYyBpbnQgaTU5Nl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBpNTk2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgaTU5Nl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGk1OTZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgaW50IGk1OTZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpNTk2X2FkZF9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGk1OTZfY21kICpjbWQpOwpAQCAtMTA1NCw4ICsxMDU0LDcgQEAKIAluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwogfQogCi0KLXN0YXRpYyBpbnQgaTU5Nl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaTU5Nl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGk1OTZfcHJpdmF0ZSAqbHAgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IHR4X2NtZCAqdHhfY21kOwpAQCAtMTA2OCw3ICsxMDY3LDcgQEAKIAogCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKSB7CiAJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCWxlbmd0aCA9IEVUSF9aTEVOOwogCX0KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CkBAIC0xMTEwLDcgKzExMDksNyBAQAogCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X2V0aCh1bnNpZ25lZCBjaGFyICphZGQsIGNoYXIgKnN0cikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgzOTAuYyBiL2RyaXZlcnMvbmV0LzgzOTAuYwppbmRleCAyMTE1M2RlLi43Yzc1MThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MzkwLmMKKysrIGIvZHJpdmVycy9uZXQvODM5MC5jCkBAIC0xNyw3ICsxNyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGVpX2Nsb3NlKTsKIAotaW50IGVpX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IGVpX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gX19laV9zdGFydF94bWl0KHNrYiwgZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgzOTAuaCBiL2RyaXZlcnMvbmV0LzgzOTAuaAppbmRleCAzYzYxZDZkLi4zZDllOGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MzkwLmgKKysrIGIvZHJpdmVycy9uZXQvODM5MC5oCkBAIC00MCw3ICs0MCw3IEBACiBleHRlcm4gaW50IGVpX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGlycXJldHVybl90IGVpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogZXh0ZXJuIHZvaWQgZWlfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWV4dGVybiBpbnQgZWlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBuZXRkZXZfdHhfdCBlaV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZWlfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICplaV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKQEAgLTU4LDcgKzU4LDcgQEAKIGV4dGVybiBpbnQgZWlwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGlycXJldHVybl90IGVpcF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIGV4dGVybiB2b2lkIGVpcF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCBlaXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBuZXRkZXZfdHhfdCBlaXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGVpcF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVpcF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgzOTBwLmMgYi9kcml2ZXJzL25ldC84MzkwcC5jCmluZGV4IGQyMjVjMjkuLmEyYTY0ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgzOTBwLmMKKysrIGIvZHJpdmVycy9uZXQvODM5MHAuYwpAQCAtMjIsNyArMjIsNyBAQAogfQogRVhQT1JUX1NZTUJPTChlaXBfY2xvc2UpOwogCi1pbnQgZWlwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IGVpcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIF9fZWlfc3RhcnRfeG1pdChza2IsIGRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCA1Y2U3Y2JhLi41MDc1NjlhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC0yMDksNyArMjA5LDcgQEAKIAogY29uZmlnIE1BQ0IKIAl0cmlzdGF0ZSAiQXRtZWwgTUFDQiBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxU0FNOTI2MCB8fCBBUkNIX0FUOTFTQU05MjYzIHx8IEFSQ0hfQVQ5MVNBTTlHMjAgfHwgQVJDSF9BVDkxQ0FQOQorCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxU0FNOTI2MCB8fCBBUkNIX0FUOTFTQU05MjYzIHx8IEFSQ0hfQVQ5MVNBTTlHMjAgfHwgQVJDSF9BVDkxU0FNOUc0NSB8fCBBUkNIX0FUOTFDQVA5CiAJc2VsZWN0IFBIWUxJQgogCWhlbHAKIAkgIFRoZSBBdG1lbCBNQUNCIGV0aGVybmV0IGludGVyZmFjZSBpcyBmb3VuZCBvbiBtYW55IEFUMzIgYW5kIEFUOTEKQEAgLTE3NzYsNyArMTc3Niw3IEBACiAKIGNvbmZpZyBDUE1BQwogCXRyaXN0YXRlICJUSSBBUjcgQ1BNQUMgRXRoZXJuZXQgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBFWFBFUklNRU5UQUwgJiYgQVI3ICYmIEJST0tFTgorCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIEVYUEVSSU1FTlRBTCAmJiBBUjcKIAlzZWxlY3QgUEhZTElCCiAJaGVscAogCSAgVEkgQVI3IENQTUFDIEV0aGVybmV0IHN1cHBvcnQKQEAgLTE5MjgsNiArMTkyOCwxMiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGF0bDIuCiAKK2NvbmZpZyBYSUxJTlhfRU1BQ0xJVEUKKwl0cmlzdGF0ZSAiWGlsaW54IDEwLzEwMCBFdGhlcm5ldCBMaXRlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQUEMzMiB8fCBNSUNST0JMQVpFCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIDEwLzEwMCBFdGhlcm5ldCBMaXRlIGZyb20gWGlsaW54LgorCiBzb3VyY2UgImRyaXZlcnMvbmV0L2ZzX2VuZXQvS2NvbmZpZyIKIAogZW5kaWYgIyBORVRfRVRIRVJORVQKQEAgLTIzNjksMTAgKzIzNzUsNiBAQAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEdpZ2FiaXQgRXRoZXJuZXQgbW9kZSBvZiB0aGUgUVVJQ0MgRW5naW5lLAogCSAgd2hpY2ggaXMgYXZhaWxhYmxlIG9uIHNvbWUgRnJlZXNjYWxlIFNPQ3MuCiAKLWNvbmZpZyBVR0VUSF9NQUdJQ19QQUNLRVQKLQlib29sICJNYWdpYyBQYWNrZXQgZGV0ZWN0aW9uIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVQ0NfR0VUSAotCiBjb25maWcgVUdFVEhfVFhfT05fREVNQU5ECiAJYm9vbCAiVHJhbnNtaXQgb24gRGVtYW5kIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVQ0NfR0VUSApAQCAtMjcyNCw2ICsyNzI2LDcgQEAKIAlzZWxlY3QgRldfTE9BREVSCiAJc2VsZWN0IFpMSUJfSU5GTEFURQogCXNlbGVjdCBMSUJDUkMzMkMKKwlzZWxlY3QgTURJTwogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEJyb2FkY29tIE5ldFh0cmVtZUlJIDEwIGdpZ2FiaXQgRXRoZXJuZXQgY2FyZHMuCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IGVhZDhjYWIuLjk5YWU2ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0xNDIsNiArMTQyLDcgQEAKIG9iai0kKENPTkZJR19NVjY0M1hYX0VUSCkgKz0gbXY2NDN4eF9ldGgubwogbGxfdGVtYWMtb2JqcyA6PSBsbF90ZW1hY19tYWluLm8gbGxfdGVtYWNfbWRpby5vCiBvYmotJChDT05GSUdfWElMSU5YX0xMX1RFTUFDKSArPSBsbF90ZW1hYy5vCitvYmotJChDT05GSUdfWElMSU5YX0VNQUNMSVRFKSArPSB4aWxpbnhfZW1hY2xpdGUubwogb2JqLSQoQ09ORklHX1FMQTNYWFgpICs9IHFsYTN4eHgubwogb2JqLSQoQ09ORklHX1FMR0UpICs9IHFsZ2UvCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2EyMDY1LmMgYi9kcml2ZXJzL25ldC9hMjA2NS5jCmluZGV4IDA4Nzg3ZjUuLmI3ZWMwMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2EyMDY1LmMKKysrIGIvZHJpdmVycy9uZXQvYTIwNjUuYwpAQCAtNTQ3LDE3ICs1NDcsMTggQEAKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgbGFuY2Vfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBsYW5jZV9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbGFuY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvbGF0aWxlIHN0cnVjdCBsYW5jZV9yZWdzICpsbCA9IGxwLT5sbDsKIAl2b2xhdGlsZSBzdHJ1Y3QgbGFuY2VfaW5pdF9ibG9jayAqaWIgPSBscC0+aW5pdF9ibG9jazsKIAlpbnQgZW50cnksIHNrYmxlbjsKLQlpbnQgc3RhdHVzID0gMDsKKwlpbnQgc3RhdHVzID0gTkVUREVWX1RYX09LOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAlza2JsZW4gPSBtYXhfdCh1bnNpZ25lZCwgc2tiLT5sZW4sIEVUSF9aTEVOKTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKaW5kZXggMDg0MTllZS4uNWYwYjA1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYWNlbmljLmMKKysrIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKQEAgLTI0NjQsNyArMjQ2NCw4IEBACiB9CiAKIAotc3RhdGljIGludCBhY2Vfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGFjZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhY2VfcHJpdmF0ZSAqYXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhY2VfcmVncyBfX2lvbWVtICpyZWdzID0gYXAtPnJlZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuaCBiL2RyaXZlcnMvbmV0L2FjZW5pYy5oCmluZGV4IGM5ODdjOWIuLjE3MDc5YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5oCkBAIC03NzUsNyArNzc1LDggQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBhY2VfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgaW50IGFjZV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBhY2Vfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgYWNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgYWNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBhY2VfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBhY2VfdGFza2xldCh1bnNpZ25lZCBsb25nIGRldik7CiBzdGF0aWMgdm9pZCBhY2VfZHVtcF90cmFjZShzdHJ1Y3QgYWNlX3ByaXZhdGUgKmFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCmluZGV4IDE5ODMxYmQuLjRlNjM1OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKKysrIGIvZHJpdmVycy9uZXQvYW1kODExMWUuYwpAQCAtMTMwMCw3ICsxMzAwLDggQEAKIFRoaXMgZnVuY3Rpb24gd2lsbCBxdWV1ZSB0aGUgdHJhbnNtaXQgcGFja2V0cyB0byB0aGUgZGVzY3JpcHRvcnMgYW5kIHdpbGwgdHJpZ2dlciB0aGUgc2VuZCBvcGVyYXRpb24uIEl0IGFsc28gaW5pdGlhbGl6ZXMgdGhlIHRyYW5zbWl0IGRlc2NyaXB0b3JzIHdpdGggYnVmZmVyIHBoeXNpY2FsIGFkZHJlc3MsIGJ5dGUgY291bnQsIG93bmVyc2hpcCB0byBoYXJkd2FyZSBldGMuCiAqLwogCi1zdGF0aWMgaW50IGFtZDgxMTFlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYW1kODExMWVfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKIHsKIAlzdHJ1Y3QgYW1kODExMWVfcHJpdiAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCB0eF9pbmRleDsKQEAgLTEzNDYsNyArMTM0Nyw3IEBACiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogLyoKIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbGwgdGhlIG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXJzIG9mIHRoZSBkZXZpY2UuCkBAIC0xNTIzLDkgKzE1MjQsNiBAQAogCWludCBlcnI7CiAJdTMyIG1paV9yZWd2YWw7CiAKLQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KIAlzd2l0Y2goY21kKSB7CiAJY2FzZSBTSU9DR01JSVBIWToKIAkJZGF0YS0+cGh5X2lkID0gbHAtPmV4dF9waHlfYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wcy5jCmluZGV4IDdmODMyNTQuLmI1ZGM3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMKKysrIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYwpAQCAtMTkyLDcgKzE5Miw4IEBACiBzdGF0aWMgdm9pZCBjb3BzX3BvbGwgKHVuc2lnbmVkIGxvbmcgbHRkZXYpOwogc3RhdGljIHZvaWQgY29wc190aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgY29wc19yeCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50ICBjb3BzX3NlbmRfcGFja2V0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCAgY29wc19zZW5kX3BhY2tldCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgIGNvcHNfaW9jdGwgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwogc3RhdGljIGludCAgY29wc19jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC04NzUsNyArODc2LDggQEAKICAqCU1ha2UgdGhlIGNhcmQgdHJhbnNtaXQgYSBMb2NhbFRhbGsgcGFja2V0LgogICovCiAKLXN0YXRpYyBpbnQgY29wc19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGNvcHNfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgICAgICBzdHJ1Y3QgY29wc19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgICAgICBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC05MjAsNyArOTIyLDcgQEAKIAlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWRldl9rZnJlZV9za2IgKHNrYik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2lwZGRwLmMgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvaXBkZHAuYwppbmRleCA3OGNlYTVlLi5hYWYxNGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvaXBkZHAuYworKysgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvaXBkZHAuYwpAQCAtNDgsNyArNDgsOCBAQAogI2VuZGlmCiAKIC8qIEluZGV4IHRvIGZ1bmN0aW9ucywgYXMgZnVuY3Rpb24gcHJvdG90eXBlcy4gKi8KLXN0YXRpYyBpbnQgaXBkZHBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBpcGRkcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBpcGRkcF9jcmVhdGUoc3RydWN0IGlwZGRwX3JvdXRlICpuZXdfcnQpOwogc3RhdGljIGludCBpcGRkcF9kZWxldGUoc3RydWN0IGlwZGRwX3JvdXRlICpydCk7CiBzdGF0aWMgc3RydWN0IGlwZGRwX3JvdXRlKiBfX2lwZGRwX2ZpbmRfcm91dGUoc3RydWN0IGlwZGRwX3JvdXRlICpydCk7CkBAIC0xMTMsNyArMTE0LDcgQEAKIC8qCiAgKiBUcmFuc21pdCBMTEFQL0VMQVAgZnJhbWUgdXNpbmcgYWFycF9zZW5kX2RkcC4KICAqLwotc3RhdGljIGludCBpcGRkcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaXBkZHBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCV9fYmUzMiBwYWRkciA9IHNrYl9ydGFibGUoc2tiKS0+cnRfZ2F0ZXdheTsKICAgICAgICAgc3RydWN0IGRkcGVoZHIgKmRkcDsKQEAgLTEzMiw3ICsxMzMsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmKHJ0ID09IE5VTEwpIHsKIAkJc3Bpbl91bmxvY2soJmlwZGRwX3JvdXRlX2xvY2spOwotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAgICAgICAgIG91cl9hZGRyID0gYXRhbGtfZmluZF9kZXZfYWRkcihydC0+ZGV2KTsKQEAgLTE3NiwxMiArMTc3LDExIEBACiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAotICAgICAgICBpZihhYXJwX3NlbmRfZGRwKHJ0LT5kZXYsIHNrYiwgJnJ0LT5hdCwgTlVMTCkgPCAwKQotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2Ioc2tiKTsKKwlhYXJwX3NlbmRfZGRwKHJ0LT5kZXYsIHNrYiwgJnJ0LT5hdCwgTlVMTCk7CiAKIAlzcGluX3VubG9jaygmaXBkZHBfcm91dGVfbG9jayk7CiAKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvbHRwYy5jIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2x0cGMuYwppbmRleCBiNjQyNjQ3Li4wODc2MGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvbHRwYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9sdHBjLmMKQEAgLTY5Nyw3ICs2OTcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgbHRwY190aW1lcjsKIAotc3RhdGljIGludCBsdHBjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbHRwY194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgaW50IHJlYWRfMzAgKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtODk1LDcgKzg5NSw3IEBACiAKIC8qIEREUCB0byBMTEFQIHRyYW5zbGF0aW9uICovCiAKLXN0YXRpYyBpbnQgbHRwY194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbHRwY194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJLyogaW4ga2VybmVsIDEuMy54eCwgb24gZW50cnkgc2tiLT5kYXRhIHBvaW50cyB0byBkZHAgaGVhZGVyLAogCSAqIGFuZCBza2ItPmxlbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBkZHAgZGF0YSArIGRkcCBoZWFkZXIKQEAgLTkzMiw3ICs5MzIsNyBAQAogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogaW5pdGlhbGl6YXRpb24gc3R1ZmYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYwppbmRleCA3ZDIyN2NkYS4uNzVhNTcyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYwpAQCAtNTkxLDcgKzU5MSw4IEBACiAKIAogLyogQ2FsbGVkIGJ5IHRoZSBrZXJuZWwgaW4gb3JkZXIgdG8gdHJhbnNtaXQgYSBwYWNrZXQuICovCi1pbnQgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCituZXRkZXZfdHhfdCBhcmNuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhcmNoZHIgKnBrdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyaWFkbmUuYyBiL2RyaXZlcnMvbmV0L2FyaWFkbmUuYwppbmRleCA1OGU4ZDUyLi5jMzVhZjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmlhZG5lLmMKKysrIGIvZHJpdmVycy9uZXQvYXJpYWRuZS5jCkBAIC0xMTUsNyArMTE1LDggQEAKIAogc3RhdGljIGludCBhcmlhZG5lX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBhcmlhZG5lX2luaXRfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgYXJpYWRuZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGFyaWFkbmVfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgYXJpYWRuZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBhcmlhZG5lX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgYXJpYWRuZV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTU4OSw3ICs1OTAsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgYXJpYWRuZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYXJpYWRuZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBzdHJ1Y3QgYXJpYWRuZV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB2b2xhdGlsZSBzdHJ1Y3QgQW03OUM5NjAgKmxhbmNlID0gKHN0cnVjdCBBbTc5Qzk2MCopZGV2LT5iYXNlX2FkZHI7CkBAIC02MTAsNyArNjEyLDcgQEAKICAgICBpZiAoc2tiLT5sZW4gPCBFVEhfWkxFTikKICAgICB7CiAgICAgCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0gICAgCSAgICByZXR1cm4gMDsKKyAgICAJICAgIHJldHVybiBORVRERVZfVFhfT0s7CiAgICAgCWxlbiA9IEVUSF9aTEVOOwogICAgIH0KIApAQCAtNjg1LDcgKzY4Nyw3IEBACiAgICAgfQogICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jIGIvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCmluZGV4IDYyN2JjNzUuLjE2NGIzN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYworKysgYi9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKQEAgLTQ4Miw3ICs0ODIsNyBAQAogCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMgYi9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jCmluZGV4IDUwNDFkMTAuLmM4YmM2MGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMKQEAgLTgzNCw3ICs4MzQsNyBAQAogCQkJCXdlIGZyZWUgYW5kIHJldHVybigwKSBvciBkb24ndCBmcmVlIGFuZCByZXR1cm4gMSAqLwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwppbmRleCBmYmY0NjQ1Li4yYmU0OWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKQEAgLTc2Miw3ICs3NjIsNyBAQAogCXJldHVybiBtaWlfbGlua19vaygmZXAtPm1paSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXA5M3h4X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlcDkzeHhfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IGVwOTN4eF9nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzCQk9IGVwOTN4eF9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSBlcDkzeHhfc2V0X3NldHRpbmdzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyMS5jIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyMS5jCmluZGV4IGVkZjc3MGYuLmU0N2MwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcjEuYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXIxLmMKQEAgLTc0OCw3ICs3NDgsNyBAQAogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKICBvdXQ6Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcjMuYyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcjMuYwppbmRleCA0NTUwMzcxLi4xZjdhNjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXRoZXIzLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyMy5jCkBAIC01MTEsNyArNTExLDcgQEAKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlwcml2KGRldiktPnN0YXRzLnR4X2Ryb3BwZWQgKys7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCWxlbmd0aCA9IChsZW5ndGggKyAxKSAmIH4xOwpAQCAtNTYyLDcgKzU2Miw3IEBACiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAogIG91dDoKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMgYi9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCmluZGV4IDNmZTA5ODcuLjY5MWI4MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYwpAQCAtODAyLDcgKzgwMiw3IEBACiAJcmV0dXJuIHBoeV9zdGFydF9hbmVnKHBvcnQtPnBoeWRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgaXhwNHh4X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpeHA0eHhfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gaXhwNHh4X2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MgPSBpeHA0eHhfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBpeHA0eHhfc2V0X3NldHRpbmdzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jIGIvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCmluZGV4IDM1Y2QyNjQuLjJhN2I3NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYworKysgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKQEAgLTQ2Nyw3ICs0NjcsNiBAQAogCQkJbmV0aWZfcngoc2tiKTsKIAogCQkJLyogUmVjb3JkIHN0YXRzICovCi0JCQluZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJCW5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJCW5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdGxlbjsKIAkJCWdvdG8gcnhfZmluaXNoZWQ7CkBAIC0xMDYzLDcgKzEwNjIsNyBAQAogCQlzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBrczg2OTVfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGtzODY5NV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X21zZ2xldmVsCT0ga3M4Njk1X2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCT0ga3M4Njk1X3NldF9tc2dsZXZlbCwKIAkuZ2V0X3NldHRpbmdzCT0ga3M4Njk1X2dldF9zZXR0aW5ncywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS93OTBwOTEwX2V0aGVyLmMgYi9kcml2ZXJzL25ldC9hcm0vdzkwcDkxMF9ldGhlci5jCmluZGV4IGRkZDIzMWMuLjI1ZTI2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS93OTBwOTEwX2V0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL3c5MHA5MTBfZXRoZXIuYwpAQCAtMTQzLDE2ICsxNDMsMTcgQEAKIAogc3RydWN0IHRyYW5fcGRlc2MgewogCXN0cnVjdCB3OTBwOTEwX3R4YmQgZGVzY2xpc3RbVFhfREVTQ19TSVpFXTsKLQljaGFyIHRyYW5fYnVmW1JYX0RFU0NfU0laRV1bTUFYX1RCVUZGX1NaXTsKKwljaGFyIHRyYW5fYnVmW1RYX0RFU0NfU0laRV1bTUFYX1RCVUZGX1NaXTsKIH07CiAKIHN0cnVjdCAgdzkwcDkxMF9ldGhlciB7CiAJc3RydWN0IHJlY3ZfcGRlc2MgKnJkZXNjOwotCXN0cnVjdCByZWN2X3BkZXNjICpyZGVzY19waHlzOwogCXN0cnVjdCB0cmFuX3BkZXNjICp0ZGVzYzsKLQlzdHJ1Y3QgdHJhbl9wZGVzYyAqdGRlc2NfcGh5czsKKwlkbWFfYWRkcl90IHJkZXNjX3BoeXM7CisJZG1hX2FkZHJfdCB0ZGVzY19waHlzOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAJc3RydWN0IGNsayAqcm1paWNsazsKQEAgLTE2OSw3ICsxNzAsNiBAQAogCXVuc2lnbmVkIGludCBzdGFydF90eF9wdHI7CiAJdW5zaWduZWQgaW50IHN0YXJ0X3J4X3B0cjsKIAl1bnNpZ25lZCBpbnQgbGlua2ZsYWc7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogc3RhdGljIHZvaWQgdXBkYXRlX2xpbmtzcGVlZF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMjc1LDU5ICsyNzUsNzUgQEAKIAlfX3Jhd193cml0ZWwobXN3LCBldGhlci0+cmVnICsgUkVHX0NBTU1fQkFTRSArIHggKiBDQU1fRU5UUllfU0laRSk7CiB9CiAKLXN0YXRpYyB2b2lkIHc5MHA5MTBfaW5pdF9kZXNjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHc5MHA5MTBfaW5pdF9kZXNjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHc5MHA5MTBfZXRoZXIgKmV0aGVyOwotCXN0cnVjdCB3OTBwOTEwX3R4YmQgICp0ZGVzYywgKnRkZXNjX3BoeXM7Ci0Jc3RydWN0IHc5MHA5MTBfcnhiZCAgKnJkZXNjLCAqcmRlc2NfcGh5czsKLQl1bnNpZ25lZCBpbnQgaSwgajsKKwlzdHJ1Y3QgdzkwcDkxMF90eGJkICAqdGRlc2M7CisJc3RydWN0IHc5MHA5MTBfcnhiZCAgKnJkZXNjOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJdW5zaWduZWQgaW50IGk7CiAKIAlldGhlciA9IG5ldGRldl9wcml2KGRldik7CisJcGRldiA9IGV0aGVyLT5wZGV2OwogCiAJZXRoZXItPnRkZXNjID0gKHN0cnVjdCB0cmFuX3BkZXNjICopCi0JCQlkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgc2l6ZW9mKHN0cnVjdCB0cmFuX3BkZXNjKSwKLQkJCQkoZG1hX2FkZHJfdCAqKSAmZXRoZXItPnRkZXNjX3BoeXMsIEdGUF9LRVJORUwpOworCQlkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCB0cmFuX3BkZXNjKSwKKwkJCQkJJmV0aGVyLT50ZGVzY19waHlzLCBHRlBfS0VSTkVMKTsKKworCWlmICghZXRoZXItPnRkZXNjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHR4IGRlc2NcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlldGhlci0+cmRlc2MgPSAoc3RydWN0IHJlY3ZfcGRlc2MgKikKLQkJCWRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBzaXplb2Yoc3RydWN0IHJlY3ZfcGRlc2MpLAotCQkJCShkbWFfYWRkcl90ICopICZldGhlci0+cmRlc2NfcGh5cywgR0ZQX0tFUk5FTCk7CisJCWRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHJlY3ZfcGRlc2MpLAorCQkJCQkmZXRoZXItPnJkZXNjX3BoeXMsIEdGUF9LRVJORUwpOworCisJaWYgKCFldGhlci0+cmRlc2MpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcnggZGVzY1xuIik7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgdHJhbl9wZGVzYyksCisJCQkJCWV0aGVyLT50ZGVzYywgZXRoZXItPnRkZXNjX3BoeXMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgVFhfREVTQ19TSVpFOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IG9mZnNldDsKKwogCQl0ZGVzYyA9ICYoZXRoZXItPnRkZXNjLT5kZXNjbGlzdFtpXSk7CiAKLQkJaiA9ICgoaSArIDEpIC8gVFhfREVTQ19TSVpFKTsKKwkJaWYgKGkgPT0gVFhfREVTQ19TSVpFIC0gMSkKKwkJCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0cmFuX3BkZXNjLCBkZXNjbGlzdFswXSk7CisJCWVsc2UKKwkJCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0cmFuX3BkZXNjLCBkZXNjbGlzdFtpICsgMV0pOwogCi0JCWlmIChqICE9IDApIHsKLQkJCXRkZXNjX3BoeXMgPSAmKGV0aGVyLT50ZGVzY19waHlzLT5kZXNjbGlzdFswXSk7Ci0JCQlldGhlci0+c3RhcnRfdHhfcHRyID0gKHVuc2lnbmVkIGludCl0ZGVzY19waHlzOwotCQkJdGRlc2MtPm5leHQgPSAodW5zaWduZWQgaW50KWV0aGVyLT5zdGFydF90eF9wdHI7Ci0JCX0gZWxzZSB7Ci0JCQl0ZGVzY19waHlzID0gJihldGhlci0+dGRlc2NfcGh5cy0+ZGVzY2xpc3RbaSsxXSk7Ci0JCQl0ZGVzYy0+bmV4dCA9ICh1bnNpZ25lZCBpbnQpdGRlc2NfcGh5czsKLQkJfQotCi0JCXRkZXNjLT5idWZmZXIgPSAodW5zaWduZWQgaW50KWV0aGVyLT50ZGVzY19waHlzLT50cmFuX2J1ZltpXTsKKwkJdGRlc2MtPm5leHQgPSBldGhlci0+dGRlc2NfcGh5cyArIG9mZnNldDsKKwkJdGRlc2MtPmJ1ZmZlciA9IGV0aGVyLT50ZGVzY19waHlzICsKKwkJCW9mZnNldG9mKHN0cnVjdCB0cmFuX3BkZXNjLCB0cmFuX2J1ZltpXSk7CiAJCXRkZXNjLT5zbCA9IDA7CiAJCXRkZXNjLT5tb2RlID0gMDsKIAl9CiAKKwlldGhlci0+c3RhcnRfdHhfcHRyID0gZXRoZXItPnRkZXNjX3BoeXM7CisKIAlmb3IgKGkgPSAwOyBpIDwgUlhfREVTQ19TSVpFOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IG9mZnNldDsKKwogCQlyZGVzYyA9ICYoZXRoZXItPnJkZXNjLT5kZXNjbGlzdFtpXSk7CiAKLQkJaiA9ICgoaSArIDEpIC8gUlhfREVTQ19TSVpFKTsKKwkJaWYgKGkgPT0gUlhfREVTQ19TSVpFIC0gMSkKKwkJCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCByZWN2X3BkZXNjLCBkZXNjbGlzdFswXSk7CisJCWVsc2UKKwkJCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCByZWN2X3BkZXNjLCBkZXNjbGlzdFtpICsgMV0pOwogCi0JCWlmIChqICE9IDApIHsKLQkJCXJkZXNjX3BoeXMgPSAmKGV0aGVyLT5yZGVzY19waHlzLT5kZXNjbGlzdFswXSk7Ci0JCQlldGhlci0+c3RhcnRfcnhfcHRyID0gKHVuc2lnbmVkIGludClyZGVzY19waHlzOwotCQkJcmRlc2MtPm5leHQgPSAodW5zaWduZWQgaW50KWV0aGVyLT5zdGFydF9yeF9wdHI7Ci0JCX0gZWxzZSB7Ci0JCQlyZGVzY19waHlzID0gJihldGhlci0+cmRlc2NfcGh5cy0+ZGVzY2xpc3RbaSsxXSk7Ci0JCQlyZGVzYy0+bmV4dCA9ICh1bnNpZ25lZCBpbnQpcmRlc2NfcGh5czsKLQkJfQotCisJCXJkZXNjLT5uZXh0ID0gZXRoZXItPnJkZXNjX3BoeXMgKyBvZmZzZXQ7CiAJCXJkZXNjLT5zbCA9IFJYX09XRU5fRE1BOwotCQlyZGVzYy0+YnVmZmVyID0gKHVuc2lnbmVkIGludClldGhlci0+cmRlc2NfcGh5cy0+cmVjdl9idWZbaV07CisJCXJkZXNjLT5idWZmZXIgPSBldGhlci0+cmRlc2NfcGh5cyArCisJCQlvZmZzZXRvZihzdHJ1Y3QgcmVjdl9wZGVzYywgcmVjdl9idWZbaV0pOwogCSAgfQorCisJZXRoZXItPnN0YXJ0X3J4X3B0ciA9IGV0aGVyLT5yZGVzY19waHlzOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHc5MHA5MTBfc2V0X2ZpZm9fdGhyZXNob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00NTYsOCArNDcyLDYgQEAKIHsKIAlzdHJ1Y3QgdzkwcDkxMF9ldGhlciAqZXRoZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0Jc3Bpbl9sb2NrKCZldGhlci0+bG9jayk7Ci0KIAl3OTBwOTEwX2VuYWJsZV90eChkZXYsIDApOwogCXc5MHA5MTBfZW5hYmxlX3J4KGRldiwgMCk7CiAJdzkwcDkxMF9zZXRfZmlmb190aHJlc2hvbGQoZGV2KTsKQEAgLTQ4Niw4ICs1MDAsNiBAQAogCiAJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCi0Jc3Bpbl91bmxvY2soJmV0aGVyLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgdzkwcDkxMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC01NDEsNyArNTUzLDcgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIGludCBzZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKK3N0YXRpYyBpbnQgdzkwcDkxMF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MgPSBhZGRyOwogCkBAIC01NTcsMTEgKzU2OSwxNCBAQAogc3RhdGljIGludCB3OTBwOTEwX2V0aGVyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHc5MHA5MTBfZXRoZXIgKmV0aGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCi0JZG1hX2ZyZWVfd3JpdGVjb21iaW5lKE5VTEwsIHNpemVvZihzdHJ1Y3QgdzkwcDkxMF9yeGJkKSwKLQkJCQlldGhlci0+cmRlc2MsIChkbWFfYWRkcl90KWV0aGVyLT5yZGVzY19waHlzKTsKLQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoTlVMTCwgc2l6ZW9mKHN0cnVjdCB3OTBwOTEwX3R4YmQpLAotCQkJCWV0aGVyLT50ZGVzYywgKGRtYV9hZGRyX3QpZXRoZXItPnRkZXNjX3BoeXMpOworCXBkZXYgPSBldGhlci0+cGRldjsKKworCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgcmVjdl9wZGVzYyksCisJCQkJCWV0aGVyLT5yZGVzYywgZXRoZXItPnJkZXNjX3BoeXMpOworCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgdHJhbl9wZGVzYyksCisJCQkJCWV0aGVyLT50ZGVzYywgZXRoZXItPnRkZXNjX3BoeXMpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCkBAIC01OTcsNiArNjEyLDcgQEAKIAogCXR4YmQgPSAmZXRoZXItPnRkZXNjLT5kZXNjbGlzdFtldGhlci0+Y3VyX3R4XTsKIAlidWZmZXIgPSBldGhlci0+dGRlc2MtPnRyYW5fYnVmW2V0aGVyLT5jdXJfdHhdOworCiAJaWYgKGxlbmd0aCA+IDE1MTQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAic2VuZCBkYXRhICVkIGJ5dGVzLCBjaGVjayBpdFxuIiwgbGVuZ3RoKTsKIAkJbGVuZ3RoID0gMTUxNDsKQEAgLTYxMiw3ICs2MjgsOSBAQAogCiAJdzkwcDkxMF90cmlnZ2VyX3R4KGRldik7CiAKLQlldGhlci0+Y3VyX3R4ID0gKGV0aGVyLT5jdXJfdHgrMSkgJSBUWF9ERVNDX1NJWkU7CisJaWYgKCsrZXRoZXItPmN1cl90eCA+PSBUWF9ERVNDX1NJWkUpCisJCWV0aGVyLT5jdXJfdHggPSAwOworCiAJdHhiZCA9ICZldGhlci0+dGRlc2MtPmRlc2NsaXN0W2V0aGVyLT5jdXJfdHhdOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CkBAIC02MzIsNyArNjUwLDcgQEAKIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJcmV0dXJuIDA7CiAJfQotCXJldHVybiAtMTsKKwlyZXR1cm4gLUVBR0FJTjsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHc5MHA5MTBfdHhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTY0MCwyNyArNjU4LDI1IEBACiAJc3RydWN0IHc5MHA5MTBfZXRoZXIgKmV0aGVyOwogCXN0cnVjdCB3OTBwOTEwX3R4YmQgICp0eGJkOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IHRyYW5fcGRlc2MgKnRyYW5fcGRlc2M7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBpbnQgY3VyX2VudHJ5LCBlbnRyeSwgc3RhdHVzOwogCi0JZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOworCWRldiA9IGRldl9pZDsKIAlldGhlciA9IG5ldGRldl9wcml2KGRldik7CiAJcGRldiA9IGV0aGVyLT5wZGV2OwogCi0Jc3Bpbl9sb2NrKCZldGhlci0+bG9jayk7Ci0KIAl3OTBwOTEwX2dldF9hbmRfY2xlYXJfaW50KGRldiwgJnN0YXR1cyk7CiAKIAljdXJfZW50cnkgPSBfX3Jhd19yZWFkbChldGhlci0+cmVnICsgUkVHX0NUWERTQSk7CiAKLQl0cmFuX3BkZXNjID0gZXRoZXItPnRkZXNjX3BoeXM7Ci0JZW50cnkgPSAodW5zaWduZWQgaW50KSgmdHJhbl9wZGVzYy0+ZGVzY2xpc3RbZXRoZXItPmZpbmlzaF90eF0pOworCWVudHJ5ID0gZXRoZXItPnRkZXNjX3BoeXMgKworCQlvZmZzZXRvZihzdHJ1Y3QgdHJhbl9wZGVzYywgZGVzY2xpc3RbZXRoZXItPmZpbmlzaF90eF0pOwogCiAJd2hpbGUgKGVudHJ5ICE9IGN1cl9lbnRyeSkgewogCQl0eGJkID0gJmV0aGVyLT50ZGVzYy0+ZGVzY2xpc3RbZXRoZXItPmZpbmlzaF90eF07CiAKLQkJZXRoZXItPmZpbmlzaF90eCA9IChldGhlci0+ZmluaXNoX3R4ICsgMSkgJSBUWF9ERVNDX1NJWkU7CisJCWlmICgrK2V0aGVyLT5maW5pc2hfdHggPj0gVFhfREVTQ19TSVpFKQorCQkJZXRoZXItPmZpbmlzaF90eCA9IDA7CiAKIAkJaWYgKHR4YmQtPnNsICYgVFhEU19UWENQKSB7CiAJCQlldGhlci0+c3RhdHMudHhfcGFja2V0cysrOwpAQCAtNjc1LDIwICs2OTEsMTkgQEAKIAkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKIAkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAotCQllbnRyeSA9ICh1bnNpZ25lZCBpbnQpKCZ0cmFuX3BkZXNjLT5kZXNjbGlzdFtldGhlci0+ZmluaXNoX3R4XSk7CisJCWVudHJ5ID0gZXRoZXItPnRkZXNjX3BoeXMgKworCQkJb2Zmc2V0b2Yoc3RydWN0IHRyYW5fcGRlc2MsIGRlc2NsaXN0W2V0aGVyLT5maW5pc2hfdHhdKTsKIAl9CiAKIAlpZiAoc3RhdHVzICYgTUlTVEFfRVhERUYpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZW1jIGRlZmVyIGV4Y2VlZCBpbnRlcnJ1cHRcbiIpOwogCX0gZWxzZSBpZiAoc3RhdHVzICYgTUlTVEFfVFhCRVJSKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlbWMgYnVzIGVycm9yIGludGVycnVwdFxuIik7Ci0JCQl3OTBwOTEwX3Jlc2V0X21hYyhkZXYpOwotCQl9IGVsc2UgaWYgKHN0YXR1cyAmIE1JU1RBX1REVSkgewotCQkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCi0JCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJCX0KLQotCXNwaW5fdW5sb2NrKCZldGhlci0+bG9jayk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImVtYyBidXMgZXJyb3IgaW50ZXJydXB0XG4iKTsKKwkJdzkwcDkxMF9yZXNldF9tYWMoZGV2KTsKKwl9IGVsc2UgaWYgKHN0YXR1cyAmIE1JU1RBX1REVSkgeworCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKQorCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTY5OCwyMCArNzEzLDIwIEBACiAJc3RydWN0IHc5MHA5MTBfZXRoZXIgKmV0aGVyOwogCXN0cnVjdCB3OTBwOTEwX3J4YmQgKnJ4YmQ7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgcmVjdl9wZGVzYyAqcmRlc2NfcGh5czsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGNoYXIgKmRhdGE7CiAJdW5zaWduZWQgaW50IGxlbmd0aCwgc3RhdHVzLCB2YWwsIGVudHJ5OwogCiAJZXRoZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXBkZXYgPSBldGhlci0+cGRldjsKLQlyZGVzY19waHlzID0gZXRoZXItPnJkZXNjX3BoeXM7CiAKIAlyeGJkID0gJmV0aGVyLT5yZGVzYy0+ZGVzY2xpc3RbZXRoZXItPmN1cl9yeF07CiAKIAlkbyB7CiAJCXZhbCA9IF9fcmF3X3JlYWRsKGV0aGVyLT5yZWcgKyBSRUdfQ1JYRFNBKTsKLQkJZW50cnkgPSAodW5zaWduZWQgaW50KSZyZGVzY19waHlzLT5kZXNjbGlzdFtldGhlci0+Y3VyX3J4XTsKKworCQllbnRyeSA9IGV0aGVyLT5yZGVzY19waHlzICsKKwkJCW9mZnNldG9mKHN0cnVjdCByZWN2X3BkZXNjLCBkZXNjbGlzdFtldGhlci0+Y3VyX3J4XSk7CiAKIAkJaWYgKHZhbCA9PSBlbnRyeSkKIAkJCWJyZWFrOwpAQCAtNzQzLDI1ICs3NTgsMjUgQEAKIAkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyeCBydW50IGVyclxuIik7CiAJCQkJZXRoZXItPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCX0gZWxzZSBpZiAoc3RhdHVzICYgUlhEU19DUkNFKSB7Ci0JCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgInJ4IGNyYyBlcnJcbiIpOwotCQkJCQlldGhlci0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwotCQkJCX0KLQotCQkJaWYgKHN0YXR1cyAmIFJYRFNfQUxJRSkgeworCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgInJ4IGNyYyBlcnJcbiIpOworCQkJCWV0aGVyLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQl9IGVsc2UgaWYgKHN0YXR1cyAmIFJYRFNfQUxJRSkgewogCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgInJ4IGFsaWdtZW50IGVyclxuIik7CiAJCQkJZXRoZXItPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQkJfSBlbHNlIGlmIChzdGF0dXMgJiBSWERTX1BUTEUpIHsKLQkJCQkJZGV2X2VycigmcGRldi0+ZGV2LCAicnggbG9uZ2VyIGVyclxuIik7Ci0JCQkJCWV0aGVyLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQkJCX0KKwkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyeCBsb25nZXIgZXJyXG4iKTsKKwkJCQlldGhlci0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJCX0KKwkJfQogCiAJCXJ4YmQtPnNsID0gUlhfT1dFTl9ETUE7CiAJCXJ4YmQtPnJlc2VydmVkID0gMHgwOwotCQlldGhlci0+Y3VyX3J4ID0gKGV0aGVyLT5jdXJfcngrMSkgJSBSWF9ERVNDX1NJWkU7CisKKwkJaWYgKCsrZXRoZXItPmN1cl9yeCA+PSBSWF9ERVNDX1NJWkUpCisJCQlldGhlci0+Y3VyX3J4ID0gMDsKKwogCQlyeGJkID0gJmV0aGVyLT5yZGVzYy0+ZGVzY2xpc3RbZXRoZXItPmN1cl9yeF07CiAKLQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAl9IHdoaWxlICgxKTsKIH0KIApAQCAtNzcyLDI4ICs3ODcsMjMgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXVuc2lnbmVkIGludCBzdGF0dXM7CiAKLQlkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7CisJZGV2ID0gZGV2X2lkOwogCWV0aGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlwZGV2ID0gZXRoZXItPnBkZXY7CiAKLQlzcGluX2xvY2soJmV0aGVyLT5sb2NrKTsKLQogCXc5MHA5MTBfZ2V0X2FuZF9jbGVhcl9pbnQoZGV2LCAmc3RhdHVzKTsKIAogCWlmIChzdGF0dXMgJiBNSVNUQV9SRFUpIHsKIAkJbmV0ZGV2X3J4KGRldik7Ci0KIAkJdzkwcDkxMF90cmlnZ2VyX3J4KGRldik7CiAKLQkJc3Bpbl91bmxvY2soJmV0aGVyLT5sb2NrKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0gZWxzZSBpZiAoc3RhdHVzICYgTUlTVEFfUlhCRVJSKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlbWMgcnggYnVzIGVycm9yXG4iKTsKLQkJCXc5MHA5MTBfcmVzZXRfbWFjKGRldik7Ci0JCX0KKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZW1jIHJ4IGJ1cyBlcnJvclxuIik7CisJCXc5MHA5MTBfcmVzZXRfbWFjKGRldik7CisJfQogCiAJbmV0ZGV2X3J4KGRldik7Ci0Jc3Bpbl91bmxvY2soJmV0aGVyLT5sb2NrKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTgyNiw2ICs4MzYsNyBAQAogCWlmIChyZXF1ZXN0X2lycShldGhlci0+cnhpcnEsIHc5MHA5MTBfcnhfaW50ZXJydXB0LAogCQkJCQkJMHgwLCBwZGV2LT5uYW1lLCBkZXYpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ2lzdGVyIGlycSByeCBmYWlsZWRcbiIpOworCQlmcmVlX2lycShldGhlci0+dHhpcnEsIGRldik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIApAQCAtOTA4LDcgKzkxOSw3IEBACiAJLm5kb19zdGFydF94bWl0CQk9IHc5MHA5MTBfZXRoZXJfc3RhcnRfeG1pdCwKIAkubmRvX2dldF9zdGF0cwkJPSB3OTBwOTEwX2V0aGVyX3N0YXRzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gdzkwcDkxMF9ldGhlcl9zZXRfbXVsdGljYXN0X2xpc3QsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBzZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB3OTBwOTEwX3NldF9tYWNfYWRkcmVzcywKIAkubmRvX2RvX2lvY3RsCQk9IHc5MHA5MTBfZXRoZXJfaW9jdGwsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LApAQCAtOTQ5LDggKzk2MCw2IEBACiAKIAlnZXRfbWFjX2FkZHJlc3MoZGV2KTsKIAotCXNwaW5fbG9ja19pbml0KCZldGhlci0+bG9jayk7Ci0KIAlldGhlci0+Y3VyX3R4ID0gMHgwOwogCWV0aGVyLT5jdXJfcnggPSAweDA7CiAJZXRoZXItPmZpbmlzaF90eCA9IDB4MDsKQEAgLTk3MiwzMCArOTgxLDI5IEBACiB7CiAJc3RydWN0IHc5MHA5MTBfZXRoZXIgKmV0aGVyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGVycm9yOwogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCB3OTBwOTEwX2V0aGVyKSk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAocmVzID09IE5VTEwpIHsKKwlldGhlciA9IG5ldGRldl9wcml2KGRldik7CisKKwlldGhlci0+cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoZXRoZXItPnJlcyA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgSS9PIG1lbW9yeVxuIik7CiAJCWVycm9yID0gLUVOWElPOwogCQlnb3RvIGZhaWxlZF9mcmVlOwogCX0KIAotCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpOwotCWlmIChyZXMgPT0gTlVMTCkgeworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGV0aGVyLT5yZXMtPnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUoZXRoZXItPnJlcyksIHBkZXYtPm5hbWUpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IEkvTyBtZW1vcnlcbiIpOwogCQllcnJvciA9IC1FQlVTWTsKIAkJZ290byBmYWlsZWRfZnJlZTsKIAl9CiAKLQlldGhlciA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlldGhlci0+cmVnID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWV0aGVyLT5yZWcgPSBpb3JlbWFwKGV0aGVyLT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGV0aGVyLT5yZXMpKTsKIAlpZiAoZXRoZXItPnJlZyA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKIAkJZXJyb3IgPSAtRU5YSU87CkBAIC0xMDU2LDcgKzEwNjQsNyBAQAogZmFpbGVkX2ZyZWVfaW86CiAJaW91bm1hcChldGhlci0+cmVnKTsKIGZhaWxlZF9mcmVlX21lbToKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oZXRoZXItPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoZXRoZXItPnJlcykpOwogZmFpbGVkX2ZyZWU6CiAJZnJlZV9uZXRkZXYoZGV2KTsKIAlyZXR1cm4gZXJyb3I7CkBAIC0xMDY4LDEwICsxMDc2LDE5IEBACiAJc3RydWN0IHc5MHA5MTBfZXRoZXIgKmV0aGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisKIAljbGtfcHV0KGV0aGVyLT5ybWlpY2xrKTsKIAljbGtfcHV0KGV0aGVyLT5jbGspOworCisJaW91bm1hcChldGhlci0+cmVnKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oZXRoZXItPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoZXRoZXItPnJlcykpOworCisJZnJlZV9pcnEoZXRoZXItPnR4aXJxLCBkZXYpOworCWZyZWVfaXJxKGV0aGVyLT5yeGlycSwgZGV2KTsKKwogCWRlbF90aW1lcl9zeW5jKCZldGhlci0+Y2hlY2tfdGltZXIpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCiAJZnJlZV9uZXRkZXYoZGV2KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0MTcwMC5jIGIvZHJpdmVycy9uZXQvYXQxNzAwLmMKaW5kZXggY2YzMGUyNy4uNTQ0ZDVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXQxNzAwLmMKKysrIGIvZHJpdmVycy9uZXQvYXQxNzAwLmMKQEAgLTE1OSw3ICsxNTksOCBAQAogc3RhdGljIGludCBhdDE3MDBfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpOwogc3RhdGljIGludCByZWFkX2VlcHJvbShsb25nIGlvYWRkciwgaW50IGxvY2F0aW9uKTsKIHN0YXRpYyBpbnQgbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50CW5ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBuZXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCBuZXRfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IG5ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTU5NSw3ICs1OTYsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgbmV0X3NlbmRfcGFja2V0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IG5ldF9zZW5kX3BhY2tldCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwpAQCAtNjQzLDcgKzY0NSw3IEBACiAJCW5ldGlmX3N0YXJ0X3F1ZXVlIChkZXYpOwogCWRldl9rZnJlZV9za2IgKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBUaGUgdHlwaWNhbCB3b3JrbG9hZCBvZiB0aGUgZHJpdmVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jIGIvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jCmluZGV4IDU0MjVhYjAuLjBjMGRlY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKQEAgLTc5Niw3ICs3OTYsNyBAQAogCiAJaWYgKGxlbiA+IHNrYi0+bGVuKSB7CiAJCWlmIChza2JfcGFkdG8oc2tiLCBsZW4pKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCW5ldGlmX3N0b3BfcXVldWUgKGRldik7CkBAIC04NDYsNyArODQ2LDcgQEAKIAkJbHAtPnR4X2Z1bGwgPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZscC0+ZGV2bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIExBTkNFIGludGVycnVwdCBoYW5kbGVyLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfZXRodG9vbC5jCmluZGV4IDAwZDExYjQuLjliMWUwZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ldGh0b29sLmMKQEAgLTI5NCw3ICsyOTQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF0bDFjX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBhdGwxY19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzICAgICAgICAgICA9IGF0bDFjX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzICAgICAgICAgICA9IGF0bDFjX3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8gICAgICAgICAgICA9IGF0bDFjX2dldF9kcnZpbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCmluZGV4IGEzODMxMjIuLmJlMmM2Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKQEAgLTUzNCwxMCArNTM0LDYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNJT0NHTUlJUkVHOgotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKLQkJCXJldHZhbCA9IC1FUEVSTTsKLQkJCWdvdG8gb3V0OwotCQl9CiAJCWlmIChhdGwxY19yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBkYXRhLT5yZWdfbnVtICYgMHgxRiwKIAkJCQkgICAgJmRhdGEtPnZhbF9vdXQpKSB7CiAJCQlyZXR2YWwgPSAtRUlPOwpAQCAtNTQ2LDEwICs1NDIsNiBAQAogCQlicmVhazsKIAogCWNhc2UgU0lPQ1NNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgewotCQkJcmV0dmFsID0gLUVQRVJNOwotCQkJZ290byBvdXQ7Ci0JCX0KIAkJaWYgKGRhdGEtPnJlZ19udW0gJiB+KDB4MUYpKSB7CiAJCQlyZXR2YWwgPSAtRUZBVUxUOwogCQkJZ290byBvdXQ7CkBAIC0xNzQwLDcgKzE3MzIsNiBAQAogCQl9IGVsc2UKIAkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAKLQkJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJKCp3b3JrX2RvbmUpKys7CiAJCWNvdW50Kys7CiAJfQpAQCAtMjA1NSw3ICsyMDQ2LDggQEAKIAlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfTUJfUFJJT19QUk9EX0lEWCwgcHJvZF9kYXRhKTsKIH0KIAotc3RhdGljIGludCBhdGwxY194bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYXRsMWNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNjc4LDYgKzI2NzAsOSBAQAogCiAJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOwogCisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQlhdGwxY19kb3duKGFkYXB0ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9ldGh0b29sLmMKaW5kZXggNDAwMzk1NS4uNjBlZGI5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX2V0aHRvb2wuYwpAQCAtMzc4LDcgKzM3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXRsMWVfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF0bDFlX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgICAgICAgICAgID0gYXRsMWVfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgICAgICAgICAgID0gYXRsMWVfc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyAgICAgICAgICAgID0gYXRsMWVfZ2V0X2RydmluZm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKaW5kZXggOWZjNmQ2ZC4uNjliODMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYwpAQCAtNDUzLDEwICs0NTMsNiBAQAogCQlicmVhazsKIAogCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgewotCQkJcmV0dmFsID0gLUVQRVJNOwotCQkJZ290byBvdXQ7Ci0JCX0KIAkJaWYgKGF0bDFlX3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsIGRhdGEtPnJlZ19udW0gJiAweDFGLAogCQkJCSAgICAmZGF0YS0+dmFsX291dCkpIHsKIAkJCXJldHZhbCA9IC1FSU87CkBAIC00NjUsMTAgKzQ2MSw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTSU9DU01JSVJFRzoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7Ci0JCQlyZXR2YWwgPSAtRVBFUk07Ci0JCQlnb3RvIG91dDsKLQkJfQogCQlpZiAoZGF0YS0+cmVnX251bSAmIH4oMHgxRikpIHsKIAkJCXJldHZhbCA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dDsKQEAgLTE4MzksNyArMTgzMSw4IEBACiAJQVRfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkVHX01CX1RQRF9QUk9EX0lEWCwgdHhfcmluZy0+bmV4dF90b191c2UpOwogfQogCi1zdGF0aWMgaW50IGF0bDFlX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBhdGwxZV94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI0OTcsNiArMjQ5MCw5IEBACiAKIAluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CiAKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWF0bDFlX2Rvd24oYWRhcHRlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKaW5kZXggOGJjYTEyZi4uMDA1NjlkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKQEAgLTIzNDksNyArMjM0OSw4IEBACiAJYXRvbWljX3NldCgmdHBkX3JpbmctPm5leHRfdG9fdXNlLCBuZXh0X3RvX3VzZSk7CiB9CiAKLXN0YXRpYyBpbnQgYXRsMV94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYXRsMV94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBhdGwxX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBhdGwxX3RwZF9yaW5nICp0cGRfcmluZyA9ICZhZGFwdGVyLT50cGRfcmluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKaW5kZXggMjA0ZGI5Ni4uYWI2ODg4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKQEAgLTgyMSw3ICs4MjEsOCBAQAogCQkoaW50KSAodHhkX3JlYWRfcHRyIC0gYWRhcHRlci0+dHhkX3dyaXRlX3B0ciAtIDEpOwogfQogCi1zdGF0aWMgaW50IGF0bDJfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGF0bDJfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYXRsMl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgdHhfcGt0X2hlYWRlciAqdHhwaDsKQEAgLTk2NSw4ICs5NjYsNiBAQAogCQlkYXRhLT5waHlfaWQgPSAwOwogCQlicmVhazsKIAljYXNlIFNJT0NHTUlJUkVHOgotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c3RhdHNfbG9jaywgZmxhZ3MpOwogCQlpZiAoYXRsMl9yZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LAogCQkJZGF0YS0+cmVnX251bSAmIDB4MUYsICZkYXRhLT52YWxfb3V0KSkgewpAQCAtOTc2LDggKzk3NSw2IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnN0YXRzX2xvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBTSU9DU01JSVJFRzoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKIAkJaWYgKGRhdGEtPnJlZ19udW0gJiB+KDB4MUYpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBmbGFncyk7CkBAIC0yMDkzLDcgKzIwOTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF0bDJfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF0bDJfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncwkJPSBhdGwyX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IGF0bDJfc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbwkJPSBhdGwyX2dldF9kcnZpbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRwLmMgYi9kcml2ZXJzL25ldC9hdHAuYwppbmRleCA0MzE3YjNlLi45MDQzMjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdHAuYworKysgYi9kcml2ZXJzL25ldC9hdHAuYwpAQCAtMTk5LDcgKzE5OSw4IEBACiBzdGF0aWMgdm9pZCBoYXJkd2FyZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgd3JpdGVfcGFja2V0KGxvbmcgaW9hZGRyLCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsIGludCBwYWQsIGludCBtb2RlKTsKIHN0YXRpYyB2b2lkIHRyaWdnZXJfc2VuZChsb25nIGlvYWRkciwgaW50IGxlbmd0aCk7Ci1zdGF0aWMgaW50CWF0cF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBhdHBfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBhdHBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCBuZXRfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCByZWFkX2Jsb2NrKGxvbmcgaW9hZGRyLCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBkYXRhX21vZGUpOwpAQCAtNTUyLDcgKzU1Myw4IEBACiAJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIH0KIAotc3RhdGljIGludCBhdHBfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBhdHBfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwpAQCAtNTg3LDcgKzU4OSw3IEBACiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlkZXZfa2ZyZWVfc2tiIChza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCmluZGV4IGQzYzczNGYuLmZkZjU5MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKQEAgLTkzNyw3ICs5MzcsNyBAQAogLyoKICAqIEF1MTAwMCB0cmFuc21pdCByb3V0aW5lLgogICovCi1zdGF0aWMgaW50IGF1MTAwMF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGF1MTAwMF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmZGV2LT5zdGF0czsKQEAgLTk4OCw3ICs5ODgsNyBAQAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlhdXAtPnR4X2hlYWQgPSAoYXVwLT50eF9oZWFkICsgMSkgJiAoTlVNX1RYX0RNQSAtIDEpOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCkBAIC0xMTU3LDYgKzExNTcsOSBAQAogCWF1cC0+bWlpX2J1cy0+bmFtZSA9ICJhdTEwMDBfZXRoX21paSI7CiAJc25wcmludGYoYXVwLT5taWlfYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCBhdXAtPm1hY19pZCk7CiAJYXVwLT5taWlfYnVzLT5pcnEgPSBrbWFsbG9jKHNpemVvZihpbnQpKlBIWV9NQVhfQUREUiwgR0ZQX0tFUk5FTCk7CisJaWYgKGF1cC0+bWlpX2J1cy0+aXJxID09IE5VTEwpCisJCWdvdG8gZXJyX291dDsKKwogCWZvcihpID0gMDsgaSA8IFBIWV9NQVhfQUREUjsgKytpKQogCQlhdXAtPm1paV9idXMtPmlycVtpXSA9IFBIWV9QT0xMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iNDQuYyBiL2RyaXZlcnMvbmV0L2I0NC5jCmluZGV4IGJhZmNhNjcuLjAxODlkY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2I0NC5jCisrKyBiL2RyaXZlcnMvbmV0L2I0NC5jCkBAIC05NDYsNyArOTQ2LDcgQEAKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgYjQ0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBiNDRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBiNDQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcmMgPSBORVRERVZfVFhfT0s7CkBAIC0xMjk4LDE0ICsxMjk4LDE4IEBACiAJc3dpdGNoIChzZGV2LT5idXMtPmJ1c3R5cGUpIHsKIAljYXNlIFNTQl9CVVNUWVBFX1NTQjoKIAkJYnczMihicCwgQjQ0X01ESU9fQ1RSTCwgKE1ESU9fQ1RSTF9QUkVBTUJMRSB8Ci0JCSAgICAgKCgoc3NiX2Nsb2Nrc3BlZWQoc2Rldi0+YnVzKSArIChCNDRfTURDX1JBVElPIC8gMikpIC8gQjQ0X01EQ19SQVRJTykKKwkJICAgICAoRElWX1JPVU5EX0NMT1NFU1Qoc3NiX2Nsb2Nrc3BlZWQoc2Rldi0+YnVzKSwKKwkJCQkJQjQ0X01EQ19SQVRJTykKIAkJICAgICAmIE1ESU9fQ1RSTF9NQVhGX01BU0spKSk7CiAJCWJyZWFrOwogCWNhc2UgU1NCX0JVU1RZUEVfUENJOgotCWNhc2UgU1NCX0JVU1RZUEVfUENNQ0lBOgogCQlidzMyKGJwLCBCNDRfTURJT19DVFJMLCAoTURJT19DVFJMX1BSRUFNQkxFIHwKIAkJICAgICAoMHgwZCAmIE1ESU9fQ1RSTF9NQVhGX01BU0spKSk7CiAJCWJyZWFrOworCWNhc2UgU1NCX0JVU1RZUEVfUENNQ0lBOgorCWNhc2UgU1NCX0JVU1RZUEVfU0RJTzoKKwkJV0FSTl9PTigxKTsgLyogQSBkZXZpY2Ugd2l0aCB0aGlzIGJ1cyBkb2VzIG5vdCBleGlzdC4gKi8KKwkJYnJlYWs7CiAJfQogCiAJYnIzMihicCwgQjQ0X01ESU9fQ1RSTCk7CkBAIC0xNzU3LDE1ICsxNzYxLDE4IEBACiAJc3RydWN0IGI0NCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBzc2JfYnVzICpidXMgPSBicC0+c2Rldi0+YnVzOwogCi0Jc3RybmNweShpbmZvLT5kcml2ZXIsIERSVl9NT0RVTEVfTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOwotCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgRFJWX01PRFVMRV9WRVJTSU9OLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CisJc3RybGNweShpbmZvLT5kcml2ZXIsIERSVl9NT0RVTEVfTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOworCXN0cmxjcHkoaW5mby0+dmVyc2lvbiwgRFJWX01PRFVMRV9WRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOwogCXN3aXRjaCAoYnVzLT5idXN0eXBlKSB7CiAJY2FzZSBTU0JfQlVTVFlQRV9QQ0k6Ci0JCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGJ1cy0+aG9zdF9wY2kpLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKKwkJc3RybGNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYnVzLT5ob3N0X3BjaSksIHNpemVvZihpbmZvLT5idXNfaW5mbykpOworCQlicmVhazsKKwljYXNlIFNTQl9CVVNUWVBFX1NTQjoKKwkJc3RybGNweShpbmZvLT5idXNfaW5mbywgIlNTQiIsIHNpemVvZihpbmZvLT5idXNfaW5mbykpOwogCQlicmVhazsKIAljYXNlIFNTQl9CVVNUWVBFX1BDTUNJQToKLQljYXNlIFNTQl9CVVNUWVBFX1NTQjoKLQkJc3RybmNweShpbmZvLT5idXNfaW5mbywgIlNTQiIsIHNpemVvZihpbmZvLT5idXNfaW5mbykpOworCWNhc2UgU1NCX0JVU1RZUEVfU0RJTzoKKwkJV0FSTl9PTigxKTsgLyogQSBkZXZpY2Ugd2l0aCB0aGlzIGJ1cyBkb2VzIG5vdCBleGlzdC4gKi8KIAkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2JlbmV0L0tjb25maWcKaW5kZXggYzY5MzRmMS4uZmRiNmU4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9LY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogY29uZmlnIEJFMk5FVAogCXRyaXN0YXRlICJTZXJ2ZXJFbmdpbmVzJyAxMEdicHMgTklDIC0gQmxhZGVFbmdpbmUgMiIKIAlkZXBlbmRzIG9uIFBDSSAmJiBJTkVUCi0Jc2VsZWN0IElORVRfTFJPCiAJaGVscAogCVRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIE5JQyBmdW5jdGlvbmFsaXR5IGZvciBTZXJ2ZXJFbmdpbmVzJwogCTEwR2JwcyBuZXR3b3JrIGFkYXB0ZXIgLSBCbGFkZUVuZ2luZSAyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKaW5kZXggNWI0YmYzZC4uMTNiNzJjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCkBAIC0yOCwxMSArMjgsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldF9scm8uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjaW5jbHVkZSAiYmVfaHcuaCIKIAotI2RlZmluZSBEUlZfVkVSCQkJIjIuMC4zNDgiCisjZGVmaW5lIERSVl9WRVIJCQkiMi4xMDEuMjA1IgogI2RlZmluZSBEUlZfTkFNRQkJImJlMm5ldCIKICNkZWZpbmUgQkVfTkFNRQkJCSJTZXJ2ZXJFbmdpbmVzIEJsYWRlRW5naW5lMiAxMEdicHMgTklDIgogI2RlZmluZSBPQ19OQU1FCQkJIkVtdWxleCBPbmVDb25uZWN0IDEwR2JwcyBOSUMiCkBAIC03Miw4ICs3Miw3IEBACiAjZGVmaW5lIE1BWF9SWF9QT1NUIAkJQkVfTkFQSV9XRUlHSFQgLyogRnJhZ3MgcG9zdGVkIGF0IGEgdGltZSAqLwogI2RlZmluZSBSWF9GUkFHU19SRUZJTExfV00JKFJYX1FfTEVOIC0gTUFYX1JYX1BPU1QpCiAKLSNkZWZpbmUgQkVfTUFYX0xST19ERVNDUklQVE9SUyAgMTYKLSNkZWZpbmUgQkVfTUFYX0ZSQUdTX1BFUl9GUkFNRSAgKG1pbigodTMyKSAxNiwgKHUzMikgTUFYX1NLQl9GUkFHUykpCisjZGVmaW5lIEZXX1ZFUl9MRU4JCTMyCiAKIHN0cnVjdCBiZV9kbWFfbWVtIHsKIAl2b2lkICp2YTsKQEAgLTEyNyw3ICsxMjYsNiBAQAogCWluZGV4X2luYygmcS0+dGFpbCwgcS0+bGVuKTsKIH0KIAotCiBzdHJ1Y3QgYmVfZXFfb2JqIHsKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBxOwogCWNoYXIgZGVzY1szMl07CkBAIC0xNDYsMzEgKzE0NCw2IEBACiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gY3E7CiB9OwogCi1zdHJ1Y3QgYmVfY3RybF9pbmZvIHsKLQl1OCBfX2lvbWVtICpjc3I7Ci0JdTggX19pb21lbSAqZGI7CQkvKiBEb29yIEJlbGwgKi8KLQl1OCBfX2lvbWVtICpwY2ljZmc7CS8qIFBDSSBjb25maWcgc3BhY2UgKi8KLQlpbnQgcGNpX2Z1bmM7Ci0KLQkvKiBNYm94IHVzZWQgZm9yIGNtZCByZXF1ZXN0L3Jlc3BvbnNlICovCi0Jc3BpbmxvY2tfdCBtYm94X2xvY2s7CS8qIEZvciBzZXJpYWxpemluZyBtYm94IGNtZHMgdG8gQkUgY2FyZCAqLwotCXN0cnVjdCBiZV9kbWFfbWVtIG1ib3hfbWVtOwotCS8qIE1ib3ggbWVtIGlzIGFkanVzdGVkIHRvIGFsaWduIHRvIDE2IGJ5dGVzLiBUaGUgYWxsb2NhdGVkIGFkZHIKLQkgKiBpcyBzdG9yZWQgZm9yIGZyZWVpbmcgcHVycG9zZSAqLwotCXN0cnVjdCBiZV9kbWFfbWVtIG1ib3hfbWVtX2FsbG9jZWQ7Ci0KLQkvKiBNQ0MgUmluZ3MgKi8KLQlzdHJ1Y3QgYmVfbWNjX29iaiBtY2Nfb2JqOwotCXNwaW5sb2NrX3QgbWNjX2xvY2s7CS8qIEZvciBzZXJpYWxpemluZyBtY2MgY21kcyB0byBCRSBjYXJkICovCi0Jc3BpbmxvY2tfdCBtY2NfY3FfbG9jazsKLQotCS8qIE1DQyBBc3luYyBjYWxsYmFjayAqLwotCXZvaWQgKCphc3luY19jYikodm9pZCAqYWRhcHRlciwgYm9vbCBsaW5rX3VwKTsKLQl2b2lkICphZGFwdGVyX2N0eHQ7Ci19OwotCi0jaW5jbHVkZSAiYmVfY21kcy5oIgotCiBzdHJ1Y3QgYmVfZHJ2cl9zdGF0cyB7CiAJdTMyIGJlX3R4X3JlcXM7CQkvKiBudW1iZXIgb2YgVFggcmVxdWVzdHMgaW5pdGlhdGVkICovCiAJdTMyIGJlX3R4X3N0b3BzOwkvKiBudW1iZXIgb2YgdGltZXMgVFggUSB3YXMgc3RvcHBlZCAqLwpAQCAtMTg5LDggKzE2Miw2IEBACiAJdTMyIGJlX3BvbGxzOwkJLyogbnVtYmVyIG9mIHRpbWVzIE5BUEkgY2FsbGVkIHBvbGwgZnVuY3Rpb24gKi8KIAl1MzIgYmVfcnhfZXZlbnRzOwkvKiBudW1iZXIgb2YgdWNhc3QgcnggY29tcGxldGlvbiBldmVudHMgICovCiAJdTMyIGJlX3J4X2NvbXBsOwkvKiBudW1iZXIgb2YgcnggY29tcGxldGlvbiBlbnRyaWVzIHByb2Nlc3NlZCAqLwotCXUzMiBiZV9scm9faGdyYW1fZGF0YVs4XTsJLyogaGlzdG9ncmFtIG9mIExSTyBkYXRhIHBhY2tldHMgKi8KLQl1MzIgYmVfbHJvX2hncmFtX2Fja1s4XTsJLyogaGlzdG9ncmFtIG9mIExSTyBBQ0tzICovCiAJdWxvbmcgYmVfcnhfamlmZmllczsKIAl1NjQgYmVfcnhfYnl0ZXM7CiAJdTY0IGJlX3J4X2J5dGVzX3ByZXY7CkBAIC0yMzMsOCArMjA0LDYgQEAKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBxOwogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGNxOwogCXN0cnVjdCBiZV9yeF9wYWdlX2luZm8gcGFnZV9pbmZvX3RibFtSWF9RX0xFTl07Ci0Jc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7Ci0Jc3RydWN0IG5ldF9scm9fZGVzYyBscm9fZGVzY1tCRV9NQVhfTFJPX0RFU0NSSVBUT1JTXTsKIH07CiAKICNkZWZpbmUgQkVfTlVNX01TSVhfVkVDVE9SUwkJMgkvKiAxIGVhY2ggZm9yIFR4IGFuZCBSeCAqLwpAQCAtMjQyLDggKzIxMSwxOSBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKLQkvKiBNYm94LCBwY2kgY29uZmlnLCBjc3IgYWRkcmVzcyBpbmZvcm1hdGlvbiAqLwotCXN0cnVjdCBiZV9jdHJsX2luZm8gY3RybDsKKwl1OCBfX2lvbWVtICpjc3I7CisJdTggX19pb21lbSAqZGI7CQkvKiBEb29yIEJlbGwgKi8KKwl1OCBfX2lvbWVtICpwY2ljZmc7CS8qIFBDSSBjb25maWcgc3BhY2UgKi8KKworCXNwaW5sb2NrX3QgbWJveF9sb2NrOwkvKiBGb3Igc2VyaWFsaXppbmcgbWJveCBjbWRzIHRvIEJFIGNhcmQgKi8KKwlzdHJ1Y3QgYmVfZG1hX21lbSBtYm94X21lbTsKKwkvKiBNYm94IG1lbSBpcyBhZGp1c3RlZCB0byBhbGlnbiB0byAxNiBieXRlcy4gVGhlIGFsbG9jYXRlZCBhZGRyCisJICogaXMgc3RvcmVkIGZvciBmcmVlaW5nIHB1cnBvc2UgKi8KKwlzdHJ1Y3QgYmVfZG1hX21lbSBtYm94X21lbV9hbGxvY2VkOworCisJc3RydWN0IGJlX21jY19vYmogbWNjX29iajsKKwlzcGlubG9ja190IG1jY19sb2NrOwkvKiBGb3Igc2VyaWFsaXppbmcgbWNjIGNtZHMgdG8gQkUgY2FyZCAqLworCXNwaW5sb2NrX3QgbWNjX2NxX2xvY2s7CiAKIAlzdHJ1Y3QgbXNpeF9lbnRyeSBtc2l4X2VudHJpZXNbQkVfTlVNX01TSVhfVkVDVE9SU107CiAJYm9vbCBtc2l4X2VuYWJsZWQ7CkBAIC0yNzEsNyArMjUxLDYgQEAKIAogCS8qIEV0aHRvb2wga25vYnMgYW5kIGluZm8gKi8KIAlib29sIHJ4X2NzdW07IAkJLyogQkUgY2FyZCBtdXN0IHBlcmZvcm0gcngtY2hlY2tzdW1taW5nICovCi0JdTMyIG1heF9yeF9jb2FsOwogCWNoYXIgZndfdmVyW0ZXX1ZFUl9MRU5dOwogCXUzMiBpZl9oYW5kbGU7CQkvKiBVc2VkIHRvIGNvbmZpZ3VyZSBmaWx0ZXJpbmcgKi8KIAl1MzIgcG1hY19pZDsJCS8qIE1BQyBhZGRyIGhhbmRsZSB1c2VkIGJ5IEJFIGNhcmQgKi8KQEAgLTI4MSwxMCArMjYwLDE1IEBACiAJYm9vbCBwcm9taXNjdW91czsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzOwogCiAjZGVmaW5lIGRydnJfc3RhdHMoYWRhcHRlcikJCSgmYWRhcHRlci0+c3RhdHMuZHJ2cl9zdGF0cykKIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmVfcGNpX2Z1bmMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIFBDSV9GVU5DKGFkYXB0ZXItPnBkZXYtPmRldmZuKTsKK30KKwogI2RlZmluZSBCRV9TRVRfTkVUREVWX09QUyhuZXRkZXYsIG9wcykJKG5ldGRldi0+bmV0ZGV2X29wcyA9IG9wcykKIAogI2RlZmluZSBQQUdFX1NISUZUXzRLCQkxMgpAQCAtMzc1LDYgKzM1OSw4IEBACiAJcmV0dXJuIHZhbDsKIH0KIAotZXh0ZXJuIHZvaWQgYmVfY3Ffbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBxaWQsIGJvb2wgYXJtLAorZXh0ZXJuIHZvaWQgYmVfY3Ffbm90aWZ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgcWlkLCBib29sIGFybSwKIAkJdTE2IG51bV9wb3BwZWQpOworZXh0ZXJuIHZvaWQgYmVfbGlua19zdGF0dXNfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBib29sIGxpbmtfdXApOworZXh0ZXJuIGludCBiZV9sb2FkX2Z3KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqZnVuYyk7CiAjZW5kaWYJCQkJLyogQkVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCmluZGV4IDU4MzUxN2VkLi4xZGIwOTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCkBAIC0xNiwyMSArMTYsMjIgQEAKICAqLwogCiAjaW5jbHVkZSAiYmUuaCIKKyNpbmNsdWRlICJiZV9jbWRzLmgiCiAKLXN0YXRpYyB2b2lkIGJlX21jY19ub3RpZnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3N0YXRpYyB2b2lkIGJlX21jY19ub3RpZnkoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGJlX3F1ZXVlX2luZm8gKm1jY3EgPSAmY3RybC0+bWNjX29iai5xOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICptY2NxID0gJmFkYXB0ZXItPm1jY19vYmoucTsKIAl1MzIgdmFsID0gMDsKIAogCXZhbCB8PSBtY2NxLT5pZCAmIERCX01DQ1FfUklOR19JRF9NQVNLOwogCXZhbCB8PSAxIDw8IERCX01DQ1FfTlVNX1BPU1RFRF9TSElGVDsKLQlpb3dyaXRlMzIodmFsLCBjdHJsLT5kYiArIERCX01DQ1FfT0ZGU0VUKTsKKwlpb3dyaXRlMzIodmFsLCBhZGFwdGVyLT5kYiArIERCX01DQ1FfT0ZGU0VUKTsKIH0KIAogLyogVG8gY2hlY2sgaWYgdmFsaWQgYml0IGlzIHNldCwgY2hlY2sgdGhlIGVudGlyZSB3b3JkIGFzIHdlIGRvbid0IGtub3cKICAqIHRoZSBlbmRpYW5uZXNzIG9mIHRoZSBkYXRhIChvbGQgZW50cnkgaXMgaG9zdCBlbmRpYW4gd2hpbGUgYSBuZXcgZW50cnkgaXMKICAqIGxpdHRsZSBlbmRpYW4pICovCi1zdGF0aWMgaW5saW5lIGJvb2wgYmVfbWNjX2NvbXBsX2lzX25ldyhzdHJ1Y3QgYmVfbWNjX2NxX2VudHJ5ICpjb21wbCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBiZV9tY2NfY29tcGxfaXNfbmV3KHN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKQogewogCWlmIChjb21wbC0+ZmxhZ3MgIT0gMCkgewogCQljb21wbC0+ZmxhZ3MgPSBsZTMyX3RvX2NwdShjb21wbC0+ZmxhZ3MpOwpAQCAtNDIsMTMgKzQzLDEzIEBACiB9CiAKIC8qIE5lZWQgdG8gcmVzZXQgdGhlIGVudGlyZSB3b3JkIHRoYXQgaG91c2VzIHRoZSB2YWxpZCBiaXQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBiZV9tY2NfY29tcGxfdXNlKHN0cnVjdCBiZV9tY2NfY3FfZW50cnkgKmNvbXBsKQorc3RhdGljIGlubGluZSB2b2lkIGJlX21jY19jb21wbF91c2Uoc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwpCiB7CiAJY29tcGwtPmZsYWdzID0gMDsKIH0KIAotc3RhdGljIGludCBiZV9tY2NfY29tcGxfcHJvY2VzcyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAotCXN0cnVjdCBiZV9tY2NfY3FfZW50cnkgKmNvbXBsKQorc3RhdGljIGludCBiZV9tY2NfY29tcGxfcHJvY2VzcyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwlzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCkKIHsKIAl1MTYgY29tcGxfc3RhdHVzLCBleHRkX3N0YXR1czsKIApAQCAtNjEsOCArNjIsOCBAQAogCWlmIChjb21wbF9zdGF0dXMgIT0gTUNDX1NUQVRVU19TVUNDRVNTKSB7CiAJCWV4dGRfc3RhdHVzID0gKGNvbXBsLT5zdGF0dXMgPj4gQ1FFX1NUQVRVU19FWFREX1NISUZUKSAmCiAJCQkJQ1FFX1NUQVRVU19FWFREX01BU0s7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJCSIgZXJyb3IgaW4gY21kIGNvbXBsZXRpb246IHN0YXR1cyhjb21wbC9leHRkKT0lZC8lZFxuIiwKKwkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJFcnJvciBpbiBjbWQgY29tcGxldGlvbjogc3RhdHVzKGNvbXBsL2V4dGQpPSVkLyVkXG4iLAogCQkJY29tcGxfc3RhdHVzLCBleHRkX3N0YXR1cyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC03MCwxMSArNzEsMTEgQEAKIH0KIAogLyogTGluayBzdGF0ZSBldnQgaXMgYSBzdHJpbmcgb2YgYnl0ZXM7IG5vIG5lZWQgZm9yIGVuZGlhbiBzd2FwcGluZyAqLwotc3RhdGljIHZvaWQgYmVfYXN5bmNfbGlua19zdGF0ZV9wcm9jZXNzKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCitzdGF0aWMgdm9pZCBiZV9hc3luY19saW5rX3N0YXRlX3Byb2Nlc3Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXN0cnVjdCBiZV9hc3luY19ldmVudF9saW5rX3N0YXRlICpldnQpCiB7Ci0JY3RybC0+YXN5bmNfY2IoY3RybC0+YWRhcHRlcl9jdHh0LAotCQlldnQtPnBvcnRfbGlua19zdGF0dXMgPT0gQVNZTkNfRVZFTlRfTElOS19VUCA/IHRydWUgOiBmYWxzZSk7CisJYmVfbGlua19zdGF0dXNfdXBkYXRlKGFkYXB0ZXIsCisJCWV2dC0+cG9ydF9saW5rX3N0YXR1cyA9PSBBU1lOQ19FVkVOVF9MSU5LX1VQKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzX2xpbmtfc3RhdGVfZXZ0KHUzMiB0cmFpbGVyKQpAQCAtODQsMTAgKzg1LDEwIEBACiAJCQkJQVNZTkNfRVZFTlRfQ09ERV9MSU5LX1NUQVRFKTsKIH0KIAotc3RhdGljIHN0cnVjdCBiZV9tY2NfY3FfZW50cnkgKmJlX21jY19jb21wbF9nZXQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3N0YXRpYyBzdHJ1Y3QgYmVfbWNjX2NvbXBsICpiZV9tY2NfY29tcGxfZ2V0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICptY2NfY3EgPSAmY3RybC0+bWNjX29iai5jcTsKLQlzdHJ1Y3QgYmVfbWNjX2NxX2VudHJ5ICpjb21wbCA9IHF1ZXVlX3RhaWxfbm9kZShtY2NfY3EpOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICptY2NfY3EgPSAmYWRhcHRlci0+bWNjX29iai5jcTsKKwlzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCA9IHF1ZXVlX3RhaWxfbm9kZShtY2NfY3EpOwogCiAJaWYgKGJlX21jY19jb21wbF9pc19uZXcoY29tcGwpKSB7CiAJCXF1ZXVlX3RhaWxfaW5jKG1jY19jcSk7CkBAIC05Niw1NSArOTcsNTUgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCBiZV9wcm9jZXNzX21jYyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKQordm9pZCBiZV9wcm9jZXNzX21jYyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgYmVfbWNjX2NxX2VudHJ5ICpjb21wbDsKKwlzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbDsKIAlpbnQgbnVtID0gMDsKIAotCXNwaW5fbG9ja19iaCgmY3RybC0+bWNjX2NxX2xvY2spOwotCXdoaWxlICgoY29tcGwgPSBiZV9tY2NfY29tcGxfZ2V0KGN0cmwpKSkgeworCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+bWNjX2NxX2xvY2spOworCXdoaWxlICgoY29tcGwgPSBiZV9tY2NfY29tcGxfZ2V0KGFkYXB0ZXIpKSkgewogCQlpZiAoY29tcGwtPmZsYWdzICYgQ1FFX0ZMQUdTX0FTWU5DX01BU0spIHsKIAkJCS8qIEludGVycHJldCBmbGFncyBhcyBhbiBhc3luYyB0cmFpbGVyICovCiAJCQlCVUdfT04oIWlzX2xpbmtfc3RhdGVfZXZ0KGNvbXBsLT5mbGFncykpOwogCiAJCQkvKiBJbnRlcnByZXQgY29tcGwgYXMgYSBhc3luYyBsaW5rIGV2dCAqLwotCQkJYmVfYXN5bmNfbGlua19zdGF0ZV9wcm9jZXNzKGN0cmwsCisJCQliZV9hc3luY19saW5rX3N0YXRlX3Byb2Nlc3MoYWRhcHRlciwKIAkJCQkoc3RydWN0IGJlX2FzeW5jX2V2ZW50X2xpbmtfc3RhdGUgKikgY29tcGwpOwogCQl9IGVsc2UgewotCQkJYmVfbWNjX2NvbXBsX3Byb2Nlc3MoY3RybCwgY29tcGwpOwotCQkJYXRvbWljX2RlYygmY3RybC0+bWNjX29iai5xLnVzZWQpOworCQkJYmVfbWNjX2NvbXBsX3Byb2Nlc3MoYWRhcHRlciwgY29tcGwpOworCQkJYXRvbWljX2RlYygmYWRhcHRlci0+bWNjX29iai5xLnVzZWQpOwogCQl9CiAJCWJlX21jY19jb21wbF91c2UoY29tcGwpOwogCQludW0rKzsKIAl9CiAJaWYgKG51bSkKLQkJYmVfY3Ffbm90aWZ5KGN0cmwsIGN0cmwtPm1jY19vYmouY3EuaWQsIHRydWUsIG51bSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmN0cmwtPm1jY19jcV9sb2NrKTsKKwkJYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIGFkYXB0ZXItPm1jY19vYmouY3EuaWQsIHRydWUsIG51bSk7CisJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1jY19jcV9sb2NrKTsKIH0KIAogLyogV2FpdCB0aWxsIG5vIG1vcmUgcGVuZGluZyBtY2MgcmVxdWVzdHMgYXJlIHByZXNlbnQgKi8KLXN0YXRpYyB2b2lkIGJlX21jY193YWl0X2NvbXBsKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpCitzdGF0aWMgdm9pZCBiZV9tY2Nfd2FpdF9jb21wbChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKICNkZWZpbmUgbWNjX3RpbWVvdXQJCTUwMDAwIC8qIDVzIHRpbWVvdXQgKi8KIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgbWNjX3RpbWVvdXQ7IGkrKykgewotCQliZV9wcm9jZXNzX21jYyhjdHJsKTsKLQkJaWYgKGF0b21pY19yZWFkKCZjdHJsLT5tY2Nfb2JqLnEudXNlZCkgPT0gMCkKKwkJYmVfcHJvY2Vzc19tY2MoYWRhcHRlcik7CisJCWlmIChhdG9taWNfcmVhZCgmYWRhcHRlci0+bWNjX29iai5xLnVzZWQpID09IDApCiAJCQlicmVhazsKIAkJdWRlbGF5KDEwMCk7CiAJfQogCWlmIChpID09IG1jY190aW1lb3V0KQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICJtY2MgcG9sbCB0aW1lZCBvdXRcbiIpOworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJtY2NxIHBvbGwgdGltZWQgb3V0XG4iKTsKIH0KIAogLyogTm90aWZ5IE1DQyByZXF1ZXN0cyBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqLwotc3RhdGljIHZvaWQgYmVfbWNjX25vdGlmeV93YWl0KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpCitzdGF0aWMgdm9pZCBiZV9tY2Nfbm90aWZ5X3dhaXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JYmVfbWNjX25vdGlmeShjdHJsKTsKLQliZV9tY2Nfd2FpdF9jb21wbChjdHJsKTsKKwliZV9tY2Nfbm90aWZ5KGFkYXB0ZXIpOworCWJlX21jY193YWl0X2NvbXBsKGFkYXB0ZXIpOwogfQogCi1zdGF0aWMgaW50IGJlX21ib3hfZGJfcmVhZHlfd2FpdCh2b2lkIF9faW9tZW0gKmRiKQorc3RhdGljIGludCBiZV9tYm94X2RiX3JlYWR5X3dhaXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHZvaWQgX19pb21lbSAqZGIpCiB7CiAJaW50IGNudCA9IDAsIHdhaXQgPSA1OwogCXUzMiByZWFkeTsKQEAgLTE1NCw5ICsxNTUsOCBAQAogCQlpZiAocmVhZHkpCiAJCQlicmVhazsKIAotCQlpZiAoY250ID4gMjAwMDAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCQkJIjogbWJveF9kYiBwb2xsIHRpbWVkIG91dFxuIik7CisJCWlmIChjbnQgPiA0MDAwMDAwKSB7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJtYm94IHBvbGwgdGltZWQgb3V0XG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCkBAIC0xNzMsNTUgKzE3Myw1MiBAQAogICogSW5zZXJ0IHRoZSBtYWlsYm94IGFkZHJlc3MgaW50byB0aGUgZG9vcmJlbGwgaW4gdHdvIHN0ZXBzCiAgKiBQb2xscyBvbiB0aGUgbWJveCBkb29yYmVsbCB0aWxsIGEgY29tbWFuZCBjb21wbGV0aW9uIChvciBhIHRpbWVvdXQpIG9jY3VycwogICovCi1zdGF0aWMgaW50IGJlX21ib3hfZGJfcmluZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKQorc3RhdGljIGludCBiZV9tYm94X25vdGlmeShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgc3RhdHVzOwogCXUzMiB2YWwgPSAwOwotCXZvaWQgX19pb21lbSAqZGIgPSBjdHJsLT5kYiArIE1QVV9NQUlMQk9YX0RCX09GRlNFVDsKLQlzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW0gPSAmY3RybC0+bWJveF9tZW07CisJdm9pZCBfX2lvbWVtICpkYiA9IGFkYXB0ZXItPmRiICsgTVBVX01BSUxCT1hfREJfT0ZGU0VUOworCXN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbSA9ICZhZGFwdGVyLT5tYm94X21lbTsKIAlzdHJ1Y3QgYmVfbWNjX21haWxib3ggKm1ib3ggPSBtYm94X21lbS0+dmE7Ci0Jc3RydWN0IGJlX21jY19jcV9lbnRyeSAqY3FlID0gJm1ib3gtPmNxZTsKKwlzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCA9ICZtYm94LT5jb21wbDsKIAotCW1lbXNldChjcWUsIDAsIHNpemVvZigqY3FlKSk7CisJbWVtc2V0KGNvbXBsLCAwLCBzaXplb2YoKmNvbXBsKSk7CiAKLQl2YWwgJj0gfk1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLOwogCXZhbCB8PSBNUFVfTUFJTEJPWF9EQl9ISV9NQVNLOwogCS8qIGF0IGJpdHMgMiAtIDMxIHBsYWNlIG1ib3ggZG1hIGFkZHIgbXNiIGJpdHMgMzQgLSA2MyAqLwogCXZhbCB8PSAodXBwZXJfMzJfYml0cyhtYm94X21lbS0+ZG1hKSA+PiAyKSA8PCAyOwogCWlvd3JpdGUzMih2YWwsIGRiKTsKIAogCS8qIHdhaXQgZm9yIHJlYWR5IHRvIGJlIHNldCAqLwotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmVhZHlfd2FpdChkYik7CisJc3RhdHVzID0gYmVfbWJveF9kYl9yZWFkeV93YWl0KGFkYXB0ZXIsIGRiKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCXJldHVybiBzdGF0dXM7CiAKIAl2YWwgPSAwOwotCXZhbCAmPSB+TVBVX01BSUxCT1hfREJfUkRZX01BU0s7Ci0JdmFsICY9IH5NUFVfTUFJTEJPWF9EQl9ISV9NQVNLOwogCS8qIGF0IGJpdHMgMiAtIDMxIHBsYWNlIG1ib3ggZG1hIGFkZHIgbHNiIGJpdHMgNCAtIDMzICovCiAJdmFsIHw9ICh1MzIpKG1ib3hfbWVtLT5kbWEgPj4gNCkgPDwgMjsKIAlpb3dyaXRlMzIodmFsLCBkYik7CiAKLQlzdGF0dXMgPSBiZV9tYm94X2RiX3JlYWR5X3dhaXQoZGIpOworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmVhZHlfd2FpdChhZGFwdGVyLCBkYik7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlyZXR1cm4gc3RhdHVzOwogCiAJLyogQSBjcSBlbnRyeSBoYXMgYmVlbiBtYWRlIG5vdyAqLwotCWlmIChiZV9tY2NfY29tcGxfaXNfbmV3KGNxZSkpIHsKLQkJc3RhdHVzID0gYmVfbWNjX2NvbXBsX3Byb2Nlc3MoY3RybCwgJm1ib3gtPmNxZSk7Ci0JCWJlX21jY19jb21wbF91c2UoY3FlKTsKKwlpZiAoYmVfbWNjX2NvbXBsX2lzX25ldyhjb21wbCkpIHsKKwkJc3RhdHVzID0gYmVfbWNjX2NvbXBsX3Byb2Nlc3MoYWRhcHRlciwgJm1ib3gtPmNvbXBsKTsKKwkJYmVfbWNjX2NvbXBsX3VzZShjb21wbCk7CiAJCWlmIChzdGF0dXMpCiAJCQlyZXR1cm4gc3RhdHVzOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgImludmFsaWQgbWFpbGJveCBjb21wbGV0aW9uXG4iKTsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiaW52YWxpZCBtYWlsYm94IGNvbXBsZXRpb25cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJlX1BPU1Rfc3RhZ2VfZ2V0KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiAqc3RhZ2UpCitzdGF0aWMgaW50IGJlX1BPU1Rfc3RhZ2VfZ2V0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgKnN0YWdlKQogewotCXUzMiBzZW0gPSBpb3JlYWQzMihjdHJsLT5jc3IgKyBNUFVfRVBfU0VNQVBIT1JFX09GRlNFVCk7CisJdTMyIHNlbSA9IGlvcmVhZDMyKGFkYXB0ZXItPmNzciArIE1QVV9FUF9TRU1BUEhPUkVfT0ZGU0VUKTsKIAogCSpzdGFnZSA9IHNlbSAmIEVQX1NFTUFQSE9SRV9QT1NUX1NUQUdFX01BU0s7CiAJaWYgKChzZW0gPj4gRVBfU0VNQVBIT1JFX1BPU1RfRVJSX1NISUZUKSAmIEVQX1NFTUFQSE9SRV9QT1NUX0VSUl9NQVNLKQpAQCAtMjMwLDU0ICsyMjcsMTcgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmVfUE9TVF9zdGFnZV9wb2xsKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBwb2xsX3N0YWdlKQotewotCXUxNiBzdGFnZSwgY250LCBlcnJvcjsKLQlmb3IgKGNudCA9IDA7IGNudCA8IDUwMDA7IGNudCsrKSB7Ci0JCWVycm9yID0gYmVfUE9TVF9zdGFnZV9nZXQoY3RybCwgJnN0YWdlKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIC0xOwotCi0JCWlmIChzdGFnZSA9PSBwb2xsX3N0YWdlKQotCQkJYnJlYWs7Ci0JCXVkZWxheSgxMDAwKTsKLQl9Ci0JaWYgKHN0YWdlICE9IHBvbGxfc3RhZ2UpCi0JCXJldHVybiAtMTsKLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgYmVfY21kX1BPU1Qoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK2ludCBiZV9jbWRfUE9TVChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MTYgc3RhZ2UsIGVycm9yOwogCi0JZXJyb3IgPSBiZV9QT1NUX3N0YWdlX2dldChjdHJsLCAmc3RhZ2UpOwotCWlmIChlcnJvcikKLQkJZ290byBlcnI7Ci0KLQlpZiAoc3RhZ2UgPT0gUE9TVF9TVEFHRV9BUk1GV19SRFkpCi0JCXJldHVybiAwOwotCi0JaWYgKHN0YWdlICE9IFBPU1RfU1RBR0VfQVdBSVRJTkdfSE9TVF9SRFkpCi0JCWdvdG8gZXJyOwotCi0JLyogT24gYXdhaXRpbmcgaG9zdCByZHksIHJlc2V0IGFuZCBhZ2FpbiBwb2xsIG9uIGF3YWl0aW5nIGhvc3QgcmR5ICovCi0JaW93cml0ZTMyKFBPU1RfU1RBR0VfQkVfUkVTRVQsIGN0cmwtPmNzciArIE1QVV9FUF9TRU1BUEhPUkVfT0ZGU0VUKTsKLQllcnJvciA9IGJlX1BPU1Rfc3RhZ2VfcG9sbChjdHJsLCBQT1NUX1NUQUdFX0FXQUlUSU5HX0hPU1RfUkRZKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyOwotCi0JLyogTm93IGtpY2tvZmYgUE9TVCBhbmQgcG9sbCBvbiBhcm1mdyByZWFkeSAqLwotCWlvd3JpdGUzMihQT1NUX1NUQUdFX0hPU1RfUkRZLCBjdHJsLT5jc3IgKyBNUFVfRVBfU0VNQVBIT1JFX09GRlNFVCk7Ci0JZXJyb3IgPSBiZV9QT1NUX3N0YWdlX3BvbGwoY3RybCwgUE9TVF9TVEFHRV9BUk1GV19SRFkpOwotCWlmIChlcnJvcikKLQkJZ290byBlcnI7CisJZXJyb3IgPSBiZV9QT1NUX3N0YWdlX2dldChhZGFwdGVyLCAmc3RhZ2UpOworCWlmIChlcnJvciB8fCBzdGFnZSAhPSBQT1NUX1NUQUdFX0FSTUZXX1JEWSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJQT1NUIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLTE7CisJfQogCiAJcmV0dXJuIDA7Ci1lcnI6Ci0JcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBFUlJPUiwgc3RhZ2U9JWRcbiIsIHN0YWdlKTsKLQlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqZW1iZWRkZWRfcGF5bG9hZChzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiKQpAQCAtMzY3LDE2ICszMjcsMTYgQEAKIAlyZXR1cm4gd3JiOwogfQogCi1pbnQgYmVfY21kX2VxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAoraW50IGJlX2NtZF9lcV9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcSwgaW50IGVxX2RlbGF5KQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9lcV9jcmVhdGUgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlzdHJ1Y3QgYmVfY21kX3Jlc3BfZXFfY3JlYXRlICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZlcS0+ZG1hX21lbTsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKQEAgLTM4Nyw3ICszNDcsNyBAQAogCXJlcS0+bnVtX3BhZ2VzID0gIGNwdV90b19sZTE2KFBBR0VTXzRLX1NQQU5ORUQocV9tZW0tPnZhLCBxX21lbS0+c2l6ZSkpOwogCiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCBmdW5jLCByZXEtPmNvbnRleHQsCi0JCQljdHJsLT5wY2lfZnVuYyk7CisJCQliZV9wY2lfZnVuYyhhZGFwdGVyKSk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCB2YWxpZCwgcmVxLT5jb250ZXh0LCAxKTsKIAkvKiA0Ynl0ZSBlcWUqLwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfZXFfY29udGV4dCwgc2l6ZSwgcmVxLT5jb250ZXh0LCAwKTsKQEAgLTM5OSwyNCArMzU5LDI0IEBACiAKIAliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKIAlpZiAoIXN0YXR1cykgewogCQllcS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5lcV9pZCk7CiAJCWVxLT5jcmVhdGVkID0gdHJ1ZTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IGJlX2NtZF9tYWNfYWRkcl9xdWVyeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1OCAqbWFjX2FkZHIsCitpbnQgYmVfY21kX21hY19hZGRyX3F1ZXJ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjX2FkZHIsCiAJCQl1OCB0eXBlLCBib29sIHBlcm1hbmVudCwgdTMyIGlmX2hhbmRsZSkKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZhZGFwdGVyLT5tYm94X21lbSk7CiAJc3RydWN0IGJlX2NtZF9yZXFfbWFjX3F1ZXJ5ICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJc3RydWN0IGJlX2NtZF9yZXNwX21hY19xdWVyeSAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKQEAgLTQzMiwyMiArMzkyLDIyIEBACiAJCXJlcS0+cGVybWFuZW50ID0gMDsKIAl9CiAKLQlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoYWRhcHRlcik7CiAJaWYgKCFzdGF0dXMpCiAJCW1lbWNweShtYWNfYWRkciwgcmVzcC0+bWFjLmFkZHIsIEVUSF9BTEVOKTsKIAotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBiZV9jbWRfcG1hY19hZGQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTggKm1hY19hZGRyLAoraW50IGJlX2NtZF9wbWFjX2FkZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKm1hY19hZGRyLAogCQl1MzIgaWZfaWQsIHUzMiAqcG1hY19pZCkKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZhZGFwdGVyLT5tYm94X21lbSk7CiAJc3RydWN0IGJlX2NtZF9yZXFfcG1hY19hZGQgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKQEAgLTQ1OCwyMyArNDE4LDIzIEBACiAJcmVxLT5pZl9pZCA9IGNwdV90b19sZTMyKGlmX2lkKTsKIAltZW1jcHkocmVxLT5tYWNfYWRkcmVzcywgbWFjX2FkZHIsIEVUSF9BTEVOKTsKIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKIAlpZiAoIXN0YXR1cykgewogCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfcG1hY19hZGQgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJCSpwbWFjX2lkID0gbGUzMl90b19jcHUocmVzcC0+cG1hY19pZCk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IGJlX2NtZF9wbWFjX2RlbChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfaWQsIHUzMiBwbWFjX2lkKQoraW50IGJlX2NtZF9wbWFjX2RlbChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGlmX2lkLCB1MzIgcG1hY19pZCkKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZhZGFwdGVyLT5tYm94X21lbSk7CiAJc3RydWN0IGJlX2NtZF9yZXFfcG1hY19kZWwgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKQEAgLTQ4NSwyNCArNDQ1LDI0IEBACiAJcmVxLT5pZl9pZCA9IGNwdV90b19sZTMyKGlmX2lkKTsKIAlyZXEtPnBtYWNfaWQgPSBjcHVfdG9fbGUzMihwbWFjX2lkKTsKIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKLQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBiZV9jbWRfY3FfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCitpbnQgYmVfY21kX2NxX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsCiAJCWJvb2wgc29sX2V2dHMsIGJvb2wgbm9fZGVsYXksIGludCBjb2FsZXNjZV93bSkKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZhZGFwdGVyLT5tYm94X21lbSk7CiAJc3RydWN0IGJlX2NtZF9yZXFfY3FfY3JlYXRlICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJc3RydWN0IGJlX2NtZF9yZXNwX2NxX2NyZWF0ZSAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0gPSAmY3EtPmRtYV9tZW07CiAJdm9pZCAqY3R4dCA9ICZyZXEtPmNvbnRleHQ7CiAJaW50IHN0YXR1czsKIAotCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKIAogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CkBAIC01MjEsMTcgKzQ4MSwxNyBAQAogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgZXZlbnRhYmxlLCBjdHh0LCAxKTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGVxaWQsIGN0eHQsIGVxLT5pZCk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBhcm1lZCwgY3R4dCwgMSk7Ci0JQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBmdW5jLCBjdHh0LCBjdHJsLT5wY2lfZnVuYyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBmdW5jLCBjdHh0LCBiZV9wY2lfZnVuYyhhZGFwdGVyKSk7CiAJYmVfZHdzX2NwdV90b19sZShjdHh0LCBzaXplb2YocmVxLT5jb250ZXh0KSk7CiAKIAliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKIAlpZiAoIXN0YXR1cykgewogCQljcS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5jcV9pZCk7CiAJCWNxLT5jcmVhdGVkID0gdHJ1ZTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNTQ0LDE3ICs1MDQsMTcgQEAKIAlyZXR1cm4gbGVuX2VuY29kZWQ7CiB9CiAKLWludCBiZV9jbWRfbWNjcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKK2ludCBiZV9jbWRfbWNjcV9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjcSwKIAkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSkKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZhZGFwdGVyLT5tYm94X21lbSk7CiAJc3RydWN0IGJlX2NtZF9yZXFfbWNjX2NyZWF0ZSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZtY2NxLT5kbWFfbWVtOwogCXZvaWQgKmN0eHQgPSAmcmVxLT5jb250ZXh0OwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwpAQCAtNTY0LDcgKzUyNCw3IEBACiAKIAlyZXEtPm51bV9wYWdlcyA9IFBBR0VTXzRLX1NQQU5ORUQocV9tZW0tPnZhLCBxX21lbS0+c2l6ZSk7CiAKLQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX21jY19jb250ZXh0LCBmaWQsIGN0eHQsIGN0cmwtPnBjaV9mdW5jKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX21jY19jb250ZXh0LCBmaWQsIGN0eHQsIGJlX3BjaV9mdW5jKGFkYXB0ZXIpKTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX21jY19jb250ZXh0LCB2YWxpZCwgY3R4dCwgMSk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9tY2NfY29udGV4dCwgcmluZ19zaXplLCBjdHh0LAogCQliZV9lbmNvZGVkX3FfbGVuKG1jY3EtPmxlbikpOwpAQCAtNTc0LDI5ICs1MzQsMjkgQEAKIAogCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOwogCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOwogCWlmICghc3RhdHVzKSB7CiAJCXN0cnVjdCBiZV9jbWRfcmVzcF9tY2NfY3JlYXRlICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCQltY2NxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmlkKTsKIAkJbWNjcS0+Y3JlYXRlZCA9IHRydWU7CiAJfQotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IGJlX2NtZF90eHFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCitpbnQgYmVfY21kX3R4cV9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxLAogCQkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxKQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9ldGhfdHhfY3JlYXRlICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtID0gJnR4cS0+ZG1hX21lbTsKIAl2b2lkICpjdHh0ID0gJnJlcS0+Y29udGV4dDsKIAlpbnQgc3RhdHVzOwogCXUzMiBsZW5fZW5jb2RlZDsKIAotCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKIAogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CkBAIC02MTMsNyArNTczLDcgQEAKIAkJbGVuX2VuY29kZWQgPSAwOwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfdHhfY29udGV4dCwgdHhfcmluZ19zaXplLCBjdHh0LCBsZW5fZW5jb2RlZCk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF90eF9jb250ZXh0LCBwY2lfZnVuY19pZCwgY3R4dCwKLQkJCWN0cmwtPnBjaV9mdW5jKTsKKwkJCWJlX3BjaV9mdW5jKGFkYXB0ZXIpKTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3R4X2NvbnRleHQsIGN0eF92YWxpZCwgY3R4dCwgMSk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF90eF9jb250ZXh0LCBjcV9pZF9zZW5kLCBjdHh0LCBjcS0+aWQpOwogCkBAIC02MjEsMjcgKzU4MSwyNyBAQAogCiAJYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShyZXEtPnBhZ2VzLCBBUlJBWV9TSVpFKHJlcS0+cGFnZXMpLCBxX21lbSk7CiAKLQlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoYWRhcHRlcik7CiAJaWYgKCFzdGF0dXMpIHsKIAkJc3RydWN0IGJlX2NtZF9yZXNwX2V0aF90eF9jcmVhdGUgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJCXR4cS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5jaWQpOwogCQl0eHEtPmNyZWF0ZWQgPSB0cnVlOwogCX0KLQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBiZV9jbWRfcnhxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAoraW50IGJlX2NtZF9yeHFfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcnhxLCB1MTYgY3FfaWQsIHUxNiBmcmFnX3NpemUsCiAJCXUxNiBtYXhfZnJhbWVfc2l6ZSwgdTMyIGlmX2lkLCB1MzIgcnNzKQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9ldGhfcnhfY3JlYXRlICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtID0gJnJ4cS0+ZG1hX21lbTsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKQEAgLTY1NywyNyArNjE3LDI3IEBACiAJcmVxLT5tYXhfZnJhbWVfc2l6ZSA9IGNwdV90b19sZTE2KG1heF9mcmFtZV9zaXplKTsKIAlyZXEtPnJzc19xdWV1ZSA9IGNwdV90b19sZTMyKHJzcyk7CiAKLQlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoYWRhcHRlcik7CiAJaWYgKCFzdGF0dXMpIHsKIAkJc3RydWN0IGJlX2NtZF9yZXNwX2V0aF9yeF9jcmVhdGUgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJCXJ4cS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5pZCk7CiAJCXJ4cS0+Y3JlYXRlZCA9IHRydWU7CiAJfQotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAogLyogR2VuZXJpYyBkZXN0cm95ZXIgZnVuY3Rpb24gZm9yIGFsbCB0eXBlcyBvZiBxdWV1ZXMgKi8KLWludCBiZV9jbWRfcV9kZXN0cm95KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxLAoraW50IGJlX2NtZF9xX2Rlc3Ryb3koc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxLAogCQlpbnQgcXVldWVfdHlwZSkKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZhZGFwdGVyLT5tYm94X21lbSk7CiAJc3RydWN0IGJlX2NtZF9yZXFfcV9kZXN0cm95ICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJdTggc3Vic3lzID0gMCwgb3Bjb2RlID0gMDsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKQEAgLTcwNCwyOSArNjY0LDI3IEBACiAJCW9wY29kZSA9IE9QQ09ERV9DT01NT05fTUNDX0RFU1RST1k7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjpiYWQgUSB0eXBlIGluIFEgZGVzdHJveSBjbWRcbiIpOwotCQlzdGF0dXMgPSAtMTsKLQkJZ290byBlcnI7CisJCUJVRygpOwogCX0KIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBzdWJzeXMsIG9wY29kZSwgc2l6ZW9mKCpyZXEpKTsKIAlyZXEtPmlkID0gY3B1X3RvX2xlMTYocS0+aWQpOwogCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOwotZXJyOgotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOworCisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQogCiAvKiBDcmVhdGUgYW4gcnggZmlsdGVyaW5nIHBvbGljeSBjb25maWd1cmF0aW9uIG9uIGFuIGkvZiAqLwotaW50IGJlX2NtZF9pZl9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIGZsYWdzLCB1OCAqbWFjLAoraW50IGJlX2NtZF9pZl9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBmbGFncywgdTggKm1hYywKIAkJYm9vbCBwbWFjX2ludmFsaWQsIHUzMiAqaWZfaGFuZGxlLCB1MzIgKnBtYWNfaWQpCiB7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmYWRhcHRlci0+bWJveF9tZW0pOwogCXN0cnVjdCBiZV9jbWRfcmVxX2lmX2NyZWF0ZSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwpAQCAtNzM5LDcgKzY5Nyw3IEBACiAJaWYgKCFwbWFjX2ludmFsaWQpCiAJCW1lbWNweShyZXEtPm1hY19hZGRyLCBtYWMsIEVUSF9BTEVOKTsKIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKIAlpZiAoIXN0YXR1cykgewogCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfaWZfY3JlYXRlICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCQkqaWZfaGFuZGxlID0gbGUzMl90b19jcHUocmVzcC0+aW50ZXJmYWNlX2lkKTsKQEAgLTc0NywxNyArNzA1LDE3IEBACiAJCQkqcG1hY19pZCA9IGxlMzJfdG9fY3B1KHJlc3AtPnBtYWNfaWQpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBiZV9jbWRfaWZfZGVzdHJveShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaW50ZXJmYWNlX2lkKQoraW50IGJlX2NtZF9pZl9kZXN0cm95KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgaW50ZXJmYWNlX2lkKQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9pZl9kZXN0cm95ICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJaW50IHN0YXR1czsKIAotCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKIAogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CkBAIC03NjYsOSArNzI0LDkgQEAKIAkJT1BDT0RFX0NPTU1PTl9OVFdLX0lOVEVSRkFDRV9ERVNUUk9ZLCBzaXplb2YoKnJlcSkpOwogCiAJcmVxLT5pbnRlcmZhY2VfaWQgPSBjcHVfdG9fbGUzMihpbnRlcmZhY2VfaWQpOwotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKIAotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTc3NiwxNCArNzM0LDE0IEBACiAvKiBHZXQgc3RhdHMgaXMgYSBub24gZW1iZWRkZWQgY29tbWFuZDogdGhlIHJlcXVlc3QgaXMgbm90IGVtYmVkZGVkIGluc2lkZQogICogV1JCIGJ1dCBpcyBhIHNlcGFyYXRlIGRtYSBtZW1vcnkgYmxvY2sKICAqLwotaW50IGJlX2NtZF9nZXRfc3RhdHMoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX2RtYV9tZW0gKm5vbmVtYl9jbWQpCitpbnQgYmVfY21kX2dldF9zdGF0cyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGJlX2RtYV9tZW0gKm5vbmVtYl9jbWQpCiB7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmYWRhcHRlci0+bWJveF9tZW0pOwogCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9zdGF0cyAqcmVxID0gbm9uZW1iX2NtZC0+dmE7CiAJc3RydWN0IGJlX3NnZSAqc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CiAJaW50IHN0YXR1czsKIAotCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKIAogCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CkBAIC03OTYsMjQgKzc1NCwyNCBAQAogCXNnZS0+cGFfbG8gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLT5kbWEgJiAweEZGRkZGRkZGKTsKIAlzZ2UtPmxlbiA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQtPnNpemUpOwogCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOwogCWlmICghc3RhdHVzKSB7CiAJCXN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfc3RhdHMgKnJlc3AgPSBub25lbWJfY21kLT52YTsKIAkJYmVfZHdzX2xlX3RvX2NwdSgmcmVzcC0+aHdfc3RhdHMsIHNpemVvZihyZXNwLT5od19zdGF0cykpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBiZV9jbWRfbGlua19zdGF0dXNfcXVlcnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKK2ludCBiZV9jbWRfbGlua19zdGF0dXNfcXVlcnkoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlib29sICpsaW5rX3VwKQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9saW5rX3N0YXR1cyAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCiAJKmxpbmtfdXAgPSBmYWxzZTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwpAQCAtODIzLDI0ICs3ODEsMjQgQEAKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKIAkJT1BDT0RFX0NPTU1PTl9OVFdLX0xJTktfU1RBVFVTX1FVRVJZLCBzaXplb2YoKnJlcSkpOwogCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOwogCWlmICghc3RhdHVzKSB7CiAJCXN0cnVjdCBiZV9jbWRfcmVzcF9saW5rX3N0YXR1cyAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAkJaWYgKHJlc3AtPm1hY19zcGVlZCAhPSBQSFlfTElOS19TUEVFRF9aRVJPKQogCQkJKmxpbmtfdXAgPSB0cnVlOwogCX0KIAotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBiZV9jbWRfZ2V0X2Z3X3ZlcihzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBjaGFyICpmd192ZXIpCitpbnQgYmVfY21kX2dldF9md192ZXIoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmZ3X3ZlcikKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZhZGFwdGVyLT5tYm94X21lbSk7CiAJc3RydWN0IGJlX2NtZF9yZXFfZ2V0X2Z3X3ZlcnNpb24gKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKQEAgLTg0OCwyNCArODA2LDI0IEBACiAJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCiAJCU9QQ09ERV9DT01NT05fR0VUX0ZXX1ZFUlNJT04sIHNpemVvZigqcmVxKSk7CiAKLQlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoYWRhcHRlcik7CiAJaWYgKCFzdGF0dXMpIHsKIAkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9md192ZXJzaW9uICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCQlzdHJuY3B5KGZ3X3ZlciwgcmVzcC0+ZmlybXdhcmVfdmVyc2lvbl9zdHJpbmcsIEZXX1ZFUl9MRU4pOwogCX0KIAotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qIHNldCB0aGUgRVEgZGVsYXkgaW50ZXJ2YWwgb2YgYW4gRVEgdG8gc3BlY2lmaWVkIHZhbHVlICovCi1pbnQgYmVfY21kX21vZGlmeV9lcWQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIGVxX2lkLCB1MzIgZXFkKQoraW50IGJlX2NtZF9tb2RpZnlfZXFkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgZXFfaWQsIHUzMiBlcWQpCiB7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmYWRhcHRlci0+bWJveF9tZW0pOwogCXN0cnVjdCBiZV9jbWRfcmVxX21vZGlmeV9lcV9kZWxheSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwpAQCAtODc4LDIwICs4MzYsMjAgQEAKIAlyZXEtPmRlbGF5WzBdLnBoYXNlID0gMDsKIAlyZXEtPmRlbGF5WzBdLmRlbGF5X211bHRpcGxpZXIgPSBjcHVfdG9fbGUzMihlcWQpOwogCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOwogCi0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IGJlX2NtZF92bGFuX2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfaWQsIHUxNiAqdnRhZ19hcnJheSwKK2ludCBiZV9jbWRfdmxhbl9jb25maWcoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpZl9pZCwgdTE2ICp2dGFnX2FycmF5LAogCQkJdTMyIG51bSwgYm9vbCB1bnRhZ2dlZCwgYm9vbCBwcm9taXNjdW91cykKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZhZGFwdGVyLT5tYm94X21lbSk7CiAJc3RydWN0IGJlX2NtZF9yZXFfdmxhbl9jb25maWcgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKQEAgLTkwOCwyMSArODY2LDIxIEBACiAJCQlyZXEtPm51bV92bGFuICogc2l6ZW9mKHZ0YWdfYXJyYXlbMF0pKTsKIAl9CiAKLQlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoYWRhcHRlcik7CiAKLQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCiAvKiBVc2UgTUNDIGZvciB0aGlzIGNvbW1hbmQgYXMgaXQgbWF5IGJlIGNhbGxlZCBpbiBCSCBjb250ZXh0ICovCi1pbnQgYmVfY21kX3Byb21pc2N1b3VzX2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1OCBwb3J0X251bSwgYm9vbCBlbikKK2ludCBiZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCBwb3J0X251bSwgYm9vbCBlbikKIHsKIAlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOwogCXN0cnVjdCBiZV9jbWRfcmVxX3Byb21pc2N1b3VzX2NvbmZpZyAqcmVxOwogCi0Jc3Bpbl9sb2NrX2JoKCZjdHJsLT5tY2NfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CiAKLQl3cmIgPSB3cmJfZnJvbV9tY2MoJmN0cmwtPm1jY19vYmoucSk7CisJd3JiID0gd3JiX2Zyb21fbWNjKCZhZGFwdGVyLT5tY2Nfb2JqLnEpOwogCUJVR19PTighd3JiKTsKIAogCXJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKQEAgLTkzNyw5ICs4OTUsOSBAQAogCWVsc2UKIAkJcmVxLT5wb3J0MF9wcm9taXNjdW91cyA9IGVuOwogCi0JYmVfbWNjX25vdGlmeV93YWl0KGN0cmwpOworCWJlX21jY19ub3RpZnlfd2FpdChhZGFwdGVyKTsKIAotCXNwaW5fdW5sb2NrX2JoKCZjdHJsLT5tY2NfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTQ3LDE2ICs5MDUsMTYgQEAKICAqIFVzZSBNQ0MgZm9yIHRoaXMgY29tbWFuZCBhcyBpdCBtYXkgYmUgY2FsbGVkIGluIEJIIGNvbnRleHQKICAqIChtYyA9PSBOVUxMKSA9PiBtdWx0aWNhc3QgcHJvbWlzY291cwogICovCi1pbnQgYmVfY21kX211bHRpY2FzdF9zZXQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIGlmX2lkLAoraW50IGJlX2NtZF9tdWx0aWNhc3Rfc2V0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgaWZfaWQsCiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCwgdTMyIG1jX2NvdW50KQogewogI2RlZmluZSBCRV9NQVhfTUMJCTMyIC8qIHNldCBtY2FzdCBwcm9taXNjIGlmID4gMzIgKi8KIAlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOwogCXN0cnVjdCBiZV9jbWRfcmVxX21jYXN0X21hY19jb25maWcgKnJlcTsKIAotCXNwaW5fbG9ja19iaCgmY3RybC0+bWNjX2xvY2spOworCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOwogCi0Jd3JiID0gd3JiX2Zyb21fbWNjKCZjdHJsLT5tY2Nfb2JqLnEpOworCXdyYiA9IHdyYl9mcm9tX21jYygmYWRhcHRlci0+bWNjX29iai5xKTsKIAlCVUdfT04oIXdyYik7CiAKIAlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CkBAIC05NzksMjAgKzkzNywyMCBAQAogCQlyZXEtPnByb21pc2N1b3VzID0gMTsKIAl9CiAKLQliZV9tY2Nfbm90aWZ5X3dhaXQoY3RybCk7CisJYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOwogCi0Jc3Bpbl91bmxvY2tfYmgoJmN0cmwtPm1jY19sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBiZV9jbWRfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgdHhfZmMsIHUzMiByeF9mYykKK2ludCBiZV9jbWRfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIHR4X2ZjLCB1MzIgcnhfZmMpCiB7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmYWRhcHRlci0+bWJveF9tZW0pOwogCXN0cnVjdCBiZV9jbWRfcmVxX3NldF9mbG93X2NvbnRyb2wgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAKQEAgLTEwMDQsMTkgKzk2MiwxOSBAQAogCXJlcS0+dHhfZmxvd19jb250cm9sID0gY3B1X3RvX2xlMTYoKHUxNil0eF9mYyk7CiAJcmVxLT5yeF9mbG93X2NvbnRyb2wgPSBjcHVfdG9fbGUxNigodTE2KXJ4X2ZjKTsKIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKIAotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBiZV9jbWRfZ2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgKnR4X2ZjLCB1MzIgKnJ4X2ZjKQoraW50IGJlX2NtZF9nZXRfZmxvd19jb250cm9sKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgKnR4X2ZjLCB1MzIgKnJ4X2ZjKQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfZmxvd19jb250cm9sICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJaW50IHN0YXR1czsKIAotCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCkBAIC0xMDI1LDcgKzk4Myw3IEBACiAJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCiAJCU9QQ09ERV9DT01NT05fR0VUX0ZMT1dfQ09OVFJPTCwgc2l6ZW9mKCpyZXEpKTsKIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKIAlpZiAoIXN0YXR1cykgewogCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X2Zsb3dfY29udHJvbCAqcmVzcCA9CiAJCQkJCQllbWJlZGRlZF9wYXlsb2FkKHdyYik7CkBAIC0xMDMzLDE3ICs5OTEsMTcgQEAKIAkJKnJ4X2ZjID0gbGUxNl90b19jcHUocmVzcC0+cnhfZmxvd19jb250cm9sKTsKIAl9CiAKLQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1pbnQgYmVfY21kX3F1ZXJ5X2Z3X2NmZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgKnBvcnRfbnVtKQoraW50IGJlX2NtZF9xdWVyeV9md19jZmcoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqcG9ydF9udW0pCiB7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmYWRhcHRlci0+bWJveF9tZW0pOwogCXN0cnVjdCBiZV9jbWRfcmVxX3F1ZXJ5X2Z3X2NmZyAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCiAJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKIApAQCAtMTA1MiwxMiArMTAxMCw2MSBAQAogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAogCQlPUENPREVfQ09NTU9OX1FVRVJZX0ZJUk1XQVJFX0NPTkZJRywgc2l6ZW9mKCpyZXEpKTsKIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKIAlpZiAoIXN0YXR1cykgewogCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfcXVlcnlfZndfY2ZnICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCQkqcG9ydF9udW0gPSBsZTMyX3RvX2NwdShyZXNwLT5waHlzX3BvcnQpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfcmVzZXRfZnVuY3Rpb24oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOworCisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUocmVxLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJT1BDT0RFX0NPTU1PTl9GVU5DVElPTl9SRVNFVCwgc2l6ZW9mKCpyZXEpKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOworCisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF93cml0ZV9mbGFzaHJvbShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGJlX2RtYV9tZW0gKmNtZCwKKwkJCXUzMiBmbGFzaF90eXBlLCB1MzIgZmxhc2hfb3Bjb2RlLCB1MzIgYnVmX3NpemUpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3dyaXRlX2ZsYXNocm9tICpyZXEgPSBjbWQtPnZhOworCXN0cnVjdCBiZV9zZ2UgKnNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBjbWQtPnNpemUsIGZhbHNlLCAxKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX1dSSVRFX0ZMQVNIUk9NLCBjbWQtPnNpemUpOworCXNnZS0+cGFfaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKGNtZC0+ZG1hKSk7CisJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKGNtZC0+ZG1hICYgMHhGRkZGRkZGRik7CisJc2dlLT5sZW4gPSBjcHVfdG9fbGUzMihjbWQtPnNpemUpOworCisJcmVxLT5wYXJhbXMub3BfdHlwZSA9IGNwdV90b19sZTMyKGZsYXNoX3R5cGUpOworCXJlcS0+cGFyYW1zLm9wX2NvZGUgPSBjcHVfdG9fbGUzMihmbGFzaF9vcGNvZGUpOworCXJlcS0+cGFyYW1zLmRhdGFfYnVmX3NpemUgPSBjcHVfdG9fbGUzMihidWZfc2l6ZSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKKworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKaW5kZXggNzQ3NjI2ZC4uZmQ3MDI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaApAQCAtNjksNyArNjksNyBAQAogI2RlZmluZSBDUUVfU1RBVFVTX0VYVERfTUFTSwkJMHhGRkZGCiAjZGVmaW5lIENRRV9TVEFUVVNfRVhURF9TSElGVAkJMAkvKiBiaXRzIDAgLSAxNSAqLwogCi1zdHJ1Y3QgYmVfbWNjX2NxX2VudHJ5IHsKK3N0cnVjdCBiZV9tY2NfY29tcGwgewogCXUzMiBzdGF0dXM7CQkvKiBkd29yZCAwICovCiAJdTMyIHRhZzA7CQkvKiBkd29yZCAxICovCiAJdTMyIHRhZzE7CQkvKiBkd29yZCAyICovCkBAIC0xMDYsNyArMTA2LDcgQEAKIAogc3RydWN0IGJlX21jY19tYWlsYm94IHsKIAlzdHJ1Y3QgYmVfbWNjX3dyYiB3cmI7Ci0Jc3RydWN0IGJlX21jY19jcV9lbnRyeSBjcWU7CisJc3RydWN0IGJlX21jY19jb21wbCBjb21wbDsKIH07CiAKICNkZWZpbmUgQ01EX1NVQlNZU1RFTV9DT01NT04JMHgxCkBAIC0xMTcsNiArMTE3LDcgQEAKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX01VTFRJQ0FTVF9TRVQJCTMKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX1ZMQU5fQ09ORklHICAJCTQKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX0xJTktfU1RBVFVTX1FVRVJZCQk1CisjZGVmaW5lIE9QQ09ERV9DT01NT05fV1JJVEVfRkxBU0hST00JCQk3CiAjZGVmaW5lIE9QQ09ERV9DT01NT05fQ1FfQ1JFQVRFCQkJCTEyCiAjZGVmaW5lIE9QQ09ERV9DT01NT05fRVFfQ1JFQVRFCQkJCTEzCiAjZGVmaW5lIE9QQ09ERV9DT01NT05fTUNDX0NSRUFURSAgICAgICAgCQkyMQpAQCAtMTM1LDYgKzEzNiw3IEBACiAjZGVmaW5lIE9QQ09ERV9DT01NT05fUVVFUllfRklSTVdBUkVfQ09ORklHCQk1OAogI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfUE1BQ19BREQJCQk1OQogI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfUE1BQ19ERUwJCQk2MAorI2RlZmluZSBPUENPREVfQ09NTU9OX0ZVTkNUSU9OX1JFU0VUCQkJNjEKIAogI2RlZmluZSBPUENPREVfRVRIX0FDUElfQ09ORklHCQkJCTIKICNkZWZpbmUgT1BDT0RFX0VUSF9QUk9NSVNDVU9VUwkJCQkzCkBAIC02MzQsNyArNjM2LDYgQEAKIH0gX19wYWNrZWQ7CiAKIC8qKioqKioqKioqKioqKioqKioqKiBHZXQgRlcgVmVyc2lvbiAqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBGV19WRVJfTEVOCQkJMzIKIHN0cnVjdCBiZV9jbWRfcmVxX2dldF9md192ZXJzaW9uIHsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOwogCXU4IHJzdmQwW0ZXX1ZFUl9MRU5dOwpAQCAtNjkzLDU2ICs2OTQsNzQgQEAKIAl1MzIgYmVfY29uZmlnX251bWJlcjsKIAl1MzIgYXNpY19yZXZpc2lvbjsKIAl1MzIgcGh5c19wb3J0OwotCXUzMiBmdW5jdGlvbl9tb2RlOworCXUzMiBmdW5jdGlvbl9jYXA7CiAJdTMyIHJzdmRbMjZdOwogfTsKIAotZXh0ZXJuIGludCBiZV9wY2lfZm51bV9nZXQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7Ci1leHRlcm4gaW50IGJlX2NtZF9QT1NUKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOwotZXh0ZXJuIGludCBiZV9jbWRfbWFjX2FkZHJfcXVlcnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTggKm1hY19hZGRyLAorLyoqKioqKioqKioqKioqKioqKiBGaXJtd2FyZSBGbGFzaCAqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgZmxhc2hyb21fcGFyYW1zIHsKKwl1MzIgb3BfY29kZTsKKwl1MzIgb3BfdHlwZTsKKwl1MzIgZGF0YV9idWZfc2l6ZTsKKwl1MzIgb2Zmc2V0OworCXU4IGRhdGFfYnVmWzRdOworfTsKKworc3RydWN0IGJlX2NtZF93cml0ZV9mbGFzaHJvbSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwlzdHJ1Y3QgZmxhc2hyb21fcGFyYW1zIHBhcmFtczsKK307CisKK2V4dGVybiBpbnQgYmVfcGNpX2ZudW1fZ2V0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiBpbnQgYmVfY21kX1BPU1Qoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIGludCBiZV9jbWRfbWFjX2FkZHJfcXVlcnkoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWNfYWRkciwKIAkJCXU4IHR5cGUsIGJvb2wgcGVybWFuZW50LCB1MzIgaWZfaGFuZGxlKTsKLWV4dGVybiBpbnQgYmVfY21kX3BtYWNfYWRkKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHU4ICptYWNfYWRkciwKK2V4dGVybiBpbnQgYmVfY21kX3BtYWNfYWRkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjX2FkZHIsCiAJCQl1MzIgaWZfaWQsIHUzMiAqcG1hY19pZCk7Ci1leHRlcm4gaW50IGJlX2NtZF9wbWFjX2RlbChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfaWQsIHUzMiBwbWFjX2lkKTsKLWV4dGVybiBpbnQgYmVfY21kX2lmX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfZmxhZ3MsIHU4ICptYWMsCitleHRlcm4gaW50IGJlX2NtZF9wbWFjX2RlbChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGlmX2lkLCB1MzIgcG1hY19pZCk7CitleHRlcm4gaW50IGJlX2NtZF9pZl9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpZl9mbGFncywgdTggKm1hYywKIAkJCWJvb2wgcG1hY19pbnZhbGlkLCB1MzIgKmlmX2hhbmRsZSwgdTMyICpwbWFjX2lkKTsKLWV4dGVybiBpbnQgYmVfY21kX2lmX2Rlc3Ryb3koc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIGlmX2hhbmRsZSk7Ci1leHRlcm4gaW50IGJlX2NtZF9lcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKK2V4dGVybiBpbnQgYmVfY21kX2lmX2Rlc3Ryb3koc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpZl9oYW5kbGUpOworZXh0ZXJuIGludCBiZV9jbWRfZXFfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLCBpbnQgZXFfZGVsYXkpOwotZXh0ZXJuIGludCBiZV9jbWRfY3FfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCitleHRlcm4gaW50IGJlX2NtZF9jcV9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3EsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcSwKIAkJCWJvb2wgc29sX2V2dHMsIGJvb2wgbm9fZGVsYXksCiAJCQlpbnQgbnVtX2NxZV9kbWFfY29hbGVzY2UpOwotZXh0ZXJuIGludCBiZV9jbWRfbWNjcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKK2V4dGVybiBpbnQgYmVfY21kX21jY3FfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKm1jY3EsCiAJCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3EpOwotZXh0ZXJuIGludCBiZV9jbWRfdHhxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorZXh0ZXJuIGludCBiZV9jbWRfdHhxX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eHEsCiAJCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3EpOwotZXh0ZXJuIGludCBiZV9jbWRfcnhxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorZXh0ZXJuIGludCBiZV9jbWRfcnhxX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpyeHEsIHUxNiBjcV9pZCwKIAkJCXUxNiBmcmFnX3NpemUsIHUxNiBtYXhfZnJhbWVfc2l6ZSwgdTMyIGlmX2lkLAogCQkJdTMyIHJzcyk7Ci1leHRlcm4gaW50IGJlX2NtZF9xX2Rlc3Ryb3koc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEsCitleHRlcm4gaW50IGJlX2NtZF9xX2Rlc3Ryb3koc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxLAogCQkJaW50IHR5cGUpOwotZXh0ZXJuIGludCBiZV9jbWRfbGlua19zdGF0dXNfcXVlcnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKK2V4dGVybiBpbnQgYmVfY21kX2xpbmtfc3RhdHVzX3F1ZXJ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJYm9vbCAqbGlua191cCk7Ci1leHRlcm4gaW50IGJlX2NtZF9yZXNldChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKLWV4dGVybiBpbnQgYmVfY21kX2dldF9zdGF0cyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorZXh0ZXJuIGludCBiZV9jbWRfcmVzZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIGludCBiZV9jbWRfZ2V0X3N0YXRzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJc3RydWN0IGJlX2RtYV9tZW0gKm5vbmVtYl9jbWQpOwotZXh0ZXJuIGludCBiZV9jbWRfZ2V0X2Z3X3ZlcihzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBjaGFyICpmd192ZXIpOworZXh0ZXJuIGludCBiZV9jbWRfZ2V0X2Z3X3ZlcihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgY2hhciAqZndfdmVyKTsKIAotZXh0ZXJuIGludCBiZV9jbWRfbW9kaWZ5X2VxZChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgZXFfaWQsIHUzMiBlcWQpOwotZXh0ZXJuIGludCBiZV9jbWRfdmxhbl9jb25maWcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyIGlmX2lkLAorZXh0ZXJuIGludCBiZV9jbWRfbW9kaWZ5X2VxZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGVxX2lkLCB1MzIgZXFkKTsKK2V4dGVybiBpbnQgYmVfY21kX3ZsYW5fY29uZmlnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgaWZfaWQsCiAJCQl1MTYgKnZ0YWdfYXJyYXksIHUzMiBudW0sIGJvb2wgdW50YWdnZWQsCiAJCQlib29sIHByb21pc2N1b3VzKTsKLWV4dGVybiBpbnQgYmVfY21kX3Byb21pc2N1b3VzX2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorZXh0ZXJuIGludCBiZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJdTggcG9ydF9udW0sIGJvb2wgZW4pOwotZXh0ZXJuIGludCBiZV9jbWRfbXVsdGljYXN0X3NldChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfaWQsCitleHRlcm4gaW50IGJlX2NtZF9tdWx0aWNhc3Rfc2V0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgaWZfaWQsCiAJCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3QsIHUzMiBtY19jb3VudCk7Ci1leHRlcm4gaW50IGJlX2NtZF9zZXRfZmxvd19jb250cm9sKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCitleHRlcm4gaW50IGJlX2NtZF9zZXRfZmxvd19jb250cm9sKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJdTMyIHR4X2ZjLCB1MzIgcnhfZmMpOwotZXh0ZXJuIGludCBiZV9jbWRfZ2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorZXh0ZXJuIGludCBiZV9jbWRfZ2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXUzMiAqdHhfZmMsIHUzMiAqcnhfZmMpOwotZXh0ZXJuIGludCBiZV9jbWRfcXVlcnlfZndfY2ZnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiAqcG9ydF9udW0pOwotZXh0ZXJuIHZvaWQgYmVfcHJvY2Vzc19tY2Moc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7CitleHRlcm4gaW50IGJlX2NtZF9xdWVyeV9md19jZmcoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqcG9ydF9udW0pOworZXh0ZXJuIGludCBiZV9jbWRfcmVzZXRfZnVuY3Rpb24oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHZvaWQgYmVfcHJvY2Vzc19tY2Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIGludCBiZV9jbWRfd3JpdGVfZmxhc2hyb20oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqY21kLCB1MzIgZmxhc2hfb3BlciwKKwkJCXUzMiBmbGFzaF9vcGNvZGUsIHUzMiBidWZfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKaW5kZXggY2NjYzU0MS4uMTE0NDVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYwpAQCAtMTYsNiArMTYsNyBAQAogICovCiAKICNpbmNsdWRlICJiZS5oIgorI2luY2x1ZGUgImJlX2NtZHMuaCIKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAKIHN0cnVjdCBiZV9ldGh0b29sX3N0YXQgewpAQCAtMTI3LDggKzEyOCw2IEBACiAJc3RydWN0IGJlX2VxX29iaiAqcnhfZXEgPSAmYWRhcHRlci0+cnhfZXE7CiAJc3RydWN0IGJlX2VxX29iaiAqdHhfZXEgPSAmYWRhcHRlci0+dHhfZXE7CiAKLQljb2FsZXNjZS0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBhZGFwdGVyLT5tYXhfcnhfY29hbDsKLQogCWNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2VjcyA9IHJ4X2VxLT5jdXJfZXFkOwogCWNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19oaWdoID0gcnhfZXEtPm1heF9lcWQ7CiAJY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2xvdyA9IHJ4X2VxLT5taW5fZXFkOwpAQCAtMTQ0LDE0ICsxNDMsMTIgQEAKIH0KIAogLyoKLSAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHNldCBpbnRlcnJ1cCBjb2FsZXNjaW5nIGRlbGF5ICphcyB3ZWxsIGFzKgotICogdGhlIG51bWJlciBvZiBwa3RzIHRvIGNvYWxlc2NlIGZvciBMUk8uCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBzZXQgaW50ZXJydXAgY29hbGVzY2luZyBkZWxheQogICovCiBzdGF0aWMgaW50CiBiZV9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWxlc2NlKQogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CiAJc3RydWN0IGJlX2VxX29iaiAqcnhfZXEgPSAmYWRhcHRlci0+cnhfZXE7CiAJc3RydWN0IGJlX2VxX29iaiAqdHhfZXEgPSAmYWRhcHRlci0+dHhfZXE7CiAJdTMyIHR4X21heCwgdHhfbWluLCB0eF9jdXI7CkBAIC0xNjEsMTAgKzE1OCw2IEBACiAJaWYgKGNvYWxlc2NlLT51c2VfYWRhcHRpdmVfdHhfY29hbGVzY2UgPT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlhZGFwdGVyLT5tYXhfcnhfY29hbCA9IGNvYWxlc2NlLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lczsKLQlpZiAoYWRhcHRlci0+bWF4X3J4X2NvYWwgPiBCRV9NQVhfRlJBR1NfUEVSX0ZSQU1FKQotCQlhZGFwdGVyLT5tYXhfcnhfY29hbCA9IEJFX01BWF9GUkFHU19QRVJfRlJBTUU7Ci0KIAkvKiBpZiBBSUMgaXMgYmVpbmcgdHVybmVkIG9uIG5vdywgc3RhcnQgd2l0aCBhbiBFUUQgb2YgMCAqLwogCWlmIChyeF9lcS0+ZW5hYmxlX2FpYyA9PSAwICYmCiAJCWNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPT0gMSkgewpAQCAtMTgzLDcgKzE3Niw3IEBACiAJaWYgKHR4X2N1ciA+IEJFX01BWF9FUUQpCiAJCXR4X2N1ciA9IEJFX01BWF9FUUQ7CiAJaWYgKHR4X2VxLT5jdXJfZXFkICE9IHR4X2N1cikgewotCQlzdGF0dXMgPSBiZV9jbWRfbW9kaWZ5X2VxZChjdHJsLCB0eF9lcS0+cS5pZCwgdHhfY3VyKTsKKwkJc3RhdHVzID0gYmVfY21kX21vZGlmeV9lcWQoYWRhcHRlciwgdHhfZXEtPnEuaWQsIHR4X2N1cik7CiAJCWlmICghc3RhdHVzKQogCQkJdHhfZXEtPmN1cl9lcWQgPSB0eF9jdXI7CiAJfQpAQCAtMjAzLDcgKzE5Niw4IEBACiAJCWlmIChyeF9jdXIgPiBCRV9NQVhfRVFEKQogCQkJcnhfY3VyID0gQkVfTUFYX0VRRDsKIAkJaWYgKHJ4X2VxLT5jdXJfZXFkICE9IHJ4X2N1cikgewotCQkJc3RhdHVzID0gYmVfY21kX21vZGlmeV9lcWQoY3RybCwgcnhfZXEtPnEuaWQsIHJ4X2N1cik7CisJCQlzdGF0dXMgPSBiZV9jbWRfbW9kaWZ5X2VxZChhZGFwdGVyLCByeF9lcS0+cS5pZCwKKwkJCQkJcnhfY3VyKTsKIAkJCWlmICghc3RhdHVzKQogCQkJCXJ4X2VxLT5jdXJfZXFkID0gcnhfY3VyOwogCQl9CkBAIC0zMTcsOCArMzExLDcgQEAKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQliZV9jbWRfZ2V0X2Zsb3dfY29udHJvbCgmYWRhcHRlci0+Y3RybCwgJmVjbWQtPnR4X3BhdXNlLAotCQkmZWNtZC0+cnhfcGF1c2UpOworCWJlX2NtZF9nZXRfZmxvd19jb250cm9sKGFkYXB0ZXIsICZlY21kLT50eF9wYXVzZSwgJmVjbWQtPnJ4X3BhdXNlKTsKIAllY21kLT5hdXRvbmVnID0gMDsKIH0KIApAQCAtMzMxLDcgKzMyNCw3IEBACiAJaWYgKGVjbWQtPmF1dG9uZWcgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdGF0dXMgPSBiZV9jbWRfc2V0X2Zsb3dfY29udHJvbCgmYWRhcHRlci0+Y3RybCwgZWNtZC0+dHhfcGF1c2UsCisJc3RhdHVzID0gYmVfY21kX3NldF9mbG93X2NvbnRyb2woYWRhcHRlciwgZWNtZC0+dHhfcGF1c2UsCiAJCQllY21kLT5yeF9wYXVzZSk7CiAJaWYgKCFzdGF0dXMpCiAJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJQYXVzZSBwYXJhbSBzZXQgZmFpbGVkLlxuIik7CkBAIC0zMzksNyArMzMyLDIxIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzID0geworc3RhdGljIGludAorYmVfZG9fZmxhc2goc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZmxhc2ggKmVmbCkKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJY2hhciBmaWxlX25hbWVbRVRIVE9PTF9GTEFTSF9NQVhfRklMRU5BTUVdOworCXUzMiByZWdpb247CisKKwlmaWxlX25hbWVbRVRIVE9PTF9GTEFTSF9NQVhfRklMRU5BTUUgLSAxXSA9IDA7CisJc3RyY3B5KGZpbGVfbmFtZSwgZWZsLT5kYXRhKTsKKwlyZWdpb24gPSBlZmwtPnJlZ2lvbjsKKworCXJldHVybiBiZV9sb2FkX2Z3KGFkYXB0ZXIsIGZpbGVfbmFtZSk7Cit9CisKK2NvbnN0IHN0cnVjdCBldGh0b29sX29wcyBiZV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzID0gYmVfZ2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyA9IGJlX2dldF9kcnZpbmZvLAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCkBAIC0zNTksNCArMzY2LDUgQEAKIAkuZ2V0X3N0cmluZ3MgPSBiZV9nZXRfc3RhdF9zdHJpbmdzLAogCS5nZXRfc3RhdHNfY291bnQgPSBiZV9nZXRfc3RhdHNfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gYmVfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmZsYXNoX2RldmljZSA9IGJlX2RvX2ZsYXNoLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ody5oCmluZGV4IDI5YzMzYzcuLmEzMzk0YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfaHcuaApAQCAtNTEsOSArNTEsNiBAQAogICogd2l0aCB0aGUgT1MuCiAgKi8KICNkZWZpbmUgTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSwkoMSA8PCAyOSkgLyogYml0IDI5ICovCi0vKiBQQ0kgcGh5c2ljYWwgZnVuY3Rpb24gbnVtYmVyICovCi0jZGVmaW5lIE1FTUJBUl9DVFJMX0lOVF9DVFJMX1BGVU5DX01BU0sgIAkweDcgCS8qIGJpdHMgMjYgLSAyOCAqLwotI2RlZmluZSBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9QRlVOQ19TSElGVAkyNgogCiAvKioqKioqKioqIElTUjAgUmVnaXN0ZXIgb2Zmc2V0ICoqKioqKioqKiovCiAjZGVmaW5lIENFVl9JU1IwX09GRlNFVCAJCQkweEMxOApAQCAtMjA3LDcgKzIwNCw3IEBACiAJdTggbnVtZnJhZ3NbM107CQkvKiBkd29yZCAxICovCiAJdTggcnNzX2ZsdXNoOwkJLyogZHdvcmQgMiAqLwogCXU4IGNhc3RfZW5jWzJdOwkJLyogZHdvcmQgMiAqLwotCXU4IHFucTsJCQkvKiBkd29yZCAyICovCisJdTggdnRtOwkJCS8qIGR3b3JkIDIgKi8KIAl1OCByc3NfYmFuazsJCS8qIGR3b3JkIDIgKi8KIAl1OCByc3ZkMVsyM107CQkvKiBkd29yZCAyICovCiAJdTggbHJvX3BrdDsJCS8qIGR3b3JkIDIgKi8KQEAgLTIxOSwzICsyMTYsODYgQEAKIHN0cnVjdCBiZV9ldGhfcnhfY29tcGwgewogCXUzMiBkd1s0XTsKIH07CisKKy8qIEZsYXNocm9tIHJlbGF0ZWQgZGVzY3JpcHRvcnMgKi8KKyNkZWZpbmUgSU1BR0VfVFlQRV9GSVJNV0FSRQkJMTYwCisjZGVmaW5lIElNQUdFX1RZUEVfQk9PVENPREUJCTIyNAorI2RlZmluZSBJTUFHRV9UWVBFX09QVElPTlJPTQkJMzIKKworI2RlZmluZSBOVU1fRkxBU0hESVJfRU5UUklFUwkJMzIKKworI2RlZmluZSBGTEFTSFJPTV9UWVBFX0lTQ1NJX0FDVElWRQkwCisjZGVmaW5lIEZMQVNIUk9NX1RZUEVfQklPUwkJMgorI2RlZmluZSBGTEFTSFJPTV9UWVBFX1BYRV9CSU9TCQkzCisjZGVmaW5lIEZMQVNIUk9NX1RZUEVfRkNPRV9CSU9TCQk4CisjZGVmaW5lIEZMQVNIUk9NX1RZUEVfSVNDU0lfQkFDS1VQCTkKKyNkZWZpbmUgRkxBU0hST01fVFlQRV9GQ09FX0ZXX0FDVElWRQkxMAorI2RlZmluZSBGTEFTSFJPTV9UWVBFX0ZDT0VfRldfQkFDS1VQIAkxMQorCisjZGVmaW5lIEZMQVNIUk9NX09QRVJfRkxBU0gJCTEKKyNkZWZpbmUgRkxBU0hST01fT1BFUl9TQVZFCQkyCisKKyNkZWZpbmUgRkxBU0hfSU1BR0VfTUFYX1NJWkUgICAgICAgICAgICAoMTMxMDcyMCkgLyogTWF4IGZpcm13YXJlIGltYWdlIHNpemUgKi8KKyNkZWZpbmUgRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRSAgICAgICAoMjYyMTQ0KSAgLyogTWF4IE9QVElPTiBST00gaW1hZ2Ugc3ogKi8KKworLyogT2Zmc2V0cyBmb3IgY29tcG9uZW50cyBvbiBGbGFzaC4gKi8KKyNkZWZpbmUgRkxBU0hfaVNDU0lfUFJJTUFSWV9JTUFHRV9TVEFSVCAoMTA0ODU3NikKKyNkZWZpbmUgRkxBU0hfaVNDU0lfQkFDS1VQX0lNQUdFX1NUQVJUICAoMjM1OTI5NikKKyNkZWZpbmUgRkxBU0hfRkNvRV9QUklNQVJZX0lNQUdFX1NUQVJUICAoMzY3MDAxNikKKyNkZWZpbmUgRkxBU0hfRkNvRV9CQUNLVVBfSU1BR0VfU1RBUlQgICAoNDk4MDczNikKKyNkZWZpbmUgRkxBU0hfaVNDU0lfQklPU19TVEFSVCAgICAgICAgICAoNzM0MDAzMikKKyNkZWZpbmUgRkxBU0hfUFhFX0JJT1NfU1RBUlQgICAgICAgICAgICAoNzg2NDMyMCkKKyNkZWZpbmUgRkxBU0hfRkNvRV9CSU9TX1NUQVJUICAgICAgICAgICAoNTI0Mjg4KQorCitzdHJ1Y3QgY29udHJvbGxlcl9pZCB7CisJdTMyIHZlbmRvcjsKKwl1MzIgZGV2aWNlOworCXUzMiBzdWJ2ZW5kb3I7CisJdTMyIHN1YmRldmljZTsKK307CisKK3N0cnVjdCBmbGFzaF9maWxlX2hkciB7CisJdTggc2lnblszMl07CisJdTMyIGNrc3VtOworCXUzMiBhbnRpZG90ZTsKKwlzdHJ1Y3QgY29udHJvbGxlcl9pZCBjb250X2lkOworCXUzMiBmaWxlX2xlbjsKKwl1MzIgY2h1bmtfbnVtOworCXUzMiB0b3RhbF9jaHVua3M7CisJdTMyIG51bV9pbWdzOworCXU4IGJ1aWxkWzI0XTsKK307CisKK3N0cnVjdCBmbGFzaF9zZWN0aW9uX2hkciB7CisJdTMyIGZvcm1hdF9yZXY7CisJdTMyIGNrc3VtOworCXUzMiBhbnRpZG90ZTsKKwl1MzIgYnVpbGRfbm87CisJdTggaWRfc3RyaW5nWzY0XTsKKwl1MzIgYWN0aXZlX2VudHJ5X21hc2s7CisJdTMyIHZhbGlkX2VudHJ5X21hc2s7CisJdTMyIG9yZ19jb250ZW50X21hc2s7CisJdTMyIHJzdmQwOworCXUzMiByc3ZkMTsKKwl1MzIgcnN2ZDI7CisJdTMyIHJzdmQzOworCXUzMiByc3ZkNDsKK307CisKK3N0cnVjdCBmbGFzaF9zZWN0aW9uX2VudHJ5IHsKKwl1MzIgdHlwZTsKKwl1MzIgb2Zmc2V0OworCXUzMiBwYWRfc2l6ZTsKKwl1MzIgaW1hZ2Vfc2l6ZTsKKwl1MzIgY2tzdW07CisJdTMyIGVudHJ5X3BvaW50OworCXUzMiByc3ZkMDsKKwl1MzIgcnN2ZDE7CisJdTggdmVyX2RhdGFbMzJdOworfTsKKworc3RydWN0IGZsYXNoX3NlY3Rpb25faW5mbyB7CisJdTggY29va2llWzMyXTsKKwlzdHJ1Y3QgZmxhc2hfc2VjdGlvbl9oZHIgZnNlY19oZHI7CisJc3RydWN0IGZsYXNoX3NlY3Rpb25fZW50cnkgZnNlY19lbnRyeVszMl07Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCmluZGV4IGRlYTMxNTUuLmNlMTFiYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKQEAgLTE2LDYgKzE2LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiYmUuaCIKKyNpbmNsdWRlICJiZV9jbWRzLmgiCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVIpOwpAQCAtNjAsNDAgKzYxLDM5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJlX2ludHJfc2V0KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIGJvb2wgZW5hYmxlKQorc3RhdGljIHZvaWQgYmVfaW50cl9zZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZW5hYmxlKQogewotCXU4IF9faW9tZW0gKmFkZHIgPSBjdHJsLT5wY2ljZmcgKyBQQ0lDRkdfTUVNQkFSX0NUUkxfSU5UX0NUUkxfT0ZGU0VUOworCXU4IF9faW9tZW0gKmFkZHIgPSBhZGFwdGVyLT5wY2ljZmcgKyBQQ0lDRkdfTUVNQkFSX0NUUkxfSU5UX0NUUkxfT0ZGU0VUOwogCXUzMiByZWcgPSBpb3JlYWQzMihhZGRyKTsKIAl1MzIgZW5hYmxlZCA9IHJlZyAmIE1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7Ci0JaWYgKCFlbmFibGVkICYmIGVuYWJsZSkgeworCisJaWYgKCFlbmFibGVkICYmIGVuYWJsZSkKIAkJcmVnIHw9IE1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7Ci0JfSBlbHNlIGlmIChlbmFibGVkICYmICFlbmFibGUpIHsKKwllbHNlIGlmIChlbmFibGVkICYmICFlbmFibGUpCiAJCXJlZyAmPSB+TUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCQkiOiBiYWQgdmFsdWUgaW4gbWVtYmFyX2ludF9jdHJsIHJlZz0weCV4XG4iLCByZWcpOworCWVsc2UKIAkJcmV0dXJuOwotCX0KKwogCWlvd3JpdGUzMihyZWcsIGFkZHIpOwogfQogCi1zdGF0aWMgdm9pZCBiZV9yeHFfbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBxaWQsIHUxNiBwb3N0ZWQpCitzdGF0aWMgdm9pZCBiZV9yeHFfbm90aWZ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgcWlkLCB1MTYgcG9zdGVkKQogewogCXUzMiB2YWwgPSAwOwogCXZhbCB8PSBxaWQgJiBEQl9SUV9SSU5HX0lEX01BU0s7CiAJdmFsIHw9IHBvc3RlZCA8PCBEQl9SUV9OVU1fUE9TVEVEX1NISUZUOwotCWlvd3JpdGUzMih2YWwsIGN0cmwtPmRiICsgREJfUlFfT0ZGU0VUKTsKKwlpb3dyaXRlMzIodmFsLCBhZGFwdGVyLT5kYiArIERCX1JRX09GRlNFVCk7CiB9CiAKLXN0YXRpYyB2b2lkIGJlX3R4cV9ub3RpZnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTE2IHFpZCwgdTE2IHBvc3RlZCkKK3N0YXRpYyB2b2lkIGJlX3R4cV9ub3RpZnkoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBxaWQsIHUxNiBwb3N0ZWQpCiB7CiAJdTMyIHZhbCA9IDA7CiAJdmFsIHw9IHFpZCAmIERCX1RYVUxQX1JJTkdfSURfTUFTSzsKIAl2YWwgfD0gKHBvc3RlZCAmIERCX1RYVUxQX05VTV9QT1NURURfTUFTSykgPDwgREJfVFhVTFBfTlVNX1BPU1RFRF9TSElGVDsKLQlpb3dyaXRlMzIodmFsLCBjdHJsLT5kYiArIERCX1RYVUxQMV9PRkZTRVQpOworCWlvd3JpdGUzMih2YWwsIGFkYXB0ZXItPmRiICsgREJfVFhVTFAxX09GRlNFVCk7CiB9CiAKLXN0YXRpYyB2b2lkIGJlX2VxX25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MTYgcWlkLAorc3RhdGljIHZvaWQgYmVfZXFfbm90aWZ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgcWlkLAogCQlib29sIGFybSwgYm9vbCBjbGVhcl9pbnQsIHUxNiBudW1fcG9wcGVkKQogewogCXUzMiB2YWwgPSAwOwpAQCAtMTA0LDM3ICsxMDQsMzEgQEAKIAkJdmFsIHw9IDEgPDwgREJfRVFfQ0xSX1NISUZUOwogCXZhbCB8PSAxIDw8IERCX0VRX0VWTlRfU0hJRlQ7CiAJdmFsIHw9IG51bV9wb3BwZWQgPDwgREJfRVFfTlVNX1BPUFBFRF9TSElGVDsKLQlpb3dyaXRlMzIodmFsLCBjdHJsLT5kYiArIERCX0VRX09GRlNFVCk7CisJaW93cml0ZTMyKHZhbCwgYWRhcHRlci0+ZGIgKyBEQl9FUV9PRkZTRVQpOwogfQogCi12b2lkIGJlX2NxX25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MTYgcWlkLAotCQlib29sIGFybSwgdTE2IG51bV9wb3BwZWQpCit2b2lkIGJlX2NxX25vdGlmeShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTE2IHFpZCwgYm9vbCBhcm0sIHUxNiBudW1fcG9wcGVkKQogewogCXUzMiB2YWwgPSAwOwogCXZhbCB8PSBxaWQgJiBEQl9DUV9SSU5HX0lEX01BU0s7CiAJaWYgKGFybSkKIAkJdmFsIHw9IDEgPDwgREJfQ1FfUkVBUk1fU0hJRlQ7CiAJdmFsIHw9IG51bV9wb3BwZWQgPDwgREJfQ1FfTlVNX1BPUFBFRF9TSElGVDsKLQlpb3dyaXRlMzIodmFsLCBjdHJsLT5kYiArIERCX0NRX09GRlNFVCk7CisJaW93cml0ZTMyKHZhbCwgYWRhcHRlci0+ZGIgKyBEQl9DUV9PRkZTRVQpOwogfQogCi0KIHN0YXRpYyBpbnQgYmVfbWFjX2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci0JCXN0YXR1cyA9IGJlX2NtZF9wbWFjX2RlbCgmYWRhcHRlci0+Y3RybCwgYWRhcHRlci0+aWZfaGFuZGxlLAotCQkJCWFkYXB0ZXItPnBtYWNfaWQpOwotCQlpZiAoc3RhdHVzKQotCQkJcmV0dXJuIHN0YXR1czsKKwlzdGF0dXMgPSBiZV9jbWRfcG1hY19kZWwoYWRhcHRlciwgYWRhcHRlci0+aWZfaGFuZGxlLCBhZGFwdGVyLT5wbWFjX2lkKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOwogCi0JCXN0YXR1cyA9IGJlX2NtZF9wbWFjX2FkZCgmYWRhcHRlci0+Y3RybCwgKHU4ICopYWRkci0+c2FfZGF0YSwKLQkJCQlhZGFwdGVyLT5pZl9oYW5kbGUsICZhZGFwdGVyLT5wbWFjX2lkKTsKLQl9Ci0KKwlzdGF0dXMgPSBiZV9jbWRfcG1hY19hZGQoYWRhcHRlciwgKHU4ICopYWRkci0+c2FfZGF0YSwKKwkJCWFkYXB0ZXItPmlmX2hhbmRsZSwgJmFkYXB0ZXItPnBtYWNfaWQpOwogCWlmICghc3RhdHVzKQogCQltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKQEAgLTIxNCw5ICsyMDgsOCBAQAogCWRldl9zdGF0cy0+dHhfd2luZG93X2Vycm9ycyA9IDA7CiB9CiAKLXZvaWQgYmVfbGlua19zdGF0dXNfdXBkYXRlKHZvaWQgKmN0eHQsIGJvb2wgbGlua191cCkKK3ZvaWQgYmVfbGlua19zdGF0dXNfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBib29sIGxpbmtfdXApCiB7Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjdHh0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAKIAkvKiBJZiBsaW5rIGNhbWUgdXAgb3Igd2VudCBkb3duICovCkBAIC0yMzcsNyArMjMwLDYgQEAKIC8qIFVwZGF0ZSB0aGUgRVEgZGVsYXkgbiBCRSBiYXNlZCBvbiB0aGUgUlggZnJhZ3MgY29uc3VtZWQgLyBzZWMgKi8KIHN0YXRpYyB2b2lkIGJlX3J4X2VxZF91cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwogCXN0cnVjdCBiZV9lcV9vYmogKnJ4X2VxID0gJmFkYXB0ZXItPnJ4X2VxOwogCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzOwogCXVsb25nIG5vdyA9IGppZmZpZXM7CkBAIC0yNzAsNyArMjYyLDcgQEAKIAlpZiAoZXFkIDwgMTApCiAJCWVxZCA9IDA7CiAJaWYgKGVxZCAhPSByeF9lcS0+Y3VyX2VxZCkKLQkJYmVfY21kX21vZGlmeV9lcWQoY3RybCwgcnhfZXEtPnEuaWQsIGVxZCk7CisJCWJlX2NtZF9tb2RpZnlfZXFkKGFkYXB0ZXIsIHJ4X2VxLT5xLmlkLCBlcWQpOwogCiAJcnhfZXEtPmN1cl9lcWQgPSBlcWQ7CiB9CkBAIC0zOTMsMTUgKzM4NSwxOSBAQAogCXN0cnVjdCBiZV9ldGhfd3JiICp3cmI7CiAJc3RydWN0IGJlX2V0aF9oZHJfd3JiICpoZHI7CiAKLQlhdG9taWNfYWRkKHdyYl9jbnQsICZ0eHEtPnVzZWQpOwogCWhkciA9IHF1ZXVlX2hlYWRfbm9kZSh0eHEpOworCWF0b21pY19hZGQod3JiX2NudCwgJnR4cS0+dXNlZCk7CiAJcXVldWVfaGVhZF9pbmModHhxKTsKIAorCWlmIChza2JfZG1hX21hcCgmcGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlRYIERNQSBtYXBwaW5nIGZhaWxlZFxuIik7CisJCXJldHVybiAwOworCX0KKwogCWlmIChza2ItPmxlbiA+IHNrYi0+ZGF0YV9sZW4pIHsKIAkJaW50IGxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKLQkJYnVzYWRkciA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgbGVuLAotCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CiAJCXdyYiA9IHF1ZXVlX2hlYWRfbm9kZSh0eHEpOworCQlidXNhZGRyID0gc2tiX3NoaW5mbyhza2IpLT5kbWFfaGVhZDsKIAkJd3JiX2ZpbGwod3JiLCBidXNhZGRyLCBsZW4pOwogCQliZV9kd3NfY3B1X3RvX2xlKHdyYiwgc2l6ZW9mKCp3cmIpKTsKIAkJcXVldWVfaGVhZF9pbmModHhxKTsKQEAgLTQxMSw5ICs0MDcsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKIAkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZyA9CiAJCQkmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKLQkJYnVzYWRkciA9IHBjaV9tYXBfcGFnZShwZGV2LCBmcmFnLT5wYWdlLAotCQkJCSAgICAgICBmcmFnLT5wYWdlX29mZnNldCwKLQkJCQkgICAgICAgZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJYnVzYWRkciA9IHNrYl9zaGluZm8oc2tiKS0+ZG1hX21hcHNbaV07CiAJCXdyYiA9IHF1ZXVlX2hlYWRfbm9kZSh0eHEpOwogCQl3cmJfZmlsbCh3cmIsIGJ1c2FkZHIsIGZyYWctPnNpemUpOwogCQliZV9kd3NfY3B1X3RvX2xlKHdyYiwgc2l6ZW9mKCp3cmIpKTsKQEAgLTQzNSw3ICs0MzAsOSBAQAogCXJldHVybiBjb3BpZWQ7CiB9CiAKLXN0YXRpYyBpbnQgYmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGJlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKKwogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgYmVfdHhfb2JqICp0eF9vYmogPSAmYWRhcHRlci0+dHhfb2JqOwpAQCAtNDQ3LDIzICs0NDQsMjggQEAKIAl3cmJfY250ID0gd3JiX2NudF9mb3Jfc2tiKHNrYiwgJmR1bW15X3dyYik7CiAKIAljb3BpZWQgPSBtYWtlX3R4X3dyYnMoYWRhcHRlciwgc2tiLCB3cmJfY250LCBkdW1teV93cmIpOworCWlmIChjb3BpZWQpIHsKKwkJLyogcmVjb3JkIHRoZSBzZW50IHNrYiBpbiB0aGUgc2VudF9za2IgdGFibGUgKi8KKwkJQlVHX09OKHR4X29iai0+c2VudF9za2JfbGlzdFtzdGFydF0pOworCQl0eF9vYmotPnNlbnRfc2tiX2xpc3Rbc3RhcnRdID0gc2tiOwogCi0JLyogcmVjb3JkIHRoZSBzZW50IHNrYiBpbiB0aGUgc2VudF9za2IgdGFibGUgKi8KLQlCVUdfT04odHhfb2JqLT5zZW50X3NrYl9saXN0W3N0YXJ0XSk7Ci0JdHhfb2JqLT5zZW50X3NrYl9saXN0W3N0YXJ0XSA9IHNrYjsKKwkJLyogRW5zdXJlIHR4cSBoYXMgc3BhY2UgZm9yIHRoZSBuZXh0IHNrYjsgRWxzZSBzdG9wIHRoZSBxdWV1ZQorCQkgKiAqQkVGT1JFKiByaW5naW5nIHRoZSB0eCBkb29yYmVsbCwgc28gdGhhdCB3ZSBzZXJpYWx6ZSB0aGUKKwkJICogdHggY29tcGxzIG9mIHRoZSBjdXJyZW50IHRyYW5zbWl0IHdoaWNoJ2xsIHdha2UgdXAgdGhlIHF1ZXVlCisJCSAqLworCQlpZiAoKEJFX01BWF9UWF9GUkFHX0NPVU5UICsgYXRvbWljX3JlYWQoJnR4cS0+dXNlZCkpID49CisJCQkJCQkJCXR4cS0+bGVuKSB7CisJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCQlzdG9wcGVkID0gdHJ1ZTsKKwkJfQogCi0JLyogRW5zdXJlIHRoYXQgdHhxIGhhcyBzcGFjZSBmb3IgdGhlIG5leHQgc2tiOyBFbHNlIHN0b3AgdGhlIHF1ZXVlCi0JICogKkJFRk9SRSogcmluZ2luZyB0aGUgdHggZG9vcmJlbGwsIHNvIHRoYXQgd2Ugc2VyaWFsemUgdGhlCi0JICogdHggY29tcGxzIG9mIHRoZSBjdXJyZW50IHRyYW5zbWl0IHdoaWNoJ2xsIHdha2UgdXAgdGhlIHF1ZXVlCi0JICovCi0JaWYgKChCRV9NQVhfVFhfRlJBR19DT1VOVCArIGF0b21pY19yZWFkKCZ0eHEtPnVzZWQpKSA+PSB0eHEtPmxlbikgewotCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0JCXN0b3BwZWQgPSB0cnVlOworCQliZV90eHFfbm90aWZ5KGFkYXB0ZXIsIHR4cS0+aWQsIHdyYl9jbnQpOworCisJCWJlX3R4X3N0YXRzX3VwZGF0ZShhZGFwdGVyLCB3cmJfY250LCBjb3BpZWQsIHN0b3BwZWQpOworCX0gZWxzZSB7CisJCXR4cS0+aGVhZCA9IHN0YXJ0OworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0KLQotCWJlX3R4cV9ub3RpZnkoJmFkYXB0ZXItPmN0cmwsIHR4cS0+aWQsIHdyYl9jbnQpOwotCi0JYmVfdHhfc3RhdHNfdXBkYXRlKGFkYXB0ZXIsIHdyYl9jbnQsIGNvcGllZCwgc3RvcHBlZCk7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtNTAyLDEwICs1MDQsMTAgQEAKIAkJCQludGFncysrOwogCQkJfQogCQl9Ci0JCWJlX2NtZF92bGFuX2NvbmZpZygmYWRhcHRlci0+Y3RybCwgYWRhcHRlci0+aWZfaGFuZGxlLAorCQliZV9jbWRfdmxhbl9jb25maWcoYWRhcHRlciwgYWRhcHRlci0+aWZfaGFuZGxlLAogCQkJdnRhZywgbnRhZ3MsIDEsIDApOwogCX0gZWxzZSB7Ci0JCWJlX2NtZF92bGFuX2NvbmZpZygmYWRhcHRlci0+Y3RybCwgYWRhcHRlci0+aWZfaGFuZGxlLAorCQliZV9jbWRfdmxhbl9jb25maWcoYWRhcHRlciwgYWRhcHRlci0+aWZfaGFuZGxlLAogCQkJTlVMTCwgMCwgMSwgMSk7CiAJfQogfQpAQCAtNTE1LDEzICs1MTcsMTIgQEAKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGJlX2VxX29iaiAqcnhfZXEgPSAmYWRhcHRlci0+cnhfZXE7CiAJc3RydWN0IGJlX2VxX29iaiAqdHhfZXEgPSAmYWRhcHRlci0+dHhfZXE7Ci0Jc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwogCi0JYmVfZXFfbm90aWZ5KGN0cmwsIHJ4X2VxLT5xLmlkLCBmYWxzZSwgZmFsc2UsIDApOwotCWJlX2VxX25vdGlmeShjdHJsLCB0eF9lcS0+cS5pZCwgZmFsc2UsIGZhbHNlLCAwKTsKKwliZV9lcV9ub3RpZnkoYWRhcHRlciwgcnhfZXEtPnEuaWQsIGZhbHNlLCBmYWxzZSwgMCk7CisJYmVfZXFfbm90aWZ5KGFkYXB0ZXIsIHR4X2VxLT5xLmlkLCBmYWxzZSwgZmFsc2UsIDApOwogCWFkYXB0ZXItPnZsYW5fZ3JwID0gZ3JwOwotCWJlX2VxX25vdGlmeShjdHJsLCByeF9lcS0+cS5pZCwgdHJ1ZSwgZmFsc2UsIDApOwotCWJlX2VxX25vdGlmeShjdHJsLCB0eF9lcS0+cS5pZCwgdHJ1ZSwgZmFsc2UsIDApOworCWJlX2VxX25vdGlmeShhZGFwdGVyLCByeF9lcS0+cS5pZCwgdHJ1ZSwgZmFsc2UsIDApOworCWJlX2VxX25vdGlmeShhZGFwdGVyLCB0eF9lcS0+cS5pZCwgdHJ1ZSwgZmFsc2UsIDApOwogfQogCiBzdGF0aWMgdm9pZCBiZV92bGFuX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKQEAgLTU0OCwxMCArNTQ5LDkgQEAKIHN0YXRpYyB2b2lkIGJlX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CiAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Ci0JCWJlX2NtZF9wcm9taXNjdW91c19jb25maWcoY3RybCwgYWRhcHRlci0+cG9ydF9udW0sIDEpOworCQliZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnRfbnVtLCAxKTsKIAkJYWRhcHRlci0+cHJvbWlzY3VvdXMgPSB0cnVlOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtNTU5LDE1ICs1NTksMTUgQEAKIAkvKiBCRSB3YXMgcHJldmlvdXNseSBpbiBwcm9taXNjb3VzIG1vZGU7IGRpc2FibGUgaXQgKi8KIAlpZiAoYWRhcHRlci0+cHJvbWlzY3VvdXMpIHsKIAkJYWRhcHRlci0+cHJvbWlzY3VvdXMgPSBmYWxzZTsKLQkJYmVfY21kX3Byb21pc2N1b3VzX2NvbmZpZyhjdHJsLCBhZGFwdGVyLT5wb3J0X251bSwgMCk7CisJCWJlX2NtZF9wcm9taXNjdW91c19jb25maWcoYWRhcHRlciwgYWRhcHRlci0+cG9ydF9udW0sIDApOwogCX0KIAogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCWJlX2NtZF9tdWx0aWNhc3Rfc2V0KGN0cmwsIGFkYXB0ZXItPmlmX2hhbmRsZSwgTlVMTCwgMCk7CisJCWJlX2NtZF9tdWx0aWNhc3Rfc2V0KGFkYXB0ZXIsIGFkYXB0ZXItPmlmX2hhbmRsZSwgTlVMTCwgMCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQliZV9jbWRfbXVsdGljYXN0X3NldChjdHJsLCBhZGFwdGVyLT5pZl9oYW5kbGUsIG5ldGRldi0+bWNfbGlzdCwKKwliZV9jbWRfbXVsdGljYXN0X3NldChhZGFwdGVyLCBhZGFwdGVyLT5pZl9oYW5kbGUsIG5ldGRldi0+bWNfbGlzdCwKIAkJbmV0ZGV2LT5tY19jb3VudCk7CiBkb25lOgogCXJldHVybjsKQEAgLTc0Miw3ICs3NDIsNyBAQAogCXJldHVybjsKIH0KIAotLyogUHJvY2VzcyB0aGUgUlggY29tcGxldGlvbiBpbmRpY2F0ZWQgYnkgcnhjcCB3aGVuIExSTyBpcyBkaXNhYmxlZCAqLworLyogUHJvY2VzcyB0aGUgUlggY29tcGxldGlvbiBpbmRpY2F0ZWQgYnkgcnhjcCB3aGVuIEdSTyBpcyBkaXNhYmxlZCAqLwogc3RhdGljIHZvaWQgYmVfcnhfY29tcGxfcHJvY2VzcyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXN0cnVjdCBiZV9ldGhfcnhfY29tcGwgKnJ4Y3ApCiB7CkBAIC03ODQsMTggKzc4NCwxNyBAQAogCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCX0KIAotCWFkYXB0ZXItPm5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0KIAlyZXR1cm47CiB9CiAKLS8qIFByb2Nlc3MgdGhlIFJYIGNvbXBsZXRpb24gaW5kaWNhdGVkIGJ5IHJ4Y3Agd2hlbiBMUk8gaXMgZW5hYmxlZCAqLwotc3RhdGljIHZvaWQgYmVfcnhfY29tcGxfcHJvY2Vzc19scm8oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisvKiBQcm9jZXNzIHRoZSBSWCBjb21wbGV0aW9uIGluZGljYXRlZCBieSByeGNwIHdoZW4gR1JPIGlzIGVuYWJsZWQgKi8KK3N0YXRpYyB2b2lkIGJlX3J4X2NvbXBsX3Byb2Nlc3NfZ3JvKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJc3RydWN0IGJlX2V0aF9yeF9jb21wbCAqcnhjcCkKIHsKIAlzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICpwYWdlX2luZm87Ci0Jc3RydWN0IHNrYl9mcmFnX3N0cnVjdCByeF9mcmFnc1tCRV9NQVhfRlJBR1NfUEVSX0ZSQU1FXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcnhxID0gJmFkYXB0ZXItPnJ4X29iai5xOworCXN0cnVjdCBiZV9lcV9vYmogKmVxX29iaiA9ICAmYWRhcHRlci0+cnhfZXE7CiAJdTMyIG51bV9yY3ZkLCBwa3Rfc2l6ZSwgcmVtYWluaW5nLCB2bGFuZiwgY3Vycl9mcmFnX2xlbjsKIAl1MTYgaSwgcnhxX2lkeCA9IDAsIHZpZCwgajsKIApAQCAtODA0LDYgKzgwMywxMiBAQAogCXZsYW5mID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIHZ0cCwgcnhjcCk7CiAJcnhxX2lkeCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBmcmFnbmR4LCByeGNwKTsKIAorCXNrYiA9IG5hcGlfZ2V0X2ZyYWdzKCZlcV9vYmotPm5hcGkpOworCWlmICghc2tiKSB7CisJCWJlX3J4X2NvbXBsX2Rpc2NhcmQoYWRhcHRlciwgcnhjcCk7CisJCXJldHVybjsKKwl9CisKIAlyZW1haW5pbmcgPSBwa3Rfc2l6ZTsKIAlmb3IgKGkgPSAwLCBqID0gLTE7IGkgPCBudW1fcmN2ZDsgaSsrKSB7CiAJCXBhZ2VfaW5mbyA9IGdldF9yeF9wYWdlX2luZm8oYWRhcHRlciwgcnhxX2lkeCk7CkBAIC04MTQsMTMgKzgxOSwxNCBAQAogCQlpZiAoaSA9PSAwIHx8IHBhZ2VfaW5mby0+cGFnZV9vZmZzZXQgPT0gMCkgewogCQkJLyogRmlyc3QgZnJhZyBvciBGcmVzaCBwYWdlICovCiAJCQlqKys7Ci0JCQlyeF9mcmFnc1tqXS5wYWdlID0gcGFnZV9pbmZvLT5wYWdlOwotCQkJcnhfZnJhZ3Nbal0ucGFnZV9vZmZzZXQgPSBwYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0OwotCQkJcnhfZnJhZ3Nbal0uc2l6ZSA9IDA7CisJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2pdLnBhZ2UgPSBwYWdlX2luZm8tPnBhZ2U7CisJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2pdLnBhZ2Vfb2Zmc2V0ID0KKwkJCQkJCQlwYWdlX2luZm8tPnBhZ2Vfb2Zmc2V0OworCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tqXS5zaXplID0gMDsKIAkJfSBlbHNlIHsKIAkJCXB1dF9wYWdlKHBhZ2VfaW5mby0+cGFnZSk7CiAJCX0KLQkJcnhfZnJhZ3Nbal0uc2l6ZSArPSBjdXJyX2ZyYWdfbGVuOworCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2pdLnNpemUgKz0gY3Vycl9mcmFnX2xlbjsKIAogCQlyZW1haW5pbmcgLT0gY3Vycl9mcmFnX2xlbjsKIAkJaW5kZXhfaW5jKCZyeHFfaWR4LCByeHEtPmxlbik7CkBAIC04MjgsOSArODM0LDE0IEBACiAJfQogCUJVR19PTihqID4gTUFYX1NLQl9GUkFHUyk7CiAKKwlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID0gaiArIDE7CisJc2tiLT5sZW4gPSBwa3Rfc2l6ZTsKKwlza2ItPmRhdGFfbGVuID0gcGt0X3NpemU7CisJc2tiLT50cnVlc2l6ZSArPSBwa3Rfc2l6ZTsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCiAJaWYgKGxpa2VseSghdmxhbmYpKSB7Ci0JCWxyb19yZWNlaXZlX2ZyYWdzKCZhZGFwdGVyLT5yeF9vYmoubHJvX21nciwgcnhfZnJhZ3MsIHBrdF9zaXplLAotCQkJCXBrdF9zaXplLCBOVUxMLCAwKTsKKwkJbmFwaV9ncm9fZnJhZ3MoJmVxX29iai0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJdmlkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIHZsYW5fdGFnLCByeGNwKTsKIAkJdmlkID0gYmUxNl90b19jcHUodmlkKTsKQEAgLTgzOCw5ICs4NDksNyBAQAogCQlpZiAoIWFkYXB0ZXItPnZsYW5fZ3JwIHx8IGFkYXB0ZXItPm51bV92bGFucyA9PSAwKQogCQkJcmV0dXJuOwogCi0JCWxyb192bGFuX2h3YWNjZWxfcmVjZWl2ZV9mcmFncygmYWRhcHRlci0+cnhfb2JqLmxyb19tZ3IsCi0JCQlyeF9mcmFncywgcGt0X3NpemUsIHBrdF9zaXplLCBhZGFwdGVyLT52bGFuX2dycCwKLQkJCXZpZCwgTlVMTCwgMCk7CisJCXZsYW5fZ3JvX2ZyYWdzKCZlcV9vYmotPm5hcGksIGFkYXB0ZXItPnZsYW5fZ3JwLCB2aWQpOwogCX0KIAogCWJlX3J4X3N0YXRzX3VwZGF0ZShhZGFwdGVyLCBwa3Rfc2l6ZSwgbnVtX3JjdmQpOwpAQCAtOTMxLDcgKzk0MCw3IEBACiAKIAlpZiAocG9zdGVkKSB7CiAJCWF0b21pY19hZGQocG9zdGVkLCAmcnhxLT51c2VkKTsKLQkJYmVfcnhxX25vdGlmeSgmYWRhcHRlci0+Y3RybCwgcnhxLT5pZCwgcG9zdGVkKTsKKwkJYmVfcnhxX25vdGlmeShhZGFwdGVyLCByeHEtPmlkLCBwb3N0ZWQpOwogCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJnJ4cS0+dXNlZCkgPT0gMCkgewogCQkvKiBMZXQgYmVfd29ya2VyIHJlcGxlbmlzaCB3aGVuIG1lbW9yeSBpcyBhdmFpbGFibGUgKi8KIAkJYWRhcHRlci0+cnhfcG9zdF9zdGFydmVkID0gdHJ1ZTsKQEAgLTk1OCwxMCArOTY3LDggQEAKIHN0YXRpYyB2b2lkIGJlX3R4X2NvbXBsX3Byb2Nlc3Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBsYXN0X2luZGV4KQogewogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eHEgPSAmYWRhcHRlci0+dHhfb2JqLnE7Ci0Jc3RydWN0IGJlX2V0aF93cmIgKndyYjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnNlbnRfc2ticyA9IGFkYXB0ZXItPnR4X29iai5zZW50X3NrYl9saXN0OwogCXN0cnVjdCBza19idWZmICpzZW50X3NrYjsKLQl1NjQgYnVzYWRkcjsKIAl1MTYgY3VyX2luZGV4LCBudW1fd3JicyA9IDA7CiAKIAljdXJfaW5kZXggPSB0eHEtPnRhaWw7CkBAIC05NzEsMjIgKzk3OCw2NSBAQAogCiAJZG8gewogCQljdXJfaW5kZXggPSB0eHEtPnRhaWw7Ci0JCXdyYiA9IHF1ZXVlX3RhaWxfbm9kZSh0eHEpOwotCQliZV9kd3NfbGVfdG9fY3B1KHdyYiwgc2l6ZW9mKCp3cmIpKTsKLQkJYnVzYWRkciA9ICgodTY0KXdyYi0+ZnJhZ19wYV9oaSA8PCAzMikgfCAodTY0KXdyYi0+ZnJhZ19wYV9sbzsKLQkJaWYgKGJ1c2FkZHIgIT0gMCkgewotCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LCBidXNhZGRyLAotCQkJCXdyYi0+ZnJhZ19sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQl9CiAJCW51bV93cmJzKys7CiAJCXF1ZXVlX3RhaWxfaW5jKHR4cSk7CiAJfSB3aGlsZSAoY3VyX2luZGV4ICE9IGxhc3RfaW5kZXgpOwogCiAJYXRvbWljX3N1YihudW1fd3JicywgJnR4cS0+dXNlZCk7Ci0KKwlza2JfZG1hX3VubWFwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIHNlbnRfc2tiLCBETUFfVE9fREVWSUNFKTsKIAlrZnJlZV9za2Ioc2VudF9za2IpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBiZV9lcV9lbnRyeSAqZXZlbnRfZ2V0KHN0cnVjdCBiZV9lcV9vYmogKmVxX29iaikKK3sKKwlzdHJ1Y3QgYmVfZXFfZW50cnkgKmVxZSA9IHF1ZXVlX3RhaWxfbm9kZSgmZXFfb2JqLT5xKTsKKworCWlmICghZXFlLT5ldnQpCisJCXJldHVybiBOVUxMOworCisJZXFlLT5ldnQgPSBsZTMyX3RvX2NwdShlcWUtPmV2dCk7CisJcXVldWVfdGFpbF9pbmMoJmVxX29iai0+cSk7CisJcmV0dXJuIGVxZTsKK30KKworc3RhdGljIGludCBldmVudF9oYW5kbGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQlzdHJ1Y3QgYmVfZXFfb2JqICplcV9vYmopCit7CisJc3RydWN0IGJlX2VxX2VudHJ5ICplcWU7CisJdTE2IG51bSA9IDA7CisKKwl3aGlsZSAoKGVxZSA9IGV2ZW50X2dldChlcV9vYmopKSAhPSBOVUxMKSB7CisJCWVxZS0+ZXZ0ID0gMDsKKwkJbnVtKys7CisJfQorCisJLyogRGVhbCB3aXRoIGFueSBzcHVyaW91cyBpbnRlcnJ1cHRzIHRoYXQgY29tZQorCSAqIHdpdGhvdXQgZXZlbnRzCisJICovCisJYmVfZXFfbm90aWZ5KGFkYXB0ZXIsIGVxX29iai0+cS5pZCwgdHJ1ZSwgdHJ1ZSwgbnVtKTsKKwlpZiAobnVtKQorCQluYXBpX3NjaGVkdWxlKCZlcV9vYmotPm5hcGkpOworCisJcmV0dXJuIG51bTsKK30KKworLyogSnVzdCByZWFkIGFuZCBub3RpZnkgZXZlbnRzIHdpdGhvdXQgcHJvY2Vzc2luZyB0aGVtLgorICogVXNlZCBhdCB0aGUgdGltZSBvZiBkZXN0cm95aW5nIGV2ZW50IHF1ZXVlcyAqLworc3RhdGljIHZvaWQgYmVfZXFfY2xlYW4oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQlzdHJ1Y3QgYmVfZXFfb2JqICplcV9vYmopCit7CisJc3RydWN0IGJlX2VxX2VudHJ5ICplcWU7CisJdTE2IG51bSA9IDA7CisKKwl3aGlsZSAoKGVxZSA9IGV2ZW50X2dldChlcV9vYmopKSAhPSBOVUxMKSB7CisJCWVxZS0+ZXZ0ID0gMDsKKwkJbnVtKys7CisJfQorCisJaWYgKG51bSkKKwkJYmVfZXFfbm90aWZ5KGFkYXB0ZXIsIGVxX29iai0+cS5pZCwgZmFsc2UsIHRydWUsIG51bSk7Cit9CisKIHN0YXRpYyB2b2lkIGJlX3J4X3FfY2xlYW4oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyAqcGFnZV9pbmZvOwpAQCAtOTk5LDEyICsxMDQ5LDEyIEBACiAJd2hpbGUgKChyeGNwID0gYmVfcnhfY29tcGxfZ2V0KGFkYXB0ZXIpKSAhPSBOVUxMKSB7CiAJCWJlX3J4X2NvbXBsX2Rpc2NhcmQoYWRhcHRlciwgcnhjcCk7CiAJCWJlX3J4X2NvbXBsX3Jlc2V0KHJ4Y3ApOwotCQliZV9jcV9ub3RpZnkoJmFkYXB0ZXItPmN0cmwsIHJ4X2NxLT5pZCwgdHJ1ZSwgMSk7CisJCWJlX2NxX25vdGlmeShhZGFwdGVyLCByeF9jcS0+aWQsIHRydWUsIDEpOwogCX0KIAogCS8qIFRoZW4gZnJlZSBwb3N0ZWQgcnggYnVmZmVyIHRoYXQgd2VyZSBub3QgdXNlZCAqLwogCXRhaWwgPSAocnhxLT5oZWFkICsgcnhxLT5sZW4gLSBhdG9taWNfcmVhZCgmcnhxLT51c2VkKSkgJSByeHEtPmxlbjsKLQlmb3IgKDsgdGFpbCAhPSByeHEtPmhlYWQ7IGluZGV4X2luYygmdGFpbCwgcnhxLT5sZW4pKSB7CisJZm9yICg7IGF0b21pY19yZWFkKCZyeHEtPnVzZWQpID4gMDsgaW5kZXhfaW5jKCZ0YWlsLCByeHEtPmxlbikpIHsKIAkJcGFnZV9pbmZvID0gZ2V0X3J4X3BhZ2VfaW5mbyhhZGFwdGVyLCB0YWlsKTsKIAkJcHV0X3BhZ2UocGFnZV9pbmZvLT5wYWdlKTsKIAkJbWVtc2V0KHBhZ2VfaW5mbywgMCwgc2l6ZW9mKCpwYWdlX2luZm8pKTsKQEAgLTEwMTIsMzYgKzEwNjIsNDkgQEAKIAlCVUdfT04oYXRvbWljX3JlYWQoJnJ4cS0+dXNlZCkpOwogfQogCi1zdGF0aWMgdm9pZCBiZV90eF9xX2NsZWFuKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIHZvaWQgYmVfdHhfY29tcGxfY2xlYW4oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKipzZW50X3NrYnMgPSBhZGFwdGVyLT50eF9vYmouc2VudF9za2JfbGlzdDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2VudF9za2I7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4X2NxID0gJmFkYXB0ZXItPnR4X29iai5jcTsKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxID0gJmFkYXB0ZXItPnR4X29iai5xOwotCXUxNiBsYXN0X2luZGV4OwotCWJvb2wgZHVtbXlfd3JiOworCXN0cnVjdCBiZV9ldGhfdHhfY29tcGwgKnR4Y3A7CisJdTE2IGVuZF9pZHgsIGNtcGwgPSAwLCB0aW1lbyA9IDA7CiAKLQl3aGlsZSAoYXRvbWljX3JlYWQoJnR4cS0+dXNlZCkpIHsKLQkJc2VudF9za2IgPSBzZW50X3NrYnNbdHhxLT50YWlsXTsKLQkJbGFzdF9pbmRleCA9IHR4cS0+dGFpbDsKLQkJaW5kZXhfYWR2KCZsYXN0X2luZGV4LAotCQkJd3JiX2NudF9mb3Jfc2tiKHNlbnRfc2tiLCAmZHVtbXlfd3JiKSAtIDEsIHR4cS0+bGVuKTsKLQkJYmVfdHhfY29tcGxfcHJvY2VzcyhhZGFwdGVyLCBsYXN0X2luZGV4KTsKLQl9CisJLyogV2FpdCBmb3IgYSBtYXggb2YgMjAwbXMgZm9yIGFsbCB0aGUgdHgtY29tcGxldGlvbnMgdG8gYXJyaXZlLiAqLworCWRvIHsKKwkJd2hpbGUgKCh0eGNwID0gYmVfdHhfY29tcGxfZ2V0KHR4X2NxKSkpIHsKKwkJCWVuZF9pZHggPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF90eF9jb21wbCwKKwkJCQkJd3JiX2luZGV4LCB0eGNwKTsKKwkJCWJlX3R4X2NvbXBsX3Byb2Nlc3MoYWRhcHRlciwgZW5kX2lkeCk7CisJCQljbXBsKys7CisJCX0KKwkJaWYgKGNtcGwpIHsKKwkJCWJlX2NxX25vdGlmeShhZGFwdGVyLCB0eF9jcS0+aWQsIGZhbHNlLCBjbXBsKTsKKwkJCWNtcGwgPSAwOworCQl9CisKKwkJaWYgKGF0b21pY19yZWFkKCZ0eHEtPnVzZWQpID09IDAgfHwgKyt0aW1lbyA+IDIwMCkKKwkJCWJyZWFrOworCisJCW1kZWxheSgxKTsKKwl9IHdoaWxlICh0cnVlKTsKKworCWlmIChhdG9taWNfcmVhZCgmdHhxLT51c2VkKSkKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiJWQgcGVuZGluZyB0eC1jb21wbGV0aW9uc1xuIiwKKwkJCWF0b21pY19yZWFkKCZ0eHEtPnVzZWQpKTsKIH0KIAogc3RhdGljIHZvaWQgYmVfbWNjX3F1ZXVlc19kZXN0cm95KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxOwotCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKIAotCXEgPSAmY3RybC0+bWNjX29iai5xOworCXEgPSAmYWRhcHRlci0+bWNjX29iai5xOwogCWlmIChxLT5jcmVhdGVkKQotCQliZV9jbWRfcV9kZXN0cm95KGN0cmwsIHEsIFFUWVBFX01DQ1EpOworCQliZV9jbWRfcV9kZXN0cm95KGFkYXB0ZXIsIHEsIFFUWVBFX01DQ1EpOwogCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7CiAKLQlxID0gJmN0cmwtPm1jY19vYmouY3E7CisJcSA9ICZhZGFwdGVyLT5tY2Nfb2JqLmNxOwogCWlmIChxLT5jcmVhdGVkKQotCQliZV9jbWRfcV9kZXN0cm95KGN0cmwsIHEsIFFUWVBFX0NRKTsKKwkJYmVfY21kX3FfZGVzdHJveShhZGFwdGVyLCBxLCBRVFlQRV9DUSk7CiAJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKIH0KIApAQCAtMTA0OSwyNSArMTExMiwyNCBAQAogc3RhdGljIGludCBiZV9tY2NfcXVldWVzX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSwgKmNxOwotCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKIAogCS8qIEFsbG9jIE1DQyBjb21wbCBxdWV1ZSAqLwotCWNxID0gJmN0cmwtPm1jY19vYmouY3E7CisJY3EgPSAmYWRhcHRlci0+bWNjX29iai5jcTsKIAlpZiAoYmVfcXVldWVfYWxsb2MoYWRhcHRlciwgY3EsIE1DQ19DUV9MRU4sCi0JCQlzaXplb2Yoc3RydWN0IGJlX21jY19jcV9lbnRyeSkpKQorCQkJc2l6ZW9mKHN0cnVjdCBiZV9tY2NfY29tcGwpKSkKIAkJZ290byBlcnI7CiAKIAkvKiBBc2sgQkUgdG8gY3JlYXRlIE1DQyBjb21wbCBxdWV1ZTsgc2hhcmUgVFgncyBlcSAqLwotCWlmIChiZV9jbWRfY3FfY3JlYXRlKGN0cmwsIGNxLCAmYWRhcHRlci0+dHhfZXEucSwgZmFsc2UsIHRydWUsIDApKQorCWlmIChiZV9jbWRfY3FfY3JlYXRlKGFkYXB0ZXIsIGNxLCAmYWRhcHRlci0+dHhfZXEucSwgZmFsc2UsIHRydWUsIDApKQogCQlnb3RvIG1jY19jcV9mcmVlOwogCiAJLyogQWxsb2MgTUNDIHF1ZXVlICovCi0JcSA9ICZjdHJsLT5tY2Nfb2JqLnE7CisJcSA9ICZhZGFwdGVyLT5tY2Nfb2JqLnE7CiAJaWYgKGJlX3F1ZXVlX2FsbG9jKGFkYXB0ZXIsIHEsIE1DQ19RX0xFTiwgc2l6ZW9mKHN0cnVjdCBiZV9tY2Nfd3JiKSkpCiAJCWdvdG8gbWNjX2NxX2Rlc3Ryb3k7CiAKIAkvKiBBc2sgQkUgdG8gY3JlYXRlIE1DQyBxdWV1ZSAqLwotCWlmIChiZV9jbWRfbWNjcV9jcmVhdGUoY3RybCwgcSwgY3EpKQorCWlmIChiZV9jbWRfbWNjcV9jcmVhdGUoYWRhcHRlciwgcSwgY3EpKQogCQlnb3RvIG1jY19xX2ZyZWU7CiAKIAlyZXR1cm4gMDsKQEAgLTEwNzUsNyArMTEzNyw3IEBACiBtY2NfcV9mcmVlOgogCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7CiBtY2NfY3FfZGVzdHJveToKLQliZV9jbWRfcV9kZXN0cm95KGN0cmwsIGNxLCBRVFlQRV9DUSk7CisJYmVfY21kX3FfZGVzdHJveShhZGFwdGVyLCBjcSwgUVRZUEVfQ1EpOwogbWNjX2NxX2ZyZWU6CiAJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBjcSk7CiBlcnI6CkBAIC0xMDg3LDIzICsxMTQ5LDIxIEBACiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnE7CiAKIAlxID0gJmFkYXB0ZXItPnR4X29iai5xOwotCWlmIChxLT5jcmVhdGVkKSB7Ci0JCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIHEsIFFUWVBFX1RYUSk7Ci0KLQkJLyogTm8gbW9yZSB0eCBjb21wbGV0aW9ucyBjYW4gYmUgcmN2ZCBub3c7IGNsZWFuIHVwIGlmIHRoZXJlCi0JCSAqIGFyZSBhbnkgcGVuZGluZyBjb21wbGV0aW9ucyBvciBwZW5kaW5nIHR4IHJlcXVlc3RzICovCi0JCWJlX3R4X3FfY2xlYW4oYWRhcHRlcik7Ci0JfQorCWlmIChxLT5jcmVhdGVkKQorCQliZV9jbWRfcV9kZXN0cm95KGFkYXB0ZXIsIHEsIFFUWVBFX1RYUSk7CiAJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKIAogCXEgPSAmYWRhcHRlci0+dHhfb2JqLmNxOwogCWlmIChxLT5jcmVhdGVkKQotCQliZV9jbWRfcV9kZXN0cm95KCZhZGFwdGVyLT5jdHJsLCBxLCBRVFlQRV9DUSk7CisJCWJlX2NtZF9xX2Rlc3Ryb3koYWRhcHRlciwgcSwgUVRZUEVfQ1EpOwogCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7CiAKKwkvKiBDbGVhciBhbnkgcmVzaWR1YWwgZXZlbnRzICovCisJYmVfZXFfY2xlYW4oYWRhcHRlciwgJmFkYXB0ZXItPnR4X2VxKTsKKwogCXEgPSAmYWRhcHRlci0+dHhfZXEucTsKIAlpZiAocS0+Y3JlYXRlZCkKLQkJYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgcSwgUVRZUEVfRVEpOworCQliZV9jbWRfcV9kZXN0cm95KGFkYXB0ZXIsIHEsIFFUWVBFX0VRKTsKIAliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIHEpOwogfQogCkBAIC0xMTIxLDcgKzExODEsNyBAQAogCQlyZXR1cm4gLTE7CiAKIAkvKiBBc2sgQkUgdG8gY3JlYXRlIFR4IEV2ZW50IHF1ZXVlICovCi0JaWYgKGJlX2NtZF9lcV9jcmVhdGUoJmFkYXB0ZXItPmN0cmwsIGVxLCBhZGFwdGVyLT50eF9lcS5jdXJfZXFkKSkKKwlpZiAoYmVfY21kX2VxX2NyZWF0ZShhZGFwdGVyLCBlcSwgYWRhcHRlci0+dHhfZXEuY3VyX2VxZCkpCiAJCWdvdG8gdHhfZXFfZnJlZTsKIAkvKiBBbGxvYyBUWCBldGggY29tcGwgcXVldWUgKi8KIAljcSA9ICZhZGFwdGVyLT50eF9vYmouY3E7CkBAIC0xMTMwLDcgKzExOTAsNyBAQAogCQlnb3RvIHR4X2VxX2Rlc3Ryb3k7CiAKIAkvKiBBc2sgQkUgdG8gY3JlYXRlIFR4IGV0aCBjb21wbCBxdWV1ZSAqLwotCWlmIChiZV9jbWRfY3FfY3JlYXRlKCZhZGFwdGVyLT5jdHJsLCBjcSwgZXEsIGZhbHNlLCBmYWxzZSwgMykpCisJaWYgKGJlX2NtZF9jcV9jcmVhdGUoYWRhcHRlciwgY3EsIGVxLCBmYWxzZSwgZmFsc2UsIDMpKQogCQlnb3RvIHR4X2NxX2ZyZWU7CiAKIAkvKiBBbGxvYyBUWCBldGggcXVldWUgKi8KQEAgLTExMzksMTggKzExOTksMTggQEAKIAkJZ290byB0eF9jcV9kZXN0cm95OwogCiAJLyogQXNrIEJFIHRvIGNyZWF0ZSBUeCBldGggcXVldWUgKi8KLQlpZiAoYmVfY21kX3R4cV9jcmVhdGUoJmFkYXB0ZXItPmN0cmwsIHEsIGNxKSkKKwlpZiAoYmVfY21kX3R4cV9jcmVhdGUoYWRhcHRlciwgcSwgY3EpKQogCQlnb3RvIHR4X3FfZnJlZTsKIAlyZXR1cm4gMDsKIAogdHhfcV9mcmVlOgogCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7CiB0eF9jcV9kZXN0cm95OgotCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIGNxLCBRVFlQRV9DUSk7CisJYmVfY21kX3FfZGVzdHJveShhZGFwdGVyLCBjcSwgUVRZUEVfQ1EpOwogdHhfY3FfZnJlZToKIAliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIGNxKTsKIHR4X2VxX2Rlc3Ryb3k6Ci0JYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgZXEsIFFUWVBFX0VRKTsKKwliZV9jbWRfcV9kZXN0cm95KGFkYXB0ZXIsIGVxLCBRVFlQRV9FUSk7CiB0eF9lcV9mcmVlOgogCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgZXEpOwogCXJldHVybiAtMTsKQEAgLTExNjIsMTkgKzEyMjIsMjIgQEAKIAogCXEgPSAmYWRhcHRlci0+cnhfb2JqLnE7CiAJaWYgKHEtPmNyZWF0ZWQpIHsKLQkJYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgcSwgUVRZUEVfUlhRKTsKKwkJYmVfY21kX3FfZGVzdHJveShhZGFwdGVyLCBxLCBRVFlQRV9SWFEpOwogCQliZV9yeF9xX2NsZWFuKGFkYXB0ZXIpOwogCX0KIAliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIHEpOwogCiAJcSA9ICZhZGFwdGVyLT5yeF9vYmouY3E7CiAJaWYgKHEtPmNyZWF0ZWQpCi0JCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIHEsIFFUWVBFX0NRKTsKKwkJYmVfY21kX3FfZGVzdHJveShhZGFwdGVyLCBxLCBRVFlQRV9DUSk7CiAJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKIAorCS8qIENsZWFyIGFueSByZXNpZHVhbCBldmVudHMgKi8KKwliZV9lcV9jbGVhbihhZGFwdGVyLCAmYWRhcHRlci0+cnhfZXEpOworCiAJcSA9ICZhZGFwdGVyLT5yeF9lcS5xOwogCWlmIChxLT5jcmVhdGVkKQotCQliZV9jbWRfcV9kZXN0cm95KCZhZGFwdGVyLT5jdHJsLCBxLCBRVFlQRV9FUSk7CisJCWJlX2NtZF9xX2Rlc3Ryb3koYWRhcHRlciwgcSwgUVRZUEVfRVEpOwogCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7CiB9CiAKQEAgLTExODMsNyArMTI0Niw2IEBACiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLCAqcSwgKmNxOwogCWludCByYzsKIAotCWFkYXB0ZXItPm1heF9yeF9jb2FsID0gQkVfTUFYX0ZSQUdTX1BFUl9GUkFNRTsKIAlhZGFwdGVyLT5iaWdfcGFnZV9zaXplID0gKDEgPDwgZ2V0X29yZGVyKHJ4X2ZyYWdfc2l6ZSkpICogUEFHRV9TSVpFOwogCWFkYXB0ZXItPnJ4X2VxLm1heF9lcWQgPSBCRV9NQVhfRVFEOwogCWFkYXB0ZXItPnJ4X2VxLm1pbl9lcWQgPSAwOwpAQCAtMTE5OCw3ICsxMjYwLDcgQEAKIAkJcmV0dXJuIHJjOwogCiAJLyogQXNrIEJFIHRvIGNyZWF0ZSBSeCBFdmVudCBxdWV1ZSAqLwotCXJjID0gYmVfY21kX2VxX2NyZWF0ZSgmYWRhcHRlci0+Y3RybCwgZXEsIGFkYXB0ZXItPnJ4X2VxLmN1cl9lcWQpOworCXJjID0gYmVfY21kX2VxX2NyZWF0ZShhZGFwdGVyLCBlcSwgYWRhcHRlci0+cnhfZXEuY3VyX2VxZCk7CiAJaWYgKHJjKQogCQlnb3RvIHJ4X2VxX2ZyZWU7CiAKQEAgLTEyMTAsNyArMTI3Miw3IEBACiAJCWdvdG8gcnhfZXFfZGVzdHJveTsKIAogCS8qIEFzayBCRSB0byBjcmVhdGUgUnggZXRoIGNvbXBsIHF1ZXVlICovCi0JcmMgPSBiZV9jbWRfY3FfY3JlYXRlKCZhZGFwdGVyLT5jdHJsLCBjcSwgZXEsIGZhbHNlLCBmYWxzZSwgMyk7CisJcmMgPSBiZV9jbWRfY3FfY3JlYXRlKGFkYXB0ZXIsIGNxLCBlcSwgZmFsc2UsIGZhbHNlLCAzKTsKIAlpZiAocmMpCiAJCWdvdG8gcnhfY3FfZnJlZTsKIApAQCAtMTIyMSw3ICsxMjgzLDcgQEAKIAkJZ290byByeF9jcV9kZXN0cm95OwogCiAJLyogQXNrIEJFIHRvIGNyZWF0ZSBSeCBldGggcXVldWUgKi8KLQlyYyA9IGJlX2NtZF9yeHFfY3JlYXRlKCZhZGFwdGVyLT5jdHJsLCBxLCBjcS0+aWQsIHJ4X2ZyYWdfc2l6ZSwKKwlyYyA9IGJlX2NtZF9yeHFfY3JlYXRlKGFkYXB0ZXIsIHEsIGNxLT5pZCwgcnhfZnJhZ19zaXplLAogCQlCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSwgYWRhcHRlci0+aWZfaGFuZGxlLCBmYWxzZSk7CiAJaWYgKHJjKQogCQlnb3RvIHJ4X3FfZnJlZTsKQEAgLTEyMzAsNjggKzEyOTIsNDMgQEAKIHJ4X3FfZnJlZToKIAliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIHEpOwogcnhfY3FfZGVzdHJveToKLQliZV9jbWRfcV9kZXN0cm95KCZhZGFwdGVyLT5jdHJsLCBjcSwgUVRZUEVfQ1EpOworCWJlX2NtZF9xX2Rlc3Ryb3koYWRhcHRlciwgY3EsIFFUWVBFX0NRKTsKIHJ4X2NxX2ZyZWU6CiAJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBjcSk7CiByeF9lcV9kZXN0cm95OgotCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIGVxLCBRVFlQRV9FUSk7CisJYmVfY21kX3FfZGVzdHJveShhZGFwdGVyLCBlcSwgUVRZUEVfRVEpOwogcnhfZXFfZnJlZToKIAliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIGVxKTsKIAlyZXR1cm4gcmM7CiB9Ci1zdGF0aWMgYm9vbCBldmVudF9nZXQoc3RydWN0IGJlX2VxX29iaiAqZXFfb2JqLCB1MTYgKnJpZCkKKworLyogVGhlcmUgYXJlIDggZXZ0IGlkcyBwZXIgZnVuYy4gUmV0cnVucyB0aGUgZXZ0IGlkJ3MgYml0IG51bWJlciAqLworc3RhdGljIGlubGluZSBpbnQgYmVfZXZ0X2JpdF9nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBlcV9pZCkKIHsKLQlzdHJ1Y3QgYmVfZXFfZW50cnkgKmVudHJ5ID0gcXVldWVfdGFpbF9ub2RlKCZlcV9vYmotPnEpOwotCXUzMiBldnQgPSBlbnRyeS0+ZXZ0OwotCi0JaWYgKCFldnQpCi0JCXJldHVybiBmYWxzZTsKLQotCWV2dCA9IGxlMzJfdG9fY3B1KGV2dCk7Ci0JKnJpZCA9IChldnQgPj4gRVFfRU5UUllfUkVTX0lEX1NISUZUKSAmIEVRX0VOVFJZX1JFU19JRF9NQVNLOwotCWVudHJ5LT5ldnQgPSAwOwotCXF1ZXVlX3RhaWxfaW5jKCZlcV9vYmotPnEpOwotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW50IGV2ZW50X2hhbmRsZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAotCQkJc3RydWN0IGJlX2VxX29iaiAqZXFfb2JqKQotewotCXUxNiByaWQgPSAwLCBudW0gPSAwOwotCi0Jd2hpbGUgKGV2ZW50X2dldChlcV9vYmosICZyaWQpKQotCQludW0rKzsKLQotCS8qIFdlIGNhbiBzZWUgYW4gaW50ZXJydXB0IGFuZCBubyBldmVudCAqLwotCWJlX2VxX25vdGlmeShjdHJsLCBlcV9vYmotPnEuaWQsIHRydWUsIHRydWUsIG51bSk7Ci0JaWYgKG51bSkKLQkJbmFwaV9zY2hlZHVsZSgmZXFfb2JqLT5uYXBpKTsKLQotCXJldHVybiBudW07CisJcmV0dXJuIGVxX2lkIC0gOCAqIGJlX3BjaV9mdW5jKGFkYXB0ZXIpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgYmVfaW50eChpbnQgaXJxLCB2b2lkICpkZXYpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXY7Ci0Jc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwotICAgICAgICBpbnQgaXNyOworCWludCBpc3I7CiAKLQlpc3IgPSBpb3JlYWQzMihjdHJsLT5jc3IgKyBDRVZfSVNSMF9PRkZTRVQgKwotICAgICAgICAgICAgICAgICAgICAgIGN0cmwtPnBjaV9mdW5jICogQ0VWX0lTUl9TSVpFKTsKKwlpc3IgPSBpb3JlYWQzMihhZGFwdGVyLT5jc3IgKyBDRVZfSVNSMF9PRkZTRVQgKworCQkJYmVfcGNpX2Z1bmMoYWRhcHRlcikgKiBDRVZfSVNSX1NJWkUpOwogCWlmICghaXNyKQotICAgICAgICAgICAgICAgIHJldHVybiBJUlFfTk9ORTsKKwkJcmV0dXJuIElSUV9OT05FOwogCi0gICAgICAgIGV2ZW50X2hhbmRsZShjdHJsLCAmYWRhcHRlci0+dHhfZXEpOwotICAgICAgICBldmVudF9oYW5kbGUoY3RybCwgJmFkYXB0ZXItPnJ4X2VxKTsKKwlldmVudF9oYW5kbGUoYWRhcHRlciwgJmFkYXB0ZXItPnR4X2VxKTsKKwlldmVudF9oYW5kbGUoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X2VxKTsKIAotICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgYmVfbXNpeF9yeChpbnQgaXJxLCB2b2lkICpkZXYpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXY7CiAKLQlldmVudF9oYW5kbGUoJmFkYXB0ZXItPmN0cmwsICZhZGFwdGVyLT5yeF9lcSk7CisJZXZlbnRfaGFuZGxlKGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9lcSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xMzAwLDEyICsxMzM3LDEyIEBACiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXY7CiAKLQlldmVudF9oYW5kbGUoJmFkYXB0ZXItPmN0cmwsICZhZGFwdGVyLT50eF9lcSk7CisJZXZlbnRfaGFuZGxlKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9lcSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBkb19scm8oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCitzdGF0aWMgaW5saW5lIGJvb2wgZG9fZ3JvKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJc3RydWN0IGJlX2V0aF9yeF9jb21wbCAqcnhjcCkKIHsKIAlpbnQgZXJyID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIGVyciwgcnhjcCk7CkBAIC0xMzE0LDggKzEzNTEsNyBAQAogCWlmIChlcnIpCiAJCWRydnJfc3RhdHMoYWRhcHRlciktPmJlX3J4Y3BfZXJyKys7CiAKLQlyZXR1cm4gKCF0Y3BfZnJhbWUgfHwgZXJyIHx8IChhZGFwdGVyLT5tYXhfcnhfY29hbCA8PSAxKSkgPwotCQlmYWxzZSA6IHRydWU7CisJcmV0dXJuICh0Y3BfZnJhbWUgJiYgIWVycikgPyB0cnVlIDogZmFsc2U7CiB9CiAKIGludCBiZV9wb2xsX3J4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKQEAgLTEzMzIsMTYgKzEzNjgsMTQgQEAKIAkJaWYgKCFyeGNwKQogCQkJYnJlYWs7CiAKLQkJaWYgKGRvX2xybyhhZGFwdGVyLCByeGNwKSkKLQkJCWJlX3J4X2NvbXBsX3Byb2Nlc3NfbHJvKGFkYXB0ZXIsIHJ4Y3ApOworCQlpZiAoZG9fZ3JvKGFkYXB0ZXIsIHJ4Y3ApKQorCQkJYmVfcnhfY29tcGxfcHJvY2Vzc19ncm8oYWRhcHRlciwgcnhjcCk7CiAJCWVsc2UKIAkJCWJlX3J4X2NvbXBsX3Byb2Nlc3MoYWRhcHRlciwgcnhjcCk7CiAKIAkJYmVfcnhfY29tcGxfcmVzZXQocnhjcCk7CiAJfQogCi0JbHJvX2ZsdXNoX2FsbCgmYWRhcHRlci0+cnhfb2JqLmxyb19tZ3IpOwotCiAJLyogUmVmaWxsIHRoZSBxdWV1ZSAqLwogCWlmIChhdG9taWNfcmVhZCgmYWRhcHRlci0+cnhfb2JqLnEudXNlZCkgPCBSWF9GUkFHU19SRUZJTExfV00pCiAJCWJlX3Bvc3RfcnhfZnJhZ3MoYWRhcHRlcik7CkBAIC0xMzQ5LDEwICsxMzgzLDEwIEBACiAJLyogQWxsIGNvbnN1bWVkICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewogCQluYXBpX2NvbXBsZXRlKG5hcGkpOwotCQliZV9jcV9ub3RpZnkoJmFkYXB0ZXItPmN0cmwsIHJ4X2NxLT5pZCwgdHJ1ZSwgd29ya19kb25lKTsKKwkJYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIHJ4X2NxLT5pZCwgdHJ1ZSwgd29ya19kb25lKTsKIAl9IGVsc2UgewogCQkvKiBNb3JlIHRvIGJlIGNvbnN1bWVkOyBjb250aW51ZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLQkJYmVfY3Ffbm90aWZ5KCZhZGFwdGVyLT5jdHJsLCByeF9jcS0+aWQsIGZhbHNlLCB3b3JrX2RvbmUpOworCQliZV9jcV9ub3RpZnkoYWRhcHRlciwgcnhfY3EtPmlkLCBmYWxzZSwgd29ya19kb25lKTsKIAl9CiAJcmV0dXJuIHdvcmtfZG9uZTsKIH0KQEAgLTEzNzMsNyArMTQwNyw3IEBACiAJfQogCiAJaWYgKG51bV9jbXBsKSB7Ci0JCWJlX2NxX25vdGlmeSgmYWRhcHRlci0+Y3RybCwgdHhfY3EtPmlkLCB0cnVlLCBudW1fY21wbCk7CisJCWJlX2NxX25vdGlmeShhZGFwdGVyLCB0eF9jcS0+aWQsIHRydWUsIG51bV9jbXBsKTsKIAogCQkvKiBBcyBUeCB3cmJzIGhhdmUgYmVlbiBmcmVlZCB1cCwgd2FrZSB1cCBuZXRkZXYgcXVldWUgaWYKIAkJICogaXQgd2FzIHN0b3BwZWQgZHVlIHRvIGxhY2sgb2YgdHggd3Jicy4KQEAgLTE0MDEsNyArMTQzNSw3IEBACiAKIAliZV9wcm9jZXNzX3R4KGFkYXB0ZXIpOwogCi0JYmVfcHJvY2Vzc19tY2MoJmFkYXB0ZXItPmN0cmwpOworCWJlX3Byb2Nlc3NfbWNjKGFkYXB0ZXIpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0xNDEzLDcgKzE0NDcsNyBAQAogCWludCBzdGF0dXM7CiAKIAkvKiBHZXQgU3RhdHMgKi8KLQlzdGF0dXMgPSBiZV9jbWRfZ2V0X3N0YXRzKCZhZGFwdGVyLT5jdHJsLCAmYWRhcHRlci0+c3RhdHMuY21kKTsKKwlzdGF0dXMgPSBiZV9jbWRfZ2V0X3N0YXRzKGFkYXB0ZXIsICZhZGFwdGVyLT5zdGF0cy5jbWQpOwogCWlmICghc3RhdHVzKQogCQluZXRkZXZfc3RhdHNfdXBkYXRlKGFkYXB0ZXIpOwogCkBAIC0xNDQ3LDMyICsxNDgxLDQ0IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGJlX21zaXhfdmVjX2dldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGVxX2lkKQogewotCXJldHVybiBhZGFwdGVyLT5tc2l4X2VudHJpZXNbZXFfaWQgLQotCQkJOCAqIGFkYXB0ZXItPmN0cmwucGNpX2Z1bmNdLnZlY3RvcjsKKwlyZXR1cm4gYWRhcHRlci0+bXNpeF9lbnRyaWVzWworCQkJYmVfZXZ0X2JpdF9nZXQoYWRhcHRlciwgZXFfaWQpXS52ZWN0b3I7Cit9CisKK3N0YXRpYyBpbnQgYmVfcmVxdWVzdF9pcnEoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBiZV9lcV9vYmogKmVxX29iaiwKKwkJdm9pZCAqaGFuZGxlciwgY2hhciAqZGVzYykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCB2ZWM7CisKKwlzcHJpbnRmKGVxX29iai0+ZGVzYywgIiVzLSVzIiwgbmV0ZGV2LT5uYW1lLCBkZXNjKTsKKwl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgZXFfb2JqLT5xLmlkKTsKKwlyZXR1cm4gcmVxdWVzdF9pcnEodmVjLCBoYW5kbGVyLCAwLCBlcV9vYmotPmRlc2MsIGFkYXB0ZXIpOworfQorCitzdGF0aWMgdm9pZCBiZV9mcmVlX2lycShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGJlX2VxX29iaiAqZXFfb2JqKQoreworCWludCB2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgZXFfb2JqLT5xLmlkKTsKKwlmcmVlX2lycSh2ZWMsIGFkYXB0ZXIpOwogfQogCiBzdGF0aWMgaW50IGJlX21zaXhfcmVnaXN0ZXIoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9ICZhZGFwdGVyLT50eF9lcTsKLQlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9ICZhZGFwdGVyLT5yeF9lcTsKLQlpbnQgc3RhdHVzLCB2ZWM7CisJaW50IHN0YXR1czsKIAotCXNwcmludGYodHhfZXEtPmRlc2MsICIlcy10eCIsIG5ldGRldi0+bmFtZSk7Ci0JdmVjID0gYmVfbXNpeF92ZWNfZ2V0KGFkYXB0ZXIsIHR4X2VxLT5xLmlkKTsKLQlzdGF0dXMgPSByZXF1ZXN0X2lycSh2ZWMsIGJlX21zaXhfdHhfbWNjLCAwLCB0eF9lcS0+ZGVzYywgYWRhcHRlcik7CisJc3RhdHVzID0gYmVfcmVxdWVzdF9pcnEoYWRhcHRlciwgJmFkYXB0ZXItPnR4X2VxLCBiZV9tc2l4X3R4X21jYywgInR4Iik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBlcnI7CiAKLQlzcHJpbnRmKHJ4X2VxLT5kZXNjLCAiJXMtcngiLCBuZXRkZXYtPm5hbWUpOwotCXZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCByeF9lcS0+cS5pZCk7Ci0Jc3RhdHVzID0gcmVxdWVzdF9pcnEodmVjLCBiZV9tc2l4X3J4LCAwLCByeF9lcS0+ZGVzYywgYWRhcHRlcik7Ci0JaWYgKHN0YXR1cykgeyAvKiBGcmVlIFRYIElSUSAqLwotCQl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgdHhfZXEtPnEuaWQpOwotCQlmcmVlX2lycSh2ZWMsIGFkYXB0ZXIpOwotCQlnb3RvIGVycjsKLQl9CisJc3RhdHVzID0gYmVfcmVxdWVzdF9pcnEoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X2VxLCBiZV9tc2l4X3J4LCAicngiKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZyZWVfdHhfaXJxOworCiAJcmV0dXJuIDA7CisKK2ZyZWVfdHhfaXJxOgorCWJlX2ZyZWVfaXJxKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9lcSk7CiBlcnI6CiAJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKIAkJIk1TSVggUmVxdWVzdCBJUlEgZmFpbGVkIC0gZXJyICVkXG4iLCBzdGF0dXMpOwpAQCAtMTUwOSw3ICsxNTU1LDYgQEAKIHN0YXRpYyB2b2lkIGJlX2lycV91bnJlZ2lzdGVyKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JaW50IHZlYzsKIAogCWlmICghYWRhcHRlci0+aXNyX3JlZ2lzdGVyZWQpCiAJCXJldHVybjsKQEAgLTE1MjEsMTAgKzE1NjYsOCBAQAogCX0KIAogCS8qIE1TSXggKi8KLQl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgYWRhcHRlci0+dHhfZXEucS5pZCk7Ci0JZnJlZV9pcnEodmVjLCBhZGFwdGVyKTsKLQl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgYWRhcHRlci0+cnhfZXEucS5pZCk7Ci0JZnJlZV9pcnEodmVjLCBhZGFwdGVyKTsKKwliZV9mcmVlX2lycShhZGFwdGVyLCAmYWRhcHRlci0+dHhfZXEpOworCWJlX2ZyZWVfaXJxKGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9lcSk7CiBkb25lOgogCWFkYXB0ZXItPmlzcl9yZWdpc3RlcmVkID0gZmFsc2U7CiAJcmV0dXJuOwpAQCAtMTUzMyw3ICsxNTc2LDYgQEAKIHN0YXRpYyBpbnQgYmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CiAJc3RydWN0IGJlX2VxX29iaiAqcnhfZXEgPSAmYWRhcHRlci0+cnhfZXE7CiAJc3RydWN0IGJlX2VxX29iaiAqdHhfZXEgPSAmYWRhcHRlci0+dHhfZXE7CiAJYm9vbCBsaW5rX3VwOwpAQCAtMTU0NywxNiArMTU4OSwxNiBAQAogCiAJYmVfaXJxX3JlZ2lzdGVyKGFkYXB0ZXIpOwogCi0JYmVfaW50cl9zZXQoY3RybCwgdHJ1ZSk7CisJYmVfaW50cl9zZXQoYWRhcHRlciwgdHJ1ZSk7CiAKIAkvKiBUaGUgZXZ0IHF1ZXVlcyBhcmUgY3JlYXRlZCBpbiB1bmFybWVkIHN0YXRlOyBhcm0gdGhlbSAqLwotCWJlX2VxX25vdGlmeShjdHJsLCByeF9lcS0+cS5pZCwgdHJ1ZSwgZmFsc2UsIDApOwotCWJlX2VxX25vdGlmeShjdHJsLCB0eF9lcS0+cS5pZCwgdHJ1ZSwgZmFsc2UsIDApOworCWJlX2VxX25vdGlmeShhZGFwdGVyLCByeF9lcS0+cS5pZCwgdHJ1ZSwgZmFsc2UsIDApOworCWJlX2VxX25vdGlmeShhZGFwdGVyLCB0eF9lcS0+cS5pZCwgdHJ1ZSwgZmFsc2UsIDApOwogCiAJLyogUnggY29tcGwgcXVldWUgbWF5IGJlIGluIHVuYXJtZWQgc3RhdGU7IHJlYXJtIGl0ICovCi0JYmVfY3Ffbm90aWZ5KGN0cmwsIGFkYXB0ZXItPnJ4X29iai5jcS5pZCwgdHJ1ZSwgMCk7CisJYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X29iai5jcS5pZCwgdHJ1ZSwgMCk7CiAKLQlzdGF0dXMgPSBiZV9jbWRfbGlua19zdGF0dXNfcXVlcnkoY3RybCwgJmxpbmtfdXApOworCXN0YXR1cyA9IGJlX2NtZF9saW5rX3N0YXR1c19xdWVyeShhZGFwdGVyLCAmbGlua191cCk7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIAliZV9saW5rX3N0YXR1c191cGRhdGUoYWRhcHRlciwgbGlua191cCk7CkBAIC0xNTY3LDcgKzE2MDksNiBAQAogCiBzdGF0aWMgaW50IGJlX3NldHVwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXUzMiBpZl9mbGFnczsKIAlpbnQgc3RhdHVzOwpAQCAtMTU3NSw3ICsxNjE2LDcgQEAKIAlpZl9mbGFncyA9IEJFX0lGX0ZMQUdTX0JST0FEQ0FTVCB8IEJFX0lGX0ZMQUdTX1BST01JU0NVT1VTIHwKIAkJQkVfSUZfRkxBR1NfTUNBU1RfUFJPTUlTQ1VPVVMgfCBCRV9JRl9GTEFHU19VTlRBR0dFRCB8CiAJCUJFX0lGX0ZMQUdTX1BBU1NfTDNMNF9FUlJPUlM7Ci0Jc3RhdHVzID0gYmVfY21kX2lmX2NyZWF0ZShjdHJsLCBpZl9mbGFncywgbmV0ZGV2LT5kZXZfYWRkciwKKwlzdGF0dXMgPSBiZV9jbWRfaWZfY3JlYXRlKGFkYXB0ZXIsIGlmX2ZsYWdzLCBuZXRkZXYtPmRldl9hZGRyLAogCQkJZmFsc2UvKiBwbWFjX2ludmFsaWQgKi8sICZhZGFwdGVyLT5pZl9oYW5kbGUsCiAJCQkmYWRhcHRlci0+cG1hY19pZCk7CiAJaWYgKHN0YXR1cyAhPSAwKQpAQCAtMTU4Myw3ICsxNjI0LDcgQEAKIAogCWJlX3ZpZF9jb25maWcobmV0ZGV2KTsKIAotCXN0YXR1cyA9IGJlX2NtZF9zZXRfZmxvd19jb250cm9sKGN0cmwsIHRydWUsIHRydWUpOworCXN0YXR1cyA9IGJlX2NtZF9zZXRfZmxvd19jb250cm9sKGFkYXB0ZXIsIHRydWUsIHRydWUpOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byBpZl9kZXN0cm95OwogCkBAIC0xNjA2LDI4ICsxNjQ3LDI1IEBACiB0eF9xc19kZXN0cm95OgogCWJlX3R4X3F1ZXVlc19kZXN0cm95KGFkYXB0ZXIpOwogaWZfZGVzdHJveToKLQliZV9jbWRfaWZfZGVzdHJveShjdHJsLCBhZGFwdGVyLT5pZl9oYW5kbGUpOworCWJlX2NtZF9pZl9kZXN0cm95KGFkYXB0ZXIsIGFkYXB0ZXItPmlmX2hhbmRsZSk7CiBkb19ub25lOgogCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQgYmVfY2xlYXIoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwotCisJYmVfbWNjX3F1ZXVlc19kZXN0cm95KGFkYXB0ZXIpOwogCWJlX3J4X3F1ZXVlc19kZXN0cm95KGFkYXB0ZXIpOwogCWJlX3R4X3F1ZXVlc19kZXN0cm95KGFkYXB0ZXIpOwogCi0JYmVfY21kX2lmX2Rlc3Ryb3koY3RybCwgYWRhcHRlci0+aWZfaGFuZGxlKTsKKwliZV9jbWRfaWZfZGVzdHJveShhZGFwdGVyLCBhZGFwdGVyLT5pZl9oYW5kbGUpOwogCi0JYmVfbWNjX3F1ZXVlc19kZXN0cm95KGFkYXB0ZXIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGJlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKIAlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9ICZhZGFwdGVyLT5yeF9lcTsKIAlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9ICZhZGFwdGVyLT50eF9lcTsKIAlpbnQgdmVjOwpAQCAtMTYzOCw3ICsxNjc2LDcgQEAKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCWFkYXB0ZXItPmxpbmtfdXAgPSBmYWxzZTsKIAotCWJlX2ludHJfc2V0KGN0cmwsIGZhbHNlKTsKKwliZV9pbnRyX3NldChhZGFwdGVyLCBmYWxzZSk7CiAKIAlpZiAoYWRhcHRlci0+bXNpeF9lbmFibGVkKSB7CiAJCXZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCB0eF9lcS0+cS5pZCk7CkBAIC0xNjUzLDU4ICsxNjkxLDE3OSBAQAogCW5hcGlfZGlzYWJsZSgmcnhfZXEtPm5hcGkpOwogCW5hcGlfZGlzYWJsZSgmdHhfZXEtPm5hcGkpOwogCisJLyogV2FpdCBmb3IgYWxsIHBlbmRpbmcgdHggY29tcGxldGlvbnMgdG8gYXJyaXZlIHNvIHRoYXQKKwkgKiBhbGwgdHggc2ticyBhcmUgZnJlZWQuCisJICovCisJYmVfdHhfY29tcGxfY2xlYW4oYWRhcHRlcik7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiZV9nZXRfZnJhZ19oZWFkZXIoc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZywgdm9pZCAqKm1hY19oZHIsCi0JCQkJdm9pZCAqKmlwX2hkciwgdm9pZCAqKnRjcHVkcF9oZHIsCi0JCQkJdTY0ICpoZHJfZmxhZ3MsIHZvaWQgKnByaXYpCisjZGVmaW5lIEZXX0ZJTEVfSERSX1NJR04gCSJTZXJ2ZXJFbmdpbmVzIENvcnAuICIKK2NoYXIgZmxhc2hfY29va2llWzJdWzE2XSA9CXsiKioqIFNFIEZMQVMiLAorCQkJCSJIIERJUkVDVE9SWSAqKiogIn07CitzdGF0aWMgaW50IGJlX2ZsYXNoX2ltYWdlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKKwkJCXN0cnVjdCBiZV9kbWFfbWVtICpmbGFzaF9jbWQsIHUzMiBmbGFzaF90eXBlKQogewotCXN0cnVjdCBldGhoZHIgKmVoOwotCXN0cnVjdCB2bGFuX2V0aGhkciAqdmVoOwotCXN0cnVjdCBpcGhkciAqaXBoOwotCXU4ICp2YSA9IHBhZ2VfYWRkcmVzcyhmcmFnLT5wYWdlKSArIGZyYWctPnBhZ2Vfb2Zmc2V0OwotCXVuc2lnbmVkIGxvbmcgbGxfaGxlbjsKKwlpbnQgc3RhdHVzOworCXUzMiBmbGFzaF9vcCwgaW1hZ2Vfb2Zmc2V0ID0gMCwgdG90YWxfYnl0ZXMsIGltYWdlX3NpemUgPSAwOworCWludCBudW1fYnl0ZXM7CisJY29uc3QgdTggKnAgPSBmdy0+ZGF0YTsKKwlzdHJ1Y3QgYmVfY21kX3dyaXRlX2ZsYXNocm9tICpyZXEgPSBmbGFzaF9jbWQtPnZhOwogCi0JcHJlZmV0Y2godmEpOwotCWVoID0gKHN0cnVjdCBldGhoZHIgKil2YTsKLQkqbWFjX2hkciA9IGVoOwotCWxsX2hsZW4gPSBFVEhfSExFTjsKLQlpZiAoZWgtPmhfcHJvdG8gIT0gaHRvbnMoRVRIX1BfSVApKSB7Ci0JCWlmIChlaC0+aF9wcm90byA9PSBodG9ucyhFVEhfUF84MDIxUSkpIHsKLQkJCXZlaCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKil2YTsKLQkJCWlmICh2ZWgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gIT0gaHRvbnMoRVRIX1BfSVApKQotCQkJCXJldHVybiAtMTsKKwlzd2l0Y2ggKGZsYXNoX3R5cGUpIHsKKwljYXNlIEZMQVNIUk9NX1RZUEVfSVNDU0lfQUNUSVZFOgorCQlpbWFnZV9vZmZzZXQgPSBGTEFTSF9pU0NTSV9QUklNQVJZX0lNQUdFX1NUQVJUOworCQlpbWFnZV9zaXplID0gRkxBU0hfSU1BR0VfTUFYX1NJWkU7CisJCWJyZWFrOworCWNhc2UgRkxBU0hST01fVFlQRV9JU0NTSV9CQUNLVVA6CisJCWltYWdlX29mZnNldCA9IEZMQVNIX2lTQ1NJX0JBQ0tVUF9JTUFHRV9TVEFSVDsKKwkJaW1hZ2Vfc2l6ZSA9IEZMQVNIX0lNQUdFX01BWF9TSVpFOworCQlicmVhazsKKwljYXNlIEZMQVNIUk9NX1RZUEVfRkNPRV9GV19BQ1RJVkU6CisJCWltYWdlX29mZnNldCA9IEZMQVNIX0ZDb0VfUFJJTUFSWV9JTUFHRV9TVEFSVDsKKwkJaW1hZ2Vfc2l6ZSA9IEZMQVNIX0lNQUdFX01BWF9TSVpFOworCQlicmVhazsKKwljYXNlIEZMQVNIUk9NX1RZUEVfRkNPRV9GV19CQUNLVVA6CisJCWltYWdlX29mZnNldCA9IEZMQVNIX0ZDb0VfQkFDS1VQX0lNQUdFX1NUQVJUOworCQlpbWFnZV9zaXplID0gRkxBU0hfSU1BR0VfTUFYX1NJWkU7CisJCWJyZWFrOworCWNhc2UgRkxBU0hST01fVFlQRV9CSU9TOgorCQlpbWFnZV9vZmZzZXQgPSBGTEFTSF9pU0NTSV9CSU9TX1NUQVJUOworCQlpbWFnZV9zaXplID0gRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRTsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSFJPTV9UWVBFX0ZDT0VfQklPUzoKKwkJaW1hZ2Vfb2Zmc2V0ID0gRkxBU0hfRkNvRV9CSU9TX1NUQVJUOworCQlpbWFnZV9zaXplID0gRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRTsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSFJPTV9UWVBFX1BYRV9CSU9TOgorCQlpbWFnZV9vZmZzZXQgPSBGTEFTSF9QWEVfQklPU19TVEFSVDsKKwkJaW1hZ2Vfc2l6ZSA9IEZMQVNIX0JJT1NfSU1BR0VfTUFYX1NJWkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KIAotCQkJbGxfaGxlbiArPSBWTEFOX0hMRU47Ci0JCX0gZWxzZSB7CisJcCArPSBzaXplb2Yoc3RydWN0IGZsYXNoX2ZpbGVfaGRyKSArIGltYWdlX29mZnNldDsKKwlpZiAocCArIGltYWdlX3NpemUgPiBmdy0+ZGF0YSArIGZ3LT5zaXplKQorCQlyZXR1cm4gLTE7CisKKwl0b3RhbF9ieXRlcyA9IGltYWdlX3NpemU7CisKKwl3aGlsZSAodG90YWxfYnl0ZXMpIHsKKwkJaWYgKHRvdGFsX2J5dGVzID4gMzIqMTAyNCkKKwkJCW51bV9ieXRlcyA9IDMyKjEwMjQ7CisJCWVsc2UKKwkJCW51bV9ieXRlcyA9IHRvdGFsX2J5dGVzOworCQl0b3RhbF9ieXRlcyAtPSBudW1fYnl0ZXM7CisKKwkJaWYgKCF0b3RhbF9ieXRlcykKKwkJCWZsYXNoX29wID0gRkxBU0hST01fT1BFUl9GTEFTSDsKKwkJZWxzZQorCQkJZmxhc2hfb3AgPSBGTEFTSFJPTV9PUEVSX1NBVkU7CisJCW1lbWNweShyZXEtPnBhcmFtcy5kYXRhX2J1ZiwgcCwgbnVtX2J5dGVzKTsKKwkJcCArPSBudW1fYnl0ZXM7CisJCXN0YXR1cyA9IGJlX2NtZF93cml0ZV9mbGFzaHJvbShhZGFwdGVyLCBmbGFzaF9jbWQsCisJCQkJZmxhc2hfdHlwZSwgZmxhc2hfb3AsIG51bV9ieXRlcyk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJjbWQgdG8gd3JpdGUgdG8gZmxhc2ggcm9tIGZhaWxlZC4gdHlwZS9vcCAlZC8lZFxuIiwKKwkJCWZsYXNoX3R5cGUsIGZsYXNoX29wKTsKIAkJCXJldHVybiAtMTsKIAkJfQorCQl5aWVsZCgpOwogCX0KLQkqaGRyX2ZsYWdzID0gTFJPX0lQVjQ7Ci0JaXBoID0gKHN0cnVjdCBpcGhkciAqKSh2YSArIGxsX2hsZW4pOwotCSppcF9oZHIgPSBpcGg7Ci0JaWYgKGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCi0JCXJldHVybiAtMTsKLQkqaGRyX2ZsYWdzIHw9IExST19UQ1A7Ci0JKnRjcHVkcF9oZHIgPSAodTggKikgKCppcF9oZHIpICsgKGlwaC0+aWhsIDw8IDIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGJlX2xyb19pbml0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoraW50IGJlX2xvYWRfZncoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpmdW5jKQogewotCXN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21ncjsKKwljaGFyIGZ3X2ZpbGVbRVRIVE9PTF9GTEFTSF9NQVhfRklMRU5BTUVdOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJc3RydWN0IGZsYXNoX2ZpbGVfaGRyICpmaGRyOworCXN0cnVjdCBmbGFzaF9zZWN0aW9uX2luZm8gKmZzZWMgPSBOVUxMOworCXN0cnVjdCBiZV9kbWFfbWVtIGZsYXNoX2NtZDsKKwlpbnQgc3RhdHVzOworCWNvbnN0IHU4ICpwOworCWJvb2wgZW50cnlfZm91bmQgPSBmYWxzZTsKKwlpbnQgZmxhc2hfdHlwZTsKKwljaGFyIGZ3X3ZlcltGV19WRVJfTEVOXTsKKwljaGFyIGZ3X2NmZzsKIAotCWxyb19tZ3IgPSAmYWRhcHRlci0+cnhfb2JqLmxyb19tZ3I7Ci0JbHJvX21nci0+ZGV2ID0gbmV0ZGV2OwotCWxyb19tZ3ItPmZlYXR1cmVzID0gTFJPX0ZfTkFQSTsKLQlscm9fbWdyLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQlscm9fbWdyLT5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCWxyb19tZ3ItPm1heF9kZXNjID0gQkVfTUFYX0xST19ERVNDUklQVE9SUzsKLQlscm9fbWdyLT5scm9fYXJyID0gYWRhcHRlci0+cnhfb2JqLmxyb19kZXNjOwotCWxyb19tZ3ItPmdldF9mcmFnX2hlYWRlciA9IGJlX2dldF9mcmFnX2hlYWRlcjsKLQlscm9fbWdyLT5tYXhfYWdnciA9IEJFX01BWF9GUkFHU19QRVJfRlJBTUU7CisJc3RhdHVzID0gYmVfY21kX2dldF9md192ZXIoYWRhcHRlciwgZndfdmVyKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJZndfY2ZnID0gKihmd192ZXIgKyAyKTsKKwlpZiAoZndfY2ZnID09ICcwJykKKwkJZndfY2ZnID0gJzEnOworCXN0cmNweShmd19maWxlLCBmdW5jKTsKKworCXN0YXR1cyA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19maWxlLCAmYWRhcHRlci0+cGRldi0+ZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ3X2V4aXQ7CisKKwlwID0gZnctPmRhdGE7CisJZmhkciA9IChzdHJ1Y3QgZmxhc2hfZmlsZV9oZHIgKikgcDsKKwlpZiAobWVtY21wKGZoZHItPnNpZ24sIEZXX0ZJTEVfSERSX1NJR04sIHN0cmxlbihGV19GSUxFX0hEUl9TSUdOKSkpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZpcm13YXJlKCVzKSBsb2FkIGVycm9yIChzaWduYXR1cmUgZGlkIG5vdCBtYXRjaClcbiIsCisJCQkJZndfZmlsZSk7CisJCXN0YXR1cyA9IC0xOworCQlnb3RvIGZ3X2V4aXQ7CisJfQorCisJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIkZsYXNoaW5nIGZpcm13YXJlIGZpbGUgJXNcbiIsIGZ3X2ZpbGUpOworCisJcCArPSBzaXplb2Yoc3RydWN0IGZsYXNoX2ZpbGVfaGRyKTsKKwl3aGlsZSAocCA8IChmdy0+ZGF0YSArIGZ3LT5zaXplKSkgeworCQlmc2VjID0gKHN0cnVjdCBmbGFzaF9zZWN0aW9uX2luZm8gKilwOworCQlpZiAoIW1lbWNtcChmbGFzaF9jb29raWUsIGZzZWMtPmNvb2tpZSwgc2l6ZW9mKGZsYXNoX2Nvb2tpZSkpKSB7CisJCQllbnRyeV9mb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCQlwICs9IDMyOworCX0KKworCWlmICghZW50cnlfZm91bmQpIHsKKwkJc3RhdHVzID0gLTE7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJGbGFzaCBjb29raWUgbm90IGZvdW5kIGluIGZpcm13YXJlIGltYWdlXG4iKTsKKwkJZ290byBmd19leGl0OworCX0KKworCWZsYXNoX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfd3JpdGVfZmxhc2hyb20pICsgMzIqMTAyNDsKKwlmbGFzaF9jbWQudmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBmbGFzaF9jbWQuc2l6ZSwKKwkJCQkJJmZsYXNoX2NtZC5kbWEpOworCWlmICghZmxhc2hfY21kLnZhKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIHdoaWxlIGZsYXNoaW5nXG4iKTsKKwkJZ290byBmd19leGl0OworCX0KKworCWZvciAoZmxhc2hfdHlwZSA9IEZMQVNIUk9NX1RZUEVfSVNDU0lfQUNUSVZFOworCQlmbGFzaF90eXBlIDw9IEZMQVNIUk9NX1RZUEVfRkNPRV9GV19CQUNLVVA7IGZsYXNoX3R5cGUrKykgeworCQlzdGF0dXMgPSBiZV9mbGFzaF9pbWFnZShhZGFwdGVyLCBmdywgJmZsYXNoX2NtZCwKKwkJCQlmbGFzaF90eXBlKTsKKwkJaWYgKHN0YXR1cykKKwkJCWJyZWFrOworCX0KKworCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgZmxhc2hfY21kLnNpemUsIGZsYXNoX2NtZC52YSwKKwkJCQlmbGFzaF9jbWQuZG1hKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIkZpcm13YXJlIGxvYWQgZXJyb3JcbiIpOworCQlnb3RvIGZ3X2V4aXQ7CisJfQorCisJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIkZpcm13YXJlIGZsYXNoZWQgc3VjY2VzZnVsbHlcbiIpOworCitmd19leGl0OgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmVfbmV0ZGV2X29wcyA9IHsKQEAgLTE3MjcsMTggKzE4ODYsMTggQEAKIAogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfVFNPIHwKIAkJTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUiB8IE5FVElGX0ZfSVBfQ1NVTSB8Ci0JCU5FVElGX0ZfSVBWNl9DU1VNOworCQlORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfR1JPOwogCiAJbmV0ZGV2LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOwogCiAJYWRhcHRlci0+cnhfY3N1bSA9IHRydWU7CiAKKwluZXRpZl9zZXRfZ3NvX21heF9zaXplKG5ldGRldiwgNjU1MzUpOworCiAJQkVfU0VUX05FVERFVl9PUFMobmV0ZGV2LCAmYmVfbmV0ZGV2X29wcyk7CiAKIAlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmYmVfZXRodG9vbF9vcHMpOwogCi0JYmVfbHJvX2luaXQoYWRhcHRlciwgbmV0ZGV2KTsKLQogCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPnJ4X2VxLm5hcGksIGJlX3BvbGxfcngsCiAJCUJFX05BUElfV0VJR0hUKTsKIAluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZhZGFwdGVyLT50eF9lcS5uYXBpLCBiZV9wb2xsX3R4X21jYywKQEAgLTE3NTAsMTMgKzE5MDksMTIgQEAKIAogc3RhdGljIHZvaWQgYmVfdW5tYXBfcGNpX2JhcnMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwotCWlmIChjdHJsLT5jc3IpCi0JCWlvdW5tYXAoY3RybC0+Y3NyKTsKLQlpZiAoY3RybC0+ZGIpCi0JCWlvdW5tYXAoY3RybC0+ZGIpOwotCWlmIChjdHJsLT5wY2ljZmcpCi0JCWlvdW5tYXAoY3RybC0+cGNpY2ZnKTsKKwlpZiAoYWRhcHRlci0+Y3NyKQorCQlpb3VubWFwKGFkYXB0ZXItPmNzcik7CisJaWYgKGFkYXB0ZXItPmRiKQorCQlpb3VubWFwKGFkYXB0ZXItPmRiKTsKKwlpZiAoYWRhcHRlci0+cGNpY2ZnKQorCQlpb3VubWFwKGFkYXB0ZXItPnBjaWNmZyk7CiB9CiAKIHN0YXRpYyBpbnQgYmVfbWFwX3BjaV9iYXJzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMTc2NywxOSArMTkyNSwxOSBAQAogCQkJcGNpX3Jlc291cmNlX2xlbihhZGFwdGVyLT5wZGV2LCAyKSk7CiAJaWYgKGFkZHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JYWRhcHRlci0+Y3RybC5jc3IgPSBhZGRyOworCWFkYXB0ZXItPmNzciA9IGFkZHI7CiAKIAlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChhZGFwdGVyLT5wZGV2LCA0KSwKIAkJCTEyOCAqIDEwMjQpOwogCWlmIChhZGRyID09IE5VTEwpCiAJCWdvdG8gcGNpX21hcF9lcnI7Ci0JYWRhcHRlci0+Y3RybC5kYiA9IGFkZHI7CisJYWRhcHRlci0+ZGIgPSBhZGRyOwogCiAJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMSksCiAJCQlwY2lfcmVzb3VyY2VfbGVuKGFkYXB0ZXItPnBkZXYsIDEpKTsKIAlpZiAoYWRkciA9PSBOVUxMKQogCQlnb3RvIHBjaV9tYXBfZXJyOwotCWFkYXB0ZXItPmN0cmwucGNpY2ZnID0gYWRkcjsKKwlhZGFwdGVyLT5wY2ljZmcgPSBhZGRyOwogCiAJcmV0dXJuIDA7CiBwY2lfbWFwX2VycjoKQEAgLTE3OTAsNyArMTk0OCw3IEBACiAKIHN0YXRpYyB2b2lkIGJlX2N0cmxfY2xlYW51cChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtID0gJmFkYXB0ZXItPmN0cmwubWJveF9tZW1fYWxsb2NlZDsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtID0gJmFkYXB0ZXItPm1ib3hfbWVtX2FsbG9jZWQ7CiAKIAliZV91bm1hcF9wY2lfYmFycyhhZGFwdGVyKTsKIApAQCAtMTc5OSwxNCArMTk1NywxMSBAQAogCQkJbWVtLT52YSwgbWVtLT5kbWEpOwogfQogCi0vKiBJbml0aWFsaXplIHRoZSBtYm94IHJlcXVpcmVkIHRvIHNlbmQgY21kcyB0byBCRSAqLwogc3RhdGljIGludCBiZV9jdHJsX2luaXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwotCXN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbV9hbGxvYyA9ICZjdHJsLT5tYm94X21lbV9hbGxvY2VkOwotCXN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbV9hbGlnbiA9ICZjdHJsLT5tYm94X21lbTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW1fYWxsb2MgPSAmYWRhcHRlci0+bWJveF9tZW1fYWxsb2NlZDsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW1fYWxpZ24gPSAmYWRhcHRlci0+bWJveF9tZW07CiAJaW50IHN0YXR1czsKLQl1MzIgdmFsOwogCiAJc3RhdHVzID0gYmVfbWFwX3BjaV9iYXJzKGFkYXB0ZXIpOwogCWlmIChzdGF0dXMpCkBAIC0xODIzLDE2ICsxOTc4LDEwIEBACiAJbWJveF9tZW1fYWxpZ24tPnZhID0gUFRSX0FMSUdOKG1ib3hfbWVtX2FsbG9jLT52YSwgMTYpOwogCW1ib3hfbWVtX2FsaWduLT5kbWEgPSBQVFJfQUxJR04obWJveF9tZW1fYWxsb2MtPmRtYSwgMTYpOwogCW1lbXNldChtYm94X21lbV9hbGlnbi0+dmEsIDAsIHNpemVvZihzdHJ1Y3QgYmVfbWNjX21haWxib3gpKTsKLQlzcGluX2xvY2tfaW5pdCgmY3RybC0+bWJveF9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmY3RybC0+bWNjX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZjdHJsLT5tY2NfY3FfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPm1jY19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+bWNjX2NxX2xvY2spOwogCi0JY3RybC0+YXN5bmNfY2IgPSBiZV9saW5rX3N0YXR1c191cGRhdGU7Ci0JY3RybC0+YWRhcHRlcl9jdHh0ID0gYWRhcHRlcjsKLQotCXZhbCA9IGlvcmVhZDMyKGN0cmwtPnBjaWNmZyArIFBDSUNGR19NRU1CQVJfQ1RSTF9JTlRfQ1RSTF9PRkZTRVQpOwotCWN0cmwtPnBjaV9mdW5jID0gKHZhbCA+PiBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9QRlVOQ19TSElGVCkgJgotCQkJCQlNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9QRlVOQ19NQVNLOwogCXJldHVybiAwOwogfQogCkBAIC0xODg2LDE4ICsyMDM1LDE3IEBACiAKIHN0YXRpYyBpbnQgYmVfaHdfdXAoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwogCWludCBzdGF0dXM7CiAKLQlzdGF0dXMgPSBiZV9jbWRfUE9TVChjdHJsKTsKKwlzdGF0dXMgPSBiZV9jbWRfUE9TVChhZGFwdGVyKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwogCi0Jc3RhdHVzID0gYmVfY21kX2dldF9md192ZXIoY3RybCwgYWRhcHRlci0+ZndfdmVyKTsKKwlzdGF0dXMgPSBiZV9jbWRfZ2V0X2Z3X3ZlcihhZGFwdGVyLCBhZGFwdGVyLT5md192ZXIpOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKLQlzdGF0dXMgPSBiZV9jbWRfcXVlcnlfZndfY2ZnKGN0cmwsICZhZGFwdGVyLT5wb3J0X251bSk7CisJc3RhdHVzID0gYmVfY21kX3F1ZXJ5X2Z3X2NmZyhhZGFwdGVyLCAmYWRhcHRlci0+cG9ydF9udW0pOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTE5MDcsNyArMjA1NSw2IEBACiAJaW50IHN0YXR1cyA9IDA7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKLQlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsOwogCXU4IG1hY1tFVEhfQUxFTl07CiAKIAlzdGF0dXMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKQEAgLTE5NDIsMTEgKzIwODksMTQgQEAKIAkJfQogCX0KIAotCWN0cmwgPSAmYWRhcHRlci0+Y3RybDsKIAlzdGF0dXMgPSBiZV9jdHJsX2luaXQoYWRhcHRlcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBmcmVlX25ldGRldjsKIAorCXN0YXR1cyA9IGJlX2NtZF9yZXNldF9mdW5jdGlvbihhZGFwdGVyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGN0cmxfY2xlYW47CisKIAlzdGF0dXMgPSBiZV9zdGF0c19pbml0KGFkYXB0ZXIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gY3RybF9jbGVhbjsKQEAgLTE5NTUsNyArMjEwNSw3IEBACiAJaWYgKHN0YXR1cykKIAkJZ290byBzdGF0c19jbGVhbjsKIAotCXN0YXR1cyA9IGJlX2NtZF9tYWNfYWRkcl9xdWVyeShjdHJsLCBtYWMsIE1BQ19BRERSRVNTX1RZUEVfTkVUV09SSywKKwlzdGF0dXMgPSBiZV9jbWRfbWFjX2FkZHJfcXVlcnkoYWRhcHRlciwgbWFjLCBNQUNfQUREUkVTU19UWVBFX05FVFdPUkssCiAJCQl0cnVlIC8qIHBlcm1hbmVudCAqLywgMCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBzdGF0c19jbGVhbjsKQEAgLTIwMDEsOSArMjE1MSw5IEBACiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCQlydG5sX2xvY2soKTsKIAkJYmVfY2xvc2UobmV0ZGV2KTsKLQkJYmVfY2xlYXIoYWRhcHRlcik7CiAJCXJ0bmxfdW5sb2NrKCk7CiAJfQorCWJlX2NsZWFyKGFkYXB0ZXIpOwogCiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtMjAyNiw5ICsyMTc2LDkgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCisJYmVfc2V0dXAoYWRhcHRlcik7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCQlydG5sX2xvY2soKTsKLQkJYmVfc2V0dXAoYWRhcHRlcik7CiAJCWJlX29wZW4obmV0ZGV2KTsKIAkJcnRubF91bmxvY2soKTsKIAl9CkBAIC0yMDU0LDEyICsyMjA0LDYgQEAKIAkJCSIgVXNpbmcgMjA0OFxuIik7CiAJCXJ4X2ZyYWdfc2l6ZSA9IDIwNDg7CiAJfQotCS8qIEVuc3VyZSByeF9mcmFnX3NpemUgaXMgYWxpZ25lZCB0byBjaGFjaGUgbGluZSAqLwotCWlmIChTS0JfREFUQV9BTElHTihyeF9mcmFnX3NpemUpICE9IHJ4X2ZyYWdfc2l6ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCQkiIDogQmFkIG1vZHVsZSBwYXJhbSByeF9mcmFnX3NpemUuIFVzaW5nIDIwNDhcbiIpOwotCQlyeF9mcmFnX3NpemUgPSAyMDQ4OwotCX0KIAogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZiZV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmZpbl9tYWMuYyBiL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKaW5kZXggYzE1ZmMyOC4uMTRiZDM4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmZpbl9tYWMuYworKysgYi9kcml2ZXJzL25ldC9iZmluX21hYy5jCkBAIC00OTEsNyArNDkxLDcgQEAKIAlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKCZkZXYtPmRldikpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGJmaW5fbWFjX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBiZmluX21hY19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzID0gYmZpbl9tYWNfZXRodG9vbF9nZXRzZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gYmZpbl9tYWNfZXRodG9vbF9zZXRzZXR0aW5ncywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLApAQCAtNjU2LDcgKzY1Niw3IEBACiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSAoc2tiLT5sZW4pOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIGJmaW5fbWFjX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibWFjLmMgYi9kcml2ZXJzL25ldC9ibWFjLmMKaW5kZXggMjA2MTQ0Zi4uNDA2ZjA2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2JtYWMuYwpAQCAtMTQ4OSw3ICsxNDg5LDcgQEAKIAlzdHJ1Y3QgYm1hY19kYXRhICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJc2tiX3F1ZXVlX3RhaWwoYnAtPnF1ZXVlLCBza2IpOwogCWJtYWNfc3RhcnQoZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBibWFjX3R4X3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5jIGIvZHJpdmVycy9uZXQvYm54Mi5jCmluZGV4IDA2YjkwMTEuLjA4Y2RkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuYworKysgYi9kcml2ZXJzL25ldC9ibngyLmMKQEAgLTU5LDEyICs1OSwxMyBAQAogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDIiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjIuMC4xIgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk1heSA2LCAyMDA5IgotI2RlZmluZSBGV19NSVBTX0ZJTEVfMDYJCSJibngyL2JueDItbWlwcy0wNi00LjYuMTYuZnciCi0jZGVmaW5lIEZXX1JWMlBfRklMRV8wNgkJImJueDIvYm54Mi1ydjJwLTA2LTQuNi4xNi5mdyIKLSNkZWZpbmUgRldfTUlQU19GSUxFXzA5CQkiYm54Mi9ibngyLW1pcHMtMDktNC42LjE3LmZ3IgotI2RlZmluZSBGV19SVjJQX0ZJTEVfMDkJCSJibngyL2JueDItcnYycC0wOS00LjYuMTUuZnciCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMi4wLjIiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiQXVnIDIxLCAyMDA5IgorI2RlZmluZSBGV19NSVBTX0ZJTEVfMDYJCSJibngyL2JueDItbWlwcy0wNi01LjAuMC5qMy5mdyIKKyNkZWZpbmUgRldfUlYyUF9GSUxFXzA2CQkiYm54Mi9ibngyLXJ2MnAtMDYtNS4wLjAuajMuZnciCisjZGVmaW5lIEZXX01JUFNfRklMRV8wOQkJImJueDIvYm54Mi1taXBzLTA5LTUuMC4wLmozLmZ3IgorI2RlZmluZSBGV19SVjJQX0ZJTEVfMDlfQXgJImJueDIvYm54Mi1ydjJwLTA5YXgtNS4wLjAuajMuZnciCisjZGVmaW5lIEZXX1JWMlBfRklMRV8wOQkJImJueDIvYm54Mi1ydjJwLTA5LTUuMC4wLmozLmZ3IgogCiAjZGVmaW5lIFJVTl9BVCh4KSAoamlmZmllcyArICh4KSkKIApAQCAtODIsNiArODMsNyBAQAogTU9EVUxFX0ZJUk1XQVJFKEZXX1JWMlBfRklMRV8wNik7CiBNT0RVTEVfRklSTVdBUkUoRldfTUlQU19GSUxFXzA5KTsKIE1PRFVMRV9GSVJNV0FSRShGV19SVjJQX0ZJTEVfMDkpOworTU9EVUxFX0ZJUk1XQVJFKEZXX1JWMlBfRklMRV8wOV9BeCk7CiAKIHN0YXRpYyBpbnQgZGlzYWJsZV9tc2kgPSAwOwogCkBAIC0xNDUsNyArMTQ3LDcgQEAKIAl7IDAsIH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfc3BlYyBmbGFzaF90YWJsZVtdID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmxhc2hfc3BlYyBmbGFzaF90YWJsZVtdID0KIHsKICNkZWZpbmUgQlVGRkVSRURfRkxBR1MJCShCTlgyX05WX0JVRkZFUkVEIHwgQk5YMl9OVl9UUkFOU0xBVEUpCiAjZGVmaW5lIE5PTkJVRkZFUkVEX0ZMQUdTCShCTlgyX05WX1dSRU4pCkBAIC0yMzQsNyArMjM2LDcgQEAKIAkgIkJ1ZmZlcmVkIGZsYXNoICgyNTZrQikifSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfc3BlYyBmbGFzaF81NzA5ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmbGFzaF9zcGVjIGZsYXNoXzU3MDkgPSB7CiAJLmZsYWdzCQk9IEJOWDJfTlZfQlVGRkVSRUQsCiAJLnBhZ2VfYml0cwk9IEJDTTU3MDlfRkxBU0hfUEFHRV9CSVRTLAogCS5wYWdlX3NpemUJPSBCQ001NzA5X0ZMQVNIX1BBR0VfU0laRSwKQEAgLTYyMSw2ICs2MjMsOSBAQAogCWludCBpOwogCiAJYXRvbWljX2luYygmYnAtPmludHJfc2VtKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnAtPmRldikpCisJCXJldHVybjsKKwogCWJueDJfZGlzYWJsZV9pbnQoYnApOwogCWZvciAoaSA9IDA7IGkgPCBicC0+aXJxX252ZWNzOyBpKyspCiAJCXN5bmNocm9uaXplX2lycShicC0+aXJxX3RibFtpXS52ZWN0b3IpOwpAQCAtMzYyMCw3ICszNjI1LDExIEBACiAKIAlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDkpIHsKIAkJbWlwc19md19maWxlID0gRldfTUlQU19GSUxFXzA5OwotCQlydjJwX2Z3X2ZpbGUgPSBGV19SVjJQX0ZJTEVfMDk7CisJCWlmICgoQ0hJUF9JRChicCkgPT0gQ0hJUF9JRF81NzA5X0EwKSB8fAorCQkgICAgKENISVBfSUQoYnApID09IENISVBfSURfNTcwOV9BMSkpCisJCQlydjJwX2Z3X2ZpbGUgPSBGV19SVjJQX0ZJTEVfMDlfQXg7CisJCWVsc2UKKwkJCXJ2MnBfZndfZmlsZSA9IEZXX1JWMlBfRklMRV8wOTsKIAl9IGVsc2UgewogCQltaXBzX2Z3X2ZpbGUgPSBGV19NSVBTX0ZJTEVfMDY7CiAJCXJ2MnBfZndfZmlsZSA9IEZXX1JWMlBfRklMRV8wNjsKQEAgLTQyMjYsNyArNDIzNSw3IEBACiB7CiAJdTMyIHZhbDsKIAlpbnQgaiwgZW50cnlfY291bnQsIHJjID0gMDsKLQlzdHJ1Y3QgZmxhc2hfc3BlYyAqZmxhc2g7CisJY29uc3Qgc3RydWN0IGZsYXNoX3NwZWMgKmZsYXNoOwogCiAJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KSB7CiAJCWJwLT5mbGFzaF9pbmZvID0gJmZsYXNoXzU3MDk7CkBAIC00ODYwLDYgKzQ4NjksNyBAQAogCWJueDJfcmVnX3dyX2luZChicCwgQk5YMl9SQlVGX0NPTkZJRzIsIEJOWDJfUkJVRl9DT05GSUcyX1ZBTChtdHUpKTsKIAlibngyX3JlZ193cl9pbmQoYnAsIEJOWDJfUkJVRl9DT05GSUczLCBCTlgyX1JCVUZfQ09ORklHM19WQUwobXR1KSk7CiAKKwltZW1zZXQoYnAtPmJueDJfbmFwaVswXS5zdGF0dXNfYmxrLm1zaSwgMCwgYnAtPnN0YXR1c19zdGF0c19zaXplKTsKIAlmb3IgKGkgPSAwOyBpIDwgQk5YMl9NQVhfTVNJWF9WRUM7IGkrKykKIAkJYnAtPmJueDJfbmFwaVtpXS5sYXN0X3N0YXR1c19pZHggPSAwOwogCkBAIC00ODk4LDcgKzQ5MDgsNyBAQAogCVJFR19XUihicCwgQk5YMl9IQ19DTURfVElDS1MsCiAJICAgICAgIChicC0+Y21kX3RpY2tzX2ludCA8PCAxNikgfCBicC0+Y21kX3RpY2tzKTsKIAotCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOCkKKwlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX0JST0tFTl9TVEFUUykKIAkJUkVHX1dSKGJwLCBCTlgyX0hDX1NUQVRTX1RJQ0tTLCAwKTsKIAllbHNlCiAJCVJFR19XUihicCwgQk5YMl9IQ19TVEFUU19USUNLUywgYnAtPnN0YXRzX3RpY2tzKTsKQEAgLTQ5MTksNyArNDkyOSw3IEBACiAJfQogCiAJaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19PTkVfU0hPVF9NU0kpCi0JCXZhbCB8PSBCTlgyX0hDX0NPTkZJR19PTkVfU0hPVDsKKwkJdmFsIHw9IEJOWDJfSENfQ09ORklHX09ORV9TSE9UIHwgQk5YMl9IQ19DT05GSUdfVVNFX0lOVF9QQVJBTTsKIAogCVJFR19XUihicCwgQk5YMl9IQ19DT05GSUcsIHZhbCk7CiAKQEAgLTYwMjMsNyArNjAzMyw3IEBACiAJCWJueDJfcmVnX3JkX2luZChicCwgQk5YMl9GV19SWF9EUk9QX0NPVU5UKTsKIAogCS8qIHdvcmthcm91bmQgb2NjYXNpb25hbCBjb3JydXB0ZWQgY291bnRlcnMgKi8KLQlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDggJiYgYnAtPnN0YXRzX3RpY2tzKQorCWlmICgoYnAtPmZsYWdzICYgQk5YMl9GTEFHX0JST0tFTl9TVEFUUykgJiYgYnAtPnN0YXRzX3RpY2tzKQogCQlSRUdfV1IoYnAsIEJOWDJfSENfQ09NTUFORCwgYnAtPmhjX2NtZCB8CiAJCQkJCSAgICBCTlgyX0hDX0NPTU1BTkRfU1RBVFNfTk9XKTsKIApAQCAtNjI1NSw5ICs2MjY1LDE0IEBACiB7CiAJc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWJueDJfbmV0aWZfc3RvcChicCk7CisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJYm54Ml9uZXRpZl9zdG9wKGJwKTsKIAogCWJwLT52bGdycCA9IHZsZ3JwOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybjsKKwogCWJueDJfc2V0X3J4X21vZGUoZGV2KTsKIAlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX0NBTl9LRUVQX1ZMQU4pCiAJCWJueDJfZndfc3luYyhicCwgQk5YMl9EUlZfTVNHX0NPREVfS0VFUF9WTEFOX1VQREFURSwgMCwgMSk7CkBAIC02MjcwLDcgKzYyODUsNyBAQAogICogYm54Ml90eF9pbnQoKSBydW5zIHdpdGhvdXQgbmV0aWZfdHhfbG9jayB1bmxlc3MgaXQgbmVlZHMgdG8gY2FsbAogICogbmV0aWZfd2FrZV9xdWV1ZSgpLgogICovCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIGJueDJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBibngyICpicCA9IG5ldGRldl9wcml2KGRldik7CkBAIC02NDc4LDcgKzY0OTMsOCBAQAogCQlzdGF0c19ibGstPnN0YXRfRXRoZXJTdGF0c092ZXJyc2l6ZVBrdHMpOwogCiAJbmV0X3N0YXRzLT5yeF9vdmVyX2Vycm9ycyA9Ci0JCSh1bnNpZ25lZCBsb25nKSBzdGF0c19ibGstPnN0YXRfSWZJbk1CVUZEaXNjYXJkczsKKwkJKHVuc2lnbmVkIGxvbmcpIChzdGF0c19ibGstPnN0YXRfSWZJbkZUUURpc2NhcmRzICsKKwkJc3RhdHNfYmxrLT5zdGF0X0lmSW5NQlVGRGlzY2FyZHMpOwogCiAJbmV0X3N0YXRzLT5yeF9mcmFtZV9lcnJvcnMgPQogCQkodW5zaWduZWQgbG9uZykgc3RhdHNfYmxrLT5zdGF0X0RvdDNTdGF0c0FsaWdubWVudEVycm9yczsKQEAgLTY1MTEsOCArNjUyNyw4IEBACiAJCW5ldF9zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnM7CiAKIAluZXRfc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgPQotCQkodW5zaWduZWQgbG9uZykgKHN0YXRzX2Jsay0+c3RhdF9JZkluTUJVRkRpc2NhcmRzICsKLQkJc3RhdHNfYmxrLT5zdGF0X0Z3UnhEcm9wKTsKKwkJKHVuc2lnbmVkIGxvbmcpIChzdGF0c19ibGstPnN0YXRfSWZJbkZUUURpc2NhcmRzICsKKwkJc3RhdHNfYmxrLT5zdGF0X0lmSW5NQlVGRGlzY2FyZHMgKyBzdGF0c19ibGstPnN0YXRfRndSeERyb3ApOwogCiAJcmV0dXJuIG5ldF9zdGF0czsKIH0KQEAgLTY5MzQsNyArNjk1MCw3IEBACiAJCTB4ZmY7CiAKIAlicC0+c3RhdHNfdGlja3MgPSBjb2FsLT5zdGF0c19ibG9ja19jb2FsZXNjZV91c2VjczsKLQlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDgpIHsKKwlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX0JST0tFTl9TVEFUUykgewogCQlpZiAoYnAtPnN0YXRzX3RpY2tzICE9IDAgJiYgYnAtPnN0YXRzX3RpY2tzICE9IFVTRUNfUEVSX1NFQykKIAkJCWJwLT5zdGF0c190aWNrcyA9IFVTRUNfUEVSX1NFQzsKIAl9CkBAIC02OTg1LDkgKzcwMDEsMTQgQEAKIAkJaW50IHJjOwogCiAJCXJjID0gYm54Ml9hbGxvY19tZW0oYnApOwotCQlpZiAocmMpCisJCWlmICghcmMpCisJCQlyYyA9IGJueDJfaW5pdF9uaWMoYnAsIDApOworCisJCWlmIChyYykgeworCQkJYm54Ml9uYXBpX2VuYWJsZShicCk7CisJCQlkZXZfY2xvc2UoYnAtPmRldik7CiAJCQlyZXR1cm4gcmM7Ci0JCWJueDJfaW5pdF9uaWMoYnAsIDApOworCQl9CiAJCWJueDJfbmV0aWZfc3RhcnQoYnApOwogCX0KIAlyZXR1cm4gMDsKQEAgLTcwNzgsMTEgKzcwOTksOSBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIEJOWDJfTlVNX1NUQVRTIDQ2Ci0KIHN0YXRpYyBzdHJ1Y3QgewogCWNoYXIgc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07Ci19IGJueDJfc3RhdHNfc3RyX2FycltCTlgyX05VTV9TVEFUU10gPSB7Cit9IGJueDJfc3RhdHNfc3RyX2FycltdID0gewogCXsgInJ4X2J5dGVzIiB9LAogCXsgInJ4X2Vycm9yX2J5dGVzIiB9LAogCXsgInR4X2J5dGVzIiB9LApAQCAtNzEyNywxMCArNzE0NiwxNCBAQAogCXsgInR4X3hvZmZfZnJhbWVzIiB9LAogCXsgInJ4X21hY19jdHJsX2ZyYW1lcyIgfSwKIAl7ICJyeF9maWx0ZXJlZF9wYWNrZXRzIiB9LAorCXsgInJ4X2Z0cV9kaXNjYXJkcyIgfSwKIAl7ICJyeF9kaXNjYXJkcyIgfSwKIAl7ICJyeF9md19kaXNjYXJkcyIgfSwKIH07CiAKKyNkZWZpbmUgQk5YMl9OVU1fU1RBVFMgKHNpemVvZihibngyX3N0YXRzX3N0cl9hcnIpL1wKKwkJCXNpemVvZihibngyX3N0YXRzX3N0cl9hcnJbMF0pKQorCiAjZGVmaW5lIFNUQVRTX09GRlNFVDMyKG9mZnNldF9uYW1lKSAob2Zmc2V0b2Yoc3RydWN0IHN0YXRpc3RpY3NfYmxvY2ssIG9mZnNldF9uYW1lKSAvIDQpCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGJueDJfc3RhdHNfb2Zmc2V0X2FycltCTlgyX05VTV9TVEFUU10gPSB7CkBAIC03MTc4LDYgKzcyMDEsNyBAQAogICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfT3V0WG9mZlNlbnQpLAogICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfTWFjQ29udHJvbEZyYW1lc1JlY2VpdmVkKSwKICAgICBTVEFUU19PRkZTRVQzMihzdGF0X0lmSW5GcmFtZXNMMkZpbHRlckRpc2NhcmRzKSwKKyAgICBTVEFUU19PRkZTRVQzMihzdGF0X0lmSW5GVFFEaXNjYXJkcyksCiAgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9JZkluTUJVRkRpc2NhcmRzKSwKICAgICBTVEFUU19PRkZTRVQzMihzdGF0X0Z3UnhEcm9wKSwKIH07CkBAIC03MTkwLDcgKzcyMTQsNyBAQAogCTQsMCw0LDQsNCw0LDQsNCw0LDQsCiAJNCw0LDQsNCw0LDQsNCw0LDQsNCwKIAk0LDQsNCw0LDQsNCw0LDQsNCw0LAotCTQsNCw0LDQsNCw0LAorCTQsNCw0LDQsNCw0LDQsCiB9OwogCiBzdGF0aWMgdTggYm54Ml81NzA4X3N0YXRzX2xlbl9hcnJbQk5YMl9OVU1fU1RBVFNdID0gewpAQCAtNzE5OCw3ICs3MjIyLDcgQEAKIAk0LDQsNCw0LDQsNCw0LDQsNCw0LAogCTQsNCw0LDQsNCw0LDQsNCw0LDQsCiAJNCw0LDQsNCw0LDQsNCw0LDQsNCwKLQk0LDQsNCw0LDQsNCwKKwk0LDQsNCw0LDQsNCw0LAogfTsKIAogI2RlZmluZSBCTlgyX05VTV9URVNUUyA2CkBAIC03NDU2LDkgKzc0ODAsNiBAQAogCX0KIAogCWNhc2UgU0lPQ1NNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0KIAkJaWYgKGJwLT5waHlfZmxhZ3MgJiBCTlgyX1BIWV9GTEFHX1JFTU9URV9QSFlfQ0FQKQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC03NzEzLDYgKzc3MzQsNyBAQAogCQkJcmMgPSAtRUlPOwogCQkJZ290byBlcnJfb3V0X3VubWFwOwogCQl9CisJCWJwLT5mbGFncyB8PSBCTlgyX0ZMQUdfQlJPS0VOX1NUQVRTOwogCX0KIAogCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSAmJiBDSElQX1JFVihicCkgIT0gQ0hJUF9SRVZfQXgpIHsKQEAgLTc4NDQsMTMgKzc4NjYsMTMgQEAKIAogCWJwLT5yeF9jc3VtID0gMTsKIAotCWJwLT50eF9xdWlja19jb25zX3RyaXBfaW50ID0gMjA7CisJYnAtPnR4X3F1aWNrX2NvbnNfdHJpcF9pbnQgPSAyOwogCWJwLT50eF9xdWlja19jb25zX3RyaXAgPSAyMDsKLQlicC0+dHhfdGlja3NfaW50ID0gODA7CisJYnAtPnR4X3RpY2tzX2ludCA9IDE4OwogCWJwLT50eF90aWNrcyA9IDgwOwogCi0JYnAtPnJ4X3F1aWNrX2NvbnNfdHJpcF9pbnQgPSA2OwotCWJwLT5yeF9xdWlja19jb25zX3RyaXAgPSA2OworCWJwLT5yeF9xdWlja19jb25zX3RyaXBfaW50ID0gMjsKKwlicC0+cnhfcXVpY2tfY29uc190cmlwID0gMTI7CiAJYnAtPnJ4X3RpY2tzX2ludCA9IDE4OwogCWJwLT5yeF90aWNrcyA9IDE4OwogCkBAIC04MDI4LDYgKzgwNTAsMTMgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIHZvaWQgaW5saW5lIHZsYW5fZmVhdHVyZXNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisjaWZkZWYgQkNNX1ZMQU4KKwlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gZmxhZ3M7CisjZW5kaWYKK30KKwogc3RhdGljIGludCBfX2RldmluaXQKIGJueDJfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CkBAIC04MDY5LDE2ICs4MDk4LDIwIEBACiAJbWVtY3B5KGRldi0+cGVybV9hZGRyLCBicC0+bWFjX2FkZHIsIDYpOwogCiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHOwotCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkKKwl2bGFuX2ZlYXR1cmVzX2FkZChkZXYsIE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cpOworCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkgewogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwotCisJCXZsYW5fZmVhdHVyZXNfYWRkKGRldiwgTkVUSUZfRl9JUFY2X0NTVU0pOworCX0KICNpZmRlZiBCQ01fVkxBTgogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwogI2VuZGlmCiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTjsKLQlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDkpCisJdmxhbl9mZWF0dXJlc19hZGQoZGV2LCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTik7CisJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KSB7CiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCisJCXZsYW5fZmVhdHVyZXNfYWRkKGRldiwgTkVUSUZfRl9UU082KTsKKwl9CiAJaWYgKChyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZVxuIik7CiAJCWdvdG8gZXJyb3I7CkBAIC04MTkzLDYgKzgyMjYsMTEgQEAKIAlydG5sX2xvY2soKTsKIAluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSB7CisJCXJ0bmxfdW5sb2NrKCk7CisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCX0KKwogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJYm54Ml9uZXRpZl9zdG9wKGJwKTsKIAkJZGVsX3RpbWVyX3N5bmMoJmJwLT50aW1lcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmggYi9kcml2ZXJzL25ldC9ibngyLmgKaW5kZXggYTRmMTJmZC4uNmM3Zjc5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuaApAQCAtNjcxOCw2ICs2NzE4LDcgQEAKIAkJCQkJIEJOWDJfRkxBR19VU0lOR19NU0lYKQogI2RlZmluZSBCTlgyX0ZMQUdfSlVNQk9fQlJPS0VOCQkweDAwMDAwODAwCiAjZGVmaW5lIEJOWDJfRkxBR19DQU5fS0VFUF9WTEFOCQkweDAwMDAxMDAwCisjZGVmaW5lIEJOWDJfRkxBR19CUk9LRU5fU1RBVFMJCTB4MDAwMDIwMDAKIAogCXN0cnVjdCBibngyX25hcGkJYm54Ml9uYXBpW0JOWDJfTUFYX01TSVhfVkVDXTsKIApAQCAtNjg4OCw3ICs2ODg5LDcgQEAKIAlpbnQJCQlwbV9jYXA7CiAJaW50CQkJcGNpeF9jYXA7CiAKLQlzdHJ1Y3QgZmxhc2hfc3BlYwkqZmxhc2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgZmxhc2hfc3BlYwkqZmxhc2hfaW5mbzsKIAl1MzIJCQlmbGFzaF9zaXplOwogCiAJaW50CQkJc3RhdHVzX3N0YXRzX3NpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC5oIGIvZHJpdmVycy9uZXQvYm54MnguaAppbmRleCA4NWE3MzdjLi5iYmY4NDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4LmgKQEAgLTMwLDYgKzMwLDggQEAKICNkZWZpbmUgQk5YMlhfTkVXX05BUEkKIAogCisKKyNpbmNsdWRlIDxsaW51eC9tZGlvLmg+CiAjaW5jbHVkZSAiYm54MnhfcmVnLmgiCiAjaW5jbHVkZSAiYm54MnhfZndfZGVmcy5oIgogI2luY2x1ZGUgImJueDJ4X2hzaS5oIgpAQCAtODcsNiArODksNyBAQAogCX0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBibngyeF9wYW5pYygpIGRvIHsgXAorCQlicC0+cGFuaWMgPSAxOyBcCiAJCUJOWDJYX0VSUigiZHJpdmVyIGFzc2VydFxuIik7IFwKIAkJYm54MnhfcGFuaWNfZHVtcChicCk7IFwKIAl9IHdoaWxlICgwKQpAQCAtMTEzLDIxICsxMTYsMzIgQEAKICNkZWZpbmUgUkVHX1JEX0RNQUUoYnAsIG9mZnNldCwgdmFscCwgbGVuMzIpIFwKIAlkbyB7IFwKIAkJYm54MnhfcmVhZF9kbWFlKGJwLCBvZmZzZXQsIGxlbjMyKTtcCi0JCW1lbWNweSh2YWxwLCBibngyeF9zcChicCwgd2JfZGF0YVswXSksIGxlbjMyICogNCk7IFwKKwkJbWVtY3B5KHZhbHAsIGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKSwgKGxlbjMyKSAqIDQpOyBcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBSRUdfV1JfRE1BRShicCwgb2Zmc2V0LCB2YWxwLCBsZW4zMikgXAogCWRvIHsgXAotCQltZW1jcHkoYm54Mnhfc3AoYnAsIHdiX2RhdGFbMF0pLCB2YWxwLCBsZW4zMiAqIDQpOyBcCisJCW1lbWNweShibngyeF9zcChicCwgd2JfZGF0YVswXSksIHZhbHAsIChsZW4zMikgKiA0KTsgXAogCQlibngyeF93cml0ZV9kbWFlKGJwLCBibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9kYXRhKSwgXAogCQkJCSBvZmZzZXQsIGxlbjMyKTsgXAogCX0gd2hpbGUgKDApCiAKKyNkZWZpbmUgVklSVF9XUl9ETUFFX0xFTihicCwgZGF0YSwgYWRkciwgbGVuMzIpIFwKKwlkbyB7IFwKKwkJbWVtY3B5KEdVTlpJUF9CVUYoYnApLCBkYXRhLCAobGVuMzIpICogNCk7IFwKKwkJYm54Mnhfd3JpdGVfYmlnX2J1Zl93YihicCwgYWRkciwgbGVuMzIpOyBcCisJfSB3aGlsZSAoMCkKKwogI2RlZmluZSBTSE1FTV9BRERSKGJwLCBmaWVsZCkJCShicC0+Y29tbW9uLnNobWVtX2Jhc2UgKyBcCiAJCQkJCSBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLCBmaWVsZCkpCiAjZGVmaW5lIFNITUVNX1JEKGJwLCBmaWVsZCkJCVJFR19SRChicCwgU0hNRU1fQUREUihicCwgZmllbGQpKQogI2RlZmluZSBTSE1FTV9XUihicCwgZmllbGQsIHZhbCkJUkVHX1dSKGJwLCBTSE1FTV9BRERSKGJwLCBmaWVsZCksIHZhbCkKIAorI2RlZmluZSBTSE1FTTJfQUREUihicCwgZmllbGQpCQkoYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSArIFwKKwkJCQkJIG9mZnNldG9mKHN0cnVjdCBzaG1lbTJfcmVnaW9uLCBmaWVsZCkpCisjZGVmaW5lIFNITUVNMl9SRChicCwgZmllbGQpCQlSRUdfUkQoYnAsIFNITUVNMl9BRERSKGJwLCBmaWVsZCkpCisjZGVmaW5lIFNITUVNMl9XUihicCwgZmllbGQsIHZhbCkJUkVHX1dSKGJwLCBTSE1FTTJfQUREUihicCwgZmllbGQpLCB2YWwpCisKICNkZWZpbmUgRU1BQ19SRChicCwgcmVnKQkJUkVHX1JEKGJwLCBlbWFjX2Jhc2UgKyByZWcpCiAjZGVmaW5lIEVNQUNfV1IoYnAsIHJlZywgdmFsKQkJUkVHX1dSKGJwLCBlbWFjX2Jhc2UgKyByZWcsIHZhbCkKIApAQCAtMTQyLDYgKzE1Niw5IEBACiBzdHJ1Y3Qgc3dfdHhfYmQgewogCXN0cnVjdCBza19idWZmCSpza2I7CiAJdTE2CQlmaXJzdF9iZDsKKwl1OAkJZmxhZ3M7CisvKiBTZXQgb24gdGhlIGZpcnN0IEJEIGRlc2NyaXB0b3Igd2hlbiB0aGVyZSBpcyBhIHNwbGl0IEJEICovCisjZGVmaW5lIEJOWDJYX1RTT19TUExJVF9CRAkJKDE8PDApCiB9OwogCiBzdHJ1Y3Qgc3dfcnhfcGFnZSB7CkBAIC0xNDksNiArMTY2LDExIEBACiAJREVDTEFSRV9QQ0lfVU5NQVBfQUREUihtYXBwaW5nKQogfTsKIAordW5pb24gZGJfcHJvZCB7CisJc3RydWN0IGRvb3JiZWxsX3NldF9wcm9kIGRhdGE7CisJdTMyCQlyYXc7Cit9OworCiAKIC8qIE1DIGhzaSAqLwogI2RlZmluZSBCQ01fUEFHRV9TSElGVAkJCTEyCkBAIC0xNjAsNyArMTgyLDcgQEAKICNkZWZpbmUgUEFHRVNfUEVSX1NHRQkJCSgxIDw8IFBBR0VTX1BFUl9TR0VfU0hJRlQpCiAjZGVmaW5lIFNHRV9QQUdFX1NJWkUJCQlQQUdFX1NJWkUKICNkZWZpbmUgU0dFX1BBR0VfU0hJRlQJCQlQQUdFX1NISUZUCi0jZGVmaW5lIFNHRV9QQUdFX0FMSUdOKGFkZHIpCQlQQUdFX0FMSUdOKCh0eXBlb2YoUEFHRV9TSVpFKSlhZGRyKQorI2RlZmluZSBTR0VfUEFHRV9BTElHTihhZGRyKQkJUEFHRV9BTElHTigodHlwZW9mKFBBR0VfU0laRSkpKGFkZHIpKQogCiAvKiBTR0UgcmluZyByZWxhdGVkIG1hY3JvcyAqLwogI2RlZmluZSBOVU1fUlhfU0dFX1BBR0VTCQkyCkBAIC0yMzQsMTUgKzI1NiwxNCBAQAogCiAJc3RydWN0IG5hcGlfc3RydWN0CW5hcGk7CiAKKwl1OAkJCWlzX3J4X3F1ZXVlOworCiAJc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrICpzdGF0dXNfYmxrOwogCWRtYV9hZGRyX3QJCXN0YXR1c19ibGtfbWFwcGluZzsKIAotCXN0cnVjdCBldGhfdHhfZGJfZGF0YQkqaHdfdHhfcHJvZHM7Ci0JZG1hX2FkZHJfdAkJdHhfcHJvZHNfbWFwcGluZzsKLQogCXN0cnVjdCBzd190eF9iZAkJKnR4X2J1Zl9yaW5nOwogCi0Jc3RydWN0IGV0aF90eF9iZAkqdHhfZGVzY19yaW5nOworCXVuaW9uIGV0aF90eF9iZF90eXBlcwkqdHhfZGVzY19yaW5nOwogCWRtYV9hZGRyX3QJCXR4X2Rlc2NfbWFwcGluZzsKIAogCXN0cnVjdCBzd19yeF9iZAkJKnJ4X2J1Zl9yaW5nOwkvKiBCRHMgbWFwcGluZ3MgcmluZyAqLwpAQCAtMjcyLDYgKzI5Myw4IEBACiAJdTgJCQljbF9pZDsJLyogZXRoIGNsaWVudCBpZCAqLwogCXU4CQkJc2JfaWQ7CS8qIHN0YXR1cyBibG9jayBudW1iZXIgaW4gSFcgKi8KIAorCXVuaW9uIGRiX3Byb2QJCXR4X2RiOworCiAJdTE2CQkJdHhfcGt0X3Byb2Q7CiAJdTE2CQkJdHhfcGt0X2NvbnM7CiAJdTE2CQkJdHhfYmRfcHJvZDsKQEAgLTI5MSw5ICszMTQsMTEgQEAKIAlfX2xlMTYJCQkqcnhfY29uc19zYjsKIAlfX2xlMTYJCQkqcnhfYmRfY29uc19zYjsKIAorCiAJdW5zaWduZWQgbG9uZwkJdHhfcGt0LAogCQkJCXJ4X3BrdCwKIAkJCQlyeF9jYWxsczsKKwogCS8qIFRQQSByZWxhdGVkICovCiAJc3RydWN0IHN3X3J4X2JkCQl0cGFfcG9vbFtFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMUhdOwogCXU4CQkJdHBhX3N0YXRlW0VUSF9NQVhfQUdHUkVHQVRJT05fUVVFVUVTX0UxSF07CkBAIC0zMDksMjEgKzMzNCwyNCBAQAogCXN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyBvbGRfeGNsaWVudDsKIAlzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMgZXRoX3Ffc3RhdHM7CiAKLQljaGFyCQkJbmFtZVtJRk5BTVNJWl07CisJLyogVGhlIHNpemUgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgZm9sbG93aW5nOgorCSAgICAgc2l6ZW9mIG5hbWUgZmllbGQgZnJvbSBuZXRkZXYgc3RydWN0dXJlICsKKwkgICAgIDQgKCctWHgtJyBzdHJpbmcpICsKKwkgICAgIDQgKGZvciB0aGUgZGlnaXRzIGFuZCB0byBtYWtlIGl0IERXT1JEIGFsaWduZWQpICovCisjZGVmaW5lIEZQX05BTUVfU0laRQkJKHNpemVvZigoKHN0cnVjdCBuZXRfZGV2aWNlICopMCktPm5hbWUpICsgOCkKKwljaGFyCQkJbmFtZVtGUF9OQU1FX1NJWkVdOwogCXN0cnVjdCBibngyeAkJKmJwOyAvKiBwYXJlbnQgKi8KIH07CiAKICNkZWZpbmUgYm54MnhfZnAoYnAsIG5yLCB2YXIpCQkoYnAtPmZwW25yXS52YXIpCiAKLSNkZWZpbmUgQk5YMlhfSEFTX1dPUksoZnApCShibngyeF9oYXNfcnhfd29yayhmcCkgfHwgYm54MnhfaGFzX3R4X3dvcmsoZnApKQotCiAKIC8qIE1DIGhzaSAqLwogI2RlZmluZSBNQVhfRkVUQ0hfQkQJCQkxMwkvKiBIVyBtYXggQkRzIHBlciBwYWNrZXQgKi8KICNkZWZpbmUgUlhfQ09QWV9USFJFU0gJCQk5MgogCiAjZGVmaW5lIE5VTV9UWF9SSU5HUwkJCTE2Ci0jZGVmaW5lIFRYX0RFU0NfQ05UCQkoQkNNX1BBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgZXRoX3R4X2JkKSkKKyNkZWZpbmUgVFhfREVTQ19DTlQJCShCQ01fUEFHRV9TSVpFIC8gc2l6ZW9mKHVuaW9uIGV0aF90eF9iZF90eXBlcykpCiAjZGVmaW5lIE1BWF9UWF9ERVNDX0NOVAkJCShUWF9ERVNDX0NOVCAtIDEpCiAjZGVmaW5lIE5VTV9UWF9CRAkJCShUWF9ERVNDX0NOVCAqIE5VTV9UWF9SSU5HUykKICNkZWZpbmUgTUFYX1RYX0JECQkJKE5VTV9UWF9CRCAtIDEpCkBAIC0zOTUsNyArNDIzLDcgQEAKICNkZWZpbmUgRFBNX1RSSUdFUl9UWVBFCQkJMHg0MAogI2RlZmluZSBET09SQkVMTChicCwgY2lkLCB2YWwpIFwKIAlkbyB7IFwKLQkJd3JpdGVsKCh1MzIpdmFsLCAoYnApLT5kb29yYmVsbHMgKyAoQkNNX1BBR0VfU0laRSAqIGNpZCkgKyBcCisJCXdyaXRlbCgodTMyKSh2YWwpLCBicC0+ZG9vcmJlbGxzICsgKEJDTV9QQUdFX1NJWkUgKiAoY2lkKSkgKyBcCiAJCSAgICAgICBEUE1fVFJJR0VSX1RZUEUpOyBcCiAJfSB3aGlsZSAoMCkKIApAQCAtNTIzLDYgKzU1MSw3IEBACiAjZGVmaW5lIE5WUkFNX1BBR0VfU0laRQkJCTI1NgogCiAJdTMyCQkJc2htZW1fYmFzZTsKKwl1MzIJCQlzaG1lbTJfYmFzZTsKIAogCXUzMgkJCWh3X2NvbmZpZzsKIApAQCAtNzU3LDYgKzc4Niw3IEBACiAJc3RydWN0IG5pZ19zdGF0cwkJbmlnX3N0YXRzOwogCXN0cnVjdCBob3N0X3BvcnRfc3RhdHMJCXBvcnRfc3RhdHM7CiAJc3RydWN0IGhvc3RfZnVuY19zdGF0cwkJZnVuY19zdGF0czsKKwlzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzCQlmdW5jX3N0YXRzX2Jhc2U7CiAKIAl1MzIJCQkJd2JfY29tcDsKIAl1MzIJCQkJd2JfZGF0YVs0XTsKQEAgLTg3Nyw2ICs5MDcsNyBAQAogCiAJc3RydWN0IGxpbmtfcGFyYW1zCWxpbmtfcGFyYW1zOwogCXN0cnVjdCBsaW5rX3ZhcnMJbGlua192YXJzOworCXN0cnVjdCBtZGlvX2lmX2luZm8JbWRpbzsKIAogCXN0cnVjdCBibngyeF9jb21tb24JY29tbW9uOwogCXN0cnVjdCBibngyeF9wb3J0CXBvcnQ7CkBAIC05MDIsOCArOTMzLDYgQEAKIAl1MTYJCQlyeF9xdWlja19jb25zX3RyaXA7CiAJdTE2CQkJcnhfdGlja3NfaW50OwogCXUxNgkJCXJ4X3RpY2tzOwotLyogTWF4aW1hbCBjb2FsZXNjaW5nIHRpbWVvdXQgaW4gdXMgKi8KLSNkZWZpbmUgQk5YMlhfTUFYX0NPQUxFU0NFX1RPVVQJCSgweGYwKjEyKQogCiAJdTMyCQkJbGluX2NudDsKIApAQCAtOTQ3LDEwICs5NzYsMTEgQEAKIAlkbWFfYWRkcl90ICAgICAgCXFtX21hcHBpbmc7CiAjZW5kaWYKIAorCWludAkJCWRyb3BsZXNzX2ZjOworCiAJaW50CQkJZG1hZV9yZWFkeTsKIAkvKiB1c2VkIHRvIHN5bmNocm9uaXplIGRtYWUgYWNjZXNzZXMgKi8KIAlzdHJ1Y3QgbXV0ZXgJCWRtYWVfbXV0ZXg7Ci0Jc3RydWN0IGRtYWVfY29tbWFuZAlpbml0X2RtYWU7CiAKIAkvKiB1c2VkIHRvIHN5bmNocm9uaXplIHN0YXRzIGNvbGxlY3RpbmcgKi8KIAlpbnQJCQlzdGF0c19zdGF0ZTsKQEAgLTk2NiwzOCArOTk2LDU0IEBACiAJZG1hX2FkZHJfdAkJZ3VuemlwX21hcHBpbmc7CiAJaW50CQkJZ3VuemlwX291dGxlbjsKICNkZWZpbmUgRldfQlVGX1NJWkUJCQkweDgwMDAKKyNkZWZpbmUgR1VOWklQX0JVRihicCkJCQkoYnAtPmd1bnppcF9idWYpCisjZGVmaW5lIEdVTlpJUF9QSFlTKGJwKQkJCShicC0+Z3VuemlwX21hcHBpbmcpCisjZGVmaW5lIEdVTlpJUF9PVVRMRU4oYnApCQkoYnAtPmd1bnppcF9vdXRsZW4pCiAKLQlzdHJ1Y3QgcmF3X29wICAgICAgICAgICppbml0X29wczsKKwlzdHJ1Y3QgcmF3X29wCQkqaW5pdF9vcHM7CiAJLyogSW5pdCBibG9ja3Mgb2Zmc2V0cyBpbnNpZGUgaW5pdF9vcHMgKi8KLQl1MTYgICAgICAgICAgICAgICAgICAgICppbml0X29wc19vZmZzZXRzOworCXUxNgkJCSppbml0X29wc19vZmZzZXRzOwogCS8qIERhdGEgYmxvYiAtIGhhcyAzMiBiaXQgZ3JhbnVsYXJpdHkgKi8KLQl1MzIgICAgICAgICAgICAgICAgICAgICppbml0X2RhdGE7CisJdTMyCQkJKmluaXRfZGF0YTsKIAkvKiBaaXBwZWQgUFJBTSBibG9icyAtIHJhdyBkYXRhICovCi0JY29uc3QgdTggICAgICAgICAgICAgICAqdHNlbV9pbnRfdGFibGVfZGF0YTsKLQljb25zdCB1OCAgICAgICAgICAgICAgICp0c2VtX3ByYW1fZGF0YTsKLQljb25zdCB1OCAgICAgICAgICAgICAgICp1c2VtX2ludF90YWJsZV9kYXRhOwotCWNvbnN0IHU4ICAgICAgICAgICAgICAgKnVzZW1fcHJhbV9kYXRhOwotCWNvbnN0IHU4ICAgICAgICAgICAgICAgKnhzZW1faW50X3RhYmxlX2RhdGE7Ci0JY29uc3QgdTggICAgICAgICAgICAgICAqeHNlbV9wcmFtX2RhdGE7Ci0JY29uc3QgdTggICAgICAgICAgICAgICAqY3NlbV9pbnRfdGFibGVfZGF0YTsKLQljb25zdCB1OCAgICAgICAgICAgICAgICpjc2VtX3ByYW1fZGF0YTsKLSAgICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICAqZmlybXdhcmU7CisJY29uc3QgdTgJCSp0c2VtX2ludF90YWJsZV9kYXRhOworCWNvbnN0IHU4CQkqdHNlbV9wcmFtX2RhdGE7CisJY29uc3QgdTgJCSp1c2VtX2ludF90YWJsZV9kYXRhOworCWNvbnN0IHU4CQkqdXNlbV9wcmFtX2RhdGE7CisJY29uc3QgdTgJCSp4c2VtX2ludF90YWJsZV9kYXRhOworCWNvbnN0IHU4CQkqeHNlbV9wcmFtX2RhdGE7CisJY29uc3QgdTgJCSpjc2VtX2ludF90YWJsZV9kYXRhOworCWNvbnN0IHU4CQkqY3NlbV9wcmFtX2RhdGE7CisjZGVmaW5lIElOSVRfT1BTKGJwKQkJCShicC0+aW5pdF9vcHMpCisjZGVmaW5lIElOSVRfT1BTX09GRlNFVFMoYnApCQkoYnAtPmluaXRfb3BzX29mZnNldHMpCisjZGVmaW5lIElOSVRfREFUQShicCkJCQkoYnAtPmluaXRfZGF0YSkKKyNkZWZpbmUgSU5JVF9UU0VNX0lOVF9UQUJMRV9EQVRBKGJwKQkoYnAtPnRzZW1faW50X3RhYmxlX2RhdGEpCisjZGVmaW5lIElOSVRfVFNFTV9QUkFNX0RBVEEoYnApCQkoYnAtPnRzZW1fcHJhbV9kYXRhKQorI2RlZmluZSBJTklUX1VTRU1fSU5UX1RBQkxFX0RBVEEoYnApCShicC0+dXNlbV9pbnRfdGFibGVfZGF0YSkKKyNkZWZpbmUgSU5JVF9VU0VNX1BSQU1fREFUQShicCkJCShicC0+dXNlbV9wcmFtX2RhdGEpCisjZGVmaW5lIElOSVRfWFNFTV9JTlRfVEFCTEVfREFUQShicCkJKGJwLT54c2VtX2ludF90YWJsZV9kYXRhKQorI2RlZmluZSBJTklUX1hTRU1fUFJBTV9EQVRBKGJwKQkJKGJwLT54c2VtX3ByYW1fZGF0YSkKKyNkZWZpbmUgSU5JVF9DU0VNX0lOVF9UQUJMRV9EQVRBKGJwKQkoYnAtPmNzZW1faW50X3RhYmxlX2RhdGEpCisjZGVmaW5lIElOSVRfQ1NFTV9QUkFNX0RBVEEoYnApCQkoYnAtPmNzZW1fcHJhbV9kYXRhKQorCisJY29uc3Qgc3RydWN0IGZpcm13YXJlCSpmaXJtd2FyZTsKIH07CiAKIAotI2RlZmluZSBCTlgyWF9NQVhfUVVFVUVTKGJwKQkoSVNfRTFITUYoYnApID8gKE1BWF9DT05URVhUIC8gRTFIVk5fTUFYKSA6IFwKLQkJCQkJCSBNQVhfQ09OVEVYVCkKLSNkZWZpbmUgQk5YMlhfTlVNX1FVRVVFUyhicCkJbWF4KGJwLT5udW1fcnhfcXVldWVzLCBicC0+bnVtX3R4X3F1ZXVlcykKLSNkZWZpbmUgaXNfbXVsdGkoYnApCQkoQk5YMlhfTlVNX1FVRVVFUyhicCkgPiAxKQorI2RlZmluZSBCTlgyWF9NQVhfUVVFVUVTKGJwKQkoSVNfRTFITUYoYnApID8gKE1BWF9DT05URVhULygyICogRTFIVk5fTUFYKSkgXAorCQkJCQkgICAgICA6IChNQVhfQ09OVEVYVC8yKSkKKyNkZWZpbmUgQk5YMlhfTlVNX1FVRVVFUyhicCkJKGJwLT5udW1fcnhfcXVldWVzICsgYnAtPm51bV90eF9xdWV1ZXMpCisjZGVmaW5lIGlzX211bHRpKGJwKQkJKEJOWDJYX05VTV9RVUVVRVMoYnApID4gMikKIAogI2RlZmluZSBmb3JfZWFjaF9yeF9xdWV1ZShicCwgdmFyKSBcCiAJCQlmb3IgKHZhciA9IDA7IHZhciA8IGJwLT5udW1fcnhfcXVldWVzOyB2YXIrKykKICNkZWZpbmUgZm9yX2VhY2hfdHhfcXVldWUoYnAsIHZhcikgXAotCQkJZm9yICh2YXIgPSAwOyB2YXIgPCBicC0+bnVtX3R4X3F1ZXVlczsgdmFyKyspCisJCQlmb3IgKHZhciA9IGJwLT5udW1fcnhfcXVldWVzOyBcCisJCQkgICAgIHZhciA8IEJOWDJYX05VTV9RVUVVRVMoYnApOyB2YXIrKykKICNkZWZpbmUgZm9yX2VhY2hfcXVldWUoYnAsIHZhcikgXAogCQkJZm9yICh2YXIgPSAwOyB2YXIgPCBCTlgyWF9OVU1fUVVFVUVTKGJwKTsgdmFyKyspCiAjZGVmaW5lIGZvcl9lYWNoX25vbmRlZmF1bHRfcXVldWUoYnAsIHZhcikgXAotCQkJZm9yICh2YXIgPSAxOyB2YXIgPCBCTlgyWF9OVU1fUVVFVUVTKGJwKTsgdmFyKyspCisJCQlmb3IgKHZhciA9IDE7IHZhciA8IGJwLT5udW1fcnhfcXVldWVzOyB2YXIrKykKIAogCiB2b2lkIGJueDJ4X3JlYWRfZG1hZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc3JjX2FkZHIsIHUzMiBsZW4zMik7CkBAIC0xMDA2LDYgKzEwNTIsMTAgQEAKIGludCBibngyeF9nZXRfZ3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHU4IHBvcnQpOwogaW50IGJueDJ4X3NldF9ncGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUsIHU4IHBvcnQpOwogaW50IGJueDJ4X3NldF9ncGlvX2ludChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHUzMiBtb2RlLCB1OCBwb3J0KTsKK3UzMiBibngyeF9md19jb21tYW5kKHN0cnVjdCBibngyeCAqYnAsIHUzMiBjb21tYW5kKTsKK3ZvaWQgYm54MnhfcmVnX3dyX2luZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgdTMyIHZhbCk7Cit2b2lkIGJueDJ4X3dyaXRlX2RtYWVfcGh5c19sZW4oc3RydWN0IGJueDJ4ICpicCwgZG1hX2FkZHJfdCBwaHlzX2FkZHIsCisJCQkgICAgICAgdTMyIGFkZHIsIHUzMiBsZW4pOwogCiBzdGF0aWMgaW5saW5lIHUzMiByZWdfcG9sbChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVnLCB1MzIgZXhwZWN0ZWQsIGludCBtcywKIAkJCSAgIGludCB3YWl0KQpAQCAtMTA2Myw5ICsxMTEzLDkgQEAKICNkZWZpbmUgRE1BRV9DT01QX1ZBTAkJCTB4ZTBkMGQwYWUKIAogI2RlZmluZSBNQVhfRE1BRV9DX1BFUl9QT1JUCQk4Ci0jZGVmaW5lIElOSVRfRE1BRV9DKGJwKQkJCShCUF9QT1JUKGJwKSpNQVhfRE1BRV9DX1BFUl9QT1JUICsgXAorI2RlZmluZSBJTklUX0RNQUVfQyhicCkJCQkoQlBfUE9SVChicCkgKiBNQVhfRE1BRV9DX1BFUl9QT1JUICsgXAogCQkJCQkgQlBfRTFIVk4oYnApKQotI2RlZmluZSBQTUZfRE1BRV9DKGJwKQkJCShCUF9QT1JUKGJwKSpNQVhfRE1BRV9DX1BFUl9QT1JUICsgXAorI2RlZmluZSBQTUZfRE1BRV9DKGJwKQkJCShCUF9QT1JUKGJwKSAqIE1BWF9ETUFFX0NfUEVSX1BPUlQgKyBcCiAJCQkJCSBFMUhWTl9NQVgpCiAKIApAQCAtMTA5MCw3ICsxMTQwLDggQEAKIAogCiAvKiBtdXN0IGJlIHVzZWQgb24gYSBDSUQgYmVmb3JlIHBsYWNpbmcgaXQgb24gYSBIVyByaW5nICovCi0jZGVmaW5lIEhXX0NJRChicCwgeCkJCSgoQlBfUE9SVChicCkgPDwgMjMpIHwgKEJQX0UxSFZOKGJwKSA8PCAxNykgfCB4KQorI2RlZmluZSBIV19DSUQoYnAsIHgpCQkJKChCUF9QT1JUKGJwKSA8PCAyMykgfCBcCisJCQkJCSAoQlBfRTFIVk4oYnApIDw8IDE3KSB8ICh4KSkKIAogI2RlZmluZSBTUF9ERVNDX0NOVAkJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGV0aF9zcGUpKQogI2RlZmluZSBNQVhfU1BfREVTQ19DTlQJCQkoU1BfREVTQ19DTlQgLSAxKQpAQCAtMTE3OCw4ICsxMjI5LDggQEAKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfUU1fUEFSSVRZX0VSUk9SIHwgXAogCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19YU0RNX1BBUklUWV9FUlJPUiB8IFwKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfWFNFTUlfUEFSSVRZX0VSUk9SIHwgXAotCQkJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX0RPT1JCRUxMUV9QQVJJVFlfRVJST1IgfFwKLQkJCSAgICBBRVVfSU5QVVRTX0FUVE5fQklUU19WQVVYX1BDSV9DT1JFX1BBUklUWV9FUlJPUiB8XAorCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19ET09SQkVMTFFfUEFSSVRZX0VSUk9SIHxcCisJCQkgICAgIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1ZBVVhfUENJX0NPUkVfUEFSSVRZX0VSUk9SIHxcCiAJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0RFQlVHX1BBUklUWV9FUlJPUiB8IFwKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVVNETV9QQVJJVFlfRVJST1IgfCBcCiAJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1VTRU1JX1BBUklUWV9FUlJPUiB8IFwKQEAgLTEyMDcsNyArMTI1OCw2IEBACiAJCSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjZfVENQX0NBUEFCSUxJVFkgfCBcCiAJCSAoYnAtPm11bHRpX21vZGUgPDwgXAogCQkgIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfTU9ERV9TSElGVCkpCi0KICNkZWZpbmUgTVVMVElfTUFTSwkJCTB4N2YKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9kdW1wLmggYi9kcml2ZXJzL25ldC9ibngyeF9kdW1wLmgKaW5kZXggNzhjNmIwMy4uM2JiOWE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfZHVtcC5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2R1bXAuaApAQCAtMTMsMzEgKzEzLDM1IEBACiAgKiBUaGUgc2lnbmF0dXJlIGlzIHRpbWUgc3RhbXAsIGRpYWcgdmVyc2lvbiBhbmQgZ3JjX2R1bXAgdmVyc2lvbgogICovCiAKKyNpZm5kZWYgQk5YMlhfRFVNUF9ICisjZGVmaW5lIEJOWDJYX0RVTVBfSAorCisKIHN0cnVjdCBkdW1wX3NpZ24gewogCXUzMiB0aW1lX3N0YW1wOwogCXUzMiBkaWFnX3ZlcjsKIAl1MzIgZ3JjX2R1bXBfdmVyOwogfTsKIAotI2RlZmluZSBUU1RPUk1fV0FJVFBfQUREUgkweDFiOGE4MAotI2RlZmluZSBDU1RPUk1fV0FJVFBfQUREUgkweDIzOGE4MAotI2RlZmluZSBYU1RPUk1fV0FJVFBfQUREUgkweDJiOGE4MAotI2RlZmluZSBVU1RPUk1fV0FJVFBfQUREUgkweDMzOGE4MAotI2RlZmluZSBUU1RPUk1fQ0FNX01PREUJCTB4MWIxNDQwCisjZGVmaW5lIFRTVE9STV9XQUlUUF9BRERSCQkweDFiOGE4MAorI2RlZmluZSBDU1RPUk1fV0FJVFBfQUREUgkJMHgyMzhhODAKKyNkZWZpbmUgWFNUT1JNX1dBSVRQX0FERFIJCTB4MmI4YTgwCisjZGVmaW5lIFVTVE9STV9XQUlUUF9BRERSCQkweDMzOGE4MAorI2RlZmluZSBUU1RPUk1fQ0FNX01PREUJCQkweDFiMTQ0MAogCi0jZGVmaW5lIFJJX0UxCQkJMHgxCi0jZGVmaW5lIFJJX0UxSAkJCTB4MgotI2RlZmluZSBSSV9PTkxJTkUJCTB4MTAwCisjZGVmaW5lIFJJX0UxCQkJCTB4MQorI2RlZmluZSBSSV9FMUgJCQkJMHgyCisjZGVmaW5lIFJJX09OTElORQkJCTB4MTAwCiAKLSNkZWZpbmUgUklfRTFfT0ZGTElORQkJKFJJX0UxKQotI2RlZmluZSBSSV9FMV9PTkxJTkUJCShSSV9FMSB8IFJJX09OTElORSkKLSNkZWZpbmUgUklfRTFIX09GRkxJTkUJCShSSV9FMUgpCi0jZGVmaW5lIFJJX0UxSF9PTkxJTkUJCShSSV9FMUggfCBSSV9PTkxJTkUpCi0jZGVmaW5lIFJJX0FMTF9PRkZMSU5FCQkoUklfRTEgfCBSSV9FMUgpCi0jZGVmaW5lIFJJX0FMTF9PTkxJTkUJCShSSV9FMSB8IFJJX0UxSCB8IFJJX09OTElORSkKKyNkZWZpbmUgUklfRTFfT0ZGTElORQkJCShSSV9FMSkKKyNkZWZpbmUgUklfRTFfT05MSU5FCQkJKFJJX0UxIHwgUklfT05MSU5FKQorI2RlZmluZSBSSV9FMUhfT0ZGTElORQkJCShSSV9FMUgpCisjZGVmaW5lIFJJX0UxSF9PTkxJTkUJCQkoUklfRTFIIHwgUklfT05MSU5FKQorI2RlZmluZSBSSV9BTExfT0ZGTElORQkJCShSSV9FMSB8IFJJX0UxSCkKKyNkZWZpbmUgUklfQUxMX09OTElORQkJCShSSV9FMSB8IFJJX0UxSCB8IFJJX09OTElORSkKIAotI2RlZmluZSBNQVhfVElNRVJfUEVORElORwkyMDAKLSNkZWZpbmUgVElNRVJfU0NBTl9ET05UX0NBUkUJMHhGRgorI2RlZmluZSBNQVhfVElNRVJfUEVORElORwkJMjAwCisjZGVmaW5lIFRJTUVSX1NDQU5fRE9OVF9DQVJFCQkweEZGCiAKIAogc3RydWN0IGR1bXBfaGRyIHsKQEAgLTY3LDQ0MyArNzEsNDQ0IEBACiB9OwogCiAKLSNkZWZpbmUgUkVHU19DT1VOVAkJNTU4CisjZGVmaW5lIFJFR1NfQ09VTlQJCQk1NTgKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2FkZHIgcmVnX2FkZHJzW1JFR1NfQ09VTlRdID0gewotCXsgMHgyMDAwLCAzNDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMCwgMTAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MzAwMCwgMjg3LCBSSV9BTExfT05MSU5FfSwgeyAweDM4MDAsIDMzMSwgUklfQUxMX09OTElORX0sCi0JeyAweDg4MDAsIDYsIFJJX0UxX09OTElORX0sIHsgMHhhMDAwLCAyMjMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhhMzg4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGEzOTgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhhMzljLCA3LCBSSV9FMUhfT05MSU5FfSwgeyAweGEzYzAsIDMsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHhhM2QwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweGEzZDgsIDEsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHhhM2UwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweGEzZTgsIDEsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHhhM2YwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweGEzZjgsIDEsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHhhNDAwLCA2OSwgUklfQUxMX09OTElORX0sIHsgMHhhNTE4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YTUyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTI4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YTUzMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTM4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YTU0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTQ4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YTU1MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTU4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YTU2MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTY4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YTU3MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNTgwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YTU5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNWEwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YTVjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhhNWUwLCAxLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4YTVlOCwgMSwgUklfRTFIX09OTElORX0sIHsgMHhhNWYwLCAxLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4YTVmOCwgMTAsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTAwMDAsIDIzNiwgUklfQUxMX09OTElORX0sCi0JeyAweDEwM2JjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwM2NjLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTAzZGMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MDAsIDU3LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA0ZTgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0ZjQsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwMCwgMTQ2LCBSSV9BTExfT05MSU5FfSwgeyAweDEwNzUwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA3NjAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA3NzAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDc4MCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDc5MCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDEwN2EwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwN2IwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA3YzAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA3ZDAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDdlMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDg4MCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDEwOTAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTQwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTYwMDAsIDI2LCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTYwNzAsIDE4LCBSSV9FMUhfT05MSU5FfSwgeyAweDE2MGMwLCAyNywgUklfRTFIX09OTElORX0sCi0JeyAweDE2MTQwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2MTYwLCAxLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTYxODAsIDIsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTYxYzAsIDIsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHgxNjIwNCwgNSwgUklfRTFIX09OTElORX0sIHsgMHgxODAwMCwgMSwgUklfRTFIX09OTElORX0sCi0JeyAweDE4MDA4LCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDIwMDAwLCAyNCwgUklfQUxMX09OTElORX0sCi0JeyAweDIwMDYwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDgwLCAxMzgsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyMDJiNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDJjNCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDIwNDAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDIwNDBjLCA4LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjA0MmMsIDE4LCBSSV9FMUhfT05MSU5FfSwgeyAweDIwNDgwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjA1MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjA2MDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyODAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAwNCwgODE5MSwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgzMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAwNCwgMTYzODMsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4NDAwMDAsIDk4LCBSSV9BTExfT05MSU5FfSwgeyAweDQwMTk0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NDAxYTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDAxYTgsIDExLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4NDAyMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA0MDAsIDQzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NDA0YjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA0YzgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg0MDRjYywgMywgUklfRTFIX09OTElORX0sIHsgMHg0MDUwMCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDQwNTEwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDQwNTIwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NDA1MzAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA1NDAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg0MjAwMCwgMTY0LCBSSV9BTExfT05MSU5FfSwgeyAweDQyMjljLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NDIyYWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDIyYmMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg0MjJkNCwgNSwgUklfRTFIX09OTElORX0sIHsgMHg0MjQwMCwgNDksIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg0MjRjOCwgMzgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDI1NjgsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg0MjgwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg1MDAwMCwgMjAsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg1MDA1MCwgOCwgUklfQUxMX09OTElORX0sIHsgMHg1MDA3MCwgODgsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg1MDFkYywgMSwgUklfQUxMX09OTElORX0sIHsgMHg1MDFlYywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDUwMWYwLCA0LCBSSV9FMUhfT05MSU5FfSwgeyAweDUwMjAwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NTAyMGMsIDcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAyMjgsIDYsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHg1MDI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg1MDI4MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDUyMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDU0MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NTQwMDQsIDMzMjcsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDU4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NTgwMDQsIDgxOTEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDYwMDAwLCA3MSwgUklfQUxMX09OTElORX0sCi0JeyAweDYwMTI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDYwMTM4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NjAxM2MsIDI0LCBSSV9FMUhfT05MSU5FfSwgeyAweDYwMjAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NjEwMDQsIDUxMSwgUklfQUxMX09GRkxJTkV9LAotCXsgMHg3MDAwMCwgOCwgUklfQUxMX09OTElORX0sIHsgMHg3MDAyMCwgMjE0OTYsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4ODUwMDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ODUwMGMsIDQsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4ODUwMWMsIDcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ODUwMzgsIDQsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4ODUwNDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ODUwNGMsIDEwOSwgUklfQUxMX09GRkxJTkV9LAotCXsgMHg4NTIwMCwgMzIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ODUyODAsIDExMTA0LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweGEwMDAwLCAxNjM4NCwgUklfQUxMX09OTElORX0sIHsgMHhiMDAwMCwgMTYzODQsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHhjMTAwMCwgNywgUklfQUxMX09OTElORX0sIHsgMHhjMTAyOCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGMxMDM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMxODAwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzIwMDAsIDE2NCwgUklfQUxMX09OTElORX0sIHsgMHhjMjI5YywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGMyMmFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMyMmJjLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzI0MDAsIDQ5LCBSSV9BTExfT05MSU5FfSwgeyAweGMyNGM4LCAzOCwgUklfQUxMX09OTElORX0sCi0JeyAweGMyNTY4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweGMyNjAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzQwMDAsIDE2NSwgUklfQUxMX09OTElORX0sIHsgMHhjNDJhMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGM0MmIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGM0MmMwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzQyZTAsIDcsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YzQ0MDAsIDUxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzQ0ZDAsIDM4LCBSSV9BTExfT05MSU5FfSwgeyAweGM0NTcwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzQ2MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAwMDAsIDE5LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ZDAwNGMsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAwNmMsIDkxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ZDAxZTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAxZjQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhkMDIwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHhkMDIwYywgNywgUklfQUxMX09OTElORX0sCi0JeyAweGQwMjI4LCAxOCwgUklfRTFIX09OTElORX0sIHsgMHhkMDI4MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGQwMzAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwNDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ZDQwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDQwMDQsIDI1NTksIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4ZDgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDgwMDQsIDgxOTEsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4ZTAwMDAsIDIxLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMDU0LCA4LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ZTAwNzQsIDg1LCBSSV9BTExfT05MSU5FfSwgeyAweGUwMWQ0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ZTAxZTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAyMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhlMDIwYywgOCwgUklfQUxMX09OTElORX0sIHsgMHhlMDIyYywgMTgsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHhlMDI4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhlMDMwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGUxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGUyMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ZTIwMDQsIDIwNDcsIFJJX0FMTF9PRkZMSU5FfSwgeyAweGYwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ZjAwMDQsIDE2MzgzLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDEwMDAsIDEyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTAxMDNjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMTA0YywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEwMTA1MCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgxMDExMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDE4MDAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAyMDAwLCAxOCwgUklfQUxMX09OTElORX0sCi0JeyAweDEwMjA1NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDIwNjQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDIwODAsIDE3LCBSSV9BTExfT05MSU5FfSwgeyAweDEwMjBjOCwgOCwgUklfRTFIX09OTElORX0sCi0JeyAweDEwMjQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwMDAsIDI2LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTAzMDc0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzA4NCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEwMzA5NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwOTgsIDUsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHgxMDM4MDAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MDAwLCA2MywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNDEwOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDQxMTgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDQyMDAsIDE3LCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDQwMCwgNjQsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDQ1MDAsIDE5MiwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA0ODAwLCA2NCwgUklfQUxMX09OTElORX0sCi0JeyAweDEwNDkwMCwgMTkyLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwMDAsIDcsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwMWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTAyMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTAyYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDMwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MDNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwNDAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwNGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA1MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTA1YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDYwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MDZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwN2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA4MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTA4YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDkwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MDljLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwYTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwYWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBiMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTBiYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGMwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MGNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwZGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBlMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTBlYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGYwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MGZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxMDAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxMGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTExMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTExYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTIwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MTJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxM2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE0MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTE0YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTUwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MTVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxNjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxNmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE3MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTE3YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTgwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MThjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxOWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFhMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTFhYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWIwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MWJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxYzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxY2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFkMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTFkYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWUwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MWVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxZmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTIwMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTIwYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjEwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MjFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyMjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyMmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTIzMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTIzYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjQwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MjRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyNWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI2MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTI2YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjcwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MjdjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyODAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyOGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI5MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTI5YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmEwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MmFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyYmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJjMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTJjYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmQwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MmRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyZTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyZWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJmMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTJmYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzAwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MzBjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzMWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTMyMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTMyYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzMwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MzNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzNDAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzNGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM1MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTM1YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzYwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MzZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzN2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM4MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTM4YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzkwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MzljLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzYTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzYWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNiMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTNiYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2MwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1M2NjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzZGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNlMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTNlYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2YwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1M2ZjLCA3NjksIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwODAwMCwgMzMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDgwOTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA4MGEwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA4MGFjLCA1LCBSSV9FMUhfT05MSU5FfSwgeyAweDEwODEwMCwgNSwgUklfQUxMX09OTElORX0sCi0JeyAweDEwODEyMCwgNSwgUklfQUxMX09OTElORX0sIHsgMHgxMDgyMDAsIDc0LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA4NDAwLCA3NCwgUklfQUxMX09OTElORX0sIHsgMHgxMDg4MDAsIDE1MiwgUklfQUxMX09OTElORX0sCi0JeyAweDEwOTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjAwMDAsIDM0NywgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDU3OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA1ODgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA1OTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNTljLCAyMywgUklfRTFIX09OTElORX0sCi0JeyAweDEyMDYxNCwgMSwgUklfRTFIX09OTElORX0sIHsgMHgxMjA2MWMsIDMwLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTIwODBjLCA2NSwgUklfQUxMX09OTElORX0sIHsgMHgxMjBhMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjIwMDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTI4MDAwLCAyLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTQwMDAwLCAxMTQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQwMWQ0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTQwMWU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDIwMCwgNiwgUklfQUxMX09OTElORX0sCi0JeyAweDE0NDAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgxNDgwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNGMwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTUwMDAwLCA0LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTU0MDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDE1ODAwMCwgNCwgUklfQUxMX09OTElORX0sCi0JeyAweDE1YzAwMCwgNywgUklfRTFIX09OTElORX0sIHsgMHgxNjEwMDAsIDcsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjEwMjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTYxMDM4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTYxODAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDAwMCwgNjAsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjQwZmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MTBjLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY0MTEwLCAyLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2NDIwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2NDIwOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyMTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjQyMTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjIwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY0MjI4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDIzMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2NDIzOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjQyNDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjUwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY0MjU4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDI2MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2NDI3MCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyODAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjQ4MDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY1MDAwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY2MDAwLCAxNjQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2MjljLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY2MmFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjJiYywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2NjQwMCwgNDksIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2NGM4LCAzOCwgUklfQUxMX09OTElORX0sCi0JeyAweDE2NjU2OCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjY4MDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjgwMDAsIDI3MCwgUklfQUxMX09OTElORX0sIHsgMHgxNjg0NDQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjg0NTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4ODAwLCAxOSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2ODkwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjhhMDAsIDEyOCwgUklfQUxMX09OTElORX0sCi0JeyAweDE2YTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNmEwMDQsIDE1MzUsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MTZjMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2YzAwNCwgMTUzNSwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgxNmUwMDAsIDE2LCBSSV9FMUhfT05MSU5FfSwgeyAweDE2ZTEwMCwgMSwgUklfRTFIX09OTElORX0sCi0JeyAweDE2ZTIwMCwgMiwgUklfRTFIX09OTElORX0sIHsgMHgxNmU0MDAsIDE4MywgUklfRTFIX09OTElORX0sCi0JeyAweDE3MDAwMCwgOTMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTcwMTgwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTcwMTkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE3MDIwMCwgNCwgUklfQUxMX09OTElORX0sCi0JeyAweDE3MDIxNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNzgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxODAwMDAsIDYxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDEwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE4MDExMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODAxMjAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxODAxMzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMTNjLCAyLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTgwMjAwLCA1OCwgUklfQUxMX09OTElORX0sIHsgMHgxODAzNDAsIDQsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxODA0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MTgxMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDE4MTAxMCwgMTAyMCwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgxYTAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWEwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDFhMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYTEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MWE1ODAwLCAyNTYwLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgxYTgwMDAsIDY0LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDFhODEwMCwgMTk4NCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MWFhMDAwLCAxLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MWFhMDA0LCA2NjU1LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgxYjE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgxYjFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LCB7IDB4MWIyMDAwLCAxLCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDFiMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDFiODIwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDFiODI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYjgyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxYjgyYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWI4YTAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MWI4YTgwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFjMDAwMCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDIwMDAwMCwgNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTEwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjAwMTIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDEzMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDIwMDE0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxNGMsIDIsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHgyMDAyMDAsIDU4LCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDM0MCwgNCwgUklfQUxMX09OTElORX0sCi0JeyAweDIwMDQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgyMDIwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAyMDEwLCAyMDQ0LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDIyMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMjAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MjIxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIyMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkV9LAotCXsgMHgyMjU4MDAsIDE1MzYsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDIyNzAwMCwgMSwgUklfRTFIX09OTElORX0sCi0JeyAweDIyNzAwNCwgMTAyMywgUklfRTFIX09GRkxJTkV9LCB7IDB4MjI4MDAwLCA2NCwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgyMjgxMDAsIDg2NDAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDIzMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDIzMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sIHsgMHgyMzIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MjMyNDAwLCA2NCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MjM4MjAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjM4MjQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIzODI4MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDIzODJjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMzhhMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyMzhhODAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjQwMDAwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjgwMDAwLCA2NSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxMTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyODAxMjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTMwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjgwMTQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDE0YywgMiwgUklfRTFIX09OTElORX0sCi0JeyAweDI4MDIwMCwgNTgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMzQwLCA0LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjgwNDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDI4MjAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgyODIwMTAsIDIwNDQsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MmEwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJhMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkV9LAotCXsgMHgyYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmExMDA0LCA0NjA3LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDJhNTgwMCwgMjU2MCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MmE4MDAwLCA2NCwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgyYTgxMDAsIDk2MCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MmE5MDAwLCAxLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MmE5MDA0LCA3Njc5LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyYjE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgyYjFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LCB7IDB4MmIyMDAwLCAxLCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDJiMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDJiODIwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDJiODI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYjgyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyYjgyYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmI4YTAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MmI4YTgwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJjMDAwMCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDMwMDAwMCwgNjUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTEwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MzAwMTIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDEzMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDMwMDE0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxNGMsIDIsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHgzMDAyMDAsIDU4LCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDM0MCwgNCwgUklfQUxMX09OTElORX0sCi0JeyAweDMwMDQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgzMDIwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAyMDEwLCAyMDQ0LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDMyMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMjAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MzIxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMyMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkV9LAotCXsgMHgzMjU4MDAsIDI1NjAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDMyODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MzI4MTAwLCA1MzYsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDMyODk2MCwgMSwgUklfRTFIX09OTElORX0sCi0JeyAweDMyODk2NCwgODEwMywgUklfRTFIX09GRkxJTkV9LCB7IDB4MzMxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MzMxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDMzMjAwMCwgMSwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgzMzI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgzMzgyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgzMzgyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzM4MjgwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MzM4MmMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMzOGEwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDMzOGE4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzNDAwMDAsIDIsIFJJX0FMTF9PTkxJTkV9CisJeyAweDIwMDAsIDM0MSwgUklfQUxMX09OTElORSB9LCB7IDB4MjgwMCwgMTAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMwMDAsIDI4NywgUklfQUxMX09OTElORSB9LCB7IDB4MzgwMCwgMzMxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDg4MDAsIDYsIFJJX0UxX09OTElORSB9LCB7IDB4YTAwMCwgMjIzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGEzODgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGEzOTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YTM5YywgNywgUklfRTFIX09OTElORSB9LCB7IDB4YTNjMCwgMywgUklfRTFIX09OTElORSB9LAorCXsgMHhhM2QwLCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHhhM2Q4LCAxLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweGEzZTAsIDEsIFJJX0UxSF9PTkxJTkUgfSwgeyAweGEzZTgsIDEsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4YTNmMCwgMSwgUklfRTFIX09OTElORSB9LCB7IDB4YTNmOCwgMSwgUklfRTFIX09OTElORSB9LAorCXsgMHhhNDAwLCA2OSwgUklfQUxMX09OTElORSB9LCB7IDB4YTUxOCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhhNTIwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhNTI4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGE1MzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGE1MzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YTU0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YTU0OCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhhNTUwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhNTU4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGE1NjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGE1NjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YTU3MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YTU4MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhhNTkwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhNWEwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGE1YzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGE1ZTAsIDEsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4YTVlOCwgMSwgUklfRTFIX09OTElORSB9LCB7IDB4YTVmMCwgMSwgUklfRTFIX09OTElORSB9LAorCXsgMHhhNWY4LCAxMCwgUklfRTFIX09OTElORSB9LCB7IDB4MTAwMDAsIDIzNiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDNiYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAzY2MsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTAzZGMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNDAwLCA1NywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDRlOCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTA0ZjQsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MDAsIDE0NiwgUklfQUxMX09OTElORSB9LCB7IDB4MTA3NTAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA3NjAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNzcwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNzgwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDc5MCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDdhMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTA3YjAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA3YzAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwN2QwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwN2UwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDg4MCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDkwMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTQwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2MDAwLCAyNiwgUklfRTFIX09OTElORSB9LAorCXsgMHgxNjA3MCwgMTgsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDE2MGMwLCAyNywgUklfRTFIX09OTElORSB9LAorCXsgMHgxNjE0MCwgMSwgUklfRTFIX09OTElORSB9LCB7IDB4MTYxNjAsIDEsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MTYxODAsIDIsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDE2MWMwLCAyLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDE2MjA0LCA1LCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxODAwMCwgMSwgUklfRTFIX09OTElORSB9LAorCXsgMHgxODAwOCwgMSwgUklfRTFIX09OTElORSB9LCB7IDB4MjAwMDAsIDI0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwMDYwLCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDA4MCwgMTM4LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwMmI0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDJjNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDQwMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MjA0MGMsIDgsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjA0MmMsIDE4LCBSSV9FMUhfT05MSU5FIH0sIHsgMHgyMDQ4MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDUwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjA2MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI4MDA0LCA4MTkxLCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgzMDAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzAwMDQsIDE2MzgzLCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHg0MDAwMCwgOTgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQwMTk0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDQwMWE0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MDFhOCwgMTEsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4NDAyMDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQwNDAwLCA0MywgUklfQUxMX09OTElORSB9LAorCXsgMHg0MDRiOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NDA0YzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NDA0Y2MsIDMsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDQwNTAwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDQwNTEwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MDUyMCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHg0MDUzMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4NDA1NDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NDIwMDAsIDE2NCwgUklfQUxMX09OTElORSB9LCB7IDB4NDIyOWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NDIyYWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQyMmJjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDQyMmQ0LCA1LCBSSV9FMUhfT05MSU5FIH0sIHsgMHg0MjQwMCwgNDksIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NDI0YzgsIDM4LCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MjU2OCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHg0MjgwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NTAwMDAsIDIwLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDUwMDUwLCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHg1MDA3MCwgODgsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NTAxZGMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDUwMWVjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDUwMWYwLCA0LCBSSV9FMUhfT05MSU5FIH0sIHsgMHg1MDIwMCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHg1MDIwYywgNywgUklfQUxMX09OTElORSB9LCB7IDB4NTAyMjgsIDYsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4NTAyNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDUwMjgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDUyMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg1NDAwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg1NDAwNCwgMzMyNywgUklfQUxMX09GRkxJTkUgfSwgeyAweDU4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDU4MDA0LCA4MTkxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4NjAwMDAsIDcxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDYwMTI4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg2MDEzOCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg2MDEzYywgMjQsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDYwMjAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDYxMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg2MTAwNCwgNTExLCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHg3MDAwMCwgOCwgUklfQUxMX09OTElORSB9LCB7IDB4NzAwMjAsIDIxNDk2LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHg4NTAwMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4ODUwMGMsIDQsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDg1MDFjLCA3LCBSSV9BTExfT05MSU5FIH0sIHsgMHg4NTAzOCwgNCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4ODUwNDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDg1MDRjLCAxMDksIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDg1MjAwLCAzMiwgUklfQUxMX09OTElORSB9LCB7IDB4ODUyODAsIDExMTA0LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHhhMDAwMCwgMTYzODQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGIwMDAwLCAxNjM4NCwgUklfRTFIX09OTElORSB9LAorCXsgMHhjMTAwMCwgNywgUklfQUxMX09OTElORSB9LCB7IDB4YzEwMjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzEwMzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGMxODAwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGMyMDAwLCAxNjQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGMyMjljLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGMyMmFjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjMjJiYywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhjMjQwMCwgNDksIFJJX0FMTF9PTkxJTkUgfSwgeyAweGMyNGM4LCAzOCwgUklfQUxMX09OTElORSB9LAorCXsgMHhjMjU2OCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4YzI2MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzQwMDAsIDE2NSwgUklfQUxMX09OTElORSB9LCB7IDB4YzQyYTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzQyYjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGM0MmMwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGM0MmUwLCA3LCBSSV9FMUhfT05MSU5FIH0sIHsgMHhjNDQwMCwgNTEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzQ0ZDAsIDM4LCBSSV9BTExfT05MSU5FIH0sIHsgMHhjNDU3MCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHhjNDYwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4ZDAwMDAsIDE5LCBSSV9BTExfT05MSU5FIH0sCisJeyAweGQwMDRjLCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHhkMDA2YywgOTEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ZDAxZTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQwMWY0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGQwMjAwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHhkMDIwYywgNywgUklfQUxMX09OTElORSB9LAorCXsgMHhkMDIyOCwgMTgsIFJJX0UxSF9PTkxJTkUgfSwgeyAweGQwMjgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGQwMzAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhkMDQwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhkNDAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4ZDQwMDQsIDI1NTksIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweGQ4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhkODAwNCwgODE5MSwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4ZTAwMDAsIDIxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhlMDA1NCwgOCwgUklfQUxMX09OTElORSB9LAorCXsgMHhlMDA3NCwgODUsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGUwMWQ0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGUwMWU0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhlMDIwMCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHhlMDIwYywgOCwgUklfQUxMX09OTElORSB9LCB7IDB4ZTAyMmMsIDE4LCBSSV9FMUhfT05MSU5FIH0sCisJeyAweGUwMjgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhlMDMwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhlMTAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4ZTIwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ZTIwMDQsIDIwNDcsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHhmMDAwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhmMDAwNCwgMTYzODMsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDEwMDAsIDEyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMTAzYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAxMDRjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMTA1MCwgMSwgUklfRTFIX09OTElORSB9LCB7IDB4MTAxMTAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMTgwMCwgOCwgUklfQUxMX09OTElORSB9LCB7IDB4MTAyMDAwLCAxOCwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDIwNTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwMjA2NCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDIwODAsIDE3LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDIwYzgsIDgsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MTAyNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDMwMDAsIDI2LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMzA3NCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAzMDg0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMzA5NCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAzMDk4LCA1LCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDEwMzgwMCwgOCwgUklfQUxMX09OTElORSB9LCB7IDB4MTA0MDAwLCA2MywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDQxMDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNDExOCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDQyMDAsIDE3LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDQ0MDAsIDY0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNDUwMCwgMTkyLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA0ODAwLCA2NCwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDQ5MDAsIDE5MiwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTAwMCwgNywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUwMWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwMjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MDJjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MDMwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTAzYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTA0MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUwNGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwNTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MDVjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MDYwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTA2YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTA3MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUwN2MsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwODAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MDhjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MDkwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTA5YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTBhMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUwYWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwYjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MGJjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MGMwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTBjYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTBkMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUwZGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwZTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MGVjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MGYwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTBmYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTEwMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUxMGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxMTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MTFjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MTIwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTEyYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTEzMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUxM2MsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxNDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MTRjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MTUwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTE1YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTE2MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUxNmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxNzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MTdjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MTgwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTE4YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTE5MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUxOWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxYTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MWFjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MWIwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTFiYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTFjMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUxY2MsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxZDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MWRjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MWUwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTFlYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTFmMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUxZmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyMDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MjBjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MjEwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTIxYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTIyMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUyMmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyMzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MjNjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MjQwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTI0YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTI1MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUyNWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyNjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MjZjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MjcwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTI3YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTI4MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUyOGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyOTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MjljLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MmEwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTJhYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTJiMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUyYmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyYzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MmNjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MmQwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTJkYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTJlMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUyZWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyZjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MmZjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MzAwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTMwYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTMxMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUzMWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzMjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MzJjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MzMwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTMzYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTM0MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUzNGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzNTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MzVjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MzYwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTM2YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTM3MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUzN2MsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzODAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MzhjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MzkwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTM5YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTNhMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUzYWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzYjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1M2JjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1M2MwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTNjYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTNkMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUzZGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzZTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1M2VjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1M2YwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTNmYywgNzY5LCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA4MDAwLCAzMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDgwOTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwODBhMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDgwYWMsIDUsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDEwODEwMCwgNSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDgxMjAsIDUsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwODIwMCwgNzQsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA4NDAwLCA3NCwgUklfQUxMX09OTElORSB9LCB7IDB4MTA4ODAwLCAxNTIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA5MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjAwMDAsIDM0NywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMjA1NzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDU4OCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMjA1OTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDU5YywgMjMsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MTIwNjE0LCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxMjA2MWMsIDMwLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDEyMDgwYywgNjUsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMGEwMCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMjIwMDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyODAwMCwgMiwgUklfRTFIX09OTElORSB9LAorCXsgMHgxNDAwMDAsIDExNCwgUklfQUxMX09OTElORSB9LCB7IDB4MTQwMWQ0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE0MDFlNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTQwMjAwLCA2LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE0NDAwMCwgNCwgUklfQUxMX09OTElORSB9LCB7IDB4MTQ4MDAwLCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE0YzAwMCwgNCwgUklfQUxMX09OTElORSB9LCB7IDB4MTUwMDAwLCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE1NDAwMCwgNCwgUklfQUxMX09OTElORSB9LCB7IDB4MTU4MDAwLCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE1YzAwMCwgNywgUklfRTFIX09OTElORSB9LCB7IDB4MTYxMDAwLCA3LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2MTAyOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTYxMDM4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2MTgwMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MDAwLCA2MCwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjQwZmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NDEwYywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjQxMTAsIDIsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDE2NDIwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjQyMDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NDIxMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjQyMTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NDIyMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjQyMjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NDIzMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjQyMzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NDI0MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjQyNDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NDI1MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjQyNTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NDI2MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjQyNzAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NDI4MCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjQ4MDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NTAwMCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjYwMDAsIDE2NCwgUklfQUxMX09OTElORSB9LCB7IDB4MTY2MjljLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NjJhYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY2MmJjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NjQwMCwgNDksIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NjRjOCwgMzgsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY2NTY4LCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjY4MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY4MDAwLCAyNzAsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2ODQ0NCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjg0NTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2ODgwMCwgMTksIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY4OTAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjhhMDAsIDEyOCwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNmEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2YTAwNCwgMTUzNSwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MTZjMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNmMwMDQsIDE1MzUsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDE2ZTAwMCwgMTYsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDE2ZTEwMCwgMSwgUklfRTFIX09OTElORSB9LAorCXsgMHgxNmUyMDAsIDIsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDE2ZTQwMCwgMTgzLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDE3MDAwMCwgOTMsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE3MDE4MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNzAxOTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE3MDIwMCwgNCwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNzAyMTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE3ODAwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxODAwMDAsIDYxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAxMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTgwMTEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAxMjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTgwMTMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAxM2MsIDIsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MTgwMjAwLCA1OCwgUklfQUxMX09OTElORSB9LCB7IDB4MTgwMzQwLCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE4MDQwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTgwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDE4MTAwMCwgNCwgUklfQUxMX09OTElORSB9LCB7IDB4MTgxMDEwLCAxMDIwLCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgxYTAwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFhMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MWExMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYTEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDFhNTgwMCwgMjU2MCwgUklfRTFIX09GRkxJTkUgfSwgeyAweDFhODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDFhODEwMCwgMTk4NCwgUklfRTFIX09GRkxJTkUgfSwgeyAweDFhYTAwMCwgMSwgUklfRTFIX09OTElORSB9LAorCXsgMHgxYWEwMDQsIDY2NTUsIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgxYjE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MWIxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxYjIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDFiMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgxYjgyMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4MjQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjgyODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4MmMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjhhMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4YTgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYzAwMDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjAwMDAwLCA2NSwgUklfQUxMX09OTElORSB9LCB7IDB4MjAwMTEwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwMDEyMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjAwMTMwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwMDE0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjAwMTRjLCAyLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDIwMDIwMCwgNTgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMDM0MCwgNCwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDA0MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgyMDIwMDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMjAxMCwgMjA0NCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MjIwMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMjAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDIyMTAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjIxMDA0LCA0NjA3LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgyMjU4MDAsIDE1MzYsIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgyMjcwMDAsIDEsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MjI3MDA0LCAxMDIzLCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MjI4MDAwLCA2NCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MjI4MTAwLCA4NjQwLCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MjMxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDIzMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MjMyMDAwLCAxLCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgyMzI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MjM4MjAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIzODI0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjM4MjgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIzODJjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjM4YTAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIzOGE4MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjQwMDAwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDI4MDAwMCwgNjUsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI4MDExMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyODAxMjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI4MDEzMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyODAxNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI4MDE0YywgMiwgUklfRTFIX09OTElORSB9LAorCXsgMHgyODAyMDAsIDU4LCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODAzNDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjgwNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MjgyMDAwLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODIwMTAsIDIwNDQsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDJhMDAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MmEwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgyYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDJhMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MmE1ODAwLCAyNTYwLCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MmE4MDAwLCA2NCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MmE4MTAwLCA5NjAsIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgyYTkwMDAsIDEsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MmE5MDA0LCA3Njc5LCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MmIxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDJiMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MmIyMDAwLCAxLCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgyYjI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MmI4MjAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDJiODI0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MmI4MjgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDJiODJjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MmI4YTAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDJiOGE4MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MmMwMDAwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMwMDAwMCwgNjUsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMDExMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgzMDAxMjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMDEzMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgzMDAxNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMDE0YywgMiwgUklfRTFIX09OTElORSB9LAorCXsgMHgzMDAyMDAsIDU4LCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMDAzNDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzAwNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMDA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MzAyMDAwLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMDIwMTAsIDIwNDQsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDMyMDAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzIwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgzMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMyMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MzI1ODAwLCAyNTYwLCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MzI4MDAwLCA2NCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MzI4MTAwLCA1MzYsIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgzMjg5NjAsIDEsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MzI4OTY0LCA4MTAzLCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MzMxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDMzMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MzMyMDAwLCAxLCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgzMzI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MzM4MjAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMzODI0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzM4MjgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMzODJjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzM4YTAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMzOGE4MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzQwMDAwLCAyLCBSSV9BTExfT05MSU5FIH0KIH07CiAKIAotI2RlZmluZSBJRExFUkVHU19DT1VOVAkJMjc3Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19hZGRyIGlkbGVfYWRkcnNbSURMRVJFR1NfQ09VTlRdID0gewotCXsgMHgyMTE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIxMjAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyMTJjLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDI4MTQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyODFjLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweGEzOGMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhhNDA4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE0MmMsIDEyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YTYwMCwgNSwgUklfRTFIX09OTElORX0sIHsgMHhhNjE4LCAxLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4YzA5YywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDNiMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEwM2MwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwM2QwLCAxLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MjAyMWMsIDExLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMmE4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjAyYjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjA0MDQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyMDQwYywgMiwgUklfQUxMX09OTElORX0sIHsgMHgyMDQxYywgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDQwMTU0LCAxNCwgUklfQUxMX09OTElORX0sIHsgMHg0MDE5OCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDQwNGFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQwNGJjLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NDIyOTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDIyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg0MjJiMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MjU0OCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDQyNTUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQyNTU4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NTAxNjAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAxZDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg1MDFlMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg1MDIwNCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDUwMjBjLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDUwMjFjLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NjAwOTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NjAxMWMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg2MDEyYywgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMTAxYywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGMxMDJjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMyMjkwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzIyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzIyYjAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhjMjU0OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMjU1MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGMyNTU4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGM0Mjk0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzQyYTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQyYjQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhjNDU1MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjNDU1OCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGM0NTYwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMTZjLCA4LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ZDAxZDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAxZTgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhkMDIwNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDIwYywgMywgUklfQUxMX09OTElORX0sCi0JeyAweGUwMTU0LCA4LCBSSV9BTExfT05MSU5FfSwgeyAweGUwMWM4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ZTAxZDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAyMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhlMDIwYywgMiwgUklfQUxMX09OTElORX0sIHsgMHhlMDIxYywgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDEwMTAxNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDEwMzAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDEwNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAyMDU4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTAyMDgwLCAxNiwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwMDQsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDMwNjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDc4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTAzMDg4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzA5YywgMiwgUklfRTFIX09OTElORX0sCi0JeyAweDEwNDAwNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDQwMTgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDQwMjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MDNjLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA0MGZjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDEwYywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEwNDQwMCwgNjQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0ODAwLCA2NCwgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTAwMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwMjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MDMwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MDQwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTA1MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTA2MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwODAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MDkwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MGEwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTBiMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTBjMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwZTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MGYwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MTAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTExMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTEyMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxNDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTUwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MTYwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTE3MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTE4MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxYTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MWIwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MWMwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTFkMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTFlMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyMDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjEwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MjIwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTIzMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTI0MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyNjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjcwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MjgwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTI5MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTJhMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyYzAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MmQwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MmUwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTJmMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTMwMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzMjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MzMwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MzQwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTM1MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTM2MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzODAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MzkwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1M2EwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTNiMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTNjMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzZTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1M2YwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA4MDk0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDFiMCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDMyYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjAzNmMsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA0MDgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNDE0LCAxNSwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDQ3OCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMjA1MmMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA1NjQsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNTdjLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwNThjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDYwOCwgMSwgUklfRTFIX09OTElORX0sCi0JeyAweDEyMDgwOCwgMSwgUklfRTFfT05MSU5FfSwgeyAweDEyMDgwYywgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDgxOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4MjAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA4MjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODMwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwODM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg0MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDg0OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4NTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA4NTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODYwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwODY4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg3MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDg3OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4ODAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA4ODgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODkwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwODk4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhhMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDhhOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4YjAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA4YjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGMwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwOGM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhkMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDhkOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4ZTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA4ZTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGYwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwOGY4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDkwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDkwOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNDAwNWMsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNDAwZDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQwMGUwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTQwMWM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDIwMCwgNiwgUklfQUxMX09OTElORX0sCi0JeyAweDE2MTAxYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjEwMmMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjQwMTQsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MGYwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY2MjkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjJhMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2NjJiMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjY1NDgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjY1NTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2NTU4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODAwOCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2ODAxMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjgwMTgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjgwMjgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MDU4LCA0LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY4MDcwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODIzOCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2ODJkMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjgyZTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjgzMDAsIDY3LCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODQxMCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDE2ODQzOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjg0NDgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjhhMDAsIDEyOCwgUklfQUxMX09OTElORX0sIHsgMHgxNmUyMDAsIDEyOCwgUklfRTFIX09OTElORX0sCi0JeyAweDE2ZTQwNCwgMiwgUklfRTFIX09OTElORX0sIHsgMHgxNmU1ODQsIDcwLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTcwMGE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE3MDBhYywgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDE3MDBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNzAxNzQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNzAxODQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMGY0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTgwMTA0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDExNCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE4MDEyNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODAyNmMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxODAyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWExMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MWFhMDAwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDFiODAwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDFiODA0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYjgwODAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxYjgwYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTA0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjAwMTE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDEyNCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDIwMDEzNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAyNmMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyMDAyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjIxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjI3MDAwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDIzODAwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDIzODA0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMzgwODAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyMzgwYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTA0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjgwMTE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDEyNCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDI4MDEzNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAyNmMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyODAyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmExMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MmE5MDAwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDJiODAwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDJiODA0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYjgwODAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyYjgwYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTA0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MzAwMTE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDEyNCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDMwMDEzNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAyNmMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgzMDAyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzIxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MzI4OTYwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDMzODAwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDMzODA0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMzgwODAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgzMzgwYzAsIDEsIFJJX0FMTF9PTkxJTkV9CisjZGVmaW5lIElETEVfUkVHU19DT1VOVAkJCTI3Nworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYWRkciBpZGxlX2FkZHJzW0lETEVfUkVHU19DT1VOVF0gPSB7CisJeyAweDIxMTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIxMjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjEyYywgNCwgUklfQUxMX09OTElORSB9LCB7IDB4MjgxNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyODFjLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhMzhjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGE0MDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGE0MmMsIDEyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGE2MDAsIDUsIFJJX0UxSF9PTkxJTkUgfSwgeyAweGE2MTgsIDEsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4YzA5YywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAzYjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTAzYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwM2QwLCAxLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDIwMjFjLCAxMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjAyYTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjAyYjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwNDA0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwNDBjLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDQxYywgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHg0MDE1NCwgMTQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQwMTk4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDQwNGFjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MDRiYywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg0MjI5MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NDIyYTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NDIyYjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQyNTQ4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDQyNTUwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MjU1OCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg1MDE2MCwgOCwgUklfQUxMX09OTElORSB9LCB7IDB4NTAxZDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NTAxZTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDUwMjA0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDUwMjBjLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHg1MDIxYywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg2MDA5MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NjAxMWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NjAxMmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGMxMDFjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGMxMDJjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjMjI5MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhjMjJhMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YzIyYjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzI1NDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGMyNTUwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGMyNTU4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjNDI5NCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhjNDJhNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YzQyYjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzQ1NTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGM0NTU4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGM0NTYwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhkMDE2YywgOCwgUklfQUxMX09OTElORSB9LAorCXsgMHhkMDFkOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4ZDAxZTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ZDAyMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQwMjBjLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGUwMTU0LCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHhlMDFjOCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhlMDFkOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4ZTAyMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ZTAyMGMsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGUwMjFjLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMTAxNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAxMDMwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMTA0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAyMDU4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMjA4MCwgMTYsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwMzAwNCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDMwNjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwMzA3OCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDMwODgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwMzA5YywgMiwgUklfRTFIX09OTElORSB9LAorCXsgMHgxMDQwMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNDAxOCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDQwMjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNDAzYywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDQwZmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNDEwYywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDQ0MDAsIDY0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDQ4MDAsIDY0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTAwMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MDEwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTAyMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MDMwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTA0MCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MDUwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTA2MCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MDcwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTA4MCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MDkwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTBhMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MGIwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTBjMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MGQwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTBlMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MGYwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTEwMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MTEwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTEyMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MTMwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTE0MCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MTUwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTE2MCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MTcwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTE4MCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MTkwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTFhMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MWIwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTFjMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MWQwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTFlMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MWYwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTIwMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MjEwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTIyMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MjMwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTI0MCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MjUwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTI2MCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MjcwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTI4MCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MjkwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTJhMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MmIwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTJjMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MmQwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTJlMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MmYwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTMwMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MzEwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTMyMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MzMwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTM0MCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MzUwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTM2MCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MzcwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTM4MCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1MzkwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTNhMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1M2IwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTNjMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1M2QwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTNlMCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTA1M2YwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwODA5NCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMWIwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDMyYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwMzZjLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDQwOCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwNDE0LCAxNSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMjA0NzgsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDUyYywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMjA1NjQsIDMsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDU3YywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMjA1OGMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDYwOCwgMSwgUklfRTFIX09OTElORSB9LAorCXsgMHgxMjA4MDgsIDEsIFJJX0UxX09OTElORSB9LCB7IDB4MTIwODBjLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDgxOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwODIwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDgyOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwODMwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDgzOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwODQwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDg0OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwODUwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDg1OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwODYwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDg2OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwODcwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDg3OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwODgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDg4OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwODkwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDg5OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwOGEwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDhhOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwOGIwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDhiOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwOGMwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDhjOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwOGQwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDhkOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwOGUwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDhlOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwOGYwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDhmOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwOTAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDkwOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTQwMDVjLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE0MDBkMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTQwMGUwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE0MDFjOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTQwMjAwLCA2LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2MTAxYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTYxMDJjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NDAxNCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MGYwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NjI5MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY2MmEwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NjJiMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY2NTQ4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NjU1MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY2NTU4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2ODAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4MDA4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2ODAxMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4MDE4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2ODAyOCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4MDU4LCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2ODA3MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4MjM4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2ODJkMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4MmUwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2ODMwMCwgNjcsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2ODQxMCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjg0MzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2ODQ0OCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjhhMDAsIDEyOCwgUklfQUxMX09OTElORSB9LCB7IDB4MTZlMjAwLCAxMjgsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MTZlNDA0LCAyLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxNmU1ODQsIDcwLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDE3MDBhNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTcwMGFjLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE3MDBjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTcwMTc0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE3MDE4NCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTgwMGY0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE4MDEwNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTgwMTE0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE4MDEyNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTgwMjZjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE4MDJhMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MWExMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDFhYTAwMCwgMSwgUklfRTFIX09OTElORSB9LCB7IDB4MWI4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDFiODA0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MWI4MDgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDFiODBjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjAwMTA0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwMDExNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjAwMTI0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwMDEzNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjAwMjZjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwMDJhMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjIxMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIyNzAwMCwgMSwgUklfRTFIX09OTElORSB9LCB7IDB4MjM4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIzODA0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjM4MDgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIzODBjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjgwMTA0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDI4MDExNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjgwMTI0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDI4MDEzNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjgwMjZjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDI4MDJhMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MmExMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDJhOTAwMCwgMSwgUklfRTFIX09OTElORSB9LCB7IDB4MmI4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDJiODA0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MmI4MDgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDJiODBjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzAwMTA0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMwMDExNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzAwMTI0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMwMDEzNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzAwMjZjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMwMDJhMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzIxMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMyODk2MCwgMSwgUklfRTFIX09OTElORSB9LCB7IDB4MzM4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMzODA0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzM4MDgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMzODBjMCwgMSwgUklfQUxMX09OTElORSB9CiB9OwogCisjZGVmaW5lIFdSRUdTX0NPVU5UX0UxCQkJMQogc3RhdGljIGNvbnN0IHUzMiByZWFkX3JlZ19lMV8wW10gPSB7IDB4MWIxMDAwIH07CiAKLSNkZWZpbmUgV1JFR1NfQ09VTlRfRTEJCTEKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3JlZ19hZGRyIHdyZWdfYWRkcnNfZTFbV1JFR1NfQ09VTlRfRTFdID0gewogCXsgMHgxYjBjMDAsIDE5MiwgMSwgcmVhZF9yZWdfZTFfMCwgUklfRTFfT0ZGTElORSB9CiB9OwogCisKKyNkZWZpbmUgV1JFR1NfQ09VTlRfRTFICQkJMQogc3RhdGljIGNvbnN0IHUzMiByZWFkX3JlZ19lMWhfMFtdID0geyAweDFiMTA0MCwgMHgxYjEwMDAgfTsKIAotI2RlZmluZSBXUkVHU19DT1VOVF9FMUgJCTEKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3JlZ19hZGRyIHdyZWdfYWRkcnNfZTFoW1dSRUdTX0NPVU5UX0UxSF0gPSB7CiAJeyAweDFiMGMwMCwgMjU2LCAyLCByZWFkX3JlZ19lMWhfMCwgUklfRTFIX09GRkxJTkUgfQogfTsKQEAgLTUxMiwxNSArNTE3LDE4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGR1bXBfc2lnbiBkdW1wX3NpZ25fYWxsID0geyAweDQ5YWE5M2VlLCAweDQwODM1LCAweDIyIH07CiAKIAotI2RlZmluZSBUSU1FUl9SRUdTX0NPVU5UX0UxCTIKKyNkZWZpbmUgVElNRVJfUkVHU19DT1VOVF9FMQkJMgogc3RhdGljIGNvbnN0IHUzMiB0aW1lcl9zdGF0dXNfcmVnc19lMVtUSU1FUl9SRUdTX0NPVU5UX0UxXSA9CiAJeyAweDE2NDAxNCwgMHgxNjQwMTggfTsKIHN0YXRpYyBjb25zdCB1MzIgdGltZXJfc2Nhbl9yZWdzX2UxW1RJTUVSX1JFR1NfQ09VTlRfRTFdID0KIAl7IDB4MTY0MGQwLCAweDE2NDBkNCB9OwogCi0jZGVmaW5lIFRJTUVSX1JFR1NfQ09VTlRfRTFICTIKKworI2RlZmluZSBUSU1FUl9SRUdTX0NPVU5UX0UxSAkJMgogc3RhdGljIGNvbnN0IHUzMiB0aW1lcl9zdGF0dXNfcmVnc19lMWhbVElNRVJfUkVHU19DT1VOVF9FMUhdID0KIAl7IDB4MTY0MDE0LCAweDE2NDAxOCB9Owogc3RhdGljIGNvbnN0IHUzMiB0aW1lcl9zY2FuX3JlZ3NfZTFoW1RJTUVSX1JFR1NfQ09VTlRfRTFIXSA9CiAJeyAweDE2NDBkMCwgMHgxNjQwZDQgfTsKIAorCisjZW5kaWYgLyogQk5YMlhfRFVNUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmggYi9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmgKaW5kZXggZTJkZjIzOC4uOTMxZGNhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaApAQCAtMTIsNDggKzEyLDExNyBAQAogCShJU19FMUhfT0ZGU0VUID8gMHg3MDAwIDogMHgxMDAwKQogI2RlZmluZSBDU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGlkeCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4NzAyMCArIChpZHggKiAweDEwKSkgOiAoMHgxMDIwICsgKGlkeCAqIDB4MTApKSkKLSNkZWZpbmUgQ1NUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChmdW5jdGlvbiwgaW5kZXgpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDg1MjIgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4NDApICsgXAotCSgoZnVuY3Rpb24mMSkgKiAweDEwMCkgKyAoaW5kZXggKiAweDQpKSA6ICgweDE5MjIgKyAoZnVuY3Rpb24gKiBcCisjZGVmaW5lIENTVE9STV9ERUZfU0JfSENfRElTQUJMRV9DX09GRlNFVChmdW5jdGlvbiwgaW5kZXgpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDg2MjIgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4NDApICsgXAorCSgoZnVuY3Rpb24mMSkgKiAweDEwMCkgKyAoaW5kZXggKiAweDQpKSA6ICgweDM1NjIgKyAoZnVuY3Rpb24gKiBcCiAJMHg0MCkgKyAoaW5kZXggKiAweDQpKSkKLSNkZWZpbmUgQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg4NTAwICsgKChmdW5jdGlvbj4+MSkgKiAweDQwKSArIFwKLQkoKGZ1bmN0aW9uJjEpICogMHgxMDApKSA6ICgweDE5MDAgKyAoZnVuY3Rpb24gKiAweDQwKSkpCi0jZGVmaW5lIENTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg4NTA4ICsgKChmdW5jdGlvbj4+MSkgKiAweDQwKSArIFwKLQkoKGZ1bmN0aW9uJjEpICogMHgxMDApKSA6ICgweDE5MDggKyAoZnVuY3Rpb24gKiAweDQwKSkpCisjZGVmaW5lIENTVE9STV9ERUZfU0JfSENfRElTQUJMRV9VX09GRlNFVChmdW5jdGlvbiwgaW5kZXgpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDg4MjIgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4ODApICsgXAorCSgoZnVuY3Rpb24mMSkgKiAweDIwMCkgKyAoaW5kZXggKiAweDQpKSA6ICgweDM1ZTIgKyAoZnVuY3Rpb24gKiBcCisJMHg4MCkgKyAoaW5kZXggKiAweDQpKSkKKyNkZWZpbmUgQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfQ19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDg2MDAgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4NDApICsgXAorCSgoZnVuY3Rpb24mMSkgKiAweDEwMCkpIDogKDB4MzU0MCArIChmdW5jdGlvbiAqIDB4NDApKSkKKyNkZWZpbmUgQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfVV9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDg4MDAgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4ODApICsgXAorCSgoZnVuY3Rpb24mMSkgKiAweDIwMCkpIDogKDB4MzVjMCArIChmdW5jdGlvbiAqIDB4ODApKSkKKyNkZWZpbmUgQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19DX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODYwOCArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyBcCisJKChmdW5jdGlvbiYxKSAqIDB4MTAwKSkgOiAoMHgzNTQ4ICsgKGZ1bmN0aW9uICogMHg0MCkpKQorI2RlZmluZSBDU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX1VfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4ODA4ICsgKChmdW5jdGlvbj4+MSkgKiAweDgwKSArIFwKKwkoKGZ1bmN0aW9uJjEpICogMHgyMDApKSA6ICgweDM1YzggKyAoZnVuY3Rpb24gKiAweDgwKSkpCiAjZGVmaW5lIENTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCBcCiAJKElTX0UxSF9PRkZTRVQgPyAweDExZTggOiAweGZmZmZmZmZmKQotI2RlZmluZSBDU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg4NzA0ICsgKHBvcnQgKiAweGYwKSkgOiAoMHgxOTg0ICsgKHBvcnQgKiAweGMwKSkpCi0jZGVmaW5lIENTVE9STV9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBjcHVfaWQsIGluZGV4KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg4MDFhICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCi0JKGluZGV4ICogMHg0KSkgOiAoMHgxNDFhICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCisjZGVmaW5lIENTVE9STV9IQ19CVFJfQ19PRkZTRVQocG9ydCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4OGMwNCArIChwb3J0ICogMHhmMCkpIDogKDB4MzZjNCArIChwb3J0ICogMHhjMCkpKQorI2RlZmluZSBDU1RPUk1fSENfQlRSX1VfT0ZGU0VUKHBvcnQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDhkZTQgKyAocG9ydCAqIDB4ZjApKSA6ICgweDM4NDQgKyAocG9ydCAqIDB4YzApKSkKKyNkZWZpbmUgQ1NUT1JNX0lTQ1NJX0NRX1NJWkVfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2NjgwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgyNWEwICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBDU1RPUk1fSVNDU0lfQ1FfU1FOX1NJWkVfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2NmMwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgyNWIwICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBDU1RPUk1fSVNDU0lfRVFfQ09OU19PRkZTRVQoZnVuY3Rpb24sIGVxSWR4KSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2MDQwICsgKGZ1bmN0aW9uICogMHhjMCkgKyAoZXFJZHggKiAweDE4KSkgOiBcCisJKDB4MjQxMCArIChmdW5jdGlvbiAqIDB4YzApICsgKGVxSWR4ICogMHgxOCkpKQorI2RlZmluZSBDU1RPUk1fSVNDU0lfRVFfTkVYVF9FUUVfQUREUl9PRkZTRVQoZnVuY3Rpb24sIGVxSWR4KSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2MDQ0ICsgKGZ1bmN0aW9uICogMHhjMCkgKyAoZXFJZHggKiAweDE4KSkgOiBcCisJKDB4MjQxNCArIChmdW5jdGlvbiAqIDB4YzApICsgKGVxSWR4ICogMHgxOCkpKQorI2RlZmluZSBDU1RPUk1fSVNDU0lfRVFfTkVYVF9QQUdFX0FERFJfT0ZGU0VUKGZ1bmN0aW9uLCBlcUlkeCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjA0YyArIChmdW5jdGlvbiAqIDB4YzApICsgKGVxSWR4ICogMHgxOCkpIDogXAorCSgweDI0MWMgKyAoZnVuY3Rpb24gKiAweGMwKSArIChlcUlkeCAqIDB4MTgpKSkKKyNkZWZpbmUgQ1NUT1JNX0lTQ1NJX0VRX05FWFRfUEFHRV9BRERSX1ZBTElEX09GRlNFVChmdW5jdGlvbiwgZXFJZHgpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDYwNTcgKyAoZnVuY3Rpb24gKiAweGMwKSArIChlcUlkeCAqIDB4MTgpKSA6IFwKKwkoMHgyNDI3ICsgKGZ1bmN0aW9uICogMHhjMCkgKyAoZXFJZHggKiAweDE4KSkpCisjZGVmaW5lIENTVE9STV9JU0NTSV9FUV9QUk9EX09GRlNFVChmdW5jdGlvbiwgZXFJZHgpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDYwNDIgKyAoZnVuY3Rpb24gKiAweGMwKSArIChlcUlkeCAqIDB4MTgpKSA6IFwKKwkoMHgyNDEyICsgKGZ1bmN0aW9uICogMHhjMCkgKyAoZXFJZHggKiAweDE4KSkpCisjZGVmaW5lIENTVE9STV9JU0NTSV9FUV9TQl9JTkRFWF9PRkZTRVQoZnVuY3Rpb24sIGVxSWR4KSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2MDU2ICsgKGZ1bmN0aW9uICogMHhjMCkgKyAoZXFJZHggKiAweDE4KSkgOiBcCisJKDB4MjQyNiArIChmdW5jdGlvbiAqIDB4YzApICsgKGVxSWR4ICogMHgxOCkpKQorI2RlZmluZSBDU1RPUk1fSVNDU0lfRVFfU0JfTlVNX09GRlNFVChmdW5jdGlvbiwgZXFJZHgpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDYwNTQgKyAoZnVuY3Rpb24gKiAweGMwKSArIChlcUlkeCAqIDB4MTgpKSA6IFwKKwkoMHgyNDI0ICsgKGZ1bmN0aW9uICogMHhjMCkgKyAoZXFJZHggKiAweDE4KSkpCisjZGVmaW5lIENTVE9STV9JU0NTSV9IUV9TSVpFX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjY0MCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MjU5MCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgQ1NUT1JNX0lTQ1NJX05VTV9PRl9UQVNLU19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDYwMDQgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDI0MDQgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIENTVE9STV9JU0NTSV9QQUdFX1NJWkVfTE9HX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjAwMiArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MjQwMiArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgQ1NUT1JNX0lTQ1NJX1BBR0VfU0laRV9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDYwMDAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDI0MDAgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIENTVE9STV9TQl9IQ19ESVNBQkxFX0NfT0ZGU0VUKHBvcnQsIGNwdV9pZCwgaW5kZXgpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgxMWEgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSArIFwKKwkoaW5kZXggKiAweDQpKSA6ICgweDMwNWEgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSArIFwKIAkoaW5kZXggKiAweDQpKSkKLSNkZWZpbmUgQ1NUT1JNX1NCX0hDX1RJTUVPVVRfT0ZGU0VUKHBvcnQsIGNwdV9pZCwgaW5kZXgpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDgwMTggKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSArIFwKLQkoaW5kZXggKiAweDQpKSA6ICgweDE0MTggKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSArIFwKKyNkZWZpbmUgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfVV9PRkZTRVQocG9ydCwgY3B1X2lkLCBpbmRleCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4YjAxYSArIChwb3J0ICogMHg4MDApICsgKGNwdV9pZCAqIDB4ODApICsgXAorCShpbmRleCAqIDB4NCkpIDogKDB4NDAxYSArIChwb3J0ICogMHg4MDApICsgKGNwdV9pZCAqIDB4ODApICsgXAogCShpbmRleCAqIDB4NCkpKQotI2RlZmluZSBDU1RPUk1fU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0LCBjcHVfaWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDgwMDAgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkgOiBcCi0JKDB4MTQwMCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSkKLSNkZWZpbmUgQ1NUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChwb3J0LCBjcHVfaWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDgwMDggKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkgOiBcCi0JKDB4MTQwOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSkKKyNkZWZpbmUgQ1NUT1JNX1NCX0hDX1RJTUVPVVRfQ19PRkZTRVQocG9ydCwgY3B1X2lkLCBpbmRleCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODExOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAorCShpbmRleCAqIDB4NCkpIDogKDB4MzA1OCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAorCShpbmRleCAqIDB4NCkpKQorI2RlZmluZSBDU1RPUk1fU0JfSENfVElNRU9VVF9VX09GRlNFVChwb3J0LCBjcHVfaWQsIGluZGV4KSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHhiMDE4ICsgKHBvcnQgKiAweDgwMCkgKyAoY3B1X2lkICogMHg4MCkgKyBcCisJKGluZGV4ICogMHg0KSkgOiAoMHg0MDE4ICsgKHBvcnQgKiAweDgwMCkgKyAoY3B1X2lkICogMHg4MCkgKyBcCisJKGluZGV4ICogMHg0KSkpCisjZGVmaW5lIENTVE9STV9TQl9IT1NUX1NCX0FERFJfQ19PRkZTRVQocG9ydCwgY3B1X2lkKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MTAwICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkpIDogXAorCSgweDMwNDAgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkpCisjZGVmaW5lIENTVE9STV9TQl9IT1NUX1NCX0FERFJfVV9PRkZTRVQocG9ydCwgY3B1X2lkKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHhiMDAwICsgKHBvcnQgKiAweDgwMCkgKyAoY3B1X2lkICogMHg4MCkpIDogXAorCSgweDQwMDAgKyAocG9ydCAqIDB4ODAwKSArIChjcHVfaWQgKiAweDgwKSkpCisjZGVmaW5lIENTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19DX09GRlNFVChwb3J0LCBjcHVfaWQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgxMDggKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkgOiBcCisJKDB4MzA0OCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSkKKyNkZWZpbmUgQ1NUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX1VfT0ZGU0VUKHBvcnQsIGNwdV9pZCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4YjAwOCArIChwb3J0ICogMHg4MDApICsgKGNwdV9pZCAqIDB4ODApKSA6IFwKKwkoMHg0MDA4ICsgKHBvcnQgKiAweDgwMCkgKyAoY3B1X2lkICogMHg4MCkpKQorI2RlZmluZSBDU1RPUk1fU0JfU1RBVFVTX0JMT0NLX0NfU0laRSAweDEwCisjZGVmaW5lIENTVE9STV9TQl9TVEFUVVNfQkxPQ0tfVV9TSVpFIDB4NjAKICNkZWZpbmUgQ1NUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jdGlvbikgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4MTEwOCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NTEwOCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKICNkZWZpbmUgVFNUT1JNX0FQUFJPWElNQVRFX01BVENIX01VTFRJQ0FTVF9GSUxURVJJTkdfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMWMwICsgKGZ1bmN0aW9uICogMHgyMCkpIDogMHhmZmZmZmZmZikKKwkoSVNfRTFIX09GRlNFVCA/ICgweDMyMDAgKyAoZnVuY3Rpb24gKiAweDIwKSkgOiAweGZmZmZmZmZmKQogI2RlZmluZSBUU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVhfT0ZGU0VUIFwKIAkoSVNfRTFIX09GRlNFVCA/IDB4YTAwMCA6IDB4MTAwMCkKICNkZWZpbmUgVFNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpZHgpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweGEwMjAgKyAoaWR4ICogMHgxMCkpIDogKDB4MTAyMCArIChpZHggKiAweDEwKSkpCiAjZGVmaW5lIFRTVE9STV9DTElFTlRfQ09ORklHX09GRlNFVChwb3J0LCBjbGllbnRfaWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDMzNTAgKyAocG9ydCAqIDB4MTkwKSArIChjbGllbnRfaWQgKiAweDEwKSkgXAotCTogKDB4OWMwICsgKHBvcnQgKiAweDEzMCkgKyAoY2xpZW50X2lkICogMHgxMCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MzNhMCArIChwb3J0ICogMHgxYTApICsgKGNsaWVudF9pZCAqIDB4MTApKSBcCisJOiAoMHg5YzAgKyAocG9ydCAqIDB4MTIwKSArIChjbGllbnRfaWQgKiAweDEwKSkpCiAjZGVmaW5lIFRTVE9STV9DT01NT05fU0FGQ19XT1JLQVJPVU5EX0VOQUJMRV9PRkZTRVQgXAotCShJU19FMUhfT0ZGU0VUID8gMHgxYWQ4IDogMHhmZmZmZmZmZikKKwkoSVNfRTFIX09GRlNFVCA/IDB4MWVkOCA6IDB4ZmZmZmZmZmYpCisjZGVmaW5lIFRTVE9STV9DT01NT05fU0FGQ19XT1JLQVJPVU5EX1RJTUVPVVRfMTBVU0VDX09GRlNFVCBcCisJKElTX0UxSF9PRkZTRVQgPyAweDFlZGEgOiAweGZmZmZmZmZmKQogI2RlZmluZSBUU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKGZ1bmN0aW9uLCBpbmRleCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4YjAxYSArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyBcCiAJKChmdW5jdGlvbiYxKSAqIDB4YTApICsgKGluZGV4ICogMHg0KSkgOiAoMHgxNDFhICsgKGZ1bmN0aW9uICogXApAQCAtNjUsOTUgKzEzNCwxMzMgQEAKIAkoSVNfRTFIX09GRlNFVCA/ICgweGIwMDggKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAogCSgoZnVuY3Rpb24mMSkgKiAweGEwKSkgOiAoMHgxNDA4ICsgKGZ1bmN0aW9uICogMHgyOCkpKQogI2RlZmluZSBUU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyYjgwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg0YjY4ICsgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4Mjk0MCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NDkyOCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKICNkZWZpbmUgVFNUT1JNX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMDAwICsgKGZ1bmN0aW9uICogMHgzOCkpIDogKDB4MTUwMCArIFwKLQkoZnVuY3Rpb24gKiAweDM4KSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHgzMDAwICsgKGZ1bmN0aW9uICogMHg0MCkpIDogKDB4MTUwMCArIFwKKwkoZnVuY3Rpb24gKiAweDQwKSkpCiAjZGVmaW5lIFRTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCBcCi0JKElTX0UxSF9PRkZTRVQgPyAweDFhZDAgOiAweGZmZmZmZmZmKQorCShJU19FMUhfT0ZGU0VUID8gMHgxZWQwIDogMHhmZmZmZmZmZikKICNkZWZpbmUgVFNUT1JNX0hDX0JUUl9PRkZTRVQocG9ydCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4YjE0NCArIChwb3J0ICogMHgzMCkpIDogKDB4MTQ1NCArIChwb3J0ICogMHgxOCkpKQogI2RlZmluZSBUU1RPUk1fSU5ESVJFQ1RJT05fVEFCTEVfT0ZGU0VUKGZ1bmN0aW9uKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHgxMmM4ICsgKGZ1bmN0aW9uICogMHg4MCkpIDogKDB4MjJjOCArIFwKIAkoZnVuY3Rpb24gKiAweDgwKSkpCiAjZGVmaW5lIFRTVE9STV9JTkRJUkVDVElPTl9UQUJMRV9TSVpFIDB4ODAKLSNkZWZpbmUgVFNUT1JNX01BQ19GSUxURVJfQ09ORklHX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MzAwOCArIChmdW5jdGlvbiAqIDB4MzgpKSA6ICgweDE1MDggKyBcCi0JKGZ1bmN0aW9uICogMHgzOCkpKQotI2RlZmluZSBUU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIHN0YXRzX2NvdW50ZXJfaWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDIwMTAgKyAocG9ydCAqIDB4NWIwKSArIChzdGF0c19jb3VudGVyX2lkICogXAotCTB4NTApKSA6ICgweDQwODAgKyAocG9ydCAqIDB4NWIwKSArIChzdGF0c19jb3VudGVyX2lkICogMHg1MCkpKQotI2RlZmluZSBUU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyYzAwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg0Yjg4ICsgXAorI2RlZmluZSBUU1RPUk1fSVNDU0lfQ09OTl9CVUZfUEJMX09GRlNFVChmdW5jdGlvbiwgcGJsRW50cnkpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDYwYzAgKyAoZnVuY3Rpb24gKiAweDQwKSArIChwYmxFbnRyeSAqIDB4OCkpIFwKKwk6ICgweDRjMzAgKyAoZnVuY3Rpb24gKiAweDQwKSArIChwYmxFbnRyeSAqIDB4OCkpKQorI2RlZmluZSBUU1RPUk1fSVNDU0lfRVJST1JfQklUTUFQX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjM0MCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NGNkMCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKLSNkZWZpbmUgVFNUT1JNX1RQQV9FWElTVF9PRkZTRVQgKElTX0UxSF9PRkZTRVQgPyAweDM2ODAgOiAweDFjMjApCi0jZGVmaW5lIFVTVE9STV9BR0dfREFUQV9PRkZTRVQgKElTX0UxSF9PRkZTRVQgPyAweGEwNDAgOiAweDJjMTApCi0jZGVmaW5lIFVTVE9STV9BR0dfREFUQV9TSVpFIChJU19FMUhfT0ZGU0VUID8gMHgyNDQwIDogMHgxMjAwKQorI2RlZmluZSBUU1RPUk1fSVNDU0lfTlVNX09GX1RBU0tTX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjAwNCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NGMwNCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVFNUT1JNX0lTQ1NJX1BBR0VfU0laRV9MT0dfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2MDAyICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg0YzAyICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBUU1RPUk1fSVNDU0lfUEFHRV9TSVpFX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjAwMCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NGMwMCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVFNUT1JNX0lTQ1NJX1JRX1NJWkVfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2MDgwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg0YzIwICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBUU1RPUk1fSVNDU0lfVENQX1ZBUlNfRkxBR1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2MDQwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg0YzEwICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBUU1RPUk1fSVNDU0lfVENQX1ZBUlNfTFNCX0xPQ0FMX01BQ19BRERSX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjA0MiArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NGMxMiArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVFNUT1JNX0lTQ1NJX1RDUF9WQVJTX01TQl9MT0NBTF9NQUNfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDYwNDQgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDRjMTQgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFRTVE9STV9NQUNfRklMVEVSX0NPTkZJR19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDMwMDggKyAoZnVuY3Rpb24gKiAweDQwKSkgOiAoMHgxNTA4ICsgXAorCShmdW5jdGlvbiAqIDB4NDApKSkKKyNkZWZpbmUgVFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBzdGF0c19jb3VudGVyX2lkKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyMDEwICsgKHBvcnQgKiAweDQ5MCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIFwKKwkweDQwKSkgOiAoMHg0MDEwICsgKHBvcnQgKiAweDQ5MCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIDB4NDApKSkKKyNkZWZpbmUgVFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MjljMCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NDk0OCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVFNUT1JNX1RDUF9NQVhfQ1dORF9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDQwMDQgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFmYjQgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFVTVE9STV9BR0dfREFUQV9PRkZTRVQgKElTX0UxSF9PRkZTRVQgPyAweGEwMDAgOiAweDMwMDApCisjZGVmaW5lIFVTVE9STV9BR0dfREFUQV9TSVpFIChJU19FMUhfT0ZGU0VUID8gMHgyMDAwIDogMHgxMDAwKQogI2RlZmluZSBVU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVhfT0ZGU0VUIFwKLQkoSVNfRTFIX09GRlNFVCA/IDB4ODk2MCA6IDB4MTAwMCkKKwkoSVNfRTFIX09GRlNFVCA/IDB4ODAwMCA6IDB4MTAwMCkKICNkZWZpbmUgVVNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpZHgpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDg5ODAgKyAoaWR4ICogMHgxMCkpIDogKDB4MTAyMCArIChpZHggKiAweDEwKSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MDIwICsgKGlkeCAqIDB4MTApKSA6ICgweDEwMjAgKyAoaWR4ICogMHgxMCkpKQogI2RlZmluZSBVU1RPUk1fQ1FFX1BBR0VfQkFTRV9PRkZTRVQocG9ydCwgY2xpZW50SWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDgwMTggKyAocG9ydCAqIDB4NGIwKSArIChjbGllbnRJZCAqIDB4MzApKSA6IFwKLQkoMHg1MzMwICsgKHBvcnQgKiAweDI2MCkgKyAoY2xpZW50SWQgKiAweDIwKSkpCi0jZGVmaW5lIFVTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuY3Rpb24sIGluZGV4KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg5NTIyICsgKChmdW5jdGlvbj4+MSkgKiAweDQwKSArIFwKLQkoKGZ1bmN0aW9uJjEpICogMHgxMDApICsgKGluZGV4ICogMHg0KSkgOiAoMHgxOTIyICsgKGZ1bmN0aW9uICogXAotCTB4NDApICsgKGluZGV4ICogMHg0KSkpCi0jZGVmaW5lIFVTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4OTUwMCArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyBcCi0JKChmdW5jdGlvbiYxKSAqIDB4MTAwKSkgOiAoMHgxOTAwICsgKGZ1bmN0aW9uICogMHg0MCkpKQotI2RlZmluZSBVU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4OTUwOCArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyBcCi0JKChmdW5jdGlvbiYxKSAqIDB4MTAwKSkgOiAoMHgxOTA4ICsgKGZ1bmN0aW9uICogMHg0MCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MTAxMCArIChwb3J0ICogMHg2ODApICsgKGNsaWVudElkICogMHg0MCkpIDogXAorCSgweDQwMTAgKyAocG9ydCAqIDB4MzYwKSArIChjbGllbnRJZCAqIDB4MzApKSkKKyNkZWZpbmUgVVNUT1JNX0NRRV9QQUdFX05FWFRfT0ZGU0VUKHBvcnQsIGNsaWVudElkKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgxMDI4ICsgKHBvcnQgKiAweDY4MCkgKyAoY2xpZW50SWQgKiAweDQwKSkgOiBcCisJKDB4NDAyOCArIChwb3J0ICogMHgzNjApICsgKGNsaWVudElkICogMHgzMCkpKQorI2RlZmluZSBVU1RPUk1fRVRIX1BBVVNFX0VOQUJMRURfT0ZGU0VUKHBvcnQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDJhZDQgKyAocG9ydCAqIDB4OCkpIDogMHhmZmZmZmZmZikKICNkZWZpbmUgVVNUT1JNX0VUSF9SSU5HX1BBVVNFX0RBVEFfT0ZGU0VUKHBvcnQsIGNsaWVudElkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg4MDIwICsgKHBvcnQgKiAweDRiMCkgKyAoY2xpZW50SWQgKiAweDMwKSkgOiBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgxMDMwICsgKHBvcnQgKiAweDY4MCkgKyAoY2xpZW50SWQgKiAweDQwKSkgOiBcCiAJMHhmZmZmZmZmZikKICNkZWZpbmUgVVNUT1JNX0VUSF9TVEFUU19RVUVSWV9BRERSX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MmE1MCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWQ5OCArIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDJhNTAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFkZDAgKyBcCiAJKGZ1bmN0aW9uICogMHg4KSkpCiAjZGVmaW5lIFVTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCBcCiAJKElTX0UxSF9PRkZTRVQgPyAweDI0NDggOiAweGZmZmZmZmZmKQotI2RlZmluZSBVU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg5NzA0ICsgKHBvcnQgKiAweGYwKSkgOiAoMHgxOTg0ICsgKHBvcnQgKiAweGMwKSkpCi0jZGVmaW5lIFVTVE9STV9NQVhfQUdHX1NJWkVfT0ZGU0VUKHBvcnQsIGNsaWVudElkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg4MDEwICsgKHBvcnQgKiAweDRiMCkgKyAoY2xpZW50SWQgKiAweDMwKSkgOiBcCi0JKDB4NTMyOCArIChwb3J0ICogMHgyNjApICsgKGNsaWVudElkICogMHgyMCkpKQotI2RlZmluZSBVU1RPUk1fTUVNX1dPUktBUk9VTkRfQUREUkVTU19PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDI0MDggKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDUzMDggKyBcCisjZGVmaW5lIFVTVE9STV9JU0NTSV9DUV9TSVpFX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NzA0NCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MjQxNCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKLSNkZWZpbmUgVVNUT1JNX1BBVVNFX0VOQUJMRURfT0ZGU0VUKHBvcnQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDJhZDQgKyAocG9ydCAqIDB4OCkpIDogMHhmZmZmZmZmZikKKyNkZWZpbmUgVVNUT1JNX0lTQ1NJX0NRX1NRTl9TSVpFX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NzA0NiArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MjQxNiArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVVNUT1JNX0lTQ1NJX0VSUk9SX0JJVE1BUF9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDc2ODggKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDI5YzggKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFVTVE9STV9JU0NTSV9HTE9CQUxfQlVGX1BIWVNfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDc2NDggKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDI5YjggKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFVTVE9STV9JU0NTSV9OVU1fT0ZfVEFTS1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg3MDA0ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgyNDA0ICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBVU1RPUk1fSVNDU0lfUEFHRV9TSVpFX0xPR19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDcwMDIgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDI0MDIgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFVTVE9STV9JU0NTSV9QQUdFX1NJWkVfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg3MDAwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgyNDAwICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBVU1RPUk1fSVNDU0lfUjJUUV9TSVpFX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NzA0MCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MjQxMCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVVNUT1JNX0lTQ1NJX1JRX0JVRkZFUl9TSVpFX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NzA4MCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MjQyMCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVVNUT1JNX0lTQ1NJX1JRX1NJWkVfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg3MDg0ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgyNDI0ICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBVU1RPUk1fTUFYX0FHR19TSVpFX09GRlNFVChwb3J0LCBjbGllbnRJZCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MTAxOCArIChwb3J0ICogMHg2ODApICsgKGNsaWVudElkICogMHg0MCkpIDogXAorCSgweDQwMTggKyAocG9ydCAqIDB4MzYwKSArIChjbGllbnRJZCAqIDB4MzApKSkKKyNkZWZpbmUgVVNUT1JNX01FTV9XT1JLQVJPVU5EX0FERFJFU1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyNDA4ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxZGE4ICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQogI2RlZmluZSBVU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIHN0YXRzX2NvdW50ZXJfaWQpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweDI0NTAgKyAocG9ydCAqIDB4MmQwKSArIChzdGF0c19jb3VudGVyX2lkICogXAotCTB4MjgpKSA6ICgweDQ3NDAgKyAocG9ydCAqIDB4MmQwKSArIChzdGF0c19jb3VudGVyX2lkICogMHgyOCkpKQorCTB4MjgpKSA6ICgweDE1MDAgKyAocG9ydCAqIDB4MmQwKSArIChzdGF0c19jb3VudGVyX2lkICogMHgyOCkpKQogI2RlZmluZSBVU1RPUk1fUlhfUFJPRFNfT0ZGU0VUKHBvcnQsIGNsaWVudF9pZCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4ODAwMCArIChwb3J0ICogMHg0YjApICsgKGNsaWVudF9pZCAqIDB4MzApKSBcCi0JOiAoMHg1MzE4ICsgKHBvcnQgKiAweDI2MCkgKyAoY2xpZW50X2lkICogMHgyMCkpKQotI2RlZmluZSBVU1RPUk1fU0JfSENfRElTQUJMRV9PRkZTRVQocG9ydCwgY3B1X2lkLCBpbmRleCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4OTAxYSArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAotCShpbmRleCAqIDB4NCkpIDogKDB4MTQxYSArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAotCShpbmRleCAqIDB4NCkpKQotI2RlZmluZSBVU1RPUk1fU0JfSENfVElNRU9VVF9PRkZTRVQocG9ydCwgY3B1X2lkLCBpbmRleCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4OTAxOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAotCShpbmRleCAqIDB4NCkpIDogKDB4MTQxOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAotCShpbmRleCAqIDB4NCkpKQotI2RlZmluZSBVU1RPUk1fU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0LCBjcHVfaWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDkwMDAgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkgOiBcCi0JKDB4MTQwMCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSkKLSNkZWZpbmUgVVNUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChwb3J0LCBjcHVfaWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDkwMDggKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkgOiBcCi0JKDB4MTQwOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDEwMDAgKyAocG9ydCAqIDB4NjgwKSArIChjbGllbnRfaWQgKiAweDQwKSkgXAorCTogKDB4NDAwMCArIChwb3J0ICogMHgzNjApICsgKGNsaWVudF9pZCAqIDB4MzApKSkKICNkZWZpbmUgVVNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjlmMCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWQ4MCArIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI5ZjAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFkYjggKyBcCiAJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFVTVE9STV9UUEFfQlRSX09GRlNFVCAoSVNfRTFIX09GRlNFVCA/IDB4M2RhNSA6IDB4NTA5NSkKKyNkZWZpbmUgVVNUT1JNX1RQQV9CVFJfU0laRSAweDEKICNkZWZpbmUgWFNUT1JNX0FTU0VSVF9MSVNUX0lOREVYX09GRlNFVCBcCiAJKElTX0UxSF9PRkZTRVQgPyAweDkwMDAgOiAweDEwMDApCiAjZGVmaW5lIFhTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaWR4KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHg5MDIwICsgKGlkeCAqIDB4MTApKSA6ICgweDEwMjAgKyAoaWR4ICogMHgxMCkpKQogI2RlZmluZSBYU1RPUk1fQ01OR19QRVJfUE9SVF9WQVJTX09GRlNFVChwb3J0KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyNGE4ICsgKHBvcnQgKiAweDUwKSkgOiAoMHgzYmEwICsgKHBvcnQgKiAweDUwKSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyNGE4ICsgKHBvcnQgKiAweDUwKSkgOiAoMHgzYTgwICsgKHBvcnQgKiAweDUwKSkpCiAjZGVmaW5lIFhTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuY3Rpb24sIGluZGV4KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhhMDFhICsgKChmdW5jdGlvbj4+MSkgKiAweDI4KSArIFwKIAkoKGZ1bmN0aW9uJjEpICogMHhhMCkgKyAoaW5kZXggKiAweDQpKSA6ICgweDE0MWEgKyAoZnVuY3Rpb24gKiBcCkBAIC0xNjUsMjIgKzI3Miw3MyBAQAogCShJU19FMUhfT0ZGU0VUID8gKDB4YTAwOCArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyBcCiAJKChmdW5jdGlvbiYxKSAqIDB4YTApKSA6ICgweDE0MDggKyAoZnVuY3Rpb24gKiAweDI4KSkpCiAjZGVmaW5lIFhTVE9STV9FMUhPVl9PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDJjMTAgKyAoZnVuY3Rpb24gKiAweDIpKSA6IDB4ZmZmZmZmZmYpCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyYzEwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAweGZmZmZmZmZmKQogI2RlZmluZSBYU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyNDE4ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgzYjcwICsgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MjQxOCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4M2E1MCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKICNkZWZpbmUgWFNUT1JNX0ZBSVJORVNTX1BFUl9WTl9WQVJTX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjU4OCArIChmdW5jdGlvbiAqIDB4OTApKSA6ICgweDNjODAgKyBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyNTg4ICsgKGZ1bmN0aW9uICogMHg5MCkpIDogKDB4M2I2MCArIFwKIAkoZnVuY3Rpb24gKiAweDkwKSkpCiAjZGVmaW5lIFhTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCBcCi0JKElTX0UxSF9PRkZTRVQgPyAweDJjMjAgOiAweGZmZmZmZmZmKQorCShJU19FMUhfT0ZGU0VUID8gMHgyYzUwIDogMHhmZmZmZmZmZikKICNkZWZpbmUgWFNUT1JNX0hDX0JUUl9PRkZTRVQocG9ydCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4YTE0NCArIChwb3J0ICogMHgzMCkpIDogKDB4MTQ1NCArIChwb3J0ICogMHgxOCkpKQorI2RlZmluZSBYU1RPUk1fSVNDU0lfSFFfU0laRV9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwYzAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFjMzAgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFhTVE9STV9JU0NTSV9MT0NBTF9NQUNfQUREUjBfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MDgwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxYzIwICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBYU1RPUk1fSVNDU0lfTE9DQUxfTUFDX0FERFIxX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODA4MSArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWMyMSArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX0lTQ1NJX0xPQ0FMX01BQ19BRERSMl9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwODIgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFjMjIgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFhTVE9STV9JU0NTSV9MT0NBTF9NQUNfQUREUjNfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MDgzICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxYzIzICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBYU1RPUk1fSVNDU0lfTE9DQUxfTUFDX0FERFI0X09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODA4NCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWMyNCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX0lTQ1NJX0xPQ0FMX01BQ19BRERSNV9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwODUgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFjMjUgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFhTVE9STV9JU0NTSV9MT0NBTF9WTEFOX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODA4NiArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWMyNiArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX0lTQ1NJX05VTV9PRl9UQVNLU19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwMDQgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFjMDQgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFhTVE9STV9JU0NTSV9QQUdFX1NJWkVfTE9HX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODAwMiArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWMwMiArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX0lTQ1NJX1BBR0VfU0laRV9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwMDAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFjMDAgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFhTVE9STV9JU0NTSV9SMlRRX1NJWkVfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MGM0ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxYzM0ICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBYU1RPUk1fSVNDU0lfU1FfU0laRV9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwYzIgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFjMzIgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFhTVE9STV9JU0NTSV9UQ1BfVkFSU19BRFZfV05EX1NDTF9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwNDMgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFjMTMgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFhTVE9STV9JU0NTSV9UQ1BfVkFSU19GTEFHU19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwNDIgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFjMTIgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFhTVE9STV9JU0NTSV9UQ1BfVkFSU19UT1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MDQxICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxYzExICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBYU1RPUk1fSVNDU0lfVENQX1ZBUlNfVFRMX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODA0MCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWMxMCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKICNkZWZpbmUgWFNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBzdGF0c19jb3VudGVyX2lkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHhjMDAwICsgKHBvcnQgKiAweDNmMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIFwKLQkweDM4KSkgOiAoMHgzMzc4ICsgKHBvcnQgKiAweDNmMCkgKyAoc3RhdHNfY291bnRlcl9pZCAqIDB4MzgpKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweGMwMDAgKyAocG9ydCAqIDB4MzYwKSArIChzdGF0c19jb3VudGVyX2lkICogXAorCTB4MzApKSA6ICgweDMzNzggKyAocG9ydCAqIDB4MzYwKSArIChzdGF0c19jb3VudGVyX2lkICogMHgzMCkpKQogI2RlZmluZSBYU1RPUk1fUkFURV9TSEFQSU5HX1BFUl9WTl9WQVJTX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjU0OCArIChmdW5jdGlvbiAqIDB4OTApKSA6ICgweDNjNDAgKyBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyNTQ4ICsgKGZ1bmN0aW9uICogMHg5MCkpIDogKDB4M2IyMCArIFwKIAkoZnVuY3Rpb24gKiAweDkwKSkpCiAjZGVmaW5lIFhTVE9STV9TUFFfUEFHRV9CQVNFX09GRlNFVChmdW5jdGlvbikgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4MjAwMCArIChmdW5jdGlvbiAqIDB4MTApKSA6ICgweDMzMjggKyBcCkBAIC0xODksOCArMzQ3LDE1IEBACiAJKElTX0UxSF9PRkZTRVQgPyAoMHgyMDA4ICsgKGZ1bmN0aW9uICogMHgxMCkpIDogKDB4MzMzMCArIFwKIAkoZnVuY3Rpb24gKiAweDEwKSkpCiAjZGVmaW5lIFhTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDIzZDggKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDNiNjAgKyBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyM2Q4ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgzYTQwICsgXAogCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBYU1RPUk1fVENQX0dMT0JBTF9ERUxfQUNLX0NPVU5URVJfRU5BQkxFRF9PRkZTRVQocG9ydCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NDAwMCArIChwb3J0ICogMHg4KSkgOiAoMHgxOTYwICsgKHBvcnQgKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX1RDUF9HTE9CQUxfREVMX0FDS19DT1VOVEVSX01BWF9DT1VOVF9PRkZTRVQocG9ydCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NDAwMSArIChwb3J0ICogMHg4KSkgOiAoMHgxOTYxICsgKHBvcnQgKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX1RDUF9UWF9TV1NfVElNRVJfVkFMX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NDA2MCArICgoZnVuY3Rpb24+PjEpICogMHg4KSArICgoZnVuY3Rpb24mMSkgXAorCSogMHg0KSkgOiAoMHgxOTc4ICsgKGZ1bmN0aW9uICogMHg0KSkpCiAjZGVmaW5lIENPTU1PTl9BU01fSU5WQUxJRF9BU1NFUlRfT1BDT0RFIDB4MAogCiAvKioKQEAgLTIxMSw2ICszNzYsOSBAQAogI2RlZmluZSBUQ1BfSVBWNF9IQVNIX1RZUEUgMgogI2RlZmluZSBJUFY2X0hBU0hfVFlQRSAzCiAjZGVmaW5lIFRDUF9JUFY2X0hBU0hfVFlQRSA0CisjZGVmaW5lIFZMQU5fUFJJX0hBU0hfVFlQRSA1CisjZGVmaW5lIEUxSE9WX1BSSV9IQVNIX1RZUEUgNgorI2RlZmluZSBEU0NQX0hBU0hfVFlQRSA3CiAKIAogLyogRXRoZXJuZXQgUmluZyBwYXJhbWV0ZXJzICovCkBAIC0yMTgsMzAgKzM4NiwyNiBAQAogI2RlZmluZSBGSVJTVF9CRF9JTl9QS1QgMAogI2RlZmluZSBQQVJTRV9CRF9JTkRFWCAxCiAjZGVmaW5lIE5VTV9PRl9FVEhfQkRTX0lOX1BBR0UgKChQQUdFX1NJWkUpLyhTVFJVQ1RfU0laRShldGhfdHhfYmQpLzgpKQotCisjZGVmaW5lIFVfRVRIX05VTV9PRl9TR0VTX1RPX0ZFVENIIDgKKyNkZWZpbmUgVV9FVEhfTUFYX1NHRVNfRk9SX1BBQ0tFVCAzCiAKIC8qIFJ4IHJpbmcgcGFyYW1zICovCi0jZGVmaW5lIFVfRVRIX0xPQ0FMX0JEX1JJTkdfU0laRSAxNgotI2RlZmluZSBVX0VUSF9MT0NBTF9TR0VfUklOR19TSVpFIDEyCisjZGVmaW5lIFVfRVRIX0xPQ0FMX0JEX1JJTkdfU0laRSA4CisjZGVmaW5lIFVfRVRIX0xPQ0FMX1NHRV9SSU5HX1NJWkUgMTAKICNkZWZpbmUgVV9FVEhfU0dMX1NJWkUgOAogCiAKLSNkZWZpbmUgVV9FVEhfQkRTX1BFUl9QQUdFX01BU0sgXAotCSgoUEFHRV9TSVpFLyhTVFJVQ1RfU0laRShldGhfcnhfYmQpLzgpKS0xKQotI2RlZmluZSBVX0VUSF9DUUVfUEVSX1BBR0VfTUFTSyBcCi0JKChQQUdFX1NJWkUvKFNUUlVDVF9TSVpFKGV0aF9yeF9jcWUpLzgpKS0xKQotI2RlZmluZSBVX0VUSF9TR0VTX1BFUl9QQUdFX01BU0sgXAotCSgoUEFHRV9TSVpFLyhTVFJVQ1RfU0laRShldGhfcnhfc2dlKS84KSktMSkKLQogI2RlZmluZSBVX0VUSF9TR0VTX1BFUl9QQUdFX0lOVkVSU0VfTUFTSyBcCiAJKDB4RkZGRiAtICgoUEFHRV9TSVpFLygoU1RSVUNUX1NJWkUoZXRoX3J4X3NnZSkpLzgpKS0xKSkKIAotCi0jZGVmaW5lIFRVX0VUSF9DUUVTX1BFUl9QQUdFIFwKLQkoUEFHRV9TSVpFLyhTVFJVQ1RfU0laRShldGhfcnhfY3FlX25leHRfcGFnZSkvOCkpCisjZGVmaW5lIFRVX0VUSF9DUUVTX1BFUl9QQUdFIChQQUdFX1NJWkUvKFNUUlVDVF9TSVpFKGV0aF9yeF9jcWUpLzgpKQogI2RlZmluZSBVX0VUSF9CRFNfUEVSX1BBR0UgKFBBR0VfU0laRS8oU1RSVUNUX1NJWkUoZXRoX3J4X2JkKS84KSkKICNkZWZpbmUgVV9FVEhfU0dFU19QRVJfUEFHRSAoUEFHRV9TSVpFLyhTVFJVQ1RfU0laRShldGhfcnhfc2dlKS84KSkKIAorI2RlZmluZSBVX0VUSF9CRFNfUEVSX1BBR0VfTUFTSyAoVV9FVEhfQkRTX1BFUl9QQUdFLTEpCisjZGVmaW5lIFVfRVRIX0NRRV9QRVJfUEFHRV9NQVNLIChUVV9FVEhfQ1FFU19QRVJfUEFHRS0xKQorI2RlZmluZSBVX0VUSF9TR0VTX1BFUl9QQUdFX01BU0sgKFVfRVRIX1NHRVNfUEVSX1BBR0UtMSkKKwogI2RlZmluZSBVX0VUSF9VTkRFRklORURfUSAweEZGCiAKIC8qIHZhbHVlcyBvZiBjb21tYW5kIElEcyBpbiB0aGUgcmFtcm9kIG1lc3NhZ2UgKi8KQEAgLTI2Niw4ICs0MzAsOCBAQAogI2RlZmluZSBUX0VUSF9DUkMzMl9IQVNIX1NFRUQgMHgwMDAwMDAwMAogCiAvKiBNYXhpbWFsIEwyIGNsaWVudHMgc3VwcG9ydGVkICovCi0jZGVmaW5lIEVUSF9NQVhfUlhfQ0xJRU5UU19FMSAxOQotI2RlZmluZSBFVEhfTUFYX1JYX0NMSUVOVFNfRTFIIDI1CisjZGVmaW5lIEVUSF9NQVhfUlhfQ0xJRU5UU19FMSAxOAorI2RlZmluZSBFVEhfTUFYX1JYX0NMSUVOVFNfRTFIIDI2CiAKIC8qIE1heGltYWwgYWdncmVnYXRpb24gcXVldWVzIHN1cHBvcnRlZCAqLwogI2RlZmluZSBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMSAzMgpAQCAtMjc2LDYgKzQ0MCw5IEBACiAvKiBFVEggUlNTIG1vZGVzICovCiAjZGVmaW5lIEVUSF9SU1NfTU9ERV9ESVNBQkxFRCAwCiAjZGVmaW5lIEVUSF9SU1NfTU9ERV9SRUdVTEFSIDEKKyNkZWZpbmUgRVRIX1JTU19NT0RFX1ZMQU5fUFJJIDIKKyNkZWZpbmUgRVRIX1JTU19NT0RFX0UxSE9WX1BSSSAzCisjZGVmaW5lIEVUSF9SU1NfTU9ERV9JUF9EU0NQIDQKIAogCiAvKioKQEAgLTMzMiwxMiArNDk5LDE0IEBACiAjZGVmaW5lIEhDX0lOREVYX0RFRl9DX0VUSF9TTE9XX1BBVEggMwogI2RlZmluZSBIQ19JTkRFWF9ERUZfQ19FVEhfUkRNQV9DUV9DT05TIDQKICNkZWZpbmUgSENfSU5ERVhfREVGX0NfRVRIX0lTQ1NJX0NRX0NPTlMgNQorI2RlZmluZSBIQ19JTkRFWF9ERUZfQ19FVEhfRkNPRV9DUV9DT05TIDYKIAogI2RlZmluZSBIQ19JTkRFWF9ERUZfVV9FVEhfUkRNQV9SWF9DUV9DT05TIDAKICNkZWZpbmUgSENfSU5ERVhfREVGX1VfRVRIX0lTQ1NJX1JYX0NRX0NPTlMgMQogI2RlZmluZSBIQ19JTkRFWF9ERUZfVV9FVEhfUkRNQV9SWF9CRF9DT05TIDIKICNkZWZpbmUgSENfSU5ERVhfREVGX1VfRVRIX0lTQ1NJX1JYX0JEX0NPTlMgMwotCisjZGVmaW5lIEhDX0lOREVYX0RFRl9VX0VUSF9GQ09FX1JYX0NRX0NPTlMgNAorI2RlZmluZSBIQ19JTkRFWF9ERUZfVV9FVEhfRkNPRV9SWF9CRF9DT05TIDUKIAogLyogdXNlZCBieSB0aGUgZHJpdmVyIHRvIGdldCB0aGUgU0Igb2Zmc2V0ICovCiAjZGVmaW5lIFVTVE9STV9JRCAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9oc2kuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCmluZGV4IDAzYzYyNDIuLjhlMjI2MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oCkBAIC05MSw2ICs5MSwyMSBAQAogCiAjZGVmaW5lIFNIQVJFRF9IV19DRkdfSElERV9QT1JUMQkJICAgIDB4MDAwMDIwMDAKIAorCS8qICBUaGUgZmFuIGZhaWx1cmUgbWVjaGFuaXNtIGlzIHVzdWFsbHkgcmVsYXRlZCB0byB0aGUgUEhZIHR5cGUKKwkgIHNpbmNlIHRoZSBwb3dlciBjb25zdW1wdGlvbiBvZiB0aGUgYm9hcmQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgUEhZLgorCSAgQ3VycmVudGx5LCBmYW4gaXMgcmVxdWlyZWQgZm9yIG1vc3QgZGVzaWducyB3aXRoIFNGWDcxMDEsIEJDTTg3MjcKKwkgIGFuZCBCQ004NDgxLiBJZiBhIGZhbiBpcyBub3QgcmVxdWlyZWQgZm9yIGEgYm9hcmQgd2hpY2ggdXNlcyBvbmUKKwkgIG9mIHRob3NlIFBIWXMsIHRoaXMgZmllbGQgc2hvdWxkIGJlIHNldCB0byAiRGlzYWJsZWQiLiBJZiBhIGZhbiBpcworCSAgcmVxdWlyZWQgZm9yIGEgZGlmZmVyZW50IFBIWSB0eXBlLCB0aGlzIG9wdGlvbiBzaG91bGQgYmUgc2V0IHRvCisJICAiRW5hYmxlZCIuCisJICBUaGUgZmFuIGZhaWx1cmUgaW5kaWNhdGlvbiBpcyBleHBlY3RlZCBvbgorCSAgU1BJTzUgKi8KKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19GQU5fRkFJTFVSRV9NQVNLCQkJICAgICAgMHgwMDE4MDAwMAorI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0ZBTl9GQUlMVVJFX1NISUZUIAkJICAgICAgMTkKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19GQU5fRkFJTFVSRV9QSFlfVFlQRQkJICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0ZBTl9GQUlMVVJFX0RJU0FCTEVECQkgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFNIQVJFRF9IV19DRkdfRkFOX0ZBSUxVUkVfRU5BQkxFRAkJICAgICAgMHgwMDEwMDAwMAorCiAJdTMyIHBvd2VyX2Rpc3NpcGF0ZWQ7CQkJCQkvKiAweDExYyAqLwogI2RlZmluZSBTSEFSRURfSFdfQ0ZHX1BPV0VSX0RJU19DTU5fTUFTSwkgICAgMHhmZjAwMDAwMAogI2RlZmluZSBTSEFSRURfSFdfQ0ZHX1BPV0VSX0RJU19DTU5fU0hJRlQJICAgIDI0CkBAIC0yMzMsNiArMjQ4LDggQEAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNgkgICAgMHgwMDAwMDYwMAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxCSAgICAweDAwMDAwNzAwCiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEJICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNwkgICAgMHgwMDAwMDkwMAorI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3X05PQyAgIDB4MDAwMDBhMDAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRQkgICAgMHgwMDAwZmQwMAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9OT1RfQ09OTgkgICAgMHgwMDAwZmYwMAogCkBAIC0zNDMsMTAgKzM2MCwxNiBAQAogI2RlZmluZSBQT1JUX0ZFQVRVUkVfTUJBX0VOQUJMRUQJCSAgICAweDAyMDAwMDAwCiAjZGVmaW5lIFBPUlRfRkVBVFVSRV9NRldfRU5BQkxFRAkJICAgIDB4MDQwMDAwMDAKIAotCS8qICBDaGVjayB0aGUgb3B0aWMgdmVuZG9yIHZpYSBpMmMgYmVmb3JlIGFsbG93aW5nIGl0IHRvIGJlIHVzZWQgYnkKLQkgIFNXICovCi0jZGVmaW5lIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9ESVNBQkxFRCAJICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfRU5BQkxFRAkJICAgICAgMHgwODAwMDAwMAorCS8qIFJlc2VydmVkIGJpdHM6IDI4LTI5ICovCisJLyogIENoZWNrIHRoZSBvcHRpYyB2ZW5kb3IgdmlhIGkyYyBhZ2FpbnN0IGEgbGlzdCBvZiBhcHByb3ZlZCBtb2R1bGVzCisJICBpbiBhIHNlcGFyYXRlIG52cmFtIGltYWdlICovCisjZGVmaW5lIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9NQVNLCQkgICAgICAweEUwMDAwMDAwCisjZGVmaW5lIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9TSElGVAkJICAgICAgMjkKKyNkZWZpbmUgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX05PX0VORk9SQ0VNRU5UCSAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX0RJU0FCTEVfVFhfTEFTRVIgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfV0FSTklOR19NU0cJICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfUE9XRVJfRE9XTgkgICAgICAweDYwMDAwMDAwCisKIAogCXUzMiB3b2xfY29uZmlnOwogCS8qIERlZmF1bHQgaXMgdXNlZCB3aGVuIGRyaXZlciBzZXRzIHRvICJhdXRvIiBtb2RlICovCkBAIC02MzUsNiArNjU4LDggQEAKICNkZWZpbmUgRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX0RJUyAJCTB4MjAwMTAwMDAKICNkZWZpbmUgRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX01DUCAJCTB4MjAwMjAwMDAKICNkZWZpbmUgRFJWX01TR19DT0RFX1VOTE9BRF9ET05FCQkJMHgyMTAwMDAwMAorI2RlZmluZSBEUlZfTVNHX0NPREVfRENDX09LCQkJCTB4MzAwMDAwMDAKKyNkZWZpbmUgRFJWX01TR19DT0RFX0RDQ19GQUlMVVJFCQkJMHgzMTAwMDAwMAogI2RlZmluZSBEUlZfTVNHX0NPREVfRElBR19FTlRFUl9SRVEJCQkweDUwMDAwMDAwCiAjZGVmaW5lIERSVl9NU0dfQ09ERV9ESUFHX0VYSVRfUkVRCQkJMHg2MDAwMDAwMAogI2RlZmluZSBEUlZfTVNHX0NPREVfVkFMSURBVEVfS0VZCQkJMHg3MDAwMDAwMApAQCAtNjQyLDYgKzY2NywxMiBAQAogI2RlZmluZSBEUlZfTVNHX0NPREVfR0VUX1VQR1JBREVfS0VZCQkJMHg4MTAwMDAwMAogI2RlZmluZSBEUlZfTVNHX0NPREVfR0VUX01BTlVGX0tFWQkJCTB4ODIwMDAwMDAKICNkZWZpbmUgRFJWX01TR19DT0RFX0xPQURfTDJCX1BSQU0JCQkweDkwMDAwMDAwCisJLyoKKwkgKiBUaGUgb3B0aWMgbW9kdWxlIHZlcmlmaWNhdGlvbiBjb21tYW5kcyByZXF1cmlzIGJvb3Rjb2RlCisJICogdjUuMC42IG9yIGxhdGVyCisJICovCisjZGVmaW5lIERSVl9NU0dfQ09ERV9WUkZZX09QVF9NREwJCQkweGEwMDAwMDAwCisjZGVmaW5lIFJFUV9CQ19WRVJfNF9WUkZZX09QVF9NREwJCQkweDAwMDUwMDA2CiAKICNkZWZpbmUgQklPU19NU0dfQ09ERV9MSUNfQ0hBTExFTkdFCQkJMHhmZjAxMDAwMAogI2RlZmluZSBCSU9TX01TR19DT0RFX0xJQ19SRVNQT05TRQkJCTB4ZmYwMjAwMDAKQEAgLTY2Myw2ICs2OTQsNyBAQAogI2RlZmluZSBGV19NU0dfQ09ERV9EUlZfVU5MT0FEX1BPUlQJCQkweDIwMTEwMDAwCiAjZGVmaW5lIEZXX01TR19DT0RFX0RSVl9VTkxPQURfRlVOQ1RJT04gCQkweDIwMTIwMDAwCiAjZGVmaW5lIEZXX01TR19DT0RFX0RSVl9VTkxPQURfRE9ORQkJCTB4MjExMDAwMDAKKyNkZWZpbmUgRldfTVNHX0NPREVfRENDX0RPTkUJCQkJMHgzMDEwMDAwMAogI2RlZmluZSBGV19NU0dfQ09ERV9ESUFHX0VOVEVSX0RPTkUJCQkweDUwMTAwMDAwCiAjZGVmaW5lIEZXX01TR19DT0RFX0RJQUdfUkVGVVNFIAkJCTB4NTAyMDAwMDAKICNkZWZpbmUgRldfTVNHX0NPREVfRElBR19FWElUX0RPTkUJCQkweDYwMTAwMDAwCkBAIC02NzYsNiArNzA4LDkgQEAKICNkZWZpbmUgRldfTVNHX0NPREVfTDJCX1BSQU1fQ19MT0FEX0ZBSUxVUkUJCTB4OTAyMjAwMDAKICNkZWZpbmUgRldfTVNHX0NPREVfTDJCX1BSQU1fWF9MT0FEX0ZBSUxVUkUJCTB4OTAyMzAwMDAKICNkZWZpbmUgRldfTVNHX0NPREVfTDJCX1BSQU1fVV9MT0FEX0ZBSUxVUkUJCTB4OTAyNDAwMDAKKyNkZWZpbmUgRldfTVNHX0NPREVfVlJGWV9PUFRfTURMX1NVQ0NFU1MJCTB4YTAxMDAwMDAKKyNkZWZpbmUgRldfTVNHX0NPREVfVlJGWV9PUFRfTURMX0lOVkxEX0lNRwkJMHhhMDIwMDAwMAorI2RlZmluZSBGV19NU0dfQ09ERV9WUkZZX09QVF9NRExfVU5BUFBST1ZFRAkJMHhhMDMwMDAwMAogCiAjZGVmaW5lIEZXX01TR19DT0RFX0xJQ19DSEFMTEVOR0UJCQkweGZmMDEwMDAwCiAjZGVmaW5lIEZXX01TR19DT0RFX0xJQ19SRVNQT05TRQkJCTB4ZmYwMjAwMDAKQEAgLTcxMCw2ICs3NDUsMTQgQEAKIAl1MzIgZHJ2X3N0YXR1czsKICNkZWZpbmUgRFJWX1NUQVRVU19QTUYJCQkJCTB4MDAwMDAwMDEKIAorI2RlZmluZSBEUlZfU1RBVFVTX0RDQ19FVkVOVF9NQVNLCQkJMHgwMDAwZmYwMAorI2RlZmluZSBEUlZfU1RBVFVTX0RDQ19ESVNBQkxFX0VOQUJMRV9QRgkJMHgwMDAwMDEwMAorI2RlZmluZSBEUlZfU1RBVFVTX0RDQ19CQU5EV0lEVEhfQUxMT0NBVElPTgkJMHgwMDAwMDIwMAorI2RlZmluZSBEUlZfU1RBVFVTX0RDQ19DSEFOR0VfTUFDX0FERFJFU1MJCTB4MDAwMDA0MDAKKyNkZWZpbmUgRFJWX1NUQVRVU19EQ0NfUkVTRVJWRUQxCQkJMHgwMDAwMDgwMAorI2RlZmluZSBEUlZfU1RBVFVTX0RDQ19TRVRfUFJPVE9DT0wJCQkweDAwMDAxMDAwCisjZGVmaW5lIERSVl9TVEFUVVNfRENDX1NFVF9QUklPUklUWQkJCTB4MDAwMDIwMDAKKwogCXUzMiB2aXJ0X21hY191cHBlcjsKICNkZWZpbmUgVklSVF9NQUNfU0lHTl9NQVNLCQkJCTB4ZmZmZjAwMDAKICNkZWZpbmUgVklSVF9NQUNfU0lHTkFUVVJFCQkJCTB4NTY0ZDAwMDAKQEAgLTc0NiwxMCArNzg5LDkgQEAKIHN0cnVjdCBwb3J0X21mX2NmZyB7CiAKIAl1MzIgZHluYW1pY19jZmc7CS8qIGRldmljZSBjb250cm9sIGNoYW5uZWwgKi8KLSNkZWZpbmUgUE9SVF9NRl9DRkdfT1VURVJfVkxBTl9UQUdfTUFTSyAJICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgUE9SVF9NRl9DRkdfT1VURVJfVkxBTl9UQUdfU0hJRlQJICAgIDAKLSNkZWZpbmUgUE9SVF9NRl9DRkdfRFlOQU1JQ19DRkdfRU5BQkxFRCAJICAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgUE9SVF9NRl9DRkdfRFlOQU1JQ19DRkdfREVGQVVMVCAJICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUE9SVF9NRl9DRkdfRTFIT1ZfVEFHX01BU0sJCSAgICAweDAwMDBmZmZmCisjZGVmaW5lIFBPUlRfTUZfQ0ZHX0UxSE9WX1RBR19TSElGVAkJICAgIDAKKyNkZWZpbmUgUE9SVF9NRl9DRkdfRTFIT1ZfVEFHX0RFRkFVTFQJCSAgICBQT1JUX01GX0NGR19FMUhPVl9UQUdfTUFTSwogCiAJdTMyIHJlc2VydmVkWzNdOwogCkBAIC04NTMsNiArODk1LDIyIEBACiB9OwkJCQkJCSAgICAgICAvKiAweDZkYyAqLwogCiAKK3N0cnVjdCBzaG1lbTJfcmVnaW9uIHsKKworCXUzMgkJCXNpemU7CisKKwl1MzIJCQlkY2Nfc3VwcG9ydDsKKyNkZWZpbmUgU0hNRU1fRENDX1NVUFBPUlRfTk9ORQkJCSAgICAweDAwMDAwMDAwCisjZGVmaW5lIFNITUVNX0RDQ19TVVBQT1JUX0RJU0FCTEVfRU5BQkxFX1BGX1RMViAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTSE1FTV9EQ0NfU1VQUE9SVF9CQU5EV0lEVEhfQUxMT0NBVElPTl9UTFYgIDB4MDAwMDAwMDQKKyNkZWZpbmUgU0hNRU1fRENDX1NVUFBPUlRfQ0hBTkdFX01BQ19BRERSRVNTX1RMViAgICAweDAwMDAwMDA4CisjZGVmaW5lIFNITUVNX0RDQ19TVVBQT1JUX1NFVF9QUk9UT0NPTF9UTFYJICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgU0hNRU1fRENDX1NVUFBPUlRfU0VUX1BSSU9SSVRZX1RMVgkgICAgMHgwMDAwMDA4MAorI2RlZmluZSBTSE1FTV9EQ0NfU1VQUE9SVF9ERUZBVUxUCQkgICAgU0hNRU1fRENDX1NVUFBPUlRfTk9ORQorCit9OworCisKIHN0cnVjdCBlbWFjX3N0YXRzIHsKICAgICB1MzIgICAgIHJ4X3N0YXRfaWZoY2lub2N0ZXRzOwogICAgIHUzMiAgICAgcnhfc3RhdF9pZmhjaW5iYWRvY3RldHM7CkBAIC0xMTg2LDkgKzEyNDQsOSBAQAogfTsKIAogCi0jZGVmaW5lIEJDTV81NzEwX0ZXX01BSk9SX1ZFUlNJT04JCQk0Ci0jZGVmaW5lIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04JCQk4Ci0jZGVmaW5lIEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04JCQk1MworI2RlZmluZSBCQ01fNTcxMF9GV19NQUpPUl9WRVJTSU9OCQkJNQorI2RlZmluZSBCQ01fNTcxMF9GV19NSU5PUl9WRVJTSU9OCQkJMAorI2RlZmluZSBCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OCQkJMjEKICNkZWZpbmUgQkNNXzU3MTBfRldfRU5HSU5FRVJJTkdfVkVSU0lPTiAJCTAKICNkZWZpbmUgQkNNXzU3MTBfRldfQ09NUElMRV9GTEFHUwkJCTEKIApAQCAtMTIzOCw2ICsxMjk2LDIyIEBACiAKIAogLyoKKyAqIGRvb3JiZWxsIG1lc3NhZ2Ugc2VudCB0byB0aGUgY2hpcAorICovCitzdHJ1Y3QgZG9vcmJlbGxfc2V0X3Byb2QgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBwcm9kOworCXU4IHplcm9fZmlsbDE7CisJc3RydWN0IGRvb3JiZWxsX2hkciBoZWFkZXI7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwlzdHJ1Y3QgZG9vcmJlbGxfaGRyIGhlYWRlcjsKKwl1OCB6ZXJvX2ZpbGwxOworCXUxNiBwcm9kOworI2VuZGlmCit9OworCisKKy8qCiAgKiBJR1UgZHJpdmVyIGFja25vd2xlZGdlbWVudCByZWdpc3RlcgogICovCiBzdHJ1Y3QgaWd1X2Fja19yZWdpc3RlciB7CkBAIC0xMjcyLDYgKzEzNDYsNjIgQEAKIAogCiAvKgorICogSUdVIGRyaXZlciBhY2tub3dsZWRnZW1lbnQgcmVnaXN0ZXIKKyAqLworc3RydWN0IGlndV9iYWNrd2FyZF9jb21wYXRpYmxlIHsKKwl1MzIgc2JfaWRfYW5kX2ZsYWdzOworI2RlZmluZSBJR1VfQkFDS1dBUkRfQ09NUEFUSUJMRV9TQl9JTkRFWCAoMHhGRkZGPDwwKQorI2RlZmluZSBJR1VfQkFDS1dBUkRfQ09NUEFUSUJMRV9TQl9JTkRFWF9TSElGVCAwCisjZGVmaW5lIElHVV9CQUNLV0FSRF9DT01QQVRJQkxFX1NCX1NFTEVDVCAoMHgxRjw8MTYpCisjZGVmaW5lIElHVV9CQUNLV0FSRF9DT01QQVRJQkxFX1NCX1NFTEVDVF9TSElGVCAxNgorI2RlZmluZSBJR1VfQkFDS1dBUkRfQ09NUEFUSUJMRV9TRUdNRU5UX0FDQ0VTUyAoMHg3PDwyMSkKKyNkZWZpbmUgSUdVX0JBQ0tXQVJEX0NPTVBBVElCTEVfU0VHTUVOVF9BQ0NFU1NfU0hJRlQgMjEKKyNkZWZpbmUgSUdVX0JBQ0tXQVJEX0NPTVBBVElCTEVfQlVQREFURSAoMHgxPDwyNCkKKyNkZWZpbmUgSUdVX0JBQ0tXQVJEX0NPTVBBVElCTEVfQlVQREFURV9TSElGVCAyNAorI2RlZmluZSBJR1VfQkFDS1dBUkRfQ09NUEFUSUJMRV9FTkFCTEVfSU5UICgweDM8PDI1KQorI2RlZmluZSBJR1VfQkFDS1dBUkRfQ09NUEFUSUJMRV9FTkFCTEVfSU5UX1NISUZUIDI1CisjZGVmaW5lIElHVV9CQUNLV0FSRF9DT01QQVRJQkxFX1JFU0VSVkVEXzAgKDB4MUY8PDI3KQorI2RlZmluZSBJR1VfQkFDS1dBUkRfQ09NUEFUSUJMRV9SRVNFUlZFRF8wX1NISUZUIDI3CisJdTMyIHJlc2VydmVkXzI7Cit9OworCisKKy8qCisgKiBJR1UgZHJpdmVyIGFja25vd2xlZGdlbWVudCByZWdpc3RlcgorICovCitzdHJ1Y3QgaWd1X3JlZ3VsYXIgeworCXUzMiBzYl9pZF9hbmRfZmxhZ3M7CisjZGVmaW5lIElHVV9SRUdVTEFSX1NCX0lOREVYICgweEZGRkZGPDwwKQorI2RlZmluZSBJR1VfUkVHVUxBUl9TQl9JTkRFWF9TSElGVCAwCisjZGVmaW5lIElHVV9SRUdVTEFSX1JFU0VSVkVEMCAoMHgxPDwyMCkKKyNkZWZpbmUgSUdVX1JFR1VMQVJfUkVTRVJWRUQwX1NISUZUIDIwCisjZGVmaW5lIElHVV9SRUdVTEFSX1NFR01FTlRfQUNDRVNTICgweDc8PDIxKQorI2RlZmluZSBJR1VfUkVHVUxBUl9TRUdNRU5UX0FDQ0VTU19TSElGVCAyMQorI2RlZmluZSBJR1VfUkVHVUxBUl9CVVBEQVRFICgweDE8PDI0KQorI2RlZmluZSBJR1VfUkVHVUxBUl9CVVBEQVRFX1NISUZUIDI0CisjZGVmaW5lIElHVV9SRUdVTEFSX0VOQUJMRV9JTlQgKDB4Mzw8MjUpCisjZGVmaW5lIElHVV9SRUdVTEFSX0VOQUJMRV9JTlRfU0hJRlQgMjUKKyNkZWZpbmUgSUdVX1JFR1VMQVJfUkVTRVJWRURfMSAoMHgxPDwyNykKKyNkZWZpbmUgSUdVX1JFR1VMQVJfUkVTRVJWRURfMV9TSElGVCAyNworI2RlZmluZSBJR1VfUkVHVUxBUl9DTEVBTlVQX1RZUEUgKDB4Mzw8MjgpCisjZGVmaW5lIElHVV9SRUdVTEFSX0NMRUFOVVBfVFlQRV9TSElGVCAyOAorI2RlZmluZSBJR1VfUkVHVUxBUl9DTEVBTlVQX1NFVCAoMHgxPDwzMCkKKyNkZWZpbmUgSUdVX1JFR1VMQVJfQ0xFQU5VUF9TRVRfU0hJRlQgMzAKKyNkZWZpbmUgSUdVX1JFR1VMQVJfQkNMRUFOVVAgKDB4MTw8MzEpCisjZGVmaW5lIElHVV9SRUdVTEFSX0JDTEVBTlVQX1NISUZUIDMxCisJdTMyIHJlc2VydmVkXzI7Cit9OworCisvKgorICogSUdVIGRyaXZlciBhY2tub3dsZWRnZW1lbnQgcmVnaXN0ZXIKKyAqLwordW5pb24gaWd1X2NvbnNwcm9kX3JlZyB7CisJc3RydWN0IGlndV9yZWd1bGFyIHJlZ3VsYXI7CisJc3RydWN0IGlndV9iYWNrd2FyZF9jb21wYXRpYmxlIGJhY2t3YXJkX2NvbXBhdGlibGU7Cit9OworCisKKy8qCiAgKiBQYXJzZXIgcGFyc2luZyBmbGFncyBmaWVsZAogICovCiBzdHJ1Y3QgcGFyc2luZ19mbGFncyB7CkBAIC0xNDAyLDEyICsxNTMyLDEwIEBACiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfSENfU0hJRlQgMQogI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9UUEEgKDB4MTw8MikKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfVFBBX1NISUZUIDIKLSNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKLSNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMwotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTICgweDE8PDQpCi0jZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1NfU0hJRlQgNAotI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweDc8PDUpCi0jZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNQorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTICgweDE8PDMpCisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1NfU0hJRlQgMworI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweEY8PDQpCisjZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNAogCXU4IHN0YXR1c19ibG9ja19pZDsKIAl1OCBjbGllbnRJZDsKIAl1OCBzYl9pbmRleF9udW1iZXJzOwpAQCAtMTQzMCwxMiArMTU1OCwxMCBAQAogI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9EWU5BTUlDX0hDX1NISUZUIDEKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfVFBBICgweDE8PDIpCiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1RQQV9TSElGVCAyCi0jZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HICgweDE8PDMpCi0jZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDMKLSNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDUyAoMHgxPDw0KQotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTX1NISUZUIDQKLSNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMCAoMHg3PDw1KQotI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDUKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDUyAoMHgxPDwzKQorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTX1NISUZUIDMKKyNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMCAoMHhGPDw0KQorI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDQKICNlbmRpZgogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQogCXUxNiBiZF9idWZmX3NpemU7CkBAIC0xNDU1LDExICsxNTgxLDM2IEBACiAJdTggX19sb2NhbF9iZF9wcm9kOwogCXU4IF9fbG9jYWxfc2dlX3Byb2Q7CiAjZW5kaWYKLQl1MzIgcmVzZXJ2ZWQ7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IF9fc2RtX2JkX2V4cGVjdGVkX2NvdW50ZXI7CisJdTggY3N0b3JtX2FnZ19pbnQ7CisJdTggX19leHBlY3RlZF9iZHNfb25fcmFtOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTggX19leHBlY3RlZF9iZHNfb25fcmFtOworCXU4IGNzdG9ybV9hZ2dfaW50OworCXUxNiBfX3NkbV9iZF9leHBlY3RlZF9jb3VudGVyOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IF9fcmluZ19kYXRhX3JhbV9hZGRyOworCXUxNiBfX2hjX2NzdG9ybV9yYW1fYWRkcjsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBfX2hjX2NzdG9ybV9yYW1fYWRkcjsKKwl1MTYgX19yaW5nX2RhdGFfcmFtX2FkZHI7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCByZXNlcnZlZDE7CisJdTggbWF4X3NnZXNfZm9yX3BhY2tldDsKKwl1MTYgX19iZF9yaW5nX3JhbV9hZGRyOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IF9fYmRfcmluZ19yYW1fYWRkcjsKKwl1OCBtYXhfc2dlc19mb3JfcGFja2V0OworCXU4IHJlc2VydmVkMTsKKyNlbmRpZgogCXUzMiBiZF9wYWdlX2Jhc2VfbG87CiAJdTMyIGJkX3BhZ2VfYmFzZV9oaTsKIAl1MzIgc2dlX3BhZ2VfYmFzZV9sbzsKIAl1MzIgc2dlX3BhZ2VfYmFzZV9oaTsKKwlzdHJ1Y3QgcmVncGFpciByZXNlcnZlZDI7CiB9OwogCiAvKgpAQCAtMTQ4Miw4ICsxNjMzLDggQEAKICAqIExvY2FsIEJEcyBhbmQgU0dFcyByaW5ncyAoaW4gRVRIKQogICovCiBzdHJ1Y3QgZXRoX2xvY2FsX3J4X3JpbmdzIHsKLQlzdHJ1Y3QgZXRoX3J4X2JkIF9fbG9jYWxfYmRfcmluZ1sxNl07Ci0Jc3RydWN0IGV0aF9yeF9zZ2UgX19sb2NhbF9zZ2VfcmluZ1sxMl07CisJc3RydWN0IGV0aF9yeF9iZCBfX2xvY2FsX2JkX3JpbmdbOF07CisJc3RydWN0IGV0aF9yeF9zZ2UgX19sb2NhbF9zZ2VfcmluZ1sxMF07CiB9OwogCiAvKgpAQCAtMTU3NSwxMyArMTcyNiwxMyBAQAogICovCiBzdHJ1Y3QgeHN0b3JtX2V0aF9hZ19jb250ZXh0IHsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgX19iZF9wcm9kOworCXUxNiBhZ2dfdmFsMTsKIAl1OCBfX2FnZ192YXJzMTsKIAl1OCBfX3N0YXRlOwogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJdTggX19zdGF0ZTsKIAl1OCBfX2FnZ192YXJzMTsKLQl1MTYgX19iZF9wcm9kOworCXUxNiBhZ2dfdmFsMTsKICNlbmRpZgogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQogCXU4IGNkdV9yZXNlcnZlZDsKQEAgLTE1OTQsNyArMTc0NSw3IEBACiAJdTggX19hZ2dfdmFyczQ7CiAJdTggY2R1X3Jlc2VydmVkOwogI2VuZGlmCi0JdTMyIF9fbW9yZV9wYWNrZXRzX3RvX3NlbmQ7CisJdTMyIF9fYmRfcHJvZDsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKIAl1MTYgX19hZ2dfdmFyczU7CiAJdTE2IF9fYWdnX3ZhbDRfdGg7CkBAIC0xODYwLDggKzIwMTEsOCBAQAogI2RlZmluZSBFVEhfVFhfQkRfRkxBR1NfVkxBTl9UQUdfU0hJRlQgMAogI2RlZmluZSBFVEhfVFhfQkRfRkxBR1NfSVBfQ1NVTSAoMHgxPDwxKQogI2RlZmluZSBFVEhfVFhfQkRfRkxBR1NfSVBfQ1NVTV9TSElGVCAxCi0jZGVmaW5lIEVUSF9UWF9CRF9GTEFHU19UQ1BfQ1NVTSAoMHgxPDwyKQotI2RlZmluZSBFVEhfVFhfQkRfRkxBR1NfVENQX0NTVU1fU0hJRlQgMgorI2RlZmluZSBFVEhfVFhfQkRfRkxBR1NfTDRfQ1NVTSAoMHgxPDwyKQorI2RlZmluZSBFVEhfVFhfQkRfRkxBR1NfTDRfQ1NVTV9TSElGVCAyCiAjZGVmaW5lIEVUSF9UWF9CRF9GTEFHU19FTkRfQkQgKDB4MTw8MykKICNkZWZpbmUgRVRIX1RYX0JEX0ZMQUdTX0VORF9CRF9TSElGVCAzCiAjZGVmaW5lIEVUSF9UWF9CRF9GTEFHU19TVEFSVF9CRCAoMHgxPDw0KQpAQCAtMTg3Nyw3ICsyMDI4LDcgQEAKIC8qCiAgKiBUaGUgZXRoIFR4IEJ1ZmZlciBEZXNjcmlwdG9yCiAgKi8KLXN0cnVjdCBldGhfdHhfYmQgeworc3RydWN0IGV0aF90eF9zdGFydF9iZCB7CiAJX19sZTMyIGFkZHJfbG87CiAJX19sZTMyIGFkZHJfaGk7CiAJX19sZTE2IG5iZDsKQEAgLTE4ODUsMTAgKzIwMzYsMjEgQEAKIAlfX2xlMTYgdmxhbjsKIAlzdHJ1Y3QgZXRoX3R4X2JkX2ZsYWdzIGJkX2ZsYWdzOwogCXU4IGdlbmVyYWxfZGF0YTsKLSNkZWZpbmUgRVRIX1RYX0JEX0hEUl9OQkRTICgweDNGPDwwKQotI2RlZmluZSBFVEhfVFhfQkRfSERSX05CRFNfU0hJRlQgMAotI2RlZmluZSBFVEhfVFhfQkRfRVRIX0FERFJfVFlQRSAoMHgzPDw2KQotI2RlZmluZSBFVEhfVFhfQkRfRVRIX0FERFJfVFlQRV9TSElGVCA2CisjZGVmaW5lIEVUSF9UWF9TVEFSVF9CRF9IRFJfTkJEUyAoMHgzRjw8MCkKKyNkZWZpbmUgRVRIX1RYX1NUQVJUX0JEX0hEUl9OQkRTX1NISUZUIDAKKyNkZWZpbmUgRVRIX1RYX1NUQVJUX0JEX0VUSF9BRERSX1RZUEUgKDB4Mzw8NikKKyNkZWZpbmUgRVRIX1RYX1NUQVJUX0JEX0VUSF9BRERSX1RZUEVfU0hJRlQgNgorfTsKKworLyoKKyAqIFR4IHJlZ3VsYXIgQkQgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBldGhfdHhfYmQgeworCXUzMiBhZGRyX2xvOworCXUzMiBhZGRyX2hpOworCXUxNiB0b3RhbF9wa3RfYnl0ZXM7CisJdTE2IG5ieXRlczsKKwl1OCByZXNlcnZlZFs0XTsKIH07CiAKIC8qCkBAIC0xODk4LDggKzIwNjAsOCBAQAogCXU4IGdsb2JhbF9kYXRhOwogI2RlZmluZSBFVEhfVFhfUEFSU0VfQkRfSVBfSERSX1NUQVJUX09GRlNFVCAoMHhGPDwwKQogI2RlZmluZSBFVEhfVFhfUEFSU0VfQkRfSVBfSERSX1NUQVJUX09GRlNFVF9TSElGVCAwCi0jZGVmaW5lIEVUSF9UWF9QQVJTRV9CRF9DU19BTllfRkxHICgweDE8PDQpCi0jZGVmaW5lIEVUSF9UWF9QQVJTRV9CRF9DU19BTllfRkxHX1NISUZUIDQKKyNkZWZpbmUgRVRIX1RYX1BBUlNFX0JEX1VEUF9DU19GTEcgKDB4MTw8NCkKKyNkZWZpbmUgRVRIX1RYX1BBUlNFX0JEX1VEUF9DU19GTEdfU0hJRlQgNAogI2RlZmluZSBFVEhfVFhfUEFSU0VfQkRfUFNFVURPX0NTX1dJVEhPVVRfTEVOICgweDE8PDUpCiAjZGVmaW5lIEVUSF9UWF9QQVJTRV9CRF9QU0VVRE9fQ1NfV0lUSE9VVF9MRU5fU0hJRlQgNQogI2RlZmluZSBFVEhfVFhfUEFSU0VfQkRfTExDX1NOQVBfRU4gKDB4MTw8NikKQEAgLTE5MjQsMTAgKzIwODYsMTAgQEAKICNkZWZpbmUgRVRIX1RYX1BBUlNFX0JEX0NXUl9GTEcgKDB4MTw8NykKICNkZWZpbmUgRVRIX1RYX1BBUlNFX0JEX0NXUl9GTEdfU0hJRlQgNwogCXU4IGlwX2hsZW47Ci0JczggY3Nfb2Zmc2V0OworCXM4IHJlc2VydmVkOwogCV9fbGUxNiB0b3RhbF9obGVuOwotCV9fbGUxNiBsc29fbXNzOwogCV9fbGUxNiB0Y3BfcHNldWRvX2NzdW07CisJX19sZTE2IGxzb19tc3M7CiAJX19sZTE2IGlwX2lkOwogCV9fbGUzMiB0Y3Bfc2VuZF9zZXE7CiB9OwpAQCAtMTkzNiwxNSArMjA5OCwxNiBAQAogICogVGhlIGxhc3QgQkQgaW4gdGhlIEJEIG1lbW9yeSB3aWxsIGhvbGQgYSBwb2ludGVyIHRvIHRoZSBuZXh0IEJEIG1lbW9yeQogICovCiBzdHJ1Y3QgZXRoX3R4X25leHRfYmQgewotCXUzMiBhZGRyX2xvOwotCXUzMiBhZGRyX2hpOworCV9fbGUzMiBhZGRyX2xvOworCV9fbGUzMiBhZGRyX2hpOwogCXU4IHJlc2VydmVkWzhdOwogfTsKIAogLyoKLSAqIHVuaW9uIGZvciAzIEJkIHR5cGVzCisgKiB1bmlvbiBmb3IgNCBCZCB0eXBlcwogICovCiB1bmlvbiBldGhfdHhfYmRfdHlwZXMgeworCXN0cnVjdCBldGhfdHhfc3RhcnRfYmQgc3RhcnRfYmQ7CiAJc3RydWN0IGV0aF90eF9iZCByZWdfYmQ7CiAJc3RydWN0IGV0aF90eF9wYXJzZV9iZCBwYXJzZV9iZDsKIAlzdHJ1Y3QgZXRoX3R4X25leHRfYmQgbmV4dF9iZDsKQEAgLTE5NzMsMTEgKzIxMzYsMzUgQEAKICNkZWZpbmUgWFNUT1JNX0VUSF9TVF9DT05URVhUX1NUQVRJU1RJQ1NfRU5BQkxFX1NISUZUIDcKIAl1MTYgdHhfYmRfY29uczsKICNlbmRpZgotCXUzMiBkYl9kYXRhX2FkZHJfbG87Ci0JdTMyIGRiX2RhdGFfYWRkcl9oaTsKLQl1MzIgX19wa3RfY29uczsKLQl1MzIgX19nc29fbmV4dDsKLQl1MzIgaXNfZXRoX2Nvbm5fMWI7CisJdTMyIF9fcmVzZXJ2ZWQxOworCXUzMiBfX3Jlc2VydmVkMjsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1OCBfX3JhbV9jYWNoZV9pbmRleDsKKwl1OCBfX2RvdWJsZV9idWZmZXJfY2xpZW50OworCXUxNiBfX3BrdF9jb25zOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IF9fcGt0X2NvbnM7CisJdTggX19kb3VibGVfYnVmZmVyX2NsaWVudDsKKwl1OCBfX3JhbV9jYWNoZV9pbmRleDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBfX3N0YXRpc3RpY3NfYWRkcmVzczsKKwl1MTYgX19nc29fbmV4dDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBfX2dzb19uZXh0OworCXUxNiBfX3N0YXRpc3RpY3NfYWRkcmVzczsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IF9fbG9jYWxfdHhfYmRfY29uczsKKwl1OCBzYWZjX2dyb3VwX251bTsKKwl1OCBzYWZjX2dyb3VwX2VuOworCXU4IF9faXNfZXRoX2Nvbm47CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBfX2lzX2V0aF9jb25uOworCXU4IHNhZmNfZ3JvdXBfZW47CisJdTggc2FmY19ncm91cF9udW07CisJdTggX19sb2NhbF90eF9iZF9jb25zOworI2VuZGlmCiAJdW5pb24gZXRoX3R4X2JkX3R5cGVzIF9fYmRzWzEzXTsKIH07CiAKQEAgLTIwNDIsOSArMjIyOSw5IEBACiAKIAogLyoKLSAqIHVzdG9ybSBzdGF0dXMgYmxvY2sKKyAqIGNzdG9ybSBkZWZhdWx0IHN0YXR1cyBibG9jaywgZ2VuZXJhdGVkIGJ5IHVzdG9ybQogICovCi1zdHJ1Y3QgdXN0b3JtX2RlZl9zdGF0dXNfYmxvY2sgeworc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrX3UgewogCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfVVNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CiAJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwpAQCAtMjA1Myw5ICsyMjQwLDkgQEAKIH07CiAKIC8qCi0gKiBjc3Rvcm0gc3RhdHVzIGJsb2NrCisgKiBjc3Rvcm0gZGVmYXVsdCBzdGF0dXMgYmxvY2ssIGdlbmVyYXRlZCBieSBjc3Rvcm0KICAqLwotc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrIHsKK3N0cnVjdCBjc3Rvcm1fZGVmX3N0YXR1c19ibG9ja19jIHsKIAlfX2xlMTYgaW5kZXhfdmFsdWVzW0hDX0NTVE9STV9ERUZfU0JfTlVNX0lORElDRVNdOwogCV9fbGUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CiAJdTggZnVuYzsKQEAgLTIwOTAsMTcgKzIyNzcsMTcgQEAKICAqLwogc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jayB7CiAJc3RydWN0IGF0dGVuX2RlZl9zdGF0dXNfYmxvY2sgYXR0ZW5fc3RhdHVzX2Jsb2NrOwotCXN0cnVjdCB1c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB1X2RlZl9zdGF0dXNfYmxvY2s7Ci0Jc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrIGNfZGVmX3N0YXR1c19ibG9jazsKKwlzdHJ1Y3QgY3N0b3JtX2RlZl9zdGF0dXNfYmxvY2tfdSB1X2RlZl9zdGF0dXNfYmxvY2s7CisJc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrX2MgY19kZWZfc3RhdHVzX2Jsb2NrOwogCXN0cnVjdCB4c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB4X2RlZl9zdGF0dXNfYmxvY2s7CiAJc3RydWN0IHRzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrIHRfZGVmX3N0YXR1c19ibG9jazsKIH07CiAKIAogLyoKLSAqIHVzdG9ybSBzdGF0dXMgYmxvY2sKKyAqIGNzdG9ybSBzdGF0dXMgYmxvY2ssIGdlbmVyYXRlZCBieSB1c3Rvcm0KICAqLwotc3RydWN0IHVzdG9ybV9zdGF0dXNfYmxvY2sgeworc3RydWN0IGNzdG9ybV9zdGF0dXNfYmxvY2tfdSB7CiAJX19sZTE2IGluZGV4X3ZhbHVlc1tIQ19VU1RPUk1fU0JfTlVNX0lORElDRVNdOwogCV9fbGUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CiAJdTggZnVuYzsKQEAgLTIxMDksOSArMjI5Niw5IEBACiB9OwogCiAvKgotICogY3N0b3JtIHN0YXR1cyBibG9jaworICogY3N0b3JtIHN0YXR1cyBibG9jaywgZ2VuZXJhdGVkIGJ5IGNzdG9ybQogICovCi1zdHJ1Y3QgY3N0b3JtX3N0YXR1c19ibG9jayB7CitzdHJ1Y3QgY3N0b3JtX3N0YXR1c19ibG9ja19jIHsKIAlfX2xlMTYgaW5kZXhfdmFsdWVzW0hDX0NTVE9STV9TQl9OVU1fSU5ESUNFU107CiAJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwpAQCAtMjEyMyw4ICsyMzEwLDggQEAKICAqIGhvc3Qgc3RhdHVzIGJsb2NrCiAgKi8KIHN0cnVjdCBob3N0X3N0YXR1c19ibG9jayB7Ci0Jc3RydWN0IHVzdG9ybV9zdGF0dXNfYmxvY2sgdV9zdGF0dXNfYmxvY2s7Ci0Jc3RydWN0IGNzdG9ybV9zdGF0dXNfYmxvY2sgY19zdGF0dXNfYmxvY2s7CisJc3RydWN0IGNzdG9ybV9zdGF0dXNfYmxvY2tfdSB1X3N0YXR1c19ibG9jazsKKwlzdHJ1Y3QgY3N0b3JtX3N0YXR1c19ibG9ja19jIGNfc3RhdHVzX2Jsb2NrOwogfTsKIAogCkBAIC0yMTQwLDE1ICsyMzI3LDYgQEAKIAogCiAvKgotICogTDIgZHluYW1pYyBob3N0IGNvYWxlc2NpbmcgaW5pdCBwYXJhbWV0ZXJzCi0gKi8KLXN0cnVjdCBldGhfZHluYW1pY19oY19jb25maWcgewotCXUzMiB0aHJlc2hvbGRbM107Ci0JdTggaGNfdGltZW91dFs0XTsKLX07Ci0KLQotLyoKICAqIHJlZ3VsYXIgZXRoIEZQIENRRSBwYXJhbWV0ZXJzIHN0cnVjdAogICovCiBzdHJ1Y3QgZXRoX2Zhc3RfcGF0aF9yeF9jcWUgewpAQCAtMjMxMiwxMiArMjQ5MCwxMCBAQAogCiAKIC8qCi0gKiBkb29yYmVsbCBkYXRhIGluIGhvc3QgbWVtb3J5CisgKiBhcnJheSBvZiAxMyBiZHMgYXMgYXBwZWFycyBpbiB0aGUgZXRoIHhzdG9ybSBjb250ZXh0CiAgKi8KLXN0cnVjdCBldGhfdHhfZGJfZGF0YSB7Ci0JX19sZTMyIHBhY2tldHNfcHJvZDsKLQlfX2xlMTYgYmRzX3Byb2Q7Ci0JX19sZTE2IHJlc2VydmVkOworc3RydWN0IGV0aF90eF9iZHNfYXJyYXkgeworCXVuaW9uIGV0aF90eF9iZF90eXBlcyBiZHNbMTNdOwogfTsKIAogCkBAIC0yMzQ1LDggKzI1MjEsMTAgQEAKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNX1NISUZUIDgKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0UxSE9WX0lOX0NBTSAoMHgxPDw5KQogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRTFIT1ZfSU5fQ0FNX1NISUZUIDkKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwICgweDNGPDwxMCkKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDEwCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FTkFCTEVfVFBBICgweDE8PDEwKQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRU5BQkxFX1RQQV9TSElGVCAxMAorI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDAgKDB4MUY8PDExKQorI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgMTEKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogCXUxNiBjb25maWdfZmxhZ3M7CiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNF9DQVBBQklMSVRZICgweDE8PDApCkBAIC0yMzY1LDggKzI1NDMsMTAgQEAKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1ZMQU5fSU5fQ0FNX1NISUZUIDgKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0UxSE9WX0lOX0NBTSAoMHgxPDw5KQogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRTFIT1ZfSU5fQ0FNX1NISUZUIDkKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwICgweDNGPDwxMCkKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDEwCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FTkFCTEVfVFBBICgweDE8PDEwKQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRU5BQkxFX1RQQV9TSElGVCAxMAorI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDAgKDB4MUY8PDExKQorI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgMTEKIAl1OCByc3NfcmVzdWx0X21hc2s7CiAJdTggbGVhZGluZ19jbGllbnRfaWQ7CiAjZW5kaWYKQEAgLTIzNzQsMTEgKzI1NTQsMzggQEAKIH07CiAKIC8qCisgKiBSU1MgaWRpcmVjdGlvbiB0YWJsZSB1cGRhdGUgY29uZmlndXJhdGlvbgorICovCitzdHJ1Y3QgcnNzX3VwZGF0ZV9jb25maWcgeworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiB0b2VfcnNzX2JpdG1hcDsKKwl1MTYgZmxhZ3M7CisjZGVmaW5lIFJTU19VUERBVEVfQ09ORklHX0VUSF9VUERBVEVfRU5BQkxFICgweDE8PDApCisjZGVmaW5lIFJTU19VUERBVEVfQ09ORklHX0VUSF9VUERBVEVfRU5BQkxFX1NISUZUIDAKKyNkZWZpbmUgUlNTX1VQREFURV9DT05GSUdfVE9FX1VQREFURV9FTkFCTEUgKDB4MTw8MSkKKyNkZWZpbmUgUlNTX1VQREFURV9DT05GSUdfVE9FX1VQREFURV9FTkFCTEVfU0hJRlQgMQorI2RlZmluZSBfX1JTU19VUERBVEVfQ09ORklHX1JFU0VSVkVEMCAoMHgzRkZGPDwyKQorI2RlZmluZSBfX1JTU19VUERBVEVfQ09ORklHX1JFU0VSVkVEMF9TSElGVCAyCisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgZmxhZ3M7CisjZGVmaW5lIFJTU19VUERBVEVfQ09ORklHX0VUSF9VUERBVEVfRU5BQkxFICgweDE8PDApCisjZGVmaW5lIFJTU19VUERBVEVfQ09ORklHX0VUSF9VUERBVEVfRU5BQkxFX1NISUZUIDAKKyNkZWZpbmUgUlNTX1VQREFURV9DT05GSUdfVE9FX1VQREFURV9FTkFCTEUgKDB4MTw8MSkKKyNkZWZpbmUgUlNTX1VQREFURV9DT05GSUdfVE9FX1VQREFURV9FTkFCTEVfU0hJRlQgMQorI2RlZmluZSBfX1JTU19VUERBVEVfQ09ORklHX1JFU0VSVkVEMCAoMHgzRkZGPDwyKQorI2RlZmluZSBfX1JTU19VUERBVEVfQ09ORklHX1JFU0VSVkVEMF9TSElGVCAyCisJdTE2IHRvZV9yc3NfYml0bWFwOworI2VuZGlmCisJdTMyIHJlc2VydmVkMTsKK307CisKKy8qCiAgKiBwYXJhbWV0ZXJzIGZvciBldGggdXBkYXRlIHJhbXJvZAogICovCiBzdHJ1Y3QgZXRoX3VwZGF0ZV9yYW1yb2RfZGF0YSB7CiAJc3RydWN0IHRzdG9ybV9ldGhfZnVuY3Rpb25fY29tbW9uX2NvbmZpZyBmdW5jX2NvbmZpZzsKIAl1OCBpbmRpcmVjdGlvblRhYmxlWzEyOF07CisJc3RydWN0IHJzc191cGRhdGVfY29uZmlnIHJzc19jb25maWc7CiB9OwogCiAKQEAgLTI0MjMsOCArMjYzMCw5IEBACiAjZGVmaW5lIFRTVE9STV9DQU1fVEFSR0VUX1RBQkxFX0VOVFJZX1JETUFfTUFDX1NISUZUIDMKICNkZWZpbmUgVFNUT1JNX0NBTV9UQVJHRVRfVEFCTEVfRU5UUllfUkVTRVJWRUQwICgweEY8PDQpCiAjZGVmaW5lIFRTVE9STV9DQU1fVEFSR0VUX1RBQkxFX0VOVFJZX1JFU0VSVkVEMF9TSElGVCA0Ci0JdTggY2xpZW50X2lkOworCXU4IHJlc2VydmVkMTsKIAl1MTYgdmxhbl9pZDsKKwl1MzIgY2xpZW50c19iaXRfdmVjdG9yOwogfTsKIAogLyoKQEAgLTI0NTMsNyArMjY2MSw3IEBACiAJX19sZTE2IG1zYl9tYWNfYWRkcjsKIAlfX2xlMTYgdmxhbl9pZDsKIAlfX2xlMTYgZTFob3ZfaWQ7Ci0JdTggY2xpZW50X2lkOworCXU4IHJlc2VydmVkMDsKIAl1OCBmbGFnczsKICNkZWZpbmUgTUFDX0NPTkZJR1VSQVRJT05fRU5UUllfRTFIX1BPUlQgKDB4MTw8MCkKICNkZWZpbmUgTUFDX0NPTkZJR1VSQVRJT05fRU5UUllfRTFIX1BPUlRfU0hJRlQgMApAQCAtMjQ2MSw4ICsyNjY5LDkgQEAKICNkZWZpbmUgTUFDX0NPTkZJR1VSQVRJT05fRU5UUllfRTFIX0FDVElPTl9UWVBFX1NISUZUIDEKICNkZWZpbmUgTUFDX0NPTkZJR1VSQVRJT05fRU5UUllfRTFIX1JETUFfTUFDICgweDE8PDIpCiAjZGVmaW5lIE1BQ19DT05GSUdVUkFUSU9OX0VOVFJZX0UxSF9SRE1BX01BQ19TSElGVCAyCi0jZGVmaW5lIE1BQ19DT05GSUdVUkFUSU9OX0VOVFJZX0UxSF9SRVNFUlZFRDAgKDB4MUY8PDMpCi0jZGVmaW5lIE1BQ19DT05GSUdVUkFUSU9OX0VOVFJZX0UxSF9SRVNFUlZFRDBfU0hJRlQgMworI2RlZmluZSBNQUNfQ09ORklHVVJBVElPTl9FTlRSWV9FMUhfUkVTRVJWRUQxICgweDFGPDwzKQorI2RlZmluZSBNQUNfQ09ORklHVVJBVElPTl9FTlRSWV9FMUhfUkVTRVJWRUQxX1NISUZUIDMKKwl1MzIgY2xpZW50c19iaXRfdmVjdG9yOwogfTsKIAogLyoKQEAgLTI0ODcsMTMgKzI2OTYsMTMgQEAKICAqLwogc3RydWN0IHRzdG9ybV9ldGhfY2xpZW50X2NvbmZpZyB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JdTggbWF4X3NnZXNfZm9yX3BhY2tldDsKKwl1OCByZXNlcnZlZDA7CiAJdTggc3RhdGlzdGljc19jb3VudGVyX2lkOwogCXUxNiBtdHU7CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAl1MTYgbXR1OwogCXU4IHN0YXRpc3RpY3NfY291bnRlcl9pZDsKLQl1OCBtYXhfc2dlc19mb3JfcGFja2V0OworCXU4IHJlc2VydmVkMDsKICNlbmRpZgogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQogCXUxNiBkcm9wX2ZsYWdzOwpAQCAtMjUwNSw4ICsyNzE0LDggQEAKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfVFRMMF9TSElGVCAyCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX1VEUF9DU19FUlIgKDB4MTw8MykKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfVURQX0NTX0VSUl9TSElGVCAzCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMSAoMHhGRkY8PDQpCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMV9TSElGVCA0CisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMiAoMHhGRkY8PDQpCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMl9TSElGVCA0CiAJdTE2IGNvbmZpZ19mbGFnczsKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRSAoMHgxPDwwKQogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1fRU5BQkxFX1NISUZUIDAKQEAgLTI1MTQsMTAgKzI3MjMsOCBAQAogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRTFIT1ZfUkVNX0VOQUJMRV9TSElGVCAxCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRSAoMHgxPDwyKQogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEVfU0hJRlQgMgotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HICgweDE8PDMpCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMwotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDAgKDB4RkZGPDw0KQotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNAorI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDEgKDB4MUZGRjw8MykKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQxX1NISUZUIDMKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogCXUxNiBjb25maWdfZmxhZ3M7CiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTV9FTkFCTEUgKDB4MTw8MCkKQEAgLTI1MjYsMTAgKzI3MzMsOCBAQAogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRTFIT1ZfUkVNX0VOQUJMRV9TSElGVCAxCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRSAoMHgxPDwyKQogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEVfU0hJRlQgMgotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HICgweDE8PDMpCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMwotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDAgKDB4RkZGPDw0KQotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNAorI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDEgKDB4MUZGRjw8MykKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQxX1NISUZUIDMKIAl1MTYgZHJvcF9mbGFnczsKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfSVBfQ1NfRVJSICgweDE8PDApCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX0lQX0NTX0VSUl9TSElGVCAwCkBAIC0yNTM5LDggKzI3NDQsOCBAQAogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9UVEwwX1NISUZUIDIKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfVURQX0NTX0VSUiAoMHgxPDwzKQogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9VRFBfQ1NfRVJSX1NISUZUIDMKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQxICgweEZGRjw8NCkKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQxX1NISUZUIDQKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQyICgweEZGRjw8NCkKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQyX1NISUZUIDQKICNlbmRpZgogfTsKIApAQCAtMjY2Myw3ICsyODY4LDYgQEAKIAl1MzIgcnNfdGhyZXNob2xkOwogfTsKIAotCiAvKgogICogcGVyLXBvcnQgZmFpcm5lc3MgdmFyaWFibGVzCiAgKi8KQEAgLTI2NzMsNyArMjg3Nyw2IEBACiAJdTMyIGZhaXJuZXNzX3RpbWVvdXQ7CiB9OwogCi0KIC8qCiAgKiBwZXItcG9ydCBTQUZDIHZhcmlhYmxlcwogICovCkBAIC0yNjkwLDcgKzI4OTMsNiBAQAogCXUxNiBjb3NfdG9fcGF1c2VfbWFza1tOVU1fT0ZfU0FGQ19CSVRTXTsKIH07CiAKLQogLyoKICAqIFBlci1wb3J0IGNvbmdlc3Rpb24gbWFuYWdlbWVudCB2YXJpYWJsZXMKICAqLwpAQCAtMjcwMywxMSArMjkwNSwyMyBAQAogCiAKIC8qCisgKiBEeW5hbWljIGhvc3QgY29hbGVzY2luZyBpbml0IHBhcmFtZXRlcnMKKyAqLworc3RydWN0IGR5bmFtaWNfaGNfY29uZmlnIHsKKwl1MzIgdGhyZXNob2xkWzNdOworCXU4IHNoaWZ0X3Blcl9wcm90b2NvbFtIQ19VU1RPUk1fU0JfTlVNX0lORElDRVNdOworCXU4IGhjX3RpbWVvdXQwW0hDX1VTVE9STV9TQl9OVU1fSU5ESUNFU107CisJdTggaGNfdGltZW91dDFbSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTXTsKKwl1OCBoY190aW1lb3V0MltIQ19VU1RPUk1fU0JfTlVNX0lORElDRVNdOworCXU4IGhjX3RpbWVvdXQzW0hDX1VTVE9STV9TQl9OVU1fSU5ESUNFU107Cit9OworCisKKy8qCiAgKiBQcm90b2NvbC1jb21tb24gc3RhdGlzdGljcyBjb2xsZWN0ZWQgYnkgdGhlIFhzdG9ybSAocGVyIGNsaWVudCkKICAqLwogc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzIHsKLQlzdHJ1Y3QgcmVncGFpciB0b3RhbF9zZW50X2J5dGVzOwotCV9fbGUzMiB0b3RhbF9zZW50X3BrdHM7CisJX19sZTMyIHJlc2VydmVkMDsKIAlfX2xlMzIgdW5pY2FzdF9wa3RzX3NlbnQ7CiAJc3RydWN0IHJlZ3BhaXIgdW5pY2FzdF9ieXRlc19zZW50OwogCXN0cnVjdCByZWdwYWlyIG11bHRpY2FzdF9ieXRlc19zZW50OwpAQCAtMjcxNSwxMSArMjkyOSwxMCBAQAogCV9fbGUzMiBicm9hZGNhc3RfcGt0c19zZW50OwogCXN0cnVjdCByZWdwYWlyIGJyb2FkY2FzdF9ieXRlc19zZW50OwogCV9fbGUxNiBzdGF0c19jb3VudGVyOwotCV9fbGUxNiByZXNlcnZlZDA7Ci0JX19sZTMyIHJlc2VydmVkMTsKKwlfX2xlMTYgcmVzZXJ2ZWQxOworCV9fbGUzMiByZXNlcnZlZDI7CiB9OwogCi0KIC8qCiAgKiBDb21tb24gc3RhdGlzdGljcyBjb2xsZWN0ZWQgYnkgdGhlIFhzdG9ybSAocGVyIHBvcnQpCiAgKi8KQEAgLTI3MjcsNyArMjk0MCw2IEBACiAgc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzIGNsaWVudF9zdGF0aXN0aWNzW01BWF9YX1NUQVRfQ09VTlRFUl9JRF07CiB9OwogCi0KIC8qCiAgKiBQcm90b2NvbC1jb21tb24gc3RhdGlzdGljcyBjb2xsZWN0ZWQgYnkgdGhlIFRzdG9ybSAocGVyIHBvcnQpCiAgKi8KQEAgLTI3MzgsMTkgKzI5NTAsMTYgQEAKIAlfX2xlMzIgbWFjX2Rpc2NhcmQ7CiB9OwogCi0KIC8qCiAgKiBQcm90b2NvbC1jb21tb24gc3RhdGlzdGljcyBjb2xsZWN0ZWQgYnkgdGhlIFRzdG9ybSAocGVyIGNsaWVudCkKICAqLwogc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzIHsKLQlzdHJ1Y3QgcmVncGFpciB0b3RhbF9yY3ZfYnl0ZXM7CiAJc3RydWN0IHJlZ3BhaXIgcmN2X3VuaWNhc3RfYnl0ZXM7CiAJc3RydWN0IHJlZ3BhaXIgcmN2X2Jyb2FkY2FzdF9ieXRlczsKIAlzdHJ1Y3QgcmVncGFpciByY3ZfbXVsdGljYXN0X2J5dGVzOwogCXN0cnVjdCByZWdwYWlyIHJjdl9lcnJvcl9ieXRlczsKIAlfX2xlMzIgY2hlY2tzdW1fZGlzY2FyZDsKIAlfX2xlMzIgcGFja2V0c190b29fYmlnX2Rpc2NhcmQ7Ci0JX19sZTMyIHRvdGFsX3Jjdl9wa3RzOwogCV9fbGUzMiByY3ZfdW5pY2FzdF9wa3RzOwogCV9fbGUzMiByY3ZfYnJvYWRjYXN0X3BrdHM7CiAJX19sZTMyIHJjdl9tdWx0aWNhc3RfcGt0czsKQEAgLTI3NTgsNyArMjk2Nyw2IEBACiAJX19sZTMyIHR0bDBfZGlzY2FyZDsKIAlfX2xlMTYgc3RhdHNfY291bnRlcjsKIAlfX2xlMTYgcmVzZXJ2ZWQwOwotCV9fbGUzMiByZXNlcnZlZDE7CiB9OwogCiAvKgpAQCAtMjg2MSw2ICszMDY5LDE1IEBACiAKIAogLyoKKyAqIFRoZSBzZW5kIHF1ZXVlIGVsZW1lbnQKKyAqLworc3RydWN0IHByb3RvY29sX2NvbW1vbl9zcGUgeworCXN0cnVjdCBzcGVfaGRyIGhkcjsKKwlzdHJ1Y3QgcmVncGFpciBwaHlfYWRkcmVzczsKK307CisKKworLyoKICAqIGEgc2luZ2xlIHJhdGUgc2hhcGluZyBjb3VudGVyLiBjYW4gYmUgdXNlZCBhcyBwcm90b2NvbCBvciB2bmljIGNvdW50ZXIKICAqLwogc3RydWN0IHJhdGVfc2hhcGluZ19jb3VudGVyIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXQuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2luaXQuaAppbmRleCAzYmE0ZDg4Li42NWIyNmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9pbml0LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oCkBAIC0xNSwyNCArMTUsMTEgQEAKICNpZm5kZWYgQk5YMlhfSU5JVF9ICiAjZGVmaW5lIEJOWDJYX0lOSVRfSAogCi0jZGVmaW5lIENPTU1PTgkJCQkweDEKLSNkZWZpbmUgUE9SVDAJCQkJMHgyCi0jZGVmaW5lIFBPUlQxCQkJCTB4NAotCi0jZGVmaW5lIElOSVRfRU1VTEFUSU9OCQkJMHgxCi0jZGVmaW5lIElOSVRfRlBHQQkJCTB4MgotI2RlZmluZSBJTklUX0FTSUMJCQkweDQKLSNkZWZpbmUgSU5JVF9IQVJEV0FSRQkJCTB4NwotCi0jZGVmaW5lIFRTVE9STV9JTlRNRU1fQUREUgkJVFNFTV9SRUdfRkFTVF9NRU1PUlkKLSNkZWZpbmUgQ1NUT1JNX0lOVE1FTV9BRERSCQlDU0VNX1JFR19GQVNUX01FTU9SWQotI2RlZmluZSBYU1RPUk1fSU5UTUVNX0FERFIJCVhTRU1fUkVHX0ZBU1RfTUVNT1JZCi0jZGVmaW5lIFVTVE9STV9JTlRNRU1fQUREUgkJVVNFTV9SRUdfRkFTVF9NRU1PUlkKIC8qIFJBTTAgc2l6ZSBpbiBieXRlcyAqLwogI2RlZmluZSBTVE9STV9JTlRNRU1fU0laRV9FMQkJMHg1ODAwCiAjZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFX0UxSAkJMHgxMDAwMAotI2RlZmluZSBTVE9STV9JTlRNRU1fU0laRShicCkJKChDSElQX0lTX0UxSChicCkgPyBTVE9STV9JTlRNRU1fU0laRV9FMUggOiBcCi0JCQkJCQkgICAgU1RPUk1fSU5UTUVNX1NJWkVfRTEpIC8gNCkKKyNkZWZpbmUgU1RPUk1fSU5UTUVNX1NJWkUoYnApICgoQ0hJUF9JU19FMShicCkgPyBTVE9STV9JTlRNRU1fU0laRV9FMSA6IFwKKwkJCQkJCSAgICBTVE9STV9JTlRNRU1fU0laRV9FMUgpIC8gNCkKIAogCiAvKiBJbml0IG9wZXJhdGlvbiB0eXBlcyBhbmQgc3RydWN0dXJlcyAqLwpAQCAtNTMsNjUgKzQwLDY4IEBACiAjZGVmaW5lIE9QX1dSX0FTSUMJCTB4YyAvKiB3cml0ZSBzaW5nbGUgcmVnaXN0ZXIgb24gQVNJQyAqLwogCiAvKiBJbml0IHN0YWdlcyAqLwotI2RlZmluZSBDT01NT05fU1RBR0UgICAgICAgICAgICAwCi0jZGVmaW5lIFBPUlQwX1NUQUdFICAgICAJMQotI2RlZmluZSBQT1JUMV9TVEFHRSAgICAgCTIKLS8qIE5ldmVyIHJlb3JkZXIgRlVOQ3ggc3RhZ2VzICEhISAqLwotI2RlZmluZSBGVU5DMF9TVEFHRSAgICAgCTMKLSNkZWZpbmUgRlVOQzFfU1RBR0UgICAgIAk0Ci0jZGVmaW5lIEZVTkMyX1NUQUdFICAgICAJNQotI2RlZmluZSBGVU5DM19TVEFHRSAgICAgCTYKLSNkZWZpbmUgRlVOQzRfU1RBR0UgICAgIAk3Ci0jZGVmaW5lIEZVTkM1X1NUQUdFICAgICAJOAotI2RlZmluZSBGVU5DNl9TVEFHRSAgICAgCTkKLSNkZWZpbmUgRlVOQzdfU1RBR0UgICAgIAkxMAotI2RlZmluZSBTVEFHRV9JRFhfTUFYICAgCTExCisvKiBOZXZlciByZW9yZGVyIHN0YWdlcyAhISEgKi8KKyNkZWZpbmUgQ09NTU9OX1NUQUdFCQkwCisjZGVmaW5lIFBPUlQwX1NUQUdFCQkxCisjZGVmaW5lIFBPUlQxX1NUQUdFCQkyCisjZGVmaW5lIEZVTkMwX1NUQUdFCQkzCisjZGVmaW5lIEZVTkMxX1NUQUdFCQk0CisjZGVmaW5lIEZVTkMyX1NUQUdFCQk1CisjZGVmaW5lIEZVTkMzX1NUQUdFCQk2CisjZGVmaW5lIEZVTkM0X1NUQUdFCQk3CisjZGVmaW5lIEZVTkM1X1NUQUdFCQk4CisjZGVmaW5lIEZVTkM2X1NUQUdFCQk5CisjZGVmaW5lIEZVTkM3X1NUQUdFCQkxMAorI2RlZmluZSBTVEFHRV9JRFhfTUFYCQkxMQogCi0jZGVmaW5lIFNUQUdFX1NUQVJUICAgICAJMAotI2RlZmluZSBTVEFHRV9FTkQgICAgICAgCTEKKyNkZWZpbmUgU1RBR0VfU1RBUlQJCTAKKyNkZWZpbmUgU1RBR0VfRU5ECQkxCiAKIAogLyogSW5kaWNlcyBvZiBibG9ja3MgKi8KLSNkZWZpbmUgUFJTX0JMT0NLICAgICAgICAgICAgICAgMAotI2RlZmluZSBTUkNIX0JMT0NLICAgICAgICAgICAgICAxCi0jZGVmaW5lIFRTRE1fQkxPQ0sgICAgICAgICAgICAgIDIKLSNkZWZpbmUgVENNX0JMT0NLICAgICAgICAgICAgICAgMwotI2RlZmluZSBCUkIxX0JMT0NLICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFRTRU1fQkxPQ0sgICAgICAgICAgICAgIDUKLSNkZWZpbmUgUFhQQ1NfQkxPQ0sgICAgICAgICAgICAgNgotI2RlZmluZSBFTUFDMF9CTE9DSyAgICAgICAgICAgICA3Ci0jZGVmaW5lIEVNQUMxX0JMT0NLICAgICAgICAgICAgIDgKLSNkZWZpbmUgREJVX0JMT0NLICAgICAgICAgICAgICAgOQotI2RlZmluZSBNSVNDX0JMT0NLICAgICAgICAgICAgICAxMAotI2RlZmluZSBEQkdfQkxPQ0sgICAgICAgICAgICAgICAxMQotI2RlZmluZSBOSUdfQkxPQ0sgICAgICAgICAgICAgICAxMgotI2RlZmluZSBNQ1BfQkxPQ0sgICAgICAgICAgICAgICAxMwotI2RlZmluZSBVUEJfQkxPQ0sgICAgICAgICAgICAgICAxNAotI2RlZmluZSBDU0RNX0JMT0NLICAgICAgICAgICAgICAxNQotI2RlZmluZSBVU0RNX0JMT0NLICAgICAgICAgICAgICAxNgotI2RlZmluZSBDQ01fQkxPQ0sgICAgICAgICAgICAgICAxNwotI2RlZmluZSBVQ01fQkxPQ0sgICAgICAgICAgICAgICAxOAotI2RlZmluZSBVU0VNX0JMT0NLICAgICAgICAgICAgICAxOQotI2RlZmluZSBDU0VNX0JMT0NLICAgICAgICAgICAgICAyMAotI2RlZmluZSBYUEJfQkxPQ0sgICAgICAgICAgICAgICAyMQotI2RlZmluZSBEUV9CTE9DSyAgICAgICAgICAgICAgICAyMgotI2RlZmluZSBUSU1FUlNfQkxPQ0sgICAgICAgICAgICAyMwotI2RlZmluZSBYU0RNX0JMT0NLICAgICAgICAgICAgICAyNAotI2RlZmluZSBRTV9CTE9DSyAgICAgICAgICAgICAgICAyNQotI2RlZmluZSBQQkZfQkxPQ0sgICAgICAgICAgICAgICAyNgotI2RlZmluZSBYQ01fQkxPQ0sgICAgICAgICAgICAgICAyNwotI2RlZmluZSBYU0VNX0JMT0NLICAgICAgICAgICAgICAyOAotI2RlZmluZSBDRFVfQkxPQ0sgICAgICAgICAgICAgICAyOQotI2RlZmluZSBETUFFX0JMT0NLICAgICAgICAgICAgICAzMAotI2RlZmluZSBQWFBfQkxPQ0sgICAgICAgICAgICAgICAzMQotI2RlZmluZSBDRkNfQkxPQ0sgICAgICAgICAgICAgICAzMgotI2RlZmluZSBIQ19CTE9DSyAgICAgICAgICAgICAgICAzMwotI2RlZmluZSBQWFAyX0JMT0NLICAgICAgICAgICAgICAzNAotI2RlZmluZSBNSVNDX0FFVV9CTE9DSyAgICAgICAgICAzNQorI2RlZmluZSBQUlNfQkxPQ0sJCTAKKyNkZWZpbmUgU1JDSF9CTE9DSwkJMQorI2RlZmluZSBUU0RNX0JMT0NLCQkyCisjZGVmaW5lIFRDTV9CTE9DSwkJMworI2RlZmluZSBCUkIxX0JMT0NLCQk0CisjZGVmaW5lIFRTRU1fQkxPQ0sJCTUKKyNkZWZpbmUgUFhQQ1NfQkxPQ0sJCTYKKyNkZWZpbmUgRU1BQzBfQkxPQ0sJCTcKKyNkZWZpbmUgRU1BQzFfQkxPQ0sJCTgKKyNkZWZpbmUgREJVX0JMT0NLCQk5CisjZGVmaW5lIE1JU0NfQkxPQ0sJCTEwCisjZGVmaW5lIERCR19CTE9DSwkJMTEKKyNkZWZpbmUgTklHX0JMT0NLCQkxMgorI2RlZmluZSBNQ1BfQkxPQ0sJCTEzCisjZGVmaW5lIFVQQl9CTE9DSwkJMTQKKyNkZWZpbmUgQ1NETV9CTE9DSwkJMTUKKyNkZWZpbmUgVVNETV9CTE9DSwkJMTYKKyNkZWZpbmUgQ0NNX0JMT0NLCQkxNworI2RlZmluZSBVQ01fQkxPQ0sJCTE4CisjZGVmaW5lIFVTRU1fQkxPQ0sJCTE5CisjZGVmaW5lIENTRU1fQkxPQ0sJCTIwCisjZGVmaW5lIFhQQl9CTE9DSwkJMjEKKyNkZWZpbmUgRFFfQkxPQ0sJCTIyCisjZGVmaW5lIFRJTUVSU19CTE9DSwkJMjMKKyNkZWZpbmUgWFNETV9CTE9DSwkJMjQKKyNkZWZpbmUgUU1fQkxPQ0sJCTI1CisjZGVmaW5lIFBCRl9CTE9DSwkJMjYKKyNkZWZpbmUgWENNX0JMT0NLCQkyNworI2RlZmluZSBYU0VNX0JMT0NLCQkyOAorI2RlZmluZSBDRFVfQkxPQ0sJCTI5CisjZGVmaW5lIERNQUVfQkxPQ0sJCTMwCisjZGVmaW5lIFBYUF9CTE9DSwkJMzEKKyNkZWZpbmUgQ0ZDX0JMT0NLCQkzMgorI2RlZmluZSBIQ19CTE9DSwkJMzMKKyNkZWZpbmUgUFhQMl9CTE9DSwkJMzQKKyNkZWZpbmUgTUlTQ19BRVVfQkxPQ0sJCTM1CisjZGVmaW5lIFBHTFVFX0JfQkxPQ0sJCTM2CisjZGVmaW5lIElHVV9CTE9DSwkJMzcKKwogCiAvKiBSZXR1cm5zIHRoZSBpbmRleCBvZiBzdGFydCBvciBlbmQgb2YgYSBzcGVjaWZpYyBibG9jayBzdGFnZSBpbiBvcHMgYXJyYXkqLwogI2RlZmluZSBCTE9DS19PUFNfSURYKGJsb2NrLCBzdGFnZSwgZW5kKSBcCi0gICAgICAgKDIqKCgoYmxvY2spKlNUQUdFX0lEWF9NQVgpICsgKHN0YWdlKSkgKyAoZW5kKSkKKwkJCSgyKigoKGJsb2NrKSpTVEFHRV9JRFhfTUFYKSArIChzdGFnZSkpICsgKGVuZCkpCiAKIAogc3RydWN0IHJhd19vcCB7CkBAIC0xNTgsMTk5ICsxNDgsNSBAQAogCXN0cnVjdCByYXdfb3AJCXJhdzsKIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIFBYUAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBUaGlzIGNvZGUgY29uZmlndXJlcyB0aGUgUENJIHJlYWQvd3JpdGUgYXJiaXRlcgotICogd2hpY2ggaW1wbGVtZW50cyBhIHdlaWdodGVkIHJvdW5kIHJvYmluCi0gKiBiZXR3ZWVuIHRoZSB2aXJ0dWFsIHF1ZXVlcyBpbiB0aGUgY2hpcC4KLSAqCi0gKiBUaGUgdmFsdWVzIHdlcmUgZGVyaXZlZCBmb3IgZWFjaCBQQ0kgbWF4IHBheWxvYWQgYW5kIG1heCByZXF1ZXN0IHNpemUuCi0gKiBzaW5jZSBtYXggcGF5bG9hZCBhbmQgbWF4IHJlcXVlc3Qgc2l6ZSBhcmUgb25seSBrbm93biBhdCBydW4gdGltZSwKLSAqIHRoaXMgaXMgZG9uZSBhcyBhIHNlcGFyYXRlIGluaXQgc3RhZ2UuCi0gKi8KLQotI2RlZmluZSBOVU1fV1JfUQkJCTEzCi0jZGVmaW5lIE5VTV9SRF9RCQkJMjkKLSNkZWZpbmUgTUFYX1JEX09SRAkJCTMKLSNkZWZpbmUgTUFYX1dSX09SRAkJCTIKLQotLyogY29uZmlndXJhdGlvbiBmb3Igb25lIGFyYml0ZXIgcXVldWUgKi8KLXN0cnVjdCBhcmJfbGluZSB7Ci0JaW50IGw7Ci0JaW50IGFkZDsKLQlpbnQgdWJvdW5kOwotfTsKLQotLyogZGVyaXZlZCBjb25maWd1cmF0aW9uIGZvciBlYWNoIHJlYWQgcXVldWUgZm9yIGVhY2ggbWF4IHJlcXVlc3Qgc2l6ZSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhcmJfbGluZSByZWFkX2FyYl9kYXRhW05VTV9SRF9RXVtNQVhfUkRfT1JEICsgMV0gPSB7Ci0vKiAxICovCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDI1fSwgezMyLCA2NCwgMjV9LCB7NjQsIDY0LCA0MX0gfSwKLQl7IHs0LCA4LCAgNH0sICB7NCwgIDgsICA0fSwgIHs0LCAgOCwgIDR9LCAgezQsICA4LCAgNH0gIH0sCi0JeyB7NCwgMywgIDN9LCAgezQsICAzLCAgM30sICB7NCwgIDMsICAzfSwgIHs0LCAgMywgIDN9ICB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezE2LCAzLCAgMTF9LCB7MTYsIDMsICAxMX0gfSwKLQl7IHs4LCA2NCwgMjV9LCB7MTYsIDY0LCAyNX0sIHszMiwgNjQsIDI1fSwgezY0LCA2NCwgNDF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHs2NCwgMywgIDQxfSB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7NjQsIDMsICA0MX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHs2NCwgMywgIDQxfSB9LAotLyogMTAgKi97IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCi0vKiAyMCAqL3sgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAotCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDQxfSwgezMyLCA2NCwgODF9LCB7NjQsIDY0LCAxMjB9IH0KLX07Ci0KLS8qIGRlcml2ZWQgY29uZmlndXJhdGlvbiBmb3IgZWFjaCB3cml0ZSBxdWV1ZSBmb3IgZWFjaCBtYXggcmVxdWVzdCBzaXplICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFyYl9saW5lIHdyaXRlX2FyYl9kYXRhW05VTV9XUl9RXVtNQVhfV1JfT1JEICsgMV0gPSB7Ci0vKiAxICovCXsgezQsIDYsICAzfSwgIHs0LCAgNiwgIDN9LCAgezQsICA2LCAgM30gfSwKLQl7IHs0LCAyLCAgM30sICB7NCwgIDIsICAzfSwgIHs0LCAgMiwgIDN9IH0sCi0JeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MTYsIDIsICAxMX0gfSwKLQl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHszMiwgMiwgIDIxfSB9LAotCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezMyLCAyLCAgMjF9IH0sCi0JeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MzIsIDIsICAyMX0gfSwKLQl7IHs4LCA2NCwgMjV9LCB7MTYsIDY0LCAyNX0sIHszMiwgNjQsIDI1fSB9LAotCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezE2LCAyLCAgMTF9IH0sCi0JeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MTYsIDIsICAxMX0gfSwKLS8qIDEwICoveyB7OCwgOSwgIDZ9LCAgezE2LCA5LCAgMTF9LCB7MzIsIDksICAyMX0gfSwKLQl7IHs4LCA0NywgMTl9LCB7MTYsIDQ3LCAxOX0sIHszMiwgNDcsIDIxfSB9LAotCXsgezgsIDksICA2fSwgIHsxNiwgOSwgIDExfSwgezE2LCA5LCAgMTF9IH0sCi0JeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgNDF9LCB7MzIsIDY0LCA4MX0gfQotfTsKLQotLyogcmVnaXN0ZXIgYWRkcmVzc2VzIGZvciByZWFkIHF1ZXVlcyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhcmJfbGluZSByZWFkX2FyYl9hZGRyW05VTV9SRF9RLTFdID0gewotLyogMSAqLwl7UFhQMl9SRUdfUlFfQldfUkRfTDAsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDAsCi0JCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDB9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MMSwgUFhQMl9SRUdfUFNXUlFfQldfQUREMSwKLQkJUFhQMl9SRUdfUFNXUlFfQldfVUIxfSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDIsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDIsCi0JCVBYUDJfUkVHX1BTV1JRX0JXX1VCMn0sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0wzLCBQWFAyX1JFR19QU1dSUV9CV19BREQzLAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjN9LAotCXtQWFAyX1JFR19SUV9CV19SRF9MNCwgUFhQMl9SRUdfUlFfQldfUkRfQURENCwKLQkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5ENH0sCi0Je1BYUDJfUkVHX1JRX0JXX1JEX0w1LCBQWFAyX1JFR19SUV9CV19SRF9BREQ1LAotCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQ1fSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDYsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDYsCi0JCVBYUDJfUkVHX1BTV1JRX0JXX1VCNn0sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0w3LCBQWFAyX1JFR19QU1dSUV9CV19BREQ3LAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjd9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MOCwgUFhQMl9SRUdfUFNXUlFfQldfQUREOCwKLQkJUFhQMl9SRUdfUFNXUlFfQldfVUI4fSwKLS8qIDEwICove1BYUDJfUkVHX1BTV1JRX0JXX0w5LCBQWFAyX1JFR19QU1dSUV9CV19BREQ5LAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjl9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MMTAsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEwLAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjEwfSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDExLCBQWFAyX1JFR19QU1dSUV9CV19BREQxMSwKLQkJUFhQMl9SRUdfUFNXUlFfQldfVUIxMX0sCi0Je1BYUDJfUkVHX1JRX0JXX1JEX0wxMiwgUFhQMl9SRUdfUlFfQldfUkRfQUREMTIsCi0JCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDEyfSwKLQl7UFhQMl9SRUdfUlFfQldfUkRfTDEzLCBQWFAyX1JFR19SUV9CV19SRF9BREQxMywKLQkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTN9LAotCXtQWFAyX1JFR19SUV9CV19SRF9MMTQsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDE0LAotCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQxNH0sCi0Je1BYUDJfUkVHX1JRX0JXX1JEX0wxNSwgUFhQMl9SRUdfUlFfQldfUkRfQUREMTUsCi0JCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE1fSwKLQl7UFhQMl9SRUdfUlFfQldfUkRfTDE2LCBQWFAyX1JFR19SUV9CV19SRF9BREQxNiwKLQkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTZ9LAotCXtQWFAyX1JFR19SUV9CV19SRF9MMTcsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDE3LAotCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQxN30sCi0Je1BYUDJfUkVHX1JRX0JXX1JEX0wxOCwgUFhQMl9SRUdfUlFfQldfUkRfQUREMTgsCi0JCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE4fSwKLS8qIDIwICove1BYUDJfUkVHX1JRX0JXX1JEX0wxOSwgUFhQMl9SRUdfUlFfQldfUkRfQUREMTksCi0JCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE5fSwKLQl7UFhQMl9SRUdfUlFfQldfUkRfTDIwLCBQWFAyX1JFR19SUV9CV19SRF9BREQyMCwKLQkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMjB9LAotCXtQWFAyX1JFR19SUV9CV19SRF9MMjIsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDIyLAotCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQyMn0sCi0Je1BYUDJfUkVHX1JRX0JXX1JEX0wyMywgUFhQMl9SRUdfUlFfQldfUkRfQUREMjMsCi0JCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDIzfSwKLQl7UFhQMl9SRUdfUlFfQldfUkRfTDI0LCBQWFAyX1JFR19SUV9CV19SRF9BREQyNCwKLQkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMjR9LAotCXtQWFAyX1JFR19SUV9CV19SRF9MMjUsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDI1LAotCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQyNX0sCi0Je1BYUDJfUkVHX1JRX0JXX1JEX0wyNiwgUFhQMl9SRUdfUlFfQldfUkRfQUREMjYsCi0JCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDI2fSwKLQl7UFhQMl9SRUdfUlFfQldfUkRfTDI3LCBQWFAyX1JFR19SUV9CV19SRF9BREQyNywKLQkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMjd9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MMjgsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDI4LAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjI4fQotfTsKLQotLyogcmVnaXN0ZXIgYWRkcmVzc2VzIGZvciB3cml0ZSBxdWV1ZXMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgd3JpdGVfYXJiX2FkZHJbTlVNX1dSX1EtMV0gPSB7Ci0vKiAxICovCXtQWFAyX1JFR19QU1dSUV9CV19MMSwgUFhQMl9SRUdfUFNXUlFfQldfQUREMSwKLQkJUFhQMl9SRUdfUFNXUlFfQldfVUIxfSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDIsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDIsCi0JCVBYUDJfUkVHX1BTV1JRX0JXX1VCMn0sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0wzLCBQWFAyX1JFR19QU1dSUV9CV19BREQzLAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjN9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MNiwgUFhQMl9SRUdfUFNXUlFfQldfQURENiwKLQkJUFhQMl9SRUdfUFNXUlFfQldfVUI2fSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDcsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDcsCi0JCVBYUDJfUkVHX1BTV1JRX0JXX1VCN30sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0w4LCBQWFAyX1JFR19QU1dSUV9CV19BREQ4LAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjh9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MOSwgUFhQMl9SRUdfUFNXUlFfQldfQUREOSwKLQkJUFhQMl9SRUdfUFNXUlFfQldfVUI5fSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDEwLCBQWFAyX1JFR19QU1dSUV9CV19BREQxMCwKLQkJUFhQMl9SRUdfUFNXUlFfQldfVUIxMH0sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0wxMSwgUFhQMl9SRUdfUFNXUlFfQldfQUREMTEsCi0JCVBYUDJfUkVHX1BTV1JRX0JXX1VCMTF9LAotLyogMTAgKi97UFhQMl9SRUdfUFNXUlFfQldfTDI4LCBQWFAyX1JFR19QU1dSUV9CV19BREQyOCwKLQkJUFhQMl9SRUdfUFNXUlFfQldfVUIyOH0sCi0Je1BYUDJfUkVHX1JRX0JXX1dSX0wyOSwgUFhQMl9SRUdfUlFfQldfV1JfQUREMjksCi0JCVBYUDJfUkVHX1JRX0JXX1dSX1VCT1VORDI5fSwKLQl7UFhQMl9SRUdfUlFfQldfV1JfTDMwLCBQWFAyX1JFR19SUV9CV19XUl9BREQzMCwKLQkJUFhQMl9SRUdfUlFfQldfV1JfVUJPVU5EMzB9Ci19OwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qIENEVQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBDRFVfUkVHSU9OX05VTUJFUl9YQ01fQUcJMgotI2RlZmluZSBDRFVfUkVHSU9OX05VTUJFUl9VQ01fQUcJNAotCi0vKioKLSAqIFN0cmluZy10by1jb21wcmVzcyBbMzE6OF0gPSBDSUQgKGFsbCAyNCBiaXRzKQotICogU3RyaW5nLXRvLWNvbXByZXNzIFs3OjRdID0gUmVnaW9uCi0gKiBTdHJpbmctdG8tY29tcHJlc3MgWzM6MF0gPSBUeXBlCi0gKi8KLSNkZWZpbmUgQ0RVX1ZBTElEX0RBVEEoX2NpZCwgX3JlZ2lvbiwgX3R5cGUpIFwKLQkJKCgoX2NpZCkgPDwgOCkgfCAoKChfcmVnaW9uKSAmIDB4ZikgPDwgNCkgfCAoKChfdHlwZSkgJiAweGYpKSkKLSNkZWZpbmUgQ0RVX0NSQzgoX2NpZCwgX3JlZ2lvbiwgX3R5cGUpIFwKLQkJCWNhbGNfY3JjOChDRFVfVkFMSURfREFUQShfY2lkLCBfcmVnaW9uLCBfdHlwZSksIDB4ZmYpCi0jZGVmaW5lIENEVV9SU1JWRF9WQUxVRV9UWVBFX0EoX2NpZCwgX3JlZ2lvbiwgX3R5cGUpIFwKLQkJCSgweDgwIHwgKENEVV9DUkM4KF9jaWQsIF9yZWdpb24sIF90eXBlKSAmIDB4N2YpKQotI2RlZmluZSBDRFVfUlNSVkRfVkFMVUVfVFlQRV9CKF9jcmMsIF90eXBlKSBcCi0JKDB4ODAgfCAoKF90eXBlKSAmIDB4ZiA8PCAzKSB8IChDRFVfQ1JDOChfY2lkLCBfcmVnaW9uLCBfdHlwZSkgJiAweDcpKQotI2RlZmluZSBDRFVfUlNSVkRfSU5WQUxJREFURV9DT05URVhUX1ZBTFVFKF92YWwpCSgoX3ZhbCkgJiB+MHg4MCkKLQotCi0vKiByZWdpc3RlcnMgYWRkcmVzc2VzIGFyZSBub3QgaW4gb3JkZXIKLSAgIHNvIHRoZXNlIGFycmF5cyBoZWxwIHNpbXBsaWZ5IHRoZSBjb2RlICovCi1zdGF0aWMgY29uc3QgaW50IGNtX2Jsb2Nrc1s5XSA9IHsKLQlNSVNDX0JMT0NLLCBUQ01fQkxPQ0ssICBVQ01fQkxPQ0ssICBDQ01fQkxPQ0ssIFhDTV9CTE9DSywKLQlUU0VNX0JMT0NLLCBVU0VNX0JMT0NLLCBDU0VNX0JMT0NLLCBYU0VNX0JMT0NLCi19OwotCiAjZW5kaWYgLyogQk5YMlhfSU5JVF9IICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfb3BzLmggYi9kcml2ZXJzL25ldC9ibngyeF9pbml0X29wcy5oCmluZGV4IDMyNTUyYjkuLjM4Yjk3MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfb3BzLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdF9vcHMuaApAQCAtMTEsODUgKzExLDY4IEBACiAgKiBNYWludGFpbmVkIGJ5OiBFaWxvbiBHcmVlbnN0ZWluIDxlaWxvbmdAYnJvYWRjb20uY29tPgogICogV3JpdHRlbiBieTogVmxhZGlzbGF2IFpvbG90YXJvdiA8dmxhZHpAYnJvYWRjb20uY29tPgogICovCisKICNpZm5kZWYgQk5YMlhfSU5JVF9PUFNfSAogI2RlZmluZSBCTlgyWF9JTklUX09QU19ICiAKLXN0YXRpYyB2b2lkIGJueDJ4X3JlZ193cl9pbmQoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIHUzMiB2YWwpOwogc3RhdGljIGludCBibngyeF9ndW56aXAoc3RydWN0IGJueDJ4ICpicCwgY29uc3QgdTggKnpidWYsIGludCBsZW4pOwogCisKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfc3RyX3dyKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCBjb25zdCB1MzIgKmRhdGEsCiAJCQkgICAgICB1MzIgbGVuKQogewotCWludCBpOworCXUzMiBpOwogCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQogCQlSRUdfV1IoYnAsIGFkZHIgKyBpKjQsIGRhdGFbaV0pOwotCQlpZiAoIShpICUgMTAwMDApKSB7Ci0JCQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7Ci0JCQljcHVfcmVsYXgoKTsKLQkJfQotCX0KIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbmRfd3Ioc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIGNvbnN0IHUzMiAqZGF0YSwKLQkJCSAgICAgIHUxNiBsZW4pCisJCQkgICAgICB1MzIgbGVuKQogewotCWludCBpOworCXUzMiBpOwogCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQogCQlSRUdfV1JfSU5EKGJwLCBhZGRyICsgaSo0LCBkYXRhW2ldKTsKLQkJaWYgKCEoaSAlIDEwMDAwKSkgewotCQkJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwotCQkJY3B1X3JlbGF4KCk7Ci0JCX0KLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3dyaXRlX2JpZ19idWYoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIHUzMiBsZW4pCiB7Ci0JaW50IG9mZnNldCA9IDA7Ci0KLQlpZiAoYnAtPmRtYWVfcmVhZHkpIHsKLQkJd2hpbGUgKGxlbiA+IERNQUVfTEVOMzJfV1JfTUFYKSB7Ci0JCQlibngyeF93cml0ZV9kbWFlKGJwLCBicC0+Z3VuemlwX21hcHBpbmcgKyBvZmZzZXQsCi0JCQkJCSBhZGRyICsgb2Zmc2V0LCBETUFFX0xFTjMyX1dSX01BWCk7Ci0JCQlvZmZzZXQgKz0gRE1BRV9MRU4zMl9XUl9NQVggKiA0OwotCQkJbGVuIC09IERNQUVfTEVOMzJfV1JfTUFYOwotCQl9Ci0JCWJueDJ4X3dyaXRlX2RtYWUoYnAsIGJwLT5ndW56aXBfbWFwcGluZyArIG9mZnNldCwKLQkJCQkgYWRkciArIG9mZnNldCwgbGVuKTsKLQl9IGVsc2UKLQkJYm54MnhfaW5pdF9zdHJfd3IoYnAsIGFkZHIsIGJwLT5ndW56aXBfYnVmLCBsZW4pOworCWlmIChicC0+ZG1hZV9yZWFkeSkKKwkJYm54Mnhfd3JpdGVfZG1hZV9waHlzX2xlbihicCwgR1VOWklQX1BIWVMoYnApLCBhZGRyLCBsZW4pOworCWVsc2UKKwkJYm54MnhfaW5pdF9zdHJfd3IoYnAsIGFkZHIsIEdVTlpJUF9CVUYoYnApLCBsZW4pOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2ZpbGwoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIGludCBmaWxsLCB1MzIgbGVuKQogewotCXUzMiBidWZfbGVuID0gKCgobGVuICogNCkgPiBGV19CVUZfU0laRSkgPyBGV19CVUZfU0laRSA6IChsZW4gKiA0KSk7Ci0JdTMyIGJ1Zl9sZW4zMiA9IGJ1Zl9sZW4gLyA0OwotCWludCBpOworCXUzMiBidWZfbGVuID0gKCgobGVuKjQpID4gRldfQlVGX1NJWkUpID8gRldfQlVGX1NJWkUgOiAobGVuKjQpKTsKKwl1MzIgYnVmX2xlbjMyID0gYnVmX2xlbi80OworCXUzMiBpOwogCi0JbWVtc2V0KGJwLT5ndW56aXBfYnVmLCBmaWxsLCBidWZfbGVuKTsKKwltZW1zZXQoR1VOWklQX0JVRihicCksICh1OClmaWxsLCBidWZfbGVuKTsKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gYnVmX2xlbjMyKSB7CiAJCXUzMiBjdXJfbGVuID0gbWluKGJ1Zl9sZW4zMiwgbGVuIC0gaSk7CiAKLQkJYm54Mnhfd3JpdGVfYmlnX2J1ZihicCwgYWRkciArIGkgKiA0LCBjdXJfbGVuKTsKKwkJYm54Mnhfd3JpdGVfYmlnX2J1ZihicCwgYWRkciArIGkqNCwgY3VyX2xlbik7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X3dyXzY0KHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCBjb25zdCB1MzIgKmRhdGEsCiAJCQkgICAgIHUzMiBsZW42NCkKIHsKLQl1MzIgYnVmX2xlbjMyID0gRldfQlVGX1NJWkUgLyA0OwotCXUzMiBsZW4gPSBsZW42NCAqIDI7CisJdTMyIGJ1Zl9sZW4zMiA9IEZXX0JVRl9TSVpFLzQ7CisJdTMyIGxlbiA9IGxlbjY0KjI7CiAJdTY0IGRhdGE2NCA9IDA7Ci0JaW50IGk7CisJdTMyIGk7CiAKIAkvKiA2NCBiaXQgdmFsdWUgaXMgaW4gYSBibG9iOiBmaXJzdCBsb3cgRFdPUkQsIHRoZW4gaGlnaCBEV09SRCAqLwogCWRhdGE2NCA9IEhJTE9fVTY0KCgqKGRhdGEgKyAxKSksICgqZGF0YSkpOworCiAJbGVuNjQgPSBtaW4oKHUzMikoRldfQlVGX1NJWkUvOCksIGxlbjY0KTsKIAlmb3IgKGkgPSAwOyBpIDwgbGVuNjQ7IGkrKykgewotCQl1NjQgKnBkYXRhID0gKCh1NjQgKikoYnAtPmd1bnppcF9idWYpKSArIGk7CisJCXU2NCAqcGRhdGEgPSAoKHU2NCAqKShHVU5aSVBfQlVGKGJwKSkpICsgaTsKIAogCQkqcGRhdGEgPSBkYXRhNjQ7CiAJfQpAQCAtOTcsNyArODAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gYnVmX2xlbjMyKSB7CiAJCXUzMiBjdXJfbGVuID0gbWluKGJ1Zl9sZW4zMiwgbGVuIC0gaSk7CiAKLQkJYm54Mnhfd3JpdGVfYmlnX2J1ZihicCwgYWRkciArIGkgKiA0LCBjdXJfbGVuKTsKKwkJYm54Mnhfd3JpdGVfYmlnX2J1ZihicCwgYWRkciArIGkqNCwgY3VyX2xlbik7CiAJfQogfQogCkBAIC0xMTgsOTcgKzEwMSw4MSBAQAogc3RhdGljIGNvbnN0IHU4ICpibngyeF9zZWxfYmxvYihzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgY29uc3QgdTggKmRhdGEpCiB7CiAJSUZfSVNfSU5UX1RBQkxFX0FERFIoVFNFTV9SRUdfSU5UX1RBQkxFLCBhZGRyKQotCQlkYXRhID0gYnAtPnRzZW1faW50X3RhYmxlX2RhdGE7Ci0JZWxzZSBJRl9JU19JTlRfVEFCTEVfQUREUihDU0VNX1JFR19JTlRfVEFCTEUsIGFkZHIpCi0JCWRhdGEgPSBicC0+Y3NlbV9pbnRfdGFibGVfZGF0YTsKLQllbHNlIElGX0lTX0lOVF9UQUJMRV9BRERSKFVTRU1fUkVHX0lOVF9UQUJMRSwgYWRkcikKLQkJZGF0YSA9IGJwLT51c2VtX2ludF90YWJsZV9kYXRhOwotCWVsc2UgSUZfSVNfSU5UX1RBQkxFX0FERFIoWFNFTV9SRUdfSU5UX1RBQkxFLCBhZGRyKQotCQlkYXRhID0gYnAtPnhzZW1faW50X3RhYmxlX2RhdGE7Ci0JZWxzZSBJRl9JU19QUkFNX0FERFIoVFNFTV9SRUdfUFJBTSwgYWRkcikKLQkJZGF0YSA9IGJwLT50c2VtX3ByYW1fZGF0YTsKLQllbHNlIElGX0lTX1BSQU1fQUREUihDU0VNX1JFR19QUkFNLCBhZGRyKQotCQlkYXRhID0gYnAtPmNzZW1fcHJhbV9kYXRhOwotCWVsc2UgSUZfSVNfUFJBTV9BRERSKFVTRU1fUkVHX1BSQU0sIGFkZHIpCi0JCWRhdGEgPSBicC0+dXNlbV9wcmFtX2RhdGE7Ci0JZWxzZSBJRl9JU19QUkFNX0FERFIoWFNFTV9SRUdfUFJBTSwgYWRkcikKLQkJZGF0YSA9IGJwLT54c2VtX3ByYW1fZGF0YTsKKwkJZGF0YSA9IElOSVRfVFNFTV9JTlRfVEFCTEVfREFUQShicCk7CisJZWxzZQorCQlJRl9JU19JTlRfVEFCTEVfQUREUihDU0VNX1JFR19JTlRfVEFCTEUsIGFkZHIpCisJCQlkYXRhID0gSU5JVF9DU0VNX0lOVF9UQUJMRV9EQVRBKGJwKTsKKwllbHNlCisJCUlGX0lTX0lOVF9UQUJMRV9BRERSKFVTRU1fUkVHX0lOVF9UQUJMRSwgYWRkcikKKwkJCWRhdGEgPSBJTklUX1VTRU1fSU5UX1RBQkxFX0RBVEEoYnApOworCWVsc2UKKwkJSUZfSVNfSU5UX1RBQkxFX0FERFIoWFNFTV9SRUdfSU5UX1RBQkxFLCBhZGRyKQorCQkJZGF0YSA9IElOSVRfWFNFTV9JTlRfVEFCTEVfREFUQShicCk7CisJZWxzZQorCQlJRl9JU19QUkFNX0FERFIoVFNFTV9SRUdfUFJBTSwgYWRkcikKKwkJCWRhdGEgPSBJTklUX1RTRU1fUFJBTV9EQVRBKGJwKTsKKwllbHNlCisJCUlGX0lTX1BSQU1fQUREUihDU0VNX1JFR19QUkFNLCBhZGRyKQorCQkJZGF0YSA9IElOSVRfQ1NFTV9QUkFNX0RBVEEoYnApOworCWVsc2UKKwkJSUZfSVNfUFJBTV9BRERSKFVTRU1fUkVHX1BSQU0sIGFkZHIpCisJCQlkYXRhID0gSU5JVF9VU0VNX1BSQU1fREFUQShicCk7CisJZWxzZQorCQlJRl9JU19QUkFNX0FERFIoWFNFTV9SRUdfUFJBTSwgYWRkcikKKwkJCWRhdGEgPSBJTklUX1hTRU1fUFJBTV9EQVRBKGJwKTsKIAogCXJldHVybiBkYXRhOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF93cml0ZV9iaWdfYnVmX3diKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCB1MzIgbGVuKQogewotCWludCBvZmZzZXQgPSAwOwotCi0JaWYgKGJwLT5kbWFlX3JlYWR5KSB7Ci0JCXdoaWxlIChsZW4gPiBETUFFX0xFTjMyX1dSX01BWCkgewotCQkJYm54Mnhfd3JpdGVfZG1hZShicCwgYnAtPmd1bnppcF9tYXBwaW5nICsgb2Zmc2V0LAotCQkJCQkgYWRkciArIG9mZnNldCwgRE1BRV9MRU4zMl9XUl9NQVgpOwotCQkJb2Zmc2V0ICs9IERNQUVfTEVOMzJfV1JfTUFYICogNDsKLQkJCWxlbiAtPSBETUFFX0xFTjMyX1dSX01BWDsKLQkJfQotCQlibngyeF93cml0ZV9kbWFlKGJwLCBicC0+Z3VuemlwX21hcHBpbmcgKyBvZmZzZXQsCi0JCQkJIGFkZHIgKyBvZmZzZXQsIGxlbik7Ci0JfSBlbHNlCi0JCWJueDJ4X2luaXRfaW5kX3dyKGJwLCBhZGRyLCBicC0+Z3VuemlwX2J1ZiwgbGVuKTsKKwlpZiAoYnAtPmRtYWVfcmVhZHkpCisJCWJueDJ4X3dyaXRlX2RtYWVfcGh5c19sZW4oYnAsIEdVTlpJUF9QSFlTKGJwKSwgYWRkciwgbGVuKTsKKwllbHNlCisJCWJueDJ4X2luaXRfaW5kX3dyKGJwLCBhZGRyLCBHVU5aSVBfQlVGKGJwKSwgbGVuKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW5pdF93cl93YihzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgY29uc3QgdTMyICpkYXRhLAogCQkJICAgICB1MzIgbGVuKQogewotCS8qIFRoaXMgaXMgbmVlZGVkIGZvciBOT19aSVAgbW9kZSwgY3VycmVudGx5IHN1cHBvcnRlZAotCSAgIGluIGxpdHRsZSBlbmRpYW4gbW9kZSBvbmx5ICovCi0JZGF0YSA9IChjb25zdCB1MzIqKWJueDJ4X3NlbF9ibG9iKGJwLCBhZGRyLCAoY29uc3QgdTgqKWRhdGEpOworCWRhdGEgPSAoY29uc3QgdTMyICopYm54Mnhfc2VsX2Jsb2IoYnAsIGFkZHIsIChjb25zdCB1OCAqKWRhdGEpOwogCi0JaWYgKChsZW4gKiA0KSA+IEZXX0JVRl9TSVpFKSB7Ci0JCUJOWDJYX0VSUigiTEFSR0UgRE1BRSBPUEVSQVRJT04gISAiCi0JCQkgICJhZGRyIDB4JXggIGxlbiAweCV4XG4iLCBhZGRyLCBsZW4qNCk7Ci0JCXJldHVybjsKLQl9Ci0JbWVtY3B5KGJwLT5ndW56aXBfYnVmLCBkYXRhLCBsZW4gKiA0KTsKLQotCWJueDJ4X3dyaXRlX2JpZ19idWZfd2IoYnAsIGFkZHIsIGxlbik7CisJaWYgKGJwLT5kbWFlX3JlYWR5KQorCQlWSVJUX1dSX0RNQUVfTEVOKGJwLCBkYXRhLCBhZGRyLCBsZW4pOworCWVsc2UKKwkJYm54MnhfaW5pdF9pbmRfd3IoYnAsIGFkZHIsIGRhdGEsIGxlbik7CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfd3JfenAoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsCi0JCQkgICAgIHUzMiBsZW4sIHUzMiBibG9iX29mZikKK3N0YXRpYyB2b2lkIGJueDJ4X2luaXRfd3JfenAoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIHUzMiBsZW4sIHUzMiBibG9iX29mZikKIHsKLQlpbnQgcmMsIGk7Ci0gICAgICAgIGNvbnN0IHU4ICpkYXRhID0gTlVMTDsKKwljb25zdCB1OCAqZGF0YSA9IE5VTEw7CisJaW50IHJjOworCXUzMiBpOwogCi0JZGF0YSA9IGJueDJ4X3NlbF9ibG9iKGJwLCBhZGRyLCBkYXRhKSArIDQqYmxvYl9vZmY7Ci0KLQlpZiAoZGF0YSA9PSBOVUxMKSB7Ci0JCXBhbmljKCJCbG9iIG5vdCBmb3VuZCBmb3IgYWRkciAweCV4XG4iLCBhZGRyKTsKLQkJcmV0dXJuOwotCX0KKwlkYXRhID0gYm54Mnhfc2VsX2Jsb2IoYnAsIGFkZHIsIGRhdGEpICsgYmxvYl9vZmYqNDsKIAogCXJjID0gYm54MnhfZ3VuemlwKGJwLCBkYXRhLCBsZW4pOwotCWlmIChyYykgewotCQlCTlgyWF9FUlIoImd1bnppcCBmYWlsZWQgISBhZGRyIDB4JXggcmMgJWRcbiIsIGFkZHIsIHJjKTsKLQkJQk5YMlhfRVJSKCJibG9iX29mZnNldD0weCV4XG4iLCBibG9iX29mZik7CisJaWYgKHJjKQogCQlyZXR1cm47Ci0JfQogCiAJLyogZ3VuemlwX291dGxlbiBpcyBpbiBkd29yZHMgKi8KLQlsZW4gPSBicC0+Z3VuemlwX291dGxlbjsKKwlsZW4gPSBHVU5aSVBfT1VUTEVOKGJwKTsKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCSgodTMyICopYnAtPmd1bnppcF9idWYpW2ldID0KLQkJCWNwdV90b19sZTMyKCgodTMyICopYnAtPmd1bnppcF9idWYpW2ldKTsKKwkJKCh1MzIgKilHVU5aSVBfQlVGKGJwKSlbaV0gPQorCQkJCWNwdV90b19sZTMyKCgodTMyICopR1VOWklQX0JVRihicCkpW2ldKTsKIAogCWJueDJ4X3dyaXRlX2JpZ19idWZfd2IoYnAsIGFkZHIsIGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfYmxvY2soc3RydWN0IGJueDJ4ICpicCwgdTMyIGJsb2NrLCB1MzIgc3RhZ2UpCiB7Ci0JaW50IGh3X3dyLCBpOwogCXUxNiBvcF9zdGFydCA9Ci0JCWJwLT5pbml0X29wc19vZmZzZXRzW0JMT0NLX09QU19JRFgoYmxvY2ssc3RhZ2UsU1RBR0VfU1RBUlQpXTsKKwkJSU5JVF9PUFNfT0ZGU0VUUyhicClbQkxPQ0tfT1BTX0lEWChibG9jaywgc3RhZ2UsIFNUQUdFX1NUQVJUKV07CiAJdTE2IG9wX2VuZCA9Ci0JCWJwLT5pbml0X29wc19vZmZzZXRzW0JMT0NLX09QU19JRFgoYmxvY2ssc3RhZ2UsU1RBR0VfRU5EKV07CisJCUlOSVRfT1BTX09GRlNFVFMoYnApW0JMT0NLX09QU19JRFgoYmxvY2ssIHN0YWdlLCBTVEFHRV9FTkQpXTsKIAl1bmlvbiBpbml0X29wICpvcDsKLQl1MzIgb3BfdHlwZSwgYWRkciwgbGVuOworCWludCBod193cjsKKwl1MzIgaSwgb3BfdHlwZSwgYWRkciwgbGVuOwogCWNvbnN0IHUzMiAqZGF0YSwgKmRhdGFfYmFzZTsKIAogCS8qIElmIGVtcHR5IGJsb2NrICovCkBAIC0yMjIsMTEgKzE4OSwxMSBAQAogCWVsc2UKIAkJaHdfd3IgPSBPUF9XUl9BU0lDOwogCi0JZGF0YV9iYXNlID0gYnAtPmluaXRfZGF0YTsKKwlkYXRhX2Jhc2UgPSBJTklUX0RBVEEoYnApOwogCiAJZm9yIChpID0gb3Bfc3RhcnQ7IGkgPCBvcF9lbmQ7IGkrKykgewogCi0JCW9wID0gKHVuaW9uIGluaXRfb3AgKikmKGJwLT5pbml0X29wc1tpXSk7CisJCW9wID0gKHVuaW9uIGluaXRfb3AgKikmKElOSVRfT1BTKGJwKVtpXSk7CiAKIAkJb3BfdHlwZSA9IG9wLT5zdHJfd3Iub3A7CiAJCWFkZHIgPSBvcC0+c3RyX3dyLm9mZnNldDsKQEAgLTIzNCw3ICsyMDEsNyBAQAogCQlkYXRhID0gZGF0YV9iYXNlICsgb3AtPnN0cl93ci5kYXRhX29mZjsKIAogCQkvKiBIVy9FTVVMIHNwZWNpZmljICovCi0JCWlmICh1bmxpa2VseSgob3BfdHlwZSA+IE9QX1dCKSAmJiAob3BfdHlwZSA9PSBod193cikpKQorCQlpZiAoKG9wX3R5cGUgPiBPUF9XQikgJiYgKG9wX3R5cGUgPT0gaHdfd3IpKQogCQkJb3BfdHlwZSA9IE9QX1dSOwogCiAJCXN3aXRjaCAob3BfdHlwZSkgewpAQCAtMjY1LDM0ICsyMzIsMTc4IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIGhhcHBlbnMgd2hlbmV2ZXIgYW4gb3AgaXMgb2YgYSBkaWZmIEhXICovCi0jaWYgMAotCQkJRFAoTkVUSUZfTVNHX0hXLCAic2tpcHBpbmcgaW5pdCBvcGVyYXRpb24gICIKLQkJCSAgICJpbmRleCAlZFslZDolZF06IHR5cGUgJWQgIGFkZHIgMHgleCAgIgotCQkJICAgImxlbiAlZCgweCV4KVxuIiwKLQkJCSAgIGksIG9wX3N0YXJ0LCBvcF9lbmQsIG9wX3R5cGUsIGFkZHIsIGxlbiwgbGVuKTsKLSNlbmRpZgogCQkJYnJlYWs7CiAJCX0KIAl9CiB9CiAKLS8qIFBYUCAqLwotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9weHAoc3RydWN0IGJueDJ4ICpicCkKLXsKLQl1MTYgZGV2Y3RsOwotCWludCByX29yZGVyLCB3X29yZGVyOwotCXUzMiB2YWwsIGk7CiAKLQlwY2lfcmVhZF9jb25maWdfd29yZChicC0+cGRldiwKLQkJCSAgICAgYnAtPnBjaWVfY2FwICsgUENJX0VYUF9ERVZDVEwsICZkZXZjdGwpOwotCURQKE5FVElGX01TR19IVywgInJlYWQgMHgleCBmcm9tIGRldmN0bFxuIiwgZGV2Y3RsKTsKLQl3X29yZGVyID0gKChkZXZjdGwgJiBQQ0lfRVhQX0RFVkNUTF9QQVlMT0FEKSA+PiA1KTsKLQlpZiAoYnAtPm1ycnMgPT0gLTEpCi0JCXJfb3JkZXIgPSAoKGRldmN0bCAmIFBDSV9FWFBfREVWQ1RMX1JFQURSUSkgPj4gMTIpOwotCWVsc2UgewotCQlEUChORVRJRl9NU0dfSFcsICJmb3JjZSByZWFkIG9yZGVyIHRvICVkXG4iLCBicC0+bXJycyk7Ci0JCXJfb3JkZXIgPSBicC0+bXJyczsKLQl9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBQWFAgQXJiaXRlcgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBUaGlzIGNvZGUgY29uZmlndXJlcyB0aGUgUENJIHJlYWQvd3JpdGUgYXJiaXRlcgorICogd2hpY2ggaW1wbGVtZW50cyBhIHdlaWdodGVkIHJvdW5kIHJvYmluCisgKiBiZXR3ZWVuIHRoZSB2aXJ0dWFsIHF1ZXVlcyBpbiB0aGUgY2hpcC4KKyAqCisgKiBUaGUgdmFsdWVzIHdlcmUgZGVyaXZlZCBmb3IgZWFjaCBQQ0kgbWF4IHBheWxvYWQgYW5kIG1heCByZXF1ZXN0IHNpemUuCisgKiBzaW5jZSBtYXggcGF5bG9hZCBhbmQgbWF4IHJlcXVlc3Qgc2l6ZSBhcmUgb25seSBrbm93biBhdCBydW4gdGltZSwKKyAqIHRoaXMgaXMgZG9uZSBhcyBhIHNlcGFyYXRlIGluaXQgc3RhZ2UuCisgKi8KKworI2RlZmluZSBOVU1fV1JfUQkJCTEzCisjZGVmaW5lIE5VTV9SRF9RCQkJMjkKKyNkZWZpbmUgTUFYX1JEX09SRAkJCTMKKyNkZWZpbmUgTUFYX1dSX09SRAkJCTIKKworLyogY29uZmlndXJhdGlvbiBmb3Igb25lIGFyYml0ZXIgcXVldWUgKi8KK3N0cnVjdCBhcmJfbGluZSB7CisJaW50IGw7CisJaW50IGFkZDsKKwlpbnQgdWJvdW5kOworfTsKKworLyogZGVyaXZlZCBjb25maWd1cmF0aW9uIGZvciBlYWNoIHJlYWQgcXVldWUgZm9yIGVhY2ggbWF4IHJlcXVlc3Qgc2l6ZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhcmJfbGluZSByZWFkX2FyYl9kYXRhW05VTV9SRF9RXVtNQVhfUkRfT1JEICsgMV0gPSB7CisvKiAxICovCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDI1fSwgezMyLCA2NCwgMjV9LCB7NjQsIDY0LCA0MX0gfSwKKwl7IHs0LCA4LCAgNH0sICB7NCwgIDgsICA0fSwgIHs0LCAgOCwgIDR9LCAgezQsICA4LCAgNH0gIH0sCisJeyB7NCwgMywgIDN9LCAgezQsICAzLCAgM30sICB7NCwgIDMsICAzfSwgIHs0LCAgMywgIDN9ICB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezE2LCAzLCAgMTF9LCB7MTYsIDMsICAxMX0gfSwKKwl7IHs4LCA2NCwgMjV9LCB7MTYsIDY0LCAyNX0sIHszMiwgNjQsIDI1fSwgezY0LCA2NCwgNDF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHs2NCwgMywgIDQxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7NjQsIDMsICA0MX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHs2NCwgMywgIDQxfSB9LAorLyogMTAgKi97IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgNjQsIDZ9LCAgezE2LCA2NCwgMTF9LCB7MzIsIDY0LCAyMX0sIHszMiwgNjQsIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisvKiAyMCAqL3sgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDQxfSwgezMyLCA2NCwgODF9LCB7NjQsIDY0LCAxMjB9IH0KK307CisKKy8qIGRlcml2ZWQgY29uZmlndXJhdGlvbiBmb3IgZWFjaCB3cml0ZSBxdWV1ZSBmb3IgZWFjaCBtYXggcmVxdWVzdCBzaXplICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyYl9saW5lIHdyaXRlX2FyYl9kYXRhW05VTV9XUl9RXVtNQVhfV1JfT1JEICsgMV0gPSB7CisvKiAxICovCXsgezQsIDYsICAzfSwgIHs0LCAgNiwgIDN9LCAgezQsICA2LCAgM30gfSwKKwl7IHs0LCAyLCAgM30sICB7NCwgIDIsICAzfSwgIHs0LCAgMiwgIDN9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MTYsIDIsICAxMX0gfSwKKwl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHszMiwgMiwgIDIxfSB9LAorCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezMyLCAyLCAgMjF9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MzIsIDIsICAyMX0gfSwKKwl7IHs4LCA2NCwgMjV9LCB7MTYsIDY0LCAyNX0sIHszMiwgNjQsIDI1fSB9LAorCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezE2LCAyLCAgMTF9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MTYsIDIsICAxMX0gfSwKKy8qIDEwICoveyB7OCwgOSwgIDZ9LCAgezE2LCA5LCAgMTF9LCB7MzIsIDksICAyMX0gfSwKKwl7IHs4LCA0NywgMTl9LCB7MTYsIDQ3LCAxOX0sIHszMiwgNDcsIDIxfSB9LAorCXsgezgsIDksICA2fSwgIHsxNiwgOSwgIDExfSwgezE2LCA5LCAgMTF9IH0sCisJeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgNDF9LCB7MzIsIDY0LCA4MX0gfQorfTsKKworLyogcmVnaXN0ZXIgYWRkcmVzc2VzIGZvciByZWFkIHF1ZXVlcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhcmJfbGluZSByZWFkX2FyYl9hZGRyW05VTV9SRF9RLTFdID0geworLyogMSAqLwl7UFhQMl9SRUdfUlFfQldfUkRfTDAsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDAsCisJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDB9LAorCXtQWFAyX1JFR19QU1dSUV9CV19MMSwgUFhQMl9SRUdfUFNXUlFfQldfQUREMSwKKwkJUFhQMl9SRUdfUFNXUlFfQldfVUIxfSwKKwl7UFhQMl9SRUdfUFNXUlFfQldfTDIsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDIsCisJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMn0sCisJe1BYUDJfUkVHX1BTV1JRX0JXX0wzLCBQWFAyX1JFR19QU1dSUV9CV19BREQzLAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjN9LAorCXtQWFAyX1JFR19SUV9CV19SRF9MNCwgUFhQMl9SRUdfUlFfQldfUkRfQURENCwKKwkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5ENH0sCisJe1BYUDJfUkVHX1JRX0JXX1JEX0w1LCBQWFAyX1JFR19SUV9CV19SRF9BREQ1LAorCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQ1fSwKKwl7UFhQMl9SRUdfUFNXUlFfQldfTDYsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDYsCisJCVBYUDJfUkVHX1BTV1JRX0JXX1VCNn0sCisJe1BYUDJfUkVHX1BTV1JRX0JXX0w3LCBQWFAyX1JFR19QU1dSUV9CV19BREQ3LAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjd9LAorCXtQWFAyX1JFR19QU1dSUV9CV19MOCwgUFhQMl9SRUdfUFNXUlFfQldfQUREOCwKKwkJUFhQMl9SRUdfUFNXUlFfQldfVUI4fSwKKy8qIDEwICove1BYUDJfUkVHX1BTV1JRX0JXX0w5LCBQWFAyX1JFR19QU1dSUV9CV19BREQ5LAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjl9LAorCXtQWFAyX1JFR19QU1dSUV9CV19MMTAsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEwLAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjEwfSwKKwl7UFhQMl9SRUdfUFNXUlFfQldfTDExLCBQWFAyX1JFR19QU1dSUV9CV19BREQxMSwKKwkJUFhQMl9SRUdfUFNXUlFfQldfVUIxMX0sCisJe1BYUDJfUkVHX1JRX0JXX1JEX0wxMiwgUFhQMl9SRUdfUlFfQldfUkRfQUREMTIsCisJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDEyfSwKKwl7UFhQMl9SRUdfUlFfQldfUkRfTDEzLCBQWFAyX1JFR19SUV9CV19SRF9BREQxMywKKwkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTN9LAorCXtQWFAyX1JFR19SUV9CV19SRF9MMTQsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDE0LAorCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQxNH0sCisJe1BYUDJfUkVHX1JRX0JXX1JEX0wxNSwgUFhQMl9SRUdfUlFfQldfUkRfQUREMTUsCisJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE1fSwKKwl7UFhQMl9SRUdfUlFfQldfUkRfTDE2LCBQWFAyX1JFR19SUV9CV19SRF9BREQxNiwKKwkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTZ9LAorCXtQWFAyX1JFR19SUV9CV19SRF9MMTcsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDE3LAorCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQxN30sCisJe1BYUDJfUkVHX1JRX0JXX1JEX0wxOCwgUFhQMl9SRUdfUlFfQldfUkRfQUREMTgsCisJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE4fSwKKy8qIDIwICove1BYUDJfUkVHX1JRX0JXX1JEX0wxOSwgUFhQMl9SRUdfUlFfQldfUkRfQUREMTksCisJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE5fSwKKwl7UFhQMl9SRUdfUlFfQldfUkRfTDIwLCBQWFAyX1JFR19SUV9CV19SRF9BREQyMCwKKwkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMjB9LAorCXtQWFAyX1JFR19SUV9CV19SRF9MMjIsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDIyLAorCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQyMn0sCisJe1BYUDJfUkVHX1JRX0JXX1JEX0wyMywgUFhQMl9SRUdfUlFfQldfUkRfQUREMjMsCisJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDIzfSwKKwl7UFhQMl9SRUdfUlFfQldfUkRfTDI0LCBQWFAyX1JFR19SUV9CV19SRF9BREQyNCwKKwkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMjR9LAorCXtQWFAyX1JFR19SUV9CV19SRF9MMjUsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDI1LAorCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQyNX0sCisJe1BYUDJfUkVHX1JRX0JXX1JEX0wyNiwgUFhQMl9SRUdfUlFfQldfUkRfQUREMjYsCisJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDI2fSwKKwl7UFhQMl9SRUdfUlFfQldfUkRfTDI3LCBQWFAyX1JFR19SUV9CV19SRF9BREQyNywKKwkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMjd9LAorCXtQWFAyX1JFR19QU1dSUV9CV19MMjgsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDI4LAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjI4fQorfTsKKworLyogcmVnaXN0ZXIgYWRkcmVzc2VzIGZvciB3cml0ZSBxdWV1ZXMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgd3JpdGVfYXJiX2FkZHJbTlVNX1dSX1EtMV0gPSB7CisvKiAxICovCXtQWFAyX1JFR19QU1dSUV9CV19MMSwgUFhQMl9SRUdfUFNXUlFfQldfQUREMSwKKwkJUFhQMl9SRUdfUFNXUlFfQldfVUIxfSwKKwl7UFhQMl9SRUdfUFNXUlFfQldfTDIsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDIsCisJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMn0sCisJe1BYUDJfUkVHX1BTV1JRX0JXX0wzLCBQWFAyX1JFR19QU1dSUV9CV19BREQzLAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjN9LAorCXtQWFAyX1JFR19QU1dSUV9CV19MNiwgUFhQMl9SRUdfUFNXUlFfQldfQURENiwKKwkJUFhQMl9SRUdfUFNXUlFfQldfVUI2fSwKKwl7UFhQMl9SRUdfUFNXUlFfQldfTDcsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDcsCisJCVBYUDJfUkVHX1BTV1JRX0JXX1VCN30sCisJe1BYUDJfUkVHX1BTV1JRX0JXX0w4LCBQWFAyX1JFR19QU1dSUV9CV19BREQ4LAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjh9LAorCXtQWFAyX1JFR19QU1dSUV9CV19MOSwgUFhQMl9SRUdfUFNXUlFfQldfQUREOSwKKwkJUFhQMl9SRUdfUFNXUlFfQldfVUI5fSwKKwl7UFhQMl9SRUdfUFNXUlFfQldfTDEwLCBQWFAyX1JFR19QU1dSUV9CV19BREQxMCwKKwkJUFhQMl9SRUdfUFNXUlFfQldfVUIxMH0sCisJe1BYUDJfUkVHX1BTV1JRX0JXX0wxMSwgUFhQMl9SRUdfUFNXUlFfQldfQUREMTEsCisJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMTF9LAorLyogMTAgKi97UFhQMl9SRUdfUFNXUlFfQldfTDI4LCBQWFAyX1JFR19QU1dSUV9CV19BREQyOCwKKwkJUFhQMl9SRUdfUFNXUlFfQldfVUIyOH0sCisJe1BYUDJfUkVHX1JRX0JXX1dSX0wyOSwgUFhQMl9SRUdfUlFfQldfV1JfQUREMjksCisJCVBYUDJfUkVHX1JRX0JXX1dSX1VCT1VORDI5fSwKKwl7UFhQMl9SRUdfUlFfQldfV1JfTDMwLCBQWFAyX1JFR19SUV9CV19XUl9BREQzMCwKKwkJUFhQMl9SRUdfUlFfQldfV1JfVUJPVU5EMzB9Cit9OworCitzdGF0aWMgdm9pZCBibngyeF9pbml0X3B4cF9hcmIoc3RydWN0IGJueDJ4ICpicCwgaW50IHJfb3JkZXIsIGludCB3X29yZGVyKQoreworCXUzMiB2YWwsIGk7CiAKIAlpZiAocl9vcmRlciA+IE1BWF9SRF9PUkQpIHsKIAkJRFAoTkVUSUZfTVNHX0hXLCAicmVhZCBvcmRlciBvZiAlZCAgb3JkZXIgYWRqdXN0ZWQgdG8gJWRcbiIsCkBAIC0zNjcsNiArNDc4LDExIEBACiAJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9VU0RNRFBfVEgsICgweDE4IDw8IHdfb3JkZXIpKTsKIAogCWlmIChDSElQX0lTX0UxSChicCkpIHsKKwkJLyogICAgTVBTICAgICAgd19vcmRlciAgICAgb3B0aW1hbCBUSCAgICAgIHByZXNlbnRseSBUSAorCQkgKiAgICAxMjggICAgICAgICAwICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAyCisJCSAqICAgIDI1NiAgICAgICAgIDEgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIDMKKwkJICogICAgPj01MTIgICAgICAgMiAgICAgICAgICAgICAyICAgICAgICAgICAgICAgMworCQkgKi8KIAkJdmFsID0gKCh3X29yZGVyID09IDApID8gMiA6IDMpOwogCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0hDX01QUywgdmFsKTsKIAkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9VU0RNX01QUywgdmFsKTsKQEAgLTM4Miw2MSArNDk4LDQgQEAKIAl9CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRGVzY3JpcHRpb246Ci0gKiAgICAgICAgIENhbGN1bGF0ZXMgY3JjIDggb24gYSB3b3JkIHZhbHVlOiBwb2x5bm9taWFsIDAtMS0yLTgKLSAqICAgICAgICAgQ29kZSB3YXMgdHJhbnNsYXRlZCBmcm9tIFZlcmlsb2cuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB1OCBjYWxjX2NyYzgodTMyIGRhdGEsIHU4IGNyYykKLXsKLQl1OCBEWzMyXTsKLQl1OCBOZXdDUkNbOF07Ci0JdTggQ1s4XTsKLQl1OCBjcmNfcmVzOwotCXU4IGk7Ci0KLQkvKiBzcGxpdCB0aGUgZGF0YSBpbnRvIDMxIGJpdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotCQlEW2ldID0gZGF0YSAmIDE7Ci0JCWRhdGEgPSBkYXRhID4+IDE7Ci0JfQotCi0JLyogc3BsaXQgdGhlIGNyYyBpbnRvIDggYml0cyAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJQ1tpXSA9IGNyYyAmIDE7Ci0JCWNyYyA9IGNyYyA+PiAxOwotCX0KLQotCU5ld0NSQ1swXSA9IERbMzFdIF4gRFszMF0gXiBEWzI4XSBeIERbMjNdIF4gRFsyMV0gXiBEWzE5XSBeIERbMThdIF4KLQkJRFsxNl0gXiBEWzE0XSBeIERbMTJdIF4gRFs4XSBeIERbN10gXiBEWzZdIF4gRFswXSBeIENbNF0gXgotCQlDWzZdIF4gQ1s3XTsKLQlOZXdDUkNbMV0gPSBEWzMwXSBeIERbMjldIF4gRFsyOF0gXiBEWzI0XSBeIERbMjNdIF4gRFsyMl0gXiBEWzIxXSBeCi0JCURbMjBdIF4gRFsxOF0gXiBEWzE3XSBeIERbMTZdIF4gRFsxNV0gXiBEWzE0XSBeIERbMTNdIF4KLQkJRFsxMl0gXiBEWzldIF4gRFs2XSBeIERbMV0gXiBEWzBdIF4gQ1swXSBeIENbNF0gXiBDWzVdIF4gQ1s2XTsKLQlOZXdDUkNbMl0gPSBEWzI5XSBeIERbMjhdIF4gRFsyNV0gXiBEWzI0XSBeIERbMjJdIF4gRFsxN10gXiBEWzE1XSBeCi0JCURbMTNdIF4gRFsxMl0gXiBEWzEwXSBeIERbOF0gXiBEWzZdIF4gRFsyXSBeIERbMV0gXiBEWzBdIF4KLQkJQ1swXSBeIENbMV0gXiBDWzRdIF4gQ1s1XTsKLQlOZXdDUkNbM10gPSBEWzMwXSBeIERbMjldIF4gRFsyNl0gXiBEWzI1XSBeIERbMjNdIF4gRFsxOF0gXiBEWzE2XSBeCi0JCURbMTRdIF4gRFsxM10gXiBEWzExXSBeIERbOV0gXiBEWzddIF4gRFszXSBeIERbMl0gXiBEWzFdIF4KLQkJQ1sxXSBeIENbMl0gXiBDWzVdIF4gQ1s2XTsKLQlOZXdDUkNbNF0gPSBEWzMxXSBeIERbMzBdIF4gRFsyN10gXiBEWzI2XSBeIERbMjRdIF4gRFsxOV0gXiBEWzE3XSBeCi0JCURbMTVdIF4gRFsxNF0gXiBEWzEyXSBeIERbMTBdIF4gRFs4XSBeIERbNF0gXiBEWzNdIF4gRFsyXSBeCi0JCUNbMF0gXiBDWzJdIF4gQ1szXSBeIENbNl0gXiBDWzddOwotCU5ld0NSQ1s1XSA9IERbMzFdIF4gRFsyOF0gXiBEWzI3XSBeIERbMjVdIF4gRFsyMF0gXiBEWzE4XSBeIERbMTZdIF4KLQkJRFsxNV0gXiBEWzEzXSBeIERbMTFdIF4gRFs5XSBeIERbNV0gXiBEWzRdIF4gRFszXSBeIENbMV0gXgotCQlDWzNdIF4gQ1s0XSBeIENbN107Ci0JTmV3Q1JDWzZdID0gRFsyOV0gXiBEWzI4XSBeIERbMjZdIF4gRFsyMV0gXiBEWzE5XSBeIERbMTddIF4gRFsxNl0gXgotCQlEWzE0XSBeIERbMTJdIF4gRFsxMF0gXiBEWzZdIF4gRFs1XSBeIERbNF0gXiBDWzJdIF4gQ1s0XSBeCi0JCUNbNV07Ci0JTmV3Q1JDWzddID0gRFszMF0gXiBEWzI5XSBeIERbMjddIF4gRFsyMl0gXiBEWzIwXSBeIERbMThdIF4gRFsxN10gXgotCQlEWzE1XSBeIERbMTNdIF4gRFsxMV0gXiBEWzddIF4gRFs2XSBeIERbNV0gXiBDWzNdIF4gQ1s1XSBeCi0JCUNbNl07Ci0KLQljcmNfcmVzID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQljcmNfcmVzIHw9IChOZXdDUkNbaV0gPDwgaSk7Ci0KLQlyZXR1cm4gY3JjX3JlczsKLX0KLQogI2VuZGlmIC8qIEJOWDJYX0lOSVRfT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYyBiL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYwppbmRleCAyZWU1ODFhLi5lMzJkMzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9saW5rLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5jCkBAIC0zNyw2ICszNywxMCBAQAogLyoJCQlTaG9ydGN1dCBkZWZpbml0aW9ucwkJICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2RlZmluZSBOSUdfTEFUQ0hfQkNfRU5BQkxFX01JX0lOVCAwCisKKyNkZWZpbmUgTklHX1NUQVRVU19FTUFDMF9NSV9JTlQgXAorCQlOSUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMF9SRUdfU1RBVFVTX0VNQUMwX01JU0NfTUlfSU5UCiAjZGVmaW5lIE5JR19TVEFUVVNfWEdYUzBfTElOSzEwRyBcCiAJCU5JR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwX1JFR19TVEFUVVNfWEdYUzBfTElOSzEwRwogI2RlZmluZSBOSUdfU1RBVFVTX1hHWFMwX0xJTktfU1RBVFVTIFwKQEAgLTEzOSwyMSArMTQzLDI2IEBACiAJI2RlZmluZSBTRlBfRUVQUk9NX0NPTl9UWVBFX1ZBTF9MQyAJCTB4NwogCSNkZWZpbmUgU0ZQX0VFUFJPTV9DT05fVFlQRV9WQUxfQ09QUEVSCTB4MjEKIAorCisjZGVmaW5lIFNGUF9FRVBST01fQ09NUF9DT0RFX0FERFIJCTB4MworCSNkZWZpbmUgU0ZQX0VFUFJPTV9DT01QX0NPREVfU1JfTUFTSwkoMTw8NCkKKwkjZGVmaW5lIFNGUF9FRVBST01fQ09NUF9DT0RFX0xSX01BU0sJKDE8PDUpCisJI2RlZmluZSBTRlBfRUVQUk9NX0NPTVBfQ09ERV9MUk1fTUFTSwkoMTw8NikKKwogI2RlZmluZSBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQUREUgkJMHg4CiAJI2RlZmluZSBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQklUTUFTS19DT1BQRVJfUEFTU0lWRSAweDQKIAkjZGVmaW5lIFNGUF9FRVBST01fRkNfVFhfVEVDSF9CSVRNQVNLX0NPUFBFUl9BQ1RJVkUJIDB4OAotI2RlZmluZSBTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX0FERFIJCTB4MTQKLSNkZWZpbmUgU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9TSVpFIAkxNgorCiAjZGVmaW5lIFNGUF9FRVBST01fT1BUSU9OU19BRERSIAkJMHg0MAogCSNkZWZpbmUgU0ZQX0VFUFJPTV9PUFRJT05TX0xJTkVBUl9SWF9PVVRfTUFTSyAweDEKICNkZWZpbmUgU0ZQX0VFUFJPTV9PUFRJT05TX1NJWkUgCQkyCiAKLSNkZWZpbmUgU0ZQX01PRFVMRV9UWVBFX1VOS05PV04gCQkJMHgwCi0jZGVmaW5lIFNGUF9NT0RVTEVfVFlQRV9MQyAgIAkJCTB4MQotI2RlZmluZSBTRlBfTU9EVUxFX1RZUEVfQUNUSVZFX0NPUFBFUl9DQUJMRQkJMHgyCi0jZGVmaW5lIFNGUF9NT0RVTEVfVFlQRV9QQVNTSVZFX0NPUFBFUl9DQUJMRQkweDMKKyNkZWZpbmUgRURDX01PREVfTElORUFSCSAJCQkweDAwMjIKKyNkZWZpbmUgRURDX01PREVfTElNSVRJTkcJIAkJCTB4MDA0NAorI2RlZmluZSBFRENfTU9ERV9QQVNTSVZFX0RBQyAJCQkweDAwNTUKIAotI2RlZmluZSBTRlBfTElNSVRJTkdfTU9ERV9WQUxVRSAJCQkweDAwNDQKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNzMsNiArMTgyLDcgQEAKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MzIgZW1hY19iYXNlID0gKHBhcmFtcy0+cG9ydCkgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKKwogCS8qIFNldCBDbGF1c2UgMjIgKi8KIAlSRUdfV1IoYnAsIE5JR19SRUdfU0VSREVTMF9DVFJMX01EX1NUICsgcGFyYW1zLT5wb3J0KjB4MTAsIDEpOwogCVJFR19XUihicCwgZW1hY19iYXNlICsgRU1BQ19SRUdfRU1BQ19NRElPX0NPTU0sIDB4MjQ1ZjgwMDApOwpAQCAtMTg1LDYgKzE5NSw3IEBACiBzdGF0aWMgdm9pZCBibngyeF9zZXRfcGh5X21kaW8oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHU4IHBoeV9mbGFncykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwogCWlmIChwaHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7CiAJCVJFR19XUihicCwgTklHX1JFR19YR1hTMF9DVFJMX01EX1NUICsKIAkJCSAgIHBhcmFtcy0+cG9ydCoweDE4LCAwKTsKQEAgLTM4OCw3ICszOTksOCBAQAogCiAJCS8qIGVuYWJsZSBhY2Nlc3MgZm9yIGJtYWMgcmVnaXN0ZXJzICovCiAJCVJFR19XUihicCwgTklHX1JFR19CTUFDMF9SRUdTX09VVF9FTiArIHBvcnQqNCwgMHgxKTsKLQl9CisJfSBlbHNlCisJCVJFR19XUihicCwgTklHX1JFR19CTUFDMF9SRUdTX09VVF9FTiArIHBvcnQqNCwgMHgwKTsKIAogCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfRU1BQzsKIAlyZXR1cm4gMDsKQEAgLTQ1NSw3ICs0NjcsNiBAQAogCVJFR19XUl9ETUFFKGJwLCBibWFjX2FkZHIgKyBCSUdNQUNfUkVHSVNURVJfQk1BQ19DT05UUk9MLAogCQkgICAgd2JfZGF0YSwgMik7CiAKLQogCS8qIHNldCByeCBtdHUgKi8KIAl3Yl9kYXRhWzBdID0gRVRIX01BWF9KVU1CT19QQUNLRVRfU0laRSArIEVUSF9PVlJFSEVBRDsKIAl3Yl9kYXRhWzFdID0gMDsKQEAgLTY3NCw2ICs2ODUsNyBAQAogc3RhdGljIHZvaWQgYm54MnhfdXBkYXRlX21uZyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTMyIGxpbmtfc3RhdHVzKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCiAJUkVHX1dSKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKwogCQkgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAogCQkJICAgIHBvcnRfbWJbcGFyYW1zLT5wb3J0XS5saW5rX3N0YXR1cyksCkBAIC03NzAsNyArNzgyLDYgQEAKIAkJCURQKE5FVElGX01TR19MSU5LLCAiSW52YWxpZCBsaW5lX3NwZWVkIDB4JXhcbiIsCiAJCQkJICBsaW5lX3NwZWVkKTsKIAkJCXJldHVybiAtRUlOVkFMOwotCQkJYnJlYWs7CiAJCX0KIAl9CiAJUkVHX1dSKGJwLCBQQkZfUkVHX1AwX0lOSVRfQ1JEICsgcG9ydCo0LCBpbml0X2NyZCk7CkBAIC03OTAsOSArODAxLDExIEBACiBzdGF0aWMgdTMyIGJueDJ4X2dldF9lbWFjX2Jhc2Uoc3RydWN0IGJueDJ4ICpicCwgdTMyIGV4dF9waHlfdHlwZSwgdTggcG9ydCkKIHsKIAl1MzIgZW1hY19iYXNlOworCiAJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKIAkJLyogQWxsIE1EQy9NRElPIGlzIGRpcmVjdGVkIHRocm91Z2ggc2luZ2xlIEVNQUMgKi8KIAkJaWYgKFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApKQogCQkJZW1hY19iYXNlID0gR1JDQkFTRV9FTUFDMDsKQEAgLTg5NCw3ICs5MDcsNyBAQAogCXZhbCA9IHNhdmVkX21vZGUgJiAoKEVNQUNfTURJT19NT0RFX0FVVE9fUE9MTCB8CiAJCQkgICAgIEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVCkpOwogCXZhbCB8PSAoRU1BQ19NRElPX01PREVfQ0xBVVNFXzQ1IHwKLQkJKDQ5IDw8IEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVF9CSVRTSElGVCkpOworCQkoNDlMIDw8IEVNQUNfTURJT19NT0RFX0NMT0NLX0NOVF9CSVRTSElGVCkpOwogCVJFR19XUihicCwgbWRpb19jdHJsICsgRU1BQ19SRUdfRU1BQ19NRElPX01PREUsIHZhbCk7CiAJUkVHX1JEKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSk7CiAJdWRlbGF5KDQwKTsKQEAgLTEwMTEsOCArMTAyNCw4IEBACiAJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAogCQkJICAgICAgKG1paV9jb250cm9sIHwKIAkJCSAgICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfUkVTRVQpKTsKLQotCWJueDJ4X3NldF9zZXJkZXNfYWNjZXNzKHBhcmFtcyk7CisJaWYgKHBhcmFtcy0+c3dpdGNoX2NmZyA9PSBTV0lUQ0hfQ0ZHXzFHKQorCQlibngyeF9zZXRfc2VyZGVzX2FjY2VzcyhwYXJhbXMpOwogCiAJLyogd2FpdCBmb3IgdGhlIHJlc2V0IHRvIHNlbGYgY2xlYXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTURJT19BQ0NFU1NfVElNRU9VVDsgaSsrKSB7CkBAIC0xMTQxLDcgKzExNTQsOCBAQAogfQogCiBzdGF0aWMgdm9pZCBibngyeF9zZXRfYXV0b25lZyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCSAgICBzdHJ1Y3QgbGlua192YXJzICAgKnZhcnMpCisJCQkgICAgc3RydWN0IGxpbmtfdmFycyAqdmFycywKKwkJCSAgICB1OCBlbmFibGVfY2w3MykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MTYgcmVnX3ZhbDsKQEAgLTExNzEsNyArMTE4NSw5IEBACiAJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAogCQkJICAgICAgTURJT19SRUdfQkFOS19TRVJERVNfRElHSVRBTCwKIAkJCSAgICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMSwgJnJlZ192YWwpOwotCXJlZ192YWwgJj0gfk1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9TSUdOQUxfREVURUNUX0VOOworCXJlZ192YWwgJj0gfihNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfU0lHTkFMX0RFVEVDVF9FTiB8CisJCSAgICBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfSU5WRVJUX1NJR05BTF9ERVRFQ1QpOworCXJlZ192YWwgfD0gTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX0ZJQkVSX01PREU7CiAJaWYgKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpCiAJCXJlZ192YWwgfD0gTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX0FVVE9ERVQ7CiAJZWxzZQpAQCAtMTIwMyw4ICsxMjE5LDUxIEBACiAJCQkgICAgICBNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMLAogCQkJICAgICAgcmVnX3ZhbCk7CiAKLQkvKiBDTDczIEF1dG9uZWcgRGlzYWJsZWQgKi8KLQlyZWdfdmFsID0gMDsKKwlpZiAoZW5hYmxlX2NsNzMpIHsKKwkJLyogRW5hYmxlIENsNzMgRlNNIHN0YXR1cyBiaXRzICovCisJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfVVNFUkIwLAorCQkJCSAgICBNRElPX0NMNzNfVVNFUkIwX0NMNzNfVUNUUkwsCisJCQkJICAgIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19VQ1RSTF9VU1RBVDFfTVVYU0VMKTsKKworCQkvKiBFbmFibGUgQkFNIFN0YXRpb24gTWFuYWdlciovCisJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQlwYXJhbXMtPnBoeV9hZGRyLAorCQkJTURJT19SRUdfQkFOS19DTDczX1VTRVJCMCwKKwkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDEsCisJCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxX0JBTV9FTiB8CisJCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxX0JBTV9TVEFUSU9OX01OR1JfRU4gfAorCQkJTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fTlBfQUZURVJfQlBfRU4pOworCisJCS8qIE1lcmdlIENMNzMgYW5kIENMMzcgYW5lZyByZXNvbHV0aW9uICovCisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfVVNFUkIwLAorCQkJCSAgICAgIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDMsCisJCQkJICAgICAgJnJlZ192YWwpOworCisJCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKKwkJICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBHKSB7CisJCQkvKiBTZXQgdGhlIENMNzMgQU4gc3BlZWQgKi8KKwkJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjEsCisJCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMiwKKwkJCQkJICAgICAgJnJlZ192YWwpOworCisJCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIxLAorCQkJCQkgICAgICBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjIsCisJCQkgIHJlZ192YWwgfCBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjJfQURWUl8xMEdfS1g0KTsKKworCQl9CisJCS8qIENMNzMgQXV0b25lZyBFbmFibGVkICovCisJCXJlZ192YWwgPSBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9BTl9FTjsKKworCX0gZWxzZSAvKiBDTDczIEF1dG9uZWcgRGlzYWJsZWQgKi8KKwkJcmVnX3ZhbCA9IDA7CiAKIAlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAogCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKQEAgLTEyMTksMTQgKzEyNzgsMTQgQEAKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MTYgcmVnX3ZhbDsKIAotCS8qIHByb2dyYW0gZHVwbGV4LCBkaXNhYmxlIGF1dG9uZWcgKi8KLQorCS8qIHByb2dyYW0gZHVwbGV4LCBkaXNhYmxlIGF1dG9uZWcgYW5kIHNnbWlpKi8KIAlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAogCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKIAkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCiAJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLCAmcmVnX3ZhbCk7CiAJcmVnX3ZhbCAmPSB+KE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9GVUxMX0RVUExFWCB8Ci0JCSAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOKTsKKwkJICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfQU5fRU4gfAorCQkgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9NQU5fU0dNSUlfU1BfTUFTSyk7CiAJaWYgKHBhcmFtcy0+cmVxX2R1cGxleCA9PSBEVVBMRVhfRlVMTCkKIAkJcmVnX3ZhbCB8PSBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfRlVMTF9EVVBMRVg7CiAJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKQEAgLTEyODcsMTAgKzEzNDYsMTAgQEAKIAlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAogCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKIAkJCSAgICAgIE1ESU9fUkVHX0JBTktfT1ZFUl8xRywKLQkJCSAgICAgIE1ESU9fT1ZFUl8xR19VUDMsIDApOworCQkJICAgICAgTURJT19PVkVSXzFHX1VQMywgMHg0MDApOwogfQogCi1zdGF0aWMgdm9pZCBibngyeF9jYWxjX2llZWVfYW5lZ19hZHYoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHUzMiAqaWVlZV9mYykKK3N0YXRpYyB2b2lkIGJueDJ4X2NhbGNfaWVlZV9hbmVnX2FkdihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTE2ICppZWVlX2ZjKQogewogCSppZWVlX2ZjID0gTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfRlVMTF9EVVBMRVg7CiAJLyogcmVzb2x2ZSBwYXVzZSBtb2RlIGFuZCBhZHZlcnRpc2VtZW50CkBAIC0xMzI0LDcgKzEzODMsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBibngyeF9zZXRfaWVlZV9hbmVnX2FkdmVydGlzbWVudChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCQkJICAgdTMyIGllZWVfZmMpCisJCQkJCSAgIHUxNiBpZWVlX2ZjKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCS8qIGZvciBBTiwgd2UgYXJlIGFsd2F5cyBwdWJsaXNoaW5nIGZ1bGwgZHVwbGV4ICovCkBAIC0xMzMyLDMxICsxMzkxLDQ5IEBACiAJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKIAkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCiAJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAotCQkJICAgICAgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFYsICh1MTYpaWVlZV9mYyk7CisJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEViwgaWVlZV9mYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4X3Jlc3RhcnRfYXV0b25lZyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3N0YXRpYyB2b2lkIGJueDJ4X3Jlc3RhcnRfYXV0b25lZyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTggZW5hYmxlX2NsNzMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTE2IG1paV9jb250cm9sOworCiAJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9yZXN0YXJ0X2F1dG9uZWdcbiIpOwogCS8qIEVuYWJsZSBhbmQgcmVzdGFydCBCQU0vQ0wzNyBhbmVnICovCiAKLQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCi0JCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAotCQkJICAgICAgJm1paV9jb250cm9sKTsKLQlEUChORVRJRl9NU0dfTElOSywKLQkJICJibngyeF9yZXN0YXJ0X2F1dG9uZWcgbWlpX2NvbnRyb2wgYmVmb3JlID0gMHgleFxuIiwKLQkJIG1paV9jb250cm9sKTsKLQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCi0JCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAotCQkJICAgICAgKG1paV9jb250cm9sIHwKLQkJCSAgICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfQU5fRU4gfAotCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9SRVNUQVJUX0FOKSk7CisJaWYgKGVuYWJsZV9jbDczKSB7CisJCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIwLAorCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLAorCQkJCSAgICAgICZtaWlfY29udHJvbCk7CisKKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQlwYXJhbXMtPnBoeV9hZGRyLAorCQkJCU1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjAsCisJCQkJTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0wsCisJCQkJKG1paV9jb250cm9sIHwKKwkJCQlNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9BTl9FTiB8CisJCQkJTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0xfUkVTVEFSVF9BTikpOworCX0gZWxzZSB7CisKKwkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCisJCQkJICAgICAgTURJT19DT01CT19JRUVFMF9NSUlfQ09OVFJPTCwKKwkJCQkgICAgICAmbWlpX2NvbnRyb2wpOworCQlEUChORVRJRl9NU0dfTElOSywKKwkJCSAiYm54MnhfcmVzdGFydF9hdXRvbmVnIG1paV9jb250cm9sIGJlZm9yZSA9IDB4JXhcbiIsCisJCQkgbWlpX2NvbnRyb2wpOworCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAorCQkJCSAgICAgIChtaWlfY29udHJvbCB8CisJCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9BTl9FTiB8CisJCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9SRVNUQVJUX0FOKSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0aWFsaXplX3NnbWlpX3Byb2Nlc3Moc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCkBAIC0xNDI4LDcgKzE1MDUsNyBAQAogCiAJfSBlbHNlIHsgLyogQU4gbW9kZSAqLwogCQkvKiBlbmFibGUgYW5kIHJlc3RhcnQgQU4gKi8KLQkJYm54MnhfcmVzdGFydF9hdXRvbmVnKHBhcmFtcyk7CisJCWJueDJ4X3Jlc3RhcnRfYXV0b25lZyhwYXJhbXMsIDApOwogCX0KIH0KIApAQCAtMTQ2MCwyMiArMTUzNywxOSBAQAogCX0KIH0KIAotc3RhdGljIHU4IGJueDJ4X2V4dF9waHlfcmVzb3ZlX2ZjKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorc3RhdGljIHU4IGJueDJ4X2V4dF9waHlfcmVzb2x2ZV9mYyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKIAkJCQkgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTggZXh0X3BoeV9hZGRyOwotCXUxNiBsZF9wYXVzZTsJLyogbG9jYWwgKi8KLQl1MTYgbHBfcGF1c2U7CS8qIGxpbmsgcGFydG5lciAqLwotCXUxNiBhbl9jb21wbGV0ZTsgLyogQU4gY29tcGxldGUgKi8KKwl1MTYgbGRfcGF1c2U7CQkvKiBsb2NhbCAqLworCXUxNiBscF9wYXVzZTsJCS8qIGxpbmsgcGFydG5lciAqLworCXUxNiBhbl9jb21wbGV0ZTsJLyogQU4gY29tcGxldGUgKi8KIAl1MTYgcGF1c2VfcmVzdWx0OwogCXU4IHJldCA9IDA7CiAJdTMyIGV4dF9waHlfdHlwZTsKIAl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCWV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7Ci0KKwlleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAkvKiByZWFkIHR3aWNlICovCiAKQEAgLTE1NzAsNyArMTY0NCw3IEBACiAJCURQKE5FVElGX01TR19MSU5LLCAicGF1c2VfcmVzdWx0IDB4JXhcbiIsIHBhdXNlX3Jlc3VsdCk7CiAJCWJueDJ4X3BhdXNlX3Jlc29sdmUodmFycywgcGF1c2VfcmVzdWx0KTsKIAl9IGVsc2UgaWYgKChwYXJhbXMtPnJlcV9mbG93X2N0cmwgPT0gQk5YMlhfRkxPV19DVFJMX0FVVE8pICYmCi0JCSAgIChibngyeF9leHRfcGh5X3Jlc292ZV9mYyhwYXJhbXMsIHZhcnMpKSkgeworCQkgICAoYm54MnhfZXh0X3BoeV9yZXNvbHZlX2ZjKHBhcmFtcywgdmFycykpKSB7CiAJCXJldHVybjsKIAl9IGVsc2UgewogCQlpZiAocGFyYW1zLT5yZXFfZmxvd19jdHJsID09IEJOWDJYX0ZMT1dfQ1RSTF9BVVRPKQpAQCAtMTU4MSwxMCArMTY1NSw3NyBAQAogCURQKE5FVElGX01TR19MSU5LLCAiZmxvd19jdHJsIDB4JXhcbiIsIHZhcnMtPmZsb3dfY3RybCk7CiB9CiAKLQorc3RhdGljIHZvaWQgYm54MnhfY2hlY2tfZmFsbGJhY2tfdG9fY2wzNyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgcnhfc3RhdHVzLCB1c3RhdF92YWwsIGNsMzdfZnNtX3JlY2lldmVkOworCURQKE5FVElGX01TR19MSU5LLCAiYm54MnhfY2hlY2tfZmFsbGJhY2tfdG9fY2wzN1xuIik7CisJLyogU3RlcCAxOiBNYWtlIHN1cmUgc2lnbmFsIGlzIGRldGVjdGVkICovCisJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX1JYMCwKKwkJCSAgICAgIE1ESU9fUlgwX1JYX1NUQVRVUywKKwkJCSAgICAgICZyeF9zdGF0dXMpOworCWlmICgocnhfc3RhdHVzICYgTURJT19SWDBfUlhfU1RBVFVTX1NJR0RFVCkgIT0KKwkgICAgKE1ESU9fUlgwX1JYX1NUQVRVU19TSUdERVQpKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiU2lnbmFsIGlzIG5vdCBkZXRlY3RlZC4gUmVzdG9yaW5nIENMNzMuIgorCQkJICAgICAicnhfc3RhdHVzKDB4ODBiMCkgPSAweCV4XG4iLCByeF9zdGF0dXMpOworCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKKwkJCQkgICAgICBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTCwKKwkJCQkgICAgICBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9BTl9FTik7CisJCXJldHVybjsKKwl9CisJLyogU3RlcCAyOiBDaGVjayBDTDczIHN0YXRlIG1hY2hpbmUgKi8KKwlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAsCisJCQkgICAgICBNRElPX0NMNzNfVVNFUkIwX0NMNzNfVVNUQVQxLAorCQkJICAgICAgJnVzdGF0X3ZhbCk7CisJaWYgKCh1c3RhdF92YWwgJgorCSAgICAgKE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19VU1RBVDFfTElOS19TVEFUVVNfQ0hFQ0sgfAorCSAgICAgIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19VU1RBVDFfQU5fR09PRF9DSEVDS19CQU0zNykpICE9CisJICAgIChNRElPX0NMNzNfVVNFUkIwX0NMNzNfVVNUQVQxX0xJTktfU1RBVFVTX0NIRUNLIHwKKwkgICAgICBNRElPX0NMNzNfVVNFUkIwX0NMNzNfVVNUQVQxX0FOX0dPT0RfQ0hFQ0tfQkFNMzcpKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiQ0w3MyBzdGF0ZS1tYWNoaW5lIGlzIG5vdCBzdGFibGUuICIKKwkJCSAgICAgInVzdGF0X3ZhbCgweDgzNzEpID0gMHgleFxuIiwgdXN0YXRfdmFsKTsKKwkJcmV0dXJuOworCX0KKwkvKiBTdGVwIDM6IENoZWNrIENMMzcgTWVzc2FnZSBQYWdlcyByZWNlaXZlZCB0byBpbmRpY2F0ZSBMUAorCXN1cHBvcnRzIG9ubHkgQ0wzNyAqLworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19SRU1PVEVfUEhZLAorCQkJICAgICAgTURJT19SRU1PVEVfUEhZX01JU0NfUlhfU1RBVFVTLAorCQkJICAgICAgJmNsMzdfZnNtX3JlY2lldmVkKTsKKwlpZiAoKGNsMzdfZnNtX3JlY2lldmVkICYKKwkgICAgIChNRElPX1JFTU9URV9QSFlfTUlTQ19SWF9TVEFUVVNfQ0wzN19GU01fUkVDRUlWRURfT1ZFUjFHX01TRyB8CisJICAgICBNRElPX1JFTU9URV9QSFlfTUlTQ19SWF9TVEFUVVNfQ0wzN19GU01fUkVDRUlWRURfQlJDTV9PVUlfTVNHKSkgIT0KKwkgICAgKE1ESU9fUkVNT1RFX1BIWV9NSVNDX1JYX1NUQVRVU19DTDM3X0ZTTV9SRUNFSVZFRF9PVkVSMUdfTVNHIHwKKwkgICAgICBNRElPX1JFTU9URV9QSFlfTUlTQ19SWF9TVEFUVVNfQ0wzN19GU01fUkVDRUlWRURfQlJDTV9PVUlfTVNHKSkgeworCQlEUChORVRJRl9NU0dfTElOSywgIk5vIENMMzcgRlNNIHdlcmUgcmVjZWl2ZWQuICIKKwkJCSAgICAgIm1pc2Nfcnhfc3RhdHVzKDB4ODMzMCkgPSAweCV4XG4iLAorCQkJIGNsMzdfZnNtX3JlY2lldmVkKTsKKwkJcmV0dXJuOworCX0KKwkvKiBUaGUgY29tYmluZWQgY2wzNy9jbDczIGZzbSBzdGF0ZSBpbmZvcm1hdGlvbiBpbmRpY2F0aW5nIHRoYXQgd2UgYXJlCisJY29ubmVjdGVkIHRvIGEgZGV2aWNlIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgY2w3MywgYnV0IGRvZXMgc3VwcG9ydAorCWNsMzcgQkFNLiBJbiB0aGlzIGNhc2Ugd2UgZGlzYWJsZSBjbDczIGFuZCByZXN0YXJ0IGNsMzcgYXV0by1uZWcgKi8KKwkvKiBEaXNhYmxlIENMNzMgKi8KKwlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjAsCisJCQkgICAgICBNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTCwKKwkJCSAgICAgIDApOworCS8qIFJlc3RhcnQgQ0wzNyBhdXRvbmVnICovCisJYm54MnhfcmVzdGFydF9hdXRvbmVnKHBhcmFtcywgMCk7CisJRFAoTkVUSUZfTVNHX0xJTkssICJEaXNhYmxpbmcgQ0w3MywgYW5kIHJlc3RhcnRpbmcgQ0wzNyBhdXRvbmVnXG4iKTsKK30KIHN0YXRpYyB1OCBibngyeF9saW5rX3NldHRpbmdzX3N0YXR1cyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCQkgICAgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAotCQkJCSAgICAgIHUzMiBncF9zdGF0dXMpCisJCQkJICAgc3RydWN0IGxpbmtfdmFycyAqdmFycywKKwkJCQkgICB1MzIgZ3Bfc3RhdHVzLAorCQkJCSAgIHU4IGV4dF9waHlfbGlua191cCkKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MTYgbmV3X2xpbmVfc3BlZWQ7CkBAIC0xNjQ1LDcgKzE3ODYsNyBAQAogCQkJCSAibGluayBzcGVlZCB1bnN1cHBvcnRlZCAgZ3Bfc3RhdHVzIDB4JXhcbiIsCiAJCQkJICBncF9zdGF0dXMpOwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlicmVhazsKKwogCQljYXNlIEdQX1NUQVRVU18xMEdfS1g0OgogCQljYXNlIEdQX1NUQVRVU18xMEdfSElHOgogCQljYXNlIEdQX1NUQVRVU18xMEdfQ1g0OgpAQCAtMTY4MiwxNCArMTgyMywyMyBAQAogCQkJRFAoTkVUSUZfTVNHX0xJTkssCiAJCQkJICAibGluayBzcGVlZCB1bnN1cHBvcnRlZCBncF9zdGF0dXMgMHgleFxuIiwKIAkJCQkgIGdwX3N0YXR1cyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCQkJYnJlYWs7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCS8qIFVwb24gbGluayBzcGVlZCBjaGFuZ2Ugc2V0IHRoZSBOSUcgaW50byBkcmFpbiBtb2RlLgogCQlDb21lcyB0byBkZWFscyB3aXRoIHBvc3NpYmxlIEZJRk8gZ2xpdGNoIGR1ZSB0byBjbGsgY2hhbmdlCiAJCXdoZW4gc3BlZWQgaXMgZGVjcmVhc2VkIHdpdGhvdXQgbGluayBkb3duIGluZGljYXRvciAqLwogCQlpZiAobmV3X2xpbmVfc3BlZWQgIT0gdmFycy0+bGluZV9zcGVlZCkgeworCQkJaWYgKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpICE9CisJCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCAmJgorCQkJICAgIGV4dF9waHlfbGlua191cCkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiSW50ZXJuYWwgbGluayBzcGVlZCAlZCBpcyIKKwkJCQkJICAgICIgZGlmZmVyZW50IHRoYW4gdGhlIGV4dGVybmFsIgorCQkJCQkgICAgIiBsaW5rIHNwZWVkICVkXG4iLCBuZXdfbGluZV9zcGVlZCwKKwkJCQkJICB2YXJzLT5saW5lX3NwZWVkKTsKKwkJCQl2YXJzLT5waHlfbGlua191cCA9IDA7CisJCQkJcmV0dXJuIDA7CisJCQl9CiAJCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFCiAJCQkJICAgICsgcGFyYW1zLT5wb3J0KjQsIDApOwogCQkJbXNsZWVwKDEpOwpAQCAtMTcwMyw5ICsxODUzLDcgQEAKIAkJICAgIChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQogCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUpIHx8CiAJCSAgICAoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgPT0KLQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KSB8fAotCQkgICAgIChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQotCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEpKSkgeworCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpKSkgewogCQkJdmFycy0+YXV0b25lZyA9IEFVVE9fTkVHX0VOQUJMRUQ7CiAKIAkJCWlmIChncF9zdGF0dXMgJiBNRElPX0FOX0NMNzNfT1JfMzdfQ09NUExFVEUpIHsKQEAgLTE3MzYsNiArMTg4NCwxMyBAQAogCQl2YXJzLT5mbG93X2N0cmwgPSBCTlgyWF9GTE9XX0NUUkxfTk9ORTsKIAkJdmFycy0+YXV0b25lZyA9IEFVVE9fTkVHX0RJU0FCTEVEOwogCQl2YXJzLT5tYWNfdHlwZSA9IE1BQ19UWVBFX05PTkU7CisKKwkJaWYgKChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKSAmJgorCQkgICAgKChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQorCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkpKSB7CisJCQkvKiBDaGVjayBzaWduYWwgaXMgZGV0ZWN0ZWQgKi8KKwkJCWJueDJ4X2NoZWNrX2ZhbGxiYWNrX3RvX2NsMzcocGFyYW1zKTsKKwkJfQogCX0KIAogCURQKE5FVElGX01TR19MSU5LLCAiZ3Bfc3RhdHVzIDB4JXggIHBoeV9saW5rX3VwICV4IGxpbmVfc3BlZWQgJXggXG4iLApAQCAtMTg0MCw3ICsxOTk1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgCQkgICAgIEV4dGVybmFsIFBoeSBzZWN0aW9uICAgICAgIAkJICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgYm54MnhfaHdfcmVzZXQoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCkKK3ZvaWQgYm54MnhfZXh0X3BoeV9od19yZXNldChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0KQogewogCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzEsCiAJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csIHBvcnQpOwpAQCAtMTg1NCw5ICsyMDA5LDggQEAKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MzIgZXh0X3BoeV90eXBlOwotCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwogCURQKE5FVElGX01TR19MSU5LLCAiUG9ydCAleDogYm54MnhfZXh0X3BoeV9yZXNldFxuIiwgcGFyYW1zLT5wb3J0KTsKIAlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAkvKiBUaGUgUEhZIHJlc2V0IGlzIGNvbnRyb2xlZCBieSBHUElPIDEKQEAgLTE4NzksNyArMjAzMyw3IEBACiAJCQkJCSAgcGFyYW1zLT5wb3J0KTsKIAogCQkJLyogSFcgcmVzZXQgKi8KLQkJCWJueDJ4X2h3X3Jlc2V0KGJwLCBwYXJhbXMtPnBvcnQpOworCQkJYm54MnhfZXh0X3BoeV9od19yZXNldChicCwgcGFyYW1zLT5wb3J0KTsKIAogCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAogCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCkBAIC0xODg3LDYgKzIwNDEsMTAgQEAKIAkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCiAJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLCAweGEwNDApOwogCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgorCQkJYnJlYWs7CisKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgogCiAJCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KQEAgLTE5MDQsMTYgKzIwNjIsMTcgQEAKIAkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCiAJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAogCQkJCSAgICAgICAxPDwxNSk7Ci0KIAkJCWJyZWFrOworCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4MDcyXG4iKTsKKwogCQkJLyogVW5zZXQgTG93IFBvd2VyIE1vZGUgYW5kIFNXIHJlc2V0ICovCiAJCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KIAkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCiAJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwKIAkJCQkJICBwYXJhbXMtPnBvcnQpOwogCi0JCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODA3MlxuIik7CiAJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKIAkJCQkgICAgICAgZXh0X3BoeV9hZGRyLApAQCAtMTkyMSw4ICsyMDgwLDkgQEAKIAkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCiAJCQkJICAgICAgIDE8PDE1KTsKIAkJCWJyZWFrOworCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKLQkJCXsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4MDczXG4iKTsKIAogCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCiAJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLApAQCAtMTkzMiw5ICsyMDkyLDYgQEAKIAkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzEsCiAJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwKIAkJCQkJICBwYXJhbXMtPnBvcnQpOwotCi0JCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODA3M1xuIik7Ci0JCQl9CiAJCQlicmVhazsKIAogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CkBAIC0xOTQ2LDE5ICsyMTAzLDE3IEBACiAJCQkJCSAgcGFyYW1zLT5wb3J0KTsKIAogCQkJLyogSFcgcmVzZXQgKi8KLQkJCWJueDJ4X2h3X3Jlc2V0KGJwLCBwYXJhbXMtPnBvcnQpOwotCisJCQlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCBwYXJhbXMtPnBvcnQpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgotCiAJCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KIAkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCiAJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfSElHSCwKIAkJCQkJICBwYXJhbXMtPnBvcnQpOwogCiAJCQkvKiBIVyByZXNldCAqLwotCQkJYm54MnhfaHdfcmVzZXQoYnAsIHBhcmFtcy0+cG9ydCk7CisJCQlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCBwYXJhbXMtPnBvcnQpOwogCiAJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKQEAgLTE5ODYsMjQgKzIxNDEsMjIgQEAKIAogCQljYXNlIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfQkNNNTQ4MjoKIAkJCURQKE5FVElGX01TR19MSU5LLCAiU2VyRGVzIDU0ODJcbiIpOwotCQkJYm54MnhfaHdfcmVzZXQoYnAsIHBhcmFtcy0+cG9ydCk7CisJCQlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCBwYXJhbXMtPnBvcnQpOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCURQKE5FVElGX01TR19MSU5LLAotCQkJCSAiQkFEIFNlckRlcyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJCQUQgU2VyRGVzIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCiAJCQkJIHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiB9CiAKLQogc3RhdGljIHZvaWQgYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAogCQkJCSAgICB1MzIgc2htZW1fYmFzZSwgdTMyIHNwaXJvbV92ZXIpCiB7Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJGVyB2ZXJzaW9uIDB4JXg6MHgleFxuIiwKLQkJICh1MTYpKHNwaXJvbV92ZXI+PjE2KSwgKHUxNilzcGlyb21fdmVyKTsKKwlEUChORVRJRl9NU0dfTElOSywgIkZXIHZlcnNpb24gMHgleDoweCV4IGZvciBwb3J0ICVkXG4iLAorCQkgKHUxNikoc3Bpcm9tX3Zlcj4+MTYpLCAodTE2KXNwaXJvbV92ZXIsIHBvcnQpOwogCVJFR19XUihicCwgc2htZW1fYmFzZSArCiAJCSAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCiAJCQkgICAgcG9ydF9tYltwb3J0XS5leHRfcGh5X2Z3X3ZlcnNpb24pLApAQCAtMjAxNSw2ICsyMTY4LDcgQEAKIAkJCQkgICAgdTMyIHNobWVtX2Jhc2UpCiB7CiAJdTE2IGZ3X3ZlcjEsIGZ3X3ZlcjI7CisKIAlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKIAkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmZndfdmVyMSk7CiAJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCkBAIC0yMDIzLDEzICsyMTc3LDExNiBAQAogCQkJCSh1MzIpKGZ3X3ZlcjE8PDE2IHwgZndfdmVyMikpOwogfQogCisKK3N0YXRpYyB2b2lkIGJueDJ4X3NhdmVfODQ4MV9zcGlyb21fdmVyc2lvbihzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCQkgdTggZXh0X3BoeV9hZGRyLCB1MzIgc2htZW1fYmFzZSkKK3sKKwl1MTYgdmFsLCBmd192ZXIxLCBmd192ZXIyLCBjbnQ7CisJLyogRm9yIHRoZSAzMiBiaXRzIHJlZ2lzdGVycyBpbiA4NDgxLCBhY2Nlc3MgdmlhIE1ESU8yQVJNIGludGVyZmFjZS4qLworCS8qICgxKSBzZXQgcmVnaXN0ZXIgMHhjMjAwXzAwMTQoU1BJX0JSSURHRV9DVFJMXzIpIHRvIDB4MDMwMDAwMDAgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCSAgICAgICAweEE4MTksIDB4MDAxNCk7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIDB4QTgxQSwKKwkJICAgICAgIDB4YzIwMCk7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIDB4QTgxQiwKKwkJICAgICAgIDB4MDAwMCk7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIDB4QTgxQywKKwkJICAgICAgIDB4MDMwMCk7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIDB4QTgxNywKKwkJICAgICAgIDB4MDAwOSk7CisKKwlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDsgY250KyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgMHhBODE4LAorCQkJICAgICAgJnZhbCk7CisJCWlmICh2YWwgJiAxKQorCQkJYnJlYWs7CisJCXVkZWxheSg1KTsKKwl9CisJaWYgKGNudCA9PSAxMDApIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJVbmFibGUgdG8gcmVhZCA4NDgxIHBoeSBmdyB2ZXJzaW9uKDEpXG4iKTsKKwkJYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihicCwgcG9ydCwKKwkJCQkJc2htZW1fYmFzZSwgMCk7CisJCXJldHVybjsKKwl9CisKKworCS8qIDIpIHJlYWQgcmVnaXN0ZXIgMHhjMjAwXzAwMDAgKFNQSV9GV19TVEFUVVMpICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgMHhBODE5LCAweDAwMDApOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIDB4QTgxQSwgMHhjMjAwKTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCSAgICAgICAweEE4MTcsIDB4MDAwQSk7CisJZm9yIChjbnQgPSAwOyBjbnQgPCAxMDA7IGNudCsrKSB7CisJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIDB4QTgxOCwKKwkJCSAgICAgICZ2YWwpOworCQlpZiAodmFsICYgMSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoNSk7CisJfQorCWlmIChjbnQgPT0gMTAwKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiVW5hYmxlIHRvIHJlYWQgODQ4MSBwaHkgZncgdmVyc2lvbigyKVxuIik7CisJCWJueDJ4X3NhdmVfc3Bpcm9tX3ZlcnNpb24oYnAsIHBvcnQsCisJCQkJCXNobWVtX2Jhc2UsIDApOworCQlyZXR1cm47CisJfQorCisJLyogbG93ZXIgMTYgYml0cyBvZiB0aGUgcmVnaXN0ZXIgU1BJX0ZXX1NUQVRVUyAqLworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgMHhBODFCLAorCQkgICAgICAmZndfdmVyMSk7CisJLyogdXBwZXIgMTYgYml0cyBvZiByZWdpc3RlciBTUElfRldfU1RBVFVTICovCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAweEE4MUMsCisJCSAgICAgICZmd192ZXIyKTsKKworCWJueDJ4X3NhdmVfc3Bpcm9tX3ZlcnNpb24oYnAsIHBvcnQsCisJCQkJc2htZW1fYmFzZSwgKGZ3X3ZlcjI8PDE2KSB8IGZ3X3ZlcjEpOworfQorCiBzdGF0aWMgdm9pZCBibngyeF9iY204MDcyX2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7Ci0JdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKLQkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCiAJLyogTmVlZCB0byB3YWl0IDIwMG1zIGFmdGVyIHJlc2V0ICovCkBAIC0yMDc3LDkgKzIzMzQsNyBAQAogCS8qIFRoaXMgaXMgb25seSByZXF1aXJlZCBmb3IgODA3M0ExLCB2ZXJzaW9uIDEwMiBvbmx5ICovCiAKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAl1MTYgdmFsOwogCiAJLyogUmVhZCA4MDczIEhXIHJldmlzaW9uKi8KQEAgLTIxMTAsOSArMjM2NSw3IEBACiBzdGF0aWMgdTggYm54MnhfYmNtODA3M194YXVpX3dhKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCXUxNiB2YWwsIGNudCwgY250MSA7CiAKIAlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKQEAgLTIxNjgsMTYgKzI0MjEsMTcgQEAKIAl9CiAJRFAoTkVUSUZfTVNHX0xJTkssICJXYXJuaW5nOiBYQVVJIHdvcmstYXJvdW5kIHRpbWVvdXQgISEhXG4iKTsKIAlyZXR1cm4gLUVJTlZBTDsKLQogfQogCi1zdGF0aWMgdm9pZCBibngyeF9iY204MDczX2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCi0JCQkJCSAgdTggZXh0X3BoeV9hZGRyLCB1MzIgc2htZW1fYmFzZSkKK3N0YXRpYyB2b2lkIGJueDJ4X2JjbTgwNzNfYmNtODcyN19leHRlcm5hbF9yb21fYm9vdChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCQkJICB1OCBleHRfcGh5X2FkZHIsCisJCQkJCQkgIHUzMiBleHRfcGh5X3R5cGUsCisJCQkJCQkgIHUzMiBzaG1lbV9iYXNlKQogewogCS8qIEJvb3QgcG9ydCBmcm9tIGV4dGVybmFsIFJPTSAgKi8KIAkvKiBFREMgZ3JzdCAqLwogCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkgICAgICAgZXh0X3BoeV90eXBlLAogCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkgICAgICAgTURJT19QTUFfREVWQUQsCiAJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCkBAIC0yMTg1LDIxICsyNDM5LDIxIEBACiAKIAkvKiB1Y29kZSByZWJvb3QgYW5kIHJzdCAqLwogCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkgICAgICAgZXh0X3BoeV90eXBlLAogCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkgICAgICAgTURJT19QTUFfREVWQUQsCiAJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCiAJCSAgICAgICAweDAwOGMpOwogCiAJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCiAJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJICAgICAgIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxLCAweDAwMDEpOwogCiAJLyogUmVzZXQgaW50ZXJuYWwgbWljcm9wcm9jZXNzb3IgKi8KIAlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKIAkJICAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgIE1ESU9fUE1BX0RFVkFELAogCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLApAQCAtMjIwNyw3ICsyNDYxLDcgQEAKIAogCS8qIFJlbGVhc2Ugc3JzdCBiaXQgKi8KIAlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKIAkJICAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgIE1ESU9fUE1BX0RFVkFELAogCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLApAQCAtMjIxOCwyNCArMjQ3Miw0MSBAQAogCiAJLyogQ2xlYXIgc2VyX2Jvb3RfY3RsIGJpdCAqLwogCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkgICAgICAgZXh0X3BoeV90eXBlLAogCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkgICAgICAgTURJT19QTUFfREVWQUQsCiAJCSAgICAgICBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSwgMHgwMDAwKTsKIAogCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBvcnQsCi0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJCQlleHRfcGh5X3R5cGUsCiAJCQkJZXh0X3BoeV9hZGRyLAogCQkJCXNobWVtX2Jhc2UpOwogfQogCitzdGF0aWMgdm9pZCBibngyeF9iY204MDczX2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCisJCQkJCSAgdTggZXh0X3BoeV9hZGRyLAorCQkJCQkgIHUzMiBzaG1lbV9iYXNlKQoreworCWJueDJ4X2JjbTgwNzNfYmNtODcyN19leHRlcm5hbF9yb21fYm9vdChicCwgcG9ydCwgZXh0X3BoeV9hZGRyLAorCQkJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJCQkJIHNobWVtX2Jhc2UpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9iY204NzI3X2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCisJCQkJCSAgdTggZXh0X3BoeV9hZGRyLAorCQkJCQkgIHUzMiBzaG1lbV9iYXNlKQoreworCWJueDJ4X2JjbTgwNzNfYmNtODcyN19leHRlcm5hbF9yb21fYm9vdChicCwgcG9ydCwgZXh0X3BoeV9hZGRyLAorCQkJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJCQkJIHNobWVtX2Jhc2UpOworCit9CisKIHN0YXRpYyB2b2lkIGJueDJ4X2JjbTg3MjZfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAKIAkvKiBOZWVkIHRvIHdhaXQgMTAwbXMgYWZ0ZXIgcmVzZXQgKi8KQEAgLTIyNTgsOSArMjUyOSwxMCBAQAogCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLAogCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMX1JPTV9NSUNST19SRVNFVCk7CiAKKwkvKiBTZXQgUExMIHJlZ2lzdGVyIHZhbHVlIHRvIGJlIHNhbWUgbGlrZSBpbiBQMTMgdmVyICovCiAJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCiAJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTDIsCisJCSAgICAgICBNRElPX1BNQV9SRUdfUExMX0NUUkwsCiAJCSAgICAgICAweDczQTApOwogCiAJLyogQ2xlYXIgc29mdCByZXNldC4KQEAgLTIyODUsMTUgKzI1NTcsMTcgQEAKIAkJCQlwYXJhbXMtPnNobWVtX2Jhc2UpOwogfQogCi1zdGF0aWMgdm9pZCBibngyeF9iY204NzI2X3NldF90cmFuc21pdHRlcihzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAotCQkJCQl1OCBleHRfcGh5X2FkZHIsIHU4IHR4X2VuKQorc3RhdGljIHZvaWQgYm54Mnhfc2ZwX3NldF90cmFuc21pdHRlcihzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCSAgICB1MzIgZXh0X3BoeV90eXBlLCB1OCBleHRfcGh5X2FkZHIsCisJCQkJICAgIHU4IHR4X2VuKQogewogCXUxNiB2YWw7CisKIAlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgdHJhbnNtaXR0ZXIgdHhfZW49JXggZm9yIHBvcnQgJXhcbiIsCiAJCSB0eF9lbiwgcG9ydCk7CiAJLyogRGlzYWJsZS9FbmFibGUgdHJhbnNtaXR0ZXIgKCBUWCBsYXNlciBvZiB0aGUgU0ZQKyBtb2R1bGUuKSovCiAJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkgICAgICBleHRfcGh5X3R5cGUsCiAJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgTURJT19QTUFfREVWQUQsCiAJCSAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKQEAgLTIzMDUsMjMgKzI1NzksMjMgQEAKIAkJdmFsIHw9ICgxPDwxNSk7CiAKIAlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKIAkJICAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgIE1ESU9fUE1BX0RFVkFELAogCQkgICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAogCQkgICAgICAgdmFsKTsKIH0KIAotCi1zdGF0aWMgdTggYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTE2IGFkZHIsCi0JCQkJICAgICB1OCBieXRlX2NudCwgdTggKm9fYnVmKSB7CitzdGF0aWMgdTggYm54MnhfODcyNl9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCQkgIHUxNiBhZGRyLCB1OCBieXRlX2NudCwgdTggKm9fYnVmKQorewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXUxNiB2YWwsIGk7CisJdTE2IHZhbCA9IDA7CisJdTE2IGk7CiAJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCiAJaWYgKGJ5dGVfY250ID4gMTYpIHsKIAkJRFAoTkVUSUZfTVNHX0xJTkssICJSZWFkaW5nIGZyb20gZWVwcm9tIGlzIgogCQkJICAgICIgaXMgbGltaXRlZCB0byAweGZcbiIpOwpAQCAtMjMzMiw3ICsyNjA2LDcgQEAKIAkJICAgICAgIGV4dF9waHlfdHlwZSwKIAkJICAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQllURV9DTlQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0JZVEVfQ05ULAogCQkgICAgICAgKGJ5dGVfY250IHwgMHhhMDAwKSk7CiAKIAkvKiBTZXQgdGhlIHJlYWQgY29tbWFuZCBhZGRyZXNzICovCkBAIC0yMzQwLDcgKzI2MTQsNyBAQAogCQkgICAgICAgZXh0X3BoeV90eXBlLAogCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9NRU1fQUREUiwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfTUVNX0FERFIsCiAJCSAgICAgICBhZGRyKTsKIAogCS8qIEFjdGl2YXRlIHJlYWQgY29tbWFuZCAqLwpAQCAtMjM0OCw3ICsyNjIyLDcgQEAKIAkJICAgICAgIGV4dF9waHlfdHlwZSwKIAkJICAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwKIAkJICAgICAgIDB4MmMwZik7CiAKIAkvKiBXYWl0IHVwIHRvIDUwMHVzIGZvciBjb21tYW5kIGNvbXBsZXRlIHN0YXR1cyAqLwpAQCAtMjM1NywxOCArMjYzMSwxOCBAQAogCQkJICAgICAgZXh0X3BoeV90eXBlLAogCQkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMLCAmdmFsKTsKLQkJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQotCQkgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFKQorCQkJICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMLCAmdmFsKTsKKwkJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spID09CisJCSAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX1NUQVRVU19DT01QTEVURSkKIAkJCWJyZWFrOwogCQl1ZGVsYXkoNSk7CiAJfQogCi0JaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSAhPQotCQkgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFKSB7CisJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spICE9CisJCSAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX1NUQVRVU19DT01QTEVURSkgewogCQlEUChORVRJRl9NU0dfTElOSywKIAkJCSAiR290IGJhZCBzdGF0dXMgMHgleCB3aGVuIHJlYWRpbmcgZnJvbSBTRlArIEVFUFJPTVxuIiwKLQkJCSAodmFsICYgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykpOworCQkJICh2YWwgJiBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMzg3LDI5ICsyNjYxLDE0NSBAQAogCQkJICAgICAgZXh0X3BoeV90eXBlLAogCQkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMLCAmdmFsKTsKLQkJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQotCQkgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0lETEUpCisJCQkgICAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkwsICZ2YWwpOworCQlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykgPT0KKwkJICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfU1RBVFVTX0lETEUpCiAJCQlyZXR1cm4gMDs7CiAJCW1zbGVlcCgxKTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLQotc3RhdGljIHU4IGJueDJ4X2dldF9zZnBfbW9kdWxlX3R5cGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkJICB1OCAqbW9kdWxlX3R5cGUpCitzdGF0aWMgdTggYm54MnhfODcyN19yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCQkgIHUxNiBhZGRyLCB1OCBieXRlX2NudCwgdTggKm9fYnVmKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXU4IHZhbDsKLQkqbW9kdWxlX3R5cGUgPSBTRlBfTU9EVUxFX1RZUEVfVU5LTk9XTjsKKwl1MTYgdmFsLCBpOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCisJaWYgKGJ5dGVfY250ID4gMTYpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJSZWFkaW5nIGZyb20gZWVwcm9tIGlzIgorCQkJICAgICIgaXMgbGltaXRlZCB0byAweGZcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBOZWVkIHRvIHJlYWQgZnJvbSAxLjgwMDAgdG8gY2xlYXIgaXQgKi8KKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwKKwkJICAgICAgJnZhbCk7CisKKwkvKiBTZXQgdGhlIHJlYWQgY29tbWFuZCBieXRlIGNvdW50ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9CWVRFX0NOVCwKKwkJICAgICAgICgoYnl0ZV9jbnQgPCAyKSA/IDIgOiBieXRlX2NudCkpOworCisJLyogU2V0IHRoZSByZWFkIGNvbW1hbmQgYWRkcmVzcyAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfTUVNX0FERFIsCisJCSAgICAgICBhZGRyKTsKKwkvKiBTZXQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICAweDgwMDQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19UV09fV0lSRV9EQVRBX0JVRik7CisKKwkvKiBBY3RpdmF0ZSByZWFkIGNvbW1hbmQgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkwsCisJCSAgICAgICAweDgwMDIpOworCS8qIFdhaXQgYXBwcm9wcmlhdGUgdGltZSBmb3IgdHdvLXdpcmUgY29tbWFuZCB0byBmaW5pc2ggYmVmb3JlCisJcG9sbGluZyB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCisJbXNsZWVwKDEpOworCisJLyogV2FpdCB1cCB0byA1MDB1cyBmb3IgY29tbWFuZCBjb21wbGV0ZSBzdGF0dXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkwsICZ2YWwpOworCQlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykgPT0KKwkJICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFKQorCQkJYnJlYWs7CisJCXVkZWxheSg1KTsKKwl9CisKKwlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykgIT0KKwkJICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFKSB7CisJCURQKE5FVElGX01TR19MSU5LLAorCQkJICJHb3QgYmFkIHN0YXR1cyAweCV4IHdoZW4gcmVhZGluZyBmcm9tIFNGUCsgRUVQUk9NXG4iLAorCQkJICh2YWwgJiBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmVhZCB0aGUgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IGJ5dGVfY250OyBpKyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfODcyN19UV09fV0lSRV9EQVRBX0JVRiArIGksICZ2YWwpOworCQlvX2J1ZltpXSA9ICh1OCkodmFsICYgTURJT19QTUFfUkVHXzg3MjdfVFdPX1dJUkVfREFUQV9NQVNLKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkwsICZ2YWwpOworCQlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykgPT0KKwkJICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfU1RBVFVTX0lETEUpCisJCQlyZXR1cm4gMDs7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwordTggYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTE2IGFkZHIsCisJCQkJICAgICB1OCBieXRlX2NudCwgdTggKm9fYnVmKQoreworCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKworCWlmIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikKKwkJcmV0dXJuIGJueDJ4Xzg3MjZfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsIGFkZHIsCisJCQkJCQkgICAgICAgYnl0ZV9jbnQsIG9fYnVmKTsKKwllbHNlIGlmIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNykKKwkJcmV0dXJuIGJueDJ4Xzg3MjdfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsIGFkZHIsCisJCQkJCQkgICAgICAgYnl0ZV9jbnQsIG9fYnVmKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHU4IGJueDJ4X2dldF9lZGNfbW9kZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgIHUxNiAqZWRjX21vZGUpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggdmFsLCBjaGVja19saW1pdGluZ19tb2RlID0gMDsKKwkqZWRjX21vZGUgPSBFRENfTU9ERV9MSU1JVElORzsKIAogCS8qIEZpcnN0IGNoZWNrIGZvciBjb3BwZXIgY2FibGUgKi8KIAlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCiAJCQkJICAgICAgIFNGUF9FRVBST01fQ09OX1RZUEVfQUREUiwKIAkJCQkgICAgICAgMSwKIAkJCQkgICAgICAgJnZhbCkgIT0gMCkgewotCQlEUChORVRJRl9NU0dfTElOSywgIkZhaWxlZCB0byByZWFkIGZyb20gU0ZQKyBtb2R1bGUgRUVQUk9NIik7CisJCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIHJlYWQgZnJvbSBTRlArIG1vZHVsZSBFRVBST01cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI0MTcsNiArMjgwNyw3IEBACiAJY2FzZSBTRlBfRUVQUk9NX0NPTl9UWVBFX1ZBTF9DT1BQRVI6CiAJewogCQl1OCBjb3BwZXJfbW9kdWxlX3R5cGU7CisKIAkJLyogQ2hlY2sgaWYgaXRzIGFjdGl2ZSBjYWJsZSggaW5jbHVkZXMgU0ZQKyBtb2R1bGUpCiAJCW9mIHBhc3NpdmUgY2FibGUqLwogCQlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCkBAIC0yNDMzLDEzICsyODI0LDEzIEBACiAJCWlmIChjb3BwZXJfbW9kdWxlX3R5cGUgJgogCQkgICAgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0JJVE1BU0tfQ09QUEVSX0FDVElWRSkgewogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJBY3RpdmUgQ29wcGVyIGNhYmxlIGRldGVjdGVkXG4iKTsKLQkJCSptb2R1bGVfdHlwZSA9IFNGUF9NT0RVTEVfVFlQRV9BQ1RJVkVfQ09QUEVSX0NBQkxFOworCQkJY2hlY2tfbGltaXRpbmdfbW9kZSA9IDE7CiAJCX0gZWxzZSBpZiAoY29wcGVyX21vZHVsZV90eXBlICYKIAkJCVNGUF9FRVBST01fRkNfVFhfVEVDSF9CSVRNQVNLX0NPUFBFUl9QQVNTSVZFKSB7CiAJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJQYXNzaXZlIENvcHBlciIKIAkJCQkJICAgICIgY2FibGUgZGV0ZWN0ZWRcbiIpOwotCQkJCSptb2R1bGVfdHlwZSA9Ci0JCQkJICAgICAgU0ZQX01PRFVMRV9UWVBFX1BBU1NJVkVfQ09QUEVSX0NBQkxFOworCQkJCSplZGNfbW9kZSA9CisJCQkJICAgICAgRURDX01PREVfUEFTU0lWRV9EQUM7CiAJCX0gZWxzZSB7CiAJCQlEUChORVRJRl9NU0dfTElOSywgIlVua25vd24gY29wcGVyLWNhYmxlLSIKIAkJCQkgICAgICJ0eXBlIDB4JXggISEhXG4iLCBjb3BwZXJfbW9kdWxlX3R5cGUpOwpAQCAtMjQ0OSw5NyArMjg0MCw5NyBAQAogCX0KIAljYXNlIFNGUF9FRVBST01fQ09OX1RZUEVfVkFMX0xDOgogCQlEUChORVRJRl9NU0dfTElOSywgIk9wdGljIG1vZHVsZSBkZXRlY3RlZFxuIik7Ci0JCSptb2R1bGVfdHlwZSA9IFNGUF9NT0RVTEVfVFlQRV9MQzsKKwkJY2hlY2tfbGltaXRpbmdfbW9kZSA9IDE7CiAJCWJyZWFrOwotCiAJZGVmYXVsdDoKIAkJRFAoTkVUSUZfTVNHX0xJTkssICJVbmFibGUgdG8gZGV0ZXJtaW5lIG1vZHVsZSB0eXBlIDB4JXggISEhXG4iLAogCQkJIHZhbCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKworCWlmIChjaGVja19saW1pdGluZ19tb2RlKSB7CisJCXU4IG9wdGlvbnNbU0ZQX0VFUFJPTV9PUFRJT05TX1NJWkVdOworCQlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCisJCQkJCSAgICAgICBTRlBfRUVQUk9NX09QVElPTlNfQUREUiwKKwkJCQkJICAgICAgIFNGUF9FRVBST01fT1BUSU9OU19TSVpFLAorCQkJCQkgICAgICAgb3B0aW9ucykgIT0gMCkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJGYWlsZWQgdG8gcmVhZCBPcHRpb24iCisJCQkJIiBmaWVsZCBmcm9tIG1vZHVsZSBFRVBST01cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKChvcHRpb25zWzBdICYgU0ZQX0VFUFJPTV9PUFRJT05TX0xJTkVBUl9SWF9PVVRfTUFTSykpCisJCQkqZWRjX21vZGUgPSBFRENfTU9ERV9MSU5FQVI7CisJCWVsc2UKKwkJCSplZGNfbW9kZSA9IEVEQ19NT0RFX0xJTUlUSU5HOworCX0KKwlEUChORVRJRl9NU0dfTElOSywgIkVEQyBtb2RlIGlzIHNldCB0byAweCV4XG4iLCAqZWRjX21vZGUpOwogCXJldHVybiAwOwogfQogCi0KIC8qIFRoaXMgZnVuY3Rpb24gcmVhZCB0aGUgcmVsZXZhbnQgZmllbGQgZnJvbSB0aGUgbW9kdWxlICggU0ZQKyApLAogCWFuZCB2ZXJpZnkgaXQgaXMgY29tcGxpYW50IHdpdGggdGhpcyBib2FyZCAqLwotc3RhdGljIHU4IGJueDJ4X3ZlcmlmeV9zZnBfbW9kdWxlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCXU4IG1vZHVsZV90eXBlKQorc3RhdGljIHU4IGJueDJ4X3ZlcmlmeV9zZnBfbW9kdWxlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXU4ICpzdHJfcCwgKnRtcF9idWY7Ci0JdTE2IGk7CisJdTMyIHZhbDsKKwl1MzIgZndfcmVzcDsKKwljaGFyIHZlbmRvcl9uYW1lW1NGUF9FRVBST01fVkVORE9SX05BTUVfU0laRSsxXTsKKwljaGFyIHZlbmRvcl9wbltTRlBfRUVQUk9NX1BBUlRfTk9fU0laRSsxXTsKIAotI2RlZmluZSBDT01QTElBTkNFX1NUUl9DTlQgNgotCXU4ICpjb21wbGlhbmNlX3N0cltdID0geyJCcm9hZGNvbSIsICJKRFNVIiwgIk1vbGV4IEluYyIsICJQSUNPTElHSFQiLAotCQkiRklOSVNBUiBDT1JQLiAgICIsICJBbXBoZW5vbCJ9OwotCXU4IGJ1ZltTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX1NJWkVdOwotCS8qIFBhc3NpdmUgQ29wcGVyIGNhYmxlcyBhcmUgYWxsb3dlZCB0byBwYXJ0aWNpcGF0ZSwKLQlzaW5jZSB0aGUgbW9kdWxlIGlzIGhhcmR3aXJlZCB0byB0aGUgY29wcGVyIGNhYmxlICovCi0KLQlpZiAoIShwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKLQkgICAgIEZFQVRVUkVfQ09ORklHX01PRFVMRV9FTkZPUkNNRU5UX0VOQUJMRUQpKSB7CisJdmFsID0gUkVHX1JEKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKworCQkJIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sIGRldl9pbmZvLgorCQkJCSAgcG9ydF9mZWF0dXJlX2NvbmZpZ1twYXJhbXMtPnBvcnRdLmNvbmZpZykpOworCWlmICgodmFsICYgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX01BU0spID09CisJICAgIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9OT19FTkZPUkNFTUVOVCkgewogCQlEUChORVRJRl9NU0dfTElOSywgIk5PVCBlbmZvcmNpbmcgbW9kdWxlIHZlcmlmaWNhdGlvblxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCWlmIChtb2R1bGVfdHlwZSAhPSBTRlBfTU9EVUxFX1RZUEVfTEMpIHsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJObyBuZWVkIHRvIHZlcmlmeSBjb3BwZXIgY2FibGVcbiIpOworCS8qIEFzayB0aGUgRlcgdG8gdmFsaWRhdGUgdGhlIG1vZHVsZSAqLworCWlmICghKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCSAgICAgIEZFQVRVUkVfQ09ORklHX0JDX1NVUFBPUlRTX09QVF9NRExfVlJGWSkpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJGVyBkb2VzIG5vdCBzdXBwb3J0IE9QVCBNREwgIgorCQkJICAgICJ2ZXJpZmljYXRpb25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmd19yZXNwID0gYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX1ZSRllfT1BUX01ETCk7CisJaWYgKGZ3X3Jlc3AgPT0gRldfTVNHX0NPREVfVlJGWV9PUFRfTURMX1NVQ0NFU1MpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJBcHByb3ZlZCBtb2R1bGVcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBJbiBjYXNlIG9mIG5vbiBjb3BwZXIgY2FibGUgb3IgQWN0aXZlIGNvcHBlciBjYWJsZSwKLQkJdmVyaWZ5IHRoYXQgdGhlIFNGUCsgbW9kdWxlIGlzIGNvbXBsaWFudCB3aXRoIHRoaXMgYm9hcmQqLworCS8qIGZvcm1hdCB0aGUgd2FybmluZyBtZXNzYWdlICovCiAJaWYgKGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20ocGFyYW1zLAogCQkJCSAgICAgICBTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX0FERFIsCiAJCQkJICAgICAgIFNGUF9FRVBST01fVkVORE9SX05BTUVfU0laRSwKLQkJCQkgICAgICAgYnVmKSAhPSAwKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIHJlYWQgVmVuZG9yLU5hbWUgZnJvbSIKLQkJCSAgICAiIG1vZHVsZSBFRVBST01cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IENPTVBMSUFOQ0VfU1RSX0NOVDsgaSsrKSB7Ci0JCXN0cl9wID0gY29tcGxpYW5jZV9zdHJbaV07Ci0JCXRtcF9idWYgPSBidWY7Ci0JCXdoaWxlICgqc3RyX3ApIHsKLQkJCWlmICgodTgpKCp0bXBfYnVmKSAhPSAodTgpKCpzdHJfcCkpCi0JCQkJYnJlYWs7Ci0JCQlzdHJfcCsrOwotCQkJdG1wX2J1ZisrOwotCQl9CisJCQkJICAgICAgICh1OCAqKXZlbmRvcl9uYW1lKSkKKwkJdmVuZG9yX25hbWVbMF0gPSAnXDAnOworCWVsc2UKKwkJdmVuZG9yX25hbWVbU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9TSVpFXSA9ICdcMCc7CisJaWYgKGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20ocGFyYW1zLAorCQkJCSAgICAgICBTRlBfRUVQUk9NX1BBUlRfTk9fQUREUiwKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9QQVJUX05PX1NJWkUsCisJCQkJICAgICAgICh1OCAqKXZlbmRvcl9wbikpCisJCXZlbmRvcl9wblswXSA9ICdcMCc7CisJZWxzZQorCQl2ZW5kb3JfcG5bU0ZQX0VFUFJPTV9QQVJUX05PX1NJWkVdID0gJ1wwJzsKIAotCQlpZiAoISgqc3RyX3ApKSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgTW9kdWxlIHZlcmlmaWVkLCAiCi0JCQkJICAgICAiaW5kZXg9JXhcbiIsIGkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJJbmNvbXBsaWFudCBTRlArIG1vZHVsZS4gRGlzYWJsZSBtb2R1bGUgISEhXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAgIldhcm5pbmc6ICIKKwkJCSAiVW5xdWFsaWZpZWQgU0ZQKyBtb2R1bGUgIgorCQkJICJkZXRlY3RlZCBvbiAlcywgUG9ydCAlZCBmcm9tICVzIHBhcnQgbnVtYmVyICVzXG4iCisJCQksIGJwLT5kZXYtPm5hbWUsIHBhcmFtcy0+cG9ydCwKKwkJCXZlbmRvcl9uYW1lLCB2ZW5kb3JfcG4pOwogCXJldHVybiAtRUlOVkFMOwogfQogCi0KIHN0YXRpYyB1OCBibngyeF9iY204NzI2X3NldF9saW1pdGluZ19tb2RlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCQl1OCBtb2R1bGVfdHlwZSkKKwkJCQkJdTE2IGVkY19tb2RlKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7Ci0JdTggb3B0aW9uc1tTRlBfRUVQUk9NX09QVElPTlNfU0laRV07Ci0JdTggbGltaXRpbmdfbW9kZTsKLQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAJdTE2IGN1cl9saW1pdGluZ19tb2RlOwotCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKLQkJCQkgICAgICAgU0ZQX0VFUFJPTV9PUFRJT05TX0FERFIsCi0JCQkJICAgICAgIFNGUF9FRVBST01fT1BUSU9OU19TSVpFLAotCQkJCSAgICAgICBvcHRpb25zKSAhPSAwKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIHJlYWQgT3B0aW9uIGZpZWxkIGZyb20iCi0JCQkgICAgIiBtb2R1bGUgRUVQUk9NXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWxpbWl0aW5nX21vZGUgPSAhKG9wdGlvbnNbMF0gJgotCQkJICBTRlBfRUVQUk9NX09QVElPTlNfTElORUFSX1JYX09VVF9NQVNLKTsKIAogCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKIAkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKQEAgLTI1NTAsMjYgKzI5NDEsMjMgQEAKIAlEUChORVRJRl9NU0dfTElOSywgIkN1cnJlbnQgTGltaXRpbmcgbW9kZSBpcyAweCV4XG4iLAogCQkgY3VyX2xpbWl0aW5nX21vZGUpOwogCi0JaWYgKGxpbWl0aW5nX21vZGUgJiYKLQkgICAgKG1vZHVsZV90eXBlICE9IFNGUF9NT0RVTEVfVFlQRV9QQVNTSVZFX0NPUFBFUl9DQUJMRSkpIHsKKwlpZiAoZWRjX21vZGUgPT0gRURDX01PREVfTElNSVRJTkcpIHsKIAkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkgIk1vZHVsZSBvcHRpb25zID0gMHgleC5TZXR0aW5nIExJTUlUSU5HIE1PREVcbiIsCi0JCQkgb3B0aW9uc1swXSk7CisJCQkgIlNldHRpbmcgTElNSVRJTkcgTU9ERVxuIik7CiAJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCiAJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKIAkJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCQkgICAgICAgTURJT19QTUFfREVWQUQsCiAJCQkgICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLAotCQkJICAgICAgIFNGUF9MSU1JVElOR19NT0RFX1ZBTFVFKTsKKwkJCSAgICAgICBFRENfTU9ERV9MSU1JVElORyk7CiAJfSBlbHNlIHsgLyogTFJNIG1vZGUgKCBkZWZhdWx0ICkqLwogCi0JCURQKE5FVElGX01TR19MSU5LLCAiTW9kdWxlIG9wdGlvbnMgPSAweCV4LlNldHRpbmcgTFJNIE1PREVcbiIsCi0JCQkgb3B0aW9uc1swXSk7CisJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyBMUk0gTU9ERVxuIik7CiAKIAkJLyogQ2hhbmdpbmcgdG8gTFJNIG1vZGUgdGFrZXMgcXVpdGUgZmV3IHNlY29uZHMuCiAJCVNvIGRvIGl0IG9ubHkgaWYgY3VycmVudCBtb2RlIGlzIGxpbWl0aW5nCiAJCSggZGVmYXVsdCBpcyBMUk0gKSovCi0JCWlmIChjdXJfbGltaXRpbmdfbW9kZSAhPSBTRlBfTElNSVRJTkdfTU9ERV9WQUxVRSkKKwkJaWYgKGN1cl9saW1pdGluZ19tb2RlICE9IEVEQ19NT0RFX0xJTUlUSU5HKQogCQkJcmV0dXJuIDA7CiAKIAkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKQEAgLTI2MDAsNiArMjk4OCw1NCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTggYm54MnhfYmNtODcyN19zZXRfbGltaXRpbmdfbW9kZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkJdTE2IGVkY19tb2RlKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTE2IHBoeV9pZGVudGlmaWVyOworCXUxNiByb21fdmVyMl92YWw7CisJdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCisJCSAgICAgICAmcGh5X2lkZW50aWZpZXIpOworCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKKwkJICAgICAgIChwaHlfaWRlbnRpZmllciAmIH4oMTw8OSkpKTsKKworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLAorCQkgICAgICAmcm9tX3ZlcjJfdmFsKTsKKwkvKiBLZWVwIHRoZSBNU0IgOC1iaXRzLCBhbmQgc2V0IHRoZSBMU0IgOC1iaXRzIHdpdGggdGhlIGVkY19tb2RlICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwKKwkJICAgICAgIChyb21fdmVyMl92YWwgJiAweGZmMDApIHwgKGVkY19tb2RlICYgMHgwMGZmKSk7CisKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkgICAgICAgKHBoeV9pZGVudGlmaWVyIHwgKDE8PDkpKSk7CisKKwlyZXR1cm4gMDsKK30KKworCiBzdGF0aWMgdTggYm54Mnhfd2FpdF9mb3Jfc2ZwX21vZHVsZV9pbml0aWFsaXplZChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKIHsKIAl1OCB2YWw7CkBAIC0yNjE5LDYxICszMDU1LDExMiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgdm9pZCBibngyeF84NzI3X3Bvd2VyX21vZHVsZShzdHJ1Y3QgYm54MnggKmJwLAorCQkJCSAgc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICB1OCBleHRfcGh5X2FkZHIsIHU4IGlzX3Bvd2VyX3VwKSB7CisJLyogTWFrZSBzdXJlIEdQSU9zIGFyZSBub3QgdXNpbmcgZm9yIExFRCBtb2RlICovCisJdTE2IHZhbDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCS8qCisJICogSW4gdGhlIEdQSU8gcmVnaXN0ZXIsIGJpdCA0IGlzIHVzZSB0byBkZXRlbWluZSBpZiB0aGUgR1BJT3MgYXJlCisJICogb3BlcmF0aW5nIGFzIElOUFVUIG9yIGFzIE9VVFBVVC4gQml0IDEgaXMgZm9yIGlucHV0LCBhbmQgMCBmb3IKKwkgKiBvdXRwdXQKKwkgKiBCaXRzIDAtMSBkZXRlcm1pbmUgdGhlIGdwaW9zIHZhbHVlIGZvciBPVVRQVVQgaW4gY2FzZSBiaXQgNCB2YWwgaXMgMAorCSAqIEJpdHMgOC05IGRldGVybWluZSB0aGUgZ3Bpb3MgdmFsdWUgZm9yIElOUFVUIGluIGNhc2UgYml0IDQgdmFsIGlzIDEKKwkgKiB3aGVyZSB0aGUgMXN0IGJpdCBpcyB0aGUgb3Zlci1jdXJyZW50KG9ubHkgaW5wdXQpLCBhbmQgMm5kIGJpdCBpcworCSAqIGZvciBwb3dlciggb25seSBvdXRwdXQgKQorCSovCisKKwkvKgorCSAqIEluIGNhc2Ugb2YgTk9DIGZlYXR1cmUgaXMgZGlzYWJsZWQgYW5kIHBvd2VyIGlzIHVwLCBzZXQgR1BJTyBjb250cm9sCisJICogIGFzIGlucHV0IHRvIGVuYWJsZSBsaXN0ZW5pbmcgb2Ygb3Zlci1jdXJyZW50IGluZGljYXRpb24KKwkgKi8KKworCWlmICghKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCSAgICAgIEZFQVRVUkVfQ09ORklHX0JDTTg3MjdfTk9DKSAmJiBpc19wb3dlcl91cCkKKwkJdmFsID0gKDE8PDQpOworCWVsc2UKKwkJLyoKKwkJICogU2V0IEdQSU8gY29udHJvbCB0byBPVVRQVVQsIGFuZCBzZXQgdGhlIHBvd2VyIGJpdAorCQkgKiB0byBhY2NvcmRpbmcgdG8gdGhlIGlzX3Bvd2VyX3VwCisJCSAqLworCQl2YWwgPSAoKCEoaXNfcG93ZXJfdXApKSA8PCAxKTsKKworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19HUElPX0NUUkwsCisJCSAgICAgICB2YWwpOworfQorCiBzdGF0aWMgdTggYm54Mnhfc2ZwX21vZHVsZV9kZXRlY3Rpb24oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggbW9kdWxlX3R5cGU7Ci0JdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKLQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1MTYgZWRjX21vZGU7CisJdTggcmMgPSAwOworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQotCWlmIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgewotCQlEUChORVRJRl9NU0dfTElOSywgIk1vZHVsZSBkZXRlY3Rpb24gaXMgbm90IHJlcXVpcmVkICIKLQkJCSAgICAiZm9yIHRoaXMgcGh5XG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQorCXUzMiB2YWwgPSBSRUdfUkQoYnAsIHBhcmFtcy0+c2htZW1fYmFzZSArCisJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sIGRldl9pbmZvLgorCQkJCSAgICAgcG9ydF9mZWF0dXJlX2NvbmZpZ1twYXJhbXMtPnBvcnRdLmNvbmZpZykpOwogCiAJRFAoTkVUSUZfTVNHX0xJTkssICJTRlArIG1vZHVsZSBwbHVnZ2VkIGluL291dCBkZXRlY3RlZCBvbiBwb3J0ICVkXG4iLAogCQkgcGFyYW1zLT5wb3J0KTsKIAotCWlmIChibngyeF9nZXRfc2ZwX21vZHVsZV90eXBlKHBhcmFtcywKLQkJCQkgICAgJm1vZHVsZV90eXBlKSAhPSAwKSB7CisJaWYgKGJueDJ4X2dldF9lZGNfbW9kZShwYXJhbXMsICZlZGNfbW9kZSkgIT0gMCkgewogCQlEUChORVRJRl9NU0dfTElOSywgIkZhaWxlZCB0byBnZXQgdmFsaWQgbW9kdWxlIHR5cGVcbiIpOwotCQlpZiAoIShwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKLQkJICAgICAgRkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRCkpIHsKLQkJCS8qIEluIGNhc2UgbW9kdWxlIGRldGVjdGlvbiBpcyBkaXNhYmxlZCwgaXQgdHJ5cyB0bwotCQkJbGluayB1cC4gVGhlIGlzc3VlIHRoYXQgY2FuIGhhcHBlbiBoZXJlIGlzIExSTSAvCi0JCQlMSU1JVElORyBtb2RlIHdoaWNoIHNldCBhY2NvcmRpbmcgdG8gdGhlIG1vZHVsZS10eXBlKi8KLQkJCURQKE5FVElGX01TR19MSU5LLCAiVW5hYmxlIHRvIHJlYWQgbW9kdWxlLXR5cGUuIgotCQkJCSAgICAiUHJvYmFibHkgZHVlIHRvIEJpdCBTdHJldGNoaW5nLiIKLQkJCQkgICAgIiBQcm9jZWVkaW5nLi4uXG4iKTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfSBlbHNlIGlmIChibngyeF92ZXJpZnlfc2ZwX21vZHVsZShwYXJhbXMsIG1vZHVsZV90eXBlKSAhPQorCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKGJueDJ4X3ZlcmlmeV9zZnBfbW9kdWxlKHBhcmFtcykgIT0KIAkJICAgMCkgewogCQkvKiBjaGVjayBTRlArIG1vZHVsZSBjb21wYXRpYmlsaXR5ICovCiAJCURQKE5FVElGX01TR19MSU5LLCAiTW9kdWxlIHZlcmlmaWNhdGlvbiBmYWlsZWQhIVxuIik7CisJCXJjID0gLUVJTlZBTDsKIAkJLyogVHVybiBvbiBmYXVsdCBtb2R1bGUtZGV0ZWN0ZWQgbGVkICovCiAJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCiAJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsCiAJCQkJICBwYXJhbXMtPnBvcnQpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNykgJiYKKwkJICAgICgodmFsICYgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX01BU0spID09CisJCSAgICAgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX1BPV0VSX0RPV04pKSB7CisJCQkvKiBTaHV0ZG93biBTRlArIG1vZHVsZSAqLworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTaHV0ZG93biBTRlArIG1vZHVsZSEhXG4iKTsKKwkJCWJueDJ4Xzg3MjdfcG93ZXJfbW9kdWxlKGJwLCBwYXJhbXMsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwgMCk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9IGVsc2UgeworCQkvKiBUdXJuIG9mZiBmYXVsdCBtb2R1bGUtZGV0ZWN0ZWQgbGVkICovCisJCURQKE5FVElGX01TR19MSU5LLCAiVHVybiBvZmYgZmF1bHQgbW9kdWxlLWRldGVjdGVkIGxlZFxuIik7CisJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCisJCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19MT1csCisJCQkJCSAgcGFyYW1zLT5wb3J0KTsKIAl9CiAKLQkvKiBUdXJuIG9mZiBmYXVsdCBtb2R1bGUtZGV0ZWN0ZWQgbGVkICovCi0JYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKLQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19MT1csCi0JCQkgIHBhcmFtcy0+cG9ydCk7CisJLyogcG93ZXIgdXAgdGhlIFNGUCBtb2R1bGUgKi8KKwlpZiAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcpCisJCWJueDJ4Xzg3MjdfcG93ZXJfbW9kdWxlKGJwLCBwYXJhbXMsIGV4dF9waHlfYWRkciwgMSk7CiAKLQkvKiBDaGVjayBhbmQgc2V0IGxpbWl0aW5nIG1vZGUgLyBMUk0gbW9kZSAqLwotCWJueDJ4X2JjbTg3MjZfc2V0X2xpbWl0aW5nX21vZGUocGFyYW1zLCBtb2R1bGVfdHlwZSk7CisJLyogQ2hlY2sgYW5kIHNldCBsaW1pdGluZyBtb2RlIC8gTFJNIG1vZGUgb24gODcyNi4KKwlPbiA4NzI3IGl0IGlzIGRvbmUgYXV0b21hdGljYWxseSAqLworCWlmIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikKKwkJYm54MnhfYmNtODcyNl9zZXRfbGltaXRpbmdfbW9kZShwYXJhbXMsIGVkY19tb2RlKTsKKwllbHNlCisJCWJueDJ4X2JjbTg3Mjdfc2V0X2xpbWl0aW5nX21vZGUocGFyYW1zLCBlZGNfbW9kZSk7CisJLyoKKwkgKiBFbmFibGUgdHJhbnNtaXQgZm9yIHRoaXMgbW9kdWxlIGlmIHRoZSBtb2R1bGUgaXMgYXBwcm92ZWQsIG9yCisJICogaWYgdW5hcHByb3ZlZCBtb2R1bGVzIHNob3VsZCBhbHNvIGVuYWJsZSB0aGUgVHggbGFzZXIKKwkgKi8KKwlpZiAocmMgPT0gMCB8fAorCSAgICAodmFsICYgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX01BU0spICE9CisJICAgIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9ESVNBQkxFX1RYX0xBU0VSKQorCQlibngyeF9zZnBfc2V0X3RyYW5zbWl0dGVyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCWV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLCAxKTsKKwllbHNlCisJCWJueDJ4X3NmcF9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsIDApOwogCi0JLyogRW5hYmxlIHRyYW5zbWl0IGZvciB0aGlzIG1vZHVsZSAqLwotCWJueDJ4X2JjbTg3MjZfc2V0X3RyYW5zbWl0dGVyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgIGV4dF9waHlfYWRkciwgMSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiB2b2lkIGJueDJ4X2hhbmRsZV9tb2R1bGVfZGV0ZWN0X2ludChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKQEAgLTI2ODEsNiArMzE2OCw3IEBACiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTMyIGdwaW9fdmFsOwogCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisKIAkvKiBTZXQgdmFsaWQgbW9kdWxlIGxlZCBvZmYgKi8KIAlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18wLAogCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsCkBAIC0yNjk2LDIyICszMTg0LDMwIEBACiAJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX0NMUiwKIAkJCQkgICAgICBwb3J0KTsKIAotCQlpZiAoYm54Mnhfd2FpdF9mb3Jfc2ZwX21vZHVsZV9pbml0aWFsaXplZChwYXJhbXMpCi0JCSAgICA9PSAwKQorCQlpZiAoYm54Mnhfd2FpdF9mb3Jfc2ZwX21vZHVsZV9pbml0aWFsaXplZChwYXJhbXMpID09CisJCSAgICAwKQogCQkJYm54Mnhfc2ZwX21vZHVsZV9kZXRlY3Rpb24ocGFyYW1zKTsKIAkJZWxzZQogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTRlArIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWRcbiIpOwogCX0gZWxzZSB7Ci0JCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCQl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKworCQl1MzIgZXh0X3BoeV90eXBlID0KKwkJCVhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCQl1MzIgdmFsID0gUkVHX1JEKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKworCQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwgZGV2X2luZm8uCisJCQkJCSAgICAgIHBvcnRfZmVhdHVyZV9jb25maWdbcGFyYW1zLT5wb3J0XS4KKwkJCQkJICAgICAgY29uZmlnKSk7CisKIAkJYm54Mnhfc2V0X2dwaW9faW50KGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzMsCiAJCQkJICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfT1VUUFVUX1NFVCwKIAkJCQkgICAgICBwb3J0KTsKIAkJLyogTW9kdWxlIHdhcyBwbHVnZ2VkIG91dC4gKi8KIAkJLyogRGlzYWJsZSB0cmFuc21pdCBmb3IgdGhpcyBtb2R1bGUgKi8KLQkJYm54MnhfYmNtODcyNl9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJICAgIGV4dF9waHlfYWRkciwgMCk7CisJCWlmICgodmFsICYgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX01BU0spID09CisJCSAgICBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfRElTQUJMRV9UWF9MQVNFUikKKwkJCWJueDJ4X3NmcF9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCWV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLCAwKTsKIAl9CiB9CiAKQEAgLTI3MTksOSArMzIxNSw3IEBACiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAogCS8qIEZvcmNlIEtSIG9yIEtYICovCkBAIC0yNzQyLDE0ICszMjM2LDEzIEBACiAJCSAgICAgICBNRElPX0FOX1JFR19DVFJMLAogCQkgICAgICAgMHgwMDAwKTsKIH0KKwogc3RhdGljIHZvaWQgYm54MnhfYmNtODA3M19zZXRfeGF1aV9sb3dfcG93ZXJfbW9kZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwogCXUxNiB2YWw7Ci0JdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKLQkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCiAJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCkBAIC0yODExLDEyICszMzA0LDkgQEAKIHN0YXRpYyB2b2lkIGJueDJ4XzgwNzNfc2V0X3BhdXNlX2NsMzcoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCiAJCQkJICBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQogewotCiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTE2IGNsMzdfdmFsOwotCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCiAJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCkBAIC0yODU5LDkgKzMzNDksNyBAQAogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXUxNiB2YWw7Ci0JdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKLQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAKIAkvKiByZWFkIG1vZGlmeSB3cml0ZSBwYXVzZSBhZHZlcnRpemluZyAqLwpAQCAtMjkxOCwxMCArMzQwNiwxMzYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW50ZXJuYWxfcGh5KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCXN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCisKK3N0YXRpYyB2b2lkIGJueDJ4Xzg0ODFfc2V0X2xlZDQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgICB1MzIgZXh0X3BoeV90eXBlLCB1OCBleHRfcGh5X2FkZHIpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisKKwkvKiBQSFlDX0NUTF9MRURfQ1RMICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MSU5LX1NJR05BTCwgMHhhNDgyKTsKKworCS8qIFVubWFzayBMRUQ0IGZvciAxMEcgbGluayAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHXzg0ODFfU0lHTkFMX01BU0ssICgxPDw2KSk7CisJLyogJ0ludGVycnVwdCBNYXNrJyAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCSAgICAgICAweEZGRkIsIDB4RkZGRCk7Cit9CitzdGF0aWMgdm9pZCBibngyeF84NDgxX3NldF9sZWdhY3lfbGVkX21vZGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJCSB1MzIgZXh0X3BoeV90eXBlLCB1OCBleHRfcGh5X2FkZHIpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisKKwkvKiBMRUQxICgxMEcgTGluayk6IERpc2FibGUgTEVEMSB3aGVuIDEwLzEwMC8xMDAwIGxpbmsgKi8KKwkvKiBMRUQyICgxRy8xMDAvMTAgTGluayk6IEVuYWJsZSBMRUQyIHdoZW4gMTAvMTAwLzEwMDAgbGluaykgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkgICAgICAgTURJT19BTl9SRUdfODQ4MV9MRUdBQ1lfU0hBRE9XLAorCQkgICAgICAgKDE8PDE1KSB8ICgweGQgPDwgMTApIHwgKDB4Yzw8NCkgfCAweGUpOworfQorCitzdGF0aWMgdm9pZCBibngyeF84NDgxX3NldF8xMEdfbGVkX21vZGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICAgICAgdTMyIGV4dF9waHlfdHlwZSwgdTggZXh0X3BoeV9hZGRyKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiB2YWwxOworCisJLyogTEVEMSAoMTBHIExpbmspICovCisJLyogRW5hYmxlIGNvbnRpbnVzZSBiYXNlZCBvbiBzb3VyY2UgNygxMEctbGluaykgKi8KKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHXzg0ODFfTElOS19TSUdOQUwsCisJCSAgICAgICAmdmFsMSk7CisJLyogU2V0IGJpdCAyIHRvIDAsIGFuZCBiaXRzIFsxOjBdIHRvIDEwICovCisJdmFsMSAmPSB+KCgxPDwwKSB8ICgxPDwyKSk7IC8qIENsZWFyIGJpdHMgMCwyKi8KKwl2YWwxIHw9ICgxPDwxKTsgLyogU2V0IGJpdCAxICovCisKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NDgxX0xJTktfU0lHTkFMLAorCQkgICAgICAgdmFsMSk7CisKKwkvKiBVbm1hc2sgTEVEMSBmb3IgMTBHIGxpbmsgKi8KKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MRUQxX01BU0ssCisJCSAgICAgICZ2YWwxKTsKKwkvKiBTZXQgYml0IDIgdG8gMCwgYW5kIGJpdHMgWzE6MF0gdG8gMTAgKi8KKwl2YWwxIHw9ICgxPDw3KTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NDgxX0xFRDFfTUFTSywKKwkJICAgICAgIHZhbDEpOworCisJLyogTEVEMiAoMUcvMTAwLzEwRyBMaW5rKSAqLworCS8qIE1hc2sgTEVEMiBmb3IgMTBHIGxpbmsgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NDgxX0xFRDJfTUFTSywKKwkJICAgICAgIDApOworCisJLyogTEVEMyAoMTBHLzFHLzEwMC8xMEcgQWN0aXZpdHkpICovCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHXzg0ODFfTElOS19TSUdOQUwsCisJCSAgICAgICZ2YWwxKTsKKwkvKiBFbmFibGUgYmxpbmsgYmFzZWQgb24gc291cmNlIDQoQWN0aXZpdHkpICovCisJdmFsMSAmPSB+KCgxPDw3KSB8ICgxPDw4KSk7IC8qIENsZWFyIGJpdHMgNyw4ICovCisJdmFsMSB8PSAoMTw8Nik7IC8qIFNldCBvbmx5IGJpdCA2ICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MSU5LX1NJR05BTCwKKwkJICAgICAgIHZhbDEpOworCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHXzg0ODFfTEVEM19NQVNLLAorCQkgICAgICAmdmFsMSk7CisJdmFsMSB8PSAoMTw8NCk7IC8qIFVubWFzayBMRUQzIGZvciAxMEcgbGluayAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHXzg0ODFfTEVEM19NQVNLLAorCQkgICAgICAgdmFsMSk7Cit9CisKKworc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbF9waHkoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkJCSAgdTggZW5hYmxlX2NsNzMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisKIAlpZiAoISh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfU0dNSUlfRkxBRykpIHsKIAkJaWYgKChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQogCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKQEAgLTI5MzQsNyArMzU0OCw3IEBACiAJCQlEUChORVRJRl9NU0dfTElOSywgIm5vdCBTR01JSSwgbm8gQU5cbiIpOwogCiAJCQkvKiBkaXNhYmxlIGF1dG9uZWcgKi8KLQkJCWJueDJ4X3NldF9hdXRvbmVnKHBhcmFtcywgdmFycyk7CisJCQlibngyeF9zZXRfYXV0b25lZyhwYXJhbXMsIHZhcnMsIDApOwogCiAJCQkvKiBwcm9ncmFtIHNwZWVkIGFuZCBkdXBsZXggKi8KIAkJCWJueDJ4X3Byb2dyYW1fc2VyZGVzKHBhcmFtcywgdmFycyk7CkBAIC0yOTUwLDEwICszNTY0LDEwIEBACiAJCQkJCQkgICAgICAgdmFycy0+aWVlZV9mYyk7CiAKIAkJCS8qIGVuYWJsZSBhdXRvbmVnICovCi0JCQlibngyeF9zZXRfYXV0b25lZyhwYXJhbXMsIHZhcnMpOworCQkJYm54Mnhfc2V0X2F1dG9uZWcocGFyYW1zLCB2YXJzLCBlbmFibGVfY2w3Myk7CiAKIAkJCS8qIGVuYWJsZSBhbmQgcmVzdGFydCBBTiAqLwotCQkJYm54MnhfcmVzdGFydF9hdXRvbmVnKHBhcmFtcyk7CisJCQlibngyeF9yZXN0YXJ0X2F1dG9uZWcocGFyYW1zLCBlbmFibGVfY2w3Myk7CiAJCX0KIAogCX0gZWxzZSB7IC8qIFNHTUlJIG1vZGUgKi8KQEAgLTI5NzIsMTAgKzM1ODYsOSBAQAogCXUxNiBjdHJsID0gMDsKIAl1MTYgdmFsID0gMDsKIAl1OCByYyA9IDA7CisKIAlpZiAodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgewotCQlleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCQlleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAogCQlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAkJLyogTWFrZSBzdXJlIHRoYXQgdGhlIHNvZnQgcmVzZXQgaXMgb2ZmIChleHBlY3QgZm9yIHRoZSA4MDcyOgpAQCAtMzE2MCw2ICszNzczLDkgQEAKIAkJCWRyaXZlciBpcyBsb2FkZWQsIGl0IHJlc2V0IGFsbCByZWdpc3RlcnMsIGluY2x1ZGluZyB0aGUKIAkJCXRyYW5zbWl0dGVyICovCiAJCQlibngyeF9zZnBfbW9kdWxlX2RldGVjdGlvbihwYXJhbXMpOworCisJCQkvKiBTZXQgRmxvdyBjb250cm9sICovCisJCQlibngyeF9leHRfcGh5X3NldF9wYXVzZShwYXJhbXMsIHZhcnMpOwogCQkJaWYgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwMCkgewogCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyAxRyBmb3JjZVxuIik7CiAJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCkBAIC0zMjY3LDE0ICszODgzLDEyIEBACiAJCQlibngyeF84MDczX3NldF9wYXVzZV9jbDM3KHBhcmFtcywgdmFycyk7CiAKIAkJCWlmIChleHRfcGh5X3R5cGUgPT0KLQkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyKXsKKwkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyKQogCQkJCWJueDJ4X2JjbTgwNzJfZXh0ZXJuYWxfcm9tX2Jvb3QocGFyYW1zKTsKLQkJCX0gZWxzZSB7Ci0KKwkJCWVsc2UKIAkJCQkvKiBJbiBjYXNlIG9mIDgwNzMgd2l0aCBsb25nIHhhdWkgbGluZXMsCiAJCQkJZG9uJ3Qgc2V0IHRoZSA4MDczIHhhdWkgbG93IHBvd2VyKi8KIAkJCQlibngyeF9iY204MDczX3NldF94YXVpX2xvd19wb3dlcl9tb2RlKHBhcmFtcyk7Ci0JCQl9CiAKIAkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAogCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKQEAgLTMzMzksMTAgKzM5NTMsOCBAQAogCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCiAJCQkJICAgICAgIE1ESU9fQU5fUkVHX0FEViwgdmFsKTsKLQogCQkJaWYgKGV4dF9waHlfdHlwZSA9PQogCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMpIHsKLQogCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAogCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCiAJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKQEAgLTM0NTAsNiArNDA2MiwxODcgQEAKIAkJCSAgICgodmFsICYgKDE8PDcpKSA+IDApKTsKIAkJCWJyZWFrOwogCQl9CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgorCQl7CisJCQl1MTYgdG1wMTsKKwkJCXUxNiByeF9hbGFybV9jdHJsX3ZhbDsKKwkJCXUxNiBsYXNpX2N0cmxfdmFsOworCisJCQkvKiBFbmFibGUgUE1EIGxpbmssIE1PRF9BQlNfRkxULCBhbmQgMUcgbGluayBhbGFybSAqLworCisJCQl1MTYgbW9kX2FiczsKKwkJCXJ4X2FsYXJtX2N0cmxfdmFsID0gKDE8PDIpIHwgKDE8PDUpIDsKKwkJCWxhc2lfY3RybF92YWwgPSAweDAwMDQ7CisKKwkJCURQKE5FVElGX01TR19MSU5LLCAiSW5pdGlhbGl6aW5nIEJDTTg3MjdcbiIpOworCQkJLyogZW5hYmxlIExBU0kgKi8KKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk1fQ1RSTCwKKwkJCQkgICAgICAgcnhfYWxhcm1fY3RybF92YWwpOworCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwKKwkJCQkgICAgICAgbGFzaV9jdHJsX3ZhbCk7CisKKwkJCS8qIEluaXRpYWxseSBjb25maWd1cmUgIE1PRF9BQlMgdG8gaW50ZXJydXB0IHdoZW4KKwkJCW1vZHVsZSBpcyBwcmVzZW5jZSggYml0IDgpICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwgJm1vZF9hYnMpOworCQkJLyogU2V0IEVEQyBvZmYgYnkgc2V0dGluZyBPUFRYTE9TIHNpZ25hbCBpbnB1dCB0byBsb3cKKwkJCShiaXQgOSkuCisJCQlXaGVuIHRoZSBFREMgaXMgb2ZmIGl0IGxvY2tzIG9udG8gYSByZWZlcmVuY2UgY2xvY2sgYW5kCisJCQlhdm9pZHMgYmVjb21pbmcgJ2xvc3QnLiovCisJCQltb2RfYWJzICY9IH4oKDE8PDgpIHwgKDE8PDkpKTsKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsIG1vZF9hYnMpOworCisJCQkvKiBNYWtlIE1PRF9BQlMgZ2l2ZSBpbnRlcnJ1cHQgb24gY2hhbmdlICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR184NzI3X1BDU19PUFRfQ1RSTCwKKwkJCQkgICAgICAmdmFsKTsKKwkJCXZhbCB8PSAoMTw8MTIpOworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X1BDU19PUFRfQ1RSTCwKKwkJCQkgICAgICAgdmFsKTsKKworCQkJLyogU2V0IDg3MjcgR1BJT3MgdG8gaW5wdXQgdG8gYWxsb3cgcmVhZGluZyBmcm9tIHRoZQorCQkJODcyNyBHUElPMCBzdGF0dXMgd2hpY2ggcmVmbGVjdCBTRlArIG1vZHVsZQorCQkJb3Zlci1jdXJyZW50ICovCisKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19QQ1NfT1BUX0NUUkwsCisJCQkJICAgICAgICZ2YWwpOworCQkJdmFsICY9IDB4ZmY4ZjsgLyogUmVzZXQgYml0cyA0LTYgKi8KKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjdfUENTX09QVF9DVFJMLAorCQkJCSAgICAgICB2YWwpOworCisJCQlibngyeF84NzI3X3Bvd2VyX21vZHVsZShicCwgcGFyYW1zLCBleHRfcGh5X2FkZHIsIDEpOworCQkJYm54MnhfYmNtODA3M19zZXRfeGF1aV9sb3dfcG93ZXJfbW9kZShwYXJhbXMpOworCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19NODA1MV9NU0dPVVRfUkVHLAorCQkJCSAgICAgICZ0bXAxKTsKKworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk0sICZ0bXAxKTsKKworCQkJLyogU2V0IG9wdGlvbiAxRyBzcGVlZCAqLworCQkJaWYgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMTAwMCkgeworCisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIDFHIGZvcmNlXG4iKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLCAweDQwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR18xMEdfQ1RSTDIsIDB4RCk7CisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfMTBHX0NUUkwyLCAmdG1wMSk7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICIxLjcgPSAweCV4IFxuIiwgdG1wMSk7CisKKwkJCX0gZWxzZSBpZiAoKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0KKwkJCQkgICAgU1BFRURfQVVUT19ORUcpICYmCisJCQkJICAgKChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKKwkJCQkgICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMUcpKSkgeworCisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIDFHIGNsYXVzZTM3IFxuIik7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19NSVNDX0NUUkwsIDApOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19BTiwgMHgxMzAwKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogU2luY2UgdGhlIDg3MjcgaGFzIG9ubHkgc2luZ2xlIHJlc2V0IHBpbiwKKwkJCQluZWVkIHRvIHNldCB0aGUgMTBHIHJlZ2lzdGVycyBhbHRob3VnaCBpdCBpcworCQkJCWRlZmF1bHQgKi8KKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsIDB4MDAyMCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICAweDcsIDB4MDEwMCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsIDB4MjA0MCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHXzEwR19DVFJMMiwgMHgwMDA4KTsKKwkJCX0KKworCQkJLyogU2V0IDItd2lyZSB0cmFuc2ZlciByYXRlIHRvIDQwMEtoeiBzaW5jZSAxMDBLaHoKKwkJCWlzIG5vdCBvcGVyYXRpb25hbCAqLworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X1RXT19XSVJFX1NMQVZFX0FERFIsCisJCQkJICAgICAgIDB4YTEwMSk7CisKKwkJCS8qIFNldCBUWCBQcmVFbXBoYXNpcyBpZiBuZWVkZWQgKi8KKwkJCWlmICgocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJCQkgICAgIEZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQpKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIFRYX0NUUkwxIDB4JXgsIgorCQkJCQkgIlRYX0NUUkwyIDB4JXhcbiIsCisJCQkJCSBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzBdLAorCQkJCQkgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFsxXSk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19UWF9DVFJMMSwKKwkJCQkJICAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMF0pOworCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19UWF9DVFJMMiwKKwkJCQkJICAgICAgIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMV0pOworCQkJfQorCisJCQlicmVhazsKKwkJfQorCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKIAkJewogCQkJdTE2IGZ3X3ZlcjEsIGZ3X3ZlcjI7CkBAIC0zNDk1LDIwICs0Mjg4LDExMiBAQAogCQkJYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihwYXJhbXMtPmJwLCBwYXJhbXMtPnBvcnQsCiAJCQkJCQlwYXJhbXMtPnNobWVtX2Jhc2UsCiAJCQkJCQkodTMyKShmd192ZXIxPDwxNiB8IGZ3X3ZlcjIpKTsKLQogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgotCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJIlNldHRpbmcgdGhlIEJDTTg0ODEgTEFTSSBjb250cm9sXG4iKTsKKwkJCS8qIFRoaXMgcGh5IHVzZXMgdGhlIE5JRyBsYXRjaCBtZWNoYW5pc20gc2luY2UgbGluaworCQkJCWluZGljYXRpb24gYXJyaXZlcyB0aHJvdWdoIGl0cyBMRUQ0IGFuZCBub3QgdmlhCisJCQkJaXRzIExBU0kgc2lnbmFsLCBzbyB3ZSBnZXQgc3RlYWR5IHNpZ25hbAorCQkJCWluc3RlYWQgb2YgY2xlYXIgb24gcmVhZCAqLworCQkJYm54MnhfYml0c19lbihicCwgTklHX1JFR19MQVRDSF9CQ18wICsgcGFyYW1zLT5wb3J0KjQsCisJCQkJICAgIDEgPDwgTklHX0xBVENIX0JDX0VOQUJMRV9NSV9JTlQpOwogCi0JCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwgMHgxKTsKKwkJCWJueDJ4Xzg0ODFfc2V0X2xlZDQocGFyYW1zLCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkcik7CisJCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykgewogCi0JCQkvKiBSZXN0YXJ0IGF1dG9uZWcgKi8KKwkJCQl1MTYgYXV0b25lZ192YWwsIGFuXzEwMDBfdmFsLCBhbl8xMF8xMDBfdmFsOworCQkJCS8qIHNldCAxMDAwIHNwZWVkIGFkdmVydGlzZW1lbnQgKi8KKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgIE1ESU9fQU5fUkVHXzg0ODFfMTAwMFRfQ1RSTCwKKwkJCQkJICAgICAgJmFuXzEwMDBfdmFsKTsKKworCQkJCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKKwkJCQkgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xRykgeworCQkJCQlhbl8xMDAwX3ZhbCB8PSAoMTw8OCk7CisJCQkJCWlmIChwYXJhbXMtPnJlcV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQkJCQlhbl8xMDAwX3ZhbCB8PSAoMTw8OSk7CisJCQkJCURQKE5FVElGX01TR19MSU5LLCAiQWR2ZXJ0aXNpbmcgMUdcbiIpOworCQkJCX0gZWxzZQorCQkJCQlhbl8xMDAwX3ZhbCAmPSB+KCgxPDw4KSB8ICgxPDw5KSk7CisKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfODQ4MV8xMDAwVF9DVFJMLAorCQkJCQkgICAgICAgYW5fMTAwMF92YWwpOworCisJCQkJLyogc2V0IDEwMCBzcGVlZCBhZHZlcnRpc2VtZW50ICovCisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR184NDgxX0xFR0FDWV9BTl9BRFYsCisJCQkJCSAgICAgICZhbl8xMF8xMDBfdmFsKTsKKworCQkJCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKKwkJCQkgKFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTAwTV9GVUxMIHwKKwkJCQkgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTAwTV9IQUxGKSkgeworCQkJCQlhbl8xMF8xMDBfdmFsIHw9ICgxPDw3KTsKKwkJCQkJaWYgKHBhcmFtcy0+cmVxX2R1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCQkJCWFuXzEwXzEwMF92YWwgfD0gKDE8PDgpOworCQkJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkJCSJBZHZlcnRpc2luZyAxMDBNXG4iKTsKKwkJCQl9IGVsc2UKKwkJCQkJYW5fMTBfMTAwX3ZhbCAmPSB+KCgxPDw3KSB8ICgxPDw4KSk7CisKKwkJCQkvKiBzZXQgMTAgc3BlZWQgYWR2ZXJ0aXNlbWVudCAqLworCQkJCWlmIChwYXJhbXMtPnNwZWVkX2NhcF9tYXNrICYKKwkJCQkgIChQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwTV9GVUxMIHwKKwkJCQkgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwTV9IQUxGKSkgeworCQkJCQlhbl8xMF8xMDBfdmFsIHw9ICgxPDw1KTsKKwkJCQkJaWYgKHBhcmFtcy0+cmVxX2R1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCQkJCWFuXzEwXzEwMF92YWwgfD0gKDE8PDYpOworCQkJCQlEUChORVRJRl9NU0dfTElOSywgIkFkdmVydGlzaW5nIDEwTVxuIik7CisJCQkJICAgICB9CisJCQkJZWxzZQorCQkJCQlhbl8xMF8xMDBfdmFsICY9IH4oKDE8PDUpIHwgKDE8PDYpKTsKKworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR184NDgxX0xFR0FDWV9BTl9BRFYsCisJCQkJCSAgICAgICBhbl8xMF8xMDBfdmFsKTsKKworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfODQ4MV9MRUdBQ1lfTUlJX0NUUkwsCisJCQkJCSAgICAgICZhdXRvbmVnX3ZhbCk7CisKKwkJCQkvKiBEaXNhYmxlIGZvcmNlZCBzcGVlZCAqLworCQkJCWF1dG9uZWdfdmFsICY9IH4oMTw8NnwxPDwxMyk7CisKKwkJCQkvKiBFbmFibGUgYXV0b25lZyBhbmQgcmVzdGFydCBhdXRvbmVnCisJCQkJZm9yIGxlZ2FjeSBzcGVlZHMgKi8KKwkJCQlhdXRvbmVnX3ZhbCB8PSAoMTw8OXwxPDwxMik7CisKKwkJCQlpZiAocGFyYW1zLT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCQlhdXRvbmVnX3ZhbCB8PSAoMTw8OCk7CisJCQkJZWxzZQorCQkJCQlhdXRvbmVnX3ZhbCAmPSB+KDE8PDgpOworCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHXzg0ODFfTEVHQUNZX01JSV9DVFJMLAorCQkJCQkgICAgICAgYXV0b25lZ192YWwpOworCisJCQkJaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgorCQkJCSAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzEwRykgeworCQkJCQlEUChORVRJRl9NU0dfTElOSywgIkFkdmVydGlzaW5nIDEwR1xuIik7CisJCQkJCS8qIFJlc3RhcnQgYXV0b25lZyBmb3IgMTBHKi8KIAkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAogCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKIAkJCQkgICAgICBleHRfcGh5X2FkZHIsCkBAIC0zNTIwLDEyICs0NDA1LDgxIEBACiAJCQkJICAgICAgIGV4dF9waHlfYWRkciwKIAkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKIAkJCQkgICAgICAgTURJT19BTl9SRUdfQ1RSTCwgdmFsKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIEZvcmNlIHNwZWVkICovCisJCQkJdTE2IGF1dG9uZWdfY3RybCwgcG1hX2N0cmw7CisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR184NDgxX0xFR0FDWV9NSUlfQ1RSTCwKKwkJCQkJICAgICAgJmF1dG9uZWdfY3RybCk7CiAKLQkJCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCWV4dF9waHlfdHlwZSwKLQkJCQkJCWV4dF9waHlfYWRkciwKLQkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7CisJCQkJLyogRGlzYWJsZSBhdXRvbmVnICovCisJCQkJYXV0b25lZ19jdHJsICY9IH4oMTw8MTIpOwogCisJCQkJLyogU2V0IDEwMDAgZm9yY2UgKi8KKwkJCQlzd2l0Y2ggKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQpIHsKKwkJCQljYXNlIFNQRUVEXzEwMDAwOgorCQkJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkJCSJVbmFibGUgdG8gc2V0IDEwRyBmb3JjZSAhXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTUEVFRF8xMDAwOgorCQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkJICAgICAgTURJT19QTUFfUkVHX0NUUkwsCisJCQkJCQkgICAgICAmcG1hX2N0cmwpOworCQkJCQlhdXRvbmVnX2N0cmwgJj0gfigxPDwxMyk7CisJCQkJCWF1dG9uZWdfY3RybCB8PSAoMTw8Nik7CisJCQkJCXBtYV9jdHJsICY9IH4oMTw8MTMpOworCQkJCQlwbWFfY3RybCB8PSAoMTw8Nik7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkJIlNldHRpbmcgMTAwME0gZm9yY2VcbiIpOworCQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKKwkJCQkJCSAgICAgICBwbWFfY3RybCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU1BFRURfMTAwOgorCQkJCQlhdXRvbmVnX2N0cmwgfD0gKDE8PDEzKTsKKwkJCQkJYXV0b25lZ19jdHJsICY9IH4oMTw8Nik7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkJIlNldHRpbmcgMTAwTSBmb3JjZVxuIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU1BFRURfMTA6CisJCQkJCWF1dG9uZWdfY3RybCAmPSB+KDE8PDEzKTsKKwkJCQkJYXV0b25lZ19jdHJsICY9IH4oMTw8Nik7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkJIlNldHRpbmcgMTBNIGZvcmNlXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJLyogRHVwbGV4IG1vZGUgKi8KKwkJCQlpZiAocGFyYW1zLT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CisJCQkJCWF1dG9uZWdfY3RybCB8PSAoMTw8OCk7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkJIlNldHRpbmcgZnVsbCBkdXBsZXhcbiIpOworCQkJCX0gZWxzZQorCQkJCQlhdXRvbmVnX2N0cmwgJj0gfigxPDw4KTsKKworCQkJCS8qIFVwZGF0ZSBhdXRvbmVnIGN0cmwgYW5kIHBtYSBjdHJsICovCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHXzg0ODFfTEVHQUNZX01JSV9DVFJMLAorCQkJCQkgICAgICAgYXV0b25lZ19jdHJsKTsKKwkJCX0KKworCQkJLyogU2F2ZSBzcGlyb20gdmVyc2lvbiAqLworCQkJYm54Mnhfc2F2ZV84NDgxX3NwaXJvbV92ZXJzaW9uKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQkgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICAgcGFyYW1zLT5zaG1lbV9iYXNlKTsKIAkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CiAJCQlEUChORVRJRl9NU0dfTElOSywKQEAgLTM1NjEsOSArNDUxNSwxMDEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB2b2lkIGJueDJ4Xzg3MjdfaGFuZGxlX21vZF9hYnMoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IG1vZF9hYnMsIHJ4X2FsYXJtX3N0YXR1czsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwl1MzIgdmFsID0gUkVHX1JEKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKworCQkJICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLCBkZXZfaW5mby4KKwkJCQkgICAgICBwb3J0X2ZlYXR1cmVfY29uZmlnW3BhcmFtcy0+cG9ydF0uCisJCQkJICAgICAgY29uZmlnKSk7CisJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwgJm1vZF9hYnMpOworCWlmIChtb2RfYWJzICYgKDE8PDgpKSB7CisKKwkJLyogTW9kdWxlIGlzIGFic2VudCAqLworCQlEUChORVRJRl9NU0dfTElOSywgIk1PRF9BQlMgaW5kaWNhdGlvbiAiCisJCQkgICAgInNob3cgbW9kdWxlIGlzIGFic2VudFxuIik7CisKKwkJLyogMS4gU2V0IG1vZF9hYnMgdG8gZGV0ZWN0IG5leHQgbW9kdWxlCisJCXByZXNlbmNlIGV2ZW50CisJCSAgIDIuIFNldCBFREMgb2ZmIGJ5IHNldHRpbmcgT1BUWExPUyBzaWduYWwgaW5wdXQgdG8gbG93CisJCQkoYml0IDkpLgorCQkJV2hlbiB0aGUgRURDIGlzIG9mZiBpdCBsb2NrcyBvbnRvIGEgcmVmZXJlbmNlIGNsb2NrIGFuZAorCQkJYXZvaWRzIGJlY29taW5nICdsb3N0Jy4qLworCQltb2RfYWJzICY9IH4oKDE8PDgpfCgxPDw5KSk7CisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsIG1vZF9hYnMpOworCisJCS8qIENsZWFyIFJYIGFsYXJtIHNpbmNlIGl0IHN0YXlzIHVwIGFzIGxvbmcgYXMKKwkJdGhlIG1vZF9hYnMgd2Fzbid0IGNoYW5nZWQgKi8KKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk0sICZyeF9hbGFybV9zdGF0dXMpOworCisJfSBlbHNlIHsKKwkJLyogTW9kdWxlIGlzIHByZXNlbnQgKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJNT0RfQUJTIGluZGljYXRpb24gIgorCQkJICAgICJzaG93IG1vZHVsZSBpcyBwcmVzZW50XG4iKTsKKwkJLyogRmlyc3QgdGhpbmcsIGRpc2FibGUgdHJhbnNtaXR0ZXIsCisJCWFuZCBpZiB0aGUgbW9kdWxlIGlzIG9rLCB0aGUKKwkJbW9kdWxlX2RldGVjdGlvbiB3aWxsIGVuYWJsZSBpdCovCisKKwkJLyogMS4gU2V0IG1vZF9hYnMgdG8gZGV0ZWN0IG5leHQgbW9kdWxlCisJCWFic2VudCBldmVudCAoIGJpdCA4KQorCQkgICAyLiBSZXN0b3JlIHRoZSBkZWZhdWx0IHBvbGFyaXR5IG9mIHRoZSBPUFJYTE9TIHNpZ25hbCBhbmQKKwkJdGhpcyBzaWduYWwgd2lsbCB0aGVuIGNvcnJlY3RseSBpbmRpY2F0ZSB0aGUgcHJlc2VuY2Ugb3IKKwkJYWJzZW5jZSBvZiB0aGUgUnggc2lnbmFsLiAoYml0IDkpICovCisJCW1vZF9hYnMgfD0gKCgxPDw4KXwoMTw8OSkpOworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsIG1vZF9hYnMpOworCisJCS8qIENsZWFyIFJYIGFsYXJtIHNpbmNlIGl0IHN0YXlzIHVwIGFzIGxvbmcgYXMKKwkJdGhlIG1vZF9hYnMgd2Fzbid0IGNoYW5nZWQuIFRoaXMgaXMgbmVlZCB0byBiZSBkb25lCisJCWJlZm9yZSBjYWxsaW5nIHRoZSBtb2R1bGUgZGV0ZWN0aW9uLCBvdGhlcndpc2UgaXQgd2lsbCBjbGVhcgorCQl0aGUgbGluayB1cGRhdGUgYWxhcm0gKi8KKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk0sICZyeF9hbGFybV9zdGF0dXMpOworCisKKwkJaWYgKCh2YWwgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTUFTSykgPT0KKwkJICAgIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9ESVNBQkxFX1RYX0xBU0VSKQorCQkJYm54Mnhfc2ZwX3NldF90cmFuc21pdHRlcihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkJCQlleHRfcGh5X2FkZHIsIDApOworCisJCWlmIChibngyeF93YWl0X2Zvcl9zZnBfbW9kdWxlX2luaXRpYWxpemVkKHBhcmFtcykKKwkJICAgID09IDApCisJCQlibngyeF9zZnBfbW9kdWxlX2RldGVjdGlvbihwYXJhbXMpOworCQllbHNlCisJCQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZFxuIik7CisJfQorCisJRFAoTkVUSUZfTVNHX0xJTkssICI4NzI3IFJYX0FMQVJNX1NUQVRVUyAweCV4XG4iLAorCQkgcnhfYWxhcm1fc3RhdHVzKTsKKwkvKiBObyBuZWVkIHRvIGNoZWNrIGxpbmsgc3RhdHVzIGluIGNhc2Ugb2YKKwltb2R1bGUgcGx1Z2dlZCBpbi9vdXQgKi8KK30KKwogCiBzdGF0aWMgdTggYm54MnhfZXh0X3BoeV9pc19saW5rX3VwKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCSBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQorCQkJCSBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkJCSB1OCBpc19taV9pbnQpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTMyIGV4dF9waHlfdHlwZTsKQEAgLTM1NzIsMTEgKzQ2MTgsOSBAQAogCXUxNiByeF9zZCwgcGNzX3N0YXR1czsKIAl1OCBleHRfcGh5X2xpbmtfdXAgPSAwOwogCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7Ci0JaWYgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKLQkJZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKLQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKIAorCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7CisJCWV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCQlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CkBAIC0zNjAyLDggKzQ2NDYsMTkgQEAKIAkJCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJICAgICAgTURJT19QTUFfREVWQUQsCiAJCQkJICAgICAgTURJT19QTUFfUkVHX1JYX1NELCAmcnhfc2QpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA1IHJ4X3NkIDB4JXhcbiIsIHJ4X3NkKTsKLQkJCWV4dF9waHlfbGlua191cCA9IChyeF9zZCAmIDB4MSk7CisKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIDEsCisJCQkJICAgICAgMHhjODA5LCAmdmFsMSk7CisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAxLAorCQkJCSAgICAgIDB4YzgwOSwgJnZhbDEpOworCisJCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDUgMS5jODA5IHZhbD0weCV4XG4iLCB2YWwxKTsKKwkJCWV4dF9waHlfbGlua191cCA9ICgocnhfc2QgJiAweDEpICYmICh2YWwxICYgKDE8PDkpKQorCQkJCQkgICAmJiAoKHZhbDEgJiAoMTw8OCkpID09IDApKTsKIAkJCWlmIChleHRfcGh5X2xpbmtfdXApCiAJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwogCQkJYnJlYWs7CkBAIC0zNjcyLDE5ICs0NzI3LDE3MiBAQAogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJCQl9Ci0KIAkJCQlpZiAodmFsMiAmICgxPDwxKSkKIAkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7CiAJCQkJZWxzZQogCQkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CiAJCQl9Ci0KIAkJCWJyZWFrOworCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKKwkJeworCQkJdTE2IGxpbmtfc3RhdHVzID0gMDsKKwkJCXUxNiByeF9hbGFybV9zdGF0dXM7CisJCQkvKiBDaGVjayB0aGUgTEFTSSAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk0sICZyeF9hbGFybV9zdGF0dXMpOworCisJCQlEUChORVRJRl9NU0dfTElOSywgIjg3MjcgUlhfQUxBUk1fU1RBVFVTIDB4JXhcbiIsCisJCQkJIHJ4X2FsYXJtX3N0YXR1cyk7CisKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMSk7CisKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSAiODcyNyBMQVNJIHN0YXR1cyAweCV4XG4iLAorCQkJCSB2YWwxKTsKKworCQkJLyogQ2xlYXIgTVNHLU9VVCAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfTTgwNTFfTVNHT1VUX1JFRywKKwkJCQkgICAgICAmdmFsMSk7CisKKwkJCS8qCisJCQkgKiBJZiBhIG1vZHVsZSBpcyBwcmVzZW50IGFuZCB0aGVyZSBpcyBuZWVkIHRvIGNoZWNrCisJCQkgKiBmb3Igb3ZlciBjdXJyZW50CisJCQkgKi8KKwkJCWlmICghKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCQkJICAgICAgRkVBVFVSRV9DT05GSUdfQkNNODcyN19OT0MpICYmCisJCQkgICAgIShyeF9hbGFybV9zdGF0dXMgJiAoMTw8NSkpKSB7CisJCQkJLyogQ2hlY2sgb3Zlci1jdXJyZW50IHVzaW5nIDg3MjcgR1BJTzAgaW5wdXQqLworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgIE1ESU9fUE1BX1JFR184NzI3X0dQSU9fQ1RSTCwKKwkJCQkJICAgICAgJnZhbDEpOworCisJCQkJaWYgKCh2YWwxICYgKDE8PDgpKSA9PSAwKSB7CisJCQkJCURQKE5FVElGX01TR19MSU5LLCAiODcyNyBQb3dlciBmYXVsdCIKKwkJCQkJCSAgICAgIiBoYXMgYmVlbiBkZXRlY3RlZCBvbiAiCisJCQkJCQkgICAgICJwb3J0ICVkXG4iLAorCQkJCQkJIHBhcmFtcy0+cG9ydCk7CisJCQkJCXByaW50ayhLRVJOX0VSUiBQRlggICJFcnJvcjogIFBvd2VyIgorCQkJCQkJICIgZmF1bHQgb24gJXMgUG9ydCAlZCBoYXMiCisJCQkJCQkgIiBiZWVuIGRldGVjdGVkIGFuZCB0aGUiCisJCQkJCQkgIiBwb3dlciB0byB0aGF0IFNGUCsgbW9kdWxlIgorCQkJCQkJICIgaGFzIGJlZW4gcmVtb3ZlZCB0byBwcmV2ZW50IgorCQkJCQkJICIgZmFpbHVyZSBvZiB0aGUgY2FyZC4gUGxlYXNlIgorCQkJCQkJICIgcmVtb3ZlIHRoZSBTRlArIG1vZHVsZSBhbmQiCisJCQkJCQkgIiByZXN0YXJ0IHRoZSBzeXN0ZW0gdG8gY2xlYXIiCisJCQkJCQkgIiB0aGlzIGVycm9yLlxuIgorCQkJLCBicC0+ZGV2LT5uYW1lLCBwYXJhbXMtPnBvcnQpOworCQkJCQkvKgorCQkJCQkgKiBEaXNhYmxlIGFsbCBSWF9BTEFSTXMgZXhjZXB0IGZvcgorCQkJCQkgKiBtb2RfYWJzCisJCQkJCSAqLworCQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQkgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJCSAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNX0NUUkwsCisJCQkJCQkgICAgICgxPDw1KSk7CisKKwkJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQkgICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJCSAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCisJCQkJCQkgICAgJnZhbDEpOworCQkJCQkvKiBXYWl0IGZvciBtb2R1bGVfYWJzZW50X2V2ZW50ICovCisJCQkJCXZhbDEgfD0gKDE8PDgpOworCQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQkgICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJCSAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCisJCQkJCQkgICAgdmFsMSk7CisJCQkJCS8qIENsZWFyIFJYIGFsYXJtICovCisJCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk0sCisJCQkJCQkgICAgICAmcnhfYWxhcm1fc3RhdHVzKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSAvKiBPdmVyIGN1cnJlbnQgY2hlY2sgKi8KKworCQkJLyogV2hlbiBtb2R1bGUgYWJzZW50IGJpdCBpcyBzZXQsIGNoZWNrIG1vZHVsZSAqLworCQkJaWYgKHJ4X2FsYXJtX3N0YXR1cyAmICgxPDw1KSkgeworCQkJCWJueDJ4Xzg3MjdfaGFuZGxlX21vZF9hYnMocGFyYW1zKTsKKwkJCQkvKiBFbmFibGUgYWxsIG1vZF9hYnMgYW5kIGxpbmsgZGV0ZWN0aW9uIGJpdHMgKi8KKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTV9DVFJMLAorCQkJCQkgICAgICAgKCgxPDw1KSB8ICgxPDwyKSkpOworCQkJfQorCisJCQkvKiBJZiB0cmFuc21pdHRlciBpcyBkaXNhYmxlZCwKKwkJCWlnbm9yZSBmYWxzZSBsaW5rIHVwIGluZGljYXRpb24gKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkJCSAgICAgICZ2YWwxKTsKKwkJCWlmICh2YWwxICYgKDE8PDE1KSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiVHggaXMgZGlzYWJsZWRcbiIpOworCQkJCWV4dF9waHlfbGlua191cCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHXzgwNzNfU1BFRURfTElOS19TVEFUVVMsCisJCQkJICAgICAgJmxpbmtfc3RhdHVzKTsKKworCQkJLyogQml0cyAwLi4yIC0tPiBzcGVlZCBkZXRlY3RlZCwKKwkJCSAgIGJpdHMgMTMuLjE1LS0+IGxpbmsgaXMgZG93biAqLworCQkJaWYgKChsaW5rX3N0YXR1cyAmICgxPDwyKSkgJiYKKwkJCSAgICAoIShsaW5rX3N0YXR1cyAmICgxPDwxNSkpKSkgeworCQkJCWV4dF9waHlfbGlua191cCA9IDE7CisJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOworCQkJfSBlbHNlIGlmICgobGlua19zdGF0dXMgJiAoMTw8MCkpICYmCisJCQkJICAgKCEobGlua19zdGF0dXMgJiAoMTw8MTMpKSkpIHsKKwkJCQlleHRfcGh5X2xpbmtfdXAgPSAxOworCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkgInBvcnQgJXg6IEV4dGVybmFsIGxpbmsiCisJCQkJCSAiIHVwIGluIDFHXG4iLCBwYXJhbXMtPnBvcnQpOworCQkJfSBlbHNlIHsKKwkJCQlleHRfcGh5X2xpbmtfdXAgPSAwOworCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkgInBvcnQgJXg6IEV4dGVybmFsIGxpbmsiCisJCQkJCSAiIGlzIGRvd25cbiIsIHBhcmFtcy0+cG9ydCk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgogCQl7CiAJCQl1MTYgbGlua19zdGF0dXMgPSAwOwogCQkJdTE2IGFuMTAwMF9zdGF0dXMgPSAwOworCiAJCQlpZiAoZXh0X3BoeV90eXBlID09CiAJCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpIHsKIAkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKQEAgLTM3MDAsNyArNDkwOCw2IEBACiAJCQlEUChORVRJRl9NU0dfTElOSywKIAkJCQkgIjg3MHggTEFTSSBzdGF0dXMgMHgleC0+MHgleFxuIiwKIAkJCQkgIHZhbDEsIHZhbDIpOwotCiAJCQl9IGVsc2UgewogCQkJCS8qIEluIDgwNzMsIHBvcnQxIGlzIGRpcmVjdGVkIHRocm91Z2ggZW1hYzAgYW5kCiAJCQkJICogcG9ydDAgaXMgZGlyZWN0ZWQgdGhyb3VnaCBlbWFjMQpAQCAtMzgzMCw4ICs1MDM3LDYgQEAKIAkJCQkJCSAgICBNRElPX1BNQV9ERVZBRCwKIAkJCQkJCSAgICBNRElPX1BNQV9SRUdfQ0RSX0JBTkRXSURUSCwKIAkJCQkJCSAgICAweDAzMzMpOwotCi0KIAkJCQl9CiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkJCSAgIGV4dF9waHlfdHlwZSwKQEAgLTM5NDMsNTEgKzUxNDgsNzkgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6Ci0JCQkvKiBDbGVhciBMQVNJIGludGVycnVwdCAqLwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJLyogQ2hlY2sgMTBHLUJhc2VUIGxpbmsgc3RhdHVzICovCisJCQkvKiBDaGVjayBQTUQgc2lnbmFsIG9rICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJCSAgICAgIDB4RkZGQSwKKwkJCQkJCSAgICAgICZ2YWwxKTsKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCiAJCQkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NDgxIExBU0kgc3RhdHVzIHJlZyA9IDB4JXhcbiIsCi0JCQkJIHZhbDEpOworCQkJCSAgICAgIE1ESU9fUE1BX1JFR184NDgxX1BNRF9TSUdOQUwsCisJCQkJICAgICAgJnZhbDIpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJQTURfU0lHTkFMIDEuYTgxMSA9IDB4JXhcbiIsIHZhbDIpOwogCi0JCQkvKiBDaGVjayAxMEctQmFzZVQgbGluayBzdGF0dXMgKi8KLQkJCS8qIENoZWNrIEdsb2JhbCBQTUQgc2lnbmFsIG9rICovCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX1JYX1NELAotCQkJCSAgICAgICZyeF9zZCk7Ci0JCQkvKiBDaGVjayBQQ1MgYmxvY2sgbG9jayAqLwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QQ1NfREVWQUQsIE1ESU9fUENTX1JFR19TVEFUVVMsCi0JCQkJICAgICAgJnBjc19zdGF0dXMpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NDgxIDEuYSA9IDB4JXgsIDEuMjAgPSAweCV4XG4iLAotCQkJCSByeF9zZCwgcGNzX3N0YXR1cyk7Ci0JCQlpZiAocnhfc2QgJiBwY3Nfc3RhdHVzICYgMHgxKSB7CisJCQkvKiBDaGVjayBsaW5rIDEwRyAqLworCQkJaWYgKHZhbDIgJiAoMTw8MTEpKSB7CiAJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwogCQkJCWV4dF9waHlfbGlua191cCA9IDE7Ci0JCQl9IGVsc2UgeworCQkJCWJueDJ4Xzg0ODFfc2V0XzEwR19sZWRfbW9kZShwYXJhbXMsCisJCQkJCQkJICBleHRfcGh5X3R5cGUsCisJCQkJCQkJICBleHRfcGh5X2FkZHIpOworCQkJfSBlbHNlIHsgLyogQ2hlY2sgTGVnYWN5IHNwZWVkIGxpbmsgKi8KKwkJCQl1MTYgbGVnYWN5X3N0YXR1cywgbGVnYWN5X3NwZWVkOwogCi0JCQkJLyogQ2hlY2sgMTAwMC1CYXNlVCBsaW5rIHN0YXR1cyAqLwotCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgTURJT19BTl9ERVZBRCwgMHhGRkUxLAotCQkJCQkgICAgICAmdmFsMSk7CisJCQkJLyogRW5hYmxlIGV4cGFuc2lvbiByZWdpc3RlciAweDQyCisJCQkJKE9wZXJhdGlvbiBtb2RlIHN0YXR1cykgKi8KKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSBleHRfcGh5X3R5cGUsCisJCQkJCSBleHRfcGh5X2FkZHIsCisJCQkJCSBNRElPX0FOX0RFVkFELAorCQkJCQkgTURJT19BTl9SRUdfODQ4MV9FWFBBTlNJT05fUkVHX0FDQ0VTUywKKwkJCQkJIDB4ZjQyKTsKIAotCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJICAgICAgTURJT19BTl9ERVZBRCwgMHhGRkUxLAotCQkJCQkgICAgICAmdmFsMik7Ci0JCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NDgxIDcuRkZFMSA9IgotCQkJCQkgICAgICIweCV4LS0+MHgleFxuIiwgdmFsMSwgdmFsMik7Ci0JCQkJaWYgKHZhbDIgJiAoMTw8MikpIHsKLQkJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7Ci0JCQkJCWV4dF9waHlfbGlua191cCA9IDE7CisJCQkJLyogR2V0IGxlZ2FjeSBzcGVlZCBvcGVyYXRpb24gc3RhdHVzICovCisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgZXh0X3BoeV90eXBlLAorCQkJCQkgIGV4dF9waHlfYWRkciwKKwkJCQkJICBNRElPX0FOX0RFVkFELAorCQkJCQkgIE1ESU9fQU5fUkVHXzg0ODFfRVhQQU5TSU9OX1JFR19SRF9SVywKKwkJCQkJICAmbGVnYWN5X3N0YXR1cyk7CisKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIkxlZ2FjeSBzcGVlZCBzdGF0dXMiCisJCQkJCSAgICAgIiA9IDB4JXhcbiIsIGxlZ2FjeV9zdGF0dXMpOworCQkJCWV4dF9waHlfbGlua191cCA9ICgobGVnYWN5X3N0YXR1cyAmICgxPDwxMSkpCisJCQkJCQkgICA9PSAoMTw8MTEpKTsKKwkJCQlpZiAoZXh0X3BoeV9saW5rX3VwKSB7CisJCQkJCWxlZ2FjeV9zcGVlZCA9IChsZWdhY3lfc3RhdHVzICYgKDM8PDkpKTsKKwkJCQkJaWYgKGxlZ2FjeV9zcGVlZCA9PSAoMDw8OSkpCisJCQkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTA7CisJCQkJCWVsc2UgaWYgKGxlZ2FjeV9zcGVlZCA9PSAoMTw8OSkpCisJCQkJCQl2YXJzLT5saW5lX3NwZWVkID0KKwkJCQkJCQlTUEVFRF8xMDA7CisJCQkJCWVsc2UgaWYgKGxlZ2FjeV9zcGVlZCA9PSAoMjw8OSkpCisJCQkJCQl2YXJzLT5saW5lX3NwZWVkID0KKwkJCQkJCQlTUEVFRF8xMDAwOworCQkJCQllbHNlIC8qIFNob3VsZCBub3QgaGFwcGVuICovCisJCQkJCQl2YXJzLT5saW5lX3NwZWVkID0gMDsKKworCQkJCQlpZiAobGVnYWN5X3N0YXR1cyAmICgxPDw4KSkKKwkJCQkJCXZhcnMtPmR1cGxleCA9IERVUExFWF9GVUxMOworCQkJCQllbHNlCisJCQkJCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKworCQkJCQlEUChORVRJRl9NU0dfTElOSywgIkxpbmsgaXMgdXAgIgorCQkJCQkJICAgICAiaW4gJWRNYnBzLCBpc19kdXBsZXhfZnVsbCIKKwkJCQkJCSAgICAgIj0gJWRcbiIsCisJCQkJCQl2YXJzLT5saW5lX3NwZWVkLAorCQkJCQkJKHZhcnMtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkpOworCQkJCQlibngyeF84NDgxX3NldF9sZWdhY3lfbGVkX21vZGUocGFyYW1zLAorCQkJCQkJCQkgZXh0X3BoeV90eXBlLAorCQkJCQkJCQkgZXh0X3BoeV9hZGRyKTsKIAkJCQl9CiAJCQl9Ci0KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJCQUQgWEdYUyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLApAQCAtMzk5NSw2ICs1MjI4LDEzIEBACiAJCQlleHRfcGh5X2xpbmtfdXAgPSAwOwogCQkJYnJlYWs7CiAJCX0KKwkJLyogU2V0IFNHTUlJIG1vZGUgZm9yIGV4dGVybmFsIHBoeSAqLworCQlpZiAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgeworCQkJaWYgKHZhcnMtPmxpbmVfc3BlZWQgPCBTUEVFRF8xMDAwKQorCQkJCXZhcnMtPnBoeV9mbGFncyB8PSBQSFlfU0dNSUlfRkxBRzsKKwkJCWVsc2UKKwkJCQl2YXJzLT5waHlfZmxhZ3MgJj0gflBIWV9TR01JSV9GTEFHOworCQl9CiAKIAl9IGVsc2UgeyAvKiBTZXJEZXMgKi8KIAkJZXh0X3BoeV90eXBlID0gU0VSREVTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKQEAgLTQwMjcsNiArNTI2Nyw3IEBACiAJdTMyIGV4dF9waHlfdHlwZTsKIAl1MzIgbWFzazsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwogCS8qIHNldHRpbmcgdGhlIHN0YXR1cyB0byByZXBvcnQgb24gbGluayB1cAogCSAgIGZvciBlaXRoZXIgWEdYUyBvciBTZXJEZXMgKi8KIApAQCAtNDA1OCwxMCArNTI5OSwxMCBAQAogCWJueDJ4X2JpdHNfZW4oYnAsCiAJCSAgICAgIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCiAJCSAgICAgIG1hc2spOwotCURQKE5FVElGX01TR19MSU5LLCAicG9ydCAleCwgaXNfeGd4cz0leCwgaW50X3N0YXR1cyAweCV4XG4iLCBwb3J0LAorCisJRFAoTkVUSUZfTVNHX0xJTkssICJwb3J0ICV4LCBpc194Z3hzICV4LCBpbnRfc3RhdHVzIDB4JXhcbiIsIHBvcnQsCiAJCSAocGFyYW1zLT5zd2l0Y2hfY2ZnID09IFNXSVRDSF9DRkdfMTBHKSwKIAkJIFJFR19SRChicCwgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0KSk7Ci0KIAlEUChORVRJRl9NU0dfTElOSywgIiBpbnRfbWFzayAweCV4LCBNSV9JTlQgJXgsIFNFUkRFU19MSU5LICV4XG4iLAogCQkgUkVHX1JEKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0KSwKIAkJIFJFR19SRChicCwgTklHX1JFR19FTUFDMF9TVEFUVVNfTUlTQ19NSV9JTlQgKyBwb3J0KjB4MTgpLApAQCAtNDA3MSwxMiArNTMxMiw0NyBAQAogCSAgIFJFR19SRChicCwgTklHX1JFR19YR1hTMF9TVEFUVVNfTElOS19TVEFUVVMgKyBwb3J0KjB4NjgpKTsKIH0KIAotCitzdGF0aWMgdm9pZCBibngyeF84NDgxX3JlYXJtX2xhdGNoX3NpZ25hbChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCQl1OCBpc19taV9pbnQpCit7CisJdTMyIGxhdGNoX3N0YXR1cyA9IDAsIGlzX21pX2ludF9zdGF0dXM7CisJLyogRGlzYWJsZSB0aGUgTUkgSU5UICggZXh0ZXJuYWwgcGh5IGludCApCisJICogYnkgd3JpdGluZyAxIHRvIHRoZSBzdGF0dXMgcmVnaXN0ZXIuIExpbmsgZG93biBpbmRpY2F0aW9uCisJICogaXMgaGlnaC1hY3RpdmUtc2lnbmFsLCBzbyBpbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byB3cml0ZSB0aGUKKwkgKiBzdGF0dXMgdG8gY2xlYXIgdGhlIFhPUgorCSAqLworCS8qIFJlYWQgTGF0Y2hlZCBzaWduYWxzICovCisJbGF0Y2hfc3RhdHVzID0gUkVHX1JEKGJwLAorCQkJCSAgTklHX1JFR19MQVRDSF9TVEFUVVNfMCArIHBvcnQqOCk7CisJaXNfbWlfaW50X3N0YXR1cyA9IFJFR19SRChicCwKKwkJCQkgIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCk7CisJRFAoTkVUSUZfTVNHX0xJTkssICJvcmlnaW5hbF9zaWduYWwgPSAweCV4LCBuaWdfc3RhdHVzID0gMHgleCwiCisJCSAgICAgImxhdGNoX3N0YXR1cyA9IDB4JXhcbiIsCisJCSBpc19taV9pbnQsIGlzX21pX2ludF9zdGF0dXMsIGxhdGNoX3N0YXR1cyk7CisJLyogSGFuZGxlIG9ubHkgdGhvc2Ugd2l0aCBsYXRjaGVkLXNpZ25hbD11cC4qLworCWlmIChsYXRjaF9zdGF0dXMgJiAxKSB7CisJCS8qIEZvciBhbGwgbGF0Y2hlZC1zaWduYWw9dXAsV3JpdGUgb3JpZ2luYWxfc2lnbmFsIHRvIHN0YXR1cyAqLworCQlpZiAoaXNfbWlfaW50KQorCQkJYm54MnhfYml0c19lbihicCwKKwkJCQkgICAgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwCisJCQkJICAgICsgcG9ydCo0LAorCQkJCSAgICBOSUdfU1RBVFVTX0VNQUMwX01JX0lOVCk7CisJCWVsc2UKKwkJCWJueDJ4X2JpdHNfZGlzKGJwLAorCQkJCSAgICAgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwCisJCQkJICAgICArIHBvcnQqNCwKKwkJCQkgICAgIE5JR19TVEFUVVNfRU1BQzBfTUlfSU5UKTsKKwkJLyogRm9yIGFsbCBsYXRjaGVkLXNpZ25hbD11cCA6IFJlLUFybSBMYXRjaCBzaWduYWxzICovCisJCVJFR19XUihicCwgTklHX1JFR19MQVRDSF9TVEFUVVNfMCArIHBvcnQqOCwKKwkJCSAgIChsYXRjaF9zdGF0dXMgJiAweGZmZmUpIHwgKGxhdGNoX3N0YXR1cyAmIDEpKTsKKwl9Cit9CiAvKgogICogbGluayBtYW5hZ2VtZW50CiAgKi8KIHN0YXRpYyB2b2lkIGJueDJ4X2xpbmtfaW50X2FjayhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCSAgICAgc3RydWN0IGxpbmtfdmFycyAqdmFycywgdTggaXNfMTBnKQorCQkJICAgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLCB1OCBpc18xMGcsCisJCQkgICAgIHU4IGlzX21pX2ludCkKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwpAQCAtNDA4Nyw2ICs1MzYzLDEwIEBACiAJCSAgICAgKE5JR19TVEFUVVNfWEdYUzBfTElOSzEwRyB8CiAJCSAgICAgIE5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVMgfAogCQkgICAgICBOSUdfU1RBVFVTX1NFUkRFUzBfTElOS19TVEFUVVMpKTsKKwlpZiAoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykKKwkgICAgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSkgeworCQlibngyeF84NDgxX3JlYXJtX2xhdGNoX3NpZ25hbChicCwgcG9ydCwgaXNfbWlfaW50KTsKKwl9CiAJaWYgKHZhcnMtPnBoeV9saW5rX3VwKSB7CiAJCWlmIChpc18xMGcpIHsKIAkJCS8qIERpc2FibGUgdGhlIDEwRyBsaW5rIGludGVycnVwdApAQCAtNDEwNiw3ICs1Mzg2LDggQEAKIAkJCQkgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNURVJfTUFTSykgPj4KIAkJCQkgICAgUE9SVF9IV19DRkdfTEFORV9TV0FQX0NGR19NQVNURVJfU0hJRlQpOwogCi0JCQlEUChORVRJRl9NU0dfTElOSywgIjFHIFhHWFMgcGh5IGxpbmsgdXBcbiIpOworCQkJRFAoTkVUSUZfTVNHX0xJTkssICIlZCBzcGVlZCBYR1hTIHBoeSBsaW5rIHVwXG4iLAorCQkJCSB2YXJzLT5saW5lX3NwZWVkKTsKIAkJCWJueDJ4X2JpdHNfZW4oYnAsCiAJCQkJICAgICAgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAogCQkJCSAgICAgICgoMSA8PCBzZXJfbGFuZSkgPDwKQEAgLTQxNTYsNjYgKzU0MzcsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgdm9pZCBibngyeF90dXJuX29uX2VmKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHU4IGV4dF9waHlfYWRkciwKLQkJCSAgIHUzMiBleHRfcGh5X3R5cGUpCi17Ci0JdTMyIGNudCA9IDA7Ci0JdTE2IGN0cmwgPSAwOwotCS8qIEVuYWJsZSBFTUFDMCBpbiB0byBlbmFibGUgTURJTyAqLwotCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfU0VULAotCSAgICAgICAoTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfUlNUX0VNQUMwX0hBUkRfQ09SRSA8PCBwb3J0KSk7Ci0JbXNsZWVwKDUpOwotCi0JLyogdGFrZSBleHQgcGh5IG91dCBvZiByZXNldCAqLwotCWJueDJ4X3NldF9ncGlvKGJwLAotCQkJICBNSVNDX1JFR0lTVEVSU19HUElPXzIsCi0JCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCwKLQkJCSAgcG9ydCk7Ci0KLQlibngyeF9zZXRfZ3BpbyhicCwKLQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAotCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsCi0JCQkgIHBvcnQpOwotCi0JLyogd2FpdCBmb3IgNW1zICovCi0JbXNsZWVwKDUpOwotCi0JZm9yIChjbnQgPSAwOyBjbnQgPCAxMDAwOyBjbnQrKykgewotCQltc2xlZXAoMSk7Ci0JCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgTURJT19QTUFfUkVHX0NUUkwsCi0JCQkgICAgICAmY3RybCk7Ci0JCWlmICghKGN0cmwgJiAoMTw8MTUpKSkgewotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJSZXNldCBjb21wbGV0ZWRcblxuIik7Ci0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJueDJ4X3R1cm5fb2ZmX3NmKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQpCi17Ci0JLyogcHV0IHNmIHRvIHJlc2V0ICovCi0JYm54Mnhfc2V0X2dwaW8oYnAsCi0JCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKLQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19MT1csCi0JCQkgIHBvcnQpOwotCWJueDJ4X3NldF9ncGlvKGJwLAotCQkJICBNSVNDX1JFR0lTVEVSU19HUElPXzIsCi0JCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fTE9XLAotCQkJICBwb3J0KTsKLX0KLQogdTggYm54MnhfZ2V0X2V4dF9waHlfZndfdmVyc2lvbihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTggZHJpdmVyX2xvYWRlZCwKIAkJCSAgICAgIHU4ICp2ZXJzaW9uLCB1MTYgbGVuKQogewogCXN0cnVjdCBibngyeCAqYnA7CiAJdTMyIGV4dF9waHlfdHlwZSA9IDA7CiAJdTMyIHNwaXJvbV92ZXIgPSAwOwotCXU4IHN0YXR1cyA9IDAgOworCXU4IHN0YXR1czsKIAogCWlmICh2ZXJzaW9uID09IE5VTEwgfHwgcGFyYW1zID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDIyNSw2ICs1NDUzLDcgQEAKIAkJICAgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwKIAkJCSAgICBwb3J0X21iW3BhcmFtcy0+cG9ydF0uZXh0X3BoeV9md192ZXJzaW9uKSk7CiAKKwlzdGF0dXMgPSAwOwogCS8qIHJlc2V0IHRoZSByZXR1cm5lZCB2YWx1ZSB0byB6ZXJvICovCiAJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKQEAgLTQyNDIsMTMgKzU0NzEsMTkgQEAKIAkJYnJlYWs7CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCXN0YXR1cyA9IGJueDJ4X2Zvcm1hdF92ZXIoc3Bpcm9tX3ZlciwgdmVyc2lvbiwgbGVuKTsKKwkJYnJlYWs7CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxOgorCQlzcGlyb21fdmVyID0gKChzcGlyb21fdmVyICYgMHhGODApID4+IDcpIDw8IDE2IHwKKwkJCShzcGlyb21fdmVyICYgMHg3Rik7CiAJCXN0YXR1cyA9IGJueDJ4X2Zvcm1hdF92ZXIoc3Bpcm9tX3ZlciwgdmVyc2lvbiwgbGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgorCQl2ZXJzaW9uWzBdID0gJ1wwJzsKIAkJYnJlYWs7CiAKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU6CkBAIC00MzMxLDEwICs1NTY2LDggQEAKIAogCWlmIChwYXJhbXMtPnN3aXRjaF9jZmcgPT0gU1dJVENIX0NGR18xMEcpIHsKIAkJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCWV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCQkvKiBDTDM3IEF1dG9uZWcgRW5hYmxlZCAqLwotCQlleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CiAJCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX05PVF9DT05OOgpAQCAtNDUwMSw2ICs1NzM0LDcgQEAKIAl1OCByYyA9IDA7CiAJdTMyIHRtcDsKIAl1MzIgZW1hY19iYXNlID0gcG9ydCA/IEdSQ0JBU0VfRU1BQzEgOiBHUkNCQVNFX0VNQUMwOworCiAJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9zZXRfbGVkOiBwb3J0ICV4LCBtb2RlICVkXG4iLCBwb3J0LCBtb2RlKTsKIAlEUChORVRJRl9NU0dfTElOSywgInNwZWVkIDB4JXgsIGh3X2xlZF9tb2RlIDB4JXhcbiIsCiAJCSBzcGVlZCwgaHdfbGVkX21vZGUpOwpAQCAtNDU2NSw3ICs1Nzk5LDcgQEAKIAkJCSAgICAgICZncF9zdGF0dXMpOwogCS8qIGxpbmsgaXMgdXAgb25seSBpZiBib3RoIGxvY2FsIHBoeSBhbmQgZXh0ZXJuYWwgcGh5IGFyZSB1cCAqLwogCWlmICgoZ3Bfc3RhdHVzICYgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzFfTElOS19TVEFUVVMpICYmCi0JICAgIGJueDJ4X2V4dF9waHlfaXNfbGlua191cChwYXJhbXMsIHZhcnMpKQorCSAgICBibngyeF9leHRfcGh5X2lzX2xpbmtfdXAocGFyYW1zLCB2YXJzLCAxKSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gLUVTUkNIOwpAQCAtNDU3OSw2ICs1ODEzLDcgQEAKIAl1OCByYyA9IDA7CiAJdTggbm9uX2V4dF9waHk7CiAJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCiAJLyogQWN0aXZhdGUgdGhlIGV4dGVybmFsIFBIWSAqLwogCWJueDJ4X2V4dF9waHlfcmVzZXQocGFyYW1zLCB2YXJzKTsKIApAQCAtNDYzMCwxMSArNTg2NSwxMCBAQAogCWlmIChub25fZXh0X3BoeSB8fAogCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUpIHx8CiAJICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikgfHwKLQkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxKSB8fAogCSAgICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX0VYVF9QSFkpKSB7CiAJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKQogCQkJYm54Mnhfc2V0X3BhcmFsbGVsX2RldGVjdGlvbihwYXJhbXMsIHZhcnMtPnBoeV9mbGFncyk7Ci0JCWJueDJ4X2luaXRfaW50ZXJuYWxfcGh5KHBhcmFtcywgdmFycyk7CisJCWJueDJ4X2luaXRfaW50ZXJuYWxfcGh5KHBhcmFtcywgdmFycywgbm9uX2V4dF9waHkpOwogCX0KIAogCWlmICghbm9uX2V4dF9waHkpCkBAIC00NjUzLDExICs1ODg3LDExIEBACiB1OCBibngyeF9waHlfaW5pdChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgc3RydWN0IGxpbmtfdmFycyAqdmFycykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQogCXUzMiB2YWw7Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJQaHkgSW5pdGlhbGl6YXRpb24gc3RhcnRlZCBcbiIpOwotCURQKE5FVElGX01TR19MSU5LLCAicmVxX3NwZWVkID0gJWQsIHJlcV9mbG93Y3RybD0lZFxuIiwKLQkJICBwYXJhbXMtPnJlcV9saW5lX3NwZWVkLCBwYXJhbXMtPnJlcV9mbG93X2N0cmwpOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJQaHkgSW5pdGlhbGl6YXRpb24gc3RhcnRlZFxuIik7CisJRFAoTkVUSUZfTVNHX0xJTkssICJyZXFfc3BlZWQgJWQsIHJlcV9mbG93Y3RybCAlZFxuIiwKKwkJIHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQsIHBhcmFtcy0+cmVxX2Zsb3dfY3RybCk7CiAJdmFycy0+bGlua19zdGF0dXMgPSAwOwogCXZhcnMtPnBoeV9saW5rX3VwID0gMDsKIAl2YXJzLT5saW5rX3VwID0gMDsKQEAgLTQ2NzEsNyArNTkwNSw2IEBACiAJZWxzZQogCQl2YXJzLT5waHlfZmxhZ3MgPSBQSFlfWEdYU19GTEFHOwogCi0KIAkvKiBkaXNhYmxlIGF0dGVudGlvbnMgKi8KIAlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBhcmFtcy0+cG9ydCo0LAogCQkgICAgICAgKE5JR19NQVNLX1hHWFMwX0xJTktfU1RBVFVTIHwKQEAgLTQ2ODIsNiArNTkxNSw3IEBACiAJYm54MnhfZW1hY19pbml0KHBhcmFtcywgdmFycyk7CiAKIAlpZiAoQ0hJUF9SRVZfSVNfRlBHQShicCkpIHsKKwogCQl2YXJzLT5saW5rX3VwID0gMTsKIAkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwogCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKQEAgLTQ2OTAsNyArNTkyNCw4IEBACiAJCS8qIGVuYWJsZSBvbiBFMS41IEZQR0EgKi8KIAkJaWYgKENISVBfSVNfRTFIKGJwKSkgewogCQkJdmFycy0+Zmxvd19jdHJsIHw9Ci0JCQkJKEJOWDJYX0ZMT1dfQ1RSTF9UWCB8IEJOWDJYX0ZMT1dfQ1RSTF9SWCk7CisJCQkJCShCTlgyWF9GTE9XX0NUUkxfVFggfAorCQkJCQkgQk5YMlhfRkxPV19DVFJMX1JYKTsKIAkJCXZhcnMtPmxpbmtfc3RhdHVzIHw9CiAJCQkJCShMSU5LX1NUQVRVU19UWF9GTE9XX0NPTlRST0xfRU5BQkxFRCB8CiAJCQkJCSBMSU5LX1NUQVRVU19SWF9GTE9XX0NPTlRST0xfRU5BQkxFRCk7CkBAIC00Njk5LDggKzU5MzQsNyBAQAogCQlibngyeF9lbWFjX2VuYWJsZShwYXJhbXMsIHZhcnMsIDApOwogCQlibngyeF9wYmZfdXBkYXRlKHBhcmFtcywgdmFycy0+Zmxvd19jdHJsLCB2YXJzLT5saW5lX3NwZWVkKTsKIAkJLyogZGlzYWJsZSBkcmFpbiAqLwotCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFCi0JCQkJICAgICsgcGFyYW1zLT5wb3J0KjQsIDApOworCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsgcGFyYW1zLT5wb3J0KjQsIDApOwogCiAJCS8qIHVwZGF0ZSBzaGFyZWQgbWVtb3J5ICovCiAJCWJueDJ4X3VwZGF0ZV9tbmcocGFyYW1zLCB2YXJzLT5saW5rX3N0YXR1cyk7CkBAIC00NzMwLDYgKzU5NjQsNyBAQAogCiAJfSBlbHNlCiAJaWYgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19CTUFDKSB7CisKIAkJdmFycy0+bGlua191cCA9IDE7CiAJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKIAkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CkBAIC00NzQ0LDcgKzU5NzksOSBAQAogCiAJCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUgKwogCQkgICAgcGFyYW1zLT5wb3J0KjQsIDApOworCiAJfSBlbHNlIGlmIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfRU1BQykgeworCiAJCXZhcnMtPmxpbmtfdXAgPSAxOwogCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKIAkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CkBAIC00NzYwLDggKzU5OTcsMTAgQEAKIAkJCQkJICAgICAgdmFycy0+ZHVwbGV4KTsKIAkJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERSArCiAJCSAgICBwYXJhbXMtPnBvcnQqNCwgMCk7CisKIAl9IGVsc2UgaWYgKChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfWEdYU18xMCkgfHwKLQkJICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX0VYVF9QSFkpKSB7CisJCSAgIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfRVhUX1BIWSkpIHsKKwogCQl2YXJzLT5saW5rX3VwID0gMTsKIAkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwogCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKQEAgLTQ3OTAsMTAgKzYwMjksMTQgQEAKIAkJfQogCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsKIAkJCSAgICBwYXJhbXMtPnBvcnQqNCwgMCk7CisKKwkJYm54Mnhfc2V0X2xlZChicCwgcGFyYW1zLT5wb3J0LCBMRURfTU9ERV9PUEVSLAorCQkJICAgIHZhcnMtPmxpbmVfc3BlZWQsIHBhcmFtcy0+aHdfbGVkX21vZGUsCisJCQkgICAgcGFyYW1zLT5jaGlwX2lkKTsKKwogCX0gZWxzZQogCS8qIE5vIGxvb3BiYWNrICovCiAJewotCiAJCWJueDJ4X3BoeV9kZWFzc2VydChwYXJhbXMsIHZhcnMtPnBoeV9mbGFncyk7CiAJCXN3aXRjaCAocGFyYW1zLT5zd2l0Y2hfY2ZnKSB7CiAJCWNhc2UgU1dJVENIX0NGR18xRzoKQEAgLTQ4MDEsOCArNjA0NCw3IEBACiAJCQlpZiAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgogCQkJICAgICBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX01BU0spID09CiAJCQkgICAgIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfQkNNNTQ4MikgewotCQkJCXZhcnMtPnBoeV9mbGFncyB8PQotCQkJCQlQSFlfU0dNSUlfRkxBRzsKKwkJCQl2YXJzLT5waHlfZmxhZ3MgfD0gUEhZX1NHTUlJX0ZMQUc7CiAJCQl9CiAKIAkJCXZhbCA9IFJFR19SRChicCwKQEAgLTQ4MjMsNyArNjA2NSw2IEBACiAJCWRlZmF1bHQ6CiAJCQlEUChORVRJRl9NU0dfTElOSywgIkludmFsaWQgc3dpdGNoX2NmZ1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWJyZWFrOwogCQl9CiAJCURQKE5FVElGX01TR19MSU5LLCAiUGh5IGFkZHJlc3MgPSAweCV4XG4iLCBwYXJhbXMtPnBoeV9hZGRyKTsKIApAQCAtNDg0MywyNCArNjA4NCwyMyBAQAogCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwgZXh0X3BoeV9hZGRyLAogCQkgICAgICAgTURJT19QTUFfREVWQUQsCiAJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsIDB4MDAwMSk7Ci0KLQkvKiBEaXNhYmxlIFRyYW5zbWl0dGVyICovCi0JYm54MnhfYmNtODcyNl9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBvcnQsIGV4dF9waHlfYWRkciwgMCk7Ci0KIH0KIAogdTggYm54MnhfbGlua19yZXNldChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgc3RydWN0IGxpbmtfdmFycyAqdmFycywKIAkJICB1OCByZXNldF9leHRfcGh5KQogewotCiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTMyIGV4dF9waHlfY29uZmlnID0gcGFyYW1zLT5leHRfcGh5X2NvbmZpZzsKIAl1MTYgaHdfbGVkX21vZGUgPSBwYXJhbXMtPmh3X2xlZF9tb2RlOwogCXUzMiBjaGlwX2lkID0gcGFyYW1zLT5jaGlwX2lkOwogCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CiAJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKGV4dF9waHlfY29uZmlnKTsKLQkvKiBkaXNhYmxlIGF0dGVudGlvbnMgKi8KKwl1MzIgdmFsID0gUkVHX1JEKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKworCQkJICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLCBkZXZfaW5mby4KKwkJCQkgICAgICBwb3J0X2ZlYXR1cmVfY29uZmlnW3BhcmFtcy0+cG9ydF0uCisJCQkJICAgICAgY29uZmlnKSk7CiAKKwkvKiBkaXNhYmxlIGF0dGVudGlvbnMgKi8KIAl2YXJzLT5saW5rX3N0YXR1cyA9IDA7CiAJYm54MnhfdXBkYXRlX21uZyhwYXJhbXMsIHZhcnMtPmxpbmtfc3RhdHVzKTsKIAlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKQEAgLTQ4OTMsNiArNjEzMywyMCBAQAogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgogCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgorCQl7CisKKwkJCS8qIERpc2FibGUgVHJhbnNtaXR0ZXIgKi8KKwkJCXU4IGV4dF9waHlfYWRkciA9CisJCQkJWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCQlpZiAoKHZhbCAmIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9NQVNLKSA9PQorCQkJICAgIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9ESVNBQkxFX1RYX0xBU0VSKQorCQkJCWJueDJ4X3NmcF9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBvcnQsCisJCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCQkJCWV4dF9waHlfYWRkciwgMCk7CisJCQlicmVhazsKKwkJfQogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CiAJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgODA3MyBwb3J0ICVkIGludG8gIgogCQkJCSAibG93IHBvd2VyIG1vZGVcbiIsCkBAIC00OTAzLDkgKzYxNTcsOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKIAkJewotCQkJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKLQkJCQkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJCSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJCQl1OCBleHRfcGh5X2FkZHIgPQorCQkJCVhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCQkJLyogU2V0IHNvZnQgcmVzZXQgKi8KIAkJCWJueDJ4Xzg3MjZfcmVzZXRfcGh5KGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfYWRkcik7CiAJCQlicmVhazsKQEAgLTQ5NDMsNiArNjE5Niw3IEBACiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwogCURQKE5FVElGX01TR19MSU5LLCAiUG9ydCAleDogTGluayBpcyBkb3duXG4iLCBwb3J0KTsKIAlibngyeF9zZXRfbGVkKGJwLCBwb3J0LCBMRURfTU9ERV9PRkYsCiAJCSAgICAwLCBwYXJhbXMtPmh3X2xlZF9tb2RlLApAQCAtNDk3OSw2ICs2MjMzLDcgQEAKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwogCXU4IHJjID0gMDsKKwogCXZhcnMtPmxpbmtfc3RhdHVzIHw9IExJTktfU1RBVFVTX0xJTktfVVA7CiAJaWYgKGxpbmtfMTBnKSB7CiAJCWJueDJ4X2JtYWNfZW5hYmxlKHBhcmFtcywgdmFycywgMCk7CkBAIC01MDMyLDE2ICs2Mjg3LDE5IEBACiAJdTggbGlua18xMGc7CiAJdTggZXh0X3BoeV9saW5rX3VwLCByYyA9IDA7CiAJdTMyIGV4dF9waHlfdHlwZTsKKwl1OCBpc19taV9pbnQgPSAwOwogCiAJRFAoTkVUSUZfTVNHX0xJTkssICJwb3J0ICV4LCBYR1hTPyV4LCBpbnRfc3RhdHVzIDB4JXhcbiIsCi0JIHBvcnQsCi0JKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpLAotCSBSRUdfUkQoYnAsIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCkpOworCQkgcG9ydCwgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpLAorCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQpKTsKIAorCWlzX21pX2ludCA9ICh1OCkoUkVHX1JEKGJwLCBOSUdfUkVHX0VNQUMwX1NUQVRVU19NSVNDX01JX0lOVCArCisJCQkJICAgIHBvcnQqMHgxOCkgPiAwKTsKIAlEUChORVRJRl9NU0dfTElOSywgImludF9tYXNrIDB4JXggTUlfSU5UICV4LCBTRVJERVNfTElOSyAleFxuIiwKLQlSRUdfUkQoYnAsIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQpLAotCVJFR19SRChicCwgTklHX1JFR19FTUFDMF9TVEFUVVNfTUlTQ19NSV9JTlQgKyBwb3J0KjB4MTgpLAotCVJFR19SRChicCwgTklHX1JFR19TRVJERVMwX1NUQVRVU19MSU5LX1NUQVRVUyArIHBvcnQqMHgzYykpOworCQkgUkVHX1JEKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0KSwKKwkJIGlzX21pX2ludCwKKwkJIFJFR19SRChicCwKKwkJCSAgICBOSUdfUkVHX1NFUkRFUzBfU1RBVFVTX0xJTktfU1RBVFVTICsgcG9ydCoweDNjKSk7CiAKIAlEUChORVRJRl9NU0dfTElOSywgIiAxMEcgJXgsIFhHWFNfTElOSyAleFxuIiwKIAkgIFJFR19SRChicCwgTklHX1JFR19YR1hTMF9TVEFUVVNfTElOSzEwRyArIHBvcnQqMHg2OCksCkBAIC01MDUzLDcgKzYzMTEsNyBAQAogCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCiAJLyogQ2hlY2sgZXh0ZXJuYWwgbGluayBjaGFuZ2Ugb25seSBmb3Igbm9uLWRpcmVjdCAqLwotCWV4dF9waHlfbGlua191cCA9IGJueDJ4X2V4dF9waHlfaXNfbGlua191cChwYXJhbXMsIHZhcnMpOworCWV4dF9waHlfbGlua191cCA9IGJueDJ4X2V4dF9waHlfaXNfbGlua191cChwYXJhbXMsIHZhcnMsIGlzX21pX2ludCk7CiAKIAkvKiBSZWFkIGdwX3N0YXR1cyAqLwogCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwb3J0LCBwYXJhbXMtPnBoeV9hZGRyLApAQCAtNTA2MSw3ICs2MzE5LDggQEAKIAkJCSAgICAgIE1ESU9fR1BfU1RBVFVTX1RPUF9BTl9TVEFUVVMxLAogCQkJICAgICAgJmdwX3N0YXR1cyk7CiAKLQlyYyA9IGJueDJ4X2xpbmtfc2V0dGluZ3Nfc3RhdHVzKHBhcmFtcywgdmFycywgZ3Bfc3RhdHVzKTsKKwlyYyA9IGJueDJ4X2xpbmtfc2V0dGluZ3Nfc3RhdHVzKHBhcmFtcywgdmFycywgZ3Bfc3RhdHVzLAorCQkJCSAgICAgIGV4dF9waHlfbGlua191cCk7CiAJaWYgKHJjICE9IDApCiAJCXJldHVybiByYzsKIApAQCAtNTA3Myw3ICs2MzMyLDcgQEAKIAkJICAgICh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEXzE1MDAwKSB8fAogCQkgICAgKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfMTYwMDApKTsKIAotCWJueDJ4X2xpbmtfaW50X2FjayhwYXJhbXMsIHZhcnMsIGxpbmtfMTBnKTsKKwlibngyeF9saW5rX2ludF9hY2socGFyYW1zLCB2YXJzLCBsaW5rXzEwZywgaXNfbWlfaW50KTsKIAogCS8qIEluIGNhc2UgZXh0ZXJuYWwgcGh5IGxpbmsgaXMgdXAsIGFuZCBpbnRlcm5hbCBsaW5rIGlzIGRvd24KIAkoIG5vdCBpbml0aWFsaXplZCB5ZXQgcHJvYmFibHkgYWZ0ZXIgbGluayBpbml0aWFsaXphdGlvbiwgaXQgbmVlZHMKQEAgLTUwODYsNyArNjM0NSw3IEBACiAJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNSkgJiYKIAkgICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KSAmJgogCSAgICAoZXh0X3BoeV9saW5rX3VwICYmICF2YXJzLT5waHlfbGlua191cCkpCi0JCWJueDJ4X2luaXRfaW50ZXJuYWxfcGh5KHBhcmFtcywgdmFycyk7CisJCWJueDJ4X2luaXRfaW50ZXJuYWxfcGh5KHBhcmFtcywgdmFycywgMCk7CiAKIAkvKiBsaW5rIGlzIHVwIG9ubHkgaWYgYm90aCBsb2NhbCBwaHkgYW5kIGV4dGVybmFsIHBoeSBhcmUgdXAgKi8KIAl2YXJzLT5saW5rX3VwID0gKGV4dF9waHlfbGlua191cCAmJiB2YXJzLT5waHlfbGlua191cCk7CkBAIC01MTE5LDEwICs2Mzc4LDcgQEAKIAkJCSAgICAgIE5JR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVMgfAogCQkJICAgICAgTklHX01BU0tfTUlfSU5UKSk7CiAKLQkJZXh0X3BoeV9hZGRyW3BvcnRdID0KLQkJCSgoZXh0X3BoeV9jb25maWcgJgotCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwkJZXh0X3BoeV9hZGRyW3BvcnRdID0gWEdYU19FWFRfUEhZX0FERFIoZXh0X3BoeV9jb25maWcpOwogCiAJCS8qIE5lZWQgdG8gdGFrZSB0aGUgcGh5IG91dCBvZiBsb3cgcG93ZXIgbW9kZSBpbiBvcmRlcgogCQkJdG8gd3JpdGUgdG8gYWNjZXNzIGl0cyByZWdpc3RlcnMgKi8KQEAgLTUyMTcsMTIgKzY0NzMsODEgQEAKIAogfQogCitzdGF0aWMgdTggYm54MnhfODcyN19jb21tb25faW5pdF9waHkoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNobWVtX2Jhc2UpCit7CisJdTggZXh0X3BoeV9hZGRyW1BPUlRfTUFYXTsKKwlzOCBwb3J0LCBmaXJzdF9wb3J0LCBpOworCXUzMiBzd2FwX3ZhbCwgc3dhcF9vdmVycmlkZTsKKwlEUChORVRJRl9NU0dfTElOSywgIkV4ZWN1dGluZyBCQ004NzI3IGNvbW1vbiBpbml0XG4iKTsKKwlzd2FwX3ZhbCA9IFJFR19SRChicCwgIE5JR19SRUdfUE9SVF9TV0FQKTsKKwlzd2FwX292ZXJyaWRlID0gUkVHX1JEKGJwLCAgTklHX1JFR19TVFJBUF9PVkVSUklERSk7CisKKwlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCAxIF4gKHN3YXBfdmFsICYmIHN3YXBfb3ZlcnJpZGUpKTsKKwltc2xlZXAoNSk7CisKKwlpZiAoc3dhcF92YWwgJiYgc3dhcF9vdmVycmlkZSkKKwkJZmlyc3RfcG9ydCA9IFBPUlRfMDsKKwllbHNlCisJCWZpcnN0X3BvcnQgPSBQT1JUXzE7CisKKwkvKiBQQVJUMSAtIFJlc2V0IGJvdGggcGh5cyAqLworCWZvciAoaSA9IDAsIHBvcnQgPSBmaXJzdF9wb3J0OyBpIDwgUE9SVF9NQVg7IGkrKywgcG9ydCA9ICFwb3J0KSB7CisJCS8qIEV4dHJhY3QgdGhlIGV4dCBwaHkgYWRkcmVzcyBmb3IgdGhlIHBvcnQgKi8KKwkJdTMyIGV4dF9waHlfY29uZmlnID0gUkVHX1JEKGJwLCBzaG1lbV9iYXNlICsKKwkJCQkJb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwKKwkJICAgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uZXh0ZXJuYWxfcGh5X2NvbmZpZykpOworCisJCS8qIGRpc2FibGUgYXR0ZW50aW9ucyAqLworCQlibngyeF9iaXRzX2RpcyhicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKKwkJCSAgICAgKE5JR19NQVNLX1hHWFMwX0xJTktfU1RBVFVTIHwKKwkJCSAgICAgIE5JR19NQVNLX1hHWFMwX0xJTksxMEcgfAorCQkJICAgICAgTklHX01BU0tfU0VSREVTMF9MSU5LX1NUQVRVUyB8CisJCQkgICAgICBOSUdfTUFTS19NSV9JTlQpKTsKKworCQlleHRfcGh5X2FkZHJbcG9ydF0gPSBYR1hTX0VYVF9QSFlfQUREUihleHRfcGh5X2NvbmZpZyk7CisKKwkJLyogUmVzZXQgdGhlIHBoeSAqLworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAorCQkJICAgICAgIDE8PDE1KTsKKwl9CisKKwkvKiBBZGQgZGVsYXkgb2YgMTUwbXMgYWZ0ZXIgcmVzZXQgKi8KKwltc2xlZXAoMTUwKTsKKworCS8qIFBBUlQyIC0gRG93bmxvYWQgZmlybXdhcmUgdG8gYm90aCBwaHlzICovCisJZm9yIChpID0gMCwgcG9ydCA9IGZpcnN0X3BvcnQ7IGkgPCBQT1JUX01BWDsgaSsrLCBwb3J0ID0gIXBvcnQpIHsKKwkJdTE2IGZ3X3ZlcjE7CisKKwkJYm54MnhfYmNtODcyN19leHRlcm5hbF9yb21fYm9vdChicCwgcG9ydCwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyW3BvcnRdLCBzaG1lbV9iYXNlKTsKKworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCQkgICAgICBleHRfcGh5X2FkZHJbcG9ydF0sCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMSwgJmZ3X3ZlcjEpOworCQlpZiAoZndfdmVyMSA9PSAwIHx8IGZ3X3ZlcjEgPT0gMHg0MzIxKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkgImJueDJ4Xzg3MjdfY29tbW9uX2luaXRfcGh5IHBvcnQgJXg6IgorCQkJCSAiRG93bmxvYWQgZmFpbGVkLiBmdyB2ZXJzaW9uID0gMHgleFxuIiwKKwkJCQkgcG9ydCwgZndfdmVyMSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCiAKIHN0YXRpYyB1OCBibngyeF84NzI2X2NvbW1vbl9pbml0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc2htZW1fYmFzZSkKIHsKIAl1OCBleHRfcGh5X2FkZHI7CiAJdTMyIHZhbDsKIAlzOCBwb3J0OworCiAJLyogVXNlIHBvcnQxIGJlY2F1c2Ugb2YgdGhlIHN0YXRpYyBwb3J0LXN3YXAgKi8KIAkvKiBFbmFibGUgdGhlIG1vZHVsZSBkZXRlY3Rpb24gaW50ZXJydXB0ICovCiAJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19HUElPX0VWRU5UX0VOKTsKQEAgLTUyMzAsNyArNjU1NSw3IEBACiAJCSgxPDwoTUlTQ19SRUdJU1RFUlNfR1BJT18zICsgTUlTQ19SRUdJU1RFUlNfR1BJT19QT1JUX1NISUZUKSkpOwogCVJFR19XUihicCwgTUlTQ19SRUdfR1BJT19FVkVOVF9FTiwgdmFsKTsKIAotCWJueDJ4X2h3X3Jlc2V0KGJwLCAxKTsKKwlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCAxKTsKIAltc2xlZXAoNSk7CiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFBPUlRfTUFYOyBwb3J0KyspIHsKIAkJLyogRXh0cmFjdCB0aGUgZXh0IHBoeSBhZGRyZXNzIGZvciB0aGUgcG9ydCAqLwpAQCAtNTIzOCwxMCArNjU2Myw3IEBACiAJCQkJCW9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCiAJCQlkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5leHRlcm5hbF9waHlfY29uZmlnKSk7CiAKLQkJZXh0X3BoeV9hZGRyID0KLQkJCSgoZXh0X3BoeV9jb25maWcgJgotCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwkJZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIoZXh0X3BoeV9jb25maWcpOwogCQlEUChORVRJRl9NU0dfTElOSywgIjg3MjZfY29tbW9uX2luaXQgOiBleHRfcGh5X2FkZHIgPSAweCV4XG4iLAogCQkJIGV4dF9waHlfYWRkcik7CiAKQEAgLTUyNzUsNiArNjU5NywxMiBAQAogCQlyYyA9IGJueDJ4XzgwNzNfY29tbW9uX2luaXRfcGh5KGJwLCBzaG1lbV9iYXNlKTsKIAkJYnJlYWs7CiAJfQorCisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyN19OT0M6CisJCXJjID0gYm54MnhfODcyN19jb21tb25faW5pdF9waHkoYnAsIHNobWVtX2Jhc2UpOworCQlicmVhazsKKwogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKIAkJLyogR1BJTzEgYWZmZWN0cyBib3RoIHBvcnRzLCBzbyB0aGVyZSdzIG5lZWQgdG8gcHVsbAogCQlpdCBmb3Igc2luZ2xlIHBvcnQgYWxvbmUgKi8KQEAgLTUyOTEsOSArNjYxOSw3IEBACiAJcmV0dXJuIHJjOwogfQogCi0KLQotc3RhdGljIHZvaWQgYm54Mnhfc2Z4NzEwMV9zcF9zd19yZXNldChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LCB1OCBwaHlfYWRkcikKK3ZvaWQgYm54Mnhfc2Z4NzEwMV9zcF9zd19yZXNldChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LCB1OCBwaHlfYWRkcikKIHsKIAl1MTYgdmFsLCBjbnQ7CiAKQEAgLTUzMjMsMzc3ICs2NjQ5LDMgQEAKIAkJCWJyZWFrOwogCX0KIH0KLSNkZWZpbmUgUkVTRVJWRURfU0laRSAyNTYKLS8qIG1heCBhcHBsaWNhdGlvbiBpcyAxNjBLIGJ5dGVzIC0gZGF0YSBhdCBlbmQgb2YgUkFNICovCi0jZGVmaW5lIE1BWF9BUFBfU0laRSAoMTYwKjEwMjQgLSBSRVNFUlZFRF9TSVpFKQotCi0vKiBIZWFkZXIgaXMgMTQgYnl0ZXMgKi8KLSNkZWZpbmUgSEVBREVSX1NJWkUgMTQKLSNkZWZpbmUgREFUQV9PRkZTRVQgSEVBREVSX1NJWkUKLQotI2RlZmluZSBTUElfU1RBUlRfVFJBTlNGRVIoYnAsIHBvcnQsIGV4dF9waHlfYWRkcikgXAotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsIFwKLQkJCWV4dF9waHlfYWRkciwgXAotCQkJTURJT19QQ1NfREVWQUQsIFwKLQkJCU1ESU9fUENTX1JFR183MTAxX1NQSV9DVFJMX0FERFIsIDEpCi0KLS8qIFByb2dyYW1zIGFuIGltYWdlIHRvIERTUCdzIGZsYXNoIHZpYSB0aGUgU1BJIHBvcnQqLwotc3RhdGljIHU4IGJueDJ4X3NmeDcxMDFfZmxhc2hfZG93bmxvYWQoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKLQkJCQkgICAgIHU4IGV4dF9waHlfYWRkciwKLQkJCQkgICAgIGNoYXIgZGF0YVtdLCB1MzIgc2l6ZSkKLXsKLQljb25zdCB1MTYgbnVtX3RyYW5zID0gc2l6ZS80OyAvKiA0IGJ5dGVzIGNhbiBiZSBzZW50IGF0IGEgdGltZSAqLwotCS8qIERvZXNuJ3QgaW5jbHVkZSBsYXN0IHRyYW5zISovCi0JY29uc3QgdTE2IGxhc3RfdHJhbnNfc2l6ZSA9IHNpemUlNDsgLyogTnVtIGJ5dGVzIG9uIGxhc3QgdHJhbnMgKi8KLQl1MTYgdHJhbnNfY250LCBieXRlX2NudDsKLQl1MzIgZGF0YV9pbmRleDsKLQl1MTYgdG1wOwotCXUxNiBjb2RlX3N0YXJ0ZWQgPSAwOwotCXUxNiBpbWFnZV9yZXZpc2lvbjEsIGltYWdlX3JldmlzaW9uMjsKLQl1MTYgY250OwotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9zZng3MTAxX2ZsYXNoX2Rvd25sb2FkIGZpbGVfc2l6ZT0lZFxuIiwgc2l6ZSk7Ci0JLyogR29pbmcgdG8gZmxhc2gqLwotCWlmICgoc2l6ZS1IRUFERVJfU0laRSkgPiBNQVhfQVBQX1NJWkUpIHsKLQkJLyogVGhpcyB2ZXJ5IG9mdGVuIHdpbGwgYmUgdGhlIGNhc2UsIGJlY2F1c2UgdGhlIGltYWdlIGlzIGJ1aWx0Ci0JCXdpdGggMTYwS2J5dGVzIHNpemUgd2hlcmVhcyB0aGUgdG90YWwgaW1hZ2Ugc2l6ZSBtdXN0IGFjdHVhbGx5Ci0JCWJlIDE2MEtieXRlcy1SRVNFUlZFRF9TSVpFICovCi0JCURQKE5FVElGX01TR19MSU5LLCAiV2FybmluZywgZmlsZSBzaXplIHdhcyAlZCBieXRlcyAiCi0JCQkgInRydW5jYXRlZCB0byAlZCBieXRlc1xuIiwgc2l6ZSwgTUFYX0FQUF9TSVpFKTsKLQkJc2l6ZSA9IE1BWF9BUFBfU0laRStIRUFERVJfU0laRTsKLQl9Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJGaWxlIHZlcnNpb24gaXMgJWMlY1xuIiwgZGF0YVsweDE0ZV0sIGRhdGFbMHgxNGZdKTsKLQlEUChORVRJRl9NU0dfTElOSywgIiAgCSAgICAgICVjJWNcbiIsIGRhdGFbMHgxNTBdLCBkYXRhWzB4MTUxXSk7Ci0JLyogUHV0IHRoZSBEU1AgaW4gZG93bmxvYWQgbW9kZSBieSBzZXR0aW5nIEZMQVNIX0NGR1syXSB0byAxCi0JICAgYW5kIGlzc3VpbmcgYSByZXNldC4qLwotCi0JYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKLQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19ISUdILCBwb3J0KTsKLQotCWJueDJ4X3NmeDcxMDFfc3Bfc3dfcmVzZXQoYnAsIHBvcnQsIGV4dF9waHlfYWRkcik7Ci0KLQkvKiB3YWl0IDAuNSBzZWMgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDsgY250KyspCi0JCW1zbGVlcCg1KTsKLQotCS8qIE1ha2Ugc3VyZSB3ZSBjYW4gYWNjZXNzIHRoZSBEU1AKLQkgICBBbmQgaXQncyBpbiB0aGUgY29ycmVjdCBtb2RlICh3YWl0aW5nIGZvciBkb3dubG9hZCkgKi8KLQotCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICBNRElPX1BDU19ERVZBRCwKLQkJICAgICAgTURJT19QQ1NfUkVHXzcxMDFfRFNQX0FDQ0VTUywgJnRtcCk7Ci0KLQlpZiAodG1wICE9IDB4MDAwQSkgewotCQlEUChORVRJRl9NU0dfTElOSywgIkRTUCBpcyBub3QgaW4gd2FpdGluZyBvbiBkb3dubG9hZCBtb2RlLiAiCi0JCQkgIkV4cGVjdGVkIDB4MDAwQSwgcmVhZCAweCUwNFhcbiIsIHRtcCk7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiRG93bmxvYWQgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogTXV4IHRoZSBTUEkgaW50ZXJmYWNlIGF3YXkgZnJvbSB0aGUgaW50ZXJuYWwgcHJvY2Vzc29yICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1BDU19ERVZBRCwKLQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9NVVgsIDEpOwotCi0JLyogUmVzZXQgdGhlIFNQSSBwb3J0ICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1BDU19ERVZBRCwKLQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9DVFJMX0FERFIsIDApOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfQ1RSTF9BRERSLAotCQkgICAgICAgKDE8PE1ESU9fUENTX1JFR183MTAxX1NQSV9SRVNFVF9CSVQpKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0NUUkxfQUREUiwgMCk7Ci0KLQkvKiBFcmFzZSB0aGUgZmxhc2ggKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKLQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFJfV1JJVEVfRU5BQkxFX0NNRCk7Ci0KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0JZVEVTX1RPX1RSQU5TRkVSX0FERFIsCi0JCSAgICAgICAxKTsKLQotCVNQSV9TVEFSVF9UUkFOU0ZFUihicCwgcG9ydCwgZXh0X3BoeV9hZGRyKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKLQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFJfQlVMS19FUkFTRV9DTUQpOwotCi0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1BDU19ERVZBRCwKLQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9CWVRFU19UT19UUkFOU0ZFUl9BRERSLAotCQkgICAgICAgMSk7Ci0JU1BJX1NUQVJUX1RSQU5TRkVSKGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOwotCi0JLyogV2FpdCAxMCBzZWNvbmRzLCB0aGUgbWF4aW11bSB0aW1lIGZvciB0aGUgZXJhc2UgdG8gY29tcGxldGUgKi8KLQlEUChORVRJRl9NU0dfTElOSywgIkVyYXNpbmcgZmxhc2gsIHRoaXMgdGFrZXMgMTAgc2Vjb25kcy4uLlxuIik7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCAxMDAwOyBjbnQrKykKLQkJbXNsZWVwKDEwKTsKLQotCURQKE5FVElGX01TR19MSU5LLCAiRG93bmxvYWRpbmcgZmxhc2gsIHBsZWFzZSB3YWl0Li4uXG4iKTsKLQlkYXRhX2luZGV4ID0gMDsKLQlmb3IgKHRyYW5zX2NudCA9IDA7IHRyYW5zX2NudCA8IG51bV90cmFuczsgdHJhbnNfY250KyspIHsKLQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkJICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgIE1ESU9fUENTX0RFVkFELAotCQkJICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSLAotCQkJICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSX1dSSVRFX0VOQUJMRV9DTUQpOwotCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0JZVEVTX1RPX1RSQU5TRkVSX0FERFIsCi0JCQkgICAgICAgMSk7Ci0JCVNQSV9TVEFSVF9UUkFOU0ZFUihicCwgcG9ydCwgZXh0X3BoeV9hZGRyKTsKLQotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCi0JCQkgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFJfUEFHRV9QUk9HUkFNX0NNRCk7Ci0KLQkJLyogQml0cyAyMy0xNiBvZiBhZGRyZXNzICovCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKLQkJCSAgICAgICAoZGF0YV9pbmRleD4+MTYpKTsKLQkJLyogQml0cyAxNS04IG9mIGFkZHJlc3MgKi8KLQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgICBNRElPX1BDU19ERVZBRCwKLQkJCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSLAotCQkJICAgICAgIChkYXRhX2luZGV4Pj44KSk7Ci0KLQkJLyogQml0cyA3LTAgb2YgYWRkcmVzcyAqLwotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCi0JCQkgICAgICAgKCh1MTYpZGF0YV9pbmRleCkpOwotCi0JCWJ5dGVfY250ID0gMDsKLQkJd2hpbGUgKGJ5dGVfY250IDwgNCAmJiBkYXRhX2luZGV4IDwgc2l6ZSkgewotCQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCi0JCQkgICAgICAgZGF0YVtkYXRhX2luZGV4KytdKTsKLQkJCWJ5dGVfY250Kys7Ci0JCX0KLQotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9CWVRFU19UT19UUkFOU0ZFUl9BRERSLAotCQkJICAgICAgIGJ5dGVfY250KzQpOwotCi0JCVNQSV9TVEFSVF9UUkFOU0ZFUihicCwgcG9ydCwgZXh0X3BoeV9hZGRyKTsKLQkJbXNsZWVwKDUpOyAvKiBXYWl0IDUgbXMgbWluaW11bSBiZXR3ZWVuIHRyYW5zcyAqLwotCi0JCS8qIExldCB0aGUgdXNlciBrbm93IHNvbWV0aGluZydzIGdvaW5nIG9uLiovCi0JCS8qIGEgcGFjaWZpZXIgZXZlciA0SyAqLwotCQlpZiAoKGRhdGFfaW5kZXggJSAxMDIzKSA9PSAwKQotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJEb3dubG9hZCAlZCUlXG4iLCBkYXRhX2luZGV4L3NpemUpOwotCX0KLQotCURQKE5FVElGX01TR19MSU5LLCAiXG4iKTsKLQkvKiBUcmFuc2ZlciB0aGUgbGFzdCBibG9jayBpZiB0aGVyZSBpcyBkYXRhIHJlbWFpbmluZyAqLwotCWlmIChsYXN0X3RyYW5zX3NpemUpIHsKLQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCQlleHRfcGh5X2FkZHIsCi0JCQlNRElPX1BDU19ERVZBRCwKLQkJCU1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCi0JCQlNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSX1dSSVRFX0VOQUJMRV9DTUQpOwotCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0JZVEVTX1RPX1RSQU5TRkVSX0FERFIsCi0JCQkgICAgICAgMSk7Ci0KLQkJU1BJX1NUQVJUX1RSQU5TRkVSKGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOwotCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCQkgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCi0JCQkgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFJfUEFHRV9QUk9HUkFNX0NNRCk7Ci0KLQkJLyogQml0cyAyMy0xNiBvZiBhZGRyZXNzICovCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKLQkJCSAgICAgICAoZGF0YV9pbmRleD4+MTYpKTsKLQkJLyogQml0cyAxNS04IG9mIGFkZHJlc3MgKi8KLQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgICBNRElPX1BDU19ERVZBRCwKLQkJCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSLAotCQkJICAgICAgIChkYXRhX2luZGV4Pj44KSk7Ci0KLQkJLyogQml0cyA3LTAgb2YgYWRkcmVzcyAqLwotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCi0JCQkgICAgICAgKCh1MTYpZGF0YV9pbmRleCkpOwotCi0JCWJ5dGVfY250ID0gMDsKLQkJd2hpbGUgKGJ5dGVfY250IDwgbGFzdF90cmFuc19zaXplICYmIGRhdGFfaW5kZXggPCBzaXplKSB7Ci0JCQkvKiBCaXRzIDctMCBvZiBhZGRyZXNzICovCi0JCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCQkJZXh0X3BoeV9hZGRyLAotCQkJCU1ESU9fUENTX0RFVkFELAotCQkJCU1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCi0JCQkJZGF0YVtkYXRhX2luZGV4KytdKTsKLQkJCWJ5dGVfY250Kys7Ci0JCX0KLQotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9CWVRFU19UT19UUkFOU0ZFUl9BRERSLAotCQkJICAgICAgIGJ5dGVfY250KzQpOwotCi0JCVNQSV9TVEFSVF9UUkFOU0ZFUihicCwgcG9ydCwgZXh0X3BoeV9hZGRyKTsKLQl9Ci0KLQkvKiBEU1AgUmVtb3ZlIERvd25sb2FkIE1vZGUgKi8KLQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18wLAotCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0xPVywgcG9ydCk7Ci0KLQlibngyeF9zZng3MTAxX3NwX3N3X3Jlc2V0KGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOwotCi0JLyogd2FpdCAwLjUgc2VjIHRvIGFsbG93IGl0IHRvIHJ1biAqLwotCWZvciAoY250ID0gMDsgY250IDwgMTAwOyBjbnQrKykKLQkJbXNsZWVwKDUpOwotCi0JYm54MnhfaHdfcmVzZXQoYnAsIHBvcnQpOwotCi0JZm9yIChjbnQgPSAwOyBjbnQgPCAxMDA7IGNudCsrKQotCQltc2xlZXAoNSk7Ci0KLQkvKiBDaGVjayB0aGF0IHRoZSBjb2RlIGlzIHN0YXJ0ZWQuIEluIGNhc2UgdGhlIGRvd25sb2FkCi0JY2hlY2tzdW0gZmFpbGVkLCB0aGUgY29kZSB3b24ndCBiZSBzdGFydGVkLiAqLwotCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICBNRElPX1BDU19ERVZBRCwKLQkJICAgICAgTURJT19QQ1NfUkVHXzcxMDFfRFNQX0FDQ0VTUywKLQkJICAgICAgJnRtcCk7Ci0KLQljb2RlX3N0YXJ0ZWQgPSAodG1wICYgKDE8PDQpKTsKLQlpZiAoIWNvZGVfc3RhcnRlZCkgewotCQlEUChORVRJRl9NU0dfTElOSywgIkRvd25sb2FkIGZhaWxlZC4gUGxlYXNlIGNoZWNrIGZpbGUuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogVmVyaWZ5IHRoYXQgdGhlIGZpbGUgcmV2aXNpb24gaXMgbm93IGVxdWFsIHRvIHRoZSBpbWFnZQotCXJldmlzaW9uIHdpdGhpbiB0aGUgRFNQICovCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIxLAotCQkgICAgICAmaW1hZ2VfcmV2aXNpb24xKTsKLQotCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKLQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgTURJT19QTUFfUkVHXzcxMDFfVkVSMiwKLQkJICAgICAgJmltYWdlX3JldmlzaW9uMik7Ci0KLQlpZiAoZGF0YVsweDE0ZV0gIT0gKGltYWdlX3JldmlzaW9uMiYweEZGKSB8fAotCSAgICBkYXRhWzB4MTRmXSAhPSAoKGltYWdlX3JldmlzaW9uMiYweEZGMDApPj44KSB8fAotCSAgICBkYXRhWzB4MTUwXSAhPSAoaW1hZ2VfcmV2aXNpb24xJjB4RkYpIHx8Ci0JICAgIGRhdGFbMHgxNTFdICE9ICgoaW1hZ2VfcmV2aXNpb24xJjB4RkYwMCk+PjgpKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiRG93bmxvYWQgZmFpbGVkLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlEUChORVRJRl9NU0dfTElOSywgIkRvd25sb2FkICVkJSVcbiIsIGRhdGFfaW5kZXgvc2l6ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXU4IGJueDJ4X2ZsYXNoX2Rvd25sb2FkKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHUzMiBleHRfcGh5X2NvbmZpZywKLQkJICAgICAgdTggZHJpdmVyX2xvYWRlZCwgY2hhciBkYXRhW10sIHUzMiBzaXplKQotewotCXU4IHJjID0gMDsKLQl1MzIgZXh0X3BoeV90eXBlOwotCXU4IGV4dF9waHlfYWRkcjsKLQlleHRfcGh5X2FkZHIgPSAoKGV4dF9waHlfY29uZmlnICYKLQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7Ci0KLQlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShleHRfcGh5X2NvbmZpZyk7Ci0KLQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6Ci0JY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkiRmxhc2ggZG93bmxvYWQgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBleHQgcGh5XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlicmVhazsKLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6Ci0JCS8qIFRha2UgZXh0IHBoeSBvdXQgb2YgcmVzZXQgKi8KLQkJaWYgKCFkcml2ZXJfbG9hZGVkKQotCQkJYm54MnhfdHVybl9vbl9lZihicCwgcG9ydCwgZXh0X3BoeV9hZGRyLCBleHRfcGh5X3R5cGUpOwotCQlyYyA9IGJueDJ4X3NmeDcxMDFfZmxhc2hfZG93bmxvYWQoYnAsIHBvcnQsIGV4dF9waHlfYWRkciwKLQkJCQkJCWRhdGEsIHNpemUpOwotCQlpZiAoIWRyaXZlcl9sb2FkZWQpCi0JCQlibngyeF90dXJuX29mZl9zZihicCwgcG9ydCk7Ci0JCWJyZWFrOwotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRToKLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX05PVF9DT05OOgotCWRlZmF1bHQ6Ci0JCURQKE5FVElGX01TR19MSU5LLCAiSW52YWxpZCBleHQgcGh5IHR5cGVcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuaAppbmRleCAxOWE4NjZkLi5mM2UyNTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9saW5rLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5oCkBAIC0zOSw3ICszOSwxMyBAQAogI2RlZmluZSBTUEVFRF8xNTAwMAkJMTUwMDAKICNkZWZpbmUgU1BFRURfMTYwMDAJCTE2MDAwCiAKLQorI2RlZmluZSBTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX0FERFIJCTB4MTQKKyNkZWZpbmUgU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9TSVpFCQkxNgorI2RlZmluZSBTRlBfRUVQUk9NX1ZFTkRPUl9PVUlfQUREUgkJMHgyNQorI2RlZmluZSBTRlBfRUVQUk9NX1ZFTkRPUl9PVUlfU0laRQkJMworI2RlZmluZSBTRlBfRUVQUk9NX1BBUlRfTk9fQUREUiAJCTB4MjgKKyNkZWZpbmUgU0ZQX0VFUFJPTV9QQVJUX05PX1NJWkUJCTE2CisjZGVmaW5lIFBXUl9GTFRfRVJSX01TR19MRU4JCQkyNTAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTc1LDQ3ICs4MSw1OSBAQAogI2RlZmluZSBTV0lUQ0hfQ0ZHX0FVVE9fREVURUNUCVBPUlRfRkVBVFVSRV9DT05fU1dJVENIX0FVVE9fREVURUNUCiAKIAl1MTYgaHdfbGVkX21vZGU7IC8qIHBhcnQgb2YgdGhlIGh3X2NvbmZpZyByZWFkIGZyb20gdGhlIHNobWVtICovCisKKwkvKiBwaHlfYWRkciBwb3B1bGF0ZWQgYnkgdGhlIHBoeV9pbml0IGZ1bmN0aW9uICovCisJdTggcGh5X2FkZHI7CisJLyp1OCByZXNlcnZlZDE7Ki8KKwogCXUzMiBsYW5lX2NvbmZpZzsKIAl1MzIgZXh0X3BoeV9jb25maWc7Ci0jZGVmaW5lIFhHWFNfRVhUX1BIWV9UWVBFKGV4dF9waHlfY29uZmlnKQkoZXh0X3BoeV9jb25maWcgJiBcCi0JCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX01BU0spCi0jZGVmaW5lIFNFUkRFU19FWFRfUEhZX1RZUEUoZXh0X3BoeV9jb25maWcpCShleHRfcGh5X2NvbmZpZyAmIFwKLQkJCQkJUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9NQVNLKQorI2RlZmluZSBYR1hTX0VYVF9QSFlfVFlQRShleHRfcGh5X2NvbmZpZykgXAorCQkoKGV4dF9waHlfY29uZmlnKSAmIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX01BU0spCisjZGVmaW5lIFhHWFNfRVhUX1BIWV9BRERSKGV4dF9waHlfY29uZmlnKSBcCisJCSgoKGV4dF9waHlfY29uZmlnKSAmIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+IFwKKwkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKQorI2RlZmluZSBTRVJERVNfRVhUX1BIWV9UWVBFKGV4dF9waHlfY29uZmlnKSBcCisJCSgoZXh0X3BoeV9jb25maWcpICYgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9NQVNLKQorCiAJLyogUGh5IHJlZ2lzdGVyIHBhcmFtZXRlciAqLwogCXUzMiBjaGlwX2lkOwogCi0JLyogcGh5X2FkZHIgcG9wdWxhdGVkIGJ5IHRoZSBDTEMgKi8KLQl1OCBwaHlfYWRkcjsKIAl1MTYgeGd4c19jb25maWdfcnhbNF07IC8qIHByZWVtcGhhc2lzIHZhbHVlcyBmb3IgdGhlIHJ4IHNpZGUgKi8KLQogCXUxNiB4Z3hzX2NvbmZpZ190eFs0XTsgLyogcHJlZW1waGFzaXMgdmFsdWVzIGZvciB0aGUgdHggc2lkZSAqLworCiAJdTMyIGZlYXR1cmVfY29uZmlnX2ZsYWdzOwogI2RlZmluZSBGRUFUVVJFX0NPTkZJR19PVkVSUklERV9QUkVFTVBIQVNJU19FTkFCTEVEICgxPDwwKQotI2RlZmluZSBGRUFUVVJFX0NPTkZJR19NT0RVTEVfRU5GT1JDTUVOVF9FTkFCTEVECSgyPDwwKQorI2RlZmluZSBGRUFUVVJFX0NPTkZJR19CQ19TVVBQT1JUU19PUFRfTURMX1ZSRlkJKDE8PDIpCisjZGVmaW5lIEZFQVRVUkVfQ09ORklHX0JDTTg3MjdfTk9DCQkJKDE8PDMpCisKIAkvKiBEZXZpY2UgcG9pbnRlciBwYXNzZWQgdG8gYWxsIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogCXN0cnVjdCBibngyeCAqYnA7CiB9OwogCiAvKiBPdXRwdXQgcGFyYW1ldGVycyAqLwogc3RydWN0IGxpbmtfdmFycyB7CisJdTggcGh5X2ZsYWdzOworCisJdTggbWFjX3R5cGU7CisjZGVmaW5lIE1BQ19UWVBFX05PTkUJCTAKKyNkZWZpbmUgTUFDX1RZUEVfRU1BQwkJMQorI2RlZmluZSBNQUNfVFlQRV9CTUFDCQkyCisKIAl1OCBwaHlfbGlua191cDsgLyogaW50ZXJuYWwgcGh5IGxpbmsgaW5kaWNhdGlvbiAqLwogCXU4IGxpbmtfdXA7Ci0JdTE2IGR1cGxleDsKLQl1MTYgZmxvd19jdHJsOwotCXUzMiBpZWVlX2ZjOwotCXU4IG1hY190eXBlOwogCi0jZGVmaW5lIE1BQ19UWVBFX05PTkUJMAotI2RlZmluZSBNQUNfVFlQRV9FTUFDCTEKLSNkZWZpbmUgTUFDX1RZUEVfQk1BQwkyCiAJdTE2IGxpbmVfc3BlZWQ7CisJdTE2IGR1cGxleDsKKworCXUxNiBmbG93X2N0cmw7CisJdTE2IGllZWVfZmM7CisKIAl1MzIgYXV0b25lZzsKICNkZWZpbmUgQVVUT19ORUdfRElTQUJMRUQJCQkweDAKICNkZWZpbmUgQVVUT19ORUdfRU5BQkxFRAkJCTB4MQogI2RlZmluZSBBVVRPX05FR19DT01QTEVURQkJCTB4MgotI2RlZmluZSBBVVRPX05FR19QQVJBTExFTF9ERVRFQ1RJT05fVVNFRCAJMHgzCi0KLQl1OCBwaHlfZmxhZ3M7CisjZGVmaW5lIEFVVE9fTkVHX1BBUkFMTEVMX0RFVEVDVElPTl9VU0VECTB4MwogCiAJLyogVGhlIHNhbWUgZGVmaW5pdGlvbnMgYXMgdGhlIHNobWVtIHBhcmFtZXRlciAqLwogCXUzMiBsaW5rX3N0YXR1czsKQEAgLTE2Nyw4ICsxODUsNiBAQAogCiB1OCBibngyeF9vdmVycmlkZV9sZWRfdmFsdWUoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTMyIGxlZF9pZHgsIHUzMiB2YWx1ZSk7CiAKLXU4IGJueDJ4X2ZsYXNoX2Rvd25sb2FkKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHUzMiBleHRfcGh5X2NvbmZpZywKLQkJICAgICAgdTggZHJpdmVyX2xvYWRlZCwgY2hhciBkYXRhW10sIHUzMiBzaXplKTsKIC8qIGJueDJ4X2hhbmRsZV9tb2R1bGVfZGV0ZWN0X2ludCBzaG91bGQgYmUgY2FsbGVkIHVwb24gbW9kdWxlIGRldGVjdGlvbgogICAgaW50ZXJydXB0ICovCiB2b2lkIGJueDJ4X2hhbmRsZV9tb2R1bGVfZGV0ZWN0X2ludChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcyk7CkBAIC0xODAsNSArMTk2LDEyIEBACiAvKiBPbmUtdGltZSBpbml0aWFsaXphdGlvbiBmb3IgZXh0ZXJuYWwgcGh5IGFmdGVyIHBvd2VyIHVwICovCiB1OCBibngyeF9jb21tb25faW5pdF9waHkoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNobWVtX2Jhc2UpOwogCisvKiBSZXNldCB0aGUgZXh0ZXJuYWwgUEhZIHVzaW5nIEdQSU8gKi8KK3ZvaWQgYm54MnhfZXh0X3BoeV9od19yZXNldChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0KTsKKwordm9pZCBibngyeF9zZng3MTAxX3NwX3N3X3Jlc2V0KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHU4IHBoeV9hZGRyKTsKKwordTggYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTE2IGFkZHIsCisJCQkgICAgICB1OCBieXRlX2NudCwgdTggKm9fYnVmKTsKIAogI2VuZGlmIC8qIEJOWDJYX0xJTktfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCmluZGV4IGMzNmE1ZjMuLjIwZjBlZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYworKysgYi9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqIFdyaXR0ZW4gYnk6IEVsaWV6ZXIgVGFtaXIKICAqIEJhc2VkIG9uIGNvZGUgZnJvbSBNaWNoYWVsIENoYW4ncyBibngyIGRyaXZlcgogICogVURQIENTVU0gZXJyYXRhIHdvcmthcm91bmQgYnkgQXJpayBHZW5kZWxtYW4KLSAqIFNsb3dwYXRoIHJld29yayBieSBWbGFkaXNsYXYgWm9sb3Rhcm92CisgKiBTbG93cGF0aCBhbmQgZmFzdHBhdGggcmV3b3JrIGJ5IFZsYWRpc2xhdiBab2xvdGFyb3YKICAqIFN0YXRpc3RpY3MgYW5kIExpbmsgbWFuYWdlbWVudCBieSBZaXRjaGFrIEdlcnRuZXIKICAqCiAgKi8KQEAgLTU2LDE1ICs1NiwxNSBAQAogI2luY2x1ZGUgImJueDJ4X2luaXRfb3BzLmgiCiAjaW5jbHVkZSAiYm54MnhfZHVtcC5oIgogCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS40OC4xMDUtMSIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSIyMDA5LzA0LzIyIgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNTIuMSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSIyMDA5LzA4LzEyIgogI2RlZmluZSBCTlgyWF9CQ19WRVIJCTB4MDQwMjAwCiAKICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgImJueDJ4X2Z3X2ZpbGVfaGRyLmgiCiAvKiBGVyBmaWxlcyAqLwotI2RlZmluZSBGV19GSUxFX1BSRUZJWF9FMQkJImJueDJ4LWUxLSIKLSNkZWZpbmUgRldfRklMRV9QUkVGSVhfRTFICQkiYm54MngtZTFoLSIKKyNkZWZpbmUgRldfRklMRV9QUkVGSVhfRTEJImJueDJ4LWUxLSIKKyNkZWZpbmUgRldfRklMRV9QUkVGSVhfRTFICSJibngyeC1lMWgtIgogCiAvKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcgKi8KICNkZWZpbmUgVFhfVElNRU9VVAkJKDUqSFopCkBAIC04MCw3ICs4MCwxOCBAQAogCiBzdGF0aWMgaW50IG11bHRpX21vZGUgPSAxOwogbW9kdWxlX3BhcmFtKG11bHRpX21vZGUsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG11bHRpX21vZGUsICIgVXNlIHBlci1DUFUgcXVldWVzIik7CitNT0RVTEVfUEFSTV9ERVNDKG11bHRpX21vZGUsICIgTXVsdGkgcXVldWUgbW9kZSAiCisJCQkgICAgICIoMCBEaXNhYmxlOyAxIEVuYWJsZSAoZGVmYXVsdCkpIik7CisKK3N0YXRpYyBpbnQgbnVtX3J4X3F1ZXVlczsKK21vZHVsZV9wYXJhbShudW1fcnhfcXVldWVzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhudW1fcnhfcXVldWVzLCAiIE51bWJlciBvZiBSeCBxdWV1ZXMgZm9yIG11bHRpX21vZGU9MSIKKwkJCQkiIChkZWZhdWx0IGlzIGhhbGYgbnVtYmVyIG9mIENQVXMpIik7CisKK3N0YXRpYyBpbnQgbnVtX3R4X3F1ZXVlczsKK21vZHVsZV9wYXJhbShudW1fdHhfcXVldWVzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhudW1fdHhfcXVldWVzLCAiIE51bWJlciBvZiBUeCBxdWV1ZXMgZm9yIG11bHRpX21vZGU9MSIKKwkJCQkiIChkZWZhdWx0IGlzIGhhbGYgbnVtYmVyIG9mIENQVXMpIik7CiAKIHN0YXRpYyBpbnQgZGlzYWJsZV90cGE7CiBtb2R1bGVfcGFyYW0oZGlzYWJsZV90cGEsIGludCwgMCk7CkBAIC05MCw2ICsxMDEsMTAgQEAKIG1vZHVsZV9wYXJhbShpbnRfbW9kZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaW50X21vZGUsICIgRm9yY2UgaW50ZXJydXB0IG1vZGUgKDEgSU5UI3g7IDIgTVNJKSIpOwogCitzdGF0aWMgaW50IGRyb3BsZXNzX2ZjOworbW9kdWxlX3BhcmFtKGRyb3BsZXNzX2ZjLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkcm9wbGVzc19mYywgIiBQYXVzZSBvbiBleGhhdXN0ZWQgaG9zdCByaW5nIik7CisKIHN0YXRpYyBpbnQgcG9sbDsKIG1vZHVsZV9wYXJhbShwb2xsLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwb2xsLCAiIFVzZSBwb2xsaW5nIChmb3IgZGVidWcpIik7CkBAIC0xMjMsMTIgKzEzOCw5IEBACiAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGJueDJ4X3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfTlgyXzU3NzEwLAotCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBCQ001NzcxMCB9LAotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9OWDJfNTc3MTEsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEJDTTU3NzExIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX05YMl81NzcxMUUsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEJDTTU3NzExRSB9LAorCXsgUENJX1ZERVZJQ0UoQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfTlgyXzU3NzEwKSwgQkNNNTc3MTAgfSwKKwl7IFBDSV9WREVWSUNFKEJST0FEQ09NLCBQQ0lfREVWSUNFX0lEX05YMl81NzcxMSksIEJDTTU3NzExIH0sCisJeyBQQ0lfVkRFVklDRShCUk9BRENPTSwgUENJX0RFVklDRV9JRF9OWDJfNTc3MTFFKSwgQkNNNTc3MTFFIH0sCiAJeyAwIH0KIH07CiAKQEAgLTE0MSw3ICsxNTMsNyBAQAogLyogdXNlZCBvbmx5IGF0IGluaXQKICAqIGxvY2tpbmcgaXMgZG9uZSBieSBtY3AKICAqLwotc3RhdGljIHZvaWQgYm54MnhfcmVnX3dyX2luZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgdTMyIHZhbCkKK3ZvaWQgYm54MnhfcmVnX3dyX2luZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgdTMyIHZhbCkKIHsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJwLT5wZGV2LCBQQ0lDRkdfR1JDX0FERFJFU1MsIGFkZHIpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfREFUQSwgdmFsKTsKQEAgLTE4OCw3ICsyMDAsNyBAQAogdm9pZCBibngyeF93cml0ZV9kbWFlKHN0cnVjdCBibngyeCAqYnAsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBkc3RfYWRkciwKIAkJICAgICAgdTMyIGxlbjMyKQogewotCXN0cnVjdCBkbWFlX2NvbW1hbmQgKmRtYWUgPSAmYnAtPmluaXRfZG1hZTsKKwlzdHJ1Y3QgZG1hZV9jb21tYW5kIGRtYWU7CiAJdTMyICp3Yl9jb21wID0gYm54Mnhfc3AoYnAsIHdiX2NvbXApOwogCWludCBjbnQgPSAyMDA7CiAKQEAgLTIwMSw0MyArMjEzLDQzIEBACiAJCXJldHVybjsKIAl9CiAKLQltdXRleF9sb2NrKCZicC0+ZG1hZV9tdXRleCk7CisJbWVtc2V0KCZkbWFlLCAwLCBzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkpOwogCi0JbWVtc2V0KGRtYWUsIDAsIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSk7Ci0KLQlkbWFlLT5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX1BDSSB8IERNQUVfQ01EX0RTVF9HUkMgfAotCQkJRE1BRV9DTURfQ19EU1RfUENJIHwgRE1BRV9DTURfQ19FTkFCTEUgfAotCQkJRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKKwlkbWFlLm9wY29kZSA9IChETUFFX0NNRF9TUkNfUENJIHwgRE1BRV9DTURfRFNUX0dSQyB8CisJCSAgICAgICBETUFFX0NNRF9DX0RTVF9QQ0kgfCBETUFFX0NNRF9DX0VOQUJMRSB8CisJCSAgICAgICBETUFFX0NNRF9TUkNfUkVTRVQgfCBETUFFX0NNRF9EU1RfUkVTRVQgfAogI2lmZGVmIF9fQklHX0VORElBTgotCQkJRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8CisJCSAgICAgICBETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKICNlbHNlCi0JCQlETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUCB8CisJCSAgICAgICBETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUCB8CiAjZW5kaWYKLQkJCShCUF9QT1JUKGJwKSA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkgfAotCQkJKEJQX0UxSFZOKGJwKSA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOwotCWRtYWUtPnNyY19hZGRyX2xvID0gVTY0X0xPKGRtYV9hZGRyKTsKLQlkbWFlLT5zcmNfYWRkcl9oaSA9IFU2NF9ISShkbWFfYWRkcik7Ci0JZG1hZS0+ZHN0X2FkZHJfbG8gPSBkc3RfYWRkciA+PiAyOwotCWRtYWUtPmRzdF9hZGRyX2hpID0gMDsKLQlkbWFlLT5sZW4gPSBsZW4zMjsKLQlkbWFlLT5jb21wX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOwotCWRtYWUtPmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7Ci0JZG1hZS0+Y29tcF92YWwgPSBETUFFX0NPTVBfVkFMOworCQkgICAgICAgKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8CisJCSAgICAgICAoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7CisJZG1hZS5zcmNfYWRkcl9sbyA9IFU2NF9MTyhkbWFfYWRkcik7CisJZG1hZS5zcmNfYWRkcl9oaSA9IFU2NF9ISShkbWFfYWRkcik7CisJZG1hZS5kc3RfYWRkcl9sbyA9IGRzdF9hZGRyID4+IDI7CisJZG1hZS5kc3RfYWRkcl9oaSA9IDA7CisJZG1hZS5sZW4gPSBsZW4zMjsKKwlkbWFlLmNvbXBfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7CisJZG1hZS5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOworCWRtYWUuY29tcF92YWwgPSBETUFFX0NPTVBfVkFMOwogCiAJRFAoQk5YMlhfTVNHX09GRiwgIkRNQUU6IG9wY29kZSAweCUwOHhcbiIKIAkgICBEUF9MRVZFTCAic3JjX2FkZHIgIFsleDolMDh4XSAgbGVuIFslZCAqNF0gICIKIAkJICAgICJkc3RfYWRkciBbJXg6JTA4eCAoJTA4eCldXG4iCiAJICAgRFBfTEVWRUwgImNvbXBfYWRkciBbJXg6JTA4eF0gIGNvbXBfdmFsIDB4JTA4eFxuIiwKLQkgICBkbWFlLT5vcGNvZGUsIGRtYWUtPnNyY19hZGRyX2hpLCBkbWFlLT5zcmNfYWRkcl9sbywKLQkgICBkbWFlLT5sZW4sIGRtYWUtPmRzdF9hZGRyX2hpLCBkbWFlLT5kc3RfYWRkcl9sbywgZHN0X2FkZHIsCi0JICAgZG1hZS0+Y29tcF9hZGRyX2hpLCBkbWFlLT5jb21wX2FkZHJfbG8sIGRtYWUtPmNvbXBfdmFsKTsKKwkgICBkbWFlLm9wY29kZSwgZG1hZS5zcmNfYWRkcl9oaSwgZG1hZS5zcmNfYWRkcl9sbywKKwkgICBkbWFlLmxlbiwgZG1hZS5kc3RfYWRkcl9oaSwgZG1hZS5kc3RfYWRkcl9sbywgZHN0X2FkZHIsCisJICAgZG1hZS5jb21wX2FkZHJfaGksIGRtYWUuY29tcF9hZGRyX2xvLCBkbWFlLmNvbXBfdmFsKTsKIAlEUChCTlgyWF9NU0dfT0ZGLCAiZGF0YSBbMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4XVxuIiwKIAkgICBicC0+c2xvd3BhdGgtPndiX2RhdGFbMF0sIGJwLT5zbG93cGF0aC0+d2JfZGF0YVsxXSwKIAkgICBicC0+c2xvd3BhdGgtPndiX2RhdGFbMl0sIGJwLT5zbG93cGF0aC0+d2JfZGF0YVszXSk7CiAKKwltdXRleF9sb2NrKCZicC0+ZG1hZV9tdXRleCk7CisKIAkqd2JfY29tcCA9IDA7CiAKLQlibngyeF9wb3N0X2RtYWUoYnAsIGRtYWUsIElOSVRfRE1BRV9DKGJwKSk7CisJYm54MnhfcG9zdF9kbWFlKGJwLCAmZG1hZSwgSU5JVF9ETUFFX0MoYnApKTsKIAogCXVkZWxheSg1KTsKIApAQCAtMjYxLDcgKzI3Myw3IEBACiAKIHZvaWQgYm54MnhfcmVhZF9kbWFlKHN0cnVjdCBibngyeCAqYnAsIHUzMiBzcmNfYWRkciwgdTMyIGxlbjMyKQogewotCXN0cnVjdCBkbWFlX2NvbW1hbmQgKmRtYWUgPSAmYnAtPmluaXRfZG1hZTsKKwlzdHJ1Y3QgZG1hZV9jb21tYW5kIGRtYWU7CiAJdTMyICp3Yl9jb21wID0gYm54Mnhfc3AoYnAsIHdiX2NvbXApOwogCWludCBjbnQgPSAyMDA7CiAKQEAgLTI3Niw0MSArMjg4LDQxIEBACiAJCXJldHVybjsKIAl9CiAKLQltdXRleF9sb2NrKCZicC0+ZG1hZV9tdXRleCk7CisJbWVtc2V0KCZkbWFlLCAwLCBzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkpOwogCi0JbWVtc2V0KGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKSwgMCwgc2l6ZW9mKHUzMikgKiA0KTsKLQltZW1zZXQoZG1hZSwgMCwgc2l6ZW9mKHN0cnVjdCBkbWFlX2NvbW1hbmQpKTsKLQotCWRtYWUtPm9wY29kZSA9IChETUFFX0NNRF9TUkNfR1JDIHwgRE1BRV9DTURfRFNUX1BDSSB8Ci0JCQlETUFFX0NNRF9DX0RTVF9QQ0kgfCBETUFFX0NNRF9DX0VOQUJMRSB8Ci0JCQlETUFFX0NNRF9TUkNfUkVTRVQgfCBETUFFX0NNRF9EU1RfUkVTRVQgfAorCWRtYWUub3Bjb2RlID0gKERNQUVfQ01EX1NSQ19HUkMgfCBETUFFX0NNRF9EU1RfUENJIHwKKwkJICAgICAgIERNQUVfQ01EX0NfRFNUX1BDSSB8IERNQUVfQ01EX0NfRU5BQkxFIHwKKwkJICAgICAgIERNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8CiAjaWZkZWYgX19CSUdfRU5ESUFOCi0JCQlETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKKwkJICAgICAgIERNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAogI2Vsc2UKLQkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKKwkJICAgICAgIERNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKICNlbmRpZgotCQkJKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8Ci0JCQkoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7Ci0JZG1hZS0+c3JjX2FkZHJfbG8gPSBzcmNfYWRkciA+PiAyOwotCWRtYWUtPnNyY19hZGRyX2hpID0gMDsKLQlkbWFlLT5kc3RfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9kYXRhKSk7Ci0JZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfZGF0YSkpOwotCWRtYWUtPmxlbiA9IGxlbjMyOwotCWRtYWUtPmNvbXBfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7Ci0JZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKLQlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CisJCSAgICAgICAoQlBfUE9SVChicCkgPyBETUFFX0NNRF9QT1JUXzEgOiBETUFFX0NNRF9QT1JUXzApIHwKKwkJICAgICAgIChCUF9FMUhWTihicCkgPDwgRE1BRV9DTURfRTFIVk5fU0hJRlQpKTsKKwlkbWFlLnNyY19hZGRyX2xvID0gc3JjX2FkZHIgPj4gMjsKKwlkbWFlLnNyY19hZGRyX2hpID0gMDsKKwlkbWFlLmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2RhdGEpKTsKKwlkbWFlLmRzdF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2RhdGEpKTsKKwlkbWFlLmxlbiA9IGxlbjMyOworCWRtYWUuY29tcF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKKwlkbWFlLmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7CisJZG1hZS5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CiAKIAlEUChCTlgyWF9NU0dfT0ZGLCAiRE1BRTogb3Bjb2RlIDB4JTA4eFxuIgogCSAgIERQX0xFVkVMICJzcmNfYWRkciAgWyV4OiUwOHhdICBsZW4gWyVkICo0XSAgIgogCQkgICAgImRzdF9hZGRyIFsleDolMDh4ICglMDh4KV1cbiIKIAkgICBEUF9MRVZFTCAiY29tcF9hZGRyIFsleDolMDh4XSAgY29tcF92YWwgMHglMDh4XG4iLAotCSAgIGRtYWUtPm9wY29kZSwgZG1hZS0+c3JjX2FkZHJfaGksIGRtYWUtPnNyY19hZGRyX2xvLAotCSAgIGRtYWUtPmxlbiwgZG1hZS0+ZHN0X2FkZHJfaGksIGRtYWUtPmRzdF9hZGRyX2xvLCBzcmNfYWRkciwKLQkgICBkbWFlLT5jb21wX2FkZHJfaGksIGRtYWUtPmNvbXBfYWRkcl9sbywgZG1hZS0+Y29tcF92YWwpOworCSAgIGRtYWUub3Bjb2RlLCBkbWFlLnNyY19hZGRyX2hpLCBkbWFlLnNyY19hZGRyX2xvLAorCSAgIGRtYWUubGVuLCBkbWFlLmRzdF9hZGRyX2hpLCBkbWFlLmRzdF9hZGRyX2xvLCBzcmNfYWRkciwKKwkgICBkbWFlLmNvbXBfYWRkcl9oaSwgZG1hZS5jb21wX2FkZHJfbG8sIGRtYWUuY29tcF92YWwpOwogCisJbXV0ZXhfbG9jaygmYnAtPmRtYWVfbXV0ZXgpOworCisJbWVtc2V0KGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKSwgMCwgc2l6ZW9mKHUzMikgKiA0KTsKIAkqd2JfY29tcCA9IDA7CiAKLQlibngyeF9wb3N0X2RtYWUoYnAsIGRtYWUsIElOSVRfRE1BRV9DKGJwKSk7CisJYm54MnhfcG9zdF9kbWFlKGJwLCAmZG1hZSwgSU5JVF9ETUFFX0MoYnApKTsKIAogCXVkZWxheSg1KTsKIApAQCAtMzM0LDYgKzM0NiwyMSBAQAogCW11dGV4X3VubG9jaygmYnAtPmRtYWVfbXV0ZXgpOwogfQogCit2b2lkIGJueDJ4X3dyaXRlX2RtYWVfcGh5c19sZW4oc3RydWN0IGJueDJ4ICpicCwgZG1hX2FkZHJfdCBwaHlzX2FkZHIsCisJCQkgICAgICAgdTMyIGFkZHIsIHUzMiBsZW4pCit7CisJaW50IG9mZnNldCA9IDA7CisKKwl3aGlsZSAobGVuID4gRE1BRV9MRU4zMl9XUl9NQVgpIHsKKwkJYm54Mnhfd3JpdGVfZG1hZShicCwgcGh5c19hZGRyICsgb2Zmc2V0LAorCQkJCSBhZGRyICsgb2Zmc2V0LCBETUFFX0xFTjMyX1dSX01BWCk7CisJCW9mZnNldCArPSBETUFFX0xFTjMyX1dSX01BWCAqIDQ7CisJCWxlbiAtPSBETUFFX0xFTjMyX1dSX01BWDsKKwl9CisKKwlibngyeF93cml0ZV9kbWFlKGJwLCBwaHlzX2FkZHIgKyBvZmZzZXQsIGFkZHIgKyBvZmZzZXQsIGxlbik7Cit9CisKIC8qIHVzZWQgb25seSBmb3Igc2xvd3BhdGggc28gbm90IGlubGluZWQgKi8KIHN0YXRpYyB2b2lkIGJueDJ4X3diX3dyKHN0cnVjdCBibngyeCAqYnAsIGludCByZWcsIHUzMiB2YWxfaGksIHUzMiB2YWxfbG8pCiB7CkBAIC01NDIsMTYgKzU2OSwxNSBAQAogCS8qIFR4ICovCiAJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0JCXN0cnVjdCBldGhfdHhfZGJfZGF0YSAqaHdfcHJvZHMgPSBmcC0+aHdfdHhfcHJvZHM7CiAKIAkJQk5YMlhfRVJSKCJmcCVkOiB0eF9wa3RfcHJvZCgleCkgIHR4X3BrdF9jb25zKCV4KSIKIAkJCSAgIiAgdHhfYmRfcHJvZCgleCkgIHR4X2JkX2NvbnMoJXgpICAqdHhfY29uc19zYigleClcbiIsCiAJCQkgIGksIGZwLT50eF9wa3RfcHJvZCwgZnAtPnR4X3BrdF9jb25zLCBmcC0+dHhfYmRfcHJvZCwKIAkJCSAgZnAtPnR4X2JkX2NvbnMsIGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYikpOwogCQlCTlgyWF9FUlIoIiAgICAgIGZwX2NfaWR4KCV4KSAgKnNiX2NfaWR4KCV4KSIKLQkJCSAgIiAgYmQgZGF0YSgleCwleClcbiIsIGxlMTZfdG9fY3B1KGZwLT5mcF9jX2lkeCksCisJCQkgICIgIHR4X2RiX3Byb2QoJXgpXG4iLCBsZTE2X3RvX2NwdShmcC0+ZnBfY19pZHgpLAogCQkJICBmcC0+c3RhdHVzX2Jsay0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4LAotCQkJICBod19wcm9kcy0+cGFja2V0c19wcm9kLCBod19wcm9kcy0+YmRzX3Byb2QpOworCQkJICBmcC0+dHhfZGIuZGF0YS5wcm9kKTsKIAl9CiAKIAkvKiBSaW5ncyAqLwpAQCAtNjUzLDYgKzY3OSwxMSBAQAogCSAgIHZhbCwgcG9ydCwgYWRkciwgKG1zaXggPyAiTVNJLVgiIDogKG1zaSA/ICJNU0kiIDogIklOVHgiKSkpOwogCiAJUkVHX1dSKGJwLCBhZGRyLCB2YWwpOworCS8qCisJICogRW5zdXJlIHRoYXQgSENfQ09ORklHIGlzIHdyaXR0ZW4gYmVmb3JlIGxlYWRpbmcvdHJhaWxpbmcgZWRnZSBjb25maWcKKwkgKi8KKwltbWlvd2IoKTsKKwliYXJyaWVyKCk7CiAKIAlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CiAJCS8qIGluaXQgbGVhZGluZy90cmFpbGluZyBlZGdlICovCkBAIC02NjcsNiArNjk4LDkgQEAKIAkJUkVHX1dSKGJwLCBIQ19SRUdfVFJBSUxJTkdfRURHRV8wICsgcG9ydCo4LCB2YWwpOwogCQlSRUdfV1IoYnAsIEhDX1JFR19MRUFESU5HX0VER0VfMCArIHBvcnQqOCwgdmFsKTsKIAl9CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBpbnRlcnJ1cHRzIGFyZSBpbmRlZWQgZW5hYmxlZCBmcm9tIGhlcmUgb24gKi8KKwltbWlvd2IoKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW50X2Rpc2FibGUoc3RydWN0IGJueDJ4ICpicCkKQEAgLTY4OSw3ICs3MjMsNiBAQAogCVJFR19XUihicCwgYWRkciwgdmFsKTsKIAlpZiAoUkVHX1JEKGJwLCBhZGRyKSAhPSB2YWwpCiAJCUJOWDJYX0VSUigiQlVHISBwcm9wZXIgdmFsIG5vdCByZWFkIGZyb20gSUdVIVxuIik7Ci0KIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW50X2Rpc2FibGVfc3luYyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZGlzYWJsZV9odykKQEAgLTY5OSw2ICs3MzIsOCBAQAogCiAJLyogZGlzYWJsZSBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KIAlhdG9taWNfaW5jKCZicC0+aW50cl9zZW0pOworCXNtcF93bWIoKTsgLyogRW5zdXJlIHRoYXQgYnAtPmludHJfc2VtIHVwZGF0ZSBpcyBTTVAtc2FmZSAqLworCiAJaWYgKGRpc2FibGVfaHcpCiAJCS8qIHByZXZlbnQgdGhlIEhXIGZyb20gc2VuZGluZyBpbnRlcnJ1cHRzICovCiAJCWJueDJ4X2ludF9kaXNhYmxlKGJwKTsKQEAgLTc0MCw2ICs3NzUsMTAgQEAKIAlEUChCTlgyWF9NU0dfT0ZGLCAid3JpdGUgMHglMDh4IHRvIEhDIGFkZHIgMHgleFxuIiwKIAkgICAoKih1MzIgKikmaWd1X2FjayksIGhjX2FkZHIpOwogCVJFR19XUihicCwgaGNfYWRkciwgKCoodTMyICopJmlndV9hY2spKTsKKworCS8qIE1ha2Ugc3VyZSB0aGF0IEFDSyBpcyB3cml0dGVuICovCisJbW1pb3diKCk7CisJYmFycmllcigpOwogfQogCiBzdGF0aWMgaW5saW5lIHUxNiBibngyeF91cGRhdGVfZnBzYl9pZHgoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKQEAgLTc3NiwxNiArODE1LDYgQEAKICAqIGZhc3QgcGF0aCBzZXJ2aWNlIGZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGJueDJ4X2hhc190eF93b3JrKHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnApCi17Ci0JdTE2IHR4X2NvbnNfc2I7Ci0KLQkvKiBUZWxsIGNvbXBpbGVyIHRoYXQgc3RhdHVzIGJsb2NrIGZpZWxkcyBjYW4gY2hhbmdlICovCi0JYmFycmllcigpOwotCXR4X2NvbnNfc2IgPSBsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpOwotCXJldHVybiAoZnAtPnR4X3BrdF9jb25zICE9IHR4X2NvbnNfc2IpOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBibngyeF9oYXNfdHhfd29ya191bmxvYWQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKIHsKIAkvKiBUZWxsIGNvbXBpbGVyIHRoYXQgY29uc3VtZXIgYW5kIHByb2R1Y2VyIGNhbiBjaGFuZ2UgKi8KQEAgLTgwMCw3ICs4MjksOCBAQAogCQkJICAgICB1MTYgaWR4KQogewogCXN0cnVjdCBzd190eF9iZCAqdHhfYnVmID0gJmZwLT50eF9idWZfcmluZ1tpZHhdOwotCXN0cnVjdCBldGhfdHhfYmQgKnR4X2JkOworCXN0cnVjdCBldGhfdHhfc3RhcnRfYmQgKnR4X3N0YXJ0X2JkOworCXN0cnVjdCBldGhfdHhfYmQgKnR4X2RhdGFfYmQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4X2J1Zi0+c2tiOwogCXUxNiBiZF9pZHggPSBUWF9CRCh0eF9idWYtPmZpcnN0X2JkKSwgbmV3X2NvbnM7CiAJaW50IG5iZDsKQEAgLTgxMCw1MSArODQwLDQ2IEBACiAKIAkvKiB1bm1hcCBmaXJzdCBiZCAqLwogCURQKEJOWDJYX01TR19PRkYsICJmcmVlIGJkX2lkeCAlZFxuIiwgYmRfaWR4KTsKLQl0eF9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX2lkeF07Ci0JcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgQkRfVU5NQVBfQUREUih0eF9iZCksCi0JCQkgQkRfVU5NQVBfTEVOKHR4X2JkKSwgUENJX0RNQV9UT0RFVklDRSk7CisJdHhfc3RhcnRfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9pZHhdLnN0YXJ0X2JkOworCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsIEJEX1VOTUFQX0FERFIodHhfc3RhcnRfYmQpLAorCQkJIEJEX1VOTUFQX0xFTih0eF9zdGFydF9iZCksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCi0JbmJkID0gbGUxNl90b19jcHUodHhfYmQtPm5iZCkgLSAxOwotCW5ld19jb25zID0gbmJkICsgdHhfYnVmLT5maXJzdF9iZDsKKwluYmQgPSBsZTE2X3RvX2NwdSh0eF9zdGFydF9iZC0+bmJkKSAtIDE7CiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCWlmIChuYmQgPiAoTUFYX1NLQl9GUkFHUyArIDIpKSB7CisJaWYgKChuYmQgLSAxKSA+IChNQVhfU0tCX0ZSQUdTICsgMikpIHsKIAkJQk5YMlhfRVJSKCJCQUQgbmJkIVxuIik7CiAJCWJueDJ4X3BhbmljKCk7CiAJfQogI2VuZGlmCisJbmV3X2NvbnMgPSBuYmQgKyB0eF9idWYtPmZpcnN0X2JkOwogCi0JLyogU2tpcCBhIHBhcnNlIGJkIGFuZCB0aGUgVFNPIHNwbGl0IGhlYWRlciBiZAotCSAgIHNpbmNlIHRoZXkgaGF2ZSBubyBtYXBwaW5nICovCi0JaWYgKG5iZCkKKwkvKiBHZXQgdGhlIG5leHQgYmQgKi8KKwliZF9pZHggPSBUWF9CRChORVhUX1RYX0lEWChiZF9pZHgpKTsKKworCS8qIFNraXAgYSBwYXJzZSBiZC4uLiAqLworCS0tbmJkOworCWJkX2lkeCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX2lkeCkpOworCisJLyogLi4uYW5kIHRoZSBUU08gc3BsaXQgaGVhZGVyIGJkIHNpbmNlIHRoZXkgaGF2ZSBubyBtYXBwaW5nICovCisJaWYgKHR4X2J1Zi0+ZmxhZ3MgJiBCTlgyWF9UU09fU1BMSVRfQkQpIHsKKwkJLS1uYmQ7CiAJCWJkX2lkeCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX2lkeCkpOwotCi0JaWYgKHR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCAmIChFVEhfVFhfQkRfRkxBR1NfSVBfQ1NVTSB8Ci0JCQkJCSAgIEVUSF9UWF9CRF9GTEFHU19UQ1BfQ1NVTSB8Ci0JCQkJCSAgIEVUSF9UWF9CRF9GTEFHU19TV19MU08pKSB7Ci0JCWlmICgtLW5iZCkKLQkJCWJkX2lkeCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX2lkeCkpOwotCQl0eF9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX2lkeF07Ci0JCS8qIGlzIHRoaXMgYSBUU08gc3BsaXQgaGVhZGVyIGJkPyAqLwotCQlpZiAodHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkICYgRVRIX1RYX0JEX0ZMQUdTX1NXX0xTTykgewotCQkJaWYgKC0tbmJkKQotCQkJCWJkX2lkeCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX2lkeCkpOwotCQl9CiAJfQogCiAJLyogbm93IGZyZWUgZnJhZ3MgKi8KIAl3aGlsZSAobmJkID4gMCkgewogCiAJCURQKEJOWDJYX01TR19PRkYsICJmcmVlIGZyYWcgYmRfaWR4ICVkXG4iLCBiZF9pZHgpOwotCQl0eF9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX2lkeF07Ci0JCXBjaV91bm1hcF9wYWdlKGJwLT5wZGV2LCBCRF9VTk1BUF9BRERSKHR4X2JkKSwKLQkJCSAgICAgICBCRF9VTk1BUF9MRU4odHhfYmQpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJdHhfZGF0YV9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX2lkeF0ucmVnX2JkOworCQlwY2lfdW5tYXBfcGFnZShicC0+cGRldiwgQkRfVU5NQVBfQUREUih0eF9kYXRhX2JkKSwKKwkJCSAgICAgICBCRF9VTk1BUF9MRU4odHhfZGF0YV9iZCksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlpZiAoLS1uYmQpCiAJCQliZF9pZHggPSBUWF9CRChORVhUX1RYX0lEWChiZF9pZHgpKTsKIAl9CiAKIAkvKiByZWxlYXNlIHNrYiAqLwogCVdBUk5fT04oIXNrYik7Ci0JZGV2X2tmcmVlX3NrYihza2IpOworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJdHhfYnVmLT5maXJzdF9iZCA9IDA7CiAJdHhfYnVmLT5za2IgPSBOVUxMOwogCkBAIC04OTYsNyArOTIxLDcgQEAKIAkJcmV0dXJuOwogI2VuZGlmCiAKLQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGJwLT5kZXYsIGZwLT5pbmRleCk7CisJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShicC0+ZGV2LCBmcC0+aW5kZXggLSBicC0+bnVtX3J4X3F1ZXVlcyk7CiAJaHdfY29ucyA9IGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYik7CiAJc3dfY29ucyA9IGZwLT50eF9wa3RfY29uczsKIApAQCAtOTI2LDggKzk1MSw2IEBACiAJLyogVEJEIG5lZWQgYSB0aHJlc2g/ICovCiAJaWYgKHVubGlrZWx5KG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkpIHsKIAotCQlfX25ldGlmX3R4X2xvY2sodHhxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCiAJCS8qIE5lZWQgdG8gbWFrZSB0aGUgdHhfYmRfY29ucyB1cGRhdGUgdmlzaWJsZSB0byBzdGFydF94bWl0KCkKIAkJICogYmVmb3JlIGNoZWNraW5nIGZvciBuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKCkuICBXaXRob3V0IHRoZQogCQkgKiBtZW1vcnkgYmFycmllciwgdGhlcmUgaXMgYSBzbWFsbCBwb3NzaWJpbGl0eSB0aGF0CkBAIC05NDAsOCArOTYzLDYgQEAKIAkJICAgIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikgJiYKIAkJICAgIChibngyeF90eF9hdmFpbChmcCkgPj0gTUFYX1NLQl9GUkFHUyArIDMpKQogCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOwotCi0JCV9fbmV0aWZfdHhfdW5sb2NrKHR4cSk7CiAJfQogfQogCkBAIC0xMDA5LDYgKzEwMzAsNyBAQAogCQlicmVhazsKIAogCWNhc2UgKFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMgfCBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQpOgorCWNhc2UgKFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMgfCBCTlgyWF9TVEFURV9ESVNBQkxFRCk6CiAJCURQKE5FVElGX01TR19JRkRPV04sICJnb3QgKHVuKXNldCBtYWMgcmFtcm9kXG4iKTsKIAkJYnJlYWs7CiAKQEAgLTE0OTEsNiArMTUxMywxMyBAQAogCQliZF9wcm9kID0gUlhfQkQoYmRfcHJvZCk7CiAJCWJkX2NvbnMgPSBSWF9CRChiZF9jb25zKTsKIAorCQkvKiBQcmVmZXRjaCB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBCRCBkZXNjcmlwdG9yCisJCSAgIGF0IHByb2R1Y2VyJ3MgaW5kZXguIEl0IHdpbGwgYmUgbmVlZGVkIHdoZW4gbmV3IHNrYiBpcworCQkgICBhbGxvY2F0ZWQgKi8KKwkJcHJlZmV0Y2goKHZvaWQgKikoUEFHRV9BTElHTigodW5zaWduZWQgbG9uZykKKwkJCQkJICAgICAoJmZwLT5yeF9kZXNjX3JpbmdbYmRfcHJvZF0pKSAtCisJCQkJICBQQUdFX1NJWkUgKyAxKSk7CisKIAkJY3FlID0gJmZwLT5yeF9jb21wX3JpbmdbY29tcF9yaW5nX2NvbnNdOwogCQljcWVfZnBfZmxhZ3MgPSBjcWUtPmZhc3RfcGF0aF9jcWUudHlwZV9lcnJvcl9mbGFnczsKIApAQCAtMTU5OSw3ICsxNjI4LDggQEAKIAogCQkJCXNrYiA9IG5ld19za2I7CiAKLQkJCX0gZWxzZSBpZiAoYm54MnhfYWxsb2Nfcnhfc2tiKGJwLCBmcCwgYmRfcHJvZCkgPT0gMCkgeworCQkJfSBlbHNlCisJCQlpZiAobGlrZWx5KGJueDJ4X2FsbG9jX3J4X3NrYihicCwgZnAsIGJkX3Byb2QpID09IDApKSB7CiAJCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwKIAkJCQkJcGNpX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKSwKIAkJCQkJCSBicC0+cnhfYnVmX3NpemUsCkBAIC0xNjI5LDYgKzE2NTksNyBAQAogCQl9CiAKIAkJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIGZwLT5pbmRleCk7CisKICNpZmRlZiBCQ01fVkxBTgogCQlpZiAoKGJwLT52bGdycCAhPSBOVUxMKSAmJiAoYnAtPmZsYWdzICYgSFdfVkxBTl9SWF9GTEFHKSAmJgogCQkgICAgKGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS5wYXJzX2ZsYWdzLmZsYWdzKSAmCkBAIC0xNjc0LDcgKzE3MDUsNiBAQAogewogCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSBmcF9jb29raWU7CiAJc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKLQlpbnQgaW5kZXggPSBmcC0+aW5kZXg7CiAKIAkvKiBSZXR1cm4gaGVyZSBpZiBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgKi8KIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpIHsKQEAgLTE2ODMsMjAgKzE3MTMsMzQgQEAKIAl9CiAKIAlEUChCTlgyWF9NU0dfRlAsICJnb3QgYW4gTVNJLVggaW50ZXJydXB0IG9uIElEWDpTQiBbJWQ6JWRdXG4iLAotCSAgIGluZGV4LCBmcC0+c2JfaWQpOworCSAgIGZwLT5pbmRleCwgZnAtPnNiX2lkKTsKIAlibngyeF9hY2tfc2IoYnAsIGZwLT5zYl9pZCwgVVNUT1JNX0lELCAwLCBJR1VfSU5UX0RJU0FCTEUsIDApOwogCiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAjZW5kaWYKKwkvKiBIYW5kbGUgUnggb3IgVHggYWNjb3JkaW5nIHRvIE1TSS1YIHZlY3RvciAqLworCWlmIChmcC0+aXNfcnhfcXVldWUpIHsKKwkJcHJlZmV0Y2goZnAtPnJ4X2NvbnNfc2IpOworCQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CiAKLQlwcmVmZXRjaChmcC0+cnhfY29uc19zYik7Ci0JcHJlZmV0Y2goZnAtPnR4X2NvbnNfc2IpOwotCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKLQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CisJCW5hcGlfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCBmcC0+aW5kZXgsIG5hcGkpKTsKIAotCW5hcGlfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCBpbmRleCwgbmFwaSkpOworCX0gZWxzZSB7CisJCXByZWZldGNoKGZwLT50eF9jb25zX3NiKTsKKwkJcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOworCisJCWJueDJ4X3VwZGF0ZV9mcHNiX2lkeChmcCk7CisJCXJtYigpOworCQlibngyeF90eF9pbnQoZnApOworCisJCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCisJCWJueDJ4X2Fja19zYihicCwgZnAtPnNiX2lkLCBVU1RPUk1fSUQsCisJCQkgICAgIGxlMTZfdG9fY3B1KGZwLT5mcF91X2lkeCksIElHVV9JTlRfTk9QLCAxKTsKKwkJYm54MnhfYWNrX3NiKGJwLCBmcC0+c2JfaWQsIENTVE9STV9JRCwKKwkJCSAgICAgbGUxNl90b19jcHUoZnAtPmZwX2NfaWR4KSwgSUdVX0lOVF9FTkFCTEUsIDEpOworCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE3MDYsNiArMTc1MCw3IEBACiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldl9pbnN0YW5jZSk7CiAJdTE2IHN0YXR1cyA9IGJueDJ4X2Fja19pbnQoYnApOwogCXUxNiBtYXNrOworCWludCBpOwogCiAJLyogUmV0dXJuIGhlcmUgaWYgaW50ZXJydXB0IGlzIHNoYXJlZCBhbmQgaXQncyBub3QgZm9yIHVzICovCiAJaWYgKHVubGlrZWx5KHN0YXR1cyA9PSAwKSkgewpAQCAtMTcyNSwxOCArMTc3MCwzOCBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAjZW5kaWYKIAotCW1hc2sgPSAweDIgPDwgYnAtPmZwWzBdLnNiX2lkOwotCWlmIChzdGF0dXMgJiBtYXNrKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwWzBdOworCWZvciAoaSA9IDA7IGkgPCBCTlgyWF9OVU1fUVVFVUVTKGJwKTsgaSsrKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCi0JCXByZWZldGNoKGZwLT5yeF9jb25zX3NiKTsKLQkJcHJlZmV0Y2goZnAtPnR4X2NvbnNfc2IpOwotCQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7Ci0JCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKKwkJbWFzayA9IDB4MiA8PCBmcC0+c2JfaWQ7CisJCWlmIChzdGF0dXMgJiBtYXNrKSB7CisJCQkvKiBIYW5kbGUgUnggb3IgVHggYWNjb3JkaW5nIHRvIFNCIGlkICovCisJCQlpZiAoZnAtPmlzX3J4X3F1ZXVlKSB7CisJCQkJcHJlZmV0Y2goZnAtPnJ4X2NvbnNfc2IpOworCQkJCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suCisJCQkJCQkJc3RhdHVzX2Jsb2NrX2luZGV4KTsKIAotCQluYXBpX3NjaGVkdWxlKCZibngyeF9mcChicCwgMCwgbmFwaSkpOworCQkJCW5hcGlfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCBmcC0+aW5kZXgsIG5hcGkpKTsKIAotCQlzdGF0dXMgJj0gfm1hc2s7CisJCQl9IGVsc2UgeworCQkJCXByZWZldGNoKGZwLT50eF9jb25zX3NiKTsKKwkJCQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLgorCQkJCQkJCXN0YXR1c19ibG9ja19pbmRleCk7CisKKwkJCQlibngyeF91cGRhdGVfZnBzYl9pZHgoZnApOworCQkJCXJtYigpOworCQkJCWJueDJ4X3R4X2ludChmcCk7CisKKwkJCQkvKiBSZS1lbmFibGUgaW50ZXJydXB0cyAqLworCQkJCWJueDJ4X2Fja19zYihicCwgZnAtPnNiX2lkLCBVU1RPUk1fSUQsCisJCQkJCSAgICAgbGUxNl90b19jcHUoZnAtPmZwX3VfaWR4KSwKKwkJCQkJICAgICBJR1VfSU5UX05PUCwgMSk7CisJCQkJYm54MnhfYWNrX3NiKGJwLCBmcC0+c2JfaWQsIENTVE9STV9JRCwKKwkJCQkJICAgICBsZTE2X3RvX2NwdShmcC0+ZnBfY19pZHgpLAorCQkJCQkgICAgIElHVV9JTlRfRU5BQkxFLCAxKTsKKwkJCX0KKwkJCXN0YXR1cyAmPSB+bWFzazsKKwkJfQogCX0KIAogCkBAIC0yMDYzLDYgKzIxMjgsMTIgQEAKIAogc3RhdGljIHZvaWQgYm54MnhfbGlua19yZXBvcnQoc3RydWN0IGJueDJ4ICpicCkKIHsKKwlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX0RJU0FCTEVEKSB7CisJCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBOSUMgTGluayBpcyBEb3duXG4iLCBicC0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApIHsKIAkJaWYgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKQogCQkJbmV0aWZfY2Fycmllcl9vbihicC0+ZGV2KTsKQEAgLTIxMDIsOSArMjE3Myw3IEBACiAJCS8qIEluaXRpYWxpemUgbGluayBwYXJhbWV0ZXJzIHN0cnVjdHVyZSB2YXJpYWJsZXMgKi8KIAkJLyogSXQgaXMgcmVjb21tZW5kZWQgdG8gdHVybiBvZmYgUlggRkMgZm9yIGp1bWJvIGZyYW1lcwogCQkgICBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlICovCi0JCWlmIChJU19FMUhNRihicCkpCi0JCQlicC0+bGlua19wYXJhbXMucmVxX2ZjX2F1dG9fYWR2ID0gQk5YMlhfRkxPV19DVFJMX0JPVEg7Ci0JCWVsc2UgaWYgKGJwLT5kZXYtPm10dSA+IDUwMDApCisJCWlmIChicC0+ZGV2LT5tdHUgPiA1MDAwKQogCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9mY19hdXRvX2FkdiA9IEJOWDJYX0ZMT1dfQ1RSTF9UWDsKIAkJZWxzZQogCQkJYnAtPmxpbmtfcGFyYW1zLnJlcV9mY19hdXRvX2FkdiA9IEJOWDJYX0ZMT1dfQ1RSTF9CT1RIOwpAQCAtMjE5OSw2ICsyMjY4LDQ2IEBACiAJYnAtPmNtbmcuZmFpcl92YXJzLmZhaXJuZXNzX3RpbWVvdXQgPSBmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYyAvIDQ7CiB9CiAKKy8qIENhbGN1bGF0ZXMgdGhlIHN1bSBvZiB2bl9taW5fcmF0ZXMuCisgICBJdCdzIG5lZWRlZCBmb3IgZnVydGhlciBub3JtYWxpemluZyBvZiB0aGUgbWluX3JhdGVzLgorICAgUmV0dXJuczoKKyAgICAgc3VtIG9mIHZuX21pbl9yYXRlcy4KKyAgICAgICBvcgorICAgICAwIC0gaWYgYWxsIHRoZSBtaW5fcmF0ZXMgYXJlIDAuCisgICAgIEluIHRoZSBsYXRlciBjYXNlIGZhaW5lc3MgYWxnb3JpdGhtIHNob3VsZCBiZSBkZWFjdGl2YXRlZC4KKyAgICAgSWYgbm90IGFsbCBtaW5fcmF0ZXMgYXJlIHplcm8gdGhlbiB0aG9zZSB0aGF0IGFyZSB6ZXJvZXMgd2lsbCBiZSBzZXQgdG8gMS4KKyAqLworc3RhdGljIHZvaWQgYm54MnhfY2FsY192bl93ZWlnaHRfc3VtKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IGFsbF96ZXJvID0gMTsKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCB2bjsKKworCWJwLT52bl93ZWlnaHRfc3VtID0gMDsKKwlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspIHsKKwkJaW50IGZ1bmMgPSAyKnZuICsgcG9ydDsKKwkJdTMyIHZuX2NmZyA9IFNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbZnVuY10uY29uZmlnKTsKKwkJdTMyIHZuX21pbl9yYXRlID0gKCh2bl9jZmcgJiBGVU5DX01GX0NGR19NSU5fQldfTUFTSykgPj4KKwkJCQkgICBGVU5DX01GX0NGR19NSU5fQldfU0hJRlQpICogMTAwOworCisJCS8qIFNraXAgaGlkZGVuIHZucyAqLworCQlpZiAodm5fY2ZnICYgRlVOQ19NRl9DRkdfRlVOQ19ISURFKQorCQkJY29udGludWU7CisKKwkJLyogSWYgbWluIHJhdGUgaXMgemVybyAtIHNldCBpdCB0byAxICovCisJCWlmICghdm5fbWluX3JhdGUpCisJCQl2bl9taW5fcmF0ZSA9IERFRl9NSU5fUkFURTsKKwkJZWxzZQorCQkJYWxsX3plcm8gPSAwOworCisJCWJwLT52bl93ZWlnaHRfc3VtICs9IHZuX21pbl9yYXRlOworCX0KKworCS8qIC4uLiBvbmx5IGlmIGFsbCBtaW4gcmF0ZXMgYXJlIHplcm9zIC0gZGlzYWJsZSBmYWlybmVzcyAqLworCWlmIChhbGxfemVybykKKwkJYnAtPnZuX3dlaWdodF9zdW0gPSAwOworfQorCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X3ZuX21pbm1heChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZnVuYykKIHsKIAlzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3ZuIG1fcnNfdm47CkBAIC0yMjc2LDcgKzIzODUsNyBAQAogCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApIHsKIAogCQkvKiBkcm9wbGVzcyBmbG93IGNvbnRyb2wgKi8KLQkJaWYgKENISVBfSVNfRTFIKGJwKSkgeworCQlpZiAoQ0hJUF9JU19FMUgoYnApICYmIGJwLT5kcm9wbGVzc19mYykgewogCQkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKIAkJCXUzMiBwYXVzZV9lbmFibGVkID0gMDsKIApAQCAtMjI4NCw3ICsyMzkzLDcgQEAKIAkJCQlwYXVzZV9lbmFibGVkID0gMTsKIAogCQkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJICAgICAgIFVTVE9STV9QQVVTRV9FTkFCTEVEX09GRlNFVChwb3J0KSwKKwkJCSAgICAgICBVU1RPUk1fRVRIX1BBVVNFX0VOQUJMRURfT0ZGU0VUKHBvcnQpLAogCQkJICAgICAgIHBhdXNlX2VuYWJsZWQpOwogCQl9CiAKQEAgLTIzMDksMTQgKzI0MTgsMTIgQEAKIAkJaW50IGZ1bmM7CiAJCWludCB2bjsKIAorCQkvKiBTZXQgdGhlIGF0dGVudGlvbiB0b3dhcmRzIG90aGVyIGRyaXZlcnMgb24gdGhlIHNhbWUgcG9ydCAqLwogCQlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspIHsKIAkJCWlmICh2biA9PSBCUF9FMUhWTihicCkpCiAJCQkJY29udGludWU7CiAKIAkJCWZ1bmMgPSAoKHZuIDw8IDEpIHwgcG9ydCk7Ci0KLQkJCS8qIFNldCB0aGUgYXR0ZW50aW9uIHRvd2FyZHMgb3RoZXIgZHJpdmVycwotCQkJICAgb24gdGhlIHNhbWUgcG9ydCAqLwogCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzAgKwogCQkJICAgICAgIChMSU5LX1NZTkNfQVRURU5USU9OX0JJVF9GVU5DXzAgKyBmdW5jKSo0LCAxKTsKIAkJfQpAQCAtMjM0Miw2ICsyNDQ5LDggQEAKIAogc3RhdGljIHZvaWQgYm54MnhfX2xpbmtfc3RhdHVzX3VwZGF0ZShzdHJ1Y3QgYm54MnggKmJwKQogeworCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisKIAlpZiAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX09QRU4pCiAJCXJldHVybjsKIApAQCAtMjM1Miw2ICsyNDYxLDkgQEAKIAllbHNlCiAJCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfU1RPUCk7CiAKKwlicC0+bWZfY29uZmlnID0gU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS5jb25maWcpOworCWJueDJ4X2NhbGNfdm5fd2VpZ2h0X3N1bShicCk7CisKIAkvKiBpbmRpY2F0ZSBsaW5rIHN0YXR1cyAqLwogCWJueDJ4X2xpbmtfcmVwb3J0KGJwKTsKIH0KQEAgLTIzODAsNiArMjQ5MiwxNTIgQEAKICAqIEdlbmVyYWwgc2VydmljZSBmdW5jdGlvbnMKICAqLwogCisvKiBzZW5kIHRoZSBNQ1AgYSByZXF1ZXN0LCBibG9jayB1bnRpbCB0aGVyZSBpcyBhIHJlcGx5ICovCit1MzIgYm54MnhfZndfY29tbWFuZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgY29tbWFuZCkKK3sKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCXUzMiBzZXEgPSArK2JwLT5md19zZXE7CisJdTMyIHJjID0gMDsKKwl1MzIgY250ID0gMTsKKwl1OCBkZWxheSA9IENISVBfUkVWX0lTX1NMT1coYnApID8gMTAwIDogMTA7CisKKwlTSE1FTV9XUihicCwgZnVuY19tYltmdW5jXS5kcnZfbWJfaGVhZGVyLCAoY29tbWFuZCB8IHNlcSkpOworCURQKEJOWDJYX01TR19NQ1AsICJ3cm90ZSBjb21tYW5kICgleCkgdG8gRlcgTUJcbiIsIChjb21tYW5kIHwgc2VxKSk7CisKKwlkbyB7CisJCS8qIGxldCB0aGUgRlcgZG8gaXQncyBtYWdpYyAuLi4gKi8KKwkJbXNsZWVwKGRlbGF5KTsKKworCQlyYyA9IFNITUVNX1JEKGJwLCBmdW5jX21iW2Z1bmNdLmZ3X21iX2hlYWRlcik7CisKKwkJLyogR2l2ZSB0aGUgRlcgdXAgdG8gMiBzZWNvbmQgKDIwMCoxMG1zKSAqLworCX0gd2hpbGUgKChzZXEgIT0gKHJjICYgRldfTVNHX1NFUV9OVU1CRVJfTUFTSykpICYmIChjbnQrKyA8IDIwMCkpOworCisJRFAoQk5YMlhfTVNHX01DUCwgIlthZnRlciAlZCBtc10gcmVhZCAoJXgpIHNlcSBpcyAoJXgpIGZyb20gRlcgTUJcbiIsCisJICAgY250KmRlbGF5LCByYywgc2VxKTsKKworCS8qIGlzIHRoaXMgYSByZXBseSB0byBvdXIgY29tbWFuZD8gKi8KKwlpZiAoc2VxID09IChyYyAmIEZXX01TR19TRVFfTlVNQkVSX01BU0spKQorCQlyYyAmPSBGV19NU0dfQ09ERV9NQVNLOworCWVsc2UgeworCQkvKiBGVyBCVUchICovCisJCUJOWDJYX0VSUigiRlcgZmFpbGVkIHRvIHJlc3BvbmQhXG4iKTsKKwkJYm54MnhfZndfZHVtcChicCk7CisJCXJjID0gMDsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKHN0cnVjdCBibngyeCAqYnApOworc3RhdGljIHZvaWQgYm54Mnhfc2V0X21hY19hZGRyX2UxaChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgc2V0KTsKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitzdGF0aWMgdm9pZCBibngyeF9lMWhfZGlzYWJsZShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGk7CisKKwlicC0+cnhfbW9kZSA9IEJOWDJYX1JYX01PREVfTk9ORTsKKwlibngyeF9zZXRfc3Rvcm1fcnhfbW9kZShicCk7CisKKwluZXRpZl90eF9kaXNhYmxlKGJwLT5kZXYpOworCWJwLT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsJLyogcHJldmVudCB0eCB0aW1lb3V0ICovCisKKwlSRUdfV1IoYnAsIE5JR19SRUdfTExIMF9GVU5DX0VOICsgcG9ydCo4LCAwKTsKKworCWJueDJ4X3NldF9tYWNfYWRkcl9lMWgoYnAsIDApOworCisJZm9yIChpID0gMDsgaSA8IE1DX0hBU0hfU0laRTsgaSsrKQorCQlSRUdfV1IoYnAsIE1DX0hBU0hfT0ZGU0VUKGJwLCBpKSwgMCk7CisKKwluZXRpZl9jYXJyaWVyX29mZihicC0+ZGV2KTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZTFoX2VuYWJsZShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisKKwlSRUdfV1IoYnAsIE5JR19SRUdfTExIMF9GVU5DX0VOICsgcG9ydCo4LCAxKTsKKworCWJueDJ4X3NldF9tYWNfYWRkcl9lMWgoYnAsIDEpOworCisJLyogVHggcXVldWUgc2hvdWxkIGJlIG9ubHkgcmVlbmFibGVkICovCisJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGJwLT5kZXYpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBmaWx0ZXIuICovCisJYm54Mnhfc2V0X3J4X21vZGUoYnAtPmRldik7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3VwZGF0ZV9taW5fbWF4KHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgdm4sIGk7CisKKwkvKiBJbml0IHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgY29udGV4dHMgKi8KKwlibngyeF9pbml0X3BvcnRfbWlubWF4KGJwKTsKKworCWJueDJ4X2NhbGNfdm5fd2VpZ2h0X3N1bShicCk7CisKKwlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspCisJCWJueDJ4X2luaXRfdm5fbWlubWF4KGJwLCAyKnZuICsgcG9ydCk7CisKKwlpZiAoYnAtPnBvcnQucG1mKSB7CisJCWludCBmdW5jOworCisJCS8qIFNldCB0aGUgYXR0ZW50aW9uIHRvd2FyZHMgb3RoZXIgZHJpdmVycyBvbiB0aGUgc2FtZSBwb3J0ICovCisJCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykgeworCQkJaWYgKHZuID09IEJQX0UxSFZOKGJwKSkKKwkJCQljb250aW51ZTsKKworCQkJZnVuYyA9ICgodm4gPDwgMSkgfCBwb3J0KTsKKwkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8wICsKKwkJCSAgICAgICAoTElOS19TWU5DX0FUVEVOVElPTl9CSVRfRlVOQ18wICsgZnVuYykqNCwgMSk7CisJCX0KKworCQkvKiBTdG9yZSBpdCB0byBpbnRlcm5hbCBtZW1vcnkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpIC8gNDsgaSsrKQorCQkJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKworCQkJICAgICAgIFhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKHBvcnQpICsgaSo0LAorCQkJICAgICAgICgodTMyICopKCZicC0+Y21uZykpW2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2RjY19ldmVudChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgZGNjX2V2ZW50KQoreworCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisKKwlEUChCTlgyWF9NU0dfTUNQLCAiZGNjX2V2ZW50IDB4JXhcbiIsIGRjY19ldmVudCk7CisJYnAtPm1mX2NvbmZpZyA9IFNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbZnVuY10uY29uZmlnKTsKKworCWlmIChkY2NfZXZlbnQgJiBEUlZfU1RBVFVTX0RDQ19ESVNBQkxFX0VOQUJMRV9QRikgeworCisJCWlmIChicC0+bWZfY29uZmlnICYgRlVOQ19NRl9DRkdfRlVOQ19ESVNBQkxFRCkgeworCQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgIm1mX2NmZyBmdW5jdGlvbiBkaXNhYmxlZFxuIik7CisJCQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9ESVNBQkxFRDsKKworCQkJYm54MnhfZTFoX2Rpc2FibGUoYnApOworCQl9IGVsc2UgeworCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJtZl9jZmcgZnVuY3Rpb24gZW5hYmxlZFxuIik7CisJCQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9PUEVOOworCisJCQlibngyeF9lMWhfZW5hYmxlKGJwKTsKKwkJfQorCQlkY2NfZXZlbnQgJj0gfkRSVl9TVEFUVVNfRENDX0RJU0FCTEVfRU5BQkxFX1BGOworCX0KKwlpZiAoZGNjX2V2ZW50ICYgRFJWX1NUQVRVU19EQ0NfQkFORFdJRFRIX0FMTE9DQVRJT04pIHsKKworCQlibngyeF91cGRhdGVfbWluX21heChicCk7CisJCWRjY19ldmVudCAmPSB+RFJWX1NUQVRVU19EQ0NfQkFORFdJRFRIX0FMTE9DQVRJT047CisJfQorCisJLyogUmVwb3J0IHJlc3VsdHMgdG8gTUNQICovCisJaWYgKGRjY19ldmVudCkKKwkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX0RDQ19GQUlMVVJFKTsKKwllbHNlCisJCWJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9EQ0NfT0spOworfQorCiAvKiB0aGUgc2xvdyBwYXRoIHF1ZXVlIGlzIG9kZCBzaW5jZSBjb21wbGV0aW9ucyBhcnJpdmUgb24gdGhlIGZhc3RwYXRoIHJpbmcgKi8KIHN0YXRpYyBpbnQgYm54Mnhfc3BfcG9zdChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgY29tbWFuZCwgaW50IGNpZCwKIAkJCSB1MzIgZGF0YV9oaSwgdTMyIGRhdGFfbG8sIGludCBjb21tb24pCkBAIC0yNDMwLDkgKzI2ODgsMTQgQEAKIAkJYnAtPnNwcV9wcm9kX2lkeCsrOwogCX0KIAorCS8qIE1ha2Ugc3VyZSB0aGF0IEJEIGRhdGEgaXMgdXBkYXRlZCBiZWZvcmUgd3JpdGluZyB0aGUgcHJvZHVjZXIgKi8KKwl3bWIoKTsKKwogCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX1NQUV9QUk9EX09GRlNFVChmdW5jKSwKIAkgICAgICAgYnAtPnNwcV9wcm9kX2lkeCk7CiAKKwltbWlvd2IoKTsKKwogCXNwaW5fdW5sb2NrX2JoKCZicC0+c3BxX2xvY2spOwogCXJldHVybiAwOwogfQpAQCAtMjU5OSwxMSArMjg2MiwyOCBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2Zhbl9mYWlsdXJlKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKworCS8qIG1hcmsgdGhlIGZhaWx1cmUgKi8KKwlicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcgJj0gflBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX01BU0s7CisJYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnIHw9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU7CisJU0hNRU1fV1IoYnAsIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLmV4dGVybmFsX3BoeV9jb25maWcsCisJCSBicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOworCisJLyogbG9nIHRoZSBmYWlsdXJlICovCisJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRmFuIEZhaWx1cmUgb24gTmV0d29yayBDb250cm9sbGVyICVzIGhhcyBjYXVzZWQiCisJICAgICAgICIgdGhlIGRyaXZlciB0byBzaHV0ZG93biB0aGUgY2FyZCB0byBwcmV2ZW50IHBlcm1hbmVudCIKKwkgICAgICAgIiBkYW1hZ2UuICBQbGVhc2UgY29udGFjdCBEZWxsIFN1cHBvcnQgZm9yIGFzc2lzdGFuY2VcbiIsCisJICAgICAgIGJwLT5kZXYtPm5hbWUpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfYXR0bl9pbnRfZGVhc3NlcnRlZDAoc3RydWN0IGJueDJ4ICpicCwgdTMyIGF0dG4pCiB7CiAJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKIAlpbnQgcmVnX29mZnNldDsKLQl1MzIgdmFsOworCXUzMiB2YWwsIHN3YXBfdmFsLCBzd2FwX292ZXJyaWRlOwogCiAJcmVnX29mZnNldCA9IChwb3J0ID8gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wIDoKIAkJCSAgICAgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wKTsKQEAgLTI2MTYsMzYgKzI4OTYsMzIgQEAKIAogCQlCTlgyWF9FUlIoIlNQSU81IGh3IGF0dGVudGlvblxuIik7CiAKKwkJLyogRmFuIGZhaWx1cmUgYXR0ZW50aW9uICovCiAJCXN3aXRjaCAoWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKSkgewogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6Ci0JCQkvKiBGYW4gZmFpbHVyZSBhdHRlbnRpb24gKi8KLQotCQkJLyogVGhlIFBIWSByZXNldCBpcyBjb250cm9sbGVkIGJ5IEdQSU8gMSAqLwotCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKLQkJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLCBwb3J0KTsKIAkJCS8qIExvdyBwb3dlciBtb2RlIGlzIGNvbnRyb2xsZWQgYnkgR1BJTyAyICovCiAJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAogCQkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csIHBvcnQpOwotCQkJLyogbWFyayB0aGUgZmFpbHVyZSAqLwotCQkJYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnICY9Ci0JCQkJCX5QT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9NQVNLOwotCQkJYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnIHw9Ci0JCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkU7Ci0JCQlTSE1FTV9XUihicCwKLQkJCQkgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uCi0JCQkJCQkJZXh0ZXJuYWxfcGh5X2NvbmZpZywKLQkJCQkgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKLQkJCS8qIGxvZyB0aGUgZmFpbHVyZSAqLwotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRmFuIEZhaWx1cmUgb24gTmV0d29yayIKLQkJCSAgICAgICAiIENvbnRyb2xsZXIgJXMgaGFzIGNhdXNlZCB0aGUgZHJpdmVyIHRvIgotCQkJICAgICAgICIgc2h1dGRvd24gdGhlIGNhcmQgdG8gcHJldmVudCBwZXJtYW5lbnQiCi0JCQkgICAgICAgIiBkYW1hZ2UuICBQbGVhc2UgY29udGFjdCBEZWxsIFN1cHBvcnQgZm9yIgotCQkJICAgICAgICIgYXNzaXN0YW5jZVxuIiwgYnAtPmRldi0+bmFtZSk7CisJCQkvKiBUaGUgUEhZIHJlc2V0IGlzIGNvbnRyb2xsZWQgYnkgR1BJTyAxICovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csIHBvcnQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgorCQkJLyogVGhlIFBIWSByZXNldCBpcyBjb250cm9sbGVkIGJ5IEdQSU8gMSAqLworCQkJLyogZmFrZSB0aGUgcG9ydCBudW1iZXIgdG8gY2FuY2VsIHRoZSBzd2FwIGRvbmUgaW4KKwkJCSAgIHNldF9ncGlvKCkgKi8KKwkJCXN3YXBfdmFsID0gUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCk7CisJCQlzd2FwX292ZXJyaWRlID0gUkVHX1JEKGJwLCBOSUdfUkVHX1NUUkFQX09WRVJSSURFKTsKKwkJCXBvcnQgPSAoc3dhcF92YWwgJiYgc3dhcF9vdmVycmlkZSkgXiAxOworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKKwkJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLCBwb3J0KTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQorCQlibngyeF9mYW5fZmFpbHVyZShicCk7CiAJfQogCiAJaWYgKGF0dG4gJiAoQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMCB8CkBAIC0yNjYyLDcgKzI5MzgsNyBAQAogCQlSRUdfV1IoYnAsIHJlZ19vZmZzZXQsIHZhbCk7CiAKIAkJQk5YMlhfRVJSKCJGQVRBTCBIVyBibG9jayBhdHRlbnRpb24gc2V0MCAweCV4XG4iLAotCQkJICAoYXR0biAmIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMCkpOworCQkJICAodTMyKShhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8wKSk7CiAJCWJueDJ4X3BhbmljKCk7CiAJfQogfQpAQCAtMjY5Myw3ICsyOTY5LDcgQEAKIAkJUkVHX1dSKGJwLCByZWdfb2Zmc2V0LCB2YWwpOwogCiAJCUJOWDJYX0VSUigiRkFUQUwgSFcgYmxvY2sgYXR0ZW50aW9uIHNldDEgMHgleFxuIiwKLQkJCSAgKGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzEpKTsKKwkJCSAgKHUzMikoYXR0biAmIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMSkpOwogCQlibngyeF9wYW5pYygpOwogCX0KIH0KQEAgLTI3MzMsNyArMzAwOSw3IEBACiAJCVJFR19XUihicCwgcmVnX29mZnNldCwgdmFsKTsKIAogCQlCTlgyWF9FUlIoIkZBVEFMIEhXIGJsb2NrIGF0dGVudGlvbiBzZXQyIDB4JXhcbiIsCi0JCQkgIChhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8yKSk7CisJCQkgICh1MzIpKGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzIpKTsKIAkJYm54MnhfcGFuaWMoKTsKIAl9CiB9CkBAIC0yNzQ4LDkgKzMwMjQsMTIgQEAKIAkJCWludCBmdW5jID0gQlBfRlVOQyhicCk7CiAKIAkJCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMiArIGZ1bmMqNCwgMCk7CisJCQl2YWwgPSBTSE1FTV9SRChicCwgZnVuY19tYltmdW5jXS5kcnZfc3RhdHVzKTsKKwkJCWlmICh2YWwgJiBEUlZfU1RBVFVTX0RDQ19FVkVOVF9NQVNLKQorCQkJCWJueDJ4X2RjY19ldmVudChicCwKKwkJCQkJICAgICh2YWwgJiBEUlZfU1RBVFVTX0RDQ19FVkVOVF9NQVNLKSk7CiAJCQlibngyeF9fbGlua19zdGF0dXNfdXBkYXRlKGJwKTsKLQkJCWlmIChTSE1FTV9SRChicCwgZnVuY19tYltmdW5jXS5kcnZfc3RhdHVzKSAmCi0JCQkJCQkJRFJWX1NUQVRVU19QTUYpCisJCQlpZiAoKGJwLT5wb3J0LnBtZiA9PSAwKSAmJiAodmFsICYgRFJWX1NUQVRVU19QTUYpKQogCQkJCWJueDJ4X3BtZl91cGRhdGUoYnApOwogCiAJCX0gZWxzZSBpZiAoYXR0biAmIEJOWDJYX01DX0FTU0VSVF9CSVRTKSB7CkBAIC0zMTA5LDUzICszMzg4LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4X3N0YXRzX2luaXQoc3RydWN0IGJueDJ4ICpicCkKLXsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCWludCBpOwotCi0JYnAtPnN0YXRzX3BlbmRpbmcgPSAwOwotCWJwLT5leGVjdXRlcl9pZHggPSAwOwotCWJwLT5zdGF0c19jb3VudGVyID0gMDsKLQotCS8qIHBvcnQgc3RhdHMgKi8KLQlpZiAoIUJQX05PTUNQKGJwKSkKLQkJYnAtPnBvcnQucG9ydF9zdHggPSBTSE1FTV9SRChicCwgcG9ydF9tYltwb3J0XS5wb3J0X3N0eCk7Ci0JZWxzZQotCQlicC0+cG9ydC5wb3J0X3N0eCA9IDA7Ci0JRFAoQk5YMlhfTVNHX1NUQVRTLCAicG9ydF9zdHggMHgleFxuIiwgYnAtPnBvcnQucG9ydF9zdHgpOwotCi0JbWVtc2V0KCYoYnAtPnBvcnQub2xkX25pZ19zdGF0cyksIDAsIHNpemVvZihzdHJ1Y3QgbmlnX3N0YXRzKSk7Ci0JYnAtPnBvcnQub2xkX25pZ19zdGF0cy5icmJfZGlzY2FyZCA9Ci0JCQlSRUdfUkQoYnAsIE5JR19SRUdfU1RBVDBfQlJCX0RJU0NBUkQgKyBwb3J0KjB4MzgpOwotCWJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMuYnJiX3RydW5jYXRlID0KLQkJCVJFR19SRChicCwgTklHX1JFR19TVEFUMF9CUkJfVFJVTkNBVEUgKyBwb3J0KjB4MzgpOwotCVJFR19SRF9ETUFFKGJwLCBOSUdfUkVHX1NUQVQwX0VHUkVTU19NQUNfUEtUMCArIHBvcnQqMHg1MCwKLQkJICAgICYoYnAtPnBvcnQub2xkX25pZ19zdGF0cy5lZ3Jlc3NfbWFjX3BrdDBfbG8pLCAyKTsKLQlSRUdfUkRfRE1BRShicCwgTklHX1JFR19TVEFUMF9FR1JFU1NfTUFDX1BLVDEgKyBwb3J0KjB4NTAsCi0JCSAgICAmKGJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMuZWdyZXNzX21hY19wa3QxX2xvKSwgMik7Ci0KLQkvKiBmdW5jdGlvbiBzdGF0cyAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwotCi0JCW1lbXNldCgmZnAtPm9sZF90Y2xpZW50LCAwLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOwotCQltZW1zZXQoJmZwLT5vbGRfdWNsaWVudCwgMCwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKLQkJbWVtc2V0KCZmcC0+b2xkX3hjbGllbnQsIDAsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7Ci0JCW1lbXNldCgmZnAtPmV0aF9xX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzKSk7Ci0JfQotCi0JbWVtc2V0KCZicC0+ZGV2LT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7Ci0JbWVtc2V0KCZicC0+ZXRoX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJueDJ4X2V0aF9zdGF0cykpOwotCi0JYnAtPnN0YXRzX3N0YXRlID0gU1RBVFNfU1RBVEVfRElTQUJMRUQ7Ci0JaWYgKElTX0UxSE1GKGJwKSAmJiBicC0+cG9ydC5wbWYgJiYgYnAtPnBvcnQucG9ydF9zdHgpCi0JCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfUE1GKTsKLX0KLQogc3RhdGljIHZvaWQgYm54MnhfaHdfc3RhdHNfcG9zdChzdHJ1Y3QgYm54MnggKmJwKQogewogCXN0cnVjdCBkbWFlX2NvbW1hbmQgKmRtYWUgPSAmYnAtPnN0YXRzX2RtYWU7CkBAIC0zNzE2LDcgKzM5NDgsOCBAQAogCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwogCWludCBpOwogCi0JbWVtc2V0KCYoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksIDAsCisJbWVtY3B5KCYoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSksCisJICAgICAgICYoYm54Mnhfc3AoYnAsIGZ1bmNfc3RhdHNfYmFzZSktPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2Z1bmNfc3RhdHMpIC0gMipzaXplb2YodTMyKSk7CiAJZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSA9IDA7CiAJZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbyA9IDA7CkBAIC0zNzI1LDcgKzM5NTgsNyBAQAogCWVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2hpID0gMDsKIAllc3RhdHMtPm5vX2J1ZmZfZGlzY2FyZF9sbyA9IDA7CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCQlpbnQgY2xfaWQgPSBmcC0+Y2xfaWQ7CiAJCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqdGNsaWVudCA9CkBAIC0zNzY0LDExICszOTk3LDI0IEBACiAJCX0KIAogCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpID0KLQkJcXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+dG90YWxfcmN2X2J5dGVzLmhpKTsKKwkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9icm9hZGNhc3RfYnl0ZXMuaGkpOwogCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvID0KKwkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9icm9hZGNhc3RfYnl0ZXMubG8pOworCisJCUFERF82NChxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgbGUzMl90b19jcHUodGNsaWVudC0+cmN2X211bHRpY2FzdF9ieXRlcy5oaSksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgbGUzMl90b19jcHUodGNsaWVudC0+cmN2X211bHRpY2FzdF9ieXRlcy5sbykpOworCisJCUFERF82NChxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgbGUzMl90b19jcHUodGNsaWVudC0+cmN2X3VuaWNhc3RfYnl0ZXMuaGkpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKKwkJICAgICAgIGxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl91bmljYXN0X2J5dGVzLmxvKSk7CisKKwkJcXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSA9CisJCQkJCXFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGk7CiAJCXFzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfbG8gPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnRvdGFsX3Jjdl9ieXRlcy5sbyk7CisJCQkJCXFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG87CiAKIAkJcXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSA9CiAJCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Vycm9yX2J5dGVzLmhpKTsKQEAgLTM4MDEsOSArNDA0NywxOSBAQAogCQlVUERBVEVfRVhURU5EX1VTVEFUKGJjYXN0X25vX2J1ZmZfcGt0cywgbm9fYnVmZl9kaXNjYXJkKTsKIAogCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X2J5dGVzLmhpKTsKKwkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT51bmljYXN0X2J5dGVzX3NlbnQuaGkpOwogCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvID0KLQkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X2J5dGVzLmxvKTsKKwkJCQlsZTMyX3RvX2NwdSh4Y2xpZW50LT51bmljYXN0X2J5dGVzX3NlbnQubG8pOworCisJCUFERF82NChxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgbGUzMl90b19jcHUoeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQuaGkpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9sbywKKwkJICAgICAgIGxlMzJfdG9fY3B1KHhjbGllbnQtPm11bHRpY2FzdF9ieXRlc19zZW50LmxvKSk7CisKKwkJQUREXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBsZTMyX3RvX2NwdSh4Y2xpZW50LT5icm9hZGNhc3RfYnl0ZXNfc2VudC5oaSksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvLAorCQkgICAgICAgbGUzMl90b19jcHUoeGNsaWVudC0+YnJvYWRjYXN0X2J5dGVzX3NlbnQubG8pKTsKIAogCQlVUERBVEVfRVhURU5EX1hTVEFUKHVuaWNhc3RfcGt0c19zZW50LAogCQkJCQl0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOwpAQCAtMzkxOSw3ICs0MTc1LDcgQEAKIAluc3RhdHMtPnR4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSk7CiAKIAluc3RhdHMtPnJ4X2Ryb3BwZWQgPSBlc3RhdHMtPm1hY19kaXNjYXJkOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQogCQluc3RhdHMtPnJ4X2Ryb3BwZWQgKz0KIAkJCWxlMzJfdG9fY3B1KGJwLT5mcFtpXS5vbGRfdGNsaWVudC5jaGVja3N1bV9kaXNjYXJkKTsKIApAQCAtMzk3Myw3ICs0MjI5LDcgQEAKIAllc3RhdHMtPnJ4X2Vycl9kaXNjYXJkX3BrdCA9IDA7CiAJZXN0YXRzLT5yeF9za2JfYWxsb2NfZmFpbGVkID0gMDsKIAllc3RhdHMtPmh3X2NzdW1fZXJyID0gMDsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBibngyeF9ldGhfcV9zdGF0cyAqcXN0YXRzID0gJmJwLT5mcFtpXS5ldGhfcV9zdGF0czsKIAogCQllc3RhdHMtPmRyaXZlcl94b2ZmICs9IHFzdGF0cy0+ZHJpdmVyX3hvZmY7CkBAIC00MDAzLDYgKzQyNTksOCBAQAogCWJueDJ4X2Rydl9zdGF0c191cGRhdGUoYnApOwogCiAJaWYgKGJwLT5tc2dsZXZlbCAmIE5FVElGX01TR19USU1FUikgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwMF9yeCA9IGJwLT5mcDsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcDBfdHggPSAmKGJwLT5mcFticC0+bnVtX3J4X3F1ZXVlc10pOwogCQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF90Y2xpZW50ID0KIAkJCQkJCQkmYnAtPmZwLT5vbGRfdGNsaWVudDsKIAkJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzICpxc3RhdHMgPSAmYnAtPmZwLT5ldGhfcV9zdGF0czsKQEAgLTQwMTMsMTMgKzQyNzEsMTMgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOlxuIiwgYnAtPmRldi0+bmFtZSk7CiAJCXByaW50ayhLRVJOX0RFQlVHICIgIHR4IGF2YWlsICglNHgpICB0eCBoYyBpZHggKCV4KSIKIAkJCQkgICIgIHR4IHBrdCAoJWx4KVxuIiwKLQkJICAgICAgIGJueDJ4X3R4X2F2YWlsKGJwLT5mcCksCi0JCSAgICAgICBsZTE2X3RvX2NwdSgqYnAtPmZwLT50eF9jb25zX3NiKSwgbnN0YXRzLT50eF9wYWNrZXRzKTsKKwkJICAgICAgIGJueDJ4X3R4X2F2YWlsKGZwMF90eCksCisJCSAgICAgICBsZTE2X3RvX2NwdSgqZnAwX3R4LT50eF9jb25zX3NiKSwgbnN0YXRzLT50eF9wYWNrZXRzKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiAgcnggdXNhZ2UgKCU0eCkgIHJ4IGhjIGlkeCAoJXgpIgogCQkJCSAgIiAgcnggcGt0ICglbHgpXG4iLAotCQkgICAgICAgKHUxNikobGUxNl90b19jcHUoKmJwLT5mcC0+cnhfY29uc19zYikgLQotCQkJICAgICBicC0+ZnAtPnJ4X2NvbXBfY29ucyksCi0JCSAgICAgICBsZTE2X3RvX2NwdSgqYnAtPmZwLT5yeF9jb25zX3NiKSwgbnN0YXRzLT5yeF9wYWNrZXRzKTsKKwkJICAgICAgICh1MTYpKGxlMTZfdG9fY3B1KCpmcDBfcngtPnJ4X2NvbnNfc2IpIC0KKwkJCSAgICAgZnAwX3J4LT5yeF9jb21wX2NvbnMpLAorCQkgICAgICAgbGUxNl90b19jcHUoKmZwMF9yeC0+cnhfY29uc19zYiksIG5zdGF0cy0+cnhfcGFja2V0cyk7CiAJCXByaW50ayhLRVJOX0RFQlVHICIgICVzIChYb2ZmIGV2ZW50cyAldSkgIGJyYiBkcm9wcyAldSAgIgogCQkJCSAgImJyYiB0cnVuY2F0ZSAldVxuIiwKIAkJICAgICAgIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGJwLT5kZXYpID8gIlhvZmYiIDogIlhvbiIpLApAQCAtNDE2NSwxMSArNDQyMywxODEgQEAKIAlibngyeF9zdGF0c19zdG1bc3RhdGVdW2V2ZW50XS5hY3Rpb24oYnApOwogCWJwLT5zdGF0c19zdGF0ZSA9IGJueDJ4X3N0YXRzX3N0bVtzdGF0ZV1bZXZlbnRdLm5leHRfc3RhdGU7CiAKKwkvKiBNYWtlIHN1cmUgdGhlIHN0YXRlIGhhcyBiZWVuICJjaGFuZ2VkIiAqLworCXNtcF93bWIoKTsKKwogCWlmICgoZXZlbnQgIT0gU1RBVFNfRVZFTlRfVVBEQVRFKSB8fCAoYnAtPm1zZ2xldmVsICYgTkVUSUZfTVNHX1RJTUVSKSkKIAkJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdGUgJWQgLT4gZXZlbnQgJWQgLT4gc3RhdGUgJWRcbiIsCiAJCSAgIHN0YXRlLCBldmVudCwgYnAtPnN0YXRzX3N0YXRlKTsKIH0KIAorc3RhdGljIHZvaWQgYm54MnhfcG9ydF9zdGF0c19iYXNlX2luaXQoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgZG1hZV9jb21tYW5kICpkbWFlOworCXUzMiAqc3RhdHNfY29tcCA9IGJueDJ4X3NwKGJwLCBzdGF0c19jb21wKTsKKworCS8qIHNhbml0eSAqLworCWlmICghYnAtPnBvcnQucG1mIHx8ICFicC0+cG9ydC5wb3J0X3N0eCkgeworCQlCTlgyWF9FUlIoIkJVRyFcbiIpOworCQlyZXR1cm47CisJfQorCisJYnAtPmV4ZWN1dGVyX2lkeCA9IDA7CisKKwlkbWFlID0gYm54Mnhfc3AoYnAsIGRtYWVbYnAtPmV4ZWN1dGVyX2lkeCsrXSk7CisJZG1hZS0+b3Bjb2RlID0gKERNQUVfQ01EX1NSQ19QQ0kgfCBETUFFX0NNRF9EU1RfR1JDIHwKKwkJCURNQUVfQ01EX0NfRFNUX1BDSSB8IERNQUVfQ01EX0NfRU5BQkxFIHwKKwkJCURNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQlETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKKyNlbHNlCisJCQlETUFFX0NNRF9FTkRJQU5JVFlfRFdfU1dBUCB8CisjZW5kaWYKKwkJCShCUF9QT1JUKGJwKSA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkgfAorCQkJKEJQX0UxSFZOKGJwKSA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOworCWRtYWUtPnNyY19hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHBvcnRfc3RhdHMpKTsKKwlkbWFlLT5zcmNfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBwb3J0X3N0YXRzKSk7CisJZG1hZS0+ZHN0X2FkZHJfbG8gPSBicC0+cG9ydC5wb3J0X3N0eCA+PiAyOworCWRtYWUtPmRzdF9hZGRyX2hpID0gMDsKKwlkbWFlLT5sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfcG9ydF9zdGF0cykgPj4gMjsKKwlkbWFlLT5jb21wX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOworCWRtYWUtPmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7CisJZG1hZS0+Y29tcF92YWwgPSBETUFFX0NPTVBfVkFMOworCisJKnN0YXRzX2NvbXAgPSAwOworCWJueDJ4X2h3X3N0YXRzX3Bvc3QoYnApOworCWJueDJ4X3N0YXRzX2NvbXAoYnApOworfQorCitzdGF0aWMgdm9pZCBibngyeF9mdW5jX3N0YXRzX2Jhc2VfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCB2biwgdm5fbWF4ID0gSVNfRTFITUYoYnApID8gRTFIVk5fTUFYIDogRTFWTl9NQVg7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgZnVuYzsKKwl1MzIgZnVuY19zdHg7CisKKwkvKiBzYW5pdHkgKi8KKwlpZiAoIWJwLT5wb3J0LnBtZiB8fCAhYnAtPmZ1bmNfc3R4KSB7CisJCUJOWDJYX0VSUigiQlVHIVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBzYXZlIG91ciBmdW5jX3N0eCAqLworCWZ1bmNfc3R4ID0gYnAtPmZ1bmNfc3R4OworCisJZm9yICh2biA9IFZOXzA7IHZuIDwgdm5fbWF4OyB2bisrKSB7CisJCWZ1bmMgPSAyKnZuICsgcG9ydDsKKworCQlicC0+ZnVuY19zdHggPSBTSE1FTV9SRChicCwgZnVuY19tYltmdW5jXS5md19tYl9wYXJhbSk7CisJCWJueDJ4X2Z1bmNfc3RhdHNfaW5pdChicCk7CisJCWJueDJ4X2h3X3N0YXRzX3Bvc3QoYnApOworCQlibngyeF9zdGF0c19jb21wKGJwKTsKKwl9CisKKwkvKiByZXN0b3JlIG91ciBmdW5jX3N0eCAqLworCWJwLT5mdW5jX3N0eCA9IGZ1bmNfc3R4OworfQorCitzdGF0aWMgdm9pZCBibngyeF9mdW5jX3N0YXRzX2Jhc2VfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCit7CisJc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZSA9ICZicC0+c3RhdHNfZG1hZTsKKwl1MzIgKnN0YXRzX2NvbXAgPSBibngyeF9zcChicCwgc3RhdHNfY29tcCk7CisKKwkvKiBzYW5pdHkgKi8KKwlpZiAoIWJwLT5mdW5jX3N0eCkgeworCQlCTlgyWF9FUlIoIkJVRyFcbiIpOworCQlyZXR1cm47CisJfQorCisJYnAtPmV4ZWN1dGVyX2lkeCA9IDA7CisJbWVtc2V0KGRtYWUsIDAsIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSk7CisKKwlkbWFlLT5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX0dSQyB8IERNQUVfQ01EX0RTVF9QQ0kgfAorCQkJRE1BRV9DTURfQ19EU1RfUENJIHwgRE1BRV9DTURfQ19FTkFCTEUgfAorCQkJRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCURNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAorI2Vsc2UKKwkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKKyNlbmRpZgorCQkJKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8CisJCQkoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7CisJZG1hZS0+c3JjX2FkZHJfbG8gPSBicC0+ZnVuY19zdHggPj4gMjsKKwlkbWFlLT5zcmNfYWRkcl9oaSA9IDA7CisJZG1hZS0+ZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgZnVuY19zdGF0c19iYXNlKSk7CisJZG1hZS0+ZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgZnVuY19zdGF0c19iYXNlKSk7CisJZG1hZS0+bGVuID0gc2l6ZW9mKHN0cnVjdCBob3N0X2Z1bmNfc3RhdHMpID4+IDI7CisJZG1hZS0+Y29tcF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKKwlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOworCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKKworCSpzdGF0c19jb21wID0gMDsKKwlibngyeF9od19zdGF0c19wb3N0KGJwKTsKKwlibngyeF9zdGF0c19jb21wKGJwKTsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwlpbnQgaTsKKworCWJwLT5zdGF0c19wZW5kaW5nID0gMDsKKwlicC0+ZXhlY3V0ZXJfaWR4ID0gMDsKKwlicC0+c3RhdHNfY291bnRlciA9IDA7CisKKwkvKiBwb3J0IGFuZCBmdW5jIHN0YXRzIGZvciBtYW5hZ2VtZW50ICovCisJaWYgKCFCUF9OT01DUChicCkpIHsKKwkJYnAtPnBvcnQucG9ydF9zdHggPSBTSE1FTV9SRChicCwgcG9ydF9tYltwb3J0XS5wb3J0X3N0eCk7CisJCWJwLT5mdW5jX3N0eCA9IFNITUVNX1JEKGJwLCBmdW5jX21iW2Z1bmNdLmZ3X21iX3BhcmFtKTsKKworCX0gZWxzZSB7CisJCWJwLT5wb3J0LnBvcnRfc3R4ID0gMDsKKwkJYnAtPmZ1bmNfc3R4ID0gMDsKKwl9CisJRFAoQk5YMlhfTVNHX1NUQVRTLCAicG9ydF9zdHggMHgleCAgZnVuY19zdHggMHgleFxuIiwKKwkgICBicC0+cG9ydC5wb3J0X3N0eCwgYnAtPmZ1bmNfc3R4KTsKKworCS8qIHBvcnQgc3RhdHMgKi8KKwltZW1zZXQoJihicC0+cG9ydC5vbGRfbmlnX3N0YXRzKSwgMCwgc2l6ZW9mKHN0cnVjdCBuaWdfc3RhdHMpKTsKKwlicC0+cG9ydC5vbGRfbmlnX3N0YXRzLmJyYl9kaXNjYXJkID0KKwkJCVJFR19SRChicCwgTklHX1JFR19TVEFUMF9CUkJfRElTQ0FSRCArIHBvcnQqMHgzOCk7CisJYnAtPnBvcnQub2xkX25pZ19zdGF0cy5icmJfdHJ1bmNhdGUgPQorCQkJUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVQwX0JSQl9UUlVOQ0FURSArIHBvcnQqMHgzOCk7CisJUkVHX1JEX0RNQUUoYnAsIE5JR19SRUdfU1RBVDBfRUdSRVNTX01BQ19QS1QwICsgcG9ydCoweDUwLAorCQkgICAgJihicC0+cG9ydC5vbGRfbmlnX3N0YXRzLmVncmVzc19tYWNfcGt0MF9sbyksIDIpOworCVJFR19SRF9ETUFFKGJwLCBOSUdfUkVHX1NUQVQwX0VHUkVTU19NQUNfUEtUMSArIHBvcnQqMHg1MCwKKwkJICAgICYoYnAtPnBvcnQub2xkX25pZ19zdGF0cy5lZ3Jlc3NfbWFjX3BrdDFfbG8pLCAyKTsKKworCS8qIGZ1bmN0aW9uIHN0YXRzICovCisJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CisKKwkJbWVtc2V0KCZmcC0+b2xkX3RjbGllbnQsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7CisJCW1lbXNldCgmZnAtPm9sZF91Y2xpZW50LCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOworCQltZW1zZXQoJmZwLT5vbGRfeGNsaWVudCwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKKwkJbWVtc2V0KCZmcC0+ZXRoX3Ffc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMpKTsKKwl9CisKKwltZW1zZXQoJmJwLT5kZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKKwltZW1zZXQoJmJwLT5ldGhfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzKSk7CisKKwlicC0+c3RhdHNfc3RhdGUgPSBTVEFUU19TVEFURV9ESVNBQkxFRDsKKworCWlmIChicC0+cG9ydC5wbWYpIHsKKwkJaWYgKGJwLT5wb3J0LnBvcnRfc3R4KQorCQkJYm54MnhfcG9ydF9zdGF0c19iYXNlX2luaXQoYnApOworCisJCWlmIChicC0+ZnVuY19zdHgpCisJCQlibngyeF9mdW5jX3N0YXRzX2Jhc2VfaW5pdChicCk7CisKKwl9IGVsc2UgaWYgKGJwLT5mdW5jX3N0eCkKKwkJYm54MnhfZnVuY19zdGF0c19iYXNlX3VwZGF0ZShicCk7Cit9CisKIHN0YXRpYyB2b2lkIGJueDJ4X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gKHN0cnVjdCBibngyeCAqKSBkYXRhOwpAQCAtNDIzMiwxMiArNDY2MCwxMyBAQAogewogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CiAKLQlibngyeF9pbml0X2ZpbGwoYnAsIFVTVE9STV9JTlRNRU1fQUREUiArCi0JCQlVU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgMCwKLQkJCXNpemVvZihzdHJ1Y3QgdXN0b3JtX3N0YXR1c19ibG9jaykvNCk7Ci0JYm54MnhfaW5pdF9maWxsKGJwLCBDU1RPUk1fSU5UTUVNX0FERFIgKwotCQkJQ1NUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChwb3J0LCBzYl9pZCksIDAsCi0JCQlzaXplb2Yoc3RydWN0IGNzdG9ybV9zdGF0dXNfYmxvY2spLzQpOworCS8qICJDU1RPUk0iICovCisJYm54MnhfaW5pdF9maWxsKGJwLCBDU0VNX1JFR19GQVNUX01FTU9SWSArCisJCQlDU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfVV9PRkZTRVQocG9ydCwgc2JfaWQpLCAwLAorCQkJQ1NUT1JNX1NCX1NUQVRVU19CTE9DS19VX1NJWkUgLyA0KTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsKKwkJCUNTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19DX09GRlNFVChwb3J0LCBzYl9pZCksIDAsCisJCQlDU1RPUk1fU0JfU1RBVFVTX0JMT0NLX0NfU0laRSAvIDQpOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X3NiKHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBob3N0X3N0YXR1c19ibG9jayAqc2IsCkBAIC00MjUzLDE3ICs0NjgyLDE3IEBACiAJCQkJCSAgICB1X3N0YXR1c19ibG9jayk7CiAJc2ItPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOwogCi0JUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCSAgICAgICBVU1RPUk1fU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0LCBzYl9pZCksIFU2NF9MTyhzZWN0aW9uKSk7Ci0JUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCSAgICAgICAoKFVTVE9STV9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQsIHNiX2lkKSkgKyA0KSwKKwlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJICAgICAgIENTVE9STV9TQl9IT1NUX1NCX0FERFJfVV9PRkZTRVQocG9ydCwgc2JfaWQpLCBVNjRfTE8oc2VjdGlvbikpOworCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgKChDU1RPUk1fU0JfSE9TVF9TQl9BRERSX1VfT0ZGU0VUKHBvcnQsIHNiX2lkKSkgKyA0KSwKIAkgICAgICAgVTY0X0hJKHNlY3Rpb24pKTsKLQlSRUdfV1I4KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKyBGUF9VU0JfRlVOQ19PRkYgKwotCQlVU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgZnVuYyk7CisJUkVHX1dSOChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsgRlBfVVNCX0ZVTkNfT0ZGICsKKwkJQ1NUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX1VfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgZnVuYyk7CiAKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19VU1RPUk1fU0JfTlVNX0lORElDRVM7IGluZGV4KyspCi0JCVJFR19XUjE2KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJIFVTVE9STV9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBzYl9pZCwgaW5kZXgpLCAxKTsKKwkJUkVHX1dSMTYoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJCQkgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfVV9PRkZTRVQocG9ydCwgc2JfaWQsIGluZGV4KSwgMSk7CiAKIAkvKiBDU1RPUk0gKi8KIAlzZWN0aW9uID0gKCh1NjQpbWFwcGluZykgKyBvZmZzZXRvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2ssCkBAIC00MjcxLDE2ICs0NzAwLDE2IEBACiAJc2ItPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOwogCiAJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwotCSAgICAgICBDU1RPUk1fU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0LCBzYl9pZCksIFU2NF9MTyhzZWN0aW9uKSk7CisJICAgICAgIENTVE9STV9TQl9IT1NUX1NCX0FERFJfQ19PRkZTRVQocG9ydCwgc2JfaWQpLCBVNjRfTE8oc2VjdGlvbikpOwogCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgKChDU1RPUk1fU0JfSE9TVF9TQl9BRERSX09GRlNFVChwb3J0LCBzYl9pZCkpICsgNCksCisJICAgICAgICgoQ1NUT1JNX1NCX0hPU1RfU0JfQUREUl9DX09GRlNFVChwb3J0LCBzYl9pZCkpICsgNCksCiAJICAgICAgIFU2NF9ISShzZWN0aW9uKSk7CiAJUkVHX1dSOChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsgRlBfQ1NCX0ZVTkNfT0ZGICsKLQkJQ1NUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChwb3J0LCBzYl9pZCksIGZ1bmMpOworCQlDU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfQ19PRkZTRVQocG9ydCwgc2JfaWQpLCBmdW5jKTsKIAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhDX0NTVE9STV9TQl9OVU1fSU5ESUNFUzsgaW5kZXgrKykKIAkJUkVHX1dSMTYoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JCQkgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIHNiX2lkLCBpbmRleCksIDEpOworCQkJIENTVE9STV9TQl9IQ19ESVNBQkxFX0NfT0ZGU0VUKHBvcnQsIHNiX2lkLCBpbmRleCksIDEpOwogCiAJYm54MnhfYWNrX3NiKGJwLCBzYl9pZCwgQ1NUT1JNX0lELCAwLCBJR1VfSU5UX0VOQUJMRSwgMCk7CiB9CkBAIC00Mjg5LDE2ICs0NzE4LDE2IEBACiB7CiAJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKIAotCWJueDJ4X2luaXRfZmlsbChicCwgVFNUT1JNX0lOVE1FTV9BRERSICsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsKIAkJCVRTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmMpLCAwLAogCQkJc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fZGVmX3N0YXR1c19ibG9jaykvNCk7Ci0JYm54MnhfaW5pdF9maWxsKGJwLCBVU1RPUk1fSU5UTUVNX0FERFIgKwotCQkJVVNUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuYyksIDAsCi0JCQlzaXplb2Yoc3RydWN0IHVzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrKS80KTsKLQlibngyeF9pbml0X2ZpbGwoYnAsIENTVE9STV9JTlRNRU1fQUREUiArCi0JCQlDU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgMCwKLQkJCXNpemVvZihzdHJ1Y3QgY3N0b3JtX2RlZl9zdGF0dXNfYmxvY2spLzQpOwotCWJueDJ4X2luaXRfZmlsbChicCwgWFNUT1JNX0lOVE1FTV9BRERSICsKKwlibngyeF9pbml0X2ZpbGwoYnAsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsKKwkJCUNTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfVV9PRkZTRVQoZnVuYyksIDAsCisJCQlzaXplb2Yoc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrX3UpLzQpOworCWJueDJ4X2luaXRfZmlsbChicCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKworCQkJQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19DX09GRlNFVChmdW5jKSwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgY3N0b3JtX2RlZl9zdGF0dXNfYmxvY2tfYykvNCk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBYU0VNX1JFR19GQVNUX01FTU9SWSArCiAJCQlYU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgMCwKIAkJCXNpemVvZihzdHJ1Y3QgeHN0b3JtX2RlZl9zdGF0dXNfYmxvY2spLzQpOwogfQpAQCAtNDM1MCwxNyArNDc3OSwxNyBAQAogCQkJCQkgICAgdV9kZWZfc3RhdHVzX2Jsb2NrKTsKIAlkZWZfc2ItPnVfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaWQgPSBzYl9pZDsKIAotCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgVVNUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKGZ1bmMpLCBVNjRfTE8oc2VjdGlvbikpOwotCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgKChVU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuYykpICsgNCksCisJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCSAgICAgICBDU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9VX09GRlNFVChmdW5jKSwgVTY0X0xPKHNlY3Rpb24pKTsKKwlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJICAgICAgICgoQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfVV9PRkZTRVQoZnVuYykpICsgNCksCiAJICAgICAgIFU2NF9ISShzZWN0aW9uKSk7Ci0JUkVHX1dSOChicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsgREVGX1VTQl9GVU5DX09GRiArCi0JCVVTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmMpLCBmdW5jKTsKKwlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBERUZfVVNCX0ZVTkNfT0ZGICsKKwkJQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19VX09GRlNFVChmdW5jKSwgZnVuYyk7CiAKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19VU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQotCQlSRUdfV1IxNihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJCSBVU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKGZ1bmMsIGluZGV4KSwgMSk7CisJCVJFR19XUjE2KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJIENTVE9STV9ERUZfU0JfSENfRElTQUJMRV9VX09GRlNFVChmdW5jLCBpbmRleCksIDEpOwogCiAJLyogQ1NUT1JNICovCiAJc2VjdGlvbiA9ICgodTY0KW1hcHBpbmcpICsgb2Zmc2V0b2Yoc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jaywKQEAgLTQzNjgsMTYgKzQ3OTcsMTYgQEAKIAlkZWZfc2ItPmNfZGVmX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaWQgPSBzYl9pZDsKIAogCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKGZ1bmMpLCBVNjRfTE8oc2VjdGlvbikpOworCSAgICAgICBDU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9DX09GRlNFVChmdW5jKSwgVTY0X0xPKHNlY3Rpb24pKTsKIAlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JICAgICAgICgoQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKGZ1bmMpKSArIDQpLAorCSAgICAgICAoKENTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX0NfT0ZGU0VUKGZ1bmMpKSArIDQpLAogCSAgICAgICBVNjRfSEkoc2VjdGlvbikpOwogCVJFR19XUjgoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIERFRl9DU0JfRlVOQ19PRkYgKwotCQlDU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgZnVuYyk7CisJCUNTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfQ19PRkZTRVQoZnVuYyksIGZ1bmMpOwogCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgSENfQ1NUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUzsgaW5kZXgrKykKIAkJUkVHX1dSMTYoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JCQkgQ1NUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChmdW5jLCBpbmRleCksIDEpOworCQkJIENTVE9STV9ERUZfU0JfSENfRElTQUJMRV9DX09GRlNFVChmdW5jLCBpbmRleCksIDEpOwogCiAJLyogVFNUT1JNICovCiAJc2VjdGlvbiA9ICgodTY0KW1hcHBpbmcpICsgb2Zmc2V0b2Yoc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jaywKQEAgLTQ0MjgsMjMgKzQ4NTcsMjMgQEAKIAkJaW50IHNiX2lkID0gYnAtPmZwW2ldLnNiX2lkOwogCiAJCS8qIEhDX0lOREVYX1VfRVRIX1JYX0NRX0NPTlMgKi8KLQkJUkVHX1dSOChicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJCVVTVE9STV9TQl9IQ19USU1FT1VUX09GRlNFVChwb3J0LCBzYl9pZCwKLQkJCQkJCSAgICBVX1NCX0VUSF9SWF9DUV9JTkRFWCksCisJCVJFR19XUjgoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJCQlDU1RPUk1fU0JfSENfVElNRU9VVF9VX09GRlNFVChwb3J0LCBzYl9pZCwKKwkJCQkJCSAgICAgIFVfU0JfRVRIX1JYX0NRX0lOREVYKSwKIAkJCWJwLT5yeF90aWNrcy8xMik7Ci0JCVJFR19XUjE2KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJIFVTVE9STV9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBzYl9pZCwKLQkJCQkJCSAgICAgVV9TQl9FVEhfUlhfQ1FfSU5ERVgpLAorCQlSRUdfV1IxNihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkJCSBDU1RPUk1fU0JfSENfRElTQUJMRV9VX09GRlNFVChwb3J0LCBzYl9pZCwKKwkJCQkJCSAgICAgICBVX1NCX0VUSF9SWF9DUV9JTkRFWCksCiAJCQkgKGJwLT5yeF90aWNrcy8xMikgPyAwIDogMSk7CiAKIAkJLyogSENfSU5ERVhfQ19FVEhfVFhfQ1FfQ09OUyAqLwogCQlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwotCQkJQ1NUT1JNX1NCX0hDX1RJTUVPVVRfT0ZGU0VUKHBvcnQsIHNiX2lkLAotCQkJCQkJICAgIENfU0JfRVRIX1RYX0NRX0lOREVYKSwKKwkJCUNTVE9STV9TQl9IQ19USU1FT1VUX0NfT0ZGU0VUKHBvcnQsIHNiX2lkLAorCQkJCQkJICAgICAgQ19TQl9FVEhfVFhfQ1FfSU5ERVgpLAogCQkJYnAtPnR4X3RpY2tzLzEyKTsKIAkJUkVHX1dSMTYoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JCQkgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIHNiX2lkLAotCQkJCQkJICAgICBDX1NCX0VUSF9UWF9DUV9JTkRFWCksCisJCQkgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfQ19PRkZTRVQocG9ydCwgc2JfaWQsCisJCQkJCQkgICAgICAgQ19TQl9FVEhfVFhfQ1FfSU5ERVgpLAogCQkJIChicC0+dHhfdGlja3MvMTIpID8gMCA6IDEpOwogCX0KIH0KQEAgLTQ1MTcsNiArNDk0Niw5IEBACiAJCWZwLT5yeF9jb25zX3NiID0gQk5YMlhfUlhfU0JfSU5ERVg7CiAJCWZwLT5yeF9iZF9jb25zX3NiID0gQk5YMlhfUlhfU0JfQkRfSU5ERVg7CiAKKwkJLyogTWFyayBxdWV1ZSBhcyBSeCAqLworCQlmcC0+aXNfcnhfcXVldWUgPSAxOworCiAJCS8qICJuZXh0IHBhZ2UiIGVsZW1lbnRzIGluaXRpYWxpemF0aW9uICovCiAJCS8qIFNHRSByaW5nICovCiAJCWZvciAoaSA9IDE7IGkgPD0gTlVNX1JYX1NHRV9QQUdFUzsgaSsrKSB7CkBAIC00NjI2LDE3ICs1MDU4LDIxIEBACiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwogCiAJCWZvciAoaSA9IDE7IGkgPD0gTlVNX1RYX1JJTkdTOyBpKyspIHsKLQkJCXN0cnVjdCBldGhfdHhfYmQgKnR4X2JkID0KLQkJCQkmZnAtPnR4X2Rlc2NfcmluZ1tUWF9ERVNDX0NOVCAqIGkgLSAxXTsKKwkJCXN0cnVjdCBldGhfdHhfbmV4dF9iZCAqdHhfbmV4dF9iZCA9CisJCQkJJmZwLT50eF9kZXNjX3JpbmdbVFhfREVTQ19DTlQgKiBpIC0gMV0ubmV4dF9iZDsKIAotCQkJdHhfYmQtPmFkZHJfaGkgPQorCQkJdHhfbmV4dF9iZC0+YWRkcl9oaSA9CiAJCQkJY3B1X3RvX2xlMzIoVTY0X0hJKGZwLT50eF9kZXNjX21hcHBpbmcgKwogCQkJCQkgICAgQkNNX1BBR0VfU0laRSooaSAlIE5VTV9UWF9SSU5HUykpKTsKLQkJCXR4X2JkLT5hZGRyX2xvID0KKwkJCXR4X25leHRfYmQtPmFkZHJfbG8gPQogCQkJCWNwdV90b19sZTMyKFU2NF9MTyhmcC0+dHhfZGVzY19tYXBwaW5nICsKIAkJCQkJICAgIEJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fVFhfUklOR1MpKSk7CiAJCX0KIAorCQlmcC0+dHhfZGIuZGF0YS5oZWFkZXIuaGVhZGVyID0gRE9PUkJFTExfSERSX0RCX1RZUEU7CisJCWZwLT50eF9kYi5kYXRhLnplcm9fZmlsbDEgPSAwOworCQlmcC0+dHhfZGIuZGF0YS5wcm9kID0gMDsKKwogCQlmcC0+dHhfcGt0X3Byb2QgPSAwOwogCQlmcC0+dHhfcGt0X2NvbnMgPSAwOwogCQlmcC0+dHhfYmRfcHJvZCA9IDA7CkBAIC00NjQ0LDYgKzUwODAsMTAgQEAKIAkJZnAtPnR4X2NvbnNfc2IgPSBCTlgyWF9UWF9TQl9JTkRFWDsKIAkJZnAtPnR4X3BrdCA9IDA7CiAJfQorCisJLyogY2xlYW4gdHggc3RhdGlzdGljcyAqLworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKQorCQlibngyeF9mcChicCwgaSwgdHhfcGt0KSA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfc3BfcmluZyhzdHJ1Y3QgYm54MnggKmJwKQpAQCAtNDY3MiwxNiArNTExMiwxNSBAQAogewogCWludCBpOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgZXRoX2NvbnRleHQgKmNvbnRleHQgPSBibngyeF9zcChicCwgY29udGV4dFtpXS5ldGgpOwogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAkJdTggY2xfaWQgPSBmcC0+Y2xfaWQ7Ci0JCXU4IHNiX2lkID0gZnAtPnNiX2lkOwogCiAJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zYl9pbmRleF9udW1iZXJzID0KIAkJCQkJCUJOWDJYX1JYX1NCX0lOREVYX05VTTsKIAkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmNsaWVudElkID0gY2xfaWQ7Ci0JCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zdGF0dXNfYmxvY2tfaWQgPSBzYl9pZDsKKwkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnN0YXR1c19ibG9ja19pZCA9IGZwLT5zYl9pZDsKIAkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmZsYWdzID0KIAkJCShVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9NQ19BTElHTk1FTlQgfAogCQkJIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1MpOwpAQCAtNDY5Nyw4ICs1MTM2LDcgQEAKIAkJCQkJCVU2NF9MTyhmcC0+cnhfZGVzY19tYXBwaW5nKTsKIAkJaWYgKCFmcC0+ZGlzYWJsZV90cGEpIHsKIAkJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5mbGFncyB8PQotCQkJCShVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9UUEEgfAotCQkJCSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TR0VfUklORyk7CisJCQkJVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfVFBBOwogCQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnNnZV9idWZmX3NpemUgPQogCQkJCSh1MTYpbWluKCh1MzIpU0dFX1BBR0VfU0laRSpQQUdFU19QRVJfU0dFLAogCQkJCQkgKHUzMikweGZmZmYpOwpAQCAtNDcwNiw2ICs1MTQ0LDEzIEBACiAJCQkJCQlVNjRfSEkoZnAtPnJ4X3NnZV9tYXBwaW5nKTsKIAkJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zZ2VfcGFnZV9iYXNlX2xvID0KIAkJCQkJCVU2NF9MTyhmcC0+cnhfc2dlX21hcHBpbmcpOworCisJCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24ubWF4X3NnZXNfZm9yX3BhY2tldCA9CisJCQkJU0dFX1BBR0VfQUxJR04oYnAtPmRldi0+bXR1KSA+PiBTR0VfUEFHRV9TSElGVDsKKwkJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5tYXhfc2dlc19mb3JfcGFja2V0ID0KKwkJCQkoKGNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi4KKwkJCQkgIG1heF9zZ2VzX2Zvcl9wYWNrZXQgKyBQQUdFU19QRVJfU0dFIC0gMSkgJgorCQkJCSAofihQQUdFU19QRVJfU0dFIC0gMSkpKSA+PiBQQUdFU19QRVJfU0dFX1NISUZUOwogCQl9CiAKIAkJY29udGV4dC0+dXN0b3JtX2FnX2NvbnRleHQuY2R1X3VzYWdlID0KQEAgLTQ3MTMsMjUgKzUxNTgsMjggQEAKIAkJCQkJICAgICAgIENEVV9SRUdJT05fTlVNQkVSX1VDTV9BRywKIAkJCQkJICAgICAgIEVUSF9DT05ORUNUSU9OX1RZUEUpOwogCi0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9oaSA9Ci0JCQkJCQlVNjRfSEkoZnAtPnR4X2Rlc2NfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9sbyA9Ci0JCQkJCQlVNjRfTE8oZnAtPnR4X2Rlc2NfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LmRiX2RhdGFfYWRkcl9oaSA9Ci0JCQkJCQlVNjRfSEkoZnAtPnR4X3Byb2RzX21hcHBpbmcpOwotCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5kYl9kYXRhX2FkZHJfbG8gPQotCQkJCQkJVTY0X0xPKGZwLT50eF9wcm9kc19tYXBwaW5nKTsKLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuc3RhdGlzdGljc19kYXRhID0gKGNsX2lkIHwKLQkJCQlYU1RPUk1fRVRIX1NUX0NPTlRFWFRfU1RBVElTVElDU19FTkFCTEUpOwotCQljb250ZXh0LT5jc3Rvcm1fc3RfY29udGV4dC5zYl9pbmRleF9udW1iZXIgPQotCQkJCQkJQ19TQl9FVEhfVFhfQ1FfSU5ERVg7Ci0JCWNvbnRleHQtPmNzdG9ybV9zdF9jb250ZXh0LnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOwotCiAJCWNvbnRleHQtPnhzdG9ybV9hZ19jb250ZXh0LmNkdV9yZXNlcnZlZCA9CiAJCQlDRFVfUlNSVkRfVkFMVUVfVFlQRV9BKEhXX0NJRChicCwgaSksCiAJCQkJCSAgICAgICBDRFVfUkVHSU9OX05VTUJFUl9YQ01fQUcsCiAJCQkJCSAgICAgICBFVEhfQ09OTkVDVElPTl9UWVBFKTsKIAl9CisKKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKwkJc3RydWN0IGV0aF9jb250ZXh0ICpjb250ZXh0ID0KKwkJCWJueDJ4X3NwKGJwLCBjb250ZXh0W2kgLSBicC0+bnVtX3J4X3F1ZXVlc10uZXRoKTsKKworCQljb250ZXh0LT5jc3Rvcm1fc3RfY29udGV4dC5zYl9pbmRleF9udW1iZXIgPQorCQkJCQkJQ19TQl9FVEhfVFhfQ1FfSU5ERVg7CisJCWNvbnRleHQtPmNzdG9ybV9zdF9jb250ZXh0LnN0YXR1c19ibG9ja19pZCA9IGZwLT5zYl9pZDsKKworCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC50eF9iZF9wYWdlX2Jhc2VfaGkgPQorCQkJCQkJVTY0X0hJKGZwLT50eF9kZXNjX21hcHBpbmcpOworCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC50eF9iZF9wYWdlX2Jhc2VfbG8gPQorCQkJCQkJVTY0X0xPKGZwLT50eF9kZXNjX21hcHBpbmcpOworCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5zdGF0aXN0aWNzX2RhdGEgPSAoZnAtPmNsX2lkIHwKKwkJCQlYU1RPUk1fRVRIX1NUX0NPTlRFWFRfU1RBVElTVElDU19FTkFCTEUpOworCX0KIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbmRfdGFibGUoc3RydWN0IGJueDJ4ICpicCkKQEAgLTQ3NjgsMTggKzUyMTYsNiBAQAogCX0KICNlbmRpZgogCi0JaWYgKGJwLT5mbGFncyAmIFRQQV9FTkFCTEVfRkxBRykgewotCQl0c3Rvcm1fY2xpZW50Lm1heF9zZ2VzX2Zvcl9wYWNrZXQgPQotCQkJU0dFX1BBR0VfQUxJR04odHN0b3JtX2NsaWVudC5tdHUpID4+IFNHRV9QQUdFX1NISUZUOwotCQl0c3Rvcm1fY2xpZW50Lm1heF9zZ2VzX2Zvcl9wYWNrZXQgPQotCQkJKCh0c3Rvcm1fY2xpZW50Lm1heF9zZ2VzX2Zvcl9wYWNrZXQgKwotCQkJICBQQUdFU19QRVJfU0dFIC0gMSkgJiAofihQQUdFU19QRVJfU0dFIC0gMSkpKSA+PgotCQkJUEFHRVNfUEVSX1NHRV9TSElGVDsKLQotCQl0c3Rvcm1fY2xpZW50LmNvbmZpZ19mbGFncyB8PQotCQkJCVRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkc7Ci0JfQotCiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKIAkJdHN0b3JtX2NsaWVudC5zdGF0aXN0aWNzX2NvdW50ZXJfaWQgPSBicC0+ZnBbaV0uY2xfaWQ7CiAKQEAgLTQ4MDEsNyArNTIzNywxNCBAQAogCWludCBtb2RlID0gYnAtPnJ4X21vZGU7CiAJaW50IG1hc2sgPSAoMSA8PCBCUF9MX0lEKGJwKSk7CiAJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCWludCBpOworCS8qIEFsbCBidXQgbWFuYWdlbWVudCB1bmljYXN0IHBhY2tldHMgc2hvdWxkIHBhc3MgdG8gdGhlIGhvc3QgYXMgd2VsbCAqLworCXUzMiBsbGhfbWFzayA9CisJCU5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19CUkNTVCB8CisJCU5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19NTENTVCB8CisJCU5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19WTEFOIHwKKwkJTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX05PX1ZMQU47CiAKIAlEUChORVRJRl9NU0dfSUZVUCwgInJ4IG1vZGUgJWQgIG1hc2sgMHgleFxuIiwgbW9kZSwgbWFzayk7CiAKQEAgLTQ4MjUsNiArNTI2OCw4IEBACiAJCXRzdG9ybV9tYWNfZmlsdGVyLnVjYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwogCQl0c3Rvcm1fbWFjX2ZpbHRlci5tY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKIAkJdHN0b3JtX21hY19maWx0ZXIuYmNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CisJCS8qIHBhc3MgbWFuYWdlbWVudCB1bmljYXN0IHBhY2tldHMgYXMgd2VsbCAqLworCQlsbGhfbWFzayB8PSBOSUdfTExIMF9CUkIxX0RSVl9NQVNLX1JFR19MTEgwX0JSQjFfRFJWX01BU0tfVU5DU1Q7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTQ4MzIsNiArNTI3NywxMCBAQAogCQlicmVhazsKIAl9CiAKKwlSRUdfV1IoYnAsCisJICAgICAgIChwb3J0ID8gTklHX1JFR19MTEgxX0JSQjFfRFJWX01BU0sgOiBOSUdfUkVHX0xMSDBfQlJCMV9EUlZfTUFTSyksCisJICAgICAgIGxsaF9tYXNrKTsKKwogCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHRzdG9ybV9ldGhfbWFjX2ZpbHRlcl9jb25maWcpLzQ7IGkrKykgewogCQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCiAJCSAgICAgICBUU1RPUk1fTUFDX0ZJTFRFUl9DT05GSUdfT0ZGU0VUKGZ1bmMpICsgaSAqIDQsCkBAIC00ODQ5LDE3ICs1Mjk4LDYgQEAKIHsKIAlpbnQgaTsKIAotCWlmIChicC0+ZmxhZ3MgJiBUUEFfRU5BQkxFX0ZMQUcpIHsKLQkJc3RydWN0IHRzdG9ybV9ldGhfdHBhX2V4aXN0IHRwYSA9IHswfTsKLQotCQl0cGEudHBhX2V4aXN0ID0gMTsKLQotCQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArIFRTVE9STV9UUEFfRVhJU1RfT0ZGU0VULAotCQkgICAgICAgKCh1MzIgKikmdHBhKVswXSk7Ci0JCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsgVFNUT1JNX1RQQV9FWElTVF9PRkZTRVQgKyA0LAotCQkgICAgICAgKCh1MzIgKikmdHBhKVsxXSk7Ci0JfQotCiAJLyogWmVybyB0aGlzIG1hbnVhbGx5IGFzIGl0cyBpbml0aWFsaXphdGlvbiBpcwogCSAgIGN1cnJlbnRseSBtaXNzaW5nIGluIHRoZSBpbml0VG9vbCAqLwogCWZvciAoaSA9IDA7IGkgPCAoVVNUT1JNX0FHR19EQVRBX1NJWkUgPj4gMik7IGkrKykKQEAgLTQ4NzEsNTMgKzUzMDksMTQgQEAKIHsKIAlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCi0JUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKyBVU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSwgQk5YMlhfQlRSKTsKLQlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIENTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpLCBCTlgyWF9CVFIpOworCVJFR19XUihicCwKKwkgICAgICAgQkFSX0NTVFJPUk1fSU5UTUVNICsgQ1NUT1JNX0hDX0JUUl9VX09GRlNFVChwb3J0KSwgQk5YMlhfQlRSKTsKKwlSRUdfV1IoYnAsCisJICAgICAgIEJBUl9DU1RST1JNX0lOVE1FTSArIENTVE9STV9IQ19CVFJfQ19PRkZTRVQocG9ydCksIEJOWDJYX0JUUik7CiAJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKyBUU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSwgQk5YMlhfQlRSKTsKIAlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArIFhTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpLCBCTlgyWF9CVFIpOwogfQogCi0vKiBDYWxjdWxhdGVzIHRoZSBzdW0gb2Ygdm5fbWluX3JhdGVzLgotICAgSXQncyBuZWVkZWQgZm9yIGZ1cnRoZXIgbm9ybWFsaXppbmcgb2YgdGhlIG1pbl9yYXRlcy4KLSAgIFJldHVybnM6Ci0gICAgIHN1bSBvZiB2bl9taW5fcmF0ZXMuCi0gICAgICAgb3IKLSAgICAgMCAtIGlmIGFsbCB0aGUgbWluX3JhdGVzIGFyZSAwLgotICAgICBJbiB0aGUgbGF0ZXIgY2FzZSBmYWluZXNzIGFsZ29yaXRobSBzaG91bGQgYmUgZGVhY3RpdmF0ZWQuCi0gICAgIElmIG5vdCBhbGwgbWluX3JhdGVzIGFyZSB6ZXJvIHRoZW4gdGhvc2UgdGhhdCBhcmUgemVyb2VzIHdpbGwgYmUgc2V0IHRvIDEuCi0gKi8KLXN0YXRpYyB2b2lkIGJueDJ4X2NhbGNfdm5fd2VpZ2h0X3N1bShzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBhbGxfemVybyA9IDE7Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQlpbnQgdm47Ci0KLQlicC0+dm5fd2VpZ2h0X3N1bSA9IDA7Ci0JZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKSB7Ci0JCWludCBmdW5jID0gMip2biArIHBvcnQ7Ci0JCXUzMiB2bl9jZmcgPQotCQkJU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS5jb25maWcpOwotCQl1MzIgdm5fbWluX3JhdGUgPSAoKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX01JTl9CV19NQVNLKSA+PgotCQkJCSAgIEZVTkNfTUZfQ0ZHX01JTl9CV19TSElGVCkgKiAxMDA7Ci0KLQkJLyogU2tpcCBoaWRkZW4gdm5zICovCi0JCWlmICh2bl9jZmcgJiBGVU5DX01GX0NGR19GVU5DX0hJREUpCi0JCQljb250aW51ZTsKLQotCQkvKiBJZiBtaW4gcmF0ZSBpcyB6ZXJvIC0gc2V0IGl0IHRvIDEgKi8KLQkJaWYgKCF2bl9taW5fcmF0ZSkKLQkJCXZuX21pbl9yYXRlID0gREVGX01JTl9SQVRFOwotCQllbHNlCi0JCQlhbGxfemVybyA9IDA7Ci0KLQkJYnAtPnZuX3dlaWdodF9zdW0gKz0gdm5fbWluX3JhdGU7Ci0JfQotCi0JLyogLi4uIG9ubHkgaWYgYWxsIG1pbiByYXRlcyBhcmUgemVyb3MgLSBkaXNhYmxlIGZhaXJuZXNzICovCi0JaWYgKGFsbF96ZXJvKQotCQlicC0+dm5fd2VpZ2h0X3N1bSA9IDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW50ZXJuYWxfZnVuYyhzdHJ1Y3QgYm54MnggKmJwKQogewogCXN0cnVjdCB0c3Rvcm1fZXRoX2Z1bmN0aW9uX2NvbW1vbl9jb25maWcgdHN0b3JtX2NvbmZpZyA9IHswfTsKQEAgLTQ5MzIsNiArNTMzMSwxMiBAQAogCQl0c3Rvcm1fY29uZmlnLmNvbmZpZ19mbGFncyA9IE1VTFRJX0ZMQUdTKGJwKTsKIAkJdHN0b3JtX2NvbmZpZy5yc3NfcmVzdWx0X21hc2sgPSBNVUxUSV9NQVNLOwogCX0KKworCS8qIEVuYWJsZSBUUEEgaWYgbmVlZGVkICovCisJaWYgKGJwLT5mbGFncyAmIFRQQV9FTkFCTEVfRkxBRykKKwkJdHN0b3JtX2NvbmZpZy5jb25maWdfZmxhZ3MgfD0KKwkJCVRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FTkFCTEVfVFBBOworCiAJaWYgKElTX0UxSE1GKGJwKSkKIAkJdHN0b3JtX2NvbmZpZy5jb25maWdfZmxhZ3MgfD0KIAkJCQlUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRTFIT1ZfSU5fQ0FNOwpAQCAtNTA0Myw2ICs1NDQ4LDE0IEBACiAJCSAgICAgICBVU1RPUk1fQ1FFX1BBR0VfQkFTRV9PRkZTRVQocG9ydCwgZnAtPmNsX2lkKSArIDQsCiAJCSAgICAgICBVNjRfSEkoZnAtPnJ4X2NvbXBfbWFwcGluZykpOwogCisJCS8qIE5leHQgcGFnZSAqLworCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCSAgICAgICBVU1RPUk1fQ1FFX1BBR0VfTkVYVF9PRkZTRVQocG9ydCwgZnAtPmNsX2lkKSwKKwkJICAgICAgIFU2NF9MTyhmcC0+cnhfY29tcF9tYXBwaW5nICsgQkNNX1BBR0VfU0laRSkpOworCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJCSAgICAgICBVU1RPUk1fQ1FFX1BBR0VfTkVYVF9PRkZTRVQocG9ydCwgZnAtPmNsX2lkKSArIDQsCisJCSAgICAgICBVNjRfSEkoZnAtPnJ4X2NvbXBfbWFwcGluZyArIEJDTV9QQUdFX1NJWkUpKTsKKwogCQlSRUdfV1IxNihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKIAkJCSBVU1RPUk1fTUFYX0FHR19TSVpFX09GRlNFVChwb3J0LCBmcC0+Y2xfaWQpLAogCQkJIG1heF9hZ2dfc2l6ZSk7CkBAIC01MTUzLDYgKzU1NjYsOSBAQAogCQlmcC0+aW5kZXggPSBpOwogCQlmcC0+Y2xfaWQgPSBCUF9MX0lEKGJwKSArIGk7CiAJCWZwLT5zYl9pZCA9IGZwLT5jbF9pZDsKKwkJLyogU3VpdGFibGUgUnggYW5kIFR4IFNCcyBhcmUgc2VydmVkIGJ5IHRoZSBzYW1lIGNsaWVudCAqLworCQlpZiAoaSA+PSBicC0+bnVtX3J4X3F1ZXVlcykKKwkJCWZwLT5jbF9pZCAtPSBicC0+bnVtX3J4X3F1ZXVlczsKIAkJRFAoTkVUSUZfTVNHX0lGVVAsCiAJCSAgICJxdWV1ZVslZF06ICBibngyeF9pbml0X3NiKCVwLCVwKSAgY2xfaWQgJWQgIHNiICVkXG4iLAogCQkgICBpLCBicCwgZnAtPnN0YXR1c19ibGssIGZwLT5jbF9pZCwgZnAtPnNiX2lkKTsKQEAgLTUxODUsNiArNTYwMSwxMSBAQAogCW1taW93YigpOwogCiAJYm54MnhfaW50X2VuYWJsZShicCk7CisKKwkvKiBDaGVjayBmb3IgU1BJTzUgKi8KKwlibngyeF9hdHRuX2ludF9kZWFzc2VydGVkMChicCwKKwkJUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfQUZURVJfSU5WRVJUXzFfRlVOQ18wICsgQlBfUE9SVChicCkqNCkgJgorCQkJCSAgIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1NQSU81KTsKIH0KIAogLyogZW5kIG9mIG5pYyBpbml0ICovCkBAIC01NTEwLDYgKzU5MzEsNzggQEAKIAlSRUdfV1IoYnAsIEdSQ0JBU0VfTUlTQyArIE1JU0NfUkVHSVNURVJTX1JFU0VUX1JFR18yX0NMRUFSLCAweDE0MDMpOwogfQogCitzdGF0aWMgdm9pZCBibngyeF9pbml0X3B4cChzdHJ1Y3QgYm54MnggKmJwKQoreworCXUxNiBkZXZjdGw7CisJaW50IHJfb3JkZXIsIHdfb3JkZXI7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChicC0+cGRldiwKKwkJCSAgICAgYnAtPnBjaWVfY2FwICsgUENJX0VYUF9ERVZDVEwsICZkZXZjdGwpOworCURQKE5FVElGX01TR19IVywgInJlYWQgMHgleCBmcm9tIGRldmN0bFxuIiwgZGV2Y3RsKTsKKwl3X29yZGVyID0gKChkZXZjdGwgJiBQQ0lfRVhQX0RFVkNUTF9QQVlMT0FEKSA+PiA1KTsKKwlpZiAoYnAtPm1ycnMgPT0gLTEpCisJCXJfb3JkZXIgPSAoKGRldmN0bCAmIFBDSV9FWFBfREVWQ1RMX1JFQURSUSkgPj4gMTIpOworCWVsc2UgeworCQlEUChORVRJRl9NU0dfSFcsICJmb3JjZSByZWFkIG9yZGVyIHRvICVkXG4iLCBicC0+bXJycyk7CisJCXJfb3JkZXIgPSBicC0+bXJyczsKKwl9CisKKwlibngyeF9pbml0X3B4cF9hcmIoYnAsIHJfb3JkZXIsIHdfb3JkZXIpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zZXR1cF9mYW5fZmFpbHVyZV9kZXRlY3Rpb24oc3RydWN0IGJueDJ4ICpicCkKK3sKKwl1MzIgdmFsOworCXU4IHBvcnQ7CisJdTggaXNfcmVxdWlyZWQgPSAwOworCisJdmFsID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcuY29uZmlnMikgJgorCSAgICAgIFNIQVJFRF9IV19DRkdfRkFOX0ZBSUxVUkVfTUFTSzsKKworCWlmICh2YWwgPT0gU0hBUkVEX0hXX0NGR19GQU5fRkFJTFVSRV9FTkFCTEVEKQorCQlpc19yZXF1aXJlZCA9IDE7CisKKwkvKgorCSAqIFRoZSBmYW4gZmFpbHVyZSBtZWNoYW5pc20gaXMgdXN1YWxseSByZWxhdGVkIHRvIHRoZSBQSFkgdHlwZSBzaW5jZQorCSAqIHRoZSBwb3dlciBjb25zdW1wdGlvbiBvZiB0aGUgYm9hcmQgaXMgYWZmZWN0ZWQgYnkgdGhlIFBIWS4gQ3VycmVudGx5LAorCSAqIGZhbiBpcyByZXF1aXJlZCBmb3IgbW9zdCBkZXNpZ25zIHdpdGggU0ZYNzEwMSwgQkNNODcyNyBhbmQgQkNNODQ4MS4KKwkgKi8KKwllbHNlIGlmICh2YWwgPT0gU0hBUkVEX0hXX0NGR19GQU5fRkFJTFVSRV9QSFlfVFlQRSkKKwkJZm9yIChwb3J0ID0gUE9SVF8wOyBwb3J0IDwgUE9SVF9NQVg7IHBvcnQrKykgeworCQkJdTMyIHBoeV90eXBlID0KKwkJCQlTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uCisJCQkJCSBleHRlcm5hbF9waHlfY29uZmlnKSAmCisJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTUFTSzsKKwkJCWlzX3JlcXVpcmVkIHw9CisJCQkJKChwaHlfdHlwZSA9PQorCQkJCSAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSkgfHwKKwkJCQkgKHBoeV90eXBlID09CisJCQkJICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3KSB8fAorCQkJCSAocGh5X3R5cGUgPT0KKwkJCQkgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEpKTsKKwkJfQorCisJRFAoTkVUSUZfTVNHX0hXLCAiZmFuIGRldGVjdGlvbiBzZXR0aW5nOiAlZFxuIiwgaXNfcmVxdWlyZWQpOworCisJaWYgKGlzX3JlcXVpcmVkID09IDApCisJCXJldHVybjsKKworCS8qIEZhbiBmYWlsdXJlIGlzIGluZGljYXRlZCBieSBTUElPIDUgKi8KKwlibngyeF9zZXRfc3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfU1BJT181LAorCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfU1BJT19JTlBVVF9ISV9aKTsKKworCS8qIHNldCB0byBhY3RpdmUgbG93IG1vZGUgKi8KKwl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1NQSU9fSU5UKTsKKwl2YWwgfD0gKCgxIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fNSkgPDwKKwkJCQlNSVNDX1JFR0lTVEVSU19TUElPX0lOVF9PTERfU0VUX1BPUyk7CisJUkVHX1dSKGJwLCBNSVNDX1JFR19TUElPX0lOVCwgdmFsKTsKKworCS8qIGVuYWJsZSBpbnRlcnJ1cHQgdG8gc2lnbmFsIHRoZSBJR1UgKi8KKwl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1NQSU9fRVZFTlRfRU4pOworCXZhbCB8PSAoMSA8PCBNSVNDX1JFR0lTVEVSU19TUElPXzUpOworCVJFR19XUihicCwgTUlTQ19SRUdfU1BJT19FVkVOVF9FTiwgdmFsKTsKK30KKwogc3RhdGljIGludCBibngyeF9pbml0X2NvbW1vbihzdHJ1Y3QgYm54MnggKmJwKQogewogCXUzMiB2YWwsIGk7CkBAIC01NjI2LDEwICs2MTE5LDEwIEBACiAJYm54MnhfaW5pdF9ibG9jayhicCwgVVNETV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBYU0RNX0JMT0NLLCBDT01NT05fU1RBR0UpOwogCi0JYm54MnhfaW5pdF9maWxsKGJwLCBUU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7Ci0JYm54MnhfaW5pdF9maWxsKGJwLCBVU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7Ci0JYm54MnhfaW5pdF9maWxsKGJwLCBDU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7Ci0JYm54MnhfaW5pdF9maWxsKGJwLCBYU1RPUk1fSU5UTUVNX0FERFIsIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBUU0VNX1JFR19GQVNUX01FTU9SWSwgMCwgU1RPUk1fSU5UTUVNX1NJWkUoYnApKTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOworCWJueDJ4X2luaXRfZmlsbChicCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlksIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBYU0VNX1JFR19GQVNUX01FTU9SWSwgMCwgU1RPUk1fSU5UTUVNX1NJWkUoYnApKTsKIAogCWJueDJ4X2luaXRfYmxvY2soYnAsIFRTRU1fQkxPQ0ssIENPTU1PTl9TVEFHRSk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgVVNFTV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKQEAgLTU2NjIsMTEgKzYxNTUsNiBAQAogCWJueDJ4X2luaXRfYmxvY2soYnAsIENEVV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKIAl2YWwgPSAoNCA8PCAyNCkgKyAoMCA8PCAxMikgKyAxMDI0OwogCVJFR19XUihicCwgQ0RVX1JFR19DRFVfR0xPQkFMX1BBUkFNUywgdmFsKTsKLQlpZiAoQ0hJUF9JU19FMShicCkpIHsKLQkJLyogISEhIGZpeCBweHAgY2xpZW50IGNyZGl0IHVudGlsIGV4Y2VsIHVwZGF0ZSAqLwotCQlSRUdfV1IoYnAsIENEVV9SRUdfQ0RVX0RFQlVHLCAweDI2NCk7Ci0JCVJFR19XUihicCwgQ0RVX1JFR19DRFVfREVCVUcsIDApOwotCX0KIAogCWJueDJ4X2luaXRfYmxvY2soYnAsIENGQ19CTE9DSywgQ09NTU9OX1NUQUdFKTsKIAlSRUdfV1IoYnAsIENGQ19SRUdfSU5JVF9SRUcsIDB4N0ZGKTsKQEAgLTU2NzksMTkgKzYxNjcsMTQgQEAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBIQ19CTE9DSywgQ09NTU9OX1NUQUdFKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBNSVNDX0FFVV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKIAotCS8qIFBYUENTIENPTU1PTiBjb21lcyBoZXJlICovCiAJYm54MnhfaW5pdF9ibG9jayhicCwgUFhQQ1NfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CiAJLyogUmVzZXQgUENJRSBlcnJvcnMgZm9yIGRlYnVnICovCiAJUkVHX1dSKGJwLCAweDI4MTQsIDB4ZmZmZmZmZmYpOwogCVJFR19XUihicCwgMHgzODIwLCAweGZmZmZmZmZmKTsKIAotCS8qIEVNQUMwIENPTU1PTiBjb21lcyBoZXJlICovCiAJYm54MnhfaW5pdF9ibG9jayhicCwgRU1BQzBfQkxPQ0ssIENPTU1PTl9TVEFHRSk7Ci0JLyogRU1BQzEgQ09NTU9OIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBFTUFDMV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQkvKiBEQlUgQ09NTU9OIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBEQlVfQkxPQ0ssIENPTU1PTl9TVEFHRSk7Ci0JLyogREJHIENPTU1PTiBjb21lcyBoZXJlICovCiAJYm54MnhfaW5pdF9ibG9jayhicCwgREJHX0JMT0NLLCBDT01NT05fU1RBR0UpOwogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgTklHX0JMT0NLLCBDT01NT05fU1RBR0UpOwpAQCAtNTczNiwzMCArNjIxOSwxNiBAQAogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKIAkJYnAtPnBvcnQubmVlZF9od19sb2NrID0gMTsKIAkJYnJlYWs7CiAKLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6Ci0JCS8qIEZhbiBmYWlsdXJlIGlzIGluZGljYXRlZCBieSBTUElPIDUgKi8KLQkJYm54Mnhfc2V0X3NwaW8oYnAsIE1JU0NfUkVHSVNURVJTX1NQSU9fNSwKLQkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19TUElPX0lOUFVUX0hJX1opOwotCi0JCS8qIHNldCB0byBhY3RpdmUgbG93IG1vZGUgKi8KLQkJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19TUElPX0lOVCk7Ci0JCXZhbCB8PSAoKDEgPDwgTUlTQ19SRUdJU1RFUlNfU1BJT181KSA8PAotCQkJCQlNSVNDX1JFR0lTVEVSU19TUElPX0lOVF9PTERfU0VUX1BPUyk7Ci0JCVJFR19XUihicCwgTUlTQ19SRUdfU1BJT19JTlQsIHZhbCk7Ci0KLQkJLyogZW5hYmxlIGludGVycnVwdCB0byBzaWduYWwgdGhlIElHVSAqLwotCQl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1NQSU9fRVZFTlRfRU4pOwotCQl2YWwgfD0gKDEgPDwgTUlTQ19SRUdJU1RFUlNfU1BJT181KTsKLQkJUkVHX1dSKGJwLCBNSVNDX1JFR19TUElPX0VWRU5UX0VOLCB2YWwpOwotCQlicmVhazsKLQogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KIAorCWJueDJ4X3NldHVwX2Zhbl9mYWlsdXJlX2RldGVjdGlvbihicCk7CisKIAkvKiBjbGVhciBQWFAyIGF0dGVudGlvbnMgKi8KIAlSRUdfUkQoYnAsIFBYUDJfUkVHX1BYUDJfSU5UX1NUU19DTFJfMCk7CiAKQEAgLTU3ODYsMTAgKzYyNTUsMTIgQEAKIAogCVJFR19XUihicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwgMCk7CiAKLQkvKiBQb3J0IFBYUCBjb21lcyBoZXJlICovCiAJYm54MnhfaW5pdF9ibG9jayhicCwgUFhQX0JMT0NLLCBpbml0X3N0YWdlKTsKLQkvKiBQb3J0IFBYUDIgY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIFBYUDJfQkxPQ0ssIGluaXRfc3RhZ2UpOworCisJYm54MnhfaW5pdF9ibG9jayhicCwgVENNX0JMT0NLLCBpbml0X3N0YWdlKTsKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBVQ01fQkxPQ0ssIGluaXRfc3RhZ2UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIENDTV9CTE9DSywgaW5pdF9zdGFnZSk7CiAjaWZkZWYgQkNNX0lTQ1NJCiAJLyogUG9ydDAgIDEKIAkgKiBQb3J0MSAgMzg1ICovCkBAIC01ODE1LDE3ICs2Mjg2LDE0IEBACiAJUkVHX1dSX0RNQUUoYnAsIFBYUDJfUkVHX1JRX09OQ0hJUF9BVCArIGkqOCwgd2Jfd3JpdGUsIDIpOwogCVJFR19XUihicCwgUFhQMl9SRUdfUFNXUlFfU1JDMF9MMlAgKyBmdW5jKjQsIFBYUF9PTkVfSUxUKGkpKTsKICNlbmRpZgotCS8qIFBvcnQgQ01zIGNvbWUgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIFhDTV9CTE9DSywgaW5pdF9zdGFnZSk7CiAKLQkvKiBQb3J0IFFNIGNvbWVzIGhlcmUgKi8KICNpZmRlZiBCQ01fSVNDU0kKIAlSRUdfV1IoYnAsIFRNX1JFR19MSU4wX1NDQU5fVElNRSArIGZ1bmMqNCwgMTAyNC82NCoyMCk7CiAJUkVHX1dSKGJwLCBUTV9SRUdfTElOMF9NQVhfQUNUSVZFX0NJRCArIGZ1bmMqNCwgMzEpOwogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgVElNRVJTX0JMT0NLLCBpbml0X3N0YWdlKTsKICNlbmRpZgotCS8qIFBvcnQgRFEgY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIERRX0JMT0NLLCBpbml0X3N0YWdlKTsKIAogCWJueDJ4X2luaXRfYmxvY2soYnAsIEJSQjFfQkxPQ0ssIGluaXRfc3RhZ2UpOwpAQCAtNTg1MiwxNSArNjMyMCwxMSBAQAogCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfSElHSF9USFJFU0hPTERfMCArIHBvcnQqNCwgaGlnaCk7CiAKIAotCS8qIFBvcnQgUFJTIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBQUlNfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCS8qIFBvcnQgVFNETSBjb21lcyBoZXJlICovCisKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBUU0RNX0JMT0NLLCBpbml0X3N0YWdlKTsKLQkvKiBQb3J0IENTRE0gY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIENTRE1fQkxPQ0ssIGluaXRfc3RhZ2UpOwotCS8qIFBvcnQgVVNETSBjb21lcyBoZXJlICovCiAJYm54MnhfaW5pdF9ibG9jayhicCwgVVNETV9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JLyogUG9ydCBYU0RNIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBYU0RNX0JMT0NLLCBpbml0X3N0YWdlKTsKIAogCWJueDJ4X2luaXRfYmxvY2soYnAsIFRTRU1fQkxPQ0ssIGluaXRfc3RhZ2UpOwpAQCAtNTg2OCw5ICs2MzMyLDcgQEAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBDU0VNX0JMT0NLLCBpbml0X3N0YWdlKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBYU0VNX0JMT0NLLCBpbml0X3N0YWdlKTsKIAotCS8qIFBvcnQgVVBCIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBVUEJfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCS8qIFBvcnQgWFBCIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBYUEJfQkxPQ0ssIGluaXRfc3RhZ2UpOwogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgUEJGX0JMT0NLLCBpbml0X3N0YWdlKTsKQEAgLTU5MDAsMTEgKzYzNjIsOCBAQAogCVJFR19XUl9ETUFFKGJwLCBTUkNfUkVHX0xBU1RGUkVFMCArIGZ1bmMqNCwgd2Jfd3JpdGUsIDIpOwogCiAJUkVHX1dSKGJwLCBTUkNfUkVHX05VTUJFUl9IQVNIX0JJVFMwICsgZnVuYyo0LCAxMCk7Ci0JLyogUG9ydCBTUkNIIGNvbWVzIGhlcmUgKi8KICNlbmRpZgotCS8qIFBvcnQgQ0RVIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBDRFVfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCS8qIFBvcnQgQ0ZDIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBDRkNfQkxPQ0ssIGluaXRfc3RhZ2UpOwogCiAJaWYgKENISVBfSVNfRTEoYnApKSB7CkBAIC01OTIxLDE1ICs2MzgwLDEwIEBACiAJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfTUFTS19BVFROX0ZVTkNfMCArIHBvcnQqNCwKIAkgICAgICAgKElTX0UxSE1GKGJwKSA/IDB4RjcgOiAweDcpKTsKIAotCS8qIFBvcnQgUFhQQ1MgY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIFBYUENTX0JMT0NLLCBpbml0X3N0YWdlKTsKLQkvKiBQb3J0IEVNQUMwIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBFTUFDMF9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JLyogUG9ydCBFTUFDMSBjb21lcyBoZXJlICovCiAJYm54MnhfaW5pdF9ibG9jayhicCwgRU1BQzFfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCS8qIFBvcnQgREJVIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBEQlVfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCS8qIFBvcnQgREJHIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBEQkdfQkxPQ0ssIGluaXRfc3RhZ2UpOwogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgTklHX0JMT0NLLCBpbml0X3N0YWdlKTsKQEAgLTU5NDEsOSArNjM5NSw2IEBACiAJCVJFR19XUihicCwgTklHX1JFR19MTEgwX0JSQjFfRFJWX01BU0tfTUYgKyBwb3J0KjQsCiAJCSAgICAgICAoSVNfRTFITUYoYnApID8gMHgxIDogMHgyKSk7CiAKLQkJLyogc3VwcG9ydCBwYXVzZSByZXF1ZXN0cyBmcm9tIFVTRE0sIFRTRE0gYW5kIEJSQiAqLwotCQlSRUdfV1IoYnAsIE5JR19SRUdfTExGQ19FR1JFU1NfU1JDX0VOQUJMRV8wICsgcG9ydCo0LCAweDcpOwotCiAJCXsKIAkJCVJFR19XUihicCwgTklHX1JFR19MTEZDX0VOQUJMRV8wICsgcG9ydCo0LCAwKTsKIAkJCVJFR19XUihicCwgTklHX1JFR19MTEZDX09VVF9FTl8wICsgcG9ydCo0LCAwKTsKQEAgLTU5NTEsOSArNjQwMiw3IEBACiAJCX0KIAl9CiAKLQkvKiBQb3J0IE1DUCBjb21lcyBoZXJlICovCiAJYm54MnhfaW5pdF9ibG9jayhicCwgTUNQX0JMT0NLLCBpbml0X3N0YWdlKTsKLQkvKiBQb3J0IERNQUUgY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIERNQUVfQkxPQ0ssIGluaXRfc3RhZ2UpOwogCiAJc3dpdGNoIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpKSB7CkBAIC01OTg5LDEwICs2NDM4LDE1IEBACiAJCWJyZWFrOwogCiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKIAkJLyogYWRkIFNQSU8gNSB0byBncm91cCAwICovCi0JCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wKTsKKwkJeworCQl1MzIgcmVnX2FkZHIgPSAocG9ydCA/IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMCA6CisJCQkJICAgICAgIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCk7CisJCXZhbCA9IFJFR19SRChicCwgcmVnX2FkZHIpOwogCQl2YWwgfD0gQUVVX0lOUFVUU19BVFROX0JJVFNfU1BJTzU7Ci0JCVJFR19XUihicCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wLCB2YWwpOworCQlSRUdfV1IoYnAsIHJlZ19hZGRyLCB2YWwpOworCQl9CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTYwNTcsOSArNjUxMSwxNSBAQAogCiAKIAlpZiAoQ0hJUF9JU19FMUgoYnApKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCi0JCQlibngyeF9pbml0X2Jsb2NrKGJwLAotCQkJCQkgY21fYmxvY2tzW2ldLCBGVU5DMF9TVEFHRSArIGZ1bmMpOworCQlibngyeF9pbml0X2Jsb2NrKGJwLCBNSVNDX0JMT0NLLCBGVU5DMF9TVEFHRSArIGZ1bmMpOworCQlibngyeF9pbml0X2Jsb2NrKGJwLCBUQ01fQkxPQ0ssIEZVTkMwX1NUQUdFICsgZnVuYyk7CisJCWJueDJ4X2luaXRfYmxvY2soYnAsIFVDTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKKwkJYm54MnhfaW5pdF9ibG9jayhicCwgQ0NNX0JMT0NLLCBGVU5DMF9TVEFHRSArIGZ1bmMpOworCQlibngyeF9pbml0X2Jsb2NrKGJwLCBYQ01fQkxPQ0ssIEZVTkMwX1NUQUdFICsgZnVuYyk7CisJCWJueDJ4X2luaXRfYmxvY2soYnAsIFRTRU1fQkxPQ0ssIEZVTkMwX1NUQUdFICsgZnVuYyk7CisJCWJueDJ4X2luaXRfYmxvY2soYnAsIFVTRU1fQkxPQ0ssIEZVTkMwX1NUQUdFICsgZnVuYyk7CisJCWJueDJ4X2luaXRfYmxvY2soYnAsIENTRU1fQkxPQ0ssIEZVTkMwX1NUQUdFICsgZnVuYyk7CisJCWJueDJ4X2luaXRfYmxvY2soYnAsIFhTRU1fQkxPQ0ssIEZVTkMwX1NUQUdFICsgZnVuYyk7CiAKIAkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMSDBfRlVOQ19FTiArIHBvcnQqOCwgMSk7CiAJCVJFR19XUihicCwgTklHX1JFR19MTEgwX0ZVTkNfVkxBTl9JRCArIHBvcnQqOCwgYnAtPmUxaG92KTsKQEAgLTYwOTAsNyArNjU1MCw5IEBACiAKIAlicC0+ZG1hZV9yZWFkeSA9IDA7CiAJbXV0ZXhfaW5pdCgmYnAtPmRtYWVfbXV0ZXgpOwotCWJueDJ4X2d1bnppcF9pbml0KGJwKTsKKwlyYyA9IGJueDJ4X2d1bnppcF9pbml0KGJwKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCXN3aXRjaCAobG9hZF9jb2RlKSB7CiAJY2FzZSBGV19NU0dfQ09ERV9EUlZfTE9BRF9DT01NT046CkBAIC02MTI0LDExICs2NTg2LDggQEAKIAkJYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXEgPQogCQkJCShTSE1FTV9SRChicCwgZnVuY19tYltmdW5jXS5kcnZfcHVsc2VfbWIpICYKIAkJCQkgRFJWX1BVTFNFX1NFUV9NQVNLKTsKLQkJYnAtPmZ1bmNfc3R4ID0gU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10uZndfbWJfcGFyYW0pOwotCQlEUChCTlgyWF9NU0dfTUNQLCAiZHJ2X3B1bHNlIDB4JXggIGZ1bmNfc3R4IDB4JXhcbiIsCi0JCSAgIGJwLT5md19kcnZfcHVsc2Vfd3Jfc2VxLCBicC0+ZnVuY19zdHgpOwotCX0gZWxzZQotCQlicC0+ZnVuY19zdHggPSAwOworCQlEUChCTlgyWF9NU0dfTUNQLCAiZHJ2X3B1bHNlIDB4JXhcbiIsIGJwLT5md19kcnZfcHVsc2Vfd3Jfc2VxKTsKKwl9CiAKIAkvKiB0aGlzIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIGd1bnppcCBlbmQgKi8KIAlibngyeF96ZXJvX2RlZl9zYihicCk7CkBAIC02MTQxLDQ0ICs2NjAwLDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qIHNlbmQgdGhlIE1DUCBhIHJlcXVlc3QsIGJsb2NrIHVudGlsIHRoZXJlIGlzIGEgcmVwbHkgKi8KLXN0YXRpYyB1MzIgYm54MnhfZndfY29tbWFuZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgY29tbWFuZCkKLXsKLQlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwotCXUzMiBzZXEgPSArK2JwLT5md19zZXE7Ci0JdTMyIHJjID0gMDsKLQl1MzIgY250ID0gMTsKLQl1OCBkZWxheSA9IENISVBfUkVWX0lTX1NMT1coYnApID8gMTAwIDogMTA7Ci0KLQlTSE1FTV9XUihicCwgZnVuY19tYltmdW5jXS5kcnZfbWJfaGVhZGVyLCAoY29tbWFuZCB8IHNlcSkpOwotCURQKEJOWDJYX01TR19NQ1AsICJ3cm90ZSBjb21tYW5kICgleCkgdG8gRlcgTUJcbiIsIChjb21tYW5kIHwgc2VxKSk7Ci0KLQlkbyB7Ci0JCS8qIGxldCB0aGUgRlcgZG8gaXQncyBtYWdpYyAuLi4gKi8KLQkJbXNsZWVwKGRlbGF5KTsKLQotCQlyYyA9IFNITUVNX1JEKGJwLCBmdW5jX21iW2Z1bmNdLmZ3X21iX2hlYWRlcik7Ci0KLQkJLyogR2l2ZSB0aGUgRlcgdXAgdG8gMiBzZWNvbmQgKDIwMCoxMG1zKSAqLwotCX0gd2hpbGUgKChzZXEgIT0gKHJjICYgRldfTVNHX1NFUV9OVU1CRVJfTUFTSykpICYmIChjbnQrKyA8IDIwMCkpOwotCi0JRFAoQk5YMlhfTVNHX01DUCwgIlthZnRlciAlZCBtc10gcmVhZCAoJXgpIHNlcSBpcyAoJXgpIGZyb20gRlcgTUJcbiIsCi0JICAgY250KmRlbGF5LCByYywgc2VxKTsKLQotCS8qIGlzIHRoaXMgYSByZXBseSB0byBvdXIgY29tbWFuZD8gKi8KLQlpZiAoc2VxID09IChyYyAmIEZXX01TR19TRVFfTlVNQkVSX01BU0spKSB7Ci0JCXJjICY9IEZXX01TR19DT0RFX01BU0s7Ci0KLQl9IGVsc2UgewotCQkvKiBGVyBCVUchICovCi0JCUJOWDJYX0VSUigiRlcgZmFpbGVkIHRvIHJlc3BvbmQhXG4iKTsKLQkJYm54MnhfZndfZHVtcChicCk7Ci0JCXJjID0gMDsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KIHN0YXRpYyB2b2lkIGJueDJ4X2ZyZWVfbWVtKHN0cnVjdCBibngyeCAqYnApCiB7CiAKQEAgLTYyMDgsOCArNjYyOSw3IEBACiAJCS8qIHN0YXR1cyBibG9ja3MgKi8KIAkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspLAogCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spICsKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV0aF90eF9kYl9kYXRhKSk7CisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaykpOwogCX0KIAkvKiBSeCAqLwogCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CkBAIC02MjM4LDcgKzY2NTgsNyBAQAogCQlCTlgyWF9GUkVFKGJueDJ4X2ZwKGJwLCBpLCB0eF9idWZfcmluZykpOwogCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgdHhfZGVzY19yaW5nKSwKIAkJCSAgICAgICBibngyeF9mcChicCwgaSwgdHhfZGVzY19tYXBwaW5nKSwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV0aF90eF9iZCkgKiBOVU1fVFhfQkQpOworCQkJICAgICAgIHNpemVvZih1bmlvbiBldGhfdHhfYmRfdHlwZXMpICogTlVNX1RYX0JEKTsKIAl9CiAJLyogZW5kIG9mIGZhc3RwYXRoICovCiAKQEAgLTYyODksOCArNjcwOSw3IEBACiAJCS8qIHN0YXR1cyBibG9ja3MgKi8KIAkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrKSwKIAkJCQkmYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaykgKwotCQkJCXNpemVvZihzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEpKTsKKwkJCQlzaXplb2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrKSk7CiAJfQogCS8qIFJ4ICovCiAJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKQEAgLTYzMTcsMTkgKzY3MzYsMTIgQEAKIAkvKiBUeCAqLwogCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CiAKLQkJYm54MnhfZnAoYnAsIGksIGh3X3R4X3Byb2RzKSA9Ci0JCQkJKHZvaWQgKikoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspICsgMSk7Ci0KLQkJYm54MnhfZnAoYnAsIGksIHR4X3Byb2RzX21hcHBpbmcpID0KLQkJCQlibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSArCi0JCQkJc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jayk7Ci0KIAkJLyogZmFzdHBhdGggdHggcmluZ3M6IHR4X2J1ZiB0eF9kZXNjICovCiAJCUJOWDJYX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCB0eF9idWZfcmluZyksCiAJCQkJc2l6ZW9mKHN0cnVjdCBzd190eF9iZCkgKiBOVU1fVFhfQkQpOwogCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfcmluZyksCiAJCQkJJmJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX21hcHBpbmcpLAotCQkJCXNpemVvZihzdHJ1Y3QgZXRoX3R4X2JkKSAqIE5VTV9UWF9CRCk7CisJCQkJc2l6ZW9mKHVuaW9uIGV0aF90eF9iZF90eXBlcykgKiBOVU1fVFhfQkQpOwogCX0KIAkvKiBlbmQgb2YgZmFzdHBhdGggKi8KIApAQCAtNjUwNiw3ICs2OTE4LDEyIEBACiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CiAKLQkJc3ByaW50ZihmcC0+bmFtZSwgIiVzLmZwJWQiLCBicC0+ZGV2LT5uYW1lLCBpKTsKKwkJaWYgKGkgPCBicC0+bnVtX3J4X3F1ZXVlcykKKwkJCXNwcmludGYoZnAtPm5hbWUsICIlcy1yeC0lZCIsIGJwLT5kZXYtPm5hbWUsIGkpOworCQllbHNlCisJCQlzcHJpbnRmKGZwLT5uYW1lLCAiJXMtdHgtJWQiLAorCQkJCWJwLT5kZXYtPm5hbWUsIGkgLSBicC0+bnVtX3J4X3F1ZXVlcyk7CisKIAkJcmMgPSByZXF1ZXN0X2lycShicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS52ZWN0b3IsCiAJCQkJIGJueDJ4X21zaXhfZnBfaW50LCAwLCBmcC0+bmFtZSwgZnApOwogCQlpZiAocmMpIHsKQEAgLTY1MTksMTYgKzY5MzYsMTEgQEAKIAl9CiAKIAlpID0gQk5YMlhfTlVNX1FVRVVFUyhicCk7Ci0JaWYgKGlzX211bHRpKGJwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJICAgICAgICIlczogdXNpbmcgTVNJLVggIElSUXM6IHNwICVkICBmcCAlZCAtICVkXG4iLAotCQkgICAgICAgYnAtPmRldi0+bmFtZSwgYnAtPm1zaXhfdGFibGVbMF0udmVjdG9yLAotCQkgICAgICAgYnAtPm1zaXhfdGFibGVbb2Zmc2V0XS52ZWN0b3IsCi0JCSAgICAgICBicC0+bXNpeF90YWJsZVtvZmZzZXQgKyBpIC0gMV0udmVjdG9yKTsKLQllbHNlCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogdXNpbmcgTVNJLVggIElSUXM6IHNwICVkICBmcCAlZFxuIiwKLQkJICAgICAgIGJwLT5kZXYtPm5hbWUsIGJwLT5tc2l4X3RhYmxlWzBdLnZlY3RvciwKLQkJICAgICAgIGJwLT5tc2l4X3RhYmxlW29mZnNldCArIGkgLSAxXS52ZWN0b3IpOworCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogdXNpbmcgTVNJLVggIElSUXM6IHNwICVkICBmcFslZF0gJWQiCisJICAgICAgICIgLi4uIGZwWyVkXSAlZFxuIiwKKwkgICAgICAgYnAtPmRldi0+bmFtZSwgYnAtPm1zaXhfdGFibGVbMF0udmVjdG9yLAorCSAgICAgICAwLCBicC0+bXNpeF90YWJsZVtvZmZzZXRdLnZlY3RvciwKKwkgICAgICAgaSAtIDEsIGJwLT5tc2l4X3RhYmxlW29mZnNldCArIGkgLSAxXS52ZWN0b3IpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NTgzLDcgKzY5OTUsMTIgQEAKIAogc3RhdGljIHZvaWQgYm54MnhfbmV0aWZfc3RhcnQoc3RydWN0IGJueDJ4ICpicCkKIHsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYnAtPmludHJfc2VtKSkgeworCWludCBpbnRyX3NlbTsKKworCWludHJfc2VtID0gYXRvbWljX2RlY19hbmRfdGVzdCgmYnAtPmludHJfc2VtKTsKKwlzbXBfd21iKCk7IC8qIEVuc3VyZSB0aGF0IGJwLT5pbnRyX3NlbSB1cGRhdGUgaXMgU01QLXNhZmUgKi8KKworCWlmIChpbnRyX3NlbSkgewogCQlpZiAobmV0aWZfcnVubmluZyhicC0+ZGV2KSkgewogCQkJYm54MnhfbmFwaV9lbmFibGUoYnApOwogCQkJYm54MnhfaW50X2VuYWJsZShicCk7CkBAIC02NjMxLDcgKzcwNDgsOCBAQAogCQljb25maWctPmNvbmZpZ190YWJsZVswXS50YXJnZXRfdGFibGVfZW50cnkuZmxhZ3MgPSAwOwogCWVsc2UKIAkJQ0FNX0lOVkFMSURBVEUoY29uZmlnLT5jb25maWdfdGFibGVbMF0pOwotCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLnRhcmdldF90YWJsZV9lbnRyeS5jbGllbnRfaWQgPSAwOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLnRhcmdldF90YWJsZV9lbnRyeS5jbGllbnRzX2JpdF92ZWN0b3IgPQorCQkJCQkJY3B1X3RvX2xlMzIoMSA8PCBCUF9MX0lEKGJwKSk7CiAJY29uZmlnLT5jb25maWdfdGFibGVbMF0udGFyZ2V0X3RhYmxlX2VudHJ5LnZsYW5faWQgPSAwOwogCiAJRFAoTkVUSUZfTVNHX0lGVVAsICIlcyBNQUMgKCUwNHg6JTA0eDolMDR4KVxuIiwKQEAgLTY2NTAsNyArNzA2OCw4IEBACiAJCQkJVFNUT1JNX0NBTV9UQVJHRVRfVEFCTEVfRU5UUllfQlJPQURDQVNUOwogCWVsc2UKIAkJQ0FNX0lOVkFMSURBVEUoY29uZmlnLT5jb25maWdfdGFibGVbMV0pOwotCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLnRhcmdldF90YWJsZV9lbnRyeS5jbGllbnRfaWQgPSAwOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLnRhcmdldF90YWJsZV9lbnRyeS5jbGllbnRzX2JpdF92ZWN0b3IgPQorCQkJCQkJY3B1X3RvX2xlMzIoMSA8PCBCUF9MX0lEKGJwKSk7CiAJY29uZmlnLT5jb25maWdfdGFibGVbMV0udGFyZ2V0X3RhYmxlX2VudHJ5LnZsYW5faWQgPSAwOwogCiAJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQywgMCwKQEAgLTY2NjMsMTEgKzcwODIsNiBAQAogCXN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9jbWRfZTFoICpjb25maWcgPQogCQkoc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZF9lMWggKilibngyeF9zcChicCwgbWFjX2NvbmZpZyk7CiAKLQlpZiAoc2V0ICYmIChicC0+c3RhdGUgIT0gQk5YMlhfU1RBVEVfT1BFTikpIHsKLQkJRFAoTkVUSUZfTVNHX0lGVVAsICJzdGF0ZSBpcyAleCwgcmV0dXJuaW5nXG4iLCBicC0+c3RhdGUpOwotCQlyZXR1cm47Ci0JfQotCiAJLyogQ0FNIGFsbG9jYXRpb24gZm9yIEUxSAogCSAqIHVuaWNhc3RzOiBieSBmdW5jIG51bWJlcgogCSAqIG11bHRpY2FzdDogMjArRlVOQyoyMCwgMjAgZWFjaApAQCAtNjY4NCw3ICs3MDk4LDggQEAKIAkJCQkJc3dhYjE2KCoodTE2ICopJmJwLT5kZXYtPmRldl9hZGRyWzJdKTsKIAljb25maWctPmNvbmZpZ190YWJsZVswXS5sc2JfbWFjX2FkZHIgPQogCQkJCQlzd2FiMTYoKih1MTYgKikmYnAtPmRldi0+ZGV2X2FkZHJbNF0pOwotCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmNsaWVudF9pZCA9IEJQX0xfSUQoYnApOworCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmNsaWVudHNfYml0X3ZlY3RvciA9CisJCQkJCWNwdV90b19sZTMyKDEgPDwgQlBfTF9JRChicCkpOwogCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLnZsYW5faWQgPSAwOwogCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmUxaG92X2lkID0gY3B1X3RvX2xlMTYoYnAtPmUxaG92KTsKIAlpZiAoc2V0KQpAQCAtNjczNCw2ICs3MTQ5LDkgQEAKIAkJfQogCiAJCW1zbGVlcCgxKTsKKworCQlpZiAoYnAtPnBhbmljKQorCQkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogdGltZW91dCEgKi8KQEAgLTY3ODEsNjcgKzcxOTksMTExIEBACiAKIHN0YXRpYyBpbnQgYm54MnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOwogCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfaW50X21vZGUoc3RydWN0IGJueDJ4ICpicCkKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9pbnRfbW9kZV9tc2l4KHN0cnVjdCBibngyeCAqYnAsIGludCAqbnVtX3J4X3F1ZXVlc19vdXQsCisJCQkJICAgIGludCAqbnVtX3R4X3F1ZXVlc19vdXQpCiB7Ci0JaW50IG51bV9xdWV1ZXM7CisJaW50IF9udW1fcnhfcXVldWVzID0gMCwgX251bV90eF9xdWV1ZXMgPSAwOworCisJc3dpdGNoIChicC0+bXVsdGlfbW9kZSkgeworCWNhc2UgRVRIX1JTU19NT0RFX0RJU0FCTEVEOgorCQlfbnVtX3J4X3F1ZXVlcyA9IDE7CisJCV9udW1fdHhfcXVldWVzID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIEVUSF9SU1NfTU9ERV9SRUdVTEFSOgorCQlpZiAobnVtX3J4X3F1ZXVlcykKKwkJCV9udW1fcnhfcXVldWVzID0gbWluX3QodTMyLCBudW1fcnhfcXVldWVzLAorCQkJCQkgICAgICAgQk5YMlhfTUFYX1FVRVVFUyhicCkpOworCQllbHNlCisJCQlfbnVtX3J4X3F1ZXVlcyA9IG1pbl90KHUzMiwgbnVtX29ubGluZV9jcHVzKCksCisJCQkJCSAgICAgICBCTlgyWF9NQVhfUVVFVUVTKGJwKSk7CisKKwkJaWYgKG51bV90eF9xdWV1ZXMpCisJCQlfbnVtX3R4X3F1ZXVlcyA9IG1pbl90KHUzMiwgbnVtX3R4X3F1ZXVlcywKKwkJCQkJICAgICAgIEJOWDJYX01BWF9RVUVVRVMoYnApKTsKKwkJZWxzZQorCQkJX251bV90eF9xdWV1ZXMgPSBtaW5fdCh1MzIsIG51bV9vbmxpbmVfY3B1cygpLAorCQkJCQkgICAgICAgQk5YMlhfTUFYX1FVRVVFUyhicCkpOworCisJCS8qIFRoZXJlIG11c3QgYmUgbm90IG1vcmUgVHggcXVldWVzIHRoYW4gUnggcXVldWVzICovCisJCWlmIChfbnVtX3R4X3F1ZXVlcyA+IF9udW1fcnhfcXVldWVzKSB7CisJCQlCTlgyWF9FUlIoIm51bWJlciBvZiB0eCBxdWV1ZXMgKCVkKSA+ICIKKwkJCQkgICJudW1iZXIgb2YgcnggcXVldWVzICglZCkiCisJCQkJICAiICBkZWZhdWx0aW5nIHRvICVkXG4iLAorCQkJCSAgX251bV90eF9xdWV1ZXMsIF9udW1fcnhfcXVldWVzLAorCQkJCSAgX251bV9yeF9xdWV1ZXMpOworCQkJX251bV90eF9xdWV1ZXMgPSBfbnVtX3J4X3F1ZXVlczsKKwkJfQorCQlicmVhazsKKworCisJZGVmYXVsdDoKKwkJX251bV9yeF9xdWV1ZXMgPSAxOworCQlfbnVtX3R4X3F1ZXVlcyA9IDE7CisJCWJyZWFrOworCX0KKworCSpudW1fcnhfcXVldWVzX291dCA9IF9udW1fcnhfcXVldWVzOworCSpudW1fdHhfcXVldWVzX291dCA9IF9udW1fdHhfcXVldWVzOworfQorCitzdGF0aWMgaW50IGJueDJ4X3NldF9pbnRfbW9kZShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCByYyA9IDA7CiAKIAlzd2l0Y2ggKGludF9tb2RlKSB7CiAJY2FzZSBJTlRfTU9ERV9JTlR4OgogCWNhc2UgSU5UX01PREVfTVNJOgotCQludW1fcXVldWVzID0gMTsKLQkJYnAtPm51bV9yeF9xdWV1ZXMgPSBudW1fcXVldWVzOwotCQlicC0+bnVtX3R4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7Ci0JCURQKE5FVElGX01TR19JRlVQLAotCQkgICAic2V0IG51bWJlciBvZiBxdWV1ZXMgdG8gJWRcbiIsIG51bV9xdWV1ZXMpOworCQlicC0+bnVtX3J4X3F1ZXVlcyA9IDE7CisJCWJwLT5udW1fdHhfcXVldWVzID0gMTsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJzZXQgbnVtYmVyIG9mIHF1ZXVlcyB0byAxXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIElOVF9NT0RFX01TSVg6CiAJZGVmYXVsdDoKLQkJaWYgKGJwLT5tdWx0aV9tb2RlID09IEVUSF9SU1NfTU9ERV9SRUdVTEFSKQotCQkJbnVtX3F1ZXVlcyA9IG1pbl90KHUzMiwgbnVtX29ubGluZV9jcHVzKCksCi0JCQkJCSAgIEJOWDJYX01BWF9RVUVVRVMoYnApKTsKLQkJZWxzZQotCQkJbnVtX3F1ZXVlcyA9IDE7Ci0JCWJwLT5udW1fcnhfcXVldWVzID0gbnVtX3F1ZXVlczsKLQkJYnAtPm51bV90eF9xdWV1ZXMgPSBudW1fcXVldWVzOwotCQlEUChORVRJRl9NU0dfSUZVUCwgInNldCBudW1iZXIgb2YgcnggcXVldWVzIHRvICVkIgotCQkgICAiICBudW1iZXIgb2YgdHggcXVldWVzIHRvICVkXG4iLAorCQkvKiBTZXQgaW50ZXJydXB0IG1vZGUgYWNjb3JkaW5nIHRvIGJwLT5tdWx0aV9tb2RlIHZhbHVlICovCisJCWJueDJ4X3NldF9pbnRfbW9kZV9tc2l4KGJwLCAmYnAtPm51bV9yeF9xdWV1ZXMsCisJCQkJCSZicC0+bnVtX3R4X3F1ZXVlcyk7CisKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJzZXQgbnVtYmVyIG9mIHF1ZXVlcyB0bzogcnggJWQgdHggJWRcbiIsCiAJCSAgIGJwLT5udW1fcnhfcXVldWVzLCBicC0+bnVtX3R4X3F1ZXVlcyk7CisKIAkJLyogaWYgd2UgY2FuJ3QgdXNlIE1TSS1YIHdlIG9ubHkgbmVlZCBvbmUgZnAsCiAJCSAqIHNvIHRyeSB0byBlbmFibGUgTVNJLVggd2l0aCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBmcCdzCiAJCSAqIGFuZCBmYWxsYmFjayB0byBNU0kgb3IgbGVnYWN5IElOVHggd2l0aCBvbmUgZnAKIAkJICovCi0JCWlmIChibngyeF9lbmFibGVfbXNpeChicCkpIHsKKwkJcmMgPSBibngyeF9lbmFibGVfbXNpeChicCk7CisJCWlmIChyYykgewogCQkJLyogZmFpbGVkIHRvIGVuYWJsZSBNU0ktWCAqLwotCQkJbnVtX3F1ZXVlcyA9IDE7Ci0JCQlicC0+bnVtX3J4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7Ci0JCQlicC0+bnVtX3R4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7CiAJCQlpZiAoYnAtPm11bHRpX21vZGUpCiAJCQkJQk5YMlhfRVJSKCJNdWx0aSByZXF1ZXN0ZWQgYnV0IGZhaWxlZCB0byAiCi0JCQkJCSAgImVuYWJsZSBNU0ktWCAgc2V0IG51bWJlciBvZiAiCi0JCQkJCSAgInF1ZXVlcyB0byAlZFxuIiwgbnVtX3F1ZXVlcyk7CisJCQkJCSAgImVuYWJsZSBNU0ktWCAocnggJWQgdHggJWQpLCAiCisJCQkJCSAgInNldCBudW1iZXIgb2YgcXVldWVzIHRvIDFcbiIsCisJCQkJCSAgYnAtPm51bV9yeF9xdWV1ZXMsIGJwLT5udW1fdHhfcXVldWVzKTsKKwkJCWJwLT5udW1fcnhfcXVldWVzID0gMTsKKwkJCWJwLT5udW1fdHhfcXVldWVzID0gMTsKIAkJfQogCQlicmVhazsKIAl9CiAJYnAtPmRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gYnAtPm51bV90eF9xdWV1ZXM7CisJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KIHN0YXRpYyBpbnQgYm54MnhfbmljX2xvYWQoc3RydWN0IGJueDJ4ICpicCwgaW50IGxvYWRfbW9kZSkKIHsKIAl1MzIgbG9hZF9jb2RlOwotCWludCBpLCByYyA9IDA7CisJaW50IGksIHJjOworCiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCURQKE5FVElGX01TR19JRlVQLCAiZW50ZXIgIGxvYWRfbW9kZSAlZFxuIiwgbG9hZF9tb2RlKTsKIAlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKIAkJcmV0dXJuIC1FUEVSTTsKICNlbmRpZgogCiAJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9MT0FEOwogCi0JYm54Mnhfc2V0X2ludF9tb2RlKGJwKTsKKwlyYyA9IGJueDJ4X3NldF9pbnRfbW9kZShicCk7CiAKIAlpZiAoYm54MnhfYWxsb2NfbWVtKGJwKSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02ODU0LDE3ICs3MzE2LDYgQEAKIAkJbmV0aWZfbmFwaV9hZGQoYnAtPmRldiwgJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSwKIAkJCSAgICAgICBibngyeF9wb2xsLCAxMjgpOwogCi0jaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwotCi0JCWZwLT5wb2xsX25vX3dvcmsgPSAwOwotCQlmcC0+cG9sbF9jYWxscyA9IDA7Ci0JCWZwLT5wb2xsX21heF9jYWxscyA9IDA7Ci0JCWZwLT5wb2xsX2NvbXBsZXRlID0gMDsKLQkJZnAtPnBvbGxfZXhpdCA9IDA7Ci0JfQotI2VuZGlmCiAJYm54MnhfbmFwaV9lbmFibGUoYnApOwogCiAJaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgewpAQCAtNjg3NCw2ICs3MzI1LDggQEAKIAkJCWdvdG8gbG9hZF9lcnJvcjE7CiAJCX0KIAl9IGVsc2UgeworCQkvKiBGYWxsIHRvIElOVHggaWYgZmFpbGVkIHRvIGVuYWJsZSBNU0ktWCBkdWUgdG8gbGFjayBvZgorCQkgICBtZW1vcnkgKGluIGJueDJ4X3NldF9pbnRfbW9kZSgpKSAqLwogCQlpZiAoKHJjICE9IC1FTk9NRU0pICYmIChpbnRfbW9kZSAhPSBJTlRfTU9ERV9JTlR4KSkKIAkJCWJueDJ4X2VuYWJsZV9tc2koYnApOwogCQlibngyeF9hY2tfaW50KGJwKTsKQEAgLTY5NDIsNiArNzM5NSwxMiBAQAogCS8qIFNldHVwIE5JQyBpbnRlcm5hbHMgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCiAJYm54MnhfbmljX2luaXQoYnAsIGxvYWRfY29kZSk7CiAKKwlpZiAoKGxvYWRfY29kZSA9PSBGV19NU0dfQ09ERV9EUlZfTE9BRF9DT01NT04pICYmCisJICAgIChicC0+Y29tbW9uLnNobWVtMl9iYXNlKSkKKwkJU0hNRU0yX1dSKGJwLCBkY2Nfc3VwcG9ydCwKKwkJCSAgKFNITUVNX0RDQ19TVVBQT1JUX0RJU0FCTEVfRU5BQkxFX1BGX1RMViB8CisJCQkgICBTSE1FTV9EQ0NfU1VQUE9SVF9CQU5EV0lEVEhfQUxMT0NBVElPTl9UTFYpKTsKKwogCS8qIFNlbmQgTE9BRF9ET05FIGNvbW1hbmQgdG8gTUNQICovCiAJaWYgKCFCUF9OT01DUChicCkpIHsKIAkJbG9hZF9jb2RlID0gYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX0xPQURfRE9ORSk7CkBAIC02OTU3LDcgKzc0MTYsMTIgQEAKIAlyYyA9IGJueDJ4X3NldHVwX2xlYWRpbmcoYnApOwogCWlmIChyYykgewogCQlCTlgyWF9FUlIoIlNldHVwIGxlYWRpbmcgZmFpbGVkIVxuIik7CisjaWZuZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKIAkJZ290byBsb2FkX2Vycm9yMzsKKyNlbHNlCisJCWJwLT5wYW5pYyA9IDE7CisJCXJldHVybiAtRUJVU1k7CisjZW5kaWYKIAl9CiAKIAlpZiAoQ0hJUF9JU19FMUgoYnApKQpAQCAtNjk2NiwxNyArNzQzMCwxOCBAQAogCQkJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfRElTQUJMRUQ7CiAJCX0KIAotCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikKKwlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pIHsKIAkJZm9yX2VhY2hfbm9uZGVmYXVsdF9xdWV1ZShicCwgaSkgewogCQkJcmMgPSBibngyeF9zZXR1cF9tdWx0aShicCwgaSk7CiAJCQlpZiAocmMpCiAJCQkJZ290byBsb2FkX2Vycm9yMzsKIAkJfQogCi0JaWYgKENISVBfSVNfRTEoYnApKQotCQlibngyeF9zZXRfbWFjX2FkZHJfZTEoYnAsIDEpOwotCWVsc2UKLQkJYm54Mnhfc2V0X21hY19hZGRyX2UxaChicCwgMSk7CisJCWlmIChDSElQX0lTX0UxKGJwKSkKKwkJCWJueDJ4X3NldF9tYWNfYWRkcl9lMShicCwgMSk7CisJCWVsc2UKKwkJCWJueDJ4X3NldF9tYWNfYWRkcl9lMWgoYnAsIDEpOworCX0KIAogCWlmIChicC0+cG9ydC5wbWYpCiAJCWJueDJ4X2luaXRpYWxfcGh5X2luaXQoYnAsIGxvYWRfbW9kZSk7CkBAIC02OTg0LDE0ICs3NDQ5LDE4IEBACiAJLyogU3RhcnQgZmFzdCBwYXRoICovCiAJc3dpdGNoIChsb2FkX21vZGUpIHsKIAljYXNlIExPQURfTk9STUFMOgotCQkvKiBUeCBxdWV1ZSBzaG91bGQgYmUgb25seSByZWVuYWJsZWQgKi8KLQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGJwLT5kZXYpOworCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pIHsKKwkJCS8qIFR4IHF1ZXVlIHNob3VsZCBiZSBvbmx5IHJlZW5hYmxlZCAqLworCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGJwLT5kZXYpOworCQl9CiAJCS8qIEluaXRpYWxpemUgdGhlIHJlY2VpdmUgZmlsdGVyLiAqLwogCQlibngyeF9zZXRfcnhfbW9kZShicC0+ZGV2KTsKIAkJYnJlYWs7CiAKIAljYXNlIExPQURfT1BFTjoKIAkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhicC0+ZGV2KTsKKwkJaWYgKGJwLT5zdGF0ZSAhPSBCTlgyWF9TVEFURV9PUEVOKQorCQkJbmV0aWZfdHhfZGlzYWJsZShicC0+ZGV2KTsKIAkJLyogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBmaWx0ZXIuICovCiAJCWJueDJ4X3NldF9yeF9tb2RlKGJwLT5kZXYpOwogCQlicmVhazsKQEAgLTcxOTAsOSArNzY1OSwxMSBAQAogCiAJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfQ0xPU0lOR19XQUlUNF9IQUxUOwogCisJLyogU2V0ICJkcm9wIGFsbCIgKi8KIAlicC0+cnhfbW9kZSA9IEJOWDJYX1JYX01PREVfTk9ORTsKIAlibngyeF9zZXRfc3Rvcm1fcnhfbW9kZShicCk7CiAKKwkvKiBEaXNhYmxlIEhXIGludGVycnVwdHMsIE5BUEkgYW5kIFR4ICovCiAJYm54MnhfbmV0aWZfc3RvcChicCwgMSk7CiAKIAlkZWxfdGltZXJfc3luYygmYnAtPnRpbWVyKTsKQEAgLTcyNTYsMTcgKzc3MjcsMTcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgTUNfSEFTSF9TSVpFOyBpKyspCiAJCQlSRUdfV1IoYnAsIE1DX0hBU0hfT0ZGU0VUKGJwLCBpKSwgMCk7CisKKwkJUkVHX1dSKGJwLCBNSVNDX1JFR19FMUhNRl9NT0RFLCAwKTsKIAl9CiAKIAlpZiAodW5sb2FkX21vZGUgPT0gVU5MT0FEX05PUk1BTCkKIAkJcmVzZXRfY29kZSA9IERSVl9NU0dfQ09ERV9VTkxPQURfUkVRX1dPTF9ESVM7CiAKLQllbHNlIGlmIChicC0+ZmxhZ3MgJiBOT19XT0xfRkxBRykgeworCWVsc2UgaWYgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKQogCQlyZXNldF9jb2RlID0gRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX01DUDsKLQkJaWYgKENISVBfSVNfRTFIKGJwKSkKLQkJCVJFR19XUihicCwgTUlTQ19SRUdfRTFITUZfTU9ERSwgMCk7CiAKLQl9IGVsc2UgaWYgKGJwLT53b2wpIHsKKwllbHNlIGlmIChicC0+d29sKSB7CiAJCXUzMiBlbWFjX2Jhc2UgPSBwb3J0ID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzA7CiAJCXU4ICptYWNfYWRkciA9IGJwLT5kZXYtPmRldl9hZGRyOwogCQl1MzIgdmFsOwpAQCAtNzU2OSw4ICs4MDQwLDEwIEBACiAJCSAgICAgICBicC0+Y29tbW9uLmZsYXNoX3NpemUsIGJwLT5jb21tb24uZmxhc2hfc2l6ZSk7CiAKIAlicC0+Y29tbW9uLnNobWVtX2Jhc2UgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1NIQVJFRF9NRU1fQUREUik7CisJYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSA9IFJFR19SRChicCwgTUlTQ19SRUdfR0VORVJJQ19DUl8wKTsKIAlicC0+bGlua19wYXJhbXMuc2htZW1fYmFzZSA9IGJwLT5jb21tb24uc2htZW1fYmFzZTsKLQlCTlgyWF9ERVZfSU5GTygic2htZW0gb2Zmc2V0IGlzIDB4JXhcbiIsIGJwLT5jb21tb24uc2htZW1fYmFzZSk7CisJQk5YMlhfREVWX0lORk8oInNobWVtIG9mZnNldCAweCV4ICBzaG1lbTIgb2Zmc2V0IDB4JXhcbiIsCisJCSAgICAgICBicC0+Y29tbW9uLnNobWVtX2Jhc2UsIGJwLT5jb21tb24uc2htZW0yX2Jhc2UpOwogCiAJaWYgKCFicC0+Y29tbW9uLnNobWVtX2Jhc2UgfHwKIAkgICAgKGJwLT5jb21tb24uc2htZW1fYmFzZSA8IDB4QTAwMDApIHx8CkBAIC03NjEwLDYgKzgwODMsOSBAQAogCQlCTlgyWF9FUlIoIlRoaXMgZHJpdmVyIG5lZWRzIGJjX3ZlciAlWCBidXQgZm91bmQgJVgsIgogCQkJICAiIHBsZWFzZSB1cGdyYWRlIEJDXG4iLCBCTlgyWF9CQ19WRVIsIHZhbCk7CiAJfQorCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyB8PQorCQkodmFsID49IFJFUV9CQ19WRVJfNF9WUkZZX09QVF9NREwpID8KKwkJRkVBVFVSRV9DT05GSUdfQkNfU1VQUE9SVFNfT1BUX01ETF9WUkZZIDogMDsKIAogCWlmIChCUF9FMUhWTihicCkgPT0gMCkgewogCQlwY2lfcmVhZF9jb25maWdfd29yZChicC0+cGRldiwgYnAtPnBtX2NhcCArIFBDSV9QTV9QTUMsICZwbWMpOwpAQCAtNzc3MCw2ICs4MjQ2LDE4IEBACiAJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CiAJCQlicmVhazsKIAorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CisJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDg3MjcpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgogCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4IChTRlg3MTAxKVxuIiwKIAkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKQEAgLTgwMjQsNiArODUxMiw3IEBACiAJdTMyIHZhbCwgdmFsMjsKIAl1MzIgY29uZmlnOwogCXUxNiBpOworCXUzMiBleHRfcGh5X3R5cGU7CiAKIAlicC0+bGlua19wYXJhbXMuYnAgPSBicDsKIAlicC0+bGlua19wYXJhbXMucG9ydCA9IHBvcnQ7CkBAIC04MDMzLDYgKzg1MjIsMTcgQEAKIAlicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcgPQogCQlTSE1FTV9SRChicCwKIAkJCSBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5leHRlcm5hbF9waHlfY29uZmlnKTsKKwkvKiBCQ004NzI3X05PQyA9PiBCQ004NzI3IG5vIG92ZXIgY3VycmVudCAqLworCWlmIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpID09CisJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjdfTk9DKSB7CisJCWJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyAmPQorCQkJflBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX01BU0s7CisJCWJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyB8PQorCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzsKKwkJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzIHw9CisJCQlGRUFUVVJFX0NPTkZJR19CQ004NzI3X05PQzsKKwl9CisKIAlicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2sgPQogCQlTSE1FTV9SRChicCwKIAkJCSBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5zcGVlZF9jYXBhYmlsaXR5X21hc2spOwpAQCAtODA1MywxNyArODU1MywxMCBAQAogCQlicC0+bGlua19wYXJhbXMueGd4c19jb25maWdfdHhbKGkgPDwgMSkgKyAxXSA9ICh2YWwgJiAweGZmZmYpOwogCX0KIAotCWNvbmZpZyA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2ZlYXR1cmVfY29uZmlnW3BvcnRdLmNvbmZpZyk7Ci0JaWYgKGNvbmZpZyAmIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9FTkFCTEVEKQotCQlicC0+bGlua19wYXJhbXMuZmVhdHVyZV9jb25maWdfZmxhZ3MgfD0KLQkJCQlGRUFUVVJFX0NPTkZJR19NT0RVTEVfRU5GT1JDTUVOVF9FTkFCTEVEOwotCWVsc2UKLQkJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzICY9Ci0JCQkJfkZFQVRVUkVfQ09ORklHX01PRFVMRV9FTkZPUkNNRU5UX0VOQUJMRUQ7Ci0KIAkvKiBJZiB0aGUgZGV2aWNlIGlzIGNhcGFibGUgb2YgV29MLCBzZXQgdGhlIGRlZmF1bHQgc3RhdGUgYWNjb3JkaW5nCiAJICogdG8gdGhlIEhXCiAJICovCisJY29uZmlnID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfZmVhdHVyZV9jb25maWdbcG9ydF0uY29uZmlnKTsKIAlicC0+d29sID0gKCEoYnAtPmZsYWdzICYgTk9fV09MX0ZMQUcpICYmCiAJCSAgIChjb25maWcgJiBQT1JUX0ZFQVRVUkVfV09MX0VOQUJMRUQpKTsKIApAQCAtODA3MywxMiArODU2NiwyNSBAQAogCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnLAogCQkgICAgICAgYnAtPmxpbmtfcGFyYW1zLnNwZWVkX2NhcF9tYXNrLCBicC0+cG9ydC5saW5rX2NvbmZpZyk7CiAKLQlicC0+bGlua19wYXJhbXMuc3dpdGNoX2NmZyA9IChicC0+cG9ydC5saW5rX2NvbmZpZyAmCi0JCQkJICAgICAgUE9SVF9GRUFUVVJFX0NPTk5FQ1RFRF9TV0lUQ0hfTUFTSyk7CisJYnAtPmxpbmtfcGFyYW1zLnN3aXRjaF9jZmcgfD0gKGJwLT5wb3J0LmxpbmtfY29uZmlnICYKKwkJCQkgICAgICAgUE9SVF9GRUFUVVJFX0NPTk5FQ1RFRF9TV0lUQ0hfTUFTSyk7CiAJYm54MnhfbGlua19zZXR0aW5nc19zdXBwb3J0ZWQoYnAsIGJwLT5saW5rX3BhcmFtcy5zd2l0Y2hfY2ZnKTsKIAogCWJueDJ4X2xpbmtfc2V0dGluZ3NfcmVxdWVzdGVkKGJwKTsKIAorCS8qCisJICogSWYgY29ubmVjdGVkIGRpcmVjdGx5LCB3b3JrIHdpdGggdGhlIGludGVybmFsIFBIWSwgb3RoZXJ3aXNlLCB3b3JrCisJICogd2l0aCB0aGUgZXh0ZXJuYWwgUEhZCisJICovCisJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKKwlpZiAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkKKwkJYnAtPm1kaW8ucHJ0YWQgPSBicC0+bGlua19wYXJhbXMucGh5X2FkZHI7CisKKwllbHNlIGlmICgoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkUpICYmCisJCSAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX05PVF9DT05OKSkKKwkJYnAtPm1kaW8ucHJ0YWQgPQorCQkJWEdYU19FWFRfUEhZX0FERFIoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKKwogCXZhbDIgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ubWFjX3VwcGVyKTsKIAl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ubWFjX2xvd2VyKTsKIAlicC0+ZGV2LT5kZXZfYWRkclswXSA9ICh1OCkodmFsMiA+PiA4ICYgMHhmZik7CkBAIC04MTA1LDIyICs4NjExLDMzIEBACiAJCWJwLT5tZl9jb25maWcgPQogCQkJU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS5jb25maWcpOwogCi0JCXZhbCA9IChTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW2Z1bmNdLmUxaG92X3RhZykgJgorCQl2YWwgPSAoU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tGVU5DXzBdLmUxaG92X3RhZykgJgogCQkgICAgICAgRlVOQ19NRl9DRkdfRTFIT1ZfVEFHX01BU0spOwotCQlpZiAodmFsICE9IEZVTkNfTUZfQ0ZHX0UxSE9WX1RBR19ERUZBVUxUKSB7Ci0KLQkJCWJwLT5lMWhvdiA9IHZhbDsKKwkJaWYgKHZhbCAhPSBGVU5DX01GX0NGR19FMUhPVl9UQUdfREVGQVVMVCkKIAkJCWJwLT5lMWhtZiA9IDE7Ci0JCQlCTlgyWF9ERVZfSU5GTygiTUYgbW9kZSAgRTFIT1YgZm9yIGZ1bmMgJWQgaXMgJWQgIgotCQkJCSAgICAgICAiKDB4JTA0eClcbiIsCi0JCQkJICAgICAgIGZ1bmMsIGJwLT5lMWhvdiwgYnAtPmUxaG92KTsKLQkJfSBlbHNlIHsKLQkJCUJOWDJYX0RFVl9JTkZPKCJzaW5nbGUgZnVuY3Rpb24gbW9kZVxuIik7Ci0JCQlpZiAoQlBfRTFIVk4oYnApKSB7CisJCUJOWDJYX0RFVl9JTkZPKCIlcyBmdW5jdGlvbiBtb2RlXG4iLAorCQkJICAgICAgIElTX0UxSE1GKGJwKSA/ICJtdWx0aSIgOiAic2luZ2xlIik7CisKKwkJaWYgKElTX0UxSE1GKGJwKSkgeworCQkJdmFsID0gKFNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbZnVuY10uCisJCQkJCQkJCWUxaG92X3RhZykgJgorCQkJICAgICAgIEZVTkNfTUZfQ0ZHX0UxSE9WX1RBR19NQVNLKTsKKwkJCWlmICh2YWwgIT0gRlVOQ19NRl9DRkdfRTFIT1ZfVEFHX0RFRkFVTFQpIHsKKwkJCQlicC0+ZTFob3YgPSB2YWw7CisJCQkJQk5YMlhfREVWX0lORk8oIkUxSE9WIGZvciBmdW5jICVkIGlzICVkICIKKwkJCQkJICAgICAgICIoMHglMDR4KVxuIiwKKwkJCQkJICAgICAgIGZ1bmMsIGJwLT5lMWhvdiwgYnAtPmUxaG92KTsKKwkJCX0gZWxzZSB7CiAJCQkJQk5YMlhfRVJSKCIhISEgIE5vIHZhbGlkIEUxSE9WIGZvciBmdW5jICVkLCIKIAkJCQkJICAiICBhYm9ydGluZ1xuIiwgZnVuYyk7CiAJCQkJcmMgPSAtRVBFUk07CiAJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoQlBfRTFIVk4oYnApKSB7CisJCQkJQk5YMlhfRVJSKCIhISEgIFZOICVkIGluIHNpbmdsZSBmdW5jdGlvbiBtb2RlLCIKKwkJCQkJICAiICBhYm9ydGluZ1xuIiwgQlBfRTFIVk4oYnApKTsKKwkJCQlyYyA9IC1FUEVSTTsKKwkJCX0KIAkJfQogCX0KIApAQCAtODE3MCw2ICs4Njg3LDcgQEAKIAogCS8qIERpc2FibGUgaW50ZXJydXB0IGhhbmRsaW5nIHVudGlsIEhXIGlzIGluaXRpYWxpemVkICovCiAJYXRvbWljX3NldCgmYnAtPmludHJfc2VtLCAxKTsKKwlzbXBfd21iKCk7IC8qIEVuc3VyZSB0aGF0IGJwLT5pbnRyX3NlbSB1cGRhdGUgaXMgU01QLXNhZmUgKi8KIAogCW11dGV4X2luaXQoJmJwLT5wb3J0LnBoeV9tdXRleCk7CiAKQEAgLTgyMDgsNiArODcyNiwxMSBAQAogCQlicC0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKIAl9CiAKKwlpZiAoQ0hJUF9JU19FMShicCkpCisJCWJwLT5kcm9wbGVzc19mYyA9IDA7CisJZWxzZQorCQlicC0+ZHJvcGxlc3NfZmMgPSBkcm9wbGVzc19mYzsKKwogCWJwLT5tcnJzID0gbXJyczsKIAogCWJwLT50eF9yaW5nX3NpemUgPSBNQVhfVFhfQVZBSUw7CkBAIC04MjY5LDYgKzg3OTIsNyBAQAogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CiAJCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCQkJYnJlYWs7CiAKQEAgLTgyOTAsNyArODgxNCw3IEBACiAJfSBlbHNlCiAJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CiAKLQljbWQtPnBoeV9hZGRyZXNzID0gYnAtPnBvcnQucGh5X2FkZHI7CisJY21kLT5waHlfYWRkcmVzcyA9IGJwLT5tZGlvLnBydGFkOwogCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwogCiAJaWYgKGJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykKQEAgLTg0NjMsNTAgKzg5ODcsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBQSFlfRldfVkVSX0xFTgkJCTEwCi0KLXN0YXRpYyB2b2lkIGJueDJ4X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXU4IHBoeV9md192ZXJbUEhZX0ZXX1ZFUl9MRU5dOwotCi0Jc3RyY3B5KGluZm8tPmRyaXZlciwgRFJWX01PRFVMRV9OQU1FKTsKLQlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX01PRFVMRV9WRVJTSU9OKTsKLQotCXBoeV9md192ZXJbMF0gPSAnXDAnOwotCWlmIChicC0+cG9ydC5wbWYpIHsKLQkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7Ci0JCWJueDJ4X2dldF9leHRfcGh5X2Z3X3ZlcnNpb24oJmJwLT5saW5rX3BhcmFtcywKLQkJCQkJICAgICAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX0NMT1NFRCksCi0JCQkJCSAgICAgcGh5X2Z3X3ZlciwgUEhZX0ZXX1ZFUl9MRU4pOwotCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKLQl9Ci0KLQlzbnByaW50ZihpbmZvLT5md192ZXJzaW9uLCAzMiwgIkJDOiVkLiVkLiVkJXMlcyIsCi0JCSAoYnAtPmNvbW1vbi5iY192ZXIgJiAweGZmMDAwMCkgPj4gMTYsCi0JCSAoYnAtPmNvbW1vbi5iY192ZXIgJiAweGZmMDApID4+IDgsCi0JCSAoYnAtPmNvbW1vbi5iY192ZXIgJiAweGZmKSwKLQkJICgocGh5X2Z3X3ZlclswXSAhPSAnXDAnKSA/ICIgUEhZOiIgOiAiIiksIHBoeV9md192ZXIpOwotCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYnAtPnBkZXYpKTsKLQlpbmZvLT5uX3N0YXRzID0gQk5YMlhfTlVNX1NUQVRTOwotCWluZm8tPnRlc3RpbmZvX2xlbiA9IEJOWDJYX05VTV9URVNUUzsKLQlpbmZvLT5lZWR1bXBfbGVuID0gYnAtPmNvbW1vbi5mbGFzaF9zaXplOwotCWluZm8tPnJlZ2R1bXBfbGVuID0gMDsKLX0KLQogI2RlZmluZSBJU19FMV9PTkxJTkUoaW5mbykJKCgoaW5mbykgJiBSSV9FMV9PTkxJTkUpID09IFJJX0UxX09OTElORSkKICNkZWZpbmUgSVNfRTFIX09OTElORShpbmZvKQkoKChpbmZvKSAmIFJJX0UxSF9PTkxJTkUpID09IFJJX0UxSF9PTkxJTkUpCiAKIHN0YXRpYyBpbnQgYm54MnhfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RhdGljIHUzMiByZWdkdW1wX2xlbjsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmVnZHVtcF9sZW4gPSAwOwogCWludCBpOwogCi0JaWYgKHJlZ2R1bXBfbGVuKQotCQlyZXR1cm4gcmVnZHVtcF9sZW47Ci0KIAlpZiAoQ0hJUF9JU19FMShicCkpIHsKIAkJZm9yIChpID0gMDsgaSA8IFJFR1NfQ09VTlQ7IGkrKykKIAkJCWlmIChJU19FMV9PTkxJTkUocmVnX2FkZHJzW2ldLmluZm8pKQpAQCAtODU3Myw2ICs5MDYyLDM4IEBACiAJfQogfQogCisjZGVmaW5lIFBIWV9GV19WRVJfTEVOCQkJMTAKKworc3RhdGljIHZvaWQgYm54MnhfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisJdTggcGh5X2Z3X3ZlcltQSFlfRldfVkVSX0xFTl07CisKKwlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTU9EVUxFX05BTUUpOworCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfTU9EVUxFX1ZFUlNJT04pOworCisJcGh5X2Z3X3ZlclswXSA9ICdcMCc7CisJaWYgKGJwLT5wb3J0LnBtZikgeworCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKKwkJYm54MnhfZ2V0X2V4dF9waHlfZndfdmVyc2lvbigmYnAtPmxpbmtfcGFyYW1zLAorCQkJCQkgICAgIChicC0+c3RhdGUgIT0gQk5YMlhfU1RBVEVfQ0xPU0VEKSwKKwkJCQkJICAgICBwaHlfZndfdmVyLCBQSFlfRldfVkVSX0xFTik7CisJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworCX0KKworCXNucHJpbnRmKGluZm8tPmZ3X3ZlcnNpb24sIDMyLCAiQkM6JWQuJWQuJWQlcyVzIiwKKwkJIChicC0+Y29tbW9uLmJjX3ZlciAmIDB4ZmYwMDAwKSA+PiAxNiwKKwkJIChicC0+Y29tbW9uLmJjX3ZlciAmIDB4ZmYwMCkgPj4gOCwKKwkJIChicC0+Y29tbW9uLmJjX3ZlciAmIDB4ZmYpLAorCQkgKChwaHlfZndfdmVyWzBdICE9ICdcMCcpID8gIiBQSFk6IiA6ICIiKSwgcGh5X2Z3X3Zlcik7CisJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShicC0+cGRldikpOworCWluZm8tPm5fc3RhdHMgPSBCTlgyWF9OVU1fU1RBVFM7CisJaW5mby0+dGVzdGluZm9fbGVuID0gQk5YMlhfTlVNX1RFU1RTOworCWluZm8tPmVlZHVtcF9sZW4gPSBicC0+Y29tbW9uLmZsYXNoX3NpemU7CisJaW5mby0+cmVnZHVtcF9sZW4gPSBibngyeF9nZXRfcmVnc19sZW4oZGV2KTsKK30KKwogc3RhdGljIHZvaWQgYm54MnhfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CkBAIC04NjM4LDggKzkxNTksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyCi1ibngyeF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHUzMiBibngyeF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC05MDEzLDcgKzk1MzMsOCBAQAogCQkJICAgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZWVidWYpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHJjOworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IHJjID0gMDsKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTkwMjUsMjcgKzk1NDYsNjAgQEAKIAogCS8qIHBhcmFtZXRlcnMgYWxyZWFkeSB2YWxpZGF0ZWQgaW4gZXRodG9vbF9zZXRfZWVwcm9tICovCiAKLQkvKiBJZiB0aGUgbWFnaWMgbnVtYmVyIGlzIFBIWSAoMHgwMDUwNDg1OSkgdXBncmFkZSB0aGUgUEhZIEZXICovCi0JaWYgKGVlcHJvbS0+bWFnaWMgPT0gMHgwMDUwNDg1OSkKLQkJaWYgKGJwLT5wb3J0LnBtZikgeworCS8qIFBIWSBlZXByb20gY2FuIGJlIGFjY2Vzc2VkIG9ubHkgYnkgdGhlIFBNRiAqLworCWlmICgoZWVwcm9tLT5tYWdpYyA+PSAweDUwNDg1OTAwKSAmJiAoZWVwcm9tLT5tYWdpYyA8PSAweDUwNDg1OUZGKSAmJgorCSAgICAhYnAtPnBvcnQucG1mKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChlZXByb20tPm1hZ2ljID09IDB4NTA0ODU5NTApIHsKKwkJLyogJ1BIWVAnICgweDUwNDg1OTUwKTogcHJlcGFyZSBwaHkgZm9yIEZXIHVwZ3JhZGUgKi8KKwkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9TVE9QKTsKKworCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKKwkJcmMgfD0gYm54MnhfbGlua19yZXNldCgmYnAtPmxpbmtfcGFyYW1zLAorCQkJCSAgICAgICAmYnAtPmxpbmtfdmFycywgMCk7CisJCWlmIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpID09CisJCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEpCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18wLAorCQkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsIHBvcnQpOworCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKKwkJYm54MnhfbGlua19yZXBvcnQoYnApOworCisJfSBlbHNlIGlmIChlZXByb20tPm1hZ2ljID09IDB4NTA0ODU5NTIpIHsKKwkJLyogJ1BIWVInICgweDUwNDg1OTUyKTogcmUtaW5pdCBsaW5rIGFmdGVyIEZXIHVwZ3JhZGUgKi8KKwkJaWYgKChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikgfHwKKwkJICAgIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfRElTQUJMRUQpKSB7CisJCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKKwkJCXJjIHw9IGJueDJ4X2xpbmtfcmVzZXQoJmJwLT5saW5rX3BhcmFtcywKKwkJCQkJICAgICAgICZicC0+bGlua192YXJzLCAxKTsKKworCQkJcmMgfD0gYm54MnhfcGh5X2luaXQoJmJwLT5saW5rX3BhcmFtcywKKwkJCQkJICAgICAmYnAtPmxpbmtfdmFycyk7CisJCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKKwkJCWJueDJ4X2NhbGNfZmNfYWR2KGJwKTsKKwkJfQorCX0gZWxzZSBpZiAoZWVwcm9tLT5tYWdpYyA9PSAweDUzOTg1OTQzKSB7CisJCS8qICdQSFlDJyAoMHg1Mzk4NTk0Myk6IFBIWSBGVyB1cGdyYWRlIGNvbXBsZXRlZCAqLworCQlpZiAoWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKSA9PQorCQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxKSB7CisJCQl1OCBleHRfcGh5X2FkZHIgPQorCQkJICAgICBYR1hTX0VYVF9QSFlfQUREUihicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOworCisJCQkvKiBEU1AgUmVtb3ZlIERvd25sb2FkIE1vZGUgKi8KKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCisJCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fTE9XLCBwb3J0KTsKIAogCQkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7Ci0JCQlyYyA9IGJueDJ4X2ZsYXNoX2Rvd25sb2FkKGJwLCBCUF9QT1JUKGJwKSwKLQkJCQkJICAgICBicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcsCi0JCQkJCSAgICAgKGJwLT5zdGF0ZSAhPSBCTlgyWF9TVEFURV9DTE9TRUQpLAotCQkJCQkgICAgIGVlYnVmLCBlZXByb20tPmxlbik7Ci0JCQlpZiAoKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKSB8fAotCQkJICAgIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfRElTQUJMRUQpKSB7Ci0JCQkJcmMgfD0gYm54MnhfbGlua19yZXNldCgmYnAtPmxpbmtfcGFyYW1zLAotCQkJCQkJICAgICAgICZicC0+bGlua192YXJzLCAxKTsKLQkJCQlyYyB8PSBibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLAotCQkJCQkJICAgICAmYnAtPmxpbmtfdmFycyk7Ci0JCQl9Ci0JCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKIAotCQl9IGVsc2UgLyogT25seSB0aGUgUE1GIGNhbiBhY2Nlc3MgdGhlIFBIWSAqLwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZQorCQkJYm54Mnhfc2Z4NzEwMV9zcF9zd19yZXNldChicCwgcG9ydCwgZXh0X3BoeV9hZGRyKTsKKworCQkJLyogd2FpdCAwLjUgc2VjIHRvIGFsbG93IGl0IHRvIHJ1biAqLworCQkJbXNsZWVwKDUwMCk7CisJCQlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCBwb3J0KTsKKwkJCW1zbGVlcCg1MDApOworCQkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CisJCX0KKwl9IGVsc2UKIAkJcmMgPSBibngyeF9udnJhbV93cml0ZShicCwgZWVwcm9tLT5vZmZzZXQsIGVlYnVmLCBlZXByb20tPmxlbik7CiAKIAlyZXR1cm4gcmM7CkBAIC05MDY0LDE4ICs5NjE4LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgQk5YMlhfTUFYX0NPQUxFU19UT1VUICAoMHhmMCoxMikgLyogTWF4aW1hbCBjb2FsZXNjaW5nIHRpbWVvdXQgaW4gdXMgKi8KIHN0YXRpYyBpbnQgYm54Mnhfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbCkKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWJwLT5yeF90aWNrcyA9ICh1MTYpIGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzOwotCWlmIChicC0+cnhfdGlja3MgPiBCTlgyWF9NQVhfQ09BTEVTQ0VfVE9VVCkKLQkJYnAtPnJ4X3RpY2tzID0gQk5YMlhfTUFYX0NPQUxFU0NFX1RPVVQ7CisJaWYgKGJwLT5yeF90aWNrcyA+IEJOWDJYX01BWF9DT0FMRVNfVE9VVCkKKwkJYnAtPnJ4X3RpY2tzID0gQk5YMlhfTUFYX0NPQUxFU19UT1VUOwogCiAJYnAtPnR4X3RpY2tzID0gKHUxNikgY29hbC0+dHhfY29hbGVzY2VfdXNlY3M7Ci0JaWYgKGJwLT50eF90aWNrcyA+IEJOWDJYX01BWF9DT0FMRVNDRV9UT1VUKQotCQlicC0+dHhfdGlja3MgPSBCTlgyWF9NQVhfQ09BTEVTQ0VfVE9VVDsKKwlpZiAoYnAtPnR4X3RpY2tzID4gQk5YMlhfTUFYX0NPQUxFU19UT1VUKQorCQlicC0+dHhfdGlja3MgPSBCTlgyWF9NQVhfQ09BTEVTX1RPVVQ7CiAKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKQogCQlibngyeF91cGRhdGVfY29hbGVzY2UoYnApOwpAQCAtOTI5NiwxMCArOTg1MSw5IEBACiAJCXsgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDAsIDQsIDB4MDAwMDAwMDEgfSwKIAkJeyBYQ01fUkVHX1dVX0RBX0NOVF9DTUQwMCwgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMyB9LAogCQl7IFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8wLCAgICAgICA0LCAweDAwMDAwMGZmIH0sCi0JCXsgTklHX1JFR19FR1JFU1NfTU5HMF9GSUZPLCAgICAgICAgICAgMjAsIDB4ZmZmZmZmZmYgfSwKIAkJeyBOSUdfUkVHX0xMSDBfVF9CSVQsICAgICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAotLyogMjAgKi8JeyBOSUdfUkVHX0VNQUMwX0lOX0VOLCAgICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAotCQl7IE5JR19SRUdfQk1BQzBfSU5fRU4sICAgICAgICAgICAgICAgICA0LCAweDAwMDAwMDAxIH0sCisJCXsgTklHX1JFR19FTUFDMF9JTl9FTiwgICAgICAgICAgICAgICAgIDQsIDB4MDAwMDAwMDEgfSwKKy8qIDIwICovCXsgTklHX1JFR19CTUFDMF9JTl9FTiwgICAgICAgICAgICAgICAgIDQsIDB4MDAwMDAwMDEgfSwKIAkJeyBOSUdfUkVHX1hDTTBfT1VUX0VOLCAgICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAogCQl7IE5JR19SRUdfQlJCMF9PVVRfRU4sICAgICAgICAgICAgICAgICA0LCAweDAwMDAwMDAxIH0sCiAJCXsgTklHX1JFR19MTEgwX1hDTV9NQVNLLCAgICAgICAgICAgICAgIDQsIDB4MDAwMDAwMDcgfSwKQEAgLTkzMDgsOCArOTg2Miw4IEBACiAJCXsgTklHX1JFR19MTEgwX0RFU1RfTUFDXzBfMCwgICAgICAgICAxNjAsIDB4ZmZmZmZmZmYgfSwKIAkJeyBOSUdfUkVHX0xMSDBfREVTVF9JUF8wXzEsICAgICAgICAgIDE2MCwgMHhmZmZmZmZmZiB9LAogCQl7IE5JR19SRUdfTExIMF9JUFY0X0lQVjZfMCwgICAgICAgICAgMTYwLCAweDAwMDAwMDAxIH0sCi0vKiAzMCAqLwl7IE5JR19SRUdfTExIMF9ERVNUX1VEUF8wLCAgICAgICAgICAgMTYwLCAweDAwMDBmZmZmIH0sCi0JCXsgTklHX1JFR19MTEgwX0RFU1RfVENQXzAsICAgICAgICAgICAxNjAsIDB4MDAwMGZmZmYgfSwKKwkJeyBOSUdfUkVHX0xMSDBfREVTVF9VRFBfMCwgICAgICAgICAgIDE2MCwgMHgwMDAwZmZmZiB9LAorLyogMzAgKi8JeyBOSUdfUkVHX0xMSDBfREVTVF9UQ1BfMCwgICAgICAgICAgIDE2MCwgMHgwMDAwZmZmZiB9LAogCQl7IE5JR19SRUdfTExIMF9WTEFOX0lEXzAsICAgICAgICAgICAgMTYwLCAweDAwMDAwZmZmIH0sCiAJCXsgTklHX1JFR19YR1hTX1NFUkRFUzBfTU9ERV9TRUwsICAgICAgIDQsIDB4MDAwMDAwMDEgfSwKIAkJeyBOSUdfUkVHX0xFRF9DT05UUk9MX09WRVJSSURFX1RSQUZGSUNfUDAsIDQsIDB4MDAwMDAwMDEgfSwKQEAgLTk0MzUsMTIgKzk5ODksMTQgQEAKIAl1bnNpZ25lZCBpbnQgcGt0X3NpemUsIG51bV9wa3RzLCBpOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgY2hhciAqcGFja2V0OwotCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwWzBdOworCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnBfcnggPSAmYnAtPmZwWzBdOworCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnBfdHggPSAmYnAtPmZwW2JwLT5udW1fcnhfcXVldWVzXTsKIAl1MTYgdHhfc3RhcnRfaWR4LCB0eF9pZHg7CiAJdTE2IHJ4X3N0YXJ0X2lkeCwgcnhfaWR4OwotCXUxNiBwa3RfcHJvZDsKKwl1MTYgcGt0X3Byb2QsIGJkX3Byb2Q7CiAJc3RydWN0IHN3X3R4X2JkICp0eF9idWY7Ci0Jc3RydWN0IGV0aF90eF9iZCAqdHhfYmQ7CisJc3RydWN0IGV0aF90eF9zdGFydF9iZCAqdHhfc3RhcnRfYmQ7CisJc3RydWN0IGV0aF90eF9wYXJzZV9iZCAqcGJkID0gTlVMTDsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CiAJdW5pb24gZXRoX3J4X2NxZSAqY3FlOwogCXU4IGNxZV9mcF9mbGFnczsKQEAgLTk0NzIsNTcgKzEwMDI4LDY0IEBACiAJfQogCXBhY2tldCA9IHNrYl9wdXQoc2tiLCBwa3Rfc2l6ZSk7CiAJbWVtY3B5KHBhY2tldCwgYnAtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1zZXQocGFja2V0ICsgRVRIX0FMRU4sIDAsIChFVEhfSExFTiAtIEVUSF9BTEVOKSk7CisJbWVtc2V0KHBhY2tldCArIEVUSF9BTEVOLCAwLCBFVEhfQUxFTik7CisJbWVtc2V0KHBhY2tldCArIDIqRVRIX0FMRU4sIDB4NzcsIChFVEhfSExFTiAtIDIqRVRIX0FMRU4pKTsKIAlmb3IgKGkgPSBFVEhfSExFTjsgaSA8IHBrdF9zaXplOyBpKyspCiAJCXBhY2tldFtpXSA9ICh1bnNpZ25lZCBjaGFyKSAoaSAmIDB4ZmYpOwogCiAJLyogc2VuZCB0aGUgbG9vcGJhY2sgcGFja2V0ICovCiAJbnVtX3BrdHMgPSAwOwotCXR4X3N0YXJ0X2lkeCA9IGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYik7Ci0Jcnhfc3RhcnRfaWR4ID0gbGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKTsKKwl0eF9zdGFydF9pZHggPSBsZTE2X3RvX2NwdSgqZnBfdHgtPnR4X2NvbnNfc2IpOworCXJ4X3N0YXJ0X2lkeCA9IGxlMTZfdG9fY3B1KCpmcF9yeC0+cnhfY29uc19zYik7CiAKLQlwa3RfcHJvZCA9IGZwLT50eF9wa3RfcHJvZCsrOwotCXR4X2J1ZiA9ICZmcC0+dHhfYnVmX3JpbmdbVFhfQkQocGt0X3Byb2QpXTsKLQl0eF9idWYtPmZpcnN0X2JkID0gZnAtPnR4X2JkX3Byb2Q7CisJcGt0X3Byb2QgPSBmcF90eC0+dHhfcGt0X3Byb2QrKzsKKwl0eF9idWYgPSAmZnBfdHgtPnR4X2J1Zl9yaW5nW1RYX0JEKHBrdF9wcm9kKV07CisJdHhfYnVmLT5maXJzdF9iZCA9IGZwX3R4LT50eF9iZF9wcm9kOwogCXR4X2J1Zi0+c2tiID0gc2tiOworCXR4X2J1Zi0+ZmxhZ3MgPSAwOwogCi0JdHhfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tUWF9CRChmcC0+dHhfYmRfcHJvZCldOworCWJkX3Byb2QgPSBUWF9CRChmcF90eC0+dHhfYmRfcHJvZCk7CisJdHhfc3RhcnRfYmQgPSAmZnBfdHgtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5zdGFydF9iZDsKIAltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUoYnAtPnBkZXYsIHNrYi0+ZGF0YSwKIAkJCQkgc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7Ci0JdHhfYmQtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihVNjRfSEkobWFwcGluZykpOwotCXR4X2JkLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIoVTY0X0xPKG1hcHBpbmcpKTsKLQl0eF9iZC0+bmJkID0gY3B1X3RvX2xlMTYoMSk7Ci0JdHhfYmQtPm5ieXRlcyA9IGNwdV90b19sZTE2KHNrYl9oZWFkbGVuKHNrYikpOwotCXR4X2JkLT52bGFuID0gY3B1X3RvX2xlMTYocGt0X3Byb2QpOwotCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCA9IChFVEhfVFhfQkRfRkxBR1NfU1RBUlRfQkQgfAotCQkJCSAgICAgICBFVEhfVFhfQkRfRkxBR1NfRU5EX0JEKTsKLQl0eF9iZC0+Z2VuZXJhbF9kYXRhID0gKChVTklDQVNUX0FERFJFU1MgPDwKLQkJCQlFVEhfVFhfQkRfRVRIX0FERFJfVFlQRV9TSElGVCkgfCAxKTsKKwl0eF9zdGFydF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7CisJdHhfc3RhcnRfYmQtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykpOworCXR4X3N0YXJ0X2JkLT5uYmQgPSBjcHVfdG9fbGUxNigyKTsgLyogc3RhcnQgKyBwYmQgKi8KKwl0eF9zdGFydF9iZC0+bmJ5dGVzID0gY3B1X3RvX2xlMTYoc2tiX2hlYWRsZW4oc2tiKSk7CisJdHhfc3RhcnRfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNihwa3RfcHJvZCk7CisJdHhfc3RhcnRfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkID0gRVRIX1RYX0JEX0ZMQUdTX1NUQVJUX0JEOworCXR4X3N0YXJ0X2JkLT5nZW5lcmFsX2RhdGEgPSAoKFVOSUNBU1RfQUREUkVTUyA8PAorCQkJCUVUSF9UWF9TVEFSVF9CRF9FVEhfQUREUl9UWVBFX1NISUZUKSB8IDEpOworCisJLyogdHVybiBvbiBwYXJzaW5nIGFuZCBnZXQgYSBCRCAqLworCWJkX3Byb2QgPSBUWF9CRChORVhUX1RYX0lEWChiZF9wcm9kKSk7CisJcGJkID0gJmZwX3R4LT50eF9kZXNjX3JpbmdbYmRfcHJvZF0ucGFyc2VfYmQ7CisKKwltZW1zZXQocGJkLCAwLCBzaXplb2Yoc3RydWN0IGV0aF90eF9wYXJzZV9iZCkpOwogCiAJd21iKCk7CiAKLQlsZTE2X2FkZF9jcHUoJmZwLT5od190eF9wcm9kcy0+YmRzX3Byb2QsIDEpOwotCW1iKCk7IC8qIEZXIHJlc3RyaWN0aW9uOiBtdXN0IG5vdCByZW9yZGVyIHdyaXRpbmcgbmJkIGFuZCBwYWNrZXRzICovCi0JbGUzMl9hZGRfY3B1KCZmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCwgMSk7Ci0JRE9PUkJFTEwoYnAsIGZwLT5pbmRleCwgMCk7CisJZnBfdHgtPnR4X2RiLmRhdGEucHJvZCArPSAyOworCWJhcnJpZXIoKTsKKwlET09SQkVMTChicCwgZnBfdHgtPmluZGV4IC0gYnAtPm51bV9yeF9xdWV1ZXMsIGZwX3R4LT50eF9kYi5yYXcpOwogCiAJbW1pb3diKCk7CiAKIAludW1fcGt0cysrOwotCWZwLT50eF9iZF9wcm9kKys7CisJZnBfdHgtPnR4X2JkX3Byb2QgKz0gMjsgLyogc3RhcnQgKyBwYmQgKi8KIAlicC0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAl1ZGVsYXkoMTAwKTsKIAotCXR4X2lkeCA9IGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYik7CisJdHhfaWR4ID0gbGUxNl90b19jcHUoKmZwX3R4LT50eF9jb25zX3NiKTsKIAlpZiAodHhfaWR4ICE9IHR4X3N0YXJ0X2lkeCArIG51bV9wa3RzKQogCQlnb3RvIHRlc3RfbG9vcGJhY2tfZXhpdDsKIAotCXJ4X2lkeCA9IGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYik7CisJcnhfaWR4ID0gbGUxNl90b19jcHUoKmZwX3J4LT5yeF9jb25zX3NiKTsKIAlpZiAocnhfaWR4ICE9IHJ4X3N0YXJ0X2lkeCArIG51bV9wa3RzKQogCQlnb3RvIHRlc3RfbG9vcGJhY2tfZXhpdDsKIAotCWNxZSA9ICZmcC0+cnhfY29tcF9yaW5nW1JDUV9CRChmcC0+cnhfY29tcF9jb25zKV07CisJY3FlID0gJmZwX3J4LT5yeF9jb21wX3JpbmdbUkNRX0JEKGZwX3J4LT5yeF9jb21wX2NvbnMpXTsKIAljcWVfZnBfZmxhZ3MgPSBjcWUtPmZhc3RfcGF0aF9jcWUudHlwZV9lcnJvcl9mbGFnczsKIAlpZiAoQ1FFX1RZUEUoY3FlX2ZwX2ZsYWdzKSB8fCAoY3FlX2ZwX2ZsYWdzICYgRVRIX1JYX0VSUk9SX0ZBTEdTKSkKIAkJZ290byB0ZXN0X2xvb3BiYWNrX3J4X2V4aXQ7CkBAIC05NTMxLDcgKzEwMDk0LDcgQEAKIAlpZiAobGVuICE9IHBrdF9zaXplKQogCQlnb3RvIHRlc3RfbG9vcGJhY2tfcnhfZXhpdDsKIAotCXJ4X2J1ZiA9ICZmcC0+cnhfYnVmX3JpbmdbUlhfQkQoZnAtPnJ4X2JkX2NvbnMpXTsKKwlyeF9idWYgPSAmZnBfcngtPnJ4X2J1Zl9yaW5nW1JYX0JEKGZwX3J4LT5yeF9iZF9jb25zKV07CiAJc2tiID0gcnhfYnVmLT5za2I7CiAJc2tiX3Jlc2VydmUoc2tiLCBjcWUtPmZhc3RfcGF0aF9jcWUucGxhY2VtZW50X29mZnNldCk7CiAJZm9yIChpID0gRVRIX0hMRU47IGkgPCBwa3Rfc2l6ZTsgaSsrKQpAQCAtOTU0MiwxNCArMTAxMDUsMTQgQEAKIAogdGVzdF9sb29wYmFja19yeF9leGl0OgogCi0JZnAtPnJ4X2JkX2NvbnMgPSBORVhUX1JYX0lEWChmcC0+cnhfYmRfY29ucyk7Ci0JZnAtPnJ4X2JkX3Byb2QgPSBORVhUX1JYX0lEWChmcC0+cnhfYmRfcHJvZCk7Ci0JZnAtPnJ4X2NvbXBfY29ucyA9IE5FWFRfUkNRX0lEWChmcC0+cnhfY29tcF9jb25zKTsKLQlmcC0+cnhfY29tcF9wcm9kID0gTkVYVF9SQ1FfSURYKGZwLT5yeF9jb21wX3Byb2QpOworCWZwX3J4LT5yeF9iZF9jb25zID0gTkVYVF9SWF9JRFgoZnBfcngtPnJ4X2JkX2NvbnMpOworCWZwX3J4LT5yeF9iZF9wcm9kID0gTkVYVF9SWF9JRFgoZnBfcngtPnJ4X2JkX3Byb2QpOworCWZwX3J4LT5yeF9jb21wX2NvbnMgPSBORVhUX1JDUV9JRFgoZnBfcngtPnJ4X2NvbXBfY29ucyk7CisJZnBfcngtPnJ4X2NvbXBfcHJvZCA9IE5FWFRfUkNRX0lEWChmcF9yeC0+cnhfY29tcF9wcm9kKTsKIAogCS8qIFVwZGF0ZSBwcm9kdWNlcnMgKi8KLQlibngyeF91cGRhdGVfcnhfcHJvZChicCwgZnAsIGZwLT5yeF9iZF9wcm9kLCBmcC0+cnhfY29tcF9wcm9kLAotCQkJICAgICBmcC0+cnhfc2dlX3Byb2QpOworCWJueDJ4X3VwZGF0ZV9yeF9wcm9kKGJwLCBmcF9yeCwgZnBfcngtPnJ4X2JkX3Byb2QsIGZwX3J4LT5yeF9jb21wX3Byb2QsCisJCQkgICAgIGZwX3J4LT5yeF9zZ2VfcHJvZCk7CiAKIHRlc3RfbG9vcGJhY2tfZXhpdDoKIAlicC0+bGlua19wYXJhbXMubG9vcGJhY2tfbW9kZSA9IExPT1BCQUNLX05PTkU7CkBAIC05NjA2LDcgKzEwMTY5LDcgQEAKIAlfX2JlMzIgYnVmWzB4MzUwIC8gNF07CiAJdTggKmRhdGEgPSAodTggKilidWY7CiAJaW50IGksIHJjOwotCXUzMiBtYWdpYywgY3N1bTsKKwl1MzIgbWFnaWMsIGNyYzsKIAogCXJjID0gYm54MnhfbnZyYW1fcmVhZChicCwgMCwgZGF0YSwgNCk7CiAJaWYgKHJjKSB7CkBAIC05NjMxLDEwICsxMDE5NCwxMCBAQAogCQkJZ290byB0ZXN0X252cmFtX2V4aXQ7CiAJCX0KIAotCQljc3VtID0gZXRoZXJfY3JjX2xlKG52cmFtX3RibFtpXS5zaXplLCBkYXRhKTsKLQkJaWYgKGNzdW0gIT0gQ1JDMzJfUkVTSURVQUwpIHsKKwkJY3JjID0gZXRoZXJfY3JjX2xlKG52cmFtX3RibFtpXS5zaXplLCBkYXRhKTsKKwkJaWYgKGNyYyAhPSBDUkMzMl9SRVNJRFVBTCkgewogCQkJRFAoTkVUSUZfTVNHX1BST0JFLAotCQkJICAgIm52cmFtX3RibFslZF0gY3N1bSB2YWx1ZSAoMHglMDh4KVxuIiwgaSwgY3N1bSk7CisJCQkgICAibnZyYW1fdGJsWyVkXSBjcmMgdmFsdWUgKDB4JTA4eClcbiIsIGksIGNyYyk7CiAJCQlyYyA9IC1FTk9ERVY7CiAJCQlnb3RvIHRlc3RfbnZyYW1fZXhpdDsKIAkJfQpAQCAtOTY5Miw4ICsxMDI1NSwxNSBAQAogCQlldGVzdC0+ZmxhZ3MgJj0gfkVUSF9URVNUX0ZMX09GRkxJTkU7CiAKIAlpZiAoZXRlc3QtPmZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgeworCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCQl1MzIgdmFsOwogCQl1OCBsaW5rX3VwOwogCisJCS8qIHNhdmUgY3VycmVudCB2YWx1ZSBvZiBpbnB1dCBlbmFibGUgZm9yIFRYIHBvcnQgSUYgKi8KKwkJdmFsID0gUkVHX1JEKGJwLCBOSUdfUkVHX0VHUkVTU19VTVAwX0lOX0VOICsgcG9ydCo0KTsKKwkJLyogZGlzYWJsZSBpbnB1dCBmb3IgVFggcG9ydCBJRiAqLworCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX1VNUDBfSU5fRU4gKyBwb3J0KjQsIDApOworCiAJCWxpbmtfdXAgPSBicC0+bGlua192YXJzLmxpbmtfdXA7CiAJCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9OT1JNQUwpOwogCQlibngyeF9uaWNfbG9hZChicCwgTE9BRF9ESUFHKTsKQEAgLTk3MTMsNiArMTAyODMsMTAgQEAKIAkJCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAKIAkJYm54MnhfbmljX3VubG9hZChicCwgVU5MT0FEX05PUk1BTCk7CisKKwkJLyogcmVzdG9yZSBpbnB1dCBmb3IgVFggcG9ydCBJRiAqLworCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX1VNUDBfSU5fRU4gKyBwb3J0KjQsIHZhbCk7CisKIAkJYm54MnhfbmljX2xvYWQoYnAsIExPQURfTk9STUFMKTsKIAkJLyogd2FpdCB1bnRpbCBsaW5rIHN0YXRlIGlzIHJlc3RvcmVkICovCiAJCWJueDJ4X3dhaXRfZm9yX2xpbmsoYnAsIGxpbmtfdXApOwpAQCAtOTg3MSw3ICsxMDQ0NSw3IEBACiAJY2FzZSBFVEhfU1NfU1RBVFM6CiAJCWlmIChpc19tdWx0aShicCkpIHsKIAkJCWsgPSAwOwotCQkJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAJCQkJZm9yIChqID0gMDsgaiA8IEJOWDJYX05VTV9RX1NUQVRTOyBqKyspCiAJCQkJCXNwcmludGYoYnVmICsgKGsgKyBqKSpFVEhfR1NUUklOR19MRU4sCiAJCQkJCQlibngyeF9xX3N0YXRzX2FycltqXS5zdHJpbmcsIGkpOwpAQCAtOTkwNSw3ICsxMDQ3OSw3IEBACiAJaW50IGksIG51bV9zdGF0czsKIAogCWlmIChpc19tdWx0aShicCkpIHsKLQkJbnVtX3N0YXRzID0gQk5YMlhfTlVNX1FfU1RBVFMgKiBCTlgyWF9OVU1fUVVFVUVTKGJwKTsKKwkJbnVtX3N0YXRzID0gQk5YMlhfTlVNX1FfU1RBVFMgKiBicC0+bnVtX3J4X3F1ZXVlczsKIAkJaWYgKCFJU19FMUhNRl9NT0RFX1NUQVQoYnApKQogCQkJbnVtX3N0YXRzICs9IEJOWDJYX05VTV9TVEFUUzsKIAl9IGVsc2UgewpAQCAtOTkzMCw3ICsxMDUwNCw3IEBACiAKIAlpZiAoaXNfbXVsdGkoYnApKSB7CiAJCWsgPSAwOwotCQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgewogCQkJaHdfc3RhdHMgPSAodTMyICopJmJwLT5mcFtpXS5ldGhfcV9zdGF0czsKIAkJCWZvciAoaiA9IDA7IGogPCBCTlgyWF9OVU1fUV9TVEFUUzsgaisrKSB7CiAJCQkJaWYgKGJueDJ4X3Ffc3RhdHNfYXJyW2pdLnNpemUgPT0gMCkgewpAQCAtMTAwMzIsNyArMTA2MDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGJueDJ4X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibngyeF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCQk9IGJueDJ4X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IGJueDJ4X3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JCT0gYm54MnhfZ2V0X2RydmluZm8sCkBAIC0xMDE0MywxNSArMTA3MTcsMTEgQEAKIAkJZ290byBwb2xsX3BhbmljOwogI2VuZGlmCiAKLQlwcmVmZXRjaChmcC0+dHhfYnVmX3JpbmdbVFhfQkQoZnAtPnR4X3BrdF9jb25zKV0uc2tiKTsKIAlwcmVmZXRjaChmcC0+cnhfYnVmX3JpbmdbUlhfQkQoZnAtPnJ4X2JkX2NvbnMpXS5za2IpOwogCXByZWZldGNoKChjaGFyICopKGZwLT5yeF9idWZfcmluZ1tSWF9CRChmcC0+cnhfYmRfY29ucyldLnNrYikgKyAyNTYpOwogCiAJYm54MnhfdXBkYXRlX2Zwc2JfaWR4KGZwKTsKIAotCWlmIChibngyeF9oYXNfdHhfd29yayhmcCkpCi0JCWJueDJ4X3R4X2ludChmcCk7Ci0KIAlpZiAoYm54MnhfaGFzX3J4X3dvcmsoZnApKSB7CiAJCXdvcmtfZG9uZSA9IGJueDJ4X3J4X2ludChmcCwgYnVkZ2V0KTsKIApAQCAtMTAxNjAsMTEgKzEwNzMwLDExIEBACiAJCQlnb3RvIHBvbGxfYWdhaW47CiAJfQogCi0JLyogQk5YMlhfSEFTX1dPUksoKSByZWFkcyB0aGUgc3RhdHVzIGJsb2NrLCB0aHVzIHdlIG5lZWQgdG8KKwkvKiBibngyeF9oYXNfcnhfd29yaygpIHJlYWRzIHRoZSBzdGF0dXMgYmxvY2ssIHRodXMgd2UgbmVlZCB0bwogCSAqIGVuc3VyZSB0aGF0IHN0YXR1cyBibG9jayBpbmRpY2VzIGhhdmUgYmVlbiBhY3R1YWxseSByZWFkCi0JICogKGJueDJ4X3VwZGF0ZV9mcHNiX2lkeCkgcHJpb3IgdG8gdGhpcyBjaGVjayAoQk5YMlhfSEFTX1dPUkspCisJICogKGJueDJ4X3VwZGF0ZV9mcHNiX2lkeCkgcHJpb3IgdG8gdGhpcyBjaGVjayAoYm54MnhfaGFzX3J4X3dvcmspCiAJICogc28gdGhhdCB3ZSB3b24ndCB3cml0ZSB0aGUgIm5ld2VyIiB2YWx1ZSBvZiB0aGUgc3RhdHVzIGJsb2NrIHRvIElHVQotCSAqIChpZiB0aGVyZSB3YXMgYSBETUEgcmlnaHQgYWZ0ZXIgQk5YMlhfSEFTX1dPUksgYW5kCisJICogKGlmIHRoZXJlIHdhcyBhIERNQSByaWdodCBhZnRlciBibngyeF9oYXNfcnhfd29yayBhbmQKIAkgKiBpZiB0aGVyZSBpcyBubyBybWIsIHRoZSBtZW1vcnkgcmVhZGluZyAoYm54MnhfdXBkYXRlX2Zwc2JfaWR4KQogCSAqIG1heSBiZSBwb3N0cG9uZWQgdG8gcmlnaHQgYmVmb3JlIGJueDJ4X2Fja19zYikuIEluIHRoaXMgY2FzZQogCSAqIHRoZXJlIHdpbGwgbmV2ZXIgYmUgYW5vdGhlciBpbnRlcnJ1cHQgdW50aWwgdGhlcmUgaXMgYW5vdGhlciB1cGRhdGUKQEAgLTEwMTcyLDcgKzEwNzQyLDcgQEAKIAkgKi8KIAlybWIoKTsKIAotCWlmICghQk5YMlhfSEFTX1dPUksoZnApKSB7CisJaWYgKCFibngyeF9oYXNfcnhfd29yayhmcCkpIHsKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCiBwb2xsX3BhbmljOgogI2VuZGlmCkBAIC0xMDE5NywxMCArMTA3NjcsMTEgQEAKICAqLwogc3RhdGljIG5vaW5saW5lIHUxNiBibngyeF90eF9zcGxpdChzdHJ1Y3QgYm54MnggKmJwLAogCQkJCSAgIHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCi0JCQkJICAgc3RydWN0IGV0aF90eF9iZCAqKnR4X2JkLCB1MTYgaGxlbiwKKwkJCQkgICBzdHJ1Y3Qgc3dfdHhfYmQgKnR4X2J1ZiwKKwkJCQkgICBzdHJ1Y3QgZXRoX3R4X3N0YXJ0X2JkICoqdHhfYmQsIHUxNiBobGVuLAogCQkJCSAgIHUxNiBiZF9wcm9kLCBpbnQgbmJkKQogewotCXN0cnVjdCBldGhfdHhfYmQgKmhfdHhfYmQgPSAqdHhfYmQ7CisJc3RydWN0IGV0aF90eF9zdGFydF9iZCAqaF90eF9iZCA9ICp0eF9iZDsKIAlzdHJ1Y3QgZXRoX3R4X2JkICpkX3R4X2JkOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKIAlpbnQgb2xkX2xlbiA9IGxlMTZfdG9fY3B1KGhfdHhfYmQtPm5ieXRlcyk7CkBAIC0xMDIxNiw3ICsxMDc4Nyw3IEBACiAJLyogbm93IGdldCBhIG5ldyBkYXRhIEJECiAJICogKGFmdGVyIHRoZSBwYmQpIGFuZCBmaWxsIGl0ICovCiAJYmRfcHJvZCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX3Byb2QpKTsKLQlkX3R4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfcHJvZF07CisJZF90eF9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX3Byb2RdLnJlZ19iZDsKIAogCW1hcHBpbmcgPSBISUxPX1U2NChsZTMyX3RvX2NwdShoX3R4X2JkLT5hZGRyX2hpKSwKIAkJCSAgIGxlMzJfdG9fY3B1KGhfdHhfYmQtPmFkZHJfbG8pKSArIGhsZW47CkBAIC0xMDIyNCwxNyArMTA3OTUsMTYgQEAKIAlkX3R4X2JkLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoVTY0X0hJKG1hcHBpbmcpKTsKIAlkX3R4X2JkLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIoVTY0X0xPKG1hcHBpbmcpKTsKIAlkX3R4X2JkLT5uYnl0ZXMgPSBjcHVfdG9fbGUxNihvbGRfbGVuIC0gaGxlbik7Ci0JZF90eF9iZC0+dmxhbiA9IDA7Ci0JLyogdGhpcyBtYXJrcyB0aGUgQkQgYXMgb25lIHRoYXQgaGFzIG5vIGluZGl2aWR1YWwgbWFwcGluZwotCSAqIHRoZSBGVyBpZ25vcmVzIHRoaXMgZmxhZyBpbiBhIEJEIG5vdCBtYXJrZWQgc3RhcnQKLQkgKi8KLQlkX3R4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCA9IEVUSF9UWF9CRF9GTEFHU19TV19MU087CisKKwkvKiB0aGlzIG1hcmtzIHRoZSBCRCBhcyBvbmUgdGhhdCBoYXMgbm8gaW5kaXZpZHVhbCBtYXBwaW5nICovCisJdHhfYnVmLT5mbGFncyB8PSBCTlgyWF9UU09fU1BMSVRfQkQ7CisKIAlEUChORVRJRl9NU0dfVFhfUVVFVUVELAogCSAgICJUU08gc3BsaXQgZGF0YSBzaXplIGlzICVkICgleDoleClcbiIsCiAJICAgZF90eF9iZC0+bmJ5dGVzLCBkX3R4X2JkLT5hZGRyX2hpLCBkX3R4X2JkLT5hZGRyX2xvKTsKIAotCS8qIHVwZGF0ZSB0eF9iZCBmb3IgbWFya2luZyB0aGUgbGFzdCBCRCBmbGFnICovCi0JKnR4X2JkID0gZF90eF9iZDsKKwkvKiB1cGRhdGUgdHhfYmQgKi8KKwkqdHhfYmQgPSAoc3RydWN0IGV0aF90eF9zdGFydF9iZCAqKWRfdHhfYmQ7CiAKIAlyZXR1cm4gYmRfcHJvZDsKIH0KQEAgLTEwMzY2LDIxICsxMDkzNiwyMiBAQAogICogYm54MnhfdHhfaW50KCkgcnVucyB3aXRob3V0IG5ldGlmX3R4X2xvY2sgdW5sZXNzIGl0IG5lZWRzIHRvIGNhbGwKICAqIG5ldGlmX3dha2VfcXVldWUoKQogICovCi1zdGF0aWMgaW50IGJueDJ4X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBibngyeF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcDsKKwlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLCAqZnBfc3RhdDsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJc3RydWN0IHN3X3R4X2JkICp0eF9idWY7Ci0Jc3RydWN0IGV0aF90eF9iZCAqdHhfYmQ7CisJc3RydWN0IGV0aF90eF9zdGFydF9iZCAqdHhfc3RhcnRfYmQ7CisJc3RydWN0IGV0aF90eF9iZCAqdHhfZGF0YV9iZCwgKnRvdGFsX3BrdF9iZCA9IE5VTEw7CiAJc3RydWN0IGV0aF90eF9wYXJzZV9iZCAqcGJkID0gTlVMTDsKIAl1MTYgcGt0X3Byb2QsIGJkX3Byb2Q7CiAJaW50IG5iZCwgZnBfaW5kZXg7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwogCXUzMiB4bWl0X3R5cGUgPSBibngyeF94bWl0X3R5cGUoYnAsIHNrYik7Ci0JaW50IHZsYW5fb2ZmID0gKGJwLT5lMWhvdiA/IDQgOiAwKTsKIAlpbnQgaTsKIAl1OCBobGVuID0gMDsKKwlfX2xlMTYgcGt0X3NpemUgPSAwOwogCiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQpAQCAtMTAzOTAsMTAgKzEwOTYxLDExIEBACiAJZnBfaW5kZXggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgZnBfaW5kZXgpOwogCi0JZnAgPSAmYnAtPmZwW2ZwX2luZGV4XTsKKwlmcCA9ICZicC0+ZnBbZnBfaW5kZXggKyBicC0+bnVtX3J4X3F1ZXVlc107CisJZnBfc3RhdCA9ICZicC0+ZnBbZnBfaW5kZXhdOwogCiAJaWYgKHVubGlrZWx5KGJueDJ4X3R4X2F2YWlsKGZwKSA8IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMykpKSB7Ci0JCWZwLT5ldGhfcV9zdGF0cy5kcml2ZXJfeG9mZisrLAorCQlmcF9zdGF0LT5ldGhfcV9zdGF0cy5kcml2ZXJfeG9mZisrOwogCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CiAJCUJOWDJYX0VSUigiQlVHISBUeCByaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CkBAIC0xMDQyMiw3ICsxMDk5NCw3IEBACiAKIAkvKgogCVBsZWFzZSByZWFkIGNhcmVmdWxseS4gRmlyc3Qgd2UgdXNlIG9uZSBCRCB3aGljaCB3ZSBtYXJrIGFzIHN0YXJ0LAotCXRoZW4gZm9yIFRTTyBvciB4c3VtIHdlIGhhdmUgYSBwYXJzaW5nIGluZm8gQkQsCisJdGhlbiB3ZSBoYXZlIGEgcGFyc2luZyBpbmZvIEJEICh1c2VkIGZvciBUU08gb3IgeHN1bSksCiAJYW5kIG9ubHkgdGhlbiB3ZSBoYXZlIHRoZSByZXN0IG9mIHRoZSBUU08gQkRzLgogCShkb24ndCBmb3JnZXQgdG8gbWFyayB0aGUgbGFzdCBvbmUgYXMgbGFzdCwKIAlhbmQgdG8gdW5tYXAgb25seSBBRlRFUiB5b3Ugd3JpdGUgdG8gdGhlIEJEIC4uLikKQEAgLTEwNDM0LDQyICsxMTAwNiw0MCBAQAogCiAJLyogZ2V0IGEgdHhfYnVmIGFuZCBmaXJzdCBCRCAqLwogCXR4X2J1ZiA9ICZmcC0+dHhfYnVmX3JpbmdbVFhfQkQocGt0X3Byb2QpXTsKLQl0eF9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX3Byb2RdOworCXR4X3N0YXJ0X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfcHJvZF0uc3RhcnRfYmQ7CiAKLQl0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgPSBFVEhfVFhfQkRfRkxBR1NfU1RBUlRfQkQ7Ci0JdHhfYmQtPmdlbmVyYWxfZGF0YSA9IChVTklDQVNUX0FERFJFU1MgPDwKLQkJCSAgICAgICBFVEhfVFhfQkRfRVRIX0FERFJfVFlQRV9TSElGVCk7CisJdHhfc3RhcnRfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkID0gRVRIX1RYX0JEX0ZMQUdTX1NUQVJUX0JEOworCXR4X3N0YXJ0X2JkLT5nZW5lcmFsX2RhdGEgPSAoVU5JQ0FTVF9BRERSRVNTIDw8CisJCQkJICAgICBFVEhfVFhfU1RBUlRfQkRfRVRIX0FERFJfVFlQRV9TSElGVCk7CiAJLyogaGVhZGVyIG5iZCAqLwotCXR4X2JkLT5nZW5lcmFsX2RhdGEgfD0gKDEgPDwgRVRIX1RYX0JEX0hEUl9OQkRTX1NISUZUKTsKKwl0eF9zdGFydF9iZC0+Z2VuZXJhbF9kYXRhIHw9ICgxIDw8IEVUSF9UWF9TVEFSVF9CRF9IRFJfTkJEU19TSElGVCk7CiAKIAkvKiByZW1lbWJlciB0aGUgZmlyc3QgQkQgb2YgdGhlIHBhY2tldCAqLwogCXR4X2J1Zi0+Zmlyc3RfYmQgPSBmcC0+dHhfYmRfcHJvZDsKIAl0eF9idWYtPnNrYiA9IHNrYjsKKwl0eF9idWYtPmZsYWdzID0gMDsKIAogCURQKE5FVElGX01TR19UWF9RVUVVRUQsCiAJICAgInNlbmRpbmcgcGt0ICV1IEAlcCAgbmV4dF9pZHggJXUgIGJkICV1IEAlcFxuIiwKLQkgICBwa3RfcHJvZCwgdHhfYnVmLCBmcC0+dHhfcGt0X3Byb2QsIGJkX3Byb2QsIHR4X2JkKTsKKwkgICBwa3RfcHJvZCwgdHhfYnVmLCBmcC0+dHhfcGt0X3Byb2QsIGJkX3Byb2QsIHR4X3N0YXJ0X2JkKTsKIAogI2lmZGVmIEJDTV9WTEFOCiAJaWYgKChicC0+dmxncnAgIT0gTlVMTCkgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpICYmCiAJICAgIChicC0+ZmxhZ3MgJiBIV19WTEFOX1RYX0ZMQUcpKSB7Ci0JCXR4X2JkLT52bGFuID0gY3B1X3RvX2xlMTYodmxhbl90eF90YWdfZ2V0KHNrYikpOwotCQl0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0gRVRIX1RYX0JEX0ZMQUdTX1ZMQU5fVEFHOwotCQl2bGFuX29mZiArPSA0OworCQl0eF9zdGFydF9iZC0+dmxhbiA9IGNwdV90b19sZTE2KHZsYW5fdHhfdGFnX2dldChza2IpKTsKKwkJdHhfc3RhcnRfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkIHw9IEVUSF9UWF9CRF9GTEFHU19WTEFOX1RBRzsKIAl9IGVsc2UKICNlbmRpZgotCQl0eF9iZC0+dmxhbiA9IGNwdV90b19sZTE2KHBrdF9wcm9kKTsKKwkJdHhfc3RhcnRfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNihwa3RfcHJvZCk7CiAKLQlpZiAoeG1pdF90eXBlKSB7Ci0JCS8qIHR1cm4gb24gcGFyc2luZyBhbmQgZ2V0IGEgQkQgKi8KLQkJYmRfcHJvZCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX3Byb2QpKTsKLQkJcGJkID0gKHZvaWQgKikmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXTsKKwkvKiB0dXJuIG9uIHBhcnNpbmcgYW5kIGdldCBhIEJEICovCisJYmRfcHJvZCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX3Byb2QpKTsKKwlwYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5wYXJzZV9iZDsKIAotCQltZW1zZXQocGJkLCAwLCBzaXplb2Yoc3RydWN0IGV0aF90eF9wYXJzZV9iZCkpOwotCX0KKwltZW1zZXQocGJkLCAwLCBzaXplb2Yoc3RydWN0IGV0aF90eF9wYXJzZV9iZCkpOwogCiAJaWYgKHhtaXRfdHlwZSAmIFhNSVRfQ1NVTSkgewotCQlobGVuID0gKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLT5kYXRhICsgdmxhbl9vZmYpIC8gMjsKKwkJaGxlbiA9IChza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YSkgLyAyOwogCiAJCS8qIGZvciBub3cgTlMgZmxhZyBpcyBub3QgdXNlZCBpbiBMaW51eCAqLwogCQlwYmQtPmdsb2JhbF9kYXRhID0KQEAgLTEwNDgyLDE1ICsxMTA1MiwxNiBAQAogCQlobGVuICs9IHBiZC0+aXBfaGxlbiArIHRjcF9oZHJsZW4oc2tiKSAvIDI7CiAKIAkJcGJkLT50b3RhbF9obGVuID0gY3B1X3RvX2xlMTYoaGxlbik7Ci0JCWhsZW4gPSBobGVuKjIgLSB2bGFuX29mZjsKKwkJaGxlbiA9IGhsZW4qMjsKIAotCQl0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0gRVRIX1RYX0JEX0ZMQUdTX1RDUF9DU1VNOworCQl0eF9zdGFydF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0gRVRIX1RYX0JEX0ZMQUdTX0w0X0NTVU07CiAKIAkJaWYgKHhtaXRfdHlwZSAmIFhNSVRfQ1NVTV9WNCkKLQkJCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PQorCQkJdHhfc3RhcnRfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkIHw9CiAJCQkJCQlFVEhfVFhfQkRfRkxBR1NfSVBfQ1NVTTsKIAkJZWxzZQotCQkJdHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkIHw9IEVUSF9UWF9CRF9GTEFHU19JUFY2OworCQkJdHhfc3RhcnRfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkIHw9CisJCQkJCQlFVEhfVFhfQkRfRkxBR1NfSVBWNjsKIAogCQlpZiAoeG1pdF90eXBlICYgWE1JVF9DU1VNX1RDUCkgewogCQkJcGJkLT50Y3BfcHNldWRvX2NzdW0gPSBzd2FiMTYodGNwX2hkcihza2IpLT5jaGVjayk7CkBAIC0xMDQ5OCwxMyArMTEwNjksMTEgQEAKIAkJfSBlbHNlIHsKIAkJCXM4IGZpeCA9IFNLQl9DU19PRkYoc2tiKTsgLyogc2lnbmVkISAqLwogCi0JCQlwYmQtPmdsb2JhbF9kYXRhIHw9IEVUSF9UWF9QQVJTRV9CRF9DU19BTllfRkxHOwotCQkJcGJkLT5jc19vZmZzZXQgPSBmaXggLyAyOworCQkJcGJkLT5nbG9iYWxfZGF0YSB8PSBFVEhfVFhfUEFSU0VfQkRfVURQX0NTX0ZMRzsKIAogCQkJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKLQkJCSAgICJobGVuICVkICBvZmZzZXQgJWQgIGZpeCAlZCAgY3N1bSBiZWZvcmUgZml4ICV4XG4iLAotCQkJICAgbGUxNl90b19jcHUocGJkLT50b3RhbF9obGVuKSwgcGJkLT5jc19vZmZzZXQsIGZpeCwKLQkJCSAgIFNLQl9DUyhza2IpKTsKKwkJCSAgICJobGVuICVkICBmaXggJWQgIGNzdW0gYmVmb3JlIGZpeCAleFxuIiwKKwkJCSAgIGxlMTZfdG9fY3B1KHBiZC0+dG90YWxfaGxlbiksIGZpeCwgU0tCX0NTKHNrYikpOwogCiAJCQkvKiBIVyBidWc6IGZpeHVwIHRoZSBDU1VNICovCiAJCQlwYmQtPnRjcF9wc2V1ZG9fY3N1bSA9CkBAIC0xMDUxOSwxNyArMTEwODgsMTggQEAKIAltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUoYnAtPnBkZXYsIHNrYi0+ZGF0YSwKIAkJCQkgc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CiAKLQl0eF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7Ci0JdHhfYmQtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykpOwotCW5iZCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAoKHBiZCA9PSBOVUxMKSA/IDEgOiAyKTsKLQl0eF9iZC0+bmJkID0gY3B1X3RvX2xlMTYobmJkKTsKLQl0eF9iZC0+bmJ5dGVzID0gY3B1X3RvX2xlMTYoc2tiX2hlYWRsZW4oc2tiKSk7CisJdHhfc3RhcnRfYmQtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihVNjRfSEkobWFwcGluZykpOworCXR4X3N0YXJ0X2JkLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIoVTY0X0xPKG1hcHBpbmcpKTsKKwluYmQgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMjsgLyogc3RhcnRfYmQgKyBwYmQgKyBmcmFncyAqLworCXR4X3N0YXJ0X2JkLT5uYmQgPSBjcHVfdG9fbGUxNihuYmQpOworCXR4X3N0YXJ0X2JkLT5uYnl0ZXMgPSBjcHVfdG9fbGUxNihza2JfaGVhZGxlbihza2IpKTsKKwlwa3Rfc2l6ZSA9IHR4X3N0YXJ0X2JkLT5uYnl0ZXM7CiAKIAlEUChORVRJRl9NU0dfVFhfUVVFVUVELCAiZmlyc3QgYmQgQCVwICBhZGRyICgleDoleCkgIG5iZCAlZCIKIAkgICAiICBuYnl0ZXMgJWQgIGZsYWdzICV4ICB2bGFuICV4XG4iLAotCSAgIHR4X2JkLCB0eF9iZC0+YWRkcl9oaSwgdHhfYmQtPmFkZHJfbG8sIGxlMTZfdG9fY3B1KHR4X2JkLT5uYmQpLAotCSAgIGxlMTZfdG9fY3B1KHR4X2JkLT5uYnl0ZXMpLCB0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQsCi0JICAgbGUxNl90b19jcHUodHhfYmQtPnZsYW4pKTsKKwkgICB0eF9zdGFydF9iZCwgdHhfc3RhcnRfYmQtPmFkZHJfaGksIHR4X3N0YXJ0X2JkLT5hZGRyX2xvLAorCSAgIGxlMTZfdG9fY3B1KHR4X3N0YXJ0X2JkLT5uYmQpLCBsZTE2X3RvX2NwdSh0eF9zdGFydF9iZC0+bmJ5dGVzKSwKKwkgICB0eF9zdGFydF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQsIGxlMTZfdG9fY3B1KHR4X3N0YXJ0X2JkLT52bGFuKSk7CiAKIAlpZiAoeG1pdF90eXBlICYgWE1JVF9HU08pIHsKIApAQCAtMTA1MzgsMTEgKzExMTA4LDExIEBACiAJCSAgIHNrYi0+bGVuLCBobGVuLCBza2JfaGVhZGxlbihza2IpLAogCQkgICBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKTsKIAotCQl0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0gRVRIX1RYX0JEX0ZMQUdTX1NXX0xTTzsKKwkJdHhfc3RhcnRfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkIHw9IEVUSF9UWF9CRF9GTEFHU19TV19MU087CiAKIAkJaWYgKHVubGlrZWx5KHNrYl9oZWFkbGVuKHNrYikgPiBobGVuKSkKLQkJCWJkX3Byb2QgPSBibngyeF90eF9zcGxpdChicCwgZnAsICZ0eF9iZCwgaGxlbiwKLQkJCQkJCSBiZF9wcm9kLCArK25iZCk7CisJCQliZF9wcm9kID0gYm54MnhfdHhfc3BsaXQoYnAsIGZwLCB0eF9idWYsICZ0eF9zdGFydF9iZCwKKwkJCQkJCSBobGVuLCBiZF9wcm9kLCArK25iZCk7CiAKIAkJcGJkLT5sc29fbXNzID0gY3B1X3RvX2xlMTYoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSk7CiAJCXBiZC0+dGNwX3NlbmRfc2VxID0gc3dhYjMyKHRjcF9oZHIoc2tiKS0+c2VxKTsKQEAgLTEwNTYzLDMzICsxMTEzMywzMSBAQAogCiAJCXBiZC0+Z2xvYmFsX2RhdGEgfD0gRVRIX1RYX1BBUlNFX0JEX1BTRVVET19DU19XSVRIT1VUX0xFTjsKIAl9CisJdHhfZGF0YV9iZCA9IChzdHJ1Y3QgZXRoX3R4X2JkICopdHhfc3RhcnRfYmQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CiAJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKIAogCQliZF9wcm9kID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfcHJvZCkpOwotCQl0eF9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX3Byb2RdOworCQl0eF9kYXRhX2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfcHJvZF0ucmVnX2JkOworCQlpZiAodG90YWxfcGt0X2JkID09IE5VTEwpCisJCQl0b3RhbF9wa3RfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5yZWdfYmQ7CiAKIAkJbWFwcGluZyA9IHBjaV9tYXBfcGFnZShicC0+cGRldiwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQsCiAJCQkJICAgICAgIGZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCi0JCXR4X2JkLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoVTY0X0hJKG1hcHBpbmcpKTsKLQkJdHhfYmQtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykpOwotCQl0eF9iZC0+bmJ5dGVzID0gY3B1X3RvX2xlMTYoZnJhZy0+c2l6ZSk7Ci0JCXR4X2JkLT52bGFuID0gY3B1X3RvX2xlMTYocGt0X3Byb2QpOwotCQl0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgPSAwOworCQl0eF9kYXRhX2JkLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoVTY0X0hJKG1hcHBpbmcpKTsKKwkJdHhfZGF0YV9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7CisJCXR4X2RhdGFfYmQtPm5ieXRlcyA9IGNwdV90b19sZTE2KGZyYWctPnNpemUpOworCQlsZTE2X2FkZF9jcHUoJnBrdF9zaXplLCBmcmFnLT5zaXplKTsKIAogCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELAotCQkgICAiZnJhZyAlZCAgYmQgQCVwICBhZGRyICgleDoleCkgIG5ieXRlcyAlZCAgZmxhZ3MgJXhcbiIsCi0JCSAgIGksIHR4X2JkLCB0eF9iZC0+YWRkcl9oaSwgdHhfYmQtPmFkZHJfbG8sCi0JCSAgIGxlMTZfdG9fY3B1KHR4X2JkLT5uYnl0ZXMpLCB0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQpOworCQkgICAiZnJhZyAlZCAgYmQgQCVwICBhZGRyICgleDoleCkgIG5ieXRlcyAlZFxuIiwKKwkJICAgaSwgdHhfZGF0YV9iZCwgdHhfZGF0YV9iZC0+YWRkcl9oaSwgdHhfZGF0YV9iZC0+YWRkcl9sbywKKwkJICAgbGUxNl90b19jcHUodHhfZGF0YV9iZC0+bmJ5dGVzKSk7CiAJfQogCi0JLyogbm93IGF0IGxhc3QgbWFyayB0aGUgQkQgYXMgdGhlIGxhc3QgQkQgKi8KLQl0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0gRVRIX1RYX0JEX0ZMQUdTX0VORF9CRDsKLQotCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJsYXN0IGJkIEAlcCAgZmxhZ3MgJXhcbiIsCi0JICAgdHhfYmQsIHR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCk7CisJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwgImxhc3QgYmQgQCVwXG4iLCB0eF9kYXRhX2JkKTsKIAogCWJkX3Byb2QgPSBUWF9CRChORVhUX1RYX0lEWChiZF9wcm9kKSk7CiAKQEAgLTEwNTk5LDYgKzExMTY3LDkgQEAKIAlpZiAoVFhfQkRfUE9GRihiZF9wcm9kKSA8IG5iZCkKIAkJbmJkKys7CiAKKwlpZiAodG90YWxfcGt0X2JkICE9IE5VTEwpCisJCXRvdGFsX3BrdF9iZC0+dG90YWxfcGt0X2J5dGVzID0gcGt0X3NpemU7CisKIAlpZiAocGJkKQogCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELAogCQkgICAiUEJEIEAlcCAgaXBfZGF0YSAleCAgaXBfaGxlbiAldSAgaXBfaWQgJXUgIGxzb19tc3MgJXUiCkBAIC0xMDYxOCwyNSArMTExODksMjQgQEAKIAkgKi8KIAl3bWIoKTsKIAotCWxlMTZfYWRkX2NwdSgmZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCwgbmJkKTsKLQltYigpOyAvKiBGVyByZXN0cmljdGlvbjogbXVzdCBub3QgcmVvcmRlciB3cml0aW5nIG5iZCBhbmQgcGFja2V0cyAqLwotCWxlMzJfYWRkX2NwdSgmZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QsIDEpOwotCURPT1JCRUxMKGJwLCBmcC0+aW5kZXgsIDApOworCWZwLT50eF9kYi5kYXRhLnByb2QgKz0gbmJkOworCWJhcnJpZXIoKTsKKwlET09SQkVMTChicCwgZnAtPmluZGV4IC0gYnAtPm51bV9yeF9xdWV1ZXMsIGZwLT50eF9kYi5yYXcpOwogCiAJbW1pb3diKCk7CiAKIAlmcC0+dHhfYmRfcHJvZCArPSBuYmQ7CiAKIAlpZiAodW5saWtlbHkoYm54MnhfdHhfYXZhaWwoZnApIDwgTUFYX1NLQl9GUkFHUyArIDMpKSB7CisJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKIAkJLyogV2Ugd2FudCBibngyeF90eF9pbnQgdG8gInNlZSIgdGhlIHVwZGF0ZWQgdHhfYmRfcHJvZAogCQkgICBpZiB3ZSBwdXQgVHggaW50byBYT0ZGIHN0YXRlLiAqLwogCQlzbXBfbWIoKTsKLQkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOwotCQlmcC0+ZXRoX3Ffc3RhdHMuZHJpdmVyX3hvZmYrKzsKKwkJZnBfc3RhdC0+ZXRoX3Ffc3RhdHMuZHJpdmVyX3hvZmYrKzsKIAkJaWYgKGJueDJ4X3R4X2F2YWlsKGZwKSA+PSBNQVhfU0tCX0ZSQUdTICsgMykKIAkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKIAl9Ci0JZnAtPnR4X3BrdCsrOworCWZwX3N0YXQtPnR4X3BrdCsrOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTEwNzEyLDggKzExMjgyLDkgQEAKIAkJCQkJCQljcHVfdG9fbGUxNihwb3J0KTsKIAkJCQljb25maWctPmNvbmZpZ190YWJsZVtpXS4KIAkJCQkJdGFyZ2V0X3RhYmxlX2VudHJ5LmZsYWdzID0gMDsKLQkJCQljb25maWctPmNvbmZpZ190YWJsZVtpXS4KLQkJCQkJdGFyZ2V0X3RhYmxlX2VudHJ5LmNsaWVudF9pZCA9IDA7CisJCQkJY29uZmlnLT5jb25maWdfdGFibGVbaV0udGFyZ2V0X3RhYmxlX2VudHJ5LgorCQkJCQljbGllbnRzX2JpdF92ZWN0b3IgPQorCQkJCQkJY3B1X3RvX2xlMzIoMSA8PCBCUF9MX0lEKGJwKSk7CiAJCQkJY29uZmlnLT5jb25maWdfdGFibGVbaV0uCiAJCQkJCXRhcmdldF90YWJsZV9lbnRyeS52bGFuX2lkID0gMDsKIApAQCAtMTA4MDgsNTQgKzExMzc5LDc3IEBACiB9CiAKIC8qIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLworc3RhdGljIGludCBibngyeF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBydGFkLAorCQkJICAgaW50IGRldmFkLCB1MTYgYWRkcikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MTYgdmFsdWU7CisJaW50IHJjOworCXUzMiBwaHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisKKwlEUChORVRJRl9NU0dfTElOSywgIm1kaW9fcmVhZDogcHJ0YWQgMHgleCwgZGV2YWQgMHgleCwgYWRkciAweCV4XG4iLAorCSAgIHBydGFkLCBkZXZhZCwgYWRkcik7CisKKwlpZiAocHJ0YWQgIT0gYnAtPm1kaW8ucHJ0YWQpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJwcnRhZCBtaXNzbWF0Y2ggKGNtZDoweCV4ICE9IGJwOjB4JXgpXG4iLAorCQkgICBwcnRhZCwgYnAtPm1kaW8ucHJ0YWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUaGUgSFcgZXhwZWN0cyBkaWZmZXJlbnQgZGV2YWQgaWYgQ0wyMiBpcyB1c2VkICovCisJZGV2YWQgPSAoZGV2YWQgPT0gTURJT19ERVZBRF9OT05FKSA/IERFRkFVTFRfUEhZX0RFVl9BRERSIDogZGV2YWQ7CisKKwlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKKwlyYyA9IGJueDJ4X2NsNDVfcmVhZChicCwgQlBfUE9SVChicCksIHBoeV90eXBlLCBwcnRhZCwKKwkJCSAgICAgZGV2YWQsIGFkZHIsICZ2YWx1ZSk7CisJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CisJRFAoTkVUSUZfTVNHX0xJTkssICJtZGlvX3JlYWRfdmFsIDB4JXggcmMgPSAweCV4XG4iLCB2YWx1ZSwgcmMpOworCisJaWYgKCFyYykKKwkJcmMgPSB2YWx1ZTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLworc3RhdGljIGludCBibngyeF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwcnRhZCwgaW50IGRldmFkLAorCQkJICAgIHUxNiBhZGRyLCB1MTYgdmFsdWUpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisJaW50IHJjOworCisJRFAoTkVUSUZfTVNHX0xJTkssICJtZGlvX3dyaXRlOiBwcnRhZCAweCV4LCBkZXZhZCAweCV4LCBhZGRyIDB4JXgsIgorCQkJICAgIiB2YWx1ZSAweCV4XG4iLCBwcnRhZCwgZGV2YWQsIGFkZHIsIHZhbHVlKTsKKworCWlmIChwcnRhZCAhPSBicC0+bWRpby5wcnRhZCkgeworCQlEUChORVRJRl9NU0dfTElOSywgInBydGFkIG1pc3NtYXRjaCAoY21kOjB4JXggIT0gYnA6MHgleClcbiIsCisJCSAgIHBydGFkLCBicC0+bWRpby5wcnRhZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFRoZSBIVyBleHBlY3RzIGRpZmZlcmVudCBkZXZhZCBpZiBDTDIyIGlzIHVzZWQgKi8KKwlkZXZhZCA9IChkZXZhZCA9PSBNRElPX0RFVkFEX05PTkUpID8gREVGQVVMVF9QSFlfREVWX0FERFIgOiBkZXZhZDsKKworCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCXJjID0gYm54MnhfY2w0NV93cml0ZShicCwgQlBfUE9SVChicCksIGV4dF9waHlfdHlwZSwgcHJ0YWQsCisJCQkgICAgICBkZXZhZCwgYWRkciwgdmFsdWUpOworCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworCXJldHVybiByYzsKK30KKworLyogY2FsbGVkIHdpdGggcnRubF9sb2NrICovCiBzdGF0aWMgaW50IGJueDJ4X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQogewotCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShpZnIpOwogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0JaW50IGVycjsKKwlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKm1kaW8gPSBpZl9taWkoaWZyKTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTSU9DR01JSVBIWToKLQkJZGF0YS0+cGh5X2lkID0gYnAtPnBvcnQucGh5X2FkZHI7CisJRFAoTkVUSUZfTVNHX0xJTkssICJpb2N0bDogcGh5IGlkIDB4JXgsIHJlZyAweCV4LCB2YWxfaW4gMHgleFxuIiwKKwkgICBtZGlvLT5waHlfaWQsIG1kaW8tPnJlZ19udW0sIG1kaW8tPnZhbF9pbik7CiAKLQkJLyogZmFsbHRocm91Z2ggKi8KKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FQUdBSU47CiAKLQljYXNlIFNJT0NHTUlJUkVHOiB7Ci0JCXUxNiBtaWlfcmVndmFsOwotCi0JCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkJbXV0ZXhfbG9jaygmYnAtPnBvcnQucGh5X211dGV4KTsKLQkJZXJyID0gYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCAwLCBicC0+cG9ydC5waHlfYWRkciwKLQkJCQkgICAgICBERUZBVUxUX1BIWV9ERVZfQUREUiwKLQkJCQkgICAgICAoZGF0YS0+cmVnX251bSAmIDB4MWYpLCAmbWlpX3JlZ3ZhbCk7Ci0JCWRhdGEtPnZhbF9vdXQgPSBtaWlfcmVndmFsOwotCQltdXRleF91bmxvY2soJmJwLT5wb3J0LnBoeV9tdXRleCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JY2FzZSBTSU9DU01JSVJFRzoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQotCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJCXJldHVybiAtRUFHQUlOOwotCi0JCW11dGV4X2xvY2soJmJwLT5wb3J0LnBoeV9tdXRleCk7Ci0JCWVyciA9IGJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIDAsIGJwLT5wb3J0LnBoeV9hZGRyLAotCQkJCSAgICAgICBERUZBVUxUX1BIWV9ERVZfQUREUiwKLQkJCQkgICAgICAgKGRhdGEtPnJlZ19udW0gJiAweDFmKSwgZGF0YS0+dmFsX2luKTsKLQkJbXV0ZXhfdW5sb2NrKCZicC0+cG9ydC5waHlfbXV0ZXgpOwotCQlyZXR1cm4gZXJyOwotCi0JZGVmYXVsdDoKLQkJLyogZG8gbm90aGluZyAqLwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJcmV0dXJuIG1kaW9fbWlpX2lvY3RsKCZicC0+bWRpbywgbWRpbywgY21kKTsKIH0KIAogLyogY2FsbGVkIHdpdGggcnRubF9sb2NrICovCkBAIC0xMTA2NSwxMiArMTE2NTksMjcgQEAKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKIAlpZiAoYnAtPmZsYWdzICYgVVNJTkdfREFDX0ZMQUcpCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOKTsKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKICNpZmRlZiBCQ01fVkxBTgogCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCk7CiAJYnAtPmZsYWdzIHw9IChIV19WTEFOX1JYX0ZMQUcgfCBIV19WTEFOX1RYX0ZMQUcpOworCisJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CisJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKwlpZiAoYnAtPmZsYWdzICYgVVNJTkdfREFDX0ZMQUcpCisJCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTik7CisJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKICNlbmRpZgotCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOKTsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKworCS8qIGdldF9wb3J0X2h3aW5mbygpIHdpbGwgc2V0IHBydGFkIGFuZCBtbWRzIHByb3Blcmx5ICovCisJYnAtPm1kaW8ucHJ0YWQgPSBNRElPX1BSVEFEX05PTkU7CisJYnAtPm1kaW8ubW1kcyA9IDA7CisJYnAtPm1kaW8ubW9kZV9zdXBwb3J0ID0gTURJT19TVVBQT1JUU19DNDUgfCBNRElPX0VNVUxBVEVfQzIyOworCWJwLT5tZGlvLmRldiA9IGRldjsKKwlicC0+bWRpby5tZGlvX3JlYWQgPSBibngyeF9tZGlvX3JlYWQ7CisJYnAtPm1kaW8ubWRpb193cml0ZSA9IGJueDJ4X21kaW9fd3JpdGU7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTEwOTYsMzEgKzExNzA1LDI2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9nZXRfcGNpZV93aWR0aChzdHJ1Y3QgYm54MnggKmJwKQorc3RhdGljIHZvaWQgX19kZXZpbml0IGJueDJ4X2dldF9wY2llX3dpZHRoX3NwZWVkKHN0cnVjdCBibngyeCAqYnAsCisJCQkJCQkgaW50ICp3aWR0aCwgaW50ICpzcGVlZCkKIHsKIAl1MzIgdmFsID0gUkVHX1JEKGJwLCBQQ0lDRkdfT0ZGU0VUICsgUENJQ0ZHX0xJTktfQ09OVFJPTCk7CiAKLQl2YWwgPSAodmFsICYgUENJQ0ZHX0xJTktfV0lEVEgpID4+IFBDSUNGR19MSU5LX1dJRFRIX1NISUZUOwotCXJldHVybiB2YWw7CisJKndpZHRoID0gKHZhbCAmIFBDSUNGR19MSU5LX1dJRFRIKSA+PiBQQ0lDRkdfTElOS19XSURUSF9TSElGVDsKKworCS8qIHJldHVybiB2YWx1ZSBvZiAxPTIuNUdIeiAyPTVHSHogKi8KKwkqc3BlZWQgPSAodmFsICYgUENJQ0ZHX0xJTktfU1BFRUQpID4+IFBDSUNGR19MSU5LX1NQRUVEX1NISUZUOwogfQogCi0vKiByZXR1cm4gdmFsdWUgb2YgMT0yLjVHSHogMj01R0h6ICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9nZXRfcGNpZV9zcGVlZChzdHJ1Y3QgYm54MnggKmJwKQotewotCXUzMiB2YWwgPSBSRUdfUkQoYnAsIFBDSUNGR19PRkZTRVQgKyBQQ0lDRkdfTElOS19DT05UUk9MKTsKLQotCXZhbCA9ICh2YWwgJiBQQ0lDRkdfTElOS19TUEVFRCkgPj4gUENJQ0ZHX0xJTktfU1BFRURfU0hJRlQ7Ci0JcmV0dXJuIHZhbDsKLX0KIHN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2NoZWNrX2Zpcm13YXJlKHN0cnVjdCBibngyeCAqYnApCiB7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSA9IGJwLT5maXJtd2FyZTsKIAlzdHJ1Y3QgYm54MnhfZndfZmlsZV9oZHIgKmZ3X2hkcjsKIAlzdHJ1Y3QgYm54MnhfZndfZmlsZV9zZWN0aW9uICpzZWN0aW9uczsKLQl1MTYgKm9wc19vZmZzZXRzOwogCXUzMiBvZmZzZXQsIGxlbiwgbnVtX29wczsKKwl1MTYgKm9wc19vZmZzZXRzOwogCWludCBpOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUgPSBicC0+ZmlybXdhcmU7Ci0JY29uc3QgdTggKiBmd192ZXI7CisJY29uc3QgdTggKmZ3X3ZlcjsKIAogCWlmIChmaXJtd2FyZS0+c2l6ZSA8IHNpemVvZihzdHJ1Y3QgYm54MnhfZndfZmlsZV9oZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMTM0LDcgKzExNzM4LDggQEAKIAkJb2Zmc2V0ID0gYmUzMl90b19jcHUoc2VjdGlvbnNbaV0ub2Zmc2V0KTsKIAkJbGVuID0gYmUzMl90b19jcHUoc2VjdGlvbnNbaV0ubGVuKTsKIAkJaWYgKG9mZnNldCArIGxlbiA+IGZpcm13YXJlLT5zaXplKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJTZWN0aW9uICVkIGxlbmd0aCBpcyBvdXQgb2YgYm91bmRzXG4iLCBpKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIlNlY3Rpb24gJWQgbGVuZ3RoIGlzIG91dCBvZiAiCisJCQkJCSAgICAiYm91bmRzXG4iLCBpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtMTExNDYsNyArMTE3NTEsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IGJlMzJfdG9fY3B1KGZ3X2hkci0+aW5pdF9vcHNfb2Zmc2V0cy5sZW4pIC8gMjsgaSsrKSB7CiAJCWlmIChiZTE2X3RvX2NwdShvcHNfb2Zmc2V0c1tpXSkgPiBudW1fb3BzKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJTZWN0aW9uIG9mZnNldCAlZCBpcyBvdXQgb2YgYm91bmRzXG4iLCBpKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIlNlY3Rpb24gb2Zmc2V0ICVkIGlzIG91dCBvZiAiCisJCQkJCSAgICAiYm91bmRzXG4iLCBpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtMTExNjUsMTcgKzExNzcxLDE3IEBACiAJCSAgICAgICBCQ01fNTcxMF9GV19NSU5PUl9WRVJTSU9OLAogCQkgICAgICAgQkNNXzU3MTBfRldfUkVWSVNJT05fVkVSU0lPTiwKIAkJICAgICAgIEJDTV81NzEwX0ZXX0VOR0lORUVSSU5HX1ZFUlNJT04pOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaW5saW5lIGJlMzJfdG9fY3B1X24oY29uc3QgdTggKl9zb3VyY2UsIHU4ICpfdGFyZ2V0LCB1MzIgbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZTMyX3RvX2NwdV9uKGNvbnN0IHU4ICpfc291cmNlLCB1OCAqX3RhcmdldCwgdTMyIG4pCiB7CisJY29uc3QgX19iZTMyICpzb3VyY2UgPSAoY29uc3QgX19iZTMyICopX3NvdXJjZTsKKwl1MzIgKnRhcmdldCA9ICh1MzIgKilfdGFyZ2V0OwogCXUzMiBpOwotCWNvbnN0IF9fYmUzMiAqc291cmNlID0gKGNvbnN0IF9fYmUzMiopX3NvdXJjZTsKLQl1MzIgKnRhcmdldCA9ICh1MzIqKV90YXJnZXQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbi80OyBpKyspCiAJCXRhcmdldFtpXSA9IGJlMzJfdG9fY3B1KHNvdXJjZVtpXSk7CkBAIC0xMTE4NSw2NiArMTE3OTEsNjcgQEAKICAgIE9wcyBhcnJheSBpcyBzdG9yZWQgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CiAgICB7b3AoOGJpdCksIG9mZnNldCgyNGJpdCwgYmlnIGVuZGlhbiksIGRhdGEoMzJiaXQsIGJpZyBlbmRpYW4pfQogICovCi1zdGF0aWMgdm9pZCBpbmxpbmUgYm54MnhfcHJlcF9vcHMoY29uc3QgdTggKl9zb3VyY2UsIHU4ICpfdGFyZ2V0LCB1MzIgbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9wcmVwX29wcyhjb25zdCB1OCAqX3NvdXJjZSwgdTggKl90YXJnZXQsIHUzMiBuKQogeworCWNvbnN0IF9fYmUzMiAqc291cmNlID0gKGNvbnN0IF9fYmUzMiAqKV9zb3VyY2U7CisJc3RydWN0IHJhd19vcCAqdGFyZ2V0ID0gKHN0cnVjdCByYXdfb3AgKilfdGFyZ2V0OwogCXUzMiBpLCBqLCB0bXA7Ci0JY29uc3QgX19iZTMyICpzb3VyY2UgPSAoY29uc3QgX19iZTMyKilfc291cmNlOwotCXN0cnVjdCByYXdfb3AgKnRhcmdldCA9IChzdHJ1Y3QgcmF3X29wKilfdGFyZ2V0OwogCi0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBuLzg7IGkrKywgais9MikgeworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbi84OyBpKyssIGogKz0gMikgewogCQl0bXAgPSBiZTMyX3RvX2NwdShzb3VyY2Vbal0pOwogCQl0YXJnZXRbaV0ub3AgPSAodG1wID4+IDI0KSAmIDB4ZmY7CiAJCXRhcmdldFtpXS5vZmZzZXQgPSAgdG1wICYgMHhmZmZmZmY7CiAJCXRhcmdldFtpXS5yYXdfZGF0YSA9IGJlMzJfdG9fY3B1KHNvdXJjZVtqKzFdKTsKIAl9CiB9Ci1zdGF0aWMgdm9pZCBpbmxpbmUgYmUxNl90b19jcHVfbihjb25zdCB1OCAqX3NvdXJjZSwgdTggKl90YXJnZXQsIHUzMiBuKQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmUxNl90b19jcHVfbihjb25zdCB1OCAqX3NvdXJjZSwgdTggKl90YXJnZXQsIHUzMiBuKQogeworCWNvbnN0IF9fYmUxNiAqc291cmNlID0gKGNvbnN0IF9fYmUxNiAqKV9zb3VyY2U7CisJdTE2ICp0YXJnZXQgPSAodTE2ICopX3RhcmdldDsKIAl1MzIgaTsKLQl1MTYgKnRhcmdldCA9ICh1MTYqKV90YXJnZXQ7Ci0JY29uc3QgX19iZTE2ICpzb3VyY2UgPSAoY29uc3QgX19iZTE2Kilfc291cmNlOwogCiAJZm9yIChpID0gMDsgaSA8IG4vMjsgaSsrKQogCQl0YXJnZXRbaV0gPSBiZTE2X3RvX2NwdShzb3VyY2VbaV0pOwogfQogCiAjZGVmaW5lIEJOWDJYX0FMTE9DX0FORF9TRVQoYXJyLCBsYmwsIGZ1bmMpIFwKLQlkbyB7ICAgXAotCQl1MzIgbGVuID0gYmUzMl90b19jcHUoZndfaGRyLT5hcnIubGVuKTsgICBcCi0JCWJwLT5hcnIgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7ICBcCisJZG8geyBcCisJCXUzMiBsZW4gPSBiZTMyX3RvX2NwdShmd19oZHItPmFyci5sZW4pOyBcCisJCWJwLT5hcnIgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7IFwKIAkJaWYgKCFicC0+YXJyKSB7IFwKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3IgIiNhcnIiXG4iLCBsZW4pOyBcCisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMgIiBcCisJCQkJCSAgICAiZm9yICIjYXJyIlxuIiwgbGVuKTsgXAogCQkJZ290byBsYmw7IFwKIAkJfSBcCi0JCWZ1bmMoYnAtPmZpcm13YXJlLT5kYXRhICsgXAotCQkJYmUzMl90b19jcHUoZndfaGRyLT5hcnIub2Zmc2V0KSwgXAotCQkJKHU4KilicC0+YXJyLCBsZW4pOyBcCisJCWZ1bmMoYnAtPmZpcm13YXJlLT5kYXRhICsgYmUzMl90b19jcHUoZndfaGRyLT5hcnIub2Zmc2V0KSwgXAorCQkgICAgICh1OCAqKWJwLT5hcnIsIGxlbik7IFwKIAl9IHdoaWxlICgwKQogCi0KIHN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2luaXRfZmlybXdhcmUoc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IGRldmljZSAqZGV2KQogewogCWNoYXIgZndfZmlsZV9uYW1lWzQwXSA9IHswfTsKLSAgICAgICAgaW50IHJjLCBvZmZzZXQ7CiAJc3RydWN0IGJueDJ4X2Z3X2ZpbGVfaGRyICpmd19oZHI7CisJaW50IHJjLCBvZmZzZXQ7CiAKIAkvKiBDcmVhdGUgYSBGVyBmaWxlIG5hbWUgKi8KIAlpZiAoQ0hJUF9JU19FMShicCkpCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3ByaW50Zihmd19maWxlX25hbWUsIEZXX0ZJTEVfUFJFRklYX0UxKTsKKwkJb2Zmc2V0ID0gc3ByaW50Zihmd19maWxlX25hbWUsIEZXX0ZJTEVfUFJFRklYX0UxKTsKIAllbHNlCiAJCW9mZnNldCA9IHNwcmludGYoZndfZmlsZV9uYW1lLCBGV19GSUxFX1BSRUZJWF9FMUgpOwogCiAJc3ByaW50Zihmd19maWxlX25hbWUgKyBvZmZzZXQsICIlZC4lZC4lZC4lZC5mdyIsCiAJCUJDTV81NzEwX0ZXX01BSk9SX1ZFUlNJT04sCi0gICAgICAgICAgICAgICAgQkNNXzU3MTBfRldfTUlOT1JfVkVSU0lPTiwKLSAgICAgICAgICAgICAgICBCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OLAotICAgICAgICAgICAgICAgIEJDTV81NzEwX0ZXX0VOR0lORUVSSU5HX1ZFUlNJT04pOworCQlCQ01fNTcxMF9GV19NSU5PUl9WRVJTSU9OLAorCQlCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OLAorCQlCQ01fNTcxMF9GV19FTkdJTkVFUklOR19WRVJTSU9OKTsKIAogCXByaW50ayhLRVJOX0lORk8gUEZYICJMb2FkaW5nICVzXG4iLCBmd19maWxlX25hbWUpOwogCiAJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZicC0+ZmlybXdhcmUsIGZ3X2ZpbGVfbmFtZSwgZGV2KTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FuJ3QgbG9hZCBmaXJtd2FyZSBmaWxlICVzXG4iLCBmd19maWxlX25hbWUpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW4ndCBsb2FkIGZpcm13YXJlIGZpbGUgJXNcbiIsCisJCSAgICAgICBmd19maWxlX25hbWUpOwogCQlnb3RvIHJlcXVlc3RfZmlybXdhcmVfZXhpdDsKIAl9CiAKQEAgLTExMjY0LDI3ICsxMTg3MSwyOSBAQAogCUJOWDJYX0FMTE9DX0FORF9TRVQoaW5pdF9vcHMsIGluaXRfb3BzX2FsbG9jX2VyciwgYm54MnhfcHJlcF9vcHMpOwogCiAJLyogT2Zmc2V0cyAqLwotCUJOWDJYX0FMTE9DX0FORF9TRVQoaW5pdF9vcHNfb2Zmc2V0cywgaW5pdF9vZmZzZXRzX2FsbG9jX2VyciwgYmUxNl90b19jcHVfbik7CisJQk5YMlhfQUxMT0NfQU5EX1NFVChpbml0X29wc19vZmZzZXRzLCBpbml0X29mZnNldHNfYWxsb2NfZXJyLAorCQkJICAgIGJlMTZfdG9fY3B1X24pOwogCiAJLyogU1RPUk1zIGZpcm13YXJlICovCi0JYnAtPnRzZW1faW50X3RhYmxlX2RhdGEgPSBicC0+ZmlybXdhcmUtPmRhdGEgKwotCQliZTMyX3RvX2NwdShmd19oZHItPnRzZW1faW50X3RhYmxlX2RhdGEub2Zmc2V0KTsKLQlicC0+dHNlbV9wcmFtX2RhdGEgICAgICA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCi0JCWJlMzJfdG9fY3B1KGZ3X2hkci0+dHNlbV9wcmFtX2RhdGEub2Zmc2V0KTsKLQlicC0+dXNlbV9pbnRfdGFibGVfZGF0YSA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCi0JCWJlMzJfdG9fY3B1KGZ3X2hkci0+dXNlbV9pbnRfdGFibGVfZGF0YS5vZmZzZXQpOwotCWJwLT51c2VtX3ByYW1fZGF0YSAgICAgID0gYnAtPmZpcm13YXJlLT5kYXRhICsKLQkJYmUzMl90b19jcHUoZndfaGRyLT51c2VtX3ByYW1fZGF0YS5vZmZzZXQpOwotCWJwLT54c2VtX2ludF90YWJsZV9kYXRhID0gYnAtPmZpcm13YXJlLT5kYXRhICsKLQkJYmUzMl90b19jcHUoZndfaGRyLT54c2VtX2ludF90YWJsZV9kYXRhLm9mZnNldCk7Ci0JYnAtPnhzZW1fcHJhbV9kYXRhICAgICAgPSBicC0+ZmlybXdhcmUtPmRhdGEgKwotCQliZTMyX3RvX2NwdShmd19oZHItPnhzZW1fcHJhbV9kYXRhLm9mZnNldCk7Ci0JYnAtPmNzZW1faW50X3RhYmxlX2RhdGEgPSBicC0+ZmlybXdhcmUtPmRhdGEgKwotCQliZTMyX3RvX2NwdShmd19oZHItPmNzZW1faW50X3RhYmxlX2RhdGEub2Zmc2V0KTsKLQlicC0+Y3NlbV9wcmFtX2RhdGEgICAgICA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCi0JCWJlMzJfdG9fY3B1KGZ3X2hkci0+Y3NlbV9wcmFtX2RhdGEub2Zmc2V0KTsKKwlJTklUX1RTRU1fSU5UX1RBQkxFX0RBVEEoYnApID0gYnAtPmZpcm13YXJlLT5kYXRhICsKKwkJCWJlMzJfdG9fY3B1KGZ3X2hkci0+dHNlbV9pbnRfdGFibGVfZGF0YS5vZmZzZXQpOworCUlOSVRfVFNFTV9QUkFNX0RBVEEoYnApICAgICAgPSBicC0+ZmlybXdhcmUtPmRhdGEgKworCQkJYmUzMl90b19jcHUoZndfaGRyLT50c2VtX3ByYW1fZGF0YS5vZmZzZXQpOworCUlOSVRfVVNFTV9JTlRfVEFCTEVfREFUQShicCkgPSBicC0+ZmlybXdhcmUtPmRhdGEgKworCQkJYmUzMl90b19jcHUoZndfaGRyLT51c2VtX2ludF90YWJsZV9kYXRhLm9mZnNldCk7CisJSU5JVF9VU0VNX1BSQU1fREFUQShicCkgICAgICA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCisJCQliZTMyX3RvX2NwdShmd19oZHItPnVzZW1fcHJhbV9kYXRhLm9mZnNldCk7CisJSU5JVF9YU0VNX0lOVF9UQUJMRV9EQVRBKGJwKSA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCisJCQliZTMyX3RvX2NwdShmd19oZHItPnhzZW1faW50X3RhYmxlX2RhdGEub2Zmc2V0KTsKKwlJTklUX1hTRU1fUFJBTV9EQVRBKGJwKSAgICAgID0gYnAtPmZpcm13YXJlLT5kYXRhICsKKwkJCWJlMzJfdG9fY3B1KGZ3X2hkci0+eHNlbV9wcmFtX2RhdGEub2Zmc2V0KTsKKwlJTklUX0NTRU1fSU5UX1RBQkxFX0RBVEEoYnApID0gYnAtPmZpcm13YXJlLT5kYXRhICsKKwkJCWJlMzJfdG9fY3B1KGZ3X2hkci0+Y3NlbV9pbnRfdGFibGVfZGF0YS5vZmZzZXQpOworCUlOSVRfQ1NFTV9QUkFNX0RBVEEoYnApICAgICAgPSBicC0+ZmlybXdhcmUtPmRhdGEgKworCQkJYmUzMl90b19jcHUoZndfaGRyLT5jc2VtX3ByYW1fZGF0YS5vZmZzZXQpOwogCiAJcmV0dXJuIDA7CisKIGluaXRfb2Zmc2V0c19hbGxvY19lcnI6CiAJa2ZyZWUoYnAtPmluaXRfb3BzKTsKIGluaXRfb3BzX2FsbG9jX2VycjoKQEAgLTExMjk2LDE4ICsxMTkwNSwxNCBAQAogfQogCiAKLQogc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7Ci0Jc3RhdGljIGludCB2ZXJzaW9uX3ByaW50ZWQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJc3RydWN0IGJueDJ4ICpicDsKKwlpbnQgcGNpZV93aWR0aCwgcGNpZV9zcGVlZDsKIAlpbnQgcmM7CiAKLQlpZiAodmVyc2lvbl9wcmludGVkKysgPT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKLQogCS8qIGRldiB6ZXJvZWQgaW4gaW5pdF9ldGhlcmRldiAqLwogCWRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZigqYnApLCBNQVhfQ09OVEVYVCk7CiAJaWYgKCFkZXYpIHsKQEAgLTExMzE4LDE0ICsxMTkyMywxNCBAQAogCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlicC0+bXNnbGV2ZWwgPSBkZWJ1ZzsKIAorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCiAJcmMgPSBibngyeF9pbml0X2RldihwZGV2LCBkZXYpOwogCWlmIChyYyA8IDApIHsKIAkJZnJlZV9uZXRkZXYoZGV2KTsKIAkJcmV0dXJuIHJjOwogCX0KIAotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwotCiAJcmMgPSBibngyeF9pbml0X2JwKGJwKTsKIAlpZiAocmMpCiAJCWdvdG8gaW5pdF9vbmVfZXhpdDsKQEAgLTExMzQzLDExICsxMTk0OCwxMSBAQAogCQlnb3RvIGluaXRfb25lX2V4aXQ7CiAJfQogCisJYm54MnhfZ2V0X3BjaWVfd2lkdGhfc3BlZWQoYnAsICZwY2llX3dpZHRoLCAmcGNpZV9zcGVlZCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzICglYyVkKSBQQ0ktRSB4JWQgJXMgZm91bmQgYXQgbWVtICVseCwiCiAJICAgICAgICIgSVJRICVkLCAiLCBkZXYtPm5hbWUsIGJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZSwKIAkgICAgICAgKENISVBfUkVWKGJwKSA+PiAxMikgKyAnQScsIChDSElQX01FVEFMKGJwKSA+PiA0KSwKLQkgICAgICAgYm54MnhfZ2V0X3BjaWVfd2lkdGgoYnApLAotCSAgICAgICAoYm54MnhfZ2V0X3BjaWVfc3BlZWQoYnApID09IDIpID8gIjVHSHogKEdlbjIpIiA6ICIyLjVHSHoiLAorCSAgICAgICBwY2llX3dpZHRoLCAocGNpZV9zcGVlZCA9PSAyKSA/ICI1R0h6IChHZW4yKSIgOiAiMi41R0h6IiwKIAkgICAgICAgZGV2LT5iYXNlX2FkZHIsIGJwLT5wZGV2LT5pcnEpOwogCXByaW50ayhLRVJOX0NPTlQgIm5vZGUgYWRkciAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOwogCkBAIC0xMTU1NCw2ICsxMjE1OSwxMSBAQAogCiAJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkgeworCQlydG5sX3VubG9jaygpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9CisKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKQogCQlibngyeF9lZWhfbmljX3VubG9hZChicCk7CiAKQEAgLTExNjQwLDYgKzEyMjUwLDggQEAKIHsKIAlpbnQgcmV0OwogCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKKwogCWJueDJ4X3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImJueDJ4Iik7CiAJaWYgKGJueDJ4X3dxID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGNyZWF0ZSB3b3JrcXVldWVcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfcmVnLmggYi9kcml2ZXJzL25ldC9ibngyeF9yZWcuaAppbmRleCBiOGNlNmZjLi4wNjk1YmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9yZWcuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9yZWcuaApAQCAtMTkwLDEyICsxOTAsNiBAQAogICAgXygwLi4xNSkgc3RhbmRzIGZvciB0aGUgY29ubmVjdGlvbiB0eXBlIChvbmUgb2YgMTYpLiAqLwogI2RlZmluZSBDQ01fUkVHX05fU01fQ1RYX0xEXzAJCQkJCSAweGQwMDRjCiAjZGVmaW5lIENDTV9SRUdfTl9TTV9DVFhfTERfMQkJCQkJIDB4ZDAwNTAKLSNkZWZpbmUgQ0NNX1JFR19OX1NNX0NUWF9MRF8xMAkJCQkJIDB4ZDAwNzQKLSNkZWZpbmUgQ0NNX1JFR19OX1NNX0NUWF9MRF8xMQkJCQkJIDB4ZDAwNzgKLSNkZWZpbmUgQ0NNX1JFR19OX1NNX0NUWF9MRF8xMgkJCQkJIDB4ZDAwN2MKLSNkZWZpbmUgQ0NNX1JFR19OX1NNX0NUWF9MRF8xMwkJCQkJIDB4ZDAwODAKLSNkZWZpbmUgQ0NNX1JFR19OX1NNX0NUWF9MRF8xNAkJCQkJIDB4ZDAwODQKLSNkZWZpbmUgQ0NNX1JFR19OX1NNX0NUWF9MRF8xNQkJCQkJIDB4ZDAwODgKICNkZWZpbmUgQ0NNX1JFR19OX1NNX0NUWF9MRF8yCQkJCQkgMHhkMDA1NAogI2RlZmluZSBDQ01fUkVHX05fU01fQ1RYX0xEXzMJCQkJCSAweGQwMDU4CiAjZGVmaW5lIENDTV9SRUdfTl9TTV9DVFhfTERfNAkJCQkJIDB4ZDAwNWMKQEAgLTM3MCw3ICszNjQsNiBAQAogI2RlZmluZSBDRkNfUkVHX05VTV9MQ0lEU19MRUFWSU5HCQkJCSAweDEwNDAxOAogLyogW1JXIDhdIFRoZSBldmVudCBpZCBmb3IgYWdncmVnYXRlZCBpbnRlcnJ1cHQgMCAqLwogI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzAJCQkJIDB4YzIwMzgKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8xCQkJCSAweGMyMDNjCiAjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTAJCQkJIDB4YzIwNjAKICNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8xMQkJCQkgMHhjMjA2NAogI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEyCQkJCSAweGMyMDY4CkBAIC0zNzgsMzcgKzM3MSwyNyBAQAogI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE0CQkJCSAweGMyMDcwCiAjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTUJCQkJIDB4YzIwNzQKICNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8xNgkJCQkgMHhjMjA3OAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE3CQkJCSAweGMyMDdjCi0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTgJCQkJIDB4YzIwODAKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8xOQkJCQkgMHhjMjA4NAogI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIJCQkJIDB4YzIwNDAKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8yMAkJCQkgMHhjMjA4OAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIxCQkJCSAweGMyMDhjCi0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjIJCQkJIDB4YzIwOTAKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8yMwkJCQkgMHhjMjA5NAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI0CQkJCSAweGMyMDk4Ci0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjUJCQkJIDB4YzIwOWMKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8yNgkJCQkgMHhjMjBhMAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI3CQkJCSAweGMyMGE0Ci0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjgJCQkJIDB4YzIwYTgKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8yOQkJCQkgMHhjMjBhYwogI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMJCQkJIDB4YzIwNDQKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8zMAkJCQkgMHhjMjBiMAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMxCQkJCSAweGMyMGI0CiAjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfNAkJCQkgMHhjMjA0OAotLyogW1JXIDFdIFRoZSBUIGJpdCBmb3IgYWdncmVnYXRlZCBpbnRlcnJ1cHQgMCAqLwotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX1RfMAkJCQkJIDB4YzIwYjgKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9UXzEJCQkJCSAweGMyMGJjCi0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfVF8xMAkJCQkJIDB4YzIwZTAKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9UXzExCQkJCQkgMHhjMjBlNAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX1RfMTIJCQkJCSAweGMyMGU4Ci0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfVF8xMwkJCQkJIDB4YzIwZWMKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9UXzE0CQkJCQkgMHhjMjBmMAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX1RfMTUJCQkJCSAweGMyMGY0Ci0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfVF8xNgkJCQkJIDB4YzIwZjgKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9UXzE3CQkJCQkgMHhjMjBmYwotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX1RfMTgJCQkJCSAweGMyMTAwCi0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfVF8xOQkJCQkJIDB4YzIxMDQKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF81CQkJCSAweGMyMDRjCisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfNgkJCQkgMHhjMjA1MAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzcJCQkJIDB4YzIwNTQKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF84CQkJCSAweGMyMDU4CisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfOQkJCQkgMHhjMjA1YworLyogW1JXIDFdIEZvciBlYWNoIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IGluZGV4IHdoZXRoZXIgdGhlIG1vZGUgaXMgbm9ybWFsICgwKQorICAgb3IgYXV0by1tYXNrLW1vZGUgKDEpICovCisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfTU9ERV8xMAkJCQkgMHhjMjFlMAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX01PREVfMTEJCQkJIDB4YzIxZTQKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9NT0RFXzEyCQkJCSAweGMyMWU4CisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfTU9ERV8xMwkJCQkgMHhjMjFlYworI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX01PREVfMTQJCQkJIDB4YzIxZjAKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9NT0RFXzE1CQkJCSAweGMyMWY0CisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfTU9ERV8xNgkJCQkgMHhjMjFmOAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX01PREVfNiAJCQkJIDB4YzIxZDAKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9NT0RFXzcgCQkJCSAweGMyMWQ0CisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfTU9ERV84IAkJCQkgMHhjMjFkOAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX01PREVfOSAJCQkJIDB4YzIxZGMKIC8qIFtSVyAxM10gVGhlIHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGludGVybmFsIFJBTSBmb3IgdGhlIGNmY19yc3AgbGNpZCAqLwogI2RlZmluZSBDU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIJCQkJIDB4YzIwMDgKIC8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMwICovCkBAIC02MzMsMjQgKzYxNiw2IEBACiAjZGVmaW5lIERNQUVfUkVHX0dPX0MxCQkJCQkJIDB4MTAyMDg0CiAvKiBbUlcgMV0gQ29tbWFuZCAxMCBnby4gKi8KICNkZWZpbmUgRE1BRV9SRUdfR09fQzEwIAkJCQkJIDB4MTAyMDg4Ci0jZGVmaW5lIERNQUVfUkVHX0dPX0MxMF9TSVpFCQkJCQkgMQotLyogW1JXIDFdIENvbW1hbmQgMTEgZ28uICovCi0jZGVmaW5lIERNQUVfUkVHX0dPX0MxMSAJCQkJCSAweDEwMjA4YwotI2RlZmluZSBETUFFX1JFR19HT19DMTFfU0laRQkJCQkJIDEKLS8qIFtSVyAxXSBDb21tYW5kIDEyIGdvLiAqLwotI2RlZmluZSBETUFFX1JFR19HT19DMTIgCQkJCQkgMHgxMDIwOTAKLSNkZWZpbmUgRE1BRV9SRUdfR09fQzEyX1NJWkUJCQkJCSAxCi0vKiBbUlcgMV0gQ29tbWFuZCAxMyBnby4gKi8KLSNkZWZpbmUgRE1BRV9SRUdfR09fQzEzIAkJCQkJIDB4MTAyMDk0Ci0jZGVmaW5lIERNQUVfUkVHX0dPX0MxM19TSVpFCQkJCQkgMQotLyogW1JXIDFdIENvbW1hbmQgMTQgZ28uICovCi0jZGVmaW5lIERNQUVfUkVHX0dPX0MxNCAJCQkJCSAweDEwMjA5OAotI2RlZmluZSBETUFFX1JFR19HT19DMTRfU0laRQkJCQkJIDEKLS8qIFtSVyAxXSBDb21tYW5kIDE1IGdvLiAqLwotI2RlZmluZSBETUFFX1JFR19HT19DMTUgCQkJCQkgMHgxMDIwOWMKLSNkZWZpbmUgRE1BRV9SRUdfR09fQzE1X1NJWkUJCQkJCSAxCi0vKiBbUlcgMV0gQ29tbWFuZCAxMCBnby4gKi8KLSNkZWZpbmUgRE1BRV9SRUdfR09fQzEwIAkJCQkJIDB4MTAyMDg4CiAvKiBbUlcgMV0gQ29tbWFuZCAxMSBnby4gKi8KICNkZWZpbmUgRE1BRV9SRUdfR09fQzExIAkJCQkJIDB4MTAyMDhjCiAvKiBbUlcgMV0gQ29tbWFuZCAxMiBnby4gKi8KQEAgLTgwMCw3ICs3NjUsNiBAQAogI2RlZmluZSBNQ1BfUkVHX01DUFJfTlZNX1JFQUQJCQkJCSAweDg2NDEwCiAjZGVmaW5lIE1DUF9SRUdfTUNQUl9OVk1fU1dfQVJCIAkJCQkgMHg4NjQyMAogI2RlZmluZSBNQ1BfUkVHX01DUFJfTlZNX1dSSVRFCQkJCQkgMHg4NjQwOAotI2RlZmluZSBNQ1BfUkVHX01DUFJfTlZNX1dSSVRFMSAJCQkJIDB4ODY0MjgKICNkZWZpbmUgTUNQX1JFR19NQ1BSX1NDUkFUQ0gJCQkJCSAweGEwMDAwCiAvKiBbUiAzMl0gcmVhZCBmaXJzdCAzMiBiaXQgYWZ0ZXIgaW52ZXJzaW9uIG9mIGZ1bmN0aW9uIDAuIG1hcHBlZCBhcwogICAgZm9sbG93czogWzBdIE5JRyBhdHRlbnRpb24gZm9yIGZ1bmN0aW9uMDsgWzFdIE5JRyBhdHRlbnRpb24gZm9yCkBAIC0xMTg2LDE5ICsxMTUwLDcgQEAKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMAkJCQkgMHhhMDI4CiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTEJCQkJIDB4YTAyYwogI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzEyCQkJCSAweGEwMzAKLSNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMwkJCQkgMHhhMDM0Ci0jZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTQJCQkJIDB4YTAzOAotI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzE1CQkJCSAweGEwM2MKLSNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xNgkJCQkgMHhhMDQwCi0jZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTcJCQkJIDB4YTA0NAotI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzE4CQkJCSAweGEwNDgKLSNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xOQkJCQkgMHhhMDRjCi0jZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTAJCQkJIDB4YTAyOAotI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzExCQkJCSAweGEwMmMKLSNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMgkJCQkgMHhhMDMwCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMgkJCQkgMHhhMDA4Ci0jZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMjAJCQkJIDB4YTA1MAotI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzIxCQkJCSAweGEwNTQKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8zCQkJCSAweGEwMGMKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl80CQkJCSAweGEwMTAKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl81CQkJCSAweGEwMTQKQEAgLTEyOTAsMTM3ICsxMjQyLDEzIEBACiAgICBzZXQuIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgY2xlYXIgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBmcmVlIGEgY2xpZW50CiAgICBpdCBkb2Vzbid0IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXIGludGVycnVwdCB3aWxsCiAgICBiZSBhc3NlcnRlZCkuICovCi0jZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzEwCQkJCSAweGEzZTAKLSNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTBfU0laRSAJCQkgMgotLyogW1JXIDMyXSBUaGUgZm9sbG93aW5nIGRyaXZlciByZWdpc3RlcnMoMS4uLjE2KSByZXByZXNlbnQgMTYgZHJpdmVycyBhbmQKLSAgIDMyIGNsaWVudHMuIEVhY2ggY2xpZW50IGNhbiBiZSBjb250cm9sbGVkIGJ5IG9uZSBkcml2ZXIgb25seS4gT25lIGluIGVhY2gKLSAgIGJpdCByZXByZXNlbnQgdGhhdCB0aGlzIGRyaXZlciBjb250cm9sIHRoZSBhcHByb3ByaWF0ZSBjbGllbnQgKEV4OiBiaXQgNQotICAgaXMgc2V0IG1lYW5zIHRoaXMgZHJpdmVyIGNvbnRyb2wgY2xpZW50IG51bWJlciA1KS4gYWRkcjEgPSBzZXQ7IGFkZHIwID0KLSAgIGNsZWFyOyByZWFkIGZyb20gYm90aCBhZGRyZXNzZXMgd2lsbCBnaXZlIHRoZSBzYW1lIHJlc3VsdCA9IHN0YXR1cy4gd3JpdGUKLSAgIHRvIGFkZHJlc3MgMSB3aWxsIHNldCBhIHJlcXVlc3QgdG8gY29udHJvbCBhbGwgdGhlIGNsaWVudHMgdGhhdCB0aGVpcgotICAgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMgc2V0LiBpZiB0aGUgY2xpZW50IGlzIGZyZWUgKHRoZQotICAgYXBwcm9wcmlhdGUgYml0IGluIGFsbCB0aGUgb3RoZXIgZHJpdmVycyBpcyBjbGVhcikgb25lIHdpbGwgYmUgd3JpdHRlbiB0bwotICAgdGhhdCBkcml2ZXIgcmVnaXN0ZXI7IGlmIHRoZSBjbGllbnQgaXNuJ3QgZnJlZSB0aGUgYml0IHdpbGwgcmVtYWluIHplcm8uCi0gICBpZiB0aGUgYXBwcm9wcmlhdGUgYml0IGlzIHNldCAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGdhaW4gY29udHJvbCBvbiBhCi0gICBjbGllbnQgaXQgYWxyZWFkeSBjb250cm9scyB0aGUgfk1JU0NfUkVHSVNURVJTX0lOVF9TVFMuR0VORVJJQ19TVwotICAgaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQpLiB3cml0ZSB0byBhZGRyZXNzIDAgd2lsbCBzZXQgYSByZXF1ZXN0IHRvCi0gICBmcmVlIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyIGFwcHJvcHJpYXRlIGJpdCAoaW4gdGhlIHdyaXRlIGNvbW1hbmQpIGlzCi0gICBzZXQuIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgY2xlYXIgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBmcmVlIGEgY2xpZW50Ci0gICBpdCBkb2Vzbid0IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXIGludGVycnVwdCB3aWxsCi0gICBiZSBhc3NlcnRlZCkuICovCi0jZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzExCQkJCSAweGEzZTgKLSNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTFfU0laRSAJCQkgMgotLyogW1JXIDMyXSBUaGUgZm9sbG93aW5nIGRyaXZlciByZWdpc3RlcnMoMS4uLjE2KSByZXByZXNlbnQgMTYgZHJpdmVycyBhbmQKLSAgIDMyIGNsaWVudHMuIEVhY2ggY2xpZW50IGNhbiBiZSBjb250cm9sbGVkIGJ5IG9uZSBkcml2ZXIgb25seS4gT25lIGluIGVhY2gKLSAgIGJpdCByZXByZXNlbnQgdGhhdCB0aGlzIGRyaXZlciBjb250cm9sIHRoZSBhcHByb3ByaWF0ZSBjbGllbnQgKEV4OiBiaXQgNQotICAgaXMgc2V0IG1lYW5zIHRoaXMgZHJpdmVyIGNvbnRyb2wgY2xpZW50IG51bWJlciA1KS4gYWRkcjEgPSBzZXQ7IGFkZHIwID0KLSAgIGNsZWFyOyByZWFkIGZyb20gYm90aCBhZGRyZXNzZXMgd2lsbCBnaXZlIHRoZSBzYW1lIHJlc3VsdCA9IHN0YXR1cy4gd3JpdGUKLSAgIHRvIGFkZHJlc3MgMSB3aWxsIHNldCBhIHJlcXVlc3QgdG8gY29udHJvbCBhbGwgdGhlIGNsaWVudHMgdGhhdCB0aGVpcgotICAgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMgc2V0LiBpZiB0aGUgY2xpZW50IGlzIGZyZWUgKHRoZQotICAgYXBwcm9wcmlhdGUgYml0IGluIGFsbCB0aGUgb3RoZXIgZHJpdmVycyBpcyBjbGVhcikgb25lIHdpbGwgYmUgd3JpdHRlbiB0bwotICAgdGhhdCBkcml2ZXIgcmVnaXN0ZXI7IGlmIHRoZSBjbGllbnQgaXNuJ3QgZnJlZSB0aGUgYml0IHdpbGwgcmVtYWluIHplcm8uCi0gICBpZiB0aGUgYXBwcm9wcmlhdGUgYml0IGlzIHNldCAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGdhaW4gY29udHJvbCBvbiBhCi0gICBjbGllbnQgaXQgYWxyZWFkeSBjb250cm9scyB0aGUgfk1JU0NfUkVHSVNURVJTX0lOVF9TVFMuR0VORVJJQ19TVwotICAgaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQpLiB3cml0ZSB0byBhZGRyZXNzIDAgd2lsbCBzZXQgYSByZXF1ZXN0IHRvCi0gICBmcmVlIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyIGFwcHJvcHJpYXRlIGJpdCAoaW4gdGhlIHdyaXRlIGNvbW1hbmQpIGlzCi0gICBzZXQuIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgY2xlYXIgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBmcmVlIGEgY2xpZW50Ci0gICBpdCBkb2Vzbid0IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXIGludGVycnVwdCB3aWxsCi0gICBiZSBhc3NlcnRlZCkuICovCi0jZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzEyCQkJCSAweGEzZjAKLSNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTJfU0laRSAJCQkgMgotLyogW1JXIDMyXSBUaGUgZm9sbG93aW5nIGRyaXZlciByZWdpc3RlcnMoMS4uLjE2KSByZXByZXNlbnQgMTYgZHJpdmVycyBhbmQKLSAgIDMyIGNsaWVudHMuIEVhY2ggY2xpZW50IGNhbiBiZSBjb250cm9sbGVkIGJ5IG9uZSBkcml2ZXIgb25seS4gT25lIGluIGVhY2gKLSAgIGJpdCByZXByZXNlbnQgdGhhdCB0aGlzIGRyaXZlciBjb250cm9sIHRoZSBhcHByb3ByaWF0ZSBjbGllbnQgKEV4OiBiaXQgNQotICAgaXMgc2V0IG1lYW5zIHRoaXMgZHJpdmVyIGNvbnRyb2wgY2xpZW50IG51bWJlciA1KS4gYWRkcjEgPSBzZXQ7IGFkZHIwID0KLSAgIGNsZWFyOyByZWFkIGZyb20gYm90aCBhZGRyZXNzZXMgd2lsbCBnaXZlIHRoZSBzYW1lIHJlc3VsdCA9IHN0YXR1cy4gd3JpdGUKLSAgIHRvIGFkZHJlc3MgMSB3aWxsIHNldCBhIHJlcXVlc3QgdG8gY29udHJvbCBhbGwgdGhlIGNsaWVudHMgdGhhdCB0aGVpcgotICAgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMgc2V0LiBpZiB0aGUgY2xpZW50IGlzIGZyZWUgKHRoZQotICAgYXBwcm9wcmlhdGUgYml0IGluIGFsbCB0aGUgb3RoZXIgZHJpdmVycyBpcyBjbGVhcikgb25lIHdpbGwgYmUgd3JpdHRlbiB0bwotICAgdGhhdCBkcml2ZXIgcmVnaXN0ZXI7IGlmIHRoZSBjbGllbnQgaXNuJ3QgZnJlZSB0aGUgYml0IHdpbGwgcmVtYWluIHplcm8uCi0gICBpZiB0aGUgYXBwcm9wcmlhdGUgYml0IGlzIHNldCAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGdhaW4gY29udHJvbCBvbiBhCi0gICBjbGllbnQgaXQgYWxyZWFkeSBjb250cm9scyB0aGUgfk1JU0NfUkVHSVNURVJTX0lOVF9TVFMuR0VORVJJQ19TVwotICAgaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQpLiB3cml0ZSB0byBhZGRyZXNzIDAgd2lsbCBzZXQgYSByZXF1ZXN0IHRvCi0gICBmcmVlIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyIGFwcHJvcHJpYXRlIGJpdCAoaW4gdGhlIHdyaXRlIGNvbW1hbmQpIGlzCi0gICBzZXQuIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgY2xlYXIgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBmcmVlIGEgY2xpZW50Ci0gICBpdCBkb2Vzbid0IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXIGludGVycnVwdCB3aWxsCi0gICBiZSBhc3NlcnRlZCkuICovCi0jZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzEzCQkJCSAweGEzZjgKLSNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTNfU0laRSAJCQkgMgotLyogW1JXIDMyXSBUaGUgZm9sbG93aW5nIGRyaXZlciByZWdpc3RlcnMoMS4uLjE2KSByZXByZXNlbnQgMTYgZHJpdmVycyBhbmQKLSAgIDMyIGNsaWVudHMuIEVhY2ggY2xpZW50IGNhbiBiZSBjb250cm9sbGVkIGJ5IG9uZSBkcml2ZXIgb25seS4gT25lIGluIGVhY2gKLSAgIGJpdCByZXByZXNlbnQgdGhhdCB0aGlzIGRyaXZlciBjb250cm9sIHRoZSBhcHByb3ByaWF0ZSBjbGllbnQgKEV4OiBiaXQgNQotICAgaXMgc2V0IG1lYW5zIHRoaXMgZHJpdmVyIGNvbnRyb2wgY2xpZW50IG51bWJlciA1KS4gYWRkcjEgPSBzZXQ7IGFkZHIwID0KLSAgIGNsZWFyOyByZWFkIGZyb20gYm90aCBhZGRyZXNzZXMgd2lsbCBnaXZlIHRoZSBzYW1lIHJlc3VsdCA9IHN0YXR1cy4gd3JpdGUKLSAgIHRvIGFkZHJlc3MgMSB3aWxsIHNldCBhIHJlcXVlc3QgdG8gY29udHJvbCBhbGwgdGhlIGNsaWVudHMgdGhhdCB0aGVpcgotICAgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMgc2V0LiBpZiB0aGUgY2xpZW50IGlzIGZyZWUgKHRoZQotICAgYXBwcm9wcmlhdGUgYml0IGluIGFsbCB0aGUgb3RoZXIgZHJpdmVycyBpcyBjbGVhcikgb25lIHdpbGwgYmUgd3JpdHRlbiB0bwotICAgdGhhdCBkcml2ZXIgcmVnaXN0ZXI7IGlmIHRoZSBjbGllbnQgaXNuJ3QgZnJlZSB0aGUgYml0IHdpbGwgcmVtYWluIHplcm8uCi0gICBpZiB0aGUgYXBwcm9wcmlhdGUgYml0IGlzIHNldCAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGdhaW4gY29udHJvbCBvbiBhCi0gICBjbGllbnQgaXQgYWxyZWFkeSBjb250cm9scyB0aGUgfk1JU0NfUkVHSVNURVJTX0lOVF9TVFMuR0VORVJJQ19TVwotICAgaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQpLiB3cml0ZSB0byBhZGRyZXNzIDAgd2lsbCBzZXQgYSByZXF1ZXN0IHRvCi0gICBmcmVlIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyIGFwcHJvcHJpYXRlIGJpdCAoaW4gdGhlIHdyaXRlIGNvbW1hbmQpIGlzCi0gICBzZXQuIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgY2xlYXIgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBmcmVlIGEgY2xpZW50Ci0gICBpdCBkb2Vzbid0IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXIGludGVycnVwdCB3aWxsCi0gICBiZSBhc3NlcnRlZCkuICovCiAjZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzEJCQkJIDB4YTUxMAotI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xNAkJCQkgMHhhNWUwCi0jZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzE0X1NJWkUgCQkJIDIKLS8qIFtSVyAzMl0gVGhlIGZvbGxvd2luZyBkcml2ZXIgcmVnaXN0ZXJzKDEuLi4xNikgcmVwcmVzZW50IDE2IGRyaXZlcnMgYW5kCi0gICAzMiBjbGllbnRzLiBFYWNoIGNsaWVudCBjYW4gYmUgY29udHJvbGxlZCBieSBvbmUgZHJpdmVyIG9ubHkuIE9uZSBpbiBlYWNoCi0gICBiaXQgcmVwcmVzZW50IHRoYXQgdGhpcyBkcml2ZXIgY29udHJvbCB0aGUgYXBwcm9wcmlhdGUgY2xpZW50IChFeDogYml0IDUKLSAgIGlzIHNldCBtZWFucyB0aGlzIGRyaXZlciBjb250cm9sIGNsaWVudCBudW1iZXIgNSkuIGFkZHIxID0gc2V0OyBhZGRyMCA9Ci0gICBjbGVhcjsgcmVhZCBmcm9tIGJvdGggYWRkcmVzc2VzIHdpbGwgZ2l2ZSB0aGUgc2FtZSByZXN1bHQgPSBzdGF0dXMuIHdyaXRlCi0gICB0byBhZGRyZXNzIDEgd2lsbCBzZXQgYSByZXF1ZXN0IHRvIGNvbnRyb2wgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIKLSAgIGFwcHJvcHJpYXRlIGJpdCAoaW4gdGhlIHdyaXRlIGNvbW1hbmQpIGlzIHNldC4gaWYgdGhlIGNsaWVudCBpcyBmcmVlICh0aGUKLSAgIGFwcHJvcHJpYXRlIGJpdCBpbiBhbGwgdGhlIG90aGVyIGRyaXZlcnMgaXMgY2xlYXIpIG9uZSB3aWxsIGJlIHdyaXR0ZW4gdG8KLSAgIHRoYXQgZHJpdmVyIHJlZ2lzdGVyOyBpZiB0aGUgY2xpZW50IGlzbid0IGZyZWUgdGhlIGJpdCB3aWxsIHJlbWFpbiB6ZXJvLgotICAgaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBzZXQgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBnYWluIGNvbnRyb2wgb24gYQotICAgY2xpZW50IGl0IGFscmVhZHkgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cKLSAgIGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkKS4gd3JpdGUgdG8gYWRkcmVzcyAwIHdpbGwgc2V0IGEgcmVxdWVzdCB0bwotICAgZnJlZSBhbGwgdGhlIGNsaWVudHMgdGhhdCB0aGVpciBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcwotICAgc2V0LiBpZiB0aGUgYXBwcm9wcmlhdGUgYml0IGlzIGNsZWFyICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZnJlZSBhIGNsaWVudAotICAgaXQgZG9lc24ndCBjb250cm9scyB0aGUgfk1JU0NfUkVHSVNURVJTX0lOVF9TVFMuR0VORVJJQ19TVyBpbnRlcnJ1cHQgd2lsbAotICAgYmUgYXNzZXJ0ZWQpLiAqLwotI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xNQkJCQkgMHhhNWU4Ci0jZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzE1X1NJWkUgCQkJIDIKLS8qIFtSVyAzMl0gVGhlIGZvbGxvd2luZyBkcml2ZXIgcmVnaXN0ZXJzKDEuLi4xNikgcmVwcmVzZW50IDE2IGRyaXZlcnMgYW5kCi0gICAzMiBjbGllbnRzLiBFYWNoIGNsaWVudCBjYW4gYmUgY29udHJvbGxlZCBieSBvbmUgZHJpdmVyIG9ubHkuIE9uZSBpbiBlYWNoCi0gICBiaXQgcmVwcmVzZW50IHRoYXQgdGhpcyBkcml2ZXIgY29udHJvbCB0aGUgYXBwcm9wcmlhdGUgY2xpZW50IChFeDogYml0IDUKLSAgIGlzIHNldCBtZWFucyB0aGlzIGRyaXZlciBjb250cm9sIGNsaWVudCBudW1iZXIgNSkuIGFkZHIxID0gc2V0OyBhZGRyMCA9Ci0gICBjbGVhcjsgcmVhZCBmcm9tIGJvdGggYWRkcmVzc2VzIHdpbGwgZ2l2ZSB0aGUgc2FtZSByZXN1bHQgPSBzdGF0dXMuIHdyaXRlCi0gICB0byBhZGRyZXNzIDEgd2lsbCBzZXQgYSByZXF1ZXN0IHRvIGNvbnRyb2wgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIKLSAgIGFwcHJvcHJpYXRlIGJpdCAoaW4gdGhlIHdyaXRlIGNvbW1hbmQpIGlzIHNldC4gaWYgdGhlIGNsaWVudCBpcyBmcmVlICh0aGUKLSAgIGFwcHJvcHJpYXRlIGJpdCBpbiBhbGwgdGhlIG90aGVyIGRyaXZlcnMgaXMgY2xlYXIpIG9uZSB3aWxsIGJlIHdyaXR0ZW4gdG8KLSAgIHRoYXQgZHJpdmVyIHJlZ2lzdGVyOyBpZiB0aGUgY2xpZW50IGlzbid0IGZyZWUgdGhlIGJpdCB3aWxsIHJlbWFpbiB6ZXJvLgotICAgaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBzZXQgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBnYWluIGNvbnRyb2wgb24gYQotICAgY2xpZW50IGl0IGFscmVhZHkgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cKLSAgIGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkKS4gd3JpdGUgdG8gYWRkcmVzcyAwIHdpbGwgc2V0IGEgcmVxdWVzdCB0bwotICAgZnJlZSBhbGwgdGhlIGNsaWVudHMgdGhhdCB0aGVpciBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcwotICAgc2V0LiBpZiB0aGUgYXBwcm9wcmlhdGUgYml0IGlzIGNsZWFyICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZnJlZSBhIGNsaWVudAotICAgaXQgZG9lc24ndCBjb250cm9scyB0aGUgfk1JU0NfUkVHSVNURVJTX0lOVF9TVFMuR0VORVJJQ19TVyBpbnRlcnJ1cHQgd2lsbAotICAgYmUgYXNzZXJ0ZWQpLiAqLwotI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xNgkJCQkgMHhhNWYwCi0jZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzE2X1NJWkUgCQkJIDIKLS8qIFtSVyAzMl0gVGhlIGZvbGxvd2luZyBkcml2ZXIgcmVnaXN0ZXJzKDEuLi4xNikgcmVwcmVzZW50IDE2IGRyaXZlcnMgYW5kCi0gICAzMiBjbGllbnRzLiBFYWNoIGNsaWVudCBjYW4gYmUgY29udHJvbGxlZCBieSBvbmUgZHJpdmVyIG9ubHkuIE9uZSBpbiBlYWNoCi0gICBiaXQgcmVwcmVzZW50IHRoYXQgdGhpcyBkcml2ZXIgY29udHJvbCB0aGUgYXBwcm9wcmlhdGUgY2xpZW50IChFeDogYml0IDUKLSAgIGlzIHNldCBtZWFucyB0aGlzIGRyaXZlciBjb250cm9sIGNsaWVudCBudW1iZXIgNSkuIGFkZHIxID0gc2V0OyBhZGRyMCA9Ci0gICBjbGVhcjsgcmVhZCBmcm9tIGJvdGggYWRkcmVzc2VzIHdpbGwgZ2l2ZSB0aGUgc2FtZSByZXN1bHQgPSBzdGF0dXMuIHdyaXRlCi0gICB0byBhZGRyZXNzIDEgd2lsbCBzZXQgYSByZXF1ZXN0IHRvIGNvbnRyb2wgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIKLSAgIGFwcHJvcHJpYXRlIGJpdCAoaW4gdGhlIHdyaXRlIGNvbW1hbmQpIGlzIHNldC4gaWYgdGhlIGNsaWVudCBpcyBmcmVlICh0aGUKLSAgIGFwcHJvcHJpYXRlIGJpdCBpbiBhbGwgdGhlIG90aGVyIGRyaXZlcnMgaXMgY2xlYXIpIG9uZSB3aWxsIGJlIHdyaXR0ZW4gdG8KLSAgIHRoYXQgZHJpdmVyIHJlZ2lzdGVyOyBpZiB0aGUgY2xpZW50IGlzbid0IGZyZWUgdGhlIGJpdCB3aWxsIHJlbWFpbiB6ZXJvLgotICAgaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBzZXQgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBnYWluIGNvbnRyb2wgb24gYQotICAgY2xpZW50IGl0IGFscmVhZHkgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cKLSAgIGludGVycnVwdCB3aWxsIGJlIGFzc2VydGVkKS4gd3JpdGUgdG8gYWRkcmVzcyAwIHdpbGwgc2V0IGEgcmVxdWVzdCB0bwotICAgZnJlZSBhbGwgdGhlIGNsaWVudHMgdGhhdCB0aGVpciBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcwotICAgc2V0LiBpZiB0aGUgYXBwcm9wcmlhdGUgYml0IGlzIGNsZWFyICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZnJlZSBhIGNsaWVudAotICAgaXQgZG9lc24ndCBjb250cm9scyB0aGUgfk1JU0NfUkVHSVNURVJTX0lOVF9TVFMuR0VORVJJQ19TVyBpbnRlcnJ1cHQgd2lsbAotICAgYmUgYXNzZXJ0ZWQpLiAqLwogI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF83CQkJCSAweGEzYzgKIC8qIFtSVyAxXSBlMWhtZiBmb3IgV09MLiBJZiBjbHIgV09MIHNpZ25hbCBvIHRoZSBQWFAgd2lsbCBiZSBzZW5kIG9uIGJpdCAwCiAgICBvbmx5LiAqLwogI2RlZmluZSBNSVNDX1JFR19FMUhNRl9NT0RFCQkJCQkgMHhhNWY4CisvKiBbUlcgMzJdIERlYnVnIG9ubHk6IHNwYXJlIFJXIHJlZ2lzdGVyIHJlc2V0IGJ5IGNvcmUgcmVzZXQgKi8KKyNkZWZpbmUgTUlTQ19SRUdfR0VORVJJQ19DUl8wCQkJCQkgMHhhNDYwCiAvKiBbUlcgMzJdIEdQSU8uIFszMS0yOF0gRkxPQVQgcG9ydCAwOyBbMjctMjRdIEZMT0FUIHBvcnQgMDsgV2hlbiBhbnkgb2YKICAgIHRoZXNlIGJpdHMgaXMgd3JpdHRlbiBhcyBhICcxJzsgdGhlIGNvcnJlc3BvbmRpbmcgU1BJTyBiaXQgd2lsbCB0dXJuIG9mZgogICAgaXQncyBkcml2ZXJzIGFuZCBiZWNvbWUgYW4gaW5wdXQuIFRoaXMgaXMgdGhlIHJlc2V0IHN0YXRlIG9mIGFsbCBHUElPCkBAIC0xNjE2LDYgKzE0NDQsMTEgQEAKIC8qIFtSVyAxXSBTZXQgYnkgdGhlIE1DUCB0byByZW1lbWJlciBpZiBvbmUgb3IgbW9yZSBvZiB0aGUgZHJpdmVycyBpcy9hcmUKICAgIGxvYWRlZDsgMC1wcmVwYXJlOyAtdW5wcmVwYXJlICovCiAjZGVmaW5lIE1JU0NfUkVHX1VOUFJFUEFSRUQJCQkJCSAweGE0MjQKKyNkZWZpbmUgTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX0JSQ1NUCSAoMHgxPDwwKQorI2RlZmluZSBOSUdfTExIMF9CUkIxX0RSVl9NQVNLX1JFR19MTEgwX0JSQjFfRFJWX01BU0tfTUxDU1QJICgweDE8PDEpCisjZGVmaW5lIE5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19OT19WTEFOCSAoMHgxPDw0KQorI2RlZmluZSBOSUdfTExIMF9CUkIxX0RSVl9NQVNLX1JFR19MTEgwX0JSQjFfRFJWX01BU0tfVU5DU1QJICgweDE8PDIpCisjZGVmaW5lIE5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19WTEFOCSAoMHgxPDwzKQogI2RlZmluZSBOSUdfTUFTS19JTlRFUlJVUFRfUE9SVDBfUkVHX01BU0tfRU1BQzBfTUlTQ19NSV9JTlQJICgweDE8PDApCiAjZGVmaW5lIE5JR19NQVNLX0lOVEVSUlVQVF9QT1JUMF9SRUdfTUFTS19TRVJERVMwX0xJTktfU1RBVFVTCSAoMHgxPDw5KQogI2RlZmluZSBOSUdfTUFTS19JTlRFUlJVUFRfUE9SVDBfUkVHX01BU0tfWEdYUzBfTElOSzEwRyAJICgweDE8PDE1KQpAQCAtMTY1NCwxMiArMTQ4NywxMiBAQAogLyogW1JXIDFdIE1BQyBjb25maWd1cmF0aW9uIGZvciBwYWNrZXRzIG9mIHBvcnQwLiBJZiAxIC0gYWxsIHBhY2tldCBvdXRwdXRzCiAgICB0byBlbWFjIGZvciBwb3J0MDsgb3RoZXIgd2F5IHRvIGJtYWMgZm9yIHBvcnQwICovCiAjZGVmaW5lIE5JR19SRUdfRUdSRVNTX0VNQUMwX1BPUlQJCQkJIDB4MTAwNTgKLS8qIFtSVyAzMl0gVFhfTU5HX0ZJRk8gaW4gTklHX1RYX1BPUlQwOyBkYXRhWzMxOjBdIHdyaXR0ZW4gaW4gRklGTyBvcmRlci4gKi8KLSNkZWZpbmUgTklHX1JFR19FR1JFU1NfTU5HMF9GSUZPCQkJCSAweDEwNDVjCiAvKiBbUlcgMV0gSW5wdXQgZW5hYmxlIGZvciBUWCBQQkYgdXNlciBwYWNrZXQgcG9ydDAgSUYgKi8KICNkZWZpbmUgTklHX1JFR19FR1JFU1NfUEJGMF9JTl9FTgkJCQkgMHgxMDBjYwogLyogW1JXIDFdIElucHV0IGVuYWJsZSBmb3IgVFggUEJGIHVzZXIgcGFja2V0IHBvcnQxIElGICovCiAjZGVmaW5lIE5JR19SRUdfRUdSRVNTX1BCRjFfSU5fRU4JCQkJIDB4MTAwZDAKKy8qIFtSVyAxXSBJbnB1dCBlbmFibGUgZm9yIFRYIFVNUCBtYW5hZ2VtZW50IHBhY2tldCBwb3J0MCBJRiAqLworI2RlZmluZSBOSUdfUkVHX0VHUkVTU19VTVAwX0lOX0VOCQkJCSAweDEwMGQ0CiAvKiBbUlcgMV0gSW5wdXQgZW5hYmxlIGZvciBSWF9FTUFDMCBJRiAqLwogI2RlZmluZSBOSUdfUkVHX0VNQUMwX0lOX0VOCQkJCQkgMHgxMDBhNAogLyogW1JXIDFdIG91dHB1dCBlbmFibGUgZm9yIFRYIEVNQUMgcGF1c2UgcG9ydCAwIElGICovCkBAIC0xNjgzLDYgKzE1MTYsMjQgQEAKIC8qIFtSVyAxN10gRGVidWcgb25seS4gUlhfRU9QX0RTQ1JfbGJfRklGTyBpbiBOSUdfUlhfRU9QLiBEYXRhCiAgICBwYWNrZXRfbGVuZ3RoWzEzOjBdOyBtYWNfZXJyb3JbMTRdOyB0cnVuY19lcnJvclsxNV07IHBhcml0eVsxNl0gKi8KICNkZWZpbmUgTklHX1JFR19JTkdSRVNTX0VPUF9MQl9GSUZPCQkJCSAweDEwNGU0CisvKiBbUlcgMjddIDAgLSBtdXN0IGJlIGFjdGl2ZSBmb3IgRXZlcmVzdCBBMDsgMS0gZm9yIEV2ZXJlc3QgQjAgd2hlbiBsYXRjaAorICAgbG9naWMgZm9yIGludGVycnVwdHMgbXVzdCBiZSB1c2VkLiBFbmFibGUgcGVyIGJpdCBvZiBpbnRlcnJ1cHQgb2YKKyAgIH5sYXRjaF9zdGF0dXMubGF0Y2hfc3RhdHVzICovCisjZGVmaW5lIE5JR19SRUdfTEFUQ0hfQkNfMAkJCQkJIDB4MTYyMTAKKy8qIFtSVyAyN10gTGF0Y2ggZm9yIGVhY2ggaW50ZXJydXB0IGZyb20gVW5pY29yZS5iWzBdCisgICBzdGF0dXNfZW1hYzBfbWlzY19taV9pbnQ7IGJbMV0gc3RhdHVzX2VtYWMwX21pc2NfbWlfY29tcGxldGU7CisgICBiWzJdc3RhdHVzX2VtYWMwX21pc2NfY2ZnX2NoYW5nZTsgYlszXXN0YXR1c19lbWFjMF9taXNjX2xpbmtfc3RhdHVzOworICAgYls0XXN0YXR1c19lbWFjMF9taXNjX2xpbmtfY2hhbmdlOyBiWzVdc3RhdHVzX2VtYWMwX21pc2NfYXR0bjsKKyAgIGJbNl1zdGF0dXNfc2VyZGVzMF9tYWNfY3JzOyBiWzddc3RhdHVzX3NlcmRlczBfYXV0b25lZ19jb21wbGV0ZTsKKyAgIGJbOF1zdGF0dXNfc2VyZGVzMF9maWJlcl9yeGFjdDsgYls5XXN0YXR1c19zZXJkZXMwX2xpbmtfc3RhdHVzOworICAgYlsxMF1zdGF0dXNfc2VyZGVzMF9tcl9wYWdlX3J4OyBiWzExXXN0YXR1c19zZXJkZXMwX2NsNzNfYW5fY29tcGxldGU7CisgICBiWzEyXXN0YXR1c19zZXJkZXMwX2NsNzNfbXJfcGFnZV9yeDsgYlsxM11zdGF0dXNfc2VyZGVzMF9yeF9zaWdkZXQ7CisgICBiWzE0XXN0YXR1c194Z3hzMF9yZW1vdGVtZGlvcmVxOyBiWzE1XXN0YXR1c194Z3hzMF9saW5rMTBnOworICAgYlsxNl1zdGF0dXNfeGd4czBfYXV0b25lZ19jb21wbGV0ZTsgYlsxN11zdGF0dXNfeGd4czBfZmliZXJfcnhhY3Q7CisgICBiWzIxOjE4XXN0YXR1c194Z3hzMF9saW5rX3N0YXR1czsgYlsyMl1zdGF0dXNfeGd4czBfbXJfcGFnZV9yeDsKKyAgIGJbMjNdc3RhdHVzX3hneHMwX2NsNzNfYW5fY29tcGxldGU7IGJbMjRdc3RhdHVzX3hneHMwX2NsNzNfbXJfcGFnZV9yeDsKKyAgIGJbMjVdc3RhdHVzX3hneHMwX3J4X3NpZ2RldDsgYlsyNl1zdGF0dXNfeGd4czBfbWFjX2NycyAqLworI2RlZmluZSBOSUdfUkVHX0xBVENIX1NUQVRVU18wCQkJCQkgMHgxODAwMAogLyogW1JXIDFdIGxlZCAxMGcgZm9yIHBvcnQgMCAqLwogI2RlZmluZSBOSUdfUkVHX0xFRF8xMEdfUDAJCQkJCSAweDEwMzIwCiAvKiBbUlcgMV0gbGVkIDEwZyBmb3IgcG9ydCAxICovCkBAIC0xNzIyLDYgKzE1NzMsNyBAQAogLyogW1JXIDNdIGZvciBwb3J0MCBlbmFibGUgZm9yIGxsZmMgcHBwIGFuZCBwYXVzZS4gYjAgLSBicmIxIGVuYWJsZTsgYjEtCiAgICB0c2RtIGVuYWJsZTsgYjItIHVzZG0gZW5hYmxlICovCiAjZGVmaW5lIE5JR19SRUdfTExGQ19FR1JFU1NfU1JDX0VOQUJMRV8wCQkJIDB4MTYwNzAKKyNkZWZpbmUgTklHX1JFR19MTEZDX0VHUkVTU19TUkNfRU5BQkxFXzEJCQkgMHgxNjA3NAogLyogW1JXIDFdIFNBRkMgZW5hYmxlIGZvciBwb3J0MC4gVGhpcyByZWdpc3RlciBtYXkgZ2V0IDEgb25seSB3aGVuCiAgICB+cHBwX2VuYWJsZS5wcHBfZW5hYmxlID0gMCBhbmQgcGF1c2VfZW5hYmxlLnBhdXNlX2VuYWJsZSA9MCBmb3IgdGhlIHNhbWUKICAgIHBvcnQgKi8KQEAgLTE4NzIsNiArMTcyNCw3IEBACiAjZGVmaW5lIE5JR19SRUdfWEdYU19MQU5FX1NFTF9QMAkJCQkgMHgxMDJlOAogLyogW1JXIDFdIHNlbGVjdGlvbiBmb3IgcG9ydDAgZm9yIE5JR19NVVggYmxvY2sgOiAwID0gU2VyRGVzOyAxID0gWEdYUyAqLwogI2RlZmluZSBOSUdfUkVHX1hHWFNfU0VSREVTMF9NT0RFX1NFTAkJCQkgMHgxMDJlMAorI2RlZmluZSBOSUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMF9SRUdfU1RBVFVTX0VNQUMwX01JU0NfTUlfSU5UICAoMHgxPDwwKQogI2RlZmluZSBOSUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMF9SRUdfU1RBVFVTX1NFUkRFUzBfTElOS19TVEFUVVMgKDB4MTw8OSkKICNkZWZpbmUgTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19YR1hTMF9MSU5LMTBHCSAoMHgxPDwxNSkKICNkZWZpbmUgTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVUyAgKDB4Zjw8MTgpCkBAIC0yMDcyLDYgKzE5MjUsNyBAQAogI2RlZmluZSBQWFAyX1JFR19QR0xfQUREUl85NF9GMCAJCQkJIDB4MTIwNTQwCiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9DT05UUk9MMAkJCQkJIDB4MTIwNDkwCiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9DT05UUk9MMQkJCQkJIDB4MTIwNTE0CisjZGVmaW5lIFBYUDJfUkVHX1BHTF9ERUJVRwkJCQkJIDB4MTIwNTIwCiAvKiBbUlcgMzJdIHRoaXJkIGR3b3JkIGRhdGEgb2YgZXhwYW5zaW9uIHJvbSByZXF1ZXN0LiB0aGlzIHJlZ2lzdGVyIGlzCiAgICBzcGVjaWFsLiByZWFkaW5nIGZyb20gaXQgcHJvdmlkZXMgYSB2ZWN0b3Igb3V0c3RhbmRpbmcgcmVhZCByZXF1ZXN0cy4gaWYKICAgIGEgYml0IGlzIHplcm8gaXQgbWVhbnMgdGhhdCBhIHJlYWQgcmVxdWVzdCBvbiB0aGUgY29ycmVzcG9uZGluZyB0YWcgZGlkCkBAIC0yMTQyLDExICsxOTk2LDggQEAKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfQUREMQkJCQkJIDB4MTIwMWMwCiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEwIAkJCQkgMHgxMjAxZTQKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfQUREMTEgCQkJCSAweDEyMDFlOAotI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19BREQxMCAJCQkJIDB4MTIwMWU0Ci0jZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX0FERDExIAkJCQkgMHgxMjAxZTgKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfQUREMgkJCQkJIDB4MTIwMWM0CiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX0FERDI4IAkJCQkgMHgxMjAyMjgKLSNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfQUREMjggCQkJCSAweDEyMDIyOAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19BREQzCQkJCQkgMHgxMjAxYzgKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfQURENgkJCQkJIDB4MTIwMWQ0CiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX0FERDcJCQkJCSAweDEyMDFkOApAQCAtMjE1NiwxMSArMjAwNyw4IEBACiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX0wxCQkJCQkgMHgxMjAyYjAKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfTDEwCQkJCQkgMHgxMjAyZDQKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfTDExCQkJCQkgMHgxMjAyZDgKLSNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfTDEwCQkJCQkgMHgxMjAyZDQKLSNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfTDExCQkJCQkgMHgxMjAyZDgKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfTDIJCQkJCSAweDEyMDJiNAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19MMjgJCQkJCSAweDEyMDMxOAotI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19MMjgJCQkJCSAweDEyMDMxOAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19MMwkJCQkJIDB4MTIwMmI4CiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX0w2CQkJCQkgMHgxMjAyYzQKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfTDcJCQkJCSAweDEyMDJjOApAQCAtMjE3MCwxMSArMjAxOCw4IEBACiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX1VCMQkJCQkJIDB4MTIwMjM4CiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX1VCMTAJCQkJCSAweDEyMDI1YwogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19VQjExCQkJCQkgMHgxMjAyNjAKLSNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfVUIxMAkJCQkJIDB4MTIwMjVjCi0jZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX1VCMTEJCQkJCSAweDEyMDI2MAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19VQjIJCQkJCSAweDEyMDIzYwogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19VQjI4CQkJCQkgMHgxMjAyYTAKLSNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfVUIyOAkJCQkJIDB4MTIwMmEwCiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX1VCMwkJCQkJIDB4MTIwMjQwCiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX1VCNgkJCQkJIDB4MTIwMjRjCiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX1VCNwkJCQkJIDB4MTIwMjUwCkBAIC0yMjMyLDYgKzIwNzcsOSBAQAogICAgYWxsb2NhdGVkIGZvciB2cTIyICovCiAjZGVmaW5lIFBYUDJfUkVHX1JEX01BWF9CTEtTX1ZRMjIJCQkJIDB4MTIwM2QwCiAvKiBbUlcgOF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyBpbiBUZXRyaXMgQnVmZmVyIHRoYXQgY2FuIGJlCisgICBhbGxvY2F0ZWQgZm9yIHZxMjUgKi8KKyNkZWZpbmUgUFhQMl9SRUdfUkRfTUFYX0JMS1NfVlEyNQkJCQkgMHgxMjAzZGMKKy8qIFtSVyA4XSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIGluIFRldHJpcyBCdWZmZXIgdGhhdCBjYW4gYmUKICAgIGFsbG9jYXRlZCBmb3IgdnE2ICovCiAjZGVmaW5lIFBYUDJfUkVHX1JEX01BWF9CTEtTX1ZRNgkJCQkgMHgxMjAzOTAKIC8qIFtSVyA4XSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIGluIFRldHJpcyBCdWZmZXIgdGhhdCBjYW4gYmUKQEAgLTI3NjIsMTYgKzI2MTAsNiBAQAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMDcJCQkJCSAweDE2ZTRiOAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMDgJCQkJCSAweDE2ZTRiYwogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMDkJCQkJCSAweDE2ZTRjMAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMDAJCQkJCSAweDE2ZTQ5YwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMDEJCQkJCSAweDE2ZTRhMAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMDIJCQkJCSAweDE2ZTRhNAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMDMJCQkJCSAweDE2ZTRhOAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMDQJCQkJCSAweDE2ZTRhYwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMDUJCQkJCSAweDE2ZTRiMAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMDYJCQkJCSAweDE2ZTRiNAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMDcJCQkJCSAweDE2ZTRiOAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMDgJCQkJCSAweDE2ZTRiYwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMDkJCQkJCSAweDE2ZTRjMAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMQkJCQkJIDB4MTY4MTIwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzExMAkJCQkJIDB4MTZlNGM0CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzExMQkJCQkJIDB4MTZlNGM4CkBAIC0yNzgzLDE2ICsyNjIxLDYgQEAKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE3CQkJCQkgMHgxNmU0ZTAKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE4CQkJCQkgMHgxNmU0ZTQKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE5CQkJCQkgMHgxNmU0ZTgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTEwCQkJCQkgMHgxNmU0YzQKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTExCQkJCQkgMHgxNmU0YzgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTEyCQkJCQkgMHgxNmU0Y2MKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTEzCQkJCQkgMHgxNmU0ZDAKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE0CQkJCQkgMHgxNmU0ZDQKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE1CQkJCQkgMHgxNmU0ZDgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE2CQkJCQkgMHgxNmU0ZGMKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE3CQkJCQkgMHgxNmU0ZTAKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE4CQkJCQkgMHgxNmU0ZTQKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTE5CQkJCQkgMHgxNmU0ZTgKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTIJCQkJCSAweDE2ODEyNAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjAJCQkJCSAweDE2ZTRlYwogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMjEJCQkJCSAweDE2ZTRmMApAQCAtMjgwMiwxNCArMjYzMCw2IEBACiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEyNQkJCQkJIDB4MTZlNTAwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEyNgkJCQkJIDB4MTZlNTA0CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEyNwkJCQkJIDB4MTZlNTA4Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEyMAkJCQkJIDB4MTZlNGVjCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEyMQkJCQkJIDB4MTZlNGYwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEyMgkJCQkJIDB4MTZlNGY0Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEyMwkJCQkJIDB4MTZlNGY4Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEyNAkJCQkJIDB4MTZlNGZjCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEyNQkJCQkJIDB4MTZlNTAwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEyNgkJCQkJIDB4MTZlNTA0Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEyNwkJCQkJIDB4MTZlNTA4CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEzCQkJCQkgMHgxNjgxMjgKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTQJCQkJCSAweDE2ODEyYwogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xNQkJCQkJIDB4MTY4MTMwCkBAIC0yODU1LDE2ICsyNjc1LDYgQEAKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNTcJCQkJCSAweDE2ODFkOAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF81OAkJCQkJIDB4MTY4MWRjCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzU5CQkJCQkgMHgxNjgxZTAKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNTAJCQkJCSAweDE2ODFiYwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF81MQkJCQkJIDB4MTY4MWMwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzUyCQkJCQkgMHgxNjgxYzQKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNTMJCQkJCSAweDE2ODFjOAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF81NAkJCQkJIDB4MTY4MWNjCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzU1CQkJCQkgMHgxNjgxZDAKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNTYJCQkJCSAweDE2ODFkNAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF81NwkJCQkJIDB4MTY4MWQ4Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzU4CQkJCQkgMHgxNjgxZGMKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNTkJCQkJCSAweDE2ODFlMAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82CQkJCQkgMHgxNjgxMGMKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjAJCQkJCSAweDE2ODFlNAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82MQkJCQkJIDB4MTY4MWU4CkBAIC0yODcyLDE2ICsyNjgyLDYgQEAKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjMJCQkJCSAweDE2ODFmMAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82NAkJCQkJIDB4MTZlNDBjCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzY1CQkJCQkgMHgxNmU0MTAKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjYJCQkJCSAweDE2ZTQxNAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82NwkJCQkJIDB4MTZlNDE4Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzY4CQkJCQkgMHgxNmU0MWMKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjkJCQkJCSAweDE2ZTQyMAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82MAkJCQkJIDB4MTY4MWU0Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzYxCQkJCQkgMHgxNjgxZTgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjIJCQkJCSAweDE2ODFlYwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82MwkJCQkJIDB4MTY4MWYwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzY0CQkJCQkgMHgxNmU0MGMKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjUJCQkJCSAweDE2ZTQxMAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82OQkJCQkJIDB4MTZlNDIwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzcJCQkJCSAweDE2ODExMAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83MAkJCQkJIDB4MTZlNDI0CkBAIC0yODk0LDI5ICsyNjk0LDkgQEAKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzcJCQkJCSAweDE2ZTQ0MAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83OAkJCQkJIDB4MTZlNDQ0CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzc5CQkJCQkgMHgxNmU0NDgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzAJCQkJCSAweDE2ZTQyNAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83MQkJCQkJIDB4MTZlNDI4Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzcyCQkJCQkgMHgxNmU0MmMKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzMJCQkJCSAweDE2ZTQzMAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83NAkJCQkJIDB4MTZlNDM0Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzc1CQkJCQkgMHgxNmU0MzgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzYJCQkJCSAweDE2ZTQzYwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83NwkJCQkJIDB4MTZlNDQwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzc4CQkJCQkgMHgxNmU0NDQKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzkJCQkJCSAweDE2ZTQ0OAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84CQkJCQkgMHgxNjgxMTQKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODAJCQkJCSAweDE2ZTQ0YwogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84MQkJCQkJIDB4MTZlNDUwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzgyCQkJCQkgMHgxNmU0NTQKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODMJCQkJCSAweDE2ZTQ1OAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84NAkJCQkJIDB4MTZlNDVjCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzg1CQkJCQkgMHgxNmU0NjAKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODYJCQkJCSAweDE2ZTQ2NAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84NwkJCQkJIDB4MTZlNDY4Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzg4CQkJCQkgMHgxNmU0NmMKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODkJCQkJCSAweDE2ZTQ3MAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84MAkJCQkJIDB4MTZlNDRjCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzgxCQkJCQkgMHgxNmU0NTAKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODUJCQkJCSAweDE2ZTQ2MAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84NgkJCQkJIDB4MTZlNDY0CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzg3CQkJCQkgMHgxNmU0NjgKQEAgLTI5MzMsMjMgKzI3MTMsMTEgQEAKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTcJCQkJCSAweDE2ZTQ5MAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85OAkJCQkJIDB4MTZlNDk0CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzk5CQkJCQkgMHgxNmU0OTgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTAJCQkJCSAweDE2ZTQ3NAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85MQkJCQkJIDB4MTZlNDc4Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzkyCQkJCQkgMHgxNmU0N2MKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTMJCQkJCSAweDE2ZTQ4MAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85NAkJCQkJIDB4MTZlNDg0Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzk1CQkJCQkgMHgxNmU0ODgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTYJCQkJCSAweDE2ZTQ4YwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85NwkJCQkJIDB4MTZlNDkwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzk4CQkJCQkgMHgxNmU0OTQKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTkJCQkJCSAweDE2ZTQ5OAogLyogW1JXIDFdIEluaXRpYWxpemF0aW9uIGJpdCBjb21tYW5kICovCiAjZGVmaW5lIFFNX1JFR19TT0ZUX1JFU0VUCQkJCQkgMHgxNjg0MjgKIC8qIFtSVyA4XSBUaGUgY3JlZGl0IGNvc3QgcGVyIGV2ZXJ5IHRhc2sgaW4gdGhlIFFNLiBBIHZhbHVlIHBlciBlYWNoIFZPUSAqLwogI2RlZmluZSBRTV9SRUdfVEFTS0NSRENPU1RfMAkJCQkJIDB4MTY4MDljCiAjZGVmaW5lIFFNX1JFR19UQVNLQ1JEQ09TVF8xCQkJCQkgMHgxNjgwYTAKLSNkZWZpbmUgUU1fUkVHX1RBU0tDUkRDT1NUXzEwCQkJCQkgMHgxNjgwYzQKLSNkZWZpbmUgUU1fUkVHX1RBU0tDUkRDT1NUXzExCQkJCQkgMHgxNjgwYzgKICNkZWZpbmUgUU1fUkVHX1RBU0tDUkRDT1NUXzIJCQkJCSAweDE2ODBhNAogI2RlZmluZSBRTV9SRUdfVEFTS0NSRENPU1RfNAkJCQkJIDB4MTY4MGFjCiAjZGVmaW5lIFFNX1JFR19UQVNLQ1JEQ09TVF81CQkJCQkgMHgxNjgwYjAKQEAgLTI5NjIsMjQgKzI3MzAsMTggQEAKIC8qIFtSIDE2XSBUaGUgY3JlZGl0IHZhbHVlIGZvciBlYWNoIFZPUSAqLwogI2RlZmluZSBRTV9SRUdfVk9RQ1JFRElUXzAJCQkJCSAweDE2ODJkMAogI2RlZmluZSBRTV9SRUdfVk9RQ1JFRElUXzEJCQkJCSAweDE2ODJkNAotI2RlZmluZSBRTV9SRUdfVk9RQ1JFRElUXzEwCQkJCQkgMHgxNjgyZjgKLSNkZWZpbmUgUU1fUkVHX1ZPUUNSRURJVF8xMQkJCQkJIDB4MTY4MmZjCiAjZGVmaW5lIFFNX1JFR19WT1FDUkVESVRfNAkJCQkJIDB4MTY4MmUwCiAvKiBbUlcgMTZdIFRoZSBjcmVkaXQgdmFsdWUgdGhhdCBpZiBhYm92ZSB0aGUgUU0gaXMgY29uc2lkZXJlZCBhbG1vc3QgZnVsbCAqLwogI2RlZmluZSBRTV9SRUdfVk9RQ1JFRElUQUZVTExUSFIJCQkJIDB4MTY4MDkwCiAvKiBbUlcgMTZdIFRoZSBpbml0IGFuZCBtYXhpbXVtIGNyZWRpdCBmb3IgZWFjaCBWb1EgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUUlOSVRDUkVESVRfMAkJCQkJIDB4MTY4MDYwCiAjZGVmaW5lIFFNX1JFR19WT1FJTklUQ1JFRElUXzEJCQkJCSAweDE2ODA2NAotI2RlZmluZSBRTV9SRUdfVk9RSU5JVENSRURJVF8xMCAJCQkJIDB4MTY4MDg4Ci0jZGVmaW5lIFFNX1JFR19WT1FJTklUQ1JFRElUXzExIAkJCQkgMHgxNjgwOGMKICNkZWZpbmUgUU1fUkVHX1ZPUUlOSVRDUkVESVRfMgkJCQkJIDB4MTY4MDY4CiAjZGVmaW5lIFFNX1JFR19WT1FJTklUQ1JFRElUXzQJCQkJCSAweDE2ODA3MAogI2RlZmluZSBRTV9SRUdfVk9RSU5JVENSRURJVF81CQkJCQkgMHgxNjgwNzQKIC8qIFtSVyAxXSBUaGUgcG9ydCBvZiB3aGljaCBWT1EgYmVsb25ncyAqLwogI2RlZmluZSBRTV9SRUdfVk9RUE9SVF8wCQkJCQkgMHgxNjgyYTAKICNkZWZpbmUgUU1fUkVHX1ZPUVBPUlRfMQkJCQkJIDB4MTY4MmE0Ci0jZGVmaW5lIFFNX1JFR19WT1FQT1JUXzEwCQkJCQkgMHgxNjgyYzgKLSNkZWZpbmUgUU1fUkVHX1ZPUVBPUlRfMTEJCQkJCSAweDE2ODJjYwogI2RlZmluZSBRTV9SRUdfVk9RUE9SVF8yCQkJCQkgMHgxNjgyYTgKIC8qIFtSVyAzMl0gVGhlIHBoeXNpY2FsIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBWT1E7IHF1ZXVlcyAzMS0wICovCiAjZGVmaW5lIFFNX1JFR19WT1FRTUFTS18wX0xTQgkJCQkJIDB4MTY4MjQwCkBAIC0zMDc3LDM2ICsyODM5LDYgQEAKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMAkJCQkJIDB4MTY4ODBjCiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEJCQkJCSAweDE2ODgxMAogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMAkJCQkJIDB4MTY4ODE0Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEwX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTEJCQkJCSAweDE2ODgxOAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMV9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEyCQkJCQkgMHgxNjg4MWMKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTJfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMwkJCQkJIDB4MTY4ODIwCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEzX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTQJCQkJCSAweDE2ODgyNAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xNF9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE1CQkJCQkgMHgxNjg4MjgKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTVfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xNgkJCQkJIDB4MTZlMDAwCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE2X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTcJCQkJCSAweDE2ZTAwNAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xN19TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE4CQkJCQkgMHgxNmUwMDgKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMThfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xOQkJCQkJIDB4MTZlMDBjCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE5X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTAJCQkJCSAweDE2ODgxNAogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMQkJCQkJIDB4MTY4ODE4CiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEyCQkJCQkgMHgxNjg4MWMKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTMJCQkJCSAweDE2ODgyMApAQCAtMzExOCwzNiArMjg1MCw2IEBACiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE5CQkJCQkgMHgxNmUwMGMKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMgkJCQkJIDB4MTY4ODJjCiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIwCQkJCQkgMHgxNmUwMTAKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjBfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMQkJCQkJIDB4MTZlMDE0Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIxX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjIJCQkJCSAweDE2ZTAxOAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMl9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIzCQkJCQkgMHgxNmUwMWMKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjNfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNAkJCQkJIDB4MTZlMDIwCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI0X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjUJCQkJCSAweDE2ZTAyNAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNV9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI2CQkJCQkgMHgxNmUwMjgKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjZfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNwkJCQkJIDB4MTZlMDJjCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI3X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjgJCQkJCSAweDE2ZTAzMAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yOF9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI5CQkJCQkgMHgxNmUwMzQKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjlfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMAkJCQkJIDB4MTZlMDEwCiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIxCQkJCQkgMHgxNmUwMTQKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjIJCQkJCSAweDE2ZTAxOAogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMwkJCQkJIDB4MTZlMDFjCkBAIC0zMTU5LDEyICsyODYxLDYgQEAKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjkJCQkJCSAweDE2ZTAzNAogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zCQkJCQkgMHgxNjg4MzAKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMzAJCQkJCSAweDE2ZTAzOAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zMF9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzMxCQkJCQkgMHgxNmUwM2MKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMzFfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zMAkJCQkJIDB4MTZlMDM4CiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzMxCQkJCQkgMHgxNmUwM2MKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfNAkJCQkJIDB4MTY4ODM0CiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzUJCQkJCSAweDE2ODgzOApAQCAtMzE3NCwzNjIgKzI4NzAsNiBAQAogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU185CQkJCQkgMHgxNjg4NDgKIC8qIFtSIDZdIEtlZXAgdGhlIGZpbGwgbGV2ZWwgb2YgdGhlIGZpZm8gZnJvbSB3cml0ZSBjbGllbnQgMSAqLwogI2RlZmluZSBRTV9SRUdfWFFNX1dSQ19GSUZPTFZMCQkJCQkgMHgxNjgwMDAKLSNkZWZpbmUgQlJCMV9CUkIxX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQlJCMV9CUkIxX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgQlJCMV9CUkIxX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SIAkJICgweDE8PDApCi0jZGVmaW5lIEJSQjFfQlJCMV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBCUkIxX0JSQjFfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBCUkIxX0JSQjFfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBCUkIxX0JSQjFfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQlJCMV9CUkIxX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIENDTV9DQ01fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBDQ01fQ0NNX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCi0jZGVmaW5lIENDTV9DQ01fSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ0NNX0NDTV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBDQ01fQ0NNX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ0NNX0NDTV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIENDTV9DQ01fSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ0NNX0NDTV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKLSNkZWZpbmUgQ0RVX0NEVV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIENEVV9DRFVfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgQ0RVX0NEVV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBDRFVfQ0RVX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIENEVV9DRFVfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBDRFVfQ0RVX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgQ0RVX0NEVV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBDRFVfQ0RVX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAotI2RlZmluZSBDRkNfQ0ZDX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ0ZDX0NGQ19JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAotI2RlZmluZSBDRkNfQ0ZDX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIENGQ19DRkNfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgQ0ZDX0NGQ19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIENGQ19DRkNfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBDRkNfQ0ZDX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIENGQ19DRkNfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRSAJCSAwCi0jZGVmaW5lIENTRE1fQ1NETV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ1NETV9DU0RNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBDU0RNX0NTRE1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIENTRE1fQ1NETV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIENTRE1fQ1NETV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQotI2RlZmluZSBDU0RNX0NTRE1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIENTRE1fQ1NETV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIENTRE1fQ1NETV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIENTRU1fQ1NFTV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ1NFTV9DU0VNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBDU0VNX0NTRU1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIENTRU1fQ1NFTV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIENTRU1fQ1NFTV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQotI2RlZmluZSBDU0VNX0NTRU1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIENTRU1fQ1NFTV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIENTRU1fQ1NFTV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIERCR19EQkdfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBEQkdfREJHX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCi0jZGVmaW5lIERCR19EQkdfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgREJHX0RCR19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBEQkdfREJHX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgREJHX0RCR19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIERCR19EQkdfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgREJHX0RCR19JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKLSNkZWZpbmUgRE1BRV9ETUFFX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgRE1BRV9ETUFFX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgRE1BRV9ETUFFX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SIAkJICgweDE8PDApCi0jZGVmaW5lIERNQUVfRE1BRV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBETUFFX0RNQUVfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBETUFFX0RNQUVfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBETUFFX0RNQUVfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgRE1BRV9ETUFFX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIERPUlFfRE9SUV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIERPUlFfRE9SUV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIERPUlFfRE9SUV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUiAJCSAoMHgxPDwwKQotI2RlZmluZSBET1JRX0RPUlFfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgRE9SUV9ET1JRX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgRE9SUV9ET1JRX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgRE9SUV9ET1JRX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIERPUlFfRE9SUV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBIQ19IQ19JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SIAkJCSAoMHgxPDwwKQotI2RlZmluZSBIQ19IQ19JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAotI2RlZmluZSBIQ19IQ19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBIQ19IQ19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBIQ19IQ19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIEhDX0hDX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRSAJCSAwCi0jZGVmaW5lIEhDX0hDX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIEhDX0hDX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAotI2RlZmluZSBNSVNDX01JU0NfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBNSVNDX01JU0NfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBNSVNDX01JU0NfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IgCQkgKDB4MTw8MCkKLSNkZWZpbmUgTUlTQ19NSVNDX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIE1JU0NfTUlTQ19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIE1JU0NfTUlTQ19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIE1JU0NfTUlTQ19JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBNSVNDX01JU0NfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgTklHX05JR19JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgTklHX05JR19JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgTklHX05JR19JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SIAkJICgweDE8PDApCi0jZGVmaW5lIE5JR19OSUdfSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBOSUdfTklHX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBOSUdfTklHX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBOSUdfTklHX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgTklHX05JR19JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFBCRl9QQkZfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBQQkZfUEJGX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCi0jZGVmaW5lIFBCRl9QQkZfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgUEJGX1BCRl9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBQQkZfUEJGX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgUEJGX1BCRl9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFBCRl9QQkZfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgUEJGX1BCRl9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKLSNkZWZpbmUgUEJfUEJfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUiAJCQkgKDB4MTw8MCkKLSNkZWZpbmUgUEJfUEJfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgUEJfUEJfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgUEJfUEJfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgUEJfUEJfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBQQl9QQl9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAotI2RlZmluZSBQQl9QQl9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBQQl9QQl9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgUFJTX1BSU19JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFBSU19QUlNfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgUFJTX1BSU19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBQUlNfUFJTX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFBSU19QUlNfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBQUlNfUFJTX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgUFJTX1BSU19JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBQUlNfUFJTX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAotI2RlZmluZSBQWFAyX1BYUDJfSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFBYUDJfUFhQMl9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgUFhQMl9QWFAyX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQotI2RlZmluZSBQWFAyX1BYUDJfSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBQWFAyX1BYUDJfSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgUFhQMl9QWFAyX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBQWFAyX1BYUDJfSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBQWFAyX1BYUDJfSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBQWFBfUFhQX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBQWFBfUFhQX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBQWFBfUFhQX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1IgCQkgKDB4MTw8MCkKLSNkZWZpbmUgUFhQX1BYUF9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFBYUF9QWFBfSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFBYUF9QWFBfSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFBYUF9QWFBfSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBQWFBfUFhQX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgUU1fUU1fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUiAJCQkgKDB4MTw8MCkKLSNkZWZpbmUgUU1fUU1fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgUU1fUU1fSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgUU1fUU1fSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgUU1fUU1fSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBRTV9RTV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAotI2RlZmluZSBRTV9RTV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBRTV9RTV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgU0VNX0ZBU1RfU0VNX0ZBU1RfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIFNFTV9GQVNUX1NFTV9GQVNUX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkgMAotI2RlZmluZSBTRU1fRkFTVF9TRU1fRkFTVF9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUiAJICgweDE8PDApCi0jZGVmaW5lIFNFTV9GQVNUX1NFTV9GQVNUX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJIDAKLSNkZWZpbmUgU0VNX0ZBU1RfU0VNX0ZBU1RfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIFNFTV9GQVNUX1NFTV9GQVNUX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkgMAotI2RlZmluZSBTRU1fRkFTVF9TRU1fRkFTVF9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIFNFTV9GQVNUX1NFTV9GQVNUX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJIDAKLSNkZWZpbmUgU1JDX1NSQ19JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFNSQ19TUkNfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgU1JDX1NSQ19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBTUkNfU1JDX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFNSQ19TUkNfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBTUkNfU1JDX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgU1JDX1NSQ19JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBTUkNfU1JDX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAotI2RlZmluZSBUQ01fVENNX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVENNX1RDTV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAotI2RlZmluZSBUQ01fVENNX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFRDTV9UQ01fSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVENNX1RDTV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFRDTV9UQ01fSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBUQ01fVENNX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFRDTV9UQ01fSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRSAJCSAwCi0jZGVmaW5lIFRNX1RNX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IgCQkJICgweDE8PDApCi0jZGVmaW5lIFRNX1RNX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCi0jZGVmaW5lIFRNX1RNX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFRNX1RNX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFRNX1RNX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVE1fVE1fSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKLSNkZWZpbmUgVE1fVE1fSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVE1fVE1fSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCi0jZGVmaW5lIFRTRE1fVFNETV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVFNETV9UU0RNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBUU0RNX1RTRE1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIFRTRE1fVFNETV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFRTRE1fVFNETV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQotI2RlZmluZSBUU0RNX1RTRE1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFRTRE1fVFNETV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFRTRE1fVFNETV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFRTRU1fVFNFTV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVFNFTV9UU0VNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBUU0VNX1RTRU1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIFRTRU1fVFNFTV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFRTRU1fVFNFTV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQotI2RlZmluZSBUU0VNX1RTRU1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFRTRU1fVFNFTV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFRTRU1fVFNFTV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFVDTV9VQ01fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBVQ01fVUNNX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCi0jZGVmaW5lIFVDTV9VQ01fSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVUNNX1VDTV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBVQ01fVUNNX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVUNNX1VDTV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFVDTV9VQ01fSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVUNNX1VDTV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKLSNkZWZpbmUgVVNETV9VU0RNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBVU0RNX1VTRE1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFVTRE1fVVNETV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgVVNETV9VU0RNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVVNETV9VU0RNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIFVTRE1fVVNETV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVVNETV9VU0RNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVVNETV9VU0RNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVVNFTV9VU0VNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBVU0VNX1VTRU1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFVTRU1fVVNFTV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgVVNFTV9VU0VNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVVNFTV9VU0VNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIFVTRU1fVVNFTV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVVNFTV9VU0VNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVVNFTV9VU0VNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgWENNX1hDTV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFhDTV9YQ01fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgWENNX1hDTV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBYQ01fWENNX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFhDTV9YQ01fSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBYQ01fWENNX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgWENNX1hDTV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBYQ01fWENNX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAotI2RlZmluZSBYU0RNX1hTRE1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFhTRE1fWFNETV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgWFNETV9YU0RNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQotI2RlZmluZSBYU0RNX1hTRE1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBYU0RNX1hTRE1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgWFNETV9YU0RNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBYU0RNX1hTRE1fSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBYU0RNX1hTRE1fSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBYU0VNX1hTRU1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFhTRU1fWFNFTV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgWFNFTV9YU0VNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQotI2RlZmluZSBYU0VNX1hTRU1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBYU0VNX1hTRU1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgWFNFTV9YU0VNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBYU0VNX1hTRU1fSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBYU0VNX1hTRU1fSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBDRkNfREVCVUcxX1JFR19XUklURV9BQyAJCQkJICgweDE8PDQpCi0jZGVmaW5lIENGQ19ERUJVRzFfUkVHX1dSSVRFX0FDX1NJWkUJCQkJIDQKLS8qIFtSIDFdIGRlYnVnIG9ubHk6IFRoaXMgYml0IGluZGljYXRlcyB3aGV0aGVyIGluZGljYXRlcyB0aGF0IGV4dGVybmFsCi0gICBidWZmZXIgd2FzIHdyYXBwZWQgKG9sZGVzdCBkYXRhIHdhcyB0aHJvd24pOyBSZWxldmFudCBvbmx5IHdoZW4KLSAgIH5kYmdfcmVnaXN0ZXJzX2RlYnVnX3RhcmdldD0yIChQQ0kpICYgfmRiZ19yZWdpc3RlcnNfZnVsbF9tb2RlPTEgKHdyYXApOyAqLwotI2RlZmluZSBEQkdfUkVHX1dSQVBfT05fRVhUX0JVRkZFUgkJCQkgMHhjMTI0Ci0jZGVmaW5lIERCR19SRUdfV1JBUF9PTl9FWFRfQlVGRkVSX1NJWkUgCQkJIDEKLS8qIFtSIDFdIGRlYnVnIG9ubHk6IFRoaXMgYml0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBpbnRlcm5hbCBidWZmZXIgd2FzCi0gICB3cmFwcGVkIChvbGRlc3QgZGF0YSB3YXMgdGhyb3duKSBSZWxldmFudCBvbmx5IHdoZW4KLSAgIH5kYmdfcmVnaXN0ZXJzX2RlYnVnX3RhcmdldD0wIChpbnRlcm5hbCBidWZmZXIpICovCi0jZGVmaW5lIERCR19SRUdfV1JBUF9PTl9JTlRfQlVGRkVSCQkJCSAweGMxMjgKLSNkZWZpbmUgREJHX1JFR19XUkFQX09OX0lOVF9CVUZGRVJfU0laRSAJCQkgMQotI2RlZmluZSBRTV9RTV9QUlRZX1NUU19SRUdfV1JCVUZGCQkJCSAoMHgxPDw4KQotI2RlZmluZSBRTV9RTV9QUlRZX1NUU19SRUdfV1JCVUZGX1NJWkUJCQkJIDgKLSNkZWZpbmUgUU1fUU1fUFJUWV9TVFNfQ0xSX1JFR19XUkJVRkYJCQkJICgweDE8PDgpCi0jZGVmaW5lIFFNX1FNX1BSVFlfU1RTX0NMUl9SRUdfV1JCVUZGX1NJWkUJCQkgOAotI2RlZmluZSBRTV9RTV9QUlRZX1NUU19XUl9SRUdfV1JCVUZGCQkJCSAoMHgxPDw4KQotI2RlZmluZSBRTV9RTV9QUlRZX1NUU19XUl9SRUdfV1JCVUZGX1NJWkUJCQkgOAotI2RlZmluZSBRTV9RTV9QUlRZX01BU0tfUkVHX1dSQlVGRgkJCQkgKDB4MTw8OCkKLSNkZWZpbmUgUU1fUU1fUFJUWV9NQVNLX1JFR19XUkJVRkZfU0laRSAJCQkgOAotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18wCQkJCQkgMHgxNjg4MGMKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMF9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEJCQkJCSAweDE2ODgxMAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTAJCQkJCSAweDE2ODgxNAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMF9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzExCQkJCQkgMHgxNjg4MTgKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTFfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMgkJCQkJIDB4MTY4ODFjCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEyX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTMJCQkJCSAweDE2ODgyMAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xM19TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE0CQkJCQkgMHgxNjg4MjQKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTRfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xNQkJCQkJIDB4MTY4ODI4Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE1X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMgkJCQkJIDB4MTY4ODJjCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzJfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zCQkJCQkgMHgxNjg4MzAKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfM19TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzQJCQkJCSAweDE2ODgzNAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU180X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfNQkJCQkJIDB4MTY4ODM4Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzVfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU182CQkJCQkgMHgxNjg4M2MKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfNl9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzcJCQkJCSAweDE2ODg0MAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU183X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfOAkJCQkJIDB4MTY4ODQ0Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzhfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU185CQkJCQkgMHgxNjg4NDgKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfOV9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE2CQkJCQkgMHgxNmUwMDAKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTZfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xNwkJCQkJIDB4MTZlMDA0Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE3X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTgJCQkJCSAweDE2ZTAwOAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xOF9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE5CQkJCQkgMHgxNmUwMGMKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTlfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMAkJCQkJIDB4MTZlMDEwCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIwX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjEJCQkJCSAweDE2ZTAxNAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMV9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIyCQkJCQkgMHgxNmUwMTgKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjJfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMwkJCQkJIDB4MTZlMDFjCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIzX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjQJCQkJCSAweDE2ZTAyMAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNF9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI1CQkJCQkgMHgxNmUwMjQKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjVfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNgkJCQkJIDB4MTZlMDI4Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI2X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjcJCQkJCSAweDE2ZTAyYwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yN19TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI4CQkJCQkgMHgxNmUwMzAKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjhfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yOQkJCQkJIDB4MTZlMDM0Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI5X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMzAJCQkJCSAweDE2ZTAzOAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zMF9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzMxCQkJCQkgMHgxNmUwM2MKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMzFfU0laRQkJCQkgMQogI2RlZmluZSBTUkNfUkVHX0NPVU5URlJFRTAJCQkJCSAweDQwNTAwCiAvKiBbUlcgMV0gSWYgY2xyIHRoZSBzZWFyY2hlciBpcyBjb21wYXRpYmxlIHRvIEUxIEEwIC0gc3VwcG9ydCBvbmx5IHR3bwogICAgcG9ydHMuIElmIHNldCB0aGUgc2VhcmNoZXIgc3VwcG9ydCA4IGZ1bmN0aW9ucy4gKi8KQEAgLTM2MjksMTIgKzI5NjksNiBAQAogICAgdHlwZSAob25lIG9mIDE2KS4gKi8KICNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF8wCQkJCQkgMHg1MDA1MAogI2RlZmluZSBUQ01fUkVHX05fU01fQ1RYX0xEXzEJCQkJCSAweDUwMDU0Ci0jZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfMTAJCQkJCSAweDUwMDc4Ci0jZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfMTEJCQkJCSAweDUwMDdjCi0jZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfMTIJCQkJCSAweDUwMDgwCi0jZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfMTMJCQkJCSAweDUwMDg0Ci0jZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfMTQJCQkJCSAweDUwMDg4Ci0jZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfMTUJCQkJCSAweDUwMDhjCiAjZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfMgkJCQkJIDB4NTAwNTgKICNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF8zCQkJCQkgMHg1MDA1YwogI2RlZmluZSBUQ01fUkVHX05fU01fQ1RYX0xEXzQJCQkJCSAweDUwMDYwCkBAIC0zODI4LDYgKzMxNjIsNyBAQAogI2RlZmluZSBUTV9SRUdfTElOMF9QSFlfQUREUgkJCQkJIDB4MTY0MjcwCiAvKiBbUlcgMV0gTGluZWFyMCBwaHlzaWNhbCBhZGRyZXNzIHZhbGlkLiAqLwogI2RlZmluZSBUTV9SRUdfTElOMF9QSFlfQUREUl9WQUxJRAkJCQkgMHgxNjQyNDgKKyNkZWZpbmUgVE1fUkVHX0xJTjBfU0NBTl9PTgkJCQkJIDB4MTY0MGQwCiAvKiBbUlcgMjRdIExpbmVhcjAgYXJyYXkgc2NhbiB0aW1lb3V0LiAqLwogI2RlZmluZSBUTV9SRUdfTElOMF9TQ0FOX1RJTUUJCQkJCSAweDE2NDAzYwogLyogW1JXIDMyXSBMaW5lYXIxIGxvZ2ljIGFkZHJlc3MuICovCkBAIC0zODQwLDggKzMxNzUsNiBAQAogI2RlZmluZSBUTV9SRUdfTElOX1NFVENMUl9GSUZPX0FMRlVMTF9USFIJCQkgMHgxNjQwNzAKIC8qIFtSVyAyXSBMb2FkIHZhbHVlIGZvciBwY2kgYXJiaXRlciBjcmVkaXQgY250LiAqLwogI2RlZmluZSBUTV9SRUdfUENJQVJCX0NSRENOVF9WQUwJCQkJIDB4MTY0MjYwCi0vKiBbUlcgMV0gVGltZXIgc29mdHdhcmUgcmVzZXQgLSBhY3RpdmUgaGlnaC4gKi8KLSNkZWZpbmUgVE1fUkVHX1RJTUVSX1NPRlRfUlNUCQkJCQkgMHgxNjQwMDQKIC8qIFtSVyAyMF0gVGhlIGFtb3VudCBvZiBoYXJkd2FyZSBjeWNsZXMgZm9yIGVhY2ggdGltZXIgdGljay4gKi8KICNkZWZpbmUgVE1fUkVHX1RJTUVSX1RJQ0tfU0laRQkJCQkJIDB4MTY0MDFjCiAvKiBbUlcgOF0gVGltZXJzIENvbnRleHQgcmVnaW9uLiAqLwpAQCAtMzg1Myw0NCArMzE4NiwxMiBAQAogLyogW1JXIDhdIFRoZSBldmVudCBpZCBmb3IgYWdncmVnYXRlZCBpbnRlcnJ1cHQgMCAqLwogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzAJCQkJIDB4NDIwMzgKICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xCQkJCSAweDQyMDNjCi0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTAJCQkJIDB4NDIwNjAKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMQkJCQkgMHg0MjA2NAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEyCQkJCSAweDQyMDY4Ci0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTMJCQkJIDB4NDIwNmMKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNAkJCQkgMHg0MjA3MAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE1CQkJCSAweDQyMDc0Ci0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTYJCQkJIDB4NDIwNzgKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNwkJCQkgMHg0MjA3YwotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE4CQkJCSAweDQyMDgwCi0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTkJCQkJIDB4NDIwODQKICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yCQkJCSAweDQyMDQwCi0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjAJCQkJIDB4NDIwODgKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMQkJCQkgMHg0MjA4YwotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIyCQkJCSAweDQyMDkwCi0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjMJCQkJIDB4NDIwOTQKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yNAkJCQkgMHg0MjA5OAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI1CQkJCSAweDQyMDljCi0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjYJCQkJIDB4NDIwYTAKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yNwkJCQkgMHg0MjBhNAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI4CQkJCSAweDQyMGE4Ci0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjkJCQkJIDB4NDIwYWMKICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8zCQkJCSAweDQyMDQ0Ci0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzAJCQkJIDB4NDIwYjAKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8zMQkJCQkgMHg0MjBiNAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQJCQkJIDB4NDIwNDgKIC8qIFtSVyAxXSBUaGUgVCBiaXQgZm9yIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IDAgKi8KICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzAJCQkJCSAweDQyMGI4CiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xCQkJCQkgMHg0MjBiYwotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTAJCQkJCSAweDQyMGUwCi0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xMQkJCQkJIDB4NDIwZTQKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzEyCQkJCQkgMHg0MjBlOAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTMJCQkJCSAweDQyMGVjCi0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xNAkJCQkJIDB4NDIwZjAKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE1CQkJCQkgMHg0MjBmNAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTYJCQkJCSAweDQyMGY4Ci0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xNwkJCQkJIDB4NDIwZmMKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE4CQkJCQkgMHg0MjEwMAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTkJCQkJCSAweDQyMTA0CiAvKiBbUlcgMTNdIFRoZSBzdGFydCBhZGRyZXNzIGluIHRoZSBpbnRlcm5hbCBSQU0gZm9yIHRoZSBjZmNfcnNwIGxjaWQgKi8KICNkZWZpbmUgVFNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSCQkJCSAweDQyMDA4CiAvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wZXRpb24gY291bnRlciAjMCAqLwpAQCAtNDE3NSwxMiArMzQ3Niw2IEBACiAgICBjb25uZWN0aW9uIHR5cGUgKG9uZSBvZiAxNikuICovCiAjZGVmaW5lIFVDTV9SRUdfTl9TTV9DVFhfTERfMAkJCQkJIDB4ZTAwNTQKICNkZWZpbmUgVUNNX1JFR19OX1NNX0NUWF9MRF8xCQkJCQkgMHhlMDA1OAotI2RlZmluZSBVQ01fUkVHX05fU01fQ1RYX0xEXzEwCQkJCQkgMHhlMDA3YwotI2RlZmluZSBVQ01fUkVHX05fU01fQ1RYX0xEXzExCQkJCQkgMHhlMDA4MAotI2RlZmluZSBVQ01fUkVHX05fU01fQ1RYX0xEXzEyCQkJCQkgMHhlMDA4NAotI2RlZmluZSBVQ01fUkVHX05fU01fQ1RYX0xEXzEzCQkJCQkgMHhlMDA4OAotI2RlZmluZSBVQ01fUkVHX05fU01fQ1RYX0xEXzE0CQkJCQkgMHhlMDA4YwotI2RlZmluZSBVQ01fUkVHX05fU01fQ1RYX0xEXzE1CQkJCQkgMHhlMDA5MAogI2RlZmluZSBVQ01fUkVHX05fU01fQ1RYX0xEXzIJCQkJCSAweGUwMDVjCiAjZGVmaW5lIFVDTV9SRUdfTl9TTV9DVFhfTERfMwkJCQkJIDB4ZTAwNjAKICNkZWZpbmUgVUNNX1JFR19OX1NNX0NUWF9MRF80CQkJCQkgMHhlMDA2NApAQCAtNDMzMCw0OCArMzYyNSwyMCBAQAogLyogW1JXIDhdIFRoZSBldmVudCBpZCBmb3IgYWdncmVnYXRlZCBpbnRlcnJ1cHQgMCAqLwogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzAJCQkJIDB4YzQwMzgKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8xCQkJCSAweGM0MDNjCi0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTAJCQkJIDB4YzQwNjAKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMQkJCQkgMHhjNDA2NAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEyCQkJCSAweGM0MDY4Ci0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTMJCQkJIDB4YzQwNmMKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNAkJCQkgMHhjNDA3MAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE1CQkJCSAweGM0MDc0Ci0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTYJCQkJIDB4YzQwNzgKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNwkJCQkgMHhjNDA3YwotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE4CQkJCSAweGM0MDgwCi0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTkJCQkJIDB4YzQwODQKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yCQkJCSAweGM0MDQwCi0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjAJCQkJIDB4YzQwODgKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMQkJCQkgMHhjNDA4YwotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIyCQkJCSAweGM0MDkwCi0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjMJCQkJIDB4YzQwOTQKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yNAkJCQkgMHhjNDA5OAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI1CQkJCSAweGM0MDljCi0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjYJCQkJIDB4YzQwYTAKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yNwkJCQkgMHhjNDBhNAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI4CQkJCSAweGM0MGE4Ci0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjkJCQkJIDB4YzQwYWMKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8zCQkJCSAweGM0MDQ0Ci0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzAJCQkJIDB4YzQwYjAKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8zMQkJCQkgMHhjNDBiNAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQJCQkJIDB4YzQwNDgKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF81CQkJCSAweGM0MDRjCisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfNgkJCQkgMHhjNDA1MAogLyogW1JXIDFdIEZvciBlYWNoIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IGluZGV4IHdoZXRoZXIgdGhlIG1vZGUgaXMgbm9ybWFsICgwKQogICAgb3IgYXV0by1tYXNrLW1vZGUgKDEpICovCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8wIAkJCQkgMHhjNDFiOAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMSAJCQkJIDB4YzQxYmMKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzEwCQkJCSAweGM0MWUwCi0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xMQkJCQkgMHhjNDFlNAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMTIJCQkJIDB4YzQxZTgKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzEzCQkJCSAweGM0MWVjCi0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xNAkJCQkgMHhjNDFmMAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMTUJCQkJIDB4YzQxZjQKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzE2CQkJCSAweGM0MWY4Ci0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xNwkJCQkgMHhjNDFmYwotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMTgJCQkJIDB4YzQyMDAKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzE5CQkJCSAweGM0MjA0CiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV80IAkJCQkgMHhjNDFjOAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfNSAJCQkJIDB4YzQxY2MKKyNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzYgCQkJCSAweGM0MWQwCisvKiBbUlcgMV0gVGhlIFQgYml0IGZvciBhZ2dyZWdhdGVkIGludGVycnVwdCA1ICovCisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfVF81CQkJCQkgMHhjNDBjYworI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX1RfNgkJCQkJIDB4YzQwZDAKIC8qIFtSVyAxM10gVGhlIHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGludGVybmFsIFJBTSBmb3IgdGhlIGNmY19yc3AgbGNpZCAqLwogI2RlZmluZSBVU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIJCQkJIDB4YzQwMDgKIC8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMwICovCkBAIC00Njc1LDEwICszOTQyLDYgQEAKIC8qIFtSQyAxXSBTZXQgYXQgbWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikgYXQKICAgIHRoZSBuaWcxIGludGVyZmFjZS4gKi8KICNkZWZpbmUgWENNX1JFR19OSUcxX0xFTkdUSF9NSVMgCQkJCSAweDIwMjNjCi0vKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgaW5wdXQgbmlnMSBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCi0gICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKLSAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KLSNkZWZpbmUgWENNX1JFR19OSUcxX1dFSUdIVAkJCQkJIDB4MjAwZDgKIC8qIFtSVyA1XSBUaGUgbnVtYmVyIG9mIGRvdWJsZSBSRUctcGFpcnM7IGxvYWRlZCBmcm9tIHRoZSBTVE9STSBjb250ZXh0IGFuZAogICAgc2VudCB0byBTVE9STTsgZm9yIGEgc3BlY2lmaWMgY29ubmVjdGlvbiB0eXBlLiBUaGUgZG91YmxlIFJFRy1wYWlycyBhcmUKICAgIHVzZWQgaW4gb3JkZXIgdG8gYWxpZ24gdG8gU1RPUk0gY29udGV4dCByb3cgc2l6ZSBvZiAxMjggYml0cy4gVGhlIG9mZnNldApAQCAtNDY4NiwxMiArMzk0OSw2IEBACiAgICBjb25uZWN0aW9uIHR5cGUgKG9uZSBvZiAxNikuICovCiAjZGVmaW5lIFhDTV9SRUdfTl9TTV9DVFhfTERfMAkJCQkJIDB4MjAwNjAKICNkZWZpbmUgWENNX1JFR19OX1NNX0NUWF9MRF8xCQkJCQkgMHgyMDA2NAotI2RlZmluZSBYQ01fUkVHX05fU01fQ1RYX0xEXzEwCQkJCQkgMHgyMDA4OAotI2RlZmluZSBYQ01fUkVHX05fU01fQ1RYX0xEXzExCQkJCQkgMHgyMDA4YwotI2RlZmluZSBYQ01fUkVHX05fU01fQ1RYX0xEXzEyCQkJCQkgMHgyMDA5MAotI2RlZmluZSBYQ01fUkVHX05fU01fQ1RYX0xEXzEzCQkJCQkgMHgyMDA5NAotI2RlZmluZSBYQ01fUkVHX05fU01fQ1RYX0xEXzE0CQkJCQkgMHgyMDA5OAotI2RlZmluZSBYQ01fUkVHX05fU01fQ1RYX0xEXzE1CQkJCQkgMHgyMDA5YwogI2RlZmluZSBYQ01fUkVHX05fU01fQ1RYX0xEXzIJCQkJCSAweDIwMDY4CiAjZGVmaW5lIFhDTV9SRUdfTl9TTV9DVFhfTERfMwkJCQkJIDB4MjAwNmMKICNkZWZpbmUgWENNX1JFR19OX1NNX0NUWF9MRF80CQkJCQkgMHgyMDA3MApAQCAtNDg2OCwzMCArNDEyNSw4IEBACiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIJCQkJIDB4MTY2MDY4CiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTMJCQkJIDB4MTY2MDZjCiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTQJCQkJIDB4MTY2MDcwCi0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTUJCQkJIDB4MTY2MDc0Ci0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTYJCQkJIDB4MTY2MDc4Ci0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTcJCQkJIDB4MTY2MDdjCi0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTgJCQkJIDB4MTY2MDgwCi0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTkJCQkJIDB4MTY2MDg0Ci0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTAJCQkJIDB4MTY2MDYwCi0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTEJCQkJIDB4MTY2MDY0Ci0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIJCQkJIDB4MTY2MDY4Ci0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTMJCQkJIDB4MTY2MDZjCi0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTQJCQkJIDB4MTY2MDcwCiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMgkJCQkgMHgxNjYwNDAKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMAkJCQkgMHgxNjYwODgKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMQkJCQkgMHgxNjYwOGMKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMgkJCQkgMHgxNjYwOTAKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMwkJCQkgMHgxNjYwOTQKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yNAkJCQkgMHgxNjYwOTgKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yNQkJCQkgMHgxNjYwOWMKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yNgkJCQkgMHgxNjYwYTAKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yNwkJCQkgMHgxNjYwYTQKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yOAkJCQkgMHgxNjYwYTgKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yOQkJCQkgMHgxNjYwYWMKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8zCQkJCSAweDE2NjA0NAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMwCQkJCSAweDE2NjBiMAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMxCQkJCSAweDE2NjBiNAogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQJCQkJIDB4MTY2MDQ4CiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfNQkJCQkgMHgxNjYwNGMKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF82CQkJCSAweDE2NjA1MApAQCAtNDkwMiwxNiArNDEzNyw2IEBACiAgICBvciBhdXRvLW1hc2stbW9kZSAoMSkgKi8KICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzAgCQkJCSAweDE2NjFiOAogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX01PREVfMSAJCQkJIDB4MTY2MWJjCi0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfTU9ERV8xMAkJCQkgMHgxNjYxZTAKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzExCQkJCSAweDE2NjFlNAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX01PREVfMTIJCQkJIDB4MTY2MWU4Ci0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfTU9ERV8xMwkJCQkgMHgxNjYxZWMKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzE0CQkJCSAweDE2NjFmMAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX01PREVfMTUJCQkJIDB4MTY2MWY0Ci0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfTU9ERV8xNgkJCQkgMHgxNjYxZjgKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzE3CQkJCSAweDE2NjFmYwotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX01PREVfMTgJCQkJIDB4MTY2MjAwCi0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfTU9ERV8xOQkJCQkgMHgxNjYyMDQKIC8qIFtSVyAxM10gVGhlIHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGludGVybmFsIFJBTSBmb3IgdGhlIGNmY19yc3AgbGNpZCAqLwogI2RlZmluZSBYU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIJCQkJIDB4MTY2MDA4CiAvKiBbUlcgMTZdIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBjb21wZXRpb24gY291bnRlciAjMCAqLwpAQCAtNTExOSwxMCArNDM0NCw2IEBACiAjZGVmaW5lIE1DUFJfTlZNX0NPTU1BTkRfRklSU1QJCQkJCSAoMUw8PDcpCiAjZGVmaW5lIE1DUFJfTlZNX0NPTU1BTkRfTEFTVAkJCQkJICgxTDw8OCkKICNkZWZpbmUgTUNQUl9OVk1fQ09NTUFORF9XUgkJCQkJICgxTDw8NSkKLSNkZWZpbmUgTUNQUl9OVk1fQ09NTUFORF9XUkVOCQkJCQkgKDFMPDwxNikKLSNkZWZpbmUgTUNQUl9OVk1fQ09NTUFORF9XUkVOX0JJVFNISUZUCQkJCSAxNgotI2RlZmluZSBNQ1BSX05WTV9DT01NQU5EX1dSREkJCQkJCSAoMUw8PDE3KQotI2RlZmluZSBNQ1BSX05WTV9DT01NQU5EX1dSRElfQklUU0hJRlQJCQkJIDE3CiAjZGVmaW5lIE1DUFJfTlZNX1NXX0FSQl9BUkJfQVJCMQkJCQkgKDFMPDw5KQogI2RlZmluZSBNQ1BSX05WTV9TV19BUkJfQVJCX1JFUV9DTFIxCQkJCSAoMUw8PDUpCiAjZGVmaW5lIE1DUFJfTlZNX1NXX0FSQl9BUkJfUkVRX1NFVDEJCQkJICgxTDw8MSkKQEAgLTUyMjMsMTAgKzQ0NDQsNiBAQAogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19TUElPXzcJCQkJCSA3CiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1NQSU9fQ0xSX1BPUwkJCQkgMTYKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfU1BJT19GTE9BVAkJCQkgKDB4ZmZMPDwyNCkKLSNkZWZpbmUgR1JDX01JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVQ3CQkJCSAweDgwMDAwMDAwCi0jZGVmaW5lIEdSQ19NSVNDX1JFR0lTVEVSU19TUElPX0ZMT0FUNgkJCQkgMHg0MDAwMDAwMAotI2RlZmluZSBHUkNfTUlTQ19SRUdJU1RFUlNfU1BJT19GTE9BVDUJCQkJIDB4MjAwMDAwMDAKLSNkZWZpbmUgR1JDX01JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVQ0CQkJCSAweDEwMDAwMDAwCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVRfUE9TCQkJCSAyNAogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19TUElPX0lOUFVUX0hJX1oJCQkJIDIKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfU1BJT19JTlRfT0xEX1NFVF9QT1MJCQkgMTYKQEAgLTUzNDQsNyArNDU2MSw4IEBACiAjZGVmaW5lIExBVENIRURfQVRUTl9TQ1BBRF9QQVJJVFlfTUNQCQkzMwogCiAjZGVmaW5lIEdFTkVSQUxfQVRURU5fV09SRChhdHRlbl9uYW1lKQkgICAgICAgKCg5NCArIGF0dGVuX25hbWUpIC8gMzIpCi0jZGVmaW5lIEdFTkVSQUxfQVRURU5fT0ZGU0VUKGF0dGVuX25hbWUpICAgICAgICgxIDw8ICgoOTQgKyBhdHRlbl9uYW1lKSAlIDMyKSkKKyNkZWZpbmUgR0VORVJBTF9BVFRFTl9PRkZTRVQoYXR0ZW5fbmFtZSlcCisJKDFVTCA8PCAoKDk0ICsgYXR0ZW5fbmFtZSkgJSAzMikpCiAvKgogICogVGhpcyBmaWxlIGRlZmluZXMgR1JDIGJhc2UgYWRkcmVzcyBmb3IgZXZlcnkgYmxvY2suCiAgKiBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgY2hpcHNpbSwgYXNtIG1pY3JvY29kZSBhbmQgY3BwIG1pY3JvY29kZS4KQEAgLTU1NjgsNiArNDc4Niw5IEBACiAjZGVmaW5lIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMl9BRFZSXzEwR19LUgkJMHgwMDgwCiAKICNkZWZpbmUgTURJT19SRUdfQkFOS19SWDAJCQkJMHg4MGIwCisjZGVmaW5lIE1ESU9fUlgwX1JYX1NUQVRVUwkJCQkweDEwCisjZGVmaW5lIE1ESU9fUlgwX1JYX1NUQVRVU19TSUdERVQJCQkweDgwMDAKKyNkZWZpbmUgTURJT19SWDBfUlhfU1RBVFVTX1JYX1NFUV9ET05FCQkJMHgxMDAwCiAjZGVmaW5lIE1ESU9fUlgwX1JYX0VRX0JPT1NUCQkJCTB4MWMKICNkZWZpbmUgTURJT19SWDBfUlhfRVFfQk9PU1RfRVFVQUxJWkVSX0NUUkxfTUFTSwkweDcKICNkZWZpbmUgTURJT19SWDBfUlhfRVFfQk9PU1RfT0ZGU0VUX0NUUkwJCTB4MTAKQEAgLTU3NjEsMTIgKzQ5ODIsMjIgQEAKICNkZWZpbmUgTURJT19PVkVSXzFHX0xQX1VQMl9QUkVFTVBIQVNJU19TSElGVAkJCQk3CiAjZGVmaW5lIE1ESU9fT1ZFUl8xR19MUF9VUDMJCQkJCQkweDFFCiAKKyNkZWZpbmUgTURJT19SRUdfQkFOS19SRU1PVEVfUEhZCQkJMHg4MzMwCisjZGVmaW5lIE1ESU9fUkVNT1RFX1BIWV9NSVNDX1JYX1NUQVRVUwkJCQkweDEwCisjZGVmaW5lIE1ESU9fUkVNT1RFX1BIWV9NSVNDX1JYX1NUQVRVU19DTDM3X0ZTTV9SRUNFSVZFRF9PVkVSMUdfTVNHCTB4MDAxMAorI2RlZmluZSBNRElPX1JFTU9URV9QSFlfTUlTQ19SWF9TVEFUVVNfQ0wzN19GU01fUkVDRUlWRURfQlJDTV9PVUlfTVNHCTB4MDYwMAorCiAjZGVmaW5lIE1ESU9fUkVHX0JBTktfQkFNX05FWFRfUEFHRQkJCTB4ODM1MAogI2RlZmluZSBNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMCQkJMHgxMAogI2RlZmluZSBNRElPX0JBTV9ORVhUX1BBR0VfTVA1X05FWFRfUEFHRV9DVFJMX0JBTV9NT0RFCQkJMHgwMDAxCiAjZGVmaW5lIE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkxfVEVUT05fQU4JCQkweDAwMDIKIAogI2RlZmluZSBNRElPX1JFR19CQU5LX0NMNzNfVVNFUkIwCQkweDgzNzAKKyNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX1VDVFJMCQkJCTB4MTAKKyNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX1VDVFJMX1VTVEFUMV9NVVhTRUwJCQkweDAwMDIKKyNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX1VTVEFUMQkJCQkweDExCisjZGVmaW5lIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19VU1RBVDFfTElOS19TVEFUVVNfQ0hFQ0sJCQkweDAxMDAKKyNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX1VTVEFUMV9BTl9HT09EX0NIRUNLX0JBTTM3CQkweDA0MDAKICNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMSAJCQkweDEyCiAjZGVmaW5lIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDFfQkFNX0VOCQkJCTB4ODAwMAogI2RlZmluZSBNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxX0JBTV9TVEFUSU9OX01OR1JfRU4JCTB4NDAwMApAQCAtNTg0MywyNSArNTA3NCwzMyBAQAogI2RlZmluZSBNRElPX1BNQV9SRUdfUk9NX1ZFUjIJCTB4Y2ExYQogI2RlZmluZSBNRElPX1BNQV9SRUdfRURDX0ZGRV9NQUlOCTB4Y2ExYgogI2RlZmluZSBNRElPX1BNQV9SRUdfUExMX0JBTkRXSURUSAkweGNhMWQKLSNkZWZpbmUgTURJT19QTUFfUkVHX0dFTl9DVFJMMgkJMHhjYTFlCisjZGVmaW5lIE1ESU9fUE1BX1JFR19QTExfQ1RSTAkJMHhjYTFlCiAjZGVmaW5lIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwwIAkweGNhMjMKICNkZWZpbmUgTURJT19QTUFfUkVHX0xSTV9NT0RFCQkweGNhM2YKICNkZWZpbmUgTURJT19QTUFfUkVHX0NEUl9CQU5EV0lEVEgJMHhjYTQ2CiAjZGVmaW5lIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxIAkweGNhODUKIAotI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMIAkweDgwMDAKLSNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSwkweDAwMGMKLSNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0lETEUJCTB4MDAwMAotI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUJMHgwMDA0Ci0jZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX1NUQVRVU19JTl9QUk9HUkVTUwkweDAwMDgKLSNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0ZBSUxFRAkweDAwMGMKLSNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQllURV9DTlQJMHg4MDAyCi0jZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX01FTV9BRERSCTB4ODAwMworI2RlZmluZSBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkwJCTB4ODAwMAorI2RlZmluZSBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0sJMHgwMDBjCisjZGVmaW5lIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfU1RBVFVTX0lETEUJCTB4MDAwMAorI2RlZmluZSBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX1NUQVRVU19DT01QTEVURQkweDAwMDQKKyNkZWZpbmUgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfSU5fUFJPR1JFU1MJMHgwMDA4CisjZGVmaW5lIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfU1RBVFVTX0ZBSUxFRCAJMHgwMDBjCisjZGVmaW5lIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQllURV9DTlQJMHg4MDAyCisjZGVmaW5lIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfTUVNX0FERFIJMHg4MDAzCiAjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0RBVEFfQlVGCTB4YzgyMAogI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9EQVRBX01BU0sgMHhmZgogI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UWF9DVFJMMQkJMHhjYTAxCiAjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RYX0NUUkwyCQkweGNhMDUKIAorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyN19UV09fV0lSRV9TTEFWRV9BRERSCTB4ODAwNQorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyN19UV09fV0lSRV9EQVRBX0JVRgkweDgwMDcKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjdfVFdPX1dJUkVfREFUQV9NQVNLIDB4ZmYKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjdfTUlTQ19DVFJMCQkweDgzMDkKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjdfVFhfQ1RSTDEJCTB4Y2EwMgorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyN19UWF9DVFJMMgkJMHhjYTA1CisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI3X1BDU19PUFRfQ1RSTAkJMHhjODA4CisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI3X0dQSU9fQ1RSTAkJMHhjODBlCiAKICNkZWZpbmUgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYJCQkweGM4MDEKICNkZWZpbmUgTURJT19QTUFfUkVHXzgwNzNfU1BFRURfTElOS19TVEFUVVMJCTB4YzgyMApAQCAtNTg3Miw2ICs1MTExLDEzIEBACiAjZGVmaW5lIE1ESU9fUE1BX1JFR183MTAxX1ZFUjEJCTB4YzAyNgogI2RlZmluZSBNRElPX1BNQV9SRUdfNzEwMV9WRVIyCQkweGMwMjcKIAorI2RlZmluZSBNRElPX1BNQV9SRUdfODQ4MV9QTURfU0lHTkFMCTB4YTgxMQorI2RlZmluZSBNRElPX1BNQV9SRUdfODQ4MV9MRUQxX01BU0sJMHhhODJjCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NDgxX0xFRDJfTUFTSwkweGE4MmYKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg0ODFfTEVEM19NQVNLCTB4YTgzMgorI2RlZmluZSBNRElPX1BNQV9SRUdfODQ4MV9TSUdOQUxfTUFTSwkweGE4MzUKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg0ODFfTElOS19TSUdOQUwJMHhhODNiCisKIAogI2RlZmluZSBNRElPX1dJU19ERVZBRAkJCTB4MgogLypiY20qLwpAQCAtNTkyNSw2ICs1MTcxLDEyIEBACiAKICNkZWZpbmUgTURJT19BTl9SRUdfODA3M18yXzVHCQkweDgzMjkKIAorI2RlZmluZSBNRElPX0FOX1JFR184NDgxX0xFR0FDWV9NSUlfQ1RSTAkweGZmZTAKKyNkZWZpbmUgTURJT19BTl9SRUdfODQ4MV9MRUdBQ1lfQU5fQURWCQkweGZmZTQKKyNkZWZpbmUgTURJT19BTl9SRUdfODQ4MV8xMDAwVF9DVFJMCQkweGZmZTkKKyNkZWZpbmUgTURJT19BTl9SRUdfODQ4MV9FWFBBTlNJT05fUkVHX1JEX1JXCTB4ZmZmNQorI2RlZmluZSBNRElPX0FOX1JFR184NDgxX0VYUEFOU0lPTl9SRUdfQUNDRVNTCTB4ZmZmNworI2RlZmluZSBNRElPX0FOX1JFR184NDgxX0xFR0FDWV9TSEFET1cJCTB4ZmZmYwogCiAjZGVmaW5lIElHVV9GVU5DX0JBU0UJCQkweDA0MDAKIApAQCAtNTk1NywzICs1MjA5LDExNiBAQAogI2RlZmluZSBDT01NQU5EX1JFR19TSU1EX05PTUFTSyAgICAgMHgxYwogCiAKKyNkZWZpbmUgSUdVX01FTV9CQVNFCQkJCQkJMHgwMDAwCisKKyNkZWZpbmUgSUdVX01FTV9NU0lYX0JBU0UJCQkJCTB4MDAwMAorI2RlZmluZSBJR1VfTUVNX01TSVhfVVBQRVIJCQkJCTB4MDA3ZgorI2RlZmluZSBJR1VfTUVNX01TSVhfUkVTRVJWRURfVVBQRVIJCQkweDAxZmYKKworI2RlZmluZSBJR1VfTUVNX1BCQV9NU0lYX0JBU0UJCQkJMHgwMjAwCisjZGVmaW5lIElHVV9NRU1fUEJBX01TSVhfVVBQRVIJCQkJMHgwMjAwCisKKyNkZWZpbmUgSUdVX0NNRF9CQUNLV0FSRF9DT01QX1BST0RfVVBECQkweDAyMDEKKyNkZWZpbmUgSUdVX01FTV9QQkFfTVNJWF9SRVNFUlZFRF9VUFBFUiAJMHgwM2ZmCisKKyNkZWZpbmUgSUdVX0NNRF9JTlRfQUNLX0JBU0UJCQkJMHgwNDAwCisjZGVmaW5lIElHVV9DTURfSU5UX0FDS19VUFBFUlwKKwkoSUdVX0NNRF9JTlRfQUNLX0JBU0UgKyBNQVhfU0JfUEVSX1BPUlQgKiBOVU1fT0ZfUE9SVFNfUEVSX1BBVEggLSAxKQorI2RlZmluZSBJR1VfQ01EX0lOVF9BQ0tfUkVTRVJWRURfVVBQRVIJCTB4MDRmZgorCisjZGVmaW5lIElHVV9DTURfRTJfUFJPRF9VUERfQkFTRQkJCTB4MDUwMAorI2RlZmluZSBJR1VfQ01EX0UyX1BST0RfVVBEX1VQUEVSXAorCShJR1VfQ01EX0UyX1BST0RfVVBEX0JBU0UgKyBNQVhfU0JfUEVSX1BPUlQgKiBOVU1fT0ZfUE9SVFNfUEVSX1BBVEggLSAxKQorI2RlZmluZSBJR1VfQ01EX0UyX1BST0RfVVBEX1JFU0VSVkVEX1VQUEVSCTB4MDU5ZgorCisjZGVmaW5lIElHVV9DTURfQVRUTl9CSVRfVVBEX1VQUEVSCQkJMHgwNWEwCisjZGVmaW5lIElHVV9DTURfQVRUTl9CSVRfU0VUX1VQUEVSCQkJMHgwNWExCisjZGVmaW5lIElHVV9DTURfQVRUTl9CSVRfQ0xSX1VQUEVSCQkJMHgwNWEyCisKKyNkZWZpbmUgSUdVX1JFR19TSVNSX01EUENfV01BU0tfVVBQRVIJCTB4MDVhMworI2RlZmluZSBJR1VfUkVHX1NJU1JfTURQQ19XTUFTS19MU0JfVVBQRVIJMHgwNWE0CisjZGVmaW5lIElHVV9SRUdfU0lTUl9NRFBDX1dNQVNLX01TQl9VUFBFUgkweDA1YTUKKyNkZWZpbmUgSUdVX1JFR19TSVNSX01EUENfV09NQVNLX1VQUEVSCQkweDA1YTYKKworI2RlZmluZSBJR1VfUkVHX1JFU0VSVkVEX1VQUEVSCQkJCTB4MDVmZgorCisKKyNkZWZpbmUgQ0RVX1JFR0lPTl9OVU1CRVJfWENNX0FHIDIKKyNkZWZpbmUgQ0RVX1JFR0lPTl9OVU1CRVJfVUNNX0FHIDQKKworCisvKioKKyAqIFN0cmluZy10by1jb21wcmVzcyBbMzE6OF0gPSBDSUQgKGFsbCAyNCBiaXRzKQorICogU3RyaW5nLXRvLWNvbXByZXNzIFs3OjRdID0gUmVnaW9uCisgKiBTdHJpbmctdG8tY29tcHJlc3MgWzM6MF0gPSBUeXBlCisgKi8KKyNkZWZpbmUgQ0RVX1ZBTElEX0RBVEEoX2NpZCwgX3JlZ2lvbiwgX3R5cGUpXAorCSgoKF9jaWQpIDw8IDgpIHwgKCgoX3JlZ2lvbikmMHhmKTw8NCkgfCAoKChfdHlwZSkmMHhmKSkpCisjZGVmaW5lIENEVV9DUkM4KF9jaWQsIF9yZWdpb24sIF90eXBlKVwKKwkoY2FsY19jcmM4KENEVV9WQUxJRF9EQVRBKF9jaWQsIF9yZWdpb24sIF90eXBlKSwgMHhmZikpCisjZGVmaW5lIENEVV9SU1JWRF9WQUxVRV9UWVBFX0EoX2NpZCwgX3JlZ2lvbiwgX3R5cGUpXAorCSgweDgwIHwgKChDRFVfQ1JDOChfY2lkLCBfcmVnaW9uLCBfdHlwZSkpICYgMHg3ZikpCisjZGVmaW5lIENEVV9SU1JWRF9WQUxVRV9UWVBFX0IoX2NyYywgX3R5cGUpXAorCSgweDgwIHwgKChfdHlwZSkmMHhmIDw8IDMpIHwgKChDRFVfQ1JDOChfY2lkLCBfcmVnaW9uLCBfdHlwZSkpICYgMHg3KSkKKyNkZWZpbmUgQ0RVX1JTUlZEX0lOVkFMSURBVEVfQ09OVEVYVF9WQUxVRShfdmFsKSAoKF92YWwpICYgfjB4ODApCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlc2NyaXB0aW9uOgorICoJICAgQ2FsY3VsYXRlcyBjcmMgOCBvbiBhIHdvcmQgdmFsdWU6IHBvbHlub21pYWwgMC0xLTItOAorICoJICAgQ29kZSB3YXMgdHJhbnNsYXRlZCBmcm9tIFZlcmlsb2cuCisgKiBSZXR1cm46CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHU4IGNhbGNfY3JjOCh1MzIgZGF0YSwgdTggY3JjKQoreworCXU4IERbMzJdOworCXU4IE5ld0NSQ1s4XTsKKwl1OCBDWzhdOworCXU4IGNyY19yZXM7CisJdTggaTsKKworCS8qIHNwbGl0IHRoZSBkYXRhIGludG8gMzEgYml0cyAqLworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCURbaV0gPSAodTgpKGRhdGEgJiAxKTsKKwkJZGF0YSA9IGRhdGEgPj4gMTsKKwl9CisKKwkvKiBzcGxpdCB0aGUgY3JjIGludG8gOCBiaXRzICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlDW2ldID0gY3JjICYgMTsKKwkJY3JjID0gY3JjID4+IDE7CisJfQorCisJTmV3Q1JDWzBdID0gRFszMV0gXiBEWzMwXSBeIERbMjhdIF4gRFsyM10gXiBEWzIxXSBeIERbMTldIF4gRFsxOF0gXgorCQkgICAgRFsxNl0gXiBEWzE0XSBeIERbMTJdIF4gRFs4XSBeIERbN10gXiBEWzZdIF4gRFswXSBeIENbNF0gXgorCQkgICAgQ1s2XSBeIENbN107CisJTmV3Q1JDWzFdID0gRFszMF0gXiBEWzI5XSBeIERbMjhdIF4gRFsyNF0gXiBEWzIzXSBeIERbMjJdIF4gRFsyMV0gXgorCQkgICAgRFsyMF0gXiBEWzE4XSBeIERbMTddIF4gRFsxNl0gXiBEWzE1XSBeIERbMTRdIF4gRFsxM10gXgorCQkgICAgRFsxMl0gXiBEWzldIF4gRFs2XSBeIERbMV0gXiBEWzBdIF4gQ1swXSBeIENbNF0gXiBDWzVdIF4KKwkJICAgIENbNl07CisJTmV3Q1JDWzJdID0gRFsyOV0gXiBEWzI4XSBeIERbMjVdIF4gRFsyNF0gXiBEWzIyXSBeIERbMTddIF4gRFsxNV0gXgorCQkgICAgRFsxM10gXiBEWzEyXSBeIERbMTBdIF4gRFs4XSBeIERbNl0gXiBEWzJdIF4gRFsxXSBeIERbMF0gXgorCQkgICAgQ1swXSBeIENbMV0gXiBDWzRdIF4gQ1s1XTsKKwlOZXdDUkNbM10gPSBEWzMwXSBeIERbMjldIF4gRFsyNl0gXiBEWzI1XSBeIERbMjNdIF4gRFsxOF0gXiBEWzE2XSBeCisJCSAgICBEWzE0XSBeIERbMTNdIF4gRFsxMV0gXiBEWzldIF4gRFs3XSBeIERbM10gXiBEWzJdIF4gRFsxXSBeCisJCSAgICBDWzFdIF4gQ1syXSBeIENbNV0gXiBDWzZdOworCU5ld0NSQ1s0XSA9IERbMzFdIF4gRFszMF0gXiBEWzI3XSBeIERbMjZdIF4gRFsyNF0gXiBEWzE5XSBeIERbMTddIF4KKwkJICAgIERbMTVdIF4gRFsxNF0gXiBEWzEyXSBeIERbMTBdIF4gRFs4XSBeIERbNF0gXiBEWzNdIF4gRFsyXSBeCisJCSAgICBDWzBdIF4gQ1syXSBeIENbM10gXiBDWzZdIF4gQ1s3XTsKKwlOZXdDUkNbNV0gPSBEWzMxXSBeIERbMjhdIF4gRFsyN10gXiBEWzI1XSBeIERbMjBdIF4gRFsxOF0gXiBEWzE2XSBeCisJCSAgICBEWzE1XSBeIERbMTNdIF4gRFsxMV0gXiBEWzldIF4gRFs1XSBeIERbNF0gXiBEWzNdIF4gQ1sxXSBeCisJCSAgICBDWzNdIF4gQ1s0XSBeIENbN107CisJTmV3Q1JDWzZdID0gRFsyOV0gXiBEWzI4XSBeIERbMjZdIF4gRFsyMV0gXiBEWzE5XSBeIERbMTddIF4gRFsxNl0gXgorCQkgICAgRFsxNF0gXiBEWzEyXSBeIERbMTBdIF4gRFs2XSBeIERbNV0gXiBEWzRdIF4gQ1syXSBeIENbNF0gXgorCQkgICAgQ1s1XTsKKwlOZXdDUkNbN10gPSBEWzMwXSBeIERbMjldIF4gRFsyN10gXiBEWzIyXSBeIERbMjBdIF4gRFsxOF0gXiBEWzE3XSBeCisJCSAgICBEWzE1XSBeIERbMTNdIF4gRFsxMV0gXiBEWzddIF4gRFs2XSBeIERbNV0gXiBDWzNdIF4gQ1s1XSBeCisJCSAgICBDWzZdOworCisJY3JjX3JlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJY3JjX3JlcyB8PSAoTmV3Q1JDW2ldIDw8IGkpOworCisJcmV0dXJuIGNyY19yZXM7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCmluZGV4IGQ0YjU3MDguLmNlYTVjZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKQEAgLTExMDksNyArMTEwOSw4IEBACiAJCQkvL211eCBtYWNoaW5lIGluIGNhc2Ugb2YgRVhQSVJFRCBldmVuIGlmIExJTktfRE9XTiBkaWRuJ3QgYXJyaXZlIGZvciB0aGUgcG9ydC4KIAkJCXBvcnQtPnBhcnRuZXJfb3Blci5wb3J0X3N0YXRlICY9IH5BRF9TVEFURV9TWU5DSFJPTklaQVRJT047CiAJCQlwb3J0LT5zbV92YXJzICY9IH5BRF9QT1JUX01BVENIRUQ7Ci0JCQlwb3J0LT5wYXJ0bmVyX29wZXIucG9ydF9zdGF0ZSB8PSBBRF9TSE9SVF9USU1FT1VUOworCQkJcG9ydC0+cGFydG5lcl9vcGVyLnBvcnRfc3RhdGUgfD0KKwkJCQlBRF9TVEFURV9MQUNQX0FDVElWSVRZOwogCQkJcG9ydC0+c21fcnhfdGltZXJfY291bnRlciA9IF9fYWRfdGltZXJfdG9fdGlja3MoQURfQ1VSUkVOVF9XSElMRV9USU1FUiwgKHUxNikoQURfU0hPUlRfVElNRU9VVCkpOwogCQkJcG9ydC0+YWN0b3Jfb3Blcl9wb3J0X3N0YXRlIHw9IEFEX1NUQVRFX0VYUElSRUQ7CiAJCQlicmVhazsKQEAgLTExMjMsNyArMTEyNCw3IEBACiAJCQkvLyBkZXRlY3QgbG9vcGJhY2sgc2l0dWF0aW9uCiAJCQlpZiAoIU1BQ19BRERSRVNTX0NPTVBBUkUoJihsYWNwZHUtPmFjdG9yX3N5c3RlbSksICYocG9ydC0+YWN0b3Jfc3lzdGVtKSkpIHsKIAkJCQkvLyBJTkZPX1JFQ0VJVkVEX0xPT1BCQUNLX0ZSQU1FUwotCQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogQW4gaWxsZWdhbCBsb29wYmFjayBvY2N1cnJlZCBvbiAiCisJCQkJcHJfZXJyKERSVl9OQU1FICI6ICVzOiBBbiBpbGxlZ2FsIGxvb3BiYWNrIG9jY3VycmVkIG9uICIKIAkJCQkgICAgICAgImFkYXB0ZXIgKCVzKS4gQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdG8gdmVyaWZ5IHRoYXQgYWxsICIKIAkJCQkgICAgICAgIkFkYXB0ZXJzIGFyZSBjb25uZWN0ZWQgdG8gODAyLjNhZCBjb21wbGlhbnQgc3dpdGNoIHBvcnRzXG4iLAogCQkJCSAgICAgICBwb3J0LT5zbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUsIHBvcnQtPnNsYXZlLT5kZXYtPm5hbWUpOwpAQCAtMTMwNSwxMSArMTMwNiwxMyBAQAogCQkJfQogCQl9CiAJCWlmICghY3Vycl9wb3J0KSB7IC8vIG1lYW5pbmc6IHRoZSBwb3J0IHdhcyByZWxhdGVkIHRvIGFuIGFnZ3JlZ2F0b3IgYnV0IHdhcyBub3Qgb24gdGhlIGFnZ3JlZ2F0b3IgcG9ydCBsaXN0Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzOiBXYXJuaW5nOiBQb3J0ICVkIChvbiAlcykgd2FzICIKLQkJCSAgICAgICAicmVsYXRlZCB0byBhZ2dyZWdhdG9yICVkIGJ1dCB3YXMgbm90IG9uIGl0cyBwb3J0IGxpc3RcbiIsCi0JCQkgICAgICAgcG9ydC0+c2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lLAotCQkJICAgICAgIHBvcnQtPmFjdG9yX3BvcnRfbnVtYmVyLCBwb3J0LT5zbGF2ZS0+ZGV2LT5uYW1lLAotCQkJICAgICAgIHBvcnQtPmFnZ3JlZ2F0b3ItPmFnZ3JlZ2F0b3JfaWRlbnRpZmllcik7CisJCQlwcl93YXJuaW5nKERSVl9OQU1FICI6ICVzOiBXYXJuaW5nOiBQb3J0ICVkIChvbiAlcykgIgorCQkJCSAgICJ3YXMgcmVsYXRlZCB0byBhZ2dyZWdhdG9yICVkIGJ1dCB3YXMgbm90ICIKKwkJCQkgICAib24gaXRzIHBvcnQgbGlzdFxuIiwKKwkJCQkgICBwb3J0LT5zbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUsCisJCQkJICAgcG9ydC0+YWN0b3JfcG9ydF9udW1iZXIsCisJCQkJICAgcG9ydC0+c2xhdmUtPmRldi0+bmFtZSwKKwkJCQkgICBwb3J0LT5hZ2dyZWdhdG9yLT5hZ2dyZWdhdG9yX2lkZW50aWZpZXIpOwogCQl9CiAJfQogCS8vIHNlYXJjaCBvbiBhbGwgYWdncmVnYXRvcnMgZm9yIGEgc3VpdGFibGUgYWdncmVnYXRvciBmb3IgdGhpcyBwb3J0CkBAIC0xMzc4LDcgKzEzODEsOCBAQAogCiAJCQlwcl9kZWJ1ZygiUG9ydCAlZCBqb2luZWQgTEFHICVkKG5ldyBMQUcpXG4iLCBwb3J0LT5hY3Rvcl9wb3J0X251bWJlciwgcG9ydC0+YWdncmVnYXRvci0+YWdncmVnYXRvcl9pZGVudGlmaWVyKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogUG9ydCAlZCAob24gJXMpIGRpZCBub3QgZmluZCBhIHN1aXRhYmxlIGFnZ3JlZ2F0b3JcbiIsCisJCQlwcl9lcnIoRFJWX05BTUUgIjogJXM6IFBvcnQgJWQgKG9uICVzKSBkaWQgbm90IGZpbmQgIgorCQkJICAgICAgICJhIHN1aXRhYmxlIGFnZ3JlZ2F0b3JcbiIsCiAJCQkgICAgICAgcG9ydC0+c2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lLAogCQkJICAgICAgIHBvcnQtPmFjdG9yX3BvcnRfbnVtYmVyLCBwb3J0LT5zbGF2ZS0+ZGV2LT5uYW1lKTsKIAkJfQpAQCAtMTQ1NSwxMCArMTQ1OSwxMCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJICAgICAgICI6ICVzOiBJbXBvc3NpYmxlIGFnZyBzZWxlY3QgbW9kZSAlZFxuIiwKLQkJICAgICAgIGN1cnItPnNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwKLQkJICAgICAgIF9fZ2V0X2FnZ19zZWxlY3Rpb25fbW9kZShjdXJyLT5sYWdfcG9ydHMpKTsKKwkJcHJfd2FybmluZyhEUlZfTkFNRQorCQkJICAgIjogJXM6IEltcG9zc2libGUgYWdnIHNlbGVjdCBtb2RlICVkXG4iLAorCQkJICAgY3Vyci0+c2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lLAorCQkJICAgX19nZXRfYWdnX3NlbGVjdGlvbl9tb2RlKGN1cnItPmxhZ19wb3J0cykpOwogCQlicmVhazsKIAl9CiAKQEAgLTE1NjEsNyArMTU2NSw3IEBACiAKIAkJLy8gY2hlY2sgaWYgYW55IHBhcnRuZXIgcmVwbHlzCiAJCWlmIChiZXN0LT5pc19pbmRpdmlkdWFsKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzOiBXYXJuaW5nOiBObyA4MDIuM2FkIgorCQkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiAlczogV2FybmluZzogTm8gODAyLjNhZCIKIAkJCSAgICAgICAiIHJlc3BvbnNlIGZyb20gdGhlIGxpbmsgcGFydG5lciBmb3IgYW55IgogCQkJICAgICAgICIgYWRhcHRlcnMgaW4gdGhlIGJvbmRcbiIsCiAJCQkgICAgICAgYmVzdC0+c2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKQEAgLTE4ODQsNyArMTg4OCw4IEBACiAJc3RydWN0IGFnZ3JlZ2F0b3IgKmFnZ3JlZ2F0b3I7CiAKIAlpZiAoYm9uZCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogVGhlIHNsYXZlICVzIGlzIG5vdCBhdHRhY2hlZCB0byBpdHMgYm9uZFxuIiwKKwkJcHJfZXJyKERSVl9OQU1FICI6ICVzOiBUaGUgc2xhdmUgJXMgaXMgbm90IGF0dGFjaGVkIHRvICIKKwkJICAgICAgICJpdHMgYm9uZFxuIiwKIAkJICAgICAgIHNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xOTYwLDkgKzE5NjUsOSBAQAogCiAJLy8gaWYgc2xhdmUgaXMgbnVsbCwgdGhlIHdob2xlIHBvcnQgaXMgbm90IGluaXRpYWxpemVkCiAJaWYgKCFwb3J0LT5zbGF2ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IFdhcm5pbmc6ICVzOiBUcnlpbmcgdG8gIgotCQkgICAgICAgInVuYmluZCBhbiB1bmluaXRpYWxpemVkIHBvcnQgb24gJXNcbiIsCi0JCSAgICAgICBzbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUpOworCQlwcl93YXJuaW5nKERSVl9OQU1FICI6IFdhcm5pbmc6ICVzOiBUcnlpbmcgdG8gIgorCQkJICAgInVuYmluZCBhbiB1bmluaXRpYWxpemVkIHBvcnQgb24gJXNcbiIsCisJCQkgICBzbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xOTkzLDggKzE5OTgsOCBAQAogCQkJCXByX2RlYnVnKCJTb21lIHBvcnQocykgcmVsYXRlZCB0byBMQUcgJWQgLSByZXBsYWNlaW5nIHdpdGggTEFHICVkXG4iLCBhZ2dyZWdhdG9yLT5hZ2dyZWdhdG9yX2lkZW50aWZpZXIsIG5ld19hZ2dyZWdhdG9yLT5hZ2dyZWdhdG9yX2lkZW50aWZpZXIpOwogCiAJCQkJaWYgKChuZXdfYWdncmVnYXRvci0+bGFnX3BvcnRzID09IHBvcnQpICYmIG5ld19hZ2dyZWdhdG9yLT5pc19hY3RpdmUpIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAlczogUmVtb3ZpbmcgYW4gYWN0aXZlIGFnZ3JlZ2F0b3JcbiIsCi0JCQkJCSAgICAgICBhZ2dyZWdhdG9yLT5zbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUpOworCQkJCQlwcl9pbmZvKERSVl9OQU1FICI6ICVzOiBSZW1vdmluZyBhbiBhY3RpdmUgYWdncmVnYXRvclxuIiwKKwkJCQkJCWFnZ3JlZ2F0b3ItPnNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSk7CiAJCQkJCS8vIHNlbGVjdCBuZXcgYWN0aXZlIGFnZ3JlZ2F0b3IKIAkJCQkJIHNlbGVjdF9uZXdfYWN0aXZlX2FnZyA9IDE7CiAJCQkJfQpAQCAtMjAyNCwxNyArMjAyOSwxNyBAQAogCQkJCQlhZF9hZ2dfc2VsZWN0aW9uX2xvZ2ljKF9fZ2V0X2ZpcnN0X2FnZyhwb3J0KSk7CiAJCQkJfQogCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzOiBXYXJuaW5nOiB1bmJpbmRpbmcgYWdncmVnYXRvciwgIgotCQkJCSAgICAgICAiYW5kIGNvdWxkIG5vdCBmaW5kIGEgbmV3IGFnZ3JlZ2F0b3IgZm9yIGl0cyBwb3J0c1xuIiwKLQkJCQkgICAgICAgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKKwkJCQlwcl93YXJuaW5nKERSVl9OQU1FICI6ICVzOiBXYXJuaW5nOiB1bmJpbmRpbmcgYWdncmVnYXRvciwgIgorCQkJCQkgICAiYW5kIGNvdWxkIG5vdCBmaW5kIGEgbmV3IGFnZ3JlZ2F0b3IgZm9yIGl0cyBwb3J0c1xuIiwKKwkJCQkJICAgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKIAkJCX0KIAkJfSBlbHNlIHsgLy8gaW4gY2FzZSB0aGF0IHRoZSBvbmx5IHBvcnQgcmVsYXRlZCB0byB0aGlzIGFnZ3JlZ2F0b3IgaXMgdGhlIG9uZSB3ZSB3YW50IHRvIHJlbW92ZQogCQkJc2VsZWN0X25ld19hY3RpdmVfYWdnID0gYWdncmVnYXRvci0+aXNfYWN0aXZlOwogCQkJLy8gY2xlYXIgdGhlIGFnZ3JlZ2F0b3IKIAkJCWFkX2NsZWFyX2FnZyhhZ2dyZWdhdG9yKTsKIAkJCWlmIChzZWxlY3RfbmV3X2FjdGl2ZV9hZ2cpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICVzOiBSZW1vdmluZyBhbiBhY3RpdmUgYWdncmVnYXRvclxuIiwKLQkJCQkgICAgICAgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKKwkJCQlwcl9pbmZvKERSVl9OQU1FICI6ICVzOiBSZW1vdmluZyBhbiBhY3RpdmUgYWdncmVnYXRvclxuIiwKKwkJCQkJc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKIAkJCQkvLyBzZWxlY3QgbmV3IGFjdGl2ZSBhZ2dyZWdhdG9yCiAJCQkJYWRfYWdnX3NlbGVjdGlvbl9sb2dpYyhfX2dldF9maXJzdF9hZ2cocG9ydCkpOwogCQkJfQpAQCAtMjA2MCw4ICsyMDY1LDggQEAKIAkJCQkJLy8gY2xlYXIgdGhlIGFnZ3JlZ2F0b3IKIAkJCQkJYWRfY2xlYXJfYWdnKHRlbXBfYWdncmVnYXRvcik7CiAJCQkJCWlmIChzZWxlY3RfbmV3X2FjdGl2ZV9hZ2cpIHsKLQkJCQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogJXM6IFJlbW92aW5nIGFuIGFjdGl2ZSBhZ2dyZWdhdG9yXG4iLAotCQkJCQkJICAgICAgIHNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSk7CisJCQkJCQlwcl9pbmZvKERSVl9OQU1FICI6ICVzOiBSZW1vdmluZyBhbiBhY3RpdmUgYWdncmVnYXRvclxuIiwKKwkJCQkJCQlzbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUpOwogCQkJCQkJLy8gc2VsZWN0IG5ldyBhY3RpdmUgYWdncmVnYXRvcgogCQkJCQkJYWRfYWdnX3NlbGVjdGlvbl9sb2dpYyhfX2dldF9maXJzdF9hZ2cocG9ydCkpOwogCQkJCQl9CkBAIC0yMTA5LDggKzIxMTQsOCBAQAogCQkvLyBzZWxlY3QgdGhlIGFjdGl2ZSBhZ2dyZWdhdG9yIGZvciB0aGUgYm9uZAogCQlpZiAoKHBvcnQgPSBfX2dldF9maXJzdF9wb3J0KGJvbmQpKSkgewogCQkJaWYgKCFwb3J0LT5zbGF2ZSkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IGJvbmQncyBmaXJzdCBwb3J0IGlzICIKLQkJCQkgICAgICAgInVuaW5pdGlhbGl6ZWRcbiIsIGJvbmQtPmRldi0+bmFtZSk7CisJCQkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiAlczogV2FybmluZzogYm9uZCdzIGZpcnN0IHBvcnQgaXMgIgorCQkJCQkgICAidW5pbml0aWFsaXplZFxuIiwgYm9uZC0+ZGV2LT5uYW1lKTsKIAkJCQlnb3RvIHJlX2FybTsKIAkJCX0KIApAQCAtMjEyMyw4ICsyMTI4LDggQEAKIAkvLyBmb3IgZWFjaCBwb3J0IHJ1biB0aGUgc3RhdGUgbWFjaGluZXMKIAlmb3IgKHBvcnQgPSBfX2dldF9maXJzdF9wb3J0KGJvbmQpOyBwb3J0OyBwb3J0ID0gX19nZXRfbmV4dF9wb3J0KHBvcnQpKSB7CiAJCWlmICghcG9ydC0+c2xhdmUpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IEZvdW5kIGFuIHVuaW5pdGlhbGl6ZWQgIgotCQkJICAgICAgICJwb3J0XG4iLCBib25kLT5kZXYtPm5hbWUpOworCQkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiAlczogV2FybmluZzogRm91bmQgYW4gdW5pbml0aWFsaXplZCAiCisJCQkJICAgInBvcnRcbiIsIGJvbmQtPmRldi0+bmFtZSk7CiAJCQlnb3RvIHJlX2FybTsKIAkJfQogCkBAIC0yMTY1LDggKzIxNzAsOSBAQAogCQlwb3J0ID0gJihTTEFWRV9BRF9JTkZPKHNsYXZlKS5wb3J0KTsKIAogCQlpZiAoIXBvcnQtPnNsYXZlKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzOiBXYXJuaW5nOiBwb3J0IG9mIHNsYXZlICVzIGlzICIKLQkJCSAgICAgICAidW5pbml0aWFsaXplZFxuIiwgc2xhdmUtPmRldi0+bmFtZSwgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKKwkJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IHBvcnQgb2Ygc2xhdmUgJXMgIgorCQkJCSAgICJpcyB1bmluaXRpYWxpemVkXG4iLAorCQkJCSAgIHNsYXZlLT5kZXYtPm5hbWUsIHNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMjIxMSw5ICsyMjE3LDkgQEAKIAogCS8vIGlmIHNsYXZlIGlzIG51bGwsIHRoZSB3aG9sZSBwb3J0IGlzIG5vdCBpbml0aWFsaXplZAogCWlmICghcG9ydC0+c2xhdmUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBXYXJuaW5nOiAlczogc3BlZWQgIgotCQkgICAgICAgImNoYW5nZWQgZm9yIHVuaW5pdGlhbGl6ZWQgcG9ydCBvbiAlc1xuIiwKLQkJICAgICAgIHNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSk7CisJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogV2FybmluZzogJXM6IHNwZWVkICIKKwkJCSAgICJjaGFuZ2VkIGZvciB1bmluaXRpYWxpemVkIHBvcnQgb24gJXNcbiIsCisJCQkgICBzbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMjM5LDkgKzIyNDUsOSBAQAogCiAJLy8gaWYgc2xhdmUgaXMgbnVsbCwgdGhlIHdob2xlIHBvcnQgaXMgbm90IGluaXRpYWxpemVkCiAJaWYgKCFwb3J0LT5zbGF2ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzOiBXYXJuaW5nOiBkdXBsZXggY2hhbmdlZCAiCi0JCSAgICAgICAiZm9yIHVuaW5pdGlhbGl6ZWQgcG9ydCBvbiAlc1xuIiwKLQkJICAgICAgIHNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSk7CisJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IGR1cGxleCBjaGFuZ2VkICIKKwkJCSAgICJmb3IgdW5pbml0aWFsaXplZCBwb3J0IG9uICVzXG4iLAorCQkJICAgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjI2OCw5ICsyMjc0LDkgQEAKIAogCS8vIGlmIHNsYXZlIGlzIG51bGwsIHRoZSB3aG9sZSBwb3J0IGlzIG5vdCBpbml0aWFsaXplZAogCWlmICghcG9ydC0+c2xhdmUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiBXYXJuaW5nOiAlczogbGluayBzdGF0dXMgY2hhbmdlZCBmb3IgIgotCQkgICAgICAgInVuaW5pdGlhbGl6ZWQgcG9ydCBvbiAlc1xuIiwKLQkJCXNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSk7CisJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogV2FybmluZzogJXM6IGxpbmsgc3RhdHVzIGNoYW5nZWQgZm9yICIKKwkJCSAgICJ1bmluaXRpYWxpemVkIHBvcnQgb24gJXNcbiIsCisJCQkgICBzbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMzc0LDggKzIzODAsOCBAQAogCX0KIAogCWlmIChib25kXzNhZF9nZXRfYWN0aXZlX2FnZ19pbmZvKGJvbmQsICZhZF9pbmZvKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiOiAlczogRXJyb3I6ICIKLQkJICAgICAgICJib25kXzNhZF9nZXRfYWN0aXZlX2FnZ19pbmZvIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKKwkJcHJfZGVidWcoRFJWX05BTUUgIjogJXM6IEVycm9yOiAiCisJCQkgImJvbmRfM2FkX2dldF9hY3RpdmVfYWdnX2luZm8gZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIzODQsOSArMjM5MCw4IEBACiAKIAlpZiAoc2xhdmVzX2luX2FnZyA9PSAwKSB7CiAJCS8qdGhlIGFnZ3JlZ2F0b3IgaXMgZW1wdHkqLwotCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiOiAlczogRXJyb3I6IGFjdGl2ZSAiCi0JCSAgICAgICAiYWdncmVnYXRvciBpcyBlbXB0eVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCXByX2RlYnVnKERSVl9OQU1FICI6ICVzOiBFcnJvcjogYWN0aXZlIGFnZ3JlZ2F0b3IgaXMgZW1wdHlcbiIsCisJCQkgZGV2LT5uYW1lKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yNDA0LDcgKzI0MDksNyBAQAogCX0KIAogCWlmIChzbGF2ZV9hZ2dfbm8gPj0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXM6IEVycm9yOiBDb3VsZG4ndCBmaW5kIGEgc2xhdmUgdG8gdHggb24gIgorCQlwcl9lcnIoRFJWX05BTUUgIjogJXM6IEVycm9yOiBDb3VsZG4ndCBmaW5kIGEgc2xhdmUgdG8gdHggb24gIgogCQkgICAgICAgImZvciBhZ2dyZWdhdG9yIElEICVkXG4iLCBkZXYtPm5hbWUsIGFnZ19pZCk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTI0MzEsNyArMjQzNiw3IEBACiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9CiAJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIGludCBib25kXzNhZF9sYWNwZHVfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUqIHB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggNDZkMzEyYi4uOWI1OTM2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtNzksOCArNzksMTUgQEAKICAqLwogI2RlZmluZSBSTEJfUFJPTUlTQ19USU1FT1VUCTEwKkFMQl9USU1FUl9USUNLU19QRVJfU0VDCiAKLXN0YXRpYyBjb25zdCB1OCBtYWNfYmNhc3RbRVRIX0FMRU5dID0gezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmfTsKLXN0YXRpYyBjb25zdCB1OCBtYWNfdjZfYWxsbWNhc3RbRVRIX0FMRU5dID0gezB4MzMsMHgzMywweDAwLDB4MDAsMHgwMCwweDAxfTsKKyNpZm5kZWYgX19sb25nX2FsaWduZWQKKyNkZWZpbmUgX19sb25nX2FsaWduZWQgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgoc2l6ZW9mKGxvbmcpKSkpKQorI2VuZGlmCitzdGF0aWMgY29uc3QgdTggbWFjX2JjYXN0W0VUSF9BTEVOXSBfX2xvbmdfYWxpZ25lZCA9IHsKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCit9Oworc3RhdGljIGNvbnN0IHU4IG1hY192Nl9hbGxtY2FzdFtFVEhfQUxFTl0gX19sb25nX2FsaWduZWQgPSB7CisJMHgzMywgMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMQorfTsKIHN0YXRpYyBjb25zdCBpbnQgYWxiX2RlbHRhX2luX3RpY2tzID0gSFogLyBBTEJfVElNRVJfVElDS1NfUEVSX1NFQzsKIAogI3ByYWdtYSBwYWNrKDEpCkBAIC0xOTQsNyArMjAxLDcgQEAKIAogCW5ld19oYXNodGJsID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ld19oYXNodGJsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQlwcl9lcnIoRFJWX05BTUUKIAkJICAgICAgICI6ICVzOiBFcnJvcjogRmFpbGVkIHRvIGFsbG9jYXRlIFRMQiBoYXNoIHRhYmxlXG4iLAogCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC0xOwpAQCAtNDYwLDggKzQ2Nyw4IEBACiAKIAkJCWlmIChhc3NpZ25lZF9zbGF2ZSkgewogCQkJCXJ4X2hhc2hfdGFibGVbaW5kZXhdLnNsYXZlID0gYXNzaWduZWRfc2xhdmU7Ci0JCQkJaWYgKG1lbWNtcChyeF9oYXNoX3RhYmxlW2luZGV4XS5tYWNfZHN0LAotCQkJCQkgICBtYWNfYmNhc3QsIEVUSF9BTEVOKSkgeworCQkJCWlmIChjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKHJ4X2hhc2hfdGFibGVbaW5kZXhdLm1hY19kc3QsCisJCQkJCQkJICAgICAgbWFjX2JjYXN0KSkgewogCQkJCQlib25kX2luZm8tPnJ4X2hhc2h0YmxbaW5kZXhdLm50dCA9IDE7CiAJCQkJCWJvbmRfaW5mby0+cnhfbnR0ID0gMTsKIAkJCQkJLyogQSBzbGF2ZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlCkBAIC01MTAsNyArNTE3LDcgQEAKIAkJCQkgY2xpZW50X2luZm8tPnNsYXZlLT5kZXYtPmRldl9hZGRyLAogCQkJCSBjbGllbnRfaW5mby0+bWFjX2RzdCk7CiAJCWlmICghc2tiKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJCXByX2VycihEUlZfTkFNRQogCQkJICAgICAgICI6ICVzOiBFcnJvcjogZmFpbGVkIHRvIGNyZWF0ZSBhbiBBUlAgcGFja2V0XG4iLAogCQkJICAgICAgIGNsaWVudF9pbmZvLT5zbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUpOwogCQkJY29udGludWU7CkBAIC01MjEsNyArNTI4LDcgQEAKIAkJaWYgKGNsaWVudF9pbmZvLT50YWcpIHsKIAkJCXNrYiA9IHZsYW5fcHV0X3RhZyhza2IsIGNsaWVudF9pbmZvLT52bGFuX2lkKTsKIAkJCWlmICghc2tiKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkJcHJfZXJyKERSVl9OQU1FCiAJCQkJICAgICAgICI6ICVzOiBFcnJvcjogZmFpbGVkIHRvIGluc2VydCBWTEFOIHRhZ1xuIiwKIAkJCQkgICAgICAgY2xpZW50X2luZm8tPnNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSk7CiAJCQkJY29udGludWU7CkBAIC01NzUsNyArNTgyLDcgQEAKIAkJY2xpZW50X2luZm8gPSAmKGJvbmRfaW5mby0+cnhfaGFzaHRibFtoYXNoX2luZGV4XSk7CiAKIAkJaWYgKChjbGllbnRfaW5mby0+c2xhdmUgPT0gc2xhdmUpICYmCi0JCSAgICBtZW1jbXAoY2xpZW50X2luZm8tPm1hY19kc3QsIG1hY19iY2FzdCwgRVRIX0FMRU4pKSB7CisJCSAgICBjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKGNsaWVudF9pbmZvLT5tYWNfZHN0LCBtYWNfYmNhc3QpKSB7CiAJCQljbGllbnRfaW5mby0+bnR0ID0gMTsKIAkJCW50dCA9IDE7CiAJCX0KQEAgLTYwNSw3ICs2MTIsNyBAQAogCQljbGllbnRfaW5mbyA9ICYoYm9uZF9pbmZvLT5yeF9oYXNodGJsW2hhc2hfaW5kZXhdKTsKIAogCQlpZiAoIWNsaWVudF9pbmZvLT5zbGF2ZSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQlwcl9lcnIoRFJWX05BTUUKIAkJCSAgICAgICAiOiAlczogRXJyb3I6IGZvdW5kIGEgY2xpZW50IHdpdGggbm8gY2hhbm5lbCBpbiAiCiAJCQkgICAgICAgInRoZSBjbGllbnQncyBoYXNoIHRhYmxlXG4iLAogCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSk7CkBAIC02MTYsOSArNjIzLDkgQEAKIAkJICogdW5pY2FzdCBtYWMgYWRkcmVzcy4KIAkJICovCiAJCWlmICgoY2xpZW50X2luZm8tPmlwX3NyYyA9PSBzcmNfaXApICYmCi0JCSAgICBtZW1jbXAoY2xpZW50X2luZm8tPnNsYXZlLT5kZXYtPmRldl9hZGRyLAotCQkJICAgYm9uZC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pICYmCi0JCSAgICBtZW1jbXAoY2xpZW50X2luZm8tPm1hY19kc3QsIG1hY19iY2FzdCwgRVRIX0FMRU4pKSB7CisJCSAgICBjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKGNsaWVudF9pbmZvLT5zbGF2ZS0+ZGV2LT5kZXZfYWRkciwKKwkJCSAgIGJvbmQtPmRldi0+ZGV2X2FkZHIpICYmCisJCSAgICBjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKGNsaWVudF9pbmZvLT5tYWNfZHN0LCBtYWNfYmNhc3QpKSB7CiAJCQljbGllbnRfaW5mby0+bnR0ID0gMTsKIAkJCWJvbmRfaW5mby0+cnhfbnR0ID0gMTsKIAkJfQpAQCAtNjQ1LDcgKzY1Miw3IEBACiAJCWlmICgoY2xpZW50X2luZm8tPmlwX3NyYyA9PSBhcnAtPmlwX3NyYykgJiYKIAkJICAgIChjbGllbnRfaW5mby0+aXBfZHN0ID09IGFycC0+aXBfZHN0KSkgewogCQkJLyogdGhlIGVudHJ5IGlzIGFscmVhZHkgYXNzaWduZWQgdG8gdGhpcyBjbGllbnQgKi8KLQkJCWlmIChtZW1jbXAoYXJwLT5tYWNfZHN0LCBtYWNfYmNhc3QsIEVUSF9BTEVOKSkgeworCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcl82NGJpdHMoYXJwLT5tYWNfZHN0LCBtYWNfYmNhc3QpKSB7CiAJCQkJLyogdXBkYXRlIG1hYyBhZGRyZXNzIGZyb20gYXJwICovCiAJCQkJbWVtY3B5KGNsaWVudF9pbmZvLT5tYWNfZHN0LCBhcnAtPm1hY19kc3QsIEVUSF9BTEVOKTsKIAkJCX0KQEAgLTY4MCw3ICs2ODcsNyBAQAogCQltZW1jcHkoY2xpZW50X2luZm8tPm1hY19kc3QsIGFycC0+bWFjX2RzdCwgRVRIX0FMRU4pOwogCQljbGllbnRfaW5mby0+c2xhdmUgPSBhc3NpZ25lZF9zbGF2ZTsKIAotCQlpZiAobWVtY21wKGNsaWVudF9pbmZvLT5tYWNfZHN0LCBtYWNfYmNhc3QsIEVUSF9BTEVOKSkgeworCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyXzY0Yml0cyhjbGllbnRfaW5mby0+bWFjX2RzdCwgbWFjX2JjYXN0KSkgewogCQkJY2xpZW50X2luZm8tPm50dCA9IDE7CiAJCQlib25kLT5hbGJfaW5mby5yeF9udHQgPSAxOwogCQl9IGVsc2UgewpAQCAtODAyLDcgKzgwOSw3IEBACiAKIAluZXdfaGFzaHRibCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXdfaGFzaHRibCkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJcHJfZXJyKERSVl9OQU1FCiAJCSAgICAgICAiOiAlczogRXJyb3I6IEZhaWxlZCB0byBhbGxvY2F0ZSBSTEIgaGFzaCB0YWJsZVxuIiwKIAkJICAgICAgIGJvbmQtPmRldi0+bmFtZSk7CiAJCXJldHVybiAtMTsKQEAgLTkyNCw3ICs5MzEsNyBAQAogCiAJCQlza2IgPSB2bGFuX3B1dF90YWcoc2tiLCB2bGFuLT52bGFuX2lkKTsKIAkJCWlmICghc2tiKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkJcHJfZXJyKERSVl9OQU1FCiAJCQkJICAgICAgICI6ICVzOiBFcnJvcjogZmFpbGVkIHRvIGluc2VydCBWTEFOIHRhZ1xuIiwKIAkJCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKIAkJCQljb250aW51ZTsKQEAgLTk1NCw3ICs5NjEsNyBAQAogCW1lbWNweShzX2FkZHIuc2FfZGF0YSwgYWRkciwgZGV2LT5hZGRyX2xlbik7CiAJc19hZGRyLnNhX2ZhbWlseSA9IGRldi0+dHlwZTsKIAlpZiAoZGV2X3NldF9tYWNfYWRkcmVzcyhkZXYsICZzX2FkZHIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQlwcl9lcnIoRFJWX05BTUUKIAkJICAgICAgICI6ICVzOiBFcnJvcjogZGV2X3NldF9tYWNfYWRkcmVzcyBvZiBkZXYgJXMgZmFpbGVkISBBTEIgIgogCQkgICAgICAgIm1vZGUgcmVxdWlyZXMgdGhhdCB0aGUgYmFzZSBkcml2ZXIgc3VwcG9ydCBzZXR0aW5nICIKIAkJICAgICAgICJ0aGUgaHcgYWRkcmVzcyBhbHNvIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlJ3MgIgpAQCAtMTA0NiwyMSArMTA1MywxOCBAQAogCWludCBwZXJtX2N1cnJfZGlmZjsKIAlpbnQgcGVybV9ib25kX2RpZmY7CiAKLQlwZXJtX2N1cnJfZGlmZiA9IG1lbWNtcChzbGF2ZS0+cGVybV9od2FkZHIsCi0JCQkJc2xhdmUtPmRldi0+ZGV2X2FkZHIsCi0JCQkJRVRIX0FMRU4pOwotCXBlcm1fYm9uZF9kaWZmID0gbWVtY21wKHNsYXZlLT5wZXJtX2h3YWRkciwKLQkJCQlib25kLT5kZXYtPmRldl9hZGRyLAotCQkJCUVUSF9BTEVOKTsKKwlwZXJtX2N1cnJfZGlmZiA9IGNvbXBhcmVfZXRoZXJfYWRkcl82NGJpdHMoc2xhdmUtPnBlcm1faHdhZGRyLAorCQkJCQkJICAgc2xhdmUtPmRldi0+ZGV2X2FkZHIpOworCXBlcm1fYm9uZF9kaWZmID0gY29tcGFyZV9ldGhlcl9hZGRyXzY0Yml0cyhzbGF2ZS0+cGVybV9od2FkZHIsCisJCQkJCQkgICBib25kLT5kZXYtPmRldl9hZGRyKTsKIAogCWlmIChwZXJtX2N1cnJfZGlmZiAmJiBwZXJtX2JvbmRfZGlmZikgewogCQlzdHJ1Y3Qgc2xhdmUgKnRtcF9zbGF2ZTsKIAkJaW50IGksIGZvdW5kID0gMDsKIAogCQlib25kX2Zvcl9lYWNoX3NsYXZlKGJvbmQsIHRtcF9zbGF2ZSwgaSkgewotCQkJaWYgKCFtZW1jbXAoc2xhdmUtPnBlcm1faHdhZGRyLAotCQkJCSAgICB0bXBfc2xhdmUtPmRldi0+ZGV2X2FkZHIsCi0JCQkJICAgIEVUSF9BTEVOKSkgeworCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKHNsYXZlLT5wZXJtX2h3YWRkciwKKwkJCQkJCSAgICAgICB0bXBfc2xhdmUtPmRldi0+ZGV2X2FkZHIpKSB7CiAJCQkJZm91bmQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTExNCwxMCArMTExOCwxMCBAQAogCSAqIGNoZWNrIHVuaXF1ZW5lc3Mgb2Ygc2xhdmUncyBtYWMgYWRkcmVzcyBhZ2FpbnN0IHRoZSBvdGhlcgogCSAqIHNsYXZlcyBpbiB0aGUgYm9uZC4KIAkgKi8KLQlpZiAobWVtY21wKHNsYXZlLT5wZXJtX2h3YWRkciwgYm9uZC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKSB7CisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcl82NGJpdHMoc2xhdmUtPnBlcm1faHdhZGRyLCBib25kLT5kZXYtPmRldl9hZGRyKSkgewogCQlib25kX2Zvcl9lYWNoX3NsYXZlKGJvbmQsIHRtcF9zbGF2ZTEsIGkpIHsKLQkJCWlmICghbWVtY21wKHRtcF9zbGF2ZTEtPmRldi0+ZGV2X2FkZHIsIHNsYXZlLT5kZXYtPmRldl9hZGRyLAotCQkJCSAgICBFVEhfQUxFTikpIHsKKwkJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyXzY0Yml0cyh0bXBfc2xhdmUxLT5kZXYtPmRldl9hZGRyLAorCQkJCQkJICAgICAgIHNsYXZlLT5kZXYtPmRldl9hZGRyKSkgewogCQkJCWZvdW5kID0gMTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTExNDAsOSArMTE0NCw4IEBACiAJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCB0bXBfc2xhdmUxLCBpKSB7CiAJCWZvdW5kID0gMDsKIAkJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCB0bXBfc2xhdmUyLCBqKSB7Ci0JCQlpZiAoIW1lbWNtcCh0bXBfc2xhdmUxLT5wZXJtX2h3YWRkciwKLQkJCQkgICAgdG1wX3NsYXZlMi0+ZGV2LT5kZXZfYWRkciwKLQkJCQkgICAgRVRIX0FMRU4pKSB7CisJCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcl82NGJpdHModG1wX3NsYXZlMS0+cGVybV9od2FkZHIsCisJCQkJCQkgICAgICAgdG1wX3NsYXZlMi0+ZGV2LT5kZXZfYWRkcikpIHsKIAkJCQlmb3VuZCA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMTU3LDkgKzExNjAsOCBAQAogCQl9CiAKIAkJaWYgKCFoYXNfYm9uZF9hZGRyKSB7Ci0JCQlpZiAoIW1lbWNtcCh0bXBfc2xhdmUxLT5kZXYtPmRldl9hZGRyLAotCQkJCSAgICBib25kLT5kZXYtPmRldl9hZGRyLAotCQkJCSAgICBFVEhfQUxFTikpIHsKKwkJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyXzY0Yml0cyh0bXBfc2xhdmUxLT5kZXYtPmRldl9hZGRyLAorCQkJCQkJICAgICAgIGJvbmQtPmRldi0+ZGV2X2FkZHIpKSB7CiAKIAkJCQloYXNfYm9uZF9hZGRyID0gdG1wX3NsYXZlMTsKIAkJCX0KQEAgLTExNzAsMTMgKzExNzIsMTUgQEAKIAkJYWxiX3NldF9zbGF2ZV9tYWNfYWRkcihzbGF2ZSwgZnJlZV9tYWNfc2xhdmUtPnBlcm1faHdhZGRyLAogCQkJCSAgICAgICBib25kLT5hbGJfaW5mby5ybGJfZW5hYmxlZCk7CiAKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkgICAgICAgIjogJXM6IFdhcm5pbmc6IHRoZSBodyBhZGRyZXNzIG9mIHNsYXZlICVzIGlzIGluIHVzZSBieSAiCi0JCSAgICAgICAidGhlIGJvbmQ7IGdpdmluZyBpdCB0aGUgaHcgYWRkcmVzcyBvZiAlc1xuIiwKLQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSwgZnJlZV9tYWNfc2xhdmUtPmRldi0+bmFtZSk7CisJCXByX3dhcm5pbmcoRFJWX05BTUUKKwkJCSAgICI6ICVzOiBXYXJuaW5nOiB0aGUgaHcgYWRkcmVzcyBvZiBzbGF2ZSAlcyBpcyAiCisJCQkgICAiaW4gdXNlIGJ5IHRoZSBib25kOyBnaXZpbmcgaXQgdGhlIGh3IGFkZHJlc3MgIgorCQkJICAgIm9mICVzXG4iLAorCQkJICAgYm9uZC0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lLAorCQkJICAgZnJlZV9tYWNfc2xhdmUtPmRldi0+bmFtZSk7CiAKIAl9IGVsc2UgaWYgKGhhc19ib25kX2FkZHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCXByX2VycihEUlZfTkFNRQogCQkgICAgICAgIjogJXM6IEVycm9yOiB0aGUgaHcgYWRkcmVzcyBvZiBzbGF2ZSAlcyBpcyBpbiB1c2UgYnkgdGhlICIKIAkJICAgICAgICJib25kOyBjb3VsZG4ndCBmaW5kIGEgc2xhdmUgd2l0aCBhIGZyZWUgaHcgYWRkcmVzcyB0byAiCiAJCSAgICAgICAiZ2l2ZSBpdCAodGhpcyBzaG91bGQgbm90IGhhdmUgaGFwcGVuZWQpXG4iLApAQCAtMTMxMSw3ICsxMzE1LDcgQEAKIAljYXNlIEVUSF9QX0lQOiB7CiAJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CiAKLQkJaWYgKChtZW1jbXAoZXRoX2RhdGEtPmhfZGVzdCwgbWFjX2JjYXN0LCBFVEhfQUxFTikgPT0gMCkgfHwKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKGV0aF9kYXRhLT5oX2Rlc3QsIG1hY19iY2FzdCkgfHwKIAkJICAgIChpcGgtPmRhZGRyID09IGlwX2JjYXN0KSB8fAogCQkgICAgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19JR01QKSkgewogCQkJZG9fdHhfYmFsYW5jZSA9IDA7CkBAIC0xMzI1LDcgKzEzMjksNyBAQAogCQkvKiBJUHY2IGRvZXNuJ3QgcmVhbGx5IHVzZSBicm9hZGNhc3QgbWFjIGFkZHJlc3MsIGJ1dCBsZWF2ZQogCQkgKiB0aGF0IGhlcmUganVzdCBpbiBjYXNlLgogCQkgKi8KLQkJaWYgKG1lbWNtcChldGhfZGF0YS0+aF9kZXN0LCBtYWNfYmNhc3QsIEVUSF9BTEVOKSA9PSAwKSB7CisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyXzY0Yml0cyhldGhfZGF0YS0+aF9kZXN0LCBtYWNfYmNhc3QpKSB7CiAJCQlkb190eF9iYWxhbmNlID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMzMzLDcgKzEzMzcsNyBAQAogCQkvKiBJUHY2IHVzZXMgYWxsLW5vZGVzIG11bHRpY2FzdCBhcyBhbiBlcXVpdmFsZW50IHRvCiAJCSAqIGJyb2FkY2FzdHMgaW4gSVB2NC4KIAkJICovCi0JCWlmIChtZW1jbXAoZXRoX2RhdGEtPmhfZGVzdCwgbWFjX3Y2X2FsbG1jYXN0LCBFVEhfQUxFTikgPT0gMCkgeworCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcl82NGJpdHMoZXRoX2RhdGEtPmhfZGVzdCwgbWFjX3Y2X2FsbG1jYXN0KSkgewogCQkJZG9fdHhfYmFsYW5jZSA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtMTQxMyw3ICsxNDE3LDcgQEAKIAl9CiAJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CiAJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0xNjU4LDggKzE2NjIsOCBAQAogCQlzdHJ1Y3Qgc2xhdmUgKnRtcF9zbGF2ZTsKIAkJLyogZmluZCBzbGF2ZSB0aGF0IGlzIGhvbGRpbmcgdGhlIGJvbmQncyBtYWMgYWRkcmVzcyAqLwogCQlib25kX2Zvcl9lYWNoX3NsYXZlKGJvbmQsIHRtcF9zbGF2ZSwgaSkgewotCQkJaWYgKCFtZW1jbXAodG1wX3NsYXZlLT5kZXYtPmRldl9hZGRyLAotCQkJCSAgICBib25kLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpIHsKKwkJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyXzY0Yml0cyh0bXBfc2xhdmUtPmRldi0+ZGV2X2FkZHIsCisJCQkJCQkgICAgICAgYm9uZC0+ZGV2LT5kZXZfYWRkcikpIHsKIAkJCQlzd2FwX3NsYXZlID0gdG1wX3NsYXZlOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTczNyw3ICsxNzQxLDggQEAKIAlzd2FwX3NsYXZlID0gTlVMTDsKIAogCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpIHsKLQkJaWYgKCFtZW1jbXAoc2xhdmUtPmRldi0+ZGV2X2FkZHIsIGJvbmRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKSB7CisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyXzY0Yml0cyhzbGF2ZS0+ZGV2LT5kZXZfYWRkciwKKwkJCQkJICAgICAgIGJvbmRfZGV2LT5kZXZfYWRkcikpIHsKIAkJCXN3YXBfc2xhdmUgPSBzbGF2ZTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfaXB2Ni5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2lwdjYuYwppbmRleCAwZDczYmY1Li44MzkyMWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfaXB2Ni5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9pcHY2LmMKQEAgLTc5LDE0ICs3OSwxNCBAQAogCQkJICAgICAgTkRfT1BUX1RBUkdFVF9MTF9BRERSKTsKIAogCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBOQSBwYWNrZXQgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwcl9lcnIoRFJWX05BTUUgIjogTkEgcGFja2V0IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICh2bGFuX2lkKSB7CiAJCXNrYiA9IHZsYW5fcHV0X3RhZyhza2IsIHZsYW5faWQpOwogCQlpZiAoIXNrYikgewotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byBpbnNlcnQgVkxBTiB0YWdcbiIpOworCQkJcHJfZXJyKERSVl9OQU1FICI6IGZhaWxlZCB0byBpbnNlcnQgVkxBTiB0YWdcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggYWExYmUxZi4uYTdlNzMxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC02OTUsNiArNjk1LDkgQEAKIAlzdHJ1Y3QgaWZyZXEgaWZyOwogCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqbWlpOwogCisJaWYgKCFyZXBvcnRpbmcgJiYgIW5ldGlmX3J1bm5pbmcoc2xhdmVfZGV2KSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoYm9uZC0+cGFyYW1zLnVzZV9jYXJyaWVyKQogCQlyZXR1cm4gbmV0aWZfY2Fycmllcl9vayhzbGF2ZV9kZXYpID8gQk1TUl9MU1RBVFVTIDogMDsKIApAQCAtMTMzMSw2ICsxMzM0LDcgQEAKIAlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldiA9IGJvbmQtPmRldjsKIAl1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gYm9uZF9kZXYtPmZlYXR1cmVzOworCXVuc2lnbmVkIGxvbmcgdmxhbl9mZWF0dXJlcyA9IDA7CiAJdW5zaWduZWQgc2hvcnQgbWF4X2hhcmRfaGVhZGVyX2xlbiA9IG1heCgodTE2KUVUSF9ITEVOLAogCQkJCQkJYm9uZF9kZXYtPmhhcmRfaGVhZGVyX2xlbik7CiAJaW50IGk7CkBAIC0xMzQzLDEwICsxMzQ3LDE0IEBACiAKIAlmZWF0dXJlcyAmPSB+TkVUSUZfRl9PTkVfRk9SX0FMTDsKIAorCXZsYW5fZmVhdHVyZXMgPSBib25kLT5maXJzdF9zbGF2ZS0+ZGV2LT52bGFuX2ZlYXR1cmVzOwogCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpIHsKIAkJZmVhdHVyZXMgPSBuZXRkZXZfaW5jcmVtZW50X2ZlYXR1cmVzKGZlYXR1cmVzLAogCQkJCQkJICAgICBzbGF2ZS0+ZGV2LT5mZWF0dXJlcywKIAkJCQkJCSAgICAgTkVUSUZfRl9PTkVfRk9SX0FMTCk7CisJCXZsYW5fZmVhdHVyZXMgPSBuZXRkZXZfaW5jcmVtZW50X2ZlYXR1cmVzKHZsYW5fZmVhdHVyZXMsCisJCQkJCQkJc2xhdmUtPmRldi0+dmxhbl9mZWF0dXJlcywKKwkJCQkJCQlORVRJRl9GX09ORV9GT1JfQUxMKTsKIAkJaWYgKHNsYXZlLT5kZXYtPmhhcmRfaGVhZGVyX2xlbiA+IG1heF9oYXJkX2hlYWRlcl9sZW4pCiAJCQltYXhfaGFyZF9oZWFkZXJfbGVuID0gc2xhdmUtPmRldi0+aGFyZF9oZWFkZXJfbGVuOwogCX0KQEAgLTEzNTQsNiArMTM2Miw3IEBACiBkb25lOgogCWZlYXR1cmVzIHw9IChib25kX2Rldi0+ZmVhdHVyZXMgJiBCT05EX1ZMQU5fRkVBVFVSRVMpOwogCWJvbmRfZGV2LT5mZWF0dXJlcyA9IG5ldGRldl9maXhfZmVhdHVyZXMoZmVhdHVyZXMsIE5VTEwpOworCWJvbmRfZGV2LT52bGFuX2ZlYXR1cmVzID0gbmV0ZGV2X2ZpeF9mZWF0dXJlcyh2bGFuX2ZlYXR1cmVzLCBOVUxMKTsKIAlib25kX2Rldi0+aGFyZF9oZWFkZXJfbGVuID0gbWF4X2hhcmRfaGVhZGVyX2xlbjsKIAogCXJldHVybiAwOwpAQCAtMTc5MCw3ICsxNzk5LDYgQEAKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTsKIAlzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCAqb2xkY3VycmVudDsKIAlzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKLQlpbnQgbWFjX2FkZHJfZGlmZmVyOwogCiAJLyogc2xhdmUgaXMgbm90IGEgc2xhdmUgb3IgbWFzdGVyIGlzIG5vdCBtYXN0ZXIgb2YgdGhpcyBzbGF2ZSAqLwogCWlmICghKHNsYXZlX2Rldi0+ZmxhZ3MgJiBJRkZfU0xBVkUpIHx8CkBAIC0xODE0LDkgKzE4MjIsOCBAQAogCX0KIAogCWlmICghYm9uZC0+cGFyYW1zLmZhaWxfb3Zlcl9tYWMpIHsKLQkJbWFjX2FkZHJfZGlmZmVyID0gbWVtY21wKGJvbmRfZGV2LT5kZXZfYWRkciwgc2xhdmUtPnBlcm1faHdhZGRyLAotCQkJCQkgRVRIX0FMRU4pOwotCQlpZiAoIW1hY19hZGRyX2RpZmZlciAmJiAoYm9uZC0+c2xhdmVfY250ID4gMSkpCisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGJvbmRfZGV2LT5kZXZfYWRkciwgc2xhdmUtPnBlcm1faHdhZGRyKQorCQkgICAgJiYgYm9uZC0+c2xhdmVfY250ID4gMSkKIAkJCXByX3dhcm5pbmcoRFJWX05BTUUKIAkJCSAgICAgICAiOiAlczogV2FybmluZzogdGhlIHBlcm1hbmVudCBIV2FkZHIgb2YgJXMgLSAiCiAJCQkgICAgICAgIiVwTSAtIGlzIHN0aWxsIGluIHVzZSBieSAlcy4gIgpAQCAtNDI4NSw3ICs0MjkyLDcgQEAKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KIAlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCkBAIC00MzE2LDcgKzQzMjMsNyBAQAogCiAJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CiAJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCkBAIC00MzYyLDcgKzQzNjksNyBAQAogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQogCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpAQCAtNDQyMiw3ICs0NDI5LDcgQEAKIAogCS8qIGZyYW1lIHNlbnQgdG8gYWxsIHN1aXRhYmxlIGludGVyZmFjZXMgKi8KIAlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERldmljZSBpbml0aWFsaXphdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNDQ0Myw3ICs0NDUwLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJY29uc3Qgc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC00NzU1LDcgKzQ3NjIsNyBAQAogCQlwYXJhbXMtPmFkX3NlbGVjdCA9IEJPTkRfQURfU1RBQkxFOwogCX0KIAotCWlmIChtYXhfYm9uZHMgPCAwIHx8IG1heF9ib25kcyA+IElOVF9NQVgpIHsKKwlpZiAobWF4X2JvbmRzIDwgMCkgewogCQlwcl93YXJuaW5nKERSVl9OQU1FCiAJCSAgICAgICAiOiBXYXJuaW5nOiBtYXhfYm9uZHMgKCVkKSBub3QgaW4gcmFuZ2UgJWQtJWQsIHNvIGl0ICIKIAkJICAgICAgICJ3YXMgcmVzZXQgdG8gQk9ORF9ERUZBVUxUX01BWF9CT05EUyAoJWQpXG4iLApAQCAtNDgzNyw3ICs0ODQ0LDcgQEAKIAl9CiAKIAlpZiAoYm9uZF9tb2RlID09IEJPTkRfTU9ERV9BTEIpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFIERSVl9OQU1FCisJCXByX25vdGljZShEUlZfTkFNRQogCQkgICAgICAgIjogSW4gQUxCIG1vZGUgeW91IG1pZ2h0IGV4cGVyaWVuY2UgY2xpZW50ICIKIAkJICAgICAgICJkaXNjb25uZWN0aW9ucyB1cG9uIHJlY29ubmVjdGlvbiBvZiBhIGxpbmsgaWYgdGhlICIKIAkJICAgICAgICJib25kaW5nIG1vZHVsZSB1cGRlbGF5IHBhcmFtZXRlciAoJWQgbXNlYykgaXMgIgpAQCAtNDk2MSw5ICs0OTY4LDkgQEAKIAkJICAgICAgIGFycF9pcF9jb3VudCk7CiAKIAkJZm9yIChpID0gMDsgaSA8IGFycF9pcF9jb3VudDsgaSsrKQotCQkJcHJpbnRrKCIgJXMiLCBhcnBfaXBfdGFyZ2V0W2ldKTsKKwkJCXByX2luZm8oIiAlcyIsIGFycF9pcF90YXJnZXRbaV0pOwogCi0JCXByaW50aygiXG4iKTsKKwkJcHJfaW5mbygiXG4iKTsKIAogCX0gZWxzZSBpZiAobWF4X2JvbmRzKSB7CiAJCS8qIG1paW1vbiBhbmQgYXJwX2ludGVydmFsIG5vdCBzZXQsIHdlIG5lZWQgb25lIHNvIHRoaW5ncwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYwppbmRleCA1NWJmMzRmLi42MDQ0ZTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYwpAQCAtMjE4LDkgKzIxOCw4IEBACiAKIAkvKiBRdWljayBzYW5pdHkgY2hlY2sgLS0gaXMgdGhlIGJvbmQgaW50ZXJmYWNlIHVwPyAqLwogCWlmICghKGJvbmQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJICAgICAgICI6ICVzOiBkb2luZyBzbGF2ZSB1cGRhdGVzIHdoZW4gaW50ZXJmYWNlIGlzIGRvd24uXG4iLAotCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKKwkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiAlczogZG9pbmcgc2xhdmUgdXBkYXRlcyB3aGVuICIKKwkJCSAgICJpbnRlcmZhY2UgaXMgZG93bi5cbiIsIGJvbmQtPmRldi0+bmFtZSk7CiAJfQogCiAJLyogTm90ZTogIFdlIGNhbid0IGhvbGQgYm9uZC0+bG9jayBoZXJlLCBhcyBib25kX2NyZWF0ZSBncmFicyBpdC4gKi8KQEAgLTc3OCwxMiArNzc3LDE0IEBACiAJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCWlmICgobmV3X3ZhbHVlICUgYm9uZC0+cGFyYW1zLm1paW1vbikgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkJICAgICAgICI6ICVzOiBXYXJuaW5nOiBkb3duIGRlbGF5ICglZCkgaXMgbm90IGEgbXVsdGlwbGUgIgotCQkJICAgICAgICJvZiBtaWltb24gKCVkKSwgZGVsYXkgcm91bmRlZCB0byAlZCBtc1xuIiwKLQkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIG5ld192YWx1ZSwgYm9uZC0+cGFyYW1zLm1paW1vbiwKLQkJCSAgICAgICAobmV3X3ZhbHVlIC8gYm9uZC0+cGFyYW1zLm1paW1vbikgKgotCQkJICAgICAgIGJvbmQtPnBhcmFtcy5taWltb24pOworCQkJcHJfd2FybmluZyhEUlZfTkFNRQorCQkJCSAgICI6ICVzOiBXYXJuaW5nOiBkb3duIGRlbGF5ICglZCkgaXMgbm90IGEgIgorCQkJCSAgICJtdWx0aXBsZSBvZiBtaWltb24gKCVkKSwgZGVsYXkgcm91bmRlZCAiCisJCQkJICAgInRvICVkIG1zXG4iLAorCQkJCSAgIGJvbmQtPmRldi0+bmFtZSwgbmV3X3ZhbHVlLAorCQkJCSAgIGJvbmQtPnBhcmFtcy5taWltb24sCisJCQkJICAgKG5ld192YWx1ZSAvIGJvbmQtPnBhcmFtcy5taWltb24pICoKKwkJCQkgICBib25kLT5wYXJhbXMubWlpbW9uKTsKIAkJfQogCQlib25kLT5wYXJhbXMuZG93bmRlbGF5ID0gbmV3X3ZhbHVlIC8gYm9uZC0+cGFyYW1zLm1paW1vbjsKIAkJcHJfaW5mbyhEUlZfTkFNRSAiOiAlczogU2V0dGluZyBkb3duIGRlbGF5IHRvICVkLlxuIiwKQEAgLTgzOCwxMiArODM5LDE0IEBACiAJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCWlmICgobmV3X3ZhbHVlICUgYm9uZC0+cGFyYW1zLm1paW1vbikgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkJICAgICAgICI6ICVzOiBXYXJuaW5nOiB1cCBkZWxheSAoJWQpIGlzIG5vdCBhIG11bHRpcGxlICIKLQkJCSAgICAgICAib2YgbWlpbW9uICglZCksIHVwZGVsYXkgcm91bmRlZCB0byAlZCBtc1xuIiwKLQkJCSAgICAgICBib25kLT5kZXYtPm5hbWUsIG5ld192YWx1ZSwgYm9uZC0+cGFyYW1zLm1paW1vbiwKLQkJCSAgICAgICAobmV3X3ZhbHVlIC8gYm9uZC0+cGFyYW1zLm1paW1vbikgKgotCQkJICAgICAgIGJvbmQtPnBhcmFtcy5taWltb24pOworCQkJcHJfd2FybmluZyhEUlZfTkFNRQorCQkJCSAgICI6ICVzOiBXYXJuaW5nOiB1cCBkZWxheSAoJWQpIGlzIG5vdCBhICIKKwkJCQkgICAibXVsdGlwbGUgb2YgbWlpbW9uICglZCksIHVwZGVsYXkgcm91bmRlZCAiCisJCQkJICAgInRvICVkIG1zXG4iLAorCQkJCSAgIGJvbmQtPmRldi0+bmFtZSwgbmV3X3ZhbHVlLAorCQkJCSAgIGJvbmQtPnBhcmFtcy5taWltb24sCisJCQkJICAgKG5ld192YWx1ZSAvIGJvbmQtPnBhcmFtcy5taWltb24pICoKKwkJCQkgICBib25kLT5wYXJhbXMubWlpbW9uKTsKIAkJfQogCQlib25kLT5wYXJhbXMudXBkZWxheSA9IG5ld192YWx1ZSAvIGJvbmQtPnBhcmFtcy5taWltb247CiAJCXByX2luZm8oRFJWX05BTUUgIjogJXM6IFNldHRpbmcgdXAgZGVsYXkgdG8gJWQuXG4iLApAQCAtMTI5OSw5ICsxMzAyLDkgQEAKICAgICAgICAgCQkJbmV3X2FjdGl2ZSA9IHNsYXZlOwogICAgICAgICAJCQlpZiAobmV3X2FjdGl2ZSA9PSBvbGRfYWN0aXZlKSB7CiAJCQkJCS8qIGRvIG5vdGhpbmcgKi8KLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkJCSAgICAgICAJICAgICAgICI6ICVzOiAlcyBpcyBhbHJlYWR5IHRoZSBjdXJyZW50IGFjdGl2ZSBzbGF2ZS5cbiIsCi0JCQkJICAgICAgICAgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKKwkJCQkJcHJfaW5mbyhEUlZfTkFNRQorCQkJCQkJIjogJXM6ICVzIGlzIGFscmVhZHkgdGhlIGN1cnJlbnQgYWN0aXZlIHNsYXZlLlxuIiwKKwkJCQkJCWJvbmQtPmRldi0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSk7CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KIAkJCQllbHNlIHsKQEAgLTEzMDksMTcgKzEzMTIsMTcgQEAKICAgICAgICAgICAgIAkJCQkgICAgKG9sZF9hY3RpdmUpICYmCiAJCQkJICAgICAgICAgICAgKG5ld19hY3RpdmUtPmxpbmsgPT0gQk9ORF9MSU5LX1VQKSAmJgogCQkJCSAgICAgICAgICAgIElTX1VQKG5ld19hY3RpdmUtPmRldikpIHsKLQkJCQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJCQkgICAgICAgCSAgICAgICAgICAgICAgIjogJXM6IFNldHRpbmcgJXMgYXMgYWN0aXZlIHNsYXZlLlxuIiwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAJCQkJYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlKGJvbmQsIG5ld19hY3RpdmUpOworCQkJCQkJcHJfaW5mbyhEUlZfTkFNRQorCQkJCQkJCSI6ICVzOiBTZXR0aW5nICVzIGFzIGFjdGl2ZSBzbGF2ZS5cbiIsCisJCQkJCQkJYm9uZC0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKKwkJCQkJCQlib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoYm9uZCwgbmV3X2FjdGl2ZSk7CiAgICAgICAgIAkJCQl9CiAJCQkJCWVsc2UgewotCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkJCSAgICAgICAJICAgICAgICAgICAgICAiOiAlczogQ291bGQgbm90IHNldCAlcyBhcyBhY3RpdmUgc2xhdmU7ICIKLQkJCQkJCSAgICAgICJlaXRoZXIgJXMgaXMgZG93biBvciB0aGUgbGluayBpcyBkb3duLlxuIiwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lLAotCQkJCQkJICAgICAgc2xhdmUtPmRldi0+bmFtZSk7CisJCQkJCQlwcl9pbmZvKERSVl9OQU1FCisJCQkJCQkJIjogJXM6IENvdWxkIG5vdCBzZXQgJXMgYXMgYWN0aXZlIHNsYXZlOyAiCisJCQkJCQkJImVpdGhlciAlcyBpcyBkb3duIG9yIHRoZSBsaW5rIGlzIGRvd24uXG4iLAorCQkJCQkJCWJvbmQtPmRldi0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSwKKwkJCQkJCQlzbGF2ZS0+ZGV2LT5uYW1lKTsKIAkJCQkJfQogCQkJCQlnb3RvIG91dDsKIAkJCQl9CkBAIC0xNTM3LDggKzE1NDAsOCBAQAogCQkvKiBJcyBzb21lb25lIGJlaW5nIGtpbmt5IGFuZCBuYW1pbmcgYSBkZXZpY2UgYm9uZGluZ19tYXN0ZXI/ICovCiAJCWlmIChfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsCiAJCQkJICAgICAgY2xhc3NfYXR0cl9ib25kaW5nX21hc3RlcnMuYXR0ci5uYW1lKSkKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJuZXR3b3JrIGRldmljZSBuYW1lZCAlcyBhbHJlYWR5IGV4aXN0cyBpbiBzeXNmcyIsCisJCQlwcl9lcnIoIm5ldHdvcmsgZGV2aWNlIG5hbWVkICVzIGFscmVhZHkgIgorCQkJICAgICAgICJleGlzdHMgaW4gc3lzZnMiLAogCQkJICAgICAgIGNsYXNzX2F0dHJfYm9uZGluZ19tYXN0ZXJzLmF0dHIubmFtZSk7CiAJCXJldCA9IDA7CiAJfQpAQCAtMTU2Niw3ICsxNTY5LDcgQEAKIAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmKGRldi0+ZGV2LmtvYmopLCAmYm9uZGluZ19ncm91cCk7CiAJaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRU1FUkcgImVlayEgZGlkbid0IGNyZWF0ZSBncm91cCFcbiIpOworCQlwcl9lbWVyZygiZWVrISBkaWRuJ3QgY3JlYXRlIGdyb3VwIVxuIik7CiAKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmggYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaAppbmRleCA2MjkwYTUwLi42ODI0NzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaAorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaApAQCAtMTYzLDkgKzE2Myw5IEBACiAJdTMyICAgIG9yaWdpbmFsX2ZsYWdzOwogCXUzMiAgICBvcmlnaW5hbF9tdHU7CiAJdTMyICAgIGxpbmtfZmFpbHVyZV9jb3VudDsKKwl1OCAgICAgcGVybV9od2FkZHJbRVRIX0FMRU5dOwogCXUxNiAgICBzcGVlZDsKIAl1OCAgICAgZHVwbGV4OwotCXU4ICAgICBwZXJtX2h3YWRkcltFVEhfQUxFTl07CiAJc3RydWN0IGFkX3NsYXZlX2luZm8gYWRfaW5mbzsgLyogSFVHRSAtIGJldHRlciB0byBkeW5hbWljYWxseSBhbGxvYyAqLwogCXN0cnVjdCB0bGJfc2xhdmVfaW5mbyB0bGJfaW5mbzsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCmluZGV4IDMzODIxYTguLjA5MDA3NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnCkBAIC00MSw2ICs0MSwxMyBAQAogCS0tLWhlbHAtLS0KIAkgIERyaXZlciBmb3IgdGhlIFNKQTEwMDAgQ0FOIGNvbnRyb2xsZXJzIGZyb20gUGhpbGlwcyBvciBOWFAKIAorY29uZmlnIENBTl9TSkExMDAwX0lTQQorCWRlcGVuZHMgb24gQ0FOX1NKQTEwMDAgJiYgSVNBCisJdHJpc3RhdGUgIklTQSBCdXMgYmFzZWQgbGVnYWN5IFNKQTEwMDAgZHJpdmVyIgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGFkZHMgbGVnYWN5IHN1cHBvcnQgZm9yIFNKQTEwMDAgY2hpcHMgY29ubmVjdGVkIHRvCisJICB0aGUgSVNBIGJ1cyB1c2luZyBJL08gcG9ydCwgbWVtb3J5IG1hcHBlZCBvciBpbmRpcmVjdCBhY2Nlc3MuCisKIGNvbmZpZyBDQU5fU0pBMTAwMF9QTEFURk9STQogCWRlcGVuZHMgb24gQ0FOX1NKQTEwMDAKIAl0cmlzdGF0ZSAiR2VuZXJpYyBQbGF0Zm9ybSBCdXMgYmFzZWQgU0pBMTAwMCBkcml2ZXIiCkBAIC02MSwxMSArNjgsMTIgQEAKIAkgIHlvdSBtYXkgd2FudCB0byBlbmFibGUgdGhpcyBvcHRpb24uCiAKIGNvbmZpZyBDQU5fRU1TX1BDSQotCXRyaXN0YXRlICJFTVMgQ1BDLVBDSSBhbmQgQ1BDLVBDSWUgQ2FyZCIKKwl0cmlzdGF0ZSAiRU1TIENQQy1QQ0ksIENQQy1QQ0llIGFuZCBDUEMtMTA0UCBDYXJkIgogCWRlcGVuZHMgb24gUENJICYmIENBTl9TSkExMDAwCiAJLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBvbmUgb3IgdHdvIGNoYW5uZWwgQ1BDLVBDSSBhbmQgQ1BDLVBDSWUKLQkgIGNhcmRzIGZyb20gRU1TIERyLiBUaG9tYXMgV3VlbnNjaGUgKGh0dHA6Ly93d3cuZW1zLXd1ZW5zY2hlLmRlKS4KKwkgIFRoaXMgZHJpdmVyIGlzIGZvciB0aGUgb25lLCB0d28gb3IgZm91ciBjaGFubmVsIENQQy1QQ0ksCisJICBDUEMtUENJZSBhbmQgQ1BDLTEwNFAgY2FyZHMgZnJvbSBFTVMgRHIuIFRob21hcyBXdWVuc2NoZQorCSAgKGh0dHA6Ly93d3cuZW1zLXd1ZW5zY2hlLmRlKS4KIAogY29uZmlnIENBTl9LVkFTRVJfUENJCiAJdHJpc3RhdGUgIkt2YXNlciBQQ0ljYW54IGFuZCBLdmFzZXIgUENJY2FuIFBDSSBDYXJkcyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYwppbmRleCBlMWE0ZjgyLi5mMGI5YTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2Rldi5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIHsKIAlzdHJ1Y3QgY2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKChkZXYtPmZsYWdzICYgSUZGX0VDSE8pICYmIHByaXYtPmVjaG9fc2tiW2lkeF0pIHsKKwlpZiAocHJpdi0+ZWNob19za2JbaWR4XSkgewogCQluZXRpZl9yeChwcml2LT5lY2hvX3NrYltpZHhdKTsKIAkJcHJpdi0+ZWNob19za2JbaWR4XSA9IE5VTEw7CiAJfQpAQCAtMzIzLDYgKzMyMywyMiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoY2FuX2dldF9lY2hvX3NrYik7CiAKIC8qCisgICogUmVtb3ZlIHRoZSBza2IgZnJvbSB0aGUgc3RhY2sgYW5kIGZyZWUgaXQuCisgICoKKyAgKiBUaGUgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGNhbGxlZCB3aGVuIFRYIGZhaWxlZC4KKyAgKi8KK3ZvaWQgY2FuX2ZyZWVfZWNob19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgY2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHByaXYtPmVjaG9fc2tiW2lkeF0pIHsKKwkJa2ZyZWVfc2tiKHByaXYtPmVjaG9fc2tiW2lkeF0pOworCQlwcml2LT5lY2hvX3NrYltpZHhdID0gTlVMTDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjYW5fZnJlZV9lY2hvX3NrYik7CisKKy8qCiAgKiBDQU4gZGV2aWNlIHJlc3RhcnQgZm9yIGJ1cy1vZmYgcmVjb3ZlcnkKICAqLwogdm9pZCBjYW5fcmVzdGFydCh1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC0zNTcsNyArMzczLDYgQEAKIAogCW5ldGlmX3J4KHNrYik7CiAKLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCXN0YXRzLT5yeF9wYWNrZXRzKys7CiAJc3RhdHMtPnJ4X2J5dGVzICs9IGNmLT5jYW5fZGxjOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL01ha2VmaWxlCmluZGV4IDlkMGMwOGQuLjlkMjQ1YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL01ha2VmaWxlCkBAIC0zLDYgKzMsNyBAQAogIwogCiBvYmotJChDT05GSUdfQ0FOX1NKQTEwMDApICs9IHNqYTEwMDAubworb2JqLSQoQ09ORklHX0NBTl9TSkExMDAwX0lTQSkgKz0gc2phMTAwMF9pc2Eubwogb2JqLSQoQ09ORklHX0NBTl9TSkExMDAwX1BMQVRGT1JNKSArPSBzamExMDAwX3BsYXRmb3JtLm8KIG9iai0kKENPTkZJR19DQU5fU0pBMTAwMF9PRl9QTEFURk9STSkgKz0gc2phMTAwMF9vZl9wbGF0Zm9ybS5vCiBvYmotJChDT05GSUdfQ0FOX0VNU19QQ0kpICs9IGVtc19wY2kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvZW1zX3BjaS5jIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvZW1zX3BjaS5jCmluZGV4IDEyMWI2NDEuLjdkODRiOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL2Vtc19wY2kuYworKysgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9lbXNfcGNpLmMKQEAgLTMyLDEzICszMiwxNiBAQAogI2RlZmluZSBEUlZfTkFNRSAgImVtc19wY2kiCiAKIE1PRFVMRV9BVVRIT1IoIlNlYmFzdGlhbiBIYWFzIDxoYWFzQGVtcy13dWVuY2hlLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU29ja2V0LUNBTiBkcml2ZXIgZm9yIEVNUyBDUEMtUENJL1BDSWUgQ0FOIGNhcmRzIik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiRU1TIENQQy1QQ0kvUENJZSBDQU4gY2FyZCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2NrZXQtQ0FOIGRyaXZlciBmb3IgRU1TIENQQy1QQ0kvUENJZS8xMDRQIENBTiBjYXJkcyIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkVNUyBDUEMtUENJL1BDSWUvMTA0UCBDQU4gY2FyZCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogCi0jZGVmaW5lIEVNU19QQ0lfTUFYX0NIQU4gMgorI2RlZmluZSBFTVNfUENJX1YxX01BWF9DSEFOIDIKKyNkZWZpbmUgRU1TX1BDSV9WMl9NQVhfQ0hBTiA0CisjZGVmaW5lIEVNU19QQ0lfTUFYX0NIQU4gICAgRU1TX1BDSV9WMl9NQVhfQ0hBTgogCiBzdHJ1Y3QgZW1zX3BjaV9jYXJkIHsKKwlpbnQgdmVyc2lvbjsKIAlpbnQgY2hhbm5lbHM7CiAKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKQEAgLTYzLDEyICs2NiwyMiBAQAogI2RlZmluZSBQSVRBMl9NSVNDX0NPTkZJRyAgIDB4MDQwMDAwMDAJLyogTXVsdGlwbGV4ZWQgcGFyYWxsZWwgaW50ZXJmYWNlICovCiAKIC8qCisgKiBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhlIFBMWCA5MDMwCisgKi8KKyNkZWZpbmUgUExYX0lDU1IgICAgICAgICAgICAweDRjICAgLyogSW50ZXJydXB0IENvbnRyb2wvU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFBMWF9JQ1NSX0xJTlRJMV9FTkEgMHgwMDAxIC8qIExJTlRpMSBFbmFibGUgKi8KKyNkZWZpbmUgUExYX0lDU1JfUENJSU5UX0VOQSAweDAwNDAgLyogUENJIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgUExYX0lDU1JfTElOVEkxX0NMUiAweDA0MDAgLyogTG9jYWwgRWRnZSBUcmlnZ2VyYWJsZSBJbnRlcnJ1cHQgQ2xlYXIgKi8KKyNkZWZpbmUgUExYX0lDU1JfRU5BX0NMUiAgICAoUExYX0lDU1JfTElOVEkxX0VOQSB8IFBMWF9JQ1NSX1BDSUlOVF9FTkEgfCBcCisJCQkgICAgIFBMWF9JQ1NSX0xJTlRJMV9DTFIpCisKKy8qCiAgKiBUaGUgYm9hcmQgY29uZmlndXJhdGlvbiBpcyBwcm9iYWJseSBmb2xsb3dpbmc6CiAgKiBSWDEgaXMgY29ubmVjdGVkIHRvIGdyb3VuZC4KICAqIFRYMSBpcyBub3QgY29ubmVjdGVkLgogICogQ0xLTyBpcyBub3QgY29ubmVjdGVkLgogICogU2V0dGluZyB0aGUgT0NSIHJlZ2lzdGVyIHRvIDB4REEgaXMgYSBnb29kIGlkZWEuCi0gKiBUaGlzIG1lYW5zICBub3JtYWwgb3V0cHV0IG1vZGUgLCBwdXNoLXB1bGwgYW5kIHRoZSBjb3JyZWN0IHBvbGFyaXR5LgorICogVGhpcyBtZWFucyBub3JtYWwgb3V0cHV0IG1vZGUsIHB1c2gtcHVsbCBhbmQgdGhlIGNvcnJlY3QgcG9sYXJpdHkuCiAgKi8KICNkZWZpbmUgRU1TX1BDSV9PQ1IgICAgICAgICAoT0NSX1RYMF9QVVNIUFVMTCB8IE9DUl9UWDFfUFVTSFBVTEwpCiAKQEAgLTc5LDE3ICs5MiwyMSBAQAogICogaXMgZHJpdmVuIGJ5IHRoZSBmaXJzdCBvbmUgQ0xLT1VUIG91dHB1dC4KICAqLwogI2RlZmluZSBFTVNfUENJX0NEUiAgICAgICAgICAgICAoQ0RSX0NCUCB8IENEUl9DTEtPVVRfTUFTSykKLSNkZWZpbmUgRU1TX1BDSV9NRU1fU0laRSAgICAgICAgNDA5NiAgLyogU2l6ZSBvZiB0aGUgcmVtYXBwZWQgaW8tbWVtb3J5ICovCisKKyNkZWZpbmUgRU1TX1BDSV9WMV9CQVNFX0JBUiAgICAgMQorI2RlZmluZSBFTVNfUENJX1YxX01FTV9TSVpFICAgICA0MDk2CisjZGVmaW5lIEVNU19QQ0lfVjJfQkFTRV9CQVIgICAgIDIKKyNkZWZpbmUgRU1TX1BDSV9WMl9NRU1fU0laRSAgICAgMTI4CiAjZGVmaW5lIEVNU19QQ0lfQ0FOX0JBU0VfT0ZGU0VUIDB4NDAwIC8qIG9mZnNldCB3aGVyZSB0aGUgY29udHJvbGxlcnMgc3RhcnRzICovCiAjZGVmaW5lIEVNU19QQ0lfQ0FOX0NUUkxfU0laRSAgIDB4MjAwIC8qIG1lbW9yeSBzaXplIGZvciBlYWNoIGNvbnRyb2xsZXIgKi8KIAotI2RlZmluZSBFTVNfUENJX1BPUlRfQllURVMgIDB4NCAgICAgLyogRWFjaCByZWdpc3RlciBvY2N1cGllcyA0IGJ5dGVzICovCi0KLSNkZWZpbmUgRU1TX1BDSV9WRU5ET1JfSUQgICAweDExMGEgIC8qIFBDSSBkZXZpY2UgYW5kIHZlbmRvciBJRCAqLwotI2RlZmluZSBFTVNfUENJX0RFVklDRV9JRCAgIDB4MjEwNAotCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZW1zX3BjaV90YmxbXSA9IHsKLQl7RU1TX1BDSV9WRU5ET1JfSUQsIEVNU19QQ0lfREVWSUNFX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCisJLyogQ1BDLVBDSSB2MSAqLworCXtQQ0lfVkVORE9SX0lEX1NJRU1FTlMsIDB4MjEwNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAorCS8qIENQQy1QQ0kgdjIgKi8KKwl7UENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYXzkwMzAsIFBDSV9WRU5ET1JfSURfUExYLCAweDQwMDB9LAorCS8qIENQQy0xMDRQIHYyICovCisJe1BDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF85MDMwLCBQQ0lfVkVORE9SX0lEX1BMWCwgMHg0MDAyfSwKIAl7MCx9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGVtc19wY2lfdGJsKTsKQEAgLTk3LDI4ICsxMTQsNDcgQEAKIC8qCiAgKiBIZWxwZXIgdG8gcmVhZCBpbnRlcm5hbCByZWdpc3RlcnMgZnJvbSBjYXJkIGxvZ2ljIChub3QgQ0FOKQogICovCi1zdGF0aWMgdTggZW1zX3BjaV9yZWFkYihzdHJ1Y3QgZW1zX3BjaV9jYXJkICpjYXJkLCB1bnNpZ25lZCBpbnQgcG9ydCkKK3N0YXRpYyB1OCBlbXNfcGNpX3YxX3JlYWRiKHN0cnVjdCBlbXNfcGNpX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGludCBwb3J0KQogewotCXJldHVybiByZWFkYihjYXJkLT5iYXNlX2FkZHIgKyAocG9ydCAqIEVNU19QQ0lfUE9SVF9CWVRFUykpOworCXJldHVybiByZWFkYihjYXJkLT5iYXNlX2FkZHIgKyAocG9ydCAqIDQpKTsKIH0KIAotc3RhdGljIHU4IGVtc19wY2lfcmVhZF9yZWcoY29uc3Qgc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdiwgaW50IHBvcnQpCitzdGF0aWMgdTggZW1zX3BjaV92MV9yZWFkX3JlZyhjb25zdCBzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2LCBpbnQgcG9ydCkKIHsKLQlyZXR1cm4gcmVhZGIocHJpdi0+cmVnX2Jhc2UgKyAocG9ydCAqIEVNU19QQ0lfUE9SVF9CWVRFUykpOworCXJldHVybiByZWFkYihwcml2LT5yZWdfYmFzZSArIChwb3J0ICogNCkpOwogfQogCi1zdGF0aWMgdm9pZCBlbXNfcGNpX3dyaXRlX3JlZyhjb25zdCBzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgdTggdmFsKQorc3RhdGljIHZvaWQgZW1zX3BjaV92MV93cml0ZV9yZWcoY29uc3Qgc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdiwKKwkJCQkgaW50IHBvcnQsIHU4IHZhbCkKIHsKLQl3cml0ZWIodmFsLCBwcml2LT5yZWdfYmFzZSArIChwb3J0ICogRU1TX1BDSV9QT1JUX0JZVEVTKSk7CisJd3JpdGViKHZhbCwgcHJpdi0+cmVnX2Jhc2UgKyAocG9ydCAqIDQpKTsKIH0KIAotc3RhdGljIHZvaWQgZW1zX3BjaV9wb3N0X2lycShjb25zdCBzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgZW1zX3BjaV92MV9wb3N0X2lycShjb25zdCBzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2KQogewogCXN0cnVjdCBlbXNfcGNpX2NhcmQgKmNhcmQgPSAoc3RydWN0IGVtc19wY2lfY2FyZCAqKXByaXYtPnByaXY7CiAKIAkvKiByZXNldCBpbnQgZmxhZyBvZiBwaXRhICovCi0Jd3JpdGVsKFBJVEEyX0lDUl9JTlQwX0VOIHwgUElUQTJfSUNSX0lOVDAsIGNhcmQtPmNvbmZfYWRkcgotCQkrIFBJVEEyX0lDUik7CisJd3JpdGVsKFBJVEEyX0lDUl9JTlQwX0VOIHwgUElUQTJfSUNSX0lOVDAsCisJICAgICAgIGNhcmQtPmNvbmZfYWRkciArIFBJVEEyX0lDUik7Cit9CisKK3N0YXRpYyB1OCBlbXNfcGNpX3YyX3JlYWRfcmVnKGNvbnN0IHN0cnVjdCBzamExMDAwX3ByaXYgKnByaXYsIGludCBwb3J0KQoreworCXJldHVybiByZWFkYihwcml2LT5yZWdfYmFzZSArIHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBlbXNfcGNpX3YyX3dyaXRlX3JlZyhjb25zdCBzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2LAorCQkJCSBpbnQgcG9ydCwgdTggdmFsKQoreworCXdyaXRlYih2YWwsIHByaXYtPnJlZ19iYXNlICsgcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIGVtc19wY2lfdjJfcG9zdF9pcnEoY29uc3Qgc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgZW1zX3BjaV9jYXJkICpjYXJkID0gKHN0cnVjdCBlbXNfcGNpX2NhcmQgKilwcml2LT5wcml2OworCisJd3JpdGVsKFBMWF9JQ1NSX0VOQV9DTFIsIGNhcmQtPmNvbmZfYWRkciArIFBMWF9JQ1NSKTsKIH0KIAogLyoKQEAgLTEzMCwxMiArMTY2LDEyIEBACiAJdW5zaWduZWQgY2hhciByZXM7CiAKIAkvKiBNYWtlIHN1cmUgU0pBMTAwMCBpcyBpbiByZXNldCBtb2RlICovCi0JZW1zX3BjaV93cml0ZV9yZWcocHJpdiwgUkVHX01PRCwgMSk7CisJcHJpdi0+d3JpdGVfcmVnKHByaXYsIFJFR19NT0QsIDEpOwogCi0JZW1zX3BjaV93cml0ZV9yZWcocHJpdiwgUkVHX0NEUiwgQ0RSX1BFTElDQU4pOworCXByaXYtPndyaXRlX3JlZyhwcml2LCBSRUdfQ0RSLCBDRFJfUEVMSUNBTik7CiAKIAkvKiByZWFkIHJlc2V0LXZhbHVlcyAqLwotCXJlcyA9IGVtc19wY2lfcmVhZF9yZWcocHJpdiwgUkVHX0NEUik7CisJcmVzID0gcHJpdi0+cmVhZF9yZWcocHJpdiwgUkVHX0NEUik7CiAKIAlpZiAocmVzID09IENEUl9QRUxJQ0FOKQogCQlyZXR1cm4gMTsKQEAgLTE4OCw2ICsyMjQsNyBAQAogCXN0cnVjdCBzamExMDAwX3ByaXYgKnByaXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZW1zX3BjaV9jYXJkICpjYXJkOworCWludCBtYXhfY2hhbiwgbWVtX3NpemUsIGJhc2VfYmFyOwogCWludCBlcnIsIGk7CiAKIAkvKiBFbmFibGluZyBQQ0kgZGV2aWNlICovCkBAIC0yMTAsMzcgKzI0Nyw1MiBAQAogCiAJY2FyZC0+Y2hhbm5lbHMgPSAwOwogCi0JLyogUmVtYXAgUElUQSBjb25maWd1cmF0aW9uIHNwYWNlLCBhbmQgY29udHJvbGxlciBtZW1vcnkgYXJlYSAqLwotCWNhcmQtPmNvbmZfYWRkciA9IHBjaV9pb21hcChwZGV2LCAwLCBFTVNfUENJX01FTV9TSVpFKTsKKwlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfUExYKSB7CisJCWNhcmQtPnZlcnNpb24gPSAyOyAvKiBDUEMtUENJIHYyICovCisJCW1heF9jaGFuID0gRU1TX1BDSV9WMl9NQVhfQ0hBTjsKKwkJYmFzZV9iYXIgPSBFTVNfUENJX1YyX0JBU0VfQkFSOworCQltZW1fc2l6ZSA9IEVNU19QQ0lfVjJfTUVNX1NJWkU7CisJfSBlbHNlIHsKKwkJY2FyZC0+dmVyc2lvbiA9IDE7IC8qIENQQy1QQ0kgdjEgKi8KKwkJbWF4X2NoYW4gPSBFTVNfUENJX1YxX01BWF9DSEFOOworCQliYXNlX2JhciA9IEVNU19QQ0lfVjFfQkFTRV9CQVI7CisJCW1lbV9zaXplID0gRU1TX1BDSV9WMV9NRU1fU0laRTsKKwl9CisKKwkvKiBSZW1hcCBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBjb250cm9sbGVyIG1lbW9yeSBhcmVhICovCisJY2FyZC0+Y29uZl9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIDAsIG1lbV9zaXplKTsKIAlpZiAoY2FyZC0+Y29uZl9hZGRyID09IE5VTEwpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmYWlsdXJlX2NsZWFudXA7CiAJfQogCi0JY2FyZC0+YmFzZV9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIDEsIEVNU19QQ0lfTUVNX1NJWkUpOworCWNhcmQtPmJhc2VfYWRkciA9IHBjaV9pb21hcChwZGV2LCBiYXNlX2JhciwgbWVtX3NpemUpOwogCWlmIChjYXJkLT5iYXNlX2FkZHIgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWx1cmVfY2xlYW51cDsKIAl9CiAKLQkvKiBDb25maWd1cmUgUElUQS0yIHBhcmFsbGVsIGludGVyZmFjZSAoZW5hYmxlIE1VWCkgKi8KLQl3cml0ZWwoUElUQTJfTUlTQ19DT05GSUcsIGNhcmQtPmNvbmZfYWRkciArIFBJVEEyX01JU0MpOworCWlmIChjYXJkLT52ZXJzaW9uID09IDEpIHsKKwkJLyogQ29uZmlndXJlIFBJVEEtMiBwYXJhbGxlbCBpbnRlcmZhY2UgKGVuYWJsZSBNVVgpICovCisJCXdyaXRlbChQSVRBMl9NSVNDX0NPTkZJRywgY2FyZC0+Y29uZl9hZGRyICsgUElUQTJfTUlTQyk7CiAKLQkvKiBDaGVjayBmb3IgdW5pcXVlIEVNUyBDQU4gc2lnbmF0dXJlICovCi0JaWYgKGVtc19wY2lfcmVhZGIoY2FyZCwgMCkgIT0gMHg1NSB8fAotCSAgICBlbXNfcGNpX3JlYWRiKGNhcmQsIDEpICE9IDB4QUEgfHwKLQkgICAgZW1zX3BjaV9yZWFkYihjYXJkLCAyKSAhPSAweDAxIHx8Ci0JICAgIGVtc19wY2lfcmVhZGIoY2FyZCwgMykgIT0gMHhDQiB8fAotCSAgICBlbXNfcGNpX3JlYWRiKGNhcmQsIDQpICE9IDB4MTEpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm90IEVNUyBEci4gVGhvbWFzIFd1ZW5zY2hlIGludGVyZmFjZVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZmFpbHVyZV9jbGVhbnVwOworCQkvKiBDaGVjayBmb3IgdW5pcXVlIEVNUyBDQU4gc2lnbmF0dXJlICovCisJCWlmIChlbXNfcGNpX3YxX3JlYWRiKGNhcmQsIDApICE9IDB4NTUgfHwKKwkJICAgIGVtc19wY2lfdjFfcmVhZGIoY2FyZCwgMSkgIT0gMHhBQSB8fAorCQkgICAgZW1zX3BjaV92MV9yZWFkYihjYXJkLCAyKSAhPSAweDAxIHx8CisJCSAgICBlbXNfcGNpX3YxX3JlYWRiKGNhcmQsIDMpICE9IDB4Q0IgfHwKKwkJICAgIGVtc19wY2lfdjFfcmVhZGIoY2FyZCwgNCkgIT0gMHgxMSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJOb3QgRU1TIERyLiBUaG9tYXMgV3VlbnNjaGUgaW50ZXJmYWNlXG4iKTsKKwkJCWVyciA9IC1FTk9ERVY7CisJCQlnb3RvIGZhaWx1cmVfY2xlYW51cDsKKwkJfQogCX0KIAogCWVtc19wY2lfY2FyZF9yZXNldChjYXJkKTsKIAogCS8qIERldGVjdCBhdmFpbGFibGUgY2hhbm5lbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgRU1TX1BDSV9NQVhfQ0hBTjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG1heF9jaGFuOyBpKyspIHsKIAkJZGV2ID0gYWxsb2Nfc2phMTAwMGRldigwKTsKIAkJaWYgKGRldiA9PSBOVUxMKSB7CiAJCQllcnIgPSAtRU5PTUVNOwpAQCAtMjU1LDIwICszMDcsMzIgQEAKIAkJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAJCXByaXYtPnJlZ19iYXNlID0gY2FyZC0+YmFzZV9hZGRyICsgRU1TX1BDSV9DQU5fQkFTRV9PRkZTRVQKIAkJCQkJKyAoaSAqIEVNU19QQ0lfQ0FOX0NUUkxfU0laRSk7CisJCWlmIChjYXJkLT52ZXJzaW9uID09IDEpIHsKKwkJCXByaXYtPnJlYWRfcmVnICA9IGVtc19wY2lfdjFfcmVhZF9yZWc7CisJCQlwcml2LT53cml0ZV9yZWcgPSBlbXNfcGNpX3YxX3dyaXRlX3JlZzsKKwkJCXByaXYtPnBvc3RfaXJxICA9IGVtc19wY2lfdjFfcG9zdF9pcnE7CisJCX0gZWxzZSB7CisJCQlwcml2LT5yZWFkX3JlZyAgPSBlbXNfcGNpX3YyX3JlYWRfcmVnOworCQkJcHJpdi0+d3JpdGVfcmVnID0gZW1zX3BjaV92Ml93cml0ZV9yZWc7CisJCQlwcml2LT5wb3N0X2lycSAgPSBlbXNfcGNpX3YyX3Bvc3RfaXJxOworCQl9CiAKIAkJLyogQ2hlY2sgaWYgY2hhbm5lbCBpcyBwcmVzZW50ICovCiAJCWlmIChlbXNfcGNpX2NoZWNrX2NoYW4ocHJpdikpIHsKLQkJCXByaXYtPnJlYWRfcmVnICA9IGVtc19wY2lfcmVhZF9yZWc7Ci0JCQlwcml2LT53cml0ZV9yZWcgPSBlbXNfcGNpX3dyaXRlX3JlZzsKLQkJCXByaXYtPnBvc3RfaXJxICA9IGVtc19wY2lfcG9zdF9pcnE7CiAJCQlwcml2LT5jYW4uY2xvY2suZnJlcSA9IEVNU19QQ0lfQ0FOX0NMT0NLOwogCQkJcHJpdi0+b2NyID0gRU1TX1BDSV9PQ1I7CiAJCQlwcml2LT5jZHIgPSBFTVNfUENJX0NEUjsKIAogCQkJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAotCQkJLyogRW5hYmxlIGludGVycnVwdHMgZnJvbSBjYXJkICovCi0JCQl3cml0ZWwoUElUQTJfSUNSX0lOVDBfRU4sIGNhcmQtPmNvbmZfYWRkciArIFBJVEEyX0lDUik7CisJCQlpZiAoY2FyZC0+dmVyc2lvbiA9PSAxKQorCQkJCS8qIHJlc2V0IGludCBmbGFnIG9mIHBpdGEgKi8KKwkJCQl3cml0ZWwoUElUQTJfSUNSX0lOVDBfRU4gfCBQSVRBMl9JQ1JfSU5UMCwKKwkJCQkgICAgICAgY2FyZC0+Y29uZl9hZGRyICsgUElUQTJfSUNSKTsKKwkJCWVsc2UKKwkJCQkvKiBlbmFibGUgSVJRIGluIFBMWCA5MDMwICovCisJCQkJd3JpdGVsKFBMWF9JQ1NSX0VOQV9DTFIsCisJCQkJICAgICAgIGNhcmQtPmNvbmZfYWRkciArIFBMWF9JQ1NSKTsKIAogCQkJLyogUmVnaXN0ZXIgU0pBMTAwMCBkZXZpY2UgKi8KIAkJCWVyciA9IHJlZ2lzdGVyX3NqYTEwMDBkZXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDAuYyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDAuYwppbmRleCAwOGViZWU3Li4xNmQyZWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jCkBAIC0yMzgsMTAgKzIzOCwxMCBAQAogICogeHggeHggeHggeHgJIGZmCSBsbCAgIDAwIDExIDIyIDMzIDQ0IDU1IDY2IDc3CiAgKiBbICBjYW4taWQgXSBbZmxhZ3NdIFtsZW5dIFtjYW4gZGF0YSAodXAgdG8gOCBieXRlc10KICAqLwotc3RhdGljIGludCBzamExMDAwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzamExMDAwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CiAJc3RydWN0IGNhbl9mcmFtZSAqY2YgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXNrYi0+ZGF0YTsKIAl1aW50OF90IGZpOwogCXVpbnQ4X3QgZGxjOwpAQCAtMjc1LDE0ICsyNzUsMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZGxjOyBpKyspCiAJCXByaXYtPndyaXRlX3JlZyhwcml2LCBkcmVnKyssIGNmLT5kYXRhW2ldKTsKIAotCXN0YXRzLT50eF9ieXRlcyArPSBkbGM7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAljYW5fcHV0X2VjaG9fc2tiKHNrYiwgZGV2LCAwKTsKIAogCXByaXYtPndyaXRlX3JlZyhwcml2LCBSRUdfQ01SLCBDTURfVFIpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgc2phMTAwMF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMzM5LDcgKzMzOCw2IEBACiAKIAluZXRpZl9yeChza2IpOwogCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAlzdGF0cy0+cnhfcGFja2V0cysrOwogCXN0YXRzLT5yeF9ieXRlcyArPSBkbGM7CiB9CkBAIC00MjcsNyArNDI1LDcgQEAKIAkJZGV2X2RiZyhkZXYtPmRldi5wYXJlbnQsICJhcmJpdHJhdGlvbiBsb3N0IGludGVycnVwdFxuIik7CiAJCWFsYyA9IHByaXYtPnJlYWRfcmVnKHByaXYsIFJFR19BTEMpOwogCQlwcml2LT5jYW4uY2FuX3N0YXRzLmFyYml0cmF0aW9uX2xvc3QrKzsKLQkJc3RhdHMtPnJ4X2Vycm9ycysrOworCQlzdGF0cy0+dHhfZXJyb3JzKys7CiAJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9MT1NUQVJCOwogCQljZi0+ZGF0YVswXSA9IGFsYyAmIDB4MWY7CiAJfQpAQCAtNDU0LDcgKzQ1Miw2IEBACiAKIAluZXRpZl9yeChza2IpOwogCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAlzdGF0cy0+cnhfcGFja2V0cysrOwogCXN0YXRzLT5yeF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKIApAQCAtNDg1LDYgKzQ4Miw3IEBACiAKIAkJaWYgKGlzcmMgJiBJUlFfVEkpIHsKIAkJCS8qIHRyYW5zbWlzc2lvbiBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KKwkJCXN0YXRzLT50eF9ieXRlcyArPSBwcml2LT5yZWFkX3JlZyhwcml2LCBSRUdfRkkpICYgMHhmOwogCQkJc3RhdHMtPnR4X3BhY2tldHMrKzsKIAkJCWNhbl9nZXRfZWNob19za2IoZGV2LCAwKTsKIAkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDBfaXNhLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwX2lzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YTUxZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwX2lzYS5jCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFdvbGZnYW5nIEdyYW5kZWdnZXIgPHdnQGdyYW5kZWdnZXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2EuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2FuLmg+CisjaW5jbHVkZSA8bGludXgvY2FuL2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi9wbGF0Zm9ybS9zamExMDAwLmg+CisKKyNpbmNsdWRlICJzamExMDAwLmgiCisKKyNkZWZpbmUgRFJWX05BTUUgInNqYTEwMDBfaXNhIgorCisjZGVmaW5lIE1BWERFViA4CisKK01PRFVMRV9BVVRIT1IoIldvbGZnYW5nIEdyYW5kZWdnZXIgPHdnQGdyYW5kZWdnZXIuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2NrZXQtQ0FOIGRyaXZlciBmb3IgU0pBMTAwMCBvbiB0aGUgSVNBIGJ1cyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworCisjZGVmaW5lIENMS19ERUZBVUxUCTE2MDAwMDAwCS8qIDE2IE1IeiAqLworI2RlZmluZSBDRFJfREVGQVVMVAkoQ0RSX0NCUCB8IENEUl9DTEtfT0ZGKQorI2RlZmluZSBPQ1JfREVGQVVMVAlPQ1JfVFgwX1BVU0hQVUxMCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBvcnRbTUFYREVWXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1lbVtNQVhERVZdOworc3RhdGljIGludCBfX2RldmluaXRkYXRhIGlycVtNQVhERVZdOworc3RhdGljIGludCBfX2RldmluaXRkYXRhIGNsa1tNQVhERVZdOworc3RhdGljIGNoYXIgX19kZXZpbml0ZGF0YSBjZHJbTUFYREVWXSA9IHtbMCAuLi4gKE1BWERFViAtIDEpXSA9IC0xfTsKK3N0YXRpYyBjaGFyIF9fZGV2aW5pdGRhdGEgb2NyW01BWERFVl0gPSB7WzAgLi4uIChNQVhERVYgLSAxKV0gPSAtMX07CitzdGF0aWMgY2hhciBfX2RldmluaXRkYXRhIGluZGlyZWN0W01BWERFVl0gPSB7WzAgLi4uIChNQVhERVYgLSAxKV0gPSAtMX07CisKK21vZHVsZV9wYXJhbV9hcnJheShwb3J0LCB1bG9uZywgTlVMTCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHBvcnQsICJJL08gcG9ydCBudW1iZXIiKTsKKworbW9kdWxlX3BhcmFtX2FycmF5KG1lbSwgdWxvbmcsIE5VTEwsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhtZW0sICJJL08gbWVtb3J5IGFkZHJlc3MiKTsKKworbW9kdWxlX3BhcmFtX2FycmF5KGluZGlyZWN0LCBieXRlLCBOVUxMLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kaXJlY3QsICJJbmRpcmVjdCBhY2Nlc3MgdmlhIGFkZHJlc3MgYW5kIGRhdGEgcG9ydCIpOworCittb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpcnEsICJJUlEgbnVtYmVyIik7CisKK21vZHVsZV9wYXJhbV9hcnJheShjbGssIGludCwgTlVMTCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGNsaywgIkV4dGVybmFsIG9zY2lsbGF0b3IgY2xvY2sgZnJlcXVlbmN5ICIKKwkJICIoZGVmYXVsdD0xNjAwMDAwMCBbMTYgTUh6XSkiKTsKKworbW9kdWxlX3BhcmFtX2FycmF5KGNkciwgYnl0ZSwgTlVMTCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGNkciwgIkNsb2NrIGRpdmlkZXIgcmVnaXN0ZXIgIgorCQkgIihkZWZhdWx0PTB4NDggW0NEUl9DQlAgfCBDRFJfQ0xLX09GRl0pIik7CisKK21vZHVsZV9wYXJhbV9hcnJheShvY3IsIGJ5dGUsIE5VTEwsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhvY3IsICJPdXRwdXQgY29udHJvbCByZWdpc3RlciAiCisJCSAiKGRlZmF1bHQ9MHgxOCBbT0NSX1RYMF9QVVNIUFVMTF0pIik7CisKKyNkZWZpbmUgU0pBMTAwMF9JT1NJWkUgICAgICAgICAgMHgyMAorI2RlZmluZSBTSkExMDAwX0lPU0laRV9JTkRJUkVDVCAweDAyCisKK3N0YXRpYyB1OCBzamExMDAwX2lzYV9tZW1fcmVhZF9yZWcoY29uc3Qgc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdiwgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVhZGIocHJpdi0+cmVnX2Jhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBzamExMDAwX2lzYV9tZW1fd3JpdGVfcmVnKGNvbnN0IHN0cnVjdCBzamExMDAwX3ByaXYgKnByaXYsCisJCQkJICAgICAgaW50IHJlZywgdTggdmFsKQoreworCXdyaXRlYih2YWwsIHByaXYtPnJlZ19iYXNlICsgcmVnKTsKK30KKworc3RhdGljIHU4IHNqYTEwMDBfaXNhX3BvcnRfcmVhZF9yZWcoY29uc3Qgc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdiwgaW50IHJlZykKK3sKKwlyZXR1cm4gaW5iKCh1bnNpZ25lZCBsb25nKXByaXYtPnJlZ19iYXNlICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgc2phMTAwMF9pc2FfcG9ydF93cml0ZV9yZWcoY29uc3Qgc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdiwKKwkJCQkgICAgICAgaW50IHJlZywgdTggdmFsKQoreworCW91dGIodmFsLCAodW5zaWduZWQgbG9uZylwcml2LT5yZWdfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB1OCBzamExMDAwX2lzYV9wb3J0X3JlYWRfcmVnX2luZGlyZWN0KGNvbnN0IHN0cnVjdCBzamExMDAwX3ByaXYgKnByaXYsCisJCQkJCSAgICAgaW50IHJlZykKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2UgPSAodW5zaWduZWQgbG9uZylwcml2LT5yZWdfYmFzZTsKKworCW91dGIocmVnLCBiYXNlKTsKKwlyZXR1cm4gaW5iKGJhc2UgKyAxKTsKK30KKworc3RhdGljIHZvaWQgc2phMTAwMF9pc2FfcG9ydF93cml0ZV9yZWdfaW5kaXJlY3QoY29uc3Qgc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdiwKKwkJCQkJCWludCByZWcsIHU4IHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2UgPSAodW5zaWduZWQgbG9uZylwcml2LT5yZWdfYmFzZTsKKworCW91dGIocmVnLCBiYXNlKTsKKwlvdXRiKHZhbCwgYmFzZSArIDEpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzamExMDAwX2lzYV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgaWR4KQoreworCWlmIChwb3J0W2lkeF0gfHwgbWVtW2lkeF0pIHsKKwkJaWYgKGlycVtpZHhdKQorCQkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChpZHgpCisJCXJldHVybiAwOworCisJZGV2X2VycihwZGV2LCAiaW5zdWZmaWNpZW50IHBhcmFtZXRlcnMgc3VwcGxpZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzamExMDAwX2lzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdjsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBOVUxMOworCWludCBpb3NpemUgPSBTSkExMDAwX0lPU0laRTsKKwlpbnQgZXJyOworCisJaWYgKG1lbVtpZHhdKSB7CisJCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG1lbVtpZHhdLCBpb3NpemUsIERSVl9OQU1FKSkgeworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBleGl0OworCQl9CisJCWJhc2UgPSBpb3JlbWFwX25vY2FjaGUobWVtW2lkeF0sIGlvc2l6ZSk7CisJCWlmICghYmFzZSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdF9yZWxlYXNlOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGluZGlyZWN0W2lkeF0gPiAwIHx8CisJCSAgICAoaW5kaXJlY3RbaWR4XSA9PSAtMSAmJiBpbmRpcmVjdFswXSA+IDApKQorCQkJaW9zaXplID0gU0pBMTAwMF9JT1NJWkVfSU5ESVJFQ1Q7CisJCWlmICghcmVxdWVzdF9yZWdpb24ocG9ydFtpZHhdLCBpb3NpemUsIERSVl9OQU1FKSkgeworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJZGV2ID0gYWxsb2Nfc2phMTAwMGRldigwKTsKKwlpZiAoIWRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXRfdW5tYXA7CisJfQorCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZGV2LT5pcnEgPSBpcnFbaWR4XTsKKwlwcml2LT5pcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKKwlpZiAobWVtW2lkeF0pIHsKKwkJcHJpdi0+cmVnX2Jhc2UgPSBiYXNlOworCQlkZXYtPmJhc2VfYWRkciA9IG1lbVtpZHhdOworCQlwcml2LT5yZWFkX3JlZyA9IHNqYTEwMDBfaXNhX21lbV9yZWFkX3JlZzsKKwkJcHJpdi0+d3JpdGVfcmVnID0gc2phMTAwMF9pc2FfbWVtX3dyaXRlX3JlZzsKKwl9IGVsc2UgeworCQlwcml2LT5yZWdfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilwb3J0W2lkeF07CisJCWRldi0+YmFzZV9hZGRyID0gcG9ydFtpZHhdOworCisJCWlmIChpb3NpemUgPT0gU0pBMTAwMF9JT1NJWkVfSU5ESVJFQ1QpIHsKKwkJCXByaXYtPnJlYWRfcmVnID0gc2phMTAwMF9pc2FfcG9ydF9yZWFkX3JlZ19pbmRpcmVjdDsKKwkJCXByaXYtPndyaXRlX3JlZyA9IHNqYTEwMDBfaXNhX3BvcnRfd3JpdGVfcmVnX2luZGlyZWN0OworCQl9IGVsc2UgeworCQkJcHJpdi0+cmVhZF9yZWcgPSBzamExMDAwX2lzYV9wb3J0X3JlYWRfcmVnOworCQkJcHJpdi0+d3JpdGVfcmVnID0gc2phMTAwMF9pc2FfcG9ydF93cml0ZV9yZWc7CisJCX0KKwl9CisKKwlpZiAoY2xrW2lkeF0pCisJCXByaXYtPmNhbi5jbG9jay5mcmVxID0gY2xrW2lkeF0gLyAyOworCWVsc2UgaWYgKGNsa1swXSkKKwkJcHJpdi0+Y2FuLmNsb2NrLmZyZXEgPSBjbGtbMF0gLyAyOworCWVsc2UKKwkJcHJpdi0+Y2FuLmNsb2NrLmZyZXEgPSBDTEtfREVGQVVMVCAvIDI7CisKKwlpZiAob2NyW2lkeF0gIT0gLTEpCisJCXByaXYtPm9jciA9IG9jcltpZHhdICYgMHhmZjsKKwllbHNlIGlmIChvY3JbMF0gIT0gLTEpCisJCXByaXYtPm9jciA9IG9jclswXSAmIDB4ZmY7CisJZWxzZQorCQlwcml2LT5vY3IgPSBPQ1JfREVGQVVMVDsKKworCWlmIChjZHJbaWR4XSAhPSAtMSkKKwkJcHJpdi0+Y2RyID0gY2RyW2lkeF0gJiAweGZmOworCWVsc2UgaWYgKGNkclswXSAhPSAtMSkKKwkJcHJpdi0+Y2RyID0gY2RyWzBdICYgMHhmZjsKKwllbHNlCisJCXByaXYtPmNkciA9IENEUl9ERUZBVUxUOworCisJZGV2X3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisJU0VUX05FVERFVl9ERVYoZGV2LCBwZGV2KTsKKworCWVyciA9IHJlZ2lzdGVyX3NqYTEwMDBkZXYoZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIocGRldiwgInJlZ2lzdGVyaW5nICVzIGZhaWxlZCAoZXJyPSVkKVxuIiwKKwkJCURSVl9OQU1FLCBlcnIpOworCQlnb3RvIGV4aXRfdW5tYXA7CisJfQorCisJZGV2X2luZm8ocGRldiwgIiVzIGRldmljZSByZWdpc3RlcmVkIChyZWdfYmFzZT0weCVwLCBpcnE9JWQpXG4iLAorCQkgRFJWX05BTUUsIHByaXYtPnJlZ19iYXNlLCBkZXYtPmlycSk7CisJcmV0dXJuIDA7CisKKyBleGl0X3VubWFwOgorCWlmIChtZW1baWR4XSkKKwkJaW91bm1hcChiYXNlKTsKKyBleGl0X3JlbGVhc2U6CisJaWYgKG1lbVtpZHhdKQorCQlyZWxlYXNlX21lbV9yZWdpb24obWVtW2lkeF0sIGlvc2l6ZSk7CisJZWxzZQorCQlyZWxlYXNlX3JlZ2lvbihwb3J0W2lkeF0sIGlvc2l6ZSk7CisgZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzamExMDAwX2lzYV9yZW1vdmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzamExMDAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJdW5yZWdpc3Rlcl9zamExMDAwZGV2KGRldik7CisJZGV2X3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJaWYgKG1lbVtpZHhdKSB7CisJCWlvdW5tYXAocHJpdi0+cmVnX2Jhc2UpOworCQlyZWxlYXNlX21lbV9yZWdpb24obWVtW2lkeF0sIFNKQTEwMDBfSU9TSVpFKTsKKwl9IGVsc2UgeworCQlpZiAocHJpdi0+cmVhZF9yZWcgPT0gc2phMTAwMF9pc2FfcG9ydF9yZWFkX3JlZ19pbmRpcmVjdCkKKwkJCXJlbGVhc2VfcmVnaW9uKHBvcnRbaWR4XSwgU0pBMTAwMF9JT1NJWkVfSU5ESVJFQ1QpOworCQllbHNlCisJCQlyZWxlYXNlX3JlZ2lvbihwb3J0W2lkeF0sIFNKQTEwMDBfSU9TSVpFKTsKKwl9CisJZnJlZV9zamExMDAwZGV2KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNqYTEwMDBfaXNhX2RyaXZlciA9IHsKKwkubWF0Y2ggPSBzamExMDAwX2lzYV9tYXRjaCwKKwkucHJvYmUgPSBzamExMDAwX2lzYV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc2phMTAwMF9pc2FfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IERSVl9OQU1FLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzamExMDAwX2lzYV9pbml0KHZvaWQpCit7CisJaW50IGVyciA9IGlzYV9yZWdpc3Rlcl9kcml2ZXIoJnNqYTEwMDBfaXNhX2RyaXZlciwgTUFYREVWKTsKKworCWlmICghZXJyKQorCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiTGVnYWN5ICVzIGRyaXZlciBmb3IgbWF4LiAlZCBkZXZpY2VzIHJlZ2lzdGVyZWRcbiIsCisJCSAgICAgICBEUlZfTkFNRSwgTUFYREVWKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2phMTAwMF9pc2FfZXhpdCh2b2lkKQoreworCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmc2phMTAwMF9pc2FfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2phMTAwMF9pc2FfaW5pdCk7Cittb2R1bGVfZXhpdChzamExMDAwX2lzYV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi92Y2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vdmNhbi5jCmluZGV4IGExMGMxZDcuLjY5NzFmNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi92Y2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3ZjYW4uYwpAQCAtODMsNyArODMsNyBAQAogCW5ldGlmX3J4KHNrYik7CiB9CiAKLXN0YXRpYyBpbnQgdmNhbl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHZjYW5fdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAlpbnQgbG9vcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwppbmRleCBlYjA2NjY3Li4wNTkxNmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCkBAIC0yOTE4LDcgKzI5MTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNhc19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgY2FzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTI5MjgsNyArMjkyOCw3IEBACiAJc3RhdGljIGludCByaW5nOwogCiAJaWYgKHNrYl9wYWR0byhza2IsIGNwLT5taW5fZnJhbWVfc2l6ZSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAJLyogWFhYOiB3ZSBuZWVkIHNvbWUgaGlnaGVyLWxldmVsIFFvUyBob29rcyB0byBzdGVlciBwYWNrZXRzIHRvCiAJICogICAgICBpbmRpdmlkdWFsIHF1ZXVlcy4KQEAgLTI5MzYsNyArMjkzNiw3IEBACiAJaWYgKGNhc194bWl0X3R4X3JpbmdOKGNwLCByaW5nKysgJiBOX1RYX1JJTkdTX01BU0ssIHNrYikpCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBjYXNfaW5pdF90eF9kbWEoc3RydWN0IGNhcyAqY3ApCkBAIC00ODc1LDEwICs0ODc1LDYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNJT0NTTUlJUkVHOgkJLyogV3JpdGUgTUlJIFBIWSByZWdpc3Rlci4gKi8KLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7Ci0JCQlyYyA9IC1FUEVSTTsKLQkJCWJyZWFrOwotCQl9CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjcC0+bG9jaywgZmxhZ3MpOwogCQljYXNfbWlmX3BvbGwoY3AsIDApOwogCQlyYyA9IGNhc19waHlfd3JpdGUoY3AsIGRhdGEtPnJlZ19udW0gJiAweDFmLCBkYXRhLT52YWxfaW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKaW5kZXggMzcxMWQ2NC4uOGM2NThjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCkBAIC0xNzc2LDcgKzE3NzYsNyBAQAogLyoKICAqIEFkZHMgdGhlIENQTCBoZWFkZXIgdG8gdGhlIHNrX2J1ZmYgYW5kIHBhc3NlcyBpdCB0byB0MV9zZ2VfdHguCiAgKi8KLWludCB0MV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCituZXRkZXZfdHhfdCB0MV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IHNnZSAqc2dlID0gYWRhcHRlci0+c2dlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuaCBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmgKaW5kZXggOGM5NDA1MS4uMDBjYzM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuaAorKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5oCkBAIC03OCw3ICs3OCw3IEBACiBpcnFyZXR1cm5fdCB0MV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqY29va2llKTsKIGludCB0MV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpOwogCi1pbnQgdDFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK25ldGRldl90eF90IHQxX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIHQxX3NldF92bGFuX2FjY2VsKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgb25fb2ZmKTsKIHZvaWQgdDFfc2dlX3N0YXJ0KHN0cnVjdCBzZ2UgKik7CiB2b2lkIHQxX3NnZV9zdG9wKHN0cnVjdCBzZ2UgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jbmljLmMgYi9kcml2ZXJzL25ldC9jbmljLmMKaW5kZXggNzRjMzQyOS4uZDQ1ZWFjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2NuaWMuYwpAQCAtNzc0LDEwICs3NzQsODEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjbmljX2FsbG9jX2wyX3JpbmdzKHN0cnVjdCBjbmljX2RldiAqZGV2LCBpbnQgcGFnZXMpCit7CisJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CisKKwljcC0+bDJfcmluZ19zaXplID0gcGFnZXMgKiBCQ01fUEFHRV9TSVpFOworCWNwLT5sMl9yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LT5wY2lkZXYsIGNwLT5sMl9yaW5nX3NpemUsCisJCQkJCSAgICZjcC0+bDJfcmluZ19tYXApOworCWlmICghY3AtPmwyX3JpbmcpCisJCXJldHVybiAtRU5PTUVNOworCisJY3AtPmwyX2J1Zl9zaXplID0gKGNwLT5sMl9yeF9yaW5nX3NpemUgKyAxKSAqIGNwLT5sMl9zaW5nbGVfYnVmX3NpemU7CisJY3AtPmwyX2J1Zl9zaXplID0gUEFHRV9BTElHTihjcC0+bDJfYnVmX3NpemUpOworCWNwLT5sMl9idWYgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaWRldiwgY3AtPmwyX2J1Zl9zaXplLAorCQkJCQkgICAmY3AtPmwyX2J1Zl9tYXApOworCWlmICghY3AtPmwyX2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbmljX2FsbG9jX3VpbyhzdHJ1Y3QgY25pY19kZXYgKmRldikgeworCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OworCXN0cnVjdCB1aW9faW5mbyAqdWluZm87CisJaW50IHJldDsKKworCXVpbmZvID0ga3phbGxvYyhzaXplb2YoKnVpbmZvKSwgR0ZQX0FUT01JQyk7CisJaWYgKCF1aW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1aW5mby0+bWVtWzBdLmFkZHIgPSBkZXYtPm5ldGRldi0+YmFzZV9hZGRyOworCXVpbmZvLT5tZW1bMF0uaW50ZXJuYWxfYWRkciA9IGRldi0+cmVndmlldzsKKwl1aW5mby0+bWVtWzBdLnNpemUgPSBkZXYtPm5ldGRldi0+bWVtX2VuZCAtIGRldi0+bmV0ZGV2LT5tZW1fc3RhcnQ7CisJdWluZm8tPm1lbVswXS5tZW10eXBlID0gVUlPX01FTV9QSFlTOworCisJdWluZm8tPm1lbVsxXS5hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGNwLT5zdGF0dXNfYmxrICYgUEFHRV9NQVNLOworCWlmICh0ZXN0X2JpdChDTklDX0ZfQk5YMl9DTEFTUywgJmRldi0+ZmxhZ3MpKSB7CisJCWlmIChjcC0+ZXRoZGV2LT5kcnZfc3RhdGUgJiBDTklDX0RSVl9TVEFURV9VU0lOR19NU0lYKQorCQkJdWluZm8tPm1lbVsxXS5zaXplID0gQk5YMl9TQkxLX01TSVhfQUxJR05fU0laRSAqIDk7CisJCWVsc2UKKwkJCXVpbmZvLT5tZW1bMV0uc2l6ZSA9IEJOWDJfU0JMS19NU0lYX0FMSUdOX1NJWkU7CisKKwkJdWluZm8tPm5hbWUgPSAiYm54Ml9jbmljIjsKKwl9CisKKwl1aW5mby0+bWVtWzFdLm1lbXR5cGUgPSBVSU9fTUVNX0xPR0lDQUw7CisKKwl1aW5mby0+bWVtWzJdLmFkZHIgPSAodW5zaWduZWQgbG9uZykgY3AtPmwyX3Jpbmc7CisJdWluZm8tPm1lbVsyXS5zaXplID0gY3AtPmwyX3Jpbmdfc2l6ZTsKKwl1aW5mby0+bWVtWzJdLm1lbXR5cGUgPSBVSU9fTUVNX0xPR0lDQUw7CisKKwl1aW5mby0+bWVtWzNdLmFkZHIgPSAodW5zaWduZWQgbG9uZykgY3AtPmwyX2J1ZjsKKwl1aW5mby0+bWVtWzNdLnNpemUgPSBjcC0+bDJfYnVmX3NpemU7CisJdWluZm8tPm1lbVszXS5tZW10eXBlID0gVUlPX01FTV9MT0dJQ0FMOworCisJdWluZm8tPnZlcnNpb24gPSBDTklDX01PRFVMRV9WRVJTSU9OOworCXVpbmZvLT5pcnEgPSBVSU9fSVJRX0NVU1RPTTsKKworCXVpbmZvLT5vcGVuID0gY25pY191aW9fb3BlbjsKKwl1aW5mby0+cmVsZWFzZSA9IGNuaWNfdWlvX2Nsb3NlOworCisJdWluZm8tPnByaXYgPSBkZXY7CisKKwlyZXQgPSB1aW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnBjaWRldi0+ZGV2LCB1aW5mbyk7CisJaWYgKHJldCkgeworCQlrZnJlZSh1aW5mbyk7CisJCXJldHVybiByZXQ7CisJfQorCisJY3AtPmNuaWNfdWluZm8gPSB1aW5mbzsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBjbmljX2FsbG9jX2JueDJfcmVzYyhzdHJ1Y3QgY25pY19kZXYgKmRldikKIHsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKLQlzdHJ1Y3QgdWlvX2luZm8gKnVpbmZvOwogCWludCByZXQ7CiAKIAlyZXQgPSBjbmljX2FsbG9jX2RtYShkZXYsICZjcC0+a3dxX2luZm8sIEtXUV9QQUdFX0NOVCwgMSk7CkBAIC03OTQsNjAgKzg2NSwxNCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3I7CiAKLQljcC0+bDJfcmluZ19zaXplID0gMiAqIEJDTV9QQUdFX1NJWkU7Ci0JY3AtPmwyX3JpbmcgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaWRldiwgY3AtPmwyX3Jpbmdfc2l6ZSwKLQkJCQkJICAgJmNwLT5sMl9yaW5nX21hcCk7Ci0JaWYgKCFjcC0+bDJfcmluZykKKwlyZXQgPSBjbmljX2FsbG9jX2wyX3JpbmdzKGRldiwgMik7CisJaWYgKHJldCkKIAkJZ290byBlcnJvcjsKIAotCWNwLT5sMl9idWZfc2l6ZSA9IChjcC0+bDJfcnhfcmluZ19zaXplICsgMSkgKiBjcC0+bDJfc2luZ2xlX2J1Zl9zaXplOwotCWNwLT5sMl9idWZfc2l6ZSA9IFBBR0VfQUxJR04oY3AtPmwyX2J1Zl9zaXplKTsKLQljcC0+bDJfYnVmID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LT5wY2lkZXYsIGNwLT5sMl9idWZfc2l6ZSwKLQkJCQkJICAgJmNwLT5sMl9idWZfbWFwKTsKLQlpZiAoIWNwLT5sMl9idWYpCisJcmV0ID0gY25pY19hbGxvY191aW8oZGV2KTsKKwlpZiAocmV0KQogCQlnb3RvIGVycm9yOwogCi0JdWluZm8gPSBremFsbG9jKHNpemVvZigqdWluZm8pLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXVpbmZvKQotCQlnb3RvIGVycm9yOwotCi0JdWluZm8tPm1lbVswXS5hZGRyID0gZGV2LT5uZXRkZXYtPmJhc2VfYWRkcjsKLQl1aW5mby0+bWVtWzBdLmludGVybmFsX2FkZHIgPSBkZXYtPnJlZ3ZpZXc7Ci0JdWluZm8tPm1lbVswXS5zaXplID0gZGV2LT5uZXRkZXYtPm1lbV9lbmQgLSBkZXYtPm5ldGRldi0+bWVtX3N0YXJ0OwotCXVpbmZvLT5tZW1bMF0ubWVtdHlwZSA9IFVJT19NRU1fUEhZUzsKLQotCXVpbmZvLT5tZW1bMV0uYWRkciA9ICh1bnNpZ25lZCBsb25nKSBjcC0+c3RhdHVzX2JsayAmIFBBR0VfTUFTSzsKLQlpZiAoY3AtPmV0aGRldi0+ZHJ2X3N0YXRlICYgQ05JQ19EUlZfU1RBVEVfVVNJTkdfTVNJWCkKLQkJdWluZm8tPm1lbVsxXS5zaXplID0gQk5YMl9TQkxLX01TSVhfQUxJR05fU0laRSAqIDk7Ci0JZWxzZQotCQl1aW5mby0+bWVtWzFdLnNpemUgPSBCTlgyX1NCTEtfTVNJWF9BTElHTl9TSVpFOwotCXVpbmZvLT5tZW1bMV0ubWVtdHlwZSA9IFVJT19NRU1fTE9HSUNBTDsKLQotCXVpbmZvLT5tZW1bMl0uYWRkciA9ICh1bnNpZ25lZCBsb25nKSBjcC0+bDJfcmluZzsKLQl1aW5mby0+bWVtWzJdLnNpemUgPSBjcC0+bDJfcmluZ19zaXplOwotCXVpbmZvLT5tZW1bMl0ubWVtdHlwZSA9IFVJT19NRU1fTE9HSUNBTDsKLQotCXVpbmZvLT5tZW1bM10uYWRkciA9ICh1bnNpZ25lZCBsb25nKSBjcC0+bDJfYnVmOwotCXVpbmZvLT5tZW1bM10uc2l6ZSA9IGNwLT5sMl9idWZfc2l6ZTsKLQl1aW5mby0+bWVtWzNdLm1lbXR5cGUgPSBVSU9fTUVNX0xPR0lDQUw7Ci0KLQl1aW5mby0+bmFtZSA9ICJibngyX2NuaWMiOwotCXVpbmZvLT52ZXJzaW9uID0gQ05JQ19NT0RVTEVfVkVSU0lPTjsKLQl1aW5mby0+aXJxID0gVUlPX0lSUV9DVVNUT007Ci0KLQl1aW5mby0+b3BlbiA9IGNuaWNfdWlvX29wZW47Ci0JdWluZm8tPnJlbGVhc2UgPSBjbmljX3Vpb19jbG9zZTsKLQotCXVpbmZvLT5wcml2ID0gZGV2OwotCi0JcmV0ID0gdWlvX3JlZ2lzdGVyX2RldmljZSgmZGV2LT5wY2lkZXYtPmRldiwgdWluZm8pOwotCWlmIChyZXQpIHsKLQkJa2ZyZWUodWluZm8pOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWNwLT5jbmljX3VpbmZvID0gdWluZm87Ci0KIAlyZXR1cm4gMDsKIAogZXJyb3I6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcG1hYy5jIGIvZHJpdmVycy9uZXQvY3BtYWMuYwppbmRleCBmZDVlMzJjLi4zZTNmYWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jcG1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2NwbWFjLmMKQEAgLTU0LDcgKzU0LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWdfbGV2ZWwsICJOdW1iZXIgb2YgTkVUSUZfTVNHIGJpdHMgdG8gZW5hYmxlIik7CiBNT0RVTEVfUEFSTV9ERVNDKGR1bWJfc3dpdGNoLCAiQXNzdW1lIHN3aXRjaCBpcyBub3QgY29ubmVjdGVkIHRvIE1ESU8gYnVzIik7CiAKLSNkZWZpbmUgQ1BNQUNfVkVSU0lPTiAiMC41LjAiCisjZGVmaW5lIENQTUFDX1ZFUlNJT04gIjAuNS4xIgogLyogZnJhbWUgc2l6ZSArIDgwMi4xcSB0YWcgKi8KICNkZWZpbmUgQ1BNQUNfU0tCX1NJWkUJCShFVEhfRlJBTUVfTEVOICsgNCkKICNkZWZpbmUgQ1BNQUNfUVVFVUVTCTgKQEAgLTExMDksNyArMTEwOSw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjcG1hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByYywgcGh5X2lkOwotCWNoYXIgKm1kaW9fYnVzX2lkID0gIjAiOworCWNoYXIgbWRpb19idXNfaWRbQlVTX0lEX1NJWkVdOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtOwogCXN0cnVjdCBjcG1hY19wcml2ICpwcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMTE3LDIyICsxMTE3LDIzIEBACiAKIAlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0JZm9yIChwaHlfaWQgPSAwOyBwaHlfaWQgPCBQSFlfTUFYX0FERFI7IHBoeV9pZCsrKSB7Ci0JCWlmICghKHBkYXRhLT5waHlfbWFzayAmICgxIDw8IHBoeV9pZCkpKQotCQkJY29udGludWU7Ci0JCWlmICghY3BtYWNfbWlpLT5waHlfbWFwW3BoeV9pZF0pCi0JCQljb250aW51ZTsKLQkJYnJlYWs7CisJaWYgKGV4dGVybmFsX3N3aXRjaCB8fCBkdW1iX3N3aXRjaCkgeworCQlzdHJuY3B5KG1kaW9fYnVzX2lkLCAiMCIsIEJVU19JRF9TSVpFKTsgLyogZml4ZWQgcGh5cyBidXMgKi8KKwkJcGh5X2lkID0gcGRldi0+aWQ7CisJfSBlbHNlIHsKKwkJZm9yIChwaHlfaWQgPSAwOyBwaHlfaWQgPCBQSFlfTUFYX0FERFI7IHBoeV9pZCsrKSB7CisJCQlpZiAoIShwZGF0YS0+cGh5X21hc2sgJiAoMSA8PCBwaHlfaWQpKSkKKwkJCQljb250aW51ZTsKKwkJCWlmICghY3BtYWNfbWlpLT5waHlfbWFwW3BoeV9pZF0pCisJCQkJY29udGludWU7CisJCQlzdHJuY3B5KG1kaW9fYnVzX2lkLCBjcG1hY19taWktPmlkLCBCVVNfSURfU0laRSk7CisJCQlicmVhazsKKwkJfQogCX0KIAogCWlmIChwaHlfaWQgPT0gUEhZX01BWF9BRERSKSB7Ci0JCWlmIChleHRlcm5hbF9zd2l0Y2ggfHwgZHVtYl9zd2l0Y2gpIHsKLQkJCW1kaW9fYnVzX2lkID0gMDsgLyogZml4ZWQgcGh5cyBidXMgKi8KLQkJCXBoeV9pZCA9IHBkZXYtPmlkOwotCQl9IGVsc2UgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gUEhZIHByZXNlbnRcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gUEhZIHByZXNlbnRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2YoKnByaXYpLCBDUE1BQ19RVUVVRVMpOwpAQCAtMTE2Niw4ICsxMTY3LDExIEBACiAJcHJpdi0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KGRlYnVnX2xldmVsLCAweGZmKTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgcGRhdGEtPmRldl9hZGRyLCBzaXplb2YoZGV2LT5kZXZfYWRkcikpOwogCi0JcHJpdi0+cGh5ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmY3BtYWNfbWlpLT5waHlfbWFwW3BoeV9pZF0tPmRldiksCi0JCQkJJmNwbWFjX2FkanVzdF9saW5rLCAwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKKwlzbnByaW50Zihwcml2LT5waHlfbmFtZSwgQlVTX0lEX1NJWkUsIFBIWV9JRF9GTVQsIG1kaW9fYnVzX2lkLCBwaHlfaWQpOworCisJcHJpdi0+cGh5ID0gcGh5X2Nvbm5lY3QoZGV2LCBwcml2LT5waHlfbmFtZSwgJmNwbWFjX2FkanVzdF9saW5rLCAwLAorCQkJCQkJUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7CisKIAlpZiAoSVNfRVJSKHByaXYtPnBoeSkpIHsKIAkJaWYgKG5ldGlmX21zZ19kcnYocHJpdikpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIiwKQEAgLTEyNDEsMTEgKzEyNDUsMTEgQEAKIAogCWNwbWFjX21paS0+cmVzZXQoY3BtYWNfbWlpKTsKIAotCWZvciAoaSA9IDA7IGkgPCAzMDAwMDA7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgMzAwOyBpKyspCiAJCWlmICgobWFzayA9IGNwbWFjX3JlYWQoY3BtYWNfbWlpLT5wcml2LCBDUE1BQ19NRElPX0FMSVZFKSkpCiAJCQlicmVhazsKIAkJZWxzZQotCQkJY3B1X3JlbGF4KCk7CisJCQltc2xlZXAoMTApOwogCiAJbWFzayAmPSAweDdmZmZmZmZmOwogCWlmIChtYXNrICYgKG1hc2sgLSAxKSkgewpAQCAtMTI1NCw3ICsxMjU4LDcgQEAKIAl9CiAKIAljcG1hY19taWktPnBoeV9tYXNrID0gfihtYXNrIHwgMHg4MDAwMDAwMCk7Ci0Jc25wcmludGYoY3BtYWNfbWlpLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiMCIpOworCXNucHJpbnRmKGNwbWFjX21paS0+aWQsIE1JSV9CVVNfSURfU0laRSwgIjEiKTsKIAogCXJlcyA9IG1kaW9idXNfcmVnaXN0ZXIoY3BtYWNfbWlpKTsKIAlpZiAocmVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMgYi9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYwppbmRleCA3YTE4ZGM3Li4xNWMwMTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYworKysgYi9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYwpAQCAtMTEwOCw3ICsxMTA4LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3M4OXgwLmMgYi9kcml2ZXJzL25ldC9jczg5eDAuYwppbmRleCA1NTQ0NWY5Li4wYzU0MjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jczg5eDAuYworKysgYi9kcml2ZXJzL25ldC9jczg5eDAuYwpAQCAtMTc3LDEzICsxNzcsMTAgQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX01BQ0hfSVhEUDIzNTEpCiBzdGF0aWMgdW5zaWduZWQgaW50IG5ldGNhcmRfcG9ydGxpc3RbXSBfX3VzZWQgX19pbml0ZGF0YSA9IHtJWERQMjM1MV9WSVJUX0NTODkwMF9CQVNFLCAwfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3M4OTAwX2lycV9tYXBbXSA9IHtJUlFfSVhEUDIzNTFfQ1M4OTAwLCAwLCAwLCAwfTsKLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lYRFAyWDAxKQotI2luY2x1ZGUgPGFzbS9pcnEuaD4KIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmV0Y2FyZF9wb3J0bGlzdFtdIF9fdXNlZCBfX2luaXRkYXRhID0ge0lYRFAyWDAxX0NTODkwMF9WSVJUX0JBU0UsIDB9Owogc3RhdGljIHVuc2lnbmVkIGludCBjczg5MDBfaXJxX21hcFtdID0ge0lSUV9JWERQMlgwMV9DUzg5MDAsIDAsIDAsIDB9OwogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9QTlgwMTBYKQotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNkZWZpbmUgQ0lSUlVTX0RFRkFVTFRfQkFTRQlJT19BRERSRVNTKEVYVF9TVEFUSUMyX3MwX0JBU0UgKyAweDIwMDAwMCkJLyogPSBQaHlzaWNhbCBhZGRyZXNzIDB4NDgyMDAwMDAgKi8KICNkZWZpbmUgQ0lSUlVTX0RFRkFVTFRfSVJRCVZIX0lOVENfSU5UX05VTV9DQVNDQURFRF9JTlRFUlJVUFRfMSAvKiBFdmVudCBpbnB1dHMgYmFuayAxIC0gSUQgMzUvYml0IDMgKi8KQEAgLTI0OSw3ICsyNDYsNyBAQAogCiBzdGF0aWMgaW50IGNzODl4MF9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkciwgaW50IG1vZHVsYXIpOwogc3RhdGljIGludCBuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IG5ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBuZXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBuZXRfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTEzNjcsNyArMTM2NCw3IEBACiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAkJCWRpc2FibGVfZG1hKGRldi0+ZG1hKTsKIAkJCWNsZWFyX2RtYV9mZihkZXYtPmRtYSk7Ci0JCQlzZXRfZG1hX21vZGUoZGV2LT5kbWEsIDB4MTQpOyAvKiBhdXRvX2luaXQgYXMgd2VsbCAqLworCQkJc2V0X2RtYV9tb2RlKGRldi0+ZG1hLCBETUFfUlhfTU9ERSk7IC8qIGF1dG9faW5pdCBhcyB3ZWxsICovCiAJCQlzZXRfZG1hX2FkZHIoZGV2LT5kbWEsIGlzYV92aXJ0X3RvX2J1cyhscC0+ZG1hX2J1ZmYpKTsKIAkJCXNldF9kbWFfY291bnQoZGV2LT5kbWEsIGxwLT5kbWFzaXplKjEwMjQpOwogCQkJZW5hYmxlX2RtYShkZXYtPmRtYSk7CkBAIC0xNTIxLDcgKzE1MTgsNyBAQAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotc3RhdGljIGludCBuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTU3Miw3ICsxNTY5LDcgQEAKIAkgKiB0byByZXN0YXJ0IHRoZSBuZXRkZXZpY2UgbGF5ZXIKIAkgKi8KIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFRoZSB0eXBpY2FsIHdvcmtsb2FkIG9mIHRoZSBkcml2ZXI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKaW5kZXggMTY5NGZhZC4uMmIxYWVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaApAQCAtMjc2LDYgKzI3NiwxNCBAQAogCXJldHVybiBuZXRkZXZfcHJpdihhZGFwLT5wb3J0W2lkeF0pOwogfQogCitzdGF0aWMgaW5saW5lIGludCBwaHkycG9ydGlkKHN0cnVjdCBjcGh5ICpwaHkpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBwaHktPmFkYXB0ZXI7CisJc3RydWN0IHBvcnRfaW5mbyAqcG9ydDAgPSBhZGFwMnBpbmZvKGFkYXAsIDApOworCisJcmV0dXJuICZwb3J0MC0+cGh5ID09IHBoeSA/IDAgOiAxOworfQorCiAjZGVmaW5lIE9GRkxPQURfREVWTUFQX0JJVCAxNQogCiAjZGVmaW5lIHRkZXYyYWRhcChkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGFkYXB0ZXIsIHRkZXYpCkBAIC0zMDEsNyArMzA5LDcgQEAKIHZvaWQgdDNfZnJlZV9zZ2VfcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwKTsKIHZvaWQgdDNfc2dlX2Vycl9pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwogaXJxX2hhbmRsZXJfdCB0M19pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIGludCBwb2xsaW5nKTsKLWludCB0M19ldGhfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK25ldGRldl90eF90IHQzX2V0aF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IHQzX21nbXRfdHgoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCB0M191cGRhdGVfcXNldF9jb2FsZXNjZShzdHJ1Y3Qgc2dlX3FzZXQgKnFzLCBjb25zdCBzdHJ1Y3QgcXNldF9wYXJhbXMgKnApOwogaW50IHQzX3NnZV9hbGxvY19xc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgaWQsIGludCBucG9ydHMsCkBAIC0zMTIsNCArMzIwLDYgQEAKIAkJdW5zaWduZWQgY2hhciAqZGF0YSk7CiBpcnFyZXR1cm5fdCB0M19zZ2VfaW50cl9tc2l4KGludCBpcnEsIHZvaWQgKmNvb2tpZSk7CiAKK2ludCB0M19nZXRfZWRjX2Z3KHN0cnVjdCBjcGh5ICpwaHksIGludCBlZGNfaWR4LCBpbnQgc2l6ZSk7CisKICNlbmRpZgkJCQkvKiBfX1QzX0FEQVBURVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMKaW5kZXggOWZlMDA4ZS4uNTI0OGY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWVsMTAwMi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FlbDEwMDIuYwpAQCAtMjI0LDEyICsyMjQsNiBAQAogCXJldHVybiB0M19waHlfcmVzZXQocGh5LCBNRElPX01NRF9QTUFQTUQsIHdhaXQpOwogfQogCi1zdGF0aWMgaW50IGFlbDEwMDZfcG93ZXJfZG93bihzdHJ1Y3QgY3BoeSAqcGh5LCBpbnQgZW5hYmxlKQotewotCXJldHVybiBtZGlvX3NldF9mbGFnKCZwaHktPm1kaW8sIHBoeS0+bWRpby5wcnRhZCwgTURJT19NTURfUE1BUE1ELAotCQkJICAgICBNRElPX0NUUkwxLCBNRElPX0NUUkwxX0xQT1dFUiwgZW5hYmxlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBjcGh5X29wcyBhZWwxMDA2X29wcyA9IHsKIAkucmVzZXQgPSBhZWwxMDA2X3Jlc2V0LAogCS5pbnRyX2VuYWJsZSA9IHQzX3BoeV9sYXNpX2ludHJfZW5hYmxlLApAQCAtMjM3LDcgKzIzMSw3IEBACiAJLmludHJfY2xlYXIgPSB0M19waHlfbGFzaV9pbnRyX2NsZWFyLAogCS5pbnRyX2hhbmRsZXIgPSB0M19waHlfbGFzaV9pbnRyX2hhbmRsZXIsCiAJLmdldF9saW5rX3N0YXR1cyA9IGdldF9saW5rX3N0YXR1c19yLAotCS5wb3dlcl9kb3duID0gYWVsMTAwNl9wb3dlcl9kb3duLAorCS5wb3dlcl9kb3duID0gYWVsMTAwMl9wb3dlcl9kb3duLAogCS5tbWRzID0gTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19QQ1MgfCBNRElPX0RFVlNfUEhZWFMsCiB9OwogCkBAIC0zMDQsMjc5ICsyOTgsNyBAQAogCQl7IE1ESU9fTU1EX1BNQVBNRCwgMHhjMDRhLCAweGZmZmYsIDB4NTIwMCB9LAogCQl7IDAsIDAsIDAsIDAgfQogCX07Ci0Jc3RhdGljIHUxNiBzcl9lZGNbXSA9IHsKLQkJMHhjYzAwLCAweDJmZjQsCi0JCTB4Y2MwMSwgMHgzY2Q0LAotCQkweGNjMDIsIDB4MjAxNSwKLQkJMHhjYzAzLCAweDMxMDUsCi0JCTB4Y2MwNCwgMHg2NTI0LAotCQkweGNjMDUsIDB4MjdmZiwKLQkJMHhjYzA2LCAweDMwMGYsCi0JCTB4Y2MwNywgMHgyYzhiLAotCQkweGNjMDgsIDB4MzAwYiwKLQkJMHhjYzA5LCAweDQwMDksCi0JCTB4Y2MwYSwgMHg0MDBlLAotCQkweGNjMGIsIDB4MmY3MiwKLQkJMHhjYzBjLCAweDMwMDIsCi0JCTB4Y2MwZCwgMHgxMDAyLAotCQkweGNjMGUsIDB4MjE3MiwKLQkJMHhjYzBmLCAweDMwMTIsCi0JCTB4Y2MxMCwgMHgxMDAyLAotCQkweGNjMTEsIDB4MjVkMiwKLQkJMHhjYzEyLCAweDMwMTIsCi0JCTB4Y2MxMywgMHgxMDAyLAotCQkweGNjMTQsIDB4ZDAxZSwKLQkJMHhjYzE1LCAweDI3ZDIsCi0JCTB4Y2MxNiwgMHgzMDEyLAotCQkweGNjMTcsIDB4MTAwMiwKLQkJMHhjYzE4LCAweDIwMDQsCi0JCTB4Y2MxOSwgMHgzYzg0LAotCQkweGNjMWEsIDB4NjQzNiwKLQkJMHhjYzFiLCAweDIwMDcsCi0JCTB4Y2MxYywgMHgzZjg3LAotCQkweGNjMWQsIDB4ODY3NiwKLQkJMHhjYzFlLCAweDQwYjcsCi0JCTB4Y2MxZiwgMHhhNzQ2LAotCQkweGNjMjAsIDB4NDA0NywKLQkJMHhjYzIxLCAweDU2NzMsCi0JCTB4Y2MyMiwgMHgyOTgyLAotCQkweGNjMjMsIDB4MzAwMiwKLQkJMHhjYzI0LCAweDEzZDIsCi0JCTB4Y2MyNSwgMHg4YmJkLAotCQkweGNjMjYsIDB4Mjg2MiwKLQkJMHhjYzI3LCAweDMwMTIsCi0JCTB4Y2MyOCwgMHgxMDAyLAotCQkweGNjMjksIDB4MjA5MiwKLQkJMHhjYzJhLCAweDMwMTIsCi0JCTB4Y2MyYiwgMHgxMDAyLAotCQkweGNjMmMsIDB4NWNjMywKLQkJMHhjYzJkLCAweDMxNCwKLQkJMHhjYzJlLCAweDI5NDIsCi0JCTB4Y2MyZiwgMHgzMDAyLAotCQkweGNjMzAsIDB4MTAwMiwKLQkJMHhjYzMxLCAweGQwMTksCi0JCTB4Y2MzMiwgMHgyMDMyLAotCQkweGNjMzMsIDB4MzAxMiwKLQkJMHhjYzM0LCAweDEwMDIsCi0JCTB4Y2MzNSwgMHgyYTA0LAotCQkweGNjMzYsIDB4M2M3NCwKLQkJMHhjYzM3LCAweDY0MzUsCi0JCTB4Y2MzOCwgMHgyZmE0LAotCQkweGNjMzksIDB4M2NkNCwKLQkJMHhjYzNhLCAweDY2MjQsCi0JCTB4Y2MzYiwgMHg1NTYzLAotCQkweGNjM2MsIDB4MmQ0MiwKLQkJMHhjYzNkLCAweDMwMDIsCi0JCTB4Y2MzZSwgMHgxM2QyLAotCQkweGNjM2YsIDB4NDY0ZCwKLQkJMHhjYzQwLCAweDI4NjIsCi0JCTB4Y2M0MSwgMHgzMDEyLAotCQkweGNjNDIsIDB4MTAwMiwKLQkJMHhjYzQzLCAweDIwMzIsCi0JCTB4Y2M0NCwgMHgzMDEyLAotCQkweGNjNDUsIDB4MTAwMiwKLQkJMHhjYzQ2LCAweDJmYjQsCi0JCTB4Y2M0NywgMHgzY2Q0LAotCQkweGNjNDgsIDB4NjYyNCwKLQkJMHhjYzQ5LCAweDU1NjMsCi0JCTB4Y2M0YSwgMHgyZDQyLAotCQkweGNjNGIsIDB4MzAwMiwKLQkJMHhjYzRjLCAweDEzZDIsCi0JCTB4Y2M0ZCwgMHgyZWQyLAotCQkweGNjNGUsIDB4MzAwMiwKLQkJMHhjYzRmLCAweDEwMDIsCi0JCTB4Y2M1MCwgMHgyZmQyLAotCQkweGNjNTEsIDB4MzAwMiwKLQkJMHhjYzUyLCAweDEwMDIsCi0JCTB4Y2M1MywgMHgwMDQsCi0JCTB4Y2M1NCwgMHgyOTQyLAotCQkweGNjNTUsIDB4MzAwMiwKLQkJMHhjYzU2LCAweDEwMDIsCi0JCTB4Y2M1NywgMHgyMDkyLAotCQkweGNjNTgsIDB4MzAxMiwKLQkJMHhjYzU5LCAweDEwMDIsCi0JCTB4Y2M1YSwgMHg1Y2MzLAotCQkweGNjNWIsIDB4MzE3LAotCQkweGNjNWMsIDB4MmY3MiwKLQkJMHhjYzVkLCAweDMwMDIsCi0JCTB4Y2M1ZSwgMHgxMDAyLAotCQkweGNjNWYsIDB4Mjk0MiwKLQkJMHhjYzYwLCAweDMwMDIsCi0JCTB4Y2M2MSwgMHgxMDAyLAotCQkweGNjNjIsIDB4MjJjZCwKLQkJMHhjYzYzLCAweDMwMWQsCi0JCTB4Y2M2NCwgMHgyODYyLAotCQkweGNjNjUsIDB4MzAxMiwKLQkJMHhjYzY2LCAweDEwMDIsCi0JCTB4Y2M2NywgMHgyZWQyLAotCQkweGNjNjgsIDB4MzAwMiwKLQkJMHhjYzY5LCAweDEwMDIsCi0JCTB4Y2M2YSwgMHgyZDcyLAotCQkweGNjNmIsIDB4MzAwMiwKLQkJMHhjYzZjLCAweDEwMDIsCi0JCTB4Y2M2ZCwgMHg2MjhmLAotCQkweGNjNmUsIDB4MjExMiwKLQkJMHhjYzZmLCAweDMwMTIsCi0JCTB4Y2M3MCwgMHgxMDAyLAotCQkweGNjNzEsIDB4NWFhMywKLQkJMHhjYzcyLCAweDJkYzIsCi0JCTB4Y2M3MywgMHgzMDAyLAotCQkweGNjNzQsIDB4MTMxMiwKLQkJMHhjYzc1LCAweDZmNzIsCi0JCTB4Y2M3NiwgMHgxMDAyLAotCQkweGNjNzcsIDB4MjgwNywKLQkJMHhjYzc4LCAweDMxYTcsCi0JCTB4Y2M3OSwgMHgyMGM0LAotCQkweGNjN2EsIDB4M2MyNCwKLQkJMHhjYzdiLCAweDY3MjQsCi0JCTB4Y2M3YywgMHgxMDAyLAotCQkweGNjN2QsIDB4MjgwNywKLQkJMHhjYzdlLCAweDMxODcsCi0JCTB4Y2M3ZiwgMHgyMGM0LAotCQkweGNjODAsIDB4M2MyNCwKLQkJMHhjYzgxLCAweDY3MjQsCi0JCTB4Y2M4MiwgMHgxMDAyLAotCQkweGNjODMsIDB4MjUxNCwKLQkJMHhjYzg0LCAweDNjNjQsCi0JCTB4Y2M4NSwgMHg2NDM2LAotCQkweGNjODYsIDB4ZGZmNCwKLQkJMHhjYzg3LCAweDY0MzYsCi0JCTB4Y2M4OCwgMHgxMDAyLAotCQkweGNjODksIDB4NDBhNCwKLQkJMHhjYzhhLCAweDY0M2MsCi0JCTB4Y2M4YiwgMHg0MDE2LAotCQkweGNjOGMsIDB4OGM2YywKLQkJMHhjYzhkLCAweDJiMjQsCi0JCTB4Y2M4ZSwgMHgzYzI0LAotCQkweGNjOGYsIDB4NjQzNSwKLQkJMHhjYzkwLCAweDEwMDIsCi0JCTB4Y2M5MSwgMHgyYjI0LAotCQkweGNjOTIsIDB4M2MyNCwKLQkJMHhjYzkzLCAweDY0M2EsCi0JCTB4Y2M5NCwgMHg0MDI1LAotCQkweGNjOTUsIDB4OGE1YSwKLQkJMHhjYzk2LCAweDEwMDIsCi0JCTB4Y2M5NywgMHgyNzMxLAotCQkweGNjOTgsIDB4MzAxMSwKLQkJMHhjYzk5LCAweDEwMDEsCi0JCTB4Y2M5YSwgMHhjN2EwLAotCQkweGNjOWIsIDB4MTAwLAotCQkweGNjOWMsIDB4YzUwMiwKLQkJMHhjYzlkLCAweDUzYWMsCi0JCTB4Y2M5ZSwgMHhjNTAzLAotCQkweGNjOWYsIDB4ZDVkNSwKLQkJMHhjY2EwLCAweGM2MDAsCi0JCTB4Y2NhMSwgMHgyYTZkLAotCQkweGNjYTIsIDB4YzYwMSwKLQkJMHhjY2EzLCAweDJhNGMsCi0JCTB4Y2NhNCwgMHhjNjAyLAotCQkweGNjYTUsIDB4MTExLAotCQkweGNjYTYsIDB4YzYwYywKLQkJMHhjY2E3LCAweDU5MDAsCi0JCTB4Y2NhOCwgMHhjNzEwLAotCQkweGNjYTksIDB4NzAwLAotCQkweGNjYWEsIDB4YzcxOCwKLQkJMHhjY2FiLCAweDcwMCwKLQkJMHhjY2FjLCAweGM3MjAsCi0JCTB4Y2NhZCwgMHg0NzAwLAotCQkweGNjYWUsIDB4YzgwMSwKLQkJMHhjY2FmLCAweDdmNTAsCi0JCTB4Y2NiMCwgMHhjODAyLAotCQkweGNjYjEsIDB4Nzc2MCwKLQkJMHhjY2IyLCAweGM4MDMsCi0JCTB4Y2NiMywgMHg3ZmNlLAotCQkweGNjYjQsIDB4YzgwNCwKLQkJMHhjY2I1LCAweDU3MDAsCi0JCTB4Y2NiNiwgMHhjODA1LAotCQkweGNjYjcsIDB4NWYxMSwKLQkJMHhjY2I4LCAweGM4MDYsCi0JCTB4Y2NiOSwgMHg0NzUxLAotCQkweGNjYmEsIDB4YzgwNywKLQkJMHhjY2JiLCAweDU3ZTEsCi0JCTB4Y2NiYywgMHhjODA4LAotCQkweGNjYmQsIDB4MjcwMCwKLQkJMHhjY2JlLCAweGM4MDksCi0JCTB4Y2NiZiwgMHgwMDAsCi0JCTB4Y2NjMCwgMHhjODIxLAotCQkweGNjYzEsIDB4MDAyLAotCQkweGNjYzIsIDB4YzgyMiwKLQkJMHhjY2MzLCAweDAxNCwKLQkJMHhjY2M0LCAweGM4MzIsCi0JCTB4Y2NjNSwgMHgxMTg2LAotCQkweGNjYzYsIDB4Yzg0NywKLQkJMHhjY2M3LCAweDFlMDIsCi0JCTB4Y2NjOCwgMHhjMDEzLAotCQkweGNjYzksIDB4ZjM0MSwKLQkJMHhjY2NhLCAweGMwMWEsCi0JCTB4Y2NjYiwgMHg0NDYsCi0JCTB4Y2NjYywgMHhjMDI0LAotCQkweGNjY2QsIDB4MTAwMCwKLQkJMHhjY2NlLCAweGMwMjUsCi0JCTB4Y2NjZiwgMHhhMDAsCi0JCTB4Y2NkMCwgMHhjMDI2LAotCQkweGNjZDEsIDB4YzBjLAotCQkweGNjZDIsIDB4YzAyNywKLQkJMHhjY2QzLCAweGMwYywKLQkJMHhjY2Q0LCAweGMwMjksCi0JCTB4Y2NkNSwgMHgwYTAsCi0JCTB4Y2NkNiwgMHhjMDMwLAotCQkweGNjZDcsIDB4YTAwLAotCQkweGNjZDgsIDB4YzAzYywKLQkJMHhjY2Q5LCAweDAxYywKLQkJMHhjY2RhLCAweGMwMDUsCi0JCTB4Y2NkYiwgMHg3YTA2LAotCQkweGNjZGMsIDB4MDAwLAotCQkweGNjZGQsIDB4MjczMSwKLQkJMHhjY2RlLCAweDMwMTEsCi0JCTB4Y2NkZiwgMHgxMDAxLAotCQkweGNjZTAsIDB4YzYyMCwKLQkJMHhjY2UxLCAweDAwMCwKLQkJMHhjY2UyLCAweGM2MjEsCi0JCTB4Y2NlMywgMHgwM2YsCi0JCTB4Y2NlNCwgMHhjNjIyLAotCQkweGNjZTUsIDB4MDAwLAotCQkweGNjZTYsIDB4YzYyMywKLQkJMHhjY2U3LCAweDAwMCwKLQkJMHhjY2U4LCAweGM2MjQsCi0JCTB4Y2NlOSwgMHgwMDAsCi0JCTB4Y2NlYSwgMHhjNjI1LAotCQkweGNjZWIsIDB4MDAwLAotCQkweGNjZWMsIDB4YzYyNywKLQkJMHhjY2VkLCAweDAwMCwKLQkJMHhjY2VlLCAweGM2MjgsCi0JCTB4Y2NlZiwgMHgwMDAsCi0JCTB4Y2NmMCwgMHhjNjJjLAotCQkweGNjZjEsIDB4MDAwLAotCQkweGNjZjIsIDB4MDAwLAotCQkweGNjZjMsIDB4MjgwNiwKLQkJMHhjY2Y0LCAweDNjYjYsCi0JCTB4Y2NmNSwgMHhjMTYxLAotCQkweGNjZjYsIDB4NjEzNCwKLQkJMHhjY2Y3LCAweDYxMzUsCi0JCTB4Y2NmOCwgMHg1NDQzLAotCQkweGNjZjksIDB4MzAzLAotCQkweGNjZmEsIDB4NjUyNCwKLQkJMHhjY2ZiLCAweDAwYiwKLQkJMHhjY2ZjLCAweDEwMDIsCi0JCTB4Y2NmZCwgMHgyMTA0LAotCQkweGNjZmUsIDB4M2MyNCwKLQkJMHhjY2ZmLCAweDIxMDUsCi0JCTB4Y2QwMCwgMHgzODA1LAotCQkweGNkMDEsIDB4NjUyNCwKLQkJMHhjZDAyLCAweGRmZjQsCi0JCTB4Y2QwMywgMHg0MDA1LAotCQkweGNkMDQsIDB4NjUyNCwKLQkJMHhjZDA1LCAweDEwMDIsCi0JCTB4Y2QwNiwgMHg1ZGQzLAotCQkweGNkMDcsIDB4MzA2LAotCQkweGNkMDgsIDB4MmZmNywKLQkJMHhjZDA5LCAweDM4ZjcsCi0JCTB4Y2QwYSwgMHg2MGI3LAotCQkweGNkMGIsIDB4ZGZmZCwKLQkJMHhjZDBjLCAweDAwYSwKLQkJMHhjZDBkLCAweDEwMDIsCi0JCTB4Y2QwZSwgMAotCX07CisKIAlpbnQgaSwgZXJyOwogCiAJZXJyID0gc2V0X3BoeV9yZWdzKHBoeSwgcmVncyk7CkBAIC01ODUsOSArMzA3LDE2IEBACiAKIAltc2xlZXAoNTApOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3JfZWRjKSAmJiAhZXJyOyBpICs9IDIpCi0JCWVyciA9IHQzX21kaW9fd3JpdGUocGh5LCBNRElPX01NRF9QTUFQTUQsIHNyX2VkY1tpXSwKLQkJCQkgICAgc3JfZWRjW2kgKyAxXSk7CisJaWYgKHBoeS0+cHJpdiAhPSBlZGNfc3IpCisJCWVyciA9IHQzX2dldF9lZGNfZncocGh5LCBFRENfT1BUX0FFTDIwMDUsCisJCQkJICAgIEVEQ19PUFRfQUVMMjAwNV9TSVpFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZm9yIChpID0gMDsgaSA8ICBFRENfT1BUX0FFTDIwMDVfU0laRSAvIHNpemVvZih1MTYpICYmICFlcnI7IGkgKz0gMikKKwkJZXJyID0gdDNfbWRpb193cml0ZShwaHksIE1ESU9fTU1EX1BNQVBNRCwKKwkJCQkgICAgcGh5LT5waHlfY2FjaGVbaV0sCisJCQkJICAgIHBoeS0+cGh5X2NhY2hlW2kgKyAxXSk7CiAJaWYgKCFlcnIpCiAJCXBoeS0+cHJpdiA9IGVkY19zcjsKIAlyZXR1cm4gZXJyOwpAQCAtNjA0LDM3NCArMzMzLDYgQEAKIAkJeyBNRElPX01NRF9QTUFQTUQsIDB4YzAxNSwgMHhmZmZmLCAweGEwMDAgfSwKIAkJeyAwLCAwLCAwLCAwIH0KIAl9OwotCXN0YXRpYyB1MTYgdHdpbmF4X2VkY1tdID0gewotCQkweGNjMDAsIDB4NDAwOSwKLQkJMHhjYzAxLCAweDI3ZmYsCi0JCTB4Y2MwMiwgMHgzMDBmLAotCQkweGNjMDMsIDB4NDBhYSwKLQkJMHhjYzA0LCAweDQwMWMsCi0JCTB4Y2MwNSwgMHg0MDFlLAotCQkweGNjMDYsIDB4MmZmNCwKLQkJMHhjYzA3LCAweDNjZDQsCi0JCTB4Y2MwOCwgMHgyMDM1LAotCQkweGNjMDksIDB4MzE0NSwKLQkJMHhjYzBhLCAweDY1MjQsCi0JCTB4Y2MwYiwgMHgyNmEyLAotCQkweGNjMGMsIDB4MzAxMiwKLQkJMHhjYzBkLCAweDEwMDIsCi0JCTB4Y2MwZSwgMHgyOWMyLAotCQkweGNjMGYsIDB4MzAwMiwKLQkJMHhjYzEwLCAweDEwMDIsCi0JCTB4Y2MxMSwgMHgyMDcyLAotCQkweGNjMTIsIDB4MzAxMiwKLQkJMHhjYzEzLCAweDEwMDIsCi0JCTB4Y2MxNCwgMHgyMmNkLAotCQkweGNjMTUsIDB4MzAxZCwKLQkJMHhjYzE2LCAweDJlNTIsCi0JCTB4Y2MxNywgMHgzMDEyLAotCQkweGNjMTgsIDB4MTAwMiwKLQkJMHhjYzE5LCAweDI4ZTIsCi0JCTB4Y2MxYSwgMHgzMDAyLAotCQkweGNjMWIsIDB4MTAwMiwKLQkJMHhjYzFjLCAweDYyOGYsCi0JCTB4Y2MxZCwgMHgyYWMyLAotCQkweGNjMWUsIDB4MzAxMiwKLQkJMHhjYzFmLCAweDEwMDIsCi0JCTB4Y2MyMCwgMHg1NTUzLAotCQkweGNjMjEsIDB4MmFlMiwKLQkJMHhjYzIyLCAweDMwMDIsCi0JCTB4Y2MyMywgMHgxMzAyLAotCQkweGNjMjQsIDB4NDAxZSwKLQkJMHhjYzI1LCAweDJiZTIsCi0JCTB4Y2MyNiwgMHgzMDEyLAotCQkweGNjMjcsIDB4MTAwMiwKLQkJMHhjYzI4LCAweDJkYTIsCi0JCTB4Y2MyOSwgMHgzMDEyLAotCQkweGNjMmEsIDB4MTAwMiwKLQkJMHhjYzJiLCAweDJiYTIsCi0JCTB4Y2MyYywgMHgzMDAyLAotCQkweGNjMmQsIDB4MTAwMiwKLQkJMHhjYzJlLCAweDVlZTMsCi0JCTB4Y2MyZiwgMHgzMDUsCi0JCTB4Y2MzMCwgMHg0MDBlLAotCQkweGNjMzEsIDB4MmJjMiwKLQkJMHhjYzMyLCAweDMwMDIsCi0JCTB4Y2MzMywgMHgxMDAyLAotCQkweGNjMzQsIDB4MmI4MiwKLQkJMHhjYzM1LCAweDMwMTIsCi0JCTB4Y2MzNiwgMHgxMDAyLAotCQkweGNjMzcsIDB4NTY2MywKLQkJMHhjYzM4LCAweDMwMiwKLQkJMHhjYzM5LCAweDQwMWUsCi0JCTB4Y2MzYSwgMHg2ZjcyLAotCQkweGNjM2IsIDB4MTAwMiwKLQkJMHhjYzNjLCAweDYyOGYsCi0JCTB4Y2MzZCwgMHgyYmUyLAotCQkweGNjM2UsIDB4MzAxMiwKLQkJMHhjYzNmLCAweDEwMDIsCi0JCTB4Y2M0MCwgMHgyMmNkLAotCQkweGNjNDEsIDB4MzAxZCwKLQkJMHhjYzQyLCAweDJlNTIsCi0JCTB4Y2M0MywgMHgzMDEyLAotCQkweGNjNDQsIDB4MTAwMiwKLQkJMHhjYzQ1LCAweDI1MjIsCi0JCTB4Y2M0NiwgMHgzMDEyLAotCQkweGNjNDcsIDB4MTAwMiwKLQkJMHhjYzQ4LCAweDJkYTIsCi0JCTB4Y2M0OSwgMHgzMDEyLAotCQkweGNjNGEsIDB4MTAwMiwKLQkJMHhjYzRiLCAweDJjYTIsCi0JCTB4Y2M0YywgMHgzMDEyLAotCQkweGNjNGQsIDB4MTAwMiwKLQkJMHhjYzRlLCAweDJmYTQsCi0JCTB4Y2M0ZiwgMHgzY2Q0LAotCQkweGNjNTAsIDB4NjYyNCwKLQkJMHhjYzUxLCAweDQxMGIsCi0JCTB4Y2M1MiwgMHg1NmIzLAotCQkweGNjNTMsIDB4M2M0LAotCQkweGNjNTQsIDB4MmZiMiwKLQkJMHhjYzU1LCAweDMwMDIsCi0JCTB4Y2M1NiwgMHgxMDAyLAotCQkweGNjNTcsIDB4MjIwYiwKLQkJMHhjYzU4LCAweDMwM2IsCi0JCTB4Y2M1OSwgMHg1NmIzLAotCQkweGNjNWEsIDB4M2MzLAotCQkweGNjNWIsIDB4ODY2YiwKLQkJMHhjYzVjLCAweDQwMGMsCi0JCTB4Y2M1ZCwgMHgyM2EyLAotCQkweGNjNWUsIDB4MzAxMiwKLQkJMHhjYzVmLCAweDEwMDIsCi0JCTB4Y2M2MCwgMHgyZGEyLAotCQkweGNjNjEsIDB4MzAxMiwKLQkJMHhjYzYyLCAweDEwMDIsCi0JCTB4Y2M2MywgMHgyY2EyLAotCQkweGNjNjQsIDB4MzAxMiwKLQkJMHhjYzY1LCAweDEwMDIsCi0JCTB4Y2M2NiwgMHgyZmI0LAotCQkweGNjNjcsIDB4M2NkNCwKLQkJMHhjYzY4LCAweDY2MjQsCi0JCTB4Y2M2OSwgMHg1NmIzLAotCQkweGNjNmEsIDB4M2MzLAotCQkweGNjNmIsIDB4ODY2YiwKLQkJMHhjYzZjLCAweDQwMWMsCi0JCTB4Y2M2ZCwgMHgyMjA1LAotCQkweGNjNmUsIDB4MzAzNSwKLQkJMHhjYzZmLCAweDViNTMsCi0JCTB4Y2M3MCwgMHgyYzUyLAotCQkweGNjNzEsIDB4MzAwMiwKLQkJMHhjYzcyLCAweDEzYzIsCi0JCTB4Y2M3MywgMHg1Y2MzLAotCQkweGNjNzQsIDB4MzE3LAotCQkweGNjNzUsIDB4MjUyMiwKLQkJMHhjYzc2LCAweDMwMTIsCi0JCTB4Y2M3NywgMHgxMDAyLAotCQkweGNjNzgsIDB4MmRhMiwKLQkJMHhjYzc5LCAweDMwMTIsCi0JCTB4Y2M3YSwgMHgxMDAyLAotCQkweGNjN2IsIDB4MmI4MiwKLQkJMHhjYzdjLCAweDMwMTIsCi0JCTB4Y2M3ZCwgMHgxMDAyLAotCQkweGNjN2UsIDB4NTY2MywKLQkJMHhjYzdmLCAweDMwMywKLQkJMHhjYzgwLCAweDQwMWUsCi0JCTB4Y2M4MSwgMHgwMDQsCi0JCTB4Y2M4MiwgMHgyYzQyLAotCQkweGNjODMsIDB4MzAxMiwKLQkJMHhjYzg0LCAweDEwMDIsCi0JCTB4Y2M4NSwgMHg2ZjcyLAotCQkweGNjODYsIDB4MTAwMiwKLQkJMHhjYzg3LCAweDYyOGYsCi0JCTB4Y2M4OCwgMHgyMzA0LAotCQkweGNjODksIDB4M2M4NCwKLQkJMHhjYzhhLCAweDY0MzYsCi0JCTB4Y2M4YiwgMHhkZmY0LAotCQkweGNjOGMsIDB4NjQzNiwKLQkJMHhjYzhkLCAweDJmZjUsCi0JCTB4Y2M4ZSwgMHgzMDA1LAotCQkweGNjOGYsIDB4ODY1NiwKLQkJMHhjYzkwLCAweGRmYmEsCi0JCTB4Y2M5MSwgMHg1NmEzLAotCQkweGNjOTIsIDB4ZDA1YSwKLQkJMHhjYzkzLCAweDIxYzIsCi0JCTB4Y2M5NCwgMHgzMDEyLAotCQkweGNjOTUsIDB4MTM5MiwKLQkJMHhjYzk2LCAweGQwNWEsCi0JCTB4Y2M5NywgMHg1NmEzLAotCQkweGNjOTgsIDB4ZGZiYSwKLQkJMHhjYzk5LCAweDM4MywKLQkJMHhjYzlhLCAweDZmNzIsCi0JCTB4Y2M5YiwgMHgxMDAyLAotCQkweGNjOWMsIDB4MjhjNSwKLQkJMHhjYzlkLCAweDMwMDUsCi0JCTB4Y2M5ZSwgMHg0MTc4LAotCQkweGNjOWYsIDB4NTY1MywKLQkJMHhjY2EwLCAweDM4NCwKLQkJMHhjY2ExLCAweDIyYjIsCi0JCTB4Y2NhMiwgMHgzMDEyLAotCQkweGNjYTMsIDB4MTAwMiwKLQkJMHhjY2E0LCAweDJiZTUsCi0JCTB4Y2NhNSwgMHgzMDA1LAotCQkweGNjYTYsIDB4NDFlOCwKLQkJMHhjY2E3LCAweDU2NTMsCi0JCTB4Y2NhOCwgMHgzODIsCi0JCTB4Y2NhOSwgMHgwMDIsCi0JCTB4Y2NhYSwgMHg0MjU4LAotCQkweGNjYWIsIDB4MjQ3NCwKLQkJMHhjY2FjLCAweDNjODQsCi0JCTB4Y2NhZCwgMHg2NDM3LAotCQkweGNjYWUsIDB4ZGZmNCwKLQkJMHhjY2FmLCAweDY0MzcsCi0JCTB4Y2NiMCwgMHgyZmY1LAotCQkweGNjYjEsIDB4M2MwNSwKLQkJMHhjY2IyLCAweDg3NTcsCi0JCTB4Y2NiMywgMHhiODg4LAotCQkweGNjYjQsIDB4OTc4NywKLQkJMHhjY2I1LCAweGRmZjQsCi0JCTB4Y2NiNiwgMHg2NzI0LAotCQkweGNjYjcsIDB4ODY2YSwKLQkJMHhjY2I4LCAweDZmNzIsCi0JCTB4Y2NiOSwgMHgxMDAyLAotCQkweGNjYmEsIDB4MmQwMSwKLQkJMHhjY2JiLCAweDMwMTEsCi0JCTB4Y2NiYywgMHgxMDAxLAotCQkweGNjYmQsIDB4YzYyMCwKLQkJMHhjY2JlLCAweDE0ZTUsCi0JCTB4Y2NiZiwgMHhjNjIxLAotCQkweGNjYzAsIDB4YzUzZCwKLQkJMHhjY2MxLCAweGM2MjIsCi0JCTB4Y2NjMiwgMHgzY2JlLAotCQkweGNjYzMsIDB4YzYyMywKLQkJMHhjY2M0LCAweDQ0NTIsCi0JCTB4Y2NjNSwgMHhjNjI0LAotCQkweGNjYzYsIDB4YzVjNSwKLQkJMHhjY2M3LCAweGM2MjUsCi0JCTB4Y2NjOCwgMHhlMDFlLAotCQkweGNjYzksIDB4YzYyNywKLQkJMHhjY2NhLCAweDAwMCwKLQkJMHhjY2NiLCAweGM2MjgsCi0JCTB4Y2NjYywgMHgwMDAsCi0JCTB4Y2NjZCwgMHhjNjJiLAotCQkweGNjY2UsIDB4MDAwLAotCQkweGNjY2YsIDB4YzYyYywKLQkJMHhjY2QwLCAweDAwMCwKLQkJMHhjY2QxLCAweDAwMCwKLQkJMHhjY2QyLCAweDJkMDEsCi0JCTB4Y2NkMywgMHgzMDExLAotCQkweGNjZDQsIDB4MTAwMSwKLQkJMHhjY2Q1LCAweGM2MjAsCi0JCTB4Y2NkNiwgMHgwMDAsCi0JCTB4Y2NkNywgMHhjNjIxLAotCQkweGNjZDgsIDB4MDAwLAotCQkweGNjZDksIDB4YzYyMiwKLQkJMHhjY2RhLCAweDBjZSwKLQkJMHhjY2RiLCAweGM2MjMsCi0JCTB4Y2NkYywgMHgwN2YsCi0JCTB4Y2NkZCwgMHhjNjI0LAotCQkweGNjZGUsIDB4MDMyLAotCQkweGNjZGYsIDB4YzYyNSwKLQkJMHhjY2UwLCAweDAwMCwKLQkJMHhjY2UxLCAweGM2MjcsCi0JCTB4Y2NlMiwgMHgwMDAsCi0JCTB4Y2NlMywgMHhjNjI4LAotCQkweGNjZTQsIDB4MDAwLAotCQkweGNjZTUsIDB4YzYyYiwKLQkJMHhjY2U2LCAweDAwMCwKLQkJMHhjY2U3LCAweGM2MmMsCi0JCTB4Y2NlOCwgMHgwMDAsCi0JCTB4Y2NlOSwgMHgwMDAsCi0JCTB4Y2NlYSwgMHgyZDAxLAotCQkweGNjZWIsIDB4MzAxMSwKLQkJMHhjY2VjLCAweDEwMDEsCi0JCTB4Y2NlZCwgMHhjNTAyLAotCQkweGNjZWUsIDB4NjA5ZiwKLQkJMHhjY2VmLCAweGM2MDAsCi0JCTB4Y2NmMCwgMHgyYTZlLAotCQkweGNjZjEsIDB4YzYwMSwKLQkJMHhjY2YyLCAweDJhMmMsCi0JCTB4Y2NmMywgMHhjNjBjLAotCQkweGNjZjQsIDB4NTQwMCwKLQkJMHhjY2Y1LCAweGM3MTAsCi0JCTB4Y2NmNiwgMHg3MDAsCi0JCTB4Y2NmNywgMHhjNzE4LAotCQkweGNjZjgsIDB4NzAwLAotCQkweGNjZjksIDB4YzcyMCwKLQkJMHhjY2ZhLCAweDQ3MDAsCi0JCTB4Y2NmYiwgMHhjNzI4LAotCQkweGNjZmMsIDB4NzAwLAotCQkweGNjZmQsIDB4YzcyOSwKLQkJMHhjY2ZlLCAweDEyMDcsCi0JCTB4Y2NmZiwgMHhjODAxLAotCQkweGNkMDAsIDB4N2Y1MCwKLQkJMHhjZDAxLCAweGM4MDIsCi0JCTB4Y2QwMiwgMHg3NzYwLAotCQkweGNkMDMsIDB4YzgwMywKLQkJMHhjZDA0LCAweDdmY2UsCi0JCTB4Y2QwNSwgMHhjODA0LAotCQkweGNkMDYsIDB4NTIwZSwKLQkJMHhjZDA3LCAweGM4MDUsCi0JCTB4Y2QwOCwgMHg1YzExLAotCQkweGNkMDksIDB4YzgwNiwKLQkJMHhjZDBhLCAweDNjNTEsCi0JCTB4Y2QwYiwgMHhjODA3LAotCQkweGNkMGMsIDB4NDA2MSwKLQkJMHhjZDBkLCAweGM4MDgsCi0JCTB4Y2QwZSwgMHg0OWMxLAotCQkweGNkMGYsIDB4YzgwOSwKLQkJMHhjZDEwLCAweDM4NDAsCi0JCTB4Y2QxMSwgMHhjODBhLAotCQkweGNkMTIsIDB4MDAwLAotCQkweGNkMTMsIDB4YzgyMSwKLQkJMHhjZDE0LCAweDAwMiwKLQkJMHhjZDE1LCAweGM4MjIsCi0JCTB4Y2QxNiwgMHgwNDYsCi0JCTB4Y2QxNywgMHhjODQ0LAotCQkweGNkMTgsIDB4MTgyZiwKLQkJMHhjZDE5LCAweGMwMTMsCi0JCTB4Y2QxYSwgMHhmMzQxLAotCQkweGNkMWIsIDB4YzAxYSwKLQkJMHhjZDFjLCAweDQ0NiwKLQkJMHhjZDFkLCAweGMwMjQsCi0JCTB4Y2QxZSwgMHgxMDAwLAotCQkweGNkMWYsIDB4YzAyNSwKLQkJMHhjZDIwLCAweGEwMCwKLQkJMHhjZDIxLCAweGMwMjYsCi0JCTB4Y2QyMiwgMHhjMGMsCi0JCTB4Y2QyMywgMHhjMDI3LAotCQkweGNkMjQsIDB4YzBjLAotCQkweGNkMjUsIDB4YzAyOSwKLQkJMHhjZDI2LCAweDBhMCwKLQkJMHhjZDI3LCAweGMwMzAsCi0JCTB4Y2QyOCwgMHhhMDAsCi0JCTB4Y2QyOSwgMHhjMDNjLAotCQkweGNkMmEsIDB4MDFjLAotCQkweGNkMmIsIDB4MDAwLAotCQkweGNkMmMsIDB4MmI4NCwKLQkJMHhjZDJkLCAweDNjNzQsCi0JCTB4Y2QyZSwgMHg2NDM1LAotCQkweGNkMmYsIDB4ZGZmNCwKLQkJMHhjZDMwLCAweDY0MzUsCi0JCTB4Y2QzMSwgMHgyODA2LAotCQkweGNkMzIsIDB4MzAwNiwKLQkJMHhjZDMzLCAweDg1NjUsCi0JCTB4Y2QzNCwgMHgyYjI0LAotCQkweGNkMzUsIDB4M2MyNCwKLQkJMHhjZDM2LCAweDY0MzYsCi0JCTB4Y2QzNywgMHgxMDAyLAotCQkweGNkMzgsIDB4MmIyNCwKLQkJMHhjZDM5LCAweDNjMjQsCi0JCTB4Y2QzYSwgMHg2NDM2LAotCQkweGNkM2IsIDB4NDA0NSwKLQkJMHhjZDNjLCAweDg2NTYsCi0JCTB4Y2QzZCwgMHgxMDAyLAotCQkweGNkM2UsIDB4MjgwNywKLQkJMHhjZDNmLCAweDMxYTcsCi0JCTB4Y2Q0MCwgMHgyMGM0LAotCQkweGNkNDEsIDB4M2MyNCwKLQkJMHhjZDQyLCAweDY3MjQsCi0JCTB4Y2Q0MywgMHgxMDAyLAotCQkweGNkNDQsIDB4MjgwNywKLQkJMHhjZDQ1LCAweDMxODcsCi0JCTB4Y2Q0NiwgMHgyMGM0LAotCQkweGNkNDcsIDB4M2MyNCwKLQkJMHhjZDQ4LCAweDY3MjQsCi0JCTB4Y2Q0OSwgMHgxMDAyLAotCQkweGNkNGEsIDB4MjUxNCwKLQkJMHhjZDRiLCAweDNjNjQsCi0JCTB4Y2Q0YywgMHg2NDM2LAotCQkweGNkNGQsIDB4ZGZmNCwKLQkJMHhjZDRlLCAweDY0MzYsCi0JCTB4Y2Q0ZiwgMHgxMDAyLAotCQkweGNkNTAsIDB4MjgwNiwKLQkJMHhjZDUxLCAweDNjYjYsCi0JCTB4Y2Q1MiwgMHhjMTYxLAotCQkweGNkNTMsIDB4NjEzNCwKLQkJMHhjZDU0LCAweDYxMzUsCi0JCTB4Y2Q1NSwgMHg1NDQzLAotCQkweGNkNTYsIDB4MzAzLAotCQkweGNkNTcsIDB4NjUyNCwKLQkJMHhjZDU4LCAweDAwYiwKLQkJMHhjZDU5LCAweDEwMDIsCi0JCTB4Y2Q1YSwgMHhkMDE5LAotCQkweGNkNWIsIDB4MjEwNCwKLQkJMHhjZDVjLCAweDNjMjQsCi0JCTB4Y2Q1ZCwgMHgyMTA1LAotCQkweGNkNWUsIDB4MzgwNSwKLQkJMHhjZDVmLCAweDY1MjQsCi0JCTB4Y2Q2MCwgMHhkZmY0LAotCQkweGNkNjEsIDB4NDAwNSwKLQkJMHhjZDYyLCAweDY1MjQsCi0JCTB4Y2Q2MywgMHgyZThkLAotCQkweGNkNjQsIDB4MzAzZCwKLQkJMHhjZDY1LCAweDVkZDMsCi0JCTB4Y2Q2NiwgMHgzMDYsCi0JCTB4Y2Q2NywgMHgyZmY3LAotCQkweGNkNjgsIDB4MzhmNywKLQkJMHhjZDY5LCAweDYwYjcsCi0JCTB4Y2Q2YSwgMHhkZmZkLAotCQkweGNkNmIsIDB4MDBhLAotCQkweGNkNmMsIDB4MTAwMiwKLQkJMHhjZDZkLCAwCi0JfTsKIAlpbnQgaSwgZXJyOwogCiAJZXJyID0gc2V0X3BoeV9yZWdzKHBoeSwgcmVncyk7CkBAIC05ODIsOSArMzQzLDE2IEBACiAKIAltc2xlZXAoNTApOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHdpbmF4X2VkYykgJiYgIWVycjsgaSArPSAyKQotCQllcnIgPSB0M19tZGlvX3dyaXRlKHBoeSwgTURJT19NTURfUE1BUE1ELCB0d2luYXhfZWRjW2ldLAotCQkJCSAgICB0d2luYXhfZWRjW2kgKyAxXSk7CisJaWYgKHBoeS0+cHJpdiAhPSBlZGNfdHdpbmF4KQorCQllcnIgPSB0M19nZXRfZWRjX2Z3KHBoeSwgRURDX1RXWF9BRUwyMDA1LAorCQkJCSAgICBFRENfVFdYX0FFTDIwMDVfU0laRSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWZvciAoaSA9IDA7IGkgPCAgRURDX1RXWF9BRUwyMDA1X1NJWkUgLyBzaXplb2YodTE2KSAmJiAhZXJyOyBpICs9IDIpCisJCWVyciA9IHQzX21kaW9fd3JpdGUocGh5LCBNRElPX01NRF9QTUFQTUQsCisJCQkJICAgIHBoeS0+cGh5X2NhY2hlW2ldLAorCQkJCSAgICBwaHktPnBoeV9jYWNoZVtpICsgMV0pOwogCWlmICghZXJyKQogCQlwaHktPnByaXYgPSBlZGNfdHdpbmF4OwogCXJldHVybiBlcnI7CkBAIC0xMjAxLDQwNSArNTY5LDYgQEAKIAkJeyBNRElPX01NRF9QTUFQTUQsIDB4ZDA5MiwgMHhmZmZmLCAweDAwMDAgfSwKIAkJeyAwLCAwLCAwLCAwIH0KIAl9OwotCi0JLyogVFdJTkFYIEVEQyBmaXJtd2FyZSAqLwotCXN0YXRpYyB1MTYgdHdpbmF4X2VkY1tdID0gewotCQkweGQ4MDAsIDB4NDAwOSwKLQkJMHhkODAxLCAweDJmZmYsCi0JCTB4ZDgwMiwgMHgzMDBmLAotCQkweGQ4MDMsIDB4NDBhYSwKLQkJMHhkODA0LCAweDQwMWMsCi0JCTB4ZDgwNSwgMHg0MDFlLAotCQkweGQ4MDYsIDB4MmZmNCwKLQkJMHhkODA3LCAweDNkYzQsCi0JCTB4ZDgwOCwgMHgyMDM1LAotCQkweGQ4MDksIDB4MzAzNSwKLQkJMHhkODBhLCAweDY1MjQsCi0JCTB4ZDgwYiwgMHgyY2IyLAotCQkweGQ4MGMsIDB4MzAxMiwKLQkJMHhkODBkLCAweDEwMDIsCi0JCTB4ZDgwZSwgMHgyNmUyLAotCQkweGQ4MGYsIDB4MzAyMiwKLQkJMHhkODEwLCAweDEwMDIsCi0JCTB4ZDgxMSwgMHgyN2QyLAotCQkweGQ4MTIsIDB4MzAyMiwKLQkJMHhkODEzLCAweDEwMDIsCi0JCTB4ZDgxNCwgMHgyODIyLAotCQkweGQ4MTUsIDB4MzAxMiwKLQkJMHhkODE2LCAweDEwMDIsCi0JCTB4ZDgxNywgMHgyNDkyLAotCQkweGQ4MTgsIDB4MzAyMiwKLQkJMHhkODE5LCAweDEwMDIsCi0JCTB4ZDgxYSwgMHgyNzcyLAotCQkweGQ4MWIsIDB4MzAxMiwKLQkJMHhkODFjLCAweDEwMDIsCi0JCTB4ZDgxZCwgMHgyM2QyLAotCQkweGQ4MWUsIDB4MzAyMiwKLQkJMHhkODFmLCAweDEwMDIsCi0JCTB4ZDgyMCwgMHgyMmNkLAotCQkweGQ4MjEsIDB4MzAxZCwKLQkJMHhkODIyLCAweDI3ZjIsCi0JCTB4ZDgyMywgMHgzMDIyLAotCQkweGQ4MjQsIDB4MTAwMiwKLQkJMHhkODI1LCAweDU1NTMsCi0JCTB4ZDgyNiwgMHgwMzA3LAotCQkweGQ4MjcsIDB4MjUyMiwKLQkJMHhkODI4LCAweDMwMjIsCi0JCTB4ZDgyOSwgMHgxMDAyLAotCQkweGQ4MmEsIDB4MjE0MiwKLQkJMHhkODJiLCAweDMwMTIsCi0JCTB4ZDgyYywgMHgxMDAyLAotCQkweGQ4MmQsIDB4NDAxNiwKLQkJMHhkODJlLCAweDVlNjMsCi0JCTB4ZDgyZiwgMHgwMzQ0LAotCQkweGQ4MzAsIDB4MjE0MiwKLQkJMHhkODMxLCAweDMwMTIsCi0JCTB4ZDgzMiwgMHgxMDAyLAotCQkweGQ4MzMsIDB4NDAwZSwKLQkJMHhkODM0LCAweDI1MjIsCi0JCTB4ZDgzNSwgMHgzMDIyLAotCQkweGQ4MzYsIDB4MTAwMiwKLQkJMHhkODM3LCAweDJiNTIsCi0JCTB4ZDgzOCwgMHgzMDEyLAotCQkweGQ4MzksIDB4MTAwMiwKLQkJMHhkODNhLCAweDI3NDIsCi0JCTB4ZDgzYiwgMHgzMDIyLAotCQkweGQ4M2MsIDB4MTAwMiwKLQkJMHhkODNkLCAweDI1ZTIsCi0JCTB4ZDgzZSwgMHgzMDIyLAotCQkweGQ4M2YsIDB4MTAwMiwKLQkJMHhkODQwLCAweDJmYTQsCi0JCTB4ZDg0MSwgMHgzZGM0LAotCQkweGQ4NDIsIDB4NjYyNCwKLQkJMHhkODQzLCAweDQxNGIsCi0JCTB4ZDg0NCwgMHg1NmIzLAotCQkweGQ4NDUsIDB4MDNjNiwKLQkJMHhkODQ2LCAweDg2NmIsCi0JCTB4ZDg0NywgMHg0MDBjLAotCQkweGQ4NDgsIDB4MjcxMiwKLQkJMHhkODQ5LCAweDMwMTIsCi0JCTB4ZDg0YSwgMHgxMDAyLAotCQkweGQ4NGIsIDB4MmM0YiwKLQkJMHhkODRjLCAweDMwOWIsCi0JCTB4ZDg0ZCwgMHg1NmIzLAotCQkweGQ4NGUsIDB4MDNjMywKLQkJMHhkODRmLCAweDg2NmIsCi0JCTB4ZDg1MCwgMHg0MDBjLAotCQkweGQ4NTEsIDB4MjI3MiwKLQkJMHhkODUyLCAweDMwMjIsCi0JCTB4ZDg1MywgMHgxMDAyLAotCQkweGQ4NTQsIDB4Mjc0MiwKLQkJMHhkODU1LCAweDMwMjIsCi0JCTB4ZDg1NiwgMHgxMDAyLAotCQkweGQ4NTcsIDB4MjVlMiwKLQkJMHhkODU4LCAweDMwMjIsCi0JCTB4ZDg1OSwgMHgxMDAyLAotCQkweGQ4NWEsIDB4MmZiNCwKLQkJMHhkODViLCAweDNkYzQsCi0JCTB4ZDg1YywgMHg2NjI0LAotCQkweGQ4NWQsIDB4NTZiMywKLQkJMHhkODVlLCAweDAzYzMsCi0JCTB4ZDg1ZiwgMHg4NjZiLAotCQkweGQ4NjAsIDB4NDAxYywKLQkJMHhkODYxLCAweDJjNDUsCi0JCTB4ZDg2MiwgMHgzMDk1LAotCQkweGQ4NjMsIDB4NWI1MywKLQkJMHhkODY0LCAweDIzNzIsCi0JCTB4ZDg2NSwgMHgzMDEyLAotCQkweGQ4NjYsIDB4MTNjMiwKLQkJMHhkODY3LCAweDVjYzMsCi0JCTB4ZDg2OCwgMHgyNzEyLAotCQkweGQ4NjksIDB4MzAxMiwKLQkJMHhkODZhLCAweDEzMTIsCi0JCTB4ZDg2YiwgMHgyYjUyLAotCQkweGQ4NmMsIDB4MzAxMiwKLQkJMHhkODZkLCAweDEwMDIsCi0JCTB4ZDg2ZSwgMHgyNzQyLAotCQkweGQ4NmYsIDB4MzAyMiwKLQkJMHhkODcwLCAweDEwMDIsCi0JCTB4ZDg3MSwgMHgyNTgyLAotCQkweGQ4NzIsIDB4MzAyMiwKLQkJMHhkODczLCAweDEwMDIsCi0JCTB4ZDg3NCwgMHgyMTQyLAotCQkweGQ4NzUsIDB4MzAxMiwKLQkJMHhkODc2LCAweDEwMDIsCi0JCTB4ZDg3NywgMHg2MjhmLAotCQkweGQ4NzgsIDB4Mjk4NSwKLQkJMHhkODc5LCAweDMzYTUsCi0JCTB4ZDg3YSwgMHgyNWUyLAotCQkweGQ4N2IsIDB4MzAyMiwKLQkJMHhkODdjLCAweDEwMDIsCi0JCTB4ZDg3ZCwgMHg1NjUzLAotCQkweGQ4N2UsIDB4MDNkMiwKLQkJMHhkODdmLCAweDQwMWUsCi0JCTB4ZDg4MCwgMHg2ZjcyLAotCQkweGQ4ODEsIDB4MTAwMiwKLQkJMHhkODgyLCAweDYyOGYsCi0JCTB4ZDg4MywgMHgyMzA0LAotCQkweGQ4ODQsIDB4M2M4NCwKLQkJMHhkODg1LCAweDY0MzYsCi0JCTB4ZDg4NiwgMHhkZmY0LAotCQkweGQ4ODcsIDB4NjQzNiwKLQkJMHhkODg4LCAweDJmZjUsCi0JCTB4ZDg4OSwgMHgzMDA1LAotCQkweGQ4OGEsIDB4ODY1NiwKLQkJMHhkODhiLCAweGRmYmEsCi0JCTB4ZDg4YywgMHg1NmEzLAotCQkweGQ4OGQsIDB4ZDA1YSwKLQkJMHhkODhlLCAweDI5NzIsCi0JCTB4ZDg4ZiwgMHgzMDEyLAotCQkweGQ4OTAsIDB4MTM5MiwKLQkJMHhkODkxLCAweGQwNWEsCi0JCTB4ZDg5MiwgMHg1NmEzLAotCQkweGQ4OTMsIDB4ZGZiYSwKLQkJMHhkODk0LCAweDAzODMsCi0JCTB4ZDg5NSwgMHg2ZjcyLAotCQkweGQ4OTYsIDB4MTAwMiwKLQkJMHhkODk3LCAweDJiNDUsCi0JCTB4ZDg5OCwgMHgzMDA1LAotCQkweGQ4OTksIDB4NDE3OCwKLQkJMHhkODlhLCAweDU2NTMsCi0JCTB4ZDg5YiwgMHgwMzg0LAotCQkweGQ4OWMsIDB4MmE2MiwKLQkJMHhkODlkLCAweDMwMTIsCi0JCTB4ZDg5ZSwgMHgxMDAyLAotCQkweGQ4OWYsIDB4MmYwNSwKLQkJMHhkOGEwLCAweDMwMDUsCi0JCTB4ZDhhMSwgMHg0MWM4LAotCQkweGQ4YTIsIDB4NTY1MywKLQkJMHhkOGEzLCAweDAzODIsCi0JCTB4ZDhhNCwgMHgwMDAyLAotCQkweGQ4YTUsIDB4NDIxOCwKLQkJMHhkOGE2LCAweDI0NzQsCi0JCTB4ZDhhNywgMHgzYzg0LAotCQkweGQ4YTgsIDB4NjQzNywKLQkJMHhkOGE5LCAweGRmZjQsCi0JCTB4ZDhhYSwgMHg2NDM3LAotCQkweGQ4YWIsIDB4MmZmNSwKLQkJMHhkOGFjLCAweDNjMDUsCi0JCTB4ZDhhZCwgMHg4NzU3LAotCQkweGQ4YWUsIDB4Yjg4OCwKLQkJMHhkOGFmLCAweDk3ODcsCi0JCTB4ZDhiMCwgMHhkZmY0LAotCQkweGQ4YjEsIDB4NjcyNCwKLQkJMHhkOGIyLCAweDg2NmEsCi0JCTB4ZDhiMywgMHg2ZjcyLAotCQkweGQ4YjQsIDB4MTAwMiwKLQkJMHhkOGI1LCAweDI2NDEsCi0JCTB4ZDhiNiwgMHgzMDIxLAotCQkweGQ4YjcsIDB4MTAwMSwKLQkJMHhkOGI4LCAweGM2MjAsCi0JCTB4ZDhiOSwgMHgwMDAwLAotCQkweGQ4YmEsIDB4YzYyMSwKLQkJMHhkOGJiLCAweDAwMDAsCi0JCTB4ZDhiYywgMHhjNjIyLAotCQkweGQ4YmQsIDB4MDBjZSwKLQkJMHhkOGJlLCAweGM2MjMsCi0JCTB4ZDhiZiwgMHgwMDdmLAotCQkweGQ4YzAsIDB4YzYyNCwKLQkJMHhkOGMxLCAweDAwMzIsCi0JCTB4ZDhjMiwgMHhjNjI1LAotCQkweGQ4YzMsIDB4MDAwMCwKLQkJMHhkOGM0LCAweGM2MjcsCi0JCTB4ZDhjNSwgMHgwMDAwLAotCQkweGQ4YzYsIDB4YzYyOCwKLQkJMHhkOGM3LCAweDAwMDAsCi0JCTB4ZDhjOCwgMHhjNjJjLAotCQkweGQ4YzksIDB4MDAwMCwKLQkJMHhkOGNhLCAweDAwMDAsCi0JCTB4ZDhjYiwgMHgyNjQxLAotCQkweGQ4Y2MsIDB4MzAyMSwKLQkJMHhkOGNkLCAweDEwMDEsCi0JCTB4ZDhjZSwgMHhjNTAyLAotCQkweGQ4Y2YsIDB4NTNhYywKLQkJMHhkOGQwLCAweGM1MDMsCi0JCTB4ZDhkMSwgMHgyY2QzLAotCQkweGQ4ZDIsIDB4YzYwMCwKLQkJMHhkOGQzLCAweDJhNmUsCi0JCTB4ZDhkNCwgMHhjNjAxLAotCQkweGQ4ZDUsIDB4MmEyYywKLQkJMHhkOGQ2LCAweGM2MDUsCi0JCTB4ZDhkNywgMHg1NTU3LAotCQkweGQ4ZDgsIDB4YzYwYywKLQkJMHhkOGQ5LCAweDU0MDAsCi0JCTB4ZDhkYSwgMHhjNzEwLAotCQkweGQ4ZGIsIDB4MDcwMCwKLQkJMHhkOGRjLCAweGM3MTEsCi0JCTB4ZDhkZCwgMHgwZjA2LAotCQkweGQ4ZGUsIDB4YzcxOCwKLQkJMHhkOGRmLCAweDA3MDAsCi0JCTB4ZDhlMCwgMHhjNzE5LAotCQkweGQ4ZTEsIDB4MGYwNiwKLQkJMHhkOGUyLCAweGM3MjAsCi0JCTB4ZDhlMywgMHg0NzAwLAotCQkweGQ4ZTQsIDB4YzcyMSwKLQkJMHhkOGU1LCAweDBmMDYsCi0JCTB4ZDhlNiwgMHhjNzI4LAotCQkweGQ4ZTcsIDB4MDcwMCwKLQkJMHhkOGU4LCAweGM3MjksCi0JCTB4ZDhlOSwgMHgxMjA3LAotCQkweGQ4ZWEsIDB4YzgwMSwKLQkJMHhkOGViLCAweDdmNTAsCi0JCTB4ZDhlYywgMHhjODAyLAotCQkweGQ4ZWQsIDB4Nzc2MCwKLQkJMHhkOGVlLCAweGM4MDMsCi0JCTB4ZDhlZiwgMHg3ZmNlLAotCQkweGQ4ZjAsIDB4YzgwNCwKLQkJMHhkOGYxLCAweDUyMGUsCi0JCTB4ZDhmMiwgMHhjODA1LAotCQkweGQ4ZjMsIDB4NWMxMSwKLQkJMHhkOGY0LCAweGM4MDYsCi0JCTB4ZDhmNSwgMHgzYzUxLAotCQkweGQ4ZjYsIDB4YzgwNywKLQkJMHhkOGY3LCAweDQwNjEsCi0JCTB4ZDhmOCwgMHhjODA4LAotCQkweGQ4ZjksIDB4NDljMSwKLQkJMHhkOGZhLCAweGM4MDksCi0JCTB4ZDhmYiwgMHgzODQwLAotCQkweGQ4ZmMsIDB4YzgwYSwKLQkJMHhkOGZkLCAweDAwMDAsCi0JCTB4ZDhmZSwgMHhjODIxLAotCQkweGQ4ZmYsIDB4MDAwMiwKLQkJMHhkOTAwLCAweGM4MjIsCi0JCTB4ZDkwMSwgMHgwMDQ2LAotCQkweGQ5MDIsIDB4Yzg0NCwKLQkJMHhkOTAzLCAweDE4MmYsCi0JCTB4ZDkwNCwgMHhjMDEzLAotCQkweGQ5MDUsIDB4ZjM0MSwKLQkJMHhkOTA2LCAweGMwODQsCi0JCTB4ZDkwNywgMHgwMDMwLAotCQkweGQ5MDgsIDB4YzkwNCwKLQkJMHhkOTA5LCAweDE0MDEsCi0JCTB4ZDkwYSwgMHhjYjBjLAotCQkweGQ5MGIsIDB4MDAwNCwKLQkJMHhkOTBjLCAweGNiMGUsCi0JCTB4ZDkwZCwgMHhhMDBhLAotCQkweGQ5MGUsIDB4Y2IwZiwKLQkJMHhkOTBmLCAweGMwYzAsCi0JCTB4ZDkxMCwgMHhjYjEwLAotCQkweGQ5MTEsIDB4YzBjMCwKLQkJMHhkOTEyLCAweGNiMTEsCi0JCTB4ZDkxMywgMHgwMGEwLAotCQkweGQ5MTQsIDB4Y2IxMiwKLQkJMHhkOTE1LCAweDAwMDcsCi0JCTB4ZDkxNiwgMHhjMjQxLAotCQkweGQ5MTcsIDB4YTAwMCwKLQkJMHhkOTE4LCAweGMyNDMsCi0JCTB4ZDkxOSwgMHg3ZmUwLAotCQkweGQ5MWEsIDB4YzYwNCwKLQkJMHhkOTFiLCAweDAwMGUsCi0JCTB4ZDkxYywgMHhjNjA5LAotCQkweGQ5MWQsIDB4MDBmNSwKLQkJMHhkOTFlLCAweGM2MTEsCi0JCTB4ZDkxZiwgMHgwMDBlLAotCQkweGQ5MjAsIDB4YzY2MCwKLQkJMHhkOTIxLCAweDk2MDAsCi0JCTB4ZDkyMiwgMHhjNjg3LAotCQkweGQ5MjMsIDB4MDAwNCwKLQkJMHhkOTI0LCAweGM2MGEsCi0JCTB4ZDkyNSwgMHgwNGY1LAotCQkweGQ5MjYsIDB4MDAwMCwKLQkJMHhkOTI3LCAweDI2NDEsCi0JCTB4ZDkyOCwgMHgzMDIxLAotCQkweGQ5MjksIDB4MTAwMSwKLQkJMHhkOTJhLCAweGM2MjAsCi0JCTB4ZDkyYiwgMHgxNGU1LAotCQkweGQ5MmMsIDB4YzYyMSwKLQkJMHhkOTJkLCAweGM1M2QsCi0JCTB4ZDkyZSwgMHhjNjIyLAotCQkweGQ5MmYsIDB4M2NiZSwKLQkJMHhkOTMwLCAweGM2MjMsCi0JCTB4ZDkzMSwgMHg0NDUyLAotCQkweGQ5MzIsIDB4YzYyNCwKLQkJMHhkOTMzLCAweGM1YzUsCi0JCTB4ZDkzNCwgMHhjNjI1LAotCQkweGQ5MzUsIDB4ZTAxZSwKLQkJMHhkOTM2LCAweGM2MjcsCi0JCTB4ZDkzNywgMHgwMDAwLAotCQkweGQ5MzgsIDB4YzYyOCwKLQkJMHhkOTM5LCAweDAwMDAsCi0JCTB4ZDkzYSwgMHhjNjJjLAotCQkweGQ5M2IsIDB4MDAwMCwKLQkJMHhkOTNjLCAweDAwMDAsCi0JCTB4ZDkzZCwgMHgyYjg0LAotCQkweGQ5M2UsIDB4M2M3NCwKLQkJMHhkOTNmLCAweDY0MzUsCi0JCTB4ZDk0MCwgMHhkZmY0LAotCQkweGQ5NDEsIDB4NjQzNSwKLQkJMHhkOTQyLCAweDI4MDYsCi0JCTB4ZDk0MywgMHgzMDA2LAotCQkweGQ5NDQsIDB4ODU2NSwKLQkJMHhkOTQ1LCAweDJiMjQsCi0JCTB4ZDk0NiwgMHgzYzI0LAotCQkweGQ5NDcsIDB4NjQzNiwKLQkJMHhkOTQ4LCAweDEwMDIsCi0JCTB4ZDk0OSwgMHgyYjI0LAotCQkweGQ5NGEsIDB4M2MyNCwKLQkJMHhkOTRiLCAweDY0MzYsCi0JCTB4ZDk0YywgMHg0MDQ1LAotCQkweGQ5NGQsIDB4ODY1NiwKLQkJMHhkOTRlLCAweDU2NjMsCi0JCTB4ZDk0ZiwgMHgwMzAyLAotCQkweGQ5NTAsIDB4NDAxZSwKLQkJMHhkOTUxLCAweDEwMDIsCi0JCTB4ZDk1MiwgMHgyODA3LAotCQkweGQ5NTMsIDB4MzFhNywKLQkJMHhkOTU0LCAweDIwYzQsCi0JCTB4ZDk1NSwgMHgzYzI0LAotCQkweGQ5NTYsIDB4NjcyNCwKLQkJMHhkOTU3LCAweDEwMDIsCi0JCTB4ZDk1OCwgMHgyODA3LAotCQkweGQ5NTksIDB4MzE4NywKLQkJMHhkOTVhLCAweDIwYzQsCi0JCTB4ZDk1YiwgMHgzYzI0LAotCQkweGQ5NWMsIDB4NjcyNCwKLQkJMHhkOTVkLCAweDEwMDIsCi0JCTB4ZDk1ZSwgMHgyNGY0LAotCQkweGQ5NWYsIDB4M2M2NCwKLQkJMHhkOTYwLCAweDY0MzYsCi0JCTB4ZDk2MSwgMHhkZmY0LAotCQkweGQ5NjIsIDB4NjQzNiwKLQkJMHhkOTYzLCAweDEwMDIsCi0JCTB4ZDk2NCwgMHgyMDA2LAotCQkweGQ5NjUsIDB4M2Q3NiwKLQkJMHhkOTY2LCAweGMxNjEsCi0JCTB4ZDk2NywgMHg2MTM0LAotCQkweGQ5NjgsIDB4NjEzNSwKLQkJMHhkOTY5LCAweDU0NDMsCi0JCTB4ZDk2YSwgMHgwMzAzLAotCQkweGQ5NmIsIDB4NjUyNCwKLQkJMHhkOTZjLCAweDAwZmIsCi0JCTB4ZDk2ZCwgMHgxMDAyLAotCQkweGQ5NmUsIDB4MjBkNCwKLQkJMHhkOTZmLCAweDNjMjQsCi0JCTB4ZDk3MCwgMHgyMDI1LAotCQkweGQ5NzEsIDB4MzAwNSwKLQkJMHhkOTcyLCAweDY1MjQsCi0JCTB4ZDk3MywgMHgxMDAyLAotCQkweGQ5NzQsIDB4ZDAxOSwKLQkJMHhkOTc1LCAweDIxMDQsCi0JCTB4ZDk3NiwgMHgzYzI0LAotCQkweGQ5NzcsIDB4MjEwNSwKLQkJMHhkOTc4LCAweDM4MDUsCi0JCTB4ZDk3OSwgMHg2NTI0LAotCQkweGQ5N2EsIDB4ZGZmNCwKLQkJMHhkOTdiLCAweDQwMDUsCi0JCTB4ZDk3YywgMHg2NTI0LAotCQkweGQ5N2QsIDB4MmU4ZCwKLQkJMHhkOTdlLCAweDMwM2QsCi0JCTB4ZDk3ZiwgMHgyNDA4LAotCQkweGQ5ODAsIDB4MzVkOCwKLQkJMHhkOTgxLCAweDVkZDMsCi0JCTB4ZDk4MiwgMHgwMzA3LAotCQkweGQ5ODMsIDB4ODg4NywKLQkJMHhkOTg0LCAweDYzYTcsCi0JCTB4ZDk4NSwgMHg4ODg3LAotCQkweGQ5ODYsIDB4NjNhNywKLQkJMHhkOTg3LCAweGRmZmQsCi0JCTB4ZDk4OCwgMHgwMGY5LAotCQkweGQ5ODksIDB4MTAwMiwKLQkJMHhkOThhLCAweDAwMDAsCi0JfTsKIAlpbnQgaSwgZXJyOwogCiAJLyogc2V0IHVDIGNsb2NrIGFuZCBhY3RpdmF0ZSBpdCAqLwpAQCAtMTYxMiwxMCArNTgxLDE2IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCS8qIHdyaXRlIFRXSU5BWCBFREMgZmlybXdhcmUgaW50byBQSFkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0d2luYXhfZWRjKSAmJiAhZXJyOyBpICs9IDIpCi0JCWVyciA9IHQzX21kaW9fd3JpdGUocGh5LCBNRElPX01NRF9QTUFQTUQsIHR3aW5heF9lZGNbaV0sCi0JCQkJICAgIHR3aW5heF9lZGNbaSArIDFdKTsKKwlpZiAocGh5LT5wcml2ICE9IGVkY190d2luYXgpCisJCWVyciA9IHQzX2dldF9lZGNfZncocGh5LCBFRENfVFdYX0FFTDIwMjAsCisJCQkJICAgIEVEQ19UV1hfQUVMMjAyMF9TSVpFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZm9yIChpID0gMDsgaSA8ICBFRENfVFdYX0FFTDIwMjBfU0laRSAvIHNpemVvZih1MTYpICYmICFlcnI7IGkgKz0gMikKKwkJZXJyID0gdDNfbWRpb193cml0ZShwaHksIE1ESU9fTU1EX1BNQVBNRCwKKwkJCQkgICAgcGh5LT5waHlfY2FjaGVbaV0sCisJCQkJICAgIHBoeS0+cGh5X2NhY2hlW2kgKyAxXSk7CiAJLyogYWN0aXZhdGUgdUMgKi8KIAllcnIgPSBzZXRfcGh5X3JlZ3MocGh5LCB1Q2FjdGl2YXRlKTsKIAlpZiAoIWVycikKQEAgLTE2NDksOSArNjI0LDM5IEBACiAgKi8KIHN0YXRpYyBpbnQgYWVsMjAyMF9pbnRyX2VuYWJsZShzdHJ1Y3QgY3BoeSAqcGh5KQogewotCWludCBlcnIgPSB0M19tZGlvX3dyaXRlKHBoeSwgTURJT19NTURfUE1BUE1ELCBBRUwyMDIwX0dQSU9fQ1RSTCwKLQkJCQkweDIgPDwgKEFFTDIwMjBfR1BJT19NT0RERVQqNCkpOwotCXJldHVybiBlcnIgPyBlcnIgOiB0M19waHlfbGFzaV9pbnRyX2VuYWJsZShwaHkpOworCXN0cnVjdCByZWdfdmFsIHJlZ3NbXSA9IHsKKwkJLyogb3V0cHV0IE1vZHVsZSdzIExvc3MgT2YgU2lnbmFsIChMT1MpIHRvIExFRCAqLworCQl7IE1ESU9fTU1EX1BNQVBNRCwgQUVMMjAyMF9HUElPX0NGRytBRUwyMDIwX0dQSU9fTFNUQVQsCisJCQkweGZmZmYsIDB4NCB9LAorCQl7IE1ESU9fTU1EX1BNQVBNRCwgQUVMMjAyMF9HUElPX0NUUkwsCisJCQkweGZmZmYsIDB4OCA8PCAoQUVMMjAyMF9HUElPX0xTVEFUKjQpIH0sCisKKwkJIC8qIGVuYWJsZSBtb2R1bGUgZGV0ZWN0IHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0cyAqLworCQl7IE1ESU9fTU1EX1BNQVBNRCwgQUVMMjAyMF9HUElPX0NUUkwsCisJCQkweGZmZmYsIDB4MiA8PCAoQUVMMjAyMF9HUElPX01PRERFVCo0KSB9LAorCisJCS8qIGVuZCAqLworCQl7IDAsIDAsIDAsIDAgfQorCX07CisJaW50IGVyciwgbGlua19vayA9IDA7CisKKwkvKiBzZXQgdXAgImxpbmsgc3RhdHVzIiBMRUQgYW5kIGVuYWJsZSBtb2R1bGUgY2hhbmdlIGludGVycnVwdHMgKi8KKwllcnIgPSBzZXRfcGh5X3JlZ3MocGh5LCByZWdzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gZ2V0X2xpbmtfc3RhdHVzX3IocGh5LCAmbGlua19vaywgTlVMTCwgTlVMTCwgTlVMTCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAobGlua19vaykKKwkJdDNfbGlua19jaGFuZ2VkKHBoeS0+YWRhcHRlciwKKwkJCQlwaHkycG9ydGlkKHBoeSkpOworCisJZXJyID0gdDNfcGh5X2xhc2lfaW50cl9lbmFibGUocGh5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xNjU5LDkgKzY2NCwyNiBAQAogICovCiBzdGF0aWMgaW50IGFlbDIwMjBfaW50cl9kaXNhYmxlKHN0cnVjdCBjcGh5ICpwaHkpCiB7Ci0JaW50IGVyciA9IHQzX21kaW9fd3JpdGUocGh5LCBNRElPX01NRF9QTUFQTUQsIEFFTDIwMjBfR1BJT19DVFJMLAotCQkJCTB4MSA8PCAoQUVMMjAyMF9HUElPX01PRERFVCo0KSk7Ci0JcmV0dXJuIGVyciA/IGVyciA6IHQzX3BoeV9sYXNpX2ludHJfZGlzYWJsZShwaHkpOworCXN0cnVjdCByZWdfdmFsIHJlZ3NbXSA9IHsKKwkJLyogcmVzZXQgImxpbmsgc3RhdHVzIiBMRUQgdG8gIm9mZiIgKi8KKwkJeyBNRElPX01NRF9QTUFQTUQsIEFFTDIwMjBfR1BJT19DVFJMLAorCQkJMHhmZmZmLCAweGIgPDwgKEFFTDIwMjBfR1BJT19MU1RBVCo0KSB9LAorCisJCS8qIGRpc2FibGUgbW9kdWxlIGRldGVjdCBzdGF0dXMgY2hhbmdlIGludGVycnVwdHMgKi8KKwkJeyBNRElPX01NRF9QTUFQTUQsIEFFTDIwMjBfR1BJT19DVFJMLAorCQkJMHhmZmZmLCAweDEgPDwgKEFFTDIwMjBfR1BJT19NT0RERVQqNCkgfSwKKworCQkvKiBlbmQgKi8KKwkJeyAwLCAwLCAwLCAwIH0KKwl9OworCWludCBlcnI7CisKKwkvKiB0dXJuIG9mZiAibGluayBzdGF0dXMiIExFRCBhbmQgZGlzYWJsZSBtb2R1bGUgY2hhbmdlIGludGVycnVwdHMgKi8KKwllcnIgPSBzZXRfcGh5X3JlZ3MocGh5LCByZWdzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHQzX3BoeV9sYXNpX2ludHJfZGlzYWJsZShwaHkpOwogfQogCiAvKgpAQCAtMTY3OSwzMSArNzAxLDI2IEBACiAJcmV0dXJuIGVyciA/IGVyciA6IHQzX3BoeV9sYXNpX2ludHJfY2xlYXIocGh5KTsKIH0KIAorc3RhdGljIHN0cnVjdCByZWdfdmFsIGFlbDIwMjBfcmVzZXRfcmVnc1tdID0geworCS8qIEVycmF0dW0gIzI6IENEUkxPTCBhc3NlcnRlZCwgY2F1c2luZyBQTUEgbGluayBkb3duIHN0YXR1cyAqLworCXsgTURJT19NTURfUE1BUE1ELCAweGMwMDMsIDB4ZmZmZiwgMHgzMTAxIH0sCisKKwkvKiBmb3JjZSBYQVVJIHRvIHNlbmQgTEYgd2hlbiBSWF9MT1MgaXMgYXNzZXJ0ZWQgKi8KKwl7IE1ESU9fTU1EX1BNQVBNRCwgMHhjZDQwLCAweGZmZmYsIDB4MDAwMSB9LAorCisJLyogYWxsb3cgd3JpdGVzIHRvIHRyYW5zY2VpdmVyIG1vZHVsZSBFRVBST00gb24gaTJjIGJ1cyAqLworCXsgTURJT19NTURfUE1BUE1ELCAweGZmMDIsIDB4ZmZmZiwgMHgwMDIzIH0sCisJeyBNRElPX01NRF9QTUFQTUQsIDB4ZmYwMywgMHhmZmZmLCAweDAwMDAgfSwKKwl7IE1ESU9fTU1EX1BNQVBNRCwgMHhmZjA0LCAweGZmZmYsIDB4MDAwMCB9LAorCisJLyogZW5kICovCisJeyAwLCAwLCAwLCAwIH0KK307CiAvKgogICogUmVzZXQgdGhlIFBIWSBhbmQgcHV0IGl0IGludG8gYSBjYW5vbmljYWwgb3BlcmF0aW5nIHN0YXRlLgogICovCiBzdGF0aWMgaW50IGFlbDIwMjBfcmVzZXQoc3RydWN0IGNwaHkgKnBoeSwgaW50IHdhaXQpCiB7Ci0Jc3RhdGljIHN0cnVjdCByZWdfdmFsIHJlZ3MwW10gPSB7Ci0JCS8qIEVycmF0dW0gIzI6IENEUkxPTCBhc3NlcnRlZCwgY2F1c2luZyBQTUEgbGluayBkb3duIHN0YXR1cyAqLwotCQl7IE1ESU9fTU1EX1BNQVBNRCwgMHhjMDAzLCAweGZmZmYsIDB4MzEwMSB9LAotCi0JCS8qIGZvcmNlIFhBVUkgdG8gc2VuZCBMRiB3aGVuIFJYX0xPUyBpcyBhc3NlcnRlZCAqLwotCQl7IE1ESU9fTU1EX1BNQVBNRCwgMHhjZDQwLCAweGZmZmYsIDB4MDAwMSB9LAotCi0JCS8qIFJYX0xPUyBwaW4gaXMgYWN0aXZlIGhpZ2ggKi8KLQkJeyBNRElPX01NRF9QTUFQTUQsIEFFTF9PUFRfU0VUVElOR1MsCi0JCQkweDAwMjAsIDB4MDAyMCB9LAotCi0JCS8qIG91dHB1dCBNb2R1bGUncyBMb3NzIE9mIFNpZ25hbCAoTE9TKSB0byBMRUQgKi8KLQkJeyBNRElPX01NRF9QTUFQTUQsIEFFTDIwMjBfR1BJT19DRkcrQUVMMjAyMF9HUElPX0xTVEFULAotCQkJMHhmZmZmLCAweDAwMDQgfSwKLQkJeyBNRElPX01NRF9QTUFQTUQsIEFFTDIwMjBfR1BJT19DVFJMLAotCQkJMHhmZmZmLCAweDggPDwgKEFFTDIwMjBfR1BJT19MU1RBVCo0KSB9LAotCi0JCS8qIGVuZCAqLwotCQl7IDAsIDAsIDAsIDAgfQotCX07CiAJaW50IGVycjsKIAl1bnNpZ25lZCBpbnQgbGFzaV9jdHJsOwogCkBAIC0xNzIwLDcgKzczNyw3IEBACiAKIAkvKiBiYXNpYyBpbml0aWFsaXphdGlvbiBmb3IgYWxsIG1vZHVsZSB0eXBlcyAqLwogCXBoeS0+cHJpdiA9IGVkY19ub25lOwotCWVyciA9IHNldF9waHlfcmVncyhwaHksIHJlZ3MwKTsKKwllcnIgPSBzZXRfcGh5X3JlZ3MocGh5LCBhZWwyMDIwX3Jlc2V0X3JlZ3MpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTE3OTgsMTAgKzgxNSwxNiBAQAogaW50IHQzX2FlbDIwMjBfcGh5X3ByZXAoc3RydWN0IGNwaHkgKnBoeSwgc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwaHlfYWRkciwKIAkJCWNvbnN0IHN0cnVjdCBtZGlvX29wcyAqbWRpb19vcHMpCiB7CisJaW50IGVycjsKKwogCWNwaHlfaW5pdChwaHksIGFkYXB0ZXIsIHBoeV9hZGRyLCAmYWVsMjAyMF9vcHMsIG1kaW9fb3BzLAogCQkgIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfQVVJIHwgU1VQUE9SVEVEX0ZJQlJFIHwKIAkJICBTVVBQT1JURURfSVJRLCAiMTBHQkFTRS1SIik7CiAJbXNsZWVwKDEyNSk7CisKKwllcnIgPSBzZXRfcGh5X3JlZ3MocGh5LCBhZWwyMDIwX3Jlc2V0X3JlZ3MpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4NDAsNyArODYzLDcgQEAKIAkuaW50cl9jbGVhciA9IHQzX3BoeV9sYXNpX2ludHJfY2xlYXIsCiAJLmludHJfaGFuZGxlciA9IHQzX3BoeV9sYXNpX2ludHJfaGFuZGxlciwKIAkuZ2V0X2xpbmtfc3RhdHVzID0gZ2V0X2xpbmtfc3RhdHVzX3gsCi0JLnBvd2VyX2Rvd24gPSBhZWwxMDA2X3Bvd2VyX2Rvd24sCisJLnBvd2VyX2Rvd24gPSBhZWwxMDAyX3Bvd2VyX2Rvd24sCiAJLm1tZHMgPSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX1BDUyB8IE1ESU9fREVWU19QSFlYUywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2FxMTAweC5jIGIvZHJpdmVycy9uZXQvY3hnYjMvYXExMDB4LmMKaW5kZXggYjFmZDViZi4uMzQxYjdlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYXExMDB4LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvYXExMDB4LmMKQEAgLTI3MSw3ICsyNzEsOCBAQAogCiAJY3BoeV9pbml0KHBoeSwgYWRhcHRlciwgcGh5X2FkZHIsICZhcTEwMHhfb3BzLCBtZGlvX29wcywKIAkJICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKLQkJICBTVVBQT1JURURfQXV0b25lZyB8IFNVUFBPUlRFRF9BVUksICIxMDAwLzEwR0JBU0UtVCIpOworCQkgIFNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX0FVSSwKKwkJICAiMTAwMC8xMEdCQVNFLVQiKTsKIAogCS8qCiAJICogVGhlIFBIWSBoYXMgYmVlbiBvdXQgb2YgcmVzZXQgZXZlciBzaW5jZSB0aGUgc3lzdGVtIHBvd2VyZWQgdXAuICBTbwpAQCAtMzE2LDExICszMTcsOSBAQAogCiAJLyogRmlybXdhcmUgdmVyc2lvbiBjaGVjay4gKi8KIAl0M19tZGlvX3JlYWQocGh5LCBNRElPX01NRF9WRU5EMSwgQVFfRldfVkVSU0lPTiwgJnYpOwotCWlmICh2ICE9IDMwKSB7CisJaWYgKHYgIT0gMTAxKQogCQlDSF9XQVJOKGFkYXB0ZXIsICJQSFklZDogdW5zdXBwb3J0ZWQgZmlybXdhcmUgJWRcbiIsCiAJCQlwaHlfYWRkciwgdik7Ci0JCXJldHVybiAwOyAvKiBhbGxvdyB0M19wcmVwX2FkYXB0ZXIgdG8gc3VjY2VlZCAqLwotCX0KIAogCS8qCiAJICogVGhlIFBIWSBzaG91bGQgc3RhcnQgaW4gcmVhbGx5LWxvdy1wb3dlciBtb2RlLiAgUHJlcGFyZSBpdCBmb3Igbm9ybWFsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oCmluZGV4IGQyMWI3MDUuLjFiMmMzMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oCkBAIC01NjYsNiArNTY2LDE1IEBACiAKIAl1MzIgbW1kczsKIH07CitlbnVtIHsKKwlFRENfT1BUX0FFTDIwMDUgPSAwLAorCUVEQ19PUFRfQUVMMjAwNV9TSVpFID0gMTA4NCwKKwlFRENfVFdYX0FFTDIwMDUgPSAxLAorCUVEQ19UV1hfQUVMMjAwNV9TSVpFID0gMTQ2NCwKKwlFRENfVFdYX0FFTDIwMjAgPSAyLAorCUVEQ19UV1hfQUVMMjAyMF9TSVpFID0gMTYyOCwKKwlFRENfTUFYX1NJWkUgPSBFRENfVFdYX0FFTDIwMjBfU0laRSwgLyogTWF4IGNhY2hlIHNpemUgKi8KK307CiAKIC8qIEEgUEhZIGluc3RhbmNlICovCiBzdHJ1Y3QgY3BoeSB7CkBAIC01NzcsNiArNTg2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZpZm9fZXJyb3JzOwkvKiBGSUZPIG92ZXIvdW5kZXItZmxvd3MgKi8KIAljb25zdCBzdHJ1Y3QgY3BoeV9vcHMgKm9wczsJLyogUEhZIG9wZXJhdGlvbnMgKi8KIAlzdHJ1Y3QgbWRpb19pZl9pbmZvIG1kaW87CisJdTE2IHBoeV9jYWNoZVtFRENfTUFYX1NJWkVdOwkvKiBFREMgY2FjaGUgKi8KIH07CiAKIC8qIENvbnZlbmllbmNlIE1ESU8gcmVhZC93cml0ZSB3cmFwcGVycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCmluZGV4IGZiNWRmNWMuLjM0ZTc3NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKQEAgLTE3Miw2ICsxNzIsMjMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGVuYWJsZV90eF9maWZvX2RyYWluKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCSBzdHJ1Y3QgcG9ydF9pbmZvICpwaSkKK3sKKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsIEFfWEdNX1RYRklGT19DRkcgKyBwaS0+bWFjLm9mZnNldCwgMCwKKwkJCSBGX0VORFJPUFBLVCk7CisJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1JYX0NUUkwgKyBwaS0+bWFjLm9mZnNldCwgMCk7CisJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1RYX0NUUkwgKyBwaS0+bWFjLm9mZnNldCwgRl9UWEVOKTsKKwl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fUlhfQ1RSTCArIHBpLT5tYWMub2Zmc2V0LCBGX1JYRU4pOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX3R4X2ZpZm9fZHJhaW4oc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICBzdHJ1Y3QgcG9ydF9pbmZvICpwaSkKK3sKKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsIEFfWEdNX1RYRklGT19DRkcgKyBwaS0+bWFjLm9mZnNldCwKKwkJCSBGX0VORFJPUFBLVCwgMCk7Cit9CisKIHZvaWQgdDNfb3NfbGlua19mYXVsdChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgaW50IHBvcnRfaWQsIGludCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRhcC0+cG9ydFtwb3J0X2lkXTsKQEAgLTE4NSw2ICsyMDIsOCBAQAogCiAJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAorCQlkaXNhYmxlX3R4X2ZpZm9fZHJhaW4oYWRhcCwgcGkpOworCiAJCS8qIENsZWFyIGxvY2FsIGZhdWx0cyAqLwogCQl0M194Z21faW50cl9kaXNhYmxlKGFkYXAsIHBpLT5wb3J0X2lkKTsKIAkJdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fSU5UX1NUQVRVUyArCkBAIC0yMDAsOSArMjE5LDEyIEBACiAJCXQzX3hnbV9pbnRyX2VuYWJsZShhZGFwLCBwaS0+cG9ydF9pZCk7CiAKIAkJdDNfbWFjX2VuYWJsZShtYWMsIE1BQ19ESVJFQ1RJT05fVFgpOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAKKwkJLyogRmx1c2ggVFggRklGTyAqLworCQllbmFibGVfdHhfZmlmb19kcmFpbihhZGFwLCBwaSk7CisJfQogCWxpbmtfcmVwb3J0KGRldik7CiB9CiAKQEAgLTIzMiw2ICsyNTQsOCBAQAogCiAJaWYgKGxpbmtfc3RhdCAhPSBuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKIAkJaWYgKGxpbmtfc3RhdCkgeworCQkJZGlzYWJsZV90eF9maWZvX2RyYWluKGFkYXB0ZXIsIHBpKTsKKwogCQkJdDNfbWFjX2VuYWJsZShtYWMsIE1BQ19ESVJFQ1RJT05fUlgpOwogCiAJCQkvKiBDbGVhciBsb2NhbCBmYXVsdHMgKi8KQEAgLTI2Myw2ICsyODcsOSBAQAogCQkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIHBpLT5tYWMub2Zmc2V0KTsKIAkJCXQzX21hY19kaXNhYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CiAJCQl0M19saW5rX3N0YXJ0KCZwaS0+cGh5LCBtYWMsICZwaS0+bGlua19jb25maWcpOworCisJCQkvKiBGbHVzaCBUWCBGSUZPICovCisJCQllbmFibGVfdHhfZmlmb19kcmFpbihhZGFwdGVyLCBwaSk7CiAJCX0KIAogCQlsaW5rX3JlcG9ydChkZXYpOwpAQCAtNDQzLDYgKzQ3MCw3IEBACiAJCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CiAJCXJlcS0+d3Iud3JfaGkgPSBodG9ubChWX1dSX09QKEZXX1dST1BDT0RFX0ZPUldBUkQpKTsKIAkJT1BDT0RFX1RJRChyZXEpID0gaHRvbmwoTUtfT1BDT0RFX1RJRChDUExfU01UX1dSSVRFX1JFUSwgaSkpOworCQlyZXEtPm10dV9pZHggPSBOTVRVUyAtIDE7CiAJCXJlcS0+aWZmID0gaTsKIAkJdDNfbWdtdF90eChhZGFwLCBza2IpOwogCQlpZiAoc2tiID09IGFkYXAtPm5vZmFpbF9za2IpIHsKQEAgLTk2Myw2ICs5OTEsNzUgQEAKIAogI2RlZmluZSBGV19GTkFNRSAiY3hnYjMvdDNmdy0lZC4lZC4lZC5iaW4iCiAjZGVmaW5lIFRQU1JBTV9OQU1FICJjeGdiMy90MyVjX3BzcmFtLSVkLiVkLiVkLmJpbiIKKyNkZWZpbmUgQUVMMjAwNV9PUFRfRURDX05BTUUgImN4Z2IzL2FlbDIwMDVfb3B0X2VkYy5iaW4iCisjZGVmaW5lIEFFTDIwMDVfVFdYX0VEQ19OQU1FICJjeGdiMy9hZWwyMDA1X3R3eF9lZGMuYmluIgorI2RlZmluZSBBRUwyMDIwX1RXWF9FRENfTkFNRSAiY3hnYjMvYWVsMjAyMF90d3hfZWRjLmJpbiIKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpnZXRfZWRjX2Z3X25hbWUoaW50IGVkY19pZHgpCit7CisJY29uc3QgY2hhciAqZndfbmFtZSA9IE5VTEw7CisKKwlzd2l0Y2ggKGVkY19pZHgpIHsKKwljYXNlIEVEQ19PUFRfQUVMMjAwNToKKwkJZndfbmFtZSA9IEFFTDIwMDVfT1BUX0VEQ19OQU1FOworCQlicmVhazsKKwljYXNlIEVEQ19UV1hfQUVMMjAwNToKKwkJZndfbmFtZSA9IEFFTDIwMDVfVFdYX0VEQ19OQU1FOworCQlicmVhazsKKwljYXNlIEVEQ19UV1hfQUVMMjAyMDoKKwkJZndfbmFtZSA9IEFFTDIwMjBfVFdYX0VEQ19OQU1FOworCQlicmVhazsKKwl9CisJcmV0dXJuIGZ3X25hbWU7Cit9CisKK2ludCB0M19nZXRfZWRjX2Z3KHN0cnVjdCBjcGh5ICpwaHksIGludCBlZGNfaWR4LCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBoeS0+YWRhcHRlcjsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNoYXIgYnVmWzY0XTsKKwl1MzIgY3N1bTsKKwljb25zdCBfX2JlMzIgKnA7CisJdTE2ICpjYWNoZSA9IHBoeS0+cGh5X2NhY2hlOworCWludCBpLCByZXQ7CisKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBnZXRfZWRjX2Z3X25hbWUoZWRjX2lkeCkpOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGJ1ZiwgJmFkYXB0ZXItPnBkZXYtPmRldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJImNvdWxkIG5vdCB1cGdyYWRlIGZpcm13YXJlOiB1bmFibGUgdG8gbG9hZCAlc1xuIiwKKwkJCWJ1Zik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogY2hlY2sgc2l6ZSwgdGFrZSBjaGVja3N1bSBpbiBhY2NvdW50ICovCisJaWYgKGZ3LT5zaXplID4gc2l6ZSArIDQpIHsKKwkJQ0hfRVJSKGFkYXB0ZXIsICJmaXJtd2FyZSBpbWFnZSB0b28gbGFyZ2UgJXUsIGV4cGVjdGVkICVkXG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGludClmdy0+c2l6ZSwgc2l6ZSArIDQpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCS8qIGNvbXB1dGUgY2hlY2tzdW0gKi8KKwlwID0gKGNvbnN0IF9fYmUzMiAqKWZ3LT5kYXRhOworCWZvciAoY3N1bSA9IDAsIGkgPSAwOyBpIDwgZnctPnNpemUgLyBzaXplb2YoY3N1bSk7IGkrKykKKwkJY3N1bSArPSBudG9obChwW2ldKTsKKworCWlmIChjc3VtICE9IDB4ZmZmZmZmZmYpIHsKKwkJQ0hfRVJSKGFkYXB0ZXIsICJjb3JydXB0ZWQgZmlybXdhcmUgaW1hZ2UsIGNoZWNrc3VtICV1XG4iLAorCQkgICAgICAgY3N1bSk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNpemUgLyA0IDsgaSsrKSB7CisJCSpjYWNoZSsrID0gKGJlMzJfdG9fY3B1KHBbaV0pICYgMHhmZmZmMDAwMCkgPj4gMTY7CisJCSpjYWNoZSsrID0gYmUzMl90b19jcHUocFtpXSkgJiAweGZmZmY7CisJfQorCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgaW50IHVwZ3JhZGVfZncoc3RydWN0IGFkYXB0ZXIgKmFkYXApCiB7CkBAIC0xMjg2LDYgKzEzODMsNyBAQAogCWlmICghb3RoZXJfcG9ydHMpCiAJCXNjaGVkdWxlX2Noa190YXNrKGFkYXB0ZXIpOwogCisJY3hnYjNfZXZlbnRfbm90aWZ5KCZhZGFwdGVyLT50ZGV2LCBPRkZMT0FEX1BPUlRfVVAsIHBpLT5wb3J0X2lkKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMxOCw2ICsxNDE2LDcgQEAKIAlpZiAoIWFkYXB0ZXItPm9wZW5fZGV2aWNlX21hcCkKIAkJY3hnYl9kb3duKGFkYXB0ZXIpOwogCisJY3hnYjNfZXZlbnRfbm90aWZ5KCZhZGFwdGVyLT50ZGV2LCBPRkZMT0FEX1BPUlRfRE9XTiwgcGktPnBvcnRfaWQpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzE3LDcgKzI4MTYsNyBAQAogCiAJaWYgKGlzX29mZmxvYWQoYWRhcHRlcikgJiYKIAkgICAgdGVzdF9iaXQoT0ZGTE9BRF9ERVZNQVBfQklULCAmYWRhcHRlci0+b3Blbl9kZXZpY2VfbWFwKSkgewotCQljeGdiM19lcnJfbm90aWZ5KCZhZGFwdGVyLT50ZGV2LCBPRkZMT0FEX1NUQVRVU19ET1dOLCAwKTsKKwkJY3hnYjNfZXZlbnRfbm90aWZ5KCZhZGFwdGVyLT50ZGV2LCBPRkZMT0FEX1NUQVRVU19ET1dOLCAwKTsKIAkJb2ZmbG9hZF9jbG9zZSgmYWRhcHRlci0+dGRldik7CiAJfQogCkBAIC0yNzgyLDcgKzI4ODEsNyBAQAogCX0KIAogCWlmIChpc19vZmZsb2FkKGFkYXB0ZXIpICYmICFvZmxkX2Rpc2FibGUpCi0JCWN4Z2IzX2Vycl9ub3RpZnkoJmFkYXB0ZXItPnRkZXYsIE9GRkxPQURfU1RBVFVTX1VQLCAwKTsKKwkJY3hnYjNfZXZlbnRfbm90aWZ5KCZhZGFwdGVyLT50ZGV2LCBPRkZMT0FEX1NUQVRVU19VUCwgMCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKaW5kZXggZjlmNTRiNS4uNzUwNjRlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYwpAQCAtMTUzLDE0ICsxNTMsMTQgQEAKIAltdXRleF91bmxvY2soJmN4Z2IzX2RiX2xvY2spOwogfQogCi12b2lkIGN4Z2IzX2Vycl9ub3RpZnkoc3RydWN0IHQzY2RldiAqdGRldiwgdTMyIHN0YXR1cywgdTMyIGVycm9yKQordm9pZCBjeGdiM19ldmVudF9ub3RpZnkoc3RydWN0IHQzY2RldiAqdGRldiwgdTMyIGV2ZW50LCB1MzIgcG9ydCkKIHsKIAlzdHJ1Y3QgY3hnYjNfY2xpZW50ICpjbGllbnQ7CiAKIAltdXRleF9sb2NrKCZjeGdiM19kYl9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJmNsaWVudF9saXN0LCBjbGllbnRfbGlzdCkgewotCQlpZiAoY2xpZW50LT5lcnJfaGFuZGxlcikKLQkJCWNsaWVudC0+ZXJyX2hhbmRsZXIodGRldiwgc3RhdHVzLCBlcnJvcik7CisJCWlmIChjbGllbnQtPmV2ZW50X2hhbmRsZXIpCisJCQljbGllbnQtPmV2ZW50X2hhbmRsZXIodGRldiwgZXZlbnQsIHBvcnQpOwogCX0KIAltdXRleF91bmxvY2soJmN4Z2IzX2RiX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oCmluZGV4IDU1OTQ1ZjQuLjY3MGFhNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmgKQEAgLTY0LDE0ICs2NCwxNiBAQAogdm9pZCBjeGdiM191bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgY3hnYjNfY2xpZW50ICpjbGllbnQpOwogdm9pZCBjeGdiM19hZGRfY2xpZW50cyhzdHJ1Y3QgdDNjZGV2ICp0ZGV2KTsKIHZvaWQgY3hnYjNfcmVtb3ZlX2NsaWVudHMoc3RydWN0IHQzY2RldiAqdGRldik7Ci12b2lkIGN4Z2IzX2Vycl9ub3RpZnkoc3RydWN0IHQzY2RldiAqdGRldiwgdTMyIHN0YXR1cywgdTMyIGVycm9yKTsKK3ZvaWQgY3hnYjNfZXZlbnRfbm90aWZ5KHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBldmVudCwgdTMyIHBvcnQpOwogCiB0eXBlZGVmIGludCAoKmN4Z2IzX2NwbF9oYW5kbGVyX2Z1bmMpKHN0cnVjdCB0M2NkZXYgKmRldiwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpjdHgpOwogCiBlbnVtIHsKIAlPRkZMT0FEX1NUQVRVU19VUCwKLQlPRkZMT0FEX1NUQVRVU19ET1dOCisJT0ZGTE9BRF9TVEFUVVNfRE9XTiwKKwlPRkZMT0FEX1BPUlRfRE9XTiwKKwlPRkZMT0FEX1BPUlRfVVAKIH07CiAKIHN0cnVjdCBjeGdiM19jbGllbnQgewpAQCAtODIsNyArODQsNyBAQAogCWludCAoKnJlZGlyZWN0KSh2b2lkICpjdHgsIHN0cnVjdCBkc3RfZW50cnkgKm9sZCwKIAkJCXN0cnVjdCBkc3RfZW50cnkgKm5ldywgc3RydWN0IGwydF9lbnRyeSAqbDJ0KTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNsaWVudF9saXN0OwotCXZvaWQgKCplcnJfaGFuZGxlcikoc3RydWN0IHQzY2RldiAqdGRldiwgdTMyIHN0YXR1cywgdTMyIGVycm9yKTsKKwl2b2lkICgqZXZlbnRfaGFuZGxlcikoc3RydWN0IHQzY2RldiAqdGRldiwgdTMyIGV2ZW50LCB1MzIgcG9ydCk7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwppbmRleCAyOWM3OWViLi5mODY2MTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwpAQCAtMTIxNiw3ICsxMjE2LDcgQEAKICAqCiAgKglBZGQgYSBwYWNrZXQgdG8gYW4gU0dFIFR4IHF1ZXVlLiAgUnVucyB3aXRoIHNvZnRpcnFzIGRpc2FibGVkLgogICovCi1pbnQgdDNfZXRoX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IHQzX2V0aF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IHFpZHg7CiAJdW5zaWduZWQgaW50IG5kZXNjLCBwaWR4LCBjcmVkaXRzLCBnZW4sIGNvbXBsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKaW5kZXggODcwZDQ0OS4uMDMyY2ZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCkBAIC0zNDY1LDcgKzM0NjUsNyBAQAogCQl7MjAxLCAzMjEsIDI1OCwgNDUwLCA4MzQsIDE2MDJ9CiAJfTsKIAotCXUxNiB2YWw7CisJdTE2IHZhbCwgZGV2aWQ7CiAJdW5zaWduZWQgaW50IGxvZzJfd2lkdGgsIHBsZHNpemU7CiAJdW5zaWduZWQgaW50IGZzdF90cm5fcngsIGZzdF90cm5fdHgsIGFja2xhdCwgcnBsbG10OwogCkBAIC0zNDczLDYgKzM0NzMsMTcgQEAKIAkJCSAgICAgYWRhcC0+cGFyYW1zLnBjaS5wY2llX2NhcF9hZGRyICsgUENJX0VYUF9ERVZDVEwsCiAJCQkgICAgICZ2YWwpOwogCXBsZHNpemUgPSAodmFsICYgUENJX0VYUF9ERVZDVExfUEFZTE9BRCkgPj4gNTsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkYXAtPnBkZXYsIDB4MiwgJmRldmlkKTsKKwlpZiAoZGV2aWQgPT0gMHgzNykgeworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYWRhcC0+cGRldiwKKwkJCQkgICAgICBhZGFwLT5wYXJhbXMucGNpLnBjaWVfY2FwX2FkZHIgKworCQkJCSAgICAgIFBDSV9FWFBfREVWQ1RMLAorCQkJCSAgICAgIHZhbCAmIH5QQ0lfRVhQX0RFVkNUTF9SRUFEUlEgJgorCQkJCSAgICAgIH5QQ0lfRVhQX0RFVkNUTF9QQVlMT0FEKTsKKwkJcGxkc2l6ZSA9IDA7CisJfQorCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcC0+cGRldiwKIAkJCSAgICAgYWRhcC0+cGFyYW1zLnBjaS5wY2llX2NhcF9hZGRyICsgUENJX0VYUF9MTktDVEwsCiAJCQkgICAgICZ2YWwpOwpAQCAtMzY4MSw3ICszNjkyLDEzIEBACiAKIHZvaWQgbWFjX3ByZXAoc3RydWN0IGNtYWMgKm1hYywgc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBpbmRleCkKIHsKKwl1MTYgZGV2aWQ7CisKIAltYWMtPmFkYXB0ZXIgPSBhZGFwdGVyOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkYXB0ZXItPnBkZXYsIDB4MiwgJmRldmlkKTsKKworCWlmIChkZXZpZCA9PSAweDM3ICYmICFhZGFwdGVyLT5wYXJhbXMudnBkLnhhdWljZmdbMV0pCisJCWluZGV4ID0gMDsKIAltYWMtPm9mZnNldCA9IChYR01BQzBfMV9CQVNFX0FERFIgLSBYR01BQzBfMF9CQVNFX0FERFIpICogaW5kZXg7CiAJbWFjLT5udWNhc3QgPSAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jIGIvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYwppbmRleCBmODdmOTQzLi4wMTA5ZWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMKQEAgLTQ0NywxMSArNDQ3LDEyIEBACiAKIAl2YWwgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9SWEZJRk9fQ0ZHICsgb2Z0KTsKIAl2YWwgJj0gflZfUlhGSUZPUEFVU0VIV00oTV9SWEZJRk9QQVVTRUhXTSk7Ci0JaWYgKGZjICYgUEFVU0VfVFgpCi0JCXZhbCB8PSBWX1JYRklGT1BBVVNFSFdNKHJ4X2ZpZm9faHdtKAotCQkJCQkJdDNfcmVhZF9yZWcoYWRhcCwKLQkJCQkJCUFfWEdNX1JYX01BWF9QS1RfU0laRQotCQkJCQkJKyBvZnQpKSAvIDgpOworCWlmIChmYyAmIFBBVVNFX1RYKSB7CisJCXUzMiByeF9tYXhfcGt0X3NpemUgPQorCQkgICAgR19SWE1BWFBLVFNJWkUodDNfcmVhZF9yZWcoYWRhcCwKKwkJCQkJICAgICAgIEFfWEdNX1JYX01BWF9QS1RfU0laRSArIG9mdCkpOworCQl2YWwgfD0gVl9SWEZJRk9QQVVTRUhXTShyeF9maWZvX2h3bShyeF9tYXhfcGt0X3NpemUpIC8gOCk7CisJfQogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SWEZJRk9fQ0ZHICsgb2Z0LCB2YWwpOwogCiAJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1hHTV9UWF9DRkcgKyBvZnQsIEZfVFhQQVVTRUVOLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwppbmRleCAxMmZkNDQ2Li5kNDY1ZWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYworKysgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwpAQCAtMTkyMCw3ICsxOTIwLDYgQEAKIAlza2JfcHV0KHBfc2tiLCBuZXRfcGt0X2xpc3QtPnBrdF9sZW5ndGgpOwogCUVNQUNfQ0FDSEVfSU5WQUxJREFURSgodW5zaWduZWQgbG9uZylwX3NrYi0+ZGF0YSwgcF9za2ItPmxlbik7CiAJcF9za2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocF9za2IsIHByaXYtPm5kZXYpOwotCXBfc2tiLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCW5ldGlmX3JlY2VpdmVfc2tiKHBfc2tiKTsKIAlwcml2LT5uZXRfZGV2X3N0YXRzLnJ4X2J5dGVzICs9IG5ldF9wa3RfbGlzdC0+cGt0X2xlbmd0aDsKIAlwcml2LT5uZXRfZGV2X3N0YXRzLnJ4X3BhY2tldHMrKzsKQEAgLTI4MTcsNyArMjgxNiw3IEBACiB7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZGF2aW5jaV9lbWFjX2RyaXZlcik7CiB9Ci1tb2R1bGVfaW5pdChkYXZpbmNpX2VtYWNfaW5pdCk7CitsYXRlX2luaXRjYWxsKGRhdmluY2lfZW1hY19pbml0KTsKIAogLyoqCiAgKiBkYXZpbmNpX2VtYWNfZXhpdDogRU1BQyBkcml2ZXIgbW9kdWxlIGV4aXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlNjAwLmMgYi9kcml2ZXJzL25ldC9kZTYwMC5jCmluZGV4IGUxYWYwODkuLjZiMTNmNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlNjAwLmMKKysrIGIvZHJpdmVycy9uZXQvZGU2MDAuYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlNjAwX2xvY2ssIGZsYWdzKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlNjIwLmMgYi9kcml2ZXJzL25ldC9kZTYyMC5jCmluZGV4IDU1ZDJiYjYuLjQ1Nzk0ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlNjIwLmMKKysrIGIvZHJpdmVycy9uZXQvZGU2MjAuYwpAQCAtNTQyLDcgKzU0Miw3IEBACiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGU2MjBfbG9jaywgZmxhZ3MpOwogCWRldl9rZnJlZV9za2IgKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZWNsYW5jZS5jIGIvZHJpdmVycy9uZXQvZGVjbGFuY2UuYwppbmRleCAyYjIyZTU4Li5hMzE2OTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKQEAgLTkwMiw3ICs5MDIsNyBAQAogCiAJaWYgKGxlbiA8IEVUSF9aTEVOKSB7CiAJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCWxlbiA9IEVUSF9aTEVOOwogCX0KIApAQCAtOTMzLDcgKzkzMyw3IEBACiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0gCXJldHVybiAwOworIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBsYW5jZV9sb2FkX211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVmeHguYyBiL2RyaXZlcnMvbmV0L2RlZnh4LmMKaW5kZXggMTAyYjhkNC4uNmE2ZWEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVmeHguYworKysgYi9kcml2ZXJzL25ldC9kZWZ4eC5jCkBAIC0zMDAsNyArMzAwLDggQEAKIHN0YXRpYyB2b2lkCQlkZnhfcmN2X3F1ZXVlX3Byb2Nlc3MoREZYX2JvYXJkX3QgKmJwKTsKIHN0YXRpYyB2b2lkCQlkZnhfcmN2X2ZsdXNoKERGWF9ib2FyZF90ICpicCk7CiAKLXN0YXRpYyBpbnQJCWRmeF94bXRfcXVldWVfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGRmeF94bXRfcXVldWVfcGt0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQJCWRmeF94bXRfZG9uZShERlhfYm9hcmRfdCAqYnApOwogc3RhdGljIHZvaWQJCWRmeF94bXRfZmx1c2goREZYX2JvYXJkX3QgKmJwKTsKIApAQCAtMzE4OCwxMSArMzE4OSw4IEBACiAgKiAgIE5vbmUKICAqLwogCi1zdGF0aWMgaW50IGRmeF94bXRfcXVldWVfcGt0KAotCXN0cnVjdCBza19idWZmCSpza2IsCi0Jc3RydWN0IG5ldF9kZXZpY2UJKmRldgotCSkKLQorc3RhdGljIG5ldGRldl90eF90IGRmeF94bXRfcXVldWVfcGt0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXsKIAlERlhfYm9hcmRfdAkJKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OAkJCXByb2Q7CQkJCS8qIGxvY2FsIHRyYW5zbWl0IHByb2R1Y2VyIGluZGV4ICovCkBAIC0zMjE4LDcgKzMyMTYsNyBAQAogCQlicC0+eG10X2xlbmd0aF9lcnJvcnMrKzsJCS8qIGJ1bXAgZXJyb3IgY291bnRlciAqLwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuKDApOwkJCQkvKiByZXR1cm4gInN1Y2Nlc3MiICovCisJCXJldHVybiBORVRERVZfVFhfT0s7CQkJLyogcmV0dXJuICJzdWNjZXNzIiAqLwogCX0KIAkvKgogCSAqIFNlZSBpZiBhZGFwdGVyIGxpbmsgaXMgYXZhaWxhYmxlLCBpZiBub3QsIGZyZWUgYnVmZmVyCkBAIC0zMjQxLDcgKzMyMzksNyBAQAogCQkJYnAtPnhtdF9kaXNjYXJkcysrOwkJCQkJLyogYnVtcCBlcnJvciBjb3VudGVyICovCiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CQkvKiBmcmVlIHNrX2J1ZmYgbm93ICovCiAJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCQlyZXR1cm4oMCk7CQkJCQkJCS8qIHJldHVybiAic3VjY2VzcyIgKi8KKwkJCXJldHVybiBORVRERVZfVFhfT0s7CQkvKiByZXR1cm4gInN1Y2Nlc3MiICovCiAJCQl9CiAJCX0KIApAQCAtMzM0NSw3ICszMzQzLDcgQEAKIAlkZnhfcG9ydF93cml0ZV9sb25nKGJwLCBQSV9QRFFfS19SRUdfVFlQRV8yX1BST0QsIGJwLT5yY3ZfeG10X3JlZy5sd29yZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JcmV0dXJuKDApOwkJCQkJCQkvKiBwYWNrZXQgcXVldWVkIHRvIGFkYXB0ZXIgKi8KKwlyZXR1cm4gTkVUREVWX1RYX09LOwkvKiBwYWNrZXQgcXVldWVkIHRvIGFkYXB0ZXIgKi8KIAl9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVwY2EuYyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKaW5kZXggOTdlYTJkNi4uOTY4NmMxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVwY2EuYworKysgYi9kcml2ZXJzL25ldC9kZXBjYS5jCkBAIC01MTYsNyArNTE2LDggQEAKICoqIFB1YmxpYyBGdW5jdGlvbnMKICovCiBzdGF0aWMgaW50IGRlcGNhX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGRlcGNhX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZGVwY2Ffc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBkZXBjYV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBpbnQgZGVwY2FfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGRlcGNhX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwpAQCAtOTI4LDcgKzkyOSw4IEBACiAvKgogKiogV3JpdGVzIGEgc29ja2V0IGJ1ZmZlciB0byBUWCBkZXNjcmlwdG9yIHJpbmcgYW5kIHN0YXJ0cyB0cmFuc21pc3Npb24KICovCi1zdGF0aWMgaW50IGRlcGNhX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBkZXBjYV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRlcGNhX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1X2xvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC0xNzkzLDcgKzE3OTUsNyBAQAogc3RhdGljIGludCBsb2FkX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBkZXBjYV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGksIGVudHJ5LCBlbmQsIGxlbiwgc3RhdHVzID0gMDsKKwlpbnQgaSwgZW50cnksIGVuZCwgbGVuLCBzdGF0dXMgPSBORVRERVZfVFhfT0s7CiAKIAllbnRyeSA9IGxwLT50eF9uZXc7CS8qIFJpbmcgYXJvdW5kIGJ1ZmZlciBudW1iZXIuICovCiAJZW5kID0gKGVudHJ5ICsgKHNrYi0+bGVuIC0gMSkgLyBUWF9CVUZGX1NaKSAmIGxwLT50eFJpbmdNYXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGwyay5jIGIvZHJpdmVycy9uZXQvZGwyay5jCmluZGV4IDRiNmEyMTkuLjdmYTdhOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RsMmsuYworKysgYi9kcml2ZXJzL25ldC9kbDJrLmMKQEAgLTU5LDcgKzU5LDcgQEAKIHN0YXRpYyB2b2lkIHJpb190aW1lciAodW5zaWduZWQgbG9uZyBkYXRhKTsKIHN0YXRpYyB2b2lkIHJpb190eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGFsbG9jX2xpc3QgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBzdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBzdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCByaW9faW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwogc3RhdGljIHZvaWQgcmlvX2ZyZWVfdHggKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpcnEpOwogc3RhdGljIHZvaWQgdHhfZXJyb3IgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0eF9zdGF0dXMpOwpAQCAtNjAwLDcgKzYwMCw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIHN0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbTkwMDAuYyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCmluZGV4IGRkNzcxZGUuLjMxYjhiZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCkBAIC05Miw2ICs5Miw3IEBACiAJdTE2CQl0eF9wa3RfY250OwogCXUxNgkJcXVldWVfcGt0X2xlbjsKIAl1MTYJCXF1ZXVlX3N0YXJ0X2FkZHI7CisJdTE2CQlxdWV1ZV9pcF9zdW1tZWQ7CiAJdTE2CQlkYnVnX2NudDsKIAl1OAkJaW9fbW9kZTsJCS8qIDA6d29yZCwgMjpieXRlICovCiAJdTgJCXBoeV9hZGRyOwpAQCAtMTI0LDYgKzEyNSwxMCBAQAogCiAJc3RydWN0IG1paV9pZl9pbmZvIG1paTsKIAl1MzIJCW1zZ19lbmFibGU7CisKKwlpbnQJCXJ4X2NzdW07CisJaW50CQljYW5fY3N1bTsKKwlpbnQJCWlwX3N1bW1lZDsKIH0gYm9hcmRfaW5mb190OwogCiAvKiBkZWJ1ZyBjb2RlICovCkBAIC00NjAsNiArNDY1LDQwIEBACiAJcmV0dXJuIG1paV9ud2F5X3Jlc3RhcnQoJmRtLT5taWkpOwogfQogCitzdGF0aWMgdWludDMyX3QgZG05MDAwX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOworCXJldHVybiBkbS0+cnhfY3N1bTsKK30KKworc3RhdGljIGludCBkbTkwMDBfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdWludDMyX3QgZGF0YSkKK3sKKwlib2FyZF9pbmZvX3QgKmRtID0gdG9fZG05MDAwX2JvYXJkKGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChkbS0+Y2FuX2NzdW0pIHsKKwkJZG0tPnJ4X2NzdW0gPSBkYXRhOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkbS0+bG9jaywgZmxhZ3MpOworCQlpb3coZG0sIERNOTAwMF9SQ1NSLCBkbS0+cnhfY3N1bSA/IFJDU1JfQ1NVTSA6IDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbS0+bG9jaywgZmxhZ3MpOworCisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGludCBkbTkwMDBfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdWludDMyX3QgZGF0YSkKK3sKKwlib2FyZF9pbmZvX3QgKmRtID0gdG9fZG05MDAwX2JvYXJkKGRldik7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJaWYgKGRtLT5jYW5fY3N1bSkKKwkJcmV0ID0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bShkZXYsIGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyB1MzIgZG05MDAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOwpAQCAtNTQwLDYgKzU3OSwxMCBAQAogIAkuZ2V0X2VlcHJvbV9sZW4JCT0gZG05MDAwX2dldF9lZXByb21fbGVuLAogIAkuZ2V0X2VlcHJvbQkJPSBkbTkwMDBfZ2V0X2VlcHJvbSwKICAJLnNldF9lZXByb20JCT0gZG05MDAwX3NldF9lZXByb20sCisJLmdldF9yeF9jc3VtCQk9IGRtOTAwMF9nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0JCT0gZG05MDAwX3NldF9yeF9jc3VtLAorCS5nZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX2dldF90eF9jc3VtLAorCS5zZXRfdHhfY3N1bQkJPSBkbTkwMDBfc2V0X3R4X2NzdW0sCiB9OwogCiBzdGF0aWMgdm9pZCBkbTkwMDBfc2hvd19jYXJyaWVyKGJvYXJkX2luZm9fdCAqZGIsCkBAIC02ODUsNiArNzI4LDkgQEAKIAkvKiBJL08gbW9kZSAqLwogCWRiLT5pb19tb2RlID0gaW9yKGRiLCBETTkwMDBfSVNSKSA+PiA2OwkvKiBJU1IgYml0Nzo2IGtlZXBzIEkvTyBtb2RlICovCiAKKwkvKiBDaGVja3N1bSBtb2RlICovCisJZG05MDAwX3NldF9yeF9jc3VtKGRldiwgZGItPnJ4X2NzdW0pOworCiAJLyogR1BJTzAgb24gcHJlLWFjdGl2YXRlIFBIWSAqLwogCWlvdyhkYiwgRE05MDAwX0dQUiwgMCk7CS8qIFJFR18xRiBiaXQwIGFjdGl2YXRlIHBoeXhjZXIgKi8KIAlpb3coZGIsIERNOTAwMF9HUENSLCBHUENSX0dFUF9DTlRMKTsJLyogTGV0IEdQSU8wIG91dHB1dCAqLwpAQCAtNzQzLDYgKzc4OSwyOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiLT5sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyB2b2lkIGRtOTAwMF9zZW5kX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIGludCBpcF9zdW1tZWQsCisJCQkgICAgICAgdTE2IHBrdF9sZW4pCit7CisJYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOworCisJLyogVGhlIERNOTAwMCBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIGxlYXZlIGZyYWdtZW50ZWQgcGFja2V0cyBhbG9uZS4gKi8KKwlpZiAoZG0tPmlwX3N1bW1lZCAhPSBpcF9zdW1tZWQpIHsKKwkJaWYgKGlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKQorCQkJaW93KGRtLCBETTkwMDBfVENDUiwgMCk7CisJCWVsc2UKKwkJCWlvdyhkbSwgRE05MDAwX1RDQ1IsIFRDQ1JfSVAgfCBUQ0NSX1VEUCB8IFRDQ1JfVENQKTsKKwkJZG0tPmlwX3N1bW1lZCA9IGlwX3N1bW1lZDsKKwl9CisKKwkvKiBTZXQgVFggbGVuZ3RoIHRvIERNOTAwMCAqLworCWlvdyhkbSwgRE05MDAwX1RYUExMLCBwa3RfbGVuKTsKKwlpb3coZG0sIERNOTAwMF9UWFBMSCwgcGt0X2xlbiA+PiA4KTsKKworCS8qIElzc3VlIFRYIHBvbGxpbmcgY29tbWFuZCAqLworCWlvdyhkbSwgRE05MDAwX1RDUiwgVENSX1RYUkVRKTsJLyogQ2xlYXJlZCBhZnRlciBUWCBjb21wbGV0ZSAqLworfQorCiAvKgogICogIEhhcmR3YXJlIHN0YXJ0IHRyYW5zbWlzc2lvbi4KICAqICBTZW5kIGEgcGFja2V0IHRvIG1lZGlhIGZyb20gdGhlIHVwcGVyIGxheWVyLgpAQCAtNzY5LDE3ICs4MzgsMTEgQEAKIAlkYi0+dHhfcGt0X2NudCsrOwogCS8qIFRYIGNvbnRyb2w6IEZpcnN0IHBhY2tldCBpbW1lZGlhdGVseSBzZW5kLCBzZWNvbmQgcGFja2V0IHF1ZXVlICovCiAJaWYgKGRiLT50eF9wa3RfY250ID09IDEpIHsKLQkJLyogU2V0IFRYIGxlbmd0aCB0byBETTkwMDAgKi8KLQkJaW93KGRiLCBETTkwMDBfVFhQTEwsIHNrYi0+bGVuKTsKLQkJaW93KGRiLCBETTkwMDBfVFhQTEgsIHNrYi0+bGVuID4+IDgpOwotCi0JCS8qIElzc3VlIFRYIHBvbGxpbmcgY29tbWFuZCAqLwotCQlpb3coZGIsIERNOTAwMF9UQ1IsIFRDUl9UWFJFUSk7CS8qIENsZWFyZWQgYWZ0ZXIgVFggY29tcGxldGUgKi8KLQotCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsJLyogc2F2ZSB0aGUgdGltZSBzdGFtcCAqLworCQlkbTkwMDBfc2VuZF9wYWNrZXQoZGV2LCBza2ItPmlwX3N1bW1lZCwgc2tiLT5sZW4pOwogCX0gZWxzZSB7CiAJCS8qIFNlY29uZCBwYWNrZXQgKi8KIAkJZGItPnF1ZXVlX3BrdF9sZW4gPSBza2ItPmxlbjsKKwkJZGItPnF1ZXVlX2lwX3N1bW1lZCA9IHNrYi0+aXBfc3VtbWVkOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJfQogCkBAIC03ODgsNyArODUxLDcgQEAKIAkvKiBmcmVlIHRoaXMgU0tCICovCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKQEAgLTgwOSwxMiArODcyLDkgQEAKIAkJCWRldl9kYmcoZGItPmRldiwgInR4IGRvbmUsIE5TUiAlMDJ4XG4iLCB0eF9zdGF0dXMpOwogCiAJCS8qIFF1ZXVlIHBhY2tldCBjaGVjayAmIHNlbmQgKi8KLQkJaWYgKGRiLT50eF9wa3RfY250ID4gMCkgewotCQkJaW93KGRiLCBETTkwMDBfVFhQTEwsIGRiLT5xdWV1ZV9wa3RfbGVuKTsKLQkJCWlvdyhkYiwgRE05MDAwX1RYUExILCBkYi0+cXVldWVfcGt0X2xlbiA+PiA4KTsKLQkJCWlvdyhkYiwgRE05MDAwX1RDUiwgVENSX1RYUkVRKTsKLQkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQl9CisJCWlmIChkYi0+dHhfcGt0X2NudCA+IDApCisJCQlkbTkwMDBfc2VuZF9wYWNrZXQoZGV2LCBkYi0+cXVldWVfaXBfc3VtbWVkLAorCQkJCQkgICBkYi0+cXVldWVfcGt0X2xlbik7CiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAl9CiB9CkBAIC04NDYsMTQgKzkwNiwxNCBAQAogCQlyeGJ5dGUgPSByZWFkYihkYi0+aW9fZGF0YSk7CiAKIAkJLyogU3RhdHVzIGNoZWNrOiB0aGlzIGJ5dGUgbXVzdCBiZSAwIG9yIDEgKi8KLQkJaWYgKHJ4Ynl0ZSA+IERNOTAwMF9QS1RfUkRZKSB7CisJCWlmIChyeGJ5dGUgJiBETTkwMDBfUEtUX0VSUikgewogCQkJZGV2X3dhcm4oZGItPmRldiwgInN0YXR1cyBjaGVjayBmYWlsOiAlZFxuIiwgcnhieXRlKTsKIAkJCWlvdyhkYiwgRE05MDAwX1JDUiwgMHgwMCk7CS8qIFN0b3AgRGV2aWNlICovCiAJCQlpb3coZGIsIERNOTAwMF9JU1IsIElNUl9QQVIpOwkvKiBTdG9wIElOVCByZXF1ZXN0ICovCiAJCQlyZXR1cm47CiAJCX0KIAotCQlpZiAocnhieXRlICE9IERNOTAwMF9QS1RfUkRZKQorCQlpZiAoIShyeGJ5dGUgJiBETTkwMDBfUEtUX1JEWSkpCiAJCQlyZXR1cm47CiAKIAkJLyogQSBwYWNrZXQgcmVhZHkgbm93ICAmIEdldCBzdGF0dXMvbGVuZ3RoICovCkBAIC05MTQsNiArOTc0LDEyIEBACiAKIAkJCS8qIFBhc3MgdG8gdXBwZXIgbGF5ZXIgKi8KIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQlpZiAoZGItPnJ4X2NzdW0pIHsKKwkJCQlpZiAoKCgocnhieXRlICYgMHgxYykgPDwgMykgJiByeGJ5dGUpID09IDApCisJCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCQkJZWxzZQorCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQl9CiAJCQluZXRpZl9yeChza2IpOwogCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAKQEAgLTkyMiw3ICs5ODgsNyBAQAogCiAJCQkoZGItPmR1bXBibGspKGRiLT5pb19kYXRhLCBSeExlbik7CiAJCX0KLQl9IHdoaWxlIChyeGJ5dGUgPT0gRE05MDAwX1BLVF9SRFkpOworCX0gd2hpbGUgKHJ4Ynl0ZSAmIERNOTAwMF9QS1RfUkRZKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGRtOTAwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtMTE4NSw4ICsxMjUxLDYgQEAKICNlbmRpZgogfTsKIAotI2RlZmluZSByZXNfc2l6ZShfcikgKCgoX3IpLT5lbmQgLSAoX3IpLT5zdGFydCkgKyAxKQotCiAvKgogICogU2VhcmNoIERNOTAwMCBib2FyZCwgYWxsb2NhdGUgc3BhY2UgYW5kIHJlZ2lzdGVyIGl0CiAgKi8KQEAgLTEyMTUsNyArMTI3OSw2IEBACiAKIAkvKiBzZXR1cCBib2FyZCBpbmZvIHN0cnVjdHVyZSAqLwogCWRiID0gbmV0ZGV2X3ByaXYobmRldik7Ci0JbWVtc2V0KGRiLCAwLCBzaXplb2YoKmRiKSk7CiAKIAlkYi0+ZGV2ID0gJnBkZXYtPmRldjsKIAlkYi0+bmRldiA9IG5kZXY7CkBAIC0xMjM2LDcgKzEyOTksNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpb3NpemUgPSByZXNfc2l6ZShkYi0+YWRkcl9yZXMpOworCWlvc2l6ZSA9IHJlc291cmNlX3NpemUoZGItPmFkZHJfcmVzKTsKIAlkYi0+YWRkcl9yZXEgPSByZXF1ZXN0X21lbV9yZWdpb24oZGItPmFkZHJfcmVzLT5zdGFydCwgaW9zaXplLAogCQkJCQkgIHBkZXYtPm5hbWUpOwogCkBAIC0xMjU0LDcgKzEzMTcsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpb3NpemUgPSByZXNfc2l6ZShkYi0+ZGF0YV9yZXMpOworCWlvc2l6ZSA9IHJlc291cmNlX3NpemUoZGItPmRhdGFfcmVzKTsKIAlkYi0+ZGF0YV9yZXEgPSByZXF1ZXN0X21lbV9yZWdpb24oZGItPmRhdGFfcmVzLT5zdGFydCwgaW9zaXplLAogCQkJCQkgIHBkZXYtPm5hbWUpOwogCkBAIC0xMzQ5LDYgKzE0MTIsMTMgQEAKIAkJZGItPnR5cGUgPSBUWVBFX0RNOTAwMEU7CiAJfQogCisJLyogZG05MDAwYS9iIGFyZSBjYXBhYmxlIG9mIGhhcmR3YXJlIGNoZWNrc3VtIG9mZmxvYWQgKi8KKwlpZiAoZGItPnR5cGUgPT0gVFlQRV9ETTkwMDBBIHx8IGRiLT50eXBlID09IFRZUEVfRE05MDAwQikgeworCQlkYi0+Y2FuX2NzdW0gPSAxOworCQlkYi0+cnhfY3N1bSA9IDE7CisJCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKKwl9CisKIAkvKiBmcm9tIHRoaXMgcG9pbnQgd2UgYXNzdW1lIHRoYXQgd2UgaGF2ZSBmb3VuZCBhIERNOTAwMCAqLwogCiAJLyogZHJpdmVyIHN5c3RlbSBmdW5jdGlvbiAqLwpAQCAtMTQxMCw5ICsxNDgwLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLWRtOTAwMF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK2RtOTAwMF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCWJvYXJkX2luZm9fdCAqZGI7CiAKIAlpZiAobmRldikgewpAQCAtMTQyOCw5ICsxNDk5LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLWRtOTAwMF9kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK2RtOTAwMF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJYm9hcmRfaW5mb190ICpkYiA9IG5ldGRldl9wcml2KG5kZXYpOwogCiAJaWYgKG5kZXYpIHsKQEAgLTE0NDcsNiArMTUxOSwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZG05MDAwX2Rydl9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBkbTkwMDBfZHJ2X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBkbTkwMDBfZHJ2X3Jlc3VtZSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZleGl0CiBkbTkwMDBfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpAQCAtMTQ2NiwxMSArMTU0MywxMCBAQAogCS5kcml2ZXIJPSB7CiAJCS5uYW1lICAgID0gImRtOTAwMCIsCiAJCS5vd25lcgkgPSBUSElTX01PRFVMRSwKKwkJLnBtCSA9ICZkbTkwMDBfZHJ2X3BtX29wcywKIAl9LAogCS5wcm9iZSAgID0gZG05MDAwX3Byb2JlLAogCS5yZW1vdmUgID0gX19kZXZleGl0X3AoZG05MDAwX2Rydl9yZW1vdmUpLAotCS5zdXNwZW5kID0gZG05MDAwX2Rydl9zdXNwZW5kLAotCS5yZXN1bWUgID0gZG05MDAwX2Rydl9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmggYi9kcml2ZXJzL25ldC9kbTkwMDAuaAppbmRleCBiYTI1Y2Y1Li44MDgxN2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuaAorKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuaApAQCAtNDUsNiArNDUsMTAgQEAKICNkZWZpbmUgRE05MDAwX0NISVBSICAgICAgICAgICAweDJDCiAjZGVmaW5lIERNOTAwMF9TTUNSICAgICAgICAgICAgMHgyRgogCisjZGVmaW5lIERNOTAwMF9FVFhDU1IgICAgICAgICAgMHgzMAorI2RlZmluZSBETTkwMDBfVENDUgkgICAgICAgMHgzMQorI2RlZmluZSBETTkwMDBfUkNTUgkgICAgICAgMHgzMgorCiAjZGVmaW5lIENISVBSX0RNOTAwMEEJICAgICAgIDB4MTkKICNkZWZpbmUgQ0hJUFJfRE05MDAwQgkgICAgICAgMHgxQgogCkBAIC0xMzEsNyArMTM1LDIxIEBACiAKICNkZWZpbmUgR1BDUl9HRVBfQ05UTCAgICAgICAoMTw8MCkKIAorI2RlZmluZSBUQ0NSX0lQCQkgICAgKDE8PDApCisjZGVmaW5lIFRDQ1JfVENQCSAgICAoMTw8MSkKKyNkZWZpbmUgVENDUl9VRFAJICAgICgxPDwyKQorCisjZGVmaW5lIFJDU1JfVURQX0JBRAkgICAgKDE8PDcpCisjZGVmaW5lIFJDU1JfVENQX0JBRAkgICAgKDE8PDYpCisjZGVmaW5lIFJDU1JfSVBfQkFECSAgICAoMTw8NSkKKyNkZWZpbmUgUkNTUl9VRFAJICAgICgxPDw0KQorI2RlZmluZSBSQ1NSX1RDUAkgICAgKDE8PDMpCisjZGVmaW5lIFJDU1JfSVAJCSAgICAoMTw8MikKKyNkZWZpbmUgUkNTUl9DU1VNCSAgICAoMTw8MSkKKyNkZWZpbmUgUkNTUl9ESVNDQVJECSAgICAoMTw8MCkKKwogI2RlZmluZSBETTkwMDBfUEtUX1JEWQkJMHgwMQkvKiBQYWNrZXQgcmVhZHkgdG8gcmVjZWl2ZSAqLworI2RlZmluZSBETTkwMDBfUEtUX0VSUgkJMHgwMgogI2RlZmluZSBETTkwMDBfUEtUX01BWAkJMTUzNgkvKiBSZWNlaXZlZCBwYWNrZXQgbWF4IHNpemUgKi8KIAogLyogRE05MDAwQSAvIERNOTAwMEIgZGVmaW5pdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RuZXQuYyBiL2RyaXZlcnMvbmV0L2RuZXQuYwppbmRleCAzM2ZhOWVlLi4yMzQ2ODUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvZG5ldC5jCkBAIC01NDEsNyArNTQxLDcgQEAKICNkZWZpbmUgZG5ldF9wcmludF9za2Ioc2tiKQlkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCi1zdGF0aWMgaW50IGRuZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGRuZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCiAJc3RydWN0IGRuZXQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTU5Niw3ICs1OTYsNyBAQAogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBkbmV0X3Jlc2V0X2h3KHN0cnVjdCBkbmV0ICpicCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2R1bW15LmMgYi9kcml2ZXJzL25ldC9kdW1teS5jCmluZGV4IDhlYmQ3ZDcuLjM3ZGNmZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2R1bW15LmMKKysrIGIvZHJpdmVycy9uZXQvZHVtbXkuYwpAQCAtMzksOCArMzksNiBAQAogCiBzdGF0aWMgaW50IG51bWR1bW1pZXMgPSAxOwogCi1zdGF0aWMgaW50IGR1bW15X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KIHN0YXRpYyBpbnQgZHVtbXlfc2V0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gcDsKQEAgLTU3LDYgKzU1LDE2IEBACiB7CiB9CiAKKworc3RhdGljIG5ldGRldl90eF90IGR1bW15X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHVtbXlfbmV0ZGV2X29wcyA9IHsKIAkubmRvX3N0YXJ0X3htaXQJCT0gZHVtbXlfeG1pdCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKQEAgLTc4LDE2ICs4Niw2IEBACiAJZGV2LT5mbGFncyAmPSB+SUZGX01VTFRJQ0FTVDsKIAlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKIH0KLQotc3RhdGljIGludCBkdW1teV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBkdW1teV92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pCiB7CiAJaWYgKHRiW0lGTEFfQUREUkVTU10pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAuYyBiL2RyaXZlcnMvbmV0L2UxMDAuYwppbmRleCAzYTY3MzVkLi42Nzk5NjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMC5jCkBAIC0xNjkwLDcgKzE2OTAsOCBAQAogCWNiLT51LnRjYi50YmQuc2l6ZSA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKIH0KIAotc3RhdGljIGludCBlMTAwX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBlMTAwX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBuaWMgKm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IGVycjsKQEAgLTE3MjAsNyArMTcyMSw3IEBACiAJfQogCiAJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBlMTAwX3R4X2NsZWFuKHN0cnVjdCBuaWMgKm5pYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCmluZGV4IGU5YTQxNmYuLjFhNGY4OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaApAQCAtMTExLDYgKzExMSw5IEBACiAjZGVmaW5lIEUxMDAwX01JTl9SWEQgICAgICAgICAgICAgICAgICAgICAgIDgwCiAjZGVmaW5lIEUxMDAwX01BWF84MjU0NF9SWEQgICAgICAgICAgICAgICA0MDk2CiAKKyNkZWZpbmUgRTEwMDBfTUlOX0lUUl9VU0VDUwkJMTAgLyogMTAwMDAwIGlycS9zZWMgKi8KKyNkZWZpbmUgRTEwMDBfTUFYX0lUUl9VU0VDUwkJMTAwMDAgLyogMTAwICAgIGlycS9zZWMgKi8KKwogLyogdGhpcyBpcyB0aGUgc2l6ZSBwYXN0IHdoaWNoIGhhcmR3YXJlIHdpbGwgZHJvcCBwYWNrZXRzIHdoZW4gc2V0dGluZyBMUEU9MCAqLwogI2RlZmluZSBNQVhJTVVNX0VUSEVSTkVUX1ZMQU5fU0laRSAxNTIyCiAKQEAgLTEzNyw3ICsxNDAsNyBAQAogI2RlZmluZSBFMTAwMF9GQ19ISUdIX0RJRkYgMHgxNjM4ICAvKiBIaWdoOiA1Njg4IGJ5dGVzIGJlbG93IFJ4IEZJRk8gc2l6ZSAqLwogI2RlZmluZSBFMTAwMF9GQ19MT1dfRElGRiAweDE2NDAgICAvKiBMb3c6ICA1Njk2IGJ5dGVzIGJlbG93IFJ4IEZJRk8gc2l6ZSAqLwogCi0jZGVmaW5lIEUxMDAwX0ZDX1BBVVNFX1RJTUUgMHgwNjgwIC8qIDg1OCB1c2VjICovCisjZGVmaW5lIEUxMDAwX0ZDX1BBVVNFX1RJTUUgMHhGRkZGIC8qIHBhdXNlIGZvciB0aGUgbWF4IG9yIHVudGlsIHNlbmQgeG9uICovCiAKIC8qIEhvdyBtYW55IFR4IERlc2NyaXB0b3JzIGRvIHdlIG5lZWQgdG8gY2FsbCBuZXRpZl93YWtlX3F1ZXVlID8gKi8KICNkZWZpbmUgRTEwMDBfVFhfUVVFVUVfV0FLRQkxNgpAQCAtMTYxLDYgKzE2NCw3IEBACiBzdHJ1Y3QgZTEwMDBfYnVmZmVyIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWRtYV9hZGRyX3QgZG1hOworCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgdGltZV9zdGFtcDsKIAl1MTYgbGVuZ3RoOwogCXUxNiBuZXh0X3RvX3dhdGNoOwpAQCAtMjAyLDYgKzIwNiw3IEBACiAJdW5zaWduZWQgaW50IG5leHRfdG9fY2xlYW47CiAJLyogYXJyYXkgb2YgYnVmZmVyIGluZm9ybWF0aW9uIHN0cnVjdHMgKi8KIAlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiX3RvcDsKIAogCS8qIGNwdSBmb3IgcnggcXVldWUgKi8KIAlpbnQgY3B1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCmluZGV4IGM4NTRjOTYuLjI3Zjk5NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKQEAgLTE5MDQsNiArMTkwNCw1MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGUxMDAwX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQoreworCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA8IGUxMDAwXzgyNTQ1KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgPD0gMykKKwkJZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID0gYWRhcHRlci0+aXRyX3NldHRpbmc7CisJZWxzZQorCQllYy0+cnhfY29hbGVzY2VfdXNlY3MgPSAxMDAwMDAwIC8gYWRhcHRlci0+aXRyX3NldHRpbmc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlMTAwMF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYykKK3sKKwlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChody0+bWFjX3R5cGUgPCBlMTAwMF84MjU0NSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPiBFMTAwMF9NQVhfSVRSX1VTRUNTKSB8fAorCSAgICAoKGVjLT5yeF9jb2FsZXNjZV91c2VjcyA+IDMpICYmCisJICAgICAoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzIDwgRTEwMDBfTUlOX0lUUl9VU0VDUykpIHx8CisJICAgIChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPT0gMikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGVjLT5yeF9jb2FsZXNjZV91c2VjcyA8PSAzKSB7CisJCWFkYXB0ZXItPml0ciA9IDIwMDAwOworCQlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IGVjLT5yeF9jb2FsZXNjZV91c2VjczsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5pdHIgPSAoMTAwMDAwMCAvIGVjLT5yeF9jb2FsZXNjZV91c2Vjcyk7CisJCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gYWRhcHRlci0+aXRyICYgfjM7CisJfQorCisJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICE9IDApCisJCWV3MzIoSVRSLCAxMDAwMDAwMDAwIC8gKGFkYXB0ZXItPml0ciAqIDI1NikpOworCWVsc2UKKwkJZXczMihJVFIsIDApOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZTEwMDBfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTE5NzgsNyArMjAyNSw5IEBACiAJLmdldF9zdHJpbmdzICAgICAgICAgICAgPSBlMTAwMF9nZXRfc3RyaW5ncywKIAkucGh5c19pZCAgICAgICAgICAgICAgICA9IGUxMDAwX3BoeXNfaWQsCiAJLmdldF9ldGh0b29sX3N0YXRzICAgICAgPSBlMTAwMF9nZXRfZXRodG9vbF9zdGF0cywKLQkuZ2V0X3NzZXRfY291bnQJCT0gZTEwMDBfZ2V0X3NzZXRfY291bnQsCisJLmdldF9zc2V0X2NvdW50ICAgICAgICAgPSBlMTAwMF9nZXRfc3NldF9jb3VudCwKKwkuZ2V0X2NvYWxlc2NlICAgICAgICAgICA9IGUxMDAwX2dldF9jb2FsZXNjZSwKKwkuc2V0X2NvYWxlc2NlICAgICAgICAgICA9IGUxMDAwX3NldF9jb2FsZXNjZSwKIH07CiAKIHZvaWQgZTEwMDBfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYwppbmRleCBlMWEzZmMxLi5jZGE2YjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKQEAgLTE5NTUsNyArMTk1NSw3IEBACiAgICAgczMyIHJldF92YWw7CiAgICAgdTE2IGk7CiAgICAgdTE2IHBoeV9kYXRhOwotICAgIHUxNiByZWdfZGF0YTsKKyAgICB1MTYgcmVnX2RhdGEgPSAwOwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9zZXR1cF9jb3BwZXJfbGluayIpOwogCkBAIC01NzU5LDUyICs1NzU5LDYgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU2V0cyB0aGUgYml0IGluIHRoZSBtdWx0aWNhc3QgdGFibGUgY29ycmVzcG9uZGluZyB0byB0aGUgaGFzaCB2YWx1ZS4KLSAqCi0gKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQotICogaGFzaF92YWx1ZSAtIE11bHRpY2FzdCBhZGRyZXNzIGhhc2ggdmFsdWUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgZTEwMDBfbXRhX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaGFzaF92YWx1ZSkKLXsKLSAgICB1MzIgaGFzaF9iaXQsIGhhc2hfcmVnOwotICAgIHUzMiBtdGE7Ci0gICAgdTMyIHRlbXA7Ci0KLSAgICAvKiBUaGUgTVRBIGlzIGEgcmVnaXN0ZXIgYXJyYXkgb2YgMTI4IDMyLWJpdCByZWdpc3RlcnMuCi0gICAgICogSXQgaXMgdHJlYXRlZCBsaWtlIGFuIGFycmF5IG9mIDQwOTYgYml0cy4gIFdlIHdhbnQgdG8gc2V0Ci0gICAgICogYml0IEJpdEFycmF5W2hhc2hfdmFsdWVdLiBTbyB3ZSBmaWd1cmUgb3V0IHdoYXQgcmVnaXN0ZXIKLSAgICAgKiB0aGUgYml0IGlzIGluLCByZWFkIGl0LCBPUiBpbiB0aGUgbmV3IGJpdCwgdGhlbiB3cml0ZQotICAgICAqIGJhY2sgdGhlIG5ldyB2YWx1ZS4gIFRoZSByZWdpc3RlciBpcyBkZXRlcm1pbmVkIGJ5IHRoZQotICAgICAqIHVwcGVyIDcgYml0cyBvZiB0aGUgaGFzaCB2YWx1ZSBhbmQgdGhlIGJpdCB3aXRoaW4gdGhhdAotICAgICAqIHJlZ2lzdGVyIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlciA1IGJpdHMgb2YgdGhlIHZhbHVlLgotICAgICAqLwotICAgIGhhc2hfcmVnID0gKGhhc2hfdmFsdWUgPj4gNSkgJiAweDdGOwotICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikKLSAgICAgICAgaGFzaF9yZWcgJj0gMHgxRjsKLQotICAgIGhhc2hfYml0ID0gaGFzaF92YWx1ZSAmIDB4MUY7Ci0KLSAgICBtdGEgPSBFMTAwMF9SRUFEX1JFR19BUlJBWShodywgTVRBLCBoYXNoX3JlZyk7Ci0KLSAgICBtdGEgfD0gKDEgPDwgaGFzaF9iaXQpOwotCi0gICAgLyogSWYgd2UgYXJlIG9uIGFuIDgyNTQ0IGFuZCB3ZSBhcmUgdHJ5aW5nIHRvIHdyaXRlIGFuIG9kZCBvZmZzZXQKLSAgICAgKiBpbiB0aGUgTVRBLCBzYXZlIG9mZiB0aGUgcHJldmlvdXMgZW50cnkgYmVmb3JlIHdyaXRpbmcgYW5kCi0gICAgICogcmVzdG9yZSB0aGUgb2xkIHZhbHVlIGFmdGVyIHdyaXRpbmcuCi0gICAgICovCi0gICAgaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDQpICYmICgoaGFzaF9yZWcgJiAweDEpID09IDEpKSB7Ci0gICAgICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFR19BUlJBWShodywgTVRBLCAoaGFzaF9yZWcgLSAxKSk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgTVRBLCBoYXNoX3JlZywgbXRhKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBNVEEsIChoYXNoX3JlZyAtIDEpLCB0ZW1wKTsKLSAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goKTsKLSAgICB9IGVsc2UgewotICAgICAgICBFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIE1UQSwgaGFzaF9yZWcsIG10YSk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7Ci0gICAgfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBQdXRzIGFuIGV0aGVybmV0IGFkZHJlc3MgaW50byBhIHJlY2VpdmUgYWRkcmVzcyByZWdpc3Rlci4KICAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKaW5kZXggOTlmY2UyYy4uYTg4NjZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCkBAIC01MjMsMTEgKzUyMyw4IEBACiAKIC8qIFRoZSBzaXplcyAoaW4gYnl0ZXMpIG9mIGEgZXRoZXJuZXQgcGFja2V0ICovCiAjZGVmaW5lIEVORVRfSEVBREVSX1NJWkUgICAgICAgICAgICAgMTQKLSNkZWZpbmUgTUFYSU1VTV9FVEhFUk5FVF9GUkFNRV9TSVpFICAxNTE4IC8qIFdpdGggRkNTICovCiAjZGVmaW5lIE1JTklNVU1fRVRIRVJORVRfRlJBTUVfU0laRSAgNjQgICAvKiBXaXRoIEZDUyAqLwogI2RlZmluZSBFVEhFUk5FVF9GQ1NfU0laRSAgICAgICAgICAgIDQKLSNkZWZpbmUgTUFYSU1VTV9FVEhFUk5FVF9QQUNLRVRfU0laRSBcCi0gICAgKE1BWElNVU1fRVRIRVJORVRfRlJBTUVfU0laRSAtIEVUSEVSTkVUX0ZDU19TSVpFKQogI2RlZmluZSBNSU5JTVVNX0VUSEVSTkVUX1BBQ0tFVF9TSVpFIFwKICAgICAoTUlOSU1VTV9FVEhFUk5FVF9GUkFNRV9TSVpFIC0gRVRIRVJORVRfRkNTX1NJWkUpCiAjZGVmaW5lIENSQ19MRU5HVEggICAgICAgICAgICAgICAgICAgRVRIRVJORVRfRkNTX1NJWkUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwppbmRleCA1YjhjYmRiLi5jNjZkZDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCkBAIC0xMjUsNyArMTI1LDggQEAKIHN0YXRpYyB2b2lkIGUxMDAwX3VwZGF0ZV9waHlfaW5mbyh1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIHZvaWQgZTEwMDBfd2F0Y2hkb2codW5zaWduZWQgbG9uZyBkYXRhKTsKIHN0YXRpYyB2b2lkIGUxMDAwXzgyNTQ3X3R4X2ZpZm9fc3RhbGwodW5zaWduZWQgbG9uZyBkYXRhKTsKLXN0YXRpYyBpbnQgZTEwMDBfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBlMTAwMF94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICogZTEwMDBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogc3RhdGljIGludCBlMTAwMF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KTsKIHN0YXRpYyBpbnQgZTEwMDBfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKTsKQEAgLTEzNyw5ICsxMzgsMTUgQEAKIHN0YXRpYyBib29sIGUxMDAwX2NsZWFuX3J4X2lycShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKIAkJCSAgICAgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pOworc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fanVtYm9fcnhfaXJxKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcsCisJCQkJICAgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pOwogc3RhdGljIHZvaWQgZTEwMDBfYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcsCisJCQkJICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcsCiAJCQkJICAgaW50IGNsZWFuZWRfY291bnQpOworc3RhdGljIHZvaWQgZTEwMDBfYWxsb2NfanVtYm9fcnhfYnVmZmVycyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLAorCQkJCQkgaW50IGNsZWFuZWRfY291bnQpOwogc3RhdGljIGludCBlMTAwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7CiBzdGF0aWMgaW50IGUxMDAwX21paV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwKIAkJCSAgIGludCBjbWQpOwpAQCAtNjM1LDggKzY0Miw4IEBACiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgcGJhID0gMCwgdHhfc3BhY2UsIG1pbl90eF9zcGFjZSwgbWluX3J4X3NwYWNlOwotCXUxNiBmY19oaWdoX3dhdGVyX21hcmsgPSBFMTAwMF9GQ19ISUdIX0RJRkY7CiAJYm9vbCBsZWdhY3lfcGJhX2FkanVzdCA9IGZhbHNlOworCXUxNiBod207CiAKIAkvKiBSZXBhcnRpdGlvbiBQYmEgZm9yIGdyZWF0ZXIgdGhhbiA5ayBtdHUKIAkgKiBUbyB0YWtlIGVmZmVjdCBDVFJMLlJTVCBpcyByZXF1aXJlZC4KQEAgLTY4MCw3ICs2ODcsNyBAQAogCX0KIAogCWlmIChsZWdhY3lfcGJhX2FkanVzdCkgewotCQlpZiAoYWRhcHRlci0+bmV0ZGV2LT5tdHUgPiBFMTAwMF9SWEJVRkZFUl84MTkyKQorCQlpZiAoaHctPm1heF9mcmFtZV9zaXplID4gRTEwMDBfUlhCVUZGRVJfODE5MikKIAkJCXBiYSAtPSA4OyAvKiBhbGxvY2F0ZSBtb3JlIEZJRk8gZm9yIFR4ICovCiAKIAkJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykgewpAQCAtNjkwLDE0ICs2OTcsMTQgQEAKIAkJCQkoRTEwMDBfUEJBXzQwSyAtIHBiYSkgPDwgRTEwMDBfUEJBX0JZVEVTX1NISUZUOwogCQkJYXRvbWljX3NldCgmYWRhcHRlci0+dHhfZmlmb19zdGFsbCwgMCk7CiAJCX0KLQl9IGVsc2UgaWYgKGh3LT5tYXhfZnJhbWVfc2l6ZSA+IE1BWElNVU1fRVRIRVJORVRfRlJBTUVfU0laRSkgeworCX0gZWxzZSBpZiAoaHctPm1heF9mcmFtZV9zaXplID4gIEVUSF9GUkFNRV9MRU4gKyBFVEhfRkNTX0xFTikgewogCQkvKiBhZGp1c3QgUEJBIGZvciBqdW1ibyBmcmFtZXMgKi8KIAkJZXczMihQQkEsIHBiYSk7CiAKIAkJLyogVG8gbWFpbnRhaW4gd2lyZSBzcGVlZCB0cmFuc21pdHMsIHRoZSBUeCBGSUZPIHNob3VsZCBiZQotCQkgKiBsYXJnZSBlbm91Z2ggdG8gYWNjb21vZGF0ZSB0d28gZnVsbCB0cmFuc21pdCBwYWNrZXRzLAorCQkgKiBsYXJnZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdHdvIGZ1bGwgdHJhbnNtaXQgcGFja2V0cywKIAkJICogcm91bmRlZCB1cCB0byB0aGUgbmV4dCAxS0IgYW5kIGV4cHJlc3NlZCBpbiBLQi4gIExpa2V3aXNlLAotCQkgKiB0aGUgUnggRklGTyBzaG91bGQgYmUgbGFyZ2UgZW5vdWdoIHRvIGFjY29tb2RhdGUgYXQgbGVhc3QKKwkJICogdGhlIFJ4IEZJRk8gc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBhY2NvbW1vZGF0ZSBhdCBsZWFzdAogCQkgKiBvbmUgZnVsbCByZWNlaXZlIHBhY2tldCBhbmQgaXMgc2ltaWxhcmx5IHJvdW5kZWQgdXAgYW5kCiAJCSAqIGV4cHJlc3NlZCBpbiBLQi4gKi8KIAkJcGJhID0gZXIzMihQQkEpOwpAQCAtNzA1LDEzICs3MTIsMTcgQEAKIAkJdHhfc3BhY2UgPSBwYmEgPj4gMTY7CiAJCS8qIGxvd2VyIDE2IGJpdHMgaGFzIFJ4IHBhY2tldCBidWZmZXIgYWxsb2NhdGlvbiBzaXplIGluIEtCICovCiAJCXBiYSAmPSAweGZmZmY7Ci0JCS8qIGRvbid0IGluY2x1ZGUgZXRoZXJuZXQgRkNTIGJlY2F1c2UgaGFyZHdhcmUgYXBwZW5kcy9zdHJpcHMgKi8KLQkJbWluX3J4X3NwYWNlID0gYWRhcHRlci0+bmV0ZGV2LT5tdHUgKyBFTkVUX0hFQURFUl9TSVpFICsKLQkJICAgICAgICAgICAgICAgVkxBTl9UQUdfU0laRTsKLQkJbWluX3R4X3NwYWNlID0gbWluX3J4X3NwYWNlOwotCQltaW5fdHhfc3BhY2UgKj0gMjsKKwkJLyoKKwkJICogdGhlIHR4IGZpZm8gYWxzbyBzdG9yZXMgMTYgYnl0ZXMgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHR4CisJCSAqIGJ1dCBkb24ndCBpbmNsdWRlIGV0aGVybmV0IEZDUyBiZWNhdXNlIGhhcmR3YXJlIGFwcGVuZHMgaXQKKwkJICovCisJCW1pbl90eF9zcGFjZSA9IChody0+bWF4X2ZyYW1lX3NpemUgKworCQkgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBlMTAwMF90eF9kZXNjKSAtCisJCSAgICAgICAgICAgICAgICBFVEhfRkNTX0xFTikgKiAyOwogCQltaW5fdHhfc3BhY2UgPSBBTElHTihtaW5fdHhfc3BhY2UsIDEwMjQpOwogCQltaW5fdHhfc3BhY2UgPj49IDEwOworCQkvKiBzb2Z0d2FyZSBzdHJpcHMgcmVjZWl2ZSBDUkMsIHNvIGxlYXZlIHJvb20gZm9yIGl0ICovCisJCW1pbl9yeF9zcGFjZSA9IGh3LT5tYXhfZnJhbWVfc2l6ZTsKIAkJbWluX3J4X3NwYWNlID0gQUxJR04obWluX3J4X3NwYWNlLCAxMDI0KTsKIAkJbWluX3J4X3NwYWNlID4+PSAxMDsKIApAQCAtNzQ4LDIzICs3NTksMjIgQEAKIAogCWV3MzIoUEJBLCBwYmEpOwogCi0JLyogZmxvdyBjb250cm9sIHNldHRpbmdzICovCi0JLyogU2V0IHRoZSBGQyBoaWdoIHdhdGVyIG1hcmsgdG8gOTAlIG9mIHRoZSBGSUZPIHNpemUuCi0JICogUmVxdWlyZWQgdG8gY2xlYXIgbGFzdCAzIExTQiAqLwotCWZjX2hpZ2hfd2F0ZXJfbWFyayA9ICgocGJhICogOTIxNikvMTApICYgMHhGRkY4OwotCS8qIFdlIGNhbid0IHVzZSA5MCUgb24gc21hbGwgRklGT3MgYmVjYXVzZSB0aGUgcmVtYWluZGVyCi0JICogd291bGQgYmUgbGVzcyB0aGFuIDEgZnVsbCBmcmFtZS4gIEluIHRoaXMgY2FzZSwgd2Ugc2l6ZQotCSAqIGl0IHRvIGFsbG93IGF0IGxlYXN0IGEgZnVsbCBmcmFtZSBhYm92ZSB0aGUgaGlnaCB3YXRlcgotCSAqICBtYXJrLiAqLwotCWlmIChwYmEgPCBFMTAwMF9QQkFfMTZLKQotCQlmY19oaWdoX3dhdGVyX21hcmsgPSAocGJhICogMTAyNCkgLSAxNjAwOworCS8qCisJICogZmxvdyBjb250cm9sIHNldHRpbmdzOgorCSAqIFRoZSBoaWdoIHdhdGVyIG1hcmsgbXVzdCBiZSBsb3cgZW5vdWdoIHRvIGZpdCBvbmUgZnVsbCBmcmFtZQorCSAqIChvciB0aGUgc2l6ZSB1c2VkIGZvciBlYXJseSByZWNlaXZlKSBhYm92ZSBpdCBpbiB0aGUgUnggRklGTy4KKwkgKiBTZXQgaXQgdG8gdGhlIGxvd2VyIG9mOgorCSAqIC0gOTAlIG9mIHRoZSBSeCBGSUZPIHNpemUsIGFuZAorCSAqIC0gdGhlIGZ1bGwgUnggRklGTyBzaXplIG1pbnVzIHRoZSBlYXJseSByZWNlaXZlIHNpemUgKGZvciBwYXJ0cworCSAqICAgd2l0aCBFUlQgc3VwcG9ydCBhc3N1bWluZyBFUlQgc2V0IHRvIEUxMDAwX0VSVF8yMDQ4KSwgb3IKKwkgKiAtIHRoZSBmdWxsIFJ4IEZJRk8gc2l6ZSBtaW51cyBvbmUgZnVsbCBmcmFtZQorCSAqLworCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAorCQkgICgocGJhIDw8IDEwKSAtIGh3LT5tYXhfZnJhbWVfc2l6ZSkpOwogCi0JaHctPmZjX2hpZ2hfd2F0ZXIgPSBmY19oaWdoX3dhdGVyX21hcms7Ci0JaHctPmZjX2xvd193YXRlciA9IGZjX2hpZ2hfd2F0ZXJfbWFyayAtIDg7Ci0JaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MDAwM2VzMmxhbikKLQkJaHctPmZjX3BhdXNlX3RpbWUgPSAweEZGRkY7Ci0JZWxzZQotCQlody0+ZmNfcGF1c2VfdGltZSA9IEUxMDAwX0ZDX1BBVVNFX1RJTUU7CisJaHctPmZjX2hpZ2hfd2F0ZXIgPSBod20gJiAweEZGRjg7CS8qIDgtYnl0ZSBncmFudWxhcml0eSAqLworCWh3LT5mY19sb3dfd2F0ZXIgPSBody0+ZmNfaGlnaF93YXRlciAtIDg7CisJaHctPmZjX3BhdXNlX3RpbWUgPSBFMTAwMF9GQ19QQVVTRV9USU1FOwogCWh3LT5mY19zZW5kX3hvbiA9IDE7CiAJaHctPmZjID0gaHctPm9yaWdpbmFsX2ZjOwogCkBAIC0xODYyLDYgKzE4NzIsNyBAQAogCiAJcnhkci0+bmV4dF90b19jbGVhbiA9IDA7CiAJcnhkci0+bmV4dF90b191c2UgPSAwOworCXJ4ZHItPnJ4X3NrYl90b3AgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTY4LDEwICsxOTc5LDE3IEBACiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgcmRsZW4sIHJjdGwsIHJ4Y3N1bSwgY3RybF9leHQ7CiAKLQlyZGxlbiA9IGFkYXB0ZXItPnJ4X3JpbmdbMF0uY291bnQgKgotCQlzaXplb2Yoc3RydWN0IGUxMDAwX3J4X2Rlc2MpOwotCWFkYXB0ZXItPmNsZWFuX3J4ID0gZTEwMDBfY2xlYW5fcnhfaXJxOwotCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZiA9IGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnM7CisJaWYgKGFkYXB0ZXItPm5ldGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSB7CisJCXJkbGVuID0gYWRhcHRlci0+cnhfcmluZ1swXS5jb3VudCAqCisJCSAgICAgICAgc2l6ZW9mKHN0cnVjdCBlMTAwMF9yeF9kZXNjKTsKKwkJYWRhcHRlci0+Y2xlYW5fcnggPSBlMTAwMF9jbGVhbl9qdW1ib19yeF9pcnE7CisJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZiA9IGUxMDAwX2FsbG9jX2p1bWJvX3J4X2J1ZmZlcnM7CisJfSBlbHNlIHsKKwkJcmRsZW4gPSBhZGFwdGVyLT5yeF9yaW5nWzBdLmNvdW50ICoKKwkJICAgICAgICBzaXplb2Yoc3RydWN0IGUxMDAwX3J4X2Rlc2MpOworCQlhZGFwdGVyLT5jbGVhbl9yeCA9IGUxMDAwX2NsZWFuX3J4X2lycTsKKwkJYWRhcHRlci0+YWxsb2NfcnhfYnVmID0gZTEwMDBfYWxsb2NfcnhfYnVmZmVyczsKKwl9CiAKIAkvKiBkaXNhYmxlIHJlY2VpdmVzIHdoaWxlIHNldHRpbmcgdXAgdGhlIGRlc2NyaXB0b3JzICovCiAJcmN0bCA9IGVyMzIoUkNUTCk7CkBAIC0yMTg1LDI2ICsyMjAzLDM5IEBACiAJLyogRnJlZSBhbGwgdGhlIFJ4IHJpbmcgc2tfYnVmZnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgcnhfcmluZy0+Y291bnQ7IGkrKykgewogCQlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKLQkJaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwKLQkJCQkJIGJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJCSBidWZmZXJfaW5mby0+bGVuZ3RoLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJaWYgKGJ1ZmZlcl9pbmZvLT5kbWEgJiYKKwkJICAgIGFkYXB0ZXItPmNsZWFuX3J4ID09IGUxMDAwX2NsZWFuX3J4X2lycSkgeworCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLAorCQkJICAgICAgICAgICAgICAgICBidWZmZXJfaW5mby0+bGVuZ3RoLAorCQkJICAgICAgICAgICAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQl9IGVsc2UgaWYgKGJ1ZmZlcl9pbmZvLT5kbWEgJiYKKwkJICAgICAgICAgICBhZGFwdGVyLT5jbGVhbl9yeCA9PSBlMTAwMF9jbGVhbl9qdW1ib19yeF9pcnEpIHsKKwkJCXBjaV91bm1hcF9wYWdlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCisJCQkgICAgICAgICAgICAgICBidWZmZXJfaW5mby0+bGVuZ3RoLAorCQkJICAgICAgICAgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJfQogCiAJCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwotCisJCWlmIChidWZmZXJfaW5mby0+cGFnZSkgeworCQkJcHV0X3BhZ2UoYnVmZmVyX2luZm8tPnBhZ2UpOworCQkJYnVmZmVyX2luZm8tPnBhZ2UgPSBOVUxMOworCQl9CiAJCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CiAJCQlkZXZfa2ZyZWVfc2tiKGJ1ZmZlcl9pbmZvLT5za2IpOwogCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAJCX0KIAl9CiAKKwkvKiB0aGVyZSBhbHNvIG1heSBiZSBzb21lIGNhY2hlZCBkYXRhIGZyb20gYSBjaGFpbmVkIHJlY2VpdmUgKi8KKwlpZiAocnhfcmluZy0+cnhfc2tiX3RvcCkgeworCQlkZXZfa2ZyZWVfc2tiKHJ4X3JpbmctPnJ4X3NrYl90b3ApOworCQlyeF9yaW5nLT5yeF9za2JfdG9wID0gTlVMTDsKKwl9CisKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBlMTAwMF9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7CiAJbWVtc2V0KHJ4X3JpbmctPmJ1ZmZlcl9pbmZvLCAwLCBzaXplKTsKIAogCS8qIFplcm8gb3V0IHRoZSBkZXNjcmlwdG9yIHJpbmcgKi8KLQogCW1lbXNldChyeF9yaW5nLT5kZXNjLCAwLCByeF9yaW5nLT5zaXplKTsKIAogCXJ4X3JpbmctPm5leHRfdG9fY2xlYW4gPSAwOwpAQCAtMjM3MSw3ICsyNDAyLDkgQEAKIAkJCXJjdGwgJj0gfkUxMDAwX1JDVExfTVBFOwogCQl9CiAJCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSAhPSBlMTAwMF9pY2g4bGFuKQotCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1ZGRTsKKwkJCS8qIEVuYWJsZSBWTEFOIGZpbHRlciBpZiB0aGVyZSBpcyBhIFZMQU4gKi8KKwkJCWlmIChhZGFwdGVyLT52bGdycCkKKwkJCQlyY3RsIHw9IEUxMDAwX1JDVExfVkZFOwogCX0KIAogCWlmIChuZXRkZXYtPnVjLmNvdW50ID4gcmFyX2VudHJpZXMgLSAxKSB7CkBAIC0zMjE5LDcgKzMyNTIsOCBAQAogfQogCiAjZGVmaW5lIFRYRF9VU0VfQ09VTlQoUywgWCkgKCgoUykgPj4gKFgpKSArIDEgKQotc3RhdGljIGludCBlMTAwMF94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZTEwMDBfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwpAQCAtMzQ1MCw3ICszNDg0LDcgQEAKIAlzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogCWNhc2UgZTEwMDBfdW5kZWZpbmVkIC4uLiBlMTAwMF84MjU0Ml9yZXYyXzE6CiAJY2FzZSBlMTAwMF9pY2g4bGFuOgotCQlpZiAobWF4X2ZyYW1lID4gTUFYSU1VTV9FVEhFUk5FVF9GUkFNRV9TSVpFKSB7CisJCWlmIChtYXhfZnJhbWUgPiAoRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOKSkgewogCQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiSnVtYm8gRnJhbWVzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0zNDYzLDcgKzM0OTcsNyBAQAogCQkgICAgICAgICAgICAgICAgICAmZWVwcm9tX2RhdGEpOwogCQlpZiAoKGh3LT5kZXZpY2VfaWQgIT0gRTEwMDBfREVWX0lEXzgyNTczTCkgfHwKIAkJICAgIChlZXByb21fZGF0YSAmIEVFUFJPTV9XT1JEMUFfQVNQTV9NQVNLKSkgewotCQkJaWYgKG1heF9mcmFtZSA+IE1BWElNVU1fRVRIRVJORVRfRlJBTUVfU0laRSkgeworCQkJaWYgKG1heF9mcmFtZSA+IChFVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU4pKSB7CiAJCQkJRFBSSU5USyhQUk9CRSwgRVJSLAogCQkJICAgICAgICAgICAgCSJKdW1ibyBGcmFtZXMgbm90IHN1cHBvcnRlZC5cbiIpOwogCQkJCXJldHVybiAtRUlOVkFMOwpAQCAtMzQ4OSw4ICszNTIzLDEwIEBACiAKIAkvKiBOT1RFOiBuZXRkZXZfYWxsb2Nfc2tiIHJlc2VydmVzIDE2IGJ5dGVzLCBhbmQgdHlwaWNhbGx5IE5FVF9JUF9BTElHTgogCSAqIG1lYW5zIHdlIHJlc2VydmUgMiBtb3JlLCB0aGlzIHB1c2hlcyB1cyB0byBhbGxvY2F0ZSBmcm9tIHRoZSBuZXh0Ci0JICogbGFyZ2VyIHNsYWIgc2l6ZQotCSAqIGkuZS4gUlhCVUZGRVJfMjA0OCAtLT4gc2l6ZS00MDk2IHNsYWIgKi8KKwkgKiBsYXJnZXIgc2xhYiBzaXplLgorCSAqIGkuZS4gUlhCVUZGRVJfMjA0OCAtLT4gc2l6ZS00MDk2IHNsYWIKKwkgKiAgaG93ZXZlciB3aXRoIHRoZSBuZXcgKl9qdW1ib19yeCogcm91dGluZXMsIGp1bWJvIHJlY2VpdmVzIHdpbGwgdXNlCisJICogIGZyYWdtZW50ZWQgc2ticyAqLwogCiAJaWYgKG1heF9mcmFtZSA8PSBFMTAwMF9SWEJVRkZFUl8yNTYpCiAJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFMTAwMF9SWEJVRkZFUl8yNTY7CkBAIC0zNTAwLDE2ICszNTM2LDE2IEBACiAJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFMTAwMF9SWEJVRkZFUl8xMDI0OwogCWVsc2UgaWYgKG1heF9mcmFtZSA8PSBFMTAwMF9SWEJVRkZFUl8yMDQ4KQogCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRTEwMDBfUlhCVUZGRVJfMjA0ODsKLQllbHNlIGlmIChtYXhfZnJhbWUgPD0gRTEwMDBfUlhCVUZGRVJfNDA5NikKLQkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzQwOTY7Ci0JZWxzZSBpZiAobWF4X2ZyYW1lIDw9IEUxMDAwX1JYQlVGRkVSXzgxOTIpCi0JCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFMTAwMF9SWEJVRkZFUl84MTkyOwotCWVsc2UgaWYgKG1heF9mcmFtZSA8PSBFMTAwMF9SWEJVRkZFUl8xNjM4NCkKKwllbHNlCisjaWYgKFBBR0VfU0laRSA+PSBFMTAwMF9SWEJVRkZFUl8xNjM4NCkKIAkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzE2Mzg0OworI2VsaWYgKFBBR0VfU0laRSA+PSBFMTAwMF9SWEJVRkZFUl80MDk2KQorCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gUEFHRV9TSVpFOworI2VuZGlmCiAKIAkvKiBhZGp1c3QgYWxsb2NhdGlvbiBpZiBMUEUgcHJvdGVjdHMgdXMsIGFuZCB3ZSBhcmVuJ3QgdXNpbmcgU0JQICovCiAJaWYgKCFody0+dGJpX2NvbXBhdGliaWxpdHlfb24gJiYKLQkgICAgKChtYXhfZnJhbWUgPT0gTUFYSU1VTV9FVEhFUk5FVF9GUkFNRV9TSVpFKSB8fAorCSAgICAoKG1heF9mcmFtZSA9PSAoRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOKSkgfHwKIAkgICAgIChtYXhfZnJhbWUgPT0gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkUpKSkKIAkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFOwogCkBAIC0zOTg3LDkgKzQwMjMsMjI3IEBACiB9CiAKIC8qKgorICogZTEwMDBfY29uc3VtZV9wYWdlIC0gaGVscGVyIGZ1bmN0aW9uCisgKiovCitzdGF0aWMgdm9pZCBlMTAwMF9jb25zdW1lX3BhZ2Uoc3RydWN0IGUxMDAwX2J1ZmZlciAqYmksIHN0cnVjdCBza19idWZmICpza2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGxlbmd0aCkKK3sKKwliaS0+cGFnZSA9IE5VTEw7CisJc2tiLT5sZW4gKz0gbGVuZ3RoOworCXNrYi0+ZGF0YV9sZW4gKz0gbGVuZ3RoOworCXNrYi0+dHJ1ZXNpemUgKz0gbGVuZ3RoOworfQorCisvKioKKyAqIGUxMDAwX3JlY2VpdmVfc2tiIC0gaGVscGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSByeCBpbmRpY2F0aW9ucworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAc3RhdHVzOiBkZXNjcmlwdG9yIHN0YXR1cyBmaWVsZCBhcyB3cml0dGVuIGJ5IGhhcmR3YXJlCisgKiBAdmxhbjogZGVzY3JpcHRvciB2bGFuIGZpZWxkIGFzIHdyaXR0ZW4gYnkgaGFyZHdhcmUgKG5vIGxlL2JlIGNvbnZlcnNpb24pCisgKiBAc2tiOiBwb2ludGVyIHRvIHNrX2J1ZmYgdG8gYmUgaW5kaWNhdGVkIHRvIHN0YWNrCisgKi8KK3N0YXRpYyB2b2lkIGUxMDAwX3JlY2VpdmVfc2tiKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1OCBzdGF0dXMsCisJCQkgICAgICBfX2xlMTYgdmxhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAodW5saWtlbHkoYWRhcHRlci0+dmxncnAgJiYgKHN0YXR1cyAmIEUxMDAwX1JYRF9TVEFUX1ZQKSkpIHsKKwkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxncnAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICBsZTE2X3RvX2NwdSh2bGFuKSAmCisJCSAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9SWERfU1BDX1ZMQU5fTUFTSyk7CisJfSBlbHNlIHsKKwkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwl9Cit9CisKKy8qKgorICogZTEwMDBfY2xlYW5fanVtYm9fcnhfaXJxIC0gU2VuZCByZWNlaXZlZCBkYXRhIHVwIHRoZSBuZXR3b3JrIHN0YWNrOyBsZWdhY3kKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICogQHJ4X3Jpbmc6IHJpbmcgdG8gY2xlYW4KKyAqIEB3b3JrX2RvbmU6IGFtb3VudCBvZiBuYXBpIHdvcmsgY29tcGxldGVkIHRoaXMgY2FsbAorICogQHdvcmtfdG9fZG86IG1heCBhbW91bnQgb2Ygd29yayBhbGxvd2VkIGZvciB0aGlzIGNhbGwgdG8gZG8KKyAqCisgKiB0aGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB3aGV0aGVyIGFjdHVhbCBjbGVhbmluZyB3YXMgZG9uZSwgdGhlcmUKKyAqIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGV2ZXJ5dGhpbmcgd2FzIGNsZWFuZWQKKyAqLworc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fanVtYm9fcnhfaXJxKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcsCisJCQkJICAgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlzdHJ1Y3QgZTEwMDBfcnhfZGVzYyAqcnhfZGVzYywgKm5leHRfcnhkOworCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvLCAqbmV4dF9idWZmZXI7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJdTMyIGxlbmd0aDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgY2xlYW5lZF9jb3VudCA9IDA7CisJYm9vbCBjbGVhbmVkID0gZmFsc2U7CisJdW5zaWduZWQgaW50IHRvdGFsX3J4X2J5dGVzPTAsIHRvdGFsX3J4X3BhY2tldHM9MDsKKworCWkgPSByeF9yaW5nLT5uZXh0X3RvX2NsZWFuOworCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDKCpyeF9yaW5nLCBpKTsKKwlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKKworCXdoaWxlIChyeF9kZXNjLT5zdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9ERCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQl1OCBzdGF0dXM7CisKKwkJaWYgKCp3b3JrX2RvbmUgPj0gd29ya190b19kbykKKwkJCWJyZWFrOworCQkoKndvcmtfZG9uZSkrKzsKKworCQlzdGF0dXMgPSByeF9kZXNjLT5zdGF0dXM7CisJCXNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7CisJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCisJCWlmICgrK2kgPT0gcnhfcmluZy0+Y291bnQpIGkgPSAwOworCQluZXh0X3J4ZCA9IEUxMDAwX1JYX0RFU0MoKnJ4X3JpbmcsIGkpOworCQlwcmVmZXRjaChuZXh0X3J4ZCk7CisKKwkJbmV4dF9idWZmZXIgPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CisKKwkJY2xlYW5lZCA9IHRydWU7CisJCWNsZWFuZWRfY291bnQrKzsKKwkJcGNpX3VubWFwX3BhZ2UocGRldiwgYnVmZmVyX2luZm8tPmRtYSwgYnVmZmVyX2luZm8tPmxlbmd0aCwKKwkJICAgICAgICAgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJYnVmZmVyX2luZm8tPmRtYSA9IDA7CisKKwkJbGVuZ3RoID0gbGUxNl90b19jcHUocnhfZGVzYy0+bGVuZ3RoKTsKKworCQkvKiBlcnJvcnMgaXMgb25seSB2YWxpZCBmb3IgREQgKyBFT1AgZGVzY3JpcHRvcnMgKi8KKwkJaWYgKHVubGlrZWx5KChzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9FT1ApICYmCisJCSAgICAocnhfZGVzYy0+ZXJyb3JzICYgRTEwMDBfUlhEX0VSUl9GUkFNRV9FUlJfTUFTSykpKSB7CisJCQl1OCBsYXN0X2J5dGUgPSAqKHNrYi0+ZGF0YSArIGxlbmd0aCAtIDEpOworCQkJaWYgKFRCSV9BQ0NFUFQoaHcsIHN0YXR1cywgcnhfZGVzYy0+ZXJyb3JzLCBsZW5ndGgsCisJCQkJICAgICAgIGxhc3RfYnl0ZSkpIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c3RhdHNfbG9jaywKKwkJCQkgICAgICAgICAgICAgICAgICBpcnFfZmxhZ3MpOworCQkJCWUxMDAwX3RiaV9hZGp1c3Rfc3RhdHMoaHcsICZhZGFwdGVyLT5zdGF0cywKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgc2tiLT5kYXRhKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zdGF0c19sb2NrLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgaXJxX2ZsYWdzKTsKKwkJCQlsZW5ndGgtLTsKKwkJCX0gZWxzZSB7CisJCQkJLyogcmVjeWNsZSBib3RoIHBhZ2UgYW5kIHNrYiAqLworCQkJCWJ1ZmZlcl9pbmZvLT5za2IgPSBza2I7CisJCQkJLyogYW4gZXJyb3IgbWVhbnMgYW55IGNoYWluIGdvZXMgb3V0IHRoZSB3aW5kb3cKKwkJCQkgKiB0b28gKi8KKwkJCQlpZiAocnhfcmluZy0+cnhfc2tiX3RvcCkKKwkJCQkJZGV2X2tmcmVlX3NrYihyeF9yaW5nLT5yeF9za2JfdG9wKTsKKwkJCQlyeF9yaW5nLT5yeF9za2JfdG9wID0gTlVMTDsKKwkJCQlnb3RvIG5leHRfZGVzYzsKKwkJCX0KKwkJfQorCisjZGVmaW5lIHJ4dG9wIHJ4X3JpbmctPnJ4X3NrYl90b3AKKwkJaWYgKCEoc3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfRU9QKSkgeworCQkJLyogdGhpcyBkZXNjcmlwdG9yIGlzIG9ubHkgdGhlIGJlZ2lubmluZyAob3IgbWlkZGxlKSAqLworCQkJaWYgKCFyeHRvcCkgeworCQkJCS8qIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiBhIGNoYWluICovCisJCQkJcnh0b3AgPSBza2I7CisJCQkJc2tiX2ZpbGxfcGFnZV9kZXNjKHJ4dG9wLCAwLCBidWZmZXJfaW5mby0+cGFnZSwKKwkJCQkgICAgICAgICAgICAgICAgICAgMCwgbGVuZ3RoKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogdGhpcyBpcyB0aGUgbWlkZGxlIG9mIGEgY2hhaW4gKi8KKwkJCQlza2JfZmlsbF9wYWdlX2Rlc2Mocnh0b3AsCisJCQkJICAgIHNrYl9zaGluZm8ocnh0b3ApLT5ucl9mcmFncywKKwkJCQkgICAgYnVmZmVyX2luZm8tPnBhZ2UsIDAsIGxlbmd0aCk7CisJCQkJLyogcmUtdXNlIHRoZSBza2IsIG9ubHkgY29uc3VtZWQgdGhlIHBhZ2UgKi8KKwkJCQlidWZmZXJfaW5mby0+c2tiID0gc2tiOworCQkJfQorCQkJZTEwMDBfY29uc3VtZV9wYWdlKGJ1ZmZlcl9pbmZvLCByeHRvcCwgbGVuZ3RoKTsKKwkJCWdvdG8gbmV4dF9kZXNjOworCQl9IGVsc2UgeworCQkJaWYgKHJ4dG9wKSB7CisJCQkJLyogZW5kIG9mIHRoZSBjaGFpbiAqLworCQkJCXNrYl9maWxsX3BhZ2VfZGVzYyhyeHRvcCwKKwkJCQkgICAgc2tiX3NoaW5mbyhyeHRvcCktPm5yX2ZyYWdzLAorCQkJCSAgICBidWZmZXJfaW5mby0+cGFnZSwgMCwgbGVuZ3RoKTsKKwkJCQkvKiByZS11c2UgdGhlIGN1cnJlbnQgc2tiLCB3ZSBvbmx5IGNvbnN1bWVkIHRoZQorCQkJCSAqIHBhZ2UgKi8KKwkJCQlidWZmZXJfaW5mby0+c2tiID0gc2tiOworCQkJCXNrYiA9IHJ4dG9wOworCQkJCXJ4dG9wID0gTlVMTDsKKwkJCQllMTAwMF9jb25zdW1lX3BhZ2UoYnVmZmVyX2luZm8sIHNrYiwgbGVuZ3RoKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogbm8gY2hhaW4sIGdvdCBFT1AsIHRoaXMgYnVmIGlzIHRoZSBwYWNrZXQKKwkJCQkgKiBjb3B5YnJlYWsgdG8gc2F2ZSB0aGUgcHV0X3BhZ2UvYWxsb2NfcGFnZSAqLworCQkJCWlmIChsZW5ndGggPD0gY29weWJyZWFrICYmCisJCQkJICAgIHNrYl90YWlscm9vbShza2IpID49IGxlbmd0aCkgeworCQkJCQl1OCAqdmFkZHI7CisJCQkJCXZhZGRyID0ga21hcF9hdG9taWMoYnVmZmVyX2luZm8tPnBhZ2UsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgS01fU0tCX0RBVEFfU09GVElSUSk7CisJCQkJCW1lbWNweShza2JfdGFpbF9wb2ludGVyKHNrYiksIHZhZGRyLCBsZW5ndGgpOworCQkJCQlrdW5tYXBfYXRvbWljKHZhZGRyLAorCQkJCQkgICAgICAgICAgICAgIEtNX1NLQl9EQVRBX1NPRlRJUlEpOworCQkJCQkvKiByZS11c2UgdGhlIHBhZ2UsIHNvIGRvbid0IGVyYXNlCisJCQkJCSAqIGJ1ZmZlcl9pbmZvLT5wYWdlICovCisJCQkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOworCQkJCX0gZWxzZSB7CisJCQkJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIDAsCisJCQkJCSAgICAgICAgICAgICAgICAgICBidWZmZXJfaW5mby0+cGFnZSwgMCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpOworCQkJCQllMTAwMF9jb25zdW1lX3BhZ2UoYnVmZmVyX2luZm8sIHNrYiwKKwkJCQkJICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogUmVjZWl2ZSBDaGVja3N1bSBPZmZsb2FkIFhYWCByZWNvbXB1dGUgZHVlIHRvIENSQyBzdHJpcD8gKi8KKwkJZTEwMDBfcnhfY2hlY2tzdW0oYWRhcHRlciwKKwkJICAgICAgICAgICAgICAgICAgKHUzMikoc3RhdHVzKSB8CisJCSAgICAgICAgICAgICAgICAgICgodTMyKShyeF9kZXNjLT5lcnJvcnMpIDw8IDI0KSwKKwkJICAgICAgICAgICAgICAgICAgbGUxNl90b19jcHUocnhfZGVzYy0+Y3N1bSksIHNrYik7CisKKwkJcHNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSA0KTsKKworCQkvKiBwcm9iYWJseSBhIGxpdHRsZSBza2V3ZWQgZHVlIHRvIHJlbW92aW5nIENSQyAqLworCQl0b3RhbF9yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJdG90YWxfcnhfcGFja2V0cysrOworCisJCS8qIGV0aCB0eXBlIHRyYW5zIG5lZWRzIHNrYi0+ZGF0YSB0byBwb2ludCB0byBzb21ldGhpbmcgKi8KKwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7CisJCQlEUFJJTlRLKERSViwgRVJSLCAicHNrYl9tYXlfcHVsbCBmYWlsZWQuXG4iKTsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWdvdG8gbmV4dF9kZXNjOworCQl9CisKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKKworCQllMTAwMF9yZWNlaXZlX3NrYihhZGFwdGVyLCBzdGF0dXMsIHJ4X2Rlc2MtPnNwZWNpYWwsIHNrYik7CisKK25leHRfZGVzYzoKKwkJcnhfZGVzYy0+c3RhdHVzID0gMDsKKworCQkvKiByZXR1cm4gc29tZSBidWZmZXJzIHRvIGhhcmR3YXJlLCBvbmUgYXQgYSB0aW1lIGlzIHRvbyBzbG93ICovCisJCWlmICh1bmxpa2VseShjbGVhbmVkX2NvdW50ID49IEUxMDAwX1JYX0JVRkZFUl9XUklURSkpIHsKKwkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZihhZGFwdGVyLCByeF9yaW5nLCBjbGVhbmVkX2NvdW50KTsKKwkJCWNsZWFuZWRfY291bnQgPSAwOworCQl9CisKKwkJLyogdXNlIHByZWZldGNoZWQgdmFsdWVzICovCisJCXJ4X2Rlc2MgPSBuZXh0X3J4ZDsKKwkJYnVmZmVyX2luZm8gPSBuZXh0X2J1ZmZlcjsKKwl9CisJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IGk7CisKKwljbGVhbmVkX2NvdW50ID0gRTEwMDBfREVTQ19VTlVTRUQocnhfcmluZyk7CisJaWYgKGNsZWFuZWRfY291bnQpCisJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZihhZGFwdGVyLCByeF9yaW5nLCBjbGVhbmVkX2NvdW50KTsKKworCWFkYXB0ZXItPnRvdGFsX3J4X3BhY2tldHMgKz0gdG90YWxfcnhfcGFja2V0czsKKwlhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyArPSB0b3RhbF9yeF9ieXRlczsKKwlhZGFwdGVyLT5uZXRfc3RhdHMucnhfYnl0ZXMgKz0gdG90YWxfcnhfYnl0ZXM7CisJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X3BhY2tldHMgKz0gdG90YWxfcnhfcGFja2V0czsKKwlyZXR1cm4gY2xlYW5lZDsKK30KKworLyoqCiAgKiBlMTAwMF9jbGVhbl9yeF9pcnEgLSBTZW5kIHJlY2VpdmVkIGRhdGEgdXAgdGhlIG5ldHdvcmsgc3RhY2s7IGxlZ2FjeQogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCi0gKiovCisgKiBAcnhfcmluZzogcmluZyB0byBjbGVhbgorICogQHdvcmtfZG9uZTogYW1vdW50IG9mIG5hcGkgd29yayBjb21wbGV0ZWQgdGhpcyBjYWxsCisgKiBAd29ya190b19kbzogbWF4IGFtb3VudCBvZiB3b3JrIGFsbG93ZWQgZm9yIHRoaXMgY2FsbCB0byBkbworICovCiBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcsCiAJCQkgICAgICAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKQpAQCAtNDAwMSw3ICs0MjU1LDYgQEAKIAlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbywgKm5leHRfYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGxlbmd0aDsKLQl1OCBsYXN0X2J5dGU7CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGNsZWFuZWRfY291bnQgPSAwOwogCWJvb2wgY2xlYW5lZCA9IGZhbHNlOwpAQCAtNDAzMyw5ICs0Mjg2LDcgQEAKIAogCQljbGVhbmVkID0gdHJ1ZTsKIAkJY2xlYW5lZF9jb3VudCsrOwotCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsCi0JCSAgICAgICAgICAgICAgICAgYnVmZmVyX2luZm8tPmRtYSwKLQkJICAgICAgICAgICAgICAgICBidWZmZXJfaW5mby0+bGVuZ3RoLAorCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsIGJ1ZmZlcl9pbmZvLT5sZW5ndGgsCiAJCSAgICAgICAgICAgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJYnVmZmVyX2luZm8tPmRtYSA9IDA7CiAKQEAgLTQwNTIsNyArNDMwMyw3IEBACiAJCX0KIAogCQlpZiAodW5saWtlbHkocnhfZGVzYy0+ZXJyb3JzICYgRTEwMDBfUlhEX0VSUl9GUkFNRV9FUlJfTUFTSykpIHsKLQkJCWxhc3RfYnl0ZSA9ICooc2tiLT5kYXRhICsgbGVuZ3RoIC0gMSk7CisJCQl1OCBsYXN0X2J5dGUgPSAqKHNrYi0+ZGF0YSArIGxlbmd0aCAtIDEpOwogCQkJaWYgKFRCSV9BQ0NFUFQoaHcsIHN0YXR1cywgcnhfZGVzYy0+ZXJyb3JzLCBsZW5ndGgsCiAJCQkJICAgICAgIGxhc3RfYnl0ZSkpIHsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c3RhdHNfbG9jaywgZmxhZ3MpOwpAQCAtNDEwNywxMyArNDM1OCw3IEBACiAKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKIAotCQlpZiAodW5saWtlbHkoYWRhcHRlci0+dmxncnAgJiYKLQkJCSAgICAoc3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfVlApKSkgewotCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxncnAsCi0JCQkJCQkgbGUxNl90b19jcHUocnhfZGVzYy0+c3BlY2lhbCkpOwotCQl9IGVsc2UgewotCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKLQkJfQorCQllMTAwMF9yZWNlaXZlX3NrYihhZGFwdGVyLCBzdGF0dXMsIHJ4X2Rlc2MtPnNwZWNpYWwsIHNrYik7CiAKIG5leHRfZGVzYzoKIAkJcnhfZGVzYy0+c3RhdHVzID0gMDsKQEAgLTQxNDIsNiArNDM4NywxMTQgQEAKIH0KIAogLyoqCisgKiBlMTAwMF9hbGxvY19qdW1ib19yeF9idWZmZXJzIC0gUmVwbGFjZSB1c2VkIGp1bWJvIHJlY2VpdmUgYnVmZmVycworICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEByeF9yaW5nOiBwb2ludGVyIHRvIHJlY2VpdmUgcmluZyBzdHJ1Y3R1cmUKKyAqIEBjbGVhbmVkX2NvdW50OiBudW1iZXIgb2YgYnVmZmVycyB0byBhbGxvY2F0ZSB0aGlzIHBhc3MKKyAqKi8KKworc3RhdGljIHZvaWQKK2UxMDAwX2FsbG9jX2p1bWJvX3J4X2J1ZmZlcnMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLCBpbnQgY2xlYW5lZF9jb3VudCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlzdHJ1Y3QgZTEwMDBfcnhfZGVzYyAqcnhfZGVzYzsKKwlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBidWZzeiA9IDI1NiAtCisJICAgICAgICAgICAgICAgICAgICAgMTYgLypmb3Igc2tiX3Jlc2VydmUgKi8gLQorCSAgICAgICAgICAgICAgICAgICAgIE5FVF9JUF9BTElHTjsKKworCWkgPSByeF9yaW5nLT5uZXh0X3RvX3VzZTsKKwlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKKworCXdoaWxlIChjbGVhbmVkX2NvdW50LS0pIHsKKwkJc2tiID0gYnVmZmVyX2luZm8tPnNrYjsKKwkJaWYgKHNrYikgeworCQkJc2tiX3RyaW0oc2tiLCAwKTsKKwkJCWdvdG8gY2hlY2tfcGFnZTsKKwkJfQorCisJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmV0ZGV2LCBidWZzeik7CisJCWlmICh1bmxpa2VseSghc2tiKSkgeworCQkJLyogQmV0dGVyIGx1Y2sgbmV4dCByb3VuZCAqLworCQkJYWRhcHRlci0+YWxsb2NfcnhfYnVmZl9mYWlsZWQrKzsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogRml4IGZvciBlcnJhdGEgMjMsIGNhbid0IGNyb3NzIDY0a0IgYm91bmRhcnkgKi8KKwkJaWYgKCFlMTAwMF9jaGVja182NGtfYm91bmQoYWRhcHRlciwgc2tiLT5kYXRhLCBidWZzeikpIHsKKwkJCXN0cnVjdCBza19idWZmICpvbGRza2IgPSBza2I7CisJCQlEUFJJTlRLKFBST0JFLCBFUlIsICJza2IgYWxpZ24gY2hlY2sgZmFpbGVkOiAldSBieXRlcyAiCisJCQkJCSAgICAgImF0ICVwXG4iLCBidWZzeiwgc2tiLT5kYXRhKTsKKwkJCS8qIFRyeSBhZ2Fpbiwgd2l0aG91dCBmcmVlaW5nIHRoZSBwcmV2aW91cyAqLworCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGJ1ZnN6KTsKKwkJCS8qIEZhaWxlZCBhbGxvY2F0aW9uLCBjcml0aWNhbCBmYWlsdXJlICovCisJCQlpZiAoIXNrYikgeworCQkJCWRldl9rZnJlZV9za2Iob2xkc2tiKTsKKwkJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoIWUxMDAwX2NoZWNrXzY0a19ib3VuZChhZGFwdGVyLCBza2ItPmRhdGEsIGJ1ZnN6KSkgeworCQkJCS8qIGdpdmUgdXAgKi8KKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQkJZGV2X2tmcmVlX3NrYihvbGRza2IpOworCQkJCWJyZWFrOyAvKiB3aGlsZSAoY2xlYW5lZF9jb3VudC0tKSAqLworCQkJfQorCisJCQkvKiBVc2UgbmV3IGFsbG9jYXRpb24gKi8KKwkJCWRldl9rZnJlZV9za2Iob2xkc2tiKTsKKwkJfQorCQkvKiBNYWtlIGJ1ZmZlciBhbGlnbm1lbnQgMiBiZXlvbmQgYSAxNiBieXRlIGJvdW5kYXJ5CisJCSAqIHRoaXMgd2lsbCByZXN1bHQgaW4gYSAxNiBieXRlIGFsaWduZWQgSVAgaGVhZGVyIGFmdGVyCisJCSAqIHRoZSAxNCBieXRlIE1BQyBoZWFkZXIgaXMgcmVtb3ZlZAorCQkgKi8KKwkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOworCisJCWJ1ZmZlcl9pbmZvLT5za2IgPSBza2I7CisJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuOworY2hlY2tfcGFnZToKKwkJLyogYWxsb2NhdGUgYSBuZXcgcGFnZSBpZiBuZWNlc3NhcnkgKi8KKwkJaWYgKCFidWZmZXJfaW5mby0+cGFnZSkgeworCQkJYnVmZmVyX2luZm8tPnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9BVE9NSUMpOworCQkJaWYgKHVubGlrZWx5KCFidWZmZXJfaW5mby0+cGFnZSkpIHsKKwkJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFidWZmZXJfaW5mby0+ZG1hKQorCQkJYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfcGFnZShwZGV2LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfaW5mby0+cGFnZSwgMCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2luZm8tPmxlbmd0aCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCQlyeF9kZXNjID0gRTEwMDBfUlhfREVTQygqcnhfcmluZywgaSk7CisJCXJ4X2Rlc2MtPmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoYnVmZmVyX2luZm8tPmRtYSk7CisKKwkJaWYgKHVubGlrZWx5KCsraSA9PSByeF9yaW5nLT5jb3VudCkpCisJCQlpID0gMDsKKwkJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CisJfQorCisJaWYgKGxpa2VseShyeF9yaW5nLT5uZXh0X3RvX3VzZSAhPSBpKSkgeworCQlyeF9yaW5nLT5uZXh0X3RvX3VzZSA9IGk7CisJCWlmICh1bmxpa2VseShpLS0gPT0gMCkpCisJCQlpID0gKHJ4X3JpbmctPmNvdW50IC0gMSk7CisKKwkJLyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKKwkJICoga25vdyB0aGVyZSBhcmUgbmV3IGRlc2NyaXB0b3JzIHRvIGZldGNoLiAgKE9ubHkKKwkJICogYXBwbGljYWJsZSBmb3Igd2Vhay1vcmRlcmVkIG1lbW9yeSBtb2RlbCBhcmNocywKKwkJICogc3VjaCBhcyBJQS02NCkuICovCisJCXdtYigpOworCQl3cml0ZWwoaSwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPnJkdCk7CisJfQorfQorCisvKioKICAqIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMgLSBSZXBsYWNlIHVzZWQgcmVjZWl2ZSBidWZmZXJzOyBsZWdhY3kgJiBleHRlbmRlZAogICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KQEAgLTQxODYsNiArNDUzOSw3IEBACiAJCQkvKiBGYWlsZWQgYWxsb2NhdGlvbiwgY3JpdGljYWwgZmFpbHVyZSAqLwogCQkJaWYgKCFza2IpIHsKIAkJCQlkZXZfa2ZyZWVfc2tiKG9sZHNrYik7CisJCQkJYWRhcHRlci0+YWxsb2NfcnhfYnVmZl9mYWlsZWQrKzsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNDE5Myw2ICs0NTQ3LDcgQEAKIAkJCQkvKiBnaXZlIHVwICovCiAJCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJCWRldl9rZnJlZV9za2Iob2xkc2tiKTsKKwkJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOwogCQkJCWJyZWFrOyAvKiB3aGlsZSAhYnVmZmVyX2luZm8tPnNrYiAqLwogCQkJfQogCkBAIC00MjEwLDkgKzQ1NjUsMTQgQEAKIG1hcF9za2I6CiAJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LAogCQkJCQkJICBza2ItPmRhdGEsCi0JCQkJCQkgIGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4sCisJCQkJCQkgIGJ1ZmZlcl9pbmZvLT5sZW5ndGgsCiAJCQkJCQkgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKKwkJLyoKKwkJICogWFhYIGlmIGl0IHdhcyBhbGxvY2F0ZWQgY2xlYW5seSBpdCB3aWxsIG5ldmVyIG1hcCB0byBhCisJCSAqIGJvdW5kYXJ5IGNyb3NzaW5nCisJCSAqLworCiAJCS8qIEZpeCBmb3IgZXJyYXRhIDIzLCBjYW4ndCBjcm9zcyA2NGtCIGJvdW5kYXJ5ICovCiAJCWlmICghZTEwMDBfY2hlY2tfNjRrX2JvdW5kKGFkYXB0ZXIsCiAJCQkJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpYnVmZmVyX2luZm8tPmRtYSwKQEAgLTQyMjksNiArNDU4OSw3IEBACiAJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7CiAKKwkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CiAJCQlicmVhazsgLyogd2hpbGUgIWJ1ZmZlcl9pbmZvLT5za2IgKi8KIAkJfQogCQlyeF9kZXNjID0gRTEwMDBfUlhfREVTQygqcnhfcmluZywgaSk7CkBAIC00MzUzLDggKzQ3MTQsNiBAQAogCQlkYXRhLT5waHlfaWQgPSBody0+cGh5X2FkZHI7CiAJCWJyZWFrOwogCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBmbGFncyk7CiAJCWlmIChlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIGRhdGEtPnJlZ19udW0gJiAweDFGLAogCQkJCSAgICZkYXRhLT52YWxfb3V0KSkgewpAQCAtNDM2NCw4ICs0NzIzLDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c3RhdHNfbG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIFNJT0NTTUlJUkVHOgotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwogCQlpZiAoZGF0YS0+cmVnX251bSAmIH4oMHgxRikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJbWlpX3JlZyA9IGRhdGEtPnZhbF9pbjsKQEAgLTQ0OTcsNiArNDg1NCw4IEBACiAJCQkvKiBlbmFibGUgVkxBTiByZWNlaXZlIGZpbHRlcmluZyAqLwogCQkJcmN0bCA9IGVyMzIoUkNUTCk7CiAJCQlyY3RsICY9IH5FMTAwMF9SQ1RMX0NGSUVOOworCSAgICAgICAgICAgICAgICBpZiAoIShuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKQorCQkJCXJjdGwgfD0gRTEwMDBfUkNUTF9WRkU7CiAJCQlldzMyKFJDVEwsIHJjdGwpOwogCQkJZTEwMDBfdXBkYXRlX21uZ192bGFuKGFkYXB0ZXIpOwogCQl9CkBAIC00NTA3LDYgKzQ4NjYsMTEgQEAKIAkJZXczMihDVFJMLCBjdHJsKTsKIAogCQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgIT0gZTEwMDBfaWNoOGxhbikgeworCQkJLyogZGlzYWJsZSBWTEFOIHJlY2VpdmUgZmlsdGVyaW5nICovCisJCQlyY3RsID0gZXIzMihSQ1RMKTsKKwkJCXJjdGwgJj0gfkUxMDAwX1JDVExfVkZFOworCQkJZXczMihSQ1RMLCByY3RsKTsKKwogCQkJaWYgKGFkYXB0ZXItPm1uZ192bGFuX2lkICE9CiAJCQkgICAgKHUxNilFMTAwMF9NTkdfVkxBTl9OT05FKSB7CiAJCQkJZTEwMDBfdmxhbl9yeF9raWxsX3ZpZChuZXRkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKaW5kZXggZmE5MmE2OC4uMTZjMTkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYwpAQCAtNDA5Nyw3ICs0MDk3LDggQEAKIH0KIAogI2RlZmluZSBUWERfVVNFX0NPVU5UKFMsIFgpICgoKFMpID4+IChYKSkgKyAxICkKLXN0YXRpYyBpbnQgZTEwMDBfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGUxMDAwX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX3JpbmcgKnR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOwpAQCAtNDM0NSw4ICs0MzQ2LDYgQEAKIAkJZGF0YS0+cGh5X2lkID0gYWRhcHRlci0+aHcucGh5LmFkZHI7CiAJCWJyZWFrOwogCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07CiAJCXN3aXRjaCAoZGF0YS0+cmVnX251bSAmIDB4MUYpIHsKIAkJY2FzZSBNSUlfQk1DUjoKIAkJCWRhdGEtPnZhbF9vdXQgPSBhZGFwdGVyLT5waHlfcmVncy5ibWNyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWVwcm8uYyBiL2RyaXZlcnMvbmV0L2VlcHJvLmMKaW5kZXggNGY3MDAzNC4uMWU5MzQxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWVwcm8uYworKysgYi9kcml2ZXJzL25ldC9lZXByby5jCkBAIC0zMDksNyArMzA5LDggQEAKIAogc3RhdGljIGludAllZXByb19wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGF1dG9wcm9iZSk7CiBzdGF0aWMgaW50CWVlcHJvX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50CWVlcHJvX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGVlcHJvX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBlZXByb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIAllZXByb19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIAllZXByb190cmFuc21pdF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMTMzLDcgKzExMzQsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgZWVwcm9fc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBlZXByb19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZWVwcm9fbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTE0NSw3ICsxMTQ3LDcgQEAKIAogCWlmIChsZW5ndGggPCBFVEhfWkxFTikgewogCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQlsZW5ndGggPSBFVEhfWkxFTjsKIAl9CiAJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKQEAgLTExNzgsNyArMTE4MCw3IEBACiAJZWVwcm9fZW5faW50KGlvYWRkcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWV4cHJlc3MuYyBiL2RyaXZlcnMvbmV0L2VleHByZXNzLmMKaW5kZXggMWYwMTZkNi4uNTkyZGU4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWV4cHJlc3MuYworKysgYi9kcml2ZXJzL25ldC9lZXhwcmVzcy5jCkBAIC0yNDYsNyArMjQ2LDggQEAKIHN0YXRpYyBpbnQgZWV4cF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBlZXhwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZWV4cF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBlZXhwX3htaXQoc3RydWN0IHNrX2J1ZmYgKmJ1Ziwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZWV4cF94bWl0KHN0cnVjdCBza19idWZmICpidWYsCisJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZWV4cF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2FkZHIpOwogc3RhdGljIHZvaWQgZWV4cF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNjUwLDcgKzY1MSw3IEBACiAgKiBDYWxsZWQgdG8gdHJhbnNtaXQgYSBwYWNrZXQsIG9yIHRvIGFsbG93IHVzIHRvIHJpZ2h0IG91cnNlbHZlcwogICogaWYgdGhlIGtlcm5lbCB0aGlua3Mgd2UndmUgZGllZC4KICAqLwotc3RhdGljIGludCBlZXhwX3htaXQoc3RydWN0IHNrX2J1ZmYgKmJ1Ziwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBlZXhwX3htaXQoc3RydWN0IHNrX2J1ZmYgKmJ1Ziwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzaG9ydCBsZW5ndGggPSBidWYtPmxlbjsKICNpZmRlZiBDT05GSUdfU01QCkBAIC02NjQsNyArNjY1LDcgQEAKIAogCWlmIChidWYtPmxlbiA8IEVUSF9aTEVOKSB7CiAJCWlmIChza2JfcGFkdG8oYnVmLCBFVEhfWkxFTikpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCWxlbmd0aCA9IEVUSF9aTEVOOwogCX0KIApAQCAtNjkxLDcgKzY5Miw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKICNlbmRpZgogCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jIGIvZHJpdmVycy9uZXQvZW5jMjhqNjAuYwppbmRleCBmYzZjYzAzLi4xMTdmYzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCisrKyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKQEAgLTEyNzYsNyArMTI3Niw4IEBACiAJbG9ja2VkX3JlZ19iZnNldChwcml2LCBFQ09OMSwgRUNPTjFfVFhSVFMpOwogfQogCi1zdGF0aWMgaW50IGVuYzI4ajYwX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZW5jMjhqNjBfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZW5jMjhqNjBfbmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMTI5OSw3ICsxMzAwLDcgQEAKIAlwcml2LT50eF9za2IgPSBza2I7CiAJc2NoZWR1bGVfd29yaygmcHJpdi0+dHhfd29yayk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBlbmMyOGo2MF90eF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljLmggYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAppbmRleCBjMjZjZWEwLi5lMWMyMDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaApAQCAtMjksMjggKzI5LDM0IEBACiAjaW5jbHVkZSAidm5pY19jcS5oIgogI2luY2x1ZGUgInZuaWNfaW50ci5oIgogI2luY2x1ZGUgInZuaWNfc3RhdHMuaCIKKyNpbmNsdWRlICJ2bmljX25pYy5oIgogI2luY2x1ZGUgInZuaWNfcnNzLmgiCiAKICNkZWZpbmUgRFJWX05BTUUJCSJlbmljIgogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JCSJDaXNjbyAxMEcgRXRoZXJuZXQgRHJpdmVyIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMC4wLjkzMyIKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkJIkNvcHlyaWdodCAyMDA4IENpc2NvIFN5c3RlbXMsIEluYyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjEuMC4xMDAiCisjZGVmaW5lIERSVl9DT1BZUklHSFQJCSJDb3B5cmlnaHQgMjAwOC0yMDA5IENpc2NvIFN5c3RlbXMsIEluYyIKICNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIjogIgogCiAjZGVmaW5lIEVOSUNfTFJPX01BWF9ERVNDCTgKICNkZWZpbmUgRU5JQ19MUk9fTUFYX0FHR1IJNjQKIAorI2RlZmluZSBFTklDX0JBUlNfTUFYCQk2CisKKyNkZWZpbmUgRU5JQ19XUV9NQVgJCTgKKyNkZWZpbmUgRU5JQ19SUV9NQVgJCTgKKyNkZWZpbmUgRU5JQ19DUV9NQVgJCShFTklDX1dRX01BWCArIEVOSUNfUlFfTUFYKQorI2RlZmluZSBFTklDX0lOVFJfTUFYCQkoRU5JQ19DUV9NQVggKyAyKQorCiBlbnVtIGVuaWNfY3FfaW5kZXggewogCUVOSUNfQ1FfUlEsCiAJRU5JQ19DUV9XUSwKLQlFTklDX0NRX01BWCwKIH07CiAKIGVudW0gZW5pY19pbnR4X2ludHJfaW5kZXggewogCUVOSUNfSU5UWF9XUV9SUSwKIAlFTklDX0lOVFhfRVJSLAogCUVOSUNfSU5UWF9OT1RJRlksCi0JRU5JQ19JTlRYX01BWCwKIH07CiAKIGVudW0gZW5pY19tc2l4X2ludHJfaW5kZXggewpAQCAtNzMsNyArNzksNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IHZuaWNfZW5ldF9jb25maWcgY29uZmlnOwotCXN0cnVjdCB2bmljX2Rldl9iYXIgYmFyMDsKKwlzdHJ1Y3Qgdm5pY19kZXZfYmFyIGJhcltFTklDX0JBUlNfTUFYXTsKIAlzdHJ1Y3Qgdm5pY19kZXYgKnZkZXY7CiAJc3RydWN0IHRpbWVyX2xpc3Qgbm90aWZ5X3RpbWVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldDsKQEAgLTg4LDIyICs5NCwyMyBAQAogCXUzMiBwb3J0X210dTsKIAogCS8qIHdvcmsgcXVldWUgY2FjaGUgbGluZSBzZWN0aW9uICovCi0JX19fX2NhY2hlbGluZV9hbGlnbmVkIHN0cnVjdCB2bmljX3dxIHdxWzFdOwotCXNwaW5sb2NrX3Qgd3FfbG9ja1sxXTsKKwlfX19fY2FjaGVsaW5lX2FsaWduZWQgc3RydWN0IHZuaWNfd3Egd3FbRU5JQ19XUV9NQVhdOworCXNwaW5sb2NrX3Qgd3FfbG9ja1tFTklDX1dRX01BWF07CiAJdW5zaWduZWQgaW50IHdxX2NvdW50OwogCXN0cnVjdCB2bGFuX2dyb3VwICp2bGFuX2dyb3VwOwogCiAJLyogcmVjZWl2ZSBxdWV1ZSBjYWNoZSBsaW5lIHNlY3Rpb24gKi8KLQlfX19fY2FjaGVsaW5lX2FsaWduZWQgc3RydWN0IHZuaWNfcnEgcnFbMV07CisJX19fX2NhY2hlbGluZV9hbGlnbmVkIHN0cnVjdCB2bmljX3JxIHJxW0VOSUNfUlFfTUFYXTsKIAl1bnNpZ25lZCBpbnQgcnFfY291bnQ7CiAJaW50ICgqcnFfYWxsb2NfYnVmKShzdHJ1Y3Qgdm5pY19ycSAqcnEpOworCXU2NCBycV90cnVuY2F0ZWRfcGt0czsKIAl1NjQgcnFfYmFkX2ZjczsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKIAlzdHJ1Y3QgbmV0X2xyb19kZXNjIGxyb19kZXNjW0VOSUNfTFJPX01BWF9ERVNDXTsKIAogCS8qIGludGVycnVwdCByZXNvdXJjZSBjYWNoZSBsaW5lIHNlY3Rpb24gKi8KLQlfX19fY2FjaGVsaW5lX2FsaWduZWQgc3RydWN0IHZuaWNfaW50ciBpbnRyW0VOSUNfTVNJWF9NQVhdOworCV9fX19jYWNoZWxpbmVfYWxpZ25lZCBzdHJ1Y3Qgdm5pY19pbnRyIGludHJbRU5JQ19JTlRSX01BWF07CiAJdW5zaWduZWQgaW50IGludHJfY291bnQ7CiAJdTMyIF9faW9tZW0gKmxlZ2FjeV9wYmE7CQkvKiBtZW1vcnktbWFwcGVkICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCmluZGV4IDgwMDViNjAuLmQ2OWQ1MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYwpAQCAtNDQsMTAgKzQ0LDE1IEBACiAjaW5jbHVkZSAiZW5pYy5oIgogCiAjZGVmaW5lIEVOSUNfTk9USUZZX1RJTUVSX1BFUklPRAkoMiAqIEhaKQorI2RlZmluZSBXUV9FTkVUX01BWF9ERVNDX0xFTgkJKDEgPDwgV1FfRU5FVF9MRU5fQklUUykKKyNkZWZpbmUgTUFYX1RTTwkJCQkoMSA8PCAxNikKKyNkZWZpbmUgRU5JQ19ERVNDX01BWF9TUExJVFMJCShNQVhfVFNPIC8gV1FfRU5FVF9NQVhfREVTQ19MRU4gKyAxKQorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lTQ09fVklDX0VORVQgICAgICAgICAweDAwNDMgIC8qIGV0aGVybmV0IHZuaWMgKi8KIAogLyogU3VwcG9ydGVkIGRldmljZXMgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlbmljX2lkX3RhYmxlW10gPSB7Ci0JeyBQQ0lfVkRFVklDRShDSVNDTywgMHgwMDQzKSB9LAorCXsgUENJX1ZERVZJQ0UoQ0lTQ08sIFBDSV9ERVZJQ0VfSURfQ0lTQ09fVklDX0VORVQpIH0sCiAJeyAwLCB9CS8qIGVuZCBvZiB0YWJsZSAqLwogfTsKIApAQCAtMjU2LDcgKzI2MSw3IEBACiAJZW5pYy0+bXNnX2VuYWJsZSA9IHZhbHVlOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGVuaWNfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVuaWNfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IGVuaWNfZ2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyA9IGVuaWNfZ2V0X2RydmluZm8sCiAJLmdldF9tc2dsZXZlbCA9IGVuaWNfZ2V0X21zZ2xldmVsLApAQCAtMzEwLDcgKzMxNSw4IEBACiAJCW9wYXF1ZSk7CiAKIAlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChlbmljLT5uZXRkZXYpICYmCi0JICAgIHZuaWNfd3FfZGVzY19hdmFpbCgmZW5pYy0+d3FbcV9udW1iZXJdKSA+PSBNQVhfU0tCX0ZSQUdTICsgMSkKKwkgICAgdm5pY193cV9kZXNjX2F2YWlsKCZlbmljLT53cVtxX251bWJlcl0pID49CisJICAgIChNQVhfU0tCX0ZSQUdTICsgRU5JQ19ERVNDX01BWF9TUExJVFMpKQogCQluZXRpZl93YWtlX3F1ZXVlKGVuaWMtPm5ldGRldik7CiAKIAlzcGluX3VubG9jaygmZW5pYy0+d3FfbG9ja1txX251bWJlcl0pOwpAQCAtMzU2LDcgKzM2Miw3IEBACiB7CiAJdTMyIG10dSA9IHZuaWNfZGV2X210dShlbmljLT52ZGV2KTsKIAotCWlmIChtdHUgIT0gZW5pYy0+cG9ydF9tdHUpIHsKKwlpZiAobXR1ICYmIG10dSAhPSBlbmljLT5wb3J0X210dSkgewogCQlpZiAobXR1IDwgZW5pYy0+bmV0ZGV2LT5tdHUpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAogCQkJCSIlczogaW50ZXJmYWNlIE1UVSAoJWQpIHNldCBoaWdoZXIgIgpAQCAtNTI1LDcgKzUzMSwxMSBAQAogCXVuc2lnbmVkIGludCBsZW5fbGVmdCA9IHNrYi0+bGVuIC0gaGVhZF9sZW47CiAJaW50IGVvcCA9IChsZW5fbGVmdCA9PSAwKTsKIAotCS8qIFF1ZXVlIHRoZSBtYWluIHNrYiBmcmFnbWVudCAqLworCS8qIFF1ZXVlIHRoZSBtYWluIHNrYiBmcmFnbWVudC4gVGhlIGZyYWdtZW50cyBhcmUgbm8gbGFyZ2VyCisJICogdGhhbiBtYXggTVRVKDkwMDApK0VUSF9IRFJfTEVOKDE0KSBieXRlcywgd2hpY2ggaXMgbGVzcworCSAqIHRoYW4gV1FfRU5FVF9NQVhfREVTQ19MRU4gbGVuZ3RoLiBTbyBvbmx5IG9uZSBkZXNjcmlwdG9yCisJICogcGVyIGZyYWdtZW50IGlzIHF1ZXVlZC4KKwkgKi8KIAllbmljX3F1ZXVlX3dxX2Rlc2Mod3EsIHNrYiwKIAkJcGNpX21hcF9zaW5nbGUoZW5pYy0+cGRldiwgc2tiLT5kYXRhLAogCQkJaGVhZF9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpLApAQCAtNTQ3LDcgKzU1NywxMSBAQAogCXVuc2lnbmVkIGludCBjc3VtX29mZnNldCA9IGhkcl9sZW4gKyBza2ItPmNzdW1fb2Zmc2V0OwogCWludCBlb3AgPSAobGVuX2xlZnQgPT0gMCk7CiAKLQkvKiBRdWV1ZSB0aGUgbWFpbiBza2IgZnJhZ21lbnQgKi8KKwkvKiBRdWV1ZSB0aGUgbWFpbiBza2IgZnJhZ21lbnQuIFRoZSBmcmFnbWVudHMgYXJlIG5vIGxhcmdlcgorCSAqIHRoYW4gbWF4IE1UVSg5MDAwKStFVEhfSERSX0xFTigxNCkgYnl0ZXMsIHdoaWNoIGlzIGxlc3MKKwkgKiB0aGFuIFdRX0VORVRfTUFYX0RFU0NfTEVOIGxlbmd0aC4gU28gb25seSBvbmUgZGVzY3JpcHRvcgorCSAqIHBlciBmcmFnbWVudCBpcyBxdWV1ZWQuCisJICovCiAJZW5pY19xdWV1ZV93cV9kZXNjX2NzdW1fbDQod3EsIHNrYiwKIAkJcGNpX21hcF9zaW5nbGUoZW5pYy0+cGRldiwgc2tiLT5kYXRhLAogCQkJaGVhZF9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpLApAQCAtNTY1LDEwICs1NzksMTQgQEAKIAlzdHJ1Y3Qgdm5pY193cSAqd3EsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBtc3MsCiAJaW50IHZsYW5fdGFnX2luc2VydCwgdW5zaWduZWQgaW50IHZsYW5fdGFnKQogewotCXVuc2lnbmVkIGludCBoZWFkX2xlbiA9IHNrYl9oZWFkbGVuKHNrYik7Ci0JdW5zaWduZWQgaW50IGxlbl9sZWZ0ID0gc2tiLT5sZW4gLSBoZWFkX2xlbjsKKwl1bnNpZ25lZCBpbnQgZnJhZ19sZW5fbGVmdCA9IHNrYl9oZWFkbGVuKHNrYik7CisJdW5zaWduZWQgaW50IGxlbl9sZWZ0ID0gc2tiLT5sZW4gLSBmcmFnX2xlbl9sZWZ0OwogCXVuc2lnbmVkIGludCBoZHJfbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHRjcF9oZHJsZW4oc2tiKTsKIAlpbnQgZW9wID0gKGxlbl9sZWZ0ID09IDApOworCXVuc2lnbmVkIGludCBsZW47CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKwlza2JfZnJhZ190ICpmcmFnOwogCiAJLyogUHJlbG9hZCBUQ1AgY3N1bSBmaWVsZCB3aXRoIElQIHBzZXVkbyBoZHIgY2FsY3VsYXRlZAogCSAqIHdpdGggSVAgbGVuZ3RoIHNldCB0byB6ZXJvLiAgSFcgd2lsbCBsYXRlciBhZGQgaW4gbGVuZ3RoCkBAIC01ODQsMTcgKzYwMiw0OSBAQAogCQkJJmlwdjZfaGRyKHNrYiktPmRhZGRyLCAwLCBJUFBST1RPX1RDUCwgMCk7CiAJfQogCi0JLyogUXVldWUgdGhlIG1haW4gc2tiIGZyYWdtZW50ICovCi0JZW5pY19xdWV1ZV93cV9kZXNjX3Rzbyh3cSwgc2tiLAotCQlwY2lfbWFwX3NpbmdsZShlbmljLT5wZGV2LCBza2ItPmRhdGEsCi0JCQloZWFkX2xlbiwgUENJX0RNQV9UT0RFVklDRSksCi0JCWhlYWRfbGVuLAotCQltc3MsIGhkcl9sZW4sCi0JCXZsYW5fdGFnX2luc2VydCwgdmxhbl90YWcsCi0JCWVvcCk7CisJLyogUXVldWUgV1FfRU5FVF9NQVhfREVTQ19MRU4gbGVuZ3RoIGRlc2NyaXB0b3JzCisJICogZm9yIHRoZSBtYWluIHNrYiBmcmFnbWVudAorCSAqLworCXdoaWxlIChmcmFnX2xlbl9sZWZ0KSB7CisJCWxlbiA9IG1pbihmcmFnX2xlbl9sZWZ0LCAodW5zaWduZWQgaW50KVdRX0VORVRfTUFYX0RFU0NfTEVOKTsKKwkJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShlbmljLT5wZGV2LCBza2ItPmRhdGEgKyBvZmZzZXQsCisJCQkJbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJZW5pY19xdWV1ZV93cV9kZXNjX3Rzbyh3cSwgc2tiLAorCQkJZG1hX2FkZHIsCisJCQlsZW4sCisJCQltc3MsIGhkcl9sZW4sCisJCQl2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnLAorCQkJZW9wICYmIChsZW4gPT0gZnJhZ19sZW5fbGVmdCkpOworCQlmcmFnX2xlbl9sZWZ0IC09IGxlbjsKKwkJb2Zmc2V0ICs9IGxlbjsKKwl9CiAKLQlpZiAoIWVvcCkKLQkJZW5pY19xdWV1ZV93cV9za2JfY29udChlbmljLCB3cSwgc2tiLCBsZW5fbGVmdCk7CisJaWYgKGVvcCkKKwkJcmV0dXJuOworCisJLyogUXVldWUgV1FfRU5FVF9NQVhfREVTQ19MRU4gbGVuZ3RoIGRlc2NyaXB0b3JzCisJICogZm9yIGFkZGl0aW9uYWwgZGF0YSBmcmFnbWVudHMKKwkgKi8KKwlmb3IgKGZyYWcgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzOyBsZW5fbGVmdDsgZnJhZysrKSB7CisJCWxlbl9sZWZ0IC09IGZyYWctPnNpemU7CisJCWZyYWdfbGVuX2xlZnQgPSBmcmFnLT5zaXplOworCQlvZmZzZXQgPSBmcmFnLT5wYWdlX29mZnNldDsKKworCQl3aGlsZSAoZnJhZ19sZW5fbGVmdCkgeworCQkJbGVuID0gbWluKGZyYWdfbGVuX2xlZnQsCisJCQkJKHVuc2lnbmVkIGludClXUV9FTkVUX01BWF9ERVNDX0xFTik7CisJCQlkbWFfYWRkciA9IHBjaV9tYXBfcGFnZShlbmljLT5wZGV2LCBmcmFnLT5wYWdlLAorCQkJCW9mZnNldCwgbGVuLAorCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQkJZW5pY19xdWV1ZV93cV9kZXNjX2NvbnQod3EsIHNrYiwKKwkJCQlkbWFfYWRkciwKKwkJCQlsZW4sCisJCQkJKGxlbl9sZWZ0ID09IDApICYmCisJCQkJKGxlbiA9PSBmcmFnX2xlbl9sZWZ0KSk7CS8qIEVPUD8gKi8KKwkJCWZyYWdfbGVuX2xlZnQgLT0gbGVuOworCQkJb2Zmc2V0ICs9IGxlbjsKKwkJfQorCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVuaWNfcXVldWVfd3Ffc2tiKHN0cnVjdCBlbmljICplbmljLApAQCAtNjIyLDcgKzY3Miw4IEBACiB9CiAKIC8qIG5ldGlmX3R4X2xvY2sgaGVsZCwgcHJvY2VzcyBjb250ZXh0IHdpdGggQkhzIGRpc2FibGVkLCBvciBCSCAqLwotc3RhdGljIGludCBlbmljX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGVuaWNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCB2bmljX3dxICp3cSA9ICZlbmljLT53cVswXTsKQEAgLTY0Nyw3ICs2OTgsOCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVuaWMtPndxX2xvY2tbMF0sIGZsYWdzKTsKIAotCWlmICh2bmljX3dxX2Rlc2NfYXZhaWwod3EpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpIHsKKwlpZiAodm5pY193cV9kZXNjX2F2YWlsKHdxKSA8CisJICAgIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyBFTklDX0RFU0NfTUFYX1NQTElUUykgewogCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCS8qIFRoaXMgaXMgYSBoYXJkIGVycm9yLCBsb2cgaXQgKi8KIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEJVRyEgVHggcmluZyBmdWxsIHdoZW4gIgpAQCAtNjU4LDcgKzcxMCw3IEBACiAKIAllbmljX3F1ZXVlX3dxX3NrYihlbmljLCB3cSwgc2tiKTsKIAotCWlmICh2bmljX3dxX2Rlc2NfYXZhaWwod3EpIDwgTUFYX1NLQl9GUkFHUyArIDEpCisJaWYgKHZuaWNfd3FfZGVzY19hdmFpbCh3cSkgPCBNQVhfU0tCX0ZSQUdTICsgRU5JQ19ERVNDX01BWF9TUExJVFMpCiAJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuaWMtPndxX2xvY2tbMF0sIGZsYWdzKTsKQEAgLTY4Niw4ICs3MzgsOSBAQAogCW5ldF9zdGF0cy0+cnhfYnl0ZXMgPSBzdGF0cy0+cngucnhfYnl0ZXNfb2s7CiAJbmV0X3N0YXRzLT5yeF9lcnJvcnMgPSBzdGF0cy0+cngucnhfZXJyb3JzOwogCW5ldF9zdGF0cy0+bXVsdGljYXN0ID0gc3RhdHMtPnJ4LnJ4X211bHRpY2FzdF9mcmFtZXNfb2s7CisJbmV0X3N0YXRzLT5yeF9vdmVyX2Vycm9ycyA9IGVuaWMtPnJxX3RydW5jYXRlZF9wa3RzOwogCW5ldF9zdGF0cy0+cnhfY3JjX2Vycm9ycyA9IGVuaWMtPnJxX2JhZF9mY3M7Ci0JbmV0X3N0YXRzLT5yeF9kcm9wcGVkID0gc3RhdHMtPnJ4LnJ4X25vX2J1ZnM7CisJbmV0X3N0YXRzLT5yeF9kcm9wcGVkID0gc3RhdHMtPnJ4LnJ4X25vX2J1ZnMgKyBzdGF0cy0+cngucnhfZHJvcDsKIAogCXJldHVybiBuZXRfc3RhdHM7CiB9CkBAIC04MTcsMTEgKzg3MCwxMiBAQAogCWRldl9rZnJlZV9za2JfYW55KGJ1Zi0+b3NfYnVmKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqZW5pY19ycV9hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICplbmljX3JxX2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCXVuc2lnbmVkIGludCBzaXplKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUgKyBORVRfSVBfQUxJR04pOworCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmV0ZGV2LCBzaXplICsgTkVUX0lQX0FMSUdOKTsKIAogCWlmIChza2IpCiAJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKQEAgLTgzMiwxMiArODg2LDEzIEBACiBzdGF0aWMgaW50IGVuaWNfcnFfYWxsb2NfYnVmKHN0cnVjdCB2bmljX3JxICpycSkKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IHZuaWNfZGV2X3ByaXYocnEtPnZkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBlbmljLT5uZXRkZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBpbnQgbGVuID0gZW5pYy0+bmV0ZGV2LT5tdHUgKyBFVEhfSExFTjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gbmV0ZGV2LT5tdHUgKyBFVEhfSExFTjsKIAl1bnNpZ25lZCBpbnQgb3NfYnVmX2luZGV4ID0gMDsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCi0Jc2tiID0gZW5pY19ycV9hbGxvY19za2IobGVuKTsKKwlza2IgPSBlbmljX3JxX2FsbG9jX3NrYihuZXRkZXYsIGxlbik7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC04NTAsNiArOTA1LDUwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZW5pY19ycV9hbGxvY19idWZfYTEoc3RydWN0IHZuaWNfcnEgKnJxKQoreworCXN0cnVjdCBycV9lbmV0X2Rlc2MgKmRlc2MgPSB2bmljX3JxX25leHRfZGVzYyhycSk7CisKKwlpZiAodm5pY19ycV9wb3N0aW5nX3Nvb24ocnEpKSB7CisKKwkJLyogU1cgd29ya2Fyb3VuZCBmb3IgQTAgSFcgZXJyYXR1bTogaWYgd2UncmUganVzdCBhYm91dAorCQkgKiB0byB3cml0ZSBwb3N0ZWRfaW5kZXgsIGluc2VydCBhIGR1bW15IGRlc2MKKwkJICogb2YgdHlwZSByZXN2ZAorCQkgKi8KKworCQlycV9lbmV0X2Rlc2NfZW5jKGRlc2MsIDAsIFJRX0VORVRfVFlQRV9SRVNWMiwgMCk7CisJCXZuaWNfcnFfcG9zdChycSwgMCwgMCwgMCwgMCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGVuaWNfcnFfYWxsb2NfYnVmKHJxKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbmljX3NldF9ycV9hbGxvY19idWYoc3RydWN0IGVuaWMgKmVuaWMpCit7CisJZW51bSB2bmljX2Rldl9od192ZXJzaW9uIGh3X3ZlcjsKKwlpbnQgZXJyOworCisJZXJyID0gdm5pY19kZXZfaHdfdmVyc2lvbihlbmljLT52ZGV2LCAmaHdfdmVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3dpdGNoIChod192ZXIpIHsKKwljYXNlIFZOSUNfREVWX0hXX1ZFUl9BMToKKwkJZW5pYy0+cnFfYWxsb2NfYnVmID0gZW5pY19ycV9hbGxvY19idWZfYTE7CisJCWJyZWFrOworCWNhc2UgVk5JQ19ERVZfSFdfVkVSX0EyOgorCWNhc2UgVk5JQ19ERVZfSFdfVkVSX1VOS05PV046CisJCWVuaWMtPnJxX2FsbG9jX2J1ZiA9IGVuaWNfcnFfYWxsb2NfYnVmOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBlbmljX2dldF9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKippcGhkciwKIAl2b2lkICoqdGNwaCwgdTY0ICpoZHJfZmxhZ3MsIHZvaWQgKnByaXYpCiB7CkBAIC05MzEsOCArMTAzMCwxMiBAQAogCiAJaWYgKHBhY2tldF9lcnJvcikgewogCi0JCWlmIChieXRlc193cml0dGVuID4gMCAmJiAhZmNzX29rKQotCQkJZW5pYy0+cnFfYmFkX2ZjcysrOworCQlpZiAoIWZjc19vaykgeworCQkJaWYgKGJ5dGVzX3dyaXR0ZW4gPiAwKQorCQkJCWVuaWMtPnJxX2JhZF9mY3MrKzsKKwkJCWVsc2UgaWYgKGJ5dGVzX3dyaXR0ZW4gPT0gMCkKKwkJCQllbmljLT5ycV90cnVuY2F0ZWRfcGt0cysrOworCQl9CiAKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIApAQCAtMTA1Nyw3ICsxMTYwLDcgQEAKIAkJLyogUmVwbGVuaXNoIFJRCiAJCSAqLwogCi0JCXZuaWNfcnFfZmlsbCgmZW5pYy0+cnFbMF0sIGVuaWNfcnFfYWxsb2NfYnVmKTsKKwkJdm5pY19ycV9maWxsKCZlbmljLT5ycVswXSwgZW5pYy0+cnFfYWxsb2NfYnVmKTsKIAogCX0gZWxzZSB7CiAKQEAgLTEwOTIsNyArMTE5NSw3IEBACiAJCS8qIFJlcGxlbmlzaCBSUQogCQkgKi8KIAotCQl2bmljX3JxX2ZpbGwoJmVuaWMtPnJxWzBdLCBlbmljX3JxX2FsbG9jX2J1Zik7CisJCXZuaWNfcnFfZmlsbCgmZW5pYy0+cnFbMF0sIGVuaWMtPnJxX2FsbG9jX2J1Zik7CiAKIAkJLyogUmV0dXJuIGludHIgZXZlbnQgY3JlZGl0cyBmb3IgdGhpcyBwb2xsaW5nCiAJCSAqIGN5Y2xlLiAgQW4gaW50ciBldmVudCBpcyB0aGUgY29tcGxldGlvbiBvZiBhCkBAIC0xMjE4LDYgKzEzMjEsNyBAQAogewogCWludCBlcnI7CiAKKwlzcGluX2xvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKIAlzd2l0Y2ggKHZuaWNfZGV2X2dldF9pbnRyX21vZGUoZW5pYy0+dmRldikpIHsKIAljYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9JTlRYOgogCQllcnIgPSB2bmljX2Rldl9ub3RpZnlfc2V0KGVuaWMtPnZkZXYsIEVOSUNfSU5UWF9OT1RJRlkpOwpAQCAtMTIyOSw2ICsxMzMzLDcgQEAKIAkJZXJyID0gdm5pY19kZXZfbm90aWZ5X3NldChlbmljLT52ZGV2LCAtMSAvKiBubyBpbnRyICovKTsKIAkJYnJlYWs7CiAJfQorCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTI2OCw3ICsxMzczLDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+cnFfY291bnQ7IGkrKykgewotCQllcnIgPSB2bmljX3JxX2ZpbGwoJmVuaWMtPnJxW2ldLCBlbmljX3JxX2FsbG9jX2J1Zik7CisJCWVyciA9IHZuaWNfcnFfZmlsbCgmZW5pYy0+cnFbaV0sIGVuaWMtPnJxX2FsbG9jX2J1Zik7CiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlgKIAkJCQkiJXM6IFVuYWJsZSB0byBhbGxvYyByZWNlaXZlIGJ1ZmZlcnMuXG4iLApAQCAtMTI4MiwxMiArMTM4NywxNiBAQAogCWZvciAoaSA9IDA7IGkgPCBlbmljLT5ycV9jb3VudDsgaSsrKQogCQl2bmljX3JxX2VuYWJsZSgmZW5pYy0+cnFbaV0pOwogCisJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAJZW5pY19hZGRfc3RhdGlvbl9hZGRyKGVuaWMpOworCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAJZW5pY19zZXRfbXVsdGljYXN0X2xpc3QobmV0ZGV2KTsKIAogCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKIAluYXBpX2VuYWJsZSgmZW5pYy0+bmFwaSk7CisJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAJdm5pY19kZXZfZW5hYmxlKGVuaWMtPnZkZXYpOworCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+aW50cl9jb3VudDsgaSsrKQogCQl2bmljX2ludHJfdW5tYXNrKCZlbmljLT5pbnRyW2ldKTsKQEAgLTEyOTcsNyArMTQwNiw5IEBACiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfbm90aWZ5X3Vuc2V0OgorCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogCXZuaWNfZGV2X25vdGlmeV91bnNldChlbmljLT52ZGV2KTsKKwlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogZXJyX291dF9mcmVlX2ludHI6CiAJZW5pY19mcmVlX2ludHIoZW5pYyk7CiAKQEAgLTEzMTMsNyArMTQyNCw5IEBACiAKIAlkZWxfdGltZXJfc3luYygmZW5pYy0+bm90aWZ5X3RpbWVyKTsKIAorCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogCXZuaWNfZGV2X2Rpc2FibGUoZW5pYy0+dmRldik7CisJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKIAluYXBpX2Rpc2FibGUoJmVuaWMtPm5hcGkpOwogCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIApAQCAtMTMzMSw3ICsxNDQ0LDkgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAJdm5pY19kZXZfbm90aWZ5X3Vuc2V0KGVuaWMtPnZkZXYpOworCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAJZW5pY19mcmVlX2ludHIoZW5pYyk7CiAKIAkodm9pZCl2bmljX2NxX3NlcnZpY2UoJmVuaWMtPmNxW0VOSUNfQ1FfUlFdLApAQCAtMTQ3MSw3ICsxNTg2LDcgQEAKIAljb25zdCB1OCBpZ192bGFuX3N0cmlwX2VuID0gMTsKIAogCS8qIEVuYWJsZSBWTEFOIHRhZyBzdHJpcHBpbmcuICBSU1Mgbm90IGVuYWJsZWQgKHlldCkuCi0JKi8KKwkgKi8KIAogCXJldHVybiBlbmljX3NldF9uaWNfY2ZnKGVuaWMsCiAJCXJzc19kZWZhdWx0X2NwdSwgcnNzX2hhc2hfdHlwZSwKQEAgLTE1MDYsOCArMTYyMSw4IEBACiAKIHN0YXRpYyBpbnQgZW5pY19zZXRfaW50cl9tb2RlKHN0cnVjdCBlbmljICplbmljKQogewotCXVuc2lnbmVkIGludCBuID0gQVJSQVlfU0laRShlbmljLT5ycSk7Ci0JdW5zaWduZWQgaW50IG0gPSBBUlJBWV9TSVpFKGVuaWMtPndxKTsKKwl1bnNpZ25lZCBpbnQgbiA9IDE7CisJdW5zaWduZWQgaW50IG0gPSAxOwogCXVuc2lnbmVkIGludCBpOwogCiAJLyogU2V0IGludGVycnVwdCBtb2RlIChJTlR4LCBNU0ksIE1TSS1YKSBkZXBlbmRpbmcKQEAgLTE2MDgsMTIgKzE3MjMsNiBAQAogCXZuaWNfZGV2X3NldF9pbnRyX21vZGUoZW5pYy0+dmRldiwgVk5JQ19ERVZfSU5UUl9NT0RFX1VOS05PV04pOwogfQogCi1zdGF0aWMgdm9pZCBlbmljX2lvdW5tYXAoc3RydWN0IGVuaWMgKmVuaWMpCi17Ci0JaWYgKGVuaWMtPmJhcjAudmFkZHIpCi0JCWlvdW5tYXAoZW5pYy0+YmFyMC52YWRkcik7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZW5pY19uZXRkZXZfb3BzID0gewogCS5uZG9fb3BlbgkJPSBlbmljX29wZW4sCiAJLm5kb19zdG9wCQk9IGVuaWNfc3RvcCwKQEAgLTE2MzIsNiArMTc0MSw5NyBAQAogI2VuZGlmCiB9OwogCit2b2lkIGVuaWNfZGV2X2RlaW5pdChzdHJ1Y3QgZW5pYyAqZW5pYykKK3sKKwluZXRpZl9uYXBpX2RlbCgmZW5pYy0+bmFwaSk7CisJZW5pY19mcmVlX3ZuaWNfcmVzb3VyY2VzKGVuaWMpOworCWVuaWNfY2xlYXJfaW50cl9tb2RlKGVuaWMpOworfQorCitpbnQgZW5pY19kZXZfaW5pdChzdHJ1Y3QgZW5pYyAqZW5pYykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZW5pYy0+bmV0ZGV2OworCWludCBlcnI7CisKKwkvKiBHZXQgdk5JQyBjb25maWd1cmF0aW9uCisJICovCisKKwllcnIgPSBlbmljX2dldF92bmljX2NvbmZpZyhlbmljKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJHZXQgdk5JQyBjb25maWd1cmF0aW9uIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBHZXQgYXZhaWxhYmxlIHJlc291cmNlIGNvdW50cworCSAqLworCisJZW5pY19nZXRfcmVzX2NvdW50cyhlbmljKTsKKworCS8qIFNldCBpbnRlcnJ1cHQgbW9kZSBiYXNlZCBvbiByZXNvdXJjZSBjb3VudHMgYW5kIHN5c3RlbQorCSAqIGNhcGFiaWxpdGllcworCSAqLworCisJZXJyID0gZW5pY19zZXRfaW50cl9tb2RlKGVuaWMpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJIkZhaWxlZCB0byBzZXQgaW50ciBtb2RlLCBhYm9ydGluZy5cbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIEFsbG9jYXRlIGFuZCBjb25maWd1cmUgdk5JQyByZXNvdXJjZXMKKwkgKi8KKworCWVyciA9IGVuaWNfYWxsb2Nfdm5pY19yZXNvdXJjZXMoZW5pYyk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiRmFpbGVkIHRvIGFsbG9jIHZOSUMgcmVzb3VyY2VzLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV92bmljX3Jlc291cmNlczsKKwl9CisKKwllbmljX2luaXRfdm5pY19yZXNvdXJjZXMoZW5pYyk7CisKKwllcnIgPSBlbmljX3NldF9ycV9hbGxvY19idWYoZW5pYyk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiRmFpbGVkIHRvIHNldCBSUSBidWZmZXIgYWxsb2NhdG9yLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV92bmljX3Jlc291cmNlczsKKwl9CisKKwllcnIgPSBlbmljX3NldF9uaWNjZmcoZW5pYyk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiRmFpbGVkIHRvIGNvbmZpZyBuaWMsIGFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX291dF9mcmVlX3ZuaWNfcmVzb3VyY2VzOworCX0KKworCXN3aXRjaCAodm5pY19kZXZfZ2V0X2ludHJfbW9kZShlbmljLT52ZGV2KSkgeworCWRlZmF1bHQ6CisJCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmVuaWMtPm5hcGksIGVuaWNfcG9sbCwgNjQpOworCQlicmVhazsKKwljYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9NU0lYOgorCQluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZlbmljLT5uYXBpLCBlbmljX3BvbGxfbXNpeCwgNjQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlX3ZuaWNfcmVzb3VyY2VzOgorCWVuaWNfY2xlYXJfaW50cl9tb2RlKGVuaWMpOworCWVuaWNfZnJlZV92bmljX3Jlc291cmNlcyhlbmljKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGVuaWNfaW91bm1hcChzdHJ1Y3QgZW5pYyAqZW5pYykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVuaWMtPmJhcik7IGkrKykKKwkJaWYgKGVuaWMtPmJhcltpXS52YWRkcikKKwkJCWlvdW5tYXAoZW5pYy0+YmFyW2ldLnZhZGRyKTsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewpAQCAtMTcwOSwzMSArMTkwOSwyOCBAQAogCQl1c2luZ19kYWMgPSAxOwogCX0KIAotCS8qIE1hcCB2TklDIHJlc291cmNlcyBmcm9tIEJBUjAKKwkvKiBNYXAgdk5JQyByZXNvdXJjZXMgZnJvbSBCQVIwLTUKIAkgKi8KIAotCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKSAmIElPUkVTT1VSQ0VfTUVNKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiQkFSMCBub3QgbWVtb3J5LW1hcCdhYmxlLCBhYm9ydGluZy5cbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9yZWdpb25zOwotCX0KLQotCWVuaWMtPmJhcjAudmFkZHIgPSBwY2lfaW9tYXAocGRldiwgMCwgZW5pYy0+YmFyMC5sZW4pOwotCWVuaWMtPmJhcjAuYnVzX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JZW5pYy0+YmFyMC5sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOwotCi0JaWYgKCFlbmljLT5iYXIwLnZhZGRyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSJDYW5ub3QgbWVtb3J5LW1hcCBCQVIwIHJlcyBoZHIsIGFib3J0aW5nLlxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX291dF9yZWxlYXNlX3JlZ2lvbnM7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW5pYy0+YmFyKTsgaSsrKSB7CisJCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSAmIElPUkVTT1VSQ0VfTUVNKSkKKwkJCWNvbnRpbnVlOworCQllbmljLT5iYXJbaV0ubGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKTsKKwkJZW5pYy0+YmFyW2ldLnZhZGRyID0gcGNpX2lvbWFwKHBkZXYsIGksIGVuaWMtPmJhcltpXS5sZW4pOworCQlpZiAoIWVuaWMtPmJhcltpXS52YWRkcikgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJCSJDYW5ub3QgbWVtb3J5LW1hcCBCQVIgJWQsIGFib3J0aW5nLlxuIiwgaSk7CisJCQllcnIgPSAtRU5PREVWOworCQkJZ290byBlcnJfb3V0X2lvdW5tYXA7CisJCX0KKwkJZW5pYy0+YmFyW2ldLmJ1c19hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpOwogCX0KIAogCS8qIFJlZ2lzdGVyIHZOSUMgZGV2aWNlCiAJICovCiAKLQllbmljLT52ZGV2ID0gdm5pY19kZXZfcmVnaXN0ZXIoTlVMTCwgZW5pYywgcGRldiwgJmVuaWMtPmJhcjApOworCWVuaWMtPnZkZXYgPSB2bmljX2Rldl9yZWdpc3RlcihOVUxMLCBlbmljLCBwZGV2LCBlbmljLT5iYXIsCisJCUFSUkFZX1NJWkUoZW5pYy0+YmFyKSk7CiAJaWYgKCFlbmljLT52ZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlgKIAkJCSJ2TklDIHJlZ2lzdHJhdGlvbiBmYWlsZWQsIGFib3J0aW5nLlxuIik7CkBAIC0xNzY4LDUxICsxOTY1LDEzIEBACiAJCWdvdG8gZXJyX291dF9kZXZfY2xvc2U7CiAJfQogCi0JLyogR2V0IHZOSUMgY29uZmlndXJhdGlvbgotCSAqLwotCi0JZXJyID0gZW5pY19nZXRfdm5pY19jb25maWcoZW5pYyk7CisJZXJyID0gZW5pY19kZXZfaW5pdChlbmljKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSJHZXQgdk5JQyBjb25maWd1cmF0aW9uIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKKwkJCSJEZXZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkLCBhYm9ydGluZy5cbiIpOwogCQlnb3RvIGVycl9vdXRfZGV2X2Nsb3NlOwogCX0KIAotCS8qIEdldCBhdmFpbGFibGUgcmVzb3VyY2UgY291bnRzCi0JICovCi0KLQllbmljX2dldF9yZXNfY291bnRzKGVuaWMpOwotCi0JLyogU2V0IGludGVycnVwdCBtb2RlIGJhc2VkIG9uIHJlc291cmNlIGNvdW50cyBhbmQgc3lzdGVtCi0JICogY2FwYWJpbGl0aWVzCi0JICovCi0KLQllcnIgPSBlbmljX3NldF9pbnRyX21vZGUoZW5pYyk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiRmFpbGVkIHRvIHNldCBpbnRyIG1vZGUsIGFib3J0aW5nLlxuIik7Ci0JCWdvdG8gZXJyX291dF9kZXZfY2xvc2U7Ci0JfQotCi0JLyogQWxsb2NhdGUgYW5kIGNvbmZpZ3VyZSB2TklDIHJlc291cmNlcwotCSAqLwotCi0JZXJyID0gZW5pY19hbGxvY192bmljX3Jlc291cmNlcyhlbmljKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSJGYWlsZWQgdG8gYWxsb2Mgdk5JQyByZXNvdXJjZXMsIGFib3J0aW5nLlxuIik7Ci0JCWdvdG8gZXJyX291dF9mcmVlX3ZuaWNfcmVzb3VyY2VzOwotCX0KLQotCWVuaWNfaW5pdF92bmljX3Jlc291cmNlcyhlbmljKTsKLQotCWVyciA9IGVuaWNfc2V0X25pY2NmZyhlbmljKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSJGYWlsZWQgdG8gY29uZmlnIG5pYywgYWJvcnRpbmcuXG4iKTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfdm5pY19yZXNvdXJjZXM7Ci0JfQotCiAJLyogU2V0dXAgbm90aWZpY2F0aW9uIHRpbWVyLCBIVyByZXNldCB0YXNrLCBhbmQgbG9ja3MKIAkgKi8KIApAQCAtMTgzNywyMyArMTk5NiwxNSBAQAogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAogCQkJIkludmFsaWQgTUFDIGFkZHJlc3MsIGFib3J0aW5nLlxuIik7Ci0JCWdvdG8gZXJyX291dF9mcmVlX3ZuaWNfcmVzb3VyY2VzOworCQlnb3RvIGVycl9vdXRfZGV2X2RlaW5pdDsKIAl9CiAKIAluZXRkZXYtPm5ldGRldl9vcHMgPSAmZW5pY19uZXRkZXZfb3BzOwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSAyICogSFo7CiAJbmV0ZGV2LT5ldGh0b29sX29wcyA9ICZlbmljX2V0aHRvb2xfb3BzOwogCi0Jc3dpdGNoICh2bmljX2Rldl9nZXRfaW50cl9tb2RlKGVuaWMtPnZkZXYpKSB7Ci0JZGVmYXVsdDoKLQkJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmZW5pYy0+bmFwaSwgZW5pY19wb2xsLCA2NCk7Ci0JCWJyZWFrOwotCWNhc2UgVk5JQ19ERVZfSU5UUl9NT0RFX01TSVg6Ci0JCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmVuaWMtPm5hcGksIGVuaWNfcG9sbF9tc2l4LCA2NCk7Ci0JCWJyZWFrOwotCX0KLQotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwKKwkJTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKIAlpZiAoRU5JQ19TRVRUSU5HKGVuaWMsIFRYQ1NVTSkpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTTsKIAlpZiAoRU5JQ19TRVRUSU5HKGVuaWMsIFRTTykpCkBAIC0xODc5LDE3ICsyMDMwLDE2IEBACiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCiAJCQkiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLlxuIik7Ci0JCWdvdG8gZXJyX291dF9mcmVlX3ZuaWNfcmVzb3VyY2VzOworCQlnb3RvIGVycl9vdXRfZGV2X2RlaW5pdDsKIAl9CiAKIAlyZXR1cm4gMDsKIAotZXJyX291dF9mcmVlX3ZuaWNfcmVzb3VyY2VzOgotCWVuaWNfZnJlZV92bmljX3Jlc291cmNlcyhlbmljKTsKK2Vycl9vdXRfZGV2X2RlaW5pdDoKKwllbmljX2Rldl9kZWluaXQoZW5pYyk7CiBlcnJfb3V0X2Rldl9jbG9zZToKIAl2bmljX2Rldl9jbG9zZShlbmljLT52ZGV2KTsKIGVycl9vdXRfdm5pY191bnJlZ2lzdGVyOgotCWVuaWNfY2xlYXJfaW50cl9tb2RlKGVuaWMpOwogCXZuaWNfZGV2X3VucmVnaXN0ZXIoZW5pYy0+dmRldik7CiBlcnJfb3V0X2lvdW5tYXA6CiAJZW5pY19pb3VubWFwKGVuaWMpOwpAQCAtMTkxMyw5ICsyMDYzLDggQEAKIAogCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCQl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwotCQllbmljX2ZyZWVfdm5pY19yZXNvdXJjZXMoZW5pYyk7CisJCWVuaWNfZGV2X2RlaW5pdChlbmljKTsKIAkJdm5pY19kZXZfY2xvc2UoZW5pYy0+dmRldik7Ci0JCWVuaWNfY2xlYXJfaW50cl9tb2RlKGVuaWMpOwogCQl2bmljX2Rldl91bnJlZ2lzdGVyKGVuaWMtPnZkZXYpOwogCQllbmljX2lvdW5tYXAoZW5pYyk7CiAJCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmMgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmMKaW5kZXggZTVmYzkzOC4uMzIxMTExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuYwpAQCAtMTU2LDYgKzE1NiwyMiBAQAogCXJldHVybiB2bmljX2Rldl9jbWQoZW5pYy0+dmRldiwgQ01EX05JQ19DRkcsICZhMCwgJmExLCB3YWl0KTsKIH0KIAoraW50IGVuaWNfc2V0X3Jzc19rZXkoc3RydWN0IGVuaWMgKmVuaWMsIGRtYV9hZGRyX3Qga2V5X3BhLCB1NjQgbGVuKQoreworCXU2NCBhMCA9ICh1NjQpa2V5X3BhLCBhMSA9IGxlbjsKKwlpbnQgd2FpdCA9IDEwMDA7CisKKwlyZXR1cm4gdm5pY19kZXZfY21kKGVuaWMtPnZkZXYsIENNRF9SU1NfS0VZLCAmYTAsICZhMSwgd2FpdCk7Cit9CisKK2ludCBlbmljX3NldF9yc3NfY3B1KHN0cnVjdCBlbmljICplbmljLCBkbWFfYWRkcl90IGNwdV9wYSwgdTY0IGxlbikKK3sKKwl1NjQgYTAgPSAodTY0KWNwdV9wYSwgYTEgPSBsZW47CisJaW50IHdhaXQgPSAxMDAwOworCisJcmV0dXJuIHZuaWNfZGV2X2NtZChlbmljLT52ZGV2LCBDTURfUlNTX0NQVSwgJmEwLCAmYTEsIHdhaXQpOworfQorCiB2b2lkIGVuaWNfZnJlZV92bmljX3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYykKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTE3MiwxMSArMTg4LDE4IEBACiAKIHZvaWQgZW5pY19nZXRfcmVzX2NvdW50cyhzdHJ1Y3QgZW5pYyAqZW5pYykKIHsKLQllbmljLT53cV9jb3VudCA9IHZuaWNfZGV2X2dldF9yZXNfY291bnQoZW5pYy0+dmRldiwgUkVTX1RZUEVfV1EpOwotCWVuaWMtPnJxX2NvdW50ID0gdm5pY19kZXZfZ2V0X3Jlc19jb3VudChlbmljLT52ZGV2LCBSRVNfVFlQRV9SUSk7Ci0JZW5pYy0+Y3FfY291bnQgPSB2bmljX2Rldl9nZXRfcmVzX2NvdW50KGVuaWMtPnZkZXYsIFJFU19UWVBFX0NRKTsKLQllbmljLT5pbnRyX2NvdW50ID0gdm5pY19kZXZfZ2V0X3Jlc19jb3VudChlbmljLT52ZGV2LAotCQlSRVNfVFlQRV9JTlRSX0NUUkwpOworCWVuaWMtPndxX2NvdW50ID0gbWluX3QoaW50LAorCQl2bmljX2Rldl9nZXRfcmVzX2NvdW50KGVuaWMtPnZkZXYsIFJFU19UWVBFX1dRKSwKKwkJRU5JQ19XUV9NQVgpOworCWVuaWMtPnJxX2NvdW50ID0gbWluX3QoaW50LAorCQl2bmljX2Rldl9nZXRfcmVzX2NvdW50KGVuaWMtPnZkZXYsIFJFU19UWVBFX1JRKSwKKwkJRU5JQ19SUV9NQVgpOworCWVuaWMtPmNxX2NvdW50ID0gbWluX3QoaW50LAorCQl2bmljX2Rldl9nZXRfcmVzX2NvdW50KGVuaWMtPnZkZXYsIFJFU19UWVBFX0NRKSwKKwkJRU5JQ19DUV9NQVgpOworCWVuaWMtPmludHJfY291bnQgPSBtaW5fdChpbnQsCisJCXZuaWNfZGV2X2dldF9yZXNfY291bnQoZW5pYy0+dmRldiwgUkVTX1RZUEVfSU5UUl9DVFJMKSwKKwkJRU5JQ19JTlRSX01BWCk7CiAKIAlwcmludGsoS0VSTl9JTkZPIFBGWCAidk5JQyByZXNvdXJjZXMgYXZhaWw6ICIKIAkJIndxICVkIHJxICVkIGNxICVkIGludHIgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmggYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmgKaW5kZXggN2JmMjcyZi4uYWJjMTk3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuaApAQCAtMTM5LDYgKzEzOSw4IEBACiBpbnQgZW5pY19zZXRfbmljX2NmZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggcnNzX2RlZmF1bHRfY3B1LCB1OCByc3NfaGFzaF90eXBlLAogCXU4IHJzc19oYXNoX2JpdHMsIHU4IHJzc19iYXNlX2NwdSwgdTggcnNzX2VuYWJsZSwgdTggdHNvX2lwaWRfc3BsaXRfZW4sCiAJdTggaWdfdmxhbl9zdHJpcF9lbik7CitpbnQgZW5pY19zZXRfcnNzX2tleShzdHJ1Y3QgZW5pYyAqZW5pYywgZG1hX2FkZHJfdCBrZXlfcGEsIHU2NCBsZW4pOworaW50IGVuaWNfc2V0X3Jzc19jcHUoc3RydWN0IGVuaWMgKmVuaWMsIGRtYV9hZGRyX3QgY3B1X3BhLCB1NjQgbGVuKTsKIHZvaWQgZW5pY19nZXRfcmVzX2NvdW50cyhzdHJ1Y3QgZW5pYyAqZW5pYyk7CiB2b2lkIGVuaWNfaW5pdF92bmljX3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYyk7CiBpbnQgZW5pY19hbGxvY192bmljX3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYwppbmRleCBlMjFiOWQ2Li4yOWE0OGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jCkBAIC0zMSw2ICszMSw3IEBACiAKIHN0cnVjdCB2bmljX3JlcyB7CiAJdm9pZCBfX2lvbWVtICp2YWRkcjsKKwlkbWFfYWRkcl90IGJ1c19hZGRyOwogCXVuc2lnbmVkIGludCBjb3VudDsKIH07CiAKQEAgLTY3LDEyICs2OCwxNSBAQAogfQogCiBzdGF0aWMgaW50IHZuaWNfZGV2X2Rpc2NvdmVyX3JlcyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsCi0Jc3RydWN0IHZuaWNfZGV2X2JhciAqYmFyKQorCXN0cnVjdCB2bmljX2Rldl9iYXIgKmJhciwgdW5zaWduZWQgaW50IG51bV9iYXJzKQogewogCXN0cnVjdCB2bmljX3Jlc291cmNlX2hlYWRlciBfX2lvbWVtICpyaDsKIAlzdHJ1Y3Qgdm5pY19yZXNvdXJjZSBfX2lvbWVtICpyOwogCXU4IHR5cGU7CiAKKwlpZiAobnVtX2JhcnMgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoYmFyLT5sZW4gPCBWTklDX01BWF9SRVNfSERSX1NJWkUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ2TklDIEJBUjAgcmVzIGhkciBsZW5ndGggZXJyb3JcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwNCw3ICsxMDgsMTAgQEAKIAogCQlyKys7CiAKLQkJaWYgKGJhcl9udW0gIT0gMCkgIC8qIG9ubHkgbWFwcGluZyBpbiBCQVIwIHJlc291cmNlcyAqLworCQlpZiAoYmFyX251bSA+PSBudW1fYmFycykKKwkJCWNvbnRpbnVlOworCisJCWlmICghYmFyW2Jhcl9udW1dLmxlbiB8fCAhYmFyW2Jhcl9udW1dLnZhZGRyKQogCQkJY29udGludWU7CiAKIAkJc3dpdGNoICh0eXBlKSB7CkBAIC0xMTQsMTMgKzEyMSwxMyBAQAogCQljYXNlIFJFU19UWVBFX0lOVFJfQ1RSTDoKIAkJCS8qIGVhY2ggY291bnQgaXMgc3RyaWRlIGJ5dGVzIGxvbmcgKi8KIAkJCWxlbiA9IGNvdW50ICogVk5JQ19SRVNfU1RSSURFOwotCQkJaWYgKGxlbiArIGJhcl9vZmZzZXQgPiBiYXItPmxlbikgeworCQkJaWYgKGxlbiArIGJhcl9vZmZzZXQgPiBiYXJbYmFyX251bV0ubGVuKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJ2TklDIEJBUjAgcmVzb3VyY2UgJWQgIgogCQkJCQkib3V0LW9mLWJvdW5kcywgb2Zmc2V0IDB4JXggKyAiCiAJCQkJCSJzaXplIDB4JXggPiBiYXIgbGVuIDB4JWx4XG4iLAogCQkJCQl0eXBlLCBiYXJfb2Zmc2V0LAogCQkJCQlsZW4sCi0JCQkJCWJhci0+bGVuKTsKKwkJCQkJYmFyW2Jhcl9udW1dLmxlbik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlicmVhazsKQEAgLTEzMyw3ICsxNDAsOSBAQAogCQl9CiAKIAkJdmRldi0+cmVzW3R5cGVdLmNvdW50ID0gY291bnQ7Ci0JCXZkZXYtPnJlc1t0eXBlXS52YWRkciA9IChjaGFyIF9faW9tZW0gKiliYXItPnZhZGRyICsgYmFyX29mZnNldDsKKwkJdmRldi0+cmVzW3R5cGVdLnZhZGRyID0gKGNoYXIgX19pb21lbSAqKWJhcltiYXJfbnVtXS52YWRkciArCisJCQliYXJfb2Zmc2V0OworCQl2ZGV2LT5yZXNbdHlwZV0uYnVzX2FkZHIgPSBiYXJbYmFyX251bV0uYnVzX2FkZHIgKyBiYXJfb2Zmc2V0OwogCX0KIAogCXJldHVybiAwOwpAQCAtMTYzLDYgKzE3MiwyMSBAQAogCX0KIH0KIAorZG1hX2FkZHJfdCB2bmljX2Rldl9nZXRfcmVzX2J1c19hZGRyKHN0cnVjdCB2bmljX2RldiAqdmRldiwKKwllbnVtIHZuaWNfcmVzX3R5cGUgdHlwZSwgdW5zaWduZWQgaW50IGluZGV4KQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUkVTX1RZUEVfV1E6CisJY2FzZSBSRVNfVFlQRV9SUToKKwljYXNlIFJFU19UWVBFX0NROgorCWNhc2UgUkVTX1RZUEVfSU5UUl9DVFJMOgorCQlyZXR1cm4gdmRldi0+cmVzW3R5cGVdLmJ1c19hZGRyICsKKwkJCWluZGV4ICogVk5JQ19SRVNfU1RSSURFOworCWRlZmF1bHQ6CisJCXJldHVybiB2ZGV2LT5yZXNbdHlwZV0uYnVzX2FkZHI7CisJfQorfQorCiB1bnNpZ25lZCBpbnQgdm5pY19kZXZfZGVzY19yaW5nX3NpemUoc3RydWN0IHZuaWNfZGV2X3JpbmcgKnJpbmcsCiAJdW5zaWduZWQgaW50IGRlc2NfY291bnQsIHVuc2lnbmVkIGludCBkZXNjX3NpemUpCiB7CkBAIC0yNTcsNyArMjgxLDcgQEAKIAlpb3dyaXRlMzIoY21kLCAmZGV2Y21kLT5jbWQpOwogCiAJaWYgKChfQ01EX0ZMQUdTKGNtZCkgJiBfQ01EX0ZMQUdTX05PV0FJVCkpCi0JCQlyZXR1cm4gMDsKKwkJcmV0dXJuIDA7CiAKIAlmb3IgKGRlbGF5ID0gMDsgZGVsYXkgPCB3YWl0OyBkZWxheSsrKSB7CiAKQEAgLTMyNSw2ICszNDksMjUgQEAKIAlyZXR1cm4gZXJyOwogfQogCitpbnQgdm5pY19kZXZfaHdfdmVyc2lvbihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGVudW0gdm5pY19kZXZfaHdfdmVyc2lvbiAqaHdfdmVyKQoreworCXN0cnVjdCB2bmljX2RldmNtZF9md19pbmZvICpmd19pbmZvOworCWludCBlcnI7CisKKwllcnIgPSB2bmljX2Rldl9md19pbmZvKHZkZXYsICZmd19pbmZvKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHN0cm5jbXAoZndfaW5mby0+aHdfdmVyc2lvbiwgIkExIiwgc2l6ZW9mKCJBMSIpKSA9PSAwKQorCQkqaHdfdmVyID0gVk5JQ19ERVZfSFdfVkVSX0ExOworCWVsc2UgaWYgKHN0cm5jbXAoZndfaW5mby0+aHdfdmVyc2lvbiwgIkEyIiwgc2l6ZW9mKCJBMiIpKSA9PSAwKQorCQkqaHdfdmVyID0gVk5JQ19ERVZfSFdfVkVSX0EyOworCWVsc2UKKwkJKmh3X3ZlciA9IFZOSUNfREVWX0hXX1ZFUl9VTktOT1dOOworCisJcmV0dXJuIDA7Cit9CisKIGludCB2bmljX2Rldl9zcGVjKHN0cnVjdCB2bmljX2RldiAqdmRldiwgdW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHNpemUsCiAJdm9pZCAqdmFsdWUpCiB7CkBAIC01MTcsNiArNTYwLDIwIEBACiAJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZGVsIGFkZHIgWyVwTV0sICVkXG4iLCBhZGRyLCBlcnIpOwogfQogCitpbnQgdm5pY19kZXZfcmFpc2VfaW50cihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHUxNiBpbnRyKQoreworCXU2NCBhMCA9IGludHIsIGExID0gMDsKKwlpbnQgd2FpdCA9IDEwMDA7CisJaW50IGVycjsKKworCWVyciA9IHZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfSUFSLCAmYTAsICZhMSwgd2FpdCk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmFpc2UgSU5UUlslZF0sIGVyciAlZFxuIiwKKwkJCWludHIsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCiBpbnQgdm5pY19kZXZfbm90aWZ5X3NldChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHUxNiBpbnRyKQogewogCXU2NCBhMCwgYTE7CkBAIC02ODQsNyArNzQxLDggQEAKIH0KIAogc3RydWN0IHZuaWNfZGV2ICp2bmljX2Rldl9yZWdpc3RlcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsCi0Jdm9pZCAqcHJpdiwgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB2bmljX2Rldl9iYXIgKmJhcikKKwl2b2lkICpwcml2LCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHZuaWNfZGV2X2JhciAqYmFyLAorCXVuc2lnbmVkIGludCBudW1fYmFycykKIHsKIAlpZiAoIXZkZXYpIHsKIAkJdmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2bmljX2RldiksIEdGUF9BVE9NSUMpOwpAQCAtNjk1LDcgKzc1Myw3IEBACiAJdmRldi0+cHJpdiA9IHByaXY7CiAJdmRldi0+cGRldiA9IHBkZXY7CiAKLQlpZiAodm5pY19kZXZfZGlzY292ZXJfcmVzKHZkZXYsIGJhcikpCisJaWYgKHZuaWNfZGV2X2Rpc2NvdmVyX3Jlcyh2ZGV2LCBiYXIsIG51bV9iYXJzKSkKIAkJZ290byBlcnJfb3V0OwogCiAJdmRldi0+ZGV2Y21kID0gdm5pY19kZXZfZ2V0X3Jlcyh2ZGV2LCBSRVNfVFlQRV9ERVZDTUQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oCmluZGV4IDhhYThkYjIuLmZjNWUzZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmgKQEAgLTQxLDYgKzQxLDEyIEBACiB9CiAjZW5kaWYKIAorZW51bSB2bmljX2Rldl9od192ZXJzaW9uIHsKKwlWTklDX0RFVl9IV19WRVJfVU5LTk9XTiwKKwlWTklDX0RFVl9IV19WRVJfQTEsCisJVk5JQ19ERVZfSFdfVkVSX0EyLAorfTsKKwogZW51bSB2bmljX2Rldl9pbnRyX21vZGUgewogCVZOSUNfREVWX0lOVFJfTU9ERV9VTktOT1dOLAogCVZOSUNfREVWX0lOVFJfTU9ERV9JTlRYLApAQCAtNzUsNiArODEsOCBAQAogCWVudW0gdm5pY19yZXNfdHlwZSB0eXBlKTsKIHZvaWQgX19pb21lbSAqdm5pY19kZXZfZ2V0X3JlcyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGVudW0gdm5pY19yZXNfdHlwZSB0eXBlLAogCXVuc2lnbmVkIGludCBpbmRleCk7CitkbWFfYWRkcl90IHZuaWNfZGV2X2dldF9yZXNfYnVzX2FkZHIoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LAorCWVudW0gdm5pY19yZXNfdHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgaW5kZXgpOwogdW5zaWduZWQgaW50IHZuaWNfZGV2X2Rlc2NfcmluZ19zaXplKHN0cnVjdCB2bmljX2Rldl9yaW5nICpyaW5nLAogCXVuc2lnbmVkIGludCBkZXNjX2NvdW50LCB1bnNpZ25lZCBpbnQgZGVzY19zaXplKTsKIHZvaWQgdm5pY19kZXZfY2xlYXJfZGVzY19yaW5nKHN0cnVjdCB2bmljX2Rldl9yaW5nICpyaW5nKTsKQEAgLTg2LDYgKzk0LDggQEAKIAl1NjQgKmEwLCB1NjQgKmExLCBpbnQgd2FpdCk7CiBpbnQgdm5pY19kZXZfZndfaW5mbyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsCiAJc3RydWN0IHZuaWNfZGV2Y21kX2Z3X2luZm8gKipmd19pbmZvKTsKK2ludCB2bmljX2Rldl9od192ZXJzaW9uKHN0cnVjdCB2bmljX2RldiAqdmRldiwKKwllbnVtIHZuaWNfZGV2X2h3X3ZlcnNpb24gKmh3X3Zlcik7CiBpbnQgdm5pY19kZXZfc3BlYyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplLAogCXZvaWQgKnZhbHVlKTsKIGludCB2bmljX2Rldl9zdGF0c19jbGVhcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwpAQCAtOTYsNiArMTA2LDcgQEAKIHZvaWQgdm5pY19kZXZfYWRkX2FkZHIoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCB1OCAqYWRkcik7CiB2b2lkIHZuaWNfZGV2X2RlbF9hZGRyKHN0cnVjdCB2bmljX2RldiAqdmRldiwgdTggKmFkZHIpOwogaW50IHZuaWNfZGV2X21hY19hZGRyKHN0cnVjdCB2bmljX2RldiAqdmRldiwgdTggKm1hY19hZGRyKTsKK2ludCB2bmljX2Rldl9yYWlzZV9pbnRyKHN0cnVjdCB2bmljX2RldiAqdmRldiwgdTE2IGludHIpOwogaW50IHZuaWNfZGV2X25vdGlmeV9zZXQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCB1MTYgaW50cik7CiB2b2lkIHZuaWNfZGV2X25vdGlmeV91bnNldChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogaW50IHZuaWNfZGV2X2xpbmtfc3RhdHVzKHN0cnVjdCB2bmljX2RldiAqdmRldik7CkBAIC0xMTcsNiArMTI4LDcgQEAKIGVudW0gdm5pY19kZXZfaW50cl9tb2RlIHZuaWNfZGV2X2dldF9pbnRyX21vZGUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIHZvaWQgdm5pY19kZXZfdW5yZWdpc3RlcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogc3RydWN0IHZuaWNfZGV2ICp2bmljX2Rldl9yZWdpc3RlcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsCi0Jdm9pZCAqcHJpdiwgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB2bmljX2Rldl9iYXIgKmJhcik7CisJdm9pZCAqcHJpdiwgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB2bmljX2Rldl9iYXIgKmJhciwKKwl1bnNpZ25lZCBpbnQgbnVtX2JhcnMpOwogCiAjZW5kaWYgLyogX1ZOSUNfREVWX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2Y21kLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2Y21kLmgKaW5kZXggMjU4N2YzNC4uZDc4YmJjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXZjbWQuaApAQCAtMTA1LDE0ICsxMDUsNiBAQAogCUNNRF9NQUNfQUREUiAgICAgICAgICAgID0gX0NNREMoX0NNRF9ESVJfUkVBRCwKIAkJCQkJX0NNRF9WVFlQRV9FTkVUIHwgX0NNRF9WVFlQRV9GQywgOSksCiAKLQkvKiBkaXNhYmxlL2VuYWJsZSBwcm9taXNjIG1vZGU6ICh1OClhMD0wLzEgKi8KLS8qKioqKiBYWFggREVQUkVDQVRFRCAqKioqKi8KLQlDTURfUFJPTUlTQ19NT0RFICAgICAgICA9IF9DTURDTlcoX0NNRF9ESVJfV1JJVEUsIF9DTURfVlRZUEVfRU5FVCwgMTApLAotCi0JLyogZGlzYWJsZS9lbmFibGUgYWxsLW11bHRpIG1vZGU6ICh1OClhMD0wLzEgKi8KLS8qKioqKiBYWFggREVQUkVDQVRFRCAqKioqKi8KLQlDTURfQUxMTVVMVElfTU9ERSAgICAgICA9IF9DTURDTlcoX0NNRF9ESVJfV1JJVEUsIF9DTURfVlRZUEVfRU5FVCwgMTEpLAotCiAJLyogYWRkIGFkZHIgZnJvbSAodTQ4KWEwICovCiAJQ01EX0FERFJfQUREICAgICAgICAgICAgPSBfQ01EQ05XKF9DTURfRElSX1dSSVRFLAogCQkJCQlfQ01EX1ZUWVBFX0VORVQgfCBfQ01EX1ZUWVBFX0ZDLCAxMiksCkBAIC0xODIsNyArMTc0LDkgQEAKIAkvKiBkaXNhYmxlIHZpcnR1YWwgbGluayAqLwogCUNNRF9ESVNBQkxFCQk9IF9DTURDKF9DTURfRElSX05PTkUsIF9DTURfVlRZUEVfQUxMLCAyOSksCiAKLQkvKiBzdGF0cyBkdW1wIGFsbCB2bmljcyBvbiB1cGxpbmsgaW4gbWVtOiAodTY0KWEwPXBhZGRyICh1MzIpYTE9dWlmICovCisJLyogc3RhdHMgZHVtcCBzdW0gb2YgYWxsIHZuaWMgc3RhdHMgb24gc2FtZSB1cGxpbmsgaW4gbWVtOgorCSAqICAgICAodTY0KWEwPXBhZGRyCisJICogICAgICh1MTYpYTE9c2l6ZW9mIHN0YXRzIGFyZWEgKi8KIAlDTURfU1RBVFNfRFVNUF9BTEwJPSBfQ01EQyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9BTEwsIDMwKSwKIAogCS8qIGluaXQgc3RhdHVzOgpAQCAtMjExLDcgKzIwNSwxMiBAQAogCS8qIHBlcnNpc3RlbnQgYmluZGluZyBpbmZvCiAJICogaW46ICAodTY0KWEwPXBhZGRyIG9mIGFyZwogCSAqICAgICAgKHUzMilhMT1DTURfUEVSQklfWFhYICovCi0JQ01EX1BFUkJJICAgICAgICAgICAgICAgPSBfQ01EQyhfQ01EX0RJUl9SVywgX0NNRF9WVFlQRV9GQywgMzcpLAorCUNNRF9QRVJCSQkJPSBfQ01EQyhfQ01EX0RJUl9SVywgX0NNRF9WVFlQRV9GQywgMzcpLAorCisJLyogSW50ZXJydXB0IEFzc2VydCBSZWdpc3RlciBmdW5jdGlvbmFsaXR5CisJICogaW46ICh1MTYpYTA9aW50ZXJydXB0IG51bWJlciB0byBhc3NlcnQKKwkgKi8KKwlDTURfSUFSCQkJPSBfQ01EQ05XKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0FMTCwgMzgpLAogfTsKIAogLyogZmxhZ3MgZm9yIENNRF9PUEVOICovCkBAIC0yNDQsNiArMjQzLDcgQEAKIAlFUlJfRU5PTUVNID0gNywKIAlFUlJfRVRJTUVET1VUID0gOCwKIAlFUlJfRUxJTktET1dOID0gOSwKKwlFUlJfRU1BWFJFUyA9IDEwLAogfTsKIAogc3RydWN0IHZuaWNfZGV2Y21kX2Z3X2luZm8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuYyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmMKaW5kZXggZGRjMzhmOC4uMWY4Nzg2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuYworKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5jCkBAIC02MCwzICs2MCw4IEBACiB7CiAJaW93cml0ZTMyKDAsICZpbnRyLT5jdHJsLT5pbnRfY3JlZGl0cyk7CiB9CisKK3ZvaWQgdm5pY19pbnRyX3JhaXNlKHN0cnVjdCB2bmljX2ludHIgKmludHIpCit7CisJdm5pY19kZXZfcmFpc2VfaW50cihpbnRyLT52ZGV2LCAodTE2KWludHItPmluZGV4KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19uaWMuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19uaWMuaAppbmRleCBkYWRmMjZmLi5lZWFmMzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfbmljLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX25pYy5oCkBAIC00MSw2ICs0MSwxMyBAQAogI2RlZmluZSBOSUNfQ0ZHX0lHX1ZMQU5fU1RSSVBfRU5fTUFTS19GSUVMRAkxVUwKICNkZWZpbmUgTklDX0NGR19JR19WTEFOX1NUUklQX0VOX1NISUZUCQkyNAogCisjZGVmaW5lIE5JQ19DRkdfUlNTX0hBU0hfVFlQRV9JUFY0CQkoMSA8PCAwKQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfVENQX0lQVjQJCSgxIDw8IDEpCisjZGVmaW5lIE5JQ19DRkdfUlNTX0hBU0hfVFlQRV9JUFY2CQkoMSA8PCAyKQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfVENQX0lQVjYJCSgxIDw8IDMpCisjZGVmaW5lIE5JQ19DRkdfUlNTX0hBU0hfVFlQRV9JUFY2X0VYCQkoMSA8PCA0KQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfVENQX0lQVjZfRVgJKDEgPDwgNSkKKwogc3RhdGljIGlubGluZSB2b2lkIHZuaWNfc2V0X25pY19jZmcodTMyICpuaWNfY2ZnLAogCXU4IHJzc19kZWZhdWx0X2NwdSwgdTggcnNzX2hhc2hfdHlwZSwKIAl1OCByc3NfaGFzaF9iaXRzLCB1OCByc3NfYmFzZV9jcHUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfcnEuYyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19ycS5jCmluZGV4IDkzNjVlNjMuLjc1NTgzOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19ycS5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19ycS5jCkBAIC02Miw3ICs2Miw2IEBACiAJfQogCiAJcnEtPnRvX3VzZSA9IHJxLT50b19jbGVhbiA9IHJxLT5idWZzWzBdOwotCXJxLT5idWZfaW5kZXggPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTMsMTIgKzExMiwxMiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHZuaWNfcnFfaW5pdChzdHJ1Y3Qgdm5pY19ycSAqcnEsIHVuc2lnbmVkIGludCBjcV9pbmRleCwKK3ZvaWQgdm5pY19ycV9pbml0X3N0YXJ0KHN0cnVjdCB2bmljX3JxICpycSwgdW5zaWduZWQgaW50IGNxX2luZGV4LAorCXVuc2lnbmVkIGludCBmZXRjaF9pbmRleCwgdW5zaWduZWQgaW50IHBvc3RlZF9pbmRleCwKIAl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X2VuYWJsZSwKIAl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X29mZnNldCkKIHsKIAl1NjQgcGFkZHI7Ci0JdTMyIGZldGNoX2luZGV4OwogCiAJcGFkZHIgPSAodTY0KXJxLT5yaW5nLmJhc2VfYWRkciB8IFZOSUNfUEFERFJfVEFSR0VUOwogCXdyaXRlcShwYWRkciwgJnJxLT5jdHJsLT5yaW5nX2Jhc2UpOwpAQCAtMTI4LDE1ICsxMjcsMjcgQEAKIAlpb3dyaXRlMzIoZXJyb3JfaW50ZXJydXB0X29mZnNldCwgJnJxLT5jdHJsLT5lcnJvcl9pbnRlcnJ1cHRfb2Zmc2V0KTsKIAlpb3dyaXRlMzIoMCwgJnJxLT5jdHJsLT5kcm9wcGVkX3BhY2tldF9jb3VudCk7CiAJaW93cml0ZTMyKDAsICZycS0+Y3RybC0+ZXJyb3Jfc3RhdHVzKTsKKwlpb3dyaXRlMzIoZmV0Y2hfaW5kZXgsICZycS0+Y3RybC0+ZmV0Y2hfaW5kZXgpOworCWlvd3JpdGUzMihwb3N0ZWRfaW5kZXgsICZycS0+Y3RybC0+cG9zdGVkX2luZGV4KTsKIAotCS8qIFVzZSBjdXJyZW50IGZldGNoX2luZGV4IGFzIHRoZSByaW5nIHN0YXJ0aW5nIHBvaW50ICovCi0JZmV0Y2hfaW5kZXggPSBpb3JlYWQzMigmcnEtPmN0cmwtPmZldGNoX2luZGV4KTsKIAlycS0+dG9fdXNlID0gcnEtPnRvX2NsZWFuID0KIAkJJnJxLT5idWZzW2ZldGNoX2luZGV4IC8gVk5JQ19SUV9CVUZfQkxLX0VOVFJJRVNdCiAJCQlbZmV0Y2hfaW5kZXggJSBWTklDX1JRX0JVRl9CTEtfRU5UUklFU107Ci0JaW93cml0ZTMyKGZldGNoX2luZGV4LCAmcnEtPmN0cmwtPnBvc3RlZF9pbmRleCk7Cit9CiAKLQlycS0+YnVmX2luZGV4ID0gMDsKK3ZvaWQgdm5pY19ycV9pbml0KHN0cnVjdCB2bmljX3JxICpycSwgdW5zaWduZWQgaW50IGNxX2luZGV4LAorCXVuc2lnbmVkIGludCBlcnJvcl9pbnRlcnJ1cHRfZW5hYmxlLAorCXVuc2lnbmVkIGludCBlcnJvcl9pbnRlcnJ1cHRfb2Zmc2V0KQoreworCXUzMiBmZXRjaF9pbmRleDsKKworCS8qIFVzZSBjdXJyZW50IGZldGNoX2luZGV4IGFzIHRoZSByaW5nIHN0YXJ0aW5nIHBvaW50ICovCisJZmV0Y2hfaW5kZXggPSBpb3JlYWQzMigmcnEtPmN0cmwtPmZldGNoX2luZGV4KTsKKworCXZuaWNfcnFfaW5pdF9zdGFydChycSwgY3FfaW5kZXgsCisJCWZldGNoX2luZGV4LCBmZXRjaF9pbmRleCwKKwkJZXJyb3JfaW50ZXJydXB0X2VuYWJsZSwKKwkJZXJyb3JfaW50ZXJydXB0X29mZnNldCk7CiB9CiAKIHVuc2lnbmVkIGludCB2bmljX3JxX2Vycm9yX3N0YXR1cyhzdHJ1Y3Qgdm5pY19ycSAqcnEpCkBAIC0xOTIsOCArMjAzLDYgQEAKIAkJCVtmZXRjaF9pbmRleCAlIFZOSUNfUlFfQlVGX0JMS19FTlRSSUVTXTsKIAlpb3dyaXRlMzIoZmV0Y2hfaW5kZXgsICZycS0+Y3RybC0+cG9zdGVkX2luZGV4KTsKIAotCXJxLT5idWZfaW5kZXggPSAwOwotCiAJdm5pY19kZXZfY2xlYXJfZGVzY19yaW5nKCZycS0+cmluZyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19ycS5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3JxLmgKaW5kZXggZmQwZWY2Ni4uMzVlNzM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3JxLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3JxLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LCAyMDA5IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNyBOdW92YSBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC03OSw3ICs3OSw2IEBACiAJc3RydWN0IHZuaWNfcnFfYnVmICp0b191c2U7CiAJc3RydWN0IHZuaWNfcnFfYnVmICp0b19jbGVhbjsKIAl2b2lkICpvc19idWZfaGVhZDsKLQl1bnNpZ25lZCBpbnQgYnVmX2luZGV4OwogCXVuc2lnbmVkIGludCBwa3RzX291dHN0YW5kaW5nOwogfTsKIApAQCAtMTA1LDExICsxMDQsNiBAQAogCXJldHVybiBycS0+dG9fdXNlLT5pbmRleDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdm5pY19ycV9uZXh0X2J1Zl9pbmRleChzdHJ1Y3Qgdm5pY19ycSAqcnEpCi17Ci0JcmV0dXJuIHJxLT5idWZfaW5kZXgrKzsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHZuaWNfcnFfcG9zdChzdHJ1Y3Qgdm5pY19ycSAqcnEsCiAJdm9pZCAqb3NfYnVmLCB1bnNpZ25lZCBpbnQgb3NfYnVmX2luZGV4LAogCWRtYV9hZGRyX3QgZG1hX2FkZHIsIHVuc2lnbmVkIGludCBsZW4pCkBAIC0xNDMsNiArMTM3LDExIEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIGludCB2bmljX3JxX3Bvc3Rpbmdfc29vbihzdHJ1Y3Qgdm5pY19ycSAqcnEpCit7CisJcmV0dXJuICgocnEtPnRvX3VzZS0+aW5kZXggJiBWTklDX1JRX1JFVFVSTl9SQVRFKSA9PSAwKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHZuaWNfcnFfcmV0dXJuX2Rlc2NzKHN0cnVjdCB2bmljX3JxICpycSwgdW5zaWduZWQgaW50IGNvdW50KQogewogCXJxLT5yaW5nLmRlc2NfYXZhaWwgKz0gY291bnQ7CkBAIC0xODYsNyArMTg1LDcgQEAKIHsKIAlpbnQgZXJyOwogCi0Jd2hpbGUgKHZuaWNfcnFfZGVzY19hdmFpbChycSkgPiAxKSB7CisJd2hpbGUgKHZuaWNfcnFfZGVzY19hdmFpbChycSkgPiAwKSB7CiAKIAkJZXJyID0gKCpidWZfZmlsbCkocnEpOwogCQlpZiAoZXJyKQpAQCAtMTk5LDYgKzE5OCwxMCBAQAogdm9pZCB2bmljX3JxX2ZyZWUoc3RydWN0IHZuaWNfcnEgKnJxKTsKIGludCB2bmljX3JxX2FsbG9jKHN0cnVjdCB2bmljX2RldiAqdmRldiwgc3RydWN0IHZuaWNfcnEgKnJxLCB1bnNpZ25lZCBpbnQgaW5kZXgsCiAJdW5zaWduZWQgaW50IGRlc2NfY291bnQsIHVuc2lnbmVkIGludCBkZXNjX3NpemUpOwordm9pZCB2bmljX3JxX2luaXRfc3RhcnQoc3RydWN0IHZuaWNfcnEgKnJxLCB1bnNpZ25lZCBpbnQgY3FfaW5kZXgsCisJdW5zaWduZWQgaW50IGZldGNoX2luZGV4LCB1bnNpZ25lZCBpbnQgcG9zdGVkX2luZGV4LAorCXVuc2lnbmVkIGludCBlcnJvcl9pbnRlcnJ1cHRfZW5hYmxlLAorCXVuc2lnbmVkIGludCBlcnJvcl9pbnRlcnJ1cHRfb2Zmc2V0KTsKIHZvaWQgdm5pY19ycV9pbml0KHN0cnVjdCB2bmljX3JxICpycSwgdW5zaWduZWQgaW50IGNxX2luZGV4LAogCXVuc2lnbmVkIGludCBlcnJvcl9pbnRlcnJ1cHRfZW5hYmxlLAogCXVuc2lnbmVkIGludCBlcnJvcl9pbnRlcnJ1cHRfb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY193cS5jIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3dxLmMKaW5kZXggYTU3NmQwNC4uZDJlMDBlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3dxLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3dxLmMKQEAgLTExMiw3ICsxMTIsOCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHZuaWNfd3FfaW5pdChzdHJ1Y3Qgdm5pY193cSAqd3EsIHVuc2lnbmVkIGludCBjcV9pbmRleCwKK3ZvaWQgdm5pY193cV9pbml0X3N0YXJ0KHN0cnVjdCB2bmljX3dxICp3cSwgdW5zaWduZWQgaW50IGNxX2luZGV4LAorCXVuc2lnbmVkIGludCBmZXRjaF9pbmRleCwgdW5zaWduZWQgaW50IHBvc3RlZF9pbmRleCwKIAl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X2VuYWJsZSwKIAl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X29mZnNldCkKIHsKQEAgLTEyMSwxMiArMTIyLDI1IEBACiAJcGFkZHIgPSAodTY0KXdxLT5yaW5nLmJhc2VfYWRkciB8IFZOSUNfUEFERFJfVEFSR0VUOwogCXdyaXRlcShwYWRkciwgJndxLT5jdHJsLT5yaW5nX2Jhc2UpOwogCWlvd3JpdGUzMih3cS0+cmluZy5kZXNjX2NvdW50LCAmd3EtPmN0cmwtPnJpbmdfc2l6ZSk7Ci0JaW93cml0ZTMyKDAsICZ3cS0+Y3RybC0+ZmV0Y2hfaW5kZXgpOwotCWlvd3JpdGUzMigwLCAmd3EtPmN0cmwtPnBvc3RlZF9pbmRleCk7CisJaW93cml0ZTMyKGZldGNoX2luZGV4LCAmd3EtPmN0cmwtPmZldGNoX2luZGV4KTsKKwlpb3dyaXRlMzIocG9zdGVkX2luZGV4LCAmd3EtPmN0cmwtPnBvc3RlZF9pbmRleCk7CiAJaW93cml0ZTMyKGNxX2luZGV4LCAmd3EtPmN0cmwtPmNxX2luZGV4KTsKIAlpb3dyaXRlMzIoZXJyb3JfaW50ZXJydXB0X2VuYWJsZSwgJndxLT5jdHJsLT5lcnJvcl9pbnRlcnJ1cHRfZW5hYmxlKTsKIAlpb3dyaXRlMzIoZXJyb3JfaW50ZXJydXB0X29mZnNldCwgJndxLT5jdHJsLT5lcnJvcl9pbnRlcnJ1cHRfb2Zmc2V0KTsKIAlpb3dyaXRlMzIoMCwgJndxLT5jdHJsLT5lcnJvcl9zdGF0dXMpOworCisJd3EtPnRvX3VzZSA9IHdxLT50b19jbGVhbiA9CisJCSZ3cS0+YnVmc1tmZXRjaF9pbmRleCAvIFZOSUNfV1FfQlVGX0JMS19FTlRSSUVTXQorCQkJW2ZldGNoX2luZGV4ICUgVk5JQ19XUV9CVUZfQkxLX0VOVFJJRVNdOworfQorCit2b2lkIHZuaWNfd3FfaW5pdChzdHJ1Y3Qgdm5pY193cSAqd3EsIHVuc2lnbmVkIGludCBjcV9pbmRleCwKKwl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X2VuYWJsZSwKKwl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X29mZnNldCkKK3sKKwl2bmljX3dxX2luaXRfc3RhcnQod3EsIGNxX2luZGV4LCAwLCAwLAorCQllcnJvcl9pbnRlcnJ1cHRfZW5hYmxlLAorCQllcnJvcl9pbnRlcnJ1cHRfb2Zmc2V0KTsKIH0KIAogdW5zaWduZWQgaW50IHZuaWNfd3FfZXJyb3Jfc3RhdHVzKHN0cnVjdCB2bmljX3dxICp3cSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY193cS5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3dxLmgKaW5kZXggYzgyNjEzNy4uOWMzNGQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3dxLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3dxLmgKQEAgLTE0OSw2ICsxNDksMTAgQEAKIHZvaWQgdm5pY193cV9mcmVlKHN0cnVjdCB2bmljX3dxICp3cSk7CiBpbnQgdm5pY193cV9hbGxvYyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHN0cnVjdCB2bmljX3dxICp3cSwgdW5zaWduZWQgaW50IGluZGV4LAogCXVuc2lnbmVkIGludCBkZXNjX2NvdW50LCB1bnNpZ25lZCBpbnQgZGVzY19zaXplKTsKK3ZvaWQgdm5pY193cV9pbml0X3N0YXJ0KHN0cnVjdCB2bmljX3dxICp3cSwgdW5zaWduZWQgaW50IGNxX2luZGV4LAorCXVuc2lnbmVkIGludCBmZXRjaF9pbmRleCwgdW5zaWduZWQgaW50IHBvc3RlZF9pbmRleCwKKwl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X2VuYWJsZSwKKwl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X29mZnNldCk7CiB2b2lkIHZuaWNfd3FfaW5pdChzdHJ1Y3Qgdm5pY193cSAqd3EsIHVuc2lnbmVkIGludCBjcV9pbmRleCwKIAl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X2VuYWJsZSwKIAl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X29mZnNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lcGljMTAwLmMgYi9kcml2ZXJzL25ldC9lcGljMTAwLmMKaW5kZXggODhkN2ViZi4uNjQxYTEwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwpAQCAtMjk4LDcgKzI5OCw4IEBACiBzdGF0aWMgdm9pZCBlcGljX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBzdGF0aWMgdm9pZCBlcGljX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlcGljX2luaXRfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgZXBpY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGVwaWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBlcGljX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBidWRnZXQpOwogc3RhdGljIGludCBlcGljX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBlcGljX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwpAQCAtOTYxLDcgKzk2Miw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGVwaWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGVwaWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBlcGljX3ByaXZhdGUgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgZW50cnksIGZyZWVfY291bnQ7CkBAIC05NjksNyArOTcwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAKIAkvKiBDYXV0aW9uOiB0aGUgd3JpdGUgb3JkZXIgaXMgaW1wb3J0YW50IGhlcmUsIHNldCB0aGUgZmllbGQgd2l0aCB0aGUKIAkgICAib3duZXJzaGlwIiBiaXQgbGFzdC4gKi8KQEAgLTEwMTMsNyArMTAxNCw3IEBACiAJCQkgICBkZXYtPm5hbWUsIChpbnQpc2tiLT5sZW4sIGVudHJ5LCBjdHJsX3dvcmQsCiAJCQkgICAoaW50KWlubChkZXYtPmJhc2VfYWRkciArIFR4U1RBVCkpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgZXBpY190eF9lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXBpY19wcml2YXRlICplcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VxbC5jIGIvZHJpdmVycy9uZXQvZXFsLmMKaW5kZXggMTliN2RkOS4uZDRkOWEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXFsLmMKKysrIGIvZHJpdmVycy9uZXQvZXFsLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogc3RhdGljIGludCBlcWxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZXFsX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBlcWxfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOwotc3RhdGljIGludCBlcWxfc2xhdmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBlcWxfc2xhdmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogI2RlZmluZSBlcWxfaXNfc2xhdmUoZGV2KQkoKGRldi0+ZmxhZ3MgJiBJRkZfU0xBVkUpID09IElGRl9TTEFWRSkKICNkZWZpbmUgZXFsX2lzX21hc3RlcihkZXYpCSgoZGV2LT5mbGFncyAmIElGRl9NQVNURVIpID09IElGRl9NQVNURVIpCkBAIC0zMjUsNyArMzI1LDcgQEAKIAlyZXR1cm4gYmVzdF9zbGF2ZTsKIH0KIAotc3RhdGljIGludCBlcWxfc2xhdmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGVxbF9zbGF2ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZXF1YWxpemVyX3QgKmVxbCA9IG5ldGRldl9wcml2KGRldik7CiAJc2xhdmVfdCAqc2xhdmU7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIAogCXNwaW5fdW5sb2NrKCZlcWwtPnF1ZXVlLmxvY2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aDE2aS5jIGIvZHJpdmVycy9uZXQvZXRoMTZpLmMKaW5kZXggMGQ4YjZkYS4uNzFiZmVlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoMTZpLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoMTZpLmMKQEAgLTQwNSw3ICs0MDUsNyBAQAogc3RhdGljIHZvaWQgICAgZXRoMTZpX2VlcHJvbV9jbWQoaW50IGlvYWRkciwgdW5zaWduZWQgY2hhciBjb21tYW5kKTsKIHN0YXRpYyBpbnQgICAgIGV0aDE2aV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAgICAgZXRoMTZpX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCAgICAgZXRoMTZpX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGV0aDE2aV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkICAgIGV0aDE2aV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkICAgIGV0aDE2aV90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGV0aDE2aV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKQEAgLTEwNTMsNyArMTA1Myw3IEBACiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCi1zdGF0aWMgaW50IGV0aDE2aV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGV0aDE2aV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBldGgxNmlfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC0xMDY0LDcgKzEwNjQsNyBAQAogCiAJaWYgKGxlbmd0aCA8IEVUSF9aTEVOKSB7CiAJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCWxlbmd0aCA9IEVUSF9aTEVOOwogCX0KIAlidWYgPSBza2ItPmRhdGE7CkBAIC0xMTI2LDcgKzExMjYsNyBAQAogCS8qIG91dGIoVFhfSU5UUl9ET05FIHwgVFhfSU5UUl8xNl9DT0wsIGlvYWRkciArIFRYX0lOVFJfUkVHKTsgKi8KIAlzdGF0dXMgPSAwOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBldGgxNmlfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aG9jLmMgYi9kcml2ZXJzL25ldC9ldGhvYy5jCmluZGV4IGNlYjZhOWMuLmI3MzExYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aG9jLmMKKysrIGIvZHJpdmVycy9uZXQvZXRob2MuYwpAQCAtNDA0LDcgKzQwNCw2IEBACiAJCQkJdm9pZCAqc3JjID0gcHJpdi0+bWVtYmFzZSArIGJkLmFkZHI7CiAJCQkJbWVtY3B5X2Zyb21pbyhza2JfcHV0KHNrYiwgc2l6ZSksIHNyYywgc2l6ZSk7CiAJCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQkJCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJCQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBzaXplOwogCQkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CkBAIC04MDIsNyArODAxLDcgQEAKIAlyZXR1cm4gJnByaXYtPnN0YXRzOwogfQogCi1zdGF0aWMgaW50IGV0aG9jX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBldGhvY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZXRob2NfYmQgYmQ7CkBAIC04OTQsNyArODkzLDcgQEAKIAogCW1taW8gPSBkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAogCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgcmVzLT5uYW1lKTsKLQlpZiAoIXJlcykgeworCWlmICghbW1pbykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVxdWVzdCBJL08gbWVtb3J5IHNwYWNlXG4iKTsKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGZyZWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ld3JrMy5jIGIvZHJpdmVycy9uZXQvZXdyazMuYwppbmRleCAxZTk3MjMyLi5iMmE1ZWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ld3JrMy5jCisrKyBiL2RyaXZlcnMvbmV0L2V3cmszLmMKQEAgLTI5OCw3ICsyOTgsNyBAQAogICAgKiogUHVibGljIEZ1bmN0aW9ucwogICovCiBzdGF0aWMgaW50IGV3cmszX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGV3cmszX3F1ZXVlX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBld3JrM19xdWV1ZV9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZXdyazNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgaW50IGV3cmszX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNzY0LDcgKzc2NCw3IEBACiAvKgogICAgKiogV3JpdGVzIGEgc29ja2V0IGJ1ZmZlciB0byB0aGUgZnJlZSBwYWdlIHF1ZXVlCiAgKi8KLXN0YXRpYyBpbnQgZXdyazNfcXVldWVfcGt0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGV3cmszX3F1ZXVlX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBld3JrM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwpAQCAtODY4LDcgKzg2OCw3IEBACiAJaWYgKGluYiAoRVdSSzNfRk1RQykgPT0gMCkKIAkJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGVycl9vdXQ6CiAJRU5BQkxFX0lSUXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWFsbnguYyBiL2RyaXZlcnMvbmV0L2ZlYWxueC5jCmluZGV4IDE2MDY1NWQuLjE4ZDVmYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYWxueC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlYWxueC5jCkBAIC00MzMsNyArNDMzLDcgQEAKIHN0YXRpYyB2b2lkIHJlc2V0X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBzdGF0aWMgdm9pZCBmZWFsbnhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGluaXRfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CiBzdGF0aWMgaW50IG5ldGRldl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTMwNSw3ICsxMzA1LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTM3OCw3ICsxMzc4LDcgQEAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWMuYyBiL2RyaXZlcnMvbmV0L2ZlYy5jCmluZGV4IGM5ZmQ4MmQuLmI0NzIwMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlYy5jCkBAIC0zNjcsNyArMzY3LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlcC0+aHdfbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQyNyw3ICs0MjcsNyBAQAogCXN0cnVjdAlza19idWZmCSpza2I7CiAKIAlmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXNwaW5fbG9ja19pcnEoJmZlcC0+aHdfbG9jayk7CisJc3Bpbl9sb2NrKCZmZXAtPmh3X2xvY2spOwogCWJkcCA9IGZlcC0+ZGlydHlfdHg7CiAKIAl3aGlsZSAoKChzdGF0dXMgPSBiZHAtPmNiZF9zYykgJiBCRF9FTkVUX1RYX1JFQURZKSA9PSAwKSB7CkBAIC00ODYsNyArNDg2LDcgQEAKIAkJfQogCX0KIAlmZXAtPmRpcnR5X3R4ID0gYmRwOwotCXNwaW5fdW5sb2NrX2lycSgmZmVwLT5od19sb2NrKTsKKwlzcGluX3VubG9jaygmZmVwLT5od19sb2NrKTsKIH0KIAogCkBAIC01MDksNyArNTA5LDcgQEAKIAlmbHVzaF9jYWNoZV9hbGwoKTsKICNlbmRpZgogCi0Jc3Bpbl9sb2NrX2lycSgmZmVwLT5od19sb2NrKTsKKwlzcGluX2xvY2soJmZlcC0+aHdfbG9jayk7CiAKIAkvKiBGaXJzdCwgZ3JhYiBhbGwgb2YgdGhlIHN0YXRzIGZvciB0aGUgaW5jb21pbmcgcGFja2V0LgogCSAqIFRoZXNlIGdldCBtZXNzZWQgdXAgaWYgd2UgZ2V0IGNhbGxlZCBkdWUgdG8gYSBidXN5IGNvbmRpdGlvbi4KQEAgLTYwNCw3ICs2MDQsNyBAQAogCX0KIAlmZXAtPmN1cl9yeCA9IGJkcDsKIAotCXNwaW5fdW5sb2NrX2lycSgmZmVwLT5od19sb2NrKTsKKwlzcGluX3VubG9jaygmZmVwLT5od19sb2NrKTsKIH0KIAogLyogY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KQEAgLTYxNSw3ICs2MTUsNyBAQAogCW1paV9saXN0X3QJKm1pcDsKIAogCWZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3Bpbl9sb2NrX2lycSgmZmVwLT5taWlfbG9jayk7CisJc3Bpbl9sb2NrKCZmZXAtPm1paV9sb2NrKTsKIAogCWlmICgobWlwID0gbWlpX2hlYWQpID09IE5VTEwpIHsKIAkJcHJpbnRrKCJNSUkgYW5kIG5vIGhlYWQhXG4iKTsKQEAgLTYzMywyMCArNjMzLDE5IEBACiAJCXdyaXRlbChtaXAtPm1paV9yZWd2YWwsIGZlcC0+aHdwICsgRkVDX01JSV9EQVRBKTsKIAogdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycSgmZmVwLT5taWlfbG9jayk7CisJc3Bpbl91bmxvY2soJmZlcC0+bWlpX2xvY2spOwogfQogCiBzdGF0aWMgaW50Ci1taWlfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHJlZ3ZhbCwgdm9pZCAoKmZ1bmMpKHVpbnQsIHN0cnVjdCBuZXRfZGV2aWNlICopKQorbWlpX3F1ZXVlX3VubG9ja2VkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCByZWd2YWwsCisJCXZvaWQgKCpmdW5jKSh1aW50LCBzdHJ1Y3QgbmV0X2RldmljZSAqKSkKIHsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwOwotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJbWlpX2xpc3RfdAkqbWlwOwogCWludAkJcmV0dmFsOwogCiAJLyogQWRkIFBIWSBhZGRyZXNzIHRvIHJlZ2lzdGVyIGNvbW1hbmQgKi8KIAlmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZmZXAtPm1paV9sb2NrLCBmbGFncyk7CiAKIAlyZWd2YWwgfD0gZmVwLT5waHlfYWRkciA8PCAyMzsKIAlyZXR2YWwgPSAwOwpAQCAtNjY3LDYgKzY2NiwxOSBAQAogCQlyZXR2YWwgPSAxOwogCX0KIAorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK21paV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcmVndmFsLAorCQl2b2lkICgqZnVuYykodWludCwgc3RydWN0IG5ldF9kZXZpY2UgKikpCit7CisJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJaW50ICAgICAgICAgICAgIHJldHZhbDsKKwlmZXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXNwaW5fbG9ja19pcnFzYXZlKCZmZXAtPm1paV9sb2NrLCBmbGFncyk7CisJcmV0dmFsID0gbWlpX3F1ZXVlX3VubG9ja2VkKGRldiwgcmVndmFsLCBmdW5jKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZXAtPm1paV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTEzNzMsMTEgKzEzODUsMTEgQEAKIAogCQkJLyogR290IGZpcnN0IHBhcnQgb2YgSUQsIG5vdyBnZXQgcmVtYWluZGVyICovCiAJCQlmZXAtPnBoeV9pZCA9IHBoeXR5cGUgPDwgMTY7Ci0JCQltaWlfcXVldWUoZGV2LCBta19taWlfcmVhZChNSUlfUkVHX1BIWUlSMiksCisJCQltaWlfcXVldWVfdW5sb2NrZWQoZGV2LCBta19taWlfcmVhZChNSUlfUkVHX1BIWUlSMiksCiAJCQkJCQkJbWlpX2Rpc2NvdmVyX3BoeTMpOwogCQl9IGVsc2UgewogCQkJZmVwLT5waHlfYWRkcisrOwotCQkJbWlpX3F1ZXVlKGRldiwgbWtfbWlpX3JlYWQoTUlJX1JFR19QSFlJUjEpLAorCQkJbWlpX3F1ZXVlX3VubG9ja2VkKGRldiwgbWtfbWlpX3JlYWQoTUlJX1JFR19QSFlJUjEpLAogCQkJCQkJCW1paV9kaXNjb3Zlcl9waHkpOwogCQl9CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggM2I0ZTA3Ni4uMGExYzJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTIxMzcsNyArMjEzNyw3IEBACiAgKiBudl9zdGFydF94bWl0OiBkZXYtPmhhcmRfc3RhcnRfeG1pdCBmdW5jdGlvbgogICogQ2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jayBoZWxkLgogICovCi1zdGF0aWMgaW50IG52X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBudl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgdHhfZmxhZ3MgPSAwOwpAQCAtMjI1Nyw3ICsyMjU3LDggQEAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi1zdGF0aWMgaW50IG52X3N0YXJ0X3htaXRfb3B0aW1pemVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbnZfc3RhcnRfeG1pdF9vcHRpbWl6ZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiB0eF9mbGFncyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWZlYy5jCmluZGV4IDc1YTA5OTkuLmEyZDY5YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWZlYy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vbXBjNXh4eC5oPgogCiAjaW5jbHVkZSAiZnNfZW5ldC5oIgogI2luY2x1ZGUgImZlYy5oIgpAQCAtMTAzLDExICsxMDQsMTEgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwogCXN0cnVjdCBtaWlfYnVzICpuZXdfYnVzOwogCXN0cnVjdCBmZWNfaW5mbyAqZmVjOwotCWludCByZXQgPSAtRU5PTUVNLCBpOworCWludCAoKmdldF9idXNfZnJlcSkoc3RydWN0IGRldmljZV9ub2RlICopID0gbWF0Y2gtPmRhdGE7CisJaW50IHJldCA9IC1FTk9NRU0sIGNsb2NrLCBzcGVlZDsKIAogCW5ld19idXMgPSBtZGlvYnVzX2FsbG9jKCk7CiAJaWYgKCFuZXdfYnVzKQpAQCAtMTMzLDEzICsxMzQsMzUgQEAKIAlpZiAoIWZlYy0+ZmVjcCkKIAkJZ290byBvdXRfZmVjOwogCi0JZmVjLT5taWlfc3BlZWQgPSAoKHBwY19wcm9jX2ZyZXEgKyA0OTk5OTk5KSAvIDUwMDAwMDApIDw8IDE7CisJaWYgKGdldF9idXNfZnJlcSkgeworCQljbG9jayA9IGdldF9idXNfZnJlcShvZmRldi0+bm9kZSk7CisJCWlmICghY2xvY2spIHsKKwkJCS8qIFVzZSBtYXhpbXVtIGRpdmlkZXIgaWYgY2xvY2sgaXMgdW5rbm93biAqLworCQkJZGV2X3dhcm4oJm9mZGV2LT5kZXYsICJjb3VsZCBub3QgZGV0ZXJtaW5lIElQUyBjbG9ja1xuIik7CisJCQljbG9jayA9IDB4M0YgKiA1MDAwMDAwOworCQl9CisJfSBlbHNlCisJCWNsb2NrID0gcHBjX3Byb2NfZnJlcTsKKworCS8qCisJICogU2NhbGUgZm9yIGEgTUlJIGNsb2NrIDw9IDIuNSBNSHoKKwkgKiBOb3RlIHRoYXQgb25seSA2IGJpdHMgKDI1OjMwKSBhcmUgYXZhaWxhYmxlIGZvciBNSUkgc3BlZWQuCisJICovCisJc3BlZWQgPSAoY2xvY2sgKyA0OTk5OTk5KSAvIDUwMDAwMDA7CisJaWYgKHNwZWVkID4gMHgzRikgeworCQlzcGVlZCA9IDB4M0Y7CisJCWRldl9lcnIoJm9mZGV2LT5kZXYsCisJCQkiTUlJIGNsb2NrICglZCBIeikgZXhjZWVkcyBtYXggKDIuNSBNSHopXG4iLAorCQkJY2xvY2sgLyBzcGVlZCk7CisJfQorCisJZmVjLT5taWlfc3BlZWQgPSBzcGVlZCA8PCAxOwogCiAJc2V0Yml0czMyKCZmZWMtPmZlY3AtPmZlY19yX2NudHJsLCBGRUNfUkNOVFJMX01JSV9NT0RFKTsKIAlzZXRiaXRzMzIoJmZlYy0+ZmVjcC0+ZmVjX2VjbnRybCwgRkVDX0VDTlRSTF9QSU5NVVggfAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRUNfRUNOVFJMX0VUSEVSX0VOKTsKIAlvdXRfYmUzMigmZmVjLT5mZWNwLT5mZWNfaWV2ZW50LCBGRUNfRU5FVF9NSUkpOwotCW91dF9iZTMyKCZmZWMtPmZlY3AtPmZlY19taWlfc3BlZWQsIGZlYy0+bWlpX3NwZWVkKTsKKwljbHJzZXRiaXRzX2JlMzIoJmZlYy0+ZmVjcC0+ZmVjX21paV9zcGVlZCwgMHg3RSwgZmVjLT5taWlfc3BlZWQpOwogCiAJbmV3X2J1cy0+cGh5X21hc2sgPSB+MDsKIAluZXdfYnVzLT5pcnEgPSBrbWFsbG9jKHNpemVvZihpbnQpICogUEhZX01BWF9BRERSLCBHRlBfS0VSTkVMKTsKQEAgLTE4OCw2ICsyMTEsMTIgQEAKIAl7CiAJCS5jb21wYXRpYmxlID0gImZzbCxwcTEtZmVjLW1kaW8iLAogCX0sCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX01QQzUxMngpCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1mZWMtbWRpbyIsCisJCS5kYXRhID0gbXBjNXh4eF9nZXRfYnVzX2ZyZXF1ZW5jeSwKKwl9LAorI2VuZGlmCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggYTAwZWM2My4uMWU1Mjg5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtMjk3LDcgKzI5Nyw2IEBACiAJdTMyIHRlbXB2YWw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IE5VTEw7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAJaW50IGVyciA9IDA7CiAJaW50IGxlbl9kZXZuYW1lOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKaW5kZXggZDYyMzc4Yy4uMWQ1MDY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwpAQCAtNTU3LDcgKzU1Nyw4IEBACiBzdGF0aWMgdm9pZCBoYW1hY2hpX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBzdGF0aWMgdm9pZCBoYW1hY2hpX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBoYW1hY2hpX2luaXRfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgaGFtYWNoaV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGhhbWFjaGlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGhhbWFjaGlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CiBzdGF0aWMgaW50IGhhbWFjaGlfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW5saW5lIGludCBoYW1hY2hpX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTI2Myw3ICsxMjY0LDggQEAKIH0gd2hpbGUgKDApCiAjZW5kaWYKIAotc3RhdGljIGludCBoYW1hY2hpX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBoYW1hY2hpX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBoYW1hY2hpX3ByaXZhdGUgKmhtcCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgZW50cnk7CkBAIC0xMzcyLDcgKzEzNzQsNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEhhbWFjaGkgdHJhbnNtaXQgZnJhbWUgIyVkIHF1ZXVlZCBpbiBzbG90ICVkLlxuIiwKIAkJCSAgIGRldi0+bmFtZSwgaG1wLT5jdXJfdHgsIGVudHJ5KTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgYWxsIG9mIHRoZSBSeCB0aHJlYWQgd29yayBhbmQgY2xlYW5zIHVwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwppbmRleCA5ODFhYjUzLi5mYjU4ODMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCiAvKiBFbmNhcHN1bGF0ZSBhbiBJUCBkYXRhZ3JhbSBhbmQga2ljayBpdCBpbnRvIGEgVFRZIHF1ZXVlLiAqLwogCi1zdGF0aWMgaW50IHNwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNpeHBhY2sgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMjU1LDcgKzI1NSw3IEBACiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IHNwX29wZW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKaW5kZXggMzUyNzAzMi4uN2JjYWY3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYwpAQCAtNzc0LDE4ICs3NzQsMTggQEAKIAlpZiAoc2tiLT5kYXRhWzBdICE9IDApIHsKIAkJZG9fa2lzc19wYXJhbXMoYmMsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlpZiAoYmMtPnNrYikKIAkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7CiAJLyogc3RyaXAgS0lTUyBieXRlICovCiAJaWYgKHNrYi0+bGVuID49IEhETENEUlZfTUFYRkxFTisxIHx8IHNrYi0+bGVuIDwgMykgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJYmMtPnNrYiA9IHNrYjsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCmluZGV4IGFiY2QxOWEuLmZlODkzYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwpAQCAtMjQ3LDkgKzI0Nyw4IEBACiAvKgogICogCVNlbmQgYW4gQVguMjUgZnJhbWUgdmlhIGFuIGV0aGVybmV0IGludGVyZmFjZQogICovCi1zdGF0aWMgaW50IGJwcV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYnBxX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2tiOwogCXVuc2lnbmVkIGNoYXIgKnB0cjsKIAlzdHJ1Y3QgYnBxZGV2ICpicHE7CiAJaW50IHNpemU7CkBAIC0yNjMsMjggKzI2MiwyMyBAQAogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAotCXNrYl9wdWxsKHNrYiwgMSk7CisJc2tiX3B1bGwoc2tiLCAxKTsJCQkvKiBEcm9wIEtJU1MgYnl0ZSAqLwogCXNpemUgPSBza2ItPmxlbjsKIAogCS8qCi0JICogVGhlIEFYLjI1IGNvZGUgbGVhdmVzIGVub3VnaCByb29tIGZvciB0aGUgZXRoZXJuZXQgaGVhZGVyLCBidXQKLQkgKiBzZW5kdG8oKSBkb2VzIG5vdC4KKwkgKiBXZSdyZSBhYm91dCB0byBtZXNzIHdpdGggdGhlIHNrYiB3aGljaCBtYXkgc3RpbGwgc2hhcmVkIHdpdGggdGhlCisJICogZ2VuZXJpYyBuZXR3b3JraW5nIGNvZGUgc28gdW5zaGFyZSBhbmQgZW5zdXJlIGl0J3MgZ290IGVub3VnaAorCSAqIHNwYWNlIGZvciB0aGUgQlBRIGhlYWRlcnMuCiAJICovCi0JaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgQVgyNV9CUFFfSEVBREVSX0xFTikgewkvKiBPdWdoISAqLwotCQlpZiAoKG5ld3NrYiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgQVgyNV9CUFFfSEVBREVSX0xFTikpID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJwcWV0aGVyOiBvdXQgb2YgbWVtb3J5XG4iKTsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQkJfQotCi0JCWlmIChza2ItPnNrICE9IE5VTEwpCi0JCQlza2Jfc2V0X293bmVyX3cobmV3c2tiLCBza2ItPnNrKTsKLQorCWlmIChza2JfY293KHNrYiwgQVgyNV9CUFFfSEVBREVSX0xFTikpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByX2VycigiYnBxZXRoZXI6IG91dCBvZiBtZW1vcnlcbiIpOwogCQlrZnJlZV9za2Ioc2tiKTsKLQkJc2tiID0gbmV3c2tiOworCisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCi0JcHRyID0gc2tiX3B1c2goc2tiLCAyKTsKKwlwdHIgPSBza2JfcHVzaChza2IsIDIpOwkJCS8qIE1ha2Ugc3BhY2UgZm9yIGxlbmd0aCAqLwogCiAJKnB0cisrID0gKHNpemUgKyA1KSAlIDI1NjsKIAkqcHRyKysgPSAoc2l6ZSArIDUpIC8gMjU2OwpAQCAtMzA1LDcgKzI5OSw3IEBACiAgIAogCWRldl9xdWV1ZV94bWl0KHNrYik7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jCmluZGV4IDc0NTliM2EuLjk1MGYzYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jCkBAIC05NTksNyArOTU5LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yaW5nX2xvY2ssIGZsYWdzKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYwppbmRleCBkMDM0ZjhjLi4wMDEzYzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCkBAIC0zOTksMjAgKzM5OSwyMSBAQAogICogPT09PT09PT09PT09PT09PT09PT09IG5ldHdvcmsgZHJpdmVyIGludGVyZmFjZSA9PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KIAotc3RhdGljIGludCBoZGxjZHJ2X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaGRsY2Rydl9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBoZGxjZHJ2X3N0YXRlICpzbSA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAoc2tiLT5kYXRhWzBdICE9IDApIHsKIAkJZG9fa2lzc19wYXJhbXMoc20sIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlpZiAoc20tPnNrYikKIAkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXNtLT5za2IgPSBza2I7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwppbmRleCBmZGEyZmM4Li4zM2I1NWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKQEAgLTUyNSw3ICs1MjUsNyBAQAogfQogCiAvKiBFbmNhcHN1bGF0ZSBhbiBBWC4yNSBwYWNrZXQgYW5kIGtpY2sgaXQgaW50byBhIFRUWSBxdWV1ZS4gKi8KLXN0YXRpYyBpbnQgYXhfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGF4X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWtpc3MgKmF4ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtNTYwLDcgKzU2MCw3IEBACiAJCWtmcmVlX3NrYihza2IpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbnQgYXhfb3Blbl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKaW5kZXggZDcxMmU3YS4uMzVjOTM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKQEAgLTIwOSw3ICsyMDksOCBAQAogc3RhdGljIGludCBzY2NfbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNjY19uZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzY2NfbmV0X3J4KHN0cnVjdCBzY2NfY2hhbm5lbCAqc2NjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBpbnQgc2NjX25ldF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBzY2NfbmV0X3R4KHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2NjX25ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7CiBzdGF0aWMgaW50IHNjY19uZXRfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICogc2NjX25ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xNjM0LDcgKzE2MzUsNyBAQAogCiAvKiAtLS0tPiB0cmFuc21pdCBmcmFtZSA8LS0tLSAqLwogCi1zdGF0aWMgaW50IHNjY19uZXRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzY2NfbmV0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNjY19jaGFubmVsICpzY2MgPSAoc3RydWN0IHNjY19jaGFubmVsICopIGRldi0+bWxfcHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTY0Myw3ICsxNjQ0LDcgQEAKIAlpZiAoc2tiLT5sZW4gPiBzY2MtPnN0YXQuYnVmc2l6ZSB8fCBza2ItPmxlbiA8IDIpIHsKIAkJc2NjLT5kZXZfc3RhdC50eF9kcm9wcGVkKys7CS8qIGJvZ3VzIGZyYW1lICovCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCQogCXNjYy0+ZGV2X3N0YXQudHhfcGFja2V0cysrOwpAQCAtMTY1Niw3ICsxNjU3LDcgQEAKIAlpZiAoa2lzc2NtZCkgewogCQlzY2Nfc2V0X3BhcmFtKHNjYywga2lzc2NtZCwgKnNrYi0+ZGF0YSk7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNjYy0+bG9jaywgZmxhZ3MpOwpAQCAtMTY4NCw3ICsxNjg1LDcgQEAKIAkJCV9fc2NjX3N0YXJ0X3R4X3RpbWVyKHNjYywgdF9kd2FpdCwgMCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjYy0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIC0tLS0+IGlvY3RsIGZ1bmN0aW9ucyA8LS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwppbmRleCBiMDY2OTE5Li42OTQxMzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwpAQCAtNTk0LDEzICs1OTQsMTQgQEAKIAlvdXRiKFBUVF9PRkYsIE1DUihkZXYtPmJhc2VfYWRkcikpOwogfQogCi1zdGF0aWMgaW50IHlhbV9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHlhbV9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgeWFtX3BvcnQgKnlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXNrYl9xdWV1ZV90YWlsKCZ5cC0+c2VuZF9xdWV1ZSwgc2tiKTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCB5YW1fc3RhcnRfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHlhbV9wb3J0ICp5cCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwMTAwLmMgYi9kcml2ZXJzL25ldC9ocDEwMC5jCmluZGV4IDFkMzQyOWEuLmE5YTFhOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvaHAxMDAuYwpAQCAtMjQwLDkgKzI0MCwxMCBAQAogCiBzdGF0aWMgaW50IGhwMTAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGhwMTAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBocDEwMF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBocDEwMF9zdGFydF94bWl0X2JtKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgaHAxMDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBocDEwMF9zdGFydF94bWl0X2JtKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgaHAxMDBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmhwMTAwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGhwMTAwX21pc2NfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTQ4Myw3ICsxNDg0LDggQEAKICAqLwogCiAvKiB0eCBmdW5jdGlvbiBmb3IgYnVzbWFzdGVyIG1vZGUgKi8KLXN0YXRpYyBpbnQgaHAxMDBfc3RhcnRfeG1pdF9ibShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGhwMTAwX3N0YXJ0X3htaXRfYm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCBva19mbGFnOwpAQCAtMTQ5OSw3ICsxNTAxLDcgQEAKIAkJZ290byBkcm9wOwogCiAJaWYgKGxwLT5jaGlwID09IEhQMTAwX0NISVBJRF9TSEFTVEEgJiYgc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogCS8qIEdldCBUeCByaW5nIHRhaWwgcG9pbnRlciAqLwogCWlmIChscC0+dHhydGFpbC0+bmV4dCA9PSBscC0+dHhyaGVhZCkgewpAQCAtMTU4NSw3ICsxNTg3LDcgQEAKIAlscC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBkcm9wOgogCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTE2MzUsNyArMTYzNyw4IEBACiB9CiAKIC8qIHR4IGZ1bmN0aW9uIGZvciBzbGF2ZSBtb2RlcyAqLwotc3RhdGljIGludCBocDEwMF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaHAxMDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIG9rX2ZsYWc7CkBAIC0xNzUyLDcgKzE3NTUsNyBAQAogCXByaW50aygiaHAxMDA6ICVzOiBzdGFydF94bWl0OiBlbmRcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGRyb3A6CiAJZGV2X2tmcmVlX3NrYihza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlkcmEuYyBiL2RyaXZlcnMvbmV0L2h5ZHJhLmMKaW5kZXggOGFjMDkzMC4uZDQ5NmI2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHlkcmEuYworKysgYi9kcml2ZXJzL25ldC9oeWRyYS5jCkBAIC0xNzMsOSArMTczLDkgQEAKIAogICAgIHpvcnJvX3NldF9kcnZkYXRhKHosIGRldik7CiAKLSAgICBwcmludGsoS0VSTl9JTkZPICIlczogSHlkcmEgYXQgMHglMDhseCwgYWRkcmVzcyAiCisgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEh5ZHJhIGF0IDB4JTA4bGx4LCBhZGRyZXNzICIKIAkgICAiJXBNIChoeWRyYS5jICIgSFlEUkFfVkVSU0lPTiAiKVxuIiwKLQkgICBkZXYtPm5hbWUsIHotPnJlc291cmNlLnN0YXJ0LCBkZXYtPmRldl9hZGRyKTsKKwkgICBkZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpei0+cmVzb3VyY2Uuc3RhcnQsIGRldi0+ZGV2X2FkZHIpOwogCiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKaW5kZXggZjBmODkwOC4uMWQ3ZDdmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwpAQCAtMTM0NCw3ICsxMzQ0LDcgQEAKIAkrK2Rldi0+c3RhdHMudHhfcGFja2V0czsKIAlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFR4IGxvY2sgQkggKi8KQEAgLTIyMDksNyArMjIwOSw3IEBACiBzdGF0aWMgaW50IGVtYWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiB7CiAJc3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldiA9IG5ldGRldl9wcml2KG5kZXYpOwotCXVpbnQxNl90ICpkYXRhID0gKHVpbnQxNl90ICopICYgcnEtPmlmcl9pZnJ1OworCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShycSk7CiAKIAlEQkcoZGV2LCAiaW9jdGwgJTA4eCIgTkwsIGNtZCk7CiAKQEAgLTIyMTgsMTkgKzIyMTgsMTYgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR01JSVBIWToKLQljYXNlIFNJT0NERVZQUklWQVRFOgotCQlkYXRhWzBdID0gZGV2LT5waHkuYWRkcmVzczsKKwkJZGF0YS0+cGh5X2lkID0gZGV2LT5waHkuYWRkcmVzczsKIAkJLyogRmFsbCB0aHJvdWdoICovCiAJY2FzZSBTSU9DR01JSVJFRzoKLQljYXNlIFNJT0NERVZQUklWQVRFICsgMToKLQkJZGF0YVszXSA9IGVtYWNfbWRpb19yZWFkKG5kZXYsIGRldi0+cGh5LmFkZHJlc3MsIGRhdGFbMV0pOworCQlkYXRhLT52YWxfb3V0ID0gZW1hY19tZGlvX3JlYWQobmRldiwgZGV2LT5waHkuYWRkcmVzcywKKwkJCQkJICAgICAgIGRhdGEtPnJlZ19udW0pOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgU0lPQ1NNSUlSRUc6Ci0JY2FzZSBTSU9DREVWUFJJVkFURSArIDI6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JCWVtYWNfbWRpb193cml0ZShuZGV2LCBkZXYtPnBoeS5hZGRyZXNzLCBkYXRhWzFdLCBkYXRhWzJdKTsKKwkJZW1hY19tZGlvX3dyaXRlKG5kZXYsIGRldi0+cGh5LmFkZHJlc3MsIGRhdGEtPnJlZ19udW0sCisJCQkJZGF0YS0+dmFsX2luKTsKIAkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCmluZGV4IDQ0ODA5OGQuLjA5MGE2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libWxhbmEuYworKysgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKQEAgLTgxMiw3ICs4MTIsNyBAQAogCiAvKiB0cmFuc21pdCBhIGJsb2NrLiAqLwogCi1zdGF0aWMgaW50IGlibWxhbmFfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBpYm1sYW5hX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaWJtbGFuYV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgdG1wbGVuLCBhZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IDA5OTVjNDMuLjU4NjIyODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTg4Nyw3ICs4ODcsOCBAQAogCiAjZGVmaW5lIHBhZ2Vfb2Zmc2V0KHYpICgodW5zaWduZWQgbG9uZykodikgJiAoKDEgPDwgMTIpIC0gMSkpCiAKLXN0YXRpYyBpbnQgaWJtdmV0aF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaWJtdmV0aF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1bmlvbiBpYm12ZXRoX2J1Zl9kZXNjIGRlc2M7CkBAIC05NzEsNyArOTcyLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBmbGFncyk7CiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBpYm12ZXRoX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWZiLmMgYi9kcml2ZXJzL25ldC9pZmIuYwppbmRleCA5NjcxM2VmLi44MDFmMDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZmIuYworKysgYi9kcml2ZXJzL25ldC9pZmIuYwpAQCAtNTksNyArNTksNyBAQAogc3RhdGljIGludCBudW1pZmJzID0gMjsKIAogc3RhdGljIHZvaWQgcmlfdGFza2xldCh1bnNpZ25lZCBsb25nIGRldik7Ci1zdGF0aWMgaW50IGlmYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGlmYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBpZmJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgaWZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCkBAIC0xNjAsMTEgKzE2MCwxMCBAQAogCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwogfQogCi1zdGF0aWMgaW50IGlmYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaWZiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaWZiX3ByaXZhdGUgKmRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKLQlpbnQgcmV0ID0gMDsKIAl1MzIgZnJvbSA9IEdfVENfRlJPTShza2ItPnRjX3ZlcmQpOwogCiAJc3RhdHMtPnJ4X3BhY2tldHMrKzsKQEAgLTE3Myw3ICsxNzIsNyBAQAogCWlmICghKGZyb20gJiAoQVRfSU5HUkVTU3xBVF9FR1JFU1MpKSB8fCAhc2tiLT5paWYpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlzdGF0cy0+cnhfZHJvcHBlZCsrOwotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCWlmIChza2JfcXVldWVfbGVuKCZkcC0+cnEpID49IGRldi0+dHhfcXVldWVfbGVuKSB7CkBAIC0xODcsNyArMTg2LDcgQEAKIAkJdGFza2xldF9zY2hlZHVsZSgmZHAtPmlmYl90YXNrbGV0KTsKIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbnQgaWZiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jCmluZGV4IGFjMjhkZDUuLjYxNThjMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jCkBAIC01Myw3ICs1Myw3IEBACiBzdGF0aWMgczMyICBpZ2Jfd3JpdGVfcGh5X3JlZ19zZ21paV84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyLCB1MTYpOwogc3RhdGljIHZvaWQgaWdiX2NsZWFyX2h3X2NudHJzXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqKTsKIHN0YXRpYyBzMzIgIGlnYl9hY3F1aXJlX3N3Zndfc3luY184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKLXN0YXRpYyBzMzIgIGlnYl9jb25maWd1cmVfcGNzX2xpbmtfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOworc3RhdGljIHZvaWQgaWdiX2NvbmZpZ3VyZV9wY3NfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CiBzdGF0aWMgczMyICBpZ2JfZ2V0X3Bjc19zcGVlZF9hbmRfZHVwbGV4XzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqLCB1MTYgKiwKIAkJCQkJCSB1MTYgKik7CiBzdGF0aWMgczMyICBpZ2JfZ2V0X3BoeV9pZF84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CkBAIC02MSw2ICs2MSw3IEBACiBzdGF0aWMgYm9vbCBpZ2Jfc2dtaWlfYWN0aXZlXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqKTsKIHN0YXRpYyBzMzIgIGlnYl9yZXNldF9pbml0X3NjcmlwdF84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CiBzdGF0aWMgczMyICBpZ2JfcmVhZF9tYWNfYWRkcl84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CitzdGF0aWMgczMyICBpZ2Jfc2V0X3BjaWVfY29tcGxldGlvbl90aW1lb3V0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCiBzdGF0aWMgczMyIGlnYl9nZXRfaW52YXJpYW50c184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewpAQCAtODQsNiArODUsNyBAQAogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X0ZJQkVSOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X1NFUkRFUzoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9RVUFEX0NPUFBFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVNfUVVBRDoKIAkJbWFjLT50eXBlID0gZTEwMDBfODI1NzY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNzAsNiArMTcyLDEwIEBACiAJCXNpemUgPSAxNDsKIAludm0tPndvcmRfc2l6ZSA9IDEgPDwgc2l6ZTsKIAorCS8qIGlmIDgyNTc2IHRoZW4gaW5pdGlhbGl6ZSBtYWlsYm94IHBhcmFtZXRlcnMgKi8KKwlpZiAobWFjLT50eXBlID09IGUxMDAwXzgyNTc2KQorCQlpZ2JfaW5pdF9tYnhfcGFyYW1zX3BmKGh3KTsKKwogCS8qIHNldHVwIFBIWSBwYXJhbWV0ZXJzICovCiAJaWYgKHBoeS0+bWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQlwaHktPnR5cGUgPSBlMTAwMF9waHlfbm9uZTsKQEAgLTIxOSwxMCArMjI1LDYgQEAKIAkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwogCX0KIAotCS8qIGlmIDgyNTc2IHRoZW4gaW5pdGlhbGl6ZSBtYWlsYm94IHBhcmFtZXRlcnMgKi8KLQlpZiAobWFjLT50eXBlID09IGUxMDAwXzgyNTc2KQotCQlpZ2JfaW5pdF9tYnhfcGFyYW1zX3BmKGh3KTsKLQogCXJldHVybiAwOwogfQogCkBAIC03NjQsOTggKzc2Niw2IEBACiB9CiAKIC8qKgotICogIGlnYl9pbml0X3J4X2FkZHJzXzgyNTc1IC0gSW5pdGlhbGl6ZSByZWNlaXZlIGFkZHJlc3MncwotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKiAgQHJhcl9jb3VudDogcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVycwotICoKLSAqICBTZXR1cHMgdGhlIHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlcnMgYnkgc2V0dGluZyB0aGUgYmFzZSByZWNlaXZlIGFkZHJlc3MKLSAqICByZWdpc3RlciB0byB0aGUgZGV2aWNlcyBNQUMgYWRkcmVzcyBhbmQgY2xlYXJpbmcgYWxsIHRoZSBvdGhlciByZWNlaXZlCi0gKiAgYWRkcmVzcyByZWdpc3RlcnMgdG8gMC4KLSAqKi8KLXN0YXRpYyB2b2lkIGlnYl9pbml0X3J4X2FkZHJzXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiByYXJfY291bnQpCi17Ci0JdTMyIGk7Ci0JdTggYWRkcls2XSA9IHswLDAsMCwwLDAsMH07Ci0JLyoKLQkgKiBUaGlzIGZ1bmN0aW9uIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIHRoYXQgb2YKLQkgKiBlMTAwMF9pbml0X3J4X2FkZHJzX2dlbmVyaWMuIEhvd2V2ZXIgaXQgYWxzbyB0YWtlcyBjYXJlCi0JICogb2YgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0IG9mIHRoZQotCSAqIHNlY29uZCBzZXQgb2YgUkFScyBiZWdpbnMgZWxzZXdoZXJlLiBUaGlzIGlzIGltcGxpY2l0bHkgdGFrZW4gY2FyZSBieQotCSAqIGZ1bmN0aW9uIGUxMDAwX3Jhcl9zZXRfZ2VuZXJpYy4KLQkgKi8KLQotCWh3X2RiZygiZTEwMDBfaW5pdF9yeF9hZGRyc184MjU3NSIpOwotCi0JLyogU2V0dXAgdGhlIHJlY2VpdmUgYWRkcmVzcyAqLwotCWh3X2RiZygiUHJvZ3JhbW1pbmcgTUFDIEFkZHJlc3MgaW50byBSQVJbMF1cbiIpOwotCWh3LT5tYWMub3BzLnJhcl9zZXQoaHcsIGh3LT5tYWMuYWRkciwgMCk7Ci0KLQkvKiBaZXJvIG91dCB0aGUgb3RoZXIgKHJhcl9lbnRyeV9jb3VudCAtIDEpIHJlY2VpdmUgYWRkcmVzc2VzICovCi0JaHdfZGJnKCJDbGVhcmluZyBSQVJbMS0ldV1cbiIsIHJhcl9jb3VudC0xKTsKLQlmb3IgKGkgPSAxOyBpIDwgcmFyX2NvdW50OyBpKyspCi0JICAgIGh3LT5tYWMub3BzLnJhcl9zZXQoaHcsIGFkZHIsIGkpOwotfQotCi0vKioKLSAqICBpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdCAtIFVwZGF0ZSBNdWx0aWNhc3QgYWRkcmVzc2VzCi0gKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqICBAbWNfYWRkcl9saXN0OiBhcnJheSBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KLSAqICBAbWNfYWRkcl9jb3VudDogbnVtYmVyIG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQotICogIEByYXJfdXNlZF9jb3VudDogdGhlIGZpcnN0IFJBUiByZWdpc3RlciBmcmVlIHRvIHByb2dyYW0KLSAqICBAcmFyX2NvdW50OiB0b3RhbCBudW1iZXIgb2Ygc3VwcG9ydGVkIFJlY2VpdmUgQWRkcmVzcyBSZWdpc3RlcnMKLSAqCi0gKiAgVXBkYXRlcyB0aGUgUmVjZWl2ZSBBZGRyZXNzIFJlZ2lzdGVycyBhbmQgTXVsdGljYXN0IFRhYmxlIEFycmF5LgotICogIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGEgcGFja2VkIG1jX2FkZHJfbGlzdCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzLgotICogIFRoZSBwYXJhbWV0ZXIgcmFyX2NvdW50IHdpbGwgdXN1YWxseSBiZSBody0+bWFjLnJhcl9lbnRyeV9jb3VudAotICogIHVubGVzcyB0aGVyZSBhcmUgd29ya2Fyb3VuZHMgdGhhdCBjaGFuZ2UgdGhpcy4KLSAqKi8KLXZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3Qoc3RydWN0IGUxMDAwX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiByYXJfdXNlZF9jb3VudCwgdTMyIHJhcl9jb3VudCkKLXsKLQl1MzIgaGFzaF92YWx1ZTsKLQl1MzIgaTsKLQl1OCBhZGRyWzZdID0gezAsMCwwLDAsMCwwfTsKLQkvKgotCSAqIFRoaXMgZnVuY3Rpb24gaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgdGhhdCBvZiAKLQkgKiBpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdF9nZW5lcmljLiBIb3dldmVyIGl0IGFsc28gdGFrZXMgY2FyZSAKLQkgKiBvZiB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSByZWdpc3RlciBvZmZzZXQgb2YgdGhlIAotCSAqIHNlY29uZCBzZXQgb2YgUkFScyBiZWdpbnMgZWxzZXdoZXJlLiBUaGlzIGlzIGltcGxpY2l0bHkgdGFrZW4gY2FyZSBieSAKLQkgKiBmdW5jdGlvbiBlMTAwMF9yYXJfc2V0X2dlbmVyaWMuCi0JICovCi0KLQkvKgotCSAqIExvYWQgdGhlIGZpcnN0IHNldCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIGludG8gdGhlIGV4YWN0Ci0JICogZmlsdGVycyAoUkFSKS4gIElmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHRvIGZpbGwgdGhlIFJBUgotCSAqIGFycmF5LCBjbGVhciB0aGUgZmlsdGVycy4KLQkgKi8KLQlmb3IgKGkgPSByYXJfdXNlZF9jb3VudDsgaSA8IHJhcl9jb3VudDsgaSsrKSB7Ci0JCWlmIChtY19hZGRyX2NvdW50KSB7Ci0JCQlpZ2JfcmFyX3NldChodywgbWNfYWRkcl9saXN0LCBpKTsKLQkJCW1jX2FkZHJfY291bnQtLTsKLQkJCW1jX2FkZHJfbGlzdCArPSBFVEhfQUxFTjsKLQkJfSBlbHNlIHsKLQkJCWlnYl9yYXJfc2V0KGh3LCBhZGRyLCBpKTsKLQkJfQotCX0KLQotCS8qIENsZWFyIHRoZSBvbGQgc2V0dGluZ3MgZnJvbSB0aGUgTVRBICovCi0JaHdfZGJnKCJDbGVhcmluZyBNVEFcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBody0+bWFjLm10YV9yZWdfY291bnQ7IGkrKykgewotCQlhcnJheV93cjMyKEUxMDAwX01UQSwgaSwgMCk7Ci0JCXdyZmwoKTsKLQl9Ci0KLQkvKiBMb2FkIGFueSByZW1haW5pbmcgbXVsdGljYXN0IGFkZHJlc3NlcyBpbnRvIHRoZSBoYXNoIHRhYmxlLiAqLwotCWZvciAoOyBtY19hZGRyX2NvdW50ID4gMDsgbWNfYWRkcl9jb3VudC0tKSB7Ci0JCWhhc2hfdmFsdWUgPSBpZ2JfaGFzaF9tY19hZGRyKGh3LCBtY19hZGRyX2xpc3QpOwotCQlod19kYmcoIkhhc2ggdmFsdWUgPSAweCUwM1hcbiIsIGhhc2hfdmFsdWUpOwotCQlpZ2JfbXRhX3NldChodywgaGFzaF92YWx1ZSk7Ci0JCW1jX2FkZHJfbGlzdCArPSBFVEhfQUxFTjsKLQl9Ci19Ci0KLS8qKgogICogIGlnYl9zaHV0ZG93bl9maWJlcl9zZXJkZXNfbGlua184MjU3NSAtIFJlbW92ZSBsaW5rIGR1cmluZyBwb3dlciBkb3duCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCkBAIC04NjYsOSArNzc2LDcgQEAKIHsKIAl1MzIgcmVnOwogCi0JaWYgKGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NiB8fAotCSAgICAoaHctPnBoeS5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfZmliZXIgJiYKLQkgICAgIGh3LT5waHkubWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykpCisJaWYgKGh3LT5waHkubWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykKIAkJcmV0dXJuOwogCiAJLyogaWYgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGlzIG5vdCBlbmFibGVkLCB0aGVuIHBvd2VyIGRvd24gKi8KQEAgLTkxMSw2ICs4MTksMTIgQEAKIAlpZiAocmV0X3ZhbCkKIAkJaHdfZGJnKCJQQ0ktRSBNYXN0ZXIgZGlzYWJsZSBwb2xsaW5nIGhhcyBmYWlsZWQuXG4iKTsKIAorCS8qIHNldCB0aGUgY29tcGxldGlvbiB0aW1lb3V0IGZvciBpbnRlcmZhY2UgKi8KKwlyZXRfdmFsID0gaWdiX3NldF9wY2llX2NvbXBsZXRpb25fdGltZW91dChodyk7CisJaWYgKHJldF92YWwpIHsKKwkJaHdfZGJnKCJQQ0ktRSBTZXQgY29tcGxldGlvbiB0aW1lb3V0IGhhcyBmYWlsZWQuXG4iKTsKKwl9CisKIAlod19kYmcoIk1hc2tpbmcgb2ZmIGFsbCBpbnRlcnJ1cHRzXG4iKTsKIAl3cjMyKEUxMDAwX0lNQywgMHhmZmZmZmZmZik7CiAKQEAgLTk0Myw3ICs4NTcsOCBAQAogCXdyMzIoRTEwMDBfSU1DLCAweGZmZmZmZmZmKTsKIAlpY3IgPSByZDMyKEUxMDAwX0lDUik7CiAKLQlpZ2JfY2hlY2tfYWx0X21hY19hZGRyKGh3KTsKKwkvKiBJbnN0YWxsIGFueSBhbHRlcm5hdGUgTUFDIGFkZHJlc3MgaW50byBSQVIwICovCisJcmV0X3ZhbCA9IGlnYl9jaGVja19hbHRfbWFjX2FkZHIoaHcpOwogCiAJcmV0dXJuIHJldF92YWw7CiB9CkBAIC05NzIsNyArODg3LDggQEAKIAlpZ2JfY2xlYXJfdmZ0YShodyk7CiAKIAkvKiBTZXR1cCB0aGUgcmVjZWl2ZSBhZGRyZXNzICovCi0JaWdiX2luaXRfcnhfYWRkcnNfODI1NzUoaHcsIHJhcl9jb3VudCk7CisJaWdiX2luaXRfcnhfYWRkcnMoaHcsIHJhcl9jb3VudCk7CisKIAkvKiBaZXJvIG91dCB0aGUgTXVsdGljYXN0IEhBU0ggdGFibGUgKi8KIAlod19kYmcoIlplcm9pbmcgdGhlIE1UQVxuIik7CiAJZm9yIChpID0gMDsgaSA8IG1hYy0+bXRhX3JlZ19jb3VudDsgaSsrKQpAQCAtMTAwMiw3ICs5MTgsNyBAQAogICoqLwogc3RhdGljIHMzMiBpZ2Jfc2V0dXBfY29wcGVyX2xpbmtfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLQl1MzIgY3RybCwgbGVkX2N0cmw7CisJdTMyIGN0cmw7CiAJczMyICByZXRfdmFsOwogCWJvb2wgbGluazsKIApAQCAtMTAxNywxMSArOTMzLDYgQEAKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF9waHlfaWdwXzM6CiAJCXJldF92YWwgPSBpZ2JfY29wcGVyX2xpbmtfc2V0dXBfaWdwKGh3KTsKLQkJLyogU2V0dXAgYWN0aXZpdHkgTEVEICovCi0JCWxlZF9jdHJsID0gcmQzMihFMTAwMF9MRURDVEwpOwotCQlsZWRfY3RybCAmPSBJR1BfQUNUSVZJVFlfTEVEX01BU0s7Ci0JCWxlZF9jdHJsIHw9IChJR1BfQUNUSVZJVFlfTEVEX0VOQUJMRSB8IElHUF9MRUQzX01PREUpOwotCQl3cjMyKEUxMDAwX0xFRENUTCwgbGVkX2N0cmwpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9QSFk7CkBAIC0xMDUyLDkgKzk2Myw3IEBACiAJCX0KIAl9CiAKLQlyZXRfdmFsID0gaWdiX2NvbmZpZ3VyZV9wY3NfbGlua184MjU3NShodyk7Ci0JaWYgKHJldF92YWwpCi0JCWdvdG8gb3V0OworCWlnYl9jb25maWd1cmVfcGNzX2xpbmtfODI1NzUoaHcpOwogCiAJLyoKIAkgKiBDaGVjayBsaW5rIHN0YXR1cy4gV2FpdCB1cCB0byAxMDAgbWljcm9zZWNvbmRzIGZvciBsaW5rIHRvIGJlY29tZQpAQCAtMTE2MywxNCArMTA3MiwxNCBAQAogICogIGluZGVwZW5kZW50IGludGVyZmFjZSAoc2dtaWkpIGlzIGJlaW5nIHVzZWQuICBDb25maWd1cmVzIHRoZSBsaW5rCiAgKiAgZm9yIGF1dG8tbmVnb3RpYXRpb24gb3IgZm9yY2VzIHNwZWVkL2R1cGxleC4KICAqKi8KLXN0YXRpYyBzMzIgaWdiX2NvbmZpZ3VyZV9wY3NfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorc3RhdGljIHZvaWQgaWdiX2NvbmZpZ3VyZV9wY3NfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CiAJdTMyIHJlZyA9IDA7CiAKIAlpZiAoaHctPnBoeS5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyIHx8CiAJICAgICEoaWdiX3NnbWlpX2FjdGl2ZV84MjU3NShodykpKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCiAJLyogRm9yIFNHTUlJLCB3ZSBuZWVkIHRvIGlzc3VlIGEgUENTIGF1dG9uZWcgcmVzdGFydCAqLwogCXJlZyA9IHJkMzIoRTEwMDBfUENTX0xDVEwpOwpAQCAtMTIxMyw5ICsxMTIyLDYgQEAKIAkJICAgICAgIHJlZyk7CiAJfQogCXdyMzIoRTEwMDBfUENTX0xDVEwsIHJlZyk7Ci0KLW91dDoKLQlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xMjI5LDEwICsxMTM1LDYgQEAKIHN0YXRpYyBib29sIGlnYl9zZ21paV9hY3RpdmVfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKIAlzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgKmRldl9zcGVjID0gJmh3LT5kZXZfc3BlYy5fODI1NzU7Ci0KLQlpZiAoaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTc1ICYmIGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NikKLQkJcmV0dXJuIGZhbHNlOwotCiAJcmV0dXJuIGRldl9zcGVjLT5zZ21paV9hY3RpdmU7CiB9CiAKQEAgLTE0MjQsNiArMTMyNiw1NyBAQAogfQogCiAvKioKKyAqICBpZ2Jfc2V0X3BjaWVfY29tcGxldGlvbl90aW1lb3V0IC0gc2V0IHBjaS1lIGNvbXBsZXRpb24gdGltZW91dAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFRoZSBkZWZhdWx0cyBmb3IgODI1NzUgYW5kIDgyNTc2IHNob3VsZCBiZSBpbiB0aGUgcmFuZ2Ugb2YgNTB1cyB0byA1MG1zLAorICogIGhvd2V2ZXIgdGhlIGhhcmR3YXJlIGRlZmF1bHQgZm9yIHRoZXNlIHBhcnRzIGlzIDUwMHVzIHRvIDFtcyB3aGljaCBpcyBsZXNzCisgKiAgdGhhbiB0aGUgMTBtcyByZWNvbW1lbmRlZCBieSB0aGUgcGNpLWUgc3BlYy4gIFRvIGFkZHJlc3MgdGhpcyB3ZSBuZWVkIHRvCisgKiAgaW5jcmVhc2UgdGhlIHZhbHVlIHRvIGVpdGhlciAxMG1zIHRvIDIwMG1zIGZvciBjYXBhYmlsaXR5IHZlcnNpb24gMSBjb25maWcsCisgKiAgb3IgMTZtcyB0byA1NW1zIGZvciB2ZXJzaW9uIDIuCisgKiovCitzdGF0aWMgczMyIGlnYl9zZXRfcGNpZV9jb21wbGV0aW9uX3RpbWVvdXQoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MzIgZ2NyID0gcmQzMihFMTAwMF9HQ1IpOworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgcGNpZV9kZXZjdGwyOworCisJLyogb25seSB0YWtlIGFjdGlvbiBpZiB0aW1lb3V0IHZhbHVlIGlzIGRlZmF1bHRlZCB0byAwICovCisJaWYgKGdjciAmIEUxMDAwX0dDUl9DTVBMX1RNT1VUX01BU0spCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBpZiBjYXBhYmFiaWxpdGllcyB2ZXJzaW9uIGlzIHR5cGUgMSB3ZSBjYW4gd3JpdGUgdGhlCisJICogdGltZW91dCBvZiAxMG1zIHRvIDIwMG1zIHRocm91Z2ggdGhlIEdDUiByZWdpc3RlcgorCSAqLworCWlmICghKGdjciAmIEUxMDAwX0dDUl9DQVBfVkVSMikpIHsKKwkJZ2NyIHw9IEUxMDAwX0dDUl9DTVBMX1RNT1VUXzEwbXM7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogZm9yIHZlcnNpb24gMiBjYXBhYmlsaXRpZXMgd2UgbmVlZCB0byB3cml0ZSB0aGUgY29uZmlnIHNwYWNlCisJICogZGlyZWN0bHkgaW4gb3JkZXIgdG8gc2V0IHRoZSBjb21wbGV0aW9uIHRpbWVvdXQgdmFsdWUgZm9yCisJICogMTZtcyB0byA1NW1zCisJICovCisJcmV0X3ZhbCA9IGlnYl9yZWFkX3BjaWVfY2FwX3JlZyhodywgUENJRV9ERVZJQ0VfQ09OVFJPTDIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGNpZV9kZXZjdGwyKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlwY2llX2RldmN0bDIgfD0gUENJRV9ERVZJQ0VfQ09OVFJPTDJfMTZtczsKKworCXJldF92YWwgPSBpZ2Jfd3JpdGVfcGNpZV9jYXBfcmVnKGh3LCBQQ0lFX0RFVklDRV9DT05UUk9MMiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGNpZV9kZXZjdGwyKTsKK291dDoKKwkvKiBkaXNhYmxlIGNvbXBsZXRpb24gdGltZW91dCByZXNlbmQgKi8KKwlnY3IgJj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDsKKworCXdyMzIoRTEwMDBfR0NSLCBnY3IpOworCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBpZ2Jfdm1kcV9zZXRfbG9vcGJhY2tfcGYgLSBlbmFibGUgb3IgZGlzYWJsZSB2bWRxIGxvb3BiYWNrCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3QKICAqICBAZW5hYmxlOiBzdGF0ZSB0byBlbnRlciwgZWl0aGVyIGVuYWJsZWQgb3IgZGlzYWJsZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKaW5kZXggMGYxNmFiYS4uOGExZTY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKQEAgLTI4LDEwICsyOCwxNCBAQAogI2lmbmRlZiBfRTEwMDBfODI1NzVfSF8KICNkZWZpbmUgX0UxMDAwXzgyNTc1X0hfCiAKLXZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3Qoc3RydWN0IGUxMDAwX2h3KiwgdTgqLCB1MzIsIHUzMiwgdTMyKTsKIGV4dGVybiB2b2lkIGlnYl9zaHV0ZG93bl9maWJlcl9zZXJkZXNfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiB2b2lkIGlnYl9yeF9maWZvX2ZsdXNoXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCisjZGVmaW5lIElEX0xFRF9ERUZBVUxUXzgyNTc1X1NFUkRFUyAoKElEX0xFRF9ERUYxX0RFRjIgPDwgMTIpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJRF9MRURfREVGMV9ERUYyIDw8ICA4KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSURfTEVEX0RFRjFfREVGMiA8PCAgNCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElEX0xFRF9PRkYxX09OMikpCisKICNkZWZpbmUgRTEwMDBfUkFSX0VOVFJJRVNfODI1NzUgICAxNgogI2RlZmluZSBFMTAwMF9SQVJfRU5UUklFU184MjU3NiAgIDI0CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oCmluZGV4IDNiZGEzZGIuLmM4NTgyOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaApAQCAtNDM1LDYgKzQzNSwxMiBAQAogLyogRmxvdyBDb250cm9sICovCiAjZGVmaW5lIEUxMDAwX0ZDUlRMX1hPTkUgMHg4MDAwMDAwMCAgICAgLyogRW5hYmxlIFhPTiBmcmFtZSB0cmFuc21pc3Npb24gKi8KIAorLyogUENJIEV4cHJlc3MgQ29udHJvbCAqLworI2RlZmluZSBFMTAwMF9HQ1JfQ01QTF9UTU9VVF9NQVNLICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgRTEwMDBfR0NSX0NNUExfVE1PVVRfMTBtcyAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORCAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBFMTAwMF9HQ1JfQ0FQX1ZFUjIgICAgICAgICAgICAgIDB4MDAwNDAwMDAKKwogLyogUEhZIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgTUlJX0NSX0ZVTExfRFVQTEVYICAgICAgMHgwMTAwICAvKiBGRFggPTEsIGhhbGYgZHVwbGV4ID0wICovCiAjZGVmaW5lIE1JSV9DUl9SRVNUQVJUX0FVVE9fTkVHIDB4MDIwMCAgLyogUmVzdGFydCBhdXRvIG5lZ290aWF0aW9uICovCkBAIC01NjksOSArNTc1LDExIEBACiAKIC8qIFBDSS9QQ0ktWC9QQ0ktRVggQ29uZmlnIHNwYWNlICovCiAjZGVmaW5lIFBDSUVfTElOS19TVEFUVVMgICAgICAgICAgICAgMHgxMgorI2RlZmluZSBQQ0lFX0RFVklDRV9DT05UUk9MMiAgICAgICAgIDB4MjgKIAogI2RlZmluZSBQQ0lFX0xJTktfV0lEVEhfTUFTSyAgICAgICAgIDB4M0YwCiAjZGVmaW5lIFBDSUVfTElOS19XSURUSF9TSElGVCAgICAgICAgNAorI2RlZmluZSBQQ0lFX0RFVklDRV9DT05UUk9MMl8xNm1zICAgIDB4MDAwNQogCiAjZGVmaW5lIFBIWV9SRVZJU0lPTl9NQVNLICAgICAgMHhGRkZGRkZGMAogI2RlZmluZSBNQVhfUEhZX1JFR19BRERSRVNTICAgIDB4MUYgIC8qIDUgYml0IGFkZHJlc3MgYnVzICgwLTB4MUYpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCmluZGV4IDY4YWFjMjAuLjExOTg2OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oCkBAIC00Miw2ICs0Miw3IEBACiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVMgICAgICAgICAgICAgMHgxMEU3CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9RVUFEX0NPUFBFUiAgICAgICAgMHgxMEU4CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9OUyAgICAgICAgICAgICAgICAgMHgxNTBBCisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVNfUVVBRCAgICAgICAgMHgxNTBECiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUiAgICAgICAgICAgMHgxMEE3CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NUVCX0ZJQkVSX1NFUkRFUyAgICAgMHgxMEE5CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NUdCX1FVQURfQ09QUEVSICAgICAgMHgxMEQ2CkBAIC02MSw4ICs2Miw3IEBACiBlbnVtIGUxMDAwX21lZGlhX3R5cGUgewogCWUxMDAwX21lZGlhX3R5cGVfdW5rbm93biA9IDAsCiAJZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIgPSAxLAotCWUxMDAwX21lZGlhX3R5cGVfZmliZXIgPSAyLAotCWUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzID0gMywKKwllMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcyA9IDIsCiAJZTEwMDBfbnVtX21lZGlhX3R5cGVzCiB9OwogCkBAIC0xMzcsNyArMTM3LDcgQEAKIAllMTAwMF9yZXZfcG9sYXJpdHlfdW5kZWZpbmVkID0gMHhGRgogfTsKIAotZW51bSBlMTAwMF9mY190eXBlIHsKK2VudW0gZTEwMDBfZmNfbW9kZSB7CiAJZTEwMDBfZmNfbm9uZSA9IDAsCiAJZTEwMDBfZmNfcnhfcGF1c2UsCiAJZTEwMDBfZmNfdHhfcGF1c2UsCkBAIC0zMzksNiArMzM5LDEwIEBACiAJdTE2IGlmc19yYXRpbzsKIAl1MTYgaWZzX3N0ZXBfc2l6ZTsKIAl1MTYgbXRhX3JlZ19jb3VudDsKKworCS8qIE1heGltdW0gc2l6ZSBvZiB0aGUgTVRBIHJlZ2lzdGVyIHRhYmxlIGluIGFsbCBzdXBwb3J0ZWQgYWRhcHRlcnMgKi8KKwkjZGVmaW5lIE1BWF9NVEFfUkVHIDEyOAorCXUzMiBtdGFfc2hhZG93W01BWF9NVEFfUkVHXTsKIAl1MTYgcmFyX2VudHJ5X2NvdW50OwogCiAJdTggIGZvcmNlZF9zcGVlZF9kdXBsZXg7CkBAIC00MjUsOCArNDI5LDggQEAKIAl1MTYgcGF1c2VfdGltZTsgICAgIC8qIEZsb3cgY29udHJvbCBwYXVzZSB0aW1lciAqLwogCWJvb2wgc2VuZF94b247ICAgICAgLyogRmxvdyBjb250cm9sIHNlbmQgWE9OICovCiAJYm9vbCBzdHJpY3RfaWVlZTsgICAvKiBTdHJpY3QgSUVFRSBtb2RlICovCi0JZW51bSBlMTAwMF9mY190eXBlIHR5cGU7IC8qIFR5cGUgb2YgZmxvdyBjb250cm9sICovCi0JZW51bSBlMTAwMF9mY190eXBlIG9yaWdpbmFsX3R5cGU7CisJZW51bSBlMTAwMF9mY19tb2RlIGN1cnJlbnRfbW9kZTsgLyogVHlwZSBvZiBmbG93IGNvbnRyb2wgKi8KKwllbnVtIGUxMDAwX2ZjX21vZGUgcmVxdWVzdGVkX21vZGU7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfbWJ4X29wZXJhdGlvbnMgewpAQCAtNDk1LDUgKzQ5OSw3IEBACiAjZWxzZQogI2RlZmluZSBod19kYmcoZm9ybWF0LCBhcmcuLi4pCiAjZW5kaWYKLQogI2VuZGlmCisvKiBUaGVzZSBmdW5jdGlvbnMgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkcml2ZXJzICovCitzMzIgIGlnYl9yZWFkX3BjaWVfY2FwX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnLCB1MTYgKnZhbHVlKTsKK3MzMiAgaWdiX3dyaXRlX3BjaWVfY2FwX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnLCB1MTYgKnZhbHVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYwppbmRleCA0NzJmM2YxLi5hMDIzMWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jCkBAIC0zNywyMCArMzcsNiBAQAogc3RhdGljIHMzMiBpZ2Jfc2V0X2RlZmF1bHRfZmMoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGlnYl9zZXRfZmNfd2F0ZXJtYXJrcyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAotc3RhdGljIHMzMiBpZ2JfcmVhZF9wY2llX2NhcF9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHJlZywgdTE2ICp2YWx1ZSkKLXsKLQlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKLQl1MTYgY2FwX29mZnNldDsKLQotCWNhcF9vZmZzZXQgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGFkYXB0ZXItPnBkZXYsIFBDSV9DQVBfSURfRVhQKTsKLQlpZiAoIWNhcF9vZmZzZXQpCi0JCXJldHVybiAtRTEwMDBfRVJSX0NPTkZJRzsKLQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkYXB0ZXItPnBkZXYsIGNhcF9vZmZzZXQgKyByZWcsIHZhbHVlKTsKLQotCXJldHVybiAwOwotfQotCiAvKioKICAqICBpZ2JfZ2V0X2J1c19pbmZvX3BjaWUgLSBHZXQgUENJZSBidXMgaW5mb3JtYXRpb24KICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQpAQCAtMTE4LDYgKzEwNCwzMSBAQAogfQogCiAvKioKKyAqICBpZ2JfaW5pdF9yeF9hZGRycyAtIEluaXRpYWxpemUgcmVjZWl2ZSBhZGRyZXNzJ3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEByYXJfY291bnQ6IHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlcnMKKyAqCisgKiAgU2V0dXBzIHRoZSByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXJzIGJ5IHNldHRpbmcgdGhlIGJhc2UgcmVjZWl2ZSBhZGRyZXNzCisgKiAgcmVnaXN0ZXIgdG8gdGhlIGRldmljZXMgTUFDIGFkZHJlc3MgYW5kIGNsZWFyaW5nIGFsbCB0aGUgb3RoZXIgcmVjZWl2ZQorICogIGFkZHJlc3MgcmVnaXN0ZXJzIHRvIDAuCisgKiovCit2b2lkIGlnYl9pbml0X3J4X2FkZHJzKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiByYXJfY291bnQpCit7CisJdTMyIGk7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dID0gezB9OworCisJLyogU2V0dXAgdGhlIHJlY2VpdmUgYWRkcmVzcyAqLworCWh3X2RiZygiUHJvZ3JhbW1pbmcgTUFDIEFkZHJlc3MgaW50byBSQVJbMF1cbiIpOworCisJaHctPm1hYy5vcHMucmFyX3NldChodywgaHctPm1hYy5hZGRyLCAwKTsKKworCS8qIFplcm8gb3V0IHRoZSBvdGhlciAocmFyX2VudHJ5X2NvdW50IC0gMSkgcmVjZWl2ZSBhZGRyZXNzZXMgKi8KKwlod19kYmcoIkNsZWFyaW5nIFJBUlsxLSV1XVxuIiwgcmFyX2NvdW50LTEpOworCWZvciAoaSA9IDE7IGkgPCByYXJfY291bnQ7IGkrKykKKwkJaHctPm1hYy5vcHMucmFyX3NldChodywgbWFjX2FkZHIsIGkpOworfQorCisvKioKICAqICBpZ2JfdmZ0YV9zZXQgLSBlbmFibGUgb3IgZGlzYWJsZSB2bGFuIGluIFZMQU4gZmlsdGVyIHRhYmxlCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAdmlkOiBWTEFOIGlkIHRvIGFkZCBvciByZW1vdmUKQEAgLTI3NSw2ICsyODYsNDEgQEAKIH0KIAogLyoqCisgKiAgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3QgLSBVcGRhdGUgTXVsdGljYXN0IGFkZHJlc3NlcworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1jX2FkZHJfbGlzdDogYXJyYXkgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCisgKiAgQG1jX2FkZHJfY291bnQ6IG51bWJlciBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KKyAqCisgKiAgVXBkYXRlcyBlbnRpcmUgTXVsdGljYXN0IFRhYmxlIEFycmF5LgorICogIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGEgcGFja2VkIG1jX2FkZHJfbGlzdCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzLgorICoqLwordm9pZCBpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdChzdHJ1Y3QgZTEwMDBfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqbWNfYWRkcl9saXN0LCB1MzIgbWNfYWRkcl9jb3VudCkKK3sKKwl1MzIgaGFzaF92YWx1ZSwgaGFzaF9iaXQsIGhhc2hfcmVnOworCWludCBpOworCisJLyogY2xlYXIgbXRhX3NoYWRvdyAqLworCW1lbXNldCgmaHctPm1hYy5tdGFfc2hhZG93LCAwLCBzaXplb2YoaHctPm1hYy5tdGFfc2hhZG93KSk7CisKKwkvKiB1cGRhdGUgbXRhX3NoYWRvdyBmcm9tIG1jX2FkZHJfbGlzdCAqLworCWZvciAoaSA9IDA7ICh1MzIpIGkgPCBtY19hZGRyX2NvdW50OyBpKyspIHsKKwkJaGFzaF92YWx1ZSA9IGlnYl9oYXNoX21jX2FkZHIoaHcsIG1jX2FkZHJfbGlzdCk7CisKKwkJaGFzaF9yZWcgPSAoaGFzaF92YWx1ZSA+PiA1KSAmIChody0+bWFjLm10YV9yZWdfY291bnQgLSAxKTsKKwkJaGFzaF9iaXQgPSBoYXNoX3ZhbHVlICYgMHgxRjsKKworCQlody0+bWFjLm10YV9zaGFkb3dbaGFzaF9yZWddIHw9ICgxIDw8IGhhc2hfYml0KTsKKwkJbWNfYWRkcl9saXN0ICs9IChFVEhfQUxFTik7CisJfQorCisJLyogcmVwbGFjZSB0aGUgZW50aXJlIE1UQSB0YWJsZSAqLworCWZvciAoaSA9IGh3LT5tYWMubXRhX3JlZ19jb3VudCAtIDE7IGkgPj0gMDsgaS0tKQorCQlhcnJheV93cjMyKEUxMDAwX01UQSwgaSwgaHctPm1hYy5tdGFfc2hhZG93W2ldKTsKKwl3cmZsKCk7Cit9CisKKy8qKgogICogIGlnYl9oYXNoX21jX2FkZHIgLSBHZW5lcmF0ZSBhIG11bHRpY2FzdCBoYXNoIHZhbHVlCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAbWNfYWRkcjogcG9pbnRlciB0byBhIG11bHRpY2FzdCBhZGRyZXNzCkBAIC00OTAsMTggKzUzNiwyNCBAQAogCWlmIChpZ2JfY2hlY2tfcmVzZXRfYmxvY2soaHcpKQogCQlnb3RvIG91dDsKIAotCXJldF92YWwgPSBpZ2Jfc2V0X2RlZmF1bHRfZmMoaHcpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKKwkvKgorCSAqIElmIHJlcXVlc3RlZCBmbG93IGNvbnRyb2wgaXMgc2V0IHRvIGRlZmF1bHQsIHNldCBmbG93IGNvbnRyb2wKKwkgKiBiYXNlZCBvbiB0aGUgRUVQUk9NIGZsb3cgY29udHJvbCBzZXR0aW5ncy4KKwkgKi8KKwlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGUxMDAwX2ZjX2RlZmF1bHQpIHsKKwkJcmV0X3ZhbCA9IGlnYl9zZXRfZGVmYXVsdF9mYyhodyk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJfQogCiAJLyoKIAkgKiBXZSB3YW50IHRvIHNhdmUgb2ZmIHRoZSBvcmlnaW5hbCBGbG93IENvbnRyb2wgY29uZmlndXJhdGlvbiBqdXN0CiAJICogaW4gY2FzZSB3ZSBnZXQgZGlzY29ubmVjdGVkIGFuZCB0aGVuIHJlY29ubmVjdGVkIGludG8gYSBkaWZmZXJlbnQKIAkgKiBodWIgb3Igc3dpdGNoIHdpdGggZGlmZmVyZW50IEZsb3cgQ29udHJvbCBjYXBhYmlsaXRpZXMuCiAJICovCi0JaHctPmZjLm9yaWdpbmFsX3R5cGUgPSBody0+ZmMudHlwZTsKKwlody0+ZmMuY3VycmVudF9tb2RlID0gaHctPmZjLnJlcXVlc3RlZF9tb2RlOwogCi0JaHdfZGJnKCJBZnRlciBmaXgtdXBzIEZsb3dDb250cm9sIGlzIG5vdyA9ICV4XG4iLCBody0+ZmMudHlwZSk7CisJaHdfZGJnKCJBZnRlciBmaXgtdXBzIEZsb3dDb250cm9sIGlzIG5vdyA9ICV4XG4iLCBody0+ZmMuY3VycmVudF9tb2RlKTsKIAogCS8qIENhbGwgdGhlIG5lY2Vzc2FyeSBtZWRpYV90eXBlIHN1YnJvdXRpbmUgdG8gY29uZmlndXJlIHRoZSBsaW5rLiAqLwogCXJldF92YWwgPSBody0+bWFjLm9wcy5zZXR1cF9waHlzaWNhbF9pbnRlcmZhY2UoaHcpOwpAQCAtNTY4LDcgKzYyMCw3IEBACiAJICogYWJpbGl0eSB0byB0cmFuc21pdCBwYXVzZSBmcmFtZXMgaXMgbm90IGVuYWJsZWQsIHRoZW4gdGhlc2UKIAkgKiByZWdpc3RlcnMgd2lsbCBiZSBzZXQgdG8gMC4KIAkgKi8KLQlpZiAoaHctPmZjLnR5cGUgJiBlMTAwMF9mY190eF9wYXVzZSkgeworCWlmIChody0+ZmMuY3VycmVudF9tb2RlICYgZTEwMDBfZmNfdHhfcGF1c2UpIHsKIAkJLyoKIAkJICogV2UgbmVlZCB0byBzZXQgdXAgdGhlIFJlY2VpdmUgVGhyZXNob2xkIGhpZ2ggYW5kIGxvdyB3YXRlcgogCQkgKiBtYXJrcyBhcyB3ZWxsIGFzIChvcHRpb25hbGx5KSBlbmFibGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mCkBAIC02MTUsMTIgKzY2NywxMiBAQAogCX0KIAogCWlmICgobnZtX2RhdGEgJiBOVk1fV09SRDBGX1BBVVNFX01BU0spID09IDApCi0JCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfbm9uZTsKKwkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfbm9uZTsKIAllbHNlIGlmICgobnZtX2RhdGEgJiBOVk1fV09SRDBGX1BBVVNFX01BU0spID09CiAJCSBOVk1fV09SRDBGX0FTTV9ESVIpCi0JCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfdHhfcGF1c2U7CisJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGUxMDAwX2ZjX3R4X3BhdXNlOwogCWVsc2UKLQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19mdWxsOworCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBlMTAwMF9mY19mdWxsOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CkBAIC02NTAsNyArNzAyLDcgQEAKIAkgKiByZWNlaXZlIGZsb3cgY29udHJvbC4KIAkgKgogCSAqIFRoZSAiQ2FzZSIgc3RhdGVtZW50IGJlbG93IGVuYWJsZXMvZGlzYWJsZSBmbG93IGNvbnRyb2wKLQkgKiBhY2NvcmRpbmcgdG8gdGhlICJody0+ZmMudHlwZSIgcGFyYW1ldGVyLgorCSAqIGFjY29yZGluZyB0byB0aGUgImh3LT5mYy5jdXJyZW50X21vZGUiIHBhcmFtZXRlci4KIAkgKgogCSAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhlICJmYyIgcGFyYW1ldGVyIGFyZToKIAkgKiAgICAgIDA6ICBGbG93IGNvbnRyb2wgaXMgY29tcGxldGVseSBkaXNhYmxlZApAQCAtNjYxLDkgKzcxMyw5IEBACiAJICogICAgICAzOiAgQm90aCBSeCBhbmQgVFggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGlzIGVuYWJsZWQuCiAJICogIG90aGVyOiAgTm8gb3RoZXIgdmFsdWVzIHNob3VsZCBiZSBwb3NzaWJsZSBhdCB0aGlzIHBvaW50LgogCSAqLwotCWh3X2RiZygiaHctPmZjLnR5cGUgPSAldVxuIiwgaHctPmZjLnR5cGUpOworCWh3X2RiZygiaHctPmZjLmN1cnJlbnRfbW9kZSA9ICV1XG4iLCBody0+ZmMuY3VycmVudF9tb2RlKTsKIAotCXN3aXRjaCAoaHctPmZjLnR5cGUpIHsKKwlzd2l0Y2ggKGh3LT5mYy5jdXJyZW50X21vZGUpIHsKIAljYXNlIGUxMDAwX2ZjX25vbmU6CiAJCWN0cmwgJj0gKH4oRTEwMDBfQ1RSTF9URkNFIHwgRTEwMDBfQ1RSTF9SRkNFKSk7CiAJCWJyZWFrOwpAQCAtNzEzLDggKzc2NSw3IEBACiAJICogY29uZmlndXJhdGlvbiBvZiB0aGUgTUFDIHRvIG1hdGNoIHRoZSAiZmMiIHBhcmFtZXRlci4KIAkgKi8KIAlpZiAobWFjLT5hdXRvbmVnX2ZhaWxlZCkgewotCQlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIgfHwKLQkJICAgIGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykKKwkJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykKIAkJCXJldF92YWwgPSBpZ2JfZm9yY2VfbWFjX2ZjKGh3KTsKIAl9IGVsc2UgewogCQlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQpAQCAtODEyLDExICs4NjMsMTEgQEAKIAkJCSAqIE9OTFkuIEhlbmNlLCB3ZSBtdXN0IG5vdyBjaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0bwogCQkJICogdHVybiBPRkYgIHRoZSBUUkFOU01JU1NJT04gb2YgUEFVU0UgZnJhbWVzLgogCQkJICovCi0JCQlpZiAoaHctPmZjLm9yaWdpbmFsX3R5cGUgPT0gZTEwMDBfZmNfZnVsbCkgewotCQkJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfZnVsbDsKKwkJCWlmIChody0+ZmMucmVxdWVzdGVkX21vZGUgPT0gZTEwMDBfZmNfZnVsbCkgeworCQkJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBlMTAwMF9mY19mdWxsOwogCQkJCWh3X2RiZygiRmxvdyBDb250cm9sID0gRlVMTC5cclxuIik7CiAJCQl9IGVsc2UgewotCQkJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfcnhfcGF1c2U7CisJCQkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGUxMDAwX2ZjX3J4X3BhdXNlOwogCQkJCWh3X2RiZygiRmxvdyBDb250cm9sID0gIgogCQkJCSAgICAgICAiUlggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOwogCQkJfQpAQCAtODMzLDcgKzg4NCw3IEBACiAJCQkgIChtaWlfbndheV9hZHZfcmVnICYgTldBWV9BUl9BU01fRElSKSAmJgogCQkJICAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfUEFVU0UpICYmCiAJCQkgIChtaWlfbndheV9scF9hYmlsaXR5X3JlZyAmIE5XQVlfTFBBUl9BU01fRElSKSkgewotCQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY190eF9wYXVzZTsKKwkJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBlMTAwMF9mY190eF9wYXVzZTsKIAkJCWh3X2RiZygiRmxvdyBDb250cm9sID0gVFggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOwogCQl9CiAJCS8qCkBAIC04NDgsNyArODk5LDcgQEAKIAkJCSAobWlpX253YXlfYWR2X3JlZyAmIE5XQVlfQVJfQVNNX0RJUikgJiYKIAkJCSAhKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldBWV9MUEFSX1BBVVNFKSAmJgogCQkJIChtaWlfbndheV9scF9hYmlsaXR5X3JlZyAmIE5XQVlfTFBBUl9BU01fRElSKSkgewotCQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19yeF9wYXVzZTsKKwkJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBlMTAwMF9mY19yeF9wYXVzZTsKIAkJCWh3X2RiZygiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOwogCQl9CiAJCS8qCkBAIC04NzIsMTMgKzkyMywxMyBAQAogCQkgKiBiZSBhc2tlZCB0byBkZWxheSB0cmFuc21pc3Npb24gb2YgcGFja2V0cyB0aGFuIGFza2luZwogCQkgKiBvdXIgbGluayBwYXJ0bmVyIHRvIHBhdXNlIHRyYW5zbWlzc2lvbiBvZiBmcmFtZXMuCiAJCSAqLwotCQllbHNlIGlmICgoaHctPmZjLm9yaWdpbmFsX3R5cGUgPT0gZTEwMDBfZmNfbm9uZSB8fAotCQkJICBody0+ZmMub3JpZ2luYWxfdHlwZSA9PSBlMTAwMF9mY190eF9wYXVzZSkgfHwKKwkJZWxzZSBpZiAoKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBlMTAwMF9mY19ub25lIHx8CisJCQkgIGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBlMTAwMF9mY190eF9wYXVzZSkgfHwKIAkJCSBody0+ZmMuc3RyaWN0X2llZWUpIHsKLQkJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfbm9uZTsKKwkJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBlMTAwMF9mY19ub25lOwogCQkJaHdfZGJnKCJGbG93IENvbnRyb2wgPSBOT05FLlxyXG4iKTsKIAkJfSBlbHNlIHsKLQkJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfcnhfcGF1c2U7CisJCQlody0+ZmMuY3VycmVudF9tb2RlID0gZTEwMDBfZmNfcnhfcGF1c2U7CiAJCQlod19kYmcoIkZsb3cgQ29udHJvbCA9IFJYIFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKIAkJfQogCkBAIC04OTQsNyArOTQ1LDcgQEAKIAkJfQogCiAJCWlmIChkdXBsZXggPT0gSEFMRl9EVVBMRVgpCi0JCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX25vbmU7CisJCQlody0+ZmMuY3VycmVudF9tb2RlID0gZTEwMDBfZmNfbm9uZTsKIAogCQkvKgogCQkgKiBOb3cgd2UgY2FsbCBhIHN1YnJvdXRpbmUgdG8gYWN0dWFsbHkgZm9yY2UgdGhlIE1BQwpAQCAtMTA2NSw5ICsxMTE2LDE3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICgqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfMDAwMCB8fCAqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfRkZGRikKLQkJKmRhdGEgPSBJRF9MRURfREVGQVVMVDsKLQorCWlmICgqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfMDAwMCB8fCAqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfRkZGRikgeworCQlzd2l0Y2goaHctPnBoeS5tZWRpYV90eXBlKSB7CisJCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXM6CisJCQkqZGF0YSA9IElEX0xFRF9ERUZBVUxUXzgyNTc1X1NFUkRFUzsKKwkJCWJyZWFrOworCQljYXNlIGUxMDAwX21lZGlhX3R5cGVfY29wcGVyOgorCQlkZWZhdWx0OgorCQkJKmRhdGEgPSBJRF9MRURfREVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJfQogb3V0OgogCXJldHVybiByZXRfdmFsOwogfQpAQCAtMTE2MSwyMiArMTIyMCwxNiBAQAogCXUzMiBsZWRjdGxfYmxpbmsgPSAwOwogCXUzMiBpOwogCi0JaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSB7Ci0JCS8qIGFsd2F5cyBibGluayBMRUQwIGZvciBQQ0ktRSBmaWJlciAqLwotCQlsZWRjdGxfYmxpbmsgPSBFMTAwMF9MRURDVExfTEVEMF9CTElOSyB8Ci0JCSAgICAgKEUxMDAwX0xFRENUTF9NT0RFX0xFRF9PTiA8PCBFMTAwMF9MRURDVExfTEVEMF9NT0RFX1NISUZUKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBzZXQgdGhlIGJsaW5rIGJpdCBmb3IgZWFjaCBMRUQgdGhhdCdzICJvbiIgKDB4MEUpCi0JCSAqIGluIGxlZGN0bF9tb2RlMgotCQkgKi8KLQkJbGVkY3RsX2JsaW5rID0gaHctPm1hYy5sZWRjdGxfbW9kZTI7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCQlpZiAoKChody0+bWFjLmxlZGN0bF9tb2RlMiA+PiAoaSAqIDgpKSAmIDB4RkYpID09Ci0JCQkgICAgRTEwMDBfTEVEQ1RMX01PREVfTEVEX09OKQotCQkJCWxlZGN0bF9ibGluayB8PSAoRTEwMDBfTEVEQ1RMX0xFRDBfQkxJTksgPDwKLQkJCQkJCSAoaSAqIDgpKTsKLQl9CisJLyoKKwkgKiBzZXQgdGhlIGJsaW5rIGJpdCBmb3IgZWFjaCBMRUQgdGhhdCdzICJvbiIgKDB4MEUpCisJICogaW4gbGVkY3RsX21vZGUyCisJICovCisJbGVkY3RsX2JsaW5rID0gaHctPm1hYy5sZWRjdGxfbW9kZTI7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJaWYgKCgoaHctPm1hYy5sZWRjdGxfbW9kZTIgPj4gKGkgKiA4KSkgJiAweEZGKSA9PQorCQkgICAgRTEwMDBfTEVEQ1RMX01PREVfTEVEX09OKQorCQkJbGVkY3RsX2JsaW5rIHw9IChFMTAwMF9MRURDVExfTEVEMF9CTElOSyA8PAorCQkJCQkgKGkgKiA4KSk7CiAKIAl3cjMyKEUxMDAwX0xFRENUTCwgbGVkY3RsX2JsaW5rKTsKIApAQCAtMTE5MSwxNSArMTI0NCw3IEBACiAgKiovCiBzMzIgaWdiX2xlZF9vZmYoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLQl1MzIgY3RybDsKLQogCXN3aXRjaCAoaHctPnBoeS5tZWRpYV90eXBlKSB7Ci0JY2FzZSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyOgotCQljdHJsID0gcmQzMihFMTAwMF9DVFJMKTsKLQkJY3RybCB8PSBFMTAwMF9DVFJMX1NXRFBJTjA7Ci0JCWN0cmwgfD0gRTEwMDBfQ1RSTF9TV0RQSU8wOwotCQl3cjMyKEUxMDAwX0NUUkwsIGN0cmwpOwotCQlicmVhazsKIAljYXNlIGUxMDAwX21lZGlhX3R5cGVfY29wcGVyOgogCQl3cjMyKEUxMDAwX0xFRENUTCwgaHctPm1hYy5sZWRjdGxfbW9kZTEpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaAppbmRleCAxZDY5MGI0Li43NTE4YWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5oCkBAIC01MSw2ICs1MSw4IEBACiAJCQkJICAgICAgIHUxNiAqZHVwbGV4KTsKIHMzMiAgaWdiX2lkX2xlZF9pbml0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2JfbGVkX29mZihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3ZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3Qoc3RydWN0IGUxMDAwX2h3ICpodywKKwkgICAgICAgICAgICAgICAgICAgICB1OCAqbWNfYWRkcl9saXN0LCB1MzIgbWNfYWRkcl9jb3VudCk7CiBzMzIgIGlnYl9zZXR1cF9saW5rKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2JfdmFsaWRhdGVfbWRpX3NldHRpbmcoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzMzIgIGlnYl93cml0ZV84Yml0X2N0cmxfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiByZWcsCkBAIC02MCw2ICs2Miw3IEBACiB2b2lkIGlnYl9jbGVhcl92ZnRhKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2JfdmZ0YV9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHZpZCwgYm9vbCBhZGQpOwogdm9pZCBpZ2JfY29uZmlnX2NvbGxpc2lvbl9kaXN0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwordm9pZCBpZ2JfaW5pdF9yeF9hZGRycyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgcmFyX2NvdW50KTsKIHZvaWQgaWdiX210YV9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGhhc2hfdmFsdWUpOwogdm9pZCBpZ2JfcHV0X2h3X3NlbWFwaG9yZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHZvaWQgaWdiX3Jhcl9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdTggKmFkZHIsIHUzMiBpbmRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKaW5kZXggZjUwZmFjMi4uYzFmNGRhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYwpAQCAtNzM1LDcgKzczNSw3IEBACiAJICogIG90aGVyOiAgTm8gc29mdHdhcmUgb3ZlcnJpZGUuICBUaGUgZmxvdyBjb250cm9sIGNvbmZpZ3VyYXRpb24KIAkgKiAgICAgICAgICBpbiB0aGUgRUVQUk9NIGlzIHVzZWQuCiAJICovCi0Jc3dpdGNoIChody0+ZmMudHlwZSkgeworCXN3aXRjaCAoaHctPmZjLmN1cnJlbnRfbW9kZSkgewogCWNhc2UgZTEwMDBfZmNfbm9uZToKIAkJLyoKIAkJICogRmxvdyBjb250cm9sIChSWCAmIFRYKSBpcyBjb21wbGV0ZWx5IGRpc2FibGVkIGJ5IGEKQEAgLTk5Miw3ICs5OTIsNyBAQAogCXUzMiBjdHJsOwogCiAJLyogVHVybiBvZmYgZmxvdyBjb250cm9sIHdoZW4gZm9yY2luZyBzcGVlZC9kdXBsZXggKi8KLQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX25vbmU7CisJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGUxMDAwX2ZjX25vbmU7CiAKIAkvKiBGb3JjZSBzcGVlZC9kdXBsZXggb24gdGhlIG1hYyAqLwogCWN0cmwgPSByZDMyKEUxMDAwX0NUUkwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmgKaW5kZXggNmU1OTI0NS4uMzQ1ZDE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oCkBAIC0zMDUsNiArMzA1LDcgQEAKICNkZWZpbmUgRTEwMDBfQ0NNQ1RMICAgICAgMHgwNUI0OCAvKiBDQ00gQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBFMTAwMF9HSU9DVEwgICAgICAweDA1QjQ0IC8qIEdJTyBBbmFsb2cgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBFMTAwMF9TQ0NUTCAgICAgICAweDA1QjRDIC8qIFBDSWMgUExMIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRTEwMDBfR0NSICAgICAgICAgMHgwNUIwMCAvKiBQQ0ktRXggQ29udHJvbCAqLwogI2RlZmluZSBFMTAwMF9GQUNUUFMgICAgMHgwNUIzMCAvKiBGdW5jdGlvbiBBY3RpdmUgYW5kIFBvd2VyIFN0YXRlIHRvIE1ORyAqLwogI2RlZmluZSBFMTAwMF9TV1NNICAgICAgMHgwNUI1MCAvKiBTVyBTZW1hcGhvcmUgKi8KICNkZWZpbmUgRTEwMDBfRldTTSAgICAgIDB4MDVCNTQgLyogRlcgU2VtYXBob3JlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiLmggYi9kcml2ZXJzL25ldC9pZ2IvaWdiLmgKaW5kZXggYjJjOThkZS4uNzEyNmZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYi5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaApAQCAtNzAsNiArNzAsNyBAQAogCXVuc2lnbmVkIGNoYXIgdmZfbWFjX2FkZHJlc3Nlc1tFVEhfQUxFTl07CiAJdTE2IHZmX21jX2hhc2hlc1tJR0JfTUFYX1ZGX01DX0VOVFJJRVNdOwogCXUxNiBudW1fdmZfbWNfaGFzaGVzOworCXUxNiB2bGFuc19lbmFibGVkOwogCWJvb2wgY2xlYXJfdG9fc2VuZDsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKaW5kZXggOTU5OGFjMC4uZDAwNGMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKQEAgLTE2OCw4ICsxNjgsNyBAQAogCQllY21kLT5kdXBsZXggPSAtMTsKIAl9CiAKLQllY21kLT5hdXRvbmVnID0gKChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgfHwKLQkJCSBody0+bWFjLmF1dG9uZWcpID8gQVVUT05FR19FTkFCTEUgOiBBVVRPTkVHX0RJU0FCTEU7CisJZWNtZC0+YXV0b25lZyA9IGh3LT5tYWMuYXV0b25lZyA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFOwogCXJldHVybiAwOwogfQogCkBAIC0xOTEsMjMgKzE5MCwyMCBAQAogCiAJaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKIAkJaHctPm1hYy5hdXRvbmVnID0gMTsKLQkJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKQotCQkJaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQgPSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKLQkJCQkJCSAgICAgQURWRVJUSVNFRF9GSUJSRSB8Ci0JCQkJCQkgICAgIEFEVkVSVElTRURfQXV0b25lZzsKLQkJZWxzZQotCQkJaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQgPSBlY21kLT5hZHZlcnRpc2luZyB8Ci0JCQkJCQkgICAgIEFEVkVSVElTRURfVFAgfAotCQkJCQkJICAgICBBRFZFUlRJU0VEX0F1dG9uZWc7CisJCWh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkID0gZWNtZC0+YWR2ZXJ0aXNpbmcgfAorCQkJCQkgICAgIEFEVkVSVElTRURfVFAgfAorCQkJCQkgICAgIEFEVkVSVElTRURfQXV0b25lZzsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSBody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZDsKLQl9IGVsc2UKKwkJaWYgKGFkYXB0ZXItPmZjX2F1dG9uZWcpCisJCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBlMTAwMF9mY19kZWZhdWx0OworCX0gZWxzZSB7CiAJCWlmIChpZ2Jfc2V0X3NwZF9kcGx4KGFkYXB0ZXIsIGVjbWQtPnNwZWVkICsgZWNtZC0+ZHVwbGV4KSkgewogCQkJY2xlYXJfYml0KF9fSUdCX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJfQogCiAJLyogcmVzZXQgdGhlIGxpbmsgKi8KLQogCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKIAkJaWdiX2Rvd24oYWRhcHRlcik7CiAJCWlnYl91cChhZGFwdGVyKTsKQEAgLTIyNywxMSArMjIzLDExIEBACiAJcGF1c2UtPmF1dG9uZWcgPQogCQkoYWRhcHRlci0+ZmNfYXV0b25lZyA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFKTsKIAotCWlmIChody0+ZmMudHlwZSA9PSBlMTAwMF9mY19yeF9wYXVzZSkKKwlpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBlMTAwMF9mY19yeF9wYXVzZSkKIAkJcGF1c2UtPnJ4X3BhdXNlID0gMTsKLQllbHNlIGlmIChody0+ZmMudHlwZSA9PSBlMTAwMF9mY190eF9wYXVzZSkKKwllbHNlIGlmIChody0+ZmMuY3VycmVudF9tb2RlID09IGUxMDAwX2ZjX3R4X3BhdXNlKQogCQlwYXVzZS0+dHhfcGF1c2UgPSAxOwotCWVsc2UgaWYgKGh3LT5mYy50eXBlID09IGUxMDAwX2ZjX2Z1bGwpIHsKKwllbHNlIGlmIChody0+ZmMuY3VycmVudF9tb2RlID09IGUxMDAwX2ZjX2Z1bGwpIHsKIAkJcGF1c2UtPnJ4X3BhdXNlID0gMTsKIAkJcGF1c2UtPnR4X3BhdXNlID0gMTsKIAl9CkBAIC0yNDksMjYgKzI0NSwyOCBAQAogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSUdCX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKIAkJbXNsZWVwKDEpOwogCi0JaWYgKHBhdXNlLT5yeF9wYXVzZSAmJiBwYXVzZS0+dHhfcGF1c2UpCi0JCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfZnVsbDsKLQllbHNlIGlmIChwYXVzZS0+cnhfcGF1c2UgJiYgIXBhdXNlLT50eF9wYXVzZSkKLQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19yeF9wYXVzZTsKLQllbHNlIGlmICghcGF1c2UtPnJ4X3BhdXNlICYmIHBhdXNlLT50eF9wYXVzZSkKLQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY190eF9wYXVzZTsKLQllbHNlIGlmICghcGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCi0JCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfbm9uZTsKLQotCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gaHctPmZjLnR5cGU7Ci0KIAlpZiAoYWRhcHRlci0+ZmNfYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBlMTAwMF9mY19kZWZhdWx0OwogCQlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCQlpZ2JfZG93bihhZGFwdGVyKTsKIAkJCWlnYl91cChhZGFwdGVyKTsKIAkJfSBlbHNlCiAJCQlpZ2JfcmVzZXQoYWRhcHRlcik7Ci0JfSBlbHNlCi0JCXJldHZhbCA9ICgoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpID8KLQkJCSAgaWdiX3NldHVwX2xpbmsoaHcpIDogaWdiX2ZvcmNlX21hY19mYyhodykpOworCX0gZWxzZSB7CisJCWlmIChwYXVzZS0+cnhfcGF1c2UgJiYgcGF1c2UtPnR4X3BhdXNlKQorCQkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfZnVsbDsKKwkJZWxzZSBpZiAocGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCisJCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBlMTAwMF9mY19yeF9wYXVzZTsKKwkJZWxzZSBpZiAoIXBhdXNlLT5yeF9wYXVzZSAmJiBwYXVzZS0+dHhfcGF1c2UpCisJCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBlMTAwMF9mY190eF9wYXVzZTsKKwkJZWxzZSBpZiAoIXBhdXNlLT5yeF9wYXVzZSAmJiAhcGF1c2UtPnR4X3BhdXNlKQorCQkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfbm9uZTsKKworCQlody0+ZmMuY3VycmVudF9tb2RlID0gaHctPmZjLnJlcXVlc3RlZF9tb2RlOworCisJCXJldHZhbCA9ICgoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSA/CisJCQkgIGlnYl9mb3JjZV9tYWNfZmMoaHcpIDogaWdiX3NldHVwX2xpbmsoaHcpKTsKKwl9CiAKIAljbGVhcl9iaXQoX19JR0JfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwogCXJldHVybiByZXR2YWw7CkBAIC0xNDgzLDggKzE0ODEsNyBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHJlZzsKIAotCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlciB8fAotCSAgICBody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpIHsKKwlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7CiAJCXJlZyA9IHJkMzIoRTEwMDBfUkNUTCk7CiAJCXJlZyB8PSBFMTAwMF9SQ1RMX0xCTV9UQ1ZSOwogCQl3cjMyKEUxMDAwX1JDVEwsIHJlZyk7CkBAIC0xODQzLDcgKzE4NDAsNiBAQAogc3RhdGljIGludCBpZ2Jfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCiAJaWYgKHdvbC0+d29sb3B0cyAmIChXQUtFX1BIWSB8IFdBS0VfQVJQIHwgV0FLRV9NQUdJQ1NFQ1VSRSkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTE4NTIsMTEgKzE4NDgsNiBAQAogCSAgICAhZGV2aWNlX2Nhbl93YWtldXAoJmFkYXB0ZXItPnBkZXYtPmRldikpCiAJCXJldHVybiB3b2wtPndvbG9wdHMgPyAtRU9QTk9UU1VQUCA6IDA7CiAKLQlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KIAkvKiB0aGVzZSBzZXR0aW5ncyB3aWxsIGFsd2F5cyBvdmVycmlkZSB3aGF0IHdlIGN1cnJlbnRseSBoYXZlICovCiAJYWRhcHRlci0+d29sID0gMDsKIApAQCAtMjAyNSw3ICsyMDE2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgaWdiX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpZ2JfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyAgICAgICAgICAgPSBpZ2JfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgICAgICAgICAgID0gaWdiX3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8gICAgICAgICAgICA9IGlnYl9nZXRfZHJ2aW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKaW5kZXggYWRiMDlkMy4uOTQzMTg2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKQEAgLTY1LDYgKzY1LDcgQEAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfTlMpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3Nl9GSUJFUiksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X1NFUkRFUyksIGJvYXJkXzgyNTc1IH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X1NFUkRFU19RVUFEKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVIpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUiksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc1RUJfRklCRVJfU0VSREVTKSwgYm9hcmRfODI1NzUgfSwKQEAgLTkzLDEzICs5NCwxNSBAQAogc3RhdGljIHZvaWQgaWdiX2NsZWFuX2FsbF9yeF9yaW5ncyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CiBzdGF0aWMgdm9pZCBpZ2JfY2xlYW5fdHhfcmluZyhzdHJ1Y3QgaWdiX3JpbmcgKik7CiBzdGF0aWMgdm9pZCBpZ2JfY2xlYW5fcnhfcmluZyhzdHJ1Y3QgaWdiX3JpbmcgKik7Ci1zdGF0aWMgdm9pZCBpZ2Jfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIHZvaWQgaWdiX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHZvaWQgaWdiX3VwZGF0ZV9waHlfaW5mbyh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIGlnYl93YXRjaGRvZyh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIGlnYl93YXRjaGRvZ190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKLXN0YXRpYyBpbnQgaWdiX3htaXRfZnJhbWVfcmluZ19hZHYoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiwKLQkJCQkgIHN0cnVjdCBpZ2JfcmluZyAqKTsKLXN0YXRpYyBpbnQgaWdiX3htaXRfZnJhbWVfYWR2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIG5ldGRldl90eF90IGlnYl94bWl0X2ZyYW1lX3JpbmdfYWR2KHN0cnVjdCBza19idWZmICosCisJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICosCisJCQkJCSAgIHN0cnVjdCBpZ2JfcmluZyAqKTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBpZ2JfeG1pdF9mcmFtZV9hZHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaWdiX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgaWdiX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKIHN0YXRpYyBpbnQgaWdiX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKiwgdm9pZCAqKTsKQEAgLTEyNyw3ICsxMzAsNyBAQAogc3RhdGljIHZvaWQgaWdiX3BpbmdfYWxsX3ZmcyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CiBzdGF0aWMgdm9pZCBpZ2JfbXNnX3Rhc2soc3RydWN0IGlnYl9hZGFwdGVyICopOwogc3RhdGljIGludCBpZ2JfcmN2X21zZ19mcm9tX3ZmKHN0cnVjdCBpZ2JfYWRhcHRlciAqLCB1MzIpOwotc3RhdGljIHZvaWQgaWdiX3NldF9tY19saXN0X3Bvb2xzKHN0cnVjdCBpZ2JfYWRhcHRlciAqLCBpbnQsIHUxNik7CitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3NldF9yYWhfcG9vbChzdHJ1Y3QgZTEwMDBfaHcgKiwgaW50ICwgaW50KTsKIHN0YXRpYyB2b2lkIGlnYl92bW1fY29udHJvbChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CiBzdGF0aWMgaW50IGlnYl9zZXRfdmZfbWFjKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgaW50LCB1bnNpZ25lZCBjaGFyICopOwogc3RhdGljIHZvaWQgaWdiX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwpAQCAtMTUxLDYgKzE1NCwxMiBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHZtb2xyOwogCisJLyogaWYgaXQgaXNuJ3QgdGhlIFBGIGNoZWNrIHRvIHNlZSBpZiBWRnMgYXJlIGVuYWJsZWQgYW5kCisJICogaW5jcmVhc2UgdGhlIHNpemUgdG8gc3VwcG9ydCB2bGFuIHRhZ3MgKi8KKwlpZiAodmZuIDwgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCAmJgorCSAgICBhZGFwdGVyLT52Zl9kYXRhW3Zmbl0udmxhbnNfZW5hYmxlZCkKKwkJc2l6ZSArPSBWTEFOX1RBR19TSVpFOworCiAJdm1vbHIgPSByZDMyKEUxMDAwX1ZNT0xSKHZmbikpOwogCXZtb2xyICY9IH5FMTAwMF9WTU9MUl9STFBNTF9NQVNLOwogCXZtb2xyIHw9IHNpemUgfCBFMTAwMF9WTU9MUl9MUEU7CkBAIC04MTgsOSArODI3LDExIEBACiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAogCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpIHsKLQkJd3IzMihFMTAwMF9FSUFNLCAwKTsKLQkJd3IzMihFMTAwMF9FSU1DLCB+MCk7Ci0JCXdyMzIoRTEwMDBfRUlBQywgMCk7CisJCXUzMiByZWd2YWwgPSByZDMyKEUxMDAwX0VJQU0pOworCQl3cjMyKEUxMDAwX0VJQU0sIHJlZ3ZhbCAmIH5hZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrKTsKKwkJd3IzMihFMTAwMF9FSU1DLCBhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrKTsKKwkJcmVndmFsID0gcmQzMihFMTAwMF9FSUFDKTsKKwkJd3IzMihFMTAwMF9FSUFDLCByZWd2YWwgJiB+YWRhcHRlci0+ZWltc19lbmFibGVfbWFzayk7CiAJfQogCiAJd3IzMihFMTAwMF9JQU0sIDApOwpAQCAtODM4LDggKzg0OSwxMCBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKIAlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKSB7Ci0JCXdyMzIoRTEwMDBfRUlBQywgYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayk7Ci0JCXdyMzIoRTEwMDBfRUlBTSwgYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayk7CisJCXUzMiByZWd2YWwgPSByZDMyKEUxMDAwX0VJQUMpOworCQl3cjMyKEUxMDAwX0VJQUMsIHJlZ3ZhbCB8IGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOworCQlyZWd2YWwgPSByZDMyKEUxMDAwX0VJQU0pOworCQl3cjMyKEUxMDAwX0VJQU0sIHJlZ3ZhbCB8IGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOwogCQl3cjMyKEUxMDAwX0VJTVMsIGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOwogCQlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKIAkJCXdyMzIoRTEwMDBfTUJWRklNUiwgMHhGRik7CkBAIC05MjUsNyArOTM4LDcgQEAKIAlpbnQgaTsKIAogCWlnYl9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKLQlpZ2Jfc2V0X211bHRpKG5ldGRldik7CisJaWdiX3NldF9yeF9tb2RlKG5ldGRldik7CiAKIAlpZ2JfcmVzdG9yZV92bGFuKGFkYXB0ZXIpOwogCkBAIC0xMTI5LDcgKzExNDIsNyBAQAogCX0KIAlmYy0+cGF1c2VfdGltZSA9IDB4RkZGRjsKIAlmYy0+c2VuZF94b24gPSAxOwotCWZjLT50eXBlID0gZmMtPm9yaWdpbmFsX3R5cGU7CisJZmMtPmN1cnJlbnRfbW9kZSA9IGZjLT5yZXF1ZXN0ZWRfbW9kZTsKIAogCS8qIGRpc2FibGUgcmVjZWl2ZSBmb3IgYWxsIFZGcyBhbmQgd2FpdCBvbmUgc2Vjb25kICovCiAJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpIHsKQEAgLTExNjYsNyArMTE3OSw4IEBACiAJLm5kb19zdG9wCQk9IGlnYl9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gaWdiX3htaXRfZnJhbWVfYWR2LAogCS5uZG9fZ2V0X3N0YXRzCQk9IGlnYl9nZXRfc3RhdHMsCi0JLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBpZ2Jfc2V0X211bHRpLAorCS5uZG9fc2V0X3J4X21vZGUJPSBpZ2Jfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBpZ2Jfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBpZ2Jfc2V0X21hYywKIAkubmRvX2NoYW5nZV9tdHUJCT0gaWdiX2NoYW5nZV9tdHUsCiAJLm5kb19kb19pb2N0bAkJPSBpZ2JfaW9jdGwsCkBAIC0xMzc5LDYgKzEzOTMsNyBAQAogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwogCiAJaWYgKHBjaV91c2luZ19kYWMpCkBAIC0xNDI2LDggKzE0NDEsOCBAQAogCWh3LT5tYWMuYXV0b25lZyA9IHRydWU7CiAJaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQgPSAweDJmOwogCi0JaHctPmZjLm9yaWdpbmFsX3R5cGUgPSBlMTAwMF9mY19kZWZhdWx0OwotCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfZGVmYXVsdDsKKwlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBlMTAwMF9mY19kZWZhdWx0OworCWh3LT5mYy5jdXJyZW50X21vZGUgPSBlMTAwMF9mY19kZWZhdWx0OwogCiAJYWRhcHRlci0+aXRyX3NldHRpbmcgPSBJR0JfREVGQVVMVF9JVFI7CiAJYWRhcHRlci0+aXRyID0gSUdCX1NUQVJUX0lUUjsKQEAgLTI1MTUsNzUgKzI1MzAsOTQgQEAKIAltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KGh3LT5tYWMuYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKLQlody0+bWFjLm9wcy5yYXJfc2V0KGh3LCBody0+bWFjLmFkZHIsIDApOwotCisJaWdiX3Jhcl9zZXQoaHcsIGh3LT5tYWMuYWRkciwgMCk7CiAJaWdiX3NldF9yYWhfcG9vbChodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBpZ2Jfc2V0X211bHRpIC0gTXVsdGljYXN0IGFuZCBQcm9taXNjdW91cyBtb2RlIHNldAorICogaWdiX3NldF9yeF9tb2RlIC0gU2Vjb25kYXJ5IFVuaWNhc3QsIE11bHRpY2FzdCBhbmQgUHJvbWlzY3VvdXMgbW9kZSBzZXQKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKICAqCi0gKiBUaGUgc2V0X211bHRpIGVudHJ5IHBvaW50IGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgbXVsdGljYXN0IGFkZHJlc3MKLSAqIGxpc3Qgb3IgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGZsYWdzIGFyZSB1cGRhdGVkLiAgVGhpcyByb3V0aW5lIGlzCi0gKiByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIGhhcmR3YXJlIGZvciBwcm9wZXIgbXVsdGljYXN0LAorICogVGhlIHNldF9yeF9tb2RlIGVudHJ5IHBvaW50IGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgdW5pY2FzdCBvciBtdWx0aWNhc3QKKyAqIGFkZHJlc3MgbGlzdHMgb3IgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGZsYWdzIGFyZSB1cGRhdGVkLiAgVGhpcyByb3V0aW5lIGlzCisgKiByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIGhhcmR3YXJlIGZvciBwcm9wZXIgdW5pY2FzdCwgbXVsdGljYXN0LAogICogcHJvbWlzY3VvdXMgbW9kZSwgYW5kIGFsbC1tdWx0aSBiZWhhdmlvci4KICAqKi8KLXN0YXRpYyB2b2lkIGlnYl9zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyB2b2lkIGlnYl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyOworCXVuc2lnbmVkIGludCByYXJfZW50cmllcyA9IGh3LT5tYWMucmFyX2VudHJ5X2NvdW50IC0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCArIDEpOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OwogCXU4ICAqbXRhX2xpc3QgPSBOVUxMOwogCXUzMiByY3RsOwogCWludCBpOwogCiAJLyogQ2hlY2sgZm9yIFByb21pc2N1b3VzIGFuZCBBbGwgTXVsdGljYXN0IG1vZGVzICovCi0KIAlyY3RsID0gcmQzMihFMTAwMF9SQ1RMKTsKIAogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJcmN0bCB8PSAoRTEwMDBfUkNUTF9VUEUgfCBFMTAwMF9SQ1RMX01QRSk7CiAJCXJjdGwgJj0gfkUxMDAwX1JDVExfVkZFOwogCX0gZWxzZSB7Ci0JCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQogCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX01QRTsKKwkJZWxzZQorCQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9NUEU7CisKKwkJaWYgKG5ldGRldi0+dWMuY291bnQgPiByYXJfZW50cmllcykKKwkJCXJjdGwgfD0gRTEwMDBfUkNUTF9VUEU7CisJCWVsc2UKIAkJCXJjdGwgJj0gfkUxMDAwX1JDVExfVVBFOwotCQl9IGVsc2UKLQkJCXJjdGwgJj0gfihFMTAwMF9SQ1RMX1VQRSB8IEUxMDAwX1JDVExfTVBFKTsKIAkJcmN0bCB8PSBFMTAwMF9SQ1RMX1ZGRTsKIAl9CiAJd3IzMihFMTAwMF9SQ1RMLCByY3RsKTsKIAotCWlmIChuZXRkZXYtPm1jX2NvdW50KSB7Ci0JCW10YV9saXN0ID0ga3phbGxvYyhuZXRkZXYtPm1jX2NvdW50ICogNiwgR0ZQX0FUT01JQyk7Ci0JCWlmICghbXRhX2xpc3QpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCSAgICAgICAgImZhaWxlZCB0byBhbGxvY2F0ZSBtdWx0aWNhc3QgZmlsdGVyIGxpc3RcbiIpOwotCQkJcmV0dXJuOworCWlmIChuZXRkZXYtPnVjLmNvdW50ICYmIHJhcl9lbnRyaWVzKSB7CisJCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoaGEsICZuZXRkZXYtPnVjLmxpc3QsIGxpc3QpIHsKKwkJCWlmICghcmFyX2VudHJpZXMpCisJCQkJYnJlYWs7CisJCQlpZ2JfcmFyX3NldChodywgaGEtPmFkZHIsIHJhcl9lbnRyaWVzKTsKKwkJCWlnYl9zZXRfcmFoX3Bvb2woaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQsCisJCQkgICAgICAgICAgICAgICAgIHJhcl9lbnRyaWVzKTsKKwkJCXJhcl9lbnRyaWVzLS07CiAJCX0KIAl9CisJLyogd3JpdGUgdGhlIGFkZHJlc3NlcyBpbiByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIHdyaXRlIGNvbWJpbmluZyAqLworCWZvciAoOyByYXJfZW50cmllcyA+IDAgOyByYXJfZW50cmllcy0tKSB7CisJCXdyMzIoRTEwMDBfUkFIKHJhcl9lbnRyaWVzKSwgMCk7CisJCXdyMzIoRTEwMDBfUkFMKHJhcl9lbnRyaWVzKSwgMCk7CisJfQorCXdyZmwoKTsKKworCWlmICghbmV0ZGV2LT5tY19jb3VudCkgeworCQkvKiBub3RoaW5nIHRvIHByb2dyYW0sIHNvIGNsZWFyIG1jIGxpc3QgKi8KKwkJaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIE5VTEwsIDApOworCQlpZ2JfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKGFkYXB0ZXIpOworCQlyZXR1cm47CisJfQorCisJbXRhX2xpc3QgPSBremFsbG9jKG5ldGRldi0+bWNfY291bnQgKiA2LCBHRlBfQVRPTUlDKTsKKwlpZiAoIW10YV9saXN0KSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJICAgICAgICAiZmFpbGVkIHRvIGFsbG9jYXRlIG11bHRpY2FzdCBmaWx0ZXIgbGlzdFxuIik7CisJCXJldHVybjsKKwl9CiAKIAkvKiBUaGUgc2hhcmVkIGZ1bmN0aW9uIGV4cGVjdHMgYSBwYWNrZWQgYXJyYXkgb2Ygb25seSBhZGRyZXNzZXMuICovCi0JbWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OwotCiAJZm9yIChpID0gMDsgaSA8IG5ldGRldi0+bWNfY291bnQ7IGkrKykgewogCQlpZiAoIW1jX3B0cikKIAkJCWJyZWFrOwogCQltZW1jcHkobXRhX2xpc3QgKyAoaSpFVEhfQUxFTiksIG1jX3B0ci0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKIAkJbWNfcHRyID0gbWNfcHRyLT5uZXh0OwogCX0KLQlpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdChodywgbXRhX2xpc3QsIGksCi0JICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCArIDEsCi0JICAgICAgICAgICAgICAgICAgICAgICAgbWFjLT5yYXJfZW50cnlfY291bnQpOwotCi0JaWdiX3NldF9tY19saXN0X3Bvb2xzKGFkYXB0ZXIsIGksIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKLQlpZ2JfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKGFkYXB0ZXIpOwotCisJaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIG10YV9saXN0LCBpKTsKIAlrZnJlZShtdGFfbGlzdCk7CisJaWdiX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhhZGFwdGVyKTsKIH0KIAogLyogTmVlZCB0byB3YWl0IGEgZmV3IHNlY29uZHMgYWZ0ZXIgbGluayB1cCB0byBnZXQgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmcm9tCkBAIC0yNjE4LDEwICsyNjUyLDYgQEAKIAkJCWxpbmtfYWN0aXZlID0gdHJ1ZTsKIAkJfQogCQlicmVhazsKLQljYXNlIGUxMDAwX21lZGlhX3R5cGVfZmliZXI6Ci0JCXJldF92YWwgPSBody0+bWFjLm9wcy5jaGVja19mb3JfbGluayhodyk7Ci0JCWxpbmtfYWN0aXZlID0gISEocmQzMihFMTAwMF9TVEFUVVMpICYgRTEwMDBfU1RBVFVTX0xVKTsKLQkJYnJlYWs7CiAJY2FzZSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlczoKIAkJcmV0X3ZhbCA9IGh3LT5tYWMub3BzLmNoZWNrX2Zvcl9saW5rKGh3KTsKIAkJbGlua19hY3RpdmUgPSBody0+bWFjLnNlcmRlc19oYXNfbGluazsKQEAgLTMyOTgsOSArMzMyOCw5IEBACiAJcmV0dXJuIF9faWdiX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBzaXplKTsKIH0KIAotc3RhdGljIGludCBpZ2JfeG1pdF9mcmFtZV9yaW5nX2FkdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJICAgc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nKQorc3RhdGljIG5ldGRldl90eF90IGlnYl94bWl0X2ZyYW1lX3JpbmdfYWR2KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJCSAgIHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZykKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXVuc2lnbmVkIGludCBmaXJzdDsKQEAgLTMzODgsNyArMzQxOCw4IEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIGludCBpZ2JfeG1pdF9mcmFtZV9hZHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBpZ2JfeG1pdF9mcmFtZV9hZHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nOwpAQCAtMzQwMSw3ICszNDMyLDcgQEAKIAkgKiB0byBhIGZsb3cuICBSaWdodCBub3csIHBlcmZvcm1hbmNlIGlzIGltcGFjdGVkIHNsaWdodGx5IG5lZ2F0aXZlbHkKIAkgKiBpZiB1c2luZyBtdWx0aXBsZSB0eCBxdWV1ZXMuICBJZiB0aGUgc3RhY2sgYnJlYWtzIGF3YXkgZnJvbSBhCiAJICogc2luZ2xlIHFkaXNjIGltcGxlbWVudGF0aW9uLCB3ZSBjYW4gbG9vayBhdCB0aGlzIGFnYWluLiAqLwotCXJldHVybiAoaWdiX3htaXRfZnJhbWVfcmluZ19hZHYoc2tiLCBuZXRkZXYsIHR4X3JpbmcpKTsKKwlyZXR1cm4gaWdiX3htaXRfZnJhbWVfcmluZ19hZHYoc2tiLCBuZXRkZXYsIHR4X3JpbmcpOwogfQogCiAvKioKQEAgLTM5MzgsNyArMzk2OSw3IEBACiAJCXZmX2RhdGEtPnZmX21jX2hhc2hlc1tpXSA9IGhhc2hfbGlzdFtpXTs7CiAKIAkvKiBGbHVzaCBhbmQgcmVzZXQgdGhlIG10YSB3aXRoIHRoZSBuZXcgdmFsdWVzICovCi0JaWdiX3NldF9tdWx0aShhZGFwdGVyLT5uZXRkZXYpOworCWlnYl9zZXRfcnhfbW9kZShhZGFwdGVyLT5uZXRkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zOTgxLDYgKzQwMTIsOCBAQAogCiAJCXdyMzIoRTEwMDBfVkxWRihpKSwgcmVnKTsKIAl9CisKKwlhZGFwdGVyLT52Zl9kYXRhW3ZmXS52bGFuc19lbmFibGVkID0gMDsKIH0KIAogc3RhdGljIHMzMiBpZ2Jfdmx2Zl9zZXQoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmlkLCBib29sIGFkZCwgdTMyIHZmKQpAQCAtNDAyOSw2ICs0MDYyLDIyIEBACiAJCQlyZWcgfD0gdmlkOwogCiAJCQl3cjMyKEUxMDAwX1ZMVkYoaSksIHJlZyk7CisKKwkJCS8qIGRvIG5vdCBtb2RpZnkgUkxQTUwgZm9yIFBGIGRldmljZXMgKi8KKwkJCWlmICh2ZiA+PSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQkJCXJldHVybiAwOworCisJCQlpZiAoIWFkYXB0ZXItPnZmX2RhdGFbdmZdLnZsYW5zX2VuYWJsZWQpIHsKKwkJCQl1MzIgc2l6ZTsKKwkJCQlyZWcgPSByZDMyKEUxMDAwX1ZNT0xSKHZmKSk7CisJCQkJc2l6ZSA9IHJlZyAmIEUxMDAwX1ZNT0xSX1JMUE1MX01BU0s7CisJCQkJc2l6ZSArPSA0OworCQkJCXJlZyAmPSB+RTEwMDBfVk1PTFJfUkxQTUxfTUFTSzsKKwkJCQlyZWcgfD0gc2l6ZTsKKwkJCQl3cjMyKEUxMDAwX1ZNT0xSKHZmKSwgcmVnKTsKKwkJCX0KKwkJCWFkYXB0ZXItPnZmX2RhdGFbdmZdLnZsYW5zX2VuYWJsZWQrKzsKKwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9IGVsc2UgewpAQCAtNDA0MSw2ICs0MDkwLDIxIEBACiAJCQkJaWdiX3ZmdGFfc2V0KGh3LCB2aWQsIGZhbHNlKTsKIAkJCX0KIAkJCXdyMzIoRTEwMDBfVkxWRihpKSwgcmVnKTsKKworCQkJLyogZG8gbm90IG1vZGlmeSBSTFBNTCBmb3IgUEYgZGV2aWNlcyAqLworCQkJaWYgKHZmID49IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpCisJCQkJcmV0dXJuIDA7CisKKwkJCWFkYXB0ZXItPnZmX2RhdGFbdmZdLnZsYW5zX2VuYWJsZWQtLTsKKwkJCWlmICghYWRhcHRlci0+dmZfZGF0YVt2Zl0udmxhbnNfZW5hYmxlZCkgeworCQkJCXUzMiBzaXplOworCQkJCXJlZyA9IHJkMzIoRTEwMDBfVk1PTFIodmYpKTsKKwkJCQlzaXplID0gcmVnICYgRTEwMDBfVk1PTFJfUkxQTUxfTUFTSzsKKwkJCQlzaXplIC09IDQ7CisJCQkJcmVnICY9IH5FMTAwMF9WTU9MUl9STFBNTF9NQVNLOworCQkJCXJlZyB8PSBzaXplOworCQkJCXdyMzIoRTEwMDBfVk1PTFIodmYpLCByZWcpOworCQkJfQogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC00MDcyLDEzICs0MTM2LDE0IEBACiAJYWRhcHRlci0+dmZfZGF0YVt2Zl0ubnVtX3ZmX21jX2hhc2hlcyA9IDA7CiAKIAkvKiBGbHVzaCBhbmQgcmVzZXQgdGhlIG10YSB3aXRoIHRoZSBuZXcgdmFsdWVzICovCi0JaWdiX3NldF9tdWx0aShhZGFwdGVyLT5uZXRkZXYpOworCWlnYl9zZXRfcnhfbW9kZShhZGFwdGVyLT5uZXRkZXYpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3ZmX3Jlc2V0X21zZyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2ZikKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXVuc2lnbmVkIGNoYXIgKnZmX21hYyA9IGFkYXB0ZXItPnZmX2RhdGFbdmZdLnZmX21hY19hZGRyZXNzZXM7CisJaW50IHJhcl9lbnRyeSA9IGh3LT5tYWMucmFyX2VudHJ5X2NvdW50IC0gKHZmICsgMSk7CiAJdTMyIHJlZywgbXNnYnVmWzNdOwogCXU4ICphZGRyID0gKHU4ICopKCZtc2didWZbMV0pOwogCkBAIC00MDg2LDggKzQxNTEsOCBAQAogCWlnYl92Zl9yZXNldF9ldmVudChhZGFwdGVyLCB2Zik7CiAKIAkvKiBzZXQgdmYgbWFjIGFkZHJlc3MgKi8KLQlpZ2JfcmFyX3NldChodywgdmZfbWFjLCB2ZiArIDEpOwotCWlnYl9zZXRfcmFoX3Bvb2woaHcsIHZmLCB2ZiArIDEpOworCWlnYl9yYXJfc2V0KGh3LCB2Zl9tYWMsIHJhcl9lbnRyeSk7CisJaWdiX3NldF9yYWhfcG9vbChodywgdmYsIHJhcl9lbnRyeSk7CiAKIAkvKiBlbmFibGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgZm9yIHZmICovCiAJcmVnID0gcmQzMihFMTAwMF9WRlRFKTsKQEAgLTQ1NDIsNiArNDYwNywyMCBAQAogCWFkYXB0ZXItPmh3X2NzdW1fZ29vZCsrOwogfQogCitzdGF0aWMgaW5saW5lIHUxNiBpZ2JfZ2V0X2hsZW4oc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjICpyeF9kZXNjKQoreworCS8qIEhXIHdpbGwgbm90IERNQSBpbiBkYXRhIGxhcmdlciB0aGFuIHRoZSBnaXZlbiBidWZmZXIsIGV2ZW4gaWYgaXQKKwkgKiBwYXJzZXMgdGhlIChORlMsIG9mIGNvdXJzZSkgaGVhZGVyIHRvIGJlIGxhcmdlci4gIEluIHRoYXQgY2FzZSwgaXQKKwkgKiBmaWxscyB0aGUgaGVhZGVyIGJ1ZmZlciBhbmQgc3BpbGxzIHRoZSByZXN0IGludG8gdGhlIHBhZ2UuCisJICovCisJdTE2IGhsZW4gPSAobGUxNl90b19jcHUocnhfZGVzYy0+d2IubG93ZXIubG9fZHdvcmQuaGRyX2luZm8pICYKKwkgICAgICAgICAgIEUxMDAwX1JYREFEVl9IRFJCVUZMRU5fTUFTSykgPj4gRTEwMDBfUlhEQURWX0hEUkJVRkxFTl9TSElGVDsKKwlpZiAoaGxlbiA+IGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplKQorCQlobGVuID0gYWRhcHRlci0+cnhfcHNfaGRyX3NpemU7CisJcmV0dXJuIGhsZW47Cit9CisKIHN0YXRpYyBib29sIGlnYl9jbGVhbl9yeF9pcnFfYWR2KHN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZywKIAkJCQkgaW50ICp3b3JrX2RvbmUsIGludCBidWRnZXQpCiB7CkBAIC00NTU2LDcgKzQ2MzUsOCBAQAogCWludCBjbGVhbmVkX2NvdW50ID0gMDsKIAl1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXMgPSAwLCB0b3RhbF9wYWNrZXRzID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKLQl1MzIgbGVuZ3RoLCBobGVuLCBzdGF0ZXJyOworCXUzMiBzdGF0ZXJyOworCXUxNiBsZW5ndGg7CiAKIAlpID0gcnhfcmluZy0+bmV4dF90b19jbGVhbjsKIAlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKQEAgLTQ1OTMsMTcgKzQ2NzMsOCBAQAogCQkJZ290byBzZW5kX3VwOwogCQl9CiAKLQkJLyogSFcgd2lsbCBub3QgRE1BIGluIGRhdGEgbGFyZ2VyIHRoYW4gdGhlIGdpdmVuIGJ1ZmZlciwgZXZlbgotCQkgKiBpZiBpdCBwYXJzZXMgdGhlIChORlMsIG9mIGNvdXJzZSkgaGVhZGVyIHRvIGJlIGxhcmdlci4gIEluCi0JCSAqIHRoYXQgY2FzZSwgaXQgZmlsbHMgdGhlIGhlYWRlciBidWZmZXIgYW5kIHNwaWxscyB0aGUgcmVzdAotCQkgKiBpbnRvIHRoZSBwYWdlLgotCQkgKi8KLQkJaGxlbiA9IChsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi5sb3dlci5sb19kd29yZC5oZHJfaW5mbykgJgotCQkgIEUxMDAwX1JYREFEVl9IRFJCVUZMRU5fTUFTSykgPj4gRTEwMDBfUlhEQURWX0hEUkJVRkxFTl9TSElGVDsKLQkJaWYgKGhsZW4gPiBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkKLQkJCWhsZW4gPSBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZTsKLQotCQlpZiAoIXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpIHsKKwkJaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKKwkJCXUxNiBobGVuID0gaWdiX2dldF9obGVuKGFkYXB0ZXIsIHJ4X2Rlc2MpOwogCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLAogCQkJCQkgYWRhcHRlci0+cnhfcHNfaGRyX3NpemUsCiAJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwpAQCAtNDg0Myw4ICs0OTE0LDYgQEAKIAkJZGF0YS0+cGh5X2lkID0gYWRhcHRlci0+aHcucGh5LmFkZHI7CiAJCWJyZWFrOwogCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07CiAJCWlmIChpZ2JfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgZGF0YS0+cmVnX251bSAmIDB4MUYsCiAJCSAgICAgICAgICAgICAgICAgICAgICZkYXRhLT52YWxfb3V0KSkKIAkJCXJldHVybiAtRUlPOwpAQCAtNTAzMyw2ICs1MTAyLDM0IEBACiAJfQogfQogCitzMzIgaWdiX3JlYWRfcGNpZV9jYXBfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiByZWcsIHUxNiAqdmFsdWUpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CisJdTE2IGNhcF9vZmZzZXQ7CisKKwljYXBfb2Zmc2V0ID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShhZGFwdGVyLT5wZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJaWYgKCFjYXBfb2Zmc2V0KQorCQlyZXR1cm4gLUUxMDAwX0VSUl9DT05GSUc7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChhZGFwdGVyLT5wZGV2LCBjYXBfb2Zmc2V0ICsgcmVnLCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworczMyIGlnYl93cml0ZV9wY2llX2NhcF9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHJlZywgdTE2ICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKKwl1MTYgY2FwX29mZnNldDsKKworCWNhcF9vZmZzZXQgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGFkYXB0ZXItPnBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAoIWNhcF9vZmZzZXQpCisJCXJldHVybiAtRTEwMDBfRVJSX0NPTkZJRzsKKworCXBjaV93cml0ZV9jb25maWdfd29yZChhZGFwdGVyLT5wZGV2LCBjYXBfb2Zmc2V0ICsgcmVnLCAqdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGlnYl92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCiB7CkBAIC01MTM2LDE0ICs1MjMzLDYgQEAKIAogCW1hYy0+YXV0b25lZyA9IDA7CiAKLQkvKiBGaWJlciBOSUNzIG9ubHkgYWxsb3cgMTAwMCBnYnBzIEZ1bGwgZHVwbGV4ICovCi0JaWYgKChhZGFwdGVyLT5ody5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSAmJgotCQlzcGRkcGx4ICE9IChTUEVFRF8xMDAwICsgRFVQTEVYX0ZVTEwpKSB7Ci0JCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCSJVbnN1cHBvcnRlZCBTcGVlZC9EdXBsZXggY29uZmlndXJhdGlvblxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCXN3aXRjaCAoc3BkZHBseCkgewogCWNhc2UgU1BFRURfMTAgKyBEVVBMRVhfSEFMRjoKIAkJbWFjLT5mb3JjZWRfc3BlZWRfZHVwbGV4ID0gQURWRVJUSVNFXzEwX0hBTEY7CkBAIC01MjAyLDcgKzUyOTEsNyBAQAogCiAJaWYgKHd1ZmMpIHsKIAkJaWdiX3NldHVwX3JjdGwoYWRhcHRlcik7Ci0JCWlnYl9zZXRfbXVsdGkobmV0ZGV2KTsKKwkJaWdiX3NldF9yeF9tb2RlKG5ldGRldik7CiAKIAkJLyogdHVybiBvbiBhbGwtbXVsdGkgbW9kZSBpZiB3YWtlIG9uIG11bHRpY2FzdCBpcyBlbmFibGVkICovCiAJCWlmICh3dWZjICYgRTEwMDBfV1VGQ19NQykgewpAQCAtNTQ1MiwyOSArNTU0MSwxNyBAQAogCWlnYl9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKIH0KIAotc3RhdGljIHZvaWQgaWdiX3NldF9tY19saXN0X3Bvb2xzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgIGludCBlbnRyeV9jb3VudCwgdTE2IHRvdGFsX3Jhcl9maWx0ZXJzKQotewotCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JaW50IGkgPSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ICsgMTsKLQotCWlmICgoaSArIGVudHJ5X2NvdW50KSA8IHRvdGFsX3Jhcl9maWx0ZXJzKQotCQl0b3RhbF9yYXJfZmlsdGVycyA9IGkgKyBlbnRyeV9jb3VudDsKLQotCWZvciAoOyBpIDwgdG90YWxfcmFyX2ZpbHRlcnM7IGkrKykKLQkJaWdiX3NldF9yYWhfcG9vbChodywgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCwgaSk7Ci19Ci0KIHN0YXRpYyBpbnQgaWdiX3NldF92Zl9tYWMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmYsIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JaW50IHJhcl9lbnRyeSA9IHZmICsgMTsgLyogVkYgTUFDIGFkZHJlc3NlcyBzdGFydCBhdCBlbnRyeSAxICovCi0KLQlpZ2JfcmFyX3NldChodywgbWFjX2FkZHIsIHJhcl9lbnRyeSk7CisJLyogVkYgTUFDIGFkZHJlc3NlcyBzdGFydCBhdCBlbmQgb2YgcmVjZWl2ZSBhZGRyZXNzZXMgYW5kIG1vdmVzCisJICogdG9yd2FyZHMgdGhlIGZpcnN0LCBhcyBhIHJlc3VsdCBhIGNvbGxpc2lvbiBzaG91bGQgbm90IGJlIHBvc3NpYmxlICovCisJaW50IHJhcl9lbnRyeSA9IGh3LT5tYWMucmFyX2VudHJ5X2NvdW50IC0gKHZmICsgMSk7CiAKIAltZW1jcHkoYWRhcHRlci0+dmZfZGF0YVt2Zl0udmZfbWFjX2FkZHJlc3NlcywgbWFjX2FkZHIsIEVUSF9BTEVOKTsKIAorCWlnYl9yYXJfc2V0KGh3LCBtYWNfYWRkciwgcmFyX2VudHJ5KTsKIAlpZ2Jfc2V0X3JhaF9wb29sKGh3LCB2ZiwgcmFyX2VudHJ5KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYwppbmRleCAyYmM5ZDYzLi45MTAyNGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYwpAQCAtOTYsOCArOTYsNiBAQAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfUlhEX1NQQ19WTEFOX01BU0spOwogCWVsc2UKIAkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKLQotCW5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZ2J2Zl9yeF9jaGVja3N1bV9hZHYoc3RydWN0IGlnYnZmX2FkYXB0ZXIgKmFkYXB0ZXIsCkBAIC0xNDksNyArMTQ3LDYgQEAKIAkJYnVmc3ogPSBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZTsKIAllbHNlCiAJCWJ1ZnN6ID0gYWRhcHRlci0+cnhfYnVmZmVyX2xlbjsKLQlidWZzeiArPSBORVRfSVBfQUxJR047CiAKIAl3aGlsZSAoY2xlYW5lZF9jb3VudC0tKSB7CiAJCXJ4X2Rlc2MgPSBJR0JWRl9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CkBAIC0xNzMsNyArMTcwLDcgQEAKIAkJfQogCiAJCWlmICghYnVmZmVyX2luZm8tPnNrYikgewotCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGJ1ZnN6KTsKKwkJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmV0ZGV2LCBidWZzeiArIE5FVF9JUF9BTElHTik7CiAJCQlpZiAoIXNrYikgewogCQkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CiAJCQkJZ290byBub19idWZmZXJzOwpAQCAtMjg2LDcgKzI4Myw3IEBACiAKIAkJaWYgKCFza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplICsgTkVUX0lQX0FMSUdOLAorCQkJICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSwKIAkJCSAgICAgICAgICAgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCXNrYl9wdXQoc2tiLCBobGVuKTsKIAkJfQpAQCAtMzQzLDggKzM0MCw2IEBACiAJCWlnYnZmX3JlY2VpdmVfc2tiKGFkYXB0ZXIsIG5ldGRldiwgc2tiLCBzdGF0ZXJyLAogCQkgICAgICAgICAgICAgICAgICByeF9kZXNjLT53Yi51cHBlci52bGFuKTsKIAotCQluZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCiBuZXh0X2Rlc2M6CiAJCXJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvciA9IDA7CiAKQEAgLTIyMDUsOSArMjIwMCw5IEBACiAJbW1pb3diKCk7CiB9CiAKLXN0YXRpYyBpbnQgaWdidmZfeG1pdF9mcmFtZV9yaW5nX2FkdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWdidmZfcmluZyAqdHhfcmluZykKK3N0YXRpYyBuZXRkZXZfdHhfdCBpZ2J2Zl94bWl0X2ZyYW1lX3JpbmdfYWR2KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkJICAgICBzdHJ1Y3QgaWdidmZfcmluZyAqdHhfcmluZykKIHsKIAlzdHJ1Y3QgaWdidmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdW5zaWduZWQgaW50IGZpcnN0LCB0eF9mbGFncyA9IDA7CkBAIC0yMjgwLDExICsyMjc1LDExIEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIGludCBpZ2J2Zl94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaWdidmZfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpZ2J2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaWdidmZfcmluZyAqdHhfcmluZzsKLQlpbnQgcmV0dmFsOwogCiAJaWYgKHRlc3RfYml0KF9fSUdCVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMjI5Myw5ICsyMjg4LDcgQEAKIAogCXR4X3JpbmcgPSAmYWRhcHRlci0+dHhfcmluZ1swXTsKIAotCXJldHZhbCA9IGlnYnZmX3htaXRfZnJhbWVfcmluZ19hZHYoc2tiLCBuZXRkZXYsIHR4X3JpbmcpOwotCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gaWdidmZfeG1pdF9mcmFtZV9yaW5nX2Fkdihza2IsIG5ldGRldiwgdHhfcmluZyk7CiB9CiAKIC8qKgpAQCAtMjUxMiw2ICsyNTA1LDkgQEAKIAogCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKIAorCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJaWdidmZfZG93bihhZGFwdGVyKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pb2MzLWV0aC5jIGIvZHJpdmVycy9uZXQvaW9jMy1ldGguYwppbmRleCBlM2NmZWZhLi44ZWMxNWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKQEAgLTE1MTUsNyArMTUxNSw3IEBACiAKIAlzcGluX3VubG9ja19pcnEoJmlwLT5pb2MzX2xvY2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgaW9jM190aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcGcuYyBiL2RyaXZlcnMvbmV0L2lwZy5jCmluZGV4IDQzMDE5NDYuLjlmN2I1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lwZy5jCisrKyBiL2RyaXZlcnMvbmV0L2lwZy5jCkBAIC0xODU4LDcgKzE4NTgsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlwZ19uaWNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaXBnX25pY19oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBnX25pY19wcml2YXRlICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBzcC0+aW9hZGRyOwpAQCAtMjE4NSw3ICsyMTg2LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgaXBnX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpcGdfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IGlwZ19nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IGlwZ19zZXRfc2V0dGluZ3MsCiAJLm53YXlfcmVzZXQgICA9IGlwZ19ud2F5X3Jlc2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jCmluZGV4IGFkMTc5NTUuLjEyYzdiMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMKQEAgLTExMSw3ICsxMTEsOCBAQAogc3RhdGljIHZvaWQgYWxpX2lyY2NfY2hhbmdlX3NwZWVkKHN0cnVjdCBhbGlfaXJjY19jYiAqc2VsZiwgX191MzIgYmF1ZCk7CiAKIC8qIFNJUiBmdW5jdGlvbiAqLwotc3RhdGljIGludCAgYWxpX2lyY2Nfc2lyX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBhbGlfaXJjY19zaXJfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBhbGlfaXJjY19zaXJfaW50ZXJydXB0KHN0cnVjdCBhbGlfaXJjY19jYiAqc2VsZik7CiBzdGF0aWMgdm9pZCBhbGlfaXJjY19zaXJfcmVjZWl2ZShzdHJ1Y3QgYWxpX2lyY2NfY2IgKnNlbGYpOwogc3RhdGljIHZvaWQgYWxpX2lyY2Nfc2lyX3dyaXRlX3dha2V1cChzdHJ1Y3QgYWxpX2lyY2NfY2IgKnNlbGYpOwpAQCAtMTE5LDcgKzEyMCw4IEBACiBzdGF0aWMgdm9pZCBhbGlfaXJjY19zaXJfY2hhbmdlX3NwZWVkKHN0cnVjdCBhbGlfaXJjY19jYiAqcHJpdiwgX191MzIgc3BlZWQpOwogCiAvKiBGSVIgZnVuY3Rpb24gKi8KLXN0YXRpYyBpbnQgIGFsaV9pcmNjX2Zpcl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgIGFsaV9pcmNjX2Zpcl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGFsaV9pcmNjX2Zpcl9jaGFuZ2Vfc3BlZWQoc3RydWN0IGFsaV9pcmNjX2NiICpwcml2LCBfX3UzMiBzcGVlZCk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgYWxpX2lyY2NfZmlyX2ludGVycnVwdChzdHJ1Y3QgYWxpX2lyY2NfY2IgKnNlbGYpOwogc3RhdGljIGludCAgYWxpX2lyY2NfZG1hX3JlY2VpdmUoc3RydWN0IGFsaV9pcmNjX2NiICpzZWxmKTsgCkBAIC0xNDM1LDcgKzE0MzcsOCBAQAogICogICAgVHJhbnNtaXQgdGhlIGZyYW1lCiAgKgogICovCi1zdGF0aWMgaW50IGFsaV9pcmNjX2Zpcl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBhbGlfaXJjY19maXJfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhbGlfaXJjY19jYiAqc2VsZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTQ2Niw3ICsxNDY5LDcgQEAKIAkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VsZi0+bG9jaywgZmxhZ3MpOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9IGVsc2UKIAkJCXNlbGYtPm5ld19zcGVlZCA9IHNwZWVkOwogCX0KQEAgLTE1NzcsNyArMTU4MCw3IEBACiAJZGV2X2tmcmVlX3NrYihza2IpOwogCiAJSVJEQV9ERUJVRygxLCAiJXMoKSwgLS0tLS0tLS0tLS0tLS0tLS0gRW5kIC0tLS0tLS0tLS0tLS0tLS0tLVxuIiwgX19mdW5jX18gKTsKLQlyZXR1cm4gMDsJCisJcmV0dXJuIE5FVERFVl9UWF9PSzsJCiB9CiAKIApAQCAtMTk1Nyw3ICsxOTYwLDggQEAKICAqICAgIFRyYW5zbWl0IHRoZSBmcmFtZSEKICAqCiAgKi8KLXN0YXRpYyBpbnQgYWxpX2lyY2Nfc2lyX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGFsaV9pcmNjX3Npcl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFsaV9pcmNjX2NiICpzZWxmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xOTY2LDEwICsxOTcwLDEwIEBACiAJCiAJSVJEQV9ERUJVRygyLCAiJXMoKSwgLS0tLS0tLS0tLS0tLS0tLSBTdGFydCAtLS0tLS0tLS0tLS0tLS0tXG4iLCBfX2Z1bmNfXyApOwogCQotCUlSREFfQVNTRVJUKGRldiAhPSBOVUxMLCByZXR1cm4gMDspOworCUlSREFfQVNTRVJUKGRldiAhPSBOVUxMLCByZXR1cm4gTkVUREVWX1RYX09LOyk7CiAJCiAJc2VsZiA9IG5ldGRldl9wcml2KGRldik7Ci0JSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gMDspOworCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIE5FVERFVl9UWF9PSzspOwogCiAJaW9iYXNlID0gc2VsZi0+aW8uc2lyX2Jhc2U7CiAKQEAgLTE5OTEsNyArMTk5NSw3IEBACiAJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbGYtPmxvY2ssIGZsYWdzKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfSBlbHNlCiAJCQlzZWxmLT5uZXdfc3BlZWQgPSBzcGVlZDsKIAl9CkBAIC0yMDE1LDcgKzIwMTksNyBAQAogCQogCUlSREFfREVCVUcoMiwgIiVzKCksIC0tLS0tLS0tLS0tLS0tLS0tIEVuZCAtLS0tLS0tLS0tLS0tLS0tLS1cbiIsIF9fZnVuY19fICk7CiAJCi0JcmV0dXJuIDA7CQorCXJldHVybiBORVRERVZfVFhfT0s7CQogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKaW5kZXggZWUxY2ZmNS4uZWI0MjQ2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKQEAgLTQ5OCw3ICs0OTgsNyBAQAogCQkJYXVwLT5uZXdzcGVlZCA9IDA7CiAJCX0KIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlwdHhkID0gYXVwLT50eF9yaW5nW2F1cC0+dHhfaGVhZF07CkBAIC01NTEsNyArNTUxLDcgQEAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJYXVwLT50eF9oZWFkID0gKGF1cC0+dHhfaGVhZCArIDEpICYgKE5VTV9JUl9ERVNDIC0gMSk7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKaW5kZXggOWEwMzQ2ZS4uMmQ3YjVjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYwpAQCAtOTcwLDcgKzk3MCw3IEBACiAvKiBOZXRkZXYgc3R5bGUgY29kZSAqLwogCiAvKiBUcmFuc21pdCBzb21ldGhpbmcgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogdG9zaG9ib2VfaGFyZF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICBzdHJ1Y3QgdG9zaG9ib2VfY2IgKnNlbGY7CkBAIC05ODEsNyArOTgxLDcgQEAKIAogICBzZWxmID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotICBJUkRBX0FTU0VSVCAoc2VsZiAhPSBOVUxMLCByZXR1cm4gMDsgKTsKKyAgSVJEQV9BU1NFUlQgKHNlbGYgIT0gTlVMTCwgcmV0dXJuIE5FVERFVl9UWF9PSzsgKTsKIAogICBJUkRBX0RFQlVHICgxLCAiJXMudHg6JXgoJXgpJXhcbiIsIF9fZnVuY19fCiAgICAgICAsc2tiLT5sZW4sc2VsZi0+dHhwZW5kaW5nLElOQiAoT0JPRV9FTkFCTEVIKSk7CkBAIC0xMDIxLDcgKzEwMjEsNyBAQAogICAgICAgICAgICAgewogCSAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbGYtPnNwaW5sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2IgKHNrYik7Ci0gICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICByZXR1cm4gTkVUREVWX1RYX09LOwogICAgICAgICAgICAgfQogICAgICAgICAgIC8qIFRydWUgcGFja2V0LCBnbyBvbiwgYnV0ICovCiAgICAgICAgICAgLyogZG8gbm90IGFjY2VwdCBhbnl0aGluZyBiZWZvcmUgY2hhbmdlIHNwZWVkIGV4ZWN1dGlvbiAqLwpAQCAtMTAzNiw3ICsxMDM2LDcgQEAKICAgICAgICAgICB0b3Nob2JvZV9zZXRiYXVkIChzZWxmKTsKIAkgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbGYtPnNwaW5sb2NrLCBmbGFncyk7CiAgICAgICAgICAgZGV2X2tmcmVlX3NrYiAoc2tiKTsKLSAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICByZXR1cm4gTkVUREVWX1RYX09LOwogICAgICAgICB9CiAKICAgICB9CkBAIC0xMTQzLDcgKzExNDMsNyBAQAogICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5zcGlubG9jaywgZmxhZ3MpOwogICBkZXZfa2ZyZWVfc2tiIChza2IpOwogCi0gIHJldHVybiAwOworICByZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKmludGVycnVwdCBoYW5kbGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKaW5kZXggMGMwODMxYy4uMjE1YWRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYwpAQCAtMTExLDcgKzExMSw4IEBACiBzdGF0aWMgc3RydWN0IGlyZGFfY2xhc3NfZGVzYyAqaXJkYV91c2JfZmluZF9jbGFzc19kZXNjKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIHN0YXRpYyB2b2lkIGlyZGFfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogc3RhdGljIHZvaWQgaXJkYV91c2JfY2hhbmdlX3NwZWVkX3hib2ZzKHN0cnVjdCBpcmRhX3VzYl9jYiAqc2VsZik7Ci1zdGF0aWMgaW50IGlyZGFfdXNiX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBpcmRhX3VzYl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBpcmRhX3VzYl9vcGVuKHN0cnVjdCBpcmRhX3VzYl9jYiAqc2VsZik7CiBzdGF0aWMgdm9pZCBpcmRhX3VzYl9jbG9zZShzdHJ1Y3QgaXJkYV91c2JfY2IgKnNlbGYpOwogc3RhdGljIHZvaWQgc3BlZWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwpAQCAtMzgxLDcgKzM4Miw4IEBACiAvKgogICogU2VuZCBhbiBJckRBIGZyYW1lIHRvIHRoZSBVU0IgZG9uZ2xlIChmb3IgdHJhbnNtaXNzaW9uKQogICovCi1zdGF0aWMgaW50IGlyZGFfdXNiX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGlyZGFfdXNiX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaXJkYV91c2JfY2IgKnNlbGYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCB1cmIgKnVyYiA9IHNlbGYtPnR4X3VyYjsKQEAgLTUzNCw3ICs1MzYsNyBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5sb2NrLCBmbGFncyk7CiAJCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogZHJvcDoKIAkvKiBEcm9wIHNpbGVudGx5IHRoZSBza2IgYW5kIGV4aXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYwppbmRleCBjM2U0ZTJjLi4yZmMzMGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCkBAIC0xNTAsNyArMTUwLDggQEAKIC8qCiAgKiBDYWxsZWQgZnJvbSBuZXQvY29yZSB3aGVuIG5ldyBmcmFtZSBpcyBhdmFpbGFibGUuCiAgKi8KLXN0YXRpYyBpbnQga2luZ3N1bl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBraW5nc3VuX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBraW5nc3VuX2NiICpraW5nc3VuOwogCWludCB3cmFwbGVuOwpAQCAtNDE2LDcgKzQxNyw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMga2luZ3N1bl9vcHMgPSB7Ci0JLm5kb19zdGFydF94bWl0ID0ga2luZ3N1bl9oYXJkX3htaXQsCisJLm5kb19zdGFydF94bWl0CSAgICAgPSBraW5nc3VuX2hhcmRfeG1pdCwKIAkubmRvX29wZW4gICAgICAgICAgICA9IGtpbmdzdW5fbmV0X29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgPSBraW5nc3VuX25ldF9jbG9zZSwKIAkubmRvX2RvX2lvY3RsICAgICAgICA9IGtpbmdzdW5fbmV0X2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKaW5kZXggZDczYjhiNi4uZjRkMTNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCkBAIC0zODUsNyArMzg1LDggQEAKIC8qCiAgKiBDYWxsZWQgZnJvbSBuZXQvY29yZSB3aGVuIG5ldyBmcmFtZSBpcyBhdmFpbGFibGUuCiAgKi8KLXN0YXRpYyBpbnQga3M5NTlfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qga3M5NTlfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBrczk1OV9jYiAqa2luZ3N1bjsKIAl1bnNpZ25lZCBpbnQgd3JhcGxlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCmluZGV4IDFlZjQ1ZWMuLjVmOWQ3MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYwpAQCAtMjk4LDcgKzI5OCw4IEBACiAvKgogICogQ2FsbGVkIGZyb20gbmV0L2NvcmUgd2hlbiBuZXcgZnJhbWUgaXMgYXZhaWxhYmxlLgogICovCi1zdGF0aWMgaW50IGtzZGF6emxlX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGtzZGF6emxlX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qga3NkYXp6bGVfY2IgKmtpbmdzdW47CiAJdW5zaWduZWQgaW50IHdyYXBsZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCmluZGV4IGY0ZGYxMDAuLmIzZDMwYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCkBAIC04MTcsNyArODE3LDggQEAKIH0KIAogLyogVHJhbnNtaXQgY2FsbGJhY2sgZnVudGlvbi4gICovCi1zdGF0aWMgaW50IG1jc19oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbWNzX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBtY3NfY2IgKm1jczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5oIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmgKaW5kZXggNmJkYzYyMS4uYjEwNjg5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmgKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmgKQEAgLTE1Niw3ICsxNTYsOCBAQAogCiBzdGF0aWMgdm9pZCBtY3NfcmVjZWl2ZV9pcnEoc3RydWN0IHVyYiAqdXJiKTsKIHN0YXRpYyB2b2lkIG1jc19zZW5kX2lycShzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIGludCBtY3NfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworc3RhdGljIG5ldGRldl90eF90IG1jc19oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiAKIHN0YXRpYyBpbnQgbWNzX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKaW5kZXggNDVmZDljMS4uMjQxMzI5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYwpAQCAtMTczLDggKzE3MywxMCBAQAogc3RhdGljIHZvaWQgbnNjX2lyY2NfcGlvX3JlY2VpdmUoc3RydWN0IG5zY19pcmNjX2NiICpzZWxmKTsKIHN0YXRpYyBpbnQgIG5zY19pcmNjX2RtYV9yZWNlaXZlKHN0cnVjdCBuc2NfaXJjY19jYiAqc2VsZik7IAogc3RhdGljIGludCAgbnNjX2lyY2NfZG1hX3JlY2VpdmVfY29tcGxldGUoc3RydWN0IG5zY19pcmNjX2NiICpzZWxmLCBpbnQgaW9iYXNlKTsKLXN0YXRpYyBpbnQgIG5zY19pcmNjX2hhcmRfeG1pdF9zaXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50ICBuc2NfaXJjY19oYXJkX3htaXRfZmlyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90ICBuc2NfaXJjY19oYXJkX3htaXRfc2lyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgIG5zY19pcmNjX2hhcmRfeG1pdF9maXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgIG5zY19pcmNjX3Bpb193cml0ZShpbnQgaW9iYXNlLCBfX3U4ICpidWYsIGludCBsZW4sIGludCBmaWZvX3NpemUpOwogc3RhdGljIHZvaWQgbnNjX2lyY2NfZG1hX3htaXQoc3RydWN0IG5zY19pcmNjX2NiICpzZWxmLCBpbnQgaW9iYXNlKTsKIHN0YXRpYyBfX3U4IG5zY19pcmNjX2NoYW5nZV9zcGVlZChzdHJ1Y3QgbnNjX2lyY2NfY2IgKnNlbGYsIF9fdTMyIGJhdWQpOwpAQCAtMTM1NSw3ICsxMzU3LDggQEAKICAqICAgIFRyYW5zbWl0IHRoZSBmcmFtZSEKICAqCiAgKi8KLXN0YXRpYyBpbnQgbnNjX2lyY2NfaGFyZF94bWl0X3NpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IG5zY19pcmNjX2hhcmRfeG1pdF9zaXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5zY19pcmNjX2NiICpzZWxmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMzY1LDcgKzEzNjgsNyBAQAogCQogCXNlbGYgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gMDspOworCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIE5FVERFVl9UWF9PSzspOwogCiAJaW9iYXNlID0gc2VsZi0+aW8uZmlyX2Jhc2U7CiAKQEAgLTEzOTcsNyArMTQwMCw3IEBACiAJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbGYtPmxvY2ssIGZsYWdzKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfSBlbHNlCiAJCQlzZWxmLT5uZXdfc3BlZWQgPSBzcGVlZDsKIAl9CkBAIC0xNDI0LDEwICsxNDI3LDExIEBACiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi1zdGF0aWMgaW50IG5zY19pcmNjX2hhcmRfeG1pdF9maXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBuc2NfaXJjY19oYXJkX3htaXRfZmlyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuc2NfaXJjY19jYiAqc2VsZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTQ2Nyw3ICsxNDcxLDcgQEAKIAkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VsZi0+bG9jaywgZmxhZ3MpOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9IGVsc2UgewogCQkJLyogQ2hhbmdlIHNwZWVkIGFmdGVyIGN1cnJlbnQgZnJhbWUgKi8KIAkJCXNlbGYtPm5ld19zcGVlZCA9IHNwZWVkOwpAQCAtMTU1NCw3ICsxNTU4LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5sb2NrLCBmbGFncyk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKaW5kZXggNzdkMTBlZC4uMTQ0NWU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMKQEAgLTUwNCw3ICs1MDQsNyBAQAogCQkJcHhhX2lyZGFfc2V0X3NwZWVkKHNpLCBzcGVlZCk7CiAJCX0KIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CkBAIC01MzksNyArNTM5LDcgQEAKIAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IHB4YV9pcmRhX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyZXEsIGludCBjbWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYwppbmRleCBiMDM5Y2IwLi4zOGJmN2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKQEAgLTY2Niw3ICs2NjYsNyBAQAogCQkJc2ExMTAwX2lyZGFfc2V0X3NwZWVkKHNpLCBzcGVlZCk7CiAJCX0KIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlpZiAoIUlTX0ZJUihzaSkpIHsKQEAgLTcxNCw3ICs3MTQsNyBAQAogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jCmluZGV4IGZkMDc5NmMuLjRiMmExYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jCkBAIC01ODIsNyArNTgyLDggQEAKIAogLyogY2FsbGJhY2tzIGZyb20gbmV0d29yayBsYXllciAqLwogCi1zdGF0aWMgaW50IHNpcmRldl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc2lyZGV2X2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBzaXJfZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTkwLDcgKzU5MSw3IEBACiAJaW50IGVycjsKIAlzMzIgc3BlZWQ7CiAKLQlJUkRBX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuIDA7KTsKKwlJUkRBX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuIE5FVERFVl9UWF9PSzspOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKIApAQCAtNjIxLDcgKzYyMiw3IEBACiAJCQkgKi8KIAogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfSBlbHNlCiAJCQlkZXYtPm5ld19zcGVlZCA9IHNwZWVkOwogCX0KQEAgLTY2OCw3ICs2NjksNyBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnR4X2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIGNhbGxlZCBmcm9tIG5ldHdvcmsgbGF5ZXIgd2l0aCBydG5sIGhvbGQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKaW5kZXggZDA3OTdhZC4uMWU4ZGQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKQEAgLTE5NCw4ICsxOTQsMTAgQEAKIHN0YXRpYyBpbnQgIHNtc2NfaXJjY19kbWFfcmVjZWl2ZShzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmKTsKIHN0YXRpYyB2b2lkIHNtc2NfaXJjY19kbWFfcmVjZWl2ZV9jb21wbGV0ZShzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmKTsKIHN0YXRpYyB2b2lkIHNtc2NfaXJjY19zaXJfcmVjZWl2ZShzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmKTsKLXN0YXRpYyBpbnQgIHNtc2NfaXJjY19oYXJkX3htaXRfc2lyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCAgc21zY19pcmNjX2hhcmRfeG1pdF9maXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgIHNtc2NfaXJjY19oYXJkX3htaXRfc2lyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90ICBzbXNjX2lyY2NfaGFyZF94bWl0X2ZpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNtc2NfaXJjY19kbWFfeG1pdChzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmLCBpbnQgYm9mcyk7CiBzdGF0aWMgdm9pZCBzbXNjX2lyY2NfZG1hX3htaXRfY29tcGxldGUoc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZik7CiBzdGF0aWMgdm9pZCBzbXNjX2lyY2NfY2hhbmdlX3NwZWVkKHN0cnVjdCBzbXNjX2lyY2NfY2IgKnNlbGYsIHUzMiBzcGVlZCk7CkBAIC00ODYsNyArNDg4LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNtc2NfaXJjY19uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNtc2NfaXJjY19uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtODc4LDcgKzg4MSw4IEBACiAgKiAgICB3YWl0cyB1bnRpbCB0aGUgbmV4dCB0cmFuc21pdCBpbnRlcnJ1cHQsIGFuZCBjb250aW51ZXMgdW50aWwgdGhlCiAgKiAgICBmcmFtZSBpcyB0cmFuc21pdHRlZC4KICAqLwotc3RhdGljIGludCBzbXNjX2lyY2NfaGFyZF94bWl0X3NpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNtc2NfaXJjY19oYXJkX3htaXRfc2lyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04ODYsMTAgKzg5MCwxMCBAQAogCiAJSVJEQV9ERUJVRygxLCAiJXNcbiIsIF9fZnVuY19fKTsKIAotCUlSREFfQVNTRVJUKGRldiAhPSBOVUxMLCByZXR1cm4gMDspOworCUlSREFfQVNTRVJUKGRldiAhPSBOVUxMLCByZXR1cm4gTkVUREVWX1RYX09LOyk7CiAKIAlzZWxmID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAwOyk7CisJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gTkVUREVWX1RYX09LOyk7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKQEAgLTkxNCw3ICs5MTgsNyBAQAogCQkJc21zY19pcmNjX2NoYW5nZV9zcGVlZChzZWxmLCBzcGVlZCk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5sb2NrLCBmbGFncyk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAkJc2VsZi0+bmV3X3NwZWVkID0gc3BlZWQ7CiAJfQpAQCAtOTM1LDcgKzkzOSw3IEBACiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpAQCAtMTE4MywxNiArMTE4NywxNyBAQAogICogICAgVHJhbnNtaXQgdGhlIGZyYW1lIQogICoKICAqLwotc3RhdGljIGludCBzbXNjX2lyY2NfaGFyZF94bWl0X2ZpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNtc2NfaXJjY19oYXJkX3htaXRfZmlyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJczMyIHNwZWVkOwogCWludCBtdHQ7CiAKLQlJUkRBX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuIDA7KTsKKwlJUkRBX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuIE5FVERFVl9UWF9PSzspOwogCXNlbGYgPSBuZXRkZXZfcHJpdihkZXYpOwotCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIDA7KTsKKwlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiBORVRERVZfVFhfT0s7KTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIApAQCAtMTIxMCw3ICsxMjE1LDcgQEAKIAkJCXNtc2NfaXJjY19jaGFuZ2Vfc3BlZWQoc2VsZiwgc3BlZWQpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VsZi0+bG9jaywgZmxhZ3MpOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAKIAkJc2VsZi0+bmV3X3NwZWVkID0gc3BlZWQ7CkBAIC0xMjQyLDcgKzEyNDcsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbGYtPmxvY2ssIGZsYWdzKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCmluZGV4IDhlNWU0NWMuLjUyODc2N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKQEAgLTU2MCw3ICs1NjAsOCBAQAogLyoKICAqIENhbGxlZCBmcm9tIG5ldC9jb3JlIHdoZW4gbmV3IGZyYW1lIGlzIGF2YWlsYWJsZS4KICAqLwotc3RhdGljIGludCBzdGlyX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IHN0aXJfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IHN0aXJfY2IgKnN0aXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCkBAIC01NzgsNyArNTc5LDcgQEAKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMgYi9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMKaW5kZXggODY0Nzk4NS4uYTVjYTcxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYwpAQCAtODcsMTAgKzg3LDEwIEBACiBzdGF0aWMgaW50IHZpYV9pcmNjX2RtYV9yZWNlaXZlKHN0cnVjdCB2aWFfaXJjY19jYiAqc2VsZik7CiBzdGF0aWMgaW50IHZpYV9pcmNjX2RtYV9yZWNlaXZlX2NvbXBsZXRlKHN0cnVjdCB2aWFfaXJjY19jYiAqc2VsZiwKIAkJCQkJIGludCBpb2Jhc2UpOwotc3RhdGljIGludCB2aWFfaXJjY19oYXJkX3htaXRfc2lyKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgdmlhX2lyY2NfaGFyZF94bWl0X2ZpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgdmlhX2lyY2NfaGFyZF94bWl0X3NpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgdmlhX2lyY2NfaGFyZF94bWl0X2ZpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB2aWFfaHdfaW5pdChzdHJ1Y3QgdmlhX2lyY2NfY2IgKnNlbGYpOwogc3RhdGljIHZvaWQgdmlhX2lyY2NfY2hhbmdlX3NwZWVkKHN0cnVjdCB2aWFfaXJjY19jYiAqc2VsZiwgX191MzIgYmF1ZCk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgdmlhX2lyY2NfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CkBAIC04MjMsOCArODIzLDggQEAKICAqICAgIFRyYW5zbWl0IHRoZSBmcmFtZSEKICAqCiAgKi8KLXN0YXRpYyBpbnQgdmlhX2lyY2NfaGFyZF94bWl0X3NpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB2aWFfaXJjY19oYXJkX3htaXRfc2lyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2aWFfaXJjY19jYiAqc2VsZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtODMyLDcgKzgzMiw3IEBACiAJX191MzIgc3BlZWQ7CiAKIAlzZWxmID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAwOyk7CisJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gTkVUREVWX1RYX09LOyk7CiAJaW9iYXNlID0gc2VsZi0+aW8uZmlyX2Jhc2U7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CkBAIC04NDQsNyArODQ0LDcgQEAKIAkJCXZpYV9pcmNjX2NoYW5nZV9zcGVlZChzZWxmLCBzcGVlZCk7CiAJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfSBlbHNlCiAJCQlzZWxmLT5uZXdfc3BlZWQgPSBzcGVlZDsKIAl9CkBAIC04OTIsMTEgKzg5MiwxMSBAQAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbGYtPmxvY2ssIGZsYWdzKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIGludCB2aWFfaXJjY19oYXJkX3htaXRfZmlyKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHZpYV9pcmNjX2hhcmRfeG1pdF9maXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZpYV9pcmNjX2NiICpzZWxmOwogCXUxNiBpb2Jhc2U7CkBAIC05MDcsNyArOTA3LDcgQEAKIAlpb2Jhc2UgPSBzZWxmLT5pby5maXJfYmFzZTsKIAogCWlmIChzZWxmLT5zdF9maWZvLmxlbikKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJaWYgKHNlbGYtPmNoaXBfaWQgPT0gMHgzMDc2KQogCQlpb2RlbGF5KDE1MDApOwogCWVsc2UKQEAgLTkxOSw3ICs5MTksNyBAQAogCQkJdmlhX2lyY2NfY2hhbmdlX3NwZWVkKHNlbGYsIHNwZWVkKTsKIAkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9IGVsc2UKIAkJCXNlbGYtPm5ld19zcGVlZCA9IHNwZWVkOwogCX0KQEAgLTk0MCw3ICs5NDAsNyBAQAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCmluZGV4IGFjMGU0YjYuLjdjZmI4YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCkBAIC04NTQsNyArODU0LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHZsc2lfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQorc3RhdGljIG5ldGRldl90eF90IHZsc2lfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXZsc2lfaXJkYV9kZXZfdCAqaWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXN0cnVjdCB2bHNpX3JpbmcJKnIgPSBpZGV2LT50eF9yaW5nOwpAQCAtOTE1LDcgKzkxNiw3IEBACiAJCQkgKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRldi0+bG9jaywgZmxhZ3MpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAkvKiBzYW5pdHkgY2hlY2tzIC0gc2ltcGx5IGRyb3AgdGhlIHBhY2tldCAqLwpAQCAtMTA0NCw3ICsxMDQ1LDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRldi0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogZHJvcF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRldi0+bG9jaywgZmxhZ3MpOwpAQCAtMTA1OCw3ICsxMDU5LDcgQEAKIAkgKiBwYWNrZXQgZm9yIGxhdGVyIHJldHJ5IG9mIHRyYW5zbWlzc2lvbiAtIHdoaWNoIGlzbid0IGV4YWN0bHkKIAkgKiB3aGF0IHdlIHdhbnQgYWZ0ZXIgd2UndmUganVzdCBjYWxsZWQgZGV2X2tmcmVlX3NrYl9hbnkgOy0pCiAJICovCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgdmxzaV90eF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3c4Mzk3N2FmX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3c4Mzk3N2FmX2lyLmMKaW5kZXggZmU0ZjJiMi4uNTUxODEwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdzgzOTc3YWZfaXIuYwpAQCAtOTMsNyArOTMsOCBAQAogc3RhdGljIGludCAgdzgzOTc3YWZfcHJvYmUoaW50IGlvYmFzZSwgaW50IGlycSwgaW50IGRtYSk7CiBzdGF0aWMgaW50ICB3ODM5NzdhZl9kbWFfcmVjZWl2ZShzdHJ1Y3QgdzgzOTc3YWZfaXIgKnNlbGYpOyAKIHN0YXRpYyBpbnQgIHc4Mzk3N2FmX2RtYV9yZWNlaXZlX2NvbXBsZXRlKHN0cnVjdCB3ODM5NzdhZl9pciAqc2VsZik7Ci1zdGF0aWMgaW50ICB3ODM5NzdhZl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgIHc4Mzk3N2FmX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAgdzgzOTc3YWZfcGlvX3dyaXRlKGludCBpb2Jhc2UsIF9fdTggKmJ1ZiwgaW50IGxlbiwgaW50IGZpZm9fc2l6ZSk7CiBzdGF0aWMgdm9pZCB3ODM5NzdhZl9kbWFfd3JpdGUoc3RydWN0IHc4Mzk3N2FmX2lyICpzZWxmLCBpbnQgaW9iYXNlKTsKIHN0YXRpYyB2b2lkIHc4Mzk3N2FmX2NoYW5nZV9zcGVlZChzdHJ1Y3QgdzgzOTc3YWZfaXIgKnNlbGYsIF9fdTMyIHNwZWVkKTsKQEAgLTQ5MCw3ICs0OTEsOCBAQAogICogICAgU2V0cyB1cCBhIERNQSB0cmFuc2ZlciB0byBzZW5kIHRoZSBjdXJyZW50IGZyYW1lLgogICoKICAqLwotc3RhdGljIGludCB3ODM5NzdhZl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB3ODM5NzdhZl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHc4Mzk3N2FmX2lyICpzZWxmOwogCV9fczMyIHNwZWVkOwpAQCAtNTE2LDcgKzUxOCw3IEBACiAJCQl3ODM5NzdhZl9jaGFuZ2Vfc3BlZWQoc2VsZiwgc3BlZWQpOyAKIAkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9IGVsc2UKIAkJCXNlbGYtPm5ld19zcGVlZCA9IHNwZWVkOwogCX0KQEAgLTU3Niw3ICs1NzgsNyBAQAogCS8qIFJlc3RvcmUgc2V0IHJlZ2lzdGVyICovCiAJb3V0YihzZXQsIGlvYmFzZStTU1IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lzYS1za2VsZXRvbi5jIGIvZHJpdmVycy9uZXQvaXNhLXNrZWxldG9uLmMKaW5kZXggZDEyMzc3Yi4uOTcwNmU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXNhLXNrZWxldG9uLmMKKysrIGIvZHJpdmVycy9uZXQvaXNhLXNrZWxldG9uLmMKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCWRldl9rZnJlZV9za2IgKHNrYik7CiAjZW5kaWYKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKICNpZiBUWF9SSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pc2VyaWVzX3ZldGguYyBiL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCmluZGV4IGU0NDIxNWMuLmUzNmU5NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCkBAIC0xMjA1LDcgKzEyMDUsNyBAQAogCiAJCWlmICggISAoKDEgPDwgcmxwKSAmIHBvcnQtPmxwYXJfbWFwKSApIHsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCiAJCWxwbWFzayA9IDEgPDwgcmxwOwpAQCAtMTIxNyw3ICsxMjE3LDcgQEAKIAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFlvdSBtdXN0IGhvbGQgdGhlIGNvbm5lY3Rpb24ncyBsb2NrIHdoZW4geW91IGNhbGwgdGhpcyBmdW5jdGlvbi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCmluZGV4IDljODk3Y2YuLjhhYTQ0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwpAQCAtODEsNyArODEsOCBAQAogc3RhdGljIHZvaWQgaXhnYl9jbGVhbl9yeF9yaW5nKHN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIpOwogc3RhdGljIHZvaWQgaXhnYl9zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiBzdGF0aWMgdm9pZCBpeGdiX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1zdGF0aWMgaW50IGl4Z2JfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBpeGdiX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXhnYl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiBzdGF0aWMgaW50IGl4Z2JfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSk7CiBzdGF0aWMgaW50IGl4Z2Jfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKTsKQEAgLTE0NDIsNyArMTQ0Myw3IEBACiAJTUFYX1NLQl9GUkFHUyAqIFRYRF9VU0VfQ09VTlQoUEFHRV9TSVpFKSArIDEgLyogZm9yIGNvbnRleHQgKi8gXAogCSsgMSAvKiBvbmUgbW9yZSBuZWVkZWQgZm9yIHNlbnRpbmVsIFRTTyB3b3JrYXJvdW5kICovCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogaXhnYl94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC0xNDU5LDcgKzE0NjAsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDw9IDApIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlpZiAodW5saWtlbHkoaXhnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgJmFkYXB0ZXItPnR4X3JpbmcsCkBAIC0yMjI3LDYgKzIyMjgsMTEgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQlpeGdiX2Rvd24oYWRhcHRlciwgdHJ1ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCmluZGV4IDJjNGRjODIuLmRkNjg4ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaApAQCAtMjMzLDEwICsyMzMsNiBAQAogI2RlZmluZSBJWEdCRV9UWF9DVFhUREVTQ19BRFYoUiwgaSkJICAgIFwKIAkoJigoKHN0cnVjdCBpeGdiZV9hZHZfdHhfY29udGV4dF9kZXNjICopKChSKS5kZXNjKSlbaV0pKQogCi0jZGVmaW5lIElYR0JFX0dFVF9ERVNDKFIsIGksIHR5cGUpCSgmKCgoc3RydWN0IHR5cGUgKikoKFIpLmRlc2MpKVtpXSkpCi0jZGVmaW5lIElYR0JFX1RYX0RFU0MoUiwgaSkJSVhHQkVfR0VUX0RFU0MoUiwgaSwgaXhnYmVfbGVnYWN5X3R4X2Rlc2MpCi0jZGVmaW5lIElYR0JFX1JYX0RFU0MoUiwgaSkJSVhHQkVfR0VUX0RFU0MoUiwgaSwgaXhnYmVfbGVnYWN5X3J4X2Rlc2MpCi0KICNkZWZpbmUgSVhHQkVfTUFYX0pVTUJPX0ZSQU1FX1NJWkUgICAgICAgIDE2MTI4CiAjaWZkZWYgSVhHQkVfRkNPRQogLyogVXNlIDNLIGFzIHRoZSBiYWJ5IGp1bWJvIGZyYW1lIHNpemUgZm9yIEZDb0UgKi8KQEAgLTQyOCw1NSArNDI0LDIwIEBACiBleHRlcm4gczMyIGl4Z2JlX2ZkaXJfYWRkX3NpZ25hdHVyZV9maWx0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBxdWV1ZSk7Ci1leHRlcm4gczMyIGl4Z2JlX2ZkaXJfYWRkX3BlcmZlY3RfZmlsdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgc29mdF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggcXVldWUpOwotZXh0ZXJuIHUxNiBpeGdiZV9hdHJfY29tcHV0ZV9oYXNoXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LCB1MzIga2V5KTsKIGV4dGVybiBzMzIgaXhnYmVfYXRyX3NldF92bGFuX2lkXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHZsYW5faWQpOwogZXh0ZXJuIHMzMiBpeGdiZV9hdHJfc2V0X3NyY19pcHY0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBzcmNfYWRkcik7CiBleHRlcm4gczMyIGl4Z2JlX2F0cl9zZXRfZHN0X2lwdjRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGRzdF9hZGRyKTsKLWV4dGVybiBzMzIgaXhnYmVfYXRyX3NldF9zcmNfaXB2Nl84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3JjX2FkZHJfMSwgdTMyIHNyY19hZGRyXzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHNyY19hZGRyXzMsIHUzMiBzcmNfYWRkcl80KTsKLWV4dGVybiBzMzIgaXhnYmVfYXRyX3NldF9kc3RfaXB2Nl84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZHN0X2FkZHJfMSwgdTMyIGRzdF9hZGRyXzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGRzdF9hZGRyXzMsIHUzMiBkc3RfYWRkcl80KTsKIGV4dGVybiBzMzIgaXhnYmVfYXRyX3NldF9zcmNfcG9ydF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgc3JjX3BvcnQpOwogZXh0ZXJuIHMzMiBpeGdiZV9hdHJfc2V0X2RzdF9wb3J0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBkc3RfcG9ydCk7CiBleHRlcm4gczMyIGl4Z2JlX2F0cl9zZXRfZmxleF9ieXRlXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgZmxleF9ieXRlKTsKLWV4dGVybiBzMzIgaXhnYmVfYXRyX3NldF92bV9wb29sXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdm1fcG9vbCk7CiBleHRlcm4gczMyIGl4Z2JlX2F0cl9zZXRfbDR0eXBlXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBsNHR5cGUpOwotZXh0ZXJuIHMzMiBpeGdiZV9hdHJfZ2V0X3ZsYW5faWRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKnZsYW5faWQpOwotZXh0ZXJuIHMzMiBpeGdiZV9hdHJfZ2V0X3NyY19pcHY0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiAqc3JjX2FkZHIpOwotZXh0ZXJuIHMzMiBpeGdiZV9hdHJfZ2V0X2RzdF9pcHY0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiAqZHN0X2FkZHIpOwotZXh0ZXJuIHMzMiBpeGdiZV9hdHJfZ2V0X3NyY19pcHY2XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiAqc3JjX2FkZHJfMSwgdTMyICpzcmNfYWRkcl8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiAqc3JjX2FkZHJfMywgdTMyICpzcmNfYWRkcl80KTsKLWV4dGVybiBzMzIgaXhnYmVfYXRyX2dldF9kc3RfaXB2Nl84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKmRzdF9hZGRyXzEsIHUzMiAqZHN0X2FkZHJfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKmRzdF9hZGRyXzMsIHUzMiAqZHN0X2FkZHJfNCk7Ci1leHRlcm4gczMyIGl4Z2JlX2F0cl9nZXRfc3JjX3BvcnRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpzcmNfcG9ydCk7Ci1leHRlcm4gczMyIGl4Z2JlX2F0cl9nZXRfZHN0X3BvcnRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpkc3RfcG9ydCk7Ci1leHRlcm4gczMyIGl4Z2JlX2F0cl9nZXRfZmxleF9ieXRlXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmZsZXhfYnl0ZSk7Ci1leHRlcm4gczMyIGl4Z2JlX2F0cl9nZXRfdm1fcG9vbF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICp2bV9wb29sKTsKLWV4dGVybiBzMzIgaXhnYmVfYXRyX2dldF9sNHR5cGVfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICpsNHR5cGUpOwogI2lmZGVmIElYR0JFX0ZDT0UKIGV4dGVybiB2b2lkIGl4Z2JlX2NvbmZpZ3VyZV9mY29lKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiBpbnQgaXhnYmVfZnNvKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtNDg5LDYgKzQ1MCwxMiBAQAogZXh0ZXJuIGludCBpeGdiZV9mY29lX2RkcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHhpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2djKTsKIGV4dGVybiBpbnQgaXhnYmVfZmNvZV9kZHBfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB4aWQpOworZXh0ZXJuIGludCBpeGdiZV9mY29lX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2V4dGVybiBpbnQgaXhnYmVfZmNvZV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKK2V4dGVybiB1OCBpeGdiZV9mY29lX2dldGFwcChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdTggaXhnYmVfZmNvZV9zZXRhcHAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHVwKTsKKyNlbmRpZiAvKiBDT05GSUdfSVhHQkVfRENCICovCiAjZW5kaWYgLyogSVhHQkVfRkNPRSAqLwogCiAjZW5kaWYgLyogX0lYR0JFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYwppbmRleCA1MjJjMDNiLi5jYjdmMGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKQEAgLTQxLDggKzQxLDcgQEAKIHN0YXRpYyBzMzIgaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICphdXRvbmVnKTsKLXN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodyk7Ci1zdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rX3NwZWVkXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsCitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOwpAQCAtNTksNyArNTgsNyBAQAogICogIGluY3JlYXNlIHRoZSB2YWx1ZSB0byBlaXRoZXIgMTBtcyB0byAyNTBtcyBmb3IgY2FwYWJpbGl0eSB2ZXJzaW9uIDEgY29uZmlnLAogICogIG9yIDE2bXMgdG8gNTVtcyBmb3IgdmVyc2lvbiAyLgogICoqLwotdm9pZCBpeGdiZV9zZXRfcGNpZV9jb21wbGV0aW9uX3RpbWVvdXQoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyB2b2lkIGl4Z2JlX3NldF9wY2llX2NvbXBsZXRpb25fdGltZW91dChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CiAJdTMyIGdjciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HQ1IpOwpAQCAtMTQzLDcgKzE0Miw3IEBACiAgKiAgbm90IGtub3duLiAgUGVyZm9ybSB0aGUgU0ZQIGluaXQgaWYgbmVjZXNzYXJ5LgogICoKICAqKi8KLXMzMiBpeGdiZV9pbml0X3BoeV9vcHNfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyBzMzIgaXhnYmVfaW5pdF9waHlfb3BzXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJc3RydWN0IGl4Z2JlX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKIAlzdHJ1Y3QgaXhnYmVfcGh5X2luZm8gKnBoeSA9ICZody0+cGh5OwpAQCAtMTU2LDggKzE1NSw2IEBACiAJLyogT3ZlcndyaXRlIHRoZSBsaW5rIGZ1bmN0aW9uIHBvaW50ZXJzIGlmIGNvcHBlciBQSFkgKi8KIAlpZiAobWFjLT5vcHMuZ2V0X21lZGlhX3R5cGUoaHcpID09IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyKSB7CiAJCW1hYy0+b3BzLnNldHVwX2xpbmsgPSAmaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTg7Ci0JCW1hYy0+b3BzLnNldHVwX2xpbmtfc3BlZWQgPQotCQkgICAgICAgICAgICAgICAgICAgICAmaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTg7CiAJCW1hYy0+b3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyA9CiAJCSAgICAgICAgICAgICAgICAgICZpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk4OwogCX0KQEAgLTIwNCw3ICsyMDEsNyBAQAogICogIFN0YXJ0cyB0aGUgaGFyZHdhcmUgdXNpbmcgdGhlIGdlbmVyaWMgc3RhcnRfaHcgZnVuY3Rpb24uCiAgKiAgVGhlbiBzZXQgcGNpZSBjb21wbGV0aW9uIHRpbWVvdXQKICAqKi8KLXMzMiBpeGdiZV9zdGFydF9od184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHMzMiBpeGdiZV9zdGFydF9od184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXMzMiByZXRfdmFsID0gMDsKIApAQCAtMzM0LDYgKzMzMSw3IEBACiAJCW1lZGlhX3R5cGUgPSBpeGdiZV9tZWRpYV90eXBlX2ZpYmVyOwogCQlicmVhazsKIAljYXNlIElYR0JFX0RFVl9JRF84MjU5OEFUOgorCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4QVQyOgogCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9jb3BwZXI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC00NjQsMTMgKzQ2MiwxNCBAQAogfQogCiAvKioKLSAqICBpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OCAtIENvbmZpZ3VyZXMgTUFDIGxpbmsgc2V0dGluZ3MKKyAqICBpeGdiZV9zdGFydF9tYWNfbGlua184MjU5OCAtIENvbmZpZ3VyZXMgTUFDIGxpbmsgc2V0dGluZ3MKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgogICogIENvbmZpZ3VyZXMgbGluayBzZXR0aW5ncyBiYXNlZCBvbiB2YWx1ZXMgaW4gdGhlIGl4Z2JlX2h3IHN0cnVjdC4KICAqICBSZXN0YXJ0cyB0aGUgbGluay4gIFBlcmZvcm1zIGF1dG9uZWdvdGlhdGlvbiBpZiBuZWVkZWQuCiAgKiovCi1zdGF0aWMgczMyIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgczMyIGl4Z2JlX3N0YXJ0X21hY19saW5rXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKQogewogCXUzMiBhdXRvY19yZWc7CiAJdTMyIGxpbmtzX3JlZzsKQEAgLTQ4Myw3ICs0ODIsNyBAQAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGF1dG9jX3JlZyk7CiAKIAkvKiBPbmx5IHBvbGwgZm9yIGF1dG9uZWcgdG8gY29tcGxldGUgaWYgc3BlY2lmaWVkIHRvIGRvIHNvICovCi0JaWYgKGh3LT5waHkuYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKSB7CisJaWYgKGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgewogCQlpZiAoKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQogCQkgICAgIElYR0JFX0FVVE9DX0xNU19LWDRfQU4gfHwKIAkJICAgIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgPT0KQEAgLTU5OSw3ICs1OTgsNyBAQAogCiAKIC8qKgotICogIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk4IC0gU2V0IE1BQyBsaW5rIHNwZWVkCisgKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTggLSBTZXQgTUFDIGxpbmsgc3BlZWQKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiAgQHNwZWVkOiBuZXcgbGluayBzcGVlZAogICogIEBhdXRvbmVnOiB0cnVlIGlmIGF1dG8tbmVnb3RpYXRpb24gZW5hYmxlZApAQCAtNjA3LDcgKzYwNiw3IEBACiAgKgogICogIFNldCB0aGUgbGluayBzcGVlZCBpbiB0aGUgQVVUT0MgcmVnaXN0ZXIgYW5kIHJlc3RhcnRzIGxpbmsuCiAgKiovCi1zdGF0aWMgczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsCitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwgYm9vbCBhdXRvbmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKQogewpAQCAtNjM3LDE0ICs2MzYsMTIgQEAKIAl9CiAKIAlpZiAoc3RhdHVzID09IDApIHsKLQkJaHctPnBoeS5hdXRvbmVnX3dhaXRfdG9fY29tcGxldGUgPSBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU7Ci0KIAkJLyoKIAkJICogU2V0dXAgYW5kIHJlc3RhcnQgdGhlIGxpbmsgYmFzZWQgb24gdGhlIG5ldyB2YWx1ZXMgaW4KIAkJICogaXhnYmVfaHcgVGhpcyB3aWxsIHdyaXRlIHRoZSBBVVRPQyByZWdpc3RlciBiYXNlZCBvbiB0aGUgbmV3CiAJCSAqIHN0b3JlZCB2YWx1ZXMKIAkJICovCi0JCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KGh3KTsKKwkJc3RhdHVzID0gaXhnYmVfc3RhcnRfbWFjX2xpbmtfODI1OTgoaHcsIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CiAJfQogCiAJcmV0dXJuIHN0YXR1czsKQEAgLTY1MiwyOSArNjQ5LDcgQEAKIAogCiAvKioKLSAqICBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OCAtIFNldHVwIGNvcHBlciBsaW5rIHNldHRpbmdzCi0gKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQotICoKLSAqICBDb25maWd1cmVzIGxpbmsgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWVzIGluIHRoZSBpeGdiZV9odyBzdHJ1Y3QuCi0gKiAgUmVzdGFydHMgdGhlIGxpbmsuICBQZXJmb3JtcyBhdXRvbmVnb3RpYXRpb24gaWYgbmVlZGVkLiAgUmVzdGFydAotICogIHBoeSBhbmQgd2FpdCBmb3IgYXV0b25lZ290aWF0ZSB0byBmaW5pc2guICBUaGVuIHN5bmNocm9uaXplIHRoZQotICogIE1BQyBhbmQgUEhZLgotICoqLwotc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQotewotCXMzMiBzdGF0dXM7Ci0KLQkvKiBSZXN0YXJ0IGF1dG9uZWdvdGlhdGlvbiBvbiBQSFkgKi8KLQlzdGF0dXMgPSBody0+cGh5Lm9wcy5zZXR1cF9saW5rKGh3KTsKLQotCS8qIFNldCB1cCBNQUMgKi8KLQlpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OChodyk7Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKioKLSAqICBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua19zcGVlZF84MjU5OCAtIFNldCB0aGUgUEhZIGF1dG9uZWcgYWR2ZXJ0aXNlZCBmaWVsZAorICogIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk4IC0gU2V0IHRoZSBQSFkgYXV0b25lZyBhZHZlcnRpc2VkIGZpZWxkCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICogIEBzcGVlZDogbmV3IGxpbmsgc3BlZWQKICAqICBAYXV0b25lZzogdHJ1ZSBpZiBhdXRvbmVnb3RpYXRpb24gZW5hYmxlZApAQCAtNjgyLDcgKzY1Nyw3IEBACiAgKgogICogIFNldHMgdGhlIGxpbmsgc3BlZWQgaW4gdGhlIEFVVE9DIHJlZ2lzdGVyIGluIHRoZSBNQUMgYW5kIHJlc3RhcnRzIGxpbmsuCiAgKiovCi1zdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rX3NwZWVkXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsCitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCkBAIC02OTQsNyArNjY5LDcgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CiAKIAkvKiBTZXQgdXAgTUFDICovCi0JaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTgoaHcpOworCWl4Z2JlX3N0YXJ0X21hY19saW5rXzgyNTk4KGh3LCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTExNjIsNyArMTEzNyw2IEBACiAJLnJlYWRfYW5hbG9nX3JlZzgJPSAmaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OCwKIAkud3JpdGVfYW5hbG9nX3JlZzgJPSAmaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTgsCiAJLnNldHVwX2xpbmsJCT0gJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4LAotCS5zZXR1cF9saW5rX3NwZWVkCT0gJml4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk4LAogCS5jaGVja19saW5rCQk9ICZpeGdiZV9jaGVja19tYWNfbGlua184MjU5OCwKIAkuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzCT0gJml4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OCwKIAkubGVkX29uCQkJPSAmaXhnYmVfbGVkX29uX2dlbmVyaWMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYwppbmRleCAxOTg0Y2FiLi42MWFmNDdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKQEAgLTM4LDYyICszOCwzNyBAQAogI2RlZmluZSBJWEdCRV84MjU5OV9NQ19UQkxfU0laRSAgIDEyOAogI2RlZmluZSBJWEdCRV84MjU5OV9WRlRfVEJMX1NJWkUgIDEyOAogCi1zMzIgaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICphdXRvbmVnKTsKLWVudW0gaXhnYmVfbWVkaWFfdHlwZSBpeGdiZV9nZXRfbWVkaWFfdHlwZV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKLXMzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcpOwotczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLCBib29sIGF1dG9uZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOwotczMyIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOwotczMyIGl4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbGlua191cCwgYm9vbCBsaW5rX3VwX3dhaXRfdG9fY29tcGxldGUpOwotczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CitzMzIgaXhnYmVfc3RhcnRfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CiBzdGF0aWMgczMyIGl4Z2JlX2dldF9jb3BwZXJfbGlua19jYXBhYmlsaXRpZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXV0b25lZyk7Ci1zdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOwotc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua19zcGVlZF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKLXMzMiBpeGdiZV9yZXNldF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKLXMzMiBpeGdiZV9zZXRfdm1kcV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmFyLCB1MzIgdm1kcSk7Ci1zMzIgaXhnYmVfY2xlYXJfdm1kcV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmFyLCB1MzIgdm1kcSk7Ci1zMzIgaXhnYmVfc2V0X3ZmdGFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHZsYW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHZpbmQsIGJvb2wgdmxhbl9vbik7Ci1zMzIgaXhnYmVfY2xlYXJfdmZ0YV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKLXMzMiBpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7Ci1zMzIgaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnLCB1OCAqdmFsKTsKLXMzMiBpeGdiZV93cml0ZV9hbmFsb2dfcmVnOF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnLCB1OCB2YWwpOwotczMyIGl4Z2JlX2lkZW50aWZ5X3BoeV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKLXMzMiBpeGdiZV9zdGFydF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKLXUzMiBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKIHN0YXRpYyBzMzIgaXhnYmVfdmVyaWZ5X2Z3X3ZlcnNpb25fODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiAKLXZvaWQgaXhnYmVfaW5pdF9tYWNfbGlua19vcHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyB2b2lkIGl4Z2JlX2luaXRfbWFjX2xpbmtfb3BzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJc3RydWN0IGl4Z2JlX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKIAlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyKSB7CiAJCS8qIFNldCB1cCBkdWFsIHNwZWVkIFNGUCsgc3VwcG9ydCAqLwotCQltYWMtPm9wcy5zZXR1cF9saW5rID0KLQkJICAgICAgICAgICZpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyOwotCQltYWMtPm9wcy5zZXR1cF9saW5rX3NwZWVkID0KLQkJICAgICAgICAgICZpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyOworCQltYWMtPm9wcy5zZXR1cF9saW5rID0gJml4Z2JlX3NldHVwX21hY19saW5rX211bHRpc3BlZWRfZmliZXI7CiAJfSBlbHNlIHsKLQkJbWFjLT5vcHMuc2V0dXBfbGluayA9Ci0JCSAgICAgICAgICAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTk7Ci0JCW1hYy0+b3BzLnNldHVwX2xpbmtfc3BlZWQgPQotCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5OworCQltYWMtPm9wcy5zZXR1cF9saW5rID0gJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5OwogCX0KIH0KIAotczMyIGl4Z2JlX3NldHVwX3NmcF9tb2R1bGVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX3NmcF9tb2R1bGVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJczMyIHJldF92YWwgPSAwOwogCXUxNiBsaXN0X29mZnNldCwgZGF0YV9vZmZzZXQsIGRhdGFfdmFsdWU7CkBAIC0xNDMsNyArMTE4LDcgQEAKICAqICBSZWFkIFBDSWUgY29uZmlndXJhdGlvbiBzcGFjZSwgYW5kIGdldCB0aGUgTVNJLVggdmVjdG9yIGNvdW50IGZyb20KICAqICB0aGUgY2FwYWJpbGl0aWVzIHRhYmxlLgogICoqLwotdTMyIGl4Z2JlX2dldF9wY2llX21zaXhfY291bnRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyB1MzIgaXhnYmVfZ2V0X3BjaWVfbXNpeF9jb3VudF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CiAJdTE2IG1zaXhfY291bnQ7CkBAIC0xODIsNyArMTU3LDcgQEAKICAqICBub3Qga25vd24uICBQZXJmb3JtIHRoZSBTRlAgaW5pdCBpZiBuZWNlc3NhcnkuCiAgKgogICoqLwotczMyIGl4Z2JlX2luaXRfcGh5X29wc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHMzMiBpeGdiZV9pbml0X3BoeV9vcHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzdHJ1Y3QgaXhnYmVfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwogCXN0cnVjdCBpeGdiZV9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CkBAIC0xOTcsOCArMTcyLDYgQEAKIAkvKiBJZiBjb3BwZXIgbWVkaWEsIG92ZXJ3cml0ZSB3aXRoIGNvcHBlciBmdW5jdGlvbiBwb2ludGVycyAqLwogCWlmIChtYWMtPm9wcy5nZXRfbWVkaWFfdHlwZShodykgPT0gaXhnYmVfbWVkaWFfdHlwZV9jb3BwZXIpIHsKIAkJbWFjLT5vcHMuc2V0dXBfbGluayA9ICZpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OTsKLQkJbWFjLT5vcHMuc2V0dXBfbGlua19zcGVlZCA9Ci0JCSAgICAgICAgICAgICAgICAgICAgICZpeGdiZV9zZXR1cF9jb3BwZXJfbGlua19zcGVlZF84MjU5OTsKIAkJbWFjLT5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzID0KIAkJICAgICAgICAgICAgICAgICAgJml4Z2JlX2dldF9jb3BwZXJfbGlua19jYXBhYmlsaXRpZXNfODI1OTk7CiAJfQpAQCAtMjI1LDkgKzE5OCw5IEBACiAgKgogICogIERldGVybWluZXMgdGhlIGxpbmsgY2FwYWJpbGl0aWVzIGJ5IHJlYWRpbmcgdGhlIEFVVE9DIHJlZ2lzdGVyLgogICoqLwotczMyIGl4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmVnb3RpYXRpb24pCitzdGF0aWMgczMyIGl4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpuZWdvdGlhdGlvbikKIHsKIAlzMzIgc3RhdHVzID0gMDsKIAl1MzIgYXV0b2MgPSAwOwpAQCAtMzQ0LDcgKzMxNyw3IEBACiAgKgogICogIFJldHVybnMgdGhlIG1lZGlhIHR5cGUgKGZpYmVyLCBjb3BwZXIsIGJhY2twbGFuZSkKICAqKi8KLWVudW0gaXhnYmVfbWVkaWFfdHlwZSBpeGdiZV9nZXRfbWVkaWFfdHlwZV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIGVudW0gaXhnYmVfbWVkaWFfdHlwZSBpeGdiZV9nZXRfbWVkaWFfdHlwZV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCWVudW0gaXhnYmVfbWVkaWFfdHlwZSBtZWRpYV90eXBlOwogCkBAIC0zNzMsMTMgKzM0NiwxNSBAQAogfQogCiAvKioKLSAqICBpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OSAtIFNldHVwIE1BQyBsaW5rIHNldHRpbmdzCisgKiAgaXhnYmVfc3RhcnRfbWFjX2xpbmtfODI1OTkgLSBTZXR1cCBNQUMgbGluayBzZXR0aW5ncwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB0cnVlIHdoZW4gd2FpdGluZyBmb3IgY29tcGxldGlvbiBpcyBuZWVkZWQKICAqCiAgKiAgQ29uZmlndXJlcyBsaW5rIHNldHRpbmdzIGJhc2VkIG9uIHZhbHVlcyBpbiB0aGUgaXhnYmVfaHcgc3RydWN0LgogICogIFJlc3RhcnRzIHRoZSBsaW5rLiAgUGVyZm9ybXMgYXV0b25lZ290aWF0aW9uIGlmIG5lZWRlZC4KICAqKi8KLXMzMiBpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorczMyIGl4Z2JlX3N0YXJ0X21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCiB7CiAJdTMyIGF1dG9jX3JlZzsKIAl1MzIgbGlua3NfcmVnOwpAQCAtMzkyLDcgKzM2Nyw3IEBACiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2NfcmVnKTsKIAogCS8qIE9ubHkgcG9sbCBmb3IgYXV0b25lZyB0byBjb21wbGV0ZSBpZiBzcGVjaWZpZWQgdG8gZG8gc28gKi8KLQlpZiAoaHctPnBoeS5hdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpIHsKKwlpZiAoYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKSB7CiAJCWlmICgoYXV0b2NfcmVnICYgSVhHQkVfQVVUT0NfTE1TX01BU0spID09CiAJCSAgICAgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUiB8fAogCQkgICAgKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQpAQCAtNDIwLDI1ICszOTUsNyBAQAogfQogCiAvKioKLSAqICBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyIC0gU2V0dXAgTUFDIGxpbmsgc2V0dGluZ3MKLSAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCi0gKgotICogIENvbmZpZ3VyZXMgbGluayBzZXR0aW5ncyBiYXNlZCBvbiB2YWx1ZXMgaW4gdGhlIGl4Z2JlX2h3IHN0cnVjdC4KLSAqICBSZXN0YXJ0cyB0aGUgbGluayBmb3IgbXVsdGktc3BlZWQgZmliZXIgYXQgMUcgc3BlZWQsIGlmIGxpbmsKLSAqICBmYWlscyBhdCAxMEcuCi0gKiAgUGVyZm9ybXMgYXV0b25lZ290aWF0aW9uIGlmIG5lZWRlZC4KLSAqKi8KLXMzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcpCi17Ci0JczMyIHN0YXR1cyA9IDA7Ci0JaXhnYmVfbGlua19zcGVlZCBsaW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF84MjU5OV9BVVRPTkVHOwotCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoaHcsIGxpbmtfc3BlZWQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB0cnVlKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKioKLSAqICBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyIC0gU2V0IE1BQyBsaW5rIHNwZWVkCisgKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlciAtIFNldCBNQUMgbGluayBzcGVlZAogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqICBAc3BlZWQ6IG5ldyBsaW5rIHNwZWVkCiAgKiAgQGF1dG9uZWc6IHRydWUgaWYgYXV0b25lZ290aWF0aW9uIGVuYWJsZWQKQEAgLTQ0NiwxMCArNDAzLDEwIEBACiAgKgogICogIFNldCB0aGUgbGluayBzcGVlZCBpbiB0aGUgQVVUT0MgcmVnaXN0ZXIgYW5kIHJlc3RhcnRzIGxpbmsuCiAgKiovCi1zMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfbXVsdGlzcGVlZF9maWJlcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKQorczMyIGl4Z2JlX3NldHVwX21hY19saW5rX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKIHsKIAlzMzIgc3RhdHVzID0gMDsKIAlpeGdiZV9saW5rX3NwZWVkIHBoeV9saW5rX3NwZWVkOwpAQCAtNDY0LDE1ICs0MjEsNiBAQAogCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJnBoeV9saW5rX3NwZWVkLCAmbmVnb3RpYXRpb24pOwogCXNwZWVkICY9IHBoeV9saW5rX3NwZWVkOwogCi0JIC8qIFNldCBhdXRvbmVnX2FkdmVydGlzZWQgdmFsdWUgYmFzZWQgb24gaW5wdXQgbGluayBzcGVlZCAqLwotCWh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkID0gMDsKLQotCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKQotCQlody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKLQotCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpCi0JCWh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkIHw9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7Ci0KIAkvKgogCSAqIFdoZW4gdGhlIGRyaXZlciBjaGFuZ2VzIHRoZSBsaW5rIHNwZWVkcyB0aGF0IGl0IGNhbiBzdXBwb3J0LAogCSAqIGl0IHNldHMgYXV0b3RyeV9yZXN0YXJ0IHRvIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB3ZSBuZWVkIHRvCkBAIC01MDQsMTIgKzQ1MiwxMiBAQAogCQkvKiBBbGxvdyBtb2R1bGUgdG8gY2hhbmdlIGFuYWxvZyBjaGFyYWN0ZXJpc3RpY3MgKDFHLT4xMEcpICovCiAJCW1zbGVlcCg0MCk7CiAKLQkJc3RhdHVzID0gaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoaHcsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWcsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworCQlzdGF0dXMgPSBpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OShodywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CiAJCWlmIChzdGF0dXMgIT0gMCkKLQkJCWdvdG8gb3V0OworCQkJcmV0dXJuIHN0YXR1czsKIAogCQkvKiBGbGFwIHRoZSB0eCBsYXNlciBpZiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBkb25lICovCiAJCWlmIChody0+bWFjLmF1dG90cnlfcmVzdGFydCkgewpAQCAtNTU4LDEyICs1MDYsMTIgQEAKIAkJLyogQWxsb3cgbW9kdWxlIHRvIGNoYW5nZSBhbmFsb2cgY2hhcmFjdGVyaXN0aWNzICgxMEctPjFHKSAqLwogCQltc2xlZXAoNDApOwogCi0JCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5KGh3LAorCQlzdGF0dXMgPSBpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OShodywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWcsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKIAkJaWYgKHN0YXR1cyAhPSAwKQotCQkJZ290byBvdXQ7CisJCQlyZXR1cm4gc3RhdHVzOwogCiAJCS8qIEZsYXAgdGhlIHR4IGxhc2VyIGlmIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIGRvbmUgKi8KIAkJaWYgKGh3LT5tYWMuYXV0b3RyeV9yZXN0YXJ0KSB7CkBAIC01OTUsMTIgKzU0MywyMSBAQAogCSAqIHNpbmdsZSBoaWdoZXN0IHNwZWVkIHRoYXQgdGhlIHVzZXIgcmVxdWVzdGVkLgogCSAqLwogCWlmIChzcGVlZGNudCA+IDEpCi0JCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoaHcsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0X2xpbmtfc3BlZWQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKKwkJc3RhdHVzID0gaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlcihodywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0X2xpbmtfc3BlZWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOwogCiBvdXQ6CisJLyogU2V0IGF1dG9uZWdfYWR2ZXJ0aXNlZCB2YWx1ZSBiYXNlZCBvbiBpbnB1dCBsaW5rIHNwZWVkICovCisJaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQgPSAwOworCisJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpCisJCWh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCisJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkKKwkJaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTYxMyw4ICs1NzAsMTAgQEAKICAqCiAgKiAgUmVhZHMgdGhlIGxpbmtzIHJlZ2lzdGVyIHRvIGRldGVybWluZSBpZiBsaW5rIGlzIHVwIGFuZCB0aGUgY3VycmVudCBzcGVlZAogICoqLwotczMyIGl4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmxpbmtfdXAsIGJvb2wgbGlua191cF93YWl0X3RvX2NvbXBsZXRlKQorc3RhdGljIHMzMiBpeGdiZV9jaGVja19tYWNfbGlua184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbGlua191cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsaW5rX3VwX3dhaXRfdG9fY29tcGxldGUpCiB7CiAJdTMyIGxpbmtzX3JlZzsKIAl1MzIgaTsKQEAgLTY1Nyw3ICs2MTYsNyBAQAogfQogCiAvKioKLSAqICBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OSAtIFNldCBNQUMgbGluayBzcGVlZAorICogIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5IC0gU2V0IE1BQyBsaW5rIHNwZWVkCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICogIEBzcGVlZDogbmV3IGxpbmsgc3BlZWQKICAqICBAYXV0b25lZzogdHJ1ZSBpZiBhdXRvbmVnb3RpYXRpb24gZW5hYmxlZApAQCAtNjY1LDkgKzYyNCw5IEBACiAgKgogICogIFNldCB0aGUgbGluayBzcGVlZCBpbiB0aGUgQVVUT0MgcmVnaXN0ZXIgYW5kIHJlc3RhcnRzIGxpbmsuCiAgKiovCi1zMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLCBib29sIGF1dG9uZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLCBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCiB7CiAJczMyIHN0YXR1cyA9IDA7CiAJdTMyIGF1dG9jID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKQEAgLTc2NywyNiArNzI2LDcgQEAKIH0KIAogLyoqCi0gKiAgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTkgLSBTZXR1cCBjb3BwZXIgbGluayBzZXR0aW5ncwotICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKLSAqCi0gKiAgUmVzdGFydHMgdGhlIGxpbmsgb24gUEhZIGFuZCB0aGVuIE1BQy4gUGVyZm9ybXMgYXV0b25lZ290aWF0aW9uIGlmIG5lZWRlZC4KLSAqKi8KLXN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKLXsKLQlzMzIgc3RhdHVzOwotCi0JLyogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24gb24gUEhZICovCi0Jc3RhdHVzID0gaHctPnBoeS5vcHMuc2V0dXBfbGluayhodyk7Ci0KLQkvKiBTZXQgdXAgTUFDICovCi0JaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoaHcpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoqCi0gKiAgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTkgLSBTZXQgdGhlIFBIWSBhdXRvbmVnIGFkdmVydGlzZWQgZmllbGQKKyAqICBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OSAtIFNldCB0aGUgUEhZIGF1dG9uZWcgYWR2ZXJ0aXNlZCBmaWVsZAogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqICBAc3BlZWQ6IG5ldyBsaW5rIHNwZWVkCiAgKiAgQGF1dG9uZWc6IHRydWUgaWYgYXV0b25lZ290aWF0aW9uIGVuYWJsZWQKQEAgLTc5NCwxMCArNzM0LDEwIEBACiAgKgogICogIFJlc3RhcnRzIGxpbmsgb24gUEhZIGFuZCBNQUMgYmFzZWQgb24gc2V0dGluZ3MgcGFzc2VkIGluLgogICoqLwotc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua19zcGVlZF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKQorc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKQogewogCXMzMiBzdGF0dXM7CiAKQEAgLTgwNSw3ICs3NDUsNyBAQAogCXN0YXR1cyA9IGh3LT5waHkub3BzLnNldHVwX2xpbmtfc3BlZWQoaHcsIHNwZWVkLCBhdXRvbmVnLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKIAkvKiBTZXQgdXAgTUFDICovCi0JaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoaHcpOworCWl4Z2JlX3N0YXJ0X21hY19saW5rXzgyNTk5KGh3LCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTgxOCw3ICs3NTgsNyBAQAogICogIGFuZCBjbGVhcnMgYWxsIGludGVycnVwdHMsIHBlcmZvcm0gYSBQSFkgcmVzZXQsIGFuZCBwZXJmb3JtIGEgbGluayAoTUFDKQogICogIHJlc2V0LgogICoqLwotczMyIGl4Z2JlX3Jlc2V0X2h3XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgczMyIGl4Z2JlX3Jlc2V0X2h3XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJczMyIHN0YXR1cyA9IDA7CiAJdTMyIGN0cmwsIGN0cmxfZXh0OwpAQCAtOTQzLDcgKzg4Myw3IEBACiAgKiAgQHJhcjogcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyIGluZGV4IHRvIGRpc2Fzc29jaWF0ZQogICogIEB2bWRxOiBWTURxIHBvb2wgaW5kZXggdG8gcmVtb3ZlIGZyb20gdGhlIHJhcgogICoqLwotczMyIGl4Z2JlX2NsZWFyX3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpCitzdGF0aWMgczMyIGl4Z2JlX2NsZWFyX3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpCiB7CiAJdTMyIG1wc2FyX2xvLCBtcHNhcl9oaTsKIAl1MzIgcmFyX2VudHJpZXMgPSBody0+bWFjLm51bV9yYXJfZW50cmllczsKQEAgLTk4OSw3ICs5MjksNyBAQAogICogIEByYXI6IHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlciBpbmRleCB0byBhc3NvY2lhdGUgd2l0aCBhIFZNRHEgaW5kZXgKICAqICBAdm1kcTogVk1EcSBwb29sIGluZGV4CiAgKiovCi1zMzIgaXhnYmVfc2V0X3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpCitzdGF0aWMgczMyIGl4Z2JlX3NldF92bWRxXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByYXIsIHUzMiB2bWRxKQogewogCXUzMiBtcHNhcjsKIAl1MzIgcmFyX2VudHJpZXMgPSBody0+bWFjLm51bV9yYXJfZW50cmllczsKQEAgLTEwMTksOCArOTU5LDggQEAKICAqCiAgKiAgVHVybiBvbi9vZmYgc3BlY2lmaWVkIFZMQU4gaW4gdGhlIFZMQU4gZmlsdGVyIHRhYmxlLgogICoqLwotczMyIGl4Z2JlX3NldF92ZnRhXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiB2bGFuLCB1MzIgdmluZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHZsYW5fb24pCitzdGF0aWMgczMyIGl4Z2JlX3NldF92ZnRhXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiB2bGFuLCB1MzIgdmluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB2bGFuX29uKQogewogCXUzMiByZWdpbmRleDsKIAl1MzIgYml0aW5kZXg7CkBAIC0xMTMzLDcgKzEwNzMsNyBAQAogICoKICAqICBDbGVhcnMgdGhlIFZMQU4gZmlsZXIgdGFibGUsIGFuZCB0aGUgVk1EcSBpbmRleCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbHRlcgogICoqLwotczMyIGl4Z2JlX2NsZWFyX3ZmdGFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyBzMzIgaXhnYmVfY2xlYXJfdmZ0YV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXUzMiBvZmZzZXQ7CiAKQEAgLTExNTMsNyArMTA5Myw3IEBACiAgKiAgaXhnYmVfaW5pdF91dGFfdGFibGVzXzgyNTk5IC0gSW5pdGlhbGl6ZSB0aGUgVW5pY2FzdCBUYWJsZSBBcnJheQogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqKi8KLXMzMiBpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyBzMzIgaXhnYmVfaW5pdF91dGFfdGFibGVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJaW50IGk7CiAJaHdfZGJnKGh3LCAiIENsZWFyaW5nIFVUQVxuIik7CkBAIC0xNDMwLDcgKzEzNzAsOCBAQAogICogIEBzdHJlYW06IGlucHV0IGJpdHN0cmVhbSB0byBjb21wdXRlIHRoZSBoYXNoIG9uCiAgKiAgQGtleTogMzItYml0IGhhc2gga2V5CiAgKiovCi11MTYgaXhnYmVfYXRyX2NvbXB1dGVfaGFzaF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICphdHJfaW5wdXQsIHUzMiBrZXkpCitzdGF0aWMgdTE2IGl4Z2JlX2F0cl9jb21wdXRlX2hhc2hfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqYXRyX2lucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBrZXkpCiB7CiAJLyoKIAkgKiBUaGUgYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6CkBAIC0xNjAyLDggKzE1NDMsOCBAQAogICogIEBzcmNfYWRkcl80OiB0aGUgZm91cnRoIDQgYnl0ZXMgb2YgdGhlIElQIGFkZHJlc3MgdG8gbG9hZAogICoqLwogczMyIGl4Z2JlX2F0cl9zZXRfc3JjX2lwdjZfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3JjX2FkZHJfMSwgdTMyIHNyY19hZGRyXzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3JjX2FkZHJfMywgdTMyIHNyY19hZGRyXzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHNyY19hZGRyXzEsIHUzMiBzcmNfYWRkcl8yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBzcmNfYWRkcl8zLCB1MzIgc3JjX2FkZHJfNCkKIHsKIAlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19JUFY2X09GRlNFVF0gPSBzcmNfYWRkcl80ICYgMHhmZjsKIAlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19JUFY2X09GRlNFVCArIDFdID0KQEAgLTE2NDUsOCArMTU4Niw4IEBACiAgKiAgQGRzdF9hZGRyXzQ6IHRoZSBmb3VydGggNCBieXRlcyBvZiB0aGUgSVAgYWRkcmVzcyB0byBsb2FkCiAgKiovCiBzMzIgaXhnYmVfYXRyX3NldF9kc3RfaXB2Nl84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkc3RfYWRkcl8xLCB1MzIgZHN0X2FkZHJfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkc3RfYWRkcl8zLCB1MzIgZHN0X2FkZHJfNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZHN0X2FkZHJfMSwgdTMyIGRzdF9hZGRyXzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGRzdF9hZGRyXzMsIHUzMiBkc3RfYWRkcl80KQogewogCWlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfRFNUX0lQVjZfT0ZGU0VUXSA9IGRzdF9hZGRyXzQgJiAweGZmOwogCWlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfRFNUX0lQVjZfT0ZGU0VUICsgMV0gPQpAQCAtMTcyMyw3ICsxNjY0LDggQEAKICAqICBAaW5wdXQ6IGlucHV0IHN0cmVhbSB0byBtb2RpZnkKICAqICBAdm1fcG9vbDogdGhlIFZpcnR1YWwgTWFjaGluZSBwb29sIHRvIGxvYWQKICAqKi8KLXMzMiBpeGdiZV9hdHJfc2V0X3ZtX3Bvb2xfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHU4IHZtX3Bvb2wpCitzMzIgaXhnYmVfYXRyX3NldF92bV9wb29sXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdm1fcG9vbCkKIHsKIAlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1ZNX1BPT0xfT0ZGU0VUXSA9IHZtX3Bvb2w7CiAKQEAgLTE3NDcsNyArMTY4OSw4IEBACiAgKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gc2VhcmNoCiAgKiAgQHZsYW46IHRoZSBWTEFOIGlkIHRvIGxvYWQKICAqKi8KLXMzMiBpeGdiZV9hdHJfZ2V0X3ZsYW5faWRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHUxNiAqdmxhbikKK3N0YXRpYyBzMzIgaXhnYmVfYXRyX2dldF92bGFuX2lkXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICp2bGFuKQogewogCSp2bGFuID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9WTEFOX09GRlNFVF07CiAJKnZsYW4gfD0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9WTEFOX09GRlNFVCArIDFdIDw8IDg7CkBAIC0xNzYwLDcgKzE3MDMsOCBAQAogICogIEBpbnB1dDogaW5wdXQgc3RyZWFtIHRvIHNlYXJjaAogICogIEBzcmNfYWRkcjogdGhlIElQIGFkZHJlc3MgdG8gbG9hZAogICoqLwotczMyIGl4Z2JlX2F0cl9nZXRfc3JjX2lwdjRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHUzMiAqc3JjX2FkZHIpCitzdGF0aWMgczMyIGl4Z2JlX2F0cl9nZXRfc3JjX2lwdjRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICpzcmNfYWRkcikKIHsKIAkqc3JjX2FkZHIgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19JUFY0X09GRlNFVF07CiAJKnNyY19hZGRyIHw9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX0lQVjRfT0ZGU0VUICsgMV0gPDwgODsKQEAgLTE3NzUsNyArMTcxOSw4IEBACiAgKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gc2VhcmNoCiAgKiAgQGRzdF9hZGRyOiB0aGUgSVAgYWRkcmVzcyB0byBsb2FkCiAgKiovCi1zMzIgaXhnYmVfYXRyX2dldF9kc3RfaXB2NF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwgdTMyICpkc3RfYWRkcikKK3N0YXRpYyBzMzIgaXhnYmVfYXRyX2dldF9kc3RfaXB2NF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKmRzdF9hZGRyKQogewogCSpkc3RfYWRkciA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfRFNUX0lQVjRfT0ZGU0VUXTsKIAkqZHN0X2FkZHIgfD0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9EU1RfSVBWNF9PRkZTRVQgKyAxXSA8PCA4OwpAQCAtMTc5Myw5ICsxNzM4LDkgQEAKICAqICBAc3JjX2FkZHJfMzogdGhlIHRoaXJkIDQgYnl0ZXMgb2YgdGhlIElQIGFkZHJlc3MgdG8gbG9hZAogICogIEBzcmNfYWRkcl80OiB0aGUgZm91cnRoIDQgYnl0ZXMgb2YgdGhlIElQIGFkZHJlc3MgdG8gbG9hZAogICoqLwotczMyIGl4Z2JlX2F0cl9nZXRfc3JjX2lwdjZfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKnNyY19hZGRyXzEsIHUzMiAqc3JjX2FkZHJfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiAqc3JjX2FkZHJfMywgdTMyICpzcmNfYWRkcl80KQorc3RhdGljIHMzMiBpeGdiZV9hdHJfZ2V0X3NyY19pcHY2XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiAqc3JjX2FkZHJfMSwgdTMyICpzcmNfYWRkcl8yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiAqc3JjX2FkZHJfMywgdTMyICpzcmNfYWRkcl80KQogewogCSpzcmNfYWRkcl8xID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNl9PRkZTRVQgKyAxMl07CiAJKnNyY19hZGRyXzEgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19JUFY2X09GRlNFVCArIDEzXSA8PCA4OwpAQCAtMTgyOSw4ICsxNzc0LDggQEAKICAqICBAZHN0X2FkZHJfNDogdGhlIGZvdXJ0aCA0IGJ5dGVzIG9mIHRoZSBJUCBhZGRyZXNzIHRvIGxvYWQKICAqKi8KIHMzMiBpeGdiZV9hdHJfZ2V0X2RzdF9pcHY2XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICpkc3RfYWRkcl8xLCB1MzIgKmRzdF9hZGRyXzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKmRzdF9hZGRyXzMsIHUzMiAqZHN0X2FkZHJfNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKmRzdF9hZGRyXzEsIHUzMiAqZHN0X2FkZHJfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKmRzdF9hZGRyXzMsIHUzMiAqZHN0X2FkZHJfNCkKIHsKIAkqZHN0X2FkZHJfMSA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfRFNUX0lQVjZfT0ZGU0VUICsgMTJdOwogCSpkc3RfYWRkcl8xID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9EU1RfSVBWNl9PRkZTRVQgKyAxM10gPDwgODsKQEAgLTE4NjUsNyArMTgxMCw4IEBACiAgKiAgZW5kaWFubmVzcyB3aGVuIHJldHJpZXZpbmcgdGhlIGRhdGEuICBUaGlzIGNhbiBiZSBjb25mdXNpbmcgc2luY2UgdGhlCiAgKiAgaW50ZXJuYWwgaGFzaCBlbmdpbmUgZXhwZWN0cyBpdCB0byBiZSBiaWctZW5kaWFuLgogICoqLwotczMyIGl4Z2JlX2F0cl9nZXRfc3JjX3BvcnRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHUxNiAqc3JjX3BvcnQpCitzdGF0aWMgczMyIGl4Z2JlX2F0cl9nZXRfc3JjX3BvcnRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpzcmNfcG9ydCkKIHsKIAkqc3JjX3BvcnQgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19QT1JUX09GRlNFVF0gPDwgODsKIAkqc3JjX3BvcnQgfD0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfUE9SVF9PRkZTRVQgKyAxXTsKQEAgLTE4ODMsNyArMTgyOSw4IEBACiAgKiAgZW5kaWFubmVzcyB3aGVuIHJldHJpZXZpbmcgdGhlIGRhdGEuICBUaGlzIGNhbiBiZSBjb25mdXNpbmcgc2luY2UgdGhlCiAgKiAgaW50ZXJuYWwgaGFzaCBlbmdpbmUgZXhwZWN0cyBpdCB0byBiZSBiaWctZW5kaWFuLgogICoqLwotczMyIGl4Z2JlX2F0cl9nZXRfZHN0X3BvcnRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHUxNiAqZHN0X3BvcnQpCitzdGF0aWMgczMyIGl4Z2JlX2F0cl9nZXRfZHN0X3BvcnRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpkc3RfcG9ydCkKIHsKIAkqZHN0X3BvcnQgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0RTVF9QT1JUX09GRlNFVF0gPDwgODsKIAkqZHN0X3BvcnQgfD0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9EU1RfUE9SVF9PRkZTRVQgKyAxXTsKQEAgLTE4OTYsNyArMTg0Myw4IEBACiAgKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gbW9kaWZ5CiAgKiAgQGZsZXhfYnl0ZXM6IHRoZSBmbGV4aWJsZSBieXRlcyB0byBsb2FkCiAgKiovCi1zMzIgaXhnYmVfYXRyX2dldF9mbGV4X2J5dGVfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHUxNiAqZmxleF9ieXRlKQorc3RhdGljIHMzMiBpeGdiZV9hdHJfZ2V0X2ZsZXhfYnl0ZV84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpmbGV4X2J5dGUpCiB7CiAJKmZsZXhfYnl0ZSA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfRkxFWF9CWVRFX09GRlNFVF07CiAJKmZsZXhfYnl0ZSB8PSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0ZMRVhfQllURV9PRkZTRVQgKyAxXSA8PCA4OwpAQCAtMTkwOSw3ICsxODU3LDggQEAKICAqICBAaW5wdXQ6IGlucHV0IHN0cmVhbSB0byBtb2RpZnkKICAqICBAdm1fcG9vbDogdGhlIFZpcnR1YWwgTWFjaGluZSBwb29sIHRvIGxvYWQKICAqKi8KLXMzMiBpeGdiZV9hdHJfZ2V0X3ZtX3Bvb2xfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHU4ICp2bV9wb29sKQorczMyIGl4Z2JlX2F0cl9nZXRfdm1fcG9vbF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICp2bV9wb29sKQogewogCSp2bV9wb29sID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9WTV9QT09MX09GRlNFVF07CiAKQEAgLTE5MjEsNyArMTg3MCw4IEBACiAgKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gbW9kaWZ5CiAgKiAgQGw0dHlwZTogdGhlIGxheWVyIDQgdHlwZSB2YWx1ZSB0byBsb2FkCiAgKiovCi1zMzIgaXhnYmVfYXRyX2dldF9sNHR5cGVfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHU4ICpsNHR5cGUpCitzdGF0aWMgczMyIGl4Z2JlX2F0cl9nZXRfbDR0eXBlXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqbDR0eXBlKQogewogCSpsNHR5cGUgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0w0VFlQRV9PRkZTRVRdOwogCkBAIC0yMDAyLDkgKzE5NTIsOSBAQAogICogIGhhcmR3YXJlIHdyaXRlcyBtdXN0IGJlIHByb3RlY3RlZCBmcm9tIG9uZSBhbm90aGVyLgogICoqLwogczMyIGl4Z2JlX2ZkaXJfYWRkX3BlcmZlY3RfZmlsdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHNvZnRfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggcXVldWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgc29mdF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggcXVldWUpCiB7CiAJdTMyIGZkaXJjbWQgPSAwOwogCXUzMiBmZGlyaGFzaDsKQEAgLTIwOTcsNyArMjA0Nyw3IEBACiAgKgogICogIFBlcmZvcm1zIHJlYWQgb3BlcmF0aW9uIHRvIE9tZXIgYW5hbG9nIHJlZ2lzdGVyIHNwZWNpZmllZC4KICAqKi8KLXMzMiBpeGdiZV9yZWFkX2FuYWxvZ19yZWc4XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWcsIHU4ICp2YWwpCitzdGF0aWMgczMyIGl4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZywgdTggKnZhbCkKIHsKIAl1MzIgIGNvcmVfY3RsOwogCkBAIC0yMTE5LDcgKzIwNjksNyBAQAogICoKICAqICBQZXJmb3JtcyB3cml0ZSBvcGVyYXRpb24gdG8gT21lciBhbmFsb2cgcmVnaXN0ZXIgc3BlY2lmaWVkLgogICoqLwotczMyIGl4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWcsIHU4IHZhbCkKK3N0YXRpYyBzMzIgaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZywgdTggdmFsKQogewogCXUzMiAgY29yZV9jdGw7CiAKQEAgLTIxMzksNyArMjA4OSw3IEBACiAgKiAgVGhlbiBwZXJmb3JtcyBkZXZpY2Utc3BlY2lmaWM6CiAgKiAgQ2xlYXJzIHRoZSByYXRlIGxpbWl0ZXIgcmVnaXN0ZXJzLgogICoqLwotczMyIGl4Z2JlX3N0YXJ0X2h3XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgczMyIGl4Z2JlX3N0YXJ0X2h3XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJdTMyIHFfbnVtOwogCXMzMiByZXRfdmFsOwpAQCAtMjE2OCw3ICsyMTE4LDcgQEAKICAqCiAgKiAgRGV0ZXJtaW5lcyB0aGUgcGh5c2ljYWwgbGF5ZXIgbW9kdWxlIGZvdW5kIG9uIHRoZSBjdXJyZW50IGFkYXB0ZXIuCiAgKiovCi1zMzIgaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgczMyIGl4Z2JlX2lkZW50aWZ5X3BoeV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXMzMiBzdGF0dXMgPSBJWEdCRV9FUlJfUEhZX0FERFJfSU5WQUxJRDsKIAlzdGF0dXMgPSBpeGdiZV9pZGVudGlmeV9waHlfZ2VuZXJpYyhodyk7CkBAIC0yMTgzLDcgKzIxMzMsNyBAQAogICoKICAqICBEZXRlcm1pbmVzIHBoeXNpY2FsIGxheWVyIGNhcGFiaWxpdGllcyBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgogICoqLwotdTMyIGl4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyB1MzIgaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXUzMiBwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1VOS05PV047CiAJdTMyIGF1dG9jID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKQEAgLTIyOTAsNyArMjI0MCw3IEBACiAgKgogICogIEVuYWJsZXMgdGhlIFJ4IERNQSB1bml0IGZvciA4MjU5OQogICoqLwotczMyIGl4Z2JlX2VuYWJsZV9yeF9kbWFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ3ZhbCkKK3N0YXRpYyBzMzIgaXhnYmVfZW5hYmxlX3J4X2RtYV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVndmFsKQogewogI2RlZmluZSBJWEdCRV9NQVhfU0VDUlhfUE9MTCAzMAogCWludCBpOwpAQCAtMjMzNSw3ICsyMjg1LDcgQEAKICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCB0aGUgRUVQUk9NIGxvY2F0aW9uIGZvciB0aGUgZGV2aWNlIGNhcGFiaWxpdGllcywKICAqICBhbmQgcmV0dXJuIHRoZSB3b3JkIHRocm91Z2ggZGV2aWNlX2NhcHMuCiAgKiovCi1zMzIgaXhnYmVfZ2V0X2RldmljZV9jYXBzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiAqZGV2aWNlX2NhcHMpCitzdGF0aWMgczMyIGl4Z2JlX2dldF9kZXZpY2VfY2Fwc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgKmRldmljZV9jYXBzKQogewogCWh3LT5lZXByb20ub3BzLnJlYWQoaHcsIElYR0JFX0RFVklDRV9DQVBTLCBkZXZpY2VfY2Fwcyk7CiAKQEAgLTIzNTEsOCArMjMwMSw4IEBACiAgKiAgcG9pbnRlciwgYW5kIHJldHVybnMgdGhlIHZhbHVlIGF0IHRoYXQgbG9jYXRpb24uICBUaGlzIGlzIHVzZWQgaW4gYm90aAogICogIGdldCBhbmQgc2V0IG1hY19hZGRyIHJvdXRpbmVzLgogICoqLwotczMyIGl4Z2JlX2dldF9zYW5fbWFjX2FkZHJfb2Zmc2V0XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpzYW5fbWFjX29mZnNldCkKK3N0YXRpYyBzMzIgaXhnYmVfZ2V0X3Nhbl9tYWNfYWRkcl9vZmZzZXRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpzYW5fbWFjX29mZnNldCkKIHsKIAkvKgogCSAqIEZpcnN0IHJlYWQgdGhlIEVFUFJPTSBwb2ludGVyIHRvIHNlZSBpZiB0aGUgTUFDIGFkZHJlc3NlcyBhcmUKQEAgLTIzNzMsNyArMjMyMyw3IEBACiAgKiAgc2V0X2xhbl9pZCgpIGlzIGNhbGxlZCBieSBpZGVudGlmeV9zZnAoKSwgYnV0IHRoaXMgY2Fubm90IGJlIHJlbGllZAogICogIHVwb24gZm9yIG5vbi1TRlAgY29ubmVjdGlvbnMsIHNvIHdlIG11c3QgY2FsbCBpdCBoZXJlLgogICoqLwotczMyIGl4Z2JlX2dldF9zYW5fbWFjX2FkZHJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKnNhbl9tYWNfYWRkcikKK3N0YXRpYyBzMzIgaXhnYmVfZ2V0X3Nhbl9tYWNfYWRkcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqc2FuX21hY19hZGRyKQogewogCXUxNiBzYW5fbWFjX2RhdGEsIHNhbl9tYWNfb2Zmc2V0OwogCXU4IGk7CkBAIC0yNDc2LDcgKzI0MjYsNiBAQAogCS5yZWFkX2FuYWxvZ19yZWc4ICAgICAgID0gJml4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTksCiAJLndyaXRlX2FuYWxvZ19yZWc4ICAgICAgPSAmaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTksCiAJLnNldHVwX2xpbmsgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTksCi0JLnNldHVwX2xpbmtfc3BlZWQgICAgICAgPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTksCiAJLmNoZWNrX2xpbmsgICAgICAgICAgICAgPSAmaXhnYmVfY2hlY2tfbWFjX2xpbmtfODI1OTksCiAJLmdldF9saW5rX2NhcGFiaWxpdGllcyAgPSAmaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5LAogCS5sZWRfb24gICAgICAgICAgICAgICAgID0gJml4Z2JlX2xlZF9vbl9nZW5lcmljLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwppbmRleCA5NmExODU5Li42NjIxZTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwpAQCAtNTMsNiArNTMsNyBAQAogc3RhdGljIHZvaWQgaXhnYmVfZGlzYWJsZV9yYXIoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4KTsKIHN0YXRpYyBzMzIgaXhnYmVfbXRhX3ZlY3RvcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqbWNfYWRkcik7CiBzdGF0aWMgdm9pZCBpeGdiZV9hZGRfdWNfYWRkcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqYWRkciwgdTMyIHZtZHEpOworc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9mYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSk7CiAKIC8qKgogICogIGl4Z2JlX3N0YXJ0X2h3X2dlbmVyaWMgLSBQcmVwYXJlIGhhcmR3YXJlIGZvciBUeC9SeApAQCAtMTgxNSw3ICsxODE2LDcgQEAKICAqCiAgKiAgQ2FsbGVkIGF0IGluaXQgdGltZSB0byBzZXQgdXAgZmxvdyBjb250cm9sLgogICoqLwotczMyIGl4Z2JlX3NldHVwX2ZjKHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKQorc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9mYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSkKIHsKIAlzMzIgcmV0X3ZhbCA9IDA7CiAJdTMyIHJlZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKaW5kZXggMGQzNGQ0ZC4uMjdmMzIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKQEAgLTY0LDcgKzY0LDYgQEAKIHMzMiBpeGdiZV9lbmFibGVfbWNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHMzMiBpeGdiZV9kaXNhYmxlX21jX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfZW5hYmxlX3J4X2RtYV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWd2YWwpOwotczMyIGl4Z2JlX3NldHVwX2ZjKHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKTsKIHMzMiBpeGdiZV9mY19lbmFibGVfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja3RldGJ1Zl9udW0pOwogczMyIGl4Z2JlX2ZjX2F1dG9uZWcoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmMKaW5kZXggNTg5ZjYyYy4uZWM4YTI1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmMKQEAgLTE0NSw4ICsxNDUsMTIgQEAKIAl1MzIgICAgY3JlZGl0X21heCAgICA9IDA7CiAJdTggICAgIGkgICAgICAgICAgICAgPSAwOwogCi0JLyogRGlzYWJsZSB0aGUgYXJiaXRlciBiZWZvcmUgY2hhbmdpbmcgcGFyYW1ldGVycyAqLwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSUENTLCBJWEdCRV9SVFJQQ1NfQVJCRElTKTsKKwkvKgorCSAqIERpc2FibGUgdGhlIGFyYml0ZXIgYmVmb3JlIGNoYW5naW5nIHBhcmFtZXRlcnMKKwkgKiAoYWx3YXlzIGVuYWJsZSByZWN5Y2xlIG1vZGU7IFdTUCkKKwkgKi8KKwlyZWcgPSBJWEdCRV9SVFJQQ1NfUlJNIHwgSVhHQkVfUlRSUENTX1JBQyB8IElYR0JFX1JUUlBDU19BUkJESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFJQQ1MsIHJlZyk7CiAKIAkvKiBNYXAgYWxsIHRyYWZmaWMgY2xhc3NlcyB0byB0aGVpciBVUCwgMSB0byAxICovCiAJcmVnID0gMDsKQEAgLTE5NCw5ICsxOTgsNiBAQAogCXUzMiAgICByZWcsIG1heF9jcmVkaXRzOwogCXU4ICAgICBpOwogCi0JLyogRGlzYWJsZSB0aGUgYXJiaXRlciBiZWZvcmUgY2hhbmdpbmcgcGFyYW1ldGVycyAqLwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURENTLCBJWEdCRV9SVFREQ1NfQVJCRElTKTsKLQogCS8qIENsZWFyIHRoZSBwZXItVHggcXVldWUgY3JlZGl0czsgd2UgdXNlIHBlci1UQyBpbnN0ZWFkICovCiAJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURFFTRUwsIGkpOwpAQCAtMjQ0LDggKzI0NSwxNCBAQAogCXUzMiByZWc7CiAJdTggaTsKIAotCS8qIERpc2FibGUgdGhlIGFyYml0ZXIgYmVmb3JlIGNoYW5naW5nIHBhcmFtZXRlcnMgKi8KLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVFBDUywgSVhHQkVfUlRUUENTX0FSQkRJUyk7CisJLyoKKwkgKiBEaXNhYmxlIHRoZSBhcmJpdGVyIGJlZm9yZSBjaGFuZ2luZyBwYXJhbWV0ZXJzCisJICogKGFsd2F5cyBlbmFibGUgcmVjeWNsZSBtb2RlOyBTUDsgYXJiIGRlbGF5KQorCSAqLworCXJlZyA9IElYR0JFX1JUVFBDU19UUFBBQyB8IElYR0JFX1JUVFBDU19UUFJNIHwKKwkgICAgICAoSVhHQkVfUlRUUENTX0FSQkRfRENCIDw8IElYR0JFX1JUVFBDU19BUkJEX1NISUZUKSB8CisJICAgICAgSVhHQkVfUlRUUENTX0FSQkRJUzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVFBDUywgcmVnKTsKIAogCS8qIE1hcCBhbGwgdHJhZmZpYyBjbGFzc2VzIHRvIHRoZWlyIFVQLCAxIHRvIDEgKi8KIAlyZWcgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwppbmRleCAxYzcyNjU3Li5hNmJjMWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwpAQCAtMzYsNiArMzYsNyBAQAogI2RlZmluZSBCSVRfUEZDCQkweDAyCiAjZGVmaW5lIEJJVF9QR19SWAkweDA0CiAjZGVmaW5lIEJJVF9QR19UWAkweDA4CisjZGVmaW5lIEJJVF9BUFBfVVBDSEcJMHgxMAogI2RlZmluZSBCSVRfUkVTRVRMSU5LICAgMHg0MAogI2RlZmluZSBCSVRfTElOS1NQRUVEICAgMHg4MAogCkBAIC0xMzksMTggKzE0MCw2IEBACiAJCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRTsKIAkJfQogCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEOwotI2lmZGVmIElYR0JFX0ZDT0UKLQkJLyogVHVybiBvbiBGQ29FIG9mZmxvYWQgKi8KLQkJaWYgKChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9DQVBBQkxFKSAmJgotCQkgICAgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkpKSB7Ci0JCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRDsKLQkJCWFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRkNPRV0uaW5kaWNlcyA9Ci0JCQkJSVhHQkVfRkNSRVRBX1NJWkU7Ci0JCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfRkNPRV9DUkM7Ci0JCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfRlNPOwotCQkJbmV0ZGV2LT5mY29lX2RkcF94aWQgPSBJWEdCRV9GQ09FX0REUF9NQVggLSAxOwotCQl9Ci0jZW5kaWYgLyogSVhHQkVfRkNPRSAqLwogCQlpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CiAJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19vcGVuKG5ldGRldik7CkBAIC0xNjksMTcgKzE1OCw2IEBACiAJCQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCiAJCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRTsKIAotI2lmZGVmIElYR0JFX0ZDT0UKLQkJCS8qIFR1cm4gb2ZmIEZDb0Ugb2ZmbG9hZCAqLwotCQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgKElYR0JFX0ZMQUdfRkNPRV9DQVBBQkxFIHwKLQkJCSAgICAgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpKSB7Ci0JCQkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEOwotCQkJCWFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRkNPRV0uaW5kaWNlcyA9IDA7Ci0JCQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9GQ09FX0NSQzsKLQkJCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0ZTTzsKLQkJCQluZXRkZXYtPmZjb2VfZGRwX3hpZCA9IDA7Ci0JCQl9Ci0jZW5kaWYgLyogSVhHQkVfRkNPRSAqLwogCQkJaXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogCQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19vcGVuKG5ldGRldik7CkBAIC0zNzEsOCArMzQ5LDE0IEBACiAJCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJbXNsZWVwKDEpOwogCi0JCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCQlpeGdiZV9kb3duKGFkYXB0ZXIpOworCQlpZiAoYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgJiBCSVRfQVBQX1VQQ0hHKSB7CisJCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQkJCW5ldGRldi0+bmV0ZGV2X29wcy0+bmRvX3N0b3AobmV0ZGV2KTsKKwkJCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CisJCX0gZWxzZSB7CisJCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQkJCWl4Z2JlX2Rvd24oYWRhcHRlcik7CisJCX0KIAl9CiAKIAlyZXQgPSBpeGdiZV9jb3B5X2RjYl9jZmcoJmFkYXB0ZXItPnRlbXBfZGNiX2NmZywgJmFkYXB0ZXItPmRjYl9jZmcsCkBAIC0zOTYsOCArMzgwLDE0IEBACiAJfQogCiAJaWYgKGFkYXB0ZXItPmRjYl9zZXRfYml0bWFwICYgQklUX1JFU0VUTElOSykgewotCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQkJaXhnYmVfdXAoYWRhcHRlcik7CisJCWlmIChhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCAmIEJJVF9BUFBfVVBDSEcpIHsKKwkJCWl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKKwkJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCQkJbmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fb3BlbihuZXRkZXYpOworCQl9IGVsc2UgeworCQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJCQlpeGdiZV91cChhZGFwdGVyKTsKKwkJfQogCQlyZXQgPSBEQ0JfSFdfQ0hHX1JTVDsKIAl9IGVsc2UgaWYgKGFkYXB0ZXItPmRjYl9zZXRfYml0bWFwICYgQklUX1BGQykgewogCQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCkBAIC01MDMsNiArNDkzLDc2IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGl4Z2JlX2RjYm5sX2dldGFwcCAtIHJldHJpZXZlIHRoZSBEQ0JYIGFwcGxpY2F0aW9uIHVzZXIgcHJpb3JpdHkKKyAqIEBuZXRkZXYgOiB0aGUgY29ycmVzcG9uZGluZyBuZXRkZXYKKyAqIEBpZHR5cGUgOiBpZGVudGlmaWVzIHRoZSBpZCBhcyBldGhlciB0eXBlIG9yIFRDUC9VRFAgcG9ydCBudW1iZXIKKyAqIEBpZDogaWQgaXMgZWl0aGVyIGV0aGVyIHR5cGUgb3IgVENQL1VEUCBwb3J0IG51bWJlcgorICoKKyAqIFJldHVybnMgOiBvbiBzdWNjZXNzLCByZXR1cm5zIGEgbm9uLXplcm8gODAyLjFwIHVzZXIgcHJpb3JpdHkgYml0bWFwCisgKiBvdGhlcndpc2UgcmV0dXJucyAwIGFzIHRoZSBpbnZhbGlkIHVzZXIgcHJpb3JpdHkgYml0bWFwIHRvIGluZGljYXRlIGFuCisgKiBlcnJvci4KKyAqLworc3RhdGljIHU4IGl4Z2JlX2RjYm5sX2dldGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBpZHR5cGUsIHUxNiBpZCkKK3sKKwl1OCBydmFsID0gMDsKKworCXN3aXRjaCAoaWR0eXBlKSB7CisJY2FzZSBEQ0JfQVBQX0lEVFlQRV9FVEhUWVBFOgorI2lmZGVmIElYR0JFX0ZDT0UKKwkJaWYgKGlkID09IEVUSF9QX0ZDT0UpCisJCQlydmFsID0gaXhnYmVfZmNvZV9nZXRhcHAobmV0ZGV2X3ByaXYobmV0ZGV2KSk7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBEQ0JfQVBQX0lEVFlQRV9QT1JUTlVNOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIHJ2YWw7Cit9CisKKy8qKgorICogaXhnYmVfZGNibmxfc2V0YXBwIC0gc2V0IHRoZSBEQ0JYIGFwcGxpY2F0aW9uIHVzZXIgcHJpb3JpdHkKKyAqIEBuZXRkZXYgOiB0aGUgY29ycmVzcG9uZGluZyBuZXRkZXYKKyAqIEBpZHR5cGUgOiBpZGVudGlmaWVzIHRoZSBpZCBhcyBldGhlciB0eXBlIG9yIFRDUC9VRFAgcG9ydCBudW1iZXIKKyAqIEBpZDogaWQgaXMgZWl0aGVyIGV0aGVyIHR5cGUgb3IgVENQL1VEUCBwb3J0IG51bWJlcgorICogQHVwOiB0aGUgODAyLjFwIHVzZXIgcHJpb3JpdHkgYml0bWFwCisgKgorICogUmV0dXJucyA6IDAgb24gc3VjY2VzcyBvciAxIG9uIGVycm9yCisgKi8KK3N0YXRpYyB1OCBpeGdiZV9kY2JubF9zZXRhcHAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggaWR0eXBlLCB1MTYgaWQsIHU4IHVwKQoreworCXU4IHJ2YWwgPSAxOworCisJc3dpdGNoIChpZHR5cGUpIHsKKwljYXNlIERDQl9BUFBfSURUWVBFX0VUSFRZUEU6CisjaWZkZWYgSVhHQkVfRkNPRQorCQlpZiAoaWQgPT0gRVRIX1BfRkNPRSkgeworCQkJdTggdGM7CisJCQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcjsKKworCQkJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJCQl0YyA9IGFkYXB0ZXItPmZjb2UudGM7CisJCQlydmFsID0gaXhnYmVfZmNvZV9zZXRhcHAoYWRhcHRlciwgdXApOworCQkJaWYgKCghcnZhbCkgJiYgKHRjICE9IGFkYXB0ZXItPmZjb2UudGMpICYmCisJCQkgICAgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgJiYKKwkJCSAgICAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkpIHsKKwkJCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQVBQX1VQQ0hHOworCQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9SRVNFVExJTks7CisJCQl9CisJCX0KKyNlbmRpZgorCQlicmVhazsKKwljYXNlIERDQl9BUFBfSURUWVBFX1BPUlROVU06CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcnZhbDsKK30KKwogc3RydWN0IGRjYm5sX3J0bmxfb3BzIGRjYm5sX29wcyA9IHsKIAkuZ2V0c3RhdGUJPSBpeGdiZV9kY2JubF9nZXRfc3RhdGUsCiAJLnNldHN0YXRlCT0gaXhnYmVfZGNibmxfc2V0X3N0YXRlLApAQCAtNTIzLDUgKzU4Myw3IEBACiAJLnNldG51bXRjcwk9IGl4Z2JlX2RjYm5sX3NldG51bXRjcywKIAkuZ2V0cGZjc3RhdGUJPSBpeGdiZV9kY2JubF9nZXRwZmNzdGF0ZSwKIAkuc2V0cGZjc3RhdGUJPSBpeGdiZV9kY2JubF9zZXRwZmNzdGF0ZSwKKwkuZ2V0YXBwCQk9IGl4Z2JlX2RjYm5sX2dldGFwcCwKKwkuc2V0YXBwCQk9IGl4Z2JlX2RjYm5sX3NldGFwcCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwppbmRleCBkZmY4ZGZhLi4wMjZlOTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCkBAIC0xNjksMjMgKzE2OSwyMCBAQAogCQl9CiAJfSBlbHNlIGlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gaXhnYmVfbWVkaWFfdHlwZV9iYWNrcGxhbmUpIHsKIAkJLyogU2V0IGFzIEZJQlJFIHVudGlsIFNFUkRFUyBkZWZpbmVkIGluIGtlcm5lbCAqLwotCQlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKLQkJY2FzZSBJWEdCRV9ERVZfSURfODI1OTg6Ci0JCQllY21kLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJU1VQUE9SVEVEX0ZJQlJFKTsKLQkJCWVjbWQtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKLQkJCQlBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKLQkJCQlBRFZFUlRJU0VEX0ZJQlJFKTsKLQkJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4X0JYOgorCQlpZiAoaHctPmRldmljZV9pZCA9PSBJWEdCRV9ERVZfSURfODI1OThfQlgpIHsKIAkJCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAogCQkJCQkgICBTVVBQT1JURURfRklCUkUpOwogCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CiAJCQkJCSAgICAgQURWRVJUSVNFRF9GSUJSRSk7CiAJCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKIAkJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWVjbWQtPnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgIFNVUFBPUlRFRF9GSUJSRSk7CisJCQllY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgQURWRVJUSVNFRF9GSUJSRSk7CisJCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKIAkJfQogCX0gZWxzZSB7CiAJCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfRklCUkU7CkBAIC0yMzYsMTEgKzIzMywxMSBAQAogCQkJcmV0dXJuIGVycjsKIAkJLyogdGhpcyBzZXRzIHRoZSBsaW5rIHNwZWVkIGFuZCByZXN0YXJ0cyBhdXRvLW5lZyAqLwogCQlody0+bWFjLmF1dG90cnlfcmVzdGFydCA9IHRydWU7Ci0JCWVyciA9IGh3LT5tYWMub3BzLnNldHVwX2xpbmtfc3BlZWQoaHcsIGFkdmVydGlzZWQsIHRydWUsIHRydWUpOworCQllcnIgPSBody0+bWFjLm9wcy5zZXR1cF9saW5rKGh3LCBhZHZlcnRpc2VkLCB0cnVlLCB0cnVlKTsKIAkJaWYgKGVycikgewogCQkJRFBSSU5USyhQUk9CRSwgSU5GTywKIAkJCSAgICAgICAgInNldHVwIGxpbmsgZmFpbGVkIHdpdGggY29kZSAlZFxuIiwgZXJyKTsKLQkJCWh3LT5tYWMub3BzLnNldHVwX2xpbmtfc3BlZWQoaHcsIG9sZCwgdHJ1ZSwgdHJ1ZSk7CisJCQlody0+bWFjLm9wcy5zZXR1cF9saW5rKGh3LCBvbGQsIHRydWUsIHRydWUpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogaW4gdGhpcyBjYXNlIHdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgMTBHYi9GVUxMICovCkBAIC0xNDQwLDcgKzE0MzcsNyBAQAogCQlnb3RvIGVycl9ub21lbTsKIAl9CiAKLQl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGl4Z2JlX2xlZ2FjeV90eF9kZXNjKTsKKwl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MpOwogCXR4X3JpbmctPnNpemUgPSBBTElHTih0eF9yaW5nLT5zaXplLCA0MDk2KTsKIAlpZiAoISh0eF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgdHhfcmluZy0+c2l6ZSwKIAkJCQkJCSAgICZ0eF9yaW5nLT5kbWEpKSkgewpAQCAtMTQ1NCw3ICsxNDUxLDcgQEAKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9UREJBSCgwKSwKIAkJCSgodTY0KSB0eF9yaW5nLT5kbWEgPj4gMzIpKTsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9URExFTigwKSwKLQkJCXR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBpeGdiZV9sZWdhY3lfdHhfZGVzYykpOworCQkJdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MpKTsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9UREgoMCksIDApOwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1REVCgwKSwgMCk7CiAKQEAgLTE0NzIsNyArMTQ2OSw3IEBACiAJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVFhEQ1RMKDApLCByZWdfZGF0YSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdHhfcmluZy0+Y291bnQ7IGkrKykgewotCQlzdHJ1Y3QgaXhnYmVfbGVnYWN5X3R4X2Rlc2MgKmRlc2MgPSBJWEdCRV9UWF9ERVNDKCp0eF9yaW5nLCBpKTsKKwkJdW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgKmRlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVigqdHhfcmluZywgaSk7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXVuc2lnbmVkIGludCBzaXplID0gMTAyNDsKIApAQCAtMTQ4NiwxMyArMTQ4MywxOCBAQAogCQl0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXS5sZW5ndGggPSBza2ItPmxlbjsKIAkJdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0uZG1hID0KIAkJCXBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwotCQlkZXNjLT5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldLmRtYSk7Ci0JCWRlc2MtPmxvd2VyLmRhdGEgPSBjcHVfdG9fbGUzMihza2ItPmxlbik7Ci0JCWRlc2MtPmxvd2VyLmRhdGEgfD0gY3B1X3RvX2xlMzIoSVhHQkVfVFhEX0NNRF9FT1AgfAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1RYRF9DTURfSUZDUyB8Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfVFhEX0NNRF9SUyk7Ci0JCWRlc2MtPnVwcGVyLmRhdGEgPSAwOworCQkJICAgICAgICAgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCWRlc2MtPnJlYWQuYnVmZmVyX2FkZHIgPQorCQkgICAgICAgICAgICAgICAgICAgIGNwdV90b19sZTY0KHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldLmRtYSk7CisJCWRlc2MtPnJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOworCQlkZXNjLT5yZWFkLmNtZF90eXBlX2xlbiB8PSBjcHVfdG9fbGUzMihJWEdCRV9UWERfQ01EX0VPUCB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1RYRF9DTURfSUZDUyB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1RYRF9DTURfUlMpOworCQlkZXNjLT5yZWFkLm9saW5mb19zdGF0dXMgPSAwOworCQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCQlkZXNjLT5yZWFkLm9saW5mb19zdGF0dXMgfD0KKwkJCSAgICAgICAgICAgICAgICAoc2tiLT5sZW4gPDwgSVhHQkVfQURWVFhEX1BBWUxFTl9TSElGVCk7CisKIAl9CiAKIAkvKiBTZXR1cCBSeCBEZXNjcmlwdG9yIHJpbmcgYW5kIFJ4IGJ1ZmZlcnMgKi8KQEAgLTE1MDgsNyArMTUxMCw3IEBACiAJCWdvdG8gZXJyX25vbWVtOwogCX0KIAotCXJ4X3JpbmctPnNpemUgPSByeF9yaW5nLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgaXhnYmVfbGVnYWN5X3J4X2Rlc2MpOworCXJ4X3JpbmctPnNpemUgPSByeF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyk7CiAJcnhfcmluZy0+c2l6ZSA9IEFMSUdOKHJ4X3JpbmctPnNpemUsIDQwOTYpOwogCWlmICghKHJ4X3JpbmctPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCByeF9yaW5nLT5zaXplLAogCQkJCQkJICAgJnJ4X3JpbmctPmRtYSkpKSB7CkBAIC0xNTY2LDggKzE1NjgsOCBAQAogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1JYQ1RSTCwgcmN0bCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcnhfcmluZy0+Y291bnQ7IGkrKykgewotCQlzdHJ1Y3QgaXhnYmVfbGVnYWN5X3J4X2Rlc2MgKnJ4X2Rlc2MgPQotCQkJCQlJWEdCRV9SWF9ERVNDKCpyeF9yaW5nLCBpKTsKKwkJdW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MgPQorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKIAkJc2tiID0gYWxsb2Nfc2tiKElYR0JFX1JYQlVGRkVSXzIwNDggKyBORVRfSVBfQUxJR04sIEdGUF9LRVJORUwpOwpAQCAtMTU4MCw3ICsxNTgyLDcgQEAKIAkJcnhfcmluZy0+cnhfYnVmZmVyX2luZm9baV0uZG1hID0KIAkJCXBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgSVhHQkVfUlhCVUZGRVJfMjA0OCwKIAkJCSAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCXJ4X2Rlc2MtPmJ1ZmZlcl9hZGRyID0KKwkJcnhfZGVzYy0+cmVhZC5wa3RfYWRkciA9CiAJCQkJY3B1X3RvX2xlNjQocnhfcmluZy0+cnhfYnVmZmVyX2luZm9baV0uZG1hKTsKIAkJbWVtc2V0KHNrYi0+ZGF0YSwgMHgwMCwgc2tiLT5sZW4pOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYwppbmRleCAyOGNmMTA0Li5hM2M5Zjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jCkBAIC0yNyw2ICsyNyw5IEBACiAKIAogI2luY2x1ZGUgIml4Z2JlLmgiCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgorI2luY2x1ZGUgIml4Z2JlX2RjYl84MjU5OS5oIgorI2VuZGlmIC8qIENPTkZJR19JWEdCRV9EQ0IgKi8KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgpAQCAtMjg5LDYgKzI5Miw3IEBACiAJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdTE2IHhpZDsKKwl1MzIgZmN0bDsKIAl1MzIgc3RlcnIsIGZjZW9mZSwgZmNlcnIsIGZjc3RhdDsKIAlpbnQgcmMgPSAtRUlOVkFMOwogCXN0cnVjdCBpeGdiZV9mY29lICpmY29lOwpAQCAtMzA5LDcgKzMxMywxMiBAQAogCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpICsKIAkJCQkgc2l6ZW9mKHN0cnVjdCBmY29lX2hkcikpOwogCWZoID0gKHN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOwotCXhpZCA9ICBiZTE2X3RvX2NwdShmaC0+Zmhfb3hfaWQpOworCWZjdGwgPSBudG9oMjQoZmgtPmZoX2ZfY3RsKTsKKwlpZiAoZmN0bCAmIEZDX0ZDX0VYX0NUWCkKKwkJeGlkID0gIGJlMTZfdG9fY3B1KGZoLT5maF9veF9pZCk7CisJZWxzZQorCQl4aWQgPSAgYmUxNl90b19jcHUoZmgtPmZoX3J4X2lkKTsKKwogCWlmICh4aWQgPj0gSVhHQkVfRkNPRV9ERFBfTUFYKQogCQlnb3RvIGRkcF9vdXQ7CiAKQEAgLTU1NCwzICs1NjMsMTU4IEBACiAJCWZjb2UtPnBvb2wgPSBOVUxMOwogCX0KIH0KKworLyoqCisgKiBpeGdiZV9mY29lX2VuYWJsZSAtIHR1cm4gb24gRkNvRSBvZmZsb2FkIGZlYXR1cmUKKyAqIEBuZXRkZXY6IHRoZSBjb3JyZXNwb25kaW5nIG5ldGRldgorICoKKyAqIFR1cm5zIG9uIEZDb0Ugb2ZmbG9hZCBmZWF0dXJlIGluIDgyNTk5LgorICoKKyAqIFJldHVybnMgOiAwIGluZGljYXRlcyBzdWNjZXNzIG9yIC1FSU5WQUwgb24gZmFpbHVyZQorICovCitpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgcmMgPSAtRUlOVkFMOworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRSkpCisJCWdvdG8gb3V0X2VuYWJsZTsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKQorCQlnb3RvIG91dF9lbmFibGU7CisKKwlEUFJJTlRLKERSViwgSU5GTywgIkVuYWJsaW5nIEZDb0Ugb2ZmbG9hZCBmZWF0dXJlcy5cbiIpOworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCW5ldGRldi0+bmV0ZGV2X29wcy0+bmRvX3N0b3AobmV0ZGV2KTsKKworCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CisKKwlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRDsKKwlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0ZDT0VdLmluZGljZXMgPSBJWEdCRV9GQ1JFVEFfU0laRTsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfRkNPRV9DUkM7CisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0ZTTzsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfRkNPRV9NVFU7CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfRkNPRV9DUkM7CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfRlNPOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0ZDT0VfTVRVOworCW5ldGRldi0+ZmNvZV9kZHBfeGlkID0gSVhHQkVfRkNPRV9ERFBfTUFYIC0gMTsKKwluZXRkZXZfZmVhdHVyZXNfY2hhbmdlKG5ldGRldik7CisKKwlpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19vcGVuKG5ldGRldik7CisJcmMgPSAwOworCitvdXRfZW5hYmxlOgorCXJldHVybiByYzsKK30KKworLyoqCisgKiBpeGdiZV9mY29lX2Rpc2FibGUgLSB0dXJuIG9mZiBGQ29FIG9mZmxvYWQgZmVhdHVyZQorICogQG5ldGRldjogdGhlIGNvcnJlc3BvbmRpbmcgbmV0ZGV2CisgKgorICogVHVybnMgb2ZmIEZDb0Ugb2ZmbG9hZCBmZWF0dXJlIGluIDgyNTk5LgorICoKKyAqIFJldHVybnMgOiAwIGluZGljYXRlcyBzdWNjZXNzIG9yIC1FSU5WQUwgb24gZmFpbHVyZQorICovCitpbnQgaXhnYmVfZmNvZV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHJjID0gLUVJTlZBTDsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9DQVBBQkxFKSkKKwkJZ290byBvdXRfZGlzYWJsZTsKKworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpKQorCQlnb3RvIG91dF9kaXNhYmxlOworCisJRFBSSU5USyhEUlYsIElORk8sICJEaXNhYmxpbmcgRkNvRSBvZmZsb2FkIGZlYXR1cmVzLlxuIik7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJbmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RvcChuZXRkZXYpOworCisJaXhnYmVfY2xlYXJfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKKworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRDsKKwlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0ZDT0VdLmluZGljZXMgPSAwOworCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfRkNPRV9DUkM7CisJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9GU087CisJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9GQ09FX01UVTsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgJj0gfk5FVElGX0ZfRkNPRV9DUkM7CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzICY9IH5ORVRJRl9GX0ZTTzsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgJj0gfk5FVElGX0ZfRkNPRV9NVFU7CisJbmV0ZGV2LT5mY29lX2RkcF94aWQgPSAwOworCW5ldGRldl9mZWF0dXJlc19jaGFuZ2UobmV0ZGV2KTsKKworCWl4Z2JlX2NsZWFudXBfZmNvZShhZGFwdGVyKTsKKworCWl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19vcGVuKG5ldGRldik7CisJcmMgPSAwOworCitvdXRfZGlzYWJsZToKKwlyZXR1cm4gcmM7Cit9CisKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENCCisvKioKKyAqIGl4Z2JlX2Zjb2VfZ2V0YXBwIC0gcmV0cmlldmVzIGN1cnJlbnQgdXNlciBwcmlvcml0eSBiaXRtYXAgZm9yIEZDb0UKKyAqIEBhZGFwdGVyIDogaXhnYmUgYWRhcHRlcgorICoKKyAqIEZpbmRzIG91dCB0aGUgY29ycmVzcG9uZGluZyB1c2VyIHByaW9yaXR5IGJpdG1hcCBmcm9tIHRoZSBjdXJyZW50CisgKiB0cmFmZmljIGNsYXNzIHRoYXQgRkNvRSBiZWxvbmdzIHRvLiBSZXR1cm5zIDAgYXMgdGhlIGludmFsaWQgdXNlcgorICogcHJpb3JpdHkgYml0bWFwIHRvIGluZGljYXRlIGFuIGVycm9yLgorICoKKyAqIFJldHVybnMgOiA4MDIuMXAgdXNlciBwcmlvcml0eSBiaXRtYXAgZm9yIEZDb0UKKyAqLwordTggaXhnYmVfZmNvZV9nZXRhcHAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJdTggdGM7CisJdTMyIHVwMnRjOworCisJdXAydGMgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1JUVFVQMlRDKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1VTRVJfUFJJT1JJVFk7IGkrKykgeworCQl0YyA9ICh1OCkodXAydGMgPj4gKGkgKiBJWEdCRV9SVFRVUDJUQ19VUF9TSElGVCkpOworCQl0YyAmPSAoTUFYX1RSQUZGSUNfQ0xBU1MgLSAxKTsKKwkJaWYgKGFkYXB0ZXItPmZjb2UudGMgPT0gdGMpCisJCQlyZXR1cm4gMSA8PCBpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGl4Z2JlX2Zjb2Vfc2V0YXBwIC0gc2V0cyB0aGUgdXNlciBwcmlvcml0eSBiaXRtYXAgZm9yIEZDb0UKKyAqIEBhZGFwdGVyIDogaXhnYmUgYWRhcHRlcgorICogQHVwIDogODAyLjFwIHVzZXIgcHJpb3JpdHkgYml0bWFwCisgKgorICogRmluZHMgb3V0IHRoZSB0cmFmZmljIGNsYXNzIGZyb20gdGhlIGlucHV0IHVzZXIgcHJpb3JpdHkKKyAqIGJpdG1hcCBmb3IgRkNvRS4KKyAqCisgKiBSZXR1cm5zIDogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSByZXR1cm5zIDEgb24gZXJyb3IKKyAqLwordTggaXhnYmVfZmNvZV9zZXRhcHAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHVwKQoreworCWludCBpOworCXUzMiB1cDJ0YzsKKworCS8qIHZhbGlkIHVzZXIgcHJpb3JpdHkgYml0bWFwIG11c3Qgbm90IGJlIDAgKi8KKwlpZiAodXApIHsKKwkJLyogZnJvbSB1c2VyIHByaW9yaXR5IHRvIHRoZSBjb3JyZXNwb25kaW5nIHRyYWZmaWMgY2xhc3MgKi8KKwkJdXAydGMgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1JUVFVQMlRDKTsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9VU0VSX1BSSU9SSVRZOyBpKyspIHsKKwkJCWlmICh1cCAmICgxIDw8IGkpKSB7CisJCQkJdXAydGMgPj49IChpICogSVhHQkVfUlRUVVAyVENfVVBfU0hJRlQpOworCQkJCXVwMnRjICY9IChNQVhfVFJBRkZJQ19DTEFTUyAtIDEpOworCQkJCWFkYXB0ZXItPmZjb2UudGMgPSAodTgpdXAydGM7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAvKiBDT05GSUdfSVhHQkVfRENCICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmgKaW5kZXggYzViNTAwMi4uYjVkZWU3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuaApAQCAtNDYsNiArNDYsOSBAQAogI2RlZmluZSBJWEdCRV9GQ0JVRkZfTUlOCTQwOTYJLyogNEtCIG1pbiAqLwogI2RlZmluZSBJWEdCRV9GQ09FX0REUF9NQVgJNTEyCS8qIDkgYml0cyB4aWQgKi8KIAorLyogRGVmYXVsdCB0cmFmZmljIGNsYXNzIHRvIHVzZSBmb3IgRkNvRSAqLworI2RlZmluZSBJWEdCRV9GQ09FX0RFRlRDCTMKKwogLyogZmNlcnIgKi8KICNkZWZpbmUgSVhHQkVfRkNFUlJfQkFEQ1JDICAgICAgIDB4MDAxMDAwMDAKIApAQCAtNTksNiArNjIsNyBAQAogfTsKIAogc3RydWN0IGl4Z2JlX2Zjb2UgeworCXU4IHRjOwogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgcGNpX3Bvb2wgKnBvb2w7CiAJc3RydWN0IGl4Z2JlX2Zjb2VfZGRwIGRkcFtJWEdCRV9GQ09FX0REUF9NQVhdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDc3YjAzODEuLjQ1YmY4YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl9zdHJpbmdbXSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZWwoUikgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBOZXR3b3JrIERyaXZlciI7CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMC4zNC1rMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMC4zNy1rMiIKIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogc3RhdGljIGNoYXIgaXhnYmVfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIjsKIApAQCAtNzUsNiArNzUsOCBAQAogCSBib2FyZF84MjU5OCB9LAogCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4QVQpLAogCSBib2FyZF84MjU5OCB9LAorCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4QVQyKSwKKwkgYm9hcmRfODI1OTggfSwKIAl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OEVCX0NYNCksCiAJIGJvYXJkXzgyNTk4IH0sCiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OThfQ1g0X0RVQUxfUE9SVCksCkBAIC0yMDI0LDcgKzIwMjYsNyBAQAogCWVsc2UKIAkJaGxyZWcwIHw9IElYR0JFX0hMUkVHMF9KVU1CT0VOOwogI2lmZGVmIElYR0JFX0ZDT0UKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkKKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfRkNPRV9NVFUpCiAJCWhscmVnMCB8PSBJWEdCRV9ITFJFRzBfSlVNQk9FTjsKICNlbmRpZgogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSExSRUcwLCBobHJlZzApOwpAQCAtMjA1NSw3ICsyMDU3LDcgQEAKIAkJCXJ4X3JpbmctPmZsYWdzIHw9IElYR0JFX1JJTkdfUlhfUFNfRU5BQkxFRDsKIAogI2lmZGVmIElYR0JFX0ZDT0UKLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpIHsKKwkJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0ZDT0VfTVRVKSB7CiAJCQlzdHJ1Y3QgaXhnYmVfcmluZ19mZWF0dXJlICpmOwogCQkJZiA9ICZhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0ZDT0VdOwogCQkJaWYgKChpID49IGYtPm1hc2spICYmIChpIDwgZi0+bWFzayArIGYtPmluZGljZXMpKSB7CkBAIC0yNTE0LDcgKzI1MTYsNyBAQAogc3RhdGljIGludCBpeGdiZV9ub25fc2ZwX2xpbmtfY29uZmlnKHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJdTMyIGF1dG9uZWc7Ci0JYm9vbCBsaW5rX3VwID0gZmFsc2U7CisJYm9vbCBuZWdvdGlhdGlvbiwgbGlua191cCA9IGZhbHNlOwogCXUzMiByZXQgPSBJWEdCRV9FUlJfTElOS19TRVRVUDsKIAogCWlmIChody0+bWFjLm9wcy5jaGVja19saW5rKQpAQCAtMjUyNCwxMyArMjUyNiwxMiBAQAogCQlnb3RvIGxpbmtfY2ZnX291dDsKIAogCWlmIChody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMpCi0JCXJldCA9IGh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmF1dG9uZWcsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHctPm1hYy5hdXRvbmVnKTsKKwkJcmV0ID0gaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKGh3LCAmYXV0b25lZywgJm5lZ290aWF0aW9uKTsKIAlpZiAocmV0KQogCQlnb3RvIGxpbmtfY2ZnX291dDsKIAotCWlmIChody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKQotCQlyZXQgPSBody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBhdXRvbmVnLCB0cnVlLCBsaW5rX3VwKTsKKwlpZiAoaHctPm1hYy5vcHMuc2V0dXBfbGluaykKKwkJcmV0ID0gaHctPm1hYy5vcHMuc2V0dXBfbGluayhodywgYXV0b25lZywgbmVnb3RpYXRpb24sIGxpbmtfdXApOwogbGlua19jZmdfb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0yNjA3LDcgKzI2MDgsNyBAQAogCiAjaWZkZWYgSVhHQkVfRkNPRQogCS8qIGFkanVzdCBtYXggZnJhbWUgdG8gYmUgYWJsZSB0byBkbyBiYWJ5IGp1bWJvIGZvciBGQ29FICovCi0JaWYgKChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSAmJgorCWlmICgobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfRkNPRV9NVFUpICYmCiAJICAgIChtYXhfZnJhbWUgPCBJWEdCRV9GQ09FX0pVTUJPX0ZSQU1FX1NJWkUpKQogCQltYXhfZnJhbWUgPSBJWEdCRV9GQ09FX0pVTUJPX0ZSQU1FX1NJWkU7CiAKQEAgLTMxMTIsMTQgKzMxMTMsMTYgQEAKIAogCWYtPmluZGljZXMgPSBtaW4oKGludCludW1fb25saW5lX2NwdXMoKSwgZi0+aW5kaWNlcyk7CiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpIHsKKwkJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IDE7CisJCWFkYXB0ZXItPm51bV90eF9xdWV1ZXMgPSAxOwogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgewotCQkJRFBSSU5USyhQUk9CRSwgSU5GTywgIkZDT0UgZW5hYmxlZCB3aXRoIERDQiBcbiIpOworCQkJRFBSSU5USyhQUk9CRSwgSU5GTywgIkZDb0UgZW5hYmxlZCB3aXRoIERDQiBcbiIpOwogCQkJaXhnYmVfc2V0X2RjYl9xdWV1ZXMoYWRhcHRlcik7CiAJCX0KICNlbmRpZgogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JTU19FTkFCTEVEKSB7Ci0JCQlEUFJJTlRLKFBST0JFLCBJTkZPLCAiRkNPRSBlbmFibGVkIHdpdGggUlNTIFxuIik7CisJCQlEUFJJTlRLKFBST0JFLCBJTkZPLCAiRkNvRSBlbmFibGVkIHdpdGggUlNTIFxuIik7CiAJCQlpZiAoKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSkgfHwKIAkJCSAgICAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFKSkKIAkJCQlpeGdiZV9zZXRfZmRpcl9xdWV1ZXMoYWRhcHRlcik7CkBAIC0zMTI5LDggKzMxMzIsNyBAQAogCQkvKiBhZGRpbmcgRkNvRSByeCByaW5ncyB0byB0aGUgZW5kICovCiAJCWYtPm1hc2sgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOwogCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzICs9IGYtPmluZGljZXM7Ci0JCWlmIChhZGFwdGVyLT5udW1fdHhfcXVldWVzID09IDApCi0JCQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gZi0+aW5kaWNlczsKKwkJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyArPSBmLT5pbmRpY2VzOwogCiAJCXJldCA9IHRydWU7CiAJfQpAQCAtMzM3MCwxNSArMzM3MiwzNiBAQAogICovCiBzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfY2FjaGVfcmluZ19mY29lKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCWludCBpLCBmY29lX2kgPSAwOworCWludCBpLCBmY29lX3J4X2kgPSAwLCBmY29lX3R4X2kgPSAwOwogCWJvb2wgcmV0ID0gZmFsc2U7CiAJc3RydWN0IGl4Z2JlX3JpbmdfZmVhdHVyZSAqZiA9ICZhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0ZDT0VdOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpIHsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIHsKKwkJCXN0cnVjdCBpeGdiZV9mY29lICpmY29lID0gJmFkYXB0ZXItPmZjb2U7CisKIAkJCWl4Z2JlX2NhY2hlX3JpbmdfZGNiKGFkYXB0ZXIpOwotCQkJZmNvZV9pID0gYWRhcHRlci0+cnhfcmluZ1swXS5yZWdfaWR4ICsgMTsKKwkJCS8qIGZpbmQgb3V0IHF1ZXVlcyBpbiBUQyBmb3IgRkNvRSAqLworCQkJZmNvZV9yeF9pID0gYWRhcHRlci0+cnhfcmluZ1tmY29lLT50Y10ucmVnX2lkeCArIDE7CisJCQlmY29lX3R4X2kgPSBhZGFwdGVyLT50eF9yaW5nW2Zjb2UtPnRjXS5yZWdfaWR4ICsgMTsKKwkJCS8qCisJCQkgKiBJbiA4MjU5OSwgdGhlIG51bWJlciBvZiBUeCBxdWV1ZXMgZm9yIGVhY2ggdHJhZmZpYworCQkJICogY2xhc3MgZm9yIGJvdGggOC1UQyBhbmQgNC1UQyBtb2RlcyBhcmU6CisJCQkgKiBUQ3MgIDogVEMwIFRDMSBUQzIgVEMzIFRDNCBUQzUgVEM2IFRDNworCQkJICogOCBUQ3M6ICAzMiAgMzIgIDE2ICAxNiAgIDggICA4ICAgOCAgIDgKKwkJCSAqIDQgVENzOiAgNjQgIDY0ICAzMiAgMzIKKwkJCSAqIFdlIGhhdmUgbWF4IDggcXVldWVzIGZvciBGQ29FLCB3aGVyZSA4IHRoZSBpcworCQkJICogRkNvRSByZWRpcmVjdGlvbiB0YWJsZSBzaXplLiBJZiBUQyBmb3IgRkNvRSBpcworCQkJICogbGVzcyB0aGFuIG9yIGVxdWFsIHRvIFRDMywgd2UgaGF2ZSBlbm91Z2ggcXVldWVzCisJCQkgKiB0byBhZGQgbWF4IG9mIDggcXVldWVzIGZvciBGQ29FLCBzbyB3ZSBzdGFydCBGQ29FCisJCQkgKiB0eCBkZXNjcmlwdG9yIGZyb20gdGhlIG5leHQgb25lLCBpLmUuLCByZWdfaWR4ICsgMS4KKwkJCSAqIElmIFRDIGZvciBGQ29FIGlzIGFib3ZlIFRDMywgaW1wbHlpbmcgOCBUQyBtb2RlLAorCQkJICogYW5kIHdlIG5lZWQgOCBmb3IgRkNvRSwgd2UgaGF2ZSB0byB0YWtlIGFsbCBxdWV1ZXMKKwkJCSAqIGluIHRoYXQgdHJhZmZpYyBjbGFzcyBmb3IgRkNvRS4KKwkJCSAqLworCQkJaWYgKChmLT5pbmRpY2VzID09IElYR0JFX0ZDUkVUQV9TSVpFKSAmJiAoZmNvZS0+dGMgPiAzKSkKKwkJCQlmY29lX3R4X2ktLTsKIAkJfQogI2VuZGlmIC8qIENPTkZJR19JWEdCRV9EQ0IgKi8KIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCkgewpAQCAtMzM4OCwxMCArMzQxMSwxMyBAQAogCQkJZWxzZQogCQkJCWl4Z2JlX2NhY2hlX3JpbmdfcnNzKGFkYXB0ZXIpOwogCi0JCQlmY29lX2kgPSBmLT5tYXNrOworCQkJZmNvZV9yeF9pID0gZi0+bWFzazsKKwkJCWZjb2VfdHhfaSA9IGYtPm1hc2s7CiAJCX0KLQkJZm9yIChpID0gMDsgaSA8IGYtPmluZGljZXM7IGkrKywgZmNvZV9pKyspCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2YtPm1hc2sgKyBpXS5yZWdfaWR4ID0gZmNvZV9pOworCQlmb3IgKGkgPSAwOyBpIDwgZi0+aW5kaWNlczsgaSsrLCBmY29lX3J4X2krKywgZmNvZV90eF9pKyspIHsKKwkJCWFkYXB0ZXItPnJ4X3JpbmdbZi0+bWFzayArIGldLnJlZ19pZHggPSBmY29lX3J4X2k7CisJCQlhZGFwdGVyLT50eF9yaW5nW2YtPm1hc2sgKyBpXS5yZWdfaWR4ID0gZmNvZV90eF9pOworCQl9CiAJCXJldCA9IHRydWU7CiAJfQogCXJldHVybiByZXQ7CkBAIC0zNjEzLDcgKzM2MzksNyBAQAogCX0KIH0KIAotdm9pZCBpeGdiZV9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyB2b2lkIGl4Z2JlX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CiAJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX01TSVhfRU5BQkxFRDsKQEAgLTM3OTksNiArMzgyNSw4IEBACiAJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRkNPRV9DQVBBQkxFOwogCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19GQ09FX0VOQUJMRUQ7CiAJCWFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRkNPRV0uaW5kaWNlcyA9IDA7CisJCS8qIERlZmF1bHQgdHJhZmZpYyBjbGFzcyB0byB1c2UgZm9yIEZDb0UgKi8KKwkJYWRhcHRlci0+ZmNvZS50YyA9IElYR0JFX0ZDT0VfREVGVEM7CiAjZW5kaWYgLyogSVhHQkVfRkNPRSAqLwogCX0KIApAQCAtNDUxMywxNCArNDU0MSwxNCBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpc3BlZWRfZmliZXJfdGFzayk7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgYXV0b25lZzsKKwlib29sIG5lZ290aWF0aW9uOwogCiAJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19JTl9TRlBfTElOS19UQVNLOwogCWF1dG9uZWcgPSBody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZDsKIAlpZiAoKCFhdXRvbmVnKSAmJiAoaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKSkKLQkJaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKGh3LCAmYXV0b25lZywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZody0+bWFjLmF1dG9uZWcpOwotCWlmIChody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKQotCQlody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBhdXRvbmVnLCB0cnVlLCB0cnVlKTsKKwkJaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKGh3LCAmYXV0b25lZywgJm5lZ290aWF0aW9uKTsKKwlpZiAoaHctPm1hYy5vcHMuc2V0dXBfbGluaykKKwkJaHctPm1hYy5vcHMuc2V0dXBfbGluayhodywgYXV0b25lZywgbmVnb3RpYXRpb24sIHRydWUpOwogCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURTsKIAlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19JTl9TRlBfTElOS19UQVNLOwogfQpAQCAtNDYzNCwxMyArNDY2MiwxMyBAQAogCQkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgewogCQkJCXUzMiBtZmxjbiA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NRkxDTik7CiAJCQkJdTMyIGZjY2ZnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDQ0ZHKTsKLQkJCQlmbG93X3J4ID0gKG1mbGNuICYgSVhHQkVfTUZMQ05fUkZDRSk7Ci0JCQkJZmxvd190eCA9IChmY2NmZyAmIElYR0JFX0ZDQ0ZHX1RGQ0VfODAyXzNYKTsKKwkJCQlmbG93X3J4ID0gISEobWZsY24gJiBJWEdCRV9NRkxDTl9SRkNFKTsKKwkJCQlmbG93X3R4ID0gISEoZmNjZmcgJiBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWCk7CiAJCQl9IGVsc2UgewogCQkJCXUzMiBmcmN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RSTCk7CiAJCQkJdTMyIHJtY3MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk1DUyk7Ci0JCQkJZmxvd19yeCA9IChmcmN0bCAmIElYR0JFX0ZDVFJMX1JGQ0UpOwotCQkJCWZsb3dfdHggPSAocm1jcyAmIElYR0JFX1JNQ1NfVEZDRV84MDJfM1gpOworCQkJCWZsb3dfcnggPSAhIShmcmN0bCAmIElYR0JFX0ZDVFJMX1JGQ0UpOworCQkJCWZsb3dfdHggPSAhIShybWNzICYgSVhHQkVfUk1DU19URkNFXzgwMl8zWCk7CiAJCQl9CiAKIAkJCXByaW50ayhLRVJOX0lORk8gIml4Z2JlOiAlcyBOSUMgTGluayBpcyBVcCAlcywgIgpAQCAtNTEwMCwxMiArNTEyOCwxMyBAQAogCQlyZXR1cm4gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkKLQkJcmV0dXJuIDA7ICAvKiBBbGwgdHJhZmZpYyBzaG91bGQgZGVmYXVsdCB0byBjbGFzcyAwICovCisJCXJldHVybiAoc2tiLT52bGFuX3RjaSAmIElYR0JFX1RYX0ZMQUdTX1ZMQU5fUFJJT19NQVNLKSA+PiAxMzsKIAogCXJldHVybiBza2JfdHhfaGFzaChkZXYsIHNrYik7CiB9CiAKLXN0YXRpYyBpbnQgaXhnYmVfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGl4Z2JlX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3Jpbmc7CkBAIC01MTM5LDkgKzUxNjgsMTUgQEAKIAl0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3Jpbmdbcl9pZHhdOwogCiAJaWYgKChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSAmJgotCSAgICAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9GQ09FKSkpCisJICAgIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0ZDT0UpKSkgewogCQl0eF9mbGFncyB8PSBJWEdCRV9UWF9GTEFHU19GQ09FOwotCisjaWZkZWYgSVhHQkVfRkNPRQorCQlyX2lkeCA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJcl9pZHggJj0gKGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRkNPRV0uaW5kaWNlcyAtIDEpOworCQlyX2lkeCArPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0ZDT0VdLm1hc2s7CisJCXR4X3JpbmcgPSAmYWRhcHRlci0+dHhfcmluZ1tyX2lkeF07CisjZW5kaWYKKwl9CiAJLyogZm91ciB0aGluZ3MgY2FuIGNhdXNlIHVzIHRvIG5lZWQgYSBjb250ZXh0IGRlc2NyaXB0b3IgKi8KIAlpZiAoc2tiX2lzX2dzbyhza2IpIHx8CiAJICAgIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB8fApAQCAtNTM3NCw2ICs1NDA5LDggQEAKICNpZmRlZiBJWEdCRV9GQ09FCiAJLm5kb19mY29lX2RkcF9zZXR1cCA9IGl4Z2JlX2Zjb2VfZGRwX2dldCwKIAkubmRvX2Zjb2VfZGRwX2RvbmUgPSBpeGdiZV9mY29lX2RkcF9wdXQsCisJLm5kb19mY29lX2VuYWJsZSA9IGl4Z2JlX2Zjb2VfZW5hYmxlLAorCS5uZG9fZmNvZV9kaXNhYmxlID0gaXhnYmVfZmNvZV9kaXNhYmxlLAogI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KIH07CiAKQEAgLTU1NzMsNiArNTYxMCw3IEBACiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCmluZGV4IGJlOTBlYjQuLjhiYTkwZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKQEAgLTQyLDYgKzQyLDcgQEAKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4QUZfU0lOR0xFX1BPUlQgMHgxMEM3CiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OEVCX1NGUF9MT00gICAgIDB4MTBEQgogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThBVCAgICAgICAgICAgICAweDEwQzgKKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4QVQyICAgICAgICAgICAgMHgxNTBCCiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OEVCX0NYNCAgICAgICAgIDB4MTBERAogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThfQ1g0X0RVQUxfUE9SVCAweDEwRUMKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4X0RBX0RVQUxfUE9SVCAgMHgxMEYxCkBAIC0xOTAxLDI3ICsxOTAyLDYgQEAKICNkZWZpbmUgSVhHQkVfRkRJUl9JTklUX0RPTkVfUE9MTCAgICAgICAgICAgICAgIDEwCiAjZGVmaW5lIElYR0JFX0ZESVJDTURfQ01EX1BPTEwgICAgICAgICAgICAgICAgICAxMAogCi0vKiBUcmFuc21pdCBEZXNjcmlwdG9yIC0gTGVnYWN5ICovCi1zdHJ1Y3QgaXhnYmVfbGVnYWN5X3R4X2Rlc2MgewotCXU2NCBidWZmZXJfYWRkcjsgICAgICAgLyogQWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovCi0JdW5pb24gewotCQlfX2xlMzIgZGF0YTsKLQkJc3RydWN0IHsKLQkJCV9fbGUxNiBsZW5ndGg7ICAgIC8qIERhdGEgYnVmZmVyIGxlbmd0aCAqLwotCQkJdTggY3NvOyAgICAgICAgICAgLyogQ2hlY2tzdW0gb2Zmc2V0ICovCi0JCQl1OCBjbWQ7ICAgICAgICAgICAvKiBEZXNjcmlwdG9yIGNvbnRyb2wgKi8KLQkJfSBmbGFnczsKLQl9IGxvd2VyOwotCXVuaW9uIHsKLQkJX19sZTMyIGRhdGE7Ci0JCXN0cnVjdCB7Ci0JCQl1OCBzdGF0dXM7ICAgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwotCQkJdTggY3NzOyAgICAgICAgICAgLyogQ2hlY2tzdW0gc3RhcnQgKi8KLQkJCV9fbGUxNiB2bGFuOwotCQl9IGZpZWxkczsKLQl9IHVwcGVyOwotfTsKLQogLyogVHJhbnNtaXQgRGVzY3JpcHRvciAtIEFkdmFuY2VkICovCiB1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyB7CiAJc3RydWN0IHsKQEAgLTE5MzYsMTYgKzE5MTYsNiBAQAogCX0gd2I7CiB9OwogCi0vKiBSZWNlaXZlIERlc2NyaXB0b3IgLSBMZWdhY3kgKi8KLXN0cnVjdCBpeGdiZV9sZWdhY3lfcnhfZGVzYyB7Ci0JX19sZTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KLQlfX2xlMTYgbGVuZ3RoOyAgICAgIC8qIExlbmd0aCBvZiBkYXRhIERNQWVkIGludG8gZGF0YSBidWZmZXIgKi8KLQlfX2xlMTYgY3N1bTsgICAgICAgIC8qIFBhY2tldCBjaGVja3N1bSAqLwotCXU4IHN0YXR1czsgICAgICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KLQl1OCBlcnJvcnM7ICAgICAgICAgIC8qIERlc2NyaXB0b3IgRXJyb3JzICovCi0JX19sZTE2IHZsYW47Ci19OwotCiAvKiBSZWNlaXZlIERlc2NyaXB0b3IgLSBBZHZhbmNlZCAqLwogdW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgewogCXN0cnVjdCB7CkBAIC0yMzYyLDkgKzIzMzIsNyBAQAogCXMzMiAoKmVuYWJsZV9yeF9kbWEpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIpOwogCiAJLyogTGluayAqLwotCXMzMiAoKnNldHVwX2xpbmspKHN0cnVjdCBpeGdiZV9odyAqKTsKLQlzMzIgKCpzZXR1cF9saW5rX3NwZWVkKShzdHJ1Y3QgaXhnYmVfaHcgKiwgaXhnYmVfbGlua19zcGVlZCwgYm9vbCwKLQkgICAgICAgICAgICAgICAgICAgICAgICBib29sKTsKKwlzMzIgKCpzZXR1cF9saW5rKShzdHJ1Y3QgaXhnYmVfaHcgKiwgaXhnYmVfbGlua19zcGVlZCwgYm9vbCwgYm9vbCk7CiAJczMyICgqY2hlY2tfbGluaykoc3RydWN0IGl4Z2JlX2h3ICosIGl4Z2JlX2xpbmtfc3BlZWQgKiwgYm9vbCAqLCBib29sKTsKIAlzMzIgKCpnZXRfbGlua19jYXBhYmlsaXRpZXMpKHN0cnVjdCBpeGdiZV9odyAqLCBpeGdiZV9saW5rX3NwZWVkICosCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICopOwpAQCAtMjQzNiw4ICsyNDA0LDYgQEAKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfYXV0b2M7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX2F1dG9jMjsKIAlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQ7Ci0JYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnOwotCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ19zdWNjZWVkZWQ7CiAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvdHJ5X3Jlc3RhcnQ7CiB9OwogCkBAIC0yNDUyLDcgKzI0MTgsNiBAQAogCWVudW0gaXhnYmVfbWVkaWFfdHlwZSAgICAgICAgICAgbWVkaWFfdHlwZTsKIAlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X2Rpc2FibGU7CiAJaXhnYmVfYXV0b25lZ19hZHZlcnRpc2VkICAgICAgICBhdXRvbmVnX2FkdmVydGlzZWQ7Ci0JYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU7CiAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXNwZWVkX2ZpYmVyOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMKaW5kZXggOTJmYjgyMy4uMTI3MjQzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYworKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jCkBAIC00Niw3ICs0Niw3IEBACiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuID4gUEFHRV9TSVpFKSkgewogCQkvKiBAQEAgQ291bnQgZHJvcHMuICAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCWVudHJ5ID0gdHhfcG9pbnRlcjsKQEAgLTcwLDcgKzcwLDcgQEAKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvamF6enNvbmljLmMgYi9kcml2ZXJzL25ldC9qYXp6c29uaWMuYwppbmRleCAyZjI4NjA5Li42ZTViM2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qYXp6c29uaWMuYworKysgYi9kcml2ZXJzL25ldC9qYXp6c29uaWMuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzb25pY19wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNvbmljX3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0YXRpYyB1bnNpZ25lZCB2ZXJzaW9uX3ByaW50ZWQ7CiAJdW5zaWduZWQgaW50IHNpbGljb25fcmV2aXNpb247CkBAIC0yMDMsNyArMjAzLDcgQEAKIAogCXJldHVybiAwOwogb3V0OgotCXJlbGVhc2VfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBTT05JQ19NRU1fU0laRSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBTT05JQ19NRU1fU0laRSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjExLDcgKzIxMSw3IEBACiAgKiBQcm9iZSBmb3IgYSBTT05JQyBldGhlcm5ldCBjb250cm9sbGVyIG9uIGEgTWlwcyBKYXp6IGJvYXJkLgogICogQWN0dWFsbHkgcHJvYmluZyBpcyBzdXBlcmZsdW91cyBidXQgd2UncmUgcGFyYW5vaWQuCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IGphenpfc29uaWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGphenpfc29uaWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzb25pY19sb2NhbCAqbHA7CkBAIC0yNDcsNyArMjQ3LDcgQEAKIAlyZXR1cm4gMDsKIAogb3V0MToKLQlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgU09OSUNfTUVNX1NJWkUpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgU09OSUNfTUVNX1NJWkUpOwogb3V0OgogCWZyZWVfbmV0ZGV2KGRldik7CiAKQEAgLTI2OSw3ICsyNjksNyBAQAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJZG1hX2ZyZWVfY29oZXJlbnQobHAtPmRldmljZSwgU0laRU9GX1NPTklDX0RFU0MgKiBTT05JQ19CVVNfU0NBTEUobHAtPmRtYV9iaXRtb2RlKSwKIAkgICAgICAgICAgICAgICAgICBscC0+ZGVzY3JpcHRvcnMsIGxwLT5kZXNjcmlwdG9yc19sYWRkcik7Ci0JcmVsZWFzZV9yZWdpb24gKGRldi0+YmFzZV9hZGRyLCBTT05JQ19NRU1fU0laRSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBTT05JQ19NRU1fU0laRSk7CiAJZnJlZV9uZXRkZXYoZGV2KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvam1lLmMgYi9kcml2ZXJzL25ldC9qbWUuYwppbmRleCAxZTNjNjNkLi4xZDJhMzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qbWUuYworKysgYi9kcml2ZXJzL25ldC9qbWUuYwpAQCAtMzIyLDIwICszMjIsNiBAQAogCWp3cml0ZTMyZihqbWUsIEpNRV9JRU5DLCBJTlRSX0VOQUJMRSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotam1lX2VuYWJsZV9zaGFkb3coc3RydWN0IGptZV9hZGFwdGVyICpqbWUpCi17Ci0JandyaXRlMzIoam1lLAotCQkgSk1FX1NIQkFfTE8sCi0JCSAoKHUzMilqbWUtPnNoYWRvd19kbWEgJiB+KCh1MzIpMHgxRikpIHwgU0hCQV9QT1NURU4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWptZV9kaXNhYmxlX3NoYWRvdyhzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSkKLXsKLQlqd3JpdGUzMihqbWUsIEpNRV9TSEJBX0xPLCAweDApOwotfQotCiBzdGF0aWMgdTMyCiBqbWVfbGlua3N0YXRfZnJvbV9waHkoc3RydWN0IGptZV9hZGFwdGVyICpqbWUpCiB7CkBAIC01MjIsMTIgKzUwOCw4IEBACiAJCQkJICAgJih0eHJpbmctPmRtYWFsbG9jKSwKIAkJCQkgICBHRlBfQVRPTUlDKTsKIAotCWlmICghdHhyaW5nLT5hbGxvYykgewotCQl0eHJpbmctPmRlc2MgPSBOVUxMOwotCQl0eHJpbmctPmRtYWFsbG9jID0gMDsKLQkJdHhyaW5nLT5kbWEgPSAwOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJaWYgKCF0eHJpbmctPmFsbG9jKQorCQlnb3RvIGVycl9zZXRfbnVsbDsKIAogCS8qCiAJICogMTYgQnl0ZXMgYWxpZ24KQEAgLTUzOSw2ICs1MjEsMTEgQEAKIAlhdG9taWNfc2V0KCZ0eHJpbmctPm5leHRfdG9fY2xlYW4sIDApOwogCWF0b21pY19zZXQoJnR4cmluZy0+bnJfZnJlZSwgam1lLT50eF9yaW5nX3NpemUpOwogCisJdHhyaW5nLT5idWZpbmYJCT0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGptZV9idWZmZXJfaW5mbykgKgorCQkJCQlqbWUtPnR4X3Jpbmdfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCEodHhyaW5nLT5idWZpbmYpKSkKKwkJZ290byBlcnJfZnJlZV90eHJpbmc7CisKIAkvKgogCSAqIEluaXRpYWxpemUgVHJhbnNtaXQgRGVzY3JpcHRvcnMKIAkgKi8KQEAgLTU0Nyw2ICs1MzQsMjAgQEAKIAkJc2l6ZW9mKHN0cnVjdCBqbWVfYnVmZmVyX2luZm8pICogam1lLT50eF9yaW5nX3NpemUpOwogCiAJcmV0dXJuIDA7CisKK2Vycl9mcmVlX3R4cmluZzoKKwlkbWFfZnJlZV9jb2hlcmVudCgmKGptZS0+cGRldi0+ZGV2KSwKKwkJCSAgVFhfUklOR19BTExPQ19TSVpFKGptZS0+dHhfcmluZ19zaXplKSwKKwkJCSAgdHhyaW5nLT5hbGxvYywKKwkJCSAgdHhyaW5nLT5kbWFhbGxvYyk7CisKK2Vycl9zZXRfbnVsbDoKKwl0eHJpbmctPmRlc2MgPSBOVUxMOworCXR4cmluZy0+ZG1hYWxsb2MgPSAwOworCXR4cmluZy0+ZG1hID0gMDsKKwl0eHJpbmctPmJ1ZmluZiA9IE5VTEw7CisKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTU1NCwxOSArNTU1LDIyIEBACiB7CiAJaW50IGk7CiAJc3RydWN0IGptZV9yaW5nICp0eHJpbmcgPSAmKGptZS0+dHhyaW5nWzBdKTsKLQlzdHJ1Y3Qgam1lX2J1ZmZlcl9pbmZvICp0eGJpID0gdHhyaW5nLT5idWZpbmY7CisJc3RydWN0IGptZV9idWZmZXJfaW5mbyAqdHhiaTsKIAogCWlmICh0eHJpbmctPmFsbG9jKSB7Ci0JCWZvciAoaSA9IDAgOyBpIDwgam1lLT50eF9yaW5nX3NpemUgOyArK2kpIHsKLQkJCXR4YmkgPSB0eHJpbmctPmJ1ZmluZiArIGk7Ci0JCQlpZiAodHhiaS0+c2tiKSB7Ci0JCQkJZGV2X2tmcmVlX3NrYih0eGJpLT5za2IpOwotCQkJCXR4YmktPnNrYiA9IE5VTEw7CisJCWlmICh0eHJpbmctPmJ1ZmluZikgeworCQkJZm9yIChpID0gMCA7IGkgPCBqbWUtPnR4X3Jpbmdfc2l6ZSA7ICsraSkgeworCQkJCXR4YmkgPSB0eHJpbmctPmJ1ZmluZiArIGk7CisJCQkJaWYgKHR4YmktPnNrYikgeworCQkJCQlkZXZfa2ZyZWVfc2tiKHR4YmktPnNrYik7CisJCQkJCXR4YmktPnNrYiA9IE5VTEw7CisJCQkJfQorCQkJCXR4YmktPm1hcHBpbmcJCT0gMDsKKwkJCQl0eGJpLT5sZW4JCT0gMDsKKwkJCQl0eGJpLT5ucl9kZXNjCQk9IDA7CisJCQkJdHhiaS0+c3RhcnRfeG1pdAk9IDA7CiAJCQl9Ci0JCQl0eGJpLT5tYXBwaW5nCQk9IDA7Ci0JCQl0eGJpLT5sZW4JCT0gMDsKLQkJCXR4YmktPm5yX2Rlc2MJCT0gMDsKLQkJCXR4YmktPnN0YXJ0X3htaXQJPSAwOworCQkJa2ZyZWUodHhyaW5nLT5idWZpbmYpOwogCQl9CiAKIAkJZG1hX2ZyZWVfY29oZXJlbnQoJihqbWUtPnBkZXYtPmRldiksCkBAIC01NzgsMTEgKzU4MiwxMSBAQAogCQl0eHJpbmctPmRlc2MJCT0gTlVMTDsKIAkJdHhyaW5nLT5kbWFhbGxvYwk9IDA7CiAJCXR4cmluZy0+ZG1hCQk9IDA7CisJCXR4cmluZy0+YnVmaW5mCQk9IE5VTEw7CiAJfQogCXR4cmluZy0+bmV4dF90b191c2UJPSAwOwogCWF0b21pY19zZXQoJnR4cmluZy0+bmV4dF90b19jbGVhbiwgMCk7CiAJYXRvbWljX3NldCgmdHhyaW5nLT5ucl9mcmVlLCAwKTsKLQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTY1Myw3ICs2NTcsNyBAQAogc3RhdGljIHZvaWQKIGptZV9zZXRfY2xlYW5fcnhkZXNjKHN0cnVjdCBqbWVfYWRhcHRlciAqam1lLCBpbnQgaSkKIHsKLQlzdHJ1Y3Qgam1lX3JpbmcgKnJ4cmluZyA9IGptZS0+cnhyaW5nOworCXN0cnVjdCBqbWVfcmluZyAqcnhyaW5nID0gJihqbWUtPnJ4cmluZ1swXSk7CiAJcmVnaXN0ZXIgc3RydWN0IHJ4ZGVzYyAqcnhkZXNjID0gcnhyaW5nLT5kZXNjOwogCXN0cnVjdCBqbWVfYnVmZmVyX2luZm8gKnJ4YmkgPSByeHJpbmctPmJ1ZmluZjsKIAlyeGRlc2MgKz0gaTsKQEAgLTcyMCw4ICs3MjQsMTEgQEAKIAlzdHJ1Y3Qgam1lX3JpbmcgKnJ4cmluZyA9ICYoam1lLT5yeHJpbmdbMF0pOwogCiAJaWYgKHJ4cmluZy0+YWxsb2MpIHsKLQkJZm9yIChpID0gMCA7IGkgPCBqbWUtPnJ4X3Jpbmdfc2l6ZSA7ICsraSkKLQkJCWptZV9mcmVlX3J4X2J1ZihqbWUsIGkpOworCQlpZiAocnhyaW5nLT5idWZpbmYpIHsKKwkJCWZvciAoaSA9IDAgOyBpIDwgam1lLT5yeF9yaW5nX3NpemUgOyArK2kpCisJCQkJam1lX2ZyZWVfcnhfYnVmKGptZSwgaSk7CisJCQlrZnJlZShyeHJpbmctPmJ1ZmluZik7CisJCX0KIAogCQlkbWFfZnJlZV9jb2hlcmVudCgmKGptZS0+cGRldi0+ZGV2KSwKIAkJCQkgIFJYX1JJTkdfQUxMT0NfU0laRShqbWUtPnJ4X3Jpbmdfc2l6ZSksCkBAIC03MzEsNiArNzM4LDcgQEAKIAkJcnhyaW5nLT5kZXNjICAgICA9IE5VTEw7CiAJCXJ4cmluZy0+ZG1hYWxsb2MgPSAwOwogCQlyeHJpbmctPmRtYSAgICAgID0gMDsKKwkJcnhyaW5nLT5idWZpbmYgICA9IE5VTEw7CiAJfQogCXJ4cmluZy0+bmV4dF90b191c2UgICA9IDA7CiAJYXRvbWljX3NldCgmcnhyaW5nLT5uZXh0X3RvX2NsZWFuLCAwKTsKQEAgLTc0NiwxMiArNzU0LDggQEAKIAkJCQkgICBSWF9SSU5HX0FMTE9DX1NJWkUoam1lLT5yeF9yaW5nX3NpemUpLAogCQkJCSAgICYocnhyaW5nLT5kbWFhbGxvYyksCiAJCQkJICAgR0ZQX0FUT01JQyk7Ci0JaWYgKCFyeHJpbmctPmFsbG9jKSB7Ci0JCXJ4cmluZy0+ZGVzYyA9IE5VTEw7Ci0JCXJ4cmluZy0+ZG1hYWxsb2MgPSAwOwotCQlyeHJpbmctPmRtYSA9IDA7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwlpZiAoIXJ4cmluZy0+YWxsb2MpCisJCWdvdG8gZXJyX3NldF9udWxsOwogCiAJLyoKIAkgKiAxNiBCeXRlcyBhbGlnbgpAQCAtNzYyLDkgKzc2NiwxNiBAQAogCXJ4cmluZy0+bmV4dF90b191c2UJPSAwOwogCWF0b21pY19zZXQoJnJ4cmluZy0+bmV4dF90b19jbGVhbiwgMCk7CiAKKwlyeHJpbmctPmJ1ZmluZgkJPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgam1lX2J1ZmZlcl9pbmZvKSAqCisJCQkJCWptZS0+cnhfcmluZ19zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIShyeHJpbmctPmJ1ZmluZikpKQorCQlnb3RvIGVycl9mcmVlX3J4cmluZzsKKwogCS8qCiAJICogSW5pdGlhbGxpemUgUmVjZWl2ZSBEZXNjcmlwdG9ycwogCSAqLworCW1lbXNldChyeHJpbmctPmJ1ZmluZiwgMCwKKwkJc2l6ZW9mKHN0cnVjdCBqbWVfYnVmZmVyX2luZm8pICogam1lLT5yeF9yaW5nX3NpemUpOwogCWZvciAoaSA9IDAgOyBpIDwgam1lLT5yeF9yaW5nX3NpemUgOyArK2kpIHsKIAkJaWYgKHVubGlrZWx5KGptZV9tYWtlX25ld19yeF9idWYoam1lLCBpKSkpIHsKIAkJCWptZV9mcmVlX3J4X3Jlc291cmNlcyhqbWUpOwpAQCAtNzc1LDYgKzc4NiwxOSBAQAogCX0KIAogCXJldHVybiAwOworCitlcnJfZnJlZV9yeHJpbmc6CisJZG1hX2ZyZWVfY29oZXJlbnQoJihqbWUtPnBkZXYtPmRldiksCisJCQkgIFJYX1JJTkdfQUxMT0NfU0laRShqbWUtPnJ4X3Jpbmdfc2l6ZSksCisJCQkgIHJ4cmluZy0+YWxsb2MsCisJCQkgIHJ4cmluZy0+ZG1hYWxsb2MpOworZXJyX3NldF9udWxsOgorCXJ4cmluZy0+ZGVzYyA9IE5VTEw7CisJcnhyaW5nLT5kbWFhbGxvYyA9IDA7CisJcnhyaW5nLT5kbWEgPSAwOworCXJ4cmluZy0+YnVmaW5mID0gTlVMTDsKKworCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTc5MCw5ICs4MTQsOSBAQAogCS8qCiAJICogU2V0dXAgUlggRE1BIEJhc3MgQWRkcmVzcwogCSAqLwotCWp3cml0ZTMyKGptZSwgSk1FX1JYREJBX0xPLCAoX191NjQpam1lLT5yeHJpbmdbMF0uZG1hICYgMHhGRkZGRkZGRlVMKTsKKwlqd3JpdGUzMihqbWUsIEpNRV9SWERCQV9MTywgKF9fdTY0KShqbWUtPnJ4cmluZ1swXS5kbWEpICYgMHhGRkZGRkZGRlVMKTsKIAlqd3JpdGUzMihqbWUsIEpNRV9SWERCQV9ISSwgKF9fdTY0KShqbWUtPnJ4cmluZ1swXS5kbWEpID4+IDMyKTsKLQlqd3JpdGUzMihqbWUsIEpNRV9SWE5EQSwgKF9fdTY0KWptZS0+cnhyaW5nWzBdLmRtYSAmIDB4RkZGRkZGRkZVTCk7CisJandyaXRlMzIoam1lLCBKTUVfUlhOREEsIChfX3U2NCkoam1lLT5yeHJpbmdbMF0uZG1hKSAmIDB4RkZGRkZGRkZVTCk7CiAKIAkvKgogCSAqIFNldHVwIFJYIERlc2NyaXB0b3IgQ291bnQKQEAgLTg1NiwyNyArODgwLDI3IEBACiAJaWYgKCEoZmxhZ3MgJiAoUlhXQkZMQUdfVENQT04gfCBSWFdCRkxBR19VRFBPTiB8IFJYV0JGTEFHX0lQVjQpKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKHVubGlrZWx5KCEoZmxhZ3MgJiBSWFdCRkxBR19NRikgJiYKLQkoZmxhZ3MgJiBSWFdCRkxBR19UQ1BPTikgJiYgIShmbGFncyAmIFJYV0JGTEFHX1RDUENTKSkpIHsKLQkJbXNnX3J4X2VycihqbWUsICJUQ1AgQ2hlY2tzdW0gZXJyb3IuXG4iKTsKLQkJZ290byBvdXRfc3VtZXJyOworCWlmICh1bmxpa2VseSgoZmxhZ3MgJiAoUlhXQkZMQUdfTUYgfCBSWFdCRkxBR19UQ1BPTiB8IFJYV0JGTEFHX1RDUENTKSkKKwkJCT09IFJYV0JGTEFHX1RDUE9OKSkgeworCQlpZiAoZmxhZ3MgJiBSWFdCRkxBR19JUFY0KQorCQkJbXNnX3J4X2VycihqbWUsICJUQ1AgQ2hlY2tzdW0gZXJyb3JcbiIpOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKHVubGlrZWx5KCEoZmxhZ3MgJiBSWFdCRkxBR19NRikgJiYKLQkoZmxhZ3MgJiBSWFdCRkxBR19VRFBPTikgJiYgIShmbGFncyAmIFJYV0JGTEFHX1VEUENTKSkpIHsKLQkJbXNnX3J4X2VycihqbWUsICJVRFAgQ2hlY2tzdW0gZXJyb3IuXG4iKTsKLQkJZ290byBvdXRfc3VtZXJyOworCWlmICh1bmxpa2VseSgoZmxhZ3MgJiAoUlhXQkZMQUdfTUYgfCBSWFdCRkxBR19VRFBPTiB8IFJYV0JGTEFHX1VEUENTKSkKKwkJCT09IFJYV0JGTEFHX1VEUE9OKSkgeworCQlpZiAoZmxhZ3MgJiBSWFdCRkxBR19JUFY0KQorCQkJbXNnX3J4X2VycihqbWUsICJVRFAgQ2hlY2tzdW0gZXJyb3IuXG4iKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWlmICh1bmxpa2VseSgoZmxhZ3MgJiBSWFdCRkxBR19JUFY0KSAmJiAhKGZsYWdzICYgUlhXQkZMQUdfSVBDUykpKSB7CisJaWYgKHVubGlrZWx5KChmbGFncyAmIChSWFdCRkxBR19JUFY0IHwgUlhXQkZMQUdfSVBDUykpCisJCQk9PSBSWFdCRkxBR19JUFY0KSkgewogCQltc2dfcnhfZXJyKGptZSwgIklQdjQgQ2hlY2tzdW0gZXJyb3IuXG4iKTsKLQkJZ290byBvdXRfc3VtZXJyOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJcmV0dXJuIHRydWU7Ci0KLW91dF9zdW1lcnI6Ci0JcmV0dXJuIGZhbHNlOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTI5Niw3ICsxMzIwLDcgQEAKIHN0YXRpYyB2b2lkCiBqbWVfd2FrZV9xdWV1ZV9pZl9zdG9wcGVkKHN0cnVjdCBqbWVfYWRhcHRlciAqam1lKQogewotCXN0cnVjdCBqbWVfcmluZyAqdHhyaW5nID0gam1lLT50eHJpbmc7CisJc3RydWN0IGptZV9yaW5nICp0eHJpbmcgPSAmKGptZS0+dHhyaW5nWzBdKTsKIAogCXNtcF93bWIoKTsKIAlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZChqbWUtPmRldikgJiYKQEAgLTE0ODMsMTIgKzE1MDcsNyBAQAogCXN0cnVjdCBqbWVfYWRhcHRlciAqam1lID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1MzIgaW50cnN0YXQ7CiAKLQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoam1lLT5wZGV2LAotCQkJCSAgICBqbWUtPnNoYWRvd19kbWEsCi0JCQkJICAgIHNpemVvZih1MzIpICogU0hBRE9XX1JFR19OUiwKLQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQlpbnRyc3RhdCA9IGptZS0+c2hhZG93X3JlZ3NbU0hBRE9XX0lFVkVdOwotCWptZS0+c2hhZG93X3JlZ3NbU0hBRE9XX0lFVkVdID0gMDsKKwlpbnRyc3RhdCA9IGpyZWFkMzIoam1lLCBKTUVfSUVWRSk7CiAKIAlqbWVfaW50cl9tc2koam1lLCBpbnRyc3RhdCk7CiAKQEAgLTE1NjYsNiArMTU4NSw3IEBACiAJam1lX2NsZWFyX3BtKGptZSk7CiAJSk1FX05BUElfRU5BQkxFKGptZSk7CiAKKwl0YXNrbGV0X2VuYWJsZSgmam1lLT5saW5rY2hfdGFzayk7CiAJdGFza2xldF9lbmFibGUoJmptZS0+dHhjbGVhbl90YXNrKTsKIAl0YXNrbGV0X2hpX2VuYWJsZSgmam1lLT5yeGNsZWFuX3Rhc2spOwogCXRhc2tsZXRfaGlfZW5hYmxlKCZqbWUtPnJ4ZW1wdHlfdGFzayk7CkBAIC0xNTc0LDcgKzE1OTQsNiBAQAogCWlmIChyYykKIAkJZ290byBlcnJfb3V0OwogCi0Jam1lX2VuYWJsZV9zaGFkb3coam1lKTsKIAlqbWVfc3RhcnRfaXJxKGptZSk7CiAKIAlpZiAodGVzdF9iaXQoSk1FX0ZMQUdfU1NFVCwgJmptZS0+ZmxhZ3MpKQpAQCAtMTY0MiwxNSArMTY2MSwxNCBAQAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAKIAlqbWVfc3RvcF9pcnEoam1lKTsKLQlqbWVfZGlzYWJsZV9zaGFkb3coam1lKTsKIAlqbWVfZnJlZV9pcnEoam1lKTsKIAogCUpNRV9OQVBJX0RJU0FCTEUoam1lKTsKIAotCXRhc2tsZXRfa2lsbCgmam1lLT5saW5rY2hfdGFzayk7Ci0JdGFza2xldF9raWxsKCZqbWUtPnR4Y2xlYW5fdGFzayk7Ci0JdGFza2xldF9raWxsKCZqbWUtPnJ4Y2xlYW5fdGFzayk7Ci0JdGFza2xldF9raWxsKCZqbWUtPnJ4ZW1wdHlfdGFzayk7CisJdGFza2xldF9kaXNhYmxlKCZqbWUtPmxpbmtjaF90YXNrKTsKKwl0YXNrbGV0X2Rpc2FibGUoJmptZS0+dHhjbGVhbl90YXNrKTsKKwl0YXNrbGV0X2Rpc2FibGUoJmptZS0+cnhjbGVhbl90YXNrKTsKKwl0YXNrbGV0X2Rpc2FibGUoJmptZS0+cnhlbXB0eV90YXNrKTsKIAogCWptZV9yZXNldF9naGNfc3BlZWQoam1lKTsKIAlqbWVfZGlzYWJsZV9yeF9lbmdpbmUoam1lKTsKQEAgLTE2NjgsNyArMTY4Niw3IEBACiBqbWVfYWxsb2NfdHhkZXNjKHN0cnVjdCBqbWVfYWRhcHRlciAqam1lLAogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3Qgam1lX3JpbmcgKnR4cmluZyA9IGptZS0+dHhyaW5nOworCXN0cnVjdCBqbWVfcmluZyAqdHhyaW5nID0gJihqbWUtPnR4cmluZ1swXSk7CiAJaW50IGlkeCwgbnJfYWxsb2MsIG1hc2sgPSBqbWUtPnR4X3JpbmdfbWFzazsKIAogCWlkeCA9IHR4cmluZy0+bmV4dF90b191c2U7CkBAIC0xNzIyLDcgKzE3NDAsNyBAQAogc3RhdGljIHZvaWQKIGptZV9tYXBfdHhfc2tiKHN0cnVjdCBqbWVfYWRhcHRlciAqam1lLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWR4KQogewotCXN0cnVjdCBqbWVfcmluZyAqdHhyaW5nID0gam1lLT50eHJpbmc7CisJc3RydWN0IGptZV9yaW5nICp0eHJpbmcgPSAmKGptZS0+dHhyaW5nWzBdKTsKIAlzdHJ1Y3QgdHhkZXNjICp0eGRlc2MgPSB0eHJpbmctPmRlc2MsICpjdHhkZXNjOwogCXN0cnVjdCBqbWVfYnVmZmVyX2luZm8gKnR4YmkgPSB0eHJpbmctPmJ1ZmluZiwgKmN0eGJpOwogCXU4IGhpZG1hID0gam1lLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9ISUdIRE1BOwpAQCAtMTgzNSw3ICsxODUzLDcgQEAKIHN0YXRpYyBpbnQKIGptZV9maWxsX3R4X2Rlc2Moc3RydWN0IGptZV9hZGFwdGVyICpqbWUsIHN0cnVjdCBza19idWZmICpza2IsIGludCBpZHgpCiB7Ci0Jc3RydWN0IGptZV9yaW5nICp0eHJpbmcgPSBqbWUtPnR4cmluZzsKKwlzdHJ1Y3Qgam1lX3JpbmcgKnR4cmluZyA9ICYoam1lLT50eHJpbmdbMF0pOwogCXN0cnVjdCB0eGRlc2MgKnR4ZGVzYzsKIAlzdHJ1Y3Qgam1lX2J1ZmZlcl9pbmZvICp0eGJpOwogCXU4IGZsYWdzOwpAQCAtMTg4Myw3ICsxOTAxLDcgQEAKIHN0YXRpYyB2b2lkCiBqbWVfc3RvcF9xdWV1ZV9pZl9mdWxsKHN0cnVjdCBqbWVfYWRhcHRlciAqam1lKQogewotCXN0cnVjdCBqbWVfcmluZyAqdHhyaW5nID0gam1lLT50eHJpbmc7CisJc3RydWN0IGptZV9yaW5nICp0eHJpbmcgPSAmKGptZS0+dHhyaW5nWzBdKTsKIAlzdHJ1Y3Qgam1lX2J1ZmZlcl9pbmZvICp0eGJpID0gdHhyaW5nLT5idWZpbmY7CiAJaW50IGlkeCA9IGF0b21pY19yZWFkKCZ0eHJpbmctPm5leHRfdG9fY2xlYW4pOwogCkBAIC0xOTEzLDcgKzE5MzEsNyBAQAogICogVGhpcyBmdW5jdGlvbiBpcyBhbHJlYWR5IHByb3RlY3RlZCBieSBuZXRpZl90eF9sb2NrKCkKICAqLwogCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIGptZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGptZV9hZGFwdGVyICpqbWUgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMjcyNSwxNCArMjc0Myw2IEBACiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OwogCX0KLQlqbWUtPnNoYWRvd19yZWdzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwKLQkJCQkJCXNpemVvZih1MzIpICogU0hBRE9XX1JFR19OUiwKLQkJCQkJCSYoam1lLT5zaGFkb3dfZG1hKSk7Ci0JaWYgKCEoam1lLT5zaGFkb3dfcmVncykpIHsKLQkJamVwcmludGsocGRldiwgIkFsbG9jYXRpbmcgc2hhZG93IHJlZ2lzdGVyIG1hcHBpbmcgZXJyb3IuXG4iKTsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9vdXRfdW5tYXA7Ci0JfQogCiAJaWYgKG5vX3BzZXVkb2hwKSB7CiAJCWFwbWMgPSBqcmVhZDMyKGptZSwgSk1FX0FQTUMpICYgfkpNRV9BUE1DX1BTRVVET19IUF9FTjsKQEAgLTI3NjgsNiArMjc3OCw3IEBACiAJdGFza2xldF9pbml0KCZqbWUtPnJ4ZW1wdHlfdGFzaywKIAkJICAgICAmam1lX3J4X2VtcHR5X3Rhc2tsZXQsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGptZSk7CisJdGFza2xldF9kaXNhYmxlX25vc3luYygmam1lLT5saW5rY2hfdGFzayk7CiAJdGFza2xldF9kaXNhYmxlX25vc3luYygmam1lLT50eGNsZWFuX3Rhc2spOwogCXRhc2tsZXRfZGlzYWJsZV9ub3N5bmMoJmptZS0+cnhjbGVhbl90YXNrKTsKIAl0YXNrbGV0X2Rpc2FibGVfbm9zeW5jKCZqbWUtPnJ4ZW1wdHlfdGFzayk7CkBAIC0yODE3LDcgKzI4MjgsNyBAQAogCQlpZiAoIWptZS0+bWlpX2lmLnBoeV9pZCkgewogCQkJcmMgPSAtRUlPOwogCQkJamVwcmludGsocGRldiwgIkNhbiBub3QgZmluZCBwaHlfaWQuXG4iKTsKLQkJCSBnb3RvIGVycl9vdXRfZnJlZV9zaGFkb3c7CisJCQkgZ290byBlcnJfb3V0X3VubWFwOwogCQl9CiAKIAkJam1lLT5yZWdfZ2hjIHw9IEdIQ19MSU5LX1BPTEw7CkBAIC0yODQ2LDcgKzI4NTcsNyBAQAogCWlmIChyYykgewogCQlqZXByaW50ayhwZGV2LAogCQkJIlJlbG9hZCBlZXByb20gZm9yIHJlYWRpbmcgTUFDIEFkZHJlc3MgZXJyb3IuXG4iKTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfc2hhZG93OworCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJfQogCWptZV9sb2FkX21hY2FkZHIobmV0ZGV2KTsKIApAQCAtMjg2Miw3ICsyODczLDcgQEAKIAlyYyA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCWlmIChyYykgewogCQlqZXByaW50ayhwZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UuXG4iKTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfc2hhZG93OworCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJfQogCiAJbXNnX3Byb2JlKGptZSwgIiVzJXMgdmVyOiV4IHJldjoleCBtYWNhZGRyOiVwTVxuIiwKQEAgLTI4NzYsMTEgKzI4ODcsNiBAQAogCiAJcmV0dXJuIDA7CiAKLWVycl9vdXRfZnJlZV9zaGFkb3c6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LAotCQkJICAgIHNpemVvZih1MzIpICogU0hBRE9XX1JFR19OUiwKLQkJCSAgICBqbWUtPnNoYWRvd19yZWdzLAotCQkJICAgIGptZS0+c2hhZG93X2RtYSk7CiBlcnJfb3V0X3VubWFwOgogCWlvdW5tYXAoam1lLT5yZWdzKTsKIGVycl9vdXRfZnJlZV9uZXRkZXY6CkBAIC0yOTAxLDEwICsyOTA3LDYgQEAKIAlzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwotCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwKLQkJCSAgICBzaXplb2YodTMyKSAqIFNIQURPV19SRUdfTlIsCi0JCQkgICAgam1lLT5zaGFkb3dfcmVncywKLQkJCSAgICBqbWUtPnNoYWRvd19kbWEpOwogCWlvdW5tYXAoam1lLT5yZWdzKTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKQEAgLTI5MzAsOCArMjkzMiw2IEBACiAJdGFza2xldF9kaXNhYmxlKCZqbWUtPnJ4Y2xlYW5fdGFzayk7CiAJdGFza2xldF9kaXNhYmxlKCZqbWUtPnJ4ZW1wdHlfdGFzayk7CiAKLQlqbWVfZGlzYWJsZV9zaGFkb3coam1lKTsKLQogCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKIAkJaWYgKHRlc3RfYml0KEpNRV9GTEFHX1BPTEwsICZqbWUtPmZsYWdzKSkKIAkJCWptZV9wb2xsaW5nX21vZGUoam1lKTsKQEAgLTI5ODMsNyArMjk4Myw2IEBACiAJZWxzZQogCQlqbWVfcmVzZXRfcGh5X3Byb2Nlc3NvcihqbWUpOwogCi0Jam1lX2VuYWJsZV9zaGFkb3coam1lKTsKIAlqbWVfc3RhcnRfaXJxKGptZSk7CiAJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qbWUuaCBiL2RyaXZlcnMvbmV0L2ptZS5oCmluZGV4IDA5OTZhMDYuLjI1MWFiZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ptZS5oCisrKyBiL2RyaXZlcnMvbmV0L2ptZS5oCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIF9fSk1FX0hfSU5DTFVERURfXwogCiAjZGVmaW5lIERSVl9OQU1FCSJqbWUiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAuNCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMC41IgogI2RlZmluZSBQRlgJCURSVl9OQU1FICI6ICIKIAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjUwCTB4MDI1MApAQCAtMjQ3LDcgKzI0Nyw3IEBACiB9OwogCiAjZGVmaW5lIFRYREVTQ19NU1NfU0hJRlQJMgotZW51bSBqbWVfcnhkZXNjd2JfZmxhZ3NfYml0cyB7CitlbnVtIGptZV90eHdiZGVzY19mbGFnc19iaXRzIHsKIAlUWFdCRkxBR19PV04JPSAweDgwLAogCVRYV0JGTEFHX0lOVAk9IDB4NDAsCiAJVFhXQkZMQUdfVE1PVVQJPSAweDIwLApAQCAtMzcyLDcgKzM3Miw2IEBACiAvKgogICogVGhlIHN0cnVjdHVyZSBob2xkaW5nIGJ1ZmZlciBpbmZvcm1hdGlvbiBhbmQgcmluZyBkZXNjcmlwdG9ycyBhbGwgdG9nZXRoZXIuCiAgKi8KLSNkZWZpbmUgTUFYX1JJTkdfREVTQ19OUgkxMDI0CiBzdHJ1Y3Qgam1lX3JpbmcgewogCXZvaWQgKmFsbG9jOwkJLyogcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5ICovCiAJdm9pZCAqZGVzYzsJCS8qIHBvaW50ZXIgdG8gcmluZyBtZW1vcnkgICovCkBAIC0zODAsNyArMzc5LDcgQEAKIAlkbWFfYWRkcl90IGRtYTsJCS8qIHBoeXMgYWRkcmVzcyBmb3IgcmluZyBkbWEgKi8KIAogCS8qIEJ1ZmZlciBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvciAqLwotCXN0cnVjdCBqbWVfYnVmZmVyX2luZm8gYnVmaW5mW01BWF9SSU5HX0RFU0NfTlJdOworCXN0cnVjdCBqbWVfYnVmZmVyX2luZm8gKmJ1ZmluZjsKIAogCWludCBuZXh0X3RvX3VzZTsKIAlhdG9taWNfdCBuZXh0X3RvX2NsZWFuOwpAQCAtNDExLDEzICs0MTAsMTAgQEAKIC8qCiAgKiBKbWFjIEFkYXB0ZXIgUHJpdmF0ZSBkYXRhCiAgKi8KLSNkZWZpbmUgU0hBRE9XX1JFR19OUiA4CiBzdHJ1Y3Qgam1lX2FkYXB0ZXIgewogCXN0cnVjdCBwY2lfZGV2ICAgICAgICAgICpwZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICAgICAgICpkZXY7CiAJdm9pZCBfX2lvbWVtICAgICAgICAgICAgKnJlZ3M7Ci0JZG1hX2FkZHJfdAkJc2hhZG93X2RtYTsKLQl1MzIJCQkqc2hhZG93X3JlZ3M7CiAJc3RydWN0IG1paV9pZl9pbmZvCW1paV9pZjsKIAlzdHJ1Y3Qgam1lX3JpbmcJCXJ4cmluZ1tSWF9SSU5HX05SXTsKIAlzdHJ1Y3Qgam1lX3JpbmcJCXR4cmluZ1tUWF9SSU5HX05SXTsKQEAgLTQ2NCwxMCArNDYwLDYgQEAKIAlERUNMQVJFX05FVF9ERVZJQ0VfU1RBVFMKIH07CiAKLWVudW0gc2hhZG93X3JlZ192YWwgewotCVNIQURPV19JRVZFID0gMCwKLX07Ci0KIGVudW0gam1lX2ZsYWdzX2JpdHMgewogCUpNRV9GTEFHX01TSQkJPSAxLAogCUpNRV9GTEFHX1NTRVQJCT0gMiwKQEAgLTExMDQsMTMgKzEwOTYsNiBAQAogfTsKIAogLyoKLSAqIFNoYWRvdyBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIgYml0cwotICovCi1lbnVtIGptZV9zaGFkb3dfYmFzZV9hZGRyZXNzX2JpdHMgewotCVNIQkFfUE9TVEVOCT0gMHgxLAotfTsKLQotLyoKICAqIEFnZ3Jlc3NpdmUgUG93ZXIgTW9kZSBDb250cm9sCiAgKi8KIGVudW0gam1lX2FwbWNfYml0cyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rb3JpbmEuYyBiL2RyaXZlcnMvbmV0L2tvcmluYS5jCmluZGV4IGI0Y2Y2MDIuLjAzMTk5ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tvcmluYS5jCisrKyBiL2RyaXZlcnMvbmV0L2tvcmluYS5jCkBAIC0zMzgsNyArMzM4LDcgQEAKIAkJbmFwaV9zY2hlZHVsZSgmbHAtPm5hcGkpOwogCiAJCWlmIChkbWFzICYgRE1BX1NUQVRfRVJSKQotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIlczogRE1BIGVycm9yXG4iLCBkZXYtPm5hbWUpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRE1BIGVycm9yXG4iLCBkZXYtPm5hbWUpOwogCiAJCXJldHZhbCA9IElSUV9IQU5ETEVEOwogCX0gZWxzZQpAQCAtNTU1LDcgKzU1NSw3IEBACiAJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAogCQkJLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIlczogc3BsaXQgdHggaWdub3JlZFxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNwbGl0IHR4IGlnbm9yZWRcbiIsCiAJCQkJCQkJZGV2LT5uYW1lKTsKIAkJfSBlbHNlIGlmIChkZXZjcyAmIEVUSF9UWF9UT0spIHsKIAkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwpAQCAtNjQxLDcgKzY0MSw3IEBACiAJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJfQogCQlpZiAoZG1hcyAmIERNQV9TVEFUX0VSUikKLQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IERNQSBlcnJvclxuIiwgZGV2LT5uYW1lKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IERNQSBlcnJvclxuIiwgZGV2LT5uYW1lKTsKIAogCQlyZXR2YWwgPSBJUlFfSEFORExFRDsKIAl9IGVsc2UKQEAgLTc0MywxNCArNzQzLDE0IEBACiAJcmV0dXJuIG1paV9saW5rX29rKCZscC0+bWlpX2lmKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gICAgICAgICAgICA9IG5ldGRldl9nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzICAgICAgICAgICA9IG5ldGRldl9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyAgICAgICAgICAgPSBuZXRkZXZfc2V0X3NldHRpbmdzLAogCS5nZXRfbGluayAgICAgICAgICAgICAgID0gbmV0ZGV2X2dldF9saW5rLAogfTsKIAotc3RhdGljIHZvaWQga29yaW5hX2FsbG9jX3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQga29yaW5hX2FsbG9jX3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qga29yaW5hX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtNzcxLDcgKzc3MSw3IEBACiAJZm9yIChpID0gMDsgaSA8IEtPUklOQV9OVU1fUkRTOyBpKyspIHsKIAkJc2tiID0gZGV2X2FsbG9jX3NrYihLT1JJTkFfUkJTSVpFICsgMik7CiAJCWlmICghc2tiKQotCQkJYnJlYWs7CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKIAkJbHAtPnJ4X3NrYltpXSA9IHNrYjsKIAkJbHAtPnJkX3JpbmdbaV0uY29udHJvbCA9IERNQV9ERVNDX0lPRCB8CkBAIC03OTAsNiArNzkwLDggQEAKIAlscC0+cnhfY2hhaW5faGVhZCA9IDA7CiAJbHAtPnJ4X2NoYWluX3RhaWwgPSAwOwogCWxwLT5yeF9jaGFpbl9zdGF0dXMgPSBkZXNjX2VtcHR5OworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGtvcmluYV9mcmVlX3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTgzMiw3ICs4MzQsMTEgQEAKIAl3cml0ZWwoRVRIX0lOVF9GQ19FTiwgJmxwLT5ldGhfcmVncy0+ZXRoaW50ZmMpOwogCiAJLyogQWxsb2NhdGUgcmluZ3MgKi8KLQlrb3JpbmFfYWxsb2NfcmluZyhkZXYpOworCWlmIChrb3JpbmFfYWxsb2NfcmluZyhkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRlc2NyaXB0b3IgYWxsb2NhdGlvbiBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CisJCWtvcmluYV9mcmVlX3JpbmcoZGV2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJd3JpdGVsKDAsICZscC0+cnhfZG1hX3JlZ3MtPmRtYXMpOwogCS8qIFN0YXJ0IFJ4IERNQSAqLwpAQCAtOTE3LDggKzkyMyw3IEBACiAKIAlyZXQgPSBrb3JpbmFfaW5pdChkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IGNhbm5vdCByZXN0YXJ0IGRldmljZVxuIiwKLQkJCQkJCQkJZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHJlc3RhcnQgZGV2aWNlXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlrb3JpbmFfbXVsdGljYXN0X2xpc3QoZGV2KTsKQEAgLTEwMDUsNyArMTAxMCw3IEBACiAJLyogSW5pdGlhbGl6ZSAqLwogCXJldCA9IGtvcmluYV9pbml0KGRldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIlczogY2Fubm90IG9wZW4gZGV2aWNlXG4iLCBkZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3Qgb3BlbiBkZXZpY2VcbiIsIGRldi0+bmFtZSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTAxNSwxNCArMTAyMCwxNCBAQAogCXJldCA9IHJlcXVlc3RfaXJxKGxwLT5yeF9pcnEsICZrb3JpbmFfcnhfZG1hX2ludGVycnVwdCwKIAkJCUlSUUZfRElTQUJMRUQsICJLb3JpbmEgZXRoZXJuZXQgUngiLCBkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IHVuYWJsZSB0byBnZXQgUnggRE1BIElSUSAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGdldCBSeCBETUEgSVJRICVkXG4iLAogCQkgICAgZGV2LT5uYW1lLCBscC0+cnhfaXJxKTsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAJcmV0ID0gcmVxdWVzdF9pcnEobHAtPnR4X2lycSwgJmtvcmluYV90eF9kbWFfaW50ZXJydXB0LAogCQkJSVJRRl9ESVNBQkxFRCwgIktvcmluYSBldGhlcm5ldCBUeCIsIGRldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIlczogdW5hYmxlIHRvIGdldCBUeCBETUEgSVJRICVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IFR4IERNQSBJUlEgJWRcbiIsCiAJCSAgICBkZXYtPm5hbWUsIGxwLT50eF9pcnEpOwogCQlnb3RvIGVycl9mcmVlX3J4X2lycTsKIAl9CkBAIC0xMDMxLDcgKzEwMzYsNyBAQAogCXJldCA9IHJlcXVlc3RfaXJxKGxwLT5vdnJfaXJxLCAma29yaW5hX292cl9pbnRlcnJ1cHQsCiAJCQlJUlFGX0RJU0FCTEVELCAiRXRoZXJuZXQgT3ZlcmZsb3ciLCBkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSIlczogdW5hYmxlIHRvIGdldCBPVlIgSVJRICVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IE9WUiBJUlEgJWRcbiIsCiAJCSAgICBkZXYtPm5hbWUsIGxwLT5vdnJfaXJxKTsKIAkJZ290byBlcnJfZnJlZV90eF9pcnE7CiAJfQpAQCAtMTA0MCw3ICsxMDQ1LDcgQEAKIAlyZXQgPSByZXF1ZXN0X2lycShscC0+dW5kX2lycSwgJmtvcmluYV91bmRfaW50ZXJydXB0LAogCQkJSVJRRl9ESVNBQkxFRCwgIkV0aGVybmV0IFVuZGVyZmxvdyIsIGRldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIlczogdW5hYmxlIHRvIGdldCBVTkQgSVJRICVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IFVORCBJUlEgJWRcbiIsCiAJCSAgICBkZXYtPm5hbWUsIGxwLT51bmRfaXJxKTsKIAkJZ290byBlcnJfZnJlZV9vdnJfaXJxOwogCX0KQEAgLTExMzcsNyArMTE0Miw3IEBACiAJZGV2LT5iYXNlX2FkZHIgPSByLT5zdGFydDsKIAlscC0+ZXRoX3JlZ3MgPSBpb3JlbWFwX25vY2FjaGUoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0KTsKIAlpZiAoIWxwLT5ldGhfcmVncykgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgImNhbm5vdCByZW1hcCByZWdpc3RlcnNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogY2Fubm90IHJlbWFwIHJlZ2lzdGVyc1xuIik7CiAJCXJjID0gLUVOWElPOwogCQlnb3RvIHByb2JlX2Vycl9vdXQ7CiAJfQpAQCAtMTE0NSw3ICsxMTUwLDcgQEAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImtvcmluYV9kbWFfcngiKTsKIAlscC0+cnhfZG1hX3JlZ3MgPSBpb3JlbWFwX25vY2FjaGUoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0KTsKIAlpZiAoIWxwLT5yeF9kbWFfcmVncykgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgImNhbm5vdCByZW1hcCBSeCBETUEgcmVnaXN0ZXJzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGNhbm5vdCByZW1hcCBSeCBETUEgcmVnaXN0ZXJzXG4iKTsKIAkJcmMgPSAtRU5YSU87CiAJCWdvdG8gcHJvYmVfZXJyX2RtYV9yeDsKIAl9CkBAIC0xMTUzLDE0ICsxMTU4LDE0IEBACiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJrb3JpbmFfZG1hX3R4Iik7CiAJbHAtPnR4X2RtYV9yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCk7CiAJaWYgKCFscC0+dHhfZG1hX3JlZ3MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICJjYW5ub3QgcmVtYXAgVHggRE1BIHJlZ2lzdGVyc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBjYW5ub3QgcmVtYXAgVHggRE1BIHJlZ2lzdGVyc1xuIik7CiAJCXJjID0gLUVOWElPOwogCQlnb3RvIHByb2JlX2Vycl9kbWFfdHg7CiAJfQogCiAJbHAtPnRkX3JpbmcgPSBrbWFsbG9jKFREX1JJTkdfU0laRSArIFJEX1JJTkdfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFscC0+dGRfcmluZykgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgImNhbm5vdCBhbGxvY2F0ZSBkZXNjcmlwdG9yc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBjYW5ub3QgYWxsb2NhdGUgZGVzY3JpcHRvcnNcbiIpOwogCQlyYyA9IC1FTlhJTzsKIAkJZ290byBwcm9iZV9lcnJfdGRfcmluZzsKIAl9CkBAIC0xMTkzLDEwICsxMTk4LDEzIEBACiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmMgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkJIjogY2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UgJWRcbiIsIHJjKTsKKwkJCSI6IGNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlOiAlZFxuIiwgcmMpOwogCQlnb3RvIHByb2JlX2Vycl9yZWdpc3RlcjsKIAl9CiAJc2V0dXBfdGltZXIoJmxwLT5tZWRpYV9jaGVja190aW1lciwga29yaW5hX3BvbGxfbWVkaWEsICh1bnNpZ25lZCBsb25nKSBkZXYpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgRFJWX05BTUUgIi0iIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiXG4iLAorCQkJZGV2LT5uYW1lKTsKIG91dDoKIAlyZXR1cm4gcmM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2tzODg0Mi5jIGIvZHJpdmVycy9uZXQva3M4ODQyLmMKaW5kZXggMzliMGFlYS4uOTllOTU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva3M4ODQyLmMKKysrIGIvZHJpdmVycy9uZXQva3M4ODQyLmMKQEAgLTU1MSw3ICs1NTEsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGtzODg0Ml94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qga3M4ODQyX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qga3M4ODQyX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtNjE4LDcgKzYxOSw3IEBACiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMga3M4ODQyX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBrczg4NDJfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rczg4NTEuYyBiL2RyaXZlcnMvbmV0L2tzODg1MS5jCmluZGV4IDlhMWRlYTYuLjU0N2FjN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tzODg1MS5jCisrKyBiL2RyaXZlcnMvbmV0L2tzODg1MS5jCkBAIC04NjgsMTEgKzg2OCwxMiBAQAogICogYW5kIHNlY29uZGx5IHNvIHdlIGNhbiByb3VuZCB1cCBtb3JlIHRoYW4gb25lIHBhY2tldCB0byB0cmFuc21pdCB3aGljaAogICogbWVhbnMgd2UgY2FuIHRyeSBhbmQgYXZvaWQgZ2VuZXJhdGluZyB0b28gbWFueSB0cmFuc21pdCBkb25lIGludGVycnVwdHMuCiAgKi8KLXN0YXRpYyBpbnQga3M4ODUxX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBrczg4NTFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qga3M4ODUxX25ldCAqa3MgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIG5lZWRlZCA9IGNhbGNfdHhsZW4oc2tiLT5sZW4pOwotCWludCByZXQgPSBORVRERVZfVFhfT0s7CisJbmV0ZGV2X3R4X3QgcmV0ID0gTkVUREVWX1RYX09LOwogCiAJaWYgKG5ldGlmX21zZ190eF9xdWV1ZWQoa3MpKQogCQlrc19kYmcoa3MsICIlczogc2tiICVwLCAlZEAlcFxuIiwgX19mdW5jX18sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sYW5jZS5jIGIvZHJpdmVycy9uZXQvbGFuY2UuYwppbmRleCA2MzM4MDhkLi5kY2RhMzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L2xhbmNlLmMKQEAgLTMwMCw3ICszMDAsOCBAQAogCiBzdGF0aWMgaW50IGxhbmNlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBsYW5jZV9pbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZ2ZwX3QgbW9kZSk7Ci1zdGF0aWMgaW50IGxhbmNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbGFuY2Vfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbGFuY2Vfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgbGFuY2VfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgaW50IGxhbmNlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtOTQ5LDcgKzk1MCw4IEBACiB9CiAKIAotc3RhdGljIGludCBsYW5jZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbGFuY2Vfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBsYW5jZV9wcml2YXRlICpscCA9IGRldi0+bWxfcHJpdjsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC0xMDE2LDcgKzEwMTgsNyBAQAogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmRldmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBUaGUgTEFOQ0UgaW50ZXJydXB0IGhhbmRsZXIuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9saWI4MjU5Ni5jIGIvZHJpdmVycy9uZXQvbGliODI1OTYuYwppbmRleCAwNzBmYTQ1Li41MWUxMWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9saWI4MjU5Ni5jCisrKyBiL2RyaXZlcnMvbmV0L2xpYjgyNTk2LmMKQEAgLTk4Myw3ICs5ODMsNyBAQAogCiAJaWYgKGxlbmd0aCA8IEVUSF9aTEVOKSB7CiAJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCWxlbmd0aCA9IEVUSF9aTEVOOwogCX0KIApAQCAtMTAyOCw3ICsxMDI4LDcgQEAKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9ldGgodW5zaWduZWQgY2hhciAqYWRkLCBjaGFyICpzdHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9saWI4MzkwLmMgYi9kcml2ZXJzL25ldC9saWI4MzkwLmMKaW5kZXggZjI4YzIzMy4uMjU2MTE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbGliODM5MC5jCisrKyBiL2RyaXZlcnMvbmV0L2xpYjgzOTAuYwpAQCAtMjk5LDcgKzI5OSw4IEBACiAgKiBTZW5kcyBhIHBhY2tldCB0byBhbiA4MzkwIG5ldHdvcmsgZGV2aWNlLgogICovCiAKLXN0YXRpYyBpbnQgX19laV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgX19laV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKIAlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CkBAIC00MTQsNyArNDE1LDcgQEAKIAlkZXZfa2ZyZWVfc2tiIChza2IpOwogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2VuZF9sZW5ndGg7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xsX3RlbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2xsX3RlbWFjX21haW4uYwppbmRleCA5NmU3MjQ4Li5kYThkMGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9sbF90ZW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jCkBAIC01OTEsNyArNTkxLDcgQEAKIAkvKiBLaWNrIG9mZiB0aGUgdHJhbnNmZXIgKi8KIAl0ZW1hY19kbWFfb3V0MzIobHAsIFRYX1RBSUxERVNDX1BUUiwgdGFpbF9wKTsgLyogRE1BIHN0YXJ0ICovCiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCmluZGV4IGRhNDcyYzYuLjFiYzY1NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwpAQCAtNjksNyArNjksOCBAQAogICogVGhlIGhpZ2hlciBsZXZlbHMgdGFrZSBjYXJlIG9mIG1ha2luZyB0aGlzIG5vbi1yZWVudHJhbnQgKGl0J3MKICAqIGNhbGxlZCB3aXRoIGJoJ3MgZGlzYWJsZWQpLgogICovCi1zdGF0aWMgaW50IGxvb3BiYWNrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBsb29wYmFja194bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBjcHVfbHN0YXRzICpwY3B1X2xzdGF0cywgKmxiX3N0YXRzOwogCWludCBsZW47CkBAIC04OSw3ICs5MCw3IEBACiAJfSBlbHNlCiAJCWxiX3N0YXRzLT5kcm9wcysrOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsb29wYmFja19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xwNDg2ZS5jIGIvZHJpdmVycy9uZXQvbHA0ODZlLmMKaW5kZXggZDQ0YmRkYi4uY2MzZWQ5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbHA0ODZlLmMKKysrIGIvZHJpdmVycy9uZXQvbHA0ODZlLmMKQEAgLTM3Nyw3ICszNzcsNyBAQAogfTsKIAogc3RhdGljIGludCBpNTk2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGk1OTZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBpNTk2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgaTU5Nl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBpbnQgaTU5Nl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGk1OTZfYWRkX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaTU5Nl9jbWQgKmNtZCk7CkBAIC04NjMsNyArODYzLDcgQEAKIAlyZXR1cm4gMDsJCQkvKiBBbHdheXMgc3VjY2VlZCAqLwogfQogCi1zdGF0aWMgaW50IGk1OTZfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeworc3RhdGljIG5ldGRldl90eF90IGk1OTZfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewogCXN0cnVjdCB0eF9jbWQgKnR4X2NtZDsKIAlzaG9ydCBsZW5ndGg7CiAKQEAgLTg3MSw3ICs4NzEsNyBAQAogCiAJaWYgKGxlbmd0aCA8IEVUSF9aTEVOKSB7CiAJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCWxlbmd0aCA9IEVUSF9aTEVOOwogCX0KIApAQCAtOTA2LDcgKzkwNiw3IEBACiAJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWM4OXgwLmMgYi9kcml2ZXJzL25ldC9tYWM4OXgwLmMKaW5kZXggZGFiNDUzMy4uMTQ5ZTBlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjODl4MC5jCisrKyBiL2RyaXZlcnMvbmV0L21hYzg5eDAuYwpAQCAtNDExLDcgKzQxMSw3IEBACiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFRoZSB0eXBpY2FsIHdvcmtsb2FkIG9mIHRoZSBkcml2ZXI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNiLmMgYi9kcml2ZXJzL25ldC9tYWNiLmMKaW5kZXggZTM2MDFjZjMuLmZiNjViNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY2IuYworKysgYi9kcml2ZXJzL25ldC9tYWNiLmMKQEAgLTY3OSw3ICs2NzksNyBAQAogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBtYWNiX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3QgbWFjYiAqYnApCkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCXN0cmNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoJmJwLT5wZGV2LT5kZXYpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBtYWNiX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYWNiX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gbWFjYl9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSBtYWNiX3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JCT0gbWFjYl9nZXRfZHJ2aW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2UuYyBiL2RyaXZlcnMvbmV0L21hY2UuYwppbmRleCAxNDI3NzU1Li43ZDc1NzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjZS5jCkBAIC01ODEsNyArNTgxLDcgQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmxvY2ssIGZsYWdzKTsKIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIG1hY2Vfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCmluZGV4IDk5ZWVkOWYuLjNhYWJmZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYworKysgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2bGFuLCBuLCAmcG9ydC0+dmxhbl9oYXNoW2FkZHJbNV1dLCBobGlzdCkgewotCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcih2bGFuLT5kZXYtPmRldl9hZGRyLCBhZGRyKSkKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKHZsYW4tPmRldi0+ZGV2X2FkZHIsIGFkZHIpKQogCQkJcmV0dXJuIHZsYW47CiAJfQogCXJldHVybiBOVUxMOwpAQCAtOTIsNyArOTIsNyBAQAogCSAqIGN1cnJlbnRseSBpbiB1c2UgYnkgdGhlIHVuZGVybHlpbmcgZGV2aWNlIG9yCiAJICogYW5vdGhlciBtYWN2bGFuLgogCSAqLwotCWlmIChtZW1jbXAocG9ydC0+ZGV2LT5kZXZfYWRkciwgYWRkciwgRVRIX0FMRU4pID09IDApCisJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKHBvcnQtPmRldi0+ZGV2X2FkZHIsIGFkZHIpKQogCQlyZXR1cm4gMTsKIAogCWlmIChtYWN2bGFuX2hhc2hfbG9va3VwKHBvcnQsIGFkZHIpKQpAQCAtMTMwLDcgKzEzMCw3IEBACiAJCQlkZXYtPnN0YXRzLm11bHRpY2FzdCsrOwogCiAJCQluc2tiLT5kZXYgPSBkZXY7Ci0JCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihldGgtPmhfZGVzdCwgZGV2LT5icm9hZGNhc3QpKQorCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKGV0aC0+aF9kZXN0LCBkZXYtPmJyb2FkY2FzdCkpCiAJCQkJbnNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfQlJPQURDQVNUOwogCQkJZWxzZQogCQkJCW5za2ItPnBrdF90eXBlID0gUEFDS0VUX01VTFRJQ0FTVDsKQEAgLTE4NCw4ICsxODQsMTEgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBtYWN2bGFuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBtYWN2bGFuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCWludCBpID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpOwogCWNvbnN0IHN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuOwogCWludCByZXQ7CkBAIC0xOTQsMTIgKzE5NywxMSBAQAogCXJldCA9IGRldl9xdWV1ZV94bWl0KHNrYik7CiAKIAlpZiAobGlrZWx5KHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSkgewotCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47Ci0JfSBlbHNlIHsKLQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwotCX0KKwkJdHhxLT50eF9wYWNrZXRzKys7CisJCXR4cS0+dHhfYnl0ZXMgKz0gbGVuOworCX0gZWxzZQorCQl0eHEtPnR4X2Ryb3BwZWQrKzsKKwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTQ4Myw2ICs0ODUsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtYWN2bGFuX2dldF90eF9xdWV1ZXMoc3RydWN0IG5ldCAqbmV0LAorCQkJCSBzdHJ1Y3QgbmxhdHRyICp0YltdLAorCQkJCSB1bnNpZ25lZCBpbnQgKm51bV90eF9xdWV1ZXMsCisJCQkJIHVuc2lnbmVkIGludCAqcmVhbF9udW1fdHhfcXVldWVzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldjsKKworCWlmICghdGJbSUZMQV9MSU5LXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWFsX2RldiA9IF9fZGV2X2dldF9ieV9pbmRleChuZXQsIG5sYV9nZXRfdTMyKHRiW0lGTEFfTElOS10pKTsKKwlpZiAoIXJlYWxfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCSpudW1fdHhfcXVldWVzICAgICAgPSByZWFsX2Rldi0+bnVtX3R4X3F1ZXVlczsKKwkqcmVhbF9udW1fdHhfcXVldWVzID0gcmVhbF9kZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBtYWN2bGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKIHsKQEAgLTU0OSw2ICs1NzAsNyBAQAogc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIG1hY3ZsYW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHsKIAkua2luZAkJPSAibWFjdmxhbiIsCiAJLnByaXZfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgbWFjdmxhbl9kZXYpLAorCS5nZXRfdHhfcXVldWVzICA9IG1hY3ZsYW5fZ2V0X3R4X3F1ZXVlcywKIAkuc2V0dXAJCT0gbWFjdmxhbl9zZXR1cCwKIAkudmFsaWRhdGUJPSBtYWN2bGFuX3ZhbGlkYXRlLAogCS5uZXdsaW5rCT0gbWFjdmxhbl9uZXdsaW5rLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby5jCmluZGV4IDY4NTFiZGIuLjIxZjg3NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21kaW8uYworKysgYi9kcml2ZXJzL25ldC9tZGlvLmMKQEAgLTEwOSwxMyArMTA5LDIwIEBACiAJCWlmIChtbWRfbWFzayAmICgxIDw8IGRldmFkKSkgewogCQkJbW1kX21hc2sgJj0gfigxIDw8IGRldmFkKTsKIAotCQkJLyogUmVhZCB0d2ljZSBiZWNhdXNlIGxpbmsgc3RhdGUgaXMgbGF0Y2hlZCBhbmQgYQotCQkJICogcmVhZCBtb3ZlcyB0aGUgY3VycmVudCBzdGF0ZSBpbnRvIHRoZSByZWdpc3RlciAqLworCQkJLyogUmVzZXQgdGhlIGxhdGNoZWQgc3RhdHVzIGFuZCBmYXVsdCBmbGFncyAqLwogCQkJbWRpby0+bWRpb19yZWFkKG1kaW8tPmRldiwgbWRpby0+cHJ0YWQsCiAJCQkJCWRldmFkLCBNRElPX1NUQVQxKTsKKwkJCWlmIChkZXZhZCA9PSBNRElPX01NRF9QTUFQTUQgfHwgZGV2YWQgPT0gTURJT19NTURfUENTIHx8CisJCQkgICAgZGV2YWQgPT0gTURJT19NTURfUEhZWFMgfHwgZGV2YWQgPT0gTURJT19NTURfRFRFWFMpCisJCQkJbWRpby0+bWRpb19yZWFkKG1kaW8tPmRldiwgbWRpby0+cHJ0YWQsCisJCQkJCQlkZXZhZCwgTURJT19TVEFUMik7CisKKwkJCS8qIENoZWNrIHRoZSBjdXJyZW50IHN0YXR1cyBhbmQgZmF1bHQgZmxhZ3MgKi8KIAkJCXJlZyA9IG1kaW8tPm1kaW9fcmVhZChtZGlvLT5kZXYsIG1kaW8tPnBydGFkLAogCQkJCQkgICAgICBkZXZhZCwgTURJT19TVEFUMSk7Ci0JCQlpZiAocmVnIDwgMCB8fCAhKHJlZyAmIE1ESU9fU1RBVDFfTFNUQVRVUykpCisJCQlpZiAocmVnIDwgMCB8fAorCQkJICAgIChyZWcgJiAoTURJT19TVEFUMV9GQVVMVCB8IE1ESU9fU1RBVDFfTFNUQVRVUykpICE9CisJCQkgICAgTURJT19TVEFUMV9MU1RBVFVTKQogCQkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0KQEAgLTM3MywxMCArMzgwLDcgQEAKIAkJY21kID0gU0lPQ0dNSUlSRUc7CiAJCWJyZWFrOwogCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JCWJyZWFrOwogCWNhc2UgU0lPQ1NNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21ldGguYyBiL2RyaXZlcnMvbmV0L21ldGguYwppbmRleCA1ZDA0ZDk0Li45MmNlYjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbWV0aC5jCkBAIC03MTUsNyArNzE1LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPm1ldGhfbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKQEAgLTc4NCw3ICs3ODQsNyBAQAogLyoKICAqIFRoZSBpbml0IGZ1bmN0aW9uLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBtZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWlpLmMgYi9kcml2ZXJzL25ldC9taWkuYwppbmRleCBkODFhNWQyLi4yMTBiMmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9taWkuYworKysgYi9kcml2ZXJzL25ldC9taWkuYwpAQCAtNDMzLDkgKzQzMyw2IEBACiAJY2FzZSBTSU9DU01JSVJFRzogewogCQl1MTYgdmFsID0gbWlpX2RhdGEtPnZhbF9pbjsKIAotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCiAJCWlmIChtaWlfZGF0YS0+cGh5X2lkID09IG1paV9pZi0+cGh5X2lkKSB7CiAJCQlzd2l0Y2gobWlpX2RhdGEtPnJlZ19udW0pIHsKIAkJCWNhc2UgTUlJX0JNQ1I6IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21pcHNuZXQuYyBiL2RyaXZlcnMvbmV0L21pcHNuZXQuYwppbmRleCBiM2I5YTE0Li44ZWE5OGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9taXBzbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvbWlwc25ldC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJbWlwc25ldF9wdXRfdG9kZXZpY2UoZGV2LCBza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGlubGluZSBzc2l6ZV90IG1pcHNuZXRfZ2V0X2Zyb21kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc2l6ZV90IGxlbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvY3EuYyBiL2RyaXZlcnMvbmV0L21seDQvY3EuYwppbmRleCBhYzU3YjZhLi5jY2ZlMjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2NxLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9jcS5jCkBAIC0zNCw3ICszNCw2IEBACiAgKiBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21seDQvY21kLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX21haW4uYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fbWFpbi5jCmluZGV4IDllZDRhMTUuLjUwN2UxMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fbWFpbi5jCkBAIC0yMTgsOCArMjE4LDkgQEAKIAltbHg0X2ZvcmVhY2hfcG9ydChpLCBkZXYsIE1MWDRfUE9SVF9UWVBFX0VUSCkgewogCQltbHg0X2luZm8obWRldiwgIlVzaW5nICVkIHR4IHJpbmdzIGZvciBwb3J0OiVkXG4iLAogCQkJICBtZGV2LT5wcm9maWxlLnByb2ZbaV0udHhfcmluZ19udW0sIGkpOwotCQltZGV2LT5wcm9maWxlLnByb2ZbaV0ucnhfcmluZ19udW0gPQotCQkJbWluX3QoaW50LCBkZXYtPmNhcHMubnVtX2NvbXBfdmVjdG9ycywgTUFYX1JYX1JJTkdTKTsKKwkJbWRldi0+cHJvZmlsZS5wcm9mW2ldLnJ4X3JpbmdfbnVtID0gbWluX3QoaW50LAorCQkJcm91bmR1cF9wb3dfb2ZfdHdvKGRldi0+Y2Fwcy5udW1fY29tcF92ZWN0b3JzKSwKKwkJCU1BWF9SWF9SSU5HUyk7CiAJCW1seDRfaW5mbyhtZGV2LCAiRGVmYXVsdGluZyB0byAlZCByeCByaW5ncyBmb3IgcG9ydDolZFxuIiwKIAkJCSAgbWRldi0+cHJvZmlsZS5wcm9mW2ldLnJ4X3JpbmdfbnVtLCBpKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYwppbmRleCA5M2Y0YWJkLi5jNDhiMGY0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jCkBAIC00MTQsNiArNDE0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGF2Z19wa3Rfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHJ4X3BhY2tldHM7CiAJdW5zaWduZWQgbG9uZyByeF9ieXRlczsKKwl1bnNpZ25lZCBsb25nIHJ4X2J5dGVfZGlmZjsKIAl1bnNpZ25lZCBsb25nIHR4X3BhY2tldHM7CiAJdW5zaWduZWQgbG9uZyB0eF9wa3RfZGlmZjsKIAl1bnNpZ25lZCBsb25nIHJ4X3BrdF9kaWZmOwpAQCAtNDM3LDYgKzQzOCw4IEBACiAJcnhfcGt0X2RpZmYgPSAoKHVuc2lnbmVkIGxvbmcpIChyeF9wYWNrZXRzIC0KIAkJCQkJcHJpdi0+bGFzdF9tb2Rlcl9wYWNrZXRzKSk7CiAJcGFja2V0cyA9IG1heCh0eF9wa3RfZGlmZiwgcnhfcGt0X2RpZmYpOworCXJ4X2J5dGVfZGlmZiA9IHJ4X2J5dGVzIC0gcHJpdi0+bGFzdF9tb2Rlcl9ieXRlczsKKwlyeF9ieXRlX2RpZmYgPSByeF9ieXRlX2RpZmYgPyByeF9ieXRlX2RpZmYgOiAxOwogCXJhdGUgPSBwYWNrZXRzICogSFogLyBwZXJpb2Q7CiAJYXZnX3BrdF9zaXplID0gcGFja2V0cyA/ICgodW5zaWduZWQgbG9uZykgKHJ4X2J5dGVzIC0KIAkJCQkgcHJpdi0+bGFzdF9tb2Rlcl9ieXRlcykpIC8gcGFja2V0cyA6IDA7CkBAIC00NDcsMTAgKzQ1MCwxMyBAQAogCQkvKiBJZiB0eCBhbmQgcnggcGFja2V0IHJhdGVzIGFyZSBub3QgYmFsYW5jZWQsIGFzc3VtZSB0aGF0CiAJCSAqIHRyYWZmaWMgaXMgbWFpbmx5IEJXIGJvdW5kIGFuZCBhcHBseSBtYXhpbXVtIG1vZGVyYXRpb24uCiAJCSAqIE90aGVyd2lzZSwgbW9kZXJhdGUgYWNjb3JkaW5nIHRvIHBhY2tldCByYXRlICovCi0JCWlmICgyICogdHhfcGt0X2RpZmYgPiAzICogcnhfcGt0X2RpZmYgfHwKLQkJICAgIDIgKiByeF9wa3RfZGlmZiA+IDMgKiB0eF9wa3RfZGlmZikgeworCQlpZiAoMiAqIHR4X3BrdF9kaWZmID4gMyAqIHJ4X3BrdF9kaWZmICYmCisJCSAgICByeF9wa3RfZGlmZiAvIHJ4X2J5dGVfZGlmZiA8CisJCSAgICBNTFg0X0VOX1NNQUxMX1BLVF9TSVpFKQorCQkJbW9kZXJfdGltZSA9IHByaXYtPnJ4X3VzZWNzX2xvdzsKKwkJZWxzZSBpZiAoMiAqIHJ4X3BrdF9kaWZmID4gMyAqIHR4X3BrdF9kaWZmKQogCQkJbW9kZXJfdGltZSA9IHByaXYtPnJ4X3VzZWNzX2hpZ2g7Ci0JCX0gZWxzZSB7CisJCWVsc2UgewogCQkJaWYgKHJhdGUgPCBwcml2LT5wa3RfcmF0ZV9sb3cpCiAJCQkJbW9kZXJfdGltZSA9IHByaXYtPnJ4X3VzZWNzX2xvdzsKIAkJCWVsc2UgaWYgKHJhdGUgPiBwcml2LT5wa3RfcmF0ZV9oaWdoKQpAQCAtNjE2LDggKzYyMiw3IEBACiAKIAkJLyogQ29uZmlndXJlIHJpbmcgKi8KIAkJdHhfcmluZyA9ICZwcml2LT50eF9yaW5nW2ldOwotCQllcnIgPSBtbHg0X2VuX2FjdGl2YXRlX3R4X3JpbmcocHJpdiwgdHhfcmluZywgY3EtPm1jcS5jcW4sCi0JCQkJCSAgICAgICBwcml2LT5yeF9yaW5nWzBdLnNycS5zcnFuKTsKKwkJZXJyID0gbWx4NF9lbl9hY3RpdmF0ZV90eF9yaW5nKHByaXYsIHR4X3JpbmcsIGNxLT5tY3EuY3FuKTsKIAkJaWYgKGVycikgewogCQkJZW5fZXJyKHByaXYsICJGYWlsZWQgYWxsb2NhdGluZyBUeCByaW5nXG4iKTsKIAkJCW1seDRfZW5fZGVhY3RpdmF0ZV9jcShwcml2LCBjcSk7CkBAIC0xMDA1LDkgKzEwMTAsNiBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JLyogUG9wdWxhdGUgUnggZGVmYXVsdCBSU1MgbWFwcGluZ3MgKi8KLQltbHg0X2VuX3NldF9kZWZhdWx0X3Jzc19tYXAocHJpdiwgJnByaXYtPnJzc19tYXAsIHByaXYtPnJ4X3JpbmdfbnVtICoKLQkJCQkJCVJTU19GQUNUT1IsIHByaXYtPnJ4X3JpbmdfbnVtKTsKIAkvKiBBbGxvY2F0ZSBwYWdlIGZvciByZWNlaXZlIHJpbmdzICovCiAJZXJyID0gbWx4NF9hbGxvY19od3FfcmVzKG1kZXYtPmRldiwgJnByaXYtPnJlcywKIAkJCQlNTFg0X0VOX1BBR0VfU0laRSwgTUxYNF9FTl9QQUdFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yZXNvdXJjZXMuYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcmVzb3VyY2VzLmMKaW5kZXggNjVjYTcwNi4uMTYyNTY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yZXNvdXJjZXMuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3Jlc291cmNlcy5jCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAibWx4NF9lbi5oIgogCiB2b2lkIG1seDRfZW5fZmlsbF9xcF9jb250ZXh0KHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsIGludCBzaXplLCBpbnQgc3RyaWRlLAotCQkJICAgICBpbnQgaXNfdHgsIGludCByc3MsIGludCBxcG4sIGludCBjcW4sIGludCBzcnFuLAorCQkJICAgICBpbnQgaXNfdHgsIGludCByc3MsIGludCBxcG4sIGludCBjcW4sCiAJCQkgICAgIHN0cnVjdCBtbHg0X3FwX2NvbnRleHQgKmNvbnRleHQpCiB7CiAJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKQEAgLTQ2LDExICs0NiwxMiBAQAogCWNvbnRleHQtPmZsYWdzID0gY3B1X3RvX2JlMzIoNyA8PCAxNiB8IHJzcyA8PCAxMyk7CiAJY29udGV4dC0+cGQgPSBjcHVfdG9fYmUzMihtZGV2LT5wcml2X3Bkbik7CiAJY29udGV4dC0+bXR1X21zZ21heCA9IDB4ZmY7Ci0JY29udGV4dC0+cnFfc2l6ZV9zdHJpZGUgPSAwOworCWlmICghaXNfdHggJiYgIXJzcykKKwkJY29udGV4dC0+cnFfc2l6ZV9zdHJpZGUgPSBpbG9nMihzaXplKSA8PCAzIHwgKGlsb2cyKHN0cmlkZSkgLSA0KTsKIAlpZiAoaXNfdHgpCiAJCWNvbnRleHQtPnNxX3NpemVfc3RyaWRlID0gaWxvZzIoc2l6ZSkgPDwgMyB8IChpbG9nMihzdHJpZGUpIC0gNCk7CiAJZWxzZQotCQljb250ZXh0LT5zcV9zaXplX3N0cmlkZSA9IDE7CisJCWNvbnRleHQtPnNxX3NpemVfc3RyaWRlID0gaWxvZzIoVFhCQl9TSVpFKSAtIDQ7CiAJY29udGV4dC0+dXNyX3BhZ2UgPSBjcHVfdG9fYmUzMihtZGV2LT5wcml2X3Vhci5pbmRleCk7CiAJY29udGV4dC0+bG9jYWxfcXBuID0gY3B1X3RvX2JlMzIocXBuKTsKIAljb250ZXh0LT5wcmlfcGF0aC5hY2t0byA9IDEgJiAweDA3OwpAQCAtNTksOCArNjAsNiBAQAogCWNvbnRleHQtPmNxbl9zZW5kID0gY3B1X3RvX2JlMzIoY3FuKTsKIAljb250ZXh0LT5jcW5fcmVjdiA9IGNwdV90b19iZTMyKGNxbik7CiAJY29udGV4dC0+ZGJfcmVjX2FkZHIgPSBjcHVfdG9fYmU2NChwcml2LT5yZXMuZGIuZG1hIDw8IDIpOwotCWlmICghcnNzKQotCQljb250ZXh0LT5zcnFuID0gY3B1X3RvX2JlMzIoTUxYNF9FTl9VU0VfU1JRIHwgc3Jxbik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCmluZGV4IDNhYzA0MDQuLjAzYjc4MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKQEAgLTQwLDE2ICs0MCw2IEBACiAKICNpbmNsdWRlICJtbHg0X2VuLmgiCiAKLXN0YXRpYyB2b2lkICpnZXRfd3FlKHN0cnVjdCBtbHg0X2VuX3J4X3JpbmcgKnJpbmcsIGludCBuKQotewotCWludCBvZmZzZXQgPSBuIDw8IHJpbmctPnNycS53cWVfc2hpZnQ7Ci0JcmV0dXJuIHJpbmctPmJ1ZiArIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQgbWx4NF9lbl9zcnFfZXZlbnQoc3RydWN0IG1seDRfc3JxICpzcnEsIGVudW0gbWx4NF9ldmVudCB0eXBlKQotewotCXJldHVybjsKLX0KIAogc3RhdGljIGludCBtbHg0X2VuX2dldF9mcmFnX2hlYWRlcihzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFncywgdm9pZCAqKm1hY19oZHIsCiAJCQkJICAgdm9pZCAqKmlwX2hkciwgdm9pZCAqKnRjcHVkcF9oZHIsCkBAIC0xNTQsOSArMTQ0LDYgQEAKIAlpbnQgcG9zc2libGVfZnJhZ3M7CiAJaW50IGk7CiAKLQkvKiBQcmUtbGluayBkZXNjcmlwdG9yICovCi0JcnhfZGVzYy0+bmV4dC5uZXh0X3dxZV9pbmRleCA9IGNwdV90b19iZTE2KChpbmRleCArIDEpICYgcmluZy0+c2l6ZV9tYXNrKTsKLQogCS8qIFNldCBzaXplIGFuZCBtZW10eXBlIGZpZWxkcyAqLwogCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1fZnJhZ3M7IGkrKykgewogCQlza2JfZnJhZ3NbaV0uc2l6ZSA9IHByaXYtPmZyYWdfaW5mb1tpXS5mcmFnX3NpemU7CkBAIC0yOTQsOSArMjgxLDYgQEAKIAlpbnQgZXJyOwogCWludCB0bXA7CiAKLQkvKiBTYW5pdHkgY2hlY2sgU1JRIHNpemUgYmVmb3JlIHByb2NlZWRpbmcgKi8KLQlpZiAoc2l6ZSA+PSBtZGV2LT5kZXYtPmNhcHMubWF4X3NycV93cWVzKQotCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJpbmctPnByb2QgPSAwOwogCXJpbmctPmNvbnMgPSAwOwpAQCAtMzA0LDcgKzI4OCw3IEBACiAJcmluZy0+c2l6ZV9tYXNrID0gc2l6ZSAtIDE7CiAJcmluZy0+c3RyaWRlID0gc3RyaWRlOwogCXJpbmctPmxvZ19zdHJpZGUgPSBmZnMocmluZy0+c3RyaWRlKSAtIDE7Ci0JcmluZy0+YnVmX3NpemUgPSByaW5nLT5zaXplICogcmluZy0+c3RyaWRlOworCXJpbmctPmJ1Zl9zaXplID0gcmluZy0+c2l6ZSAqIHJpbmctPnN0cmlkZSArIFRYQkJfU0laRTsKIAogCXRtcCA9IHNpemUgKiByb3VuZHVwX3Bvd19vZl90d28oTUxYNF9FTl9NQVhfUlhfRlJBR1MgKgogCQkJCQlzaXplb2Yoc3RydWN0IHNrYl9mcmFnX3N0cnVjdCkpOwpAQCAtMzYwLDE1ICszNDQsMTIgQEAKIAogaW50IG1seDRfZW5fYWN0aXZhdGVfcnhfcmluZ3Moc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OwotCXN0cnVjdCBtbHg0X3dxZV9zcnFfbmV4dF9zZWcgKm5leHQ7CiAJc3RydWN0IG1seDRfZW5fcnhfcmluZyAqcmluZzsKIAlpbnQgaTsKIAlpbnQgcmluZ19pbmQ7CiAJaW50IGVycjsKIAlpbnQgc3RyaWRlID0gcm91bmR1cF9wb3dfb2ZfdHdvKHNpemVvZihzdHJ1Y3QgbWx4NF9lbl9yeF9kZXNjKSArCiAJCQkJCURTX1NJWkUgKiBwcml2LT5udW1fZnJhZ3MpOwotCWludCBtYXhfZ3MgPSAoc3RyaWRlIC0gc2l6ZW9mKHN0cnVjdCBtbHg0X3dxZV9zcnFfbmV4dF9zZWcpKSAvIERTX1NJWkU7CiAKIAlmb3IgKHJpbmdfaW5kID0gMDsgcmluZ19pbmQgPCBwcml2LT5yeF9yaW5nX251bTsgcmluZ19pbmQrKykgewogCQlyaW5nID0gJnByaXYtPnJ4X3JpbmdbcmluZ19pbmRdOwpAQCAtMzc5LDYgKzM2MCw5IEBACiAJCXJpbmctPmNxbiA9IHByaXYtPnJ4X2NxW3JpbmdfaW5kXS5tY3EuY3FuOwogCiAJCXJpbmctPnN0cmlkZSA9IHN0cmlkZTsKKwkJaWYgKHJpbmctPnN0cmlkZSA8PSBUWEJCX1NJWkUpCisJCQlyaW5nLT5idWYgKz0gVFhCQl9TSVpFOworCiAJCXJpbmctPmxvZ19zdHJpZGUgPSBmZnMocmluZy0+c3RyaWRlKSAtIDE7CiAJCXJpbmctPmJ1Zl9zaXplID0gcmluZy0+c2l6ZSAqIHJpbmctPnN0cmlkZTsKIApAQCAtNDA1LDM3ICszODksMTAgQEAKIAkJcmluZyA9ICZwcml2LT5yeF9yaW5nW3JpbmdfaW5kXTsKIAogCQltbHg0X2VuX3VwZGF0ZV9yeF9wcm9kX2RiKHJpbmcpOwotCi0JCS8qIENvbmZpZ3VyZSBTUlEgcmVwcmVzZW50aW5nIHRoZSByaW5nICovCi0JCXJpbmctPnNycS5tYXggICAgPSByaW5nLT5hY3R1YWxfc2l6ZTsKLQkJcmluZy0+c3JxLm1heF9ncyA9IG1heF9nczsKLQkJcmluZy0+c3JxLndxZV9zaGlmdCA9IGlsb2cyKHJpbmctPnN0cmlkZSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHJpbmctPnNycS5tYXg7ICsraSkgewotCQkJbmV4dCA9IGdldF93cWUocmluZywgaSk7Ci0JCQluZXh0LT5uZXh0X3dxZV9pbmRleCA9Ci0JCQljcHVfdG9fYmUxNigoaSArIDEpICYgKHJpbmctPnNycS5tYXggLSAxKSk7Ci0JCX0KLQotCQllcnIgPSBtbHg0X3NycV9hbGxvYyhtZGV2LT5kZXYsIG1kZXYtPnByaXZfcGRuLCAmcmluZy0+d3FyZXMubXR0LAotCQkJCSAgICAgcmluZy0+d3FyZXMuZGIuZG1hLCAmcmluZy0+c3JxKTsKLQkJaWYgKGVycil7Ci0JCQllbl9lcnIocHJpdiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBzcnFcbiIpOwotCQkJcmluZ19pbmQtLTsKLQkJCWdvdG8gZXJyX3NycTsKLQkJfQotCQlyaW5nLT5zcnEuZXZlbnQgPSBtbHg0X2VuX3NycV9ldmVudDsKIAl9CiAKIAlyZXR1cm4gMDsKIAotZXJyX3NycToKLQl3aGlsZSAocmluZ19pbmQgPj0gMCkgewotCQlyaW5nID0gJnByaXYtPnJ4X3JpbmdbcmluZ19pbmRdOwotCQltbHg0X3NycV9mcmVlKG1kZXYtPmRldiwgJnJpbmctPnNycSk7Ci0JCXJpbmdfaW5kLS07Ci0JfQotCiBlcnJfYnVmZmVyczoKIAlmb3IgKHJpbmdfaW5kID0gMDsgcmluZ19pbmQgPCBwcml2LT5yeF9yaW5nX251bTsgcmluZ19pbmQrKykKIAkJbWx4NF9lbl9mcmVlX3J4X2J1Zihwcml2LCAmcHJpdi0+cnhfcmluZ1tyaW5nX2luZF0pOwpAQCAtNDU2LDcgKzQxMyw3IEBACiAKIAlrZnJlZShyaW5nLT5scm8ubHJvX2Fycik7CiAJbWx4NF9lbl91bm1hcF9idWZmZXIoJnJpbmctPndxcmVzLmJ1Zik7Ci0JbWx4NF9mcmVlX2h3cV9yZXMobWRldi0+ZGV2LCAmcmluZy0+d3FyZXMsIHJpbmctPmJ1Zl9zaXplKTsKKwltbHg0X2ZyZWVfaHdxX3JlcyhtZGV2LT5kZXYsICZyaW5nLT53cXJlcywgcmluZy0+YnVmX3NpemUgKyBUWEJCX1NJWkUpOwogCXZmcmVlKHJpbmctPnJ4X2luZm8pOwogCXJpbmctPnJ4X2luZm8gPSBOVUxMOwogfQpAQCAtNDY0LDEwICs0MjEsOSBAQAogdm9pZCBtbHg0X2VuX2RlYWN0aXZhdGVfcnhfcmluZyhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAogCQkJCXN0cnVjdCBtbHg0X2VuX3J4X3JpbmcgKnJpbmcpCiB7Ci0Jc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKLQotCW1seDRfc3JxX2ZyZWUobWRldi0+ZGV2LCAmcmluZy0+c3JxKTsKIAltbHg0X2VuX2ZyZWVfcnhfYnVmKHByaXYsIHJpbmcpOworCWlmIChyaW5nLT5zdHJpZGUgPD0gVFhCQl9TSVpFKQorCQlyaW5nLT5idWYgLT0gVFhCQl9TSVpFOwogCW1seDRfZW5fZGVzdHJveV9hbGxvY2F0b3IocHJpdiwgcmluZyk7CiB9CiAKQEAgLTgzNiwyNSArNzkyLDggQEAKIAogLyogUlNTIHJlbGF0ZWQgZnVuY3Rpb25zICovCiAKLS8qIENhbGN1bGF0ZSByc3Mgc2l6ZSBhbmQgbWFwIGVhY2ggZW50cnkgaW4gcnNzIHRhYmxlIHRvIHJ4IHJpbmcgKi8KLXZvaWQgbWx4NF9lbl9zZXRfZGVmYXVsdF9yc3NfbWFwKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBtbHg0X2VuX3Jzc19tYXAgKnJzc19tYXAsCi0JCQkJIGludCBudW1fZW50cmllcywgaW50IG51bV9yaW5ncykKLXsKLQlpbnQgaTsKLQotCXJzc19tYXAtPnNpemUgPSByb3VuZHVwX3Bvd19vZl90d28obnVtX2VudHJpZXMpOwotCWVuX2RiZyhEUlYsIHByaXYsICJTZXR0aW5nIGRlZmF1bHQgUlNTIG1hcCBvZiAlZCBlbnRpcmVzXG4iLAotCSAgICAgICByc3NfbWFwLT5zaXplKTsKLQotCWZvciAoaSA9IDA7IGkgPCByc3NfbWFwLT5zaXplOyBpKyspIHsKLQkJcnNzX21hcC0+bWFwW2ldID0gaSAlIG51bV9yaW5nczsKLQkJZW5fZGJnKERSViwgcHJpdiwgIkVudHJ5ICVkIC0tLT4gcmluZyAlZFxuIiwgaSwgcnNzX21hcC0+bWFwW2ldKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbWx4NF9lbl9jb25maWdfcnNzX3FwKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCi0JCQkJIGludCBxcG4sIGludCBzcnFuLCBpbnQgY3FuLAorc3RhdGljIGludCBtbHg0X2VuX2NvbmZpZ19yc3NfcXAoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgaW50IHFwbiwKKwkJCQkgc3RydWN0IG1seDRfZW5fcnhfcmluZyAqcmluZywKIAkJCQkgZW51bSBtbHg0X3FwX3N0YXRlICpzdGF0ZSwKIAkJCQkgc3RydWN0IG1seDRfcXAgKnFwKQogewpAQCAtODc2LDEzICs4MTUsMTYgQEAKIAlxcC0+ZXZlbnQgPSBtbHg0X2VuX3NxcF9ldmVudDsKIAogCW1lbXNldChjb250ZXh0LCAwLCBzaXplb2YgKmNvbnRleHQpOwotCW1seDRfZW5fZmlsbF9xcF9jb250ZXh0KHByaXYsIDAsIDAsIDAsIDAsIHFwbiwgY3FuLCBzcnFuLCBjb250ZXh0KTsKKwltbHg0X2VuX2ZpbGxfcXBfY29udGV4dChwcml2LCByaW5nLT5zaXplLCByaW5nLT5zdHJpZGUsIDAsIDAsCisJCQkJcXBuLCByaW5nLT5jcW4sIGNvbnRleHQpOworCWNvbnRleHQtPmRiX3JlY19hZGRyID0gY3B1X3RvX2JlNjQocmluZy0+d3FyZXMuZGIuZG1hKTsKIAotCWVyciA9IG1seDRfcXBfdG9fcmVhZHkobWRldi0+ZGV2LCAmcHJpdi0+cmVzLm10dCwgY29udGV4dCwgcXAsIHN0YXRlKTsKKwllcnIgPSBtbHg0X3FwX3RvX3JlYWR5KG1kZXYtPmRldiwgJnJpbmctPndxcmVzLm10dCwgY29udGV4dCwgcXAsIHN0YXRlKTsKIAlpZiAoZXJyKSB7CiAJCW1seDRfcXBfcmVtb3ZlKG1kZXYtPmRldiwgcXApOwogCQltbHg0X3FwX2ZyZWUobWRldi0+ZGV2LCBxcCk7CiAJfQorCW1seDRfZW5fdXBkYXRlX3J4X3Byb2RfZGIocmluZyk7CiBvdXQ6CiAJa2ZyZWUoY29udGV4dCk7CiAJcmV0dXJuIGVycjsKQEAgLTg5OCwyMyArODQwLDIyIEBACiAJdm9pZCAqcHRyOwogCWludCByc3NfeG9yID0gbWRldi0+cHJvZmlsZS5yc3NfeG9yOwogCXU4IHJzc19tYXNrID0gbWRldi0+cHJvZmlsZS5yc3NfbWFzazsKLQlpbnQgaSwgc3JxbiwgcXBuLCBjcW47CisJaW50IGksIHFwbjsKIAlpbnQgZXJyID0gMDsKIAlpbnQgZ29vZF9xcHMgPSAwOwogCiAJZW5fZGJnKERSViwgcHJpdiwgIkNvbmZpZ3VyaW5nIHJzcyBzdGVlcmluZ1xuIik7Ci0JZXJyID0gbWx4NF9xcF9yZXNlcnZlX3JhbmdlKG1kZXYtPmRldiwgcnNzX21hcC0+c2l6ZSwKLQkJCQkgICAgcnNzX21hcC0+c2l6ZSwgJnJzc19tYXAtPmJhc2VfcXBuKTsKKwllcnIgPSBtbHg0X3FwX3Jlc2VydmVfcmFuZ2UobWRldi0+ZGV2LCBwcml2LT5yeF9yaW5nX251bSwKKwkJCQkgICAgcHJpdi0+cnhfcmluZ19udW0sCisJCQkJICAgICZyc3NfbWFwLT5iYXNlX3Fwbik7CiAJaWYgKGVycikgewotCQllbl9lcnIocHJpdiwgIkZhaWxlZCByZXNlcnZpbmcgJWQgcXBzXG4iLCByc3NfbWFwLT5zaXplKTsKKwkJZW5fZXJyKHByaXYsICJGYWlsZWQgcmVzZXJ2aW5nICVkIHFwc1xuIiwgcHJpdi0+cnhfcmluZ19udW0pOwogCQlyZXR1cm4gZXJyOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCByc3NfbWFwLT5zaXplOyBpKyspIHsKLQkJY3FuID0gcHJpdi0+cnhfcmluZ1tyc3NfbWFwLT5tYXBbaV1dLmNxbjsKLQkJc3JxbiA9IHByaXYtPnJ4X3JpbmdbcnNzX21hcC0+bWFwW2ldXS5zcnEuc3JxbjsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cnhfcmluZ19udW07IGkrKykgewogCQlxcG4gPSByc3NfbWFwLT5iYXNlX3FwbiArIGk7Ci0JCWVyciA9IG1seDRfZW5fY29uZmlnX3Jzc19xcChwcml2LCBxcG4sIHNycW4sIGNxbiwKKwkJZXJyID0gbWx4NF9lbl9jb25maWdfcnNzX3FwKHByaXYsIHFwbiwgJnByaXYtPnJ4X3JpbmdbaV0sCiAJCQkJCSAgICAmcnNzX21hcC0+c3RhdGVbaV0sCiAJCQkJCSAgICAmcnNzX21hcC0+cXBzW2ldKTsKIAkJaWYgKGVycikKQEAgLTkzNywxMSArODc4LDExIEBACiAJfQogCXJzc19tYXAtPmluZGlyX3FwLmV2ZW50ID0gbWx4NF9lbl9zcXBfZXZlbnQ7CiAJbWx4NF9lbl9maWxsX3FwX2NvbnRleHQocHJpdiwgMCwgMCwgMCwgMSwgcHJpdi0+YmFzZV9xcG4sCi0JCQkJcHJpdi0+cnhfcmluZ1swXS5jcW4sIDAsICZjb250ZXh0KTsKKwkJCQlwcml2LT5yeF9yaW5nWzBdLmNxbiwgJmNvbnRleHQpOwogCiAJcHRyID0gKCh2b2lkICopICZjb250ZXh0KSArIDB4M2M7CiAJcnNzX2NvbnRleHQgPSAoc3RydWN0IG1seDRfZW5fcnNzX2NvbnRleHQgKikgcHRyOwotCXJzc19jb250ZXh0LT5iYXNlX3FwbiA9IGNwdV90b19iZTMyKGlsb2cyKHJzc19tYXAtPnNpemUpIDw8IDI0IHwKKwlyc3NfY29udGV4dC0+YmFzZV9xcG4gPSBjcHVfdG9fYmUzMihpbG9nMihwcml2LT5yeF9yaW5nX251bSkgPDwgMjQgfAogCQkJCQkgICAgKHJzc19tYXAtPmJhc2VfcXBuKSk7CiAJcnNzX2NvbnRleHQtPmRlZmF1bHRfcXBuID0gY3B1X3RvX2JlMzIocnNzX21hcC0+YmFzZV9xcG4pOwogCXJzc19jb250ZXh0LT5oYXNoX2ZuID0gcnNzX3hvciAmIDB4MzsKQEAgLTk2OCw3ICs5MDksNyBAQAogCQltbHg0X3FwX3JlbW92ZShtZGV2LT5kZXYsICZyc3NfbWFwLT5xcHNbaV0pOwogCQltbHg0X3FwX2ZyZWUobWRldi0+ZGV2LCAmcnNzX21hcC0+cXBzW2ldKTsKIAl9Ci0JbWx4NF9xcF9yZWxlYXNlX3JhbmdlKG1kZXYtPmRldiwgcnNzX21hcC0+YmFzZV9xcG4sIHJzc19tYXAtPnNpemUpOworCW1seDRfcXBfcmVsZWFzZV9yYW5nZShtZGV2LT5kZXYsIHJzc19tYXAtPmJhc2VfcXBuLCBwcml2LT5yeF9yaW5nX251bSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtOTg0LDEzICs5MjUsMTMgQEAKIAltbHg0X3FwX2ZyZWUobWRldi0+ZGV2LCAmcnNzX21hcC0+aW5kaXJfcXApOwogCW1seDRfcXBfcmVsZWFzZV9yYW5nZShtZGV2LT5kZXYsIHByaXYtPmJhc2VfcXBuLCAxKTsKIAotCWZvciAoaSA9IDA7IGkgPCByc3NfbWFwLT5zaXplOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cnhfcmluZ19udW07IGkrKykgewogCQltbHg0X3FwX21vZGlmeShtZGV2LT5kZXYsIE5VTEwsIHJzc19tYXAtPnN0YXRlW2ldLAogCQkJICAgICAgIE1MWDRfUVBfU1RBVEVfUlNULCBOVUxMLCAwLCAwLCAmcnNzX21hcC0+cXBzW2ldKTsKIAkJbWx4NF9xcF9yZW1vdmUobWRldi0+ZGV2LCAmcnNzX21hcC0+cXBzW2ldKTsKIAkJbWx4NF9xcF9mcmVlKG1kZXYtPmRldiwgJnJzc19tYXAtPnFwc1tpXSk7CiAJfQotCW1seDRfcXBfcmVsZWFzZV9yYW5nZShtZGV2LT5kZXYsIHJzc19tYXAtPmJhc2VfcXBuLCByc3NfbWFwLT5zaXplKTsKKwltbHg0X3FwX3JlbGVhc2VfcmFuZ2UobWRldi0+ZGV2LCByc3NfbWFwLT5iYXNlX3FwbiwgcHJpdi0+cnhfcmluZ19udW0pOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fdHguYyBiL2RyaXZlcnMvbmV0L21seDQvZW5fdHguYwppbmRleCA2MjIwODQwLi44YzcyNzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VuX3R4LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl90eC5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAogaW50IG1seDRfZW5fYWN0aXZhdGVfdHhfcmluZyhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgbWx4NF9lbl90eF9yaW5nICpyaW5nLAotCQkJICAgICBpbnQgY3EsIGludCBzcnFuKQorCQkJICAgICBpbnQgY3EpCiB7CiAJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKIAlpbnQgZXJyOwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJcmluZy0+ZG9vcmJlbGxfcXBuID0gc3dhYjMyKHJpbmctPnFwLnFwbiA8PCA4KTsKIAogCW1seDRfZW5fZmlsbF9xcF9jb250ZXh0KHByaXYsIHJpbmctPnNpemUsIHJpbmctPnN0cmlkZSwgMSwgMCwgcmluZy0+cXBuLAotCQkJCXJpbmctPmNxbiwgc3JxbiwgJnJpbmctPmNvbnRleHQpOworCQkJCXJpbmctPmNxbiwgJnJpbmctPmNvbnRleHQpOwogCiAJZXJyID0gbWx4NF9xcF90b19yZWFkeShtZGV2LT5kZXYsICZyaW5nLT53cXJlcy5tdHQsICZyaW5nLT5jb250ZXh0LAogCQkJICAgICAgICZyaW5nLT5xcCwgJnJpbmctPnFwX3N0YXRlKTsKQEAgLTU4OSw3ICs1ODksNyBAQAogCXJldHVybiBza2JfdHhfaGFzaChkZXYsIHNrYik7CiB9CiAKLWludCBtbHg0X2VuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IG1seDRfZW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CkBAIC03NjYsNyArNzY2LDcgQEAKIAkvKiBQb2xsIENRIGhlcmUgKi8KIAltbHg0X2VuX3htaXRfcG9sbChwcml2LCB0eF9pbmQpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogdHhfZHJvcDoKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lcS5jIGIvZHJpdmVycy9uZXQvbWx4NC9lcS5jCmluZGV4IGI5Y2VkZGQuLmJmZmI3OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZXEuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VxLmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgpAQCAtNDIsNiArNDEsMTAgQEAKICNpbmNsdWRlICJmdy5oIgogCiBlbnVtIHsKKwlNTFg0X0lSUU5BTUVfU0laRQk9IDY0Cit9OworCitlbnVtIHsKIAlNTFg0X05VTV9BU1lOQ19FUUUJPSAweDEwMCwKIAlNTFg0X05VTV9TUEFSRV9FUUUJPSAweDgwLAogCU1MWDRfRVFfRU5UUllfU0laRQk9IDB4MjAKQEAgLTUyNiw0OCArNTI5LDYgQEAKIAlpb3VubWFwKHByaXYtPmNscl9iYXNlKTsKIH0KIAotaW50IG1seDRfbWFwX2VxX2ljbShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTY0IGljbV92aXJ0KQotewotCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKLQlpbnQgcmV0OwotCi0JLyoKLQkgKiBXZSBhc3N1bWUgdGhhdCBtYXBwaW5nIG9uZSBwYWdlIGlzIGVub3VnaCBmb3IgdGhlIHdob2xlIEVRCi0JICogY29udGV4dCB0YWJsZS4gIFRoaXMgaXMgZmluZSB3aXRoIGFsbCBjdXJyZW50IEhDQXMsIGJlY2F1c2UKLQkgKiB3ZSBvbmx5IHVzZSAzMiBFUXMgYW5kIGVhY2ggRVEgdXNlcyA2NCBieXRlcyBvZiBjb250ZXh0Ci0JICogbWVtb3J5LCBvciAxIEtCIHRvdGFsLgotCSAqLwotCXByaXYtPmVxX3RhYmxlLmljbV92aXJ0ID0gaWNtX3ZpcnQ7Ci0JcHJpdi0+ZXFfdGFibGUuaWNtX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9ISUdIVVNFUik7Ci0JaWYgKCFwcml2LT5lcV90YWJsZS5pY21fcGFnZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcHJpdi0+ZXFfdGFibGUuaWNtX2RtYSAgPSBwY2lfbWFwX3BhZ2UoZGV2LT5wZGV2LCBwcml2LT5lcV90YWJsZS5pY21fcGFnZSwgMCwKLQkJCQkJICAgICAgIFBBR0VfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRldi0+cGRldiwgcHJpdi0+ZXFfdGFibGUuaWNtX2RtYSkpIHsKLQkJX19mcmVlX3BhZ2UocHJpdi0+ZXFfdGFibGUuaWNtX3BhZ2UpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXQgPSBtbHg0X01BUF9JQ01fcGFnZShkZXYsIHByaXYtPmVxX3RhYmxlLmljbV9kbWEsIGljbV92aXJ0KTsKLQlpZiAocmV0KSB7Ci0JCXBjaV91bm1hcF9wYWdlKGRldi0+cGRldiwgcHJpdi0+ZXFfdGFibGUuaWNtX2RtYSwgUEFHRV9TSVpFLAotCQkJICAgICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0JCV9fZnJlZV9wYWdlKHByaXYtPmVxX3RhYmxlLmljbV9wYWdlKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIG1seDRfdW5tYXBfZXFfaWNtKHN0cnVjdCBtbHg0X2RldiAqZGV2KQotewotCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKLQotCW1seDRfVU5NQVBfSUNNKGRldiwgcHJpdi0+ZXFfdGFibGUuaWNtX3ZpcnQsIDEpOwotCXBjaV91bm1hcF9wYWdlKGRldi0+cGRldiwgcHJpdi0+ZXFfdGFibGUuaWNtX2RtYSwgUEFHRV9TSVpFLAotCQkgICAgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQlfX2ZyZWVfcGFnZShwcml2LT5lcV90YWJsZS5pY21fcGFnZSk7Ci19Ci0KIGludCBtbHg0X2FsbG9jX2VxX3RhYmxlKHN0cnVjdCBtbHg0X2RldiAqZGV2KQogewogCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKQEAgLTYxNSw3ICs1NzYsOSBAQAogCXByaXYtPmVxX3RhYmxlLmNscl9pbnQgID0gcHJpdi0+Y2xyX2Jhc2UgKwogCQkocHJpdi0+ZXFfdGFibGUuaW50YV9waW4gPCAzMiA/IDQgOiAwKTsKIAotCXByaXYtPmVxX3RhYmxlLmlycV9uYW1lcyA9IGttYWxsb2MoMTYgKiBkZXYtPmNhcHMubnVtX2NvbXBfdmVjdG9ycywgR0ZQX0tFUk5FTCk7CisJcHJpdi0+ZXFfdGFibGUuaXJxX25hbWVzID0KKwkJa21hbGxvYyhNTFg0X0lSUU5BTUVfU0laRSAqIChkZXYtPmNhcHMubnVtX2NvbXBfdmVjdG9ycyArIDEpLAorCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2LT5lcV90YWJsZS5pcnFfbmFtZXMpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X2JpdG1hcDsKQEAgLTYzOCwxNyArNjAxLDI1IEBACiAJCWdvdG8gZXJyX291dF9jb21wOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBNTFg0X0ZMQUdfTVNJX1gpIHsKLQkJc3RhdGljIGNvbnN0IGNoYXIgYXN5bmNfZXFfbmFtZVtdID0gIm1seDQtYXN5bmMiOwogCQljb25zdCBjaGFyICplcV9uYW1lOwogCiAJCWZvciAoaSA9IDA7IGkgPCBkZXYtPmNhcHMubnVtX2NvbXBfdmVjdG9ycyArIDE7ICsraSkgewogCQkJaWYgKGkgPCBkZXYtPmNhcHMubnVtX2NvbXBfdmVjdG9ycykgewotCQkJCXNucHJpbnRmKHByaXYtPmVxX3RhYmxlLmlycV9uYW1lcyArIGkgKiAxNiwgMTYsCi0JCQkJCSAibWx4NC1jb21wLSVkIiwgaSk7Ci0JCQkJZXFfbmFtZSA9IHByaXYtPmVxX3RhYmxlLmlycV9uYW1lcyArIGkgKiAxNjsKLQkJCX0gZWxzZQotCQkJCWVxX25hbWUgPSBhc3luY19lcV9uYW1lOworCQkJCXNucHJpbnRmKHByaXYtPmVxX3RhYmxlLmlycV9uYW1lcyArCisJCQkJCSBpICogTUxYNF9JUlFOQU1FX1NJWkUsCisJCQkJCSBNTFg0X0lSUU5BTUVfU0laRSwKKwkJCQkJICJtbHg0LWNvbXAtJWRAcGNpOiVzIiwgaSwKKwkJCQkJIHBjaV9uYW1lKGRldi0+cGRldikpOworCQkJfSBlbHNlIHsKKwkJCQlzbnByaW50Zihwcml2LT5lcV90YWJsZS5pcnFfbmFtZXMgKworCQkJCQkgaSAqIE1MWDRfSVJRTkFNRV9TSVpFLAorCQkJCQkgTUxYNF9JUlFOQU1FX1NJWkUsCisJCQkJCSAibWx4NC1hc3luY0BwY2k6JXMiLAorCQkJCQkgcGNpX25hbWUoZGV2LT5wZGV2KSk7CisJCQl9CiAKKwkJCWVxX25hbWUgPSBwcml2LT5lcV90YWJsZS5pcnFfbmFtZXMgKworCQkJCSAgaSAqIE1MWDRfSVJRTkFNRV9TSVpFOwogCQkJZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+ZXFfdGFibGUuZXFbaV0uaXJxLAogCQkJCQkgIG1seDRfbXNpX3hfaW50ZXJydXB0LCAwLCBlcV9uYW1lLAogCQkJCQkgIHByaXYtPmVxX3RhYmxlLmVxICsgaSk7CkBAIC02NTgsOCArNjI5LDEyIEBACiAJCQlwcml2LT5lcV90YWJsZS5lcVtpXS5oYXZlX2lycSA9IDE7CiAJCX0KIAl9IGVsc2UgeworCQlzbnByaW50Zihwcml2LT5lcV90YWJsZS5pcnFfbmFtZXMsCisJCQkgTUxYNF9JUlFOQU1FX1NJWkUsCisJCQkgRFJWX05BTUUgIkBwY2k6JXMiLAorCQkJIHBjaV9uYW1lKGRldi0+cGRldikpOwogCQllcnIgPSByZXF1ZXN0X2lycShkZXYtPnBkZXYtPmlycSwgbWx4NF9pbnRlcnJ1cHQsCi0JCQkJICBJUlFGX1NIQVJFRCwgRFJWX05BTUUsIGRldik7CisJCQkJICBJUlFGX1NIQVJFRCwgcHJpdi0+ZXFfdGFibGUuaXJxX25hbWVzLCBkZXYpOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfb3V0X2FzeW5jOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2ljbS5jIGIvZHJpdmVycy9uZXQvbWx4NC9pY20uYwppbmRleCBiYWY0YmY2Li4wNGIzODJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2ljbS5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvaWNtLmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCmluZGV4IGRhYzYyMWIuLjNkZDQ4MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCkBAIC01MjUsNyArNTI1LDEwIEBACiAJCWdvdG8gZXJyX3VubWFwX2F1eDsKIAl9CiAKLQllcnIgPSBtbHg0X21hcF9lcV9pY20oZGV2LCBpbml0X2hjYS0+ZXFjX2Jhc2UpOworCWVyciA9IG1seDRfaW5pdF9pY21fdGFibGUoZGV2LCAmcHJpdi0+ZXFfdGFibGUudGFibGUsCisJCQkJICBpbml0X2hjYS0+ZXFjX2Jhc2UsIGRldl9jYXAtPmVxY19lbnRyeV9zeiwKKwkJCQkgIGRldi0+Y2Fwcy5udW1fZXFzLCBkZXYtPmNhcHMubnVtX2VxcywKKwkJCQkgIDAsIDApOwogCWlmIChlcnIpIHsKIAkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIG1hcCBFUSBjb250ZXh0IG1lbW9yeSwgYWJvcnRpbmcuXG4iKTsKIAkJZ290byBlcnJfdW5tYXBfY21wdDsKQEAgLTY2OCw3ICs2NzEsNyBAQAogCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+bXJfdGFibGUubXR0X3RhYmxlKTsKIAogZXJyX3VubWFwX2VxOgotCW1seDRfdW5tYXBfZXFfaWNtKGRldik7CisJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5lcV90YWJsZS50YWJsZSk7CiAKIGVycl91bm1hcF9jbXB0OgogCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+ZXFfdGFibGUuY21wdF90YWJsZSk7CkBAIC02OTgsMTEgKzcwMSwxMSBAQAogCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+cXBfdGFibGUucXBfdGFibGUpOwogCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+bXJfdGFibGUuZG1wdF90YWJsZSk7CiAJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5tcl90YWJsZS5tdHRfdGFibGUpOworCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+ZXFfdGFibGUudGFibGUpOwogCW1seDRfY2xlYW51cF9pY21fdGFibGUoZGV2LCAmcHJpdi0+ZXFfdGFibGUuY21wdF90YWJsZSk7CiAJbWx4NF9jbGVhbnVwX2ljbV90YWJsZShkZXYsICZwcml2LT5jcV90YWJsZS5jbXB0X3RhYmxlKTsKIAltbHg0X2NsZWFudXBfaWNtX3RhYmxlKGRldiwgJnByaXYtPnNycV90YWJsZS5jbXB0X3RhYmxlKTsKIAltbHg0X2NsZWFudXBfaWNtX3RhYmxlKGRldiwgJnByaXYtPnFwX3RhYmxlLmNtcHRfdGFibGUpOwotCW1seDRfdW5tYXBfZXFfaWNtKGRldik7CiAKIAltbHg0X1VOTUFQX0lDTV9BVVgoZGV2KTsKIAltbHg0X2ZyZWVfaWNtKGRldiwgcHJpdi0+ZncuYXV4X2ljbSwgMCk7CkBAIC03ODYsNyArNzg5LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyX2Nsb3NlOgotCW1seDRfY2xvc2VfaGNhKGRldik7CisJbWx4NF9DTE9TRV9IQ0EoZGV2LCAwKTsKIAogZXJyX2ZyZWVfaWNtOgogCW1seDRfZnJlZV9pY21zKGRldik7CkBAIC0xMDcwLDE4ICsxMDczLDEyIEBACiAJCWdvdG8gZXJyX2Rpc2FibGVfcGRldjsKIAl9CiAKLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb24ocGRldiwgMCwgRFJWX05BTUUpOworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX05BTUUpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlcXVlc3QgY29udHJvbCByZWdpb24sIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkbid0IGdldCBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX2Rpc2FibGVfcGRldjsKIAl9CiAKLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb24ocGRldiwgMiwgRFJWX05BTUUpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlcXVlc3QgVUFSIHJlZ2lvbiwgYWJvcnRpbmcuXG4iKTsKLQkJZ290byBlcnJfcmVsZWFzZV9iYXIwOwotCX0KLQogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKTsKQEAgLTEwOTAsNyArMTA4Nyw3IEBACiAJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CiAJCWlmIChlcnIpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IHNldCBQQ0kgRE1BIG1hc2ssIGFib3J0aW5nLlxuIik7Ci0JCQlnb3RvIGVycl9yZWxlYXNlX2JhcjI7CisJCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbnM7CiAJCX0KIAl9CiAJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpOwpAQCAtMTEwMSw3ICsxMDk4LDcgQEAKIAkJaWYgKGVycikgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3Qgc2V0IGNvbnNpc3RlbnQgUENJIERNQSBtYXNrLCAiCiAJCQkJImFib3J0aW5nLlxuIik7Ci0JCQlnb3RvIGVycl9yZWxlYXNlX2JhcjI7CisJCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbnM7CiAJCX0KIAl9CiAKQEAgLTExMTAsNyArMTEwNyw3IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkRldmljZSBzdHJ1Y3QgYWxsb2MgZmFpbGVkLCAiCiAJCQkiYWJvcnRpbmcuXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfcmVsZWFzZV9iYXIyOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCiAJZGV2ICAgICAgID0gJnByaXYtPmRldjsKQEAgLTEyMDUsMTEgKzEyMDIsOCBAQAogZXJyX2ZyZWVfZGV2OgogCWtmcmVlKHByaXYpOwogCi1lcnJfcmVsZWFzZV9iYXIyOgotCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAyKTsKLQotZXJyX3JlbGVhc2VfYmFyMDoKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7CitlcnJfcmVsZWFzZV9yZWdpb25zOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAKIGVycl9kaXNhYmxlX3BkZXY6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtMTI2NSw4ICsxMjU5LDcgQEAKIAkJCXBjaV9kaXNhYmxlX21zaXgocGRldik7CiAKIAkJa2ZyZWUocHJpdik7Ci0JCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAyKTsKLQkJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDApOworCQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21jZy5jIGIvZHJpdmVycy9uZXQvbWx4NC9tY2cuYwppbmRleCA2MDUzYzM1Li41Y2NiY2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21jZy5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWNnLmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21seDQuaCBiL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCmluZGV4IDViZDc5YzIuLmJjNzJkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCkBAIC0yMDUsOSArMjA1LDcgQEAKIAl2b2lkIF9faW9tZW0JICAgICAgKip1YXJfbWFwOwogCXUzMgkJCWNscl9tYXNrOwogCXN0cnVjdCBtbHg0X2VxCSAgICAgICAqZXE7Ci0JdTY0CQkJaWNtX3ZpcnQ7Ci0Jc3RydWN0IHBhZ2UJICAgICAgICppY21fcGFnZTsKLQlkbWFfYWRkcl90CQlpY21fZG1hOworCXN0cnVjdCBtbHg0X2ljbV90YWJsZQl0YWJsZTsKIAlzdHJ1Y3QgbWx4NF9pY21fdGFibGUJY21wdF90YWJsZTsKIAlpbnQJCQloYXZlX2lycTsKIAl1OAkJCWludGFfcGluOwpAQCAtMzczLDkgKzM3MSw2IEBACiAJCSAgICAgIHN0cnVjdCBtbHg0X2Rldl9jYXAgKmRldl9jYXAsCiAJCSAgICAgIHN0cnVjdCBtbHg0X2luaXRfaGNhX3BhcmFtICppbml0X2hjYSk7CiAKLWludCBtbHg0X21hcF9lcV9pY20oc3RydWN0IG1seDRfZGV2ICpkZXYsIHU2NCBpY21fdmlydCk7Ci12b2lkIG1seDRfdW5tYXBfZXFfaWNtKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKLQogaW50IG1seDRfY21kX2luaXQoc3RydWN0IG1seDRfZGV2ICpkZXYpOwogdm9pZCBtbHg0X2NtZF9jbGVhbnVwKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIHZvaWQgbWx4NF9jbWRfZXZlbnQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHUxNiB0b2tlbiwgdTggc3RhdHVzLCB1NjQgb3V0X3BhcmFtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWx4NF9lbi5oIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0X2VuLmgKaW5kZXggYzdjNWU4Ni4uNDM3NjE0N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWx4NF9lbi5oCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWx4NF9lbi5oCkBAIC05NSw4ICs5NSw2IEBACiAjZGVmaW5lIE1MWDRfRU5fUEFHRV9TSVpFCSgxIDw8IE1MWDRfRU5fUEFHRV9TSElGVCkKICNkZWZpbmUgTUFYX1RYX1JJTkdTCQkxNgogI2RlZmluZSBNQVhfUlhfUklOR1MJCTE2Ci0jZGVmaW5lIE1BWF9SU1NfTUFQX1NJWkUJNjQKLSNkZWZpbmUgUlNTX0ZBQ1RPUgkJMgogI2RlZmluZSBUWEJCX1NJWkUJCTY0CiAjZGVmaW5lIEhFQURST09NCQkoMjA0OCAvIFRYQkJfU0laRSArIDEpCiAjZGVmaW5lIFNUQU1QX1NUUklERQkJNjQKQEAgLTI3NiwxMyArMjc0LDExIEBACiB9OwogCiBzdHJ1Y3QgbWx4NF9lbl9yeF9kZXNjIHsKLQlzdHJ1Y3QgbWx4NF93cWVfc3JxX25leHRfc2VnIG5leHQ7CiAJLyogYWN0dWFsIG51bWJlciBvZiBlbnRyaWVzIGRlcGVuZHMgb24gcnggcmluZyBzdHJpZGUgKi8KIAlzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcgZGF0YVswXTsKIH07CiAKIHN0cnVjdCBtbHg0X2VuX3J4X3JpbmcgewotCXN0cnVjdCBtbHg0X3NycSBzcnE7CiAJc3RydWN0IG1seDRfaHdxX3Jlc291cmNlcyB3cXJlczsKIAlzdHJ1Y3QgbWx4NF9lbl9yeF9hbGxvYyBwYWdlX2FsbG9jW01MWDRfRU5fTUFYX1JYX0ZSQUdTXTsKIAlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvOwpAQCAtMzc3LDExICszNzMsOSBAQAogCiAKIHN0cnVjdCBtbHg0X2VuX3Jzc19tYXAgewotCWludCBzaXplOwogCWludCBiYXNlX3FwbjsKLQl1MTYgbWFwW01BWF9SU1NfTUFQX1NJWkVdOwotCXN0cnVjdCBtbHg0X3FwIHFwc1tNQVhfUlNTX01BUF9TSVpFXTsKLQllbnVtIG1seDRfcXBfc3RhdGUgc3RhdGVbTUFYX1JTU19NQVBfU0laRV07CisJc3RydWN0IG1seDRfcXAgcXBzW01BWF9SWF9SSU5HU107CisJZW51bSBtbHg0X3FwX3N0YXRlIHN0YXRlW01BWF9SWF9SSU5HU107CiAJc3RydWN0IG1seDRfcXAgaW5kaXJfcXA7CiAJZW51bSBtbHg0X3FwX3N0YXRlIGluZGlyX3N0YXRlOwogfTsKQEAgLTUyNCwxNCArNTE4LDE0IEBACiB2b2lkIG1seDRfZW5fcG9sbF90eF9jcSh1bnNpZ25lZCBsb25nIGRhdGEpOwogdm9pZCBtbHg0X2VuX3R4X2lycShzdHJ1Y3QgbWx4NF9jcSAqbWNxKTsKIHUxNiBtbHg0X2VuX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBtbHg0X2VuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CituZXRkZXZfdHhfdCBtbHg0X2VuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIGludCBtbHg0X2VuX2NyZWF0ZV90eF9yaW5nKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsIHN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmcsCiAJCQkgICB1MzIgc2l6ZSwgdTE2IHN0cmlkZSk7CiB2b2lkIG1seDRfZW5fZGVzdHJveV90eF9yaW5nKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsIHN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmcpOwogaW50IG1seDRfZW5fYWN0aXZhdGVfdHhfcmluZyhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgbWx4NF9lbl90eF9yaW5nICpyaW5nLAotCQkJICAgICBpbnQgY3EsIGludCBzcnFuKTsKKwkJCSAgICAgaW50IGNxKTsKIHZvaWQgbWx4NF9lbl9kZWFjdGl2YXRlX3R4X3Jpbmcoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgbWx4NF9lbl90eF9yaW5nICpyaW5nKTsKIApAQCAtNTQ4LDE2ICs1NDIsMTMgQEAKIAkJCSAgaW50IGJ1ZGdldCk7CiBpbnQgbWx4NF9lbl9wb2xsX3J4X2NxKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CiB2b2lkIG1seDRfZW5fZmlsbF9xcF9jb250ZXh0KHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsIGludCBzaXplLCBpbnQgc3RyaWRlLAotCQkJICAgICBpbnQgaXNfdHgsIGludCByc3MsIGludCBxcG4sIGludCBjcW4sIGludCBzcnFuLAorCQkJICAgICBpbnQgaXNfdHgsIGludCByc3MsIGludCBxcG4sIGludCBjcW4sCiAJCQkgICAgIHN0cnVjdCBtbHg0X3FwX2NvbnRleHQgKmNvbnRleHQpOwogdm9pZCBtbHg0X2VuX3NxcF9ldmVudChzdHJ1Y3QgbWx4NF9xcCAqcXAsIGVudW0gbWx4NF9ldmVudCBldmVudCk7CiBpbnQgbWx4NF9lbl9tYXBfYnVmZmVyKHN0cnVjdCBtbHg0X2J1ZiAqYnVmKTsKIHZvaWQgbWx4NF9lbl91bm1hcF9idWZmZXIoc3RydWN0IG1seDRfYnVmICpidWYpOwogCiB2b2lkIG1seDRfZW5fY2FsY19yeF9idWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIG1seDRfZW5fc2V0X2RlZmF1bHRfcnNzX21hcChzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAotCQkJCSBzdHJ1Y3QgbWx4NF9lbl9yc3NfbWFwICpyc3NfbWFwLAotCQkJCSBpbnQgbnVtX2VudHJpZXMsIGludCBudW1fcmluZ3MpOwogaW50IG1seDRfZW5fY29uZmlnX3Jzc19zdGVlcihzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2KTsKIHZvaWQgbWx4NF9lbl9yZWxlYXNlX3Jzc19zdGVlcihzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2KTsKIGludCBtbHg0X2VuX2ZyZWVfdHhfYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tci5jIGIvZHJpdmVycy9uZXQvbWx4NC9tci5jCmluZGV4IGY5Njk0OGIuLmNhN2FiOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbXIuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21yLmMKQEAgLTMyLDcgKzMyLDYgQEAKICAqIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAogI2luY2x1ZGUgPGxpbnV4L21seDQvY21kLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L3BkLmMgYi9kcml2ZXJzL25ldC9tbHg0L3BkLmMKaW5kZXggMjZkMWE3YS4uYzQ5ODhkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9wZC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvcGQuYwpAQCAtMzEsNyArMzEsNiBAQAogICogU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvcHJvZmlsZS5jIGIvZHJpdmVycy9uZXQvbWx4NC9wcm9maWxlLmMKaW5kZXggYmQyMmRmOS4uY2EyNWI5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9wcm9maWxlLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9wcm9maWxlLmMKQEAgLTMyLDggKzMyLDYgQEAKICAqIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KICNpbmNsdWRlICJtbHg0LmgiCiAjaW5jbHVkZSAiZncuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9xcC5jIGIvZHJpdmVycy9uZXQvbWx4NC9xcC5jCmluZGV4IDFjNTY1ZWYuLjQyYWI5ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvcXAuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L3FwLmMKQEAgLTMzLDggKzMzLDYgQEAKICAqIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KICNpbmNsdWRlIDxsaW51eC9tbHg0L2NtZC5oPgogI2luY2x1ZGUgPGxpbnV4L21seDQvcXAuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9yZXNldC5jIGIvZHJpdmVycy9uZXQvbWx4NC9yZXNldC5jCmluZGV4IDM5NTFiODguLmU1NzQxZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvcmVzZXQuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L3Jlc2V0LmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9zcnEuYyBiL2RyaXZlcnMvbmV0L21seDQvc3JxLmMKaW5kZXggZmU5ZjIxOC4uMTM3N2QwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9zcnEuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L3NycS5jCkBAIC0zMSw4ICszMSw2IEBACiAgKiBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCiAjaW5jbHVkZSA8bGludXgvbWx4NC9jbWQuaD4KIAogI2luY2x1ZGUgIm1seDQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCmluZGV4IDBmMzJkYjMuLmI2MmU2MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwpAQCAtMTA2Niw0MCArMTA2Niw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCB0eHFfc2V0X3dycihzdHJ1Y3QgdHhfcXVldWUgKnR4cSwgaW50IHdlaWdodCkKLXsKLQlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSB0eHFfdG9fbXAodHhxKTsKLQlpbnQgb2ZmOwotCXUzMiB2YWw7Ci0KLQkvKgotCSAqIFR1cm4gb2ZmIGZpeGVkIHByaW9yaXR5IG1vZGUuCi0JICovCi0Jb2ZmID0gMDsKLQlzd2l0Y2ggKG1wLT5zaGFyZWQtPnR4X2J3X2NvbnRyb2wpIHsKLQljYXNlIFRYX0JXX0NPTlRST0xfT0xEX0xBWU9VVDoKLQkJb2ZmID0gVFhRX0ZJWF9QUklPX0NPTkY7Ci0JCWJyZWFrOwotCWNhc2UgVFhfQldfQ09OVFJPTF9ORVdfTEFZT1VUOgotCQlvZmYgPSBUWFFfRklYX1BSSU9fQ09ORl9NT1ZFRDsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKG9mZikgewotCQl2YWwgPSByZGxwKG1wLCBvZmYpOwotCQl2YWwgJj0gfigxIDw8IHR4cS0+aW5kZXgpOwotCQl3cmxwKG1wLCBvZmYsIHZhbCk7Ci0KLQkJLyoKLQkJICogQ29uZmlndXJlIFdSUiB3ZWlnaHQgZm9yIHRoaXMgcXVldWUuCi0JCSAqLwotCi0JCXZhbCA9IHJkbHAobXAsIG9mZik7Ci0JCXZhbCA9ICh2YWwgJiB+MHhmZikgfCAod2VpZ2h0ICYgMHhmZik7Ci0JCXdybHAobXAsIFRYUV9CV19XUlJfQ09ORih0eHEtPmluZGV4KSwgdmFsKTsKLQl9Ci19Ci0KIAogLyogbWlpIG1hbmFnZW1lbnQgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaXJxcmV0dXJuX3QgbXY2NDN4eF9ldGhfZXJyX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwppbmRleCAxZjZlMzZlLi42OTMwYzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCisrKyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKQEAgLTc1LDcgKzc1LDcgQEAKICNpbmNsdWRlICJteXJpMTBnZV9tY3AuaCIKICNpbmNsdWRlICJteXJpMTBnZV9tY3BfZ2VuX2hlYWRlci5oIgogCi0jZGVmaW5lIE1ZUkkxMEdFX1ZFUlNJT05fU1RSICIxLjUuMC0xLjQxOCIKKyNkZWZpbmUgTVlSSTEwR0VfVkVSU0lPTl9TVFIgIjEuNS4wLTEuNDMyIgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk15cmljb20gMTBHIGRyaXZlciAoMTBHYkUpIik7CiBNT0RVTEVfQVVUSE9SKCJNYWludGFpbmVyOiBoZWxwQG15cmkuY29tIik7CkBAIC0xODgsNiArMTg4LDcgQEAKIAlkbWFfYWRkcl90IGZ3X3N0YXRzX2J1czsKIAlpbnQgd2F0Y2hkb2dfdHhfZG9uZTsKIAlpbnQgd2F0Y2hkb2dfdHhfcmVxOworCWludCB3YXRjaGRvZ19yeF9kb25lOwogI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlpbnQgY2FjaGVkX2RjYV90YWc7CiAJaW50IGNwdTsKQEAgLTI1Niw2ICsyNTcsNyBAQAogCXUzMiBsaW5rX2NoYW5nZXM7CiAJdTMyIG1zZ19lbmFibGU7CiAJdW5zaWduZWQgaW50IGJvYXJkX251bWJlcjsKKwlpbnQgcmVib290ZWQ7CiB9OwogCiBzdGF0aWMgY2hhciAqbXlyaTEwZ2VfZndfdW5hbGlnbmVkID0gIm15cmkxMGdlX2V0aHBfejhlLmRhdCI7CkBAIC0zNTgsNyArMzYwLDggQEAKICNkZWZpbmUgbXlyaTEwZ2VfcGlvX2NvcHkodG8sZnJvbSxzaXplKSBfX2lvd3JpdGU2NF9jb3B5KHRvLGZyb20sc2l6ZS84KQogCiBzdGF0aWMgdm9pZCBteXJpMTBnZV9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IG15cmkxMGdlX3N3X3RzbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBteXJpMTBnZV9zd190c28oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2JlMzIoX19iZTMyIHZhbCwgX19iZTMyIF9faW9tZW0gKiBwKQogewpAQCAtMjU1MiwxNyArMjU1NSwyMiBAQAogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTsKLQlvbGRfZG93bl9jbnQgPSBtZ3AtPmRvd25fY250OwotCW1iKCk7Ci0Jc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0VUSEVSTkVUX0RPV04sICZjbWQsIDApOwotCWlmIChzdGF0dXMpCi0JCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBDb3VsZG4ndCBicmluZyBkb3duIGxpbmtcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCWlmIChtZ3AtPnJlYm9vdGVkID09IDApIHsKKwkJb2xkX2Rvd25fY250ID0gbWdwLT5kb3duX2NudDsKKwkJbWIoKTsKKwkJc3RhdHVzID0KKwkJICAgIG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9FVEhFUk5FVF9ET1dOLCAmY21kLCAwKTsKKwkJaWYgKHN0YXR1cykKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJteXJpMTBnZTogJXM6IENvdWxkbid0IGJyaW5nIGRvd24gbGlua1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOwogCi0Jd2FpdF9ldmVudF90aW1lb3V0KG1ncC0+ZG93bl93cSwgb2xkX2Rvd25fY250ICE9IG1ncC0+ZG93bl9jbnQsIEhaKTsKLQlpZiAob2xkX2Rvd25fY250ID09IG1ncC0+ZG93bl9jbnQpCi0JCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzIG5ldmVyIGdvdCBkb3duIGlycVxuIiwgZGV2LT5uYW1lKTsKLQorCQl3YWl0X2V2ZW50X3RpbWVvdXQobWdwLT5kb3duX3dxLCBvbGRfZG93bl9jbnQgIT0gbWdwLT5kb3duX2NudCwKKwkJCQkgICBIWik7CisJCWlmIChvbGRfZG93bl9jbnQgPT0gbWdwLT5kb3duX2NudCkKKwkJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzIG5ldmVyIGdvdCBkb3duIGlycVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCX0KIAluZXRpZl90eF9kaXNhYmxlKGRldik7CiAJbXlyaTEwZ2VfZnJlZV9pcnEobWdwKTsKIAlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspCkBAIC0yNjQ5LDcgKzI2NTcsOCBAQAogICogaXQgYW5kIHRyeSBhZ2Fpbi4KICAqLwogCi1zdGF0aWMgaW50IG15cmkxMGdlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBteXJpMTBnZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzczsKQEAgLTI3NDgsNyArMjc1Nyw3IEBACiAJCQkJLyogVGhlIHBhY2tldCBpcyBnb25lLCBzbyB3ZSBtdXN0CiAJCQkJICogcmV0dXJuIDAgKi8KIAkJCQlzcy0+c3RhdHMudHhfZHJvcHBlZCArPSAxOwotCQkJCXJldHVybiAwOworCQkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCQl9CiAJCQkvKiBhZGp1c3QgdGhlIGxlbiB0byBhY2NvdW50IGZvciB0aGUgemVybyBwYWQKIAkJCSAqIHNvIHRoYXQgdGhlIG5pYyBjYW4ga25vdyBob3cgbG9uZyBpdCBpcyAqLwpAQCAtMjg5Miw3ICsyOTAxLDcgQEAKIAkJdHgtPnN0b3BfcXVldWUrKzsKIAkJbmV0aWZfdHhfc3RvcF9xdWV1ZShuZXRkZXZfcXVldWUpOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBhYm9ydF9saW5lYXJpemU6CiAJLyogRnJlZSBhbnkgRE1BIHJlc291cmNlcyB3ZSd2ZSBhbGxvY2VkIGFuZCBjbGVhciBvdXQgdGhlIHNrYgpAQCAtMjkzNiwxNiArMjk0NSwxNyBAQAogZHJvcDoKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCXNzLT5zdGF0cy50eF9kcm9wcGVkICs9IDE7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogfQogCi1zdGF0aWMgaW50IG15cmkxMGdlX3N3X3RzbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IG15cmkxMGdlX3N3X3RzbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKmN1cnI7CiAJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzczsKLQlpbnQgc3RhdHVzOworCW5ldGRldl90eF90IHN0YXR1czsKIAogCXNlZ3MgPSBza2JfZ3NvX3NlZ21lbnQoc2tiLCBkZXYtPmZlYXR1cmVzICYgfk5FVElGX0ZfVFNPNik7CiAJaWYgKElTX0VSUihzZWdzKSkKQEAgLTI5NjgsMTMgKzI5NzgsMTMgQEAKIAkJfQogCX0KIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGRyb3A6CiAJc3MgPSAmbWdwLT5zc1tza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKV07CiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAlzcy0+c3RhdHMudHhfZHJvcHBlZCArPSAxOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbXlyaTEwZ2VfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zNDI3LDEyICszNDM3LDEzIEBACiAJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiwgd2F0Y2hkb2dfd29yayk7CiAJc3RydWN0IG15cmkxMGdlX3R4X2J1ZiAqdHg7CiAJdTMyIHJlYm9vdDsKLQlpbnQgc3RhdHVzOworCWludCBzdGF0dXMsIHJlYm9vdGVkOwogCWludCBpOwogCXUxNiBjbWQsIHZlbmRvcjsKIAogCW1ncC0+d2F0Y2hkb2dfcmVzZXRzKys7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQobWdwLT5wZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CisJcmVib290ZWQgPSAwOwogCWlmICgoY21kICYgUENJX0NPTU1BTkRfTUFTVEVSKSA9PSAwKSB7CiAJCS8qIEJ1cyBtYXN0ZXIgRE1BIGRpc2FibGVkPyAgQ2hlY2sgdG8gc2VlCiAJCSAqIGlmIHRoZSBjYXJkIHJlYm9vdGVkIGR1ZSB0byBhIHBhcml0eSBlcnJvcgpAQCAtMzQ0NCw5ICszNDU1LDEyIEBACiAJCSAgICAgICBteXJpMTBnZV9yZXNldF9yZWNvdmVyID8gIiAiIDogIiBub3QiKTsKIAkJaWYgKG15cmkxMGdlX3Jlc2V0X3JlY292ZXIgPT0gMCkKIAkJCXJldHVybjsKLQorCQlydG5sX2xvY2soKTsKKwkJbWdwLT5yZWJvb3RlZCA9IDE7CisJCXJlYm9vdGVkID0gMTsKKwkJbXlyaTEwZ2VfY2xvc2UobWdwLT5kZXYpOwogCQlteXJpMTBnZV9yZXNldF9yZWNvdmVyLS07Ci0KKwkJbWdwLT5yZWJvb3RlZCA9IDA7CiAJCS8qCiAJCSAqIEEgcmVib290ZWQgbmljIHdpbGwgY29tZSBiYWNrIHdpdGggY29uZmlnIHNwYWNlIGFzCiAJCSAqIGl0IHdhcyBhZnRlciBwb3dlciB3YXMgYXBwbGllZCB0byBQQ0llIGJ1cy4KQEAgLTM0OTQsOCArMzUwOCwxMCBAQAogCQl9CiAJfQogCi0JcnRubF9sb2NrKCk7Ci0JbXlyaTEwZ2VfY2xvc2UobWdwLT5kZXYpOworCWlmICghcmVib290ZWQpIHsKKwkJcnRubF9sb2NrKCk7CisJCW15cmkxMGdlX2Nsb3NlKG1ncC0+ZGV2KTsKKwl9CiAJc3RhdHVzID0gbXlyaTEwZ2VfbG9hZF9maXJtd2FyZShtZ3AsIDEpOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IGZhaWxlZCB0byBsb2FkIGZpcm13YXJlXG4iLApAQCAtMzUxNiwxMiArMzUzMiwxNCBAQAogewogCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3A7CiAJc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzczsKLQlpbnQgaSwgcmVzZXRfbmVlZGVkOworCWludCBpLCByZXNldF9uZWVkZWQsIGJ1c3lfc2xpY2VfY250OwogCXUzMiByeF9wYXVzZV9jbnQ7CisJdTE2IGNtZDsKIAogCW1ncCA9IChzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqKWFyZzsKIAogCXJ4X3BhdXNlX2NudCA9IG50b2hsKG1ncC0+c3NbMF0uZndfc3RhdHMtPmRyb3BwZWRfcGF1c2UpOworCWJ1c3lfc2xpY2VfY250ID0gMDsKIAlmb3IgKGkgPSAwLCByZXNldF9uZWVkZWQgPSAwOwogCSAgICAgaSA8IG1ncC0+bnVtX3NsaWNlcyAmJiByZXNldF9uZWVkZWQgPT0gMDsgKytpKSB7CiAKQEAgLTM1NTksOCArMzU3NywyMiBAQAogCQkJCXJlc2V0X25lZWRlZCA9IDE7CiAJCQl9CiAJCX0KKwkJaWYgKHNzLT53YXRjaGRvZ190eF9kb25lICE9IHNzLT50eC5kb25lIHx8CisJCSAgICBzcy0+d2F0Y2hkb2dfcnhfZG9uZSAhPSBzcy0+cnhfZG9uZS5jbnQpIHsKKwkJCWJ1c3lfc2xpY2VfY250Kys7CisJCX0KIAkJc3MtPndhdGNoZG9nX3R4X2RvbmUgPSBzcy0+dHguZG9uZTsKIAkJc3MtPndhdGNoZG9nX3R4X3JlcSA9IHNzLT50eC5yZXE7CisJCXNzLT53YXRjaGRvZ19yeF9kb25lID0gc3MtPnJ4X2RvbmUuY250OworCX0KKwkvKiBpZiB3ZSd2ZSBzZW50IG9yIHJlY2VpdmVkIG5vIHRyYWZmaWMsIHBvbGwgdGhlIE5JQyB0bworCSAqIGVuc3VyZSBpdCBpcyBzdGlsbCB0aGVyZS4gIE90aGVyd2lzZSwgd2UgcmlzayBub3Qgbm90aWNpbmcKKwkgKiBhbiBlcnJvciBpbiBhIHRpbWVseSBmYXNoaW9uICovCisJaWYgKGJ1c3lfc2xpY2VfY250ID09IDApIHsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQobWdwLT5wZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CisJCWlmICgoY21kICYgUENJX0NPTU1BTkRfTUFTVEVSKSA9PSAwKSB7CisJCQlyZXNldF9uZWVkZWQgPSAxOworCQl9CiAJfQogCW1ncC0+d2F0Y2hkb2dfcGF1c2UgPSByeF9wYXVzZV9jbnQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jIGIvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMKaW5kZXggNWYwNzU4Yi4uMjllYmViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMKQEAgLTY5Miw3ICs2OTIsNyBAQAogCURUWCgoInRidXN5PTAsIHJldHVybmluZyAwXG4iKSk7CiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcC0+aXJxX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBDcmVhdGUgdGhlIE15cmlOZXQgTUFDIGhlYWRlciBmb3IgYW4gYXJiaXRyYXJ5IHByb3RvY29sIGxheWVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKaW5kZXggNzhjMDg4My4uYjI3MjJjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jCisrKyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwpAQCAtNjIxLDcgKzYyMSw3IEBACiBzdGF0aWMgdm9pZCBmcmVlX3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCByZWluaXRfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGluaXRfcmVnaXN0ZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBpbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKIHN0YXRpYyB2b2lkIG5ldGRldl9lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW50cl9zdGF0dXMpOwogc3RhdGljIGludCBuYXRzZW1pX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKQEAgLTIwNzksNyArMjA3OSw3IEBACiAJcmVpbml0X3J4KGRldik7CiB9CiAKLXN0YXRpYyBpbnQgc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqIGlvYWRkciA9IG5zX2lvYWRkcihkZXYpOwpAQCAtMjEyNSw3ICsyMTI1LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBmcmFtZSAjJWQgcXVldWVkIGluIHNsb3QgJWQuXG4iLAogCQkJZGV2LT5uYW1lLCBucC0+Y3VyX3R4LCBlbnRyeSk7CiAJfQotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIG5ldGRldl90eF9kb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zMDUzLDEyICszMDUzLDEwIEBACiAKIAlzd2l0Y2goY21kKSB7CiAJY2FzZSBTSU9DR01JSVBIWToJCS8qIEdldCBhZGRyZXNzIG9mIE1JSSBQSFkgaW4gdXNlLiAqLwotCWNhc2UgU0lPQ0RFVlBSSVZBVEU6CQkvKiBmb3IgYmluYXJ5IGNvbXBhdCwgcmVtb3ZlIGluIDIuNSAqLwogCQlkYXRhLT5waHlfaWQgPSBucC0+cGh5X2FkZHJfZXh0ZXJuYWw7CiAJCS8qIEZhbGwgVGhyb3VnaCAqLwogCiAJY2FzZSBTSU9DR01JSVJFRzoJCS8qIFJlYWQgTUlJIFBIWSByZWdpc3Rlci4gKi8KLQljYXNlIFNJT0NERVZQUklWQVRFKzE6CQkvKiBmb3IgYmluYXJ5IGNvbXBhdCwgcmVtb3ZlIGluIDIuNSAqLwogCQkvKiBUaGUgcGh5X2lkIGlzIG5vdCBlbm91Z2ggdG8gdW5pcXVlbHkgaWRlbnRpZnkKIAkJICogdGhlIGludGVuZGVkIHRhcmdldC4gVGhlcmVmb3JlIHRoZSBjb21tYW5kIGlzIHNlbnQgdG8KIAkJICogdGhlIGdpdmVuIG1paSBvbiB0aGUgY3VycmVudCBwb3J0LgpAQCAtMzA3Nyw5ICszMDc1LDYgQEAKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNJT0NTTUlJUkVHOgkJLyogV3JpdGUgTUlJIFBIWSByZWdpc3Rlci4gKi8KLQljYXNlIFNJT0NERVZQUklWQVRFKzI6CQkvKiBmb3IgYmluYXJ5IGNvbXBhdCwgcmVtb3ZlIGluIDIuNSAqLwotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwogCQlpZiAoZGV2LT5pZl9wb3J0ID09IFBPUlRfVFApIHsKIAkJCWlmICgoZGF0YS0+cGh5X2lkICYgMHgxZikgPT0gbnAtPnBoeV9hZGRyX2V4dGVybmFsKSB7CiAgCQkJCWlmICgoZGF0YS0+cmVnX251bSAmIDB4MWYpID09IE1JSV9BRFZFUlRJU0UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4LWV0aC5jIGIvZHJpdmVycy9uZXQvbmV0eC1ldGguYwppbmRleCA5NDYzNjZkLi45ZjQyMzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4LWV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHgtZXRoLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgbmV0eF9ldGhfcmVjZWl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZQppbmRleCBjZjAxYTkxLi4xMWQ5NGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCiAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xOSwxNiArMjAsMTAgQEAKICMgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KICMgaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAjIAotIyBDb250YWN0IEluZm9ybWF0aW9uOgotIyAgICBpbmZvQG5ldHhlbi5jb20KLSMgTmV0WGVuIEluYywKLSMgMTg5MjIgRm9yZ2UgRHJpdmUKLSMgQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCi0jCiAjCiAKIAogb2JqLSQoQ09ORklHX05FVFhFTl9OSUMpIDo9IG5ldHhlbl9uaWMubwogCiBuZXR4ZW5fbmljLXkgOj0gbmV0eGVuX25pY19ody5vIG5ldHhlbl9uaWNfbWFpbi5vIG5ldHhlbl9uaWNfaW5pdC5vIFwKLQluZXR4ZW5fbmljX2V0aHRvb2wubyBuZXR4ZW5fbmljX25pdS5vIG5ldHhlbl9uaWNfY3R4Lm8KKwluZXR4ZW5fbmljX2V0aHRvb2wubyBuZXR4ZW5fbmljX2N0eC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAppbmRleCBhOWMxZmNjLi43Mzg0ZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIFFMb2dpYyBDb3Jwb3JhdGlvbi4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjAsMTIgKzIxLDYgQEAKICAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCiAgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KICAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4gSW5jLAotICogMTg5MjIgRm9yZ2UgRHJpdmUKLSAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQotICoKICAqLwogCiAjaWZuZGVmIF9ORVRYRU5fTklDX0hfCkBAIC01MywxMiArNDgsMTMgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKKyNpbmNsdWRlICJuZXR4ZW5fbmljX2hkci5oIgogI2luY2x1ZGUgIm5ldHhlbl9uaWNfaHcuaCIKIAogI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiA0CiAjZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX01JTk9SIDAKLSNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfU1VCVkVSU0lPTiAzMAotI2RlZmluZSBORVRYRU5fTklDX0xJTlVYX1ZFUlNJT05JRCAgIjQuMC4zMCIKKyNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfU1VCVkVSU0lPTiA1MAorI2RlZmluZSBORVRYRU5fTklDX0xJTlVYX1ZFUlNJT05JRCAgIjQuMC41MCIKIAogI2RlZmluZSBORVRYRU5fVkVSU0lPTl9DT0RFKGEsIGIsIGMpCSgoKGEpIDw8IDI0KSArICgoYikgPDwgMTYpICsgKGMpKQogI2RlZmluZSBfbWFqb3IodikJKCgodikgPj4gMjQpICYgMHhmZikKQEAgLTE0MywxOCArMTM5LDE0IEBACiAjZGVmaW5lIE5YX0VUSEVSTVRVICAgICAgICAgICAgICAgICAgICAxNTAwCiAjZGVmaW5lIE5YX01BWF9FVEhFUkhEUiAgICAgICAgICAgICAgICAzMiAvKiBUaGlzIGNvbnRhaW5zIHNvbWUgcGFkZGluZyAqLwogCi0jZGVmaW5lIE5YX1JYX05PUk1BTF9CVUZfTUFYX0xFTiAgICAgICAoTlhfTUFYX0VUSEVSSERSICsgTlhfRVRIRVJNVFUpCisjZGVmaW5lIE5YX1AyX1JYX0JVRl9NQVhfTEVOICAgICAgICAgICAxNzYwCisjZGVmaW5lIE5YX1AzX1JYX0JVRl9NQVhfTEVOICAgICAgICAgICAoTlhfTUFYX0VUSEVSSERSICsgTlhfRVRIRVJNVFUpCiAjZGVmaW5lIE5YX1AyX1JYX0pVTUJPX0JVRl9NQVhfTEVOICAgICAoTlhfTUFYX0VUSEVSSERSICsgUDJfTUFYX01UVSkKICNkZWZpbmUgTlhfUDNfUlhfSlVNQk9fQlVGX01BWF9MRU4gICAgIChOWF9NQVhfRVRIRVJIRFIgKyBQM19NQVhfTVRVKQogI2RlZmluZSBOWF9DVF9ERUZBVUxUX1JYX0JVRl9MRU4JMjA0OAorI2RlZmluZSBOWF9MUk9fQlVGRkVSX0VYVFJBCQkyMDQ4CiAKLSNkZWZpbmUgTUFYX1JYX0JVRkZFUl9MRU5HVEgJCTE3NjAKLSNkZWZpbmUgTUFYX1JYX0pVTUJPX0JVRkZFUl9MRU5HVEggCTgwNjIKLSNkZWZpbmUgTUFYX1JYX0xST19CVUZGRVJfTEVOR1RICSg4MDYyKQotI2RlZmluZSBSWF9ETUFfTUFQX0xFTgkJCShNQVhfUlhfQlVGRkVSX0xFTkdUSCAtIDIpCi0jZGVmaW5lIFJYX0pVTUJPX0RNQV9NQVBfTEVOCVwKLQkoTUFYX1JYX0pVTUJPX0JVRkZFUl9MRU5HVEggLSAyKQotI2RlZmluZSBSWF9MUk9fRE1BX01BUF9MRU4JCShNQVhfUlhfTFJPX0JVRkZFUl9MRU5HVEggLSAyKQorI2RlZmluZSBOWF9SWF9MUk9fQlVGRkVSX0xFTkdUSAkJKDgwNjApCiAKIC8qCiAgKiBNYXhpbXVtIG51bWJlciBvZiByaW5nIGNvbnRleHRzCkBAIC0xODEsNiArMTczLDcgQEAKIAogI2RlZmluZSBNQVhfQlVGRkVSU19QRVJfQ01ECTMyCiAjZGVmaW5lIFRYX1NUT1BfVEhSRVNICQkoKE1BWF9TS0JfRlJBR1MgPj4gMikgKyA0KQorI2RlZmluZSBOWF9NQVhfVFhfVElNRU9VVFMJMgogCiAvKgogICogRm9sbG93aW5nIGFyZSB0aGUgc3RhdGVzIG9mIHRoZSBQaGFudG9tLiBQaGFudG9tIHdpbGwgc2V0IHRoZW0gYW5kCkBAIC0yMDAsMTMgKzE5MywyMCBAQAogI2RlZmluZSBSQ1ZfUklOR19KVU1CTwkxCiAjZGVmaW5lIFJDVl9SSU5HX0xSTwkyCiAKLSNkZWZpbmUgTUFYX0NNRF9ERVNDUklQVE9SUwkJNDA5NgotI2RlZmluZSBNQVhfUkNWX0RFU0NSSVBUT1JTCQkxNjM4NAotI2RlZmluZSBNQVhfQ01EX0RFU0NSSVBUT1JTX0hPU1QJMTAyNAotI2RlZmluZSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHCQkyMDQ4Ci0jZGVmaW5lIE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHCQk0MDk2Ci0jZGVmaW5lIE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlMJMTAyNAorI2RlZmluZSBNSU5fQ01EX0RFU0NSSVBUT1JTCQk2NAorI2RlZmluZSBNSU5fUkNWX0RFU0NSSVBUT1JTCQk2NAorI2RlZmluZSBNSU5fSlVNQk9fREVTQ1JJUFRPUlMJCTMyCisKKyNkZWZpbmUgTUFYX0NNRF9ERVNDUklQVE9SUwkJMTAyNAorI2RlZmluZSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHCQk0MDk2CisjZGVmaW5lIE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHCQk4MTkyCisjZGVmaW5lIE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMUcJNTEyCisjZGVmaW5lIE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMTBHCTEwMjQKICNkZWZpbmUgTUFYX0xST19SQ1ZfREVTQ1JJUFRPUlMJCTgKKworI2RlZmluZSBERUZBVUxUX1JDVl9ERVNDUklQVE9SU18xRwkyMDQ4CisjZGVmaW5lIERFRkFVTFRfUkNWX0RFU0NSSVBUT1JTXzEwRwk0MDk2CisKICNkZWZpbmUgTkVUWEVOX0NUWF9TSUdOQVRVUkUJMHhkZWUwCiAjZGVmaW5lIE5FVFhFTl9DVFhfU0lHTkFUVVJFX1YyCTB4MDAwMmRlZTAKICNkZWZpbmUgTkVUWEVOX0NUWF9SRVNFVAkweGJhZDAKQEAgLTIyNSw3ICsyMjUsNyBAQAogI2RlZmluZSBNUE9SVF9TSU5HTEVfRlVOQ1RJT05fTU9ERSAweDExMTEKICNkZWZpbmUgTVBPUlRfTVVMVElfRlVOQ1RJT05fTU9ERSAweDIyMjIKIAotI2luY2x1ZGUgIm5ldHhlbl9uaWNfcGhhbl9yZWcuaCIKKyNkZWZpbmUgTlhfTUFYX1BDSV9GVU5DCQk4CiAKIC8qCiAgKiBOZXRYZW4gaG9zdC1wZWcgc2lnbmFsIG1lc3NhZ2Ugc3RydWN0dXJlCkBAIC0zMDIsNiArMzAyLDEwIEBACiAjZGVmaW5lIEZMQUdTX0lQU0VDX1NBX0FERAkweDA0CiAjZGVmaW5lIEZMQUdTX0lQU0VDX1NBX0RFTEVURQkweDA4CiAjZGVmaW5lIEZMQUdTX1ZMQU5fVEFHR0VECTB4MTAKKyNkZWZpbmUgRkxBR1NfVkxBTl9PT0IJCTB4NDAKKworI2RlZmluZSBuZXR4ZW5fc2V0X3R4X3ZsYW5fdGNpKGNtZF9kZXNjLCB2KQlcCisJKGNtZF9kZXNjKS0+dmxhbl9UQ0kgPSBjcHVfdG9fbGUxNih2KTsKIAogI2RlZmluZSBuZXR4ZW5fc2V0X2NtZF9kZXNjX3BvcnQoY21kX2Rlc2MsIHZhcikJXAogCSgoY21kX2Rlc2MpLT5wb3J0X2N0eGlkIHw9ICgodmFyKSAmIDB4MEYpKQpAQCAtMzE2LDU4ICszMjAsMzMgQEAKIAljcHVfdG9fbGUxNigoKF9mbGFncykgJiAweDdmKSB8ICgoKF9vcGNvZGUpICYgMHgzZikgPDwgNykpCiAKICNkZWZpbmUgbmV0eGVuX3NldF90eF9mcmFnc19sZW4oX2Rlc2MsIF9mcmFncywgX2xlbikgXAotCShfZGVzYyktPm51bV9vZl9idWZmZXJzX3RvdGFsX2xlbmd0aCA9IFwKKwkoX2Rlc2MpLT5uZnJhZ3NfX2xlbmd0aCA9IFwKIAljcHVfdG9fbGUzMigoKF9mcmFncykgJiAweGZmKSB8ICgoKF9sZW4pICYgMHhmZmZmZmYpIDw8IDgpKQogCiBzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgewogCXU4IHRjcF9oZHJfb2Zmc2V0OwkvKiBGb3IgTFNPIG9ubHkgKi8KIAl1OCBpcF9oZHJfb2Zmc2V0OwkvKiBGb3IgTFNPIG9ubHkgKi8KLQkvKiBCaXQgcGF0dGVybjogMC02IGZsYWdzLCA3LTEyIG9wY29kZSwgMTMtMTUgdW51c2VkICovCi0JX19sZTE2IGZsYWdzX29wY29kZTsKLQkvKiBCaXQgcGF0dGVybjogMC03IHRvdGFsIG51bWJlciBvZiBzZWdtZW50cywKLQkgICA4LTMxIFRvdGFsIHNpemUgb2YgdGhlIHBhY2tldCAqLwotCV9fbGUzMiBudW1fb2ZfYnVmZmVyc190b3RhbF9sZW5ndGg7Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJX19sZTMyIGFkZHJfbG93X3BhcnQyOwotCQkJX19sZTMyIGFkZHJfaGlnaF9wYXJ0MjsKLQkJfTsKLQkJX19sZTY0IGFkZHJfYnVmZmVyMjsKLQl9OworCV9fbGUxNiBmbGFnc19vcGNvZGU7CS8qIDE1OjEzIHVudXNlZCwgMTI6NyBvcGNvZGUsIDY6MCBmbGFncyAqLworCV9fbGUzMiBuZnJhZ3NfX2xlbmd0aDsJLyogMzE6OCB0b3RhbCBsZW4sIDc6MCBmcmFnIGNvdW50ICovCiAKLQlfX2xlMTYgcmVmZXJlbmNlX2hhbmRsZTsJLyogY2hhbmdlZCB0byB1MTYgdG8gYWRkIG1zcyAqLwotCV9fbGUxNiBtc3M7CQkvKiBwYXNzZWQgYnkgTkRJU19QQUNLRVQgZm9yIExTTyAqLwotCS8qIEJpdCBwYXR0ZXJuIDAtMyBwb3J0LCAwLTMgY3R4IGlkICovCi0JdTggcG9ydF9jdHhpZDsKKwlfX2xlNjQgYWRkcl9idWZmZXIyOworCisJX19sZTE2IHJlZmVyZW5jZV9oYW5kbGU7CisJX19sZTE2IG1zczsKKwl1OCBwb3J0X2N0eGlkOwkJLyogNzo0IGN0eGlkIDM6MCBwb3J0ICovCiAJdTggdG90YWxfaGRyX2xlbmd0aDsJLyogTFNPIG9ubHkgOiBNQUMrSVArVENQIEhkciBzaXplICovCiAJX19sZTE2IGNvbm5faWQ7CQkvKiBJUFNlYyBvZmZvYWQgb25seSAqLwogCi0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJX19sZTMyIGFkZHJfbG93X3BhcnQzOwotCQkJX19sZTMyIGFkZHJfaGlnaF9wYXJ0MzsKLQkJfTsKLQkJX19sZTY0IGFkZHJfYnVmZmVyMzsKLQl9OwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCV9fbGUzMiBhZGRyX2xvd19wYXJ0MTsKLQkJCV9fbGUzMiBhZGRyX2hpZ2hfcGFydDE7Ci0JCX07Ci0JCV9fbGU2NCBhZGRyX2J1ZmZlcjE7Ci0JfTsKKwlfX2xlNjQgYWRkcl9idWZmZXIzOworCV9fbGU2NCBhZGRyX2J1ZmZlcjE7CiAKIAlfX2xlMTYgYnVmZmVyX2xlbmd0aFs0XTsKIAotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCV9fbGUzMiBhZGRyX2xvd19wYXJ0NDsKLQkJCV9fbGUzMiBhZGRyX2hpZ2hfcGFydDQ7Ci0JCX07Ci0JCV9fbGU2NCBhZGRyX2J1ZmZlcjQ7Ci0JfTsKKwlfX2xlNjQgYWRkcl9idWZmZXI0OwogCi0JX19sZTY0IHVudXNlZDsKKwlfX2xlMzIgcmVzZXJ2ZWQyOworCV9fbGUxNiByZXNlcnZlZDsKKwlfX2xlMTYgdmxhbl9UQ0k7CiAKIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoNjQpKSk7CiAKQEAgLTM4MCw5ICszNTksMTEgQEAKIH07CiAKIC8qIG9wY29kZSBmaWVsZCBpbiBzdGF0dXNfZGVzYyAqLworI2RlZmluZSBORVRYRU5fTklDX1NZTl9PRkZMT0FEICAweDAzCiAjZGVmaW5lIE5FVFhFTl9OSUNfUlhQS1RfREVTQyAgMHgwNAogI2RlZmluZSBORVRYRU5fT0xEX1JYUEtUX0RFU0MgIDB4M2YKICNkZWZpbmUgTkVUWEVOX05JQ19SRVNQT05TRV9ERVNDIDB4MDUKKyNkZWZpbmUgTkVUWEVOX05JQ19MUk9fREVTQyAgCTB4MTIKIAogLyogZm9yIHN0YXR1cyBmaWVsZCBpbiBzdGF0dXNfZGVzYyAqLwogI2RlZmluZSBTVEFUVVNfTkVFRF9DS1NVTQkoMSkKQEAgLTQxNiw2ICszOTcsMjQgQEAKICNkZWZpbmUgbmV0eGVuX2dldF9zdHNfb3Bjb2RlKHN0c19kYXRhKQlcCiAJKCgoc3RzX2RhdGEpID4+IDU4KSAmIDB4MDNGKQogCisjZGVmaW5lIG5ldHhlbl9nZXRfbHJvX3N0c19yZWZoYW5kbGUoc3RzX2RhdGEpIAlcCisJKChzdHNfZGF0YSkgJiAweDBGRkZGKQorI2RlZmluZSBuZXR4ZW5fZ2V0X2xyb19zdHNfbGVuZ3RoKHN0c19kYXRhKQlcCisJKCgoc3RzX2RhdGEpID4+IDE2KSAmIDB4MEZGRkYpCisjZGVmaW5lIG5ldHhlbl9nZXRfbHJvX3N0c19sMl9oZHJfb2Zmc2V0KHN0c19kYXRhKQlcCisJKCgoc3RzX2RhdGEpID4+IDMyKSAmIDB4MEZGKQorI2RlZmluZSBuZXR4ZW5fZ2V0X2xyb19zdHNfbDRfaGRyX29mZnNldChzdHNfZGF0YSkJXAorCSgoKHN0c19kYXRhKSA+PiA0MCkgJiAweDBGRikKKyNkZWZpbmUgbmV0eGVuX2dldF9scm9fc3RzX3RpbWVzdGFtcChzdHNfZGF0YSkJXAorCSgoKHN0c19kYXRhKSA+PiA0OCkgJiAweDEpCisjZGVmaW5lIG5ldHhlbl9nZXRfbHJvX3N0c190eXBlKHN0c19kYXRhKQlcCisJKCgoc3RzX2RhdGEpID4+IDQ5KSAmIDB4NykKKyNkZWZpbmUgbmV0eGVuX2dldF9scm9fc3RzX3B1c2hfZmxhZyhzdHNfZGF0YSkJCVwKKwkoKChzdHNfZGF0YSkgPj4gNTIpICYgMHgxKQorI2RlZmluZSBuZXR4ZW5fZ2V0X2xyb19zdHNfc2VxX251bWJlcihzdHNfZGF0YSkJCVwKKwkoKHN0c19kYXRhKSAmIDB4MEZGRkZGRkZGKQorCisKIHN0cnVjdCBzdGF0dXNfZGVzYyB7CiAJX19sZTY0IHN0YXR1c19kZXNjX2RhdGFbMl07CiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDE2KSkpOwpAQCAtNDU5LDE1NCArNDU4LDYgQEAKICNkZWZpbmUgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1hGUAkweDAwMzIKICNkZWZpbmUgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1RQCTB4MDA4MAogCi1zdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gewotCXUzMiBoZWFkZXJfdmVyc2lvbjsKLQotCXUzMiBib2FyZF9tZmc7Ci0JdTMyIGJvYXJkX3R5cGU7Ci0JdTMyIGJvYXJkX251bTsKLQl1MzIgY2hpcF9pZDsKLQl1MzIgY2hpcF9taW5vcjsKLQl1MzIgY2hpcF9tYWpvcjsKLQl1MzIgY2hpcF9wa2c7Ci0JdTMyIGNoaXBfbG90OwotCi0JdTMyIHBvcnRfbWFzazsJCS8qIGF2YWlsYWJsZSBuaXUgcG9ydHMgKi8KLQl1MzIgcGVnX21hc2s7CQkvKiBhdmFpbGFibGUgcGVncyAqLwotCXUzMiBpY2FjaGVfb2s7CQkvKiBjYW4gd2UgcnVuIHdpdGggaWNhY2hlPyAqLwotCXUzMiBkY2FjaGVfb2s7CQkvKiBjYW4gd2UgcnVuIHdpdGggZGNhY2hlPyAqLwotCXUzMiBjYXNwZXJfb2s7Ci0KLQl1MzIgbWFjX2FkZHJfbG9fMDsKLQl1MzIgbWFjX2FkZHJfbG9fMTsKLQl1MzIgbWFjX2FkZHJfbG9fMjsKLQl1MzIgbWFjX2FkZHJfbG9fMzsKLQotCS8qIE1OLXJlbGF0ZWQgY29uZmlnICovCi0JdTMyIG1uX3N5bmNfbW9kZTsJLyogZW5hYmxlLyBzeW5jIHNoaWZ0IGNjbGsvIHN5bmMgc2hpZnQgbWNsayAqLwotCXUzMiBtbl9zeW5jX3NoaWZ0X2NjbGs7Ci0JdTMyIG1uX3N5bmNfc2hpZnRfbWNsazsKLQl1MzIgbW5fd2JfZW47Ci0JdTMyIG1uX2NyeXN0YWxfZnJlcTsJLyogaW4gTUh6ICovCi0JdTMyIG1uX3NwZWVkOwkJLyogaW4gTUh6ICovCi0JdTMyIG1uX29yZzsKLQl1MzIgbW5fZGVwdGg7Ci0JdTMyIG1uX3JhbmtzXzA7CQkvKiByYW5rcyBwZXIgc2xvdCAqLwotCXUzMiBtbl9yYW5rc18xOwkJLyogcmFua3MgcGVyIHNsb3QgKi8KLQl1MzIgbW5fcmRfbGF0ZW5jeV8wOwotCXUzMiBtbl9yZF9sYXRlbmN5XzE7Ci0JdTMyIG1uX3JkX2xhdGVuY3lfMjsKLQl1MzIgbW5fcmRfbGF0ZW5jeV8zOwotCXUzMiBtbl9yZF9sYXRlbmN5XzQ7Ci0JdTMyIG1uX3JkX2xhdGVuY3lfNTsKLQl1MzIgbW5fcmRfbGF0ZW5jeV82OwotCXUzMiBtbl9yZF9sYXRlbmN5Xzc7Ci0JdTMyIG1uX3JkX2xhdGVuY3lfODsKLQl1MzIgbW5fZGxsX3ZhbFsxOF07Ci0JdTMyIG1uX21vZGVfcmVnOwkvKiBNSVUgRERSIE1vZGUgUmVnaXN0ZXIgKi8KLQl1MzIgbW5fZXh0X21vZGVfcmVnOwkvKiBNSVUgRERSIEV4dGVuZGVkIE1vZGUgUmVnaXN0ZXIgKi8KLQl1MzIgbW5fdGltaW5nXzA7CS8qIE1JVSBNZW1vcnkgQ29udHJvbCBUaW1pbmcgUmdpc3RlciAqLwotCXUzMiBtbl90aW1pbmdfMTsJLyogTUlVIEV4dGVuZGVkIE1lbW9yeSBDdHJsIFRpbWluZyBSZWdpc3RlciAqLwotCXUzMiBtbl90aW1pbmdfMjsJLyogTUlVIEV4dGVuZGVkIE1lbW9yeSBDdHJsIFRpbWluZzIgUmVnaXN0ZXIgKi8KLQotCS8qIFNOLXJlbGF0ZWQgY29uZmlnICovCi0JdTMyIHNuX3N5bmNfbW9kZTsJLyogZW5hYmxlLyBzeW5jIHNoaWZ0IGNjbGsgLyBzeW5jIHNoaWZ0IG1jbGsgKi8KLQl1MzIgc25fcHRfbW9kZTsJCS8qIHBhc3MgdGhyb3VnaCBtb2RlICovCi0JdTMyIHNuX2VjY19lbjsKLQl1MzIgc25fd2JfZW47Ci0JdTMyIHNuX2NyeXN0YWxfZnJlcTsKLQl1MzIgc25fc3BlZWQ7Ci0JdTMyIHNuX29yZzsKLQl1MzIgc25fZGVwdGg7Ci0JdTMyIHNuX2RsbF90YXA7Ci0JdTMyIHNuX3JkX2xhdGVuY3k7Ci0KLQl1MzIgbWFjX2FkZHJfaGlfMDsKLQl1MzIgbWFjX2FkZHJfaGlfMTsKLQl1MzIgbWFjX2FkZHJfaGlfMjsKLQl1MzIgbWFjX2FkZHJfaGlfMzsKLQotCXUzMiBtYWdpYzsJCS8qIGluZGljYXRlcyBmbGFzaCBoYXMgYmVlbiBpbml0aWFsaXplZCAqLwotCi0JdTMyIG1uX3JkaW1tOwotCXUzMiBtbl9kbGxfb3ZlcnJpZGU7Ci0KLX07Ci0KLSNkZWZpbmUgRkxBU0hfTlVNX1BPUlRTCQkoNCkKLQotc3RydWN0IG5ldHhlbl9mbGFzaF9tYWNfYWRkciB7Ci0JdTMyIGZsYXNoX2FkZHJbMzJdOwotfTsKLQotc3RydWN0IG5ldHhlbl91c2VyX29sZF9pbmZvIHsKLQl1OCBmbGFzaF9tZDVbMTZdOwotCXU4IGNyYmluaXRfbWQ1WzE2XTsKLQl1OCBicmRjZmdfbWQ1WzE2XTsKLQkvKiBib290bG9hZGVyICovCi0JdTMyIGJvb3RsZF92ZXJzaW9uOwotCXUzMiBib290bGRfc2l6ZTsKLQl1OCBib290bGRfbWQ1WzE2XTsKLQkvKiBpbWFnZSAqLwotCXUzMiBpbWFnZV92ZXJzaW9uOwotCXUzMiBpbWFnZV9zaXplOwotCXU4IGltYWdlX21kNVsxNl07Ci0JLyogcHJpbWFyeSBpbWFnZSBzdGF0dXMgKi8KLQl1MzIgcHJpbWFyeV9zdGF0dXM7Ci0JdTMyIHNlY29uZGFyeV9wcmVzZW50OwotCi0JLyogTUFDIGFkZHJlc3MgLCA0IHBvcnRzICovCi0Jc3RydWN0IG5ldHhlbl9mbGFzaF9tYWNfYWRkciBtYWNfYWRkcltGTEFTSF9OVU1fUE9SVFNdOwotfTsKLSNkZWZpbmUgRkxBU0hfTlVNX01BQ19QRVJfUE9SVAkzMgotc3RydWN0IG5ldHhlbl91c2VyX2luZm8gewotCXU4IGZsYXNoX21kNVsxNiAqIDY0XTsKLQkvKiBib290bG9hZGVyICovCi0JdTMyIGJvb3RsZF92ZXJzaW9uOwotCXUzMiBib290bGRfc2l6ZTsKLQkvKiBpbWFnZSAqLwotCXUzMiBpbWFnZV92ZXJzaW9uOwotCXUzMiBpbWFnZV9zaXplOwotCS8qIHByaW1hcnkgaW1hZ2Ugc3RhdHVzICovCi0JdTMyIHByaW1hcnlfc3RhdHVzOwotCXUzMiBzZWNvbmRhcnlfcHJlc2VudDsKLQotCS8qIE1BQyBhZGRyZXNzICwgNCBwb3J0cywgMzIgYWRkcmVzcyBwZXIgcG9ydCAqLwotCXU2NCBtYWNfYWRkcltGTEFTSF9OVU1fUE9SVFMgKiBGTEFTSF9OVU1fTUFDX1BFUl9QT1JUXTsKLQl1MzIgc3ViX3N5c19pZDsKLQl1OCBzZXJpYWxfbnVtWzMyXTsKLQotCS8qIEFueSB1c2VyIGRlZmluZWQgZGF0YSAqLwotfTsKLQotLyoKLSAqIEZsYXNoIExheW91dCAtIG5ldyBmb3JtYXQuCi0gKi8KLXN0cnVjdCBuZXR4ZW5fbmV3X3VzZXJfaW5mbyB7Ci0JdTggZmxhc2hfbWQ1WzE2ICogNjRdOwotCS8qIGJvb3Rsb2FkZXIgKi8KLQl1MzIgYm9vdGxkX3ZlcnNpb247Ci0JdTMyIGJvb3RsZF9zaXplOwotCS8qIGltYWdlICovCi0JdTMyIGltYWdlX3ZlcnNpb247Ci0JdTMyIGltYWdlX3NpemU7Ci0JLyogcHJpbWFyeSBpbWFnZSBzdGF0dXMgKi8KLQl1MzIgcHJpbWFyeV9zdGF0dXM7Ci0JdTMyIHNlY29uZGFyeV9wcmVzZW50OwotCi0JLyogTUFDIGFkZHJlc3MgLCA0IHBvcnRzLCAzMiBhZGRyZXNzIHBlciBwb3J0ICovCi0JdTY0IG1hY19hZGRyW0ZMQVNIX05VTV9QT1JUUyAqIEZMQVNIX05VTV9NQUNfUEVSX1BPUlRdOwotCXUzMiBzdWJfc3lzX2lkOwotCXU4IHNlcmlhbF9udW1bMzJdOwotCi0JLyogQW55IHVzZXIgZGVmaW5lZCBkYXRhICovCi19OwotCi0jZGVmaW5lIFNFQ09OREFSWV9JTUFHRV9QUkVTRU5UIDB4YjNiNGI1YjYKLSNkZWZpbmUgU0VDT05EQVJZX0lNQUdFX0FCU0VOVAkweGZmZmZmZmZmCi0jZGVmaW5lIFBSSU1BUllfSU1BR0VfR09PRAkweDVhNWE1YTVhCi0jZGVmaW5lIFBSSU1BUllfSU1BR0VfQkFECTB4ZmZmZmZmZmYKLQogLyogRmxhc2ggbWVtb3J5IG1hcCAqLwogI2RlZmluZSBORVRYRU5fQ1JCSU5JVF9TVEFSVAkwCS8qIGNyYmluaXQgc2VjdGlvbiAqLwogI2RlZmluZSBORVRYRU5fQlJEQ0ZHX1NUQVJUCTB4NDAwMAkvKiBib2FyZCBjb25maWcgKi8KQEAgLTYxNywyOCArNDY4LDI1IEBACiAjZGVmaW5lIE5FVFhFTl9QWEVfU1RBUlQJMHgzRTAwMDAJLyogUFhFIGJvb3Qgcm9tICovCiAjZGVmaW5lIE5FVFhFTl9VU0VSX1NUQVJUCTB4M0U4MDAwCS8qIEZpcm1hcmUgaW5mbyAqLwogI2RlZmluZSBORVRYRU5fRklYRURfU1RBUlQJMHgzRjAwMDAJLyogYmFja3VwIG9mIGNyYmluaXQgKi8KKyNkZWZpbmUgTkVUWEVOX1VTRVJfU1RBUlRfT0xECU5FVFhFTl9QWEVfU1RBUlQgLyogdmVyeSBvbGQgZmxhc2ggKi8KIAorI2RlZmluZSBOWF9PTERfTUFDX0FERFJfT0ZGU0VUCShORVRYRU5fVVNFUl9TVEFSVCkKICNkZWZpbmUgTlhfRldfVkVSU0lPTl9PRkZTRVQJKE5FVFhFTl9VU0VSX1NUQVJUKzB4NDA4KQogI2RlZmluZSBOWF9GV19TSVpFX09GRlNFVAkoTkVUWEVOX1VTRVJfU1RBUlQrMHg0MGMpCisjZGVmaW5lIE5YX0ZXX01BQ19BRERSX09GRlNFVAkoTkVUWEVOX1VTRVJfU1RBUlQrMHg0MTgpCisjZGVmaW5lIE5YX0ZXX1NFUklBTF9OVU1fT0ZGU0VUCShORVRYRU5fVVNFUl9TVEFSVCsweDgxYykKICNkZWZpbmUgTlhfQklPU19WRVJTSU9OX09GRlNFVAkoTkVUWEVOX1VTRVJfU1RBUlQrMHg4M2MpCisKKyNkZWZpbmUgTlhfSERSX1ZFUlNJT05fT0ZGU0VUCShORVRYRU5fQlJEQ0ZHX1NUQVJUKQorI2RlZmluZSBOWF9CUkRUWVBFX09GRlNFVAkoTkVUWEVOX0JSRENGR19TVEFSVCsweDgpCiAjZGVmaW5lIE5YX0ZXX01BR0lDX09GRlNFVAkoTkVUWEVOX0JSRENGR19TVEFSVCsweDEyOCkKKwogI2RlZmluZSBOWF9GV19NSU5fU0laRQkJKDB4M2ZmZmZmKQogI2RlZmluZSBOWF9QMl9NTl9ST01JTUFHRQkwCiAjZGVmaW5lIE5YX1AzX0NUX1JPTUlNQUdFCTEKICNkZWZpbmUgTlhfUDNfTU5fUk9NSU1BR0UJMgogI2RlZmluZSBOWF9GTEFTSF9ST01JTUFHRQkzCiAKLSNkZWZpbmUgTkVUWEVOX1VTRVJfU1RBUlRfT0xEIE5FVFhFTl9QWEVfU1RBUlQJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQotI2RlZmluZSBORVRYRU5fRkxBU0hfU1RBUlQJCShORVRYRU5fQ1JCSU5JVF9TVEFSVCkKLSNkZWZpbmUgTkVUWEVOX0lOSVRfU0VDVE9SCQkoMCkKLSNkZWZpbmUgTkVUWEVOX1BSSU1BUllfU1RBUlQgCQkoTkVUWEVOX0JPT1RMRF9TVEFSVCkKLSNkZWZpbmUgTkVUWEVOX0ZMQVNIX0NSQklOSVRfU0laRSAJKDB4NDAwMCkKLSNkZWZpbmUgTkVUWEVOX0ZMQVNIX0JSRENGR19TSVpFIAkoc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbykpCi0jZGVmaW5lIE5FVFhFTl9GTEFTSF9VU0VSX1NJWkUJCShzaXplb2Yoc3RydWN0IG5ldHhlbl91c2VyX2luZm8pL3NpemVvZih1MzIpKQotI2RlZmluZSBORVRYRU5fRkxBU0hfU0VDT05EQVJZX1NJWkUgCShORVRYRU5fVVNFUl9TVEFSVC1ORVRYRU5fU0VDT05EQVJZX1NUQVJUKQotI2RlZmluZSBORVRYRU5fTlVNX1BSSU1BUllfU0VDVE9SUwkoMHgyMCkKLSNkZWZpbmUgTkVUWEVOX05VTV9DT05GSUdfU0VDVE9SUyAJKDEpCiBleHRlcm4gY2hhciBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lW107CiAKIC8qIE51bWJlciBvZiBzdGF0dXMgZGVzY3JpcHRvcnMgdG8gaGFuZGxlIHBlciBpbnRlcnJ1cHQgKi8KQEAgLTY1MywxNyArNTAxLDExIEBACiAJdTY0IGxlbmd0aDsKIH07CiAKLSNkZWZpbmUgX25ldHhlbl9zZXRfYml0cyhjb25maWdfd29yZCwgc3RhcnQsIGJpdHMsIHZhbCkJe1wKLQl1bnNpZ25lZCBsb25nIGxvbmcgX190bWFzayA9ICgoKDFVTEwgPDwgKGJpdHMpKSAtIDEpIDw8IChzdGFydCkpO1wKLQl1bnNpZ25lZCBsb25nIGxvbmcgX190dmFsdWUgPSAodmFsKTsgICAgXAotCShjb25maWdfd29yZCkgJj0gfl9fdG1hc2s7ICAgICAgXAotCShjb25maWdfd29yZCkgfD0gKCgoX190dmFsdWUpIDw8IChzdGFydCkpICYgX190bWFzayk7IFwKLX0KLQotI2RlZmluZSBfbmV0eGVuX2NsZWFyX2JpdHMoY29uZmlnX3dvcmQsIHN0YXJ0LCBiaXRzKSB7XAotCXVuc2lnbmVkIGxvbmcgbG9uZyBfX3RtYXNrID0gKCgoMVVMTCA8PCAoYml0cykpIC0gMSkgPDwgKHN0YXJ0KSk7ICBcCi0JKGNvbmZpZ193b3JkKSAmPSB+X190bWFzazsgXAotfQorc3RydWN0IG5ldHhlbl9yZWN2X2NyYiB7CisJdTMyIGNyYl9yY3ZfcHJvZHVjZXJbTlVNX1JDVl9ERVNDX1JJTkdTXTsKKwl1MzIgY3JiX3N0c19jb25zdW1lcltOVU1fU1RTX0RFU0NfUklOR1NdOworCXUzMiBzd19pbnRfbWFza1tOVU1fU1RTX0RFU0NfUklOR1NdOworfTsKIAogLyogICAgRm9sbG93aW5nIGRlZmluZXMgYXJlIGZvciB0aGUgc3RhdGUgb2YgdGhlIGJ1ZmZlcnMgICAgKi8KICNkZWZpbmUJTkVUWEVOX0JVRkZFUl9GUkVFCTAKQEAgLTcwNiw4ICs1NDgsOCBAQAogCiAJaW50IHFkcl9zbl93aW5kb3c7CiAJaW50IGRkcl9tbl93aW5kb3c7Ci0JdW5zaWduZWQgbG9uZyBtbl93aW5fY3JiOwotCXVuc2lnbmVkIGxvbmcgbXNfd2luX2NyYjsKKwl1MzIgbW5fd2luX2NyYjsKKwl1MzIgbXNfd2luX2NyYjsKIAogCXU4IGN1dF90aHJvdWdoOwogCXU4IHJldmlzaW9uX2lkOwpAQCAtNzI2LDcgKzU2OCw4IEBACiAJdTY0ICByeGRyb3BwZWQ7CiAJdTY0ICB0eGRyb3BwZWQ7CiAJdTY0ICBjc3VtbWVkOwotCXU2NCAgbm9fcmN2OworCXU2NCAgcnhfcGt0czsKKwl1NjQgIGxyb19wa3RzOwogCXU2NCAgcnhieXRlczsKIAl1NjQgIHR4Ynl0ZXM7CiB9OwpAQCAtNzM3LDExICs1ODAsMTEgQEAKICAqLwogc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgewogCXUzMiBwcm9kdWNlcjsKLQl1MzIgY3JiX3Jjdl9wcm9kdWNlcjsKIAl1MzIgbnVtX2Rlc2M7CiAJdTMyIGRtYV9zaXplOwogCXUzMiBza2Jfc2l6ZTsKIAl1MzIgZmxhZ3M7CisJdm9pZCBfX2lvbWVtICpjcmJfcmN2X3Byb2R1Y2VyOwogCXN0cnVjdCByY3ZfZGVzYyAqZGVzY19oZWFkOwogCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpyeF9idWZfYXJyOwogCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OwpAQCAtNzUxLDkgKzU5NCw5IEBACiAKIHN0cnVjdCBueF9ob3N0X3Nkc19yaW5nIHsKIAl1MzIgY29uc3VtZXI7Ci0JdTMyIGNyYl9zdHNfY29uc3VtZXI7Ci0JdTMyIGNyYl9pbnRyX21hc2s7CiAJdTMyIG51bV9kZXNjOworCXZvaWQgX19pb21lbSAqY3JiX3N0c19jb25zdW1lcjsKKwl2b2lkIF9faW9tZW0gKmNyYl9pbnRyX21hc2s7CiAKIAlzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmRlc2NfaGVhZDsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXI7CkBAIC03NzAsOCArNjEzLDggQEAKIAl1MzIgcHJvZHVjZXI7CiAJX19sZTMyICpod19jb25zdW1lcjsKIAl1MzIgc3dfY29uc3VtZXI7Ci0JdTMyIGNyYl9jbWRfcHJvZHVjZXI7Ci0JdTMyIGNyYl9jbWRfY29uc3VtZXI7CisJdm9pZCBfX2lvbWVtICpjcmJfY21kX3Byb2R1Y2VyOworCXZvaWQgX19pb21lbSAqY3JiX2NtZF9jb25zdW1lcjsKIAl1MzIgbnVtX2Rlc2M7CiAKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CkBAIC04NDAsNyArNjgzLDE5IEBACiAjZGVmaW5lIE5YX0NEUlBfQ01EX0dFVF9TVEFUSVNUSUNTICAgICAgICAgIDB4MDAwMDAwMGYKICNkZWZpbmUgTlhfQ0RSUF9DTURfREVMRVRFX1NUQVRJU1RJQ1MgICAgICAgMHgwMDAwMDAxMAogI2RlZmluZSBOWF9DRFJQX0NNRF9TRVRfTVRVICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCi0jZGVmaW5lIE5YX0NEUlBfQ01EX01BWCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMKKyNkZWZpbmUgTlhfQ0RSUF9DTURfUkVBRF9QSFkJCQkweDAwMDAwMDEzCisjZGVmaW5lIE5YX0NEUlBfQ01EX1dSSVRFX1BIWQkJCTB4MDAwMDAwMTQKKyNkZWZpbmUgTlhfQ0RSUF9DTURfUkVBRF9IV19SRUcJCQkweDAwMDAwMDE1CisjZGVmaW5lIE5YX0NEUlBfQ01EX0dFVF9GTE9XX0NUTAkJMHgwMDAwMDAxNgorI2RlZmluZSBOWF9DRFJQX0NNRF9TRVRfRkxPV19DVEwJCTB4MDAwMDAwMTcKKyNkZWZpbmUgTlhfQ0RSUF9DTURfUkVBRF9NQVhfTVRVCQkweDAwMDAwMDE4CisjZGVmaW5lIE5YX0NEUlBfQ01EX1JFQURfTUFYX0xSTwkJMHgwMDAwMDAxOQorI2RlZmluZSBOWF9DRFJQX0NNRF9DT05GSUdVUkVfVE9FCQkweDAwMDAwMDFhCisjZGVmaW5lIE5YX0NEUlBfQ01EX0ZVTkNfQVRUUklCCQkJMHgwMDAwMDAxYgorI2RlZmluZSBOWF9DRFJQX0NNRF9SRUFEX1BFWFFfUEFSQU1FVEVSUwkweDAwMDAwMDFjCisjZGVmaW5lIE5YX0NEUlBfQ01EX0dFVF9MSUNfQ0FQQUJJTElUSUVTCTB4MDAwMDAwMWQKKyNkZWZpbmUgTlhfQ0RSUF9DTURfUkVBRF9NQVhfTFJPX1BFUl9CT0FSRAkweDAwMDAwMDFlCisjZGVmaW5lIE5YX0NEUlBfQ01EX01BWAkJCQkweDAwMDAwMDFmCiAKICNkZWZpbmUgTlhfUkNPREVfU1VDQ0VTUwkJMAogI2RlZmluZSBOWF9SQ09ERV9OT19IT1NUX01FTQkJMQpAQCAtODgxLDYgKzczNiw3IEBACiAjZGVmaW5lIE5YX0NBUDBfTFNPCQkJTlhfQ0FQX0JJVCgwLCA2KQogI2RlZmluZSBOWF9DQVAwX0pVTUJPX0NPTlRJR1VPVVMJTlhfQ0FQX0JJVCgwLCA3KQogI2RlZmluZSBOWF9DQVAwX0xST19DT05USUdVT1VTCQlOWF9DQVBfQklUKDAsIDgpCisjZGVmaW5lIE5YX0NBUDBfSFdfTFJPCQkJTlhfQ0FQX0JJVCgwLCAxMCkKIAogLyoKICAqIENvbnRleHQgc3RhdGUKQEAgLTEwNzgsNiArOTM0LDkgQEAKIAogI2RlZmluZSBOWF9NQUNfRVZFTlQJCTB4MQogCisjZGVmaW5lIE5YX0lQX1VQCQkyCisjZGVmaW5lIE5YX0lQX0RPV04JCTMKKwogLyoKICAqIERyaXZlciAtLT4gRmlybXdhcmUKICAqLwpAQCAtMTEwNCw3ICs5NjMsOSBAQAogI2RlZmluZSBOWF9OSUNfSDJDX09QQ09ERV9QUk9YWV9TVE9QX0RPTkUJCTIwCiAjZGVmaW5lIE5YX05JQ19IMkNfT1BDT0RFX0dFVF9MSU5LRVZFTlQJCQkyMQogI2RlZmluZSBOWF9OSUNfQzJDX09QQ09ERQkJCQkyMgotI2RlZmluZSBOWF9OSUNfSDJDX09QQ09ERV9MQVNUCQkJCTIzCisjZGVmaW5lIE5YX05JQ19IMkNfT1BDT0RFX0NPTkZJR19CUklER0lORyAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIE5YX05JQ19IMkNfT1BDT0RFX0NPTkZJR19IV19MUk8JCQkyNAorI2RlZmluZSBOWF9OSUNfSDJDX09QQ09ERV9MQVNUCQkJCTI1CiAKIC8qCiAgKiBGaXJtd2FyZSAtLT4gRHJpdmVyCkBAIC0xMTMwLDggKzk5MSwyNSBAQAogI2RlZmluZSBWUE9SVF9NSVNTX01PREVfQUNDRVBUX0FMTAkxIC8qIGFjY2VwdCBhbGwgcGFja2V0cyAqLwogI2RlZmluZSBWUE9SVF9NSVNTX01PREVfQUNDRVBUX01VTFRJCTIgLyogYWNjZXB0IHVubWF0Y2hlZCBtdWx0aWNhc3QgKi8KIAorI2RlZmluZSBOWF9OSUNfTFJPX1JFUVVFU1RfRklSU1QJCTAKKyNkZWZpbmUgTlhfTklDX0xST19SRVFVRVNUX0FERF9GTE9XCQkxCisjZGVmaW5lIE5YX05JQ19MUk9fUkVRVUVTVF9ERUxFVEVfRkxPVwkJMgorI2RlZmluZSBOWF9OSUNfTFJPX1JFUVVFU1RfVElNRVIJCTMKKyNkZWZpbmUgTlhfTklDX0xST19SRVFVRVNUX0NMRUFOVVAJCTQKKyNkZWZpbmUgTlhfTklDX0xST19SRVFVRVNUX0FERF9GTE9XX1NDSEVEVUxFRAk1CisjZGVmaW5lIE5YX1RPRV9MUk9fUkVRVUVTVF9BRERfRkxPVwkJNgorI2RlZmluZSBOWF9UT0VfTFJPX1JFUVVFU1RfQUREX0ZMT1dfUkVTUE9OU0UJNworI2RlZmluZSBOWF9UT0VfTFJPX1JFUVVFU1RfREVMRVRFX0ZMT1cJCTgKKyNkZWZpbmUgTlhfVE9FX0xST19SRVFVRVNUX0RFTEVURV9GTE9XX1JFU1BPTlNFCTkKKyNkZWZpbmUgTlhfVE9FX0xST19SRVFVRVNUX1RJTUVSCQkxMAorI2RlZmluZSBOWF9OSUNfTFJPX1JFUVVFU1RfTEFTVAkJCTExCisKICNkZWZpbmUgTlhfRldfQ0FQQUJJTElUWV9MSU5LX05PVElGSUNBVElPTgkoMSA8PCA1KQogI2RlZmluZSBOWF9GV19DQVBBQklMSVRZX1NXSVRDSElORwkJKDEgPDwgNikKKyNkZWZpbmUgTlhfRldfQ0FQQUJJTElUWV9QRVhRCQkJKDEgPDwgNykKKyNkZWZpbmUgTlhfRldfQ0FQQUJJTElUWV9CREcJCQkoMSA8PCA4KQorI2RlZmluZSBOWF9GV19DQVBBQklMSVRZX0ZWTEFOVFgJCSgxIDw8IDkpCisjZGVmaW5lIE5YX0ZXX0NBUEFCSUxJVFlfSFdfTFJPCQkJKDEgPDwgMTApCiAKIC8qIG1vZHVsZSB0eXBlcyAqLwogI2RlZmluZSBMSU5LRVZFTlRfTU9EVUxFX05PVF9QUkVTRU5UCQkJMQpAQCAtMTIwNiw2ICsxMDg0LDggQEAKIAogI2RlZmluZSBORVRYRU5fTklDX01TSV9FTkFCTEVECQkweDAyCiAjZGVmaW5lIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVECQkweDA0CisjZGVmaW5lIE5FVFhFTl9OSUNfTFJPX0VOQUJMRUQJCTB4MDgKKyNkZWZpbmUgTkVUWEVOX05JQ19CUklER0VfRU5BQkxFRCAgICAgICAwWDEwCiAjZGVmaW5lIE5FVFhFTl9JU19NU0lfRkFNSUxZKGFkYXB0ZXIpIFwKIAkoKGFkYXB0ZXIpLT5mbGFncyAmIChORVRYRU5fTklDX01TSV9FTkFCTEVEIHwgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpKQogCkBAIC0xMjE5LDYgKzEwOTksMTAgQEAKICNkZWZpbmUgTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMgNzc3CiAjZGVmaW5lIE5FVFhFTl9OSUNfUEVHX1RVTkUgMAogCisjZGVmaW5lIF9fTlhfRldfQVRUQUNIRUQJCTAKKyNkZWZpbmUgX19OWF9ERVZfVVAJCQkxCisjZGVmaW5lIF9fTlhfUkVTRVRUSU5HCQkJMgorCiBzdHJ1Y3QgbmV0eGVuX2R1bW15X2RtYSB7CiAJdm9pZCAqYWRkcjsKIAlkbWFfYWRkcl90IHBoeXNfYWRkcjsKQEAgLTEyNTUsNyArMTEzOSwxMCBAQAogCXU4IG1heF9tY19jb3VudDsKIAl1OCByc3Nfc3VwcG9ydGVkOwogCXU4IGxpbmtfY2hhbmdlZDsKLQl1MzIgcmVzdjM7CisJdTggZndfd2FpdF9jbnQ7CisJdTggZndfZmFpbF9jbnQ7CisJdTggdHhfdGltZW9fY250OworCXU4IG5lZWRfZndfcmVzZXQ7CiAKIAl1OCBoYXNfbGlua19ldmVudHM7CiAJdTggZndfdHlwZTsKQEAgLTEyNzMsNzkgKzExNjAsNjQgQEAKIAl1MzIgaXJxOwogCXUzMiB0ZW1wOwogCi0JdTMyIG1zaV90Z3Rfc3RhdHVzOwotCXUzMiByZXN2NDsKKwl1MzIgaW50X3ZlY19iaXQ7CisJdTMyIGhlYXJ0Yml0OwogCiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyX3N0YXRzIHN0YXRzOwogCiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgcmVjdl9jdHg7CiAJc3RydWN0IG54X2hvc3RfdHhfcmluZyAqdHhfcmluZzsKIAotCWludCAoKmVuYWJsZV9waHlfaW50ZXJydXB0cykgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqKTsKLQlpbnQgKCpkaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICopOwogCWludCAoKm1hY2FkZHJfc2V0KSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIHU4ICopOwogCWludCAoKnNldF9tdHUpIChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgaW50KTsKIAlpbnQgKCpzZXRfcHJvbWlzYykgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1MzIpOwogCXZvaWQgKCpzZXRfbXVsdGkpIChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLQlpbnQgKCpwaHlfcmVhZCkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCBsb25nIHJlZywgdTMyICopOwotCWludCAoKnBoeV93cml0ZSkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCBsb25nIHJlZywgdTMyIHZhbCk7CisJaW50ICgqcGh5X3JlYWQpIChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgdTMyIHJlZywgdTMyICopOworCWludCAoKnBoeV93cml0ZSkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1MzIgcmVnLCB1MzIgdmFsKTsKIAlpbnQgKCppbml0X3BvcnQpIChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgaW50KTsKIAlpbnQgKCpzdG9wX3BvcnQpIChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKik7CiAKLQl1MzIgKCpod19yZWFkX3d4KShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgdWxvbmcpOwotCWludCAoKmh3X3dyaXRlX3d4KShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgdWxvbmcsIHUzMik7CisJdTMyICgqY3JiX3JlYWQpKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1bG9uZyk7CisJaW50ICgqY3JiX3dyaXRlKShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgdWxvbmcsIHUzMik7CisKIAlpbnQgKCpwY2lfbWVtX3JlYWQpKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1NjQsIHZvaWQgKiwgaW50KTsKIAlpbnQgKCpwY2lfbWVtX3dyaXRlKShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgdTY0LCB2b2lkICosIGludCk7Ci0JaW50ICgqcGNpX3dyaXRlX2ltbWVkaWF0ZSkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIHU2NCwgdTMyKTsKLQl1MzIgKCpwY2lfcmVhZF9pbW1lZGlhdGUpKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1NjQpOworCiAJdW5zaWduZWQgbG9uZyAoKnBjaV9zZXRfd2luZG93KShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwKIAkJCXVuc2lnbmVkIGxvbmcgbG9uZyk7CiAKLQlzdHJ1Y3QgbmV0eGVuX2xlZ2FjeV9pbnRyX3NldCBsZWdhY3lfaW50cjsKKwl1MzIgKCppb19yZWFkKShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgdm9pZCBfX2lvbWVtICopOworCXZvaWQgKCppb193cml0ZSkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIHZvaWQgX19pb21lbSAqLCB1MzIpOworCisJdm9pZCBfX2lvbWVtCSp0Z3RfbWFza19yZWc7CisJdm9pZCBfX2lvbWVtCSpwY2lfaW50X3JlZzsKKwl2b2lkIF9faW9tZW0JKnRndF9zdGF0dXNfcmVnOworCXZvaWQgX19pb21lbQkqY3JiX2ludF9zdGF0ZV9yZWc7CisJdm9pZCBfX2lvbWVtCSppc3JfaW50X3ZlYzsKIAogCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tNU0lYX0VOVFJJRVNfUEVSX0FEQVBURVJdOwogCiAJc3RydWN0IG5ldHhlbl9kdW1teV9kbWEgZHVtbXlfZG1hOwogCi0Jc3RydWN0IHdvcmtfc3RydWN0IHdhdGNoZG9nX3Rhc2s7Ci0Jc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CisJc3RydWN0IGRlbGF5ZWRfd29yayBmd193b3JrOworCiAJc3RydWN0IHdvcmtfc3RydWN0ICB0eF90aW1lb3V0X3Rhc2s7CiAKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHM7CiAKIAlueF9uaWNfaW50cl9jb2FsZXNjZV90IGNvYWw7CiAKLQl1MzIgZndfbWFqb3I7CisJdW5zaWduZWQgbG9uZyBzdGF0ZTsKKwl1MzIgcmVzdjU7CiAJdTMyIGZ3X3ZlcnNpb247CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIH07CiAKLS8qCi0gKiBOZXRYZW4gZG1hIHdhdGNoZG9nIGNvbnRyb2wgc3RydWN0dXJlCi0gKgotICoJQml0IDAJCTogZW5hYmxlZCA9PiBSL086IDEgd2F0Y2hkb2cgYWN0aXZlLCAwIGluYWN0aXZlCi0gKglCaXQgMQkJOiBkaXNhYmxlX3JlcXVlc3QgPT4gMSByZXEgZGlzYWJsZSBkbWEgd2F0Y2hkb2cKLSAqCUJpdCAyCQk6IGVuYWJsZV9yZXF1ZXN0ID0+ICAxIHJlcSBlbmFibGUgZG1hIHdhdGNoZG9nCi0gKglCaXQgMy0zMQk6IHVudXNlZAotICovCitpbnQgbmV0eGVuX25pdV94Z19pbml0X3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCk7CitpbnQgbmV0eGVuX25pdV9kaXNhYmxlX3hnX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIAotI2RlZmluZSBuZXR4ZW5fc2V0X2RtYV93YXRjaGRvZ19kaXNhYmxlX3JlcShjb25maWdfd29yZCkgXAotCV9uZXR4ZW5fc2V0X2JpdHMoY29uZmlnX3dvcmQsIDEsIDEsIDEpCi0jZGVmaW5lIG5ldHhlbl9zZXRfZG1hX3dhdGNoZG9nX2VuYWJsZV9yZXEoY29uZmlnX3dvcmQpIFwKLQlfbmV0eGVuX3NldF9iaXRzKGNvbmZpZ193b3JkLCAyLCAxLCAxKQotI2RlZmluZSBuZXR4ZW5fZ2V0X2RtYV93YXRjaGRvZ19lbmFibGVkKGNvbmZpZ193b3JkKSBcCi0JKChjb25maWdfd29yZCkgJiAweDEpCi0jZGVmaW5lIG5ldHhlbl9nZXRfZG1hX3dhdGNoZG9nX2Rpc2FibGVkKGNvbmZpZ193b3JkKSBcCi0JKCgoY29uZmlnX3dvcmQpID4+IDEpICYgMHgxKQotCi1pbnQgbmV0eGVuX25pdV94Z2JlX2VuYWJsZV9waHlfaW50ZXJydXB0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwotaW50IG5ldHhlbl9uaXVfZ2JlX2VuYWJsZV9waHlfaW50ZXJydXB0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwotaW50IG5ldHhlbl9uaXVfeGdiZV9kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgbmV0eGVuX25pdV9nYmVfZGlzYWJsZV9waHlfaW50ZXJydXB0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwotaW50IG5ldHhlbl9uaXVfZ2JlX3BoeV9yZWFkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgbG9uZyByZWcsCi0JCQkgICAgX191MzIgKiByZWFkdmFsKTsKLWludCBuZXR4ZW5fbml1X2diZV9waHlfd3JpdGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgICBsb25nIHJlZywgX191MzIgdmFsKTsKK2ludCBueF9md19jbWRfcXVlcnlfcGh5KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZywgdTMyICp2YWwpOworaW50IG54X2Z3X2NtZF9zZXRfcGh5KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZywgdTMyIHZhbCk7CiAKIC8qIEZ1bmN0aW9ucyBhdmFpbGFibGUgZnJvbSBuZXR4ZW5fbmljX2h3LmMgKi8KIGludCBuZXR4ZW5fbmljX3NldF9tdHVfeGdiKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IG5ld19tdHUpOwpAQCAtMTM1NSw1MSArMTIyNyw0NSBAQAogaW50IG5ldHhlbl9wM19uaWNfc2V0X21hY19hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTggKmFkZHIpOwogCiAjZGVmaW5lIE5YUkQzMihhZGFwdGVyLCBvZmYpIFwKLQkoYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBvZmYpKQorCShhZGFwdGVyLT5jcmJfcmVhZChhZGFwdGVyLCBvZmYpKQogI2RlZmluZSBOWFdSMzIoYWRhcHRlciwgb2ZmLCB2YWwpIFwKLQkoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgb2ZmLCB2YWwpKQorCShhZGFwdGVyLT5jcmJfd3JpdGUoYWRhcHRlciwgb2ZmLCB2YWwpKQorI2RlZmluZSBOWFJESU8oYWRhcHRlciwgYWRkcikgXAorCShhZGFwdGVyLT5pb19yZWFkKGFkYXB0ZXIsIGFkZHIpKQorI2RlZmluZSBOWFdSSU8oYWRhcHRlciwgYWRkciwgdmFsKSBcCisJKGFkYXB0ZXItPmlvX3dyaXRlKGFkYXB0ZXIsIGFkZHIsIHZhbCkpCisKK2ludCBuZXR4ZW5fcGNpZV9zZW1fbG9jayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgaW50LCB1MzIpOwordm9pZCBuZXR4ZW5fcGNpZV9zZW1fdW5sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCBpbnQpOworCisjZGVmaW5lIG5ldHhlbl9yb21fbG9jayhhKQlcCisJbmV0eGVuX3BjaWVfc2VtX2xvY2soKGEpLCAyLCBORVRYRU5fUk9NX0xPQ0tfSUQpCisjZGVmaW5lIG5ldHhlbl9yb21fdW5sb2NrKGEpCVwKKwluZXR4ZW5fcGNpZV9zZW1fdW5sb2NrKChhKSwgMikKKyNkZWZpbmUgbmV0eGVuX3BoeV9sb2NrKGEpCVwKKwluZXR4ZW5fcGNpZV9zZW1fbG9jaygoYSksIDMsIE5FVFhFTl9QSFlfTE9DS19JRCkKKyNkZWZpbmUgbmV0eGVuX3BoeV91bmxvY2soYSkJXAorCW5ldHhlbl9wY2llX3NlbV91bmxvY2soKGEpLCAzKQorI2RlZmluZSBuZXR4ZW5fYXBpX2xvY2soYSkJXAorCW5ldHhlbl9wY2llX3NlbV9sb2NrKChhKSwgNSwgMCkKKyNkZWZpbmUgbmV0eGVuX2FwaV91bmxvY2soYSkJXAorCW5ldHhlbl9wY2llX3NlbV91bmxvY2soKGEpLCA1KQorI2RlZmluZSBuZXR4ZW5fc3dfbG9jayhhKQlcCisJbmV0eGVuX3BjaWVfc2VtX2xvY2soKGEpLCA2LCAwKQorI2RlZmluZSBuZXR4ZW5fc3dfdW5sb2NrKGEpCVwKKwluZXR4ZW5fcGNpZV9zZW1fdW5sb2NrKChhKSwgNikKKyNkZWZpbmUgY3JiX3dpbl9sb2NrKGEpCVwKKwluZXR4ZW5fcGNpZV9zZW1fbG9jaygoYSksIDcsIE5FVFhFTl9DUkJfV0lOX0xPQ0tfSUQpCisjZGVmaW5lIGNyYl93aW5fdW5sb2NrKGEpCVwKKwluZXR4ZW5fcGNpZV9zZW1fdW5sb2NrKChhKSwgNykKIAogaW50IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgbmV0eGVuX25pY19nZXRfZmlybXdhcmVfaW5mbyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IG5ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCi11MzIgbmV0eGVuX25pY19od19yZWFkX3d4XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1bG9uZyBvZmYpOwotaW50IG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXVsb25nIG9mZiwgdTMyIGRhdGEpOwotaW50IG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkXzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQl1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7Ci1pbnQgbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlXzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQl1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7Ci1pbnQgbmV0eGVuX25pY19wY2lfd3JpdGVfaW1tZWRpYXRlXzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQl1NjQgb2ZmLCB1MzIgZGF0YSk7Ci11MzIgbmV0eGVuX25pY19wY2lfcmVhZF9pbW1lZGlhdGVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYpOwotdm9pZCBuZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXU2NCBvZmYsIHUzMiBkYXRhKTsKLXUzMiBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZik7Ci11bnNpZ25lZCBsb25nIG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyKTsKLXZvaWQgbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJdTMyIHduZHcpOwotCi11MzIgbmV0eGVuX25pY19od19yZWFkX3d4XzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdWxvbmcgb2ZmKTsKLWludCBuZXR4ZW5fbmljX2h3X3dyaXRlX3d4XzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJdWxvbmcgb2ZmLCB1MzIgZGF0YSk7Ci1pbnQgbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQl1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7Ci1pbnQgbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlXzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpOwotaW50IG5ldHhlbl9uaWNfcGNpX3dyaXRlX2ltbWVkaWF0ZV8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXU2NCBvZmYsIHUzMiBkYXRhKTsKLXUzMiBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYpOwotdm9pZCBuZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQl1NjQgb2ZmLCB1MzIgZGF0YSk7Ci11MzIgbmV0eGVuX25pY19wY2lfcmVhZF9ub3JtYWxpemVfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmKTsKLXVuc2lnbmVkIGxvbmcgbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyKTsKLQogLyogRnVuY3Rpb25zIGZyb20gbmV0eGVuX25pY19pbml0LmMgKi8KLXZvaWQgbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9vZmZsb2FkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbmV0eGVuX2luaXRfZHVtbXlfZG1hKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIG5ldHhlbl9mcmVlX2R1bW15X2RtYShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOworCiBpbnQgbmV0eGVuX3BoYW50b21faW5pdChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwZWd0dW5lX3ZhbCk7CiBpbnQgbmV0eGVuX2xvYWRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIGludCBuZXR4ZW5fbmVlZF9md19yZXNldChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwpAQCAtMTQyMywxMyArMTI4OSwxNSBAQAogaW50IG5ldHhlbl9hbGxvY19zd19yZXNvdXJjZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX2ZyZWVfc3dfcmVzb3VyY2VzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiAKK3ZvaWQgbmV0eGVuX3NldHVwX2h3b3BzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIF9faW9tZW0gKm5ldHhlbl9nZXRfaW9hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1MzIpOworCiBpbnQgbmV0eGVuX2FsbG9jX2h3X3Jlc291cmNlcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBuZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIAogdm9pZCBuZXR4ZW5fcmVsZWFzZV9yeF9idWZmZXJzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIG5ldHhlbl9yZWxlYXNlX3R4X2J1ZmZlcnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIAotdm9pZCBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29wcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IG5ldHhlbl9pbml0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIG5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX3dhdGNoZG9nX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKQEAgLTE0NDAsMTQgKzEzMDgsMTkgQEAKIHZvaWQgbmV0eGVuX3AyX25pY19zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiB2b2lkIG5ldHhlbl9wM19uaWNfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogdm9pZCBuZXR4ZW5fcDNfZnJlZV9tYWNfbGlzdChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IG5ldHhlbl9wMl9uaWNfc2V0X3Byb21pc2Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgbW9kZSk7CiBpbnQgbmV0eGVuX3AzX25pY19zZXRfcHJvbWlzYyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMik7CiBpbnQgbmV0eGVuX2NvbmZpZ19pbnRyX2NvYWxlc2NlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiBpbnQgbmV0eGVuX2NvbmZpZ19yc3Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKTsKK2ludCBuZXR4ZW5fY29uZmlnX2lwYWRkcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpcCwgaW50IGNtZCk7CiBpbnQgbmV0eGVuX2xpbmtldmVudF9yZXF1ZXN0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSk7CiB2b2lkIG5ldHhlbl9hZHZlcnRfbGlua19jaGFuZ2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgbGlua3VwKTsKIAogaW50IG54X2Z3X2NtZF9zZXRfbXR1KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IG10dSk7CiBpbnQgbmV0eGVuX25pY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KTsKK2ludCBuZXR4ZW5fY29uZmlnX2h3X2xybyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpOworaW50IG5ldHhlbl9jb25maWdfYnJpZGdlZF9tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSk7CitpbnQgbmV0eGVuX3NlbmRfbHJvX2NsZWFudXAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIAogaW50IG5ldHhlbl9uaWNfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKTsKIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXR4ZW5fbmljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKQEAgLTE0NTUsNiArMTMyOCw5IEBACiB2b2lkIG5ldHhlbl9uaWNfdXBkYXRlX2NtZF9wcm9kdWNlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXN0cnVjdCBueF9ob3N0X3R4X3JpbmcgKnR4X3JpbmcpOwogCisvKiBGdW5jdGlvbnMgZnJvbSBuZXR4ZW5fbmljX21haW4uYyAqLworaW50IG5ldHhlbl9uaWNfcmVzZXRfY29udGV4dChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKik7CisKIC8qCiAgKiBOZXRYZW4gQm9hcmQgaW5mb3JtYXRpb24KICAqLwpAQCAtMTUwNSw1NiArMTM4MSw2IEBACiAJCW5hbWUgPSAiVW5rbm93biI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfd2F0Y2hkb2dfc2h1dGRvd25fcmVxdWVzdChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JdTMyIGN0cmw7Ci0KLQkvKiBjaGVjayBpZiBhbHJlYWR5IGluYWN0aXZlICovCi0JY3RybCA9IGFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwKLQkJCU5FVFhFTl9DQU1fUkFNKE5FVFhFTl9DQU1fUkFNX0RNQV9XQVRDSERPR19DVFJMKSk7Ci0KLQlpZiAobmV0eGVuX2dldF9kbWFfd2F0Y2hkb2dfZW5hYmxlZChjdHJsKSA9PSAwKQotCQlyZXR1cm4gMTsKLQotCS8qIFNlbmQgdGhlIGRpc2FibGUgcmVxdWVzdCAqLwotCW5ldHhlbl9zZXRfZG1hX3dhdGNoZG9nX2Rpc2FibGVfcmVxKGN0cmwpOwotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fQ0FNX1JBTShORVRYRU5fQ0FNX1JBTV9ETUFfV0FUQ0hET0dfQ1RSTCksIGN0cmwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfd2F0Y2hkb2dfc2h1dGRvd25fcG9sbF9yZXN1bHQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCXUzMiBjdHJsOwotCi0JY3RybCA9IGFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwKLQkJCU5FVFhFTl9DQU1fUkFNKE5FVFhFTl9DQU1fUkFNX0RNQV9XQVRDSERPR19DVFJMKSk7Ci0KLQlyZXR1cm4gKG5ldHhlbl9nZXRfZG1hX3dhdGNoZG9nX2VuYWJsZWQoY3RybCkgPT0gMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfd2F0Y2hkb2dfd2FrZXVwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQl1MzIgY3RybDsKLQotCWN0cmwgPSBhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCi0JCQlORVRYRU5fQ0FNX1JBTShORVRYRU5fQ0FNX1JBTV9ETUFfV0FUQ0hET0dfQ1RSTCkpOwotCi0JaWYgKG5ldHhlbl9nZXRfZG1hX3dhdGNoZG9nX2VuYWJsZWQoY3RybCkpCi0JCXJldHVybiAxOwotCi0JLyogc2VuZCB0aGUgd2FrZXVwIHJlcXVlc3QgKi8KLQluZXR4ZW5fc2V0X2RtYV93YXRjaGRvZ19lbmFibGVfcmVxKGN0cmwpOwotCi0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9DQU1fUkFNKE5FVFhFTl9DQU1fUkFNX0RNQV9XQVRDSERPR19DVFJMKSwgY3RybCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW5saW5lIHUzMiBuZXR4ZW5fdHhfYXZhaWwoc3RydWN0IG54X2hvc3RfdHhfcmluZyAqdHhfcmluZykKIHsKIAlzbXBfbWIoKTsKQEAgLTE1NjksNiArMTM5NSw2IEBACiBleHRlcm4gaW50IG5ldHhlbl9yb21fZmFzdF9yZWFkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsCiAJCQkJaW50ICp2YWxwKTsKIAotZXh0ZXJuIHN0cnVjdCBldGh0b29sX29wcyBuZXR4ZW5fbmljX2V0aHRvb2xfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXR4ZW5fbmljX2V0aHRvb2xfb3BzOwogCiAjZW5kaWYJCQkJLyogX19ORVRYRU5fTklDX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19jdHguYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2N0eC5jCmluZGV4IDlmOGFlNDcuLjljYjhmNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2N0eC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2N0eC5jCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwLDU1ICsyMSwxMyBAQAogICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KICAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiBJbmMsCi0gKiAxODkyMiBGb3JnZSBEcml2ZQotICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCi0gKgogICovCiAKICNpbmNsdWRlICJuZXR4ZW5fbmljX2h3LmgiCiAjaW5jbHVkZSAibmV0eGVuX25pYy5oIgotI2luY2x1ZGUgIm5ldHhlbl9uaWNfcGhhbl9yZWcuaCIKIAogI2RlZmluZSBOWEhBTF9WRVJTSU9OCTEKIAotc3RhdGljIGludAotbmV0eGVuX2FwaV9sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQl1MzIgZG9uZSA9IDAsIHRpbWVvdXQgPSAwOwotCi0JZm9yICg7OykgewotCQkvKiBBY3F1aXJlIFBDSUUgSFcgc2VtYXBob3JlNSAqLwotCQlkb25lID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1NFTTVfTE9DSykpOwotCi0JCWlmIChkb25lID09IDEpCi0JCQlicmVhazsKLQotCQlpZiAoKyt0aW1lb3V0ID49IE5YX09TX0NSQl9SRVRSWV9DT1VOVCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbG9jayB0aW1lb3V0LlxuIiwgX19mdW5jX18pOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJbXNsZWVwKDEpOwotCX0KLQotI2lmIDAKLQlOWFdSMzIoYWRhcHRlciwKLQkJTkVUWEVOX0FQSV9MT0NLX0lELCBOWF9PU19BUElfTE9DS19EUklWRVIpOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW5ldHhlbl9hcGlfdW5sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQkvKiBSZWxlYXNlIFBDSUUgSFcgc2VtYXBob3JlNSAqLwotCU5YUkQzMihhZGFwdGVyLCBORVRYRU5fUENJRV9SRUcoUENJRV9TRU01X1VOTE9DSykpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdTMyCiBuZXR4ZW5fcG9sbF9yc3Aoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewpAQCAtMjY1LDcgKzIyNCw4IEBACiAJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbaV07CiAKIAkJcmVnID0gbGUzMl90b19jcHUocHJzcF9yZHNbaV0uaG9zdF9wcm9kdWNlcl9jcmIpOwotCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciA9IE5FVFhFTl9OSUNfUkVHKHJlZyAtIDB4MjAwKTsKKwkJcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIgPSBuZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJCU5FVFhFTl9OSUNfUkVHKHJlZyAtIDB4MjAwKSk7CiAJfQogCiAJcHJzcF9zZHMgPSAoKG54X2NhcmRyc3Bfc2RzX3JpbmdfdCAqKQpAQCAtMjc1LDEwICsyMzUsMTIgQEAKIAkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tpXTsKIAogCQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1tpXS5ob3N0X2NvbnN1bWVyX2NyYik7Ci0JCXNkc19yaW5nLT5jcmJfc3RzX2NvbnN1bWVyID0gTkVUWEVOX05JQ19SRUcocmVnIC0gMHgyMDApOworCQlzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lciA9IG5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJTkVUWEVOX05JQ19SRUcocmVnIC0gMHgyMDApKTsKIAogCQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1tpXS5pbnRlcnJ1cHRfY3JiKTsKLQkJc2RzX3JpbmctPmNyYl9pbnRyX21hc2sgPSBORVRYRU5fTklDX1JFRyhyZWcgLSAweDIwMCk7CisJCXNkc19yaW5nLT5jcmJfaW50cl9tYXNrID0gbmV0eGVuX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCQlORVRYRU5fTklDX1JFRyhyZWcgLSAweDIwMCkpOwogCX0KIAogCXJlY3ZfY3R4LT5zdGF0ZSA9IGxlMzJfdG9fY3B1KHByc3AtPmhvc3RfY3R4X3N0YXRlKTsKQEAgLTM3OCw3ICszNDAsOCBAQAogCiAJaWYgKGVyciA9PSBOWF9SQ09ERV9TVUNDRVNTKSB7CiAJCXRlbXAgPSBsZTMyX3RvX2NwdShwcnNwLT5jZHNfcmluZy5ob3N0X3Byb2R1Y2VyX2NyYik7Ci0JCXR4X3JpbmctPmNyYl9jbWRfcHJvZHVjZXIgPSBORVRYRU5fTklDX1JFRyh0ZW1wIC0gMHgyMDApOworCQl0eF9yaW5nLT5jcmJfY21kX3Byb2R1Y2VyID0gbmV0eGVuX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCQlORVRYRU5fTklDX1JFRyh0ZW1wIC0gMHgyMDApKTsKICNpZiAwCiAJCWFkYXB0ZXItPnR4X3N0YXRlID0KIAkJCWxlMzJfdG9fY3B1KHByc3AtPmhvc3RfY3R4X3N0YXRlKTsKQEAgLTQxNiw2ICszNzksNDQgQEAKIAl9CiB9CiAKK2ludAorbnhfZndfY21kX3F1ZXJ5X3BoeShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiByZWcsIHUzMiAqdmFsKQoreworCXUzMiByY29kZTsKKworCXJjb2RlID0gbmV0eGVuX2lzc3VlX2NtZChhZGFwdGVyLAorCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJTlhIQUxfVkVSU0lPTiwKKwkJCXJlZywKKwkJCTAsCisJCQkwLAorCQkJTlhfQ0RSUF9DTURfUkVBRF9QSFkpOworCisJaWYgKHJjb2RlICE9IE5YX1JDT0RFX1NVQ0NFU1MpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIE5YUkQzMihhZGFwdGVyLCBOWF9BUkcxX0NSQl9PRkZTRVQpOworfQorCitpbnQKK254X2Z3X2NtZF9zZXRfcGh5KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZywgdTMyIHZhbCkKK3sKKwl1MzIgcmNvZGU7CisKKwlyY29kZSA9IG5ldHhlbl9pc3N1ZV9jbWQoYWRhcHRlciwKKwkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCU5YSEFMX1ZFUlNJT04sCisJCQlyZWcsCisJCQl2YWwsCisJCQkwLAorCQkJTlhfQ0RSUF9DTURfV1JJVEVfUEhZKTsKKworCWlmIChyY29kZSAhPSBOWF9SQ09ERV9TVUNDRVNTKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdTY0IGN0eF9hZGRyX3NpZ19yZWdzW11bM10gPSB7CiAJe05FVFhFTl9OSUNfUkVHKDB4MTg4KSwgTkVUWEVOX05JQ19SRUcoMHgxOGMpLCBORVRYRU5fTklDX1JFRygweDFjMCl9LAogCXtORVRYRU5fTklDX1JFRygweDE5MCksIE5FVFhFTl9OSUNfUkVHKDB4MTk0KSwgTkVUWEVOX05JQ19SRUcoMHgxYzQpfSwKQEAgLTY0Nyw5ICs2NDgsMTAgQEAKIAkJfQogCQlyZHNfcmluZy0+ZGVzY19oZWFkID0gKHN0cnVjdCByY3ZfZGVzYyAqKWFkZHI7CiAKLQkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKKwkJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCiAJCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciA9Ci0JCQkJcmVjdl9jcmJfcmVnaXN0ZXJzW3BvcnRdLmNyYl9yY3ZfcHJvZHVjZXJbcmluZ107CisJCQkJbmV0eGVuX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCXJlY3ZfY3JiX3JlZ2lzdGVyc1twb3J0XS5jcmJfcmN2X3Byb2R1Y2VyW3JpbmddKTsKIAl9CiAKIAlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CkBAIC02NjgsMTQgKzY3MCwxOSBAQAogCQlzZHNfcmluZy0+ZGVzY19oZWFkID0gKHN0cnVjdCBzdGF0dXNfZGVzYyAqKWFkZHI7CiAKIAkJc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIgPQotCQkJcmVjdl9jcmJfcmVnaXN0ZXJzW3BvcnRdLmNyYl9zdHNfY29uc3VtZXJbcmluZ107CisJCQluZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJcmVjdl9jcmJfcmVnaXN0ZXJzW3BvcnRdLmNyYl9zdHNfY29uc3VtZXJbcmluZ10pOwogCiAJCXNkc19yaW5nLT5jcmJfaW50cl9tYXNrID0KLQkJCXJlY3ZfY3JiX3JlZ2lzdGVyc1twb3J0XS5zd19pbnRfbWFza1tyaW5nXTsKKwkJCW5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQlyZWN2X2NyYl9yZWdpc3RlcnNbcG9ydF0uc3dfaW50X21hc2tbcmluZ10pOwogCX0KIAogCi0JaWYgKGFkYXB0ZXItPmZ3X21ham9yID49IDQpIHsKKwlpZiAoIU5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoX19OWF9GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJCWdvdG8gZG9uZTsKKwogCQllcnIgPSBueF9md19jbWRfY3JlYXRlX3J4X2N0eChhZGFwdGVyKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyX291dF9mcmVlOwpAQCAtNjg4LDYgKzY5NSw3IEBACiAJCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9CiAKK2RvbmU6CiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfZnJlZToKQEAgLTcwNSw3ICs3MTMsMTAgQEAKIAogCWludCBwb3J0ID0gYWRhcHRlci0+cG9ydG51bTsKIAotCWlmIChhZGFwdGVyLT5md19tYWpvciA+PSA0KSB7CisJaWYgKCFOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KF9fTlhfRldfQVRUQUNIRUQsICZhZGFwdGVyLT5zdGF0ZSkpCisJCQlnb3RvIGRvbmU7CisKIAkJbnhfZndfY21kX2Rlc3Ryb3lfcnhfY3R4KGFkYXB0ZXIpOwogCQlueF9md19jbWRfZGVzdHJveV90eF9jdHgoYWRhcHRlcik7CiAJfSBlbHNlIHsKQEAgLTcxOCw2ICs3MjksNyBAQAogCS8qIEFsbG93IGRtYSBxdWV1ZXMgdG8gZHJhaW4gYWZ0ZXIgY29udGV4dCByZXNldCAqLwogCW1zbGVlcCgyMCk7CiAKK2RvbmU6CiAJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CiAKIAlpZiAocmVjdl9jdHgtPmh3Y3R4ICE9IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwppbmRleCBlMTZlYTQ2Li43MTRmMzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwLDEyICsyMSw2IEBACiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgogICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAgKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuIEluYywKLSAqIDE4OTIyIEZvcmdlIERyaXZlCi0gKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKLSAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0zNyw3ICszMiw2IEBACiAKICNpbmNsdWRlICJuZXR4ZW5fbmljLmgiCiAjaW5jbHVkZSAibmV0eGVuX25pY19ody5oIgotI2luY2x1ZGUgIm5ldHhlbl9uaWNfcGhhbl9yZWcuaCIKIAogc3RydWN0IG5ldHhlbl9uaWNfc3RhdHMgewogCWNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKQEAgLTU3LDcgKzUxLDggQEAKIAl7InJ4X2Ryb3BwZWQiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMucnhkcm9wcGVkKX0sCiAJeyJ0eF9kcm9wcGVkIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLnR4ZHJvcHBlZCl9LAogCXsiY3N1bW1lZCIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy5jc3VtbWVkKX0sCi0JeyJub19yY3YiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMubm9fcmN2KX0sCisJeyJyeF9wa3RzIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLnJ4X3BrdHMpfSwKKwl7Imxyb19wa3RzIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLmxyb19wa3RzKX0sCiAJeyJyeF9ieXRlcyIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy5yeGJ5dGVzKX0sCiAJeyJ0eF9ieXRlcyIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy50eGJ5dGVzKX0sCiB9OwpAQCAtODQsMTggKzc5LDE3IEBACiBuZXR4ZW5fbmljX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBmd19tYWpvciA9IDA7CiAJdTMyIGZ3X21pbm9yID0gMDsKIAl1MzIgZndfYnVpbGQgPSAwOwogCiAJc3RybmNweShkcnZpbmZvLT5kcml2ZXIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIDMyKTsKIAlzdHJuY3B5KGRydmluZm8tPnZlcnNpb24sIE5FVFhFTl9OSUNfTElOVVhfVkVSU0lPTklELCAzMik7Ci0Jd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKwlyZWFkX2xvY2soJmFkYXB0ZXItPmFkYXB0ZXJfbG9jayk7CiAJZndfbWFqb3IgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX0ZXX1ZFUlNJT05fTUFKT1IpOwogCWZ3X21pbm9yID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9GV19WRVJTSU9OX01JTk9SKTsKIAlmd19idWlsZCA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fRldfVkVSU0lPTl9TVUIpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKKwlyZWFkX3VubG9jaygmYWRhcHRlci0+YWRhcHRlcl9sb2NrKTsKIAlzcHJpbnRmKGRydmluZm8tPmZ3X3ZlcnNpb24sICIlZC4lZC4lZCIsIGZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQpOwogCiAJc3RybmNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYWRhcHRlci0+cGRldiksIDMyKTsKQEAgLTQ5MCwyOCArNDg0LDg2IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1uZXR4ZW5fbmljX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQorbmV0eGVuX25pY19nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmluZy0+cnhfcGVuZGluZyA9IDA7Ci0JcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IDA7Ci0JcmluZy0+cnhfcGVuZGluZyArPSBhZGFwdGVyLT5yZWN2X2N0eC4KLQkJcmRzX3JpbmdzW1JDVl9SSU5HX05PUk1BTF0ubnVtX2Rlc2M7Ci0JcmluZy0+cnhfanVtYm9fcGVuZGluZyArPSBhZGFwdGVyLT5yZWN2X2N0eC4KLQkJcmRzX3JpbmdzW1JDVl9SSU5HX0pVTUJPXS5udW1fZGVzYzsKKwlyaW5nLT5yeF9wZW5kaW5nID0gYWRhcHRlci0+bnVtX3J4ZDsKKwlyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gYWRhcHRlci0+bnVtX2p1bWJvX3J4ZDsKKwlyaW5nLT5yeF9qdW1ib19wZW5kaW5nICs9IGFkYXB0ZXItPm51bV9scm9fcnhkOwogCXJpbmctPnR4X3BlbmRpbmcgPSBhZGFwdGVyLT5udW1fdHhkOwogCi0JaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKIAkJcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHOwotCWVsc2UKKwkJcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTXzFHOworCX0gZWxzZSB7CiAJCXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JDVl9ERVNDUklQVE9SU18xMEc7Ci0JcmluZy0+dHhfbWF4X3BlbmRpbmcgPSBNQVhfQ01EX0RFU0NSSVBUT1JTX0hPU1Q7Ci0JcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTOworCQlyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMTBHOworCX0KKworCXJpbmctPnR4X21heF9wZW5kaW5nID0gTUFYX0NNRF9ERVNDUklQVE9SUzsKKwogCXJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOwogCXJpbmctPnJ4X21pbmlfcGVuZGluZyA9IDA7CiB9CiAKK3N0YXRpYyB1MzIKK25ldHhlbl92YWxpZGF0ZV9yaW5ncGFyYW0odTMyIHZhbCwgdTMyIG1pbiwgdTMyIG1heCwgY2hhciAqcl9uYW1lKQoreworCXUzMiBudW1fZGVzYzsKKwludW1fZGVzYyA9IG1heCh2YWwsIG1pbik7CisJbnVtX2Rlc2MgPSBtaW4obnVtX2Rlc2MsIG1heCk7CisJbnVtX2Rlc2MgPSByb3VuZHVwX3Bvd19vZl90d28obnVtX2Rlc2MpOworCisJaWYgKHZhbCAhPSBudW1fZGVzYykgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogc2V0dGluZyAlcyByaW5nIHNpemUgJWQgaW5zdGVhZCBvZiAlZFxuIiwKKwkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIHJfbmFtZSwgbnVtX2Rlc2MsIHZhbCk7CisJfQorCisJcmV0dXJuIG51bV9kZXNjOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJdTE2IG1heF9yY3ZfZGVzYyA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOworCXUxNiBtYXhfanVtYm9fZGVzYyA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMTBHOworCXUxNiBudW1fcnhkLCBudW1fanVtYm9fcnhkLCBudW1fdHhkOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChyaW5nLT5yeF9taW5pX3BlbmRpbmcpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJCW1heF9yY3ZfZGVzYyA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7CisJCW1heF9qdW1ib19kZXNjID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xMEc7CisJfQorCisJbnVtX3J4ZCA9IG5ldHhlbl92YWxpZGF0ZV9yaW5ncGFyYW0ocmluZy0+cnhfcGVuZGluZywKKwkJCU1JTl9SQ1ZfREVTQ1JJUFRPUlMsIG1heF9yY3ZfZGVzYywgInJ4Iik7CisKKwludW1fanVtYm9fcnhkID0gbmV0eGVuX3ZhbGlkYXRlX3JpbmdwYXJhbShyaW5nLT5yeF9qdW1ib19wZW5kaW5nLAorCQkJTUlOX0pVTUJPX0RFU0NSSVBUT1JTLCBtYXhfanVtYm9fZGVzYywgInJ4IGp1bWJvIik7CisKKwludW1fdHhkID0gbmV0eGVuX3ZhbGlkYXRlX3JpbmdwYXJhbShyaW5nLT50eF9wZW5kaW5nLAorCQkJTUlOX0NNRF9ERVNDUklQVE9SUywgTUFYX0NNRF9ERVNDUklQVE9SUywgInR4Iik7CisKKwlpZiAobnVtX3J4ZCA9PSBhZGFwdGVyLT5udW1fcnhkICYmIG51bV90eGQgPT0gYWRhcHRlci0+bnVtX3R4ZCAmJgorCQkJbnVtX2p1bWJvX3J4ZCA9PSBhZGFwdGVyLT5udW1fanVtYm9fcnhkKQorCQlyZXR1cm4gMDsKKworCWFkYXB0ZXItPm51bV9yeGQgPSBudW1fcnhkOworCWFkYXB0ZXItPm51bV9qdW1ib19yeGQgPSBudW1fanVtYm9fcnhkOworCWFkYXB0ZXItPm51bV90eGQgPSBudW1fdHhkOworCisJcmV0dXJuIG5ldHhlbl9uaWNfcmVzZXRfY29udGV4dChhZGFwdGVyKTsKK30KKwogc3RhdGljIHZvaWQKIG5ldHhlbl9uaWNfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCkBAIC04ODMsNyArOTM1LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBldGh0b29sX29wcyBuZXR4ZW5fbmljX2V0aHRvb2xfb3BzID0geworc3RhdGljIGludCBuZXR4ZW5fbmljX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBod19scm87CisKKwlpZiAoIShhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBOWF9GV19DQVBBQklMSVRZX0hXX0xSTykpCisJCXJldHVybiAtRUlOVkFMOworCisJZXRodG9vbF9vcF9zZXRfZmxhZ3MobmV0ZGV2LCBkYXRhKTsKKworCWh3X2xybyA9IChkYXRhICYgRVRIX0ZMQUdfTFJPKSA/IE5FVFhFTl9OSUNfTFJPX0VOQUJMRUQgOiAwOworCisJaWYgKG5ldHhlbl9jb25maWdfaHdfbHJvKGFkYXB0ZXIsIGh3X2xybykpCisJCXJldHVybiAtRUlPOworCisJaWYgKChod19scm8gPT0gMCkgJiYgbmV0eGVuX3NlbmRfbHJvX2NsZWFudXAoYWRhcHRlcikpCisJCXJldHVybiAtRUlPOworCisKKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldHhlbl9uaWNfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IG5ldHhlbl9uaWNfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBuZXR4ZW5fbmljX3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8gPSBuZXR4ZW5fbmljX2dldF9kcnZpbmZvLApAQCAtODkzLDYgKzk2Nyw3IEBACiAJLmdldF9lZXByb21fbGVuID0gbmV0eGVuX25pY19nZXRfZWVwcm9tX2xlbiwKIAkuZ2V0X2VlcHJvbSA9IG5ldHhlbl9uaWNfZ2V0X2VlcHJvbSwKIAkuZ2V0X3JpbmdwYXJhbSA9IG5ldHhlbl9uaWNfZ2V0X3JpbmdwYXJhbSwKKwkuc2V0X3JpbmdwYXJhbSA9IG5ldHhlbl9uaWNfc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0gPSBuZXR4ZW5fbmljX2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbSA9IG5ldHhlbl9uaWNfc2V0X3BhdXNlcGFyYW0sCiAJLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKQEAgLTkwOSw0ICs5ODQsNiBAQAogCS5zZXRfcnhfY3N1bSA9IG5ldHhlbl9uaWNfc2V0X3J4X2NzdW0sCiAJLmdldF9jb2FsZXNjZSA9IG5ldHhlbl9nZXRfaW50cl9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlID0gbmV0eGVuX3NldF9pbnRyX2NvYWxlc2NlLAorCS5nZXRfZmxhZ3MgPSBldGh0b29sX29wX2dldF9mbGFncywKKwkuc2V0X2ZsYWdzID0gbmV0eGVuX25pY19zZXRfZmxhZ3MsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaAppbmRleCA4MjQxMDM2Li43YTcxNzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gUUxvZ2ljIENvcnBvcmF0aW9uLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMCwxMiArMjEsNiBAQAogICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KICAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiBJbmMsCi0gKiAxODkyMiBGb3JnZSBEcml2ZQotICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCi0gKgogICovCiAKICNpZm5kZWYgX19ORVRYRU5fTklDX0hEUl9IXwpAQCAtNDMzLDYgKzQyOCw3IEBACiAjZGVmaW5lIE5FVFhFTl9DUkJfUEVHX05FVF8xCU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9QR04xKQogI2RlZmluZSBORVRYRU5fQ1JCX1BFR19ORVRfMglORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfUEdOMikKICNkZWZpbmUgTkVUWEVOX0NSQl9QRUdfTkVUXzMJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX1BHTjMpCisjZGVmaW5lIE5FVFhFTl9DUkJfUEVHX05FVF80CU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9TUVMyKQogI2RlZmluZSBORVRYRU5fQ1JCX1BFR19ORVRfRAlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfUEdORCkKICNkZWZpbmUgTkVUWEVOX0NSQl9QRUdfTkVUX0kJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX1BHTkkpCiAjZGVmaW5lIE5FVFhFTl9DUkJfRERSX05FVAlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfTU4pCkBAIC03MjMsOSArNzE5LDkyIEBACiAjZGVmaW5lIE5FVFhFTl9GV19WRVJTSU9OX01JTk9SIChORVRYRU5fQ0FNX1JBTSgweDE1NCkpCiAjZGVmaW5lIE5FVFhFTl9GV19WRVJTSU9OX1NVQgkoTkVUWEVOX0NBTV9SQU0oMHgxNTgpKQogI2RlZmluZSBORVRYRU5fUk9NX0xPQ0tfSUQJKE5FVFhFTl9DQU1fUkFNKDB4MTAwKSkKKyNkZWZpbmUgTkVUWEVOX1BIWV9MT0NLX0lECShORVRYRU5fQ0FNX1JBTSgweDEyMCkpCiAjZGVmaW5lIE5FVFhFTl9DUkJfV0lOX0xPQ0tfSUQJKE5FVFhFTl9DQU1fUkFNKDB4MTI0KSkKIAotI2RlZmluZSBORVRYRU5fUEhZX0xPQ0tfSUQJKE5FVFhFTl9DQU1fUkFNKDB4MTIwKSkKKyNkZWZpbmUgTklDX0NSQl9CQVNFCQkoTkVUWEVOX0NBTV9SQU0oMHgyMDApKQorI2RlZmluZSBOSUNfQ1JCX0JBU0VfMgkJKE5FVFhFTl9DQU1fUkFNKDB4NzAwKSkKKyNkZWZpbmUgTkVUWEVOX05JQ19SRUcoWCkJKE5JQ19DUkJfQkFTRSsoWCkpCisjZGVmaW5lIE5FVFhFTl9OSUNfUkVHXzIoWCkJKE5JQ19DUkJfQkFTRV8yKyhYKSkKKworI2RlZmluZSBOWF9DRFJQX0NSQl9PRkZTRVQJCShORVRYRU5fTklDX1JFRygweDE4KSkKKyNkZWZpbmUgTlhfQVJHMV9DUkJfT0ZGU0VUCQkoTkVUWEVOX05JQ19SRUcoMHgxYykpCisjZGVmaW5lIE5YX0FSRzJfQ1JCX09GRlNFVAkJKE5FVFhFTl9OSUNfUkVHKDB4MjApKQorI2RlZmluZSBOWF9BUkczX0NSQl9PRkZTRVQJCShORVRYRU5fTklDX1JFRygweDI0KSkKKyNkZWZpbmUgTlhfU0lHTl9DUkJfT0ZGU0VUCQkoTkVUWEVOX05JQ19SRUcoMHgyOCkpCisKKyNkZWZpbmUgQ1JCX0hPU1RfRFVNTVlfQlVGX0FERFJfSEkJKE5FVFhFTl9OSUNfUkVHKDB4M2MpKQorI2RlZmluZSBDUkJfSE9TVF9EVU1NWV9CVUZfQUREUl9MTwkoTkVUWEVOX05JQ19SRUcoMHg0MCkpCisKKyNkZWZpbmUgQ1JCX0NNRFBFR19TVEFURQkJKE5FVFhFTl9OSUNfUkVHKDB4NTApKQorI2RlZmluZSBDUkJfUkNWUEVHX1NUQVRFCQkoTkVUWEVOX05JQ19SRUcoMHgxM2MpKQorCisjZGVmaW5lIENSQl9YR19TVEFURQkJCShORVRYRU5fTklDX1JFRygweDk0KSkKKyNkZWZpbmUgQ1JCX1hHX1NUQVRFX1AzCQkJKE5FVFhFTl9OSUNfUkVHKDB4OTgpKQorI2RlZmluZSBDUkJfUEZfTElOS19TUEVFRF8xCQkoTkVUWEVOX05JQ19SRUcoMHhlOCkpCisjZGVmaW5lIENSQl9QRl9MSU5LX1NQRUVEXzIJCShORVRYRU5fTklDX1JFRygweGVjKSkKKworI2RlZmluZSBDUkJfTVBPUlRfTU9ERQkJCShORVRYRU5fTklDX1JFRygweGM0KSkKKyNkZWZpbmUgQ1JCX0RNQV9TSElGVAkJCShORVRYRU5fTklDX1JFRygweGNjKSkKKyNkZWZpbmUgQ1JCX0lOVF9WRUNUT1IJCQkoTkVUWEVOX05JQ19SRUcoMHhkNCkpCisKKyNkZWZpbmUgQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVQJCShORVRYRU5fTklDX1JFRygweDA4KSkKKyNkZWZpbmUgQ1JCX0NNRF9DT05TVU1FUl9PRkZTRVQJCShORVRYRU5fTklDX1JFRygweDBjKSkKKyNkZWZpbmUgQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVRfMSAgIAkoTkVUWEVOX05JQ19SRUcoMHgxYWMpKQorI2RlZmluZSBDUkJfQ01EX0NPTlNVTUVSX09GRlNFVF8xCShORVRYRU5fTklDX1JFRygweDFiMCkpCisjZGVmaW5lIENSQl9DTURfUFJPRFVDRVJfT0ZGU0VUXzIJKE5FVFhFTl9OSUNfUkVHKDB4MWI4KSkKKyNkZWZpbmUgQ1JCX0NNRF9DT05TVU1FUl9PRkZTRVRfMgkoTkVUWEVOX05JQ19SRUcoMHgxYmMpKQorI2RlZmluZSBDUkJfQ01EX1BST0RVQ0VSX09GRlNFVF8zCShORVRYRU5fTklDX1JFRygweDFkMCkpCisjZGVmaW5lIENSQl9DTURfQ09OU1VNRVJfT0ZGU0VUXzMJKE5FVFhFTl9OSUNfUkVHKDB4MWQ0KSkKKyNkZWZpbmUgQ1JCX1RFTVBfU1RBVEUJCQkoTkVUWEVOX05JQ19SRUcoMHgxYjQpKQorCisjZGVmaW5lIENSQl9WMlBfMAkJCShORVRYRU5fTklDX1JFRygweDI5MCkpCisjZGVmaW5lIENSQl9WMlAocG9ydCkJCQkoQ1JCX1YyUF8wKygocG9ydCkqNCkpCisjZGVmaW5lIENSQl9EUklWRVJfVkVSU0lPTgkJKE5FVFhFTl9OSUNfUkVHKDB4MmEwKSkKKworI2RlZmluZSBDUkJfU1dfSU5UX01BU0tfMAkJKE5FVFhFTl9OSUNfUkVHKDB4MWQ4KSkKKyNkZWZpbmUgQ1JCX1NXX0lOVF9NQVNLXzEJCShORVRYRU5fTklDX1JFRygweDFlMCkpCisjZGVmaW5lIENSQl9TV19JTlRfTUFTS18yCQkoTkVUWEVOX05JQ19SRUcoMHgxZTQpKQorI2RlZmluZSBDUkJfU1dfSU5UX01BU0tfMwkJKE5FVFhFTl9OSUNfUkVHKDB4MWU4KSkKKworI2RlZmluZSBDUkJfRldfQ0FQQUJJTElUSUVTXzEJCShORVRYRU5fQ0FNX1JBTSgweDEyOCkpCisjZGVmaW5lIENSQl9NQUNfQkxPQ0tfU1RBUlQJCShORVRYRU5fQ0FNX1JBTSgweDFjMCkpCisKKy8qCisgKiBjYXBhYmlsaXRpZXMgcmVnaXN0ZXIsIGNhbiBiZSB1c2VkIHRvIHNlbGVjdGl2ZWx5IGVuYWJsZS9kaXNhYmxlIGZlYXR1cmVzCisgKiBmb3IgYmFja3dhcmQgY29tcGFiaWxpdHkKKyAqLworI2RlZmluZSBDUkJfTklDX0NBUEFCSUxJVElFU19IT1NUCU5FVFhFTl9OSUNfUkVHKDB4MWE4KQorI2RlZmluZSBDUkJfTklDX0NBUEFCSUxJVElFU19GVwkgIAlORVRYRU5fTklDX1JFRygweDFkYykKKyNkZWZpbmUgQ1JCX05JQ19NU0lfTU9ERV9IT1NUCQlORVRYRU5fTklDX1JFRygweDI3MCkKKyNkZWZpbmUgQ1JCX05JQ19NU0lfTU9ERV9GVwkgIAlORVRYRU5fTklDX1JFRygweDI3NCkKKworI2RlZmluZSBJTlRSX1NDSEVNRV9QRVJQT1JUCSAgICAgIAkweDEKKyNkZWZpbmUgTVNJX01PREVfTVVMVElGVU5DCSAgICAgIAkweDEKKworLyogdXNlZCBmb3IgZXRodG9vbCB0ZXN0cyAqLworI2RlZmluZSBDUkJfU0NSQVRDSFBBRF9URVNUCSAgICBORVRYRU5fTklDX1JFRygweDI4MCkKKworLyoKKyAqIENyYlBvcnRQaGFuQ250ckhpL0xvIGlzIHVzZWQgdG8gcGFzcyB0aGUgYWRkcmVzcyBvZiBIb3N0UGhhbnRvbUluZGV4IGFkZHJlc3MKKyAqIHdoaWNoIGNhbiBiZSByZWFkIGJ5IHRoZSBQaGFudG9tIGhvc3QgdG8gZ2V0IHByb2R1Y2VyL2NvbnN1bWVyIGluZGV4ZXMgZnJvbQorICogUGhhbnRvbS9DYXNwZXIuIElmIGl0IGlzIG5vdCBIT1NUX1NIQVJFRF9NRU1PUlksIHRoZW4gdGhlIGZvbGxvd2luZworICogcmVnaXN0ZXJzIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGFkZHJlc3NlcyBvZiB0aGUgcmluZydzIHNoYXJlZCBtZW1vcnkKKyAqIG9uIHRoZSBQaGFudG9tLgorICovCisKKyNkZWZpbmUgbnhfZ2V0X3RlbXBfdmFsKHgpCQkoKHgpID4+IDE2KQorI2RlZmluZSBueF9nZXRfdGVtcF9zdGF0ZSh4KQkJKCh4KSAmIDB4ZmZmZikKKyNkZWZpbmUgbnhfZW5jb2RlX3RlbXAodmFsLCBzdGF0ZSkJKCgodmFsKSA8PCAxNikgfCAoc3RhdGUpKQorCisvKgorICogVGVtcGVyYXR1cmUgY29udHJvbC4KKyAqLworZW51bSB7CisJTlhfVEVNUF9OT1JNQUwgPSAweDEsCS8qIE5vcm1hbCBvcGVyYXRpbmcgcmFuZ2UgKi8KKwlOWF9URU1QX1dBUk4sCQkvKiBTb3VuZCBhbGVydCwgdGVtcGVyYXR1cmUgZ2V0dGluZyBoaWdoICovCisJTlhfVEVNUF9QQU5JQwkJLyogRmF0YWwgZXJyb3IsIGhhcmR3YXJlIGhhcyBzaHV0IGRvd24uICovCit9OwogCiAvKiBMb2NrIElEcyBmb3IgUEhZIGxvY2sgKi8KICNkZWZpbmUgUEhZX0xPQ0tfRFJJVkVSCQkweDQ0NTI0OTU2CkBAIC04MTYsMTYgKzg5NSwyNCBAQAogCiAjZGVmaW5lIFBDSUVfRENSCQkweDAwZDgKIAorI2RlZmluZSBQQ0lFX1NFTTBfTE9DSwkJKDB4MWMwMDApCisjZGVmaW5lIFBDSUVfU0VNMF9VTkxPQ0sJKDB4MWMwMDQpCisjZGVmaW5lIFBDSUVfU0VNMV9MT0NLCQkoMHgxYzAwOCkKKyNkZWZpbmUgUENJRV9TRU0xX1VOTE9DSwkoMHgxYzAwYykKICNkZWZpbmUgUENJRV9TRU0yX0xPQ0sJCSgweDFjMDEwKQkvKiBGbGFzaCBsb2NrICAgKi8KICNkZWZpbmUgUENJRV9TRU0yX1VOTE9DSwkoMHgxYzAxNCkJLyogRmxhc2ggdW5sb2NrICovCiAjZGVmaW5lIFBDSUVfU0VNM19MT0NLCSAgCSgweDFjMDE4KQkvKiBQaHkgbG9jayAgICAgKi8KICNkZWZpbmUgUENJRV9TRU0zX1VOTE9DSwkoMHgxYzAxYykJLyogUGh5IHVubG9jayAgICovCisjZGVmaW5lIFBDSUVfU0VNNF9MT0NLCSAgCSgweDFjMDIwKQorI2RlZmluZSBQQ0lFX1NFTTRfVU5MT0NLCSgweDFjMDI0KQogI2RlZmluZSBQQ0lFX1NFTTVfTE9DSwkJKDB4MWMwMjgpCS8qIEFQSSBsb2NrICAgICAqLwogI2RlZmluZSBQQ0lFX1NFTTVfVU5MT0NLCSgweDFjMDJjKQkvKiBBUEkgdW5sb2NrICAgKi8KICNkZWZpbmUgUENJRV9TRU02X0xPQ0sJCSgweDFjMDMwKQkvKiBzdyBsb2NrICAgICAgKi8KICNkZWZpbmUgUENJRV9TRU02X1VOTE9DSwkoMHgxYzAzNCkJLyogc3cgdW5sb2NrICAgICovCiAjZGVmaW5lIFBDSUVfU0VNN19MT0NLCQkoMHgxYzAzOCkJLyogY3JiIHdpbiBsb2NrICovCiAjZGVmaW5lIFBDSUVfU0VNN19VTkxPQ0sJKDB4MWMwM2MpCS8qIGNyYndpbiB1bmxvY2sqLworI2RlZmluZSBQQ0lFX1NFTV9MT0NLKE4pCShQQ0lFX1NFTTBfTE9DSyArIDgqKE4pKQorI2RlZmluZSBQQ0lFX1NFTV9VTkxPQ0soTikJKFBDSUVfU0VNMF9VTkxPQ0sgKyA4KihOKSkKIAogI2RlZmluZSBQQ0lFX1NFVFVQX0ZVTkNUSU9OCSgweDEyMDQwKQogI2RlZmluZSBQQ0lFX1NFVFVQX0ZVTkNUSU9OMgkoMHgxMjA0OCkKQEAgLTg1Miw4ICs5MzksMzAgQEAKICNkZWZpbmUgTlhfUEVHX1RVTkVfTU5fUFJFU0VOVAkJMHgxCiAjZGVmaW5lIE5YX1BFR19UVU5FX0NBUEFCSUxJVFkJCShORVRYRU5fQ0FNX1JBTSgweDAyYykpCiAKLSNkZWZpbmUgTkVUWEVOX0NBTV9SQU1fRE1BX1dBVENIRE9HX0NUUkwJCSgweDE0KQorI2RlZmluZSBORVRYRU5fRE1BX1dBVENIRE9HX0NUUkwJKE5FVFhFTl9DQU1fUkFNKDB4MTQpKQogI2RlZmluZSBORVRYRU5fUEVHX0FMSVZFX0NPVU5URVIJKE5FVFhFTl9DQU1fUkFNKDB4YjApKQorI2RlZmluZSBORVRYRU5fUEVHX0hBTFRfU1RBVFVTMSAJKE5FVFhFTl9DQU1fUkFNKDB4YTgpKQorI2RlZmluZSBORVRYRU5fUEVHX0hBTFRfU1RBVFVTMiAJKE5FVFhFTl9DQU1fUkFNKDB4YWMpKQorI2RlZmluZSBOWF9DUkJfREVWX1JFRl9DT1VOVAkJKE5FVFhFTl9DQU1fUkFNKDB4MTM4KSkKKyNkZWZpbmUgTlhfQ1JCX0RFVl9TVEFURQkJKE5FVFhFTl9DQU1fUkFNKDB4MTQwKSkKKworLyogRGV2aWNlIFN0YXRlICovCisjZGVmaW5lIE5YX0RFVl9DT0xECQkxCisjZGVmaW5lIE5YX0RFVl9JTklUQUxJWklORwkyCisjZGVmaW5lIE5YX0RFVl9SRUFEWQkJMworI2RlZmluZSBOWF9ERVZfTkVFRF9SRVNFVAk0CisjZGVmaW5lIE5YX0RFVl9ORUVEX1FVSVNDRU5UCTUKKyNkZWZpbmUgTlhfREVWX0ZBSUxFRAkJNgorCisjZGVmaW5lIE5YX1JDT0RFX0RSSVZFUl9JTkZPCQkweDIwMDAwMDAwCisjZGVmaW5lIE5YX1JDT0RFX0RSSVZFUl9DQU5fUkVMT0FECTB4NDAwMDAwMDAKKyNkZWZpbmUgTlhfUkNPREVfRkFUQUxfRVJST1IJCTB4ODAwMDAwMDAKKyNkZWZpbmUgTlhfRldFUlJPUl9QRUdOVU0oY29kZSkJCSgoY29kZSkgJiAweGZmKQorI2RlZmluZSBOWF9GV0VSUk9SX0NPREUoY29kZSkJCSgoY29kZSA+PiA4KSAmIDB4ZmZmZmYpCisKKyNkZWZpbmUgRldfUE9MTF9ERUxBWQkJCSgyICogSFopCisjZGVmaW5lIEZXX0ZBSUxfVEhSRVNICQkJMworI2RlZmluZSBGV19QT0xMX1RIUkVTSAkJCTEwCiAKICNkZWZpbmUJSVNSX01TSV9JTlRfVFJJR0dFUihGVU5DKSAoTkVUWEVOX1BDSVhfUFNfUkVHKFBDSVhfTVNJX0YoRlVOQykpKQogI2RlZmluZSBJU1JfTEVHQUNZX0lOVF9UUklHR0VSRUQoVkFMKQkoKChWQUwpICYgMHgzMDApID09IDB4MjAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKaW5kZXggYjkxMjNkNC4uMzIzMTQwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwLDE3ICsyMSwxMCBAQAogICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KICAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiBJbmMsCi0gKiAxODkyMiBGb3JnZSBEcml2ZQotICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCi0gKgogICovCiAKICNpbmNsdWRlICJuZXR4ZW5fbmljLmgiCiAjaW5jbHVkZSAibmV0eGVuX25pY19ody5oIgotI2luY2x1ZGUgIm5ldHhlbl9uaWNfcGhhbl9yZWcuaCIKIAogI2luY2x1ZGUgPG5ldC9pcC5oPgogCkBAIC04Nyw3ICs4MSw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLSNkZWZpbmUgQ1JCX1dJTl9MT0NLX1RJTUVPVVQgMTAwMDAwMDAwCiBzdGF0aWMgY3JiXzEyOE1fMk1fYmxvY2tfbWFwX3QKIGNyYl8xMjhNXzJNX21hcFs2NF0gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgPSB7CiAgICAge3t7MCwgMCwgICAgICAgICAwLCAgICAgICAgIDB9IH0gfSwJCS8qIDA6IFBDSSAqLwpAQCAtMzIxLDYgKzMxNCw2NCBAQAogCiAjZGVmaW5lIE5FVFhFTl9XSU5ET1dfT05FIAkweDIwMDAwMDAgLypDUkIgV2luZG93OiBiaXQgMjUgb2YgQ1JCIGFkZHJlc3MgKi8KIAorI2RlZmluZSBORVRYRU5fUENJRV9TRU1fVElNRU9VVAkxMDAwMAorCitpbnQKK25ldHhlbl9wY2llX3NlbV9sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHNlbSwgdTMyIGlkX3JlZykKK3sKKwlpbnQgZG9uZSA9IDAsIHRpbWVvdXQgPSAwOworCisJd2hpbGUgKCFkb25lKSB7CisJCWRvbmUgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX1BDSUVfUkVHKFBDSUVfU0VNX0xPQ0soc2VtKSkpOworCQlpZiAoZG9uZSA9PSAxKQorCQkJYnJlYWs7CisJCWlmICgrK3RpbWVvdXQgPj0gTkVUWEVOX1BDSUVfU0VNX1RJTUVPVVQpCisJCQlyZXR1cm4gLTE7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoaWRfcmVnKQorCQlOWFdSMzIoYWRhcHRlciwgaWRfcmVnLCBhZGFwdGVyLT5wb3J0bnVtKTsKKworCXJldHVybiAwOworfQorCit2b2lkCituZXR4ZW5fcGNpZV9zZW1fdW5sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHNlbSkKK3sKKwlpbnQgdmFsOworCXZhbCA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fUENJRV9SRUcoUENJRV9TRU1fVU5MT0NLKHNlbSkpKTsKK30KKworaW50IG5ldHhlbl9uaXVfeGdfaW5pdF9wb3J0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnQpCit7CisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX0NPTkZJR18xKygweDEwMDAwKnBvcnQpLCAweDE0NDcpOworCQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzArKDB4MTAwMDAqcG9ydCksIDB4NSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIERpc2FibGUgYW4gWEcgaW50ZXJmYWNlICovCitpbnQgbmV0eGVuX25pdV9kaXNhYmxlX3hnX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCV9fdTMyIG1hY19jZmc7CisJdTMyIHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCXJldHVybiAwOworCisJaWYgKHBvcnQgPiBORVRYRU5fTklVX01BWF9YR19QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYWNfY2ZnID0gMDsKKwlpZiAoTlhXUjMyKGFkYXB0ZXIsCisJCQlORVRYRU5fTklVX1hHRV9DT05GSUdfMCArICgweDEwMDAwICogcG9ydCksIG1hY19jZmcpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKwogI2RlZmluZSBORVRYRU5fVU5JQ0FTVF9BRERSKHBvcnQsIGluZGV4KSBcCiAJKE5FVFhFTl9VTklDQVNUX0FERFJfQkFTRSsocG9ydCozMikrKGluZGV4KjgpKQogI2RlZmluZSBORVRYRU5fTUNBU1RfQUREUihwb3J0LCBpbmRleCkgXApAQCAtMzMwLDYgKzM4MSw1NiBAQAogI2RlZmluZSBNQUNfTE8oYWRkcikgXAogCSgoYWRkcls1XSA8PCAxNikgfCAoYWRkcls0XSA8PCA4KSB8IChhZGRyWzNdKSkKIAoraW50IG5ldHhlbl9wMl9uaWNfc2V0X3Byb21pc2Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgbW9kZSkKK3sKKwlfX3UzMiByZWc7CisJdTMyIHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OworCisJaWYgKHBvcnQgPiBORVRYRU5fTklVX01BWF9YR19QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWcgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzEgKyAoMHgxMDAwMCAqIHBvcnQpKTsKKwlpZiAobW9kZSA9PSBORVRYRU5fTklVX1BST01JU0NfTU9ERSkKKwkJcmVnID0gKHJlZyB8IDB4MjAwMFVMKTsKKwllbHNlCisJCXJlZyA9IChyZWcgJiB+MHgyMDAwVUwpOworCisJaWYgKG1vZGUgPT0gTkVUWEVOX05JVV9BTExNVUxUSV9NT0RFKQorCQlyZWcgPSAocmVnIHwgMHgxMDAwVUwpOworCWVsc2UKKwkJcmVnID0gKHJlZyAmIH4weDEwMDBVTCk7CisKKwlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzEgKyAoMHgxMDAwMCAqIHBvcnQpLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBuZXR4ZW5fcDJfbmljX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICphZGRyKQoreworCXUzMiBtYWNfaGksIG1hY19sbzsKKwl1MzIgcmVnX2hpLCByZWdfbG87CisKKwl1OCBwaHkgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OworCisJaWYgKHBoeSA+PSBORVRYRU5fTklVX01BWF9YR19QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYWNfbG8gPSAoKHUzMilhZGRyWzBdIDw8IDE2KSB8ICgodTMyKWFkZHJbMV0gPDwgMjQpOworCW1hY19oaSA9IGFkZHJbMl0gfCAoKHUzMilhZGRyWzNdIDw8IDgpIHwKKwkJKCh1MzIpYWRkcls0XSA8PCAxNikgfCAoKHUzMilhZGRyWzVdIDw8IDI0KTsKKworCXJlZ19sbyA9IE5FVFhFTl9OSVVfWEdFX1NUQVRJT05fQUREUl8wXzEgKyAoMHgxMDAwMCAqIHBoeSk7CisJcmVnX2hpID0gTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfSEkgKyAoMHgxMDAwMCAqIHBoeSk7CisKKwkvKiB3cml0ZSB0d2ljZSB0byBmbHVzaCAqLworCWlmIChOWFdSMzIoYWRhcHRlciwgcmVnX2xvLCBtYWNfbG8pIHx8IE5YV1IzMihhZGFwdGVyLCByZWdfaGksIG1hY19oaSkpCisJCXJldHVybiAtRUlPOworCWlmIChOWFdSMzIoYWRhcHRlciwgcmVnX2xvLCBtYWNfbG8pIHx8IE5YV1IzMihhZGFwdGVyLCByZWdfaGksIG1hY19oaSkpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQKIG5ldHhlbl9uaWNfZW5hYmxlX21jYXN0X2ZpbHRlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC00NjAsNiArNTYxLDkgQEAKIAogCWkgPSAwOwogCisJaWYgKGFkYXB0ZXItPmlzX3VwICE9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKQorCQlyZXR1cm4gLUVJTzsKKwogCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOwogCV9fbmV0aWZfdHhfbG9ja19iaCh0eF9yaW5nLT50eHEpOwogCkBAIC02NDMsNyArNzQ3LDcgQEAKIAogCW1lbXNldCgmcmVxLCAwLCBzaXplb2YobnhfbmljX3JlcV90KSk7CiAKLQlyZXEucWhkciA9IGNwdV90b19sZTY0KE5YX05JQ19SRVFVRVNUIDw8IDIzKTsKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KE5YX0hPU1RfUkVRVUVTVCA8PCAyMyk7CiAKIAl3b3JkID0gTkVUWEVOX0NPTkZJR19JTlRSX0NPQUxFU0NFIHwgKCh1NjQpYWRhcHRlci0+cG9ydG51bSA8PCAxNik7CiAJcmVxLnJlcV9oZHIgPSBjcHVfdG9fbGU2NCh3b3JkKTsKQEAgLTY1OSw2ICs3NjMsNjYgQEAKIAlyZXR1cm4gcnY7CiB9CiAKK2ludCBuZXR4ZW5fY29uZmlnX2h3X2xybyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpCit7CisJbnhfbmljX3JlcV90IHJlcTsKKwl1NjQgd29yZDsKKwlpbnQgcnYgPSAwOworCisJaWYgKChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTFJPX0VOQUJMRUQpID09IGVuYWJsZSkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKG54X25pY19yZXFfdCkpOworCisJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChOWF9IT1NUX1JFUVVFU1QgPDwgMjMpOworCisJd29yZCA9IE5YX05JQ19IMkNfT1BDT0RFX0NPTkZJR19IV19MUk8gfCAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCisJcmVxLndvcmRzWzBdID0gY3B1X3RvX2xlNjQoZW5hYmxlKTsKKworCXJ2ID0gbmV0eGVuX3NlbmRfY21kX2Rlc2NzKGFkYXB0ZXIsIChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKikmcmVxLCAxKTsKKwlpZiAocnYgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SLiBDb3VsZCBub3Qgc2VuZCAiCisJCQkiY29uZmlndXJlIGh3IGxybyByZXF1ZXN0XG4iKTsKKwl9CisKKwlhZGFwdGVyLT5mbGFncyBePSBORVRYRU5fTklDX0xST19FTkFCTEVEOworCisJcmV0dXJuIHJ2OworfQorCitpbnQgbmV0eGVuX2NvbmZpZ19icmlkZ2VkX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKQoreworCW54X25pY19yZXFfdCByZXE7CisJdTY0IHdvcmQ7CisJaW50IHJ2ID0gMDsKKworCWlmICghIShhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfQlJJREdFX0VOQUJMRUQpID09IGVuYWJsZSkKKwkJcmV0dXJuIHJ2OworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihueF9uaWNfcmVxX3QpKTsKKworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoTlhfSE9TVF9SRVFVRVNUIDw8IDIzKTsKKworCXdvcmQgPSBOWF9OSUNfSDJDX09QQ09ERV9DT05GSUdfQlJJREdJTkcgfAorCQkoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCisJcmVxLndvcmRzWzBdID0gY3B1X3RvX2xlNjQoZW5hYmxlKTsKKworCXJ2ID0gbmV0eGVuX3NlbmRfY21kX2Rlc2NzKGFkYXB0ZXIsIChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKikmcmVxLCAxKTsKKwlpZiAocnYgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SLiBDb3VsZCBub3Qgc2VuZCAiCisJCQkJImNvbmZpZ3VyZSBicmlkZ2UgbW9kZSByZXF1ZXN0XG4iKTsKKwl9CisKKwlhZGFwdGVyLT5mbGFncyBePSBORVRYRU5fTklDX0JSSURHRV9FTkFCTEVEOworCisJcmV0dXJuIHJ2OworfQorCisKICNkZWZpbmUgUlNTX0hBU0hUWVBFX0lQX1RDUAkweDMKIAogaW50IG5ldHhlbl9jb25maWdfcnNzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSkKQEAgLTcwNiw2ICs4NzAsMzAgQEAKIAlyZXR1cm4gcnY7CiB9CiAKK2ludCBuZXR4ZW5fY29uZmlnX2lwYWRkcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpcCwgaW50IGNtZCkKK3sKKwlueF9uaWNfcmVxX3QgcmVxOworCXU2NCB3b3JkOworCWludCBydjsKKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YobnhfbmljX3JlcV90KSk7CisJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChOWF9IT1NUX1JFUVVFU1QgPDwgMjMpOworCisJd29yZCA9IE5YX05JQ19IMkNfT1BDT0RFX0NPTkZJR19JUEFERFIgfCAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCisJcmVxLndvcmRzWzBdID0gY3B1X3RvX2xlNjQoY21kKTsKKwlyZXEud29yZHNbMV0gPSBjcHVfdG9fbGU2NChpcCk7CisKKwlydiA9IG5ldHhlbl9zZW5kX2NtZF9kZXNjcyhhZGFwdGVyLCAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7CisJaWYgKHJ2ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IG5vdGlmeSAlcyBJUCAweCV4IHJldXFlc3RcbiIsCisJCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJCShjbWQgPT0gTlhfSVBfVVApID8gIkFkZCIgOiAiUmVtb3ZlIiwgaXApOworCX0KKwlyZXR1cm4gcnY7Cit9CisKIGludCBuZXR4ZW5fbGlua2V2ZW50X3JlcXVlc3Qoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKQogewogCW54X25pY19yZXFfdCByZXE7CkBAIC03MjgsNiArOTE2LDI5IEBACiAJcmV0dXJuIHJ2OwogfQogCitpbnQgbmV0eGVuX3NlbmRfbHJvX2NsZWFudXAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCW54X25pY19yZXFfdCByZXE7CisJdTY0IHdvcmQ7CisJaW50IHJ2OworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihueF9uaWNfcmVxX3QpKTsKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KE5YX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gTlhfTklDX0gyQ19PUENPREVfTFJPX1JFUVVFU1QgfAorCQkoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KSB8CisJCSgodTY0KU5YX05JQ19MUk9fUkVRVUVTVF9DTEVBTlVQIDw8IDU2KSA7CisKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCisJcnYgPSBuZXR4ZW5fc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworCWlmIChydiAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBjbGVhbnVwIGxybyBmbG93c1xuIiwKKwkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCX0KKwlyZXR1cm4gcnY7Cit9CisKIC8qCiAgKiBuZXR4ZW5fbmljX2NoYW5nZV9tdHUgLSBDaGFuZ2UgdGhlIE1heGltdW0gVHJhbnNmZXIgVW5pdAogICogQHJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCkBAIC03OTIsMTggKzEwMDMsMTUgQEAKIAlfX2xlMzIgKnBtYWMgPSAoX19sZTMyICopIG1hYzsKIAl1MzIgb2Zmc2V0OwogCi0Jb2Zmc2V0ID0gTkVUWEVOX1VTRVJfU1RBUlQgKwotCQlvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX25ld191c2VyX2luZm8sIG1hY19hZGRyKSArCi0JCWFkYXB0ZXItPnBvcnRudW0gKiBzaXplb2YodTY0KTsKKwlvZmZzZXQgPSBOWF9GV19NQUNfQUREUl9PRkZTRVQgKyAoYWRhcHRlci0+cG9ydG51bSAqIHNpemVvZih1NjQpKTsKIAogCWlmIChuZXR4ZW5fZ2V0X2ZsYXNoX2Jsb2NrKGFkYXB0ZXIsIG9mZnNldCwgc2l6ZW9mKHU2NCksIHBtYWMpID09IC0xKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAoKm1hYyA9PSBjcHVfdG9fbGU2NCh+MFVMTCkpIHsKIAotCQlvZmZzZXQgPSBORVRYRU5fVVNFUl9TVEFSVF9PTEQgKwotCQkJb2Zmc2V0b2Yoc3RydWN0IG5ldHhlbl91c2VyX29sZF9pbmZvLCBtYWNfYWRkcikgKwotCQkJYWRhcHRlci0+cG9ydG51bSAqIHNpemVvZih1NjQpOworCQlvZmZzZXQgPSBOWF9PTERfTUFDX0FERFJfT0ZGU0VUICsKKwkJCShhZGFwdGVyLT5wb3J0bnVtICogc2l6ZW9mKHU2NCkpOwogCiAJCWlmIChuZXR4ZW5fZ2V0X2ZsYXNoX2Jsb2NrKGFkYXB0ZXIsCiAJCQkJCW9mZnNldCwgc2l6ZW9mKHU2NCksIHBtYWMpID09IC0xKQpAQCAtODM0LDM3ICsxMDQyLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgQ1JCX1dJTl9MT0NLX1RJTUVPVVQgMTAwMDAwMDAwCi0KLXN0YXRpYyBpbnQgY3JiX3dpbl9sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgZG9uZSA9IDAsIHRpbWVvdXQgPSAwOwotCi0Jd2hpbGUgKCFkb25lKSB7Ci0JCS8qIGFjcXVpcmUgc2VtYXBob3JlMyBmcm9tIFBDSSBIVyBibG9jayAqLwotCQlkb25lID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1NFTTdfTE9DSykpOwotCQlpZiAoZG9uZSA9PSAxKQotCQkJYnJlYWs7Ci0JCWlmICh0aW1lb3V0ID49IENSQl9XSU5fTE9DS19USU1FT1VUKQotCQkJcmV0dXJuIC0xOwotCQl0aW1lb3V0Kys7Ci0JCXVkZWxheSgxKTsKLQl9Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfV0lOX0xPQ0tfSUQsIGFkYXB0ZXItPnBvcnRudW0pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjcmJfd2luX3VubG9jayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IHZhbDsKLQotCXZhbCA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fUENJRV9SRUcoUENJRV9TRU03X1VOTE9DSykpOwotfQotCiAvKgogICogQ2hhbmdlcyB0aGUgQ1JCIHdpbmRvdyB0byB0aGUgc3BlY2lmaWVkIHdpbmRvdy4KICAqLwotdm9pZAorc3RhdGljIHZvaWQKIG5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB3bmR3KQogewogCXZvaWQgX19pb21lbSAqb2Zmc2V0OwpAQCAtOTc3LDYxICsxMTU4LDY4IEBACiAJCSh1bG9uZylhZGFwdGVyLT5haHcucGNpX2Jhc2UwOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHVsb25nIG9mZiwgdTMyIGRhdGEpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkIF9faW9tZW0gKmFkZHI7CiAKLQlpZiAoQUREUl9JTl9XSU5ET1cxKG9mZikpIHsKKwlpZiAoQUREUl9JTl9XSU5ET1cxKG9mZikpCiAJCWFkZHIgPSBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBvZmYpOwotCX0gZWxzZSB7CQkvKiBXaW5kb3cgMCAqLworCWVsc2UKIAkJYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBvZmYpOwotCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMCk7Ci0JfQogCi0JaWYgKCFhZGRyKSB7Ci0JCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAxKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0Jd3JpdGVsKGRhdGEsIGFkZHIpOwotCi0JaWYgKCFBRERSX0lOX1dJTkRPVzEob2ZmKSkKLQkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXUzMgotbmV0eGVuX25pY19od19yZWFkX3d4XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1bG9uZyBvZmYpCi17Ci0Jdm9pZCBfX2lvbWVtICphZGRyOwotCXUzMiBkYXRhOworCUJVR19PTighYWRkcik7CiAKIAlpZiAoQUREUl9JTl9XSU5ET1cxKG9mZikpIHsJLyogV2luZG93IDEgKi8KLQkJYWRkciA9IE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIG9mZik7CisJCXJlYWRfbG9jaygmYWRhcHRlci0+YWRhcHRlcl9sb2NrKTsKKwkJd3JpdGVsKGRhdGEsIGFkZHIpOworCQlyZWFkX3VubG9jaygmYWRhcHRlci0+YWRhcHRlcl9sb2NrKTsKIAl9IGVsc2UgewkJLyogV2luZG93IDAgKi8KKwkJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKIAkJYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBvZmYpOwogCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMCk7CisJCXdyaXRlbChkYXRhLCBhZGRyKTsKKwkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDEpOworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJfQogCi0JaWYgKCFhZGRyKSB7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIKK25ldHhlbl9uaWNfaHdfcmVhZF93eF8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdWxvbmcgb2ZmKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCBfX2lvbWVtICphZGRyOworCXUzMiBkYXRhOworCisJaWYgKEFERFJfSU5fV0lORE9XMShvZmYpKQorCQlhZGRyID0gTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKTsKKwllbHNlCisJCWFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgb2ZmKTsKKworCUJVR19PTighYWRkcik7CisKKwlpZiAoQUREUl9JTl9XSU5ET1cxKG9mZikpIHsJLyogV2luZG93IDEgKi8KKwkJcmVhZF9sb2NrKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2spOworCQlkYXRhID0gcmVhZGwoYWRkcik7CisJCXJlYWRfdW5sb2NrKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2spOworCX0gZWxzZSB7CQkvKiBXaW5kb3cgMCAqLworCQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOworCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMCk7CisJCWRhdGEgPSByZWFkbChhZGRyKTsKIAkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDEpOwotCQlyZXR1cm4gMTsKKwkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwogCX0KIAotCWRhdGEgPSByZWFkbChhZGRyKTsKLQotCWlmICghQUREUl9JTl9XSU5ET1cxKG9mZikpCi0JCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAxKTsKLQogCXJldHVybiBkYXRhOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1bG9uZyBvZmYsIHUzMiBkYXRhKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJ2OwogCiAJcnYgPSBuZXR4ZW5fbmljX3BjaV9nZXRfY3JiX2FkZHJfMk0oYWRhcHRlciwgJm9mZik7CkBAIC0xMDU3LDEwICsxMjQ1LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXUzMgorc3RhdGljIHUzMgogbmV0eGVuX25pY19od19yZWFkX3d4XzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdWxvbmcgb2ZmKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJ2OwogCXUzMiBkYXRhOwogCkBAIC0xMDg2LDI4ICsxMjc0LDkgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAotLyoKLSAqIGNoZWNrIG1lbW9yeSBhY2Nlc3MgYm91bmRhcnkuCi0gKiB1c2VkIGJ5IHRlc3QgYWdlbnQuIHN1cHBvcnQgZGRyIGFjY2VzcyBvbmx5IGZvciBub3cKLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcKLW5ldHhlbl9uaWNfcGNpX21lbV9ib3VuZF9jaGVjayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyLCBpbnQgc2l6ZSkKLXsKLQlpZiAoIUFERFJfSU5fUkFOR0UoYWRkciwKLQkJCU5FVFhFTl9BRERSX0REUl9ORVQsIE5FVFhFTl9BRERSX0REUl9ORVRfTUFYKSB8fAotCQkhQUREUl9JTl9SQU5HRShhZGRyK3NpemUtMSwKLQkJCU5FVFhFTl9BRERSX0REUl9ORVQsIE5FVFhFTl9BRERSX0REUl9ORVRfTUFYKSB8fAotCQkoKHNpemUgIT0gMSkgJiYgKHNpemUgIT0gMikgJiYgKHNpemUgIT0gNCkgJiYgKHNpemUgIT0gOCkpKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCiBzdGF0aWMgaW50IG5ldHhlbl9wY2lfc2V0X3dpbmRvd193YXJuaW5nX2NvdW50OwogCi11bnNpZ25lZCBsb25nCitzdGF0aWMgdW5zaWduZWQgbG9uZwogbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJdW5zaWduZWQgbG9uZyBsb25nIGFkZHIpCiB7CkBAIC0xMTcxLDIyICsxMzQwLDU2IEBACiAJcmV0dXJuIGFkZHI7CiB9CiAKLS8qCi0gKiBOb3RlIDogb25seSAzMi1iaXQgd3JpdGVzIQotICovCi1pbnQgbmV0eGVuX25pY19wY2lfd3JpdGVfaW1tZWRpYXRlXzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQl1NjQgb2ZmLCB1MzIgZGF0YSkKKy8qIHdpbmRvdyAxIHJlZ2lzdGVycyBvbmx5ICovCitzdGF0aWMgdm9pZCBuZXR4ZW5fbmljX2lvX3dyaXRlXzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiBkYXRhKQogewotCXdyaXRlbChkYXRhLCAodm9pZCBfX2lvbWVtICopKFBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsIG9mZikpKTsKLQlyZXR1cm4gMDsKKwlyZWFkX2xvY2soJmFkYXB0ZXItPmFkYXB0ZXJfbG9jayk7CisJd3JpdGVsKGRhdGEsIGFkZHIpOworCXJlYWRfdW5sb2NrKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2spOwogfQogCi11MzIgbmV0eGVuX25pY19wY2lfcmVhZF9pbW1lZGlhdGVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYpCitzdGF0aWMgdTMyIG5ldHhlbl9uaWNfaW9fcmVhZF8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJdm9pZCBfX2lvbWVtICphZGRyKQogewotCXJldHVybiByZWFkbCgodm9pZCBfX2lvbWVtICopKHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBvZmYpKSk7CisJdTMyIHZhbDsKKworCXJlYWRfbG9jaygmYWRhcHRlci0+YWRhcHRlcl9sb2NrKTsKKwl2YWwgPSByZWFkbChhZGRyKTsKKwlyZWFkX3VubG9jaygmYWRhcHRlci0+YWRhcHRlcl9sb2NrKTsKKworCXJldHVybiB2YWw7CiB9CiAKLXVuc2lnbmVkIGxvbmcKK3N0YXRpYyB2b2lkIG5ldHhlbl9uaWNfaW9fd3JpdGVfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiBkYXRhKQoreworCXdyaXRlbChkYXRhLCBhZGRyKTsKK30KKworc3RhdGljIHUzMiBuZXR4ZW5fbmljX2lvX3JlYWRfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuIHJlYWRsKGFkZHIpOworfQorCit2b2lkIF9faW9tZW0gKgorbmV0eGVuX2dldF9pb2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgb2Zmc2V0KQoreworCXVsb25nIG9mZiA9IG9mZnNldDsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisJCWlmIChvZmZzZXQgPCBORVRYRU5fQ1JCX1BDSVhfSE9TVDIgJiYKKwkJCQlvZmZzZXQgPiBORVRYRU5fQ1JCX1BDSVhfSE9TVCkKKwkJCXJldHVybiBQQ0lfT0ZGU0VUX1NFQ09ORF9SQU5HRShhZGFwdGVyLCBvZmZzZXQpOworCQlyZXR1cm4gTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2Zmc2V0KTsKKwl9CisKKwlCVUdfT04obmV0eGVuX25pY19wY2lfZ2V0X2NyYl9hZGRyXzJNKGFkYXB0ZXIsICZvZmYpKTsKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKW9mZjsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcKIG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcikKIHsKQEAgLTExOTcsMTAgKzE0MDAsOCBAQAogCQkvKiBERFIgbmV0d29yayBzaWRlICovCiAJCXdpbmRvdyA9IE1OX1dJTihhZGRyKTsKIAkJYWRhcHRlci0+YWh3LmRkcl9tbl93aW5kb3cgPSB3aW5kb3c7Ci0JCU5YV1IzMihhZGFwdGVyLCBhZGFwdGVyLT5haHcubW5fd2luX2NyYiB8IE5FVFhFTl9QQ0lfQ1JCU1BBQ0UsCi0JCQkJd2luZG93KTsKLQkJd2luX3JlYWQgPSBOWFJEMzIoYWRhcHRlciwKLQkJCQlhZGFwdGVyLT5haHcubW5fd2luX2NyYiB8IE5FVFhFTl9QQ0lfQ1JCU1BBQ0UpOworCQlOWFdSMzIoYWRhcHRlciwgYWRhcHRlci0+YWh3Lm1uX3dpbl9jcmIsIHdpbmRvdyk7CisJCXdpbl9yZWFkID0gTlhSRDMyKGFkYXB0ZXIsIGFkYXB0ZXItPmFody5tbl93aW5fY3JiKTsKIAkJaWYgKCh3aW5fcmVhZCA8PCAxNykgIT0gd2luZG93KSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJXcml0dGVuIE1Od2luICgweCV4KSAhPSAiCiAJCQkJIlJlYWQgTU53aW4gKDB4JXgpXG4iLCB3aW5kb3csIHdpbl9yZWFkKTsKQEAgLTEyMTUsMTAgKzE0MTYsOCBAQAogCiAJCXdpbmRvdyA9IE9DTV9XSU4oYWRkcik7CiAJCWFkYXB0ZXItPmFody5kZHJfbW5fd2luZG93ID0gd2luZG93OwotCQlOWFdSMzIoYWRhcHRlciwgYWRhcHRlci0+YWh3Lm1uX3dpbl9jcmIgfCBORVRYRU5fUENJX0NSQlNQQUNFLAotCQkJCXdpbmRvdyk7Ci0JCXdpbl9yZWFkID0gTlhSRDMyKGFkYXB0ZXIsCi0JCQkJYWRhcHRlci0+YWh3Lm1uX3dpbl9jcmIgfCBORVRYRU5fUENJX0NSQlNQQUNFKTsKKwkJTlhXUjMyKGFkYXB0ZXIsIGFkYXB0ZXItPmFody5tbl93aW5fY3JiLCB3aW5kb3cpOworCQl3aW5fcmVhZCA9IE5YUkQzMihhZGFwdGVyLCBhZGFwdGVyLT5haHcubW5fd2luX2NyYik7CiAJCWlmICgod2luX3JlYWQgPj4gNykgIT0gd2luZG93KSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogV3JpdHRlbiBPQ013aW4gKDB4JXgpICE9ICIKIAkJCQkJIlJlYWQgT0NNd2luICgweCV4KVxuIiwKQEAgLTEyMzEsMTAgKzE0MzAsOCBAQAogCQkvKiBRRFIgbmV0d29yayBzaWRlICovCiAJCXdpbmRvdyA9IE1TX1dJTihhZGRyKTsKIAkJYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSB3aW5kb3c7Ci0JCU5YV1IzMihhZGFwdGVyLCBhZGFwdGVyLT5haHcubXNfd2luX2NyYiB8IE5FVFhFTl9QQ0lfQ1JCU1BBQ0UsCi0JCQkJd2luZG93KTsKLQkJd2luX3JlYWQgPSBOWFJEMzIoYWRhcHRlciwKLQkJCQlhZGFwdGVyLT5haHcubXNfd2luX2NyYiB8IE5FVFhFTl9QQ0lfQ1JCU1BBQ0UpOworCQlOWFdSMzIoYWRhcHRlciwgYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIsIHdpbmRvdyk7CisJCXdpbl9yZWFkID0gTlhSRDMyKGFkYXB0ZXIsIGFkYXB0ZXItPmFody5tc193aW5fY3JiKTsKIAkJaWYgKHdpbl9yZWFkICE9IHdpbmRvdykgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdyaXR0ZW4gTVN3aW4gKDB4JXgpICE9ICIKIAkJCQkJIlJlYWQgTVN3aW4gKDB4JXgpXG4iLApAQCAtMTI1NywxODAgKzE0NTQsOSBAQAogCXJldHVybiBhZGRyOwogfQogCi1zdGF0aWMgaW50IG5ldHhlbl9uaWNfcGNpX2lzX3NhbWVfd2luZG93KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgYWRkcikKLXsKLQlpbnQgd2luZG93OwotCXVuc2lnbmVkIGxvbmcgbG9uZyBxZHJfbWF4OwotCi0JaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCi0JCXFkcl9tYXggPSBORVRYRU5fQUREUl9RRFJfTkVUX01BWF9QMjsKLQllbHNlCi0JCXFkcl9tYXggPSBORVRYRU5fQUREUl9RRFJfTkVUX01BWF9QMzsKLQotCWlmIChBRERSX0lOX1JBTkdFKGFkZHIsCi0JCQlORVRYRU5fQUREUl9ERFJfTkVULCBORVRYRU5fQUREUl9ERFJfTkVUX01BWCkpIHsKLQkJLyogRERSIG5ldHdvcmsgc2lkZSAqLwotCQlCVUcoKTsJLyogTU4gYWNjZXNzIGNhbiBub3QgY29tZSBoZXJlICovCi0JfSBlbHNlIGlmIChBRERSX0lOX1JBTkdFKGFkZHIsCi0JCQlORVRYRU5fQUREUl9PQ00wLCBORVRYRU5fQUREUl9PQ00wX01BWCkpIHsKLQkJcmV0dXJuIDE7Ci0JfSBlbHNlIGlmIChBRERSX0lOX1JBTkdFKGFkZHIsCi0JCQkJTkVUWEVOX0FERFJfT0NNMSwgTkVUWEVOX0FERFJfT0NNMV9NQVgpKSB7Ci0JCXJldHVybiAxOwotCX0gZWxzZSBpZiAoQUREUl9JTl9SQU5HRShhZGRyLCBORVRYRU5fQUREUl9RRFJfTkVULCBxZHJfbWF4KSkgewotCQkvKiBRRFIgbmV0d29yayBzaWRlICovCi0JCXdpbmRvdyA9ICgoYWRkciAtIE5FVFhFTl9BRERSX1FEUl9ORVQpID4+IDIyKSAmIDB4M2Y7Ci0JCWlmIChhZGFwdGVyLT5haHcucWRyX3NuX3dpbmRvdyA9PSB3aW5kb3cpCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF9kaXJlY3Qoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl2b2lkIF9faW9tZW0gKmFkZHIsICptZW1fcHRyID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKLQl1NjQgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKLQl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogSWYgYXR0ZW1wdGluZyB0byBhY2Nlc3MgdW5rbm93biBhZGRyZXNzIG9yIHN0cmFkZGxlIGh3IHdpbmRvd3MsCi0JICogZG8gbm90IGFjY2Vzcy4KLQkgKi8KLQlzdGFydCA9IGFkYXB0ZXItPnBjaV9zZXRfd2luZG93KGFkYXB0ZXIsIG9mZik7Ci0JaWYgKChzdGFydCA9PSAtMVVMKSB8fAotCQkobmV0eGVuX25pY19wY2lfaXNfc2FtZV93aW5kb3coYWRhcHRlciwgb2ZmK3NpemUtMSkgPT0gMCkpIHsKLQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCQlwcmludGsoS0VSTl9FUlIgIiVzIG91dCBvZiBib3VuZCBwY2kgbWVtb3J5IGFjY2Vzcy4gIgotCQkJIm9mZnNldCBpcyAweCVsbHhcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKW9mZik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlhZGRyID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIHN0YXJ0KTsKLQlpZiAoIWFkZHIpIHsKLQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCQltZW1fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChhZGFwdGVyLT5wZGV2LCAwKTsKLQkJbWVtX3BhZ2UgPSBzdGFydCAmIFBBR0VfTUFTSzsKLQkJLyogTWFwIHR3byBwYWdlcyB3aGVuZXZlciB1c2VyIHRyaWVzIHRvIGFjY2VzcyBhZGRyZXNzZXMgaW4gdHdvCi0JCWNvbnNlY3V0aXZlIHBhZ2VzLgotCQkqLwotCQlpZiAobWVtX3BhZ2UgIT0gKChzdGFydCArIHNpemUgLSAxKSAmIFBBR0VfTUFTSykpCi0JCQltZW1fcHRyID0gaW9yZW1hcChtZW1fYmFzZSArIG1lbV9wYWdlLCBQQUdFX1NJWkUgKiAyKTsKLQkJZWxzZQotCQkJbWVtX3B0ciA9IGlvcmVtYXAobWVtX2Jhc2UgKyBtZW1fcGFnZSwgUEFHRV9TSVpFKTsKLQkJaWYgKG1lbV9wdHIgPT0gTlVMTCkgewotCQkJKih1aW50OF90ICAqKWRhdGEgPSAwOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWFkZHIgPSBtZW1fcHRyOwotCQlhZGRyICs9IHN0YXJ0ICYgKFBBR0VfU0laRSAtIDEpOwotCQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCX0KLQotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJKih1aW50OF90ICAqKWRhdGEgPSByZWFkYihhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqKHVpbnQxNl90ICopZGF0YSA9IHJlYWR3KGFkZHIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCSoodWludDMyX3QgKilkYXRhID0gcmVhZGwoYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJKih1aW50NjRfdCAqKWRhdGEgPSByZWFkcShhZGRyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLTE7Ci0JCWJyZWFrOwotCX0KLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7Ci0KLQlpZiAobWVtX3B0cikKLQkJaW91bm1hcChtZW1fcHRyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1uZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfZGlyZWN0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZiwKLQkJdm9pZCAqZGF0YSwgaW50IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl2b2lkIF9faW9tZW0gKmFkZHIsICptZW1fcHRyID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKLQl1NjQgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKLQl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogSWYgYXR0ZW1wdGluZyB0byBhY2Nlc3MgdW5rbm93biBhZGRyZXNzIG9yIHN0cmFkZGxlIGh3IHdpbmRvd3MsCi0JICogZG8gbm90IGFjY2Vzcy4KLQkgKi8KLQlzdGFydCA9IGFkYXB0ZXItPnBjaV9zZXRfd2luZG93KGFkYXB0ZXIsIG9mZik7Ci0JaWYgKChzdGFydCA9PSAtMVVMKSB8fAotCQkobmV0eGVuX25pY19wY2lfaXNfc2FtZV93aW5kb3coYWRhcHRlciwgb2ZmK3NpemUtMSkgPT0gMCkpIHsKLQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCQlwcmludGsoS0VSTl9FUlIgIiVzIG91dCBvZiBib3VuZCBwY2kgbWVtb3J5IGFjY2Vzcy4gIgotCQkJIm9mZnNldCBpcyAweCVsbHhcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKW9mZik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlhZGRyID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIHN0YXJ0KTsKLQlpZiAoIWFkZHIpIHsKLQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCQltZW1fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChhZGFwdGVyLT5wZGV2LCAwKTsKLQkJbWVtX3BhZ2UgPSBzdGFydCAmIFBBR0VfTUFTSzsKLQkJLyogTWFwIHR3byBwYWdlcyB3aGVuZXZlciB1c2VyIHRyaWVzIHRvIGFjY2VzcyBhZGRyZXNzZXMgaW4gdHdvCi0JCSAqIGNvbnNlY3V0aXZlIHBhZ2VzLgotCQkgKi8KLQkJaWYgKG1lbV9wYWdlICE9ICgoc3RhcnQgKyBzaXplIC0gMSkgJiBQQUdFX01BU0spKQotCQkJbWVtX3B0ciA9IGlvcmVtYXAobWVtX2Jhc2UgKyBtZW1fcGFnZSwgUEFHRV9TSVpFKjIpOwotCQllbHNlCi0JCQltZW1fcHRyID0gaW9yZW1hcChtZW1fYmFzZSArIG1lbV9wYWdlLCBQQUdFX1NJWkUpOwotCQlpZiAobWVtX3B0ciA9PSBOVUxMKQotCQkJcmV0dXJuIC0xOwotCQlhZGRyID0gbWVtX3B0cjsKLQkJYWRkciArPSBzdGFydCAmIChQQUdFX1NJWkUgLSAxKTsKLQkJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQl9Ci0KLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCXdyaXRlYigqKHVpbnQ4X3QgKilkYXRhLCBhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQl3cml0ZXcoKih1aW50MTZfdCAqKWRhdGEsIGFkZHIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXdyaXRlbCgqKHVpbnQzMl90ICopZGF0YSwgYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJd3JpdGVxKCoodWludDY0X3QgKilkYXRhLCBhZGRyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLTE7Ci0JCWJyZWFrOwotCX0KLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7Ci0JaWYgKG1lbV9wdHIpCi0JCWlvdW5tYXAobWVtX3B0cik7Ci0JcmV0dXJuIHJldDsKLX0KLQogI2RlZmluZSBNQVhfQ1RMX0NIRUNLICAgMTAwMAogCi1pbnQKK3N0YXRpYyBpbnQKIG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCiB7CkBAIC0xNDQwLDE5ICsxNDY2LDI4IEBACiAJdWludDY0X3QgICAgICBvZmY4LCB0bXB3LCB3b3JkWzJdID0gezAsIDB9OwogCXZvaWQgX19pb21lbSAqbWVtX2NyYjsKIAotCS8qCi0JICogSWYgbm90IE1OLCBnbyBjaGVjayBmb3IgTVMgb3IgaW52YWxpZC4KLQkgKi8KLQlpZiAobmV0eGVuX25pY19wY2lfbWVtX2JvdW5kX2NoZWNrKGFkYXB0ZXIsIG9mZiwgc2l6ZSkgPT0gMCkKLQkJcmV0dXJuIG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV9kaXJlY3QoYWRhcHRlciwKLQkJCQlvZmYsIGRhdGEsIHNpemUpOworCWlmIChzaXplICE9IDgpCisJCXJldHVybiAtRUlPOwogCisJaWYgKEFERFJfSU5fUkFOR0Uob2ZmLCBORVRYRU5fQUREUl9RRFJfTkVULAorCQkJCU5FVFhFTl9BRERSX1FEUl9ORVRfTUFYX1AyKSkgeworCQltZW1fY3JiID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9DUkJfUURSX05FVCk7CisJCWdvdG8gY29ycmVjdDsKKwl9CisKKwlpZiAoQUREUl9JTl9SQU5HRShvZmYsIE5FVFhFTl9BRERSX0REUl9ORVQsIE5FVFhFTl9BRERSX0REUl9ORVRfTUFYKSkgeworCQltZW1fY3JiID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9DUkJfRERSX05FVCk7CisJCWdvdG8gY29ycmVjdDsKKwl9CisKKwlyZXR1cm4gLUVJTzsKKworY29ycmVjdDoKIAlvZmY4ID0gb2ZmICYgMHhmZmZmZmZmODsKIAlvZmYwID0gb2ZmICYgMHg3OwogCXN6WzBdID0gKHNpemUgPCAoOCAtIG9mZjApKSA/IHNpemUgOiAoOCAtIG9mZjApOwogCXN6WzFdID0gc2l6ZSAtIHN6WzBdOwogCWxvb3AgPSAoKG9mZjAgKyBzaXplIC0gMSkgPj4gMykgKyAxOwotCW1lbV9jcmIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKIAogCWlmICgoc2l6ZSAhPSA4KSB8fCAob2ZmMCAhPSAwKSkgIHsKIAkJZm9yIChpID0gMDsgaSA8IGxvb3A7IGkrKykgewpAQCAtMTUyMyw3ICsxNTU4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkXzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQl1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKIHsKQEAgLTE1MzMsMjAgKzE1NjgsMjkgQEAKIAl1aW50NjRfdCAgICAgIG9mZjgsIHZhbCwgd29yZFsyXSA9IHswLCAwfTsKIAl2b2lkIF9faW9tZW0gKm1lbV9jcmI7CiAKKwlpZiAoc2l6ZSAhPSA4KQorCQlyZXR1cm4gLUVJTzsKIAotCS8qCi0JICogSWYgbm90IE1OLCBnbyBjaGVjayBmb3IgTVMgb3IgaW52YWxpZC4KLQkgKi8KLQlpZiAobmV0eGVuX25pY19wY2lfbWVtX2JvdW5kX2NoZWNrKGFkYXB0ZXIsIG9mZiwgc2l6ZSkgPT0gMCkKLQkJcmV0dXJuIG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkX2RpcmVjdChhZGFwdGVyLCBvZmYsIGRhdGEsIHNpemUpOworCWlmIChBRERSX0lOX1JBTkdFKG9mZiwgTkVUWEVOX0FERFJfUURSX05FVCwKKwkJCQlORVRYRU5fQUREUl9RRFJfTkVUX01BWF9QMikpIHsKKwkJbWVtX2NyYiA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBORVRYRU5fQ1JCX1FEUl9ORVQpOworCQlnb3RvIGNvcnJlY3Q7CisJfQogCisJaWYgKEFERFJfSU5fUkFOR0Uob2ZmLCBORVRYRU5fQUREUl9ERFJfTkVULCBORVRYRU5fQUREUl9ERFJfTkVUX01BWCkpIHsKKwkJbWVtX2NyYiA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBORVRYRU5fQ1JCX0REUl9ORVQpOworCQlnb3RvIGNvcnJlY3Q7CisJfQorCisJcmV0dXJuIC1FSU87CisKK2NvcnJlY3Q6CiAJb2ZmOCA9IG9mZiAmIDB4ZmZmZmZmZjg7CiAJb2ZmMFswXSA9IG9mZiAmIDB4NzsKIAlvZmYwWzFdID0gMDsKIAlzelswXSA9IChzaXplIDwgKDggLSBvZmYwWzBdKSkgPyBzaXplIDogKDggLSBvZmYwWzBdKTsKIAlzelsxXSA9IHNpemUgLSBzelswXTsKIAlsb29wID0gKChvZmYwWzBdICsgc2l6ZSAtIDEpID4+IDMpICsgMTsKLQltZW1fY3JiID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9DUkJfRERSX05FVCk7CiAKIAl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwogCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAwKTsKQEAgLTE2MTQsMjYgKzE2NTgsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50CitzdGF0aWMgaW50CiBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQl1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKIHsKIAlpbnQgaSwgaiwgcmV0ID0gMCwgbG9vcCwgc3pbMl0sIG9mZjA7CiAJdWludDMyX3QgdGVtcDsKLQl1aW50NjRfdCBvZmY4LCBtZW1fY3JiLCB0bXB3LCB3b3JkWzJdID0gezAsIDB9OworCXVpbnQ2NF90IG9mZjgsIHRtcHcsIHdvcmRbMl0gPSB7MCwgMH07CisJdm9pZCBfX2lvbWVtICptZW1fY3JiOwogCi0JLyoKLQkgKiBJZiBub3QgTU4sIGdvIGNoZWNrIGZvciBNUyBvciBpbnZhbGlkLgotCSAqLwotCWlmIChvZmYgPj0gTkVUWEVOX0FERFJfUURSX05FVCAmJiBvZmYgPD0gTkVUWEVOX0FERFJfUURSX05FVF9NQVhfUDMpCi0JCW1lbV9jcmIgPSBORVRYRU5fQ1JCX1FEUl9ORVQ7Ci0JZWxzZSB7Ci0JCW1lbV9jcmIgPSBORVRYRU5fQ1JCX0REUl9ORVQ7Ci0JCWlmIChuZXR4ZW5fbmljX3BjaV9tZW1fYm91bmRfY2hlY2soYWRhcHRlciwgb2ZmLCBzaXplKSA9PSAwKQotCQkJcmV0dXJuIG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV9kaXJlY3QoYWRhcHRlciwKLQkJCQkJb2ZmLCBkYXRhLCBzaXplKTsKKwlpZiAoc2l6ZSAhPSA4KQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChBRERSX0lOX1JBTkdFKG9mZiwgTkVUWEVOX0FERFJfUURSX05FVCwKKwkJCQlORVRYRU5fQUREUl9RRFJfTkVUX01BWF9QMykpIHsKKwkJbWVtX2NyYiA9IG5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUURSX05FVCk7CisJCWdvdG8gY29ycmVjdDsKIAl9CiAKKwlpZiAoQUREUl9JTl9SQU5HRShvZmYsIE5FVFhFTl9BRERSX0REUl9ORVQsIE5FVFhFTl9BRERSX0REUl9ORVRfTUFYKSkgeworCQltZW1fY3JiID0gbmV0eGVuX2dldF9pb2FkZHIoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKKwkJZ290byBjb3JyZWN0OworCX0KKworCXJldHVybiAtRUlPOworCitjb3JyZWN0OgogCW9mZjggPSBvZmYgJiAweGZmZmZmZmY4OwogCW9mZjAgPSBvZmYgJiAweDc7CiAJc3pbMF0gPSAoc2l6ZSA8ICg4IC0gb2ZmMCkpID8gc2l6ZSA6ICg4IC0gb2ZmMCk7CkBAIC0xNjQyLDggKzE2OTIsOCBAQAogCiAJaWYgKChzaXplICE9IDgpIHx8IChvZmYwICE9IDApKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKLQkJCWlmIChhZGFwdGVyLT5wY2lfbWVtX3JlYWQoYWRhcHRlciwgb2ZmOCArIChpIDw8IDMpLAotCQkJCQkJJndvcmRbaV0sIDgpKQorCQkJaWYgKGFkYXB0ZXItPnBjaV9tZW1fcmVhZChhZGFwdGVyLAorCQkJCQlvZmY4ICsgKGkgPDwgMyksICZ3b3JkW2ldLCA4KSkKIAkJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBAIC0xNjc5LDIxICsxNzI5LDE4IEBACiAJICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgbG9vcDsgaSsrKSB7Ci0JCXRlbXAgPSBvZmY4ICsgKGkgPDwgMyk7Ci0JCU5YV1IzMihhZGFwdGVyLCBtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0xPLCB0ZW1wKTsKLQkJdGVtcCA9IDA7Ci0JCU5YV1IzMihhZGFwdGVyLCBtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0hJLCB0ZW1wKTsKLQkJdGVtcCA9IHdvcmRbaV0gJiAweGZmZmZmZmZmOwotCQlOWFdSMzIoYWRhcHRlciwgbWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0xPLCB0ZW1wKTsKLQkJdGVtcCA9ICh3b3JkW2ldID4+IDMyKSAmIDB4ZmZmZmZmZmY7Ci0JCU5YV1IzMihhZGFwdGVyLCBtZW1fY3JiK01JVV9URVNUX0FHVF9XUkRBVEFfSEksIHRlbXApOwotCQl0ZW1wID0gTUlVX1RBX0NUTF9FTkFCTEUgfCBNSVVfVEFfQ1RMX1dSSVRFOwotCQlOWFdSMzIoYWRhcHRlciwgbWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCwgdGVtcCk7Ci0JCXRlbXAgPSBNSVVfVEFfQ1RMX1NUQVJUIHwgTUlVX1RBX0NUTF9FTkFCTEUgfCBNSVVfVEFfQ1RMX1dSSVRFOwotCQlOWFdSMzIoYWRhcHRlciwgbWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCwgdGVtcCk7CisJCXdyaXRlbChvZmY4ICsgKGkgPDwgMyksIG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfTE8pOworCQl3cml0ZWwoMCwgbWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9ISSk7CisJCXdyaXRlbCh3b3JkW2ldICYgMHhmZmZmZmZmZiwgbWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0xPKTsKKwkJd3JpdGVsKCh3b3JkW2ldID4+IDMyKSAmIDB4ZmZmZmZmZmYsCisJCQkJbWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0hJKTsKKwkJd3JpdGVsKChNSVVfVEFfQ1RMX0VOQUJMRSB8IE1JVV9UQV9DVExfV1JJVEUpLAorCQkJCW1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpOworCQl3cml0ZWwoTUlVX1RBX0NUTF9TVEFSVCB8IE1JVV9UQV9DVExfRU5BQkxFIHwgTUlVX1RBX0NUTF9XUklURSwKKwkJCQltZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKTsKIAogCQlmb3IgKGogPSAwOyBqIDwgTUFYX0NUTF9DSEVDSzsgaisrKSB7Ci0JCQl0ZW1wID0gTlhSRDMyKGFkYXB0ZXIsIG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQ1RSTCk7CisJCQl0ZW1wID0gcmVhZGwobWVtX2NyYiArIE1JVV9URVNUX0FHVF9DVFJMKTsKIAkJCWlmICgodGVtcCAmIE1JVV9UQV9DVExfQlVTWSkgPT0gMCkKIAkJCQlicmVhazsKIAkJfQpAQCAtMTcxNCwyNyArMTc2MSwzMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludAorc3RhdGljIGludAogbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQl1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKIHsKIAlpbnQgaSwgaiA9IDAsIGssIHN0YXJ0LCBlbmQsIGxvb3AsIHN6WzJdLCBvZmYwWzJdOwogCXVpbnQzMl90ICAgICAgdGVtcDsKLQl1aW50NjRfdCAgICAgIG9mZjgsIHZhbCwgbWVtX2NyYiwgd29yZFsyXSA9IHswLCAwfTsKKwl1aW50NjRfdCAgICAgIG9mZjgsIHZhbCwgd29yZFsyXSA9IHswLCAwfTsKKwl2b2lkIF9faW9tZW0gKm1lbV9jcmI7CiAKLQkvKgotCSAqIElmIG5vdCBNTiwgZ28gY2hlY2sgZm9yIE1TIG9yIGludmFsaWQuCi0JICovCisJaWYgKHNpemUgIT0gOCkKKwkJcmV0dXJuIC1FSU87CiAKLQlpZiAob2ZmID49IE5FVFhFTl9BRERSX1FEUl9ORVQgJiYgb2ZmIDw9IE5FVFhFTl9BRERSX1FEUl9ORVRfTUFYX1AzKQotCQltZW1fY3JiID0gTkVUWEVOX0NSQl9RRFJfTkVUOwotCWVsc2UgewotCQltZW1fY3JiID0gTkVUWEVOX0NSQl9ERFJfTkVUOwotCQlpZiAobmV0eGVuX25pY19wY2lfbWVtX2JvdW5kX2NoZWNrKGFkYXB0ZXIsIG9mZiwgc2l6ZSkgPT0gMCkKLQkJCXJldHVybiBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF9kaXJlY3QoYWRhcHRlciwKLQkJCQkJb2ZmLCBkYXRhLCBzaXplKTsKKwlpZiAoQUREUl9JTl9SQU5HRShvZmYsIE5FVFhFTl9BRERSX1FEUl9ORVQsCisJCQkJTkVUWEVOX0FERFJfUURSX05FVF9NQVhfUDMpKSB7CisJCW1lbV9jcmIgPSBuZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLCBORVRYRU5fQ1JCX1FEUl9ORVQpOworCQlnb3RvIGNvcnJlY3Q7CiAJfQogCisJaWYgKEFERFJfSU5fUkFOR0Uob2ZmLCBORVRYRU5fQUREUl9ERFJfTkVULCBORVRYRU5fQUREUl9ERFJfTkVUX01BWCkpIHsKKwkJbWVtX2NyYiA9IG5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfRERSX05FVCk7CisJCWdvdG8gY29ycmVjdDsKKwl9CisKKwlyZXR1cm4gLUVJTzsKKworY29ycmVjdDoKIAlvZmY4ID0gb2ZmICYgMHhmZmZmZmZmODsKIAlvZmYwWzBdID0gb2ZmICYgMHg3OwogCW9mZjBbMV0gPSAwOwpAQCAtMTc0OSwxNyArMTgwMSwxNCBAQAogCSAqLwogCiAJZm9yIChpID0gMDsgaSA8IGxvb3A7IGkrKykgewotCQl0ZW1wID0gb2ZmOCArIChpIDw8IDMpOwotCQlOWFdSMzIoYWRhcHRlciwgbWVtX2NyYiArIE1JVV9URVNUX0FHVF9BRERSX0xPLCB0ZW1wKTsKLQkJdGVtcCA9IDA7Ci0JCU5YV1IzMihhZGFwdGVyLCBtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0FERFJfSEksIHRlbXApOwotCQl0ZW1wID0gTUlVX1RBX0NUTF9FTkFCTEU7Ci0JCU5YV1IzMihhZGFwdGVyLCBtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0NUUkwsIHRlbXApOwotCQl0ZW1wID0gTUlVX1RBX0NUTF9TVEFSVCB8IE1JVV9UQV9DVExfRU5BQkxFOwotCQlOWFdSMzIoYWRhcHRlciwgbWVtX2NyYiArIE1JVV9URVNUX0FHVF9DVFJMLCB0ZW1wKTsKKwkJd3JpdGVsKG9mZjggKyAoaSA8PCAzKSwgbWVtX2NyYiArIE1JVV9URVNUX0FHVF9BRERSX0xPKTsKKwkJd3JpdGVsKDAsIG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQUREUl9ISSk7CisJCXdyaXRlbChNSVVfVEFfQ1RMX0VOQUJMRSwgbWVtX2NyYiArIE1JVV9URVNUX0FHVF9DVFJMKTsKKwkJd3JpdGVsKE1JVV9UQV9DVExfU1RBUlQgfCBNSVVfVEFfQ1RMX0VOQUJMRSwKKwkJCQltZW1fY3JiICsgTUlVX1RFU1RfQUdUX0NUUkwpOwogCiAJCWZvciAoaiA9IDA7IGogPCBNQVhfQ1RMX0NIRUNLOyBqKyspIHsKLQkJCXRlbXAgPSBOWFJEMzIoYWRhcHRlciwgbWVtX2NyYiArIE1JVV9URVNUX0FHVF9DVFJMKTsKKwkJCXRlbXAgPSByZWFkbChtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0NUUkwpOwogCQkJaWYgKCh0ZW1wICYgTUlVX1RBX0NUTF9CVVNZKSA9PSAwKQogCQkJCWJyZWFrOwogCQl9CkBAIC0xNzc0LDggKzE4MjMsNyBAQAogCQlzdGFydCA9IG9mZjBbaV0gPj4gMjsKIAkJZW5kICAgPSAob2ZmMFtpXSArIHN6W2ldIC0gMSkgPj4gMjsKIAkJZm9yIChrID0gc3RhcnQ7IGsgPD0gZW5kOyBrKyspIHsKLQkJCXRlbXAgPSBOWFJEMzIoYWRhcHRlciwKLQkJCQltZW1fY3JiICsgTUlVX1RFU1RfQUdUX1JEREFUQShrKSk7CisJCQl0ZW1wID0gcmVhZGwobWVtX2NyYiArIE1JVV9URVNUX0FHVF9SRERBVEEoaykpOwogCQkJd29yZFtpXSB8PSAoKHVpbnQ2NF90KXRlbXAgPDwgKDMyICogaykpOwogCQl9CiAJfQpAQCAtMTgxMiwyMCArMTg2MCw0MyBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogTm90ZSA6IG9ubHkgMzItYml0IHdyaXRlcyEKLSAqLwotaW50IG5ldHhlbl9uaWNfcGNpX3dyaXRlX2ltbWVkaWF0ZV8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXU2NCBvZmYsIHUzMiBkYXRhKQordm9pZAorbmV0eGVuX3NldHVwX2h3b3BzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlOWFdSMzIoYWRhcHRlciwgb2ZmLCBkYXRhKTsKKwlhZGFwdGVyLT5pbml0X3BvcnQgPSBuZXR4ZW5fbml1X3hnX2luaXRfcG9ydDsKKwlhZGFwdGVyLT5zdG9wX3BvcnQgPSBuZXR4ZW5fbml1X2Rpc2FibGVfeGdfcG9ydDsKIAotCXJldHVybiAwOwotfQorCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisJCWFkYXB0ZXItPmNyYl9yZWFkID0gbmV0eGVuX25pY19od19yZWFkX3d4XzEyOE0sCisJCWFkYXB0ZXItPmNyYl93cml0ZSA9IG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMTI4TSwKKwkJYWRhcHRlci0+cGNpX3NldF93aW5kb3cgPSBuZXR4ZW5fbmljX3BjaV9zZXRfd2luZG93XzEyOE0sCisJCWFkYXB0ZXItPnBjaV9tZW1fcmVhZCA9IG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkXzEyOE0sCisJCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TSwKKwkJYWRhcHRlci0+aW9fcmVhZCA9IG5ldHhlbl9uaWNfaW9fcmVhZF8xMjhNLAorCQlhZGFwdGVyLT5pb193cml0ZSA9IG5ldHhlbl9uaWNfaW9fd3JpdGVfMTI4TSwKIAotdTMyIG5ldHhlbl9uaWNfcGNpX3JlYWRfaW1tZWRpYXRlXzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZikKLXsKLQlyZXR1cm4gTlhSRDMyKGFkYXB0ZXIsIG9mZik7CisJCWFkYXB0ZXItPm1hY2FkZHJfc2V0ID0gbmV0eGVuX3AyX25pY19zZXRfbWFjX2FkZHI7CisJCWFkYXB0ZXItPnNldF9tdWx0aSA9IG5ldHhlbl9wMl9uaWNfc2V0X211bHRpOworCQlhZGFwdGVyLT5zZXRfbXR1ID0gbmV0eGVuX25pY19zZXRfbXR1X3hnYjsKKwkJYWRhcHRlci0+c2V0X3Byb21pc2MgPSBuZXR4ZW5fcDJfbmljX3NldF9wcm9taXNjOworCisJfSBlbHNlIHsKKwkJYWRhcHRlci0+Y3JiX3JlYWQgPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMk0sCisJCWFkYXB0ZXItPmNyYl93cml0ZSA9IG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMk0sCisJCWFkYXB0ZXItPnBjaV9zZXRfd2luZG93ID0gbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18yTSwKKwkJYWRhcHRlci0+cGNpX21lbV9yZWFkID0gbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMk0sCisJCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMk0sCisJCWFkYXB0ZXItPmlvX3JlYWQgPSBuZXR4ZW5fbmljX2lvX3JlYWRfMk0sCisJCWFkYXB0ZXItPmlvX3dyaXRlID0gbmV0eGVuX25pY19pb193cml0ZV8yTSwKKworCQlhZGFwdGVyLT5zZXRfbXR1ID0gbnhfZndfY21kX3NldF9tdHU7CisJCWFkYXB0ZXItPnNldF9wcm9taXNjID0gbmV0eGVuX3AzX25pY19zZXRfcHJvbWlzYzsKKwkJYWRhcHRlci0+bWFjYWRkcl9zZXQgPSBuZXR4ZW5fcDNfbmljX3NldF9tYWNfYWRkcjsKKwkJYWRhcHRlci0+c2V0X211bHRpID0gbmV0eGVuX3AzX25pY19zZXRfbXVsdGk7CisKKwkJYWRhcHRlci0+cGh5X3JlYWQgPSBueF9md19jbWRfcXVlcnlfcGh5OworCQlhZGFwdGVyLT5waHlfd3JpdGUgPSBueF9md19jbWRfc2V0X3BoeTsKKwl9CiB9CiAKIGludCBuZXR4ZW5fbmljX2dldF9ib2FyZF9pbmZvKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKQEAgLTE4MzMsMTMgKzE5MDQsMTEgQEAKIAlpbnQgb2Zmc2V0LCBib2FyZF90eXBlLCBtYWdpYywgaGVhZGVyX3ZlcnNpb247CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0Jb2Zmc2V0ID0gTkVUWEVOX0JSRENGR19TVEFSVCArCi0JCW9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbywgbWFnaWMpOworCW9mZnNldCA9IE5YX0ZXX01BR0lDX09GRlNFVDsKIAlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgb2Zmc2V0LCAmbWFnaWMpKQogCQlyZXR1cm4gLUVJTzsKIAotCW9mZnNldCA9IE5FVFhFTl9CUkRDRkdfU1RBUlQgKwotCQlvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8sIGhlYWRlcl92ZXJzaW9uKTsKKwlvZmZzZXQgPSBOWF9IRFJfVkVSU0lPTl9PRkZTRVQ7CiAJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIG9mZnNldCwgJmhlYWRlcl92ZXJzaW9uKSkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTE4NTEsOCArMTkyMCw3IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCW9mZnNldCA9IE5FVFhFTl9CUkRDRkdfU1RBUlQgKwotCQlvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8sIGJvYXJkX3R5cGUpOworCW9mZnNldCA9IE5YX0JSRFRZUEVfT0ZGU0VUOwogCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZib2FyZF90eXBlKSkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTE5OTMsNjIgKzIwNjEsNiBAQAogCX0KIH0KIAotdm9pZCBuZXR4ZW5fbmljX2dldF9maXJtd2FyZV9pbmZvKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQl1MzIgZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZDsKLQljaGFyIGJyZF9uYW1lW05FVFhFTl9NQVhfU0hPUlRfTkFNRV07Ci0JY2hhciBzZXJpYWxfbnVtWzMyXTsKLQlpbnQgaSwgYWRkciwgdmFsOwotCWludCAqcHRyMzI7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCi0JYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMDsKLQotCXB0cjMyID0gKGludCAqKSZzZXJpYWxfbnVtOwotCWFkZHIgPSBORVRYRU5fVVNFUl9TVEFSVCArCi0JICAgICAgIG9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fbmV3X3VzZXJfaW5mbywgc2VyaWFsX251bSk7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgYWRkciwgJnZhbCkgPT0gLTEpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIHJlYWRpbmcgYm9hcmQgaW5mb1xuIik7Ci0JCQlhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2ggPSAxOwotCQkJcmV0dXJuOwotCQl9Ci0JCXB0cjMyW2ldID0gY3B1X3RvX2xlMzIodmFsKTsKLQkJYWRkciArPSBzaXplb2YodTMyKTsKLQl9Ci0KLQlmd19tYWpvciA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fRldfVkVSU0lPTl9NQUpPUik7Ci0JZndfbWlub3IgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX0ZXX1ZFUlNJT05fTUlOT1IpOwotCWZ3X2J1aWxkID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9GV19WRVJTSU9OX1NVQik7Ci0KLQlhZGFwdGVyLT5md19tYWpvciA9IGZ3X21ham9yOwotCWFkYXB0ZXItPmZ3X3ZlcnNpb24gPSBORVRYRU5fVkVSU0lPTl9DT0RFKGZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQpOwotCi0JaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkgewotCQlnZXRfYnJkX25hbWVfYnlfdHlwZShhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSwgYnJkX25hbWUpOwotCi0JCXByaW50ayhLRVJOX0lORk8gIk5ldFhlbiAlcyBCb2FyZCBTL04gJXMgIENoaXAgcmV2IDB4JXhcbiIsCi0JCQkJYnJkX25hbWUsIHNlcmlhbF9udW0sIGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCk7Ci0JfQotCi0JaWYgKGFkYXB0ZXItPmZ3X3ZlcnNpb24gPCBORVRYRU5fVkVSU0lPTl9DT0RFKDMsIDQsIDIxNikpIHsKLQkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWQgdW5zdXBwb3J0ZWRcbiIsCi0JCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZmlybXdhcmUgdmVyc2lvbiAlZC4lZC4lZFxuIiwKLQkJCWZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQpOwotCi0JaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKLQkJaSA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fU1JFX01JU0MpOwotCQlhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2ggPSAoaSAmIDB4ODAwMCkgPyAxIDogMDsKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgImZpcm13YXJlIHJ1bm5pbmcgaW4gJXMgbW9kZVxuIiwKLQkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID8gImN1dC10aHJvdWdoIiA6ICJsZWdhY3kiKTsKLQl9Ci19Ci0KIGludAogbmV0eGVuX25pY193b2xfc3VwcG9ydGVkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5oCmluZGV4IGQ0ZTgzMzMuLjNmZDFkY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gUUxvZ2ljIENvcnBvcmF0aW9uLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMCwxOSArMjEsMTEgQEAKICAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCiAgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KICAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4gSW5jLAotICogMTg5MjIgRm9yZ2UgRHJpdmUKLSAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQotICoKICAqLwogCiAjaWZuZGVmIF9fTkVUWEVOX05JQ19IV19IXwogI2RlZmluZSBfX05FVFhFTl9OSUNfSFdfSF8KIAotI2luY2x1ZGUgIm5ldHhlbl9uaWNfaGRyLmgiCi0KIC8qIEhhcmR3YXJlIG1lbW9yeSBzaXplIG9mIDEyOCBtZWcgKi8KICNkZWZpbmUgTkVUWEVOX01FTUFERFJfTUFYICgxMjggKiAxMDI0ICogMTAyNCkKIApAQCAtNjMsMTAgKzU2LDYgQEAKICAqCUJpdCAzMTogc29mdF9yZXNldCA9PiAxOnJlc2V0IHRoZSBNQUMgYW5kIHRoZSBTRVJERVMsIDA6bm8tb3AKICAqLwogCi0jZGVmaW5lIG5ldHhlbl9nYl9lbmFibGVfdHgoY29uZmlnX3dvcmQpCVwKLQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDApCi0jZGVmaW5lIG5ldHhlbl9nYl9lbmFibGVfcngoY29uZmlnX3dvcmQpCVwKLQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDIpCiAjZGVmaW5lIG5ldHhlbl9nYl90eF9mbG93Y3RsKGNvbmZpZ193b3JkKQlcCiAJKChjb25maWdfd29yZCkgfD0gMSA8PCA0KQogI2RlZmluZSBuZXR4ZW5fZ2JfcnhfZmxvd2N0bChjb25maWdfd29yZCkJXApAQCAtNzksOCArNjgsNiBAQAogCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMTgpCiAjZGVmaW5lIG5ldHhlbl9nYl9yeF9yZXNldF9tYWMoY29uZmlnX3dvcmQpCVwKIAkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDE5KQotI2RlZmluZSBuZXR4ZW5fZ2Jfc29mdF9yZXNldChjb25maWdfd29yZCkJXAotCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMzEpCiAKICNkZWZpbmUgbmV0eGVuX2diX3Vuc2V0X3R4X2Zsb3djdGwoY29uZmlnX3dvcmQpCVwKIAkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgNCkpCkBAIC0yNDIsNyArMjI5LDYgQEAKICAqIEJpdHMgMTQtMTUgOiBzcGVlZCA9PiAwOjEwTWIvcywgMToxMDBNYi9zLCAyOjEwMDBNYi9zLCAzOnJzdmQKICAqLwogCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2NhYmxlbGVuKGNvbmZpZ193b3JkKSAoKChjb25maWdfd29yZCkgPj4gNykgJiAweDA3KQogI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9zcGVlZChjb25maWdfd29yZCkgKCgoY29uZmlnX3dvcmQpID4+IDE0KSAmIDB4MDMpCiAKICNkZWZpbmUgbmV0eGVuX3NldF9waHlfc3BlZWQoY29uZmlnX3dvcmQsIHZhbCkJXApAQCAtMjUyLDg1ICsyMzgsMTIgQEAKICNkZWZpbmUgbmV0eGVuX2NsZWFyX3BoeV9kdXBsZXgoY29uZmlnX3dvcmQpCVwKIAkJKChjb25maWdfd29yZCkgJj0gfigxIDw8IDEzKSkKIAotI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9qYWJiZXIoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMCkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfcG9sYXJpdHkoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMSkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfcmVjdnBhdXNlKGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDIpCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X3htaXRwYXVzZShjb25maWdfd29yZCkJXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAzKQotI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9lbmVyZ3lkZXRlY3QoY29uZmlnX3dvcmQpIFwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgNCkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfZG93bnNoaWZ0KGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDUpCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2Nyb3Nzb3Zlcihjb25maWdfd29yZCkJXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCA2KQogI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9saW5rKGNvbmZpZ193b3JkKQlcCiAJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDEwKQotI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9yZXNvbHZlZChjb25maWdfd29yZCkJXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxMSkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfcGFnZXJjdmQoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMTIpCiAjZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2R1cGxleChjb25maWdfd29yZCkJXAogCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxMykKIAogLyoKLSAqIEludGVycnVwdCBSZWdpc3RlciBkZWZpbml0aW9uCi0gKiBUaGlzIGRlZmluaXRpb24gYXBwbGllcyB0byByZWdpc3RlcnMgMTggYW5kIDE5IChpbnQgZW5hYmxlIGFuZCBpbnQgc3RhdHVzKS4KLSAqIEJpdCAwIDogamFiYmVyCi0gKiBCaXQgMSA6IHBvbGFyaXR5X2NoYW5nZWQKLSAqIEJpdCA0IDogZW5lcmd5X2RldGVjdAotICogQml0IDUgOiBkb3duc2hpZnQKLSAqIEJpdCA2IDogbWRpX3hvdmVyX2NoYW5nZWQKLSAqIEJpdCA3IDogZmlmb19vdmVyX3VuZGVyZmxvdwotICogQml0IDggOiBmYWxzZV9jYXJyaWVyCi0gKiBCaXQgOSA6IHN5bWJvbF9lcnJvcgotICogQml0IDEwOiBsaW5rX3N0YXR1c19jaGFuZ2VkCi0gKiBCaXQgMTE6IGF1dG9uZWdfY29tcGxldGVkCi0gKiBCaXQgMTI6IHBhZ2VfcmVjZWl2ZWQKLSAqIEJpdCAxMzogZHVwbGV4X2NoYW5nZWQKLSAqIEJpdCAxNDogc3BlZWRfY2hhbmdlZAotICogQml0IDE1OiBhdXRvbmVnX2Vycm9yCi0gKi8KLQotI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfamFiYmVyKGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDApCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9wb2xhcml0eV9jaGFuZ2VkKGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDEpCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9lbmVyZ3lfZGV0ZWN0KGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDQpCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9kb3duc2hpZnQoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgNSkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X21kaV94b3Zlcl9jaGFuZ2VkKGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDYpCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9maWZvX292ZXJfdW5kZXJmbG93KGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDcpCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9mYWxzZV9jYXJyaWVyKGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDgpCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9zeW1ib2xfZXJyb3IoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgOSkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X2xpbmtfc3RhdHVzX2NoYW5nZWQoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMTApCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9hdXRvbmVnX2NvbXBsZXRlZChjb25maWdfd29yZCkJXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxMSkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X3BhZ2VfcmVjZWl2ZWQoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMTIpCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9kdXBsZXhfY2hhbmdlZChjb25maWdfd29yZCkJXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxMykKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X3NwZWVkX2NoYW5nZWQoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMTQpCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9hdXRvbmVnX2Vycm9yKGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDE1KQotCi0jZGVmaW5lIG5ldHhlbl9zZXRfcGh5X2ludF9saW5rX3N0YXR1c19jaGFuZ2VkKGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMTApCi0jZGVmaW5lIG5ldHhlbl9zZXRfcGh5X2ludF9hdXRvbmVnX2NvbXBsZXRlZChjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDExKQotI2RlZmluZSBuZXR4ZW5fc2V0X3BoeV9pbnRfc3BlZWRfY2hhbmdlZChjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDE0KQotCi0vKgogICogTklVIE1vZGUgUmVnaXN0ZXIuCiAgKiBCaXQgMCA6IGVuYWJsZSBGaWJyZUNoYW5uZWwKICAqIEJpdCAxIDogZW5hYmxlIDEwLzEwMC8xMDAwIEV0aGVybmV0CkBAIC0zNDUsMzMgKzI1OCw2IEBACiAjZGVmaW5lIE5FVFhFTl9OSVVfQUxMTVVMVElfTU9ERQkyCiAKIC8qCi0gKiBOSVUgR0IgRHJvcCBDUkMgUmVnaXN0ZXIKLSAqCi0gKiBCaXQgMCA6IGRyb3BfZ2IwID0+IDE6ZHJvcCBwa3RzIHdpdGggYmFkIENSQ3MsIDA6cGFzcyB0aGVtIG9uCi0gKiBCaXQgMSA6IGRyb3BfZ2IxID0+IDE6ZHJvcCBwa3RzIHdpdGggYmFkIENSQ3MsIDA6cGFzcyB0aGVtIG9uCi0gKiBCaXQgMiA6IGRyb3BfZ2IyID0+IDE6ZHJvcCBwa3RzIHdpdGggYmFkIENSQ3MsIDA6cGFzcyB0aGVtIG9uCi0gKiBCaXQgMyA6IGRyb3BfZ2IzID0+IDE6ZHJvcCBwa3RzIHdpdGggYmFkIENSQ3MsIDA6cGFzcyB0aGVtIG9uCi0gKi8KLQotI2RlZmluZSBuZXR4ZW5fc2V0X2diX2Ryb3BfZ2IwKGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMCkKLSNkZWZpbmUgbmV0eGVuX3NldF9nYl9kcm9wX2diMShjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDEpCi0jZGVmaW5lIG5ldHhlbl9zZXRfZ2JfZHJvcF9nYjIoY29uZmlnX3dvcmQpCVwKLQkJKChjb25maWdfd29yZCkgfD0gMSA8PCAyKQotI2RlZmluZSBuZXR4ZW5fc2V0X2diX2Ryb3BfZ2IzKGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMykKLQotI2RlZmluZSBuZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjAoY29uZmlnX3dvcmQpCVwKLQkJKChjb25maWdfd29yZCkgJj0gfigxIDw8IDApKQotI2RlZmluZSBuZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjEoY29uZmlnX3dvcmQpCVwKLQkJKChjb25maWdfd29yZCkgJj0gfigxIDw8IDEpKQotI2RlZmluZSBuZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjIoY29uZmlnX3dvcmQpCVwKLQkJKChjb25maWdfd29yZCkgJj0gfigxIDw8IDIpKQotI2RlZmluZSBuZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjMoY29uZmlnX3dvcmQpCVwKLQkJKChjb25maWdfd29yZCkgJj0gfigxIDw8IDMpKQotCi0vKgogICogTklVIFhHIE1BQyBDb25maWcgUmVnaXN0ZXIKICAqCiAgKiBCaXQgMCA6IHR4X2VuYWJsZSA9PiAxOmVuYWJsZSBmcmFtZSB4bWl0LCAwOmRpc2FibGUKQEAgLTM4NywyMiArMjczLDYgQEAKICNkZWZpbmUgbmV0eGVuX3hnX3NvZnRfcmVzZXQoY29uZmlnX3dvcmQpCVwKIAkJKChjb25maWdfd29yZCkgfD0gMSA8PCA0KQogCi0vKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSBmb3IgYSBHYkUgaW50ZXJmYWNlICovCi1pbnQgbmV0eGVuX25pdV9zZXRfcHJvbWlzY3VvdXNfbW9kZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgIHUzMiBtb2RlKTsKLWludCBuZXR4ZW5fbml1X3hnX3NldF9wcm9taXNjdW91c19tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICAgICAgdTMyIG1vZGUpOwotCi0vKiBHZW5lcmljIGVuYWJsZSBmb3IgR2JFIHBvcnRzLiBXaWxsIGRldGVjdCB0aGUgc3BlZWQgb2YgdGhlIGxpbmsuICovCi1pbnQgbmV0eGVuX25pdV9nYmVfaW5pdF9wb3J0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnQpOwotCi1pbnQgbmV0eGVuX25pdV94Z19pbml0X3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCk7Ci0KLS8qIERpc2FibGUgYSBHYkUgaW50ZXJmYWNlICovCi1pbnQgbmV0eGVuX25pdV9kaXNhYmxlX2diZV9wb3J0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci0KLWludCBuZXR4ZW5fbml1X2Rpc2FibGVfeGdfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwotCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgdmFsaWQ7CiAJdW5zaWduZWQgc3RhcnRfMTI4TTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwppbmRleCA1ZDMzNDNlLi45MWMyYmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwLDE5ICsyMSwxMiBAQAogICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KICAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiBJbmMsCi0gKiAxODkyMiBGb3JnZSBEcml2ZQotICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCi0gKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgIm5ldHhlbl9uaWMuaCIKICNpbmNsdWRlICJuZXR4ZW5fbmljX2h3LmgiCi0jaW5jbHVkZSAibmV0eGVuX25pY19waGFuX3JlZy5oIgogCiBzdHJ1Y3QgY3JiX2FkZHJfcGFpciB7CiAJdTMyIGFkZHI7CkBAIC0yNDcsOSArMjQxLDE0IEBACiAJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KIAkJCQkJTlhfQ1RfREVGQVVMVF9SWF9CVUZfTEVOOwogCQkJfSBlbHNlIHsKLQkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPSBSWF9ETUFfTUFQX0xFTjsKKwkJCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KKwkJCQkJCU5YX1AzX1JYX0JVRl9NQVhfTEVOOworCQkJCWVsc2UKKwkJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KKwkJCQkJCU5YX1AyX1JYX0JVRl9NQVhfTEVOOwogCQkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9Ci0JCQkJCU1BWF9SWF9CVUZGRVJfTEVOR1RIOworCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUgKyBORVRfSVBfQUxJR047CiAJCQl9CiAJCQlicmVhazsKIApAQCAtMjYxLDE0ICsyNjAsMTggQEAKIAkJCWVsc2UKIAkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQogCQkJCQlOWF9QMl9SWF9KVU1CT19CVUZfTUFYX0xFTjsKKworCQkJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIE5YX0NBUDBfSFdfTFJPKQorCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSArPSBOWF9MUk9fQlVGRkVSX0VYVFJBOworCiAJCQlyZHNfcmluZy0+c2tiX3NpemUgPQogCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSArIE5FVF9JUF9BTElHTjsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUkNWX1JJTkdfTFJPOgogCQkJcmRzX3JpbmctPm51bV9kZXNjID0gYWRhcHRlci0+bnVtX2xyb19yeGQ7Ci0JCQlyZHNfcmluZy0+ZG1hX3NpemUgPSBSWF9MUk9fRE1BX01BUF9MRU47Ci0JCQlyZHNfcmluZy0+c2tiX3NpemUgPSBNQVhfUlhfTFJPX0JVRkZFUl9MRU5HVEg7CisJCQlyZHNfcmluZy0+ZG1hX3NpemUgPSBOWF9SWF9MUk9fQlVGRkVSX0xFTkdUSDsKKwkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9IHJkc19yaW5nLT5kbWFfc2l6ZSArIE5FVF9JUF9BTElHTjsKIAkJCWJyZWFrOwogCiAJCX0KQEAgLTMxNSw0OCArMzE4LDYgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotdm9pZCBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29wcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JYWRhcHRlci0+bWFjYWRkcl9zZXQgPSBuZXR4ZW5fcDJfbmljX3NldF9tYWNfYWRkcjsKLQlhZGFwdGVyLT5zZXRfbXVsdGkgPSBuZXR4ZW5fcDJfbmljX3NldF9tdWx0aTsKLQotCXN3aXRjaCAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSkgewotCWNhc2UgTkVUWEVOX05JQ19HQkU6Ci0JCWFkYXB0ZXItPmVuYWJsZV9waHlfaW50ZXJydXB0cyA9Ci0JCSAgICBuZXR4ZW5fbml1X2diZV9lbmFibGVfcGh5X2ludGVycnVwdHM7Ci0JCWFkYXB0ZXItPmRpc2FibGVfcGh5X2ludGVycnVwdHMgPQotCQkgICAgbmV0eGVuX25pdV9nYmVfZGlzYWJsZV9waHlfaW50ZXJydXB0czsKLQkJYWRhcHRlci0+c2V0X210dSA9IG5ldHhlbl9uaWNfc2V0X210dV9nYjsKLQkJYWRhcHRlci0+c2V0X3Byb21pc2MgPSBuZXR4ZW5fbml1X3NldF9wcm9taXNjdW91c19tb2RlOwotCQlhZGFwdGVyLT5waHlfcmVhZCA9IG5ldHhlbl9uaXVfZ2JlX3BoeV9yZWFkOwotCQlhZGFwdGVyLT5waHlfd3JpdGUgPSBuZXR4ZW5fbml1X2diZV9waHlfd3JpdGU7Ci0JCWFkYXB0ZXItPmluaXRfcG9ydCA9IG5ldHhlbl9uaXVfZ2JlX2luaXRfcG9ydDsKLQkJYWRhcHRlci0+c3RvcF9wb3J0ID0gbmV0eGVuX25pdV9kaXNhYmxlX2diZV9wb3J0OwotCQlicmVhazsKLQotCWNhc2UgTkVUWEVOX05JQ19YR0JFOgotCQlhZGFwdGVyLT5lbmFibGVfcGh5X2ludGVycnVwdHMgPQotCQkgICAgbmV0eGVuX25pdV94Z2JlX2VuYWJsZV9waHlfaW50ZXJydXB0czsKLQkJYWRhcHRlci0+ZGlzYWJsZV9waHlfaW50ZXJydXB0cyA9Ci0JCSAgICBuZXR4ZW5fbml1X3hnYmVfZGlzYWJsZV9waHlfaW50ZXJydXB0czsKLQkJYWRhcHRlci0+c2V0X210dSA9IG5ldHhlbl9uaWNfc2V0X210dV94Z2I7Ci0JCWFkYXB0ZXItPmluaXRfcG9ydCA9IG5ldHhlbl9uaXVfeGdfaW5pdF9wb3J0OwotCQlhZGFwdGVyLT5zZXRfcHJvbWlzYyA9IG5ldHhlbl9uaXVfeGdfc2V0X3Byb21pc2N1b3VzX21vZGU7Ci0JCWFkYXB0ZXItPnN0b3BfcG9ydCA9IG5ldHhlbl9uaXVfZGlzYWJsZV94Z19wb3J0OwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7Ci0JCWFkYXB0ZXItPnNldF9tdHUgPSBueF9md19jbWRfc2V0X210dTsKLQkJYWRhcHRlci0+c2V0X3Byb21pc2MgPSBuZXR4ZW5fcDNfbmljX3NldF9wcm9taXNjOwotCQlhZGFwdGVyLT5tYWNhZGRyX3NldCA9IG5ldHhlbl9wM19uaWNfc2V0X21hY19hZGRyOwotCQlhZGFwdGVyLT5zZXRfbXVsdGkgPSBuZXR4ZW5fcDNfbmljX3NldF9tdWx0aTsKLQl9Ci19Ci0KIC8qCiAgKiBuZXR4ZW5fZGVjb2RlX2NyYl9hZGRyKDAgLSB1dGlsaXR5IHRvIHRyYW5zbGF0ZSBmcm9tIGludGVybmFsIFBoYW50b20gQ1JCCiAgKiBhZGRyZXNzIHRvIGV4dGVybmFsIFBDSSBDUkIgYWRkcmVzcy4KQEAgLTM4NCwzNyArMzQ1LDcgQEAKIAkJcmV0dXJuIChwY2lfYmFzZSArIG9mZnNldCk7CiB9CiAKLXN0YXRpYyBsb25nIHJvbV9tYXhfdGltZW91dCA9IDEwMDsKLXN0YXRpYyBsb25nIHJvbV9sb2NrX3RpbWVvdXQgPSAxMDAwMDsKLQotc3RhdGljIGludCByb21fbG9jayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IGl0ZXI7Ci0JdTMyIGRvbmUgPSAwOwotCWludCB0aW1lb3V0ID0gMDsKLQotCXdoaWxlICghZG9uZSkgewotCQkvKiBhY3F1aXJlIHNlbWFwaG9yZTIgZnJvbSBQQ0kgSFcgYmxvY2sgKi8KLQkJZG9uZSA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fUENJRV9SRUcoUENJRV9TRU0yX0xPQ0spKTsKLQkJaWYgKGRvbmUgPT0gMSkKLQkJCWJyZWFrOwotCQlpZiAodGltZW91dCA+PSByb21fbG9ja190aW1lb3V0KQotCQkJcmV0dXJuIC1FSU87Ci0KLQkJdGltZW91dCsrOwotCQkvKgotCQkgKiBZaWVsZCBDUFUKLQkJICovCi0JCWlmICghaW5fYXRvbWljKCkpCi0JCQlzY2hlZHVsZSgpOwotCQllbHNlIHsKLQkJCWZvciAoaXRlciA9IDA7IGl0ZXIgPCAyMDsgaXRlcisrKQotCQkJCWNwdV9yZWxheCgpOwkvKlRoaXMgYSBub3AgaW5zdHIgb24gaTM4NiAqLwotCQl9Ci0JfQotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fUk9NX0xPQ0tfSUQsIFJPTV9MT0NLX0RSSVZFUik7Ci0JcmV0dXJuIDA7Ci19CisjZGVmaW5lIE5FVFhFTl9NQVhfUk9NX1dBSVRfVVNFQwkxMDAKIAogc3RhdGljIGludCBuZXR4ZW5fd2FpdF9yb21fZG9uZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC00MjYsMjIgKzM1NywxNiBAQAogCXdoaWxlIChkb25lID09IDApIHsKIAkJZG9uZSA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fUk9NVVNCX0dMQl9TVEFUVVMpOwogCQlkb25lICY9IDI7Ci0JCXRpbWVvdXQrKzsKLQkJaWYgKHRpbWVvdXQgPj0gcm9tX21heF90aW1lb3V0KSB7Ci0JCQlwcmludGsoIlRpbWVvdXQgcmVhY2hlZCAgd2FpdGluZyBmb3Igcm9tIGRvbmUiKTsKKwkJaWYgKCsrdGltZW91dCA+PSBORVRYRU5fTUFYX1JPTV9XQUlUX1VTRUMpIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkiVGltZW91dCByZWFjaGVkICB3YWl0aW5nIGZvciByb20gZG9uZSIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KKwkJdWRlbGF5KDEpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbmV0eGVuX3JvbV91bmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCS8qIHJlbGVhc2Ugc2VtYXBob3JlMiAqLwotCU5YUkQzMihhZGFwdGVyLCBORVRYRU5fUENJRV9SRUcoUENJRV9TRU0yX1VOTE9DSykpOwotCi19Ci0KIHN0YXRpYyBpbnQgZG9fcm9tX2Zhc3RfcmVhZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICAgaW50IGFkZHIsIGludCAqdmFscCkKIHsKQEAgLTQ4Niw3ICs0MTEsNyBAQAogewogCWludCByZXQ7CiAKLQlyZXQgPSByb21fbG9jayhhZGFwdGVyKTsKKwlyZXQgPSBuZXR4ZW5fcm9tX2xvY2soYWRhcHRlcik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTUwMCw3ICs0MjUsNyBAQAogewogCWludCByZXQ7CiAKLQlpZiAocm9tX2xvY2soYWRhcHRlcikgIT0gMCkKKwlpZiAobmV0eGVuX3JvbV9sb2NrKGFkYXB0ZXIpICE9IDApCiAJCXJldHVybiAtRUlPOwogCiAJcmV0ID0gZG9fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBhZGRyLCB2YWxwKTsKQEAgLTUyMSw3ICs0NDYsNyBAQAogCXUzMiBvZmY7CiAKIAkvKiByZXNldGFsbCAqLwotCXJvbV9sb2NrKGFkYXB0ZXIpOworCW5ldHhlbl9yb21fbG9jayhhZGFwdGVyKTsKIAlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9HTEJfU1dfUkVTRVQsIDB4ZmZmZmZmZmYpOwogCW5ldHhlbl9yb21fdW5sb2NrKGFkYXB0ZXIpOwogCkBAIC03OTcsMjEgKzcyMiwyOCBAQAogCQkJZmxhc2hhZGRyICs9IDg7CiAJCX0KIAl9IGVsc2UgewotCQl1MzIgZGF0YTsKKwkJdTY0IGRhdGE7CisJCXUzMiBoaSwgbG87CiAKLQkJc2l6ZSA9IChORVRYRU5fSU1BR0VfU1RBUlQgLSBORVRYRU5fQk9PVExEX1NUQVJUKSAvIDQ7CisJCXNpemUgPSAoTkVUWEVOX0lNQUdFX1NUQVJUIC0gTkVUWEVOX0JPT1RMRF9TVEFSVCkgLyA4OwogCQlmbGFzaGFkZHIgPSBORVRYRU5fQk9PVExEX1NUQVJUOwogCiAJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLAotCQkJCQlmbGFzaGFkZHIsIChpbnQgKikmZGF0YSkgIT0gMCkKKwkJCQkJZmxhc2hhZGRyLCAmbG8pICE9IDApCiAJCQkJcmV0dXJuIC1FSU87CisJCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwKKwkJCQkJZmxhc2hhZGRyICsgNCwgJmhpKSAhPSAwKQorCQkJCXJldHVybiAtRUlPOworCisJCQkvKiBoaSwgbG8gYXJlIGFscmVhZHkgaW4gaG9zdCBlbmRpYW4gYnl0ZW9yZGVyICovCisJCQlkYXRhID0gKCgodTY0KWhpIDw8IDMyKSB8IGxvKTsKIAogCQkJaWYgKGFkYXB0ZXItPnBjaV9tZW1fd3JpdGUoYWRhcHRlciwKLQkJCQkJCWZsYXNoYWRkciwgJmRhdGEsIDQpKQorCQkJCQkJZmxhc2hhZGRyLCAmZGF0YSwgOCkpCiAJCQkJcmV0dXJuIC1FSU87CiAKLQkJCWZsYXNoYWRkciArPSA0OworCQkJZmxhc2hhZGRyICs9IDg7CiAJCX0KIAl9CiAJbXNsZWVwKDEpOwpAQCAtODgwLDIyICs4MTIsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50CituZXR4ZW5fcDNfaGFzX21uKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MzIgY2FwYWJpbGl0eSwgZmxhc2hlZF92ZXI7Ci0JdTggZndfdHlwZTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0JaW50IHJjID0gMDsKLQotCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7Ci0JCWZ3X3R5cGUgPSBOWF9QMl9NTl9ST01JTUFHRTsKLQkJZ290byByZXF1ZXN0X2Z3OwotCX0gZWxzZSB7Ci0JCWZ3X3R5cGUgPSBOWF9QM19DVF9ST01JTUFHRTsKLQkJZ290byByZXF1ZXN0X2Z3OwotCX0KLQotcmVxdWVzdF9tbjoKIAljYXBhYmlsaXR5ID0gMDsKIAogCW5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsCkBAIC05MDMsMjMgKzgyMywzNSBAQAogCWZsYXNoZWRfdmVyID0gTkVUWEVOX0RFQ09ERV9WRVJTSU9OKGZsYXNoZWRfdmVyKTsKIAogCWlmIChmbGFzaGVkX3ZlciA+PSBORVRYRU5fVkVSU0lPTl9DT0RFKDQsIDAsIDIyMCkpIHsKKwogCQljYXBhYmlsaXR5ID0gTlhSRDMyKGFkYXB0ZXIsIE5YX1BFR19UVU5FX0NBUEFCSUxJVFkpOwotCQlpZiAoY2FwYWJpbGl0eSAmIE5YX1BFR19UVU5FX01OX1BSRVNFTlQpIHsKLQkJCWZ3X3R5cGUgPSBOWF9QM19NTl9ST01JTUFHRTsKLQkJCWdvdG8gcmVxdWVzdF9mdzsKLQkJfQorCQlpZiAoY2FwYWJpbGl0eSAmIE5YX1BFR19UVU5FX01OX1BSRVNFTlQpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmV0eGVuX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXU4IGZ3X3R5cGU7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCByYyA9IDA7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlmd190eXBlID0gTlhfUDJfTU5fUk9NSU1BR0U7CisJCWdvdG8gcmVxdWVzdF9mdzsKIAl9CiAKLQlmd190eXBlID0gTlhfRkxBU0hfUk9NSU1BR0U7Ci0JYWRhcHRlci0+ZncgPSBOVUxMOwotCWdvdG8gZG9uZTsKKwlmd190eXBlID0gbmV0eGVuX3AzX2hhc19tbihhZGFwdGVyKSA/CisJCU5YX1AzX01OX1JPTUlNQUdFIDogTlhfUDNfQ1RfUk9NSU1BR0U7CiAKIHJlcXVlc3RfZnc6CiAJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZhZGFwdGVyLT5mdywgZndfbmFtZVtmd190eXBlXSwgJnBkZXYtPmRldik7CiAJaWYgKHJjICE9IDApIHsKLQkJaWYgKGZ3X3R5cGUgPT0gTlhfUDNfQ1RfUk9NSU1BR0UpIHsKKwkJaWYgKGZ3X3R5cGUgPT0gTlhfUDNfTU5fUk9NSU1BR0UpIHsKIAkJCW1zbGVlcCgxKTsKLQkJCWdvdG8gcmVxdWVzdF9tbjsKKwkJCWZ3X3R5cGUgPSBOWF9QM19DVF9ST01JTUFHRTsKKwkJCWdvdG8gcmVxdWVzdF9mdzsKIAkJfQogCiAJCWZ3X3R5cGUgPSBOWF9GTEFTSF9ST01JTUFHRTsKQEAgLTkzMSw5ICs4NjMsMTAgQEAKIAlpZiAocmMgIT0gMCkgewogCQlyZWxlYXNlX2Zpcm13YXJlKGFkYXB0ZXItPmZ3KTsKIAotCQlpZiAoZndfdHlwZSA9PSBOWF9QM19DVF9ST01JTUFHRSkgeworCQlpZiAoZndfdHlwZSA9PSBOWF9QM19NTl9ST01JTUFHRSkgewogCQkJbXNsZWVwKDEpOwotCQkJZ290byByZXF1ZXN0X21uOworCQkJZndfdHlwZSA9IE5YX1AzX0NUX1JPTUlNQUdFOworCQkJZ290byByZXF1ZXN0X2Z3OwogCQl9CiAKIAkJZndfdHlwZSA9IE5YX0ZMQVNIX1JPTUlNQUdFOwpAQCAtOTUxLDIxICs4ODQsMjMgQEAKIHsKIAlpZiAoYWRhcHRlci0+ZncpCiAJCXJlbGVhc2VfZmlybXdhcmUoYWRhcHRlci0+ZncpOworCWFkYXB0ZXItPmZ3ID0gTlVMTDsKIH0KIAotaW50IG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb2ZmbG9hZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCitpbnQgbmV0eGVuX2luaXRfZHVtbXlfZG1hKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1aW50NjRfdCBhZGRyOwotCXVpbnQzMl90IGhpOwotCXVpbnQzMl90IGxvOworCXU2NCBhZGRyOworCXUzMiBoaSwgbG87CiAKLQlhZGFwdGVyLT5kdW1teV9kbWEuYWRkciA9Ci0JICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJaWYgKCFOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlyZXR1cm4gMDsKKworCWFkYXB0ZXItPmR1bW15X2RtYS5hZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKIAkJCQkgTkVUWEVOX0hPU1RfRFVNTVlfRE1BX1NJWkUsCiAJCQkJICZhZGFwdGVyLT5kdW1teV9kbWEucGh5c19hZGRyKTsKIAlpZiAoYWRhcHRlci0+ZHVtbXlfZG1hLmFkZHIgPT0gTlVMTCkgewotCQlwcmludGsoIiVzOiBFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIGR1bW15IERNQSBtZW1vcnlcbiIsCi0JCSAgICAgICBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIGR1bW15IERNQSBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTk3NiwyOSArOTExLDQxIEBACiAJTlhXUjMyKGFkYXB0ZXIsIENSQl9IT1NUX0RVTU1ZX0JVRl9BRERSX0hJLCBoaSk7CiAJTlhXUjMyKGFkYXB0ZXIsIENSQl9IT1NUX0RVTU1ZX0JVRl9BRERSX0xPLCBsbyk7CiAKLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgewotCQl1aW50MzJfdCB0ZW1wID0gMDsKLQkJTlhXUjMyKGFkYXB0ZXIsIENSQl9IT1NUX0RVTU1ZX0JVRiwgdGVtcCk7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKKy8qCisgKiBOZXRYZW4gRE1BIHdhdGNoZG9nIGNvbnRyb2w6CisgKgorICoJQml0IDAJCTogZW5hYmxlZCA9PiBSL086IDEgd2F0Y2hkb2cgYWN0aXZlLCAwIGluYWN0aXZlCisgKglCaXQgMQkJOiBkaXNhYmxlX3JlcXVlc3QgPT4gMSByZXEgZGlzYWJsZSBkbWEgd2F0Y2hkb2cKKyAqCUJpdCAyCQk6IGVuYWJsZV9yZXF1ZXN0ID0+ICAxIHJlcSBlbmFibGUgZG1hIHdhdGNoZG9nCisgKglCaXQgMy0zMQk6IHVudXNlZAorICovCit2b2lkIG5ldHhlbl9mcmVlX2R1bW15X2RtYShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaW50IGkgPSAxMDA7CisJdTMyIGN0cmw7CisKKwlpZiAoIU5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCXJldHVybjsKIAogCWlmICghYWRhcHRlci0+ZHVtbXlfZG1hLmFkZHIpCiAJCXJldHVybjsKIAotCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7Ci0JCWRvIHsKLQkJCWlmIChkbWFfd2F0Y2hkb2dfc2h1dGRvd25fcmVxdWVzdChhZGFwdGVyKSA9PSAxKQotCQkJCWJyZWFrOworCWN0cmwgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX0RNQV9XQVRDSERPR19DVFJMKTsKKwlpZiAoKGN0cmwgJiAweDEpICE9IDApIHsKKwkJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9ETUFfV0FUQ0hET0dfQ1RSTCwgKGN0cmwgfCAweDIpKTsKKworCQl3aGlsZSAoKGN0cmwgJiAweDEpICE9IDApIHsKKwogCQkJbXNsZWVwKDUwKTsKLQkJCWlmIChkbWFfd2F0Y2hkb2dfc2h1dGRvd25fcG9sbF9yZXN1bHQoYWRhcHRlcikgPT0gMSkKKworCQkJY3RybCA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fRE1BX1dBVENIRE9HX0NUUkwpOworCisJCQlpZiAoLS1pID09IDApCiAJCQkJYnJlYWs7Ci0JCX0gd2hpbGUgKC0taSk7CisJCX07CiAJfQogCiAJaWYgKGkpIHsKQEAgLTEwMDcsMTAgKzk1NCw4IEBACiAJCQkgICAgYWRhcHRlci0+ZHVtbXlfZG1hLmFkZHIsCiAJCQkgICAgYWRhcHRlci0+ZHVtbXlfZG1hLnBoeXNfYWRkcik7CiAJCWFkYXB0ZXItPmR1bW15X2RtYS5hZGRyID0gTlVMTDsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkbWFfd2F0Y2hkb2dfc2h1dGRvd24gZmFpbGVkXG4iLAotCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JfQorCX0gZWxzZQorCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJkbWFfd2F0Y2hkb2dfc2h1dGRvd24gZmFpbGVkXG4iKTsKIH0KIAogaW50IG5ldHhlbl9waGFudG9tX2luaXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcGVndHVuZV92YWwpCkBAIC0xMDgzLDEwICsxMDI4LDYgQEAKIAlOWFdSMzIoYWRhcHRlciwgQ1JCX01QT1JUX01PREUsIE1QT1JUX01VTFRJX0ZVTkNUSU9OX01PREUpOwogCU5YV1IzMihhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFLCBQSEFOX0lOSVRJQUxJWkVfQUNLKTsKIAotCWlmIChhZGFwdGVyLT5md192ZXJzaW9uID49IE5FVFhFTl9WRVJTSU9OX0NPREUoNCwgMCwgMjIyKSkgewotCQlhZGFwdGVyLT5jYXBhYmlsaXRpZXMgPSBOWFJEMzIoYWRhcHRlciwgQ1JCX0ZXX0NBUEFCSUxJVElFU18xKTsKLQl9Ci0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMjIyLDIwICsxMTYzLDMxIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqCiBuZXR4ZW5fcHJvY2Vzc19yY3Yoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQlpbnQgcmluZywgaW50IGluZGV4LCBpbnQgbGVuZ3RoLCBpbnQgY2tzdW0sIGludCBwa3Rfb2Zmc2V0LAotCQlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcpCisJCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZywKKwkJaW50IHJpbmcsIHU2NCBzdHNfZGF0YTApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CiAJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKmJ1ZmZlcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlpbnQgaW5kZXgsIGxlbmd0aCwgY2tzdW0sIHBrdF9vZmZzZXQ7CiAKLQlpZiAodW5saWtlbHkoaW5kZXggPiByZHNfcmluZy0+bnVtX2Rlc2MpKQorCWlmICh1bmxpa2VseShyaW5nID49IGFkYXB0ZXItPm1heF9yZHNfcmluZ3MpKQorCQlyZXR1cm4gTlVMTDsKKworCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisKKwlpbmRleCA9IG5ldHhlbl9nZXRfc3RzX3JlZmhhbmRsZShzdHNfZGF0YTApOworCWlmICh1bmxpa2VseShpbmRleCA+PSByZHNfcmluZy0+bnVtX2Rlc2MpKQogCQlyZXR1cm4gTlVMTDsKIAogCWJ1ZmZlciA9ICZyZHNfcmluZy0+cnhfYnVmX2FycltpbmRleF07CiAKKwlsZW5ndGggPSBuZXR4ZW5fZ2V0X3N0c190b3RhbGxlbmd0aChzdHNfZGF0YTApOworCWNrc3VtICA9IG5ldHhlbl9nZXRfc3RzX3N0YXR1cyhzdHNfZGF0YTApOworCXBrdF9vZmZzZXQgPSBuZXR4ZW5fZ2V0X3N0c19wa3Rfb2Zmc2V0KHN0c19kYXRhMCk7CisKIAlza2IgPSBuZXR4ZW5fcHJvY2Vzc19yeGJ1ZihhZGFwdGVyLCByZHNfcmluZywgaW5kZXgsIGNrc3VtKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIGJ1ZmZlcjsKQEAgLTEyNDksMTEgKzEyMDEsODggQEAKIAlpZiAocGt0X29mZnNldCkKIAkJc2tiX3B1bGwoc2tiLCBwa3Rfb2Zmc2V0KTsKIAorCXNrYi0+dHJ1ZXNpemUgPSBza2ItPmxlbiArIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZik7CiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKIAogCW5hcGlfZ3JvX3JlY2VpdmUoJnNkc19yaW5nLT5uYXBpLCBza2IpOwogCi0JYWRhcHRlci0+c3RhdHMubm9fcmN2Kys7CisJYWRhcHRlci0+c3RhdHMucnhfcGt0cysrOworCWFkYXB0ZXItPnN0YXRzLnJ4Ynl0ZXMgKz0gbGVuZ3RoOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworI2RlZmluZSBUQ1BfSERSX1NJWkUgICAgICAgICAgICAyMAorI2RlZmluZSBUQ1BfVFNfT1BUSU9OX1NJWkUgICAgICAxMgorI2RlZmluZSBUQ1BfVFNfSERSX1NJWkUgICAgICAgICAoVENQX0hEUl9TSVpFICsgVENQX1RTX09QVElPTl9TSVpFKQorCitzdGF0aWMgc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKgorbmV0eGVuX3Byb2Nlc3NfbHJvKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nLAorCQlpbnQgcmluZywgdTY0IHN0c19kYXRhMCwgdTY0IHN0c19kYXRhMSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCXN0cnVjdCBpcGhkciAqaXBoOworCXN0cnVjdCB0Y3BoZHIgKnRoOworCWJvb2wgcHVzaCwgdGltZXN0YW1wOworCWludCBsMl9oZHJfb2Zmc2V0LCBsNF9oZHJfb2Zmc2V0OworCWludCBpbmRleDsKKwl1MTYgbHJvX2xlbmd0aCwgbGVuZ3RoLCBkYXRhX29mZnNldDsKKwl1MzIgc2VxX251bWJlcjsKKworCWlmICh1bmxpa2VseShyaW5nID4gYWRhcHRlci0+bWF4X3Jkc19yaW5ncykpCisJCXJldHVybiBOVUxMOworCisJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKworCWluZGV4ID0gbmV0eGVuX2dldF9scm9fc3RzX3JlZmhhbmRsZShzdHNfZGF0YTApOworCWlmICh1bmxpa2VseShpbmRleCA+IHJkc19yaW5nLT5udW1fZGVzYykpCisJCXJldHVybiBOVUxMOworCisJYnVmZmVyID0gJnJkc19yaW5nLT5yeF9idWZfYXJyW2luZGV4XTsKKworCXRpbWVzdGFtcCA9IG5ldHhlbl9nZXRfbHJvX3N0c190aW1lc3RhbXAoc3RzX2RhdGEwKTsKKwlscm9fbGVuZ3RoID0gbmV0eGVuX2dldF9scm9fc3RzX2xlbmd0aChzdHNfZGF0YTApOworCWwyX2hkcl9vZmZzZXQgPSBuZXR4ZW5fZ2V0X2xyb19zdHNfbDJfaGRyX29mZnNldChzdHNfZGF0YTApOworCWw0X2hkcl9vZmZzZXQgPSBuZXR4ZW5fZ2V0X2xyb19zdHNfbDRfaGRyX29mZnNldChzdHNfZGF0YTApOworCXB1c2ggPSBuZXR4ZW5fZ2V0X2xyb19zdHNfcHVzaF9mbGFnKHN0c19kYXRhMCk7CisJc2VxX251bWJlciA9IG5ldHhlbl9nZXRfbHJvX3N0c19zZXFfbnVtYmVyKHN0c19kYXRhMSk7CisKKwlza2IgPSBuZXR4ZW5fcHJvY2Vzc19yeGJ1ZihhZGFwdGVyLCByZHNfcmluZywgaW5kZXgsIFNUQVRVU19DS1NVTV9PSyk7CisJaWYgKCFza2IpCisJCXJldHVybiBidWZmZXI7CisKKwlpZiAodGltZXN0YW1wKQorCQlkYXRhX29mZnNldCA9IGw0X2hkcl9vZmZzZXQgKyBUQ1BfVFNfSERSX1NJWkU7CisJZWxzZQorCQlkYXRhX29mZnNldCA9IGw0X2hkcl9vZmZzZXQgKyBUQ1BfSERSX1NJWkU7CisKKwlza2JfcHV0KHNrYiwgbHJvX2xlbmd0aCArIGRhdGFfb2Zmc2V0KTsKKworCXNrYi0+dHJ1ZXNpemUgPSBza2ItPmxlbiArIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikgKyBza2JfaGVhZHJvb20oc2tiKTsKKworCXNrYl9wdWxsKHNrYiwgbDJfaGRyX29mZnNldCk7CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKKworCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJdGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItPmRhdGEgKyAoaXBoLT5paGwgPDwgMikpOworCisJbGVuZ3RoID0gKGlwaC0+aWhsIDw8IDIpICsgKHRoLT5kb2ZmIDw8IDIpICsgbHJvX2xlbmd0aDsKKwlpcGgtPnRvdF9sZW4gPSBodG9ucyhsZW5ndGgpOworCWlwaC0+Y2hlY2sgPSAwOworCWlwaC0+Y2hlY2sgPSBpcF9mYXN0X2NzdW0oKHVuc2lnbmVkIGNoYXIgKilpcGgsIGlwaC0+aWhsKTsKKwl0aC0+cHNoID0gcHVzaDsKKwl0aC0+c2VxID0gaHRvbmwoc2VxX251bWJlcik7CisKKwlsZW5ndGggPSBza2ItPmxlbjsKKworCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisKKwlhZGFwdGVyLT5zdGF0cy5scm9fcGt0cysrOwogCWFkYXB0ZXItPnN0YXRzLnJ4Ynl0ZXMgKz0gbGVuZ3RoOwogCiAJcmV0dXJuIGJ1ZmZlcjsKQEAgLTEyNzUsMjcgKzEzMDQsMzMgQEAKIAl1MzIgY29uc3VtZXIgPSBzZHNfcmluZy0+Y29uc3VtZXI7CiAKIAlpbnQgY291bnQgPSAwOwotCXU2NCBzdHNfZGF0YTsKLQlpbnQgb3Bjb2RlLCByaW5nLCBpbmRleCwgbGVuZ3RoLCBja3N1bSwgcGt0X29mZnNldCwgZGVzY19jbnQ7CisJdTY0IHN0c19kYXRhMCwgc3RzX2RhdGExOworCWludCBvcGNvZGUsIHJpbmcgPSAwLCBkZXNjX2NudDsKIAogCXdoaWxlIChjb3VudCA8IG1heCkgewogCQlkZXNjID0gJnNkc19yaW5nLT5kZXNjX2hlYWRbY29uc3VtZXJdOwotCQlzdHNfZGF0YSA9IGxlNjRfdG9fY3B1KGRlc2MtPnN0YXR1c19kZXNjX2RhdGFbMF0pOworCQlzdHNfZGF0YTAgPSBsZTY0X3RvX2NwdShkZXNjLT5zdGF0dXNfZGVzY19kYXRhWzBdKTsKIAotCQlpZiAoIShzdHNfZGF0YSAmIFNUQVRVU19PV05FUl9IT1NUKSkKKwkJaWYgKCEoc3RzX2RhdGEwICYgU1RBVFVTX09XTkVSX0hPU1QpKQogCQkJYnJlYWs7CiAKLQkJZGVzY19jbnQgPSBuZXR4ZW5fZ2V0X3N0c19kZXNjX2NudChzdHNfZGF0YSk7Ci0JCXJpbmcgICA9IG5ldHhlbl9nZXRfc3RzX3R5cGUoc3RzX2RhdGEpOworCQlkZXNjX2NudCA9IG5ldHhlbl9nZXRfc3RzX2Rlc2NfY250KHN0c19kYXRhMCk7CiAKLQkJaWYgKHJpbmcgPiBSQ1ZfUklOR19KVU1CTykKLQkJCWdvdG8gc2tpcDsKLQotCQlvcGNvZGUgPSBuZXR4ZW5fZ2V0X3N0c19vcGNvZGUoc3RzX2RhdGEpOworCQlvcGNvZGUgPSBuZXR4ZW5fZ2V0X3N0c19vcGNvZGUoc3RzX2RhdGEwKTsKIAogCQlzd2l0Y2ggKG9wY29kZSkgewogCQljYXNlIE5FVFhFTl9OSUNfUlhQS1RfREVTQzoKIAkJY2FzZSBORVRYRU5fT0xEX1JYUEtUX0RFU0M6CisJCWNhc2UgTkVUWEVOX05JQ19TWU5fT0ZGTE9BRDoKKwkJCXJpbmcgPSBuZXR4ZW5fZ2V0X3N0c190eXBlKHN0c19kYXRhMCk7CisJCQlyeGJ1ZiA9IG5ldHhlbl9wcm9jZXNzX3JjdihhZGFwdGVyLCBzZHNfcmluZywKKwkJCQkJcmluZywgc3RzX2RhdGEwKTsKKwkJCWJyZWFrOworCQljYXNlIE5FVFhFTl9OSUNfTFJPX0RFU0M6CisJCQlyaW5nID0gbmV0eGVuX2dldF9scm9fc3RzX3R5cGUoc3RzX2RhdGEwKTsKKwkJCXN0c19kYXRhMSA9IGxlNjRfdG9fY3B1KGRlc2MtPnN0YXR1c19kZXNjX2RhdGFbMV0pOworCQkJcnhidWYgPSBuZXR4ZW5fcHJvY2Vzc19scm8oYWRhcHRlciwgc2RzX3JpbmcsCisJCQkJCXJpbmcsIHN0c19kYXRhMCwgc3RzX2RhdGExKTsKIAkJCWJyZWFrOwogCQljYXNlIE5FVFhFTl9OSUNfUkVTUE9OU0VfREVTQzoKIAkJCW5ldHhlbl9oYW5kbGVfZndfbWVzc2FnZShkZXNjX2NudCwgY29uc3VtZXIsIHNkc19yaW5nKTsKQEAgLTEzMDUsMTQgKzEzNDAsNiBAQAogCiAJCVdBUk5fT04oZGVzY19jbnQgPiAxKTsKIAotCQlpbmRleCAgPSBuZXR4ZW5fZ2V0X3N0c19yZWZoYW5kbGUoc3RzX2RhdGEpOwotCQlsZW5ndGggPSBuZXR4ZW5fZ2V0X3N0c190b3RhbGxlbmd0aChzdHNfZGF0YSk7Ci0JCWNrc3VtICA9IG5ldHhlbl9nZXRfc3RzX3N0YXR1cyhzdHNfZGF0YSk7Ci0JCXBrdF9vZmZzZXQgPSBuZXR4ZW5fZ2V0X3N0c19wa3Rfb2Zmc2V0KHN0c19kYXRhKTsKLQotCQlyeGJ1ZiA9IG5ldHhlbl9wcm9jZXNzX3JjdihhZGFwdGVyLCByaW5nLCBpbmRleCwKLQkJCQlsZW5ndGgsIGNrc3VtLCBwa3Rfb2Zmc2V0LCBzZHNfcmluZyk7Ci0KIAkJaWYgKHJ4YnVmKQogCQkJbGlzdF9hZGRfdGFpbCgmcnhidWYtPmxpc3QsICZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKTsKIApAQCAtMTM0Nyw3ICsxMzc0LDcgQEAKIAogCWlmIChjb3VudCkgewogCQlzZHNfcmluZy0+Y29uc3VtZXIgPSBjb25zdW1lcjsKLQkJTlhXUjMyKGFkYXB0ZXIsIHNkc19yaW5nLT5jcmJfc3RzX2NvbnN1bWVyLCBjb25zdW1lcik7CisJCU5YV1JJTyhhZGFwdGVyLCBzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lciwgY29uc3VtZXIpOwogCX0KIAogCXJldHVybiBjb3VudDsKQEAgLTE0MDIsOCArMTQyOSwxMCBAQAogCiAJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikgJiYgbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CiAJCQlfX25ldGlmX3R4X2xvY2sodHhfcmluZy0+dHhxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCQkJaWYgKG5ldHhlbl90eF9hdmFpbCh0eF9yaW5nKSA+IFRYX1NUT1BfVEhSRVNIKQorCQkJaWYgKG5ldHhlbl90eF9hdmFpbCh0eF9yaW5nKSA+IFRYX1NUT1BfVEhSRVNIKSB7CiAJCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCQkJCWFkYXB0ZXItPnR4X3RpbWVvX2NudCA9IDA7CisJCQl9CiAJCQlfX25ldGlmX3R4X3VubG9jayh0eF9yaW5nLT50eHEpOwogCQl9CiAJfQpAQCAtMTQ2NSwxMCArMTQ5NCwxMCBAQAogCiAJaWYgKGNvdW50KSB7CiAJCXJkc19yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOwotCQlOWFdSMzIoYWRhcHRlciwgcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIsCisJCU5YV1JJTyhhZGFwdGVyLCByZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciwKIAkJCQkocHJvZHVjZXItMSkgJiAocmRzX3JpbmctPm51bV9kZXNjLTEpKTsKIAotCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KSB7CisJCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CiAJCQkvKgogCQkJICogV3JpdGUgYSBkb29yYmVsbCBtc2cgdG8gdGVsbCBwaGFubW9uIG9mIGNoYW5nZSBpbgogCQkJICogcmVjZWl2ZSByaW5nIHByb2R1Y2VyCkBAIC0xNDgxLDkgKzE1MTAsMTAgQEAKIAkJCQkJICAgICAgKHJkc19yaW5nLT5udW1fZGVzYyAtIDEpKSk7CiAJCQluZXR4ZW5fc2V0X21zZ19jdHhpZChtc2csIGFkYXB0ZXItPnBvcnRudW0pOwogCQkJbmV0eGVuX3NldF9tc2dfb3Bjb2RlKG1zZywgTkVUWEVOX1JDVl9QUk9EVUNFUihyaW5naWQpKTsKLQkJCXdyaXRlbChtc2csCi0JCQkgICAgICAgREJfTk9STUFMSVpFKGFkYXB0ZXIsCisJCQlyZWFkX2xvY2soJmFkYXB0ZXItPmFkYXB0ZXJfbG9jayk7CisJCQl3cml0ZWwobXNnLCBEQl9OT1JNQUxJWkUoYWRhcHRlciwKIAkJCQkJICAgIE5FVFhFTl9SQ1ZfUFJPRFVDRVJfT0ZGU0VUKSk7CisJCQlyZWFkX3VubG9jaygmYWRhcHRlci0+YWRhcHRlcl9sb2NrKTsKIAkJfQogCX0KIH0KQEAgLTE1MjUsNyArMTU1NSw3IEBACiAKIAlpZiAoY291bnQpIHsKIAkJcmRzX3JpbmctPnByb2R1Y2VyID0gcHJvZHVjZXI7Ci0JCU5YV1IzMihhZGFwdGVyLCByZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciwKKwkJTlhXUklPKGFkYXB0ZXIsIHJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyLAogCQkJCShwcm9kdWNlciAtIDEpICYgKHJkc19yaW5nLT5udW1fZGVzYyAtIDEpKTsKIAl9CiAJc3Bpbl91bmxvY2soJnJkc19yaW5nLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwppbmRleCAyOGYyNzBmLi5mN2JkZGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwLDEyICsyMSw2IEBACiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgogICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAgKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuIEluYywKLSAqIDE4OTIyIEZvcmdlIERyaXZlCi0gKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKLSAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTMzLDEyICsyOCwxMiBAQAogI2luY2x1ZGUgIm5ldHhlbl9uaWNfaHcuaCIKIAogI2luY2x1ZGUgIm5ldHhlbl9uaWMuaCIKLSNpbmNsdWRlICJuZXR4ZW5fbmljX3BoYW5fcmVnLmgiCiAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk5ldFhlbiBNdWx0aSBwb3J0ICgxLzEwKSBHaWdhYml0IE5ldHdvcmsgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC02MywxOCArNTgsMzEgQEAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBuZXR4ZW5fbmljX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBzdGF0aWMgaW50IG5ldHhlbl9uaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHN0YXRpYyBpbnQgbmV0eGVuX25pY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKLXN0YXRpYyBpbnQgbmV0eGVuX25pY194bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIG5ldGRldl90eF90IG5ldHhlbl9uaWNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZCBuZXR4ZW5fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHN0YXRpYyB2b2lkIG5ldHhlbl90eF90aW1lb3V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0YXRpYyB2b2lkIG5ldHhlbl93YXRjaGRvZyh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyB2b2lkIG5ldHhlbl9md19wb2xsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyB2b2lkIG5ldHhlbl9zY2hlZHVsZV93b3JrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJd29ya19mdW5jX3QgZnVuYywgaW50IGRlbGF5KTsKK3N0YXRpYyB2b2lkIG5ldHhlbl9jYW5jZWxfZndfd29yayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogc3RhdGljIGludCBuZXR4ZW5fbmljX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgbmV0eGVuX25pY19wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiAjZW5kaWYKKworc3RhdGljIHZvaWQgbmV0eGVuX2NyZWF0ZV9zeXNmc19lbnRyaWVzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBuZXR4ZW5fcmVtb3ZlX3N5c2ZzX2VudHJpZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKKworc3RhdGljIGludCBueF9kZWNyX2Rldl9yZWZfY250KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IG5ldHhlbl9jYW5fc3RhcnRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKKwogc3RhdGljIGlycXJldHVybl90IG5ldHhlbl9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpOwogc3RhdGljIGlycXJldHVybl90IG5ldHhlbl9tc2lfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBuZXR4ZW5fbXNpeF9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpOwogCitzdGF0aWMgdm9pZCBuZXR4ZW5fY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyk7CisKIC8qICBQQ0kgRGV2aWNlIElEIFRhYmxlICAqLwogI2RlZmluZSBFTlRSWShkZXZpY2UpIFwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05FVFhFTiwgKGRldmljZSkpLCBcCkBAIC05NCw4ICsxMDIsNiBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbmV0eGVuX3BjaV90YmwpOwogCi1zdGF0aWMgdm9pZCBuZXR4ZW5fd2F0Y2hkb2codW5zaWduZWQgbG9uZyk7Ci0KIHN0YXRpYyB1aW50MzJfdCBjcmJfY21kX3Byb2R1Y2VyWzRdID0gewogCUNSQl9DTURfUFJPRFVDRVJfT0ZGU0VULCBDUkJfQ01EX1BST0RVQ0VSX09GRlNFVF8xLAogCUNSQl9DTURfUFJPRFVDRVJfT0ZGU0VUXzIsIENSQl9DTURfUFJPRFVDRVJfT0ZGU0VUXzMKQEAgLTEwNSw3ICsxMTEsNyBAQAogbmV0eGVuX25pY191cGRhdGVfY21kX3Byb2R1Y2VyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJc3RydWN0IG54X2hvc3RfdHhfcmluZyAqdHhfcmluZykKIHsKLQlOWFdSMzIoYWRhcHRlciwgdHhfcmluZy0+Y3JiX2NtZF9wcm9kdWNlciwgdHhfcmluZy0+cHJvZHVjZXIpOworCU5YV1JJTyhhZGFwdGVyLCB0eF9yaW5nLT5jcmJfY21kX3Byb2R1Y2VyLCB0eF9yaW5nLT5wcm9kdWNlcik7CiAKIAlpZiAobmV0eGVuX3R4X2F2YWlsKHR4X3JpbmcpIDw9IFRYX1NUT1BfVEhSRVNIKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKQEAgLTEyMiw3ICsxMjgsNyBAQAogbmV0eGVuX25pY191cGRhdGVfY21kX2NvbnN1bWVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJc3RydWN0IG54X2hvc3RfdHhfcmluZyAqdHhfcmluZykKIHsKLQlOWFdSMzIoYWRhcHRlciwgdHhfcmluZy0+Y3JiX2NtZF9jb25zdW1lciwgdHhfcmluZy0+c3dfY29uc3VtZXIpOworCU5YV1JJTyhhZGFwdGVyLCB0eF9yaW5nLT5jcmJfY21kX2NvbnN1bWVyLCB0eF9yaW5nLT5zd19jb25zdW1lcik7CiB9CiAKIHN0YXRpYyB1aW50MzJfdCBtc2lfdGd0X3N0YXR1c1s4XSA9IHsKQEAgLTEzOCwxOCArMTQ0LDE3IEBACiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CiAKLQlOWFdSMzIoYWRhcHRlciwgc2RzX3JpbmctPmNyYl9pbnRyX21hc2ssIDApOworCU5YV1JJTyhhZGFwdGVyLCBzZHNfcmluZy0+Y3JiX2ludHJfbWFzaywgMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXR4ZW5fbmljX2VuYWJsZV9pbnQoc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nKQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOwogCi0JTlhXUjMyKGFkYXB0ZXIsIHNkc19yaW5nLT5jcmJfaW50cl9tYXNrLCAweDEpOworCU5YV1JJTyhhZGFwdGVyLCBzZHNfcmluZy0+Y3JiX2ludHJfbWFzaywgMHgxKTsKIAogCWlmICghTkVUWEVOX0lTX01TSV9GQU1JTFkoYWRhcHRlcikpCi0JCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUoYWRhcHRlciwKLQkJCQlhZGFwdGVyLT5sZWdhY3lfaW50ci50Z3RfbWFza19yZWcsIDB4ZmJmZik7CisJCU5YV1JJTyhhZGFwdGVyLCBhZGFwdGVyLT50Z3RfbWFza19yZWcsIDB4ZmJmZik7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE3OSw3ICsxODQsNyBAQAogCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWlmIChuZXR4ZW5fYWxsb2Nfc2RzX3JpbmdzKHJlY3ZfY3R4LCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgewogCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOwpAQCAtMzA4LDM2ICszMTMsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIG5ldHhlbl9jaGVja19vcHRpb25zKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpCi0JCWFkYXB0ZXItPm51bV9yeGQgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzEwRzsKLQllbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKQotCQlhZGFwdGVyLT5udW1fcnhkID0gTUFYX1JDVl9ERVNDUklQVE9SU18xRzsKLQotCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gMDsKLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgewotCQlhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCA9ICEhdXNlX21zaV94OwotCQlhZGFwdGVyLT5yc3Nfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JfSBlbHNlIGlmIChhZGFwdGVyLT5md192ZXJzaW9uID49IE5FVFhFTl9WRVJTSU9OX0NPREUoMywgNCwgMzM2KSkgewotCQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7Ci0JCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEc6Ci0JCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfQ1g0OgotCQkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAhIXVzZV9tc2lfeDsKLQkJCWFkYXB0ZXItPnJzc19zdXBwb3J0ZWQgPSAhIXVzZV9tc2lfeDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlhZGFwdGVyLT5udW1fdHhkID0gTUFYX0NNRF9ERVNDUklQVE9SU19IT1NUOwotCWFkYXB0ZXItPm51bV9qdW1ib19yeGQgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTOwotCWFkYXB0ZXItPm51bV9scm9fcnhkID0gTUFYX0xST19SQ1ZfREVTQ1JJUFRPUlM7Ci0KLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyBpbnQKIG5ldHhlbl9jaGVja19od19pbml0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGZpcnN0X2Jvb3QpCiB7CkBAIC01MzcsMTAgKzUxMiwyMiBAQAogCQlsZWdhY3lfaW50cnAgPSAmbGVnYWN5X2ludHJbYWRhcHRlci0+YWh3LnBjaV9mdW5jXTsKIAllbHNlCiAJCWxlZ2FjeV9pbnRycCA9ICZsZWdhY3lfaW50clswXTsKLQlhZGFwdGVyLT5sZWdhY3lfaW50ci5pbnRfdmVjX2JpdCA9IGxlZ2FjeV9pbnRycC0+aW50X3ZlY19iaXQ7Ci0JYWRhcHRlci0+bGVnYWN5X2ludHIudGd0X3N0YXR1c19yZWcgPSBsZWdhY3lfaW50cnAtPnRndF9zdGF0dXNfcmVnOwotCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9tYXNrX3JlZyA9IGxlZ2FjeV9pbnRycC0+dGd0X21hc2tfcmVnOwotCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnBjaV9pbnRfcmVnID0gbGVnYWN5X2ludHJwLT5wY2lfaW50X3JlZzsKKworCWFkYXB0ZXItPmludF92ZWNfYml0ID0gbGVnYWN5X2ludHJwLT5pbnRfdmVjX2JpdDsKKwlhZGFwdGVyLT50Z3Rfc3RhdHVzX3JlZyA9IG5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQlsZWdhY3lfaW50cnAtPnRndF9zdGF0dXNfcmVnKTsKKwlhZGFwdGVyLT50Z3RfbWFza19yZWcgPSBuZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJbGVnYWN5X2ludHJwLT50Z3RfbWFza19yZWcpOworCWFkYXB0ZXItPnBjaV9pbnRfcmVnID0gbmV0eGVuX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCWxlZ2FjeV9pbnRycC0+cGNpX2ludF9yZWcpOworCWFkYXB0ZXItPmlzcl9pbnRfdmVjID0gbmV0eGVuX2dldF9pb2FkZHIoYWRhcHRlciwgSVNSX0lOVF9WRUNUT1IpOworCisJaWYgKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCA+PSBOWF9QM19CMSkKKwkJYWRhcHRlci0+Y3JiX2ludF9zdGF0ZV9yZWcgPSBuZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJSVNSX0lOVF9TVEFURV9SRUcpOworCWVsc2UKKwkJYWRhcHRlci0+Y3JiX2ludF9zdGF0ZV9yZWcgPSBuZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJQ1JCX0lOVF9WRUNUT1IpOwogCiAJbmV0eGVuX3NldF9tc2l4X2JpdChwZGV2LCAwKTsKIApAQCAtNTY3LDggKzU1NCw4IEBACiAKIAlpZiAodXNlX21zaSAmJiAhcGNpX2VuYWJsZV9tc2kocGRldikpIHsKIAkJYWRhcHRlci0+ZmxhZ3MgfD0gTkVUWEVOX05JQ19NU0lfRU5BQkxFRDsKLQkJYWRhcHRlci0+bXNpX3RndF9zdGF0dXMgPQotCQkJbXNpX3RndF9zdGF0dXNbYWRhcHRlci0+YWh3LnBjaV9mdW5jXTsKKwkJYWRhcHRlci0+dGd0X3N0YXR1c19yZWcgPSBuZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJCW1zaV90Z3Rfc3RhdHVzW2FkYXB0ZXItPmFody5wY2lfZnVuY10pOwogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbXNpIGludGVycnVwdHNcbiIpOwogCQlhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yID0gcGRldi0+aXJxOwogCQlyZXR1cm47CkBAIC02MjgsMTQgKzYxNSw2IEBACiAJbWVtX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CiAJcGNpX2xlbjAgPSAwOwogCi0JYWRhcHRlci0+aHdfd3JpdGVfd3ggPSBuZXR4ZW5fbmljX2h3X3dyaXRlX3d4XzEyOE07Ci0JYWRhcHRlci0+aHdfcmVhZF93eCA9IG5ldHhlbl9uaWNfaHdfcmVhZF93eF8xMjhNOwotCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZSA9IG5ldHhlbl9uaWNfcGNpX3JlYWRfaW1tZWRpYXRlXzEyOE07Ci0JYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZSA9IG5ldHhlbl9uaWNfcGNpX3dyaXRlX2ltbWVkaWF0ZV8xMjhNOwotCWFkYXB0ZXItPnBjaV9zZXRfd2luZG93ID0gbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18xMjhNOwotCWFkYXB0ZXItPnBjaV9tZW1fcmVhZCA9IG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkXzEyOE07Ci0JYWRhcHRlci0+cGNpX21lbV93cml0ZSA9IG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV8xMjhNOwotCiAJLyogMTI4IE1lZyBvZiBtZW1vcnkgKi8KIAlpZiAobWVtX2xlbiA9PSBORVRYRU5fUENJXzEyOE1CX1NJWkUpIHsKIAkJbWVtX3B0cjAgPSBpb3JlbWFwKG1lbV9iYXNlLCBGSVJTVF9QQUdFX0dST1VQX1NJWkUpOwpAQCAtNjQ4LDE0ICs2MjcsNiBAQAogCQltZW1fcHRyMiA9IGlvcmVtYXAobWVtX2Jhc2UgKyBUSElSRF9QQUdFX0dST1VQX1NUQVJUIC0KIAkJCVNFQ09ORF9QQUdFX0dST1VQX1NUQVJULCBUSElSRF9QQUdFX0dST1VQX1NJWkUpOwogCX0gZWxzZSBpZiAobWVtX2xlbiA9PSBORVRYRU5fUENJXzJNQl9TSVpFKSB7Ci0JCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8yTTsKLQkJYWRhcHRlci0+aHdfcmVhZF93eCA9IG5ldHhlbl9uaWNfaHdfcmVhZF93eF8yTTsKLQkJYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlID0gbmV0eGVuX25pY19wY2lfcmVhZF9pbW1lZGlhdGVfMk07Ci0JCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPQotCQkJbmV0eGVuX25pY19wY2lfd3JpdGVfaW1tZWRpYXRlXzJNOwotCQlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMk07Ci0JCWFkYXB0ZXItPnBjaV9tZW1fcmVhZCA9IG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkXzJNOwotCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlID0gbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlXzJNOwogCiAJCW1lbV9wdHIwID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIDApOwogCQlpZiAobWVtX3B0cjAgPT0gTlVMTCkgewpAQCAtNjY3LDkgKzYzOCwxMCBAQAogCQlhZGFwdGVyLT5haHcuZGRyX21uX3dpbmRvdyA9IDA7CiAJCWFkYXB0ZXItPmFody5xZHJfc25fd2luZG93ID0gMDsKIAotCQlhZGFwdGVyLT5haHcubW5fd2luX2NyYiA9IDB4MTAwMDAwICsgUENJWF9NTl9XSU5ET1cgKwotCQkJKHBjaV9mdW5jICogMHgyMCk7Ci0JCWFkYXB0ZXItPmFody5tc193aW5fY3JiID0gMHgxMDAwMDAgKyBQQ0lYX1NOX1dJTkRPVzsKKwkJYWRhcHRlci0+YWh3Lm1uX3dpbl9jcmIgPSBORVRYRU5fUENJX0NSQlNQQUNFICsKKwkJCTB4MTAwMDAwICsgUENJWF9NTl9XSU5ET1cgKyAocGNpX2Z1bmMgKiAweDIwKTsKKwkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgPSBORVRYRU5fUENJX0NSQlNQQUNFICsKKwkJCTB4MTAwMDAwICsgUENJWF9TTl9XSU5ET1c7CiAJCWlmIChwY2lfZnVuYyA8IDQpCiAJCQlhZGFwdGVyLT5haHcubXNfd2luX2NyYiArPSAocGNpX2Z1bmMgKiAweDIwKTsKIAkJZWxzZQpAQCAtNjc5LDYgKzY1MSw4IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAorCW5ldHhlbl9zZXR1cF9od29wcyhhZGFwdGVyKTsKKwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlZE1CIG1lbW9yeSBtYXBcbiIsIChpbnQpKG1lbV9sZW4+PjIwKSk7CiAKIAlhZGFwdGVyLT5haHcucGNpX2Jhc2UwID0gbWVtX3B0cjA7CkBAIC03MTcsMjAgKzY5MSwxMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZAorbmV0eGVuX2NoZWNrX29wdGlvbnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkOworCWNoYXIgYnJkX25hbWVbTkVUWEVOX01BWF9TSE9SVF9OQU1FXTsKKwljaGFyIHNlcmlhbF9udW1bMzJdOworCWludCBpLCBvZmZzZXQsIHZhbDsKKwlpbnQgKnB0cjMyOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCA9IDA7CisKKwlwdHIzMiA9IChpbnQgKikmc2VyaWFsX251bTsKKwlvZmZzZXQgPSBOWF9GV19TRVJJQUxfTlVNX09GRlNFVDsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZ2YWwpID09IC0xKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciByZWFkaW5nIGJvYXJkIGluZm9cbiIpOworCQkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKKwkJCXJldHVybjsKKwkJfQorCQlwdHIzMltpXSA9IGNwdV90b19sZTMyKHZhbCk7CisJCW9mZnNldCArPSBzaXplb2YodTMyKTsKKwl9CisKKwlmd19tYWpvciA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fRldfVkVSU0lPTl9NQUpPUik7CisJZndfbWlub3IgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX0ZXX1ZFUlNJT05fTUlOT1IpOworCWZ3X2J1aWxkID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9GV19WRVJTSU9OX1NVQik7CisKKwlhZGFwdGVyLT5md192ZXJzaW9uID0gTkVUWEVOX1ZFUlNJT05fQ09ERShmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkKTsKKworCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApIHsKKwkJZ2V0X2JyZF9uYW1lX2J5X3R5cGUoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUsIGJyZF9uYW1lKTsKKworCQlwcmludGsoS0VSTl9JTkZPICJOZXRYZW4gJXMgQm9hcmQgUy9OICVzICBDaGlwIHJldiAweCV4XG4iLAorCQkJCWJyZF9uYW1lLCBzZXJpYWxfbnVtLCBhZGFwdGVyLT5haHcucmV2aXNpb25faWQpOworCX0KKworCWlmIChhZGFwdGVyLT5md192ZXJzaW9uIDwgTkVUWEVOX1ZFUlNJT05fQ09ERSgzLCA0LCAyMTYpKSB7CisJCWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCA9IDE7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJmaXJtd2FyZSB2ZXJzaW9uICVkLiVkLiVkIHVuc3VwcG9ydGVkXG4iLAorCQkJCWZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQpOworCQlyZXR1cm47CisJfQorCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJaSA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fU1JFX01JU0MpOworCQlhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2ggPSAoaSAmIDB4ODAwMCkgPyAxIDogMDsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZmlybXdhcmUgdiVkLiVkLiVkIFslc11cbiIsCisJCQlmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkLAorCQkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID8gImN1dC10aHJvdWdoIiA6ICJsZWdhY3kiKTsKKworCWlmIChhZGFwdGVyLT5md192ZXJzaW9uID49IE5FVFhFTl9WRVJTSU9OX0NPREUoNCwgMCwgMjIyKSkKKwkJYWRhcHRlci0+Y2FwYWJpbGl0aWVzID0gTlhSRDMyKGFkYXB0ZXIsIENSQl9GV19DQVBBQklMSVRJRVNfMSk7CisKKwlhZGFwdGVyLT5mbGFncyAmPSB+TkVUWEVOX05JQ19MUk9fRU5BQkxFRDsKKworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgeworCQlhZGFwdGVyLT5udW1fcnhkID0gREVGQVVMVF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOworCQlhZGFwdGVyLT5udW1fanVtYm9fcnhkID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xMEc7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJCWFkYXB0ZXItPm51bV9yeGQgPSBERUZBVUxUX1JDVl9ERVNDUklQVE9SU18xRzsKKwkJYWRhcHRlci0+bnVtX2p1bWJvX3J4ZCA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMUc7CisJfQorCisJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOworCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisJCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7CisJCWFkYXB0ZXItPnJzc19zdXBwb3J0ZWQgPSAhIXVzZV9tc2lfeDsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmZ3X3ZlcnNpb24gPj0gTkVUWEVOX1ZFUlNJT05fQ09ERSgzLCA0LCAzMzYpKSB7CisJCXN3aXRjaCAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpIHsKKwkJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwRzoKKwkJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19DWDQ6CisJCQlhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCA9ICEhdXNlX21zaV94OworCQkJYWRhcHRlci0+cnNzX3N1cHBvcnRlZCA9ICEhdXNlX21zaV94OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCWFkYXB0ZXItPm51bV90eGQgPSBNQVhfQ01EX0RFU0NSSVBUT1JTOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJYWRhcHRlci0+bnVtX2xyb19yeGQgPSBNQVhfTFJPX1JDVl9ERVNDUklQVE9SUzsKKwkJYWRhcHRlci0+bWF4X3Jkc19yaW5ncyA9IDM7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+bnVtX2xyb19yeGQgPSAwOworCQlhZGFwdGVyLT5tYXhfcmRzX3JpbmdzID0gMjsKKwl9Cit9CisKIHN0YXRpYyBpbnQKLW5ldHhlbl9zdGFydF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCByZXF1ZXN0X2Z3KQorbmV0eGVuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgdmFsLCBlcnIsIGZpcnN0X2Jvb3Q7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0JaW50IGZpcnN0X2RyaXZlciA9IDA7CisJLyogcmVxdWlyZWQgZm9yIE5YMjAzMSBkdW1teSBkbWEgKi8KKwllcnIgPSBueF9zZXRfZG1hX21hc2soYWRhcHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQotCQlmaXJzdF9kcml2ZXIgPSAoYWRhcHRlci0+cG9ydG51bSA9PSAwKTsKLQllbHNlCi0JCWZpcnN0X2RyaXZlciA9IChhZGFwdGVyLT5haHcucGNpX2Z1bmMgPT0gMCk7Ci0KLQlpZiAoIWZpcnN0X2RyaXZlcikKKwlpZiAoIW5ldHhlbl9jYW5fc3RhcnRfZmlybXdhcmUoYWRhcHRlcikpCiAJCWdvdG8gd2FpdF9pbml0OwogCiAJZmlyc3RfYm9vdCA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fQ0FNX1JBTSgweDFmYykpOwpAQCAtNzQxLDEyICs4MDYsMTMgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiAocmVxdWVzdF9mdykKLQkJbmV0eGVuX3JlcXVlc3RfZmlybXdhcmUoYWRhcHRlcik7CisJbmV0eGVuX3JlcXVlc3RfZmlybXdhcmUoYWRhcHRlcik7CiAKIAllcnIgPSBuZXR4ZW5fbmVlZF9md19yZXNldChhZGFwdGVyKTsKLQlpZiAoZXJyIDw9IDApCi0JCXJldHVybiBlcnI7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dDsKKwlpZiAoZXJyID09IDApCisJCWdvdG8gcmVhZHk7CiAKIAlpZiAoZmlyc3RfYm9vdCAhPSAweDU1NTU1NTU1KSB7CiAJCU5YV1IzMihhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFLCAwKTsKQEAgLTc1NSwxMCArODIxLDE3IEBACiAJfQogCiAJTlhXUjMyKGFkYXB0ZXIsIENSQl9ETUFfU0hJRlQsIDB4NTU1NTU1NTUpOworCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fUEVHX0hBTFRfU1RBVFVTMSwgMCk7CisJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9QRUdfSEFMVF9TVEFUVVMyLCAwKTsKKwogCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQogCQluZXR4ZW5fc2V0X3BvcnRfbW9kZShhZGFwdGVyKTsKIAotCW5ldHhlbl9sb2FkX2Zpcm13YXJlKGFkYXB0ZXIpOworCWVyciA9IG5ldHhlbl9sb2FkX2Zpcm13YXJlKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCW5ldHhlbl9yZWxlYXNlX2Zpcm13YXJlKGFkYXB0ZXIpOwogCiAJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKIApAQCAtNzcwLDkgKzg0Myw5IEBACiAKIAl9CiAKLQllcnIgPSBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29mZmxvYWQoYWRhcHRlcik7CisJZXJyID0gbmV0eGVuX2luaXRfZHVtbXlfZG1hKGFkYXB0ZXIpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyX291dDsKIAogCS8qCiAJICogVGVsbCB0aGUgaGFyZHdhcmUgb3VyIHZlcnNpb24gbnVtYmVyLgpAQCAtNzgyLDE1ICs4NTUsMjggQEAKIAkJfCAoX05FVFhFTl9OSUNfTElOVVhfU1VCVkVSU0lPTik7CiAJTlhXUjMyKGFkYXB0ZXIsIENSQl9EUklWRVJfVkVSU0lPTiwgdmFsKTsKIAorcmVhZHk6CisJTlhXUjMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfU1RBVEUsIE5YX0RFVl9SRUFEWSk7CisKIHdhaXRfaW5pdDoKIAkvKiBIYW5kc2hha2Ugd2l0aCB0aGUgY2FyZCBiZWZvcmUgd2UgcmVnaXN0ZXIgdGhlIGRldmljZXMuICovCiAJZXJyID0gbmV0eGVuX3BoYW50b21faW5pdChhZGFwdGVyLCBORVRYRU5fTklDX1BFR19UVU5FKTsKIAlpZiAoZXJyKSB7Ci0JCW5ldHhlbl9mcmVlX2FkYXB0ZXJfb2ZmbG9hZChhZGFwdGVyKTsKLQkJcmV0dXJuIGVycjsKKwkJbmV0eGVuX2ZyZWVfZHVtbXlfZG1hKGFkYXB0ZXIpOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JcmV0dXJuIDA7CisJbnhfdXBkYXRlX2RtYV9tYXNrKGFkYXB0ZXIpOworCisJbmV0eGVuX2NoZWNrX29wdGlvbnMoYWRhcHRlcik7CisKKwlhZGFwdGVyLT5uZWVkX2Z3X3Jlc2V0ID0gMDsKKworCS8qIGZhbGwgdGhyb3VnaCBhbmQgcmVsZWFzZSBmaXJtd2FyZSAqLworCitlcnJfb3V0OgorCW5ldHhlbl9yZWxlYXNlX2Zpcm13YXJlKGFkYXB0ZXIpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTg0MCwxMSArOTI2LDI4IEBACiAJfQogfQogCitzdGF0aWMgdm9pZAorbmV0eGVuX25pY19pbml0X2NvYWxlc2NlX2RlZmF1bHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlhZGFwdGVyLT5jb2FsLmZsYWdzID0gTkVUWEVOX05JQ19JTlRSX0RFRkFVTFQ7CisJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF90aW1lX3VzID0KKwkJTkVUWEVOX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9SWF9USU1FX1VTOworCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfcGFja2V0cyA9CisJCU5FVFhFTl9ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfUlhfUEFDS0VUUzsKKwlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnR4X3RpbWVfdXMgPQorCQlORVRYRU5fREVGQVVMVF9JTlRSX0NPQUxFU0NFX1RYX1RJTUVfVVM7CisJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS50eF9wYWNrZXRzID0KKwkJTkVUWEVOX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9UWF9QQUNLRVRTOworfQorCiBzdGF0aWMgaW50CiBuZXR4ZW5fbmljX3VwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlpbnQgZXJyOwogCisJaWYgKGFkYXB0ZXItPmlzX3VwICE9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKQorCQlyZXR1cm4gLUVJTzsKKwogCWVyciA9IGFkYXB0ZXItPmluaXRfcG9ydChhZGFwdGVyLCBhZGFwdGVyLT5waHlzaWNhbF9wb3J0KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBpbml0aWFsaXplIHBvcnQgJWRcbiIsCkBAIC04NjIsNiArOTY1LDEyIEBACiAJaWYgKGFkYXB0ZXItPm1heF9zZHNfcmluZ3MgPiAxKQogCQluZXR4ZW5fY29uZmlnX3JzcyhhZGFwdGVyLCAxKTsKIAorCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQluZXR4ZW5fY29uZmlnX2ludHJfY29hbGVzY2UoYWRhcHRlcik7CisKKwlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgTlhfRldfQ0FQQUJJTElUWV9IV19MUk8pCisJCW5ldHhlbl9jb25maWdfaHdfbHJvKGFkYXB0ZXIsIE5FVFhFTl9OSUNfTFJPX0VOQUJMRUQpOworCiAJbmV0eGVuX25hcGlfZW5hYmxlKGFkYXB0ZXIpOwogCiAJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIE5YX0ZXX0NBUEFCSUxJVFlfTElOS19OT1RJRklDQVRJT04pCkBAIC04NjksMTQgKzk3OCwxOCBAQAogCWVsc2UKIAkJbmV0eGVuX25pY19zZXRfbGlua19wYXJhbWV0ZXJzKGFkYXB0ZXIpOwogCi0JbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7Ci0KKwlzZXRfYml0KF9fTlhfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZAogbmV0eGVuX25pY19kb3duKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKKwlpZiAoYWRhcHRlci0+aXNfdXAgIT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpCisJCXJldHVybjsKKworCWNsZWFyX2JpdChfX05YX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKTsKKwogCXNwaW5fbG9jaygmYWRhcHRlci0+dHhfY2xlYW5fbG9jayk7CiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CkBAIC04ODcsMTIgKzEwMDAsMTIgQEAKIAlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKIAkJbmV0eGVuX3AzX2ZyZWVfbWFjX2xpc3QoYWRhcHRlcik7CiAKKwlhZGFwdGVyLT5zZXRfcHJvbWlzYyhhZGFwdGVyLCBORVRYRU5fTklVX05PTl9QUk9NSVNDX01PREUpOworCiAJbmV0eGVuX25hcGlfZGlzYWJsZShhZGFwdGVyKTsKIAogCW5ldHhlbl9yZWxlYXNlX3R4X2J1ZmZlcnMoYWRhcHRlcik7CiAJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnR4X2NsZWFuX2xvY2spOwotCi0JZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKIH0KIAogCkBAIC05MDUsNiArMTAxOCw5IEBACiAJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOwogCXN0cnVjdCBueF9ob3N0X3R4X3JpbmcgKnR4X3Jpbmc7CiAKKwlpZiAoYWRhcHRlci0+aXNfdXAgPT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpCisJCXJldHVybiAwOworCiAJZXJyID0gbmV0eGVuX2luaXRfZmlybXdhcmUoYWRhcHRlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTkxMywxMSArMTAyOSw2IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmIChhZGFwdGVyLT5md19tYWpvciA8IDQpCi0JCWFkYXB0ZXItPm1heF9yZHNfcmluZ3MgPSAzOwotCWVsc2UKLQkJYWRhcHRlci0+bWF4X3Jkc19yaW5ncyA9IDI7Ci0KIAllcnIgPSBuZXR4ZW5fYWxsb2Nfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgaW4gc2V0dGluZyBzdyByZXNvdXJjZXNcbiIsCkBAIC05MjUsOCArMTAzNiw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JbmV0eGVuX25pY19jbGVhcl9zdGF0cyhhZGFwdGVyKTsKLQogCWVyciA9IG5ldHhlbl9hbGxvY19od19yZXNvdXJjZXMoYWRhcHRlcik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbiBzZXR0aW5nIGh3IHJlc291cmNlc1xuIiwKQEAgLTkzNCwxMCArMTA0MywxMiBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9zdzsKIAl9CiAKLQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KSB7CisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKIAkJdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7Ci0JCXR4X3JpbmctPmNyYl9jbWRfcHJvZHVjZXIgPSBjcmJfY21kX3Byb2R1Y2VyW2FkYXB0ZXItPnBvcnRudW1dOwotCQl0eF9yaW5nLT5jcmJfY21kX2NvbnN1bWVyID0gY3JiX2NtZF9jb25zdW1lclthZGFwdGVyLT5wb3J0bnVtXTsKKwkJdHhfcmluZy0+Y3JiX2NtZF9wcm9kdWNlciA9IG5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJY3JiX2NtZF9wcm9kdWNlclthZGFwdGVyLT5wb3J0bnVtXSk7CisJCXR4X3JpbmctPmNyYl9jbWRfY29uc3VtZXIgPSBuZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJCWNyYl9jbWRfY29uc3VtZXJbYWRhcHRlci0+cG9ydG51bV0pOwogCiAJCXR4X3JpbmctPnByb2R1Y2VyID0gMDsKIAkJdHhfcmluZy0+c3dfY29uc3VtZXIgPSAwOwpAQCAtOTU4LDYgKzEwNjksMTEgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfcnhidWY7CiAJfQogCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCW5ldHhlbl9uaWNfaW5pdF9jb2FsZXNjZV9kZWZhdWx0cyhhZGFwdGVyKTsKKworCW5ldHhlbl9jcmVhdGVfc3lzZnNfZW50cmllcyhhZGFwdGVyKTsKKwogCWFkYXB0ZXItPmlzX3VwID0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUM7CiAJcmV0dXJuIDA7CiAKQEAgLTk3Miw2ICsxMDg4LDExIEBACiBzdGF0aWMgdm9pZAogbmV0eGVuX25pY19kZXRhY2goc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogeworCWlmIChhZGFwdGVyLT5pc191cCAhPSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykKKwkJcmV0dXJuOworCisJbmV0eGVuX3JlbW92ZV9zeXNmc19lbnRyaWVzKGFkYXB0ZXIpOworCiAJbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCW5ldHhlbl9yZWxlYXNlX3J4X2J1ZmZlcnMoYWRhcHRlcik7CiAJbmV0eGVuX25pY19mcmVlX2lycShhZGFwdGVyKTsKQEAgLTk4MSw2ICsxMTAyLDEwMSBAQAogCWFkYXB0ZXItPmlzX3VwID0gMDsKIH0KIAoraW50CituZXR4ZW5fbmljX3Jlc2V0X2NvbnRleHQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChhZGFwdGVyLT5pc191cCA9PSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykgeworCisJCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQkJbmV0eGVuX25pY19kb3duKGFkYXB0ZXIsIG5ldGRldik7CisKKwkJbmV0eGVuX25pY19kZXRhY2goYWRhcHRlcik7CisKKwkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQkJZXJyID0gbmV0eGVuX25pY19hdHRhY2goYWRhcHRlcik7CisJCQlpZiAoIWVycikKKwkJCQllcnIgPSBuZXR4ZW5fbmljX3VwKGFkYXB0ZXIsIG5ldGRldik7CisKKwkJCWlmIChlcnIpCisJCQkJZ290byBkb25lOworCQl9CisKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCX0KKworZG9uZToKKwljbGVhcl9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorbmV0eGVuX3NldHVwX25ldGRldihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJYWRhcHRlci0+cnhfY3N1bSA9IDE7CisJYWRhcHRlci0+bWNfZW5hYmxlZCA9IDA7CisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCWFkYXB0ZXItPm1heF9tY19jb3VudCA9IDM4OworCWVsc2UKKwkJYWRhcHRlci0+bWF4X21jX2NvdW50ID0gMTY7CisKKwluZXRkZXYtPm5ldGRldl9vcHMJICAgPSAmbmV0eGVuX25ldGRldl9vcHM7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyAgICAgPSAyKkhaOworCisJbmV0eGVuX25pY19jaGFuZ2VfbXR1KG5ldGRldiwgbmV0ZGV2LT5tdHUpOworCisJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJm5ldHhlbl9uaWNfZXRodG9vbF9vcHMpOworCisJbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPKTsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0dSTyk7CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08pOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1RTTzYpOworCQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gKE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9UU082KTsKKwl9CisKKwlpZiAoYWRhcHRlci0+cGNpX3VzaW5nX2RhYykgeworCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKwkJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKwl9CisKKwlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgTlhfRldfQ0FQQUJJTElUWV9GVkxBTlRYKQorCQluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0hXX1ZMQU5fVFgpOworCisJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIE5YX0ZXX0NBUEFCSUxJVFlfSFdfTFJPKQorCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCisJbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yOworCisJSU5JVF9XT1JLKCZhZGFwdGVyLT50eF90aW1lb3V0X3Rhc2ssIG5ldHhlbl90eF90aW1lb3V0X3Rhc2spOworCisJaWYgKG5ldHhlbl9yZWFkX21hY19hZGRyKGFkYXB0ZXIpKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgbWFjIGFkZHJcbiIpOworCisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBuZXQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQKIG5ldHhlbl9uaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CkBAIC0xMDE4LDkgKzEyMzQsOCBAQAogCiAJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fYWRhcHRlcikpOwogCWlmKCFuZXRkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgIgotCQkJCSJkZXZpY2UgYmxvY2suQ2hlY2sgc3lzdGVtIG1lbW9yeSByZXNvdXJjZSIKLQkJCQkiIHVzYWdlLlxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBuZXRfZGV2aWNlXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwogCX0KIApAQCAtMTAzNCwxMCArMTI0OSw2IEBACiAJcmV2aXNpb25faWQgPSBwZGV2LT5yZXZpc2lvbjsKIAlhZGFwdGVyLT5haHcucmV2aXNpb25faWQgPSByZXZpc2lvbl9pZDsKIAotCWVyciA9IG54X3NldF9kbWFfbWFzayhhZGFwdGVyKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7Ci0KIAlyd2xvY2tfaW5pdCgmYWRhcHRlci0+YWRhcHRlcl9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dHhfY2xlYW5fbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPm1hY19saXN0KTsKQEAgLTEwNDgsNDMgKzEyNTksMTMgQEAKIAogCS8qIFRoaXMgd2lsbCBiZSByZXNldCBmb3IgbWV6eiBjYXJkcyAgKi8KIAlhZGFwdGVyLT5wb3J0bnVtID0gcGNpX2Z1bmNfaWQ7Ci0JYWRhcHRlci0+cnhfY3N1bSA9IDE7Ci0JYWRhcHRlci0+bWNfZW5hYmxlZCA9IDA7Ci0JaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkKLQkJYWRhcHRlci0+bWF4X21jX2NvdW50ID0gMzg7Ci0JZWxzZQotCQlhZGFwdGVyLT5tYXhfbWNfY291bnQgPSAxNjsKIAotCW5ldGRldi0+bmV0ZGV2X29wcwkgICA9ICZuZXR4ZW5fbmV0ZGV2X29wczsKLQluZXRkZXYtPndhdGNoZG9nX3RpbWVvICAgICA9IDIqSFo7Ci0KLQluZXR4ZW5fbmljX2NoYW5nZV9tdHUobmV0ZGV2LCBuZXRkZXYtPm10dSk7Ci0KLQlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmbmV0eGVuX25pY19ldGh0b29sX29wcyk7Ci0KLQluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08pOwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfR1JPKTsKLQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gKE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTyk7Ci0KLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKSB7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9UU082KTsKLQkJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfVFNPNik7Ci0JfQotCi0JaWYgKGFkYXB0ZXItPnBjaV91c2luZ19kYWMpIHsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7Ci0JCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7Ci0JfQotCi0JaWYgKG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oYWRhcHRlcikgIT0gMCkgewotCQlwcmludGsoIiVzOiBFcnJvciBnZXR0aW5nIGJvYXJkIGNvbmZpZyBpbmZvLlxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJZXJyID0gLUVJTzsKKwllcnIgPSBuZXR4ZW5fbmljX2dldF9ib2FyZF9pbmZvKGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXJyb3IgZ2V0dGluZyBib2FyZCBjb25maWcgaW5mby5cbiIpOwogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAl9CiAKLQluZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29wcyhhZGFwdGVyKTsKLQogCS8qIE1lenogY2FyZHMgaGF2ZSBQQ0kgZnVuY3Rpb24gMCwyLDMgZW5hYmxlZCAqLwogCXN3aXRjaCAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpIHsKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0lNRVo6CkBAIC0xMDk2LDUzICsxMjc3LDMyIEBACiAJCWJyZWFrOwogCX0KIAotCWVyciA9IG5ldHhlbl9zdGFydF9maXJtd2FyZShhZGFwdGVyLCAxKTsKKwllcnIgPSBuZXR4ZW5fc3RhcnRfZmlybXdhcmUoYWRhcHRlcik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAKLQlueF91cGRhdGVfZG1hX21hc2soYWRhcHRlcik7Ci0KLQluZXR4ZW5fbmljX2dldF9maXJtd2FyZV9pbmZvKGFkYXB0ZXIpOwotCiAJLyoKIAkgKiBTZWUgaWYgdGhlIGZpcm13YXJlIGdhdmUgdXMgYSB2aXJ0dWFsLXBoeXNpY2FsIHBvcnQgbWFwcGluZy4KIAkgKi8KIAlhZGFwdGVyLT5waHlzaWNhbF9wb3J0ID0gYWRhcHRlci0+cG9ydG51bTsKLQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KSB7CisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKIAkJaSA9IE5YUkQzMihhZGFwdGVyLCBDUkJfVjJQKGFkYXB0ZXItPnBvcnRudW0pKTsKIAkJaWYgKGkgIT0gMHg1NTU1NTU1NSkKIAkJCWFkYXB0ZXItPnBoeXNpY2FsX3BvcnQgPSBpOwogCX0KIAotCW5ldHhlbl9jaGVja19vcHRpb25zKGFkYXB0ZXIpOworCW5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoYWRhcHRlcik7CiAKIAluZXR4ZW5fc2V0dXBfaW50cihhZGFwdGVyKTsKIAotCW5ldGRldi0+aXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvcjsKLQotCWluaXRfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKLQlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5mdW5jdGlvbiA9ICZuZXR4ZW5fd2F0Y2hkb2c7Ci0JYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXI7Ci0JSU5JVF9XT1JLKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrLCBuZXR4ZW5fd2F0Y2hkb2dfdGFzayk7Ci0JSU5JVF9XT1JLKCZhZGFwdGVyLT50eF90aW1lb3V0X3Rhc2ssIG5ldHhlbl90eF90aW1lb3V0X3Rhc2spOwotCi0JZXJyID0gbmV0eGVuX3JlYWRfbWFjX2FkZHIoYWRhcHRlcik7CisJZXJyID0gbmV0eGVuX3NldHVwX25ldGRldihhZGFwdGVyLCBuZXRkZXYpOwogCWlmIChlcnIpCi0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVhZCBtYWMgYWRkclxuIik7Ci0KLQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLQotCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlZ2lzdGVyX25ldGRldiBmYWlsZWQgcG9ydCAjJWQiCi0JCQkgICAgICAgIiBhYm9ydGluZ1xuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJCSAgICAgICBhZGFwdGVyLT5wb3J0bnVtKTsKLQkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfb3V0X2Rpc2FibGVfbXNpOwotCX0KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhZGFwdGVyKTsKIAorCW5ldHhlbl9zY2hlZHVsZV93b3JrKGFkYXB0ZXIsIG5ldHhlbl9md19wb2xsX3dvcmssIEZXX1BPTExfREVMQVkpOworCiAJc3dpdGNoIChhZGFwdGVyLT5haHcucG9ydF90eXBlKSB7CiAJY2FzZSBORVRYRU5fTklDX0dCRToKIAkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzOiBHYkUgcG9ydCBpbml0aWFsaXplZFxuIiwKQEAgLTExNTksNyArMTMxOSw5IEBACiBlcnJfb3V0X2Rpc2FibGVfbXNpOgogCW5ldHhlbl90ZWFyZG93bl9pbnRyKGFkYXB0ZXIpOwogCi0JbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOworCW5ldHhlbl9mcmVlX2R1bW15X2RtYShhZGFwdGVyKTsKKworCW54X2RlY3JfZGV2X3JlZl9jbnQoYWRhcHRlcik7CiAKIGVycl9vdXRfaW91bm1hcDoKIAluZXR4ZW5fY2xlYW51cF9wY2lfbWFwKGFkYXB0ZXIpOwpAQCAtMTE4NywxNyArMTM0OSwyMCBAQAogCiAJbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCisJbmV0eGVuX2NhbmNlbF9md193b3JrKGFkYXB0ZXIpOworCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnR4X3RpbWVvdXRfdGFzayk7CiAKLQlpZiAoYWRhcHRlci0+aXNfdXAgPT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpIHsKLQkJbmV0eGVuX25pY19kZXRhY2goYWRhcHRlcik7Ci0JfQorCW5ldHhlbl9uaWNfZGV0YWNoKGFkYXB0ZXIpOworCisJbnhfZGVjcl9kZXZfcmVmX2NudChhZGFwdGVyKTsKIAogCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApCi0JCW5ldHhlbl9mcmVlX2FkYXB0ZXJfb2ZmbG9hZChhZGFwdGVyKTsKKwkJbmV0eGVuX2ZyZWVfZHVtbXlfZG1hKGFkYXB0ZXIpOworCisJY2xlYXJfYml0KF9fTlhfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwogCiAJbmV0eGVuX3RlYXJkb3duX2ludHIoYWRhcHRlcik7CiAKQEAgLTEyMTEsMjcgKzEzNzYsMzMgQEAKIAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiB9Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQKLW5ldHhlbl9uaWNfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBfX25ldHhlbl9uaWNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0KIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpbnQgcmV0dmFsOwogCiAJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOwogCisJbmV0eGVuX2NhbmNlbF9md193b3JrKGFkYXB0ZXIpOworCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJbmV0eGVuX25pY19kb3duKGFkYXB0ZXIsIG5ldGRldik7CiAKLQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT50eF90aW1lb3V0X3Rhc2spOwogCi0JaWYgKGFkYXB0ZXItPmlzX3VwID09IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKQotCQluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKKwluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKIAotCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApCisJCW5ldHhlbl9mcmVlX2R1bW15X2RtYShhZGFwdGVyKTsKKworCW54X2RlY3JfZGV2X3JlZl9jbnQoYWRhcHRlcik7CisKKwljbGVhcl9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisKKwlyZXR2YWwgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOwogCiAJaWYgKG5ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChhZGFwdGVyKSkgewogCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CkBAIC0xMjM5LDEwICsxNDEwLDI3IEBACiAJfQogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwogCiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgdm9pZCBuZXR4ZW5fbmljX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWlmIChfX25ldHhlbl9uaWNfc2h1dGRvd24ocGRldikpCisJCXJldHVybjsKK30KKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBfX25ldHhlbl9uaWNfc2h1dGRvd24ocGRldik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50CiBuZXR4ZW5fbmljX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTEyNjAsNyArMTQ0OCw3IEBACiAKIAlhZGFwdGVyLT5jdXJyX3dpbmRvdyA9IDI1NTsKIAotCWVyciA9IG5ldHhlbl9zdGFydF9maXJtd2FyZShhZGFwdGVyLCAwKTsKKwllcnIgPSBuZXR4ZW5fc3RhcnRfZmlybXdhcmUoYWRhcHRlcik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gc3RhcnQgZmlybXdhcmVcbiIpOwogCQlyZXR1cm4gZXJyOwpAQCAtMTI2OSwxNiArMTQ1NywyNCBAQAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJZXJyID0gbmV0eGVuX25pY19hdHRhY2goYWRhcHRlcik7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOworCQkJZ290byBlcnJfb3V0OwogCiAJCWVyciA9IG5ldHhlbl9uaWNfdXAoYWRhcHRlciwgbmV0ZGV2KTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIGVycl9vdXRfZGV0YWNoOwogCiAJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKKworCQluZXR4ZW5fY29uZmlnX2luZGV2X2FkZHIobmV0ZGV2LCBORVRERVZfVVApOwogCX0KIAotCXJldHVybiAwOworCW5ldHhlbl9zY2hlZHVsZV93b3JrKGFkYXB0ZXIsIG5ldHhlbl9md19wb2xsX3dvcmssIEZXX1BPTExfREVMQVkpOworCitlcnJfb3V0X2RldGFjaDoKKwluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKK2Vycl9vdXQ6CisJbnhfZGVjcl9kZXZfcmVmX2NudChhZGFwdGVyKTsKKwlyZXR1cm4gZXJyOwogfQogI2VuZGlmCiAKQEAgLTEyOTAsMTEgKzE0ODYsOSBAQAogCWlmIChhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2gpCiAJCXJldHVybiAtRUlPOwogCi0JaWYgKGFkYXB0ZXItPmlzX3VwICE9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKSB7Ci0JCWVyciA9IG5ldHhlbl9uaWNfYXR0YWNoKGFkYXB0ZXIpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gbmV0eGVuX25pY19hdHRhY2goYWRhcHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IG5ldHhlbl9uaWNfdXAoYWRhcHRlciwgbmV0ZGV2KTsKIAlpZiAoZXJyKQpAQCAtMTMyMCwzMCArMTUxNCw1MiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgYm9vbCBuZXR4ZW5fdHNvX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCSAgICAgIHN0cnVjdCBjbWRfZGVzY190eXBlMCAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkCituZXR4ZW5fdHNvX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCXN0cnVjdCBueF9ob3N0X3R4X3JpbmcgKnR4X3JpbmcsCisJCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqZmlyc3RfZGVzYywKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlib29sIHRzbyA9IGZhbHNlOwogCXU4IG9wY29kZSA9IFRYX0VUSEVSX1BLVDsKIAlfX2JlMTYgcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOwotCXUxNiBmbGFncyA9IDA7CisJdTE2IGZsYWdzID0gMCwgdmlkID0gMDsKKwl1MzIgcHJvZHVjZXI7CisJaW50IGNvcGllZCwgb2Zmc2V0LCBjb3B5X2xlbiwgaGRyX2xlbiA9IDAsIHRzbyA9IDAsIHZsYW5fb29iID0gMDsKKwlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmh3ZGVzYzsKKwlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZoOwogCiAJaWYgKHByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKSkgewotCQlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYi0+ZGF0YTsKKworCQl2aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2ItPmRhdGE7CiAJCXByb3RvY29sID0gdmgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CiAJCWZsYWdzID0gRkxBR1NfVkxBTl9UQUdHRUQ7CisKKwl9IGVsc2UgaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCisJCWZsYWdzID0gRkxBR1NfVkxBTl9PT0I7CisJCXZpZCA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQluZXR4ZW5fc2V0X3R4X3ZsYW5fdGNpKGZpcnN0X2Rlc2MsIHZpZCk7CisJCXZsYW5fb29iID0gMTsKIAl9CiAKIAlpZiAoKG5ldGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpKSAmJgogCQkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA+IDApIHsKIAotCQlkZXNjLT5tc3MgPSBjcHVfdG9fbGUxNihza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKTsKLQkJZGVzYy0+dG90YWxfaGRyX2xlbmd0aCA9Ci0JCQlza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgdGNwX2hkcmxlbihza2IpOworCQloZHJfbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHRjcF9oZHJsZW4oc2tiKTsKKworCQlmaXJzdF9kZXNjLT5tc3MgPSBjcHVfdG9fbGUxNihza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKTsKKwkJZmlyc3RfZGVzYy0+dG90YWxfaGRyX2xlbmd0aCA9IGhkcl9sZW47CisJCWlmICh2bGFuX29vYikgeworCQkJZmlyc3RfZGVzYy0+dG90YWxfaGRyX2xlbmd0aCArPSBWTEFOX0hMRU47CisJCQlmaXJzdF9kZXNjLT50Y3BfaGRyX29mZnNldCA9IFZMQU5fSExFTjsKKwkJCWZpcnN0X2Rlc2MtPmlwX2hkcl9vZmZzZXQgPSBWTEFOX0hMRU47CisJCQkvKiBPbmx5IGluIGNhc2Ugb2YgVFNPIG9uIHZsYW4gZGV2aWNlICovCisJCQlmbGFncyB8PSBGTEFHU19WTEFOX1RBR0dFRDsKKwkJfQogCiAJCW9wY29kZSA9IChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KSkgPwogCQkJCVRYX1RDUF9MU082IDogVFhfVENQX0xTTzsKLQkJdHNvID0gdHJ1ZTsKKwkJdHNvID0gMTsKIAogCX0gZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewogCQl1OCBsNHByb3RvOwpAQCAtMTM2NCw1NSArMTU4MCwxMzMgQEAKIAkJCQlvcGNvZGUgPSBUWF9VRFBWNl9QS1Q7CiAJCX0KIAl9Ci0JZGVzYy0+dGNwX2hkcl9vZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOwotCWRlc2MtPmlwX2hkcl9vZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTsKLQluZXR4ZW5fc2V0X3R4X2ZsYWdzX29wY29kZShkZXNjLCBmbGFncywgb3Bjb2RlKTsKLQlyZXR1cm4gdHNvOworCisJZmlyc3RfZGVzYy0+dGNwX2hkcl9vZmZzZXQgKz0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKKwlmaXJzdF9kZXNjLT5pcF9oZHJfb2Zmc2V0ICs9IHNrYl9uZXR3b3JrX29mZnNldChza2IpOworCW5ldHhlbl9zZXRfdHhfZmxhZ3Nfb3Bjb2RlKGZpcnN0X2Rlc2MsIGZsYWdzLCBvcGNvZGUpOworCisJaWYgKCF0c28pCisJCXJldHVybjsKKworCS8qIEZvciBMU08sIHdlIG5lZWQgdG8gY29weSB0aGUgTUFDL0lQL1RDUCBoZWFkZXJzIGludG8KKwkgKiB0aGUgZGVzY3JpcHRvciByaW5nCisJICovCisJcHJvZHVjZXIgPSB0eF9yaW5nLT5wcm9kdWNlcjsKKwljb3BpZWQgPSAwOworCW9mZnNldCA9IDI7CisKKwlpZiAodmxhbl9vb2IpIHsKKwkJLyogQ3JlYXRlIGEgVFNPIHZsYW4gaGVhZGVyIHRlbXBsYXRlIGZvciBmaXJtd2FyZSAqLworCisJCWh3ZGVzYyA9ICZ0eF9yaW5nLT5kZXNjX2hlYWRbcHJvZHVjZXJdOworCQl0eF9yaW5nLT5jbWRfYnVmX2Fycltwcm9kdWNlcl0uc2tiID0gTlVMTDsKKworCQljb3B5X2xlbiA9IG1pbigoaW50KXNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApIC0gb2Zmc2V0LAorCQkJCWhkcl9sZW4gKyBWTEFOX0hMRU4pOworCisJCXZoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKSgoY2hhciAqKWh3ZGVzYyArIDIpOworCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgdmgsIDEyKTsKKwkJdmgtPmhfdmxhbl9wcm90byA9IGh0b25zKEVUSF9QXzgwMjFRKTsKKwkJdmgtPmhfdmxhbl9UQ0kgPSBodG9ucyh2aWQpOworCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIDEyLAorCQkJCShjaGFyICopdmggKyAxNiwgY29weV9sZW4gLSAxNik7CisKKwkJY29waWVkID0gY29weV9sZW4gLSBWTEFOX0hMRU47CisJCW9mZnNldCA9IDA7CisKKwkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgdHhfcmluZy0+bnVtX2Rlc2MpOworCX0KKworCXdoaWxlIChjb3BpZWQgPCBoZHJfbGVuKSB7CisKKwkJY29weV9sZW4gPSBtaW4oKGludClzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAtIG9mZnNldCwKKwkJCQkoaGRyX2xlbiAtIGNvcGllZCkpOworCisJCWh3ZGVzYyA9ICZ0eF9yaW5nLT5kZXNjX2hlYWRbcHJvZHVjZXJdOworCQl0eF9yaW5nLT5jbWRfYnVmX2Fycltwcm9kdWNlcl0uc2tiID0gTlVMTDsKKworCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIGNvcGllZCwKKwkJCQkgKGNoYXIgKilod2Rlc2MgKyBvZmZzZXQsIGNvcHlfbGVuKTsKKworCQljb3BpZWQgKz0gY29weV9sZW47CisJCW9mZnNldCA9IDA7CisKKwkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgdHhfcmluZy0+bnVtX2Rlc2MpOworCX0KKworCXR4X3JpbmctPnByb2R1Y2VyID0gcHJvZHVjZXI7CisJYmFycmllcigpOwogfQogCi1zdGF0aWMgdm9pZAotbmV0eGVuX2NsZWFuX3R4X2RtYV9tYXBwaW5nKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQlzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKnBidWYsIGludCBsYXN0KQorc3RhdGljIGludAorbmV0eGVuX21hcF90eF9za2Ioc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciAqcGJ1ZikKIHsKLQlpbnQgazsKLQlzdHJ1Y3QgbmV0eGVuX3NrYl9mcmFnICpidWZmcmFnOworCXN0cnVjdCBuZXR4ZW5fc2tiX2ZyYWcgKm5mOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWc7CisJaW50IGksIG5yX2ZyYWdzOworCWRtYV9hZGRyX3QgbWFwOwogCi0JYnVmZnJhZyA9ICZwYnVmLT5mcmFnX2FycmF5WzBdOwotCXBjaV91bm1hcF9zaW5nbGUocGRldiwgYnVmZnJhZy0+ZG1hLAotCQkJYnVmZnJhZy0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJbmYgPSAmcGJ1Zi0+ZnJhZ19hcnJheVswXTsKIAotCWZvciAoayA9IDE7IGsgPCBsYXN0OyBrKyspIHsKLQkJYnVmZnJhZyA9ICZwYnVmLT5mcmFnX2FycmF5W2tdOwotCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBidWZmcmFnLT5kbWEsCi0JCQlidWZmcmFnLT5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCW1hcCA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKKwkJCXNrYl9oZWFkbGVuKHNrYiksIFBDSV9ETUFfVE9ERVZJQ0UpOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgbWFwKSkKKwkJZ290byBvdXRfZXJyOworCisJbmYtPmRtYSA9IG1hcDsKKwluZi0+bGVuZ3RoID0gc2tiX2hlYWRsZW4oc2tiKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9mcmFnczsgaSsrKSB7CisJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKwkJbmYgPSAmcGJ1Zi0+ZnJhZ19hcnJheVtpKzFdOworCisJCW1hcCA9IHBjaV9tYXBfcGFnZShwZGV2LCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCwKKwkJCQlmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCBtYXApKQorCQkJZ290byB1bndpbmQ7CisKKwkJbmYtPmRtYSA9IG1hcDsKKwkJbmYtPmxlbmd0aCA9IGZyYWctPnNpemU7CiAJfQorCisJcmV0dXJuIDA7CisKK3Vud2luZDoKKwl3aGlsZSAoLS1pID49IDApIHsKKwkJbmYgPSAmcGJ1Zi0+ZnJhZ19hcnJheVtpKzFdOworCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBuZi0+ZG1hLCBuZi0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwl9CisKKwluZiA9ICZwYnVmLT5mcmFnX2FycmF5WzBdOworCXBjaV91bm1hcF9zaW5nbGUocGRldiwgbmYtPmRtYSwgc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CisKK291dF9lcnI6CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogbmV0eGVuX2NsZWFyX2NtZGRlc2ModTY0ICpkZXNjKQogewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWRlc2NbaV0gPSAwVUxMOworCWRlc2NbMF0gPSAwVUxMOworCWRlc2NbMl0gPSAwVUxMOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIG5ldHhlbl9uaWNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IG54X2hvc3RfdHhfcmluZyAqdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7Ci0JdW5zaWduZWQgaW50IGZpcnN0X3NlZ19sZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47CiAJc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyICpwYnVmOwogCXN0cnVjdCBuZXR4ZW5fc2tiX2ZyYWcgKmJ1ZmZyYWc7Ci0Jc3RydWN0IGNtZF9kZXNjX3R5cGUwICpod2Rlc2M7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwotCWRtYV9hZGRyX3QgdGVtcF9kbWE7CisJc3RydWN0IGNtZF9kZXNjX3R5cGUwICpod2Rlc2MsICpmaXJzdF9kZXNjOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCWludCBpLCBrOwogCiAJdTMyIHByb2R1Y2VyOwogCWludCBmcmFnX2NvdW50LCBub19vZl9kZXNjOwogCXUzMiBudW1fdHhkID0gdHhfcmluZy0+bnVtX2Rlc2M7Ci0JYm9vbCBpc190c28gPSBmYWxzZTsKIAogCWZyYWdfY291bnQgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMTsKIApAQCAtMTQyNSwxMjEgKzE3MTksNjAgQEAKIAl9CiAKIAlwcm9kdWNlciA9IHR4X3JpbmctPnByb2R1Y2VyOwotCi0JaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07Ci0JbmV0eGVuX2NsZWFyX2NtZGRlc2MoKHU2NCAqKWh3ZGVzYyk7CiAJcGJ1ZiA9ICZ0eF9yaW5nLT5jbWRfYnVmX2Fycltwcm9kdWNlcl07CiAKLQlpc190c28gPSBuZXR4ZW5fdHNvX2NoZWNrKG5ldGRldiwgaHdkZXNjLCBza2IpOworCXBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJaWYgKG5ldHhlbl9tYXBfdHhfc2tiKHBkZXYsIHNrYiwgcGJ1ZikpCisJCWdvdG8gZHJvcF9wYWNrZXQ7CiAKIAlwYnVmLT5za2IgPSBza2I7CiAJcGJ1Zi0+ZnJhZ19jb3VudCA9IGZyYWdfY291bnQ7Ci0JYnVmZnJhZyA9ICZwYnVmLT5mcmFnX2FycmF5WzBdOwotCXRlbXBfZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCBmaXJzdF9zZWdfbGVuLAotCQkJCSAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgdGVtcF9kbWEpKQotCQlnb3RvIGRyb3BfcGFja2V0OwogCi0JYnVmZnJhZy0+ZG1hID0gdGVtcF9kbWE7Ci0JYnVmZnJhZy0+bGVuZ3RoID0gZmlyc3Rfc2VnX2xlbjsKLQluZXR4ZW5fc2V0X3R4X2ZyYWdzX2xlbihod2Rlc2MsIGZyYWdfY291bnQsIHNrYi0+bGVuKTsKLQluZXR4ZW5fc2V0X3R4X3BvcnQoaHdkZXNjLCBhZGFwdGVyLT5wb3J0bnVtKTsKKwlmaXJzdF9kZXNjID0gaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CisJbmV0eGVuX2NsZWFyX2NtZGRlc2MoKHU2NCAqKWh3ZGVzYyk7CiAKLQlod2Rlc2MtPmJ1ZmZlcl9sZW5ndGhbMF0gPSBjcHVfdG9fbGUxNihmaXJzdF9zZWdfbGVuKTsKLQlod2Rlc2MtPmFkZHJfYnVmZmVyMSA9IGNwdV90b19sZTY0KGJ1ZmZyYWctPmRtYSk7CisJbmV0eGVuX3NldF90eF9mcmFnc19sZW4oZmlyc3RfZGVzYywgZnJhZ19jb3VudCwgc2tiLT5sZW4pOworCW5ldHhlbl9zZXRfdHhfcG9ydChmaXJzdF9kZXNjLCBhZGFwdGVyLT5wb3J0bnVtKTsKIAotCWZvciAoaSA9IDEsIGsgPSAxOyBpIDwgZnJhZ19jb3VudDsgaSsrLCBrKyspIHsKLQkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKLQkJaW50IGxlbiwgdGVtcF9sZW47Ci0JCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCWZvciAoaSA9IDA7IGkgPCBmcmFnX2NvdW50OyBpKyspIHsKIAotCQkvKiBtb3ZlIHRvIG5leHQgZGVzYy4gaWYgdGhlcmUgaXMgYSBuZWVkICovCi0JCWlmICgoaSAmIDB4MykgPT0gMCkgewotCQkJayA9IDA7CisJCWsgPSBpICUgNDsKKworCQlpZiAoKGsgPT0gMCkgJiYgKGkgPiAwKSkgeworCQkJLyogbW92ZSB0byBuZXh0IGRlc2MuKi8KIAkJCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIG51bV90eGQpOwogCQkJaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CiAJCQluZXR4ZW5fY2xlYXJfY21kZGVzYygodTY0ICopaHdkZXNjKTsKLQkJCXBidWYgPSAmdHhfcmluZy0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdOwotCQkJcGJ1Zi0+c2tiID0gTlVMTDsKLQkJfQotCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaSAtIDFdOwotCQlsZW4gPSBmcmFnLT5zaXplOwotCQlvZmZzZXQgPSBmcmFnLT5wYWdlX29mZnNldDsKLQotCQl0ZW1wX2xlbiA9IGxlbjsKLQkJdGVtcF9kbWEgPSBwY2lfbWFwX3BhZ2UocGRldiwgZnJhZy0+cGFnZSwgb2Zmc2V0LAotCQkJCQlsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIHRlbXBfZG1hKSkgewotCQkJbmV0eGVuX2NsZWFuX3R4X2RtYV9tYXBwaW5nKHBkZXYsIHBidWYsIGkpOwotCQkJZ290byBkcm9wX3BhY2tldDsKKwkJCXR4X3JpbmctPmNtZF9idWZfYXJyW3Byb2R1Y2VyXS5za2IgPSBOVUxMOwogCQl9CiAKLQkJYnVmZnJhZysrOwotCQlidWZmcmFnLT5kbWEgPSB0ZW1wX2RtYTsKLQkJYnVmZnJhZy0+bGVuZ3RoID0gdGVtcF9sZW47CisJCWJ1ZmZyYWcgPSAmcGJ1Zi0+ZnJhZ19hcnJheVtpXTsKIAotCQlod2Rlc2MtPmJ1ZmZlcl9sZW5ndGhba10gPSBjcHVfdG9fbGUxNih0ZW1wX2xlbik7CisJCWh3ZGVzYy0+YnVmZmVyX2xlbmd0aFtrXSA9IGNwdV90b19sZTE2KGJ1ZmZyYWctPmxlbmd0aCk7CiAJCXN3aXRjaCAoaykgewogCQljYXNlIDA6Ci0JCQlod2Rlc2MtPmFkZHJfYnVmZmVyMSA9IGNwdV90b19sZTY0KHRlbXBfZG1hKTsKKwkJCWh3ZGVzYy0+YWRkcl9idWZmZXIxID0gY3B1X3RvX2xlNjQoYnVmZnJhZy0+ZG1hKTsKIAkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQlod2Rlc2MtPmFkZHJfYnVmZmVyMiA9IGNwdV90b19sZTY0KHRlbXBfZG1hKTsKKwkJCWh3ZGVzYy0+YWRkcl9idWZmZXIyID0gY3B1X3RvX2xlNjQoYnVmZnJhZy0+ZG1hKTsKIAkJCWJyZWFrOwogCQljYXNlIDI6Ci0JCQlod2Rlc2MtPmFkZHJfYnVmZmVyMyA9IGNwdV90b19sZTY0KHRlbXBfZG1hKTsKKwkJCWh3ZGVzYy0+YWRkcl9idWZmZXIzID0gY3B1X3RvX2xlNjQoYnVmZnJhZy0+ZG1hKTsKIAkJCWJyZWFrOwogCQljYXNlIDM6Ci0JCQlod2Rlc2MtPmFkZHJfYnVmZmVyNCA9IGNwdV90b19sZTY0KHRlbXBfZG1hKTsKKwkJCWh3ZGVzYy0+YWRkcl9idWZmZXI0ID0gY3B1X3RvX2xlNjQoYnVmZnJhZy0+ZG1hKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWZyYWcrKzsKLQl9Ci0JcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgbnVtX3R4ZCk7Ci0KLQkvKiBGb3IgTFNPLCB3ZSBuZWVkIHRvIGNvcHkgdGhlIE1BQy9JUC9UQ1AgaGVhZGVycyBpbnRvCi0JICogdGhlIGRlc2NyaXB0b3IgcmluZwotCSAqLwotCWlmIChpc190c28pIHsKLQkJaW50IGhkcl9sZW4sIGZpcnN0X2hkcl9sZW4sIG1vcmVfaGRyOwotCQloZHJfbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHRjcF9oZHJsZW4oc2tiKTsKLQkJaWYgKGhkcl9sZW4gPiAoc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgLSAyKSkgewotCQkJZmlyc3RfaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApIC0gMjsKLQkJCW1vcmVfaGRyID0gMTsKLQkJfSBlbHNlIHsKLQkJCWZpcnN0X2hkcl9sZW4gPSBoZHJfbGVuOwotCQkJbW9yZV9oZHIgPSAwOwotCQl9Ci0JCS8qIGNvcHkgdGhlIE1BQy9JUC9UQ1AgaGVhZGVycyB0byB0aGUgY21kIGRlc2NyaXB0b3IgbGlzdCAqLwotCQlod2Rlc2MgPSAmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKLQkJcGJ1ZiA9ICZ0eF9yaW5nLT5jbWRfYnVmX2Fycltwcm9kdWNlcl07Ci0JCXBidWYtPnNrYiA9IE5VTEw7Ci0KLQkJLyogY29weSB0aGUgZmlyc3QgNjQgYnl0ZXMgKi8KLQkJbWVtY3B5KCgodm9pZCAqKWh3ZGVzYykgKyAyLAotCQkgICAgICAgKHZvaWQgKikoc2tiLT5kYXRhKSwgZmlyc3RfaGRyX2xlbik7Ci0JCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIG51bV90eGQpOwotCi0JCWlmIChtb3JlX2hkcikgewotCQkJaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07Ci0JCQlwYnVmID0gJnR4X3JpbmctPmNtZF9idWZfYXJyW3Byb2R1Y2VyXTsKLQkJCXBidWYtPnNrYiA9IE5VTEw7Ci0JCQkvKiBjb3B5IHRoZSBuZXh0IDY0IGJ5dGVzIC0gc2hvdWxkIGJlIGVub3VnaCBleGNlcHQKLQkJCSAqIGZvciBwYXRob2xvZ2ljYWwgY2FzZQotCQkJICovCi0JCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIGZpcnN0X2hkcl9sZW4sCi0JCQkJCQkJIGh3ZGVzYywKLQkJCQkJCQkgKGhkcl9sZW4gLQotCQkJCQkJCSAgZmlyc3RfaGRyX2xlbikpOwotCQkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgbnVtX3R4ZCk7Ci0JCX0KIAl9CiAKLQl0eF9yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOwotCWFkYXB0ZXItPnN0YXRzLnR4Ynl0ZXMgKz0gc2tiLT5sZW47CisJdHhfcmluZy0+cHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgbnVtX3R4ZCk7CisKKwluZXR4ZW5fdHNvX2NoZWNrKG5ldGRldiwgdHhfcmluZywgZmlyc3RfZGVzYywgc2tiKTsKIAogCW5ldHhlbl9uaWNfdXBkYXRlX2NtZF9wcm9kdWNlcihhZGFwdGVyLCB0eF9yaW5nKTsKIAorCWFkYXB0ZXItPnN0YXRzLnR4Ynl0ZXMgKz0gc2tiLT5sZW47CiAJYWRhcHRlci0+c3RhdHMueG1pdGNhbGxlZCsrOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKQEAgLTE2MzUsNTggKzE4NjgsMTQgQEAKIAluZXR4ZW5fYWR2ZXJ0X2xpbmtfY2hhbmdlKGFkYXB0ZXIsIGxpbmt1cCk7CiB9CiAKLXN0YXRpYyB2b2lkIG5ldHhlbl9uaWNfdGhlcm1hbF9zaHV0ZG93bihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQotCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKLQluZXR4ZW5fbmljX2Rvd24oYWRhcHRlciwgbmV0ZGV2KTsKLQluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKLX0KLQotc3RhdGljIHZvaWQgbmV0eGVuX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgdikKLXsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICopdjsKLQotCWlmIChuZXR4ZW5fbmljX2NoZWNrX3RlbXAoYWRhcHRlcikpCi0JCWdvdG8gZG9fc2NoZWQ7Ci0KLQlpZiAoIWFkYXB0ZXItPmhhc19saW5rX2V2ZW50cykgewotCQluZXR4ZW5fbmljX2hhbmRsZV9waHlfaW50cihhZGFwdGVyKTsKLQotCQlpZiAoYWRhcHRlci0+bGlua19jaGFuZ2VkKQotCQkJZ290byBkb19zY2hlZDsKLQl9Ci0KLQlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKQotCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMiAqIEhaKTsKLQotCXJldHVybjsKLQotZG9fc2NoZWQ6Ci0Jc2NoZWR1bGVfd29yaygmYWRhcHRlci0+d2F0Y2hkb2dfdGFzayk7Ci19Ci0KLXZvaWQgbmV0eGVuX3dhdGNoZG9nX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIsIHdhdGNoZG9nX3Rhc2spOwotCi0JaWYgKGFkYXB0ZXItPnRlbXAgPT0gTlhfVEVNUF9QQU5JQykgewotCQluZXR4ZW5fbmljX3RoZXJtYWxfc2h1dGRvd24oYWRhcHRlcik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoYWRhcHRlci0+bGlua19jaGFuZ2VkKQotCQluZXR4ZW5fbmljX3NldF9saW5rX3BhcmFtZXRlcnMoYWRhcHRlcik7Ci0KLQlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKQotCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMiAqIEhaKTsKLX0KLQogc3RhdGljIHZvaWQgbmV0eGVuX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKHRlc3RfYml0KF9fTlhfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKKwlkZXZfZXJyKCZuZXRkZXYtPmRldiwgInRyYW5zbWl0IHRpbWVvdXQsIHJlc2V0dGluZy5cbiIpOwogCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnR4X3RpbWVvdXRfdGFzayk7CiB9CiAKQEAgLTE2OTgsMTUgKzE4ODcsMzcgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKIAkJcmV0dXJuOwogCi0JcHJpbnRrKEtFUk5fRVJSICIlcyAlczogdHJhbnNtaXQgdGltZW91dCwgcmVzZXR0aW5nLlxuIiwKLQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuOwogCi0JbmV0eGVuX25hcGlfZGlzYWJsZShhZGFwdGVyKTsKKwlpZiAoKythZGFwdGVyLT50eF90aW1lb19jbnQgPj0gTlhfTUFYX1RYX1RJTUVPVVRTKQorCQlnb3RvIHJlcXVlc3RfcmVzZXQ7CiAKLQlhZGFwdGVyLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQkvKiB0cnkgdG8gc2NydWIgaW50ZXJydXB0ICovCisJCW5ldHhlbl9uYXBpX2Rpc2FibGUoYWRhcHRlcik7CiAKLQluZXR4ZW5fbmFwaV9lbmFibGUoYWRhcHRlcik7Ci0JbmV0aWZfd2FrZV9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCQlhZGFwdGVyLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCQluZXR4ZW5fbmFwaV9lbmFibGUoYWRhcHRlcik7CisKKwkJbmV0aWZfd2FrZV9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCisJCWdvdG8gZG9uZTsKKworCX0gZWxzZSB7CisJCWlmICghbmV0eGVuX25pY19yZXNldF9jb250ZXh0KGFkYXB0ZXIpKSB7CisJCQlhZGFwdGVyLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCS8qIGNvbnRleHQgcmVzZXQgZmFpbGVkLCBmYWxsIHRocm91Z2ggZm9yIGZ3IHJlc2V0ICovCisJfQorCityZXF1ZXN0X3Jlc2V0OgorCWFkYXB0ZXItPm5lZWRfZndfcmVzZXQgPSAxOworZG9uZToKKwljbGVhcl9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiB9CiAKIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXR4ZW5fbmljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtMTcxNiw3ICsxOTI3LDcgQEAKIAogCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKCpzdGF0cykpOwogCi0Jc3RhdHMtPnJ4X3BhY2tldHMgPSBhZGFwdGVyLT5zdGF0cy5ub19yY3Y7CisJc3RhdHMtPnJ4X3BhY2tldHMgPSBhZGFwdGVyLT5zdGF0cy5yeF9wa3RzICsgYWRhcHRlci0+c3RhdHMubHJvX3BrdHM7CiAJc3RhdHMtPnR4X3BhY2tldHMgPSBhZGFwdGVyLT5zdGF0cy54bWl0ZmluaXNoZWQ7CiAJc3RhdHMtPnJ4X2J5dGVzID0gYWRhcHRlci0+c3RhdHMucnhieXRlczsKIAlzdGF0cy0+dHhfYnl0ZXMgPSBhZGFwdGVyLT5zdGF0cy50eGJ5dGVzOwpAQCAtMTczMiw0MSArMTk0MywzNyBAQAogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOwogCXUzMiBzdGF0dXMgPSAwOwogCi0Jc3RhdHVzID0gYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlKGFkYXB0ZXIsIElTUl9JTlRfVkVDVE9SKTsKKwlzdGF0dXMgPSByZWFkbChhZGFwdGVyLT5pc3JfaW50X3ZlYyk7CiAKLQlpZiAoIShzdGF0dXMgJiBhZGFwdGVyLT5sZWdhY3lfaW50ci5pbnRfdmVjX2JpdCkpCisJaWYgKCEoc3RhdHVzICYgYWRhcHRlci0+aW50X3ZlY19iaXQpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQlpZiAoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkID49IE5YX1AzX0IxKSB7CisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKIAkJLyogY2hlY2sgaW50ZXJydXB0IHN0YXRlIG1hY2hpbmUsIHRvIGJlIHN1cmUgKi8KLQkJc3RhdHVzID0gYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlKGFkYXB0ZXIsCi0JCQkJSVNSX0lOVF9TVEFURV9SRUcpOworCQlzdGF0dXMgPSByZWFkbChhZGFwdGVyLT5jcmJfaW50X3N0YXRlX3JlZyk7CiAJCWlmICghSVNSX0xFR0FDWV9JTlRfVFJJR0dFUkVEKHN0YXR1cykpCiAJCQlyZXR1cm4gSVJRX05PTkU7CiAKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBsb25nIG91cl9pbnQgPSAwOwogCi0JCW91cl9pbnQgPSBOWFJEMzIoYWRhcHRlciwgQ1JCX0lOVF9WRUNUT1IpOworCQlvdXJfaW50ID0gcmVhZGwoYWRhcHRlci0+Y3JiX2ludF9zdGF0ZV9yZWcpOwogCiAJCS8qIG5vdCBvdXIgaW50ZXJydXB0ICovCiAJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KCg3ICsgYWRhcHRlci0+cG9ydG51bSksICZvdXJfaW50KSkKIAkJCXJldHVybiBJUlFfTk9ORTsKIAogCQkvKiBjbGFpbSBpbnRlcnJ1cHQgKi8KLQkJTlhXUjMyKGFkYXB0ZXIsIENSQl9JTlRfVkVDVE9SLCAob3VyX2ludCAmIDB4ZmZmZmZmZmYpKTsKKwkJd3JpdGVsKChvdXJfaW50ICYgMHhmZmZmZmZmZiksIGFkYXB0ZXItPmNyYl9pbnRfc3RhdGVfcmVnKTsKKworCQkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KKwkJbmV0eGVuX25pY19kaXNhYmxlX2ludChzZHNfcmluZyk7CiAJfQogCi0JLyogY2xlYXIgaW50ZXJydXB0ICovCi0JaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKLQkJbmV0eGVuX25pY19kaXNhYmxlX2ludChzZHNfcmluZyk7Ci0KLQlhZGFwdGVyLT5wY2lfd3JpdGVfaW1tZWRpYXRlKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5sZWdhY3lfaW50ci50Z3Rfc3RhdHVzX3JlZywKLQkJCTB4ZmZmZmZmZmYpOworCXdyaXRlbCgweGZmZmZmZmZmLCBhZGFwdGVyLT50Z3Rfc3RhdHVzX3JlZyk7CiAJLyogcmVhZCB0d2ljZSB0byBlbnN1cmUgd3JpdGUgaXMgZmx1c2hlZCAqLwotCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZShhZGFwdGVyLCBJU1JfSU5UX1ZFQ1RPUik7Ci0JYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlKGFkYXB0ZXIsIElTUl9JTlRfVkVDVE9SKTsKKwlyZWFkbChhZGFwdGVyLT5pc3JfaW50X3ZlYyk7CisJcmVhZGwoYWRhcHRlci0+aXNyX2ludF92ZWMpOwogCiAJbmFwaV9zY2hlZHVsZSgmc2RzX3JpbmctPm5hcGkpOwogCkBAIC0xNzc5LDggKzE5ODYsNyBAQAogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOwogCiAJLyogY2xlYXIgaW50ZXJydXB0ICovCi0JYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZShhZGFwdGVyLAotCQkJYWRhcHRlci0+bXNpX3RndF9zdGF0dXMsIDB4ZmZmZmZmZmYpOworCXdyaXRlbCgweGZmZmZmZmZmLCBhZGFwdGVyLT50Z3Rfc3RhdHVzX3JlZyk7CiAKIAluYXBpX3NjaGVkdWxlKCZzZHNfcmluZy0+bmFwaSk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTgyNyw2ICsyMDMzLDQ3MyBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQKK254X2luY3JfZGV2X3JlZl9jbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBjb3VudDsKKwlpZiAobmV0eGVuX2FwaV9sb2NrKGFkYXB0ZXIpKQorCQlyZXR1cm4gLUVJTzsKKworCWNvdW50ID0gTlhSRDMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfUkVGX0NPVU5UKTsKKworCU5YV1IzMihhZGFwdGVyLCBOWF9DUkJfREVWX1JFRl9DT1VOVCwgKytjb3VudCk7CisKKwluZXR4ZW5fYXBpX3VubG9jayhhZGFwdGVyKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQKK254X2RlY3JfZGV2X3JlZl9jbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBjb3VudDsKKwlpZiAobmV0eGVuX2FwaV9sb2NrKGFkYXB0ZXIpKQorCQlyZXR1cm4gLUVJTzsKKworCWNvdW50ID0gTlhSRDMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfUkVGX0NPVU5UKTsKKwlXQVJOX09OKGNvdW50ID09IDApOworCisJTlhXUjMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfUkVGX0NPVU5ULCAtLWNvdW50KTsKKworCWlmIChjb3VudCA9PSAwKQorCQlOWFdSMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSwgTlhfREVWX0NPTEQpOworCisJbmV0eGVuX2FwaV91bmxvY2soYWRhcHRlcik7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZAorbnhfZGV2X3JlcXVlc3RfcmVzZXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBzdGF0ZTsKKworCWlmIChuZXR4ZW5fYXBpX2xvY2soYWRhcHRlcikpCisJCXJldHVybjsKKworCXN0YXRlID0gTlhSRDMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfU1RBVEUpOworCisJaWYgKHN0YXRlICE9IE5YX0RFVl9JTklUQUxJWklORykKKwkJTlhXUjMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfU1RBVEUsIE5YX0RFVl9ORUVEX1JFU0VUKTsKKworCW5ldHhlbl9hcGlfdW5sb2NrKGFkYXB0ZXIpOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fY2FuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgY291bnQ7CisJaW50IGNhbl9zdGFydCA9IDA7CisKKwlpZiAobmV0eGVuX2FwaV9sb2NrKGFkYXB0ZXIpKQorCQlyZXR1cm4gMDsKKworCWNvdW50ID0gTlhSRDMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfUkVGX0NPVU5UKTsKKworCWlmICgoY291bnQgPCAwKSB8fCAoY291bnQgPj0gTlhfTUFYX1BDSV9GVU5DKSkKKwkJY291bnQgPSAwOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJY2FuX3N0YXJ0ID0gMTsKKwkJTlhXUjMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfU1RBVEUsIE5YX0RFVl9JTklUQUxJWklORyk7CisJfQorCisJTlhXUjMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfUkVGX0NPVU5ULCArK2NvdW50KTsKKworCW5ldHhlbl9hcGlfdW5sb2NrKGFkYXB0ZXIpOworCisJcmV0dXJuIGNhbl9zdGFydDsKK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9zY2hlZHVsZV93b3JrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJd29ya19mdW5jX3QgZnVuYywgaW50IGRlbGF5KQoreworCUlOSVRfREVMQVlFRF9XT1JLKCZhZGFwdGVyLT5md193b3JrLCBmdW5jKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFkYXB0ZXItPmZ3X3dvcmssIGRlbGF5KTsKK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9jYW5jZWxfZndfd29yayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCW1zbGVlcCgxMCk7CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFkYXB0ZXItPmZ3X3dvcmspOworfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX2F0dGFjaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIsIGZ3X3dvcmsud29yayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpbnQgZXJyID0gMDsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJZXJyID0gbmV0eGVuX25pY19hdHRhY2goYWRhcHRlcik7CisJCWlmIChlcnIpCisJCQlnb3RvIGRvbmU7CisKKwkJZXJyID0gbmV0eGVuX25pY191cChhZGFwdGVyLCBuZXRkZXYpOworCQlpZiAoZXJyKSB7CisJCQluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCW5ldHhlbl9jb25maWdfaW5kZXZfYWRkcihuZXRkZXYsIE5FVERFVl9VUCk7CisJfQorCisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCitkb25lOgorCWFkYXB0ZXItPmZ3X2ZhaWxfY250ID0gMDsKKwljbGVhcl9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJbmV0eGVuX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgbmV0eGVuX2Z3X3BvbGxfd29yaywgRldfUE9MTF9ERUxBWSk7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fZndpbml0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciwgZndfd29yay53b3JrKTsKKwlpbnQgZGV2X3N0YXRlOworCisJZGV2X3N0YXRlID0gTlhSRDMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfU1RBVEUpOworCisJc3dpdGNoIChkZXZfc3RhdGUpIHsKKwljYXNlIE5YX0RFVl9DT0xEOgorCWNhc2UgTlhfREVWX1JFQURZOgorCQlpZiAoIW5ldHhlbl9zdGFydF9maXJtd2FyZShhZGFwdGVyKSkgeworCQkJbmV0eGVuX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgbmV0eGVuX2F0dGFjaF93b3JrLCAwKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTlhfREVWX0lOSVRBTElaSU5HOgorCQlpZiAoKythZGFwdGVyLT5md193YWl0X2NudCA8IEZXX1BPTExfVEhSRVNIKSB7CisJCQluZXR4ZW5fc2NoZWR1bGVfd29yayhhZGFwdGVyLAorCQkJCQluZXR4ZW5fZndpbml0X3dvcmssIDIgKiBGV19QT0xMX0RFTEFZKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTlhfREVWX0ZBSUxFRDoKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlueF9pbmNyX2Rldl9yZWZfY250KGFkYXB0ZXIpOworCWNsZWFyX2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9kZXRhY2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJc3RydWN0IG5ldHhlbl9hZGFwdGVyLCBmd193b3JrLndvcmspOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaW50IHJlZl9jbnQsIGRlbGF5OworCXUzMiBzdGF0dXM7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQluZXR4ZW5fbmljX2Rvd24oYWRhcHRlciwgbmV0ZGV2KTsKKworCW5ldHhlbl9uaWNfZGV0YWNoKGFkYXB0ZXIpOworCisJc3RhdHVzID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9QRUdfSEFMVF9TVEFUVVMxKTsKKworCXJlZl9jbnQgPSBueF9kZWNyX2Rldl9yZWZfY250KGFkYXB0ZXIpOworCisJaWYgKHN0YXR1cyAmIE5YX1JDT0RFX0ZBVEFMX0VSUk9SKQorCQlyZXR1cm47CisKKwlpZiAoYWRhcHRlci0+dGVtcCA9PSBOWF9URU1QX1BBTklDKQorCQlyZXR1cm47CisKKwlkZWxheSA9IChyZWZfY250ID09IDApID8gMCA6ICgyICogRldfUE9MTF9ERUxBWSk7CisKKwlhZGFwdGVyLT5md193YWl0X2NudCA9IDA7CisJbmV0eGVuX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgbmV0eGVuX2Z3aW5pdF93b3JrLCBkZWxheSk7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9jaGVja19oZWFsdGgoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBzdGF0ZSwgaGVhcnRiaXQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCWlmIChuZXR4ZW5fbmljX2NoZWNrX3RlbXAoYWRhcHRlcikpCisJCWdvdG8gZGV0YWNoOworCisJaWYgKGFkYXB0ZXItPm5lZWRfZndfcmVzZXQpIHsKKwkJbnhfZGV2X3JlcXVlc3RfcmVzZXQoYWRhcHRlcik7CisJCWdvdG8gZGV0YWNoOworCX0KKworCXN0YXRlID0gTlhSRDMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfU1RBVEUpOworCWlmIChzdGF0ZSA9PSBOWF9ERVZfTkVFRF9SRVNFVCkKKwkJZ290byBkZXRhY2g7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJcmV0dXJuIDA7CisKKwloZWFydGJpdCA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fUEVHX0FMSVZFX0NPVU5URVIpOworCWlmIChoZWFydGJpdCAhPSBhZGFwdGVyLT5oZWFydGJpdCkgeworCQlhZGFwdGVyLT5oZWFydGJpdCA9IGhlYXJ0Yml0OworCQlhZGFwdGVyLT5md19mYWlsX2NudCA9IDA7CisJCXJldHVybiAwOworCX0KKworCWlmICgrK2FkYXB0ZXItPmZ3X2ZhaWxfY250IDwgRldfRkFJTF9USFJFU0gpCisJCXJldHVybiAwOworCisJY2xlYXJfYml0KF9fTlhfRldfQVRUQUNIRUQsICZhZGFwdGVyLT5zdGF0ZSk7CisKKwlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICJmaXJtd2FyZSBoYW5nIGRldGVjdGVkXG4iKTsKKworZGV0YWNoOgorCWlmICghdGVzdF9hbmRfc2V0X2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbmV0eGVuX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgbmV0eGVuX2RldGFjaF93b3JrLCAwKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9md19wb2xsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciwgZndfd29yay53b3JrKTsKKworCWlmICh0ZXN0X2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJZ290byByZXNjaGVkdWxlOworCisJaWYgKHRlc3RfYml0KF9fTlhfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCWlmICghYWRhcHRlci0+aGFzX2xpbmtfZXZlbnRzKSB7CisKKwkJCW5ldHhlbl9uaWNfaGFuZGxlX3BoeV9pbnRyKGFkYXB0ZXIpOworCisJCQlpZiAoYWRhcHRlci0+bGlua19jaGFuZ2VkKQorCQkJCW5ldHhlbl9uaWNfc2V0X2xpbmtfcGFyYW1ldGVycyhhZGFwdGVyKTsKKwkJfQorCX0KKworCWlmIChuZXR4ZW5fY2hlY2tfaGVhbHRoKGFkYXB0ZXIpKQorCQlyZXR1cm47CisKK3Jlc2NoZWR1bGU6CisJbmV0eGVuX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgbmV0eGVuX2Z3X3BvbGxfd29yaywgRldfUE9MTF9ERUxBWSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CituZXR4ZW5fc3RvcmVfYnJpZGdlZF9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldCk7CisJdW5zaWduZWQgbG9uZyBuZXc7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoIShhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBOWF9GV19DQVBBQklMSVRZX0JERykpCisJCWdvdG8gZXJyX291dDsKKworCWlmIChhZGFwdGVyLT5pc191cCAhPSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykKKwkJZ290byBlcnJfb3V0OworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMiwgJm5ldykpCisJCWdvdG8gZXJyX291dDsKKworCWlmICghbmV0eGVuX2NvbmZpZ19icmlkZ2VkX21vZGUoYWRhcHRlciwgISFuZXcpKQorCQlyZXQgPSBsZW47CisKK2Vycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QKK25ldHhlbl9zaG93X2JyaWRnZWRfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXI7CisJaW50IGJyaWRnZWRfbW9kZSA9IDA7CisKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBOWF9GV19DQVBBQklMSVRZX0JERykKKwkJYnJpZGdlZF9tb2RlID0gISEoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX0JSSURHRV9FTkFCTEVEKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBicmlkZ2VkX21vZGUpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfYnJpZGdlZF9tb2RlID0geworICAgICAgIC5hdHRyID0gey5uYW1lID0gImJyaWRnZWRfbW9kZSIsIC5tb2RlID0gKFNfSVJVR08gfCBTX0lXVVNSKX0sCisgICAgICAgLnNob3cgPSBuZXR4ZW5fc2hvd19icmlkZ2VkX21vZGUsCisgICAgICAgLnN0b3JlID0gbmV0eGVuX3N0b3JlX2JyaWRnZWRfbW9kZSwKK307CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fY3JlYXRlX3N5c2ZzX2VudHJpZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm5ldGRldi0+ZGV2OworCisJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIE5YX0ZXX0NBUEFCSUxJVFlfQkRHKSB7CisJCS8qIGJyaWRnZWRfbW9kZSBjb250cm9sICovCisJCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYnJpZGdlZF9tb2RlKSkgeworCQkJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gY3JlYXRlIGJyaWRnZWRfbW9kZSBzeXNmcyBlbnRyeVxuIik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fcmVtb3ZlX3N5c2ZzX2VudHJpZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm5ldGRldi0+ZGV2OworCisJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIE5YX0ZXX0NBUEFCSUxJVFlfQkRHKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYnJpZGdlZF9tb2RlKTsKK30KKworI2lmZGVmIENPTkZJR19JTkVUCisKKyNkZWZpbmUgaXNfbmV0eGVuX25ldGRldihkZXYpIChkZXYtPm5ldGRldl9vcHMgPT0gJm5ldHhlbl9uZXRkZXZfb3BzKQorCitzdGF0aWMgaW50CituZXR4ZW5fZGVzdGlwX3N1cHBvcnRlZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCXJldHVybiAwOworCisJaWYgKGFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9jb25maWdfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KQoreworCXN0cnVjdCBpbl9kZXZpY2UgKmluZGV2OworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoIW5ldHhlbl9kZXN0aXBfc3VwcG9ydGVkKGFkYXB0ZXIpKQorCQlyZXR1cm47CisKKwlpbmRldiA9IGluX2Rldl9nZXQoZGV2KTsKKwlpZiAoIWluZGV2KQorCQlyZXR1cm47CisKKwlmb3JfaWZhKGluZGV2KSB7CisJCXN3aXRjaCAoZXZlbnQpIHsKKwkJY2FzZSBORVRERVZfVVA6CisJCQluZXR4ZW5fY29uZmlnX2lwYWRkcihhZGFwdGVyLAorCQkJCQlpZmEtPmlmYV9hZGRyZXNzLCBOWF9JUF9VUCk7CisJCQlicmVhazsKKwkJY2FzZSBORVRERVZfRE9XTjoKKwkJCW5ldHhlbl9jb25maWdfaXBhZGRyKGFkYXB0ZXIsCisJCQkJCWlmYS0+aWZhX2FkZHJlc3MsIE5YX0lQX0RPV04pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0gZW5kZm9yX2lmYShpbmRldik7CisKKwlpbl9kZXZfcHV0KGluZGV2KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgbmV0eGVuX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkJIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXB0cjsKKworcmVjaGVjazoKKwlpZiAoZGV2ID09IE5VTEwpCisJCWdvdG8gZG9uZTsKKworCWlmIChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pIHsKKwkJZGV2ID0gdmxhbl9kZXZfcmVhbF9kZXYoZGV2KTsKKwkJZ290byByZWNoZWNrOworCX0KKworCWlmICghaXNfbmV0eGVuX25ldGRldihkZXYpKQorCQlnb3RvIGRvbmU7CisKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghYWRhcHRlcikKKwkJZ290byBkb25lOworCisJaWYgKGFkYXB0ZXItPmlzX3VwICE9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKQorCQlnb3RvIGRvbmU7CisKKwluZXR4ZW5fY29uZmlnX2luZGV2X2FkZHIoZGV2LCBldmVudCk7Citkb25lOgorCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIGludAorbmV0eGVuX2luZXRhZGRyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKKwkJdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCisJc3RydWN0IGluX2lmYWRkciAqaWZhID0gKHN0cnVjdCBpbl9pZmFkZHIgKilwdHI7CisKKwlkZXYgPSBpZmEtPmlmYV9kZXYgPyBpZmEtPmlmYV9kZXYtPmRldiA6IE5VTEw7CisKK3JlY2hlY2s6CisJaWYgKGRldiA9PSBOVUxMIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpCisJCWdvdG8gZG9uZTsKKworCWlmIChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pIHsKKwkJZGV2ID0gdmxhbl9kZXZfcmVhbF9kZXYoZGV2KTsKKwkJZ290byByZWNoZWNrOworCX0KKworCWlmICghaXNfbmV0eGVuX25ldGRldihkZXYpKQorCQlnb3RvIGRvbmU7CisKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghYWRhcHRlciB8fCAhbmV0eGVuX2Rlc3RpcF9zdXBwb3J0ZWQoYWRhcHRlcikpCisJCWdvdG8gZG9uZTsKKworCWlmIChhZGFwdGVyLT5pc191cCAhPSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykKKwkJZ290byBkb25lOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTkVUREVWX1VQOgorCQluZXR4ZW5fY29uZmlnX2lwYWRkcihhZGFwdGVyLCBpZmEtPmlmYV9hZGRyZXNzLCBOWF9JUF9VUCk7CisJCWJyZWFrOworCWNhc2UgTkVUREVWX0RPV046CisJCW5ldHhlbl9jb25maWdfaXBhZGRyKGFkYXB0ZXIsIGlmYS0+aWZhX2FkZHJlc3MsIE5YX0lQX0RPV04pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKK2RvbmU6CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrCW5ldHhlbl9uZXRkZXZfY2IgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBuZXR4ZW5fbmV0ZGV2X2V2ZW50LAorfTsKKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBuZXR4ZW5faW5ldGFkZHJfY2IgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBuZXR4ZW5faW5ldGFkZHJfZXZlbnQsCit9OworI2Vsc2UKK3N0YXRpYyB2b2lkCituZXR4ZW5fY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCkKK3sgfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZXR4ZW5fZHJpdmVyID0gewogCS5uYW1lID0gbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUgPSBuZXR4ZW5fcGNpX3RibCwKQEAgLTE4MzQsMTYgKzI1MDcsMjAgQEAKIAkucmVtb3ZlID0gX19kZXZleGl0X3AobmV0eGVuX25pY19yZW1vdmUpLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kID0gbmV0eGVuX25pY19zdXNwZW5kLAotCS5yZXN1bWUgPSBuZXR4ZW5fbmljX3Jlc3VtZQorCS5yZXN1bWUgPSBuZXR4ZW5fbmljX3Jlc3VtZSwKICNlbmRpZgorCS5zaHV0ZG93biA9IG5ldHhlbl9uaWNfc2h1dGRvd24KIH07CiAKLS8qIERyaXZlciBSZWdpc3RyYXRpb24gb24gTmV0WGVuIGNhcmQgICAgKi8KLQogc3RhdGljIGludCBfX2luaXQgbmV0eGVuX2luaXRfbW9kdWxlKHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX3N0cmluZyk7CiAKKyNpZmRlZiBDT05GSUdfSU5FVAorCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmV0eGVuX25ldGRldl9jYik7CisJcmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJm5ldHhlbl9pbmV0YWRkcl9jYik7CisjZW5kaWYKKwogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZuZXR4ZW5fZHJpdmVyKTsKIH0KIApAQCAtMTg1Miw2ICsyNTI5LDExIEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgbmV0eGVuX2V4aXRfbW9kdWxlKHZvaWQpCiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZuZXR4ZW5fZHJpdmVyKTsKKworI2lmZGVmIENPTkZJR19JTkVUCisJdW5yZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmbmV0eGVuX2luZXRhZGRyX2NiKTsKKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmV0eGVuX25ldGRldl9jYik7CisjZW5kaWYKIH0KIAogbW9kdWxlX2V4aXQobmV0eGVuX2V4aXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbml1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NDFjNzkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbml1LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuIEluYywKLSAqIDE4OTIyIEZvcmdlIERyaXZlCi0gKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKLSAqCi0gKi8KLQotI2luY2x1ZGUgIm5ldHhlbl9uaWMuaCIKLQotI2RlZmluZSBORVRYRU5fR0JfTUFDX1NPRlRfUkVTRVQJMHg4MDAwMDAwMAotI2RlZmluZSBORVRYRU5fR0JfTUFDX1JFU0VUX1BST1RfQkxLICAgMHgwMDBGMDAwMAotI2RlZmluZSBORVRYRU5fR0JfTUFDX0VOQUJMRV9UWF9SWCAgICAgMHgwMDAwMDAwNQotI2RlZmluZSBORVRYRU5fR0JfTUFDX1BBVVNFRF9GUk1TICAgICAgMHgwMDAwMDAyMAotCi1zdGF0aWMgbG9uZyBwaHlfbG9ja190aW1lb3V0ID0gMTAwMDAwMDAwOwotCi1zdGF0aWMgaW50IHBoeV9sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgaTsKLQlpbnQgZG9uZSA9IDAsIHRpbWVvdXQgPSAwOwotCi0Jd2hpbGUgKCFkb25lKSB7Ci0JCWRvbmUgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX1BDSUVfUkVHKFBDSUVfU0VNM19MT0NLKSk7Ci0JCWlmIChkb25lID09IDEpCi0JCQlicmVhazsKLQkJaWYgKHRpbWVvdXQgPj0gcGh5X2xvY2tfdGltZW91dCkgewotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCXRpbWVvdXQrKzsKLQkJaWYgKCFpbl9hdG9taWMoKSkKLQkJCXNjaGVkdWxlKCk7Ci0JCWVsc2UgewotCQkJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspCi0JCQkJY3B1X3JlbGF4KCk7Ci0JCX0KLQl9Ci0KLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX1BIWV9MT0NLX0lELCBQSFlfTE9DS19EUklWRVIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBoeV91bmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZShhZGFwdGVyLCBORVRYRU5fUENJRV9SRUcoUENJRV9TRU0zX1VOTE9DSykpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBuZXR4ZW5fbml1X2diZV9waHlfcmVhZCAtIHJlYWQgYSByZWdpc3RlciBmcm9tIHRoZSBHYkUgUEhZIHZpYQotICogbWlpIG1hbmFnZW1lbnQgaW50ZXJmYWNlLgotICoKLSAqIE5vdGU6IFRoZSBNSUkgbWFuYWdlbWVudCBpbnRlcmZhY2UgZ29lcyB0aHJvdWdoIHBvcnQgMC4KLSAqCUluZGl2aWR1YWwgcGh5cyBhcmUgYWRkcmVzc2VkIGFzIGZvbGxvd3M6Ci0gKiBAcGFyYW0gcGh5ICBbMTU6OF0gIHBoeSBpZAotICogQHBhcmFtIHJlZyAgWzc6MF0gICByZWdpc3RlciBudW1iZXIKLSAqCi0gKiBAcmV0dXJucyAgMCBvbiBzdWNjZXNzCi0gKgkgIC0xIG9uIGVycm9yCi0gKgotICovCi1pbnQgbmV0eGVuX25pdV9nYmVfcGh5X3JlYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBsb25nIHJlZywKLQkJCQlfX3UzMiAqIHJlYWR2YWwpCi17Ci0JbG9uZyB0aW1lb3V0ID0gMDsKLQlsb25nIHJlc3VsdCA9IDA7Ci0JbG9uZyByZXN0b3JlID0gMDsKLQlsb25nIHBoeSA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7Ci0JX191MzIgYWRkcmVzczsKLQlfX3UzMiBjb21tYW5kOwotCV9fdTMyIHN0YXR1czsKLQlfX3UzMiBtYWNfY2ZnMDsKLQotCWlmIChwaHlfbG9jayhhZGFwdGVyKSAhPSAwKSB7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKgotCSAqIE1JSSBtZ210IGFsbCBnb2VzIHRocm91Z2ggcG9ydCAwIE1BQyBpbnRlcmZhY2UsCi0JICogc28gaXQgY2Fubm90IGJlIGluIHJlc2V0Ci0JICovCi0KLQltYWNfY2ZnMCA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMCgwKSk7Ci0JaWYgKG5ldHhlbl9nYl9nZXRfc29mdF9yZXNldChtYWNfY2ZnMCkpIHsKLQkJX191MzIgdGVtcDsKLQkJdGVtcCA9IDA7Ci0JCW5ldHhlbl9nYl90eF9yZXNldF9wYih0ZW1wKTsKLQkJbmV0eGVuX2diX3J4X3Jlc2V0X3BiKHRlbXApOwotCQluZXR4ZW5fZ2JfdHhfcmVzZXRfbWFjKHRlbXApOwotCQluZXR4ZW5fZ2JfcnhfcmVzZXRfbWFjKHRlbXApOwotCQlpZiAoTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKDApLCB0ZW1wKSkKLQkJCXJldHVybiAtRUlPOwotCQlyZXN0b3JlID0gMTsKLQl9Ci0KLQlhZGRyZXNzID0gMDsKLQluZXR4ZW5fZ2JfbWlpX21nbXRfcmVnX2FkZHIoYWRkcmVzcywgcmVnKTsKLQluZXR4ZW5fZ2JfbWlpX21nbXRfcGh5X2FkZHIoYWRkcmVzcywgcGh5KTsKLQlpZiAoTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUigwKSwgYWRkcmVzcykpCi0JCXJldHVybiAtRUlPOwotCWNvbW1hbmQgPSAwOwkJLyogdHVybiBvZmYgYW55IHByaW9yIGFjdGl2aXR5ICovCi0JaWYgKE5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX0NPTU1BTkQoMCksIGNvbW1hbmQpKQotCQlyZXR1cm4gLUVJTzsKLQkvKiBzZW5kIHJlYWQgY29tbWFuZCAqLwotCW5ldHhlbl9nYl9taWlfbWdtdF9zZXRfcmVhZF9jeWNsZShjb21tYW5kKTsKLQlpZiAoTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09NTUFORCgwKSwgY29tbWFuZCkpCi0JCXJldHVybiAtRUlPOwotCi0Jc3RhdHVzID0gMDsKLQlkbyB7Ci0JCXN0YXR1cyA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX0lORElDQVRFKDApKTsKLQkJdGltZW91dCsrOwotCX0gd2hpbGUgKChuZXR4ZW5fZ2V0X2diX21paV9tZ210X2J1c3koc3RhdHVzKQotCQkgIHx8IG5ldHhlbl9nZXRfZ2JfbWlpX21nbXRfbm90dmFsaWQoc3RhdHVzKSkKLQkJICYmICh0aW1lb3V0KysgPCBORVRYRU5fTklVX1BIWV9XQUlUTUFYKSk7Ci0KLQlpZiAodGltZW91dCA8IE5FVFhFTl9OSVVfUEhZX1dBSVRNQVgpIHsKLQkJKnJlYWR2YWwgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9TVEFUVVMoMCkpOwotCQlyZXN1bHQgPSAwOwotCX0gZWxzZQotCQlyZXN1bHQgPSAtMTsKLQotCWlmIChyZXN0b3JlKQotCQlpZiAoTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKDApLCBtYWNfY2ZnMCkpCi0JCQlyZXR1cm4gLUVJTzsKLQlwaHlfdW5sb2NrKGFkYXB0ZXIpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBuZXR4ZW5fbml1X2diZV9waHlfd3JpdGUgLSB3cml0ZSBhIHJlZ2lzdGVyIHRvIHRoZSBHYkUgUEhZIHZpYQotICogbWlpIG1hbmFnZW1lbnQgaW50ZXJmYWNlLgotICoKLSAqIE5vdGU6IFRoZSBNSUkgbWFuYWdlbWVudCBpbnRlcmZhY2UgZ29lcyB0aHJvdWdoIHBvcnQgMC4KLSAqCUluZGl2aWR1YWwgcGh5cyBhcmUgYWRkcmVzc2VkIGFzIGZvbGxvd3M6Ci0gKiBAcGFyYW0gcGh5ICAgICAgWzE1OjhdICBwaHkgaWQKLSAqIEBwYXJhbSByZWcgICAgICBbNzowXSAgIHJlZ2lzdGVyIG51bWJlcgotICoKLSAqIEByZXR1cm5zICAwIG9uIHN1Y2Nlc3MKLSAqCSAgLTEgb24gZXJyb3IKLSAqCi0gKi8KLWludCBuZXR4ZW5fbml1X2diZV9waHlfd3JpdGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBsb25nIHJlZywKLQkJCQlfX3UzMiB2YWwpCi17Ci0JbG9uZyB0aW1lb3V0ID0gMDsKLQlsb25nIHJlc3VsdCA9IDA7Ci0JbG9uZyByZXN0b3JlID0gMDsKLQlsb25nIHBoeSA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7Ci0JX191MzIgYWRkcmVzczsKLQlfX3UzMiBjb21tYW5kOwotCV9fdTMyIHN0YXR1czsKLQlfX3UzMiBtYWNfY2ZnMDsKLQotCS8qCi0JICogTUlJIG1nbXQgYWxsIGdvZXMgdGhyb3VnaCBwb3J0IDAgTUFDIGludGVyZmFjZSwgc28gaXQKLQkgKiBjYW5ub3QgYmUgaW4gcmVzZXQKLQkgKi8KLQotCW1hY19jZmcwID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKDApKTsKLQlpZiAobmV0eGVuX2diX2dldF9zb2Z0X3Jlc2V0KG1hY19jZmcwKSkgewotCQlfX3UzMiB0ZW1wOwotCQl0ZW1wID0gMDsKLQkJbmV0eGVuX2diX3R4X3Jlc2V0X3BiKHRlbXApOwotCQluZXR4ZW5fZ2JfcnhfcmVzZXRfcGIodGVtcCk7Ci0JCW5ldHhlbl9nYl90eF9yZXNldF9tYWModGVtcCk7Ci0JCW5ldHhlbl9nYl9yeF9yZXNldF9tYWModGVtcCk7Ci0KLQkJaWYgKE5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMCgwKSwgdGVtcCkpCi0JCQlyZXR1cm4gLUVJTzsKLQkJcmVzdG9yZSA9IDE7Ci0JfQotCi0JY29tbWFuZCA9IDA7CQkvKiB0dXJuIG9mZiBhbnkgcHJpb3IgYWN0aXZpdHkgKi8KLQlpZiAoTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09NTUFORCgwKSwgY29tbWFuZCkpCi0JCXJldHVybiAtRUlPOwotCi0JYWRkcmVzcyA9IDA7Ci0JbmV0eGVuX2diX21paV9tZ210X3JlZ19hZGRyKGFkZHJlc3MsIHJlZyk7Ci0JbmV0eGVuX2diX21paV9tZ210X3BoeV9hZGRyKGFkZHJlc3MsIHBoeSk7Ci0JaWYgKE5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFIoMCksIGFkZHJlc3MpKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmIChOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9DVFJMKDApLCB2YWwpKQotCQlyZXR1cm4gLUVJTzsKLQotCXN0YXR1cyA9IDA7Ci0JZG8gewotCQlzdGF0dXMgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9JTkRJQ0FURSgwKSk7Ci0JCXRpbWVvdXQrKzsKLQl9IHdoaWxlICgobmV0eGVuX2dldF9nYl9taWlfbWdtdF9idXN5KHN0YXR1cykpCi0JCSAmJiAodGltZW91dCsrIDwgTkVUWEVOX05JVV9QSFlfV0FJVE1BWCkpOwotCi0JaWYgKHRpbWVvdXQgPCBORVRYRU5fTklVX1BIWV9XQUlUTUFYKQotCQlyZXN1bHQgPSAwOwotCWVsc2UKLQkJcmVzdWx0ID0gLUVJTzsKLQotCS8qIHJlc3RvcmUgdGhlIHN0YXRlIG9mIHBvcnQgMCBNQUMgaW4gY2FzZSB3ZSB0YW1wZXJlZCB3aXRoIGl0ICovCi0JaWYgKHJlc3RvcmUpCi0JCWlmIChOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAoMCksIG1hY19jZmcwKSkKLQkJCXJldHVybiAtRUlPOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IG5ldHhlbl9uaXVfeGdiZV9lbmFibGVfcGh5X2ludGVycnVwdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0lOVF9NQVNLLCAweDNmKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IG5ldHhlbl9uaXVfZ2JlX2VuYWJsZV9waHlfaW50ZXJydXB0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0JX191MzIgZW5hYmxlID0gMDsKLQluZXR4ZW5fc2V0X3BoeV9pbnRfbGlua19zdGF0dXNfY2hhbmdlZChlbmFibGUpOwotCW5ldHhlbl9zZXRfcGh5X2ludF9hdXRvbmVnX2NvbXBsZXRlZChlbmFibGUpOwotCW5ldHhlbl9zZXRfcGh5X2ludF9zcGVlZF9jaGFuZ2VkKGVuYWJsZSk7Ci0KLQlpZiAoMCAhPQotCSAgICBuZXR4ZW5fbml1X2diZV9waHlfd3JpdGUoYWRhcHRlciwKLQkJCQkgICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9JTlRfRU5BQkxFLAotCQkJCSAgICAgZW5hYmxlKSkKLQkJcmVzdWx0ID0gLUVJTzsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLWludCBuZXR4ZW5fbml1X3hnYmVfZGlzYWJsZV9waHlfaW50ZXJydXB0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfSU5UX01BU0ssIDB4N2YpOwotCXJldHVybiAwOwotfQotCi1pbnQgbmV0eGVuX25pdV9nYmVfZGlzYWJsZV9waHlfaW50ZXJydXB0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0JaWYgKDAgIT0KLQkgICAgbmV0eGVuX25pdV9nYmVfcGh5X3dyaXRlKGFkYXB0ZXIsCi0JCQkJICAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfSU5UX0VOQUJMRSwgMCkpCi0JCXJlc3VsdCA9IC1FSU87Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9uaXVfZ2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQlpZiAoMCAhPQotCSAgICBuZXR4ZW5fbml1X2diZV9waHlfd3JpdGUoYWRhcHRlciwKLQkJCQkgICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9JTlRfU1RBVFVTLAotCQkJCSAgICAgLUVJTykpCi0JCXJlc3VsdCA9IC1FSU87Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogbmV0eGVuX25pdV9nYmVfc2V0X21paV9tb2RlLSBTZXQgMTAvMTAwIE1iaXQgTW9kZSBmb3IgR2JFIE1BQwotICoKLSAqLwotc3RhdGljIHZvaWQgbmV0eGVuX25pdV9nYmVfc2V0X21paV9tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJaW50IHBvcnQsIGxvbmcgZW5hYmxlKQotewotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX01PREUsIDB4Mik7Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpLCAweDgwMDAwMDAwKTsKLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksIDB4MDAwMGYwMDI1KTsKLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzEocG9ydCksIDB4ZjFmZik7Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0IwX0dNSUlfTU9ERSArIChwb3J0IDw8IDMpLCAwKTsKLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQjBfTUlJX01PREUgKyAocG9ydCA8PCAzKSwgMSk7Ci0JTlhXUjMyKGFkYXB0ZXIsIChORVRYRU5fTklVX0dCMF9IQUxGX0RVUExFWCArIHBvcnQgKiA0KSwgMCk7Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09ORklHKHBvcnQpLCAweDcpOwotCi0JaWYgKGVuYWJsZSkgewotCQkvKgotCQkgKiBEbyBOT1QgZW5hYmxlIGZsb3cgY29udHJvbCB1bnRpbCBhIHN1aXRhYmxlIHNvbHV0aW9uIGZvcgotCQkgKiAgc2h1dHRpbmcgZG93biBwYXVzZSBmcmFtZXMgaXMgZm91bmQuCi0JCSAqLwotCQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksIDB4NSk7Ci0JfQotCi0JaWYgKG5ldHhlbl9uaXVfZ2JlX2VuYWJsZV9waHlfaW50ZXJydXB0cyhhZGFwdGVyKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUiBlbmFibGluZyBQSFkgaW50ZXJydXB0c1xuIik7Ci0JaWYgKG5ldHhlbl9uaXVfZ2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKGFkYXB0ZXIpKQotCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SIGNsZWFyaW5nIFBIWSBpbnRlcnJ1cHRzXG4iKTsKLX0KLQotLyoKLSAqIG5ldHhlbl9uaXVfZ2JlX3NldF9nbWlpX21vZGUtIFNldCBHYkUgTW9kZSBmb3IgR2JFIE1BQwotICovCi1zdGF0aWMgdm9pZCBuZXR4ZW5fbml1X2diZV9zZXRfZ21paV9tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJIGludCBwb3J0LCBsb25nIGVuYWJsZSkKLXsKLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9NT0RFLCAweDIpOwotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwgMHg4MDAwMDAwMCk7Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpLCAweDAwMDBmMDAyNSk7Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18xKHBvcnQpLCAweGYyZmYpOwotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCMF9NSUlfTU9ERSArIChwb3J0IDw8IDMpLCAwKTsKLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQjBfR01JSV9NT0RFICsgKHBvcnQgPDwgMyksIDEpOwotCU5YV1IzMihhZGFwdGVyLCAoTkVUWEVOX05JVV9HQjBfSEFMRl9EVVBMRVggKyBwb3J0ICogNCksIDApOwotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX0NPTkZJRyhwb3J0KSwgMHg3KTsKLQotCWlmIChlbmFibGUpIHsKLQkJLyoKLQkJICogRG8gTk9UIGVuYWJsZSBmbG93IGNvbnRyb2wgdW50aWwgYSBzdWl0YWJsZSBzb2x1dGlvbiBmb3IKLQkJICogIHNodXR0aW5nIGRvd24gcGF1c2UgZnJhbWVzIGlzIGZvdW5kLgotCQkgKi8KLQkJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpLCAweDUpOwotCX0KLQotCWlmIChuZXR4ZW5fbml1X2diZV9lbmFibGVfcGh5X2ludGVycnVwdHMoYWRhcHRlcikpCi0JCXByaW50ayhLRVJOX0VSUiAiRVJST1IgZW5hYmxpbmcgUEhZIGludGVycnVwdHNcbiIpOwotCWlmIChuZXR4ZW5fbml1X2diZV9jbGVhcl9waHlfaW50ZXJydXB0cyhhZGFwdGVyKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUiBjbGVhcmluZyBQSFkgaW50ZXJydXB0c1xuIik7Ci19Ci0KLWludCBuZXR4ZW5fbml1X2diZV9pbml0X3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCkKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQlfX3UzMiBzdGF0dXM7Ci0KLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoYWRhcHRlci0+ZGlzYWJsZV9waHlfaW50ZXJydXB0cykKLQkJYWRhcHRlci0+ZGlzYWJsZV9waHlfaW50ZXJydXB0cyhhZGFwdGVyKTsKLQltZGVsYXkoMik7Ci0KLQlpZiAoMCA9PSBuZXR4ZW5fbml1X2diZV9waHlfcmVhZChhZGFwdGVyLAotCQkJTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX1BIWV9TVEFUVVMsICZzdGF0dXMpKSB7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9saW5rKHN0YXR1cykpIHsKLQkJCWlmIChuZXR4ZW5fZ2V0X3BoeV9zcGVlZChzdGF0dXMpID09IDIpIHsKLQkJCQluZXR4ZW5fbml1X2diZV9zZXRfZ21paV9tb2RlKGFkYXB0ZXIsIHBvcnQsIDEpOwotCQkJfSBlbHNlIGlmICgobmV0eGVuX2dldF9waHlfc3BlZWQoc3RhdHVzKSA9PSAxKQotCQkJCSAgIHx8IChuZXR4ZW5fZ2V0X3BoeV9zcGVlZChzdGF0dXMpID09IDApKSB7Ci0JCQkJbmV0eGVuX25pdV9nYmVfc2V0X21paV9tb2RlKGFkYXB0ZXIsIHBvcnQsIDEpOwotCQkJfSBlbHNlIHsKLQkJCQlyZXN1bHQgPSAtMTsKLQkJCX0KLQotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFdlIGRvbid0IGhhdmUgbGluay4gQ2FibGUgIG11c3QgYmUgdW5jb25uZWN0ZWQuCi0JCQkgKiBFbmFibGUgcGh5IGludGVycnVwdHMgc28gd2UgdGFrZSBhY3Rpb24gd2hlbgotCQkJICogcGx1Z2dlZCBpbi4KLQkJCSAqLwotCi0JCQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksCi0JCQkJCQkgICAgTkVUWEVOX0dCX01BQ19TT0ZUX1JFU0VUKTsKLQkJCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKLQkJCQkJICAgIE5FVFhFTl9HQl9NQUNfUkVTRVRfUFJPVF9CTEsgfAotCQkJCQkgICAgTkVUWEVOX0dCX01BQ19FTkFCTEVfVFhfUlggfAotCQkJCQkgICAgTkVUWEVOX0dCX01BQ19QQVVTRURfRlJNUyk7Ci0JCQlpZiAobmV0eGVuX25pdV9nYmVfY2xlYXJfcGh5X2ludGVycnVwdHMoYWRhcHRlcikpCi0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJFUlJPUiBjbGVhcmluZyBQSFkgaW50ZXJydXB0c1xuIik7Ci0JCQlpZiAobmV0eGVuX25pdV9nYmVfZW5hYmxlX3BoeV9pbnRlcnJ1cHRzKGFkYXB0ZXIpKQotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiRVJST1IgZW5hYmxpbmcgUEhZIGludGVycnVwdHNcbiIpOwotCQkJaWYgKG5ldHhlbl9uaXVfZ2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKGFkYXB0ZXIpKQotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiRVJST1IgY2xlYXJpbmcgUEhZIGludGVycnVwdHNcbiIpOwotCQkJcmVzdWx0ID0gLTE7Ci0JCX0KLQl9IGVsc2UgewotCQlyZXN1bHQgPSAtRUlPOwotCX0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1pbnQgbmV0eGVuX25pdV94Z19pbml0X3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCkKLXsKLQlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgewotCQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzErKDB4MTAwMDAqcG9ydCksIDB4MTQ0Nyk7Ci0JCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMCsoMHgxMDAwMCpwb3J0KSwgMHg1KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogRGlzYWJsZSBhIEdiRSBpbnRlcmZhY2UgKi8KLWludCBuZXR4ZW5fbml1X2Rpc2FibGVfZ2JlX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCV9fdTMyIG1hY19jZmcwOwotCXUzMiBwb3J0ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKLQotCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQotCQlyZXR1cm4gMDsKLQotCWlmIChwb3J0ID4gTkVUWEVOX05JVV9NQVhfR0JFX1BPUlRTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQltYWNfY2ZnMCA9IDA7Ci0JbmV0eGVuX2diX3NvZnRfcmVzZXQobWFjX2NmZzApOwotCWlmIChOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksIG1hY19jZmcwKSkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIERpc2FibGUgYW4gWEcgaW50ZXJmYWNlICovCi1pbnQgbmV0eGVuX25pdV9kaXNhYmxlX3hnX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCV9fdTMyIG1hY19jZmc7Ci0JdTMyIHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwotCi0JaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCi0JCXJldHVybiAwOwotCi0JaWYgKHBvcnQgPiBORVRYRU5fTklVX01BWF9YR19QT1JUUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltYWNfY2ZnID0gMDsKLQlpZiAoTlhXUjMyKGFkYXB0ZXIsCi0JCQlORVRYRU5fTklVX1hHRV9DT05GSUdfMCArICgweDEwMDAwICogcG9ydCksIG1hY19jZmcpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLQotLyogU2V0IHByb21pc2N1b3VzIG1vZGUgZm9yIGEgR2JFIGludGVyZmFjZSAqLwotaW50IG5ldHhlbl9uaXVfc2V0X3Byb21pc2N1b3VzX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQl1MzIgbW9kZSkKLXsKLQlfX3UzMiByZWc7Ci0JdTMyIHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwotCi0JaWYgKHBvcnQgPiBORVRYRU5fTklVX01BWF9HQkVfUE9SVFMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogc2F2ZSBwcmV2aW91cyBjb250ZW50cyAqLwotCXJlZyA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX0RST1BfV1JPTkdBRERSKTsKLQlpZiAobW9kZSA9PSBORVRYRU5fTklVX1BST01JU0NfTU9ERSkgewotCQlzd2l0Y2ggKHBvcnQpIHsKLQkJY2FzZSAwOgotCQkJbmV0eGVuX2NsZWFyX2diX2Ryb3BfZ2IwKHJlZyk7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJbmV0eGVuX2NsZWFyX2diX2Ryb3BfZ2IxKHJlZyk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJbmV0eGVuX2NsZWFyX2diX2Ryb3BfZ2IyKHJlZyk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJbmV0eGVuX2NsZWFyX2diX2Ryb3BfZ2IzKHJlZyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChwb3J0KSB7Ci0JCWNhc2UgMDoKLQkJCW5ldHhlbl9zZXRfZ2JfZHJvcF9nYjAocmVnKTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQluZXR4ZW5fc2V0X2diX2Ryb3BfZ2IxKHJlZyk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJbmV0eGVuX3NldF9nYl9kcm9wX2diMihyZWcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCW5ldHhlbl9zZXRfZ2JfZHJvcF9nYjMocmVnKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0JaWYgKE5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX0RST1BfV1JPTkdBRERSLCByZWcpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLQotaW50IG5ldHhlbl9uaXVfeGdfc2V0X3Byb21pc2N1b3VzX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQl1MzIgbW9kZSkKLXsKLQlfX3UzMiByZWc7Ci0JdTMyIHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwotCi0JaWYgKHBvcnQgPiBORVRYRU5fTklVX01BWF9YR19QT1JUUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZWcgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzEgKyAoMHgxMDAwMCAqIHBvcnQpKTsKLQlpZiAobW9kZSA9PSBORVRYRU5fTklVX1BST01JU0NfTU9ERSkKLQkJcmVnID0gKHJlZyB8IDB4MjAwMFVMKTsKLQllbHNlCi0JCXJlZyA9IChyZWcgJiB+MHgyMDAwVUwpOwotCi0JaWYgKG1vZGUgPT0gTkVUWEVOX05JVV9BTExNVUxUSV9NT0RFKQotCQlyZWcgPSAocmVnIHwgMHgxMDAwVUwpOwotCWVsc2UKLQkJcmVnID0gKHJlZyAmIH4weDEwMDBVTCk7Ci0KLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzEgKyAoMHgxMDAwMCAqIHBvcnQpLCByZWcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBuZXR4ZW5fcDJfbmljX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICphZGRyKQotewotCXUzMiBtYWNfaGksIG1hY19sbzsKLQl1MzIgcmVnX2hpLCByZWdfbG87Ci0KLQl1OCBwaHkgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwotCXU4IHBoeV9jb3VudCA9IChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgPwotCQlORVRYRU5fTklVX01BWF9YR19QT1JUUyA6IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUzsKLQotCWlmIChwaHkgPj0gcGh5X2NvdW50KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1hY19sbyA9ICgodTMyKWFkZHJbMF0gPDwgMTYpIHwgKCh1MzIpYWRkclsxXSA8PCAyNCk7Ci0JbWFjX2hpID0gYWRkclsyXSB8ICgodTMyKWFkZHJbM10gPDwgOCkgfAotCQkoKHUzMilhZGRyWzRdIDw8IDE2KSB8ICgodTMyKWFkZHJbNV0gPDwgMjQpOwotCi0JaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7Ci0JCXJlZ19sbyA9IE5FVFhFTl9OSVVfWEdFX1NUQVRJT05fQUREUl8wXzEgKyAoMHgxMDAwMCAqIHBoeSk7Ci0JCXJlZ19oaSA9IE5FVFhFTl9OSVVfWEdFX1NUQVRJT05fQUREUl8wX0hJICsgKDB4MTAwMDAgKiBwaHkpOwotCX0gZWxzZSB7Ci0JCXJlZ19sbyA9IE5FVFhFTl9OSVVfR0JfU1RBVElPTl9BRERSXzEocGh5KTsKLQkJcmVnX2hpID0gTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMChwaHkpOwotCX0KLQotCS8qIHdyaXRlIHR3aWNlIHRvIGZsdXNoICovCi0JaWYgKE5YV1IzMihhZGFwdGVyLCByZWdfbG8sIG1hY19sbykgfHwgTlhXUjMyKGFkYXB0ZXIsIHJlZ19oaSwgbWFjX2hpKSkKLQkJcmV0dXJuIC1FSU87Ci0JaWYgKE5YV1IzMihhZGFwdGVyLCByZWdfbG8sIG1hY19sbykgfHwgTlhXUjMyKGFkYXB0ZXIsIHJlZ19oaSwgbWFjX2hpKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX3BoYW5fcmVnLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzNhNjJjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX3BoYW5fcmVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuIEluYywKLSAqIDE4OTIyIEZvcmdlIERyaXZlCi0gKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKLSAqCi0gKi8KLQotI2lmbmRlZiBfX05JQ19QSEFOX1JFR19IXwotI2RlZmluZSBfX05JQ19QSEFOX1JFR19IXwotCi0vKgotICogQ1JCIFJlZ2lzdGVycyBvciBxdWV1ZSBtZXNzYWdlIGRvbmUgb25seSBhdCBpbml0aWFsaXphdGlvbiB0aW1lLgotICovCi0jZGVmaW5lIE5JQ19DUkJfQkFTRSAgICAgICAgICAgICAgIE5FVFhFTl9DQU1fUkFNKDB4MjAwKQotI2RlZmluZSBORVRYRU5fTklDX1JFRyhYKSAgICAgICAgICAgICAoTklDX0NSQl9CQVNFKyhYKSkKLSNkZWZpbmUgTklDX0NSQl9CQVNFXzIgICAgICAgICAgICAgTkVUWEVOX0NBTV9SQU0oMHg3MDApCi0jZGVmaW5lIE5FVFhFTl9OSUNfUkVHXzIoWCkgICAgICAgICAoTklDX0NSQl9CQVNFXzIrKFgpKQotCi0jZGVmaW5lIENSQl9QSEFOX0NOVFJMX0xPX09GRlNFVCAgICBORVRYRU5fTklDX1JFRygweDAwKQotI2RlZmluZSBDUkJfUEhBTl9DTlRSTF9ISV9PRkZTRVQgICAgTkVUWEVOX05JQ19SRUcoMHgwNCkKLSNkZWZpbmUgQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVQgICAgIE5FVFhFTl9OSUNfUkVHKDB4MDgpCi0jZGVmaW5lIENSQl9DTURfQ09OU1VNRVJfT0ZGU0VUICAgICBORVRYRU5fTklDX1JFRygweDBjKQotI2RlZmluZSBDUkJfUEFVU0VfQUREUl9MTyAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgxMCkKLSNkZWZpbmUgQ1JCX1BBVVNFX0FERFJfSEkgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MTQpCi0jZGVmaW5lIE5YX0NEUlBfQ1JCX09GRlNFVCAgICAgICAgICBORVRYRU5fTklDX1JFRygweDE4KQotI2RlZmluZSBOWF9BUkcxX0NSQl9PRkZTRVQgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgxYykKLSNkZWZpbmUgTlhfQVJHMl9DUkJfT0ZGU0VUICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MjApCi0jZGVmaW5lIE5YX0FSRzNfQ1JCX09GRlNFVCAgICAgICAgICBORVRYRU5fTklDX1JFRygweDI0KQotI2RlZmluZSBOWF9TSUdOX0NSQl9PRkZTRVQgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgyOCkKLSNkZWZpbmUgQ1JCX0NNRF9JTlRSX0xPT1AgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MjApCi0jZGVmaW5lIENSQl9DTURfRE1BX0xPT1AgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDI0KQotI2RlZmluZSBDUkJfUkNWX0lOVFJfTE9PUCAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgyOCkKLSNkZWZpbmUgQ1JCX1JDVl9ETUFfTE9PUCAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MmMpCi0jZGVmaW5lIENSQl9FTkFCTEVfVFhfSU5UUiAgICAgICAgICBORVRYRU5fTklDX1JFRygweDMwKQotI2RlZmluZSBDUkJfTU1BUF9BRERSXzMgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgzNCkKLSNkZWZpbmUgQ1JCX0NNRFBFR19DTURSSU5HICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MzgpCi0jZGVmaW5lIENSQl9IT1NUX0RVTU1ZX0JVRl9BRERSX0hJICBORVRYRU5fTklDX1JFRygweDNjKQotI2RlZmluZSBDUkJfSE9TVF9EVU1NWV9CVUZfQUREUl9MTyAgTkVUWEVOX05JQ19SRUcoMHg0MCkKLSNkZWZpbmUgQ1JCX01NQVBfQUREUl8wICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4NDQpCi0jZGVmaW5lIENSQl9NTUFQX0FERFJfMSAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDQ4KQotI2RlZmluZSBDUkJfTU1BUF9BRERSXzIgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg0YykKLSNkZWZpbmUgQ1JCX0NNRFBFR19TVEFURSAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4NTApCi0jZGVmaW5lIENSQl9NTUFQX1NJWkVfMCAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDU0KQotI2RlZmluZSBDUkJfTU1BUF9TSVpFXzEgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg1OCkKLSNkZWZpbmUgQ1JCX01NQVBfU0laRV8yICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4NWMpCi0jZGVmaW5lIENSQl9NTUFQX1NJWkVfMyAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDYwKQotI2RlZmluZSBDUkJfR0xPQkFMX0lOVF9DT0FMICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg2NCkKLSNkZWZpbmUgQ1JCX0lOVF9DT0FMX01PREUgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4NjgpCi0jZGVmaW5lIENSQl9NQVhfUkNWX0JVRlMgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDZjKQotI2RlZmluZSBDUkJfVFhfSU5UX1RIUkVTSE9MRCAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg3MCkKLSNkZWZpbmUgQ1JCX1JYX1BLVF9USU1FUiAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4NzQpCi0jZGVmaW5lIENSQl9UWF9QS1RfVElNRVIgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDc4KQotI2RlZmluZSBDUkJfUlhfUEtUX0NOVCAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg3YykKLSNkZWZpbmUgQ1JCX1JYX1RNUl9DTlQgICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ODApCi0jZGVmaW5lIENSQl9SWF9MUk9fVElNRVIgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDg0KQotI2RlZmluZSBDUkJfUlhfTFJPX01JRF9USU1FUiAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg4OCkKLSNkZWZpbmUgQ1JCX0RNQV9NQVhfUkNWX0JVRlMgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4OGMpCi0jZGVmaW5lIENSQl9NQVhfRE1BX0VOVFJJRVMgICAgICAgICBORVRYRU5fTklDX1JFRygweDkwKQotI2RlZmluZSBDUkJfWEdfU1RBVEUgICAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg5NCkgLyogWEcgTGluayBzdGF0dXMgKi8KLSNkZWZpbmUgQ1JCX1hHX1NUQVRFX1AzICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4OTgpIC8qIFhHIFBGIExpbmsgc3RhdHVzICovCi0jZGVmaW5lIENSQl9BR0VOVF9UWF9TSVpFICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDljKQotI2RlZmluZSBDUkJfQUdFTlRfVFhfVFlQRSAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhhMCkKLSNkZWZpbmUgQ1JCX0FHRU5UX1RYX0FERFIgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YTQpCi0jZGVmaW5lIENSQl9BR0VOVF9UWF9NU1MgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGE4KQotI2RlZmluZSBDUkJfVFhfU1RBVEUgICAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhhYykKLSNkZWZpbmUgQ1JCX1RYX0NPVU5UICAgICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YjApCi0jZGVmaW5lIENSQl9SWF9TVEFURSAgICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGI0KQotI2RlZmluZSBDUkJfUlhfUEVSRl9ERUJVR18xICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhiOCkKLSNkZWZpbmUgQ1JCX1JYX0xST19DT05UUk9MICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YmMpCi0jZGVmaW5lIENSQl9SWF9MUk9fU1RBUlRfTlVNICAgICAgICBORVRYRU5fTklDX1JFRygweGMwKQotI2RlZmluZSBDUkJfTVBPUlRfTU9ERSAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhjNCkKLSNkZWZpbmUgQ1JCX0NNRF9SSU5HX1NJWkUgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YzgpCi0jZGVmaW5lIENSQl9ETUFfU0hJRlQgICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGNjKQotI2RlZmluZSBDUkJfSU5UX1ZFQ1RPUiAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhkNCkKLSNkZWZpbmUgQ1JCX0NUWF9SRVNFVCAgICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZDgpCi0jZGVmaW5lIENSQl9IT1NUX1NUU19QUk9EICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGRjKQotI2RlZmluZSBDUkJfSE9TVF9TVFNfQ09OUyAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhlMCkKLSNkZWZpbmUgQ1JCX1BFR19DTURfUFJPRCAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZTQpCi0jZGVmaW5lIENSQl9QRl9MSU5LX1NQRUVEXzEgICAgICAgICBORVRYRU5fTklDX1JFRygweGU4KQotI2RlZmluZSBDUkJfUEZfTElOS19TUEVFRF8yICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhlYykKLSNkZWZpbmUgQ1JCX0hPU1RfQlVGRkVSX0NPTlMgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZjApCi0jZGVmaW5lIENSQl9KVU1CT19CVUZGRVJfUFJPRCAgICAgICBORVRYRU5fTklDX1JFRygweGY0KQotI2RlZmluZSBDUkJfSlVNQk9fQlVGRkVSX0NPTlMgICAgICAgTkVUWEVOX05JQ19SRUcoMHhmOCkKLSNkZWZpbmUgQ1JCX0hPU1RfRFVNTVlfQlVGICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZmMpCi0KLSNkZWZpbmUgQ1JCX1JDVlBFR19TVEFURSAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MTNjKQotI2RlZmluZSBDUkJfQ01EX1BST0RVQ0VSX09GRlNFVF8xICAgTkVUWEVOX05JQ19SRUcoMHgxYWMpCi0jZGVmaW5lIENSQl9DTURfQ09OU1VNRVJfT0ZGU0VUXzEgICBORVRYRU5fTklDX1JFRygweDFiMCkKLSNkZWZpbmUgQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVRfMiAgIE5FVFhFTl9OSUNfUkVHKDB4MWI4KQotI2RlZmluZSBDUkJfQ01EX0NPTlNVTUVSX09GRlNFVF8yICAgTkVUWEVOX05JQ19SRUcoMHgxYmMpCi0jZGVmaW5lIENSQl9DTURfUFJPRFVDRVJfT0ZGU0VUXzMgICBORVRYRU5fTklDX1JFRygweDFkMCkKLSNkZWZpbmUgQ1JCX0NNRF9DT05TVU1FUl9PRkZTRVRfMyAgIE5FVFhFTl9OSUNfUkVHKDB4MWQ0KQotI2RlZmluZSBDUkJfVEVNUF9TVEFURSAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgxYjQpCi0KLSNkZWZpbmUgQ1JCX1YyUF8wCQkgICAgTkVUWEVOX05JQ19SRUcoMHgyOTApCi0jZGVmaW5lIENSQl9WMlBfMQkJICAgIE5FVFhFTl9OSUNfUkVHKDB4Mjk0KQotI2RlZmluZSBDUkJfVjJQXzIJCSAgICBORVRYRU5fTklDX1JFRygweDI5OCkKLSNkZWZpbmUgQ1JCX1YyUF8zCQkgICAgTkVUWEVOX05JQ19SRUcoMHgyOWMpCi0jZGVmaW5lIENSQl9WMlAocG9ydCkJCSAgICAoQ1JCX1YyUF8wKygocG9ydCkqNCkpCi0jZGVmaW5lIENSQl9EUklWRVJfVkVSU0lPTgkgICBORVRYRU5fTklDX1JFRygweDJhMCkKLSNkZWZpbmUgQ1JCX1NXX0lOVF9NQVNLXzAJICAgTkVUWEVOX05JQ19SRUcoMHgxZDgpCi0jZGVmaW5lIENSQl9TV19JTlRfTUFTS18xCSAgIE5FVFhFTl9OSUNfUkVHKDB4MWUwKQotI2RlZmluZSBDUkJfU1dfSU5UX01BU0tfMgkgICBORVRYRU5fTklDX1JFRygweDFlNCkKLSNkZWZpbmUgQ1JCX1NXX0lOVF9NQVNLXzMJICAgTkVUWEVOX05JQ19SRUcoMHgxZTgpCi0KLSNkZWZpbmUgQ1JCX0ZXX0NBUEFCSUxJVElFU18xICAgICAgTkVUWEVOX0NBTV9SQU0oMHgxMjgpCi0jZGVmaW5lIENSQl9NQUNfQkxPQ0tfU1RBUlQgICAgICAgIE5FVFhFTl9DQU1fUkFNKDB4MWMwKQotCi0vKgotICogY2FwYWJpbGl0aWVzIHJlZ2lzdGVyLCBjYW4gYmUgdXNlZCB0byBzZWxlY3RpdmVseSBlbmFibGUvZGlzYWJsZSBmZWF0dXJlcwotICogZm9yIGJhY2t3YXJkIGNvbXBhYmlsaXR5Ci0gKi8KLSNkZWZpbmUgQ1JCX05JQ19DQVBBQklMSVRJRVNfSE9TVAlORVRYRU5fTklDX1JFRygweDFhOCkKLSNkZWZpbmUgQ1JCX05JQ19DQVBBQklMSVRJRVNfRlcJICAJTkVUWEVOX05JQ19SRUcoMHgxZGMpCi0jZGVmaW5lIENSQl9OSUNfTVNJX01PREVfSE9TVAkJTkVUWEVOX05JQ19SRUcoMHgyNzApCi0jZGVmaW5lIENSQl9OSUNfTVNJX01PREVfRlcJICAJTkVUWEVOX05JQ19SRUcoMHgyNzQpCi0KLSNkZWZpbmUgSU5UUl9TQ0hFTUVfUEVSUE9SVAkgICAgICAJMHgxCi0jZGVmaW5lIE1TSV9NT0RFX01VTFRJRlVOQwkgICAgICAJMHgxCi0KLS8qIHVzZWQgZm9yIGV0aHRvb2wgdGVzdHMgKi8KLSNkZWZpbmUgQ1JCX1NDUkFUQ0hQQURfVEVTVAkgICAgTkVUWEVOX05JQ19SRUcoMHgyODApCi0KLS8qCi0gKiBDcmJQb3J0UGhhbkNudHJIaS9MbyBpcyB1c2VkIHRvIHBhc3MgdGhlIGFkZHJlc3Mgb2YgSG9zdFBoYW50b21JbmRleCBhZGRyZXNzCi0gKiB3aGljaCBjYW4gYmUgcmVhZCBieSB0aGUgUGhhbnRvbSBob3N0IHRvIGdldCBwcm9kdWNlci9jb25zdW1lciBpbmRleGVzIGZyb20KLSAqIFBoYW50b20vQ2FzcGVyLiBJZiBpdCBpcyBub3QgSE9TVF9TSEFSRURfTUVNT1JZLCB0aGVuIHRoZSBmb2xsb3dpbmcKLSAqIHJlZ2lzdGVycyB3aWxsIGJlIHVzZWQgZm9yIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHJpbmcncyBzaGFyZWQgbWVtb3J5Ci0gKiBvbiB0aGUgUGhhbnRvbS4KLSAqLwotCi0jZGVmaW5lIG54X2dldF90ZW1wX3ZhbCh4KQkJKCh4KSA+PiAxNikKLSNkZWZpbmUgbnhfZ2V0X3RlbXBfc3RhdGUoeCkJCSgoeCkgJiAweGZmZmYpCi0jZGVmaW5lIG54X2VuY29kZV90ZW1wKHZhbCwgc3RhdGUpCSgoKHZhbCkgPDwgMTYpIHwgKHN0YXRlKSkKLQotLyoKLSAqIENSQiByZWdpc3RlcnMgdXNlZCBieSB0aGUgcmVjZWl2ZSBwZWcgbG9naWMuCi0gKi8KLQotc3RydWN0IG5ldHhlbl9yZWN2X2NyYiB7Ci0JdTMyIGNyYl9yY3ZfcHJvZHVjZXJbTlVNX1JDVl9ERVNDX1JJTkdTXTsKLQl1MzIgY3JiX3N0c19jb25zdW1lcltOVU1fU1RTX0RFU0NfUklOR1NdOwotCXUzMiBzd19pbnRfbWFza1tOVU1fU1RTX0RFU0NfUklOR1NdOwotfTsKLQotLyoKLSAqIFRlbXBlcmF0dXJlIGNvbnRyb2wuCi0gKi8KLWVudW0gewotCU5YX1RFTVBfTk9STUFMID0gMHgxLAkvKiBOb3JtYWwgb3BlcmF0aW5nIHJhbmdlICovCi0JTlhfVEVNUF9XQVJOLAkJLyogU291bmQgYWxlcnQsIHRlbXBlcmF0dXJlIGdldHRpbmcgaGlnaCAqLwotCU5YX1RFTVBfUEFOSUMJCS8qIEZhdGFsIGVycm9yLCBoYXJkd2FyZSBoYXMgc2h1dCBkb3duLiAqLwotfTsKLQotI2VuZGlmCQkJCS8qIF9fTklDX1BIQU5fUkVHX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaTUwMTAuYyBiL2RyaXZlcnMvbmV0L25pNTAxMC5jCmluZGV4IDJhOGRhNDcuLjQ2MmQyMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pNTAxMC5jCisrKyBiL2RyaXZlcnMvbmV0L25pNTAxMC5jCkBAIC00NjMsNyArNDYzLDcgQEAKIAloYXJkd2FyZV9zZW5kX3BhY2tldChkZXYsICh1bnNpZ25lZCBjaGFyICopc2tiLT5kYXRhLCBza2ItPmxlbiwgbGVuZ3RoLXNrYi0+bGVuKTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlkZXZfa2ZyZWVfc2tiIChza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaTUyLmMgYi9kcml2ZXJzL25ldC9uaTUyLmMKaW5kZXggNzdkNDRhMC4uYmQwYWM2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmk1Mi5jCisrKyBiL2RyaXZlcnMvbmV0L25pNTIuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgbmk1Ml9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBpbnQgICAgIG5pNTJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgICAgIG5pNTJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50ICAgICBuaTUyX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIG5ldGRldl90eF90IG5pNTJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgc3RydWN0ICBuZXRfZGV2aWNlX3N0YXRzICpuaTUyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkICAgIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkICAgIG5pNTJfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTExNzMsNyArMTE3Myw4IEBACiAgKiBzZW5kIGZyYW1lCiAgKi8KIAotc3RhdGljIGludCBuaTUyX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgbmk1Ml9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBsZW4sIGk7CiAjaWZuZGVmIE5PX05PUENPTU1BTkRTCkBAIC0xMTgzLDcgKzExODQsNyBAQAogCiAJaWYgKHNrYi0+bGVuID4gWE1JVF9CVUZGX1NJWkUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogU29ycnksIG1heC4gZnJhbWVsZW5ndGggaXMgJWQgYnl0ZXMuIFRoZSBsZW5ndGggb2YgeW91ciBmcmFtZSBpcyAlZCBieXRlcy5cbiIsIGRldi0+bmFtZSwgWE1JVF9CVUZGX1NJWkUsIHNrYi0+bGVuKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwpAQCAtMTI2Nyw3ICsxMjY4LDcgQEAKIAl9CiAJZGV2X2tmcmVlX3NrYihza2IpOwogI2VuZGlmCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pNjUuYyBiL2RyaXZlcnMvbmV0L25pNjUuYwppbmRleCAxZjEwZWQ2Li43NTJjMmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaTY1LmMKKysrIGIvZHJpdmVycy9uZXQvbmk2NS5jCkBAIC0yNTIsNyArMjUyLDggQEAKIHN0YXRpYyBpbnQgIG5pNjVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgIG5pNjVfbGFuY2VfcmVpbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgbmk2NV9pbml0X2xhbmNlKHN0cnVjdCBwcml2ICpwLHVuc2lnbmVkIGNoYXIqLGludCxpbnQpOwotc3RhdGljIGludCAgbmk2NV9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBuaTY1X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgIG5pNjVfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgIG5pNjVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50ICBuaTY1X2FsbG9jX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTExNTcsNyArMTE1OCw4IEBACiAgKglTZW5kIGEgcGFja2V0CiAgKi8KIAotc3RhdGljIGludCBuaTY1X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgbmk2NV9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwcml2ICpwID0gZGV2LT5tbF9wcml2OwogCkBAIC0xMjE2LDcgKzEyMTgsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5yaW5nX2xvY2ssIGZsYWdzKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pdS5jIGIvZHJpdmVycy9uZXQvbml1LmMKaW5kZXggZDIxNDZkNC4uNzZjYzI2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbml1LmMKKysrIGIvZHJpdmVycy9uZXQvbml1LmMKQEAgLTQwMTUsNyArNDAxNSw3IEBACiAJCW1wLT5yeF9oaXN0X2NudDYgKz0gUlhNQUNfSElTVF9DTlQ2X0NPVU5UOwogCWlmICh2YWwgJiBYUlhNQUNfU1RBVFVTX1JYSElTVDdfQ05UX0VYUCkKIAkJbXAtPnJ4X2hpc3RfY250NyArPSBSWE1BQ19ISVNUX0NOVDdfQ09VTlQ7Ci0JaWYgKHZhbCAmIFhSWE1BQ19TVEFUX01TS19SWE9DVEVUX0NOVF9FWFApCisJaWYgKHZhbCAmIFhSWE1BQ19TVEFUVVNfUlhPQ1RFVF9DTlRfRVhQKQogCQltcC0+cnhfb2N0ZXRzICs9IFJYTUFDX0JUX0NOVF9DT1VOVDsKIAlpZiAodmFsICYgWFJYTUFDX1NUQVRVU19DVklPTEVSUl9DTlRfRVhQKQogCQltcC0+cnhfY29kZV92aW9sYXRpb25zICs9IFJYTUFDX0NEX1ZJT19DTlRfQ09VTlQ7CkBAIC02NjU3LDcgKzY2NTcsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbml1X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBuaXVfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBhbGlnbiwgaGVhZHJvb207CkBAIC0xMDE0NCwxMSArMTAxNDUsNiBAQAogCS51bm1hcF9zaW5nbGUJPSBuaXVfcGh5c191bm1hcF9zaW5nbGUsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyByZXNfc2l6ZShzdHJ1Y3QgcmVzb3VyY2UgKnIpCi17Ci0JcmV0dXJuIHItPmVuZCAtIHItPnN0YXJ0ICsgMVVMOwotfQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBuaXVfb2ZfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsCiAJCQkJICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKQEAgLTEwMTg4LDcgKzEwMTg0LDcgQEAKIAlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNKTsKIAogCW5wLT5yZWdzID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzFdLCAwLAotCQkJICAgICAgcmVzX3NpemUoJm9wLT5yZXNvdXJjZVsxXSksCisJCQkgICAgICByZXNvdXJjZV9zaXplKCZvcC0+cmVzb3VyY2VbMV0pLAogCQkJICAgICAgIm5pdSByZWdzIik7CiAJaWYgKCFucC0+cmVncykgewogCQlkZXZfZXJyKCZvcC0+ZGV2LCBQRlggIkNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVycywgIgpAQCAtMTAxOTgsNyArMTAxOTQsNyBAQAogCX0KIAogCW5wLT52aXJfcmVnc18xID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzJdLCAwLAotCQkJCSAgICByZXNfc2l6ZSgmb3AtPnJlc291cmNlWzJdKSwKKwkJCQkgICAgcmVzb3VyY2Vfc2l6ZSgmb3AtPnJlc291cmNlWzJdKSwKIAkJCQkgICAgIm5pdSB2cmVncy0xIik7CiAJaWYgKCFucC0+dmlyX3JlZ3NfMSkgewogCQlkZXZfZXJyKCZvcC0+ZGV2LCBQRlggIkNhbm5vdCBtYXAgZGV2aWNlIHZpciByZWdpc3RlcnMgMSwgIgpAQCAtMTAyMDgsNyArMTAyMDQsNyBAQAogCX0KIAogCW5wLT52aXJfcmVnc18yID0gb2ZfaW9yZW1hcCgmb3AtPnJlc291cmNlWzNdLCAwLAotCQkJCSAgICByZXNfc2l6ZSgmb3AtPnJlc291cmNlWzNdKSwKKwkJCQkgICAgcmVzb3VyY2Vfc2l6ZSgmb3AtPnJlc291cmNlWzNdKSwKIAkJCQkgICAgIm5pdSB2cmVncy0yIik7CiAJaWYgKCFucC0+dmlyX3JlZ3NfMikgewogCQlkZXZfZXJyKCZvcC0+ZGV2LCBQRlggIkNhbm5vdCBtYXAgZGV2aWNlIHZpciByZWdpc3RlcnMgMiwgIgpAQCAtMTAyNDMsMTkgKzEwMjM5LDE5IEBACiBlcnJfb3V0X2lvdW5tYXA6CiAJaWYgKG5wLT52aXJfcmVnc18xKSB7CiAJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVsyXSwgbnAtPnZpcl9yZWdzXzEsCi0JCQkgICByZXNfc2l6ZSgmb3AtPnJlc291cmNlWzJdKSk7CisJCQkgICByZXNvdXJjZV9zaXplKCZvcC0+cmVzb3VyY2VbMl0pKTsKIAkJbnAtPnZpcl9yZWdzXzEgPSBOVUxMOwogCX0KIAogCWlmIChucC0+dmlyX3JlZ3NfMikgewogCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbM10sIG5wLT52aXJfcmVnc18yLAotCQkJICAgcmVzX3NpemUoJm9wLT5yZXNvdXJjZVszXSkpOworCQkJICAgcmVzb3VyY2Vfc2l6ZSgmb3AtPnJlc291cmNlWzNdKSk7CiAJCW5wLT52aXJfcmVnc18yID0gTlVMTDsKIAl9CiAKIAlpZiAobnAtPnJlZ3MpIHsKIAkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzFdLCBucC0+cmVncywKLQkJCSAgIHJlc19zaXplKCZvcC0+cmVzb3VyY2VbMV0pKTsKKwkJCSAgIHJlc291cmNlX3NpemUoJm9wLT5yZXNvdXJjZVsxXSkpOwogCQlucC0+cmVncyA9IE5VTEw7CiAJfQogCkBAIC0xMDI4MCwxOSArMTAyNzYsMTkgQEAKIAogCQlpZiAobnAtPnZpcl9yZWdzXzEpIHsKIAkJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVsyXSwgbnAtPnZpcl9yZWdzXzEsCi0JCQkJICAgcmVzX3NpemUoJm9wLT5yZXNvdXJjZVsyXSkpOworCQkJCSAgIHJlc291cmNlX3NpemUoJm9wLT5yZXNvdXJjZVsyXSkpOwogCQkJbnAtPnZpcl9yZWdzXzEgPSBOVUxMOwogCQl9CiAKIAkJaWYgKG5wLT52aXJfcmVnc18yKSB7CiAJCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbM10sIG5wLT52aXJfcmVnc18yLAotCQkJCSAgIHJlc19zaXplKCZvcC0+cmVzb3VyY2VbM10pKTsKKwkJCQkgICByZXNvdXJjZV9zaXplKCZvcC0+cmVzb3VyY2VbM10pKTsKIAkJCW5wLT52aXJfcmVnc18yID0gTlVMTDsKIAkJfQogCiAJCWlmIChucC0+cmVncykgewogCQkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzFdLCBucC0+cmVncywKLQkJCQkgICByZXNfc2l6ZSgmb3AtPnJlc291cmNlWzFdKSk7CisJCQkJICAgcmVzb3VyY2Vfc2l6ZSgmb3AtPnJlc291cmNlWzFdKSk7CiAJCQlucC0+cmVncyA9IE5VTEw7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCmluZGV4IDE1NzZhYzAuLmM1OTRlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25zODM4MjAuYworKysgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKQEAgLTEwNzcsNyArMTA3Nyw4IEBACiAgKiB3aGlsZSB0cnlpbmcgdG8gdHJhY2sgZG93biBhIGJ1ZyBpbiBlaXRoZXIgdGhlIHplcm8gY29weSBjb2RlIG9yCiAgKiB0aGUgdHggZmlmbyAoaGVuY2UgdGhlIE1BWF9GUkFHX0xFTikuCiAgKi8KLXN0YXRpYyBpbnQgbnM4MzgyMF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbnM4MzgyMF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IG5zODM4MjAgKmRldiA9IFBSSVYobmRldik7CiAJdTMyIGZyZWVfaWR4LCBjbWRzdHMsIGV4dHN0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjaS1za2VsZXRvbi5jIGIvZHJpdmVycy9uZXQvcGNpLXNrZWxldG9uLmMKaW5kZXggODlmN2IyYS4uMGM0NGI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNpLXNrZWxldG9uLmMKKysrIGIvZHJpdmVycy9uZXQvcGNpLXNrZWxldG9uLmMKQEAgLTEzNTYsNyArMTM1Niw3IEBACiAJRFBSSU5USyAoIiVzOiBRdWV1ZWQgVHggcGFja2V0IGF0ICVwIHNpemUgJXUgdG8gc2xvdCAlZC5cbiIsCiAJCSBkZXYtPm5hbWUsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIGVudHJ5KTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApAQCAtMTc4NCwxMSArMTc4NCw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTSU9DU01JSVJFRzoJCS8qIFdyaXRlIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JCWlmICghY2FwYWJsZSAoQ0FQX05FVF9BRE1JTikpIHsKLQkJCXJjID0gLUVQRVJNOwotCQkJYnJlYWs7Ci0JCX0KLQogCQlzcGluX2xvY2tfaXJxc2F2ZSAoJnRwLT5sb2NrLCBmbGFncyk7CiAJCW1kaW9fd3JpdGUgKGRldiwgZGF0YS0+cGh5X2lkICYgMHgxZiwgZGF0YS0+cmVnX251bSAmIDB4MWYsIGRhdGEtPnZhbF9pbik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZ0cC0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwppbmRleCBmMzVjNjA5Li5lZThhZDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwpAQCAtODUsNiArODUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KIAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgpAQCAtMjM5LDcgKzI0MCw4IEBACiBzdGF0aWMgdm9pZCB0YzU3NF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIG1lZGlhX2NoZWNrKHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBpbnQgZWwzX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGVsM19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGVsM19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGVsM19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZWwzX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTc3OCw3ICs3ODAsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBlbDNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGVsM19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCXN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtODA2LDcgKzgwOSw3IEBACiAJcG9wX3R4X3N0YXR1cyhkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT53aW5kb3dfbG9jaywgZmxhZ3MpOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBUaGUgRUwzIGludGVycnVwdCBoYW5kbGVyLiAqLwpAQCAtMTA5NCwxNiArMTA5NywxNiBAQAogewogCXN0cnVjdCBlbDNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQl1MTYgKmRhdGEgPSAodTE2ICopJnJxLT5pZnJfaWZydTsKKwlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkocnEpOwogCWludCBwaHkgPSBscC0+cGh5cyAmIDB4MWY7CiAKIAlERUJVRygyLCAiJXM6IEluIGlvY3QoJS0uNnMsICUjNC40eCkgJTQuNHggJTQuNHggJTQuNHggJTQuNHguXG4iLAogCQkgIGRldi0+bmFtZSwgcnEtPmlmcl9pZnJuLmlmcm5fbmFtZSwgY21kLAotCQkgIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOworCQkgIGRhdGEtPnBoeV9pZCwgZGF0YS0+cmVnX251bSwgZGF0YS0+dmFsX2luLCBkYXRhLT52YWxfb3V0KTsKIAogCXN3aXRjaChjbWQpIHsKIAljYXNlIFNJT0NHTUlJUEhZOgkJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBQSFkgaW4gdXNlLiAqLwotCQlkYXRhWzBdID0gcGh5OworCQlkYXRhLT5waHlfaWQgPSBwaHk7CiAJY2FzZSBTSU9DR01JSVJFRzoJCS8qIFJlYWQgdGhlIHNwZWNpZmllZCBNSUkgcmVnaXN0ZXIuICovCiAJCXsKIAkJCWludCBzYXZlZF93aW5kb3c7CkBAIC0xMTEyLDcgKzExMTUsOCBAQAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT53aW5kb3dfbG9jaywgZmxhZ3MpOwogCQkJc2F2ZWRfd2luZG93ID0gaW53KGlvYWRkciArIEVMM19DTUQpID4+IDEzOwogCQkJRUwzV0lORE9XKDQpOwotCQkJZGF0YVszXSA9IG1kaW9fcmVhZChpb2FkZHIsIGRhdGFbMF0gJiAweDFmLCBkYXRhWzFdICYgMHgxZik7CisJCQlkYXRhLT52YWxfb3V0ID0gbWRpb19yZWFkKGlvYWRkciwgZGF0YS0+cGh5X2lkICYgMHgxZiwKKwkJCQkJCSAgZGF0YS0+cmVnX251bSAmIDB4MWYpOwogCQkJRUwzV0lORE9XKHNhdmVkX3dpbmRvdyk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+d2luZG93X2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiAwOwpAQCAtMTEyMiwxMiArMTEyNiwxMSBAQAogCQkJaW50IHNhdmVkX3dpbmRvdzsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJCXJldHVybiAtRVBFUk07CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPndpbmRvd19sb2NrLCBmbGFncyk7CiAJCQlzYXZlZF93aW5kb3cgPSBpbncoaW9hZGRyICsgRUwzX0NNRCkgPj4gMTM7CiAJCQlFTDNXSU5ET1coNCk7Ci0JCQltZGlvX3dyaXRlKGlvYWRkciwgZGF0YVswXSAmIDB4MWYsIGRhdGFbMV0gJiAweDFmLCBkYXRhWzJdKTsKKwkJCW1kaW9fd3JpdGUoaW9hZGRyLCBkYXRhLT5waHlfaWQgJiAweDFmLAorCQkJCSAgIGRhdGEtPnJlZ19udW0gJiAweDFmLCBkYXRhLT52YWxfaW4pOwogCQkJRUwzV0lORE9XKHNhdmVkX3dpbmRvdyk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+d2luZG93X2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwppbmRleCA2OTBiOWM3Li41NjlmYjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwpAQCAtMTQ5LDcgKzE0OSw4IEBACiBzdGF0aWMgdm9pZCBtZWRpYV9jaGVjayh1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgaW50IGVsM19jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApOwogc3RhdGljIGludCBlbDNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgZWwzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZWwzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZWwzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQgdXBkYXRlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICplbDNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNjA0LDcgKzYwNSw4IEBACiAgICAgfQogfQogCi1zdGF0aWMgaW50IGVsM19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZWwzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICB1bnNpZ25lZCBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgc3RydWN0IGVsM19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTYzNSw3ICs2MzcsNyBAQAogICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsgICAgCiAgICAgZGV2X2tmcmVlX3NrYihza2IpOwogICAgIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFRoZSBFTDMgaW50ZXJydXB0IGhhbmRsZXIuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCmluZGV4IDBlMzhkODAuLjMxMzFhNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgIi4uLzgzOTAuaCIKIAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgpAQCAtOTIsNyArOTMsOCBAQAogc3RhdGljIGludCBheG5ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBheG5ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgYXhuZXRfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgaW50IGF4bmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgYXhuZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpnZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBheG5ldF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNjk2LDE4ICs2OTgsMTYgQEAKIHN0YXRpYyBpbnQgYXhuZXRfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKIHsKICAgICBheG5ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKLSAgICB1MTYgKmRhdGEgPSAodTE2ICopJnJxLT5pZnJfaWZydTsKKyAgICBzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkocnEpOwogICAgIHVuc2lnbmVkIGludCBtaWlfYWRkciA9IGRldi0+YmFzZV9hZGRyICsgQVhORVRfTUlJX0VFUDsKICAgICBzd2l0Y2ggKGNtZCkgewogICAgIGNhc2UgU0lPQ0dNSUlQSFk6Ci0JZGF0YVswXSA9IGluZm8tPnBoeV9pZDsKKwlkYXRhLT5waHlfaWQgPSBpbmZvLT5waHlfaWQ7CiAgICAgY2FzZSBTSU9DR01JSVJFRzoJCS8qIFJlYWQgTUlJIFBIWSByZWdpc3Rlci4gKi8KLQlkYXRhWzNdID0gbWRpb19yZWFkKG1paV9hZGRyLCBkYXRhWzBdLCBkYXRhWzFdICYgMHgxZik7CisJZGF0YS0+dmFsX291dCA9IG1kaW9fcmVhZChtaWlfYWRkciwgZGF0YS0+cGh5X2lkLCBkYXRhLT5yZWdfbnVtICYgMHgxZik7CiAJcmV0dXJuIDA7CiAgICAgY2FzZSBTSU9DU01JSVJFRzoJCS8qIFdyaXRlIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCSAgICByZXR1cm4gLUVQRVJNOwotCW1kaW9fd3JpdGUobWlpX2FkZHIsIGRhdGFbMF0sIGRhdGFbMV0gJiAweDFmLCBkYXRhWzJdKTsKKwltZGlvX3dyaXRlKG1paV9hZGRyLCBkYXRhLT5waHlfaWQsIGRhdGEtPnJlZ19udW0gJiAweDFmLCBkYXRhLT52YWxfaW4pOwogCXJldHVybiAwOwogICAgIH0KICAgICByZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC04OTMsOCArODkzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCi0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLQogI2RlZmluZSBCVUdfODNDNjkwCiAKIC8qIFRoZXNlIGFyZSB0aGUgb3BlcmF0aW9uYWwgZnVuY3Rpb24gaW50ZXJmYWNlcyB0byBib2FyZC1zcGVjaWZpYwpAQCAtMTA2NSw3ICsxMDYzLDggQEAKICAqIFNlbmRzIGEgcGFja2V0IHRvIGFuIDgzOTAgbmV0d29yayBkZXZpY2UuCiAgKi8KICAKLXN0YXRpYyBpbnQgYXhuZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGF4bmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTExNzksNyArMTE3OCw3IEBACiAJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNlbmRfbGVuZ3RoOwogICAgIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKaW5kZXggNDc5ZDViNC4uN2UwMWZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCkBAIC05Niw3ICs5Niw4IEBACiBzdGF0aWMgaW50IGZqbl9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApOwogc3RhdGljIGludCBmam5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZmpuX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBmam5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBmam5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBmam5faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCBmam5fcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBmam5fcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC04NTYsNyArODU3LDggQEAKICAgICBuZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgZmpuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBmam5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBsb2NhbF9pbmZvX3QgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1bnNpZ25lZCBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC04NjUsNyArODY3LDcgQEAKICAgICBpZiAobGVuZ3RoIDwgRVRIX1pMRU4pCiAgICAgewogICAgIAlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotICAgIAkJcmV0dXJuIDA7CisgICAgCQlyZXR1cm4gTkVUREVWX1RYX09LOwogICAgIAlsZW5ndGggPSBFVEhfWkxFTjsKICAgICB9CiAKQEAgLTkyNCw3ICs5MjYsNyBAQAogICAgIH0KICAgICBkZXZfa2ZyZWVfc2tiIChza2IpOwogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0gLyogZmpuX3N0YXJ0X3htaXQgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKaW5kZXggMzZkZTkxYi4uNWVkNjMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwpAQCAtNDI0LDcgKzQyNCw4IEBACiBzdGF0aWMgaW50IG1hY2VfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKTsKIHN0YXRpYyBpbnQgbWFjZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBtYWNlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBtYWNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbWFjZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIG1hY2VfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBtYWNlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICptYWNlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTkzNyw3ICs5MzgsOCBAQAogICBuZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgbWFjZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbWFjZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICBtYWNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwpAQCAtOTkwLDcgKzk5Miw3IEBACiAKICAgZGV2X2tmcmVlX3NrYihza2IpOwogCi0gIHJldHVybiAwOworICByZXR1cm4gTkVUREVWX1RYX09LOwogfSAvKiBtYWNlX3N0YXJ0X3htaXQgKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwppbmRleCA5ZWYxYzFiLi45MGE5NGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgIi4uLzgzOTAuaCIKIAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgpAQCAtMTE5MSw3ICsxMTkyLDcgQEAKIHN0YXRpYyBpbnQgZWlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKIHsKICAgICBwY25ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKLSAgICB1MTYgKmRhdGEgPSAodTE2ICopJnJxLT5pZnJfaWZydTsKKyAgICBzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkocnEpOwogICAgIHVuc2lnbmVkIGludCBtaWlfYWRkciA9IGRldi0+YmFzZV9hZGRyICsgRExJTktfR1BJTzsKIAogICAgIGlmICghKGluZm8tPmZsYWdzICYgKElTX0RMMTAwMTl8SVNfREwxMDAyMikpKQpAQCAtMTE5OSwxNCArMTIwMCwxMiBAQAogCiAgICAgc3dpdGNoIChjbWQpIHsKICAgICBjYXNlIFNJT0NHTUlJUEhZOgotCWRhdGFbMF0gPSBpbmZvLT5waHlfaWQ7CisJZGF0YS0+cGh5X2lkID0gaW5mby0+cGh5X2lkOwogICAgIGNhc2UgU0lPQ0dNSUlSRUc6CQkvKiBSZWFkIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JZGF0YVszXSA9IG1kaW9fcmVhZChtaWlfYWRkciwgZGF0YVswXSwgZGF0YVsxXSAmIDB4MWYpOworCWRhdGEtPnZhbF9vdXQgPSBtZGlvX3JlYWQobWlpX2FkZHIsIGRhdGEtPnBoeV9pZCwgZGF0YS0+cmVnX251bSAmIDB4MWYpOwogCXJldHVybiAwOwogICAgIGNhc2UgU0lPQ1NNSUlSRUc6CQkvKiBXcml0ZSBNSUkgUEhZIHJlZ2lzdGVyLiAqLwotCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkgICAgcmV0dXJuIC1FUEVSTTsKLQltZGlvX3dyaXRlKG1paV9hZGRyLCBkYXRhWzBdLCBkYXRhWzFdICYgMHgxZiwgZGF0YVsyXSk7CisJbWRpb193cml0ZShtaWlfYWRkciwgZGF0YS0+cGh5X2lkLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgZGF0YS0+dmFsX2luKTsKIAlyZXR1cm4gMDsKICAgICB9CiAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwppbmRleCAzN2UwNWQzLi43YmRlMmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwpAQCAtMjg4LDcgKzI4OCw4IEBACiBzdGF0aWMgaW50IHNtY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc21jX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwogc3RhdGljIHZvaWQgc21jX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHNtY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHNtY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHNtY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIHNtY19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTM3MCw3ICsxMzcxLDggQEAKICAgICBuZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgc21jX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzbWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1bnNpZ25lZCBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC0xMzk5LDcgKzE0MDEsNyBAQAogCWRldl9rZnJlZV9za2IgKHNrYik7CiAJc21jLT5zYXZlZF9za2IgPSBOVUxMOwogCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwotCXJldHVybiAwOwkJLyogRG8gbm90IHJlLXF1ZXVlIHRoaXMgcGFja2V0LiAqLworCXJldHVybiBORVRERVZfVFhfT0s7CQkvKiBEbyBub3QgcmUtcXVldWUgdGhpcyBwYWNrZXQuICovCiAgICAgfQogICAgIC8qIEEgcGFja2V0IGlzIG5vdyB3YWl0aW5nLiAqLwogICAgIHNtYy0+cGFja2V0c193YWl0aW5nKys7CkBAIC0xNDIyLDcgKzE0MjQsNyBAQAogCSAgICBvdXR3KChpciYweGZmMDApIHwgSU1fQUxMT0NfSU5ULCBpb2FkZHIgKyBJTlRFUlJVUFQpOwogCSAgICBzbWNfaGFyZHdhcmVfc2VuZF9wYWNrZXQoZGV2KTsJLyogU2VuZCB0aGUgcGFja2V0IG5vdy4uICovCiAJICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtYy0+bG9jaywgZmxhZ3MpOwotCSAgICByZXR1cm4gMDsKKwkgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAgICAgfQogCkBAIC0xNDMxLDcgKzE0MzMsNyBAQAogICAgIG91dHcoKElNX0FMTE9DX0lOVCA8PCA4KSB8IChpciAmIDB4ZmYwMCksIGlvYWRkciArIElOVEVSUlVQVCk7CiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc21jLT5sb2NrLCBmbGFncyk7CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCmluZGV4IGVmMzdkMjIuLmNmODQyMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYwpAQCAtODAsNiArODAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgogCiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CkBAIC0zNTIsNyArMzUzLDggQEAKIC8qKioqKioqKioqKioqKioqCiAgKiBTb21lIG1vcmUgcHJvdG90eXBlcwogICovCi1zdGF0aWMgaW50IGRvX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZG9fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHhpcmNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHhpcmMycHNfdHhfdGltZW91dF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCBzZXRfYWRkcmVzc2VzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTM2MSw3ICsxMzYzLDcgQEAKICAgICBzY2hlZHVsZV93b3JrKCZscC0+dHhfdGltZW91dF90YXNrKTsKIH0KIAotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBkb19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgbG9jYWxfaW5mb190ICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMzg0LDcgKzEzODYsNyBAQAogICAgIGlmIChwa3RsZW4gPCBFVEhfWkxFTikKICAgICB7CiAgICAgICAgIGlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0gICAgICAgIAlyZXR1cm4gMDsKKyAgICAgICAgCXJldHVybiBORVRERVZfVFhfT0s7CiAJcGt0bGVuID0gRVRIX1pMRU47CiAgICAgfQogCkBAIC0xNDE0LDcgKzE0MTYsNyBAQAogICAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogICAgIGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gcGt0bGVuOwogICAgIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqKioqKioqKioqKioqKioKQEAgLTE1NTcsMjYgKzE1NTksMjYgQEAKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1bnNpZ25lZCBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0gICAgdTE2ICpkYXRhID0gKHUxNiAqKSZycS0+aWZyX2lmcnU7CisgICAgc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKHJxKTsKIAogICAgIERFQlVHKDEsICIlczogaW9jdGwoJS0uNnMsICUjMDR4KSAlMDR4ICUwNHggJTA0eCAlMDR4XG4iLAogCSAgZGV2LT5uYW1lLCBycS0+aWZyX2lmcm4uaWZybl9uYW1lLCBjbWQsCi0JICBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKKwkgIGRhdGEtPnBoeV9pZCwgZGF0YS0+cmVnX251bSwgZGF0YS0+dmFsX2luLCBkYXRhLT52YWxfb3V0KTsKIAogICAgIGlmICghbG9jYWwtPm1vaGF3aykKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKICAgICBzd2l0Y2goY21kKSB7CiAgICAgICBjYXNlIFNJT0NHTUlJUEhZOgkJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBQSFkgaW4gdXNlLiAqLwotCWRhdGFbMF0gPSAwOwkJLyogd2UgaGF2ZSBvbmx5IHRoaXMgYWRkcmVzcyAqLworCWRhdGEtPnBoeV9pZCA9IDA7CS8qIHdlIGhhdmUgb25seSB0aGlzIGFkZHJlc3MgKi8KIAkvKiBmYWxsIHRocm91Z2ggKi8KICAgICAgIGNhc2UgU0lPQ0dNSUlSRUc6CQkvKiBSZWFkIHRoZSBzcGVjaWZpZWQgTUlJIHJlZ2lzdGVyLiAqLwotCWRhdGFbM10gPSBtaWlfcmQoaW9hZGRyLCBkYXRhWzBdICYgMHgxZiwgZGF0YVsxXSAmIDB4MWYpOworCWRhdGEtPnZhbF9vdXQgPSBtaWlfcmQoaW9hZGRyLCBkYXRhLT5waHlfaWQgJiAweDFmLAorCQkJICAgICAgIGRhdGEtPnJlZ19udW0gJiAweDFmKTsKIAlicmVhazsKICAgICAgIGNhc2UgU0lPQ1NNSUlSRUc6CQkvKiBXcml0ZSB0aGUgc3BlY2lmaWVkIE1JSSByZWdpc3RlciAqLwotCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkgICAgcmV0dXJuIC1FUEVSTTsKLQltaWlfd3IoaW9hZGRyLCBkYXRhWzBdICYgMHgxZiwgZGF0YVsxXSAmIDB4MWYsIGRhdGFbMl0sIDE2KTsKKwltaWlfd3IoaW9hZGRyLCBkYXRhLT5waHlfaWQgJiAweDFmLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgZGF0YS0+dmFsX2luLAorCSAgICAgICAxNik7CiAJYnJlYWs7CiAgICAgICBkZWZhdWx0OgogCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwppbmRleCAyM2UxYTA3Li42ZDI4YjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY25ldDMyLmMKKysrIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCkBAIC0zMDMsNyArMzAzLDggQEAKIHN0YXRpYyBpbnQgcGNuZXQzMl9wcm9iZTEodW5zaWduZWQgbG9uZywgaW50LCBzdHJ1Y3QgcGNpX2RldiAqKTsKIHN0YXRpYyBpbnQgcGNuZXQzMl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBwY25ldDMyX2luaXRfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgcGNuZXQzMl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIG5ldGRldl90eF90IHBjbmV0MzJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHZvaWQgcGNuZXQzMl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHBjbmV0MzJfaW50ZXJydXB0KGludCwgdm9pZCAqKTsKIHN0YXRpYyBpbnQgcGNuZXQzMl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKQEAgLTI0ODEsNyArMjQ4Miw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBwY25ldDMyX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBwY25ldDMyX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwpAQCAtMjUzNCw3ICsyNTM2LDcgQEAKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFRoZSBQQ05FVDMyIGludGVycnVwdCBoYW5kbGVyLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwppbmRleCBkZTljZjUxLi5kNWQ4ZTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwpAQCAtNTYsNiArNTYsMTIgQEAKIAkgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgQkNNNTQxMSwgQkNNNTQyMSwgQkNNNTQ2MSwgQkNNNTQ2NCwgQkNNNTQ4MQogCSAgYW5kIEJDTTU0ODIgUEhZcy4KIAorY29uZmlnIEJDTTYzWFhfUEhZCisJdHJpc3RhdGUgIkRyaXZlcnMgZm9yIEJyb2FkY29tIDYzeHggU09DcyBpbnRlcm5hbCBQSFkiCisJZGVwZW5kcyBvbiBCQ002M1hYCisJLS0taGVscC0tLQorCSAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSA2MzQ4IGFuZCA2MzU4IFBIWXMuCisKIGNvbmZpZyBJQ1BMVVNfUEhZCiAJdHJpc3RhdGUgIkRyaXZlcnMgZm9yIElDUGx1cyBQSFlzIgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQppbmRleCAzYTFiZmVmLi5lZGZhYWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCkBAIC0xMSw2ICsxMSw3IEBACiBvYmotJChDT05GSUdfU01TQ19QSFkpCQkrPSBzbXNjLm8KIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSkJKz0gdml0ZXNzZS5vCiBvYmotJChDT05GSUdfQlJPQURDT01fUEhZKQkrPSBicm9hZGNvbS5vCitvYmotJChDT05GSUdfQkNNNjNYWF9QSFkpCSs9IGJjbTYzeHgubwogb2JqLSQoQ09ORklHX0lDUExVU19QSFkpCSs9IGljcGx1cy5vCiBvYmotJChDT05GSUdfUkVBTFRFS19QSFkpCSs9IHJlYWx0ZWsubwogb2JqLSQoQ09ORklHX0xTSV9FVDEwMTFDX1BIWSkJKz0gZXQxMDExYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYmNtNjN4eC5jIGIvZHJpdmVycy9uZXQvcGh5L2JjbTYzeHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmVkOTVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvcGh5L2JjbTYzeHguYwpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqCURyaXZlciBmb3IgQnJvYWRjb20gNjN4eCBTT0NzIGludGVncmF0ZWQgUEhZcworICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKworI2RlZmluZSBNSUlfQkNNNjNYWF9JUgkJMHgxYQkvKiBpbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX0JDTTYzWFhfSVJfRU4JMHg0MDAwCS8qIGdsb2JhbCBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIE1JSV9CQ002M1hYX0lSX0RVUExFWAkweDA4MDAJLyogZHVwbGV4IGNoYW5nZWQgKi8KKyNkZWZpbmUgTUlJX0JDTTYzWFhfSVJfU1BFRUQJMHgwNDAwCS8qIHNwZWVkIGNoYW5nZWQgKi8KKyNkZWZpbmUgTUlJX0JDTTYzWFhfSVJfTElOSwkweDAyMDAJLyogbGluayBjaGFuZ2VkICovCisjZGVmaW5lIE1JSV9CQ002M1hYX0lSX0dNQVNLCTB4MDEwMAkvKiBnbG9iYWwgaW50ZXJydXB0IG1hc2sgKi8KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9hZGNvbSA2M3h4IGludGVybmFsIFBIWSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1heGltZSBCaXpvbiA8bWJpem9uQGZyZWVib3guZnI+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgYmNtNjN4eF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCWludCByZWcsIGVycjsKKworCXJlZyA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JDTTYzWFhfSVIpOworCWlmIChyZWcgPCAwKQorCQlyZXR1cm4gcmVnOworCisJLyogTWFzayBpbnRlcnJ1cHRzIGdsb2JhbGx5LiAgKi8KKwlyZWcgfD0gTUlJX0JDTTYzWFhfSVJfR01BU0s7CisJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JDTTYzWFhfSVIsIHJlZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBVbm1hc2sgZXZlbnRzIHdlIGFyZSBpbnRlcmVzdGVkIGluICAqLworCXJlZyA9IH4oTUlJX0JDTTYzWFhfSVJfRFVQTEVYIHwKKwkJTUlJX0JDTTYzWFhfSVJfU1BFRUQgfAorCQlNSUlfQkNNNjNYWF9JUl9MSU5LKSB8CisJCU1JSV9CQ002M1hYX0lSX0VOOworCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CQ002M1hYX0lSLCByZWcpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJjbTYzeHhfYWNrX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCWludCByZWc7CisKKwkvKiBDbGVhciBwZW5kaW5nIGludGVycnVwdHMuICAqLworCXJlZyA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JDTTYzWFhfSVIpOworCWlmIChyZWcgPCAwKQorCQlyZXR1cm4gcmVnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtNjN4eF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCWludCByZWcsIGVycjsKKworCXJlZyA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JDTTYzWFhfSVIpOworCWlmIChyZWcgPCAwKQorCQlyZXR1cm4gcmVnOworCisJaWYgKHBoeWRldi0+aW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpCisJCXJlZyAmPSB+TUlJX0JDTTYzWFhfSVJfR01BU0s7CisJZWxzZQorCQlyZWcgfD0gTUlJX0JDTTYzWFhfSVJfR01BU0s7CisKKwllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQkNNNjNYWF9JUiwgcmVnKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNjN4eF8xX2RyaXZlciA9IHsKKwkucGh5X2lkCQk9IDB4MDA0MDYwMDAsCisJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmMwMCwKKwkubmFtZQkJPSAiQnJvYWRjb20gQkNNNjNYWCAoMSkiLAorCS8qIEFTWU1fUEFVU0UgYml0IGlzIG1hcmtlZCBSTyBpbiBkYXRhc2hlZXQsIHNvIGRvbid0IGNoZWF0ICovCisJLmZlYXR1cmVzCT0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZSksCisJLmZsYWdzCQk9IFBIWV9IQVNfSU5URVJSVVBULAorCS5jb25maWdfaW5pdAk9IGJjbTYzeHhfY29uZmlnX2luaXQsCisJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAorCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKKwkuYWNrX2ludGVycnVwdAk9IGJjbTYzeHhfYWNrX2ludGVycnVwdCwKKwkuY29uZmlnX2ludHIJPSBiY202M3h4X2NvbmZpZ19pbnRyLAorCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAorfTsKKworLyogc2FtZSBwaHkgYXMgYWJvdmUsIHdpdGgganVzdCBhIGRpZmZlcmVudCBPVUkgKi8KK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY202M3h4XzJfZHJpdmVyID0geworCS5waHlfaWQJCT0gMHgwMDJiZGMwMCwKKwkucGh5X2lkX21hc2sJPSAweGZmZmZmYzAwLAorCS5uYW1lCQk9ICJCcm9hZGNvbSBCQ002M1hYICgyKSIsCisJLmZlYXR1cmVzCT0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZSksCisJLmZsYWdzCQk9IFBIWV9IQVNfSU5URVJSVVBULAorCS5jb25maWdfaW5pdAk9IGJjbTYzeHhfY29uZmlnX2luaXQsCisJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAorCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKKwkuYWNrX2ludGVycnVwdAk9IGJjbTYzeHhfYWNrX2ludGVycnVwdCwKKwkuY29uZmlnX2ludHIJPSBiY202M3h4X2NvbmZpZ19pbnRyLAorCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYmNtNjN4eF9waHlfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZiY202M3h4XzFfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF82M3h4XzE7CisJcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3RlcigmYmNtNjN4eF8yX2RyaXZlcik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfNjN4eF8yOworCXJldHVybiByZXQ7CisKK291dF82M3h4XzI6CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY202M3h4XzFfZHJpdmVyKTsKK291dF82M3h4XzE6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGJjbTYzeHhfcGh5X2V4aXQodm9pZCkKK3sKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTYzeHhfMV9kcml2ZXIpOworCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYmNtNjN4eF8yX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGJjbTYzeHhfcGh5X2luaXQpOworbW9kdWxlX2V4aXQoYmNtNjN4eF9waHlfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYyBiL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCmluZGV4IDE5MGVmYzMuLmY4MWU1MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCkBAIC0xOCw2ICsxOCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogCiAjZGVmaW5lIFBIWV9JRF9CQ001MDYxMAkJMHgwMTQzYmQ2MAorI2RlZmluZSBQSFlfSURfQkNNNTA2MTBNCTB4MDE0M2JkNzAKKyNkZWZpbmUgUEhZX0lEX0JDTTU3NzgwCQkweDAzNjI1ZDkwCisKKyNkZWZpbmUgQlJDTV9QSFlfTU9ERUwocGh5ZGV2KSBcCisJKChwaHlkZXYpLT5kcnYtPnBoeV9pZCAmIChwaHlkZXYpLT5kcnYtPnBoeV9pZF9tYXNrKQorCiAKICNkZWZpbmUgTUlJX0JDTTU0WFhfRUNSCQkweDEwCS8qIEJDTTU0eHggZXh0ZW5kZWQgY29udHJvbCByZWdpc3RlciAqLwogI2RlZmluZSBNSUlfQkNNNTRYWF9FQ1JfSU0JMHgxMDAwCS8qIEludGVycnVwdCBtYXNrICovCkBAIC0xMTcsNiArMTIzLDcgQEAKICNkZWZpbmUgIE1JSV9CQ001NFhYX0VYUF9FWFAwOF9FQVJMWV9EQUNfV0FLRQkweDAyMDAKICNkZWZpbmUgTUlJX0JDTTU0WFhfRVhQX0VYUDc1CQkJMHgwZjc1CiAjZGVmaW5lICBNSUlfQkNNNTRYWF9FWFBfRVhQNzVfVkRBQ0NUUkwJCTB4MDAzYworI2RlZmluZSAgTUlJX0JDTTU0WFhfRVhQX0VYUDc1X0NNX09TQwkJMHgwMDAxCiAjZGVmaW5lIE1JSV9CQ001NFhYX0VYUF9FWFA5NgkJCTB4MGY5NgogI2RlZmluZSAgTUlJX0JDTTU0WFhfRVhQX0VYUDk2X01ZU1QJCTB4MDAxMAogI2RlZmluZSBNSUlfQkNNNTRYWF9FWFBfRVhQOTcJCQkweDBmOTcKQEAgLTE0MSw2ICsxNDgsMzUgQEAKICNkZWZpbmUgUEhZX0JDTV9GTEFHU19NT0RFXzEwMDBCWAkweDAwMDAwMDAyCiAjZGVmaW5lIFBIWV9CQ01fRkxBR1NfTU9ERV9DT1BQRVIJMHgwMDAwMDAwMQogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEZhc3QgRXRoZXJuZXQgVHJhbnNjZWl2ZXIgZGVmaW5pdGlvbnMuICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTUlJX0JSQ01fRkVUX0lOVFJFRwkJMHgxYQkvKiBJbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX0JSQ01fRkVUX0lSX01BU0sJCTB4MDEwMAkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzICovCisjZGVmaW5lIE1JSV9CUkNNX0ZFVF9JUl9MSU5LX0VOCQkweDAyMDAJLyogTGluayBzdGF0dXMgY2hhbmdlIGVuYWJsZSAqLworI2RlZmluZSBNSUlfQlJDTV9GRVRfSVJfU1BFRURfRU4JMHgwNDAwCS8qIExpbmsgc3BlZWQgY2hhbmdlIGVuYWJsZSAqLworI2RlZmluZSBNSUlfQlJDTV9GRVRfSVJfRFVQTEVYX0VOCTB4MDgwMAkvKiBEdXBsZXggbW9kZSBjaGFuZ2UgZW5hYmxlICovCisjZGVmaW5lIE1JSV9CUkNNX0ZFVF9JUl9FTkFCTEUJCTB4NDAwMAkvKiBJbnRlcnJ1cHQgZW5hYmxlICovCisKKyNkZWZpbmUgTUlJX0JSQ01fRkVUX0JSQ01URVNUCQkweDFmCS8qIEJyY20gdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBNSUlfQlJDTV9GRVRfQlRfU1JFCQkweDAwODAJLyogU2hhZG93IHJlZ2lzdGVyIGVuYWJsZSAqLworCisKKy8qKiogU2hhZG93IHJlZ2lzdGVyIGRlZmluaXRpb25zICoqKi8KKworI2RlZmluZSBNSUlfQlJDTV9GRVRfU0hEV19NSVNDQ1RSTAkweDEwCS8qIFNoYWRvdyBtaXNjIGN0cmwgKi8KKyNkZWZpbmUgTUlJX0JSQ01fRkVUX1NIRFdfTUNfRkFNRQkweDQwMDAJLyogRm9yY2UgQXV0byBNRElYIGVuYWJsZSAqLworCisjZGVmaW5lIE1JSV9CUkNNX0ZFVF9TSERXX0FVWE1PREU0CTB4MWEJLyogQXV4aWxpYXJ5IG1vZGUgNCAqLworI2RlZmluZSBNSUlfQlJDTV9GRVRfU0hEV19BTTRfTEVEX01BU0sJMHgwMDAzCisjZGVmaW5lIE1JSV9CUkNNX0ZFVF9TSERXX0FNNF9MRURfTU9ERTEgMHgwMDAxCisKKyNkZWZpbmUgTUlJX0JSQ01fRkVUX1NIRFdfQVVYU1RBVDIJMHgxYgkvKiBBdXhpbGlhcnkgc3RhdHVzIDIgKi8KKyNkZWZpbmUgTUlJX0JSQ01fRkVUX1NIRFdfQVMyX0FQREUJMHgwMDIwCS8qIEF1dG8gcG93ZXIgZG93biBlbmFibGUgKi8KKworCiBNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIFBIWSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1hY2llaiBXLiBSb3p5Y2tpIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0xNjQsNyArMjAwLDcgQEAKIH0KIAogLyogSW5kaXJlY3QgcmVnaXN0ZXIgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgdGhlIEV4cGFuc2lvbiBSZWdpc3RlcnMgKi8KLXN0YXRpYyBpbnQgYmNtNTR4eF9leHBfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1OCByZWdudW0pCitzdGF0aWMgaW50IGJjbTU0eHhfZXhwX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKIHsKIAlpbnQgdmFsOwogCkBAIC0yNzgsNiArMzE0LDMzIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCWlmIChCUkNNX1BIWV9NT0RFTChwaHlkZXYpID09IFBIWV9JRF9CQ001Nzc4MCkgeworCQlpbnQgZXJyMjsKKworCQllcnIgPSBiY201NHh4X2F1eGN0bF93cml0ZShwaHlkZXYsCisJCQkJCSAgIE1JSV9CQ001NFhYX0FVWENUTF9TSERXU0VMX0FVWENUTCwKKwkJCQkJICAgTUlJX0JDTTU0WFhfQVVYQ1RMX0FDVExfU01EU1BfRU5BIHwKKwkJCQkJICAgTUlJX0JDTTU0WFhfQVVYQ1RMX0FDVExfVFhfNkRCKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCisJCXJlZyA9IGJjbTU0eHhfZXhwX3JlYWQocGh5ZGV2LCBNSUlfQkNNNTRYWF9FWFBfRVhQNzUpOworCQlpZiAocmVnIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJcmVnIHw9IE1JSV9CQ001NFhYX0VYUF9FWFA3NV9DTV9PU0M7CisJCWVyciA9IGJjbTU0eHhfZXhwX3dyaXRlKHBoeWRldiwgTUlJX0JDTTU0WFhfRVhQX0VYUDc1LCByZWcpOworCitlcnJvcjoKKwkJZXJyMiA9IGJjbTU0eHhfYXV4Y3RsX3dyaXRlKHBoeWRldiwKKwkJCQkJICAgIE1JSV9CQ001NFhYX0FVWENUTF9TSERXU0VMX0FVWENUTCwKKwkJCQkJICAgIE1JSV9CQ001NFhYX0FVWENUTF9BQ1RMX1RYXzZEQik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAoZXJyMikKKwkJCXJldHVybiBlcnIyOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC00MzUsNiArNDk4LDExNCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYnJjbV9waHlfc2V0Yml0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmVnLCBpbnQgc2V0KQoreworCWludCB2YWw7CisKKwl2YWwgPSBwaHlfcmVhZChwaHlkZXYsIHJlZyk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiB2YWw7CisKKwlyZXR1cm4gcGh5X3dyaXRlKHBoeWRldiwgcmVnLCB2YWwgfCBzZXQpOworfQorCitzdGF0aWMgaW50IGJyY21fZmV0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHJlZywgZXJyLCBlcnIyLCBicmNtdGVzdDsKKworCS8qIFJlc2V0IHRoZSBQSFkgdG8gYnJpbmcgaXQgdG8gYSBrbm93biBzdGF0ZS4gKi8KKwllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZWcgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CUkNNX0ZFVF9JTlRSRUcpOworCWlmIChyZWcgPCAwKQorCQlyZXR1cm4gcmVnOworCisJLyogVW5tYXNrIGV2ZW50cyB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBhbmQgbWFzayBpbnRlcnJ1cHRzIGdsb2JhbGx5LiAqLworCXJlZyA9IE1JSV9CUkNNX0ZFVF9JUl9EVVBMRVhfRU4gfAorCSAgICAgIE1JSV9CUkNNX0ZFVF9JUl9TUEVFRF9FTiB8CisJICAgICAgTUlJX0JSQ01fRkVUX0lSX0xJTktfRU4gfAorCSAgICAgIE1JSV9CUkNNX0ZFVF9JUl9FTkFCTEUgfAorCSAgICAgIE1JSV9CUkNNX0ZFVF9JUl9NQVNLOworCisJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JSQ01fRkVUX0lOVFJFRywgcmVnKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIEVuYWJsZSBzaGFkb3cgcmVnaXN0ZXIgYWNjZXNzICovCisJYnJjbXRlc3QgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CUkNNX0ZFVF9CUkNNVEVTVCk7CisJaWYgKGJyY210ZXN0IDwgMCkKKwkJcmV0dXJuIGJyY210ZXN0OworCisJcmVnID0gYnJjbXRlc3QgfCBNSUlfQlJDTV9GRVRfQlRfU1JFOworCisJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JSQ01fRkVUX0JSQ01URVNULCByZWcpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogU2V0IHRoZSBMRUQgbW9kZSAqLworCXJlZyA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JSQ01fRkVUX1NIRFdfQVVYTU9ERTQpOworCWlmIChyZWcgPCAwKSB7CisJCWVyciA9IHJlZzsKKwkJZ290byBkb25lOworCX0KKworCXJlZyAmPSB+TUlJX0JSQ01fRkVUX1NIRFdfQU00X0xFRF9NQVNLOworCXJlZyB8PSBNSUlfQlJDTV9GRVRfU0hEV19BTTRfTEVEX01PREUxOworCisJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JSQ01fRkVUX1NIRFdfQVVYTU9ERTQsIHJlZyk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZG9uZTsKKworCS8qIEVuYWJsZSBhdXRvIE1ESVggKi8KKwllcnIgPSBicmNtX3BoeV9zZXRiaXRzKHBoeWRldiwgTUlJX0JSQ01fRkVUX1NIRFdfTUlTQ0NUUkwsCisJCQkJICAgICAgIE1JSV9CUkNNX0ZFVF9TSERXX01DX0ZBTUUpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGRvbmU7CisKKwkvKiBFbmFibGUgYXV0byBwb3dlciBkb3duICovCisJZXJyID0gYnJjbV9waHlfc2V0Yml0cyhwaHlkZXYsIE1JSV9CUkNNX0ZFVF9TSERXX0FVWFNUQVQyLAorCQkJCSAgICAgICBNSUlfQlJDTV9GRVRfU0hEV19BUzJfQVBERSk7CisKK2RvbmU6CisJLyogRGlzYWJsZSBzaGFkb3cgcmVnaXN0ZXIgYWNjZXNzICovCisJZXJyMiA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CUkNNX0ZFVF9CUkNNVEVTVCwgYnJjbXRlc3QpOworCWlmICghZXJyKQorCQllcnIgPSBlcnIyOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBicmNtX2ZldF9hY2tfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHJlZzsKKworCS8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0cy4gICovCisJcmVnID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQlJDTV9GRVRfSU5UUkVHKTsKKwlpZiAocmVnIDwgMCkKKwkJcmV0dXJuIHJlZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJyY21fZmV0X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHJlZywgZXJyOworCisJcmVnID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQlJDTV9GRVRfSU5UUkVHKTsKKwlpZiAocmVnIDwgMCkKKwkJcmV0dXJuIHJlZzsKKworCWlmIChwaHlkZXYtPmludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKQorCQlyZWcgJj0gfk1JSV9CUkNNX0ZFVF9JUl9NQVNLOworCWVsc2UKKwkJcmVnIHw9IE1JSV9CUkNNX0ZFVF9JUl9NQVNLOworCisJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JSQ01fRkVUX0lOVFJFRywgcmVnKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNTQxMV9kcml2ZXIgPSB7CiAJLnBoeV9pZAkJPSAweDAwMjA2MDcwLAogCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCkBAIC00NDcsNyArNjE4LDcgQEAKIAkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCiAJLmFja19pbnRlcnJ1cHQJPSBiY201NHh4X2Fja19pbnRlcnJ1cHQsCiAJLmNvbmZpZ19pbnRyCT0gYmNtNTR4eF9jb25maWdfaW50ciwKLQkuZHJpdmVyIAk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKKwkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201NDIxX2RyaXZlciA9IHsKQEAgLTQ2Miw3ICs2MzMsNyBAQAogCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKIAkuYWNrX2ludGVycnVwdAk9IGJjbTU0eHhfYWNrX2ludGVycnVwdCwKIAkuY29uZmlnX2ludHIJPSBiY201NHh4X2NvbmZpZ19pbnRyLAotCS5kcml2ZXIgCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAorCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTU0NjFfZHJpdmVyID0gewpAQCAtNDc3LDcgKzY0OCw3IEBACiAJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAogCS5hY2tfaW50ZXJydXB0CT0gYmNtNTR4eF9hY2tfaW50ZXJydXB0LAogCS5jb25maWdfaW50cgk9IGJjbTU0eHhfY29uZmlnX2ludHIsCi0JLmRyaXZlciAJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCisJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNTQ2NF9kcml2ZXIgPSB7CkBAIC00OTIsNyArNjYzLDcgQEAKIAkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCiAJLmFja19pbnRlcnJ1cHQJPSBiY201NHh4X2Fja19pbnRlcnJ1cHQsCiAJLmNvbmZpZ19pbnRyCT0gYmNtNTR4eF9jb25maWdfaW50ciwKLQkuZHJpdmVyIAk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKKwkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201NDgxX2RyaXZlciA9IHsKQEAgLTUwNyw3ICs2NzgsNyBAQAogCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKIAkuYWNrX2ludGVycnVwdAk9IGJjbTU0eHhfYWNrX2ludGVycnVwdCwKIAkuY29uZmlnX2ludHIJPSBiY201NHh4X2NvbmZpZ19pbnRyLAotCS5kcml2ZXIgCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAorCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTU0ODJfZHJpdmVyID0gewpAQCAtNTIyLDcgKzY5Myw3IEBACiAJLnJlYWRfc3RhdHVzCT0gYmNtNTQ4Ml9yZWFkX3N0YXR1cywKIAkuYWNrX2ludGVycnVwdAk9IGJjbTU0eHhfYWNrX2ludGVycnVwdCwKIAkuY29uZmlnX2ludHIJPSBiY201NHh4X2NvbmZpZ19pbnRyLAotCS5kcml2ZXIgCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAorCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTUwNjEwX2RyaXZlciA9IHsKQEAgLTUzNywxMSArNzA4LDI2IEBACiAJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAogCS5hY2tfaW50ZXJydXB0CT0gYmNtNTR4eF9hY2tfaW50ZXJydXB0LAogCS5jb25maWdfaW50cgk9IGJjbTU0eHhfY29uZmlnX2ludHIsCi0JLmRyaXZlciAJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCisJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNTA2MTBtX2RyaXZlciA9IHsKKwkucGh5X2lkCQk9IFBIWV9JRF9CQ001MDYxME0sCisJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKKwkubmFtZQkJPSAiQnJvYWRjb20gQkNNNTA2MTBNIiwKKwkuZmVhdHVyZXMJPSBQSFlfR0JJVF9GRUFUVVJFUyB8CisJCQkgIFNVUFBPUlRFRF9QYXVzZSB8IFNVUFBPUlRFRF9Bc3ltX1BhdXNlLAorCS5mbGFncwkJPSBQSFlfSEFTX01BR0lDQU5FRyB8IFBIWV9IQVNfSU5URVJSVVBULAorCS5jb25maWdfaW5pdAk9IGJjbTU0eHhfY29uZmlnX2luaXQsCisJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAorCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKKwkuYWNrX2ludGVycnVwdAk9IGJjbTU0eHhfYWNrX2ludGVycnVwdCwKKwkuY29uZmlnX2ludHIJPSBiY201NHh4X2NvbmZpZ19pbnRyLAorCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTU3NzgwX2RyaXZlciA9IHsKLQkucGh5X2lkCQk9IDB4MDM2MjVkOTAsCisJLnBoeV9pZAkJPSBQSFlfSURfQkNNNTc3ODAsCiAJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKIAkubmFtZQkJPSAiQnJvYWRjb20gQkNNNTc3ODAiLAogCS5mZWF0dXJlcwk9IFBIWV9HQklUX0ZFQVRVUkVTIHwKQEAgLTU1Miw3ICs3MzgsMjIgQEAKIAkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCiAJLmFja19pbnRlcnJ1cHQJPSBiY201NHh4X2Fja19pbnRlcnJ1cHQsCiAJLmNvbmZpZ19pbnRyCT0gYmNtNTR4eF9jb25maWdfaW50ciwKLQkuZHJpdmVyIAk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKKwkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY21hYzEzMV9kcml2ZXIgPSB7CisJLnBoeV9pZAkJPSAweDAxNDNiYzcwLAorCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCisJLm5hbWUJCT0gIkJyb2FkY29tIEJDTUFDMTMxIiwKKwkuZmVhdHVyZXMJPSBQSFlfQkFTSUNfRkVBVFVSRVMgfAorCQkJICBTVVBQT1JURURfUGF1c2UgfCBTVVBQT1JURURfQXN5bV9QYXVzZSwKKwkuZmxhZ3MJCT0gUEhZX0hBU19NQUdJQ0FORUcgfCBQSFlfSEFTX0lOVEVSUlVQVCwKKwkuY29uZmlnX2luaXQJPSBicmNtX2ZldF9jb25maWdfaW5pdCwKKwkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCisJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAorCS5hY2tfaW50ZXJydXB0CT0gYnJjbV9mZXRfYWNrX2ludGVycnVwdCwKKwkuY29uZmlnX2ludHIJPSBicmNtX2ZldF9jb25maWdfaW50ciwKKwkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJyb2FkY29tX2luaXQodm9pZCkKQEAgLTU4MCwxMiArNzgxLDIyIEBACiAJcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3RlcigmYmNtNTA2MTBfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF81MDYxMDsKKwlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZiY201MDYxMG1fZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF81MDYxMG07CiAJcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3RlcigmYmNtNTc3ODBfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF81Nzc4MDsKKwlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZiY21hYzEzMV9kcml2ZXIpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2FjMTMxOwogCXJldHVybiByZXQ7CiAKK291dF9hYzEzMToKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTU3NzgwX2RyaXZlcik7CiBvdXRfNTc3ODA6CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY201MDYxMG1fZHJpdmVyKTsKK291dF81MDYxMG06CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY201MDYxMF9kcml2ZXIpOwogb3V0XzUwNjEwOgogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYmNtNTQ4Ml9kcml2ZXIpOwpAQCAtNjA1LDcgKzgxNiw5IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBicm9hZGNvbV9leGl0KHZvaWQpCiB7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY21hYzEzMV9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYmNtNTc3ODBfZHJpdmVyKTsKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTUwNjEwbV9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYmNtNTA2MTBfZHJpdmVyKTsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTU0ODJfZHJpdmVyKTsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTU0ODFfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMgYi9kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jCmluZGV4IGRkNmY1NGQuLjZmNjliOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYwpAQCAtMTU1LDggKzE1NSwyNyBAQAogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKLQlyZXR1cm4gZXJyOworCWlmIChwaHlkZXYtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpIHsKKwkJaW50IGJtY3I7CisKKwkJLyoKKwkJICogQSB3cml0ZSB0byBzcGVlZC9kdXBsZXggYml0cyAodGhhdCBpcyBwZXJmb3JtZWQgYnkKKwkJICogZ2VucGh5X2NvbmZpZ19hbmVnKCkgY2FsbCBhYm92ZSkgbXVzdCBiZSBmb2xsb3dlZCBieQorCQkgKiBhIHNvZnR3YXJlIHJlc2V0LiBPdGhlcndpc2UsIHRoZSB3cml0ZSBoYXMgbm8gZWZmZWN0LgorCQkgKi8KKwkJYm1jciA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOworCQlpZiAoYm1jciA8IDApCisJCQlyZXR1cm4gYm1jcjsKKworCQllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgYm1jciB8IEJNQ1JfUkVTRVQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbTg4ZTExMjFfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uYyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uYwppbmRleCAyMmNkZDQ1Li4yNTBlMTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L21kaW8tZ3Bpby5jCkBAIC0yMTEsNyArMjExLDcgQEAKIAogCW5ld19idXMgPSBtZGlvX2dwaW9fYnVzX2luaXQoJm9mZGV2LT5kZXYsIHBkYXRhLCBwZGF0YS0+bWRjKTsKIAlpZiAoIW5ld19idXMpCi0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlOwogCiAJcmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBvZmRldi0+bm9kZSk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwppbmRleCBlZGE5NGZjLi42YjcxYjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCkBAIC0zMjQsOSArMzI0LDYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNJT0NTTUlJUkVHOgotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCiAJCWlmIChtaWlfZGF0YS0+cGh5X2lkID09IHBoeWRldi0+YWRkcikgewogCQkJc3dpdGNoKG1paV9kYXRhLT5yZWdfbnVtKSB7CiAJCQljYXNlIE1JSV9CTUNSOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGxpcC5jIGIvZHJpdmVycy9uZXQvcGxpcC5jCmluZGV4IDJjYThiMGQuLjAwNDg3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BsaXAuYworKysgYi9kcml2ZXJzL25ldC9wbGlwLmMKQEAgLTk5MCw3ICs5OTAsNyBAQAogCXNjaGVkdWxlX3dvcmsoJm5sLT5pbW1lZGlhdGUpOwogCXNwaW5fdW5sb2NrX2lycSgmbmwtPmxvY2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCmluZGV4IGNkMzdkNzMuLjliZjJhNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwpAQCAtOTUxLDcgKzk1MSw3IEBACiAvKgogICogTmV0d29yayBpbnRlcmZhY2UgdW5pdCByb3V0aW5lcy4KICAqLwotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBwcHBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwcHAgKnBwcCA9IG5ldGRldl9wcml2KGRldik7CkBAIC05ODgsMTIgKzk4OCwxMiBAQAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlza2JfcXVldWVfdGFpbCgmcHBwLT5maWxlLnhxLCBza2IpOwogCXBwcF94bWl0X3Byb2Nlc3MocHBwKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAgb3V0ZjoKIAlrZnJlZV9za2Ioc2tiKTsKIAkrK2Rldi0+c3RhdHMudHhfZHJvcHBlZDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNDMxLDYgKzE0MzEsNyBAQAogCQkqb3RoZXJ3aXNlIGRpdmlkZSBpdCBhY2NvcmRpbmcgdG8gdGhlIHNwZWVkCiAJCSpvZiB0aGUgY2hhbm5lbCB3ZSBhcmUgZ29pbmcgdG8gdHJhbnNtaXQgb24KIAkJKi8KKwkJZmxlbiA9IGxlbjsKIAkJaWYgKG5mcmVlID4gMCkgewogCQkJaWYgKHBjaC0+c3BlZWQgPT0gMCkgewogCQkJCWZsZW4gPSB0b3RsZW4vbmZyZWUJOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKaW5kZXggNWYyMDkwMi4uN2NiZjZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb2UuYworKysgYi9kcml2ZXJzL25ldC9wcHBvZS5jCkBAIC0xMTg1LDQwICsxMTg1LDQwIEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IHByb3RvX3JlZ2lzdGVyKCZwcHBvZV9za19wcm90bywgMCk7CisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UoJnBwcG9lX25ldF9pZCwgJnBwcG9lX25ldF9vcHMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCisJZXJyID0gcHJvdG9fcmVnaXN0ZXIoJnBwcG9lX3NrX3Byb3RvLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bnJlZ2lzdGVyX25ldF9vcHM7CisKIAllcnIgPSByZWdpc3Rlcl9wcHBveF9wcm90byhQWF9QUk9UT19PRSwgJnBwcG9lX3Byb3RvKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BwcG9lX3Byb3RvOwogCi0JZXJyID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UoJnBwcG9lX25ldF9pZCwgJnBwcG9lX25ldF9vcHMpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X3VucmVnaXN0ZXJfcHBwb3hfcHJvdG87Ci0KIAlkZXZfYWRkX3BhY2soJnBwcG9lc19wdHlwZSk7CiAJZGV2X2FkZF9wYWNrKCZwcHBvZWRfcHR5cGUpOwogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcHBwb2Vfbm90aWZpZXIpOwogCiAJcmV0dXJuIDA7CiAKLW91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOgotCXVucmVnaXN0ZXJfcHBwb3hfcHJvdG8oUFhfUFJPVE9fT0UpOwogb3V0X3VucmVnaXN0ZXJfcHBwb2VfcHJvdG86CiAJcHJvdG9fdW5yZWdpc3RlcigmcHBwb2Vfc2tfcHJvdG8pOworb3V0X3VucmVnaXN0ZXJfbmV0X29wczoKKwl1bnJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKHBwcG9lX25ldF9pZCwgJnBwcG9lX25ldF9vcHMpOwogb3V0OgogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvZV9leGl0KHZvaWQpCiB7Ci0JdW5yZWdpc3Rlcl9wcHBveF9wcm90byhQWF9QUk9UT19PRSk7Ci0JZGV2X3JlbW92ZV9wYWNrKCZwcHBvZXNfcHR5cGUpOwotCWRldl9yZW1vdmVfcGFjaygmcHBwb2VkX3B0eXBlKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcHBwb2Vfbm90aWZpZXIpOwotCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UocHBwb2VfbmV0X2lkLCAmcHBwb2VfbmV0X29wcyk7CisJZGV2X3JlbW92ZV9wYWNrKCZwcHBvZWRfcHR5cGUpOworCWRldl9yZW1vdmVfcGFjaygmcHBwb2VzX3B0eXBlKTsKKwl1bnJlZ2lzdGVyX3BwcG94X3Byb3RvKFBYX1BST1RPX09FKTsKIAlwcm90b191bnJlZ2lzdGVyKCZwcHBvZV9za19wcm90byk7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZShwcHBvZV9uZXRfaWQsICZwcHBvZV9uZXRfb3BzKTsKIH0KIAogbW9kdWxlX2luaXQocHBwb2VfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKaW5kZXggYTM5MzJjOS4uYjIxMTYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYwpAQCAtMTM0Niw3ICsxMzQ2LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGdlbGljX2V0aGVyX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBnZWxpY19ldGhlcl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JPSBnZWxpY19uZXRfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncwk9IGdlbGljX2V0aGVyX2dldF9zZXR0aW5ncywKIAkuZ2V0X2xpbmsJPSBldGh0b29sX29wX2dldF9saW5rLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYwppbmRleCA2OTMyYjA4Li4yMjdiMTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYworKysgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYwpAQCAtMjcxNCw3ICsyNzE0LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBnZWxpY193bF9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZ2VsaWNfd2xfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCT0gZ2VsaWNfbmV0X2dldF9kcnZpbmZvLAogCS5nZXRfbGluawk9IGdlbGljX3dsX2dldF9saW5rLAogCS5nZXRfdHhfY3N1bQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGEzeHh4LmMgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmMKaW5kZXggM2U0YjY3YS4uNGM2MTA1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxhM3h4eC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsYTN4eHguYwpAQCAtMjU3Miw3ICsyNTcyLDggQEAKICAqIFRoZSBJT0NCIGlzIGFsd2F5cyB0aGUgdG9wIG9mIHRoZSBjaGFpbiBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZQogICogT0FMcyAod2hlbiBuZWNlc3NhcnkpLgogICovCi1zdGF0aWMgaW50IHFsM3h4eF9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQorc3RhdGljIG5ldGRldl90eF90IHFsM3h4eF9zZW5kKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gKHN0cnVjdCBxbDNfYWRhcHRlciAqKW5ldGRldl9wcml2KG5kZXYpOwogCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0gcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaCBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCmluZGV4IDZlZDUzMTcuLmE5ODQ1YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCkBAIC0xMjg3LDEyICsxMjg3LDExIEBACiAJdTMyIHNicV9mcmVlX2NudDsJLyogZnJlZSBidWZmZXIgZGVzYyBjbnQgKi8KIAogCS8qIE1pc2MuIGhhbmRsZXIgZWxlbWVudHMuICovCi0JdTMyIHR5cGU7CQkvKiBUeXBlIG9mIHF1ZXVlLCB0eCwgcngsIG9yIGRlZmF1bHQuICovCisJdTMyIHR5cGU7CQkvKiBUeXBlIG9mIHF1ZXVlLCB0eCwgcnguICovCiAJdTMyIGlycTsJCS8qIFdoaWNoIHZlY3RvciB0aGlzIHJpbmcgaXMgYXNzaWduZWQuICovCiAJdTMyIGNwdTsJCS8qIFdoaWNoIENQVSB0aGlzIHNob3VsZCBydW4gb24uICovCiAJY2hhciBuYW1lW0lGTkFNU0laICsgNV07CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayByeF93b3JrOwogCXU4IHJlc2VydmVkOwogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2OwogfTsKQEAgLTEzNjYsNiArMTM2NSw3IEBACiBzdHJ1Y3QgaW50cl9jb250ZXh0IHsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldjsKIAl1MzIgaW50cjsKKwl1MzIgaXJxX21hc2s7CQkvKiBNYXNrIG9mIHdoaWNoIHJpbmdzIHRoZSB2ZWN0b3Igc2VydmljZXMuICovCiAJdTMyIGhvb2tlZDsKIAl1MzIgaW50cl9lbl9tYXNrOwkvKiB2YWx1ZS9tYXNrIHVzZWQgdG8gZW5hYmxlIHRoaXMgaW50ciAqLwogCXUzMiBpbnRyX2Rpc19tYXNrOwkvKiB2YWx1ZS9tYXNrIHVzZWQgdG8gZGlzYWJsZSB0aGlzIGludHIgKi8KQEAgLTE0ODYsMTMgKzE0ODYsMTEgQEAKIAlzdHJ1Y3QgaW50cl9jb250ZXh0IGludHJfY29udGV4dFtNQVhfUlhfUklOR1NdOwogCiAJaW50IHR4X3JpbmdfY291bnQ7CS8qIE9uZSBwZXIgb25saW5lIENQVS4gKi8KLQl1MzIgcnNzX3JpbmdfZmlyc3RfY3FfaWQ7LyogaW5kZXggb2YgZmlyc3QgaW5ib3VuZCAocnNzKSByeF9yaW5nICovCi0JdTMyIHJzc19yaW5nX2NvdW50OwkvKiBPbmUgcGVyIG9ubGluZSBDUFUuICAqLworCXUzMiByc3NfcmluZ19jb3VudDsJLyogT25lIHBlciBpcnEgdmVjdG9yLiAgKi8KIAkvKgogCSAqIHJ4X3JpbmdfY291bnQgPQotCSAqICBvbmUgZGVmYXVsdCBxdWV1ZSArCiAJICogIChDUFUgY291bnQgKiBvdXRib3VuZCBjb21wbGV0aW9uIHJ4X3JpbmcpICsKLQkgKiAgKENQVSBjb3VudCAqIGluYm91bmQgKFJTUykgY29tcGxldGlvbiByeF9yaW5nKQorCSAqICAoaXJxX3ZlY3Rvcl9jbnQgKiBpbmJvdW5kIChSU1MpIGNvbXBsZXRpb24gcnhfcmluZykKIAkgKi8KIAlpbnQgcnhfcmluZ19jb3VudDsKIAlpbnQgcmluZ19tZW1fc2l6ZTsKQEAgLTE1MTksNyArMTUxNyw2IEBACiAJdW5pb24gZmxhc2hfcGFyYW1zIGZsYXNoOwogCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnFfd29ya3F1ZXVlOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBhc2ljX3Jlc2V0X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfcmVzZXRfd29yazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9kYmcuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9kYmcuYwppbmRleCA0MGE3MGMzLi5hYTg4Y2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2RiZy5jCkBAIC00MTgsOCArNDE4LDYgQEAKIAlwcmludGsoS0VSTl9FUlIgUEZYICJxZGV2LT5pbnRyX2NvdW50IAk9ICVkLlxuIiwgcWRldi0+aW50cl9jb3VudCk7CiAJcHJpbnRrKEtFUk5fRVJSIFBGWCAicWRldi0+dHhfcmluZwkJPSAlcC5cbiIsCiAJICAgICAgIHFkZXYtPnR4X3JpbmcpOwotCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPnJzc19yaW5nX2ZpcnN0X2NxX2lkIAk9ICVkLlxuIiwKLQkgICAgICAgcWRldi0+cnNzX3JpbmdfZmlyc3RfY3FfaWQpOwogCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPnJzc19yaW5nX2NvdW50IAk9ICVkLlxuIiwKIAkgICAgICAgcWRldi0+cnNzX3JpbmdfY291bnQpOwogCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPnJ4X3JpbmcJPSAlcC5cbiIsIHFkZXYtPnJ4X3JpbmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKaW5kZXggZWI2YTllZS4uNjhmOWJkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCkBAIC00OSwxMCArNDksMTEgQEAKIAkvKiBTa2lwIHRoZSBkZWZhdWx0IHF1ZXVlLCBhbmQgdXBkYXRlIHRoZSBvdXRib3VuZCBoYW5kbGVyCiAJICogcXVldWVzIGlmIHRoZXkgY2hhbmdlZC4KIAkgKi8KLQljcWljYiA9IChzdHJ1Y3QgY3FpY2IgKikmcWRldi0+cnhfcmluZ1sxXTsKKwljcWljYiA9IChzdHJ1Y3QgY3FpY2IgKikmcWRldi0+cnhfcmluZ1txZGV2LT5yc3NfcmluZ19jb3VudF07CiAJaWYgKGxlMTZfdG9fY3B1KGNxaWNiLT5pcnFfZGVsYXkpICE9IHFkZXYtPnR4X2NvYWxlc2NlX3VzZWNzIHx8Ci0JICAgIGxlMTZfdG9fY3B1KGNxaWNiLT5wa3RfZGVsYXkpICE9IHFkZXYtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzKSB7Ci0JCWZvciAoaSA9IDE7IGkgPCBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZDsgaSsrLCByeF9yaW5nKyspIHsKKwkJbGUxNl90b19jcHUoY3FpY2ItPnBrdF9kZWxheSkgIT0KKwkJCQlxZGV2LT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcykgeworCQlmb3IgKGkgPSBxZGV2LT5yc3NfcmluZ19jb3VudDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgewogCQkJcnhfcmluZyA9ICZxZGV2LT5yeF9yaW5nW2ldOwogCQkJY3FpY2IgPSAoc3RydWN0IGNxaWNiICopcnhfcmluZzsKIAkJCWNxaWNiLT5pcnFfZGVsYXkgPSBjcHVfdG9fbGUxNihxZGV2LT50eF9jb2FsZXNjZV91c2Vjcyk7CkBAIC03MCwxMiArNzEsMTEgQEAKIAl9CiAKIAkvKiBVcGRhdGUgdGhlIGluYm91bmQgKFJTUykgaGFuZGxlciBxdWV1ZXMgaWYgdGhleSBjaGFuZ2VkLiAqLwotCWNxaWNiID0gKHN0cnVjdCBjcWljYiAqKSZxZGV2LT5yeF9yaW5nW3FkZXYtPnJzc19yaW5nX2ZpcnN0X2NxX2lkXTsKKwljcWljYiA9IChzdHJ1Y3QgY3FpY2IgKikmcWRldi0+cnhfcmluZ1swXTsKIAlpZiAobGUxNl90b19jcHUoY3FpY2ItPmlycV9kZWxheSkgIT0gcWRldi0+cnhfY29hbGVzY2VfdXNlY3MgfHwKLQkgICAgbGUxNl90b19jcHUoY3FpY2ItPnBrdF9kZWxheSkgIT0gcWRldi0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMpIHsKLQkJZm9yIChpID0gcWRldi0+cnNzX3JpbmdfZmlyc3RfY3FfaWQ7Ci0JCSAgICAgaSA8PSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCArIHFkZXYtPnJzc19yaW5nX2NvdW50OwotCQkgICAgIGkrKykgeworCQlsZTE2X3RvX2NwdShjcWljYi0+cGt0X2RlbGF5KSAhPQorCQkJCQlxZGV2LT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcykgeworCQlmb3IgKGkgPSAwOyBpIDwgcWRldi0+cnNzX3JpbmdfY291bnQ7IGkrKywgcnhfcmluZysrKSB7CiAJCQlyeF9yaW5nID0gJnFkZXYtPnJ4X3JpbmdbaV07CiAJCQljcWljYiA9IChzdHJ1Y3QgY3FpY2IgKilyeF9yaW5nOwogCQkJY3FpY2ItPmlycV9kZWxheSA9IGNwdV90b19sZTE2KHFkZXYtPnJ4X2NvYWxlc2NlX3VzZWNzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCmluZGV4IDU3NjhhZjEuLjIyMDUyOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwpAQCAtMzcwLDkgKzM3MCw3IEBACiAJCQkJY2FtX291dHB1dCA9IChDQU1fT1VUX1JPVVRFX05JQyB8CiAJCQkJCSAgICAgIChxZGV2LT4KIAkJCQkJICAgICAgIGZ1bmMgPDwgQ0FNX09VVF9GVU5DX1NISUZUKSB8Ci0JCQkJCSAgICAgIChxZGV2LT4KLQkJCQkJICAgICAgIHJzc19yaW5nX2ZpcnN0X2NxX2lkIDw8Ci0JCQkJCSAgICAgICBDQU1fT1VUX0NRX0lEX1NISUZUKSk7CisJCQkJCQkoMCA8PCBDQU1fT1VUX0NRX0lEX1NISUZUKSk7CiAJCQkJaWYgKHFkZXYtPnZsZ3JwKQogCQkJCQljYW1fb3V0cHV0IHw9IENBTV9PVVRfUlY7CiAJCQkJLyogcm91dGUgdG8gTklDIGNvcmUgKi8KQEAgLTE2NDksOCArMTY0Nyw3IEBACiAKIAlxZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJcWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0Jc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsCi0JCXJ4X3JpbmctPmNxX2lkIC0gcWRldi0+cnNzX3JpbmdfZmlyc3RfY3FfaWQpOworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9yaW5nLT5jcV9pZCk7CiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CiAJCWlmIChxZGV2LT52bGdycCAmJgogCQkJKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKSAmJgpAQCAtMTg2MiwxMSArMTg1OSw0MSBAQAogewogCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCByeF9yaW5nLCBuYXBpKTsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IHJ4X3JpbmctPnFkZXY7Ci0JaW50IHdvcmtfZG9uZSA9IHFsX2NsZWFuX2luYm91bmRfcnhfcmluZyhyeF9yaW5nLCBidWRnZXQpOworCXN0cnVjdCByeF9yaW5nICp0cnhfcmluZzsKKwlpbnQgaSwgd29ya19kb25lID0gMDsKKwlzdHJ1Y3QgaW50cl9jb250ZXh0ICpjdHggPSAmcWRldi0+aW50cl9jb250ZXh0W3J4X3JpbmctPmNxX2lkXTsKIAogCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywgIkVudGVyLCBOQVBJIFBPTEwgY3FfaWQgPSAlZC5cbiIsCiAJCXJ4X3JpbmctPmNxX2lkKTsKIAorCS8qIFNlcnZpY2UgdGhlIFRYIHJpbmdzIGZpcnN0LiAgVGhleSBzdGFydAorCSAqIHJpZ2h0IGFmdGVyIHRoZSBSU1MgcmluZ3MuICovCisJZm9yIChpID0gcWRldi0+cnNzX3JpbmdfY291bnQ7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspIHsKKwkJdHJ4X3JpbmcgPSAmcWRldi0+cnhfcmluZ1tpXTsKKwkJLyogSWYgdGhpcyBUWCBjb21wbGV0aW9uIHJpbmcgYmVsb25ncyB0byB0aGlzIHZlY3RvciBhbmQKKwkJICogaXQncyBub3QgZW1wdHkgdGhlbiBzZXJ2aWNlIGl0LgorCQkgKi8KKwkJaWYgKChjdHgtPmlycV9tYXNrICYgKDEgPDwgdHJ4X3JpbmctPmNxX2lkKSkgJiYKKwkJCShxbF9yZWFkX3NoX3JlZyh0cnhfcmluZy0+cHJvZF9pZHhfc2hfcmVnKSAhPQorCQkJCQl0cnhfcmluZy0+Y25zbXJfaWR4KSkgeworCQkJUVBSSU5USyhxZGV2LCBJTlRSLCBERUJVRywKKwkJCQkiJXM6IFNlcnZpY2luZyBUWCBjb21wbGV0aW9uIHJpbmcgJWQuXG4iLAorCQkJCV9fZnVuY19fLCB0cnhfcmluZy0+Y3FfaWQpOworCQkJcWxfY2xlYW5fb3V0Ym91bmRfcnhfcmluZyh0cnhfcmluZyk7CisJCX0KKwl9CisKKwkvKgorCSAqIE5vdyBzZXJ2aWNlIHRoZSBSU1MgcmluZyBpZiBpdCdzIGFjdGl2ZS4KKwkgKi8KKwlpZiAocWxfcmVhZF9zaF9yZWcocnhfcmluZy0+cHJvZF9pZHhfc2hfcmVnKSAhPQorCQkJCQlyeF9yaW5nLT5jbnNtcl9pZHgpIHsKKwkJUVBSSU5USyhxZGV2LCBJTlRSLCBERUJVRywKKwkJCSIlczogU2VydmljaW5nIFJYIGNvbXBsZXRpb24gcmluZyAlZC5cbiIsCisJCQlfX2Z1bmNfXywgcnhfcmluZy0+Y3FfaWQpOworCQl3b3JrX2RvbmUgPSBxbF9jbGVhbl9pbmJvdW5kX3J4X3JpbmcocnhfcmluZywgYnVkZ2V0KTsKKwl9CisKIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CiAJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXFsX2VuYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChxZGV2LCByeF9yaW5nLT5pcnEpOwpAQCAtMTkyOCwzOCArMTk1NSw2IEBACiAKIH0KIAotLyogV29ya2VyIHRocmVhZCB0byBwcm9jZXNzIGEgZ2l2ZW4gcnhfcmluZyB0aGF0IGlzIGRlZGljYXRlZAotICogdG8gb3V0Ym91bmQgY29tcGxldGlvbnMuCi0gKi8KLXN0YXRpYyB2b2lkIHFsX3R4X2NsZWFuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZyA9Ci0JICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnhfcmluZywgcnhfd29yay53b3JrKTsKLQlxbF9jbGVhbl9vdXRib3VuZF9yeF9yaW5nKHJ4X3JpbmcpOwotCXFsX2VuYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChyeF9yaW5nLT5xZGV2LCByeF9yaW5nLT5pcnEpOwotCi19Ci0KLS8qIFdvcmtlciB0aHJlYWQgdG8gcHJvY2VzcyBhIGdpdmVuIHJ4X3JpbmcgdGhhdCBpcyBkZWRpY2F0ZWQKLSAqIHRvIGluYm91bmQgY29tcGxldGlvbnMuCi0gKi8KLXN0YXRpYyB2b2lkIHFsX3J4X2NsZWFuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZyA9Ci0JICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnhfcmluZywgcnhfd29yay53b3JrKTsKLQlxbF9jbGVhbl9pbmJvdW5kX3J4X3JpbmcocnhfcmluZywgNjQpOwotCXFsX2VuYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChyeF9yaW5nLT5xZGV2LCByeF9yaW5nLT5pcnEpOwotfQotCi0vKiBNU0ktWCBNdWx0aXBsZSBWZWN0b3IgSW50ZXJydXB0IEhhbmRsZXIgZm9yIG91dGJvdW5kIGNvbXBsZXRpb25zLiAqLwotc3RhdGljIGlycXJldHVybl90IHFsZ2VfbXNpeF90eF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nID0gZGV2X2lkOwotCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihyeF9yaW5nLT5jcHUsIHJ4X3JpbmctPnFkZXYtPnFfd29ya3F1ZXVlLAotCQkJICAgICAgJnJ4X3JpbmctPnJ4X3dvcmssIDApOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQogLyogTVNJLVggTXVsdGlwbGUgVmVjdG9yIEludGVycnVwdCBIYW5kbGVyIGZvciBpbmJvdW5kIGNvbXBsZXRpb25zLiAqLwogc3RhdGljIGlycXJldHVybl90IHFsZ2VfbXNpeF9yeF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewpAQCAtMTk3OSw3ICsxOTc0LDYgQEAKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IHJ4X3JpbmctPnFkZXY7CiAJc3RydWN0IGludHJfY29udGV4dCAqaW50cl9jb250ZXh0ID0gJnFkZXYtPmludHJfY29udGV4dFswXTsKIAl1MzIgdmFyOwotCWludCBpOwogCWludCB3b3JrX2RvbmUgPSAwOwogCiAJc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKQEAgLTIwMjAsNDEgKzIwMTQsMTggQEAKIAl9CiAKIAkvKgotCSAqIENoZWNrIHRoZSBkZWZhdWx0IHF1ZXVlIGFuZCB3YWtlIGhhbmRsZXIgaWYgYWN0aXZlLgorCSAqIEdldCB0aGUgYml0LW1hc2sgdGhhdCBzaG93cyB0aGUgYWN0aXZlIHF1ZXVlcyBmb3IgdGhpcworCSAqIHBhc3MuICBDb21wYXJlIGl0IHRvIHRoZSBxdWV1ZXMgdGhhdCB0aGlzIGlycSBzZXJ2aWNlcworCSAqIGFuZCBjYWxsIG5hcGkgaWYgdGhlcmUncyBhIG1hdGNoLgogCSAqLwotCXJ4X3JpbmcgPSAmcWRldi0+cnhfcmluZ1swXTsKLQlpZiAocWxfcmVhZF9zaF9yZWcocnhfcmluZy0+cHJvZF9pZHhfc2hfcmVnKSAhPSByeF9yaW5nLT5jbnNtcl9pZHgpIHsKLQkJUVBSSU5USyhxZGV2LCBJTlRSLCBJTkZPLCAiV2FraW5nIGhhbmRsZXIgZm9yIHJ4X3JpbmdbMF0uXG4iKTsKLQkJcWxfZGlzYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChxZGV2LCBpbnRyX2NvbnRleHQtPmludHIpOwotCQlxdWV1ZV9kZWxheWVkX3dvcmtfb24oc21wX3Byb2Nlc3Nvcl9pZCgpLCBxZGV2LT5xX3dvcmtxdWV1ZSwKLQkJCQkgICAgICAmcnhfcmluZy0+cnhfd29yaywgMCk7Ci0JCXdvcmtfZG9uZSsrOwotCX0KLQotCWlmICghdGVzdF9iaXQoUUxfTVNJWF9FTkFCTEVELCAmcWRldi0+ZmxhZ3MpKSB7Ci0JCS8qCi0JCSAqIFN0YXJ0IHRoZSBEUEMgZm9yIGVhY2ggYWN0aXZlIHF1ZXVlLgotCQkgKi8KLQkJZm9yIChpID0gMTsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgewotCQkJcnhfcmluZyA9ICZxZGV2LT5yeF9yaW5nW2ldOwotCQkJaWYgKHFsX3JlYWRfc2hfcmVnKHJ4X3JpbmctPnByb2RfaWR4X3NoX3JlZykgIT0KLQkJCSAgICByeF9yaW5nLT5jbnNtcl9pZHgpIHsKKwl2YXIgPSBxbF9yZWFkMzIocWRldiwgSVNSMSk7CisJaWYgKHZhciAmIGludHJfY29udGV4dC0+aXJxX21hc2spIHsKIAkJCQlRUFJJTlRLKHFkZXYsIElOVFIsIElORk8sCi0JCQkJCSJXYWtpbmcgaGFuZGxlciBmb3IgcnhfcmluZ1slZF0uXG4iLCBpKTsKLQkJCQlxbF9kaXNhYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHFkZXYsCi0JCQkJCQkJCWludHJfY29udGV4dC0+Ci0JCQkJCQkJCWludHIpOwotCQkJCWlmIChpIDwgcWRldi0+cnNzX3JpbmdfZmlyc3RfY3FfaWQpCi0JCQkJCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihyeF9yaW5nLT5jcHUsCi0JCQkJCQkJICAgICAgcWRldi0+cV93b3JrcXVldWUsCi0JCQkJCQkJICAgICAgJnJ4X3JpbmctPnJ4X3dvcmssCi0JCQkJCQkJICAgICAgMCk7Ci0JCQkJZWxzZQorCQkJIldha2luZyBoYW5kbGVyIGZvciByeF9yaW5nWzBdLlxuIik7CisJCXFsX2Rpc2FibGVfY29tcGxldGlvbl9pbnRlcnJ1cHQocWRldiwgaW50cl9jb250ZXh0LT5pbnRyKTsKIAkJCQkJbmFwaV9zY2hlZHVsZSgmcnhfcmluZy0+bmFwaSk7CiAJCQkJd29ya19kb25lKys7CiAJCQl9Ci0JCX0KLQl9CiAJcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHFkZXYsIGludHJfY29udGV4dC0+aW50cik7CiAJcmV0dXJuIHdvcmtfZG9uZSA/IElSUV9IQU5ETEVEIDogSVJRX05PTkU7CiB9CkBAIC0yMTMyLDcgKzIxMDMsNyBAQAogCQkJCSAgICBpcGgtPmRhZGRyLCBsZW4sIGlwaC0+cHJvdG9jb2wsIDApOwogfQogCi1zdGF0aWMgaW50IHFsZ2Vfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBxbGdlX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHR4X3JpbmdfZGVzYyAqdHhfcmluZ19kZXNjOwogCXN0cnVjdCBvYl9tYWNfaW9jYl9yZXEgKm1hY19pb2NiX3B0cjsKQEAgLTI3MDYsMzUgKzI2NzcsOSBAQAogCX0KIAlzd2l0Y2ggKHJ4X3JpbmctPnR5cGUpIHsKIAljYXNlIFRYX1E6Ci0JCS8qIElmIHRoZXJlJ3Mgb25seSBvbmUgaW50ZXJydXB0LCB0aGVuIHdlIHVzZQotCQkgKiB3b3JrZXIgdGhyZWFkcyB0byBwcm9jZXNzIHRoZSBvdXRib3VuZAotCQkgKiBjb21wbGV0aW9uIGhhbmRsaW5nIHJ4X3JpbmdzLiBXZSBkbyB0aGlzIHNvCi0JCSAqIHRoZXkgY2FuIGJlIHJ1biBvbiBtdWx0aXBsZSBDUFVzLiBUaGVyZSBpcwotCQkgKiByb29tIHRvIHBsYXkgd2l0aCB0aGlzIG1vcmUgd2hlcmUgd2Ugd291bGQgb25seQotCQkgKiBydW4gaW4gYSB3b3JrZXIgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB4IG51bWJlcgotCQkgKiBvZiBvdXRib3VuZCBjb21wbGV0aW9ucyBvbiB0aGUgcXVldWUgYW5kIG1vcmUKLQkJICogdGhhbiBvbmUgcXVldWUgYWN0aXZlLiAgU29tZSB0aHJlc2hvbGQgdGhhdAotCQkgKiB3b3VsZCBpbmRpY2F0ZSBhIGJlbmVmaXQgaW4gc3BpdGUgb2YgdGhlIGNvc3QKLQkJICogb2YgYSBjb250ZXh0IHN3aXRjaC4KLQkJICogSWYgdGhlcmUncyBtb3JlIHRoYW4gb25lIGludGVycnVwdCwgdGhlbiB0aGUKLQkJICogb3V0Ym91bmQgY29tcGxldGlvbnMgYXJlIHByb2Nlc3NlZCBpbiB0aGUgSVNSLgotCQkgKi8KLQkJaWYgKCF0ZXN0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncykpCi0JCQlJTklUX0RFTEFZRURfV09SSygmcnhfcmluZy0+cnhfd29yaywgcWxfdHhfY2xlYW4pOwotCQllbHNlIHsKLQkJCS8qIFdpdGggYWxsIGRlYnVnIHdhcm5pbmdzIG9uIHdlIHNlZSBhIFdBUk5fT04gbWVzc2FnZQotCQkJICogd2hlbiB3ZSBmcmVlIHRoZSBza2IgaW4gdGhlIGludGVycnVwdCBjb250ZXh0LgotCQkJICovCi0JCQlJTklUX0RFTEFZRURfV09SSygmcnhfcmluZy0+cnhfd29yaywgcWxfdHhfY2xlYW4pOwotCQl9CiAJCWNxaWNiLT5pcnFfZGVsYXkgPSBjcHVfdG9fbGUxNihxZGV2LT50eF9jb2FsZXNjZV91c2Vjcyk7CiAJCWNxaWNiLT5wa3RfZGVsYXkgPSBjcHVfdG9fbGUxNihxZGV2LT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyk7CiAJCWJyZWFrOwotCWNhc2UgREVGQVVMVF9ROgotCQlJTklUX0RFTEFZRURfV09SSygmcnhfcmluZy0+cnhfd29yaywgcWxfcnhfY2xlYW4pOwotCQljcWljYi0+aXJxX2RlbGF5ID0gMDsKLQkJY3FpY2ItPnBrdF9kZWxheSA9IDA7Ci0JCWJyZWFrOwogCWNhc2UgUlhfUToKIAkJLyogSW5ib3VuZCBjb21wbGV0aW9uIGhhbmRsaW5nIHJ4X3JpbmdzIHJ1biBpbgogCQkgKiBzZXBhcmF0ZSBOQVBJIGNvbnRleHRzLgpAQCAtMjgxOCwxNyArMjc2MywyMCBAQAogCX0KIH0KIAorLyogV2Ugc3RhcnQgYnkgdHJ5aW5nIHRvIGdldCB0aGUgbnVtYmVyIG9mIHZlY3RvcnMKKyAqIHN0b3JlZCBpbiBxZGV2LT5pbnRyX2NvdW50LiBJZiB3ZSBkb24ndCBnZXQgdGhhdAorICogbWFueSB0aGVuIHdlIHJlZHVjZSB0aGUgY291bnQgYW5kIHRyeSBhZ2Fpbi4KKyAqLwogc3RhdGljIHZvaWQgcWxfZW5hYmxlX21zaXgoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7Ci0JaW50IGk7CisJaW50IGksIGVycjsKIAotCXFkZXYtPmludHJfY291bnQgPSAxOwogCS8qIEdldCB0aGUgTVNJWCB2ZWN0b3JzLiAqLwogCWlmIChpcnFfdHlwZSA9PSBNU0lYX0lSUSkgewogCQkvKiBUcnkgdG8gYWxsb2Mgc3BhY2UgZm9yIHRoZSBtc2l4IHN0cnVjdCwKIAkJICogaWYgaXQgZmFpbHMgdGhlbiBnbyB0byBNU0kvbGVnYWN5LgogCQkgKi8KLQkJcWRldi0+bXNpX3hfZW50cnkgPSBrY2FsbG9jKHFkZXYtPnJ4X3JpbmdfY291bnQsCisJCXFkZXYtPm1zaV94X2VudHJ5ID0ga2NhbGxvYyhxZGV2LT5pbnRyX2NvdW50LAogCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtc2l4X2VudHJ5KSwKIAkJCQkJICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIXFkZXYtPm1zaV94X2VudHJ5KSB7CkBAIC0yODM2LDI2ICsyNzg0LDM2IEBACiAJCQlnb3RvIG1zaTsKIAkJfQogCi0JCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5pbnRyX2NvdW50OyBpKyspCiAJCQlxZGV2LT5tc2lfeF9lbnRyeVtpXS5lbnRyeSA9IGk7CiAKLQkJaWYgKCFwY2lfZW5hYmxlX21zaXgKLQkJICAgIChxZGV2LT5wZGV2LCBxZGV2LT5tc2lfeF9lbnRyeSwgcWRldi0+cnhfcmluZ19jb3VudCkpIHsKLQkJCXNldF9iaXQoUUxfTVNJWF9FTkFCTEVELCAmcWRldi0+ZmxhZ3MpOwotCQkJcWRldi0+aW50cl9jb3VudCA9IHFkZXYtPnJ4X3JpbmdfY291bnQ7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAotCQkJCSJNU0ktWCBFbmFibGVkLCBnb3QgJWQgdmVjdG9ycy5cbiIsCi0JCQkJcWRldi0+aW50cl9jb3VudCk7Ci0JCQlyZXR1cm47Ci0JCX0gZWxzZSB7CisJCS8qIExvb3AgdG8gZ2V0IG91ciB2ZWN0b3JzLiAgV2Ugc3RhcnQgd2l0aAorCQkgKiB3aGF0IHdlIHdhbnQgYW5kIHNldHRsZSBmb3Igd2hhdCB3ZSBnZXQuCisJCSAqLworCQlkbyB7CisJCQllcnIgPSBwY2lfZW5hYmxlX21zaXgocWRldi0+cGRldiwKKwkJCQlxZGV2LT5tc2lfeF9lbnRyeSwgcWRldi0+aW50cl9jb3VudCk7CisJCQlpZiAoZXJyID4gMCkKKwkJCQlxZGV2LT5pbnRyX2NvdW50ID0gZXJyOworCQl9IHdoaWxlIChlcnIgPiAwKTsKKworCQlpZiAoZXJyIDwgMCkgewogCQkJa2ZyZWUocWRldi0+bXNpX3hfZW50cnkpOwogCQkJcWRldi0+bXNpX3hfZW50cnkgPSBOVUxMOwogCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBXQVJOSU5HLAogCQkJCSJNU0ktWCBFbmFibGUgZmFpbGVkLCB0cnlpbmcgTVNJLlxuIik7CisJCQlxZGV2LT5pbnRyX2NvdW50ID0gMTsKIAkJCWlycV90eXBlID0gTVNJX0lSUTsKKwkJfSBlbHNlIGlmIChlcnIgPT0gMCkgeworCQkJc2V0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncyk7CisJCQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sCisJCQkJIk1TSS1YIEVuYWJsZWQsIGdvdCAlZCB2ZWN0b3JzLlxuIiwKKwkJCQlxZGV2LT5pbnRyX2NvdW50KTsKKwkJCXJldHVybjsKIAkJfQogCX0KIG1zaToKKwlxZGV2LT5pbnRyX2NvdW50ID0gMTsKIAlpZiAoaXJxX3R5cGUgPT0gTVNJX0lSUSkgewogCQlpZiAoIXBjaV9lbmFibGVfbXNpKHFkZXYtPnBkZXYpKSB7CiAJCQlzZXRfYml0KFFMX01TSV9FTkFCTEVELCAmcWRldi0+ZmxhZ3MpOwpAQCAtMjg2OCw2ICsyODI2LDcxIEBACiAJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIlJ1bm5pbmcgd2l0aCBsZWdhY3kgaW50ZXJydXB0cy5cbiIpOwogfQogCisvKiBFYWNoIHZlY3RvciBzZXJ2aWNlcyAxIFJTUyByaW5nIGFuZCBhbmQgMSBvciBtb3JlCisgKiBUWCBjb21wbGV0aW9uIHJpbmdzLiAgVGhpcyBmdW5jdGlvbiBsb29wcyB0aHJvdWdoCisgKiB0aGUgVFggY29tcGxldGlvbiByaW5ncyBhbmQgYXNzaWducyB0aGUgdmVjdG9yIHRoYXQKKyAqIHdpbGwgc2VydmljZSBpdC4gIEFuIGV4YW1wbGUgd291bGQgYmUgaWYgdGhlcmUgYXJlCisgKiAyIHZlY3RvcnMgKHNvIDIgUlNTIHJpbmdzKSBhbmQgOCBUWCBjb21wbGV0aW9uIHJpbmdzLgorICogVGhpcyB3b3VsZCBtZWFuIHRoYXQgdmVjdG9yIDAgd291bGQgc2VydmljZSBSU1MgcmluZyAwCisgKiBhbmQgVFggY29tcGV0aW9uIHJpbmdzIDAsMSwyIGFuZCAzLiAgVmVjdG9yIDEgd291bGQKKyAqIHNlcnZpY2UgUlNTIHJpbmcgMSBhbmQgVFggY29tcGxldGlvbiByaW5ncyA0LDUsNiBhbmQgNy4KKyAqLworc3RhdGljIHZvaWQgcWxfc2V0X3R4X3ZlY3Qoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IGksIGosIHZlY3Q7CisJdTMyIHR4X3JpbmdzX3Blcl92ZWN0b3IgPSBxZGV2LT50eF9yaW5nX2NvdW50IC8gcWRldi0+aW50cl9jb3VudDsKKworCWlmIChsaWtlbHkodGVzdF9iaXQoUUxfTVNJWF9FTkFCTEVELCAmcWRldi0+ZmxhZ3MpKSkgeworCQkvKiBBc3NpZ24gaXJxIHZlY3RvcnMgdG8gVFggcnhfcmluZ3MuKi8KKwkJZm9yICh2ZWN0ID0gMCwgaiA9IDAsIGkgPSBxZGV2LT5yc3NfcmluZ19jb3VudDsKKwkJCQkJIGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspIHsKKwkJCWlmIChqID09IHR4X3JpbmdzX3Blcl92ZWN0b3IpIHsKKwkJCQl2ZWN0Kys7CisJCQkJaiA9IDA7CisJCQl9CisJCQlxZGV2LT5yeF9yaW5nW2ldLmlycSA9IHZlY3Q7CisJCQlqKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGb3Igc2luZ2xlIHZlY3RvciBhbGwgcmluZ3MgaGF2ZSBhbiBpcnEKKwkJICogb2YgemVyby4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspCisJCQlxZGV2LT5yeF9yaW5nW2ldLmlycSA9IDA7CisJfQorfQorCisvKiBTZXQgdGhlIGludGVycnVwdCBtYXNrIGZvciB0aGlzIHZlY3Rvci4gIEVhY2ggdmVjdG9yCisgKiB3aWxsIHNlcnZpY2UgMSBSU1MgcmluZyBhbmQgMSBvciBtb3JlIFRYIGNvbXBsZXRpb24KKyAqIHJpbmdzLiAgVGhpcyBmdW5jdGlvbiBzZXRzIHVwIGEgYml0IG1hc2sgcGVyIHZlY3RvcgorICogdGhhdCBpbmRpY2F0ZXMgd2hpY2ggcmluZ3MgaXQgc2VydmljZXMuCisgKi8KK3N0YXRpYyB2b2lkIHFsX3NldF9pcnFfbWFzayhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgc3RydWN0IGludHJfY29udGV4dCAqY3R4KQoreworCWludCBqLCB2ZWN0ID0gY3R4LT5pbnRyOworCXUzMiB0eF9yaW5nc19wZXJfdmVjdG9yID0gcWRldi0+dHhfcmluZ19jb3VudCAvIHFkZXYtPmludHJfY291bnQ7CisKKwlpZiAobGlrZWx5KHRlc3RfYml0KFFMX01TSVhfRU5BQkxFRCwgJnFkZXYtPmZsYWdzKSkpIHsKKwkJLyogQWRkIHRoZSBSU1MgcmluZyBzZXJ2aWNlZCBieSB0aGlzIHZlY3RvcgorCQkgKiB0byB0aGUgbWFzay4KKwkJICovCisJCWN0eC0+aXJxX21hc2sgPSAoMSA8PCBxZGV2LT5yeF9yaW5nW3ZlY3RdLmNxX2lkKTsKKwkJLyogQWRkIHRoZSBUWCByaW5nKHMpIHNlcnZpY2VkIGJ5IHRoaXMgdmVjdG9yCisJCSAqIHRvIHRoZSBtYXNrLiAqLworCQlmb3IgKGogPSAwOyBqIDwgdHhfcmluZ3NfcGVyX3ZlY3RvcjsgaisrKSB7CisJCQljdHgtPmlycV9tYXNrIHw9CisJCQkoMSA8PCBxZGV2LT5yeF9yaW5nW3FkZXYtPnJzc19yaW5nX2NvdW50ICsKKwkJCSh2ZWN0ICogdHhfcmluZ3NfcGVyX3ZlY3RvcikgKyBqXS5jcV9pZCk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGb3Igc2luZ2xlIHZlY3RvciB3ZSBqdXN0IHNoaWZ0IGVhY2ggcXVldWUncworCQkgKiBJRCBpbnRvIHRoZSBtYXNrLgorCQkgKi8KKwkJZm9yIChqID0gMDsgaiA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGorKykKKwkJCWN0eC0+aXJxX21hc2sgfD0gKDEgPDwgcWRldi0+cnhfcmluZ1tqXS5jcV9pZCk7CisJfQorfQorCiAvKgogICogSGVyZSB3ZSBidWlsZCB0aGUgaW50cl9jb250ZXh0IHN0cnVjdHVyZXMgYmFzZWQgb24KICAqIG91ciByeF9yaW5nIGNvdW50IGFuZCBpbnRyIHZlY3RvciBjb3VudC4KQEAgLTI4NzksMTggKzI5MDIsMTkgQEAKIAlpbnQgaSA9IDA7CiAJc3RydWN0IGludHJfY29udGV4dCAqaW50cl9jb250ZXh0ID0gJnFkZXYtPmludHJfY29udGV4dFswXTsKIAotCXFsX2VuYWJsZV9tc2l4KHFkZXYpOwotCiAJaWYgKGxpa2VseSh0ZXN0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncykpKSB7CiAJCS8qIEVhY2ggcnhfcmluZyBoYXMgaXQncwogCQkgKiBvd24gaW50cl9jb250ZXh0IHNpbmNlIHdlIGhhdmUgc2VwYXJhdGUKIAkJICogdmVjdG9ycyBmb3IgZWFjaCBxdWV1ZS4KLQkJICogVGhpcyBvbmx5IHRydWUgd2hlbiBNU0ktWCBpcyBlbmFibGVkLgogCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IHFkZXYtPmludHJfY291bnQ7IGkrKywgaW50cl9jb250ZXh0KyspIHsKIAkJCXFkZXYtPnJ4X3JpbmdbaV0uaXJxID0gaTsKIAkJCWludHJfY29udGV4dC0+aW50ciA9IGk7CiAJCQlpbnRyX2NvbnRleHQtPnFkZXYgPSBxZGV2OworCQkJLyogU2V0IHVwIHRoaXMgdmVjdG9yJ3MgYml0LW1hc2sgdGhhdCBpbmRpY2F0ZXMKKwkJCSAqIHdoaWNoIHF1ZXVlcyBpdCBzZXJ2aWNlcy4KKwkJCSAqLworCQkJcWxfc2V0X2lycV9tYXNrKHFkZXYsIGludHJfY29udGV4dCk7CiAJCQkvKgogCQkJICogV2Ugc2V0IHVwIGVhY2ggdmVjdG9ycyBlbmFibGUvZGlzYWJsZS9yZWFkIGJpdHMgc28KIAkJCSAqIHRoZXJlJ3Mgbm8gYml0L21hc2sgY2FsY3VsYXRpb25zIGluIHRoZSBjcml0aWNhbCBwYXRoLgpAQCAtMjkwNywyMSArMjkzMSwxNCBAQAogCQkJICAgIElOVFJfRU5fVFlQRV9NQVNLIHwgSU5UUl9FTl9JTlRSX01BU0sgfAogCQkJICAgIElOVFJfRU5fVFlQRV9SRUFEIHwgSU5UUl9FTl9JSERfTUFTSyB8IElOVFJfRU5fSUhEIHwKIAkJCSAgICBpOwotCiAJCQlpZiAoaSA9PSAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBEZWZhdWx0IHF1ZXVlIGhhbmRsZXMgYmNhc3QvbWNhc3QgcGx1cwotCQkJCSAqIGFzeW5jIGV2ZW50cy4gIE5lZWRzIGJ1ZmZlcnMuCisJCQkJLyogVGhlIGZpcnN0IHZlY3Rvci9xdWV1ZSBoYW5kbGVzCisJCQkJICogYnJvYWRjYXN0L211bHRpY2FzdCwgZmF0YWwgZXJyb3JzLAorCQkJCSAqIGFuZCBmaXJtd2FyZSBldmVudHMuICBUaGlzIGluIGFkZGl0aW9uCisJCQkJICogdG8gbm9ybWFsIGluYm91bmQgTkFQSSBwcm9jZXNzaW5nLgogCQkJCSAqLwogCQkJCWludHJfY29udGV4dC0+aGFuZGxlciA9IHFsZ2VfaXNyOwotCQkJCXNwcmludGYoaW50cl9jb250ZXh0LT5uYW1lLCAiJXMtZGVmYXVsdC1xdWV1ZSIsCi0JCQkJCXFkZXYtPm5kZXYtPm5hbWUpOwotCQkJfSBlbHNlIGlmIChpIDwgcWRldi0+cnNzX3JpbmdfZmlyc3RfY3FfaWQpIHsKLQkJCQkvKgotCQkJCSAqIE91dGJvdW5kIHF1ZXVlIGlzIGZvciBvdXRib3VuZCBjb21wbGV0aW9ucyBvbmx5LgotCQkJCSAqLwotCQkJCWludHJfY29udGV4dC0+aGFuZGxlciA9IHFsZ2VfbXNpeF90eF9pc3I7Ci0JCQkJc3ByaW50ZihpbnRyX2NvbnRleHQtPm5hbWUsICIlcy10eC0lZCIsCisJCQkJc3ByaW50ZihpbnRyX2NvbnRleHQtPm5hbWUsICIlcy1yeC0lZCIsCiAJCQkJCXFkZXYtPm5kZXYtPm5hbWUsIGkpOwogCQkJfSBlbHNlIHsKIAkJCQkvKgpAQCAtMjk1NSw5ICsyOTcyLDE3IEBACiAJCSAqLwogCQlpbnRyX2NvbnRleHQtPmhhbmRsZXIgPSBxbGdlX2lzcjsKIAkJc3ByaW50ZihpbnRyX2NvbnRleHQtPm5hbWUsICIlcy1zaW5nbGVfaXJxIiwgcWRldi0+bmRldi0+bmFtZSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspCi0JCQlxZGV2LT5yeF9yaW5nW2ldLmlycSA9IDA7CisJCS8qIFNldCB1cCB0aGlzIHZlY3RvcidzIGJpdC1tYXNrIHRoYXQgaW5kaWNhdGVzCisJCSAqIHdoaWNoIHF1ZXVlcyBpdCBzZXJ2aWNlcy4gSW4gdGhpcyBjYXNlIHRoZXJlIGlzCisJCSAqIGEgc2luZ2xlIHZlY3RvciBzbyBpdCB3aWxsIHNlcnZpY2UgYWxsIFJTUyBhbmQKKwkJICogVFggY29tcGxldGlvbiByaW5ncy4KKwkJICovCisJCXFsX3NldF9pcnFfbWFzayhxZGV2LCBpbnRyX2NvbnRleHQpOwogCX0KKwkvKiBUZWxsIHRoZSBUWCBjb21wbGV0aW9uIHJpbmdzIHdoaWNoIE1TSXggdmVjdG9yCisJICogdGhleSB3aWxsIGJlIHVzaW5nLgorCSAqLworCXFsX3NldF90eF92ZWN0KHFkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBxbF9mcmVlX2lycShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKQEAgLTMwNjIsNyArMzA4Nyw3IEBACiAKIAltZW1zZXQoKHZvaWQgKilyaWNiLCAwLCBzaXplb2YoKnJpY2IpKTsKIAotCXJpY2ItPmJhc2VfY3EgPSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCB8IFJTU19MNEs7CisJcmljYi0+YmFzZV9jcSA9IFJTU19MNEs7CiAJcmljYi0+ZmxhZ3MgPQogCSAgICAoUlNTX0w2SyB8IFJTU19MSSB8IFJTU19MQiB8IFJTU19MTSB8IFJTU19SSTQgfCBSU1NfUkk2IHwgUlNTX1JUNCB8CiAJICAgICBSU1NfUlQ2KTsKQEAgLTMyNjQsNyArMzI4OSw3IEBACiAJfQogCiAJLyogU3RhcnQgTkFQSSBmb3IgdGhlIFJTUyBxdWV1ZXMuICovCi0JZm9yIChpID0gcWRldi0+cnNzX3JpbmdfZmlyc3RfY3FfaWQ7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcWRldi0+cnNzX3JpbmdfY291bnQ7IGkrKykgewogCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiRW5hYmxpbmcgTkFQSSBmb3IgcnhfcmluZ1slZF0uXG4iLAogCQkJaSk7CiAJCW5hcGlfZW5hYmxlKCZxZGV2LT5yeF9yaW5nW2ldLm5hcGkpOwpAQCAtMzMyNiw3ICszMzUxLDYgQEAKIHN0YXRpYyBpbnQgcWxfYWRhcHRlcl9kb3duKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewogCWludCBpLCBzdGF0dXMgPSAwOwotCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nOwogCiAJcWxfbGlua19vZmYocWRldik7CiAKQEAgLTMzNDAsMjcgKzMzNjQsOCBAQAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX2lkY193b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrKTsKIAotCS8qIFRoZSBkZWZhdWx0IHF1ZXVlIGF0IGluZGV4IDAgaXMgYWx3YXlzIHByb2Nlc3NlZCBpbgotCSAqIGEgd29ya3F1ZXVlLgotCSAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+cnhfcmluZ1swXS5yeF93b3JrKTsKLQotCS8qIFRoZSByZXN0IG9mIHRoZSByeF9yaW5ncyBhcmUgcHJvY2Vzc2VkIGluCi0JICogYSB3b3JrcXVldWUgb25seSBpZiBpdCdzIGEgc2luZ2xlIGludGVycnVwdAotCSAqIGVudmlyb25tZW50IChNU0kvTGVnYWN5KS4KLQkgKi8KLQlmb3IgKGkgPSAxOyBpIDwgcWRldi0+cnhfcmluZ19jb3VudDsgaSsrKSB7Ci0JCXJ4X3JpbmcgPSAmcWRldi0+cnhfcmluZ1tpXTsKLQkJLyogT25seSB0aGUgUlNTIHJpbmdzIHVzZSBOQVBJIG9uIG11bHRpIGlycQotCQkgKiBlbnZpcm9ubWVudC4gIE91dGJvdW5kIGNvbXBsZXRpb24gcHJvY2Vzc2luZwotCQkgKiBpcyBkb25lIGluIGludGVycnVwdCBjb250ZXh0LgotCQkgKi8KLQkJaWYgKGkgPj0gcWRldi0+cnNzX3JpbmdfZmlyc3RfY3FfaWQpIHsKLQkJCW5hcGlfZGlzYWJsZSgmcnhfcmluZy0+bmFwaSk7Ci0JCX0gZWxzZSB7Ci0JCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJ4X3JpbmctPnJ4X3dvcmspOwotCQl9Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yc3NfcmluZ19jb3VudDsgaSsrKQorCQluYXBpX2Rpc2FibGUoJnFkZXYtPnJ4X3JpbmdbaV0ubmFwaSk7CiAKIAljbGVhcl9iaXQoUUxfQURBUFRFUl9VUCwgJnFkZXYtPmZsYWdzKTsKIApAQCAtMzM3MCw3ICszMzc1LDcgQEAKIAogCS8qIENhbGwgbmV0aWZfbmFwaV9kZWwoKSBmcm9tIGNvbW1vbiBwb2ludC4KIAkgKi8KLQlmb3IgKGkgPSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgcWRldi0+cnNzX3JpbmdfY291bnQ7IGkrKykKIAkJbmV0aWZfbmFwaV9kZWwoJnFkZXYtPnJ4X3JpbmdbaV0ubmFwaSk7CiAKIAlxbF9mcmVlX3J4X2J1ZmZlcnMocWRldik7CkBAIC0zNDQ5LDQzICszNDU0LDIxIEBACiAJaW50IGk7CiAJc3RydWN0IHJ4X3JpbmcgKnJ4X3Jpbmc7CiAJc3RydWN0IHR4X3JpbmcgKnR4X3Jpbmc7Ci0JaW50IGNwdV9jbnQgPSBudW1fb25saW5lX2NwdXMoKTsKKwlpbnQgY3B1X2NudCA9IG1pbihNQVhfQ1BVUywgKGludCludW1fb25saW5lX2NwdXMoKSk7CiAKLQkvKgotCSAqIEZvciBlYWNoIHByb2Nlc3NvciBwcmVzZW50IHdlIGFsbG9jYXRlIG9uZQotCSAqIHJ4X3JpbmcgZm9yIG91dGJvdW5kIGNvbXBsZXRpb25zLCBhbmQgb25lCi0JICogcnhfcmluZyBmb3IgaW5ib3VuZCBjb21wbGV0aW9ucy4gIFBsdXMgdGhlcmUgaXMKLQkgKiBhbHdheXMgdGhlIG9uZSBkZWZhdWx0IHF1ZXVlLiAgRm9yIHRoZSBDUFUKLQkgKiBjb3VudHMgd2UgZW5kIHVwIHdpdGggdGhlIGZvbGxvd2luZyByeF9yaW5nczoKLQkgKiByeF9yaW5nIGNvdW50ID0KLQkgKiAgb25lIGRlZmF1bHQgcXVldWUgKwotCSAqICAoQ1BVIGNvdW50ICogb3V0Ym91bmQgY29tcGxldGlvbiByeF9yaW5nKSArCi0JICogIChDUFUgY291bnQgKiBpbmJvdW5kIChSU1MpIGNvbXBsZXRpb24gcnhfcmluZykKLQkgKiBUbyBrZWVwIGl0IHNpbXBsZSB3ZSBsaW1pdCB0aGUgdG90YWwgbnVtYmVyIG9mCi0JICogcXVldWVzIHRvIDwgMzIsIHNvIHdlIHRydW5jYXRlIENQVSB0byA4LgotCSAqIFRoaXMgbGltaXRhdGlvbiBjYW4gYmUgcmVtb3ZlZCB3aGVuIHJlcXVlc3RlZC4KKwkvKiBJbiBhIHBlcmZlY3Qgd29ybGQgd2UgaGF2ZSBvbmUgUlNTIHJpbmcgZm9yIGVhY2ggQ1BVCisJICogYW5kIGVhY2ggaGFzIGl0J3Mgb3duIHZlY3Rvci4gIFRvIGRvIHRoYXQgd2UgYXNrIGZvcgorCSAqIGNwdV9jbnQgdmVjdG9ycy4gIHFsX2VuYWJsZV9tc2l4KCkgd2lsbCBhZGp1c3QgdGhlCisJICogdmVjdG9yIGNvdW50IHRvIHdoYXQgd2UgYWN0dWFsbHkgZ2V0LiAgV2UgdGhlbgorCSAqIGFsbG9jYXRlIGFuIFJTUyByaW5nIGZvciBlYWNoLgorCSAqIEVzc2VudGlhbGx5LCB3ZSBhcmUgZG9pbmcgbWluKGNwdV9jb3VudCwgbXNpeF92ZWN0b3JfY291bnQpLgogCSAqLwotCi0JaWYgKGNwdV9jbnQgPiBNQVhfQ1BVUykKLQkJY3B1X2NudCA9IE1BWF9DUFVTOwotCi0JLyoKLQkgKiByeF9yaW5nWzBdIGlzIGFsd2F5cyB0aGUgZGVmYXVsdCBxdWV1ZS4KLQkgKi8KLQkvKiBBbGxvY2F0ZSBvdXRib3VuZCBjb21wbGV0aW9uIHJpbmcgZm9yIGVhY2ggQ1BVLiAqLworCXFkZXYtPmludHJfY291bnQgPSBjcHVfY250OworCXFsX2VuYWJsZV9tc2l4KHFkZXYpOworCS8qIEFkanVzdCB0aGUgUlNTIHJpbmcgY291bnQgdG8gdGhlIGFjdHVhbCB2ZWN0b3IgY291bnQuICovCisJcWRldi0+cnNzX3JpbmdfY291bnQgPSBxZGV2LT5pbnRyX2NvdW50OwogCXFkZXYtPnR4X3JpbmdfY291bnQgPSBjcHVfY250OwotCS8qIEFsbG9jYXRlIGluYm91bmQgY29tcGxldGlvbiAoUlNTKSByaW5nIGZvciBlYWNoIENQVS4gKi8KLQlxZGV2LT5yc3NfcmluZ19jb3VudCA9IGNwdV9jbnQ7Ci0JLyogY3FfaWQgZm9yIHRoZSBmaXJzdCBpbmJvdW5kIHJpbmcgaGFuZGxlci4gKi8KLQlxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCA9IGNwdV9jbnQgKyAxOwotCS8qCi0JICogcWRldi0+cnhfcmluZ19jb3VudDoKLQkgKiBUb3RhbCBudW1iZXIgb2YgcnhfcmluZ3MuICBUaGlzIGluY2x1ZGVzIHRoZSBvbmUKLQkgKiBkZWZhdWx0IHF1ZXVlLCBhIG51bWJlciBvZiBvdXRib3VuZCBjb21wbGV0aW9uCi0JICogaGFuZGxlciByeF9yaW5ncywgYW5kIHRoZSBudW1iZXIgb2YgaW5ib3VuZAotCSAqIGNvbXBsZXRpb24gaGFuZGxlciByeF9yaW5ncy4KLQkgKi8KLQlxZGV2LT5yeF9yaW5nX2NvdW50ID0gcWRldi0+dHhfcmluZ19jb3VudCArIHFkZXYtPnJzc19yaW5nX2NvdW50ICsgMTsKKwlxZGV2LT5yeF9yaW5nX2NvdW50ID0gcWRldi0+dHhfcmluZ19jb3VudCArIHFkZXYtPnJzc19yaW5nX2NvdW50OwogCiAJZm9yIChpID0gMDsgaSA8IHFkZXYtPnR4X3JpbmdfY291bnQ7IGkrKykgewogCQl0eF9yaW5nID0gJnFkZXYtPnR4X3JpbmdbaV07CkBAIC0zNDk4LDkgKzM0ODEsOSBAQAogCiAJCS8qCiAJCSAqIFRoZSBjb21wbGV0aW9uIHF1ZXVlIElEIGZvciB0aGUgdHggcmluZ3Mgc3RhcnQKLQkJICogaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGRlZmF1bHQgUSBJRCwgd2hpY2ggaXMgemVyby4KKwkJICogaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHJzcyByaW5ncy4KIAkJICovCi0JCXR4X3JpbmctPmNxX2lkID0gaSArIDE7CisJCXR4X3JpbmctPmNxX2lkID0gcWRldi0+cnNzX3JpbmdfY291bnQgKyBpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspIHsKQEAgLTM1MDksMTAgKzM0OTIsOSBAQAogCQlyeF9yaW5nLT5xZGV2ID0gcWRldjsKIAkJcnhfcmluZy0+Y3FfaWQgPSBpOwogCQlyeF9yaW5nLT5jcHUgPSBpICUgY3B1X2NudDsJLyogQ1BVIHRvIHJ1biBoYW5kbGVyIG9uLiAqLwotCQlpZiAoaSA9PSAwKSB7CS8qIERlZmF1bHQgcXVldWUgYXQgaW5kZXggMC4gKi8KKwkJaWYgKGkgPCBxZGV2LT5yc3NfcmluZ19jb3VudCkgewogCQkJLyoKLQkJCSAqIERlZmF1bHQgcXVldWUgaGFuZGxlcyBiY2FzdC9tY2FzdCBwbHVzCi0JCQkgKiBhc3luYyBldmVudHMuICBOZWVkcyBidWZmZXJzLgorCQkJICogSW5ib3VuZCAoUlNTKSBxdWV1ZXMuCiAJCQkgKi8KIAkJCXJ4X3JpbmctPmNxX2xlbiA9IHFkZXYtPnJ4X3Jpbmdfc2l6ZTsKIAkJCXJ4X3JpbmctPmNxX3NpemUgPQpAQCAtMzUyNSw4ICszNTA3LDggQEAKIAkJCXJ4X3JpbmctPnNicV9zaXplID0KIAkJCSAgICByeF9yaW5nLT5zYnFfbGVuICogc2l6ZW9mKF9fbGU2NCk7CiAJCQlyeF9yaW5nLT5zYnFfYnVmX3NpemUgPSBTTUFMTF9CVUZGRVJfU0laRSAqIDI7Ci0JCQlyeF9yaW5nLT50eXBlID0gREVGQVVMVF9ROwotCQl9IGVsc2UgaWYgKGkgPCBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCkgeworCQkJcnhfcmluZy0+dHlwZSA9IFJYX1E7CisJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogT3V0Ym91bmQgcXVldWUgaGFuZGxlcyBvdXRib3VuZCBjb21wbGV0aW9ucyBvbmx5LgogCQkJICovCkBAIC0zNTQxLDIyICszNTIzLDYgQEAKIAkJCXJ4X3JpbmctPnNicV9zaXplID0gMDsKIAkJCXJ4X3JpbmctPnNicV9idWZfc2l6ZSA9IDA7CiAJCQlyeF9yaW5nLT50eXBlID0gVFhfUTsKLQkJfSBlbHNlIHsJLyogSW5ib3VuZCBjb21wbGV0aW9ucyAoUlNTKSBxdWV1ZXMgKi8KLQkJCS8qCi0JCQkgKiBJbmJvdW5kIHF1ZXVlcyBoYW5kbGUgdW5pY2FzdCBmcmFtZXMgb25seS4KLQkJCSAqLwotCQkJcnhfcmluZy0+Y3FfbGVuID0gcWRldi0+cnhfcmluZ19zaXplOwotCQkJcnhfcmluZy0+Y3Ffc2l6ZSA9Ci0JCQkgICAgcnhfcmluZy0+Y3FfbGVuICogc2l6ZW9mKHN0cnVjdCBxbF9uZXRfcnNwX2lvY2IpOwotCQkJcnhfcmluZy0+bGJxX2xlbiA9IE5VTV9MQVJHRV9CVUZGRVJTOwotCQkJcnhfcmluZy0+bGJxX3NpemUgPQotCQkJICAgIHJ4X3JpbmctPmxicV9sZW4gKiBzaXplb2YoX19sZTY0KTsKLQkJCXJ4X3JpbmctPmxicV9idWZfc2l6ZSA9IExBUkdFX0JVRkZFUl9TSVpFOwotCQkJcnhfcmluZy0+c2JxX2xlbiA9IE5VTV9TTUFMTF9CVUZGRVJTOwotCQkJcnhfcmluZy0+c2JxX3NpemUgPQotCQkJICAgIHJ4X3JpbmctPnNicV9sZW4gKiBzaXplb2YoX19sZTY0KTsKLQkJCXJ4X3JpbmctPnNicV9idWZfc2l6ZSA9IFNNQUxMX0JVRkZFUl9TSVpFICogMjsKLQkJCXJ4X3JpbmctPnR5cGUgPSBSWF9ROwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMzg0NSwxMCArMzgxMSw3IEBACiAJCWRlc3Ryb3lfd29ya3F1ZXVlKHFkZXYtPndvcmtxdWV1ZSk7CiAJCXFkZXYtPndvcmtxdWV1ZSA9IE5VTEw7CiAJfQotCWlmIChxZGV2LT5xX3dvcmtxdWV1ZSkgewotCQlkZXN0cm95X3dvcmtxdWV1ZShxZGV2LT5xX3dvcmtxdWV1ZSk7Ci0JCXFkZXYtPnFfd29ya3F1ZXVlID0gTlVMTDsKLQl9CisKIAlpZiAocWRldi0+cmVnX2Jhc2UpCiAJCWlvdW5tYXAocWRldi0+cmVnX2Jhc2UpOwogCWlmIChxZGV2LT5kb29yYmVsbF9hcmVhKQpAQCAtMzk2MSw4ICszOTI0LDYgQEAKIAkgKiBTZXQgdXAgdGhlIG9wZXJhdGluZyBwYXJhbWV0ZXJzLgogCSAqLwogCXFkZXYtPnJ4X2NzdW0gPSAxOwotCi0JcWRldi0+cV93b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKG5kZXYtPm5hbWUpOwogCXFkZXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG5kZXYtPm5hbWUpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5hc2ljX3Jlc2V0X3dvcmssIHFsX2FzaWNfcmVzZXRfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9yZXNldF93b3JrLCBxbF9tcGlfcmVzZXRfd29yayk7CkBAIC00MDc2LDYgKzQwMzcsMTEgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTsKKworCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCiAJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpCiAJCXFsX2FkYXB0ZXJfZG93bihxZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjYwNDAuYyBiL2RyaXZlcnMvbmV0L3I2MDQwLmMKaW5kZXggOTYxYjUzOS4uN2RmY2I1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjYwNDAuYworKysgYi9kcml2ZXJzL25ldC9yNjA0MC5jCkBAIC00OSw4ICs0OSw4IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJyNjA0MCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMjQiCi0jZGVmaW5lIERSVl9SRUxEQVRFCSIwOEp1bDIwMDkiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjI1IgorI2RlZmluZSBEUlZfUkVMREFURQkiMjBBdWcyMDA5IgogCiAvKiBQSFkgQ0hJUCBBZGRyZXNzICovCiAjZGVmaW5lIFBIWTFfQUREUgkxCS8qIEZvciBNQUMxICovCkBAIC03NTAsMTQgKzc1MCw2IEBACiAJc3RydWN0IHI2MDQwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGxwLT5iYXNlOwogCWludCByZXQ7Ci0JdTE2IHZhbDsKLQotCS8qIENoZWNrIHByZXNlbmNlIG9mIGEgc2Vjb25kIFBIWSAqLwotCXZhbCA9IHI2MDQwX3BoeV9yZWFkKGlvYWRkciwgbHAtPnBoeV9hZGRyLCAyKTsKLQlpZiAodmFsID09IDB4RkZGRikgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIiBubyBzZWNvbmQgUEhZIGF0dGFjaGVkXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQogCiAJLyogSW5pdGlhbGlzZSBhbmQgYWxsb2MgUlgvVFggYnVmZmVycyAqLwogCXI2MDQwX2luaXRfdHhidWZzKGRldik7CkBAIC04OTEsMTMgKzg4MywxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHI2MDQwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCByNjA0MF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHI2MDQwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcjYwNDBfZGVzY3JpcHRvciAqZGVzY3B0cjsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGxwLT5iYXNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IE5FVERFVl9UWF9PSzsKIAogCS8qIENyaXRpY2FsIFNlY3Rpb24gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKQEAgLTkwNyw4ICs4OTksNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBubyB0eCBkZXNjcmlwdG9yXG4iKTsKLQkJcmV0ID0gTkVUREVWX1RYX0JVU1k7Ci0JCXJldHVybiByZXQ7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKIAkvKiBTdGF0aXN0aWMgQ291bnRlciAqLwpAQCAtOTM2LDcgKzkyNyw4IEBACiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCByNjA0MF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTA5MSw3ICsxMDgzLDYgQEAKIAlpbnQgZXJyLCBpb19zaXplID0gUjYwNDBfSU9fU0laRTsKIAlzdGF0aWMgaW50IGNhcmRfaWR4ID0gLTE7CiAJaW50IGJhciA9IDA7Ci0JbG9uZyBwaW9hZGRyOwogCXUxNiAqYWRycDsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCB2ZXJzaW9uKTsKQEAgLTExMTUsMTMgKzExMDYsMTIgQEAKIAl9CiAKIAkvKiBJTyBTaXplIGNoZWNrICovCi0JaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkgPCBpb19zaXplKSB7CisJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSA8IGlvX3NpemUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IEluc3VmZmljaWVudCBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZ1xuIik7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlwaW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwkvKiBJTyBtYXAgYmFzZSBhZGRyZXNzICovCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHI2MDQwX3ByaXZhdGUpKTsKQEAgLTExOTYsNiArMTE4NiwxMyBAQAogCWxwLT5taWlfaWYucGh5X2lkX21hc2sgPSAweDFmOwogCWxwLT5taWlfaWYucmVnX251bV9tYXNrID0gMHgxZjsKIAorCS8qIENoZWNrIHRoZSB2ZW5kb3IgSUQgb24gdGhlIFBIWSwgaWYgMHhmZmZmIGFzc3VtZSBub25lIGF0dGFjaGVkICovCisJaWYgKHI2MDQwX3BoeV9yZWFkKGlvYWRkciwgbHAtPnBoeV9hZGRyLCAyKSA9PSAweGZmZmYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IEZhaWxlZCB0byBkZXRlY3QgYW4gYXR0YWNoZWQgUEhZXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfb3V0X3VubWFwOworCX0KKwogCS8qIFJlZ2lzdGVyIG5ldCBkZXZpY2UuIEFmdGVyIHRoaXMgZGV2LT5uYW1lIGFzc2lnbiAqLwogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IGI4Mjc4MGQuLjUwYzZhM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtNTA3LDcgKzUwNyw4IEBACiBNT0RVTEVfVkVSU0lPTihSVEw4MTY5X1ZFUlNJT04pOwogCiBzdGF0aWMgaW50IHJ0bDgxNjlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgcnRsODE2OV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHJ0bDgxNjlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CiBzdGF0aWMgaW50IHJ0bDgxNjlfaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTIyMiwxNyArMTIyMyw2IEBACiAJLmdldF9ldGh0b29sX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRodG9vbF9zdGF0cywKIH07CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjlfd3JpdGVfZ21paV9yZWdfYml0KHZvaWQgX19pb21lbSAqaW9hZGRyLCBpbnQgcmVnLAotCQkJCSAgICAgICBpbnQgYml0bnVtLCBpbnQgYml0dmFsKQotewotCWludCB2YWw7Ci0KLQl2YWwgPSBtZGlvX3JlYWQoaW9hZGRyLCByZWcpOwotCXZhbCA9IChiaXR2YWwgPT0gMSkgPwotCQl2YWwgfCAoYml0dmFsIDw8IGJpdG51bSkgOiAgdmFsICYgfigweDAwMDEgPDwgYml0bnVtKTsKLQltZGlvX3dyaXRlKGlvYWRkciwgcmVnLCB2YWwgJiAweGZmZmYpOwotfQotCiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9tYWNfdmVyc2lvbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKIAkJCQkgICAgdm9pZCBfX2lvbWVtICppb2FkZHIpCiB7CkBAIC0xMzI4LDU0ICsxMzE4LDY5IEBACiAKIHN0YXRpYyB2b2lkIHJ0bDgxNjlzX2h3X3BoeV9jb25maWcodm9pZCBfX2lvbWVtICppb2FkZHIpCiB7Ci0Jc3RydWN0IHsKLQkJdTE2IHJlZ3NbNV07IC8qIEJld2FyZSBvZiBiaXQtc2lnbiBwcm9wYWdhdGlvbiAqLwotCX0gcGh5X21hZ2ljWzVdID0geyB7Ci0JCXsgMHgwMDAwLAkvL3cgNCAxNSAxMiAwCi0JCSAgMHgwMGExLAkvL3cgMyAxNSAwIDAwYTEKLQkJICAweDAwMDgsCS8vdyAyIDE1IDAgMDAwOAotCQkgIDB4MTAyMCwJLy93IDEgMTUgMCAxMDIwCi0JCSAgMHgxMDAwIH0gfSx7CS8vdyAwIDE1IDAgMTAwMAotCQl7IDB4NzAwMCwJLy93IDQgMTUgMTIgNwotCQkgIDB4ZmY0MSwJLy93IDMgMTUgMCBmZjQxCi0JCSAgMHhkZTYwLAkvL3cgMiAxNSAwIGRlNjAKLQkJICAweDAxNDAsCS8vdyAxIDE1IDAgMDE0MAotCQkgIDB4MDA3NyB9IH0sewkvL3cgMCAxNSAwIDAwNzcKLQkJeyAweGEwMDAsCS8vdyA0IDE1IDEyIGEKLQkJICAweGRmMDEsCS8vdyAzIDE1IDAgZGYwMQotCQkgIDB4ZGYyMCwJLy93IDIgMTUgMCBkZjIwCi0JCSAgMHhmZjk1LAkvL3cgMSAxNSAwIGZmOTUKLQkJICAweGZhMDAgfSB9LHsJLy93IDAgMTUgMCBmYTAwCi0JCXsgMHhiMDAwLAkvL3cgNCAxNSAxMiBiCi0JCSAgMHhmZjQxLAkvL3cgMyAxNSAwIGZmNDEKLQkJICAweGRlMjAsCS8vdyAyIDE1IDAgZGUyMAotCQkgIDB4MDE0MCwJLy93IDEgMTUgMCAwMTQwCi0JCSAgMHgwMGJiIH0gfSx7CS8vdyAwIDE1IDAgMDBiYgotCQl7IDB4ZjAwMCwJLy93IDQgMTUgMTIgZgotCQkgIDB4ZGYwMSwJLy93IDMgMTUgMCBkZjAxCi0JCSAgMHhkZjIwLAkvL3cgMiAxNSAwIGRmMjAKLQkJICAweGZmOTUsCS8vdyAxIDE1IDAgZmY5NQotCQkgIDB4YmYwMCB9CS8vdyAwIDE1IDAgYmYwMAotCQl9Ci0JfSwgKnAgPSBwaHlfbWFnaWM7Ci0JdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0W10gPSB7CisJCXsgMHgxZiwgMHgwMDAxIH0sCisJCXsgMHgwNiwgMHgwMDZlIH0sCisJCXsgMHgwOCwgMHgwNzA4IH0sCisJCXsgMHgxNSwgMHg0MDAwIH0sCisJCXsgMHgxOCwgMHg2NWM3IH0sCiAKLQltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAxKTsJCS8vdyAzMSAyIDAgMQotCW1kaW9fd3JpdGUoaW9hZGRyLCAweDE1LCAweDEwMDApOwkJLy93IDIxIDE1IDAgMTAwMAotCW1kaW9fd3JpdGUoaW9hZGRyLCAweDE4LCAweDY1YzcpOwkJLy93IDI0IDE1IDAgNjVjNwotCXJ0bDgxNjlfd3JpdGVfZ21paV9yZWdfYml0KGlvYWRkciwgNCwgMTEsIDApOwkvL3cgNCAxMSAxMSAwCisJCXsgMHgxZiwgMHgwMDAxIH0sCisJCXsgMHgwMywgMHgwMGExIH0sCisJCXsgMHgwMiwgMHgwMDA4IH0sCisJCXsgMHgwMSwgMHgwMTIwIH0sCisJCXsgMHgwMCwgMHgxMDAwIH0sCisJCXsgMHgwNCwgMHgwODAwIH0sCisJCXsgMHgwNCwgMHgwMDAwIH0sCiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwaHlfbWFnaWMpOyBpKyssIHArKykgewotCQlpbnQgdmFsLCBwb3MgPSA0OworCQl7IDB4MDMsIDB4ZmY0MSB9LAorCQl7IDB4MDIsIDB4ZGY2MCB9LAorCQl7IDB4MDEsIDB4MDE0MCB9LAorCQl7IDB4MDAsIDB4MDA3NyB9LAorCQl7IDB4MDQsIDB4NzgwMCB9LAorCQl7IDB4MDQsIDB4NzAwMCB9LAogCi0JCXZhbCA9IChtZGlvX3JlYWQoaW9hZGRyLCBwb3MpICYgMHgwZmZmKSB8IChwLT5yZWdzWzBdICYgMHhmZmZmKTsKLQkJbWRpb193cml0ZShpb2FkZHIsIHBvcywgdmFsKTsKLQkJd2hpbGUgKC0tcG9zID49IDApCi0JCQltZGlvX3dyaXRlKGlvYWRkciwgcG9zLCBwLT5yZWdzWzQgLSBwb3NdICYgMHhmZmZmKTsKLQkJcnRsODE2OV93cml0ZV9nbWlpX3JlZ19iaXQoaW9hZGRyLCA0LCAxMSwgMSk7IC8vdyA0IDExIDExIDEKLQkJcnRsODE2OV93cml0ZV9nbWlpX3JlZ19iaXQoaW9hZGRyLCA0LCAxMSwgMCk7IC8vdyA0IDExIDExIDAKLQl9Ci0JbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMCk7IC8vdyAzMSAyIDAgMAorCQl7IDB4MDMsIDB4ODAyZiB9LAorCQl7IDB4MDIsIDB4NGYwMiB9LAorCQl7IDB4MDEsIDB4MDQwOSB9LAorCQl7IDB4MDAsIDB4ZjBmOSB9LAorCQl7IDB4MDQsIDB4OTgwMCB9LAorCQl7IDB4MDQsIDB4OTAwMCB9LAorCisJCXsgMHgwMywgMHhkZjAxIH0sCisJCXsgMHgwMiwgMHhkZjIwIH0sCisJCXsgMHgwMSwgMHhmZjk1IH0sCisJCXsgMHgwMCwgMHhiYTAwIH0sCisJCXsgMHgwNCwgMHhhODAwIH0sCisJCXsgMHgwNCwgMHhhMDAwIH0sCisKKwkJeyAweDAzLCAweGZmNDEgfSwKKwkJeyAweDAyLCAweGRmMjAgfSwKKwkJeyAweDAxLCAweDAxNDAgfSwKKwkJeyAweDAwLCAweDAwYmIgfSwKKwkJeyAweDA0LCAweGI4MDAgfSwKKwkJeyAweDA0LCAweGIwMDAgfSwKKworCQl7IDB4MDMsIDB4ZGY0MSB9LAorCQl7IDB4MDIsIDB4ZGM2MCB9LAorCQl7IDB4MDEsIDB4NjM0MCB9LAorCQl7IDB4MDAsIDB4MDA3ZCB9LAorCQl7IDB4MDQsIDB4ZDgwMCB9LAorCQl7IDB4MDQsIDB4ZDAwMCB9LAorCisJCXsgMHgwMywgMHhkZjAxIH0sCisJCXsgMHgwMiwgMHhkZjIwIH0sCisJCXsgMHgwMSwgMHgxMDBhIH0sCisJCXsgMHgwMCwgMHhhMGZmIH0sCisJCXsgMHgwNCwgMHhmODAwIH0sCisJCXsgMHgwNCwgMHhmMDAwIH0sCisKKwkJeyAweDFmLCAweDAwMDAgfSwKKwkJeyAweDBiLCAweDAwMDAgfSwKKwkJeyAweDAwLCAweDkyMDAgfQorCX07CisKKwlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5c2JfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKQEAgLTEzODksNiArMTM5NCwxMjQgQEAKIAlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOwogfQogCitzdGF0aWMgdm9pZCBydGw4MTY5c2NkX2h3X3BoeV9jb25maWdfcXVpcmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCisJCQkJCSAgIHZvaWQgX19pb21lbSAqaW9hZGRyKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtPnBjaV9kZXY7CisJdTE2IHZlbmRvcl9pZCwgZGV2aWNlX2lkOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsICZ2ZW5kb3JfaWQpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9TVUJTWVNURU1fSUQsICZkZXZpY2VfaWQpOworCisJaWYgKCh2ZW5kb3JfaWQgIT0gUENJX1ZFTkRPUl9JRF9HSUdBQllURSkgfHwgKGRldmljZV9pZCAhPSAweGUwMDApKQorCQlyZXR1cm47CisKKwltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAxKTsKKwltZGlvX3dyaXRlKGlvYWRkciwgMHgxMCwgMHhmMDFiKTsKKwltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAwKTsKK30KKworc3RhdGljIHZvaWQgcnRsODE2OXNjZF9od19waHlfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAorCQkJCSAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIpCit7CisJc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0W10gPSB7CisJCXsgMHgxZiwgMHgwMDAxIH0sCisJCXsgMHgwNCwgMHgwMDAwIH0sCisJCXsgMHgwMywgMHgwMGExIH0sCisJCXsgMHgwMiwgMHgwMDA4IH0sCisJCXsgMHgwMSwgMHgwMTIwIH0sCisJCXsgMHgwMCwgMHgxMDAwIH0sCisJCXsgMHgwNCwgMHgwODAwIH0sCisJCXsgMHgwNCwgMHg5MDAwIH0sCisJCXsgMHgwMywgMHg4MDJmIH0sCisJCXsgMHgwMiwgMHg0ZjAyIH0sCisJCXsgMHgwMSwgMHgwNDA5IH0sCisJCXsgMHgwMCwgMHhmMDk5IH0sCisJCXsgMHgwNCwgMHg5ODAwIH0sCisJCXsgMHgwNCwgMHhhMDAwIH0sCisJCXsgMHgwMywgMHhkZjAxIH0sCisJCXsgMHgwMiwgMHhkZjIwIH0sCisJCXsgMHgwMSwgMHhmZjk1IH0sCisJCXsgMHgwMCwgMHhiYTAwIH0sCisJCXsgMHgwNCwgMHhhODAwIH0sCisJCXsgMHgwNCwgMHhmMDAwIH0sCisJCXsgMHgwMywgMHhkZjAxIH0sCisJCXsgMHgwMiwgMHhkZjIwIH0sCisJCXsgMHgwMSwgMHgxMDFhIH0sCisJCXsgMHgwMCwgMHhhMGZmIH0sCisJCXsgMHgwNCwgMHhmODAwIH0sCisJCXsgMHgwNCwgMHgwMDAwIH0sCisJCXsgMHgxZiwgMHgwMDAwIH0sCisKKwkJeyAweDFmLCAweDAwMDEgfSwKKwkJeyAweDEwLCAweGY0MWIgfSwKKwkJeyAweDE0LCAweGZiNTQgfSwKKwkJeyAweDE4LCAweGY1YzcgfSwKKwkJeyAweDFmLCAweDAwMDAgfSwKKworCQl7IDB4MWYsIDB4MDAwMSB9LAorCQl7IDB4MTcsIDB4MGNjMCB9LAorCQl7IDB4MWYsIDB4MDAwMCB9CisJfTsKKworCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CisKKwlydGw4MTY5c2NkX2h3X3BoeV9jb25maWdfcXVpcmsodHAsIGlvYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxNjlzY2VfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKK3sKKwlzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKKwkJeyAweDFmLCAweDAwMDEgfSwKKwkJeyAweDA0LCAweDAwMDAgfSwKKwkJeyAweDAzLCAweDAwYTEgfSwKKwkJeyAweDAyLCAweDAwMDggfSwKKwkJeyAweDAxLCAweDAxMjAgfSwKKwkJeyAweDAwLCAweDEwMDAgfSwKKwkJeyAweDA0LCAweDA4MDAgfSwKKwkJeyAweDA0LCAweDkwMDAgfSwKKwkJeyAweDAzLCAweDgwMmYgfSwKKwkJeyAweDAyLCAweDRmMDIgfSwKKwkJeyAweDAxLCAweDA0MDkgfSwKKwkJeyAweDAwLCAweGYwOTkgfSwKKwkJeyAweDA0LCAweDk4MDAgfSwKKwkJeyAweDA0LCAweGEwMDAgfSwKKwkJeyAweDAzLCAweGRmMDEgfSwKKwkJeyAweDAyLCAweGRmMjAgfSwKKwkJeyAweDAxLCAweGZmOTUgfSwKKwkJeyAweDAwLCAweGJhMDAgfSwKKwkJeyAweDA0LCAweGE4MDAgfSwKKwkJeyAweDA0LCAweGYwMDAgfSwKKwkJeyAweDAzLCAweGRmMDEgfSwKKwkJeyAweDAyLCAweGRmMjAgfSwKKwkJeyAweDAxLCAweDEwMWEgfSwKKwkJeyAweDAwLCAweGEwZmYgfSwKKwkJeyAweDA0LCAweGY4MDAgfSwKKwkJeyAweDA0LCAweDAwMDAgfSwKKwkJeyAweDFmLCAweDAwMDAgfSwKKworCQl7IDB4MWYsIDB4MDAwMSB9LAorCQl7IDB4MGIsIDB4ODQ4MCB9LAorCQl7IDB4MWYsIDB4MDAwMCB9LAorCisJCXsgMHgxZiwgMHgwMDAxIH0sCisJCXsgMHgxOCwgMHg2N2M3IH0sCisJCXsgMHgwNCwgMHgyMDAwIH0sCisJCXsgMHgwMywgMHgwMDJmIH0sCisJCXsgMHgwMiwgMHg0MzYwIH0sCisJCXsgMHgwMSwgMHgwMTA5IH0sCisJCXsgMHgwMCwgMHgzMDIyIH0sCisJCXsgMHgwNCwgMHgyODAwIH0sCisJCXsgMHgxZiwgMHgwMDAwIH0sCisKKwkJeyAweDFmLCAweDAwMDEgfSwKKwkJeyAweDE3LCAweDBjYzAgfSwKKwkJeyAweDFmLCAweDAwMDAgfQorCX07CisKKwlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOworfQorCiBzdGF0aWMgdm9pZCBydGw4MTY4YmJfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKIHsKIAlzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKQEAgLTE2MDcsNiArMTczMCw3IEBACiAJbWRpb193cml0ZShpb2FkZHIsIDB4MWYsIDB4MDAwMCk7CiAJbWRpb19wYXRjaChpb2FkZHIsIDB4MTEsIDEgPDwgMTIpOwogCW1kaW9fcGF0Y2goaW9hZGRyLCAweDE5LCAxIDw8IDEzKTsKKwltZGlvX3BhdGNoKGlvYWRkciwgMHgxMCwgMSA8PCAxNSk7CiAKIAlydGxfcGh5X3dyaXRlKGlvYWRkciwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOwogfQpAQCAtMTYyOCw2ICsxNzUyLDEyIEBACiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzA0OgogCQlydGw4MTY5c2JfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOwogCQlicmVhazsKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMDU6CisJCXJ0bDgxNjlzY2RfaHdfcGh5X2NvbmZpZyh0cCwgaW9hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzA2OgorCQlydGw4MTY5c2NlX2h3X3BoeV9jb25maWcoaW9hZGRyKTsKKwkJYnJlYWs7CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzA3OgogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wODoKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMDk6CkBAIC0xODYxLDggKzE5OTEsNiBAQAogCQlyZXR1cm4gMDsKIAogCWNhc2UgU0lPQ1NNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07CiAJCW1kaW9fd3JpdGUodHAtPm1taW9fYWRkciwgZGF0YS0+cmVnX251bSAmIDB4MWYsIGRhdGEtPnZhbF9pbik7CiAJCXJldHVybiAwOwogCX0KQEAgLTIxODAsNyArMjMwOCw3IEBACiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkgewotCQl1MzIgeGlkID0gUlRMX1IzMihUeENvbmZpZykgJiAweDdjZjBmOGZmOworCQl1MzIgeGlkID0gUlRMX1IzMihUeENvbmZpZykgJiAweDljZjBmOGZmOwogCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBhdCAweCVseCwgIgogCQkgICAgICAgIiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4LCAiCkBAIC0yNzU3LDcgKzI4ODUsNyBAQAogCUVuYWJsZUJpc3QgfCBcCiAJTWFjX2RiZ29fb2UgfCBcCiAJRm9yY2VfaGFsZl9kdXAgfCBcCi0JRm9yY2VfaGFsZl9kdXAgfCBcCisJRm9yY2VfcnhmbG93X2VuIHwgXAogCUZvcmNlX3R4Zmxvd19lbiB8IFwKIAlDeHBsX2RiZ19zZWwgfCBcCiAJQVNGIHwgXApAQCAtMzIyOCw3ICszMzU2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBydGw4MTY5X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBydGw4MTY5X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgZnJhZ3MsIGVudHJ5ID0gdHAtPmN1cl90eCAlIE5VTV9UWF9ERVNDOwpAQCAtMzIzNyw3ICszMzY2LDYgQEAKIAlkbWFfYWRkcl90IG1hcHBpbmc7CiAJdTMyIHN0YXR1cywgbGVuOwogCXUzMiBvcHRzMTsKLQlpbnQgcmV0ID0gTkVUREVWX1RYX09LOwogCiAJaWYgKHVubGlrZWx5KFRYX0JVRkZTX0FWQUlMKHRwKSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpKSB7CiAJCWlmIChuZXRpZl9tc2dfZHJ2KHRwKSkgewpAQCAtMzI4OCwxNCArMzQxNiwxMiBAQAogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCX0KIAotb3V0OgotCXJldHVybiByZXQ7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogZXJyX3N0b3A6CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXJldCA9IE5FVERFVl9UWF9CVVNZOwogCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwotCWdvdG8gb3V0OworCXJldHVybiBORVRERVZfVFhfQlVTWTsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV9wY2llcnJfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yaW9uZXQuYyBiL2RyaXZlcnMvbmV0L3Jpb25ldC5jCmluZGV4IDg3MDJlN2EuLmJjOThlN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Jpb25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3Jpb25ldC5jCkBAIC0xMTQsMTEgKzExNCw2IEBACiAKIAkJaWYgKGVycm9yID09IE5FVF9SWF9EUk9QKSB7CiAJCQluZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCX0gZWxzZSBpZiAoZXJyb3IgPT0gTkVUX1JYX0JBRCkgewotCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIocm5ldCkpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGJhZCByeCBwYWNrZXRcbiIsCi0JCQkJICAgICAgIERSVl9OQU1FKTsKLQkJCW5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQl9IGVsc2UgewogCQkJbmRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJbmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gUklPX01BWF9NU0dfU0laRTsKQEAgLTIwOCw3ICsyMDMsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5ldC0+dHhfbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgcmlvbmV0X2RiZWxsX2V2ZW50KHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0LCB2b2lkICpkZXZfaWQsIHUxNiBzaWQsIHUxNiB0aWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ycnVubmVyLmMgYi9kcml2ZXJzL25ldC9ycnVubmVyLmMKaW5kZXggODFkYmNiYi4uMjBhNzE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcnJ1bm5lci5jCisrKyBiL2RyaXZlcnMvbmV0L3JydW5uZXIuYwpAQCAtMTQwMSw3ICsxNDAxLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IHJyX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBycl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJyX3ByaXZhdGUgKnJycHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHJyX3JlZ3MgX19pb21lbSAqcmVncyA9IHJycHJpdi0+cmVnczsKQEAgLTE0NjYsNyArMTQ2Nyw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnJwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3JydW5uZXIuaCBiL2RyaXZlcnMvbmV0L3JydW5uZXIuaAppbmRleCA2MTczZjExLi4yODE2OTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ycnVubmVyLmgKKysrIGIvZHJpdmVycy9uZXQvcnJ1bm5lci5oCkBAIC04MzEsNyArODMxLDggQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBycl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAogc3RhdGljIGludCBycl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBycl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHJyX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHJyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBycl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcnJfcmVhZF9lZXByb20oc3RydWN0IHJyX3ByaXZhdGUgKnJycHJpdiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8uYyBiL2RyaXZlcnMvbmV0L3MyaW8uYwppbmRleCA0NThkYWEwLi5kZGNjZjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLmMKKysrIGIvZHJpdmVycy9uZXQvczJpby5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogczJpby5jOiBBIExpbnV4IFBDSS1YIEV0aGVybmV0IGRyaXZlciBmb3IgTmV0ZXJpb24gMTBHYkUgU2VydmVyIE5JQwogICogQ29weXJpZ2h0KGMpIDIwMDItMjAwNyBOZXRlcmlvbiBJbmMuCi0KKyAqCiAgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCiAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICogRHJpdmVycyBiYXNlZCBvbiBvciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdApAQCAtMjUsNyArMjUsNyBAQAogICogQ2hyaXN0b3BoZXIgSGVsbHdpZwk6IFNvbWUgbW9yZSAyLjYgc3BlY2lmaWMgaXNzdWVzIGluIHRoZSBkcml2ZXIuCiAgKgogICogVGhlIG1vZHVsZSBsb2FkYWJsZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIGFuZCBhIGJyaWVmCi0gKiBleHBsYWluYXRpb24gb2YgYWxsIHRoZSB2YXJpYWJsZXMuCisgKiBleHBsYW5hdGlvbiBvZiBhbGwgdGhlIHZhcmlhYmxlcy4KICAqCiAgKiByeF9yaW5nX251bSA6IFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvZ3JhbSB0aGUgbnVtYmVyIG9mIHJlY2VpdmUgcmluZ3MgdXNlZAogICogaW4gdGhlIGRyaXZlci4KQEAgLTU0LDYgKzU0LDggQEAKICAqICAgICAgUG9zc2libGUgdmFsdWVzICcxJyBmb3IgZW5hYmxlIGFuZCAnMCcgZm9yIGRpc2FibGUuIERlZmF1bHQgaXMgJzAnCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC03NSwxMSArNzcsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKQEAgLTkzLDE1ICs5NSwxNSBAQAogc3RhdGljIGNoYXIgczJpb19kcml2ZXJfbmFtZVtdID0gIk5ldGVyaW9uIjsKIHN0YXRpYyBjaGFyIHMyaW9fZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogCi1zdGF0aWMgaW50IHJ4ZF9zaXplWzJdID0gezMyLDQ4fTsKLXN0YXRpYyBpbnQgcnhkX2NvdW50WzJdID0gezEyNyw4NX07CitzdGF0aWMgaW50IHJ4ZF9zaXplWzJdID0gezMyLCA0OH07CitzdGF0aWMgaW50IHJ4ZF9jb3VudFsyXSA9IHsxMjcsIDg1fTsKIAogc3RhdGljIGlubGluZSBpbnQgUlhEX0lTX1VQMkRUKHN0cnVjdCBSeERfdCAqcnhkcCkKIHsKIAlpbnQgcmV0OwogCiAJcmV0ID0gKCghKHJ4ZHAtPkNvbnRyb2xfMSAmIFJYRF9PV05fWEVOQSkpICYmCi0JCShHRVRfUlhEX01BUktFUihyeGRwLT5Db250cm9sXzIpICE9IFRIRV9SWERfTUFSSykpOworCSAgICAgICAoR0VUX1JYRF9NQVJLRVIocnhkcC0+Q29udHJvbF8yKSAhPSBUSEVfUlhEX01BUkspKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMTEsMjEgKzExMywyMSBAQAogICogcHJvYmxlbSwgNjAwQiwgNjAwQywgNjAwRCwgNjQwQiwgNjQwQyBhbmQgNjQwRC4KICAqIG1hY3JvIGJlbG93IGlkZW50aWZpZXMgdGhlc2UgY2FyZHMgZ2l2ZW4gdGhlIHN1YnN5c3RlbV9pZC4KICAqLwotI2RlZmluZSBDQVJEU19XSVRIX0ZBVUxUWV9MSU5LX0lORElDQVRPUlMoZGV2X3R5cGUsIHN1YmlkKSBcCi0JKGRldl90eXBlID09IFhGUkFNRV9JX0RFVklDRSkgPwkJCVwKLQkJKCgoKHN1YmlkID49IDB4NjAwQikgJiYgKHN1YmlkIDw9IDB4NjAwRCkpIHx8IFwKLQkJICgoc3ViaWQgPj0gMHg2NDBCKSAmJiAoc3ViaWQgPD0gMHg2NDBEKSkpID8gMSA6IDApIDogMAorI2RlZmluZSBDQVJEU19XSVRIX0ZBVUxUWV9MSU5LX0lORElDQVRPUlMoZGV2X3R5cGUsIHN1YmlkKQkJXAorCShkZXZfdHlwZSA9PSBYRlJBTUVfSV9ERVZJQ0UpID8JCQkJCVwKKwkoKCgoc3ViaWQgPj0gMHg2MDBCKSAmJiAoc3ViaWQgPD0gMHg2MDBEKSkgfHwJCQlcCisJICAoKHN1YmlkID49IDB4NjQwQikgJiYgKHN1YmlkIDw9IDB4NjQwRCkpKSA/IDEgOiAwKSA6IDAKIAogI2RlZmluZSBMSU5LX0lTX1VQKHZhbDY0KSAoISh2YWw2NCAmIChBREFQVEVSX1NUQVRVU19STUFDX1JFTU9URV9GQVVMVCB8IFwKIAkJCQkgICAgICBBREFQVEVSX1NUQVRVU19STUFDX0xPQ0FMX0ZBVUxUKSkpCiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX3MyaW9fY2FyZF91cChjb25zdCBzdHJ1Y3QgczJpb19uaWMgKiBzcCkKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3MyaW9fY2FyZF91cChjb25zdCBzdHJ1Y3QgczJpb19uaWMgKnNwKQogewogCXJldHVybiB0ZXN0X2JpdChfX1MySU9fU1RBVEVfQ0FSRF9VUCwgJnNwLT5zdGF0ZSk7CiB9CiAKIC8qIEV0aHRvb2wgcmVsYXRlZCB2YXJpYWJsZXMgYW5kIE1hY3Jvcy4gKi8KLXN0YXRpYyBjaGFyIHMyaW9fZ3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0geworc3RhdGljIGNvbnN0IGNoYXIgczJpb19nc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CiAJIlJlZ2lzdGVyIHRlc3RcdChvZmZsaW5lKSIsCiAJIkVlcHJvbSB0ZXN0XHQob2ZmbGluZSkiLAogCSJMaW5rIHRlc3RcdChvbmxpbmUpIiwKQEAgLTEzMyw3ICsxMzUsNyBAQAogCSJCSVNUIFRlc3RcdChvZmZsaW5lKSIKIH07CiAKLXN0YXRpYyBjaGFyIGV0aHRvb2xfeGVuYV9zdGF0c19rZXlzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyIGV0aHRvb2xfeGVuYV9zdGF0c19rZXlzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKIAl7InRtYWNfZnJtcyJ9LAogCXsidG1hY19kYXRhX29jdGV0cyJ9LAogCXsidG1hY19kcm9wX2ZybXMifSwKQEAgLTIzMCw3ICsyMzIsNyBAQAogCXsicnhmX3dyX2NudCJ9CiB9OwogCi1zdGF0aWMgY2hhciBldGh0b29sX2VuaGFuY2VkX3N0YXRzX2tleXNbXVtFVEhfR1NUUklOR19MRU5dID0geworc3RhdGljIGNvbnN0IGNoYXIgZXRodG9vbF9lbmhhbmNlZF9zdGF0c19rZXlzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKIAl7InJtYWNfdHRsXzE1MTlfNDA5NV9mcm1zIn0sCiAJeyJybWFjX3R0bF80MDk2XzgxOTFfZnJtcyJ9LAogCXsicm1hY190dGxfODE5Ml9tYXhfZnJtcyJ9LApAQCAtMjQ5LDcgKzI1MSw3IEBACiAJeyJsaW5rX2ZhdWx0X2NudCJ9CiB9OwogCi1zdGF0aWMgY2hhciBldGh0b29sX2RyaXZlcl9zdGF0c19rZXlzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyIGV0aHRvb2xfZHJpdmVyX3N0YXRzX2tleXNbXVtFVEhfR1NUUklOR19MRU5dID0gewogCXsiXG4gRFJJVkVSIFNUQVRJU1RJQ1MifSwKIAl7InNpbmdsZV9iaXRfZWNjX2VycnMifSwKIAl7ImRvdWJsZV9iaXRfZWNjX2VycnMifSwKQEAgLTMyOCwyMCArMzMwLDIwIEBACiAjZGVmaW5lIFMySU9fRU5IQU5DRURfU1RBVF9MRU4JQVJSQVlfU0laRShldGh0b29sX2VuaGFuY2VkX3N0YXRzX2tleXMpCiAjZGVmaW5lIFMySU9fRFJJVkVSX1NUQVRfTEVOCUFSUkFZX1NJWkUoZXRodG9vbF9kcml2ZXJfc3RhdHNfa2V5cykKIAotI2RlZmluZSBYRlJBTUVfSV9TVEFUX0xFTiAoUzJJT19YRU5BX1NUQVRfTEVOICsgUzJJT19EUklWRVJfU1RBVF9MRU4gKQotI2RlZmluZSBYRlJBTUVfSUlfU1RBVF9MRU4gKFhGUkFNRV9JX1NUQVRfTEVOICsgUzJJT19FTkhBTkNFRF9TVEFUX0xFTiApCisjZGVmaW5lIFhGUkFNRV9JX1NUQVRfTEVOIChTMklPX1hFTkFfU1RBVF9MRU4gKyBTMklPX0RSSVZFUl9TVEFUX0xFTikKKyNkZWZpbmUgWEZSQU1FX0lJX1NUQVRfTEVOIChYRlJBTUVfSV9TVEFUX0xFTiArIFMySU9fRU5IQU5DRURfU1RBVF9MRU4pCiAKLSNkZWZpbmUgWEZSQU1FX0lfU1RBVF9TVFJJTkdTX0xFTiAoIFhGUkFNRV9JX1NUQVRfTEVOICogRVRIX0dTVFJJTkdfTEVOICkKLSNkZWZpbmUgWEZSQU1FX0lJX1NUQVRfU1RSSU5HU19MRU4gKCBYRlJBTUVfSUlfU1RBVF9MRU4gKiBFVEhfR1NUUklOR19MRU4gKQorI2RlZmluZSBYRlJBTUVfSV9TVEFUX1NUUklOR1NfTEVOIChYRlJBTUVfSV9TVEFUX0xFTiAqIEVUSF9HU1RSSU5HX0xFTikKKyNkZWZpbmUgWEZSQU1FX0lJX1NUQVRfU1RSSU5HU19MRU4gKFhGUkFNRV9JSV9TVEFUX0xFTiAqIEVUSF9HU1RSSU5HX0xFTikKIAogI2RlZmluZSBTMklPX1RFU1RfTEVOCUFSUkFZX1NJWkUoczJpb19nc3RyaW5ncykKLSNkZWZpbmUgUzJJT19TVFJJTkdTX0xFTglTMklPX1RFU1RfTEVOICogRVRIX0dTVFJJTkdfTEVOCisjZGVmaW5lIFMySU9fU1RSSU5HU19MRU4JKFMySU9fVEVTVF9MRU4gKiBFVEhfR1NUUklOR19MRU4pCiAKLSNkZWZpbmUgUzJJT19USU1FUl9DT05GKHRpbWVyLCBoYW5kbGUsIGFyZywgZXhwKQkJXAotCQkJaW5pdF90aW1lcigmdGltZXIpOwkJCVwKLQkJCXRpbWVyLmZ1bmN0aW9uID0gaGFuZGxlOwkJXAotCQkJdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhcmc7CVwKLQkJCW1vZF90aW1lcigmdGltZXIsIChqaWZmaWVzICsgZXhwKSkJXAorI2RlZmluZSBTMklPX1RJTUVSX0NPTkYodGltZXIsIGhhbmRsZSwgYXJnLCBleHApCVwKKwlpbml0X3RpbWVyKCZ0aW1lcik7CQkJCVwKKwl0aW1lci5mdW5jdGlvbiA9IGhhbmRsZTsJCQlcCisJdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFyZzsJCVwKKwltb2RfdGltZXIoJnRpbWVyLCAoamlmZmllcyArIGV4cCkpCQlcCiAKIC8qIGNvcHkgbWFjIGFkZHIgdG8gZGVmX21hY19hZGRyIGFycmF5ICovCiBzdGF0aWMgdm9pZCBkb19zMmlvX2NvcHlfbWFjX2FkZHIoc3RydWN0IHMyaW9fbmljICpzcCwgaW50IG9mZnNldCwgdTY0IG1hY19hZGRyKQpAQCAtMzYxLDE2ICszNjMsMjIgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgczJpb19uaWMgKm5pYyA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnc1tNQVhfVFhfRklGT1NdOwotCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmbmljLT5jb25maWc7CisJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOwogCi0JZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hY19jb250cm9sLT5maWZvc1tpXS50eF9sb2NrLCBmbGFnc1tpXSk7CisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykgeworCQlzdHJ1Y3QgZmlmb19pbmZvICpmaWZvID0gJm1hY19jb250cm9sLT5maWZvc1tpXTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZmlmby0+dHhfbG9jaywgZmxhZ3NbaV0pOworCX0KIAogCW5pYy0+dmxncnAgPSBncnA7Ci0JZm9yIChpID0gY29uZmlnLT50eF9maWZvX251bSAtIDE7IGkgPj0gMDsgaS0tKQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNfY29udHJvbC0+Zmlmb3NbaV0udHhfbG9jaywKLQkJCQlmbGFnc1tpXSk7CisKKwlmb3IgKGkgPSBjb25maWctPnR4X2ZpZm9fbnVtIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJc3RydWN0IGZpZm9faW5mbyAqZmlmbyA9ICZtYWNfY29udHJvbC0+Zmlmb3NbaV07CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3NbaV0pOworCX0KIH0KIAogLyogVW5yZWdpc3RlciB0aGUgdmxhbiAqLwpAQCAtMzc5LDE4ICszODcsMjMgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgczJpb19uaWMgKm5pYyA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnc1tNQVhfVFhfRklGT1NdOwotCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmbmljLT5jb25maWc7CisJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOwogCi0JZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hY19jb250cm9sLT5maWZvc1tpXS50eF9sb2NrLCBmbGFnc1tpXSk7CisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykgeworCQlzdHJ1Y3QgZmlmb19pbmZvICpmaWZvID0gJm1hY19jb250cm9sLT5maWZvc1tpXTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZmlmby0+dHhfbG9jaywgZmxhZ3NbaV0pOworCX0KIAogCWlmIChuaWMtPnZsZ3JwKQogCQl2bGFuX2dyb3VwX3NldF9kZXZpY2UobmljLT52bGdycCwgdmlkLCBOVUxMKTsKIAotCWZvciAoaSA9IGNvbmZpZy0+dHhfZmlmb19udW0gLSAxOyBpID49IDA7IGktLSkKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnR4X2xvY2ssCi0JCQlmbGFnc1tpXSk7CisJZm9yIChpID0gY29uZmlnLT50eF9maWZvX251bSAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCXN0cnVjdCBmaWZvX2luZm8gKmZpZm8gPSAmbWFjX2NvbnRyb2wtPmZpZm9zW2ldOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzW2ldKTsKKwl9CiB9CiAKIC8qCkBAIC00OTYsMTEgKzUwOSwxMSBAQAogUzJJT19QQVJNX0lOVCh2bGFuX3RhZ19zdHJpcCwgTk9fU1RSSVBfSU5fUFJPTUlTQyk7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHhfZmlmb19sZW5bTUFYX1RYX0ZJRk9TXSA9Ci0gICAge0RFRkFVTFRfRklGT18wX0xFTiwgWzEgLi4uKE1BWF9UWF9GSUZPUyAtIDEpXSA9IERFRkFVTFRfRklGT18xXzdfTEVOfTsKK3tERUZBVUxUX0ZJRk9fMF9MRU4sIFsxIC4uLihNQVhfVFhfRklGT1MgLSAxKV0gPSBERUZBVUxUX0ZJRk9fMV83X0xFTn07CiBzdGF0aWMgdW5zaWduZWQgaW50IHJ4X3Jpbmdfc3pbTUFYX1JYX1JJTkdTXSA9Ci0gICAge1swIC4uLihNQVhfUlhfUklOR1MgLSAxKV0gPSBTTUFMTF9CTEtfQ05UfTsKK3tbMCAuLi4oTUFYX1JYX1JJTkdTIC0gMSldID0gU01BTExfQkxLX0NOVH07CiBzdGF0aWMgdW5zaWduZWQgaW50IHJ0c19mcm1fbGVuW01BWF9SWF9SSU5HU10gPQotICAgIHtbMCAuLi4oTUFYX1JYX1JJTkdTIC0gMSldID0gMCB9Owore1swIC4uLihNQVhfUlhfUklOR1MgLSAxKV0gPSAwIH07CiAKIG1vZHVsZV9wYXJhbV9hcnJheSh0eF9maWZvX2xlbiwgdWludCwgTlVMTCwgMCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkocnhfcmluZ19zeiwgdWludCwgTlVMTCwgMCk7CkBAIC01MTYsOSArNTI5LDkgQEAKIAl7UENJX1ZFTkRPUl9JRF9TMklPLCBQQ0lfREVWSUNFX0lEX1MySU9fVU5JLAogCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKIAl7UENJX1ZFTkRPUl9JRF9TMklPLCBQQ0lfREVWSUNFX0lEX0hFUkNfV0lOLAotICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRH0sCi0gICAgICAgIHtQQ0lfVkVORE9SX0lEX1MySU8sIFBDSV9ERVZJQ0VfSURfSEVSQ19VTkksCi0gICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKKwkgUENJX0FOWV9JRCwgUENJX0FOWV9JRH0sCisJe1BDSV9WRU5ET1JfSURfUzJJTywgUENJX0RFVklDRV9JRF9IRVJDX1VOSSwKKwkgUENJX0FOWV9JRCwgUENJX0FOWV9JRH0sCiAJezAsfQogfTsKIApAQCAtNTMxLDExICs1NDQsMTEgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzMmlvX2RyaXZlciA9IHsKLSAgICAgIC5uYW1lID0gIlMySU8iLAotICAgICAgLmlkX3RhYmxlID0gczJpb190YmwsCi0gICAgICAucHJvYmUgPSBzMmlvX2luaXRfbmljLAotICAgICAgLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHMyaW9fcmVtX25pYyksCi0gICAgICAuZXJyX2hhbmRsZXIgPSAmczJpb19lcnJfaGFuZGxlciwKKwkubmFtZSA9ICJTMklPIiwKKwkuaWRfdGFibGUgPSBzMmlvX3RibCwKKwkucHJvYmUgPSBzMmlvX2luaXRfbmljLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzMmlvX3JlbV9uaWMpLAorCS5lcnJfaGFuZGxlciA9ICZzMmlvX2Vycl9oYW5kbGVyLAogfTsKIAogLyogQSBzaW1wbGlmaWVyIG1hY3JvIHVzZWQgYm90aCBieSBpbml0IGFuZCBmcmVlIHNoYXJlZF9tZW0gRm5zKCkuICovCkBAIC02MjcsMzcgKzY0MCwzNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuaWMtPmRldjsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlzdHJ1Y3QgYnVmZkFkZCAqYmE7Ci0KLQlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sOwotCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZzsKKwlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmbmljLT5jb25maWc7CisJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fYWxsb2NhdGVkID0gMDsKIAotCW1hY19jb250cm9sID0gJm5pYy0+bWFjX2NvbnRyb2w7Ci0JY29uZmlnID0gJm5pYy0+Y29uZmlnOwotCi0KLQkvKiBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBUWERMcyBpbiBGSU9GcyAqLworCS8qIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIFRYRExzIGluIEZJRk9zICovCiAJc2l6ZSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykgewotCQlzaXplICs9IGNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuOworCQlzdHJ1Y3QgdHhfZmlmb19jb25maWcgKnR4X2NmZyA9ICZjb25maWctPnR4X2NmZ1tpXTsKKworCQlzaXplICs9IHR4X2NmZy0+Zmlmb19sZW47CiAJfQogCWlmIChzaXplID4gTUFYX0FWQUlMQUJMRV9UWERTKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiczJpbzogUmVxdWVzdGVkIFR4RHMgdG9vIGhpZ2gsICIpOwotCQlEQkdfUFJJTlQoRVJSX0RCRywgIlJlcXVlc3RlZDogJWQsIG1heCBzdXBwb3J0ZWQ6IDgxOTJcbiIsIHNpemUpOworCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCSAgIlRvbyBtYW55IFR4RHMgcmVxdWVzdGVkOiAlZCwgbWF4IHN1cHBvcnRlZDogJWRcbiIsCisJCQkgIHNpemUsIE1BWF9BVkFJTEFCTEVfVFhEUyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXNpemUgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnR4X2ZpZm9fbnVtOyBpKyspIHsKLQkJc2l6ZSA9IGNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuOworCQlzdHJ1Y3QgdHhfZmlmb19jb25maWcgKnR4X2NmZyA9ICZjb25maWctPnR4X2NmZ1tpXTsKKworCQlzaXplID0gdHhfY2ZnLT5maWZvX2xlbjsKIAkJLyoKIAkJICogTGVnYWwgdmFsdWVzIGFyZSBmcm9tIDIgdG8gODE5MgogCQkgKi8KIAkJaWYgKHNpemUgPCAyKSB7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IEludmFsaWQgZmlmbyBsZW4gKCVkKSIsIHNpemUpOwotCQkJREJHX1BSSU5UKEVSUl9EQkcsICJmb3IgZmlmbyAlZFxuIiwgaSk7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IExlZ2FsIHZhbHVlcyBmb3IgZmlmbyBsZW4iCi0JCQkJImFyZSAyIHRvIDgxOTJcbiIpOworCQkJREJHX1BSSU5UKEVSUl9EQkcsICJGaWZvICVkOiBJbnZhbGlkIGxlbmd0aCAoJWQpIC0gIgorCQkJCSAgIlZhbGlkIGxlbmd0aHMgYXJlIDIgdGhyb3VnaCA4MTkyXG4iLAorCQkJCSAgaSwgc2l6ZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTY2NiwxMyArNjc4LDE0IEBACiAJbHN0X3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gbHN0X3NpemU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKSB7Ci0JCWludCBmaWZvX2xlbiA9IGNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuOworCQlzdHJ1Y3QgZmlmb19pbmZvICpmaWZvID0gJm1hY19jb250cm9sLT5maWZvc1tpXTsKKwkJc3RydWN0IHR4X2ZpZm9fY29uZmlnICp0eF9jZmcgPSAmY29uZmlnLT50eF9jZmdbaV07CisJCWludCBmaWZvX2xlbiA9IHR4X2NmZy0+Zmlmb19sZW47CiAJCWludCBsaXN0X2hvbGRlcl9zaXplID0gZmlmb19sZW4gKiBzaXplb2Yoc3RydWN0IGxpc3RfaW5mb19ob2xkKTsKLQkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLmxpc3RfaW5mbyA9IGt6YWxsb2MobGlzdF9ob2xkZXJfc2l6ZSwKLQkJCQkJCQkgIEdGUF9LRVJORUwpOwotCQlpZiAoIW1hY19jb250cm9sLT5maWZvc1tpXS5saXN0X2luZm8pIHsKLQkJCURCR19QUklOVChJTkZPX0RCRywKLQkJCQkgICJNYWxsb2MgZmFpbGVkIGZvciBsaXN0X2luZm9cbiIpOworCisJCWZpZm8tPmxpc3RfaW5mbyA9IGt6YWxsb2MobGlzdF9ob2xkZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZmlmby0+bGlzdF9pbmZvKSB7CisJCQlEQkdfUFJJTlQoSU5GT19EQkcsICJNYWxsb2MgZmFpbGVkIGZvciBsaXN0X2luZm9cbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJbWVtX2FsbG9jYXRlZCArPSBsaXN0X2hvbGRlcl9zaXplOwpAQCAtNjgwLDE2ICs2OTMsMTcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKSB7CiAJCWludCBwYWdlX251bSA9IFRYRF9NRU1fUEFHRV9DTlQoY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW4sCiAJCQkJCQlsc3RfcGVyX3BhZ2UpOwotCQltYWNfY29udHJvbC0+Zmlmb3NbaV0udHhfY3Vycl9wdXRfaW5mby5vZmZzZXQgPSAwOwotCQltYWNfY29udHJvbC0+Zmlmb3NbaV0udHhfY3Vycl9wdXRfaW5mby5maWZvX2xlbiA9Ci0JCSAgICBjb25maWctPnR4X2NmZ1tpXS5maWZvX2xlbiAtIDE7Ci0JCW1hY19jb250cm9sLT5maWZvc1tpXS50eF9jdXJyX2dldF9pbmZvLm9mZnNldCA9IDA7Ci0JCW1hY19jb250cm9sLT5maWZvc1tpXS50eF9jdXJyX2dldF9pbmZvLmZpZm9fbGVuID0KLQkJICAgIGNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuIC0gMTsKLQkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLmZpZm9fbm8gPSBpOwotCQltYWNfY29udHJvbC0+Zmlmb3NbaV0ubmljID0gbmljOwotCQltYWNfY29udHJvbC0+Zmlmb3NbaV0ubWF4X3R4ZHMgPSBNQVhfU0tCX0ZSQUdTICsgMjsKLQkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLmRldiA9IGRldjsKKwkJc3RydWN0IGZpZm9faW5mbyAqZmlmbyA9ICZtYWNfY29udHJvbC0+Zmlmb3NbaV07CisJCXN0cnVjdCB0eF9maWZvX2NvbmZpZyAqdHhfY2ZnID0gJmNvbmZpZy0+dHhfY2ZnW2ldOworCisJCWZpZm8tPnR4X2N1cnJfcHV0X2luZm8ub2Zmc2V0ID0gMDsKKwkJZmlmby0+dHhfY3Vycl9wdXRfaW5mby5maWZvX2xlbiA9IHR4X2NmZy0+Zmlmb19sZW4gLSAxOworCQlmaWZvLT50eF9jdXJyX2dldF9pbmZvLm9mZnNldCA9IDA7CisJCWZpZm8tPnR4X2N1cnJfZ2V0X2luZm8uZmlmb19sZW4gPSB0eF9jZmctPmZpZm9fbGVuIC0gMTsKKwkJZmlmby0+Zmlmb19ubyA9IGk7CisJCWZpZm8tPm5pYyA9IG5pYzsKKwkJZmlmby0+bWF4X3R4ZHMgPSBNQVhfU0tCX0ZSQUdTICsgMjsKKwkJZmlmby0+ZGV2ID0gZGV2OwogCiAJCWZvciAoaiA9IDA7IGogPCBwYWdlX251bTsgaisrKSB7CiAJCQlpbnQgayA9IDA7CkBAIC02OTksOCArNzEzLDcgQEAKIAkJCQkJCSAgICAgUEFHRV9TSVpFLCAmdG1wX3ApOwogCQkJaWYgKCF0bXBfdikgewogCQkJCURCR19QUklOVChJTkZPX0RCRywKLQkJCQkJICAicGNpX2FsbG9jX2NvbnNpc3RlbnQgIik7Ci0JCQkJREJHX1BSSU5UKElORk9fREJHLCAiZmFpbGVkIGZvciBUeERMXG4iKTsKKwkJCQkJICAicGNpX2FsbG9jX2NvbnNpc3RlbnQgZmFpbGVkIGZvciBUeERMXG4iKTsKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KIAkJCS8qIElmIHdlIGdvdCBhIHplcm8gRE1BIGFkZHJlc3MoY2FuIGhhcHBlbiBvbgpAQCAtNzExLDM3ICs3MjQsMzggQEAKIAkJCWlmICghdG1wX3ApIHsKIAkJCQltYWNfY29udHJvbC0+emVyb2RtYV92aXJ0X2FkZHIgPSB0bXBfdjsKIAkJCQlEQkdfUFJJTlQoSU5JVF9EQkcsCi0JCQkJIiVzOiBaZXJvIERNQSBhZGRyZXNzIGZvciBUeERMLiAiLCBkZXYtPm5hbWUpOwotCQkJCURCR19QUklOVChJTklUX0RCRywKLQkJCQkiVmlydHVhbCBhZGRyZXNzICVwXG4iLCB0bXBfdik7CisJCQkJCSAgIiVzOiBaZXJvIERNQSBhZGRyZXNzIGZvciBUeERMLiAiCisJCQkJCSAgIlZpcnR1YWwgYWRkcmVzcyAlcFxuIiwKKwkJCQkJICBkZXYtPm5hbWUsIHRtcF92KTsKIAkJCQl0bXBfdiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KG5pYy0+cGRldiwKLQkJCQkJCSAgICAgUEFHRV9TSVpFLCAmdG1wX3ApOworCQkJCQkJCSAgICAgUEFHRV9TSVpFLCAmdG1wX3ApOwogCQkJCWlmICghdG1wX3YpIHsKIAkJCQkJREJHX1BSSU5UKElORk9fREJHLAotCQkJCQkgICJwY2lfYWxsb2NfY29uc2lzdGVudCAiKTsKLQkJCQkJREJHX1BSSU5UKElORk9fREJHLCAiZmFpbGVkIGZvciBUeERMXG4iKTsKKwkJCQkJCSAgInBjaV9hbGxvY19jb25zaXN0ZW50IGZhaWxlZCBmb3IgVHhETFxuIik7CiAJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCX0KIAkJCQltZW1fYWxsb2NhdGVkICs9IFBBR0VfU0laRTsKIAkJCX0KIAkJCXdoaWxlIChrIDwgbHN0X3Blcl9wYWdlKSB7CiAJCQkJaW50IGwgPSAoaiAqIGxzdF9wZXJfcGFnZSkgKyBrOwotCQkJCWlmIChsID09IGNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuKQorCQkJCWlmIChsID09IHR4X2NmZy0+Zmlmb19sZW4pCiAJCQkJCWJyZWFrOwotCQkJCW1hY19jb250cm9sLT5maWZvc1tpXS5saXN0X2luZm9bbF0ubGlzdF92aXJ0X2FkZHIgPQotCQkJCSAgICB0bXBfdiArIChrICogbHN0X3NpemUpOwotCQkJCW1hY19jb250cm9sLT5maWZvc1tpXS5saXN0X2luZm9bbF0ubGlzdF9waHlfYWRkciA9Ci0JCQkJICAgIHRtcF9wICsgKGsgKiBsc3Rfc2l6ZSk7CisJCQkJZmlmby0+bGlzdF9pbmZvW2xdLmxpc3RfdmlydF9hZGRyID0KKwkJCQkJdG1wX3YgKyAoayAqIGxzdF9zaXplKTsKKwkJCQlmaWZvLT5saXN0X2luZm9bbF0ubGlzdF9waHlfYWRkciA9CisJCQkJCXRtcF9wICsgKGsgKiBsc3Rfc2l6ZSk7CiAJCQkJaysrOwogCQkJfQogCQl9CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykgewotCQlzaXplID0gY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW47Ci0JCW1hY19jb250cm9sLT5maWZvc1tpXS51Zm9faW5fYmFuZF92Ci0JCQk9IGtjYWxsb2Moc2l6ZSwgc2l6ZW9mKHU2NCksIEdGUF9LRVJORUwpOwotCQlpZiAoIW1hY19jb250cm9sLT5maWZvc1tpXS51Zm9faW5fYmFuZF92KQorCQlzdHJ1Y3QgZmlmb19pbmZvICpmaWZvID0gJm1hY19jb250cm9sLT5maWZvc1tpXTsKKwkJc3RydWN0IHR4X2ZpZm9fY29uZmlnICp0eF9jZmcgPSAmY29uZmlnLT50eF9jZmdbaV07CisKKwkJc2l6ZSA9IHR4X2NmZy0+Zmlmb19sZW47CisJCWZpZm8tPnVmb19pbl9iYW5kX3YgPSBrY2FsbG9jKHNpemUsIHNpemVvZih1NjQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFmaWZvLT51Zm9faW5fYmFuZF92KQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCW1lbV9hbGxvY2F0ZWQgKz0gKHNpemUgKiBzaXplb2YodTY0KSk7CiAJfQpAQCAtNzQ5LDIwICs3NjMsMTkgQEAKIAkvKiBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBSWERzIGluIFJpbmdzICovCiAJc2l6ZSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQlpZiAoY29uZmlnLT5yeF9jZmdbaV0ubnVtX3J4ZCAlCi0JCSAgICAocnhkX2NvdW50W25pYy0+cnhkX21vZGVdICsgMSkpIHsKLQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IFJ4RCBjb3VudCBvZiAiLCBkZXYtPm5hbWUpOwotCQkJREJHX1BSSU5UKEVSUl9EQkcsICJSaW5nJWQgaXMgbm90IGEgbXVsdGlwbGUgb2YgIiwKLQkJCQkgIGkpOwotCQkJREJHX1BSSU5UKEVSUl9EQkcsICJSeERzIHBlciBCbG9jayIpOworCQlzdHJ1Y3QgcnhfcmluZ19jb25maWcgKnJ4X2NmZyA9ICZjb25maWctPnJ4X2NmZ1tpXTsKKwkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CisKKwkJaWYgKHJ4X2NmZy0+bnVtX3J4ZCAlIChyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxKSkgeworCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogUmluZyVkIFJ4RCBjb3VudCBpcyBub3QgYSAiCisJCQkJICAibXVsdGlwbGUgb2YgUnhEcyBwZXIgQmxvY2tcbiIsCisJCQkJICBkZXYtPm5hbWUsIGkpOwogCQkJcmV0dXJuIEZBSUxVUkU7CiAJCX0KLQkJc2l6ZSArPSBjb25maWctPnJ4X2NmZ1tpXS5udW1fcnhkOwotCQltYWNfY29udHJvbC0+cmluZ3NbaV0uYmxvY2tfY291bnQgPQotCQkJY29uZmlnLT5yeF9jZmdbaV0ubnVtX3J4ZCAvCi0JCQkocnhkX2NvdW50W25pYy0+cnhkX21vZGVdICsgMSApOwotCQltYWNfY29udHJvbC0+cmluZ3NbaV0ucGt0X2NudCA9IGNvbmZpZy0+cnhfY2ZnW2ldLm51bV9yeGQgLQotCQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLmJsb2NrX2NvdW50OworCQlzaXplICs9IHJ4X2NmZy0+bnVtX3J4ZDsKKwkJcmluZy0+YmxvY2tfY291bnQgPSByeF9jZmctPm51bV9yeGQgLworCQkJKHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSArIDEpOworCQlyaW5nLT5wa3RfY250ID0gcnhfY2ZnLT5udW1fcnhkIC0gcmluZy0+YmxvY2tfY291bnQ7CiAJfQogCWlmIChuaWMtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzEpCiAJCXNpemUgPSAoc2l6ZSAqIChzaXplb2Yoc3RydWN0IFJ4RDEpKSk7CkBAIC03NzAsMjcgKzc4MywyNyBAQAogCQlzaXplID0gKHNpemUgKiAoc2l6ZW9mKHN0cnVjdCBSeEQzKSkpOwogCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQltYWNfY29udHJvbC0+cmluZ3NbaV0ucnhfY3Vycl9nZXRfaW5mby5ibG9ja19pbmRleCA9IDA7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9jdXJyX2dldF9pbmZvLm9mZnNldCA9IDA7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9jdXJyX2dldF9pbmZvLnJpbmdfbGVuID0KLQkJICAgIGNvbmZpZy0+cnhfY2ZnW2ldLm51bV9yeGQgLSAxOwotCQltYWNfY29udHJvbC0+cmluZ3NbaV0ucnhfY3Vycl9wdXRfaW5mby5ibG9ja19pbmRleCA9IDA7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9jdXJyX3B1dF9pbmZvLm9mZnNldCA9IDA7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9jdXJyX3B1dF9pbmZvLnJpbmdfbGVuID0KLQkJICAgIGNvbmZpZy0+cnhfY2ZnW2ldLm51bV9yeGQgLSAxOwotCQltYWNfY29udHJvbC0+cmluZ3NbaV0ubmljID0gbmljOwotCQltYWNfY29udHJvbC0+cmluZ3NbaV0ucmluZ19ubyA9IGk7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5scm8gPSBscm9fZW5hYmxlOworCQlzdHJ1Y3QgcnhfcmluZ19jb25maWcgKnJ4X2NmZyA9ICZjb25maWctPnJ4X2NmZ1tpXTsKKwkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CiAKLQkJYmxrX2NudCA9IGNvbmZpZy0+cnhfY2ZnW2ldLm51bV9yeGQgLwotCQkJCShyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxKTsKKwkJcmluZy0+cnhfY3Vycl9nZXRfaW5mby5ibG9ja19pbmRleCA9IDA7CisJCXJpbmctPnJ4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0ID0gMDsKKwkJcmluZy0+cnhfY3Vycl9nZXRfaW5mby5yaW5nX2xlbiA9IHJ4X2NmZy0+bnVtX3J4ZCAtIDE7CisJCXJpbmctPnJ4X2N1cnJfcHV0X2luZm8uYmxvY2tfaW5kZXggPSAwOworCQlyaW5nLT5yeF9jdXJyX3B1dF9pbmZvLm9mZnNldCA9IDA7CisJCXJpbmctPnJ4X2N1cnJfcHV0X2luZm8ucmluZ19sZW4gPSByeF9jZmctPm51bV9yeGQgLSAxOworCQlyaW5nLT5uaWMgPSBuaWM7CisJCXJpbmctPnJpbmdfbm8gPSBpOworCQlyaW5nLT5scm8gPSBscm9fZW5hYmxlOworCisJCWJsa19jbnQgPSByeF9jZmctPm51bV9yeGQgLyAocnhkX2NvdW50W25pYy0+cnhkX21vZGVdICsgMSk7CiAJCS8qICBBbGxvY2F0aW5nIGFsbCB0aGUgUnggYmxvY2tzICovCiAJCWZvciAoaiA9IDA7IGogPCBibGtfY250OyBqKyspIHsKIAkJCXN0cnVjdCByeF9ibG9ja19pbmZvICpyeF9ibG9ja3M7CiAJCQlpbnQgbDsKIAotCQkJcnhfYmxvY2tzID0gJm1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9ibG9ja3Nbal07Ci0JCQlzaXplID0gU0laRV9PRl9CTE9DSzsgLy9zaXplIGlzIGFsd2F5cyBwYWdlIHNpemUKKwkJCXJ4X2Jsb2NrcyA9ICZyaW5nLT5yeF9ibG9ja3Nbal07CisJCQlzaXplID0gU0laRV9PRl9CTE9DSzsJLyogc2l6ZSBpcyBhbHdheXMgcGFnZSBzaXplICovCiAJCQl0bXBfdl9hZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobmljLT5wZGV2LCBzaXplLAogCQkJCQkJCSAgJnRtcF9wX2FkZHIpOwogCQkJaWYgKHRtcF92X2FkZHIgPT0gTlVMTCkgewpAQCAtODA1LDE2ICs4MTgsMTYgQEAKIAkJCX0KIAkJCW1lbV9hbGxvY2F0ZWQgKz0gc2l6ZTsKIAkJCW1lbXNldCh0bXBfdl9hZGRyLCAwLCBzaXplKTsKKworCQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcnhkX2luZm8pICoKKwkJCQlyeGRfY291bnRbbmljLT5yeGRfbW9kZV07CiAJCQlyeF9ibG9ja3MtPmJsb2NrX3ZpcnRfYWRkciA9IHRtcF92X2FkZHI7CiAJCQlyeF9ibG9ja3MtPmJsb2NrX2RtYV9hZGRyID0gdG1wX3BfYWRkcjsKLQkJCXJ4X2Jsb2Nrcy0+cnhkcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByeGRfaW5mbykqCi0JCQkJCQkgIHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSwKLQkJCQkJCSAgR0ZQX0tFUk5FTCk7CisJCQlyeF9ibG9ja3MtPnJ4ZHMgPSBrbWFsbG9jKHNpemUsICBHRlBfS0VSTkVMKTsKIAkJCWlmICghcnhfYmxvY2tzLT5yeGRzKQogCQkJCXJldHVybiAtRU5PTUVNOwotCQkJbWVtX2FsbG9jYXRlZCArPQotCQkJKHNpemVvZihzdHJ1Y3QgcnhkX2luZm8pKiByeGRfY291bnRbbmljLT5yeGRfbW9kZV0pOwotCQkJZm9yIChsPTA7IGw8cnhkX2NvdW50W25pYy0+cnhkX21vZGVdO2wrKykgeworCQkJbWVtX2FsbG9jYXRlZCArPSBzaXplOworCQkJZm9yIChsID0gMDsgbCA8IHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXTsgbCsrKSB7CiAJCQkJcnhfYmxvY2tzLT5yeGRzW2xdLnZpcnRfYWRkciA9CiAJCQkJCXJ4X2Jsb2Nrcy0+YmxvY2tfdmlydF9hZGRyICsKIAkJCQkJKHJ4ZF9zaXplW25pYy0+cnhkX21vZGVdICogbCk7CkBAIC04MjUsMjIgKzgzOCwxNyBAQAogCQl9CiAJCS8qIEludGVybGlua2luZyBhbGwgUnggQmxvY2tzICovCiAJCWZvciAoaiA9IDA7IGogPCBibGtfY250OyBqKyspIHsKLQkJCXRtcF92X2FkZHIgPQotCQkJCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9ibG9ja3Nbal0uYmxvY2tfdmlydF9hZGRyOwotCQkJdG1wX3ZfYWRkcl9uZXh0ID0KLQkJCQltYWNfY29udHJvbC0+cmluZ3NbaV0ucnhfYmxvY2tzWyhqICsgMSkgJQotCQkJCQkgICAgICBibGtfY250XS5ibG9ja192aXJ0X2FkZHI7Ci0JCQl0bXBfcF9hZGRyID0KLQkJCQltYWNfY29udHJvbC0+cmluZ3NbaV0ucnhfYmxvY2tzW2pdLmJsb2NrX2RtYV9hZGRyOwotCQkJdG1wX3BfYWRkcl9uZXh0ID0KLQkJCQltYWNfY29udHJvbC0+cmluZ3NbaV0ucnhfYmxvY2tzWyhqICsgMSkgJQotCQkJCQkgICAgICBibGtfY250XS5ibG9ja19kbWFfYWRkcjsKKwkJCWludCBuZXh0ID0gKGogKyAxKSAlIGJsa19jbnQ7CisJCQl0bXBfdl9hZGRyID0gcmluZy0+cnhfYmxvY2tzW2pdLmJsb2NrX3ZpcnRfYWRkcjsKKwkJCXRtcF92X2FkZHJfbmV4dCA9IHJpbmctPnJ4X2Jsb2Nrc1tuZXh0XS5ibG9ja192aXJ0X2FkZHI7CisJCQl0bXBfcF9hZGRyID0gcmluZy0+cnhfYmxvY2tzW2pdLmJsb2NrX2RtYV9hZGRyOworCQkJdG1wX3BfYWRkcl9uZXh0ID0gcmluZy0+cnhfYmxvY2tzW25leHRdLmJsb2NrX2RtYV9hZGRyOwogCi0JCQlwcmVfcnhkX2JsayA9IChzdHJ1Y3QgUnhEX2Jsb2NrICopIHRtcF92X2FkZHI7CisJCQlwcmVfcnhkX2JsayA9IChzdHJ1Y3QgUnhEX2Jsb2NrICopdG1wX3ZfYWRkcjsKIAkJCXByZV9yeGRfYmxrLT5yZXNlcnZlZF8yX3BOZXh0X1J4RF9ibG9jayA9Ci0JCQkgICAgKHVuc2lnbmVkIGxvbmcpIHRtcF92X2FkZHJfbmV4dDsKKwkJCQkodW5zaWduZWQgbG9uZyl0bXBfdl9hZGRyX25leHQ7CiAJCQlwcmVfcnhkX2Jsay0+cE5leHRfUnhEX0Jsa19waHlzaWNhbCA9Ci0JCQkgICAgKHU2NCkgdG1wX3BfYWRkcl9uZXh0OworCQkJCSh1NjQpdG1wX3BfYWRkcl9uZXh0OwogCQl9CiAJfQogCWlmIChuaWMtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKSB7CkBAIC04NDksNDggKzg1Nyw0NiBAQAogCQkgKiBhbmQgdGhlIGJ1ZmZlcnMgYXMgd2VsbC4KIAkJICovCiAJCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKLQkJCWJsa19jbnQgPSBjb25maWctPnJ4X2NmZ1tpXS5udW1fcnhkIC8KLQkJCSAgIChyeGRfY291bnRbbmljLT5yeGRfbW9kZV0rIDEpOwotCQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLmJhID0KLQkJCQlrbWFsbG9jKChzaXplb2Yoc3RydWN0IGJ1ZmZBZGQgKikgKiBibGtfY250KSwKLQkJCQkgICAgIEdGUF9LRVJORUwpOwotCQkJaWYgKCFtYWNfY29udHJvbC0+cmluZ3NbaV0uYmEpCisJCQlzdHJ1Y3QgcnhfcmluZ19jb25maWcgKnJ4X2NmZyA9ICZjb25maWctPnJ4X2NmZ1tpXTsKKwkJCXN0cnVjdCByaW5nX2luZm8gKnJpbmcgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldOworCisJCQlibGtfY250ID0gcnhfY2ZnLT5udW1fcnhkIC8KKwkJCQkocnhkX2NvdW50W25pYy0+cnhkX21vZGVdICsgMSk7CisJCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBidWZmQWRkICopICogYmxrX2NudDsKKwkJCXJpbmctPmJhID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghcmluZy0+YmEpCiAJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQltZW1fYWxsb2NhdGVkICs9KHNpemVvZihzdHJ1Y3QgYnVmZkFkZCAqKSAqIGJsa19jbnQpOworCQkJbWVtX2FsbG9jYXRlZCArPSBzaXplOwogCQkJZm9yIChqID0gMDsgaiA8IGJsa19jbnQ7IGorKykgewogCQkJCWludCBrID0gMDsKLQkJCQltYWNfY29udHJvbC0+cmluZ3NbaV0uYmFbal0gPQotCQkJCQlrbWFsbG9jKChzaXplb2Yoc3RydWN0IGJ1ZmZBZGQpICoKLQkJCQkJCShyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxKSksCi0JCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIW1hY19jb250cm9sLT5yaW5nc1tpXS5iYVtqXSkKLQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQkJbWVtX2FsbG9jYXRlZCArPSAoc2l6ZW9mKHN0cnVjdCBidWZmQWRkKSAqICBcCi0JCQkJCShyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxKSk7Ci0JCQkJd2hpbGUgKGsgIT0gcnhkX2NvdW50W25pYy0+cnhkX21vZGVdKSB7Ci0JCQkJCWJhID0gJm1hY19jb250cm9sLT5yaW5nc1tpXS5iYVtqXVtrXTsKIAotCQkJCQliYS0+YmFfMF9vcmcgPSAodm9pZCAqKSBrbWFsbG9jCi0JCQkJCSAgICAoQlVGMF9MRU4gKyBBTElHTl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBidWZmQWRkKSAqCisJCQkJCShyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxKTsKKwkJCQlyaW5nLT5iYVtqXSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCFyaW5nLT5iYVtqXSkKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJbWVtX2FsbG9jYXRlZCArPSBzaXplOworCQkJCXdoaWxlIChrICE9IHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSkgeworCQkJCQliYSA9ICZyaW5nLT5iYVtqXVtrXTsKKwkJCQkJc2l6ZSA9IEJVRjBfTEVOICsgQUxJR05fU0laRTsKKwkJCQkJYmEtPmJhXzBfb3JnID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAkJCQkJaWYgKCFiYS0+YmFfMF9vcmcpCiAJCQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCQkJbWVtX2FsbG9jYXRlZCArPQotCQkJCQkJKEJVRjBfTEVOICsgQUxJR05fU0laRSk7CisJCQkJCW1lbV9hbGxvY2F0ZWQgKz0gc2l6ZTsKIAkJCQkJdG1wID0gKHVuc2lnbmVkIGxvbmcpYmEtPmJhXzBfb3JnOwogCQkJCQl0bXAgKz0gQUxJR05fU0laRTsKLQkJCQkJdG1wICY9IH4oKHVuc2lnbmVkIGxvbmcpIEFMSUdOX1NJWkUpOwotCQkJCQliYS0+YmFfMCA9ICh2b2lkICopIHRtcDsKKwkJCQkJdG1wICY9IH4oKHVuc2lnbmVkIGxvbmcpQUxJR05fU0laRSk7CisJCQkJCWJhLT5iYV8wID0gKHZvaWQgKil0bXA7CiAKLQkJCQkJYmEtPmJhXzFfb3JnID0gKHZvaWQgKikga21hbGxvYwotCQkJCQkgICAgKEJVRjFfTEVOICsgQUxJR05fU0laRSwgR0ZQX0tFUk5FTCk7CisJCQkJCXNpemUgPSBCVUYxX0xFTiArIEFMSUdOX1NJWkU7CisJCQkJCWJhLT5iYV8xX29yZyA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCQkJCWlmICghYmEtPmJhXzFfb3JnKQogCQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQkJCW1lbV9hbGxvY2F0ZWQKLQkJCQkJCSs9IChCVUYxX0xFTiArIEFMSUdOX1NJWkUpOwotCQkJCQl0bXAgPSAodW5zaWduZWQgbG9uZykgYmEtPmJhXzFfb3JnOworCQkJCQltZW1fYWxsb2NhdGVkICs9IHNpemU7CisJCQkJCXRtcCA9ICh1bnNpZ25lZCBsb25nKWJhLT5iYV8xX29yZzsKIAkJCQkJdG1wICs9IEFMSUdOX1NJWkU7Ci0JCQkJCXRtcCAmPSB+KCh1bnNpZ25lZCBsb25nKSBBTElHTl9TSVpFKTsKLQkJCQkJYmEtPmJhXzEgPSAodm9pZCAqKSB0bXA7CisJCQkJCXRtcCAmPSB+KCh1bnNpZ25lZCBsb25nKUFMSUdOX1NJWkUpOworCQkJCQliYS0+YmFfMSA9ICh2b2lkICopdG1wOwogCQkJCQlrKys7CiAJCQkJfQogCQkJfQpAQCAtODk5LDggKzkwNSw5IEBACiAKIAkvKiBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBTdGF0aXN0aWNzIGJsb2NrICovCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc3RhdF9ibG9jayk7Ci0JbWFjX2NvbnRyb2wtPnN0YXRzX21lbSA9IHBjaV9hbGxvY19jb25zaXN0ZW50Ci0JICAgIChuaWMtPnBkZXYsIHNpemUsICZtYWNfY29udHJvbC0+c3RhdHNfbWVtX3BoeSk7CisJbWFjX2NvbnRyb2wtPnN0YXRzX21lbSA9CisJCXBjaV9hbGxvY19jb25zaXN0ZW50KG5pYy0+cGRldiwgc2l6ZSwKKwkJCQkgICAgICZtYWNfY29udHJvbC0+c3RhdHNfbWVtX3BoeSk7CiAKIAlpZiAoIW1hY19jb250cm9sLT5zdGF0c19tZW0pIHsKIAkJLyoKQEAgLTkxNCwxMCArOTIxLDEwIEBACiAJbWFjX2NvbnRyb2wtPnN0YXRzX21lbV9zeiA9IHNpemU7CiAKIAl0bXBfdl9hZGRyID0gbWFjX2NvbnRyb2wtPnN0YXRzX21lbTsKLQltYWNfY29udHJvbC0+c3RhdHNfaW5mbyA9IChzdHJ1Y3Qgc3RhdF9ibG9jayAqKSB0bXBfdl9hZGRyOworCW1hY19jb250cm9sLT5zdGF0c19pbmZvID0gKHN0cnVjdCBzdGF0X2Jsb2NrICopdG1wX3ZfYWRkcjsKIAltZW1zZXQodG1wX3ZfYWRkciwgMCwgc2l6ZSk7Ci0JREJHX1BSSU5UKElOSVRfREJHLCAiJXM6UmluZyBNZW0gUEhZOiAweCVsbHhcbiIsIGRldi0+bmFtZSwKLQkJICAodW5zaWduZWQgbG9uZyBsb25nKSB0bXBfcF9hZGRyKTsKKwlEQkdfUFJJTlQoSU5JVF9EQkcsICIlczogUmluZyBNZW0gUEhZOiAweCVsbHhcbiIsIGRldi0+bmFtZSwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKXRtcF9wX2FkZHIpOwogCW1hY19jb250cm9sLT5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY2F0ZWQgKz0gbWVtX2FsbG9jYXRlZDsKIAlyZXR1cm4gU1VDQ0VTUzsKIH0KQEAgLTkzNCw0MiArOTQxLDQ2IEBACiAJaW50IGksIGosIGJsa19jbnQsIHNpemU7CiAJdm9pZCAqdG1wX3ZfYWRkcjsKIAlkbWFfYWRkcl90IHRtcF9wX2FkZHI7Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKLQlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7CiAJaW50IGxzdF9zaXplLCBsc3RfcGVyX3BhZ2U7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlpbnQgcGFnZV9udW0gPSAwOworCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZzsKKwlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sOworCXN0cnVjdCBzdGF0X2Jsb2NrICpzdGF0czsKKwlzdHJ1Y3Qgc3dTdGF0ICpzd3N0YXRzOwogCiAJaWYgKCFuaWMpCiAJCXJldHVybjsKIAogCWRldiA9IG5pYy0+ZGV2OwogCi0JbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKIAljb25maWcgPSAmbmljLT5jb25maWc7CisJbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKKwlzdGF0cyA9IG1hY19jb250cm9sLT5zdGF0c19pbmZvOworCXN3c3RhdHMgPSAmc3RhdHMtPnN3X3N0YXQ7CiAKLQlsc3Rfc2l6ZSA9IChzaXplb2Yoc3RydWN0IFR4RCkgKiBjb25maWctPm1heF90eGRzKTsKKwlsc3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgVHhEKSAqIGNvbmZpZy0+bWF4X3R4ZHM7CiAJbHN0X3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gbHN0X3NpemU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKSB7Ci0JCXBhZ2VfbnVtID0gVFhEX01FTV9QQUdFX0NOVChjb25maWctPnR4X2NmZ1tpXS5maWZvX2xlbiwKLQkJCQkJCQlsc3RfcGVyX3BhZ2UpOworCQlzdHJ1Y3QgZmlmb19pbmZvICpmaWZvID0gJm1hY19jb250cm9sLT5maWZvc1tpXTsKKwkJc3RydWN0IHR4X2ZpZm9fY29uZmlnICp0eF9jZmcgPSAmY29uZmlnLT50eF9jZmdbaV07CisKKwkJcGFnZV9udW0gPSBUWERfTUVNX1BBR0VfQ05UKHR4X2NmZy0+Zmlmb19sZW4sIGxzdF9wZXJfcGFnZSk7CiAJCWZvciAoaiA9IDA7IGogPCBwYWdlX251bTsgaisrKSB7CiAJCQlpbnQgbWVtX2Jsa3MgPSAoaiAqIGxzdF9wZXJfcGFnZSk7Ci0JCQlpZiAoIW1hY19jb250cm9sLT5maWZvc1tpXS5saXN0X2luZm8pCisJCQlzdHJ1Y3QgbGlzdF9pbmZvX2hvbGQgKmZsaTsKKworCQkJaWYgKCFmaWZvLT5saXN0X2luZm8pCiAJCQkJcmV0dXJuOwotCQkJaWYgKCFtYWNfY29udHJvbC0+Zmlmb3NbaV0ubGlzdF9pbmZvW21lbV9ibGtzXS4KLQkJCQkgbGlzdF92aXJ0X2FkZHIpCisKKwkJCWZsaSA9ICZmaWZvLT5saXN0X2luZm9bbWVtX2Jsa3NdOworCQkJaWYgKCFmbGktPmxpc3RfdmlydF9hZGRyKQogCQkJCWJyZWFrOwogCQkJcGNpX2ZyZWVfY29uc2lzdGVudChuaWMtPnBkZXYsIFBBR0VfU0laRSwKLQkJCQkJICAgIG1hY19jb250cm9sLT5maWZvc1tpXS4KLQkJCQkJICAgIGxpc3RfaW5mb1ttZW1fYmxrc10uCi0JCQkJCSAgICBsaXN0X3ZpcnRfYWRkciwKLQkJCQkJICAgIG1hY19jb250cm9sLT5maWZvc1tpXS4KLQkJCQkJICAgIGxpc3RfaW5mb1ttZW1fYmxrc10uCi0JCQkJCSAgICBsaXN0X3BoeV9hZGRyKTsKLQkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQKLQkJCQkJCSs9IFBBR0VfU0laRTsKKwkJCQkJICAgIGZsaS0+bGlzdF92aXJ0X2FkZHIsCisJCQkJCSAgICBmbGktPmxpc3RfcGh5X2FkZHIpOworCQkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IFBBR0VfU0laRTsKIAkJfQogCQkvKiBJZiB3ZSBnb3QgYSB6ZXJvIERNQSBhZGRyZXNzIGR1cmluZyBhbGxvY2F0aW9uLAogCQkgKiBmcmVlIHRoZSBwYWdlIG5vdwpAQCAtOTc5LDc5ICs5OTAsODAgQEAKIAkJCQkJICAgIG1hY19jb250cm9sLT56ZXJvZG1hX3ZpcnRfYWRkciwKIAkJCQkJICAgIChkbWFfYWRkcl90KTApOwogCQkJREJHX1BSSU5UKElOSVRfREJHLAotCQkJICAJIiVzOiBGcmVlaW5nIFR4REwgd2l0aCB6ZXJvIERNQSBhZGRyLiAiLAotCQkJCWRldi0+bmFtZSk7Ci0JCQlEQkdfUFJJTlQoSU5JVF9EQkcsICJWaXJ0dWFsIGFkZHJlc3MgJXBcbiIsCi0JCQkJbWFjX2NvbnRyb2wtPnplcm9kbWFfdmlydF9hZGRyKTsKLQkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQKLQkJCQkJCSs9IFBBR0VfU0laRTsKKwkJCQkgICIlczogRnJlZWluZyBUeERMIHdpdGggemVybyBETUEgYWRkcmVzcy4gIgorCQkJCSAgIlZpcnR1YWwgYWRkcmVzcyAlcFxuIiwKKwkJCQkgIGRldi0+bmFtZSwgbWFjX2NvbnRyb2wtPnplcm9kbWFfdmlydF9hZGRyKTsKKwkJCXN3c3RhdHMtPm1lbV9mcmVlZCArPSBQQUdFX1NJWkU7CiAJCX0KLQkJa2ZyZWUobWFjX2NvbnRyb2wtPmZpZm9zW2ldLmxpc3RfaW5mbyk7Ci0JCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0KLQkJKG5pYy0+Y29uZmlnLnR4X2NmZ1tpXS5maWZvX2xlbiAqc2l6ZW9mKHN0cnVjdCBsaXN0X2luZm9faG9sZCkpOworCQlrZnJlZShmaWZvLT5saXN0X2luZm8pOworCQlzd3N0YXRzLT5tZW1fZnJlZWQgKz0gdHhfY2ZnLT5maWZvX2xlbiAqCisJCQlzaXplb2Yoc3RydWN0IGxpc3RfaW5mb19ob2xkKTsKIAl9CiAKIAlzaXplID0gU0laRV9PRl9CTE9DSzsKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7Ci0JCWJsa19jbnQgPSBtYWNfY29udHJvbC0+cmluZ3NbaV0uYmxvY2tfY291bnQ7CisJCXN0cnVjdCByaW5nX2luZm8gKnJpbmcgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldOworCisJCWJsa19jbnQgPSByaW5nLT5ibG9ja19jb3VudDsKIAkJZm9yIChqID0gMDsgaiA8IGJsa19jbnQ7IGorKykgewotCQkJdG1wX3ZfYWRkciA9IG1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9ibG9ja3Nbal0uCi0JCQkJYmxvY2tfdmlydF9hZGRyOwotCQkJdG1wX3BfYWRkciA9IG1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9ibG9ja3Nbal0uCi0JCQkJYmxvY2tfZG1hX2FkZHI7CisJCQl0bXBfdl9hZGRyID0gcmluZy0+cnhfYmxvY2tzW2pdLmJsb2NrX3ZpcnRfYWRkcjsKKwkJCXRtcF9wX2FkZHIgPSByaW5nLT5yeF9ibG9ja3Nbal0uYmxvY2tfZG1hX2FkZHI7CiAJCQlpZiAodG1wX3ZfYWRkciA9PSBOVUxMKQogCQkJCWJyZWFrOwogCQkJcGNpX2ZyZWVfY29uc2lzdGVudChuaWMtPnBkZXYsIHNpemUsCiAJCQkJCSAgICB0bXBfdl9hZGRyLCB0bXBfcF9hZGRyKTsKLQkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0gc2l6ZTsKLQkJCWtmcmVlKG1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9ibG9ja3Nbal0ucnhkcyk7Ci0JCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkICs9Ci0JCQkoIHNpemVvZihzdHJ1Y3QgcnhkX2luZm8pKiByeGRfY291bnRbbmljLT5yeGRfbW9kZV0pOworCQkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IHNpemU7CisJCQlrZnJlZShyaW5nLT5yeF9ibG9ja3Nbal0ucnhkcyk7CisJCQlzd3N0YXRzLT5tZW1fZnJlZWQgKz0gc2l6ZW9mKHN0cnVjdCByeGRfaW5mbykgKgorCQkJCXJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXTsKIAkJfQogCX0KIAogCWlmIChuaWMtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKSB7CiAJCS8qIEZyZWVpbmcgYnVmZmVyIHN0b3JhZ2UgYWRkcmVzc2VzIGluIDJCVUZGIG1vZGUuICovCiAJCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKLQkJCWJsa19jbnQgPSBjb25maWctPnJ4X2NmZ1tpXS5udW1fcnhkIC8KLQkJCSAgICAocnhkX2NvdW50W25pYy0+cnhkX21vZGVdICsgMSk7CisJCQlzdHJ1Y3QgcnhfcmluZ19jb25maWcgKnJ4X2NmZyA9ICZjb25maWctPnJ4X2NmZ1tpXTsKKwkJCXN0cnVjdCByaW5nX2luZm8gKnJpbmcgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldOworCisJCQlibGtfY250ID0gcnhfY2ZnLT5udW1fcnhkIC8KKwkJCQkocnhkX2NvdW50W25pYy0+cnhkX21vZGVdICsgMSk7CiAJCQlmb3IgKGogPSAwOyBqIDwgYmxrX2NudDsgaisrKSB7CiAJCQkJaW50IGsgPSAwOwotCQkJCWlmICghbWFjX2NvbnRyb2wtPnJpbmdzW2ldLmJhW2pdKQorCQkJCWlmICghcmluZy0+YmFbal0pCiAJCQkJCWNvbnRpbnVlOwogCQkJCXdoaWxlIChrICE9IHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSkgewotCQkJCQlzdHJ1Y3QgYnVmZkFkZCAqYmEgPQotCQkJCQkJJm1hY19jb250cm9sLT5yaW5nc1tpXS5iYVtqXVtrXTsKKwkJCQkJc3RydWN0IGJ1ZmZBZGQgKmJhID0gJnJpbmctPmJhW2pdW2tdOwogCQkJCQlrZnJlZShiYS0+YmFfMF9vcmcpOwotCQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuXAotCQkJCQltZW1fZnJlZWQgKz0gKEJVRjBfTEVOICsgQUxJR05fU0laRSk7CisJCQkJCXN3c3RhdHMtPm1lbV9mcmVlZCArPQorCQkJCQkJQlVGMF9MRU4gKyBBTElHTl9TSVpFOwogCQkJCQlrZnJlZShiYS0+YmFfMV9vcmcpOwotCQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuXAotCQkJCQltZW1fZnJlZWQgKz0gKEJVRjFfTEVOICsgQUxJR05fU0laRSk7CisJCQkJCXN3c3RhdHMtPm1lbV9mcmVlZCArPQorCQkJCQkJQlVGMV9MRU4gKyBBTElHTl9TSVpFOwogCQkJCQlrKys7CiAJCQkJfQotCQkJCWtmcmVlKG1hY19jb250cm9sLT5yaW5nc1tpXS5iYVtqXSk7Ci0JCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZCArPQotCQkJCQkoc2l6ZW9mKHN0cnVjdCBidWZmQWRkKSAqCi0JCQkJCShyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxKSk7CisJCQkJa2ZyZWUocmluZy0+YmFbal0pOworCQkJCXN3c3RhdHMtPm1lbV9mcmVlZCArPSBzaXplb2Yoc3RydWN0IGJ1ZmZBZGQpICoKKwkJCQkJKHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSArIDEpOwogCQkJfQotCQkJa2ZyZWUobWFjX2NvbnRyb2wtPnJpbmdzW2ldLmJhKTsKLQkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0KLQkJCShzaXplb2Yoc3RydWN0IGJ1ZmZBZGQgKikgKiBibGtfY250KTsKKwkJCWtmcmVlKHJpbmctPmJhKTsKKwkJCXN3c3RhdHMtPm1lbV9mcmVlZCArPSBzaXplb2Yoc3RydWN0IGJ1ZmZBZGQgKikgKgorCQkJCWJsa19jbnQ7CiAJCX0KIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbmljLT5jb25maWcudHhfZmlmb19udW07IGkrKykgewotCQlpZiAobWFjX2NvbnRyb2wtPmZpZm9zW2ldLnVmb19pbl9iYW5kX3YpIHsKLQkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQKLQkJCQkrPSAoY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW4gKiBzaXplb2YodTY0KSk7Ci0JCQlrZnJlZShtYWNfY29udHJvbC0+Zmlmb3NbaV0udWZvX2luX2JhbmRfdik7CisJCXN0cnVjdCBmaWZvX2luZm8gKmZpZm8gPSAmbWFjX2NvbnRyb2wtPmZpZm9zW2ldOworCQlzdHJ1Y3QgdHhfZmlmb19jb25maWcgKnR4X2NmZyA9ICZjb25maWctPnR4X2NmZ1tpXTsKKworCQlpZiAoZmlmby0+dWZvX2luX2JhbmRfdikgeworCQkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IHR4X2NmZy0+Zmlmb19sZW4gKgorCQkJCXNpemVvZih1NjQpOworCQkJa2ZyZWUoZmlmby0+dWZvX2luX2JhbmRfdik7CiAJCX0KIAl9CiAKIAlpZiAobWFjX2NvbnRyb2wtPnN0YXRzX21lbSkgewotCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkICs9Ci0JCQltYWNfY29udHJvbC0+c3RhdHNfbWVtX3N6OworCQlzd3N0YXRzLT5tZW1fZnJlZWQgKz0gbWFjX2NvbnRyb2wtPnN0YXRzX21lbV9zejsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChuaWMtPnBkZXYsCiAJCQkJICAgIG1hY19jb250cm9sLT5zdGF0c19tZW1fc3osCiAJCQkJICAgIG1hY19jb250cm9sLT5zdGF0c19tZW0sCkBAIC0xMDcyLDcgKzEwODQsNyBAQAogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnBjaV9tb2RlKTsKIAltb2RlID0gKHU4KUdFVF9QQ0lfTU9ERSh2YWw2NCk7CiAKLQlpZiAoIHZhbDY0ICYgUENJX01PREVfVU5LTk9XTl9NT0RFKQorCWlmICh2YWw2NCAmIFBDSV9NT0RFX1VOS05PV05fTU9ERSkKIAkJcmV0dXJuIC0xOyAgICAgIC8qIFVua25vd24gUENJIG1vZGUgKi8KIAlyZXR1cm4gbW9kZTsKIH0KQEAgLTExMDMsNTUgKzExMTUsNTQgQEAKIAlyZWdpc3RlciB1NjQgdmFsNjQgPSAwOwogCWludAltb2RlOwogCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZyA9ICZuaWMtPmNvbmZpZzsKKwljb25zdCBjaGFyICpwY2ltb2RlOwogCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+cGNpX21vZGUpOwogCW1vZGUgPSAodTgpR0VUX1BDSV9NT0RFKHZhbDY0KTsKIAotCWlmICggdmFsNjQgJiBQQ0lfTU9ERV9VTktOT1dOX01PREUpCisJaWYgKHZhbDY0ICYgUENJX01PREVfVU5LTk9XTl9NT0RFKQogCQlyZXR1cm4gLTE7CS8qIFVua25vd24gUENJIG1vZGUgKi8KIAogCWNvbmZpZy0+YnVzX3NwZWVkID0gYnVzX3NwZWVkW21vZGVdOwogCiAJaWYgKHMyaW9fb25fbmVjX2JyaWRnZShuaWMtPnBkZXYpKSB7CiAJCURCR19QUklOVChFUlJfREJHLCAiJXM6IERldmljZSBpcyBvbiBQQ0ktRSBidXNcbiIsCi0JCQkJCQkJbmljLT5kZXYtPm5hbWUpOworCQkJICBuaWMtPmRldi0+bmFtZSk7CiAJCXJldHVybiBtb2RlOwogCX0KIAotCWlmICh2YWw2NCAmIFBDSV9NT0RFXzMyX0JJVFMpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGV2aWNlIGlzIG9uIDMyIGJpdCAiLCBuaWMtPmRldi0+bmFtZSk7Ci0JfSBlbHNlIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGV2aWNlIGlzIG9uIDY0IGJpdCAiLCBuaWMtPmRldi0+bmFtZSk7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBQQ0lfTU9ERV9QQ0lfMzM6CisJCXBjaW1vZGUgPSAiMzNNSHogUENJIGJ1cyI7CisJCWJyZWFrOworCWNhc2UgUENJX01PREVfUENJXzY2OgorCQlwY2ltb2RlID0gIjY2TUh6IFBDSSBidXMiOworCQlicmVhazsKKwljYXNlIFBDSV9NT0RFX1BDSVhfTTFfNjY6CisJCXBjaW1vZGUgPSAiNjZNSHogUENJWChNMSkgYnVzIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfTU9ERV9QQ0lYX00xXzEwMDoKKwkJcGNpbW9kZSA9ICIxMDBNSHogUENJWChNMSkgYnVzIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfTU9ERV9QQ0lYX00xXzEzMzoKKwkJcGNpbW9kZSA9ICIxMzNNSHogUENJWChNMSkgYnVzIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfTU9ERV9QQ0lYX00yXzY2OgorCQlwY2ltb2RlID0gIjEzM01IeiBQQ0lYKE0yKSBidXMiOworCQlicmVhazsKKwljYXNlIFBDSV9NT0RFX1BDSVhfTTJfMTAwOgorCQlwY2ltb2RlID0gIjIwME1IeiBQQ0lYKE0yKSBidXMiOworCQlicmVhazsKKwljYXNlIFBDSV9NT0RFX1BDSVhfTTJfMTMzOgorCQlwY2ltb2RlID0gIjI2Nk1IeiBQQ0lYKE0yKSBidXMiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwY2ltb2RlID0gInVuc3VwcG9ydGVkIGJ1cyEiOworCQltb2RlID0gLTE7CiAJfQogCi0Jc3dpdGNoKG1vZGUpIHsKLQkJY2FzZSBQQ0lfTU9ERV9QQ0lfMzM6Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgIjMzTUh6IFBDSSBidXNcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX01PREVfUENJXzY2OgotCQkJREJHX1BSSU5UKEVSUl9EQkcsICI2Nk1IeiBQQ0kgYnVzXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9NT0RFX1BDSVhfTTFfNjY6Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgIjY2TUh6IFBDSVgoTTEpIGJ1c1xuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfTU9ERV9QQ0lYX00xXzEwMDoKLQkJCURCR19QUklOVChFUlJfREJHLCAiMTAwTUh6IFBDSVgoTTEpIGJ1c1xuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfTU9ERV9QQ0lYX00xXzEzMzoKLQkJCURCR19QUklOVChFUlJfREJHLCAiMTMzTUh6IFBDSVgoTTEpIGJ1c1xuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfTU9ERV9QQ0lYX00yXzY2OgotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIxMzNNSHogUENJWChNMikgYnVzXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9NT0RFX1BDSVhfTTJfMTAwOgotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIyMDBNSHogUENJWChNMikgYnVzXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9NT0RFX1BDSVhfTTJfMTMzOgotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIyNjZNSHogUENJWChNMikgYnVzXG4iKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC0xOwkvKiBVbnN1cHBvcnRlZCBidXMgc3BlZWQgKi8KLQl9CisJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGV2aWNlIGlzIG9uICVkIGJpdCAlc1xuIiwKKwkJICBuaWMtPmRldi0+bmFtZSwgdmFsNjQgJiBQQ0lfTU9ERV8zMl9CSVRTID8gMzIgOiA2NCwgcGNpbW9kZSk7CiAKIAlyZXR1cm4gbW9kZTsKIH0KQEAgLTExNzEsOSArMTE4Miw3IEBACiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gbmljLT5iYXIwOwogCXJlZ2lzdGVyIHU2NCB2YWw2NCA9IDA7CiAJaW50IGk7Ci0Jc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOwotCi0JY29uZmlnID0gJm5pYy0+Y29uZmlnOworCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZyA9ICZuaWMtPmNvbmZpZzsKIAogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnR4X2ZpZm9fbnVtOyBpKyspIHsKIAkJLyoKQEAgLTExODgsOSArMTE5Nyw5IEBACiAJCQl2YWw2NCA9IFRUSV9EQVRBMV9NRU1fVFhfVElNRVJfVkFMKDB4MjA3OCk7CiAKIAkJdmFsNjQgfD0gVFRJX0RBVEExX01FTV9UWF9VUk5HX0EoMHhBKSB8Ci0JCQkJVFRJX0RBVEExX01FTV9UWF9VUk5HX0IoMHgxMCkgfAotCQkJCVRUSV9EQVRBMV9NRU1fVFhfVVJOR19DKDB4MzApIHwKLQkJCQlUVElfREFUQTFfTUVNX1RYX1RJTUVSX0FDX0VOOworCQkJVFRJX0RBVEExX01FTV9UWF9VUk5HX0IoMHgxMCkgfAorCQkJVFRJX0RBVEExX01FTV9UWF9VUk5HX0MoMHgzMCkgfAorCQkJVFRJX0RBVEExX01FTV9UWF9USU1FUl9BQ19FTjsKIAkJaWYgKGkgPT0gMCkKIAkJCWlmICh1c2VfY29udGludW91c190eF9pbnRycyAmJiAobGluayA9PSBMSU5LX1VQKSkKIAkJCQl2YWw2NCB8PSBUVElfREFUQTFfTUVNX1RYX1RJTUVSX0NJX0VOOwpAQCAtMTIwMywxMSArMTIxMiwxMSBAQAogCQkJCVRUSV9EQVRBMl9NRU1fVFhfVUZDX0QoMHgzMDApOwogCQl9IGVsc2UgewogCQkJaWYgKChuaWMtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlID09Ci0JCQkJVFhfREVGQVVMVF9TVEVFUklORykgJiYKLQkJCQkoY29uZmlnLT50eF9maWZvX251bSA+IDEpICYmCi0JCQkJKGkgPj0gbmljLT51ZHBfZmlmb19pZHgpICYmCi0JCQkJKGkgPCAobmljLT51ZHBfZmlmb19pZHggKwotCQkJCW5pYy0+dG90YWxfdWRwX2ZpZm9zKSkpCisJCQkgICAgIFRYX0RFRkFVTFRfU1RFRVJJTkcpICYmCisJCQkgICAgKGNvbmZpZy0+dHhfZmlmb19udW0gPiAxKSAmJgorCQkJICAgIChpID49IG5pYy0+dWRwX2ZpZm9faWR4KSAmJgorCQkJICAgIChpIDwgKG5pYy0+dWRwX2ZpZm9faWR4ICsKKwkJCQkgIG5pYy0+dG90YWxfdWRwX2ZpZm9zKSkpCiAJCQkJdmFsNjQgPSBUVElfREFUQTJfTUVNX1RYX1VGQ19BKDB4NTApIHwKIAkJCQkJVFRJX0RBVEEyX01FTV9UWF9VRkNfQigweDgwKSB8CiAJCQkJCVRUSV9EQVRBMl9NRU1fVFhfVUZDX0MoMHgxMDApIHwKQEAgLTEyMjEsMTIgKzEyMzAsMTQgQEAKIAogCQl3cml0ZXEodmFsNjQsICZiYXIwLT50dGlfZGF0YTJfbWVtKTsKIAotCQl2YWw2NCA9IFRUSV9DTURfTUVNX1dFIHwgVFRJX0NNRF9NRU1fU1RST0JFX05FV19DTUQgfAotCQkJCVRUSV9DTURfTUVNX09GRlNFVChpKTsKKwkJdmFsNjQgPSBUVElfQ01EX01FTV9XRSB8CisJCQlUVElfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCB8CisJCQlUVElfQ01EX01FTV9PRkZTRVQoaSk7CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnR0aV9jb21tYW5kX21lbSk7CiAKIAkJaWYgKHdhaXRfZm9yX2NtZF9jb21wbGV0ZSgmYmFyMC0+dHRpX2NvbW1hbmRfbWVtLAotCQkJVFRJX0NNRF9NRU1fU1RST0JFX05FV19DTUQsIFMySU9fQklUX1JFU0VUKSAhPSBTVUNDRVNTKQorCQkJCQkgIFRUSV9DTURfTUVNX1NUUk9CRV9ORVdfQ01ELAorCQkJCQkgIFMySU9fQklUX1JFU0VUKSAhPSBTVUNDRVNTKQogCQkJcmV0dXJuIEZBSUxVUkU7CiAJfQogCkBAIC0xMjUwLDE4ICsxMjYxLDE1IEBACiAJdm9pZCBfX2lvbWVtICphZGQ7CiAJdTMyIHRpbWU7CiAJaW50IGksIGo7Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKLQlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7CiAJaW50IGR0eF9jbnQgPSAwOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fc2hhcmU7CiAJaW50IG1lbV9zaXplOwotCi0JbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKLQljb25maWcgPSAmbmljLT5jb25maWc7CisJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnID0gJm5pYy0+Y29uZmlnOworCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKIAogCS8qIHRvIHNldCB0aGUgc3dhcHBlciBjb250cm9sZSBvbiB0aGUgY2FyZCAqLwotCWlmKHMyaW9fc2V0X3N3YXBwZXIobmljKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywiRVJST1I6IFNldHRpbmcgU3dhcHBlciBmYWlsZWRcbiIpOworCWlmIChzMmlvX3NldF9zd2FwcGVyKG5pYykpIHsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJFUlJPUjogU2V0dGluZyBTd2FwcGVyIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTMwMCw3ICsxMzA4LDcgQEAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT5tYWNfY2ZnKTsKIAl2YWw2NCB8PSBNQUNfUk1BQ19CQ0FTVF9FTkFCTEU7CiAJd3JpdGVxKFJNQUNfQ0ZHX0tFWSgweDRDMEQpLCAmYmFyMC0+cm1hY19jZmdfa2V5KTsKLQl3cml0ZWwoKHUzMikgdmFsNjQsIGFkZCk7CisJd3JpdGVsKCh1MzIpdmFsNjQsIGFkZCk7CiAJd3JpdGVxKFJNQUNfQ0ZHX0tFWSgweDRDMEQpLCAmYmFyMC0+cm1hY19jZmdfa2V5KTsKIAl3cml0ZWwoKHUzMikgKHZhbDY0ID4+IDMyKSwgKGFkZCArIDQpKTsKIApAQCAtMTMzNywxMiArMTM0NSwxMSBAQAogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnR4X2ZpZm9fcGFydGl0aW9uXzIpOwogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnR4X2ZpZm9fcGFydGl0aW9uXzMpOwogCi0KIAlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykgewotCQl2YWw2NCB8PQotCQkgICAgdkJJVChjb25maWctPnR4X2NmZ1tpXS5maWZvX2xlbiAtIDEsICgoaiAqIDMyKSArIDE5KSwKLQkJCSAxMykgfCB2QklUKGNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fcHJpb3JpdHksCi0JCQkJICAgICgoaiAqIDMyKSArIDUpLCAzKTsKKwkJc3RydWN0IHR4X2ZpZm9fY29uZmlnICp0eF9jZmcgPSAmY29uZmlnLT50eF9jZmdbaV07CisKKwkJdmFsNjQgfD0gdkJJVCh0eF9jZmctPmZpZm9fbGVuIC0gMSwgKChqICogMzIpICsgMTkpLCAxMykgfAorCQkJdkJJVCh0eF9jZmctPmZpZm9fcHJpb3JpdHksICgoaiAqIDMyKSArIDUpLCAzKTsKIAogCQlpZiAoaSA9PSAoY29uZmlnLT50eF9maWZvX251bSAtIDEpKSB7CiAJCQlpZiAoaSAlIDIgPT0gMCkKQEAgLTEzODAsMjkgKzEzODcsMzAgQEAKIAkgKiBEaXNhYmxlIDQgUENDcyBmb3IgWGVuYTEsIDIgYW5kIDMgYXMgcGVyIEgvVyBidWcKIAkgKiBTWEUtMDA4IFRSQU5TTUlUIERNQSBBUkJJVFJBVElPTiBJU1NVRS4KIAkgKi8KLQlpZiAoKG5pYy0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lfREVWSUNFKSAmJgotCQkobmljLT5wZGV2LT5yZXZpc2lvbiA8IDQpKQorCWlmICgobmljLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSV9ERVZJQ0UpICYmIChuaWMtPnBkZXYtPnJldmlzaW9uIDwgNCkpCiAJCXdyaXRlcShQQ0NfRU5BQkxFX0ZPVVIsICZiYXIwLT5wY2NfZW5hYmxlKTsKIAogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnR4X2ZpZm9fcGFydGl0aW9uXzApOwogCURCR19QUklOVChJTklUX0RCRywgIkZpZm8gcGFydGl0aW9uIGF0OiAweCVwIGlzOiAweCVsbHhcbiIsCi0JCSAgJmJhcjAtPnR4X2ZpZm9fcGFydGl0aW9uXzAsICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbDY0KTsKKwkJICAmYmFyMC0+dHhfZmlmb19wYXJ0aXRpb25fMCwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWw2NCk7CiAKIAkvKgogCSAqIEluaXRpYWxpemF0aW9uIG9mIFR4X1BBX0NPTkZJRyByZWdpc3RlciB0byBpZ25vcmUgcGFja2V0CiAJICogaW50ZWdyaXR5IGNoZWNraW5nLgogCSAqLwogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnR4X3BhX2NmZyk7Ci0JdmFsNjQgfD0gVFhfUEFfQ0ZHX0lHTk9SRV9GUk1fRVJSIHwgVFhfUEFfQ0ZHX0lHTk9SRV9TTkFQX09VSSB8Ci0JICAgIFRYX1BBX0NGR19JR05PUkVfTExDX0NUUkwgfCBUWF9QQV9DRkdfSUdOT1JFX0wyX0VSUjsKKwl2YWw2NCB8PSBUWF9QQV9DRkdfSUdOT1JFX0ZSTV9FUlIgfAorCQlUWF9QQV9DRkdfSUdOT1JFX1NOQVBfT1VJIHwKKwkJVFhfUEFfQ0ZHX0lHTk9SRV9MTENfQ1RSTCB8CisJCVRYX1BBX0NGR19JR05PUkVfTDJfRVJSOwogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnR4X3BhX2NmZyk7CiAKIAkvKiBSeCBETUEgaW50aWFsaXphdGlvbi4gKi8KIAl2YWw2NCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQl2YWw2NCB8PQotCQkgICAgdkJJVChjb25maWctPnJ4X2NmZ1tpXS5yaW5nX3ByaW9yaXR5LCAoNSArIChpICogOCkpLAotCQkJIDMpOworCQlzdHJ1Y3QgcnhfcmluZ19jb25maWcgKnJ4X2NmZyA9ICZjb25maWctPnJ4X2NmZ1tpXTsKKworCQl2YWw2NCB8PSB2QklUKHJ4X2NmZy0+cmluZ19wcmlvcml0eSwgKDUgKyAoaSAqIDgpKSwgMyk7CiAJfQogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJ4X3F1ZXVlX3ByaW9yaXR5KTsKIApAQCAtMTY4NiwxNiArMTY5NCwxNiBAQAogCQkgKi8KIAkJaWYgKHJ0c19mcm1fbGVuW2ldICE9IDApIHsKIAkJCXdyaXRlcShNQUNfUlRTX0ZSTV9MRU5fU0VUKHJ0c19mcm1fbGVuW2ldKSwKLQkJCQkmYmFyMC0+cnRzX2ZybV9sZW5fbltpXSk7CisJCQkgICAgICAgJmJhcjAtPnJ0c19mcm1fbGVuX25baV0pOwogCQl9CiAJfQogCiAJLyogRGlzYWJsZSBkaWZmZXJlbnRpYXRlZCBzZXJ2aWNlcyBzdGVlcmluZyBsb2dpYyAqLwogCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CiAJCWlmIChydHNfZHNfc3RlZXIobmljLCBpLCAwKSA9PSBGQUlMVVJFKSB7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBmYWlsZWQgcnRzIGRzIHN0ZWVyaW5nIiwKLQkJCQlkZXYtPm5hbWUpOwotCQkJREJHX1BSSU5UKEVSUl9EQkcsICJzZXQgb24gY29kZXBvaW50ICVkXG4iLCBpKTsKKwkJCURCR19QUklOVChFUlJfREJHLAorCQkJCSAgIiVzOiBydHNfZHNfc3RlZXIgZmFpbGVkIG9uIGNvZGVwb2ludCAlZFxuIiwKKwkJCQkgIGRldi0+bmFtZSwgaSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KQEAgLTE3MTMsNyArMTcyMSw3IEBACiAJICogYmFuZHdpZHRoIHV0aWxpemF0aW9uLgogCSAqLwogCXZhbDY0ID0gTUFDX1RYX0xJTktfVVRJTF9WQUwodG1hY191dGlsX3BlcmlvZCkgfAotCSAgICBNQUNfUlhfTElOS19VVElMX1ZBTChybWFjX3V0aWxfcGVyaW9kKTsKKwkJTUFDX1JYX0xJTktfVVRJTF9WQUwocm1hY191dGlsX3BlcmlvZCk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWFjX2xpbmtfdXRpbCk7CiAKIAkvKgpAQCAtMTczNiwyNCArMTc0NCwyNiBAQAogCX0gZWxzZQogCQl2YWw2NCA9IFJUSV9EQVRBMV9NRU1fUlhfVElNRVJfVkFMKDB4RkZGKTsKIAl2YWw2NCB8PSBSVElfREFUQTFfTUVNX1JYX1VSTkdfQSgweEEpIHwKLQkJIFJUSV9EQVRBMV9NRU1fUlhfVVJOR19CKDB4MTApIHwKLQkJIFJUSV9EQVRBMV9NRU1fUlhfVVJOR19DKDB4MzApIHwgUlRJX0RBVEExX01FTV9SWF9USU1FUl9BQ19FTjsKKwkJUlRJX0RBVEExX01FTV9SWF9VUk5HX0IoMHgxMCkgfAorCQlSVElfREFUQTFfTUVNX1JYX1VSTkdfQygweDMwKSB8CisJCVJUSV9EQVRBMV9NRU1fUlhfVElNRVJfQUNfRU47CiAKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5ydGlfZGF0YTFfbWVtKTsKIAogCXZhbDY0ID0gUlRJX0RBVEEyX01FTV9SWF9VRkNfQSgweDEpIHwKIAkJUlRJX0RBVEEyX01FTV9SWF9VRkNfQigweDIpIDsKIAlpZiAobmljLT5jb25maWcuaW50cl90eXBlID09IE1TSV9YKQotCSAgICB2YWw2NCB8PSAoUlRJX0RBVEEyX01FTV9SWF9VRkNfQygweDIwKSB8IFwKLQkJCVJUSV9EQVRBMl9NRU1fUlhfVUZDX0QoMHg0MCkpOworCQl2YWw2NCB8PSAoUlRJX0RBVEEyX01FTV9SWF9VRkNfQygweDIwKSB8CisJCQkgIFJUSV9EQVRBMl9NRU1fUlhfVUZDX0QoMHg0MCkpOwogCWVsc2UKLQkgICAgdmFsNjQgfD0gKFJUSV9EQVRBMl9NRU1fUlhfVUZDX0MoMHg0MCkgfCBcCi0JCQlSVElfREFUQTJfTUVNX1JYX1VGQ19EKDB4ODApKTsKKwkJdmFsNjQgfD0gKFJUSV9EQVRBMl9NRU1fUlhfVUZDX0MoMHg0MCkgfAorCQkJICBSVElfREFUQTJfTUVNX1JYX1VGQ19EKDB4ODApKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5ydGlfZGF0YTJfbWVtKTsKIAogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKLQkJdmFsNjQgPSBSVElfQ01EX01FTV9XRSB8IFJUSV9DTURfTUVNX1NUUk9CRV9ORVdfQ01ECi0JCQkJfCBSVElfQ01EX01FTV9PRkZTRVQoaSk7CisJCXZhbDY0ID0gUlRJX0NNRF9NRU1fV0UgfAorCQkJUlRJX0NNRF9NRU1fU1RST0JFX05FV19DTUQgfAorCQkJUlRJX0NNRF9NRU1fT0ZGU0VUKGkpOwogCQl3cml0ZXEodmFsNjQsICZiYXIwLT5ydGlfY29tbWFuZF9tZW0pOwogCiAJCS8qCkBAIC0xNzcwLDcgKzE3ODAsNyBAQAogCQkJCWJyZWFrOwogCiAJCQlpZiAodGltZSA+IDEwKSB7Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogUlRJIGluaXQgRmFpbGVkXG4iLAorCQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IFJUSSBpbml0IGZhaWxlZFxuIiwKIAkJCQkJICBkZXYtPm5hbWUpOwogCQkJCXJldHVybiAtRU5PREVWOwogCQkJfQpAQCAtMTgyNiwxOSArMTgzNiwxNyBAQAogCSAqLwogCXZhbDY0ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXZhbDY0IHw9Ci0JCSAgICAoKCh1NjQpIDB4RkYwMCB8IG5pYy0+bWFjX2NvbnRyb2wuCi0JCSAgICAgIG1jX3BhdXNlX3RocmVzaG9sZF9xMHEzKQotCQkgICAgIDw8IChpICogMiAqIDgpKTsKKwkJdmFsNjQgfD0gKCgodTY0KTB4RkYwMCB8CisJCQkgICBuaWMtPm1hY19jb250cm9sLm1jX3BhdXNlX3RocmVzaG9sZF9xMHEzKQorCQkJICA8PCAoaSAqIDIgKiA4KSk7CiAJfQogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPm1jX3BhdXNlX3RocmVzaF9xMHEzKTsKIAogCXZhbDY0ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXZhbDY0IHw9Ci0JCSAgICAoKCh1NjQpIDB4RkYwMCB8IG5pYy0+bWFjX2NvbnRyb2wuCi0JCSAgICAgIG1jX3BhdXNlX3RocmVzaG9sZF9xNHE3KQotCQkgICAgIDw8IChpICogMiAqIDgpKTsKKwkJdmFsNjQgfD0gKCgodTY0KTB4RkYwMCB8CisJCQkgICBuaWMtPm1hY19jb250cm9sLm1jX3BhdXNlX3RocmVzaG9sZF9xNHE3KQorCQkJICA8PCAoaSAqIDIgKiA4KSk7CiAJfQogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPm1jX3BhdXNlX3RocmVzaF9xNHE3KTsKIApAQCAtMTkwMSwxMCArMTkwOSwxMCBAQAogCiAJdGVtcDY0ID0gcmVhZHEoYWRkcik7CiAKLQlpZihmbGFnID09IEVOQUJMRV9JTlRSUykKLQkJdGVtcDY0ICY9IH4oKHU2NCkgdmFsdWUpOworCWlmIChmbGFnID09IEVOQUJMRV9JTlRSUykKKwkJdGVtcDY0ICY9IH4oKHU2NCl2YWx1ZSk7CiAJZWxzZQotCQl0ZW1wNjQgfD0gKCh1NjQpIHZhbHVlKTsKKwkJdGVtcDY0IHw9ICgodTY0KXZhbHVlKTsKIAl3cml0ZXEodGVtcDY0LCBhZGRyKTsKIH0KIApAQCAtMTkxNiwxMjQgKzE5MjQsMTI1IEBACiAKIAl3cml0ZXEoRElTQUJMRV9BTExfSU5UUlMsICZiYXIwLT5nZW5lcmFsX2ludF9tYXNrKTsKIAlpZiAobWFzayAmIFRYX0RNQV9JTlRSKSB7Ci0KIAkJZ2VuX2ludF9tYXNrIHw9IFRYRE1BX0lOVF9NOwogCiAJCWRvX3MyaW9fd3JpdGVfYml0cyhUWERNQV9UREFfSU5UIHwgVFhETUFfUEZDX0lOVCB8Ci0JCQkJVFhETUFfUENDX0lOVCB8IFRYRE1BX1RUSV9JTlQgfAotCQkJCVRYRE1BX0xTT19JTlQgfCBUWERNQV9UUEFfSU5UIHwKLQkJCQlUWERNQV9TTV9JTlQsIGZsYWcsICZiYXIwLT50eGRtYV9pbnRfbWFzayk7CisJCQkJICAgVFhETUFfUENDX0lOVCB8IFRYRE1BX1RUSV9JTlQgfAorCQkJCSAgIFRYRE1BX0xTT19JTlQgfCBUWERNQV9UUEFfSU5UIHwKKwkJCQkgICBUWERNQV9TTV9JTlQsIGZsYWcsICZiYXIwLT50eGRtYV9pbnRfbWFzayk7CiAKIAkJZG9fczJpb193cml0ZV9iaXRzKFBGQ19FQ0NfREJfRVJSIHwgUEZDX1NNX0VSUl9BTEFSTSB8Ci0JCQkJUEZDX01JU0NfMF9FUlIgfCBQRkNfTUlTQ18xX0VSUiB8Ci0JCQkJUEZDX1BDSVhfRVJSIHwgUEZDX0VDQ19TR19FUlIsIGZsYWcsCi0JCQkJJmJhcjAtPnBmY19lcnJfbWFzayk7CisJCQkJICAgUEZDX01JU0NfMF9FUlIgfCBQRkNfTUlTQ18xX0VSUiB8CisJCQkJICAgUEZDX1BDSVhfRVJSIHwgUEZDX0VDQ19TR19FUlIsIGZsYWcsCisJCQkJICAgJmJhcjAtPnBmY19lcnJfbWFzayk7CiAKIAkJZG9fczJpb193cml0ZV9iaXRzKFREQV9Gbl9FQ0NfREJfRVJSIHwgVERBX1NNMF9FUlJfQUxBUk0gfAotCQkJCVREQV9TTTFfRVJSX0FMQVJNIHwgVERBX0ZuX0VDQ19TR19FUlIgfAotCQkJCVREQV9QQ0lYX0VSUiwgZmxhZywgJmJhcjAtPnRkYV9lcnJfbWFzayk7CisJCQkJICAgVERBX1NNMV9FUlJfQUxBUk0gfCBUREFfRm5fRUNDX1NHX0VSUiB8CisJCQkJICAgVERBX1BDSVhfRVJSLCBmbGFnLCAmYmFyMC0+dGRhX2Vycl9tYXNrKTsKIAogCQlkb19zMmlvX3dyaXRlX2JpdHMoUENDX0ZCX0VDQ19EQl9FUlIgfCBQQ0NfVFhCX0VDQ19EQl9FUlIgfAotCQkJCVBDQ19TTV9FUlJfQUxBUk0gfCBQQ0NfV1JfRVJSX0FMQVJNIHwKLQkJCQlQQ0NfTl9TRVJSIHwgUENDXzZfQ09GX09WX0VSUiB8Ci0JCQkJUENDXzdfQ09GX09WX0VSUiB8IFBDQ182X0xTT19PVl9FUlIgfAotCQkJCVBDQ183X0xTT19PVl9FUlIgfCBQQ0NfRkJfRUNDX1NHX0VSUiB8Ci0JCQkJUENDX1RYQl9FQ0NfU0dfRVJSLCBmbGFnLCAmYmFyMC0+cGNjX2Vycl9tYXNrKTsKKwkJCQkgICBQQ0NfU01fRVJSX0FMQVJNIHwgUENDX1dSX0VSUl9BTEFSTSB8CisJCQkJICAgUENDX05fU0VSUiB8IFBDQ182X0NPRl9PVl9FUlIgfAorCQkJCSAgIFBDQ183X0NPRl9PVl9FUlIgfCBQQ0NfNl9MU09fT1ZfRVJSIHwKKwkJCQkgICBQQ0NfN19MU09fT1ZfRVJSIHwgUENDX0ZCX0VDQ19TR19FUlIgfAorCQkJCSAgIFBDQ19UWEJfRUNDX1NHX0VSUiwKKwkJCQkgICBmbGFnLCAmYmFyMC0+cGNjX2Vycl9tYXNrKTsKIAogCQlkb19zMmlvX3dyaXRlX2JpdHMoVFRJX1NNX0VSUl9BTEFSTSB8IFRUSV9FQ0NfU0dfRVJSIHwKLQkJCQlUVElfRUNDX0RCX0VSUiwgZmxhZywgJmJhcjAtPnR0aV9lcnJfbWFzayk7CisJCQkJICAgVFRJX0VDQ19EQl9FUlIsIGZsYWcsICZiYXIwLT50dGlfZXJyX21hc2spOwogCiAJCWRvX3MyaW9fd3JpdGVfYml0cyhMU082X0FCT1JUIHwgTFNPN19BQk9SVCB8Ci0JCQkJTFNPNl9TTV9FUlJfQUxBUk0gfCBMU083X1NNX0VSUl9BTEFSTSB8Ci0JCQkJTFNPNl9TRU5EX09GTE9XIHwgTFNPN19TRU5EX09GTE9XLAotCQkJCWZsYWcsICZiYXIwLT5sc29fZXJyX21hc2spOworCQkJCSAgIExTTzZfU01fRVJSX0FMQVJNIHwgTFNPN19TTV9FUlJfQUxBUk0gfAorCQkJCSAgIExTTzZfU0VORF9PRkxPVyB8IExTTzdfU0VORF9PRkxPVywKKwkJCQkgICBmbGFnLCAmYmFyMC0+bHNvX2Vycl9tYXNrKTsKIAogCQlkb19zMmlvX3dyaXRlX2JpdHMoVFBBX1NNX0VSUl9BTEFSTSB8IFRQQV9UWF9GUk1fRFJPUCwKLQkJCQlmbGFnLCAmYmFyMC0+dHBhX2Vycl9tYXNrKTsKKwkJCQkgICBmbGFnLCAmYmFyMC0+dHBhX2Vycl9tYXNrKTsKIAogCQlkb19zMmlvX3dyaXRlX2JpdHMoU01fU01fRVJSX0FMQVJNLCBmbGFnLCAmYmFyMC0+c21fZXJyX21hc2spOwotCiAJfQogCiAJaWYgKG1hc2sgJiBUWF9NQUNfSU5UUikgewogCQlnZW5faW50X21hc2sgfD0gVFhNQUNfSU5UX007CiAJCWRvX3MyaW9fd3JpdGVfYml0cyhNQUNfSU5UX1NUQVRVU19UTUFDX0lOVCwgZmxhZywKLQkJCQkmYmFyMC0+bWFjX2ludF9tYXNrKTsKKwkJCQkgICAmYmFyMC0+bWFjX2ludF9tYXNrKTsKIAkJZG9fczJpb193cml0ZV9iaXRzKFRNQUNfVFhfQlVGX09WUk4gfCBUTUFDX1RYX1NNX0VSUiB8Ci0JCQkJVE1BQ19FQ0NfU0dfRVJSIHwgVE1BQ19FQ0NfREJfRVJSIHwKLQkJCQlUTUFDX0RFU0NfRUNDX1NHX0VSUiB8IFRNQUNfREVTQ19FQ0NfREJfRVJSLAotCQkJCWZsYWcsICZiYXIwLT5tYWNfdG1hY19lcnJfbWFzayk7CisJCQkJICAgVE1BQ19FQ0NfU0dfRVJSIHwgVE1BQ19FQ0NfREJfRVJSIHwKKwkJCQkgICBUTUFDX0RFU0NfRUNDX1NHX0VSUiB8IFRNQUNfREVTQ19FQ0NfREJfRVJSLAorCQkJCSAgIGZsYWcsICZiYXIwLT5tYWNfdG1hY19lcnJfbWFzayk7CiAJfQogCiAJaWYgKG1hc2sgJiBUWF9YR1hTX0lOVFIpIHsKIAkJZ2VuX2ludF9tYXNrIHw9IFRYWEdYU19JTlRfTTsKIAkJZG9fczJpb193cml0ZV9iaXRzKFhHWFNfSU5UX1NUQVRVU19UWEdYUywgZmxhZywKLQkJCQkmYmFyMC0+eGd4c19pbnRfbWFzayk7CisJCQkJICAgJmJhcjAtPnhneHNfaW50X21hc2spOwogCQlkb19zMmlvX3dyaXRlX2JpdHMoVFhHWFNfRVNUT1JFX1VGTE9XIHwgVFhHWFNfVFhfU01fRVJSIHwKLQkJCQlUWEdYU19FQ0NfU0dfRVJSIHwgVFhHWFNfRUNDX0RCX0VSUiwKLQkJCQlmbGFnLCAmYmFyMC0+eGd4c190eGd4c19lcnJfbWFzayk7CisJCQkJICAgVFhHWFNfRUNDX1NHX0VSUiB8IFRYR1hTX0VDQ19EQl9FUlIsCisJCQkJICAgZmxhZywgJmJhcjAtPnhneHNfdHhneHNfZXJyX21hc2spOwogCX0KIAogCWlmIChtYXNrICYgUlhfRE1BX0lOVFIpIHsKIAkJZ2VuX2ludF9tYXNrIHw9IFJYRE1BX0lOVF9NOwogCQlkb19zMmlvX3dyaXRlX2JpdHMoUlhETUFfSU5UX1JDX0lOVF9NIHwgUlhETUFfSU5UX1JQQV9JTlRfTSB8Ci0JCQkJUlhETUFfSU5UX1JEQV9JTlRfTSB8IFJYRE1BX0lOVF9SVElfSU5UX00sCi0JCQkJZmxhZywgJmJhcjAtPnJ4ZG1hX2ludF9tYXNrKTsKKwkJCQkgICBSWERNQV9JTlRfUkRBX0lOVF9NIHwgUlhETUFfSU5UX1JUSV9JTlRfTSwKKwkJCQkgICBmbGFnLCAmYmFyMC0+cnhkbWFfaW50X21hc2spOwogCQlkb19zMmlvX3dyaXRlX2JpdHMoUkNfUFJDbl9FQ0NfREJfRVJSIHwgUkNfRlRDX0VDQ19EQl9FUlIgfAotCQkJCVJDX1BSQ25fU01fRVJSX0FMQVJNIHwgUkNfRlRDX1NNX0VSUl9BTEFSTSB8Ci0JCQkJUkNfUFJDbl9FQ0NfU0dfRVJSIHwgUkNfRlRDX0VDQ19TR19FUlIgfAotCQkJCVJDX1JEQV9GQUlMX1dSX1JuLCBmbGFnLCAmYmFyMC0+cmNfZXJyX21hc2spOworCQkJCSAgIFJDX1BSQ25fU01fRVJSX0FMQVJNIHwgUkNfRlRDX1NNX0VSUl9BTEFSTSB8CisJCQkJICAgUkNfUFJDbl9FQ0NfU0dfRVJSIHwgUkNfRlRDX0VDQ19TR19FUlIgfAorCQkJCSAgIFJDX1JEQV9GQUlMX1dSX1JuLCBmbGFnLCAmYmFyMC0+cmNfZXJyX21hc2spOwogCQlkb19zMmlvX3dyaXRlX2JpdHMoUFJDX1BDSV9BQl9SRF9SbiB8IFBSQ19QQ0lfQUJfV1JfUm4gfAotCQkJCVBSQ19QQ0lfQUJfRl9XUl9SbiB8IFBSQ19QQ0lfRFBfUkRfUm4gfAotCQkJCVBSQ19QQ0lfRFBfV1JfUm4gfCBQUkNfUENJX0RQX0ZfV1JfUm4sIGZsYWcsCi0JCQkJJmJhcjAtPnByY19wY2l4X2Vycl9tYXNrKTsKKwkJCQkgICBQUkNfUENJX0FCX0ZfV1JfUm4gfCBQUkNfUENJX0RQX1JEX1JuIHwKKwkJCQkgICBQUkNfUENJX0RQX1dSX1JuIHwgUFJDX1BDSV9EUF9GX1dSX1JuLCBmbGFnLAorCQkJCSAgICZiYXIwLT5wcmNfcGNpeF9lcnJfbWFzayk7CiAJCWRvX3MyaW9fd3JpdGVfYml0cyhSUEFfU01fRVJSX0FMQVJNIHwgUlBBX0NSRURJVF9FUlIgfAotCQkJCVJQQV9FQ0NfU0dfRVJSIHwgUlBBX0VDQ19EQl9FUlIsIGZsYWcsCi0JCQkJJmJhcjAtPnJwYV9lcnJfbWFzayk7CisJCQkJICAgUlBBX0VDQ19TR19FUlIgfCBSUEFfRUNDX0RCX0VSUiwgZmxhZywKKwkJCQkgICAmYmFyMC0+cnBhX2Vycl9tYXNrKTsKIAkJZG9fczJpb193cml0ZV9iaXRzKFJEQV9SWERuX0VDQ19EQl9FUlIgfCBSREFfRlJNX0VDQ19EQl9OX0FFUlIgfAotCQkJCVJEQV9TTTFfRVJSX0FMQVJNIHwgUkRBX1NNMF9FUlJfQUxBUk0gfAotCQkJCVJEQV9SWERfRUNDX0RCX1NFUlIgfCBSREFfUlhEbl9FQ0NfU0dfRVJSIHwKLQkJCQlSREFfRlJNX0VDQ19TR19FUlIgfCBSREFfTUlTQ19FUlJ8UkRBX1BDSVhfRVJSLAotCQkJCWZsYWcsICZiYXIwLT5yZGFfZXJyX21hc2spOworCQkJCSAgIFJEQV9TTTFfRVJSX0FMQVJNIHwgUkRBX1NNMF9FUlJfQUxBUk0gfAorCQkJCSAgIFJEQV9SWERfRUNDX0RCX1NFUlIgfCBSREFfUlhEbl9FQ0NfU0dfRVJSIHwKKwkJCQkgICBSREFfRlJNX0VDQ19TR19FUlIgfAorCQkJCSAgIFJEQV9NSVNDX0VSUnxSREFfUENJWF9FUlIsCisJCQkJICAgZmxhZywgJmJhcjAtPnJkYV9lcnJfbWFzayk7CiAJCWRvX3MyaW9fd3JpdGVfYml0cyhSVElfU01fRVJSX0FMQVJNIHwKLQkJCQlSVElfRUNDX1NHX0VSUiB8IFJUSV9FQ0NfREJfRVJSLAotCQkJCWZsYWcsICZiYXIwLT5ydGlfZXJyX21hc2spOworCQkJCSAgIFJUSV9FQ0NfU0dfRVJSIHwgUlRJX0VDQ19EQl9FUlIsCisJCQkJICAgZmxhZywgJmJhcjAtPnJ0aV9lcnJfbWFzayk7CiAJfQogCiAJaWYgKG1hc2sgJiBSWF9NQUNfSU5UUikgewogCQlnZW5faW50X21hc2sgfD0gUlhNQUNfSU5UX007CiAJCWRvX3MyaW9fd3JpdGVfYml0cyhNQUNfSU5UX1NUQVRVU19STUFDX0lOVCwgZmxhZywKLQkJCQkmYmFyMC0+bWFjX2ludF9tYXNrKTsKLQkJaW50ZXJydXB0aWJsZSA9IFJNQUNfUlhfQlVGRl9PVlJOIHwgUk1BQ19SWF9TTV9FUlIgfAotCQkJCVJNQUNfVU5VU0VEX0lOVCB8IFJNQUNfU0lOR0xFX0VDQ19FUlIgfAotCQkJCVJNQUNfRE9VQkxFX0VDQ19FUlI7CisJCQkJICAgJmJhcjAtPm1hY19pbnRfbWFzayk7CisJCWludGVycnVwdGlibGUgPSAoUk1BQ19SWF9CVUZGX09WUk4gfCBSTUFDX1JYX1NNX0VSUiB8CisJCQkJIFJNQUNfVU5VU0VEX0lOVCB8IFJNQUNfU0lOR0xFX0VDQ19FUlIgfAorCQkJCSBSTUFDX0RPVUJMRV9FQ0NfRVJSKTsKIAkJaWYgKHMyaW9fbGlua19mYXVsdF9pbmRpY2F0aW9uKG5pYykgPT0gTUFDX1JNQUNfRVJSX1RJTUVSKQogCQkJaW50ZXJydXB0aWJsZSB8PSBSTUFDX0xJTktfU1RBVEVfQ0hBTkdFX0lOVDsKIAkJZG9fczJpb193cml0ZV9iaXRzKGludGVycnVwdGlibGUsCi0JCQkJZmxhZywgJmJhcjAtPm1hY19ybWFjX2Vycl9tYXNrKTsKKwkJCQkgICBmbGFnLCAmYmFyMC0+bWFjX3JtYWNfZXJyX21hc2spOwogCX0KIAotCWlmIChtYXNrICYgUlhfWEdYU19JTlRSKQotCXsKKwlpZiAobWFzayAmIFJYX1hHWFNfSU5UUikgewogCQlnZW5faW50X21hc2sgfD0gUlhYR1hTX0lOVF9NOwogCQlkb19zMmlvX3dyaXRlX2JpdHMoWEdYU19JTlRfU1RBVFVTX1JYR1hTLCBmbGFnLAotCQkJCSZiYXIwLT54Z3hzX2ludF9tYXNrKTsKKwkJCQkgICAmYmFyMC0+eGd4c19pbnRfbWFzayk7CiAJCWRvX3MyaW9fd3JpdGVfYml0cyhSWEdYU19FU1RPUkVfT0ZMT1cgfCBSWEdYU19SWF9TTV9FUlIsIGZsYWcsCi0JCQkJJmJhcjAtPnhneHNfcnhneHNfZXJyX21hc2spOworCQkJCSAgICZiYXIwLT54Z3hzX3J4Z3hzX2Vycl9tYXNrKTsKIAl9CiAKIAlpZiAobWFzayAmIE1DX0lOVFIpIHsKIAkJZ2VuX2ludF9tYXNrIHw9IE1DX0lOVF9NOwotCQlkb19zMmlvX3dyaXRlX2JpdHMoTUNfSU5UX01BU0tfTUNfSU5ULCBmbGFnLCAmYmFyMC0+bWNfaW50X21hc2spOworCQlkb19zMmlvX3dyaXRlX2JpdHMoTUNfSU5UX01BU0tfTUNfSU5ULAorCQkJCSAgIGZsYWcsICZiYXIwLT5tY19pbnRfbWFzayk7CiAJCWRvX3MyaW9fd3JpdGVfYml0cyhNQ19FUlJfUkVHX1NNX0VSUiB8IE1DX0VSUl9SRUdfRUNDX0FMTF9TTkcgfAotCQkJCU1DX0VSUl9SRUdfRUNDX0FMTF9EQkwgfCBQTExfTE9DS19OLCBmbGFnLAotCQkJCSZiYXIwLT5tY19lcnJfbWFzayk7CisJCQkJICAgTUNfRVJSX1JFR19FQ0NfQUxMX0RCTCB8IFBMTF9MT0NLX04sIGZsYWcsCisJCQkJICAgJmJhcjAtPm1jX2Vycl9tYXNrKTsKIAl9CiAJbmljLT5nZW5lcmFsX2ludF9tYXNrID0gZ2VuX2ludF9tYXNrOwogCiAJLyogUmVtb3ZlIHRoaXMgbGluZSB3aGVuIGFsYXJtIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8KIAluaWMtPmdlbmVyYWxfaW50X21hc2sgPSAwOwogfQorCiAvKioKICAqICBlbl9kaXNfYWJsZV9uaWNfaW50cnMgLSBFbmFibGUgb3IgRGlzYWJsZSB0aGUgaW50ZXJydXB0cwogICogIEBuaWM6IGRldmljZSBwcml2YXRlIHZhcmlhYmxlLApAQCAtMjA2NSwxMSArMjA3NCwxMSBAQAogCQkJICogVE9ETwogCQkJICovCiAJCQlpZiAoczJpb19saW5rX2ZhdWx0X2luZGljYXRpb24obmljKSA9PQotCQkJCQlMSU5LX1VQX0RPV05fSU5URVJSVVBUICkgeworCQkJICAgIExJTktfVVBfRE9XTl9JTlRFUlJVUFQpIHsKIAkJCQlkb19zMmlvX3dyaXRlX2JpdHMoUElDX0lOVF9HUElPLCBmbGFnLAotCQkJCQkJJmJhcjAtPnBpY19pbnRfbWFzayk7CisJCQkJCQkgICAmYmFyMC0+cGljX2ludF9tYXNrKTsKIAkJCQlkb19zMmlvX3dyaXRlX2JpdHMoR1BJT19JTlRfTUFTS19MSU5LX1VQLCBmbGFnLAotCQkJCQkJJmJhcjAtPmdwaW9faW50X21hc2spOworCQkJCQkJICAgJmJhcjAtPmdwaW9faW50X21hc2spOwogCQkJfSBlbHNlCiAJCQkJd3JpdGVxKERJU0FCTEVfQUxMX0lOVFJTLCAmYmFyMC0+cGljX2ludF9tYXNrKTsKIAkJfSBlbHNlIGlmIChmbGFnID09IERJU0FCTEVfSU5UUlMpIHsKQEAgLTIxMTYsNyArMjEyNSw3IEBACiAKIAl0ZW1wNjQgPSByZWFkcSgmYmFyMC0+Z2VuZXJhbF9pbnRfbWFzayk7CiAJaWYgKGZsYWcgPT0gRU5BQkxFX0lOVFJTKQotCQl0ZW1wNjQgJj0gfigodTY0KSBpbnRyX21hc2spOworCQl0ZW1wNjQgJj0gfigodTY0KWludHJfbWFzayk7CiAJZWxzZQogCQl0ZW1wNjQgPSBESVNBQkxFX0FMTF9JTlRSUzsKIAl3cml0ZXEodGVtcDY0LCAmYmFyMC0+Z2VuZXJhbF9pbnRfbWFzayk7CkBAIC0yMTc3LDM1ICsyMTg2LDM1IEBACiAJbW9kZSA9IHMyaW9fdmVyaWZ5X3BjaV9tb2RlKHNwKTsKIAogCWlmICghKHZhbDY0ICYgQURBUFRFUl9TVEFUVVNfVERNQV9SRUFEWSkpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlcyIsICJURE1BIGlzIG5vdCByZWFkeSEiKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJURE1BIGlzIG5vdCByZWFkeSFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCEodmFsNjQgJiBBREFQVEVSX1NUQVRVU19SRE1BX1JFQURZKSkgewotCURCR19QUklOVChFUlJfREJHLCAiJXMiLCAiUkRNQSBpcyBub3QgcmVhZHkhIik7CisJCURCR19QUklOVChFUlJfREJHLCAiUkRNQSBpcyBub3QgcmVhZHkhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghKHZhbDY0ICYgQURBUFRFUl9TVEFUVVNfUEZDX1JFQURZKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzIiwgIlBGQyBpcyBub3QgcmVhZHkhIik7CisJCURCR19QUklOVChFUlJfREJHLCAiUEZDIGlzIG5vdCByZWFkeSFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCEodmFsNjQgJiBBREFQVEVSX1NUQVRVU19UTUFDX0JVRl9FTVBUWSkpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlcyIsICJUTUFDIEJVRiBpcyBub3QgZW1wdHkhIik7CisJCURCR19QUklOVChFUlJfREJHLCAiVE1BQyBCVUYgaXMgbm90IGVtcHR5IVxuIik7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoISh2YWw2NCAmIEFEQVBURVJfU1RBVFVTX1BJQ19RVUlFU0NFTlQpKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXMiLCAiUElDIGlzIG5vdCBRVUlFU0NFTlQhIik7CisJCURCR19QUklOVChFUlJfREJHLCAiUElDIGlzIG5vdCBRVUlFU0NFTlQhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghKHZhbDY0ICYgQURBUFRFUl9TVEFUVVNfTUNfRFJBTV9SRUFEWSkpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlcyIsICJNQ19EUkFNIGlzIG5vdCByZWFkeSEiKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJNQ19EUkFNIGlzIG5vdCByZWFkeSFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCEodmFsNjQgJiBBREFQVEVSX1NUQVRVU19NQ19RVUVVRVNfUkVBRFkpKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXMiLCAiTUNfUVVFVUVTIGlzIG5vdCByZWFkeSEiKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJNQ19RVUVVRVMgaXMgbm90IHJlYWR5IVxuIik7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoISh2YWw2NCAmIEFEQVBURVJfU1RBVFVTX01fUExMX0xPQ0spKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXMiLCAiTV9QTEwgaXMgbm90IGxvY2tlZCEiKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJNX1BMTCBpcyBub3QgbG9ja2VkIVxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjIxNSwxNCArMjIyNCwxNCBAQAogCSAqIG5vdCBiZSBhc3NlcnRlZC4KIAkgKi8KIAlpZiAoISh2YWw2NCAmIEFEQVBURVJfU1RBVFVTX1BfUExMX0xPQ0spICYmCi0JCXNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFICYmIG1vZGUgIT0KLQkJUENJX01PREVfUENJXzMzKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXMiLCAiUF9QTEwgaXMgbm90IGxvY2tlZCEiKTsKKwkgICAgc3AtPmRldmljZV90eXBlID09IFhGUkFNRV9JSV9ERVZJQ0UgJiYKKwkgICAgbW9kZSAhPSBQQ0lfTU9ERV9QQ0lfMzMpIHsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJQX1BMTCBpcyBub3QgbG9ja2VkIVxuIik7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoISgodmFsNjQgJiBBREFQVEVSX1NUQVRVU19SQ19QUkNfUVVJRVNDRU5UKSA9PQotCQkJQURBUFRFUl9TVEFUVVNfUkNfUFJDX1FVSUVTQ0VOVCkpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlcyIsICJSQ19QUkMgaXMgbm90IFFVSUVTQ0VOVCEiKTsKKwkgICAgICBBREFQVEVSX1NUQVRVU19SQ19QUkNfUVVJRVNDRU5UKSkgeworCQlEQkdfUFJJTlQoRVJSX0RCRywgIlJDX1BSQyBpcyBub3QgUVVJRVNDRU5UIVxuIik7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKQEAgLTIyMzYsNyArMjI0NSw3IEBACiAgKgogICovCiAKLXN0YXRpYyB2b2lkIGZpeF9tYWNfYWRkcmVzcyhzdHJ1Y3QgczJpb19uaWMgKiBzcCkKK3N0YXRpYyB2b2lkIGZpeF9tYWNfYWRkcmVzcyhzdHJ1Y3QgczJpb19uaWMgKnNwKQogewogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCXU2NCB2YWw2NDsKQEAgLTIyNjgsMTUgKzIyNzcsMTQgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmljLT5kZXY7CiAJcmVnaXN0ZXIgdTY0IHZhbDY0ID0gMDsKIAl1MTYgc3ViaWQsIGk7Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKLQlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7Ci0KLQltYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOwotCWNvbmZpZyA9ICZuaWMtPmNvbmZpZzsKKwlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmbmljLT5jb25maWc7CisJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOwogCiAJLyogIFBSQyBJbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiAqLwogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKLQkJd3JpdGVxKCh1NjQpIG1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9ibG9ja3NbMF0uYmxvY2tfZG1hX2FkZHIsCisJCXN0cnVjdCByaW5nX2luZm8gKnJpbmcgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldOworCisJCXdyaXRlcSgodTY0KXJpbmctPnJ4X2Jsb2Nrc1swXS5ibG9ja19kbWFfYWRkciwKIAkJICAgICAgICZiYXIwLT5wcmNfcnhkMF9uW2ldKTsKIAogCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5wcmNfY3RybF9uW2ldKTsKQEAgLTIzMjgsOSArMjMzNiw5IEBACiAJICovCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9zdGF0dXMpOwogCWlmICghdmVyaWZ5X3hlbmFfcXVpZXNjZW5jZShuaWMpKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXM6IGRldmljZSBpcyBub3QgcmVhZHksICIsIGRldi0+bmFtZSk7Ci0JCURCR19QUklOVChFUlJfREJHLCAiQWRhcHRlciBzdGF0dXMgcmVhZHM6IDB4JWxseFxuIiwKLQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsNjQpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBkZXZpY2UgaXMgbm90IHJlYWR5LCAiCisJCQkgICJBZGFwdGVyIHN0YXR1cyByZWFkczogMHglbGx4XG4iLAorCQkJICBkZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpdmFsNjQpOwogCQlyZXR1cm4gRkFJTFVSRTsKIAl9CiAKQEAgLTIzNzAsOCArMjM3OCw4IEBACiAvKioKICAqIHMyaW9fdHhkbF9nZXRza2IgLSBHZXQgdGhlIHNrYiBmcm9tIHR4ZGwsIHVubWFwIGFuZCByZXR1cm4gc2tiCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqczJpb190eGRsX2dldHNrYihzdHJ1Y3QgZmlmb19pbmZvICpmaWZvX2RhdGEsIHN0cnVjdCBcCi0JCQkJCVR4RCAqdHhkbHAsIGludCBnZXRfb2ZmKQorc3RhdGljIHN0cnVjdCBza19idWZmICpzMmlvX3R4ZGxfZ2V0c2tiKHN0cnVjdCBmaWZvX2luZm8gKmZpZm9fZGF0YSwKKwkJCQkJc3RydWN0IFR4RCAqdHhkbHAsIGludCBnZXRfb2ZmKQogewogCXN0cnVjdCBzMmlvX25pYyAqbmljID0gZmlmb19kYXRhLT5uaWM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTIzODAsMjIgKzIzODgsMTggQEAKIAogCXR4ZHMgPSB0eGRscDsKIAlpZiAodHhkcy0+SG9zdF9Db250cm9sID09ICh1NjQpKGxvbmcpZmlmb19kYXRhLT51Zm9faW5fYmFuZF92KSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUobmljLT5wZGV2LCAoZG1hX2FkZHJfdCkKLQkJCXR4ZHMtPkJ1ZmZlcl9Qb2ludGVyLCBzaXplb2YodTY0KSwKLQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQlwY2lfdW5tYXBfc2luZ2xlKG5pYy0+cGRldiwgKGRtYV9hZGRyX3QpdHhkcy0+QnVmZmVyX1BvaW50ZXIsCisJCQkJIHNpemVvZih1NjQpLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJdHhkcysrOwogCX0KIAotCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSAoKHVuc2lnbmVkIGxvbmcpCi0JCQl0eGRzLT5Ib3N0X0NvbnRyb2wpOworCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSgodW5zaWduZWQgbG9uZyl0eGRzLT5Ib3N0X0NvbnRyb2wpOwogCWlmICghc2tiKSB7CiAJCW1lbXNldCh0eGRscCwgMCwgKHNpemVvZihzdHJ1Y3QgVHhEKSAqIGZpZm9fZGF0YS0+bWF4X3R4ZHMpKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXBjaV91bm1hcF9zaW5nbGUobmljLT5wZGV2LCAoZG1hX2FkZHJfdCkKLQkJCSB0eGRzLT5CdWZmZXJfUG9pbnRlciwKLQkJCSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW4sCi0JCQkgUENJX0RNQV9UT0RFVklDRSk7CisJcGNpX3VubWFwX3NpbmdsZShuaWMtPnBkZXYsIChkbWFfYWRkcl90KXR4ZHMtPkJ1ZmZlcl9Qb2ludGVyLAorCQkJIHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAJZnJnX2NudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAJaWYgKGZyZ19jbnQpIHsKIAkJdHhkcysrOwpAQCAtMjQwMywxMyArMjQwNywxMyBAQAogCQkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2pdOwogCQkJaWYgKCF0eGRzLT5CdWZmZXJfUG9pbnRlcikKIAkJCQlicmVhazsKLQkJCXBjaV91bm1hcF9wYWdlKG5pYy0+cGRldiwgKGRtYV9hZGRyX3QpCi0JCQkJCXR4ZHMtPkJ1ZmZlcl9Qb2ludGVyLAorCQkJcGNpX3VubWFwX3BhZ2UobmljLT5wZGV2LAorCQkJCSAgICAgICAoZG1hX2FkZHJfdCl0eGRzLT5CdWZmZXJfUG9pbnRlciwKIAkJCQkgICAgICAgZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CiAJCX0KIAl9Ci0JbWVtc2V0KHR4ZGxwLDAsIChzaXplb2Yoc3RydWN0IFR4RCkgKiBmaWZvX2RhdGEtPm1heF90eGRzKSk7Ci0JcmV0dXJuKHNrYik7CisJbWVtc2V0KHR4ZGxwLCAwLCAoc2l6ZW9mKHN0cnVjdCBUeEQpICogZmlmb19kYXRhLT5tYXhfdHhkcykpOworCXJldHVybiBza2I7CiB9CiAKIC8qKgpAQCAtMjQxOCw3ICsyNDIyLDcgQEAKICAqICBEZXNjcmlwdGlvbjoKICAqICBGcmVlIGFsbCBxdWV1ZWQgVHggYnVmZmVycy4KICAqICBSZXR1cm4gVmFsdWU6IHZvaWQKLSovCisgKi8KIAogc3RhdGljIHZvaWQgZnJlZV90eF9idWZmZXJzKHN0cnVjdCBzMmlvX25pYyAqbmljKQogewpAQCAtMjQyNiwzMyArMjQzMCwzMyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IFR4RCAqdHhkcDsKIAlpbnQgaSwgajsKLQlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sOwotCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZzsKIAlpbnQgY250ID0gMDsKLQotCW1hY19jb250cm9sID0gJm5pYy0+bWFjX2NvbnRyb2w7Ci0JY29uZmlnID0gJm5pYy0+Y29uZmlnOworCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZyA9ICZuaWMtPmNvbmZpZzsKKwlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sID0gJm5pYy0+bWFjX2NvbnRyb2w7CisJc3RydWN0IHN0YXRfYmxvY2sgKnN0YXRzID0gbWFjX2NvbnRyb2wtPnN0YXRzX2luZm87CisJc3RydWN0IHN3U3RhdCAqc3dzdGF0cyA9ICZzdGF0cy0+c3dfc3RhdDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnR4X2ZpZm9fbnVtOyBpKyspIHsKKwkJc3RydWN0IHR4X2ZpZm9fY29uZmlnICp0eF9jZmcgPSAmY29uZmlnLT50eF9jZmdbaV07CisJCXN0cnVjdCBmaWZvX2luZm8gKmZpZm8gPSAmbWFjX2NvbnRyb2wtPmZpZm9zW2ldOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnR4X2xvY2ssIGZsYWdzKTsKLQkJZm9yIChqID0gMDsgaiA8IGNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuOyBqKyspIHsKLQkJCXR4ZHAgPSAoc3RydWN0IFR4RCAqKSBcCi0JCQltYWNfY29udHJvbC0+Zmlmb3NbaV0ubGlzdF9pbmZvW2pdLmxpc3RfdmlydF9hZGRyOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CisJCWZvciAoaiA9IDA7IGogPCB0eF9jZmctPmZpZm9fbGVuOyBqKyspIHsKKwkJCXR4ZHAgPSAoc3RydWN0IFR4RCAqKWZpZm8tPmxpc3RfaW5mb1tqXS5saXN0X3ZpcnRfYWRkcjsKIAkJCXNrYiA9IHMyaW9fdHhkbF9nZXRza2IoJm1hY19jb250cm9sLT5maWZvc1tpXSwgdHhkcCwgaik7CiAJCQlpZiAoc2tiKSB7Ci0JCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZAotCQkJCQkrPSBza2ItPnRydWVzaXplOworCQkJCXN3c3RhdHMtPm1lbV9mcmVlZCArPSBza2ItPnRydWVzaXplOwogCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCQljbnQrKzsKIAkJCX0KIAkJfQogCQlEQkdfUFJJTlQoSU5UUl9EQkcsCi0JCQkgICIlczpmb3JjaWJseSBmcmVlaW5nICVkIHNrYnMgb24gRklGTyVkXG4iLAorCQkJICAiJXM6IGZvcmNpYmx5IGZyZWVpbmcgJWQgc2ticyBvbiBGSUZPJWRcbiIsCiAJCQkgIGRldi0+bmFtZSwgY250LCBpKTsKLQkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnR4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0ID0gMDsKLQkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnR4X2N1cnJfcHV0X2luZm8ub2Zmc2V0ID0gMDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnR4X2xvY2ssIGZsYWdzKTsKKwkJZmlmby0+dHhfY3Vycl9nZXRfaW5mby5vZmZzZXQgPSAwOworCQlmaWZvLT50eF9jdXJyX3B1dF9pbmZvLm9mZnNldCA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTI0NzEsMTEgKzI0NzUsNiBAQAogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IG5pYy0+YmFyMDsKIAlyZWdpc3RlciB1NjQgdmFsNjQgPSAwOwogCXUxNiBpbnRlcnJ1cHRpYmxlOwotCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2w7Ci0Jc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOwotCi0JbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKLQljb25maWcgPSAmbmljLT5jb25maWc7CiAKIAkvKiAgRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwogCWVuX2Rpc19lcnJfYWxhcm1zKG5pYywgRU5BX0FMTF9JTlRSUywgRElTQUJMRV9JTlRSUyk7CkBAIC0yNTEyLDcgKzI1MTEsNyBAQAogICogIFNVQ0NFU1Mgb24gc3VjY2VzcyBvciBhbiBhcHByb3ByaWF0ZSAtdmUgdmFsdWUgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIGludCBmaWxsX3J4X2J1ZmZlcnMoc3RydWN0IHMyaW9fbmljICpuaWMsIHN0cnVjdCByaW5nX2luZm8gKnJpbmcsCi0JCQkJaW50IGZyb21fY2FyZF91cCkKKwkJCSAgIGludCBmcm9tX2NhcmRfdXApCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgUnhEX3QgKnJ4ZHA7CkBAIC0yNTI2LDcgKzI1MjUsNyBAQAogCWludCByeGRfaW5kZXggPSAwOwogCXN0cnVjdCBSeEQxICpyeGRwMTsKIAlzdHJ1Y3QgUnhEMyAqcnhkcDM7Ci0Jc3RydWN0IHN3U3RhdCAqc3RhdHMgPSAmcmluZy0+bmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0OworCXN0cnVjdCBzd1N0YXQgKnN3c3RhdHMgPSAmcmluZy0+bmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0OwogCiAJYWxsb2NfY250ID0gcmluZy0+cGt0X2NudCAtIHJpbmctPnJ4X2J1ZnNfbGVmdDsKIApAQCAtMjU0MywxNyArMjU0MiwxNiBAQAogCQkJcnhkX2luZGV4ICs9IChibG9ja19ubyAqIHJpbmctPnJ4ZF9jb3VudCk7CiAKIAkJaWYgKChibG9ja19ubyA9PSBibG9ja19ubzEpICYmCi0JCQkob2ZmID09IHJpbmctPnJ4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0KSAmJgotCQkJKHJ4ZHAtPkhvc3RfQ29udHJvbCkpIHsKLQkJCURCR19QUklOVChJTlRSX0RCRywgIiVzOiBHZXQgYW5kIFB1dCIsCi0JCQkJcmluZy0+ZGV2LT5uYW1lKTsKLQkJCURCR19QUklOVChJTlRSX0RCRywgIiBpbmZvIGVxdWF0ZWRcbiIpOworCQkgICAgKG9mZiA9PSByaW5nLT5yeF9jdXJyX2dldF9pbmZvLm9mZnNldCkgJiYKKwkJICAgIChyeGRwLT5Ib3N0X0NvbnRyb2wpKSB7CisJCQlEQkdfUFJJTlQoSU5UUl9EQkcsICIlczogR2V0IGFuZCBQdXQgaW5mbyBlcXVhdGVkXG4iLAorCQkJCSAgcmluZy0+ZGV2LT5uYW1lKTsKIAkJCWdvdG8gZW5kOwogCQl9CiAJCWlmIChvZmYgJiYgKG9mZiA9PSByaW5nLT5yeGRfY291bnQpKSB7CiAJCQlyaW5nLT5yeF9jdXJyX3B1dF9pbmZvLmJsb2NrX2luZGV4Kys7CiAJCQlpZiAocmluZy0+cnhfY3Vycl9wdXRfaW5mby5ibG9ja19pbmRleCA9PQotCQkJCQkJCXJpbmctPmJsb2NrX2NvdW50KQorCQkJICAgIHJpbmctPmJsb2NrX2NvdW50KQogCQkJCXJpbmctPnJ4X2N1cnJfcHV0X2luZm8uYmxvY2tfaW5kZXggPSAwOwogCQkJYmxvY2tfbm8gPSByaW5nLT5yeF9jdXJyX3B1dF9pbmZvLmJsb2NrX2luZGV4OwogCQkJb2ZmID0gMDsKQEAgLTI1NjUsMTQgKzI1NjMsMTUgQEAKIAkJfQogCiAJCWlmICgocnhkcC0+Q29udHJvbF8xICYgUlhEX09XTl9YRU5BKSAmJgotCQkJKChyaW5nLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikgJiYKLQkJCQkocnhkcC0+Q29udHJvbF8yICYgczJCSVQoMCkpKSkgeworCQkgICAgKChyaW5nLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikgJiYKKwkJICAgICAocnhkcC0+Q29udHJvbF8yICYgczJCSVQoMCkpKSkgewogCQkJcmluZy0+cnhfY3Vycl9wdXRfaW5mby5vZmZzZXQgPSBvZmY7CiAJCQlnb3RvIGVuZDsKIAkJfQogCQkvKiBjYWxjdWxhdGUgc2l6ZSBvZiBza2IgYmFzZWQgb24gcmluZyBtb2RlICovCi0JCXNpemUgPSByaW5nLT5tdHUgKyBIRUFERVJfRVRIRVJORVRfSUlfODAyXzNfU0laRSArCi0JCQkJSEVBREVSXzgwMl8yX1NJWkUgKyBIRUFERVJfU05BUF9TSVpFOworCQlzaXplID0gcmluZy0+bXR1ICsKKwkJCUhFQURFUl9FVEhFUk5FVF9JSV84MDJfM19TSVpFICsKKwkJCUhFQURFUl84MDJfMl9TSVpFICsgSEVBREVSX1NOQVBfU0laRTsKIAkJaWYgKHJpbmctPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzEpCiAJCQlzaXplICs9IE5FVF9JUF9BTElHTjsKIAkJZWxzZQpAQCAtMjU4MCwzNCArMjU3OSwzNSBAQAogCiAJCS8qIGFsbG9jYXRlIHNrYiAqLwogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUpOwotCQlpZighc2tiKSB7Ci0JCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogT3V0IG9mICIsIHJpbmctPmRldi0+bmFtZSk7Ci0JCQlEQkdfUFJJTlQoSU5GT19EQkcsICJtZW1vcnkgdG8gYWxsb2NhdGUgU0tCc1xuIik7CisJCWlmICghc2tiKSB7CisJCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogQ291bGQgbm90IGFsbG9jYXRlIHNrYlxuIiwKKwkJCQkgIHJpbmctPmRldi0+bmFtZSk7CiAJCQlpZiAoZmlyc3RfcnhkcCkgewogCQkJCXdtYigpOwogCQkJCWZpcnN0X3J4ZHAtPkNvbnRyb2xfMSB8PSBSWERfT1dOX1hFTkE7CiAJCQl9Ci0JCQlzdGF0cy0+bWVtX2FsbG9jX2ZhaWxfY250Kys7CisJCQlzd3N0YXRzLT5tZW1fYWxsb2NfZmFpbF9jbnQrKzsKIAogCQkJcmV0dXJuIC1FTk9NRU0gOwogCQl9Ci0JCXN0YXRzLT5tZW1fYWxsb2NhdGVkICs9IHNrYi0+dHJ1ZXNpemU7CisJCXN3c3RhdHMtPm1lbV9hbGxvY2F0ZWQgKz0gc2tiLT50cnVlc2l6ZTsKIAogCQlpZiAocmluZy0+cnhkX21vZGUgPT0gUlhEX01PREVfMSkgewogCQkJLyogMSBidWZmZXIgbW9kZSAtIG5vcm1hbCBvcGVyYXRpb24gbW9kZSAqLwotCQkJcnhkcDEgPSAoc3RydWN0IFJ4RDEqKXJ4ZHA7CisJCQlyeGRwMSA9IChzdHJ1Y3QgUnhEMSAqKXJ4ZHA7CiAJCQltZW1zZXQocnhkcCwgMCwgc2l6ZW9mKHN0cnVjdCBSeEQxKSk7CiAJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Ci0JCQlyeGRwMS0+QnVmZmVyMF9wdHIgPSBwY2lfbWFwX3NpbmdsZQotCQkJICAgIChyaW5nLT5wZGV2LCBza2ItPmRhdGEsIHNpemUgLSBORVRfSVBfQUxJR04sCi0JCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXJ4ZHAxLT5CdWZmZXIwX3B0ciA9CisJCQkJcGNpX21hcF9zaW5nbGUocmluZy0+cGRldiwgc2tiLT5kYXRhLAorCQkJCQkgICAgICAgc2l6ZSAtIE5FVF9JUF9BTElHTiwKKwkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKG5pYy0+cGRldiwKLQkJCQkJCXJ4ZHAxLT5CdWZmZXIwX3B0cikpCisJCQkJCQkgIHJ4ZHAxLT5CdWZmZXIwX3B0cikpCiAJCQkJZ290byBwY2lfbWFwX2ZhaWxlZDsKIAogCQkJcnhkcC0+Q29udHJvbF8yID0KIAkJCQlTRVRfQlVGRkVSMF9TSVpFXzEoc2l6ZSAtIE5FVF9JUF9BTElHTik7Ci0JCQlyeGRwLT5Ib3N0X0NvbnRyb2wgPSAodW5zaWduZWQgbG9uZykgKHNrYik7CisJCQlyeGRwLT5Ib3N0X0NvbnRyb2wgPSAodW5zaWduZWQgbG9uZylza2I7CiAJCX0gZWxzZSBpZiAocmluZy0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpIHsKIAkJCS8qCiAJCQkgKiAyIGJ1ZmZlciBtb2RlIC0KQEAgLTI2MTUsNyArMjYxNSw3IEBACiAJCQkgKiBieXRlIGFsaWduZWQgcmVjZWl2ZSBidWZmZXJzLgogCQkJICovCiAKLQkJCXJ4ZHAzID0gKHN0cnVjdCBSeEQzKilyeGRwOworCQkJcnhkcDMgPSAoc3RydWN0IFJ4RDMgKilyeGRwOwogCQkJLyogc2F2ZSBidWZmZXIgcG9pbnRlcnMgdG8gYXZvaWQgZnJlcXVlbnQgZG1hIG1hcHBpbmcgKi8KIAkJCUJ1ZmZlcjBfcHRyID0gcnhkcDMtPkJ1ZmZlcjBfcHRyOwogCQkJQnVmZmVyMV9wdHIgPSByeGRwMy0+QnVmZmVyMV9wdHI7CkBAIC0yNjI2LDcgKzI2MjYsNyBAQAogCiAJCQliYSA9ICZyaW5nLT5iYVtibG9ja19ub11bb2ZmXTsKIAkJCXNrYl9yZXNlcnZlKHNrYiwgQlVGMF9MRU4pOwotCQkJdG1wID0gKHU2NCkodW5zaWduZWQgbG9uZykgc2tiLT5kYXRhOworCQkJdG1wID0gKHU2NCkodW5zaWduZWQgbG9uZylza2ItPmRhdGE7CiAJCQl0bXAgKz0gQUxJR05fU0laRTsKIAkJCXRtcCAmPSB+QUxJR05fU0laRTsKIAkJCXNrYi0+ZGF0YSA9ICh2b2lkICopICh1bnNpZ25lZCBsb25nKXRtcDsKQEAgLTI2MzQsMTUgKzI2MzQsMTcgQEAKIAogCQkJaWYgKGZyb21fY2FyZF91cCkgewogCQkJCXJ4ZHAzLT5CdWZmZXIwX3B0ciA9Ci0JCQkJICAgcGNpX21hcF9zaW5nbGUocmluZy0+cGRldiwgYmEtPmJhXzAsCi0JCQkJCUJVRjBfTEVOLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihuaWMtPnBkZXYsCi0JCQkJCQlyeGRwMy0+QnVmZmVyMF9wdHIpKQorCQkJCQlwY2lfbWFwX3NpbmdsZShyaW5nLT5wZGV2LCBiYS0+YmFfMCwKKwkJCQkJCSAgICAgICBCVUYwX0xFTiwKKwkJCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IobmljLT5wZGV2LAorCQkJCQkJCSAgcnhkcDMtPkJ1ZmZlcjBfcHRyKSkKIAkJCQkJZ290byBwY2lfbWFwX2ZhaWxlZDsKIAkJCX0gZWxzZQogCQkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShyaW5nLT5wZGV2LAotCQkJCShkbWFfYWRkcl90KSByeGRwMy0+QnVmZmVyMF9wdHIsCi0JCQkJICAgIEJVRjBfTEVOLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQkJCSAgICAgICAoZG1hX2FkZHJfdClyeGRwMy0+QnVmZmVyMF9wdHIsCisJCQkJCQkJICAgICAgIEJVRjBfTEVOLAorCQkJCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJCQlyeGRwLT5Db250cm9sXzIgPSBTRVRfQlVGRkVSMF9TSVpFXzMoQlVGMF9MRU4pOwogCQkJaWYgKHJpbmctPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKSB7CkBAIC0yNjUyLDM0ICsyNjU0LDM1IEBACiAJCQkJICogQnVmZmVyMiB3aWxsIGhhdmUgTDMvTDQgaGVhZGVyIHBsdXMKIAkJCQkgKiBMNCBwYXlsb2FkCiAJCQkJICovCi0JCQkJcnhkcDMtPkJ1ZmZlcjJfcHRyID0gcGNpX21hcF9zaW5nbGUKLQkJCQkocmluZy0+cGRldiwgc2tiLT5kYXRhLCByaW5nLT5tdHUgKyA0LAotCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQlyeGRwMy0+QnVmZmVyMl9wdHIgPSBwY2lfbWFwX3NpbmdsZShyaW5nLT5wZGV2LAorCQkJCQkJCQkgICAgc2tiLT5kYXRhLAorCQkJCQkJCQkgICAgcmluZy0+bXR1ICsgNCwKKwkJCQkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKG5pYy0+cGRldiwKLQkJCQkJCQlyeGRwMy0+QnVmZmVyMl9wdHIpKQorCQkJCQkJCSAgcnhkcDMtPkJ1ZmZlcjJfcHRyKSkKIAkJCQkJZ290byBwY2lfbWFwX2ZhaWxlZDsKIAogCQkJCWlmIChmcm9tX2NhcmRfdXApIHsKIAkJCQkJcnhkcDMtPkJ1ZmZlcjFfcHRyID0KIAkJCQkJCXBjaV9tYXBfc2luZ2xlKHJpbmctPnBkZXYsCi0JCQkJCQliYS0+YmFfMSwgQlVGMV9MRU4sCi0JCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQkJCSAgICAgICBiYS0+YmFfMSwKKwkJCQkJCQkgICAgICAgQlVGMV9MRU4sCisJCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihuaWMtPnBkZXYsCi0JCQkJCQlyeGRwMy0+QnVmZmVyMV9wdHIpKSB7Ci0JCQkJCQlwY2lfdW5tYXBfc2luZ2xlCi0JCQkJCQkJKHJpbmctPnBkZXYsCi0JCQkJCQkgICAgKGRtYV9hZGRyX3QpKHVuc2lnbmVkIGxvbmcpCi0JCQkJCQkJc2tiLT5kYXRhLAotCQkJCQkJCXJpbmctPm10dSArIDQsCi0JCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJCQkJICByeGRwMy0+QnVmZmVyMV9wdHIpKSB7CisJCQkJCQlwY2lfdW5tYXBfc2luZ2xlKHJpbmctPnBkZXYsCisJCQkJCQkJCSAoZG1hX2FkZHJfdCkodW5zaWduZWQgbG9uZykKKwkJCQkJCQkJIHNrYi0+ZGF0YSwKKwkJCQkJCQkJIHJpbmctPm10dSArIDQsCisJCQkJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJCQkJZ290byBwY2lfbWFwX2ZhaWxlZDsKIAkJCQkJfQogCQkJCX0KIAkJCQlyeGRwLT5Db250cm9sXzIgfD0gU0VUX0JVRkZFUjFfU0laRV8zKDEpOwogCQkJCXJ4ZHAtPkNvbnRyb2xfMiB8PSBTRVRfQlVGRkVSMl9TSVpFXzMKLQkJCQkJCQkJKHJpbmctPm10dSArIDQpOworCQkJCQkocmluZy0+bXR1ICsgNCk7CiAJCQl9CiAJCQlyeGRwLT5Db250cm9sXzIgfD0gczJCSVQoMCk7CiAJCQlyeGRwLT5Ib3N0X0NvbnRyb2wgPSAodW5zaWduZWQgbG9uZykgKHNrYik7CkBAIC0yNzAzLDcgKzI3MDYsNyBAQAogCQlhbGxvY190YWIrKzsKIAl9CiAKLSAgICAgIGVuZDoKK2VuZDoKIAkvKiBUcmFuc2ZlciBvd25lcnNoaXAgb2YgZmlyc3QgZGVzY3JpcHRvciB0byBhZGFwdGVyIGp1c3QgYmVmb3JlCiAJICogZXhpdGluZy4gQmVmb3JlIHRoYXQsIHVzZSBtZW1vcnkgYmFycmllciBzbyB0aGF0IG93bmVyc2hpcAogCSAqIGFuZCBvdGhlciBmaWVsZHMgYXJlIHNlZW4gYnkgYWRhcHRlciBjb3JyZWN0bHkuCkBAIC0yNzE0LDkgKzI3MTcsMTAgQEAKIAl9CiAKIAlyZXR1cm4gU1VDQ0VTUzsKKwogcGNpX21hcF9mYWlsZWQ6Ci0Jc3RhdHMtPnBjaV9tYXBfZmFpbF9jbnQrKzsKLQlzdGF0cy0+bWVtX2ZyZWVkICs9IHNrYi0+dHJ1ZXNpemU7CisJc3dzdGF0cy0+cGNpX21hcF9mYWlsX2NudCsrOworCXN3c3RhdHMtPm1lbV9mcmVlZCArPSBza2ItPnRydWVzaXplOwogCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC0yNzI3LDQ5ICsyNzMxLDQ2IEBACiAJaW50IGo7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgUnhEX3QgKnJ4ZHA7Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKIAlzdHJ1Y3QgYnVmZkFkZCAqYmE7CiAJc3RydWN0IFJ4RDEgKnJ4ZHAxOwogCXN0cnVjdCBSeEQzICpyeGRwMzsKKwlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sID0gJnNwLT5tYWNfY29udHJvbDsKKwlzdHJ1Y3Qgc3RhdF9ibG9jayAqc3RhdHMgPSBtYWNfY29udHJvbC0+c3RhdHNfaW5mbzsKKwlzdHJ1Y3Qgc3dTdGF0ICpzd3N0YXRzID0gJnN0YXRzLT5zd19zdGF0OwogCi0JbWFjX2NvbnRyb2wgPSAmc3AtPm1hY19jb250cm9sOwogCWZvciAoaiA9IDAgOyBqIDwgcnhkX2NvdW50W3NwLT5yeGRfbW9kZV07IGorKykgewogCQlyeGRwID0gbWFjX2NvbnRyb2wtPnJpbmdzW3Jpbmdfbm9dLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeF9ibG9ja3NbYmxrXS5yeGRzW2pdLnZpcnRfYWRkcjsKLQkJc2tiID0gKHN0cnVjdCBza19idWZmICopCi0JCQkoKHVuc2lnbmVkIGxvbmcpIHJ4ZHAtPkhvc3RfQ29udHJvbCk7Ci0JCWlmICghc2tiKSB7CisJCQlyeF9ibG9ja3NbYmxrXS5yeGRzW2pdLnZpcnRfYWRkcjsKKwkJc2tiID0gKHN0cnVjdCBza19idWZmICopKCh1bnNpZ25lZCBsb25nKXJ4ZHAtPkhvc3RfQ29udHJvbCk7CisJCWlmICghc2tiKQogCQkJY29udGludWU7Ci0JCX0KIAkJaWYgKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8xKSB7Ci0JCQlyeGRwMSA9IChzdHJ1Y3QgUnhEMSopcnhkcDsKLQkJCXBjaV91bm1hcF9zaW5nbGUoc3AtPnBkZXYsIChkbWFfYWRkcl90KQotCQkJCXJ4ZHAxLT5CdWZmZXIwX3B0ciwKLQkJCQlkZXYtPm10dSArCi0JCQkJSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX1NJWkUKLQkJCQkrIEhFQURFUl84MDJfMl9TSVpFICsKLQkJCQlIRUFERVJfU05BUF9TSVpFLAotCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlyeGRwMSA9IChzdHJ1Y3QgUnhEMSAqKXJ4ZHA7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHNwLT5wZGV2LAorCQkJCQkgKGRtYV9hZGRyX3QpcnhkcDEtPkJ1ZmZlcjBfcHRyLAorCQkJCQkgZGV2LT5tdHUgKworCQkJCQkgSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX1NJWkUgKworCQkJCQkgSEVBREVSXzgwMl8yX1NJWkUgKyBIRUFERVJfU05BUF9TSVpFLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCW1lbXNldChyeGRwLCAwLCBzaXplb2Yoc3RydWN0IFJ4RDEpKTsKLQkJfSBlbHNlIGlmKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikgewotCQkJcnhkcDMgPSAoc3RydWN0IFJ4RDMqKXJ4ZHA7Ci0JCQliYSA9ICZtYWNfY29udHJvbC0+cmluZ3NbcmluZ19ub10uCi0JCQkJYmFbYmxrXVtqXTsKLQkJCXBjaV91bm1hcF9zaW5nbGUoc3AtPnBkZXYsIChkbWFfYWRkcl90KQotCQkJCXJ4ZHAzLT5CdWZmZXIwX3B0ciwKLQkJCQlCVUYwX0xFTiwKLQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJcGNpX3VubWFwX3NpbmdsZShzcC0+cGRldiwgKGRtYV9hZGRyX3QpCi0JCQkJcnhkcDMtPkJ1ZmZlcjFfcHRyLAotCQkJCUJVRjFfTEVOLAotCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHNwLT5wZGV2LCAoZG1hX2FkZHJfdCkKLQkJCQlyeGRwMy0+QnVmZmVyMl9wdHIsCi0JCQkJZGV2LT5tdHUgKyA0LAotCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCX0gZWxzZSBpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKSB7CisJCQlyeGRwMyA9IChzdHJ1Y3QgUnhEMyAqKXJ4ZHA7CisJCQliYSA9ICZtYWNfY29udHJvbC0+cmluZ3NbcmluZ19ub10uYmFbYmxrXVtqXTsKKwkJCXBjaV91bm1hcF9zaW5nbGUoc3AtPnBkZXYsCisJCQkJCSAoZG1hX2FkZHJfdClyeGRwMy0+QnVmZmVyMF9wdHIsCisJCQkJCSBCVUYwX0xFTiwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHNwLT5wZGV2LAorCQkJCQkgKGRtYV9hZGRyX3QpcnhkcDMtPkJ1ZmZlcjFfcHRyLAorCQkJCQkgQlVGMV9MRU4sCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcGNpX3VubWFwX3NpbmdsZShzcC0+cGRldiwKKwkJCQkJIChkbWFfYWRkcl90KXJ4ZHAzLT5CdWZmZXIyX3B0ciwKKwkJCQkJIGRldi0+bXR1ICsgNCwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQltZW1zZXQocnhkcCwgMCwgc2l6ZW9mKHN0cnVjdCBSeEQzKSk7CiAJCX0KLQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkICs9IHNrYi0+dHJ1ZXNpemU7CisJCXN3c3RhdHMtPm1lbV9mcmVlZCArPSBza2ItPnRydWVzaXplOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCW1hY19jb250cm9sLT5yaW5nc1tyaW5nX25vXS5yeF9idWZzX2xlZnQgLT0gMTsKIAl9CkBAIC0yNzg4LDIyICsyNzg5LDIxIEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNwLT5kZXY7CiAJaW50IGksIGJsayA9IDAsIGJ1Zl9jbnQgPSAwOwotCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2w7Ci0Jc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOwotCi0JbWFjX2NvbnRyb2wgPSAmc3AtPm1hY19jb250cm9sOwotCWNvbmZpZyA9ICZzcC0+Y29uZmlnOworCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZyA9ICZzcC0+Y29uZmlnOworCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2wgPSAmc3AtPm1hY19jb250cm9sOwogCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQlmb3IgKGJsayA9IDA7IGJsayA8IHJ4X3Jpbmdfc3pbaV07IGJsaysrKQotCQkJZnJlZV9yeGRfYmxrKHNwLGksYmxrKTsKKwkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CiAKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2N1cnJfcHV0X2luZm8uYmxvY2tfaW5kZXggPSAwOwotCQltYWNfY29udHJvbC0+cmluZ3NbaV0ucnhfY3Vycl9nZXRfaW5mby5ibG9ja19pbmRleCA9IDA7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9jdXJyX3B1dF9pbmZvLm9mZnNldCA9IDA7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9jdXJyX2dldF9pbmZvLm9mZnNldCA9IDA7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9idWZzX2xlZnQgPSAwOwotCQlEQkdfUFJJTlQoSU5JVF9EQkcsICIlczpGcmVlZCAweCV4IFJ4IEJ1ZmZlcnMgb24gcmluZyVkXG4iLAorCQlmb3IgKGJsayA9IDA7IGJsayA8IHJ4X3Jpbmdfc3pbaV07IGJsaysrKQorCQkJZnJlZV9yeGRfYmxrKHNwLCBpLCBibGspOworCisJCXJpbmctPnJ4X2N1cnJfcHV0X2luZm8uYmxvY2tfaW5kZXggPSAwOworCQlyaW5nLT5yeF9jdXJyX2dldF9pbmZvLmJsb2NrX2luZGV4ID0gMDsKKwkJcmluZy0+cnhfY3Vycl9wdXRfaW5mby5vZmZzZXQgPSAwOworCQlyaW5nLT5yeF9jdXJyX2dldF9pbmZvLm9mZnNldCA9IDA7CisJCXJpbmctPnJ4X2J1ZnNfbGVmdCA9IDA7CisJCURCR19QUklOVChJTklUX0RCRywgIiVzOiBGcmVlZCAweCV4IFJ4IEJ1ZmZlcnMgb24gcmluZyVkXG4iLAogCQkJICBkZXYtPm5hbWUsIGJ1Zl9jbnQsIGkpOwogCX0KIH0KQEAgLTI4MTEsOCArMjgxMSw4IEBACiBzdGF0aWMgaW50IHMyaW9fY2hrX3J4X2J1ZmZlcnMoc3RydWN0IHMyaW9fbmljICpuaWMsIHN0cnVjdCByaW5nX2luZm8gKnJpbmcpCiB7CiAJaWYgKGZpbGxfcnhfYnVmZmVycyhuaWMsIHJpbmcsIDApID09IC1FTk9NRU0pIHsKLQkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6T3V0IG9mIG1lbW9yeSIsIHJpbmctPmRldi0+bmFtZSk7Ci0JCURCR19QUklOVChJTkZPX0RCRywgIiBpbiBSeCBJbnRyISFcbiIpOworCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogT3V0IG9mIG1lbW9yeSBpbiBSeCBJbnRyISFcbiIsCisJCQkgIHJpbmctPmRldi0+bmFtZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjgzNCw4ICsyODM0LDYgQEAKIHsKIAlzdHJ1Y3QgcmluZ19pbmZvICpyaW5nID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCByaW5nX2luZm8sIG5hcGkpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7Ci0Jc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOwotCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2w7CiAJaW50IHBrdHNfcHJvY2Vzc2VkID0gMDsKIAl1OCBfX2lvbWVtICphZGRyID0gTlVMTDsKIAl1OCB2YWw4ID0gMDsKQEAgLTI4NDMsOSArMjg0MSw2IEBACiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gbmljLT5iYXIwOwogCWludCBidWRnZXRfb3JnID0gYnVkZ2V0OwogCi0JY29uZmlnID0gJm5pYy0+Y29uZmlnOwotCW1hY19jb250cm9sID0gJm5pYy0+bWFjX2NvbnRyb2w7Ci0KIAlpZiAodW5saWtlbHkoIWlzX3MyaW9fY2FyZF91cChuaWMpKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTI4NjMsMjUgKzI4NTgsMjIgQEAKIAl9CiAJcmV0dXJuIHBrdHNfcHJvY2Vzc2VkOwogfQorCiBzdGF0aWMgaW50IHMyaW9fcG9sbF9pbnRhKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgczJpb19uaWMgKm5pYyA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgczJpb19uaWMsIG5hcGkpOwotCXN0cnVjdCByaW5nX2luZm8gKnJpbmc7Ci0Jc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOwotCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2w7CiAJaW50IHBrdHNfcHJvY2Vzc2VkID0gMDsKIAlpbnQgcmluZ19wa3RzX3Byb2Nlc3NlZCwgaTsKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBuaWMtPmJhcjA7CiAJaW50IGJ1ZGdldF9vcmcgPSBidWRnZXQ7Ci0KLQljb25maWcgPSAmbmljLT5jb25maWc7Ci0JbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKKwlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmbmljLT5jb25maWc7CisJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOwogCiAJaWYgKHVubGlrZWx5KCFpc19zMmlvX2NhcmRfdXAobmljKSkpCiAJCXJldHVybiAwOwogCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQlyaW5nID0gJm1hY19jb250cm9sLT5yaW5nc1tpXTsKKwkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CiAJCXJpbmdfcGt0c19wcm9jZXNzZWQgPSByeF9pbnRyX2hhbmRsZXIocmluZywgYnVkZ2V0KTsKIAkJczJpb19jaGtfcnhfYnVmZmVycyhuaWMsIHJpbmcpOwogCQlwa3RzX3Byb2Nlc3NlZCArPSByaW5nX3BrdHNfcHJvY2Vzc2VkOwpAQCAtMjkxMSwyMCArMjkwMywxNyBAQAogc3RhdGljIHZvaWQgczJpb19uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHMyaW9fbmljICpuaWMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2w7Ci0Jc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOwogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IG5pYy0+YmFyMDsKIAl1NjQgdmFsNjQgPSAweEZGRkZGRkZGRkZGRkZGRkZVTEw7CiAJaW50IGk7CisJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnID0gJm5pYy0+Y29uZmlnOworCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKIAogCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKG5pYy0+cGRldikpCiAJCXJldHVybjsKIAogCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKIAotCW1hY19jb250cm9sID0gJm5pYy0+bWFjX2NvbnRyb2w7Ci0JY29uZmlnID0gJm5pYy0+Y29uZmlnOwotCiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cnhfdHJhZmZpY19pbnQpOwogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnR4X3RyYWZmaWNfaW50KTsKIApAQCAtMjkzNiwxNCArMjkyNSwxOSBAQAogCQl0eF9pbnRyX2hhbmRsZXIoJm1hY19jb250cm9sLT5maWZvc1tpXSk7CiAKIAkvKiBjaGVjayBmb3IgcmVjZWl2ZWQgcGFja2V0IGFuZCBpbmRpY2F0ZSB1cCB0byBuZXR3b3JrICovCi0JZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykKLQkJcnhfaW50cl9oYW5kbGVyKCZtYWNfY29udHJvbC0+cmluZ3NbaV0sIDApOworCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKKwkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CisKKwkJcnhfaW50cl9oYW5kbGVyKHJpbmcsIDApOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKLQkJaWYgKGZpbGxfcnhfYnVmZmVycyhuaWMsICZtYWNfY29udHJvbC0+cmluZ3NbaV0sIDApID09Ci0JCQkJLUVOT01FTSkgewotCQkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6T3V0IG9mIG1lbW9yeSIsIGRldi0+bmFtZSk7Ci0JCQlEQkdfUFJJTlQoSU5GT19EQkcsICIgaW4gUnggTmV0cG9sbCEhXG4iKTsKKwkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CisKKwkJaWYgKGZpbGxfcnhfYnVmZmVycyhuaWMsIHJpbmcsIDApID09IC1FTk9NRU0pIHsKKwkJCURCR19QUklOVChJTkZPX0RCRywKKwkJCQkgICIlczogT3V0IG9mIG1lbW9yeSBpbiBSeCBOZXRwb2xsISFcbiIsCisJCQkJICBkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0yOTczLDggKzI5NjcsOCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IHBrdF9jbnQgPSAwLCBuYXBpX3BrdHMgPSAwOwogCWludCBpOwotCXN0cnVjdCBSeEQxKiByeGRwMTsKLQlzdHJ1Y3QgUnhEMyogcnhkcDM7CisJc3RydWN0IFJ4RDEgKnJ4ZHAxOworCXN0cnVjdCBSeEQzICpyeGRwMzsKIAogCWdldF9pbmZvID0gcmluZ19kYXRhLT5yeF9jdXJyX2dldF9pbmZvOwogCWdldF9ibG9jayA9IGdldF9pbmZvLmJsb2NrX2luZGV4OwpAQCAtMjk5MCw0MSArMjk4NCw0MSBAQAogCQlpZiAoKGdldF9ibG9jayA9PSBwdXRfYmxvY2spICYmCiAJCSAgICAoZ2V0X2luZm8ub2Zmc2V0ICsgMSkgPT0gcHV0X2luZm8ub2Zmc2V0KSB7CiAJCQlEQkdfUFJJTlQoSU5UUl9EQkcsICIlczogUmluZyBGdWxsXG4iLAotCQkJCXJpbmdfZGF0YS0+ZGV2LT5uYW1lKTsKKwkJCQkgIHJpbmdfZGF0YS0+ZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwogCQl9Ci0JCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSAoKHVuc2lnbmVkIGxvbmcpcnhkcC0+SG9zdF9Db250cm9sKTsKKwkJc2tiID0gKHN0cnVjdCBza19idWZmICopKCh1bnNpZ25lZCBsb25nKXJ4ZHAtPkhvc3RfQ29udHJvbCk7CiAJCWlmIChza2IgPT0gTlVMTCkgewotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogVGhlIHNrYiBpcyAiLAorCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTlVMTCBza2IgaW4gUnggSW50clxuIiwKIAkJCQkgIHJpbmdfZGF0YS0+ZGV2LT5uYW1lKTsKLQkJCURCR19QUklOVChFUlJfREJHLCAiTnVsbCBpbiBSeCBJbnRyXG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmIChyaW5nX2RhdGEtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzEpIHsKLQkJCXJ4ZHAxID0gKHN0cnVjdCBSeEQxKilyeGRwOworCQkJcnhkcDEgPSAoc3RydWN0IFJ4RDEgKilyeGRwOwogCQkJcGNpX3VubWFwX3NpbmdsZShyaW5nX2RhdGEtPnBkZXYsIChkbWFfYWRkcl90KQotCQkJCXJ4ZHAxLT5CdWZmZXIwX3B0ciwKLQkJCQlyaW5nX2RhdGEtPm10dSArCi0JCQkJSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX1NJWkUgKwotCQkJCUhFQURFUl84MDJfMl9TSVpFICsKLQkJCQlIRUFERVJfU05BUF9TSVpFLAotCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJCSByeGRwMS0+QnVmZmVyMF9wdHIsCisJCQkJCSByaW5nX2RhdGEtPm10dSArCisJCQkJCSBIRUFERVJfRVRIRVJORVRfSUlfODAyXzNfU0laRSArCisJCQkJCSBIRUFERVJfODAyXzJfU0laRSArCisJCQkJCSBIRUFERVJfU05BUF9TSVpFLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJfSBlbHNlIGlmIChyaW5nX2RhdGEtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKSB7Ci0JCQlyeGRwMyA9IChzdHJ1Y3QgUnhEMyopcnhkcDsKLQkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShyaW5nX2RhdGEtPnBkZXYsIChkbWFfYWRkcl90KQotCQkJCXJ4ZHAzLT5CdWZmZXIwX3B0ciwKLQkJCQlCVUYwX0xFTiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCXBjaV91bm1hcF9zaW5nbGUocmluZ19kYXRhLT5wZGV2LCAoZG1hX2FkZHJfdCkKLQkJCQlyeGRwMy0+QnVmZmVyMl9wdHIsCi0JCQkJcmluZ19kYXRhLT5tdHUgKyA0LAotCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlyeGRwMyA9IChzdHJ1Y3QgUnhEMyAqKXJ4ZHA7CisJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocmluZ19kYXRhLT5wZGV2LAorCQkJCQkJICAgIChkbWFfYWRkcl90KXJ4ZHAzLT5CdWZmZXIwX3B0ciwKKwkJCQkJCSAgICBCVUYwX0xFTiwKKwkJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcGNpX3VubWFwX3NpbmdsZShyaW5nX2RhdGEtPnBkZXYsCisJCQkJCSAoZG1hX2FkZHJfdClyeGRwMy0+QnVmZmVyMl9wdHIsCisJCQkJCSByaW5nX2RhdGEtPm10dSArIDQsCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQl9CiAJCXByZWZldGNoKHNrYi0+ZGF0YSk7CiAJCXJ4X29zbV9oYW5kbGVyKHJpbmdfZGF0YSwgcnhkcCk7CiAJCWdldF9pbmZvLm9mZnNldCsrOwogCQlyaW5nX2RhdGEtPnJ4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0ID0gZ2V0X2luZm8ub2Zmc2V0OwogCQlyeGRwID0gcmluZ19kYXRhLT5yeF9ibG9ja3NbZ2V0X2Jsb2NrXS4KLQkJCQlyeGRzW2dldF9pbmZvLm9mZnNldF0udmlydF9hZGRyOworCQkJcnhkc1tnZXRfaW5mby5vZmZzZXRdLnZpcnRfYWRkcjsKIAkJaWYgKGdldF9pbmZvLm9mZnNldCA9PSByeGRfY291bnRbcmluZ19kYXRhLT5yeGRfbW9kZV0pIHsKIAkJCWdldF9pbmZvLm9mZnNldCA9IDA7CiAJCQlyaW5nX2RhdGEtPnJ4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0ID0gZ2V0X2luZm8ub2Zmc2V0OwpAQCAtMzA0Nyw3ICszMDQxLDcgQEAKIAl9CiAJaWYgKHJpbmdfZGF0YS0+bHJvKSB7CiAJCS8qIENsZWFyIGFsbCBMUk8gc2Vzc2lvbnMgYmVmb3JlIGV4aXRpbmcgKi8KLQkJZm9yIChpPTA7IGk8TUFYX0xST19TRVNTSU9OUzsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfTFJPX1NFU1NJT05TOyBpKyspIHsKIAkJCXN0cnVjdCBscm8gKmxybyA9ICZyaW5nX2RhdGEtPmxybzBfbltpXTsKIAkJCWlmIChscm8tPmluX3VzZSkgewogCQkJCXVwZGF0ZV9MM0w0X2hlYWRlcihyaW5nX2RhdGEtPm5pYywgbHJvKTsKQEAgLTMwNTYsNyArMzA1MCw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JcmV0dXJuKG5hcGlfcGt0cyk7CisJcmV0dXJuIG5hcGlfcGt0czsKIH0KIAogLyoqCkBAIC0zMDgwLDE0ICszMDc0LDE2IEBACiAJaW50IHBrdF9jbnQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXU4IGVycl9tYXNrOworCXN0cnVjdCBzdGF0X2Jsb2NrICpzdGF0cyA9IG5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mbzsKKwlzdHJ1Y3Qgc3dTdGF0ICpzd3N0YXRzID0gJnN0YXRzLT5zd19zdGF0OwogCiAJaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmZmlmb19kYXRhLT50eF9sb2NrLCBmbGFncykpCi0JCQlyZXR1cm47CisJCXJldHVybjsKIAogCWdldF9pbmZvID0gZmlmb19kYXRhLT50eF9jdXJyX2dldF9pbmZvOwogCW1lbWNweSgmcHV0X2luZm8sICZmaWZvX2RhdGEtPnR4X2N1cnJfcHV0X2luZm8sIHNpemVvZihwdXRfaW5mbykpOwotCXR4ZGxwID0gKHN0cnVjdCBUeEQgKikgZmlmb19kYXRhLT5saXN0X2luZm9bZ2V0X2luZm8ub2Zmc2V0XS4KLQkgICAgbGlzdF92aXJ0X2FkZHI7CisJdHhkbHAgPSAoc3RydWN0IFR4RCAqKQorCQlmaWZvX2RhdGEtPmxpc3RfaW5mb1tnZXRfaW5mby5vZmZzZXRdLmxpc3RfdmlydF9hZGRyOwogCXdoaWxlICgoISh0eGRscC0+Q29udHJvbF8xICYgVFhEX0xJU1RfT1dOX1hFTkEpKSAmJgogCSAgICAgICAoZ2V0X2luZm8ub2Zmc2V0ICE9IHB1dF9pbmZvLm9mZnNldCkgJiYKIAkgICAgICAgKHR4ZGxwLT5Ib3N0X0NvbnRyb2wpKSB7CkBAIC0zMDk2LDYyICszMDkyLDU0IEBACiAJCQl1bnNpZ25lZCBsb25nIGxvbmcgZXJyOwogCQkJZXJyID0gdHhkbHAtPkNvbnRyb2xfMSAmIFRYRF9UX0NPREU7CiAJCQlpZiAoZXJyICYgMHgxKSB7Ci0JCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgotCQkJCQkJcGFyaXR5X2Vycl9jbnQrKzsKKwkJCQlzd3N0YXRzLT5wYXJpdHlfZXJyX2NudCsrOwogCQkJfQogCiAJCQkvKiB1cGRhdGUgdF9jb2RlIHN0YXRpc3RpY3MgKi8KIAkJCWVycl9tYXNrID0gZXJyID4+IDQ4OwotCQkJc3dpdGNoKGVycl9tYXNrKSB7Ci0JCQkJY2FzZSAyOgotCQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCi0JCQkJCQkJdHhfYnVmX2Fib3J0X2NudCsrOworCQkJc3dpdGNoIChlcnJfbWFzaykgeworCQkJY2FzZSAyOgorCQkJCXN3c3RhdHMtPnR4X2J1Zl9hYm9ydF9jbnQrKzsKIAkJCQlicmVhazsKIAotCQkJCWNhc2UgMzoKLQkJCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgotCQkJCQkJCXR4X2Rlc2NfYWJvcnRfY250Kys7CisJCQljYXNlIDM6CisJCQkJc3dzdGF0cy0+dHhfZGVzY19hYm9ydF9jbnQrKzsKIAkJCQlicmVhazsKIAotCQkJCWNhc2UgNzoKLQkJCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgotCQkJCQkJCXR4X3Bhcml0eV9lcnJfY250Kys7CisJCQljYXNlIDc6CisJCQkJc3dzdGF0cy0+dHhfcGFyaXR5X2Vycl9jbnQrKzsKIAkJCQlicmVhazsKIAotCQkJCWNhc2UgMTA6Ci0JCQkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC4KLQkJCQkJCQl0eF9saW5rX2xvc3NfY250Kys7CisJCQljYXNlIDEwOgorCQkJCXN3c3RhdHMtPnR4X2xpbmtfbG9zc19jbnQrKzsKIAkJCQlicmVhazsKIAotCQkJCWNhc2UgMTU6Ci0JCQkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC4KLQkJCQkJCQl0eF9saXN0X3Byb2NfZXJyX2NudCsrOworCQkJY2FzZSAxNToKKwkJCQlzd3N0YXRzLT50eF9saXN0X3Byb2NfZXJyX2NudCsrOwogCQkJCWJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJfQogCQl9CiAKIAkJc2tiID0gczJpb190eGRsX2dldHNrYihmaWZvX2RhdGEsIHR4ZGxwLCBnZXRfaW5mby5vZmZzZXQpOwogCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm9fZGF0YS0+dHhfbG9jaywgZmxhZ3MpOwotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTnVsbCBza2IgIiwKLQkJCV9fZnVuY19fKTsKLQkJCURCR19QUklOVChFUlJfREJHLCAiaW4gVHggRnJlZSBJbnRyXG4iKTsKKwkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IE5VTEwgc2tiIGluIFR4IEZyZWUgSW50clxuIiwKKwkJCQkgIF9fZnVuY19fKTsKIAkJCXJldHVybjsKIAkJfQogCQlwa3RfY250Kys7CiAKIAkJLyogVXBkYXRpbmcgdGhlIHN0YXRpc3RpY3MgYmxvY2sgKi8KIAkJbmljLT5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkICs9IHNrYi0+dHJ1ZXNpemU7CisJCXN3c3RhdHMtPm1lbV9mcmVlZCArPSBza2ItPnRydWVzaXplOwogCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCiAJCWdldF9pbmZvLm9mZnNldCsrOwogCQlpZiAoZ2V0X2luZm8ub2Zmc2V0ID09IGdldF9pbmZvLmZpZm9fbGVuICsgMSkKIAkJCWdldF9pbmZvLm9mZnNldCA9IDA7Ci0JCXR4ZGxwID0gKHN0cnVjdCBUeEQgKikgZmlmb19kYXRhLT5saXN0X2luZm8KLQkJICAgIFtnZXRfaW5mby5vZmZzZXRdLmxpc3RfdmlydF9hZGRyOwotCQlmaWZvX2RhdGEtPnR4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0ID0KLQkJICAgIGdldF9pbmZvLm9mZnNldDsKKwkJdHhkbHAgPSAoc3RydWN0IFR4RCAqKQorCQkJZmlmb19kYXRhLT5saXN0X2luZm9bZ2V0X2luZm8ub2Zmc2V0XS5saXN0X3ZpcnRfYWRkcjsKKwkJZmlmb19kYXRhLT50eF9jdXJyX2dldF9pbmZvLm9mZnNldCA9IGdldF9pbmZvLm9mZnNldDsKIAl9CiAKIAlzMmlvX3dha2VfdHhfcXVldWUoZmlmb19kYXRhLCBwa3RfY250LCBuaWMtPmNvbmZpZy5tdWx0aXEpOwpAQCAtMzE2OSw0MyArMzE1Nyw0MSBAQAogICogIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB3cml0ZSB2YWx1ZXMgdG8gdGhlIE1ESU8gcmVnaXN0ZXJzCiAgKiAgTk9ORQogICovCi1zdGF0aWMgdm9pZCBzMmlvX21kaW9fd3JpdGUodTMyIG1tZF90eXBlLCB1NjQgYWRkciwgdTE2IHZhbHVlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgczJpb19tZGlvX3dyaXRlKHUzMiBtbWRfdHlwZSwgdTY0IGFkZHIsIHUxNiB2YWx1ZSwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXU2NCB2YWw2NCA9IDB4MDsKKwl1NjQgdmFsNjQ7CiAJc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CiAKLQkvL2FkZHJlc3MgdHJhbnNhY3Rpb24KLQl2YWw2NCA9IHZhbDY0IHwgTURJT19NTURfSU5EWF9BRERSKGFkZHIpCi0JCQl8IE1ESU9fTU1EX0RFVl9BRERSKG1tZF90eXBlKQotCQkJfCBNRElPX01NU19QUlRfQUREUigweDApOworCS8qIGFkZHJlc3MgdHJhbnNhY3Rpb24gKi8KKwl2YWw2NCA9IE1ESU9fTU1EX0lORFhfQUREUihhZGRyKSB8CisJCU1ESU9fTU1EX0RFVl9BRERSKG1tZF90eXBlKSB8CisJCU1ESU9fTU1TX1BSVF9BRERSKDB4MCk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKIAl2YWw2NCA9IHZhbDY0IHwgTURJT19DVFJMX1NUQVJUX1RSQU5TKDB4RSk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKIAl1ZGVsYXkoMTAwKTsKIAotCS8vRGF0YSB0cmFuc2FjdGlvbgotCXZhbDY0ID0gMHgwOwotCXZhbDY0ID0gdmFsNjQgfCBNRElPX01NRF9JTkRYX0FERFIoYWRkcikKLQkJCXwgTURJT19NTURfREVWX0FERFIobW1kX3R5cGUpCi0JCQl8IE1ESU9fTU1TX1BSVF9BRERSKDB4MCkKLQkJCXwgTURJT19NRElPX0RBVEEodmFsdWUpCi0JCQl8IE1ESU9fT1AoTURJT19PUF9XUklURV9UUkFOUyk7CisJLyogRGF0YSB0cmFuc2FjdGlvbiAqLworCXZhbDY0ID0gTURJT19NTURfSU5EWF9BRERSKGFkZHIpIHwKKwkJTURJT19NTURfREVWX0FERFIobW1kX3R5cGUpIHwKKwkJTURJT19NTVNfUFJUX0FERFIoMHgwKSB8CisJCU1ESU9fTURJT19EQVRBKHZhbHVlKSB8CisJCU1ESU9fT1AoTURJT19PUF9XUklURV9UUkFOUyk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKIAl2YWw2NCA9IHZhbDY0IHwgTURJT19DVFJMX1NUQVJUX1RSQU5TKDB4RSk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKIAl1ZGVsYXkoMTAwKTsKIAotCXZhbDY0ID0gMHgwOwotCXZhbDY0ID0gdmFsNjQgfCBNRElPX01NRF9JTkRYX0FERFIoYWRkcikKLQl8IE1ESU9fTU1EX0RFVl9BRERSKG1tZF90eXBlKQotCXwgTURJT19NTVNfUFJUX0FERFIoMHgwKQotCXwgTURJT19PUChNRElPX09QX1JFQURfVFJBTlMpOworCXZhbDY0ID0gTURJT19NTURfSU5EWF9BRERSKGFkZHIpIHwKKwkJTURJT19NTURfREVWX0FERFIobW1kX3R5cGUpIHwKKwkJTURJT19NTVNfUFJUX0FERFIoMHgwKSB8CisJCU1ESU9fT1AoTURJT19PUF9SRUFEX1RSQU5TKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOwogCXZhbDY0ID0gdmFsNjQgfCBNRElPX0NUUkxfU1RBUlRfVFJBTlMoMHhFKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOwogCXVkZWxheSgxMDApOwotCiB9CiAKIC8qKgpAQCAtMzIyNSwyMCArMzIxMSwxOSBAQAogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCiAJLyogYWRkcmVzcyB0cmFuc2FjdGlvbiAqLwotCXZhbDY0ID0gdmFsNjQgfCBNRElPX01NRF9JTkRYX0FERFIoYWRkcikKLQkJCXwgTURJT19NTURfREVWX0FERFIobW1kX3R5cGUpCi0JCQl8IE1ESU9fTU1TX1BSVF9BRERSKDB4MCk7CisJdmFsNjQgPSB2YWw2NCB8IChNRElPX01NRF9JTkRYX0FERFIoYWRkcikKKwkJCSB8IE1ESU9fTU1EX0RFVl9BRERSKG1tZF90eXBlKQorCQkJIHwgTURJT19NTVNfUFJUX0FERFIoMHgwKSk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKIAl2YWw2NCA9IHZhbDY0IHwgTURJT19DVFJMX1NUQVJUX1RSQU5TKDB4RSk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKIAl1ZGVsYXkoMTAwKTsKIAogCS8qIERhdGEgdHJhbnNhY3Rpb24gKi8KLQl2YWw2NCA9IDB4MDsKLQl2YWw2NCA9IHZhbDY0IHwgTURJT19NTURfSU5EWF9BRERSKGFkZHIpCi0JCQl8IE1ESU9fTU1EX0RFVl9BRERSKG1tZF90eXBlKQotCQkJfCBNRElPX01NU19QUlRfQUREUigweDApCi0JCQl8IE1ESU9fT1AoTURJT19PUF9SRUFEX1RSQU5TKTsKKwl2YWw2NCA9IE1ESU9fTU1EX0lORFhfQUREUihhZGRyKSB8CisJCU1ESU9fTU1EX0RFVl9BRERSKG1tZF90eXBlKSB8CisJCU1ESU9fTU1TX1BSVF9BRERSKDB4MCkgfAorCQlNRElPX09QKE1ESU9fT1BfUkVBRF9UUkFOUyk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKIAl2YWw2NCA9IHZhbDY0IHwgTURJT19DVFJMX1NUQVJUX1RSQU5TKDB4RSk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWRpb19jb250cm9sKTsKQEAgLTMyNTAsNiArMzIzNSw3IEBACiAJcnZhbDY0ID0gcnZhbDY0ID4+IDE2OwogCXJldHVybiBydmFsNjQ7CiB9CisKIC8qKgogICogIHMyaW9fY2hrX3hwYWtfY291bnRlciAtIEZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHhwYWsgY291bnRlcnMKICAqICBAY291bnRlciAgICAgIDogY291dGVyIHZhbHVlIHRvIGJlIHVwZGF0ZWQKQEAgLTMyNjAsNDUgKzMyNDYsNDMgQEAKICAqICBOT05FCiAgKi8KIAotc3RhdGljIHZvaWQgczJpb19jaGtfeHBha19jb3VudGVyKHU2NCAqY291bnRlciwgdTY0ICogcmVnc19zdGF0LCB1MzIgaW5kZXgsIHUxNiBmbGFnLCB1MTYgdHlwZSkKK3N0YXRpYyB2b2lkIHMyaW9fY2hrX3hwYWtfY291bnRlcih1NjQgKmNvdW50ZXIsIHU2NCAqIHJlZ3Nfc3RhdCwgdTMyIGluZGV4LAorCQkJCSAgdTE2IGZsYWcsIHUxNiB0eXBlKQogewogCXU2NCBtYXNrID0gMHgzOwogCXU2NCB2YWw2NDsKIAlpbnQgaTsKLQlmb3IoaSA9IDA7IGkgPGluZGV4OyBpKyspCisJZm9yIChpID0gMDsgaSA8IGluZGV4OyBpKyspCiAJCW1hc2sgPSBtYXNrIDw8IDB4MjsKIAotCWlmKGZsYWcgPiAwKQotCXsKKwlpZiAoZmxhZyA+IDApIHsKIAkJKmNvdW50ZXIgPSAqY291bnRlciArIDE7CiAJCXZhbDY0ID0gKnJlZ3Nfc3RhdCAmIG1hc2s7CiAJCXZhbDY0ID0gdmFsNjQgPj4gKGluZGV4ICogMHgyKTsKIAkJdmFsNjQgPSB2YWw2NCArIDE7Ci0JCWlmKHZhbDY0ID09IDMpCi0JCXsKLQkJCXN3aXRjaCh0eXBlKQotCQkJeworCQlpZiAodmFsNjQgPT0gMykgeworCQkJc3dpdGNoICh0eXBlKSB7CiAJCQljYXNlIDE6Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICJUYWtlIFhmcmFtZSBOSUMgb3V0IG9mICIKLQkJCQkJICAic2VydmljZS4gRXhjZXNzaXZlIHRlbXBlcmF0dXJlcyBtYXkgIgotCQkJCQkgICJyZXN1bHQgaW4gcHJlbWF0dXJlIHRyYW5zY2VpdmVyICIKLQkJCQkJICAiZmFpbHVyZSBcbiIpOwotCQkJYnJlYWs7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkJCSAgIlRha2UgWGZyYW1lIE5JQyBvdXQgb2Ygc2VydmljZS5cbiIpOworCQkJCURCR19QUklOVChFUlJfREJHLAorIkV4Y2Vzc2l2ZSB0ZW1wZXJhdHVyZXMgbWF5IHJlc3VsdCBpbiBwcmVtYXR1cmUgdHJhbnNjZWl2ZXIgZmFpbHVyZS5cbiIpOworCQkJCWJyZWFrOwogCQkJY2FzZSAyOgotCQkJCURCR19QUklOVChFUlJfREJHLCAiVGFrZSBYZnJhbWUgTklDIG91dCBvZiAiCi0JCQkJCSAgInNlcnZpY2UgRXhjZXNzaXZlIGJpYXMgY3VycmVudHMgbWF5ICIKLQkJCQkJICAiaW5kaWNhdGUgaW1taW5lbnQgbGFzZXIgZGlvZGUgIgotCQkJCQkgICJmYWlsdXJlIFxuIik7Ci0JCQlicmVhazsKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCQkJICAiVGFrZSBYZnJhbWUgTklDIG91dCBvZiBzZXJ2aWNlLlxuIik7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsCisiRXhjZXNzaXZlIGJpYXMgY3VycmVudHMgbWF5IGluZGljYXRlIGltbWluZW50IGxhc2VyIGRpb2RlIGZhaWx1cmUuXG4iKTsKKwkJCQlicmVhazsKIAkJCWNhc2UgMzoKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIlRha2UgWGZyYW1lIE5JQyBvdXQgb2YgIgotCQkJCQkgICJzZXJ2aWNlIEV4Y2Vzc2l2ZSBsYXNlciBvdXRwdXQgIgotCQkJCQkgICJwb3dlciBtYXkgc2F0dXJhdGUgZmFyLWVuZCAiCi0JCQkJCSAgInJlY2VpdmVyXG4iKTsKLQkJCWJyZWFrOworCQkJCURCR19QUklOVChFUlJfREJHLAorCQkJCQkgICJUYWtlIFhmcmFtZSBOSUMgb3V0IG9mIHNlcnZpY2UuXG4iKTsKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywKKyJFeGNlc3NpdmUgbGFzZXIgb3V0cHV0IHBvd2VyIG1heSBzYXR1cmF0ZSBmYXItZW5kIHJlY2VpdmVyLlxuIik7CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCURCR19QUklOVChFUlJfREJHLCAiSW5jb3JyZWN0IFhQQUsgQWxhcm0gIgotCQkJCQkgICJ0eXBlIFxuIik7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkJCSAgIkluY29ycmVjdCBYUEFLIEFsYXJtIHR5cGVcbiIpOwogCQkJfQogCQkJdmFsNjQgPSAweDA7CiAJCX0KQEAgLTMzMjYsMjQgKzMzMTAsMjQgQEAKIAl1NjQgYWRkciAgPSAweDA7CiAKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc3RhdF9ibG9jayAqc3RhdF9pbmZvID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm87CisJc3RydWN0IHN0YXRfYmxvY2sgKnN0YXRzID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm87CisJc3RydWN0IHhwYWtTdGF0ICp4c3RhdHMgPSAmc3RhdHMtPnhwYWtfc3RhdDsKIAogCS8qIENoZWNrIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIE1ESU8gc2xhdmUgKi8KIAlhZGRyID0gTURJT19DVFJMMTsKIAl2YWw2NCA9IDB4MDsKIAl2YWw2NCA9IHMyaW9fbWRpb19yZWFkKE1ESU9fTU1EX1BNQVBNRCwgYWRkciwgZGV2KTsKLQlpZigodmFsNjQgPT0gMHhGRkZGKSB8fCAodmFsNjQgPT0gMHgwMDAwKSkKLQl7Ci0JCURCR19QUklOVChFUlJfREJHLCAiRVJSOiBNRElPIHNsYXZlIGFjY2VzcyBmYWlsZWQgLSAiCi0JCQkgICJSZXR1cm5lZCAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbDY0KTsKKwlpZiAoKHZhbDY0ID09IDB4RkZGRikgfHwgKHZhbDY0ID09IDB4MDAwMCkpIHsKKwkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkgICJFUlI6IE1ESU8gc2xhdmUgYWNjZXNzIGZhaWxlZCAtIFJldHVybmVkICVsbHhcbiIsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpdmFsNjQpOwogCQlyZXR1cm47CiAJfQogCiAJLyogQ2hlY2sgZm9yIHRoZSBleHBlY3RlZCB2YWx1ZSBvZiBjb250cm9sIHJlZyAxICovCi0JaWYodmFsNjQgIT0gTURJT19DVFJMMV9TUEVFRDEwRykKLQl7Ci0JCURCR19QUklOVChFUlJfREJHLCAiSW5jb3JyZWN0IHZhbHVlIGF0IFBNQSBhZGRyZXNzIDB4MDAwMCAtICIpOwotCQlEQkdfUFJJTlQoRVJSX0RCRywgIlJldHVybmVkOiAlbGx4LSBFeHBlY3RlZDogMHgleFxuIiwKKwlpZiAodmFsNjQgIT0gTURJT19DVFJMMV9TUEVFRDEwRykgeworCQlEQkdfUFJJTlQoRVJSX0RCRywgIkluY29ycmVjdCB2YWx1ZSBhdCBQTUEgYWRkcmVzcyAweDAwMDAgLSAiCisJCQkgICJSZXR1cm5lZDogJWxseC0gRXhwZWN0ZWQ6IDB4JXhcbiIsCiAJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpdmFsNjQsIE1ESU9fQ1RSTDFfU1BFRUQxMEcpOwogCQlyZXR1cm47CiAJfQpAQCAtMzM2MCw1MyArMzM0NCw1MyBAQAogCiAJZmxhZyA9IENIRUNLQklUKHZhbDY0LCAweDcpOwogCXR5cGUgPSAxOwotCXMyaW9fY2hrX3hwYWtfY291bnRlcigmc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fdHJhbnNjZWl2ZXJfdGVtcF9oaWdoLAotCQkJCSZzdGF0X2luZm8tPnhwYWtfc3RhdC54cGFrX3JlZ3Nfc3RhdCwKLQkJCQkweDAsIGZsYWcsIHR5cGUpOworCXMyaW9fY2hrX3hwYWtfY291bnRlcigmeHN0YXRzLT5hbGFybV90cmFuc2NlaXZlcl90ZW1wX2hpZ2gsCisJCQkgICAgICAmeHN0YXRzLT54cGFrX3JlZ3Nfc3RhdCwKKwkJCSAgICAgIDB4MCwgZmxhZywgdHlwZSk7CiAKLQlpZihDSEVDS0JJVCh2YWw2NCwgMHg2KSkKLQkJc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fdHJhbnNjZWl2ZXJfdGVtcF9sb3crKzsKKwlpZiAoQ0hFQ0tCSVQodmFsNjQsIDB4NikpCisJCXhzdGF0cy0+YWxhcm1fdHJhbnNjZWl2ZXJfdGVtcF9sb3crKzsKIAogCWZsYWcgPSBDSEVDS0JJVCh2YWw2NCwgMHgzKTsKIAl0eXBlID0gMjsKLQlzMmlvX2Noa194cGFrX2NvdW50ZXIoJnN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX2JpYXNfY3VycmVudF9oaWdoLAotCQkJCSZzdGF0X2luZm8tPnhwYWtfc3RhdC54cGFrX3JlZ3Nfc3RhdCwKLQkJCQkweDIsIGZsYWcsIHR5cGUpOworCXMyaW9fY2hrX3hwYWtfY291bnRlcigmeHN0YXRzLT5hbGFybV9sYXNlcl9iaWFzX2N1cnJlbnRfaGlnaCwKKwkJCSAgICAgICZ4c3RhdHMtPnhwYWtfcmVnc19zdGF0LAorCQkJICAgICAgMHgyLCBmbGFnLCB0eXBlKTsKIAotCWlmKENIRUNLQklUKHZhbDY0LCAweDIpKQotCQlzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV9sYXNlcl9iaWFzX2N1cnJlbnRfbG93Kys7CisJaWYgKENIRUNLQklUKHZhbDY0LCAweDIpKQorCQl4c3RhdHMtPmFsYXJtX2xhc2VyX2JpYXNfY3VycmVudF9sb3crKzsKIAogCWZsYWcgPSBDSEVDS0JJVCh2YWw2NCwgMHgxKTsKIAl0eXBlID0gMzsKLQlzMmlvX2Noa194cGFrX2NvdW50ZXIoJnN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoLAotCQkJCSZzdGF0X2luZm8tPnhwYWtfc3RhdC54cGFrX3JlZ3Nfc3RhdCwKLQkJCQkweDQsIGZsYWcsIHR5cGUpOworCXMyaW9fY2hrX3hwYWtfY291bnRlcigmeHN0YXRzLT5hbGFybV9sYXNlcl9vdXRwdXRfcG93ZXJfaGlnaCwKKwkJCSAgICAgICZ4c3RhdHMtPnhwYWtfcmVnc19zdGF0LAorCQkJICAgICAgMHg0LCBmbGFnLCB0eXBlKTsKIAotCWlmKENIRUNLQklUKHZhbDY0LCAweDApKQotCQlzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV9sYXNlcl9vdXRwdXRfcG93ZXJfbG93Kys7CisJaWYgKENIRUNLQklUKHZhbDY0LCAweDApKQorCQl4c3RhdHMtPmFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9sb3crKzsKIAogCS8qIFJlYWRpbmcgdGhlIFdhcm5pbmcgZmxhZ3MgKi8KIAlhZGRyID0gMHhBMDc0OwogCXZhbDY0ID0gMHgwOwogCXZhbDY0ID0gczJpb19tZGlvX3JlYWQoTURJT19NTURfUE1BUE1ELCBhZGRyLCBkZXYpOwogCi0JaWYoQ0hFQ0tCSVQodmFsNjQsIDB4NykpCi0JCXN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fdHJhbnNjZWl2ZXJfdGVtcF9oaWdoKys7CisJaWYgKENIRUNLQklUKHZhbDY0LCAweDcpKQorCQl4c3RhdHMtPndhcm5fdHJhbnNjZWl2ZXJfdGVtcF9oaWdoKys7CiAKLQlpZihDSEVDS0JJVCh2YWw2NCwgMHg2KSkKLQkJc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl90cmFuc2NlaXZlcl90ZW1wX2xvdysrOworCWlmIChDSEVDS0JJVCh2YWw2NCwgMHg2KSkKKwkJeHN0YXRzLT53YXJuX3RyYW5zY2VpdmVyX3RlbXBfbG93Kys7CiAKLQlpZihDSEVDS0JJVCh2YWw2NCwgMHgzKSkKLQkJc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl9sYXNlcl9iaWFzX2N1cnJlbnRfaGlnaCsrOworCWlmIChDSEVDS0JJVCh2YWw2NCwgMHgzKSkKKwkJeHN0YXRzLT53YXJuX2xhc2VyX2JpYXNfY3VycmVudF9oaWdoKys7CiAKLQlpZihDSEVDS0JJVCh2YWw2NCwgMHgyKSkKLQkJc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl9sYXNlcl9iaWFzX2N1cnJlbnRfbG93Kys7CisJaWYgKENIRUNLQklUKHZhbDY0LCAweDIpKQorCQl4c3RhdHMtPndhcm5fbGFzZXJfYmlhc19jdXJyZW50X2xvdysrOwogCi0JaWYoQ0hFQ0tCSVQodmFsNjQsIDB4MSkpCi0JCXN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fbGFzZXJfb3V0cHV0X3Bvd2VyX2hpZ2grKzsKKwlpZiAoQ0hFQ0tCSVQodmFsNjQsIDB4MSkpCisJCXhzdGF0cy0+d2Fybl9sYXNlcl9vdXRwdXRfcG93ZXJfaGlnaCsrOwogCi0JaWYoQ0hFQ0tCSVQodmFsNjQsIDB4MCkpCi0JCXN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fbGFzZXJfb3V0cHV0X3Bvd2VyX2xvdysrOworCWlmIChDSEVDS0JJVCh2YWw2NCwgMHgwKSkKKwkJeHN0YXRzLT53YXJuX2xhc2VyX291dHB1dF9wb3dlcl9sb3crKzsKIH0KIAogLyoqCkBAIC0zNDIxLDcgKzM0MDUsNyBAQAogICovCiAKIHN0YXRpYyBpbnQgd2FpdF9mb3JfY21kX2NvbXBsZXRlKHZvaWQgX19pb21lbSAqYWRkciwgdTY0IGJ1c3lfYml0LAotCQkJCWludCBiaXRfc3RhdGUpCisJCQkJIGludCBiaXRfc3RhdGUpCiB7CiAJaW50IHJldCA9IEZBSUxVUkUsIGNudCA9IDAsIGRlbGF5ID0gMTsKIAl1NjQgdmFsNjQ7CkBAIC0zNDQzLDcgKzM0MjcsNyBAQAogCQkJfQogCQl9CiAKLQkJaWYoaW5faW50ZXJydXB0KCkpCisJCWlmIChpbl9pbnRlcnJ1cHQoKSkKIAkJCW1kZWxheShkZWxheSk7CiAJCWVsc2UKIAkJCW1zbGVlcChkZWxheSk7CkBAIC0zNDgzLDcgKzM0NjcsNyBAQAogICogIHZvaWQuCiAgKi8KIAotc3RhdGljIHZvaWQgczJpb19yZXNldChzdHJ1Y3QgczJpb19uaWMgKiBzcCkKK3N0YXRpYyB2b2lkIHMyaW9fcmVzZXQoc3RydWN0IHMyaW9fbmljICpzcCkKIHsKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAl1NjQgdmFsNjQ7CkBAIC0zNDkyLDE4ICszNDc2LDE5IEBACiAJdTE2IHZhbDE2OwogCXVuc2lnbmVkIGxvbmcgbG9uZyB1cF9jbnQsIGRvd25fY250LCB1cF90aW1lLCBkb3duX3RpbWUsIHJlc2V0X2NudDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbWVtX2FsbG9jX2NudCwgbWVtX2ZyZWVfY250LCB3YXRjaGRvZ19jbnQ7CisJc3RydWN0IHN0YXRfYmxvY2sgKnN0YXRzOworCXN0cnVjdCBzd1N0YXQgKnN3c3RhdHM7CiAKLQlEQkdfUFJJTlQoSU5JVF9EQkcsIiVzIC0gUmVzZXR0aW5nIFhGcmFtZSBjYXJkICVzXG4iLAotCQkJX19mdW5jX18sIHNwLT5kZXYtPm5hbWUpOworCURCR19QUklOVChJTklUX0RCRywgIiVzOiBSZXNldHRpbmcgWEZyYW1lIGNhcmQgJXNcbiIsCisJCSAgX19mdW5jX18sIHNwLT5kZXYtPm5hbWUpOwogCiAJLyogQmFjayB1cCAgdGhlIFBDSS1YIENNRCByZWcsIGRvbnQgd2FudCB0byBsb3NlIE1NUkJDLCBPU1Qgc2V0dGluZ3MgKi8KIAlwY2lfcmVhZF9jb25maWdfd29yZChzcC0+cGRldiwgUENJWF9DT01NQU5EX1JFR0lTVEVSLCAmKHBjaV9jbWQpKTsKIAogCXZhbDY0ID0gU1dfUkVTRVRfQUxMOwogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnN3X3Jlc2V0KTsKLQlpZiAoc3Ryc3RyKHNwLT5wcm9kdWN0X25hbWUsICJDWDQiKSkgeworCWlmIChzdHJzdHIoc3AtPnByb2R1Y3RfbmFtZSwgIkNYNCIpKQogCQltc2xlZXAoNzUwKTsKLQl9CiAJbXNsZWVwKDI1MCk7CiAJZm9yIChpID0gMDsgaSA8IFMySU9fTUFYX1BDSV9DT05GSUdfU1BBQ0VfUkVJTklUOyBpKyspIHsKIApAQCAtMzUxNSw5ICszNTAwLDggQEAKIAkJbXNsZWVwKDIwMCk7CiAJfQogCi0JaWYgKGNoZWNrX3BjaV9kZXZpY2VfaWQodmFsMTYpID09ICh1MTYpUENJX0FOWV9JRCkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywiJXMgU1dfUmVzZXQgZmFpbGVkIVxuIiwgX19mdW5jX18pOwotCX0KKwlpZiAoY2hlY2tfcGNpX2RldmljZV9pZCh2YWwxNikgPT0gKHUxNilQQ0lfQU5ZX0lEKQorCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzIFNXX1Jlc2V0IGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKIAogCXBjaV93cml0ZV9jb25maWdfd29yZChzcC0+cGRldiwgUENJWF9DT01NQU5EX1JFR0lTVEVSLCBwY2lfY21kKTsKIApAQCAtMzU0NSwyNyArMzUyOSwzMiBAQAogCX0KIAogCS8qIFJlc2V0IGRldmljZSBzdGF0aXN0aWNzIG1haW50YWluZWQgYnkgT1MgKi8KLQltZW1zZXQoJnNwLT5zdGF0cywgMCwgc2l6ZW9mIChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOworCW1lbXNldCgmc3AtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKIAotCXVwX2NudCA9IHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmxpbmtfdXBfY250OwotCWRvd25fY250ID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua19kb3duX2NudDsKLQl1cF90aW1lID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua191cF90aW1lOwotCWRvd25fdGltZSA9IHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmxpbmtfZG93bl90aW1lOwotCXJlc2V0X2NudCA9IHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LnNvZnRfcmVzZXRfY250OwotCW1lbV9hbGxvY19jbnQgPSBzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkOwotCW1lbV9mcmVlX2NudCA9IHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZDsKLQl3YXRjaGRvZ19jbnQgPSBzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC53YXRjaGRvZ190aW1lcl9jbnQ7CisJc3RhdHMgPSBzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mbzsKKwlzd3N0YXRzID0gJnN0YXRzLT5zd19zdGF0OworCiAJLyogc2F2ZSBsaW5rIHVwL2Rvd24gdGltZS9jbnQsIHJlc2V0L21lbW9yeS93YXRjaGRvZyBjbnQgKi8KLQltZW1zZXQoc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8sIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdF9ibG9jaykpOworCXVwX2NudCA9IHN3c3RhdHMtPmxpbmtfdXBfY250OworCWRvd25fY250ID0gc3dzdGF0cy0+bGlua19kb3duX2NudDsKKwl1cF90aW1lID0gc3dzdGF0cy0+bGlua191cF90aW1lOworCWRvd25fdGltZSA9IHN3c3RhdHMtPmxpbmtfZG93bl90aW1lOworCXJlc2V0X2NudCA9IHN3c3RhdHMtPnNvZnRfcmVzZXRfY250OworCW1lbV9hbGxvY19jbnQgPSBzd3N0YXRzLT5tZW1fYWxsb2NhdGVkOworCW1lbV9mcmVlX2NudCA9IHN3c3RhdHMtPm1lbV9mcmVlZDsKKwl3YXRjaGRvZ19jbnQgPSBzd3N0YXRzLT53YXRjaGRvZ190aW1lcl9jbnQ7CisKKwltZW1zZXQoc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdF9ibG9jaykpOworCiAJLyogcmVzdG9yZSBsaW5rIHVwL2Rvd24gdGltZS9jbnQsIHJlc2V0L21lbW9yeS93YXRjaGRvZyBjbnQgKi8KLQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX3VwX2NudCA9IHVwX2NudDsKLQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX2Rvd25fY250ID0gZG93bl9jbnQ7Ci0Jc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua191cF90aW1lID0gdXBfdGltZTsKLQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX2Rvd25fdGltZSA9IGRvd25fdGltZTsKLQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5zb2Z0X3Jlc2V0X2NudCA9IHJlc2V0X2NudDsKLQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkID0gbWVtX2FsbG9jX2NudDsKLQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgPSBtZW1fZnJlZV9jbnQ7Ci0Jc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQud2F0Y2hkb2dfdGltZXJfY250ID0gd2F0Y2hkb2dfY250OworCXN3c3RhdHMtPmxpbmtfdXBfY250ID0gdXBfY250OworCXN3c3RhdHMtPmxpbmtfZG93bl9jbnQgPSBkb3duX2NudDsKKwlzd3N0YXRzLT5saW5rX3VwX3RpbWUgPSB1cF90aW1lOworCXN3c3RhdHMtPmxpbmtfZG93bl90aW1lID0gZG93bl90aW1lOworCXN3c3RhdHMtPnNvZnRfcmVzZXRfY250ID0gcmVzZXRfY250OworCXN3c3RhdHMtPm1lbV9hbGxvY2F0ZWQgPSBtZW1fYWxsb2NfY250OworCXN3c3RhdHMtPm1lbV9mcmVlZCA9IG1lbV9mcmVlX2NudDsKKwlzd3N0YXRzLT53YXRjaGRvZ190aW1lcl9jbnQgPSB3YXRjaGRvZ19jbnQ7CiAKIAkvKiBTWEUtMDAyOiBDb25maWd1cmUgbGluayBhbmQgYWN0aXZpdHkgTEVEIHRvIHR1cm4gaXQgb2ZmICovCiAJc3ViaWQgPSBzcC0+cGRldi0+c3Vic3lzdGVtX2RldmljZTsKQEAgLTM2MDAsNyArMzU4OSw3IEBACiAgKiAgU1VDQ0VTUyBvbiBzdWNjZXNzIGFuZCBGQUlMVVJFIG9uIGZhaWx1cmUuCiAgKi8KIAotc3RhdGljIGludCBzMmlvX3NldF9zd2FwcGVyKHN0cnVjdCBzMmlvX25pYyAqIHNwKQorc3RhdGljIGludCBzMmlvX3NldF9zd2FwcGVyKHN0cnVjdCBzMmlvX25pYyAqc3ApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNwLT5kZXY7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CkBAIC0zNjE5LDcgKzM2MDgsNyBAQAogCQkJCTB4NDIwMDAwNDI0MjAwMDA0MlVMTCwgIC8qIEZFPTAsIFNFPTEgKi8KIAkJCQkwfTsgICAgICAgICAgICAgICAgICAgICAvKiBGRT0wLCBTRT0wICovCiAKLQkJd2hpbGUoaTw0KSB7CisJCXdoaWxlIChpIDwgNCkgewogCQkJd3JpdGVxKHZhbHVlW2ldLCAmYmFyMC0+c3dhcHBlcl9jdHJsKTsKIAkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnBpZl9yZF9zd2FwcGVyX2ZiKTsKIAkJCWlmICh2YWw2NCA9PSAweDAxMjM0NTY3ODlBQkNERUZVTEwpCkBAIC0zNjI3LDEwICszNjE2LDkgQEAKIAkJCWkrKzsKIAkJfQogCQlpZiAoaSA9PSA0KSB7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBFbmRpYW4gc2V0dGluZ3MgYXJlIHdyb25nLCAiLAotCQkJCWRldi0+bmFtZSk7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgImZlZWRiYWNrIHJlYWQgJWxseFxuIiwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSB2YWw2NCk7CisJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBFbmRpYW4gc2V0dGluZ3MgYXJlIHdyb25nLCAiCisJCQkJICAiZmVlZGJhY2sgcmVhZCAlbGx4XG4iLAorCQkJCSAgZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbDY0KTsKIAkJCXJldHVybiBGQUlMVVJFOwogCQl9CiAJCXZhbHIgPSB2YWx1ZVtpXTsKQEAgLTM2NDIsNDYgKzM2MzAsNDcgQEAKIAl3cml0ZXEodmFsdCwgJmJhcjAtPnhtc2lfYWRkcmVzcyk7CiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+eG1zaV9hZGRyZXNzKTsKIAotCWlmKHZhbDY0ICE9IHZhbHQpIHsKKwlpZiAodmFsNjQgIT0gdmFsdCkgewogCQlpbnQgaSA9IDA7CiAJCXU2NCB2YWx1ZVtdID0geyAweDAwQzNDMzAwMDBDM0MzMDBVTEwsICAvKiBGRT0xLCBTRT0xICovCiAJCQkJMHgwMDgxODEwMDAwODE4MTAwVUxMLCAgLyogRkU9MSwgU0U9MCAqLwogCQkJCTB4MDA0MjQyMDAwMDQyNDIwMFVMTCwgIC8qIEZFPTAsIFNFPTEgKi8KIAkJCQkwfTsgICAgICAgICAgICAgICAgICAgICAvKiBGRT0wLCBTRT0wICovCiAKLQkJd2hpbGUoaTw0KSB7CisJCXdoaWxlIChpIDwgNCkgewogCQkJd3JpdGVxKCh2YWx1ZVtpXSB8IHZhbHIpLCAmYmFyMC0+c3dhcHBlcl9jdHJsKTsKIAkJCXdyaXRlcSh2YWx0LCAmYmFyMC0+eG1zaV9hZGRyZXNzKTsKIAkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnhtc2lfYWRkcmVzcyk7Ci0JCQlpZih2YWw2NCA9PSB2YWx0KQorCQkJaWYgKHZhbDY0ID09IHZhbHQpCiAJCQkJYnJlYWs7CiAJCQlpKys7CiAJCX0KLQkJaWYoaSA9PSA0KSB7CisJCWlmIChpID09IDQpIHsKIAkJCXVuc2lnbmVkIGxvbmcgbG9uZyB4ID0gdmFsNjQ7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgIldyaXRlIGZhaWxlZCwgWG1zaV9hZGRyICIpOwotCQkJREJHX1BSSU5UKEVSUl9EQkcsICJyZWFkczoweCVsbHhcbiIsIHgpOworCQkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkJICAiV3JpdGUgZmFpbGVkLCBYbXNpX2FkZHIgcmVhZHM6MHglbGx4XG4iLCB4KTsKIAkJCXJldHVybiBGQUlMVVJFOwogCQl9CiAJfQogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnN3YXBwZXJfY3RybCk7CiAJdmFsNjQgJj0gMHhGRkZGMDAwMDAwMDAwMDAwVUxMOwogCi0jaWZkZWYgIF9fQklHX0VORElBTgorI2lmZGVmIF9fQklHX0VORElBTgogCS8qCiAJICogVGhlIGRldmljZSBieSBkZWZhdWx0IHNldCB0byBhIGJpZyBlbmRpYW4gZm9ybWF0LCBzbyBhCiAJICogYmlnIGVuZGlhbiBkcml2ZXIgbmVlZCBub3Qgc2V0IGFueXRoaW5nLgogCSAqLwogCXZhbDY0IHw9IChTV0FQUEVSX0NUUkxfVFhQX0ZFIHwKLQkJIFNXQVBQRVJfQ1RSTF9UWFBfU0UgfAotCQkgU1dBUFBFUl9DVFJMX1RYRF9SX0ZFIHwKLQkJIFNXQVBQRVJfQ1RSTF9UWERfV19GRSB8Ci0JCSBTV0FQUEVSX0NUUkxfVFhGX1JfRkUgfAotCQkgU1dBUFBFUl9DVFJMX1JYRF9SX0ZFIHwKLQkJIFNXQVBQRVJfQ1RSTF9SWERfV19GRSB8Ci0JCSBTV0FQUEVSX0NUUkxfUlhGX1dfRkUgfAotCQkgU1dBUFBFUl9DVFJMX1hNU0lfRkUgfAotCQkgU1dBUFBFUl9DVFJMX1NUQVRTX0ZFIHwgU1dBUFBFUl9DVFJMX1NUQVRTX1NFKTsKKwkJICBTV0FQUEVSX0NUUkxfVFhQX1NFIHwKKwkJICBTV0FQUEVSX0NUUkxfVFhEX1JfRkUgfAorCQkgIFNXQVBQRVJfQ1RSTF9UWERfV19GRSB8CisJCSAgU1dBUFBFUl9DVFJMX1RYRl9SX0ZFIHwKKwkJICBTV0FQUEVSX0NUUkxfUlhEX1JfRkUgfAorCQkgIFNXQVBQRVJfQ1RSTF9SWERfV19GRSB8CisJCSAgU1dBUFBFUl9DVFJMX1JYRl9XX0ZFIHwKKwkJICBTV0FQUEVSX0NUUkxfWE1TSV9GRSB8CisJCSAgU1dBUFBFUl9DVFJMX1NUQVRTX0ZFIHwKKwkJICBTV0FQUEVSX0NUUkxfU1RBVFNfU0UpOwogCWlmIChzcC0+Y29uZmlnLmludHJfdHlwZSA9PSBJTlRBKQogCQl2YWw2NCB8PSBTV0FQUEVSX0NUUkxfWE1TSV9TRTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5zd2FwcGVyX2N0cmwpOwpAQCAtMzY5MiwxOSArMzY4MSwyMCBAQAogCSAqIHdlIHdhbnQgdG8gc2V0LgogCSAqLwogCXZhbDY0IHw9IChTV0FQUEVSX0NUUkxfVFhQX0ZFIHwKLQkJIFNXQVBQRVJfQ1RSTF9UWFBfU0UgfAotCQkgU1dBUFBFUl9DVFJMX1RYRF9SX0ZFIHwKLQkJIFNXQVBQRVJfQ1RSTF9UWERfUl9TRSB8Ci0JCSBTV0FQUEVSX0NUUkxfVFhEX1dfRkUgfAotCQkgU1dBUFBFUl9DVFJMX1RYRF9XX1NFIHwKLQkJIFNXQVBQRVJfQ1RSTF9UWEZfUl9GRSB8Ci0JCSBTV0FQUEVSX0NUUkxfUlhEX1JfRkUgfAotCQkgU1dBUFBFUl9DVFJMX1JYRF9SX1NFIHwKLQkJIFNXQVBQRVJfQ1RSTF9SWERfV19GRSB8Ci0JCSBTV0FQUEVSX0NUUkxfUlhEX1dfU0UgfAotCQkgU1dBUFBFUl9DVFJMX1JYRl9XX0ZFIHwKLQkJIFNXQVBQRVJfQ1RSTF9YTVNJX0ZFIHwKLQkJIFNXQVBQRVJfQ1RSTF9TVEFUU19GRSB8IFNXQVBQRVJfQ1RSTF9TVEFUU19TRSk7CisJCSAgU1dBUFBFUl9DVFJMX1RYUF9TRSB8CisJCSAgU1dBUFBFUl9DVFJMX1RYRF9SX0ZFIHwKKwkJICBTV0FQUEVSX0NUUkxfVFhEX1JfU0UgfAorCQkgIFNXQVBQRVJfQ1RSTF9UWERfV19GRSB8CisJCSAgU1dBUFBFUl9DVFJMX1RYRF9XX1NFIHwKKwkJICBTV0FQUEVSX0NUUkxfVFhGX1JfRkUgfAorCQkgIFNXQVBQRVJfQ1RSTF9SWERfUl9GRSB8CisJCSAgU1dBUFBFUl9DVFJMX1JYRF9SX1NFIHwKKwkJICBTV0FQUEVSX0NUUkxfUlhEX1dfRkUgfAorCQkgIFNXQVBQRVJfQ1RSTF9SWERfV19TRSB8CisJCSAgU1dBUFBFUl9DVFJMX1JYRl9XX0ZFIHwKKwkJICBTV0FQUEVSX0NUUkxfWE1TSV9GRSB8CisJCSAgU1dBUFBFUl9DVFJMX1NUQVRTX0ZFIHwKKwkJICBTV0FQUEVSX0NUUkxfU1RBVFNfU0UpOwogCWlmIChzcC0+Y29uZmlnLmludHJfdHlwZSA9PSBJTlRBKQogCQl2YWw2NCB8PSBTV0FQUEVSX0NUUkxfWE1TSV9TRTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5zd2FwcGVyX2N0cmwpOwpAQCAtMzcxOCwxMCArMzcwOCw5IEBACiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+cGlmX3JkX3N3YXBwZXJfZmIpOwogCWlmICh2YWw2NCAhPSAweDAxMjM0NTY3ODlBQkNERUZVTEwpIHsKIAkJLyogRW5kaWFuIHNldHRpbmdzIGFyZSBpbmNvcnJlY3QsIGNhbGxzIGZvciBhbm90aGVyIGRla2tvLiAqLwotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBFbmRpYW4gc2V0dGluZ3MgYXJlIHdyb25nLCAiLAotCQkJICBkZXYtPm5hbWUpOwotCQlEQkdfUFJJTlQoRVJSX0RCRywgImZlZWRiYWNrIHJlYWQgJWxseFxuIiwKLQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsNjQpOworCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCSAgIiVzOiBFbmRpYW4gc2V0dGluZ3MgYXJlIHdyb25nLCBmZWVkYmFjayByZWFkICVsbHhcbiIsCisJCQkgIGRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWw2NCk7CiAJCXJldHVybiBGQUlMVVJFOwogCX0KIApAQCAtMzc0MCw3ICszNzI5LDcgQEAKIAkJCWJyZWFrOwogCQltZGVsYXkoMSk7CiAJCWNudCsrOwotCX0gd2hpbGUoY250IDwgNSk7CisJfSB3aGlsZSAoY250IDwgNSk7CiAJaWYgKGNudCA9PSA1KSB7CiAJCURCR19QUklOVChFUlJfREJHLCAiWE1TSSAjICVkIEFjY2VzcyBmYWlsZWRcbiIsIGkpOwogCQlyZXQgPSAxOwpAQCAtMzc1NSwxOCArMzc0NCwxOCBAQAogCXU2NCB2YWw2NDsKIAlpbnQgaSwgbXNpeF9pbmRleDsKIAotCiAJaWYgKG5pYy0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lfREVWSUNFKQogCQlyZXR1cm47CiAKLQlmb3IgKGk9MDsgaSA8IE1BWF9SRVFVRVNURURfTVNJX1g7IGkrKykgewotCQltc2l4X2luZGV4ID0gKGkpID8gKChpLTEpICogOCArIDEpOiAwOworCWZvciAoaSA9IDA7IGkgPCBNQVhfUkVRVUVTVEVEX01TSV9YOyBpKyspIHsKKwkJbXNpeF9pbmRleCA9IChpKSA/ICgoaS0xKSAqIDggKyAxKSA6IDA7CiAJCXdyaXRlcShuaWMtPm1zaXhfaW5mb1tpXS5hZGRyLCAmYmFyMC0+eG1zaV9hZGRyZXNzKTsKIAkJd3JpdGVxKG5pYy0+bXNpeF9pbmZvW2ldLmRhdGEsICZiYXIwLT54bXNpX2RhdGEpOwogCQl2YWw2NCA9IChzMkJJVCg3KSB8IHMyQklUKDE1KSB8IHZCSVQobXNpeF9pbmRleCwgMjYsIDYpKTsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+eG1zaV9hY2Nlc3MpOwogCQlpZiAod2FpdF9mb3JfbXNpeF90cmFucyhuaWMsIG1zaXhfaW5kZXgpKSB7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgImZhaWxlZCBpbiAlc1xuIiwgX19mdW5jX18pOworCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogaW5kZXg6ICVkIGZhaWxlZFxuIiwKKwkJCQkgIF9fZnVuY19fLCBtc2l4X2luZGV4KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJfQpAQCAtMzc4MiwxMiArMzc3MSwxMyBAQAogCQlyZXR1cm47CiAKIAkvKiBTdG9yZSBhbmQgZGlzcGxheSAqLwotCWZvciAoaT0wOyBpIDwgTUFYX1JFUVVFU1RFRF9NU0lfWDsgaSsrKSB7Ci0JCW1zaXhfaW5kZXggPSAoaSkgPyAoKGktMSkgKiA4ICsgMSk6IDA7CisJZm9yIChpID0gMDsgaSA8IE1BWF9SRVFVRVNURURfTVNJX1g7IGkrKykgeworCQltc2l4X2luZGV4ID0gKGkpID8gKChpLTEpICogOCArIDEpIDogMDsKIAkJdmFsNjQgPSAoczJCSVQoMTUpIHwgdkJJVChtc2l4X2luZGV4LCAyNiwgNikpOwogCQl3cml0ZXEodmFsNjQsICZiYXIwLT54bXNpX2FjY2Vzcyk7CiAJCWlmICh3YWl0X2Zvcl9tc2l4X3RyYW5zKG5pYywgbXNpeF9pbmRleCkpIHsKLQkJCURCR19QUklOVChFUlJfREJHLCAiZmFpbGVkIGluICVzXG4iLCBfX2Z1bmNfXyk7CisJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBpbmRleDogJWQgZmFpbGVkXG4iLAorCQkJCSAgX19mdW5jX18sIG1zaXhfaW5kZXgpOwogCQkJY29udGludWU7CiAJCX0KIAkJYWRkciA9IHJlYWRxKCZiYXIwLT54bXNpX2FkZHJlc3MpOwpAQCAtMzgwNSwzNiArMzc5NSwzMiBAQAogCXU2NCByeF9tYXQ7CiAJdTE2IG1zaV9jb250cm9sOyAvKiBUZW1wIHZhcmlhYmxlICovCiAJaW50IHJldCwgaSwgaiwgbXNpeF9pbmR4ID0gMTsKKwlpbnQgc2l6ZTsKKwlzdHJ1Y3Qgc3RhdF9ibG9jayAqc3RhdHMgPSBuaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm87CisJc3RydWN0IHN3U3RhdCAqc3dzdGF0cyA9ICZzdGF0cy0+c3dfc3RhdDsKIAotCW5pYy0+ZW50cmllcyA9IGttYWxsb2MobmljLT5udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSksCi0JCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJc2l6ZSA9IG5pYy0+bnVtX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpOworCW5pYy0+ZW50cmllcyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuaWMtPmVudHJpZXMpIHsKLQkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIiwgXAotCQkJX19mdW5jX18pOwotCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2FsbG9jX2ZhaWxfY250Kys7CisJCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIsCisJCQkgIF9fZnVuY19fKTsKKwkJc3dzdGF0cy0+bWVtX2FsbG9jX2ZhaWxfY250Kys7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2FsbG9jYXRlZAotCQkrPSAobmljLT5udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOworCXN3c3RhdHMtPm1lbV9hbGxvY2F0ZWQgKz0gc2l6ZTsKIAotCW1lbXNldChuaWMtPmVudHJpZXMsIDAsIG5pYy0+bnVtX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpKTsKLQotCW5pYy0+czJpb19lbnRyaWVzID0KLQkJa21hbGxvYyhuaWMtPm51bV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBzMmlvX21zaXhfZW50cnkpLAotCQkJCSAgIEdGUF9LRVJORUwpOworCXNpemUgPSBuaWMtPm51bV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBzMmlvX21zaXhfZW50cnkpOworCW5pYy0+czJpb19lbnRyaWVzID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5pYy0+czJpb19lbnRyaWVzKSB7CiAJCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NfZmFpbF9jbnQrKzsKKwkJCSAgX19mdW5jX18pOworCQlzd3N0YXRzLT5tZW1fYWxsb2NfZmFpbF9jbnQrKzsKIAkJa2ZyZWUobmljLT5lbnRyaWVzKTsKLQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZAorCQlzd3N0YXRzLT5tZW1fZnJlZWQKIAkJCSs9IChuaWMtPm51bV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBtc2l4X2VudHJ5KSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQkgbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY2F0ZWQKLQkJKz0gKG5pYy0+bnVtX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IHMyaW9fbXNpeF9lbnRyeSkpOwotCW1lbXNldChuaWMtPnMyaW9fZW50cmllcywgMCwKLQkJbmljLT5udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgczJpb19tc2l4X2VudHJ5KSk7CisJc3dzdGF0cy0+bWVtX2FsbG9jYXRlZCArPSBzaXplOwogCiAJbmljLT5lbnRyaWVzWzBdLmVudHJ5ID0gMDsKIAluaWMtPnMyaW9fZW50cmllc1swXS5lbnRyeSA9IDA7CkBAIC0zODYzLDEzICszODQ5LDEzIEBACiAJcmV0ID0gcGNpX2VuYWJsZV9tc2l4KG5pYy0+cGRldiwgbmljLT5lbnRyaWVzLCBuaWMtPm51bV9lbnRyaWVzKTsKIAkvKiBXZSBmYWlsIGluaXQgaWYgZXJyb3Igb3Igd2UgZ2V0IGxlc3MgdmVjdG9ycyB0aGFuIG1pbiByZXF1aXJlZCAqLwogCWlmIChyZXQpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBFbmFibGluZyBNU0ktWCBmYWlsZWRcbiIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIkVuYWJsaW5nIE1TSS1YIGZhaWxlZFxuIik7CiAJCWtmcmVlKG5pYy0+ZW50cmllcyk7Ci0JCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQKLQkJCSs9IChuaWMtPm51bV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBtc2l4X2VudHJ5KSk7CisJCXN3c3RhdHMtPm1lbV9mcmVlZCArPSBuaWMtPm51bV9lbnRyaWVzICoKKwkJCXNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSk7CiAJCWtmcmVlKG5pYy0+czJpb19lbnRyaWVzKTsKLQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZAotCQkJKz0gKG5pYy0+bnVtX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IHMyaW9fbXNpeF9lbnRyeSkpOworCQlzd3N0YXRzLT5tZW1fZnJlZWQgKz0gbmljLT5udW1fZW50cmllcyAqCisJCQlzaXplb2Yoc3RydWN0IHMyaW9fbXNpeF9lbnRyeSk7CiAJCW5pYy0+ZW50cmllcyA9IE5VTEw7CiAJCW5pYy0+czJpb19lbnRyaWVzID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zOTA2LDE0ICszODkyLDE0IEBACiAJdTY0IHZhbDY0LCBzYXZlZDY0OwogCiAJZXJyID0gcmVxdWVzdF9pcnEoc3AtPmVudHJpZXNbMV0udmVjdG9yLCBzMmlvX3Rlc3RfaW50ciwgMCwKLQkJCXNwLT5uYW1lLCBzcCk7CisJCQkgIHNwLT5uYW1lLCBzcCk7CiAJaWYgKGVycikgewogCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBQQ0kgJXM6IGNhbm5vdCBhc3NpZ24gaXJxICVkXG4iLAotCQkgICAgICAgc3AtPmRldi0+bmFtZSwgcGNpX25hbWUocGRldiksIHBkZXYtPmlycSk7CisJCQkgIHNwLT5kZXYtPm5hbWUsIHBjaV9uYW1lKHBkZXYpLCBwZGV2LT5pcnEpOwogCQlyZXR1cm4gZXJyOwogCX0KIAotCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZzcC0+bXNpX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNwLT5tc2lfd2FpdCk7CiAJc3AtPm1zaV9kZXRlY3RlZCA9IDA7CiAKIAlzYXZlZDY0ID0gdmFsNjQgPSByZWFkcSgmYmFyMC0+c2NoZWR1bGVkX2ludF9jdHJsKTsKQEAgLTM5MjcsOCArMzkxMyw4IEBACiAJaWYgKCFzcC0+bXNpX2RldGVjdGVkKSB7CiAJCS8qIE1TSShYKSB0ZXN0IGZhaWxlZCwgZ28gYmFjayB0byBJTlR4IG1vZGUgKi8KIAkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogUENJICVzOiBObyBpbnRlcnJ1cHQgd2FzIGdlbmVyYXRlZCAiCi0JCQkidXNpbmcgTVNJKFgpIGR1cmluZyB0ZXN0XG4iLCBzcC0+ZGV2LT5uYW1lLAotCQkJcGNpX25hbWUocGRldikpOworCQkJICAidXNpbmcgTVNJKFgpIGR1cmluZyB0ZXN0XG4iLAorCQkJICBzcC0+ZGV2LT5uYW1lLCBwY2lfbmFtZShwZGV2KSk7CiAKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJfQpAQCAtMzk0Niw4ICszOTMyLDcgQEAKIAl1MTYgbXNpX2NvbnRyb2w7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3AtPm51bV9lbnRyaWVzOyBpKyspIHsKLQkJaWYgKHNwLT5zMmlvX2VudHJpZXNbaV0uaW5fdXNlID09Ci0JCQlNU0lYX1JFR0lTVEVSRURfU1VDQ0VTUykgeworCQlpZiAoc3AtPnMyaW9fZW50cmllc1tpXS5pbl91c2UgPT0gTVNJWF9SRUdJU1RFUkVEX1NVQ0NFU1MpIHsKIAkJCWludCB2ZWN0b3IgPSBzcC0+ZW50cmllc1tpXS52ZWN0b3I7CiAJCQl2b2lkICphcmcgPSBzcC0+czJpb19lbnRyaWVzW2ldLmFyZzsKIAkJCWZyZWVfaXJxKHZlY3RvciwgYXJnKTsKQEAgLTM5OTIsNiArMzk3Nyw3IEBACiBzdGF0aWMgaW50IHMyaW9fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzd1N0YXQgKnN3c3RhdHMgPSAmc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7CiAJaW50IGVyciA9IDA7CiAKIAkvKgpAQCAtNDAyMiwxMyArNDAwOCwxMyBAQAogCWlmIChzcC0+Y29uZmlnLmludHJfdHlwZSA9PSBNU0lfWCkgewogCQlpZiAoc3AtPmVudHJpZXMpIHsKIAkJCWtmcmVlKHNwLT5lbnRyaWVzKTsKLQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZAotCQkJKz0gKHNwLT5udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOworCQkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IHNwLT5udW1fZW50cmllcyAqCisJCQkJc2l6ZW9mKHN0cnVjdCBtc2l4X2VudHJ5KTsKIAkJfQogCQlpZiAoc3AtPnMyaW9fZW50cmllcykgewogCQkJa2ZyZWUoc3AtPnMyaW9fZW50cmllcyk7Ci0JCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQKLQkJCSs9IChzcC0+bnVtX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IHMyaW9fbXNpeF9lbnRyeSkpOworCQkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IHNwLT5udW1fZW50cmllcyAqCisJCQkJc2l6ZW9mKHN0cnVjdCBzMmlvX21zaXhfZW50cnkpOwogCQl9CiAJfQogCXJldHVybiBlcnI7CkBAIC00MDU1LDggKzQwNDEsOCBAQAogCWludCBvZmZzZXQ7CiAKIAkvKiBSZXR1cm4gaWYgdGhlIGRldmljZSBpcyBhbHJlYWR5IGNsb3NlZCAgICAgICAgICAgICAgICoKLQkqICBDYW4gaGFwcGVuIHdoZW4gczJpb19jYXJkX3VwIGZhaWxlZCBpbiBjaGFuZ2VfbXR1ICAgICoKLQkqLworCSAqICBDYW4gaGFwcGVuIHdoZW4gczJpb19jYXJkX3VwIGZhaWxlZCBpbiBjaGFuZ2VfbXR1ICAgICoKKwkgKi8KIAlpZiAoIWlzX3MyaW9fY2FyZF91cChzcCkpCiAJCXJldHVybiAwOwogCkBAIC00MDg2LDcgKzQwNzIsNyBAQAogICogIDAgb24gc3VjY2VzcyAmIDEgb24gZmFpbHVyZS4KICAqLwogCi1zdGF0aWMgaW50IHMyaW9feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHMyaW9feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUxNiBmcmdfY250LCBmcmdfbGVuLCBpLCBxdWV1ZSwgcXVldWVfbGVuLCBwdXRfb2ZmLCBnZXRfb2ZmOwpAQCAtNDA5NiwyOSArNDA4MiwyNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXUxNiB2bGFuX3RhZyA9IDA7CiAJc3RydWN0IGZpZm9faW5mbyAqZmlmbyA9IE5VTEw7Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKLQlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7CiAJaW50IGRvX3NwaW5fbG9jayA9IDE7CiAJaW50IG9mZmxvYWRfdHlwZTsKIAlpbnQgZW5hYmxlX3Blcl9saXN0X2ludGVycnVwdCA9IDA7Ci0Jc3RydWN0IHN3U3RhdCAqc3RhdHMgPSAmc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7Ci0KLQltYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7Ci0JY29uZmlnID0gJnNwLT5jb25maWc7CisJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnID0gJnNwLT5jb25maWc7CisJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CisJc3RydWN0IHN0YXRfYmxvY2sgKnN0YXRzID0gbWFjX2NvbnRyb2wtPnN0YXRzX2luZm87CisJc3RydWN0IHN3U3RhdCAqc3dzdGF0cyA9ICZzdGF0cy0+c3dfc3RhdDsKIAogCURCR19QUklOVChUWF9EQkcsICIlczogSW4gTmV0ZXJpb24gVHggcm91dGluZVxuIiwgZGV2LT5uYW1lKTsKIAogCWlmICh1bmxpa2VseShza2ItPmxlbiA8PSAwKSkgewotCQlEQkdfUFJJTlQoVFhfREJHLCAiJXM6QnVmZmVyIGhhcyBubyBkYXRhLi5cbiIsIGRldi0+bmFtZSk7CisJCURCR19QUklOVChUWF9EQkcsICIlczogQnVmZmVyIGhhcyBubyBkYXRhLi5cbiIsIGRldi0+bmFtZSk7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCWlmICghaXNfczJpb19jYXJkX3VwKHNwKSkgewogCQlEQkdfUFJJTlQoVFhfREJHLCAiJXM6IENhcmQgZ29pbmcgZG93biBmb3IgcmVzZXRcbiIsCiAJCQkgIGRldi0+bmFtZSk7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJcXVldWUgPSAwOwpAQCAtNDEzMiwyMCArNDExNiwyMCBAQAogCiAJCQlpZiAoKGlwLT5mcmFnX29mZiAmIGh0b25zKElQX09GRlNFVHxJUF9NRikpID09IDApIHsKIAkJCQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKCgodW5zaWduZWQgY2hhciAqKWlwKSArCi0JCQkJCQlpcC0+aWhsKjQpOworCQkJCQkJICAgICAgIGlwLT5paGwqNCk7CiAKIAkJCQlpZiAoaXAtPnByb3RvY29sID09IElQUFJPVE9fVENQKSB7CiAJCQkJCXF1ZXVlX2xlbiA9IHNwLT50b3RhbF90Y3BfZmlmb3M7CiAJCQkJCXF1ZXVlID0gKG50b2hzKHRoLT5zb3VyY2UpICsKLQkJCQkJCQludG9ocyh0aC0+ZGVzdCkpICYKLQkJCQkJICAgIHNwLT5maWZvX3NlbGVjdG9yW3F1ZXVlX2xlbiAtIDFdOworCQkJCQkJIG50b2hzKHRoLT5kZXN0KSkgJgorCQkJCQkJc3AtPmZpZm9fc2VsZWN0b3JbcXVldWVfbGVuIC0gMV07CiAJCQkJCWlmIChxdWV1ZSA+PSBxdWV1ZV9sZW4pCiAJCQkJCQlxdWV1ZSA9IHF1ZXVlX2xlbiAtIDE7CiAJCQkJfSBlbHNlIGlmIChpcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKIAkJCQkJcXVldWVfbGVuID0gc3AtPnRvdGFsX3VkcF9maWZvczsKIAkJCQkJcXVldWUgPSAobnRvaHModGgtPnNvdXJjZSkgKwotCQkJCQkJCW50b2hzKHRoLT5kZXN0KSkgJgotCQkJCQkgICAgc3AtPmZpZm9fc2VsZWN0b3JbcXVldWVfbGVuIC0gMV07CisJCQkJCQkgbnRvaHModGgtPmRlc3QpKSAmCisJCQkJCQlzcC0+Zmlmb19zZWxlY3RvcltxdWV1ZV9sZW4gLSAxXTsKIAkJCQkJaWYgKHF1ZXVlID49IHF1ZXVlX2xlbikKIAkJCQkJCXF1ZXVlID0gcXVldWVfbGVuIC0gMTsKIAkJCQkJcXVldWUgKz0gc3AtPnVkcF9maWZvX2lkeDsKQEAgLTQxNTgsNyArNDE0Miw3IEBACiAJfSBlbHNlIGlmIChzcC0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgPT0gVFhfUFJJT1JJVFlfU1RFRVJJTkcpCiAJCS8qIGdldCBmaWZvIG51bWJlciBiYXNlZCBvbiBza2ItPnByaW9yaXR5IHZhbHVlICovCiAJCXF1ZXVlID0gY29uZmlnLT5maWZvX21hcHBpbmcKLQkJCQkJW3NrYi0+cHJpb3JpdHkgJiAoTUFYX1RYX0ZJRk9TIC0gMSldOworCQkJW3NrYi0+cHJpb3JpdHkgJiAoTUFYX1RYX0ZJRk9TIC0gMSldOwogCWZpZm8gPSAmbWFjX2NvbnRyb2wtPmZpZm9zW3F1ZXVlXTsKIAogCWlmIChkb19zcGluX2xvY2spCkBAIC00MTgwLDE5ICs0MTY0LDE5IEBACiAJCX0KIAl9CiAKLQlwdXRfb2ZmID0gKHUxNikgZmlmby0+dHhfY3Vycl9wdXRfaW5mby5vZmZzZXQ7Ci0JZ2V0X29mZiA9ICh1MTYpIGZpZm8tPnR4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0OwotCXR4ZHAgPSAoc3RydWN0IFR4RCAqKSBmaWZvLT5saXN0X2luZm9bcHV0X29mZl0ubGlzdF92aXJ0X2FkZHI7CisJcHV0X29mZiA9ICh1MTYpZmlmby0+dHhfY3Vycl9wdXRfaW5mby5vZmZzZXQ7CisJZ2V0X29mZiA9ICh1MTYpZmlmby0+dHhfY3Vycl9nZXRfaW5mby5vZmZzZXQ7CisJdHhkcCA9IChzdHJ1Y3QgVHhEICopZmlmby0+bGlzdF9pbmZvW3B1dF9vZmZdLmxpc3RfdmlydF9hZGRyOwogCiAJcXVldWVfbGVuID0gZmlmby0+dHhfY3Vycl9wdXRfaW5mby5maWZvX2xlbiArIDE7CiAJLyogQXZvaWQgInB1dCIgcG9pbnRlciBnb2luZyBiZXlvbmQgImdldCIgcG9pbnRlciAqLwogCWlmICh0eGRwLT5Ib3N0X0NvbnRyb2wgfHwKLQkJICAgKChwdXRfb2ZmKzEpID09IHF1ZXVlX2xlbiA/IDAgOiAocHV0X29mZisxKSkgPT0gZ2V0X29mZikgeworCSAgICAoKHB1dF9vZmYrMSkgPT0gcXVldWVfbGVuID8gMCA6IChwdXRfb2ZmKzEpKSA9PSBnZXRfb2ZmKSB7CiAJCURCR19QUklOVChUWF9EQkcsICJFcnJvciBpbiB4bWl0LCBObyBmcmVlIFRYRHMuXG4iKTsKIAkJczJpb19zdG9wX3R4X3F1ZXVlKHNwLCBmaWZvLT5maWZvX25vKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCW9mZmxvYWRfdHlwZSA9IHMyaW9fb2ZmbG9hZF90eXBlKHNrYik7CkBAIC00MjAxLDkgKzQxODUsOSBAQAogCQl0eGRwLT5Db250cm9sXzEgfD0gVFhEX1RDUF9MU09fTVNTKHMyaW9fdGNwX21zcyhza2IpKTsKIAl9CiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJdHhkcC0+Q29udHJvbF8yIHw9Ci0JCSAgICAoVFhEX1RYX0NLT19JUFY0X0VOIHwgVFhEX1RYX0NLT19UQ1BfRU4gfAotCQkgICAgIFRYRF9UWF9DS09fVURQX0VOKTsKKwkJdHhkcC0+Q29udHJvbF8yIHw9IChUWERfVFhfQ0tPX0lQVjRfRU4gfAorCQkJCSAgICBUWERfVFhfQ0tPX1RDUF9FTiB8CisJCQkJICAgIFRYRF9UWF9DS09fVURQX0VOKTsKIAl9CiAJdHhkcC0+Q29udHJvbF8xIHw9IFRYRF9HQVRIRVJfQ09ERV9GSVJTVDsKIAl0eGRwLT5Db250cm9sXzEgfD0gVFhEX0xJU1RfT1dOX1hFTkE7CkBAIC00MjI4LDI2ICs0MjEyLDI3IEBACiAjaWZkZWYgX19CSUdfRU5ESUFOCiAJCS8qIGJvdGggdmFyaWFudHMgZG8gY3B1X3RvX2JlNjQoYmUzMl90b19jcHUoLi4uKSkgKi8KIAkJZmlmby0+dWZvX2luX2JhbmRfdltwdXRfb2ZmXSA9Ci0JCQkJKF9fZm9yY2UgdTY0KXNrYl9zaGluZm8oc2tiKS0+aXA2X2ZyYWdfaWQ7CisJCQkoX19mb3JjZSB1NjQpc2tiX3NoaW5mbyhza2IpLT5pcDZfZnJhZ19pZDsKICNlbHNlCiAJCWZpZm8tPnVmb19pbl9iYW5kX3ZbcHV0X29mZl0gPQotCQkJCShfX2ZvcmNlIHU2NClza2Jfc2hpbmZvKHNrYiktPmlwNl9mcmFnX2lkIDw8IDMyOworCQkJKF9fZm9yY2UgdTY0KXNrYl9zaGluZm8oc2tiKS0+aXA2X2ZyYWdfaWQgPDwgMzI7CiAjZW5kaWYKIAkJdHhkcC0+SG9zdF9Db250cm9sID0gKHVuc2lnbmVkIGxvbmcpZmlmby0+dWZvX2luX2JhbmRfdjsKIAkJdHhkcC0+QnVmZmVyX1BvaW50ZXIgPSBwY2lfbWFwX3NpbmdsZShzcC0+cGRldiwKLQkJCQkJZmlmby0+dWZvX2luX2JhbmRfdiwKLQkJCQkJc2l6ZW9mKHU2NCksIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCQkJICAgICAgZmlmby0+dWZvX2luX2JhbmRfdiwKKwkJCQkJCSAgICAgIHNpemVvZih1NjQpLAorCQkJCQkJICAgICAgUENJX0RNQV9UT0RFVklDRSk7CiAJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc3AtPnBkZXYsIHR4ZHAtPkJ1ZmZlcl9Qb2ludGVyKSkKIAkJCWdvdG8gcGNpX21hcF9mYWlsZWQ7CiAJCXR4ZHArKzsKIAl9CiAKLQl0eGRwLT5CdWZmZXJfUG9pbnRlciA9IHBjaV9tYXBfc2luZ2xlCi0JICAgIChzcC0+cGRldiwgc2tiLT5kYXRhLCBmcmdfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwl0eGRwLT5CdWZmZXJfUG9pbnRlciA9IHBjaV9tYXBfc2luZ2xlKHNwLT5wZGV2LCBza2ItPmRhdGEsCisJCQkJCSAgICAgIGZyZ19sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc3AtPnBkZXYsIHR4ZHAtPkJ1ZmZlcl9Qb2ludGVyKSkKIAkJZ290byBwY2lfbWFwX2ZhaWxlZDsKIAotCXR4ZHAtPkhvc3RfQ29udHJvbCA9ICh1bnNpZ25lZCBsb25nKSBza2I7CisJdHhkcC0+SG9zdF9Db250cm9sID0gKHVuc2lnbmVkIGxvbmcpc2tiOwogCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfQlVGRkVSMF9TSVpFKGZyZ19sZW4pOwogCWlmIChvZmZsb2FkX3R5cGUgPT0gU0tCX0dTT19VRFApCiAJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfVUZPX0VOOwpAQCAtNDI2MCw5ICs0MjQ1LDEwIEBACiAJCWlmICghZnJhZy0+c2l6ZSkKIAkJCWNvbnRpbnVlOwogCQl0eGRwKys7Ci0JCXR4ZHAtPkJ1ZmZlcl9Qb2ludGVyID0gKHU2NCkgcGNpX21hcF9wYWdlCi0JCSAgICAoc3AtPnBkZXYsIGZyYWctPnBhZ2UsIGZyYWctPnBhZ2Vfb2Zmc2V0LAotCQkgICAgIGZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQl0eGRwLT5CdWZmZXJfUG9pbnRlciA9ICh1NjQpcGNpX21hcF9wYWdlKHNwLT5wZGV2LCBmcmFnLT5wYWdlLAorCQkJCQkJCSBmcmFnLT5wYWdlX29mZnNldCwKKwkJCQkJCQkgZnJhZy0+c2l6ZSwKKwkJCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CiAJCXR4ZHAtPkNvbnRyb2xfMSA9IFRYRF9CVUZGRVIwX1NJWkUoZnJhZy0+c2l6ZSk7CiAJCWlmIChvZmZsb2FkX3R5cGUgPT0gU0tCX0dTT19VRFApCiAJCQl0eGRwLT5Db250cm9sXzEgfD0gVFhEX1VGT19FTjsKQEAgLTQyOTIsMjYgKzQyNzgsMjcgQEAKIAogCS8qIEF2b2lkICJwdXQiIHBvaW50ZXIgZ29pbmcgYmV5b25kICJnZXQiIHBvaW50ZXIgKi8KIAlpZiAoKChwdXRfb2ZmKzEpID09IHF1ZXVlX2xlbiA/IDAgOiAocHV0X29mZisxKSkgPT0gZ2V0X29mZikgewotCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5maWZvX2Z1bGxfY250Kys7CisJCXN3c3RhdHMtPmZpZm9fZnVsbF9jbnQrKzsKIAkJREJHX1BSSU5UKFRYX0RCRywKIAkJCSAgIk5vIGZyZWUgVHhEcyBmb3IgeG1pdCwgUHV0OiAweCV4IEdldDoweCV4XG4iLAogCQkJICBwdXRfb2ZmLCBnZXRfb2ZmKTsKIAkJczJpb19zdG9wX3R4X3F1ZXVlKHNwLCBmaWZvLT5maWZvX25vKTsKIAl9Ci0JbWFjX2NvbnRyb2wtPnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2FsbG9jYXRlZCArPSBza2ItPnRydWVzaXplOworCXN3c3RhdHMtPm1lbV9hbGxvY2F0ZWQgKz0gc2tiLT50cnVlc2l6ZTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CiAKIAlpZiAoc3AtPmNvbmZpZy5pbnRyX3R5cGUgPT0gTVNJX1gpCiAJCXR4X2ludHJfaGFuZGxlcihmaWZvKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CisKIHBjaV9tYXBfZmFpbGVkOgotCXN0YXRzLT5wY2lfbWFwX2ZhaWxfY250Kys7CisJc3dzdGF0cy0+cGNpX21hcF9mYWlsX2NudCsrOwogCXMyaW9fc3RvcF90eF9xdWV1ZShzcCwgZmlmby0+Zmlmb19ubyk7Ci0Jc3RhdHMtPm1lbV9mcmVlZCArPSBza2ItPnRydWVzaXplOworCXN3c3RhdHMtPm1lbV9mcmVlZCArPSBza2ItPnRydWVzaXplOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQ0MDIsMTcgKzQzODksMTYgQEAKIAkJCSAqIFRoaXMgaXMgdW5zdGFibGUgc3RhdGUgc28gY2xlYXIgYm90aCB1cC9kb3duCiAJCQkgKiBpbnRlcnJ1cHQgYW5kIGFkYXB0ZXIgdG8gcmUtZXZhbHVhdGUgdGhlIGxpbmsgc3RhdGUuCiAJCQkgKi8KLQkJCXZhbDY0IHw9ICBHUElPX0lOVF9SRUdfTElOS19ET1dOOworCQkJdmFsNjQgfD0gR1BJT19JTlRfUkVHX0xJTktfRE9XTjsKIAkJCXZhbDY0IHw9IEdQSU9fSU5UX1JFR19MSU5LX1VQOwogCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z3Bpb19pbnRfcmVnKTsKIAkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9faW50X21hc2spOwogCQkJdmFsNjQgJj0gfihHUElPX0lOVF9NQVNLX0xJTktfVVAgfAogCQkJCSAgIEdQSU9fSU5UX01BU0tfTElOS19ET1dOKTsKIAkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPmdwaW9faW50X21hc2spOwotCQl9Ci0JCWVsc2UgaWYgKHZhbDY0ICYgR1BJT19JTlRfUkVHX0xJTktfVVApIHsKKwkJfSBlbHNlIGlmICh2YWw2NCAmIEdQSU9fSU5UX1JFR19MSU5LX1VQKSB7CiAJCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX3N0YXR1cyk7Ci0JCQkJLyogRW5hYmxlIEFkYXB0ZXIgKi8KKwkJCS8qIEVuYWJsZSBBZGFwdGVyICovCiAJCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOwogCQkJdmFsNjQgfD0gQURBUFRFUl9DTlRMX0VOOwogCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKQEAgLTQ0MzEsNyArNDQxNyw3IEBACiAJCQl2YWw2NCB8PSBHUElPX0lOVF9NQVNLX0xJTktfVVA7CiAJCQl3cml0ZXEodmFsNjQsICZiYXIwLT5ncGlvX2ludF9tYXNrKTsKIAotCQl9ZWxzZSBpZiAodmFsNjQgJiBHUElPX0lOVF9SRUdfTElOS19ET1dOKSB7CisJCX0gZWxzZSBpZiAodmFsNjQgJiBHUElPX0lOVF9SRUdfTElOS19ET1dOKSB7CiAJCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX3N0YXR1cyk7CiAJCQlzMmlvX2xpbmsoc3AsIExJTktfRE9XTik7CiAJCQkvKiBMaW5rIGlzIGRvd24gc28gdW5tYWtzIGxpbmsgdXAgaW50ZXJydXB0ICovCkBAIC00NDQyLDcgKzQ0MjgsNyBAQAogCiAJCQkvKiB0dXJuIG9mZiBMRUQgKi8KIAkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmFkYXB0ZXJfY29udHJvbCk7Ci0JCQl2YWw2NCA9IHZhbDY0ICYofkFEQVBURVJfTEVEX09OKTsKKwkJCXZhbDY0ID0gdmFsNjQgJiAofkFEQVBURVJfTEVEX09OKTsKIAkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPmFkYXB0ZXJfY29udHJvbCk7CiAJCX0KIAl9CkBAIC00NDU5LDEyICs0NDQ1LDEyIEBACiAgKiAgMSAtIGlmIGFsYXJtIGJpdCBzZXQKICAqICAwIC0gaWYgYWxhcm0gYml0IGlzIG5vdCBzZXQKICAqLwotc3RhdGljIGludCBkb19zMmlvX2Noa19hbGFybV9iaXQodTY0IHZhbHVlLCB2b2lkIF9faW9tZW0gKiBhZGRyLAotCQkJICB1bnNpZ25lZCBsb25nIGxvbmcgKmNudCkKK3N0YXRpYyBpbnQgZG9fczJpb19jaGtfYWxhcm1fYml0KHU2NCB2YWx1ZSwgdm9pZCBfX2lvbWVtICphZGRyLAorCQkJCSB1bnNpZ25lZCBsb25nIGxvbmcgKmNudCkKIHsKIAl1NjQgdmFsNjQ7CiAJdmFsNjQgPSByZWFkcShhZGRyKTsKLQlpZiAoIHZhbDY0ICYgdmFsdWUgKSB7CisJaWYgKHZhbDY0ICYgdmFsdWUpIHsKIAkJd3JpdGVxKHZhbDY0LCBhZGRyKTsKIAkJKCpjbnQpKys7CiAJCXJldHVybiAxOwpAQCAtNDQ4MSwxMiArNDQ2NywxMiBAQAogICogIFJldHVybiBWYWx1ZToKICAqICBOT05FCiAgKi8KLXN0YXRpYyB2b2lkIHMyaW9faGFuZGxlX2Vycm9ycyh2b2lkICogZGV2X2lkKQorc3RhdGljIHZvaWQgczJpb19oYW5kbGVfZXJyb3JzKHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOwogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwotCXU2NCB0ZW1wNjQgPSAwLHZhbDY0PTA7CisJdTY0IHRlbXA2NCA9IDAsIHZhbDY0ID0gMDsKIAlpbnQgaSA9IDA7CiAKIAlzdHJ1Y3Qgc3dTdGF0ICpzd19zdGF0ID0gJnNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0OwpAQCAtNDQ5OSwxMCArNDQ4NSwxMCBAQAogCQlyZXR1cm47CiAKIAltZW1zZXQoJnN3X3N0YXQtPnJpbmdfZnVsbF9jbnQsIDAsCi0JCXNpemVvZihzd19zdGF0LT5yaW5nX2Z1bGxfY250KSk7CisJICAgICAgIHNpemVvZihzd19zdGF0LT5yaW5nX2Z1bGxfY250KSk7CiAKIAkvKiBIYW5kbGluZyB0aGUgWFBBSyBjb3VudGVycyB1cGRhdGUgKi8KLQlpZihzdGF0cy0+eHBha190aW1lcl9jb3VudCA8IDcyMDAwKSB7CisJaWYgKHN0YXRzLT54cGFrX3RpbWVyX2NvdW50IDwgNzIwMDApIHsKIAkJLyogd2FpdGluZyBmb3IgYW4gaG91ciAqLwogCQlzdGF0cy0+eHBha190aW1lcl9jb3VudCsrOwogCX0gZWxzZSB7CkBAIC00NTIxLDE5MSArNDUwNywyMjcgQEAKIAogCS8qIEluIGNhc2Ugb2YgYSBzZXJpb3VzIGVycm9yLCB0aGUgZGV2aWNlIHdpbGwgYmUgUmVzZXQuICovCiAJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChTRVJSX1NPVVJDRV9BTlksICZiYXIwLT5zZXJyX3NvdXJjZSwKLQkJCQkmc3dfc3RhdC0+c2VyaW91c19lcnJfY250KSkKKwkJCQkgICZzd19zdGF0LT5zZXJpb3VzX2Vycl9jbnQpKQogCQlnb3RvIHJlc2V0OwogCiAJLyogQ2hlY2sgZm9yIGRhdGEgcGFyaXR5IGVycm9yICovCiAJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChHUElPX0lOVF9SRUdfRFBfRVJSX0lOVCwgJmJhcjAtPmdwaW9faW50X3JlZywKLQkJCQkmc3dfc3RhdC0+cGFyaXR5X2Vycl9jbnQpKQorCQkJCSAgJnN3X3N0YXQtPnBhcml0eV9lcnJfY250KSkKIAkJZ290byByZXNldDsKIAogCS8qIENoZWNrIGZvciByaW5nIGZ1bGwgY291bnRlciAqLwogCWlmIChzcC0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lJX0RFVklDRSkgewogCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5yaW5nX2J1bXBfY291bnRlcjEpOwotCQlmb3IgKGk9MDsgaTw0OyBpKyspIHsKLQkJCXRlbXA2NCA9ICggdmFsNjQgJiB2QklUKDB4RkZGRiwoaSoxNiksMTYpKTsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJdGVtcDY0ID0gKHZhbDY0ICYgdkJJVCgweEZGRkYsIChpKjE2KSwgMTYpKTsKIAkJCXRlbXA2NCA+Pj0gNjQgLSAoKGkrMSkqMTYpOwogCQkJc3dfc3RhdC0+cmluZ19mdWxsX2NudFtpXSArPSB0ZW1wNjQ7CiAJCX0KIAogCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5yaW5nX2J1bXBfY291bnRlcjIpOwotCQlmb3IgKGk9MDsgaTw0OyBpKyspIHsKLQkJCXRlbXA2NCA9ICggdmFsNjQgJiB2QklUKDB4RkZGRiwoaSoxNiksMTYpKTsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJdGVtcDY0ID0gKHZhbDY0ICYgdkJJVCgweEZGRkYsIChpKjE2KSwgMTYpKTsKIAkJCXRlbXA2NCA+Pj0gNjQgLSAoKGkrMSkqMTYpOwotCQkJIHN3X3N0YXQtPnJpbmdfZnVsbF9jbnRbaSs0XSArPSB0ZW1wNjQ7CisJCQlzd19zdGF0LT5yaW5nX2Z1bGxfY250W2krNF0gKz0gdGVtcDY0OwogCQl9CiAJfQogCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+dHhkbWFfaW50X3N0YXR1cyk7CiAJLypjaGVjayBmb3IgcGZjX2VyciovCiAJaWYgKHZhbDY0ICYgVFhETUFfUEZDX0lOVCkgewotCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFBGQ19FQ0NfREJfRVJSIHwgUEZDX1NNX0VSUl9BTEFSTXwKLQkJCQlQRkNfTUlTQ18wX0VSUiB8IFBGQ19NSVNDXzFfRVJSfAotCQkJCVBGQ19QQ0lYX0VSUiwgJmJhcjAtPnBmY19lcnJfcmVnLAotCQkJCSZzd19zdGF0LT5wZmNfZXJyX2NudCkpCisJCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoUEZDX0VDQ19EQl9FUlIgfCBQRkNfU01fRVJSX0FMQVJNIHwKKwkJCQkJICBQRkNfTUlTQ18wX0VSUiB8IFBGQ19NSVNDXzFfRVJSIHwKKwkJCQkJICBQRkNfUENJWF9FUlIsCisJCQkJCSAgJmJhcjAtPnBmY19lcnJfcmVnLAorCQkJCQkgICZzd19zdGF0LT5wZmNfZXJyX2NudCkpCiAJCQlnb3RvIHJlc2V0OwotCQlkb19zMmlvX2Noa19hbGFybV9iaXQoUEZDX0VDQ19TR19FUlIsICZiYXIwLT5wZmNfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+cGZjX2Vycl9jbnQpOworCQlkb19zMmlvX2Noa19hbGFybV9iaXQoUEZDX0VDQ19TR19FUlIsCisJCQkJICAgICAgJmJhcjAtPnBmY19lcnJfcmVnLAorCQkJCSAgICAgICZzd19zdGF0LT5wZmNfZXJyX2NudCk7CiAJfQogCiAJLypjaGVjayBmb3IgdGRhX2VyciovCiAJaWYgKHZhbDY0ICYgVFhETUFfVERBX0lOVCkgewotCQlpZihkb19zMmlvX2Noa19hbGFybV9iaXQoVERBX0ZuX0VDQ19EQl9FUlIgfCBUREFfU00wX0VSUl9BTEFSTSB8Ci0JCQkJVERBX1NNMV9FUlJfQUxBUk0sICZiYXIwLT50ZGFfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+dGRhX2Vycl9jbnQpKQorCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFREQV9Gbl9FQ0NfREJfRVJSIHwKKwkJCQkJICBUREFfU00wX0VSUl9BTEFSTSB8CisJCQkJCSAgVERBX1NNMV9FUlJfQUxBUk0sCisJCQkJCSAgJmJhcjAtPnRkYV9lcnJfcmVnLAorCQkJCQkgICZzd19zdGF0LT50ZGFfZXJyX2NudCkpCiAJCQlnb3RvIHJlc2V0OwogCQlkb19zMmlvX2Noa19hbGFybV9iaXQoVERBX0ZuX0VDQ19TR19FUlIgfCBUREFfUENJWF9FUlIsCi0JCQkJJmJhcjAtPnRkYV9lcnJfcmVnLCAmc3dfc3RhdC0+dGRhX2Vycl9jbnQpOworCQkJCSAgICAgICZiYXIwLT50ZGFfZXJyX3JlZywKKwkJCQkgICAgICAmc3dfc3RhdC0+dGRhX2Vycl9jbnQpOwogCX0KIAkvKmNoZWNrIGZvciBwY2NfZXJyKi8KIAlpZiAodmFsNjQgJiBUWERNQV9QQ0NfSU5UKSB7Ci0JCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoUENDX1NNX0VSUl9BTEFSTSB8IFBDQ19XUl9FUlJfQUxBUk0KLQkJCQl8IFBDQ19OX1NFUlIgfCBQQ0NfNl9DT0ZfT1ZfRVJSCi0JCQkJfCBQQ0NfN19DT0ZfT1ZfRVJSIHwgUENDXzZfTFNPX09WX0VSUgotCQkJCXwgUENDXzdfTFNPX09WX0VSUiB8IFBDQ19GQl9FQ0NfREJfRVJSCi0JCQkJfCBQQ0NfVFhCX0VDQ19EQl9FUlIsICZiYXIwLT5wY2NfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+cGNjX2Vycl9jbnQpKQorCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFBDQ19TTV9FUlJfQUxBUk0gfCBQQ0NfV1JfRVJSX0FMQVJNIHwKKwkJCQkJICBQQ0NfTl9TRVJSIHwgUENDXzZfQ09GX09WX0VSUiB8CisJCQkJCSAgUENDXzdfQ09GX09WX0VSUiB8IFBDQ182X0xTT19PVl9FUlIgfAorCQkJCQkgIFBDQ183X0xTT19PVl9FUlIgfCBQQ0NfRkJfRUNDX0RCX0VSUiB8CisJCQkJCSAgUENDX1RYQl9FQ0NfREJfRVJSLAorCQkJCQkgICZiYXIwLT5wY2NfZXJyX3JlZywKKwkJCQkJICAmc3dfc3RhdC0+cGNjX2Vycl9jbnQpKQogCQkJZ290byByZXNldDsKIAkJZG9fczJpb19jaGtfYWxhcm1fYml0KFBDQ19GQl9FQ0NfU0dfRVJSIHwgUENDX1RYQl9FQ0NfU0dfRVJSLAotCQkJCSZiYXIwLT5wY2NfZXJyX3JlZywgJnN3X3N0YXQtPnBjY19lcnJfY250KTsKKwkJCQkgICAgICAmYmFyMC0+cGNjX2Vycl9yZWcsCisJCQkJICAgICAgJnN3X3N0YXQtPnBjY19lcnJfY250KTsKIAl9CiAKIAkvKmNoZWNrIGZvciB0dGlfZXJyKi8KIAlpZiAodmFsNjQgJiBUWERNQV9UVElfSU5UKSB7Ci0JCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoVFRJX1NNX0VSUl9BTEFSTSwgJmJhcjAtPnR0aV9lcnJfcmVnLAotCQkJCSZzd19zdGF0LT50dGlfZXJyX2NudCkpCisJCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoVFRJX1NNX0VSUl9BTEFSTSwKKwkJCQkJICAmYmFyMC0+dHRpX2Vycl9yZWcsCisJCQkJCSAgJnN3X3N0YXQtPnR0aV9lcnJfY250KSkKIAkJCWdvdG8gcmVzZXQ7CiAJCWRvX3MyaW9fY2hrX2FsYXJtX2JpdChUVElfRUNDX1NHX0VSUiB8IFRUSV9FQ0NfREJfRVJSLAotCQkJCSZiYXIwLT50dGlfZXJyX3JlZywgJnN3X3N0YXQtPnR0aV9lcnJfY250KTsKKwkJCQkgICAgICAmYmFyMC0+dHRpX2Vycl9yZWcsCisJCQkJICAgICAgJnN3X3N0YXQtPnR0aV9lcnJfY250KTsKIAl9CiAKIAkvKmNoZWNrIGZvciBsc29fZXJyKi8KIAlpZiAodmFsNjQgJiBUWERNQV9MU09fSU5UKSB7Ci0JCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoTFNPNl9BQk9SVCB8IExTTzdfQUJPUlQKLQkJCQl8IExTTzZfU01fRVJSX0FMQVJNIHwgTFNPN19TTV9FUlJfQUxBUk0sCi0JCQkJJmJhcjAtPmxzb19lcnJfcmVnLCAmc3dfc3RhdC0+bHNvX2Vycl9jbnQpKQorCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KExTTzZfQUJPUlQgfCBMU083X0FCT1JUIHwKKwkJCQkJICBMU082X1NNX0VSUl9BTEFSTSB8IExTTzdfU01fRVJSX0FMQVJNLAorCQkJCQkgICZiYXIwLT5sc29fZXJyX3JlZywKKwkJCQkJICAmc3dfc3RhdC0+bHNvX2Vycl9jbnQpKQogCQkJZ290byByZXNldDsKIAkJZG9fczJpb19jaGtfYWxhcm1fYml0KExTTzZfU0VORF9PRkxPVyB8IExTTzdfU0VORF9PRkxPVywKLQkJCQkmYmFyMC0+bHNvX2Vycl9yZWcsICZzd19zdGF0LT5sc29fZXJyX2NudCk7CisJCQkJICAgICAgJmJhcjAtPmxzb19lcnJfcmVnLAorCQkJCSAgICAgICZzd19zdGF0LT5sc29fZXJyX2NudCk7CiAJfQogCiAJLypjaGVjayBmb3IgdHBhX2VyciovCiAJaWYgKHZhbDY0ICYgVFhETUFfVFBBX0lOVCkgewotCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFRQQV9TTV9FUlJfQUxBUk0sICZiYXIwLT50cGFfZXJyX3JlZywKLQkJCSZzd19zdGF0LT50cGFfZXJyX2NudCkpCisJCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoVFBBX1NNX0VSUl9BTEFSTSwKKwkJCQkJICAmYmFyMC0+dHBhX2Vycl9yZWcsCisJCQkJCSAgJnN3X3N0YXQtPnRwYV9lcnJfY250KSkKIAkJCWdvdG8gcmVzZXQ7Ci0JCWRvX3MyaW9fY2hrX2FsYXJtX2JpdChUUEFfVFhfRlJNX0RST1AsICZiYXIwLT50cGFfZXJyX3JlZywKLQkJCSZzd19zdGF0LT50cGFfZXJyX2NudCk7CisJCWRvX3MyaW9fY2hrX2FsYXJtX2JpdChUUEFfVFhfRlJNX0RST1AsCisJCQkJICAgICAgJmJhcjAtPnRwYV9lcnJfcmVnLAorCQkJCSAgICAgICZzd19zdGF0LT50cGFfZXJyX2NudCk7CiAJfQogCiAJLypjaGVjayBmb3Igc21fZXJyKi8KIAlpZiAodmFsNjQgJiBUWERNQV9TTV9JTlQpIHsKLQkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChTTV9TTV9FUlJfQUxBUk0sICZiYXIwLT5zbV9lcnJfcmVnLAotCQkJJnN3X3N0YXQtPnNtX2Vycl9jbnQpKQorCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFNNX1NNX0VSUl9BTEFSTSwKKwkJCQkJICAmYmFyMC0+c21fZXJyX3JlZywKKwkJCQkJICAmc3dfc3RhdC0+c21fZXJyX2NudCkpCiAJCQlnb3RvIHJlc2V0OwogCX0KIAogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPm1hY19pbnRfc3RhdHVzKTsKIAlpZiAodmFsNjQgJiBNQUNfSU5UX1NUQVRVU19UTUFDX0lOVCkgewogCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFRNQUNfVFhfQlVGX09WUk4gfCBUTUFDX1RYX1NNX0VSUiwKLQkJCQkmYmFyMC0+bWFjX3RtYWNfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+bWFjX3RtYWNfZXJyX2NudCkpCisJCQkJCSAgJmJhcjAtPm1hY190bWFjX2Vycl9yZWcsCisJCQkJCSAgJnN3X3N0YXQtPm1hY190bWFjX2Vycl9jbnQpKQogCQkJZ290byByZXNldDsKLQkJZG9fczJpb19jaGtfYWxhcm1fYml0KFRNQUNfRUNDX1NHX0VSUiB8IFRNQUNfRUNDX0RCX0VSUgotCQkJCXwgVE1BQ19ERVNDX0VDQ19TR19FUlIgfCBUTUFDX0RFU0NfRUNDX0RCX0VSUiwKLQkJCQkmYmFyMC0+bWFjX3RtYWNfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+bWFjX3RtYWNfZXJyX2NudCk7CisJCWRvX3MyaW9fY2hrX2FsYXJtX2JpdChUTUFDX0VDQ19TR19FUlIgfCBUTUFDX0VDQ19EQl9FUlIgfAorCQkJCSAgICAgIFRNQUNfREVTQ19FQ0NfU0dfRVJSIHwKKwkJCQkgICAgICBUTUFDX0RFU0NfRUNDX0RCX0VSUiwKKwkJCQkgICAgICAmYmFyMC0+bWFjX3RtYWNfZXJyX3JlZywKKwkJCQkgICAgICAmc3dfc3RhdC0+bWFjX3RtYWNfZXJyX2NudCk7CiAJfQogCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+eGd4c19pbnRfc3RhdHVzKTsKIAlpZiAodmFsNjQgJiBYR1hTX0lOVF9TVEFUVVNfVFhHWFMpIHsKIAkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChUWEdYU19FU1RPUkVfVUZMT1cgfCBUWEdYU19UWF9TTV9FUlIsCi0JCQkJJmJhcjAtPnhneHNfdHhneHNfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+eGd4c190eGd4c19lcnJfY250KSkKKwkJCQkJICAmYmFyMC0+eGd4c190eGd4c19lcnJfcmVnLAorCQkJCQkgICZzd19zdGF0LT54Z3hzX3R4Z3hzX2Vycl9jbnQpKQogCQkJZ290byByZXNldDsKIAkJZG9fczJpb19jaGtfYWxhcm1fYml0KFRYR1hTX0VDQ19TR19FUlIgfCBUWEdYU19FQ0NfREJfRVJSLAotCQkJCSZiYXIwLT54Z3hzX3R4Z3hzX2Vycl9yZWcsCi0JCQkJJnN3X3N0YXQtPnhneHNfdHhneHNfZXJyX2NudCk7CisJCQkJICAgICAgJmJhcjAtPnhneHNfdHhneHNfZXJyX3JlZywKKwkJCQkgICAgICAmc3dfc3RhdC0+eGd4c190eGd4c19lcnJfY250KTsKIAl9CiAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT5yeGRtYV9pbnRfc3RhdHVzKTsKIAlpZiAodmFsNjQgJiBSWERNQV9JTlRfUkNfSU5UX00pIHsKLQkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChSQ19QUkNuX0VDQ19EQl9FUlIgfCBSQ19GVENfRUNDX0RCX0VSUgotCQkJCXwgUkNfUFJDbl9TTV9FUlJfQUxBUk0gfFJDX0ZUQ19TTV9FUlJfQUxBUk0sCi0JCQkJJmJhcjAtPnJjX2Vycl9yZWcsICZzd19zdGF0LT5yY19lcnJfY250KSkKKwkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChSQ19QUkNuX0VDQ19EQl9FUlIgfAorCQkJCQkgIFJDX0ZUQ19FQ0NfREJfRVJSIHwKKwkJCQkJICBSQ19QUkNuX1NNX0VSUl9BTEFSTSB8CisJCQkJCSAgUkNfRlRDX1NNX0VSUl9BTEFSTSwKKwkJCQkJICAmYmFyMC0+cmNfZXJyX3JlZywKKwkJCQkJICAmc3dfc3RhdC0+cmNfZXJyX2NudCkpCiAJCQlnb3RvIHJlc2V0OwotCQlkb19zMmlvX2Noa19hbGFybV9iaXQoUkNfUFJDbl9FQ0NfU0dfRVJSIHwgUkNfRlRDX0VDQ19TR19FUlIKLQkJCQl8IFJDX1JEQV9GQUlMX1dSX1JuLCAmYmFyMC0+cmNfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+cmNfZXJyX2NudCk7Ci0JCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoUFJDX1BDSV9BQl9SRF9SbiB8IFBSQ19QQ0lfQUJfV1JfUm4KLQkJCQl8IFBSQ19QQ0lfQUJfRl9XUl9SbiwgJmJhcjAtPnByY19wY2l4X2Vycl9yZWcsCi0JCQkJJnN3X3N0YXQtPnByY19wY2l4X2Vycl9jbnQpKQorCQlkb19zMmlvX2Noa19hbGFybV9iaXQoUkNfUFJDbl9FQ0NfU0dfRVJSIHwKKwkJCQkgICAgICBSQ19GVENfRUNDX1NHX0VSUiB8CisJCQkJICAgICAgUkNfUkRBX0ZBSUxfV1JfUm4sICZiYXIwLT5yY19lcnJfcmVnLAorCQkJCSAgICAgICZzd19zdGF0LT5yY19lcnJfY250KTsKKwkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChQUkNfUENJX0FCX1JEX1JuIHwKKwkJCQkJICBQUkNfUENJX0FCX1dSX1JuIHwKKwkJCQkJICBQUkNfUENJX0FCX0ZfV1JfUm4sCisJCQkJCSAgJmJhcjAtPnByY19wY2l4X2Vycl9yZWcsCisJCQkJCSAgJnN3X3N0YXQtPnByY19wY2l4X2Vycl9jbnQpKQogCQkJZ290byByZXNldDsKLQkJZG9fczJpb19jaGtfYWxhcm1fYml0KFBSQ19QQ0lfRFBfUkRfUm4gfCBQUkNfUENJX0RQX1dSX1JuCi0JCQkJfCBQUkNfUENJX0RQX0ZfV1JfUm4sICZiYXIwLT5wcmNfcGNpeF9lcnJfcmVnLAotCQkJCSZzd19zdGF0LT5wcmNfcGNpeF9lcnJfY250KTsKKwkJZG9fczJpb19jaGtfYWxhcm1fYml0KFBSQ19QQ0lfRFBfUkRfUm4gfAorCQkJCSAgICAgIFBSQ19QQ0lfRFBfV1JfUm4gfAorCQkJCSAgICAgIFBSQ19QQ0lfRFBfRl9XUl9SbiwKKwkJCQkgICAgICAmYmFyMC0+cHJjX3BjaXhfZXJyX3JlZywKKwkJCQkgICAgICAmc3dfc3RhdC0+cHJjX3BjaXhfZXJyX2NudCk7CiAJfQogCiAJaWYgKHZhbDY0ICYgUlhETUFfSU5UX1JQQV9JTlRfTSkgewogCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFJQQV9TTV9FUlJfQUxBUk0gfCBSUEFfQ1JFRElUX0VSUiwKLQkJCQkmYmFyMC0+cnBhX2Vycl9yZWcsICZzd19zdGF0LT5ycGFfZXJyX2NudCkpCisJCQkJCSAgJmJhcjAtPnJwYV9lcnJfcmVnLAorCQkJCQkgICZzd19zdGF0LT5ycGFfZXJyX2NudCkpCiAJCQlnb3RvIHJlc2V0OwogCQlkb19zMmlvX2Noa19hbGFybV9iaXQoUlBBX0VDQ19TR19FUlIgfCBSUEFfRUNDX0RCX0VSUiwKLQkJCQkmYmFyMC0+cnBhX2Vycl9yZWcsICZzd19zdGF0LT5ycGFfZXJyX2NudCk7CisJCQkJICAgICAgJmJhcjAtPnJwYV9lcnJfcmVnLAorCQkJCSAgICAgICZzd19zdGF0LT5ycGFfZXJyX2NudCk7CiAJfQogCiAJaWYgKHZhbDY0ICYgUlhETUFfSU5UX1JEQV9JTlRfTSkgewotCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFJEQV9SWERuX0VDQ19EQl9FUlIKLQkJCQl8IFJEQV9GUk1fRUNDX0RCX05fQUVSUiB8IFJEQV9TTTFfRVJSX0FMQVJNCi0JCQkJfCBSREFfU00wX0VSUl9BTEFSTSB8IFJEQV9SWERfRUNDX0RCX1NFUlIsCi0JCQkJJmJhcjAtPnJkYV9lcnJfcmVnLCAmc3dfc3RhdC0+cmRhX2Vycl9jbnQpKQorCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFJEQV9SWERuX0VDQ19EQl9FUlIgfAorCQkJCQkgIFJEQV9GUk1fRUNDX0RCX05fQUVSUiB8CisJCQkJCSAgUkRBX1NNMV9FUlJfQUxBUk0gfAorCQkJCQkgIFJEQV9TTTBfRVJSX0FMQVJNIHwKKwkJCQkJICBSREFfUlhEX0VDQ19EQl9TRVJSLAorCQkJCQkgICZiYXIwLT5yZGFfZXJyX3JlZywKKwkJCQkJICAmc3dfc3RhdC0+cmRhX2Vycl9jbnQpKQogCQkJZ290byByZXNldDsKLQkJZG9fczJpb19jaGtfYWxhcm1fYml0KFJEQV9SWERuX0VDQ19TR19FUlIgfCBSREFfRlJNX0VDQ19TR19FUlIKLQkJCQl8IFJEQV9NSVNDX0VSUiB8IFJEQV9QQ0lYX0VSUiwKLQkJCQkmYmFyMC0+cmRhX2Vycl9yZWcsICZzd19zdGF0LT5yZGFfZXJyX2NudCk7CisJCWRvX3MyaW9fY2hrX2FsYXJtX2JpdChSREFfUlhEbl9FQ0NfU0dfRVJSIHwKKwkJCQkgICAgICBSREFfRlJNX0VDQ19TR19FUlIgfAorCQkJCSAgICAgIFJEQV9NSVNDX0VSUiB8CisJCQkJICAgICAgUkRBX1BDSVhfRVJSLAorCQkJCSAgICAgICZiYXIwLT5yZGFfZXJyX3JlZywKKwkJCQkgICAgICAmc3dfc3RhdC0+cmRhX2Vycl9jbnQpOwogCX0KIAogCWlmICh2YWw2NCAmIFJYRE1BX0lOVF9SVElfSU5UX00pIHsKLQkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChSVElfU01fRVJSX0FMQVJNLCAmYmFyMC0+cnRpX2Vycl9yZWcsCi0JCQkJJnN3X3N0YXQtPnJ0aV9lcnJfY250KSkKKwkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChSVElfU01fRVJSX0FMQVJNLAorCQkJCQkgICZiYXIwLT5ydGlfZXJyX3JlZywKKwkJCQkJICAmc3dfc3RhdC0+cnRpX2Vycl9jbnQpKQogCQkJZ290byByZXNldDsKIAkJZG9fczJpb19jaGtfYWxhcm1fYml0KFJUSV9FQ0NfU0dfRVJSIHwgUlRJX0VDQ19EQl9FUlIsCi0JCQkJJmJhcjAtPnJ0aV9lcnJfcmVnLCAmc3dfc3RhdC0+cnRpX2Vycl9jbnQpOworCQkJCSAgICAgICZiYXIwLT5ydGlfZXJyX3JlZywKKwkJCQkgICAgICAmc3dfc3RhdC0+cnRpX2Vycl9jbnQpOwogCX0KIAogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPm1hY19pbnRfc3RhdHVzKTsKIAlpZiAodmFsNjQgJiBNQUNfSU5UX1NUQVRVU19STUFDX0lOVCkgewogCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFJNQUNfUlhfQlVGRl9PVlJOIHwgUk1BQ19SWF9TTV9FUlIsCi0JCQkJJmJhcjAtPm1hY19ybWFjX2Vycl9yZWcsCi0JCQkJJnN3X3N0YXQtPm1hY19ybWFjX2Vycl9jbnQpKQorCQkJCQkgICZiYXIwLT5tYWNfcm1hY19lcnJfcmVnLAorCQkJCQkgICZzd19zdGF0LT5tYWNfcm1hY19lcnJfY250KSkKIAkJCWdvdG8gcmVzZXQ7Ci0JCWRvX3MyaW9fY2hrX2FsYXJtX2JpdChSTUFDX1VOVVNFRF9JTlR8Uk1BQ19TSU5HTEVfRUNDX0VSUnwKLQkJCQlSTUFDX0RPVUJMRV9FQ0NfRVJSLCAmYmFyMC0+bWFjX3JtYWNfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+bWFjX3JtYWNfZXJyX2NudCk7CisJCWRvX3MyaW9fY2hrX2FsYXJtX2JpdChSTUFDX1VOVVNFRF9JTlQgfAorCQkJCSAgICAgIFJNQUNfU0lOR0xFX0VDQ19FUlIgfAorCQkJCSAgICAgIFJNQUNfRE9VQkxFX0VDQ19FUlIsCisJCQkJICAgICAgJmJhcjAtPm1hY19ybWFjX2Vycl9yZWcsCisJCQkJICAgICAgJnN3X3N0YXQtPm1hY19ybWFjX2Vycl9jbnQpOwogCX0KIAogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnhneHNfaW50X3N0YXR1cyk7CiAJaWYgKHZhbDY0ICYgWEdYU19JTlRfU1RBVFVTX1JYR1hTKSB7CiAJCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoUlhHWFNfRVNUT1JFX09GTE9XIHwgUlhHWFNfUlhfU01fRVJSLAotCQkJCSZiYXIwLT54Z3hzX3J4Z3hzX2Vycl9yZWcsCi0JCQkJJnN3X3N0YXQtPnhneHNfcnhneHNfZXJyX2NudCkpCisJCQkJCSAgJmJhcjAtPnhneHNfcnhneHNfZXJyX3JlZywKKwkJCQkJICAmc3dfc3RhdC0+eGd4c19yeGd4c19lcnJfY250KSkKIAkJCWdvdG8gcmVzZXQ7CiAJfQogCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+bWNfaW50X3N0YXR1cyk7Ci0JaWYodmFsNjQgJiBNQ19JTlRfU1RBVFVTX01DX0lOVCkgewotCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KE1DX0VSUl9SRUdfU01fRVJSLCAmYmFyMC0+bWNfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+bWNfZXJyX2NudCkpCisJaWYgKHZhbDY0ICYgTUNfSU5UX1NUQVRVU19NQ19JTlQpIHsKKwkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChNQ19FUlJfUkVHX1NNX0VSUiwKKwkJCQkJICAmYmFyMC0+bWNfZXJyX3JlZywKKwkJCQkJICAmc3dfc3RhdC0+bWNfZXJyX2NudCkpCiAJCQlnb3RvIHJlc2V0OwogCiAJCS8qIEhhbmRsaW5nIEVjYyBlcnJvcnMgKi8KQEAgLTQ3MTgsMTAgKzQ3NDAsMTAgQEAKIAkJCQkJICogUmVzZXQgWGZyYW1lSSBvbmx5IGlmIGNyaXRpY2FsIGVycm9yCiAJCQkJCSAqLwogCQkJCQlpZiAodmFsNjQgJgotCQkJCQkJKE1DX0VSUl9SRUdfTUlSSV9FQ0NfREJfRVJSXzAgfAotCQkJCQkJTUNfRVJSX1JFR19NSVJJX0VDQ19EQl9FUlJfMSkpCi0JCQkJCQkJCWdvdG8gcmVzZXQ7Ci0JCQkJCX0KKwkJCQkJICAgIChNQ19FUlJfUkVHX01JUklfRUNDX0RCX0VSUl8wIHwKKwkJCQkJICAgICBNQ19FUlJfUkVHX01JUklfRUNDX0RCX0VSUl8xKSkKKwkJCQkJCWdvdG8gcmVzZXQ7CisJCQkJfQogCQkJfSBlbHNlCiAJCQkJc3dfc3RhdC0+c2luZ2xlX2VjY19lcnJzKys7CiAJCX0KQEAgLTQ3NTAsNyArNDc3Miw3IEBACiAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBzMmlvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXZfaWQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAlpbnQgaTsKQEAgLTQ3NjUsOCArNDc4Nyw4IEBACiAJaWYgKCFpc19zMmlvX2NhcmRfdXAoc3ApKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQltYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CiAJY29uZmlnID0gJnNwLT5jb25maWc7CisJbWFjX2NvbnRyb2wgPSAmc3AtPm1hY19jb250cm9sOwogCiAJLyoKIAkgKiBJZGVudGlmeSB0aGUgY2F1c2UgZm9yIGludGVycnVwdCBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUKQEAgLTQ3NzcsMTQgKzQ3OTksMTEgQEAKIAkgKi8KIAlyZWFzb24gPSByZWFkcSgmYmFyMC0+Z2VuZXJhbF9pbnRfc3RhdHVzKTsKIAotCWlmICh1bmxpa2VseShyZWFzb24gPT0gUzJJT19NSU5VU19PTkUpICkgewotCQkvKiBOb3RoaW5nIG11Y2ggY2FuIGJlIGRvbmUuIEdldCBvdXQgKi8KLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KKwlpZiAodW5saWtlbHkocmVhc29uID09IFMySU9fTUlOVVNfT05FKSkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOwkvKiBOb3RoaW5nIG11Y2ggY2FuIGJlIGRvbmUuIEdldCBvdXQgKi8KIAotCWlmIChyZWFzb24gJiAoR0VOX0lOVFJfUlhUUkFGRklDIHwKLQkJR0VOX0lOVFJfVFhUUkFGRklDIHwgR0VOX0lOVFJfVFhQSUMpKQotCXsKKwlpZiAocmVhc29uICYKKwkgICAgKEdFTl9JTlRSX1JYVFJBRkZJQyB8IEdFTl9JTlRSX1RYVFJBRkZJQyB8IEdFTl9JTlRSX1RYUElDKSkgewogCQl3cml0ZXEoUzJJT19NSU5VU19PTkUsICZiYXIwLT5nZW5lcmFsX2ludF9tYXNrKTsKIAogCQlpZiAoY29uZmlnLT5uYXBpKSB7CkBAIC00ODAzLDggKzQ4MjIsMTEgQEAKIAkJCWlmIChyZWFzb24gJiBHRU5fSU5UUl9SWFRSQUZGSUMpCiAJCQkJd3JpdGVxKFMySU9fTUlOVVNfT05FLCAmYmFyMC0+cnhfdHJhZmZpY19pbnQpOwogCi0JCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKQotCQkJCXJ4X2ludHJfaGFuZGxlcigmbWFjX2NvbnRyb2wtPnJpbmdzW2ldLCAwKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKKwkJCQlzdHJ1Y3QgcmluZ19pbmZvICpyaW5nID0gJm1hY19jb250cm9sLT5yaW5nc1tpXTsKKworCQkJCXJ4X2ludHJfaGFuZGxlcihyaW5nLCAwKTsKKwkJCX0KIAkJfQogCiAJCS8qCkBAIC00ODI1LDE2ICs0ODQ3LDE4IEBACiAJCSAqIFJlYWxsb2NhdGUgdGhlIGJ1ZmZlcnMgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXRzZWxmLgogCQkgKi8KIAkJaWYgKCFjb25maWctPm5hcGkpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspCi0JCQkJczJpb19jaGtfcnhfYnVmZmVycyhzcCwgJm1hY19jb250cm9sLT5yaW5nc1tpXSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7CisJCQkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CisKKwkJCQlzMmlvX2Noa19yeF9idWZmZXJzKHNwLCByaW5nKTsKKwkJCX0KIAkJfQogCQl3cml0ZXEoc3AtPmdlbmVyYWxfaW50X21hc2ssICZiYXIwLT5nZW5lcmFsX2ludF9tYXNrKTsKIAkJcmVhZGwoJmJhcjAtPmdlbmVyYWxfaW50X3N0YXR1cyk7CiAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCi0JfQotCWVsc2UgaWYgKCFyZWFzb24pIHsKKwl9IGVsc2UgaWYgKCFyZWFzb24pIHsKIAkJLyogVGhlIGludGVycnVwdCB3YXMgbm90IHJhaXNlZCBieSB1cyAqLwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQpAQCAtNDg2NCw3ICs0ODg4LDcgQEAKIAkJCWNudCsrOwogCQkJaWYgKGNudCA9PSA1KQogCQkJCWJyZWFrOyAvKiBVcGR0IGZhaWxlZCAqLwotCQl9IHdoaWxlKDEpOworCQl9IHdoaWxlICgxKTsKIAl9CiB9CiAKQEAgLTQ4ODEsNTMgKzQ5MDUsNDYgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqczJpb19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sOwotCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZzsKKwlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmc3AtPmNvbmZpZzsKKwlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sID0gJnNwLT5tYWNfY29udHJvbDsKKwlzdHJ1Y3Qgc3RhdF9ibG9jayAqc3RhdHMgPSBtYWNfY29udHJvbC0+c3RhdHNfaW5mbzsKIAlpbnQgaTsKIAotCi0JbWFjX2NvbnRyb2wgPSAmc3AtPm1hY19jb250cm9sOwotCWNvbmZpZyA9ICZzcC0+Y29uZmlnOwotCiAJLyogQ29uZmlndXJlIFN0YXRzIGZvciBpbW1lZGlhdGUgdXBkdCAqLwogCXMyaW9fdXBkdF9zdGF0cyhzcCk7CiAKIAkvKiBVc2luZyBzcC0+c3RhdHMgYXMgYSBzdGFnaW5nIGFyZWEsIGJlY2F1c2UgcmVzZXQgKGR1ZSB0byBtdHUKIAkgICBjaGFuZ2UsIGZvciBleGFtcGxlKSB3aWxsIGNsZWFyIHNvbWUgaGFyZHdhcmUgY291bnRlcnMgKi8KLQlkZXYtPnN0YXRzLnR4X3BhY2tldHMgKz0KLQkJbGUzMl90b19jcHUobWFjX2NvbnRyb2wtPnN0YXRzX2luZm8tPnRtYWNfZnJtcykgLSAKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMgKz0gbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfZnJtcykgLQogCQlzcC0+c3RhdHMudHhfcGFja2V0czsKLQlzcC0+c3RhdHMudHhfcGFja2V0cyA9Ci0JCWxlMzJfdG9fY3B1KG1hY19jb250cm9sLT5zdGF0c19pbmZvLT50bWFjX2ZybXMpOwotCWRldi0+c3RhdHMudHhfZXJyb3JzICs9Ci0JCWxlMzJfdG9fY3B1KG1hY19jb250cm9sLT5zdGF0c19pbmZvLT50bWFjX2FueV9lcnJfZnJtcykgLQorCXNwLT5zdGF0cy50eF9wYWNrZXRzID0gbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfZnJtcyk7CisKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycyArPSBsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19hbnlfZXJyX2ZybXMpIC0KIAkJc3AtPnN0YXRzLnR4X2Vycm9yczsKLQlzcC0+c3RhdHMudHhfZXJyb3JzID0KLQkJbGUzMl90b19jcHUobWFjX2NvbnRyb2wtPnN0YXRzX2luZm8tPnRtYWNfYW55X2Vycl9mcm1zKTsKLQlkZXYtPnN0YXRzLnJ4X2Vycm9ycyArPQotCQlsZTY0X3RvX2NwdShtYWNfY29udHJvbC0+c3RhdHNfaW5mby0+cm1hY19kcm9wX2ZybXMpIC0KKwlzcC0+c3RhdHMudHhfZXJyb3JzID0gbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfYW55X2Vycl9mcm1zKTsKKworCWRldi0+c3RhdHMucnhfZXJyb3JzICs9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX2Ryb3BfZnJtcykgLQogCQlzcC0+c3RhdHMucnhfZXJyb3JzOwotCXNwLT5zdGF0cy5yeF9lcnJvcnMgPQotCQlsZTY0X3RvX2NwdShtYWNfY29udHJvbC0+c3RhdHNfaW5mby0+cm1hY19kcm9wX2ZybXMpOwotCWRldi0+c3RhdHMubXVsdGljYXN0ID0KLQkJbGUzMl90b19jcHUobWFjX2NvbnRyb2wtPnN0YXRzX2luZm8tPnJtYWNfdmxkX21jc3RfZnJtcykgLSAKKwlzcC0+c3RhdHMucnhfZXJyb3JzID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfZHJvcF9mcm1zKTsKKworCWRldi0+c3RhdHMubXVsdGljYXN0ID0gbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfdmxkX21jc3RfZnJtcykgLQogCQlzcC0+c3RhdHMubXVsdGljYXN0OwotCXNwLT5zdGF0cy5tdWx0aWNhc3QgPQotCQlsZTMyX3RvX2NwdShtYWNfY29udHJvbC0+c3RhdHNfaW5mby0+cm1hY192bGRfbWNzdF9mcm1zKTsKLQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPQotCQlsZTY0X3RvX2NwdShtYWNfY29udHJvbC0+c3RhdHNfaW5mby0+cm1hY19sb25nX2ZybXMpIC0gCisJc3AtPnN0YXRzLm11bHRpY2FzdCA9IGxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX3ZsZF9tY3N0X2ZybXMpOworCisJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfbG9uZ19mcm1zKSAtCiAJCXNwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzOwotCXNwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0KLQkJbGU2NF90b19jcHUobWFjX2NvbnRyb2wtPnN0YXRzX2luZm8tPnJtYWNfbG9uZ19mcm1zKTsKKwlzcC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX2xvbmdfZnJtcyk7CiAKIAkvKiBjb2xsZWN0IHBlci1yaW5nIHJ4X3BhY2tldHMgYW5kIHJ4X2J5dGVzICovCiAJZGV2LT5zdGF0cy5yeF9wYWNrZXRzID0gZGV2LT5zdGF0cy5yeF9ieXRlcyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMgKz0gbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X3BhY2tldHM7Ci0JCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2J5dGVzOworCQlzdHJ1Y3QgcmluZ19pbmZvICpyaW5nID0gJm1hY19jb250cm9sLT5yaW5nc1tpXTsKKworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMgKz0gcmluZy0+cnhfcGFja2V0czsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSByaW5nLT5yeF9ieXRlczsKIAl9CiAKLQlyZXR1cm4gKCZkZXYtPnN0YXRzKTsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIC8qKgpAQCAtNDk1MCw3ICs0OTY3LDcgQEAKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAl1NjQgdmFsNjQgPSAwLCBtdWx0aV9tYWMgPSAweDAxMDIwMzA0MDUwNlVMTCwgbWFzayA9Ci0JICAgIDB4ZmVmZmZmZmZmZmZmVUxMOworCQkweGZlZmZmZmZmZmZmZlVMTDsKIAl1NjQgZGlzX2FkZHIgPSBTMklPX0RJU0FCTEVfTUFDX0VOVFJZLCBtYWNfYWRkciA9IDA7CiAJdm9pZCBfX2lvbWVtICphZGQ7CiAJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnID0gJnNwLT5jb25maWc7CkBAIC00OTYyLDEzICs0OTc5LDEzIEBACiAJCXdyaXRlcShSTUFDX0FERFJfREFUQTFfTUVNX01BU0sobWFzayksCiAJCSAgICAgICAmYmFyMC0+cm1hY19hZGRyX2RhdGExX21lbSk7CiAJCXZhbDY0ID0gUk1BQ19BRERSX0NNRF9NRU1fV0UgfAotCQkgICAgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX05FV19DTUQgfAotCQkgICAgUk1BQ19BRERSX0NNRF9NRU1fT0ZGU0VUKGNvbmZpZy0+bWF4X21jX2FkZHIgLSAxKTsKKwkJCVJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9ORVdfQ01EIHwKKwkJCVJNQUNfQUREUl9DTURfTUVNX09GRlNFVChjb25maWctPm1heF9tY19hZGRyIC0gMSk7CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtKTsKIAkJLyogV2FpdCB0aWxsIGNvbW1hbmQgY29tcGxldGVzICovCiAJCXdhaXRfZm9yX2NtZF9jb21wbGV0ZSgmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0sCi0JCQkJCVJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HLAotCQkJCQlTMklPX0JJVF9SRVNFVCk7CisJCQkJICAgICAgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX0NNRF9FWEVDVVRJTkcsCisJCQkJICAgICAgUzJJT19CSVRfUkVTRVQpOwogCiAJCXNwLT5tX2Nhc3RfZmxnID0gMTsKIAkJc3AtPmFsbF9tdWx0aV9wb3MgPSBjb25maWctPm1heF9tY19hZGRyIC0gMTsKQEAgLTQ5NzksMTMgKzQ5OTYsMTMgQEAKIAkJd3JpdGVxKFJNQUNfQUREUl9EQVRBMV9NRU1fTUFTSygweDApLAogCQkgICAgICAgJmJhcjAtPnJtYWNfYWRkcl9kYXRhMV9tZW0pOwogCQl2YWw2NCA9IFJNQUNfQUREUl9DTURfTUVNX1dFIHwKLQkJICAgIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9ORVdfQ01EIHwKLQkJICAgIFJNQUNfQUREUl9DTURfTUVNX09GRlNFVChzcC0+YWxsX211bHRpX3Bvcyk7CisJCQlSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCB8CisJCQlSTUFDX0FERFJfQ01EX01FTV9PRkZTRVQoc3AtPmFsbF9tdWx0aV9wb3MpOwogCQl3cml0ZXEodmFsNjQsICZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSk7CiAJCS8qIFdhaXQgdGlsbCBjb21tYW5kIGNvbXBsZXRlcyAqLwogCQl3YWl0X2Zvcl9jbWRfY29tcGxldGUoJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtLAotCQkJCQlSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORywKLQkJCQkJUzJJT19CSVRfUkVTRVQpOworCQkJCSAgICAgIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HLAorCQkJCSAgICAgIFMySU9fQklUX1JFU0VUKTsKIAogCQlzcC0+bV9jYXN0X2ZsZyA9IDA7CiAJCXNwLT5hbGxfbXVsdGlfcG9zID0gMDsKQEAgLTQ5OTgsNyArNTAxNSw3IEBACiAJCXZhbDY0IHw9IE1BQ19DRkdfUk1BQ19QUk9NX0VOQUJMRTsKIAogCQl3cml0ZXEoUk1BQ19DRkdfS0VZKDB4NEMwRCksICZiYXIwLT5ybWFjX2NmZ19rZXkpOwotCQl3cml0ZWwoKHUzMikgdmFsNjQsIGFkZCk7CisJCXdyaXRlbCgodTMyKXZhbDY0LCBhZGQpOwogCQl3cml0ZXEoUk1BQ19DRkdfS0VZKDB4NEMwRCksICZiYXIwLT5ybWFjX2NmZ19rZXkpOwogCQl3cml0ZWwoKHUzMikgKHZhbDY0ID4+IDMyKSwgKGFkZCArIDQpKTsKIApAQCAtNTAyMCw3ICs1MDM3LDcgQEAKIAkJdmFsNjQgJj0gfk1BQ19DRkdfUk1BQ19QUk9NX0VOQUJMRTsKIAogCQl3cml0ZXEoUk1BQ19DRkdfS0VZKDB4NEMwRCksICZiYXIwLT5ybWFjX2NmZ19rZXkpOwotCQl3cml0ZWwoKHUzMikgdmFsNjQsIGFkZCk7CisJCXdyaXRlbCgodTMyKXZhbDY0LCBhZGQpOwogCQl3cml0ZXEoUk1BQ19DRkdfS0VZKDB4NEMwRCksICZiYXIwLT5ybWFjX2NmZ19rZXkpOwogCQl3cml0ZWwoKHUzMikgKHZhbDY0ID4+IDMyKSwgKGFkZCArIDQpKTsKIApAQCAtNTAzMywxOCArNTA1MCwxNyBAQAogCiAJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPm1hY19jZmcpOwogCQlzcC0+cHJvbWlzY19mbGcgPSAwOwotCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogbGVmdCBwcm9taXNjdW91cyBtb2RlXG4iLAotCQkJICBkZXYtPm5hbWUpOworCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogbGVmdCBwcm9taXNjdW91cyBtb2RlXG4iLCBkZXYtPm5hbWUpOwogCX0KIAogCS8qICBVcGRhdGUgaW5kaXZpZHVhbCBNX0NBU1QgYWRkcmVzcyBsaXN0ICovCiAJaWYgKCghc3AtPm1fY2FzdF9mbGcpICYmIGRldi0+bWNfY291bnQpIHsKIAkJaWYgKGRldi0+bWNfY291bnQgPgogCQkgICAgKGNvbmZpZy0+bWF4X21jX2FkZHIgLSBjb25maWctPm1heF9tYWNfYWRkcikpIHsKLQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IE5vIG1vcmUgUnggZmlsdGVycyAiLAorCQkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkJICAiJXM6IE5vIG1vcmUgUnggZmlsdGVycyBjYW4gYmUgYWRkZWQgLSAiCisJCQkJICAicGxlYXNlIGVuYWJsZSBBTExfTVVMVEkgaW5zdGVhZFxuIiwKIAkJCQkgIGRldi0+bmFtZSk7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgImNhbiBiZSBhZGRlZCwgcGxlYXNlIGVuYWJsZSAiKTsKLQkJCURCR19QUklOVChFUlJfREJHLCAiQUxMX01VTFRJIGluc3RlYWRcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTUwNTYsMjAgKzUwNzIsMjAgQEAKIAkJCXdyaXRlcShSTUFDX0FERFJfREFUQTBfTUVNX0FERFIoZGlzX2FkZHIpLAogCQkJICAgICAgICZiYXIwLT5ybWFjX2FkZHJfZGF0YTBfbWVtKTsKIAkJCXdyaXRlcShSTUFDX0FERFJfREFUQTFfTUVNX01BU0soMFVMTCksCi0JCQkJJmJhcjAtPnJtYWNfYWRkcl9kYXRhMV9tZW0pOworCQkJICAgICAgICZiYXIwLT5ybWFjX2FkZHJfZGF0YTFfbWVtKTsKIAkJCXZhbDY0ID0gUk1BQ19BRERSX0NNRF9NRU1fV0UgfAotCQkJICAgIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9ORVdfQ01EIHwKLQkJCSAgICBSTUFDX0FERFJfQ01EX01FTV9PRkZTRVQKLQkJCSAgICAoY29uZmlnLT5tY19zdGFydF9vZmZzZXQgKyBpKTsKKwkJCQlSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCB8CisJCQkJUk1BQ19BRERSX0NNRF9NRU1fT0ZGU0VUCisJCQkJKGNvbmZpZy0+bWNfc3RhcnRfb2Zmc2V0ICsgaSk7CiAJCQl3cml0ZXEodmFsNjQsICZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSk7CiAKIAkJCS8qIFdhaXQgZm9yIGNvbW1hbmQgY29tcGxldGVzICovCiAJCQlpZiAod2FpdF9mb3JfY21kX2NvbXBsZXRlKCZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSwKLQkJCQkJUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX0NNRF9FWEVDVVRJTkcsCi0JCQkJCVMySU9fQklUX1JFU0VUKSkgewotCQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IEFkZGluZyAiLAorCQkJCQkJICBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORywKKwkJCQkJCSAgUzJJT19CSVRfUkVTRVQpKSB7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkJCSAgIiVzOiBBZGRpbmcgTXVsdGljYXN0cyBmYWlsZWRcbiIsCiAJCQkJCSAgZGV2LT5uYW1lKTsKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIk11bHRpY2FzdHMgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0KQEAgLTUwODgsMjAgKzUxMDQsMjAgQEAKIAkJCXdyaXRlcShSTUFDX0FERFJfREFUQTBfTUVNX0FERFIobWFjX2FkZHIpLAogCQkJICAgICAgICZiYXIwLT5ybWFjX2FkZHJfZGF0YTBfbWVtKTsKIAkJCXdyaXRlcShSTUFDX0FERFJfREFUQTFfTUVNX01BU0soMFVMTCksCi0JCQkJJmJhcjAtPnJtYWNfYWRkcl9kYXRhMV9tZW0pOworCQkJICAgICAgICZiYXIwLT5ybWFjX2FkZHJfZGF0YTFfbWVtKTsKIAkJCXZhbDY0ID0gUk1BQ19BRERSX0NNRF9NRU1fV0UgfAotCQkJICAgIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9ORVdfQ01EIHwKLQkJCSAgICBSTUFDX0FERFJfQ01EX01FTV9PRkZTRVQKLQkJCSAgICAoaSArIGNvbmZpZy0+bWNfc3RhcnRfb2Zmc2V0KTsKKwkJCQlSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCB8CisJCQkJUk1BQ19BRERSX0NNRF9NRU1fT0ZGU0VUCisJCQkJKGkgKyBjb25maWctPm1jX3N0YXJ0X29mZnNldCk7CiAJCQl3cml0ZXEodmFsNjQsICZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSk7CiAKIAkJCS8qIFdhaXQgZm9yIGNvbW1hbmQgY29tcGxldGVzICovCiAJCQlpZiAod2FpdF9mb3JfY21kX2NvbXBsZXRlKCZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSwKLQkJCQkJUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX0NNRF9FWEVDVVRJTkcsCi0JCQkJCVMySU9fQklUX1JFU0VUKSkgewotCQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IEFkZGluZyAiLAorCQkJCQkJICBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORywKKwkJCQkJCSAgUzJJT19CSVRfUkVTRVQpKSB7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkJCSAgIiVzOiBBZGRpbmcgTXVsdGljYXN0cyBmYWlsZWRcbiIsCiAJCQkJCSAgZGV2LT5uYW1lKTsKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIk11bHRpY2FzdHMgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0KQEAgLTUxMzUsMTEgKzUxNTEsMTEgQEAKIAkvKiByZXN0b3JlIHVuaWNhc3QgbWFjIGFkZHJlc3MgKi8KIAlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGNvbmZpZy0+bWF4X21hY19hZGRyOyBvZmZzZXQrKykKIAkJZG9fczJpb19wcm9nX3VuaWNhc3Qoc3AtPmRldiwKLQkJCXNwLT5kZWZfbWFjX2FkZHJbb2Zmc2V0XS5tYWNfYWRkcik7CisJCQkJICAgICBzcC0+ZGVmX21hY19hZGRyW29mZnNldF0ubWFjX2FkZHIpOwogCiAJLyogcmVzdG9yZSBtdWx0aWNhc3QgbWFjIGFkZHJlc3MgKi8KIAlmb3IgKG9mZnNldCA9IGNvbmZpZy0+bWNfc3RhcnRfb2Zmc2V0OwotCQlvZmZzZXQgPCBjb25maWctPm1heF9tY19hZGRyOyBvZmZzZXQrKykKKwkgICAgIG9mZnNldCA8IGNvbmZpZy0+bWF4X21jX2FkZHI7IG9mZnNldCsrKQogCQlkb19zMmlvX2FkZF9tYyhzcCwgc3AtPmRlZl9tYWNfYWRkcltvZmZzZXRdLm1hY19hZGRyKTsKIH0KIApAQCAtNTE2OSwxMyArNTE4NSwxMyBAQAogCX0KIAlpZiAoaSA9PSBjb25maWctPm1heF9tY19hZGRyKSB7CiAJCURCR19QUklOVChFUlJfREJHLAotCQkJIkNBTSBmdWxsIG5vIHNwYWNlIGxlZnQgZm9yIG11bHRpY2FzdCBNQUNcbiIpOworCQkJICAiQ0FNIGZ1bGwgbm8gc3BhY2UgbGVmdCBmb3IgbXVsdGljYXN0IE1BQ1xuIik7CiAJCXJldHVybiBGQUlMVVJFOwogCX0KIAkvKiBVcGRhdGUgdGhlIGludGVybmFsIHN0cnVjdHVyZSB3aXRoIHRoaXMgbmV3IG1hYyBhZGRyZXNzICovCiAJZG9fczJpb19jb3B5X21hY19hZGRyKHNwLCBpLCBtYWNfYWRkcik7CiAKLQlyZXR1cm4gKGRvX3MyaW9fYWRkX21hYyhzcCwgbWFjX2FkZHIsIGkpKTsKKwlyZXR1cm4gZG9fczJpb19hZGRfbWFjKHNwLCBtYWNfYWRkciwgaSk7CiB9CiAKIC8qIGFkZCBNQUMgYWRkcmVzcyB0byBDQU0gKi8KQEAgLTUxODUsMTcgKzUyMDEsMTYgQEAKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAogCXdyaXRlcShSTUFDX0FERFJfREFUQTBfTUVNX0FERFIoYWRkciksCi0JCSZiYXIwLT5ybWFjX2FkZHJfZGF0YTBfbWVtKTsKKwkgICAgICAgJmJhcjAtPnJtYWNfYWRkcl9kYXRhMF9tZW0pOwogCi0JdmFsNjQgPQotCQlSTUFDX0FERFJfQ01EX01FTV9XRSB8IFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9ORVdfQ01EIHwKKwl2YWw2NCA9CVJNQUNfQUREUl9DTURfTUVNX1dFIHwgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX05FV19DTUQgfAogCQlSTUFDX0FERFJfQ01EX01FTV9PRkZTRVQob2ZmKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSk7CiAKIAkvKiBXYWl0IHRpbGwgY29tbWFuZCBjb21wbGV0ZXMgKi8KIAlpZiAod2FpdF9mb3JfY21kX2NvbXBsZXRlKCZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSwKLQkJUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX0NNRF9FWEVDVVRJTkcsCi0JCVMySU9fQklUX1JFU0VUKSkgeworCQkJCSAgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX0NNRF9FWEVDVVRJTkcsCisJCQkJICBTMklPX0JJVF9SRVNFVCkpIHsKIAkJREJHX1BSSU5UKElORk9fREJHLCAiZG9fczJpb19hZGRfbWFjIGZhaWxlZFxuIik7CiAJCXJldHVybiBGQUlMVVJFOwogCX0KQEAgLTUyMDksNyArNTIyNCw3IEBACiAJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnID0gJnNwLT5jb25maWc7CiAKIAlmb3IgKG9mZnNldCA9IDE7Ci0JCW9mZnNldCA8IGNvbmZpZy0+bWF4X21jX2FkZHI7IG9mZnNldCsrKSB7CisJICAgICBvZmZzZXQgPCBjb25maWctPm1heF9tY19hZGRyOyBvZmZzZXQrKykgewogCQl0bXA2NCA9IGRvX3MyaW9fcmVhZF91bmljYXN0X21jKHNwLCBvZmZzZXQpOwogCQlpZiAodG1wNjQgPT0gYWRkcikgewogCQkJLyogZGlzYWJsZSB0aGUgZW50cnkgYnkgd3JpdGluZyAgMHhmZmZmZmZmZmZmZmZVTEwgKi8KQEAgLTUyMjEsNyArNTIzNiw3IEBACiAJCX0KIAl9CiAJREJHX1BSSU5UKEVSUl9EQkcsICJNQUMgYWRkcmVzcyAweCVsbHggbm90IGZvdW5kIGluIENBTVxuIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkcik7CisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyKTsKIAlyZXR1cm4gRkFJTFVSRTsKIH0KIApAQCAtNTIzMiwyMCArNTI0NywyMCBAQAogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCiAJLyogcmVhZCBtYWMgYWRkciAqLwotCXZhbDY0ID0KLQkJUk1BQ19BRERSX0NNRF9NRU1fUkQgfCBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCB8CisJdmFsNjQgPQlSTUFDX0FERFJfQ01EX01FTV9SRCB8IFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9ORVdfQ01EIHwKIAkJUk1BQ19BRERSX0NNRF9NRU1fT0ZGU0VUKG9mZnNldCk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0pOwogCiAJLyogV2FpdCB0aWxsIGNvbW1hbmQgY29tcGxldGVzICovCiAJaWYgKHdhaXRfZm9yX2NtZF9jb21wbGV0ZSgmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0sCi0JCVJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HLAotCQlTMklPX0JJVF9SRVNFVCkpIHsKKwkJCQkgIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HLAorCQkJCSAgUzJJT19CSVRfUkVTRVQpKSB7CiAJCURCR19QUklOVChJTkZPX0RCRywgImRvX3MyaW9fcmVhZF91bmljYXN0X21jIGZhaWxlZFxuIik7CiAJCXJldHVybiBGQUlMVVJFOwogCX0KIAl0bXA2NCA9IHJlYWRxKCZiYXIwLT5ybWFjX2FkZHJfZGF0YTBfbWVtKTsKLQlyZXR1cm4gKHRtcDY0ID4+IDE2KTsKKworCXJldHVybiB0bXA2NCA+PiAxNjsKIH0KIAogLyoqCkBAIC01MjYyLDcgKzUyNzcsNyBAQAogCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKIAogCS8qIHN0b3JlIHRoZSBNQUMgYWRkcmVzcyBpbiBDQU0gKi8KLQlyZXR1cm4gKGRvX3MyaW9fcHJvZ191bmljYXN0KGRldiwgZGV2LT5kZXZfYWRkcikpOworCXJldHVybiBkb19zMmlvX3Byb2dfdW5pY2FzdChkZXYsIGRldi0+ZGV2X2FkZHIpOwogfQogLyoqCiAgKiAgZG9fczJpb19wcm9nX3VuaWNhc3QgLSBQcm9ncmFtcyB0aGUgWGZyYW1lIG1hYyBhZGRyZXNzCkBAIC01MjgzLDEwICs1Mjk4LDEwIEBACiAJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnID0gJnNwLT5jb25maWc7CiAKIAkvKgotCSogU2V0IHRoZSBuZXcgTUFDIGFkZHJlc3MgYXMgdGhlIG5ldyB1bmljYXN0IGZpbHRlciBhbmQgcmVmbGVjdCB0aGlzCi0JKiBjaGFuZ2Ugb24gdGhlIGRldmljZSBhZGRyZXNzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgT1MuIEl0IHdpbGwgYmUKLQkqIGF0IG9mZnNldCAwLgotCSovCisJICogU2V0IHRoZSBuZXcgTUFDIGFkZHJlc3MgYXMgdGhlIG5ldyB1bmljYXN0IGZpbHRlciBhbmQgcmVmbGVjdCB0aGlzCisJICogY2hhbmdlIG9uIHRoZSBkZXZpY2UgYWRkcmVzcyByZWdpc3RlcmVkIHdpdGggdGhlIE9TLiBJdCB3aWxsIGJlCisJICogYXQgb2Zmc2V0IDAuCisJICovCiAJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspIHsKIAkJbWFjX2FkZHIgPDw9IDg7CiAJCW1hY19hZGRyIHw9IGFkZHJbaV07CkBAIC01MzA2LDggKzUzMjEsOCBAQAogCiAJCWlmICh0bXA2NCA9PSBtYWNfYWRkcikgewogCQkJREJHX1BSSU5UKElORk9fREJHLAotCQkJIk1BQyBhZGRyOjB4JWxseCBhbHJlYWR5IHByZXNlbnQgaW4gQ0FNXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyltYWNfYWRkcik7CisJCQkJICAiTUFDIGFkZHI6MHglbGx4IGFscmVhZHkgcHJlc2VudCBpbiBDQU1cbiIsCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKW1hY19hZGRyKTsKIAkJCXJldHVybiBTVUNDRVNTOwogCQl9CiAJfQpAQCAtNTMxNyw3ICs1MzMyLDggQEAKIAl9CiAJLyogVXBkYXRlIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgd2l0aCB0aGlzIG5ldyBtYWMgYWRkcmVzcyAqLwogCWRvX3MyaW9fY29weV9tYWNfYWRkcihzcCwgaSwgbWFjX2FkZHIpOwotCXJldHVybiAoZG9fczJpb19hZGRfbWFjKHNwLCBtYWNfYWRkciwgaSkpOworCisJcmV0dXJuIGRvX3MyaW9fYWRkX21hYyhzcCwgbWFjX2FkZHIsIGkpOwogfQogCiAvKioKQEAgLTUzMzAsMTQgKzUzNDYsMTUgQEAKICAqIHRoZSBOSUMuCiAgKiBSZXR1cm4gdmFsdWU6CiAgKiAwIG9uIHN1Y2Nlc3MuCi0qLworICovCiAKIHN0YXRpYyBpbnQgczJpb19ldGh0b29sX3NzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IGV0aHRvb2xfY21kICppbmZvKQogewogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCWlmICgoaW5mby0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgfHwKLQkgICAgKGluZm8tPnNwZWVkICE9IFNQRUVEXzEwMDAwKSB8fCAoaW5mby0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkKKwkgICAgKGluZm8tPnNwZWVkICE9IFNQRUVEXzEwMDAwKSB8fAorCSAgICAoaW5mby0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZWxzZSB7CiAJCXMyaW9fY2xvc2Uoc3AtPmRldik7CkBAIC01NDE4LDE0ICs1NDM1LDE0IEBACiAgKiAgYnVmZmVyIGFyZWEuCiAgKiBSZXR1cm4gdmFsdWUgOgogICogdm9pZCAuCi0qLworICovCiAKIHN0YXRpYyB2b2lkIHMyaW9fZXRodG9vbF9ncmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnNwYWNlKQogewogCWludCBpOwogCXU2NCByZWc7Ci0JdTggKnJlZ19zcGFjZSA9ICh1OCAqKSBzcGFjZTsKKwl1OCAqcmVnX3NwYWNlID0gKHU4ICopc3BhY2U7CiAJc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlyZWdzLT5sZW4gPSBYRU5BX1JFR19TUEFDRTsKQEAgLTU0NDUsMTcgKzU0NjIsMTcgQEAKICAqIGFkYXB0ZXIgTEVEIGJpdCBvZiB0aGUgYWRhcHRlciBjb250cm9sIGJpdCB0byBzZXQvcmVzZXQgZXZlcnkgdGltZSBvbgogICogaW52b2NhdGlvbi4gVGhlIHRpbWVyIGlzIHNldCBmb3IgMS8yIGEgc2Vjb25kLCBoZW5jZSB0aGEgTklDIGJsaW5rcwogICogIG9uY2UgZXZlcnkgc2Vjb25kLgotKi8KKyAqLwogc3RhdGljIHZvaWQgczJpb19waHlfaWQodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBzMmlvX25pYyAqc3AgPSAoc3RydWN0IHMyaW9fbmljICopIGRhdGE7CisJc3RydWN0IHMyaW9fbmljICpzcCA9IChzdHJ1Y3QgczJpb19uaWMgKilkYXRhOwogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCXU2NCB2YWw2NCA9IDA7CiAJdTE2IHN1YmlkOwogCiAJc3ViaWQgPSBzcC0+cGRldi0+c3Vic3lzdGVtX2RldmljZTsKIAlpZiAoKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB8fAotCQkgICAoKHN1YmlkICYgMHhGRikgPj0gMHgwNykpIHsKKwkgICAgKChzdWJpZCAmIDB4RkYpID49IDB4MDcpKSB7CiAJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9fY29udHJvbCk7CiAJCXZhbDY0IF49IEdQSU9fQ1RSTF9HUElPXzA7CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPmdwaW9fY29udHJvbCk7CkBAIC01NDkyLDE5ICs1NTA5LDE3IEBACiAKIAlzdWJpZCA9IHNwLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwogCWxhc3RfZ3Bpb19jdHJsX3ZhbCA9IHJlYWRxKCZiYXIwLT5ncGlvX2NvbnRyb2wpOwotCWlmICgoc3AtPmRldmljZV90eXBlID09IFhGUkFNRV9JX0RFVklDRSkgJiYKLQkJKChzdWJpZCAmIDB4RkYpIDwgMHgwNykpIHsKKwlpZiAoKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSV9ERVZJQ0UpICYmICgoc3ViaWQgJiAweEZGKSA8IDB4MDcpKSB7CiAJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmFkYXB0ZXJfY29udHJvbCk7CiAJCWlmICghKHZhbDY0ICYgQURBUFRFUl9DTlRMX0VOKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIkFkYXB0ZXIgTGluayBkb3duLCBjYW5ub3QgYmxpbmsgTEVEXG4iKTsKKwkJCXByX2VycigiQWRhcHRlciBMaW5rIGRvd24sIGNhbm5vdCBibGluayBMRURcbiIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAl9CiAJaWYgKHNwLT5pZF90aW1lci5mdW5jdGlvbiA9PSBOVUxMKSB7CiAJCWluaXRfdGltZXIoJnNwLT5pZF90aW1lcik7CiAJCXNwLT5pZF90aW1lci5mdW5jdGlvbiA9IHMyaW9fcGh5X2lkOwotCQlzcC0+aWRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBzcDsKKwkJc3AtPmlkX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylzcDsKIAl9CiAJbW9kX3RpbWVyKCZzcC0+aWRfdGltZXIsIGppZmZpZXMpOwogCWlmIChkYXRhKQpAQCAtNTUyMiwxMCArNTUzNywxMCBAQAogfQogCiBzdGF0aWMgdm9pZCBzMmlvX2V0aHRvb2xfZ3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICplcmluZykKKwkJCQkgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICplcmluZykKIHsKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaSx0eF9kZXNjX2NvdW50PTAscnhfZGVzY19jb3VudD0wOworCWludCBpLCB0eF9kZXNjX2NvdW50ID0gMCwgcnhfZGVzY19jb3VudCA9IDA7CiAKIAlpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzEpCiAJCWVyaW5nLT5yeF9tYXhfcGVuZGluZyA9IE1BWF9SWF9ERVNDXzE7CkBAIC01NTM2LDcgKzU1NTEsNyBAQAogCWZvciAoaSA9IDAgOyBpIDwgc3AtPmNvbmZpZy50eF9maWZvX251bSA7IGkrKykKIAkJdHhfZGVzY19jb3VudCArPSBzcC0+Y29uZmlnLnR4X2NmZ1tpXS5maWZvX2xlbjsKIAotCURCR19QUklOVChJTkZPX0RCRywiXG5tYXggdHhkcyA6ICVkXG4iLHNwLT5jb25maWcubWF4X3R4ZHMpOworCURCR19QUklOVChJTkZPX0RCRywgIm1heCB0eGRzOiAlZFxuIiwgc3AtPmNvbmZpZy5tYXhfdHhkcyk7CiAJZXJpbmctPnR4X3BlbmRpbmcgPSB0eF9kZXNjX2NvdW50OwogCXJ4X2Rlc2NfY291bnQgPSAwOwogCWZvciAoaSA9IDAgOyBpIDwgc3AtPmNvbmZpZy5yeF9yaW5nX251bSA7IGkrKykKQEAgLTU1NDYsNyArNTU2MSw3IEBACiAKIAllcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7CiAJZXJpbmctPnJ4X21pbmlfcGVuZGluZyA9IDA7Ci0JaWYoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzEpCisJaWYgKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8xKQogCQllcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSBNQVhfUlhfREVTQ18xOwogCWVsc2UgaWYgKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikKIAkJZXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gTUFYX1JYX0RFU0NfMjsKQEAgLTU1OTEsNyArNTYwNiw3IEBACiAgKi8KIAogc3RhdGljIGludCBzMmlvX2V0aHRvb2xfc2V0cGF1c2VfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVwKQorCQkJCSAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVwKQogewogCXU2NCB2YWw2NDsKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTU2MjcsNyArNTY0Miw3IEBACiAgKi8KIAogI2RlZmluZSBTMklPX0RFVl9JRAkJNQotc3RhdGljIGludCByZWFkX2VlcHJvbShzdHJ1Y3QgczJpb19uaWMgKiBzcCwgaW50IG9mZiwgdTY0ICogZGF0YSkKK3N0YXRpYyBpbnQgcmVhZF9lZXByb20oc3RydWN0IHMyaW9fbmljICpzcCwgaW50IG9mZiwgdTY0ICpkYXRhKQogewogCWludCByZXQgPSAtMTsKIAl1MzIgZXhpdF9jbnQgPSAwOwpAQCAtNTYzNSw5ICs1NjUwLDExIEBACiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CiAKIAlpZiAoc3AtPmRldmljZV90eXBlID09IFhGUkFNRV9JX0RFVklDRSkgewotCQl2YWw2NCA9IEkyQ19DT05UUk9MX0RFVl9JRChTMklPX0RFVl9JRCkgfCBJMkNfQ09OVFJPTF9BRERSKG9mZikgfAotCQkgICAgSTJDX0NPTlRST0xfQllURV9DTlQoMHgzKSB8IEkyQ19DT05UUk9MX1JFQUQgfAotCQkgICAgSTJDX0NPTlRST0xfQ05UTF9TVEFSVDsKKwkJdmFsNjQgPSBJMkNfQ09OVFJPTF9ERVZfSUQoUzJJT19ERVZfSUQpIHwKKwkJCUkyQ19DT05UUk9MX0FERFIob2ZmKSB8CisJCQlJMkNfQ09OVFJPTF9CWVRFX0NOVCgweDMpIHwKKwkJCUkyQ19DT05UUk9MX1JFQUQgfAorCQkJSTJDX0NPTlRST0xfQ05UTF9TVEFSVDsKIAkJU1BFQ0lBTF9SRUdfV1JJVEUodmFsNjQsICZiYXIwLT5pMmNfY29udHJvbCwgTEYpOwogCiAJCXdoaWxlIChleGl0X2NudCA8IDUpIHsKQEAgLTU2OTIsMTYgKzU3MDksMTggQEAKICAqICAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCiAgKi8KIAotc3RhdGljIGludCB3cml0ZV9lZXByb20oc3RydWN0IHMyaW9fbmljICogc3AsIGludCBvZmYsIHU2NCBkYXRhLCBpbnQgY250KQorc3RhdGljIGludCB3cml0ZV9lZXByb20oc3RydWN0IHMyaW9fbmljICpzcCwgaW50IG9mZiwgdTY0IGRhdGEsIGludCBjbnQpCiB7CiAJaW50IGV4aXRfY250ID0gMCwgcmV0ID0gLTE7CiAJdTY0IHZhbDY0OwogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCiAJaWYgKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSV9ERVZJQ0UpIHsKLQkJdmFsNjQgPSBJMkNfQ09OVFJPTF9ERVZfSUQoUzJJT19ERVZfSUQpIHwgSTJDX0NPTlRST0xfQUREUihvZmYpIHwKLQkJICAgIEkyQ19DT05UUk9MX0JZVEVfQ05UKGNudCkgfCBJMkNfQ09OVFJPTF9TRVRfREFUQSgodTMyKWRhdGEpIHwKLQkJICAgIEkyQ19DT05UUk9MX0NOVExfU1RBUlQ7CisJCXZhbDY0ID0gSTJDX0NPTlRST0xfREVWX0lEKFMySU9fREVWX0lEKSB8CisJCQlJMkNfQ09OVFJPTF9BRERSKG9mZikgfAorCQkJSTJDX0NPTlRST0xfQllURV9DTlQoY250KSB8CisJCQlJMkNfQ09OVFJPTF9TRVRfREFUQSgodTMyKWRhdGEpIHwKKwkJCUkyQ19DT05UUk9MX0NOVExfU1RBUlQ7CiAJCVNQRUNJQUxfUkVHX1dSSVRFKHZhbDY0LCAmYmFyMC0+aTJjX2NvbnRyb2wsIExGKTsKIAogCQl3aGlsZSAoZXhpdF9jbnQgPCA1KSB7CkBAIC01NzE4LDcgKzU3MzcsNyBAQAogCiAJaWYgKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB7CiAJCWludCB3cml0ZV9jbnQgPSAoY250ID09IDgpID8gMCA6IGNudDsKLQkJd3JpdGVxKFNQSV9EQVRBX1dSSVRFKGRhdGEsKGNudDw8MykpLCAmYmFyMC0+c3BpX2RhdGEpOworCQl3cml0ZXEoU1BJX0RBVEFfV1JJVEUoZGF0YSwgKGNudCA8PCAzKSksICZiYXIwLT5zcGlfZGF0YSk7CiAKIAkJdmFsNjQgPSBTUElfQ09OVFJPTF9LRVkoMHg5KSB8IFNQSV9DT05UUk9MX1NFTDEgfAogCQkJU1BJX0NPTlRST0xfQllURUNOVCh3cml0ZV9jbnQpIHwKQEAgLTU3NDUsMTQgKzU3NjQsMTQgQEAKIHsKIAl1OCAqdnBkX2RhdGE7CiAJdTggZGF0YTsKLQlpbnQgaT0wLCBjbnQsIGZhaWwgPSAwOworCWludCBpID0gMCwgY250LCBmYWlsID0gMDsKIAlpbnQgdnBkX2FkZHIgPSAweDgwOworCXN0cnVjdCBzd1N0YXQgKnN3c3RhdHMgPSAmbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0OwogCiAJaWYgKG5pYy0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lJX0RFVklDRSkgewogCQlzdHJjcHkobmljLT5wcm9kdWN0X25hbWUsICJYZnJhbWUgSUkgMTBHYkUgbmV0d29yayBhZGFwdGVyIik7CiAJCXZwZF9hZGRyID0gMHg4MDsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJc3RyY3B5KG5pYy0+cHJvZHVjdF9uYW1lLCAiWGZyYW1lIEkgMTBHYkUgbmV0d29yayBhZGFwdGVyIik7CiAJCXZwZF9hZGRyID0gMHg1MDsKIAl9CkBAIC01NzYwLDE2ICs1Nzc5LDE2IEBACiAKIAl2cGRfZGF0YSA9IGttYWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXZwZF9kYXRhKSB7Ci0JCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NfZmFpbF9jbnQrKzsKKwkJc3dzdGF0cy0+bWVtX2FsbG9jX2ZhaWxfY250Kys7CiAJCXJldHVybjsKIAl9Ci0JbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY2F0ZWQgKz0gMjU2OworCXN3c3RhdHMtPm1lbV9hbGxvY2F0ZWQgKz0gMjU2OwogCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSArPTQgKSB7CisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSArPSA0KSB7CiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShuaWMtPnBkZXYsICh2cGRfYWRkciArIDIpLCBpKTsKIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUobmljLT5wZGV2LCAgKHZwZF9hZGRyICsgMiksICZkYXRhKTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKG5pYy0+cGRldiwgKHZwZF9hZGRyICsgMyksIDApOwotCQlmb3IgKGNudCA9IDA7IGNudCA8NTsgY250KyspIHsKKwkJZm9yIChjbnQgPSAwOyBjbnQgPCA1OyBjbnQrKykgewogCQkJbXNsZWVwKDIpOwogCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUobmljLT5wZGV2LCAodnBkX2FkZHIgKyAzKSwgJmRhdGEpOwogCQkJaWYgKGRhdGEgPT0gMHg4MCkKQEAgLTU3ODQsMTUgKzU4MDMsMTUgQEAKIAkJCQkgICAgICAodTMyICopJnZwZF9kYXRhW2ldKTsKIAl9CiAKLQlpZighZmFpbCkgeworCWlmICghZmFpbCkgewogCQkvKiByZWFkIHNlcmlhbCBudW1iZXIgb2YgYWRhcHRlciAqLwogCQlmb3IgKGNudCA9IDA7IGNudCA8IDI1NjsgY250KyspIHsKLQkJaWYgKCh2cGRfZGF0YVtjbnRdID09ICdTJykgJiYKLQkJCSh2cGRfZGF0YVtjbnQrMV0gPT0gJ04nKSAmJgotCQkJKHZwZF9kYXRhW2NudCsyXSA8IFZQRF9TVFJJTkdfTEVOKSkgeworCQkJaWYgKCh2cGRfZGF0YVtjbnRdID09ICdTJykgJiYKKwkJCSAgICAodnBkX2RhdGFbY250KzFdID09ICdOJykgJiYKKwkJCSAgICAodnBkX2RhdGFbY250KzJdIDwgVlBEX1NUUklOR19MRU4pKSB7CiAJCQkJbWVtc2V0KG5pYy0+c2VyaWFsX251bSwgMCwgVlBEX1NUUklOR19MRU4pOwogCQkJCW1lbWNweShuaWMtPnNlcmlhbF9udW0sICZ2cGRfZGF0YVtjbnQgKyAzXSwKLQkJCQkJdnBkX2RhdGFbY250KzJdKTsKKwkJCQkgICAgICAgdnBkX2RhdGFbY250KzJdKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtNTgwMyw3ICs1ODIyLDcgQEAKIAkJbWVtY3B5KG5pYy0+cHJvZHVjdF9uYW1lLCAmdnBkX2RhdGFbM10sIHZwZF9kYXRhWzFdKTsKIAl9CiAJa2ZyZWUodnBkX2RhdGEpOwotCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0gMjU2OworCXN3c3RhdHMtPm1lbV9mcmVlZCArPSAyNTY7CiB9CiAKIC8qKgpAQCAtNTgyMCw3ICs1ODM5LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IHMyaW9fZXRodG9vbF9nZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICogZGF0YV9idWYpCisJCQkJc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICogZGF0YV9idWYpCiB7CiAJdTMyIGksIHZhbGlkOwogCXU2NCBkYXRhOwpAQCAtNTg1OCw3ICs1ODc3LDcgQEAKIAogc3RhdGljIGludCBzMmlvX2V0aHRvb2xfc2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCXN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLAotCQkJCXU4ICogZGF0YV9idWYpCisJCQkJdTggKmRhdGFfYnVmKQogewogCWludCBsZW4gPSBlZXByb20tPmxlbiwgY250ID0gMDsKIAl1NjQgdmFsaWQgPSAwLCBkYXRhOwpAQCAtNTg2NiwyNCArNTg4NSwyNCBAQAogCiAJaWYgKGVlcHJvbS0+bWFnaWMgIT0gKHNwLT5wZGV2LT52ZW5kb3IgfCAoc3AtPnBkZXYtPmRldmljZSA8PCAxNikpKSB7CiAJCURCR19QUklOVChFUlJfREJHLAotCQkJICAiRVRIVE9PTF9XUklURV9FRVBST00gRXJyOiBNYWdpYyB2YWx1ZSAiKTsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJpcyB3cm9uZywgSXRzIG5vdCAweCV4XG4iLAorCQkJICAiRVRIVE9PTF9XUklURV9FRVBST00gRXJyOiAiCisJCQkgICJNYWdpYyB2YWx1ZSBpcyB3cm9uZywgaXQgaXMgMHgleCBzaG91bGQgYmUgMHgleFxuIiwKKwkJCSAgKHNwLT5wZGV2LT52ZW5kb3IgfCAoc3AtPnBkZXYtPmRldmljZSA8PCAxNikpLAogCQkJICBlZXByb20tPm1hZ2ljKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAJd2hpbGUgKGxlbikgewotCQlkYXRhID0gKHUzMikgZGF0YV9idWZbY250XSAmIDB4MDAwMDAwRkY7Ci0JCWlmIChkYXRhKSB7Ci0JCQl2YWxpZCA9ICh1MzIpIChkYXRhIDw8IDI0KTsKLQkJfSBlbHNlCisJCWRhdGEgPSAodTMyKWRhdGFfYnVmW2NudF0gJiAweDAwMDAwMEZGOworCQlpZiAoZGF0YSkKKwkJCXZhbGlkID0gKHUzMikoZGF0YSA8PCAyNCk7CisJCWVsc2UKIAkJCXZhbGlkID0gZGF0YTsKIAogCQlpZiAod3JpdGVfZWVwcm9tKHNwLCAoZWVwcm9tLT5vZmZzZXQgKyBjbnQpLCB2YWxpZCwgMCkpIHsKIAkJCURCR19QUklOVChFUlJfREJHLAotCQkJCSAgIkVUSFRPT0xfV1JJVEVfRUVQUk9NIEVycjogQ2Fubm90ICIpOwotCQkJREJHX1BSSU5UKEVSUl9EQkcsCi0JCQkJICAid3JpdGUgaW50byB0aGUgc3BlY2lmaWVkIG9mZnNldFxuIik7CisJCQkJICAiRVRIVE9PTF9XUklURV9FRVBST00gRXJyOiAiCisJCQkJICAiQ2Fubm90IHdyaXRlIGludG8gdGhlIHNwZWNpZmllZCBvZmZzZXRcbiIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAkJY250Kys7CkBAIC01OTA2LDcgKzU5MjUsNyBAQAogICogMCBvbiBzdWNjZXNzLgogICovCiAKLXN0YXRpYyBpbnQgczJpb19yZWdpc3Rlcl90ZXN0KHN0cnVjdCBzMmlvX25pYyAqIHNwLCB1aW50NjRfdCAqIGRhdGEpCitzdGF0aWMgaW50IHMyaW9fcmVnaXN0ZXJfdGVzdChzdHJ1Y3QgczJpb19uaWMgKnNwLCB1aW50NjRfdCAqZGF0YSkKIHsKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAl1NjQgdmFsNjQgPSAwLCBleHBfdmFsOwpAQCAtNTkxNSwxMyArNTkzNCwxMyBAQAogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnBpZl9yZF9zd2FwcGVyX2ZiKTsKIAlpZiAodmFsNjQgIT0gMHgxMjM0NTY3ODlhYmNkZWZVTEwpIHsKIAkJZmFpbCA9IDE7Ci0JCURCR19QUklOVChJTkZPX0RCRywgIlJlYWQgVGVzdCBsZXZlbCAxIGZhaWxzXG4iKTsKKwkJREJHX1BSSU5UKElORk9fREJHLCAiUmVhZCBUZXN0IGxldmVsICVkIGZhaWxzXG4iLCAxKTsKIAl9CiAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT5ybWFjX3BhdXNlX2NmZyk7CiAJaWYgKHZhbDY0ICE9IDB4YzAwMGZmZmYwMDAwMDAwMFVMTCkgewogCQlmYWlsID0gMTsKLQkJREJHX1BSSU5UKElORk9fREJHLCAiUmVhZCBUZXN0IGxldmVsIDIgZmFpbHNcbiIpOworCQlEQkdfUFJJTlQoSU5GT19EQkcsICJSZWFkIFRlc3QgbGV2ZWwgJWQgZmFpbHNcbiIsIDIpOwogCX0KIAogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnJ4X3F1ZXVlX2NmZyk7CkBAIC01OTMxLDEzICs1OTUwLDEzIEBACiAJCWV4cF92YWwgPSAweDA4MDgwODA4MDgwODA4MDhVTEw7CiAJaWYgKHZhbDY0ICE9IGV4cF92YWwpIHsKIAkJZmFpbCA9IDE7Ci0JCURCR19QUklOVChJTkZPX0RCRywgIlJlYWQgVGVzdCBsZXZlbCAzIGZhaWxzXG4iKTsKKwkJREJHX1BSSU5UKElORk9fREJHLCAiUmVhZCBUZXN0IGxldmVsICVkIGZhaWxzXG4iLCAzKTsKIAl9CiAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT54Z3hzX2VmaWZvX2NmZyk7CiAJaWYgKHZhbDY0ICE9IDB4MDAwMDAwMDAxOTIzMTQxRVVMTCkgewogCQlmYWlsID0gMTsKLQkJREJHX1BSSU5UKElORk9fREJHLCAiUmVhZCBUZXN0IGxldmVsIDQgZmFpbHNcbiIpOworCQlEQkdfUFJJTlQoSU5GT19EQkcsICJSZWFkIFRlc3QgbGV2ZWwgJWQgZmFpbHNcbiIsIDQpOwogCX0KIAogCXZhbDY0ID0gMHg1QTVBNUE1QTVBNUE1QTVBVUxMOwpAQCAtNTk0NSw3ICs1OTY0LDcgQEAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT54bXNpX2RhdGEpOwogCWlmICh2YWw2NCAhPSAweDVBNUE1QTVBNUE1QTVBNUFVTEwpIHsKIAkJZmFpbCA9IDE7Ci0JCURCR19QUklOVChFUlJfREJHLCAiV3JpdGUgVGVzdCBsZXZlbCAxIGZhaWxzXG4iKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJXcml0ZSBUZXN0IGxldmVsICVkIGZhaWxzXG4iLCAxKTsKIAl9CiAKIAl2YWw2NCA9IDB4QTVBNUE1QTVBNUE1QTVBNVVMTDsKQEAgLTU5NTMsNyArNTk3Miw3IEBACiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+eG1zaV9kYXRhKTsKIAlpZiAodmFsNjQgIT0gMHhBNUE1QTVBNUE1QTVBNUE1VUxMKSB7CiAJCWZhaWwgPSAxOwotCQlEQkdfUFJJTlQoRVJSX0RCRywgIldyaXRlIFRlc3QgbGV2ZWwgMiBmYWlsc1xuIik7CisJCURCR19QUklOVChFUlJfREJHLCAiV3JpdGUgVGVzdCBsZXZlbCAlZCBmYWlsc1xuIiwgMik7CiAJfQogCiAJKmRhdGEgPSBmYWlsOwpAQCAtNTk3Myw3ICs1OTkyLDcgQEAKICAqIDAgb24gc3VjY2Vzcy4KICAqLwogCi1zdGF0aWMgaW50IHMyaW9fZWVwcm9tX3Rlc3Qoc3RydWN0IHMyaW9fbmljICogc3AsIHVpbnQ2NF90ICogZGF0YSkKK3N0YXRpYyBpbnQgczJpb19lZXByb21fdGVzdChzdHJ1Y3QgczJpb19uaWMgKnNwLCB1aW50NjRfdCAqZGF0YSkKIHsKIAlpbnQgZmFpbCA9IDA7CiAJdTY0IHJldF9kYXRhLCBvcmdfNEYwLCBvcmdfN0YwOwpAQCAtNjAwMiw5ICs2MDIxLDkgQEAKIAogCWlmIChyZXRfZGF0YSAhPSAweDAxMjM0NSkgewogCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBlZXByb20gdGVzdCBlcnJvciBhdCBvZmZzZXQgMHg0RjAuICIKLQkJCSJEYXRhIHdyaXR0ZW4gJWxseCBEYXRhIHJlYWQgJWxseFxuIiwKLQkJCWRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykweDEyMzQ1LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXRfZGF0YSk7CisJCQkgICJEYXRhIHdyaXR0ZW4gJWxseCBEYXRhIHJlYWQgJWxseFxuIiwKKwkJCSAgZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKTB4MTIzNDUsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpcmV0X2RhdGEpOwogCQlmYWlsID0gMTsKIAl9CiAKQEAgLTYwMjQsOSArNjA0Myw5IEBACiAKIAlpZiAocmV0X2RhdGEgIT0gMHgwMTIzNDUpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogZWVwcm9tIHRlc3QgZXJyb3IgYXQgb2Zmc2V0IDB4N0YwLiAiCi0JCQkiRGF0YSB3cml0dGVuICVsbHggRGF0YSByZWFkICVsbHhcbiIsCi0JCQlkZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpMHgxMjM0NSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmV0X2RhdGEpOworCQkJICAiRGF0YSB3cml0dGVuICVsbHggRGF0YSByZWFkICVsbHhcbiIsCisJCQkgIGRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykweDEyMzQ1LAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKXJldF9kYXRhKTsKIAkJZmFpbCA9IDE7CiAJfQogCkBAIC02MDc1LDcgKzYwOTQsNyBAQAogICogMCBvbiBzdWNjZXNzIGFuZCAtMSBvbiBmYWlsdXJlLgogICovCiAKLXN0YXRpYyBpbnQgczJpb19iaXN0X3Rlc3Qoc3RydWN0IHMyaW9fbmljICogc3AsIHVpbnQ2NF90ICogZGF0YSkKK3N0YXRpYyBpbnQgczJpb19iaXN0X3Rlc3Qoc3RydWN0IHMyaW9fbmljICpzcCwgdWludDY0X3QgKmRhdGEpCiB7CiAJdTggYmlzdCA9IDA7CiAJaW50IGNudCA9IDAsIHJldCA9IC0xOwpAQCAtNjExMSwxMyArNjEzMCwxMyBAQAogICogMCBvbiBzdWNjZXNzLgogICovCiAKLXN0YXRpYyBpbnQgczJpb19saW5rX3Rlc3Qoc3RydWN0IHMyaW9fbmljICogc3AsIHVpbnQ2NF90ICogZGF0YSkKK3N0YXRpYyBpbnQgczJpb19saW5rX3Rlc3Qoc3RydWN0IHMyaW9fbmljICpzcCwgdWludDY0X3QgKmRhdGEpCiB7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CiAJdTY0IHZhbDY0OwogCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9zdGF0dXMpOwotCWlmKCEoTElOS19JU19VUCh2YWw2NCkpKQorCWlmICghKExJTktfSVNfVVAodmFsNjQpKSkKIAkJKmRhdGEgPSAxOwogCWVsc2UKIAkJKmRhdGEgPSAwOwpAQCAtNjEzOCw3ICs2MTU3LDcgQEAKICAqICAwIG9uIHN1Y2Nlc3MuCiAgKi8KIAotc3RhdGljIGludCBzMmlvX3JsZHJhbV90ZXN0KHN0cnVjdCBzMmlvX25pYyAqIHNwLCB1aW50NjRfdCAqIGRhdGEpCitzdGF0aWMgaW50IHMyaW9fcmxkcmFtX3Rlc3Qoc3RydWN0IHMyaW9fbmljICpzcCwgdWludDY0X3QgKmRhdGEpCiB7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CiAJdTY0IHZhbDY0OwpAQCAtNjE2MSwyOCArNjE4MCwyNiBAQAogCiAJd2hpbGUgKGl0ZXJhdGlvbiA8IDIpIHsKIAkJdmFsNjQgPSAweDU1NTU1NTU1YWFhYTAwMDBVTEw7Ci0JCWlmIChpdGVyYXRpb24gPT0gMSkgeworCQlpZiAoaXRlcmF0aW9uID09IDEpCiAJCQl2YWw2NCBePSAweEZGRkZGRkZGRkZGRjAwMDBVTEw7Ci0JCX0KIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWNfcmxkcmFtX3Rlc3RfZDApOwogCiAJCXZhbDY0ID0gMHhhYWFhNWE1NTU1NTUwMDAwVUxMOwotCQlpZiAoaXRlcmF0aW9uID09IDEpIHsKKwkJaWYgKGl0ZXJhdGlvbiA9PSAxKQogCQkJdmFsNjQgXj0gMHhGRkZGRkZGRkZGRkYwMDAwVUxMOwotCQl9CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPm1jX3JsZHJhbV90ZXN0X2QxKTsKIAogCQl2YWw2NCA9IDB4NTVhYWFhYWFhYTVhMDAwMFVMTDsKLQkJaWYgKGl0ZXJhdGlvbiA9PSAxKSB7CisJCWlmIChpdGVyYXRpb24gPT0gMSkKIAkJCXZhbDY0IF49IDB4RkZGRkZGRkZGRkZGMDAwMFVMTDsKLQkJfQogCQl3cml0ZXEodmFsNjQsICZiYXIwLT5tY19ybGRyYW1fdGVzdF9kMik7CiAKIAkJdmFsNjQgPSAodTY0KSAoMHgwMDAwMDAzZmZmZmUwMTAwVUxMKTsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWNfcmxkcmFtX3Rlc3RfYWRkKTsKIAotCQl2YWw2NCA9IE1DX1JMRFJBTV9URVNUX01PREUgfCBNQ19STERSQU1fVEVTVF9XUklURSB8Ci0JCSAgICAJTUNfUkxEUkFNX1RFU1RfR087CisJCXZhbDY0ID0gTUNfUkxEUkFNX1RFU1RfTU9ERSB8CisJCQlNQ19STERSQU1fVEVTVF9XUklURSB8CisJCQlNQ19STERSQU1fVEVTVF9HTzsKIAkJU1BFQ0lBTF9SRUdfV1JJVEUodmFsNjQsICZiYXIwLT5tY19ybGRyYW1fdGVzdF9jdHJsLCBMRik7CiAKIAkJZm9yIChjbnQgPSAwOyBjbnQgPCA1OyBjbnQrKykgewpAQCAtNjI0MCw3ICs2MjU3LDcgQEAKIAogc3RhdGljIHZvaWQgczJpb19ldGh0b29sX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aHRlc3QsCi0JCQkgICAgICB1aW50NjRfdCAqIGRhdGEpCisJCQkgICAgICB1aW50NjRfdCAqZGF0YSkKIHsKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgb3JpZ19zdGF0ZSA9IG5ldGlmX3J1bm5pbmcoc3AtPmRldik7CkBAIC02MjczLDggKzYyOTAsNyBAQAogCX0gZWxzZSB7CiAJCS8qIE9ubGluZSBUZXN0cy4gKi8KIAkJaWYgKCFvcmlnX3N0YXRlKSB7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywKLQkJCQkgICIlczogaXMgbm90IHVwLCBjYW5ub3QgcnVuIHRlc3RcbiIsCisJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBpcyBub3QgdXAsIGNhbm5vdCBydW4gdGVzdFxuIiwKIAkJCQkgIGRldi0+bmFtZSk7CiAJCQlkYXRhWzBdID0gLTE7CiAJCQlkYXRhWzFdID0gLTE7CkBAIC02Mjk1LDI5MSArNjMxMSwyOTIgQEAKIAogc3RhdGljIHZvaWQgczJpb19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBldGh0b29sX3N0YXRzICplc3RhdHMsCi0JCQkJICAgdTY0ICogdG1wX3N0YXRzKQorCQkJCSAgIHU2NCAqdG1wX3N0YXRzKQogewogCWludCBpID0gMCwgazsKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc3RhdF9ibG9jayAqc3RhdF9pbmZvID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm87CisJc3RydWN0IHN0YXRfYmxvY2sgKnN0YXRzID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm87CisJc3RydWN0IHN3U3RhdCAqc3dzdGF0cyA9ICZzdGF0cy0+c3dfc3RhdDsKKwlzdHJ1Y3QgeHBha1N0YXQgKnhzdGF0cyA9ICZzdGF0cy0+eHBha19zdGF0OwogCiAJczJpb191cGR0X3N0YXRzKHNwKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX2ZybXNfb2Zsb3cpIDw8IDMyICB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19mcm1zKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19mcm1zX29mbG93KSA8PCAzMiAgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX2RhdGFfb2N0ZXRzX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19kYXRhX29jdGV0cyk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnRtYWNfZHJvcF9mcm1zKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19kYXRhX29jdGV0c19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19kYXRhX29jdGV0cyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+dG1hY19kcm9wX2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfbWNzdF9mcm1zX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19tY3N0X2ZybXMpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX21jc3RfZnJtc19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19tY3N0X2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfYmNzdF9mcm1zX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19iY3N0X2ZybXMpOwotCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT50bWFjX3BhdXNlX2N0cmxfZnJtcyk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0KLSAgICAgICAgICAgICAgICAodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY190dGxfb2N0ZXRzX29mbG93KSA8PCAzMiB8Ci0gICAgICAgICAgICAgICAgbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX3R0bF9vY3RldHMpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX2Jjc3RfZnJtc19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19iY3N0X2ZybXMpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnRtYWNfcGF1c2VfY3RybF9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0gICAgICAgICAgICAgICAgKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfdWNzdF9mcm1zX29mbG93KSA8PCAzMiB8Ci0gICAgICAgICAgICAgICAgbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX3Vjc3RfZnJtcyk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfdHRsX29jdGV0c19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+dG1hY190dGxfb2N0ZXRzKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0gICAgICAgICAgICAgICAgKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfbnVjc3RfZnJtc19vZmxvdykgPDwgMzIgfAotICAgICAgICAgICAgICAgIGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19udWNzdF9mcm1zKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+dG1hY191Y3N0X2ZybXNfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfdWNzdF9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX2FueV9lcnJfZnJtc19vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfYW55X2Vycl9mcm1zKTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnRtYWNfdHRsX2xlc3NfZmJfb2N0ZXRzKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+dG1hY192bGRfaXBfb2N0ZXRzKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19udWNzdF9mcm1zX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX251Y3N0X2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfdmxkX2lwX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY192bGRfaXApOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX2FueV9lcnJfZnJtc19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19hbnlfZXJyX2ZybXMpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnRtYWNfdHRsX2xlc3NfZmJfb2N0ZXRzKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT50bWFjX3ZsZF9pcF9vY3RldHMpOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfZHJvcF9pcF9vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfZHJvcF9pcCk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfdmxkX2lwX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX3ZsZF9pcCk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19pY21wX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19pY21wKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19kcm9wX2lwX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX2Ryb3BfaXApOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfcnN0X3RjcF9vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfcnN0X3RjcCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnRtYWNfdGNwKTsKLQl0bXBfc3RhdHNbaSsrXSA9ICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX3VkcF9vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfdWRwKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19pY21wX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX2ljbXApOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdmxkX2ZybXNfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3ZsZF9mcm1zKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19yc3RfdGNwX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX3JzdF90Y3ApOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnRtYWNfdGNwKTsKKwl0bXBfc3RhdHNbaSsrXSA9ICh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfdWRwX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX3VkcCk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kYXRhX29jdGV0c19vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZGF0YV9vY3RldHMpOwotCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Zjc19lcnJfZnJtcyk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZHJvcF9mcm1zKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+cm1hY192bGRfZnJtc19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+cm1hY192bGRfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY192bGRfbWNzdF9mcm1zX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY192bGRfbWNzdF9mcm1zKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19kYXRhX29jdGV0c19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19kYXRhX29jdGV0cyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19mY3NfZXJyX2ZybXMpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfZHJvcF9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3ZsZF9iY3N0X2ZybXNfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3ZsZF9iY3N0X2ZybXMpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2luX3JuZ19sZW5fZXJyX2ZybXMpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX291dF9ybmdfbGVuX2Vycl9mcm1zKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19sb25nX2ZybXMpOwotCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3BhdXNlX2N0cmxfZnJtcyk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdW5zdXBfY3RybF9mcm1zKTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPQotICAgICAgICAgICAgICAgICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF9vY3RldHNfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF9vY3RldHMpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9Ci0gICAgICAgICAgICAgICAgKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfYWNjZXB0ZWRfdWNzdF9mcm1zX29mbG93KQotCQk8PCAzMiB8IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19hY2NlcHRlZF91Y3N0X2ZybXMpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX3ZsZF9tY3N0X2ZybXNfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfdmxkX21jc3RfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQotICAgICAgICAgICAgICAgICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2FjY2VwdGVkX251Y3N0X2ZybXNfb2Zsb3cpCi0gICAgICAgICAgICAgICAgIDw8IDMyIHwgbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2FjY2VwdGVkX251Y3N0X2ZybXMpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX3ZsZF9iY3N0X2ZybXNfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfdmxkX2Jjc3RfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19pbl9ybmdfbGVuX2Vycl9mcm1zKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX291dF9ybmdfbGVuX2Vycl9mcm1zKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX2xvbmdfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19wYXVzZV9jdHJsX2ZybXMpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfdW5zdXBfY3RybF9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Rpc2NhcmRlZF9mcm1zX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kaXNjYXJkZWRfZnJtcyk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0KLSAgICAgICAgICAgICAgICAodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kcm9wX2V2ZW50c19vZmxvdykKLSAgICAgICAgICAgICAgICAgPDwgMzIgfCBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZHJvcF9ldmVudHMpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfbGVzc19mYl9vY3RldHMpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfZnJtcyk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfdHRsX29jdGV0c19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+cm1hY190dGxfb2N0ZXRzKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3VzaXplZF9mcm1zX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY191c2l6ZWRfZnJtcyk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfYWNjZXB0ZWRfdWNzdF9mcm1zX29mbG93KSA8PCAzMgorCQl8IGxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2FjY2VwdGVkX3Vjc3RfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19vc2l6ZWRfZnJtc19vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfb3NpemVkX2ZybXMpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2FjY2VwdGVkX251Y3N0X2ZybXNfb2Zsb3cpCisJCTw8IDMyIHwgbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfYWNjZXB0ZWRfbnVjc3RfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mcmFnX2ZybXNfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ZyYWdfZnJtcyk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfZGlzY2FyZGVkX2ZybXNfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfZGlzY2FyZGVkX2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfamFiYmVyX2ZybXNfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2phYmJlcl9mcm1zKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfNjRfZnJtcyk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF82NV8xMjdfZnJtcyk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF8xMjhfMjU1X2ZybXMpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfMjU2XzUxMV9mcm1zKTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzUxMl8xMDIzX2ZybXMpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfMTAyNF8xNTE4X2ZybXMpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2Ryb3BfZXZlbnRzX29mbG93KQorCQk8PCAzMiB8IGxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2Ryb3BfZXZlbnRzKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX3R0bF9sZXNzX2ZiX29jdGV0cyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY190dGxfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19pcF9vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaXApOwotCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2lwX29jdGV0cyk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaGRyX2Vycl9pcCk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfdXNpemVkX2ZybXNfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfdXNpemVkX2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZHJvcF9pcF9vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZHJvcF9pcCk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfb3NpemVkX2ZybXNfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfb3NpemVkX2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaWNtcF9vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaWNtcCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdGNwKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19mcmFnX2ZybXNfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfZnJhZ19mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3VkcF9vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdWRwKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19qYWJiZXJfZnJtc19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19qYWJiZXJfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY190dGxfNjRfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY190dGxfNjVfMTI3X2ZybXMpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfdHRsXzEyOF8yNTVfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY190dGxfMjU2XzUxMV9mcm1zKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX3R0bF81MTJfMTAyM19mcm1zKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX3R0bF8xMDI0XzE1MThfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19lcnJfZHJwX3VkcF9vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZXJyX2RycF91ZHApOwotCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3hnbWlpX2Vycl9zeW0pOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mcm1zX3EwKTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnJtc19xMSk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ZybXNfcTIpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mcm1zX3EzKTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnJtc19xNCk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ZybXNfcTUpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mcm1zX3E2KTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnJtc19xNyk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Z1bGxfcTApOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mdWxsX3ExKTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnVsbF9xMik7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Z1bGxfcTMpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mdWxsX3E0KTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnVsbF9xNSk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Z1bGxfcTYpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mdWxsX3E3KTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19pcF9vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19pcCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19pcF9vY3RldHMpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfaGRyX2Vycl9pcCk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19wYXVzZV9jbnRfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3BhdXNlX2NudCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfeGdtaWlfZGF0YV9lcnJfY250KTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfeGdtaWlfY3RybF9lcnJfY250KTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19kcm9wX2lwX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2Ryb3BfaXApOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfYWNjZXB0ZWRfaXBfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2FjY2VwdGVkX2lwKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19lcnJfdGNwKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cmRfcmVxX2NudCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPm5ld19yZF9yZXFfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+bmV3X3JkX3JlcV9ydHJ5X2NudCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJkX3J0cnlfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+d3JfcnRyeV9yZF9hY2tfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+d3JfcmVxX2NudCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPm5ld193cl9yZXFfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+bmV3X3dyX3JlcV9ydHJ5X2NudCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPndyX3J0cnlfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+d3JfZGlzY19jbnQpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5yZF9ydHJ5X3dyX2Fja19jbnQpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT50eHBfd3JfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dHhkX3JkX2NudCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnR4ZF93cl9jbnQpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5yeGRfcmRfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cnhkX3dyX2NudCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnR4Zl9yZF9jbnQpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5yeGZfd3JfY250KTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19pY21wX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2ljbXApOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfdGNwKTsKKwl0bXBfc3RhdHNbaSsrXSA9CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfdWRwX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX3VkcCk7CisJdG1wX3N0YXRzW2krK10gPQorCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2Vycl9kcnBfdWRwX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2Vycl9kcnBfdWRwKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX3hnbWlpX2Vycl9zeW0pOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfZnJtc19xMCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19mcm1zX3ExKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX2ZybXNfcTIpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfZnJtc19xMyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19mcm1zX3E0KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX2ZybXNfcTUpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfZnJtc19xNik7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19mcm1zX3E3KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRzLT5ybWFjX2Z1bGxfcTApOworCXRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdHMtPnJtYWNfZnVsbF9xMSk7CisJdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0cy0+cm1hY19mdWxsX3EyKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRzLT5ybWFjX2Z1bGxfcTMpOworCXRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdHMtPnJtYWNfZnVsbF9xNCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0cy0+cm1hY19mdWxsX3E1KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRzLT5ybWFjX2Z1bGxfcTYpOworCXRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdHMtPnJtYWNfZnVsbF9xNyk7CisJdG1wX3N0YXRzW2krK10gPQorCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX3BhdXNlX2NudF9vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19wYXVzZV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfeGdtaWlfZGF0YV9lcnJfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX3hnbWlpX2N0cmxfZXJyX2NudCk7CisJdG1wX3N0YXRzW2krK10gPQorCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2FjY2VwdGVkX2lwX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2FjY2VwdGVkX2lwKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2Vycl90Y3ApOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJkX3JlcV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPm5ld19yZF9yZXFfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5uZXdfcmRfcmVxX3J0cnlfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5yZF9ydHJ5X2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+d3JfcnRyeV9yZF9hY2tfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT53cl9yZXFfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5uZXdfd3JfcmVxX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+bmV3X3dyX3JlcV9ydHJ5X2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+d3JfcnRyeV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPndyX2Rpc2NfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5yZF9ydHJ5X3dyX2Fja19jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnR4cF93cl9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnR4ZF9yZF9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnR4ZF93cl9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJ4ZF9yZF9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJ4ZF93cl9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnR4Zl9yZF9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJ4Zl93cl9jbnQpOwogCiAJLyogRW5oYW5jZWQgc3RhdGlzdGljcyBleGlzdCBvbmx5IGZvciBIZXJjdWxlcyAqLwotCWlmKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB7CisJaWYgKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB7CiAJCXRtcF9zdGF0c1tpKytdID0KLQkJCQlsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzE1MTlfNDA5NV9mcm1zKTsKKwkJCWxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX3R0bF8xNTE5XzQwOTVfZnJtcyk7CiAJCXRtcF9zdGF0c1tpKytdID0KLQkJCQlsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzQwOTZfODE5MV9mcm1zKTsKKwkJCWxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX3R0bF80MDk2XzgxOTFfZnJtcyk7CiAJCXRtcF9zdGF0c1tpKytdID0KLQkJCQlsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzgxOTJfbWF4X2ZybXMpOwotCQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfZ3RfbWF4X2ZybXMpOwotCQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19vc2l6ZWRfYWx0X2ZybXMpOwotCQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19qYWJiZXJfYWx0X2ZybXMpOwotCQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19ndF9tYXhfYWx0X2ZybXMpOwotCQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY192bGFuX2ZybXMpOwotCQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19sZW5fZGlzY2FyZCk7Ci0JCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Zjc19kaXNjYXJkKTsKLQkJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfcGZfZGlzY2FyZCk7Ci0JCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2RhX2Rpc2NhcmQpOwotCQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19yZWRfZGlzY2FyZCk7Ci0JCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3J0c19kaXNjYXJkKTsKLQkJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaW5nbV9mdWxsX2Rpc2NhcmQpOwotCQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+bGlua19mYXVsdF9jbnQpOworCQkJbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfdHRsXzgxOTJfbWF4X2ZybXMpOworCQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX3R0bF9ndF9tYXhfZnJtcyk7CisJCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfb3NpemVkX2FsdF9mcm1zKTsKKwkJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19qYWJiZXJfYWx0X2ZybXMpOworCQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX2d0X21heF9hbHRfZnJtcyk7CisJCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfdmxhbl9mcm1zKTsKKwkJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19sZW5fZGlzY2FyZCk7CisJCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfZmNzX2Rpc2NhcmQpOworCQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX3BmX2Rpc2NhcmQpOworCQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2RhX2Rpc2NhcmQpOworCQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX3JlZF9kaXNjYXJkKTsKKwkJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19ydHNfZGlzY2FyZCk7CisJCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfaW5nbV9mdWxsX2Rpc2NhcmQpOworCQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5saW5rX2ZhdWx0X2NudCk7CiAJfQogCiAJdG1wX3N0YXRzW2krK10gPSAwOwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnNpbmdsZV9lY2NfZXJyczsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5kb3VibGVfZWNjX2VycnM7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucGFyaXR5X2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuc2VyaW91c19lcnJfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnNvZnRfcmVzZXRfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LmZpZm9fZnVsbF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5zaW5nbGVfZWNjX2VycnM7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5kb3VibGVfZWNjX2VycnM7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5wYXJpdHlfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnNlcmlvdXNfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnNvZnRfcmVzZXRfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+Zmlmb19mdWxsX2NudDsKIAlmb3IgKGsgPSAwOyBrIDwgTUFYX1JYX1JJTkdTOyBrKyspCi0JCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnJpbmdfZnVsbF9jbnRba107Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV90cmFuc2NlaXZlcl90ZW1wX2hpZ2g7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV90cmFuc2NlaXZlcl90ZW1wX2xvdzsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX2JpYXNfY3VycmVudF9oaWdoOwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fbGFzZXJfYmlhc19jdXJyZW50X2xvdzsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoOwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fbGFzZXJfb3V0cHV0X3Bvd2VyX2xvdzsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fdHJhbnNjZWl2ZXJfdGVtcF9oaWdoOwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl90cmFuc2NlaXZlcl90ZW1wX2xvdzsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fbGFzZXJfYmlhc19jdXJyZW50X2hpZ2g7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX2xhc2VyX2JpYXNfY3VycmVudF9sb3c7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoOwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl9sYXNlcl9vdXRwdXRfcG93ZXJfbG93OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LmNsdWJiZWRfZnJtc19jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuc2VuZGluZ19ib3RoOwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0Lm91dG9mX3NlcXVlbmNlX3BrdHM7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuZmx1c2hfbWF4X3BrdHM7Ci0JaWYgKHN0YXRfaW5mby0+c3dfc3RhdC5udW1fYWdncmVnYXRpb25zKSB7Ci0JCXU2NCB0bXAgPSBzdGF0X2luZm8tPnN3X3N0YXQuc3VtX2F2Z19wa3RzX2FnZ3JlZ2F0ZWQ7CisJCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+cmluZ19mdWxsX2NudFtrXTsKKwl0bXBfc3RhdHNbaSsrXSA9IHhzdGF0cy0+YWxhcm1fdHJhbnNjZWl2ZXJfdGVtcF9oaWdoOworCXRtcF9zdGF0c1tpKytdID0geHN0YXRzLT5hbGFybV90cmFuc2NlaXZlcl90ZW1wX2xvdzsKKwl0bXBfc3RhdHNbaSsrXSA9IHhzdGF0cy0+YWxhcm1fbGFzZXJfYmlhc19jdXJyZW50X2hpZ2g7CisJdG1wX3N0YXRzW2krK10gPSB4c3RhdHMtPmFsYXJtX2xhc2VyX2JpYXNfY3VycmVudF9sb3c7CisJdG1wX3N0YXRzW2krK10gPSB4c3RhdHMtPmFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoOworCXRtcF9zdGF0c1tpKytdID0geHN0YXRzLT5hbGFybV9sYXNlcl9vdXRwdXRfcG93ZXJfbG93OworCXRtcF9zdGF0c1tpKytdID0geHN0YXRzLT53YXJuX3RyYW5zY2VpdmVyX3RlbXBfaGlnaDsKKwl0bXBfc3RhdHNbaSsrXSA9IHhzdGF0cy0+d2Fybl90cmFuc2NlaXZlcl90ZW1wX2xvdzsKKwl0bXBfc3RhdHNbaSsrXSA9IHhzdGF0cy0+d2Fybl9sYXNlcl9iaWFzX2N1cnJlbnRfaGlnaDsKKwl0bXBfc3RhdHNbaSsrXSA9IHhzdGF0cy0+d2Fybl9sYXNlcl9iaWFzX2N1cnJlbnRfbG93OworCXRtcF9zdGF0c1tpKytdID0geHN0YXRzLT53YXJuX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoOworCXRtcF9zdGF0c1tpKytdID0geHN0YXRzLT53YXJuX2xhc2VyX291dHB1dF9wb3dlcl9sb3c7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5jbHViYmVkX2ZybXNfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+c2VuZGluZ19ib3RoOworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+b3V0b2Zfc2VxdWVuY2VfcGt0czsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPmZsdXNoX21heF9wa3RzOworCWlmIChzd3N0YXRzLT5udW1fYWdncmVnYXRpb25zKSB7CisJCXU2NCB0bXAgPSBzd3N0YXRzLT5zdW1fYXZnX3BrdHNfYWdncmVnYXRlZDsKIAkJaW50IGNvdW50ID0gMDsKIAkJLyoKIAkJICogU2luY2UgNjQtYml0IGRpdmlkZSBkb2VzIG5vdCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMsCiAJCSAqIGRvIHJlcGVhdGVkIHN1YnRyYWN0aW9uLgogCQkgKi8KLQkJd2hpbGUgKHRtcCA+PSBzdGF0X2luZm8tPnN3X3N0YXQubnVtX2FnZ3JlZ2F0aW9ucykgewotCQkJdG1wIC09IHN0YXRfaW5mby0+c3dfc3RhdC5udW1fYWdncmVnYXRpb25zOworCQl3aGlsZSAodG1wID49IHN3c3RhdHMtPm51bV9hZ2dyZWdhdGlvbnMpIHsKKwkJCXRtcCAtPSBzd3N0YXRzLT5udW1fYWdncmVnYXRpb25zOwogCQkJY291bnQrKzsKIAkJfQogCQl0bXBfc3RhdHNbaSsrXSA9IGNvdW50OwotCX0KLQllbHNlCisJfSBlbHNlCiAJCXRtcF9zdGF0c1tpKytdID0gMDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NfZmFpbF9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucGNpX21hcF9mYWlsX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC53YXRjaGRvZ190aW1lcl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQubWVtX2FsbG9jYXRlZDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQubGlua191cF9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQubGlua19kb3duX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5saW5rX3VwX3RpbWU7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQubGlua19kb3duX3RpbWU7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5tZW1fYWxsb2NfZmFpbF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5wY2lfbWFwX2ZhaWxfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+d2F0Y2hkb2dfdGltZXJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+bWVtX2FsbG9jYXRlZDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPm1lbV9mcmVlZDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPmxpbmtfdXBfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+bGlua19kb3duX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPmxpbmtfdXBfdGltZTsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPmxpbmtfZG93bl90aW1lOwogCi0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQudHhfYnVmX2Fib3J0X2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC50eF9kZXNjX2Fib3J0X2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC50eF9wYXJpdHlfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC50eF9saW5rX2xvc3NfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnR4X2xpc3RfcHJvY19lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+dHhfYnVmX2Fib3J0X2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnR4X2Rlc2NfYWJvcnRfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+dHhfcGFyaXR5X2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT50eF9saW5rX2xvc3NfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+dHhfbGlzdF9wcm9jX2Vycl9jbnQ7CiAKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF9wYXJpdHlfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF9hYm9ydF9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucnhfcGFyaXR5X2Fib3J0X2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF9yZGFfZmFpbF9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucnhfdW5rbl9wcm90X2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF9mY3NfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF9idWZfc2l6ZV9lcnJfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnJ4X3J4ZF9jb3JydXB0X2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF91bmtuX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQudGRhX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucGZjX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucGNjX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQudHRpX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQudHBhX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuc21fZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5sc29fZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5tYWNfdG1hY19lcnJfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0Lm1hY19ybWFjX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQueGd4c190eGd4c19lcnJfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnhneHNfcnhneHNfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yY19lcnJfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnByY19wY2l4X2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucnBhX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucmRhX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucnRpX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQubWNfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnJ4X3Bhcml0eV9lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+cnhfYWJvcnRfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+cnhfcGFyaXR5X2Fib3J0X2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnJ4X3JkYV9mYWlsX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnJ4X3Vua25fcHJvdF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5yeF9mY3NfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnJ4X2J1Zl9zaXplX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5yeF9yeGRfY29ycnVwdF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5yeF91bmtuX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT50ZGFfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnBmY19lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+cGNjX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT50dGlfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnRwYV9lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+c21fZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPmxzb19lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+bWFjX3RtYWNfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPm1hY19ybWFjX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT54Z3hzX3R4Z3hzX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT54Z3hzX3J4Z3hzX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5yY19lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+cHJjX3BjaXhfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnJwYV9lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+cmRhX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5ydGlfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPm1jX2Vycl9jbnQ7CiB9CiAKIHN0YXRpYyBpbnQgczJpb19ldGh0b29sX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiAoWEVOQV9SRUdfU1BBQ0UpOworCXJldHVybiBYRU5BX1JFR19TUEFDRTsKIH0KIAogCi1zdGF0aWMgdTMyIHMyaW9fZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKK3N0YXRpYyB1MzIgczJpb19ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlyZXR1cm4gKHNwLT5yeF9jc3VtKTsKKwlyZXR1cm4gc3AtPnJ4X2NzdW07CiB9CiAKIHN0YXRpYyBpbnQgczJpb19ldGh0b29sX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQpAQCAtNjU5Niw3ICs2NjEzLDcgQEAKIAogc3RhdGljIGludCBzMmlvX2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIChYRU5BX0VFUFJPTV9TUEFDRSk7CisJcmV0dXJuIFhFTkFfRUVQUk9NX1NQQUNFOwogfQogCiBzdGF0aWMgaW50IHMyaW9fZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCkBAIC02NjA3LDcgKzY2MjQsNyBAQAogCWNhc2UgRVRIX1NTX1RFU1Q6CiAJCXJldHVybiBTMklPX1RFU1RfTEVOOwogCWNhc2UgRVRIX1NTX1NUQVRTOgotCQlzd2l0Y2goc3AtPmRldmljZV90eXBlKSB7CisJCXN3aXRjaCAoc3AtPmRldmljZV90eXBlKSB7CiAJCWNhc2UgWEZSQU1FX0lfREVWSUNFOgogCQkJcmV0dXJuIFhGUkFNRV9JX1NUQVRfTEVOOwogCQljYXNlIFhGUkFNRV9JSV9ERVZJQ0U6CkBAIC02NjIxLDcgKzY2MzgsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBzMmlvX2V0aHRvb2xfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHUzMiBzdHJpbmdzZXQsIHU4ICogZGF0YSkKKwkJCQkgICAgIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKQogewogCWludCBzdGF0X3NpemUgPSAwOwogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNjYzMiwxNiArNjY0OSwxNiBAQAogCQlicmVhazsKIAljYXNlIEVUSF9TU19TVEFUUzoKIAkJc3RhdF9zaXplID0gc2l6ZW9mKGV0aHRvb2xfeGVuYV9zdGF0c19rZXlzKTsKLQkJbWVtY3B5KGRhdGEsICZldGh0b29sX3hlbmFfc3RhdHNfa2V5cyxzdGF0X3NpemUpOwotCQlpZihzcC0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lJX0RFVklDRSkgeworCQltZW1jcHkoZGF0YSwgJmV0aHRvb2xfeGVuYV9zdGF0c19rZXlzLCBzdGF0X3NpemUpOworCQlpZiAoc3AtPmRldmljZV90eXBlID09IFhGUkFNRV9JSV9ERVZJQ0UpIHsKIAkJCW1lbWNweShkYXRhICsgc3RhdF9zaXplLAotCQkJCSZldGh0b29sX2VuaGFuY2VkX3N0YXRzX2tleXMsCi0JCQkJc2l6ZW9mKGV0aHRvb2xfZW5oYW5jZWRfc3RhdHNfa2V5cykpOworCQkJICAgICAgICZldGh0b29sX2VuaGFuY2VkX3N0YXRzX2tleXMsCisJCQkgICAgICAgc2l6ZW9mKGV0aHRvb2xfZW5oYW5jZWRfc3RhdHNfa2V5cykpOwogCQkJc3RhdF9zaXplICs9IHNpemVvZihldGh0b29sX2VuaGFuY2VkX3N0YXRzX2tleXMpOwogCQl9CiAKIAkJbWVtY3B5KGRhdGEgKyBzdGF0X3NpemUsICZldGh0b29sX2RyaXZlcl9zdGF0c19rZXlzLAotCQkJc2l6ZW9mKGV0aHRvb2xfZHJpdmVyX3N0YXRzX2tleXMpKTsKKwkJICAgICAgIHNpemVvZihldGh0b29sX2RyaXZlcl9zdGF0c19rZXlzKSk7CiAJfQogfQogCkBAIC02NzMwLDggKzY3NDcsNyBAQAogCWludCByZXQgPSAwOwogCiAJaWYgKChuZXdfbXR1IDwgTUlOX01UVSkgfHwgKG5ld19tdHUgPiBTMklPX0pVTUJPX1NJWkUpKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXM6IE1UVSBzaXplIGlzIGludmFsaWQuXG4iLAotCQkJICBkZXYtPm5hbWUpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBNVFUgc2l6ZSBpcyBpbnZhbGlkLlxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKQEAgLTY3NjQsNyArNjc4MCw4IEBACiAKIHN0YXRpYyB2b2lkIHMyaW9fc2V0X2xpbmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBzMmlvX25pYyAqbmljID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzMmlvX25pYywgc2V0X2xpbmtfdGFzayk7CisJc3RydWN0IHMyaW9fbmljICpuaWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHMyaW9fbmljLAorCQkJCQkgICAgc2V0X2xpbmtfdGFzayk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5pYy0+ZGV2OwogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IG5pYy0+YmFyMDsKIAlyZWdpc3RlciB1NjQgdmFsNjQ7CkBAIC02Nzk3LDcgKzY4MTQsNyBAQAogCQkJCXZhbDY0IHw9IEFEQVBURVJfQ05UTF9FTjsKIAkJCQl3cml0ZXEodmFsNjQsICZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOwogCQkJCWlmIChDQVJEU19XSVRIX0ZBVUxUWV9MSU5LX0lORElDQVRPUlMoCi0JCQkJCW5pYy0+ZGV2aWNlX3R5cGUsIHN1YmlkKSkgeworCQkJCQkgICAgbmljLT5kZXZpY2VfdHlwZSwgc3ViaWQpKSB7CiAJCQkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9fY29udHJvbCk7CiAJCQkJCXZhbDY0IHw9IEdQSU9fQ1RSTF9HUElPXzA7CiAJCQkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPmdwaW9fY29udHJvbCk7CkBAIC02ODA4LDggKzY4MjUsOSBAQAogCQkJCX0KIAkJCQluaWMtPmRldmljZV9lbmFibGVkX29uY2UgPSB0cnVlOwogCQkJfSBlbHNlIHsKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBFcnJvcjogIiwgZGV2LT5uYW1lKTsKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgImRldmljZSBpcyBub3QgUXVpZXNjZW50XG4iKTsKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCQkJICAiJXM6IEVycm9yOiBkZXZpY2UgaXMgbm90IFF1aWVzY2VudFxuIiwKKwkJCQkJICBkZXYtPm5hbWUpOwogCQkJCXMyaW9fc3RvcF9hbGxfdHhfcXVldWUobmljKTsKIAkJCX0KIAkJfQpAQCAtNjgyNyw3ICs2ODQ1LDcgQEAKIAkJfQogCQkvKiB0dXJuIG9mZiBMRUQgKi8KIAkJdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKLQkJdmFsNjQgPSB2YWw2NCAmKH5BREFQVEVSX0xFRF9PTik7CisJCXZhbDY0ID0gdmFsNjQgJiAofkFEQVBURVJfTEVEX09OKTsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKIAkJczJpb19saW5rKG5pYywgTElOS19ET1dOKTsKIAl9CkBAIC02ODM4LDkgKzY4NTYsOSBAQAogfQogCiBzdGF0aWMgaW50IHNldF9yeGRfYnVmZmVyX3BvaW50ZXIoc3RydWN0IHMyaW9fbmljICpzcCwgc3RydWN0IFJ4RF90ICpyeGRwLAotCQkJCXN0cnVjdCBidWZmQWRkICpiYSwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwgdTY0ICp0ZW1wMCwgdTY0ICp0ZW1wMSwKLQkJCQl1NjQgKnRlbXAyLCBpbnQgc2l6ZSkKKwkJCQkgIHN0cnVjdCBidWZmQWRkICpiYSwKKwkJCQkgIHN0cnVjdCBza19idWZmICoqc2tiLCB1NjQgKnRlbXAwLCB1NjQgKnRlbXAxLAorCQkJCSAgdTY0ICp0ZW1wMiwgaW50IHNpemUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNwLT5kZXY7CiAJc3RydWN0IHN3U3RhdCAqc3RhdHMgPSAmc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7CkBAIC02ODU5LDIzICs2ODc3LDIxIEBACiAJCX0gZWxzZSB7CiAJCQkqc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKTsKIAkJCWlmICghKCpza2IpKSB7Ci0JCQkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IE91dCBvZiAiLCBkZXYtPm5hbWUpOwotCQkJCURCR19QUklOVChJTkZPX0RCRywgIm1lbW9yeSB0byBhbGxvY2F0ZSAiKTsKLQkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICIxIGJ1ZiBtb2RlIFNLQnNcbiIpOwotCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LiBcCi0JCQkJCW1lbV9hbGxvY19mYWlsX2NudCsrOworCQkJCURCR19QUklOVChJTkZPX0RCRywKKwkJCQkJICAiJXM6IE91dCBvZiBtZW1vcnkgdG8gYWxsb2NhdGUgJXNcbiIsCisJCQkJCSAgZGV2LT5uYW1lLCAiMSBidWYgbW9kZSBTS0JzIik7CisJCQkJc3RhdHMtPm1lbV9hbGxvY19mYWlsX2NudCsrOwogCQkJCXJldHVybiAtRU5PTUVNIDsKIAkJCX0KLQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY2F0ZWQKLQkJCQkrPSAoKnNrYiktPnRydWVzaXplOworCQkJc3RhdHMtPm1lbV9hbGxvY2F0ZWQgKz0gKCpza2IpLT50cnVlc2l6ZTsKIAkJCS8qIHN0b3JpbmcgdGhlIG1hcHBlZCBhZGRyIGluIGEgdGVtcCB2YXJpYWJsZQogCQkJICogc3VjaCBpdCB3aWxsIGJlIHVzZWQgZm9yIG5leHQgcnhkIHdob3NlCiAJCQkgKiBIb3N0IENvbnRyb2wgaXMgTlVMTAogCQkJICovCiAJCQlyeGRwMS0+QnVmZmVyMF9wdHIgPSAqdGVtcDAgPQotCQkJCXBjaV9tYXBfc2luZ2xlKCBzcC0+cGRldiwgKCpza2IpLT5kYXRhLAotCQkJCQlzaXplIC0gTkVUX0lQX0FMSUdOLAotCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCXBjaV9tYXBfc2luZ2xlKHNwLT5wZGV2LCAoKnNrYiktPmRhdGEsCisJCQkJCSAgICAgICBzaXplIC0gTkVUX0lQX0FMSUdOLAorCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc3AtPnBkZXYsIHJ4ZHAxLT5CdWZmZXIwX3B0cikpCiAJCQkJZ290byBtZW1hbGxvY19mYWlsZWQ7CiAJCQlyeGRwLT5Ib3N0X0NvbnRyb2wgPSAodW5zaWduZWQgbG9uZykgKCpza2IpOwpAQCAtNjg5MCwxNSArNjkwNiwxNCBAQAogCQl9IGVsc2UgewogCQkJKnNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSk7CiAJCQlpZiAoISgqc2tiKSkgewotCQkJCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBPdXQgb2YgIiwgZGV2LT5uYW1lKTsKLQkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICJtZW1vcnkgdG8gYWxsb2NhdGUgIik7Ci0JCQkJREJHX1BSSU5UKElORk9fREJHLCAiMiBidWYgbW9kZSBTS0JzXG4iKTsKLQkJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC4gXAotCQkJCQltZW1fYWxsb2NfZmFpbF9jbnQrKzsKKwkJCQlEQkdfUFJJTlQoSU5GT19EQkcsCisJCQkJCSAgIiVzOiBPdXQgb2YgbWVtb3J5IHRvIGFsbG9jYXRlICVzXG4iLAorCQkJCQkgIGRldi0+bmFtZSwKKwkJCQkJICAiMiBidWYgbW9kZSBTS0JzIik7CisJCQkJc3RhdHMtPm1lbV9hbGxvY19mYWlsX2NudCsrOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQotCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2FsbG9jYXRlZAotCQkJCSs9ICgqc2tiKS0+dHJ1ZXNpemU7CisJCQlzdGF0cy0+bWVtX2FsbG9jYXRlZCArPSAoKnNrYiktPnRydWVzaXplOwogCQkJcnhkcDMtPkJ1ZmZlcjJfcHRyID0gKnRlbXAyID0KIAkJCQlwY2lfbWFwX3NpbmdsZShzcC0+cGRldiwgKCpza2IpLT5kYXRhLAogCQkJCQkgICAgICAgZGV2LT5tdHUgKyA0LApAQCAtNjkwNiwxMyArNjkyMSwxNCBAQAogCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihzcC0+cGRldiwgcnhkcDMtPkJ1ZmZlcjJfcHRyKSkKIAkJCQlnb3RvIG1lbWFsbG9jX2ZhaWxlZDsKIAkJCXJ4ZHAzLT5CdWZmZXIwX3B0ciA9ICp0ZW1wMCA9Ci0JCQkJcGNpX21hcF9zaW5nbGUoIHNwLT5wZGV2LCBiYS0+YmFfMCwgQlVGMF9MRU4sCi0JCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCXBjaV9tYXBfc2luZ2xlKHNwLT5wZGV2LCBiYS0+YmFfMCwgQlVGMF9MRU4sCisJCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihzcC0+cGRldiwKLQkJCQkJCXJ4ZHAzLT5CdWZmZXIwX3B0cikpIHsKLQkJCQlwY2lfdW5tYXBfc2luZ2xlIChzcC0+cGRldiwKLQkJCQkJKGRtYV9hZGRyX3QpcnhkcDMtPkJ1ZmZlcjJfcHRyLAotCQkJCQlkZXYtPm10dSArIDQsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJCQkgIHJ4ZHAzLT5CdWZmZXIwX3B0cikpIHsKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKHNwLT5wZGV2LAorCQkJCQkJIChkbWFfYWRkcl90KXJ4ZHAzLT5CdWZmZXIyX3B0ciwKKwkJCQkJCSBkZXYtPm10dSArIDQsCisJCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCQlnb3RvIG1lbWFsbG9jX2ZhaWxlZDsKIAkJCX0KIAkJCXJ4ZHAtPkhvc3RfQ29udHJvbCA9ICh1bnNpZ25lZCBsb25nKSAoKnNrYik7CkBAIC02OTIwLDI1ICs2OTM2LDI3IEBACiAJCQkvKiBCdWZmZXItMSB3aWxsIGJlIGR1bW15IGJ1ZmZlciBub3QgdXNlZCAqLwogCQkJcnhkcDMtPkJ1ZmZlcjFfcHRyID0gKnRlbXAxID0KIAkJCQlwY2lfbWFwX3NpbmdsZShzcC0+cGRldiwgYmEtPmJhXzEsIEJVRjFfTEVOLAotCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNwLT5wZGV2LAotCQkJCQkJcnhkcDMtPkJ1ZmZlcjFfcHRyKSkgewotCQkJCXBjaV91bm1hcF9zaW5nbGUgKHNwLT5wZGV2LAotCQkJCQkoZG1hX2FkZHJfdClyeGRwMy0+QnVmZmVyMF9wdHIsCi0JCQkJCUJVRjBfTEVOLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJCXBjaV91bm1hcF9zaW5nbGUgKHNwLT5wZGV2LAotCQkJCQkoZG1hX2FkZHJfdClyeGRwMy0+QnVmZmVyMl9wdHIsCi0JCQkJCWRldi0+bXR1ICsgNCwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJCSAgcnhkcDMtPkJ1ZmZlcjFfcHRyKSkgeworCQkJCXBjaV91bm1hcF9zaW5nbGUoc3AtPnBkZXYsCisJCQkJCQkgKGRtYV9hZGRyX3QpcnhkcDMtPkJ1ZmZlcjBfcHRyLAorCQkJCQkJIEJVRjBfTEVOLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCXBjaV91bm1hcF9zaW5nbGUoc3AtPnBkZXYsCisJCQkJCQkgKGRtYV9hZGRyX3QpcnhkcDMtPkJ1ZmZlcjJfcHRyLAorCQkJCQkJIGRldi0+bXR1ICsgNCwKKwkJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJCWdvdG8gbWVtYWxsb2NfZmFpbGVkOwogCQkJfQogCQl9CiAJfQogCXJldHVybiAwOwotCW1lbWFsbG9jX2ZhaWxlZDoKLQkJc3RhdHMtPnBjaV9tYXBfZmFpbF9jbnQrKzsKLQkJc3RhdHMtPm1lbV9mcmVlZCArPSAoKnNrYiktPnRydWVzaXplOwotCQlkZXZfa2ZyZWVfc2tiKCpza2IpOwotCQlyZXR1cm4gLUVOT01FTTsKKworbWVtYWxsb2NfZmFpbGVkOgorCXN0YXRzLT5wY2lfbWFwX2ZhaWxfY250Kys7CisJc3RhdHMtPm1lbV9mcmVlZCArPSAoKnNrYiktPnRydWVzaXplOworCWRldl9rZnJlZV9za2IoKnNrYik7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9yeGRfYnVmZmVyX3NpemUoc3RydWN0IHMyaW9fbmljICpzcCwgc3RydWN0IFJ4RF90ICpyeGRwLApAQCAtNjk0NiwxOSArNjk2NCwxOSBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzcC0+ZGV2OwogCWlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfMSkgewotCQlyeGRwLT5Db250cm9sXzIgPSBTRVRfQlVGRkVSMF9TSVpFXzEoIHNpemUgLSBORVRfSVBfQUxJR04pOworCQlyeGRwLT5Db250cm9sXzIgPSBTRVRfQlVGRkVSMF9TSVpFXzEoc2l6ZSAtIE5FVF9JUF9BTElHTik7CiAJfSBlbHNlIGlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpIHsKIAkJcnhkcC0+Q29udHJvbF8yID0gU0VUX0JVRkZFUjBfU0laRV8zKEJVRjBfTEVOKTsKIAkJcnhkcC0+Q29udHJvbF8yIHw9IFNFVF9CVUZGRVIxX1NJWkVfMygxKTsKLQkJcnhkcC0+Q29udHJvbF8yIHw9IFNFVF9CVUZGRVIyX1NJWkVfMyggZGV2LT5tdHUgKyA0KTsKKwkJcnhkcC0+Q29udHJvbF8yIHw9IFNFVF9CVUZGRVIyX1NJWkVfMyhkZXYtPm10dSArIDQpOwogCX0KIH0KIAogc3RhdGljICBpbnQgcnhkX293bmVyX2JpdF9yZXNldChzdHJ1Y3QgczJpb19uaWMgKnNwKQogewogCWludCBpLCBqLCBrLCBibGtfY250ID0gMCwgc2l6ZTsKLQlzdHJ1Y3QgbWFjX2luZm8gKiBtYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CiAJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnID0gJnNwLT5jb25maWc7CisJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNwLT5kZXY7CiAJc3RydWN0IFJ4RF90ICpyeGRwID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKQEAgLTY5NzQsMjAgKzY5OTIsMjEgQEAKIAkJc2l6ZSA9IGRldi0+bXR1ICsgQUxJR05fU0laRSArIEJVRjBfTEVOICsgNDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKLQkJYmxrX2NudCA9IGNvbmZpZy0+cnhfY2ZnW2ldLm51bV9yeGQgLwotCQkJKHJ4ZF9jb3VudFtzcC0+cnhkX21vZGVdICsxKTsKKwkJc3RydWN0IHJ4X3JpbmdfY29uZmlnICpyeF9jZmcgPSAmY29uZmlnLT5yeF9jZmdbaV07CisJCXN0cnVjdCByaW5nX2luZm8gKnJpbmcgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldOworCisJCWJsa19jbnQgPSByeF9jZmctPm51bV9yeGQgLyAocnhkX2NvdW50W3NwLT5yeGRfbW9kZV0gKyAxKTsKIAogCQlmb3IgKGogPSAwOyBqIDwgYmxrX2NudDsgaisrKSB7CiAJCQlmb3IgKGsgPSAwOyBrIDwgcnhkX2NvdW50W3NwLT5yeGRfbW9kZV07IGsrKykgewotCQkJCXJ4ZHAgPSBtYWNfY29udHJvbC0+cmluZ3NbaV0uCi0JCQkJCXJ4X2Jsb2Nrc1tqXS5yeGRzW2tdLnZpcnRfYWRkcjsKLQkJCQlpZihzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpCi0JCQkJCWJhID0gJm1hY19jb250cm9sLT5yaW5nc1tpXS5iYVtqXVtrXTsKLQkJCQlpZiAoc2V0X3J4ZF9idWZmZXJfcG9pbnRlcihzcCwgcnhkcCwgYmEsCi0JCQkJCQkgICAgICAgJnNrYiwodTY0ICopJnRlbXAwXzY0LAotCQkJCQkJICAgICAgICh1NjQgKikmdGVtcDFfNjQsCi0JCQkJCQkgICAgICAgKHU2NCAqKSZ0ZW1wMl82NCwKLQkJCQkJCQlzaXplKSA9PSAtRU5PTUVNKSB7CisJCQkJcnhkcCA9IHJpbmctPnJ4X2Jsb2Nrc1tqXS5yeGRzW2tdLnZpcnRfYWRkcjsKKwkJCQlpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKQorCQkJCQliYSA9ICZyaW5nLT5iYVtqXVtrXTsKKwkJCQlpZiAoc2V0X3J4ZF9idWZmZXJfcG9pbnRlcihzcCwgcnhkcCwgYmEsICZza2IsCisJCQkJCQkJICAgKHU2NCAqKSZ0ZW1wMF82NCwKKwkJCQkJCQkgICAodTY0ICopJnRlbXAxXzY0LAorCQkJCQkJCSAgICh1NjQgKikmdGVtcDJfNjQsCisJCQkJCQkJICAgc2l6ZSkgPT0gLUVOT01FTSkgewogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAKQEAgLTcwMDIsNyArNzAyMSw3IEBACiAKIH0KIAotc3RhdGljIGludCBzMmlvX2FkZF9pc3Ioc3RydWN0IHMyaW9fbmljICogc3ApCitzdGF0aWMgaW50IHMyaW9fYWRkX2lzcihzdHJ1Y3QgczJpb19uaWMgKnNwKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzcC0+ZGV2OwpAQCAtNzAxNSw3ICs3MDM0LDEwIEBACiAJCXNwLT5jb25maWcuaW50cl90eXBlID0gSU5UQTsKIAl9CiAKLQkvKiBTdG9yZSB0aGUgdmFsdWVzIG9mIHRoZSBNU0lYIHRhYmxlIGluIHRoZSBzdHJ1Y3QgczJpb19uaWMgc3RydWN0dXJlICovCisJLyoKKwkgKiBTdG9yZSB0aGUgdmFsdWVzIG9mIHRoZSBNU0lYIHRhYmxlIGluCisJICogdGhlIHN0cnVjdCBzMmlvX25pYyBzdHJ1Y3R1cmUKKwkgKi8KIAlzdG9yZV94bXNpX2RhdGEoc3ApOwogCiAJLyogQWZ0ZXIgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mIEgvVywgcmVnaXN0ZXIgSVNSICovCkBAIC03MDI1LDQ1ICs3MDQ3LDQ3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBzcC0+bnVtX2VudHJpZXM7IGkrKykgewogCQkJaWYgKHNwLT5zMmlvX2VudHJpZXNbaV0uaW5fdXNlID09IE1TSVhfRkxHKSB7CiAJCQkJaWYgKHNwLT5zMmlvX2VudHJpZXNbaV0udHlwZSA9PQotCQkJCQlNU0lYX1JJTkdfVFlQRSkgeworCQkJCSAgICBNU0lYX1JJTkdfVFlQRSkgewogCQkJCQlzcHJpbnRmKHNwLT5kZXNjW2ldLCAiJXM6TVNJLVgtJWQtUlgiLAogCQkJCQkJZGV2LT5uYW1lLCBpKTsKIAkJCQkJZXJyID0gcmVxdWVzdF9pcnEoc3AtPmVudHJpZXNbaV0udmVjdG9yLAotCQkJCQkJczJpb19tc2l4X3JpbmdfaGFuZGxlLCAwLAotCQkJCQkJc3AtPmRlc2NbaV0sCi0JCQkJCQlzcC0+czJpb19lbnRyaWVzW2ldLmFyZyk7CisJCQkJCQkJICBzMmlvX21zaXhfcmluZ19oYW5kbGUsCisJCQkJCQkJICAwLAorCQkJCQkJCSAgc3AtPmRlc2NbaV0sCisJCQkJCQkJICBzcC0+czJpb19lbnRyaWVzW2ldLmFyZyk7CiAJCQkJfSBlbHNlIGlmIChzcC0+czJpb19lbnRyaWVzW2ldLnR5cGUgPT0KLQkJCQkJTVNJWF9BTEFSTV9UWVBFKSB7CisJCQkJCSAgIE1TSVhfQUxBUk1fVFlQRSkgewogCQkJCQlzcHJpbnRmKHNwLT5kZXNjW2ldLCAiJXM6TVNJLVgtJWQtVFgiLAotCQkJCQlkZXYtPm5hbWUsIGkpOworCQkJCQkJZGV2LT5uYW1lLCBpKTsKIAkJCQkJZXJyID0gcmVxdWVzdF9pcnEoc3AtPmVudHJpZXNbaV0udmVjdG9yLAotCQkJCQkJczJpb19tc2l4X2ZpZm9faGFuZGxlLCAwLAotCQkJCQkJc3AtPmRlc2NbaV0sCi0JCQkJCQlzcC0+czJpb19lbnRyaWVzW2ldLmFyZyk7CisJCQkJCQkJICBzMmlvX21zaXhfZmlmb19oYW5kbGUsCisJCQkJCQkJICAwLAorCQkJCQkJCSAgc3AtPmRlc2NbaV0sCisJCQkJCQkJICBzcC0+czJpb19lbnRyaWVzW2ldLmFyZyk7CiAKIAkJCQl9CiAJCQkJLyogaWYgZWl0aGVyIGRhdGEgb3IgYWRkciBpcyB6ZXJvIHByaW50IGl0LiAqLwogCQkJCWlmICghKHNwLT5tc2l4X2luZm9baV0uYWRkciAmJgotCQkJCQlzcC0+bXNpeF9pbmZvW2ldLmRhdGEpKSB7CisJCQkJICAgICAgc3AtPm1zaXhfaW5mb1tpXS5kYXRhKSkgewogCQkJCQlEQkdfUFJJTlQoRVJSX0RCRywKLQkJCQkJCSIlcyBAQWRkcjoweCVsbHggRGF0YToweCVsbHhcbiIsCi0JCQkJCQlzcC0+ZGVzY1tpXSwKLQkJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkJCQlzcC0+bXNpeF9pbmZvW2ldLmFkZHIsCi0JCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKQotCQkJCQkJbnRvaGwoc3AtPm1zaXhfaW5mb1tpXS5kYXRhKSk7CisJCQkJCQkgICIlcyBAQWRkcjoweCVsbHggRGF0YToweCVsbHhcbiIsCisJCQkJCQkgIHNwLT5kZXNjW2ldLAorCQkJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCQkJICBzcC0+bXNpeF9pbmZvW2ldLmFkZHIsCisJCQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCQkgIG50b2hsKHNwLT5tc2l4X2luZm9baV0uZGF0YSkpOwogCQkJCX0gZWxzZQogCQkJCQltc2l4X3J4X2NudCsrOwogCQkJCWlmIChlcnIpIHsKIAkJCQkJcmVtb3ZlX21zaXhfaXNyKHNwKTsKIAogCQkJCQlEQkdfUFJJTlQoRVJSX0RCRywKLQkJCQkJCSIlczpNU0ktWC0lZCByZWdpc3RyYXRpb24gIgotCQkJCQkJImZhaWxlZFxuIiwgZGV2LT5uYW1lLCBpKTsKKwkJCQkJCSAgIiVzOk1TSS1YLSVkIHJlZ2lzdHJhdGlvbiAiCisJCQkJCQkgICJmYWlsZWRcbiIsIGRldi0+bmFtZSwgaSk7CiAKIAkJCQkJREJHX1BSSU5UKEVSUl9EQkcsCi0JCQkJCQkiJXM6IERlZmF1bHRpbmcgdG8gSU5UQVxuIiwKLQkJCQkJCWRldi0+bmFtZSk7CisJCQkJCQkgICIlczogRGVmYXVsdGluZyB0byBJTlRBXG4iLAorCQkJCQkJICBkZXYtPm5hbWUpOwogCQkJCQlzcC0+Y29uZmlnLmludHJfdHlwZSA9IElOVEE7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTcwNzIsMTUgKzcwOTYsMTQgQEAKIAkJCX0KIAkJfQogCQlpZiAoIWVycikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiTVNJLVgtUlggJWQgZW50cmllcyBlbmFibGVkXG4iLAotCQkJCS0tbXNpeF9yeF9jbnQpOwotCQkJREJHX1BSSU5UKElORk9fREJHLCAiTVNJLVgtVFggZW50cmllcyBlbmFibGVkIgotCQkJCQkJIiB0aHJvdWdoIGFsYXJtIHZlY3RvclxuIik7CisJCQlwcl9pbmZvKCJNU0ktWC1SWCAlZCBlbnRyaWVzIGVuYWJsZWRcbiIsIC0tbXNpeF9yeF9jbnQpOworCQkJREJHX1BSSU5UKElORk9fREJHLAorCQkJCSAgIk1TSS1YLVRYIGVudHJpZXMgZW5hYmxlZCB0aHJvdWdoIGFsYXJtIHZlY3RvclxuIik7CiAJCX0KIAl9CiAJaWYgKHNwLT5jb25maWcuaW50cl90eXBlID09IElOVEEpIHsKLQkJZXJyID0gcmVxdWVzdF9pcnEoKGludCkgc3AtPnBkZXYtPmlycSwgczJpb19pc3IsIElSUUZfU0hBUkVELAotCQkJCXNwLT5uYW1lLCBkZXYpOworCQllcnIgPSByZXF1ZXN0X2lycSgoaW50KXNwLT5wZGV2LT5pcnEsIHMyaW9faXNyLCBJUlFGX1NIQVJFRCwKKwkJCQkgIHNwLT5uYW1lLCBkZXYpOwogCQlpZiAoZXJyKSB7CiAJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBJU1IgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIiwKIAkJCQkgIGRldi0+bmFtZSk7CkBAIC03MDg5LDcgKzcxMTIsOCBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyB2b2lkIHMyaW9fcmVtX2lzcihzdHJ1Y3QgczJpb19uaWMgKiBzcCkKKworc3RhdGljIHZvaWQgczJpb19yZW1faXNyKHN0cnVjdCBzMmlvX25pYyAqc3ApCiB7CiAJaWYgKHNwLT5jb25maWcuaW50cl90eXBlID09IE1TSV9YKQogCQlyZW1vdmVfbXNpeF9pc3Ioc3ApOwpAQCAtNzA5Nyw3ICs3MTIxLDcgQEAKIAkJcmVtb3ZlX2ludGFfaXNyKHNwKTsKIH0KIAotc3RhdGljIHZvaWQgZG9fczJpb19jYXJkX2Rvd24oc3RydWN0IHMyaW9fbmljICogc3AsIGludCBkb19pbykKK3N0YXRpYyB2b2lkIGRvX3MyaW9fY2FyZF9kb3duKHN0cnVjdCBzMmlvX25pYyAqc3AsIGludCBkb19pbykKIHsKIAlpbnQgY250ID0gMDsKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKQEAgLTcxMTAsOSArNzEzNCw4IEBACiAKIAlkZWxfdGltZXJfc3luYygmc3AtPmFsYXJtX3RpbWVyKTsKIAkvKiBJZiBzMmlvX3NldF9saW5rIHRhc2sgaXMgZXhlY3V0aW5nLCB3YWl0IHRpbGwgaXQgY29tcGxldGVzLiAqLwotCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fUzJJT19TVEFURV9MSU5LX1RBU0ssICYoc3AtPnN0YXRlKSkpIHsKKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX1MySU9fU1RBVEVfTElOS19UQVNLLCAmKHNwLT5zdGF0ZSkpKQogCQltc2xlZXAoNTApOwotCX0KIAljbGVhcl9iaXQoX19TMklPX1NUQVRFX0NBUkRfVVAsICZzcC0+c3RhdGUpOwogCiAJLyogRGlzYWJsZSBuYXBpICovCkBAIC03MTIxLDcgKzcxNDQsNyBAQAogCQlpZiAoY29uZmlnLT5pbnRyX3R5cGUgPT0gIE1TSV9YKSB7CiAJCQlmb3IgKDsgb2ZmIDwgc3AtPmNvbmZpZy5yeF9yaW5nX251bTsgb2ZmKyspCiAJCQkJbmFwaV9kaXNhYmxlKCZzcC0+bWFjX2NvbnRyb2wucmluZ3Nbb2ZmXS5uYXBpKTsKLQkJCX0KKwkJfQogCQllbHNlCiAJCQluYXBpX2Rpc2FibGUoJnNwLT5uYXBpKTsKIAl9CkBAIC03MTM2LDcgKzcxNTksNyBAQAogCXMyaW9fbGluayhzcCwgTElOS19ET1dOKTsKIAogCS8qIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgUXVpZXNjZW50IGFuZCB0aGVuIFJlc2V0IHRoZSBOSUMgKi8KLQl3aGlsZShkb19pbykgeworCXdoaWxlIChkb19pbykgewogCQkvKiBBcyBwZXIgdGhlIEhXIHJlcXVpcmVtZW50IHdlIG5lZWQgdG8gcmVwbGVuaXNoIHRoZQogCQkgKiByZWNlaXZlIGJ1ZmZlciB0byBhdm9pZCB0aGUgcmluZyBidW1wLiBTaW5jZSB0aGVyZSBpcwogCQkgKiBubyBpbnRlbnRpb24gb2YgcHJvY2Vzc2luZyB0aGUgUnggZnJhbWUgYXQgdGhpcyBwb2ludHdlIGFyZQpAQCAtNzE0OCwxNyArNzE3MSwxNiBAQAogCiAJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmFkYXB0ZXJfc3RhdHVzKTsKIAkJaWYgKHZlcmlmeV94ZW5hX3F1aWVzY2VuY2Uoc3ApKSB7Ci0JCQlpZih2ZXJpZnlfcGNjX3F1aWVzY2VudChzcCwgc3AtPmRldmljZV9lbmFibGVkX29uY2UpKQotCQkJYnJlYWs7CisJCQlpZiAodmVyaWZ5X3BjY19xdWllc2NlbnQoc3AsIHNwLT5kZXZpY2VfZW5hYmxlZF9vbmNlKSkKKwkJCQlicmVhazsKIAkJfQogCiAJCW1zbGVlcCg1MCk7CiAJCWNudCsrOwogCQlpZiAoY250ID09IDEwKSB7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywKLQkJCQkgICJzMmlvX2Nsb3NlOkRldmljZSBub3QgUXVpZXNjZW50ICIpOwotCQkJREJHX1BSSU5UKEVSUl9EQkcsICJhZGFwZXIgc3RhdHVzIHJlYWRzIDB4JWxseFxuIiwKLQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbDY0KTsKKwkJCURCR19QUklOVChFUlJfREJHLCAiRGV2aWNlIG5vdCBRdWllc2NlbnQgLSAiCisJCQkJICAiYWRhcHRlciBzdGF0dXMgcmVhZHMgMHglbGx4XG4iLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWw2NCk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTcxNzQsMTcgKzcxOTYsMTcgQEAKIAljbGVhcl9iaXQoX19TMklPX1NUQVRFX0xJTktfVEFTSywgJihzcC0+c3RhdGUpKTsKIH0KIAotc3RhdGljIHZvaWQgczJpb19jYXJkX2Rvd24oc3RydWN0IHMyaW9fbmljICogc3ApCitzdGF0aWMgdm9pZCBzMmlvX2NhcmRfZG93bihzdHJ1Y3QgczJpb19uaWMgKnNwKQogewogCWRvX3MyaW9fY2FyZF9kb3duKHNwLCAxKTsKIH0KIAotc3RhdGljIGludCBzMmlvX2NhcmRfdXAoc3RydWN0IHMyaW9fbmljICogc3ApCitzdGF0aWMgaW50IHMyaW9fY2FyZF91cChzdHJ1Y3QgczJpb19uaWMgKnNwKQogewogCWludCBpLCByZXQgPSAwOwotCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2w7CiAJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgc3AtPmRldjsKKwlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilzcC0+ZGV2OwogCXUxNiBpbnRlcnJ1cHRpYmxlOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgSC9XIEkvTyByZWdpc3RlcnMgKi8KQEAgLTcyMDEsMTIgKzcyMjMsMTQgQEAKIAkgKiBJbml0aWFsaXppbmcgdGhlIFJ4IGJ1ZmZlcnMuIEZvciBub3cgd2UgYXJlIGNvbnNpZGVyaW5nIG9ubHkgMQogCSAqIFJ4IHJpbmcgYW5kIGluaXRpYWxpemluZyBidWZmZXJzIGludG8gMzAgUnggYmxvY2tzCiAJICovCi0JbWFjX2NvbnRyb2wgPSAmc3AtPm1hY19jb250cm9sOwogCWNvbmZpZyA9ICZzcC0+Y29uZmlnOworCW1hY19jb250cm9sID0gJnNwLT5tYWNfY29udHJvbDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLm10dSA9IGRldi0+bXR1OwotCQlyZXQgPSBmaWxsX3J4X2J1ZmZlcnMoc3AsICZtYWNfY29udHJvbC0+cmluZ3NbaV0sIDEpOworCQlzdHJ1Y3QgcmluZ19pbmZvICpyaW5nID0gJm1hY19jb250cm9sLT5yaW5nc1tpXTsKKworCQlyaW5nLT5tdHUgPSBkZXYtPm10dTsKKwkJcmV0ID0gZmlsbF9yeF9idWZmZXJzKHNwLCByaW5nLCAxKTsKIAkJaWYgKHJldCkgewogCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogT3V0IG9mIG1lbW9yeSBpbiBPcGVuXG4iLAogCQkJCSAgZGV2LT5uYW1lKTsKQEAgLTcyMTUsNyArNzIzOSw3IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlEQkdfUFJJTlQoSU5GT19EQkcsICJCdWYgaW4gcmluZzolZCBpcyAlZDpcbiIsIGksCi0JCQkgIG1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9idWZzX2xlZnQpOworCQkJICByaW5nLT5yeF9idWZzX2xlZnQpOwogCX0KIAogCS8qIEluaXRpYWxpc2UgbmFwaSAqLwpAQCAtNzIzMyw3ICs3MjU3LDcgQEAKIAkJc3AtPnByb21pc2NfZmxnID0gMDsKIAlpZiAoc3AtPm1fY2FzdF9mbGcpIHsKIAkJc3AtPm1fY2FzdF9mbGcgPSAwOwotCQlzcC0+YWxsX211bHRpX3Bvcz0gMDsKKwkJc3AtPmFsbF9tdWx0aV9wb3MgPSAwOwogCX0KIAogCS8qIFNldHRpbmcgaXRzIHJlY2VpdmUgbW9kZSAqLwpAQCAtNzI0Miw3ICs3MjY2LDcgQEAKIAlpZiAoc3AtPmxybykgewogCQkvKiBJbml0aWFsaXplIG1heCBhZ2dyZWdhdGFibGUgcGt0cyBwZXIgc2Vzc2lvbiBiYXNlZCBvbiBNVFUgKi8KIAkJc3AtPmxyb19tYXhfYWdncl9wZXJfc2VzcyA9ICgoMTw8MTYpIC0gMSkgLyBkZXYtPm10dTsKLQkJLyogQ2hlY2sgaWYgd2UgY2FuIHVzZShpZiBzcGVjaWZpZWQpIHVzZXIgcHJvdmlkZWQgdmFsdWUgKi8KKwkJLyogQ2hlY2sgaWYgd2UgY2FuIHVzZSAoaWYgc3BlY2lmaWVkKSB1c2VyIHByb3ZpZGVkIHZhbHVlICovCiAJCWlmIChscm9fbWF4X3BrdHMgPCBzcC0+bHJvX21heF9hZ2dyX3Blcl9zZXNzKQogCQkJc3AtPmxyb19tYXhfYWdncl9wZXJfc2VzcyA9IGxyb19tYXhfcGt0czsKIAl9CkBAIC03MzA0LDEyICs3MzI4LDEwIEBACiAKIAlzMmlvX2NhcmRfZG93bihzcCk7CiAJaWYgKHMyaW9fY2FyZF91cChzcCkpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGV2aWNlIGJyaW5nIHVwIGZhaWxlZFxuIiwKLQkJCSAgZGV2LT5uYW1lKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGV2aWNlIGJyaW5nIHVwIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAl9CiAJczJpb193YWtlX2FsbF90eF9xdWV1ZShzcCk7Ci0JREJHX1BSSU5UKEVSUl9EQkcsICIlczogd2FzIHJlc2V0IGJ5IFR4IHdhdGNoZG9nIHRpbWVyXG4iLAotCQkgIGRldi0+bmFtZSk7CisJREJHX1BSSU5UKEVSUl9EQkcsICIlczogd2FzIHJlc2V0IGJ5IFR4IHdhdGNoZG9nIHRpbWVyXG4iLCBkZXYtPm5hbWUpOwogb3V0X3VubG9jazoKIAlydG5sX3VubG9jaygpOwogfQpAQCAtNzMzMCwxMSArNzM1MiwxMiBAQAogc3RhdGljIHZvaWQgczJpb190eF93YXRjaGRvZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzd1N0YXQgKnN3c3RhdHMgPSAmc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7CiAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7Ci0JCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LndhdGNoZG9nX3RpbWVyX2NudCsrOworCQlzd3N0YXRzLT53YXRjaGRvZ190aW1lcl9jbnQrKzsKIAkJc2NoZWR1bGVfd29yaygmc3AtPnJzdF90aW1lcl90YXNrKTsKLQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuc29mdF9yZXNldF9jbnQrKzsKKwkJc3dzdGF0cy0+c29mdF9yZXNldF9jbnQrKzsKIAl9CiB9CiAKQEAgLTczNTgsODEgKzczODEsNzMgQEAKIHN0YXRpYyBpbnQgcnhfb3NtX2hhbmRsZXIoc3RydWN0IHJpbmdfaW5mbyAqcmluZ19kYXRhLCBzdHJ1Y3QgUnhEX3QgKiByeGRwKQogewogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSByaW5nX2RhdGEtPm5pYzsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIHJpbmdfZGF0YS0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilyaW5nX2RhdGEtPmRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopCi0JCSgodW5zaWduZWQgbG9uZykgcnhkcC0+SG9zdF9Db250cm9sKTsKKwkJKCh1bnNpZ25lZCBsb25nKXJ4ZHAtPkhvc3RfQ29udHJvbCk7CiAJaW50IHJpbmdfbm8gPSByaW5nX2RhdGEtPnJpbmdfbm87CiAJdTE2IGwzX2NzdW0sIGw0X2NzdW07CiAJdW5zaWduZWQgbG9uZyBsb25nIGVyciA9IHJ4ZHAtPkNvbnRyb2xfMSAmIFJYRF9UX0NPREU7CiAJc3RydWN0IGxybyAqdW5pbml0aWFsaXplZF92YXIobHJvKTsKIAl1OCBlcnJfbWFzazsKKwlzdHJ1Y3Qgc3dTdGF0ICpzd3N0YXRzID0gJnNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0OwogCiAJc2tiLT5kZXYgPSBkZXY7CiAKIAlpZiAoZXJyKSB7CiAJCS8qIENoZWNrIGZvciBwYXJpdHkgZXJyb3IgKi8KLQkJaWYgKGVyciAmIDB4MSkgewotCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQucGFyaXR5X2Vycl9jbnQrKzsKLQkJfQorCQlpZiAoZXJyICYgMHgxKQorCQkJc3dzdGF0cy0+cGFyaXR5X2Vycl9jbnQrKzsKKwogCQllcnJfbWFzayA9IGVyciA+PiA0ODsKLQkJc3dpdGNoKGVycl9tYXNrKSB7Ci0JCQljYXNlIDE6Ci0JCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCi0JCQkJcnhfcGFyaXR5X2Vycl9jbnQrKzsKKwkJc3dpdGNoIChlcnJfbWFzaykgeworCQljYXNlIDE6CisJCQlzd3N0YXRzLT5yeF9wYXJpdHlfZXJyX2NudCsrOwogCQkJYnJlYWs7CiAKLQkJCWNhc2UgMjoKLQkJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC4KLQkJCQlyeF9hYm9ydF9jbnQrKzsKKwkJY2FzZSAyOgorCQkJc3dzdGF0cy0+cnhfYWJvcnRfY250Kys7CiAJCQlicmVhazsKIAotCQkJY2FzZSAzOgotCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgotCQkJCXJ4X3Bhcml0eV9hYm9ydF9jbnQrKzsKKwkJY2FzZSAzOgorCQkJc3dzdGF0cy0+cnhfcGFyaXR5X2Fib3J0X2NudCsrOwogCQkJYnJlYWs7CiAKLQkJCWNhc2UgNDoKLQkJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC4KLQkJCQlyeF9yZGFfZmFpbF9jbnQrKzsKKwkJY2FzZSA0OgorCQkJc3dzdGF0cy0+cnhfcmRhX2ZhaWxfY250Kys7CiAJCQlicmVhazsKIAotCQkJY2FzZSA1OgotCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgotCQkJCXJ4X3Vua25fcHJvdF9jbnQrKzsKKwkJY2FzZSA1OgorCQkJc3dzdGF0cy0+cnhfdW5rbl9wcm90X2NudCsrOwogCQkJYnJlYWs7CiAKLQkJCWNhc2UgNjoKLQkJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC4KLQkJCQlyeF9mY3NfZXJyX2NudCsrOworCQljYXNlIDY6CisJCQlzd3N0YXRzLT5yeF9mY3NfZXJyX2NudCsrOwogCQkJYnJlYWs7CiAKLQkJCWNhc2UgNzoKLQkJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC4KLQkJCQlyeF9idWZfc2l6ZV9lcnJfY250Kys7CisJCWNhc2UgNzoKKwkJCXN3c3RhdHMtPnJ4X2J1Zl9zaXplX2Vycl9jbnQrKzsKIAkJCWJyZWFrOwogCi0JCQljYXNlIDg6Ci0JCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCi0JCQkJcnhfcnhkX2NvcnJ1cHRfY250Kys7CisJCWNhc2UgODoKKwkJCXN3c3RhdHMtPnJ4X3J4ZF9jb3JydXB0X2NudCsrOwogCQkJYnJlYWs7CiAKLQkJCWNhc2UgMTU6Ci0JCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCi0JCQkJcnhfdW5rbl9lcnJfY250Kys7CisJCWNhc2UgMTU6CisJCQlzd3N0YXRzLT5yeF91bmtuX2Vycl9jbnQrKzsKIAkJCWJyZWFrOwogCQl9CiAJCS8qCi0JCSogRHJvcCB0aGUgcGFja2V0IGlmIGJhZCB0cmFuc2ZlciBjb2RlLiBFeGNlcHRpb24gYmVpbmcKLQkJKiAweDUsIHdoaWNoIGNvdWxkIGJlIGR1ZSB0byB1bnN1cHBvcnRlZCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIuCi0JCSogSW4gdGhpcyBjYXNlLCB3ZSBsZXQgc3RhY2sgaGFuZGxlIHRoZSBwYWNrZXQuCi0JCSogTm90ZSB0aGF0IGluIHRoaXMgY2FzZSwgc2luY2UgY2hlY2tzdW0gd2lsbCBiZSBpbmNvcnJlY3QsCi0JCSogc3RhY2sgd2lsbCB2YWxpZGF0ZSB0aGUgc2FtZS4KLQkJKi8KKwkJICogRHJvcCB0aGUgcGFja2V0IGlmIGJhZCB0cmFuc2ZlciBjb2RlLiBFeGNlcHRpb24gYmVpbmcKKwkJICogMHg1LCB3aGljaCBjb3VsZCBiZSBkdWUgdG8gdW5zdXBwb3J0ZWQgSVB2NiBleHRlbnNpb24gaGVhZGVyLgorCQkgKiBJbiB0aGlzIGNhc2UsIHdlIGxldCBzdGFjayBoYW5kbGUgdGhlIHBhY2tldC4KKwkJICogTm90ZSB0aGF0IGluIHRoaXMgY2FzZSwgc2luY2UgY2hlY2tzdW0gd2lsbCBiZSBpbmNvcnJlY3QsCisJCSAqIHN0YWNrIHdpbGwgdmFsaWRhdGUgdGhlIHNhbWUuCisJCSAqLwogCQlpZiAoZXJyX21hc2sgIT0gMHg1KSB7CiAJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBSeCBlcnJvciBWYWx1ZTogMHgleFxuIiwKLQkJCQlkZXYtPm5hbWUsIGVycl9tYXNrKTsKKwkJCQkgIGRldi0+bmFtZSwgZXJyX21hc2spOwogCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQKKwkJCXN3c3RhdHMtPm1lbV9mcmVlZAogCQkJCSs9IHNrYi0+dHJ1ZXNpemU7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlyaW5nX2RhdGEtPnJ4X2J1ZnNfbGVmdCAtPSAxOwpAQCAtNzQ2Myw4ICs3NDc4LDkgQEAKIAkJc2tiX3B1dChza2IsIGJ1ZjJfbGVuKTsKIAl9CiAKLQlpZiAoKHJ4ZHAtPkNvbnRyb2xfMSAmIFRDUF9PUl9VRFBfRlJBTUUpICYmICgoIXJpbmdfZGF0YS0+bHJvKSB8fAotCSAgICAocmluZ19kYXRhLT5scm8gJiYgKCEocnhkcC0+Q29udHJvbF8xICYgUlhEX0ZSQU1FX0lQX0ZSQUcpKSkpICYmCisJaWYgKChyeGRwLT5Db250cm9sXzEgJiBUQ1BfT1JfVURQX0ZSQU1FKSAmJgorCSAgICAoKCFyaW5nX2RhdGEtPmxybykgfHwKKwkgICAgIChyaW5nX2RhdGEtPmxybyAmJiAoIShyeGRwLT5Db250cm9sXzEgJiBSWERfRlJBTUVfSVBfRlJBRykpKSkgJiYKIAkgICAgKHNwLT5yeF9jc3VtKSkgewogCQlsM19jc3VtID0gUlhEX0dFVF9MM19DS1NVTShyeGRwLT5Db250cm9sXzEpOwogCQlsNF9jc3VtID0gUlhEX0dFVF9MNF9DS1NVTShyeGRwLT5Db250cm9sXzEpOwpAQCAtNzQ4MSw1MiArNzQ5Nyw0MiBAQAogCQkJCWludCByZXQgPSAwOwogCiAJCQkJcmV0ID0gczJpb19jbHViX3RjcF9zZXNzaW9uKHJpbmdfZGF0YSwKLQkJCQkJc2tiLT5kYXRhLCAmdGNwLCAmdGNwX2xlbiwgJmxybywKLQkJCQkJcnhkcCwgc3ApOworCQkJCQkJCSAgICBza2ItPmRhdGEsICZ0Y3AsCisJCQkJCQkJICAgICZ0Y3BfbGVuLCAmbHJvLAorCQkJCQkJCSAgICByeGRwLCBzcCk7CiAJCQkJc3dpdGNoIChyZXQpIHsKLQkJCQkJY2FzZSAzOiAvKiBCZWdpbiBhbmV3ICovCi0JCQkJCQlscm8tPnBhcmVudCA9IHNrYjsKLQkJCQkJCWdvdG8gYWdncmVnYXRlOwotCQkJCQljYXNlIDE6IC8qIEFnZ3JlZ2F0ZSAqLwotCQkJCQl7Ci0JCQkJCQlscm9fYXBwZW5kX3BrdChzcCwgbHJvLAotCQkJCQkJCXNrYiwgdGNwX2xlbik7Ci0JCQkJCQlnb3RvIGFnZ3JlZ2F0ZTsKLQkJCQkJfQotCQkJCQljYXNlIDQ6IC8qIEZsdXNoIHNlc3Npb24gKi8KLQkJCQkJewotCQkJCQkJbHJvX2FwcGVuZF9wa3Qoc3AsIGxybywKLQkJCQkJCQlza2IsIHRjcF9sZW4pOwotCQkJCQkJcXVldWVfcnhfZnJhbWUobHJvLT5wYXJlbnQsCi0JCQkJCQkJbHJvLT52bGFuX3RhZyk7Ci0JCQkJCQljbGVhcl9scm9fc2Vzc2lvbihscm8pOwotCQkJCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPgotCQkJCQkJICAgIHN3X3N0YXQuZmx1c2hfbWF4X3BrdHMrKzsKLQkJCQkJCWdvdG8gYWdncmVnYXRlOwotCQkJCQl9Ci0JCQkJCWNhc2UgMjogLyogRmx1c2ggYm90aCAqLwotCQkJCQkJbHJvLT5wYXJlbnQtPmRhdGFfbGVuID0KLQkJCQkJCQlscm8tPmZyYWdzX2xlbjsKLQkJCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT4KLQkJCQkJCSAgICAgc3dfc3RhdC5zZW5kaW5nX2JvdGgrKzsKLQkJCQkJCXF1ZXVlX3J4X2ZyYW1lKGxyby0+cGFyZW50LAotCQkJCQkJCWxyby0+dmxhbl90YWcpOwotCQkJCQkJY2xlYXJfbHJvX3Nlc3Npb24obHJvKTsKLQkJCQkJCWdvdG8gc2VuZF91cDsKLQkJCQkJY2FzZSAwOiAvKiBzZXNzaW9ucyBleGNlZWRlZCAqLwotCQkJCQljYXNlIC0xOiAvKiBub24tVENQIG9yIG5vdAotCQkJCQkJICAqIEwyIGFnZ3JlZ2F0YWJsZQotCQkJCQkJICAqLwotCQkJCQljYXNlIDU6IC8qCi0JCQkJCQkgKiBGaXJzdCBwa3QgaW4gc2Vzc2lvbiBub3QKLQkJCQkJCSAqIEwzL0w0IGFnZ3JlZ2F0YWJsZQotCQkJCQkJICovCi0JCQkJCQlicmVhazsKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCURCR19QUklOVChFUlJfREJHLAotCQkJCQkJCSIlczogU2FtYWRoYW5hISFcbiIsCi0JCQkJCQkJIF9fZnVuY19fKTsKLQkJCQkJCUJVRygpOworCQkJCWNhc2UgMzogLyogQmVnaW4gYW5ldyAqLworCQkJCQlscm8tPnBhcmVudCA9IHNrYjsKKwkJCQkJZ290byBhZ2dyZWdhdGU7CisJCQkJY2FzZSAxOiAvKiBBZ2dyZWdhdGUgKi8KKwkJCQkJbHJvX2FwcGVuZF9wa3Qoc3AsIGxybywgc2tiLCB0Y3BfbGVuKTsKKwkJCQkJZ290byBhZ2dyZWdhdGU7CisJCQkJY2FzZSA0OiAvKiBGbHVzaCBzZXNzaW9uICovCisJCQkJCWxyb19hcHBlbmRfcGt0KHNwLCBscm8sIHNrYiwgdGNwX2xlbik7CisJCQkJCXF1ZXVlX3J4X2ZyYW1lKGxyby0+cGFyZW50LAorCQkJCQkJICAgICAgIGxyby0+dmxhbl90YWcpOworCQkJCQljbGVhcl9scm9fc2Vzc2lvbihscm8pOworCQkJCQlzd3N0YXRzLT5mbHVzaF9tYXhfcGt0cysrOworCQkJCQlnb3RvIGFnZ3JlZ2F0ZTsKKwkJCQljYXNlIDI6IC8qIEZsdXNoIGJvdGggKi8KKwkJCQkJbHJvLT5wYXJlbnQtPmRhdGFfbGVuID0gbHJvLT5mcmFnc19sZW47CisJCQkJCXN3c3RhdHMtPnNlbmRpbmdfYm90aCsrOworCQkJCQlxdWV1ZV9yeF9mcmFtZShscm8tPnBhcmVudCwKKwkJCQkJCSAgICAgICBscm8tPnZsYW5fdGFnKTsKKwkJCQkJY2xlYXJfbHJvX3Nlc3Npb24obHJvKTsKKwkJCQkJZ290byBzZW5kX3VwOworCQkJCWNhc2UgMDogLyogc2Vzc2lvbnMgZXhjZWVkZWQgKi8KKwkJCQljYXNlIC0xOiAvKiBub24tVENQIG9yIG5vdCBMMiBhZ2dyZWdhdGFibGUgKi8KKwkJCQljYXNlIDU6IC8qCisJCQkJCSAqIEZpcnN0IHBrdCBpbiBzZXNzaW9uIG5vdAorCQkJCQkgKiBMMy9MNCBhZ2dyZWdhdGFibGUKKwkJCQkJICovCisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCURCR19QUklOVChFUlJfREJHLAorCQkJCQkJICAiJXM6IFNhbWFkaGFuYSEhXG4iLAorCQkJCQkJICBfX2Z1bmNfXyk7CisJCQkJCUJVRygpOwogCQkJCX0KIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTc1MzksNyArNzU0NSw3IEBACiAJfSBlbHNlCiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAotCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZCArPSBza2ItPnRydWVzaXplOworCXN3c3RhdHMtPm1lbV9mcmVlZCArPSBza2ItPnRydWVzaXplOwogc2VuZF91cDoKIAlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcmluZ19ubyk7CiAJcXVldWVfcnhfZnJhbWUoc2tiLCBSWERfR0VUX1ZMQU5fVEFHKHJ4ZHAtPkNvbnRyb2xfMikpOwpAQCAtNzU2MSw5ICs3NTY3LDEwIEBACiAgKiAgdm9pZC4KICAqLwogCi1zdGF0aWMgdm9pZCBzMmlvX2xpbmsoc3RydWN0IHMyaW9fbmljICogc3AsIGludCBsaW5rKQorc3RhdGljIHZvaWQgczJpb19saW5rKHN0cnVjdCBzMmlvX25pYyAqc3AsIGludCBsaW5rKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgc3AtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopc3AtPmRldjsKKwlzdHJ1Y3Qgc3dTdGF0ICpzd3N0YXRzID0gJnNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0OwogCiAJaWYgKGxpbmsgIT0gc3AtPmxhc3RfbGlua19zdGF0ZSkgewogCQlpbml0X3R0aShzcCwgbGluayk7CkBAIC03NTcxLDE2ICs3NTc4LDE2IEBACiAJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBMaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7CiAJCQlzMmlvX3N0b3BfYWxsX3R4X3F1ZXVlKHNwKTsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCQlpZihzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX3VwX2NudCkKLQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmxpbmtfdXBfdGltZSA9Ci0JCQkJamlmZmllcyAtIHNwLT5zdGFydF90aW1lOwotCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua19kb3duX2NudCsrOworCQkJaWYgKHN3c3RhdHMtPmxpbmtfdXBfY250KQorCQkJCXN3c3RhdHMtPmxpbmtfdXBfdGltZSA9CisJCQkJCWppZmZpZXMgLSBzcC0+c3RhcnRfdGltZTsKKwkJCXN3c3RhdHMtPmxpbmtfZG93bl9jbnQrKzsKIAkJfSBlbHNlIHsKIAkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IExpbmsgVXBcbiIsIGRldi0+bmFtZSk7Ci0JCQlpZiAoc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua19kb3duX2NudCkKLQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmxpbmtfZG93bl90aW1lID0KLQkJCQlqaWZmaWVzIC0gc3AtPnN0YXJ0X3RpbWU7Ci0JCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX3VwX2NudCsrOworCQkJaWYgKHN3c3RhdHMtPmxpbmtfZG93bl9jbnQpCisJCQkJc3dzdGF0cy0+bGlua19kb3duX3RpbWUgPQorCQkJCQlqaWZmaWVzIC0gc3AtPnN0YXJ0X3RpbWU7CisJCQlzd3N0YXRzLT5saW5rX3VwX2NudCsrOwogCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCQkJczJpb193YWtlX2FsbF90eF9xdWV1ZShzcCk7CiAJCX0KQEAgLTc2MDAsNyArNzYwNyw3IEBACiAgKiAgdm9pZAogICovCiAKLXN0YXRpYyB2b2lkIHMyaW9faW5pdF9wY2koc3RydWN0IHMyaW9fbmljICogc3ApCitzdGF0aWMgdm9pZCBzMmlvX2luaXRfcGNpKHN0cnVjdCBzMmlvX25pYyAqc3ApCiB7CiAJdTE2IHBjaV9jbWQgPSAwLCBwY2l4X2NtZCA9IDA7CiAKQEAgLTc2MjAsMjAgKzc2MjcsMTggQEAKIH0KIAogc3RhdGljIGludCBzMmlvX3ZlcmlmeV9wYXJtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCAqZGV2X2ludHJfdHlwZSwKLQl1OCAqZGV2X211bHRpcSkKKwkJCSAgICB1OCAqZGV2X211bHRpcSkKIHsKLQlpZiAoKHR4X2ZpZm9fbnVtID4gTUFYX1RYX0ZJRk9TKSB8fAotCQkodHhfZmlmb19udW0gPCAxKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IFJlcXVlc3RlZCBudW1iZXIgb2YgdHggZmlmb3MgIgotCQkJIiglZCkgbm90IHN1cHBvcnRlZFxuIiwgdHhfZmlmb19udW0pOworCWlmICgodHhfZmlmb19udW0gPiBNQVhfVFhfRklGT1MpIHx8ICh0eF9maWZvX251bSA8IDEpKSB7CisJCURCR19QUklOVChFUlJfREJHLCAiUmVxdWVzdGVkIG51bWJlciBvZiB0eCBmaWZvcyAiCisJCQkgICIoJWQpIG5vdCBzdXBwb3J0ZWRcbiIsIHR4X2ZpZm9fbnVtKTsKIAogCQlpZiAodHhfZmlmb19udW0gPCAxKQogCQkJdHhfZmlmb19udW0gPSAxOwogCQllbHNlCiAJCQl0eF9maWZvX251bSA9IE1BWF9UWF9GSUZPUzsKIAotCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IERlZmF1bHQgdG8gJWQgIiwgdHhfZmlmb19udW0pOwotCQlEQkdfUFJJTlQoRVJSX0RCRywgInR4IGZpZm9zXG4iKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJEZWZhdWx0IHRvICVkIHR4IGZpZm9zXG4iLCB0eF9maWZvX251bSk7CiAJfQogCiAJaWYgKG11bHRpcSkKQEAgLTc2NDIsNDQgKzc2NDcsNDQgQEAKIAlpZiAodHhfc3RlZXJpbmdfdHlwZSAmJiAoMSA9PSB0eF9maWZvX251bSkpIHsKIAkJaWYgKHR4X3N0ZWVyaW5nX3R5cGUgIT0gVFhfREVGQVVMVF9TVEVFUklORykKIAkJCURCR19QUklOVChFUlJfREJHLAotCQkJCSJzMmlvOiBUeCBzdGVlcmluZyBpcyBub3Qgc3VwcG9ydGVkIHdpdGggIgotCQkJCSJvbmUgZmlmby4gRGlzYWJsaW5nIFR4IHN0ZWVyaW5nLlxuIik7CisJCQkJICAiVHggc3RlZXJpbmcgaXMgbm90IHN1cHBvcnRlZCB3aXRoICIKKwkJCQkgICJvbmUgZmlmby4gRGlzYWJsaW5nIFR4IHN0ZWVyaW5nLlxuIik7CiAJCXR4X3N0ZWVyaW5nX3R5cGUgPSBOT19TVEVFUklORzsKIAl9CiAKIAlpZiAoKHR4X3N0ZWVyaW5nX3R5cGUgPCBOT19TVEVFUklORykgfHwKLQkJKHR4X3N0ZWVyaW5nX3R5cGUgPiBUWF9ERUZBVUxUX1NURUVSSU5HKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IFJlcXVlc3RlZCB0cmFuc21pdCBzdGVlcmluZyBub3QgIgotCQkJICJzdXBwb3J0ZWRcbiIpOwotCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IERpc2FibGluZyB0cmFuc21pdCBzdGVlcmluZ1xuIik7CisJICAgICh0eF9zdGVlcmluZ190eXBlID4gVFhfREVGQVVMVF9TVEVFUklORykpIHsKKwkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkgICJSZXF1ZXN0ZWQgdHJhbnNtaXQgc3RlZXJpbmcgbm90IHN1cHBvcnRlZFxuIik7CisJCURCR19QUklOVChFUlJfREJHLCAiRGlzYWJsaW5nIHRyYW5zbWl0IHN0ZWVyaW5nXG4iKTsKIAkJdHhfc3RlZXJpbmdfdHlwZSA9IE5PX1NURUVSSU5HOwogCX0KIAogCWlmIChyeF9yaW5nX251bSA+IE1BWF9SWF9SSU5HUykgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IFJlcXVlc3RlZCBudW1iZXIgb2YgcnggcmluZ3Mgbm90ICIKLQkJCSAic3VwcG9ydGVkXG4iKTsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBEZWZhdWx0IHRvICVkIHJ4IHJpbmdzXG4iLAotCQkJTUFYX1JYX1JJTkdTKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkgICJSZXF1ZXN0ZWQgbnVtYmVyIG9mIHJ4IHJpbmdzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIkRlZmF1bHQgdG8gJWQgcnggcmluZ3NcbiIsCisJCQkgIE1BWF9SWF9SSU5HUyk7CiAJCXJ4X3JpbmdfbnVtID0gTUFYX1JYX1JJTkdTOwogCX0KIAogCWlmICgoKmRldl9pbnRyX3R5cGUgIT0gSU5UQSkgJiYgKCpkZXZfaW50cl90eXBlICE9IE1TSV9YKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IFdyb25nIGludHJfdHlwZSByZXF1ZXN0ZWQuICIKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJXcm9uZyBpbnRyX3R5cGUgcmVxdWVzdGVkLiAiCiAJCQkgICJEZWZhdWx0aW5nIHRvIElOVEFcbiIpOwogCQkqZGV2X2ludHJfdHlwZSA9IElOVEE7CiAJfQogCiAJaWYgKCgqZGV2X2ludHJfdHlwZSA9PSBNU0lfWCkgJiYKLQkJCSgocGRldi0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfSEVSQ19XSU4pICYmCi0JCQkocGRldi0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfSEVSQ19VTkkpKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IFhmcmFtZSBJIGRvZXMgbm90IHN1cHBvcnQgTVNJX1guICIKLQkJCQkJIkRlZmF1bHRpbmcgdG8gSU5UQVxuIik7CisJICAgICgocGRldi0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfSEVSQ19XSU4pICYmCisJICAgICAocGRldi0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfSEVSQ19VTkkpKSkgeworCQlEQkdfUFJJTlQoRVJSX0RCRywgIlhmcmFtZSBJIGRvZXMgbm90IHN1cHBvcnQgTVNJX1guICIKKwkJCSAgIkRlZmF1bHRpbmcgdG8gSU5UQVxuIik7CiAJCSpkZXZfaW50cl90eXBlID0gSU5UQTsKIAl9CiAKIAlpZiAoKHJ4X3JpbmdfbW9kZSAhPSAxKSAmJiAocnhfcmluZ19tb2RlICE9IDIpKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiczJpbzogUmVxdWVzdGVkIHJpbmcgbW9kZSBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBEZWZhdWx0aW5nIHRvIDEtYnVmZmVyIG1vZGVcbiIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIlJlcXVlc3RlZCByaW5nIG1vZGUgbm90IHN1cHBvcnRlZFxuIik7CisJCURCR19QUklOVChFUlJfREJHLCAiRGVmYXVsdGluZyB0byAxLWJ1ZmZlciBtb2RlXG4iKTsKIAkJcnhfcmluZ19tb2RlID0gMTsKIAl9CiAJcmV0dXJuIFNVQ0NFU1M7CkBAIC03NzEyLDggKzc3MTcsOCBAQAogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJ0c19kc19tZW1fY3RybCk7CiAKIAlyZXR1cm4gd2FpdF9mb3JfY21kX2NvbXBsZXRlKCZiYXIwLT5ydHNfZHNfbWVtX2N0cmwsCi0JCQkJUlRTX0RTX01FTV9DVFJMX1NUUk9CRV9DTURfQkVJTkdfRVhFQ1VURUQsCi0JCQkJUzJJT19CSVRfUkVTRVQpOworCQkJCSAgICAgUlRTX0RTX01FTV9DVFJMX1NUUk9CRV9DTURfQkVJTkdfRVhFQ1VURUQsCisJCQkJICAgICBTMklPX0JJVF9SRVNFVCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgczJpb19uZXRkZXZfb3BzID0gewpAQCAtNzc1OSw4ICs3NzY0LDggQEAKIAl1NjQgdmFsNjQgPSAwLCB0bXA2NCA9IDA7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gTlVMTDsKIAl1MTYgc3ViaWQ7Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7CisJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKIAlpbnQgbW9kZTsKIAl1OCBkZXZfaW50cl90eXBlID0gaW50cl90eXBlOwogCXU4IGRldl9tdWx0aXEgPSAwOwpAQCAtNzc2OSwzMSArNzc3NCwzMyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoKHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkgeworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsCi0JCQkgICJzMmlvX2luaXRfbmljOiBwY2lfZW5hYmxlX2RldmljZSBmYWlsZWRcbiIpOworCQkJICAiJXM6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSkgewotCQlEQkdfUFJJTlQoSU5JVF9EQkcsICJzMmlvX2luaXRfbmljOiBVc2luZyA2NGJpdCBETUFcbiIpOworCQlEQkdfUFJJTlQoSU5JVF9EQkcsICIlczogVXNpbmcgNjRiaXQgRE1BXG4iLCBfX2Z1bmNfXyk7CiAJCWRtYV9mbGFnID0gdHJ1ZTsKLQkJaWYgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzawotCQkgICAgKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSB7CisJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKIAkJCURCR19QUklOVChFUlJfREJHLAotCQkJCSAgIlVuYWJsZSB0byBvYnRhaW4gNjRiaXQgRE1BIGZvciBcCi0JCQkJCWNvbnNpc3RlbnQgYWxsb2NhdGlvbnNcbiIpOworCQkJCSAgIlVuYWJsZSB0byBvYnRhaW4gNjRiaXQgRE1BICIKKwkJCQkgICJmb3IgY29uc2lzdGVudCBhbGxvY2F0aW9uc1xuIik7CiAJCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCX0gZWxzZSBpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJREJHX1BSSU5UKElOSVRfREJHLCAiczJpb19pbml0X25pYzogVXNpbmcgMzJiaXQgRE1BXG4iKTsKKwkJREJHX1BSSU5UKElOSVRfREJHLCAiJXM6IFVzaW5nIDMyYml0IERNQVxuIiwgX19mdW5jX18pOwogCX0gZWxzZSB7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWlmICgocmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBzMmlvX2RyaXZlcl9uYW1lKSkpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogUmVxdWVzdCBSZWdpb25zIGZhaWxlZCAtICV4IFxuIiwgX19mdW5jX18sIHJldCk7CisJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBzMmlvX2RyaXZlcl9uYW1lKTsKKwlpZiAocmV0KSB7CisJCURCR19QUklOVChFUlJfREJHLCAiJXM6IFJlcXVlc3QgUmVnaW9ucyBmYWlsZWQgLSAleFxuIiwKKwkJCSAgX19mdW5jX18sIHJldCk7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNzgyNyw3ICs3ODM0LDcgQEAKIAlzcC0+Y29uZmlnLmludHJfdHlwZSA9IGRldl9pbnRyX3R5cGU7CiAKIAlpZiAoKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0hFUkNfV0lOKSB8fAotCQkocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSEVSQ19VTkkpKQorCSAgICAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSEVSQ19VTkkpKQogCQlzcC0+ZGV2aWNlX3R5cGUgPSBYRlJBTUVfSUlfREVWSUNFOwogCWVsc2UKIAkJc3AtPmRldmljZV90eXBlID0gWEZSQU1FX0lfREVWSUNFOwpAQCAtNzg0NCw4ICs3ODUxLDggQEAKIAkgKiB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBub3Qgbm90IHNwZWNpZmllZCBkdXJpbmcgbG9hZCB0aW1lLCB0aGV5CiAJICogYXJlIGluaXRpYWxpemVkIHdpdGggZGVmYXVsdCB2YWx1ZXMuCiAJICovCi0JbWFjX2NvbnRyb2wgPSAmc3AtPm1hY19jb250cm9sOwogCWNvbmZpZyA9ICZzcC0+Y29uZmlnOworCW1hY19jb250cm9sID0gJnNwLT5tYWNfY29udHJvbDsKIAogCWNvbmZpZy0+bmFwaSA9IG5hcGk7CiAJY29uZmlnLT50eF9zdGVlcmluZ190eXBlID0gdHhfc3RlZXJpbmdfdHlwZTsKQEAgLTc4NTgsMTYgKzc4NjUsMTYgQEAKIAogCS8qIEluaXRpYWxpemUgdGhlIGZpZm9zIHVzZWQgZm9yIHR4IHN0ZWVyaW5nICovCiAJaWYgKGNvbmZpZy0+dHhfZmlmb19udW0gPCA1KSB7Ci0JCQlpZiAoY29uZmlnLT50eF9maWZvX251bSAgPT0gMSkKLQkJCQlzcC0+dG90YWxfdGNwX2ZpZm9zID0gMTsKLQkJCWVsc2UKLQkJCQlzcC0+dG90YWxfdGNwX2ZpZm9zID0gY29uZmlnLT50eF9maWZvX251bSAtIDE7Ci0JCQlzcC0+dWRwX2ZpZm9faWR4ID0gY29uZmlnLT50eF9maWZvX251bSAtIDE7Ci0JCQlzcC0+dG90YWxfdWRwX2ZpZm9zID0gMTsKLQkJCXNwLT5vdGhlcl9maWZvX2lkeCA9IHNwLT50b3RhbF90Y3BfZmlmb3MgLSAxOworCQlpZiAoY29uZmlnLT50eF9maWZvX251bSAgPT0gMSkKKwkJCXNwLT50b3RhbF90Y3BfZmlmb3MgPSAxOworCQllbHNlCisJCQlzcC0+dG90YWxfdGNwX2ZpZm9zID0gY29uZmlnLT50eF9maWZvX251bSAtIDE7CisJCXNwLT51ZHBfZmlmb19pZHggPSBjb25maWctPnR4X2ZpZm9fbnVtIC0gMTsKKwkJc3AtPnRvdGFsX3VkcF9maWZvcyA9IDE7CisJCXNwLT5vdGhlcl9maWZvX2lkeCA9IHNwLT50b3RhbF90Y3BfZmlmb3MgLSAxOwogCX0gZWxzZSB7CiAJCXNwLT50b3RhbF90Y3BfZmlmb3MgPSAodHhfZmlmb19udW0gLSBGSUZPX1VEUF9NQVhfTlVNIC0KLQkJCQkJCUZJRk9fT1RIRVJfTUFYX05VTSk7CisJCQkJICAgICAgIEZJRk9fT1RIRVJfTUFYX05VTSk7CiAJCXNwLT51ZHBfZmlmb19pZHggPSBzcC0+dG90YWxfdGNwX2ZpZm9zOwogCQlzcC0+dG90YWxfdWRwX2ZpZm9zID0gRklGT19VRFBfTUFYX05VTTsKIAkJc3AtPm90aGVyX2ZpZm9faWR4ID0gc3AtPnVkcF9maWZvX2lkeCArIEZJRk9fVURQX01BWF9OVU07CkBAIC03ODc1LDggKzc4ODIsMTAgQEAKIAogCWNvbmZpZy0+bXVsdGlxID0gZGV2X211bHRpcTsKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKSB7Ci0JCWNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuID0gdHhfZmlmb19sZW5baV07Ci0JCWNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fcHJpb3JpdHkgPSBpOworCQlzdHJ1Y3QgdHhfZmlmb19jb25maWcgKnR4X2NmZyA9ICZjb25maWctPnR4X2NmZ1tpXTsKKworCQl0eF9jZmctPmZpZm9fbGVuID0gdHhfZmlmb19sZW5baV07CisJCXR4X2NmZy0+Zmlmb19wcmlvcml0eSA9IGk7CiAJfQogCiAJLyogbWFwcGluZyB0aGUgUW9TIHByaW9yaXR5IHRvIHRoZSBjb25maWd1cmVkIGZpZm9zICovCkBAIC03ODkwLDkgKzc4OTksMTAgQEAKIAogCWNvbmZpZy0+dHhfaW50cl90eXBlID0gVFhEX0lOVF9UWVBFX1VUSUxaOwogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnR4X2ZpZm9fbnVtOyBpKyspIHsKLQkJY29uZmlnLT50eF9jZmdbaV0uZl9ub19zbm9vcCA9Ci0JCSAgICAoTk9fU05PT1BfVFhEIHwgTk9fU05PT1BfVFhEX0JVRkZFUik7Ci0JCWlmIChjb25maWctPnR4X2NmZ1tpXS5maWZvX2xlbiA8IDY1KSB7CisJCXN0cnVjdCB0eF9maWZvX2NvbmZpZyAqdHhfY2ZnID0gJmNvbmZpZy0+dHhfY2ZnW2ldOworCisJCXR4X2NmZy0+Zl9ub19zbm9vcCA9IChOT19TTk9PUF9UWEQgfCBOT19TTk9PUF9UWERfQlVGRkVSKTsKKwkJaWYgKHR4X2NmZy0+Zmlmb19sZW4gPCA2NSkgewogCQkJY29uZmlnLT50eF9pbnRyX3R5cGUgPSBUWERfSU5UX1RZUEVfUEVSX0xJU1Q7CiAJCQlicmVhazsKIAkJfQpAQCAtNzkwMywyMCArNzkxMywyMyBAQAogCS8qIFJ4IHNpZGUgcGFyYW1ldGVycy4gKi8KIAljb25maWctPnJ4X3JpbmdfbnVtID0gcnhfcmluZ19udW07CiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQljb25maWctPnJ4X2NmZ1tpXS5udW1fcnhkID0gcnhfcmluZ19zeltpXSAqCi0JCSAgICAocnhkX2NvdW50W3NwLT5yeGRfbW9kZV0gKyAxKTsKLQkJY29uZmlnLT5yeF9jZmdbaV0ucmluZ19wcmlvcml0eSA9IGk7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9idWZzX2xlZnQgPSAwOwotCQltYWNfY29udHJvbC0+cmluZ3NbaV0ucnhkX21vZGUgPSBzcC0+cnhkX21vZGU7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeGRfY291bnQgPSByeGRfY291bnRbc3AtPnJ4ZF9tb2RlXTsKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnBkZXYgPSBzcC0+cGRldjsKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLmRldiA9IHNwLT5kZXY7CisJCXN0cnVjdCByeF9yaW5nX2NvbmZpZyAqcnhfY2ZnID0gJmNvbmZpZy0+cnhfY2ZnW2ldOworCQlzdHJ1Y3QgcmluZ19pbmZvICpyaW5nID0gJm1hY19jb250cm9sLT5yaW5nc1tpXTsKKworCQlyeF9jZmctPm51bV9yeGQgPSByeF9yaW5nX3N6W2ldICogKHJ4ZF9jb3VudFtzcC0+cnhkX21vZGVdICsgMSk7CisJCXJ4X2NmZy0+cmluZ19wcmlvcml0eSA9IGk7CisJCXJpbmctPnJ4X2J1ZnNfbGVmdCA9IDA7CisJCXJpbmctPnJ4ZF9tb2RlID0gc3AtPnJ4ZF9tb2RlOworCQlyaW5nLT5yeGRfY291bnQgPSByeGRfY291bnRbc3AtPnJ4ZF9tb2RlXTsKKwkJcmluZy0+cGRldiA9IHNwLT5wZGV2OworCQlyaW5nLT5kZXYgPSBzcC0+ZGV2OwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nX251bTsgaSsrKSB7Ci0JCWNvbmZpZy0+cnhfY2ZnW2ldLnJpbmdfb3JnID0gUklOR19PUkdfQlVGRjE7Ci0JCWNvbmZpZy0+cnhfY2ZnW2ldLmZfbm9fc25vb3AgPQotCQkgICAgKE5PX1NOT09QX1JYRCB8IE5PX1NOT09QX1JYRF9CVUZGRVIpOworCQlzdHJ1Y3QgcnhfcmluZ19jb25maWcgKnJ4X2NmZyA9ICZjb25maWctPnJ4X2NmZ1tpXTsKKworCQlyeF9jZmctPnJpbmdfb3JnID0gUklOR19PUkdfQlVGRjE7CisJCXJ4X2NmZy0+Zl9ub19zbm9vcCA9IChOT19TTk9PUF9SWEQgfCBOT19TTk9PUF9SWERfQlVGRkVSKTsKIAl9CiAKIAkvKiAgU2V0dGluZyBNYWMgQ29udHJvbCBwYXJhbWV0ZXJzICovCkBAIC03OTI3LDggKzc5NDAsNyBAQAogCiAJLyogIGluaXRpYWxpemUgdGhlIHNoYXJlZCBtZW1vcnkgdXNlZCBieSB0aGUgTklDIGFuZCB0aGUgaG9zdCAqLwogCWlmIChpbml0X3NoYXJlZF9tZW0oc3ApKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIiwKLQkJCSAgZGV2LT5uYW1lKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG1lbV9hbGxvY19mYWlsZWQ7CiAJfQpAQCAtNzk1MCwxMiArNzk2MiwxMyBAQAogCX0KIAogCWRldi0+aXJxID0gcGRldi0+aXJxOwotCWRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIHNwLT5iYXIwOworCWRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpc3AtPmJhcjA7CiAKIAkvKiBJbml0aWFsaXppbmcgdGhlIEJBUjEgYWRkcmVzcyBhcyB0aGUgc3RhcnQgb2YgdGhlIEZJRk8gcG9pbnRlci4gKi8KIAlmb3IgKGogPSAwOyBqIDwgTUFYX1RYX0ZJRk9TOyBqKyspIHsKLQkJbWFjX2NvbnRyb2wtPnR4X0ZJRk9fc3RhcnRbal0gPSAoc3RydWN0IFR4RklGT19lbGVtZW50IF9faW9tZW0gKikKLQkJICAgIChzcC0+YmFyMSArIChqICogMHgwMDAyMDAwMCkpOworCQltYWNfY29udHJvbC0+dHhfRklGT19zdGFydFtqXSA9CisJCQkoc3RydWN0IFR4RklGT19lbGVtZW50IF9faW9tZW0gKikKKwkJCShzcC0+YmFyMSArIChqICogMHgwMDAyMDAwMCkpOwogCX0KIAogCS8qICBEcml2ZXIgZW50cnkgcG9pbnRzICovCkBAIC03OTgwLDcgKzc5OTMsNyBAQAogCiAJLyogU2V0dGluZyBzd2FwcGVyIGNvbnRyb2wgb24gdGhlIE5JQywgZm9yIHByb3BlciByZXNldCBvcGVyYXRpb24gKi8KIAlpZiAoczJpb19zZXRfc3dhcHBlcihzcCkpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczpzd2FwcGVyIHNldHRpbmdzIGFyZSB3cm9uZ1xuIiwKKwkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogc3dhcHBlciBzZXR0aW5ncyBhcmUgd3JvbmdcbiIsCiAJCQkgIGRldi0+bmFtZSk7CiAJCXJldCA9IC1FQUdBSU47CiAJCWdvdG8gc2V0X3N3YXBfZmFpbGVkOwpAQCAtNzk5MCw4ICs4MDAzLDggQEAKIAlpZiAoc3AtPmRldmljZV90eXBlICYgWEZSQU1FX0lJX0RFVklDRSkgewogCQltb2RlID0gczJpb192ZXJpZnlfcGNpX21vZGUoc3ApOwogCQlpZiAobW9kZSA8IDApIHsKLQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6ICIsIF9fZnVuY19fKTsKLQkJCURCR19QUklOVChFUlJfREJHLCAiIFVuc3VwcG9ydGVkIFBDSSBidXMgbW9kZVxuIik7CisJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBVbnN1cHBvcnRlZCBQQ0kgYnVzIG1vZGVcbiIsCisJCQkJICBfX2Z1bmNfXyk7CiAJCQlyZXQgPSAtRUJBRFNMVDsKIAkJCWdvdG8gc2V0X3N3YXBfZmFpbGVkOwogCQl9CkBAIC04MDA5LDE1ICs4MDIyLDE3IEBACiAJCWlmIChyZXQpIHsKIAogCQkJREJHX1BSSU5UKEVSUl9EQkcsCi0JCQkgICJzMmlvOiBNU0ktWCByZXF1ZXN0ZWQgYnV0IGZhaWxlZCB0byBlbmFibGVcbiIpOworCQkJCSAgIk1TSS1YIHJlcXVlc3RlZCBidXQgZmFpbGVkIHRvIGVuYWJsZVxuIik7CiAJCQlzcC0+Y29uZmlnLmludHJfdHlwZSA9IElOVEE7CiAJCX0KIAl9CiAKIAlpZiAoY29uZmlnLT5pbnRyX3R5cGUgPT0gIE1TSV9YKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtIDsgaSsrKQotCQkJbmV0aWZfbmFwaV9hZGQoZGV2LCAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldLm5hcGksCi0JCQkJczJpb19wb2xsX21zaXgsIDY0KTsKKwkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW0gOyBpKyspIHsKKwkJCXN0cnVjdCByaW5nX2luZm8gKnJpbmcgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldOworCisJCQluZXRpZl9uYXBpX2FkZChkZXYsICZyaW5nLT5uYXBpLCBzMmlvX3BvbGxfbXNpeCwgNjQpOworCQl9CiAJfSBlbHNlIHsKIAkJbmV0aWZfbmFwaV9hZGQoZGV2LCAmc3AtPm5hcGksIHMyaW9fcG9sbF9pbnRhLCA2NCk7CiAJfQpAQCAtODAzOCwxMiArODA1MywxMyBAQAogCSAqLwogCWJhcjAgPSBzcC0+YmFyMDsKIAl2YWw2NCA9IFJNQUNfQUREUl9DTURfTUVNX1JEIHwgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX05FV19DTUQgfAotCSAgICBSTUFDX0FERFJfQ01EX01FTV9PRkZTRVQoMCArIFMySU9fTUFDX0FERFJfU1RBUlRfT0ZGU0VUKTsKKwkJUk1BQ19BRERSX0NNRF9NRU1fT0ZGU0VUKDAgKyBTMklPX01BQ19BRERSX1NUQVJUX09GRlNFVCk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0pOwogCXdhaXRfZm9yX2NtZF9jb21wbGV0ZSgmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0sCi0JCSAgICAgIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HLCBTMklPX0JJVF9SRVNFVCk7CisJCQkgICAgICBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORywKKwkJCSAgICAgIFMySU9fQklUX1JFU0VUKTsKIAl0bXA2NCA9IHJlYWRxKCZiYXIwLT5ybWFjX2FkZHJfZGF0YTBfbWVtKTsKLQltYWNfZG93biA9ICh1MzIpIHRtcDY0OworCW1hY19kb3duID0gKHUzMil0bXA2NDsKIAltYWNfdXAgPSAodTMyKSAodG1wNjQgPj4gMzIpOwogCiAJc3AtPmRlZl9tYWNfYWRkclswXS5tYWNfYWRkclszXSA9ICh1OCkgKG1hY191cCk7CkBAIC04MDc0LDEwICs4MDkwLDEwIEBACiAKIAkvKiBDb25maWd1cmUgTVNJWCB2ZWN0b3IgZm9yIG51bWJlciBvZiByaW5ncyBjb25maWd1cmVkIHBsdXMgb25lICovCiAJaWYgKChzcC0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lJX0RFVklDRSkgJiYKLQkJKGNvbmZpZy0+aW50cl90eXBlID09IE1TSV9YKSkKKwkgICAgKGNvbmZpZy0+aW50cl90eXBlID09IE1TSV9YKSkKIAkJc3AtPm51bV9lbnRyaWVzID0gY29uZmlnLT5yeF9yaW5nX251bSArIDE7CiAKLQkgLyogU3RvcmUgdGhlIHZhbHVlcyBvZiB0aGUgTVNJWCB0YWJsZSBpbiB0aGUgczJpb19uaWMgc3RydWN0dXJlICovCisJLyogU3RvcmUgdGhlIHZhbHVlcyBvZiB0aGUgTVNJWCB0YWJsZSBpbiB0aGUgczJpb19uaWMgc3RydWN0dXJlICovCiAJc3RvcmVfeG1zaV9kYXRhKHNwKTsKIAkvKiByZXNldCBOaWMgYW5kIGJyaW5nIGl0IHRvIGtub3duIHN0YXRlICovCiAJczJpb19yZXNldChzcCk7CkBAIC04MDg5LDggKzgxMDUsMTEgQEAKIAlzcC0+c3RhdGUgPSAwOwogCiAJLyogSW5pdGlhbGl6ZSBzcGlubG9ja3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc3AtPmNvbmZpZy50eF9maWZvX251bTsgaSsrKQotCQlzcGluX2xvY2tfaW5pdCgmbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnR4X2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBzcC0+Y29uZmlnLnR4X2ZpZm9fbnVtOyBpKyspIHsKKwkJc3RydWN0IGZpZm9faW5mbyAqZmlmbyA9ICZtYWNfY29udHJvbC0+Zmlmb3NbaV07CisKKwkJc3Bpbl9sb2NrX2luaXQoJmZpZm8tPnR4X2xvY2spOworCX0KIAogCS8qCiAJICogU1hFLTAwMjogQ29uZmlndXJlIGxpbmsgYW5kIGFjdGl2aXR5IExFRCB0byBpbml0IHN0YXRlCkBAIC04MTAyLDcgKzgxMjEsNyBAQAogCQl2YWw2NCB8PSAweDAwMDA4MDAwMDAwMDAwMDBVTEw7CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPmdwaW9fY29udHJvbCk7CiAJCXZhbDY0ID0gMHgwNDExMDQwNDAwMDAwMDAwVUxMOwotCQl3cml0ZXEodmFsNjQsICh2b2lkIF9faW9tZW0gKikgYmFyMCArIDB4MjcwMCk7CisJCXdyaXRlcSh2YWw2NCwgKHZvaWQgX19pb21lbSAqKWJhcjAgKyAweDI3MDApOwogCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5ncGlvX2NvbnRyb2wpOwogCX0KIApAQCAtODExNSwzMCArODEzNCwyOSBAQAogCX0KIAlzMmlvX3ZwZF9yZWFkKHNwKTsKIAlEQkdfUFJJTlQoRVJSX0RCRywgIkNvcHlyaWdodChjKSAyMDAyLTIwMDcgTmV0ZXJpb24gSW5jLlxuIik7Ci0JREJHX1BSSU5UKEVSUl9EQkcsICIlczogTmV0ZXJpb24gJXMgKHJldiAlZClcbiIsZGV2LT5uYW1lLAorCURCR19QUklOVChFUlJfREJHLCAiJXM6IE5ldGVyaW9uICVzIChyZXYgJWQpXG4iLCBkZXYtPm5hbWUsCiAJCSAgc3AtPnByb2R1Y3RfbmFtZSwgcGRldi0+cmV2aXNpb24pOwogCURCR19QUklOVChFUlJfREJHLCAiJXM6IERyaXZlciB2ZXJzaW9uICVzXG4iLCBkZXYtPm5hbWUsCiAJCSAgczJpb19kcml2ZXJfdmVyc2lvbik7Ci0JREJHX1BSSU5UKEVSUl9EQkcsICIlczogTUFDIEFERFI6ICVwTVxuIiwgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKLQlEQkdfUFJJTlQoRVJSX0RCRywgIlNFUklBTCBOVU1CRVI6ICVzXG4iLCBzcC0+c2VyaWFsX251bSk7CisJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTUFDIEFkZHJlc3M6ICVwTVxuIiwgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKKwlEQkdfUFJJTlQoRVJSX0RCRywgIlNlcmlhbCBudW1iZXI6ICVzXG4iLCBzcC0+c2VyaWFsX251bSk7CiAJaWYgKHNwLT5kZXZpY2VfdHlwZSAmIFhGUkFNRV9JSV9ERVZJQ0UpIHsKIAkJbW9kZSA9IHMyaW9fcHJpbnRfcGNpX21vZGUoc3ApOwogCQlpZiAobW9kZSA8IDApIHsKLQkJCURCR19QUklOVChFUlJfREJHLCAiIFVuc3VwcG9ydGVkIFBDSSBidXMgbW9kZVxuIik7CiAJCQlyZXQgPSAtRUJBRFNMVDsKIAkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJCQlnb3RvIHNldF9zd2FwX2ZhaWxlZDsKIAkJfQogCX0KLQlzd2l0Y2goc3AtPnJ4ZF9tb2RlKSB7Ci0JCWNhc2UgUlhEX01PREVfMToKLQkJICAgIERCR19QUklOVChFUlJfREJHLCAiJXM6IDEtQnVmZmVyIHJlY2VpdmUgbW9kZSBlbmFibGVkXG4iLAotCQkJCQkJZGV2LT5uYW1lKTsKLQkJICAgIGJyZWFrOwotCQljYXNlIFJYRF9NT0RFXzNCOgotCQkgICAgREJHX1BSSU5UKEVSUl9EQkcsICIlczogMi1CdWZmZXIgcmVjZWl2ZSBtb2RlIGVuYWJsZWRcbiIsCi0JCQkJCQlkZXYtPm5hbWUpOwotCQkgICAgYnJlYWs7CisJc3dpdGNoIChzcC0+cnhkX21vZGUpIHsKKwljYXNlIFJYRF9NT0RFXzE6CisJCURCR19QUklOVChFUlJfREJHLCAiJXM6IDEtQnVmZmVyIHJlY2VpdmUgbW9kZSBlbmFibGVkXG4iLAorCQkJICBkZXYtPm5hbWUpOworCQlicmVhazsKKwljYXNlIFJYRF9NT0RFXzNCOgorCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiAyLUJ1ZmZlciByZWNlaXZlIG1vZGUgZW5hYmxlZFxuIiwKKwkJCSAgZGV2LT5uYW1lKTsKKwkJYnJlYWs7CiAJfQogCiAJc3dpdGNoIChzcC0+Y29uZmlnLm5hcGkpIHsKQEAgLTgxNTEsNDggKzgxNjksNTQgQEAKIAl9CiAKIAlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBVc2luZyAlZCBUeCBmaWZvKHMpXG4iLCBkZXYtPm5hbWUsCi0JCXNwLT5jb25maWcudHhfZmlmb19udW0pOworCQkgIHNwLT5jb25maWcudHhfZmlmb19udW0pOwogCiAJREJHX1BSSU5UKEVSUl9EQkcsICIlczogVXNpbmcgJWQgUnggcmluZyhzKVxuIiwgZGV2LT5uYW1lLAogCQkgIHNwLT5jb25maWcucnhfcmluZ19udW0pOwogCi0Jc3dpdGNoKHNwLT5jb25maWcuaW50cl90eXBlKSB7Ci0JCWNhc2UgSU5UQToKLQkJICAgIERCR19QUklOVChFUlJfREJHLCAiJXM6IEludGVycnVwdCB0eXBlIElOVEFcbiIsIGRldi0+bmFtZSk7Ci0JCSAgICBicmVhazsKLQkJY2FzZSBNU0lfWDoKLQkJICAgIERCR19QUklOVChFUlJfREJHLCAiJXM6IEludGVycnVwdCB0eXBlIE1TSS1YXG4iLCBkZXYtPm5hbWUpOwotCQkgICAgYnJlYWs7CisJc3dpdGNoIChzcC0+Y29uZmlnLmludHJfdHlwZSkgeworCWNhc2UgSU5UQToKKwkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogSW50ZXJydXB0IHR5cGUgSU5UQVxuIiwgZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBNU0lfWDoKKwkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogSW50ZXJydXB0IHR5cGUgTVNJLVhcbiIsIGRldi0+bmFtZSk7CisJCWJyZWFrOwogCX0KIAlpZiAoc3AtPmNvbmZpZy5tdWx0aXEpIHsKLQkJZm9yIChpID0gMDsgaSA8IHNwLT5jb25maWcudHhfZmlmb19udW07IGkrKykKLQkJCW1hY19jb250cm9sLT5maWZvc1tpXS5tdWx0aXEgPSBjb25maWctPm11bHRpcTsKKwkJZm9yIChpID0gMDsgaSA8IHNwLT5jb25maWcudHhfZmlmb19udW07IGkrKykgeworCQkJc3RydWN0IGZpZm9faW5mbyAqZmlmbyA9ICZtYWNfY29udHJvbC0+Zmlmb3NbaV07CisKKwkJCWZpZm8tPm11bHRpcSA9IGNvbmZpZy0+bXVsdGlxOworCQl9CiAJCURCR19QUklOVChFUlJfREJHLCAiJXM6IE11bHRpcXVldWUgc3VwcG9ydCBlbmFibGVkXG4iLAotCQkJZGV2LT5uYW1lKTsKKwkJCSAgZGV2LT5uYW1lKTsKIAl9IGVsc2UKIAkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTXVsdGlxdWV1ZSBzdXBwb3J0IGRpc2FibGVkXG4iLAotCQkJZGV2LT5uYW1lKTsKKwkJCSAgZGV2LT5uYW1lKTsKIAogCXN3aXRjaCAoc3AtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlKSB7CiAJY2FzZSBOT19TVEVFUklORzoKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTm8gc3RlZXJpbmcgZW5hYmxlZCBmb3IiCi0JCQkiIHRyYW5zbWl0XG4iLCBkZXYtPm5hbWUpOwotCQkJYnJlYWs7CisJCURCR19QUklOVChFUlJfREJHLCAiJXM6IE5vIHN0ZWVyaW5nIGVuYWJsZWQgZm9yIHRyYW5zbWl0XG4iLAorCQkJICBkZXYtPm5hbWUpOworCQlicmVhazsKIAljYXNlIFRYX1BSSU9SSVRZX1NURUVSSU5HOgotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBQcmlvcml0eSBzdGVlcmluZyBlbmFibGVkIGZvciIKLQkJCSIgdHJhbnNtaXRcbiIsIGRldi0+bmFtZSk7CisJCURCR19QUklOVChFUlJfREJHLAorCQkJICAiJXM6IFByaW9yaXR5IHN0ZWVyaW5nIGVuYWJsZWQgZm9yIHRyYW5zbWl0XG4iLAorCQkJICBkZXYtPm5hbWUpOwogCQlicmVhazsKIAljYXNlIFRYX0RFRkFVTFRfU1RFRVJJTkc6Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXM6IERlZmF1bHQgc3RlZXJpbmcgZW5hYmxlZCBmb3IiCi0JCQkiIHRyYW5zbWl0XG4iLCBkZXYtPm5hbWUpOworCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCSAgIiVzOiBEZWZhdWx0IHN0ZWVyaW5nIGVuYWJsZWQgZm9yIHRyYW5zbWl0XG4iLAorCQkJICBkZXYtPm5hbWUpOwogCX0KIAogCWlmIChzcC0+bHJvKQogCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBMYXJnZSByZWNlaXZlIG9mZmxvYWQgZW5hYmxlZFxuIiwKIAkJCSAgZGV2LT5uYW1lKTsKIAlpZiAodWZvKQotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBVRFAgRnJhZ21lbnRhdGlvbiBPZmZsb2FkKFVGTykiCi0JCQkJCSIgZW5hYmxlZFxuIiwgZGV2LT5uYW1lKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkgICIlczogVURQIEZyYWdtZW50YXRpb24gT2ZmbG9hZChVRk8pIGVuYWJsZWRcbiIsCisJCQkgIGRldi0+bmFtZSk7CiAJLyogSW5pdGlhbGl6ZSBkZXZpY2UgbmFtZSAqLwogCXNwcmludGYoc3AtPm5hbWUsICIlcyBOZXRlcmlvbiAlcyIsIGRldi0+bmFtZSwgc3AtPnByb2R1Y3RfbmFtZSk7CiAKQEAgLTgyMTAsMTMgKzgyMzQsMTMgQEAKIAogCXJldHVybiAwOwogCi0gICAgICByZWdpc3Rlcl9mYWlsZWQ6Ci0gICAgICBzZXRfc3dhcF9mYWlsZWQ6CityZWdpc3Rlcl9mYWlsZWQ6CitzZXRfc3dhcF9mYWlsZWQ6CiAJaW91bm1hcChzcC0+YmFyMSk7Ci0gICAgICBiYXIxX3JlbWFwX2ZhaWxlZDoKK2JhcjFfcmVtYXBfZmFpbGVkOgogCWlvdW5tYXAoc3AtPmJhcjApOwotICAgICAgYmFyMF9yZW1hcF9mYWlsZWQ6Ci0gICAgICBtZW1fYWxsb2NfZmFpbGVkOgorYmFyMF9yZW1hcF9mYWlsZWQ6CittZW1fYWxsb2NfZmFpbGVkOgogCWZyZWVfc2hhcmVkX21lbShzcCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CkBAIC04MjM4LDcgKzgyNjIsNyBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0IHMyaW9fcmVtX25pYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0KLQkgICAgKHN0cnVjdCBuZXRfZGV2aWNlICopIHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwkJKHN0cnVjdCBuZXRfZGV2aWNlICopcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzMmlvX25pYyAqc3A7CiAKIAlpZiAoZGV2ID09IE5VTEwpIHsKQEAgLTgyODYsMjggKzgzMTAsMjggQEAKIG1vZHVsZV9leGl0KHMyaW9fY2xvc2VyKTsKIAogc3RhdGljIGludCBjaGVja19MMl9scm9fY2FwYWJsZSh1OCAqYnVmZmVyLCBzdHJ1Y3QgaXBoZHIgKippcCwKLQkJc3RydWN0IHRjcGhkciAqKnRjcCwgc3RydWN0IFJ4RF90ICpyeGRwLAotCQlzdHJ1Y3QgczJpb19uaWMgKnNwKQorCQkJCXN0cnVjdCB0Y3BoZHIgKip0Y3AsIHN0cnVjdCBSeERfdCAqcnhkcCwKKwkJCQlzdHJ1Y3QgczJpb19uaWMgKnNwKQogewogCWludCBpcF9vZmY7CiAJdTggbDJfdHlwZSA9ICh1OCkoKHJ4ZHAtPkNvbnRyb2xfMSA+PiAzNykgJiAweDcpLCBpcF9sZW47CiAKIAlpZiAoIShyeGRwLT5Db250cm9sXzEgJiBSWERfRlJBTUVfUFJPVE9fVENQKSkgewotCQlEQkdfUFJJTlQoSU5JVF9EQkcsIiVzOiBOb24tVENQIGZyYW1lcyBub3Qgc3VwcG9ydGVkIGZvciBMUk9cbiIsCisJCURCR19QUklOVChJTklUX0RCRywKKwkJCSAgIiVzOiBOb24tVENQIGZyYW1lcyBub3Qgc3VwcG9ydGVkIGZvciBMUk9cbiIsCiAJCQkgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCS8qIENoZWNraW5nIGZvciBESVggdHlwZSBvciBESVggdHlwZSB3aXRoIFZMQU4gKi8KLQlpZiAoKGwyX3R5cGUgPT0gMCkKLQkJfHwgKGwyX3R5cGUgPT0gNCkpIHsKKwlpZiAoKGwyX3R5cGUgPT0gMCkgfHwgKGwyX3R5cGUgPT0gNCkpIHsKIAkJaXBfb2ZmID0gSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX1NJWkU7CiAJCS8qCiAJCSAqIElmIHZsYW4gc3RyaXBwaW5nIGlzIGRpc2FibGVkIGFuZCB0aGUgZnJhbWUgaXMgVkxBTiB0YWdnZWQsCiAJCSAqIHNoaWZ0IHRoZSBvZmZzZXQgYnkgdGhlIFZMQU4gaGVhZGVyIHNpemUgYnl0ZXMuCiAJCSAqLwogCQlpZiAoKCFzcC0+dmxhbl9zdHJpcF9mbGFnKSAmJgotCQkJKHJ4ZHAtPkNvbnRyb2xfMSAmIFJYRF9GUkFNRV9WTEFOX1RBRykpCisJCSAgICAocnhkcC0+Q29udHJvbF8xICYgUlhEX0ZSQU1FX1ZMQU5fVEFHKSkKIAkJCWlwX29mZiArPSBIRUFERVJfVkxBTl9TSVpFOwogCX0gZWxzZSB7CiAJCS8qIExMQywgU05BUCBldGMgYXJlIGNvbnNpZGVyZWQgbm9uLW1lcmdlYWJsZSAqLwpAQCAtODMyNSwyMiArODM0OSwyNSBAQAogc3RhdGljIGludCBjaGVja19mb3Jfc29ja2V0X21hdGNoKHN0cnVjdCBscm8gKmxybywgc3RydWN0IGlwaGRyICppcCwKIAkJCQkgIHN0cnVjdCB0Y3BoZHIgKnRjcCkKIHsKLQlEQkdfUFJJTlQoSU5GT19EQkcsIiVzOiBCZWVuIGhlcmUuLi5cbiIsIF9fZnVuY19fKTsKLQlpZiAoKGxyby0+aXBoLT5zYWRkciAhPSBpcC0+c2FkZHIpIHx8IChscm8tPmlwaC0+ZGFkZHIgIT0gaXAtPmRhZGRyKSB8fAotCSAgIChscm8tPnRjcGgtPnNvdXJjZSAhPSB0Y3AtPnNvdXJjZSkgfHwgKGxyby0+dGNwaC0+ZGVzdCAhPSB0Y3AtPmRlc3QpKQorCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBCZWVuIGhlcmUuLi5cbiIsIF9fZnVuY19fKTsKKwlpZiAoKGxyby0+aXBoLT5zYWRkciAhPSBpcC0+c2FkZHIpIHx8CisJICAgIChscm8tPmlwaC0+ZGFkZHIgIT0gaXAtPmRhZGRyKSB8fAorCSAgICAobHJvLT50Y3BoLT5zb3VyY2UgIT0gdGNwLT5zb3VyY2UpIHx8CisJICAgIChscm8tPnRjcGgtPmRlc3QgIT0gdGNwLT5kZXN0KSkKIAkJcmV0dXJuIC0xOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBnZXRfbDRfcHlsZF9sZW5ndGgoc3RydWN0IGlwaGRyICppcCwgc3RydWN0IHRjcGhkciAqdGNwKQogewotCXJldHVybihudG9ocyhpcC0+dG90X2xlbikgLSAoaXAtPmlobCA8PCAyKSAtICh0Y3AtPmRvZmYgPDwgMikpOworCXJldHVybiBudG9ocyhpcC0+dG90X2xlbikgLSAoaXAtPmlobCA8PCAyKSAtICh0Y3AtPmRvZmYgPDwgMik7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRpYXRlX25ld19zZXNzaW9uKHN0cnVjdCBscm8gKmxybywgdTggKmwyaCwKLQlzdHJ1Y3QgaXBoZHIgKmlwLCBzdHJ1Y3QgdGNwaGRyICp0Y3AsIHUzMiB0Y3BfcHlsZF9sZW4sIHUxNiB2bGFuX3RhZykKKwkJCQkgc3RydWN0IGlwaGRyICppcCwgc3RydWN0IHRjcGhkciAqdGNwLAorCQkJCSB1MzIgdGNwX3B5bGRfbGVuLCB1MTYgdmxhbl90YWcpCiB7Ci0JREJHX1BSSU5UKElORk9fREJHLCIlczogQmVlbiBoZXJlLi4uXG4iLCBfX2Z1bmNfXyk7CisJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IEJlZW4gaGVyZS4uLlxuIiwgX19mdW5jX18pOwogCWxyby0+bDJoID0gbDJoOwogCWxyby0+aXBoID0gaXA7CiAJbHJvLT50Y3BoID0gdGNwOwpAQCAtODM1MSw5ICs4Mzc4LDkgQEAKIAlscm8tPmZyYWdzX2xlbiA9IDA7CiAJbHJvLT52bGFuX3RhZyA9IHZsYW5fdGFnOwogCS8qCi0JICogY2hlY2sgaWYgd2Ugc2F3IFRDUCB0aW1lc3RhbXAuIE90aGVyIGNvbnNpc3RlbmN5IGNoZWNrcyBoYXZlCi0JICogYWxyZWFkeSBiZWVuIGRvbmUuCi0gCSAqLworCSAqIENoZWNrIGlmIHdlIHNhdyBUQ1AgdGltZXN0YW1wLgorCSAqIE90aGVyIGNvbnNpc3RlbmN5IGNoZWNrcyBoYXZlIGFscmVhZHkgYmVlbiBkb25lLgorCSAqLwogCWlmICh0Y3AtPmRvZmYgPT0gOCkgewogCQlfX2JlMzIgKnB0cjsKIAkJcHRyID0gKF9fYmUzMiAqKSh0Y3ArMSk7CkBAIC04MzY5LDggKzgzOTYsOSBAQAogCXN0cnVjdCBpcGhkciAqaXAgPSBscm8tPmlwaDsKIAlzdHJ1Y3QgdGNwaGRyICp0Y3AgPSBscm8tPnRjcGg7CiAJX19zdW0xNiBuY2hrOwotCXN0cnVjdCBzdGF0X2Jsb2NrICpzdGF0aW5mbyA9IHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvOwotCURCR19QUklOVChJTkZPX0RCRywiJXM6IEJlZW4gaGVyZS4uLlxuIiwgX19mdW5jX18pOworCXN0cnVjdCBzd1N0YXQgKnN3c3RhdHMgPSAmc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7CisKKwlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogQmVlbiBoZXJlLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBVcGRhdGUgTDMgaGVhZGVyICovCiAJaXAtPnRvdF9sZW4gPSBodG9ucyhscm8tPnRvdGFsX2xlbik7CkBAIC04MzkxLDE0ICs4NDE5LDE0IEBACiAJLyogVXBkYXRlIGNvdW50ZXJzIHJlcXVpcmVkIGZvciBjYWxjdWxhdGlvbiBvZgogCSAqIGF2ZXJhZ2Ugbm8uIG9mIHBhY2tldHMgYWdncmVnYXRlZC4KIAkgKi8KLQlzdGF0aW5mby0+c3dfc3RhdC5zdW1fYXZnX3BrdHNfYWdncmVnYXRlZCArPSBscm8tPnNnX251bTsKLQlzdGF0aW5mby0+c3dfc3RhdC5udW1fYWdncmVnYXRpb25zKys7CisJc3dzdGF0cy0+c3VtX2F2Z19wa3RzX2FnZ3JlZ2F0ZWQgKz0gbHJvLT5zZ19udW07CisJc3dzdGF0cy0+bnVtX2FnZ3JlZ2F0aW9ucysrOwogfQogCiBzdGF0aWMgdm9pZCBhZ2dyZWdhdGVfbmV3X3J4KHN0cnVjdCBscm8gKmxybywgc3RydWN0IGlwaGRyICppcCwKLQkJc3RydWN0IHRjcGhkciAqdGNwLCB1MzIgbDRfcHlsZCkKKwkJCSAgICAgc3RydWN0IHRjcGhkciAqdGNwLCB1MzIgbDRfcHlsZCkKIHsKLQlEQkdfUFJJTlQoSU5GT19EQkcsIiVzOiBCZWVuIGhlcmUuLi5cbiIsIF9fZnVuY19fKTsKKwlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogQmVlbiBoZXJlLi4uXG4iLCBfX2Z1bmNfXyk7CiAJbHJvLT50b3RhbF9sZW4gKz0gbDRfcHlsZDsKIAlscm8tPmZyYWdzX2xlbiArPSBsNF9weWxkOwogCWxyby0+dGNwX25leHRfc2VxICs9IGw0X3B5bGQ7CkBAIC04NDIyLDcgKzg0NTAsNyBAQAogewogCXU4ICpwdHI7CiAKLQlEQkdfUFJJTlQoSU5GT19EQkcsIiVzOiBCZWVuIGhlcmUuLi5cbiIsIF9fZnVuY19fKTsKKwlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogQmVlbiBoZXJlLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoIXRjcF9weWxkX2xlbikgewogCQkvKiBSdW50IGZyYW1lIG9yIGEgcHVyZSBhY2sgKi8KQEAgLTg0MzcsOCArODQ2NSw5IEBACiAJCXJldHVybiAtMTsKIAogCS8qIElmIHdlIHNlZSBFQ0Ugb3IgQ1dSIGZsYWdzIGluIFRDUCBoZWFkZXIsIHBhY2tldCBpcyBub3QgbWVyZ2VhYmxlICovCi0JaWYgKHRjcC0+dXJnIHx8IHRjcC0+cHNoIHx8IHRjcC0+cnN0IHx8IHRjcC0+c3luIHx8IHRjcC0+ZmluIHx8Ci0JCQkJICAgIHRjcC0+ZWNlIHx8IHRjcC0+Y3dyIHx8ICF0Y3AtPmFjaykgeworCWlmICh0Y3AtPnVyZyB8fCB0Y3AtPnBzaCB8fCB0Y3AtPnJzdCB8fAorCSAgICB0Y3AtPnN5biB8fCB0Y3AtPmZpbiB8fAorCSAgICB0Y3AtPmVjZSB8fCB0Y3AtPmN3ciB8fCAhdGNwLT5hY2spIHsKIAkJLyoKIAkJICogQ3VycmVudGx5IHJlY29nbml6ZSBvbmx5IHRoZSBhY2sgY29udHJvbCB3b3JkIGFuZAogCQkgKiBhbnkgb3RoZXIgY29udHJvbCBmaWVsZCBiZWluZyBzZXQgd291bGQgcmVzdWx0IGluCkBAIC04NDc0LDI3ICs4NTAzLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXMyaW9fY2x1Yl90Y3Bfc2Vzc2lvbihzdHJ1Y3QgcmluZ19pbmZvICpyaW5nX2RhdGEsIHU4ICpidWZmZXIsIHU4ICoqdGNwLAotCXUzMiAqdGNwX2xlbiwgc3RydWN0IGxybyAqKmxybywgc3RydWN0IFJ4RF90ICpyeGRwLAotCXN0cnVjdCBzMmlvX25pYyAqc3ApCitzdGF0aWMgaW50IHMyaW9fY2x1Yl90Y3Bfc2Vzc2lvbihzdHJ1Y3QgcmluZ19pbmZvICpyaW5nX2RhdGEsIHU4ICpidWZmZXIsCisJCQkJIHU4ICoqdGNwLCB1MzIgKnRjcF9sZW4sIHN0cnVjdCBscm8gKipscm8sCisJCQkJIHN0cnVjdCBSeERfdCAqcnhkcCwgc3RydWN0IHMyaW9fbmljICpzcCkKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwOwogCXN0cnVjdCB0Y3BoZHIgKnRjcGg7CiAJaW50IHJldCA9IDAsIGk7CiAJdTE2IHZsYW5fdGFnID0gMDsKKwlzdHJ1Y3Qgc3dTdGF0ICpzd3N0YXRzID0gJnNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0OwogCi0JaWYgKCEocmV0ID0gY2hlY2tfTDJfbHJvX2NhcGFibGUoYnVmZmVyLCAmaXAsIChzdHJ1Y3QgdGNwaGRyICoqKXRjcCwKLQkJCQkJIHJ4ZHAsIHNwKSkpIHsKLQkJREJHX1BSSU5UKElORk9fREJHLCJJUCBTYWRkcjogJXggRGFkZHI6ICV4XG4iLAotCQkJICBpcC0+c2FkZHIsIGlwLT5kYWRkcik7Ci0JfSBlbHNlCisJcmV0ID0gY2hlY2tfTDJfbHJvX2NhcGFibGUoYnVmZmVyLCAmaXAsIChzdHJ1Y3QgdGNwaGRyICoqKXRjcCwKKwkJCQkgICByeGRwLCBzcCk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCURCR19QUklOVChJTkZPX0RCRywgIklQIFNhZGRyOiAleCBEYWRkcjogJXhcbiIsIGlwLT5zYWRkciwgaXAtPmRhZGRyKTsKKwogCXZsYW5fdGFnID0gUlhEX0dFVF9WTEFOX1RBRyhyeGRwLT5Db250cm9sXzIpOwogCXRjcGggPSAoc3RydWN0IHRjcGhkciAqKSp0Y3A7CiAJKnRjcF9sZW4gPSBnZXRfbDRfcHlsZF9sZW5ndGgoaXAsIHRjcGgpOwotCWZvciAoaT0wOyBpPE1BWF9MUk9fU0VTU0lPTlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfTFJPX1NFU1NJT05TOyBpKyspIHsKIAkJc3RydWN0IGxybyAqbF9scm8gPSAmcmluZ19kYXRhLT5scm8wX25baV07CiAJCWlmIChsX2xyby0+aW5fdXNlKSB7CiAJCQlpZiAoY2hlY2tfZm9yX3NvY2tldF9tYXRjaChsX2xybywgaXAsIHRjcGgpKQpAQCAtODUwMywxOCArODUzMiwxOSBAQAogCQkJKmxybyA9IGxfbHJvOwogCiAJCQlpZiAoKCpscm8pLT50Y3BfbmV4dF9zZXEgIT0gbnRvaGwodGNwaC0+c2VxKSkgewotCQkJCURCR19QUklOVChJTkZPX0RCRywgIiVzOk91dCBvZiBvcmRlci4gZXhwZWN0ZWQgIgotCQkJCQkgICIweCV4LCBhY3R1YWwgMHgleFxuIiwgX19mdW5jX18sCisJCQkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IE91dCBvZiBzZXF1ZW5jZS4gIgorCQkJCQkgICJleHBlY3RlZCAweCV4LCBhY3R1YWwgMHgleFxuIiwKKwkJCQkJICBfX2Z1bmNfXywKIAkJCQkJICAoKmxybyktPnRjcF9uZXh0X3NlcSwKIAkJCQkJICBudG9obCh0Y3BoLT5zZXEpKTsKIAotCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT4KLQkJCQkgICBzd19zdGF0Lm91dG9mX3NlcXVlbmNlX3BrdHMrKzsKKwkJCQlzd3N0YXRzLT5vdXRvZl9zZXF1ZW5jZV9wa3RzKys7CiAJCQkJcmV0ID0gMjsKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKCF2ZXJpZnlfbDNfbDRfbHJvX2NhcGFibGUobF9scm8sIGlwLCB0Y3BoLCp0Y3BfbGVuKSkKKwkJCWlmICghdmVyaWZ5X2wzX2w0X2xyb19jYXBhYmxlKGxfbHJvLCBpcCwgdGNwaCwKKwkJCQkJCSAgICAgICp0Y3BfbGVuKSkKIAkJCQlyZXQgPSAxOyAvKiBBZ2dyZWdhdGUgKi8KIAkJCWVsc2UKIAkJCQlyZXQgPSAyOyAvKiBGbHVzaCBib3RoICovCkBAIC04NTI4LDExICs4NTU4LDEwIEBACiAJCSAqIGRvbid0IGNyZWF0ZSBuZXcgTFJPIHNlc3Npb24uIEp1c3Qgc2VuZCB0aGlzCiAJCSAqIHBhY2tldCB1cC4KIAkJICovCi0JCWlmICh2ZXJpZnlfbDNfbDRfbHJvX2NhcGFibGUoTlVMTCwgaXAsIHRjcGgsICp0Y3BfbGVuKSkgeworCQlpZiAodmVyaWZ5X2wzX2w0X2xyb19jYXBhYmxlKE5VTEwsIGlwLCB0Y3BoLCAqdGNwX2xlbikpCiAJCQlyZXR1cm4gNTsKLQkJfQogCi0JCWZvciAoaT0wOyBpPE1BWF9MUk9fU0VTU0lPTlM7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0xST19TRVNTSU9OUzsgaSsrKSB7CiAJCQlzdHJ1Y3QgbHJvICpsX2xybyA9ICZyaW5nX2RhdGEtPmxybzBfbltpXTsKIAkJCWlmICghKGxfbHJvLT5pbl91c2UpKSB7CiAJCQkJKmxybyA9IGxfbHJvOwpAQCAtODU0MywzMSArODU3MiwzMCBAQAogCX0KIAogCWlmIChyZXQgPT0gMCkgeyAvKiBzZXNzaW9ucyBleGNlZWRlZCAqLwotCQlEQkdfUFJJTlQoSU5GT19EQkcsIiVzOkFsbCBMUk8gc2Vzc2lvbnMgYWxyZWFkeSBpbiB1c2VcbiIsCisJCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBBbGwgTFJPIHNlc3Npb25zIGFscmVhZHkgaW4gdXNlXG4iLAogCQkJICBfX2Z1bmNfXyk7CiAJCSpscm8gPSBOVUxMOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXN3aXRjaCAocmV0KSB7Ci0JCWNhc2UgMzoKLQkJCWluaXRpYXRlX25ld19zZXNzaW9uKCpscm8sIGJ1ZmZlciwgaXAsIHRjcGgsICp0Y3BfbGVuLAotCQkJCQkJCQl2bGFuX3RhZyk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgorCWNhc2UgMzoKKwkJaW5pdGlhdGVfbmV3X3Nlc3Npb24oKmxybywgYnVmZmVyLCBpcCwgdGNwaCwgKnRjcF9sZW4sCisJCQkJICAgICB2bGFuX3RhZyk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdXBkYXRlX0wzTDRfaGVhZGVyKHNwLCAqbHJvKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlhZ2dyZWdhdGVfbmV3X3J4KCpscm8sIGlwLCB0Y3BoLCAqdGNwX2xlbik7CisJCWlmICgoKmxybyktPnNnX251bSA9PSBzcC0+bHJvX21heF9hZ2dyX3Blcl9zZXNzKSB7CiAJCQl1cGRhdGVfTDNMNF9oZWFkZXIoc3AsICpscm8pOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWFnZ3JlZ2F0ZV9uZXdfcngoKmxybywgaXAsIHRjcGgsICp0Y3BfbGVuKTsKLQkJCWlmICgoKmxybyktPnNnX251bSA9PSBzcC0+bHJvX21heF9hZ2dyX3Blcl9zZXNzKSB7Ci0JCQkJdXBkYXRlX0wzTDRfaGVhZGVyKHNwLCAqbHJvKTsKLQkJCQlyZXQgPSA0OyAvKiBGbHVzaCB0aGUgTFJPICovCi0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCURCR19QUklOVChFUlJfREJHLCIlczpEb250IGtub3csIGNhbid0IHNheSEhXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJCWJyZWFrOworCQkJcmV0ID0gNDsgLyogRmx1c2ggdGhlIExSTyAqLworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURCR19QUklOVChFUlJfREJHLCAiJXM6IERvbid0IGtub3csIGNhbid0IHNheSEhXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC04NTg2LDggKzg2MTQsNyBAQAogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQlpZiAoc3AtPnZsZ3JwICYmIHZsYW5fdGFnCi0JCSYmIChzcC0+dmxhbl9zdHJpcF9mbGFnKSkgeworCWlmIChzcC0+dmxncnAgJiYgdmxhbl90YWcgJiYgKHNwLT52bGFuX3N0cmlwX2ZsYWcpKSB7CiAJCS8qIFF1ZXVlaW5nIHRoZSB2bGFuIGZyYW1lIHRvIHRoZSB1cHBlciBsYXllciAqLwogCQlpZiAoc3AtPmNvbmZpZy5uYXBpKQogCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgc3AtPnZsZ3JwLCB2bGFuX3RhZyk7CkBAIC04NjAyLDEwICs4NjI5LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkIGxyb19hcHBlbmRfcGt0KHN0cnVjdCBzMmlvX25pYyAqc3AsIHN0cnVjdCBscm8gKmxybywKLQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICB1MzIgdGNwX2xlbikKKwkJCSAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0Y3BfbGVuKQogewogCXN0cnVjdCBza19idWZmICpmaXJzdCA9IGxyby0+cGFyZW50OworCXN0cnVjdCBzd1N0YXQgKnN3c3RhdHMgPSAmc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7CiAKIAlmaXJzdC0+bGVuICs9IHRjcF9sZW47CiAJZmlyc3QtPmRhdGFfbGVuID0gbHJvLT5mcmFnc19sZW47CkBAIC04NjE2LDcgKzg2NDMsNyBAQAogCQlza2Jfc2hpbmZvKGZpcnN0KS0+ZnJhZ19saXN0ID0gc2tiOwogCWZpcnN0LT50cnVlc2l6ZSArPSBza2ItPnRydWVzaXplOwogCWxyby0+bGFzdF9mcmFnID0gc2tiOwotCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmNsdWJiZWRfZnJtc19jbnQrKzsKKwlzd3N0YXRzLT5jbHViYmVkX2ZybXNfY250Kys7CiAJcmV0dXJuOwogfQogCkBAIC04NjI5LDEzICs4NjU2LDE2IEBACiAgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KICAqLwogc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgczJpb19pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKKwkJCQkJICAgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKIAorCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCQkvKiBCcmluZyBkb3duIHRoZSBjYXJkLCB3aGlsZSBhdm9pZGluZyBQQ0kgSS9PICovCiAJCWRvX3MyaW9fY2FyZF9kb3duKHNwLCAwKTsKQEAgLTg2NjAsOCArODY5MCw3IEBACiAJc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzMmlvOiAiCi0JCSAgICAgICAiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CisJCXByX2VycigiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCX0KIApAQCAtODY4NSwxNSArODcxNCwxMyBAQAogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCQlpZiAoczJpb19jYXJkX3VwKHNwKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJzMmlvOiAiCi0JCQkgICAgICAgIkNhbid0IGJyaW5nIGRldmljZSBiYWNrIHVwIGFmdGVyIHJlc2V0LlxuIik7CisJCQlwcl9lcnIoIkNhbid0IGJyaW5nIGRldmljZSBiYWNrIHVwIGFmdGVyIHJlc2V0LlxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlpZiAoczJpb19zZXRfbWFjX2FkZHIobmV0ZGV2LCBuZXRkZXYtPmRldl9hZGRyKSA9PSBGQUlMVVJFKSB7CiAJCQlzMmlvX2NhcmRfZG93bihzcCk7Ci0JCQlwcmludGsoS0VSTl9FUlIgInMyaW86ICIKLQkJCSAgICAgICAiQ2FuJ3QgcmVzZXRvcmUgbWFjIGFkZHIgYWZ0ZXIgcmVzZXQuXG4iKTsKKwkJCXByX2VycigiQ2FuJ3QgcmVzdG9yZSBtYWMgYWRkciBhZnRlciByZXNldC5cbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5oIGIvZHJpdmVycy9uZXQvczJpby5oCmluZGV4IGQ1YzViZTYuLjQ3YzM2ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uaAorKysgYi9kcml2ZXJzL25ldC9zMmlvLmgKQEAgLTY0LDcgKzY0LDEwIEBACiBzdGF0aWMgaW50IGRlYnVnX2xldmVsID0gRVJSX0RCRzsKIAogLyogREVCVUcgbWVzc2FnZSBwcmludC4gKi8KLSNkZWZpbmUgREJHX1BSSU5UKGRiZ19sZXZlbCwgYXJncy4uLikgIGlmKCEoZGVidWdfbGV2ZWw8ZGJnX2xldmVsKSkgcHJpbnRrKGFyZ3MpCisjZGVmaW5lIERCR19QUklOVChkYmdfbGV2ZWwsIGZtdCwgYXJncy4uLikgZG8gewkJCVwKKwlpZiAoZGJnX2xldmVsID49IGRlYnVnX2xldmVsKQkJCQlcCisJCXByX2luZm8oZm10LCAjI2FyZ3MpOwkJCQlcCisJfSB3aGlsZSAoMCkKIAogLyogUHJvdG9jb2wgYXNzaXN0IGZlYXR1cmVzIG9mIHRoZSBOSUMgKi8KICNkZWZpbmUgTDNfQ0tTVU1fT0sgMHhGRkZGCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYjEwMDAuYyBiL2RyaXZlcnMvbmV0L3NiMTAwMC5jCmluZGV4IGZjMGUzOGIuLmVlMzY2YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NiMTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NiMTAwMC5jCkBAIC04Miw3ICs4Miw4IEBACiBleHRlcm4gaW50IHNiMTAwMF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2IxMDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNiMTAwMF9kZXZfaW9jdGwgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKLXN0YXRpYyBpbnQgc2IxMDAwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgc2IxMDAwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHNiMTAwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBpbnQgc2IxMDAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCkBAIC0xMDgwLDEzICsxMDgxLDEzIEBACiB9CiAKIC8qIHRyYW5zbWl0IGZ1bmN0aW9uOiBkbyBub3RoaW5nIHNpbmNlIFNCMTAwMCBjYW4ndCBzZW5kIGFueXRoaW5nIG91dCAqLwotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBzYjEwMDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0cnlpbmcgdG8gdHJhbnNtaXQhISFcbiIsIGRldi0+bmFtZSk7CiAJLyogc2IxMDAwIGNhbid0IHhtaXQgZGF0YWdyYW1zICovCiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFNCMTAwMCBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwppbmRleCBkOGM5Y2YxLi41MDg1NTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCkBAIC0yMDkxLDcgKzIwOTEsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnNibV9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjY4OCw3ICsyNjg4LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IF9faW5pdCBzYm1hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNibWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNibWFjX3NvZnRjICpzYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NjOTIwMzEuYyBiL2RyaXZlcnMvbmV0L3NjOTIwMzEuYwppbmRleCBlMzE1NmM5Li44ZDYwMzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zYzkyMDMxLmMKKysrIGIvZHJpdmVycy9uZXQvc2M5MjAzMS5jCkBAIC05NDEsNyArOTQxLDggQEAKIAlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKLXN0YXRpYyBpbnQgc2M5MjAzMV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc2M5MjAzMV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2M5MjAzMV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKnBvcnRfYmFzZSA9IHByaXYtPnBvcnRfYmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NlZXE4MDA1LmMgYi9kcml2ZXJzL25ldC9zZWVxODAwNS5jCmluZGV4IGViYmJlMDkuLjM5MjQ2ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NlZXE4MDA1LmMKKysrIGIvZHJpdmVycy9uZXQvc2VlcTgwMDUuYwpAQCAtODEsNyArODEsOCBAQAogc3RhdGljIGludCBzZWVxODAwNV9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcik7CiBzdGF0aWMgaW50IHNlZXE4MDA1X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzZWVxODAwNV90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBzZWVxODAwNV9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBzZWVxODAwNV9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBzZWVxODAwNV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIHNlZXE4MDA1X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzZWVxODAwNV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTM5NCwxNCArMzk1LDE1IEBACiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCi1zdGF0aWMgaW50IHNlZXE4MDA1X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc2VlcTgwMDVfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzaG9ydCBsZW5ndGggPSBza2ItPmxlbjsKIAl1bnNpZ25lZCBjaGFyICpidWY7CiAKIAlpZiAobGVuZ3RoIDwgRVRIX1pMRU4pIHsKIAkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJbGVuZ3RoID0gRVRIX1pMRU47CiAJfQogCWJ1ZiA9IHNrYi0+ZGF0YTsKQEAgLTQxNSw3ICs0MTcsNyBAQAogCWRldl9rZnJlZV9za2IgKHNrYik7CiAJLyogWW91IG1pZ2h0IG5lZWQgdG8gY2xlYW4gdXAgYW5kIHJlY29yZCBUeCBzdGF0aXN0aWNzIGhlcmUuICovCiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCmluZGV4IDM0M2U4ZGExLi4wN2E3ZTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCkBAIC0xMTc5LDYgKzExNzksOCBAQAogCiAJLyogSXNvbGF0ZSB0aGUgTUFDIGZyb20gdGhlIFRYIGFuZCBSWCBlbmdpbmVzLCBzbyB0aGF0IHF1ZXVlCiAJICogZmx1c2hlcyB3aWxsIGNvbXBsZXRlIGluIGEgdGltZWx5IGZhc2hpb24uICovCisJZmFsY29uX2RlY29uZmlndXJlX21hY193cmFwcGVyKGVmeCk7CisJbXNsZWVwKDEwKTsgLyogTGV0IHRoZSBSeCBGSUZPIGRyYWluICovCiAJZmFsY29uX2RyYWluX3R4X2ZpZm8oZWZ4KTsKIAogCS8qIFN0b3AgdGhlIGtlcm5lbCB0cmFuc21pdCBpbnRlcmZhY2UgbGF0ZSwgc28gdGhlIHdhdGNoZG9nCkBAIC0xNjE0LDIxICsxNjE2LDI0IEBACiAJU0VUX05FVERFVl9ERVYobmV0X2RldiwgJmVmeC0+cGNpX2Rldi0+ZGV2KTsKIAlTRVRfRVRIVE9PTF9PUFMobmV0X2RldiwgJmVmeF9ldGh0b29sX29wcyk7CiAKLQkvKiBBbHdheXMgc3RhcnQgd2l0aCBjYXJyaWVyIG9mZjsgUEhZIGV2ZW50cyB3aWxsIGRldGVjdCB0aGUgbGluayAqLwotCW5ldGlmX2NhcnJpZXJfb2ZmKGVmeC0+bmV0X2Rldik7Ci0KIAkvKiBDbGVhciBNQUMgc3RhdGlzdGljcyAqLwogCWVmeC0+bWFjX29wLT51cGRhdGVfc3RhdHMoZWZ4KTsKIAltZW1zZXQoJmVmeC0+bWFjX3N0YXRzLCAwLCBzaXplb2YoZWZ4LT5tYWNfc3RhdHMpKTsKIAotCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldF9kZXYpOwotCWlmIChyYykgewotCQlFRlhfRVJSKGVmeCwgImNvdWxkIG5vdCByZWdpc3RlciBuZXQgZGV2XG4iKTsKLQkJcmV0dXJuIHJjOwotCX0KLQogCXJ0bmxfbG9jaygpOworCisJcmMgPSBkZXZfYWxsb2NfbmFtZShuZXRfZGV2LCBuZXRfZGV2LT5uYW1lKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGZhaWxfbG9ja2VkOwogCWVmeF91cGRhdGVfbmFtZShlZngpOworCisJcmMgPSByZWdpc3Rlcl9uZXRkZXZpY2UobmV0X2Rldik7CisJaWYgKHJjKQorCQlnb3RvIGZhaWxfbG9ja2VkOworCisJLyogQWx3YXlzIHN0YXJ0IHdpdGggY2FycmllciBvZmY7IFBIWSBldmVudHMgd2lsbCBkZXRlY3QgdGhlIGxpbmsgKi8KKwluZXRpZl9jYXJyaWVyX29mZihlZngtPm5ldF9kZXYpOworCiAJcnRubF91bmxvY2soKTsKIAogCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZlZngtPnBjaV9kZXYtPmRldiwgJmRldl9hdHRyX3BoeV90eXBlKTsKQEAgLTE2MzksNiArMTY0NCwxMSBAQAogCiAJcmV0dXJuIDA7CiAKK2ZhaWxfbG9ja2VkOgorCXJ0bmxfdW5sb2NrKCk7CisJRUZYX0VSUihlZngsICJjb3VsZCBub3QgcmVnaXN0ZXIgbmV0IGRldlxuIik7CisJcmV0dXJuIHJjOworCiBmYWlsX3JlZ2lzdGVyZWQ6CiAJdW5yZWdpc3Rlcl9uZXRkZXYobmV0X2Rldik7CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5oIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCmluZGV4IGRhMTU3YWEuLmFlY2FmNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKQEAgLTIwLDggKzIwLDkgQEAKICNkZWZpbmUgRkFMQ09OX0JfUF9ERVZJRCAgICAgICAgMHgwNzEwCiAKIC8qIFRYICovCi1leHRlcm4gaW50IGVmeF94bWl0KHN0cnVjdCBlZnhfbmljICplZngsCi0JCSAgICBzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gbmV0ZGV2X3R4X3QgZWZ4X3htaXQoc3RydWN0IGVmeF9uaWMgKmVmeCwKKwkJCQkgIHN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlLAorCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gdm9pZCBlZnhfc3RvcF9xdWV1ZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGVmeF93YWtlX3F1ZXVlKHN0cnVjdCBlZnhfbmljICplZngpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYwppbmRleCA5OTdlYTJhLi40NTAxOGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKQEAgLTczMSw3ICs3MzEsNyBAQAogfQogCiAKLXN0cnVjdCBldGh0b29sX29wcyBlZnhfZXRodG9vbF9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZWZ4X2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gZWZ4X2V0aHRvb2xfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gZWZ4X2V0aHRvb2xfc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbwkJPSBlZnhfZXRodG9vbF9nZXRfZHJ2aW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmggYi9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5oCmluZGV4IDM2MjhlNDMuLjI5NWVhZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuaApAQCAtMjIsNiArMjIsNiBAQAogZXh0ZXJuIGludCBlZnhfZXRodG9vbF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCiAJCQkJICAgIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCk7CiAKLWV4dGVybiBzdHJ1Y3QgZXRodG9vbF9vcHMgZWZ4X2V0aHRvb2xfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlZnhfZXRodG9vbF9vcHM7CiAKICNlbmRpZiAvKiBFRlhfRVRIVE9PTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2h3ZGVmcy5oIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9od2RlZnMuaAppbmRleCAzNzVlMmE1Li4yZDIyNjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2h3ZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25faHdkZWZzLmgKQEAgLTcwMCw2ICs3MDAsOCBAQAogLyogWEdYUy9YQVVJIHBvd2VyZG93bi9yZXNldCByZWdpc3RlciAqLwogI2RlZmluZSBYWF9QV1JfUlNUX1JFRyAweDEzMDAKIAorI2RlZmluZSBYWF9TRF9SU1RfQUNUX0xCTiAxNgorI2RlZmluZSBYWF9TRF9SU1RfQUNUX1dJRFRIIDEKICNkZWZpbmUgWFhfUFdSRE5EX0VOX0xCTiAxNQogI2RlZmluZSBYWF9QV1JETkRfRU5fV0lEVEggMQogI2RlZmluZSBYWF9QV1JETkNfRU5fTEJOIDE0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uX3htYWMuYyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25feG1hYy5jCmluZGV4IDJiMzI2OWMuLmJlYzUyY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25feG1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25feG1hYy5jCkBAIC02NCwxMyArNjQsMTUgQEAKIAllZnhfb3dvcmRfdCByZWc7CiAJaW50IGNvdW50OwogCisJLyogU3RhcnQgcmVzZXQgc2VxdWVuY2UgKi8KIAlFRlhfUE9QVUxBVEVfRFdPUkRfMShyZWcsIFhYX1JTVF9YWF9FTiwgMSk7CiAJZmFsY29uX3dyaXRlKGVmeCwgJnJlZywgWFhfUFdSX1JTVF9SRUcpOwogCi0JLyogR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBsaW5rIHRvIGVzdGFibGlzaCAqLwotCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDEwMDA7IGNvdW50KyspIHsgLyogd2FpdCB1cHRvIDEwbXMgKi8KKwkvKiBXYWl0IHVwIHRvIDEwIG1zIGZvciBjb21wbGV0aW9uLCB0aGVuIHJlaW5pdGlhbGlzZSAqLworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDEwMDA7IGNvdW50KyspIHsKIAkJZmFsY29uX3JlYWQoZWZ4LCAmcmVnLCBYWF9QV1JfUlNUX1JFRyk7Ci0JCWlmIChFRlhfT1dPUkRfRklFTEQocmVnLCBYWF9SU1RfWFhfRU4pID09IDApIHsKKwkJaWYgKEVGWF9PV09SRF9GSUVMRChyZWcsIFhYX1JTVF9YWF9FTikgPT0gMCAmJgorCQkgICAgRUZYX09XT1JEX0ZJRUxEKHJlZywgWFhfU0RfUlNUX0FDVCkgPT0gMCkgewogCQkJZmFsY29uX3NldHVwX3hhdWkoZWZ4KTsKIAkJCXJldHVybiAwOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaAppbmRleCA1ZWFiZWRlLi4yOTg1NjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKQEAgLTk4NCw5ICs5ODQsMTQgQEAKICAqCiAgKiBUaGUgMTBHIE1BQyB1c2VkIGluIEZhbGNvbiByZXF1aXJlcyA4LWJ5dGUgYWxpZ25tZW50IG9uIHRoZSBmcmFtZQogICogbGVuZ3RoLCBzbyB3ZSByb3VuZCB1cCB0byB0aGUgbmVhcmVzdCA4LgorICoKKyAqIFJlLWNsb2NraW5nIGJ5IHRoZSBYR1hTIG9uIFJYIGNhbiByZWR1Y2UgYW4gSVBHIHRvIDMyIGJpdHMgKGhhbGYgYW4KKyAqIFhHTUlJIGN5Y2xlKS4gIElmIHRoZSBmcmFtZSBsZW5ndGggcmVhY2hlcyB0aGUgbWF4aW11bSB2YWx1ZSBpbiB0aGUKKyAqIHNhbWUgY3ljbGUsIHRoZSBYTUFDIGNhbiBtaXNzIHRoZSBJUEcgYWx0b2dldGhlci4gIFdlIHdvcmsgYXJvdW5kCisgKiB0aGlzIGJ5IGFkZGluZyBhIGZ1cnRoZXIgMTYgYnl0ZXMuCiAgKi8KICNkZWZpbmUgRUZYX01BWF9GUkFNRV9MRU4obXR1KSBcCi0JKCgoKG10dSkgKyBFVEhfSExFTiArIFZMQU5fSExFTiArIDQvKiBGQ1MgKi8pICsgNykgJiB+NykKKwkoKCgobXR1KSArIEVUSF9ITEVOICsgVkxBTl9ITEVOICsgNC8qIEZDUyAqLyArIDcpICYgfjcpICsgMTYpCiAKIAogI2VuZGlmIC8qIEVGWF9ORVRfRFJJVkVSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zZWxmdGVzdC5jIGIvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmMKaW5kZXggYjY3Y2NjYS4uODE3YzdlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmMKQEAgLTQwMCw3ICs0MDAsOCBAQAogCXN0cnVjdCBlZnhfbG9vcGJhY2tfc3RhdGUgKnN0YXRlID0gZWZ4LT5sb29wYmFja19zZWxmdGVzdDsKIAlzdHJ1Y3QgZWZ4X2xvb3BiYWNrX3BheWxvYWQgKnBheWxvYWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgaSwgcmM7CisJaW50IGk7CisJbmV0ZGV2X3R4X3QgcmM7CiAKIAkvKiBUcmFuc21pdCBOIGNvcGllcyBvZiBidWZmZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPnBhY2tldF9jb3VudDsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdHguYyBiL2RyaXZlcnMvbmV0L3NmYy90eC5jCmluZGV4IDE0YTE0NzguLjQ4OWM0ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90eC5jCkBAIC0xMzgsOCArMTM4LDggQEAKICAqIFJldHVybnMgTkVUREVWX1RYX09LIG9yIE5FVERFVl9UWF9CVVNZCiAgKiBZb3UgbXVzdCBob2xkIG5ldGlmX3R4X2xvY2soKSB0byBjYWxsIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyBpbnQgZWZ4X2VucXVldWVfc2tiKHN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlLAotCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBuZXRkZXZfdHhfdCBlZnhfZW5xdWV1ZV9za2Ioc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWUsCisJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBlZnhfbmljICplZnggPSB0eF9xdWV1ZS0+ZWZ4OwogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gZWZ4LT5wY2lfZGV2OwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJdW5zaWduZWQgaW50IGRtYV9sZW47CiAJYm9vbCB1bm1hcF9zaW5nbGU7CiAJaW50IHFfc3BhY2UsIGkgPSAwOwotCWludCByYyA9IE5FVERFVl9UWF9PSzsKKwluZXRkZXZfdHhfdCByYyA9IE5FVERFVl9UWF9PSzsKIAogCUVGWF9CVUdfT05fUEFSQU5PSUQodHhfcXVldWUtPndyaXRlX2NvdW50ICE9IHR4X3F1ZXVlLT5pbnNlcnRfY291bnQpOwogCkBAIC0zNTMsMTQgKzM1MywxMSBAQAogICoKICAqIENvbnRleHQ6IG5ldGlmX3R4X2xvY2sgaGVsZAogICovCi1pbmxpbmUgaW50IGVmeF94bWl0KHN0cnVjdCBlZnhfbmljICplZngsCi0JCSAgICBzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK2lubGluZSBuZXRkZXZfdHhfdCBlZnhfeG1pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAorCQkJICAgc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IHJjOwotCiAJLyogTWFwIGZyYWdtZW50cyBmb3IgRE1BIGFuZCBhZGQgdG8gVFggcXVldWUgKi8KLQlyYyA9IGVmeF9lbnF1ZXVlX3NrYih0eF9xdWV1ZSwgc2tiKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIGVmeF9lbnF1ZXVlX3NrYih0eF9xdWV1ZSwgc2tiKTsKIH0KIAogLyogSW5pdGlhdGUgYSBwYWNrZXQgdHJhbnNtaXNzaW9uLiAgV2UgdXNlIG9uZSBjaGFubmVsIHBlciBDUFUKQEAgLTM3Miw3ICszNjksOCBAQAogICogTm90ZSB0aGF0IHJldHVybmluZyBhbnl0aGluZyBvdGhlciB0aGFuIE5FVERFVl9UWF9PSyB3aWxsIGNhdXNlIHRoZQogICogT1MgdG8gZnJlZSB0aGUgc2tiLgogICovCi1pbnQgZWZ4X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKK25ldGRldl90eF90IGVmeF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdHguaCBiL2RyaXZlcnMvbmV0L3NmYy90eC5oCmluZGV4IDVlMWNjMjMuLmUzNjc4OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy90eC5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90eC5oCkBAIC0xOCw3ICsxOCw4IEBACiB2b2lkIGVmeF9pbml0X3R4X3F1ZXVlKHN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlKTsKIHZvaWQgZWZ4X2ZpbmlfdHhfcXVldWUoc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWUpOwogCi1pbnQgZWZ4X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7CituZXRkZXZfdHhfdCBlZnhfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwogdm9pZCBlZnhfcmVsZWFzZV90eF9idWZmZXJzKHN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlKTsKIAogI2VuZGlmIC8qIEVGWF9UWF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMveGZwX3BoeS5jIGIvZHJpdmVycy9uZXQvc2ZjL3hmcF9waHkuYwppbmRleCBiYjJlNmFmLi5lNmIzZDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMveGZwX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy94ZnBfcGh5LmMKQEAgLTk3LDIzICs5NywyNCBAQAogCXJldHVybiAwOwogfQogCi0vKiBSZXNldCB0aGUgUEhZWFMgTU1ELiBUaGlzIGlzIGRvY3VtZW50ZWQgKGZvciB0aGUgUXVha2UgUEhZcykgYXMgZG9pbmcKLSAqIGEgY29tcGxldGUgc29mdCByZXNldC4KLSAqLwogc3RhdGljIGludCB4ZnBfcmVzZXRfcGh5KHN0cnVjdCBlZnhfbmljICplZngpCiB7CiAJaW50IHJjOwogCi0JcmMgPSBlZnhfbWRpb19yZXNldF9tbWQoZWZ4LCBNRElPX01NRF9QSFlYUywKLQkJCQlYRlBfTUFYX1JFU0VUX1RJTUUgLyBYRlBfUkVTRVRfV0FJVCwKLQkJCQlYRlBfUkVTRVRfV0FJVCk7Ci0JaWYgKHJjIDwgMCkKLQkJZ290byBmYWlsOwotCiAJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfUVQyMDI1QykgeworCQkvKiBXYWl0IGZvciB0aGUgcmVzZXQgdHJpZ2dlcmVkIGJ5IGZhbGNvbl9yZXNldF9odygpCisJCSAqIHRvIGNvbXBsZXRlICovCiAJCXJjID0gcXQyMDI1Y193YWl0X3Jlc2V0KGVmeCk7CiAJCWlmIChyYyA8IDApCiAJCQlnb3RvIGZhaWw7CisJfSBlbHNlIHsKKwkJLyogUmVzZXQgdGhlIFBIWVhTIE1NRC4gVGhpcyBpcyBkb2N1bWVudGVkIGFzIGRvaW5nCisJCSAqIGEgY29tcGxldGUgc29mdCByZXNldC4gKi8KKwkJcmMgPSBlZnhfbWRpb19yZXNldF9tbWQoZWZ4LCBNRElPX01NRF9QSFlYUywKKwkJCQkJWEZQX01BWF9SRVNFVF9USU1FIC8gWEZQX1JFU0VUX1dBSVQsCisJCQkJCVhGUF9SRVNFVF9XQUlUKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gZmFpbDsKIAl9CiAKIAkvKiBXYWl0IDI1MG1zIGZvciB0aGUgUEhZIHRvIGNvbXBsZXRlIGJvb3R1cCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2dpc2VlcS5jIGIvZHJpdmVycy9uZXQvc2dpc2VlcS5jCmluZGV4IDVmYjg4Y2EuLmVjZjMyNzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZ2lzZWVxLmMKKysrIGIvZHJpdmVycy9uZXQvc2dpc2VlcS5jCkBAIC01OTQsNyArNTk0LDcgQEAKIAlsZW4gPSBza2ItPmxlbjsKIAlpZiAobGVuIDwgRVRIX1pMRU4pIHsKIAkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJbGVuID0gRVRIX1pMRU47CiAJfQogCkBAIC02NDIsNyArNjQyLDcgQEAKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwLT50eF9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCB0aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC03MjAsNyArNzIwLDcgQEAKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHNnaXNlZXFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNnaXNlZXFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc2dpc2VlcV9wbGF0Zm9ybV9kYXRhICpwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBocGMzX3JlZ3MgKmhwY3JlZ3MgPSBwZC0+aHBjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2hfZXRoLmMgYi9kcml2ZXJzL25ldC9zaF9ldGguYwppbmRleCBhMmQ4MmRkLi5mNDlkMDgwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2hfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKQEAgLTc3MiwxMyArNzcyLDE1IEBACiAJCQltZHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAJCWlmIChmZWxpY19zdGF0ICYgRUNTUl9MQ0hORykgewogCQkJLyogTGluayBDaGFuZ2VkICovCi0JCQlpZiAobWRwLT5jZC0+bm9fcHNyKSB7CisJCQlpZiAobWRwLT5jZC0+bm9fcHNyIHx8IG1kcC0+bm9fZXRoZXJfbGluaykgewogCQkJCWlmIChtZHAtPmxpbmsgPT0gUEhZX0RPV04pCiAJCQkJCWxpbmtfc3RhdCA9IDA7CiAJCQkJZWxzZQogCQkJCQlsaW5rX3N0YXQgPSBQSFlfU1RfTElOSzsKIAkJCX0gZWxzZSB7CiAJCQkJbGlua19zdGF0ID0gKGN0cmxfaW5sKGlvYWRkciArIFBTUikpOworCQkJCWlmIChtZHAtPmV0aGVyX2xpbmtfYWN0aXZlX2xvdykKKwkJCQkJbGlua19zdGF0ID0gfmxpbmtfc3RhdDsKIAkJCX0KIAkJCWlmICghKGxpbmtfc3RhdCAmIFBIWV9TVF9MSU5LKSkgewogCQkJCS8qIExpbmsgRG93biA6IGRpc2FibGUgdHggYW5kIHJ4ICovCkBAIC0xMTMzLDcgKzExMzUsNyBAQAogCiAJbmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogZGV2aWNlIGNsb3NlIGZ1bmN0aW9uICovCkBAIC0xNDEwLDYgKzE0MTIsOCBAQAogCW1kcC0+cGh5X2lkID0gcGQtPnBoeTsKIAkvKiBFRE1BQyBlbmRpYW4gKi8KIAltZHAtPmVkbWFjX2VuZGlhbiA9IHBkLT5lZG1hY19lbmRpYW47CisJbWRwLT5ub19ldGhlcl9saW5rID0gcGQtPm5vX2V0aGVyX2xpbms7CisJbWRwLT5ldGhlcl9saW5rX2FjdGl2ZV9sb3cgPSBwZC0+ZXRoZXJfbGlua19hY3RpdmVfbG93OwogCiAJLyogc2V0IGNwdSBkYXRhICovCiAJbWRwLT5jZCA9ICZzaF9ldGhfbXlfY3B1X2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaF9ldGguaCBiL2RyaXZlcnMvbmV0L3NoX2V0aC5oCmluZGV4IDlhZmU1YjQuLmJhMTUxZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NoX2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3NoX2V0aC5oCkBAIC03MjksNiArNzI5LDkgQEAKIAljaGFyIHBvc3Rfcng7CQkvKiBQT1NUIHJlY2VpdmUgKi8KIAljaGFyIHBvc3RfZnc7CQkvKiBQT1NUIGZvcndhcmQgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyB0c3Vfc3RhdHM7CS8qIFRTVSBmb3J3YXJkIHN0YXR1cyAqLworCisJdW5zaWduZWQgbm9fZXRoZXJfbGluazoxOworCXVuc2lnbmVkIGV0aGVyX2xpbmtfYWN0aXZlX2xvdzoxOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNoX2V0aF9zb2Z0X3N3YXAoY2hhciAqc3JjLCBpbnQgbGVuKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzMTkwLmMgYi9kcml2ZXJzL25ldC9zaXMxOTAuYwppbmRleCAxZjA0MGU4Li43Y2M5ODk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXMxOTAuYworKysgYi9kcml2ZXJzL25ldC9zaXMxOTAuYwpAQCAtMTE2OCw3ICsxMTY4LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzaXMxOTBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNpczE5MF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzaXMxOTBfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczkwMC5jIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKaW5kZXggYTlhODk3YmIuLjk3OTQ5ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczkwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCkBAIC0yMTQsNyArMjE0LDggQEAKIHN0YXRpYyB2b2lkIHNpczkwMF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKIHN0YXRpYyB2b2lkIHNpczkwMF9pbml0X3R4X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwogc3RhdGljIHZvaWQgc2lzOTAwX2luaXRfcnhfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7Ci1zdGF0aWMgaW50IHNpczkwMF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBzaXM5MDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwogc3RhdGljIGludCBzaXM5MDBfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwogc3RhdGljIHZvaWQgc2lzOTAwX2ZpbmlzaF94bWl0IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7CiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2lzOTAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwpAQCAtMTU3MSw3ICsxNTcyLDcgQEAKICAqCXRlbGwgdXBwZXIgbGF5ZXIgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsCiAgKi8KIAotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBzaXM5MDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKIHsKIAlzdHJ1Y3Qgc2lzOTAwX3ByaXZhdGUgKnNpc19wcml2ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CkBAIC0xNjI4LDcgKzE2MjksNyBAQAogCQkgICAgICAgInRvIHNsb3QgJWQuXG4iLAogCQkgICAgICAgbmV0X2Rldi0+bmFtZSwgc2tiLT5kYXRhLCAoaW50KXNrYi0+bGVuLCBlbnRyeSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioKQEAgLTIxMjcsOCArMjEyOCw2IEBACiAJCXJldHVybiAwOwogCiAJY2FzZSBTSU9DU01JSVJFRzoJCS8qIFdyaXRlIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07CiAJCW1kaW9fd3JpdGUobmV0X2RldiwgZGF0YS0+cGh5X2lkICYgMHgxZiwgZGF0YS0+cmVnX251bSAmIDB4MWYsIGRhdGEtPnZhbF9pbik7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jIGIvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYwppbmRleCAwODhmZTI2Li4zOGE1MDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKQEAgLTEwNyw3ICsxMDcsOCBAQAogc3RhdGljIHZvaWQgc2tmcF9jdGxfc2V0X211bHRpY2FzdF9saXN0X3dvX2xvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNrZnBfY3RsX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKTsKIHN0YXRpYyBpbnQgc2tmcF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKLXN0YXRpYyBpbnQgc2tmcF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBza2ZwX3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2VuZF9xdWV1ZWRfcGFja2V0cyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBzdGF0aWMgdm9pZCBDaGVja1NvdXJjZUFkZHJlc3ModW5zaWduZWQgY2hhciAqZnJhbWUsIHVuc2lnbmVkIGNoYXIgKmh3X2FkZHIpOwogc3RhdGljIHZvaWQgUmVzZXRBZGFwdGVyKHN0cnVjdCBzX3NtYyAqc21jKTsKQEAgLTEwNTYsNyArMTA1Nyw4IEBACiAgKiBTaWRlIEVmZmVjdHM6CiAgKiAgIE5vbmUKICAqLwotc3RhdGljIGludCBza2ZwX3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc2tmcF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzX3NtYyAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlza2ZkZGlfcHJpdiAqYnAgPSAmc21jLT5vczsKQEAgLTEwNzcsNyArMTA3OSw3IEBACiAJCS8vIGRlcXVldWUgcGFja2V0cyBmcm9tIHhtdCBxdWV1ZSBhbmQgc2VuZCB0aGVtCiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuICgwKTsJLyogcmV0dXJuICJzdWNjZXNzIiAqLworCQlyZXR1cm4gTkVUREVWX1RYX09LOwkvKiByZXR1cm4gInN1Y2Nlc3MiICovCiAJfQogCWlmIChicC0+UXVldWVTa2IgPT0gMCkgewkvLyByZXR1cm4gd2l0aCB0YnVzeSBzZXQ6IHF1ZXVlIGZ1bGwKIApAQCAtMTA5MSw3ICsxMDkzLDcgQEAKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCX0KIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiB9CQkJCS8vIHNrZnBfc2VuZF9wa3QKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IDU0M2FmMjAuLjYyZTg1MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9za2dlLmMKQEAgLTI0OTYsOSArMjQ5Niw2IEBACiAJfQogCiAJY2FzZSBTSU9DU01JSVJFRzoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQogCQlzcGluX2xvY2tfYmgoJmh3LT5waHlfbG9jayk7CiAJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpCiAJCQllcnIgPSB4bV9waHlfd3JpdGUoaHcsIHNrZ2UtPnBvcnQsIGRhdGEtPnJlZ19udW0gJiAweDFmLApAQCAtMjc0Niw3ICsyNzQzLDggQEAKIAkJKyAocmluZy0+dG9fY2xlYW4gLSByaW5nLT50b191c2UpIC0gMTsKIH0KIAotc3RhdGljIGludCBza2dlX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBza2dlX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza2dlX2h3ICpodyA9IHNrZ2UtPmh3OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IDBhNTUxZDguLjAwYmM2NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlICJza3kyLmgiCiAKICNkZWZpbmUgRFJWX05BTUUJCSJza3kyIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMjMiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4yNSIKICNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIiAiCiAKIC8qCkBAIC02NCwxMCArNjQsMTIgQEAKICNkZWZpbmUgUlhfTUFYX1BFTkRJTkcJCShSWF9MRV9TSVpFLzYgLSAyKQogI2RlZmluZSBSWF9ERUZfUEVORElORwkJUlhfTUFYX1BFTkRJTkcKIAotI2RlZmluZSBUWF9SSU5HX1NJWkUJCTUxMgotI2RlZmluZSBUWF9ERUZfUEVORElORwkJMTI4Ci0jZGVmaW5lIE1BWF9TS0JfVFhfTEUJCSg0ICsgKHNpemVvZihkbWFfYWRkcl90KS9zaXplb2YodTMyKSkqTUFYX1NLQl9GUkFHUykKKy8qIFRoaXMgaXMgdGhlIHdvcnN0IGNhc2UgbnVtYmVyIG9mIHRyYW5zbWl0IGxpc3QgZWxlbWVudHMgZm9yIGEgc2luZ2xlIHNrYjoKKyAgIFZMQU4gKyBUU08gKyBDS1NVTSArIERhdGEgKyBza2JfZnJhZ3MgKiBETUEgKi8KKyNkZWZpbmUgTUFYX1NLQl9UWF9MRQkoNCArIChzaXplb2YoZG1hX2FkZHJfdCkvc2l6ZW9mKHUzMikpKk1BWF9TS0JfRlJBR1MpCiAjZGVmaW5lIFRYX01JTl9QRU5ESU5HCQkoTUFYX1NLQl9UWF9MRSsxKQorI2RlZmluZSBUWF9NQVhfUEVORElORwkJNDA5NgorI2RlZmluZSBUWF9ERUZfUEVORElORwkJMTI3CiAKICNkZWZpbmUgU1RBVFVTX1JJTkdfU0laRQkyMDQ4CS8qIDIgcG9ydHMgKiAoVFggKyAyKlJYKSAqLwogI2RlZmluZSBTVEFUVVNfTEVfQllURVMJCShTVEFUVVNfUklOR19TSVpFKnNpemVvZihzdHJ1Y3Qgc2t5Ml9zdGF0dXNfbGUpKQpAQCAtMjU0LDYgKzI1Niw5IEBACiAKIAkJc2t5Ml9yZWFkMzIoaHcsIEIyX0dQX0lPKTsKIAl9CisKKwkvKiBUdXJuIG9uICJkcml2ZXIgbG9hZGVkIiBMRUQgKi8KKwlza3kyX3dyaXRlMTYoaHcsIEIwX0NUU1QsIFkyX0xFRF9TVEFUX09OKTsKIH0KIAogc3RhdGljIHZvaWQgc2t5Ml9wb3dlcl9hdXgoc3RydWN0IHNreTJfaHcgKmh3KQpAQCAtMjY3LDExICsyNzIsMTUgQEAKIAkJCSAgICBZMl9DTEtfR0FUX0xOSzFfRElTIHwgWTJfUENJX0NMS19MTksyX0RJUyB8CiAJCQkgICAgWTJfQ09SX0NMS19MTksyX0RJUyB8IFkyX0NMS19HQVRfTE5LMl9ESVMpOwogCi0JLyogc3dpdGNoIHBvd2VyIHRvIFZBVVggKi8KLQlpZiAoc2t5Ml9yZWFkMTYoaHcsIEIwX0NUU1QpICYgWTJfVkFVWF9BVkFJTCkKKwkvKiBzd2l0Y2ggcG93ZXIgdG8gVkFVWCBpZiBzdXBwb3J0ZWQgYW5kIFBNRSBmcm9tIEQzY29sZCAqLworCWlmICggKHNreTJfcmVhZDMyKGh3LCBCMF9DVFNUKSAmIFkyX1ZBVVhfQVZBSUwpICYmCisJICAgICBwY2lfcG1lX2NhcGFibGUoaHctPnBkZXYsIFBDSV9EM2NvbGQpKQogCQlza3kyX3dyaXRlOChodywgQjBfUE9XRVJfQ1RSTCwKIAkJCSAgICAoUENfVkFVWF9FTkEgfCBQQ19WQ0NfRU5BIHwKIAkJCSAgICAgUENfVkFVWF9PTiB8IFBDX1ZDQ19PRkYpKTsKKworCS8qIHR1cm4gb2ZmICJkcml2ZXIgbG9hZGVkIExFRCIgKi8KKwlza3kyX3dyaXRlMTYoaHcsIEIwX0NUU1QsIFkyX0xFRF9TVEFUX09GRik7CiB9CiAKIHN0YXRpYyB2b2lkIHNreTJfZ21hY19yZXNldChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQpCkBAIC0zMjEsNyArMzMwLDcgQEAKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoaHctPmRldltwb3J0XSk7CiAJdTE2IGN0cmwsIGN0MTAwMCwgYWR2LCBwZywgbGVkY3RybCwgbGVkb3ZlciwgcmVnOwogCi0JaWYgKHNreTItPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYKKwlpZiAoIChza3kyLT5mbGFncyAmIFNLWTJfRkxBR19BVVRPX1NQRUVEKSAmJgogCSAgICAhKGh3LT5mbGFncyAmIFNLWTJfSFdfTkVXRVJfUEhZKSkgewogCQl1MTYgZWN0cmwgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfRVhUX0NUUkwpOwogCkBAIC0zNjMsNyArMzcyLDcgQEAKIAkJCWN0cmwgfD0gUEhZX01fUENfTURJX1hNT0RFKFBIWV9NX1BDX0VOQV9BVVRPKTsKIAogCQkJLyogZG93bnNoaWZ0IG9uIFBIWSA4OEUxMTEyIGFuZCA4OEUxMTQ5IGlzIGNoYW5nZWQgKi8KLQkJCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFCisJCQlpZiAoIChza3kyLT5mbGFncyAmIFNLWTJfRkxBR19BVVRPX1NQRUVEKQogCQkJICAgICYmIChody0+ZmxhZ3MgJiBTS1kyX0hXX05FV0VSX1BIWSkpIHsKIAkJCQkvKiBzZXQgZG93bnNoaWZ0IGNvdW50ZXIgdG8gM3ggYW5kIGVuYWJsZSBkb3duc2hpZnQgKi8KIAkJCQljdHJsICY9IH5QSFlfTV9QQ19EU0NfTVNLOwpAQCAtNDA4LDcgKzQxNyw3IEBACiAJYWR2ID0gUEhZX0FOX0NTTUE7CiAJcmVnID0gMDsKIAotCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CisJaWYgKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX0FVVE9fU1BFRUQpIHsKIAkJaWYgKHNreTJfaXNfY29wcGVyKGh3KSkgewogCQkJaWYgKHNreTItPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkKIAkJCQljdDEwMDAgfD0gUEhZX01fMTAwMENfQUZEOwpAQCAtNDIzLDE0ICs0MzIsMTEgQEAKIAkJCWlmIChza3kyLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmKQogCQkJCWFkdiB8PSBQSFlfTV9BTl8xMF9IRDsKIAotCQkJYWR2IHw9IGNvcHBlcl9mY19hZHZbc2t5Mi0+Zmxvd19tb2RlXTsKIAkJfSBlbHNlIHsJLyogc3BlY2lhbCBkZWZpbmVzIGZvciBGSUJFUiAoODhFMTA0MFMgb25seSkgKi8KIAkJCWlmIChza3kyLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpCiAJCQkJYWR2IHw9IFBIWV9NX0FOXzEwMDBYX0FGRDsKIAkJCWlmIChza3kyLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpCiAJCQkJYWR2IHw9IFBIWV9NX0FOXzEwMDBYX0FIRDsKLQotCQkJYWR2IHw9IGZpYmVyX2ZjX2Fkdltza3kyLT5mbG93X21vZGVdOwogCQl9CiAKIAkJLyogUmVzdGFydCBBdXRvLW5lZ290aWF0aW9uICovCkBAIC00MzksOCArNDQ1LDggQEAKIAkJLyogZm9yY2VkIHNwZWVkL2R1cGxleCBzZXR0aW5ncyAqLwogCQljdDEwMDAgPSBQSFlfTV8xMDAwQ19NU0U7CiAKLQkJLyogRGlzYWJsZSBhdXRvIHVwZGF0ZSBmb3IgZHVwbGV4IGZsb3cgY29udHJvbCBhbmQgc3BlZWQgKi8KLQkJcmVnIHw9IEdNX0dQQ1JfQVVfQUxMX0RJUzsKKwkJLyogRGlzYWJsZSBhdXRvIHVwZGF0ZSBmb3IgZHVwbGV4IGZsb3cgY29udHJvbCBhbmQgZHVwbGV4ICovCisJCXJlZyB8PSBHTV9HUENSX0FVX0RVUF9ESVMgfCBHTV9HUENSX0FVX1NQRF9ESVM7CiAKIAkJc3dpdGNoIChza3kyLT5zcGVlZCkgewogCQljYXNlIFNQRUVEXzEwMDA6CkBAIC00NTgsOCArNDY0LDE1IEBACiAJCQljdHJsIHw9IFBIWV9DVF9EVVBfTUQ7CiAJCX0gZWxzZSBpZiAoc2t5Mi0+c3BlZWQgPCBTUEVFRF8xMDAwKQogCQkJc2t5Mi0+Zmxvd19tb2RlID0gRkNfTk9ORTsKKwl9CiAKLQorCWlmIChza3kyLT5mbGFncyAmIFNLWTJfRkxBR19BVVRPX1BBVVNFKSB7CisJCWlmIChza3kyX2lzX2NvcHBlcihodykpCisJCQlhZHYgfD0gY29wcGVyX2ZjX2Fkdltza3kyLT5mbG93X21vZGVdOworCQllbHNlCisJCQlhZHYgfD0gZmliZXJfZmNfYWR2W3NreTItPmZsb3dfbW9kZV07CisJfSBlbHNlIHsKKwkJcmVnIHw9IEdNX0dQQ1JfQVVfRkNUX0RJUzsKICAJCXJlZyB8PSBnbV9mY19kaXNhYmxlW3NreTItPmZsb3dfbW9kZV07CiAKIAkJLyogRm9yd2FyZCBwYXVzZSBwYWNrZXRzIHRvIEdNQUM/ICovCkBAIC01OTQsNyArNjA3LDggQEAKIAkJLyogbm8gZWZmZWN0IG9uIFl1a29uLVhMICovCiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfTEVEX0NUUkwsIGxlZGN0cmwpOwogCi0JCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSB8fCBza3kyLT5zcGVlZCA9PSBTUEVFRF8xMDApIHsKKwkJaWYgKCAhKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX0FVVE9fU1BFRUQpCisJCSAgICAgfHwgc2t5Mi0+c3BlZWQgPT0gU1BFRURfMTAwKSB7CiAJCQkvKiB0dXJuIG9uIDEwMCBNYnBzIExFRCAoTEVEX0xJTksxMDApICovCiAJCQlsZWRvdmVyIHw9IFBIWV9NX0xFRF9NT18xMDAoTU9fTEVEX09OKTsKIAkJfQpAQCAtNjA1LDcgKzYxOSw3IEBACiAJfQogCiAJLyogRW5hYmxlIHBoeSBpbnRlcnJ1cHQgb24gYXV0by1uZWdvdGlhdGlvbiBjb21wbGV0ZSAob3IgbGluayB1cCkgKi8KLQlpZiAoc2t5Mi0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkKKwlpZiAoc2t5Mi0+ZmxhZ3MgJiBTS1kyX0ZMQUdfQVVUT19TUEVFRCkKIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9JTlRfTUFTSywgUEhZX01fSVNfQU5fQ09NUEwpOwogCWVsc2UKIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9JTlRfTUFTSywgUEhZX01fREVGX01TSyk7CkBAIC02NjEsNyArNjc1LDkgQEAKIAogCS8qIHNldHVwIEdlbmVyYWwgUHVycG9zZSBDb250cm9sIFJlZ2lzdGVyICovCiAJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwsCi0JCSAgICBHTV9HUENSX0ZMX1BBU1MgfCBHTV9HUENSX1NQRUVEXzEwMCB8IEdNX0dQQ1JfQVVfQUxMX0RJUyk7CisJCSAgICBHTV9HUENSX0ZMX1BBU1MgfCBHTV9HUENSX1NQRUVEXzEwMCB8CisJCSAgICBHTV9HUENSX0FVX0RVUF9ESVMgfCBHTV9HUENSX0FVX0ZDVF9ESVMgfAorCQkgICAgR01fR1BDUl9BVV9TUERfRElTKTsKIAogCWlmIChody0+Y2hpcF9pZCAhPSBDSElQX0lEX1lVS09OX0VDKSB7CiAJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UpIHsKQEAgLTk3NywyMyArOTkzLDI2IEBACiAgKiBoYXJkd2FyZSBhbmQgZHJpdmVyIGxpc3QgZWxlbWVudHMKICAqLwogc3RhdGljIHZvaWQgc2t5Ml9wcmVmZXRjaF9pbml0KHN0cnVjdCBza3kyX2h3ICpodywgdTMyIHFhZGRyLAotCQkJCSAgICAgIHU2NCBhZGRyLCB1MzIgbGFzdCkKKwkJCSAgICAgICBkbWFfYWRkcl90IGFkZHIsIHUzMiBsYXN0KQogewogCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIocWFkZHIsIFBSRUZfVU5JVF9DVFJMKSwgUFJFRl9VTklUX1JTVF9TRVQpOwogCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIocWFkZHIsIFBSRUZfVU5JVF9DVFJMKSwgUFJFRl9VTklUX1JTVF9DTFIpOwotCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIocWFkZHIsIFBSRUZfVU5JVF9BRERSX0hJKSwgYWRkciA+PiAzMik7Ci0Jc2t5Ml93cml0ZTMyKGh3LCBZMl9RQUREUihxYWRkciwgUFJFRl9VTklUX0FERFJfTE8pLCAodTMyKSBhZGRyKTsKKwlza3kyX3dyaXRlMzIoaHcsIFkyX1FBRERSKHFhZGRyLCBQUkVGX1VOSVRfQUREUl9ISSksIHVwcGVyXzMyX2JpdHMoYWRkcikpOworCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIocWFkZHIsIFBSRUZfVU5JVF9BRERSX0xPKSwgbG93ZXJfMzJfYml0cyhhZGRyKSk7CiAJc2t5Ml93cml0ZTE2KGh3LCBZMl9RQUREUihxYWRkciwgUFJFRl9VTklUX0xBU1RfSURYKSwgbGFzdCk7CiAJc2t5Ml93cml0ZTMyKGh3LCBZMl9RQUREUihxYWRkciwgUFJFRl9VTklUX0NUUkwpLCBQUkVGX1VOSVRfT1BfT04pOwogCiAJc2t5Ml9yZWFkMzIoaHcsIFkyX1FBRERSKHFhZGRyLCBQUkVGX1VOSVRfQ1RSTCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza3kyX3R4X2xlICpnZXRfdHhfbGUoc3RydWN0IHNreTJfcG9ydCAqc2t5MikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNreTJfdHhfbGUgKmdldF90eF9sZShzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyLCB1MTYgKnNsb3QpCiB7Ci0Jc3RydWN0IHNreTJfdHhfbGUgKmxlID0gc2t5Mi0+dHhfbGUgKyBza3kyLT50eF9wcm9kOworCXN0cnVjdCBza3kyX3R4X2xlICpsZSA9IHNreTItPnR4X2xlICsgKnNsb3Q7CisJc3RydWN0IHR4X3JpbmdfaW5mbyAqcmUgPSBza3kyLT50eF9yaW5nICsgKnNsb3Q7CiAKLQlza3kyLT50eF9wcm9kID0gUklOR19ORVhUKHNreTItPnR4X3Byb2QsIFRYX1JJTkdfU0laRSk7CisJKnNsb3QgPSBSSU5HX05FWFQoKnNsb3QsIHNreTItPnR4X3Jpbmdfc2l6ZSk7CisJcmUtPmZsYWdzID0gMDsKKwlyZS0+c2tiID0gTlVMTDsKIAlsZS0+Y3RybCA9IDA7CiAJcmV0dXJuIGxlOwogfQpAQCAtMTAwNiwxNSArMTAyNSwxMCBAQAogCXNreTItPnR4X3RjcHN1bSA9IDA7CiAJc2t5Mi0+dHhfbGFzdF9tc3MgPSAwOwogCi0JbGUgPSBnZXRfdHhfbGUoc2t5Mik7CisJbGUgPSBnZXRfdHhfbGUoc2t5MiwgJnNreTItPnR4X3Byb2QpOwogCWxlLT5hZGRyID0gMDsKIAlsZS0+b3Bjb2RlID0gT1BfQUREUjY0IHwgSFdfT1dORVI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHR4X3JpbmdfaW5mbyAqdHhfbGVfcmUoc3RydWN0IHNreTJfcG9ydCAqc2t5MiwKLQkJCQkJICAgIHN0cnVjdCBza3kyX3R4X2xlICpsZSkKLXsKLQlyZXR1cm4gc2t5Mi0+dHhfcmluZyArIChsZSAtIHNreTItPnR4X2xlKTsKKwlza3kyLT50eF9sYXN0X3VwcGVyID0gMDsKIH0KIAogLyogVXBkYXRlIGNoaXAncyBuZXh0IHBvaW50ZXIgKi8KQEAgLTEwNTAsNyArMTA2NCw3IEBACiAJfQogCiAJbGUgPSBza3kyX25leHRfcngoc2t5Mik7Ci0JbGUtPmFkZHIgPSBjcHVfdG9fbGUzMigodTMyKSBtYXApOworCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIobG93ZXJfMzJfYml0cyhtYXApKTsKIAlsZS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKIAlsZS0+b3Bjb2RlID0gb3AgfCBIV19PV05FUjsKIH0KQEAgLTExMTcsNyArMTEzMSw4IEBACiAKIAlza3kyX3dyaXRlMzIoc2t5Mi0+aHcsCiAJCSAgICAgUV9BRERSKHJ4cWFkZHJbc2t5Mi0+cG9ydF0sIFFfQ1NSKSwKLQkJICAgICBza3kyLT5yeF9jc3VtID8gQk1VX0VOQV9SWF9DSEtTVU0gOiBCTVVfRElTX1JYX0NIS1NVTSk7CisJCSAgICAgKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKQorCQkgICAgID8gQk1VX0VOQV9SWF9DSEtTVU0gOiBCTVVfRElTX1JYX0NIS1NVTSk7CiB9CiAKIC8qCkBAIC0xMTY5LDcgKzExODQsNiBAQAogCQkJcmUtPnNrYiA9IE5VTEw7CiAJCX0KIAl9Ci0Jc2tiX3F1ZXVlX3B1cmdlKCZza3kyLT5yeF9yZWN5Y2xlKTsKIH0KIAogLyogQmFzaWMgTUlJIHN1cHBvcnQgKi8KQEAgLTEyMDAsOSArMTIxNCw2IEBACiAJfQogCiAJY2FzZSBTSU9DU01JSVJFRzoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQogCQlzcGluX2xvY2tfYmgoJnNreTItPnBoeV9sb2NrKTsKIAkJZXJyID0gZ21fcGh5X3dyaXRlKGh3LCBza3kyLT5wb3J0LCBkYXRhLT5yZWdfbnVtICYgMHgxZiwKIAkJCQkgICBkYXRhLT52YWxfaW4pOwpAQCAtMTI2MSwxMCArMTI3Miw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgaTsKIAotCXNrYiA9IF9fc2tiX2RlcXVldWUoJnNreTItPnJ4X3JlY3ljbGUpOwotCWlmICghc2tiKQotCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHNreTItPm5ldGRldiwgc2t5Mi0+cnhfZGF0YV9zaXplCi0JCQkJICAgICAgICsgc2t5Ml9yeF9wYWQoc2t5Mi0+aHcpKTsKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHNreTItPm5ldGRldiwKKwkJCSAgICAgICBza3kyLT5yeF9kYXRhX3NpemUgKyBza3kyX3J4X3BhZChza3kyLT5odykpOwogCWlmICghc2tiKQogCQlnb3RvIG5vbWVtOwogCkBAIC0xMzU2LDggKzEzNjUsNiBAQAogCiAJc2t5Mi0+cnhfZGF0YV9zaXplID0gc2l6ZTsKIAotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNreTItPnJ4X3JlY3ljbGUpOwotCiAJLyogRmlsbCBSeCByaW5nICovCiAJZm9yIChpID0gMDsgaSA8IHNreTItPnJ4X3BlbmRpbmc7IGkrKykgewogCQlyZSA9IHNreTItPnJ4X3JpbmcgKyBpOwpAQCAtMTM5Niw2ICsxNDAzLDYxIEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKK3N0YXRpYyBpbnQgc2t5Ml9hbGxvY19idWZmZXJzKHN0cnVjdCBza3kyX3BvcnQgKnNreTIpCit7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisKKwkvKiBtdXN0IGJlIHBvd2VyIG9mIDIgKi8KKwlza3kyLT50eF9sZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGh3LT5wZGV2LAorCQkJCQkgICBza3kyLT50eF9yaW5nX3NpemUgKgorCQkJCQkgICBzaXplb2Yoc3RydWN0IHNreTJfdHhfbGUpLAorCQkJCQkgICAmc2t5Mi0+dHhfbGVfbWFwKTsKKwlpZiAoIXNreTItPnR4X2xlKQorCQlnb3RvIG5vbWVtOworCisJc2t5Mi0+dHhfcmluZyA9IGtjYWxsb2Moc2t5Mi0+dHhfcmluZ19zaXplLCBzaXplb2Yoc3RydWN0IHR4X3JpbmdfaW5mbyksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFza3kyLT50eF9yaW5nKQorCQlnb3RvIG5vbWVtOworCisJc2t5Mi0+cnhfbGUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChody0+cGRldiwgUlhfTEVfQllURVMsCisJCQkJCSAgICZza3kyLT5yeF9sZV9tYXApOworCWlmICghc2t5Mi0+cnhfbGUpCisJCWdvdG8gbm9tZW07CisJbWVtc2V0KHNreTItPnJ4X2xlLCAwLCBSWF9MRV9CWVRFUyk7CisKKwlza3kyLT5yeF9yaW5nID0ga2NhbGxvYyhza3kyLT5yeF9wZW5kaW5nLCBzaXplb2Yoc3RydWN0IHJ4X3JpbmdfaW5mbyksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFza3kyLT5yeF9yaW5nKQorCQlnb3RvIG5vbWVtOworCisJcmV0dXJuIDA7Citub21lbToKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgc2t5Ml9mcmVlX2J1ZmZlcnMoc3RydWN0IHNreTJfcG9ydCAqc2t5MikKK3sKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKKworCWlmIChza3kyLT5yeF9sZSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGh3LT5wZGV2LCBSWF9MRV9CWVRFUywKKwkJCQkgICAgc2t5Mi0+cnhfbGUsIHNreTItPnJ4X2xlX21hcCk7CisJCXNreTItPnJ4X2xlID0gTlVMTDsKKwl9CisJaWYgKHNreTItPnR4X2xlKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaHctPnBkZXYsCisJCQkJICAgIHNreTItPnR4X3Jpbmdfc2l6ZSAqIHNpemVvZihzdHJ1Y3Qgc2t5Ml90eF9sZSksCisJCQkJICAgIHNreTItPnR4X2xlLCBza3kyLT50eF9sZV9tYXApOworCQlza3kyLT50eF9sZSA9IE5VTEw7CisJfQorCWtmcmVlKHNreTItPnR4X3JpbmcpOworCWtmcmVlKHNreTItPnJ4X3JpbmcpOworCisJc2t5Mi0+dHhfcmluZyA9IE5VTEw7CisJc2t5Mi0+cnhfcmluZyA9IE5VTEw7Cit9CisKIC8qIEJyaW5nIHVwIG5ldHdvcmsgaW50ZXJmYWNlLiAqLwogc3RhdGljIGludCBza3kyX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xNDAzLDcgKzE0NjUsNyBAQAogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OwogCXUzMiBpbWFzaywgcmFtc2l6ZTsKLQlpbnQgY2FwLCBlcnIgPSAtRU5PTUVNOworCWludCBjYXAsIGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJkZXYgPSBody0+ZGV2W3NreTItPnBvcnReMV07CiAKIAkvKgpAQCAtMTQyMiwzMiArMTQ4NCwxMiBAQAogCiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAotCS8qIG11c3QgYmUgcG93ZXIgb2YgMiAqLwotCXNreTItPnR4X2xlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaHctPnBkZXYsCi0JCQkJCSAgIFRYX1JJTkdfU0laRSAqCi0JCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2t5Ml90eF9sZSksCi0JCQkJCSAgICZza3kyLT50eF9sZV9tYXApOwotCWlmICghc2t5Mi0+dHhfbGUpCi0JCWdvdG8gZXJyX291dDsKLQotCXNreTItPnR4X3JpbmcgPSBrY2FsbG9jKFRYX1JJTkdfU0laRSwgc2l6ZW9mKHN0cnVjdCB0eF9yaW5nX2luZm8pLAotCQkJCUdGUF9LRVJORUwpOwotCWlmICghc2t5Mi0+dHhfcmluZykKKwllcnIgPSBza3kyX2FsbG9jX2J1ZmZlcnMoc2t5Mik7CisJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwogCiAJdHhfaW5pdChza3kyKTsKIAotCXNreTItPnJ4X2xlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaHctPnBkZXYsIFJYX0xFX0JZVEVTLAotCQkJCQkgICAmc2t5Mi0+cnhfbGVfbWFwKTsKLQlpZiAoIXNreTItPnJ4X2xlKQotCQlnb3RvIGVycl9vdXQ7Ci0JbWVtc2V0KHNreTItPnJ4X2xlLCAwLCBSWF9MRV9CWVRFUyk7Ci0KLQlza3kyLT5yeF9yaW5nID0ga2NhbGxvYyhza3kyLT5yeF9wZW5kaW5nLCBzaXplb2Yoc3RydWN0IHJ4X3JpbmdfaW5mbyksCi0JCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFza3kyLT5yeF9yaW5nKQotCQlnb3RvIGVycl9vdXQ7Ci0KIAlza3kyX21hY19pbml0KGh3LCBwb3J0KTsKIAogCS8qIFJlZ2lzdGVyIGlzIG51bWJlciBvZiA0SyBibG9ja3Mgb24gaW50ZXJuYWwgUkFNIGJ1ZmZlci4gKi8KQEAgLTE0ODIsMTQgKzE1MjQsMTIgQEAKIAkJc2t5Ml93cml0ZTE2KGh3LCBRX0FERFIodHhxYWRkcltwb3J0XSwgUV9BTCksIEVDVV9UWEZGX0xFVik7CiAKIAlza3kyX3ByZWZldGNoX2luaXQoaHcsIHR4cWFkZHJbcG9ydF0sIHNreTItPnR4X2xlX21hcCwKLQkJCSAgIFRYX1JJTkdfU0laRSAtIDEpOworCQkJICAgc2t5Mi0+dHhfcmluZ19zaXplIC0gMSk7CiAKICNpZmRlZiBTS1kyX1ZMQU5fVEFHX1VTRUQKIAlza3kyX3NldF92bGFuX21vZGUoaHcsIHBvcnQsIHNreTItPnZsZ3JwICE9IE5VTEwpOwogI2VuZGlmCiAKLQlza3kyLT5yZXN0YXJ0aW5nID0gMDsKLQogCWVyciA9IHNreTJfcnhfc3RhcnQoc2t5Mik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwpAQCAtMTUwMCw0NyArMTU0MCwyNiBAQAogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaW1hc2spOwogCXNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKTsKIAotCXNreTJfc2V0X211bHRpY2FzdChkZXYpOwotCi0JLyogd2FrZSBxdWV1ZSBpbmNhc2Ugd2UgYXJlIHJlc3RhcnRpbmcgKi8KLQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0KIAlpZiAobmV0aWZfbXNnX2lmdXAoc2t5MikpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogZW5hYmxpbmcgaW50ZXJmYWNlXG4iLCBkZXYtPm5hbWUpOworCiAJcmV0dXJuIDA7CiAKIGVycl9vdXQ6Ci0JaWYgKHNreTItPnJ4X2xlKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoaHctPnBkZXYsIFJYX0xFX0JZVEVTLAotCQkJCSAgICBza3kyLT5yeF9sZSwgc2t5Mi0+cnhfbGVfbWFwKTsKLQkJc2t5Mi0+cnhfbGUgPSBOVUxMOwotCX0KLQlpZiAoc2t5Mi0+dHhfbGUpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChody0+cGRldiwKLQkJCQkgICAgVFhfUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBza3kyX3R4X2xlKSwKLQkJCQkgICAgc2t5Mi0+dHhfbGUsIHNreTItPnR4X2xlX21hcCk7Ci0JCXNreTItPnR4X2xlID0gTlVMTDsKLQl9Ci0Ja2ZyZWUoc2t5Mi0+dHhfcmluZyk7Ci0Ja2ZyZWUoc2t5Mi0+cnhfcmluZyk7Ci0KLQlza3kyLT50eF9yaW5nID0gTlVMTDsKLQlza3kyLT5yeF9yaW5nID0gTlVMTDsKKwlza3kyX2ZyZWVfYnVmZmVycyhza3kyKTsKIAlyZXR1cm4gZXJyOwogfQogCiAvKiBNb2R1bGFyIHN1YnRyYWN0aW9uIGluIHJpbmcgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHR4X2Rpc3QodW5zaWduZWQgdGFpbCwgdW5zaWduZWQgaGVhZCkKK3N0YXRpYyBpbmxpbmUgaW50IHR4X2ludXNlKGNvbnN0IHN0cnVjdCBza3kyX3BvcnQgKnNreTIpCiB7Ci0JcmV0dXJuIChoZWFkIC0gdGFpbCkgJiAoVFhfUklOR19TSVpFIC0gMSk7CisJcmV0dXJuIChza3kyLT50eF9wcm9kIC0gc2t5Mi0+dHhfY29ucykgJiAoc2t5Mi0+dHhfcmluZ19zaXplIC0gMSk7CiB9CiAKIC8qIE51bWJlciBvZiBsaXN0IGVsZW1lbnRzIGF2YWlsYWJsZSBmb3IgbmV4dCB0eCAqLwogc3RhdGljIGlubGluZSBpbnQgdHhfYXZhaWwoY29uc3Qgc3RydWN0IHNreTJfcG9ydCAqc2t5MikKIHsKLQlpZiAodW5saWtlbHkoc2t5Mi0+cmVzdGFydGluZykpCi0JCXJldHVybiAwOwotCXJldHVybiBza3kyLT50eF9wZW5kaW5nIC0gdHhfZGlzdChza3kyLT50eF9jb25zLCBza3kyLT50eF9wcm9kKTsKKwlyZXR1cm4gc2t5Mi0+dHhfcGVuZGluZyAtIHR4X2ludXNlKHNreTIpOwogfQogCiAvKiBFc3RpbWF0ZSBvZiBudW1iZXIgb2YgdHJhbnNtaXQgbGlzdCBlbGVtZW50cyByZXF1aXJlZCAqLwpAQCAtMTU2MCwyMCArMTU3OSwzNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHZvaWQgc2t5Ml90eF91bm1hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCSAgY29uc3Qgc3RydWN0IHR4X3JpbmdfaW5mbyAqcmUpCit7CisJaWYgKHJlLT5mbGFncyAmIFRYX01BUF9TSU5HTEUpCisJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAorCQkJCSBwY2lfdW5tYXBfbGVuKHJlLCBtYXBsZW4pLAorCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwllbHNlIGlmIChyZS0+ZmxhZ3MgJiBUWF9NQVBfUEFHRSkKKwkJcGNpX3VubWFwX3BhZ2UocGRldiwgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAorCQkJICAgICAgIHBjaV91bm1hcF9sZW4ocmUsIG1hcGxlbiksCisJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Cit9CisKIC8qCiAgKiBQdXQgb25lIHBhY2tldCBpbiByaW5nIGZvciB0cmFuc21pdC4KICAqIEEgc2luZ2xlIHBhY2tldCBjYW4gZ2VuZXJhdGUgbXVsdGlwbGUgbGlzdCBlbGVtZW50cywgYW5kCiAgKiB0aGUgbnVtYmVyIG9mIHJpbmcgZWxlbWVudHMgd2lsbCBwcm9iYWJseSBiZSBsZXNzIHRoYW4gdGhlIG51bWJlcgogICogb2YgbGlzdCBlbGVtZW50cyB1c2VkLgogICovCi1zdGF0aWMgaW50IHNreTJfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNreTJfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CiAJc3RydWN0IHNreTJfdHhfbGUgKmxlID0gTlVMTDsKIAlzdHJ1Y3QgdHhfcmluZ19pbmZvICpyZTsKLQl1bnNpZ25lZCBpLCBsZW4sIGZpcnN0X3Nsb3Q7CisJdW5zaWduZWQgaSwgbGVuOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKKwl1MzIgdXBwZXI7CisJdTE2IHNsb3Q7CiAJdTE2IG1zczsKIAl1OCBjdHJsOwogCkBAIC0xNTg2LDE1ICsxNjIxLDE3IEBACiAJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihody0+cGRldiwgbWFwcGluZykpCiAJCWdvdG8gbWFwcGluZ19lcnJvcjsKIAotCWZpcnN0X3Nsb3QgPSBza3kyLT50eF9wcm9kOworCXNsb3QgPSBza3kyLT50eF9wcm9kOwogCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfcXVldWVkKHNreTIpKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBxdWV1ZWQsIHNsb3QgJXUsIGxlbiAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZmlyc3Rfc2xvdCwgc2tiLT5sZW4pOworCQkgICAgICAgZGV2LT5uYW1lLCBzbG90LCBza2ItPmxlbik7CiAKIAkvKiBTZW5kIGhpZ2ggYml0cyBpZiBuZWVkZWQgKi8KLQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpIHsKLQkJbGUgPSBnZXRfdHhfbGUoc2t5Mik7Ci0JCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhtYXBwaW5nKSk7CisJdXBwZXIgPSB1cHBlcl8zMl9iaXRzKG1hcHBpbmcpOworCWlmICh1cHBlciAhPSBza3kyLT50eF9sYXN0X3VwcGVyKSB7CisJCWxlID0gZ2V0X3R4X2xlKHNreTIsICZzbG90KTsKKwkJbGUtPmFkZHIgPSBjcHVfdG9fbGUzMih1cHBlcik7CisJCXNreTItPnR4X2xhc3RfdXBwZXIgPSB1cHBlcjsKIAkJbGUtPm9wY29kZSA9IE9QX0FERFI2NCB8IEhXX09XTkVSOwogCX0KIApAQCAtMTYwNiw3ICsxNjQzLDcgQEAKIAkJCW1zcyArPSBFVEhfSExFTiArIGlwX2hkcmxlbihza2IpICsgdGNwX2hkcmxlbihza2IpOwogCiAgIAkJaWYgKG1zcyAhPSBza3kyLT50eF9sYXN0X21zcykgewotICAJCQlsZSA9IGdldF90eF9sZShza3kyKTsKKwkJCWxlID0gZ2V0X3R4X2xlKHNreTIsICZzbG90KTsKICAgCQkJbGUtPmFkZHIgPSBjcHVfdG9fbGUzMihtc3MpOwogCiAJCQlpZiAoaHctPmZsYWdzICYgU0tZMl9IV19ORVdfTEUpCkBAIC0xNjIyLDcgKzE2NTksNyBAQAogCS8qIEFkZCBWTEFOIHRhZywgY2FuIHBpZ2d5YmFjayBvbiBMUkdMRU4gb3IgQUREUjY0ICovCiAJaWYgKHNreTItPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewogCQlpZiAoIWxlKSB7Ci0JCQlsZSA9IGdldF90eF9sZShza3kyKTsKKwkJCWxlID0gZ2V0X3R4X2xlKHNreTIsICZzbG90KTsKIAkJCWxlLT5hZGRyID0gMDsKIAkJCWxlLT5vcGNvZGUgPSBPUF9WTEFOfEhXX09XTkVSOwogCQl9IGVsc2UKQEAgLTE2NTEsNyArMTY4OCw3IEBACiAJCQlpZiAodGNwc3VtICE9IHNreTItPnR4X3RjcHN1bSkgewogCQkJCXNreTItPnR4X3RjcHN1bSA9IHRjcHN1bTsKIAotCQkJCWxlID0gZ2V0X3R4X2xlKHNreTIpOworCQkJCWxlID0gZ2V0X3R4X2xlKHNreTIsICZzbG90KTsKIAkJCQlsZS0+YWRkciA9IGNwdV90b19sZTMyKHRjcHN1bSk7CiAJCQkJbGUtPmxlbmd0aCA9IDA7CS8qIGluaXRpYWwgY2hlY2tzdW0gdmFsdWUgKi8KIAkJCQlsZS0+Y3RybCA9IDE7CS8qIG9uZSBwYWNrZXQgKi8KQEAgLTE2NjAsMTYgKzE2OTcsMTcgQEAKIAkJfQogCX0KIAotCWxlID0gZ2V0X3R4X2xlKHNreTIpOwotCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIoKHUzMikgbWFwcGluZyk7CisJcmUgPSBza3kyLT50eF9yaW5nICsgc2xvdDsKKwlyZS0+ZmxhZ3MgPSBUWF9NQVBfU0lOR0xFOworCXBjaV91bm1hcF9hZGRyX3NldChyZSwgbWFwYWRkciwgbWFwcGluZyk7CisJcGNpX3VubWFwX2xlbl9zZXQocmUsIG1hcGxlbiwgbGVuKTsKKworCWxlID0gZ2V0X3R4X2xlKHNreTIsICZzbG90KTsKKwlsZS0+YWRkciA9IGNwdV90b19sZTMyKGxvd2VyXzMyX2JpdHMobWFwcGluZykpOwogCWxlLT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZW4pOwogCWxlLT5jdHJsID0gY3RybDsKIAlsZS0+b3Bjb2RlID0gbXNzID8gKE9QX0xBUkdFU0VORCB8IEhXX09XTkVSKSA6IChPUF9QQUNLRVQgfCBIV19PV05FUik7CiAKLQlyZSA9IHR4X2xlX3JlKHNreTIsIGxlKTsKLQlyZS0+c2tiID0gc2tiOwotCXBjaV91bm1hcF9hZGRyX3NldChyZSwgbWFwYWRkciwgbWFwcGluZyk7Ci0JcGNpX3VubWFwX2xlbl9zZXQocmUsIG1hcGxlbiwgbGVuKTsKIAogCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKIAkJY29uc3Qgc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOwpAQCAtMTY4MCwyNyArMTcxOCwzMSBAQAogCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGh3LT5wZGV2LCBtYXBwaW5nKSkKIAkJCWdvdG8gbWFwcGluZ191bndpbmQ7CiAKLQkJaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IHNpemVvZih1MzIpKSB7Ci0JCQlsZSA9IGdldF90eF9sZShza3kyKTsKLQkJCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhtYXBwaW5nKSk7Ci0JCQlsZS0+Y3RybCA9IDA7CisJCXVwcGVyID0gdXBwZXJfMzJfYml0cyhtYXBwaW5nKTsKKwkJaWYgKHVwcGVyICE9IHNreTItPnR4X2xhc3RfdXBwZXIpIHsKKwkJCWxlID0gZ2V0X3R4X2xlKHNreTIsICZzbG90KTsKKwkJCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIodXBwZXIpOworCQkJc2t5Mi0+dHhfbGFzdF91cHBlciA9IHVwcGVyOwogCQkJbGUtPm9wY29kZSA9IE9QX0FERFI2NCB8IEhXX09XTkVSOwogCQl9CiAKLQkJbGUgPSBnZXRfdHhfbGUoc2t5Mik7Ci0JCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIoKHUzMikgbWFwcGluZyk7CisJCXJlID0gc2t5Mi0+dHhfcmluZyArIHNsb3Q7CisJCXJlLT5mbGFncyA9IFRYX01BUF9QQUdFOworCQlwY2lfdW5tYXBfYWRkcl9zZXQocmUsIG1hcGFkZHIsIG1hcHBpbmcpOworCQlwY2lfdW5tYXBfbGVuX3NldChyZSwgbWFwbGVuLCBmcmFnLT5zaXplKTsKKworCQlsZSA9IGdldF90eF9sZShza3kyLCAmc2xvdCk7CisJCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIobG93ZXJfMzJfYml0cyhtYXBwaW5nKSk7CiAJCWxlLT5sZW5ndGggPSBjcHVfdG9fbGUxNihmcmFnLT5zaXplKTsKIAkJbGUtPmN0cmwgPSBjdHJsOwogCQlsZS0+b3Bjb2RlID0gT1BfQlVGRkVSIHwgSFdfT1dORVI7Ci0KLQkJcmUgPSB0eF9sZV9yZShza3kyLCBsZSk7Ci0JCXJlLT5za2IgPSBza2I7Ci0JCXBjaV91bm1hcF9hZGRyX3NldChyZSwgbWFwYWRkciwgbWFwcGluZyk7Ci0JCXBjaV91bm1hcF9sZW5fc2V0KHJlLCBtYXBsZW4sIGZyYWctPnNpemUpOwogCX0KIAorCXJlLT5za2IgPSBza2I7CiAJbGUtPmN0cmwgfD0gRU9QOwogCisJc2t5Mi0+dHhfcHJvZCA9IHNsb3Q7CisKIAlpZiAodHhfYXZhaWwoc2t5MikgPD0gTUFYX1NLQl9UWF9MRSkKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCkBAIC0xNzA5LDI3ICsxNzUxLDEyIEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogbWFwcGluZ191bndpbmQ6Ci0JZm9yIChpID0gZmlyc3Rfc2xvdDsgaSAhPSBza3kyLT50eF9wcm9kOyBpID0gUklOR19ORVhUKGksIFRYX1JJTkdfU0laRSkpIHsKLQkJbGUgPSBza3kyLT50eF9sZSArIGk7CisJZm9yIChpID0gc2t5Mi0+dHhfcHJvZDsgaSAhPSBzbG90OyBpID0gUklOR19ORVhUKGksIHNreTItPnR4X3Jpbmdfc2l6ZSkpIHsKIAkJcmUgPSBza3kyLT50eF9yaW5nICsgaTsKIAotCQlzd2l0Y2gobGUtPm9wY29kZSAmIH5IV19PV05FUikgewotCQljYXNlIE9QX0xBUkdFU0VORDoKLQkJY2FzZSBPUF9QQUNLRVQ6Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKGh3LT5wZGV2LAotCQkJCQkgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAotCQkJCQkgcGNpX3VubWFwX2xlbihyZSwgbWFwbGVuKSwKLQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfQlVGRkVSOgotCQkJcGNpX3VubWFwX3BhZ2UoaHctPnBkZXYsIHBjaV91bm1hcF9hZGRyKHJlLCBtYXBhZGRyKSwKLQkJCQkgICAgICAgcGNpX3VubWFwX2xlbihyZSwgbWFwbGVuKSwKLQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JCQlicmVhazsKLQkJfQorCQlza3kyX3R4X3VubWFwKGh3LT5wZGV2LCByZSk7CiAJfQogCi0Jc2t5Mi0+dHhfcHJvZCA9IGZpcnN0X3Nsb3Q7CiBtYXBwaW5nX2Vycm9yOgogCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCWRldl93YXJuKCZody0+cGRldi0+ZGV2LCAiJXM6IHR4IG1hcHBpbmcgZXJyb3JcbiIsIGRldi0+bmFtZSk7CkBAIC0xNzQwLDQwICsxNzY3LDI4IEBACiAvKgogICogRnJlZSByaW5nIGVsZW1lbnRzIGZyb20gc3RhcnRpbmcgYXQgdHhfY29ucyB1bnRpbCAiZG9uZSIKICAqCi0gKiBOQjogdGhlIGhhcmR3YXJlIHdpbGwgdGVsbCB1cyBhYm91dCBwYXJ0aWFsIGNvbXBsZXRpb24gb2YgbXVsdGktcGFydAorICogTkI6CisgKiAgMS4gVGhlIGhhcmR3YXJlIHdpbGwgdGVsbCB1cyBhYm91dCBwYXJ0aWFsIGNvbXBsZXRpb24gb2YgbXVsdGktcGFydAogICogICAgIGJ1ZmZlcnMgc28gbWFrZSBzdXJlIG5vdCB0byBmcmVlIHNrYiB0byBlYXJseS4KKyAqICAyLiBUaGlzIG1heSBydW4gaW4gcGFyYWxsZWwgc3RhcnRfeG1pdCBiZWNhdXNlIHRoZSBpdCBvbmx5CisgKiAgICAgbG9va3MgYXQgdGhlIHRhaWwgb2YgdGhlIHF1ZXVlIG9mIEZJRk8gKHR4X2NvbnMpLCBub3QKKyAqICAgICB0aGUgaGVhZCAodHhfcHJvZCkKICAqLwogc3RhdGljIHZvaWQgc2t5Ml90eF9jb21wbGV0ZShzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyLCB1MTYgZG9uZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2t5Mi0+bmV0ZGV2OwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc2t5Mi0+aHctPnBkZXY7CiAJdW5zaWduZWQgaWR4OwogCi0JQlVHX09OKGRvbmUgPj0gVFhfUklOR19TSVpFKTsKKwlCVUdfT04oZG9uZSA+PSBza3kyLT50eF9yaW5nX3NpemUpOwogCiAJZm9yIChpZHggPSBza3kyLT50eF9jb25zOyBpZHggIT0gZG9uZTsKLQkgICAgIGlkeCA9IFJJTkdfTkVYVChpZHgsIFRYX1JJTkdfU0laRSkpIHsKLQkJc3RydWN0IHNreTJfdHhfbGUgKmxlID0gc2t5Mi0+dHhfbGUgKyBpZHg7CisJICAgICBpZHggPSBSSU5HX05FWFQoaWR4LCBza3kyLT50eF9yaW5nX3NpemUpKSB7CiAJCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJlID0gc2t5Mi0+dHhfcmluZyArIGlkeDsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJlLT5za2I7CiAKLQkJc3dpdGNoKGxlLT5vcGNvZGUgJiB+SFdfT1dORVIpIHsKLQkJY2FzZSBPUF9MQVJHRVNFTkQ6Ci0JCWNhc2UgT1BfUEFDS0VUOgotCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LAotCQkJCQkgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAotCQkJCQkgcGNpX3VubWFwX2xlbihyZSwgbWFwbGVuKSwKLQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfQlVGRkVSOgotCQkJcGNpX3VubWFwX3BhZ2UocGRldiwgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAotCQkJCSAgICAgICBwY2lfdW5tYXBfbGVuKHJlLCBtYXBsZW4pLAotCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCWJyZWFrOwotCQl9CisJCXNreTJfdHhfdW5tYXAoc2t5Mi0+aHctPnBkZXYsIHJlKTsKIAotCQlpZiAobGUtPmN0cmwgJiBFT1ApIHsKLQkJCXN0cnVjdCBza19idWZmICpza2IgPSByZS0+c2tiOwotCisJCWlmIChza2IpIHsKIAkJCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfZG9uZShza3kyKSkpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBkb25lICV1XG4iLAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGlkeCk7CkBAIC0xNzgxLDE0ICsxNzk2LDkgQEAKIAkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAotCQkJaWYgKHNrYl9xdWV1ZV9sZW4oJnNreTItPnJ4X3JlY3ljbGUpIDwgc2t5Mi0+cnhfcGVuZGluZwotCQkJICAgICYmIHNrYl9yZWN5Y2xlX2NoZWNrKHNrYiwgc2t5Mi0+cnhfZGF0YV9zaXplCi0JCQkJCQkgKyBza3kyX3J4X3BhZChza3kyLT5odykpKQotCQkJCV9fc2tiX3F1ZXVlX2hlYWQoJnNreTItPnJ4X3JlY3ljbGUsIHNrYik7Ci0JCQllbHNlCi0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKLQkJCXNreTItPnR4X25leHQgPSBSSU5HX05FWFQoaWR4LCBUWF9SSU5HX1NJWkUpOworCQkJc2t5Mi0+dHhfbmV4dCA9IFJJTkdfTkVYVChpZHgsIHNreTItPnR4X3Jpbmdfc2l6ZSk7CiAJCX0KIAl9CiAKQEAgLTE3OTksMTQgKzE4MDksMjYgQEAKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCi0vKiBDbGVhbnVwIGFsbCB1bnRyYW5zbWl0dGVkIGJ1ZmZlcnMsIGFzc3VtZSB0cmFuc21pdHRlciBub3QgcnVubmluZyAqLwotc3RhdGljIHZvaWQgc2t5Ml90eF9jbGVhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgc2t5Ml90eF9yZXNldChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQpCiB7Ci0Jc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJLyogRGlzYWJsZSBGb3JjZSBTeW5jIGJpdCBhbmQgRW5hYmxlIEFsbG9jIGJpdCAqLworCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgVFhBX0NUUkwpLAorCQkgICAgVFhBX0RJU19GU1lOQyB8IFRYQV9ESVNfQUxMT0MgfCBUWEFfU1RPUF9SQyk7CiAKLQluZXRpZl90eF9sb2NrX2JoKGRldik7Ci0Jc2t5Ml90eF9jb21wbGV0ZShza3kyLCBza3kyLT50eF9wcm9kKTsKLQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKKwkvKiBTdG9wIEludGVydmFsIFRpbWVyIGFuZCBMaW1pdCBDb3VudGVyIG9mIFR4IEFyYml0ZXIgKi8KKwlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWEFfSVRJX0lOSSksIDBMKTsKKwlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWEFfTElNX0lOSSksIDBMKTsKKworCS8qIFJlc2V0IHRoZSBQQ0kgRklGTyBvZiB0aGUgYXN5bmMgVHggcXVldWUgKi8KKwlza3kyX3dyaXRlMzIoaHcsIFFfQUREUih0eHFhZGRyW3BvcnRdLCBRX0NTUiksCisJCSAgICAgQk1VX1JTVF9TRVQgfCBCTVVfRklGT19SU1QpOworCisJLyogUmVzZXQgdGhlIFR4IHByZWZldGNoIHVuaXRzICovCisJc2t5Ml93cml0ZTMyKGh3LCBZMl9RQUREUih0eHFhZGRyW3BvcnRdLCBQUkVGX1VOSVRfQ1RSTCksCisJCSAgICAgUFJFRl9VTklUX1JTVF9TRVQpOworCisJc2t5Ml93cml0ZTMyKGh3LCBSQl9BRERSKHR4cWFkZHJbcG9ydF0sIFJCX0NUUkwpLCBSQl9SU1RfU0VUKTsKKwlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBHTUZfUlNUX1NFVCk7CiB9CiAKIC8qIE5ldHdvcmsgc2h1dGRvd24gKi8KQEAgLTE4MjUsMTAgKzE4NDcsNiBAQAogCWlmIChuZXRpZl9tc2dfaWZkb3duKHNreTIpKQogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IGRpc2FibGluZyBpbnRlcmZhY2VcbiIsIGRldi0+bmFtZSk7CiAKLQkvKiBleHBsaWNpdGx5IHNodXQgb2ZmIHR4IGluY2FzZSB3ZSdyZSByZXN0YXJ0aW5nICovCi0Jc2t5Mi0+cmVzdGFydGluZyA9IDE7Ci0JbmV0aWZfdHhfZGlzYWJsZShkZXYpOwotCiAJLyogRm9yY2UgZmxvdyBjb250cm9sIG9mZiAqLwogCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19DVFJMKSwgR01DX1BBVVNFX09GRik7CiAKQEAgLTE4NTAsMjYgKzE4NjgsNyBAQAogCSAgICAgICYmIHBvcnQgPT0gMCAmJiBody0+ZGV2WzFdICYmIG5ldGlmX3J1bm5pbmcoaHctPmRldlsxXSkpKQogCQlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIEdNQUNfQ1RSTCksIEdNQ19SU1RfU0VUKTsKIAotCS8qIERpc2FibGUgRm9yY2UgU3luYyBiaXQgYW5kIEVuYWJsZSBBbGxvYyBiaXQgKi8KLQlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFRYQV9DVFJMKSwKLQkJICAgIFRYQV9ESVNfRlNZTkMgfCBUWEFfRElTX0FMTE9DIHwgVFhBX1NUT1BfUkMpOwotCi0JLyogU3RvcCBJbnRlcnZhbCBUaW1lciBhbmQgTGltaXQgQ291bnRlciBvZiBUeCBBcmJpdGVyICovCi0Jc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgVFhBX0lUSV9JTkkpLCAwTCk7Ci0Jc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgVFhBX0xJTV9JTkkpLCAwTCk7Ci0KLQkvKiBSZXNldCB0aGUgUENJIEZJRk8gb2YgdGhlIGFzeW5jIFR4IHF1ZXVlICovCi0Jc2t5Ml93cml0ZTMyKGh3LCBRX0FERFIodHhxYWRkcltwb3J0XSwgUV9DU1IpLAotCQkgICAgIEJNVV9SU1RfU0VUIHwgQk1VX0ZJRk9fUlNUKTsKLQotCS8qIFJlc2V0IHRoZSBUeCBwcmVmZXRjaCB1bml0cyAqLwotCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIodHhxYWRkcltwb3J0XSwgUFJFRl9VTklUX0NUUkwpLAotCQkgICAgIFBSRUZfVU5JVF9SU1RfU0VUKTsKLQotCXNreTJfd3JpdGUzMihodywgUkJfQUREUih0eHFhZGRyW3BvcnRdLCBSQl9DVFJMKSwgUkJfUlNUX1NFVCk7Ci0KIAlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9DVFJMX1QpLCBHTUZfUlNUX1NFVCk7Ci0Jc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwgR01GX1JTVF9TRVQpOwogCiAJLyogRm9yY2UgYW55IGRlbGF5ZWQgc3RhdHVzIGludGVycnJ1cHQgYW5kIE5BUEkgKi8KIAlza3kyX3dyaXRlMzIoaHcsIFNUQVRfTEVWX1RJTUVSX0NOVCwgMCk7CkBAIC0xODg4LDI4ICsxODg3LDE4IEBACiAJc3luY2hyb25pemVfaXJxKGh3LT5wZGV2LT5pcnEpOwogCW5hcGlfc3luY2hyb25pemUoJmh3LT5uYXBpKTsKIAorCXNwaW5fbG9ja19iaCgmc2t5Mi0+cGh5X2xvY2spOwogCXNreTJfcGh5X3Bvd2VyX2Rvd24oaHcsIHBvcnQpOworCXNwaW5fdW5sb2NrX2JoKCZza3kyLT5waHlfbG9jayk7CiAKLQkvKiB0dXJuIG9mZiBMRUQncyAqLwotCXNreTJfd3JpdGUxNihodywgQjBfWTJMRUQsIExFRF9TVEFUX09GRik7CisJc2t5Ml90eF9yZXNldChodywgcG9ydCk7CiAKLQlza3kyX3R4X2NsZWFuKGRldik7CisJLyogRnJlZSBhbnkgcGVuZGluZyBmcmFtZXMgc3R1Y2sgaW4gSFcgcXVldWUgKi8KKwlza3kyX3R4X2NvbXBsZXRlKHNreTIsIHNreTItPnR4X3Byb2QpOworCiAJc2t5Ml9yeF9jbGVhbihza3kyKTsKIAotCXBjaV9mcmVlX2NvbnNpc3RlbnQoaHctPnBkZXYsIFJYX0xFX0JZVEVTLAotCQkJICAgIHNreTItPnJ4X2xlLCBza3kyLT5yeF9sZV9tYXApOwotCWtmcmVlKHNreTItPnJ4X3JpbmcpOwotCi0JcGNpX2ZyZWVfY29uc2lzdGVudChody0+cGRldiwKLQkJCSAgICBUWF9SSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IHNreTJfdHhfbGUpLAotCQkJICAgIHNreTItPnR4X2xlLCBza3kyLT50eF9sZV9tYXApOwotCWtmcmVlKHNreTItPnR4X3JpbmcpOwotCi0Jc2t5Mi0+dHhfbGUgPSBOVUxMOwotCXNreTItPnJ4X2xlID0gTlVMTDsKLQotCXNreTItPnJ4X3JpbmcgPSBOVUxMOwotCXNreTItPnR4X3JpbmcgPSBOVUxMOworCXNreTJfZnJlZV9idWZmZXJzKHNreTIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMDgzLDcgKzIwNzIsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHBoeSBpbnRlcnJ1cHQgc3RhdHVzIDB4JXggMHgleFxuIiwKIAkJICAgICAgIHNreTItPm5ldGRldi0+bmFtZSwgaXN0YXR1cywgcGh5c3RhdCk7CiAKLQlpZiAoc2t5Mi0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSAmJiAoaXN0YXR1cyAmIFBIWV9NX0lTX0FOX0NPTVBMKSkgeworCWlmIChpc3RhdHVzICYgUEhZX01fSVNfQU5fQ09NUEwpIHsKIAkJaWYgKHNreTJfYXV0b25lZ19kb25lKHNreTIsIHBoeXN0YXQpID09IDApCiAJCQlza3kyX2xpbmtfdXAoc2t5Mik7CiAJCWdvdG8gb3V0OwpAQCAtMjM3MCwxMSArMjM1OSw4IEBACiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAobGlrZWx5KG5ldGlmX3J1bm5pbmcoZGV2KSAmJiAhc2t5Mi0+cmVzdGFydGluZykpIHsKLQkJbmV0aWZfdHhfbG9jayhkZXYpOworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiAJCXNreTJfdHhfY29tcGxldGUoc2t5MiwgbGFzdCk7Ci0JCW5ldGlmX3R4X3VubG9jayhkZXYpOwotCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNreTJfc2tiX3J4KGNvbnN0IHN0cnVjdCBza3kyX3BvcnQgKnNreTIsCkBAIC0yNDUyLDcgKzI0MzgsNyBAQAogCiAJCQkvKiBUaGlzIGNoaXAgcmVwb3J0cyBjaGVja3N1bSBzdGF0dXMgZGlmZmVyZW50bHkgKi8KIAkJCWlmIChody0+ZmxhZ3MgJiBTS1kyX0hXX05FV19MRSkgewotCQkJCWlmIChza3kyLT5yeF9jc3VtICYmCisJCQkJaWYgKChza3kyLT5mbGFncyAmIFNLWTJfRkxBR19SWF9DSEVDS1NVTSkgJiYKIAkJCQkgICAgKGxlLT5jc3MgJiAoQ1NTX0lTSVBWNCB8IENTU19JU0lQVjYpKSAmJgogCQkJCSAgICAobGUtPmNzcyAmIENTU19UQ1BVRFBDU09LKSkKIAkJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKQEAgLTI0NzksNyArMjQ2NSw3IEBACiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KICNlbmRpZgogCQljYXNlIE9QX1JYQ0hLUzoKLQkJCWlmICghc2t5Mi0+cnhfY3N1bSkKKwkJCWlmICghKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKSkKIAkJCQlicmVhazsKIAogCQkJLyogSWYgdGhpcyBoYXBwZW5zIHRoZW4gZHJpdmVyIGFzc3VtaW5nIHdyb25nIGZvcm1hdCAqLwpAQCAtMjUwNCw3ICsyNDkwLDggQEAKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UgUEZYICIlczogaGFyZHdhcmUgcmVjZWl2ZSAiCiAJCQkJICAgICAgICJjaGVja3N1bSBwcm9ibGVtIChzdGF0dXMgPSAlI3gpXG4iLAogCQkJCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7Ci0JCQkJc2t5Mi0+cnhfY3N1bSA9IDA7CisJCQkJc2t5Mi0+ZmxhZ3MgJj0gflNLWTJfRkxBR19SWF9DSEVDS1NVTTsKKwogCQkJCXNreTJfd3JpdGUzMihza3kyLT5odywKIAkJCQkJICAgICBRX0FERFIocnhxYWRkcltwb3J0XSwgUV9DU1IpLAogCQkJCQkgICAgIEJNVV9ESVNfUlhfQ0hLU1VNKTsKQEAgLTI1MTMsNyArMjUwMCw2IEBACiAKIAkJY2FzZSBPUF9UWElOREVYTEU6CiAJCQkvKiBUWCBpbmRleCByZXBvcnRzIHN0YXR1cyBmb3IgYm90aCBwb3J0cyAqLwotCQkJQlVJTERfQlVHX09OKFRYX1JJTkdfU0laRSA+IDB4MTAwMCk7CiAJCQlza3kyX3R4X2RvbmUoaHctPmRldlswXSwgc3RhdHVzICYgMHhmZmYpOwogCQkJaWYgKGh3LT5kZXZbMV0pCiAJCQkJc2t5Ml90eF9kb25lKGh3LT5kZXZbMV0sCkBAIC0yNjU3LDE5ICsyNjQzLDE1IEBACiB9CiAKIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBpdCBpcyBhIGJ1Zy4gKi8KLXN0YXRpYyB2b2lkIHNreTJfbGVfZXJyb3Ioc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBwb3J0LAotCQkJICB1MTYgcSwgdW5zaWduZWQgcmluZ19zaXplKQorc3RhdGljIHZvaWQgc2t5Ml9sZV9lcnJvcihzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQsIHUxNiBxKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W3BvcnRdOwotCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGlkeDsKLQljb25zdCB1NjQgKmxlID0gKHEgPT0gUV9SMSB8fCBxID09IFFfUjIpCi0JCT8gKHU2NCAqKSBza3kyLT5yeF9sZSA6ICh1NjQgKikgc2t5Mi0+dHhfbGU7CisJdTE2IGlkeCA9IHNreTJfcmVhZDE2KGh3LCBZMl9RQUREUihxLCBQUkVGX1VOSVRfR0VUX0lEWCkpOwogCi0JaWR4ID0gc2t5Ml9yZWFkMTYoaHcsIFkyX1FBRERSKHEsIFBSRUZfVU5JVF9HRVRfSURYKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGRlc2NyaXB0b3IgZXJyb3IgcT0lI3ggZ2V0PSV1IFslbGx4XSBwdXQ9JXVcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgKHVuc2lnbmVkKSBxLCBpZHgsICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlW2lkeF0sCi0JICAgICAgICh1bnNpZ25lZCkgc2t5Ml9yZWFkMTYoaHcsIFkyX1FBRERSKHEsIFBSRUZfVU5JVF9QVVRfSURYKSkpOworCWRldl9lcnIoJmh3LT5wZGV2LT5kZXYsIFBGWAorCQkiJXM6IGRlc2NyaXB0b3IgZXJyb3IgcT0lI3ggZ2V0PSV1IHB1dD0ldVxuIiwKKwkJZGV2LT5uYW1lLCAodW5zaWduZWQpIHEsICh1bnNpZ25lZCkgaWR4LAorCQkodW5zaWduZWQpIHNreTJfcmVhZDE2KGh3LCBZMl9RQUREUihxLCBQUkVGX1VOSVRfUFVUX0lEWCkpKTsKIAogCXNreTJfd3JpdGUzMihodywgUV9BRERSKHEsIFFfQ1NSKSwgQk1VX0NMUl9JUlFfQ0hLKTsKIH0KQEAgLTI3NTUsMTYgKzI3MzcsMTYgQEAKIAkJc2t5Ml9tYWNfaW50cihodywgMSk7CiAKIAlpZiAoc3RhdHVzICYgWTJfSVNfQ0hLX1JYMSkKLQkJc2t5Ml9sZV9lcnJvcihodywgMCwgUV9SMSwgUlhfTEVfU0laRSk7CisJCXNreTJfbGVfZXJyb3IoaHcsIDAsIFFfUjEpOwogCiAJaWYgKHN0YXR1cyAmIFkyX0lTX0NIS19SWDIpCi0JCXNreTJfbGVfZXJyb3IoaHcsIDEsIFFfUjIsIFJYX0xFX1NJWkUpOworCQlza3kyX2xlX2Vycm9yKGh3LCAxLCBRX1IyKTsKIAogCWlmIChzdGF0dXMgJiBZMl9JU19DSEtfVFhBMSkKLQkJc2t5Ml9sZV9lcnJvcihodywgMCwgUV9YQTEsIFRYX1JJTkdfU0laRSk7CisJCXNreTJfbGVfZXJyb3IoaHcsIDAsIFFfWEExKTsKIAogCWlmIChzdGF0dXMgJiBZMl9JU19DSEtfVFhBMikKLQkJc2t5Ml9sZV9lcnJvcihodywgMSwgUV9YQTIsIFRYX1JJTkdfU0laRSk7CisJCXNreTJfbGVfZXJyb3IoaHcsIDEsIFFfWEEyKTsKIH0KIAogc3RhdGljIGludCBza3kyX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgd29ya19saW1pdCkKQEAgLTMwMDksOCArMjk5MSw2IEBACiAJc2t5Ml93cml0ZTgoaHcsIEIyX1RJX0NUUkwsIFRJTV9TVE9QKTsKIAlza3kyX3dyaXRlOChodywgQjJfVElfQ1RSTCwgVElNX0NMUl9JUlEpOwogCi0Jc2t5Ml93cml0ZTgoaHcsIEIwX1kyTEVELCBMRURfU1RBVF9PTik7Ci0KIAkvKiBUdXJuIG9mZiBkZXNjcmlwdG9yIHBvbGxpbmcgKi8KIAlza3kyX3dyaXRlMzIoaHcsIEIyOF9EUFRfQ1RSTCwgRFBUX1NUT1ApOwogCkBAIC0zMDc4LDE4ICszMDU4LDQ2IEBACiAJc2t5Ml93cml0ZTgoaHcsIFNUQVRfSVNSX1RJTUVSX0NUUkwsIFRJTV9TVEFSVCk7CiB9CiAKKy8qIFRha2UgZGV2aWNlIGRvd24gKG9mZmxpbmUpLgorICogRXF1aXZhbGVudCB0byBkb2luZyBkZXZfc3RvcCgpIGJ1dCB0aGlzIGRvZXMgbm90CisgKiBpbmZvcm0gdXBwZXIgbGF5ZXJzIG9mIHRoZSB0cmFuc2lzdGlvbi4KKyAqLworc3RhdGljIHZvaWQgc2t5Ml9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsJLyogc3RvcCB0eHEgKi8KKwkJc2t5Ml9kb3duKGRldik7CisJfQorfQorCisvKiBCcmluZyBkZXZpY2UgYmFjayBhZnRlciBkb2luZyBza3kyX2RldGFjaCAqLworc3RhdGljIGludCBza3kyX3JlYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IHNreTJfdXAoZGV2KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBjb3VsZCBub3QgcmVzdGFydCAlZFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlkZXZfY2xvc2UoZGV2KTsKKwkJfSBlbHNlIHsKKwkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwkJCXNreTJfc2V0X211bHRpY2FzdChkZXYpOworCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIHZvaWQgc2t5Ml9yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNreTJfaHcsIHJlc3RhcnRfd29yayk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgaSwgZXJyOworCWludCBpOwogCiAJcnRubF9sb2NrKCk7Ci0JZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7Ci0JCWRldiA9IGh3LT5kZXZbaV07Ci0JCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCQlza3kyX2Rvd24oZGV2KTsKLQl9CisJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKQorCQlza3kyX2RldGFjaChody0+ZGV2W2ldKTsKIAogCW5hcGlfZGlzYWJsZSgmaHctPm5hcGkpOwogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgMCk7CkBAIC0zMDk3LDE3ICszMTA1LDggQEAKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIFkyX0lTX0JBU0UpOwogCW5hcGlfZW5hYmxlKCZody0+bmFwaSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKLQkJZGV2ID0gaHctPmRldltpXTsKLQkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQkJZXJyID0gc2t5Ml91cChkZXYpOwotCQkJaWYgKGVycikgewotCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogY291bGQgbm90IHJlc3RhcnQgJWRcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCQlkZXZfY2xvc2UoZGV2KTsKLQkJCX0KLQkJfQotCX0KKwlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspCisJCXNreTJfcmVhdHRhY2goaHctPmRldltpXSk7CiAKIAlydG5sX3VubG9jaygpOwogfQpAQCAtMzE4Niw3ICszMTg1LDggQEAKIAl9CiAKIAllY21kLT5hZHZlcnRpc2luZyA9IHNreTItPmFkdmVydGlzaW5nOwotCWVjbWQtPmF1dG9uZWcgPSBza3kyLT5hdXRvbmVnOworCWVjbWQtPmF1dG9uZWcgPSAoc2t5Mi0+ZmxhZ3MgJiBTS1kyX0ZMQUdfQVVUT19TUEVFRCkKKwkJPyBBVVRPTkVHX0VOQUJMRSA6IEFVVE9ORUdfRElTQUJMRTsKIAllY21kLT5kdXBsZXggPSBza3kyLT5kdXBsZXg7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTk4LDYgKzMxOTgsNyBAQAogCXUzMiBzdXBwb3J0ZWQgPSBza3kyX3N1cHBvcnRlZF9tb2Rlcyhodyk7CiAKIAlpZiAoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQlza3kyLT5mbGFncyB8PSBTS1kyX0ZMQUdfQVVUT19TUEVFRDsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSBzdXBwb3J0ZWQ7CiAJCXNreTItPmR1cGxleCA9IC0xOwogCQlza3kyLT5zcGVlZCA9IC0xOwpAQCAtMzIzOSw5ICszMjQwLDkgQEAKIAogCQlza3kyLT5zcGVlZCA9IGVjbWQtPnNwZWVkOwogCQlza3kyLT5kdXBsZXggPSBlY21kLT5kdXBsZXg7CisJCXNreTItPmZsYWdzICY9IH5TS1kyX0ZMQUdfQVVUT19TUEVFRDsKIAl9CiAKLQlza3kyLT5hdXRvbmVnID0gZWNtZC0+YXV0b25lZzsKIAlza3kyLT5hZHZlcnRpc2luZyA9IGVjbWQtPmFkdmVydGlzaW5nOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewpAQCAtMzMxMSwxNCArMzMxMiwxNyBAQAogewogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmV0dXJuIHNreTItPnJ4X2NzdW07CisJcmV0dXJuICEhKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKTsKIH0KIAogc3RhdGljIGludCBza3kyX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0Jc2t5Mi0+cnhfY3N1bSA9IGRhdGE7CisJaWYgKGRhdGEpCisJCXNreTItPmZsYWdzIHw9IFNLWTJfRkxBR19SWF9DSEVDS1NVTTsKKwllbHNlCisJCXNreTItPmZsYWdzICY9IH5TS1kyX0ZMQUdfUlhfQ0hFQ0tTVU07CiAKIAlza3kyX3dyaXRlMzIoc2t5Mi0+aHcsIFFfQUREUihyeHFhZGRyW3NreTItPnBvcnRdLCBRX0NTUiksCiAJCSAgICAgZGF0YSA/IEJNVV9FTkFfUlhfQ0hLU1VNIDogQk1VX0RJU19SWF9DSEtTVU0pOwpAQCAtMzMzNiw3ICszMzQwLDcgQEAKIHsKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICghbmV0aWZfcnVubmluZyhkZXYpIHx8IHNreTItPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikgfHwgIShza3kyLT5mbGFncyAmIFNLWTJfRkxBR19BVVRPX1NQRUVEKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlza3kyX3BoeV9yZWluaXQoc2t5Mik7CkBAIC0zNTc2LDcgKzM1ODAsOCBAQAogCQllY21kLT50eF9wYXVzZSA9IGVjbWQtPnJ4X3BhdXNlID0gMTsKIAl9CiAKLQllY21kLT5hdXRvbmVnID0gc2t5Mi0+YXV0b25lZzsKKwllY21kLT5hdXRvbmVnID0gKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX0FVVE9fUEFVU0UpCisJCT8gQVVUT05FR19FTkFCTEUgOiBBVVRPTkVHX0RJU0FCTEU7CiB9CiAKIHN0YXRpYyBpbnQgc2t5Ml9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMzU4NCw3ICszNTg5LDExIEBACiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlza3kyLT5hdXRvbmVnID0gZWNtZC0+YXV0b25lZzsKKwlpZiAoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkKKwkJc2t5Mi0+ZmxhZ3MgfD0gU0tZMl9GTEFHX0FVVE9fUEFVU0U7CisJZWxzZQorCQlza3kyLT5mbGFncyAmPSB+U0tZMl9GTEFHX0FVVE9fUEFVU0U7CisKIAlza3kyLT5mbG93X21vZGUgPSBza3kyX2Zsb3coZWNtZC0+cnhfcGF1c2UsIGVjbWQtPnR4X3BhdXNlKTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCkBAIC0zNjQwLDcgKzM2NDksNyBAQAogCSAgICBlY21kLT5yeF9jb2FsZXNjZV91c2Vjc19pcnEgPiB0bWF4KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChlY21kLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA+PSBUWF9SSU5HX1NJWkUtMSkKKwlpZiAoZWNtZC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPj0gc2t5Mi0+dHhfcmluZ19zaXplLTEpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChlY21kLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA+IFJYX01BWF9QRU5ESU5HKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM2ODQsNyArMzY5Myw3IEBACiAJZXJpbmctPnJ4X21heF9wZW5kaW5nID0gUlhfTUFYX1BFTkRJTkc7CiAJZXJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOwogCWVyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7Ci0JZXJpbmctPnR4X21heF9wZW5kaW5nID0gVFhfUklOR19TSVpFIC0gMTsKKwllcmluZy0+dHhfbWF4X3BlbmRpbmcgPSBUWF9NQVhfUEVORElORzsKIAogCWVyaW5nLT5yeF9wZW5kaW5nID0gc2t5Mi0+cnhfcGVuZGluZzsKIAllcmluZy0+cnhfbWluaV9wZW5kaW5nID0gMDsKQEAgLTM2OTYsMjcgKzM3MDUsMjAgQEAKIAkJCSAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZXJpbmcpCiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IDA7CiAKIAlpZiAoZXJpbmctPnJ4X3BlbmRpbmcgPiBSWF9NQVhfUEVORElORyB8fAogCSAgICBlcmluZy0+cnhfcGVuZGluZyA8IDggfHwKLQkgICAgZXJpbmctPnR4X3BlbmRpbmcgPCBNQVhfU0tCX1RYX0xFIHx8Ci0JICAgIGVyaW5nLT50eF9wZW5kaW5nID4gVFhfUklOR19TSVpFIC0gMSkKKwkgICAgZXJpbmctPnR4X3BlbmRpbmcgPCBUWF9NSU5fUEVORElORyB8fAorCSAgICBlcmluZy0+dHhfcGVuZGluZyA+IFRYX01BWF9QRU5ESU5HKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCXNreTJfZG93bihkZXYpOworCXNreTJfZGV0YWNoKGRldik7CiAKIAlza3kyLT5yeF9wZW5kaW5nID0gZXJpbmctPnJ4X3BlbmRpbmc7CiAJc2t5Mi0+dHhfcGVuZGluZyA9IGVyaW5nLT50eF9wZW5kaW5nOworCXNreTItPnR4X3Jpbmdfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhza3kyLT50eF9wZW5kaW5nKzEpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQllcnIgPSBza3kyX3VwKGRldik7Ci0JCWlmIChlcnIpCi0JCQlkZXZfY2xvc2UoZGV2KTsKLQl9Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiBza3kyX3JlYXR0YWNoKGRldik7CiB9CiAKIHN0YXRpYyBpbnQgc2t5Ml9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTQwODQsOCArNDA4Niw4IEBACiAKIAkvKiBEdW1wIGNvbnRlbnRzIG9mIHR4IHJpbmcgKi8KIAlzb3AgPSAxOwotCWZvciAoaWR4ID0gc2t5Mi0+dHhfbmV4dDsgaWR4ICE9IHNreTItPnR4X3Byb2QgJiYgaWR4IDwgVFhfUklOR19TSVpFOwotCSAgICAgaWR4ID0gUklOR19ORVhUKGlkeCwgVFhfUklOR19TSVpFKSkgeworCWZvciAoaWR4ID0gc2t5Mi0+dHhfbmV4dDsgaWR4ICE9IHNreTItPnR4X3Byb2QgJiYgaWR4IDwgc2t5Mi0+dHhfcmluZ19zaXplOworCSAgICAgaWR4ID0gUklOR19ORVhUKGlkeCwgc2t5Mi0+dHhfcmluZ19zaXplKSkgewogCQljb25zdCBzdHJ1Y3Qgc2t5Ml90eF9sZSAqbGUgPSBza3kyLT50eF9sZSArIGlkeDsKIAkJdTMyIGEgPSBsZTMyX3RvX2NwdShsZS0+YWRkcik7CiAKQEAgLTQxMjgsNyArNDEzMCw3IEBACiAKIAlzZXFfcHJpbnRmKHNlcSwgIlxuUnggcmluZyBodyBnZXQ9JWQgcHV0PSVkIGxhc3Q9JWRcbiIsCiAJCSAgIHNreTJfcmVhZDE2KGh3LCBZMl9RQUREUihyeHFhZGRyW3BvcnRdLCBQUkVGX1VOSVRfR0VUX0lEWCkpLAotCQkgICBsYXN0ID0gc2t5Ml9yZWFkMTYoaHcsIFkyX1FBRERSKHJ4cWFkZHJbcG9ydF0sIFBSRUZfVU5JVF9QVVRfSURYKSksCisJCSAgIHNreTJfcmVhZDE2KGh3LCBZMl9RQUREUihyeHFhZGRyW3BvcnRdLCBQUkVGX1VOSVRfUFVUX0lEWCkpLAogCQkgICBza3kyX3JlYWQxNihodywgWTJfUUFERFIocnhxYWRkcltwb3J0XSwgUFJFRl9VTklUX0xBU1RfSURYKSkpOwogCiAJc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0xJU1IpOwpAQCAtNDI4MiwxOSArNDI4NCwyMiBAQAogCXNreTItPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgZGVmYXVsdF9tc2cpOwogCiAJLyogQXV0byBzcGVlZCBhbmQgZmxvdyBjb250cm9sICovCi0Jc2t5Mi0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCXNreTItPmZsYWdzID0gU0tZMl9GTEFHX0FVVE9fU1BFRUQgfCBTS1kyX0ZMQUdfQVVUT19QQVVTRTsKKwlpZiAoaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9ZVUtPTl9YTCkKKwkJc2t5Mi0+ZmxhZ3MgfD0gU0tZMl9GTEFHX1JYX0NIRUNLU1VNOworCiAJc2t5Mi0+Zmxvd19tb2RlID0gRkNfQk9USDsKIAogCXNreTItPmR1cGxleCA9IC0xOwogCXNreTItPnNwZWVkID0gLTE7CiAJc2t5Mi0+YWR2ZXJ0aXNpbmcgPSBza3kyX3N1cHBvcnRlZF9tb2Rlcyhodyk7Ci0Jc2t5Mi0+cnhfY3N1bSA9IChody0+Y2hpcF9pZCAhPSBDSElQX0lEX1lVS09OX1hMKTsKIAlza3kyLT53b2wgPSB3b2w7CiAKIAlzcGluX2xvY2tfaW5pdCgmc2t5Mi0+cGh5X2xvY2spOworCiAJc2t5Mi0+dHhfcGVuZGluZyA9IFRYX0RFRl9QRU5ESU5HOworCXNreTItPnR4X3Jpbmdfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhUWF9ERUZfUEVORElORysxKTsKIAlza3kyLT5yeF9wZW5kaW5nID0gUlhfREVGX1BFTkRJTkc7Ci0Jc2t5Mi0+cmVzdGFydGluZyA9IDA7CiAKIAlody0+ZGV2W3BvcnRdID0gZGV2OwogCkBAIC00NjAyLDcgKzQ2MDcsNiBAQAogCiAJc2t5Ml9wb3dlcl9hdXgoaHcpOwogCi0Jc2t5Ml93cml0ZTE2KGh3LCBCMF9ZMkxFRCwgTEVEX1NUQVRfT0ZGKTsKIAlza3kyX3dyaXRlOChodywgQjBfQ1RTVCwgQ1NfUlNUX1NFVCk7CiAJc2t5Ml9yZWFkOChodywgQjBfQ1RTVCk7CiAKQEAgLTQ2MzQsMTMgKzQ2MzgsMTIgQEAKIAlkZWxfdGltZXJfc3luYygmaHctPndhdGNoZG9nX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZody0+cmVzdGFydF93b3JrKTsKIAorCXJ0bmxfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgPCBody0+cG9ydHM7IGkrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPmRldltpXTsKIAkJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAKLQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQkJc2t5Ml9kb3duKGRldik7CisJCXNreTJfZGV0YWNoKGRldik7CiAKIAkJaWYgKHNreTItPndvbCkKIAkJCXNreTJfd29sX2luaXQoc2t5Mik7CkBAIC00NjUxLDYgKzQ2NTQsNyBAQAogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgMCk7CiAJbmFwaV9kaXNhYmxlKCZody0+bmFwaSk7CiAJc2t5Ml9wb3dlcl9hdXgoaHcpOworCXJ0bmxfdW5sb2NrKCk7CiAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZW5hYmxlX3dha2UocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSksIHdvbCk7CkBAIC00Njg3LDI1ICs0NjkxLDE4IEBACiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBZMl9JU19CQVNFKTsKIAluYXBpX2VuYWJsZSgmaHctPm5hcGkpOwogCisJcnRubF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W2ldOwotCi0JCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQkJZXJyID0gc2t5Ml91cChkZXYpOwotCQkJaWYgKGVycikgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjb3VsZCBub3QgdXA6ICVkXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQkJcnRubF9sb2NrKCk7Ci0JCQkJZGV2X2Nsb3NlKGRldik7Ci0JCQkJcnRubF91bmxvY2soKTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQorCQllcnIgPSBza3kyX3JlYXR0YWNoKGh3LT5kZXZbaV0pOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CiAJfQorCXJ0bmxfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIG91dDoKKwlydG5sX3VubG9jaygpOworCiAJZGV2X2VycigmcGRldi0+ZGV2LCAicmVzdW1lIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlyZXR1cm4gZXJyOwpAQCAtNDcyMCw2ICs0NzE3LDcgQEAKIAlpZiAoIWh3KQogCQlyZXR1cm47CiAKKwlydG5sX2xvY2soKTsKIAlkZWxfdGltZXJfc3luYygmaHctPndhdGNoZG9nX3RpbWVyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBody0+cG9ydHM7IGkrKykgewpAQCAtNDczNCw2ICs0NzMyLDcgQEAKIAogCWlmICh3b2wpCiAJCXNreTJfcG93ZXJfYXV4KGh3KTsKKwlydG5sX3VubG9jaygpOwogCiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgd29sKTsKIAlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgd29sKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuaCBiL2RyaXZlcnMvbmV0L3NreTIuaAppbmRleCA0NDg2YjA2Li5lMGYyM2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmgKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5oCkBAIC0xNTUsNyArMTU1LDcgQEAKIGVudW0gY3NyX3JlZ3MgewogCUIwX1JBUAkJPSAweDAwMDAsCiAJQjBfQ1RTVAkJPSAweDAwMDQsCi0JQjBfWTJMRUQJPSAweDAwMDUsCisKIAlCMF9QT1dFUl9DVFJMCT0gMHgwMDA3LAogCUIwX0lTUkMJCT0gMHgwMDA4LAogCUIwX0lNU0sJCT0gMHgwMDBjLApAQCAtMjYwLDcgKzI2MCw3IEBACiAJWTJfQ0ZHX0FFUiAgICAgID0gMHgxZDAwLAkvKiBQQ0kgQWR2YW5jZWQgRXJyb3IgUmVwb3J0IHJlZ2lvbiAqLwogfTsKIAotLyoJQjBfQ1RTVAkJCTE2IGJpdAlDb250cm9sL1N0YXR1cyByZWdpc3RlciAqLworLyoJQjBfQ1RTVAkJCTI0IGJpdAlDb250cm9sL1N0YXR1cyByZWdpc3RlciAqLwogZW51bSB7CiAJWTJfVk1BSU5fQVZBSUwJPSAxPDwxNywvKiBWTUFJTiBhdmFpbGFibGUgKFlVS09OLTIgb25seSkgKi8KIAlZMl9WQVVYX0FWQUlMCT0gMTw8MTYsLyogVkFVWCBhdmFpbGFibGUgKFlVS09OLTIgb25seSkgKi8KQEAgLTI4MywxMyArMjgzLDYgQEAKIAlDU19SU1RfU0VUCT0gMSwJLyogU2V0ICAgU29mdHdhcmUgcmVzZXQJKi8KIH07CiAKLS8qCUIwX0xFRAkJCSA4IEJpdAlMRUQgcmVnaXN0ZXIgKi8KLWVudW0gewotLyogQml0ICA3Li4gMjoJcmVzZXJ2ZWQgKi8KLQlMRURfU1RBVF9PTgk9IDE8PDEsCS8qIFN0YXR1cyBMRUQgb24JKi8KLQlMRURfU1RBVF9PRkYJPSAxLAkvKiBTdGF0dXMgTEVEIG9mZgkqLwotfTsKLQogLyoJQjBfUE9XRVJfQ1RSTAkgOCBCaXQJUG93ZXIgQ29udHJvbCByZWcgKFlVS09OIG9ubHkpICovCiBlbnVtIHsKIAlQQ19WQVVYX0VOQQk9IDE8PDcsCS8qIFN3aXRjaCBWQVVYIEVuYWJsZSAgKi8KQEAgLTE1ODMsNyArMTU3Niw2IEBACiB9OwogCiAjZGVmaW5lIEdNX0dQQ1JfU1BFRURfMTAwMAkoR01fR1BDUl9HSUdTX0VOQSB8IEdNX0dQQ1JfU1BFRURfMTAwKQotI2RlZmluZSBHTV9HUENSX0FVX0FMTF9ESVMJKEdNX0dQQ1JfQVVfRFVQX0RJUyB8IEdNX0dQQ1JfQVVfRkNUX0RJU3xHTV9HUENSX0FVX1NQRF9ESVMpCiAKIC8qCUdNX1RYX0NUUkwJCQkxNiBiaXQgci93CVRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgKi8KIGVudW0gewpAQCAtMTk4NSw2ICsxOTc3LDkgQEAKIAogc3RydWN0IHR4X3JpbmdfaW5mbyB7CiAJc3RydWN0IHNrX2J1ZmYJKnNrYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworI2RlZmluZSBUWF9NQVBfU0lOR0xFICAgMHgwMDAxCisjZGVmaW5lIFRYX01BUF9QQUdFICAgICAwMDAwMDIKIAlERUNMQVJFX1BDSV9VTk1BUF9BRERSKG1hcGFkZHIpOwogCURFQ0xBUkVfUENJX1VOTUFQX0xFTihtYXBsZW4pOwogfTsKQEAgLTIwMTIsMTIgKzIwMDcsMTQgQEAKIAogCXN0cnVjdCB0eF9yaW5nX2luZm8gICp0eF9yaW5nOwogCXN0cnVjdCBza3kyX3R4X2xlICAgICp0eF9sZTsKKwl1MTYJCSAgICAgdHhfcmluZ19zaXplOwogCXUxNgkJICAgICB0eF9jb25zOwkJLyogbmV4dCBsZSB0byBjaGVjayAqLwogCXUxNgkJICAgICB0eF9wcm9kOwkJLyogbmV4dCBsZSB0byB1c2UgKi8KIAl1MTYJCSAgICAgdHhfbmV4dDsJCS8qIGRlYnVnIG9ubHkgKi8KIAogCXUxNgkJICAgICB0eF9wZW5kaW5nOwogCXUxNgkJICAgICB0eF9sYXN0X21zczsKKwl1MzIJCSAgICAgdHhfbGFzdF91cHBlcjsKIAl1MzIJCSAgICAgdHhfdGNwc3VtOwogCiAJc3RydWN0IHJ4X3JpbmdfaW5mbyAgKnJ4X3JpbmcgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKQEAgLTIwMjgsNyArMjAyNSw2IEBACiAJdTE2CQkgICAgIHJ4X3BlbmRpbmc7CiAJdTE2CQkgICAgIHJ4X2RhdGFfc2l6ZTsKIAl1MTYJCSAgICAgcnhfbmZyYWdzOwotCXN0cnVjdCBza19idWZmX2hlYWQgIHJ4X3JlY3ljbGU7CiAKICNpZmRlZiBTS1kyX1ZMQU5fVEFHX1VTRUQKIAl1MTYJCSAgICAgcnhfdGFnOwpAQCAtMjA0MiwxNiArMjAzOCwxOCBAQAogCQl1OAlmaWZvX2xldjsKIAl9IGNoZWNrOwogCi0KIAlkbWFfYWRkcl90CSAgICAgcnhfbGVfbWFwOwogCWRtYV9hZGRyX3QJICAgICB0eF9sZV9tYXA7CisKIAl1MTYJCSAgICAgYWR2ZXJ0aXNpbmc7CS8qIEFEVkVSVElTRURfIGJpdHMgKi8KLQl1MTYJCSAgICAgc3BlZWQ7CS8qIFNQRUVEXzEwMDAsIFNQRUVEXzEwMCwgLi4uICovCi0JdTgJCSAgICAgYXV0b25lZzsJLyogQVVUT05FR19FTkFCTEUsIEFVVE9ORUdfRElTQUJMRSAqLwotCXU4CQkgICAgIGR1cGxleDsJLyogRFVQTEVYX0hBTEYsIERVUExFWF9GVUxMICovCi0JdTgJCSAgICAgcnhfY3N1bTsKLQl1OAkJICAgICB3b2w7Ci0JdTgJCSAgICAgcmVzdGFydGluZzsKKwl1MTYJCSAgICAgc3BlZWQ7CQkvKiBTUEVFRF8xMDAwLCBTUEVFRF8xMDAsIC4uLiAqLworCXU4CQkgICAgIHdvbDsJCS8qIFdBS0VfIGJpdHMgKi8KKwl1OAkJICAgICBkdXBsZXg7CQkvKiBEVVBMRVhfSEFMRiwgRFVQTEVYX0ZVTEwgKi8KKwl1MTYJCSAgICAgZmxhZ3M7CisjZGVmaW5lIFNLWTJfRkxBR19SWF9DSEVDS1NVTQkJMHgwMDAxCisjZGVmaW5lIFNLWTJfRkxBR19BVVRPX1NQRUVECQkweDAwMDIKKyNkZWZpbmUgU0tZMl9GTEFHX0FVVE9fUEFVU0UJCTB4MDAwNAorCiAgCWVudW0gZmxvd19jb250cm9sICAgIGZsb3dfbW9kZTsKICAJZW51bSBmbG93X2NvbnRyb2wgICAgZmxvd19zdGF0dXM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAuYwppbmRleCA1YzYxZDVmLi4yNmY2ZWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwLmMKKysrIGIvZHJpdmVycy9uZXQvc2xpcC5jCkBAIC00NzQsNyArNDc0LDcgQEAKIAogCiAvKiBFbmNhcHN1bGF0ZSBhbiBJUCBkYXRhZ3JhbSBhbmQga2ljayBpdCBpbnRvIGEgVFRZIHF1ZXVlLiAqLwotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBzbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNsaXAgKnNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTQ4NCwxMiArNDg0LDEyIEBACiAJCXNwaW5fdW5sb2NrKCZzbC0+bG9jayk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB4bWl0IGNhbGwgd2hlbiBpZmFjZSBpcyBkb3duXG4iLCBkZXYtPm5hbWUpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlpZiAoc2wtPnR0eSA9PSBOVUxMKSB7CiAJCXNwaW5fdW5sb2NrKCZzbC0+bG9jayk7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJc2xfbG9jayhzbCk7CkBAIC00OTgsNyArNDk4LDcgQEAKIAlzcGluX3VubG9jaygmc2wtPmxvY2spOwogCiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5jIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCmluZGV4IGJjNDk3NmEuLjJhNmI2ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKQEAgLTU1Myw3ICs1NTMsNyBAQAogCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKICNpZmRlZiBTTUNfVVNFX0RNQQpAQCAtNTY2LDcgKzU2Niw3IEBACiAJCQlscC0+cGVuZGluZ190eF9za2IgPSBza2I7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9IGVsc2UgewogCQkJREJHKFNNQ19ERUJVR19UWCB8IFNNQ19ERUJVR19ETUEsICIlczogQWN0aXZhdGluZyBUeCBETUFcbiIsIGRldi0+bmFtZSk7CiAJCQlscC0+dHhkbWFfYWN0aXZlID0gMTsKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCXNtYzkxMXhfaGFyZHdhcmVfc2VuZF9wa3QoZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxMXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxMXguaAppbmRleCA4MTQwZjdjLi4wNWFkYjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTExeC5oCkBAIC0yMzYsNyArMjM2LDYgQEAKICAqIFVzZSBhIERNQSBmb3IgUlggYW5kIFRYIHBhY2tldHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKIHN0YXRpYyBkbWFfYWRkcl90IHJ4X2RtYWJ1ZiwgdHhfZG1hYnVmOwogc3RhdGljIGludCByeF9kbWFsZW4sIHR4X2RtYWxlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxOTQuYyBiL2RyaXZlcnMvbmV0L3NtYzkxOTQuYwppbmRleCBlMDI0NzFiLi45MzRhMTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTk0LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTE5NC5jCkBAIC0yOTksNyArMjk5LDggQEAKICAuIHRvIHN0b3JlIHRoZSBwYWNrZXQsIEkgY2FsbCB0aGlzIHJvdXRpbmUsIHdoaWNoIGVpdGhlciBzZW5kcyBpdAogIC4gbm93LCBvciBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0IHdoZW4gdGhlIGNhcmQgaXMgcmVhZHkgZm9yIHRoZQogIC4gcGFja2V0ICovCi1zdGF0aWMgaW50ICBzbWNfd2FpdF90b19zZW5kX3BhY2tldCggc3RydWN0IHNrX2J1ZmYgKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKTsKK3N0YXRpYyBuZXRkZXZfdHhfdCAgc21jX3dhaXRfdG9fc2VuZF9wYWNrZXQoIHN0cnVjdCBza19idWZmICogc2tiLAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKTsKIAogLyogdGhpcyBkb2VzIGEgc29mdCByZXNldCBvbiB0aGUgZGV2aWNlICovCiBzdGF0aWMgdm9pZCBzbWNfcmVzZXQoIGludCBpb2FkZHIgKTsKQEAgLTQ4Nyw3ICs0ODgsOCBAQAogIC4gbyAJKE5PKTogRW5hYmxlIGludGVycnVwdHMgYW5kIGxldCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZGVhbCB3aXRoIGl0LgogIC4gbwkoWUVTKTpTZW5kIGl0IG5vdy4KICovCi1zdGF0aWMgaW50IHNtY193YWl0X3RvX3NlbmRfcGFja2V0KCBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYgKQorc3RhdGljIG5ldGRldl90eF90IHNtY193YWl0X3RvX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNtY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBpb2FkZHIgCT0gZGV2LT5iYXNlX2FkZHI7CkBAIC01MTIsNyArNTE0LDcgQEAKIAlpZiAobGVuZ3RoIDwgRVRIX1pMRU4pIHsKIAkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkgewogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAJCWxlbmd0aCA9IEVUSF9aTEVOOwogCX0KQEAgLTUzNCw3ICs1MzYsNyBAQAogCQlscC0+c2F2ZWRfc2tiID0gTlVMTDsKIAkJLyogdGhpcyBJUyBhbiBlcnJvciwgYnV0LCBpIGRvbid0IHdhbnQgdGhlIHNrYiBzYXZlZCAqLwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAkvKiBlaXRoZXIgd2F5LCBhIHBhY2tldCBpcyB3YWl0aW5nIG5vdyAqLwogCWxwLT5wYWNrZXRzX3dhaXRpbmcrKzsKQEAgLTU3MSwxMiArNTczLDEyIEBACiAJCVNNQ19FTkFCTEVfSU5UKCBJTV9BTExPQ19JTlQgKTsKICAgICAgIAkJUFJJTlRLMigoQ0FSRE5BTUUiOiBtZW1vcnkgYWxsb2NhdGlvbiBkZWZlcnJlZC4gXG4iKSk7CiAJCS8qIGl0J3MgZGVmZXJyZWQsIGJ1dCBJJ2xsIGhhbmRsZSBpdCBsYXRlciAqLwotICAgICAgCQlyZXR1cm4gMDsKKyAgICAgIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKICAgIAl9CiAJLyogb3IgWUVTISBJIGNhbiBzZW5kIHRoZSBwYWNrZXQgbm93Li4gKi8KIAlzbWNfaGFyZHdhcmVfc2VuZF9wYWNrZXQoZGV2KTsKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKaW5kZXggNzU2N2Y1MS4uMDVjOTFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKQEAgLTM1LDcgKzM1LDcgQEAKICAqCiAgKiBjb250cmlidXRvcnM6CiAgKiAJRGFyaXMgQSBOZXZpbCA8ZG5ldmlsQHNubWMuY29tPgotICogICAgICBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiAgICAgIE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CiAgKglSdXNzZWxsIEtpbmcgPHJta0Bhcm0ubGludXgub3JnLnVrPgogICoKICAqIEhpc3Rvcnk6CkBAIC01OCw3ICs1OCw3IEBACiAgKiAgIDIyLzA5LzA0ICBOaWNvbGFzIFBpdHJlICAgICAgYmlnIHVwZGF0ZSAoc2VlIGNvbW1pdCBsb2cgZm9yIGRldGFpbHMpCiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9Ci0JInNtYzkxeC5jOiB2MS4xLCBzZXAgMjIgMjAwNCBieSBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+XG4iOworCSJzbWM5MXguYzogdjEuMSwgc2VwIDIyIDIwMDQgYnkgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD5cbiI7CiAKIC8qIERlYnVnZ2luZyBsZXZlbCAqLwogI2lmbmRlZiBTTUNfREVCVUcKQEAgLTY1OSw3ICs2NTksNyBAQAogCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlzbWNfc3BlY2lhbF9sb2NrKCZscC0+bG9jaywgZmxhZ3MpOwpAQCAtNjk2LDcgKzY5Niw3IEBACiAJCXNtY19oYXJkd2FyZV9zZW5kX3BrdCgodW5zaWduZWQgbG9uZylkZXYpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCmluZGV4IDU3YTE1OWYuLjc4NGI2MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC0yOCw3ICsyOCw3IEBACiAgLiBBdXRob3JzCiAgLglFcmlrIFN0YWhsbWFuCQk8ZXJpa0B2dC5lZHU+CiAgLglEYXJpcyBBIE5ldmlsCQk8ZG5ldmlsQHNubWMuY29tPgotIC4JTmljb2xhcyBQaXRyZSAJCTxuaWNvQGNhbS5vcmc+CisgLglOaWNvbGFzIFBpdHJlIAkJPG5pY29AZmx1eG5pYy5uZXQ+CiAgLgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaWZuZGVmIF9TTUM5MVhfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5jCmluZGV4IDk0YjZkMjYuLmNjZGQxOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21zYzkxMXguYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N3YWIuaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgInNtc2M5MTF4LmgiCiAKICNkZWZpbmUgU01TQ19DSElQTkFNRQkJInNtc2M5MTF4IgpAQCAtMTA0Niw3ICsxMDQ3LDYgQEAKIAkJLyogVXBkYXRlIGNvdW50ZXJzICovCiAJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IChwa3RsZW5ndGggLSA0KTsKLQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAl9CiAKIAkvKiBSZXR1cm4gdG90YWwgcmVjZWl2ZWQgcGFja2V0cyAqLwpAQCAtMjExNCwxMCArMjExNCwxMiBAQAogLyogVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoZSBkZXZpY2VzIHJlbWFpbnMgcG93ZXJlZCBvbiBpdHMgVkREVkFSSU8KICAqIHBpbnMgZHVyaW5nIHN1c3BlbmQuICovCiAKLXN0YXRpYyBpbnQgc21zYzkxMXhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCisvKiBUT0RPOiBpbXBsZW1lbnQgZnJlZXplL3RoYXcgY2FsbGJhY2tzIGZvciBoaWJlcm5hdGlvbi4qLworCitzdGF0aWMgaW50IHNtc2M5MTF4X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhID0gbmV0ZGV2X3ByaXYobmRldik7CiAKIAkvKiBlbmFibGUgd2FrZSBvbiBMQU4sIGVuZXJneSBkZXRlY3Rpb24gYW5kIHRoZSBleHRlcm5hbCBQTUUKIAkgKiBzaWduYWwuICovCkBAIC0yMTI4LDEwICsyMTMwLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc21zYzkxMXhfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHNtc2M5MTF4X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1bnNpZ25lZCBpbnQgdG8gPSAxMDA7CiAKIAkvKiBOb3RlIDMuMTEgZnJvbSB0aGUgZGF0YXNoZWV0OgpAQCAtMjE0OSwxOSArMjE1MSwyNSBAQAogCXJldHVybiAodG8gPT0gMCkgPyAtRUlPIDogMDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNtc2M5MTF4X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHNtc2M5MTF4X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzbXNjOTExeF9yZXN1bWUsCit9OworCisjZGVmaW5lIFNNU0M5MTFYX1BNX09QUyAoJnNtc2M5MTF4X3BtX29wcykKKwogI2Vsc2UKLSNkZWZpbmUgc21zYzkxMXhfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHNtc2M5MTF4X3Jlc3VtZQkJTlVMTAorI2RlZmluZSBTTVNDOTExWF9QTV9PUFMgTlVMTAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNtc2M5MTF4X2RyaXZlciA9IHsKIAkucHJvYmUgPSBzbXNjOTExeF9kcnZfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNtc2M5MTF4X2Rydl9yZW1vdmUpLAogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gU01TQ19DSElQTkFNRSwKKwkJLm5hbWUJPSBTTVNDX0NISVBOQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gU01TQzkxMVhfUE1fT1BTLAogCX0sCi0JLnN1c3BlbmQgPSBzbXNjOTExeF9zdXNwZW5kLAotCS5yZXN1bWUgPSBzbXNjOTExeF9yZXN1bWUsCiB9OwogCiAvKiBFbnRyeSBwb2ludCBmb3IgbG9hZGluZyB0aGUgbW9kdWxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbXNjOTQyMC5jIGIvZHJpdmVycy9uZXQvc21zYzk0MjAuYwppbmRleCA2MGFiZGIxLi5iNDkwOWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCisrKyBiL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKQEAgLTgxNyw3ICs4MTcsNiBAQAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAKIAluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiB9CiAKIHN0YXRpYyBpbnQgc21zYzk0MjBfYWxsb2NfcnhfYnVmZmVyKHN0cnVjdCBzbXNjOTQyMF9wZGF0YSAqcGQsIGludCBpbmRleCkKQEAgLTk2OCw3ICs5NjcsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBzbXNjOTQyMF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzbXNjOTQyMF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNtc2M5NDIwX3BkYXRhICpwZCA9IG5ldGRldl9wcml2KGRldik7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc29uaWMuYyBiL2RyaXZlcnMvbmV0L3NvbmljLmMKaW5kZXggNzUzYTFmYi4uOTU5OWNlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc29uaWMuYworKysgYi9kcml2ZXJzL25ldC9zb25pYy5jCkBAIC0yMTEsNyArMjExLDcgQEAKIAlsZW5ndGggPSBza2ItPmxlbjsKIAlpZiAobGVuZ3RoIDwgRVRIX1pMRU4pIHsKIAkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJbGVuZ3RoID0gRVRIX1pMRU47CiAJfQogCkBAIC0yNjUsNyArMjY1LDcgQEAKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCmluZGV4IDY2OTI1M2MuLmEzNmUyYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKKysrIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwpAQCAtNTk1LDcgKzU5NSw3IEBACiBzdGF0aWMgdm9pZAljaGVja19kdXBsZXgoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZAl0eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQJaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludAlzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBpbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKIHN0YXRpYyB2b2lkCW5ldGRldl9lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW50cl9zdGF0dXMpOwogc3RhdGljIGludAlfX25ldGRldl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKnF1b3RhKTsKQEAgLTEyMjMsNyArMTIyMyw3IEBACiB9CiAKIAotc3RhdGljIGludCBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGVudHJ5OwpAQCAtMTMxMSw3ICsxMzExLDcgQEAKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW4zXzgyNTg2LmMgYi9kcml2ZXJzL25ldC9zdW4zXzgyNTg2LmMKaW5kZXggN2JiMjc0Mi4uMmYxZWFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuM184MjU4Ni5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bjNfODI1ODYuYwpAQCAtMTAxNSw3ICsxMDE1LDcgQEAKIAlpZihza2ItPmxlbiA+IFhNSVRfQlVGRl9TSVpFKQogCXsKIAkJcHJpbnRrKCIlczogU29ycnksIG1heC4gZnJhbWVsZW5ndGggaXMgJWQgYnl0ZXMuIFRoZSBsZW5ndGggb2YgeW91ciBmcmFtZSBpcyAlZCBieXRlcy5cbiIsZGV2LT5uYW1lLFhNSVRfQlVGRl9TSVpFLHNrYi0+bGVuKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwpAQCAtMTExMCw3ICsxMTEwLDcgQEAKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogI2VuZGlmCiAJfQotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYyBiL2RyaXZlcnMvbmV0L3N1bjNsYW5jZS5jCmluZGV4IDUzNGRmZTMuLjBjYTQyNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bjNsYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bjNsYW5jZS5jCkBAIC01NjIsNyArNTYyLDcgQEAKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAKQEAgLTY0OCw3ICs2NDgsNyBAQAogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIExBTkNFIGludGVycnVwdCBoYW5kbGVyLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuYm1hYy5jIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCmluZGV4IDUwMTdkN2YuLjUzNmNmN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYworKysgYi9kcml2ZXJzL25ldC9zdW5ibWFjLmMKQEAgLTk4NCw3ICs5ODQsNyBAQAogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJpZ21hY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCmluZGV4IGQxNTIxYzMuLmUxMzY4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZGFuY2UuYwpAQCAtNDE1LDcgKzQxNSw3IEBACiBzdGF0aWMgdm9pZCBuZXRkZXZfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKIHN0YXRpYyB2b2lkIHR4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50ICBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgcmVzZXRfdHggKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwogc3RhdGljIHZvaWQgcnhfcG9sbCh1bnNpZ25lZCBsb25nIGRhdGEpOwpAQCAtMTA1Myw3ICsxMDUzLDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogc3RhcnRfdHggKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMDkxLDcgKzEwOTEsNyBAQAogCQkJIiVzOiBUcmFuc21pdCBmcmFtZSAjJWQgcXVldWVkIGluIHNsb3QgJWQuXG4iLAogCQkJZGV2LT5uYW1lLCBucC0+Y3VyX3R4LCBlbnRyeSk7CiAJfQotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFJlc2V0IGhhcmR3YXJlIHR4IGFuZCBmcmVlIGFsbCBvZiB0eCBidWZmZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW0uYyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCmluZGV4IGQyZGZlMGEuLjMwNWVjM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCkBAIC0xMDE1LDcgKzEwMTUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdlbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZ2VtX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGdlbSAqZ3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBlbnRyeTsKQEAgLTI4NTEsOSArMjg1Miw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTSU9DU01JSVJFRzoJCS8qIFdyaXRlIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJjID0gLUVQRVJNOwotCQllbHNlIGlmICghZ3AtPnJ1bm5pbmcpCisJCWlmICghZ3AtPnJ1bm5pbmcpCiAJCQlyYyA9IC1FQUdBSU47CiAJCWVsc2UgewogCQkJX19waHlfd3JpdGUoZ3AsIGRhdGEtPnBoeV9pZCAmIDB4MWYsIGRhdGEtPnJlZ19udW0gJiAweDFmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuaG1lLmMgYi9kcml2ZXJzL25ldC9zdW5obWUuYwppbmRleCA0ZWY3MjkxOS4uMzdkNzIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuaG1lLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKQEAgLTIyNTIsNyArMjI1Miw4IEBACiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCi1zdGF0aWMgaW50IGhhcHB5X21lYWxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGhhcHB5X21lYWxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaGFwcHlfbWVhbCAqaHAgPSBuZXRkZXZfcHJpdihkZXYpOwogIAlpbnQgZW50cnk7CkBAIC0yMzM4LDcgKzIzMzksNyBAQAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCiAJdHhfYWRkX2xvZyhocCwgVFhMT0dfQUNUSU9OX1RYTUlULCAwKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmhhcHB5X21lYWxfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwppbmRleCBhZmM3YjM1Li45ZDZmZDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKQEAgLTExNjMsNyArMTE2Myw3IEBACiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogdGFrZW4gZnJvbSB0aGUgZGVwY2EgZHJpdmVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5xZS5jIGIvZHJpdmVycy9uZXQvc3VucWUuYwppbmRleCBjNmVjNjFlLi5kY2VmYjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5xZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bnFlLmMKQEAgLTYyMSw3ICs2MjEsNyBAQAogCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgcWVfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCmluZGV4IGQ3MzdmNmIuLmQxMjk4ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYworKysgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKQEAgLTIzLDkgKzIzLDkgQEAKICAqLwogCiAjaWZkZWYgVEMzNTgxNV9OQVBJCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIxLjM3LU5BUEkiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjM4LU5BUEkiCiAjZWxzZQotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4zNyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMzgiCiAjZW5kaWYKIHN0YXRpYyBjb25zdCBjaGFyICp2ZXJzaW9uID0gInRjMzU4MTUuYzp2IiBEUlZfVkVSU0lPTiAiXG4iOwogI2RlZmluZSBNT0ROQU1FCQkJInRjMzU4MTUiCkBAIC0zNDEsOCArMzQxLDkgQEAKIAlUeF9FbkV4Q29sbCB8IFR4X0VuTENhcnIgfCBUeF9FbkV4RGVmZXIgfCBUeF9FblVuZGVyIHwgXAogCVR4X0VuKQkvKiBtYXliZSAgMHg3YjAxICovCiAjZW5kaWYKKy8qIERvIG5vdCB1c2UgUnhfU3RyaXBDUkMgLS0gaXQgY2F1c2VzIHRyb3VibGUgb24gQkxFeC9GREFFeCBjb25kaXRpb24gKi8KICNkZWZpbmUgUlhfQ1RMX0NNRAkoUnhfRW5Hb29kIHwgUnhfRW5SeFBhciB8IFJ4X0VuTG9uZ0VyciB8IFJ4X0VuT3ZlciBcCi0JfCBSeF9FbkNSQ0VyciB8IFJ4X0VuQWxpZ24gfCBSeF9TdHJpcENSQyB8IFJ4X1J4RW4pIC8qIG1heWJlIDB4NmYxMSAqLworCXwgUnhfRW5DUkNFcnIgfCBSeF9FbkFsaWduIHwgUnhfUnhFbikgLyogbWF5YmUgMHg2ZjAxICovCiAjZGVmaW5lIElOVF9FTl9DTUQgIChJbnRfTlJBYnRFbiB8IFwKIAlJbnRfRG1QYXJFcnJFbiB8IEludF9EUGFyREVuIHwgSW50X0RQYXJFcnJFbiB8IFwKIAlJbnRfU1N5c0VyckVuICB8IEludF9STWFzQWJ0RW4gfCBJbnRfUlRhcmdBYnRFbiB8IFwKQEAgLTU5Myw5ICs1OTQsMTAgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYnVzLT5wcml2OwogCXN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqdHIgPQogCQkoc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEwOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBIWjsKIAogCXRjX3dyaXRlbChNRF9DQV9CdXN5IHwgKG1paV9pZCA8PCA1KSB8IChyZWdudW0gJiAweDFmKSwgJnRyLT5NRF9DQSk7CisJdWRlbGF5KDEyKTsgLyogaXQgdGFrZXMgMzIgeCA0MDBucyBhdCBsZWFzdCAqLwogCXdoaWxlICh0Y19yZWFkbCgmdHItPk1EX0NBKSAmIE1EX0NBX0J1c3kpIHsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTYwOSwxMSArNjExLDEyIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJ1cy0+cHJpdjsKIAlzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKnRyID0KIAkJKHN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAxMDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgSFo7CiAKIAl0Y193cml0ZWwodmFsLCAmdHItPk1EX0RhdGEpOwogCXRjX3dyaXRlbChNRF9DQV9CdXN5IHwgTURfQ0FfV3IgfCAobWlpX2lkIDw8IDUpIHwgKHJlZ251bSAmIDB4MWYpLAogCQkgICZ0ci0+TURfQ0EpOworCXVkZWxheSgxMik7IC8qIGl0IHRha2VzIDMyIHggNDAwbnMgYXQgbGVhc3QgKi8KIAl3aGlsZSAodGNfcmVhZGwoJnRyLT5NRF9DQSkgJiBNRF9DQV9CdXN5KSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQogCQkJcmV0dXJuIC1FSU87CkBAIC0xNTA5LDcgKzE1MTIsNyBAQAogCSAqLwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAjZGVmaW5lIEZBVEFMX0VSUk9SX0lOVCBcCkBAIC0xNTQwLDggKzE1NDMsNiBAQAogI2VuZGlmCiB7CiAJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKnRyID0KLQkJKHN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyOwogCWludCByZXQgPSAtMTsKIAogCS8qIEZhdGFsIGVycm9ycy4uLiAqLwpAQCAtMTU1MSwyNyArMTU1MiwyNiBAQAogCX0KIAkvKiByZWNvdmVyYWJsZSBlcnJvcnMgKi8KIAlpZiAoc3RhdHVzICYgSW50X0ludEZEQUV4KSB7Ci0JCS8qIGRpc2FibGUgRkRBRXggaW50LiAodW50aWwgd2UgbWFrZSByb29tcy4uLikgKi8KLQkJdGNfd3JpdGVsKHRjX3JlYWRsKCZ0ci0+SW50X0VuKSAmIH5JbnRfRkRBRXhFbiwgJnRyLT5JbnRfRW4pOwotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiJXM6IEZyZWUgRGVzY3JpcHRvciBBcmVhIEV4aGF1c3RlZCAoJSN4KS5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7CisJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGxwKSkKKwkJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkgIkZyZWUgRGVzY3JpcHRvciBBcmVhIEV4aGF1c3RlZCAoJSN4KS5cbiIsCisJCQkJIHN0YXR1cyk7CiAJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXQgPSAwOwogCX0KIAlpZiAoc3RhdHVzICYgSW50X0ludEJMRXgpIHsKLQkJLyogZGlzYWJsZSBCTEV4IGludC4gKHVudGlsIHdlIG1ha2Ugcm9vbXMuLi4pICovCi0JCXRjX3dyaXRlbCh0Y19yZWFkbCgmdHItPkludF9FbikgJiB+SW50X0JMRXhFbiwgJnRyLT5JbnRfRW4pOwotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiJXM6IEJ1ZmZlciBMaXN0IEV4aGF1c3RlZCAoJSN4KS5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7CisJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGxwKSkKKwkJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkgIkJ1ZmZlciBMaXN0IEV4aGF1c3RlZCAoJSN4KS5cbiIsCisJCQkJIHN0YXR1cyk7CiAJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXQgPSAwOwogCX0KIAlpZiAoc3RhdHVzICYgSW50X0ludEV4QkQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIiVzOiBFeGNlc3NpdmUgQnVmZmVyIERlc2NyaXB0aW9ycyAoJSN4KS5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7CisJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGxwKSkKKwkJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkgIkV4Y2Vzc2l2ZSBCdWZmZXIgRGVzY3JpcHRpb3JzICglI3gpLlxuIiwKKwkJCQkgc3RhdHVzKTsKIAkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCXJldCA9IDA7CiAJfQpAQCAtMTYzMCw4ICsxNjMwLDEyIEBACiAKIAlzcGluX2xvY2soJmxwLT5sb2NrKTsKIAlzdGF0dXMgPSB0Y19yZWFkbCgmdHItPkludF9TcmMpOwotCXRjX3dyaXRlbChzdGF0dXMsICZ0ci0+SW50X1NyYyk7CS8qIHdyaXRlIHRvIGNsZWFyICovCisJLyogQkxFeCwgRkRBRXggd2lsbCBiZSBjbGVhcmVkIGxhdGVyICovCisJdGNfd3JpdGVsKHN0YXR1cyAmIH4oSW50X0JMRXggfCBJbnRfRkRBRXgpLAorCQkgICZ0ci0+SW50X1NyYyk7CS8qIHdyaXRlIHRvIGNsZWFyICovCiAJaGFuZGxlZCA9IHRjMzU4MTVfZG9faW50ZXJydXB0KGRldiwgc3RhdHVzKTsKKwlpZiAoc3RhdHVzICYgKEludF9CTEV4IHwgSW50X0ZEQUV4KSkKKwkJdGNfd3JpdGVsKHN0YXR1cyAmIChJbnRfQkxFeCB8IEludF9GREFFeCksICZ0ci0+SW50X1NyYyk7CiAJKHZvaWQpdGNfcmVhZGwoJnRyLT5JbnRfU3JjKTsJLyogZmx1c2ggKi8KIAlzcGluX3VubG9jaygmbHAtPmxvY2spOwogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQgPj0gMCk7CkBAIC0xNjU5LDggKzE2NjMsNiBAQAogCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGZkY3RsOwogCWludCBpOwotCWludCBidWZfZnJlZV9jb3VudCA9IDA7Ci0JaW50IGZkX2ZyZWVfY291bnQgPSAwOwogI2lmZGVmIFRDMzU4MTVfTkFQSQogCWludCByZWNlaXZlZCA9IDA7CiAjZW5kaWYKQEAgLTE3NjksOCArMTc3MSw5IEBACiAJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJCX0gZWxzZSB7CiAJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSeCBlcnJvciAoc3RhdHVzICV4KVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyAmIFJ4X1N0YXRfTWFzayk7CisJCQlpZiAobmV0aWZfbXNnX3J4X2VycihscCkpCisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiUnggZXJyb3IgKHN0YXR1cyAleClcbiIsCisJCQkJCSBzdGF0dXMgJiBSeF9TdGF0X01hc2spOwogCQkJLyogV09SS0FST1VORDogTG9uZ0VyciBhbmQgQ1JDRXJyIG1lYW5zIE92ZXJmbG93LiAqLwogCQkJaWYgKChzdGF0dXMgJiBSeF9Mb25nRXJyKSAmJiAoc3RhdHVzICYgUnhfQ1JDRXJyKSkgewogCQkJCXN0YXR1cyAmPSB+KFJ4X0xvbmdFcnJ8UnhfQ1JDRXJyKTsKQEAgLTE4NDgsNyArMTg1MSw2IEBACiAjZWxzZQogCQkJCWxwLT5mYmxfY291bnQrKzsKICNlbmRpZgotCQkJCWJ1Zl9mcmVlX2NvdW50Kys7CiAJCQl9CiAJCX0KIApAQCAtMTg3MCw3ICsxODcyLDYgQEAKICNlbmRpZgogCQkJbHAtPnJmZF9jdXItPmZkLkZEQ3RsID0gY3B1X3RvX2xlMzIoRkRfQ293bnNGRCk7CiAJCQlscC0+cmZkX2N1cisrOwotCQkJZmRfZnJlZV9jb3VudCsrOwogCQl9CiAJCWlmIChscC0+cmZkX2N1ciA+IGxwLT5yZmRfbGltaXQpCiAJCQlscC0+cmZkX2N1ciA9IGxwLT5yZmRfYmFzZTsKQEAgLTE4ODEsMTcgKzE4ODIsNiBAQAogI2VuZGlmCiAJfQogCi0JLyogcmUtZW5hYmxlIEJML0ZEQSBFeGhhdXN0IGludGVycnVwdHMuICovCi0JaWYgKGZkX2ZyZWVfY291bnQpIHsKLQkJc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICp0ciA9Ci0JCQkoc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7Ci0JCXUzMiBlbiwgZW5fb2xkID0gdGNfcmVhZGwoJnRyLT5JbnRfRW4pOwotCQllbiA9IGVuX29sZCB8IEludF9GREFFeEVuOwotCQlpZiAoYnVmX2ZyZWVfY291bnQpCi0JCQllbiB8PSBJbnRfQkxFeEVuOwotCQlpZiAoZW4gIT0gZW5fb2xkKQotCQkJdGNfd3JpdGVsKGVuLCAmdHItPkludF9Fbik7Ci0JfQogI2lmZGVmIFRDMzU4MTVfTkFQSQogCXJldHVybiByZWNlaXZlZDsKICNlbmRpZgpAQCAtMTkxMCw5ICsxOTAwLDE0IEBACiAJc3Bpbl9sb2NrKCZscC0+bG9jayk7CiAJc3RhdHVzID0gdGNfcmVhZGwoJnRyLT5JbnRfU3JjKTsKIAlkbyB7Ci0JCXRjX3dyaXRlbChzdGF0dXMsICZ0ci0+SW50X1NyYyk7CS8qIHdyaXRlIHRvIGNsZWFyICovCisJCS8qIEJMRXgsIEZEQUV4IHdpbGwgYmUgY2xlYXJlZCBsYXRlciAqLworCQl0Y193cml0ZWwoc3RhdHVzICYgfihJbnRfQkxFeCB8IEludF9GREFFeCksCisJCQkgICZ0ci0+SW50X1NyYyk7CS8qIHdyaXRlIHRvIGNsZWFyICovCiAKIAkJaGFuZGxlZCA9IHRjMzU4MTVfZG9faW50ZXJydXB0KGRldiwgc3RhdHVzLCBidWRnZXQgLSByZWNlaXZlZCk7CisJCWlmIChzdGF0dXMgJiAoSW50X0JMRXggfCBJbnRfRkRBRXgpKQorCQkJdGNfd3JpdGVsKHN0YXR1cyAmIChJbnRfQkxFeCB8IEludF9GREFFeCksCisJCQkJICAmdHItPkludF9TcmMpOwogCQlpZiAoaGFuZGxlZCA+PSAwKSB7CiAJCQlyZWNlaXZlZCArPSBoYW5kbGVkOwogCQkJaWYgKHJlY2VpdmVkID49IGJ1ZGdldCkKQEAgLTIxNDQsNyArMjEzOSw3IEBACiAJCShzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKilkZXYtPmJhc2VfYWRkcjsKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKQogCQkvKiBVcGRhdGUgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgZGV2aWNlIHJlZ2lzdGVycy4gKi8KLQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gdGNfcmVhZGwoJnRyLT5NaXNzX0NudCk7CisJCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSB0Y19yZWFkbCgmdHItPk1pc3NfQ250KTsKIAogCXJldHVybiAmZGV2LT5zdGF0czsKIH0KQEAgLTIzOTksOCArMjM5NCw2IEBACiAJCXRjX3dyaXRlbChETUFfQlVSU1RfU0laRSwgJnRyLT5ETUFfQ3RsKTsKICNpZmRlZiBUQzM1ODE1X1VTRV9QQUNLRURCVUZGRVIKIAl0Y193cml0ZWwoUnhGcmFnX0VuUGFjayB8IEVUSF9aTEVOLCAmdHItPlJ4RnJhZ1NpemUpOwkvKiBQYWNraW5nICovCi0jZWxzZQotCXRjX3dyaXRlbChFVEhfWkxFTiwgJnRyLT5SeEZyYWdTaXplKTsKICNlbmRpZgogCXRjX3dyaXRlbCgwLCAmdHItPlR4UG9sbEN0cik7CS8qIEJhdGNoIG1vZGUgKi8KIAl0Y193cml0ZWwoVFhfVEhSRVNIT0xELCAmdHItPlR4VGhyc2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVodXRpLmMgYi9kcml2ZXJzL25ldC90ZWh1dGkuYwppbmRleCAzYzI2NzljLi5lYzlkZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZWh1dGkuYworKysgYi9kcml2ZXJzL25ldC90ZWh1dGkuYwpAQCAtMTYyMiw3ICsxNjIyLDggQEAKICAqICAgdGhlIGRyaXZlci4gTm90ZTogdGhlIGRyaXZlciBtdXN0IE5PVCBwdXQgdGhlIHNrYiBpbiBpdHMgRE1BIHJpbmcuCiAgKiBvIE5FVERFVl9UWF9MT0NLRUQgTG9ja2luZyBmYWlsZWQsIHBsZWFzZSByZXRyeSBxdWlja2x5LgogICovCi1zdGF0aWMgaW50IGJkeF90eF90cmFuc21pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBiZHhfdHhfdHJhbnNtaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgYmR4X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3QgdHhkX2ZpZm8gKmYgPSAmcHJpdi0+dHhkX2ZpZm8wOwpAQCAtMjQyNyw3ICsyNDI4LDcgQEAKICAqLwogc3RhdGljIHZvaWQgYmR4X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7Ci0Jc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBiZHhfZXRodG9vbF9vcHMgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBiZHhfZXRodG9vbF9vcHMgPSB7CiAJCS5nZXRfc2V0dGluZ3MgPSBiZHhfZ2V0X3NldHRpbmdzLAogCQkuZ2V0X2RydmluZm8gPSBiZHhfZ2V0X2RydmluZm8sCiAJCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IDQ2YTNmODYuLmYwOWJjNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC02OCw4ICs2OCw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjk5IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkFwcmlsIDIwLCAyMDA5IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuMTAyIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIlNlcHRlbWJlciAxLCAyMDA5IgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTkyLDcgKzkyLDcgQEAKIC8qIGhhcmR3YXJlIG1pbmltdW0gYW5kIG1heGltdW0gZm9yIGEgc2luZ2xlIGZyYW1lJ3MgZGF0YSBwYXlsb2FkICovCiAjZGVmaW5lIFRHM19NSU5fTVRVCQkJNjAKICNkZWZpbmUgVEczX01BWF9NVFUodHApCVwKLQkoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSlVNQk9fQ0FQQUJMRSkgPyA5MDAwIDogMTUwMCkKKwkoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19DQVBBQkxFKSA/IDkwMDAgOiAxNTAwKQogCiAvKiBUaGVzZSBudW1iZXJzIHNlZW0gdG8gYmUgaGFyZCBjb2RlZCBpbiB0aGUgTklDIGZpcm13YXJlIHNvbWVob3cuCiAgKiBZb3UgY2FuJ3QgY2hhbmdlIHRoZSByaW5nIHNpemVzLCBidXQgeW91IGNhbiBjaGFuZ2Ugd2hlcmUgeW91IHBsYWNlCkBAIC0xMDIsNiArMTAyLDcgQEAKICNkZWZpbmUgVEczX0RFRl9SWF9SSU5HX1BFTkRJTkcJCTIwMAogI2RlZmluZSBURzNfUlhfSlVNQk9fUklOR19TSVpFCQkyNTYKICNkZWZpbmUgVEczX0RFRl9SWF9KVU1CT19SSU5HX1BFTkRJTkcJMTAwCisjZGVmaW5lIFRHM19SU1NfSU5ESVJfVEJMX1NJWkUgMTI4CiAKIC8qIERvIG5vdCBwbGFjZSB0aGlzIG4tcmluZyBlbnRyaWVzIHZhbHVlIGludG8gdGhlIHRwIHN0cnVjdCBpdHNlbGYsCiAgKiB3ZSByZWFsbHkgd2FudCB0byBleHBvc2UgdGhlc2UgY29uc3RhbnRzIHRvIEdDQyBzbyB0aGF0IG1vZHVsbyBldApAQCAtMTEwLDI2ICsxMTEsMzQgQEAKICAqIHJlcGxhY2UgdGhpbmdzIGxpa2UgJyUgZm9vJyB3aXRoICcmIChmb28gLSAxKScuCiAgKi8KICNkZWZpbmUgVEczX1JYX1JDQl9SSU5HX1NJWkUodHApCVwKLQkoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSA/ICA1MTIgOiAxMDI0KQorCSgoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19DQVBBQkxFKSAmJiBcCisJICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpID8gMTAyNCA6IDUxMikKIAogI2RlZmluZSBURzNfVFhfUklOR19TSVpFCQk1MTIKICNkZWZpbmUgVEczX0RFRl9UWF9SSU5HX1BFTkRJTkcJCShURzNfVFhfUklOR19TSVpFIC0gMSkKIAogI2RlZmluZSBURzNfUlhfUklOR19CWVRFUwkoc2l6ZW9mKHN0cnVjdCB0ZzNfcnhfYnVmZmVyX2Rlc2MpICogXAogCQkJCSBURzNfUlhfUklOR19TSVpFKQotI2RlZmluZSBURzNfUlhfSlVNQk9fUklOR19CWVRFUwkoc2l6ZW9mKHN0cnVjdCB0ZzNfcnhfYnVmZmVyX2Rlc2MpICogXAotCQkJICAgICAgICAgVEczX1JYX0pVTUJPX1JJTkdfU0laRSkKKyNkZWZpbmUgVEczX1JYX0pVTUJPX1JJTkdfQllURVMJKHNpemVvZihzdHJ1Y3QgdGczX2V4dF9yeF9idWZmZXJfZGVzYykgKiBcCisJCQkJIFRHM19SWF9KVU1CT19SSU5HX1NJWkUpCiAjZGVmaW5lIFRHM19SWF9SQ0JfUklOR19CWVRFUyh0cCkgKHNpemVvZihzdHJ1Y3QgdGczX3J4X2J1ZmZlcl9kZXNjKSAqIFwKLQkJCSAgICAgICAgICAgVEczX1JYX1JDQl9SSU5HX1NJWkUodHApKQorCQkJCSBURzNfUlhfUkNCX1JJTkdfU0laRSh0cCkpCiAjZGVmaW5lIFRHM19UWF9SSU5HX0JZVEVTCShzaXplb2Yoc3RydWN0IHRnM190eF9idWZmZXJfZGVzYykgKiBcCiAJCQkJIFRHM19UWF9SSU5HX1NJWkUpCiAjZGVmaW5lIE5FWFRfVFgoTikJCSgoKE4pICsgMSkgJiAoVEczX1RYX1JJTkdfU0laRSAtIDEpKQogCi0jZGVmaW5lIFJYX1BLVF9CVUZfU1oJCSgxNTM2ICsgdHAtPnJ4X29mZnNldCArIDY0KQotI2RlZmluZSBSWF9KVU1CT19QS1RfQlVGX1NaCSg5MDQ2ICsgdHAtPnJ4X29mZnNldCArIDY0KQorI2RlZmluZSBURzNfRE1BX0JZVEVfRU5BQgkJNjQKKworI2RlZmluZSBURzNfUlhfU1REX0RNQV9TWgkJMTUzNgorI2RlZmluZSBURzNfUlhfSk1CX0RNQV9TWgkJOTA0NgorCisjZGVmaW5lIFRHM19SWF9ETUFfVE9fTUFQX1NaKHgpCQkoKHgpICsgVEczX0RNQV9CWVRFX0VOQUIpCisKKyNkZWZpbmUgVEczX1JYX1NURF9NQVBfU1oJCVRHM19SWF9ETUFfVE9fTUFQX1NaKFRHM19SWF9TVERfRE1BX1NaKQorI2RlZmluZSBURzNfUlhfSk1CX01BUF9TWgkJVEczX1JYX0RNQV9UT19NQVBfU1ooVEczX1JYX0pNQl9ETUFfU1opCiAKIC8qIG1pbmltdW0gbnVtYmVyIG9mIGZyZWUgVFggZGVzY3JpcHRvcnMgcmVxdWlyZWQgdG8gd2FrZSB1cCBUWCBwcm9jZXNzICovCi0jZGVmaW5lIFRHM19UWF9XQUtFVVBfVEhSRVNIKHRwKQkJKCh0cCktPnR4X3BlbmRpbmcgLyA0KQorI2RlZmluZSBURzNfVFhfV0FLRVVQX1RIUkVTSCh0bmFwaSkJCSgodG5hcGkpLT50eF9wZW5kaW5nIC8gNCkKIAogI2RlZmluZSBURzNfUkFXX0lQX0FMSUdOIDIKIApAQCAtMTUzLDYgKzE2Miw3IEBACiBNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfVEczVFNPKTsKIE1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9URzNUU081KTsKIAorI2RlZmluZSBURzNfUlNTX01JTl9OVU1fTVNJWF9WRUNTCTIKIAogc3RhdGljIGludCB0ZzNfZGVidWcgPSAtMTsJLyogLTEgPT0gdXNlIFRHM19ERUZfTVNHX0VOQUJMRSBhcyB2YWx1ZSAqLwogbW9kdWxlX3BhcmFtKHRnM19kZWJ1ZywgaW50LCAwKTsKQEAgLTIxOSwxMSArMjI5LDEyIEBACiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc2MUUpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181NzYxUyl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NjFTRSl9LAotCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODUpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181Nzg1X0cpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181Nzg1X0YpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc4MCl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzYwKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTApfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181NzcyMCl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3Nzg4KX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfOURYWCl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1lTS09OTkVDVCwgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUXzlNWFgpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FMVElNQSwgUENJX0RFVklDRV9JRF9BTFRJTUFfQUMxMDAwKX0sCkBAIC02MDUsMzkgKzYxNiw0NyBAQAogCiBzdGF0aWMgdm9pZCB0ZzNfZGlzYWJsZV9pbnRzKHN0cnVjdCB0ZzMgKnRwKQogeworCWludCBpOworCiAJdHczMihURzNQQ0lfTUlTQ19IT1NUX0NUUkwsCiAJICAgICAodHAtPm1pc2NfaG9zdF9jdHJsIHwgTUlTQ19IT1NUX0NUUkxfTUFTS19QQ0lfSU5UKSk7Ci0JdHczMl9tYWlsYm94X2YoTUFJTEJPWF9JTlRFUlJVUFRfMCArIFRHM182NEJJVF9SRUdfTE9XLCAweDAwMDAwMDAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHRnM19jb25kX2ludChzdHJ1Y3QgdGczICp0cCkKLXsKLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVEFHR0VEX1NUQVRVUykgJiYKLQkgICAgKHRwLT5od19zdGF0dXMtPnN0YXR1cyAmIFNEX1NUQVRVU19VUERBVEVEKSkKLQkJdHczMihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsIHwgR1JDX0xDTENUUkxfU0VUSU5UKTsKLQllbHNlCi0JCXR3MzIoSE9TVENDX01PREUsIHRwLT5jb2FsZXNjZV9tb2RlIHwKLQkJICAgICAoSE9TVENDX01PREVfRU5BQkxFIHwgSE9TVENDX01PREVfTk9XKSk7CisJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfbWF4OyBpKyspCisJCXR3MzJfbWFpbGJveF9mKHRwLT5uYXBpW2ldLmludF9tYm94LCAweDAwMDAwMDAxKTsKIH0KIAogc3RhdGljIHZvaWQgdGczX2VuYWJsZV9pbnRzKHN0cnVjdCB0ZzMgKnRwKQogeworCWludCBpOworCXUzMiBjb2FsX25vdyA9IDA7CisKIAl0cC0+aXJxX3N5bmMgPSAwOwogCXdtYigpOwogCiAJdHczMihURzNQQ0lfTUlTQ19IT1NUX0NUUkwsCiAJICAgICAodHAtPm1pc2NfaG9zdF9jdHJsICYgfk1JU0NfSE9TVF9DVFJMX01BU0tfUENJX0lOVCkpOwotCXR3MzJfbWFpbGJveF9mKE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVywKLQkJICAgICAgICh0cC0+bGFzdF90YWcgPDwgMjQpKTsKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl8xU0hPVF9NU0kpCi0JCXR3MzJfbWFpbGJveF9mKE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVywKLQkJCSAgICAgICAodHAtPmxhc3RfdGFnIDw8IDI0KSk7Ci0JdGczX2NvbmRfaW50KHRwKTsKKworCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX2NudDsgaSsrKSB7CisJCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbaV07CisJCXR3MzJfbWFpbGJveF9mKHRuYXBpLT5pbnRfbWJveCwgdG5hcGktPmxhc3RfdGFnIDw8IDI0KTsKKwkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfMVNIT1RfTVNJKQorCQkJdHczMl9tYWlsYm94X2YodG5hcGktPmludF9tYm94LCB0bmFwaS0+bGFzdF90YWcgPDwgMjQpOworCisJCWNvYWxfbm93IHw9IHRuYXBpLT5jb2FsX25vdzsKKwl9CisKKwkvKiBGb3JjZSBhbiBpbml0aWFsIGludGVycnVwdCAqLworCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UQUdHRURfU1RBVFVTKSAmJgorCSAgICAodHAtPm5hcGlbMF0uaHdfc3RhdHVzLT5zdGF0dXMgJiBTRF9TVEFUVVNfVVBEQVRFRCkpCisJCXR3MzIoR1JDX0xPQ0FMX0NUUkwsIHRwLT5ncmNfbG9jYWxfY3RybCB8IEdSQ19MQ0xDVFJMX1NFVElOVCk7CisJZWxzZQorCQl0dzMyKEhPU1RDQ19NT0RFLCB0cC0+Y29hbGVzY2VfbW9kZSB8CisJCSAgICAgSE9TVENDX01PREVfRU5BQkxFIHwgY29hbF9ub3cpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0ZzNfaGFzX3dvcmsoc3RydWN0IHRnMyAqdHApCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0ZzNfaGFzX3dvcmsoc3RydWN0IHRnM19uYXBpICp0bmFwaSkKIHsKLQlzdHJ1Y3QgdGczX2h3X3N0YXR1cyAqc2JsayA9IHRwLT5od19zdGF0dXM7CisJc3RydWN0IHRnMyAqdHAgPSB0bmFwaS0+dHA7CisJc3RydWN0IHRnM19od19zdGF0dXMgKnNibGsgPSB0bmFwaS0+aHdfc3RhdHVzOwogCXVuc2lnbmVkIGludCB3b3JrX2V4aXN0cyA9IDA7CiAKIAkvKiBjaGVjayBmb3IgcGh5IGV2ZW50cyAqLwpAQCAtNjQ4LDIyICs2NjcsMjMgQEAKIAkJCXdvcmtfZXhpc3RzID0gMTsKIAl9CiAJLyogY2hlY2sgZm9yIFJYL1RYIHdvcmsgdG8gZG8gKi8KLQlpZiAoc2Jsay0+aWR4WzBdLnR4X2NvbnN1bWVyICE9IHRwLT50eF9jb25zIHx8Ci0JICAgIHNibGstPmlkeFswXS5yeF9wcm9kdWNlciAhPSB0cC0+cnhfcmNiX3B0cikKKwlpZiAoc2Jsay0+aWR4WzBdLnR4X2NvbnN1bWVyICE9IHRuYXBpLT50eF9jb25zIHx8CisJICAgICoodG5hcGktPnJ4X3JjYl9wcm9kX2lkeCkgIT0gdG5hcGktPnJ4X3JjYl9wdHIpCiAJCXdvcmtfZXhpc3RzID0gMTsKIAogCXJldHVybiB3b3JrX2V4aXN0czsKIH0KIAotLyogdGczX3Jlc3RhcnRfaW50cworLyogdGczX2ludF9yZWVuYWJsZQogICogIHNpbWlsYXIgdG8gdGczX2VuYWJsZV9pbnRzLCBidXQgaXQgYWNjdXJhdGVseSBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlcmUKICAqICBpcyBuZXcgd29yayBwZW5kaW5nIGFuZCBjYW4gcmV0dXJuIHdpdGhvdXQgZmx1c2hpbmcgdGhlIFBJTyB3cml0ZQogICogIHdoaWNoIHJlZW5hYmxlcyBpbnRlcnJ1cHRzCiAgKi8KLXN0YXRpYyB2b2lkIHRnM19yZXN0YXJ0X2ludHMoc3RydWN0IHRnMyAqdHApCitzdGF0aWMgdm9pZCB0ZzNfaW50X3JlZW5hYmxlKHN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkpCiB7Ci0JdHczMl9tYWlsYm94KE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVywKLQkJICAgICB0cC0+bGFzdF90YWcgPDwgMjQpOworCXN0cnVjdCB0ZzMgKnRwID0gdG5hcGktPnRwOworCisJdHczMl9tYWlsYm94KHRuYXBpLT5pbnRfbWJveCwgdG5hcGktPmxhc3RfdGFnIDw8IDI0KTsKIAltbWlvd2IoKTsKIAogCS8qIFdoZW4gZG9pbmcgdGFnZ2VkIHN0YXR1cywgdGhpcyB3b3JrIGNoZWNrIGlzIHVubmVjZXNzYXJ5LgpAQCAtNjcxLDM5ICs2OTEsNTggQEAKIAkgKiB3b3JrIHdlJ3ZlIGNvbXBsZXRlZC4KIAkgKi8KIAlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVEFHR0VEX1NUQVRVUykgJiYKLQkgICAgdGczX2hhc193b3JrKHRwKSkKKwkgICAgdGczX2hhc193b3JrKHRuYXBpKSkKIAkJdHczMihIT1NUQ0NfTU9ERSwgdHAtPmNvYWxlc2NlX21vZGUgfAotCQkgICAgIChIT1NUQ0NfTU9ERV9FTkFCTEUgfCBIT1NUQ0NfTU9ERV9OT1cpKTsKKwkJICAgICBIT1NUQ0NfTU9ERV9FTkFCTEUgfCB0bmFwaS0+Y29hbF9ub3cpOworfQorCitzdGF0aWMgdm9pZCB0ZzNfbmFwaV9kaXNhYmxlKHN0cnVjdCB0ZzMgKnRwKQoreworCWludCBpOworCisJZm9yIChpID0gdHAtPmlycV9jbnQgLSAxOyBpID49IDA7IGktLSkKKwkJbmFwaV9kaXNhYmxlKCZ0cC0+bmFwaVtpXS5uYXBpKTsKK30KKworc3RhdGljIHZvaWQgdGczX25hcGlfZW5hYmxlKHN0cnVjdCB0ZzMgKnRwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfY250OyBpKyspCisJCW5hcGlfZW5hYmxlKCZ0cC0+bmFwaVtpXS5uYXBpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRnM19uZXRpZl9zdG9wKHN0cnVjdCB0ZzMgKnRwKQogewogCXRwLT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsJLyogcHJldmVudCB0eCB0aW1lb3V0ICovCi0JbmFwaV9kaXNhYmxlKCZ0cC0+bmFwaSk7CisJdGczX25hcGlfZGlzYWJsZSh0cCk7CiAJbmV0aWZfdHhfZGlzYWJsZSh0cC0+ZGV2KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRnM19uZXRpZl9zdGFydChzdHJ1Y3QgdGczICp0cCkKIHsKLQluZXRpZl93YWtlX3F1ZXVlKHRwLT5kZXYpOwotCS8qIE5PVEU6IHVuY29uZGl0aW9uYWwgbmV0aWZfd2FrZV9xdWV1ZSBpcyBvbmx5IGFwcHJvcHJpYXRlCi0JICogc28gbG9uZyBhcyBhbGwgY2FsbGVycyBhcmUgYXNzdXJlZCB0byBoYXZlIGZyZWUgdHggc2xvdHMKLQkgKiAoc3VjaCBhcyBhZnRlciB0ZzNfaW5pdF9odykKKwkvKiBOT1RFOiB1bmNvbmRpdGlvbmFsIG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyBpcyBvbmx5CisJICogYXBwcm9wcmlhdGUgc28gbG9uZyBhcyBhbGwgY2FsbGVycyBhcmUgYXNzdXJlZCB0bworCSAqIGhhdmUgZnJlZSB0eCBzbG90cyAoc3VjaCBhcyBhZnRlciB0ZzNfaW5pdF9odykKIAkgKi8KLQluYXBpX2VuYWJsZSgmdHAtPm5hcGkpOwotCXRwLT5od19zdGF0dXMtPnN0YXR1cyB8PSBTRF9TVEFUVVNfVVBEQVRFRDsKKwluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXModHAtPmRldik7CisKKwl0ZzNfbmFwaV9lbmFibGUodHApOworCXRwLT5uYXBpWzBdLmh3X3N0YXR1cy0+c3RhdHVzIHw9IFNEX1NUQVRVU19VUERBVEVEOwogCXRnM19lbmFibGVfaW50cyh0cCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRnM19zd2l0Y2hfY2xvY2tzKHN0cnVjdCB0ZzMgKnRwKQogewotCXUzMiBjbG9ja19jdHJsID0gdHIzMihURzNQQ0lfQ0xPQ0tfQ1RSTCk7CisJdTMyIGNsb2NrX2N0cmw7CiAJdTMyIG9yaWdfY2xvY2tfY3RybDsKIAogCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0NQTVVfUFJFU0VOVCkgfHwKIAkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpCiAJCXJldHVybjsKIAorCWNsb2NrX2N0cmwgPSB0cjMyKFRHM1BDSV9DTE9DS19DVFJMKTsKKwogCW9yaWdfY2xvY2tfY3RybCA9IGNsb2NrX2N0cmw7CiAJY2xvY2tfY3RybCAmPSAoQ0xPQ0tfQ1RSTF9GT1JDRV9DTEtSVU4gfAogCQkgICAgICAgQ0xPQ0tfQ1RSTF9DTEtSVU5fT0VOQUJMRSB8CkBAIC03NDMsNyArNzgyLDcgQEAKIAogCSp2YWwgPSAweDA7CiAKLQlmcmFtZV92YWwgID0gKChQSFlfQUREUiA8PCBNSV9DT01fUEhZX0FERFJfU0hJRlQpICYKKwlmcmFtZV92YWwgID0gKCh0cC0+cGh5X2FkZHIgPDwgTUlfQ09NX1BIWV9BRERSX1NISUZUKSAmCiAJCSAgICAgIE1JX0NPTV9QSFlfQUREUl9NQVNLKTsKIAlmcmFtZV92YWwgfD0gKChyZWcgPDwgTUlfQ09NX1JFR19BRERSX1NISUZUKSAmCiAJCSAgICAgIE1JX0NPTV9SRUdfQUREUl9NQVNLKTsKQEAgLTc4NCw3ICs4MjMsNyBAQAogCXVuc2lnbmVkIGludCBsb29wczsKIAlpbnQgcmV0OwogCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2ICYmCisJaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpICYmCiAJICAgIChyZWcgPT0gTUlJX1RHM19DVFJMIHx8IHJlZyA9PSBNSUlfVEczX0FVWF9DVFJMKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTc5NCw3ICs4MzMsNyBAQAogCQl1ZGVsYXkoODApOwogCX0KIAotCWZyYW1lX3ZhbCAgPSAoKFBIWV9BRERSIDw8IE1JX0NPTV9QSFlfQUREUl9TSElGVCkgJgorCWZyYW1lX3ZhbCAgPSAoKHRwLT5waHlfYWRkciA8PCBNSV9DT01fUEhZX0FERFJfU0hJRlQpICYKIAkJICAgICAgTUlfQ09NX1BIWV9BRERSX01BU0spOwogCWZyYW1lX3ZhbCB8PSAoKHJlZyA8PCBNSV9DT01fUkVHX0FERFJfU0hJRlQpICYKIAkJICAgICAgTUlfQ09NX1JFR19BRERSX01BU0spOwpAQCAtOTE3LDcgKzk1Niw5IEBACiAJCXR3MzIoTUFDX1BIWUNGRzIsIHZhbCk7CiAKIAkJdmFsID0gdHIzMihNQUNfUEhZQ0ZHMSk7Ci0JCXZhbCAmPSB+TUFDX1BIWUNGRzFfUkdNSUlfSU5UOworCQl2YWwgJj0gfihNQUNfUEhZQ0ZHMV9SR01JSV9JTlQgfAorCQkJIE1BQ19QSFlDRkcxX1JYQ0xLX1RPX01BU0sgfCBNQUNfUEhZQ0ZHMV9UWENMS19UT19NQVNLKTsKKwkJdmFsIHw9IE1BQ19QSFlDRkcxX1JYQ0xLX1RJTUVPVVQgfCBNQUNfUEhZQ0ZHMV9UWENMS19USU1FT1VUOwogCQl0dzMyKE1BQ19QSFlDRkcxLCB2YWwpOwogCiAJCXJldHVybjsKQEAgLTkzMywxNSArOTc0LDE4IEBACiAKIAl0dzMyKE1BQ19QSFlDRkcyLCB2YWwpOwogCi0JdmFsID0gdHIzMihNQUNfUEhZQ0ZHMSkgJiB+KE1BQ19QSFlDRkcxX1JHTUlJX0VYVF9SWF9ERUMgfAotCQkJCSAgICBNQUNfUEhZQ0ZHMV9SR01JSV9TTkRfU1RBVF9FTik7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfU1REX0lCTkRfRElTQUJMRSkgeworCXZhbCA9IHRyMzIoTUFDX1BIWUNGRzEpOworCXZhbCAmPSB+KE1BQ19QSFlDRkcxX1JYQ0xLX1RPX01BU0sgfCBNQUNfUEhZQ0ZHMV9UWENMS19UT19NQVNLIHwKKwkJIE1BQ19QSFlDRkcxX1JHTUlJX0VYVF9SWF9ERUMgfCBNQUNfUEhZQ0ZHMV9SR01JSV9TTkRfU1RBVF9FTik7CisJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9TVERfSUJORF9ESVNBQkxFKSkgewogCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9SWF9FTikKIAkJCXZhbCB8PSBNQUNfUEhZQ0ZHMV9SR01JSV9FWFRfUlhfREVDOwogCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9UWF9FTikKIAkJCXZhbCB8PSBNQUNfUEhZQ0ZHMV9SR01JSV9TTkRfU1RBVF9FTjsKIAl9Ci0JdHczMihNQUNfUEhZQ0ZHMSwgdmFsIHwgTUFDX1BIWUNGRzFfUkdNSUlfSU5UIHwgTUFDX1BIWUNGRzFfVFhDX0RSVik7CisJdmFsIHw9IE1BQ19QSFlDRkcxX1JYQ0xLX1RJTUVPVVQgfCBNQUNfUEhZQ0ZHMV9UWENMS19USU1FT1VUIHwKKwkgICAgICAgTUFDX1BIWUNGRzFfUkdNSUlfSU5UIHwgTUFDX1BIWUNGRzFfVFhDX0RSVjsKKwl0dzMyKE1BQ19QSFlDRkcxLCB2YWwpOwogCiAJdmFsID0gdHIzMihNQUNfRVhUX1JHTUlJX01PREUpOwogCXZhbCAmPSB+KE1BQ19SR01JSV9NT0RFX1JYX0lOVF9CIHwKQEAgLTk3Nyw2ICsxMDIxLDIxIEBACiAJdHczMl9mKE1BQ19NSV9NT0RFLCB0cC0+bWlfbW9kZSk7CiAJdWRlbGF5KDgwKTsKIAorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykgeworCQl1MzIgZnVuY251bSwgaXNfc2VyZGVzOworCisJCWZ1bmNudW0gPSB0cjMyKFRHM19DUE1VX1NUQVRVUykgJiBURzNfQ1BNVV9TVEFUVVNfUENJRV9GVU5DOworCQlpZiAoZnVuY251bSkKKwkJCXRwLT5waHlfYWRkciA9IDI7CisJCWVsc2UKKwkJCXRwLT5waHlfYWRkciA9IDE7CisKKwkJaXNfc2VyZGVzID0gdHIzMihTR19ESUdfU1RBVFVTKSAmIFNHX0RJR19JU19TRVJERVM7CisJCWlmIChpc19zZXJkZXMpCisJCQl0cC0+cGh5X2FkZHIgKz0gNzsKKwl9IGVsc2UKKwkJdHAtPnBoeV9hZGRyID0gUEhZX0FERFI7CisKIAlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTURJT0JVU19JTklURUQpICYmCiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1KQogCQl0ZzNfbWRpb19jb25maWdfNTc4NSh0cCk7CkBAIC0xMDY0LDYgKzExMjMsNyBAQAogCWNhc2UgVEczX1BIWV9JRF9SVEw4MjAxRToKIAljYXNlIFRHM19QSFlfSURfQkNNQUMxMzE6CiAJCXBoeWRldi0+aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKKwkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfUEhZX0lTX0ZFVDsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNDY5LDE0ICsxNTI5LDM4IEBACiAJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCB2YWwpOwogfQogCitzdGF0aWMgdm9pZCB0ZzNfcGh5X2ZldF90b2dnbGVfYXBkKHN0cnVjdCB0ZzMgKnRwLCBib29sIGVuYWJsZSkKK3sKKwl1MzIgcGh5dGVzdDsKKworCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9URzNfRkVUX1RFU1QsICZwaHl0ZXN0KSkgeworCQl1MzIgcGh5OworCisJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19GRVRfVEVTVCwKKwkJCSAgICAgcGh5dGVzdCB8IE1JSV9URzNfRkVUX1NIQURPV19FTik7CisJCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9URzNfRkVUX1NIRFdfQVVYU1RBVDIsICZwaHkpKSB7CisJCQlpZiAoZW5hYmxlKQorCQkJCXBoeSB8PSBNSUlfVEczX0ZFVF9TSERXX0FVWFNUQVQyX0FQRDsKKwkJCWVsc2UKKwkJCQlwaHkgJj0gfk1JSV9URzNfRkVUX1NIRFdfQVVYU1RBVDJfQVBEOworCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0ZFVF9TSERXX0FVWFNUQVQyLCBwaHkpOworCQl9CisJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19GRVRfVEVTVCwgcGh5dGVzdCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCB0ZzNfcGh5X3RvZ2dsZV9hcGQoc3RydWN0IHRnMyAqdHAsIGJvb2wgZW5hYmxlKQogewogCXUzMiByZWc7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCisJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQogCQlyZXR1cm47CiAKKwlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSB7CisJCXRnM19waHlfZmV0X3RvZ2dsZV9hcGQodHAsIGVuYWJsZSk7CisJCXJldHVybjsKKwl9CisKIAlyZWcgPSBNSUlfVEczX01JU0NfU0hEV19XUkVOIHwKIAkgICAgICBNSUlfVEczX01JU0NfU0hEV19TQ1I1X1NFTCB8CiAJICAgICAgTUlJX1RHM19NSVNDX1NIRFdfU0NSNV9MUEVEIHwKQEAgLTE1MDYsMjAgKzE1OTAsMjIgQEAKIAkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykpCiAJCXJldHVybjsKIAotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgeworCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpIHsKIAkJdTMyIGVwaHk7CiAKLQkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19FUEhZX1RFU1QsICZlcGh5KSkgewotCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0VQSFlfVEVTVCwKLQkJCQkgICAgIGVwaHkgfCBNSUlfVEczX0VQSFlfU0hBRE9XX0VOKTsKLQkJCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9URzNfRVBIWVRTVF9NSVNDQ1RSTCwgJnBoeSkpIHsKKwkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19GRVRfVEVTVCwgJmVwaHkpKSB7CisJCQl1MzIgcmVnID0gTUlJX1RHM19GRVRfU0hEV19NSVNDQ1RSTDsKKworCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0ZFVF9URVNULAorCQkJCSAgICAgZXBoeSB8IE1JSV9URzNfRkVUX1NIQURPV19FTik7CisJCQlpZiAoIXRnM19yZWFkcGh5KHRwLCByZWcsICZwaHkpKSB7CiAJCQkJaWYgKGVuYWJsZSkKLQkJCQkJcGh5IHw9IE1JSV9URzNfRVBIWVRTVF9NSVNDQ1RSTF9NRElYOworCQkJCQlwaHkgfD0gTUlJX1RHM19GRVRfU0hEV19NSVNDQ1RSTF9NRElYOwogCQkJCWVsc2UKLQkJCQkJcGh5ICY9IH5NSUlfVEczX0VQSFlUU1RfTUlTQ0NUUkxfTURJWDsKLQkJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRVBIWVRTVF9NSVNDQ1RSTCwgcGh5KTsKKwkJCQkJcGh5ICY9IH5NSUlfVEczX0ZFVF9TSERXX01JU0NDVFJMX01ESVg7CisJCQkJdGczX3dyaXRlcGh5KHRwLCByZWcsIHBoeSk7CiAJCQl9Ci0JCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRVBIWV9URVNULCBlcGh5KTsKKwkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19GRVRfVEVTVCwgZXBoeSk7CiAJCX0KIAl9IGVsc2UgewogCQlwaHkgPSBNSUlfVEczX0FVWENUTF9NSVNDX1JEU0VMX01JU0MgfApAQCAtMTg4OCw3ICsxOTc0LDcgQEAKIAlpZiAoKHRwLT5waHlfaWQgJiBQSFlfSURfTUFTSykgPT0gUEhZX0lEX0JDTTU0MDEpIHsKIAkJLyogQ2Fubm90IGRvIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIDU0MDEgKi8KIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDRjMjApOwotCX0gZWxzZSBpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9KVU1CT19DQVBBQkxFKSB7CisJfSBlbHNlIGlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgewogCQl1MzIgcGh5X3JlZzsKIAogCQkvKiBTZXQgYml0IDE0IHdpdGggcmVhZC1tb2RpZnktd3JpdGUgdG8gcHJlc2VydmUgb3RoZXIgYml0cyAqLwpAQCAtMTkwMCw3ICsxOTg2LDcgQEAKIAkvKiBTZXQgcGh5IHJlZ2lzdGVyIDB4MTAgYml0IDAgdG8gaGlnaCBmaWZvIGVsYXN0aWNpdHkgdG8gc3VwcG9ydAogCSAqIGp1bWJvIGZyYW1lcyB0cmFuc21pc3Npb24uCiAJICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSlVNQk9fQ0FQQUJMRSkgeworCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgewogCQl1MzIgcGh5X3JlZzsKIAogCQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0VYVF9DVFJMLCAmcGh5X3JlZykpCkBAIC0xOTEwLDcgKzE5OTYsNyBAQAogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7CiAJCS8qIGFkanVzdCBvdXRwdXQgdm9sdGFnZSAqLwotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRVBIWV9QVEVTVCwgMHgxMik7CisJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19GRVRfUFRFU1QsIDB4MTIpOwogCX0KIAogCXRnM19waHlfdG9nZ2xlX2F1dG9tZGl4KHRwLCAxKTsKQEAgLTE5MjUsOCArMjAxMSw5IEBACiAJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0lTX05JQykgPT0gMCkKIAkJcmV0dXJuOwogCi0JaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNCkgfHwKLQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE0KSkgeworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNCB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNCB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X3BlZXI7CiAKIAkJZGV2X3BlZXIgPSBwY2lfZ2V0X2RydmRhdGEodHAtPnBkZXZfcGVlcik7CkBAIC0yNjU1LDcgKzI3NDIsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgeworCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSB7CiAJCQkqc3BlZWQgPSAodmFsICYgTUlJX1RHM19BVVhfU1RBVF8xMDApID8gU1BFRURfMTAwIDoKIAkJCQkgU1BFRURfMTA7CiAJCQkqZHVwbGV4ID0gKHZhbCAmIE1JSV9URzNfQVVYX1NUQVRfRlVMTCkgPyBEVVBMRVhfRlVMTCA6CkBAIC0yOTkwLDcgKzMwNzcsNyBAQAogCiAJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19VU0VfTUlfSU5URVJSVVBUKQogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfSU1BU0ssIH5NSUlfVEczX0lOVF9MSU5LQ0hHKTsKLQllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTkwNikKKwllbHNlIGlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0lTX0ZFVCkpCiAJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19JTUFTSywgfjApOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAwIHx8CkBAIC0zMTAwLDcgKzMxODcsOSBAQAogCQkJdHAtPm1hY19tb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9NSUk7CiAJCWVsc2UKIAkJCXRwLT5tYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfR01JSTsKLQl9IGVsc2UKKwl9IGVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0lTX0ZFVCkKKwkJdHAtPm1hY19tb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9NSUk7CisJZWxzZQogCQl0cC0+bWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX0dNSUk7CiAKIAl0cC0+bWFjX21vZGUgJj0gfk1BQ19NT0RFX0hBTEZfRFVQTEVYOwpAQCAtMzE2Nyw2ICszMjU2LDE1IEBACiAJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodHAtPnBkZXYsCiAJCQkJCSAgICAgIHRwLT5wY2llX2NhcCArIFBDSV9FWFBfTE5LQ1RMLAogCQkJCQkgICAgICBuZXdsbmtjdGwpOworCX0gZWxzZSBpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19UT0dHTEVfMTBfMTAwX0wxUExMUEQpIHsKKwkJdTMyIG5ld3JlZywgb2xkcmVnID0gdHIzMihURzNfUENJRV9MTktDVEwpOworCQlpZiAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAgfHwKKwkJICAgIHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTApCisJCQluZXdyZWcgPSBvbGRyZWcgJiB+VEczX1BDSUVfTE5LQ1RMX0wxX1BMTF9QRF9FTjsKKwkJZWxzZQorCQkJbmV3cmVnID0gb2xkcmVnIHwgVEczX1BDSUVfTE5LQ1RMX0wxX1BMTF9QRF9FTjsKKwkJaWYgKG5ld3JlZyAhPSBvbGRyZWcpCisJCQl0dzMyKFRHM19QQ0lFX0xOS0NUTCwgbmV3cmVnKTsKIAl9CiAKIAlpZiAoY3VycmVudF9saW5rX3VwICE9IG5ldGlmX2NhcnJpZXJfb2sodHAtPmRldikpIHsKQEAgLTM4NDgsOSArMzk0Niw5IEBACiAJZWxzZQogCQljdXJyZW50X2xpbmtfdXAgPSB0ZzNfc2V0dXBfZmliZXJfYnlfaGFuZCh0cCwgbWFjX3N0YXR1cyk7CiAKLQl0cC0+aHdfc3RhdHVzLT5zdGF0dXMgPQorCXRwLT5uYXBpWzBdLmh3X3N0YXR1cy0+c3RhdHVzID0KIAkJKFNEX1NUQVRVU19VUERBVEVEIHwKLQkJICh0cC0+aHdfc3RhdHVzLT5zdGF0dXMgJiB+U0RfU1RBVFVTX0xJTktfQ0hHKSk7CisJCSAodHAtPm5hcGlbMF0uaHdfc3RhdHVzLT5zdGF0dXMgJiB+U0RfU1RBVFVTX0xJTktfQ0hHKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKIAkJdHczMl9mKE1BQ19TVEFUVVMsIChNQUNfU1RBVFVTX1NZTkNfQ0hBTkdFRCB8CkBAIC00MjE2LDI0ICs0MzE0LDMyIEBACiAJc3Bpbl91bmxvY2soJnRwLT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB1MzIgdGczX3R4X2F2YWlsKHN0cnVjdCB0ZzMgKnRwKQorc3RhdGljIGlubGluZSB1MzIgdGczX3R4X2F2YWlsKHN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkpCiB7CiAJc21wX21iKCk7Ci0JcmV0dXJuICh0cC0+dHhfcGVuZGluZyAtCi0JCSgodHAtPnR4X3Byb2QgLSB0cC0+dHhfY29ucykgJiAoVEczX1RYX1JJTkdfU0laRSAtIDEpKSk7CisJcmV0dXJuIHRuYXBpLT50eF9wZW5kaW5nIC0KKwkgICAgICAgKCh0bmFwaS0+dHhfcHJvZCAtIHRuYXBpLT50eF9jb25zKSAmIChURzNfVFhfUklOR19TSVpFIC0gMSkpOwogfQogCiAvKiBUaWdvbjMgbmV2ZXIgcmVwb3J0cyBwYXJ0aWFsIHBhY2tldCBzZW5kcy4gIFNvIHdlIGRvIG5vdAogICogbmVlZCBzcGVjaWFsIGxvZ2ljIHRvIGhhbmRsZSBTS0JzIHRoYXQgaGF2ZSBub3QgaGFkIGFsbAogICogb2YgdGhlaXIgZnJhZ3Mgc2VudCB5ZXQsIGxpa2UgU3VuR0VNIGRvZXMuCiAgKi8KLXN0YXRpYyB2b2lkIHRnM190eChzdHJ1Y3QgdGczICp0cCkKK3N0YXRpYyB2b2lkIHRnM190eChzdHJ1Y3QgdGczX25hcGkgKnRuYXBpKQogewotCXUzMiBod19pZHggPSB0cC0+aHdfc3RhdHVzLT5pZHhbMF0udHhfY29uc3VtZXI7Ci0JdTMyIHN3X2lkeCA9IHRwLT50eF9jb25zOworCXN0cnVjdCB0ZzMgKnRwID0gdG5hcGktPnRwOworCXUzMiBod19pZHggPSB0bmFwaS0+aHdfc3RhdHVzLT5pZHhbMF0udHhfY29uc3VtZXI7CisJdTMyIHN3X2lkeCA9IHRuYXBpLT50eF9jb25zOworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKKwlpbnQgaW5kZXggPSB0bmFwaSAtIHRwLT5uYXBpOworCisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJWCkKKwkJaW5kZXgtLTsKKworCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUodHAtPmRldiwgaW5kZXgpOwogCiAJd2hpbGUgKHN3X2lkeCAhPSBod19pZHgpIHsKLQkJc3RydWN0IHR4X3JpbmdfaW5mbyAqcmkgPSAmdHAtPnR4X2J1ZmZlcnNbc3dfaWR4XTsKKwkJc3RydWN0IHR4X3JpbmdfaW5mbyAqcmkgPSAmdG5hcGktPnR4X2J1ZmZlcnNbc3dfaWR4XTsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJpLT5za2I7CiAJCWludCBpLCB0eF9idWcgPSAwOwogCkBAIC00MjQ5LDcgKzQzNTUsNyBAQAogCQlzd19pZHggPSBORVhUX1RYKHN3X2lkeCk7CiAKIAkJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgewotCQkJcmkgPSAmdHAtPnR4X2J1ZmZlcnNbc3dfaWR4XTsKKwkJCXJpID0gJnRuYXBpLT50eF9idWZmZXJzW3N3X2lkeF07CiAJCQlpZiAodW5saWtlbHkocmktPnNrYiAhPSBOVUxMIHx8IHN3X2lkeCA9PSBod19pZHgpKQogCQkJCXR4X2J1ZyA9IDE7CiAJCQlzd19pZHggPSBORVhUX1RYKHN3X2lkeCk7CkBAIC00MjYzLDcgKzQzNjksNyBAQAogCQl9CiAJfQogCi0JdHAtPnR4X2NvbnMgPSBzd19pZHg7CisJdG5hcGktPnR4X2NvbnMgPSBzd19pZHg7CiAKIAkvKiBOZWVkIHRvIG1ha2UgdGhlIHR4X2NvbnMgdXBkYXRlIHZpc2libGUgdG8gdGczX3N0YXJ0X3htaXQoKQogCSAqIGJlZm9yZSBjaGVja2luZyBmb3IgbmV0aWZfcXVldWVfc3RvcHBlZCgpLiAgV2l0aG91dCB0aGUKQEAgLTQyNzIsMTMgKzQzNzgsMTMgQEAKIAkgKi8KIAlzbXBfbWIoKTsKIAotCWlmICh1bmxpa2VseShuZXRpZl9xdWV1ZV9zdG9wcGVkKHRwLT5kZXYpICYmCi0JCSAgICAgKHRnM190eF9hdmFpbCh0cCkgPiBURzNfVFhfV0FLRVVQX1RIUkVTSCh0cCkpKSkgewotCQluZXRpZl90eF9sb2NrKHRwLT5kZXYpOwotCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZCh0cC0+ZGV2KSAmJgotCQkgICAgKHRnM190eF9hdmFpbCh0cCkgPiBURzNfVFhfV0FLRVVQX1RIUkVTSCh0cCkpKQotCQkJbmV0aWZfd2FrZV9xdWV1ZSh0cC0+ZGV2KTsKLQkJbmV0aWZfdHhfdW5sb2NrKHRwLT5kZXYpOworCWlmICh1bmxpa2VseShuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgJiYKKwkJICAgICAodGczX3R4X2F2YWlsKHRuYXBpKSA+IFRHM19UWF9XQUtFVVBfVEhSRVNIKHRuYXBpKSkpKSB7CisJCV9fbmV0aWZfdHhfbG9jayh0eHEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgJiYKKwkJICAgICh0ZzNfdHhfYXZhaWwodG5hcGkpID4gVEczX1RYX1dBS0VVUF9USFJFU0godG5hcGkpKSkKKwkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKKwkJX19uZXRpZl90eF91bmxvY2sodHhxKTsKIAl9CiB9CiAKQEAgLTQyOTMsMzMgKzQzOTksMzUgQEAKICAqIGJ1ZmZlcnMgdGhlIGNwdSBvbmx5IHJlYWRzIHRoZSBsYXN0IGNhY2hlbGluZSBvZiB0aGUgUlggZGVzY3JpcHRvcgogICogKHRvIGZldGNoIHRoZSBlcnJvciBmbGFncywgdmxhbiB0YWcsIGNoZWNrc3VtLCBhbmQgb3BhcXVlIGNvb2tpZSkuCiAgKi8KLXN0YXRpYyBpbnQgdGczX2FsbG9jX3J4X3NrYihzdHJ1Y3QgdGczICp0cCwgdTMyIG9wYXF1ZV9rZXksCitzdGF0aWMgaW50IHRnM19hbGxvY19yeF9za2Ioc3RydWN0IHRnM19uYXBpICp0bmFwaSwgdTMyIG9wYXF1ZV9rZXksCiAJCQkgICAgaW50IHNyY19pZHgsIHUzMiBkZXN0X2lkeF91bm1hc2tlZCkKIHsKKwlzdHJ1Y3QgdGczICp0cCA9IHRuYXBpLT50cDsKIAlzdHJ1Y3QgdGczX3J4X2J1ZmZlcl9kZXNjICpkZXNjOwogCXN0cnVjdCByaW5nX2luZm8gKm1hcCwgKnNyY19tYXA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CiAJaW50IHNrYl9zaXplLCBkZXN0X2lkeDsKKwlzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCAqdHByID0gJnRwLT5wcm9kcmluZ1swXTsKIAogCXNyY19tYXAgPSBOVUxMOwogCXN3aXRjaCAob3BhcXVlX2tleSkgewogCWNhc2UgUlhEX09QQVFVRV9SSU5HX1NURDoKIAkJZGVzdF9pZHggPSBkZXN0X2lkeF91bm1hc2tlZCAlIFRHM19SWF9SSU5HX1NJWkU7Ci0JCWRlc2MgPSAmdHAtPnJ4X3N0ZFtkZXN0X2lkeF07Ci0JCW1hcCA9ICZ0cC0+cnhfc3RkX2J1ZmZlcnNbZGVzdF9pZHhdOworCQlkZXNjID0gJnRwci0+cnhfc3RkW2Rlc3RfaWR4XTsKKwkJbWFwID0gJnRwci0+cnhfc3RkX2J1ZmZlcnNbZGVzdF9pZHhdOwogCQlpZiAoc3JjX2lkeCA+PSAwKQotCQkJc3JjX21hcCA9ICZ0cC0+cnhfc3RkX2J1ZmZlcnNbc3JjX2lkeF07Ci0JCXNrYl9zaXplID0gdHAtPnJ4X3BrdF9idWZfc3o7CisJCQlzcmNfbWFwID0gJnRwci0+cnhfc3RkX2J1ZmZlcnNbc3JjX2lkeF07CisJCXNrYl9zaXplID0gdHAtPnJ4X3BrdF9tYXBfc3o7CiAJCWJyZWFrOwogCiAJY2FzZSBSWERfT1BBUVVFX1JJTkdfSlVNQk86CiAJCWRlc3RfaWR4ID0gZGVzdF9pZHhfdW5tYXNrZWQgJSBURzNfUlhfSlVNQk9fUklOR19TSVpFOwotCQlkZXNjID0gJnRwLT5yeF9qdW1ib1tkZXN0X2lkeF07Ci0JCW1hcCA9ICZ0cC0+cnhfanVtYm9fYnVmZmVyc1tkZXN0X2lkeF07CisJCWRlc2MgPSAmdHByLT5yeF9qbWJbZGVzdF9pZHhdLnN0ZDsKKwkJbWFwID0gJnRwci0+cnhfam1iX2J1ZmZlcnNbZGVzdF9pZHhdOwogCQlpZiAoc3JjX2lkeCA+PSAwKQotCQkJc3JjX21hcCA9ICZ0cC0+cnhfanVtYm9fYnVmZmVyc1tzcmNfaWR4XTsKLQkJc2tiX3NpemUgPSBSWF9KVU1CT19QS1RfQlVGX1NaOworCQkJc3JjX21hcCA9ICZ0cHItPnJ4X2ptYl9idWZmZXJzW3NyY19pZHhdOworCQlza2Jfc2l6ZSA9IFRHM19SWF9KTUJfTUFQX1NaOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC00MzMyLDE0ICs0NDQwLDEzIEBACiAJICogQ2FsbGVycyBkZXBlbmQgdXBvbiB0aGlzIGJlaGF2aW9yIGFuZCBhc3N1bWUgdGhhdAogCSAqIHdlIGxlYXZlIGV2ZXJ5dGhpbmcgdW5jaGFuZ2VkIGlmIHdlIGZhaWwuCiAJICovCi0Jc2tiID0gbmV0ZGV2X2FsbG9jX3NrYih0cC0+ZGV2LCBza2Jfc2l6ZSk7CisJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYih0cC0+ZGV2LCBza2Jfc2l6ZSArIHRwLT5yeF9vZmZzZXQpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlza2JfcmVzZXJ2ZShza2IsIHRwLT5yeF9vZmZzZXQpOwogCi0JbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHRwLT5wZGV2LCBza2ItPmRhdGEsCi0JCQkJIHNrYl9zaXplIC0gdHAtPnJ4X29mZnNldCwKKwltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUodHAtPnBkZXYsIHNrYi0+ZGF0YSwgc2tiX3NpemUsCiAJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAltYXAtPnNrYiA9IHNrYjsKQEAgLTQzNTgsMjggKzQ0NjUsMzAgQEAKICAqIG1lbWJlcnMgb2YgdGhlIFJYIGRlc2NyaXB0b3IgYXJlIGludmFyaWFudC4gIFNlZSBub3RlcyBhYm92ZQogICogdGczX2FsbG9jX3J4X3NrYiBmb3IgZnVsbCBkZXRhaWxzLgogICovCi1zdGF0aWMgdm9pZCB0ZzNfcmVjeWNsZV9yeChzdHJ1Y3QgdGczICp0cCwgdTMyIG9wYXF1ZV9rZXksCitzdGF0aWMgdm9pZCB0ZzNfcmVjeWNsZV9yeChzdHJ1Y3QgdGczX25hcGkgKnRuYXBpLCB1MzIgb3BhcXVlX2tleSwKIAkJCSAgIGludCBzcmNfaWR4LCB1MzIgZGVzdF9pZHhfdW5tYXNrZWQpCiB7CisJc3RydWN0IHRnMyAqdHAgPSB0bmFwaS0+dHA7CiAJc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYyAqc3JjX2Rlc2MsICpkZXN0X2Rlc2M7CiAJc3RydWN0IHJpbmdfaW5mbyAqc3JjX21hcCwgKmRlc3RfbWFwOwogCWludCBkZXN0X2lkeDsKKwlzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCAqdHByID0gJnRwLT5wcm9kcmluZ1swXTsKIAogCXN3aXRjaCAob3BhcXVlX2tleSkgewogCWNhc2UgUlhEX09QQVFVRV9SSU5HX1NURDoKIAkJZGVzdF9pZHggPSBkZXN0X2lkeF91bm1hc2tlZCAlIFRHM19SWF9SSU5HX1NJWkU7Ci0JCWRlc3RfZGVzYyA9ICZ0cC0+cnhfc3RkW2Rlc3RfaWR4XTsKLQkJZGVzdF9tYXAgPSAmdHAtPnJ4X3N0ZF9idWZmZXJzW2Rlc3RfaWR4XTsKLQkJc3JjX2Rlc2MgPSAmdHAtPnJ4X3N0ZFtzcmNfaWR4XTsKLQkJc3JjX21hcCA9ICZ0cC0+cnhfc3RkX2J1ZmZlcnNbc3JjX2lkeF07CisJCWRlc3RfZGVzYyA9ICZ0cHItPnJ4X3N0ZFtkZXN0X2lkeF07CisJCWRlc3RfbWFwID0gJnRwci0+cnhfc3RkX2J1ZmZlcnNbZGVzdF9pZHhdOworCQlzcmNfZGVzYyA9ICZ0cHItPnJ4X3N0ZFtzcmNfaWR4XTsKKwkJc3JjX21hcCA9ICZ0cHItPnJ4X3N0ZF9idWZmZXJzW3NyY19pZHhdOwogCQlicmVhazsKIAogCWNhc2UgUlhEX09QQVFVRV9SSU5HX0pVTUJPOgogCQlkZXN0X2lkeCA9IGRlc3RfaWR4X3VubWFza2VkICUgVEczX1JYX0pVTUJPX1JJTkdfU0laRTsKLQkJZGVzdF9kZXNjID0gJnRwLT5yeF9qdW1ib1tkZXN0X2lkeF07Ci0JCWRlc3RfbWFwID0gJnRwLT5yeF9qdW1ib19idWZmZXJzW2Rlc3RfaWR4XTsKLQkJc3JjX2Rlc2MgPSAmdHAtPnJ4X2p1bWJvW3NyY19pZHhdOwotCQlzcmNfbWFwID0gJnRwLT5yeF9qdW1ib19idWZmZXJzW3NyY19pZHhdOworCQlkZXN0X2Rlc2MgPSAmdHByLT5yeF9qbWJbZGVzdF9pZHhdLnN0ZDsKKwkJZGVzdF9tYXAgPSAmdHByLT5yeF9qbWJfYnVmZmVyc1tkZXN0X2lkeF07CisJCXNyY19kZXNjID0gJnRwci0+cnhfam1iW3NyY19pZHhdLnN0ZDsKKwkJc3JjX21hcCA9ICZ0cHItPnJ4X2ptYl9idWZmZXJzW3NyY19pZHhdOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC00Mzk1LDEzICs0NTA0LDYgQEAKIAlzcmNfbWFwLT5za2IgPSBOVUxMOwogfQogCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLXN0YXRpYyBpbnQgdGczX3ZsYW5fcngoc3RydWN0IHRnMyAqdHAsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiB2bGFuX3RhZykKLXsKLQlyZXR1cm4gdmxhbl9ncm9fcmVjZWl2ZSgmdHAtPm5hcGksIHRwLT52bGdycCwgdmxhbl90YWcsIHNrYik7Ci19Ci0jZW5kaWYKLQogLyogVGhlIFJYIHJpbmcgc2NoZW1lIGlzIGNvbXBvc2VkIG9mIG11bHRpcGxlIHJpbmdzIHdoaWNoIHBvc3QgZnJlc2gKICAqIGJ1ZmZlcnMgdG8gdGhlIGNoaXAsIGFuZCBvbmUgc3BlY2lhbCByaW5nIHRoZSBjaGlwIHVzZXMgdG8gcmVwb3J0CiAgKiBzdGF0dXMgYmFjayB0byB0aGUgaG9zdC4KQEAgLTQ0MjYsMTQgKzQ1MjgsMTYgQEAKICAqIElmIGJvdGggdGhlIGhvc3QgYW5kIGNoaXAgd2VyZSB0byB3cml0ZSBpbnRvIHRoZSBzYW1lIHJpbmcsIGNhY2hlIGxpbmUKICAqIGV2aWN0aW9uIGNvdWxkIG9jY3VyIHNpbmNlIGJvdGggZW50aXRpZXMgd2FudCBpdCBpbiBhbiBleGNsdXNpdmUgc3RhdGUuCiAgKi8KLXN0YXRpYyBpbnQgdGczX3J4KHN0cnVjdCB0ZzMgKnRwLCBpbnQgYnVkZ2V0KQorc3RhdGljIGludCB0ZzNfcngoc3RydWN0IHRnM19uYXBpICp0bmFwaSwgaW50IGJ1ZGdldCkKIHsKKwlzdHJ1Y3QgdGczICp0cCA9IHRuYXBpLT50cDsKIAl1MzIgd29ya19tYXNrLCByeF9zdGRfcG9zdGVkID0gMDsKLQl1MzIgc3dfaWR4ID0gdHAtPnJ4X3JjYl9wdHI7CisJdTMyIHN3X2lkeCA9IHRuYXBpLT5yeF9yY2JfcHRyOwogCXUxNiBod19pZHg7CiAJaW50IHJlY2VpdmVkOworCXN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0ICp0cHIgPSAmdHAtPnByb2RyaW5nWzBdOwogCi0JaHdfaWR4ID0gdHAtPmh3X3N0YXR1cy0+aWR4WzBdLnJ4X3Byb2R1Y2VyOworCWh3X2lkeCA9ICoodG5hcGktPnJ4X3JjYl9wcm9kX2lkeCk7CiAJLyoKIAkgKiBXZSBuZWVkIHRvIG9yZGVyIHRoZSByZWFkIG9mIGh3X2lkeCBhbmQgdGhlIHJlYWQgb2YKIAkgKiB0aGUgb3BhcXVlIGNvb2tpZS4KQEAgLTQ0NDIsNyArNDU0Niw3IEBACiAJd29ya19tYXNrID0gMDsKIAlyZWNlaXZlZCA9IDA7CiAJd2hpbGUgKHN3X2lkeCAhPSBod19pZHggJiYgYnVkZ2V0ID4gMCkgewotCQlzdHJ1Y3QgdGczX3J4X2J1ZmZlcl9kZXNjICpkZXNjID0gJnRwLT5yeF9yY2Jbc3dfaWR4XTsKKwkJc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYyAqZGVzYyA9ICZ0bmFwaS0+cnhfcmNiW3N3X2lkeF07CiAJCXVuc2lnbmVkIGludCBsZW47CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCWRtYV9hZGRyX3QgZG1hX2FkZHI7CkBAIC00NDUxLDI3ICs0NTU1LDI1IEBACiAJCWRlc2NfaWR4ID0gZGVzYy0+b3BhcXVlICYgUlhEX09QQVFVRV9JTkRFWF9NQVNLOwogCQlvcGFxdWVfa2V5ID0gZGVzYy0+b3BhcXVlICYgUlhEX09QQVFVRV9SSU5HX01BU0s7CiAJCWlmIChvcGFxdWVfa2V5ID09IFJYRF9PUEFRVUVfUklOR19TVEQpIHsKLQkJCWRtYV9hZGRyID0gcGNpX3VubWFwX2FkZHIoJnRwLT5yeF9zdGRfYnVmZmVyc1tkZXNjX2lkeF0sCi0JCQkJCQkgIG1hcHBpbmcpOwotCQkJc2tiID0gdHAtPnJ4X3N0ZF9idWZmZXJzW2Rlc2NfaWR4XS5za2I7Ci0JCQlwb3N0X3B0ciA9ICZ0cC0+cnhfc3RkX3B0cjsKKwkJCXN0cnVjdCByaW5nX2luZm8gKnJpID0gJnRwci0+cnhfc3RkX2J1ZmZlcnNbZGVzY19pZHhdOworCQkJZG1hX2FkZHIgPSBwY2lfdW5tYXBfYWRkcihyaSwgbWFwcGluZyk7CisJCQlza2IgPSByaS0+c2tiOworCQkJcG9zdF9wdHIgPSAmdHByLT5yeF9zdGRfcHRyOwogCQkJcnhfc3RkX3Bvc3RlZCsrOwogCQl9IGVsc2UgaWYgKG9wYXF1ZV9rZXkgPT0gUlhEX09QQVFVRV9SSU5HX0pVTUJPKSB7Ci0JCQlkbWFfYWRkciA9IHBjaV91bm1hcF9hZGRyKCZ0cC0+cnhfanVtYm9fYnVmZmVyc1tkZXNjX2lkeF0sCi0JCQkJCQkgIG1hcHBpbmcpOwotCQkJc2tiID0gdHAtPnJ4X2p1bWJvX2J1ZmZlcnNbZGVzY19pZHhdLnNrYjsKLQkJCXBvc3RfcHRyID0gJnRwLT5yeF9qdW1ib19wdHI7Ci0JCX0KLQkJZWxzZSB7CisJCQlzdHJ1Y3QgcmluZ19pbmZvICpyaSA9ICZ0cHItPnJ4X2ptYl9idWZmZXJzW2Rlc2NfaWR4XTsKKwkJCWRtYV9hZGRyID0gcGNpX3VubWFwX2FkZHIocmksIG1hcHBpbmcpOworCQkJc2tiID0gcmktPnNrYjsKKwkJCXBvc3RfcHRyID0gJnRwci0+cnhfam1iX3B0cjsKKwkJfSBlbHNlCiAJCQlnb3RvIG5leHRfcGt0X25vcG9zdDsKLQkJfQogCiAJCXdvcmtfbWFzayB8PSBvcGFxdWVfa2V5OwogCiAJCWlmICgoZGVzYy0+ZXJyX3ZsYW4gJiBSWERfRVJSX01BU0spICE9IDAgJiYKIAkJICAgIChkZXNjLT5lcnJfdmxhbiAhPSBSWERfRVJSX09ERF9OSUJCTEVfUkNWRF9NSUkpKSB7CiAJCWRyb3BfaXQ6Ci0JCQl0ZzNfcmVjeWNsZV9yeCh0cCwgb3BhcXVlX2tleSwKKwkJCXRnM19yZWN5Y2xlX3J4KHRuYXBpLCBvcGFxdWVfa2V5LAogCQkJCSAgICAgICBkZXNjX2lkeCwgKnBvc3RfcHRyKTsKIAkJZHJvcF9pdF9ub19yZWN5Y2xlOgogCQkJLyogT3RoZXIgc3RhdGlzdGljcyBrZXB0IHRyYWNrIG9mIGJ5IGNhcmQuICovCkBAIC00NDkxLDIwICs0NTkzLDE5IEBACiAJCSkgewogCQkJaW50IHNrYl9zaXplOwogCi0JCQlza2Jfc2l6ZSA9IHRnM19hbGxvY19yeF9za2IodHAsIG9wYXF1ZV9rZXksCisJCQlza2Jfc2l6ZSA9IHRnM19hbGxvY19yeF9za2IodG5hcGksIG9wYXF1ZV9rZXksCiAJCQkJCQkgICAgZGVzY19pZHgsICpwb3N0X3B0cik7CiAJCQlpZiAoc2tiX3NpemUgPCAwKQogCQkJCWdvdG8gZHJvcF9pdDsKIAotCQkJcGNpX3VubWFwX3NpbmdsZSh0cC0+cGRldiwgZG1hX2FkZHIsCi0JCQkJCSBza2Jfc2l6ZSAtIHRwLT5yeF9vZmZzZXQsCisJCQlwY2lfdW5tYXBfc2luZ2xlKHRwLT5wZGV2LCBkbWFfYWRkciwgc2tiX3NpemUsCiAJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJCQlza2JfcHV0KHNrYiwgbGVuKTsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBza19idWZmICpjb3B5X3NrYjsKIAotCQkJdGczX3JlY3ljbGVfcngodHAsIG9wYXF1ZV9rZXksCisJCQl0ZzNfcmVjeWNsZV9yeCh0bmFwaSwgb3BhcXVlX2tleSwKIAkJCQkgICAgICAgZGVzY19pZHgsICpwb3N0X3B0cik7CiAKIAkJCWNvcHlfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYih0cC0+ZGV2LApAQCAtNDU0MSwxMSArNDY0MiwxMSBAQAogI2lmIFRHM19WTEFOX1RBR19VU0VECiAJCWlmICh0cC0+dmxncnAgIT0gTlVMTCAmJgogCQkgICAgZGVzYy0+dHlwZV9mbGFncyAmIFJYRF9GTEFHX1ZMQU4pIHsKLQkJCXRnM192bGFuX3J4KHRwLCBza2IsCi0JCQkJICAgIGRlc2MtPmVycl92bGFuICYgUlhEX1ZMQU5fTUFTSyk7CisJCQl2bGFuX2dyb19yZWNlaXZlKCZ0bmFwaS0+bmFwaSwgdHAtPnZsZ3JwLAorCQkJCQkgZGVzYy0+ZXJyX3ZsYW4gJiBSWERfVkxBTl9NQVNLLCBza2IpOwogCQl9IGVsc2UKICNlbmRpZgotCQkJbmFwaV9ncm9fcmVjZWl2ZSgmdHAtPm5hcGksIHNrYik7CisJCQluYXBpX2dyb19yZWNlaXZlKCZ0bmFwaS0+bmFwaSwgc2tiKTsKIAogCQlyZWNlaXZlZCsrOwogCQlidWRnZXQtLTsKQEAgLTQ1NjcsMjMgKzQ2NjgsMjMgQEAKIAogCQkvKiBSZWZyZXNoIGh3X2lkeCB0byBzZWUgaWYgdGhlcmUgaXMgbmV3IHdvcmsgKi8KIAkJaWYgKHN3X2lkeCA9PSBod19pZHgpIHsKLQkJCWh3X2lkeCA9IHRwLT5od19zdGF0dXMtPmlkeFswXS5yeF9wcm9kdWNlcjsKKwkJCWh3X2lkeCA9ICoodG5hcGktPnJ4X3JjYl9wcm9kX2lkeCk7CiAJCQlybWIoKTsKIAkJfQogCX0KIAogCS8qIEFDSyB0aGUgc3RhdHVzIHJpbmcuICovCi0JdHAtPnJ4X3JjYl9wdHIgPSBzd19pZHg7Ci0JdHczMl9yeF9tYm94KE1BSUxCT1hfUkNWUkVUX0NPTl9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XLCBzd19pZHgpOworCXRuYXBpLT5yeF9yY2JfcHRyID0gc3dfaWR4OworCXR3MzJfcnhfbWJveCh0bmFwaS0+Y29uc21ib3gsIHN3X2lkeCk7CiAKIAkvKiBSZWZpbGwgUlggcmluZyhzKS4gKi8KIAlpZiAod29ya19tYXNrICYgUlhEX09QQVFVRV9SSU5HX1NURCkgewotCQlzd19pZHggPSB0cC0+cnhfc3RkX3B0ciAlIFRHM19SWF9SSU5HX1NJWkU7CisJCXN3X2lkeCA9IHRwci0+cnhfc3RkX3B0ciAlIFRHM19SWF9SSU5HX1NJWkU7CiAJCXR3MzJfcnhfbWJveChNQUlMQk9YX1JDVl9TVERfUFJPRF9JRFggKyBURzNfNjRCSVRfUkVHX0xPVywKIAkJCSAgICAgc3dfaWR4KTsKIAl9CiAJaWYgKHdvcmtfbWFzayAmIFJYRF9PUEFRVUVfUklOR19KVU1CTykgewotCQlzd19pZHggPSB0cC0+cnhfanVtYm9fcHRyICUgVEczX1JYX0pVTUJPX1JJTkdfU0laRTsKKwkJc3dfaWR4ID0gdHByLT5yeF9qbWJfcHRyICUgVEczX1JYX0pVTUJPX1JJTkdfU0laRTsKIAkJdHczMl9yeF9tYm94KE1BSUxCT1hfUkNWX0pVTUJPX1BST0RfSURYICsgVEczXzY0QklUX1JFR19MT1csCiAJCQkgICAgIHN3X2lkeCk7CiAJfQpAQCAtNDU5Miw5ICs0NjkzLDEwIEBACiAJcmV0dXJuIHJlY2VpdmVkOwogfQogCi1zdGF0aWMgaW50IHRnM19wb2xsX3dvcmsoc3RydWN0IHRnMyAqdHAsIGludCB3b3JrX2RvbmUsIGludCBidWRnZXQpCitzdGF0aWMgaW50IHRnM19wb2xsX3dvcmsoc3RydWN0IHRnM19uYXBpICp0bmFwaSwgaW50IHdvcmtfZG9uZSwgaW50IGJ1ZGdldCkKIHsKLQlzdHJ1Y3QgdGczX2h3X3N0YXR1cyAqc2JsayA9IHRwLT5od19zdGF0dXM7CisJc3RydWN0IHRnMyAqdHAgPSB0bmFwaS0+dHA7CisJc3RydWN0IHRnM19od19zdGF0dXMgKnNibGsgPSB0bmFwaS0+aHdfc3RhdHVzOwogCiAJLyogaGFuZGxlIGxpbmsgY2hhbmdlIGFuZCBvdGhlciBwaHkgZXZlbnRzICovCiAJaWYgKCEodHAtPnRnM19mbGFncyAmCkBAIC00NjE4LDggKzQ3MjAsOCBAQAogCX0KIAogCS8qIHJ1biBUWCBjb21wbGV0aW9uIHRocmVhZCAqLwotCWlmIChzYmxrLT5pZHhbMF0udHhfY29uc3VtZXIgIT0gdHAtPnR4X2NvbnMpIHsKLQkJdGczX3R4KHRwKTsKKwlpZiAodG5hcGktPmh3X3N0YXR1cy0+aWR4WzBdLnR4X2NvbnN1bWVyICE9IHRuYXBpLT50eF9jb25zKSB7CisJCXRnM190eCh0bmFwaSk7CiAJCWlmICh1bmxpa2VseSh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORykpCiAJCQlyZXR1cm4gd29ya19kb25lOwogCX0KQEAgLTQ2MjgsMjAgKzQ3MzAsMjEgQEAKIAkgKiBBbGwgUlggImxvY2tpbmciIGlzIGRvbmUgYnkgZW5zdXJpbmcgb3V0c2lkZQogCSAqIGNvZGUgc3luY2hyb25pemVzIHdpdGggdGczLT5uYXBpLnBvbGwoKQogCSAqLwotCWlmIChzYmxrLT5pZHhbMF0ucnhfcHJvZHVjZXIgIT0gdHAtPnJ4X3JjYl9wdHIpCi0JCXdvcmtfZG9uZSArPSB0ZzNfcngodHAsIGJ1ZGdldCAtIHdvcmtfZG9uZSk7CisJaWYgKCoodG5hcGktPnJ4X3JjYl9wcm9kX2lkeCkgIT0gdG5hcGktPnJ4X3JjYl9wdHIpCisJCXdvcmtfZG9uZSArPSB0ZzNfcngodG5hcGksIGJ1ZGdldCAtIHdvcmtfZG9uZSk7CiAKIAlyZXR1cm4gd29ya19kb25lOwogfQogCiBzdGF0aWMgaW50IHRnM19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKLQlzdHJ1Y3QgdGczICp0cCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgdGczLCBuYXBpKTsKKwlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCB0ZzNfbmFwaSwgbmFwaSk7CisJc3RydWN0IHRnMyAqdHAgPSB0bmFwaS0+dHA7CiAJaW50IHdvcmtfZG9uZSA9IDA7Ci0Jc3RydWN0IHRnM19od19zdGF0dXMgKnNibGsgPSB0cC0+aHdfc3RhdHVzOworCXN0cnVjdCB0ZzNfaHdfc3RhdHVzICpzYmxrID0gdG5hcGktPmh3X3N0YXR1czsKIAogCXdoaWxlICgxKSB7Ci0JCXdvcmtfZG9uZSA9IHRnM19wb2xsX3dvcmsodHAsIHdvcmtfZG9uZSwgYnVkZ2V0KTsKKwkJd29ya19kb25lID0gdGczX3BvbGxfd29yayh0bmFwaSwgd29ya19kb25lLCBidWRnZXQpOwogCiAJCWlmICh1bmxpa2VseSh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORykpCiAJCQlnb3RvIHR4X3JlY292ZXJ5OwpAQCAtNDY1MCwxOSArNDc1MywxOSBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UQUdHRURfU1RBVFVTKSB7Ci0JCQkvKiB0cC0+bGFzdF90YWcgaXMgdXNlZCBpbiB0ZzNfcmVzdGFydF9pbnRzKCkgYmVsb3cKKwkJCS8qIHRwLT5sYXN0X3RhZyBpcyB1c2VkIGluIHRnM19pbnRfcmVlbmFibGUoKSBiZWxvdwogCQkJICogdG8gdGVsbCB0aGUgaHcgaG93IG11Y2ggd29yayBoYXMgYmVlbiBwcm9jZXNzZWQsCiAJCQkgKiBzbyB3ZSBtdXN0IHJlYWQgaXQgYmVmb3JlIGNoZWNraW5nIGZvciBtb3JlIHdvcmsuCiAJCQkgKi8KLQkJCXRwLT5sYXN0X3RhZyA9IHNibGstPnN0YXR1c190YWc7Ci0JCQl0cC0+bGFzdF9pcnFfdGFnID0gdHAtPmxhc3RfdGFnOworCQkJdG5hcGktPmxhc3RfdGFnID0gc2Jsay0+c3RhdHVzX3RhZzsKKwkJCXRuYXBpLT5sYXN0X2lycV90YWcgPSB0bmFwaS0+bGFzdF90YWc7CiAJCQlybWIoKTsKIAkJfSBlbHNlCiAJCQlzYmxrLT5zdGF0dXMgJj0gflNEX1NUQVRVU19VUERBVEVEOwogCi0JCWlmIChsaWtlbHkoIXRnM19oYXNfd29yayh0cCkpKSB7CisJCWlmIChsaWtlbHkoIXRnM19oYXNfd29yayh0bmFwaSkpKSB7CiAJCQluYXBpX2NvbXBsZXRlKG5hcGkpOwotCQkJdGczX3Jlc3RhcnRfaW50cyh0cCk7CisJCQl0ZzNfaW50X3JlZW5hYmxlKHRuYXBpKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNDY3OCwxMiArNDc4MSwxNSBAQAogCiBzdGF0aWMgdm9pZCB0ZzNfaXJxX3F1aWVzY2Uoc3RydWN0IHRnMyAqdHApCiB7CisJaW50IGk7CisKIAlCVUdfT04odHAtPmlycV9zeW5jKTsKIAogCXRwLT5pcnFfc3luYyA9IDE7CiAJc21wX21iKCk7CiAKLQlzeW5jaHJvbml6ZV9pcnEodHAtPnBkZXYtPmlycSk7CisJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfY250OyBpKyspCisJCXN5bmNocm9uaXplX2lycSh0cC0+bmFwaVtpXS5pcnFfdmVjKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdGczX2lycV9zeW5jKHN0cnVjdCB0ZzMgKnRwKQpAQCAtNDcxMywxNCArNDgxOSwxNSBAQAogICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgdGczX21zaV8xc2hvdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKLQlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9IGRldl9pZDsKKwlzdHJ1Y3QgdGczICp0cCA9IHRuYXBpLT50cDsKIAotCXByZWZldGNoKHRwLT5od19zdGF0dXMpOwotCXByZWZldGNoKCZ0cC0+cnhfcmNiW3RwLT5yeF9yY2JfcHRyXSk7CisJcHJlZmV0Y2godG5hcGktPmh3X3N0YXR1cyk7CisJaWYgKHRuYXBpLT5yeF9yY2IpCisJCXByZWZldGNoKCZ0bmFwaS0+cnhfcmNiW3RuYXBpLT5yeF9yY2JfcHRyXSk7CiAKIAlpZiAobGlrZWx5KCF0ZzNfaXJxX3N5bmModHApKSkKLQkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZ0bmFwaS0+bmFwaSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC00NzMxLDExICs0ODM4LDEyIEBACiAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCB0ZzNfbXNpKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwotCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gZGV2X2lkOworCXN0cnVjdCB0ZzMgKnRwID0gdG5hcGktPnRwOwogCi0JcHJlZmV0Y2godHAtPmh3X3N0YXR1cyk7Ci0JcHJlZmV0Y2goJnRwLT5yeF9yY2JbdHAtPnJ4X3JjYl9wdHJdKTsKKwlwcmVmZXRjaCh0bmFwaS0+aHdfc3RhdHVzKTsKKwlpZiAodG5hcGktPnJ4X3JjYikKKwkJcHJlZmV0Y2goJnRuYXBpLT5yeF9yY2JbdG5hcGktPnJ4X3JjYl9wdHJdKTsKIAkvKgogCSAqIFdyaXRpbmcgYW55IHZhbHVlIHRvIGludHItbWJveC0wIGNsZWFycyBQQ0kgSU5UQSMgYW5kCiAJICogY2hpcC1pbnRlcm5hbCBpbnRlcnJ1cHQgcGVuZGluZyBldmVudHMuCkBAIC00NzQ1LDE2ICs0ODUzLDE2IEBACiAJICovCiAJdHczMl9tYWlsYm94KE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVywgMHgwMDAwMDAwMSk7CiAJaWYgKGxpa2VseSghdGczX2lycV9zeW5jKHRwKSkpCi0JCW5hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmdG5hcGktPm5hcGkpOwogCiAJcmV0dXJuIElSUV9SRVRWQUwoMSk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB0ZzNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwotCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgdGczX2h3X3N0YXR1cyAqc2JsayA9IHRwLT5od19zdGF0dXM7CisJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9IGRldl9pZDsKKwlzdHJ1Y3QgdGczICp0cCA9IHRuYXBpLT50cDsKKwlzdHJ1Y3QgdGczX2h3X3N0YXR1cyAqc2JsayA9IHRuYXBpLT5od19zdGF0dXM7CiAJdW5zaWduZWQgaW50IGhhbmRsZWQgPSAxOwogCiAJLyogSW4gSU5UeCBtb2RlLCBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGludGVycnVwdCB0byBhcnJpdmUgYXQKQEAgLTQ3ODUsOSArNDg5Myw5IEBACiAJaWYgKHRnM19pcnFfc3luYyh0cCkpCiAJCWdvdG8gb3V0OwogCXNibGstPnN0YXR1cyAmPSB+U0RfU1RBVFVTX1VQREFURUQ7Ci0JaWYgKGxpa2VseSh0ZzNfaGFzX3dvcmsodHApKSkgewotCQlwcmVmZXRjaCgmdHAtPnJ4X3JjYlt0cC0+cnhfcmNiX3B0cl0pOwotCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJaWYgKGxpa2VseSh0ZzNfaGFzX3dvcmsodG5hcGkpKSkgeworCQlwcmVmZXRjaCgmdG5hcGktPnJ4X3JjYlt0bmFwaS0+cnhfcmNiX3B0cl0pOworCQluYXBpX3NjaGVkdWxlKCZ0bmFwaS0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJLyogTm8gd29yaywgc2hhcmVkIGludGVycnVwdCBwZXJoYXBzPyAgcmUtZW5hYmxlCiAJCSAqIGludGVycnVwdHMsIGFuZCBmbHVzaCB0aGF0IFBDSSB3cml0ZQpAQCAtNDgwMSw5ICs0OTA5LDkgQEAKIAogc3RhdGljIGlycXJldHVybl90IHRnM19pbnRlcnJ1cHRfdGFnZ2VkKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwotCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgdGczX2h3X3N0YXR1cyAqc2JsayA9IHRwLT5od19zdGF0dXM7CisJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9IGRldl9pZDsKKwlzdHJ1Y3QgdGczICp0cCA9IHRuYXBpLT50cDsKKwlzdHJ1Y3QgdGczX2h3X3N0YXR1cyAqc2JsayA9IHRuYXBpLT5od19zdGF0dXM7CiAJdW5zaWduZWQgaW50IGhhbmRsZWQgPSAxOwogCiAJLyogSW4gSU5UeCBtb2RlLCBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGludGVycnVwdCB0byBhcnJpdmUgYXQKQEAgLTQ4MTEsNyArNDkxOSw3IEBACiAJICogUmVhZGluZyB0aGUgUENJIFN0YXRlIHJlZ2lzdGVyIHdpbGwgY29uZmlybSB3aGV0aGVyIHRoZQogCSAqIGludGVycnVwdCBpcyBvdXJzIGFuZCB3aWxsIGZsdXNoIHRoZSBzdGF0dXMgYmxvY2suCiAJICovCi0JaWYgKHVubGlrZWx5KHNibGstPnN0YXR1c190YWcgPT0gdHAtPmxhc3RfaXJxX3RhZykpIHsKKwlpZiAodW5saWtlbHkoc2Jsay0+c3RhdHVzX3RhZyA9PSB0bmFwaS0+bGFzdF9pcnFfdGFnKSkgewogCQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19DSElQX1JFU0VUVElORykgfHwKIAkJICAgICh0cjMyKFRHM1BDSV9QQ0lTVEFURSkgJiBQQ0lTVEFURV9JTlRfTk9UX0FDVElWRSkpIHsKIAkJCWhhbmRsZWQgPSAwOwpAQCAtNDgzOCwxNCArNDk0NiwxNCBAQAogCSAqIHNvIHRoYXQgdGhlIGFib3ZlIGNoZWNrIGNhbiByZXBvcnQgdGhhdCB0aGUgc2NyZWFtaW5nIGludGVycnVwdHMKIAkgKiBhcmUgdW5oYW5kbGVkLiAgRXZlbnR1YWxseSB0aGV5IHdpbGwgYmUgc2lsZW5jZWQuCiAJICovCi0JdHAtPmxhc3RfaXJxX3RhZyA9IHNibGstPnN0YXR1c190YWc7CisJdG5hcGktPmxhc3RfaXJxX3RhZyA9IHNibGstPnN0YXR1c190YWc7CiAKIAlpZiAodGczX2lycV9zeW5jKHRwKSkKIAkJZ290byBvdXQ7CiAKLQlwcmVmZXRjaCgmdHAtPnJ4X3JjYlt0cC0+cnhfcmNiX3B0cl0pOworCXByZWZldGNoKCZ0bmFwaS0+cnhfcmNiW3RuYXBpLT5yeF9yY2JfcHRyXSk7CiAKLQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmdG5hcGktPm5hcGkpOwogCiBvdXQ6CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CkBAIC00ODU0LDkgKzQ5NjIsOSBAQAogLyogSVNSIGZvciBpbnRlcnJ1cHQgdGVzdCAqLwogc3RhdGljIGlycXJldHVybl90IHRnM190ZXN0X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKLQlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHRnM19od19zdGF0dXMgKnNibGsgPSB0cC0+aHdfc3RhdHVzOworCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSBkZXZfaWQ7CisJc3RydWN0IHRnMyAqdHAgPSB0bmFwaS0+dHA7CisJc3RydWN0IHRnM19od19zdGF0dXMgKnNibGsgPSB0bmFwaS0+aHdfc3RhdHVzOwogCiAJaWYgKChzYmxrLT5zdGF0dXMgJiBTRF9TVEFUVVNfVVBEQVRFRCkgfHwKIAkgICAgISh0cjMyKFRHM1BDSV9QQ0lTVEFURSkgJiBQQ0lTVEFURV9JTlRfTk9UX0FDVElWRSkpIHsKQEAgLTQ4ODYsNyArNDk5NCw3IEBACiAJCXRnM19mdWxsX3VubG9jayh0cCk7CiAJCWRlbF90aW1lcl9zeW5jKCZ0cC0+dGltZXIpOwogCQl0cC0+aXJxX3N5bmMgPSAwOwotCQluYXBpX2VuYWJsZSgmdHAtPm5hcGkpOworCQl0ZzNfbmFwaV9lbmFibGUodHApOwogCQlkZXZfY2xvc2UodHAtPmRldik7CiAJCXRnM19mdWxsX2xvY2sodHAsIDApOwogCX0KQEAgLTQ4OTYsOSArNTAwNCwxMSBAQAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCB0ZzNfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJaW50IGk7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JdGczX2ludGVycnVwdCh0cC0+cGRldi0+aXJxLCBkZXYpOworCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX2NudDsgaSsrKQorCQl0ZzNfaW50ZXJydXB0KHRwLT5uYXBpW2ldLmlycV92ZWMsIGRldik7CiB9CiAjZW5kaWYKIApAQCAtNDk5MywxMyArNTEwMywxNCBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIHRnM19zZXRfdHhkKHN0cnVjdCB0ZzMgKiwgaW50LCBkbWFfYWRkcl90LCBpbnQsIHUzMiwgdTMyKTsKK3N0YXRpYyB2b2lkIHRnM19zZXRfdHhkKHN0cnVjdCB0ZzNfbmFwaSAqLCBpbnQsIGRtYV9hZGRyX3QsIGludCwgdTMyLCB1MzIpOwogCiAvKiBXb3JrYXJvdW5kIDRHQiBhbmQgNDAtYml0IGhhcmR3YXJlIERNQSBidWdzLiAqLwogc3RhdGljIGludCB0aWdvbjNfZG1hX2h3YnVnX3dvcmthcm91bmQoc3RydWN0IHRnMyAqdHAsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgIHUzMiBsYXN0X3BsdXNfb25lLCB1MzIgKnN0YXJ0LAogCQkJCSAgICAgICB1MzIgYmFzZV9mbGFncywgdTMyIG1zcykKIHsKKwlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpWzBdOwogCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwogCWRtYV9hZGRyX3QgbmV3X2FkZHIgPSAwOwogCXUzMiBlbnRyeSA9ICpzdGFydDsKQEAgLTUwMzQsNyArNTE0NSw3IEBACiAJCQlkZXZfa2ZyZWVfc2tiKG5ld19za2IpOwogCQkJbmV3X3NrYiA9IE5VTEw7CiAJCX0gZWxzZSB7Ci0JCQl0ZzNfc2V0X3R4ZCh0cCwgZW50cnksIG5ld19hZGRyLCBuZXdfc2tiLT5sZW4sCisJCQl0ZzNfc2V0X3R4ZCh0bmFwaSwgZW50cnksIG5ld19hZGRyLCBuZXdfc2tiLT5sZW4sCiAJCQkJICAgIGJhc2VfZmxhZ3MsIDEgfCAobXNzIDw8IDEpKTsKIAkJCSpzdGFydCA9IE5FWFRfVFgoZW50cnkpOwogCQl9CkBAIC01MDQzLDExICs1MTU0LDEwIEBACiAJLyogTm93IGNsZWFuIHVwIHRoZSBzdyByaW5nIGVudHJpZXMuICovCiAJaSA9IDA7CiAJd2hpbGUgKGVudHJ5ICE9IGxhc3RfcGx1c19vbmUpIHsKLQkJaWYgKGkgPT0gMCkgewotCQkJdHAtPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IG5ld19za2I7Ci0JCX0gZWxzZSB7Ci0JCQl0cC0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gTlVMTDsKLQkJfQorCQlpZiAoaSA9PSAwKQorCQkJdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IG5ld19za2I7CisJCWVsc2UKKwkJCXRuYXBpLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBOVUxMOwogCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwogCQlpKys7CiAJfQpAQCAtNTA1OCwxMSArNTE2OCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHRnM19zZXRfdHhkKHN0cnVjdCB0ZzMgKnRwLCBpbnQgZW50cnksCitzdGF0aWMgdm9pZCB0ZzNfc2V0X3R4ZChzdHJ1Y3QgdGczX25hcGkgKnRuYXBpLCBpbnQgZW50cnksCiAJCQlkbWFfYWRkcl90IG1hcHBpbmcsIGludCBsZW4sIHUzMiBmbGFncywKIAkJCXUzMiBtc3NfYW5kX2lzX2VuZCkKIHsKLQlzdHJ1Y3QgdGczX3R4X2J1ZmZlcl9kZXNjICp0eGQgPSAmdHAtPnR4X3JpbmdbZW50cnldOworCXN0cnVjdCB0ZzNfdHhfYnVmZmVyX2Rlc2MgKnR4ZCA9ICZ0bmFwaS0+dHhfcmluZ1tlbnRyeV07CiAJaW50IGlzX2VuZCA9IChtc3NfYW5kX2lzX2VuZCAmIDB4MSk7CiAJdTMyIG1zcyA9IChtc3NfYW5kX2lzX2VuZCA+PiAxKTsKIAl1MzIgdmxhbl90YWcgPSAwOwpAQCAtNTA4NCwyMyArNTE5NCwyOSBAQAogLyogaGFyZF9zdGFydF94bWl0IGZvciBkZXZpY2VzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgYnVncyBhbmQKICAqIHN1cHBvcnQgVEczX0ZMRzJfSFdfVFNPXzIgb25seS4KICAqLwotc3RhdGljIGludCB0ZzNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHRnM19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgbGVuLCBlbnRyeSwgYmFzZV9mbGFncywgbXNzOwogCXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNwOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKKwlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpOworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKIAotCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKKwl0bmFwaSA9ICZ0cC0+bmFwaVtza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKV07CisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJWCkKKwkJdG5hcGkrKzsKIAogCS8qIFdlIGFyZSBydW5uaW5nIGluIEJIIGRpc2FibGVkIGNvbnRleHQgd2l0aCBuZXRpZl90eF9sb2NrCiAJICogYW5kIFRYIHJlY2xhaW0gcnVucyB2aWEgdHAtPm5hcGkucG9sbCBpbnNpZGUgb2YgYSBzb2Z0d2FyZQogCSAqIGludGVycnVwdC4gIEZ1cnRoZXJtb3JlLCBJUlEgcHJvY2Vzc2luZyBydW5zIGxvY2tsZXNzIHNvIHdlIGhhdmUKIAkgKiBubyBJUlEgY29udGV4dCBkZWFkbG9ja3MgdG8gd29ycnkgYWJvdXQgZWl0aGVyLiAgUmVqb2ljZSEKIAkgKi8KLQlpZiAodW5saWtlbHkodGczX3R4X2F2YWlsKHRwKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSkgewotCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewotCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCWlmICh1bmxpa2VseSh0ZzNfdHhfYXZhaWwodG5hcGkpIDw9IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpKSB7CisJCWlmICghbmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7CisJCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CiAKIAkJCS8qIFRoaXMgaXMgYSBoYXJkIGVycm9yLCBsb2cgaXQuICovCiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiAiCkBAIC01MTA5LDExICs1MjI1LDEyIEBACiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKLQllbnRyeSA9IHRwLT50eF9wcm9kOworCWVudHJ5ID0gdG5hcGktPnR4X3Byb2Q7CiAJYmFzZV9mbGFncyA9IDA7CiAJbXNzID0gMDsKIAlpZiAoKG1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpICE9IDApIHsKIAkJaW50IHRjcF9vcHRfbGVuLCBpcF90Y3BfbGVuOworCQl1MzIgaGRybGVuOwogCiAJCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpICYmCiAJCSAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpIHsKQEAgLTUxMjIsNyArNTIzOSw3IEBACiAJCX0KIAogCQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSAmIFNLQl9HU09fVENQVjYpCi0JCQltc3MgfD0gKHNrYl9oZWFkbGVuKHNrYikgLSBFVEhfSExFTikgPDwgOTsKKwkJCWhkcmxlbiA9IHNrYl9oZWFkbGVuKHNrYikgLSBFVEhfSExFTjsKIAkJZWxzZSB7CiAJCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwogCkBAIC01MTMxLDkgKzUyNDgsMTcgQEAKIAogCQkJaXBoLT5jaGVjayA9IDA7CiAJCQlpcGgtPnRvdF9sZW4gPSBodG9ucyhtc3MgKyBpcF90Y3BfbGVuICsgdGNwX29wdF9sZW4pOwotCQkJbXNzIHw9IChpcF90Y3BfbGVuICsgdGNwX29wdF9sZW4pIDw8IDk7CisJCQloZHJsZW4gPSBpcF90Y3BfbGVuICsgdGNwX29wdF9sZW47CiAJCX0KIAorCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpIHsKKwkJCW1zcyB8PSAoaGRybGVuICYgMHhjKSA8PCAxMjsKKwkJCWlmIChoZHJsZW4gJiAweDEwKQorCQkJCWJhc2VfZmxhZ3MgfD0gMHgwMDAwMDAxMDsKKwkJCWJhc2VfZmxhZ3MgfD0gKGhkcmxlbiAmIDB4M2UwKSA8PCA1OworCQl9IGVsc2UKKwkJCW1zcyB8PSBoZHJsZW4gPDwgOTsKKwogCQliYXNlX2ZsYWdzIHw9IChUWERfRkxBR19DUFVfUFJFX0RNQSB8CiAJCQkgICAgICAgVFhEX0ZMQUdfQ1BVX1BPU1RfRE1BKTsKIApAQCAtNTE1Nyw5ICs1MjgyLDE1IEBACiAKIAltYXBwaW5nID0gc3AtPmRtYV9oZWFkOwogCi0JdHAtPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IHNrYjsKKwl0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gc2tiOwogCi0JdGczX3NldF90eGQodHAsIGVudHJ5LCBtYXBwaW5nLCBsZW4sIGJhc2VfZmxhZ3MsCisJbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyAmJgorCSAgICAhbXNzICYmIHNrYi0+bGVuID4gRVRIX0RBVEFfTEVOKQorCQliYXNlX2ZsYWdzIHw9IFRYRF9GTEFHX0pNQl9QS1Q7CisKKwl0ZzNfc2V0X3R4ZCh0bmFwaSwgZW50cnksIG1hcHBpbmcsIGxlbiwgYmFzZV9mbGFncywKIAkJICAgIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApIHwgKG1zcyA8PCAxKSk7CiAKIAllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwpAQCAtNTE3NCw5ICs1MzA1LDkgQEAKIAogCQkJbGVuID0gZnJhZy0+c2l6ZTsKIAkJCW1hcHBpbmcgPSBzcC0+ZG1hX21hcHNbaV07Ci0JCQl0cC0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gTlVMTDsKKwkJCXRuYXBpLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBOVUxMOwogCi0JCQl0ZzNfc2V0X3R4ZCh0cCwgZW50cnksIG1hcHBpbmcsIGxlbiwKKwkJCXRnM19zZXRfdHhkKHRuYXBpLCBlbnRyeSwgbWFwcGluZywgbGVuLAogCQkJCSAgICBiYXNlX2ZsYWdzLCAoaSA9PSBsYXN0KSB8IChtc3MgPDwgMSkpOwogCiAJCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwpAQCAtNTE4NCwxMyArNTMxNSwxMyBAQAogCX0KIAogCS8qIFBhY2tldHMgYXJlIHJlYWR5LCB1cGRhdGUgVHggcHJvZHVjZXIgaWR4IGxvY2FsIGFuZCBvbiBjYXJkLiAqLwotCXR3MzJfdHhfbWJveCgoTUFJTEJPWF9TTkRIT1NUX1BST0RfSURYXzAgKyBURzNfNjRCSVRfUkVHX0xPVyksIGVudHJ5KTsKKwl0dzMyX3R4X21ib3godG5hcGktPnByb2RtYm94LCBlbnRyeSk7CiAKLQl0cC0+dHhfcHJvZCA9IGVudHJ5OwotCWlmICh1bmxpa2VseSh0ZzNfdHhfYXZhaWwodHApIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpKSB7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJaWYgKHRnM190eF9hdmFpbCh0cCkgPiBURzNfVFhfV0FLRVVQX1RIUkVTSCh0cCkpCi0JCQluZXRpZl93YWtlX3F1ZXVlKHRwLT5kZXYpOworCXRuYXBpLT50eF9wcm9kID0gZW50cnk7CisJaWYgKHVubGlrZWx5KHRnM190eF9hdmFpbCh0bmFwaSkgPD0gKE1BWF9TS0JfRlJBR1MgKyAxKSkpIHsKKwkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOworCQlpZiAodGczX3R4X2F2YWlsKHRuYXBpKSA+IFRHM19UWF9XQUtFVVBfVEhSRVNIKHRuYXBpKSkKKwkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKIAl9CiAKIG91dF91bmxvY2s6CkBAIC01MTk5LDcgKzUzMzAsOCBAQAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKLXN0YXRpYyBpbnQgdGczX3N0YXJ0X3htaXRfZG1hX2J1ZyhzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyBuZXRkZXZfdHhfdCB0ZzNfc3RhcnRfeG1pdF9kbWFfYnVnKHN0cnVjdCBza19idWZmICosCisJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKIC8qIFVzZSBHU08gdG8gd29ya2Fyb3VuZCBhIHJhcmUgVFNPIGJ1ZyB0aGF0IG1heSBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUKICAqIFRTTyBoZWFkZXIgaXMgZ3JlYXRlciB0aGFuIDgwIGJ5dGVzLgpAQCAtNTIwNywxMSArNTMzOSwxMiBAQAogc3RhdGljIGludCB0ZzNfdHNvX2J1ZyhzdHJ1Y3QgdGczICp0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKm5za2I7CisJdTMyIGZyYWdfY250X2VzdCA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgKiAzOwogCiAJLyogRXN0aW1hdGUgdGhlIG51bWJlciBvZiBmcmFnbWVudHMgaW4gdGhlIHdvcnN0IGNhc2UgKi8KLQlpZiAodW5saWtlbHkodGczX3R4X2F2YWlsKHRwKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyAqIDMpKSkgeworCWlmICh1bmxpa2VseSh0ZzNfdHhfYXZhaWwoJnRwLT5uYXBpWzBdKSA8PSBmcmFnX2NudF9lc3QpKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUodHAtPmRldik7Ci0JCWlmICh0ZzNfdHhfYXZhaWwodHApIDw9IChza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzICogMykpCisJCWlmICh0ZzNfdHhfYXZhaWwoJnRwLT5uYXBpWzBdKSA8PSBmcmFnX2NudF9lc3QpCiAJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAKIAkJbmV0aWZfd2FrZV9xdWV1ZSh0cC0+ZGV2KTsKQEAgLTUyMzcsMTMgKzUzNzAsMTUgQEAKIC8qIGhhcmRfc3RhcnRfeG1pdCBmb3IgZGV2aWNlcyB0aGF0IGhhdmUgdGhlIDRHIGJ1ZyBhbmQvb3IgNDAtYml0IGJ1ZyBhbmQKICAqIHN1cHBvcnQgVEczX0ZMRzJfSFdfVFNPXzEgb3IgZmlybXdhcmUgVFNPIG9ubHkuCiAgKi8KLXN0YXRpYyBpbnQgdGczX3N0YXJ0X3htaXRfZG1hX2J1ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHRnM19zdGFydF94bWl0X2RtYV9idWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgbGVuLCBlbnRyeSwgYmFzZV9mbGFncywgbXNzOwogCXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNwOwogCWludCB3b3VsZF9oaXRfaHdidWc7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOworCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbMF07CiAKIAlsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCkBAIC01MjUyLDcgKzUzODcsNyBAQAogCSAqIGludGVycnVwdC4gIEZ1cnRoZXJtb3JlLCBJUlEgcHJvY2Vzc2luZyBydW5zIGxvY2tsZXNzIHNvIHdlIGhhdmUKIAkgKiBubyBJUlEgY29udGV4dCBkZWFkbG9ja3MgdG8gd29ycnkgYWJvdXQgZWl0aGVyLiAgUmVqb2ljZSEKIAkgKi8KLQlpZiAodW5saWtlbHkodGczX3R4X2F2YWlsKHRwKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSkgeworCWlmICh1bmxpa2VseSh0ZzNfdHhfYXZhaWwodG5hcGkpIDw9IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpKSB7CiAJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKQEAgLTUyNjMsNyArNTM5OCw3IEBACiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKLQllbnRyeSA9IHRwLT50eF9wcm9kOworCWVudHJ5ID0gdG5hcGktPnR4X3Byb2Q7CiAJYmFzZV9mbGFncyA9IDA7CiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpCiAJCWJhc2VfZmxhZ3MgfD0gVFhEX0ZMQUdfVENQVURQX0NTVU07CkBAIC01MzMzLDcgKzU0NjgsNyBAQAogCiAJbWFwcGluZyA9IHNwLT5kbWFfaGVhZDsKIAotCXRwLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBza2I7CisJdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IHNrYjsKIAogCXdvdWxkX2hpdF9od2J1ZyA9IDA7CiAKQEAgLTUzNDIsNyArNTQ3Nyw3IEBACiAJZWxzZSBpZiAodGczXzRnX292ZXJmbG93X3Rlc3QobWFwcGluZywgbGVuKSkKIAkJd291bGRfaGl0X2h3YnVnID0gMTsKIAotCXRnM19zZXRfdHhkKHRwLCBlbnRyeSwgbWFwcGluZywgbGVuLCBiYXNlX2ZsYWdzLAorCXRnM19zZXRfdHhkKHRuYXBpLCBlbnRyeSwgbWFwcGluZywgbGVuLCBiYXNlX2ZsYWdzLAogCQkgICAgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPT0gMCkgfCAobXNzIDw8IDEpKTsKIAogCWVudHJ5ID0gTkVYVF9UWChlbnRyeSk7CkBAIC01MzU4LDcgKzU0OTMsNyBAQAogCQkJbGVuID0gZnJhZy0+c2l6ZTsKIAkJCW1hcHBpbmcgPSBzcC0+ZG1hX21hcHNbaV07CiAKLQkJCXRwLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBOVUxMOworCQkJdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IE5VTEw7CiAKIAkJCWlmICh0ZzNfNGdfb3ZlcmZsb3dfdGVzdChtYXBwaW5nLCBsZW4pKQogCQkJCXdvdWxkX2hpdF9od2J1ZyA9IDE7CkBAIC01MzY3LDEwICs1NTAyLDEwIEBACiAJCQkJd291bGRfaGl0X2h3YnVnID0gMTsKIAogCQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPKQotCQkJCXRnM19zZXRfdHhkKHRwLCBlbnRyeSwgbWFwcGluZywgbGVuLAorCQkJCXRnM19zZXRfdHhkKHRuYXBpLCBlbnRyeSwgbWFwcGluZywgbGVuLAogCQkJCQkgICAgYmFzZV9mbGFncywgKGkgPT0gbGFzdCl8KG1zcyA8PCAxKSk7CiAJCQllbHNlCi0JCQkJdGczX3NldF90eGQodHAsIGVudHJ5LCBtYXBwaW5nLCBsZW4sCisJCQkJdGczX3NldF90eGQodG5hcGksIGVudHJ5LCBtYXBwaW5nLCBsZW4sCiAJCQkJCSAgICBiYXNlX2ZsYWdzLCAoaSA9PSBsYXN0KSk7CiAKIAkJCWVudHJ5ID0gTkVYVF9UWChlbnRyeSk7CkBAIC01Mzk1LDEyICs1NTMwLDEyIEBACiAJfQogCiAJLyogUGFja2V0cyBhcmUgcmVhZHksIHVwZGF0ZSBUeCBwcm9kdWNlciBpZHggbG9jYWwgYW5kIG9uIGNhcmQuICovCi0JdHczMl90eF9tYm94KChNQUlMQk9YX1NOREhPU1RfUFJPRF9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XKSwgZW50cnkpOworCXR3MzJfdHhfbWJveChNQUlMQk9YX1NOREhPU1RfUFJPRF9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XLCBlbnRyeSk7CiAKLQl0cC0+dHhfcHJvZCA9IGVudHJ5OwotCWlmICh1bmxpa2VseSh0ZzNfdHhfYXZhaWwodHApIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpKSB7CisJdG5hcGktPnR4X3Byb2QgPSBlbnRyeTsKKwlpZiAodW5saWtlbHkodGczX3R4X2F2YWlsKHRuYXBpKSA8PSAoTUFYX1NLQl9GUkFHUyArIDEpKSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCWlmICh0ZzNfdHhfYXZhaWwodHApID4gVEczX1RYX1dBS0VVUF9USFJFU0godHApKQorCQlpZiAodGczX3R4X2F2YWlsKHRuYXBpKSA+IFRHM19UWF9XQUtFVVBfVEhSRVNIKHRuYXBpKSkKIAkJCW5ldGlmX3dha2VfcXVldWUodHAtPmRldik7CiAJfQogCkBAIC01NDY4LDYgKzU2MDMsMTg4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgdGczX3J4X3Byb2RyaW5nX2ZyZWUoc3RydWN0IHRnMyAqdHAsCisJCQkJIHN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0ICp0cHIpCit7CisJaW50IGk7CisJc3RydWN0IHJpbmdfaW5mbyAqcnhwOworCisJZm9yIChpID0gMDsgaSA8IFRHM19SWF9SSU5HX1NJWkU7IGkrKykgeworCQlyeHAgPSAmdHByLT5yeF9zdGRfYnVmZmVyc1tpXTsKKworCQlpZiAocnhwLT5za2IgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXBjaV91bm1hcF9zaW5nbGUodHAtPnBkZXYsCisJCQkJIHBjaV91bm1hcF9hZGRyKHJ4cCwgbWFwcGluZyksCisJCQkJIHRwLT5yeF9wa3RfbWFwX3N6LAorCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlkZXZfa2ZyZWVfc2tiX2FueShyeHAtPnNrYik7CisJCXJ4cC0+c2tiID0gTlVMTDsKKwl9CisKKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX0NBUEFCTEUpIHsKKwkJZm9yIChpID0gMDsgaSA8IFRHM19SWF9KVU1CT19SSU5HX1NJWkU7IGkrKykgeworCQkJcnhwID0gJnRwci0+cnhfam1iX2J1ZmZlcnNbaV07CisKKwkJCWlmIChyeHAtPnNrYiA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCisJCQlwY2lfdW5tYXBfc2luZ2xlKHRwLT5wZGV2LAorCQkJCQkgcGNpX3VubWFwX2FkZHIocnhwLCBtYXBwaW5nKSwKKwkJCQkJIFRHM19SWF9KTUJfTUFQX1NaLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHJ4cC0+c2tiKTsKKwkJCXJ4cC0+c2tiID0gTlVMTDsKKwkJfQorCX0KK30KKworLyogSW5pdGlhbGl6ZSB0eC9yeCByaW5ncyBmb3IgcGFja2V0IHByb2Nlc3NpbmcuCisgKgorICogVGhlIGNoaXAgaGFzIGJlZW4gc2h1dCBkb3duIGFuZCB0aGUgZHJpdmVyIGRldGFjaGVkIGZyb20KKyAqIHRoZSBuZXR3b3JraW5nLCBzbyBubyBpbnRlcnJ1cHRzIG9yIG5ldyB0eCBwYWNrZXRzIHdpbGwKKyAqIGVuZCB1cCBpbiB0aGUgZHJpdmVyLiAgdHAtPnt0eCx9bG9jayBhcmUgaGVsZCBhbmQgdGh1cworICogd2UgbWF5IG5vdCBzbGVlcC4KKyAqLworc3RhdGljIGludCB0ZzNfcnhfcHJvZHJpbmdfYWxsb2Moc3RydWN0IHRnMyAqdHAsCisJCQkJIHN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0ICp0cHIpCit7CisJdTMyIGksIHJ4X3BrdF9kbWFfc3o7CisJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVswXTsKKworCS8qIFplcm8gb3V0IGFsbCBkZXNjcmlwdG9ycy4gKi8KKwltZW1zZXQodHByLT5yeF9zdGQsIDAsIFRHM19SWF9SSU5HX0JZVEVTKTsKKworCXJ4X3BrdF9kbWFfc3ogPSBURzNfUlhfU1REX0RNQV9TWjsKKwlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykgJiYKKwkgICAgdHAtPmRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKQorCQlyeF9wa3RfZG1hX3N6ID0gVEczX1JYX0pNQl9ETUFfU1o7CisJdHAtPnJ4X3BrdF9tYXBfc3ogPSBURzNfUlhfRE1BX1RPX01BUF9TWihyeF9wa3RfZG1hX3N6KTsKKworCS8qIEluaXRpYWxpemUgaW52YXJpYW50cyBvZiB0aGUgcmluZ3MsIHdlIG9ubHkgc2V0IHRoaXMKKwkgKiBzdHVmZiBvbmNlLiAgVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBjYXJkIGRvZXMgbm90CisJICogd3JpdGUgaW50byB0aGUgcnggYnVmZmVyIHBvc3RpbmcgcmluZ3MuCisJICovCisJZm9yIChpID0gMDsgaSA8IFRHM19SWF9SSU5HX1NJWkU7IGkrKykgeworCQlzdHJ1Y3QgdGczX3J4X2J1ZmZlcl9kZXNjICpyeGQ7CisKKwkJcnhkID0gJnRwci0+cnhfc3RkW2ldOworCQlyeGQtPmlkeF9sZW4gPSByeF9wa3RfZG1hX3N6IDw8IFJYRF9MRU5fU0hJRlQ7CisJCXJ4ZC0+dHlwZV9mbGFncyA9IChSWERfRkxBR19FTkQgPDwgUlhEX0ZMQUdTX1NISUZUKTsKKwkJcnhkLT5vcGFxdWUgPSAoUlhEX09QQVFVRV9SSU5HX1NURCB8CisJCQkgICAgICAgKGkgPDwgUlhEX09QQVFVRV9JTkRFWF9TSElGVCkpOworCX0KKworCS8qIE5vdyBhbGxvY2F0ZSBmcmVzaCBTS0JzIGZvciBlYWNoIHJ4IHJpbmcuICovCisJZm9yIChpID0gMDsgaSA8IHRwLT5yeF9wZW5kaW5nOyBpKyspIHsKKwkJaWYgKHRnM19hbGxvY19yeF9za2IodG5hcGksIFJYRF9PUEFRVUVfUklOR19TVEQsIC0xLCBpKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkgICAgICAgIiVzOiBVc2luZyBhIHNtYWxsZXIgUlggc3RhbmRhcmQgcmluZywgIgorCQkJICAgICAgICJvbmx5ICVkIG91dCBvZiAlZCBidWZmZXJzIHdlcmUgYWxsb2NhdGVkICIKKwkJCSAgICAgICAic3VjY2Vzc2Z1bGx5LlxuIiwKKwkJCSAgICAgICB0cC0+ZGV2LT5uYW1lLCBpLCB0cC0+cnhfcGVuZGluZyk7CisJCQlpZiAoaSA9PSAwKQorCQkJCWdvdG8gaW5pdGZhaWw7CisJCQl0cC0+cnhfcGVuZGluZyA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19DQVBBQkxFKSkKKwkJZ290byBkb25lOworCisJbWVtc2V0KHRwci0+cnhfam1iLCAwLCBURzNfUlhfSlVNQk9fUklOR19CWVRFUyk7CisKKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFKSB7CisJCWZvciAoaSA9IDA7IGkgPCBURzNfUlhfSlVNQk9fUklOR19TSVpFOyBpKyspIHsKKwkJCXN0cnVjdCB0ZzNfcnhfYnVmZmVyX2Rlc2MgKnJ4ZDsKKworCQkJcnhkID0gJnRwci0+cnhfam1iW2ldLnN0ZDsKKwkJCXJ4ZC0+aWR4X2xlbiA9IFRHM19SWF9KTUJfRE1BX1NaIDw8IFJYRF9MRU5fU0hJRlQ7CisJCQlyeGQtPnR5cGVfZmxhZ3MgPSAoUlhEX0ZMQUdfRU5EIDw8IFJYRF9GTEFHU19TSElGVCkgfAorCQkJCVJYRF9GTEFHX0pVTUJPOworCQkJcnhkLT5vcGFxdWUgPSAoUlhEX09QQVFVRV9SSU5HX0pVTUJPIHwKKwkJCSAgICAgICAoaSA8PCBSWERfT1BBUVVFX0lOREVYX1NISUZUKSk7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgdHAtPnJ4X2p1bWJvX3BlbmRpbmc7IGkrKykgeworCQkJaWYgKHRnM19hbGxvY19yeF9za2IodG5hcGksIFJYRF9PUEFRVUVfUklOR19KVU1CTywKKwkJCQkJICAgICAtMSwgaSkgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJCQkgICAgICAgIiVzOiBVc2luZyBhIHNtYWxsZXIgUlgganVtYm8gcmluZywgIgorCQkJCSAgICAgICAib25seSAlZCBvdXQgb2YgJWQgYnVmZmVycyB3ZXJlICIKKwkJCQkgICAgICAgImFsbG9jYXRlZCBzdWNjZXNzZnVsbHkuXG4iLAorCQkJCSAgICAgICB0cC0+ZGV2LT5uYW1lLCBpLCB0cC0+cnhfanVtYm9fcGVuZGluZyk7CisJCQkJaWYgKGkgPT0gMCkKKwkJCQkJZ290byBpbml0ZmFpbDsKKwkJCQl0cC0+cnhfanVtYm9fcGVuZGluZyA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKK2RvbmU6CisJcmV0dXJuIDA7CisKK2luaXRmYWlsOgorCXRnM19yeF9wcm9kcmluZ19mcmVlKHRwLCB0cHIpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCB0ZzNfcnhfcHJvZHJpbmdfZmluaShzdHJ1Y3QgdGczICp0cCwKKwkJCQkgc3RydWN0IHRnM19yeF9wcm9kcmluZ19zZXQgKnRwcikKK3sKKwlrZnJlZSh0cHItPnJ4X3N0ZF9idWZmZXJzKTsKKwl0cHItPnJ4X3N0ZF9idWZmZXJzID0gTlVMTDsKKwlrZnJlZSh0cHItPnJ4X2ptYl9idWZmZXJzKTsKKwl0cHItPnJ4X2ptYl9idWZmZXJzID0gTlVMTDsKKwlpZiAodHByLT5yeF9zdGQpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudCh0cC0+cGRldiwgVEczX1JYX1JJTkdfQllURVMsCisJCQkJICAgIHRwci0+cnhfc3RkLCB0cHItPnJ4X3N0ZF9tYXBwaW5nKTsKKwkJdHByLT5yeF9zdGQgPSBOVUxMOworCX0KKwlpZiAodHByLT5yeF9qbWIpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudCh0cC0+cGRldiwgVEczX1JYX0pVTUJPX1JJTkdfQllURVMsCisJCQkJICAgIHRwci0+cnhfam1iLCB0cHItPnJ4X2ptYl9tYXBwaW5nKTsKKwkJdHByLT5yeF9qbWIgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCB0ZzNfcnhfcHJvZHJpbmdfaW5pdChzdHJ1Y3QgdGczICp0cCwKKwkJCQlzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCAqdHByKQoreworCXRwci0+cnhfc3RkX2J1ZmZlcnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmluZ19pbmZvKSAqCisJCQkJICAgICAgVEczX1JYX1JJTkdfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cHItPnJ4X3N0ZF9idWZmZXJzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRwci0+cnhfc3RkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19SWF9SSU5HX0JZVEVTLAorCQkJCQkgICAmdHByLT5yeF9zdGRfbWFwcGluZyk7CisJaWYgKCF0cHItPnJ4X3N0ZCkKKwkJZ290byBlcnJfb3V0OworCisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19DQVBBQkxFKSB7CisJCXRwci0+cnhfam1iX2J1ZmZlcnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmluZ19pbmZvKSAqCisJCQkJCSAgICAgIFRHM19SWF9KVU1CT19SSU5HX1NJWkUsCisJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIXRwci0+cnhfam1iX2J1ZmZlcnMpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJdHByLT5yeF9qbWIgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh0cC0+cGRldiwKKwkJCQkJCSAgIFRHM19SWF9KVU1CT19SSU5HX0JZVEVTLAorCQkJCQkJICAgJnRwci0+cnhfam1iX21hcHBpbmcpOworCQlpZiAoIXRwci0+cnhfam1iKQorCQkJZ290byBlcnJfb3V0OworCX0KKworCXJldHVybiAwOworCitlcnJfb3V0OgorCXRnM19yeF9wcm9kcmluZ19maW5pKHRwLCB0cHIpOworCXJldHVybiAtRU5PTUVNOworfQorCiAvKiBGcmVlIHVwIHBlbmRpbmcgcGFja2V0cyBpbiBhbGwgcngvdHggcmluZ3MuCiAgKgogICogVGhlIGNoaXAgaGFzIGJlZW4gc2h1dCBkb3duIGFuZCB0aGUgZHJpdmVyIGRldGFjaGVkIGZyb20KQEAgLTU0NzcsNTUgKzU3OTQsMzcgQEAKICAqLwogc3RhdGljIHZvaWQgdGczX2ZyZWVfcmluZ3Moc3RydWN0IHRnMyAqdHApCiB7Ci0Jc3RydWN0IHJpbmdfaW5mbyAqcnhwOwotCWludCBpOworCWludCBpLCBqOwogCi0JZm9yIChpID0gMDsgaSA8IFRHM19SWF9SSU5HX1NJWkU7IGkrKykgewotCQlyeHAgPSAmdHAtPnJ4X3N0ZF9idWZmZXJzW2ldOworCWZvciAoaiA9IDA7IGogPCB0cC0+aXJxX2NudDsgaisrKSB7CisJCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbal07CiAKLQkJaWYgKHJ4cC0+c2tiID09IE5VTEwpCisJCWlmICghdG5hcGktPnR4X2J1ZmZlcnMpCiAJCQljb250aW51ZTsKLQkJcGNpX3VubWFwX3NpbmdsZSh0cC0+cGRldiwKLQkJCQkgcGNpX3VubWFwX2FkZHIocnhwLCBtYXBwaW5nKSwKLQkJCQkgdHAtPnJ4X3BrdF9idWZfc3ogLSB0cC0+cnhfb2Zmc2V0LAotCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlkZXZfa2ZyZWVfc2tiX2FueShyeHAtPnNrYik7Ci0JCXJ4cC0+c2tiID0gTlVMTDsKLQl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgVEczX1JYX0pVTUJPX1JJTkdfU0laRTsgaSsrKSB7Ci0JCXJ4cCA9ICZ0cC0+cnhfanVtYm9fYnVmZmVyc1tpXTsKKwkJZm9yIChpID0gMDsgaSA8IFRHM19UWF9SSU5HX1NJWkU7ICkgeworCQkJc3RydWN0IHR4X3JpbmdfaW5mbyAqdHhwOworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCQlpZiAocnhwLT5za2IgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlwY2lfdW5tYXBfc2luZ2xlKHRwLT5wZGV2LAotCQkJCSBwY2lfdW5tYXBfYWRkcihyeHAsIG1hcHBpbmcpLAotCQkJCSBSWF9KVU1CT19QS1RfQlVGX1NaIC0gdHAtPnJ4X29mZnNldCwKLQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkocnhwLT5za2IpOwotCQlyeHAtPnNrYiA9IE5VTEw7Ci0JfQorCQkJdHhwID0gJnRuYXBpLT50eF9idWZmZXJzW2ldOworCQkJc2tiID0gdHhwLT5za2I7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVEczX1RYX1JJTkdfU0laRTsgKSB7Ci0JCXN0cnVjdCB0eF9yaW5nX2luZm8gKnR4cDsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJCWlmIChza2IgPT0gTlVMTCkgeworCQkJCWkrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KIAotCQl0eHAgPSAmdHAtPnR4X2J1ZmZlcnNbaV07Ci0JCXNrYiA9IHR4cC0+c2tiOworCQkJc2tiX2RtYV91bm1hcCgmdHAtPnBkZXYtPmRldiwgc2tiLCBETUFfVE9fREVWSUNFKTsKIAotCQlpZiAoc2tiID09IE5VTEwpIHsKLQkJCWkrKzsKLQkJCWNvbnRpbnVlOworCQkJdHhwLT5za2IgPSBOVUxMOworCisJCQlpICs9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQl9Ci0KLQkJc2tiX2RtYV91bm1hcCgmdHAtPnBkZXYtPmRldiwgc2tiLCBETUFfVE9fREVWSUNFKTsKLQotCQl0eHAtPnNrYiA9IE5VTEw7Ci0KLQkJaSArPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMTsKLQotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0KKworCXRnM19yeF9wcm9kcmluZ19mcmVlKHRwLCAmdHAtPnByb2RyaW5nWzBdKTsKIH0KIAogLyogSW5pdGlhbGl6ZSB0eC9yeCByaW5ncyBmb3IgcGFja2V0IHByb2Nlc3NpbmcuCkBAIC01NTM3LDg1ICs1ODM2LDMxIEBACiAgKi8KIHN0YXRpYyBpbnQgdGczX2luaXRfcmluZ3Moc3RydWN0IHRnMyAqdHApCiB7Ci0JdTMyIGk7CisJaW50IGk7CiAKIAkvKiBGcmVlIHVwIGFsbCB0aGUgU0tCcy4gKi8KIAl0ZzNfZnJlZV9yaW5ncyh0cCk7CiAKLQkvKiBaZXJvIG91dCBhbGwgZGVzY3JpcHRvcnMuICovCi0JbWVtc2V0KHRwLT5yeF9zdGQsIDAsIFRHM19SWF9SSU5HX0JZVEVTKTsKLQltZW1zZXQodHAtPnJ4X2p1bWJvLCAwLCBURzNfUlhfSlVNQk9fUklOR19CWVRFUyk7Ci0JbWVtc2V0KHRwLT5yeF9yY2IsIDAsIFRHM19SWF9SQ0JfUklOR19CWVRFUyh0cCkpOwotCW1lbXNldCh0cC0+dHhfcmluZywgMCwgVEczX1RYX1JJTkdfQllURVMpOworCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX2NudDsgaSsrKSB7CisJCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbaV07CiAKLQl0cC0+cnhfcGt0X2J1Zl9zeiA9IFJYX1BLVF9CVUZfU1o7Ci0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpICYmCi0JICAgICh0cC0+ZGV2LT5tdHUgPiBFVEhfREFUQV9MRU4pKQotCQl0cC0+cnhfcGt0X2J1Zl9zeiA9IFJYX0pVTUJPX1BLVF9CVUZfU1o7CisJCXRuYXBpLT5sYXN0X3RhZyA9IDA7CisJCXRuYXBpLT5sYXN0X2lycV90YWcgPSAwOworCQl0bmFwaS0+aHdfc3RhdHVzLT5zdGF0dXMgPSAwOworCQl0bmFwaS0+aHdfc3RhdHVzLT5zdGF0dXNfdGFnID0gMDsKKwkJbWVtc2V0KHRuYXBpLT5od19zdGF0dXMsIDAsIFRHM19IV19TVEFUVVNfU0laRSk7CiAKLQkvKiBJbml0aWFsaXplIGludmFyaWFudHMgb2YgdGhlIHJpbmdzLCB3ZSBvbmx5IHNldCB0aGlzCi0JICogc3R1ZmYgb25jZS4gIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgY2FyZCBkb2VzIG5vdAotCSAqIHdyaXRlIGludG8gdGhlIHJ4IGJ1ZmZlciBwb3N0aW5nIHJpbmdzLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBURzNfUlhfUklOR19TSVpFOyBpKyspIHsKLQkJc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYyAqcnhkOworCQl0bmFwaS0+dHhfcHJvZCA9IDA7CisJCXRuYXBpLT50eF9jb25zID0gMDsKKwkJaWYgKHRuYXBpLT50eF9yaW5nKQorCQkJbWVtc2V0KHRuYXBpLT50eF9yaW5nLCAwLCBURzNfVFhfUklOR19CWVRFUyk7CiAKLQkJcnhkID0gJnRwLT5yeF9zdGRbaV07Ci0JCXJ4ZC0+aWR4X2xlbiA9ICh0cC0+cnhfcGt0X2J1Zl9zeiAtIHRwLT5yeF9vZmZzZXQgLSA2NCkKLQkJCTw8IFJYRF9MRU5fU0hJRlQ7Ci0JCXJ4ZC0+dHlwZV9mbGFncyA9IChSWERfRkxBR19FTkQgPDwgUlhEX0ZMQUdTX1NISUZUKTsKLQkJcnhkLT5vcGFxdWUgPSAoUlhEX09QQVFVRV9SSU5HX1NURCB8Ci0JCQkgICAgICAgKGkgPDwgUlhEX09QQVFVRV9JTkRFWF9TSElGVCkpOworCQl0bmFwaS0+cnhfcmNiX3B0ciA9IDA7CisJCWlmICh0bmFwaS0+cnhfcmNiKQorCQkJbWVtc2V0KHRuYXBpLT5yeF9yY2IsIDAsIFRHM19SWF9SQ0JfUklOR19CWVRFUyh0cCkpOwogCX0KIAotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fUklOR19FTkFCTEUpIHsKLQkJZm9yIChpID0gMDsgaSA8IFRHM19SWF9KVU1CT19SSU5HX1NJWkU7IGkrKykgewotCQkJc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYyAqcnhkOwotCi0JCQlyeGQgPSAmdHAtPnJ4X2p1bWJvW2ldOwotCQkJcnhkLT5pZHhfbGVuID0gKFJYX0pVTUJPX1BLVF9CVUZfU1ogLSB0cC0+cnhfb2Zmc2V0IC0gNjQpCi0JCQkJPDwgUlhEX0xFTl9TSElGVDsKLQkJCXJ4ZC0+dHlwZV9mbGFncyA9IChSWERfRkxBR19FTkQgPDwgUlhEX0ZMQUdTX1NISUZUKSB8Ci0JCQkJUlhEX0ZMQUdfSlVNQk87Ci0JCQlyeGQtPm9wYXF1ZSA9IChSWERfT1BBUVVFX1JJTkdfSlVNQk8gfAotCQkJICAgICAgIChpIDw8IFJYRF9PUEFRVUVfSU5ERVhfU0hJRlQpKTsKLQkJfQotCX0KLQotCS8qIE5vdyBhbGxvY2F0ZSBmcmVzaCBTS0JzIGZvciBlYWNoIHJ4IHJpbmcuICovCi0JZm9yIChpID0gMDsgaSA8IHRwLT5yeF9wZW5kaW5nOyBpKyspIHsKLQkJaWYgKHRnM19hbGxvY19yeF9za2IodHAsIFJYRF9PUEFRVUVfUklOR19TVEQsIC0xLCBpKSA8IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCi0JCQkgICAgICAgIiVzOiBVc2luZyBhIHNtYWxsZXIgUlggc3RhbmRhcmQgcmluZywgIgotCQkJICAgICAgICJvbmx5ICVkIG91dCBvZiAlZCBidWZmZXJzIHdlcmUgYWxsb2NhdGVkICIKLQkJCSAgICAgICAic3VjY2Vzc2Z1bGx5LlxuIiwKLQkJCSAgICAgICB0cC0+ZGV2LT5uYW1lLCBpLCB0cC0+cnhfcGVuZGluZyk7Ci0JCQlpZiAoaSA9PSAwKQotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJdHAtPnJ4X3BlbmRpbmcgPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCB0cC0+cnhfanVtYm9fcGVuZGluZzsgaSsrKSB7Ci0JCQlpZiAodGczX2FsbG9jX3J4X3NrYih0cCwgUlhEX09QQVFVRV9SSU5HX0pVTUJPLAotCQkJCQkgICAgIC0xLCBpKSA8IDApIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAotCQkJCSAgICAgICAiJXM6IFVzaW5nIGEgc21hbGxlciBSWCBqdW1ibyByaW5nLCAiCi0JCQkJICAgICAgICJvbmx5ICVkIG91dCBvZiAlZCBidWZmZXJzIHdlcmUgIgotCQkJCSAgICAgICAiYWxsb2NhdGVkIHN1Y2Nlc3NmdWxseS5cbiIsCi0JCQkJICAgICAgIHRwLT5kZXYtPm5hbWUsIGksIHRwLT5yeF9qdW1ib19wZW5kaW5nKTsKLQkJCQlpZiAoaSA9PSAwKSB7Ci0JCQkJCXRnM19mcmVlX3JpbmdzKHRwKTsKLQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQkJfQotCQkJCXRwLT5yeF9qdW1ib19wZW5kaW5nID0gaTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gdGczX3J4X3Byb2RyaW5nX2FsbG9jKHRwLCAmdHAtPnByb2RyaW5nWzBdKTsKIH0KIAogLyoKQEAgLTU2MjQsMzggKzU4NjksNDIgQEAKICAqLwogc3RhdGljIHZvaWQgdGczX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3QgdGczICp0cCkKIHsKLQlrZnJlZSh0cC0+cnhfc3RkX2J1ZmZlcnMpOwotCXRwLT5yeF9zdGRfYnVmZmVycyA9IE5VTEw7Ci0JaWYgKHRwLT5yeF9zdGQpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudCh0cC0+cGRldiwgVEczX1JYX1JJTkdfQllURVMsCi0JCQkJICAgIHRwLT5yeF9zdGQsIHRwLT5yeF9zdGRfbWFwcGluZyk7Ci0JCXRwLT5yeF9zdGQgPSBOVUxMOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfY250OyBpKyspIHsKKwkJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVtpXTsKKworCQlpZiAodG5hcGktPnR4X3JpbmcpIHsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19UWF9SSU5HX0JZVEVTLAorCQkJCXRuYXBpLT50eF9yaW5nLCB0bmFwaS0+dHhfZGVzY19tYXBwaW5nKTsKKwkJCXRuYXBpLT50eF9yaW5nID0gTlVMTDsKKwkJfQorCisJCWtmcmVlKHRuYXBpLT50eF9idWZmZXJzKTsKKwkJdG5hcGktPnR4X2J1ZmZlcnMgPSBOVUxMOworCisJCWlmICh0bmFwaS0+cnhfcmNiKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wZGV2LCBURzNfUlhfUkNCX1JJTkdfQllURVModHApLAorCQkJCQkgICAgdG5hcGktPnJ4X3JjYiwKKwkJCQkJICAgIHRuYXBpLT5yeF9yY2JfbWFwcGluZyk7CisJCQl0bmFwaS0+cnhfcmNiID0gTlVMTDsKKwkJfQorCisJCWlmICh0bmFwaS0+aHdfc3RhdHVzKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wZGV2LCBURzNfSFdfU1RBVFVTX1NJWkUsCisJCQkJCSAgICB0bmFwaS0+aHdfc3RhdHVzLAorCQkJCQkgICAgdG5hcGktPnN0YXR1c19tYXBwaW5nKTsKKwkJCXRuYXBpLT5od19zdGF0dXMgPSBOVUxMOworCQl9CiAJfQotCWlmICh0cC0+cnhfanVtYm8pIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudCh0cC0+cGRldiwgVEczX1JYX0pVTUJPX1JJTkdfQllURVMsCi0JCQkJICAgIHRwLT5yeF9qdW1ibywgdHAtPnJ4X2p1bWJvX21hcHBpbmcpOwotCQl0cC0+cnhfanVtYm8gPSBOVUxMOwotCX0KLQlpZiAodHAtPnJ4X3JjYikgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wZGV2LCBURzNfUlhfUkNCX1JJTkdfQllURVModHApLAotCQkJCSAgICB0cC0+cnhfcmNiLCB0cC0+cnhfcmNiX21hcHBpbmcpOwotCQl0cC0+cnhfcmNiID0gTlVMTDsKLQl9Ci0JaWYgKHRwLT50eF9yaW5nKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19UWF9SSU5HX0JZVEVTLAotCQkJdHAtPnR4X3JpbmcsIHRwLT50eF9kZXNjX21hcHBpbmcpOwotCQl0cC0+dHhfcmluZyA9IE5VTEw7Ci0JfQotCWlmICh0cC0+aHdfc3RhdHVzKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19IV19TVEFUVVNfU0laRSwKLQkJCQkgICAgdHAtPmh3X3N0YXR1cywgdHAtPnN0YXR1c19tYXBwaW5nKTsKLQkJdHAtPmh3X3N0YXR1cyA9IE5VTEw7Ci0JfQorCiAJaWYgKHRwLT5od19zdGF0cykgewogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wZGV2LCBzaXplb2Yoc3RydWN0IHRnM19od19zdGF0cyksCiAJCQkJICAgIHRwLT5od19zdGF0cywgdHAtPnN0YXRzX21hcHBpbmcpOwogCQl0cC0+aHdfc3RhdHMgPSBOVUxMOwogCX0KKworCXRnM19yeF9wcm9kcmluZ19maW5pKHRwLCAmdHAtPnByb2RyaW5nWzBdKTsKIH0KIAogLyoKQEAgLTU2NjQsNTUgKzU5MTMsODAgQEAKICAqLwogc3RhdGljIGludCB0ZzNfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3QgdGczICp0cCkKIHsKLQl0cC0+cnhfc3RkX2J1ZmZlcnMgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IHJpbmdfaW5mbykgKgotCQkJCSAgICAgIChURzNfUlhfUklOR19TSVpFICsKLQkJCQkgICAgICAgVEczX1JYX0pVTUJPX1JJTkdfU0laRSkpICsKLQkJCQkgICAgIChzaXplb2Yoc3RydWN0IHR4X3JpbmdfaW5mbykgKgotCQkJCSAgICAgIFRHM19UWF9SSU5HX1NJWkUpLAotCQkJCSAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cC0+cnhfc3RkX2J1ZmZlcnMpCisJaW50IGk7CisKKwlpZiAodGczX3J4X3Byb2RyaW5nX2luaXQodHAsICZ0cC0+cHJvZHJpbmdbMF0pKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXRwLT5yeF9qdW1ib19idWZmZXJzID0gJnRwLT5yeF9zdGRfYnVmZmVyc1tURzNfUlhfUklOR19TSVpFXTsKLQl0cC0+dHhfYnVmZmVycyA9IChzdHJ1Y3QgdHhfcmluZ19pbmZvICopCi0JCSZ0cC0+cnhfanVtYm9fYnVmZmVyc1tURzNfUlhfSlVNQk9fUklOR19TSVpFXTsKLQotCXRwLT5yeF9zdGQgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh0cC0+cGRldiwgVEczX1JYX1JJTkdfQllURVMsCi0JCQkJCSAgJnRwLT5yeF9zdGRfbWFwcGluZyk7Ci0JaWYgKCF0cC0+cnhfc3RkKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQl0cC0+cnhfanVtYm8gPSBwY2lfYWxsb2NfY29uc2lzdGVudCh0cC0+cGRldiwgVEczX1JYX0pVTUJPX1JJTkdfQllURVMsCi0JCQkJCSAgICAmdHAtPnJ4X2p1bWJvX21hcHBpbmcpOwotCi0JaWYgKCF0cC0+cnhfanVtYm8pCi0JCWdvdG8gZXJyX291dDsKLQotCXRwLT5yeF9yY2IgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh0cC0+cGRldiwgVEczX1JYX1JDQl9SSU5HX0JZVEVTKHRwKSwKLQkJCQkJICAmdHAtPnJ4X3JjYl9tYXBwaW5nKTsKLQlpZiAoIXRwLT5yeF9yY2IpCi0JCWdvdG8gZXJyX291dDsKLQotCXRwLT50eF9yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19UWF9SSU5HX0JZVEVTLAotCQkJCQkgICAmdHAtPnR4X2Rlc2NfbWFwcGluZyk7Ci0JaWYgKCF0cC0+dHhfcmluZykKLQkJZ290byBlcnJfb3V0OwotCi0JdHAtPmh3X3N0YXR1cyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHRwLT5wZGV2LAotCQkJCQkgICAgIFRHM19IV19TVEFUVVNfU0laRSwKLQkJCQkJICAgICAmdHAtPnN0YXR1c19tYXBwaW5nKTsKLQlpZiAoIXRwLT5od19zdGF0dXMpCi0JCWdvdG8gZXJyX291dDsKLQogCXRwLT5od19zdGF0cyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHRwLT5wZGV2LAogCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCB0ZzNfaHdfc3RhdHMpLAogCQkJCQkgICAgJnRwLT5zdGF0c19tYXBwaW5nKTsKIAlpZiAoIXRwLT5od19zdGF0cykKIAkJZ290byBlcnJfb3V0OwogCi0JbWVtc2V0KHRwLT5od19zdGF0dXMsIDAsIFRHM19IV19TVEFUVVNfU0laRSk7CiAJbWVtc2V0KHRwLT5od19zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCB0ZzNfaHdfc3RhdHMpKTsKIAorCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX2NudDsgaSsrKSB7CisJCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbaV07CisJCXN0cnVjdCB0ZzNfaHdfc3RhdHVzICpzYmxrOworCisJCXRuYXBpLT5od19zdGF0dXMgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh0cC0+cGRldiwKKwkJCQkJCQlURzNfSFdfU1RBVFVTX1NJWkUsCisJCQkJCQkJJnRuYXBpLT5zdGF0dXNfbWFwcGluZyk7CisJCWlmICghdG5hcGktPmh3X3N0YXR1cykKKwkJCWdvdG8gZXJyX291dDsKKworCQltZW1zZXQodG5hcGktPmh3X3N0YXR1cywgMCwgVEczX0hXX1NUQVRVU19TSVpFKTsKKwkJc2JsayA9IHRuYXBpLT5od19zdGF0dXM7CisKKwkJLyoKKwkJICogV2hlbiBSU1MgaXMgZW5hYmxlZCwgdGhlIHN0YXR1cyBibG9jayBmb3JtYXQgY2hhbmdlcworCQkgKiBzbGlnaHRseS4gIFRoZSAicnhfanVtYm9fY29uc3VtZXIiLCAicmVzZXJ2ZWQiLAorCQkgKiBhbmQgInJ4X21pbmlfY29uc3VtZXIiIG1lbWJlcnMgZ2V0IG1hcHBlZCB0byB0aGUKKwkJICogb3RoZXIgdGhyZWUgcnggcmV0dXJuIHJpbmcgcHJvZHVjZXIgaW5kZXhlcy4KKwkJICovCisJCXN3aXRjaCAoaSkgeworCQlkZWZhdWx0OgorCQkJdG5hcGktPnJ4X3JjYl9wcm9kX2lkeCA9ICZzYmxrLT5pZHhbMF0ucnhfcHJvZHVjZXI7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdG5hcGktPnJ4X3JjYl9wcm9kX2lkeCA9ICZzYmxrLT5yeF9qdW1ib19jb25zdW1lcjsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQl0bmFwaS0+cnhfcmNiX3Byb2RfaWR4ID0gJnNibGstPnJlc2VydmVkOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXRuYXBpLT5yeF9yY2JfcHJvZF9pZHggPSAmc2Jsay0+cnhfbWluaV9jb25zdW1lcjsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogSWYgbXVsdGl2ZWN0b3IgUlNTIGlzIGVuYWJsZWQsIHZlY3RvciAwIGRvZXMgbm90IGhhbmRsZQorCQkgKiByeCBvciB0eCBpbnRlcnJ1cHRzLiAgRG9uJ3QgYWxsb2NhdGUgYW55IHJlc291cmNlcyBmb3IgaXQuCisJCSAqLworCQlpZiAoIWkgJiYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1JTUykpCisJCQljb250aW51ZTsKKworCQl0bmFwaS0+cnhfcmNiID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHAtPnBkZXYsCisJCQkJCQkgICAgIFRHM19SWF9SQ0JfUklOR19CWVRFUyh0cCksCisJCQkJCQkgICAgICZ0bmFwaS0+cnhfcmNiX21hcHBpbmcpOworCQlpZiAoIXRuYXBpLT5yeF9yY2IpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJbWVtc2V0KHRuYXBpLT5yeF9yY2IsIDAsIFRHM19SWF9SQ0JfUklOR19CWVRFUyh0cCkpOworCisJCXRuYXBpLT50eF9idWZmZXJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHR4X3JpbmdfaW5mbykgKgorCQkJCQkgICAgVEczX1RYX1JJTkdfU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdG5hcGktPnR4X2J1ZmZlcnMpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJdG5hcGktPnR4X3JpbmcgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh0cC0+cGRldiwKKwkJCQkJCSAgICAgIFRHM19UWF9SSU5HX0JZVEVTLAorCQkJCQkJICAgICAgJnRuYXBpLT50eF9kZXNjX21hcHBpbmcpOworCQlpZiAoIXRuYXBpLT50eF9yaW5nKQorCQkJZ290byBlcnJfb3V0OworCX0KKwogCXJldHVybiAwOwogCiBlcnJfb3V0OgpAQCAtNTgyMyw4ICs2MDk3LDExIEBACiAJZXJyIHw9IHRnM19zdG9wX2Jsb2NrKHRwLCBCVUZNR1JfTU9ERSwgQlVGTUdSX01PREVfRU5BQkxFLCBzaWxlbnQpOwogCWVyciB8PSB0ZzNfc3RvcF9ibG9jayh0cCwgTUVNQVJCX01PREUsIE1FTUFSQl9NT0RFX0VOQUJMRSwgc2lsZW50KTsKIAotCWlmICh0cC0+aHdfc3RhdHVzKQotCQltZW1zZXQodHAtPmh3X3N0YXR1cywgMCwgVEczX0hXX1NUQVRVU19TSVpFKTsKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQ7IGkrKykgeworCQlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpW2ldOworCQlpZiAodG5hcGktPmh3X3N0YXR1cykKKwkJCW1lbXNldCh0bmFwaS0+aHdfc3RhdHVzLCAwLCBURzNfSFdfU1RBVFVTX1NJWkUpOworCX0KIAlpZiAodHAtPmh3X3N0YXRzKQogCQltZW1zZXQodHAtPmh3X3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IHRnM19od19zdGF0cykpOwogCkBAIC02MTExLDcgKzYzODgsNyBAQAogewogCXUzMiB2YWw7CiAJdm9pZCAoKndyaXRlX29wKShzdHJ1Y3QgdGczICosIHUzMiwgdTMyKTsKLQlpbnQgZXJyOworCWludCBpLCBlcnI7CiAKIAl0ZzNfbnZyYW1fbG9jayh0cCk7CiAKQEAgLTYxNTEsMTQgKzY0MjgsMjQgQEAKIAkgKiBzaGFyaW5nIG9yIGlycXBvbGwuCiAJICovCiAJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19DSElQX1JFU0VUVElORzsKLQlpZiAodHAtPmh3X3N0YXR1cykgewotCQl0cC0+aHdfc3RhdHVzLT5zdGF0dXMgPSAwOwotCQl0cC0+aHdfc3RhdHVzLT5zdGF0dXNfdGFnID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQ7IGkrKykgeworCQlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpW2ldOworCQlpZiAodG5hcGktPmh3X3N0YXR1cykgeworCQkJdG5hcGktPmh3X3N0YXR1cy0+c3RhdHVzID0gMDsKKwkJCXRuYXBpLT5od19zdGF0dXMtPnN0YXR1c190YWcgPSAwOworCQl9CisJCXRuYXBpLT5sYXN0X3RhZyA9IDA7CisJCXRuYXBpLT5sYXN0X2lycV90YWcgPSAwOwogCX0KLQl0cC0+bGFzdF90YWcgPSAwOwotCXRwLT5sYXN0X2lycV90YWcgPSAwOwogCXNtcF9tYigpOwotCXN5bmNocm9uaXplX2lycSh0cC0+cGRldi0+aXJxKTsKKworCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX2NudDsgaSsrKQorCQlzeW5jaHJvbml6ZV9pcnEodHAtPm5hcGlbaV0uaXJxX3ZlYyk7CisKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwKSB7CisJCXZhbCA9IHRyMzIoVEczX1BDSUVfTE5LQ1RMKSAmIH5URzNfUENJRV9MTktDVExfTDFfUExMX1BEX0VOOworCQl0dzMyKFRHM19QQ0lFX0xOS0NUTCwgdmFsIHwgVEczX1BDSUVfTE5LQ1RMX0wxX1BMTF9QRF9ESVMpOworCX0KIAogCS8qIGRvIHRoZSByZXNldCAqLwogCXZhbCA9IEdSQ19NSVNDX0NGR19DT1JFQ0xLX1JFU0VUOwpAQCAtNjIxMiw2ICs2NDk5LDggQEAKIAl1ZGVsYXkoMTIwKTsKIAogCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykgJiYgdHAtPnBjaWVfY2FwKSB7CisJCXUxNiB2YWwxNjsKKwogCQlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3NTBfQTApIHsKIAkJCWludCBpOwogCQkJdTMyIGNmZ192YWw7CkBAIC02MjI1LDEyICs2NTE0LDIyIEBACiAJCQkJCSAgICAgICBjZmdfdmFsIHwgKDEgPDwgMTUpKTsKIAkJfQogCi0JCS8qIFNldCBQQ0lFIG1heCBwYXlsb2FkIHNpemUgdG8gMTI4IGJ5dGVzIGFuZAotCQkgKiBjbGVhciB0aGUgIm5vIHNub29wIiBhbmQgInJlbGF4ZWQgb3JkZXJpbmciIGJpdHMuCisJCS8qIENsZWFyIHRoZSAibm8gc25vb3AiIGFuZCAicmVsYXhlZCBvcmRlcmluZyIgYml0cy4gKi8KKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQodHAtPnBkZXYsCisJCQkJICAgICB0cC0+cGNpZV9jYXAgKyBQQ0lfRVhQX0RFVkNUTCwKKwkJCQkgICAgICZ2YWwxNik7CisJCXZhbDE2ICY9IH4oUENJX0VYUF9ERVZDVExfUkVMQVhfRU4gfAorCQkJICAgUENJX0VYUF9ERVZDVExfTk9TTk9PUF9FTik7CisJCS8qCisJCSAqIE9sZGVyIFBDSWUgZGV2aWNlcyBvbmx5IHN1cHBvcnQgdGhlIDEyOCBieXRlCisJCSAqIE1QUyBzZXR0aW5nLiAgRW5mb3JjZSB0aGUgcmVzdHJpY3Rpb24uCiAJCSAqLworCQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfQ1BNVV9QUkVTRU5UKSB8fAorCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0KSkKKwkJCXZhbDE2ICY9IH5QQ0lfRVhQX0RFVkNUTF9QQVlMT0FEOwogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodHAtPnBkZXYsCiAJCQkJICAgICAgdHAtPnBjaWVfY2FwICsgUENJX0VYUF9ERVZDVEwsCi0JCQkJICAgICAgMCk7CisJCQkJICAgICAgdmFsMTYpOwogCiAJCXBjaWVfc2V0X3JlYWRycSh0cC0+cGRldiwgNDA5Nik7CiAKQEAgLTYyODgsMTYgKzY1ODcsMTggQEAKIAkJdHczMl9mKE1BQ19NT0RFLCAwKTsKIAl1ZGVsYXkoNDApOwogCi0JdGczX21kaW9fc3RhcnQodHApOwotCiAJdGczX2FwZV91bmxvY2sodHAsIFRHM19BUEVfTE9DS19HUkMpOwogCiAJZXJyID0gdGczX3BvbGxfZncodHApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwl0ZzNfbWRpb19zdGFydCh0cCk7CisKIAlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpICYmCi0JICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzUwX0EwKSB7CisJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzUwX0EwICYmCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg1ICYmCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3KSB7CiAJCXZhbCA9IHRyMzIoMHg3YzAwKTsKIAogCQl0dzMyKDB4N2MwMCwgdmFsIHwgKDEgPDwgMjUpKTsKQEAgLTY2NDcsMjQgKzY5NDgsMTc1IEBACiBzdGF0aWMgdm9pZCBfX3RnM19zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB2b2lkIF9fdGczX3NldF9jb2FsZXNjZShzdHJ1Y3QgdGczICp0cCwgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQogewotCXR3MzIoSE9TVENDX1JYQ09MX1RJQ0tTLCBlYy0+cnhfY29hbGVzY2VfdXNlY3MpOwotCXR3MzIoSE9TVENDX1RYQ09MX1RJQ0tTLCBlYy0+dHhfY29hbGVzY2VfdXNlY3MpOwotCXR3MzIoSE9TVENDX1JYTUFYX0ZSQU1FUywgZWMtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzKTsKLQl0dzMyKEhPU1RDQ19UWE1BWF9GUkFNRVMsIGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyk7Ci0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKSB7Ci0JCXR3MzIoSE9TVENDX1JYQ09BTF9USUNLX0lOVCwgZWMtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSk7Ci0JCXR3MzIoSE9TVENDX1RYQ09BTF9USUNLX0lOVCwgZWMtPnR4X2NvYWxlc2NlX3VzZWNzX2lycSk7CisJaW50IGk7CisKKwlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSVgpKSB7CisJCXR3MzIoSE9TVENDX1RYQ09MX1RJQ0tTLCBlYy0+dHhfY29hbGVzY2VfdXNlY3MpOworCQl0dzMyKEhPU1RDQ19UWE1BWF9GUkFNRVMsIGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyk7CisJCXR3MzIoSE9TVENDX1RYQ09BTF9NQVhGX0lOVCwgZWMtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSk7CisKKwkJdHczMihIT1NUQ0NfUlhDT0xfVElDS1MsIGVjLT5yeF9jb2FsZXNjZV91c2Vjcyk7CisJCXR3MzIoSE9TVENDX1JYTUFYX0ZSQU1FUywgZWMtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzKTsKKwkJdHczMihIT1NUQ0NfUlhDT0FMX01BWEZfSU5ULCBlYy0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxKTsKKwl9IGVsc2UgeworCQl0dzMyKEhPU1RDQ19UWENPTF9USUNLUywgMCk7CisJCXR3MzIoSE9TVENDX1RYTUFYX0ZSQU1FUywgMCk7CisJCXR3MzIoSE9TVENDX1RYQ09BTF9NQVhGX0lOVCwgMCk7CisKKwkJdHczMihIT1NUQ0NfUlhDT0xfVElDS1MsIDApOworCQl0dzMyKEhPU1RDQ19SWE1BWF9GUkFNRVMsIDApOworCQl0dzMyKEhPU1RDQ19SWENPQUxfTUFYRl9JTlQsIDApOwogCX0KLQl0dzMyKEhPU1RDQ19SWENPQUxfTUFYRl9JTlQsIGVjLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEpOwotCXR3MzIoSE9TVENDX1RYQ09BTF9NQVhGX0lOVCwgZWMtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSk7CisKIAlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpIHsKIAkJdTMyIHZhbCA9IGVjLT5zdGF0c19ibG9ja19jb2FsZXNjZV91c2VjczsKIAorCQl0dzMyKEhPU1RDQ19SWENPQUxfVElDS19JTlQsIGVjLT5yeF9jb2FsZXNjZV91c2Vjc19pcnEpOworCQl0dzMyKEhPU1RDQ19UWENPQUxfVElDS19JTlQsIGVjLT50eF9jb2FsZXNjZV91c2Vjc19pcnEpOworCiAJCWlmICghbmV0aWZfY2Fycmllcl9vayh0cC0+ZGV2KSkKIAkJCXZhbCA9IDA7CiAKIAkJdHczMihIT1NUQ0NfU1RBVF9DT0FMX1RJQ0tTLCB2YWwpOwogCX0KKworCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX2NudCAtIDE7IGkrKykgeworCQl1MzIgcmVnOworCisJCXJlZyA9IEhPU1RDQ19SWENPTF9USUNLU19WRUMxICsgaSAqIDB4MTg7CisJCXR3MzIocmVnLCBlYy0+cnhfY29hbGVzY2VfdXNlY3MpOworCQlyZWcgPSBIT1NUQ0NfVFhDT0xfVElDS1NfVkVDMSArIGkgKiAweDE4OworCQl0dzMyKHJlZywgZWMtPnR4X2NvYWxlc2NlX3VzZWNzKTsKKwkJcmVnID0gSE9TVENDX1JYTUFYX0ZSQU1FU19WRUMxICsgaSAqIDB4MTg7CisJCXR3MzIocmVnLCBlYy0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMpOworCQlyZWcgPSBIT1NUQ0NfVFhNQVhfRlJBTUVTX1ZFQzEgKyBpICogMHgxODsKKwkJdHczMihyZWcsIGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyk7CisJCXJlZyA9IEhPU1RDQ19SWENPQUxfTUFYRl9JTlRfVkVDMSArIGkgKiAweDE4OworCQl0dzMyKHJlZywgZWMtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSk7CisJCXJlZyA9IEhPU1RDQ19UWENPQUxfTUFYRl9JTlRfVkVDMSArIGkgKiAweDE4OworCQl0dzMyKHJlZywgZWMtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSk7CisJfQorCisJZm9yICg7IGkgPCB0cC0+aXJxX21heCAtIDE7IGkrKykgeworCQl0dzMyKEhPU1RDQ19SWENPTF9USUNLU19WRUMxICsgaSAqIDB4MTgsIDApOworCQl0dzMyKEhPU1RDQ19UWENPTF9USUNLU19WRUMxICsgaSAqIDB4MTgsIDApOworCQl0dzMyKEhPU1RDQ19SWE1BWF9GUkFNRVNfVkVDMSArIGkgKiAweDE4LCAwKTsKKwkJdHczMihIT1NUQ0NfVFhNQVhfRlJBTUVTX1ZFQzEgKyBpICogMHgxOCwgMCk7CisJCXR3MzIoSE9TVENDX1JYQ09BTF9NQVhGX0lOVF9WRUMxICsgaSAqIDB4MTgsIDApOworCQl0dzMyKEhPU1RDQ19UWENPQUxfTUFYRl9JTlRfVkVDMSArIGkgKiAweDE4LCAwKTsKKwl9Cit9CisKKy8qIHRwLT5sb2NrIGlzIGhlbGQuICovCitzdGF0aWMgdm9pZCB0ZzNfcmluZ3NfcmVzZXQoc3RydWN0IHRnMyAqdHApCit7CisJaW50IGk7CisJdTMyIHN0YmxrLCB0eHJjYiwgcnhyY2IsIGxpbWl0OworCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbMF07CisKKwkvKiBEaXNhYmxlIGFsbCB0cmFuc21pdCByaW5ncyBidXQgdGhlIGZpcnN0LiAqLworCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKKwkJbGltaXQgPSBOSUNfU1JBTV9TRU5EX1JDQiArIFRHM19CRElORk9fU0laRSAqIDE2OworCWVsc2UKKwkJbGltaXQgPSBOSUNfU1JBTV9TRU5EX1JDQiArIFRHM19CRElORk9fU0laRTsKKworCWZvciAodHhyY2IgPSBOSUNfU1JBTV9TRU5EX1JDQiArIFRHM19CRElORk9fU0laRTsKKwkgICAgIHR4cmNiIDwgbGltaXQ7IHR4cmNiICs9IFRHM19CRElORk9fU0laRSkKKwkJdGczX3dyaXRlX21lbSh0cCwgdHhyY2IgKyBURzNfQkRJTkZPX01BWExFTl9GTEFHUywKKwkJCSAgICAgIEJESU5GT19GTEFHU19ESVNBQkxFRCk7CisKKworCS8qIERpc2FibGUgYWxsIHJlY2VpdmUgcmV0dXJuIHJpbmdzIGJ1dCB0aGUgZmlyc3QuICovCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3KQorCQlsaW1pdCA9IE5JQ19TUkFNX1JDVl9SRVRfUkNCICsgVEczX0JESU5GT19TSVpFICogMTc7CisJZWxzZSBpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCisJCWxpbWl0ID0gTklDX1NSQU1fUkNWX1JFVF9SQ0IgKyBURzNfQkRJTkZPX1NJWkUgKiAxNjsKKwllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSkKKwkJbGltaXQgPSBOSUNfU1JBTV9SQ1ZfUkVUX1JDQiArIFRHM19CRElORk9fU0laRSAqIDQ7CisJZWxzZQorCQlsaW1pdCA9IE5JQ19TUkFNX1JDVl9SRVRfUkNCICsgVEczX0JESU5GT19TSVpFOworCisJZm9yIChyeHJjYiA9IE5JQ19TUkFNX1JDVl9SRVRfUkNCICsgVEczX0JESU5GT19TSVpFOworCSAgICAgcnhyY2IgPCBsaW1pdDsgcnhyY2IgKz0gVEczX0JESU5GT19TSVpFKQorCQl0ZzNfd3JpdGVfbWVtKHRwLCByeHJjYiArIFRHM19CRElORk9fTUFYTEVOX0ZMQUdTLAorCQkJICAgICAgQkRJTkZPX0ZMQUdTX0RJU0FCTEVEKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCXR3MzJfbWFpbGJveF9mKHRwLT5uYXBpWzBdLmludF9tYm94LCAxKTsKKworCS8qIFplcm8gbWFpbGJveCByZWdpc3RlcnMuICovCisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TVVBQT1JUX01TSVgpIHsKKwkJZm9yIChpID0gMTsgaSA8IFRHM19JUlFfTUFYX1ZFQ1M7IGkrKykgeworCQkJdHAtPm5hcGlbaV0udHhfcHJvZCA9IDA7CisJCQl0cC0+bmFwaVtpXS50eF9jb25zID0gMDsKKwkJCXR3MzJfbWFpbGJveCh0cC0+bmFwaVtpXS5wcm9kbWJveCwgMCk7CisJCQl0dzMyX3J4X21ib3godHAtPm5hcGlbaV0uY29uc21ib3gsIDApOworCQkJdHczMl9tYWlsYm94X2YodHAtPm5hcGlbaV0uaW50X21ib3gsIDEpOworCQl9CisJfSBlbHNlIHsKKwkJdHAtPm5hcGlbMF0udHhfcHJvZCA9IDA7CisJCXRwLT5uYXBpWzBdLnR4X2NvbnMgPSAwOworCQl0dzMyX21haWxib3godHAtPm5hcGlbMF0ucHJvZG1ib3gsIDApOworCQl0dzMyX3J4X21ib3godHAtPm5hcGlbMF0uY29uc21ib3gsIDApOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUgTklDLWJhc2VkIHNlbmQgQkQgcmluZ3MgYXJlIGRpc2FibGVkLiAqLworCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkgeworCQl1MzIgbWJveCA9IE1BSUxCT1hfU05ETklDX1BST0RfSURYXzAgKyBURzNfNjRCSVRfUkVHX0xPVzsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCQl0dzMyX3R4X21ib3gobWJveCArIGkgKiA4LCAwKTsKKwl9CisKKwl0eHJjYiA9IE5JQ19TUkFNX1NFTkRfUkNCOworCXJ4cmNiID0gTklDX1NSQU1fUkNWX1JFVF9SQ0I7CisKKwkvKiBDbGVhciBzdGF0dXMgYmxvY2sgaW4gcmFtLiAqLworCW1lbXNldCh0bmFwaS0+aHdfc3RhdHVzLCAwLCBURzNfSFdfU1RBVFVTX1NJWkUpOworCisJLyogU2V0IHN0YXR1cyBibG9jayBETUEgYWRkcmVzcyAqLworCXR3MzIoSE9TVENDX1NUQVRVU19CTEtfSE9TVF9BRERSICsgVEczXzY0QklUX1JFR19ISUdILAorCSAgICAgKCh1NjQpIHRuYXBpLT5zdGF0dXNfbWFwcGluZyA+PiAzMikpOworCXR3MzIoSE9TVENDX1NUQVRVU19CTEtfSE9TVF9BRERSICsgVEczXzY0QklUX1JFR19MT1csCisJICAgICAoKHU2NCkgdG5hcGktPnN0YXR1c19tYXBwaW5nICYgMHhmZmZmZmZmZikpOworCisJaWYgKHRuYXBpLT50eF9yaW5nKSB7CisJCXRnM19zZXRfYmRpbmZvKHRwLCB0eHJjYiwgdG5hcGktPnR4X2Rlc2NfbWFwcGluZywKKwkJCSAgICAgICAoVEczX1RYX1JJTkdfU0laRSA8PAorCQkJCUJESU5GT19GTEFHU19NQVhMRU5fU0hJRlQpLAorCQkJICAgICAgIE5JQ19TUkFNX1RYX0JVRkZFUl9ERVNDKTsKKwkJdHhyY2IgKz0gVEczX0JESU5GT19TSVpFOworCX0KKworCWlmICh0bmFwaS0+cnhfcmNiKSB7CisJCXRnM19zZXRfYmRpbmZvKHRwLCByeHJjYiwgdG5hcGktPnJ4X3JjYl9tYXBwaW5nLAorCQkJICAgICAgIChURzNfUlhfUkNCX1JJTkdfU0laRSh0cCkgPDwKKwkJCQlCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUKSwgMCk7CisJCXJ4cmNiICs9IFRHM19CRElORk9fU0laRTsKKwl9CisKKwlzdGJsayA9IEhPU1RDQ19TVEFUQkxDS19SSU5HMTsKKworCWZvciAoaSA9IDEsIHRuYXBpKys7IGkgPCB0cC0+aXJxX2NudDsgaSsrLCB0bmFwaSsrKSB7CisJCXU2NCBtYXBwaW5nID0gKHU2NCl0bmFwaS0+c3RhdHVzX21hcHBpbmc7CisJCXR3MzIoc3RibGsgKyBURzNfNjRCSVRfUkVHX0hJR0gsIG1hcHBpbmcgPj4gMzIpOworCQl0dzMyKHN0YmxrICsgVEczXzY0QklUX1JFR19MT1csIG1hcHBpbmcgJiAweGZmZmZmZmZmKTsKKworCQkvKiBDbGVhciBzdGF0dXMgYmxvY2sgaW4gcmFtLiAqLworCQltZW1zZXQodG5hcGktPmh3X3N0YXR1cywgMCwgVEczX0hXX1NUQVRVU19TSVpFKTsKKworCQl0ZzNfc2V0X2JkaW5mbyh0cCwgdHhyY2IsIHRuYXBpLT50eF9kZXNjX21hcHBpbmcsCisJCQkgICAgICAgKFRHM19UWF9SSU5HX1NJWkUgPDwKKwkJCQlCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUKSwKKwkJCSAgICAgICBOSUNfU1JBTV9UWF9CVUZGRVJfREVTQyk7CisKKwkJdGczX3NldF9iZGluZm8odHAsIHJ4cmNiLCB0bmFwaS0+cnhfcmNiX21hcHBpbmcsCisJCQkgICAgICAgKFRHM19SWF9SQ0JfUklOR19TSVpFKHRwKSA8PAorCQkJCUJESU5GT19GTEFHU19NQVhMRU5fU0hJRlQpLCAwKTsKKworCQlzdGJsayArPSA4OworCQl0eHJjYiArPSBURzNfQkRJTkZPX1NJWkU7CisJCXJ4cmNiICs9IFRHM19CRElORk9fU0laRTsKKwl9CiB9CiAKIC8qIHRwLT5sb2NrIGlzIGhlbGQuICovCkBAIC02NjcyLDYgKzcxMjQsNyBAQAogewogCXUzMiB2YWwsIHJkbWFjX21vZGU7CiAJaW50IGksIGVyciwgbGltaXQ7CisJc3RydWN0IHRnM19yeF9wcm9kcmluZ19zZXQgKnRwciA9ICZ0cC0+cHJvZHJpbmdbMF07CiAKIAl0ZzNfZGlzYWJsZV9pbnRzKHRwKTsKIApAQCAtNjcxOSw2ICs3MTcyLDIwIEBACiAJCXZhbCB8PSBQQ0lFX1BXUl9NR01UX0VYVF9BU1BNX1RNUl9FTiB8CiAJCSAgICAgICBQQ0lFX1BXUl9NR01UX0wxX1RIUkVTSF80TVM7CiAJCXR3MzIoUENJRV9QV1JfTUdNVF9USFJFU0gsIHZhbCk7CisKKwkJdmFsID0gdHIzMihURzNfUENJRV9FSURMRV9ERUxBWSkgJiB+VEczX1BDSUVfRUlETEVfREVMQVlfTUFTSzsKKwkJdHczMihURzNfUENJRV9FSURMRV9ERUxBWSwgdmFsIHwgVEczX1BDSUVfRUlETEVfREVMQVlfMTNfQ0xLUyk7CisKKwkJdHczMihURzNfQ09SUl9FUlJfU1RBVCwgVEczX0NPUlJfRVJSX1NUQVRfQ0xFQVIpOworCX0KKworCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1RPR0dMRV8xMF8xMDBfTDFQTExQRCkgeworCQl2YWwgPSB0cjMyKFRHM19QQ0lFX0xOS0NUTCk7CisJCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0NMS1JFUV9CVUcpCisJCQl2YWwgfD0gVEczX1BDSUVfTE5LQ1RMX0wxX1BMTF9QRF9ESVM7CisJCWVsc2UKKwkJCXZhbCAmPSB+VEczX1BDSUVfTE5LQ1RMX0wxX1BMTF9QRF9ESVM7CisJCXR3MzIoVEczX1BDSUVfTE5LQ1RMLCB2YWwpOwogCX0KIAogCS8qIFRoaXMgd29ya3MgYXJvdW5kIGFuIGlzc3VlIHdpdGggQXRobG9uIGNoaXBzZXRzIG9uCkBAIC02NzY2LDcgKzcyMzMsOCBAQAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg0ICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzYxKSB7CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzYxICYmCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3KSB7CiAJCS8qIFRoaXMgdmFsdWUgaXMgZGV0ZXJtaW5lZCBkdXJpbmcgdGhlIHByb2JlIHRpbWUgRE1BCiAJCSAqIGVuZ2luZSB0ZXN0LCB0ZzNfdGVzdF9kbWEuCiAJCSAqLwpAQCAtNjg4NiwzNSArNzM1NCwzMyBAQAogCSAqIGNvbmZpZ3VyYWJsZS4KIAkgKi8KIAl0dzMyKFJDVkRCRElfU1REX0JEICsgVEczX0JESU5GT19IT1NUX0FERFIgKyBURzNfNjRCSVRfUkVHX0hJR0gsCi0JICAgICAoKHU2NCkgdHAtPnJ4X3N0ZF9tYXBwaW5nID4+IDMyKSk7CisJICAgICAoKHU2NCkgdHByLT5yeF9zdGRfbWFwcGluZyA+PiAzMikpOwogCXR3MzIoUkNWREJESV9TVERfQkQgKyBURzNfQkRJTkZPX0hPU1RfQUREUiArIFRHM182NEJJVF9SRUdfTE9XLAotCSAgICAgKCh1NjQpIHRwLT5yeF9zdGRfbWFwcGluZyAmIDB4ZmZmZmZmZmYpKTsKKwkgICAgICgodTY0KSB0cHItPnJ4X3N0ZF9tYXBwaW5nICYgMHhmZmZmZmZmZikpOwogCXR3MzIoUkNWREJESV9TVERfQkQgKyBURzNfQkRJTkZPX05JQ19BRERSLAogCSAgICAgTklDX1NSQU1fUlhfQlVGRkVSX0RFU0MpOwogCi0JLyogRG9uJ3QgZXZlbiB0cnkgdG8gcHJvZ3JhbSB0aGUgSlVNQk8vTUlOSSBidWZmZXIgZGVzY3JpcHRvcgotCSAqIGNvbmZpZ3Mgb24gNTcwNS4KLQkgKi8KLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHsKLQkJdHczMihSQ1ZEQkRJX1NURF9CRCArIFRHM19CRElORk9fTUFYTEVOX0ZMQUdTLAotCQkgICAgIFJYX1NURF9NQVhfU0laRV81NzA1IDw8IEJESU5GT19GTEFHU19NQVhMRU5fU0hJRlQpOwotCX0gZWxzZSB7Ci0JCXR3MzIoUkNWREJESV9TVERfQkQgKyBURzNfQkRJTkZPX01BWExFTl9GTEFHUywKLQkJICAgICBSWF9TVERfTUFYX1NJWkUgPDwgQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVCk7Ci0KKwkvKiBEaXNhYmxlIHRoZSBtaW5pIHJpbmcgKi8KKwlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCiAJCXR3MzIoUkNWREJESV9NSU5JX0JEICsgVEczX0JESU5GT19NQVhMRU5fRkxBR1MsCiAJCSAgICAgQkRJTkZPX0ZMQUdTX0RJU0FCTEVEKTsKIAorCS8qIFByb2dyYW0gdGhlIGp1bWJvIGJ1ZmZlciBkZXNjcmlwdG9yIHJpbmcgY29udHJvbAorCSAqIGJsb2NrcyBvbiB0aG9zZSBkZXZpY2VzIHRoYXQgaGF2ZSB0aGVtLgorCSAqLworCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX0NBUEFCTEUpICYmCisJICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkgewogCQkvKiBTZXR1cCByZXBsZW5pc2ggdGhyZXNob2xkLiAqLwogCQl0dzMyKFJDVkJESV9KVU1CT19USFJFU0gsIHRwLT5yeF9qdW1ib19wZW5kaW5nIC8gOCk7CiAKIAkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRSkgewogCQkJdHczMihSQ1ZEQkRJX0pVTUJPX0JEICsgVEczX0JESU5GT19IT1NUX0FERFIgKyBURzNfNjRCSVRfUkVHX0hJR0gsCi0JCQkgICAgICgodTY0KSB0cC0+cnhfanVtYm9fbWFwcGluZyA+PiAzMikpOworCQkJICAgICAoKHU2NCkgdHByLT5yeF9qbWJfbWFwcGluZyA+PiAzMikpOwogCQkJdHczMihSQ1ZEQkRJX0pVTUJPX0JEICsgVEczX0JESU5GT19IT1NUX0FERFIgKyBURzNfNjRCSVRfUkVHX0xPVywKLQkJCSAgICAgKCh1NjQpIHRwLT5yeF9qdW1ib19tYXBwaW5nICYgMHhmZmZmZmZmZikpOworCQkJICAgICAoKHU2NCkgdHByLT5yeF9qbWJfbWFwcGluZyAmIDB4ZmZmZmZmZmYpKTsKIAkJCXR3MzIoUkNWREJESV9KVU1CT19CRCArIFRHM19CRElORk9fTUFYTEVOX0ZMQUdTLAotCQkJICAgICBSWF9KVU1CT19NQVhfU0laRSA8PCBCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUKTsKKwkJCSAgICAgKFJYX0pVTUJPX01BWF9TSVpFIDw8IEJESU5GT19GTEFHU19NQVhMRU5fU0hJRlQpIHwKKwkJCSAgICAgQkRJTkZPX0ZMQUdTX1VTRV9FWFRfUkVDVik7CiAJCQl0dzMyKFJDVkRCRElfSlVNQk9fQkQgKyBURzNfQkRJTkZPX05JQ19BRERSLAogCQkJICAgICBOSUNfU1JBTV9SWF9KVU1CT19CVUZGRVJfREVTQyk7CiAJCX0gZWxzZSB7CkBAIC02OTIyLDU3ICs3Mzg4LDMxIEBACiAJCQkgICAgIEJESU5GT19GTEFHU19ESVNBQkxFRCk7CiAJCX0KIAotCX0KKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3KQorCQkJdmFsID0gKFJYX1NURF9NQVhfU0laRV81NzA1IDw8IEJESU5GT19GTEFHU19NQVhMRU5fU0hJRlQpIHwKKwkJCSAgICAgIChSWF9TVERfTUFYX1NJWkUgPDwgMik7CisJCWVsc2UKKwkJCXZhbCA9IFJYX1NURF9NQVhfU0laRSA8PCBCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUOworCX0gZWxzZQorCQl2YWwgPSBSWF9TVERfTUFYX1NJWkVfNTcwNSA8PCBCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUOwogCi0JLyogVGhlcmUgaXMgb25seSBvbmUgc2VuZCByaW5nIG9uIDU3MDUvNTc1MCwgbm8gbmVlZCB0byBleHBsaWNpdGx5Ci0JICogZGlzYWJsZSB0aGUgb3RoZXJzLgotCSAqLwotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkgewotCQkvKiBDbGVhciBvdXQgc2VuZCBSQ0IgcmluZyBpbiBTUkFNLiAqLwotCQlmb3IgKGkgPSBOSUNfU1JBTV9TRU5EX1JDQjsgaSA8IE5JQ19TUkFNX1JDVl9SRVRfUkNCOyBpICs9IFRHM19CRElORk9fU0laRSkKLQkJCXRnM193cml0ZV9tZW0odHAsIGkgKyBURzNfQkRJTkZPX01BWExFTl9GTEFHUywKLQkJCQkgICAgICBCRElORk9fRkxBR1NfRElTQUJMRUQpOwotCX0KKwl0dzMyKFJDVkRCRElfU1REX0JEICsgVEczX0JESU5GT19NQVhMRU5fRkxBR1MsIHZhbCk7CiAKLQl0cC0+dHhfcHJvZCA9IDA7Ci0JdHAtPnR4X2NvbnMgPSAwOwotCXR3MzJfbWFpbGJveChNQUlMQk9YX1NOREhPU1RfUFJPRF9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XLCAwKTsKLQl0dzMyX3R4X21ib3goTUFJTEJPWF9TTkROSUNfUFJPRF9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XLCAwKTsKLQotCXRnM19zZXRfYmRpbmZvKHRwLCBOSUNfU1JBTV9TRU5EX1JDQiwKLQkJICAgICAgIHRwLT50eF9kZXNjX21hcHBpbmcsCi0JCSAgICAgICAoVEczX1RYX1JJTkdfU0laRSA8PAotCQkJQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVCksCi0JCSAgICAgICBOSUNfU1JBTV9UWF9CVUZGRVJfREVTQyk7Ci0KLQkvKiBUaGVyZSBpcyBvbmx5IG9uZSByZWNlaXZlIHJldHVybiByaW5nIG9uIDU3MDUvNTc1MCwgbm8gbmVlZAotCSAqIHRvIGV4cGxpY2l0bHkgZGlzYWJsZSB0aGUgb3RoZXJzLgotCSAqLwotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkgewotCQlmb3IgKGkgPSBOSUNfU1JBTV9SQ1ZfUkVUX1JDQjsgaSA8IE5JQ19TUkFNX1NUQVRTX0JMSzsKLQkJICAgICBpICs9IFRHM19CRElORk9fU0laRSkgewotCQkJdGczX3dyaXRlX21lbSh0cCwgaSArIFRHM19CRElORk9fTUFYTEVOX0ZMQUdTLAotCQkJCSAgICAgIEJESU5GT19GTEFHU19ESVNBQkxFRCk7Ci0JCX0KLQl9Ci0KLQl0cC0+cnhfcmNiX3B0ciA9IDA7Ci0JdHczMl9yeF9tYm94KE1BSUxCT1hfUkNWUkVUX0NPTl9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XLCAwKTsKLQotCXRnM19zZXRfYmRpbmZvKHRwLCBOSUNfU1JBTV9SQ1ZfUkVUX1JDQiwKLQkJICAgICAgIHRwLT5yeF9yY2JfbWFwcGluZywKLQkJICAgICAgIChURzNfUlhfUkNCX1JJTkdfU0laRSh0cCkgPDwKLQkJCUJESU5GT19GTEFHU19NQVhMRU5fU0hJRlQpLAotCQkgICAgICAgMCk7Ci0KLQl0cC0+cnhfc3RkX3B0ciA9IHRwLT5yeF9wZW5kaW5nOworCXRwci0+cnhfc3RkX3B0ciA9IHRwLT5yeF9wZW5kaW5nOwogCXR3MzJfcnhfbWJveChNQUlMQk9YX1JDVl9TVERfUFJPRF9JRFggKyBURzNfNjRCSVRfUkVHX0xPVywKLQkJICAgICB0cC0+cnhfc3RkX3B0cik7CisJCSAgICAgdHByLT5yeF9zdGRfcHRyKTsKIAotCXRwLT5yeF9qdW1ib19wdHIgPSAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFKSA/Ci0JCQkJCQl0cC0+cnhfanVtYm9fcGVuZGluZyA6IDA7CisJdHByLT5yeF9qbWJfcHRyID0gKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRSkgPworCQkJICB0cC0+cnhfanVtYm9fcGVuZGluZyA6IDA7CiAJdHczMl9yeF9tYm94KE1BSUxCT1hfUkNWX0pVTUJPX1BST0RfSURYICsgVEczXzY0QklUX1JFR19MT1csCi0JCSAgICAgdHAtPnJ4X2p1bWJvX3B0cik7CisJCSAgICAgdHByLT5yeF9qbWJfcHRyKTsKKworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykgeworCQl0dzMyKFNURF9SRVBMRU5JU0hfTFdNLCAzMik7CisJCXR3MzIoSk1CX1JFUExFTklTSF9MV00sIDE2KTsKKwl9CisKKwl0ZzNfcmluZ3NfcmVzZXQodHApOwogCiAJLyogSW5pdGlhbGl6ZSBNQUMgYWRkcmVzcyBhbmQgYmFja29mZiBzZWVkLiAqLwogCV9fdGczX3NldF9tYWNfYWRkcih0cCwgMCk7CkBAIC03MDYxLDEyICs3NTAxLDYgQEAKIAogCV9fdGczX3NldF9jb2FsZXNjZSh0cCwgJnRwLT5jb2FsKTsKIAotCS8qIHNldCBzdGF0dXMgYmxvY2sgRE1BIGFkZHJlc3MgKi8KLQl0dzMyKEhPU1RDQ19TVEFUVVNfQkxLX0hPU1RfQUREUiArIFRHM182NEJJVF9SRUdfSElHSCwKLQkgICAgICgodTY0KSB0cC0+c3RhdHVzX21hcHBpbmcgPj4gMzIpKTsKLQl0dzMyKEhPU1RDQ19TVEFUVVNfQkxLX0hPU1RfQUREUiArIFRHM182NEJJVF9SRUdfTE9XLAotCSAgICAgKCh1NjQpIHRwLT5zdGF0dXNfbWFwcGluZyAmIDB4ZmZmZmZmZmYpKTsKLQogCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkgewogCQkvKiBTdGF0dXMvc3RhdGlzdGljcyBibG9jayBhZGRyZXNzLiAgU2VlIHRnM190aW1lciwKIAkJICogdGhlIHRnM19wZXJpb2RpY19mZXRjaF9zdGF0cyBjYWxsIHRoZXJlLCBhbmQKQEAgLTcwNzcsNyArNzUxMSwxNiBAQAogCQl0dzMyKEhPU1RDQ19TVEFUU19CTEtfSE9TVF9BRERSICsgVEczXzY0QklUX1JFR19MT1csCiAJCSAgICAgKCh1NjQpIHRwLT5zdGF0c19tYXBwaW5nICYgMHhmZmZmZmZmZikpOwogCQl0dzMyKEhPU1RDQ19TVEFUU19CTEtfTklDX0FERFIsIE5JQ19TUkFNX1NUQVRTX0JMSyk7CisKIAkJdHczMihIT1NUQ0NfU1RBVFVTX0JMS19OSUNfQUREUiwgTklDX1NSQU1fU1RBVFVTX0JMSyk7CisKKwkJLyogQ2xlYXIgc3RhdGlzdGljcyBhbmQgc3RhdHVzIGJsb2NrIG1lbW9yeSBhcmVhcyAqLworCQlmb3IgKGkgPSBOSUNfU1JBTV9TVEFUU19CTEs7CisJCSAgICAgaSA8IE5JQ19TUkFNX1NUQVRVU19CTEsgKyBURzNfSFdfU1RBVFVTX1NJWkU7CisJCSAgICAgaSArPSBzaXplb2YodTMyKSkgeworCQkJdGczX3dyaXRlX21lbSh0cCwgaSwgMCk7CisJCQl1ZGVsYXkoNDApOworCQl9CiAJfQogCiAJdHczMihIT1NUQ0NfTU9ERSwgSE9TVENDX01PREVfRU5BQkxFIHwgdHAtPmNvYWxlc2NlX21vZGUpOwpAQCAtNzA4NywxNSArNzUzMCw2IEBACiAJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQogCQl0dzMyKFJDVkxTQ19NT0RFLCBSQ1ZMU0NfTU9ERV9FTkFCTEUgfCBSQ1ZMU0NfTU9ERV9BVFROX0VOQUJMRSk7CiAKLQkvKiBDbGVhciBzdGF0aXN0aWNzL3N0YXR1cyBibG9jayBpbiBjaGlwLCBhbmQgc3RhdHVzIGJsb2NrIGluIHJhbS4gKi8KLQlmb3IgKGkgPSBOSUNfU1JBTV9TVEFUU19CTEs7Ci0JICAgICBpIDwgTklDX1NSQU1fU1RBVFVTX0JMSyArIFRHM19IV19TVEFUVVNfU0laRTsKLQkgICAgIGkgKz0gc2l6ZW9mKHUzMikpIHsKLQkJdGczX3dyaXRlX21lbSh0cCwgaSwgMCk7Ci0JCXVkZWxheSg0MCk7Ci0JfQotCW1lbXNldCh0cC0+aHdfc3RhdHVzLCAwLCBURzNfSFdfU1RBVFVTX1NJWkUpOwotCiAJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTUlJX1NFUkRFUykgewogCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUEFSQUxMRUxfREVURUNUOwogCQkvKiByZXNldCB0byBwcmV2ZW50IGxvc2luZyAxc3QgcnggcGFja2V0IGludGVybWl0dGVudGx5ICovCkBAIC03MTQ3LDcgKzc1ODEsMTEgQEAKIAl0dzMyX2YoR1JDX0xPQ0FMX0NUUkwsIHRwLT5ncmNfbG9jYWxfY3RybCk7CiAJdWRlbGF5KDEwMCk7CiAKLQl0dzMyX21haWxib3hfZihNQUlMQk9YX0lOVEVSUlVQVF8wICsgVEczXzY0QklUX1JFR19MT1csIDApOworCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSVgpIHsKKwkJdmFsID0gdHIzMihNU0dJTlRfTU9ERSk7CisJCXZhbCB8PSBNU0dJTlRfTU9ERV9NVUxUSVZFQ19FTiB8IE1TR0lOVF9NT0RFX0VOQUJMRTsKKwkJdHczMihNU0dJTlRfTU9ERSwgdmFsKTsKKwl9CiAKIAlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpIHsKIAkJdHczMl9mKERNQUNfTU9ERSwgRE1BQ19NT0RFX0VOQUJMRSk7CkBAIC03MTY0LDcgKzc2MDIsNyBAQAogCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDUgJiYKIAkgICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzA1X0EwKSB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MCkgewotCQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxHMl9UU09fQ0FQQUJMRSkgJiYKKwkJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1RTT19DQVBBQkxFKSAmJgogCQkgICAgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzA1X0ExIHx8CiAJCSAgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDVfQTIpKSB7CiAJCQkvKiBub3RoaW5nICovCkBAIC03MjE3LDcgKzc2NTUsMTAgQEAKIAl0dzMyKFNORERBVEFJX01PREUsIFNORERBVEFJX01PREVfRU5BQkxFKTsKIAlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU08pCiAJCXR3MzIoU05EREFUQUlfTU9ERSwgU05EREFUQUlfTU9ERV9FTkFCTEUgfCAweDgpOwotCXR3MzIoU05EQkRJX01PREUsIFNOREJESV9NT0RFX0VOQUJMRSB8IFNOREJESV9NT0RFX0FUVE5fRU5BQkxFKTsKKwl2YWwgPSBTTkRCRElfTU9ERV9FTkFCTEUgfCBTTkRCRElfTU9ERV9BVFROX0VOQUJMRTsKKwlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0lYKQorCQl2YWwgfD0gU05EQkRJX01PREVfTVVMVElfVFhRX0VOOworCXR3MzIoU05EQkRJX01PREUsIHZhbCk7CiAJdHczMihTTkRCRFNfTU9ERSwgU05EQkRTX01PREVfRU5BQkxFIHwgU05EQkRTX01PREVfQVRUTl9FTkFCTEUpOwogCiAJaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0EwKSB7CkBAIC03MjM2LDEwICs3Njc3LDQ2IEBACiAJdHczMl9mKE1BQ19UWF9NT0RFLCB0cC0+dHhfbW9kZSk7CiAJdWRlbGF5KDEwMCk7CiAKKwlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfUlNTKSB7CisJCXUzMiByZWcgPSBNQUNfUlNTX0lORElSX1RCTF8wOworCQl1OCAqZW50ID0gKHU4ICopJnZhbDsKKworCQkvKiBTZXR1cCB0aGUgaW5kaXJlY3Rpb24gdGFibGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IFRHM19SU1NfSU5ESVJfVEJMX1NJWkU7IGkrKykgeworCQkJaW50IGlkeCA9IGkgJSBzaXplb2YodmFsKTsKKworCQkJZW50W2lkeF0gPSBpICUgKHRwLT5pcnFfY250IC0gMSk7CisJCQlpZiAoaWR4ID09IHNpemVvZih2YWwpIC0gMSkgeworCQkJCXR3MzIocmVnLCB2YWwpOworCQkJCXJlZyArPSA0OworCQkJfQorCQl9CisKKwkJLyogU2V0dXAgdGhlICJzZWNyZXQiIGhhc2gga2V5LiAqLworCQl0dzMyKE1BQ19SU1NfSEFTSF9LRVlfMCwgMHg1Zjg2NTQzNyk7CisJCXR3MzIoTUFDX1JTU19IQVNIX0tFWV8xLCAweGU0YWM2MmNjKTsKKwkJdHczMihNQUNfUlNTX0hBU0hfS0VZXzIsIDB4NTAxMDNhNDUpOworCQl0dzMyKE1BQ19SU1NfSEFTSF9LRVlfMywgMHgzNjYyMTk4NSk7CisJCXR3MzIoTUFDX1JTU19IQVNIX0tFWV80LCAweGJmMTRjMGU4KTsKKwkJdHczMihNQUNfUlNTX0hBU0hfS0VZXzUsIDB4MWJjMjdhMWUpOworCQl0dzMyKE1BQ19SU1NfSEFTSF9LRVlfNiwgMHg4NGY0YjU1Nik7CisJCXR3MzIoTUFDX1JTU19IQVNIX0tFWV83LCAweDA5NGVhNmZlKTsKKwkJdHczMihNQUNfUlNTX0hBU0hfS0VZXzgsIDB4N2RkYTAxZTcpOworCQl0dzMyKE1BQ19SU1NfSEFTSF9LRVlfOSwgMHhjMDRkNzQ4MSk7CisJfQorCiAJdHAtPnJ4X21vZGUgPSBSWF9NT0RFX0VOQUJMRTsKIAlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzU1X1BMVVMpCiAJCXRwLT5yeF9tb2RlIHw9IFJYX01PREVfSVBWNl9DU1VNX0VOQUJMRTsKIAorCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9SU1MpCisJCXRwLT5yeF9tb2RlIHw9IFJYX01PREVfUlNTX0VOQUJMRSB8CisJCQkgICAgICAgUlhfTU9ERV9SU1NfSVRCTF9IQVNIX0JJVFNfNyB8CisJCQkgICAgICAgUlhfTU9ERV9SU1NfSVBWNl9IQVNIX0VOIHwKKwkJCSAgICAgICBSWF9NT0RFX1JTU19UQ1BfSVBWNl9IQVNIX0VOIHwKKwkJCSAgICAgICBSWF9NT0RFX1JTU19JUFY0X0hBU0hfRU4gfAorCQkJICAgICAgIFJYX01PREVfUlNTX1RDUF9JUFY0X0hBU0hfRU47CisKIAl0dzMyX2YoTUFDX1JYX01PREUsIHRwLT5yeF9tb2RlKTsKIAl1ZGVsYXkoMTApOwogCkBAIC03MzAyLDcgKzc3NzksNyBAQAogCQkJcmV0dXJuIGVycjsKIAogCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpICYmCi0JCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTkwNikgeworCQkgICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpKSB7CiAJCQl1MzIgdG1wOwogCiAJCQkvKiBDbGVhciBDUkMgc3RhdHMuICovCkBAIC03NDQ5LDEyICs3OTI2LDEyIEBACiAJCSAqIElSUSBzdGF0dXMgdGhlIG1haWxib3gvc3RhdHVzX2Jsb2NrIHByb3RvY29sIHRoZSBjaGlwCiAJCSAqIHVzZXMgd2l0aCB0aGUgY3B1IGlzIHJhY2UgcHJvbmUuCiAJCSAqLwotCQlpZiAodHAtPmh3X3N0YXR1cy0+c3RhdHVzICYgU0RfU1RBVFVTX1VQREFURUQpIHsKKwkJaWYgKHRwLT5uYXBpWzBdLmh3X3N0YXR1cy0+c3RhdHVzICYgU0RfU1RBVFVTX1VQREFURUQpIHsKIAkJCXR3MzIoR1JDX0xPQ0FMX0NUUkwsCiAJCQkgICAgIHRwLT5ncmNfbG9jYWxfY3RybCB8IEdSQ19MQ0xDVFJMX1NFVElOVCk7CiAJCX0gZWxzZSB7CiAJCQl0dzMyKEhPU1RDQ19NT0RFLCB0cC0+Y29hbGVzY2VfbW9kZSB8Ci0JCQkgICAgIChIT1NUQ0NfTU9ERV9FTkFCTEUgfCBIT1NUQ0NfTU9ERV9OT1cpKTsKKwkJCSAgICAgSE9TVENDX01PREVfRU5BQkxFIHwgSE9TVENDX01PREVfTk9XKTsKIAkJfQogCiAJCWlmICghKHRyMzIoV0RNQUNfTU9ERSkgJiBXRE1BQ19NT0RFX0VOQUJMRSkpIHsKQEAgLTc1NTUsMTMgKzgwMzIsMjIgQEAKIAlhZGRfdGltZXIoJnRwLT50aW1lcik7CiB9CiAKLXN0YXRpYyBpbnQgdGczX3JlcXVlc3RfaXJxKHN0cnVjdCB0ZzMgKnRwKQorc3RhdGljIGludCB0ZzNfcmVxdWVzdF9pcnEoc3RydWN0IHRnMyAqdHAsIGludCBpcnFfbnVtKQogewogCWlycV9oYW5kbGVyX3QgZm47CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtPmRldjsKKwljaGFyICpuYW1lOworCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbaXJxX251bV07CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpIHsKKwlpZiAodHAtPmlycV9jbnQgPT0gMSkKKwkJbmFtZSA9IHRwLT5kZXYtPm5hbWU7CisJZWxzZSB7CisJCW5hbWUgPSAmdG5hcGktPmlycV9sYmxbMF07CisJCXNucHJpbnRmKG5hbWUsIElGTkFNU0laLCAiJXMtJWQiLCB0cC0+ZGV2LT5uYW1lLCBpcnFfbnVtKTsKKwkJbmFtZVtJRk5BTVNJWi0xXSA9IDA7CisJfQorCisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJX09SX01TSVgpIHsKIAkJZm4gPSB0ZzNfbXNpOwogCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl8xU0hPVF9NU0kpCiAJCQlmbiA9IHRnM19tc2lfMXNob3Q7CkBAIC03NTcyLDM3ICs4MDU4LDQ5IEBACiAJCQlmbiA9IHRnM19pbnRlcnJ1cHRfdGFnZ2VkOwogCQlmbGFncyA9IElSUUZfU0hBUkVEIHwgSVJRRl9TQU1QTEVfUkFORE9NOwogCX0KLQlyZXR1cm4gKHJlcXVlc3RfaXJxKHRwLT5wZGV2LT5pcnEsIGZuLCBmbGFncywgZGV2LT5uYW1lLCBkZXYpKTsKKworCXJldHVybiByZXF1ZXN0X2lycSh0bmFwaS0+aXJxX3ZlYywgZm4sIGZsYWdzLCBuYW1lLCB0bmFwaSk7CiB9CiAKIHN0YXRpYyBpbnQgdGczX3Rlc3RfaW50ZXJydXB0KHN0cnVjdCB0ZzMgKnRwKQogeworCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbMF07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLT5kZXY7CiAJaW50IGVyciwgaSwgaW50cl9vayA9IDA7CisJdTMyIHZhbDsKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXRnM19kaXNhYmxlX2ludHModHApOwogCi0JZnJlZV9pcnEodHAtPnBkZXYtPmlycSwgZGV2KTsKKwlmcmVlX2lycSh0bmFwaS0+aXJxX3ZlYywgdG5hcGkpOwogCi0JZXJyID0gcmVxdWVzdF9pcnEodHAtPnBkZXYtPmlycSwgdGczX3Rlc3RfaXNyLAotCQkJICBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwgZGV2LT5uYW1lLCBkZXYpOworCS8qCisJICogVHVybiBvZmYgTVNJIG9uZSBzaG90IG1vZGUuICBPdGhlcndpc2UgdGhpcyB0ZXN0IGhhcyBubworCSAqIG9ic2VydmFibGUgd2F5IHRvIGtub3cgd2hldGhlciB0aGUgaW50ZXJydXB0IHdhcyBkZWxpdmVyZWQuCisJICovCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3ICYmCisJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkpIHsKKwkJdmFsID0gdHIzMihNU0dJTlRfTU9ERSkgfCBNU0dJTlRfTU9ERV9PTkVfU0hPVF9ESVNBQkxFOworCQl0dzMyKE1TR0lOVF9NT0RFLCB2YWwpOworCX0KKworCWVyciA9IHJlcXVlc3RfaXJxKHRuYXBpLT5pcnFfdmVjLCB0ZzNfdGVzdF9pc3IsCisJCQkgIElSUUZfU0hBUkVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLCBkZXYtPm5hbWUsIHRuYXBpKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JdHAtPmh3X3N0YXR1cy0+c3RhdHVzICY9IH5TRF9TVEFUVVNfVVBEQVRFRDsKKwl0bmFwaS0+aHdfc3RhdHVzLT5zdGF0dXMgJj0gflNEX1NUQVRVU19VUERBVEVEOwogCXRnM19lbmFibGVfaW50cyh0cCk7CiAKIAl0dzMyX2YoSE9TVENDX01PREUsIHRwLT5jb2FsZXNjZV9tb2RlIHwgSE9TVENDX01PREVfRU5BQkxFIHwKLQkgICAgICAgSE9TVENDX01PREVfTk9XKTsKKwkgICAgICAgdG5hcGktPmNvYWxfbm93KTsKIAogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKIAkJdTMyIGludF9tYm94LCBtaXNjX2hvc3RfY3RybDsKIAotCQlpbnRfbWJveCA9IHRyMzJfbWFpbGJveChNQUlMQk9YX0lOVEVSUlVQVF8wICsKLQkJCQkJVEczXzY0QklUX1JFR19MT1cpOworCQlpbnRfbWJveCA9IHRyMzJfbWFpbGJveCh0bmFwaS0+aW50X21ib3gpOwogCQltaXNjX2hvc3RfY3RybCA9IHRyMzIoVEczUENJX01JU0NfSE9TVF9DVFJMKTsKIAogCQlpZiAoKGludF9tYm94ICE9IDApIHx8CkBAIC03NjE2LDE1ICs4MTE0LDIyIEBACiAKIAl0ZzNfZGlzYWJsZV9pbnRzKHRwKTsKIAotCWZyZWVfaXJxKHRwLT5wZGV2LT5pcnEsIGRldik7CisJZnJlZV9pcnEodG5hcGktPmlycV92ZWMsIHRuYXBpKTsKIAotCWVyciA9IHRnM19yZXF1ZXN0X2lycSh0cCk7CisJZXJyID0gdGczX3JlcXVlc3RfaXJxKHRwLCAwKTsKIAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoaW50cl9vaykKKwlpZiAoaW50cl9vaykgeworCQkvKiBSZWVuYWJsZSBNU0kgb25lIHNob3QgbW9kZS4gKi8KKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3ICYmCisJCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpKSB7CisJCQl2YWwgPSB0cjMyKE1TR0lOVF9NT0RFKSAmIH5NU0dJTlRfTU9ERV9PTkVfU0hPVF9ESVNBQkxFOworCQkJdHczMihNU0dJTlRfTU9ERSwgdmFsKTsKKwkJfQogCQlyZXR1cm4gMDsKKwl9CiAKIAlyZXR1cm4gLUVJTzsKIH0KQEAgLTc2MzQsNyArODEzOSw2IEBACiAgKi8KIHN0YXRpYyBpbnQgdGczX3Rlc3RfbXNpKHN0cnVjdCB0ZzMgKnRwKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC0+ZGV2OwogCWludCBlcnI7CiAJdTE2IHBjaV9jbWQ7CiAKQEAgLTc2NjUsMTIgKzgxNjksMTMgQEAKIAkgICAgICAgInRoZSBQQ0kgbWFpbnRhaW5lciBhbmQgaW5jbHVkZSBzeXN0ZW0gY2hpcHNldCBpbmZvcm1hdGlvbi5cbiIsCiAJCSAgICAgICB0cC0+ZGV2LT5uYW1lKTsKIAotCWZyZWVfaXJxKHRwLT5wZGV2LT5pcnEsIGRldik7CisJZnJlZV9pcnEodHAtPm5hcGlbMF0uaXJxX3ZlYywgJnRwLT5uYXBpWzBdKTsKKwogCXBjaV9kaXNhYmxlX21zaSh0cC0+cGRldik7CiAKIAl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfVVNJTkdfTVNJOwogCi0JZXJyID0gdGczX3JlcXVlc3RfaXJxKHRwKTsKKwllcnIgPSB0ZzNfcmVxdWVzdF9pcnEodHAsIDApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTc2ODUsNyArODE5MCw3IEBACiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIAogCWlmIChlcnIpCi0JCWZyZWVfaXJxKHRwLT5wZGV2LT5pcnEsIGRldik7CisJCWZyZWVfaXJxKHRwLT5uYXBpWzBdLmlycV92ZWMsICZ0cC0+bmFwaVswXSk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzcyMSwxMCArODIyNiw5NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgYm9vbCB0ZzNfZW5hYmxlX21zaXgoc3RydWN0IHRnMyAqdHApCit7CisJaW50IGksIHJjLCBjcHVzID0gbnVtX29ubGluZV9jcHVzKCk7CisJc3RydWN0IG1zaXhfZW50cnkgbXNpeF9lbnRbdHAtPmlycV9tYXhdOworCisJaWYgKGNwdXMgPT0gMSkKKwkJLyogSnVzdCBmYWxsYmFjayB0byB0aGUgc2ltcGxlciBNU0kgbW9kZS4gKi8KKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBXZSB3YW50IGFzIG1hbnkgcnggcmluZ3MgZW5hYmxlZCBhcyB0aGVyZSBhcmUgY3B1cy4KKwkgKiBUaGUgZmlyc3QgTVNJWCB2ZWN0b3Igb25seSBkZWFscyB3aXRoIGxpbmsgaW50ZXJydXB0cywgZXRjLAorCSAqIHNvIHdlIGFkZCBvbmUgdG8gdGhlIG51bWJlciBvZiB2ZWN0b3JzIHdlIGFyZSByZXF1ZXN0aW5nLgorCSAqLworCXRwLT5pcnFfY250ID0gbWluX3QodW5zaWduZWQsIGNwdXMgKyAxLCB0cC0+aXJxX21heCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9tYXg7IGkrKykgeworCQltc2l4X2VudFtpXS5lbnRyeSAgPSBpOworCQltc2l4X2VudFtpXS52ZWN0b3IgPSAwOworCX0KKworCXJjID0gcGNpX2VuYWJsZV9tc2l4KHRwLT5wZGV2LCBtc2l4X2VudCwgdHAtPmlycV9jbnQpOworCWlmIChyYyAhPSAwKSB7CisJCWlmIChyYyA8IFRHM19SU1NfTUlOX05VTV9NU0lYX1ZFQ1MpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmIChwY2lfZW5hYmxlX21zaXgodHAtPnBkZXYsIG1zaXhfZW50LCByYykpCisJCQlyZXR1cm4gZmFsc2U7CisJCXByaW50ayhLRVJOX05PVElDRQorCQkgICAgICAgIiVzOiBSZXF1ZXN0ZWQgJWQgTVNJLVggdmVjdG9ycywgcmVjZWl2ZWQgJWRcbiIsCisJCSAgICAgICB0cC0+ZGV2LT5uYW1lLCB0cC0+aXJxX2NudCwgcmMpOworCQl0cC0+aXJxX2NudCA9IHJjOworCX0KKworCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX0VOQUJMRV9SU1M7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9tYXg7IGkrKykKKwkJdHAtPm5hcGlbaV0uaXJxX3ZlYyA9IG1zaXhfZW50W2ldLnZlY3RvcjsKKworCXRwLT5kZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA9IHRwLT5pcnFfY250IC0gMTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCB0ZzNfaW50c19pbml0KHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1NVUFBPUlRfTVNJX09SX01TSVgpICYmCisJICAgICEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RBR0dFRF9TVEFUVVMpKSB7CisJCS8qIEFsbCBNU0kgc3VwcG9ydGluZyBjaGlwcyBzaG91bGQgc3VwcG9ydCB0YWdnZWQKKwkJICogc3RhdHVzLiAgQXNzZXJ0IHRoYXQgdGhpcyBpcyB0aGUgY2FzZS4KKwkJICovCisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogTVNJIHdpdGhvdXQgVEFHR0VEPyAiCisJCSAgICAgICAiTm90IHVzaW5nIE1TSS5cbiIsIHRwLT5kZXYtPm5hbWUpOworCQlnb3RvIGRlZmNmZzsKKwl9CisKKwlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TVVBQT1JUX01TSVgpICYmIHRnM19lbmFibGVfbXNpeCh0cCkpCisJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1VTSU5HX01TSVg7CisJZWxzZSBpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TVVBQT1JUX01TSSkgJiYKKwkJIHBjaV9lbmFibGVfbXNpKHRwLT5wZGV2KSA9PSAwKQorCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9VU0lOR19NU0k7CisKKwlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0lfT1JfTVNJWCkgeworCQl1MzIgbXNpX21vZGUgPSB0cjMyKE1TR0lOVF9NT0RFKTsKKwkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJWCkKKwkJCW1zaV9tb2RlIHw9IE1TR0lOVF9NT0RFX01VTFRJVkVDX0VOOworCQl0dzMyKE1TR0lOVF9NT0RFLCBtc2lfbW9kZSB8IE1TR0lOVF9NT0RFX0VOQUJMRSk7CisJfQorZGVmY2ZnOgorCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJWCkpIHsKKwkJdHAtPmlycV9jbnQgPSAxOworCQl0cC0+bmFwaVswXS5pcnFfdmVjID0gdHAtPnBkZXYtPmlycTsKKwkJdHAtPmRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRnM19pbnRzX2Zpbmkoc3RydWN0IHRnMyAqdHApCit7CisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJWCkKKwkJcGNpX2Rpc2FibGVfbXNpeCh0cC0+cGRldik7CisJZWxzZSBpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpCisJCXBjaV9kaXNhYmxlX21zaSh0cC0+cGRldik7CisJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1VTSU5HX01TSV9PUl9NU0lYOworCXRwLT50ZzNfZmxhZ3MzICY9IH5URzNfRkxHM19FTkFCTEVfUlNTOworfQorCiBzdGF0aWMgaW50IHRnM19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnI7CisJaW50IGksIGVycjsKIAogCWlmICh0cC0+ZndfbmVlZGVkKSB7CiAJCWVyciA9IHRnM19yZXF1ZXN0X2Zpcm13YXJlKHRwKTsKQEAgLTc3NTUsNDAgKzgzNDUsMzMgQEAKIAogCXRnM19mdWxsX3VubG9jayh0cCk7CiAKKwkvKgorCSAqIFNldHVwIGludGVycnVwdHMgZmlyc3Qgc28gd2Uga25vdyBob3cKKwkgKiBtYW55IE5BUEkgcmVzb3VyY2VzIHRvIGFsbG9jYXRlCisJICovCisJdGczX2ludHNfaW5pdCh0cCk7CisKIAkvKiBUaGUgcGxhY2VtZW50IG9mIHRoaXMgY2FsbCBpcyB0aWVkCiAJICogdG8gdGhlIHNldHVwIGFuZCB1c2Ugb2YgSG9zdCBUWCBkZXNjcmlwdG9ycy4KIAkgKi8KIAllcnIgPSB0ZzNfYWxsb2NfY29uc2lzdGVudCh0cCk7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJfb3V0MTsKIAotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1VQUE9SVF9NU0kpIHsKLQkJLyogQWxsIE1TSSBzdXBwb3J0aW5nIGNoaXBzIHNob3VsZCBzdXBwb3J0IHRhZ2dlZAotCQkgKiBzdGF0dXMuICBBc3NlcnQgdGhhdCB0aGlzIGlzIHRoZSBjYXNlLgotCQkgKi8KLQkJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RBR0dFRF9TVEFUVVMpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IE1TSSB3aXRob3V0IFRBR0dFRD8gIgotCQkJICAgICAgICJOb3QgdXNpbmcgTVNJLlxuIiwgdHAtPmRldi0+bmFtZSk7Ci0JCX0gZWxzZSBpZiAocGNpX2VuYWJsZV9tc2kodHAtPnBkZXYpID09IDApIHsKLQkJCXUzMiBtc2lfbW9kZTsKKwl0ZzNfbmFwaV9lbmFibGUodHApOwogCi0JCQltc2lfbW9kZSA9IHRyMzIoTVNHSU5UX01PREUpOwotCQkJdHczMihNU0dJTlRfTU9ERSwgbXNpX21vZGUgfCBNU0dJTlRfTU9ERV9FTkFCTEUpOwotCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfVVNJTkdfTVNJOworCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX2NudDsgaSsrKSB7CisJCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbaV07CisJCWVyciA9IHRnM19yZXF1ZXN0X2lycSh0cCwgaSk7CisJCWlmIChlcnIpIHsKKwkJCWZvciAoaS0tOyBpID49IDA7IGktLSkKKwkJCQlmcmVlX2lycSh0bmFwaS0+aXJxX3ZlYywgdG5hcGkpOworCQkJYnJlYWs7CiAJCX0KIAl9Ci0JZXJyID0gdGczX3JlcXVlc3RfaXJxKHRwKTsKIAotCWlmIChlcnIpIHsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKSB7Ci0JCQlwY2lfZGlzYWJsZV9tc2kodHAtPnBkZXYpOwotCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1VTSU5HX01TSTsKLQkJfQotCQl0ZzNfZnJlZV9jb25zaXN0ZW50KHRwKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQluYXBpX2VuYWJsZSgmdHAtPm5hcGkpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDI7CiAKIAl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIApAQCAtNzgxNiw0NSArODM5OSwyOCBAQAogCiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIAotCWlmIChlcnIpIHsKLQkJbmFwaV9kaXNhYmxlKCZ0cC0+bmFwaSk7Ci0JCWZyZWVfaXJxKHRwLT5wZGV2LT5pcnEsIGRldik7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkgewotCQkJcGNpX2Rpc2FibGVfbXNpKHRwLT5wZGV2KTsKLQkJCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9VU0lOR19NU0k7Ci0JCX0KLQkJdGczX2ZyZWVfY29uc2lzdGVudCh0cCk7Ci0JCXJldHVybiBlcnI7Ci0JfQorCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDM7CiAKIAlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpIHsKIAkJZXJyID0gdGczX3Rlc3RfbXNpKHRwKTsKIAogCQlpZiAoZXJyKSB7CiAJCQl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKLQotCQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKSB7Ci0JCQkJcGNpX2Rpc2FibGVfbXNpKHRwLT5wZGV2KTsKLQkJCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfVVNJTkdfTVNJOwotCQkJfQogCQkJdGczX2hhbHQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04sIDEpOwogCQkJdGczX2ZyZWVfcmluZ3ModHApOwotCQkJdGczX2ZyZWVfY29uc2lzdGVudCh0cCk7Ci0KIAkJCXRnM19mdWxsX3VubG9jayh0cCk7CiAKLQkJCW5hcGlfZGlzYWJsZSgmdHAtPm5hcGkpOwotCi0JCQlyZXR1cm4gZXJyOworCQkJZ290byBlcnJfb3V0MjsKIAkJfQogCi0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkgewotCQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfMVNIT1RfTVNJKSB7Ci0JCQkJdTMyIHZhbCA9IHRyMzIoUENJRV9UUkFOU0FDVElPTl9DRkcpOworCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MTcgJiYKKwkJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkgJiYKKwkJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzFTSE9UX01TSSkpIHsKKwkJCXUzMiB2YWwgPSB0cjMyKFBDSUVfVFJBTlNBQ1RJT05fQ0ZHKTsKIAotCQkJCXR3MzIoUENJRV9UUkFOU0FDVElPTl9DRkcsCi0JCQkJICAgICB2YWwgfCBQQ0lFX1RSQU5TX0NGR18xU0hPVF9NU0kpOwotCQkJfQorCQkJdHczMihQQ0lFX1RSQU5TQUNUSU9OX0NGRywKKwkJCSAgICAgdmFsIHwgUENJRV9UUkFOU19DRkdfMVNIT1RfTVNJKTsKIAkJfQogCX0KIApAQCAtNzg2OCw5ICs4NDM0LDIzIEBACiAKIAl0ZzNfZnVsbF91bmxvY2sodHApOwogCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGRldik7CiAKIAlyZXR1cm4gMDsKKworZXJyX291dDM6CisJZm9yIChpID0gdHAtPmlycV9jbnQgLSAxOyBpID49IDA7IGktLSkgeworCQlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpW2ldOworCQlmcmVlX2lycSh0bmFwaS0+aXJxX3ZlYywgdG5hcGkpOworCX0KKworZXJyX291dDI6CisJdGczX25hcGlfZGlzYWJsZSh0cCk7CisJdGczX2ZyZWVfY29uc2lzdGVudCh0cCk7CisKK2Vycl9vdXQxOgorCXRnM19pbnRzX2ZpbmkodHApOworCXJldHVybiBlcnI7CiB9CiAKICNpZiAwCkBAIC03ODc5LDYgKzg0NTksNyBAQAogCXUzMiB2YWwzMiwgdmFsMzJfMiwgdmFsMzJfMywgdmFsMzJfNCwgdmFsMzJfNTsKIAl1MTYgdmFsMTY7CiAJaW50IGk7CisJc3RydWN0IHRnM19od19zdGF0dXMgKnNibGsgPSB0cC0+bmFwaVswXS0+aHdfc3RhdHVzOwogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQodHAtPnBkZXYsIFBDSV9TVEFUVVMsICZ2YWwxNik7CiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfUENJU1RBVEUsICZ2YWwzMik7CkBAIC04MDMxLDE0ICs4NjEyLDE1IEBACiAJICAgICAgIHZhbDMyLCB2YWwzMl8yLCB2YWwzMl8zLCB2YWwzMl80LCB2YWwzMl81KTsKIAogCS8qIFNXIHN0YXR1cyBibG9jayAqLwotCXByaW50aygiREVCVUc6IEhvc3Qgc3RhdHVzIGJsb2NrIFslMDh4OiUwOHg6KCUwNHg6JTA0eDolMDR4KTooJTA0eDolMDR4KV1cbiIsCi0JICAgICAgIHRwLT5od19zdGF0dXMtPnN0YXR1cywKLQkgICAgICAgdHAtPmh3X3N0YXR1cy0+c3RhdHVzX3RhZywKLQkgICAgICAgdHAtPmh3X3N0YXR1cy0+cnhfanVtYm9fY29uc3VtZXIsCi0JICAgICAgIHRwLT5od19zdGF0dXMtPnJ4X2NvbnN1bWVyLAotCSAgICAgICB0cC0+aHdfc3RhdHVzLT5yeF9taW5pX2NvbnN1bWVyLAotCSAgICAgICB0cC0+aHdfc3RhdHVzLT5pZHhbMF0ucnhfcHJvZHVjZXIsCi0JICAgICAgIHRwLT5od19zdGF0dXMtPmlkeFswXS50eF9jb25zdW1lcik7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgIkhvc3Qgc3RhdHVzIGJsb2NrIFslMDh4OiUwOHg6KCUwNHg6JTA0eDolMDR4KTooJTA0eDolMDR4KV1cbiIsCisJICAgICAgIHNibGstPnN0YXR1cywKKwkgICAgICAgc2Jsay0+c3RhdHVzX3RhZywKKwkgICAgICAgc2Jsay0+cnhfanVtYm9fY29uc3VtZXIsCisJICAgICAgIHNibGstPnJ4X2NvbnN1bWVyLAorCSAgICAgICBzYmxrLT5yeF9taW5pX2NvbnN1bWVyLAorCSAgICAgICBzYmxrLT5pZHhbMF0ucnhfcHJvZHVjZXIsCisJICAgICAgIHNibGstPmlkeFswXS50eF9jb25zdW1lcik7CiAKIAkvKiBTVyBzdGF0aXN0aWNzIGJsb2NrICovCiAJcHJpbnRrKCJERUJVRzogSG9zdCBzdGF0aXN0aWNzIGJsb2NrIFslMDh4OiUwOHg6JTA4eDolMDh4XVxuIiwKQEAgLTgxMDYsMTIgKzg2ODgsMTMgQEAKIAogc3RhdGljIGludCB0ZzNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlpbnQgaTsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKLQluYXBpX2Rpc2FibGUoJnRwLT5uYXBpKTsKKwl0ZzNfbmFwaV9kaXNhYmxlKHRwKTsKIAljYW5jZWxfd29ya19zeW5jKCZ0cC0+cmVzZXRfdGFzayk7CiAKLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7CiAKIAlkZWxfdGltZXJfc3luYygmdHAtPnRpbWVyKTsKIApAQCAtODEyOCwxMiArODcxMSwxMyBAQAogCiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIAotCWZyZWVfaXJxKHRwLT5wZGV2LT5pcnEsIGRldik7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKSB7Ci0JCXBjaV9kaXNhYmxlX21zaSh0cC0+cGRldik7Ci0JCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9VU0lOR19NU0k7CisJZm9yIChpID0gdHAtPmlycV9jbnQgLSAxOyBpID49IDA7IGktLSkgeworCQlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpW2ldOworCQlmcmVlX2lycSh0bmFwaS0+aXJxX3ZlYywgdG5hcGkpOwogCX0KIAorCXRnM19pbnRzX2ZpbmkodHApOworCiAJbWVtY3B5KCZ0cC0+bmV0X3N0YXRzX3ByZXYsIHRnM19nZXRfc3RhdHModHAtPmRldiksCiAJICAgICAgIHNpemVvZih0cC0+bmV0X3N0YXRzX3ByZXYpKTsKIAltZW1jcHkoJnRwLT5lc3RhdHNfcHJldiwgdGczX2dldF9lc3RhdHModHApLApAQCAtODY5Nyw3ICs5MjgxLDcgQEAKIAkJY21kLT5zcGVlZCA9IHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQ7CiAJCWNtZC0+ZHVwbGV4ID0gdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9kdXBsZXg7CiAJfQotCWNtZC0+cGh5X2FkZHJlc3MgPSBQSFlfQUREUjsKKwljbWQtPnBoeV9hZGRyZXNzID0gdHAtPnBoeV9hZGRyOwogCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwogCWNtZC0+YXV0b25lZyA9IHRwLT5saW5rX2NvbmZpZy5hdXRvbmVnOwogCWNtZC0+bWF4dHhwa3QgPSAwOwpAQCAtODg3Miw3ICs5NDU2LDggQEAKIAkJCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgJiYKIAkJCSAgICAgR0VUX0NISVBfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IENISVBSRVZfNTc4NF9BWCkgfHwKIAkJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSB8fAotCQkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCkKKwkJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODAgfHwKKwkJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKIAkJCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPX0VDTjsKIAkJfSBlbHNlCiAJCQlkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU082IHwgTkVUSUZfRl9UU09fRUNOKTsKQEAgLTg5MzQsMTMgKzk1MTksMTMgQEAKIAllbHNlCiAJCWVyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKIAotCWVyaW5nLT50eF9wZW5kaW5nID0gdHAtPnR4X3BlbmRpbmc7CisJZXJpbmctPnR4X3BlbmRpbmcgPSB0cC0+bmFwaVswXS50eF9wZW5kaW5nOwogfQogCiBzdGF0aWMgaW50IHRnM19zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZXJpbmcpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpcnFfc3luYyA9IDAsIGVyciA9IDA7CisJaW50IGksIGlycV9zeW5jID0gMCwgZXJyID0gMDsKIAogCWlmICgoZXJpbmctPnJ4X3BlbmRpbmcgPiBURzNfUlhfUklOR19TSVpFIC0gMSkgfHwKIAkgICAgKGVyaW5nLT5yeF9qdW1ib19wZW5kaW5nID4gVEczX1JYX0pVTUJPX1JJTkdfU0laRSAtIDEpIHx8CkBAIC04OTY0LDcgKzk1NDksOSBAQAogCSAgICB0cC0+cnhfcGVuZGluZyA+IDYzKQogCQl0cC0+cnhfcGVuZGluZyA9IDYzOwogCXRwLT5yeF9qdW1ib19wZW5kaW5nID0gZXJpbmctPnJ4X2p1bWJvX3BlbmRpbmc7Ci0JdHAtPnR4X3BlbmRpbmcgPSBlcmluZy0+dHhfcGVuZGluZzsKKworCWZvciAoaSA9IDA7IGkgPCBURzNfSVJRX01BWF9WRUNTOyBpKyspCisJCXRwLT5uYXBpW2ldLnR4X3BlbmRpbmcgPSBlcmluZy0+dHhfcGVuZGluZzsKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJdGczX2hhbHQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04sIDEpOwpAQCAtOTY3MiwxMiArMTAyNTksMjMgQEAKIHN0YXRpYyBpbnQgdGczX3J1bl9sb29wYmFjayhzdHJ1Y3QgdGczICp0cCwgaW50IGxvb3BiYWNrX21vZGUpCiB7CiAJdTMyIG1hY19tb2RlLCByeF9zdGFydF9pZHgsIHJ4X2lkeCwgdHhfaWR4LCBvcGFxdWVfa2V5OwotCXUzMiBkZXNjX2lkeDsKKwl1MzIgZGVzY19pZHgsIGNvYWxfbm93OwogCXN0cnVjdCBza19idWZmICpza2IsICpyeF9za2I7CiAJdTggKnR4X2RhdGE7CiAJZG1hX2FkZHJfdCBtYXA7CiAJaW50IG51bV9wa3RzLCB0eF9sZW4sIHJ4X2xlbiwgaSwgZXJyOwogCXN0cnVjdCB0ZzNfcnhfYnVmZmVyX2Rlc2MgKmRlc2M7CisJc3RydWN0IHRnM19uYXBpICp0bmFwaSwgKnJuYXBpOworCXN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0ICp0cHIgPSAmdHAtPnByb2RyaW5nWzBdOworCisJaWYgKHRwLT5pcnFfY250ID4gMSkgeworCQl0bmFwaSA9ICZ0cC0+bmFwaVsxXTsKKwkJcm5hcGkgPSAmdHAtPm5hcGlbMV07CisJfSBlbHNlIHsKKwkJdG5hcGkgPSAmdHAtPm5hcGlbMF07CisJCXJuYXBpID0gJnRwLT5uYXBpWzBdOworCX0KKwljb2FsX25vdyA9IHRuYXBpLT5jb2FsX25vdyB8IHJuYXBpLT5jb2FsX25vdzsKIAogCWlmIChsb29wYmFja19tb2RlID09IFRHM19NQUNfTE9PUEJBQ0spIHsKIAkJLyogSFcgZXJyYXRhIC0gbWFjIGxvb3BiYWNrIGZhaWxzIGluIHNvbWUgY2FzZXMgb24gNTc4MC4KQEAgLTk2OTksMTggKzEwMjk3LDggQEAKIAl9IGVsc2UgaWYgKGxvb3BiYWNrX21vZGUgPT0gVEczX1BIWV9MT09QQkFDSykgewogCQl1MzIgdmFsOwogCi0JCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgewotCQkJdTMyIHBoeXRlc3Q7Ci0KLQkJCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9URzNfRVBIWV9URVNULCAmcGh5dGVzdCkpIHsKLQkJCQl1MzIgcGh5OwotCi0JCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0VQSFlfVEVTVCwKLQkJCQkJICAgICBwaHl0ZXN0IHwgTUlJX1RHM19FUEhZX1NIQURPV19FTik7Ci0JCQkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgMHgxYiwgJnBoeSkpCi0JCQkJCXRnM193cml0ZXBoeSh0cCwgMHgxYiwgcGh5ICYgfjB4MjApOwotCQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19FUEhZX1RFU1QsIHBoeXRlc3QpOwotCQkJfQorCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSB7CisJCQl0ZzNfcGh5X2ZldF90b2dnbGVfYXBkKHRwLCBmYWxzZSk7CiAJCQl2YWwgPSBCTUNSX0xPT1BCQUNLIHwgQk1DUl9GVUxMRFBMWCB8IEJNQ1JfU1BFRUQxMDA7CiAJCX0gZWxzZQogCQkJdmFsID0gQk1DUl9MT09QQkFDSyB8IEJNQ1JfRlVMTERQTFggfCBCTUNSX1NQRUVEMTAwMDsKQEAgLTk3MjEsOCArMTAzMDksOSBAQAogCQl1ZGVsYXkoNDApOwogCiAJCW1hY19tb2RlID0gdHAtPm1hY19tb2RlICYgfk1BQ19NT0RFX1BPUlRfTU9ERV9NQVNLOwotCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpIHsKLQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19FUEhZX1BURVNULCAweDE4MDApOworCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSB7CisJCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCisJCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0ZFVF9QVEVTVCwgMHgxODAwKTsKIAkJCW1hY19tb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9NSUk7CiAJCX0gZWxzZQogCQkJbWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX0dNSUk7CkBAIC05NzY1LDM1ICsxMDM1NCwzNCBAQAogCW1hcCA9IHBjaV9tYXBfc2luZ2xlKHRwLT5wZGV2LCBza2ItPmRhdGEsIHR4X2xlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAKIAl0dzMyX2YoSE9TVENDX01PREUsIHRwLT5jb2FsZXNjZV9tb2RlIHwgSE9TVENDX01PREVfRU5BQkxFIHwKLQkgICAgIEhPU1RDQ19NT0RFX05PVyk7CisJICAgICAgIHJuYXBpLT5jb2FsX25vdyk7CiAKIAl1ZGVsYXkoMTApOwogCi0Jcnhfc3RhcnRfaWR4ID0gdHAtPmh3X3N0YXR1cy0+aWR4WzBdLnJ4X3Byb2R1Y2VyOworCXJ4X3N0YXJ0X2lkeCA9IHJuYXBpLT5od19zdGF0dXMtPmlkeFswXS5yeF9wcm9kdWNlcjsKIAogCW51bV9wa3RzID0gMDsKIAotCXRnM19zZXRfdHhkKHRwLCB0cC0+dHhfcHJvZCwgbWFwLCB0eF9sZW4sIDAsIDEpOworCXRnM19zZXRfdHhkKHRuYXBpLCB0bmFwaS0+dHhfcHJvZCwgbWFwLCB0eF9sZW4sIDAsIDEpOwogCi0JdHAtPnR4X3Byb2QrKzsKKwl0bmFwaS0+dHhfcHJvZCsrOwogCW51bV9wa3RzKys7CiAKLQl0dzMyX3R4X21ib3goTUFJTEJPWF9TTkRIT1NUX1BST0RfSURYXzAgKyBURzNfNjRCSVRfUkVHX0xPVywKLQkJICAgICB0cC0+dHhfcHJvZCk7Ci0JdHIzMl9tYWlsYm94KE1BSUxCT1hfU05ESE9TVF9QUk9EX0lEWF8wICsgVEczXzY0QklUX1JFR19MT1cpOworCXR3MzJfdHhfbWJveCh0bmFwaS0+cHJvZG1ib3gsIHRuYXBpLT50eF9wcm9kKTsKKwl0cjMyX21haWxib3godG5hcGktPnByb2RtYm94KTsKIAogCXVkZWxheSgxMCk7CiAKIAkvKiAyNTAgdXNlYyB0byBhbGxvdyBlbm91Z2ggdGltZSBvbiBzb21lIDEwLzEwMCBNYnBzIGRldmljZXMuICAqLwogCWZvciAoaSA9IDA7IGkgPCAyNTsgaSsrKSB7CiAJCXR3MzJfZihIT1NUQ0NfTU9ERSwgdHAtPmNvYWxlc2NlX21vZGUgfCBIT1NUQ0NfTU9ERV9FTkFCTEUgfAotCQkgICAgICAgSE9TVENDX01PREVfTk9XKTsKKwkJICAgICAgIGNvYWxfbm93KTsKIAogCQl1ZGVsYXkoMTApOwogCi0JCXR4X2lkeCA9IHRwLT5od19zdGF0dXMtPmlkeFswXS50eF9jb25zdW1lcjsKLQkJcnhfaWR4ID0gdHAtPmh3X3N0YXR1cy0+aWR4WzBdLnJ4X3Byb2R1Y2VyOwotCQlpZiAoKHR4X2lkeCA9PSB0cC0+dHhfcHJvZCkgJiYKKwkJdHhfaWR4ID0gdG5hcGktPmh3X3N0YXR1cy0+aWR4WzBdLnR4X2NvbnN1bWVyOworCQlyeF9pZHggPSBybmFwaS0+aHdfc3RhdHVzLT5pZHhbMF0ucnhfcHJvZHVjZXI7CisJCWlmICgodHhfaWR4ID09IHRuYXBpLT50eF9wcm9kKSAmJgogCQkgICAgKHJ4X2lkeCA9PSAocnhfc3RhcnRfaWR4ICsgbnVtX3BrdHMpKSkKIAkJCWJyZWFrOwogCX0KQEAgLTk4MDEsMTMgKzEwMzg5LDEzIEBACiAJcGNpX3VubWFwX3NpbmdsZSh0cC0+cGRldiwgbWFwLCB0eF9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCWlmICh0eF9pZHggIT0gdHAtPnR4X3Byb2QpCisJaWYgKHR4X2lkeCAhPSB0bmFwaS0+dHhfcHJvZCkKIAkJZ290byBvdXQ7CiAKIAlpZiAocnhfaWR4ICE9IHJ4X3N0YXJ0X2lkeCArIG51bV9wa3RzKQogCQlnb3RvIG91dDsKIAotCWRlc2MgPSAmdHAtPnJ4X3JjYltyeF9zdGFydF9pZHhdOworCWRlc2MgPSAmcm5hcGktPnJ4X3JjYltyeF9zdGFydF9pZHhdOwogCWRlc2NfaWR4ID0gZGVzYy0+b3BhcXVlICYgUlhEX09QQVFVRV9JTkRFWF9NQVNLOwogCW9wYXF1ZV9rZXkgPSBkZXNjLT5vcGFxdWUgJiBSWERfT1BBUVVFX1JJTkdfTUFTSzsKIAlpZiAob3BhcXVlX2tleSAhPSBSWERfT1BBUVVFX1JJTkdfU1REKQpAQCAtOTgyMSw5ICsxMDQwOSw5IEBACiAJaWYgKHJ4X2xlbiAhPSB0eF9sZW4pCiAJCWdvdG8gb3V0OwogCi0Jcnhfc2tiID0gdHAtPnJ4X3N0ZF9idWZmZXJzW2Rlc2NfaWR4XS5za2I7CisJcnhfc2tiID0gdHByLT5yeF9zdGRfYnVmZmVyc1tkZXNjX2lkeF0uc2tiOwogCi0JbWFwID0gcGNpX3VubWFwX2FkZHIoJnRwLT5yeF9zdGRfYnVmZmVyc1tkZXNjX2lkeF0sIG1hcHBpbmcpOworCW1hcCA9IHBjaV91bm1hcF9hZGRyKCZ0cHItPnJ4X3N0ZF9idWZmZXJzW2Rlc2NfaWR4XSwgbWFwcGluZyk7CiAJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHRwLT5wZGV2LCBtYXAsIHJ4X2xlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCWZvciAoaSA9IDE0OyBpIDwgdHhfbGVuOyBpKyspIHsKQEAgLTk5OTcsNyArMTA1ODUsNyBAQAogCiAJc3dpdGNoKGNtZCkgewogCWNhc2UgU0lPQ0dNSUlQSFk6Ci0JCWRhdGEtPnBoeV9pZCA9IFBIWV9BRERSOworCQlkYXRhLT5waHlfaWQgPSB0cC0+cGh5X2FkZHI7CiAKIAkJLyogZmFsbHRocnUgKi8KIAljYXNlIFNJT0NHTUlJUkVHOiB7CkBAIC0xMDAyMiw5ICsxMDYxMCw2IEBACiAJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpCiAJCQlicmVhazsJCQkvKiBXZSBoYXZlIG5vIFBIWSAqLwogCi0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0KIAkJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKQogCQkJcmV0dXJuIC1FQUdBSU47CiAKQEAgLTEwMjM2LDggKzEwODIxLDcgQEAKIAludmNmZzEgPSB0cjMyKE5WUkFNX0NGRzEpOwogCWlmIChudmNmZzEgJiBOVlJBTV9DRkcxX0ZMQVNISUZfRU5BQikgewogCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJbnZjZmcxICY9IH5OVlJBTV9DRkcxX0NPTVBBVF9CWVBBU1M7CiAJCXR3MzIoTlZSQU1fQ0ZHMSwgbnZjZmcxKTsKIAl9CkBAIC0xMDI0NSw0MyArMTA4MjksNjkgQEAKIAlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzUwKSB8fAogCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkgewogCQlzd2l0Y2ggKG52Y2ZnMSAmIE5WUkFNX0NGRzFfVkVORE9SX01BU0spIHsKLQkJCWNhc2UgRkxBU0hfVkVORE9SX0FUTUVMX0ZMQVNIX0JVRkZFUkVEOgotCQkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotCQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9TSVpFOwotCQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZMQVNIX1ZFTkRPUl9BVE1FTF9GTEFTSF9VTkJVRkZFUkVEOgotCQkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotICAgICAgICAgICAgICAgICAgICAgICAgIAl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDI1RjUxMl9QQUdFX1NJWkU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZMQVNIX1ZFTkRPUl9BVE1FTF9FRVBST006Ci0JCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUMjRDNTEyX0NISVBfU0laRTsKLQkJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQkJCWJyZWFrOwotCQkJY2FzZSBGTEFTSF9WRU5ET1JfU1Q6Ci0JCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7Ci0JCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gU1RfTTQ1UEVYMF9QQUdFX1NJWkU7Ci0JCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJCQlicmVhazsKLQkJCWNhc2UgRkxBU0hfVkVORE9SX1NBSUZVTjoKLQkJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TQUlGVU47Ci0JCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gU0FJRlVOX1NBMjVGMFhYX1BBR0VfU0laRTsKLQkJCQlicmVhazsKLQkJCWNhc2UgRkxBU0hfVkVORE9SX1NTVF9TTUFMTDoKLQkJCWNhc2UgRkxBU0hfVkVORE9SX1NTVF9MQVJHRToKLQkJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TU1Q7Ci0JCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gU1NUXzI1VkYwWDBfUEFHRV9TSVpFOwotCQkJCWJyZWFrOworCQljYXNlIEZMQVNIX1ZFTkRPUl9BVE1FTF9GTEFTSF9CVUZGRVJFRDoKKwkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOworCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1NJWkU7CisJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfVkVORE9SX0FUTUVMX0ZMQVNIX1VOQlVGRkVSRUQ6CisJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKKwkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUMjVGNTEyX1BBR0VfU0laRTsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX1ZFTkRPUl9BVE1FTF9FRVBST006CisJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKKwkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUMjRDNTEyX0NISVBfU0laRTsKKwkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9WRU5ET1JfU1Q6CisJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKKwkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IFNUX000NVBFWDBfUEFHRV9TSVpFOworCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX1ZFTkRPUl9TQUlGVU46CisJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TQUlGVU47CisJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBTQUlGVU5fU0EyNUYwWFhfUEFHRV9TSVpFOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfVkVORE9SX1NTVF9TTUFMTDoKKwkJY2FzZSBGTEFTSF9WRU5ET1JfU1NUX0xBUkdFOgorCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1NUOworCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gU1NUXzI1VkYwWDBfUEFHRV9TSVpFOworCQkJYnJlYWs7CiAJCX0KLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7CiAJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9TSVpFOwogCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwogCX0KIH0KIAorc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19udnJhbV9nZXRfcGFnZXNpemUoc3RydWN0IHRnMyAqdHAsIHUzMiBudm1jZmcxKQoreworCXN3aXRjaCAobnZtY2ZnMSAmIE5WUkFNX0NGRzFfNTc1MlBBR0VfU0laRV9NQVNLKSB7CisJY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzI1NjoKKwkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjU2OworCQlicmVhazsKKwljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfNTEyOgorCQl0cC0+bnZyYW1fcGFnZXNpemUgPSA1MTI7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV8xSzoKKwkJdHAtPm52cmFtX3BhZ2VzaXplID0gMTAyNDsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzJLOgorCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyMDQ4OworCQlicmVhazsKKwljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfNEs6CisJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDQwOTY7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV8yNjQ6CisJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI2NDsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzUyODoKKwkJdHAtPm52cmFtX3BhZ2VzaXplID0gNTI4OworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfZ2V0XzU3NTJfbnZyYW1faW5mbyhzdHJ1Y3QgdGczICp0cCkKIHsKIAl1MzIgbnZjZmcxOwpAQCAtMTAyOTMsNDggKzEwOTAzLDI4IEBACiAJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BST1RFQ1RFRF9OVlJBTTsKIAogCXN3aXRjaCAobnZjZmcxICYgTlZSQU1fQ0ZHMV81NzUyVkVORE9SX01BU0spIHsKLQkJY2FzZSBGTEFTSF81NzUyVkVORE9SX0FUTUVMX0VFUFJPTV82NEtIWjoKLQkJY2FzZSBGTEFTSF81NzUyVkVORE9SX0FUTUVMX0VFUFJPTV8zNzZLSFo6Ci0JCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCQlicmVhazsKLQkJY2FzZSBGTEFTSF81NzUyVkVORE9SX0FUTUVMX0ZMQVNIX0JVRkZFUkVEOgotCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7Ci0JCQlicmVhazsKLQkJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMTA6Ci0JCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTIwOgotCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEU0MDoKLQkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NUOwotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOwotCQkJYnJlYWs7CisJY2FzZSBGTEFTSF81NzUyVkVORE9SX0FUTUVMX0VFUFJPTV82NEtIWjoKKwljYXNlIEZMQVNIXzU3NTJWRU5ET1JfQVRNRUxfRUVQUk9NXzM3NktIWjoKKwkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7CisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9BVE1FTF9GTEFTSF9CVUZGRVJFRDoKKwkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7CisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQlicmVhazsKKwljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUxMDoKKwljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUyMDoKKwljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEU0MDoKKwkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7CisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQlicmVhazsKIAl9CiAKIAlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgewotCQlzd2l0Y2ggKG52Y2ZnMSAmIE5WUkFNX0NGRzFfNTc1MlBBR0VfU0laRV9NQVNLKSB7Ci0JCQljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfMjU2OgotCQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKLQkJCQlicmVhazsKLQkJCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV81MTI6Ci0JCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gNTEyOwotCQkJCWJyZWFrOwotCQkJY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzFLOgotCQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDEwMjQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfMks6Ci0JCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjA0ODsKLQkJCQlicmVhazsKLQkJCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV80SzoKLQkJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSA0MDk2OwotCQkJCWJyZWFrOwotCQkJY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzI2NDoKLQkJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNjQ7Ci0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JZWxzZSB7CisJCXRnM19udnJhbV9nZXRfcGFnZXNpemUodHAsIG52Y2ZnMSk7CisJfSBlbHNlIHsKIAkJLyogRm9yIGVlcHJvbSwgc2V0IHBhZ2VzaXplIHRvIG1heGltdW0gZWVwcm9tIHNpemUgKi8KIAkJdHAtPm52cmFtX3BhZ2VzaXplID0gQVRNRUxfQVQyNEM1MTJfQ0hJUF9TSVpFOwogCkBAIC0xMDM1Nyw0NSArMTA5NDcsNDUgQEAKIAogCW52Y2ZnMSAmPSBOVlJBTV9DRkcxXzU3NTJWRU5ET1JfTUFTSzsKIAlzd2l0Y2ggKG52Y2ZnMSkgewotCQljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfMToKLQkJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzI6Ci0JCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8zOgotCQljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfNToKLQkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOwotCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjY0OwotCQkJaWYgKG52Y2ZnMSA9PSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzEgfHwKLQkJCSAgICBudmNmZzEgPT0gRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF81KQotCQkJCXRwLT5udnJhbV9zaXplID0gKHByb3RlY3QgPyAweDNlMjAwIDoKLQkJCQkJCSAgVEczX05WUkFNX1NJWkVfNTEyS0IpOwotCQkJZWxzZSBpZiAobnZjZmcxID09IEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfMikKLQkJCQl0cC0+bnZyYW1fc2l6ZSA9IChwcm90ZWN0ID8gMHgxZjIwMCA6Ci0JCQkJCQkgIFRHM19OVlJBTV9TSVpFXzI1NktCKTsKLQkJCWVsc2UKLQkJCQl0cC0+bnZyYW1fc2l6ZSA9IChwcm90ZWN0ID8gMHgxZjIwMCA6Ci0JCQkJCQkgIFRHM19OVlJBTV9TSVpFXzEyOEtCKTsKLQkJCWJyZWFrOwotCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUxMDoKLQkJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMjA6Ci0JCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTQwOgotCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7Ci0JCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNTY7Ci0JCQlpZiAobnZjZmcxID09IEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUxMCkKLQkJCQl0cC0+bnZyYW1fc2l6ZSA9IChwcm90ZWN0ID8KLQkJCQkJCSAgVEczX05WUkFNX1NJWkVfNjRLQiA6Ci0JCQkJCQkgIFRHM19OVlJBTV9TSVpFXzEyOEtCKTsKLQkJCWVsc2UgaWYgKG52Y2ZnMSA9PSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMjApCi0JCQkJdHAtPm52cmFtX3NpemUgPSAocHJvdGVjdCA/Ci0JCQkJCQkgIFRHM19OVlJBTV9TSVpFXzY0S0IgOgotCQkJCQkJICBURzNfTlZSQU1fU0laRV8yNTZLQik7Ci0JCQllbHNlCi0JCQkJdHAtPm52cmFtX3NpemUgPSAocHJvdGVjdCA/Ci0JCQkJCQkgIFRHM19OVlJBTV9TSVpFXzEyOEtCIDoKLQkJCQkJCSAgVEczX05WUkFNX1NJWkVfNTEyS0IpOwotCQkJYnJlYWs7CisJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzE6CisJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzI6CisJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzM6CisJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzU6CisJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOworCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjY0OworCQlpZiAobnZjZmcxID09IEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfMSB8fAorCQkgICAgbnZjZmcxID09IEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfNSkKKwkJCXRwLT5udnJhbV9zaXplID0gKHByb3RlY3QgPyAweDNlMjAwIDoKKwkJCQkJICBURzNfTlZSQU1fU0laRV81MTJLQik7CisJCWVsc2UgaWYgKG52Y2ZnMSA9PSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzIpCisJCQl0cC0+bnZyYW1fc2l6ZSA9IChwcm90ZWN0ID8gMHgxZjIwMCA6CisJCQkJCSAgVEczX05WUkFNX1NJWkVfMjU2S0IpOworCQllbHNlCisJCQl0cC0+bnZyYW1fc2l6ZSA9IChwcm90ZWN0ID8gMHgxZjIwMCA6CisJCQkJCSAgVEczX05WUkFNX1NJWkVfMTI4S0IpOworCQlicmVhazsKKwljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUxMDoKKwljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUyMDoKKwljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEU0MDoKKwkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7CisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNTY7CisJCWlmIChudmNmZzEgPT0gRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTEwKQorCQkJdHAtPm52cmFtX3NpemUgPSAocHJvdGVjdCA/CisJCQkJCSAgVEczX05WUkFNX1NJWkVfNjRLQiA6CisJCQkJCSAgVEczX05WUkFNX1NJWkVfMTI4S0IpOworCQllbHNlIGlmIChudmNmZzEgPT0gRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTIwKQorCQkJdHAtPm52cmFtX3NpemUgPSAocHJvdGVjdCA/CisJCQkJCSAgVEczX05WUkFNX1NJWkVfNjRLQiA6CisJCQkJCSAgVEczX05WUkFNX1NJWkVfMjU2S0IpOworCQllbHNlCisJCQl0cC0+bnZyYW1fc2l6ZSA9IChwcm90ZWN0ID8KKwkJCQkJICBURzNfTlZSQU1fU0laRV8xMjhLQiA6CisJCQkJCSAgVEczX05WUkFNX1NJWkVfNTEyS0IpOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTEwNDA2LDM0ICsxMDk5NiwzNCBAQAogCW52Y2ZnMSA9IHRyMzIoTlZSQU1fQ0ZHMSk7CiAKIAlzd2l0Y2ggKG52Y2ZnMSAmIE5WUkFNX0NGRzFfNTc1MlZFTkRPUl9NQVNLKSB7Ci0JCWNhc2UgRkxBU0hfNTc4N1ZFTkRPUl9BVE1FTF9FRVBST01fNjRLSFo6Ci0JCWNhc2UgRkxBU0hfNTc4N1ZFTkRPUl9BVE1FTF9FRVBST01fMzc2S0haOgotCQljYXNlIEZMQVNIXzU3ODdWRU5ET1JfTUlDUk9fRUVQUk9NXzY0S0haOgotCQljYXNlIEZMQVNIXzU3ODdWRU5ET1JfTUlDUk9fRUVQUk9NXzM3NktIWjoKLQkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUMjRDNTEyX0NISVBfU0laRTsKKwljYXNlIEZMQVNIXzU3ODdWRU5ET1JfQVRNRUxfRUVQUk9NXzY0S0haOgorCWNhc2UgRkxBU0hfNTc4N1ZFTkRPUl9BVE1FTF9FRVBST01fMzc2S0haOgorCWNhc2UgRkxBU0hfNTc4N1ZFTkRPUl9NSUNST19FRVBST01fNjRLSFo6CisJY2FzZSBGTEFTSF81Nzg3VkVORE9SX01JQ1JPX0VFUFJPTV8zNzZLSFo6CisJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOworCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDI0QzUxMl9DSElQX1NJWkU7CiAKLQkJCW52Y2ZnMSAmPSB+TlZSQU1fQ0ZHMV9DT01QQVRfQllQQVNTOwotCQkJdHczMihOVlJBTV9DRkcxLCBudmNmZzEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9BVE1FTF9GTEFTSF9CVUZGRVJFRDoKLQkJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzE6Ci0JCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8yOgotCQljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfMzoKLQkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOwotCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjY0OwotCQkJYnJlYWs7Ci0JCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTEwOgotCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUyMDoKLQkJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFNDA6Ci0JCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKLQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKLQkJCWJyZWFrOworCQludmNmZzEgJj0gfk5WUkFNX0NGRzFfQ09NUEFUX0JZUEFTUzsKKwkJdHczMihOVlJBTV9DRkcxLCBudmNmZzEpOworCQlicmVhazsKKwljYXNlIEZMQVNIXzU3NTJWRU5ET1JfQVRNRUxfRkxBU0hfQlVGRkVSRUQ6CisJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzE6CisJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzI6CisJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzM6CisJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOworCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjY0OworCQlicmVhazsKKwljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUxMDoKKwljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUyMDoKKwljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEU0MDoKKwkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7CisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNTY7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtMTA0NTEsNjMgKzExMDQxLDYzIEBACiAKIAludmNmZzEgJj0gTlZSQU1fQ0ZHMV81NzUyVkVORE9SX01BU0s7CiAJc3dpdGNoIChudmNmZzEpIHsKLQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX0FEQjAyMUQ6Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIwNDFEOgotCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfQURCMDgxRDoKLQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX0FEQjE2MUQ6Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9NREIwMjFEOgotCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfTURCMDQxRDoKLQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX01EQjA4MUQ6Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9NREIxNjFEOgotCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7Ci0JCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TOwotCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjU2OwotCQkJYnJlYWs7Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9BX000NVBFMjA6Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9BX000NVBFNDA6Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9BX000NVBFODA6Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9BX000NVBFMTY6Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9NX000NVBFMjA6Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9NX000NVBFNDA6Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9NX000NVBFODA6Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9NX000NVBFMTY6Ci0JCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKLQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKLQkJCWJyZWFrOworCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIwMjFEOgorCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIwNDFEOgorCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIwODFEOgorCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIxNjFEOgorCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9NREIwMjFEOgorCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9NREIwNDFEOgorCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9NREIwODFEOgorCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9NREIxNjFEOgorCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlM7CisJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX0FfTTQ1UEUyMDoKKwljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfQV9NNDVQRTQwOgorCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9BX000NVBFODA6CisJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX0FfTTQ1UEUxNjoKKwljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfTV9NNDVQRTIwOgorCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9NX000NVBFNDA6CisJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX01fTTQ1UEU4MDoKKwljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfTV9NNDVQRTE2OgorCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKHByb3RlY3QpIHsKIAkJdHAtPm52cmFtX3NpemUgPSB0cjMyKE5WUkFNX0FERFJfTE9DS09VVCk7CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChudmNmZzEpIHsKLQkJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIxNjFEOgotCQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX01EQjE2MUQ6Ci0JCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfQV9NNDVQRTE2OgotCQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX01fTTQ1UEUxNjoKLQkJCQl0cC0+bnZyYW1fc2l6ZSA9IFRHM19OVlJBTV9TSVpFXzJNQjsKLQkJCQlicmVhazsKLQkJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIwODFEOgotCQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX01EQjA4MUQ6Ci0JCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfQV9NNDVQRTgwOgotCQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX01fTTQ1UEU4MDoKLQkJCQl0cC0+bnZyYW1fc2l6ZSA9IFRHM19OVlJBTV9TSVpFXzFNQjsKLQkJCQlicmVhazsKLQkJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIwNDFEOgotCQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX01EQjA0MUQ6Ci0JCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfQV9NNDVQRTQwOgotCQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX01fTTQ1UEU0MDoKLQkJCQl0cC0+bnZyYW1fc2l6ZSA9IFRHM19OVlJBTV9TSVpFXzUxMktCOwotCQkJCWJyZWFrOwotCQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX0FEQjAyMUQ6Ci0JCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfTURCMDIxRDoKLQkJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9BX000NVBFMjA6Ci0JCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfTV9NNDVQRTIwOgotCQkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMjU2S0I7Ci0JCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIxNjFEOgorCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfTURCMTYxRDoKKwkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX0FfTTQ1UEUxNjoKKwkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX01fTTQ1UEUxNjoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMk1COworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIwODFEOgorCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfTURCMDgxRDoKKwkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX0FfTTQ1UEU4MDoKKwkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX01fTTQ1UEU4MDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMU1COworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIwNDFEOgorCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfTURCMDQxRDoKKwkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX0FfTTQ1UEU0MDoKKwkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX01fTTQ1UEU0MDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfNTEyS0I7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX0FEQjAyMUQ6CisJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9NREIwMjFEOgorCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfQV9NNDVQRTIwOgorCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfTV9NNDVQRTIwOgorCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV8yNTZLQjsKKwkJCWJyZWFrOwogCQl9CiAJfQogfQpAQCAtMTA1ODYsMzQgKzExMTc2LDg0IEBACiAJCXJldHVybjsKIAl9CiAKLQlzd2l0Y2ggKG52Y2ZnMSAmIE5WUkFNX0NGRzFfNTc1MlBBR0VfU0laRV9NQVNLKSB7Ci0JY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzI1NjoKKwl0ZzNfbnZyYW1fZ2V0X3BhZ2VzaXplKHRwLCBudmNmZzEpOworCWlmICh0cC0+bnZyYW1fcGFnZXNpemUgIT0gMjY0ICYmIHRwLT5udnJhbV9wYWdlc2l6ZSAhPSA1MjgpCiAJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlM7Ci0JCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKK30KKworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX2dldF81NzE3X252cmFtX2luZm8oc3RydWN0IHRnMyAqdHApCit7CisJdTMyIG52Y2ZnMTsKKworCW52Y2ZnMSA9IHRyMzIoTlZSQU1fQ0ZHMSk7CisKKwlzd2l0Y2ggKG52Y2ZnMSAmIE5WUkFNX0NGRzFfNTc1MlZFTkRPUl9NQVNLKSB7CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX0FUTUVMX0VFUFJPTToKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfTUlDUk9fRUVQUk9NOgorCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJdHAtPm52cmFtX3BhZ2VzaXplID0gQVRNRUxfQVQyNEM1MTJfQ0hJUF9TSVpFOworCisJCW52Y2ZnMSAmPSB+TlZSQU1fQ0ZHMV9DT01QQVRfQllQQVNTOworCQl0dzMyKE5WUkFNX0NGRzEsIG52Y2ZnMSk7CisJCXJldHVybjsKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfTURCMDExRDoKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfQURCMDExQjoKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfQURCMDExRDoKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfTURCMDIxRDoKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfQURCMDIxQjoKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfQURCMDIxRDoKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfNDVVU1BUOgorCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisKKwkJc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxXzU3NTJWRU5ET1JfTUFTSykgeworCQljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfTURCMDIxRDoKKwkJY2FzZSBGTEFTSF81NzE3VkVORE9SX0FUTUVMX0FEQjAyMUI6CisJCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9BVE1FTF9BREIwMjFEOgorCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV8yNTZLQjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV8xMjhLQjsKKwkJCWJyZWFrOworCQl9CiAJCWJyZWFrOwotCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV81MTI6Ci0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlM7Ci0JCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDUxMjsKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfTV9NMjVQRTEwOgorCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9TVF9BX00yNVBFMTA6CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX01fTTQ1UEUxMDoKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfQV9NNDVQRTEwOgorCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9TVF9NX00yNVBFMjA6CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX0FfTTI1UEUyMDoKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfTV9NNDVQRTIwOgorCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9TVF9BX000NVBFMjA6CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUXzI1VVNQVDoKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfNDVVU1BUOgorCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisKKwkJc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxXzU3NTJWRU5ET1JfTUFTSykgeworCQljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfTV9NMjVQRTIwOgorCQljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfQV9NMjVQRTIwOgorCQljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfTV9NNDVQRTIwOgorCQljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfQV9NNDVQRTIwOgorCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV8yNTZLQjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV8xMjhLQjsKKwkJCWJyZWFrOworCQl9CiAJCWJyZWFrOwotCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV8xSzoKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUzsKLQkJdHAtPm52cmFtX3BhZ2VzaXplID0gMTAyNDsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzJLOgotCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TOwotCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyMDQ4OwotCQlicmVhazsKLQljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfNEs6Ci0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlM7Ci0JCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDQwOTY7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV8yNjQ6Ci0JCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI2NDsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzUyODoKLQkJdHAtPm52cmFtX3BhZ2VzaXplID0gNTI4OwotCQlicmVhazsKKwlkZWZhdWx0OgorCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19OT19OVlJBTTsKKwkJcmV0dXJuOwogCX0KKworCXRnM19udnJhbV9nZXRfcGFnZXNpemUodHAsIG52Y2ZnMSk7CisJaWYgKHRwLT5udnJhbV9wYWdlc2l6ZSAhPSAyNjQgJiYgdHAtPm52cmFtX3BhZ2VzaXplICE9IDUyOCkKKwkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUzsKIH0KIAogLyogQ2hpcHMgb3RoZXIgdGhhbiA1NzAwLzU3MDEgdXNlIHRoZSBOVlJBTSBmb3IgZmV0Y2hpbmcgaW5mby4gKi8KQEAgLTEwNjU4LDYgKzExMjk4LDggQEAKIAkJCXRnM19nZXRfNTkwNl9udnJhbV9pbmZvKHRwKTsKIAkJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwKQogCQkJdGczX2dldF81Nzc4MF9udnJhbV9pbmZvKHRwKTsKKwkJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpCisJCQl0ZzNfZ2V0XzU3MTdfbnZyYW1faW5mbyh0cCk7CiAJCWVsc2UKIAkJCXRnM19nZXRfbnZyYW1faW5mbyh0cCk7CiAKQEAgLTExNDg1LDYgKzEyMTI3LDkgQEAKIAllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODAgJiYKIAkJIHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTApCiAJCXN0cmNweSh0cC0+Ym9hcmRfcGFydF9udW1iZXIsICJCQ001Nzc5MCIpOworCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCAmJgorCQkgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc4OCkKKwkJc3RyY3B5KHRwLT5ib2FyZF9wYXJ0X251bWJlciwgIkJDTTU3Nzg4Iik7CiAJZWxzZQogCQlzdHJjcHkodHAtPmJvYXJkX3BhcnRfbnVtYmVyLCAibm9uZSIpOwogfQpAQCAtMTE3NjgsOCArMTI0MTMsMTcgQEAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWX1VTRV9QUk9EX0lEX1JFRykgewogCQl1MzIgcHJvZF9pZF9hc2ljX3JldjsKIAotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9QUk9ESURfQVNJQ1JFViwKLQkJCQkgICAgICAmcHJvZF9pZF9hc2ljX3Jldik7CisJCWlmICh0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTdDIHx8CisJCSAgICB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTdTIHx8CisJCSAgICB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MThDIHx8CisJCSAgICB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MThTKQorCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRwLT5wZGV2LAorCQkJCQkgICAgICBURzNQQ0lfR0VOMl9QUk9ESURfQVNJQ1JFViwKKwkJCQkJICAgICAgJnByb2RfaWRfYXNpY19yZXYpOworCQllbHNlCisJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9QUk9ESURfQVNJQ1JFViwKKwkJCQkJICAgICAgJnByb2RfaWRfYXNpY19yZXYpOworCiAJCXRwLT5wY2lfY2hpcF9yZXZfaWQgPSBwcm9kX2lkX2FzaWNfcmV2OwogCX0KIApAQCAtMTE5MDcsOCArMTI1NjEsOSBAQAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NSVNDX0hPU1RfQ1RSTCwKIAkJCSAgICAgICB0cC0+bWlzY19ob3N0X2N0cmwpOwogCi0JaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNCkgfHwKLQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE0KSkKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTQgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpCiAJCXRwLT5wZGV2X3BlZXIgPSB0ZzNfZmluZF9wZWVyKHRwKTsKIAogCS8qIEludGVudGlvbmFsbHkgZXhjbHVkZSBBU0lDX1JFVl81OTA2ICovCkBAIC0xMTkxNyw3ICsxMjU3Miw4IEBACiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxIHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8Ci0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCkKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwIHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3KQogCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM181NzU1X1BMVVM7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTAgfHwKQEAgLTExOTY1LDkgKzEyNjIxLDE5IEBACiAJCX0KIAl9CiAKKwl0cC0+aXJxX21heCA9IDE7CisKKyNpZmRlZiBURzNfTkFQSQorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykgeworCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1NVUFBPUlRfTVNJWDsKKwkJdHAtPmlycV9tYXggPSBURzNfSVJRX01BWF9WRUNTOworCX0KKyNlbmRpZgorCiAJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHx8Ci0JICAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfSlVNQk9fQ0FQQUJMRTsKKwkgICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpIHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3KQorCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0pVTUJPX0NBUEFCTEU7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9QQ0lTVEFURSwKIAkJCSAgICAgICZwY2lfc3RhdGVfcmVnKTsKQEAgLTEyMTAwLDcgKzEyNzY2LDYgQEAKIAkJdHAtPndyaXRlMzIgPSB0ZzNfd3JpdGVfZmx1c2hfcmVnMzI7CiAJfQogCi0KIAlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UWERfTUJPWF9IV0JVRykgfHwKIAkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19NQk9YX1dSSVRFX1JFT1JERVIpKSB7CiAJCXRwLT53cml0ZTMyX3R4X21ib3ggPSB0ZzNfd3JpdGUzMl90eF9tYm94OwpAQCAtMTIxNTksNyArMTI4MjQsOCBAQAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODApCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKIAkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19DUE1VX1BSRVNFTlQ7CiAKIAkvKiBTZXQgdXAgdHAtPmdyY19sb2NhbF9jdHJsIGJlZm9yZSBjYWxsaW5nIHRnM19zZXRfcG93ZXJfc3RhdGUoKS4KQEAgLTEyMjE2LDEyICsxMjg4MiwxNSBAQAogCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1dPTF9TUEVFRF8xMDBNQjsKIAl9CiAKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCisJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1BIWV9JU19GRVQ7CisKIAkvKiBBIGZldyBib2FyZHMgZG9uJ3Qgd2FudCBFdGhlcm5ldEBXaXJlU3BlZWQgcGh5IGZlYXR1cmUgKi8KIAlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAwKSB8fAogCSAgICAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA1KSAmJgogCSAgICAgKHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzA1X0EwKSAmJgogCSAgICAgKHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzA1X0ExKSkgfHwKLQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB8fAorCSAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSB8fAogCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTKSkKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfTk9fRVRIX1dJUkVfU1BFRUQ7CiAKQEAgLTEyMjMyLDkgKzEyOTAxLDEwIEBACiAJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BIWV81NzA0X0EwX0JVRzsKIAogCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81OTA2ICYmCisJICAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSAmJgogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc4NSAmJgotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc3ODApIHsKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3NzgwICYmCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3KSB7CiAJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcgfHwKIAkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0IHx8CkBAIC0xMjI2OSw2ICsxMjkzOSwxMSBAQAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODApCiAJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1VTRV9QSFlMSUI7CiAKKwlpZiAoKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81Nzc4MF9BMSAmJgorCSAgICAgdHIzMihSQ1ZMUENfU1RBVFNfRU5BQkxFKSAmIFJDVkxQQ19TVEFUU0VOQUJfQVNGX0ZJWCkgfHwKKwkgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3NzgwX0EwKQorCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19UT0dHTEVfMTBfMTAwX0wxUExMUEQ7CisKIAllcnIgPSB0ZzNfbWRpb19pbml0KHRwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTIzNTIsNyArMTMwMjcsNyBAQAogCSAgICAgIHRwLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9USUdPTjNfNTc1M0YgfHwKIAkgICAgICB0cC0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODdGKSkgfHwKIAkgICAgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc5MCB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKKwkgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0lTX0ZFVCkpCiAJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfMTBfMTAwX09OTFk7CiAKIAllcnIgPSB0ZzNfcGh5X3Byb2JlKHRwKTsKQEAgLTEyNDcxLDggKzEzMTQ2LDEwIEBACiAJCQl0dzMyX2YoTlZSQU1fQ01ELCBOVlJBTV9DTURfUkVTRVQpOwogCQllbHNlCiAJCQl0ZzNfbnZyYW1fdW5sb2NrKHRwKTsKLQl9Ci0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQorCX0gZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpIHsKKwkJaWYgKHRyMzIoVEczX0NQTVVfU1RBVFVTKSAmIFRHM19DUE1VX1NUQVRVU19QQ0lFX0ZVTkMpCisJCQltYWNfb2Zmc2V0ID0gMHhjYzsKKwl9IGVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQogCQltYWNfb2Zmc2V0ID0gMHgxMDsKIAogCS8qIEZpcnN0IHRyeSB0byBnZXQgaXQgZnJvbSBNQUMgYWRkcmVzcyBtYWlsYm94LiAqLwpAQCAtMTI5NTMsNyArMTM2MzAsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX2luaXRfYnVmbWdyX2NvbmZpZyhzdHJ1Y3QgdGczICp0cCkKIHsKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHsKKwlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMgJiYKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MTcpIHsKIAkJdHAtPmJ1Zm1ncl9jb25maWcubWJ1Zl9yZWFkX2RtYV9sb3dfd2F0ZXIgPQogCQkJREVGQVVMVF9NQl9SRE1BX0xPV19XQVRFUl81NzA1OwogCQl0cC0+YnVmbWdyX2NvbmZpZy5tYnVmX21hY19yeF9sb3dfd2F0ZXIgPQpAQCAtMTMxNTgsNyArMTM4MzYsOCBAQAogCXN0YXRpYyBpbnQgdGczX3ZlcnNpb25fcHJpbnRlZCA9IDA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgdGczICp0cDsKLQlpbnQgZXJyLCBwbV9jYXA7CisJaW50IGksIGVyciwgcG1fY2FwOworCXUzMiBzbmRtYngsIHJjdm1ieCwgaW50bWJ4OwogCWNoYXIgc3RyWzQwXTsKIAl1NjQgZG1hX21hc2ssIHBlcnNpc3RfZG1hX21hc2s7CiAKQEAgLTEzMTkwLDcgKzEzODY5LDcgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwogCX0KIAotCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqdHApKTsKKwlkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2YoKnRwKSwgVEczX0lSUV9NQVhfVkVDUyk7CiAJaWYgKCFkZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRXRoZXJkZXYgYWxsb2MgZmFpbGVkLCBhYm9ydGluZy5cbiIpOwogCQllcnIgPSAtRU5PTUVNOwpAQCAtMTMyNTIsOSArMTM5MzEsNTIgQEAKIAogCXRwLT5yeF9wZW5kaW5nID0gVEczX0RFRl9SWF9SSU5HX1BFTkRJTkc7CiAJdHAtPnJ4X2p1bWJvX3BlbmRpbmcgPSBURzNfREVGX1JYX0pVTUJPX1JJTkdfUEVORElORzsKLQl0cC0+dHhfcGVuZGluZyA9IFRHM19ERUZfVFhfUklOR19QRU5ESU5HOwogCi0JbmV0aWZfbmFwaV9hZGQoZGV2LCAmdHAtPm5hcGksIHRnM19wb2xsLCA2NCk7CisJaW50bWJ4ID0gTUFJTEJPWF9JTlRFUlJVUFRfMCArIFRHM182NEJJVF9SRUdfTE9XOworCXJjdm1ieCA9IE1BSUxCT1hfUkNWUkVUX0NPTl9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XOworCXNuZG1ieCA9IE1BSUxCT1hfU05ESE9TVF9QUk9EX0lEWF8wICsgVEczXzY0QklUX1JFR19MT1c7CisJZm9yIChpID0gMDsgaSA8IFRHM19JUlFfTUFYX1ZFQ1M7IGkrKykgeworCQlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpW2ldOworCisJCXRuYXBpLT50cCA9IHRwOworCQl0bmFwaS0+dHhfcGVuZGluZyA9IFRHM19ERUZfVFhfUklOR19QRU5ESU5HOworCisJCXRuYXBpLT5pbnRfbWJveCA9IGludG1ieDsKKwkJaWYgKGkgPCA0KQorCQkJaW50bWJ4ICs9IDB4ODsKKwkJZWxzZQorCQkJaW50bWJ4ICs9IDB4NDsKKworCQl0bmFwaS0+Y29uc21ib3ggPSByY3ZtYng7CisJCXRuYXBpLT5wcm9kbWJveCA9IHNuZG1ieDsKKworCQlpZiAoaSkKKwkJCXRuYXBpLT5jb2FsX25vdyA9IEhPU1RDQ19NT0RFX0NPQUxfVkVDMV9OT1cgPDwgKGkgLSAxKTsKKwkJZWxzZQorCQkJdG5hcGktPmNvYWxfbm93ID0gSE9TVENDX01PREVfTk9XOworCisJCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TVVBQT1JUX01TSVgpKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogSWYgd2Ugc3VwcG9ydCBNU0lYLCB3ZSdsbCBiZSB1c2luZyBSU1MuICBJZiB3ZSdyZSB1c2luZworCQkgKiBSU1MsIHRoZSBmaXJzdCB2ZWN0b3Igb25seSBoYW5kbGVzIGxpbmsgaW50ZXJydXB0cyBhbmQgdGhlCisJCSAqIHJlbWFpbmluZyB2ZWN0b3JzIGhhbmRsZSByeCBhbmQgdHggaW50ZXJydXB0cy4gIFJldXNlIHRoZQorCQkgKiBtYWlsYm94IHZhbHVlcyBmb3IgdGhlIG5leHQgaXRlcmF0aW9uLiAgVGhlIHZhbHVlcyB3ZSBzZXR1cAorCQkgKiBhYm92ZSBhcmUgc3RpbGwgdXNlZnVsIGZvciB0aGUgc2luZ2xlIHZlY3RvcmVkIG1vZGUuCisJCSAqLworCQlpZiAoIWkpCisJCQljb250aW51ZTsKKworCQlyY3ZtYnggKz0gMHg4OworCisJCWlmIChzbmRtYnggJiAweDQpCisJCQlzbmRtYnggLT0gMHg0OworCQllbHNlCisJCQlzbmRtYnggKz0gMHhjOworCX0KKworCW5ldGlmX25hcGlfYWRkKGRldiwgJnRwLT5uYXBpWzBdLm5hcGksIHRnM19wb2xsLCA2NCk7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZ0ZzNfZXRodG9vbF9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRHM19UWF9USU1FT1VUOwogCWRldi0+aXJxID0gcGRldi0+aXJxOwpAQCAtMTMzNDgsNyArMTQwNzAsOCBAQAogCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0ICYmCiAJCSAgICAgR0VUX0NISVBfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IENISVBSRVZfNTc4NF9BWCkgfHwKIAkJCUdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8Ci0JCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODApCisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODAgfHwKKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3KQogCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTT19FQ047CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IGIzMzQ3YzQuLjgyYjQ1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5oCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5oCkBAIC00Myw3ICs0MywxMyBAQAogI2RlZmluZSAgVEczUENJX0RFVklDRV9USUdPTjNfNTc3ODAJIDB4MTY5MgogI2RlZmluZSAgVEczUENJX0RFVklDRV9USUdPTjNfNTc3NjAJIDB4MTY5MAogI2RlZmluZSAgVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTAJIDB4MTY5NAotI2RlZmluZSAgVEczUENJX0RFVklDRV9USUdPTjNfNTc3MjAJIDB4MTY4YworI2RlZmluZSAgVEczUENJX0RFVklDRV9USUdPTjNfNTc3ODgJIDB4MTY5MQorI2RlZmluZSAgVEczUENJX0RFVklDRV9USUdPTjNfNTc4NV9HCSAweDE2OTkgLyogR1BIWSAqLworI2RlZmluZSAgVEczUENJX0RFVklDRV9USUdPTjNfNTc4NV9GCSAweDE2YTAgLyogMTAvMTAwIG9ubHkgKi8KKyNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTdDCSAweDE2NTUKKyNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTdTCSAweDE2NTYKKyNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MThDCSAweDE2NjUKKyNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MThTCSAweDE2NjYKIC8qIDB4MDQgLS0+IDB4NjQgdW51c2VkICovCiAjZGVmaW5lIFRHM1BDSV9NU0lfREFUQQkJCTB4MDAwMDAwNjQKIC8qIDB4NjYgLS0+IDB4NjggdW51c2VkICovCkBAIC0xMTUsNiArMTIxLDcgQEAKICNkZWZpbmUgICBBU0lDX1JFVl81NzYxCQkJIDB4NTc2MQogI2RlZmluZSAgIEFTSUNfUkVWXzU3ODUJCQkgMHg1Nzg1CiAjZGVmaW5lICAgQVNJQ19SRVZfNTc3ODAJCSAweDU3NzgwCisjZGVmaW5lICAgQVNJQ19SRVZfNTcxNwkJCSAweDU3MTcKICNkZWZpbmUgIEdFVF9DSElQX1JFVihDSElQX1JFVl9JRCkJKChDSElQX1JFVl9JRCkgPj4gOCkKICNkZWZpbmUgICBDSElQUkVWXzU3MDBfQVgJCSAweDcwCiAjZGVmaW5lICAgQ0hJUFJFVl81NzAwX0JYCQkgMHg3MQpAQCAtMjAxLDIyICsyMDgsMjQgQEAKICNkZWZpbmUgVEczUENJX01FTV9XSU5fQkFTRV9BRERSCTB4MDAwMDAwN2MKICNkZWZpbmUgVEczUENJX1JFR19EQVRBCQkJMHgwMDAwMDA4MAogI2RlZmluZSBURzNQQ0lfTUVNX1dJTl9EQVRBCQkweDAwMDAwMDg0Ci0jZGVmaW5lIFRHM1BDSV9NT0RFX0NUUkwJCTB4MDAwMDAwODgKLSNkZWZpbmUgVEczUENJX01JU0NfQ0ZHCQkJMHgwMDAwMDA4YwogI2RlZmluZSBURzNQQ0lfTUlTQ19MT0NBTF9DVFJMCQkweDAwMDAwMDkwCiAvKiAweDk0IC0tPiAweDk4IHVudXNlZCAqLwogI2RlZmluZSBURzNQQ0lfU1REX1JJTkdfUFJPRF9JRFgJMHgwMDAwMDA5OCAvKiA2NC1iaXQgKi8KICNkZWZpbmUgVEczUENJX1JDVl9SRVRfUklOR19DT05fSURYCTB4MDAwMDAwYTAgLyogNjQtYml0ICovCi0jZGVmaW5lIFRHM1BDSV9TTkRfUFJPRF9JRFgJCTB4MDAwMDAwYTggLyogNjQtYml0ICovCi0vKiAweGIwIC0tPiAweGI4IHVudXNlZCAqLworLyogMHhhMCAtLT4gMHhiOCB1bnVzZWQgKi8KICNkZWZpbmUgVEczUENJX0RVQUxfTUFDX0NUUkwJCTB4MDAwMDAwYjgKICNkZWZpbmUgIERVQUxfTUFDX0NUUkxfQ0hfTUFTSwkJIDB4MDAwMDAwMDMKICNkZWZpbmUgIERVQUxfTUFDX0NUUkxfSUQJCSAweDAwMDAwMDA0CiAjZGVmaW5lIFRHM1BDSV9QUk9ESURfQVNJQ1JFVgkJMHgwMDAwMDBiYwogI2RlZmluZSAgUFJPRF9JRF9BU0lDX1JFVl9NQVNLCQkgMHgwZmZmZmZmZgotLyogMHhjMCAtLT4gMHgxMDAgdW51c2VkICovCisvKiAweGMwIC0tPiAweGY0IHVudXNlZCAqLwogCi0vKiAweDEwMCAtLT4gMHgyMDAgdW51c2VkICovCisjZGVmaW5lIFRHM1BDSV9HRU4yX1BST0RJRF9BU0lDUkVWCTB4MDAwMDAwZjQKKy8qIDB4ZjggLS0+IDB4MjAwIHVudXNlZCAqLworCisjZGVmaW5lIFRHM19DT1JSX0VSUl9TVEFUCQkweDAwMDAwMTEwCisjZGVmaW5lICBURzNfQ09SUl9FUlJfU1RBVF9DTEVBUgkweGZmZmZmZmZmCisvKiAweDExNCAtLT4gMHgyMDAgdW51c2VkICovCiAKIC8qIE1haWxib3ggcmVnaXN0ZXJzICovCiAjZGVmaW5lIE1BSUxCT1hfSU5URVJSVVBUXzAJCTB4MDAwMDAyMDAgLyogNjQtYml0ICovCkBAIC00NDIsNiArNDUxLDEyIEBACiAjZGVmaW5lICBSWF9NT0RFX1BST01JU0MJCSAweDAwMDAwMTAwCiAjZGVmaW5lICBSWF9NT0RFX05PX0NSQ19DSEVDSwkJIDB4MDAwMDAyMDAKICNkZWZpbmUgIFJYX01PREVfS0VFUF9WTEFOX1RBRwkJIDB4MDAwMDA0MDAKKyNkZWZpbmUgIFJYX01PREVfUlNTX0lQVjRfSEFTSF9FTgkgMHgwMDAxMDAwMAorI2RlZmluZSAgUlhfTU9ERV9SU1NfVENQX0lQVjRfSEFTSF9FTgkgMHgwMDAyMDAwMAorI2RlZmluZSAgUlhfTU9ERV9SU1NfSVBWNl9IQVNIX0VOCSAweDAwMDQwMDAwCisjZGVmaW5lICBSWF9NT0RFX1JTU19UQ1BfSVBWNl9IQVNIX0VOCSAweDAwMDgwMDAwCisjZGVmaW5lICBSWF9NT0RFX1JTU19JVEJMX0hBU0hfQklUU183CSAweDAwNzAwMDAwCisjZGVmaW5lICBSWF9NT0RFX1JTU19FTkFCTEUJCSAweDAwODAwMDAwCiAjZGVmaW5lICBSWF9NT0RFX0lQVjZfQ1NVTV9FTkFCTEUJIDB4MDEwMDAwMDAKICNkZWZpbmUgTUFDX1JYX1NUQVRVUwkJCTB4MDAwMDA0NmMKICNkZWZpbmUgIFJYX1NUQVRVU19SRU1PVEVfVFhfWE9GRkVECSAweDAwMDAwMDAxCkBAIC01MjIsNiArNTM3LDEwIEBACiAvKiAweDU5OCAtLT4gMHg1YTAgdW51c2VkICovCiAjZGVmaW5lIE1BQ19QSFlDRkcxCQkJMHgwMDAwMDVhMAogI2RlZmluZSAgTUFDX1BIWUNGRzFfUkdNSUlfSU5UCQkgMHgwMDAwMDAwMQorI2RlZmluZSAgTUFDX1BIWUNGRzFfUlhDTEtfVE9fTUFTSwkgMHgwMDAwMWZmMAorI2RlZmluZSAgTUFDX1BIWUNGRzFfUlhDTEtfVElNRU9VVAkgMHgwMDAwMTAwMAorI2RlZmluZSAgTUFDX1BIWUNGRzFfVFhDTEtfVE9fTUFTSwkgMHgwMWZmMDAwMAorI2RlZmluZSAgTUFDX1BIWUNGRzFfVFhDTEtfVElNRU9VVAkgMHgwMTAwMDAwMAogI2RlZmluZSAgTUFDX1BIWUNGRzFfUkdNSUlfRVhUX1JYX0RFQwkgMHgwMjAwMDAwMAogI2RlZmluZSAgTUFDX1BIWUNGRzFfUkdNSUlfU05EX1NUQVRfRU4JIDB4MDQwMDAwMDAKICNkZWZpbmUgIE1BQ19QSFlDRkcxX1RYQ19EUlYJCSAweDIwMDAwMDAwCkBAIC02NzUsNiArNjk0LDcgQEAKICNkZWZpbmUgIFNHX0RJR19QQVJUTkVSX0ZVTExfRFVQTEVYCSAweDAwMDIwMDAwIC8qIElmICFNUkFEVl9DUkMxNl9TRUxFQ1QgKi8KICNkZWZpbmUgIFNHX0RJR19QQVJUTkVSX05FWFRfUEFHRQkgMHgwMDAxMDAwMCAvKiBJZiAhTVJBRFZfQ1JDMTZfU0VMRUNUICovCiAjZGVmaW5lICBTR19ESUdfQVVUT05FR19TVEFURV9NQVNLCSAweDAwMDAwZmYwCisjZGVmaW5lICBTR19ESUdfSVNfU0VSREVTCQkgMHgwMDAwMDEwMAogI2RlZmluZSAgU0dfRElHX0NPTU1BX0RFVEVDVE9SCQkgMHgwMDAwMDAwOAogI2RlZmluZSAgU0dfRElHX01BQ19BQ0tfU1RBVFVTCQkgMHgwMDAwMDAwNAogI2RlZmluZSAgU0dfRElHX0FVVE9ORUdfQ09NUExFVEUJIDB4MDAwMDAwMDIKQEAgLTY4Miw3ICs3MDIsMjIgQEAKIC8qIDB4NWI4IC0tPiAweDYwMCB1bnVzZWQgKi8KICNkZWZpbmUgTUFDX1RYX01BQ19TVEFURV9CQVNFCQkweDAwMDAwNjAwIC8qIDE2IGJ5dGVzICovCiAjZGVmaW5lIE1BQ19SWF9NQUNfU1RBVEVfQkFTRQkJMHgwMDAwMDYxMCAvKiAyMCBieXRlcyAqLwotLyogMHg2MjQgLS0+IDB4ODAwIHVudXNlZCAqLworLyogMHg2MjQgLS0+IDB4NjcwIHVudXNlZCAqLworCisjZGVmaW5lIE1BQ19SU1NfSU5ESVJfVEJMXzAJCTB4MDAwMDA2MzAKKworI2RlZmluZSBNQUNfUlNTX0hBU0hfS0VZXzAJCTB4MDAwMDA2NzAKKyNkZWZpbmUgTUFDX1JTU19IQVNIX0tFWV8xCQkweDAwMDAwNjc0CisjZGVmaW5lIE1BQ19SU1NfSEFTSF9LRVlfMgkJMHgwMDAwMDY3OAorI2RlZmluZSBNQUNfUlNTX0hBU0hfS0VZXzMJCTB4MDAwMDA2N2MKKyNkZWZpbmUgTUFDX1JTU19IQVNIX0tFWV80CQkweDAwMDAwNjgwCisjZGVmaW5lIE1BQ19SU1NfSEFTSF9LRVlfNQkJMHgwMDAwMDY4NAorI2RlZmluZSBNQUNfUlNTX0hBU0hfS0VZXzYJCTB4MDAwMDA2ODgKKyNkZWZpbmUgTUFDX1JTU19IQVNIX0tFWV83CQkweDAwMDAwNjhjCisjZGVmaW5lIE1BQ19SU1NfSEFTSF9LRVlfOAkJMHgwMDAwMDY5MAorI2RlZmluZSBNQUNfUlNTX0hBU0hfS0VZXzkJCTB4MDAwMDA2OTQKKy8qIDB4Njk4IC0tPiAweDgwMCB1bnVzZWQgKi8KKwogI2RlZmluZSBNQUNfVFhfU1RBVFNfT0NURVRTCQkweDAwMDAwODAwCiAjZGVmaW5lIE1BQ19UWF9TVEFUU19SRVNWMQkJMHgwMDAwMDgwNAogI2RlZmluZSBNQUNfVFhfU1RBVFNfQ09MTElTSU9OUwkJMHgwMDAwMDgwOApAQCAtODE0LDYgKzg0OSw3IEBACiAjZGVmaW5lICBTTkRCRElfTU9ERV9SRVNFVAkJIDB4MDAwMDAwMDEKICNkZWZpbmUgIFNOREJESV9NT0RFX0VOQUJMRQkJIDB4MDAwMDAwMDIKICNkZWZpbmUgIFNOREJESV9NT0RFX0FUVE5fRU5BQkxFCSAweDAwMDAwMDA0CisjZGVmaW5lICBTTkRCRElfTU9ERV9NVUxUSV9UWFFfRU4JIDB4MDAwMDAwMjAKICNkZWZpbmUgU05EQkRJX1NUQVRVUwkJCTB4MDAwMDE4MDQKICNkZWZpbmUgIFNOREJESV9TVEFUVVNfRVJST1JfQVRUTgkgMHgwMDAwMDAwNAogI2RlZmluZSBTTkRCRElfSU5fUFJPRF9JRFhfMAkJMHgwMDAwMTgwOApAQCAtODY0LDYgKzkwMCw3IEBACiAjZGVmaW5lICBSQ1ZMUENfU1RBVFNDVFJMX0VOQUJMRQkgMHgwMDAwMDAwMQogI2RlZmluZSAgUkNWTFBDX1NUQVRTQ1RSTF9GQVNUVVBECSAweDAwMDAwMDAyCiAjZGVmaW5lIFJDVkxQQ19TVEFUU19FTkFCTEUJCTB4MDAwMDIwMTgKKyNkZWZpbmUgIFJDVkxQQ19TVEFUU0VOQUJfQVNGX0ZJWAkgMHgwMDAwMDAwMgogI2RlZmluZSAgUkNWTFBDX1NUQVRTRU5BQl9EQUNLX0ZJWAkgMHgwMDA0MDAwMAogI2RlZmluZSAgUkNWTFBDX1NUQVRTRU5BQl9MTkdCUlNUX1JGSVgJIDB4MDA0MDAwMDAKICNkZWZpbmUgUkNWTFBDX1NUQVRTX0lOQ01BU0sJCTB4MDAwMDIwMWMKQEAgLTk0MSw3ICs5NzgsMTEgQEAKICNkZWZpbmUgUkNWQkRJX01JTklfVEhSRVNICQkweDAwMDAyYzE0CiAjZGVmaW5lIFJDVkJESV9TVERfVEhSRVNICQkweDAwMDAyYzE4CiAjZGVmaW5lIFJDVkJESV9KVU1CT19USFJFU0gJCTB4MDAwMDJjMWMKLS8qIDB4MmMyMCAtLT4gMHgzMDAwIHVudXNlZCAqLworLyogMHgyYzIwIC0tPiAweDJkMDAgdW51c2VkICovCisKKyNkZWZpbmUgU1REX1JFUExFTklTSF9MV00JCTB4MDAwMDJkMDAKKyNkZWZpbmUgSk1CX1JFUExFTklTSF9MV00JCTB4MDAwMDJkMDQKKy8qIDB4MmQwOCAtLT4gMHgzMDAwIHVudXNlZCAqLwogCiAvKiBSZWNlaXZlIEJEIENvbXBsZXRpb24gQ29udHJvbCBSZWdpc3RlcnMgKi8KICNkZWZpbmUgUkNWQ0NfTU9ERQkJCTB4MDAwMDMwMDAKQEAgLTk4Nyw4ICsxMDI4LDEwIEBACiAjZGVmaW5lIFRHM19DUE1VX0hTVF9BQ0MJCTB4MDAwMDM2MWMKICNkZWZpbmUgIENQTVVfSFNUX0FDQ19NQUNDTEtfTUFTSwkgMHgwMDFmMDAwMAogI2RlZmluZSAgQ1BNVV9IU1RfQUNDX01BQ0NMS182XzI1CSAweDAwMTMwMDAwCi0vKiAweDM2MjAgLS0+IDB4MzYzMCB1bnVzZWQgKi8KKy8qIDB4MzYyMCAtLT4gMHgzNjJjIHVudXNlZCAqLwogCisjZGVmaW5lIFRHM19DUE1VX1NUQVRVUwkJCTB4MDAwMDM2MmMKKyNkZWZpbmUgIFRHM19DUE1VX1NUQVRVU19QQ0lFX0ZVTkMJIDB4MjAwMDAwMDAKICNkZWZpbmUgVEczX0NQTVVfQ0xDS19TVEFUCQkweDAwMDAzNjMwCiAjZGVmaW5lICBDUE1VX0NMQ0tfU1RBVF9NQUNfQ0xDS19NQVNLCSAweDAwMWYwMDAwCiAjZGVmaW5lICBDUE1VX0NMQ0tfU1RBVF9NQUNfQ0xDS182Ml81CSAweDAwMDAwMDAwCkBAIC0xMDIyLDYgKzEwNjUsNyBAQAogI2RlZmluZSAgSE9TVENDX01PREVfQ0xSVElDS19UWEJECSAweDAwMDAwNDAwCiAjZGVmaW5lICBIT1NUQ0NfTU9ERV9OT0lOVF9PTl9OT1cJIDB4MDAwMDA4MDAKICNkZWZpbmUgIEhPU1RDQ19NT0RFX05PSU5UX09OX0ZPUkNFCSAweDAwMDAxMDAwCisjZGVmaW5lICBIT1NUQ0NfTU9ERV9DT0FMX1ZFQzFfTk9XCSAweDAwMDAyMDAwCiAjZGVmaW5lIEhPU1RDQ19TVEFUVVMJCQkweDAwMDAzYzA0CiAjZGVmaW5lICBIT1NUQ0NfU1RBVFVTX0VSUk9SX0FUVE4JIDB4MDAwMDAwMDQKICNkZWZpbmUgSE9TVENDX1JYQ09MX1RJQ0tTCQkweDAwMDAzYzA4CkBAIC0xMTA3LDcgKzExNTEsMTYgQEAKICNkZWZpbmUgSE9TVENDX1NORF9DT05fSURYXzEzCQkweDAwMDAzY2Y0CiAjZGVmaW5lIEhPU1RDQ19TTkRfQ09OX0lEWF8xNAkJMHgwMDAwM2NmOAogI2RlZmluZSBIT1NUQ0NfU05EX0NPTl9JRFhfMTUJCTB4MDAwMDNjZmMKLS8qIDB4M2QwMCAtLT4gMHg0MDAwIHVudXNlZCAqLworI2RlZmluZSBIT1NUQ0NfU1RBVEJMQ0tfUklORzEJCTB4MDAwMDNkMDAKKy8qIDB4M2QwMCAtLT4gMHgzZDgwIHVudXNlZCAqLworCisjZGVmaW5lIEhPU1RDQ19SWENPTF9USUNLU19WRUMxCQkweDAwMDAzZDgwCisjZGVmaW5lIEhPU1RDQ19UWENPTF9USUNLU19WRUMxCQkweDAwMDAzZDg0CisjZGVmaW5lIEhPU1RDQ19SWE1BWF9GUkFNRVNfVkVDMQkweDAwMDAzZDg4CisjZGVmaW5lIEhPU1RDQ19UWE1BWF9GUkFNRVNfVkVDMQkweDAwMDAzZDhjCisjZGVmaW5lIEhPU1RDQ19SWENPQUxfTUFYRl9JTlRfVkVDMQkweDAwMDAzZDkwCisjZGVmaW5lIEhPU1RDQ19UWENPQUxfTUFYRl9JTlRfVkVDMQkweDAwMDAzZDk0CisvKiAweDNkOTggLS0+IDB4NDAwMCB1bnVzZWQgKi8KIAogLyogTWVtb3J5IGFyYml0ZXIgY29udHJvbCByZWdpc3RlcnMgKi8KICNkZWZpbmUgTUVNQVJCX01PREUJCQkweDAwMDA0MDAwCkBAIC0xNDQ1LDYgKzE0OTgsOCBAQAogI2RlZmluZSBNU0dJTlRfTU9ERQkJCTB4MDAwMDYwMDAKICNkZWZpbmUgIE1TR0lOVF9NT0RFX1JFU0VUCQkgMHgwMDAwMDAwMQogI2RlZmluZSAgTVNHSU5UX01PREVfRU5BQkxFCQkgMHgwMDAwMDAwMgorI2RlZmluZSAgTVNHSU5UX01PREVfT05FX1NIT1RfRElTQUJMRQkgMHgwMDAwMDAyMAorI2RlZmluZSAgTVNHSU5UX01PREVfTVVMVElWRUNfRU4JIDB4MDAwMDAwODAKICNkZWZpbmUgTVNHSU5UX1NUQVRVUwkJCTB4MDAwMDYwMDQKICNkZWZpbmUgTVNHSU5UX0ZJRk8JCQkweDAwMDA2MDA4CiAvKiAweDYwMGMgLS0+IDB4NjQwMCB1bnVzZWQgKi8KQEAgLTE2NDAsNiArMTY5NSwyNSBAQAogI2RlZmluZSAgRkxBU0hfNTc3ODBWRU5ET1JfQVRNRUxfQVQ0NURCMDIxQiAweDAzNDAwMDAyCiAjZGVmaW5lICBGTEFTSF81Nzc4MFZFTkRPUl9BVE1FTF9BVDQ1REIwNDFEIDB4MDA0MDAwMDEKICNkZWZpbmUgIEZMQVNIXzU3NzgwVkVORE9SX0FUTUVMX0FUNDVEQjA0MUIgMHgwMzQwMDAwMQorI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9BVE1FTF9FRVBST00JIDB4MDIwMDAwMDEKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfTUlDUk9fRUVQUk9NCSAweDAyMDAwMDAzCisjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX0FUTUVMX01EQjAxMUQJIDB4MDEwMDAwMDEKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfTURCMDIxRAkgMHgwMTAwMDAwMworI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9TVF9NX00yNVBFMTAJIDB4MDIwMDAwMDAKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfU1RfTV9NMjVQRTIwCSAweDAyMDAwMDAyCisjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX1NUX01fTTQ1UEUxMAkgMHgwMDAwMDAwMQorI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9TVF9NX000NVBFMjAJIDB4MDAwMDAwMDMKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfQURCMDExQgkgMHgwMTQwMDAwMAorI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9BVE1FTF9BREIwMjFCCSAweDAxNDAwMDAyCisjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX0FUTUVMX0FEQjAxMUQJIDB4MDE0MDAwMDEKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfQURCMDIxRAkgMHgwMTQwMDAwMworI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9TVF9BX00yNVBFMTAJIDB4MDI0MDAwMDAKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfU1RfQV9NMjVQRTIwCSAweDAyNDAwMDAyCisjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX1NUX0FfTTQ1UEUxMAkgMHgwMjQwMDAwMQorI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9TVF9BX000NVBFMjAJIDB4MDI0MDAwMDMKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfNDVVU1BUCSAweDAzNDAwMDAwCisjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX1NUXzI1VVNQVAkgMHgwMzQwMDAwMgorI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9TVF80NVVTUFQJIDB4MDM0MDAwMDEKICNkZWZpbmUgIE5WUkFNX0NGRzFfNTc1MlBBR0VfU0laRV9NQVNLCSAweDcwMDAwMDAwCiAjZGVmaW5lICBGTEFTSF81NzUyUEFHRV9TSVpFXzI1NgkgMHgwMDAwMDAwMAogI2RlZmluZSAgRkxBU0hfNTc1MlBBR0VfU0laRV81MTIJIDB4MTAwMDAwMDAKQEAgLTE2OTYsMTEgKzE3NzAsMjMgQEAKICNkZWZpbmUgUENJRV9UUkFOU0FDVElPTl9DRkcJCTB4MDAwMDdjMDQKICNkZWZpbmUgUENJRV9UUkFOU19DRkdfMVNIT1RfTVNJCSAweDIwMDAwMDAwCiAjZGVmaW5lIFBDSUVfVFJBTlNfQ0ZHX0xPTQkJIDB4MDAwMDAwMjAKKy8qIDB4N2MwOCAtLT4gMHg3ZDI4IHVudXNlZCAqLwogCiAjZGVmaW5lIFBDSUVfUFdSX01HTVRfVEhSRVNICQkweDAwMDA3ZDI4CiAjZGVmaW5lIFBDSUVfUFdSX01HTVRfTDFfVEhSRVNIX01TSwkgMHgwMDAwZmYwMAogI2RlZmluZSBQQ0lFX1BXUl9NR01UX0wxX1RIUkVTSF80TVMJIDB4MDAwMGZmMDAKICNkZWZpbmUgUENJRV9QV1JfTUdNVF9FWFRfQVNQTV9UTVJfRU4JIDB4MDEwMDAwMDAKKy8qIDB4N2QyYyAtLT4gMHg3ZDU0IHVudXNlZCAqLworCisjZGVmaW5lIFRHM19QQ0lFX0xOS0NUTAkJCTB4MDAwMDdkNTQKKyNkZWZpbmUgIFRHM19QQ0lFX0xOS0NUTF9MMV9QTExfUERfRU4JIDB4MDAwMDAwMDgKKyNkZWZpbmUgIFRHM19QQ0lFX0xOS0NUTF9MMV9QTExfUERfRElTCSAweDAwMDAwMDgwCisvKiAweDdkNTggLS0+IDB4N2U3MCB1bnVzZWQgKi8KKworI2RlZmluZSBURzNfUENJRV9FSURMRV9ERUxBWQkJMHgwMDAwN2U3MAorI2RlZmluZSAgVEczX1BDSUVfRUlETEVfREVMQVlfTUFTSwkgMHgwMDAwMDAxZgorI2RlZmluZSAgVEczX1BDSUVfRUlETEVfREVMQVlfMTNfQ0xLUwkgMHgwMDAwMDAwYworLyogMHg3ZTc0IC0tPiAweDgwMDAgdW51c2VkICovCiAKIAogLyogT1RQIGJpdCBkZWZpbml0aW9ucyAqLwpAQCAtMTg5MCw3ICsxOTc2LDYgQEAKIAogI2RlZmluZSBNSUlfVEczX0RTUF9SV19QT1JUCQkweDE1IC8qIERTUCBjb2VmZmljaWVudCByZWFkL3dyaXRlIHBvcnQgKi8KIAotI2RlZmluZSBNSUlfVEczX0VQSFlfUFRFU1QJCTB4MTcgLyogNTkwNiBQSFkgcmVnaXN0ZXIgKi8KICNkZWZpbmUgTUlJX1RHM19EU1BfQUREUkVTUwkJMHgxNyAvKiBEU1AgYWRkcmVzcyByZWdpc3RlciAqLwogCiAjZGVmaW5lIE1JSV9URzNfRFNQX1RBUDEJCTB4MDAwMQpAQCAtMTk1NywxNyArMjA0MiwyMyBAQAogI2RlZmluZSBNSUlfVEczX01JU0NfU0hEV19TQ1I1X0xQRUQJMHgwMDEwCiAjZGVmaW5lIE1JSV9URzNfTUlTQ19TSERXX1NDUjVfU0VMCTB4MTQwMAogCi0KLSNkZWZpbmUgTUlJX1RHM19FUEhZX1RFU1QJCTB4MWYgLyogNTkwNiBQSFkgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUlJX1RHM19FUEhZX1NIQURPV19FTgkJMHg4MAotCi0jZGVmaW5lIE1JSV9URzNfRVBIWVRTVF9NSVNDQ1RSTAkweDEwIC8qIDU5MDYgRVBIWSBtaXNjIGN0cmwgc2hhZG93IHJlZ2lzdGVyICovCi0jZGVmaW5lIE1JSV9URzNfRVBIWVRTVF9NSVNDQ1RSTF9NRElYCTB4NDAwMAotCiAjZGVmaW5lIE1JSV9URzNfVEVTVDEJCQkweDFlCiAjZGVmaW5lIE1JSV9URzNfVEVTVDFfVFJJTV9FTgkJMHgwMDEwCiAjZGVmaW5lIE1JSV9URzNfVEVTVDFfQ1JDX0VOCQkweDgwMDAKIAorCisvKiBGYXN0IEV0aGVybmV0IFRyYW5jZWl2ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTUlJX1RHM19GRVRfUFRFU1QJCTB4MTcKKyNkZWZpbmUgTUlJX1RHM19GRVRfVEVTVAkJMHgxZgorI2RlZmluZSAgTUlJX1RHM19GRVRfU0hBRE9XX0VOCQkweDAwODAKKworI2RlZmluZSBNSUlfVEczX0ZFVF9TSERXX01JU0NDVFJMCTB4MTAKKyNkZWZpbmUgIE1JSV9URzNfRkVUX1NIRFdfTUlTQ0NUUkxfTURJWAkweDQwMDAKKworI2RlZmluZSBNSUlfVEczX0ZFVF9TSERXX0FVWFNUQVQyCTB4MWIKKyNkZWZpbmUgIE1JSV9URzNfRkVUX1NIRFdfQVVYU1RBVDJfQVBECTB4MDAyMAorCisKIC8qIEFQRSByZWdpc3RlcnMuICBBY2Nlc3NpYmxlIHRocm91Z2ggQkFSMSAqLwogI2RlZmluZSBURzNfQVBFX0VWRU5UCQkJMHgwMDBjCiAjZGVmaW5lICBBUEVfRVZFTlRfMQkJCSAweDAwMDAwMDAxCkBAIC0yMDY1LDYgKzIxNTYsNyBAQAogI2RlZmluZSBUWERfRkxBR19JUF9DU1VNCQkweDAwMDIKICNkZWZpbmUgVFhEX0ZMQUdfRU5ECQkJMHgwMDA0CiAjZGVmaW5lIFRYRF9GTEFHX0lQX0ZSQUcJCTB4MDAwOAorI2RlZmluZSBUWERfRkxBR19KTUJfUEtUCQkweDAwMDgKICNkZWZpbmUgVFhEX0ZMQUdfSVBfRlJBR19FTkQJCTB4MDAxMAogI2RlZmluZSBUWERfRkxBR19WTEFOCQkJMHgwMDQwCiAjZGVmaW5lIFRYRF9GTEFHX0NPQUxfTk9XCQkweDAwODAKQEAgLTI0NTAsNiArMjU0Miw0OSBAQAogCXU2NAkJbmljX3R4X3RocmVzaG9sZF9oaXQ7CiB9OwogCitzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCB7CisJdTMyCQkJCXJ4X3N0ZF9wdHI7CisJdTMyCQkJCXJ4X2ptYl9wdHI7CisJc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYwkqcnhfc3RkOworCXN0cnVjdCB0ZzNfZXh0X3J4X2J1ZmZlcl9kZXNjCSpyeF9qbWI7CisJc3RydWN0IHJpbmdfaW5mbwkJKnJ4X3N0ZF9idWZmZXJzOworCXN0cnVjdCByaW5nX2luZm8JCSpyeF9qbWJfYnVmZmVyczsKKwlkbWFfYWRkcl90CQkJcnhfc3RkX21hcHBpbmc7CisJZG1hX2FkZHJfdAkJCXJ4X2ptYl9tYXBwaW5nOworfTsKKworI2RlZmluZSBURzNfSVJRX01BWF9WRUNTIDUKKworc3RydWN0IHRnM19uYXBpIHsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJCW5hcGkJX19fX2NhY2hlbGluZV9hbGlnbmVkOworCXN0cnVjdCB0ZzMJCQkqdHA7CisJc3RydWN0IHRnM19od19zdGF0dXMJCSpod19zdGF0dXM7CisKKwl1MzIJCQkJbGFzdF90YWc7CisJdTMyCQkJCWxhc3RfaXJxX3RhZzsKKwl1MzIJCQkJaW50X21ib3g7CisJdTMyCQkJCWNvYWxfbm93OworCXUzMgkJCQl0eF9wcm9kOworCXUzMgkJCQl0eF9jb25zOworCXUzMgkJCQl0eF9wZW5kaW5nOworCXUzMgkJCQlwcm9kbWJveDsKKworCXUzMgkJCQljb25zbWJveDsKKwl1MzIJCQkJcnhfcmNiX3B0cjsKKwl1MTYJCQkJKnJ4X3JjYl9wcm9kX2lkeDsKKworCXN0cnVjdCB0ZzNfcnhfYnVmZmVyX2Rlc2MJKnJ4X3JjYjsKKwlzdHJ1Y3QgdGczX3R4X2J1ZmZlcl9kZXNjCSp0eF9yaW5nOworCXN0cnVjdCB0eF9yaW5nX2luZm8JCSp0eF9idWZmZXJzOworCisJZG1hX2FkZHJfdAkJCXN0YXR1c19tYXBwaW5nOworCWRtYV9hZGRyX3QJCQlyeF9yY2JfbWFwcGluZzsKKwlkbWFfYWRkcl90CQkJdHhfZGVzY19tYXBwaW5nOworCisJY2hhcgkJCQlpcnFfbGJsW0lGTkFNU0laXTsKKwl1bnNpZ25lZCBpbnQJCQlpcnFfdmVjOworfTsKKwogc3RydWN0IHRnMyB7CiAJLyogYmVnaW4gImdlbmVyYWwsIGZyZXF1ZW50bHktdXNlZCBtZW1iZXJzIiBjYWNoZWxpbmUgc2VjdGlvbiAqLwogCkBAIC0yNTAyLDUwICsyNjM3LDI2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UJCSpkZXY7CiAJc3RydWN0IHBjaV9kZXYJCQkqcGRldjsKIAotCXN0cnVjdCB0ZzNfaHdfc3RhdHVzCQkqaHdfc3RhdHVzOwotCWRtYV9hZGRyX3QJCQlzdGF0dXNfbWFwcGluZzsKLQl1MzIJCQkJbGFzdF90YWc7Ci0JdTMyCQkJCWxhc3RfaXJxX3RhZzsKLQogCXUzMgkJCQltc2dfZW5hYmxlOwogCiAJLyogYmVnaW4gInR4IHRocmVhZCIgY2FjaGVsaW5lIHNlY3Rpb24gKi8KIAl2b2lkCQkJCSgqd3JpdGUzMl90eF9tYm94KSAoc3RydWN0IHRnMyAqLCB1MzIsCiAJCQkJCQkJICAgIHUzMik7Ci0JdTMyCQkJCXR4X3Byb2Q7Ci0JdTMyCQkJCXR4X2NvbnM7Ci0JdTMyCQkJCXR4X3BlbmRpbmc7Ci0KLQlzdHJ1Y3QgdGczX3R4X2J1ZmZlcl9kZXNjCSp0eF9yaW5nOwotCXN0cnVjdCB0eF9yaW5nX2luZm8JCSp0eF9idWZmZXJzOwotCWRtYV9hZGRyX3QJCQl0eF9kZXNjX21hcHBpbmc7CiAKIAkvKiBiZWdpbiAicnggdGhyZWFkIiBjYWNoZWxpbmUgc2VjdGlvbiAqLwotCXN0cnVjdCBuYXBpX3N0cnVjdAkJbmFwaTsKKwlzdHJ1Y3QgdGczX25hcGkJCQluYXBpW1RHM19JUlFfTUFYX1ZFQ1NdOwogCXZvaWQJCQkJKCp3cml0ZTMyX3J4X21ib3gpIChzdHJ1Y3QgdGczICosIHUzMiwKIAkJCQkJCQkgICAgdTMyKTsKLQl1MzIJCQkJcnhfcmNiX3B0cjsKLQl1MzIJCQkJcnhfc3RkX3B0cjsKLQl1MzIJCQkJcnhfanVtYm9fcHRyOwogCXUzMgkJCQlyeF9wZW5kaW5nOwogCXUzMgkJCQlyeF9qdW1ib19wZW5kaW5nOworCXUzMgkJCQlyeF9zdGRfbWF4X3Bvc3Q7CisJdTMyCQkJCXJ4X3BrdF9tYXBfc3o7CiAjaWYgVEczX1ZMQU5fVEFHX1VTRUQKIAlzdHJ1Y3Qgdmxhbl9ncm91cAkJKnZsZ3JwOwogI2VuZGlmCiAKLQlzdHJ1Y3QgdGczX3J4X2J1ZmZlcl9kZXNjCSpyeF9zdGQ7Ci0Jc3RydWN0IHJpbmdfaW5mbwkJKnJ4X3N0ZF9idWZmZXJzOwotCWRtYV9hZGRyX3QJCQlyeF9zdGRfbWFwcGluZzsKLQl1MzIJCQkJcnhfc3RkX21heF9wb3N0OworCXN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0CXByb2RyaW5nWzFdOwogCi0Jc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYwkqcnhfanVtYm87Ci0Jc3RydWN0IHJpbmdfaW5mbwkJKnJ4X2p1bWJvX2J1ZmZlcnM7Ci0JZG1hX2FkZHJfdAkJCXJ4X2p1bWJvX21hcHBpbmc7Ci0KLQlzdHJ1Y3QgdGczX3J4X2J1ZmZlcl9kZXNjCSpyeF9yY2I7Ci0JZG1hX2FkZHJfdAkJCXJ4X3JjYl9tYXBwaW5nOwotCi0JdTMyCQkJCXJ4X3BrdF9idWZfc3o7CiAKIAkvKiBiZWdpbiAiZXZlcnl0aGluZyBlbHNlIiBjYWNoZWxpbmUocykgc2VjdGlvbiAqLwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCQluZXRfc3RhdHM7CkBAIC0yNTc1LDYgKzI2ODYsMTAgQEAKICNkZWZpbmUgVEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1QJMHgwMDAwMTAwMAogI2RlZmluZSBURzNfRkxBR19OVlJBTQkJCTB4MDAwMDIwMDAKICNkZWZpbmUgVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQJCTB4MDAwMDQwMDAKKyNkZWZpbmUgVEczX0ZMQUdfU1VQUE9SVF9NU0kJCTB4MDAwMDgwMDAKKyNkZWZpbmUgVEczX0ZMQUdfU1VQUE9SVF9NU0lYCQkweDAwMDEwMDAwCisjZGVmaW5lIFRHM19GTEFHX1NVUFBPUlRfTVNJX09SX01TSVgJKFRHM19GTEFHX1NVUFBPUlRfTVNJIHwgXAorCQkJCQkgVEczX0ZMQUdfU1VQUE9SVF9NU0lYKQogI2RlZmluZSBURzNfRkxBR19QQ0lYX01PREUJCTB4MDAwMjAwMDAKICNkZWZpbmUgVEczX0ZMQUdfUENJX0hJR0hfU1BFRUQJCTB4MDAwNDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfUENJXzMyQklUCQkweDAwMDgwMDAwCkBAIC0yNTg3LDcgKzI3MDIsNyBAQAogI2RlZmluZSBURzNfRkxBR19DUE1VX1BSRVNFTlQJCTB4MDQwMDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfNDBCSVRfRE1BX0JVRwkJMHgwODAwMDAwMAogI2RlZmluZSBURzNfRkxBR19CUk9LRU5fQ0hFQ0tTVU1TCTB4MTAwMDAwMDAKLSNkZWZpbmUgVEczX0ZMQUdfU1VQUE9SVF9NU0kJCTB4MjAwMDAwMDAKKyNkZWZpbmUgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRQkJMHgyMDAwMDAwMAogI2RlZmluZSBURzNfRkxBR19DSElQX1JFU0VUVElORwkJMHg0MDAwMDAwMAogI2RlZmluZSBURzNfRkxBR19JTklUX0NPTVBMRVRFCQkweDgwMDAwMDAwCiAJdTMyCQkJCXRnM19mbGFnczI7CkBAIC0yNjEzLDcgKzI3MjgsOSBAQAogI2RlZmluZSBURzNfRkxHMl81NzUwX1BMVVMJCTB4MDAwODAwMDAKICNkZWZpbmUgVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNCTB4MDAxMDAwMDAKICNkZWZpbmUgVEczX0ZMRzJfVVNJTkdfTVNJCQkweDAwMjAwMDAwCi0jZGVmaW5lIFRHM19GTEcyX0pVTUJPX0NBUEFCTEUJCTB4MDA0MDAwMDAKKyNkZWZpbmUgVEczX0ZMRzJfVVNJTkdfTVNJWAkJMHgwMDQwMDAwMAorI2RlZmluZSBURzNfRkxHMl9VU0lOR19NU0lfT1JfTVNJWAkoVEczX0ZMRzJfVVNJTkdfTVNJIHwgXAorCQkJCQlURzNfRkxHMl9VU0lOR19NU0lYKQogI2RlZmluZSBURzNfRkxHMl9NSUlfU0VSREVTCQkweDAwODAwMDAwCiAjZGVmaW5lIFRHM19GTEcyX0FOWV9TRVJERVMJCShURzNfRkxHMl9QSFlfU0VSREVTIHwJXAogCQkJCQlURzNfRkxHMl9NSUlfU0VSREVTKQpAQCAtMjY0MSw2ICsyNzU4LDkgQEAKICNkZWZpbmUgVEczX0ZMRzNfUEhZX0VOQUJMRV9BUEQJCTB4MDAwMDEwMDAKICNkZWZpbmUgVEczX0ZMRzNfNTc1NV9QTFVTCQkweDAwMDAyMDAwCiAjZGVmaW5lIFRHM19GTEczX05PX05WUkFNCQkweDAwMDA0MDAwCisjZGVmaW5lIFRHM19GTEczX1RPR0dMRV8xMF8xMDBfTDFQTExQRAkweDAwMDA4MDAwCisjZGVmaW5lIFRHM19GTEczX1BIWV9JU19GRVQJCTB4MDAwMTAwMDAKKyNkZWZpbmUgVEczX0ZMRzNfRU5BQkxFX1JTUwkJMHgwMDAyMDAwMAogCiAJc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyOwogCXUxNgkJCQl0aW1lcl9jb3VudGVyOwpAQCAtMjY4Niw2ICsyODA2LDggQEAKIAlzdHJ1Y3QgbWlpX2J1cwkJCSptZGlvX2J1czsKIAlpbnQJCQkJbWRpb19pcnFbUEhZX01BWF9BRERSXTsKIAorCXU4CQkJCXBoeV9hZGRyOworCiAJLyogUEhZIGluZm8gKi8KIAl1MzIJCQkJcGh5X2lkOwogI2RlZmluZSBQSFlfSURfTUFTSwkJCTB4ZmZmZmZmZjAKQEAgLTI3ODUsNiArMjkwNyw5IEBACiAKICNkZWZpbmUgU1NUXzI1VkYwWDBfUEFHRV9TSVpFCQk0MDk4CiAKKwl1bnNpZ25lZCBpbnQJCQlpcnFfbWF4OworCXVuc2lnbmVkIGludAkJCWlycV9jbnQ7CisKIAlzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZQkJY29hbDsKIAogCS8qIGZpcm13YXJlIGluZm8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RsYW4uYyBiL2RyaXZlcnMvbmV0L3RsYW4uYwppbmRleCAzODRjYjVlLi4zZDMxYjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvdGxhbi5jCkBAIC0yODksNyArMjg5LDcgQEAKIHN0YXRpYyB2b2lkCVRMYW5fRWlzYV9DbGVhbnVwKCB2b2lkICk7CiBzdGF0aWMgaW50ICAgICAgVExhbl9Jbml0KCBzdHJ1Y3QgbmV0X2RldmljZSAqICk7CiBzdGF0aWMgaW50CVRMYW5fT3Blbiggc3RydWN0IG5ldF9kZXZpY2UgKmRldiApOwotc3RhdGljIGludAlUTGFuX1N0YXJ0VHgoIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIG5ldGRldl90eF90IFRMYW5fU3RhcnRUeCggc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgVExhbl9IYW5kbGVJbnRlcnJ1cHQoIGludCwgdm9pZCAqKTsKIHN0YXRpYyBpbnQJVExhbl9DbG9zZSggc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgc3RydWN0CW5ldF9kZXZpY2Vfc3RhdHMgKlRMYW5fR2V0U3RhdHMoIHN0cnVjdCBuZXRfZGV2aWNlICopOwpAQCAtMTAwNCw4ICsxMDA0LDYgQEAKIAogCiAJY2FzZSBTSU9DU01JSVJFRzoJCS8qIFdyaXRlIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQkJcmV0dXJuIC1FUEVSTTsKIAkJCVRMYW5fTWlpV3JpdGVSZWcoZGV2LCBkYXRhLT5waHlfaWQgJiAweDFmLAogCQkJCQkgZGF0YS0+cmVnX251bSAmIDB4MWYsIGRhdGEtPnZhbF9pbik7CiAJCQlyZXR1cm4gMDsKQEAgLTEwODMsNyArMTA4MSw3IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgVExhbl9TdGFydFR4KCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICkKK3N0YXRpYyBuZXRkZXZfdHhfdCBUTGFuX1N0YXJ0VHgoIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQogewogCVRMYW5Qcml2YXRlSW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJZG1hX2FkZHJfdAl0YWlsX2xpc3RfcGh5czsKQEAgLTEwOTUsMTEgKzEwOTMsMTEgQEAKIAkJVExBTl9EQkcoIFRMQU5fREVCVUdfVFgsICJUUkFOU01JVDogICVzIFBIWSBpcyBub3QgcmVhZHlcbiIsCiAJCQkgIGRldi0+bmFtZSApOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlpZiAoc2tiX3BhZHRvKHNrYiwgVExBTl9NSU5fRlJBTUVfU0laRSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCXR4bGVuID0gbWF4KHNrYi0+bGVuLCAodW5zaWduZWQgaW50KVRMQU5fTUlOX0ZSQU1FX1NJWkUpOwogCiAJdGFpbF9saXN0ID0gcHJpdi0+dHhMaXN0ICsgcHJpdi0+dHhUYWlsOwpAQCAtMTE1MCw3ICsxMTQ4LDcgQEAKIAlDSVJDX0lOQyggcHJpdi0+dHhUYWlsLCBUTEFOX05VTV9UWF9MSVNUUyApOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogfSAvKiBUTGFuX1N0YXJ0VHggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwppbmRleCBiNDBiNmRlLi43MjQxNTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiBzdGF0aWMgaW50IHhsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHhsX29wZW5faHcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgOyAgCiBzdGF0aWMgaW50IHhsX2h3X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOyAKLXN0YXRpYyBpbnQgeGxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCB4bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgeGxfZG5fY29tcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsgCiBzdGF0aWMgaW50IHhsX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgeGxfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMTkzLDcgKzExOTMsNyBAQAogICoJVHggLSBQb2xsaW5nIGNvbmZpZ3VyYXRpb24KICAqLwogCQotc3RhdGljIGludCB4bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIAorc3RhdGljIG5ldGRldl90eF90IHhsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgeGxfcHJpdmF0ZSAqeGxfcHJpdj1uZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCB4bF90eF9kZXNjICp0eGQgOyAKQEAgLTEyNDAsNyArMTI0MCw3IEBACiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGxfcHJpdi0+eGxfbG9jayxmbGFncykgOyAKICAKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGxfcHJpdi0+eGxfbG9jayxmbGFncykgOyAKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwppbmRleCAwOGE2YzQxLi41MjViYmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwpAQCAtMTkxLDcgKzE5MSw4IEBACiBzdGF0aWMgdm9pZAl0b2tfb3Blbl9hZGFwdGVyKHVuc2lnbmVkIGxvbmcgZGV2X2FkZHIpOwogc3RhdGljIHZvaWQgCW9wZW5fc2FwKHVuc2lnbmVkIGNoYXIgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCAJdG9rX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgCXRva19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCB0b2tfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAJdG9rX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHRva19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIAlpbml0aWFsX3Rva19pbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMDIyLDcgKzEwMjMsOCBAQAogCiAjZGVmaW5lIFNUQVRJT05fSURfT0ZTVCA0CiAKLXN0YXRpYyBpbnQgdG9rX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgdG9rX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0b2tfaW5mbyAqdGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEwNDEsNyArMTA0Myw3IEBACiAJd3JpdGViKENNRF9JTl9TUkIsIHRpLT5tbWlvICsgQUNBX09GRlNFVCArIEFDQV9TRVQgKyBJU1JBX09ERCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKHRpLT5sb2NrKSwgZmxhZ3MpOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKaW5kZXggYjM3MTVlZi4uMjZkY2EyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKQEAgLTIwMyw3ICsyMDMsOCBAQAogCiBzdGF0aWMgaW50IHN0cmVhbWVyX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzdHJlYW1lcl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBzdHJlYW1lcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHN0cmVhbWVyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHN0cmVhbWVyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc3RyZWFtZXJfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3Qgc3RyZWFtZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CkBAIC0xMTQxLDcgKzExNDIsOCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBzdHJlYW1lcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RyZWFtZXJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzdHJlYW1lcl9wcml2YXRlICpzdHJlYW1lcl9wcml2ID0KIAkgICAgbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTExODMsNyArMTE4NSw3IEBACiAKIAkJc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19mcmVlID0gKHN0cmVhbWVyX3ByaXYtPnR4X3JpbmdfZnJlZSArIDEpICYgKFNUUkVBTUVSX1RYX1JJTkdfU0laRSAtIDEpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl9sb2NrLGZsYWdzKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfSBlbHNlIHsKIAkgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX2xvY2ssZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKaW5kZXggNDUxYjU0MS4uZDllYzdmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCkBAIC0xODIsNyArMTgyLDggQEAKIHN0YXRpYyBpbnQgb2x5bXBpY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7IAogc3RhdGljIGludCBvbHltcGljX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IG9seW1waWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgb2x5bXBpY194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IG9seW1waWNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBvbHltcGljX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgb2x5bXBpY19zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIG9seW1waWNfZnJlZW1lbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSA7ICAKQEAgLTEwMzAsNyArMTAzMSw4IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQkKIAotc3RhdGljIGludCBvbHltcGljX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgCitzdGF0aWMgbmV0ZGV2X3R4X3Qgb2x5bXBpY194bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb2x5bXBpY19wcml2YXRlICpvbHltcGljX3ByaXY9bmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpvbHltcGljX21taW89b2x5bXBpY19wcml2LT5vbHltcGljX21taW87CkBAIC0xMDUyLDcgKzEwNTQsNyBAQAogCQl3cml0ZXcoKCgocmVhZHcob2x5bXBpY19tbWlvK1RYRU5RXzEpKSAmIDB4ODAwMCkgXiAweDgwMDApIHwgMSxvbHltcGljX21taW8rVFhFTlFfMSk7CiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2x5bXBpY19wcml2LT5vbHltcGljX2xvY2ssZmxhZ3MpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9IGVsc2UgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvbHltcGljX3ByaXYtPm9seW1waWNfbG9jayxmbGFncyk7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKaW5kZXggNTRhZDRlZC4uZWJkYTYxYmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYwpAQCAtMjM0LDcgKzIzNCw4IEBACiAKIC8qIFMgKi8KIHN0YXRpYyBpbnQgc21jdHJfc2VuZF9kYXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHNtY3RyX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHNtY3RyX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzbWN0cl9zZW5kX2xvYmVfbWVkaWFfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc21jdHJfc2VuZF9ycHRfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBNQUNfSEVBREVSICpybWYsCiAgICAgICAgIF9fdTE2IGNvcnJlbGF0b3IpOwpAQCAtMzA5MSwxMSArMzA5Miw3IEBACiAgICAgICAgIC8qIFNldHVwIHRoZSBsb2JlIG1lZGlhIHRlc3QuICovCiAgICAgICAgIHNtY3RyX2xvYmVfbWVkaWFfdGVzdF9jbWQoZGV2KTsKICAgICAgICAgaWYoc21jdHJfd2FpdF9jbWQoZGV2KSkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHNtY3RyX3Jlc2V0X2FkYXB0ZXIoZGV2KTsKLSAgICAgICAgICAgICAgICB0cC0+c3RhdHVzID0gQ0xPU0VEOwotICAgICAgICAgICAgICAgIHJldHVybiAoTE9CRV9NRURJQV9URVNUX0ZBSUxFRCk7Ci0gICAgICAgIH0KKwkJZ290byBlcnI7CiAKICAgICAgICAgLyogVHggbG9iZSBtZWRpYSB0ZXN0IGZyYW1lcy4gKi8KICAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTUwMDsgKytpKQpAQCAtMzEwMywyMCArMzEwMCwxMiBAQAogICAgICAgICAgICAgICAgIGlmKHNtY3RyX3NlbmRfbG9iZV9tZWRpYV90ZXN0KGRldikpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYocGVycm9yKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWN0cl9yZXNldF9hZGFwdGVyKGRldik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0ZSA9IENMT1NFRDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChMT0JFX01FRElBX1RFU1RfRkFJTEVEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCQlnb3RvIGVycjsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycm9yID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc21jdHJfbG9iZV9tZWRpYV90ZXN0X2NtZChkZXYpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jdHJfcmVzZXRfYWRhcHRlcihkZXYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0ZSA9IENMT1NFRDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKExPQkVfTUVESUFfVEVTVF9GQUlMRUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQkJCWdvdG8gZXJyOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzEyNCwyOCArMzExMywyNCBAQAogICAgICAgICBpZihzbWN0cl9zZW5kX2RhdChkZXYpKQogICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYoc21jdHJfc2VuZF9kYXQoZGV2KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbWN0cl9yZXNldF9hZGFwdGVyKGRldik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+c3RhdGUgPSBDTE9TRUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKExPQkVfTUVESUFfVEVTVF9GQUlMRUQpOwotICAgICAgICAgICAgICAgIH0KKwkJCWdvdG8gZXJyOwogICAgICAgICB9CiAKICAgICAgICAgLyogQ2hlY2sgaWYgYW55IGZyYW1lcyByZWNlaXZlZCBkdXJpbmcgdGVzdC4gKi8KICAgICAgICAgaWYoKHRwLT5yeF9mY2JfY3VycltNQUNfUVVFVUVdLT5mcmFtZV9zdGF0dXMpCiAgICAgICAgICAgICAgICAgfHwgKHRwLT5yeF9mY2JfY3VycltOT05fTUFDX1FVRVVFXS0+ZnJhbWVfc3RhdHVzKSkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHNtY3RyX3Jlc2V0X2FkYXB0ZXIoZGV2KTsKLSAgICAgICAgICAgICAgICB0cC0+c3RhdGUgPSBDTE9TRUQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChMT0JFX01FRElBX1RFU1RfRkFJTEVEKTsKLSAgICAgICAgfQorCQkJZ290byBlcnI7CiAKICAgICAgICAgLyogU2V0IHJlY2VpdmUgbWFzayB0byAiUHJvbWlzYyIgbW9kZS4gKi8KICAgICAgICAgdHAtPnJlY2VpdmVfbWFzayA9IHNhdmVkX3Jjdl9tYXNrOwogCiAgICAgICAgIHNtY3RyX2NoZ19yeF9tYXNrKGRldik7CiAKLSAgICAgICAgcmV0dXJuICgwKTsKKwkgcmV0dXJuIDA7CitlcnI6CisJc21jdHJfcmVzZXRfYWRhcHRlcihkZXYpOworCXRwLT5zdGF0dXMgPSBDTE9TRUQ7CisJcmV0dXJuIExPQkVfTUVESUFfVEVTVF9GQUlMRUQ7CiB9CiAKIHN0YXRpYyBpbnQgc21jdHJfbG9iZV9tZWRpYV90ZXN0X2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNDU4Nyw3ICs0NTcyLDggQEAKIC8qCiAgKiBHZXRzIHNrYiBmcm9tIHN5c3RlbSwgcXVldWVzIGl0IGFuZCBjaGVja3MgaWYgaXQgY2FuIGJlIHNlbnQKICAqLwotc3RhdGljIGludCBzbWN0cl9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNtY3RyX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgICAgIHN0cnVjdCBuZXRfbG9jYWwgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtNDYwOSw3ICs0NTk1LDcgQEAKICAgICAgICAgaWYodHAtPlF1ZXVlU2tiID4gMCkKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCQkKLSAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBzbWN0cl9zZW5kX2xvYmVfbWVkaWFfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYwppbmRleCBhMmVhYjcyLi5hN2I2ODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYwpAQCAtMTQ0LDggKzE0NCw4IEBACiAvKiAiRyIgKi8KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdG1zMzgwdHJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogLyogIkgiICovCi1zdGF0aWMgaW50IAl0bXMzODB0cl9oYXJkd2FyZV9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgdG1zMzgwdHJfaGFyZHdhcmVfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIC8qICJJIiAqLwogc3RhdGljIGludCAJdG1zMzgwdHJfaW5pdF9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgCXRtczM4MHRyX2luaXRfaXBiKHN0cnVjdCBuZXRfbG9jYWwgKnRwKTsKQEAgLTE2NSw3ICsxNjUsOCBAQAogc3RhdGljIHZvaWQgCXRtczM4MHRyX3Jlc2V0X2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIAl0bXMzODB0cl9yaW5nX3N0YXR1c19pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAvKiAiUyIgKi8KLXN0YXRpYyBpbnQgCXRtczM4MHRyX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHRtczM4MHRyX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgCXRtczM4MHRyX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQJdG1zMzgwdHJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpOwogLyogIlQiICovCkBAIC01OTksMjEgKzYwMCwyMyBAQAogLyoKICAqIEdldHMgc2tiIGZyb20gc3lzdGVtLCBxdWV1ZXMgaXQgYW5kIGNoZWNrcyBpZiBpdCBjYW4gYmUgc2VudAogICovCi1zdGF0aWMgaW50IHRtczM4MHRyX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgdG1zMzgwdHJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2xvY2FsICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVycjsKKwluZXRkZXZfdHhfdCByYzsKIAotCWVyciA9IHRtczM4MHRyX2hhcmR3YXJlX3NlbmRfcGFja2V0KHNrYiwgZGV2KTsKKwlyYyA9IHRtczM4MHRyX2hhcmR3YXJlX3NlbmRfcGFja2V0KHNrYiwgZGV2KTsKIAlpZih0cC0+VHBsRnJlZS0+TmV4dFRQTFB0ci0+QnVzeUZsYWcpCiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQlyZXR1cm4gKGVycik7CisJcmV0dXJuIHJjOwogfQogCiAvKgogICogTW92ZSBmcmFtZXMgaW50byBhZGFwdGVyIHR4IHF1ZXVlCiAgKi8KLXN0YXRpYyBpbnQgdG1zMzgwdHJfaGFyZHdhcmVfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB0bXMzODB0cl9oYXJkd2FyZV9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJVFBMICp0cGw7CiAJc2hvcnQgbGVuZ3RoOwpAQCAtNjgyLDcgKzY4NSw3IEBACiAJdG1zMzgwdHJfZXhlY19zaWZjbWQoZGV2LCBDTURfVFhfVkFMSUQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCmluZGV4IGVmNDk3NDQuLjc0ZTViYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKQEAgLTU5OSw3ICs1OTksOCBAQAogCQluZXRpZl93YWtlX3F1ZXVlKGRlLT5kZXYpOwogfQogCi1zdGF0aWMgaW50IGRlX3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZGVfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGVfcHJpdmF0ZSAqZGUgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBlbnRyeSwgdHhfZnJlZTsKQEAgLTY1MSw3ICs2NTIsNyBAQAogCWR3MzIoVHhQb2xsLCBOb3JtYWxUeFBvbGwpOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogU2V0IG9yIGNsZWFyIHRoZSBtdWx0aWNhc3QgZmlsdGVyIGZvciB0aGlzIGFkYXB0b3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwppbmRleCBhY2ZkY2NkLi5hODM0OWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKQEAgLTg5NSw3ICs4OTUsOCBAQAogKiogUHVibGljIEZ1bmN0aW9ucwogKi8KIHN0YXRpYyBpbnQgICAgIGRlNHg1X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50ICAgICBkZTR4NV9xdWV1ZV9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZGU0eDVfcXVldWVfcGt0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBkZTR4NV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBpbnQgICAgIGRlNHg1X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHN0cnVjdCAgbmV0X2RldmljZV9zdGF0cyAqZGU0eDVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTQ1NiwxOCArMTQ1NywxNiBAQAogLyoKICoqIFdyaXRlcyBhIHNvY2tldCBidWZmZXIgYWRkcmVzcyB0byB0aGUgbmV4dCBhdmFpbGFibGUgdHJhbnNtaXQgZGVzY3JpcHRvci4KICovCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIGRlNHg1X3F1ZXVlX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBkZTR4NV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotICAgIGludCBzdGF0dXMgPSBORVRERVZfVFhfT0s7CiAgICAgdV9sb25nIGZsYWdzID0gMDsKIAogICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICBpZiAoIWxwLT50eF9lbmFibGUpIHsgICAgICAgICAgICAgICAgICAgLyogQ2Fubm90IHNlbmQgZm9yIG5vdyAqLworICAgIGlmICghbHAtPnR4X2VuYWJsZSkgICAgICAgICAgICAgICAgICAgLyogQ2Fubm90IHNlbmQgZm9yIG5vdyAqLwogCXJldHVybiBORVRERVZfVFhfTE9DS0VEOwotICAgIH0KIAogICAgIC8qCiAgICAgKiogQ2xlYW4gb3V0IHRoZSBUWCByaW5nIGFzeW5jaHJvbm91c2x5IHRvIGludGVycnVwdHMgLSBzb21ldGltZXMgdGhlCkBAIC0xNTIxLDcgKzE1MjAsNyBAQAogCiAgICAgbHAtPmNhY2hlLmxvY2sgPSAwOwogCi0gICAgcmV0dXJuIHN0YXR1czsKKyAgICByZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCmluZGV4IDhlNzhmMDAuLmE0NWRlZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKQEAgLTMxMSw3ICszMTEsNyBAQAogCiAvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgaW50IGRtZmVfb3BlbihzdHJ1Y3QgREVWSUNFICopOwotc3RhdGljIGludCBkbWZlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IERFVklDRSAqKTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBkbWZlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IERFVklDRSAqKTsKIHN0YXRpYyBpbnQgZG1mZV9zdG9wKHN0cnVjdCBERVZJQ0UgKik7CiBzdGF0aWMgdm9pZCBkbWZlX3NldF9maWx0ZXJfbW9kZShzdHJ1Y3QgREVWSUNFICopOwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CkBAIC02NjEsNyArNjYxLDggQEAKICAqCVNlbmQgYSBwYWNrZXQgdG8gbWVkaWEgZnJvbSB0aGUgdXBwZXIgbGF5ZXIuCiAgKi8KIAotc3RhdGljIGludCBkbWZlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IERFVklDRSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGRtZmVfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IERFVklDRSAqZGV2KQogewogCXN0cnVjdCBkbWZlX2JvYXJkX2luZm8gKmRiID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgdHhfZGVzYyAqdHhwdHI7CkBAIC02NzYsNyArNjc3LDcgQEAKIAlpZiAoc2tiLT5sZW4gPiBNQVhfUEFDS0VUX1NJWkUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGJpZyBwYWNrZXQgPSAlZFxuIiwgKHUxNilza2ItPmxlbik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CkBAIC03MjIsNyArNzIzLDcgQEAKIAkvKiBmcmVlIHRoaXMgU0tCICovCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKaW5kZXggNGNmOWE2NS4uNmIyMzMwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwpAQCAtMjU2LDcgKzI1Niw4IEBACiBzdGF0aWMgdm9pZCB0dWxpcF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgdHVsaXBfaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgdHVsaXBfZnJlZV9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCB0dWxpcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHR1bGlwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgdHVsaXBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgdHVsaXBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB0dWxpcF91cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTY0NSw3ICs2NDYsNyBAQAogCXRwLT50eF9yaW5nW2ktMV0uYnVmZmVyMiA9IGNwdV90b19sZTMyKHRwLT50eF9yaW5nX2RtYSk7CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogdHVsaXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0dWxpcF9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC02OTMsNyArNjk0LDcgQEAKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgdHVsaXBfY2xlYW5fdHhfcmluZyhzdHJ1Y3QgdHVsaXBfcHJpdmF0ZSAqdHApCkBAIC05MjIsOCArOTIzLDYgQEAKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNJT0NTTUlJUkVHOgkJLyogV3JpdGUgTUlJIFBIWSByZWdpc3Rlci4gKi8KLQkJaWYgKCFjYXBhYmxlIChDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07CiAJCWlmIChyZWdudW0gJiB+MHgxZikKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoZGF0YS0+cGh5X2lkID09IHBoeSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCmluZGV4IDkyNzdjZTguLmM0NTdhMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKQEAgLTIxNSw3ICsyMTUsOCBAQAogCiAvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgaW50IHVsaTUyNnhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgdWxpNTI2eF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIG5ldGRldl90eF90IHVsaTUyNnhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IHVsaTUyNnhfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB2b2lkIHVsaTUyNnhfc2V0X2ZpbHRlcl9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CkBAIC01NjcsNyArNTY4LDggQEAKICAqCVNlbmQgYSBwYWNrZXQgdG8gbWVkaWEgZnJvbSB0aGUgdXBwZXIgbGF5ZXIuCiAgKi8KIAotc3RhdGljIGludCB1bGk1MjZ4X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB1bGk1MjZ4X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVsaTUyNnhfYm9hcmRfaW5mbyAqZGIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCB0eF9kZXNjICp0eHB0cjsKQEAgLTU4Miw3ICs1ODQsNyBAQAogCWlmIChza2ItPmxlbiA+IE1BWF9QQUNLRVRfU0laRSkgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogYmlnIHBhY2tldCA9ICVkXG4iLCAodTE2KXNrYi0+bGVuKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGItPmxvY2ssIGZsYWdzKTsKQEAgLTYyNCw3ICs2MjYsNyBAQAogCS8qIGZyZWUgdGhpcyBTS0IgKi8KIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCmluZGV4IDBmMTU3NzMuLmIzOGQzYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwpAQCAtMzMzLDcgKzMzMyw3IEBACiBzdGF0aWMgdm9pZCB0eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBhbGxvY19yaW5nZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGZyZWVfcmluZ2Rlc2Moc3RydWN0IG5ldGRldl9wcml2YXRlICpucCk7Ci1zdGF0aWMgaW50ICBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBpbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKIHN0YXRpYyB2b2lkIG5ldGRldl9lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW50cl9zdGF0dXMpOwogc3RhdGljIGludCAgbmV0ZGV2X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtOTk3LDcgKzk5Nyw3IEBACiAKIH0KIAotc3RhdGljIGludCBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgZW50cnk7CkBAIC0xMDU4LDcgKzEwNTgsNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0IGZyYW1lICMlZCBxdWV1ZWQgaW4gc2xvdCAlZC5cbiIsCiAJCQkgICBkZXYtPm5hbWUsIG5wLT5jdXJfdHgsIGVudHJ5KTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgbmV0ZGV2X3R4X2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE0NzAsOCArMTQ3MCw2IEBACiAJCXJldHVybiAwOwogCiAJY2FzZSBTSU9DU01JSVJFRzoJCS8qIFdyaXRlIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07CiAJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJbWRpb193cml0ZShkZXYsIGRhdGEtPnBoeV9pZCAmIDB4MWYsIGRhdGEtPnJlZ19udW0gJiAweDFmLCBkYXRhLT52YWxfaW4pOwogCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jIGIvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMKaW5kZXggYzJjYTlmNC4uMGYyY2E1OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jCkBAIC0xMTMsNyArMTEzLDggQEAKIHN0YXRpYyBpbnQgeGlyY29tX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwogc3RhdGljIHZvaWQgeGlyY29tX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgeGlyY29tX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwotc3RhdGljIGludCB4aXJjb21fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCB4aXJjb21fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgeGlyY29tX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHhpcmNvbV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHhpcmNvbV91cChzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQpOwpAQCAtMzg0LDcgKzM4NSw4IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IHhpcmNvbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgeGlyY29tX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQzNCw3ICs0MzYsNyBAQAogCQkJY2FyZC0+dHJhbnNtaXRfdXNlZCA9IG5leHRkZXNjcmlwdG9yOwogCQkJbGVhdmUoInhpcmNvbS1zdGFydF94bWl0IC0gc2VudCIpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jayxmbGFncyk7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggNDJiNmM2My4uM2Y1ZDI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKKysrIGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTEwMywxMyArMTAzLDEwIEBACiAJdWlkX3QJCQlvd25lcjsKIAlnaWRfdAkJCWdyb3VwOwogCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZAlyZWFkcTsKLQogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CiAJc3RydWN0IGZhc3luY19zdHJ1Y3QJKmZhc3luYzsKIAogCXN0cnVjdCB0YXBfZmlsdGVyICAgICAgIHR4Zmx0OwotCXN0cnVjdCBzb2NrCQkqc2s7CiAJc3RydWN0IHNvY2tldAkJc29ja2V0OwogCiAjaWZkZWYgVFVOX0RFQlVHCkBAIC0xMzAsMTcgKzEyNywxMCBAQAogc3RhdGljIGludCB0dW5fYXR0YWNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKIAlpbnQgZXJyOwogCiAJQVNTRVJUX1JUTkwoKTsKIAotCS8qIENoZWNrIHBlcm1pc3Npb25zICovCi0JaWYgKCgodHVuLT5vd25lciAhPSAtMSAmJiBjcmVkLT5ldWlkICE9IHR1bi0+b3duZXIpIHx8Ci0JICAgICAodHVuLT5ncm91cCAhPSAtMSAmJiAhaW5fZWdyb3VwX3AodHVuLT5ncm91cCkpKSAmJgotCQkhY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQogCW5ldGlmX3R4X2xvY2tfYmgodHVuLT5kZXYpOwogCiAJZXJyID0gLUVJTlZBTDsKQEAgLTE1NSw3ICsxNDUsNyBAQAogCXRmaWxlLT50dW4gPSB0dW47CiAJdHVuLT50ZmlsZSA9IHRmaWxlOwogCWRldl9ob2xkKHR1bi0+ZGV2KTsKLQlzb2NrX2hvbGQodHVuLT5zayk7CisJc29ja19ob2xkKHR1bi0+c29ja2V0LnNrKTsKIAlhdG9taWNfaW5jKCZ0ZmlsZS0+Y291bnQpOwogCiBvdXQ6CkBAIC0xNzEsNyArMTYxLDcgQEAKIAluZXRpZl90eF91bmxvY2tfYmgodHVuLT5kZXYpOwogCiAJLyogRHJvcCByZWFkIHF1ZXVlICovCi0Jc2tiX3F1ZXVlX3B1cmdlKCZ0dW4tPnJlYWRxKTsKKwlza2JfcXVldWVfcHVyZ2UoJnR1bi0+c29ja2V0LnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAogCS8qIERyb3AgdGhlIGV4dHJhIGNvdW50IG9uIHRoZSBuZXQgZGV2aWNlICovCiAJZGV2X3B1dCh0dW4tPmRldik7CkBAIC0zNDAsNyArMzMwLDcgQEAKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXNvY2tfcHV0KHR1bi0+c2spOworCXNvY2tfcHV0KHR1bi0+c29ja2V0LnNrKTsKIH0KIAogLyogTmV0IGRldmljZSBvcGVuLiAqLwpAQCAtMzU4LDcgKzM0OCw3IEBACiB9CiAKIC8qIE5ldCBkZXZpY2Ugc3RhcnQgeG1pdCAqLwotc3RhdGljIGludCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMzc0LDcgKzM2NCw3IEBACiAJaWYgKCFjaGVja19maWx0ZXIoJnR1bi0+dHhmbHQsIHNrYikpCiAJCWdvdG8gZHJvcDsKIAotCWlmIChza2JfcXVldWVfbGVuKCZ0dW4tPnJlYWRxKSA+PSBkZXYtPnR4X3F1ZXVlX2xlbikgeworCWlmIChza2JfcXVldWVfbGVuKCZ0dW4tPnNvY2tldC5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkgPj0gZGV2LT50eF9xdWV1ZV9sZW4pIHsKIAkJaWYgKCEodHVuLT5mbGFncyAmIFRVTl9PTkVfUVVFVUUpKSB7CiAJCQkvKiBOb3JtYWwgcXVldWVpbmcgbW9kZS4gKi8KIAkJCS8qIFBhY2tldCBzY2hlZHVsZXIgaGFuZGxlcyBkcm9wcGluZyBvZiBmdXJ0aGVyIHBhY2tldHMuICovCkBAIC0zOTEsMTkgKzM4MSwxOSBAQAogCX0KIAogCS8qIEVucXVldWUgcGFja2V0ICovCi0Jc2tiX3F1ZXVlX3RhaWwoJnR1bi0+cmVhZHEsIHNrYik7CisJc2tiX3F1ZXVlX3RhaWwoJnR1bi0+c29ja2V0LnNrLT5za19yZWNlaXZlX3F1ZXVlLCBza2IpOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCiAJLyogTm90aWZ5IGFuZCB3YWtlIHVwIHJlYWRlciBwcm9jZXNzICovCiAJaWYgKHR1bi0+ZmxhZ3MgJiBUVU5fRkFTWU5DKQogCQlraWxsX2Zhc3luYygmdHVuLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR1bi0+c29ja2V0LndhaXQpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGRyb3A6CiAJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgdHVuX25ldF9tY2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTQ5MiwxMyArNDgyLDEzIEBACiAJaWYgKCF0dW4pCiAJCXJldHVybiBQT0xMRVJSOwogCi0Jc2sgPSB0dW4tPnNrOworCXNrID0gdHVuLT5zb2NrZXQuc2s7CiAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9wb2xsXG4iLCB0dW4tPmRldi0+bmFtZSk7CiAKIAlwb2xsX3dhaXQoZmlsZSwgJnR1bi0+c29ja2V0LndhaXQsIHdhaXQpOwogCi0JaWYgKCFza2JfcXVldWVfZW1wdHkoJnR1bi0+cmVhZHEpKQorCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpCiAJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKIAogCWlmIChzb2NrX3dyaXRlYWJsZShzaykgfHwKQEAgLTUxOSw3ICs1MDksNyBAQAogCQkJCQkgICAgc2l6ZV90IHByZXBhZCwgc2l6ZV90IGxlbiwKIAkJCQkJICAgIHNpemVfdCBsaW5lYXIsIGludCBub2Jsb2NrKQogewotCXN0cnVjdCBzb2NrICpzayA9IHR1bi0+c2s7CisJc3RydWN0IHNvY2sgKnNrID0gdHVuLT5zb2NrZXQuc2s7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZXJyOwogCkBAIC02NDEsNiArNjMxLDkgQEAKIAkJY2FzZSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjY6CiAJCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gU0tCX0dTT19UQ1BWNjsKIAkJCWJyZWFrOworCQljYXNlIFZJUlRJT19ORVRfSERSX0dTT19VRFA6CisJCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gU0tCX0dTT19VRFA7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXR1bi0+ZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJCWtmcmVlX3NrYihza2IpOwpAQCAtNzI2LDYgKzcxOSw4IEBACiAJCQkJZ3NvLmdzb190eXBlID0gVklSVElPX05FVF9IRFJfR1NPX1RDUFY0OwogCQkJZWxzZSBpZiAoc2luZm8tPmdzb190eXBlICYgU0tCX0dTT19UQ1BWNikKIAkJCQlnc28uZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjY7CisJCQllbHNlIGlmIChzaW5mby0+Z3NvX3R5cGUgJiBTS0JfR1NPX1VEUCkKKwkJCQlnc28uZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVURQOwogCQkJZWxzZQogCQkJCUJVRygpOwogCQkJaWYgKHNpbmZvLT5nc29fdHlwZSAmIFNLQl9HU09fVENQX0VDTikKQEAgLTc4Miw3ICs3NzcsNyBAQAogCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKIAogCQkvKiBSZWFkIGZyYW1lcyBmcm9tIHRoZSBxdWV1ZSAqLwotCQlpZiAoIShza2I9c2tiX2RlcXVldWUoJnR1bi0+cmVhZHEpKSkgeworCQlpZiAoIShza2I9c2tiX2RlcXVldWUoJnR1bi0+c29ja2V0LnNrLT5za19yZWNlaXZlX3F1ZXVlKSkpIHsKIAkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewogCQkJCXJldCA9IC1FQUdBSU47CiAJCQkJYnJlYWs7CkBAIC04MTksOCArODE0LDYgQEAKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnR1bi0+cmVhZHEpOwotCiAJdHVuLT5vd25lciA9IC0xOwogCXR1bi0+Z3JvdXAgPSAtMTsKIApAQCAtOTI2LDYgKzkxOSw4IEBACiAKIAlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIGlmci0+aWZyX25hbWUpOwogCWlmIChkZXYpIHsKKwkJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKKwogCQlpZiAoaWZyLT5pZnJfZmxhZ3MgJiBJRkZfVFVOX0VYQ0wpCiAJCQlyZXR1cm4gLUVCVVNZOwogCQlpZiAoKGlmci0+aWZyX2ZsYWdzICYgSUZGX1RVTikgJiYgZGV2LT5uZXRkZXZfb3BzID09ICZ0dW5fbmV0ZGV2X29wcykKQEAgLTkzNSw2ICs5MzAsMTQgQEAKIAkJZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKKwkJaWYgKCgodHVuLT5vd25lciAhPSAtMSAmJiBjcmVkLT5ldWlkICE9IHR1bi0+b3duZXIpIHx8CisJCSAgICAgKHR1bi0+Z3JvdXAgIT0gLTEgJiYgIWluX2Vncm91cF9wKHR1bi0+Z3JvdXApKSkgJiYKKwkJICAgICFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJZXJyID0gc2VjdXJpdHlfdHVuX2Rldl9hdHRhY2godHVuLT5zb2NrZXQuc2spOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisKIAkJZXJyID0gdHVuX2F0dGFjaCh0dW4sIGZpbGUpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CkBAIC05NDcsNiArOTUwLDkgQEAKIAogCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOworCQllcnIgPSBzZWN1cml0eV90dW5fZGV2X2NyZWF0ZSgpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAKIAkJLyogU2V0IGRldiB0eXBlICovCiAJCWlmIChpZnItPmlmcl9mbGFncyAmIElGRl9UVU4pIHsKQEAgLTk4Niw5ICs5OTIsMTAgQEAKIAkJc2stPnNrX3dyaXRlX3NwYWNlID0gdHVuX3NvY2tfd3JpdGVfc3BhY2U7CiAJCXNrLT5za19zbmRidWYgPSBJTlRfTUFYOwogCi0JCXR1bi0+c2sgPSBzazsKIAkJY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgdHVuX3NvY2ssIHNrKS0+dHVuID0gdHVuOwogCisJCXNlY3VyaXR5X3R1bl9kZXZfcG9zdF9jcmVhdGUoc2spOworCiAJCXR1bl9uZXRfaW5pdChkZXYpOwogCiAJCWlmIChzdHJjaHIoZGV2LT5uYW1lLCAnJScpKSB7CkBAIC05OTcsNyArMTAwNCw2IEBACiAJCQkJZ290byBlcnJfZnJlZV9zazsKIAkJfQogCi0JCWVyciA9IC1FSU5WQUw7CiAJCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZSh0dW4tPmRldik7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBlcnJfZnJlZV9zazsKQEAgLTEwNjksNyArMTA3NSw4IEBACiAJb2xkX2ZlYXR1cmVzID0gZGV2LT5mZWF0dXJlczsKIAkvKiBVbnNldCBmZWF0dXJlcywgc2V0IHRoZW0gYXMgd2UgY2hldyBvbiB0aGUgYXJnLiAqLwogCWZlYXR1cmVzID0gKG9sZF9mZWF0dXJlcyAmIH4oTkVUSUZfRl9IV19DU1VNfE5FVElGX0ZfU0d8TkVUSUZfRl9GUkFHTElTVAotCQkJCSAgICB8TkVUSUZfRl9UU09fRUNOfE5FVElGX0ZfVFNPfE5FVElGX0ZfVFNPNikpOworCQkJCSAgICB8TkVUSUZfRl9UU09fRUNOfE5FVElGX0ZfVFNPfE5FVElGX0ZfVFNPNgorCQkJCSAgICB8TkVUSUZfRl9VRk8pKTsKIAogCWlmIChhcmcgJiBUVU5fRl9DU1VNKSB7CiAJCWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTXxORVRJRl9GX1NHfE5FVElGX0ZfRlJBR0xJU1Q7CkBAIC0xMDg2LDYgKzEwOTMsMTEgQEAKIAkJCQlmZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CiAJCQlhcmcgJj0gfihUVU5fRl9UU080fFRVTl9GX1RTTzYpOwogCQl9CisKKwkJaWYgKGFyZyAmIFRVTl9GX1VGTykgeworCQkJZmVhdHVyZXMgfD0gTkVUSUZfRl9VRk87CisJCQlhcmcgJj0gflRVTl9GX1VGTzsKKwkJfQogCX0KIAogCS8qIFRoaXMgZ2l2ZXMgdGhlIHVzZXIgYSB3YXkgdG8gdGVzdCBmb3IgbmV3IGZlYXR1cmVzIGluIGZ1dHVyZSBieQpAQCAtMTIzOSw3ICsxMjUxLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFRVTkdFVFNOREJVRjoKLQkJc25kYnVmID0gdHVuLT5zay0+c2tfc25kYnVmOworCQlzbmRidWYgPSB0dW4tPnNvY2tldC5zay0+c2tfc25kYnVmOwogCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZzbmRidWYsIHNpemVvZihzbmRidWYpKSkKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwpAQCAtMTI1MCw3ICsxMjYyLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJdHVuLT5zay0+c2tfc25kYnVmID0gc25kYnVmOworCQl0dW4tPnNvY2tldC5zay0+c2tfc25kYnVmID0gc25kYnVmOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xMzMzLDcgKzEzNDUsNyBAQAogCiAJdHVuID0gdGZpbGUtPnR1bjsKIAlpZiAodHVuKQotCQlzb2NrX3B1dCh0dW4tPnNrKTsKKwkJc29ja19wdXQodHVuLT5zb2NrZXQuc2spOwogCiAJcHV0X25ldCh0ZmlsZS0+bmV0KTsKIAlrZnJlZSh0ZmlsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmMgYi9kcml2ZXJzL25ldC90eXBob29uLmMKaW5kZXggY2YyNWViNC4uZDZkMzQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwpAQCAtNzYyLDcgKzc2Miw3IEBACiAJdGNwZC0+c3RhdHVzID0gMDsKIH0KIAotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiB0eXBob29uX3N0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHR5cGhvb24gKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTkwOSw3ICs5MDksNyBAQAogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwppbmRleCA4YTdiOGM3Li40NDY5ZjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKQEAgLTIwOSw5ICsyMDksMTAgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAotCXNrYiA9IGRldl9hbGxvY19za2IodWdldGgtPnVnX2luZm8tPnVmX2luZm8ubWF4X3J4X2J1Zl9sZW5ndGggKwotCQkJCSAgVUNDX0dFVEhfUlhfREFUQV9CVUZfQUxJR05NRU5UKTsKLQorCXNrYiA9IF9fc2tiX2RlcXVldWUoJnVnZXRoLT5yeF9yZWN5Y2xlKTsKKwlpZiAoIXNrYikKKwkJc2tiID0gZGV2X2FsbG9jX3NrYih1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5tYXhfcnhfYnVmX2xlbmd0aCArCisJCQkJICAgIFVDQ19HRVRIX1JYX0RBVEFfQlVGX0FMSUdOTUVOVCk7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtNDM3LDM4ICs0MzgsNiBAQAogCQkgICAgIFFFX0NSX1BST1RPQ09MX0VUSEVSTkVULCAwKTsKIH0KIAotI2lmZGVmIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQKLXN0YXRpYyB2b2lkIG1hZ2ljX3BhY2tldF9kZXRlY3Rpb25fZW5hYmxlKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCkKLXsKLQlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKLQlzdHJ1Y3QgdWNjX2dldGggX19pb21lbSAqdWdfcmVnczsKLQotCXVjY2YgPSB1Z2V0aC0+dWNjZjsKLQl1Z19yZWdzID0gdWdldGgtPnVnX3JlZ3M7Ci0KLQkvKiBFbmFibGUgaW50ZXJydXB0cyBmb3IgbWFnaWMgcGFja2V0IGRldGVjdGlvbiAqLwotCXNldGJpdHMzMih1Y2NmLT5wX3VjY20sIFVDQ19HRVRIX1VDQ0VfTVBEKTsKLQotCS8qIEVuYWJsZSBtYWdpYyBwYWNrZXQgZGV0ZWN0aW9uICovCi0Jc2V0Yml0czMyKCZ1Z19yZWdzLT5tYWNjZmcyLCBNQUNDRkcyX01QRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hZ2ljX3BhY2tldF9kZXRlY3Rpb25fZGlzYWJsZShzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGgpCi17Ci0Jc3RydWN0IHVjY19mYXN0X3ByaXZhdGUgKnVjY2Y7Ci0Jc3RydWN0IHVjY19nZXRoIF9faW9tZW0gKnVnX3JlZ3M7Ci0KLQl1Y2NmID0gdWdldGgtPnVjY2Y7Ci0JdWdfcmVncyA9IHVnZXRoLT51Z19yZWdzOwotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBtYWdpYyBwYWNrZXQgZGV0ZWN0aW9uICovCi0JY2xyYml0czMyKHVjY2YtPnBfdWNjbSwgVUNDX0dFVEhfVUNDRV9NUEQpOwotCi0JLyogRGlzYWJsZSBtYWdpYyBwYWNrZXQgZGV0ZWN0aW9uICovCi0JY2xyYml0czMyKCZ1Z19yZWdzLT5tYWNjZmcyLCBNQUNDRkcyX01QRSk7Ci19Ci0jZW5kaWYgLyogTUFHSUNfUEFDS0VUICovCi0KIHN0YXRpYyBpbmxpbmUgaW50IGNvbXBhcmVfYWRkcih1OCAqKmFkZHIxLCB1OCAqKmFkZHIyKQogewogCXJldHVybiBtZW1jbXAoYWRkcjEsIGFkZHIyLCBFTkVUX05VTV9PQ1RFVFNfUEVSX0FERFJFU1MpOwpAQCAtMTQ0MywxODMgKzE0MTIsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgY29udHJvbGxlciBtaWdodCBuZWVkIHRvIGJlIG1hZGUKLSAqIGF3YXJlIG9mIG5ldyBsaW5rIHN0YXRlLiAgVGhlIFBIWSBjb2RlIGNvbnZleXMgdGhpcwotICogaW5mb3JtYXRpb24gdGhyb3VnaCB2YXJpYWJsZXMgaW4gdGhlIHVnZXRoIHN0cnVjdHVyZSwgYW5kIHRoaXMKLSAqIGZ1bmN0aW9uIGNvbnZlcnRzIHRob3NlIHZhcmlhYmxlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZQotICogcmVnaXN0ZXIgdmFsdWVzLCBhbmQgY2FuIGJyaW5nIGRvd24gdGhlIGRldmljZSBpZiBuZWVkZWQuCi0gKi8KLQotc3RhdGljIHZvaWQgYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCB1Y2NfZ2V0aCBfX2lvbWVtICp1Z19yZWdzOwotCXN0cnVjdCB1Y2NfZmFzdCBfX2lvbWVtICp1Zl9yZWdzOwotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1Z2V0aC0+cGh5ZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG5ld19zdGF0ZSA9IDA7Ci0KLQl1Z19yZWdzID0gdWdldGgtPnVnX3JlZ3M7Ci0JdWZfcmVncyA9IHVnZXRoLT51Y2NmLT51Zl9yZWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnVnZXRoLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocGh5ZGV2LT5saW5rKSB7Ci0JCXUzMiB0ZW1wdmFsID0gaW5fYmUzMigmdWdfcmVncy0+bWFjY2ZnMik7Ci0JCXUzMiB1cHNtciA9IGluX2JlMzIoJnVmX3JlZ3MtPnVwc21yKTsKLQkJLyogTm93IHdlIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBiZSBpbiBmdWxsIGR1cGxleCBtb2RlLgotCQkgKiBJZiBub3QsIHdlIG9wZXJhdGUgaW4gaGFsZi1kdXBsZXggbW9kZS4gKi8KLQkJaWYgKHBoeWRldi0+ZHVwbGV4ICE9IHVnZXRoLT5vbGRkdXBsZXgpIHsKLQkJCW5ld19zdGF0ZSA9IDE7Ci0JCQlpZiAoIShwaHlkZXYtPmR1cGxleCkpCi0JCQkJdGVtcHZhbCAmPSB+KE1BQ0NGRzJfRkRYKTsKLQkJCWVsc2UKLQkJCQl0ZW1wdmFsIHw9IE1BQ0NGRzJfRkRYOwotCQkJdWdldGgtPm9sZGR1cGxleCA9IHBoeWRldi0+ZHVwbGV4OwotCQl9Ci0KLQkJaWYgKHBoeWRldi0+c3BlZWQgIT0gdWdldGgtPm9sZHNwZWVkKSB7Ci0JCQluZXdfc3RhdGUgPSAxOwotCQkJc3dpdGNoIChwaHlkZXYtPnNwZWVkKSB7Ci0JCQljYXNlIFNQRUVEXzEwMDA6Ci0JCQkJdGVtcHZhbCA9ICgodGVtcHZhbCAmCi0JCQkJCSAgICB+KE1BQ0NGRzJfSU5URVJGQUNFX01PREVfTUFTSykpIHwKLQkJCQkJICAgIE1BQ0NGRzJfSU5URVJGQUNFX01PREVfQllURSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNQRUVEXzEwMDoKLQkJCWNhc2UgU1BFRURfMTA6Ci0JCQkJdGVtcHZhbCA9ICgodGVtcHZhbCAmCi0JCQkJCSAgICB+KE1BQ0NGRzJfSU5URVJGQUNFX01PREVfTUFTSykpIHwKLQkJCQkJICAgIE1BQ0NGRzJfSU5URVJGQUNFX01PREVfTklCQkxFKTsKLQkJCQkvKiBpZiByZWR1Y2VkIG1vZGUsIHJlLXNldCBVUFNNUi5SMTBNICovCi0JCQkJaWYgKCh1Z2V0aC0+cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkgfHwKLQkJCQkgICAgKHVnZXRoLT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSSkgfHwKLQkJCQkgICAgKHVnZXRoLT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9JRCkgfHwKLQkJCQkgICAgKHVnZXRoLT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEKSB8fAotCQkJCSAgICAodWdldGgtPnBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQpIHx8Ci0JCQkJICAgICh1Z2V0aC0+cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUlRCSSkpIHsKLQkJCQkJaWYgKHBoeWRldi0+c3BlZWQgPT0gU1BFRURfMTApCi0JCQkJCQl1cHNtciB8PSBVQ0NfR0VUSF9VUFNNUl9SMTBNOwotCQkJCQllbHNlCi0JCQkJCQl1cHNtciAmPSB+VUNDX0dFVEhfVVBTTVJfUjEwTTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWlmIChuZXRpZl9tc2dfbGluayh1Z2V0aCkpCi0JCQkJCXVnZXRoX3dhcm4oCi0JCQkJCQkiJXM6IEFjayEgIFNwZWVkICglZCkgaXMgbm90IDEwLzEwMC8xMDAwISIsCi0JCQkJCQlkZXYtPm5hbWUsIHBoeWRldi0+c3BlZWQpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJdWdldGgtPm9sZHNwZWVkID0gcGh5ZGV2LT5zcGVlZDsKLQkJfQotCi0JCW91dF9iZTMyKCZ1Z19yZWdzLT5tYWNjZmcyLCB0ZW1wdmFsKTsKLQkJb3V0X2JlMzIoJnVmX3JlZ3MtPnVwc21yLCB1cHNtcik7Ci0KLQkJaWYgKCF1Z2V0aC0+b2xkbGluaykgewotCQkJbmV3X3N0YXRlID0gMTsKLQkJCXVnZXRoLT5vbGRsaW5rID0gMTsKLQkJfQotCX0gZWxzZSBpZiAodWdldGgtPm9sZGxpbmspIHsKLQkJCW5ld19zdGF0ZSA9IDE7Ci0JCQl1Z2V0aC0+b2xkbGluayA9IDA7Ci0JCQl1Z2V0aC0+b2xkc3BlZWQgPSAwOwotCQkJdWdldGgtPm9sZGR1cGxleCA9IC0xOwotCX0KLQotCWlmIChuZXdfc3RhdGUgJiYgbmV0aWZfbXNnX2xpbmsodWdldGgpKQotCQlwaHlfcHJpbnRfc3RhdHVzKHBoeWRldik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1Z2V0aC0+bG9jaywgZmxhZ3MpOwotfQotCi0vKiBJbml0aWFsaXplIFRCSSBQSFkgaW50ZXJmYWNlIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlCi0gKiBTRVJERVMgbHlueCBQSFkgb24gdGhlIGNoaXAuICBXZSBjb21tdW5pY2F0ZSB3aXRoIHRoaXMgUEhZCi0gKiB0aHJvdWdoIHRoZSBNRElPIGJ1cyBvbiBlYWNoIGNvbnRyb2xsZXIsIHRyZWF0aW5nIGl0IGFzIGEKLSAqICJub3JtYWwiIFBIWSBhdCB0aGUgYWRkcmVzcyBmb3VuZCBpbiB0aGUgVVRCSVBBIHJlZ2lzdGVyLiAgV2UgYXNzdW1lCi0gKiB0aGF0IHRoZSBVVEJJUEEgcmVnaXN0ZXIgaXMgdmFsaWQuICBFaXRoZXIgdGhlIE1ESU8gYnVzIGNvZGUgd2lsbCBzZXQKLSAqIGl0IHRvIGEgdmFsdWUgdGhhdCBkb2Vzbid0IGNvbmZsaWN0IHdpdGggb3RoZXIgUEhZcyBvbiB0aGUgYnVzLCBvciB0aGUKLSAqIHZhbHVlIGRvZXNuJ3QgbWF0dGVyLCBhcyB0aGVyZSBhcmUgbm8gb3RoZXIgUEhZcyBvbiB0aGUgYnVzLgotICovCi1zdGF0aWMgdm9pZCB1ZWNfY29uZmlndXJlX3NlcmRlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHVjY19nZXRoX2luZm8gKnVnX2luZm8gPSB1Z2V0aC0+dWdfaW5mbzsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqdGJpcGh5OwotCi0JaWYgKCF1Z19pbmZvLT50Ymlfbm9kZSkgewotCQlkZXZfd2FybigmZGV2LT5kZXYsICJTR01JSSBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIGRldmljZSAiCi0JCQkidHJlZSBzcGVjaWZ5IGEgdGJpLWhhbmRsZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQl0YmlwaHkgPSBvZl9waHlfZmluZF9kZXZpY2UodWdfaW5mby0+dGJpX25vZGUpOwotCWlmICghdGJpcGh5KSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiZXJyb3I6IENvdWxkIG5vdCBnZXQgVEJJIGRldmljZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIElmIHRoZSBsaW5rIGlzIGFscmVhZHkgdXAsIHdlIG11c3QgYWxyZWFkeSBiZSBvaywgYW5kIGRvbid0IG5lZWQgdG8KLQkgKiBjb25maWd1cmUgYW5kIHJlc2V0IHRoZSBUQkk8LT5TZXJEZXMgbGluay4gIE1heWJlIFUtQm9vdCBjb25maWd1cmVkCi0JICogZXZlcnl0aGluZyBmb3IgdXM/ICBSZXNldHRpbmcgaXQgdGFrZXMgdGhlIGxpbmsgZG93biBhbmQgcmVxdWlyZXMKLQkgKiBzZXZlcmFsIHNlY29uZHMgZm9yIGl0IHRvIGNvbWUgYmFjay4KLQkgKi8KLQlpZiAocGh5X3JlYWQodGJpcGh5LCBFTkVUX1RCSV9NSUlfU1IpICYgVEJJU1JfTFNUQVRVUykKLQkJcmV0dXJuOwotCi0JLyogU2luZ2xlIGNsayBtb2RlLCBtaWkgbW9kZSBvZmYoZm9yIHNlcmRlcyBjb21tdW5pY2F0aW9uKSAqLwotCXBoeV93cml0ZSh0YmlwaHksIEVORVRfVEJJX01JSV9BTkEsIFRCSUFOQV9TRVRUSU5HUyk7Ci0KLQlwaHlfd3JpdGUodGJpcGh5LCBFTkVUX1RCSV9NSUlfVEJJQ09OLCBUQklDT05fQ0xLX1NFTEVDVCk7Ci0KLQlwaHlfd3JpdGUodGJpcGh5LCBFTkVUX1RCSV9NSUlfQ1IsIFRCSUNSX1NFVFRJTkdTKTsKLX0KLQotLyogQ29uZmlndXJlIHRoZSBQSFkgZm9yIGRldi4KLSAqIHJldHVybnMgMCBpZiBzdWNjZXNzLiAgLTEgaWYgZmFpbHVyZQotICovCi1zdGF0aWMgaW50IGluaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCB1Y2NfZ2V0aF9pbmZvICp1Z19pbmZvID0gcHJpdi0+dWdfaW5mbzsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwotCi0JcHJpdi0+b2xkbGluayA9IDA7Ci0JcHJpdi0+b2xkc3BlZWQgPSAwOwotCXByaXYtPm9sZGR1cGxleCA9IC0xOwotCi0JcGh5ZGV2ID0gb2ZfcGh5X2Nvbm5lY3QoZGV2LCB1Z19pbmZvLT5waHlfbm9kZSwgJmFkanVzdF9saW5rLCAwLAotCQkJCXByaXYtPnBoeV9pbnRlcmZhY2UpOwotCWlmICghcGh5ZGV2KQotCQlwaHlkZXYgPSBvZl9waHlfY29ubmVjdF9maXhlZF9saW5rKGRldiwgJmFkanVzdF9saW5rLAotCQkJCQkJICAgcHJpdi0+cGh5X2ludGVyZmFjZSk7Ci0JaWYgKCFwaHlkZXYpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmIChwcml2LT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKLQkJdWVjX2NvbmZpZ3VyZV9zZXJkZXMoZGV2KTsKLQotCXBoeWRldi0+c3VwcG9ydGVkICY9IChBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8Ci0JCQkJIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKLQkJCQkgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKLQkJCQkgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKTsKLQotCWlmIChwcml2LT5tYXhfc3BlZWQgPT0gU1BFRURfMTAwMCkKLQkJcGh5ZGV2LT5zdXBwb3J0ZWQgfD0gQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbDsKLQotCXBoeWRldi0+YWR2ZXJ0aXNpbmcgPSBwaHlkZXYtPnN1cHBvcnRlZDsKLQotCXByaXYtPnBoeWRldiA9IHBoeWRldjsKLQotCXJldHVybiAwOwotfQotCi0KLQogc3RhdGljIGludCB1Z2V0aF9ncmFjZWZ1bF9zdG9wX3R4KHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCkKIHsKIAlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKQEAgLTE2NTAsNyArMTQ0Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdWdldGhfZ3JhY2VmdWxfc3RvcF9yeChzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqIHVnZXRoKQorc3RhdGljIGludCB1Z2V0aF9ncmFjZWZ1bF9zdG9wX3J4KHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCkKIHsKIAlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKIAl1MzIgY2Vjcl9zdWJibG9jazsKQEAgLTE3NDMsNyArMTUzNSw3IEBACiAKIH0KIAotc3RhdGljIGludCB1Z2V0aF9kaXNhYmxlKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICogdWdldGgsIGVudW0gY29tbV9kaXIgbW9kZSkKK3N0YXRpYyBpbnQgdWdldGhfZGlzYWJsZShzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGgsIGVudW0gY29tbV9kaXIgbW9kZSkKIHsKIAlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKIApAQCAtMTc2OSw2ICsxNTYxLDIwNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB1Z2V0aF9xdWllc2NlKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCkKK3sKKwkvKiBXYWl0IGZvciBhbmQgcHJldmVudCBhbnkgZnVydGhlciB4bWl0cy4gKi8KKwluZXRpZl90eF9kaXNhYmxlKHVnZXRoLT5uZGV2KTsKKworCS8qIERpc2FibGUgdGhlIGludGVycnVwdCB0byBhdm9pZCBOQVBJIHJlc2NoZWR1bGluZy4gKi8KKwlkaXNhYmxlX2lycSh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5pcnEpOworCisJLyogU3RvcCBOQVBJLCBhbmQgcG9zc2libHkgd2FpdCBmb3IgaXRzIGNvbXBsZXRpb24uICovCisJbmFwaV9kaXNhYmxlKCZ1Z2V0aC0+bmFwaSk7Cit9CisKK3N0YXRpYyB2b2lkIHVnZXRoX2FjdGl2YXRlKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCkKK3sKKwluYXBpX2VuYWJsZSgmdWdldGgtPm5hcGkpOworCWVuYWJsZV9pcnEodWdldGgtPnVnX2luZm8tPnVmX2luZm8uaXJxKTsKKwluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXModWdldGgtPm5kZXYpOworfQorCisvKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgY29udHJvbGxlciBtaWdodCBuZWVkIHRvIGJlIG1hZGUKKyAqIGF3YXJlIG9mIG5ldyBsaW5rIHN0YXRlLiAgVGhlIFBIWSBjb2RlIGNvbnZleXMgdGhpcworICogaW5mb3JtYXRpb24gdGhyb3VnaCB2YXJpYWJsZXMgaW4gdGhlIHVnZXRoIHN0cnVjdHVyZSwgYW5kIHRoaXMKKyAqIGZ1bmN0aW9uIGNvbnZlcnRzIHRob3NlIHZhcmlhYmxlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZQorICogcmVnaXN0ZXIgdmFsdWVzLCBhbmQgY2FuIGJyaW5nIGRvd24gdGhlIGRldmljZSBpZiBuZWVkZWQuCisgKi8KKworc3RhdGljIHZvaWQgYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB1Y2NfZ2V0aCBfX2lvbWVtICp1Z19yZWdzOworCXN0cnVjdCB1Y2NfZmFzdCBfX2lvbWVtICp1Zl9yZWdzOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1Z2V0aC0+cGh5ZGV2OworCWludCBuZXdfc3RhdGUgPSAwOworCisJdWdfcmVncyA9IHVnZXRoLT51Z19yZWdzOworCXVmX3JlZ3MgPSB1Z2V0aC0+dWNjZi0+dWZfcmVnczsKKworCWlmIChwaHlkZXYtPmxpbmspIHsKKwkJdTMyIHRlbXB2YWwgPSBpbl9iZTMyKCZ1Z19yZWdzLT5tYWNjZmcyKTsKKwkJdTMyIHVwc21yID0gaW5fYmUzMigmdWZfcmVncy0+dXBzbXIpOworCQkvKiBOb3cgd2UgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGJlIGluIGZ1bGwgZHVwbGV4IG1vZGUuCisJCSAqIElmIG5vdCwgd2Ugb3BlcmF0ZSBpbiBoYWxmLWR1cGxleCBtb2RlLiAqLworCQlpZiAocGh5ZGV2LT5kdXBsZXggIT0gdWdldGgtPm9sZGR1cGxleCkgeworCQkJbmV3X3N0YXRlID0gMTsKKwkJCWlmICghKHBoeWRldi0+ZHVwbGV4KSkKKwkJCQl0ZW1wdmFsICY9IH4oTUFDQ0ZHMl9GRFgpOworCQkJZWxzZQorCQkJCXRlbXB2YWwgfD0gTUFDQ0ZHMl9GRFg7CisJCQl1Z2V0aC0+b2xkZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7CisJCX0KKworCQlpZiAocGh5ZGV2LT5zcGVlZCAhPSB1Z2V0aC0+b2xkc3BlZWQpIHsKKwkJCW5ld19zdGF0ZSA9IDE7CisJCQlzd2l0Y2ggKHBoeWRldi0+c3BlZWQpIHsKKwkJCWNhc2UgU1BFRURfMTAwMDoKKwkJCQl0ZW1wdmFsID0gKCh0ZW1wdmFsICYKKwkJCQkJICAgIH4oTUFDQ0ZHMl9JTlRFUkZBQ0VfTU9ERV9NQVNLKSkgfAorCQkJCQkgICAgTUFDQ0ZHMl9JTlRFUkZBQ0VfTU9ERV9CWVRFKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1BFRURfMTAwOgorCQkJY2FzZSBTUEVFRF8xMDoKKwkJCQl0ZW1wdmFsID0gKCh0ZW1wdmFsICYKKwkJCQkJICAgIH4oTUFDQ0ZHMl9JTlRFUkZBQ0VfTU9ERV9NQVNLKSkgfAorCQkJCQkgICAgTUFDQ0ZHMl9JTlRFUkZBQ0VfTU9ERV9OSUJCTEUpOworCQkJCS8qIGlmIHJlZHVjZWQgbW9kZSwgcmUtc2V0IFVQU01SLlIxME0gKi8KKwkJCQlpZiAoKHVnZXRoLT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKSB8fAorCQkJCSAgICAodWdldGgtPnBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJKSB8fAorCQkJCSAgICAodWdldGgtPnBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEKSB8fAorCQkJCSAgICAodWdldGgtPnBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQpIHx8CisJCQkJICAgICh1Z2V0aC0+cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRCkgfHwKKwkJCQkgICAgKHVnZXRoLT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9SVEJJKSkgeworCQkJCQlpZiAocGh5ZGV2LT5zcGVlZCA9PSBTUEVFRF8xMCkKKwkJCQkJCXVwc21yIHw9IFVDQ19HRVRIX1VQU01SX1IxME07CisJCQkJCWVsc2UKKwkJCQkJCXVwc21yICY9IH5VQ0NfR0VUSF9VUFNNUl9SMTBNOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKG5ldGlmX21zZ19saW5rKHVnZXRoKSkKKwkJCQkJdWdldGhfd2FybigKKwkJCQkJCSIlczogQWNrISAgU3BlZWQgKCVkKSBpcyBub3QgMTAvMTAwLzEwMDAhIiwKKwkJCQkJCWRldi0+bmFtZSwgcGh5ZGV2LT5zcGVlZCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQl1Z2V0aC0+b2xkc3BlZWQgPSBwaHlkZXYtPnNwZWVkOworCQl9CisKKwkJLyoKKwkJICogVG8gY2hhbmdlIHRoZSBNQUMgY29uZmlndXJhdGlvbiB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlCisJCSAqIGNvbnRyb2xsZXIuIFRvIGRvIHNvLCB3ZSBoYXZlIHRvIGVpdGhlciBncmFiIHVnZXRoLT5sb2NrLAorCQkgKiB3aGljaCBpcyBhIGJhZCBpZGVhIHNpbmNlICdncmFjZWZ1bCBzdG9wJyBjb21tYW5kcyBtaWdodAorCQkgKiB0YWtlIHF1aXRlIGEgd2hpbGUsIG9yIHdlIGNhbiBxdWllc2NlIGRyaXZlcidzIGFjdGl2aXR5LgorCQkgKi8KKwkJdWdldGhfcXVpZXNjZSh1Z2V0aCk7CisJCXVnZXRoX2Rpc2FibGUodWdldGgsIENPTU1fRElSX1JYX0FORF9UWCk7CisKKwkJb3V0X2JlMzIoJnVnX3JlZ3MtPm1hY2NmZzIsIHRlbXB2YWwpOworCQlvdXRfYmUzMigmdWZfcmVncy0+dXBzbXIsIHVwc21yKTsKKworCQl1Z2V0aF9lbmFibGUodWdldGgsIENPTU1fRElSX1JYX0FORF9UWCk7CisJCXVnZXRoX2FjdGl2YXRlKHVnZXRoKTsKKworCQlpZiAoIXVnZXRoLT5vbGRsaW5rKSB7CisJCQluZXdfc3RhdGUgPSAxOworCQkJdWdldGgtPm9sZGxpbmsgPSAxOworCQl9CisJfSBlbHNlIGlmICh1Z2V0aC0+b2xkbGluaykgeworCQkJbmV3X3N0YXRlID0gMTsKKwkJCXVnZXRoLT5vbGRsaW5rID0gMDsKKwkJCXVnZXRoLT5vbGRzcGVlZCA9IDA7CisJCQl1Z2V0aC0+b2xkZHVwbGV4ID0gLTE7CisJfQorCisJaWYgKG5ld19zdGF0ZSAmJiBuZXRpZl9tc2dfbGluayh1Z2V0aCkpCisJCXBoeV9wcmludF9zdGF0dXMocGh5ZGV2KTsKK30KKworLyogSW5pdGlhbGl6ZSBUQkkgUEhZIGludGVyZmFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZQorICogU0VSREVTIGx5bnggUEhZIG9uIHRoZSBjaGlwLiAgV2UgY29tbXVuaWNhdGUgd2l0aCB0aGlzIFBIWQorICogdGhyb3VnaCB0aGUgTURJTyBidXMgb24gZWFjaCBjb250cm9sbGVyLCB0cmVhdGluZyBpdCBhcyBhCisgKiAibm9ybWFsIiBQSFkgYXQgdGhlIGFkZHJlc3MgZm91bmQgaW4gdGhlIFVUQklQQSByZWdpc3Rlci4gIFdlIGFzc3VtZQorICogdGhhdCB0aGUgVVRCSVBBIHJlZ2lzdGVyIGlzIHZhbGlkLiAgRWl0aGVyIHRoZSBNRElPIGJ1cyBjb2RlIHdpbGwgc2V0CisgKiBpdCB0byBhIHZhbHVlIHRoYXQgZG9lc24ndCBjb25mbGljdCB3aXRoIG90aGVyIFBIWXMgb24gdGhlIGJ1cywgb3IgdGhlCisgKiB2YWx1ZSBkb2Vzbid0IG1hdHRlciwgYXMgdGhlcmUgYXJlIG5vIG90aGVyIFBIWXMgb24gdGhlIGJ1cy4KKyAqLworc3RhdGljIHZvaWQgdWVjX2NvbmZpZ3VyZV9zZXJkZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB1Y2NfZ2V0aF9pbmZvICp1Z19pbmZvID0gdWdldGgtPnVnX2luZm87CisJc3RydWN0IHBoeV9kZXZpY2UgKnRiaXBoeTsKKworCWlmICghdWdfaW5mby0+dGJpX25vZGUpIHsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiU0dNSUkgbW9kZSByZXF1aXJlcyB0aGF0IHRoZSBkZXZpY2UgIgorCQkJInRyZWUgc3BlY2lmeSBhIHRiaS1oYW5kbGVcbiIpOworCQlyZXR1cm47CisJfQorCisJdGJpcGh5ID0gb2ZfcGh5X2ZpbmRfZGV2aWNlKHVnX2luZm8tPnRiaV9ub2RlKTsKKwlpZiAoIXRiaXBoeSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImVycm9yOiBDb3VsZCBub3QgZ2V0IFRCSSBkZXZpY2VcbiIpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB0aGUgbGluayBpcyBhbHJlYWR5IHVwLCB3ZSBtdXN0IGFscmVhZHkgYmUgb2ssIGFuZCBkb24ndCBuZWVkIHRvCisJICogY29uZmlndXJlIGFuZCByZXNldCB0aGUgVEJJPC0+U2VyRGVzIGxpbmsuICBNYXliZSBVLUJvb3QgY29uZmlndXJlZAorCSAqIGV2ZXJ5dGhpbmcgZm9yIHVzPyAgUmVzZXR0aW5nIGl0IHRha2VzIHRoZSBsaW5rIGRvd24gYW5kIHJlcXVpcmVzCisJICogc2V2ZXJhbCBzZWNvbmRzIGZvciBpdCB0byBjb21lIGJhY2suCisJICovCisJaWYgKHBoeV9yZWFkKHRiaXBoeSwgRU5FVF9UQklfTUlJX1NSKSAmIFRCSVNSX0xTVEFUVVMpCisJCXJldHVybjsKKworCS8qIFNpbmdsZSBjbGsgbW9kZSwgbWlpIG1vZGUgb2ZmKGZvciBzZXJkZXMgY29tbXVuaWNhdGlvbikgKi8KKwlwaHlfd3JpdGUodGJpcGh5LCBFTkVUX1RCSV9NSUlfQU5BLCBUQklBTkFfU0VUVElOR1MpOworCisJcGh5X3dyaXRlKHRiaXBoeSwgRU5FVF9UQklfTUlJX1RCSUNPTiwgVEJJQ09OX0NMS19TRUxFQ1QpOworCisJcGh5X3dyaXRlKHRiaXBoeSwgRU5FVF9UQklfTUlJX0NSLCBUQklDUl9TRVRUSU5HUyk7Cit9CisKKy8qIENvbmZpZ3VyZSB0aGUgUEhZIGZvciBkZXYuCisgKiByZXR1cm5zIDAgaWYgc3VjY2Vzcy4gIC0xIGlmIGZhaWx1cmUKKyAqLworc3RhdGljIGludCBpbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdWNjX2dldGhfaW5mbyAqdWdfaW5mbyA9IHByaXYtPnVnX2luZm87CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKKworCXByaXYtPm9sZGxpbmsgPSAwOworCXByaXYtPm9sZHNwZWVkID0gMDsKKwlwcml2LT5vbGRkdXBsZXggPSAtMTsKKworCXBoeWRldiA9IG9mX3BoeV9jb25uZWN0KGRldiwgdWdfaW5mby0+cGh5X25vZGUsICZhZGp1c3RfbGluaywgMCwKKwkJCQlwcml2LT5waHlfaW50ZXJmYWNlKTsKKwlpZiAoIXBoeWRldikKKwkJcGh5ZGV2ID0gb2ZfcGh5X2Nvbm5lY3RfZml4ZWRfbGluayhkZXYsICZhZGp1c3RfbGluaywKKwkJCQkJCSAgIHByaXYtPnBoeV9pbnRlcmZhY2UpOworCWlmICghcGh5ZGV2KSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAocHJpdi0+cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpCisJCXVlY19jb25maWd1cmVfc2VyZGVzKGRldik7CisKKwlwaHlkZXYtPnN1cHBvcnRlZCAmPSAoQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAorCQkJCSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8CisJCQkJIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkJIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCk7CisKKwlpZiAocHJpdi0+bWF4X3NwZWVkID09IFNQRUVEXzEwMDApCisJCXBoeWRldi0+c3VwcG9ydGVkIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7CisKKwlwaHlkZXYtPmFkdmVydGlzaW5nID0gcGh5ZGV2LT5zdXBwb3J0ZWQ7CisKKwlwcml2LT5waHlkZXYgPSBwaHlkZXY7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgdWdldGhfZHVtcF9yZWdzKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCkKIHsKICNpZmRlZiBERUJVRwpAQCAtMTk4Niw2ICsxOTc5LDggQEAKIAkJaW91bm1hcCh1Z2V0aC0+dWdfcmVncyk7CiAJCXVnZXRoLT51Z19yZWdzID0gTlVMTDsKIAl9CisKKwlza2JfcXVldWVfcHVyZ2UoJnVnZXRoLT5yeF9yZWN5Y2xlKTsKIH0KIAogc3RhdGljIHZvaWQgdWNjX2dldGhfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0yMjAyLDYgKzIxOTcsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlza2JfcXVldWVfaGVhZF9pbml0KCZ1Z2V0aC0+cnhfcmVjeWNsZSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzE3NCw3ICszMTcxLDcgQEAKICNlbmRpZgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVnZXRoLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IHVjY19nZXRoX3J4KHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwgdTggcnhRLCBpbnQgcnhfd29ya19saW1pdCkKQEAgLTMyMDksOCArMzIwNiwxMCBAQAogCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIodWdldGgpKQogCQkJCXVnZXRoX2VycigiJXMsICVkOiBFUlJPUiEhISBza2IgLSAweCUwOHgiLAogCQkJCQkgICBfX2Z1bmNfXywgX19MSU5FX18sICh1MzIpIHNrYik7Ci0JCQlpZiAoc2tiKQotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQlpZiAoc2tiKSB7CisJCQkJc2tiLT5kYXRhID0gc2tiLT5oZWFkICsgTkVUX1NLQl9QQUQ7CisJCQkJX19za2JfcXVldWVfaGVhZCgmdWdldGgtPnJ4X3JlY3ljbGUsIHNrYik7CisJCQl9CiAKIAkJCXVnZXRoLT5yeF9za2J1ZmZbcnhRXVt1Z2V0aC0+c2tiX2N1cnJ4W3J4UV1dID0gTlVMTDsKIAkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwpAQCAtMzI2OCw2ICszMjY3LDggQEAKIAogCS8qIE5vcm1hbCBwcm9jZXNzaW5nLiAqLwogCXdoaWxlICgoYmRfc3RhdHVzICYgVF9SKSA9PSAwKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisKIAkJLyogQkQgY29udGFpbnMgYWxyZWFkeSB0cmFuc21pdHRlZCBidWZmZXIuICAgKi8KIAkJLyogSGFuZGxlIHRoZSB0cmFuc21pdHRlZCBidWZmZXIgYW5kIHJlbGVhc2UgKi8KIAkJLyogdGhlIEJEIHRvIGJlIHVzZWQgd2l0aCB0aGUgY3VycmVudCBmcmFtZSAgKi8KQEAgLTMyNzcsOSArMzI3OCwxNiBAQAogCiAJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCi0JCS8qIEZyZWUgdGhlIHNrIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBUeEJEICovCi0JCWRldl9rZnJlZV9za2IodWdldGgtPgotCQkJCSAgdHhfc2tidWZmW3R4UV1bdWdldGgtPnNrYl9kaXJ0eXR4W3R4UV1dKTsKKwkJc2tiID0gdWdldGgtPnR4X3NrYnVmZlt0eFFdW3VnZXRoLT5za2JfZGlydHl0eFt0eFFdXTsKKworCQlpZiAoc2tiX3F1ZXVlX2xlbigmdWdldGgtPnJ4X3JlY3ljbGUpIDwgUlhfQkRfUklOR19MRU4gJiYKKwkJCSAgICAgc2tiX3JlY3ljbGVfY2hlY2soc2tiLAorCQkJCSAgICB1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5tYXhfcnhfYnVmX2xlbmd0aCArCisJCQkJICAgIFVDQ19HRVRIX1JYX0RBVEFfQlVGX0FMSUdOTUVOVCkpCisJCQlfX3NrYl9xdWV1ZV9oZWFkKCZ1Z2V0aC0+cnhfcmVjeWNsZSwgc2tiKTsKKwkJZWxzZQorCQkJZGV2X2tmcmVlX3NrYihza2IpOworCiAJCXVnZXRoLT50eF9za2J1ZmZbdHhRXVt1Z2V0aC0+c2tiX2RpcnR5dHhbdHhRXV0gPSBOVUxMOwogCQl1Z2V0aC0+c2tiX2RpcnR5dHhbdHhRXSA9CiAJCSAgICAodWdldGgtPnNrYl9kaXJ0eXR4W3R4UV0gKwpAQCAtMzMwOCwxNiArMzMxNiwxNiBAQAogCiAJdWdfaW5mbyA9IHVnZXRoLT51Z19pbmZvOwogCi0JaG93bWFueSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHVnX2luZm8tPm51bVF1ZXVlc1J4OyBpKyspCi0JCWhvd21hbnkgKz0gdWNjX2dldGhfcngodWdldGgsIGksIGJ1ZGdldCAtIGhvd21hbnkpOwotCiAJLyogVHggZXZlbnQgcHJvY2Vzc2luZyAqLwogCXNwaW5fbG9jaygmdWdldGgtPmxvY2spOwogCWZvciAoaSA9IDA7IGkgPCB1Z19pbmZvLT5udW1RdWV1ZXNUeDsgaSsrKQogCQl1Y2NfZ2V0aF90eCh1Z2V0aC0+bmRldiwgaSk7CiAJc3Bpbl91bmxvY2soJnVnZXRoLT5sb2NrKTsKIAorCWhvd21hbnkgPSAwOworCWZvciAoaSA9IDA7IGkgPCB1Z19pbmZvLT5udW1RdWV1ZXNSeDsgaSsrKQorCQlob3dtYW55ICs9IHVjY19nZXRoX3J4KHVnZXRoLCBpLCBidWRnZXQgLSBob3dtYW55KTsKKwogCWlmIChob3dtYW55IDwgYnVkZ2V0KSB7CiAJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXNldGJpdHMzMih1Z2V0aC0+dWNjZi0+cF91Y2NtLCBVQ0NFX1JYX0VWRU5UUyB8IFVDQ0VfVFhfRVZFTlRTKTsKQEAgLTM0MTQsNDYgKzM0MjIsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogQ2FsbGVkIHdoZW4gc29tZXRoaW5nIG5lZWRzIHRvIHVzZSB0aGUgZXRoZXJuZXQgZGV2aWNlICovCi0vKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuICovCi1zdGF0aWMgaW50IHVjY19nZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdWNjX2dldGhfaW5pdF9tYWMoc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoKQogewotCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHVnZXRoLT5uZGV2OwogCWludCBlcnI7CiAKLQl1Z2V0aF92ZGJnKCIlczogSU4iLCBfX2Z1bmNfXyk7Ci0KLQkvKiBUZXN0IHN0YXRpb24gYWRkcmVzcyAqLwotCWlmIChkZXYtPmRldl9hZGRyWzBdICYgRU5FVF9HUk9VUF9BRERSKSB7Ci0JCWlmIChuZXRpZl9tc2dfaWZ1cCh1Z2V0aCkpCi0JCQl1Z2V0aF9lcnIoIiVzOiBNdWx0aWNhc3QgYWRkcmVzcyB1c2VkIGZvciBzdGF0aW9uIGFkZHJlc3MiCi0JCQkJICAiIC0gaXMgdGhpcyB3aGF0IHlvdSB3YW50ZWQ/IiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQllcnIgPSBpbml0X3BoeShkZXYpOwotCWlmIChlcnIpIHsKLQkJaWYgKG5ldGlmX21zZ19pZnVwKHVnZXRoKSkKLQkJCXVnZXRoX2VycigiJXM6IENhbm5vdCBpbml0aWFsaXplIFBIWSwgYWJvcnRpbmcuIiwKLQkJCQkgIGRldi0+bmFtZSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCiAJZXJyID0gdWNjX3N0cnVjdF9pbml0KHVnZXRoKTsKIAlpZiAoZXJyKSB7CiAJCWlmIChuZXRpZl9tc2dfaWZ1cCh1Z2V0aCkpCi0JCQl1Z2V0aF9lcnIoIiVzOiBDYW5ub3QgY29uZmlndXJlIGludGVybmFsIHN0cnVjdCwgYWJvcnRpbmcuIiwgZGV2LT5uYW1lKTsKLQkJZ290byBvdXRfZXJyX3N0b3A7CisJCQl1Z2V0aF9lcnIoIiVzOiBDYW5ub3QgY29uZmlndXJlIGludGVybmFsIHN0cnVjdCwgIgorCQkJCSAgImFib3J0aW5nLiIsIGRldi0+bmFtZSk7CisJCWdvdG8gZXJyOwogCX0KIAotCW5hcGlfZW5hYmxlKCZ1Z2V0aC0+bmFwaSk7Ci0KIAllcnIgPSB1Y2NfZ2V0aF9zdGFydHVwKHVnZXRoKTsKIAlpZiAoZXJyKSB7CiAJCWlmIChuZXRpZl9tc2dfaWZ1cCh1Z2V0aCkpCiAJCQl1Z2V0aF9lcnIoIiVzOiBDYW5ub3QgY29uZmlndXJlIG5ldCBkZXZpY2UsIGFib3J0aW5nLiIsCiAJCQkJICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dF9lcnI7CisJCWdvdG8gZXJyOwogCX0KIAogCWVyciA9IGFkanVzdF9lbmV0X2ludGVyZmFjZSh1Z2V0aCk7CkBAIC0zNDYxLDcgKzM0NDgsNyBAQAogCQlpZiAobmV0aWZfbXNnX2lmdXAodWdldGgpKQogCQkJdWdldGhfZXJyKCIlczogQ2Fubm90IGNvbmZpZ3VyZSBuZXQgZGV2aWNlLCBhYm9ydGluZy4iLAogCQkJCSAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXRfZXJyOworCQlnb3RvIGVycjsKIAl9CiAKIAkvKiAgICAgICBTZXQgTUFDU1ROQUREUjEsIE1BQ1NUTkFERFIyICAgICAgICAgICAgICAgICovCkBAIC0zNDc1LDEzICszNDYyLDUxIEBACiAJCQkJICAgJnVnZXRoLT51Z19yZWdzLT5tYWNzdG5hZGRyMSwKIAkJCQkgICAmdWdldGgtPnVnX3JlZ3MtPm1hY3N0bmFkZHIyKTsKIAotCXBoeV9zdGFydCh1Z2V0aC0+cGh5ZGV2KTsKLQogCWVyciA9IHVnZXRoX2VuYWJsZSh1Z2V0aCwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKIAlpZiAoZXJyKSB7CiAJCWlmIChuZXRpZl9tc2dfaWZ1cCh1Z2V0aCkpCiAJCQl1Z2V0aF9lcnIoIiVzOiBDYW5ub3QgZW5hYmxlIG5ldCBkZXZpY2UsIGFib3J0aW5nLiIsIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0X2VycjsKKwkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJdWNjX2dldGhfc3RvcCh1Z2V0aCk7CisJcmV0dXJuIGVycjsKK30KKworLyogQ2FsbGVkIHdoZW4gc29tZXRoaW5nIG5lZWRzIHRvIHVzZSB0aGUgZXRoZXJuZXQgZGV2aWNlICovCisvKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuICovCitzdGF0aWMgaW50IHVjY19nZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnI7CisKKwl1Z2V0aF92ZGJnKCIlczogSU4iLCBfX2Z1bmNfXyk7CisKKwkvKiBUZXN0IHN0YXRpb24gYWRkcmVzcyAqLworCWlmIChkZXYtPmRldl9hZGRyWzBdICYgRU5FVF9HUk9VUF9BRERSKSB7CisJCWlmIChuZXRpZl9tc2dfaWZ1cCh1Z2V0aCkpCisJCQl1Z2V0aF9lcnIoIiVzOiBNdWx0aWNhc3QgYWRkcmVzcyB1c2VkIGZvciBzdGF0aW9uICIKKwkJCQkgICJhZGRyZXNzIC0gaXMgdGhpcyB3aGF0IHlvdSB3YW50ZWQ/IiwKKwkJCQkgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyID0gaW5pdF9waHkoZGV2KTsKKwlpZiAoZXJyKSB7CisJCWlmIChuZXRpZl9tc2dfaWZ1cCh1Z2V0aCkpCisJCQl1Z2V0aF9lcnIoIiVzOiBDYW5ub3QgaW5pdGlhbGl6ZSBQSFksIGFib3J0aW5nLiIsCisJCQkJICBkZXYtPm5hbWUpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHVjY19nZXRoX2luaXRfbWFjKHVnZXRoKTsKKwlpZiAoZXJyKSB7CisJCWlmIChuZXRpZl9tc2dfaWZ1cCh1Z2V0aCkpCisJCQl1Z2V0aF9lcnIoIiVzOiBDYW5ub3QgaW5pdGlhbGl6ZSBNQUMsIGFib3J0aW5nLiIsCisJCQkJICBkZXYtPm5hbWUpOworCQlnb3RvIGVycjsKIAl9CiAKIAllcnIgPSByZXF1ZXN0X2lycSh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5pcnEsIHVjY19nZXRoX2lycV9oYW5kbGVyLApAQCAtMzQ5MCwxNiArMzUxNSwyMCBAQAogCQlpZiAobmV0aWZfbXNnX2lmdXAodWdldGgpKQogCQkJdWdldGhfZXJyKCIlczogQ2Fubm90IGdldCBJUlEgZm9yIG5ldCBkZXZpY2UsIGFib3J0aW5nLiIsCiAJCQkJICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dF9lcnI7CisJCWdvdG8gZXJyOwogCX0KIAorCXBoeV9zdGFydCh1Z2V0aC0+cGh5ZGV2KTsKKwluYXBpX2VuYWJsZSgmdWdldGgtPm5hcGkpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKKwlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZkZXYtPmRldiwKKwkJCXFlX2FsaXZlX2R1cmluZ19zbGVlcCgpIHx8IHVnZXRoLT5waHlkZXYtPmlycSk7CisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZkZXYtPmRldiwgdWdldGgtPndvbF9lbik7CisKIAlyZXR1cm4gZXJyOwogCi1vdXRfZXJyOgotCW5hcGlfZGlzYWJsZSgmdWdldGgtPm5hcGkpOwotb3V0X2Vycl9zdG9wOgorZXJyOgogCXVjY19nZXRoX3N0b3AodWdldGgpOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNTYxLDYgKzM1OTAsODUgQEAKIAlzY2hlZHVsZV93b3JrKCZ1Z2V0aC0+dGltZW91dF93b3JrKTsKIH0KIAorCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgdWNjX2dldGhfc3VzcGVuZChzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKKwlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCWlmICghbmV0aWZfcnVubmluZyhuZGV2KSkKKwkJcmV0dXJuIDA7CisKKwluYXBpX2Rpc2FibGUoJnVnZXRoLT5uYXBpKTsKKworCS8qCisJICogRGlzYWJsZSB0aGUgY29udHJvbGxlciwgb3RoZXJ3aXNlIHdlJ2xsIHdha2V1cCBvbiBhbnkgbmV0d29yaworCSAqIGFjdGl2aXR5LgorCSAqLworCXVnZXRoX2Rpc2FibGUodWdldGgsIENPTU1fRElSX1JYX0FORF9UWCk7CisKKwlpZiAodWdldGgtPndvbF9lbiAmIFdBS0VfTUFHSUMpIHsKKwkJc2V0Yml0czMyKHVnZXRoLT51Y2NmLT5wX3VjY20sIFVDQ19HRVRIX1VDQ0VfTVBEKTsKKwkJc2V0Yml0czMyKCZ1Z2V0aC0+dWdfcmVncy0+bWFjY2ZnMiwgTUFDQ0ZHMl9NUEUpOworCQl1Y2NfZmFzdF9lbmFibGUodWdldGgtPnVjY2YsIENPTU1fRElSX1JYX0FORF9UWCk7CisJfSBlbHNlIGlmICghKHVnZXRoLT53b2xfZW4gJiBXQUtFX1BIWSkpIHsKKwkJcGh5X3N0b3AodWdldGgtPnBoeWRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWNjX2dldGhfcmVzdW1lKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKKwlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpbnQgZXJyOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKG5kZXYpKQorCQlyZXR1cm4gMDsKKworCWlmIChxZV9hbGl2ZV9kdXJpbmdfc2xlZXAoKSkgeworCQlpZiAodWdldGgtPndvbF9lbiAmIFdBS0VfTUFHSUMpIHsKKwkJCXVjY19mYXN0X2Rpc2FibGUodWdldGgtPnVjY2YsIENPTU1fRElSX1JYX0FORF9UWCk7CisJCQljbHJiaXRzMzIoJnVnZXRoLT51Z19yZWdzLT5tYWNjZmcyLCBNQUNDRkcyX01QRSk7CisJCQljbHJiaXRzMzIodWdldGgtPnVjY2YtPnBfdWNjbSwgVUNDX0dFVEhfVUNDRV9NUEQpOworCQl9CisJCXVnZXRoX2VuYWJsZSh1Z2V0aCwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBGdWxsIHJlaW5pdGlhbGl6YXRpb24gaXMgcmVxdWlyZWQgaWYgUUUgc2h1dHMgZG93bgorCQkgKiBkdXJpbmcgc2xlZXAuCisJCSAqLworCQl1Y2NfZ2V0aF9tZW1jbGVhbih1Z2V0aCk7CisKKwkJZXJyID0gdWNjX2dldGhfaW5pdF9tYWModWdldGgpOworCQlpZiAoZXJyKSB7CisJCQl1Z2V0aF9lcnIoIiVzOiBDYW5ub3QgaW5pdGlhbGl6ZSBNQUMsIGFib3J0aW5nLiIsCisJCQkJICBuZGV2LT5uYW1lKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwl1Z2V0aC0+b2xkbGluayA9IDA7CisJdWdldGgtPm9sZHNwZWVkID0gMDsKKwl1Z2V0aC0+b2xkZHVwbGV4ID0gLTE7CisKKwlwaHlfc3RvcCh1Z2V0aC0+cGh5ZGV2KTsKKwlwaHlfc3RhcnQodWdldGgtPnBoeWRldik7CisKKwluYXBpX2VuYWJsZSgmdWdldGgtPm5hcGkpOworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHVjY19nZXRoX3N1c3BlbmQgTlVMTAorI2RlZmluZSB1Y2NfZ2V0aF9yZXN1bWUgTlVMTAorI2VuZGlmCisKIHN0YXRpYyBwaHlfaW50ZXJmYWNlX3QgdG9fcGh5X2ludGVyZmFjZShjb25zdCBjaGFyICpwaHlfY29ubmVjdGlvbl90eXBlKQogewogCWlmIChzdHJjYXNlY21wKHBoeV9jb25uZWN0aW9uX3R5cGUsICJtaWkiKSA9PSAwKQpAQCAtMzg1Miw2ICszOTYwLDggQEAKIAkubWF0Y2hfdGFibGUJPSB1Y2NfZ2V0aF9tYXRjaCwKIAkucHJvYmUJCT0gdWNjX2dldGhfcHJvYmUsCiAJLnJlbW92ZQkJPSB1Y2NfZ2V0aF9yZW1vdmUsCisJLnN1c3BlbmQJPSB1Y2NfZ2V0aF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gdWNjX2dldGhfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdWNjX2dldGhfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGguaCBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKaW5kZXggMTk1YWIyNi4uMDNhNmNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGguaAorKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCkBAIC0xMjEyLDYgKzEyMTIsOCBAQAogCS8qIGluZGV4IG9mIHRoZSBmaXJzdCBza2Igd2hpY2ggaGFzbid0IGJlZW4gdHJhbnNtaXR0ZWQgeWV0LiAqLwogCXUxNiBza2JfZGlydHl0eFtOVU1fVFhfUVVFVUVTXTsKIAorCXN0cnVjdCBza19idWZmX2hlYWQgcnhfcmVjeWNsZTsKKwogCXN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm87CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAlwaHlfaW50ZXJmYWNlX3QgcGh5X2ludGVyZmFjZTsKQEAgLTEyMjAsNiArMTIyMiw3IEBACiAJaW50IG9sZHNwZWVkOwogCWludCBvbGRkdXBsZXg7CiAJaW50IG9sZGxpbms7CisJaW50IHdvbF9lbjsKIAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKaW5kZXggNjFmZTgwZC4uNzA3NWYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYwpAQCAtMzE5LDkgKzMxOSwxMyBAQAogCWludCBpLCBqID0gMDsKIAogCWlmIChzdGF0c19tb2RlICYgVUNDX0dFVEhfU1RBVElTVElDU19HQVRIRVJJTkdfTU9ERV9IQVJEV0FSRSkgewotCQliYXNlID0gKHUzMiBfX2lvbWVtICopJnVnZXRoLT51Z19yZWdzLT50eDY0OworCQlpZiAodWdldGgtPnVnX3JlZ3MpCisJCQliYXNlID0gKHUzMiBfX2lvbWVtICopJnVnZXRoLT51Z19yZWdzLT50eDY0OworCQllbHNlCisJCQliYXNlID0gTlVMTDsKKwogCQlmb3IgKGkgPSAwOyBpIDwgVUVDX0hXX1NUQVRTX0xFTjsgaSsrKQotCQkJZGF0YVtqKytdID0gaW5fYmUzMigmYmFzZVtpXSk7CisJCQlkYXRhW2orK10gPSBiYXNlID8gaW5fYmUzMigmYmFzZVtpXSkgOiAwOwogCX0KIAlpZiAoc3RhdHNfbW9kZSAmIFVDQ19HRVRIX1NUQVRJU1RJQ1NfR0FUSEVSSU5HX01PREVfRklSTVdBUkVfVFgpIHsKIAkJYmFzZSA9ICh1MzIgX19pb21lbSAqKXVnZXRoLT5wX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbTsKQEAgLTM1NSw2ICszNTksNDQgQEAKIAlkcnZpbmZvLT5yZWdkdW1wX2xlbiA9IHVlY19nZXRfcmVnc19sZW4obmV0ZGV2KTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgdm9pZCB1ZWNfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdWdldGgtPnBoeWRldjsKKworCWlmIChwaHlkZXYgJiYgcGh5ZGV2LT5pcnEpCisJCXdvbC0+c3VwcG9ydGVkIHw9IFdBS0VfUEhZOworCWlmIChxZV9hbGl2ZV9kdXJpbmdfc2xlZXAoKSkKKwkJd29sLT5zdXBwb3J0ZWQgfD0gV0FLRV9NQUdJQzsKKworCXdvbC0+d29sb3B0cyA9IHVnZXRoLT53b2xfZW47Cit9CisKK3N0YXRpYyBpbnQgdWVjX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVnZXRoLT5waHlkZXY7CisKKwlpZiAod29sLT53b2xvcHRzICYgfihXQUtFX1BIWSB8IFdBS0VfTUFHSUMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIGlmICh3b2wtPndvbG9wdHMgJiBXQUtFX1BIWSAmJiAoIXBoeWRldiB8fCAhcGh5ZGV2LT5pcnEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIGlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDICYmICFxZV9hbGl2ZV9kdXJpbmdfc2xlZXAoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1Z2V0aC0+d29sX2VuID0gd29sLT53b2xvcHRzOworCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmbmV0ZGV2LT5kZXYsIHVnZXRoLT53b2xfZW4pOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHVlY19nZXRfd29sIE5VTEwKKyNkZWZpbmUgdWVjX3NldF93b2wgTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHVlY19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzICAgICAgICAgICA9IHVlY19nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyAgICAgICAgICAgPSB1ZWNfc2V0X3NldHRpbmdzLApAQCAtMzczLDYgKzQxNSw4IEBACiAJLmdldF9zc2V0X2NvdW50CQk9IHVlY19nZXRfc3NldF9jb3VudCwKIAkuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IHVlY19nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgICAgICA9IHVlY19nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X3dvbAkJPSB1ZWNfZ2V0X3dvbCwKKwkuc2V0X3dvbAkJPSB1ZWNfc2V0X3dvbCwKIH07CiAKIHZvaWQgdWVjX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FzaXguYyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKaW5kZXggODdiNGEwMi4uNmNlN2Y3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FzaXguYworKysgYi9kcml2ZXJzL25ldC91c2IvYXNpeC5jCkBAIC03MzEsNyArNzMxLDcgQEAKIC8qIFdlIG5lZWQgdG8gb3ZlcnJpZGUgc29tZSBldGh0b29sX29wcyBzbyB3ZSByZXF1aXJlIG91cgogICAgb3duIHN0cnVjdHVyZSBzbyB3ZSBkb24ndCBpbnRlcmZlcmUgd2l0aCBvdGhlciB1c2JuZXQKICAgIGRldmljZXMgdGhhdCBtYXkgYmUgY29ubmVjdGVkIGF0IHRoZSBzYW1lIHRpbWUuICovCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzJfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzJfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IGFzaXhfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGFzaXhfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbAkJPSB1c2JuZXRfZ2V0X21zZ2xldmVsLApAQCAtODczLDcgKzg3Myw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBheDg4NzcyX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBheDg4NzcyX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBhc2l4X2dldF9kcnZpbmZvLAogCS5nZXRfbGluawkJPSBhc2l4X2dldF9saW5rLAogCS5nZXRfbXNnbGV2ZWwJCT0gdXNibmV0X2dldF9tc2dsZXZlbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCmluZGV4IGI5ZGQ0MjUuLjJiZWQ2YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwpAQCAtNDExLDcgKzQxMSw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2F0Yy0+dHhfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGNhdGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGNhdGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQ0OCw3ICs0NDksNyBAQAogCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgY2F0Y190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC02OTcsNyArNjk4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBjYXRjX2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MgPSBjYXRjX2dldF9zZXR0aW5ncywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2RjLXBob25ldC5jIGIvZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYwppbmRleCA3OTJhZjcyLi45N2U1NGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2RjLXBob25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9waG9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9waG9uZXQuaD4KIAogI2RlZmluZSBQTl9NRURJQV9VU0IJMHgxQgogCkBAIC01NSw3ICs1Niw3IEBACiAvKgogICogTmV0d29yayBkZXZpY2UgY2FsbGJhY2tzCiAgKi8KLXN0YXRpYyBpbnQgdXNicG5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHVzYnBuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdXNicG5fZGV2ICpwbmQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCB1cmIgKnJlcSA9IE5VTEw7CkBAIC04MiwxMiArODMsMTIgQEAKIAlpZiAocG5kLT50eF9xdWV1ZSA+PSBkZXYtPnR4X3F1ZXVlX2xlbikKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBuZC0+dHhfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGRyb3A6CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnJlcSkKQEAgLTI1Niw2ICsyNTcsMTkgQEAKIAlyZXR1cm4gdXNiX3NldF9pbnRlcmZhY2UocG5kLT51c2IsIG51bSwgIXBuZC0+YWN0aXZlX3NldHRpbmcpOwogfQogCitzdGF0aWMgaW50IHVzYnBuX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQoreworCXN0cnVjdCBpZl9waG9uZXRfcmVxICpyZXEgPSAoc3RydWN0IGlmX3Bob25ldF9yZXEgKilpZnI7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ1BOR0FVVE9DT05GOgorCQlyZXEtPmlmcl9waG9uZXRfYXV0b2NvbmYuZGV2aWNlID0gUE5fREVWX1BDOworCQlwcmludGsoS0VSTl9DUklUImRldmljZSBpcyBQTl9ERVZfUENcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKwogc3RhdGljIGludCB1c2Jwbl9zZXRfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewogCWlmICgobmV3X210dSA8IFBIT05FVF9NSU5fTVRVKSB8fCAobmV3X210dSA+IFBIT05FVF9NQVhfTVRVKSkKQEAgLTI2OSw2ICsyODMsNyBAQAogCS5uZG9fb3Blbgk9IHVzYnBuX29wZW4sCiAJLm5kb19zdG9wCT0gdXNicG5fY2xvc2UsCiAJLm5kb19zdGFydF94bWl0ID0gdXNicG5feG1pdCwKKwkubmRvX2RvX2lvY3RsCT0gdXNicG5faW9jdGwsCiAJLm5kb19jaGFuZ2VfbXR1ID0gdXNicG5fc2V0X210dSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYyBiL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYwppbmRleCAxZDM3MzBkLi43MjQ3MGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCkBAIC0zNTYsNyArMzU2LDcgQEAKIAlyZXR1cm4gZ2VuZXJpY19taWlfaW9jdGwoJmRldi0+bWlpLCBpZl9taWkocnEpLCBjbWQsIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGRtOTYwMV9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZG05NjAxX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwk9IGRtOTYwMV9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsJPSBkbTk2MDFfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbAk9IHVzYm5ldF9nZXRfbXNnbGV2ZWwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggZjhjNmQ3ZS4uZmE0ZTU4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtNzcxLDcgKzc3MSw4IEBACiB9CiAKIC8qIGNhbGxlZCBieSBrZXJuZWwgd2hlbiB3ZSBuZWVkIHRvIHRyYW5zbWl0IGEgcGFja2V0ICovCi1zdGF0aWMgaW50IGhzb19uZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQorc3RhdGljIG5ldGRldl90eF90IGhzb19uZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgaHNvX25ldCAqb2RldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJaW50IHJlc3VsdDsKQEAgLTc4MCw3ICs3ODEsNyBAQAogCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKIAlpZiAoaHNvX2dldF9hY3Rpdml0eShvZGV2LT5wYXJlbnQpID09IC1FQUdBSU4pIHsKIAkJb2Rldi0+c2tiX3R4X2J1ZiA9IHNrYjsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJLyogbG9nIGlmIGFza2VkICovCkBAIC04MjgsNyArODI5LDcgQEAKIAl1c2JfbWFrZV9wYXRoKG9kZXYtPnBhcmVudC0+dXNiLCBpbmZvLT5idXNfaW5mbywgc2l6ZW9mIGluZm8tPmJ1c19pbmZvKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBoc29fZ2V0X2RydmluZm8sCiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluawogfTsKQEAgLTI1MzQsNiArMjUzNSwxMCBAQAogCX0KIH0KIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBoc29fdHlwZSA9IHsKKwkubmFtZQk9ICJ3d2FuIiwKK307CisKIC8qIENyZWF0ZXMgb3VyIG5ldHdvcmsgZGV2aWNlICovCiBzdGF0aWMgc3RydWN0IGhzb19kZXZpY2UgKmhzb19jcmVhdGVfbmV0X2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAogCQkJCQkJaW50IHBvcnRfc3BlYykKQEAgLTI1NzQsNiArMjU3OSw3IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAJU0VUX05FVERFVl9ERVYobmV0LCAmaW50ZXJmYWNlLT5kZXYpOworCVNFVF9ORVRERVZfREVWVFlQRShuZXQsICZoc29fdHlwZSk7CiAKIAkvKiByZWdpc3RlcmluZyBvdXIgbmV0IGRldmljZSAqLwogCXJlc3VsdCA9IHJlZ2lzdGVyX25ldGRldihuZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCmluZGV4IDFmOWVjMjkuLmUyYTM5YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYworKysgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKQEAgLTc3OCw3ICs3NzgsNyBAQAogCXJldHVybiBrYXdldGgtPmxpbmtzdGF0ZTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKIAkuZ2V0X2RydmluZm8JPSBrYXdldGhfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCT0ga2F3ZXRoX2dldF9saW5rCiB9OwpAQCAtODAzLDcgKzgwMyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgIGthd2V0aF9zdGFydF94bWl0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQga2F3ZXRoX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3N0YXRpYyBuZXRkZXZfdHhfdCBrYXdldGhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSBuZXRkZXZfcHJpdihuZXQpOwogCV9fbGUxNiAqcHJpdmF0ZV9oZWFkZXI7CkBAIC04MjksNyArODMwLDcgQEAKIAkJCWthd2V0aC0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQluZXRpZl9zdGFydF9xdWV1ZShuZXQpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZrYXdldGgtPmRldmljZV9sb2NrKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCX0KIApAQCAtODY0LDcgKzg2NSw3IEBACiAKIAlzcGluX3VubG9ja19pcnEoJmthd2V0aC0+ZGV2aWNlX2xvY2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMgYi9kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jCmluZGV4IDdhZTlhZmUuLjEwODczZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJbWNzNzgzMF9nZXRfcmVnKGRldiwgMCwgcmVncy0+bGVuLCBkYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBtY3M3ODMwX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtY3M3ODMwX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBtY3M3ODMwX2dldF9kcnZpbmZvLAogCS5nZXRfcmVnc19sZW4JCT0gbWNzNzgzMF9nZXRfcmVnc19sZW4sCiAJLmdldF9yZWdzCQk9IG1jczc4MzBfZ2V0X3JlZ3MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYwppbmRleCA2MzFkMjY5YS4uNmZkYWJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYworKysgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCkBAIC04NzYsNyArODc2LDggQEAKIAlwZWdhc3VzLT5zdGF0cy50eF9lcnJvcnMrKzsKIH0KIAotc3RhdGljIGludCBwZWdhc3VzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3N0YXRpYyBuZXRkZXZfdHhfdCBwZWdhc3VzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQgY291bnQgPSAoKHNrYi0+bGVuICsgMikgJiAweDNmKSA/IHNrYi0+bGVuICsgMiA6IHNrYi0+bGVuICsgMzsKQEAgLTkxNCw3ICs5MTUsNyBAQAogCX0KIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBlZ2FzdXNfbmV0ZGV2X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xMTczLDcgKzExNzQsNyBAQAogCXBlZ2FzdXMtPm1zZ19lbmFibGUgPSB2OwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IHBlZ2FzdXNfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncyA9IHBlZ2FzdXNfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBwZWdhc3VzX3NldF9zZXR0aW5ncywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCmluZGV4IDIyMzIyMzIuLmQwMzJiYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwpAQCAtNjUsNiArNjUsMzIgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJuZGlzX3N0YXR1cyk7CiAKIC8qCisgKiBSTkRJUyBpbmRpY2F0ZSBtZXNzYWdlcy4KKyAqLworc3RhdGljIHZvaWQgcm5kaXNfbXNnX2luZGljYXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHJuZGlzX2luZGljYXRlICptc2csCisJCQkJaW50IGJ1ZmxlbikKK3sKKwlzdHJ1Y3QgY2RjX3N0YXRlICppbmZvID0gKHZvaWQgKikmZGV2LT5kYXRhOworCXN0cnVjdCBkZXZpY2UgKnVkZXYgPSAmaW5mby0+Y29udHJvbC0+ZGV2OworCisJaWYgKGRldi0+ZHJpdmVyX2luZm8tPmluZGljYXRpb24pIHsKKwkJZGV2LT5kcml2ZXJfaW5mby0+aW5kaWNhdGlvbihkZXYsIG1zZywgYnVmbGVuKTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKG1zZy0+c3RhdHVzKSB7CisJCWNhc2UgUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1Q6CisJCQlkZXZfaW5mbyh1ZGV2LCAicm5kaXMgbWVkaWEgY29ubmVjdFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBSTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVDoKKwkJCWRldl9pbmZvKHVkZXYsICJybmRpcyBtZWRpYSBkaXNjb25uZWN0XG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2luZm8odWRldiwgInJuZGlzIGluZGljYXRpb246IDB4JTA4eFxuIiwKKwkJCQkJbGUzMl90b19jcHUobXNnLT5zdGF0dXMpKTsKKwkJfQorCX0KK30KKworLyoKICAqIFJQQyBkb25lIFJORElTLXN0eWxlLiAgQ2FsbGVyIGd1YXJhbnRlZXM6CiAgKiAtIG1lc3NhZ2UgaXMgcHJvcGVybHkgYnl0ZXN3YXBwZWQKICAqIC0gdGhlcmUncyBubyBvdGhlciByZXF1ZXN0IHBlbmRpbmcKQEAgLTE0MywyNyArMTY5LDkgQEAKIAkJCQkJcmVxdWVzdF9pZCwgeGlkKTsKIAkJCQkvKiB0aGVuIGxpa2VseSByZXRyeSAqLwogCQkJfSBlbHNlIHN3aXRjaCAoYnVmLT5tc2dfdHlwZSkgewotCQkJY2FzZSBSTkRJU19NU0dfSU5ESUNBVEU6IHsJLyogZmF1bHQvZXZlbnQgKi8KLQkJCQlzdHJ1Y3Qgcm5kaXNfaW5kaWNhdGUgKm1zZyA9ICh2b2lkICopYnVmOwotCQkJCWludCBzdGF0ZSA9IDA7CisJCQljYXNlIFJORElTX01TR19JTkRJQ0FURToJLyogZmF1bHQvZXZlbnQgKi8KKwkJCQlybmRpc19tc2dfaW5kaWNhdGUoZGV2LCAodm9pZCAqKWJ1ZiwgYnVmbGVuKTsKIAotCQkJCXN3aXRjaCAobXNnLT5zdGF0dXMpIHsKLQkJCQljYXNlIFJORElTX1NUQVRVU19NRURJQV9DT05ORUNUOgotCQkJCQlzdGF0ZSA9IDE7Ci0JCQkJY2FzZSBSTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVDoKLQkJCQkJZGV2X2luZm8oJmluZm8tPmNvbnRyb2wtPmRldiwKLQkJCQkJCSJybmRpcyBtZWRpYSAlc2Nvbm5lY3RcbiIsCi0JCQkJCQkhc3RhdGU/ImRpcyI6IiIpOwotCQkJCQlpZiAoZGV2LT5kcml2ZXJfaW5mby0+bGlua19jaGFuZ2UpCi0JCQkJCQlkZXYtPmRyaXZlcl9pbmZvLT5saW5rX2NoYW5nZSgKLQkJCQkJCQlkZXYsIHN0YXRlKTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJZGV2X2luZm8oJmluZm8tPmNvbnRyb2wtPmRldiwKLQkJCQkJCSJybmRpcyBpbmRpY2F0aW9uOiAweCUwOHhcbiIsCi0JCQkJCQlsZTMyX3RvX2NwdShtc2ctPnN0YXR1cykpOwotCQkJCX0KLQkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIFJORElTX01TR19LRUVQQUxJVkU6IHsJLyogcGluZyAqLwogCQkJCXN0cnVjdCBybmRpc19rZWVwYWxpdmVfYyAqbXNnID0gKHZvaWQgKilidWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwppbmRleCBmY2M2ZmEwLi5iMDkxZTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKQEAgLTcyNyw3ICs3MjcsOCBAQAogCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKIH0KIAotc3RhdGljIGludCBydGw4MTUwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBydGw4MTUwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBjb3VudCwgcmVzOwpAQCAtNzUzLDcgKzc1NCw3IEBACiAJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApAQCAtODY0LDcgKzg2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gcnRsODE1MF9nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzID0gcnRsODE1MF9nZXRfc2V0dGluZ3MsCiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwppbmRleCBmZTA0NTg5Li45MzhmYjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYworKysgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwpAQCAtMjIwLDExICsyMjAsNiBAQAogCWRvIHsKIAkJc21zYzk1eHhfcmVhZF9yZWcoZGV2LCBFMlBfQ01ELCAmdmFsKTsKIAotCQlpZiAoISh2YWwgJiBFMlBfQ01EX0xPQURFRF8pKSB7Ci0JCQlkZXZ3YXJuKGRldiwgIk5vIEVFUFJPTSBwcmVzZW50Iik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCiAJCWlmICghKHZhbCAmIEUyUF9DTURfQlVTWV8pKQogCQkJcmV0dXJuIDA7CiAKQEAgLTYzMCw3ICs2MjUsNyBAQAogCXJldHVybiBzbXNjOTV4eF9zZXRfY3N1bXMoZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBzbXNjOTV4eF9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc21zYzk1eHhfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9saW5rCT0gdXNibmV0X2dldF9saW5rLAogCS5ud2F5X3Jlc2V0CT0gdXNibmV0X253YXlfcmVzZXQsCiAJLmdldF9kcnZpbmZvCT0gdXNibmV0X2dldF9kcnZpbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IGVkZmQ5ZTEuLjI0YjM2ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYworKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTIzMyw2ICsyMzMsMTEgQEAKIHsKIAlpbnQJc3RhdHVzOwogCisJaWYgKHRlc3RfYml0KEVWRU5UX1JYX1BBVVNFRCwgJmRldi0+ZmxhZ3MpKSB7CisJCXNrYl9xdWV1ZV90YWlsKCZkZXYtPnJ4cV9wYXVzZSwgc2tiKTsKKwkJcmV0dXJuOworCX0KKwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyAoc2tiLCBkZXYtPm5ldCk7CiAJZGV2LT5uZXQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlkZXYtPm5ldC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CkBAIC01MjYsNiArNTMxLDQxIEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHVzYm5ldF9wYXVzZV9yeChzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJc2V0X2JpdChFVkVOVF9SWF9QQVVTRUQsICZkZXYtPmZsYWdzKTsKKworCWlmIChuZXRpZl9tc2dfcnhfc3RhdHVzKGRldikpCisJCWRldmRiZyhkZXYsICJwYXVzZWQgcnggcXVldWUgZW5hYmxlZCIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3BhdXNlX3J4KTsKKwordm9pZCB1c2JuZXRfcmVzdW1lX3J4KHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBudW0gPSAwOworCisJY2xlYXJfYml0KEVWRU5UX1JYX1BBVVNFRCwgJmRldi0+ZmxhZ3MpOworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZGV2LT5yeHFfcGF1c2UpKSAhPSBOVUxMKSB7CisJCXVzYm5ldF9za2JfcmV0dXJuKGRldiwgc2tiKTsKKwkJbnVtKys7CisJfQorCisJdGFza2xldF9zY2hlZHVsZSgmZGV2LT5iaCk7CisKKwlpZiAobmV0aWZfbXNnX3J4X3N0YXR1cyhkZXYpKQorCQlkZXZkYmcoZGV2LCAicGF1c2VkIHJ4IHF1ZXVlIGRpc2FibGVkLCAlZCBza2JzIHJlcXVldWVkIiwgbnVtKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9yZXN1bWVfcngpOworCit2b2lkIHVzYm5ldF9wdXJnZV9wYXVzZWRfcnhxKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlza2JfcXVldWVfcHVyZ2UoJmRldi0+cnhxX3BhdXNlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9wdXJnZV9wYXVzZWRfcnhxKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLy8gdW5saW5rIHBlbmRpbmcgcngvdHg7IGNvbXBsZXRpb24gaGFuZGxlcnMgZG8gYWxsIG90aGVyIGNsZWFudXAKIApAQCAtNTc1LDcgKzYxNSw5IEBACiBpbnQgdXNibmV0X3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IHVzYm5ldAkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJc3RydWN0IGRyaXZlcl9pbmZvCSppbmZvID0gZGV2LT5kcml2ZXJfaW5mbzsKIAlpbnQJCQl0ZW1wOworCWludAkJCXJldHZhbDsKIAlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRF9PTlNUQUNLICh1bmxpbmtfd2FrZXVwKTsKIAlERUNMQVJFX1dBSVRRVUVVRSAod2FpdCwgY3VycmVudCk7CiAKQEAgLTU4NywyNCArNjI5LDQyIEBACiAJCQluZXQtPnN0YXRzLnJ4X2Vycm9ycywgbmV0LT5zdGF0cy50eF9lcnJvcnMKIAkJCSk7CiAKLQkvLyBlbnN1cmUgdGhlcmUgYXJlIG5vIG1vcmUgYWN0aXZlIHVyYnMKLQlhZGRfd2FpdF9xdWV1ZSAoJnVubGlua193YWtldXAsICZ3YWl0KTsKLQlkZXYtPndhaXQgPSAmdW5saW5rX3dha2V1cDsKLQl0ZW1wID0gdW5saW5rX3VyYnMgKGRldiwgJmRldi0+dHhxKSArIHVubGlua191cmJzIChkZXYsICZkZXYtPnJ4cSk7Ci0KLQkvLyBtYXliZSB3YWl0IGZvciBkZWxldGlvbnMgdG8gZmluaXNoLgotCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZkZXYtPnJ4cSkKLQkJCSYmICFza2JfcXVldWVfZW1wdHkoJmRldi0+dHhxKQotCQkJJiYgIXNrYl9xdWV1ZV9lbXB0eSgmZGV2LT5kb25lKSkgewotCQltc2xlZXAoVU5MSU5LX1RJTUVPVVRfTVMpOwotCQlpZiAobmV0aWZfbXNnX2lmZG93biAoZGV2KSkKLQkJCWRldmRiZyAoZGV2LCAid2FpdGVkIGZvciAlZCB1cmIgY29tcGxldGlvbnMiLCB0ZW1wKTsKKwkvKiBhbGxvdyBtaW5pZHJpdmVyIHRvIHN0b3AgY29ycmVjdGx5ICh3aXJlbGVzcyBkZXZpY2VzIHRvIHR1cm4gb2ZmCisJICogcmFkaW8gZXRjKSAqLworCWlmIChpbmZvLT5zdG9wKSB7CisJCXJldHZhbCA9IGluZm8tPnN0b3AoZGV2KTsKKwkJaWYgKHJldHZhbCA8IDAgJiYgbmV0aWZfbXNnX2lmZG93bihkZXYpKQorCQkJZGV2aW5mbyhkZXYsCisJCQkJInN0b3AgZmFpbCAoJWQpIHVzYm5ldCB1c2ItJXMtJXMsICVzIiwKKwkJCQlyZXR2YWwsCisJCQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCisJCQkJaW5mby0+ZGVzY3JpcHRpb24pOwogCX0KLQlkZXYtPndhaXQgPSBOVUxMOwotCXJlbW92ZV93YWl0X3F1ZXVlICgmdW5saW5rX3dha2V1cCwgJndhaXQpOworCisJaWYgKCEoaW5mby0+ZmxhZ3MgJiBGTEFHX0FWT0lEX1VOTElOS19VUkJTKSkgeworCQkvKiBlbnN1cmUgdGhlcmUgYXJlIG5vIG1vcmUgYWN0aXZlIHVyYnMgKi8KKwkJYWRkX3dhaXRfcXVldWUoJnVubGlua193YWtldXAsICZ3YWl0KTsKKwkJZGV2LT53YWl0ID0gJnVubGlua193YWtldXA7CisJCXRlbXAgPSB1bmxpbmtfdXJicyhkZXYsICZkZXYtPnR4cSkgKworCQkJdW5saW5rX3VyYnMoZGV2LCAmZGV2LT5yeHEpOworCisJCS8qIG1heWJlIHdhaXQgZm9yIGRlbGV0aW9ucyB0byBmaW5pc2guICovCisJCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZkZXYtPnJ4cSkKKwkJCQkmJiAhc2tiX3F1ZXVlX2VtcHR5KCZkZXYtPnR4cSkKKwkJCQkmJiAhc2tiX3F1ZXVlX2VtcHR5KCZkZXYtPmRvbmUpKSB7CisJCQltc2xlZXAoVU5MSU5LX1RJTUVPVVRfTVMpOworCQkJaWYgKG5ldGlmX21zZ19pZmRvd24oZGV2KSkKKwkJCQlkZXZkYmcoZGV2LCAid2FpdGVkIGZvciAlZCB1cmIgY29tcGxldGlvbnMiLAorCQkJCQl0ZW1wKTsKKwkJfQorCQlkZXYtPndhaXQgPSBOVUxMOworCQlyZW1vdmVfd2FpdF9xdWV1ZSgmdW5saW5rX3dha2V1cCwgJndhaXQpOworCX0KIAogCXVzYl9raWxsX3VyYihkZXYtPmludGVycnVwdCk7CiAKKwl1c2JuZXRfcHVyZ2VfcGF1c2VkX3J4cShkZXYpOworCiAJLyogZGVmZXJyZWQgd29yayAodGFzaywgdGltZXIsIHNvZnRpcnEpIG11c3QgYWxzbyBzdG9wLgogCSAqIGNhbid0IGZsdXNoX3NjaGVkdWxlZF93b3JrKCkgdW50aWwgd2UgZHJvcCBydG5sIChsYXRlciksCiAJICogZWxzZSB3b3JrZXJzIGNvdWxkIGRlYWRsb2NrOyBzbyBtYWtlIHdvcmtlcnMgYSBOT1AuCkBAIC03OTQsNyArODU0LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9zZXRfbXNnbGV2ZWwpOwogCiAvKiBkcml2ZXJzIG1heSBvdmVycmlkZSBkZWZhdWx0IGV0aHRvb2xfb3BzIGluIHRoZWlyIGJpbmQoKSByb3V0aW5lICovCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHVzYm5ldF9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdXNibmV0X2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gdXNibmV0X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IHVzYm5ldF9zZXRfc2V0dGluZ3MsCiAJLmdldF9saW5rCQk9IHVzYm5ldF9nZXRfbGluaywKQEAgLTk0NywxNSArMTAwNywxNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1pbnQgdXNibmV0X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCituZXRkZXZfdHhfdCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IHVzYm5ldAkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJaW50CQkJbGVuZ3RoOwotCWludAkJCXJldHZhbCA9IE5FVF9YTUlUX1NVQ0NFU1M7CiAJc3RydWN0IHVyYgkJKnVyYiA9IE5VTEw7CiAJc3RydWN0IHNrYl9kYXRhCQkqZW50cnk7CiAJc3RydWN0IGRyaXZlcl9pbmZvCSppbmZvID0gZGV2LT5kcml2ZXJfaW5mbzsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlpbnQgcmV0dmFsOwogCiAJLy8gc29tZSBkZXZpY2VzIHdhbnQgZnVua3kgVVNCLWxldmVsIGZyYW1pbmcsIGZvcgogCS8vIHdpbjMyIGRyaXZlciAodXN1YWxseSkgYW5kL29yIGhhcmR3YXJlIHF1aXJrcwpAQCAtMTAxOSw3ICsxMDgwLDYgQEAKIAkJaWYgKG5ldGlmX21zZ190eF9lcnIgKGRldikpCiAJCQlkZXZkYmcgKGRldiwgImRyb3AsIGNvZGUgJWQiLCByZXR2YWwpOwogZHJvcDoKLQkJcmV0dmFsID0gTkVUX1hNSVRfU1VDQ0VTUzsKIAkJZGV2LT5uZXQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJaWYgKHNrYikKIAkJCWRldl9rZnJlZV9za2JfYW55IChza2IpOwpAQCAtMTAyOCw3ICsxMDg4LDcgQEAKIAkJZGV2ZGJnIChkZXYsICI+IHR4LCBsZW4gJWQsIHR5cGUgMHgleCIsCiAJCQlsZW5ndGgsIHNrYi0+cHJvdG9jb2wpOwogCX0KLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc3RhcnRfeG1pdCk7CiAKQEAgLTEwOTUsNyArMTE1NSw2IEBACiB9CiAKIAotDAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogVVNCIERldmljZSBEcml2ZXIgc3VwcG9ydApAQCAtMTE5Miw2ICsxMjUxLDcgQEAKIAlza2JfcXVldWVfaGVhZF9pbml0ICgmZGV2LT5yeHEpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZkZXYtPnR4cSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCAoJmRldi0+ZG9uZSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZGV2LT5yeHFfcGF1c2UpOwogCWRldi0+YmguZnVuYyA9IHVzYm5ldF9iaDsKIAlkZXYtPmJoLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OwogCUlOSVRfV09SSyAoJmRldi0+a2V2ZW50LCBrZXZlbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IDEwOTdjNzIuLmFkZTViMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYworKysgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHZldGhfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHZldGhfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncwkJPSB2ZXRoX2dldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JCT0gdmV0aF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKQEAgLTE0OCw3ICsxNDgsNyBAQAogICogeG1pdAogICovCiAKLXN0YXRpYyBpbnQgdmV0aF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgdmV0aF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnJjdiA9IE5VTEw7CiAJc3RydWN0IHZldGhfcHJpdiAqcHJpdiwgKnJjdl9wcml2OwpAQCAtMTcxLDYgKzE3MSw3IEBACiAJaWYgKHNrYi0+bGVuID4gKHJjdi0+bXR1ICsgTVRVX1BBRCkpCiAJCWdvdG8gcnhfZHJvcDsKIAorICAgICAgICBza2ItPnRzdGFtcC50djY0ID0gMDsKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcmN2KTsKIAlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTk9fQ1NVTSkKQEAgLTE4OSwxNyArMTkwLDE3IEBACiAJcmN2X3N0YXRzLT5yeF9wYWNrZXRzKys7CiAKIAluZXRpZl9yeChza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIHR4X2Ryb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiByeF9kcm9wOgogCWtmcmVlX3NrYihza2IpOwogCXJjdl9zdGF0cy0+cnhfZHJvcHBlZCsrOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtcmhpbmUuYyBiL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCmluZGV4IDkzNGY3NjcuLjFmZDcwNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCkBAIC00MDgsNyArNDA4LDggQEAKIHN0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCBpbnQgdmFsdWUpOwogc3RhdGljIGludCAgcmhpbmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJoaW5lX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50ICByaGluZV9zdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCByaGluZV9zdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgcmhpbmVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CiBzdGF0aWMgdm9pZCByaGluZV90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgcmhpbmVfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGxpbWl0KTsKQEAgLTEyMTMsNyArMTIxNCw4IEBACiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCi1zdGF0aWMgaW50IHJoaW5lX3N0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgcmhpbmVfc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJoaW5lX3ByaXZhdGUgKnJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHJwLT5iYXNlOwpAQCAtMTIyNyw3ICsxMjI5LDcgQEAKIAllbnRyeSA9IHJwLT5jdXJfdHggJSBUWF9SSU5HX1NJWkU7CiAKIAlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogCXJwLT50eF9za2J1ZmZbZW50cnldID0gc2tiOwogCkBAIC0xMjM5LDcgKzEyNDEsNyBAQAogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJcnAtPnR4X3NrYnVmZltlbnRyeV0gPSBOVUxMOwogCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAogCQkvKiBQYWRkaW5nIGlzIG5vdCBjb3BpZWQgYW5kIHNvIG11c3QgYmUgcmVkb25lLiAqLwpAQCAtMTI4Nyw3ICsxMjg5LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBmcmFtZSAjJWQgcXVldWVkIGluIHNsb3QgJWQuXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBycC0+Y3VyX3R4LTEsIGVudHJ5KTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgYWxsIG9mIHRoZSBSeCB0aHJlYWQgd29yayBhbmQgY2xlYW5zIHVwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCmluZGV4IGNlZTA4YTEuLmUwNGU1YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCkBAIC02MSw5ICs2MSw5IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaWYuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgpAQCAtODEsNyArODEsNyBAQAogI2luY2x1ZGUgInZpYS12ZWxvY2l0eS5oIgogCiAKLXN0YXRpYyBpbnQgdmVsb2NpdHlfbmljcyA9IDA7CitzdGF0aWMgaW50IHZlbG9jaXR5X25pY3M7CiBzdGF0aWMgaW50IG1zZ2xldmVsID0gTVNHX0xFVkVMX0lORk87CiAKIC8qKgpAQCAtOTIsOCArOTIsNyBAQAogICoJRmV0Y2ggdGhlIG1hc2sgYml0cyBvZiB0aGUgc2VsZWN0ZWQgQ0FNIGFuZCBzdG9yZSB0aGVtIGludG8gdGhlCiAgKglwcm92aWRlZCBtYXNrIGJ1ZmZlci4KICAqLwotCi1zdGF0aWMgdm9pZCBtYWNfZ2V0X2NhbV9tYXNrKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncywgdTggKiBtYXNrKQorc3RhdGljIHZvaWQgbWFjX2dldF9jYW1fbWFzayhzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncywgdTggKm1hc2spCiB7CiAJaW50IGk7CiAKQEAgLTExMSw3ICsxMTAsNiBAQAogCiAJLyogU2VsZWN0IG1hciAqLwogCUJZVEVfUkVHX0JJVFNfU0VUKENBTUNSX1BTX01BUiwgQ0FNQ1JfUFMxIHwgQ0FNQ1JfUFMwLCAmcmVncy0+Q0FNQ1IpOwotCiB9CiAKIApAQCAtMTIyLDggKzEyMCw3IEBACiAgKgogICoJU3RvcmUgYSBuZXcgbWFzayBpbnRvIGEgQ0FNCiAgKi8KLQotc3RhdGljIHZvaWQgbWFjX3NldF9jYW1fbWFzayhzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MsIHU4ICogbWFzaykKK3N0YXRpYyB2b2lkIG1hY19zZXRfY2FtX21hc2soc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MsIHU4ICptYXNrKQogewogCWludCBpOwogCS8qIFNlbGVjdCBDQU0gbWFzayAqLwpAQCAtMTMxLDkgKzEyOCw5IEBACiAKIAl3cml0ZWIoQ0FNQUREUl9DQU1FTiwgJnJlZ3MtPkNBTUFERFIpOwogCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCXdyaXRlYigqbWFzaysrLCAmKHJlZ3MtPk1BUkNBTVtpXSkpOwotCX0KKwogCS8qIGRpc2FibGUgQ0FNRU4gKi8KIAl3cml0ZWIoMCwgJnJlZ3MtPkNBTUFERFIpOwogCkBAIC0xNDEsNyArMTM4LDcgQEAKIAlCWVRFX1JFR19CSVRTX1NFVChDQU1DUl9QU19NQVIsIENBTUNSX1BTMSB8IENBTUNSX1BTMCwgJnJlZ3MtPkNBTUNSKTsKIH0KIAotc3RhdGljIHZvaWQgbWFjX3NldF92bGFuX2NhbV9tYXNrKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncywgdTggKiBtYXNrKQorc3RhdGljIHZvaWQgbWFjX3NldF92bGFuX2NhbV9tYXNrKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzLCB1OCAqbWFzaykKIHsKIAlpbnQgaTsKIAkvKiBTZWxlY3QgQ0FNIG1hc2sgKi8KQEAgLTE0OSw5ICsxNDYsOSBAQAogCiAJd3JpdGViKENBTUFERFJfQ0FNRU4gfCBDQU1BRERSX1ZDQU1TTCwgJnJlZ3MtPkNBTUFERFIpOwogCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCXdyaXRlYigqbWFzaysrLCAmKHJlZ3MtPk1BUkNBTVtpXSkpOwotCX0KKwogCS8qIGRpc2FibGUgQ0FNRU4gKi8KIAl3cml0ZWIoMCwgJnJlZ3MtPkNBTUFERFIpOwogCkBAIC0xNjcsOCArMTY0LDcgQEAKICAqCiAgKglMb2FkIGFuIGFkZHJlc3Mgb3IgdmxhbiB0YWcgaW50byBhIENBTQogICovCi0KLXN0YXRpYyB2b2lkIG1hY19zZXRfY2FtKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncywgaW50IGlkeCwgY29uc3QgdTggKmFkZHIpCitzdGF0aWMgdm9pZCBtYWNfc2V0X2NhbShzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncywgaW50IGlkeCwgY29uc3QgdTggKmFkZHIpCiB7CiAJaW50IGk7CiAKQEAgLTE3OSw5ICsxNzUsOSBAQAogCiAJd3JpdGViKENBTUFERFJfQ0FNRU4gfCBpZHgsICZyZWdzLT5DQU1BRERSKTsKIAotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQl3cml0ZWIoKmFkZHIrKywgJihyZWdzLT5NQVJDQU1baV0pKTsKLQl9CisKIAlCWVRFX1JFR19CSVRTX09OKENBTUNSX0NBTVdSLCAmcmVncy0+Q0FNQ1IpOwogCiAJdWRlbGF5KDEwKTsKQEAgLTE5Miw3ICsxODgsNyBAQAogCUJZVEVfUkVHX0JJVFNfU0VUKENBTUNSX1BTX01BUiwgQ0FNQ1JfUFMxIHwgQ0FNQ1JfUFMwLCAmcmVncy0+Q0FNQ1IpOwogfQogCi1zdGF0aWMgdm9pZCBtYWNfc2V0X3ZsYW5fY2FtKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncywgaW50IGlkeCwKK3N0YXRpYyB2b2lkIG1hY19zZXRfdmxhbl9jYW0oc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MsIGludCBpZHgsCiAJCQkgICAgIGNvbnN0IHU4ICphZGRyKQogewogCkBAIC0yMjMsOCArMjE5LDcgQEAKICAqCXJlc2V0IHRoZSBXYWtlIG9uIGxhbiBmZWF0dXJlcy4gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHJlc3RvcmUKICAqCXRoZSByZXN0IG9mIHRoZSBsb2dpYyBmcm9tIHRoZSByZXN1bHQgb2Ygc2xlZXAvd2FrZXVwCiAgKi8KLQotc3RhdGljIHZvaWQgbWFjX3dvbF9yZXNldChzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MpCitzdGF0aWMgdm9pZCBtYWNfd29sX3Jlc2V0KHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzKQogewogCiAJLyogVHVybiBvZmYgU1dQVEFHIHJpZ2h0IGFmdGVyIGxlYXZpbmcgcG93ZXIgbW9kZSAqLwpAQCAtMjQyLDcgKzIzNyw2IEBACiAJd3JpdGV3KDB4RkZGRiwgJnJlZ3MtPldPTFNSQ2xyKTsKIH0KIAotc3RhdGljIGludCB2ZWxvY2l0eV9taWlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2ZWxvY2l0eV9ldGh0b29sX29wczsKIAogLyoKQEAgLTI1MywxMCArMjQ3LDEwIEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlZJQSBOZXR3b3JraW5nIFZlbG9jaXR5IEZhbWlseSBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIgRHJpdmVyIik7CiAKLSNkZWZpbmUgVkVMT0NJVFlfUEFSQU0oTixEKSBcCi0gICAgICAgIHN0YXRpYyBpbnQgTltNQVhfVU5JVFNdPU9QVElPTl9ERUZBVUxUO1wKKyNkZWZpbmUgVkVMT0NJVFlfUEFSQU0oTiwgRCkgXAorCXN0YXRpYyBpbnQgTltNQVhfVU5JVFNdID0gT1BUSU9OX0RFRkFVTFQ7XAogCW1vZHVsZV9wYXJhbV9hcnJheShOLCBpbnQsIE5VTEwsIDApOyBcCi0gICAgICAgIE1PRFVMRV9QQVJNX0RFU0MoTiwgRCk7CisJTU9EVUxFX1BBUk1fREVTQyhOLCBEKTsKIAogI2RlZmluZSBSWF9ERVNDX01JTiAgICAgNjQKICNkZWZpbmUgUlhfREVTQ19NQVggICAgIDI1NQpAQCAtMzM2LDggKzMzMCw4IEBACiAgICA0OiBpbmRpY2F0ZSAxME1icHMgZnVsbCBkdXBsZXggbW9kZQogCiAgICBOb3RlOgotICAgICAgICBpZiBFRVBST00gaGF2ZSBiZWVuIHNldCB0byB0aGUgZm9yY2UgbW9kZSwgdGhpcyBvcHRpb24gaXMgaWdub3JlZAotICAgICAgICAgICAgYnkgZHJpdmVyLgorICAgaWYgRUVQUk9NIGhhdmUgYmVlbiBzZXQgdG8gdGhlIGZvcmNlIG1vZGUsIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQKKyAgIGJ5IGRyaXZlci4KICovCiBWRUxPQ0lUWV9QQVJBTShzcGVlZF9kdXBsZXgsICJTZXR0aW5nIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG1vZGUiKTsKIApAQCAtMzcwLDc2ICszNjQsMTQgQEAKIG1vZHVsZV9wYXJhbShyeF9jb3B5YnJlYWssIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJ4X2NvcHlicmVhaywgIkNvcHkgYnJlYWtwb2ludCBmb3IgY29weS1vbmx5LXRpbnktZnJhbWVzIik7CiAKLXN0YXRpYyB2b2lkIHZlbG9jaXR5X2luaXRfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IHZlbG9jaXR5X2luZm9fdGJsICppbmZvKTsKLXN0YXRpYyBpbnQgdmVsb2NpdHlfZ2V0X3BjaV9pbmZvKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICosIHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKLXN0YXRpYyB2b2lkIHZlbG9jaXR5X3ByaW50X2luZm8oc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpOwotc3RhdGljIGludCB2ZWxvY2l0eV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCB2ZWxvY2l0eV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtdHUpOwotc3RhdGljIGludCB2ZWxvY2l0eV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGlycXJldHVybl90IHZlbG9jaXR5X2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKLXN0YXRpYyB2b2lkIHZlbG9jaXR5X3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdmVsb2NpdHlfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCB2ZWxvY2l0eV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKLXN0YXRpYyBpbnQgdmVsb2NpdHlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHZlbG9jaXR5X3JlY2VpdmVfZnJhbWUoc3RydWN0IHZlbG9jaXR5X2luZm8gKiwgaW50IGlkeCk7Ci1zdGF0aWMgaW50IHZlbG9jaXR5X2FsbG9jX3J4X2J1ZihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqLCBpbnQgaWR4KTsKLXN0YXRpYyB2b2lkIHZlbG9jaXR5X2ZyZWVfcmRfcmluZyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cik7Ci1zdGF0aWMgdm9pZCB2ZWxvY2l0eV9mcmVlX3R4X2J1ZihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgc3RydWN0IHZlbG9jaXR5X3RkX2luZm8gKik7Ci1zdGF0aWMgaW50IHZlbG9jaXR5X3NvZnRfcmVzZXQoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpOwotc3RhdGljIHZvaWQgbWlpX2luaXQoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIHUzMiBtaWlfc3RhdHVzKTsKLXN0YXRpYyB1MzIgdmVsb2NpdHlfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdTMyIHZlbG9jaXR5X2dldF9vcHRfbWVkaWFfbW9kZShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cik7Ci1zdGF0aWMgdm9pZCB2ZWxvY2l0eV9wcmludF9saW5rX3N0YXR1cyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cik7Ci1zdGF0aWMgdm9pZCBzYWZlX2Rpc2FibGVfbWlpX2F1dG9wb2xsKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyk7Ci1zdGF0aWMgdm9pZCB2ZWxvY2l0eV9zaHV0ZG93bihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cik7Ci1zdGF0aWMgdm9pZCBlbmFibGVfZmxvd19jb250cm9sX2FiaWxpdHkoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpOwotc3RhdGljIHZvaWQgZW5hYmxlX21paV9hdXRvcG9sbChzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MpOwotc3RhdGljIGludCB2ZWxvY2l0eV9taWlfcmVhZChzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqLCB1OCBieUlkeCwgdTE2ICogcGRhdGEpOwotc3RhdGljIGludCB2ZWxvY2l0eV9taWlfd3JpdGUoc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiwgdTggYnlNaWlBZGRyLCB1MTYgZGF0YSk7Ci1zdGF0aWMgdTMyIG1paV9jaGVja19tZWRpYV9tb2RlKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyk7Ci1zdGF0aWMgdTMyIGNoZWNrX2Nvbm5lY3Rpb25fdHlwZShzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MpOwotc3RhdGljIGludCB2ZWxvY2l0eV9zZXRfbWVkaWFfbW9kZShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgdTMyIG1paV9zdGF0dXMpOwotCiAjaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgdmVsb2NpdHlfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLXN0YXRpYyBpbnQgdmVsb2NpdHlfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKLQogc3RhdGljIERFRklORV9TUElOTE9DSyh2ZWxvY2l0eV9kZXZfbGlzdF9sb2NrKTsKIHN0YXRpYyBMSVNUX0hFQUQodmVsb2NpdHlfZGV2X2xpc3QpOwotCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiBkZWZpbmVkKENPTkZJR19JTkVUKQotCi1zdGF0aWMgaW50IHZlbG9jaXR5X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG5vdGlmaWNhdGlvbiwgdm9pZCAqcHRyKTsKLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB2ZWxvY2l0eV9pbmV0YWRkcl9ub3RpZmllciA9IHsKLSAgICAgIC5ub3RpZmllcl9jYWxsCT0gdmVsb2NpdHlfbmV0ZGV2X2V2ZW50LAotfTsKLQotc3RhdGljIHZvaWQgdmVsb2NpdHlfcmVnaXN0ZXJfbm90aWZpZXIodm9pZCkKLXsKLQlyZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmdmVsb2NpdHlfaW5ldGFkZHJfbm90aWZpZXIpOwotfQotCi1zdGF0aWMgdm9pZCB2ZWxvY2l0eV91bnJlZ2lzdGVyX25vdGlmaWVyKHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmdmVsb2NpdHlfaW5ldGFkZHJfbm90aWZpZXIpOwotfQotCi0jZWxzZQotCi0jZGVmaW5lIHZlbG9jaXR5X3JlZ2lzdGVyX25vdGlmaWVyKCkJZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIHZlbG9jaXR5X3VucmVnaXN0ZXJfbm90aWZpZXIoKQlkbyB7fSB3aGlsZSAoMCkKLQogI2VuZGlmCiAKIC8qCiAgKglJbnRlcm5hbCBib2FyZCB2YXJpYW50cy4gQXQgdGhlIG1vbWVudCB3ZSBoYXZlIG9ubHkgb25lCiAgKi8KLQogc3RhdGljIHN0cnVjdCB2ZWxvY2l0eV9pbmZvX3RibCBjaGlwX2luZm9fdGFibGVbXSA9IHsKIAl7Q0hJUF9UWVBFX1ZUNjExMCwgIlZJQSBOZXR3b3JraW5nIFZlbG9jaXR5IEZhbWlseSBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIiLCAxLCAweDAwRkZGRkZGVUx9LAogCXsgfQpAQCAtNDQ5LDcgKzM4MSw2IEBACiAgKglEZXNjcmliZSB0aGUgUENJIGRldmljZSBpZGVudGlmaWVycyB0aGF0IHdlIHN1cHBvcnQgaW4gdGhpcwogICoJZGV2aWNlIGRyaXZlci4gVXNlZCBmb3IgaG90cGx1ZyBhdXRvbG9hZGluZy4KICAqLwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdmVsb2NpdHlfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfNjEyWCkgfSwKIAl7IH0KQEAgLTQ2NCw3ICszOTUsNiBAQAogICoJR2l2ZW4gYSBjaGlwIGlkZW50aWZpZXIgcmV0dXJuIGEgc3VpdGFibGUgZGVzY3JpcHRpb24uIFJldHVybnMKICAqCWEgcG9pbnRlciBhIHN0YXRpYyBzdHJpbmcgdmFsaWQgd2hpbGUgdGhlIGRyaXZlciBpcyBsb2FkZWQuCiAgKi8KLQogc3RhdGljIGNvbnN0IGNoYXIgX19kZXZpbml0ICpnZXRfY2hpcF9uYW1lKGVudW0gY2hpcF90eXBlIGNoaXBfaWQpCiB7CiAJaW50IGk7CkBAIC00ODIsNyArNDEyLDYgQEAKICAqCXVubG9hZCBmb3IgZWFjaCBhY3RpdmUgZGV2aWNlIHRoYXQgaXMgcHJlc2VudC4gRGlzY29ubmVjdHMKICAqCXRoZSBkZXZpY2UgZnJvbSB0aGUgbmV0d29yayBsYXllciBhbmQgZnJlZXMgYWxsIHRoZSByZXNvdXJjZXMKICAqLwotCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgdmVsb2NpdHlfcmVtb3ZlMShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwpAQCAtNTIwLDcgKzQ0OSw2IEBACiAgKglhbGwgdGhlIHZlcmlmaWNhdGlvbiBhbmQgY2hlY2tpbmcgYXMgd2VsbCBhcyByZXBvcnRpbmcgc28gdGhhdAogICoJd2UgZG9uJ3QgZHVwbGljYXRlIGNvZGUgZm9yIGVhY2ggb3B0aW9uLgogICovCi0KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB2ZWxvY2l0eV9zZXRfaW50X29wdChpbnQgKm9wdCwgaW50IHZhbCwgaW50IG1pbiwgaW50IG1heCwgaW50IGRlZiwgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGV2bmFtZSkKIHsKIAlpZiAodmFsID09IC0xKQpAQCAtNTQ5LDggKzQ3Nyw3IEBACiAgKglhbGwgdGhlIHZlcmlmaWNhdGlvbiBhbmQgY2hlY2tpbmcgYXMgd2VsbCBhcyByZXBvcnRpbmcgc28gdGhhdAogICoJd2UgZG9uJ3QgZHVwbGljYXRlIGNvZGUgZm9yIGVhY2ggb3B0aW9uLgogICovCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCB2ZWxvY2l0eV9zZXRfYm9vbF9vcHQodTMyICogb3B0LCBpbnQgdmFsLCBpbnQgZGVmLCB1MzIgZmxhZywgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGV2bmFtZSkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB2ZWxvY2l0eV9zZXRfYm9vbF9vcHQodTMyICpvcHQsIGludCB2YWwsIGludCBkZWYsIHUzMiBmbGFnLCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXZuYW1lKQogewogCSgqb3B0KSAmPSAofmZsYWcpOwogCWlmICh2YWwgPT0gLTEpCkBAIC01NzUsNyArNTAyLDYgQEAKICAqCVR1cm4gdGhlIG1vZHVsZSBhbmQgY29tbWFuZCBvcHRpb25zIGludG8gYSBzaW5nbGUgc3RydWN0dXJlCiAgKglmb3IgdGhlIGN1cnJlbnQgZGV2aWNlCiAgKi8KLQogc3RhdGljIHZvaWQgX19kZXZpbml0IHZlbG9jaXR5X2dldF9vcHRpb25zKHN0cnVjdCB2ZWxvY2l0eV9vcHQgKm9wdHMsIGludCBpbmRleCwgY29uc3QgY2hhciAqZGV2bmFtZSkKIHsKIApAQCAtNjAxLDEwICs1MjcsOSBAQAogICoJSW5pdGlhbGl6ZSB0aGUgY29udGVudCBhZGRyZXNzYWJsZSBtZW1vcnkgdXNlZCBmb3IgZmlsdGVycy4gTG9hZAogICoJYXBwcm9wcmlhdGVseSBhY2NvcmRpbmcgdG8gdGhlIHByZXNlbmNlIG9mIFZMQU4KICAqLwotCiBzdGF0aWMgdm9pZCB2ZWxvY2l0eV9pbml0X2NhbV9maWx0ZXIoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCiB7Ci0Jc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzID0gdnB0ci0+bWFjX3JlZ3M7CisJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKIAogCS8qIFR1cm4gb24gTUNGR19QUUVOLCB0dXJuIG9mZiBNQ0ZHX1JUR09QVCAqLwogCVdPUkRfUkVHX0JJVFNfU0VUKE1DRkdfUFFFTiwgTUNGR19SVEdPUFQsICZyZWdzLT5NQ0ZHKTsKQEAgLTY0NywxOSArNTcyLDE5IEBACiB7CiAJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0gICAgICAgIHNwaW5fbG9ja19pcnEoJnZwdHItPmxvY2spOworCXNwaW5fbG9ja19pcnEoJnZwdHItPmxvY2spOwogCXZlbG9jaXR5X2luaXRfY2FtX2ZpbHRlcih2cHRyKTsKLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZ2cHRyLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnZwdHItPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCB2ZWxvY2l0eV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHZpZCkKIHsKIAlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CiAKLSAgICAgICAgc3Bpbl9sb2NrX2lycSgmdnB0ci0+bG9jayk7CisJc3Bpbl9sb2NrX2lycSgmdnB0ci0+bG9jayk7CiAJdmxhbl9ncm91cF9zZXRfZGV2aWNlKHZwdHItPnZsZ3JwLCB2aWQsIE5VTEwpOwogCXZlbG9jaXR5X2luaXRfY2FtX2ZpbHRlcih2cHRyKTsKLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZ2cHRyLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnZwdHItPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCB2ZWxvY2l0eV9pbml0X3J4X3JpbmdfaW5kZXhlcyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKQEAgLTY3NCwxMSArNTk5LDEwIEBACiAgKglSZXNldCB0aGUgb3duZXJzaGlwIGFuZCBzdGF0dXMgZm9yIHRoZSByZWNlaXZlIHJpbmcgc2lkZS4KICAqCUhhbmQgYWxsIHRoZSByZWNlaXZlIHF1ZXVlIHRvIHRoZSBOSUMuCiAgKi8KLQogc3RhdGljIHZvaWQgdmVsb2NpdHlfcnhfcmVzZXQoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCiB7CiAKLQlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKwlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncyA9IHZwdHItPm1hY19yZWdzOwogCWludCBpOwogCiAJdmVsb2NpdHlfaW5pdF9yeF9yaW5nX2luZGV4ZXModnB0cik7CkBAIC02OTYsNiArNjIwLDY0NyBAQAogfQogCiAvKioKKyAqCXZlbG9jaXR5X2dldF9vcHRfbWVkaWFfbW9kZQktCWdldCBtZWRpYSBzZWxlY3Rpb24KKyAqCUB2cHRyOiB2ZWxvY2l0eSBhZGFwdGVyCisgKgorICoJR2V0IHRoZSBtZWRpYSBtb2RlIHN0b3JlZCBpbiBFRVBST00gb3IgbW9kdWxlIG9wdGlvbnMgYW5kIGxvYWQKKyAqCW1paV9zdGF0dXMgYWNjb3JkaW5nbHkuIFRoZSByZXF1ZXN0ZWQgbGluayBzdGF0ZSBpbmZvcm1hdGlvbgorICoJaXMgYWxzbyByZXR1cm5lZC4KKyAqLworc3RhdGljIHUzMiB2ZWxvY2l0eV9nZXRfb3B0X21lZGlhX21vZGUoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCit7CisJdTMyIHN0YXR1cyA9IDA7CisKKwlzd2l0Y2ggKHZwdHItPm9wdGlvbnMuc3BkX2RweCkgeworCWNhc2UgU1BEX0RQWF9BVVRPOgorCQlzdGF0dXMgPSBWRUxPQ0lUWV9BVVRPTkVHX0VOQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBTUERfRFBYXzEwMF9GVUxMOgorCQlzdGF0dXMgPSBWRUxPQ0lUWV9TUEVFRF8xMDAgfCBWRUxPQ0lUWV9EVVBMRVhfRlVMTDsKKwkJYnJlYWs7CisJY2FzZSBTUERfRFBYXzEwX0ZVTEw6CisJCXN0YXR1cyA9IFZFTE9DSVRZX1NQRUVEXzEwIHwgVkVMT0NJVFlfRFVQTEVYX0ZVTEw7CisJCWJyZWFrOworCWNhc2UgU1BEX0RQWF8xMDBfSEFMRjoKKwkJc3RhdHVzID0gVkVMT0NJVFlfU1BFRURfMTAwOworCQlicmVhazsKKwljYXNlIFNQRF9EUFhfMTBfSEFMRjoKKwkJc3RhdHVzID0gVkVMT0NJVFlfU1BFRURfMTA7CisJCWJyZWFrOworCX0KKwl2cHRyLT5taWlfc3RhdHVzID0gc3RhdHVzOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICoJc2FmZV9kaXNhYmxlX21paV9hdXRvcG9sbAktCWF1dG9wb2xsIG9mZgorICoJQHJlZ3M6IHZlbG9jaXR5IHJlZ2lzdGVycworICoKKyAqCVR1cm4gb2ZmIHRoZSBhdXRvcG9sbCBhbmQgd2FpdCBmb3IgaXQgdG8gZGlzYWJsZSBvbiB0aGUgY2hpcAorICovCitzdGF0aWMgdm9pZCBzYWZlX2Rpc2FibGVfbWlpX2F1dG9wb2xsKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzKQoreworCXUxNiB3dzsKKworCS8qICB0dXJuIG9mZiBNQVVUTyAqLworCXdyaXRlYigwLCAmcmVncy0+TUlJQ1IpOworCWZvciAod3cgPSAwOyB3dyA8IFdfTUFYX1RJTUVPVVQ7IHd3KyspIHsKKwkJdWRlbGF5KDEpOworCQlpZiAoQllURV9SRUdfQklUU19JU19PTihNSUlTUl9NSURMRSwgJnJlZ3MtPk1JSVNSKSkKKwkJCWJyZWFrOworCX0KK30KKworLyoqCisgKgllbmFibGVfbWlpX2F1dG9wb2xsCS0JdHVybiBvbiBhdXRvcG9sbGluZworICoJQHJlZ3M6IHZlbG9jaXR5IHJlZ2lzdGVycworICoKKyAqCUVuYWJsZSB0aGUgTUlJIGxpbmsgc3RhdHVzIGF1dG9wb2xsIGZlYXR1cmUgb24gdGhlIFZlbG9jaXR5CisgKgloYXJkd2FyZS4gV2FpdCBmb3IgaXQgdG8gZW5hYmxlLgorICovCitzdGF0aWMgdm9pZCBlbmFibGVfbWlpX2F1dG9wb2xsKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzKQoreworCWludCBpaTsKKworCXdyaXRlYigwLCAmKHJlZ3MtPk1JSUNSKSk7CisJd3JpdGViKE1JSUFEUl9TV01QTCwgJnJlZ3MtPk1JSUFEUik7CisKKwlmb3IgKGlpID0gMDsgaWkgPCBXX01BWF9USU1FT1VUOyBpaSsrKSB7CisJCXVkZWxheSgxKTsKKwkJaWYgKEJZVEVfUkVHX0JJVFNfSVNfT04oTUlJU1JfTUlETEUsICZyZWdzLT5NSUlTUikpCisJCQlicmVhazsKKwl9CisKKwl3cml0ZWIoTUlJQ1JfTUFVVE8sICZyZWdzLT5NSUlDUik7CisKKwlmb3IgKGlpID0gMDsgaWkgPCBXX01BWF9USU1FT1VUOyBpaSsrKSB7CisJCXVkZWxheSgxKTsKKwkJaWYgKCFCWVRFX1JFR19CSVRTX0lTX09OKE1JSVNSX01JRExFLCAmcmVncy0+TUlJU1IpKQorCQkJYnJlYWs7CisJfQorCit9CisKKy8qKgorICoJdmVsb2NpdHlfbWlpX3JlYWQJLQlyZWFkIE1JSSBkYXRhCisgKglAcmVnczogdmVsb2NpdHkgcmVnaXN0ZXJzCisgKglAaW5kZXg6IE1JSSByZWdpc3RlciBpbmRleAorICoJQGRhdGE6IGJ1ZmZlciBmb3IgcmVjZWl2ZWQgZGF0YQorICoKKyAqCVBlcmZvcm0gYSBzaW5nbGUgcmVhZCBvZiBhbiBNSUkgMTZiaXQgcmVnaXN0ZXIuIFJldHVybnMgemVybworICoJb24gc3VjY2VzcyBvciAtRVRJTUVET1VUIGlmIHRoZSBQSFkgZGlkIG5vdCByZXNwb25kLgorICovCitzdGF0aWMgaW50IHZlbG9jaXR5X21paV9yZWFkKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzLCB1OCBpbmRleCwgdTE2ICpkYXRhKQoreworCXUxNiB3dzsKKworCS8qCisJICoJRGlzYWJsZSBNSUlDUl9NQVVUTywgc28gdGhhdCBtaWkgYWRkciBjYW4gYmUgc2V0IG5vcm1hbGx5CisJICovCisJc2FmZV9kaXNhYmxlX21paV9hdXRvcG9sbChyZWdzKTsKKworCXdyaXRlYihpbmRleCwgJnJlZ3MtPk1JSUFEUik7CisKKwlCWVRFX1JFR19CSVRTX09OKE1JSUNSX1JDTUQsICZyZWdzLT5NSUlDUik7CisKKwlmb3IgKHd3ID0gMDsgd3cgPCBXX01BWF9USU1FT1VUOyB3dysrKSB7CisJCWlmICghKHJlYWRiKCZyZWdzLT5NSUlDUikgJiBNSUlDUl9SQ01EKSkKKwkJCWJyZWFrOworCX0KKworCSpkYXRhID0gcmVhZHcoJnJlZ3MtPk1JSURBVEEpOworCisJZW5hYmxlX21paV9hdXRvcG9sbChyZWdzKTsKKwlpZiAod3cgPT0gV19NQVhfVElNRU9VVCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKgltaWlfY2hlY2tfbWVkaWFfbW9kZQktCWNoZWNrIG1lZGlhIHN0YXRlCisgKglAcmVnczogdmVsb2NpdHkgcmVnaXN0ZXJzCisgKgorICoJQ2hlY2sgdGhlIGN1cnJlbnQgTUlJIHN0YXR1cyBhbmQgZGV0ZXJtaW5lIHRoZSBsaW5rIHN0YXR1cworICoJYWNjb3JkaW5nbHkKKyAqLworc3RhdGljIHUzMiBtaWlfY2hlY2tfbWVkaWFfbW9kZShzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncykKK3sKKwl1MzIgc3RhdHVzID0gMDsKKwl1MTYgQU5BUjsKKworCWlmICghTUlJX1JFR19CSVRTX0lTX09OKEJNU1JfTE5LLCBNSUlfUkVHX0JNU1IsIHJlZ3MpKQorCQlzdGF0dXMgfD0gVkVMT0NJVFlfTElOS19GQUlMOworCisJaWYgKE1JSV9SRUdfQklUU19JU19PTihHMTAwMENSXzEwMDBGRCwgTUlJX1JFR19HMTAwMENSLCByZWdzKSkKKwkJc3RhdHVzIHw9IFZFTE9DSVRZX1NQRUVEXzEwMDAgfCBWRUxPQ0lUWV9EVVBMRVhfRlVMTDsKKwllbHNlIGlmIChNSUlfUkVHX0JJVFNfSVNfT04oRzEwMDBDUl8xMDAwLCBNSUlfUkVHX0cxMDAwQ1IsIHJlZ3MpKQorCQlzdGF0dXMgfD0gKFZFTE9DSVRZX1NQRUVEXzEwMDApOworCWVsc2UgeworCQl2ZWxvY2l0eV9taWlfcmVhZChyZWdzLCBNSUlfUkVHX0FOQVIsICZBTkFSKTsKKwkJaWYgKEFOQVIgJiBBTkFSX1RYRkQpCisJCQlzdGF0dXMgfD0gKFZFTE9DSVRZX1NQRUVEXzEwMCB8IFZFTE9DSVRZX0RVUExFWF9GVUxMKTsKKwkJZWxzZSBpZiAoQU5BUiAmIEFOQVJfVFgpCisJCQlzdGF0dXMgfD0gVkVMT0NJVFlfU1BFRURfMTAwOworCQllbHNlIGlmIChBTkFSICYgQU5BUl8xMEZEKQorCQkJc3RhdHVzIHw9IChWRUxPQ0lUWV9TUEVFRF8xMCB8IFZFTE9DSVRZX0RVUExFWF9GVUxMKTsKKwkJZWxzZQorCQkJc3RhdHVzIHw9IChWRUxPQ0lUWV9TUEVFRF8xMCk7CisJfQorCisJaWYgKE1JSV9SRUdfQklUU19JU19PTihCTUNSX0FVVE8sIE1JSV9SRUdfQk1DUiwgcmVncykpIHsKKwkJdmVsb2NpdHlfbWlpX3JlYWQocmVncywgTUlJX1JFR19BTkFSLCAmQU5BUik7CisJCWlmICgoQU5BUiAmIChBTkFSX1RYRkQgfCBBTkFSX1RYIHwgQU5BUl8xMEZEIHwgQU5BUl8xMCkpCisJCSAgICA9PSAoQU5BUl9UWEZEIHwgQU5BUl9UWCB8IEFOQVJfMTBGRCB8IEFOQVJfMTApKSB7CisJCQlpZiAoTUlJX1JFR19CSVRTX0lTX09OKEcxMDAwQ1JfMTAwMCB8IEcxMDAwQ1JfMTAwMEZELCBNSUlfUkVHX0cxMDAwQ1IsIHJlZ3MpKQorCQkJCXN0YXR1cyB8PSBWRUxPQ0lUWV9BVVRPTkVHX0VOQUJMRTsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfbWlpX3dyaXRlCS0Jd3JpdGUgTUlJIGRhdGEKKyAqCUByZWdzOiB2ZWxvY2l0eSByZWdpc3RlcnMKKyAqCUBpbmRleDogTUlJIHJlZ2lzdGVyIGluZGV4CisgKglAZGF0YTogMTZiaXQgZGF0YSBmb3IgdGhlIE1JSSByZWdpc3RlcgorICoKKyAqCVBlcmZvcm0gYSBzaW5nbGUgd3JpdGUgdG8gYW4gTUlJIDE2Yml0IHJlZ2lzdGVyLiBSZXR1cm5zIHplcm8KKyAqCW9uIHN1Y2Nlc3Mgb3IgLUVUSU1FRE9VVCBpZiB0aGUgUEhZIGRpZCBub3QgcmVzcG9uZC4KKyAqLworc3RhdGljIGludCB2ZWxvY2l0eV9taWlfd3JpdGUoc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MsIHU4IG1paV9hZGRyLCB1MTYgZGF0YSkKK3sKKwl1MTYgd3c7CisKKwkvKgorCSAqCURpc2FibGUgTUlJQ1JfTUFVVE8sIHNvIHRoYXQgbWlpIGFkZHIgY2FuIGJlIHNldCBub3JtYWxseQorCSAqLworCXNhZmVfZGlzYWJsZV9taWlfYXV0b3BvbGwocmVncyk7CisKKwkvKiBNSUkgcmVnIG9mZnNldCAqLworCXdyaXRlYihtaWlfYWRkciwgJnJlZ3MtPk1JSUFEUik7CisJLyogc2V0IE1JSSBkYXRhICovCisJd3JpdGV3KGRhdGEsICZyZWdzLT5NSUlEQVRBKTsKKworCS8qIHR1cm4gb24gTUlJQ1JfV0NNRCAqLworCUJZVEVfUkVHX0JJVFNfT04oTUlJQ1JfV0NNRCwgJnJlZ3MtPk1JSUNSKTsKKworCS8qIFdfTUFYX1RJTUVPVVQgaXMgdGhlIHRpbWVvdXQgcGVyaW9kICovCisJZm9yICh3dyA9IDA7IHd3IDwgV19NQVhfVElNRU9VVDsgd3crKykgeworCQl1ZGVsYXkoNSk7CisJCWlmICghKHJlYWRiKCZyZWdzLT5NSUlDUikgJiBNSUlDUl9XQ01EKSkKKwkJCWJyZWFrOworCX0KKwllbmFibGVfbWlpX2F1dG9wb2xsKHJlZ3MpOworCisJaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpCisJCXJldHVybiAtRVRJTUVET1VUOworCXJldHVybiAwOworfQorCisvKioKKyAqCXNldF9taWlfZmxvd19jb250cm9sCS0JZmxvdyBjb250cm9sIHNldHVwCisgKglAdnB0cjogdmVsb2NpdHkgaW50ZXJmYWNlCisgKgorICoJU2V0IHVwIHRoZSBmbG93IGNvbnRyb2wgb24gdGhpcyBpbnRlcmZhY2UgYWNjb3JkaW5nIHRvCisgKgl0aGUgc3VwcGxpZWQgdXNlci9lZXByb20gb3B0aW9ucy4KKyAqLworc3RhdGljIHZvaWQgc2V0X21paV9mbG93X2NvbnRyb2woc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCit7CisJLypFbmFibGUgb3IgRGlzYWJsZSBQQVVTRSBpbiBBTkFSICovCisJc3dpdGNoICh2cHRyLT5vcHRpb25zLmZsb3dfY250bCkgeworCWNhc2UgRkxPV19DTlRMX1RYOgorCQlNSUlfUkVHX0JJVFNfT0ZGKEFOQVJfUEFVU0UsIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOworCQlNSUlfUkVHX0JJVFNfT04oQU5BUl9BU01ESVIsIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOworCQlicmVhazsKKworCWNhc2UgRkxPV19DTlRMX1JYOgorCQlNSUlfUkVHX0JJVFNfT04oQU5BUl9QQVVTRSwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7CisJCU1JSV9SRUdfQklUU19PTihBTkFSX0FTTURJUiwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7CisJCWJyZWFrOworCisJY2FzZSBGTE9XX0NOVExfVFhfUlg6CisJCU1JSV9SRUdfQklUU19PTihBTkFSX1BBVVNFLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKKwkJTUlJX1JFR19CSVRTX09OKEFOQVJfQVNNRElSLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKKwkJYnJlYWs7CisKKwljYXNlIEZMT1dfQ05UTF9ESVNBQkxFOgorCQlNSUlfUkVHX0JJVFNfT0ZGKEFOQVJfUEFVU0UsIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOworCQlNSUlfUkVHX0JJVFNfT0ZGKEFOQVJfQVNNRElSLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqCW1paV9zZXRfYXV0b19vbgkJLQlhdXRvbmVnb3RpYXRlIG9uCisgKglAdnB0cjogdmVsb2NpdHkKKyAqCisgKglFbmFibGUgYXV0b25lZ290YXRpb24gb24gdGhpcyBpbnRlcmZhY2UKKyAqLworc3RhdGljIHZvaWQgbWlpX3NldF9hdXRvX29uKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQoreworCWlmIChNSUlfUkVHX0JJVFNfSVNfT04oQk1DUl9BVVRPLCBNSUlfUkVHX0JNQ1IsIHZwdHItPm1hY19yZWdzKSkKKwkJTUlJX1JFR19CSVRTX09OKEJNQ1JfUkVBVVRPLCBNSUlfUkVHX0JNQ1IsIHZwdHItPm1hY19yZWdzKTsKKwllbHNlCisJCU1JSV9SRUdfQklUU19PTihCTUNSX0FVVE8sIE1JSV9SRUdfQk1DUiwgdnB0ci0+bWFjX3JlZ3MpOworfQorCitzdGF0aWMgdTMyIGNoZWNrX2Nvbm5lY3Rpb25fdHlwZShzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncykKK3sKKwl1MzIgc3RhdHVzID0gMDsKKwl1OCBQSFlTUjA7CisJdTE2IEFOQVI7CisJUEhZU1IwID0gcmVhZGIoJnJlZ3MtPlBIWVNSMCk7CisKKwkvKgorCSAgIGlmICghKFBIWVNSMCAmIFBIWVNSMF9MSU5LR0QpKQorCSAgIHN0YXR1c3w9VkVMT0NJVFlfTElOS19GQUlMOworCSAqLworCisJaWYgKFBIWVNSMCAmIFBIWVNSMF9GRFBYKQorCQlzdGF0dXMgfD0gVkVMT0NJVFlfRFVQTEVYX0ZVTEw7CisKKwlpZiAoUEhZU1IwICYgUEhZU1IwX1NQREcpCisJCXN0YXR1cyB8PSBWRUxPQ0lUWV9TUEVFRF8xMDAwOworCWVsc2UgaWYgKFBIWVNSMCAmIFBIWVNSMF9TUEQxMCkKKwkJc3RhdHVzIHw9IFZFTE9DSVRZX1NQRUVEXzEwOworCWVsc2UKKwkJc3RhdHVzIHw9IFZFTE9DSVRZX1NQRUVEXzEwMDsKKworCWlmIChNSUlfUkVHX0JJVFNfSVNfT04oQk1DUl9BVVRPLCBNSUlfUkVHX0JNQ1IsIHJlZ3MpKSB7CisJCXZlbG9jaXR5X21paV9yZWFkKHJlZ3MsIE1JSV9SRUdfQU5BUiwgJkFOQVIpOworCQlpZiAoKEFOQVIgJiAoQU5BUl9UWEZEIHwgQU5BUl9UWCB8IEFOQVJfMTBGRCB8IEFOQVJfMTApKQorCQkgICAgPT0gKEFOQVJfVFhGRCB8IEFOQVJfVFggfCBBTkFSXzEwRkQgfCBBTkFSXzEwKSkgeworCQkJaWYgKE1JSV9SRUdfQklUU19JU19PTihHMTAwMENSXzEwMDAgfCBHMTAwMENSXzEwMDBGRCwgTUlJX1JFR19HMTAwMENSLCByZWdzKSkKKwkJCQlzdGF0dXMgfD0gVkVMT0NJVFlfQVVUT05FR19FTkFCTEU7CisJCX0KKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKworLyoqCisgKgl2ZWxvY2l0eV9zZXRfbWVkaWFfbW9kZQkJLQlzZXQgbWVkaWEgbW9kZQorICoJQG1paV9zdGF0dXM6IG9sZCBNSUkgbGluayBzdGF0ZQorICoKKyAqCUNoZWNrIHRoZSBtZWRpYSBsaW5rIHN0YXRlIGFuZCBjb25maWd1cmUgdGhlIGZsb3cgY29udHJvbAorICoJUEhZIGFuZCBhbHNvIHZlbG9jaXR5IGhhcmR3YXJlIHNldHVwIGFjY29yZGluZ2x5LiBJbiBwYXJ0aWN1bGFyCisgKgl3ZSBuZWVkIHRvIHNldCB1cCBDRCBwb2xsaW5nIGFuZCBmcmFtZSBidXJzdGluZy4KKyAqLworc3RhdGljIGludCB2ZWxvY2l0eV9zZXRfbWVkaWFfbW9kZShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgdTMyIG1paV9zdGF0dXMpCit7CisJdTMyIGN1cnJfc3RhdHVzOworCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzID0gdnB0ci0+bWFjX3JlZ3M7CisKKwl2cHRyLT5taWlfc3RhdHVzID0gbWlpX2NoZWNrX21lZGlhX21vZGUodnB0ci0+bWFjX3JlZ3MpOworCWN1cnJfc3RhdHVzID0gdnB0ci0+bWlpX3N0YXR1cyAmICh+VkVMT0NJVFlfTElOS19GQUlMKTsKKworCS8qIFNldCBtaWkgbGluayBzdGF0dXMgKi8KKwlzZXRfbWlpX2Zsb3dfY29udHJvbCh2cHRyKTsKKworCS8qCisJICAgQ2hlY2sgaWYgbmV3IHN0YXR1cyBpcyBjb25zaXNlbnQgd2l0aCBjdXJyZW50IHN0YXR1cworCSAgIGlmICgoKG1paV9zdGF0dXMgJiBjdXJyX3N0YXR1cykgJiBWRUxPQ0lUWV9BVVRPTkVHX0VOQUJMRSkKKwkgICB8fCAobWlpX3N0YXR1cz09Y3Vycl9zdGF0dXMpKSB7CisJICAgdnB0ci0+bWlpX3N0YXR1cz1taWlfY2hlY2tfbWVkaWFfbW9kZSh2cHRyLT5tYWNfcmVncyk7CisJICAgdnB0ci0+bWlpX3N0YXR1cz1jaGVja19jb25uZWN0aW9uX3R5cGUodnB0ci0+bWFjX3JlZ3MpOworCSAgIFZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIlZlbG9jaXR5IGxpbmsgbm8gY2hhbmdlXG4iKTsKKwkgICByZXR1cm4gMDsKKwkgICB9CisJICovCisKKwlpZiAoUEhZSURfR0VUX1BIWV9JRCh2cHRyLT5waHlfaWQpID09IFBIWUlEX0NJQ0FEQV9DUzgyMDEpCisJCU1JSV9SRUdfQklUU19PTihBVVhDUl9NRFBQUywgTUlJX1JFR19BVVhDUiwgdnB0ci0+bWFjX3JlZ3MpOworCisJLyoKKwkgKglJZiBjb25uZWN0aW9uIHR5cGUgaXMgQVVUTworCSAqLworCWlmIChtaWlfc3RhdHVzICYgVkVMT0NJVFlfQVVUT05FR19FTkFCTEUpIHsKKwkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiVmVsb2NpdHkgaXMgQVVUTyBtb2RlXG4iKTsKKwkJLyogY2xlYXIgZm9yY2UgTUFDIG1vZGUgYml0ICovCisJCUJZVEVfUkVHX0JJVFNfT0ZGKENISVBHQ1JfRkNNT0RFLCAmcmVncy0+Q0hJUEdDUik7CisJCS8qIHNldCBkdXBsZXggbW9kZSBvZiBNQUMgYWNjb3JkaW5nIHRvIGR1cGxleCBtb2RlIG9mIE1JSSAqLworCQlNSUlfUkVHX0JJVFNfT04oQU5BUl9UWEZEIHwgQU5BUl9UWCB8IEFOQVJfMTBGRCB8IEFOQVJfMTAsIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOworCQlNSUlfUkVHX0JJVFNfT04oRzEwMDBDUl8xMDAwRkQgfCBHMTAwMENSXzEwMDAsIE1JSV9SRUdfRzEwMDBDUiwgdnB0ci0+bWFjX3JlZ3MpOworCQlNSUlfUkVHX0JJVFNfT04oQk1DUl9TUEVFRDFHLCBNSUlfUkVHX0JNQ1IsIHZwdHItPm1hY19yZWdzKTsKKworCQkvKiBlbmFibGUgQVVUTy1ORUdPIG1vZGUgKi8KKwkJbWlpX3NldF9hdXRvX29uKHZwdHIpOworCX0gZWxzZSB7CisJCXUxNiBBTkFSOworCQl1OCBDSElQR0NSOworCisJCS8qCisJCSAqIDEuIGlmIGl0J3MgMzExOSwgZGlzYWJsZSBmcmFtZSBidXJzdGluZyBpbiBoYWxmZHVwbGV4IG1vZGUKKwkJICogICAgYW5kIGVuYWJsZSBpdCBpbiBmdWxsZHVwbGV4IG1vZGUKKwkJICogMi4gc2V0IGNvcnJlY3QgTUlJL0dNSUkgYW5kIGhhbGYvZnVsbCBkdXBsZXggbW9kZSBpbiBDSElQR0NSCisJCSAqIDMuIG9ubHkgZW5hYmxlIENEIGhlYXJ0IGJlYXQgY291bnRlciBpbiAxMEhEIG1vZGUKKwkJICovCisKKwkJLyogc2V0IGZvcmNlIE1BQyBtb2RlIGJpdCAqLworCQlCWVRFX1JFR19CSVRTX09OKENISVBHQ1JfRkNNT0RFLCAmcmVncy0+Q0hJUEdDUik7CisKKwkJQ0hJUEdDUiA9IHJlYWRiKCZyZWdzLT5DSElQR0NSKTsKKwkJQ0hJUEdDUiAmPSB+Q0hJUEdDUl9GQ0dNSUk7CisKKwkJaWYgKG1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkgeworCQkJQ0hJUEdDUiB8PSBDSElQR0NSX0ZDRkRYOworCQkJd3JpdGViKENISVBHQ1IsICZyZWdzLT5DSElQR0NSKTsKKwkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgInNldCBWZWxvY2l0eSB0byBmb3JjZWQgZnVsbCBtb2RlXG4iKTsKKwkJCWlmICh2cHRyLT5yZXZfaWQgPCBSRVZfSURfVlQzMjE2X0EwKQorCQkJCUJZVEVfUkVHX0JJVFNfT0ZGKFRDUl9UQjJCRElTLCAmcmVncy0+VENSKTsKKwkJfSBlbHNlIHsKKwkJCUNISVBHQ1IgJj0gfkNISVBHQ1JfRkNGRFg7CisJCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICJzZXQgVmVsb2NpdHkgdG8gZm9yY2VkIGhhbGYgbW9kZVxuIik7CisJCQl3cml0ZWIoQ0hJUEdDUiwgJnJlZ3MtPkNISVBHQ1IpOworCQkJaWYgKHZwdHItPnJldl9pZCA8IFJFVl9JRF9WVDMyMTZfQTApCisJCQkJQllURV9SRUdfQklUU19PTihUQ1JfVEIyQkRJUywgJnJlZ3MtPlRDUik7CisJCX0KKworCQlNSUlfUkVHX0JJVFNfT0ZGKEcxMDAwQ1JfMTAwMEZEIHwgRzEwMDBDUl8xMDAwLCBNSUlfUkVHX0cxMDAwQ1IsIHZwdHItPm1hY19yZWdzKTsKKworCQlpZiAoIShtaWlfc3RhdHVzICYgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpICYmIChtaWlfc3RhdHVzICYgVkVMT0NJVFlfU1BFRURfMTApKQorCQkJQllURV9SRUdfQklUU19PRkYoVEVTVENGR19IQkRJUywgJnJlZ3MtPlRFU1RDRkcpOworCQllbHNlCisJCQlCWVRFX1JFR19CSVRTX09OKFRFU1RDRkdfSEJESVMsICZyZWdzLT5URVNUQ0ZHKTsKKworCQkvKiBNSUlfUkVHX0JJVFNfT0ZGKEJNQ1JfU1BFRUQxRywgTUlJX1JFR19CTUNSLCB2cHRyLT5tYWNfcmVncyk7ICovCisJCXZlbG9jaXR5X21paV9yZWFkKHZwdHItPm1hY19yZWdzLCBNSUlfUkVHX0FOQVIsICZBTkFSKTsKKwkJQU5BUiAmPSAofihBTkFSX1RYRkQgfCBBTkFSX1RYIHwgQU5BUl8xMEZEIHwgQU5BUl8xMCkpOworCQlpZiAobWlpX3N0YXR1cyAmIFZFTE9DSVRZX1NQRUVEXzEwMCkgeworCQkJaWYgKG1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkKKwkJCQlBTkFSIHw9IEFOQVJfVFhGRDsKKwkJCWVsc2UKKwkJCQlBTkFSIHw9IEFOQVJfVFg7CisJCX0gZWxzZSB7CisJCQlpZiAobWlpX3N0YXR1cyAmIFZFTE9DSVRZX0RVUExFWF9GVUxMKQorCQkJCUFOQVIgfD0gQU5BUl8xMEZEOworCQkJZWxzZQorCQkJCUFOQVIgfD0gQU5BUl8xMDsKKwkJfQorCQl2ZWxvY2l0eV9taWlfd3JpdGUodnB0ci0+bWFjX3JlZ3MsIE1JSV9SRUdfQU5BUiwgQU5BUik7CisJCS8qIGVuYWJsZSBBVVRPLU5FR08gbW9kZSAqLworCQltaWlfc2V0X2F1dG9fb24odnB0cik7CisJCS8qIE1JSV9SRUdfQklUU19PTihCTUNSX0FVVE8sIE1JSV9SRUdfQk1DUiwgdnB0ci0+bWFjX3JlZ3MpOyAqLworCX0KKwkvKiB2cHRyLT5taWlfc3RhdHVzPW1paV9jaGVja19tZWRpYV9tb2RlKHZwdHItPm1hY19yZWdzKTsgKi8KKwkvKiB2cHRyLT5taWlfc3RhdHVzPWNoZWNrX2Nvbm5lY3Rpb25fdHlwZSh2cHRyLT5tYWNfcmVncyk7ICovCisJcmV0dXJuIFZFTE9DSVRZX0xJTktfQ0hBTkdFOworfQorCisvKioKKyAqCXZlbG9jaXR5X3ByaW50X2xpbmtfc3RhdHVzCS0JbGluayBzdGF0dXMgcmVwb3J0aW5nCisgKglAdnB0cjogdmVsb2NpdHkgdG8gcmVwb3J0IG9uCisgKgorICoJVHVybiB0aGUgbGluayBzdGF0dXMgb2YgdGhlIHZlbG9jaXR5IGNhcmQgaW50byBhIGtlcm5lbCBsb2cKKyAqCWRlc2NyaXB0aW9uIG9mIHRoZSBuZXcgbGluayBzdGF0ZSwgZGV0YWlsaW5nIHNwZWVkIGFuZCBkdXBsZXgKKyAqCXN0YXR1cworICovCitzdGF0aWMgdm9pZCB2ZWxvY2l0eV9wcmludF9saW5rX3N0YXR1cyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3sKKworCWlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfTElOS19GQUlMKSB7CisJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9OT1RJQ0UgIiVzOiBmYWlsZWQgdG8gZGV0ZWN0IGNhYmxlIGxpbmtcbiIsIHZwdHItPmRldi0+bmFtZSk7CisJfSBlbHNlIGlmICh2cHRyLT5vcHRpb25zLnNwZF9kcHggPT0gU1BEX0RQWF9BVVRPKSB7CisJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9OT1RJQ0UgIiVzOiBMaW5rIGF1dG8tbmVnb3RpYXRpb24iLCB2cHRyLT5kZXYtPm5hbWUpOworCisJCWlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfU1BFRURfMTAwMCkKKwkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIiBzcGVlZCAxMDAwTSBicHMiKTsKKwkJZWxzZSBpZiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX1NQRUVEXzEwMCkKKwkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIiBzcGVlZCAxMDBNIGJwcyIpOworCQllbHNlCisJCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICIgc3BlZWQgMTBNIGJwcyIpOworCisJCWlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpCisJCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICIgZnVsbCBkdXBsZXhcbiIpOworCQllbHNlCisJCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICIgaGFsZiBkdXBsZXhcbiIpOworCX0gZWxzZSB7CisJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9OT1RJQ0UgIiVzOiBMaW5rIGZvcmNlZCIsIHZwdHItPmRldi0+bmFtZSk7CisJCXN3aXRjaCAodnB0ci0+b3B0aW9ucy5zcGRfZHB4KSB7CisJCWNhc2UgU1BEX0RQWF8xMDBfSEFMRjoKKwkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIiBzcGVlZCAxMDBNIGJwcyBoYWxmIGR1cGxleFxuIik7CisJCQlicmVhazsKKwkJY2FzZSBTUERfRFBYXzEwMF9GVUxMOgorCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIHNwZWVkIDEwME0gYnBzIGZ1bGwgZHVwbGV4XG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFNQRF9EUFhfMTBfSEFMRjoKKwkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIiBzcGVlZCAxME0gYnBzIGhhbGYgZHVwbGV4XG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFNQRF9EUFhfMTBfRlVMTDoKKwkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIiBzcGVlZCAxME0gYnBzIGZ1bGwgZHVwbGV4XG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qKgorICoJZW5hYmxlX2Zsb3dfY29udHJvbF9hYmlsaXR5CS0JZmxvdyBjb250cm9sCisgKglAdnB0cjogdmVsb2l0eSB0byBjb25maWd1cmUKKyAqCisgKglTZXQgdXAgZmxvdyBjb250cm9sIGFjY29yZGluZyB0byB0aGUgZmxvdyBjb250cm9sIG9wdGlvbnMKKyAqCWRldGVybWluZWQgYnkgdGhlIGVlcHJvbS9jb25maWd1cmF0aW9uLgorICovCitzdGF0aWMgdm9pZCBlbmFibGVfZmxvd19jb250cm9sX2FiaWxpdHkoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCit7CisKKwlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncyA9IHZwdHItPm1hY19yZWdzOworCisJc3dpdGNoICh2cHRyLT5vcHRpb25zLmZsb3dfY250bCkgeworCisJY2FzZSBGTE9XX0NOVExfREVGQVVMVDoKKwkJaWYgKEJZVEVfUkVHX0JJVFNfSVNfT04oUEhZU1IwX1JYRkxDLCAmcmVncy0+UEhZU1IwKSkKKwkJCXdyaXRlbChDUjBfRkRYUkZDRU4sICZyZWdzLT5DUjBTZXQpOworCQllbHNlCisJCQl3cml0ZWwoQ1IwX0ZEWFJGQ0VOLCAmcmVncy0+Q1IwQ2xyKTsKKworCQlpZiAoQllURV9SRUdfQklUU19JU19PTihQSFlTUjBfVFhGTEMsICZyZWdzLT5QSFlTUjApKQorCQkJd3JpdGVsKENSMF9GRFhURkNFTiwgJnJlZ3MtPkNSMFNldCk7CisJCWVsc2UKKwkJCXdyaXRlbChDUjBfRkRYVEZDRU4sICZyZWdzLT5DUjBDbHIpOworCQlicmVhazsKKworCWNhc2UgRkxPV19DTlRMX1RYOgorCQl3cml0ZWwoQ1IwX0ZEWFRGQ0VOLCAmcmVncy0+Q1IwU2V0KTsKKwkJd3JpdGVsKENSMF9GRFhSRkNFTiwgJnJlZ3MtPkNSMENscik7CisJCWJyZWFrOworCisJY2FzZSBGTE9XX0NOVExfUlg6CisJCXdyaXRlbChDUjBfRkRYUkZDRU4sICZyZWdzLT5DUjBTZXQpOworCQl3cml0ZWwoQ1IwX0ZEWFRGQ0VOLCAmcmVncy0+Q1IwQ2xyKTsKKwkJYnJlYWs7CisKKwljYXNlIEZMT1dfQ05UTF9UWF9SWDoKKwkJd3JpdGVsKENSMF9GRFhURkNFTiwgJnJlZ3MtPkNSMFNldCk7CisJCXdyaXRlbChDUjBfRkRYUkZDRU4sICZyZWdzLT5DUjBTZXQpOworCQlicmVhazsKKworCWNhc2UgRkxPV19DTlRMX0RJU0FCTEU6CisJCXdyaXRlbChDUjBfRkRYUkZDRU4sICZyZWdzLT5DUjBDbHIpOworCQl3cml0ZWwoQ1IwX0ZEWFRGQ0VOLCAmcmVncy0+Q1IwQ2xyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKK30KKworLyoqCisgKgl2ZWxvY2l0eV9zb2Z0X3Jlc2V0CS0Jc29mdCByZXNldAorICoJQHZwdHI6IHZlbG9jaXR5IHRvIHJlc2V0CisgKgorICoJS2ljayBvZmYgYSBzb2Z0IHJlc2V0IG9mIHRoZSB2ZWxvY2l0eSBhZGFwdGVyIGFuZCB0aGVuIHBvbGwKKyAqCXVudGlsIHRoZSByZXNldCBzZXF1ZW5jZSBoYXMgY29tcGxldGVkIGJlZm9yZSByZXR1cm5pbmcuCisgKi8KK3N0YXRpYyBpbnQgdmVsb2NpdHlfc29mdF9yZXNldChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3sKKwlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncyA9IHZwdHItPm1hY19yZWdzOworCWludCBpID0gMDsKKworCXdyaXRlbChDUjBfU0ZSU1QsICZyZWdzLT5DUjBTZXQpOworCisJZm9yIChpID0gMDsgaSA8IFdfTUFYX1RJTUVPVVQ7IGkrKykgeworCQl1ZGVsYXkoNSk7CisJCWlmICghRFdPUkRfUkVHX0JJVFNfSVNfT04oQ1IwX1NGUlNULCAmcmVncy0+Q1IwU2V0KSkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IFdfTUFYX1RJTUVPVVQpIHsKKwkJd3JpdGVsKENSMF9GT1JTUlNULCAmcmVncy0+Q1IwU2V0KTsKKwkJLyogRklYTUU6IFBDSSBQT1NUSU5HICovCisJCS8qIGRlbGF5IDJtcyAqLworCQltZGVsYXkoMik7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqCXZlbG9jaXR5X3NldF9tdWx0aQktCWZpbHRlciBsaXN0IGNoYW5nZSBjYWxsYmFjaworICoJQGRldjogbmV0d29yayBkZXZpY2UKKyAqCisgKglDYWxsZWQgYnkgdGhlIG5ldHdvcmsgbGF5ZXIgd2hlbiB0aGUgZmlsdGVyIGxpc3RzIG5lZWQgdG8gY2hhbmdlCisgKglmb3IgYSB2ZWxvY2l0eSBhZGFwdGVyLiBSZWxvYWQgdGhlIENBTXMgd2l0aCB0aGUgbmV3IGFkZHJlc3MKKyAqCWZpbHRlciBydWxlc2V0LgorICovCitzdGF0aWMgdm9pZCB2ZWxvY2l0eV9zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKwl1OCByeF9tb2RlOworCWludCBpOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewkvKiBTZXQgcHJvbWlzY3VvdXMuICovCisJCXdyaXRlbCgweGZmZmZmZmZmLCAmcmVncy0+TUFSQ0FNWzBdKTsKKwkJd3JpdGVsKDB4ZmZmZmZmZmYsICZyZWdzLT5NQVJDQU1bNF0pOworCQlyeF9tb2RlID0gKFJDUl9BTSB8IFJDUl9BQiB8IFJDUl9QUk9NKTsKKwl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gdnB0ci0+bXVsdGljYXN0X2xpbWl0KQorCQkgICB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwkJd3JpdGVsKDB4ZmZmZmZmZmYsICZyZWdzLT5NQVJDQU1bMF0pOworCQl3cml0ZWwoMHhmZmZmZmZmZiwgJnJlZ3MtPk1BUkNBTVs0XSk7CisJCXJ4X21vZGUgPSAoUkNSX0FNIHwgUkNSX0FCKTsKKwl9IGVsc2UgeworCQlpbnQgb2Zmc2V0ID0gTUNBTV9TSVpFIC0gdnB0ci0+bXVsdGljYXN0X2xpbWl0OworCQltYWNfZ2V0X2NhbV9tYXNrKHJlZ3MsIHZwdHItPm1DQU1tYXNrKTsKKworCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJCW1hY19zZXRfY2FtKHJlZ3MsIGkgKyBvZmZzZXQsIG1jbGlzdC0+ZG1pX2FkZHIpOworCQkJdnB0ci0+bUNBTW1hc2tbKG9mZnNldCArIGkpIC8gOF0gfD0gMSA8PCAoKG9mZnNldCArIGkpICYgNyk7CisJCX0KKworCQltYWNfc2V0X2NhbV9tYXNrKHJlZ3MsIHZwdHItPm1DQU1tYXNrKTsKKwkJcnhfbW9kZSA9IFJDUl9BTSB8IFJDUl9BQiB8IFJDUl9BUDsKKwl9CisJaWYgKGRldi0+bXR1ID4gMTUwMCkKKwkJcnhfbW9kZSB8PSBSQ1JfQUw7CisKKwlCWVRFX1JFR19CSVRTX09OKHJ4X21vZGUsICZyZWdzLT5SQ1IpOworCit9CisKKy8qCisgKiBNSUkgYWNjZXNzICwgbWVkaWEgbGluayBtb2RlIHNldHRpbmcgZnVuY3Rpb25zCisgKi8KKworLyoqCisgKgltaWlfaW5pdAktCXNldCB1cCBNSUkKKyAqCUB2cHRyOiB2ZWxvY2l0eSBhZGFwdGVyCisgKglAbWlpX3N0YXR1czogIGxpbmtzIHRhdHVzCisgKgorICoJU2V0IHVwIHRoZSBQSFkgZm9yIHRoZSBjdXJyZW50IGxpbmsgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkIG1paV9pbml0KHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCB1MzIgbWlpX3N0YXR1cykKK3sKKwl1MTYgQk1DUjsKKworCXN3aXRjaCAoUEhZSURfR0VUX1BIWV9JRCh2cHRyLT5waHlfaWQpKSB7CisJY2FzZSBQSFlJRF9DSUNBREFfQ1M4MjAxOgorCQkvKgorCQkgKglSZXNldCB0byBoYXJkd2FyZSBkZWZhdWx0CisJCSAqLworCQlNSUlfUkVHX0JJVFNfT0ZGKChBTkFSX0FTTURJUiB8IEFOQVJfUEFVU0UpLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKKwkJLyoKKwkJICoJVHVybiBvbiBFQ0hPRElTIGJpdCBpbiBOV2F5LWZvcmNlZCBmdWxsIG1vZGUgYW5kIHR1cm4gaXQKKwkJICoJb2ZmIGl0IGluIE5XYXktZm9yY2VkIGhhbGYgbW9kZSBmb3IgTldheS1mb3JjZWQgdi5zLgorCQkgKglsZWdhY3ktZm9yY2VkIGlzc3VlLgorCQkgKi8KKwkJaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkKKwkJCU1JSV9SRUdfQklUU19PTihUQ1NSX0VDSE9ESVMsIE1JSV9SRUdfVENTUiwgdnB0ci0+bWFjX3JlZ3MpOworCQllbHNlCisJCQlNSUlfUkVHX0JJVFNfT0ZGKFRDU1JfRUNIT0RJUywgTUlJX1JFR19UQ1NSLCB2cHRyLT5tYWNfcmVncyk7CisJCS8qCisJCSAqCVR1cm4gb24gTGluay9BY3Rpdml0eSBMRUQgZW5hYmxlIGJpdCBmb3IgQ0lTODIwMQorCQkgKi8KKwkJTUlJX1JFR19CSVRTX09OKFBMRURfTEFMQkUsIE1JSV9SRUdfUExFRCwgdnB0ci0+bWFjX3JlZ3MpOworCQlicmVhazsKKwljYXNlIFBIWUlEX1ZUMzIxNl8zMkJJVDoKKwljYXNlIFBIWUlEX1ZUMzIxNl82NEJJVDoKKwkJLyoKKwkJICoJUmVzZXQgdG8gaGFyZHdhcmUgZGVmYXVsdAorCQkgKi8KKwkJTUlJX1JFR19CSVRTX09OKChBTkFSX0FTTURJUiB8IEFOQVJfUEFVU0UpLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKKwkJLyoKKwkJICoJVHVybiBvbiBFQ0hPRElTIGJpdCBpbiBOV2F5LWZvcmNlZCBmdWxsIG1vZGUgYW5kIHR1cm4gaXQKKwkJICoJb2ZmIGl0IGluIE5XYXktZm9yY2VkIGhhbGYgbW9kZSBmb3IgTldheS1mb3JjZWQgdi5zLgorCQkgKglsZWdhY3ktZm9yY2VkIGlzc3VlCisJCSAqLworCQlpZiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX0RVUExFWF9GVUxMKQorCQkJTUlJX1JFR19CSVRTX09OKFRDU1JfRUNIT0RJUywgTUlJX1JFR19UQ1NSLCB2cHRyLT5tYWNfcmVncyk7CisJCWVsc2UKKwkJCU1JSV9SRUdfQklUU19PRkYoVENTUl9FQ0hPRElTLCBNSUlfUkVHX1RDU1IsIHZwdHItPm1hY19yZWdzKTsKKwkJYnJlYWs7CisKKwljYXNlIFBIWUlEX01BUlZFTExfMTAwMDoKKwljYXNlIFBIWUlEX01BUlZFTExfMTAwMFM6CisJCS8qCisJCSAqCUFzc2VydCBDUlMgb24gVHJhbnNtaXQKKwkJICovCisJCU1JSV9SRUdfQklUU19PTihQU0NSX0FDUlNUWCwgTUlJX1JFR19QU0NSLCB2cHRyLT5tYWNfcmVncyk7CisJCS8qCisJCSAqCVJlc2V0IHRvIGhhcmR3YXJlIGRlZmF1bHQKKwkJICovCisJCU1JSV9SRUdfQklUU19PTigoQU5BUl9BU01ESVIgfCBBTkFSX1BBVVNFKSwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisJdmVsb2NpdHlfbWlpX3JlYWQodnB0ci0+bWFjX3JlZ3MsIE1JSV9SRUdfQk1DUiwgJkJNQ1IpOworCWlmIChCTUNSICYgQk1DUl9JU08pIHsKKwkJQk1DUiAmPSB+Qk1DUl9JU087CisJCXZlbG9jaXR5X21paV93cml0ZSh2cHRyLT5tYWNfcmVncywgTUlJX1JFR19CTUNSLCBCTUNSKTsKKwl9Cit9CisKKworLyoqCiAgKgl2ZWxvY2l0eV9pbml0X3JlZ2lzdGVycwktCWluaXRpYWxpc2UgTUFDIHJlZ2lzdGVycwogICoJQHZwdHI6IHZlbG9jaXR5IHRvIGluaXQKICAqCUB0eXBlOiB0eXBlIG9mIGluaXRpYWxpc2F0aW9uIChob3Qgb3IgY29sZCkKQEAgLTcwMywxMSArMTI2OCwxMCBAQAogICoJSW5pdGlhbGlzZSB0aGUgTUFDIG9uIGEgcmVzZXQgb3Igb24gZmlyc3Qgc2V0IHVwIG9uIHRoZQogICoJaGFyZHdhcmUuCiAgKi8KLQogc3RhdGljIHZvaWQgdmVsb2NpdHlfaW5pdF9yZWdpc3RlcnMoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsCiAJCQkJICAgIGVudW0gdmVsb2NpdHlfaW5pdF90eXBlIHR5cGUpCiB7Ci0Jc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzID0gdnB0ci0+bWFjX3JlZ3M7CisJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKIAlpbnQgaSwgbWlpX3N0YXR1czsKIAogCW1hY193b2xfcmVzZXQocmVncyk7CkBAIC03NTAsOSArMTMxNCw5IEBACiAJCW1kZWxheSg1KTsKIAogCQltYWNfZWVwcm9tX3JlbG9hZChyZWdzKTsKLQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQkJd3JpdGViKHZwdHItPmRldi0+ZGV2X2FkZHJbaV0sICYocmVncy0+UEFSW2ldKSk7Ci0JCX0KKwogCQkvKgogCQkgKgljbGVhciBQcmVfQUNQSSBiaXQuCiAJCSAqLwpAQCAtODE5LDM2ICsxMzgzLDExNjYgQEAKIAl9CiB9CiAKLS8qKgotICoJdmVsb2NpdHlfc29mdF9yZXNldAktCXNvZnQgcmVzZXQKLSAqCUB2cHRyOiB2ZWxvY2l0eSB0byByZXNldAotICoKLSAqCUtpY2sgb2ZmIGEgc29mdCByZXNldCBvZiB0aGUgdmVsb2NpdHkgYWRhcHRlciBhbmQgdGhlbiBwb2xsCi0gKgl1bnRpbCB0aGUgcmVzZXQgc2VxdWVuY2UgaGFzIGNvbXBsZXRlZCBiZWZvcmUgcmV0dXJuaW5nLgotICovCi0KLXN0YXRpYyBpbnQgdmVsb2NpdHlfc29mdF9yZXNldChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3N0YXRpYyB2b2lkIHZlbG9jaXR5X2dpdmVfbWFueV9yeF9kZXNjcyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKIHsKLQlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKLQlpbnQgaSA9IDA7CisJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKwlpbnQgYXZhaWwsIGRpcnR5LCB1bnVzYWJsZTsKIAotCXdyaXRlbChDUjBfU0ZSU1QsICZyZWdzLT5DUjBTZXQpOworCS8qCisJICogUkQgbnVtYmVyIG11c3QgYmUgZXF1YWwgdG8gNFggcGVyIGhhcmR3YXJlIHNwZWMKKwkgKiAocHJvZ3JhbW1pbmcgZ3VpZGUgcmV2IDEuMjAsIHAuMTMpCisJICovCisJaWYgKHZwdHItPnJ4LmZpbGxlZCA8IDQpCisJCXJldHVybjsKIAotCWZvciAoaSA9IDA7IGkgPCBXX01BWF9USU1FT1VUOyBpKyspIHsKLQkJdWRlbGF5KDUpOwotCQlpZiAoIURXT1JEX1JFR19CSVRTX0lTX09OKENSMF9TRlJTVCwgJnJlZ3MtPkNSMFNldCkpCi0JCQlicmVhazsKKwl3bWIoKTsKKworCXVudXNhYmxlID0gdnB0ci0+cnguZmlsbGVkICYgMHgwMDAzOworCWRpcnR5ID0gdnB0ci0+cnguZGlydHkgLSB1bnVzYWJsZTsKKwlmb3IgKGF2YWlsID0gdnB0ci0+cnguZmlsbGVkICYgMHhmZmZjOyBhdmFpbDsgYXZhaWwtLSkgeworCQlkaXJ0eSA9IChkaXJ0eSA+IDApID8gZGlydHkgLSAxIDogdnB0ci0+b3B0aW9ucy5udW1yeCAtIDE7CisJCXZwdHItPnJ4LnJpbmdbZGlydHldLnJkZXNjMC5sZW4gfD0gT1dORURfQllfTklDOwogCX0KIAotCWlmIChpID09IFdfTUFYX1RJTUVPVVQpIHsKLQkJd3JpdGVsKENSMF9GT1JTUlNULCAmcmVncy0+Q1IwU2V0KTsKLQkJLyogRklYTUU6IFBDSSBQT1NUSU5HICovCi0JCS8qIGRlbGF5IDJtcyAqLwotCQltZGVsYXkoMik7CisJd3JpdGV3KHZwdHItPnJ4LmZpbGxlZCAmIDB4ZmZmYywgJnJlZ3MtPlJCUkRVKTsKKwl2cHRyLT5yeC5maWxsZWQgPSB1bnVzYWJsZTsKK30KKworLyoqCisgKgl2ZWxvY2l0eV9pbml0X2RtYV9yaW5ncwktCXNldCB1cCBETUEgcmluZ3MKKyAqCUB2cHRyOiBWZWxvY2l0eSB0byBzZXQgdXAKKyAqCisgKglBbGxvY2F0ZSBQQ0kgbWFwcGVkIERNQSByaW5ncyBmb3IgdGhlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGxheWVyCisgKgl0byB1c2UuCisgKi8KK3N0YXRpYyBpbnQgdmVsb2NpdHlfaW5pdF9kbWFfcmluZ3Moc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCit7CisJc3RydWN0IHZlbG9jaXR5X29wdCAqb3B0ID0gJnZwdHItPm9wdGlvbnM7CisJY29uc3QgdW5zaWduZWQgaW50IHJ4X3Jpbmdfc2l6ZSA9IG9wdC0+bnVtcnggKiBzaXplb2Yoc3RydWN0IHJ4X2Rlc2MpOworCWNvbnN0IHVuc2lnbmVkIGludCB0eF9yaW5nX3NpemUgPSBvcHQtPm51bXR4ICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZwdHItPnBkZXY7CisJZG1hX2FkZHJfdCBwb29sX2RtYTsKKwl2b2lkICpwb29sOworCXVuc2lnbmVkIGludCBpOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhbGwgUkQvVEQgcmluZ3MgYSBzaW5nbGUgcG9vbC4KKwkgKgorCSAqIHBjaV9hbGxvY19jb25zaXN0ZW50KCkgZnVsZmlsbHMgdGhlIHJlcXVpcmVtZW50IGZvciA2NCBieXRlcworCSAqIGFsaWdubWVudAorCSAqLworCXBvb2wgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCB0eF9yaW5nX3NpemUgKiB2cHRyLT50eC5udW1xICsKKwkJCQkgICAgcnhfcmluZ19zaXplLCAmcG9vbF9kbWEpOworCWlmICghcG9vbCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlcyA6IERNQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLAorCQkJdnB0ci0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdnB0ci0+cngucmluZyA9IHBvb2w7CisJdnB0ci0+cngucG9vbF9kbWEgPSBwb29sX2RtYTsKKworCXBvb2wgKz0gcnhfcmluZ19zaXplOworCXBvb2xfZG1hICs9IHJ4X3Jpbmdfc2l6ZTsKKworCWZvciAoaSA9IDA7IGkgPCB2cHRyLT50eC5udW1xOyBpKyspIHsKKwkJdnB0ci0+dHgucmluZ3NbaV0gPSBwb29sOworCQl2cHRyLT50eC5wb29sX2RtYVtpXSA9IHBvb2xfZG1hOworCQlwb29sICs9IHR4X3Jpbmdfc2l6ZTsKKwkJcG9vbF9kbWEgKz0gdHhfcmluZ19zaXplOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2ZWxvY2l0eV9zZXRfcnhidWZzaXplKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBpbnQgbXR1KQoreworCXZwdHItPnJ4LmJ1Zl9zeiA9IChtdHUgPD0gRVRIX0RBVEFfTEVOKSA/IFBLVF9CVUZfU1ogOiBtdHUgKyAzMjsKK30KKworLyoqCisgKgl2ZWxvY2l0eV9hbGxvY19yeF9idWYJLQlhbGxvY2F0ZSBhbGlnbmVkIHJlY2VpdmUgYnVmZmVyCisgKglAdnB0cjogdmVsb2NpdHkKKyAqCUBpZHg6IHJpbmcgaW5kZXgKKyAqCisgKglBbGxvY2F0ZSBhIG5ldyBmdWxsIHNpemVkIGJ1ZmZlciBmb3IgdGhlIHJlY2VwdGlvbiBvZiBhIGZyYW1lIGFuZAorICoJbWFwIGl0IGludG8gUENJIHNwYWNlIGZvciB0aGUgaGFyZHdhcmUgdG8gdXNlLiBUaGUgaGFyZHdhcmUKKyAqCXJlcXVpcmVzICo2NCogYnl0ZSBhbGlnbm1lbnQgb2YgdGhlIGJ1ZmZlciB3aGljaCBtYWtlcyBsaWZlCisgKglsZXNzIGZ1biB0aGFuIHdvdWxkIGJlIGlkZWFsLgorICovCitzdGF0aWMgaW50IHZlbG9jaXR5X2FsbG9jX3J4X2J1ZihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgcnhfZGVzYyAqcmQgPSAmKHZwdHItPnJ4LnJpbmdbaWR4XSk7CisJc3RydWN0IHZlbG9jaXR5X3JkX2luZm8gKnJkX2luZm8gPSAmKHZwdHItPnJ4LmluZm9baWR4XSk7CisKKwlyZF9pbmZvLT5za2IgPSBkZXZfYWxsb2Nfc2tiKHZwdHItPnJ4LmJ1Zl9zeiArIDY0KTsKKwlpZiAocmRfaW5mby0+c2tiID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKglEbyB0aGUgZ3ltbmFzdGljcyB0byBnZXQgdGhlIGJ1ZmZlciBoZWFkIGZvciBkYXRhIGF0CisJICoJNjRieXRlIGFsaWdubWVudC4KKwkgKi8KKwlza2JfcmVzZXJ2ZShyZF9pbmZvLT5za2IsICh1bnNpZ25lZCBsb25nKSByZF9pbmZvLT5za2ItPmRhdGEgJiA2Myk7CisJcmRfaW5mby0+c2tiX2RtYSA9IHBjaV9tYXBfc2luZ2xlKHZwdHItPnBkZXYsIHJkX2luZm8tPnNrYi0+ZGF0YSwKKwkJCQkJdnB0ci0+cnguYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJLyoKKwkgKglGaWxsIGluIHRoZSBkZXNjcmlwdG9yIHRvIG1hdGNoCisJICovCisKKwkqKCh1MzIgKikgJiAocmQtPnJkZXNjMCkpID0gMDsKKwlyZC0+c2l6ZSA9IGNwdV90b19sZTE2KHZwdHItPnJ4LmJ1Zl9zeikgfCBSWF9JTlRFTjsKKwlyZC0+cGFfbG93ID0gY3B1X3RvX2xlMzIocmRfaW5mby0+c2tiX2RtYSk7CisJcmQtPnBhX2hpZ2ggPSAwOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdmVsb2NpdHlfcnhfcmVmaWxsKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQoreworCWludCBkaXJ0eSA9IHZwdHItPnJ4LmRpcnR5LCBkb25lID0gMDsKKworCWRvIHsKKwkJc3RydWN0IHJ4X2Rlc2MgKnJkID0gdnB0ci0+cngucmluZyArIGRpcnR5OworCisJCS8qIEZpbmUgZm9yIGFuIGFsbCB6ZXJvIFJ4IGRlc2MgYXQgaW5pdCB0aW1lIGFzIHdlbGwgKi8KKwkJaWYgKHJkLT5yZGVzYzAubGVuICYgT1dORURfQllfTklDKQorCQkJYnJlYWs7CisKKwkJaWYgKCF2cHRyLT5yeC5pbmZvW2RpcnR5XS5za2IpIHsKKwkJCWlmICh2ZWxvY2l0eV9hbGxvY19yeF9idWYodnB0ciwgZGlydHkpIDwgMCkKKwkJCQlicmVhazsKKwkJfQorCQlkb25lKys7CisJCWRpcnR5ID0gKGRpcnR5IDwgdnB0ci0+b3B0aW9ucy5udW1yeCAtIDEpID8gZGlydHkgKyAxIDogMDsKKwl9IHdoaWxlIChkaXJ0eSAhPSB2cHRyLT5yeC5jdXJyKTsKKworCWlmIChkb25lKSB7CisJCXZwdHItPnJ4LmRpcnR5ID0gZGlydHk7CisJCXZwdHItPnJ4LmZpbGxlZCArPSBkb25lOworCX0KKworCXJldHVybiBkb25lOworfQorCisvKioKKyAqCXZlbG9jaXR5X2ZyZWVfcmRfcmluZwktCWZyZWUgcmVjZWl2ZSByaW5nCisgKglAdnB0cjogdmVsb2NpdHkgdG8gY2xlYW4gdXAKKyAqCisgKglGcmVlIHRoZSByZWNlaXZlIGJ1ZmZlcnMgZm9yIGVhY2ggcmluZyBzbG90IGFuZCBhbnkKKyAqCWF0dGFjaGVkIHNvY2tldCBidWZmZXJzIHRoYXQgbmVlZCB0byBnbyBhd2F5LgorICovCitzdGF0aWMgdm9pZCB2ZWxvY2l0eV9mcmVlX3JkX3Jpbmcoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCit7CisJaW50IGk7CisKKwlpZiAodnB0ci0+cnguaW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgdnB0ci0+b3B0aW9ucy5udW1yeDsgaSsrKSB7CisJCXN0cnVjdCB2ZWxvY2l0eV9yZF9pbmZvICpyZF9pbmZvID0gJih2cHRyLT5yeC5pbmZvW2ldKTsKKwkJc3RydWN0IHJ4X2Rlc2MgKnJkID0gdnB0ci0+cngucmluZyArIGk7CisKKwkJbWVtc2V0KHJkLCAwLCBzaXplb2YoKnJkKSk7CisKKwkJaWYgKCFyZF9pbmZvLT5za2IpCisJCQljb250aW51ZTsKKwkJcGNpX3VubWFwX3NpbmdsZSh2cHRyLT5wZGV2LCByZF9pbmZvLT5za2JfZG1hLCB2cHRyLT5yeC5idWZfc3osCisJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXJkX2luZm8tPnNrYl9kbWEgPSAwOworCisJCWRldl9rZnJlZV9za2IocmRfaW5mby0+c2tiKTsKKwkJcmRfaW5mby0+c2tiID0gTlVMTDsKKwl9CisKKwlrZnJlZSh2cHRyLT5yeC5pbmZvKTsKKwl2cHRyLT5yeC5pbmZvID0gTlVMTDsKK30KKworCisKKy8qKgorICoJdmVsb2NpdHlfaW5pdF9yZF9yaW5nCS0Jc2V0IHVwIHJlY2VpdmUgcmluZworICoJQHZwdHI6IHZlbG9jaXR5IHRvIGNvbmZpZ3VyZQorICoKKyAqCUFsbG9jYXRlIGFuZCBzZXQgdXAgdGhlIHJlY2VpdmUgYnVmZmVycyBmb3IgZWFjaCByaW5nIHNsb3QgYW5kCisgKglhc3NpZ24gdGhlbSB0byB0aGUgbmV0d29yayBhZGFwdGVyLgorICovCitzdGF0aWMgaW50IHZlbG9jaXR5X2luaXRfcmRfcmluZyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3sKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCXZwdHItPnJ4LmluZm8gPSBrY2FsbG9jKHZwdHItPm9wdGlvbnMubnVtcngsCisJCQkJc2l6ZW9mKHN0cnVjdCB2ZWxvY2l0eV9yZF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2cHRyLT5yeC5pbmZvKQorCQlnb3RvIG91dDsKKworCXZlbG9jaXR5X2luaXRfcnhfcmluZ19pbmRleGVzKHZwdHIpOworCisJaWYgKHZlbG9jaXR5X3J4X3JlZmlsbCh2cHRyKSAhPSB2cHRyLT5vcHRpb25zLm51bXJ4KSB7CisJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfRVJSLCBLRVJOX0VSUgorCQkJIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgUlggYnVmZmVyLlxuIiwgdnB0ci0+ZGV2LT5uYW1lKTsKKwkJdmVsb2NpdHlfZnJlZV9yZF9yaW5nKHZwdHIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfaW5pdF90ZF9yaW5nCS0Jc2V0IHVwIHRyYW5zbWl0IHJpbmcKKyAqCUB2cHRyOgl2ZWxvY2l0eQorICoKKyAqCVNldCB1cCB0aGUgdHJhbnNtaXQgcmluZyBhbmQgY2hhaW4gdGhlIHJpbmcgcG9pbnRlcnMgdG9nZXRoZXIuCisgKglSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIHBvc2l4IGVycm5vIGNvZGUgZm9yCisgKglmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHZlbG9jaXR5X2luaXRfdGRfcmluZyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3sKKwlkbWFfYWRkcl90IGN1cnI7CisJaW50IGo7CisKKwkvKiBJbml0IHRoZSBURCByaW5nIGVudHJpZXMgKi8KKwlmb3IgKGogPSAwOyBqIDwgdnB0ci0+dHgubnVtcTsgaisrKSB7CisJCWN1cnIgPSB2cHRyLT50eC5wb29sX2RtYVtqXTsKKworCQl2cHRyLT50eC5pbmZvc1tqXSA9IGtjYWxsb2ModnB0ci0+b3B0aW9ucy5udW10eCwKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgdmVsb2NpdHlfdGRfaW5mbyksCisJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCF2cHRyLT50eC5pbmZvc1tqXSkJeworCQkJd2hpbGUgKC0taiA+PSAwKQorCQkJCWtmcmVlKHZwdHItPnR4LmluZm9zW2pdKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJdnB0ci0+dHgudGFpbFtqXSA9IHZwdHItPnR4LmN1cnJbal0gPSB2cHRyLT50eC51c2VkW2pdID0gMDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICoJdmVsb2NpdHlfZnJlZV9kbWFfcmluZ3MJLQlmcmVlIFBDSSByaW5nIHBvaW50ZXJzCisgKglAdnB0cjogVmVsb2NpdHkgdG8gZnJlZSBmcm9tCisgKgorICoJQ2xlYW4gdXAgdGhlIFBDSSByaW5nIGJ1ZmZlcnMgYWxsb2NhdGVkIHRvIHRoaXMgdmVsb2NpdHkuCisgKi8KK3N0YXRpYyB2b2lkIHZlbG9jaXR5X2ZyZWVfZG1hX3JpbmdzKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQoreworCWNvbnN0IGludCBzaXplID0gdnB0ci0+b3B0aW9ucy5udW1yeCAqIHNpemVvZihzdHJ1Y3QgcnhfZGVzYykgKworCQl2cHRyLT5vcHRpb25zLm51bXR4ICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKSAqIHZwdHItPnR4Lm51bXE7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHZwdHItPnBkZXYsIHNpemUsIHZwdHItPnJ4LnJpbmcsIHZwdHItPnJ4LnBvb2xfZG1hKTsKK30KKworCitzdGF0aWMgaW50IHZlbG9jaXR5X2luaXRfcmluZ3Moc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIGludCBtdHUpCit7CisJaW50IHJldDsKKworCXZlbG9jaXR5X3NldF9yeGJ1ZnNpemUodnB0ciwgbXR1KTsKKworCXJldCA9IHZlbG9jaXR5X2luaXRfZG1hX3JpbmdzKHZwdHIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHZlbG9jaXR5X2luaXRfcmRfcmluZyh2cHRyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZnJlZV9kbWFfcmluZ3NfMDsKKworCXJldCA9IHZlbG9jaXR5X2luaXRfdGRfcmluZyh2cHRyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZnJlZV9yZF9yaW5nXzE7CitvdXQ6CisJcmV0dXJuIHJldDsKKworZXJyX2ZyZWVfcmRfcmluZ18xOgorCXZlbG9jaXR5X2ZyZWVfcmRfcmluZyh2cHRyKTsKK2Vycl9mcmVlX2RtYV9yaW5nc18wOgorCXZlbG9jaXR5X2ZyZWVfZG1hX3JpbmdzKHZwdHIpOworCWdvdG8gb3V0OworfQorCisvKioKKyAqCXZlbG9jaXR5X2ZyZWVfdHhfYnVmCS0JZnJlZSB0cmFuc21pdCBidWZmZXIKKyAqCUB2cHRyOiB2ZWxvY2l0eQorICoJQHRkaW5mbzogYnVmZmVyCisgKgorICoJUmVsZWFzZSBhbiB0cmFuc21pdCBidWZmZXIuIElmIHRoZSBidWZmZXIgd2FzIHByZWFsbG9jYXRlZCB0aGVuCisgKglyZWN5Y2xlIGl0LCBpZiBub3QgdGhlbiB1bm1hcCB0aGUgYnVmZmVyLgorICovCitzdGF0aWMgdm9pZCB2ZWxvY2l0eV9mcmVlX3R4X2J1ZihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgc3RydWN0IHZlbG9jaXR5X3RkX2luZm8gKnRkaW5mbykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGRpbmZvLT5za2I7CisJaW50IGk7CisJaW50IHBrdGxlbjsKKworCS8qCisJICoJRG9uJ3QgdW5tYXAgdGhlIHByZS1hbGxvY2F0ZWQgdHhfYnVmcworCSAqLworCWlmICh0ZGluZm8tPnNrYl9kbWEpIHsKKworCQlwa3RsZW4gPSBtYXhfdCh1bnNpZ25lZCBpbnQsIHNrYi0+bGVuLCBFVEhfWkxFTik7CisJCWZvciAoaSA9IDA7IGkgPCB0ZGluZm8tPm5za2JfZG1hOyBpKyspIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUodnB0ci0+cGRldiwgdGRpbmZvLT5za2JfZG1hW2ldLCBwa3RsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJdGRpbmZvLT5za2JfZG1hW2ldID0gMDsKKwkJfQorCX0KKwlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCXRkaW5mby0+c2tiID0gTlVMTDsKK30KKworCisvKgorICoJRklYTUU6IGNvdWxkIHdlIG1lcmdlIHRoaXMgd2l0aCB2ZWxvY2l0eV9mcmVlX3R4X2J1ZiA/CisgKi8KK3N0YXRpYyB2b2lkIHZlbG9jaXR5X2ZyZWVfdGRfcmluZ19lbnRyeShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwKKwkJCQkJCQkgaW50IHEsIGludCBuKQoreworCXN0cnVjdCB2ZWxvY2l0eV90ZF9pbmZvICp0ZF9pbmZvID0gJih2cHRyLT50eC5pbmZvc1txXVtuXSk7CisJaW50IGk7CisKKwlpZiAodGRfaW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAodGRfaW5mby0+c2tiKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0ZF9pbmZvLT5uc2tiX2RtYTsgaSsrKSB7CisJCQlpZiAodGRfaW5mby0+c2tiX2RtYVtpXSkgeworCQkJCXBjaV91bm1hcF9zaW5nbGUodnB0ci0+cGRldiwgdGRfaW5mby0+c2tiX2RtYVtpXSwKKwkJCQkJdGRfaW5mby0+c2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCXRkX2luZm8tPnNrYl9kbWFbaV0gPSAwOworCQkJfQorCQl9CisJCWRldl9rZnJlZV9za2IodGRfaW5mby0+c2tiKTsKKwkJdGRfaW5mby0+c2tiID0gTlVMTDsKKwl9Cit9CisKKy8qKgorICoJdmVsb2NpdHlfZnJlZV90ZF9yaW5nCS0JZnJlZSB0ZCByaW5nCisgKglAdnB0cjogdmVsb2NpdHkKKyAqCisgKglGcmVlIHVwIHRoZSB0cmFuc21pdCByaW5nIGZvciB0aGlzIHBhcnRpY3VsYXIgdmVsb2NpdHkgYWRhcHRlci4KKyAqCVdlIGZyZWUgdGhlIHJpbmcgY29udGVudHMgYnV0IG5vdCB0aGUgcmluZyBpdHNlbGYuCisgKi8KK3N0YXRpYyB2b2lkIHZlbG9jaXR5X2ZyZWVfdGRfcmluZyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaiA9IDA7IGogPCB2cHRyLT50eC5udW1xOyBqKyspIHsKKwkJaWYgKHZwdHItPnR4LmluZm9zW2pdID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJZm9yIChpID0gMDsgaSA8IHZwdHItPm9wdGlvbnMubnVtdHg7IGkrKykKKwkJCXZlbG9jaXR5X2ZyZWVfdGRfcmluZ19lbnRyeSh2cHRyLCBqLCBpKTsKKworCQlrZnJlZSh2cHRyLT50eC5pbmZvc1tqXSk7CisJCXZwdHItPnR4LmluZm9zW2pdID0gTlVMTDsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgdmVsb2NpdHlfZnJlZV9yaW5ncyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3sKKwl2ZWxvY2l0eV9mcmVlX3RkX3JpbmcodnB0cik7CisJdmVsb2NpdHlfZnJlZV9yZF9yaW5nKHZwdHIpOworCXZlbG9jaXR5X2ZyZWVfZG1hX3JpbmdzKHZwdHIpOworfQorCisvKioKKyAqCXZlbG9jaXR5X2Vycm9yCS0JaGFuZGxlIGVycm9yIGZyb20gY29udHJvbGxlcgorICoJQHZwdHI6IHZlbG9jaXR5CisgKglAc3RhdHVzOiBjYXJkIHN0YXR1cworICoKKyAqCVByb2Nlc3MgYW4gZXJyb3IgcmVwb3J0IGZyb20gdGhlIGhhcmR3YXJlIGFuZCBhdHRlbXB0IHRvIHJlY292ZXIKKyAqCXRoZSBjYXJkIGl0c2VsZi4gQXQgdGhlIG1vbWVudCB3ZSBjYW5ub3QgcmVjb3ZlciBmcm9tIHNvbWUKKyAqCXRoZW9yZXRpY2FsbHkgaW1wb3NzaWJsZSBlcnJvcnMgYnV0IHRoaXMgY291bGQgYmUgZml4ZWQgdXNpbmcKKyAqCXRoZSBwY2lfZGV2aWNlX2ZhaWxlZCBsb2dpYyB0byBib3VuY2UgdGhlIGhhcmR3YXJlCisgKgorICovCitzdGF0aWMgdm9pZCB2ZWxvY2l0eV9lcnJvcihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgaW50IHN0YXR1cykKK3sKKworCWlmIChzdGF0dXMgJiBJU1JfVFhTVExJKSB7CisJCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzID0gdnB0ci0+bWFjX3JlZ3M7CisKKwkJcHJpbnRrKEtFUk5fRVJSICJURCBzdHJ1Y3R1cmUgZXJyb3IgVERpbmRleD0laHhcbiIsIHJlYWR3KCZyZWdzLT5URElkeFswXSkpOworCQlCWVRFX1JFR19CSVRTX09OKFRYRVNSX1REU1RSLCAmcmVncy0+VFhFU1IpOworCQl3cml0ZXcoVFJEQ1NSX1JVTiwgJnJlZ3MtPlREQ1NSQ2xyKTsKKwkJbmV0aWZfc3RvcF9xdWV1ZSh2cHRyLT5kZXYpOworCisJCS8qIEZJWE1FOiBwb3J0IG92ZXIgdGhlIHBjaV9kZXZpY2VfZmFpbGVkIGNvZGUgYW5kIHVzZSBpdAorCQkgICBoZXJlICovCisJfQorCisJaWYgKHN0YXR1cyAmIElTUl9TUkNJKSB7CisJCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzID0gdnB0ci0+bWFjX3JlZ3M7CisJCWludCBsaW5rZWQ7CisKKwkJaWYgKHZwdHItPm9wdGlvbnMuc3BkX2RweCA9PSBTUERfRFBYX0FVVE8pIHsKKwkJCXZwdHItPm1paV9zdGF0dXMgPSBjaGVja19jb25uZWN0aW9uX3R5cGUocmVncyk7CisKKwkJCS8qCisJCQkgKglJZiBpdCBpcyBhIDMxMTksIGRpc2FibGUgZnJhbWUgYnVyc3RpbmcgaW4KKwkJCSAqCWhhbGZkdXBsZXggbW9kZSBhbmQgZW5hYmxlIGl0IGluIGZ1bGxkdXBsZXgKKwkJCSAqCSBtb2RlCisJCQkgKi8KKwkJCWlmICh2cHRyLT5yZXZfaWQgPCBSRVZfSURfVlQzMjE2X0EwKSB7CisJCQkJaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkKKwkJCQkJQllURV9SRUdfQklUU19PTihUQ1JfVEIyQkRJUywgJnJlZ3MtPlRDUik7CisJCQkJZWxzZQorCQkJCQlCWVRFX1JFR19CSVRTX09GRihUQ1JfVEIyQkRJUywgJnJlZ3MtPlRDUik7CisJCQl9CisJCQkvKgorCQkJICoJT25seSBlbmFibGUgQ0QgaGVhcnQgYmVhdCBjb3VudGVyIGluIDEwSEQgbW9kZQorCQkJICovCisJCQlpZiAoISh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpICYmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfU1BFRURfMTApKQorCQkJCUJZVEVfUkVHX0JJVFNfT0ZGKFRFU1RDRkdfSEJESVMsICZyZWdzLT5URVNUQ0ZHKTsKKwkJCWVsc2UKKwkJCQlCWVRFX1JFR19CSVRTX09OKFRFU1RDRkdfSEJESVMsICZyZWdzLT5URVNUQ0ZHKTsKKwkJfQorCQkvKgorCQkgKglHZXQgbGluayBzdGF0dXMgZnJvbSBQSFlTUjAKKwkJICovCisJCWxpbmtlZCA9IHJlYWRiKCZyZWdzLT5QSFlTUjApICYgUEhZU1IwX0xJTktHRDsKKworCQlpZiAobGlua2VkKSB7CisJCQl2cHRyLT5taWlfc3RhdHVzICY9IH5WRUxPQ0lUWV9MSU5LX0ZBSUw7CisJCQluZXRpZl9jYXJyaWVyX29uKHZwdHItPmRldik7CisJCX0gZWxzZSB7CisJCQl2cHRyLT5taWlfc3RhdHVzIHw9IFZFTE9DSVRZX0xJTktfRkFJTDsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKHZwdHItPmRldik7CisJCX0KKworCQl2ZWxvY2l0eV9wcmludF9saW5rX3N0YXR1cyh2cHRyKTsKKwkJZW5hYmxlX2Zsb3dfY29udHJvbF9hYmlsaXR5KHZwdHIpOworCisJCS8qCisJCSAqCVJlLWVuYWJsZSBhdXRvLXBvbGxpbmcgYmVjYXVzZSBTUkNJIHdpbGwgZGlzYWJsZQorCQkgKglhdXRvLXBvbGxpbmcKKwkJICovCisKKwkJZW5hYmxlX21paV9hdXRvcG9sbChyZWdzKTsKKworCQlpZiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX0xJTktfRkFJTCkKKwkJCW5ldGlmX3N0b3BfcXVldWUodnB0ci0+ZGV2KTsKKwkJZWxzZQorCQkJbmV0aWZfd2FrZV9xdWV1ZSh2cHRyLT5kZXYpOworCisJfTsKKwlpZiAoc3RhdHVzICYgSVNSX01JQkZJKQorCQl2ZWxvY2l0eV91cGRhdGVfaHdfbWlicyh2cHRyKTsKKwlpZiAoc3RhdHVzICYgSVNSX0xTVEVJKQorCQltYWNfcnhfcXVldWVfd2FrZSh2cHRyLT5tYWNfcmVncyk7Cit9CisKKy8qKgorICoJdHhfc3J2CQktCXRyYW5zbWl0IGludGVycnVwdCBzZXJ2aWNlCisgKglAdnB0cjsgVmVsb2NpdHkKKyAqCUBzdGF0dXM6CisgKgorICoJU2NhbiB0aGUgcXVldWVzIGxvb2tpbmcgZm9yIHRyYW5zbWl0dGVkIHBhY2tldHMgdGhhdAorICoJd2UgY2FuIGNvbXBsZXRlIGFuZCBjbGVhbiB1cC4gVXBkYXRlIGFueSBzdGF0aXN0aWNzIGFzCisgKgluZWNlc3NhcnkvCisgKi8KK3N0YXRpYyBpbnQgdmVsb2NpdHlfdHhfc3J2KHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCB1MzIgc3RhdHVzKQoreworCXN0cnVjdCB0eF9kZXNjICp0ZDsKKwlpbnQgcW51bTsKKwlpbnQgZnVsbCA9IDA7CisJaW50IGlkeDsKKwlpbnQgd29ya3MgPSAwOworCXN0cnVjdCB2ZWxvY2l0eV90ZF9pbmZvICp0ZGluZm87CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnZwdHItPmRldi0+c3RhdHM7CisKKwlmb3IgKHFudW0gPSAwOyBxbnVtIDwgdnB0ci0+dHgubnVtcTsgcW51bSsrKSB7CisJCWZvciAoaWR4ID0gdnB0ci0+dHgudGFpbFtxbnVtXTsgdnB0ci0+dHgudXNlZFtxbnVtXSA+IDA7CisJCQlpZHggPSAoaWR4ICsgMSkgJSB2cHRyLT5vcHRpb25zLm51bXR4KSB7CisKKwkJCS8qCisJCQkgKglHZXQgVHggRGVzY3JpcHRvcgorCQkJICovCisJCQl0ZCA9ICYodnB0ci0+dHgucmluZ3NbcW51bV1baWR4XSk7CisJCQl0ZGluZm8gPSAmKHZwdHItPnR4LmluZm9zW3FudW1dW2lkeF0pOworCisJCQlpZiAodGQtPnRkZXNjMC5sZW4gJiBPV05FRF9CWV9OSUMpCisJCQkJYnJlYWs7CisKKwkJCWlmICgod29ya3MrKyA+IDE1KSkKKwkJCQlicmVhazsKKworCQkJaWYgKHRkLT50ZGVzYzAuVFNSICYgVFNSMF9URVJSKSB7CisJCQkJc3RhdHMtPnR4X2Vycm9ycysrOworCQkJCXN0YXRzLT50eF9kcm9wcGVkKys7CisJCQkJaWYgKHRkLT50ZGVzYzAuVFNSICYgVFNSMF9DREgpCisJCQkJCXN0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzKys7CisJCQkJaWYgKHRkLT50ZGVzYzAuVFNSICYgVFNSMF9DUlMpCisJCQkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJCWlmICh0ZC0+dGRlc2MwLlRTUiAmIFRTUjBfQUJUKQorCQkJCQlzdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCQlpZiAodGQtPnRkZXNjMC5UU1IgJiBUU1IwX09XQykKKwkJCQkJc3RhdHMtPnR4X3dpbmRvd19lcnJvcnMrKzsKKwkJCX0gZWxzZSB7CisJCQkJc3RhdHMtPnR4X3BhY2tldHMrKzsKKwkJCQlzdGF0cy0+dHhfYnl0ZXMgKz0gdGRpbmZvLT5za2ItPmxlbjsKKwkJCX0KKwkJCXZlbG9jaXR5X2ZyZWVfdHhfYnVmKHZwdHIsIHRkaW5mbyk7CisJCQl2cHRyLT50eC51c2VkW3FudW1dLS07CisJCX0KKwkJdnB0ci0+dHgudGFpbFtxbnVtXSA9IGlkeDsKKworCQlpZiAoQVZBSUxfVEQodnB0ciwgcW51bSkgPCAxKQorCQkJZnVsbCA9IDE7CisJfQorCS8qCisJICoJTG9vayB0byBzZWUgaWYgd2Ugc2hvdWxkIGtpY2sgdGhlIHRyYW5zbWl0IG5ldHdvcmsKKwkgKglsYXllciBmb3IgbW9yZSB3b3JrLgorCSAqLworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHZwdHItPmRldikgJiYgKGZ1bGwgPT0gMCkKKwkgICAgJiYgKCEodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX0xJTktfRkFJTCkpKSB7CisJCW5ldGlmX3dha2VfcXVldWUodnB0ci0+ZGV2KTsKKwl9CisJcmV0dXJuIHdvcmtzOworfQorCisvKioKKyAqCXZlbG9jaXR5X3J4X2NzdW0JLQljaGVja3N1bSBwcm9jZXNzCisgKglAcmQ6IHJlY2VpdmUgcGFja2V0IGRlc2NyaXB0b3IKKyAqCUBza2I6IG5ldHdvcmsgbGF5ZXIgcGFja2V0IGJ1ZmZlcgorICoKKyAqCVByb2Nlc3MgdGhlIHN0YXR1cyBiaXRzIGZvciB0aGUgcmVjZWl2ZWQgcGFja2V0IGFuZCBkZXRlcm1pbmUKKyAqCWlmIHRoZSBjaGVja3N1bSB3YXMgY29tcHV0ZWQgYW5kIHZlcmlmaWVkIGJ5IHRoZSBoYXJkd2FyZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdmVsb2NpdHlfcnhfY3N1bShzdHJ1Y3QgcnhfZGVzYyAqcmQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJaWYgKHJkLT5yZGVzYzEuQ1NNICYgQ1NNX0lQS1QpIHsKKwkJaWYgKHJkLT5yZGVzYzEuQ1NNICYgQ1NNX0lQT0spIHsKKwkJCWlmICgocmQtPnJkZXNjMS5DU00gJiBDU01fVENQS1QpIHx8CisJCQkJCShyZC0+cmRlc2MxLkNTTSAmIENTTV9VRFBLVCkpIHsKKwkJCQlpZiAoIShyZC0+cmRlc2MxLkNTTSAmIENTTV9UVVBPSykpCisJCQkJCXJldHVybjsKKwkJCX0KKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCX0KKwl9Cit9CisKKy8qKgorICoJdmVsb2NpdHlfcnhfY29weQktCWluIHBsYWNlIFJ4IGNvcHkgZm9yIHNtYWxsIHBhY2tldHMKKyAqCUByeF9za2I6IG5ldHdvcmsgbGF5ZXIgcGFja2V0IGJ1ZmZlciBjYW5kaWRhdGUKKyAqCUBwa3Rfc2l6ZTogcmVjZWl2ZWQgZGF0YSBzaXplCisgKglAcmQ6IHJlY2VpdmUgcGFja2V0IGRlc2NyaXB0b3IKKyAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKgorICoJUmVwbGFjZSB0aGUgY3VycmVudCBza2IgdGhhdCBpcyBzY2hlZHVsZWQgZm9yIFJ4IHByb2Nlc3NpbmcgYnkgYQorICoJc2hvcnRlciwgaW1tZWRpYXRseSBhbGxvY2F0ZWQgc2tiLCBpZiB0aGUgcmVjZWl2ZWQgcGFja2V0IGlzIHNtYWxsCisgKgllbm91Z2guIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGlmIHRoZSByZWNlaXZlZAorICoJcGFja2V0IGlzIHRvbyBiaWcgb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZC4KKyAqLworc3RhdGljIGludCB2ZWxvY2l0eV9yeF9jb3B5KHN0cnVjdCBza19idWZmICoqcnhfc2tiLCBpbnQgcGt0X3NpemUsCisJCQkgICAgc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCit7CisJaW50IHJldCA9IC0xOworCWlmIChwa3Rfc2l6ZSA8IHJ4X2NvcHlicmVhaykgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKKworCQluZXdfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYih2cHRyLT5kZXYsIHBrdF9zaXplICsgMik7CisJCWlmIChuZXdfc2tiKSB7CisJCQluZXdfc2tiLT5pcF9zdW1tZWQgPSByeF9za2JbMF0tPmlwX3N1bW1lZDsKKwkJCXNrYl9yZXNlcnZlKG5ld19za2IsIDIpOworCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YSgqcnhfc2tiLCBuZXdfc2tiLT5kYXRhLCBwa3Rfc2l6ZSk7CisJCQkqcnhfc2tiID0gbmV3X3NrYjsKKwkJCXJldCA9IDA7CisJCX0KKworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCXZlbG9jaXR5X2lwaF9yZWFsaWduCS0JSVAgaGVhZGVyIGFsaWdubWVudAorICoJQHZwdHI6IHZlbG9jaXR5IHdlIGFyZSBoYW5kbGluZworICoJQHNrYjogbmV0d29yayBsYXllciBwYWNrZXQgYnVmZmVyCisgKglAcGt0X3NpemU6IHJlY2VpdmVkIGRhdGEgc2l6ZQorICoKKyAqCUFsaWduIElQIGhlYWRlciBvbiBhIDIgYnl0ZXMgYm91bmRhcnkuIFRoaXMgYmVoYXZpb3IgY2FuIGJlCisgKgljb25maWd1cmVkIGJ5IHRoZSB1c2VyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdmVsb2NpdHlfaXBoX3JlYWxpZ24oc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IsIGludCBwa3Rfc2l6ZSkKK3sKKwlpZiAodnB0ci0+ZmxhZ3MgJiBWRUxPQ0lUWV9GTEFHU19JUF9BTElHTikgeworCQltZW1tb3ZlKHNrYi0+ZGF0YSArIDIsIHNrYi0+ZGF0YSwgcGt0X3NpemUpOworCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCX0KK30KKworCisvKioKKyAqCXZlbG9jaXR5X3JlY2VpdmVfZnJhbWUJLQlyZWNlaXZlZCBwYWNrZXQgcHJvY2Vzc29yCisgKglAdnB0cjogdmVsb2NpdHkgd2UgYXJlIGhhbmRsaW5nCisgKglAaWR4OiByaW5nIGluZGV4CisgKgorICoJQSBwYWNrZXQgaGFzIGFycml2ZWQuIFdlIHByb2Nlc3MgdGhlIHBhY2tldCBhbmQgaWYgYXBwcm9wcmlhdGUKKyAqCXBhc3MgdGhlIGZyYW1lIHVwIHRoZSBuZXR3b3JrIHN0YWNrCisgKi8KK3N0YXRpYyBpbnQgdmVsb2NpdHlfcmVjZWl2ZV9mcmFtZShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgaW50IGlkeCkKK3sKKwl2b2lkICgqcGNpX2FjdGlvbikoc3RydWN0IHBjaV9kZXYgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ2cHRyLT5kZXYtPnN0YXRzOworCXN0cnVjdCB2ZWxvY2l0eV9yZF9pbmZvICpyZF9pbmZvID0gJih2cHRyLT5yeC5pbmZvW2lkeF0pOworCXN0cnVjdCByeF9kZXNjICpyZCA9ICYodnB0ci0+cngucmluZ1tpZHhdKTsKKwlpbnQgcGt0X2xlbiA9IGxlMTZfdG9fY3B1KHJkLT5yZGVzYzAubGVuKSAmIDB4M2ZmZjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKHJkLT5yZGVzYzAuUlNSICYgKFJTUl9TVFAgfCBSU1JfRURQKSkgeworCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX1ZFUkJPU0UsIEtFUk5fRVJSICIgJXMgOiB0aGUgcmVjZWl2ZWQgZnJhbWUgc3BhbiBtdWx0cGxlIFJEcy5cbiIsIHZwdHItPmRldi0+bmFtZSk7CisJCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChyZC0+cmRlc2MwLlJTUiAmIFJTUl9NQVIpCisJCXN0YXRzLT5tdWx0aWNhc3QrKzsKKworCXNrYiA9IHJkX2luZm8tPnNrYjsKKworCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSh2cHRyLT5wZGV2LCByZF9pbmZvLT5za2JfZG1hLAorCQkJCSAgICB2cHRyLT5yeC5idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkvKgorCSAqCURyb3AgZnJhbWUgbm90IG1lZXRpbmcgSUVFRSA4MDIuMworCSAqLworCisJaWYgKHZwdHItPmZsYWdzICYgVkVMT0NJVFlfRkxBR1NfVkFMX1BLVF9MRU4pIHsKKwkJaWYgKHJkLT5yZGVzYzAuUlNSICYgUlNSX1JMKSB7CisJCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlwY2lfYWN0aW9uID0gcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlOworCisJdmVsb2NpdHlfcnhfY3N1bShyZCwgc2tiKTsKKworCWlmICh2ZWxvY2l0eV9yeF9jb3B5KCZza2IsIHBrdF9sZW4sIHZwdHIpIDwgMCkgeworCQl2ZWxvY2l0eV9pcGhfcmVhbGlnbih2cHRyLCBza2IsIHBrdF9sZW4pOworCQlwY2lfYWN0aW9uID0gcGNpX3VubWFwX3NpbmdsZTsKKwkJcmRfaW5mby0+c2tiID0gTlVMTDsKKwl9CisKKwlwY2lfYWN0aW9uKHZwdHItPnBkZXYsIHJkX2luZm8tPnNrYl9kbWEsIHZwdHItPnJ4LmJ1Zl9zeiwKKwkJICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCXNrYl9wdXQoc2tiLCBwa3RfbGVuIC0gNCk7CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgdnB0ci0+ZGV2KTsKKworCWlmICh2cHRyLT52bGdycCAmJiAocmQtPnJkZXNjMC5SU1IgJiBSU1JfREVUQUcpKSB7CisJCXZsYW5faHdhY2NlbF9yeChza2IsIHZwdHItPnZsZ3JwLAorCQkJCXN3YWIxNihsZTE2X3RvX2NwdShyZC0+cmRlc2MxLlBRVEFHKSkpOworCX0gZWxzZQorCQluZXRpZl9yeChza2IpOworCisJc3RhdHMtPnJ4X2J5dGVzICs9IHBrdF9sZW47CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqCXZlbG9jaXR5X3J4X3NydgkJLQlzZXJ2aWNlIFJYIGludGVycnVwdAorICoJQHZwdHI6IHZlbG9jaXR5CisgKglAc3RhdHVzOiBhZGFwdGVyIHN0YXR1cyAodW51c2VkKQorICoKKyAqCVdhbGsgdGhlIHJlY2VpdmUgcmluZyBvZiB0aGUgdmVsb2NpdHkgYWRhcHRlciBhbmQgcmVtb3ZlCisgKglhbnkgcmVjZWl2ZWQgcGFja2V0cyBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLiBIYW5kIHRoZSByaW5nCisgKglzbG90cyBiYWNrIHRvIHRoZSBhZGFwdGVyIGZvciByZXVzZS4KKyAqLworc3RhdGljIGludCB2ZWxvY2l0eV9yeF9zcnYoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIGludCBzdGF0dXMpCit7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnZwdHItPmRldi0+c3RhdHM7CisJaW50IHJkX2N1cnIgPSB2cHRyLT5yeC5jdXJyOworCWludCB3b3JrcyA9IDA7CisKKwlkbyB7CisJCXN0cnVjdCByeF9kZXNjICpyZCA9IHZwdHItPnJ4LnJpbmcgKyByZF9jdXJyOworCisJCWlmICghdnB0ci0+cnguaW5mb1tyZF9jdXJyXS5za2IpCisJCQlicmVhazsKKworCQlpZiAocmQtPnJkZXNjMC5sZW4gJiBPV05FRF9CWV9OSUMpCisJCQlicmVhazsKKworCQlybWIoKTsKKworCQkvKgorCQkgKglEb24ndCBkcm9wIENFIG9yIFJMIGVycm9yIGZyYW1lIGFsdGhvdWdoIFJYT0sgaXMgb2ZmCisJCSAqLworCQlpZiAocmQtPnJkZXNjMC5SU1IgJiAoUlNSX1JYT0sgfCBSU1JfQ0UgfCBSU1JfUkwpKSB7CisJCQlpZiAodmVsb2NpdHlfcmVjZWl2ZV9mcmFtZSh2cHRyLCByZF9jdXJyKSA8IDApCisJCQkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwkJfSBlbHNlIHsKKwkJCWlmIChyZC0+cmRlc2MwLlJTUiAmIFJTUl9DUkMpCisJCQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKKwkJCWlmIChyZC0+cmRlc2MwLlJTUiAmIFJTUl9GQUUpCisJCQkJc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycysrOworCisJCQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCQl9CisKKwkJcmQtPnNpemUgfD0gUlhfSU5URU47CisKKwkJcmRfY3VycisrOworCQlpZiAocmRfY3VyciA+PSB2cHRyLT5vcHRpb25zLm51bXJ4KQorCQkJcmRfY3VyciA9IDA7CisJfSB3aGlsZSAoKyt3b3JrcyA8PSAxNSk7CisKKwl2cHRyLT5yeC5jdXJyID0gcmRfY3VycjsKKworCWlmICgod29ya3MgPiAwKSAmJiAodmVsb2NpdHlfcnhfcmVmaWxsKHZwdHIpID4gMCkpCisJCXZlbG9jaXR5X2dpdmVfbWFueV9yeF9kZXNjcyh2cHRyKTsKKworCVZBUl9VU0VEKHN0YXRzKTsKKwlyZXR1cm4gd29ya3M7Cit9CisKKworLyoqCisgKgl2ZWxvY2l0eV9pbnRyCQktCWludGVycnVwdCBjYWxsYmFjaworICoJQGlycTogaW50ZXJydXB0IG51bWJlcgorICoJQGRldl9pbnN0YW5jZTogaW50ZXJydXB0aW5nIGRldmljZQorICoKKyAqCUNhbGxlZCB3aGVuZXZlciBhbiBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSB2ZWxvY2l0eQorICoJYWRhcHRlciBJUlEgbGluZS4gV2UgbWF5IG5vdCBiZSB0aGUgc291cmNlIG9mIHRoZSBpbnRlcnJ1cHQKKyAqCWFuZCBuZWVkIHRvIGlkZW50aWZ5IGluaXRpYWxseSBpZiB3ZSBhcmUsIGFuZCBpZiBub3QgZXhpdCBhcworICoJZWZmaWNpZW50bHkgYXMgcG9zc2libGUuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB2ZWxvY2l0eV9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2luc3RhbmNlOworCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgaXNyX3N0YXR1czsKKwlpbnQgbWF4X2NvdW50ID0gMDsKKworCisJc3Bpbl9sb2NrKCZ2cHRyLT5sb2NrKTsKKwlpc3Jfc3RhdHVzID0gbWFjX3JlYWRfaXNyKHZwdHItPm1hY19yZWdzKTsKKworCS8qIE5vdCB1cyA/ICovCisJaWYgKGlzcl9zdGF0dXMgPT0gMCkgeworCQlzcGluX3VubG9jaygmdnB0ci0+bG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwltYWNfZGlzYWJsZV9pbnQodnB0ci0+bWFjX3JlZ3MpOworCisJLyoKKwkgKglLZWVwIHByb2Nlc3NpbmcgdGhlIElTUiB1bnRpbCB3ZSBoYXZlIGNvbXBsZXRlZAorCSAqCXByb2Nlc3NpbmcgYW5kIHRoZSBpc3Jfc3RhdHVzIGJlY29tZXMgemVybworCSAqLworCisJd2hpbGUgKGlzcl9zdGF0dXMgIT0gMCkgeworCQltYWNfd3JpdGVfaXNyKHZwdHItPm1hY19yZWdzLCBpc3Jfc3RhdHVzKTsKKwkJaWYgKGlzcl9zdGF0dXMgJiAofihJU1JfUFJYSSB8IElTUl9QUFJYSSB8IElTUl9QVFhJIHwgSVNSX1BQVFhJKSkpCisJCQl2ZWxvY2l0eV9lcnJvcih2cHRyLCBpc3Jfc3RhdHVzKTsKKwkJaWYgKGlzcl9zdGF0dXMgJiAoSVNSX1BSWEkgfCBJU1JfUFBSWEkpKQorCQkJbWF4X2NvdW50ICs9IHZlbG9jaXR5X3J4X3Nydih2cHRyLCBpc3Jfc3RhdHVzKTsKKwkJaWYgKGlzcl9zdGF0dXMgJiAoSVNSX1BUWEkgfCBJU1JfUFBUWEkpKQorCQkJbWF4X2NvdW50ICs9IHZlbG9jaXR5X3R4X3Nydih2cHRyLCBpc3Jfc3RhdHVzKTsKKwkJaXNyX3N0YXR1cyA9IG1hY19yZWFkX2lzcih2cHRyLT5tYWNfcmVncyk7CisJCWlmIChtYXhfY291bnQgPiB2cHRyLT5vcHRpb25zLmludF93b3JrcykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGV4Y2Vzc2l2ZSB3b3JrIGF0IGludGVycnVwdC5cbiIsCisJCQkJZGV2LT5uYW1lKTsKKwkJCW1heF9jb3VudCA9IDA7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJnZwdHItPmxvY2spOworCW1hY19lbmFibGVfaW50KHZwdHItPm1hY19yZWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKK30KKworLyoqCisgKgl2ZWxvY2l0eV9vcGVuCQktCWludGVyZmFjZSBhY3RpdmF0aW9uIGNhbGxiYWNrCisgKglAZGV2OiBuZXR3b3JrIGxheWVyIGRldmljZSB0byBvcGVuCisgKgorICoJQ2FsbGVkIHdoZW4gdGhlIG5ldHdvcmsgbGF5ZXIgYnJpbmdzIHRoZSBpbnRlcmZhY2UgdXAuIFJldHVybnMKKyAqCWEgbmVnYXRpdmUgcG9zaXggZXJyb3IgY29kZSBvbiBmYWlsdXJlLCBvciB6ZXJvIG9uIHN1Y2Nlc3MuCisgKgorICoJQWxsIHRoZSByaW5nIGFsbG9jYXRpb24gYW5kIHNldCB1cCBpcyBkb25lIG9uIG9wZW4gZm9yIHRoaXMKKyAqCWFkYXB0ZXIgdG8gbWluaW1pc2UgbWVtb3J5IHVzYWdlIHdoZW4gaW5hY3RpdmUKKyAqLworc3RhdGljIGludCB2ZWxvY2l0eV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSB2ZWxvY2l0eV9pbml0X3JpbmdzKHZwdHIsIGRldi0+bXR1KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBFbnN1cmUgY2hpcCBpcyBydW5uaW5nICovCisJcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDApOworCisJdmVsb2NpdHlfZ2l2ZV9tYW55X3J4X2Rlc2NzKHZwdHIpOworCisJdmVsb2NpdHlfaW5pdF9yZWdpc3RlcnModnB0ciwgVkVMT0NJVFlfSU5JVF9DT0xEKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKHZwdHItPnBkZXYtPmlycSwgJnZlbG9jaXR5X2ludHIsIElSUUZfU0hBUkVELAorCQkJICBkZXYtPm5hbWUsIGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJLyogUG93ZXIgZG93biB0aGUgY2hpcCAqLworCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHZwdHItPnBkZXYsIFBDSV9EM2hvdCk7CisJCXZlbG9jaXR5X2ZyZWVfcmluZ3ModnB0cik7CisJCWdvdG8gb3V0OworCX0KKworCW1hY19lbmFibGVfaW50KHZwdHItPm1hY19yZWdzKTsKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCXZwdHItPmZsYWdzIHw9IFZFTE9DSVRZX0ZMQUdTX09QRU5FRDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCXZlbG9jaXR5X3NodXRkb3duCS0Jc2h1dCBkb3duIHRoZSBjaGlwCisgKglAdnB0cjogdmVsb2NpdHkgdG8gZGVhY3RpdmF0ZQorICoKKyAqCVNodXRzIGRvd24gdGhlIGludGVybmFsIG9wZXJhdGlvbnMgb2YgdGhlIHZlbG9jaXR5IGFuZAorICoJZGlzYWJsZXMgaW50ZXJydXB0cywgYXV0b3BvbGxpbmcsIHRyYW5zbWl0IGFuZCByZWNlaXZlCisgKi8KK3N0YXRpYyB2b2lkIHZlbG9jaXR5X3NodXRkb3duKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQoreworCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzID0gdnB0ci0+bWFjX3JlZ3M7CisJbWFjX2Rpc2FibGVfaW50KHJlZ3MpOworCXdyaXRlbChDUjBfU1RPUCwgJnJlZ3MtPkNSMFNldCk7CisJd3JpdGV3KDB4RkZGRiwgJnJlZ3MtPlREQ1NSQ2xyKTsKKwl3cml0ZWIoMHhGRiwgJnJlZ3MtPlJEQ1NSQ2xyKTsKKwlzYWZlX2Rpc2FibGVfbWlpX2F1dG9wb2xsKHJlZ3MpOworCW1hY19jbGVhcl9pc3IocmVncyk7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfY2hhbmdlX210dQktCU1UVSBjaGFuZ2UgY2FsbGJhY2sKKyAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKglAbmV3X210dTogZGVzaXJlZCBNVFUKKyAqCisgKglIYW5kbGUgcmVxdWVzdHMgZnJvbSB0aGUgbmV0d29ya2luZyBsYXllciBmb3IgTVRVIGNoYW5nZSBvbgorICoJdGhpcyBpbnRlcmZhY2UuIEl0IGdldHMgY2FsbGVkIG9uIGEgY2hhbmdlIGJ5IHRoZSBuZXR3b3JrIGxheWVyLgorICoJUmV0dXJuIHplcm8gZm9yIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgcG9zaXggZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGludCB2ZWxvY2l0eV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICgobmV3X210dSA8IFZFTE9DSVRZX01JTl9NVFUpIHx8IG5ld19tdHUgPiAoVkVMT0NJVFlfTUFYX01UVSkpIHsKKwkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9FUlIsIEtFUk5fTk9USUNFICIlczogSW52YWxpZCBNVFUuXG4iLAorCQkJCXZwdHItPmRldi0+bmFtZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0XzA7CisJfQorCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZGV2LT5tdHUgPSBuZXdfbXR1OworCQlnb3RvIG91dF8wOworCX0KKworCWlmIChkZXYtPm10dSAhPSBuZXdfbXR1KSB7CisJCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp0bXBfdnB0cjsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3RydWN0IHJ4X2luZm8gcng7CisJCXN0cnVjdCB0eF9pbmZvIHR4OworCisJCXRtcF92cHRyID0ga3phbGxvYyhzaXplb2YoKnRtcF92cHRyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdG1wX3ZwdHIpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dF8wOworCQl9CisKKwkJdG1wX3ZwdHItPmRldiA9IGRldjsKKwkJdG1wX3ZwdHItPnBkZXYgPSB2cHRyLT5wZGV2OworCQl0bXBfdnB0ci0+b3B0aW9ucyA9IHZwdHItPm9wdGlvbnM7CisJCXRtcF92cHRyLT50eC5udW1xID0gdnB0ci0+dHgubnVtcTsKKworCQlyZXQgPSB2ZWxvY2l0eV9pbml0X3JpbmdzKHRtcF92cHRyLCBuZXdfbXR1KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9mcmVlX3RtcF92cHRyXzE7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKKworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXZlbG9jaXR5X3NodXRkb3duKHZwdHIpOworCisJCXJ4ID0gdnB0ci0+cng7CisJCXR4ID0gdnB0ci0+dHg7CisKKwkJdnB0ci0+cnggPSB0bXBfdnB0ci0+cng7CisJCXZwdHItPnR4ID0gdG1wX3ZwdHItPnR4OworCisJCXRtcF92cHRyLT5yeCA9IHJ4OworCQl0bXBfdnB0ci0+dHggPSB0eDsKKworCQlkZXYtPm10dSA9IG5ld19tdHU7CisKKwkJdmVsb2NpdHlfZ2l2ZV9tYW55X3J4X2Rlc2NzKHZwdHIpOworCisJCXZlbG9jaXR5X2luaXRfcmVnaXN0ZXJzKHZwdHIsIFZFTE9DSVRZX0lOSVRfQ09MRCk7CisKKwkJbWFjX2VuYWJsZV9pbnQodnB0ci0+bWFjX3JlZ3MpOworCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKKworCQl2ZWxvY2l0eV9mcmVlX3JpbmdzKHRtcF92cHRyKTsKKworb3V0X2ZyZWVfdG1wX3ZwdHJfMToKKwkJa2ZyZWUodG1wX3ZwdHIpOworCX0KK291dF8wOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfbWlpX2lvY3RsCQktCU1JSSBpb2N0bCBoYW5kbGVyCisgKglAZGV2OiBuZXR3b3JrIGRldmljZQorICoJQGlmcjogdGhlIGlmcmVxIGJsb2NrIGZvciB0aGUgaW9jdGwKKyAqCUBjbWQ6IHRoZSBjb21tYW5kCisgKgorICoJUHJvY2VzcyBNSUkgcmVxdWVzdHMgbWFkZSB2aWEgaW9jdGwgZnJvbSB0aGUgbmV0d29yayBsYXllci4gVGhlc2UKKyAqCWFyZSB1c2VkIGJ5IHRvb2xzIGxpa2Uga3VkenUgdG8gaW50ZXJyb2dhdGUgdGhlIGxpbmsgc3RhdGUgb2YgdGhlCisgKgloYXJkd2FyZQorICovCitzdGF0aWMgaW50IHZlbG9jaXR5X21paV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqbWlpZGF0YSA9IGlmX21paShpZnIpOworCWludCBlcnI7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ0dNSUlQSFk6CisJCW1paWRhdGEtPnBoeV9pZCA9IHJlYWRiKCZyZWdzLT5NSUlBRFIpICYgMHgxZjsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR01JSVJFRzoKKwkJaWYgKHZlbG9jaXR5X21paV9yZWFkKHZwdHItPm1hY19yZWdzLCBtaWlkYXRhLT5yZWdfbnVtICYgMHgxZiwgJihtaWlkYXRhLT52YWxfb3V0KSkgPCAwKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCWJyZWFrOworCWNhc2UgU0lPQ1NNSUlSRUc6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ2cHRyLT5sb2NrLCBmbGFncyk7CisJCWVyciA9IHZlbG9jaXR5X21paV93cml0ZSh2cHRyLT5tYWNfcmVncywgbWlpZGF0YS0+cmVnX251bSAmIDB4MWYsIG1paWRhdGEtPnZhbF9pbik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKKwkJY2hlY2tfY29ubmVjdGlvbl90eXBlKHZwdHItPm1hY19yZWdzKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKgl2ZWxvY2l0eV9pb2N0bAkJLQlpb2N0bCBlbnRyeSBwb2ludAorICoJQGRldjogbmV0d29yayBkZXZpY2UKKyAqCUBycTogaW50ZXJmYWNlIHJlcXVlc3QgaW9jdGwKKyAqCUBjbWQ6IGNvbW1hbmQgY29kZQorICoKKyAqCUNhbGxlZCB3aGVuIHRoZSB1c2VyIGlzc3VlcyBhbiBpb2N0bCByZXF1ZXN0IHRvIHRoZSBuZXR3b3JrCisgKglkZXZpY2UgaW4gcXVlc3Rpb24uIFRoZSB2ZWxvY2l0eSBpbnRlcmZhY2Ugc3VwcG9ydHMgTUlJLgorICovCitzdGF0aWMgaW50IHZlbG9jaXR5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQ7CisKKwkvKiBJZiB3ZSBhcmUgYXNrZWQgZm9yIGluZm9ybWF0aW9uIGFuZCB0aGUgZGV2aWNlIGlzIHBvd2VyCisJICAgc2F2aW5nIHRoZW4gd2UgbmVlZCB0byBicmluZyB0aGUgZGV2aWNlIGJhY2sgdXAgdG8gdGFsayB0byBpdCAqLworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXBjaV9zZXRfcG93ZXJfc3RhdGUodnB0ci0+cGRldiwgUENJX0QwKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DR01JSVBIWToJLyogR2V0IGFkZHJlc3Mgb2YgTUlJIFBIWSBpbiB1c2UuICovCisJY2FzZSBTSU9DR01JSVJFRzoJLyogUmVhZCBNSUkgUEhZIHJlZ2lzdGVyLiAqLworCWNhc2UgU0lPQ1NNSUlSRUc6CS8qIFdyaXRlIHRvIE1JSSBQSFkgcmVnaXN0ZXIuICovCisJCXJldCA9IHZlbG9jaXR5X21paV9pb2N0bChkZXYsIHJxLCBjbWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCX0KKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDNob3QpOworCisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCXZlbG9jaXR5X2dldF9zdGF0dXMJLQlzdGF0aXN0aWNzIGNhbGxiYWNrCisgKglAZGV2OiBuZXR3b3JrIGRldmljZQorICoKKyAqCUNhbGxiYWNrIGZyb20gdGhlIG5ldHdvcmsgbGF5ZXIgdG8gYWxsb3cgZHJpdmVyIHN0YXRpc3RpY3MKKyAqCXRvIGJlIHJlc3luY2hyb25pemVkIHdpdGggaGFyZHdhcmUgY29sbGVjdGVkIHN0YXRlLiBJbiB0aGUKKyAqCWNhc2Ugb2YgdGhlIHZlbG9jaXR5IHdlIG5lZWQgdG8gcHVsbCB0aGUgTUlCIGNvdW50ZXJzIGZyb20KKyAqCXRoZSBoYXJkd2FyZSBpbnRvIHRoZSBjb3VudGVycyBiZWZvcmUgbGV0dGluZyB0aGUgbmV0d29yaworICoJbGF5ZXIgZGlzcGxheSB0aGVtLgorICovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnZlbG9jaXR5X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIElmIHRoZSBoYXJkd2FyZSBpcyBkb3duLCBkb24ndCB0b3VjaCBNSUkgKi8KKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuICZkZXYtPnN0YXRzOworCisJc3Bpbl9sb2NrX2lycSgmdnB0ci0+bG9jayk7CisJdmVsb2NpdHlfdXBkYXRlX2h3X21pYnModnB0cik7CisJc3Bpbl91bmxvY2tfaXJxKCZ2cHRyLT5sb2NrKTsKKworCWRldi0+c3RhdHMucnhfcGFja2V0cyA9IHZwdHItPm1pYl9jb3VudGVyW0hXX01JQl9pZlJ4QWxsUGt0c107CisJZGV2LT5zdGF0cy5yeF9lcnJvcnMgPSB2cHRyLT5taWJfY291bnRlcltIV19NSUJfaWZSeEVycm9yUGt0c107CisJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0gdnB0ci0+bWliX2NvdW50ZXJbSFdfTUlCX2lmSW5SYW5nZUxlbmd0aEVycm9yc107CisKKy8vICB1bnNpZ25lZCBsb25nICAgcnhfZHJvcHBlZDsgICAgIC8qIG5vIHNwYWNlIGluIGxpbnV4IGJ1ZmZlcnMgICAgKi8KKwlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgPSB2cHRyLT5taWJfY291bnRlcltIV19NSUJfaWZUeEV0aGVyQ29sbGlzaW9uc107CisJLyogZGV0YWlsZWQgcnhfZXJyb3JzOiAqLworLy8gIHVuc2lnbmVkIGxvbmcgICByeF9sZW5ndGhfZXJyb3JzOworLy8gIHVuc2lnbmVkIGxvbmcgICByeF9vdmVyX2Vycm9yczsgICAgIC8qIHJlY2VpdmVyIHJpbmcgYnVmZiBvdmVyZmxvdyAgKi8KKwlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMgPSB2cHRyLT5taWJfY291bnRlcltIV19NSUJfaWZSeFBrdENSQ0VdOworLy8gIHVuc2lnbmVkIGxvbmcgICByeF9mcmFtZV9lcnJvcnM7ICAgIC8qIHJlY3YnZCBmcmFtZSBhbGlnbm1lbnQgZXJyb3IgKi8KKy8vICB1bnNpZ25lZCBsb25nICAgcnhfZmlmb19lcnJvcnM7ICAgICAvKiByZWN2J3IgZmlmbyBvdmVycnVuICAgICAgKi8KKy8vICB1bnNpZ25lZCBsb25nICAgcnhfbWlzc2VkX2Vycm9yczsgICAvKiByZWNlaXZlciBtaXNzZWQgcGFja2V0ICAgKi8KKworCS8qIGRldGFpbGVkIHR4X2Vycm9ycyAqLworLy8gIHVuc2lnbmVkIGxvbmcgICB0eF9maWZvX2Vycm9yczsKKworCXJldHVybiAmZGV2LT5zdGF0czsKK30KKworLyoqCisgKgl2ZWxvY2l0eV9jbG9zZQkJLQljbG9zZSBhZGFwdGVyIGNhbGxiYWNrCisgKglAZGV2OiBuZXR3b3JrIGRldmljZQorICoKKyAqCUNhbGxiYWNrIGZyb20gdGhlIG5ldHdvcmsgbGF5ZXIgd2hlbiB0aGUgdmVsb2NpdHkgaXMgYmVpbmcKKyAqCWRlYWN0aXZhdGVkIGJ5IHRoZSBuZXR3b3JrIGxheWVyCisgKi8KK3N0YXRpYyBpbnQgdmVsb2NpdHlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJdmVsb2NpdHlfc2h1dGRvd24odnB0cik7CisKKwlpZiAodnB0ci0+ZmxhZ3MgJiBWRUxPQ0lUWV9GTEFHU19XT0xfRU5BQkxFRCkKKwkJdmVsb2NpdHlfZ2V0X2lwKHZwdHIpOworCWlmIChkZXYtPmlycSAhPSAwKQorCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCS8qIFBvd2VyIGRvd24gdGhlIGNoaXAgKi8KKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHZwdHItPnBkZXYsIFBDSV9EM2hvdCk7CisKKwl2ZWxvY2l0eV9mcmVlX3JpbmdzKHZwdHIpOworCisJdnB0ci0+ZmxhZ3MgJj0gKH5WRUxPQ0lUWV9GTEFHU19PUEVORUQpOworCXJldHVybiAwOworfQorCisvKioKKyAqCXZlbG9jaXR5X3htaXQJCS0JdHJhbnNtaXQgcGFja2V0IGNhbGxiYWNrCisgKglAc2tiOiBidWZmZXIgdG8gdHJhbnNtaXQKKyAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKgorICoJQ2FsbGVkIGJ5IHRoZSBuZXR3b3IgbGF5ZXIgdG8gcmVxdWVzdCBhIHBhY2tldCBpcyBxdWV1ZWQgdG8KKyAqCXRoZSB2ZWxvY2l0eS4gUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBuZXRkZXZfdHhfdCB2ZWxvY2l0eV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBxbnVtID0gMDsKKwlzdHJ1Y3QgdHhfZGVzYyAqdGRfcHRyOworCXN0cnVjdCB2ZWxvY2l0eV90ZF9pbmZvICp0ZGluZm87CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcGt0bGVuOworCV9fbGUxNiBsZW47CisJaW50IGluZGV4OworCisJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKKwkJZ290byBvdXQ7CisJcGt0bGVuID0gbWF4X3QodW5zaWduZWQgaW50LCBza2ItPmxlbiwgRVRIX1pMRU4pOworCisJbGVuID0gY3B1X3RvX2xlMTYocGt0bGVuKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2cHRyLT5sb2NrLCBmbGFncyk7CisKKwlpbmRleCA9IHZwdHItPnR4LmN1cnJbcW51bV07CisJdGRfcHRyID0gJih2cHRyLT50eC5yaW5nc1txbnVtXVtpbmRleF0pOworCXRkaW5mbyA9ICYodnB0ci0+dHguaW5mb3NbcW51bV1baW5kZXhdKTsKKworCXRkX3B0ci0+dGRlc2MxLlRDUiA9IFRDUjBfVElDOworCXRkX3B0ci0+dGRfYnVmWzBdLnNpemUgJj0gflREX1FVRVVFOworCisJLyoKKwkgKglNYXAgdGhlIGxpbmVhciBuZXR3b3JrIGJ1ZmZlciBpbnRvIFBDSSBzcGFjZSBhbmQKKwkgKglhZGQgaXQgdG8gdGhlIHRyYW5zbWl0IHJpbmcuCisJICovCisJdGRpbmZvLT5za2IgPSBza2I7CisJdGRpbmZvLT5za2JfZG1hWzBdID0gcGNpX21hcF9zaW5nbGUodnB0ci0+cGRldiwgc2tiLT5kYXRhLCBwa3RsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCXRkX3B0ci0+dGRlc2MwLmxlbiA9IGxlbjsKKwl0ZF9wdHItPnRkX2J1ZlswXS5wYV9sb3cgPSBjcHVfdG9fbGUzMih0ZGluZm8tPnNrYl9kbWFbMF0pOworCXRkX3B0ci0+dGRfYnVmWzBdLnBhX2hpZ2ggPSAwOworCXRkX3B0ci0+dGRfYnVmWzBdLnNpemUgPSBsZW47CisJdGRpbmZvLT5uc2tiX2RtYSA9IDE7CisKKwl0ZF9wdHItPnRkZXNjMS5jbWQgPSBUQ1BMU19OT1JNQUwgKyAodGRpbmZvLT5uc2tiX2RtYSArIDEpICogMTY7CisKKwlpZiAodnB0ci0+dmxncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJCXRkX3B0ci0+dGRlc2MxLnZsYW4gPSBjcHVfdG9fbGUxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJCXRkX3B0ci0+dGRlc2MxLlRDUiB8PSBUQ1IwX1ZFVEFHOworCX0KKworCS8qCisJICoJSGFuZGxlIGhhcmR3YXJlIGNoZWNrc3VtCisJICovCisJaWYgKCh2cHRyLT5mbGFncyAmIFZFTE9DSVRZX0ZMQUdTX1RYX0NTVU0pCisJCQkJICYmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkgeworCQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwID0gaXBfaGRyKHNrYik7CisJCWlmIChpcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCisJCQl0ZF9wdHItPnRkZXNjMS5UQ1IgfD0gVENSMF9UQ1BDSzsKKwkJZWxzZSBpZiAoaXAtPnByb3RvY29sID09IElQUFJPVE9fVURQKQorCQkJdGRfcHRyLT50ZGVzYzEuVENSIHw9IChUQ1IwX1VEUENLKTsKKwkJdGRfcHRyLT50ZGVzYzEuVENSIHw9IFRDUjBfSVBDSzsKKwl9CisJeworCisJCWludCBwcmV2ID0gaW5kZXggLSAxOworCisJCWlmIChwcmV2IDwgMCkKKwkJCXByZXYgPSB2cHRyLT5vcHRpb25zLm51bXR4IC0gMTsKKwkJdGRfcHRyLT50ZGVzYzAubGVuIHw9IE9XTkVEX0JZX05JQzsKKwkJdnB0ci0+dHgudXNlZFtxbnVtXSsrOworCQl2cHRyLT50eC5jdXJyW3FudW1dID0gKGluZGV4ICsgMSkgJSB2cHRyLT5vcHRpb25zLm51bXR4OworCisJCWlmIChBVkFJTF9URCh2cHRyLCBxbnVtKSA8IDEpCisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwkJdGRfcHRyID0gJih2cHRyLT50eC5yaW5nc1txbnVtXVtwcmV2XSk7CisJCXRkX3B0ci0+dGRfYnVmWzBdLnNpemUgfD0gVERfUVVFVUU7CisJCW1hY190eF9xdWV1ZV93YWtlKHZwdHItPm1hY19yZWdzLCBxbnVtKTsKKwl9CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnB0ci0+bG9jaywgZmxhZ3MpOworb3V0OgorCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2ZWxvY2l0eV9uZXRkZXZfb3BzID0gewogCS5uZG9fb3BlbgkJPSB2ZWxvY2l0eV9vcGVuLAogCS5uZG9fc3RvcAkJPSB2ZWxvY2l0eV9jbG9zZSwKQEAgLTg2NSw2ICsyNTU5LDkzIEBACiB9OwogCiAvKioKKyAqCXZlbG9jaXR5X2luaXRfaW5mbwktCWluaXQgcHJpdmF0ZSBkYXRhCisgKglAcGRldjogUENJIGRldmljZQorICoJQHZwdHI6IFZlbG9jaXR5IGluZm8KKyAqCUBpbmZvOiBCb2FyZCB0eXBlCisgKgorICoJU2V0IHVwIHRoZSBpbml0aWFsIHZlbG9jaXR5X2luZm8gc3RydWN0IGZvciB0aGUgZGV2aWNlIHRoYXQgaGFzIGJlZW4KKyAqCWRpc2NvdmVyZWQuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB2ZWxvY2l0eV9pbml0X2luZm8oc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSBzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwKKwkJCQkJIGNvbnN0IHN0cnVjdCB2ZWxvY2l0eV9pbmZvX3RibCAqaW5mbykKK3sKKwltZW1zZXQodnB0ciwgMCwgc2l6ZW9mKHN0cnVjdCB2ZWxvY2l0eV9pbmZvKSk7CisKKwl2cHRyLT5wZGV2ID0gcGRldjsKKwl2cHRyLT5jaGlwX2lkID0gaW5mby0+Y2hpcF9pZDsKKwl2cHRyLT50eC5udW1xID0gaW5mby0+dHhxdWV1ZTsKKwl2cHRyLT5tdWx0aWNhc3RfbGltaXQgPSBNQ0FNX1NJWkU7CisJc3Bpbl9sb2NrX2luaXQoJnZwdHItPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZ2cHRyLT5saXN0KTsKK30KKworLyoqCisgKgl2ZWxvY2l0eV9nZXRfcGNpX2luZm8JLQlyZXRyaWV2ZSBQQ0kgaW5mbyBmb3IgZGV2aWNlCisgKglAdnB0cjogdmVsb2NpdHkgZGV2aWNlCisgKglAcGRldjogUENJIGRldmljZSBpdCBtYXRjaGVzCisgKgorICoJUmV0cmlldmUgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGRhdGEgdGhhdCBpbnRlcmVzdHMgdXMgZnJvbQorICoJdGhlIGtlcm5lbCBQQ0kgbGF5ZXIKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgdmVsb2NpdHlfZ2V0X3BjaV9pbmZvKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl2cHRyLT5yZXZfaWQgPSBwZGV2LT5yZXZpc2lvbjsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJdnB0ci0+aW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCXZwdHItPm1lbWFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisKKwlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgJiBJT1JFU09VUkNFX0lPKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkgICAicmVnaW9uICMwIGlzIG5vdCBhbiBJL08gcmVzb3VyY2UsIGFib3J0aW5nLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDEpICYgSU9SRVNPVVJDRV9JTykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJICAgInJlZ2lvbiAjMSBpcyBhbiBJL08gcmVzb3VyY2UsIGFib3J0aW5nLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpIDwgVkVMT0NJVFlfSU9fU0laRSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZWdpb24gIzEgaXMgdG9vIHNtYWxsLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl2cHRyLT5wZGV2ID0gcGRldjsKKworCXJldHVybiAwOworfQorCisvKioKKyAqCXZlbG9jaXR5X3ByaW50X2luZm8JLQlwZXIgZHJpdmVyIGRhdGEKKyAqCUB2cHRyOiB2ZWxvY2l0eQorICoKKyAqCVByaW50IHBlciBkcml2ZXIgZGF0YSBhcyB0aGUga2VybmVsIGRyaXZlciBmaW5kcyBWZWxvY2l0eQorICoJaGFyZHdhcmUKKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHZlbG9jaXR5X3ByaW50X2luZm8oc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHZwdHItPmRldjsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiAlc1xuIiwgZGV2LT5uYW1lLCBnZXRfY2hpcF9uYW1lKHZwdHItPmNoaXBfaWQpKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogRXRoZXJuZXQgQWRkcmVzczogJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCisJCWRldi0+bmFtZSwKKwkJZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwgZGV2LT5kZXZfYWRkclsyXSwKKwkJZGV2LT5kZXZfYWRkclszXSwgZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSk7Cit9CisKK3N0YXRpYyB1MzIgdmVsb2NpdHlfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKwlyZXR1cm4gQllURV9SRUdfQklUU19JU19PTihQSFlTUjBfTElOS0dELCAmcmVncy0+UEhZU1IwKSA/IDEgOiAwOworfQorCisKKy8qKgogICoJdmVsb2NpdHlfZm91bmQxCQktCXNldCB1cCBkaXNjb3ZlcmVkIHZlbG9jaXR5IGNhcmQKICAqCUBwZGV2OiBQQ0kgZGV2aWNlCiAgKglAZW50OiBQQ0kgZGV2aWNlIHRhYmxlIGVudHJ5IHRoYXQgbWF0Y2hlZApAQCAtODcyLDcgKzI2NTMsNiBAQAogICoJQ29uZmlndXJlIGEgZGlzY292ZXJlZCBhZGFwdGVyIGZyb20gc2NyYXRjaC4gUmV0dXJuIGEgbmVnYXRpdmUKICAqCWVycm5vIGVycm9yIGNvZGUgb24gZmFpbHVyZSBwYXRocy4KICAqLwotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB2ZWxvY2l0eV9mb3VuZDEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RhdGljIGludCBmaXJzdCA9IDE7CkBAIC04ODEsNyArMjY2MSw3IEBACiAJY29uc3QgY2hhciAqZHJ2X3N0cmluZzsKIAljb25zdCBzdHJ1Y3QgdmVsb2NpdHlfaW5mb190YmwgKmluZm8gPSAmY2hpcF9pbmZvX3RhYmxlW2VudC0+ZHJpdmVyX2RhdGFdOwogCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyOwotCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVnczsKKwlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVnczsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAogCS8qIEZJWE1FOiB0aGlzIGRyaXZlciwgbGlrZSBhbG1vc3QgYWxsIG90aGVyIGV0aGVybmV0IGRyaXZlcnMsCkBAIC05NzYsOSArMjc1Niw2IEBACiAJZGV2LT5uZXRkZXZfb3BzID0gJnZlbG9jaXR5X25ldGRldl9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZ2ZWxvY2l0eV9ldGh0b29sX29wczsKIAotI2lmZGVmICBWRUxPQ0lUWV9aRVJPX0NPUFlfU1VQUE9SVAotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKLSNlbmRpZgogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUiB8CiAJCU5FVElGX0ZfSFdfVkxBTl9SWDsKIApAQCAtMTAyNCwxMzc4ICsyODAxLDI2NCBAQAogCWdvdG8gb3V0OwogfQogCisKKyNpZmRlZiBDT05GSUdfUE0KIC8qKgotICoJdmVsb2NpdHlfcHJpbnRfaW5mbwktCXBlciBkcml2ZXIgZGF0YQotICoJQHZwdHI6IHZlbG9jaXR5CisgKgl3b2xfY2FsY19jcmMJCS0JV09MIENSQworICoJQHBhdHRlcm46IGRhdGEgcGF0dGVybgorICoJQG1hc2tfcGF0dGVybjogbWFzawogICoKLSAqCVByaW50IHBlciBkcml2ZXIgZGF0YSBhcyB0aGUga2VybmVsIGRyaXZlciBmaW5kcyBWZWxvY2l0eQotICoJaGFyZHdhcmUKKyAqCUNvbXB1dGUgdGhlIHdha2Ugb24gbGFuIGNyYyBoYXNoZXMgZm9yIHRoZSBwYWNrZXQgaGVhZGVyCisgKgl3ZSBhcmUgaW50ZXJlc3RlZCBpbi4KICAqLwotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgdmVsb2NpdHlfcHJpbnRfaW5mbyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3N0YXRpYyB1MTYgd29sX2NhbGNfY3JjKGludCBzaXplLCB1OCAqcGF0dGVybiwgdTggKm1hc2tfcGF0dGVybikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdnB0ci0+ZGV2OwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzXG4iLCBkZXYtPm5hbWUsIGdldF9jaGlwX25hbWUodnB0ci0+Y2hpcF9pZCkpOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBFdGhlcm5ldCBBZGRyZXNzOiAlMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWFxuIiwKLQkJZGV2LT5uYW1lLAotCQlkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLCBkZXYtPmRldl9hZGRyWzJdLAotCQlkZXYtPmRldl9hZGRyWzNdLCBkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9hZGRyWzVdKTsKLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9pbml0X2luZm8JLQlpbml0IHByaXZhdGUgZGF0YQotICoJQHBkZXY6IFBDSSBkZXZpY2UKLSAqCUB2cHRyOiBWZWxvY2l0eSBpbmZvCi0gKglAaW5mbzogQm9hcmQgdHlwZQotICoKLSAqCVNldCB1cCB0aGUgaW5pdGlhbCB2ZWxvY2l0eV9pbmZvIHN0cnVjdCBmb3IgdGhlIGRldmljZSB0aGF0IGhhcyBiZWVuCi0gKglkaXNjb3ZlcmVkLgotICovCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCB2ZWxvY2l0eV9pbml0X2luZm8oc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCSBzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwKLQkJCQkJIGNvbnN0IHN0cnVjdCB2ZWxvY2l0eV9pbmZvX3RibCAqaW5mbykKLXsKLQltZW1zZXQodnB0ciwgMCwgc2l6ZW9mKHN0cnVjdCB2ZWxvY2l0eV9pbmZvKSk7Ci0KLQl2cHRyLT5wZGV2ID0gcGRldjsKLQl2cHRyLT5jaGlwX2lkID0gaW5mby0+Y2hpcF9pZDsKLQl2cHRyLT50eC5udW1xID0gaW5mby0+dHhxdWV1ZTsKLQl2cHRyLT5tdWx0aWNhc3RfbGltaXQgPSBNQ0FNX1NJWkU7Ci0Jc3Bpbl9sb2NrX2luaXQoJnZwdHItPmxvY2spOwotCUlOSVRfTElTVF9IRUFEKCZ2cHRyLT5saXN0KTsKLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9nZXRfcGNpX2luZm8JLQlyZXRyaWV2ZSBQQ0kgaW5mbyBmb3IgZGV2aWNlCi0gKglAdnB0cjogdmVsb2NpdHkgZGV2aWNlCi0gKglAcGRldjogUENJIGRldmljZSBpdCBtYXRjaGVzCi0gKgotICoJUmV0cmlldmUgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGRhdGEgdGhhdCBpbnRlcmVzdHMgdXMgZnJvbQotICoJdGhlIGtlcm5lbCBQQ0kgbGF5ZXIKLSAqLwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB2ZWxvY2l0eV9nZXRfcGNpX2luZm8oc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXZwdHItPnJldl9pZCA9IHBkZXYtPnJldmlzaW9uOwotCi0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0KLQl2cHRyLT5pb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JdnB0ci0+bWVtYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKLQotCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKSAmIElPUkVTT1VSQ0VfSU8pKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSAgICJyZWdpb24gIzAgaXMgbm90IGFuIEkvTyByZXNvdXJjZSwgYWJvcnRpbmcuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMSkgJiBJT1JFU09VUkNFX0lPKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkgICAicmVnaW9uICMxIGlzIGFuIEkvTyByZXNvdXJjZSwgYWJvcnRpbmcuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkgPCBWRUxPQ0lUWV9JT19TSVpFKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ2lvbiAjMSBpcyB0b28gc21hbGwuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXZwdHItPnBkZXYgPSBwZGV2OwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfaW5pdF9kbWFfcmluZ3MJLQlzZXQgdXAgRE1BIHJpbmdzCi0gKglAdnB0cjogVmVsb2NpdHkgdG8gc2V0IHVwCi0gKgotICoJQWxsb2NhdGUgUENJIG1hcHBlZCBETUEgcmluZ3MgZm9yIHRoZSByZWNlaXZlIGFuZCB0cmFuc21pdCBsYXllcgotICoJdG8gdXNlLgotICovCi0KLXN0YXRpYyBpbnQgdmVsb2NpdHlfaW5pdF9kbWFfcmluZ3Moc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCi17Ci0Jc3RydWN0IHZlbG9jaXR5X29wdCAqb3B0ID0gJnZwdHItPm9wdGlvbnM7Ci0JY29uc3QgdW5zaWduZWQgaW50IHJ4X3Jpbmdfc2l6ZSA9IG9wdC0+bnVtcnggKiBzaXplb2Yoc3RydWN0IHJ4X2Rlc2MpOwotCWNvbnN0IHVuc2lnbmVkIGludCB0eF9yaW5nX3NpemUgPSBvcHQtPm51bXR4ICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZwdHItPnBkZXY7Ci0JZG1hX2FkZHJfdCBwb29sX2RtYTsKLQl2b2lkICpwb29sOwotCXVuc2lnbmVkIGludCBpOwotCi0JLyoKLQkgKiBBbGxvY2F0ZSBhbGwgUkQvVEQgcmluZ3MgYSBzaW5nbGUgcG9vbC4KLQkgKgotCSAqIHBjaV9hbGxvY19jb25zaXN0ZW50KCkgZnVsZmlsbHMgdGhlIHJlcXVpcmVtZW50IGZvciA2NCBieXRlcwotCSAqIGFsaWdubWVudAotCSAqLwotCXBvb2wgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCB0eF9yaW5nX3NpemUgKiB2cHRyLT50eC5udW1xICsKLQkJCQkgICAgcnhfcmluZ19zaXplLCAmcG9vbF9kbWEpOwotCWlmICghcG9vbCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlcyA6IERNQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLAotCQkJdnB0ci0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JdnB0ci0+cngucmluZyA9IHBvb2w7Ci0JdnB0ci0+cngucG9vbF9kbWEgPSBwb29sX2RtYTsKLQotCXBvb2wgKz0gcnhfcmluZ19zaXplOwotCXBvb2xfZG1hICs9IHJ4X3Jpbmdfc2l6ZTsKLQotCWZvciAoaSA9IDA7IGkgPCB2cHRyLT50eC5udW1xOyBpKyspIHsKLQkJdnB0ci0+dHgucmluZ3NbaV0gPSBwb29sOwotCQl2cHRyLT50eC5wb29sX2RtYVtpXSA9IHBvb2xfZG1hOwotCQlwb29sICs9IHR4X3Jpbmdfc2l6ZTsKLQkJcG9vbF9kbWEgKz0gdHhfcmluZ19zaXplOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCXZlbG9jaXR5X2ZyZWVfZG1hX3JpbmdzCS0JZnJlZSBQQ0kgcmluZyBwb2ludGVycwotICoJQHZwdHI6IFZlbG9jaXR5IHRvIGZyZWUgZnJvbQotICoKLSAqCUNsZWFuIHVwIHRoZSBQQ0kgcmluZyBidWZmZXJzIGFsbG9jYXRlZCB0byB0aGlzIHZlbG9jaXR5LgotICovCi0KLXN0YXRpYyB2b2lkIHZlbG9jaXR5X2ZyZWVfZG1hX3JpbmdzKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQotewotCWNvbnN0IGludCBzaXplID0gdnB0ci0+b3B0aW9ucy5udW1yeCAqIHNpemVvZihzdHJ1Y3QgcnhfZGVzYykgKwotCQl2cHRyLT5vcHRpb25zLm51bXR4ICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKSAqIHZwdHItPnR4Lm51bXE7Ci0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KHZwdHItPnBkZXYsIHNpemUsIHZwdHItPnJ4LnJpbmcsIHZwdHItPnJ4LnBvb2xfZG1hKTsKLX0KLQotc3RhdGljIHZvaWQgdmVsb2NpdHlfZ2l2ZV9tYW55X3J4X2Rlc2NzKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQotewotCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzID0gdnB0ci0+bWFjX3JlZ3M7Ci0JaW50IGF2YWlsLCBkaXJ0eSwgdW51c2FibGU7Ci0KLQkvKgotCSAqIFJEIG51bWJlciBtdXN0IGJlIGVxdWFsIHRvIDRYIHBlciBoYXJkd2FyZSBzcGVjCi0JICogKHByb2dyYW1taW5nIGd1aWRlIHJldiAxLjIwLCBwLjEzKQotCSAqLwotCWlmICh2cHRyLT5yeC5maWxsZWQgPCA0KQotCQlyZXR1cm47Ci0KLQl3bWIoKTsKLQotCXVudXNhYmxlID0gdnB0ci0+cnguZmlsbGVkICYgMHgwMDAzOwotCWRpcnR5ID0gdnB0ci0+cnguZGlydHkgLSB1bnVzYWJsZTsKLQlmb3IgKGF2YWlsID0gdnB0ci0+cnguZmlsbGVkICYgMHhmZmZjOyBhdmFpbDsgYXZhaWwtLSkgewotCQlkaXJ0eSA9IChkaXJ0eSA+IDApID8gZGlydHkgLSAxIDogdnB0ci0+b3B0aW9ucy5udW1yeCAtIDE7Ci0JCXZwdHItPnJ4LnJpbmdbZGlydHldLnJkZXNjMC5sZW4gfD0gT1dORURfQllfTklDOwotCX0KLQotCXdyaXRldyh2cHRyLT5yeC5maWxsZWQgJiAweGZmZmMsICZyZWdzLT5SQlJEVSk7Ci0JdnB0ci0+cnguZmlsbGVkID0gdW51c2FibGU7Ci19Ci0KLXN0YXRpYyBpbnQgdmVsb2NpdHlfcnhfcmVmaWxsKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQotewotCWludCBkaXJ0eSA9IHZwdHItPnJ4LmRpcnR5LCBkb25lID0gMDsKLQotCWRvIHsKLQkJc3RydWN0IHJ4X2Rlc2MgKnJkID0gdnB0ci0+cngucmluZyArIGRpcnR5OwotCi0JCS8qIEZpbmUgZm9yIGFuIGFsbCB6ZXJvIFJ4IGRlc2MgYXQgaW5pdCB0aW1lIGFzIHdlbGwgKi8KLQkJaWYgKHJkLT5yZGVzYzAubGVuICYgT1dORURfQllfTklDKQotCQkJYnJlYWs7Ci0KLQkJaWYgKCF2cHRyLT5yeC5pbmZvW2RpcnR5XS5za2IpIHsKLQkJCWlmICh2ZWxvY2l0eV9hbGxvY19yeF9idWYodnB0ciwgZGlydHkpIDwgMCkKLQkJCQlicmVhazsKLQkJfQotCQlkb25lKys7Ci0JCWRpcnR5ID0gKGRpcnR5IDwgdnB0ci0+b3B0aW9ucy5udW1yeCAtIDEpID8gZGlydHkgKyAxIDogMDsKLQl9IHdoaWxlIChkaXJ0eSAhPSB2cHRyLT5yeC5jdXJyKTsKLQotCWlmIChkb25lKSB7Ci0JCXZwdHItPnJ4LmRpcnR5ID0gZGlydHk7Ci0JCXZwdHItPnJ4LmZpbGxlZCArPSBkb25lOwotCX0KLQotCXJldHVybiBkb25lOwotfQotCi1zdGF0aWMgdm9pZCB2ZWxvY2l0eV9zZXRfcnhidWZzaXplKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBpbnQgbXR1KQotewotCXZwdHItPnJ4LmJ1Zl9zeiA9IChtdHUgPD0gRVRIX0RBVEFfTEVOKSA/IFBLVF9CVUZfU1ogOiBtdHUgKyAzMjsKLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9pbml0X3JkX3JpbmcJLQlzZXQgdXAgcmVjZWl2ZSByaW5nCi0gKglAdnB0cjogdmVsb2NpdHkgdG8gY29uZmlndXJlCi0gKgotICoJQWxsb2NhdGUgYW5kIHNldCB1cCB0aGUgcmVjZWl2ZSBidWZmZXJzIGZvciBlYWNoIHJpbmcgc2xvdCBhbmQKLSAqCWFzc2lnbiB0aGVtIHRvIHRoZSBuZXR3b3JrIGFkYXB0ZXIuCi0gKi8KLQotc3RhdGljIGludCB2ZWxvY2l0eV9pbml0X3JkX3Jpbmcoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCi17Ci0JaW50IHJldCA9IC1FTk9NRU07Ci0KLQl2cHRyLT5yeC5pbmZvID0ga2NhbGxvYyh2cHRyLT5vcHRpb25zLm51bXJ4LAotCQkJCXNpemVvZihzdHJ1Y3QgdmVsb2NpdHlfcmRfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghdnB0ci0+cnguaW5mbykKLQkJZ290byBvdXQ7Ci0KLQl2ZWxvY2l0eV9pbml0X3J4X3JpbmdfaW5kZXhlcyh2cHRyKTsKLQotCWlmICh2ZWxvY2l0eV9yeF9yZWZpbGwodnB0cikgIT0gdnB0ci0+b3B0aW9ucy5udW1yeCkgewotCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0VSUiwgS0VSTl9FUlIKLQkJCSIlczogZmFpbGVkIHRvIGFsbG9jYXRlIFJYIGJ1ZmZlci5cbiIsIHZwdHItPmRldi0+bmFtZSk7Ci0JCXZlbG9jaXR5X2ZyZWVfcmRfcmluZyh2cHRyKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gMDsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqCXZlbG9jaXR5X2ZyZWVfcmRfcmluZwktCWZyZWUgcmVjZWl2ZSByaW5nCi0gKglAdnB0cjogdmVsb2NpdHkgdG8gY2xlYW4gdXAKLSAqCi0gKglGcmVlIHRoZSByZWNlaXZlIGJ1ZmZlcnMgZm9yIGVhY2ggcmluZyBzbG90IGFuZCBhbnkKLSAqCWF0dGFjaGVkIHNvY2tldCBidWZmZXJzIHRoYXQgbmVlZCB0byBnbyBhd2F5LgotICovCi0KLXN0YXRpYyB2b2lkIHZlbG9jaXR5X2ZyZWVfcmRfcmluZyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKLXsKLQlpbnQgaTsKLQotCWlmICh2cHRyLT5yeC5pbmZvID09IE5VTEwpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCB2cHRyLT5vcHRpb25zLm51bXJ4OyBpKyspIHsKLQkJc3RydWN0IHZlbG9jaXR5X3JkX2luZm8gKnJkX2luZm8gPSAmKHZwdHItPnJ4LmluZm9baV0pOwotCQlzdHJ1Y3QgcnhfZGVzYyAqcmQgPSB2cHRyLT5yeC5yaW5nICsgaTsKLQotCQltZW1zZXQocmQsIDAsIHNpemVvZigqcmQpKTsKLQotCQlpZiAoIXJkX2luZm8tPnNrYikKLQkJCWNvbnRpbnVlOwotCQlwY2lfdW5tYXBfc2luZ2xlKHZwdHItPnBkZXYsIHJkX2luZm8tPnNrYl9kbWEsIHZwdHItPnJ4LmJ1Zl9zeiwKLQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJcmRfaW5mby0+c2tiX2RtYSA9IDA7Ci0KLQkJZGV2X2tmcmVlX3NrYihyZF9pbmZvLT5za2IpOwotCQlyZF9pbmZvLT5za2IgPSBOVUxMOwotCX0KLQotCWtmcmVlKHZwdHItPnJ4LmluZm8pOwotCXZwdHItPnJ4LmluZm8gPSBOVUxMOwotfQotCi0vKioKLSAqCXZlbG9jaXR5X2luaXRfdGRfcmluZwktCXNldCB1cCB0cmFuc21pdCByaW5nCi0gKglAdnB0cjoJdmVsb2NpdHkKLSAqCi0gKglTZXQgdXAgdGhlIHRyYW5zbWl0IHJpbmcgYW5kIGNoYWluIHRoZSByaW5nIHBvaW50ZXJzIHRvZ2V0aGVyLgotICoJUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBwb3NpeCBlcnJubyBjb2RlIGZvcgotICoJZmFpbHVyZS4KLSAqLwotCi1zdGF0aWMgaW50IHZlbG9jaXR5X2luaXRfdGRfcmluZyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKLXsKLQlkbWFfYWRkcl90IGN1cnI7Ci0JaW50IGo7Ci0KLQkvKiBJbml0IHRoZSBURCByaW5nIGVudHJpZXMgKi8KLQlmb3IgKGogPSAwOyBqIDwgdnB0ci0+dHgubnVtcTsgaisrKSB7Ci0JCWN1cnIgPSB2cHRyLT50eC5wb29sX2RtYVtqXTsKLQotCQl2cHRyLT50eC5pbmZvc1tqXSA9IGtjYWxsb2ModnB0ci0+b3B0aW9ucy5udW10eCwKLQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgdmVsb2NpdHlfdGRfaW5mbyksCi0JCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJaWYgKCF2cHRyLT50eC5pbmZvc1tqXSkJewotCQkJd2hpbGUoLS1qID49IDApCi0JCQkJa2ZyZWUodnB0ci0+dHguaW5mb3Nbal0pOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQotCQl2cHRyLT50eC50YWlsW2pdID0gdnB0ci0+dHguY3VycltqXSA9IHZwdHItPnR4LnVzZWRbal0gPSAwOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqCUZJWE1FOiBjb3VsZCB3ZSBtZXJnZSB0aGlzIHdpdGggdmVsb2NpdHlfZnJlZV90eF9idWYgPwotICovCi0KLXN0YXRpYyB2b2lkIHZlbG9jaXR5X2ZyZWVfdGRfcmluZ19lbnRyeShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwKLQkJCQkJCQkgaW50IHEsIGludCBuKQotewotCXN0cnVjdCB2ZWxvY2l0eV90ZF9pbmZvICogdGRfaW5mbyA9ICYodnB0ci0+dHguaW5mb3NbcV1bbl0pOwotCWludCBpOwotCi0JaWYgKHRkX2luZm8gPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKHRkX2luZm8tPnNrYikgewotCQlmb3IgKGkgPSAwOyBpIDwgdGRfaW5mby0+bnNrYl9kbWE7IGkrKykKLQkJewotCQkJaWYgKHRkX2luZm8tPnNrYl9kbWFbaV0pIHsKLQkJCQlwY2lfdW5tYXBfc2luZ2xlKHZwdHItPnBkZXYsIHRkX2luZm8tPnNrYl9kbWFbaV0sCi0JCQkJCXRkX2luZm8tPnNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCQl0ZF9pbmZvLT5za2JfZG1hW2ldID0gMDsKLQkJCX0KLQkJfQotCQlkZXZfa2ZyZWVfc2tiKHRkX2luZm8tPnNrYik7Ci0JCXRkX2luZm8tPnNrYiA9IE5VTEw7Ci0JfQotfQotCi0vKioKLSAqCXZlbG9jaXR5X2ZyZWVfdGRfcmluZwktCWZyZWUgdGQgcmluZwotICoJQHZwdHI6IHZlbG9jaXR5Ci0gKgotICoJRnJlZSB1cCB0aGUgdHJhbnNtaXQgcmluZyBmb3IgdGhpcyBwYXJ0aWN1bGFyIHZlbG9jaXR5IGFkYXB0ZXIuCi0gKglXZSBmcmVlIHRoZSByaW5nIGNvbnRlbnRzIGJ1dCBub3QgdGhlIHJpbmcgaXRzZWxmLgotICovCi0KLXN0YXRpYyB2b2lkIHZlbG9jaXR5X2ZyZWVfdGRfcmluZyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKLXsKKwl1MTYgY3JjID0gMHhGRkZGOworCXU4IG1hc2s7CiAJaW50IGksIGo7CiAKLQlmb3IgKGogPSAwOyBqIDwgdnB0ci0+dHgubnVtcTsgaisrKSB7Ci0JCWlmICh2cHRyLT50eC5pbmZvc1tqXSA9PSBOVUxMKQorCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJbWFzayA9IG1hc2tfcGF0dGVybltpXTsKKworCQkvKiBTa2lwIHRoaXMgbG9vcCBpZiB0aGUgbWFzayBlcXVhbHMgdG8gemVybyAqLworCQlpZiAobWFzayA9PSAweDAwKQogCQkJY29udGludWU7Ci0JCWZvciAoaSA9IDA7IGkgPCB2cHRyLT5vcHRpb25zLm51bXR4OyBpKyspIHsKLQkJCXZlbG9jaXR5X2ZyZWVfdGRfcmluZ19lbnRyeSh2cHRyLCBqLCBpKTsKIAotCQl9Ci0JCWtmcmVlKHZwdHItPnR4LmluZm9zW2pdKTsKLQkJdnB0ci0+dHguaW5mb3Nbal0gPSBOVUxMOwotCX0KLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9yeF9zcnYJCS0Jc2VydmljZSBSWCBpbnRlcnJ1cHQKLSAqCUB2cHRyOiB2ZWxvY2l0eQotICoJQHN0YXR1czogYWRhcHRlciBzdGF0dXMgKHVudXNlZCkKLSAqCi0gKglXYWxrIHRoZSByZWNlaXZlIHJpbmcgb2YgdGhlIHZlbG9jaXR5IGFkYXB0ZXIgYW5kIHJlbW92ZQotICoJYW55IHJlY2VpdmVkIHBhY2tldHMgZnJvbSB0aGUgcmVjZWl2ZSBxdWV1ZS4gSGFuZCB0aGUgcmluZwotICoJc2xvdHMgYmFjayB0byB0aGUgYWRhcHRlciBmb3IgcmV1c2UuCi0gKi8KLQotc3RhdGljIGludCB2ZWxvY2l0eV9yeF9zcnYoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIGludCBzdGF0dXMpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnZwdHItPmRldi0+c3RhdHM7Ci0JaW50IHJkX2N1cnIgPSB2cHRyLT5yeC5jdXJyOwotCWludCB3b3JrcyA9IDA7Ci0KLQlkbyB7Ci0JCXN0cnVjdCByeF9kZXNjICpyZCA9IHZwdHItPnJ4LnJpbmcgKyByZF9jdXJyOwotCi0JCWlmICghdnB0ci0+cnguaW5mb1tyZF9jdXJyXS5za2IpCi0JCQlicmVhazsKLQotCQlpZiAocmQtPnJkZXNjMC5sZW4gJiBPV05FRF9CWV9OSUMpCi0JCQlicmVhazsKLQotCQlybWIoKTsKLQotCQkvKgotCQkgKglEb24ndCBkcm9wIENFIG9yIFJMIGVycm9yIGZyYW1lIGFsdGhvdWdoIFJYT0sgaXMgb2ZmCi0JCSAqLwotCQlpZiAocmQtPnJkZXNjMC5SU1IgJiAoUlNSX1JYT0sgfCBSU1JfQ0UgfCBSU1JfUkwpKSB7Ci0JCQlpZiAodmVsb2NpdHlfcmVjZWl2ZV9mcmFtZSh2cHRyLCByZF9jdXJyKSA8IDApCi0JCQkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKLQkJfSBlbHNlIHsKLQkJCWlmIChyZC0+cmRlc2MwLlJTUiAmIFJTUl9DUkMpCi0JCQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKLQkJCWlmIChyZC0+cmRlc2MwLlJTUiAmIFJTUl9GQUUpCi0JCQkJc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycysrOwotCi0JCQlzdGF0cy0+cnhfZHJvcHBlZCsrOwotCQl9Ci0KLQkJcmQtPnNpemUgfD0gUlhfSU5URU47Ci0KLQkJcmRfY3VycisrOwotCQlpZiAocmRfY3VyciA+PSB2cHRyLT5vcHRpb25zLm51bXJ4KQotCQkJcmRfY3VyciA9IDA7Ci0JfSB3aGlsZSAoKyt3b3JrcyA8PSAxNSk7Ci0KLQl2cHRyLT5yeC5jdXJyID0gcmRfY3VycjsKLQotCWlmICgod29ya3MgPiAwKSAmJiAodmVsb2NpdHlfcnhfcmVmaWxsKHZwdHIpID4gMCkpCi0JCXZlbG9jaXR5X2dpdmVfbWFueV9yeF9kZXNjcyh2cHRyKTsKLQotCVZBUl9VU0VEKHN0YXRzKTsKLQlyZXR1cm4gd29ya3M7Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfcnhfY3N1bQktCWNoZWNrc3VtIHByb2Nlc3MKLSAqCUByZDogcmVjZWl2ZSBwYWNrZXQgZGVzY3JpcHRvcgotICoJQHNrYjogbmV0d29yayBsYXllciBwYWNrZXQgYnVmZmVyCi0gKgotICoJUHJvY2VzcyB0aGUgc3RhdHVzIGJpdHMgZm9yIHRoZSByZWNlaXZlZCBwYWNrZXQgYW5kIGRldGVybWluZQotICoJaWYgdGhlIGNoZWNrc3VtIHdhcyBjb21wdXRlZCBhbmQgdmVyaWZpZWQgYnkgdGhlIGhhcmR3YXJlCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHZlbG9jaXR5X3J4X2NzdW0oc3RydWN0IHJ4X2Rlc2MgKnJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQotCWlmIChyZC0+cmRlc2MxLkNTTSAmIENTTV9JUEtUKSB7Ci0JCWlmIChyZC0+cmRlc2MxLkNTTSAmIENTTV9JUE9LKSB7Ci0JCQlpZiAoKHJkLT5yZGVzYzEuQ1NNICYgQ1NNX1RDUEtUKSB8fAotCQkJCQkocmQtPnJkZXNjMS5DU00gJiBDU01fVURQS1QpKSB7Ci0JCQkJaWYgKCEocmQtPnJkZXNjMS5DU00gJiBDU01fVFVQT0spKSB7Ci0JCQkJCXJldHVybjsKLQkJCQl9CisJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCWlmICgobWFzayAmIDB4MDEpID09IDApIHsKKwkJCQltYXNrID4+PSAxOworCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCW1hc2sgPj49IDE7CisJCQljcmMgPSBjcmNfY2NpdHQoY3JjLCAmKHBhdHRlcm5baSAqIDggKyBqXSksIDEpOwogCQl9CiAJfQorCS8qCUZpbmFsbHksIGludmVydCB0aGUgcmVzdWx0IG9uY2UgdG8gZ2V0IHRoZSBjb3JyZWN0IGRhdGEgKi8KKwljcmMgPSB+Y3JjOworCXJldHVybiBiaXRyZXYzMihjcmMpID4+IDE2OwogfQogCiAvKioKLSAqCXZlbG9jaXR5X3J4X2NvcHkJLQlpbiBwbGFjZSBSeCBjb3B5IGZvciBzbWFsbCBwYWNrZXRzCi0gKglAcnhfc2tiOiBuZXR3b3JrIGxheWVyIHBhY2tldCBidWZmZXIgY2FuZGlkYXRlCi0gKglAcGt0X3NpemU6IHJlY2VpdmVkIGRhdGEgc2l6ZQotICoJQHJkOiByZWNlaXZlIHBhY2tldCBkZXNjcmlwdG9yCi0gKglAZGV2OiBuZXR3b3JrIGRldmljZQorICoJdmVsb2NpdHlfc2V0X3dvbAktCXNldCB1cCBmb3Igd2FrZSBvbiBsYW4KKyAqCUB2cHRyOiB2ZWxvY2l0eSB0byBzZXQgV09MIHN0YXR1cyBvbgogICoKLSAqCVJlcGxhY2UgdGhlIGN1cnJlbnQgc2tiIHRoYXQgaXMgc2NoZWR1bGVkIGZvciBSeCBwcm9jZXNzaW5nIGJ5IGEKLSAqCXNob3J0ZXIsIGltbWVkaWF0bHkgYWxsb2NhdGVkIHNrYiwgaWYgdGhlIHJlY2VpdmVkIHBhY2tldCBpcyBzbWFsbAotICoJZW5vdWdoLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBpZiB0aGUgcmVjZWl2ZWQKLSAqCXBhY2tldCBpcyB0b28gYmlnIG9yIGlmIG1lbW9yeSBpcyBleGhhdXN0ZWQuCisgKglTZXQgYSBjYXJkIHVwIGZvciB3YWtlIG9uIGxhbiBlaXRoZXIgYnkgdW5pY2FzdCBvciBieQorICoJQVJQIHBhY2tldC4KKyAqCisgKglGSVhNRTogY2hlY2sgc3RhdGljIGJ1ZmZlciBpcyBzYWZlIGhlcmUKICAqLwotc3RhdGljIGludCB2ZWxvY2l0eV9yeF9jb3B5KHN0cnVjdCBza19idWZmICoqcnhfc2tiLCBpbnQgcGt0X3NpemUsCi0JCQkgICAgc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCitzdGF0aWMgaW50IHZlbG9jaXR5X3NldF93b2woc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCiB7Ci0JaW50IHJldCA9IC0xOwotCWlmIChwa3Rfc2l6ZSA8IHJ4X2NvcHlicmVhaykgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKLQotCQluZXdfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYih2cHRyLT5kZXYsIHBrdF9zaXplICsgMik7Ci0JCWlmIChuZXdfc2tiKSB7Ci0JCQluZXdfc2tiLT5pcF9zdW1tZWQgPSByeF9za2JbMF0tPmlwX3N1bW1lZDsKLQkJCXNrYl9yZXNlcnZlKG5ld19za2IsIDIpOwotCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YSgqcnhfc2tiLCBuZXdfc2tiLT5kYXRhLCBwa3Rfc2l6ZSk7Ci0JCQkqcnhfc2tiID0gbmV3X3NrYjsKLQkJCXJldCA9IDA7Ci0JCX0KLQotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqCXZlbG9jaXR5X2lwaF9yZWFsaWduCS0JSVAgaGVhZGVyIGFsaWdubWVudAotICoJQHZwdHI6IHZlbG9jaXR5IHdlIGFyZSBoYW5kbGluZwotICoJQHNrYjogbmV0d29yayBsYXllciBwYWNrZXQgYnVmZmVyCi0gKglAcGt0X3NpemU6IHJlY2VpdmVkIGRhdGEgc2l6ZQotICoKLSAqCUFsaWduIElQIGhlYWRlciBvbiBhIDIgYnl0ZXMgYm91bmRhcnkuIFRoaXMgYmVoYXZpb3IgY2FuIGJlCi0gKgljb25maWd1cmVkIGJ5IHRoZSB1c2VyLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdmVsb2NpdHlfaXBoX3JlYWxpZ24oc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsCi0JCQkJCXN0cnVjdCBza19idWZmICpza2IsIGludCBwa3Rfc2l6ZSkKLXsKLQlpZiAodnB0ci0+ZmxhZ3MgJiBWRUxPQ0lUWV9GTEFHU19JUF9BTElHTikgewotCQltZW1tb3ZlKHNrYi0+ZGF0YSArIDIsIHNrYi0+ZGF0YSwgcGt0X3NpemUpOwotCQlza2JfcmVzZXJ2ZShza2IsIDIpOwotCX0KLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9yZWNlaXZlX2ZyYW1lCS0JcmVjZWl2ZWQgcGFja2V0IHByb2Nlc3NvcgotICoJQHZwdHI6IHZlbG9jaXR5IHdlIGFyZSBoYW5kbGluZwotICoJQGlkeDogcmluZyBpbmRleAotICoKLSAqCUEgcGFja2V0IGhhcyBhcnJpdmVkLiBXZSBwcm9jZXNzIHRoZSBwYWNrZXQgYW5kIGlmIGFwcHJvcHJpYXRlCi0gKglwYXNzIHRoZSBmcmFtZSB1cCB0aGUgbmV0d29yayBzdGFjawotICovCi0KLXN0YXRpYyBpbnQgdmVsb2NpdHlfcmVjZWl2ZV9mcmFtZShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgaW50IGlkeCkKLXsKLQl2b2lkICgqcGNpX2FjdGlvbikoc3RydWN0IHBjaV9kZXYgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ2cHRyLT5kZXYtPnN0YXRzOwotCXN0cnVjdCB2ZWxvY2l0eV9yZF9pbmZvICpyZF9pbmZvID0gJih2cHRyLT5yeC5pbmZvW2lkeF0pOwotCXN0cnVjdCByeF9kZXNjICpyZCA9ICYodnB0ci0+cngucmluZ1tpZHhdKTsKLQlpbnQgcGt0X2xlbiA9IGxlMTZfdG9fY3B1KHJkLT5yZGVzYzAubGVuKSAmIDB4M2ZmZjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JaWYgKHJkLT5yZGVzYzAuUlNSICYgKFJTUl9TVFAgfCBSU1JfRURQKSkgewotCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX1ZFUkJPU0UsIEtFUk5fRVJSICIgJXMgOiB0aGUgcmVjZWl2ZWQgZnJhbWUgc3BhbiBtdWx0cGxlIFJEcy5cbiIsIHZwdHItPmRldi0+bmFtZSk7Ci0JCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChyZC0+cmRlc2MwLlJTUiAmIFJTUl9NQVIpCi0JCXN0YXRzLT5tdWx0aWNhc3QrKzsKLQotCXNrYiA9IHJkX2luZm8tPnNrYjsKLQotCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSh2cHRyLT5wZGV2LCByZF9pbmZvLT5za2JfZG1hLAotCQkJCSAgICB2cHRyLT5yeC5idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0KLQkvKgotCSAqCURyb3AgZnJhbWUgbm90IG1lZXRpbmcgSUVFRSA4MDIuMwotCSAqLwotCi0JaWYgKHZwdHItPmZsYWdzICYgVkVMT0NJVFlfRkxBR1NfVkFMX1BLVF9MRU4pIHsKLQkJaWYgKHJkLT5yZGVzYzAuUlNSICYgUlNSX1JMKSB7Ci0JCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlwY2lfYWN0aW9uID0gcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlOwotCi0JdmVsb2NpdHlfcnhfY3N1bShyZCwgc2tiKTsKLQotCWlmICh2ZWxvY2l0eV9yeF9jb3B5KCZza2IsIHBrdF9sZW4sIHZwdHIpIDwgMCkgewotCQl2ZWxvY2l0eV9pcGhfcmVhbGlnbih2cHRyLCBza2IsIHBrdF9sZW4pOwotCQlwY2lfYWN0aW9uID0gcGNpX3VubWFwX3NpbmdsZTsKLQkJcmRfaW5mby0+c2tiID0gTlVMTDsKLQl9Ci0KLQlwY2lfYWN0aW9uKHZwdHItPnBkZXYsIHJkX2luZm8tPnNrYl9kbWEsIHZwdHItPnJ4LmJ1Zl9zeiwKLQkJICAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQotCXNrYl9wdXQoc2tiLCBwa3RfbGVuIC0gNCk7Ci0Jc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgdnB0ci0+ZGV2KTsKLQotCWlmICh2cHRyLT52bGdycCAmJiAocmQtPnJkZXNjMC5SU1IgJiBSU1JfREVUQUcpKSB7Ci0JCXZsYW5faHdhY2NlbF9yeChza2IsIHZwdHItPnZsZ3JwLAotCQkJCXN3YWIxNihsZTE2X3RvX2NwdShyZC0+cmRlc2MxLlBRVEFHKSkpOwotCX0gZWxzZQotCQluZXRpZl9yeChza2IpOwotCi0Jc3RhdHMtPnJ4X2J5dGVzICs9IHBrdF9sZW47Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9hbGxvY19yeF9idWYJLQlhbGxvY2F0ZSBhbGlnbmVkIHJlY2VpdmUgYnVmZmVyCi0gKglAdnB0cjogdmVsb2NpdHkKLSAqCUBpZHg6IHJpbmcgaW5kZXgKLSAqCi0gKglBbGxvY2F0ZSBhIG5ldyBmdWxsIHNpemVkIGJ1ZmZlciBmb3IgdGhlIHJlY2VwdGlvbiBvZiBhIGZyYW1lIGFuZAotICoJbWFwIGl0IGludG8gUENJIHNwYWNlIGZvciB0aGUgaGFyZHdhcmUgdG8gdXNlLiBUaGUgaGFyZHdhcmUKLSAqCXJlcXVpcmVzICo2NCogYnl0ZSBhbGlnbm1lbnQgb2YgdGhlIGJ1ZmZlciB3aGljaCBtYWtlcyBsaWZlCi0gKglsZXNzIGZ1biB0aGFuIHdvdWxkIGJlIGlkZWFsLgotICovCi0KLXN0YXRpYyBpbnQgdmVsb2NpdHlfYWxsb2NfcnhfYnVmKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBpbnQgaWR4KQotewotCXN0cnVjdCByeF9kZXNjICpyZCA9ICYodnB0ci0+cngucmluZ1tpZHhdKTsKLQlzdHJ1Y3QgdmVsb2NpdHlfcmRfaW5mbyAqcmRfaW5mbyA9ICYodnB0ci0+cnguaW5mb1tpZHhdKTsKLQotCXJkX2luZm8tPnNrYiA9IGRldl9hbGxvY19za2IodnB0ci0+cnguYnVmX3N6ICsgNjQpOwotCWlmIChyZF9pbmZvLT5za2IgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKgotCSAqCURvIHRoZSBneW1uYXN0aWNzIHRvIGdldCB0aGUgYnVmZmVyIGhlYWQgZm9yIGRhdGEgYXQKLQkgKgk2NGJ5dGUgYWxpZ25tZW50LgotCSAqLwotCXNrYl9yZXNlcnZlKHJkX2luZm8tPnNrYiwgKHVuc2lnbmVkIGxvbmcpIHJkX2luZm8tPnNrYi0+ZGF0YSAmIDYzKTsKLQlyZF9pbmZvLT5za2JfZG1hID0gcGNpX21hcF9zaW5nbGUodnB0ci0+cGRldiwgcmRfaW5mby0+c2tiLT5kYXRhLAotCQkJCQl2cHRyLT5yeC5idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0KLQkvKgotCSAqCUZpbGwgaW4gdGhlIGRlc2NyaXB0b3IgdG8gbWF0Y2gKLQkgKi8KLQotCSooKHUzMiAqKSAmIChyZC0+cmRlc2MwKSkgPSAwOwotCXJkLT5zaXplID0gY3B1X3RvX2xlMTYodnB0ci0+cnguYnVmX3N6KSB8IFJYX0lOVEVOOwotCXJkLT5wYV9sb3cgPSBjcHVfdG9fbGUzMihyZF9pbmZvLT5za2JfZG1hKTsKLQlyZC0+cGFfaGlnaCA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJdHhfc3J2CQktCXRyYW5zbWl0IGludGVycnVwdCBzZXJ2aWNlCi0gKglAdnB0cjsgVmVsb2NpdHkKLSAqCUBzdGF0dXM6Ci0gKgotICoJU2NhbiB0aGUgcXVldWVzIGxvb2tpbmcgZm9yIHRyYW5zbWl0dGVkIHBhY2tldHMgdGhhdAotICoJd2UgY2FuIGNvbXBsZXRlIGFuZCBjbGVhbiB1cC4gVXBkYXRlIGFueSBzdGF0aXN0aWNzIGFzCi0gKgluZWNlc3NhcnkvCi0gKi8KLQotc3RhdGljIGludCB2ZWxvY2l0eV90eF9zcnYoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIHUzMiBzdGF0dXMpCi17Ci0Jc3RydWN0IHR4X2Rlc2MgKnRkOwotCWludCBxbnVtOwotCWludCBmdWxsID0gMDsKLQlpbnQgaWR4OwotCWludCB3b3JrcyA9IDA7Ci0Jc3RydWN0IHZlbG9jaXR5X3RkX2luZm8gKnRkaW5mbzsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdnB0ci0+ZGV2LT5zdGF0czsKLQotCWZvciAocW51bSA9IDA7IHFudW0gPCB2cHRyLT50eC5udW1xOyBxbnVtKyspIHsKLQkJZm9yIChpZHggPSB2cHRyLT50eC50YWlsW3FudW1dOyB2cHRyLT50eC51c2VkW3FudW1dID4gMDsKLQkJCWlkeCA9IChpZHggKyAxKSAlIHZwdHItPm9wdGlvbnMubnVtdHgpIHsKLQotCQkJLyoKLQkJCSAqCUdldCBUeCBEZXNjcmlwdG9yCi0JCQkgKi8KLQkJCXRkID0gJih2cHRyLT50eC5yaW5nc1txbnVtXVtpZHhdKTsKLQkJCXRkaW5mbyA9ICYodnB0ci0+dHguaW5mb3NbcW51bV1baWR4XSk7Ci0KLQkJCWlmICh0ZC0+dGRlc2MwLmxlbiAmIE9XTkVEX0JZX05JQykKLQkJCQlicmVhazsKLQotCQkJaWYgKCh3b3JrcysrID4gMTUpKQotCQkJCWJyZWFrOwotCi0JCQlpZiAodGQtPnRkZXNjMC5UU1IgJiBUU1IwX1RFUlIpIHsKLQkJCQlzdGF0cy0+dHhfZXJyb3JzKys7Ci0JCQkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKLQkJCQlpZiAodGQtPnRkZXNjMC5UU1IgJiBUU1IwX0NESCkKLQkJCQkJc3RhdHMtPnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKLQkJCQlpZiAodGQtPnRkZXNjMC5UU1IgJiBUU1IwX0NSUykKLQkJCQkJc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7Ci0JCQkJaWYgKHRkLT50ZGVzYzAuVFNSICYgVFNSMF9BQlQpCi0JCQkJCXN0YXRzLT50eF9hYm9ydGVkX2Vycm9ycysrOwotCQkJCWlmICh0ZC0+dGRlc2MwLlRTUiAmIFRTUjBfT1dDKQotCQkJCQlzdGF0cy0+dHhfd2luZG93X2Vycm9ycysrOwotCQkJfSBlbHNlIHsKLQkJCQlzdGF0cy0+dHhfcGFja2V0cysrOwotCQkJCXN0YXRzLT50eF9ieXRlcyArPSB0ZGluZm8tPnNrYi0+bGVuOwotCQkJfQotCQkJdmVsb2NpdHlfZnJlZV90eF9idWYodnB0ciwgdGRpbmZvKTsKLQkJCXZwdHItPnR4LnVzZWRbcW51bV0tLTsKLQkJfQotCQl2cHRyLT50eC50YWlsW3FudW1dID0gaWR4OwotCi0JCWlmIChBVkFJTF9URCh2cHRyLCBxbnVtKSA8IDEpIHsKLQkJCWZ1bGwgPSAxOwotCQl9Ci0JfQotCS8qCi0JICoJTG9vayB0byBzZWUgaWYgd2Ugc2hvdWxkIGtpY2sgdGhlIHRyYW5zbWl0IG5ldHdvcmsKLQkgKglsYXllciBmb3IgbW9yZSB3b3JrLgotCSAqLwotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHZwdHItPmRldikgJiYgKGZ1bGwgPT0gMCkKLQkgICAgJiYgKCEodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX0xJTktfRkFJTCkpKSB7Ci0JCW5ldGlmX3dha2VfcXVldWUodnB0ci0+ZGV2KTsKLQl9Ci0JcmV0dXJuIHdvcmtzOwotfQotCi0vKioKLSAqCXZlbG9jaXR5X3ByaW50X2xpbmtfc3RhdHVzCS0JbGluayBzdGF0dXMgcmVwb3J0aW5nCi0gKglAdnB0cjogdmVsb2NpdHkgdG8gcmVwb3J0IG9uCi0gKgotICoJVHVybiB0aGUgbGluayBzdGF0dXMgb2YgdGhlIHZlbG9jaXR5IGNhcmQgaW50byBhIGtlcm5lbCBsb2cKLSAqCWRlc2NyaXB0aW9uIG9mIHRoZSBuZXcgbGluayBzdGF0ZSwgZGV0YWlsaW5nIHNwZWVkIGFuZCBkdXBsZXgKLSAqCXN0YXR1cwotICovCi0KLXN0YXRpYyB2b2lkIHZlbG9jaXR5X3ByaW50X2xpbmtfc3RhdHVzKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQotewotCi0JaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9MSU5LX0ZBSUwpIHsKLQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX05PVElDRSAiJXM6IGZhaWxlZCB0byBkZXRlY3QgY2FibGUgbGlua1xuIiwgdnB0ci0+ZGV2LT5uYW1lKTsKLQl9IGVsc2UgaWYgKHZwdHItPm9wdGlvbnMuc3BkX2RweCA9PSBTUERfRFBYX0FVVE8pIHsKLQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX05PVElDRSAiJXM6IExpbmsgYXV0by1uZWdvdGlhdGlvbiIsIHZwdHItPmRldi0+bmFtZSk7Ci0KLQkJaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9TUEVFRF8xMDAwKQotCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIHNwZWVkIDEwMDBNIGJwcyIpOwotCQllbHNlIGlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfU1BFRURfMTAwKQotCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIHNwZWVkIDEwME0gYnBzIik7Ci0JCWVsc2UKLQkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIiBzcGVlZCAxME0gYnBzIik7Ci0KLQkJaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkKLQkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIiBmdWxsIGR1cGxleFxuIik7Ci0JCWVsc2UKLQkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIiBoYWxmIGR1cGxleFxuIik7Ci0JfSBlbHNlIHsKLQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX05PVElDRSAiJXM6IExpbmsgZm9yY2VkIiwgdnB0ci0+ZGV2LT5uYW1lKTsKLQkJc3dpdGNoICh2cHRyLT5vcHRpb25zLnNwZF9kcHgpIHsKLQkJY2FzZSBTUERfRFBYXzEwMF9IQUxGOgotCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIHNwZWVkIDEwME0gYnBzIGhhbGYgZHVwbGV4XG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIFNQRF9EUFhfMTAwX0ZVTEw6Ci0JCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICIgc3BlZWQgMTAwTSBicHMgZnVsbCBkdXBsZXhcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BEX0RQWF8xMF9IQUxGOgotCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIHNwZWVkIDEwTSBicHMgaGFsZiBkdXBsZXhcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BEX0RQWF8xMF9GVUxMOgotCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIHNwZWVkIDEwTSBicHMgZnVsbCBkdXBsZXhcbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9lcnJvcgktCWhhbmRsZSBlcnJvciBmcm9tIGNvbnRyb2xsZXIKLSAqCUB2cHRyOiB2ZWxvY2l0eQotICoJQHN0YXR1czogY2FyZCBzdGF0dXMKLSAqCi0gKglQcm9jZXNzIGFuIGVycm9yIHJlcG9ydCBmcm9tIHRoZSBoYXJkd2FyZSBhbmQgYXR0ZW1wdCB0byByZWNvdmVyCi0gKgl0aGUgY2FyZCBpdHNlbGYuIEF0IHRoZSBtb21lbnQgd2UgY2Fubm90IHJlY292ZXIgZnJvbSBzb21lCi0gKgl0aGVvcmV0aWNhbGx5IGltcG9zc2libGUgZXJyb3JzIGJ1dCB0aGlzIGNvdWxkIGJlIGZpeGVkIHVzaW5nCi0gKgl0aGUgcGNpX2RldmljZV9mYWlsZWQgbG9naWMgdG8gYm91bmNlIHRoZSBoYXJkd2FyZQotICoKLSAqLwotCi1zdGF0aWMgdm9pZCB2ZWxvY2l0eV9lcnJvcihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgaW50IHN0YXR1cykKLXsKLQotCWlmIChzdGF0dXMgJiBJU1JfVFhTVExJKSB7Ci0JCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwotCi0JCXByaW50ayhLRVJOX0VSUiAiVEQgc3RydWN0dXJlIGVycm9yIFREaW5kZXg9JWh4XG4iLCByZWFkdygmcmVncy0+VERJZHhbMF0pKTsKLQkJQllURV9SRUdfQklUU19PTihUWEVTUl9URFNUUiwgJnJlZ3MtPlRYRVNSKTsKLQkJd3JpdGV3KFRSRENTUl9SVU4sICZyZWdzLT5URENTUkNscik7Ci0JCW5ldGlmX3N0b3BfcXVldWUodnB0ci0+ZGV2KTsKLQotCQkvKiBGSVhNRTogcG9ydCBvdmVyIHRoZSBwY2lfZGV2aWNlX2ZhaWxlZCBjb2RlIGFuZCB1c2UgaXQKLQkJICAgaGVyZSAqLwotCX0KLQotCWlmIChzdGF0dXMgJiBJU1JfU1JDSSkgewotCQlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKLQkJaW50IGxpbmtlZDsKLQotCQlpZiAodnB0ci0+b3B0aW9ucy5zcGRfZHB4ID09IFNQRF9EUFhfQVVUTykgewotCQkJdnB0ci0+bWlpX3N0YXR1cyA9IGNoZWNrX2Nvbm5lY3Rpb25fdHlwZShyZWdzKTsKLQotCQkJLyoKLQkJCSAqCUlmIGl0IGlzIGEgMzExOSwgZGlzYWJsZSBmcmFtZSBidXJzdGluZyBpbgotCQkJICoJaGFsZmR1cGxleCBtb2RlIGFuZCBlbmFibGUgaXQgaW4gZnVsbGR1cGxleAotCQkJICoJIG1vZGUKLQkJCSAqLwotCQkJaWYgKHZwdHItPnJldl9pZCA8IFJFVl9JRF9WVDMyMTZfQTApIHsKLQkJCQlpZiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX0RVUExFWF9GVUxMKQotCQkJCQlCWVRFX1JFR19CSVRTX09OKFRDUl9UQjJCRElTLCAmcmVncy0+VENSKTsKLQkJCQllbHNlCi0JCQkJCUJZVEVfUkVHX0JJVFNfT0ZGKFRDUl9UQjJCRElTLCAmcmVncy0+VENSKTsKLQkJCX0KLQkJCS8qCi0JCQkgKglPbmx5IGVuYWJsZSBDRCBoZWFydCBiZWF0IGNvdW50ZXIgaW4gMTBIRCBtb2RlCi0JCQkgKi8KLQkJCWlmICghKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkgJiYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9TUEVFRF8xMCkpIHsKLQkJCQlCWVRFX1JFR19CSVRTX09GRihURVNUQ0ZHX0hCRElTLCAmcmVncy0+VEVTVENGRyk7Ci0JCQl9IGVsc2UgewotCQkJCUJZVEVfUkVHX0JJVFNfT04oVEVTVENGR19IQkRJUywgJnJlZ3MtPlRFU1RDRkcpOwotCQkJfQotCQl9Ci0JCS8qCi0JCSAqCUdldCBsaW5rIHN0YXR1cyBmcm9tIFBIWVNSMAotCQkgKi8KLQkJbGlua2VkID0gcmVhZGIoJnJlZ3MtPlBIWVNSMCkgJiBQSFlTUjBfTElOS0dEOwotCi0JCWlmIChsaW5rZWQpIHsKLQkJCXZwdHItPm1paV9zdGF0dXMgJj0gflZFTE9DSVRZX0xJTktfRkFJTDsKLQkJCW5ldGlmX2NhcnJpZXJfb24odnB0ci0+ZGV2KTsKLQkJfSBlbHNlIHsKLQkJCXZwdHItPm1paV9zdGF0dXMgfD0gVkVMT0NJVFlfTElOS19GQUlMOwotCQkJbmV0aWZfY2Fycmllcl9vZmYodnB0ci0+ZGV2KTsKLQkJfQotCi0JCXZlbG9jaXR5X3ByaW50X2xpbmtfc3RhdHVzKHZwdHIpOwotCQllbmFibGVfZmxvd19jb250cm9sX2FiaWxpdHkodnB0cik7Ci0KLQkJLyoKLQkJICoJUmUtZW5hYmxlIGF1dG8tcG9sbGluZyBiZWNhdXNlIFNSQ0kgd2lsbCBkaXNhYmxlCi0JCSAqCWF1dG8tcG9sbGluZwotCQkgKi8KLQotCQllbmFibGVfbWlpX2F1dG9wb2xsKHJlZ3MpOwotCi0JCWlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfTElOS19GQUlMKQotCQkJbmV0aWZfc3RvcF9xdWV1ZSh2cHRyLT5kZXYpOwotCQllbHNlCi0JCQluZXRpZl93YWtlX3F1ZXVlKHZwdHItPmRldik7Ci0KLQl9OwotCWlmIChzdGF0dXMgJiBJU1JfTUlCRkkpCi0JCXZlbG9jaXR5X3VwZGF0ZV9od19taWJzKHZwdHIpOwotCWlmIChzdGF0dXMgJiBJU1JfTFNURUkpCi0JCW1hY19yeF9xdWV1ZV93YWtlKHZwdHItPm1hY19yZWdzKTsKLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9mcmVlX3R4X2J1ZgktCWZyZWUgdHJhbnNtaXQgYnVmZmVyCi0gKglAdnB0cjogdmVsb2NpdHkKLSAqCUB0ZGluZm86IGJ1ZmZlcgotICoKLSAqCVJlbGVhc2UgYW4gdHJhbnNtaXQgYnVmZmVyLiBJZiB0aGUgYnVmZmVyIHdhcyBwcmVhbGxvY2F0ZWQgdGhlbgotICoJcmVjeWNsZSBpdCwgaWYgbm90IHRoZW4gdW5tYXAgdGhlIGJ1ZmZlci4KLSAqLwotCi1zdGF0aWMgdm9pZCB2ZWxvY2l0eV9mcmVlX3R4X2J1ZihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgc3RydWN0IHZlbG9jaXR5X3RkX2luZm8gKnRkaW5mbykKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGRpbmZvLT5za2I7CisJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKwlzdGF0aWMgdTggYnVmWzI1Nl07CiAJaW50IGk7Ci0JaW50IHBrdGxlbjsKKworCXN0YXRpYyB1MzIgbWFza19wYXR0ZXJuWzJdWzRdID0geworCQl7MHgwMDIwMzAwMCwgMHgwMDAwMDNDMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwfSwgLyogQVJQICovCisJCXsweGZmZmZmMDAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDAwMGZmZmZ9CSAvKiBNYWdpYyBQYWNrZXQgKi8KKwl9OworCisJd3JpdGV3KDB4RkZGRiwgJnJlZ3MtPldPTENSQ2xyKTsKKwl3cml0ZWIoV09MQ0ZHX1NBQiB8IFdPTENGR19TQU0sICZyZWdzLT5XT0xDRkdTZXQpOworCXdyaXRldyhXT0xDUl9NQUdJQ19FTiwgJnJlZ3MtPldPTENSU2V0KTsKIAogCS8qCi0JICoJRG9uJ3QgdW5tYXAgdGhlIHByZS1hbGxvY2F0ZWQgdHhfYnVmcworCSAgIGlmICh2cHRyLT53b2xfb3B0cyAmIFZFTE9DSVRZX1dPTF9QSFkpCisJICAgd3JpdGV3KChXT0xDUl9MSU5LT05fRU58V09MQ1JfTElOS09GRl9FTiksICZyZWdzLT5XT0xDUlNldCk7CiAJICovCi0JaWYgKHRkaW5mby0+c2tiX2RtYSkgewogCi0JCXBrdGxlbiA9IG1heF90KHVuc2lnbmVkIGludCwgc2tiLT5sZW4sIEVUSF9aTEVOKTsKLQkJZm9yIChpID0gMDsgaSA8IHRkaW5mby0+bnNrYl9kbWE7IGkrKykgewotI2lmZGVmIFZFTE9DSVRZX1pFUk9fQ09QWV9TVVBQT1JUCi0JCQlwY2lfdW5tYXBfc2luZ2xlKHZwdHItPnBkZXYsIHRkaW5mby0+c2tiX2RtYVtpXSwgbGUxNl90b19jcHUodGQtPnRkZXNjMS5sZW4pLCBQQ0lfRE1BX1RPREVWSUNFKTsKLSNlbHNlCi0JCQlwY2lfdW5tYXBfc2luZ2xlKHZwdHItPnBkZXYsIHRkaW5mby0+c2tiX2RtYVtpXSwgcGt0bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLSNlbmRpZgotCQkJdGRpbmZvLT5za2JfZG1hW2ldID0gMDsKLQkJfQotCX0KLQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotCXRkaW5mby0+c2tiID0gTlVMTDsKLX0KKwlpZiAodnB0ci0+d29sX29wdHMgJiBWRUxPQ0lUWV9XT0xfVUNBU1QpCisJCXdyaXRldyhXT0xDUl9VTklDQVNUX0VOLCAmcmVncy0+V09MQ1JTZXQpOwogCi1zdGF0aWMgaW50IHZlbG9jaXR5X2luaXRfcmluZ3Moc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIGludCBtdHUpCi17Ci0JaW50IHJldDsKKwlpZiAodnB0ci0+d29sX29wdHMgJiBWRUxPQ0lUWV9XT0xfQVJQKSB7CisJCXN0cnVjdCBhcnBfcGFja2V0ICphcnAgPSAoc3RydWN0IGFycF9wYWNrZXQgKikgYnVmOworCQl1MTYgY3JjOworCQltZW1zZXQoYnVmLCAwLCBzaXplb2Yoc3RydWN0IGFycF9wYWNrZXQpICsgNyk7CiAKLQl2ZWxvY2l0eV9zZXRfcnhidWZzaXplKHZwdHIsIG10dSk7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQl3cml0ZWwobWFza19wYXR0ZXJuWzBdW2ldLCAmcmVncy0+Qnl0ZU1hc2tbMF1baV0pOwogCi0JcmV0ID0gdmVsb2NpdHlfaW5pdF9kbWFfcmluZ3ModnB0cik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OworCQlhcnAtPnR5cGUgPSBodG9ucyhFVEhfUF9BUlApOworCQlhcnAtPmFyX29wID0gaHRvbnMoMSk7CiAKLQlyZXQgPSB2ZWxvY2l0eV9pbml0X3JkX3JpbmcodnB0cik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyX2ZyZWVfZG1hX3JpbmdzXzA7CisJCW1lbWNweShhcnAtPmFyX3RpcCwgdnB0ci0+aXBfYWRkciwgNCk7CiAKLQlyZXQgPSB2ZWxvY2l0eV9pbml0X3RkX3JpbmcodnB0cik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyX2ZyZWVfcmRfcmluZ18xOwotb3V0OgotCXJldHVybiByZXQ7CisJCWNyYyA9IHdvbF9jYWxjX2NyYygoc2l6ZW9mKHN0cnVjdCBhcnBfcGFja2V0KSArIDcpIC8gOCwgYnVmLAorCQkJCSh1OCAqKSAmIG1hc2tfcGF0dGVyblswXVswXSk7CiAKLWVycl9mcmVlX3JkX3JpbmdfMToKLQl2ZWxvY2l0eV9mcmVlX3JkX3JpbmcodnB0cik7Ci1lcnJfZnJlZV9kbWFfcmluZ3NfMDoKLQl2ZWxvY2l0eV9mcmVlX2RtYV9yaW5ncyh2cHRyKTsKLQlnb3RvIG91dDsKLX0KLQotc3RhdGljIHZvaWQgdmVsb2NpdHlfZnJlZV9yaW5ncyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKLXsKLQl2ZWxvY2l0eV9mcmVlX3RkX3JpbmcodnB0cik7Ci0JdmVsb2NpdHlfZnJlZV9yZF9yaW5nKHZwdHIpOwotCXZlbG9jaXR5X2ZyZWVfZG1hX3JpbmdzKHZwdHIpOwotfQotCi0vKioKLSAqCXZlbG9jaXR5X29wZW4JCS0JaW50ZXJmYWNlIGFjdGl2YXRpb24gY2FsbGJhY2sKLSAqCUBkZXY6IG5ldHdvcmsgbGF5ZXIgZGV2aWNlIHRvIG9wZW4KLSAqCi0gKglDYWxsZWQgd2hlbiB0aGUgbmV0d29yayBsYXllciBicmluZ3MgdGhlIGludGVyZmFjZSB1cC4gUmV0dXJucwotICoJYSBuZWdhdGl2ZSBwb3NpeCBlcnJvciBjb2RlIG9uIGZhaWx1cmUsIG9yIHplcm8gb24gc3VjY2Vzcy4KLSAqCi0gKglBbGwgdGhlIHJpbmcgYWxsb2NhdGlvbiBhbmQgc2V0IHVwIGlzIGRvbmUgb24gb3BlbiBmb3IgdGhpcwotICoJYWRhcHRlciB0byBtaW5pbWlzZSBtZW1vcnkgdXNhZ2Ugd2hlbiBpbmFjdGl2ZQotICovCi0KLXN0YXRpYyBpbnQgdmVsb2NpdHlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gdmVsb2NpdHlfaW5pdF9yaW5ncyh2cHRyLCBkZXYtPm10dSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JLyogRW5zdXJlIGNoaXAgaXMgcnVubmluZyAqLwotCXBjaV9zZXRfcG93ZXJfc3RhdGUodnB0ci0+cGRldiwgUENJX0QwKTsKLQotCXZlbG9jaXR5X2dpdmVfbWFueV9yeF9kZXNjcyh2cHRyKTsKLQotCXZlbG9jaXR5X2luaXRfcmVnaXN0ZXJzKHZwdHIsIFZFTE9DSVRZX0lOSVRfQ09MRCk7Ci0KLQlyZXQgPSByZXF1ZXN0X2lycSh2cHRyLT5wZGV2LT5pcnEsICZ2ZWxvY2l0eV9pbnRyLCBJUlFGX1NIQVJFRCwKLQkJCSAgZGV2LT5uYW1lLCBkZXYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCS8qIFBvd2VyIGRvd24gdGhlIGNoaXAgKi8KLQkJcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDNob3QpOwotCQl2ZWxvY2l0eV9mcmVlX3JpbmdzKHZwdHIpOwotCQlnb3RvIG91dDsKKwkJd3JpdGV3KGNyYywgJnJlZ3MtPlBhdHRlcm5DUkNbMF0pOworCQl3cml0ZXcoV09MQ1JfQVJQX0VOLCAmcmVncy0+V09MQ1JTZXQpOwogCX0KIAotCW1hY19lbmFibGVfaW50KHZwdHItPm1hY19yZWdzKTsKLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCXZwdHItPmZsYWdzIHw9IFZFTE9DSVRZX0ZMQUdTX09QRU5FRDsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQorCUJZVEVfUkVHX0JJVFNfT04oUFdDRkdfV09MVFlQRSwgJnJlZ3MtPlBXQ0ZHU2V0KTsKKwlCWVRFX1JFR19CSVRTX09OKFBXQ0ZHX0xFR0FDWV9XT0xFTiwgJnJlZ3MtPlBXQ0ZHU2V0KTsKIAotLyoqCi0gKgl2ZWxvY2l0eV9jaGFuZ2VfbXR1CS0JTVRVIGNoYW5nZSBjYWxsYmFjawotICoJQGRldjogbmV0d29yayBkZXZpY2UKLSAqCUBuZXdfbXR1OiBkZXNpcmVkIE1UVQotICoKLSAqCUhhbmRsZSByZXF1ZXN0cyBmcm9tIHRoZSBuZXR3b3JraW5nIGxheWVyIGZvciBNVFUgY2hhbmdlIG9uCi0gKgl0aGlzIGludGVyZmFjZS4gSXQgZ2V0cyBjYWxsZWQgb24gYSBjaGFuZ2UgYnkgdGhlIG5ldHdvcmsgbGF5ZXIuCi0gKglSZXR1cm4gemVybyBmb3Igc3VjY2VzcyBvciBuZWdhdGl2ZSBwb3NpeCBlcnJvciBjb2RlLgotICovCisJd3JpdGV3KDB4MEZGRiwgJnJlZ3MtPldPTFNSQ2xyKTsKIAotc3RhdGljIGludCB2ZWxvY2l0eV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQotewotCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmV0ID0gMDsKKwlpZiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX0FVVE9ORUdfRU5BQkxFKSB7CisJCWlmIChQSFlJRF9HRVRfUEhZX0lEKHZwdHItPnBoeV9pZCkgPT0gUEhZSURfQ0lDQURBX0NTODIwMSkKKwkJCU1JSV9SRUdfQklUU19PTihBVVhDUl9NRFBQUywgTUlJX1JFR19BVVhDUiwgdnB0ci0+bWFjX3JlZ3MpOwogCi0JaWYgKChuZXdfbXR1IDwgVkVMT0NJVFlfTUlOX01UVSkgfHwgbmV3X210dSA+IChWRUxPQ0lUWV9NQVhfTVRVKSkgewotCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0VSUiwgS0VSTl9OT1RJQ0UgIiVzOiBJbnZhbGlkIE1UVS5cbiIsCi0JCQkJdnB0ci0+ZGV2LT5uYW1lKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXRfMDsKKwkJTUlJX1JFR19CSVRTX09GRihHMTAwMENSXzEwMDBGRCB8IEcxMDAwQ1JfMTAwMCwgTUlJX1JFR19HMTAwMENSLCB2cHRyLT5tYWNfcmVncyk7CiAJfQogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJZGV2LT5tdHUgPSBuZXdfbXR1OwotCQlnb3RvIG91dF8wOworCWlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfU1BFRURfMTAwMCkKKwkJTUlJX1JFR19CSVRTX09OKEJNQ1JfUkVBVVRPLCBNSUlfUkVHX0JNQ1IsIHZwdHItPm1hY19yZWdzKTsKKworCUJZVEVfUkVHX0JJVFNfT04oQ0hJUEdDUl9GQ01PREUsICZyZWdzLT5DSElQR0NSKTsKKworCXsKKwkJdTggR0NSOworCQlHQ1IgPSByZWFkYigmcmVncy0+Q0hJUEdDUik7CisJCUdDUiA9IChHQ1IgJiB+Q0hJUEdDUl9GQ0dNSUkpIHwgQ0hJUEdDUl9GQ0ZEWDsKKwkJd3JpdGViKEdDUiwgJnJlZ3MtPkNISVBHQ1IpOwogCX0KIAotCWlmIChkZXYtPm10dSAhPSBuZXdfbXR1KSB7Ci0JCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp0bXBfdnB0cjsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3RydWN0IHJ4X2luZm8gcng7Ci0JCXN0cnVjdCB0eF9pbmZvIHR4OworCUJZVEVfUkVHX0JJVFNfT0ZGKElTUl9QV0VJLCAmcmVncy0+SVNSKTsKKwkvKiBUdXJuIG9uIFNXUFRBRyBqdXN0IGJlZm9yZSBlbnRlcmluZyBwb3dlciBtb2RlICovCisJQllURV9SRUdfQklUU19PTihTVElDS0hXX1NXUFRBRywgJnJlZ3MtPlNUSUNLSFcpOworCS8qIEdvIHRvIGJlZCAuLi4uLiAqLworCUJZVEVfUkVHX0JJVFNfT04oKFNUSUNLSFdfRFMxIHwgU1RJQ0tIV19EUzApLCAmcmVncy0+U1RJQ0tIVyk7CiAKLQkJdG1wX3ZwdHIgPSBremFsbG9jKHNpemVvZigqdG1wX3ZwdHIpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0bXBfdnB0cikgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0XzA7Ci0JCX0KLQotCQl0bXBfdnB0ci0+ZGV2ID0gZGV2OwotCQl0bXBfdnB0ci0+cGRldiA9IHZwdHItPnBkZXY7Ci0JCXRtcF92cHRyLT5vcHRpb25zID0gdnB0ci0+b3B0aW9uczsKLQkJdG1wX3ZwdHItPnR4Lm51bXEgPSB2cHRyLT50eC5udW1xOwotCi0JCXJldCA9IHZlbG9jaXR5X2luaXRfcmluZ3ModG1wX3ZwdHIsIG5ld19tdHUpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0X2ZyZWVfdG1wX3ZwdHJfMTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdnB0ci0+bG9jaywgZmxhZ3MpOwotCi0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJdmVsb2NpdHlfc2h1dGRvd24odnB0cik7Ci0KLQkJcnggPSB2cHRyLT5yeDsKLQkJdHggPSB2cHRyLT50eDsKLQotCQl2cHRyLT5yeCA9IHRtcF92cHRyLT5yeDsKLQkJdnB0ci0+dHggPSB0bXBfdnB0ci0+dHg7Ci0KLQkJdG1wX3ZwdHItPnJ4ID0gcng7Ci0JCXRtcF92cHRyLT50eCA9IHR4OwotCi0JCWRldi0+bXR1ID0gbmV3X210dTsKLQotCQl2ZWxvY2l0eV9naXZlX21hbnlfcnhfZGVzY3ModnB0cik7Ci0KLQkJdmVsb2NpdHlfaW5pdF9yZWdpc3RlcnModnB0ciwgVkVMT0NJVFlfSU5JVF9DT0xEKTsKLQotCQltYWNfZW5hYmxlX2ludCh2cHRyLT5tYWNfcmVncyk7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnB0ci0+bG9jaywgZmxhZ3MpOwotCi0JCXZlbG9jaXR5X2ZyZWVfcmluZ3ModG1wX3ZwdHIpOwotCi1vdXRfZnJlZV90bXBfdnB0cl8xOgotCQlrZnJlZSh0bXBfdnB0cik7Ci0JfQotb3V0XzA6Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9zaHV0ZG93bgktCXNodXQgZG93biB0aGUgY2hpcAotICoJQHZwdHI6IHZlbG9jaXR5IHRvIGRlYWN0aXZhdGUKLSAqCi0gKglTaHV0cyBkb3duIHRoZSBpbnRlcm5hbCBvcGVyYXRpb25zIG9mIHRoZSB2ZWxvY2l0eSBhbmQKLSAqCWRpc2FibGVzIGludGVycnVwdHMsIGF1dG9wb2xsaW5nLCB0cmFuc21pdCBhbmQgcmVjZWl2ZQotICovCi0KLXN0YXRpYyB2b2lkIHZlbG9jaXR5X3NodXRkb3duKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQotewotCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwotCW1hY19kaXNhYmxlX2ludChyZWdzKTsKLQl3cml0ZWwoQ1IwX1NUT1AsICZyZWdzLT5DUjBTZXQpOwotCXdyaXRldygweEZGRkYsICZyZWdzLT5URENTUkNscik7Ci0Jd3JpdGViKDB4RkYsICZyZWdzLT5SRENTUkNscik7Ci0Jc2FmZV9kaXNhYmxlX21paV9hdXRvcG9sbChyZWdzKTsKLQltYWNfY2xlYXJfaXNyKHJlZ3MpOwotfQotCi0vKioKLSAqCXZlbG9jaXR5X2Nsb3NlCQktCWNsb3NlIGFkYXB0ZXIgY2FsbGJhY2sKLSAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCi0gKgotICoJQ2FsbGJhY2sgZnJvbSB0aGUgbmV0d29yayBsYXllciB3aGVuIHRoZSB2ZWxvY2l0eSBpcyBiZWluZwotICoJZGVhY3RpdmF0ZWQgYnkgdGhlIG5ldHdvcmsgbGF5ZXIKLSAqLwotCi1zdGF0aWMgaW50IHZlbG9jaXR5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXZlbG9jaXR5X3NodXRkb3duKHZwdHIpOwotCi0JaWYgKHZwdHItPmZsYWdzICYgVkVMT0NJVFlfRkxBR1NfV09MX0VOQUJMRUQpCi0JCXZlbG9jaXR5X2dldF9pcCh2cHRyKTsKLQlpZiAoZGV2LT5pcnEgIT0gMCkKLQkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Ci0KLQkvKiBQb3dlciBkb3duIHRoZSBjaGlwICovCi0JcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDNob3QpOwotCi0JdmVsb2NpdHlfZnJlZV9yaW5ncyh2cHRyKTsKLQotCXZwdHItPmZsYWdzICY9ICh+VkVMT0NJVFlfRkxBR1NfT1BFTkVEKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKgl2ZWxvY2l0eV94bWl0CQktCXRyYW5zbWl0IHBhY2tldCBjYWxsYmFjawotICoJQHNrYjogYnVmZmVyIHRvIHRyYW5zbWl0Ci0gKglAZGV2OiBuZXR3b3JrIGRldmljZQorICoJdmVsb2NpdHlfc2F2ZV9jb250ZXh0CS0Jc2F2ZSByZWdpc3RlcnMKKyAqCUB2cHRyOiB2ZWxvY2l0eQorICoJQGNvbnRleHQ6IGJ1ZmZlciBmb3Igc3RvcmVkIGNvbnRleHQKICAqCi0gKglDYWxsZWQgYnkgdGhlIG5ldHdvciBsYXllciB0byByZXF1ZXN0IGEgcGFja2V0IGlzIHF1ZXVlZCB0bwotICoJdGhlIHZlbG9jaXR5LiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcy4KKyAqCVJldHJpZXZlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgdmVsb2NpdHkgaGFyZHdhcmUKKyAqCWFuZCBzdGFzaCBpdCBpbiB0aGUgY29udGV4dCBzdHJ1Y3R1cmUsIGZvciB1c2UgYnkgdGhlIGNvbnRleHQKKyAqCXJlc3RvcmUgZnVuY3Rpb25zLiBUaGlzIGFsbG93cyB1cyB0byBzYXZlIHRoaW5ncyB3ZSBuZWVkIGFjcm9zcworICoJcG93ZXIgZG93biBzdGF0ZXMKICAqLwotCi1zdGF0aWMgaW50IHZlbG9jaXR5X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHZlbG9jaXR5X3NhdmVfY29udGV4dChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgc3RydWN0IHZlbG9jaXR5X2NvbnRleHQgKmNvbnRleHQpCiB7CisJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKwl1MTYgaTsKKwl1OCBfX2lvbWVtICpwdHIgPSAodTggX19pb21lbSAqKXJlZ3M7CisKKwlmb3IgKGkgPSBNQUNfUkVHX1BBUjsgaSA8IE1BQ19SRUdfQ1IwX0NMUjsgaSArPSA0KQorCQkqKCh1MzIgKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSkgPSByZWFkbChwdHIgKyBpKTsKKworCWZvciAoaSA9IE1BQ19SRUdfTUFSOyBpIDwgTUFDX1JFR19URENTUl9DTFI7IGkgKz0gNCkKKwkJKigodTMyICopIChjb250ZXh0LT5tYWNfcmVnICsgaSkpID0gcmVhZGwocHRyICsgaSk7CisKKwlmb3IgKGkgPSBNQUNfUkVHX1JEQkFTRV9MTzsgaSA8IE1BQ19SRUdfRklGT19URVNUMDsgaSArPSA0KQorCQkqKCh1MzIgKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSkgPSByZWFkbChwdHIgKyBpKTsKKworfQorCitzdGF0aWMgaW50IHZlbG9jaXR5X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcW51bSA9IDA7Ci0Jc3RydWN0IHR4X2Rlc2MgKnRkX3B0cjsKLQlzdHJ1Y3QgdmVsb2NpdHlfdGRfaW5mbyAqdGRpbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHBrdGxlbjsKLQlfX2xlMTYgbGVuOwotCWludCBpbmRleDsKIAotCi0JaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLQkJZ290byBvdXQ7Ci0JcGt0bGVuID0gbWF4X3QodW5zaWduZWQgaW50LCBza2ItPmxlbiwgRVRIX1pMRU4pOwotCi0JbGVuID0gY3B1X3RvX2xlMTYocGt0bGVuKTsKLQotI2lmZGVmIFZFTE9DSVRZX1pFUk9fQ09QWV9TVVBQT1JUCi0JaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPiA2ICYmIF9fc2tiX2xpbmVhcml6ZShza2IpKSB7Ci0JCWtmcmVlX3NrYihza2IpOworCWlmICghbmV0aWZfcnVubmluZyh2cHRyLT5kZXYpKQogCQlyZXR1cm4gMDsKLQl9Ci0jZW5kaWYKKworCW5ldGlmX2RldmljZV9kZXRhY2godnB0ci0+ZGV2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2cHRyLT5sb2NrLCBmbGFncyk7Ci0KLQlpbmRleCA9IHZwdHItPnR4LmN1cnJbcW51bV07Ci0JdGRfcHRyID0gJih2cHRyLT50eC5yaW5nc1txbnVtXVtpbmRleF0pOwotCXRkaW5mbyA9ICYodnB0ci0+dHguaW5mb3NbcW51bV1baW5kZXhdKTsKLQotCXRkX3B0ci0+dGRlc2MxLlRDUiA9IFRDUjBfVElDOwotCXRkX3B0ci0+dGRfYnVmWzBdLnNpemUgJj0gflREX1FVRVVFOwotCi0jaWZkZWYgVkVMT0NJVFlfWkVST19DT1BZX1NVUFBPUlQKLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+IDApIHsKLQkJaW50IG5mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JCXRkaW5mby0+c2tiID0gc2tiOwotCQlpZiAobmZyYWdzID4gNikgewotCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHRkaW5mby0+YnVmLCBza2ItPmxlbik7Ci0JCQl0ZGluZm8tPnNrYl9kbWFbMF0gPSB0ZGluZm8tPmJ1Zl9kbWE7Ci0JCQl0ZF9wdHItPnRkZXNjMC5sZW4gPSBsZW47Ci0JCQl0ZF9wdHItPnR4LmJ1ZlswXS5wYV9sb3cgPSBjcHVfdG9fbGUzMih0ZGluZm8tPnNrYl9kbWFbMF0pOwotCQkJdGRfcHRyLT50eC5idWZbMF0ucGFfaGlnaCA9IDA7Ci0JCQl0ZF9wdHItPnR4LmJ1ZlswXS5zaXplID0gbGVuOwkvKiBxdWV1ZSBpcyAwIGFueXdheSAqLwotCQkJdGRpbmZvLT5uc2tiX2RtYSA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlpbnQgaSA9IDA7Ci0JCQl0ZGluZm8tPm5za2JfZG1hID0gMDsKLQkJCXRkaW5mby0+c2tiX2RtYVtpXSA9IHBjaV9tYXBfc2luZ2xlKHZwdHItPnBkZXYsIHNrYi0+ZGF0YSwKLQkJCQkJCXNrYl9oZWFkbGVuKHNrYiksIFBDSV9ETUFfVE9ERVZJQ0UpOwotCi0JCQl0ZF9wdHItPnRkZXNjMC5sZW4gPSBsZW47Ci0KLQkJCS8qIEZJWE1FOiBzdXBwb3J0IDQ4Yml0IERNQSBsYXRlciAqLwotCQkJdGRfcHRyLT50eC5idWZbaV0ucGFfbG93ID0gY3B1X3RvX2xlMzIodGRpbmZvLT5za2JfZG1hKTsKLQkJCXRkX3B0ci0+dHguYnVmW2ldLnBhX2hpZ2ggPSAwOwotCQkJdGRfcHRyLT50eC5idWZbaV0uc2l6ZSA9IGNwdV90b19sZTE2KHNrYl9oZWFkbGVuKHNrYikpOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgbmZyYWdzOyBpKyspIHsKLQkJCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07Ci0JCQkJdm9pZCAqYWRkciA9ICh2b2lkICopcGFnZV9hZGRyZXNzKGZyYWctPnBhZ2UpICsgZnJhZy0+cGFnZV9vZmZzZXQ7Ci0KLQkJCQl0ZGluZm8tPnNrYl9kbWFbaSArIDFdID0gcGNpX21hcF9zaW5nbGUodnB0ci0+cGRldiwgYWRkciwgZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7Ci0KLQkJCQl0ZF9wdHItPnR4LmJ1ZltpICsgMV0ucGFfbG93ID0gY3B1X3RvX2xlMzIodGRpbmZvLT5za2JfZG1hW2kgKyAxXSk7Ci0JCQkJdGRfcHRyLT50eC5idWZbaSArIDFdLnBhX2hpZ2ggPSAwOwotCQkJCXRkX3B0ci0+dHguYnVmW2kgKyAxXS5zaXplID0gY3B1X3RvX2xlMTYoZnJhZy0+c2l6ZSk7Ci0JCQl9Ci0JCQl0ZGluZm8tPm5za2JfZG1hID0gaSAtIDE7Ci0JCX0KLQotCX0gZWxzZQorCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworI2lmZGVmIEVUSFRPT0xfR1dPTAorCWlmICh2cHRyLT5mbGFncyAmIFZFTE9DSVRZX0ZMQUdTX1dPTF9FTkFCTEVEKSB7CisJCXZlbG9jaXR5X2dldF9pcCh2cHRyKTsKKwkJdmVsb2NpdHlfc2F2ZV9jb250ZXh0KHZwdHIsICZ2cHRyLT5jb250ZXh0KTsKKwkJdmVsb2NpdHlfc2h1dGRvd24odnB0cik7CisJCXZlbG9jaXR5X3NldF93b2wodnB0cik7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisJfSBlbHNlIHsKKwkJdmVsb2NpdHlfc2F2ZV9jb250ZXh0KHZwdHIsICZ2cHRyLT5jb250ZXh0KTsKKwkJdmVsb2NpdHlfc2h1dGRvd24odnB0cik7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CisJfQorI2Vsc2UKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKICNlbmRpZgotCXsKLQkJLyoKLQkJICoJTWFwIHRoZSBsaW5lYXIgbmV0d29yayBidWZmZXIgaW50byBQQ0kgc3BhY2UgYW5kCi0JCSAqCWFkZCBpdCB0byB0aGUgdHJhbnNtaXQgcmluZy4KLQkJICovCi0JCXRkaW5mby0+c2tiID0gc2tiOwotCQl0ZGluZm8tPnNrYl9kbWFbMF0gPSBwY2lfbWFwX3NpbmdsZSh2cHRyLT5wZGV2LCBza2ItPmRhdGEsIHBrdGxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCXRkX3B0ci0+dGRlc2MwLmxlbiA9IGxlbjsKLQkJdGRfcHRyLT50ZF9idWZbMF0ucGFfbG93ID0gY3B1X3RvX2xlMzIodGRpbmZvLT5za2JfZG1hWzBdKTsKLQkJdGRfcHRyLT50ZF9idWZbMF0ucGFfaGlnaCA9IDA7Ci0JCXRkX3B0ci0+dGRfYnVmWzBdLnNpemUgPSBsZW47Ci0JCXRkaW5mby0+bnNrYl9kbWEgPSAxOwotCX0KLQl0ZF9wdHItPnRkZXNjMS5jbWQgPSBUQ1BMU19OT1JNQUwgKyAodGRpbmZvLT5uc2tiX2RtYSArIDEpICogMTY7Ci0KLQlpZiAodnB0ci0+dmxncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCXRkX3B0ci0+dGRlc2MxLnZsYW4gPSBjcHVfdG9fbGUxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7Ci0JCXRkX3B0ci0+dGRlc2MxLlRDUiB8PSBUQ1IwX1ZFVEFHOwotCX0KLQotCS8qCi0JICoJSGFuZGxlIGhhcmR3YXJlIGNoZWNrc3VtCi0JICovCi0JaWYgKCh2cHRyLT5mbGFncyAmIFZFTE9DSVRZX0ZMQUdTX1RYX0NTVU0pCi0JCQkJICYmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkgewotCQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwID0gaXBfaGRyKHNrYik7Ci0JCWlmIChpcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCi0JCQl0ZF9wdHItPnRkZXNjMS5UQ1IgfD0gVENSMF9UQ1BDSzsKLQkJZWxzZSBpZiAoaXAtPnByb3RvY29sID09IElQUFJPVE9fVURQKQotCQkJdGRfcHRyLT50ZGVzYzEuVENSIHw9IChUQ1IwX1VEUENLKTsKLQkJdGRfcHRyLT50ZGVzYzEuVENSIHw9IFRDUjBfSVBDSzsKLQl9Ci0JewotCi0JCWludCBwcmV2ID0gaW5kZXggLSAxOwotCi0JCWlmIChwcmV2IDwgMCkKLQkJCXByZXYgPSB2cHRyLT5vcHRpb25zLm51bXR4IC0gMTsKLQkJdGRfcHRyLT50ZGVzYzAubGVuIHw9IE9XTkVEX0JZX05JQzsKLQkJdnB0ci0+dHgudXNlZFtxbnVtXSsrOwotCQl2cHRyLT50eC5jdXJyW3FudW1dID0gKGluZGV4ICsgMSkgJSB2cHRyLT5vcHRpb25zLm51bXR4OwotCi0JCWlmIChBVkFJTF9URCh2cHRyLCBxbnVtKSA8IDEpCi0JCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQkJdGRfcHRyID0gJih2cHRyLT50eC5yaW5nc1txbnVtXVtwcmV2XSk7Ci0JCXRkX3B0ci0+dGRfYnVmWzBdLnNpemUgfD0gVERfUVVFVUU7Ci0JCW1hY190eF9xdWV1ZV93YWtlKHZwdHItPm1hY19yZWdzLCBxbnVtKTsKLQl9Ci0JZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnB0ci0+bG9jaywgZmxhZ3MpOwotb3V0OgotCXJldHVybiBORVRERVZfVFhfT0s7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgotICoJdmVsb2NpdHlfaW50cgkJLQlpbnRlcnJ1cHQgY2FsbGJhY2sKLSAqCUBpcnE6IGludGVycnVwdCBudW1iZXIKLSAqCUBkZXZfaW5zdGFuY2U6IGludGVycnVwdGluZyBkZXZpY2UKKyAqCXZlbG9jaXR5X3Jlc3RvcmVfY29udGV4dAktCXJlc3RvcmUgcmVnaXN0ZXJzCisgKglAdnB0cjogdmVsb2NpdHkKKyAqCUBjb250ZXh0OiBidWZmZXIgZm9yIHN0b3JlZCBjb250ZXh0CiAgKgotICoJQ2FsbGVkIHdoZW5ldmVyIGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIHZlbG9jaXR5Ci0gKglhZGFwdGVyIElSUSBsaW5lLiBXZSBtYXkgbm90IGJlIHRoZSBzb3VyY2Ugb2YgdGhlIGludGVycnVwdAotICoJYW5kIG5lZWQgdG8gaWRlbnRpZnkgaW5pdGlhbGx5IGlmIHdlIGFyZSwgYW5kIGlmIG5vdCBleGl0IGFzCi0gKgllZmZpY2llbnRseSBhcyBwb3NzaWJsZS4KKyAqCVJlbG9hZCB0aGUgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB2ZWxvY2l0eSBjb250ZXh0CisgKgljcmVhdGVkIGJ5IHZlbG9jaXR5X3NhdmVfY29udGV4dC4KICAqLwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgdmVsb2NpdHlfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCitzdGF0aWMgdm9pZCB2ZWxvY2l0eV9yZXN0b3JlX2NvbnRleHQoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIHN0cnVjdCB2ZWxvY2l0eV9jb250ZXh0ICpjb250ZXh0KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaW5zdGFuY2U7Ci0Jc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUzMiBpc3Jfc3RhdHVzOwotCWludCBtYXhfY291bnQgPSAwOworCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzID0gdnB0ci0+bWFjX3JlZ3M7CisJaW50IGk7CisJdTggX19pb21lbSAqcHRyID0gKHU4IF9faW9tZW0gKilyZWdzOwogCisJZm9yIChpID0gTUFDX1JFR19QQVI7IGkgPCBNQUNfUkVHX0NSMF9TRVQ7IGkgKz0gNCkKKwkJd3JpdGVsKCooKHUzMiAqKSAoY29udGV4dC0+bWFjX3JlZyArIGkpKSwgcHRyICsgaSk7CiAKLQlzcGluX2xvY2soJnZwdHItPmxvY2spOwotCWlzcl9zdGF0dXMgPSBtYWNfcmVhZF9pc3IodnB0ci0+bWFjX3JlZ3MpOwotCi0JLyogTm90IHVzID8gKi8KLQlpZiAoaXNyX3N0YXR1cyA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrKCZ2cHRyLT5sb2NrKTsKLQkJcmV0dXJuIElSUV9OT05FOworCS8qIEp1c3Qgc2tpcCBjcjAgKi8KKwlmb3IgKGkgPSBNQUNfUkVHX0NSMV9TRVQ7IGkgPCBNQUNfUkVHX0NSMF9DTFI7IGkrKykgeworCQkvKiBDbGVhciAqLworCQl3cml0ZWIofigqKCh1OCAqKSAoY29udGV4dC0+bWFjX3JlZyArIGkpKSksIHB0ciArIGkgKyA0KTsKKwkJLyogU2V0ICovCisJCXdyaXRlYigqKCh1OCAqKSAoY29udGV4dC0+bWFjX3JlZyArIGkpKSwgcHRyICsgaSk7CiAJfQogCisJZm9yIChpID0gTUFDX1JFR19NQVI7IGkgPCBNQUNfUkVHX0lNUjsgaSArPSA0KQorCQl3cml0ZWwoKigodTMyICopIChjb250ZXh0LT5tYWNfcmVnICsgaSkpLCBwdHIgKyBpKTsKKworCWZvciAoaSA9IE1BQ19SRUdfUkRCQVNFX0xPOyBpIDwgTUFDX1JFR19GSUZPX1RFU1QwOyBpICs9IDQpCisJCXdyaXRlbCgqKCh1MzIgKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSksIHB0ciArIGkpOworCisJZm9yIChpID0gTUFDX1JFR19URENTUl9TRVQ7IGkgPD0gTUFDX1JFR19SRENTUl9TRVQ7IGkrKykKKwkJd3JpdGViKCooKHU4ICopIChjb250ZXh0LT5tYWNfcmVnICsgaSkpLCBwdHIgKyBpKTsKK30KKworc3RhdGljIGludCB2ZWxvY2l0eV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCWlmICghbmV0aWZfcnVubmluZyh2cHRyLT5kZXYpKQorCQlyZXR1cm4gMDsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgMCwgMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwltYWNfd29sX3Jlc2V0KHZwdHItPm1hY19yZWdzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2cHRyLT5sb2NrLCBmbGFncyk7CisJdmVsb2NpdHlfcmVzdG9yZV9jb250ZXh0KHZwdHIsICZ2cHRyLT5jb250ZXh0KTsKKwl2ZWxvY2l0eV9pbml0X3JlZ2lzdGVycyh2cHRyLCBWRUxPQ0lUWV9JTklUX1dPTCk7CiAJbWFjX2Rpc2FibGVfaW50KHZwdHItPm1hY19yZWdzKTsKIAotCS8qCi0JICoJS2VlcCBwcm9jZXNzaW5nIHRoZSBJU1IgdW50aWwgd2UgaGF2ZSBjb21wbGV0ZWQKLQkgKglwcm9jZXNzaW5nIGFuZCB0aGUgaXNyX3N0YXR1cyBiZWNvbWVzIHplcm8KLQkgKi8KKwl2ZWxvY2l0eV90eF9zcnYodnB0ciwgMCk7CiAKLQl3aGlsZSAoaXNyX3N0YXR1cyAhPSAwKSB7Ci0JCW1hY193cml0ZV9pc3IodnB0ci0+bWFjX3JlZ3MsIGlzcl9zdGF0dXMpOwotCQlpZiAoaXNyX3N0YXR1cyAmICh+KElTUl9QUlhJIHwgSVNSX1BQUlhJIHwgSVNSX1BUWEkgfCBJU1JfUFBUWEkpKSkKLQkJCXZlbG9jaXR5X2Vycm9yKHZwdHIsIGlzcl9zdGF0dXMpOwotCQlpZiAoaXNyX3N0YXR1cyAmIChJU1JfUFJYSSB8IElTUl9QUFJYSSkpCi0JCQltYXhfY291bnQgKz0gdmVsb2NpdHlfcnhfc3J2KHZwdHIsIGlzcl9zdGF0dXMpOwotCQlpZiAoaXNyX3N0YXR1cyAmIChJU1JfUFRYSSB8IElTUl9QUFRYSSkpCi0JCQltYXhfY291bnQgKz0gdmVsb2NpdHlfdHhfc3J2KHZwdHIsIGlzcl9zdGF0dXMpOwotCQlpc3Jfc3RhdHVzID0gbWFjX3JlYWRfaXNyKHZwdHItPm1hY19yZWdzKTsKLQkJaWYgKG1heF9jb3VudCA+IHZwdHItPm9wdGlvbnMuaW50X3dvcmtzKQotCQl7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZXhjZXNzaXZlIHdvcmsgYXQgaW50ZXJydXB0LlxuIiwKLQkJCQlkZXYtPm5hbWUpOwotCQkJbWF4X2NvdW50ID0gMDsKLQkJfQorCWZvciAoaSA9IDA7IGkgPCB2cHRyLT50eC5udW1xOyBpKyspIHsKKwkJaWYgKHZwdHItPnR4LnVzZWRbaV0pCisJCQltYWNfdHhfcXVldWVfd2FrZSh2cHRyLT5tYWNfcmVncywgaSk7CiAJfQotCXNwaW5fdW5sb2NrKCZ2cHRyLT5sb2NrKTsKKwogCW1hY19lbmFibGVfaW50KHZwdHItPm1hY19yZWdzKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnB0ci0+bG9jaywgZmxhZ3MpOworCW5ldGlmX2RldmljZV9hdHRhY2godnB0ci0+ZGV2KTsKIAorCXJldHVybiAwOwogfQotCi0KLS8qKgotICoJdmVsb2NpdHlfc2V0X211bHRpCS0JZmlsdGVyIGxpc3QgY2hhbmdlIGNhbGxiYWNrCi0gKglAZGV2OiBuZXR3b3JrIGRldmljZQotICoKLSAqCUNhbGxlZCBieSB0aGUgbmV0d29yayBsYXllciB3aGVuIHRoZSBmaWx0ZXIgbGlzdHMgbmVlZCB0byBjaGFuZ2UKLSAqCWZvciBhIHZlbG9jaXR5IGFkYXB0ZXIuIFJlbG9hZCB0aGUgQ0FNcyB3aXRoIHRoZSBuZXcgYWRkcmVzcwotICoJZmlsdGVyIHJ1bGVzZXQuCi0gKi8KLQotc3RhdGljIHZvaWQgdmVsb2NpdHlfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwotCXU4IHJ4X21vZGU7Ci0JaW50IGk7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0KLQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CS8qIFNldCBwcm9taXNjdW91cy4gKi8KLQkJd3JpdGVsKDB4ZmZmZmZmZmYsICZyZWdzLT5NQVJDQU1bMF0pOwotCQl3cml0ZWwoMHhmZmZmZmZmZiwgJnJlZ3MtPk1BUkNBTVs0XSk7Ci0JCXJ4X21vZGUgPSAoUkNSX0FNIHwgUkNSX0FCIHwgUkNSX1BST00pOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiB2cHRyLT5tdWx0aWNhc3RfbGltaXQpCi0JCSAgIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewotCQl3cml0ZWwoMHhmZmZmZmZmZiwgJnJlZ3MtPk1BUkNBTVswXSk7Ci0JCXdyaXRlbCgweGZmZmZmZmZmLCAmcmVncy0+TUFSQ0FNWzRdKTsKLQkJcnhfbW9kZSA9IChSQ1JfQU0gfCBSQ1JfQUIpOwotCX0gZWxzZSB7Ci0JCWludCBvZmZzZXQgPSBNQ0FNX1NJWkUgLSB2cHRyLT5tdWx0aWNhc3RfbGltaXQ7Ci0JCW1hY19nZXRfY2FtX21hc2socmVncywgdnB0ci0+bUNBTW1hc2spOwotCi0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgewotCQkJbWFjX3NldF9jYW0ocmVncywgaSArIG9mZnNldCwgbWNsaXN0LT5kbWlfYWRkcik7Ci0JCQl2cHRyLT5tQ0FNbWFza1sob2Zmc2V0ICsgaSkgLyA4XSB8PSAxIDw8ICgob2Zmc2V0ICsgaSkgJiA3KTsKLQkJfQotCi0JCW1hY19zZXRfY2FtX21hc2socmVncywgdnB0ci0+bUNBTW1hc2spOwotCQlyeF9tb2RlID0gUkNSX0FNIHwgUkNSX0FCIHwgUkNSX0FQOwotCX0KLQlpZiAoZGV2LT5tdHUgPiAxNTAwKQotCQlyeF9tb2RlIHw9IFJDUl9BTDsKLQotCUJZVEVfUkVHX0JJVFNfT04ocnhfbW9kZSwgJnJlZ3MtPlJDUik7Ci0KLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9nZXRfc3RhdHVzCS0Jc3RhdGlzdGljcyBjYWxsYmFjawotICoJQGRldjogbmV0d29yayBkZXZpY2UKLSAqCi0gKglDYWxsYmFjayBmcm9tIHRoZSBuZXR3b3JrIGxheWVyIHRvIGFsbG93IGRyaXZlciBzdGF0aXN0aWNzCi0gKgl0byBiZSByZXN5bmNocm9uaXplZCB3aXRoIGhhcmR3YXJlIGNvbGxlY3RlZCBzdGF0ZS4gSW4gdGhlCi0gKgljYXNlIG9mIHRoZSB2ZWxvY2l0eSB3ZSBuZWVkIHRvIHB1bGwgdGhlIE1JQiBjb3VudGVycyBmcm9tCi0gKgl0aGUgaGFyZHdhcmUgaW50byB0aGUgY291bnRlcnMgYmVmb3JlIGxldHRpbmcgdGhlIG5ldHdvcmsKLSAqCWxheWVyIGRpc3BsYXkgdGhlbS4KLSAqLwotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnZlbG9jaXR5X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCS8qIElmIHRoZSBoYXJkd2FyZSBpcyBkb3duLCBkb24ndCB0b3VjaCBNSUkgKi8KLQlpZighbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gJmRldi0+c3RhdHM7Ci0KLQlzcGluX2xvY2tfaXJxKCZ2cHRyLT5sb2NrKTsKLQl2ZWxvY2l0eV91cGRhdGVfaHdfbWlicyh2cHRyKTsKLQlzcGluX3VubG9ja19pcnEoJnZwdHItPmxvY2spOwotCi0JZGV2LT5zdGF0cy5yeF9wYWNrZXRzID0gdnB0ci0+bWliX2NvdW50ZXJbSFdfTUlCX2lmUnhBbGxQa3RzXTsKLQlkZXYtPnN0YXRzLnJ4X2Vycm9ycyA9IHZwdHItPm1pYl9jb3VudGVyW0hXX01JQl9pZlJ4RXJyb3JQa3RzXTsKLQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPSB2cHRyLT5taWJfY291bnRlcltIV19NSUJfaWZJblJhbmdlTGVuZ3RoRXJyb3JzXTsKLQotLy8gIHVuc2lnbmVkIGxvbmcgICByeF9kcm9wcGVkOyAgICAgLyogbm8gc3BhY2UgaW4gbGludXggYnVmZmVycyAgICAqLwotCWRldi0+c3RhdHMuY29sbGlzaW9ucyA9IHZwdHItPm1pYl9jb3VudGVyW0hXX01JQl9pZlR4RXRoZXJDb2xsaXNpb25zXTsKLQkvKiBkZXRhaWxlZCByeF9lcnJvcnM6ICovCi0vLyAgdW5zaWduZWQgbG9uZyAgIHJ4X2xlbmd0aF9lcnJvcnM7Ci0vLyAgdW5zaWduZWQgbG9uZyAgIHJ4X292ZXJfZXJyb3JzOyAgICAgLyogcmVjZWl2ZXIgcmluZyBidWZmIG92ZXJmbG93ICAqLwotCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycyA9IHZwdHItPm1pYl9jb3VudGVyW0hXX01JQl9pZlJ4UGt0Q1JDRV07Ci0vLyAgdW5zaWduZWQgbG9uZyAgIHJ4X2ZyYW1lX2Vycm9yczsgICAgLyogcmVjdidkIGZyYW1lIGFsaWdubWVudCBlcnJvciAqLwotLy8gIHVuc2lnbmVkIGxvbmcgICByeF9maWZvX2Vycm9yczsgICAgIC8qIHJlY3YnciBmaWZvIG92ZXJydW4gICAgICAqLwotLy8gIHVuc2lnbmVkIGxvbmcgICByeF9taXNzZWRfZXJyb3JzOyAgIC8qIHJlY2VpdmVyIG1pc3NlZCBwYWNrZXQgICAqLwotCi0JLyogZGV0YWlsZWQgdHhfZXJyb3JzICovCi0vLyAgdW5zaWduZWQgbG9uZyAgIHR4X2ZpZm9fZXJyb3JzOwotCi0JcmV0dXJuICZkZXYtPnN0YXRzOwotfQotCi0KLS8qKgotICoJdmVsb2NpdHlfaW9jdGwJCS0JaW9jdGwgZW50cnkgcG9pbnQKLSAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCi0gKglAcnE6IGludGVyZmFjZSByZXF1ZXN0IGlvY3RsCi0gKglAY21kOiBjb21tYW5kIGNvZGUKLSAqCi0gKglDYWxsZWQgd2hlbiB0aGUgdXNlciBpc3N1ZXMgYW4gaW9jdGwgcmVxdWVzdCB0byB0aGUgbmV0d29yawotICoJZGV2aWNlIGluIHF1ZXN0aW9uLiBUaGUgdmVsb2NpdHkgaW50ZXJmYWNlIHN1cHBvcnRzIE1JSS4KLSAqLwotCi1zdGF0aWMgaW50IHZlbG9jaXR5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCi17Ci0Jc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByZXQ7Ci0KLQkvKiBJZiB3ZSBhcmUgYXNrZWQgZm9yIGluZm9ybWF0aW9uIGFuZCB0aGUgZGV2aWNlIGlzIHBvd2VyCi0JICAgc2F2aW5nIHRoZW4gd2UgbmVlZCB0byBicmluZyB0aGUgZGV2aWNlIGJhY2sgdXAgdG8gdGFsayB0byBpdCAqLwotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXBjaV9zZXRfcG93ZXJfc3RhdGUodnB0ci0+cGRldiwgUENJX0QwKTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTSU9DR01JSVBIWToJLyogR2V0IGFkZHJlc3Mgb2YgTUlJIFBIWSBpbiB1c2UuICovCi0JY2FzZSBTSU9DR01JSVJFRzoJLyogUmVhZCBNSUkgUEhZIHJlZ2lzdGVyLiAqLwotCWNhc2UgU0lPQ1NNSUlSRUc6CS8qIFdyaXRlIHRvIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JCXJldCA9IHZlbG9jaXR5X21paV9pb2N0bChkZXYsIHJxLCBjbWQpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCX0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDNob3QpOwotCi0KLQlyZXR1cm4gcmV0OwotfQorI2VuZGlmCiAKIC8qCiAgKglEZWZpbml0aW9uIGZvciBvdXIgZGV2aWNlIGRyaXZlci4gVGhlIFBDSSBsYXllciBpbnRlcmZhY2UKICAqCXVzZXMgdGhpcyB0byBoYW5kbGUgYWxsIG91ciBjYXJkIGRpc2NvdmVyIGFuZCBwbHVnZ2luZwogICovCi0KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB2ZWxvY2l0eV9kcml2ZXIgPSB7CiAgICAgICAubmFtZQk9IFZFTE9DSVRZX05BTUUsCiAgICAgICAuaWRfdGFibGUJPSB2ZWxvY2l0eV9pZF90YWJsZSwKQEAgLTI0MDcsNTgyICszMDcwLDYgQEAKICNlbmRpZgogfTsKIAotLyoqCi0gKgl2ZWxvY2l0eV9pbml0X21vZHVsZQktCWxvYWQgdGltZSBmdW5jdGlvbgotICoKLSAqCUNhbGxlZCB3aGVuIHRoZSB2ZWxvY2l0eSBtb2R1bGUgaXMgbG9hZGVkLiBUaGUgUENJIGRyaXZlcgotICoJaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBQQ0kgbGF5ZXIsIGFuZCBpbiB0dXJuIHdpbGwgY2FsbAotICoJdGhlIHByb2JlIGZ1bmN0aW9ucyBmb3IgZWFjaCB2ZWxvY2l0eSBhZGFwdGVyIGluc3RhbGxlZAotICoJaW4gdGhlIHN5c3RlbS4KLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCB2ZWxvY2l0eV9pbml0X21vZHVsZSh2b2lkKQotewotCWludCByZXQ7Ci0KLQl2ZWxvY2l0eV9yZWdpc3Rlcl9ub3RpZmllcigpOwotCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnZlbG9jaXR5X2RyaXZlcik7Ci0JaWYgKHJldCA8IDApCi0JCXZlbG9jaXR5X3VucmVnaXN0ZXJfbm90aWZpZXIoKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqCXZlbG9jaXR5X2NsZWFudXAJLQltb2R1bGUgdW5sb2FkCi0gKgotICoJV2hlbiB0aGUgdmVsb2NpdHkgaGFyZHdhcmUgaXMgdW5sb2FkZWQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCi0gKglJdCB3aWxsIGNsZWFuIHVwIHRoZSBub3RpZmllcnMgYW5kIHRoZSB1bnJlZ2lzdGVyIHRoZSBQQ0kKLSAqCWRyaXZlciBpbnRlcmZhY2UgZm9yIHRoaXMgaGFyZHdhcmUuIFRoaXMgaW4gdHVybiBjbGVhbnMgdXAKLSAqCWFsbCBkaXNjb3ZlcmVkIGludGVyZmFjZXMgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbgotICovCi0KLXN0YXRpYyB2b2lkIF9fZXhpdCB2ZWxvY2l0eV9jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCXZlbG9jaXR5X3VucmVnaXN0ZXJfbm90aWZpZXIoKTsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnZlbG9jaXR5X2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHZlbG9jaXR5X2luaXRfbW9kdWxlKTsKLW1vZHVsZV9leGl0KHZlbG9jaXR5X2NsZWFudXBfbW9kdWxlKTsKLQotCi0vKgotICogTUlJIGFjY2VzcyAsIG1lZGlhIGxpbmsgbW9kZSBzZXR0aW5nIGZ1bmN0aW9ucwotICovCi0KLQotLyoqCi0gKgltaWlfaW5pdAktCXNldCB1cCBNSUkKLSAqCUB2cHRyOiB2ZWxvY2l0eSBhZGFwdGVyCi0gKglAbWlpX3N0YXR1czogIGxpbmtzIHRhdHVzCi0gKgotICoJU2V0IHVwIHRoZSBQSFkgZm9yIHRoZSBjdXJyZW50IGxpbmsgc3RhdGUuCi0gKi8KLQotc3RhdGljIHZvaWQgbWlpX2luaXQoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIHUzMiBtaWlfc3RhdHVzKQotewotCXUxNiBCTUNSOwotCi0Jc3dpdGNoIChQSFlJRF9HRVRfUEhZX0lEKHZwdHItPnBoeV9pZCkpIHsKLQljYXNlIFBIWUlEX0NJQ0FEQV9DUzgyMDE6Ci0JCS8qCi0JCSAqCVJlc2V0IHRvIGhhcmR3YXJlIGRlZmF1bHQKLQkJICovCi0JCU1JSV9SRUdfQklUU19PRkYoKEFOQVJfQVNNRElSIHwgQU5BUl9QQVVTRSksIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQkvKgotCQkgKglUdXJuIG9uIEVDSE9ESVMgYml0IGluIE5XYXktZm9yY2VkIGZ1bGwgbW9kZSBhbmQgdHVybiBpdAotCQkgKglvZmYgaXQgaW4gTldheS1mb3JjZWQgaGFsZiBtb2RlIGZvciBOV2F5LWZvcmNlZCB2LnMuCi0JCSAqCWxlZ2FjeS1mb3JjZWQgaXNzdWUuCi0JCSAqLwotCQlpZiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX0RVUExFWF9GVUxMKQotCQkJTUlJX1JFR19CSVRTX09OKFRDU1JfRUNIT0RJUywgTUlJX1JFR19UQ1NSLCB2cHRyLT5tYWNfcmVncyk7Ci0JCWVsc2UKLQkJCU1JSV9SRUdfQklUU19PRkYoVENTUl9FQ0hPRElTLCBNSUlfUkVHX1RDU1IsIHZwdHItPm1hY19yZWdzKTsKLQkJLyoKLQkJICoJVHVybiBvbiBMaW5rL0FjdGl2aXR5IExFRCBlbmFibGUgYml0IGZvciBDSVM4MjAxCi0JCSAqLwotCQlNSUlfUkVHX0JJVFNfT04oUExFRF9MQUxCRSwgTUlJX1JFR19QTEVELCB2cHRyLT5tYWNfcmVncyk7Ci0JCWJyZWFrOwotCWNhc2UgUEhZSURfVlQzMjE2XzMyQklUOgotCWNhc2UgUEhZSURfVlQzMjE2XzY0QklUOgotCQkvKgotCQkgKglSZXNldCB0byBoYXJkd2FyZSBkZWZhdWx0Ci0JCSAqLwotCQlNSUlfUkVHX0JJVFNfT04oKEFOQVJfQVNNRElSIHwgQU5BUl9QQVVTRSksIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQkvKgotCQkgKglUdXJuIG9uIEVDSE9ESVMgYml0IGluIE5XYXktZm9yY2VkIGZ1bGwgbW9kZSBhbmQgdHVybiBpdAotCQkgKglvZmYgaXQgaW4gTldheS1mb3JjZWQgaGFsZiBtb2RlIGZvciBOV2F5LWZvcmNlZCB2LnMuCi0JCSAqCWxlZ2FjeS1mb3JjZWQgaXNzdWUKLQkJICovCi0JCWlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpCi0JCQlNSUlfUkVHX0JJVFNfT04oVENTUl9FQ0hPRElTLCBNSUlfUkVHX1RDU1IsIHZwdHItPm1hY19yZWdzKTsKLQkJZWxzZQotCQkJTUlJX1JFR19CSVRTX09GRihUQ1NSX0VDSE9ESVMsIE1JSV9SRUdfVENTUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQlicmVhazsKLQotCWNhc2UgUEhZSURfTUFSVkVMTF8xMDAwOgotCWNhc2UgUEhZSURfTUFSVkVMTF8xMDAwUzoKLQkJLyoKLQkJICoJQXNzZXJ0IENSUyBvbiBUcmFuc21pdAotCQkgKi8KLQkJTUlJX1JFR19CSVRTX09OKFBTQ1JfQUNSU1RYLCBNSUlfUkVHX1BTQ1IsIHZwdHItPm1hY19yZWdzKTsKLQkJLyoKLQkJICoJUmVzZXQgdG8gaGFyZHdhcmUgZGVmYXVsdAotCQkgKi8KLQkJTUlJX1JFR19CSVRTX09OKChBTkFSX0FTTURJUiB8IEFOQVJfUEFVU0UpLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJOwotCX0KLQl2ZWxvY2l0eV9taWlfcmVhZCh2cHRyLT5tYWNfcmVncywgTUlJX1JFR19CTUNSLCAmQk1DUik7Ci0JaWYgKEJNQ1IgJiBCTUNSX0lTTykgewotCQlCTUNSICY9IH5CTUNSX0lTTzsKLQkJdmVsb2NpdHlfbWlpX3dyaXRlKHZwdHItPm1hY19yZWdzLCBNSUlfUkVHX0JNQ1IsIEJNQ1IpOwotCX0KLX0KLQotLyoqCi0gKglzYWZlX2Rpc2FibGVfbWlpX2F1dG9wb2xsCS0JYXV0b3BvbGwgb2ZmCi0gKglAcmVnczogdmVsb2NpdHkgcmVnaXN0ZXJzCi0gKgotICoJVHVybiBvZmYgdGhlIGF1dG9wb2xsIGFuZCB3YWl0IGZvciBpdCB0byBkaXNhYmxlIG9uIHRoZSBjaGlwCi0gKi8KLQotc3RhdGljIHZvaWQgc2FmZV9kaXNhYmxlX21paV9hdXRvcG9sbChzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MpCi17Ci0JdTE2IHd3OwotCi0JLyogIHR1cm4gb2ZmIE1BVVRPICovCi0Jd3JpdGViKDAsICZyZWdzLT5NSUlDUik7Ci0JZm9yICh3dyA9IDA7IHd3IDwgV19NQVhfVElNRU9VVDsgd3crKykgewotCQl1ZGVsYXkoMSk7Ci0JCWlmIChCWVRFX1JFR19CSVRTX0lTX09OKE1JSVNSX01JRExFLCAmcmVncy0+TUlJU1IpKQotCQkJYnJlYWs7Ci0JfQotfQotCi0vKioKLSAqCWVuYWJsZV9taWlfYXV0b3BvbGwJLQl0dXJuIG9uIGF1dG9wb2xsaW5nCi0gKglAcmVnczogdmVsb2NpdHkgcmVnaXN0ZXJzCi0gKgotICoJRW5hYmxlIHRoZSBNSUkgbGluayBzdGF0dXMgYXV0b3BvbGwgZmVhdHVyZSBvbiB0aGUgVmVsb2NpdHkKLSAqCWhhcmR3YXJlLiBXYWl0IGZvciBpdCB0byBlbmFibGUuCi0gKi8KLQotc3RhdGljIHZvaWQgZW5hYmxlX21paV9hdXRvcG9sbChzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MpCi17Ci0JaW50IGlpOwotCi0Jd3JpdGViKDAsICYocmVncy0+TUlJQ1IpKTsKLQl3cml0ZWIoTUlJQURSX1NXTVBMLCAmcmVncy0+TUlJQURSKTsKLQotCWZvciAoaWkgPSAwOyBpaSA8IFdfTUFYX1RJTUVPVVQ7IGlpKyspIHsKLQkJdWRlbGF5KDEpOwotCQlpZiAoQllURV9SRUdfQklUU19JU19PTihNSUlTUl9NSURMRSwgJnJlZ3MtPk1JSVNSKSkKLQkJCWJyZWFrOwotCX0KLQotCXdyaXRlYihNSUlDUl9NQVVUTywgJnJlZ3MtPk1JSUNSKTsKLQotCWZvciAoaWkgPSAwOyBpaSA8IFdfTUFYX1RJTUVPVVQ7IGlpKyspIHsKLQkJdWRlbGF5KDEpOwotCQlpZiAoIUJZVEVfUkVHX0JJVFNfSVNfT04oTUlJU1JfTUlETEUsICZyZWdzLT5NSUlTUikpCi0JCQlicmVhazsKLQl9Ci0KLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9taWlfcmVhZAktCXJlYWQgTUlJIGRhdGEKLSAqCUByZWdzOiB2ZWxvY2l0eSByZWdpc3RlcnMKLSAqCUBpbmRleDogTUlJIHJlZ2lzdGVyIGluZGV4Ci0gKglAZGF0YTogYnVmZmVyIGZvciByZWNlaXZlZCBkYXRhCi0gKgotICoJUGVyZm9ybSBhIHNpbmdsZSByZWFkIG9mIGFuIE1JSSAxNmJpdCByZWdpc3Rlci4gUmV0dXJucyB6ZXJvCi0gKglvbiBzdWNjZXNzIG9yIC1FVElNRURPVVQgaWYgdGhlIFBIWSBkaWQgbm90IHJlc3BvbmQuCi0gKi8KLQotc3RhdGljIGludCB2ZWxvY2l0eV9taWlfcmVhZChzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncywgdTggaW5kZXgsIHUxNiAqZGF0YSkKLXsKLQl1MTYgd3c7Ci0KLQkvKgotCSAqCURpc2FibGUgTUlJQ1JfTUFVVE8sIHNvIHRoYXQgbWlpIGFkZHIgY2FuIGJlIHNldCBub3JtYWxseQotCSAqLwotCXNhZmVfZGlzYWJsZV9taWlfYXV0b3BvbGwocmVncyk7Ci0KLQl3cml0ZWIoaW5kZXgsICZyZWdzLT5NSUlBRFIpOwotCi0JQllURV9SRUdfQklUU19PTihNSUlDUl9SQ01ELCAmcmVncy0+TUlJQ1IpOwotCi0JZm9yICh3dyA9IDA7IHd3IDwgV19NQVhfVElNRU9VVDsgd3crKykgewotCQlpZiAoIShyZWFkYigmcmVncy0+TUlJQ1IpICYgTUlJQ1JfUkNNRCkpCi0JCQlicmVhazsKLQl9Ci0KLQkqZGF0YSA9IHJlYWR3KCZyZWdzLT5NSUlEQVRBKTsKLQotCWVuYWJsZV9taWlfYXV0b3BvbGwocmVncyk7Ci0JaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpCi0JCXJldHVybiAtRVRJTUVET1VUOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqCXZlbG9jaXR5X21paV93cml0ZQktCXdyaXRlIE1JSSBkYXRhCi0gKglAcmVnczogdmVsb2NpdHkgcmVnaXN0ZXJzCi0gKglAaW5kZXg6IE1JSSByZWdpc3RlciBpbmRleAotICoJQGRhdGE6IDE2Yml0IGRhdGEgZm9yIHRoZSBNSUkgcmVnaXN0ZXIKLSAqCi0gKglQZXJmb3JtIGEgc2luZ2xlIHdyaXRlIHRvIGFuIE1JSSAxNmJpdCByZWdpc3Rlci4gUmV0dXJucyB6ZXJvCi0gKglvbiBzdWNjZXNzIG9yIC1FVElNRURPVVQgaWYgdGhlIFBIWSBkaWQgbm90IHJlc3BvbmQuCi0gKi8KLQotc3RhdGljIGludCB2ZWxvY2l0eV9taWlfd3JpdGUoc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MsIHU4IG1paV9hZGRyLCB1MTYgZGF0YSkKLXsKLQl1MTYgd3c7Ci0KLQkvKgotCSAqCURpc2FibGUgTUlJQ1JfTUFVVE8sIHNvIHRoYXQgbWlpIGFkZHIgY2FuIGJlIHNldCBub3JtYWxseQotCSAqLwotCXNhZmVfZGlzYWJsZV9taWlfYXV0b3BvbGwocmVncyk7Ci0KLQkvKiBNSUkgcmVnIG9mZnNldCAqLwotCXdyaXRlYihtaWlfYWRkciwgJnJlZ3MtPk1JSUFEUik7Ci0JLyogc2V0IE1JSSBkYXRhICovCi0Jd3JpdGV3KGRhdGEsICZyZWdzLT5NSUlEQVRBKTsKLQotCS8qIHR1cm4gb24gTUlJQ1JfV0NNRCAqLwotCUJZVEVfUkVHX0JJVFNfT04oTUlJQ1JfV0NNRCwgJnJlZ3MtPk1JSUNSKTsKLQotCS8qIFdfTUFYX1RJTUVPVVQgaXMgdGhlIHRpbWVvdXQgcGVyaW9kICovCi0JZm9yICh3dyA9IDA7IHd3IDwgV19NQVhfVElNRU9VVDsgd3crKykgewotCQl1ZGVsYXkoNSk7Ci0JCWlmICghKHJlYWRiKCZyZWdzLT5NSUlDUikgJiBNSUlDUl9XQ01EKSkKLQkJCWJyZWFrOwotCX0KLQllbmFibGVfbWlpX2F1dG9wb2xsKHJlZ3MpOwotCi0JaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpCi0JCXJldHVybiAtRVRJTUVET1VUOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqCXZlbG9jaXR5X2dldF9vcHRfbWVkaWFfbW9kZQktCWdldCBtZWRpYSBzZWxlY3Rpb24KLSAqCUB2cHRyOiB2ZWxvY2l0eSBhZGFwdGVyCi0gKgotICoJR2V0IHRoZSBtZWRpYSBtb2RlIHN0b3JlZCBpbiBFRVBST00gb3IgbW9kdWxlIG9wdGlvbnMgYW5kIGxvYWQKLSAqCW1paV9zdGF0dXMgYWNjb3JkaW5nbHkuIFRoZSByZXF1ZXN0ZWQgbGluayBzdGF0ZSBpbmZvcm1hdGlvbgotICoJaXMgYWxzbyByZXR1cm5lZC4KLSAqLwotCi1zdGF0aWMgdTMyIHZlbG9jaXR5X2dldF9vcHRfbWVkaWFfbW9kZShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKLXsKLQl1MzIgc3RhdHVzID0gMDsKLQotCXN3aXRjaCAodnB0ci0+b3B0aW9ucy5zcGRfZHB4KSB7Ci0JY2FzZSBTUERfRFBYX0FVVE86Ci0JCXN0YXR1cyA9IFZFTE9DSVRZX0FVVE9ORUdfRU5BQkxFOwotCQlicmVhazsKLQljYXNlIFNQRF9EUFhfMTAwX0ZVTEw6Ci0JCXN0YXR1cyA9IFZFTE9DSVRZX1NQRUVEXzEwMCB8IFZFTE9DSVRZX0RVUExFWF9GVUxMOwotCQlicmVhazsKLQljYXNlIFNQRF9EUFhfMTBfRlVMTDoKLQkJc3RhdHVzID0gVkVMT0NJVFlfU1BFRURfMTAgfCBWRUxPQ0lUWV9EVVBMRVhfRlVMTDsKLQkJYnJlYWs7Ci0JY2FzZSBTUERfRFBYXzEwMF9IQUxGOgotCQlzdGF0dXMgPSBWRUxPQ0lUWV9TUEVFRF8xMDA7Ci0JCWJyZWFrOwotCWNhc2UgU1BEX0RQWF8xMF9IQUxGOgotCQlzdGF0dXMgPSBWRUxPQ0lUWV9TUEVFRF8xMDsKLQkJYnJlYWs7Ci0JfQotCXZwdHItPm1paV9zdGF0dXMgPSBzdGF0dXM7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoqCi0gKgltaWlfc2V0X2F1dG9fb24JCS0JYXV0b25lZ290aWF0ZSBvbgotICoJQHZwdHI6IHZlbG9jaXR5Ci0gKgotICoJRW5hYmxlIGF1dG9uZWdvdGF0aW9uIG9uIHRoaXMgaW50ZXJmYWNlCi0gKi8KLQotc3RhdGljIHZvaWQgbWlpX3NldF9hdXRvX29uKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQotewotCWlmIChNSUlfUkVHX0JJVFNfSVNfT04oQk1DUl9BVVRPLCBNSUlfUkVHX0JNQ1IsIHZwdHItPm1hY19yZWdzKSkKLQkJTUlJX1JFR19CSVRTX09OKEJNQ1JfUkVBVVRPLCBNSUlfUkVHX0JNQ1IsIHZwdHItPm1hY19yZWdzKTsKLQllbHNlCi0JCU1JSV9SRUdfQklUU19PTihCTUNSX0FVVE8sIE1JSV9SRUdfQk1DUiwgdnB0ci0+bWFjX3JlZ3MpOwotfQotCi0KLS8qCi1zdGF0aWMgdm9pZCBtaWlfc2V0X2F1dG9fb2ZmKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICogdnB0cikKLXsKLSAgICBNSUlfUkVHX0JJVFNfT0ZGKEJNQ1JfQVVUTywgTUlJX1JFR19CTUNSLCB2cHRyLT5tYWNfcmVncyk7Ci19Ci0qLwotCi0vKioKLSAqCXNldF9taWlfZmxvd19jb250cm9sCS0JZmxvdyBjb250cm9sIHNldHVwCi0gKglAdnB0cjogdmVsb2NpdHkgaW50ZXJmYWNlCi0gKgotICoJU2V0IHVwIHRoZSBmbG93IGNvbnRyb2wgb24gdGhpcyBpbnRlcmZhY2UgYWNjb3JkaW5nIHRvCi0gKgl0aGUgc3VwcGxpZWQgdXNlci9lZXByb20gb3B0aW9ucy4KLSAqLwotCi1zdGF0aWMgdm9pZCBzZXRfbWlpX2Zsb3dfY29udHJvbChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKLXsKLQkvKkVuYWJsZSBvciBEaXNhYmxlIFBBVVNFIGluIEFOQVIgKi8KLQlzd2l0Y2ggKHZwdHItPm9wdGlvbnMuZmxvd19jbnRsKSB7Ci0JY2FzZSBGTE9XX0NOVExfVFg6Ci0JCU1JSV9SRUdfQklUU19PRkYoQU5BUl9QQVVTRSwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7Ci0JCU1JSV9SRUdfQklUU19PTihBTkFSX0FTTURJUiwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBGTE9XX0NOVExfUlg6Ci0JCU1JSV9SRUdfQklUU19PTihBTkFSX1BBVVNFLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKLQkJTUlJX1JFR19CSVRTX09OKEFOQVJfQVNNRElSLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZMT1dfQ05UTF9UWF9SWDoKLQkJTUlJX1JFR19CSVRTX09OKEFOQVJfUEFVU0UsIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQlNSUlfUkVHX0JJVFNfT04oQU5BUl9BU01ESVIsIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQlicmVhazsKLQotCWNhc2UgRkxPV19DTlRMX0RJU0FCTEU6Ci0JCU1JSV9SRUdfQklUU19PRkYoQU5BUl9QQVVTRSwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7Ci0JCU1JSV9SRUdfQklUU19PRkYoQU5BUl9BU01ESVIsIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfc2V0X21lZGlhX21vZGUJCS0Jc2V0IG1lZGlhIG1vZGUKLSAqCUBtaWlfc3RhdHVzOiBvbGQgTUlJIGxpbmsgc3RhdGUKLSAqCi0gKglDaGVjayB0aGUgbWVkaWEgbGluayBzdGF0ZSBhbmQgY29uZmlndXJlIHRoZSBmbG93IGNvbnRyb2wKLSAqCVBIWSBhbmQgYWxzbyB2ZWxvY2l0eSBoYXJkd2FyZSBzZXR1cCBhY2NvcmRpbmdseS4gSW4gcGFydGljdWxhcgotICoJd2UgbmVlZCB0byBzZXQgdXAgQ0QgcG9sbGluZyBhbmQgZnJhbWUgYnVyc3RpbmcuCi0gKi8KLQotc3RhdGljIGludCB2ZWxvY2l0eV9zZXRfbWVkaWFfbW9kZShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgdTMyIG1paV9zdGF0dXMpCi17Ci0JdTMyIGN1cnJfc3RhdHVzOwotCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwotCi0JdnB0ci0+bWlpX3N0YXR1cyA9IG1paV9jaGVja19tZWRpYV9tb2RlKHZwdHItPm1hY19yZWdzKTsKLQljdXJyX3N0YXR1cyA9IHZwdHItPm1paV9zdGF0dXMgJiAoflZFTE9DSVRZX0xJTktfRkFJTCk7Ci0KLQkvKiBTZXQgbWlpIGxpbmsgc3RhdHVzICovCi0Jc2V0X21paV9mbG93X2NvbnRyb2wodnB0cik7Ci0KLQkvKgotCSAgIENoZWNrIGlmIG5ldyBzdGF0dXMgaXMgY29uc2lzZW50IHdpdGggY3VycmVudCBzdGF0dXMKLQkgICBpZiAoKChtaWlfc3RhdHVzICYgY3Vycl9zdGF0dXMpICYgVkVMT0NJVFlfQVVUT05FR19FTkFCTEUpCi0JICAgfHwgKG1paV9zdGF0dXM9PWN1cnJfc3RhdHVzKSkgewotCSAgIHZwdHItPm1paV9zdGF0dXM9bWlpX2NoZWNrX21lZGlhX21vZGUodnB0ci0+bWFjX3JlZ3MpOwotCSAgIHZwdHItPm1paV9zdGF0dXM9Y2hlY2tfY29ubmVjdGlvbl90eXBlKHZwdHItPm1hY19yZWdzKTsKLQkgICBWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICJWZWxvY2l0eSBsaW5rIG5vIGNoYW5nZVxuIik7Ci0JICAgcmV0dXJuIDA7Ci0JICAgfQotCSAqLwotCi0JaWYgKFBIWUlEX0dFVF9QSFlfSUQodnB0ci0+cGh5X2lkKSA9PSBQSFlJRF9DSUNBREFfQ1M4MjAxKSB7Ci0JCU1JSV9SRUdfQklUU19PTihBVVhDUl9NRFBQUywgTUlJX1JFR19BVVhDUiwgdnB0ci0+bWFjX3JlZ3MpOwotCX0KLQotCS8qCi0JICoJSWYgY29ubmVjdGlvbiB0eXBlIGlzIEFVVE8KLQkgKi8KLQlpZiAobWlpX3N0YXR1cyAmIFZFTE9DSVRZX0FVVE9ORUdfRU5BQkxFKSB7Ci0JCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIlZlbG9jaXR5IGlzIEFVVE8gbW9kZVxuIik7Ci0JCS8qIGNsZWFyIGZvcmNlIE1BQyBtb2RlIGJpdCAqLwotCQlCWVRFX1JFR19CSVRTX09GRihDSElQR0NSX0ZDTU9ERSwgJnJlZ3MtPkNISVBHQ1IpOwotCQkvKiBzZXQgZHVwbGV4IG1vZGUgb2YgTUFDIGFjY29yZGluZyB0byBkdXBsZXggbW9kZSBvZiBNSUkgKi8KLQkJTUlJX1JFR19CSVRTX09OKEFOQVJfVFhGRCB8IEFOQVJfVFggfCBBTkFSXzEwRkQgfCBBTkFSXzEwLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKLQkJTUlJX1JFR19CSVRTX09OKEcxMDAwQ1JfMTAwMEZEIHwgRzEwMDBDUl8xMDAwLCBNSUlfUkVHX0cxMDAwQ1IsIHZwdHItPm1hY19yZWdzKTsKLQkJTUlJX1JFR19CSVRTX09OKEJNQ1JfU1BFRUQxRywgTUlJX1JFR19CTUNSLCB2cHRyLT5tYWNfcmVncyk7Ci0KLQkJLyogZW5hYmxlIEFVVE8tTkVHTyBtb2RlICovCi0JCW1paV9zZXRfYXV0b19vbih2cHRyKTsKLQl9IGVsc2UgewotCQl1MTYgQU5BUjsKLQkJdTggQ0hJUEdDUjsKLQotCQkvKgotCQkgKiAxLiBpZiBpdCdzIDMxMTksIGRpc2FibGUgZnJhbWUgYnVyc3RpbmcgaW4gaGFsZmR1cGxleCBtb2RlCi0JCSAqICAgIGFuZCBlbmFibGUgaXQgaW4gZnVsbGR1cGxleCBtb2RlCi0JCSAqIDIuIHNldCBjb3JyZWN0IE1JSS9HTUlJIGFuZCBoYWxmL2Z1bGwgZHVwbGV4IG1vZGUgaW4gQ0hJUEdDUgotCQkgKiAzLiBvbmx5IGVuYWJsZSBDRCBoZWFydCBiZWF0IGNvdW50ZXIgaW4gMTBIRCBtb2RlCi0JCSAqLwotCi0JCS8qIHNldCBmb3JjZSBNQUMgbW9kZSBiaXQgKi8KLQkJQllURV9SRUdfQklUU19PTihDSElQR0NSX0ZDTU9ERSwgJnJlZ3MtPkNISVBHQ1IpOwotCi0JCUNISVBHQ1IgPSByZWFkYigmcmVncy0+Q0hJUEdDUik7Ci0JCUNISVBHQ1IgJj0gfkNISVBHQ1JfRkNHTUlJOwotCi0JCWlmIChtaWlfc3RhdHVzICYgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpIHsKLQkJCUNISVBHQ1IgfD0gQ0hJUEdDUl9GQ0ZEWDsKLQkJCXdyaXRlYihDSElQR0NSLCAmcmVncy0+Q0hJUEdDUik7Ci0JCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICJzZXQgVmVsb2NpdHkgdG8gZm9yY2VkIGZ1bGwgbW9kZVxuIik7Ci0JCQlpZiAodnB0ci0+cmV2X2lkIDwgUkVWX0lEX1ZUMzIxNl9BMCkKLQkJCQlCWVRFX1JFR19CSVRTX09GRihUQ1JfVEIyQkRJUywgJnJlZ3MtPlRDUik7Ci0JCX0gZWxzZSB7Ci0JCQlDSElQR0NSICY9IH5DSElQR0NSX0ZDRkRYOwotCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAic2V0IFZlbG9jaXR5IHRvIGZvcmNlZCBoYWxmIG1vZGVcbiIpOwotCQkJd3JpdGViKENISVBHQ1IsICZyZWdzLT5DSElQR0NSKTsKLQkJCWlmICh2cHRyLT5yZXZfaWQgPCBSRVZfSURfVlQzMjE2X0EwKQotCQkJCUJZVEVfUkVHX0JJVFNfT04oVENSX1RCMkJESVMsICZyZWdzLT5UQ1IpOwotCQl9Ci0KLQkJTUlJX1JFR19CSVRTX09GRihHMTAwMENSXzEwMDBGRCB8IEcxMDAwQ1JfMTAwMCwgTUlJX1JFR19HMTAwMENSLCB2cHRyLT5tYWNfcmVncyk7Ci0KLQkJaWYgKCEobWlpX3N0YXR1cyAmIFZFTE9DSVRZX0RVUExFWF9GVUxMKSAmJiAobWlpX3N0YXR1cyAmIFZFTE9DSVRZX1NQRUVEXzEwKSkgewotCQkJQllURV9SRUdfQklUU19PRkYoVEVTVENGR19IQkRJUywgJnJlZ3MtPlRFU1RDRkcpOwotCQl9IGVsc2UgewotCQkJQllURV9SRUdfQklUU19PTihURVNUQ0ZHX0hCRElTLCAmcmVncy0+VEVTVENGRyk7Ci0JCX0KLQkJLyogTUlJX1JFR19CSVRTX09GRihCTUNSX1NQRUVEMUcsIE1JSV9SRUdfQk1DUiwgdnB0ci0+bWFjX3JlZ3MpOyAqLwotCQl2ZWxvY2l0eV9taWlfcmVhZCh2cHRyLT5tYWNfcmVncywgTUlJX1JFR19BTkFSLCAmQU5BUik7Ci0JCUFOQVIgJj0gKH4oQU5BUl9UWEZEIHwgQU5BUl9UWCB8IEFOQVJfMTBGRCB8IEFOQVJfMTApKTsKLQkJaWYgKG1paV9zdGF0dXMgJiBWRUxPQ0lUWV9TUEVFRF8xMDApIHsKLQkJCWlmIChtaWlfc3RhdHVzICYgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpCi0JCQkJQU5BUiB8PSBBTkFSX1RYRkQ7Ci0JCQllbHNlCi0JCQkJQU5BUiB8PSBBTkFSX1RYOwotCQl9IGVsc2UgewotCQkJaWYgKG1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkKLQkJCQlBTkFSIHw9IEFOQVJfMTBGRDsKLQkJCWVsc2UKLQkJCQlBTkFSIHw9IEFOQVJfMTA7Ci0JCX0KLQkJdmVsb2NpdHlfbWlpX3dyaXRlKHZwdHItPm1hY19yZWdzLCBNSUlfUkVHX0FOQVIsIEFOQVIpOwotCQkvKiBlbmFibGUgQVVUTy1ORUdPIG1vZGUgKi8KLQkJbWlpX3NldF9hdXRvX29uKHZwdHIpOwotCQkvKiBNSUlfUkVHX0JJVFNfT04oQk1DUl9BVVRPLCBNSUlfUkVHX0JNQ1IsIHZwdHItPm1hY19yZWdzKTsgKi8KLQl9Ci0JLyogdnB0ci0+bWlpX3N0YXR1cz1taWlfY2hlY2tfbWVkaWFfbW9kZSh2cHRyLT5tYWNfcmVncyk7ICovCi0JLyogdnB0ci0+bWlpX3N0YXR1cz1jaGVja19jb25uZWN0aW9uX3R5cGUodnB0ci0+bWFjX3JlZ3MpOyAqLwotCXJldHVybiBWRUxPQ0lUWV9MSU5LX0NIQU5HRTsKLX0KLQotLyoqCi0gKgltaWlfY2hlY2tfbWVkaWFfbW9kZQktCWNoZWNrIG1lZGlhIHN0YXRlCi0gKglAcmVnczogdmVsb2NpdHkgcmVnaXN0ZXJzCi0gKgotICoJQ2hlY2sgdGhlIGN1cnJlbnQgTUlJIHN0YXR1cyBhbmQgZGV0ZXJtaW5lIHRoZSBsaW5rIHN0YXR1cwotICoJYWNjb3JkaW5nbHkKLSAqLwotCi1zdGF0aWMgdTMyIG1paV9jaGVja19tZWRpYV9tb2RlKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncykKLXsKLQl1MzIgc3RhdHVzID0gMDsKLQl1MTYgQU5BUjsKLQotCWlmICghTUlJX1JFR19CSVRTX0lTX09OKEJNU1JfTE5LLCBNSUlfUkVHX0JNU1IsIHJlZ3MpKQotCQlzdGF0dXMgfD0gVkVMT0NJVFlfTElOS19GQUlMOwotCi0JaWYgKE1JSV9SRUdfQklUU19JU19PTihHMTAwMENSXzEwMDBGRCwgTUlJX1JFR19HMTAwMENSLCByZWdzKSkKLQkJc3RhdHVzIHw9IFZFTE9DSVRZX1NQRUVEXzEwMDAgfCBWRUxPQ0lUWV9EVVBMRVhfRlVMTDsKLQllbHNlIGlmIChNSUlfUkVHX0JJVFNfSVNfT04oRzEwMDBDUl8xMDAwLCBNSUlfUkVHX0cxMDAwQ1IsIHJlZ3MpKQotCQlzdGF0dXMgfD0gKFZFTE9DSVRZX1NQRUVEXzEwMDApOwotCWVsc2UgewotCQl2ZWxvY2l0eV9taWlfcmVhZChyZWdzLCBNSUlfUkVHX0FOQVIsICZBTkFSKTsKLQkJaWYgKEFOQVIgJiBBTkFSX1RYRkQpCi0JCQlzdGF0dXMgfD0gKFZFTE9DSVRZX1NQRUVEXzEwMCB8IFZFTE9DSVRZX0RVUExFWF9GVUxMKTsKLQkJZWxzZSBpZiAoQU5BUiAmIEFOQVJfVFgpCi0JCQlzdGF0dXMgfD0gVkVMT0NJVFlfU1BFRURfMTAwOwotCQllbHNlIGlmIChBTkFSICYgQU5BUl8xMEZEKQotCQkJc3RhdHVzIHw9IChWRUxPQ0lUWV9TUEVFRF8xMCB8IFZFTE9DSVRZX0RVUExFWF9GVUxMKTsKLQkJZWxzZQotCQkJc3RhdHVzIHw9IChWRUxPQ0lUWV9TUEVFRF8xMCk7Ci0JfQotCi0JaWYgKE1JSV9SRUdfQklUU19JU19PTihCTUNSX0FVVE8sIE1JSV9SRUdfQk1DUiwgcmVncykpIHsKLQkJdmVsb2NpdHlfbWlpX3JlYWQocmVncywgTUlJX1JFR19BTkFSLCAmQU5BUik7Ci0JCWlmICgoQU5BUiAmIChBTkFSX1RYRkQgfCBBTkFSX1RYIHwgQU5BUl8xMEZEIHwgQU5BUl8xMCkpCi0JCSAgICA9PSAoQU5BUl9UWEZEIHwgQU5BUl9UWCB8IEFOQVJfMTBGRCB8IEFOQVJfMTApKSB7Ci0JCQlpZiAoTUlJX1JFR19CSVRTX0lTX09OKEcxMDAwQ1JfMTAwMCB8IEcxMDAwQ1JfMTAwMEZELCBNSUlfUkVHX0cxMDAwQ1IsIHJlZ3MpKQotCQkJCXN0YXR1cyB8PSBWRUxPQ0lUWV9BVVRPTkVHX0VOQUJMRTsKLQkJfQotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyB1MzIgY2hlY2tfY29ubmVjdGlvbl90eXBlKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncykKLXsKLQl1MzIgc3RhdHVzID0gMDsKLQl1OCBQSFlTUjA7Ci0JdTE2IEFOQVI7Ci0JUEhZU1IwID0gcmVhZGIoJnJlZ3MtPlBIWVNSMCk7Ci0KLQkvKgotCSAgIGlmICghKFBIWVNSMCAmIFBIWVNSMF9MSU5LR0QpKQotCSAgIHN0YXR1c3w9VkVMT0NJVFlfTElOS19GQUlMOwotCSAqLwotCi0JaWYgKFBIWVNSMCAmIFBIWVNSMF9GRFBYKQotCQlzdGF0dXMgfD0gVkVMT0NJVFlfRFVQTEVYX0ZVTEw7Ci0KLQlpZiAoUEhZU1IwICYgUEhZU1IwX1NQREcpCi0JCXN0YXR1cyB8PSBWRUxPQ0lUWV9TUEVFRF8xMDAwOwotCWVsc2UgaWYgKFBIWVNSMCAmIFBIWVNSMF9TUEQxMCkKLQkJc3RhdHVzIHw9IFZFTE9DSVRZX1NQRUVEXzEwOwotCWVsc2UKLQkJc3RhdHVzIHw9IFZFTE9DSVRZX1NQRUVEXzEwMDsKLQotCWlmIChNSUlfUkVHX0JJVFNfSVNfT04oQk1DUl9BVVRPLCBNSUlfUkVHX0JNQ1IsIHJlZ3MpKSB7Ci0JCXZlbG9jaXR5X21paV9yZWFkKHJlZ3MsIE1JSV9SRUdfQU5BUiwgJkFOQVIpOwotCQlpZiAoKEFOQVIgJiAoQU5BUl9UWEZEIHwgQU5BUl9UWCB8IEFOQVJfMTBGRCB8IEFOQVJfMTApKQotCQkgICAgPT0gKEFOQVJfVFhGRCB8IEFOQVJfVFggfCBBTkFSXzEwRkQgfCBBTkFSXzEwKSkgewotCQkJaWYgKE1JSV9SRUdfQklUU19JU19PTihHMTAwMENSXzEwMDAgfCBHMTAwMENSXzEwMDBGRCwgTUlJX1JFR19HMTAwMENSLCByZWdzKSkKLQkJCQlzdGF0dXMgfD0gVkVMT0NJVFlfQVVUT05FR19FTkFCTEU7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKioKLSAqCWVuYWJsZV9mbG93X2NvbnRyb2xfYWJpbGl0eQktCWZsb3cgY29udHJvbAotICoJQHZwdHI6IHZlbG9pdHkgdG8gY29uZmlndXJlCi0gKgotICoJU2V0IHVwIGZsb3cgY29udHJvbCBhY2NvcmRpbmcgdG8gdGhlIGZsb3cgY29udHJvbCBvcHRpb25zCi0gKglkZXRlcm1pbmVkIGJ5IHRoZSBlZXByb20vY29uZmlndXJhdGlvbi4KLSAqLwotCi1zdGF0aWMgdm9pZCBlbmFibGVfZmxvd19jb250cm9sX2FiaWxpdHkoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCi17Ci0KLQlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKLQotCXN3aXRjaCAodnB0ci0+b3B0aW9ucy5mbG93X2NudGwpIHsKLQotCWNhc2UgRkxPV19DTlRMX0RFRkFVTFQ6Ci0JCWlmIChCWVRFX1JFR19CSVRTX0lTX09OKFBIWVNSMF9SWEZMQywgJnJlZ3MtPlBIWVNSMCkpCi0JCQl3cml0ZWwoQ1IwX0ZEWFJGQ0VOLCAmcmVncy0+Q1IwU2V0KTsKLQkJZWxzZQotCQkJd3JpdGVsKENSMF9GRFhSRkNFTiwgJnJlZ3MtPkNSMENscik7Ci0KLQkJaWYgKEJZVEVfUkVHX0JJVFNfSVNfT04oUEhZU1IwX1RYRkxDLCAmcmVncy0+UEhZU1IwKSkKLQkJCXdyaXRlbChDUjBfRkRYVEZDRU4sICZyZWdzLT5DUjBTZXQpOwotCQllbHNlCi0JCQl3cml0ZWwoQ1IwX0ZEWFRGQ0VOLCAmcmVncy0+Q1IwQ2xyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZMT1dfQ05UTF9UWDoKLQkJd3JpdGVsKENSMF9GRFhURkNFTiwgJnJlZ3MtPkNSMFNldCk7Ci0JCXdyaXRlbChDUjBfRkRYUkZDRU4sICZyZWdzLT5DUjBDbHIpOwotCQlicmVhazsKLQotCWNhc2UgRkxPV19DTlRMX1JYOgotCQl3cml0ZWwoQ1IwX0ZEWFJGQ0VOLCAmcmVncy0+Q1IwU2V0KTsKLQkJd3JpdGVsKENSMF9GRFhURkNFTiwgJnJlZ3MtPkNSMENscik7Ci0JCWJyZWFrOwotCi0JY2FzZSBGTE9XX0NOVExfVFhfUlg6Ci0JCXdyaXRlbChDUjBfRkRYVEZDRU4sICZyZWdzLT5DUjBTZXQpOwotCQl3cml0ZWwoQ1IwX0ZEWFJGQ0VOLCAmcmVncy0+Q1IwU2V0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZMT1dfQ05UTF9ESVNBQkxFOgotCQl3cml0ZWwoQ1IwX0ZEWFJGQ0VOLCAmcmVncy0+Q1IwQ2xyKTsKLQkJd3JpdGVsKENSMF9GRFhURkNFTiwgJnJlZ3MtPkNSMENscik7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi19Ci0KIAogLyoqCiAgKgl2ZWxvY2l0eV9ldGh0b29sX3VwCS0JcHJlIGhvb2sgZm9yIGV0aHRvb2wKQEAgLTI5OTEsNyArMzA3OCw2IEBACiAgKglDYWxsZWQgYmVmb3JlIGFuIGV0aHRvb2wgb3BlcmF0aW9uLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUKICAqCWNoaXAgaXMgb3V0IG9mIEQzIHN0YXRlIGJlZm9yZSB3ZSBwb2tlIGF0IGl0LgogICovCi0KIHN0YXRpYyBpbnQgdmVsb2NpdHlfZXRodG9vbF91cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTMwMDcsNyArMzA5Myw2IEBACiAgKglDYWxsZWQgYWZ0ZXIgYW4gZXRodG9vbCBvcGVyYXRpb24uIFJlc3RvcmUgdGhlIGNoaXAgYmFjayB0byBEMwogICoJc3RhdGUgaWYgaXQgaXNuJ3QgcnVubmluZy4KICAqLwotCiBzdGF0aWMgdm9pZCB2ZWxvY2l0eV9ldGh0b29sX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zMDE4LDcgKzMxMDMsNyBAQAogc3RhdGljIGludCB2ZWxvY2l0eV9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOworCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzID0gdnB0ci0+bWFjX3JlZ3M7CiAJdTMyIHN0YXR1czsKIAlzdGF0dXMgPSBjaGVja19jb25uZWN0aW9uX3R5cGUodnB0ci0+bWFjX3JlZ3MpOwogCkBAIC0zMDcyLDEzICszMTU3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdTMyIHZlbG9jaXR5X2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwotCXJldHVybiBCWVRFX1JFR19CSVRTX0lTX09OKFBIWVNSMF9MSU5LR0QsICZyZWdzLT5QSFlTUjApID8gMSA6IDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHZlbG9jaXR5X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCiB7CiAJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMzE1NywzMTcgKzMyMzUsOCBAQAogCS5jb21wbGV0ZQk9CXZlbG9jaXR5X2V0aHRvb2xfZG93bgogfTsKIAotLyoqCi0gKgl2ZWxvY2l0eV9taWlfaW9jdGwJCS0JTUlJIGlvY3RsIGhhbmRsZXIKLSAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCi0gKglAaWZyOiB0aGUgaWZyZXEgYmxvY2sgZm9yIHRoZSBpb2N0bAotICoJQGNtZDogdGhlIGNvbW1hbmQKLSAqCi0gKglQcm9jZXNzIE1JSSByZXF1ZXN0cyBtYWRlIHZpYSBpb2N0bCBmcm9tIHRoZSBuZXR3b3JrIGxheWVyLiBUaGVzZQotICoJYXJlIHVzZWQgYnkgdG9vbHMgbGlrZSBrdWR6dSB0byBpbnRlcnJvZ2F0ZSB0aGUgbGluayBzdGF0ZSBvZiB0aGUKLSAqCWhhcmR3YXJlCi0gKi8KLQotc3RhdGljIGludCB2ZWxvY2l0eV9taWlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCi17Ci0Jc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IG1paV9pb2N0bF9kYXRhICptaWlkYXRhID0gaWZfbWlpKGlmcik7Ci0JaW50IGVycjsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTSU9DR01JSVBIWToKLQkJbWlpZGF0YS0+cGh5X2lkID0gcmVhZGIoJnJlZ3MtPk1JSUFEUikgJiAweDFmOwotCQlicmVhazsKLQljYXNlIFNJT0NHTUlJUkVHOgotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlpZih2ZWxvY2l0eV9taWlfcmVhZCh2cHRyLT5tYWNfcmVncywgbWlpZGF0YS0+cmVnX251bSAmIDB4MWYsICYobWlpZGF0YS0+dmFsX291dCkpIDwgMCkKLQkJCXJldHVybiAtRVRJTUVET1VUOwotCQlicmVhazsKLQljYXNlIFNJT0NTTUlJUkVHOgotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdnB0ci0+bG9jaywgZmxhZ3MpOwotCQllcnIgPSB2ZWxvY2l0eV9taWlfd3JpdGUodnB0ci0+bWFjX3JlZ3MsIG1paWRhdGEtPnJlZ19udW0gJiAweDFmLCBtaWlkYXRhLT52YWxfaW4pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cHRyLT5sb2NrLCBmbGFncyk7Ci0JCWNoZWNrX2Nvbm5lY3Rpb25fdHlwZSh2cHRyLT5tYWNfcmVncyk7Ci0JCWlmKGVycikKLQkJCXJldHVybiBlcnI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KICNpZmRlZiBDT05GSUdfUE0KLQotLyoqCi0gKgl2ZWxvY2l0eV9zYXZlX2NvbnRleHQJLQlzYXZlIHJlZ2lzdGVycwotICoJQHZwdHI6IHZlbG9jaXR5Ci0gKglAY29udGV4dDogYnVmZmVyIGZvciBzdG9yZWQgY29udGV4dAotICoKLSAqCVJldHJpZXZlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgdmVsb2NpdHkgaGFyZHdhcmUKLSAqCWFuZCBzdGFzaCBpdCBpbiB0aGUgY29udGV4dCBzdHJ1Y3R1cmUsIGZvciB1c2UgYnkgdGhlIGNvbnRleHQKLSAqCXJlc3RvcmUgZnVuY3Rpb25zLiBUaGlzIGFsbG93cyB1cyB0byBzYXZlIHRoaW5ncyB3ZSBuZWVkIGFjcm9zcwotICoJcG93ZXIgZG93biBzdGF0ZXMKLSAqLwotCi1zdGF0aWMgdm9pZCB2ZWxvY2l0eV9zYXZlX2NvbnRleHQoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIHN0cnVjdCB2ZWxvY2l0eV9jb250ZXh0ICogY29udGV4dCkKLXsKLQlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKLQl1MTYgaTsKLQl1OCBfX2lvbWVtICpwdHIgPSAodTggX19pb21lbSAqKXJlZ3M7Ci0KLQlmb3IgKGkgPSBNQUNfUkVHX1BBUjsgaSA8IE1BQ19SRUdfQ1IwX0NMUjsgaSArPSA0KQotCQkqKCh1MzIgKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSkgPSByZWFkbChwdHIgKyBpKTsKLQotCWZvciAoaSA9IE1BQ19SRUdfTUFSOyBpIDwgTUFDX1JFR19URENTUl9DTFI7IGkgKz0gNCkKLQkJKigodTMyICopIChjb250ZXh0LT5tYWNfcmVnICsgaSkpID0gcmVhZGwocHRyICsgaSk7Ci0KLQlmb3IgKGkgPSBNQUNfUkVHX1JEQkFTRV9MTzsgaSA8IE1BQ19SRUdfRklGT19URVNUMDsgaSArPSA0KQotCQkqKCh1MzIgKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSkgPSByZWFkbChwdHIgKyBpKTsKLQotfQotCi0vKioKLSAqCXZlbG9jaXR5X3Jlc3RvcmVfY29udGV4dAktCXJlc3RvcmUgcmVnaXN0ZXJzCi0gKglAdnB0cjogdmVsb2NpdHkKLSAqCUBjb250ZXh0OiBidWZmZXIgZm9yIHN0b3JlZCBjb250ZXh0Ci0gKgotICoJUmVsb2FkIHRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIGZyb20gdGhlIHZlbG9jaXR5IGNvbnRleHQKLSAqCWNyZWF0ZWQgYnkgdmVsb2NpdHlfc2F2ZV9jb250ZXh0LgotICovCi0KLXN0YXRpYyB2b2lkIHZlbG9jaXR5X3Jlc3RvcmVfY29udGV4dChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgc3RydWN0IHZlbG9jaXR5X2NvbnRleHQgKmNvbnRleHQpCi17Ci0Jc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzID0gdnB0ci0+bWFjX3JlZ3M7Ci0JaW50IGk7Ci0JdTggX19pb21lbSAqcHRyID0gKHU4IF9faW9tZW0gKilyZWdzOwotCi0JZm9yIChpID0gTUFDX1JFR19QQVI7IGkgPCBNQUNfUkVHX0NSMF9TRVQ7IGkgKz0gNCkgewotCQl3cml0ZWwoKigodTMyICopIChjb250ZXh0LT5tYWNfcmVnICsgaSkpLCBwdHIgKyBpKTsKLQl9Ci0KLQkvKiBKdXN0IHNraXAgY3IwICovCi0JZm9yIChpID0gTUFDX1JFR19DUjFfU0VUOyBpIDwgTUFDX1JFR19DUjBfQ0xSOyBpKyspIHsKLQkJLyogQ2xlYXIgKi8KLQkJd3JpdGViKH4oKigodTggKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSkpLCBwdHIgKyBpICsgNCk7Ci0JCS8qIFNldCAqLwotCQl3cml0ZWIoKigodTggKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSksIHB0ciArIGkpOwotCX0KLQotCWZvciAoaSA9IE1BQ19SRUdfTUFSOyBpIDwgTUFDX1JFR19JTVI7IGkgKz0gNCkgewotCQl3cml0ZWwoKigodTMyICopIChjb250ZXh0LT5tYWNfcmVnICsgaSkpLCBwdHIgKyBpKTsKLQl9Ci0KLQlmb3IgKGkgPSBNQUNfUkVHX1JEQkFTRV9MTzsgaSA8IE1BQ19SRUdfRklGT19URVNUMDsgaSArPSA0KSB7Ci0JCXdyaXRlbCgqKCh1MzIgKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSksIHB0ciArIGkpOwotCX0KLQotCWZvciAoaSA9IE1BQ19SRUdfVERDU1JfU0VUOyBpIDw9IE1BQ19SRUdfUkRDU1JfU0VUOyBpKyspIHsKLQkJd3JpdGViKCooKHU4ICopIChjb250ZXh0LT5tYWNfcmVnICsgaSkpLCBwdHIgKyBpKTsKLQl9Ci0KLX0KLQotLyoqCi0gKgl3b2xfY2FsY19jcmMJCS0JV09MIENSQwotICoJQHBhdHRlcm46IGRhdGEgcGF0dGVybgotICoJQG1hc2tfcGF0dGVybjogbWFzawotICoKLSAqCUNvbXB1dGUgdGhlIHdha2Ugb24gbGFuIGNyYyBoYXNoZXMgZm9yIHRoZSBwYWNrZXQgaGVhZGVyCi0gKgl3ZSBhcmUgaW50ZXJlc3RlZCBpbi4KLSAqLwotCi1zdGF0aWMgdTE2IHdvbF9jYWxjX2NyYyhpbnQgc2l6ZSwgdTggKiBwYXR0ZXJuLCB1OCAqbWFza19wYXR0ZXJuKQotewotCXUxNiBjcmMgPSAweEZGRkY7Ci0JdTggbWFzazsKLQlpbnQgaSwgajsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJbWFzayA9IG1hc2tfcGF0dGVybltpXTsKLQotCQkvKiBTa2lwIHRoaXMgbG9vcCBpZiB0aGUgbWFzayBlcXVhbHMgdG8gemVybyAqLwotCQlpZiAobWFzayA9PSAweDAwKQotCQkJY29udGludWU7Ci0KLQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgewotCQkJaWYgKChtYXNrICYgMHgwMSkgPT0gMCkgewotCQkJCW1hc2sgPj49IDE7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQltYXNrID4+PSAxOwotCQkJY3JjID0gY3JjX2NjaXR0KGNyYywgJihwYXR0ZXJuW2kgKiA4ICsgal0pLCAxKTsKLQkJfQotCX0KLQkvKglGaW5hbGx5LCBpbnZlcnQgdGhlIHJlc3VsdCBvbmNlIHRvIGdldCB0aGUgY29ycmVjdCBkYXRhICovCi0JY3JjID0gfmNyYzsKLQlyZXR1cm4gYml0cmV2MzIoY3JjKSA+PiAxNjsKLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9zZXRfd29sCS0Jc2V0IHVwIGZvciB3YWtlIG9uIGxhbgotICoJQHZwdHI6IHZlbG9jaXR5IHRvIHNldCBXT0wgc3RhdHVzIG9uCi0gKgotICoJU2V0IGEgY2FyZCB1cCBmb3Igd2FrZSBvbiBsYW4gZWl0aGVyIGJ5IHVuaWNhc3Qgb3IgYnkKLSAqCUFSUCBwYWNrZXQuCi0gKgotICoJRklYTUU6IGNoZWNrIHN0YXRpYyBidWZmZXIgaXMgc2FmZSBoZXJlCi0gKi8KLQotc3RhdGljIGludCB2ZWxvY2l0eV9zZXRfd29sKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQotewotCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwotCXN0YXRpYyB1OCBidWZbMjU2XTsKLQlpbnQgaTsKLQotCXN0YXRpYyB1MzIgbWFza19wYXR0ZXJuWzJdWzRdID0gewotCQl7MHgwMDIwMzAwMCwgMHgwMDAwMDNDMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwfSwgLyogQVJQICovCi0JCXsweGZmZmZmMDAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDAwMGZmZmZ9CSAvKiBNYWdpYyBQYWNrZXQgKi8KLQl9OwotCi0Jd3JpdGV3KDB4RkZGRiwgJnJlZ3MtPldPTENSQ2xyKTsKLQl3cml0ZWIoV09MQ0ZHX1NBQiB8IFdPTENGR19TQU0sICZyZWdzLT5XT0xDRkdTZXQpOwotCXdyaXRldyhXT0xDUl9NQUdJQ19FTiwgJnJlZ3MtPldPTENSU2V0KTsKLQotCS8qCi0JICAgaWYgKHZwdHItPndvbF9vcHRzICYgVkVMT0NJVFlfV09MX1BIWSkKLQkgICB3cml0ZXcoKFdPTENSX0xJTktPTl9FTnxXT0xDUl9MSU5LT0ZGX0VOKSwgJnJlZ3MtPldPTENSU2V0KTsKLQkgKi8KLQotCWlmICh2cHRyLT53b2xfb3B0cyAmIFZFTE9DSVRZX1dPTF9VQ0FTVCkgewotCQl3cml0ZXcoV09MQ1JfVU5JQ0FTVF9FTiwgJnJlZ3MtPldPTENSU2V0KTsKLQl9Ci0KLQlpZiAodnB0ci0+d29sX29wdHMgJiBWRUxPQ0lUWV9XT0xfQVJQKSB7Ci0JCXN0cnVjdCBhcnBfcGFja2V0ICphcnAgPSAoc3RydWN0IGFycF9wYWNrZXQgKikgYnVmOwotCQl1MTYgY3JjOwotCQltZW1zZXQoYnVmLCAwLCBzaXplb2Yoc3RydWN0IGFycF9wYWNrZXQpICsgNyk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJCXdyaXRlbChtYXNrX3BhdHRlcm5bMF1baV0sICZyZWdzLT5CeXRlTWFza1swXVtpXSk7Ci0KLQkJYXJwLT50eXBlID0gaHRvbnMoRVRIX1BfQVJQKTsKLQkJYXJwLT5hcl9vcCA9IGh0b25zKDEpOwotCi0JCW1lbWNweShhcnAtPmFyX3RpcCwgdnB0ci0+aXBfYWRkciwgNCk7Ci0KLQkJY3JjID0gd29sX2NhbGNfY3JjKChzaXplb2Yoc3RydWN0IGFycF9wYWNrZXQpICsgNykgLyA4LCBidWYsCi0JCQkJKHU4ICopICYgbWFza19wYXR0ZXJuWzBdWzBdKTsKLQotCQl3cml0ZXcoY3JjLCAmcmVncy0+UGF0dGVybkNSQ1swXSk7Ci0JCXdyaXRldyhXT0xDUl9BUlBfRU4sICZyZWdzLT5XT0xDUlNldCk7Ci0JfQotCi0JQllURV9SRUdfQklUU19PTihQV0NGR19XT0xUWVBFLCAmcmVncy0+UFdDRkdTZXQpOwotCUJZVEVfUkVHX0JJVFNfT04oUFdDRkdfTEVHQUNZX1dPTEVOLCAmcmVncy0+UFdDRkdTZXQpOwotCi0Jd3JpdGV3KDB4MEZGRiwgJnJlZ3MtPldPTFNSQ2xyKTsKLQotCWlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfQVVUT05FR19FTkFCTEUpIHsKLQkJaWYgKFBIWUlEX0dFVF9QSFlfSUQodnB0ci0+cGh5X2lkKSA9PSBQSFlJRF9DSUNBREFfQ1M4MjAxKQotCQkJTUlJX1JFR19CSVRTX09OKEFVWENSX01EUFBTLCBNSUlfUkVHX0FVWENSLCB2cHRyLT5tYWNfcmVncyk7Ci0KLQkJTUlJX1JFR19CSVRTX09GRihHMTAwMENSXzEwMDBGRCB8IEcxMDAwQ1JfMTAwMCwgTUlJX1JFR19HMTAwMENSLCB2cHRyLT5tYWNfcmVncyk7Ci0JfQotCi0JaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9TUEVFRF8xMDAwKQotCQlNSUlfUkVHX0JJVFNfT04oQk1DUl9SRUFVVE8sIE1JSV9SRUdfQk1DUiwgdnB0ci0+bWFjX3JlZ3MpOwotCi0JQllURV9SRUdfQklUU19PTihDSElQR0NSX0ZDTU9ERSwgJnJlZ3MtPkNISVBHQ1IpOwotCi0JewotCQl1OCBHQ1I7Ci0JCUdDUiA9IHJlYWRiKCZyZWdzLT5DSElQR0NSKTsKLQkJR0NSID0gKEdDUiAmIH5DSElQR0NSX0ZDR01JSSkgfCBDSElQR0NSX0ZDRkRYOwotCQl3cml0ZWIoR0NSLCAmcmVncy0+Q0hJUEdDUik7Ci0JfQotCi0JQllURV9SRUdfQklUU19PRkYoSVNSX1BXRUksICZyZWdzLT5JU1IpOwotCS8qIFR1cm4gb24gU1dQVEFHIGp1c3QgYmVmb3JlIGVudGVyaW5nIHBvd2VyIG1vZGUgKi8KLQlCWVRFX1JFR19CSVRTX09OKFNUSUNLSFdfU1dQVEFHLCAmcmVncy0+U1RJQ0tIVyk7Ci0JLyogR28gdG8gYmVkIC4uLi4uICovCi0JQllURV9SRUdfQklUU19PTigoU1RJQ0tIV19EUzEgfCBTVElDS0hXX0RTMCksICZyZWdzLT5TVElDS0hXKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZlbG9jaXR5X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYoIW5ldGlmX3J1bm5pbmcodnB0ci0+ZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQluZXRpZl9kZXZpY2VfZGV0YWNoKHZwdHItPmRldik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdnB0ci0+bG9jaywgZmxhZ3MpOwotCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwotI2lmZGVmIEVUSFRPT0xfR1dPTAotCWlmICh2cHRyLT5mbGFncyAmIFZFTE9DSVRZX0ZMQUdTX1dPTF9FTkFCTEVEKSB7Ci0JCXZlbG9jaXR5X2dldF9pcCh2cHRyKTsKLQkJdmVsb2NpdHlfc2F2ZV9jb250ZXh0KHZwdHIsICZ2cHRyLT5jb250ZXh0KTsKLQkJdmVsb2NpdHlfc2h1dGRvd24odnB0cik7Ci0JCXZlbG9jaXR5X3NldF93b2wodnB0cik7Ci0JCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOwotCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7Ci0JfSBlbHNlIHsKLQkJdmVsb2NpdHlfc2F2ZV9jb250ZXh0KHZwdHIsICZ2cHRyLT5jb250ZXh0KTsKLQkJdmVsb2NpdHlfc2h1dGRvd24odnB0cik7Ci0JCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQkJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7Ci0JfQotI2Vsc2UKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLSNlbmRpZgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2ZWxvY2l0eV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKLQotCWlmKCFuZXRpZl9ydW5uaW5nKHZwdHItPmRldikpCi0JCXJldHVybiAwOwotCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwotCXBjaV9lbmFibGVfd2FrZShwZGV2LCAwLCAwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQotCW1hY193b2xfcmVzZXQodnB0ci0+bWFjX3JlZ3MpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKLQl2ZWxvY2l0eV9yZXN0b3JlX2NvbnRleHQodnB0ciwgJnZwdHItPmNvbnRleHQpOwotCXZlbG9jaXR5X2luaXRfcmVnaXN0ZXJzKHZwdHIsIFZFTE9DSVRZX0lOSVRfV09MKTsKLQltYWNfZGlzYWJsZV9pbnQodnB0ci0+bWFjX3JlZ3MpOwotCi0JdmVsb2NpdHlfdHhfc3J2KHZwdHIsIDApOwotCi0JZm9yIChpID0gMDsgaSA8IHZwdHItPnR4Lm51bXE7IGkrKykgewotCQlpZiAodnB0ci0+dHgudXNlZFtpXSkgewotCQkJbWFjX3R4X3F1ZXVlX3dha2UodnB0ci0+bWFjX3JlZ3MsIGkpOwotCQl9Ci0JfQotCi0JbWFjX2VuYWJsZV9pbnQodnB0ci0+bWFjX3JlZ3MpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKLQluZXRpZl9kZXZpY2VfYXR0YWNoKHZwdHItPmRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogI2lmZGVmIENPTkZJR19JTkVUCi0KIHN0YXRpYyBpbnQgdmVsb2NpdHlfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbm90aWZpY2F0aW9uLCB2b2lkICpwdHIpCiB7CiAJc3RydWN0IGluX2lmYWRkciAqaWZhID0gKHN0cnVjdCBpbl9pZmFkZHIgKikgcHRyOwpAQCAtMzQ4OSw2ICszMjU4LDYzIEBACiAKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CisjZW5kaWYJLyogQ09ORklHX0lORVQgKi8KKyNlbmRpZgkvKiBDT05GSUdfUE0gKi8KIAotI2VuZGlmCi0jZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkgJiYgZGVmaW5lZChDT05GSUdfSU5FVCkKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdmVsb2NpdHlfaW5ldGFkZHJfbm90aWZpZXIgPSB7CisgICAgICAubm90aWZpZXJfY2FsbAk9IHZlbG9jaXR5X25ldGRldl9ldmVudCwKK307CisKK3N0YXRpYyB2b2lkIHZlbG9jaXR5X3JlZ2lzdGVyX25vdGlmaWVyKHZvaWQpCit7CisJcmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJnZlbG9jaXR5X2luZXRhZGRyX25vdGlmaWVyKTsKK30KKworc3RhdGljIHZvaWQgdmVsb2NpdHlfdW5yZWdpc3Rlcl9ub3RpZmllcih2b2lkKQoreworCXVucmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJnZlbG9jaXR5X2luZXRhZGRyX25vdGlmaWVyKTsKK30KKworI2Vsc2UKKworI2RlZmluZSB2ZWxvY2l0eV9yZWdpc3Rlcl9ub3RpZmllcigpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSB2ZWxvY2l0eV91bnJlZ2lzdGVyX25vdGlmaWVyKCkJZG8ge30gd2hpbGUgKDApCisKKyNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19QTSkgJiYgZGVmaW5lZChDT05GSUdfSU5FVCkgKi8KKworLyoqCisgKgl2ZWxvY2l0eV9pbml0X21vZHVsZQktCWxvYWQgdGltZSBmdW5jdGlvbgorICoKKyAqCUNhbGxlZCB3aGVuIHRoZSB2ZWxvY2l0eSBtb2R1bGUgaXMgbG9hZGVkLiBUaGUgUENJIGRyaXZlcgorICoJaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBQQ0kgbGF5ZXIsIGFuZCBpbiB0dXJuIHdpbGwgY2FsbAorICoJdGhlIHByb2JlIGZ1bmN0aW9ucyBmb3IgZWFjaCB2ZWxvY2l0eSBhZGFwdGVyIGluc3RhbGxlZAorICoJaW4gdGhlIHN5c3RlbS4KKyAqLworc3RhdGljIGludCBfX2luaXQgdmVsb2NpdHlfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0OworCisJdmVsb2NpdHlfcmVnaXN0ZXJfbm90aWZpZXIoKTsKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ2ZWxvY2l0eV9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQl2ZWxvY2l0eV91bnJlZ2lzdGVyX25vdGlmaWVyKCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKgl2ZWxvY2l0eV9jbGVhbnVwCS0JbW9kdWxlIHVubG9hZAorICoKKyAqCVdoZW4gdGhlIHZlbG9jaXR5IGhhcmR3YXJlIGlzIHVubG9hZGVkIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICoJSXQgd2lsbCBjbGVhbiB1cCB0aGUgbm90aWZpZXJzIGFuZCB0aGUgdW5yZWdpc3RlciB0aGUgUENJCisgKglkcml2ZXIgaW50ZXJmYWNlIGZvciB0aGlzIGhhcmR3YXJlLiBUaGlzIGluIHR1cm4gY2xlYW5zIHVwCisgKglhbGwgZGlzY292ZXJlZCBpbnRlcmZhY2VzIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgX19leGl0IHZlbG9jaXR5X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJdmVsb2NpdHlfdW5yZWdpc3Rlcl9ub3RpZmllcigpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdmVsb2NpdHlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodmVsb2NpdHlfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQodmVsb2NpdHlfY2xlYW51cF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmggYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuaAppbmRleCA0Y2QzZjZjLi4yZjAwYzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuaAorKysgYi9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuaApAQCAtOTYsOCArOTYsOCBAQAogICogQml0cyBpbiB0aGUgQ1NNIHJlZ2lzdGVyCiAgKi8KIAotI2RlZmluZSBDU01fSVBPSyAgICAgICAgICAgIDB4NDAJLy9JUCBDaGVja3VzbSB2YWxpZGF0aWFvbiBvawotI2RlZmluZSBDU01fVFVQT0sgICAgICAgICAgIDB4MjAJLy9UQ1AvVURQIENoZWNrdXNtIHZhbGlkYXRpYW9uIG9rCisjZGVmaW5lIENTTV9JUE9LICAgICAgICAgICAgMHg0MAkvL0lQIENoZWNrc3VtIHZhbGlkYXRpb24gb2sKKyNkZWZpbmUgQ1NNX1RVUE9LICAgICAgICAgICAweDIwCS8vVENQL1VEUCBDaGVja3N1bSB2YWxpZGF0aW9uIG9rCiAjZGVmaW5lIENTTV9GUkFHICAgICAgICAgICAgMHgxMAkvL0ZyYWdtZW50IElQIGRhdGFncmFtCiAjZGVmaW5lIENTTV9JUEtUICAgICAgICAgICAgMHgwNAkvL1JlY2VpdmVkIGFuIElQIHBhY2tldAogI2RlZmluZSBDU01fVENQS1QgICAgICAgICAgIDB4MDIJLy9SZWNlaXZlZCBhIFRDUCBwYWNrZXQKQEAgLTgxOSw3ICs4MTksNyBAQAogICoJQml0cyBpbiB0aGUgRUVDU1IgcmVnaXN0ZXIKICAqLwogCi0jZGVmaW5lIEVFQ1NSX0VNQlAgICAgICAgICAgMHg0MAkvKiBlZXByb20gZW1iZWRlZCBwcm9ncmFtbWluZyAqLworI2RlZmluZSBFRUNTUl9FTUJQICAgICAgICAgIDB4NDAJLyogZWVwcm9tIGVtYmVkZGVkIHByb2dyYW1taW5nICovCiAjZGVmaW5lIEVFQ1NSX1JFTE9BRCAgICAgICAgMHgyMAkvKiBlZXByb20gY29udGVudCByZWxvYWQgKi8KICNkZWZpbmUgRUVDU1JfRFBNICAgICAgICAgICAweDEwCS8qIGVlcHJvbSBkaXJlY3QgcHJvZ3JhbW1pbmcgKi8KICNkZWZpbmUgRUVDU1JfRUNTICAgICAgICAgICAweDA4CS8qIGVlcHJvbSBDUyBwaW4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwppbmRleCBiYmVkZjAzLi4zMjI2NmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCkBAIC01NDcsNyArNTQ3LDcgQEAKIAluZXRpZl90eF91bmxvY2tfYmgodmktPmRldik7CiB9CiAKLXN0YXRpYyBpbnQgc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHN0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTc5OCwxMCArNzk4LDExIEBACiAJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byBraWxsIFZMQU4gSUQgJWQuXG4iLCB2aWQpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHZpcnRuZXRfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHZpcnRuZXRfZXRodG9vbF9vcHMgPSB7CiAJLnNldF90eF9jc3VtID0gdmlydG5ldF9zZXRfdHhfY3N1bSwKIAkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCiAJLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCisJLnNldF91Zm8gPSBldGh0b29sX29wX3NldF91Zm8sCiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CiAKQEAgLTEwMzYsNyArMTAzNyw3IEBACiAJVklSVElPX05FVF9GX0dTTywgVklSVElPX05FVF9GX01BQywKIAlWSVJUSU9fTkVUX0ZfSE9TVF9UU080LCBWSVJUSU9fTkVUX0ZfSE9TVF9VRk8sIFZJUlRJT19ORVRfRl9IT1NUX1RTTzYsCiAJVklSVElPX05FVF9GX0hPU1RfRUNOLCBWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNCwgVklSVElPX05FVF9GX0dVRVNUX1RTTzYsCi0JVklSVElPX05FVF9GX0dVRVNUX0VDTiwgLyogV2UgZG9uJ3QgeWV0IGhhbmRsZSBVRk8gaW5wdXQuICovCisJVklSVElPX05FVF9GX0dVRVNUX0VDTiwgVklSVElPX05FVF9GX0dVRVNUX1VGTywKIAlWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGLCBWSVJUSU9fTkVUX0ZfU1RBVFVTLCBWSVJUSU9fTkVUX0ZfQ1RSTF9WUSwKIAlWSVJUSU9fTkVUX0ZfQ1RSTF9SWCwgVklSVElPX05FVF9GX0NUUkxfVkxBTiwKIAlWSVJUSU9fRl9OT1RJRllfT05fRU1QVFksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKaW5kZXggNThkMjU1MS4uOWU5NGM0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwpAQCAtMzEzLDE0ICszMTMsNiBAQAogCQlobGRldi0+a2RmYyA9ICh1OCBfX2lvbWVtICopKGhsZGV2LT5iYXIwICsKIAkJCVZYR0VfSFdfVE9DX0dFVF9LREZDX0lOSVRJQUxfT0ZGU0VUKHZhbDY0KSk7CiAJCWJyZWFrOwotCWNhc2UgMjoKLQkJaGxkZXYtPmtkZmMgPSAodTggX19pb21lbSAqKShobGRldi0+YmFyMSArCi0JCQlWWEdFX0hXX1RPQ19HRVRfS0RGQ19JTklUSUFMX09GRlNFVCh2YWw2NCkpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWhsZGV2LT5rZGZjID0gKHU4IF9faW9tZW0gKikoaGxkZXYtPmJhcjIgKwotCQkJVlhHRV9IV19UT0NfR0VUX0tERkNfSU5JVElBTF9PRkZTRVQodmFsNjQpKTsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtODMxLDggKzgyMyw2IEBACiAJCXNpemVvZihzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnKSk7CiAKIAlobGRldi0+YmFyMCA9IGF0dHItPmJhcjA7Ci0JaGxkZXYtPmJhcjEgPSBhdHRyLT5iYXIxOwotCWhsZGV2LT5iYXIyID0gYXR0ci0+YmFyMjsKIAlobGRldi0+cGRldiA9IGF0dHItPnBkZXY7CiAKIAlobGRldi0+dWxkX2NhbGxiYWNrcy5saW5rX3VwID0gYXR0ci0+dWxkX2NhbGxiYWNrcy5saW5rX3VwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oCmluZGV4IGFmYmRmNmYuLjYyNzc5YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuaAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmgKQEAgLTY4Miw4ICs2ODIsNiBAQAogICogQG1ham9yX3JldmlzaW9uOiBQQ0kgRGV2aWNlIG1ham9yIHJldmlzaW9uCiAgKiBAbWlub3JfcmV2aXNpb246IFBDSSBEZXZpY2UgbWlub3IgcmV2aXNpb24KICAqIEBiYXIwOiBCQVIwIHZpcnR1YWwgYWRkcmVzcy4KLSAqIEBiYXIxOiBCQVIxIHZpcnR1YWwgYWRkcmVzcy4KLSAqIEBiYXIyOiBCQVIyIHZpcnR1YWwgYWRkcmVzcy4KICAqIEBwZGV2OiBQaHlzaWNhbCBkZXZpY2UgaGFuZGxlCiAgKiBAY29uZmlnOiBDb25mZ3VyYXRpb24gcGFzc2VkIGJ5IHRoZSBMTCBkcml2ZXIgYXQgaW5pdGlhbGl6YXRpb24KICAqIEBsaW5rX3N0YXRlOiBMaW5rIHN0YXRlCkBAIC02OTgsOCArNjk2LDYgQEAKIAl1OAkJCQltYWpvcl9yZXZpc2lvbjsKIAl1OAkJCQltaW5vcl9yZXZpc2lvbjsKIAl2b2lkIF9faW9tZW0JCQkqYmFyMDsKLQl2b2lkIF9faW9tZW0JCQkqYmFyMTsKLQl2b2lkIF9faW9tZW0JCQkqYmFyMjsKIAlzdHJ1Y3QgcGNpX2RldgkJCSpwZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlCQkqbmRldjsKIAlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnCWNvbmZpZzsKQEAgLTc4OCwxNyArNzg0LDEzIEBACiAvKioKICAqIHN0cnVjdCB2eGdlX2h3X2RldmljZV9hdHRyIC0gRGV2aWNlIG1lbW9yeSBzcGFjZXMuCiAgKiBAYmFyMDogQkFSMCB2aXJ0dWFsIGFkZHJlc3MuCi0gKiBAYmFyMTogQkFSMSB2aXJ0dWFsIGFkZHJlc3MuCi0gKiBAYmFyMjogQkFSMiB2aXJ0dWFsIGFkZHJlc3MuCiAgKiBAcGRldjogUENJIGRldmljZSBvYmplY3QuCiAgKgotICogRGV2aWNlIG1lbW9yeSBzcGFjZXMuIEluY2x1ZGVzIGNvbmZpZ3VyYXRpb24sIEJBUjAsIEJBUjEsIGV0Yy4gcGVyIGRldmljZQorICogRGV2aWNlIG1lbW9yeSBzcGFjZXMuIEluY2x1ZGVzIGNvbmZpZ3VyYXRpb24sIEJBUjAgZXRjLiBwZXIgZGV2aWNlCiAgKiBtYXBwZWQgbWVtb3JpZXMuIEFsc28sIGluY2x1ZGVzIGEgcG9pbnRlciB0byBPUy1zcGVjaWZpYyBQQ0kgZGV2aWNlIG9iamVjdC4KICAqLwogc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2F0dHIgewogCXZvaWQgX19pb21lbQkJKmJhcjA7Ci0Jdm9pZCBfX2lvbWVtCQkqYmFyMTsKLQl2b2lkIF9faW9tZW0JCSpiYXIyOwogCXN0cnVjdCBwY2lfZGV2IAkJKnBkZXY7CiAJc3RydWN0IHZ4Z2VfaHdfdWxkX2Nicwl1bGRfY2FsbGJhY2tzOwogfTsKQEAgLTk4Niw3ICs5NzgsOSBAQAogCQkJdm9pZCAqdHhkbGgsCiAJCQllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB0X2NvZGUsCiAJCQl2b2lkICp1c2VyZGF0YSwKLQkJCXZvaWQgKipza2JfcHRyKTsKKwkJCXN0cnVjdCBza19idWZmICoqKnNrYl9wdHIsCisJCQlpbnQgbnJfc2tiLAorCQkJaW50ICptb3JlKTsKIAogCXZvaWQgKCp0eGRsX3Rlcm0pKAogCQkJdm9pZCAqdHhkbGgsCkBAIC0xNzg3LDcgKzE3ODEsOCBAQAogCQkJdm9pZCAqdHhkbGgsCiAJCQllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB0X2NvZGUsCiAJCQl2b2lkICp1c2VyZGF0YSwKLQkJCXZvaWQgKipza2JfcHRyKTsKKwkJCXN0cnVjdCBza19idWZmICoqKnNrYl9wdHIsCisJCQlpbnQgbnJfc2tiLCBpbnQgKm1vcmUpOwogCiAJdm9pZCAoKnR4ZGxfdGVybSkoCiAJCQl2b2lkICp0eGRsaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCmluZGV4IDYwMzQ0OTcuLmIzNzgwMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYwpAQCAtODcsMjIgKzg3LDI1IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgVlhHRV9DT01QTEVURV9WUEFUSF9UWChzdHJ1Y3QgdnhnZV9maWZvICpmaWZvKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwotCXN0cnVjdCBza19idWZmICpza2JfcHRyID0gTlVMTDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqKnRlbXAsICpoZWFkLCAqc2tiOworCXN0cnVjdCBza19idWZmICoqc2tiX3B0ciA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKip0ZW1wOworI2RlZmluZSBOUl9TS0JfQ09NUExFVEVEIDEyOAorCXN0cnVjdCBza19idWZmICpjb21wbGV0ZWRbTlJfU0tCX0NPTVBMRVRFRF07CisJaW50IG1vcmU7CiAKLQlpZiAoc3Bpbl90cnlsb2NrX2lycXNhdmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKSkgewotCQl2eGdlX2h3X3ZwYXRoX3BvbGxfdHgoZmlmby0+aGFuZGxlLCAodm9pZCAqKikmc2tiX3B0cik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKLQl9Ci0JLyogZnJlZSBTS0JzICovCi0JaGVhZCA9IHNrYl9wdHI7Ci0Jd2hpbGUgKGhlYWQpIHsKLQkJc2tiID0gaGVhZDsKLQkJdGVtcCA9IChzdHJ1Y3Qgc2tfYnVmZiAqKikmc2tiLT5jYjsKLQkJaGVhZCA9ICp0ZW1wOwotCQkqdGVtcCA9IE5VTEw7Ci0JCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0JfQorCWRvIHsKKwkJbW9yZSA9IDA7CisJCXNrYl9wdHIgPSBjb21wbGV0ZWQ7CisKKwkJaWYgKHNwaW5fdHJ5bG9ja19pcnFzYXZlKCZmaWZvLT50eF9sb2NrLCBmbGFncykpIHsKKwkJCXZ4Z2VfaHdfdnBhdGhfcG9sbF90eChmaWZvLT5oYW5kbGUsICZza2JfcHRyLAorCQkJCQkJTlJfU0tCX0NPTVBMRVRFRCwgJm1vcmUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOworCQl9CisJCS8qIGZyZWUgU0tCcyAqLworCQlmb3IgKHRlbXAgPSBjb21wbGV0ZWQ7IHRlbXAgIT0gc2tiX3B0cjsgdGVtcCsrKQorCQkJZGV2X2tmcmVlX3NrYl9pcnEoKnRlbXApOworCX0gd2hpbGUgKG1vcmUpIDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIFZYR0VfQ09NUExFVEVfQUxMX1RYKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQpAQCAtMjgzLDYgKzI4Niw3IEBACiAJc2tiX3Jlc2VydmUoc2tiLCBWWEdFX0hXX0hFQURFUl9FVEhFUk5FVF9JSV84MDJfM19BTElHTik7CiAKIAlyeF9wcml2LT5za2IgPSBza2I7CisJcnhfcHJpdi0+c2tiX2RhdGEgPSBOVUxMOwogCXJ4X3ByaXYtPmRhdGFfc2l6ZSA9IHNrYl9zaXplOwogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCiAJCSIlczogJXM6JWQgRXhpdGluZy4uLiIsIHJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CkBAIC0zMDIsNyArMzA2LDggQEAKIAkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKIAlyeF9wcml2ID0gdnhnZV9od19yaW5nX3J4ZF9wcml2YXRlX2dldChkdHJoKTsKIAotCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUocmluZy0+cGRldiwgcnhfcHJpdi0+c2tiLT5kYXRhLAorCXJ4X3ByaXYtPnNrYl9kYXRhID0gcnhfcHJpdi0+c2tiLT5kYXRhOworCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUocmluZy0+cGRldiwgcnhfcHJpdi0+c2tiX2RhdGEsCiAJCQkJcnhfcHJpdi0+ZGF0YV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJaWYgKGRtYV9hZGRyID09IDApIHsKQEAgLTM3NCwxMCArMzc5LDEwIEBACiAJCWlmIChyaW5nLT52bGdycCAmJiBleHRfaW5mby0+dmxhbiAmJgogCQkJKHJpbmctPnZsYW5fdGFnX3N0cmlwID09CiAJCQkJVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfRU5BQkxFKSkKLQkJCXZsYW5fZ3JvX3JlY2VpdmUoJnJpbmctPm5hcGksIHJpbmctPnZsZ3JwLAorCQkJdmxhbl9ncm9fcmVjZWl2ZShyaW5nLT5uYXBpX3AsIHJpbmctPnZsZ3JwLAogCQkJCQlleHRfaW5mby0+dmxhbiwgc2tiKTsKIAkJZWxzZQotCQkJbmFwaV9ncm9fcmVjZWl2ZSgmcmluZy0+bmFwaSwgc2tiKTsKKwkJCW5hcGlfZ3JvX3JlY2VpdmUocmluZy0+bmFwaV9wLCBza2IpOwogCX0gZWxzZSB7CiAJCWlmIChyaW5nLT52bGdycCAmJiB2bGFuICYmCiAJCQkocmluZy0+dmxhbl90YWdfc3RyaXAgPT0KQEAgLTQ0MiwxMCArNDQ3LDEyIEBACiAJdnhnZV9od19yaW5nX3JlcGxlbmlzaChyaW5naCwgMCk7CiAKIAlkbyB7CisJCXByZWZldGNoKChjaGFyICopZHRyICsgTDFfQ0FDSEVfQllURVMpOwogCQlyeF9wcml2ID0gdnhnZV9od19yaW5nX3J4ZF9wcml2YXRlX2dldChkdHIpOwogCQlza2IgPSByeF9wcml2LT5za2I7CiAJCWRhdGFfc2l6ZSA9IHJ4X3ByaXYtPmRhdGFfc2l6ZTsKIAkJZGF0YV9kbWEgPSByeF9wcml2LT5kYXRhX2RtYTsKKwkJcHJlZmV0Y2gocnhfcHJpdi0+c2tiX2RhdGEpOwogCiAJCXZ4Z2VfZGVidWdfcngoVlhHRV9UUkFDRSwKIAkJCSIlczogJXM6JWQgIHNrYiA9IDB4JXAiLApAQCAtNDU0LDYgKzQ2MSw4IEBACiAJCXZ4Z2VfaHdfcmluZ19yeGRfMWJfZ2V0KHJpbmdoLCBkdHIsICZkbWFfc2l6ZXMpOwogCQlwa3RfbGVuZ3RoID0gZG1hX3NpemVzOwogCisJCXBrdF9sZW5ndGggLT0gRVRIX0ZDU19MRU47CisKIAkJdnhnZV9kZWJ1Z19yeChWWEdFX1RSQUNFLAogCQkJIiVzOiAlczolZCAgUGFja2V0IExlbmd0aCA9ICVkIiwKIAkJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXywgcGt0X2xlbmd0aCk7CkBAIC01NzksOCArNTg4LDYgQEAKIAlpZiAoZmlyc3RfZHRyKQogCQl2eGdlX2h3X3JpbmdfcnhkX3Bvc3RfcG9zdF93bWIocmluZ2gsIGZpcnN0X2R0cik7CiAKLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCiAJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKIAkJCQkiJXM6JWQgIEV4aXRpbmcuLi4iLAogCQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CkBAIC01OTgsMTEgKzYwNSwxMCBAQAogZW51bSB2eGdlX2h3X3N0YXR1cwogdnhnZV94bWl0X2NvbXBsKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb19odywgdm9pZCAqZHRyLAogCQllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB0X2NvZGUsIHZvaWQgKnVzZXJkYXRhLAotCQl2b2lkICoqc2tiX3B0cikKKwkJc3RydWN0IHNrX2J1ZmYgKioqc2tiX3B0ciwgaW50IG5yX3NrYiwgaW50ICptb3JlKQogewogCXN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8gPSAoc3RydWN0IHZ4Z2VfZmlmbyAqKXVzZXJkYXRhOwotCXN0cnVjdCBza19idWZmICpza2IsICpoZWFkID0gTlVMTDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqKnRlbXA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKipkb25lX3NrYiA9ICpza2JfcHRyOwogCWludCBwa3RfY250ID0gMDsKIAogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCkBAIC02NTUsOSArNjYxLDEyIEBACiAJCWZpZm8tPnN0YXRzLnR4X2ZybXMrKzsKIAkJZmlmby0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKLQkJdGVtcCA9IChzdHJ1Y3Qgc2tfYnVmZiAqKikmc2tiLT5jYjsKLQkJKnRlbXAgPSBoZWFkOwotCQloZWFkID0gc2tiOworCQkqZG9uZV9za2IrKyA9IHNrYjsKKworCQlpZiAoLS1ucl9za2IgPD0gMCkgeworCQkJKm1vcmUgPSAxOworCQkJYnJlYWs7CisJCX0KIAogCQlwa3RfY250Kys7CiAJCWlmIChwa3RfY250ID4gZmlmby0+aW5kaWNhdGVfbWF4X3BrdHMpCkBAIC02NjYsMTEgKzY3NSw5IEBACiAJfSB3aGlsZSAodnhnZV9od19maWZvX3R4ZGxfbmV4dF9jb21wbGV0ZWQoZmlmb19odywKIAkJCQkmZHRyLCAmdF9jb2RlKSA9PSBWWEdFX0hXX09LKTsKIAorCSpza2JfcHRyID0gZG9uZV9za2I7CiAJdnhnZV93YWtlX3R4X3F1ZXVlKGZpZm8sIHNrYik7CiAKLQlpZiAoc2tiX3B0cikKLQkJKnNrYl9wdHIgPSAodm9pZCAqKSBoZWFkOwotCiAJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKIAkJCQkiJXM6ICVzOiVkICBFeGl0aW5nLi4uIiwKIAkJCQlmaWZvLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOwpAQCAtODAzLDcgKzgxMCw3IEBACiAgKiBOT1RFOiB3aGVuIGRldmljZSBjYW50IHF1ZXVlIHRoZSBwa3QsIGp1c3QgdGhlIHRyYW5zX3N0YXJ0IHZhcmlhYmxlIHdpbGwKICAqIG5vdCBiZSB1cGFkdGVkLgogKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogdnhnZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZ4Z2VfZmlmbyAqZmlmbyA9IE5VTEw7CkBAIC04MTcsNyArODI0LDYgQEAKIAl1NjQgZG1hX3BvaW50ZXI7CiAJc3RydWN0IHZ4Z2VfdHhfcHJpdiAqdHhkbF9wcml2ID0gTlVMTDsKIAlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9faHc7Ci0JdTMyIG1heF9tc3MgPSAweDA7CiAJaW50IG9mZmxvYWRfdHlwZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlpbnQgdnBhdGhfbm8gPSAwOwpAQCAtODk0LDYgKzkwMCwxMiBAQAogCQlnb3RvIF9leGl0MjsKIAl9CiAKKwkvKiBMYXN0IFRYRD8gIFN0b3AgdHggcXVldWUgdG8gYXZvaWQgZHJvcHBpbmcgcGFja2V0cy4gIFRYCisJICogY29tcGxldGlvbiB3aWxsIHJlc3VtZSB0aGUgcXVldWUuCisJICovCisJaWYgKGF2YWlsID09IDEpCisJCXZ4Z2Vfc3RvcF90eF9xdWV1ZShmaWZvKTsKKwogCXN0YXR1cyA9IHZ4Z2VfaHdfZmlmb190eGRsX3Jlc2VydmUoZmlmb19odywgJmR0ciwgJmR0cl9wcml2KTsKIAlpZiAodW5saWtlbHkoc3RhdHVzICE9IFZYR0VfSFdfT0spKSB7CiAJCXZ4Z2VfZGVidWdfdHgoVlhHRV9FUlIsCkBAIC05NjksMTAgKzk4MSw2IEBACiAKIAkJaW50IG1zcyA9IHZ4Z2VfdGNwX21zcyhza2IpOwogCQlpZiAobXNzKSB7Ci0JCQltYXhfbXNzID0gZGV2LT5tdHUgKyBFVEhfSExFTiAtCi0JCQkJVlhHRV9IV19UQ1BJUF9IRUFERVJfTUFYX1NJWkU7Ci0JCQlpZiAobXNzID4gbWF4X21zcykKLQkJCQltc3MgPSBtYXhfbXNzOwogCQkJdnhnZV9kZWJ1Z190eChWWEdFX1RSQUNFLAogCQkJCSIlczogJXM6JWQgbXNzID0gJWQiLAogCQkJCWRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fLCBtc3MpOwpAQCAtMTAwMCw3ICsxMDA4LDcgQEAKIAlWWEdFX0NPTVBMRVRFX1ZQQVRIX1RYKGZpZm8pOwogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQgIEV4aXRpbmcuLi4iLAogCQlkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogX2V4aXQwOgogCXZ4Z2VfZGVidWdfdHgoVlhHRV9UUkFDRSwgIiVzOiBwY2lfbWFwX3BhZ2UgZmFpbGVkIiwgZGV2LT5uYW1lKTsKQEAgLTEwMjQsNyArMTAzMiw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOwogCVZYR0VfQ09NUExFVEVfVlBBVEhfVFgoZmlmbyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpAQCAtMTA0OSw2ICsxMDU3LDcgQEAKIAkJcnhfcHJpdi0+ZGF0YV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJZGV2X2tmcmVlX3NrYihyeF9wcml2LT5za2IpOworCXJ4X3ByaXYtPnNrYl9kYXRhID0gTlVMTDsKIAogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCiAJCSIlczogJXM6JWQgIEV4aXRpbmcuLi4iLApAQCAtMjEzNywxNiArMjE0NiwxNiBAQAogICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgdnhnZV9pc3JfbmFwaShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKilkZXZfaWQ7Ci0Jc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CiAJdTY0IHJlYXNvbjsKIAllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKSBkZXZfaWQ7OwogCiAJdnhnZV9kZWJ1Z19pbnRyKFZYR0VfVFJBQ0UsICIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKLQlkZXYgPSBobGRldi0+bmRldjsKLQl2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlkZXYgPSB2ZGV2LT5uZGV2OworCWhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOwogCiAJaWYgKHBjaV9jaGFubmVsX29mZmxpbmUodmRldi0+cGRldikpCiAJCXJldHVybiBJUlFfTk9ORTsKQEAgLTI0MTcsMTUgKzI0MjYsMTMgQEAKICNlbmRpZgogCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlID09IElOVEEpIHsKIAkJCXN5bmNocm9uaXplX2lycSh2ZGV2LT5wZGV2LT5pcnEpOwotCQkJZnJlZV9pcnEodmRldi0+cGRldi0+aXJxLCBobGRldik7CisJCQlmcmVlX2lycSh2ZGV2LT5wZGV2LT5pcnEsIHZkZXYpOwogCX0KIH0KIAogc3RhdGljIGludCB2eGdlX2FkZF9pc3Ioc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCiB7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9Ci0JCShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikgcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOwogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAJaW50IHZwX2lkeCA9IDAsIGludHJfaWR4ID0gMCwgaW50cl9jbnQgPSAwLCBtc2l4X2lkeCA9IDAsIGlycV9yZXEgPSAwOwogCXU2NCBmdW5jdGlvbl9tb2RlID0gdmRldi0+Y29uZmlnLmRldmljZV9od19pbmZvLmZ1bmN0aW9uX21vZGU7CkBAIC0yNTc5LDcgKzI1ODYsNyBAQAogCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlID09IElOVEEpIHsKIAkJcmV0ID0gcmVxdWVzdF9pcnEoKGludCkgdmRldi0+cGRldi0+aXJxLAogCQkJdnhnZV9pc3JfbmFwaSwKLQkJCUlSUUZfU0hBUkVELCB2ZGV2LT5kZXNjWzBdLCBobGRldik7CisJCQlJUlFGX1NIQVJFRCwgdmRldi0+ZGVzY1swXSwgdmRldik7CiAJCWlmIChyZXQpIHsKIAkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKIAkJCQkiJXMgJXMtJWQ6IElTUiByZWdpc3RyYXRpb24gZmFpbGVkIiwKQEAgLTI3MTIsMTEgKzI3MTksMTUgQEAKIAkJbmV0aWZfbmFwaV9hZGQoZGV2LCAmdmRldi0+bmFwaSwgdnhnZV9wb2xsX2ludGEsCiAJCQl2ZGV2LT5jb25maWcubmFwaV93ZWlnaHQpOwogCQluYXBpX2VuYWJsZSgmdmRldi0+bmFwaSk7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQkJdmRldi0+dnBhdGhzW2ldLnJpbmcubmFwaV9wID0gJnZkZXYtPm5hcGk7CiAJfSBlbHNlIHsKIAkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKIAkJCW5ldGlmX25hcGlfYWRkKGRldiwgJnZkZXYtPnZwYXRoc1tpXS5yaW5nLm5hcGksCiAJCQkgICAgdnhnZV9wb2xsX21zaXgsIHZkZXYtPmNvbmZpZy5uYXBpX3dlaWdodCk7CiAJCQluYXBpX2VuYWJsZSgmdmRldi0+dnBhdGhzW2ldLnJpbmcubmFwaSk7CisJCQl2ZGV2LT52cGF0aHNbaV0ucmluZy5uYXBpX3AgPQorCQkJCSZ2ZGV2LT52cGF0aHNbaV0ucmluZy5uYXBpOwogCQl9CiAJfQogCkBAIC0yODkwLDYgKzI5MDEsOSBAQAogCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOwogCWhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopIHBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKIAorCWlmICh1bmxpa2VseSghaXNfdnhnZV9jYXJkX3VwKHZkZXYpKSkKKwkJcmV0dXJuIDA7CisKIAkvKiBJZiB2eGdlX2hhbmRsZV9jcml0X2VyciB0YXNrIGlzIGV4ZWN1dGluZywKIAkgKiB3YWl0IHRpbGwgaXQgY29tcGxldGVzLiAqLwogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fVlhHRV9TVEFURV9SRVNFVF9DQVJELCAmdmRldi0+c3RhdGUpKQpAQCAtMzk1NCw2ICszOTY4LDkgQEAKIAogCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKIAorCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCQkvKiBCcmluZyBkb3duIHRoZSBjYXJkLCB3aGlsZSBhdm9pZGluZyBQQ0kgSS9PICovCiAJCWRvX3Z4Z2VfY2xvc2UobmV0ZGV2LCAwKTsKQEAgLTQxNTIsMTggKzQxNjksNiBAQAogCQlhdHRyLmJhcjAsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApKTsKIAotCWF0dHIuYmFyMSA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCAyKTsKLQlpZiAoIWF0dHIuYmFyMSkgewotCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCi0JCQkiJXMgOiBjYW5ub3QgcmVtYXAgaW8gbWVtb3J5IGJhcjIiLCBfX2Z1bmNfXyk7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gX2V4aXQzOwotCX0KLQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAotCQkicGNpIGlvcmVtYXAgYmFyMTogJXA6MHglbGx4IiwKLQkJYXR0ci5iYXIxLAotCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSk7Ci0KIAlzdGF0dXMgPSB2eGdlX2h3X2RldmljZV9od19pbmZvX2dldChhdHRyLmJhcjAsCiAJCQkmbGxfY29uZmlnLmRldmljZV9od19pbmZvKTsKIAlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKQEAgLTQxNzEsMTcgKzQxNzYsMTcgQEAKIAkJCSIlczogUmVhZGluZyBvZiBoYXJkd2FyZSBpbmZvIGZhaWxlZC4iCiAJCQkiUGxlYXNlIHRyeSB1cGdyYWRpbmcgdGhlIGZpcm13YXJlLiIsIFZYR0VfRFJJVkVSX05BTUUpOwogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIF9leGl0NDsKKwkJZ290byBfZXhpdDM7CiAJfQogCiAJaWYgKGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5md192ZXJzaW9uLm1ham9yICE9Ci0JCVZYR0VfRFJJVkVSX1ZFUlNJT05fTUFKT1IpIHsKKwkJVlhHRV9EUklWRVJfRldfVkVSU0lPTl9NQUpPUikgewogCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCi0JCQkiRlcgVmVyLihtYWopOiAlZCBub3QgZHJpdmVyJ3MgZXhwZWN0ZWQgdmVyc2lvbjogJWQiLAotCQkJbGxfY29uZmlnLmRldmljZV9od19pbmZvLmZ3X3ZlcnNpb24ubWFqb3IsCi0JCQlWWEdFX0RSSVZFUl9WRVJTSU9OX01BSk9SKTsKKwkJCSIlczogSW5jb3JyZWN0IGZpcm13YXJlIHZlcnNpb24uIgorCQkJIlBsZWFzZSB1cGdyYWRlIHRoZSBmaXJtd2FyZSB0byB2ZXJzaW9uIDEueC54IiwKKwkJCVZYR0VfRFJJVkVSX05BTUUpOwogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIF9leGl0NDsKKwkJZ290byBfZXhpdDM7CiAJfQogCiAJdnBhdGhfbWFzayA9IGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby52cGF0aF9tYXNrOwpAQCAtNDE4OSw3ICs0MTk0LDcgQEAKIAkJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKIAkJCSIlczogTm8gdnBhdGhzIGF2YWlsYWJsZSBpbiBkZXZpY2UiLCBWWEdFX0RSSVZFUl9OQU1FKTsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBfZXhpdDQ7CisJCWdvdG8gX2V4aXQzOwogCX0KIAogCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCkBAIC00MjIyLDcgKzQyMjcsNyBAQAogCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX0VSUiwKIAkJCSIlczogTm8gbW9yZSB2cGF0aHMgdG8gY29uZmlndXJlIiwgVlhHRV9EUklWRVJfTkFNRSk7CiAJCXJldCA9IDA7Ci0JCWdvdG8gX2V4aXQ0OworCQlnb3RvIF9leGl0MzsKIAl9CiAKIAkvKiBTZXR0aW5nIGRyaXZlciBjYWxsYmFja3MgKi8KQEAgLTQyMzUsNyArNDI0MCw3IEBACiAJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKIAkJCSJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgKCVkKSIsIHN0YXR1cyk7CiAJCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBfZXhpdDQ7CisJCQlnb3RvIF9leGl0MzsKIAl9CiAKIAl2eGdlX2h3X2RldmljZV9kZWJ1Z19zZXQoaGxkZXYsIFZYR0VfRVJSLCBWWEdFX0NPTVBPTkVOVF9MTCk7CkBAIC00MjYwLDcgKzQyNjUsNyBAQAogCWlmICh2eGdlX2RldmljZV9yZWdpc3RlcihobGRldiwgJmxsX2NvbmZpZywgaGlnaF9kbWEsIG5vX29mX3ZwYXRoLAogCQkmdmRldikpIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBfZXhpdDU7CisJCWdvdG8gX2V4aXQ0OwogCX0KIAogCXZ4Z2VfaHdfZGV2aWNlX2RlYnVnX3NldChobGRldiwgVlhHRV9UUkFDRSwgVlhHRV9DT01QT05FTlRfTEwpOwpAQCAtNDI3MSw3ICs0Mjc2LDYgQEAKIAlobGRldi0+bmRldiA9IHZkZXYtPm5kZXY7CiAJdmRldi0+bXR1ID0gVlhHRV9IV19ERUZBVUxUX01UVTsKIAl2ZGV2LT5iYXIwID0gYXR0ci5iYXIwOwotCXZkZXYtPmJhcjEgPSBhdHRyLmJhcjE7CiAJdmRldi0+bWF4X3ZwYXRoX3N1cHBvcnRlZCA9IG1heF92cGF0aF9zdXBwb3J0ZWQ7CiAJdmRldi0+bm9fb2ZfdnBhdGggPSBub19vZl92cGF0aDsKIApAQCAtNDMzNiw2ICs0MzQwLDI3IEBACiAJCWxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5md192ZXJzaW9uLnZlcnNpb24sCiAJCWxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5md19kYXRlLmRhdGUpOwogCisJaWYgKG5ld19kZXZpY2UpIHsKKwkJc3dpdGNoIChsbF9jb25maWcuZGV2aWNlX2h3X2luZm8uZnVuY3Rpb25fbW9kZSkgeworCQljYXNlIFZYR0VfSFdfRlVOQ1RJT05fTU9ERV9TSU5HTEVfRlVOQ1RJT046CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogU2luZ2xlIEZ1bmN0aW9uIE1vZGUgRW5hYmxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOworCQlicmVhazsKKwkJY2FzZSBWWEdFX0hXX0ZVTkNUSU9OX01PREVfTVVMVElfRlVOQ1RJT046CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogTXVsdGkgRnVuY3Rpb24gTW9kZSBFbmFibGVkIiwgdmRldi0+bmRldi0+bmFtZSk7CisJCWJyZWFrOworCQljYXNlIFZYR0VfSFdfRlVOQ1RJT05fTU9ERV9TUklPVjoKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBTaW5nbGUgUm9vdCBJT1YgTW9kZSBFbmFibGVkIiwgdmRldi0+bmRldi0+bmFtZSk7CisJCWJyZWFrOworCQljYXNlIFZYR0VfSFdfRlVOQ1RJT05fTU9ERV9NUklPVjoKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBNdWx0aSBSb290IElPViBNb2RlIEVuYWJsZWQiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisJCX0KKwl9CisKIAl2eGdlX3ByaW50X3Bhcm0odmRldiwgdnBhdGhfbWFzayk7CiAKIAkvKiBTdG9yZSB0aGUgZncgdmVyc2lvbiBmb3IgZXRodHRvb2wgb3B0aW9uICovCkBAIC00MzUzLDcgKzQzNzgsNyBAQAogCQkJCSIlczogbWFjX2FkZHJfbGlzdCA6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIsCiAJCQkJdmRldi0+bmRldi0+bmFtZSk7CiAJCQlyZXQgPSAtRVBFUk07Ci0JCQlnb3RvIF9leGl0NjsKKwkJCWdvdG8gX2V4aXQ1OwogCQl9CiAJCW1hY2FkZHIgPSAodTggKikmZW50cnktPm1hY2FkZHI7CiAJCW1lbWNweShtYWNhZGRyLCB2ZGV2LT5uZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwpAQCAtNDM2MSw2ICs0Mzg2LDcgQEAKIAkJdmRldi0+dnBhdGhzW2ldLm1hY19hZGRyX2NudCA9IDE7CiAJfQogCisJa2ZyZWUoZGV2aWNlX2NvbmZpZyk7CiAJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiAlczolZCAgRXhpdGluZy4uLiIsCiAJCXZkZXYtPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKQEAgLTQzNzAsMTYgKzQzOTYsMTQgQEAKIAogCXJldHVybiAwOwogCi1fZXhpdDY6CitfZXhpdDU6CiAJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCiAJCXZ4Z2VfZnJlZV9tYWNfYWRkX2xpc3QoJnZkZXYtPnZwYXRoc1tpXSk7CiAKIAl2eGdlX2RldmljZV91bnJlZ2lzdGVyKGhsZGV2KTsKLV9leGl0NToKK19leGl0NDoKIAlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKIAl2eGdlX2h3X2RldmljZV90ZXJtaW5hdGUoaGxkZXYpOwotX2V4aXQ0OgotCWlvdW5tYXAoYXR0ci5iYXIxKTsKIF9leGl0MzoKIAlpb3VubWFwKGF0dHIuYmFyMCk7CiBfZXhpdDI6CkBAIC00NDM4LDcgKzQ0NjIsNiBAQAogCWtmcmVlKHZkZXYtPnZwYXRocyk7CiAKIAlpb3VubWFwKHZkZXYtPmJhcjApOwotCWlvdW5tYXAodmRldi0+YmFyMSk7CiAKIAlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmgKaW5kZXggOTcwNGIyYi4uOWMzNmIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uaAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oCkBAIC0yMSw3ICsyMSw3IEBACiAKICNkZWZpbmUgVlhHRV9EUklWRVJfTkFNRQkJInZ4Z2UiCiAjZGVmaW5lIFZYR0VfRFJJVkVSX1ZFTkRPUgkJIk5ldGVyaW9uLCBJbmMiCi0jZGVmaW5lIFZYR0VfRFJJVkVSX1ZFUlNJT05fTUFKT1IgMAorI2RlZmluZSBWWEdFX0RSSVZFUl9GV19WRVJTSU9OX01BSk9SCTEKIAogI2RlZmluZSBEUlZfVkVSU0lPTglWWEdFX1ZFUlNJT05fTUFKT1IiLiJWWEdFX1ZFUlNJT05fTUlOT1IiLiJcCiAJVlhHRV9WRVJTSU9OX0ZJWCIuIlZYR0VfVkVSU0lPTl9CVUlMRCItIlwKQEAgLTI2MCw2ICsyNjAsNyBAQAogCWludCBncm9fZW5hYmxlOwogCiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpX3A7CiAKICNkZWZpbmUgVlhHRV9NQVhfTUFDX0FERFJfQ09VTlQJCTMwCiAKQEAgLTM2Myw3ICszNjQsNiBAQAogCiAJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwX2hhbmRsZXNbVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU107CiAJdm9pZCBfX2lvbWVtICpiYXIwOwotCXZvaWQgX19pb21lbSAqYmFyMTsKIAlzdHJ1Y3QgdnhnZV9zd19zdGF0cwlzdGF0czsKIAlpbnQJCW10dTsKIAkvKiBCZWxvdyB2YXJpYWJsZXMgYXJlIHVzZWQgZm9yIHZwYXRoIHNlbGVjdGlvbiB0byB0cmFuc21pdCBhIHBhY2tldCAqLwpAQCAtMzc4LDYgKzM3OCw3IEBACiAKIHN0cnVjdCB2eGdlX3J4X3ByaXYgewogCXN0cnVjdCBza19idWZmCQkqc2tiOworCXVuc2lnbmVkIGNoYXIJCSpza2JfZGF0YTsKIAlkbWFfYWRkcl90CQlkYXRhX2RtYTsKIAlkbWFfYWRkcl90CQlkYXRhX3NpemU7CiB9OwpAQCAtNDI4LDcgKzQyOSw4IEBACiAKIGVudW0gdnhnZV9od19zdGF0dXMKIHZ4Z2VfeG1pdF9jb21wbChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9faHcsIHZvaWQgKmR0ciwKLQllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB0X2NvZGUsIHZvaWQgKnVzZXJkYXRhLCB2b2lkICoqc2tiX3B0cik7CisJZW51bSB2eGdlX2h3X2ZpZm9fdGNvZGUgdF9jb2RlLCB2b2lkICp1c2VyZGF0YSwKKwlzdHJ1Y3Qgc2tfYnVmZiAqKipza2JfcHRyLCBpbnQgbnJfc2ticywgaW50ICptb3JlKTsKIAogaW50IHZ4Z2VfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1yZWcuaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1yZWcuaAppbmRleCAxMGY0ZGEzLi45YTNiODIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXJlZy5oCkBAIC0xNzg0LDcgKzE3ODQsNyBAQAogI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfWE1BQ0pfWE1BQ19GU01fRVJSCXZ4Z2VfbUJJVCg2MykKIC8qMHgwMWUxOCovCXU2NAl4bWFjX2dlbl9lcnJfbWFzazsKIC8qMHgwMWUyMCovCXU2NAl4bWFjX2dlbl9lcnJfYWxhcm07Ci0vKjB4MDFlMjgqLwl1NjQJeG1hY19saW5rX2Vycl9wb3J0X3JlZ1syXTsKKy8qMHgwMWUyOCovCXU2NAl4bWFjX2xpbmtfZXJyX3BvcnQwX3JlZzsKICNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1hNQUNKX1BPUlRfRE9XTgl2eGdlX21CSVQoMykKICNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1hNQUNKX1BPUlRfVVAJdnhnZV9tQklUKDcpCiAjZGVmaW5lCVZYR0VfSFdfWE1BQ19MSU5LX0VSUl9QT1JUX1JFR19YTUFDSl9QT1JUX1dFTlRfRE9XTgl2eGdlX21CSVQoMTEpCkBAIC0xNzk4LDggKzE3OTgsMTEgQEAKICNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1JBVEVNR01UX0xBU0lfSU5WCXZ4Z2VfbUJJVCgzOSkKICNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1hNRElPX01ESU9fTUdSX0FDQ0VTU19DT01QTEVURSBcCiAJCQkJCQkJCXZ4Z2VfbUJJVCg0NykKLS8qMHgwMWUzMCovCXU2NAl4bWFjX2xpbmtfZXJyX3BvcnRfbWFza1syXTsKLS8qMHgwMWUzOCovCXU2NAl4bWFjX2xpbmtfZXJyX3BvcnRfYWxhcm1bMl07CisvKjB4MDFlMzAqLwl1NjQJeG1hY19saW5rX2Vycl9wb3J0MF9tYXNrOworLyoweDAxZTM4Ki8JdTY0CXhtYWNfbGlua19lcnJfcG9ydDBfYWxhcm07CisvKjB4MDFlNDAqLwl1NjQJeG1hY19saW5rX2Vycl9wb3J0MV9yZWc7CisvKjB4MDFlNDgqLwl1NjQJeG1hY19saW5rX2Vycl9wb3J0MV9tYXNrOworLyoweDAxZTUwKi8JdTY0CXhtYWNfbGlua19lcnJfcG9ydDFfYWxhcm07CiAvKjB4MDFlNTgqLwl1NjQJeGd4c19nZW5fZXJyX3JlZzsKICNkZWZpbmUJVlhHRV9IV19YR1hTX0dFTl9FUlJfUkVHX1hHWFNfWEdYU19GU01fRVJSCXZ4Z2VfbUJJVCg2MykKIC8qMHgwMWU2MCovCXU2NAl4Z3hzX2dlbl9lcnJfbWFzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5jCmluZGV4IDM3MGY1NWMuLmZlM2FlNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYwpAQCAtNzMxLDYgKzczMSw3IEBACiAJdnhnZV9hc3NlcnQoY2hhbm5lbC0+Y29tcGxfaW5kZXggPCBjaGFubmVsLT5sZW5ndGgpOwogCiAJKmR0cmggPQljaGFubmVsLT53b3JrX2FycltjaGFubmVsLT5jb21wbF9pbmRleF07CisJcHJlZmV0Y2goKmR0cmgpOwogfQogCiAvKgpAQCAtMTA3MCwxMSArMTA3MSwxMSBAQAogCQlWWEdFX0hXX05PREJXX0dFVF9OT19TTk9PUChub19zbm9vcCksCiAJCSZmaWZvLT5ub2ZsX2RiLT5jb250cm9sXzApOwogCi0Jd21iKCk7CisJbW1pb3diKCk7CiAKIAl3cml0ZXEodHhkbF9wdHIsICZmaWZvLT5ub2ZsX2RiLT50eGRsX3B0cik7Ci0Jd21iKCk7CiAKKwltbWlvd2IoKTsKIH0KIAogLyoqCkBAIC0yNTA4LDcgKzI1MDksOCBAQAogICogU2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfcG9sbF90eCgpLgogICovCiBlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfcG9sbF90eChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8sCi0JCQkJCXZvaWQgKipza2JfcHRyKQorCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqKipza2JfcHRyLCBpbnQgbnJfc2tiLAorCQkJCQlpbnQgKm1vcmUpCiB7CiAJZW51bSB2eGdlX2h3X2ZpZm9fdGNvZGUgdF9jb2RlOwogCXZvaWQgKmZpcnN0X3R4ZGxoOwpAQCAtMjUyMCw4ICsyNTIyLDggQEAKIAlzdGF0dXMgPSB2eGdlX2h3X2ZpZm9fdHhkbF9uZXh0X2NvbXBsZXRlZChmaWZvLAogCQkJCSZmaXJzdF90eGRsaCwgJnRfY29kZSk7CiAJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKQotCQlpZiAoZmlmby0+Y2FsbGJhY2soZmlmbywgZmlyc3RfdHhkbGgsCi0JCQl0X2NvZGUsIGNoYW5uZWwtPnVzZXJkYXRhLCBza2JfcHRyKSAhPSBWWEdFX0hXX09LKQorCQlpZiAoZmlmby0+Y2FsbGJhY2soZmlmbywgZmlyc3RfdHhkbGgsIHRfY29kZSwKKwkJCWNoYW5uZWwtPnVzZXJkYXRhLCBza2JfcHRyLCBucl9za2IsIG1vcmUpICE9IFZYR0VfSFdfT0spCiAJCQlzdGF0dXMgPSBWWEdFX0hXX0NPTVBMRVRJT05TX1JFTUFJTjsKIAogCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaAppbmRleCA3NTY3YTExLi40NjE3NDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmgKQEAgLTM1LDggKzM1LDYgQEAKIAkJCVZYR0VfSFdfSEVBREVSX1ZMQU5fU0laRSArIFwKIAkJCVZYR0VfSFdfSEVBREVSX1NOQVBfU0laRSkKIAotI2RlZmluZSBWWEdFX0hXX1RDUElQX0hFQURFUl9NQVhfU0laRQkoNjQgKyA2NCkKLQogLyogMzJiaXQgYWxpZ25tZW50cyAqLwogI2RlZmluZSBWWEdFX0hXX0hFQURFUl9FVEhFUk5FVF9JSV84MDJfM19BTElHTgkJMgogI2RlZmluZSBWWEdFX0hXX0hFQURFUl84MDJfMl9TTkFQX0FMSUdOCQkJMgpAQCAtMjMyOCw3ICsyMzI2LDcgQEAKIAogZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3BvbGxfdHgoCiAJc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvaCwKLQl2b2lkICoqc2tiX3B0cik7CisJc3RydWN0IHNrX2J1ZmYgKioqc2tiX3B0ciwgaW50IG5yX3NrYiwgaW50ICptb3JlKTsKIAogZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX2FsYXJtX3Byb2Nlc3MoCiAJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS12ZXJzaW9uLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdmVyc2lvbi5oCmluZGV4IDgyNzg2ZmYuLjhmYmNlNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS12ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaApAQCAtMTcsNyArMTcsNyBAQAogCiAjZGVmaW5lIFZYR0VfVkVSU0lPTl9NQUpPUgkiMiIKICNkZWZpbmUgVlhHRV9WRVJTSU9OX01JTk9SCSIwIgotI2RlZmluZSBWWEdFX1ZFUlNJT05fRklYCSI0IgotI2RlZmluZSBWWEdFX1ZFUlNJT05fQlVJTEQJIjE3Nzk1IgorI2RlZmluZSBWWEdFX1ZFUlNJT05fRklYCSI1IgorI2RlZmluZSBWWEdFX1ZFUlNJT05fQlVJTEQJIjE4MDUzIgogI2RlZmluZSBWWEdFX1ZFUlNJT05fRk9SCSJrIgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY29zYS5jIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwppbmRleCA2MTU4MWVlLi42NjM2MGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY29zYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogc3RhdGljIGludCBjb3NhX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkKTsKIHN0YXRpYyBpbnQgY29zYV9uZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmQpOwogc3RhdGljIHZvaWQgY29zYV9uZXRfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZCk7Ci1zdGF0aWMgaW50IGNvc2FfbmV0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkKTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBjb3NhX25ldF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZCk7CiBzdGF0aWMgY2hhciAqY29zYV9uZXRfc2V0dXBfcngoc3RydWN0IGNoYW5uZWxfZGF0YSAqY2hhbm5lbCwgaW50IHNpemUpOwogc3RhdGljIGludCBjb3NhX25ldF9yeF9kb25lKHN0cnVjdCBjaGFubmVsX2RhdGEgKmNoYW5uZWwpOwogc3RhdGljIGludCBjb3NhX25ldF90eF9kb25lKHN0cnVjdCBjaGFubmVsX2RhdGEgKmNoYW5uZWwsIGludCBzaXplKTsKQEAgLTY3Miw3ICs2NzIsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvc2FfbmV0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgY29zYV9uZXRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNoYW5uZWxfZGF0YSAqY2hhbiA9IGRldl90b19jaGFuKGRldik7CiAKQEAgLTY4MCw3ICs2ODEsNyBAQAogCiAJY2hhbi0+dHhfc2tiID0gc2tiOwogCWNvc2Ffc3RhcnRfdHgoY2hhbiwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgY29zYV9uZXRfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwppbmRleCBmNTI1ZjlmLi4yNTczYzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYworKysgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwpAQCAtMTM5LDggKzEzOSw4IEBACiAJCQkJICAgICAgY29uc3Qgdm9pZCAqZGFkZHIsIGNvbnN0IHZvaWQgKnNhZGRyLAogCQkJCSAgICAgIHVuc2lnbmVkIGxlbik7CiBzdGF0aWMgaW50IGN5Y3hfbmV0ZGV2aWNlX3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIGludCBjeWN4X25ldGRldmljZV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBjeWN4X25ldGRldmljZV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKIAkJCWN5Y3hfbmV0ZGV2aWNlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTU5Myw4ICs1OTMsOCBAQAogICogICAgYm90dG9tIGhhbGYiICh3aXRoIGludGVycnVwdHMgZW5hYmxlZCkuCiAgKiAyLiBTZXR0aW5nIHRidXN5IGZsYWcgd2lsbCBpbmhpYml0IGZ1cnRoZXIgdHJhbnNtaXQgcmVxdWVzdHMgZnJvbSB0aGUKICAqICAgIHByb3RvY29sIHN0YWNrIGFuZCBjYW4gYmUgdXNlZCBmb3IgZmxvdyBjb250cm9sIHdpdGggcHJvdG9jb2wgbGF5ZXIuICovCi1zdGF0aWMgaW50IGN5Y3hfbmV0ZGV2aWNlX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgY3ljeF9uZXRkZXZpY2VfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY3ljeF94MjVfY2hhbm5lbCAqY2hhbiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGN5Y3hfZGV2aWNlICpjYXJkID0gY2hhbi0+Y2FyZDsKQEAgLTY2Myw3ICs2NjMsNyBAQAogZnJlZV9wYWNrZXQ6CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogR2V0IEV0aGVybmV0LXN0eWxlIGludGVyZmFjZSBzdGF0aXN0aWNzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2RsY2kuYyBiL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMKaW5kZXggMmZhMjc1YS4uMTVkMzUzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2RsY2kuYworKysgYi9kcml2ZXJzL25ldC93YW4vZGxjaS5jCkBAIC0xODYsNDUgKzE4NiwxMyBAQAogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiB9CiAKLXN0YXRpYyBpbnQgZGxjaV90cmFuc21pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGRsY2lfdHJhbnNtaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZGxjaV9sb2NhbCAqZGxwOwotCWludAkJCQkJcmV0OworCXN0cnVjdCBkbGNpX2xvY2FsICpkbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmV0ID0gMDsKLQotCWlmICghc2tiIHx8ICFkZXYpCi0JCXJldHVybigwKTsKLQotCWRscCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCi0JcmV0ID0gZGxwLT5zbGF2ZS0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLCBkbHAtPnNsYXZlKTsKLQlzd2l0Y2ggKHJldCkKLQl7Ci0JCWNhc2UgRExDSV9SRVRfT0s6Ci0JCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJCXJldCA9IE5FVERFVl9UWF9PSzsKLQkJCWJyZWFrOwotCQkJY2FzZSBETENJX1JFVF9FUlI6Ci0JCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJcmV0ID0gTkVUREVWX1RYX09LOwotCQkJYnJlYWs7Ci0JCQljYXNlIERMQ0lfUkVUX0RST1A6Ci0JCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJCXJldCA9IE5FVERFVl9UWF9CVVNZOwotCQkJYnJlYWs7Ci0JfQotCS8qIEFsYW4gQ294IHJlY29tbWVuZHMgYWx3YXlzIHJldHVybmluZyAwLCBhbmQgYWx3YXlzIGZyZWVpbmcgdGhlIHBhY2tldCAqLwotCS8qIGV4cGVyaWVuY2Ugc3VnZ2VzdCBhIHNsaWdodGx5IG1vcmUgY29uc2VydmF0aXZlIGFwcHJvYWNoICovCi0KLQlpZiAoIXJldCkKLQl7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCX0KLQlyZXR1cm4ocmV0KTsKKwlpZiAoc2tiKQorCQlkbHAtPnNsYXZlLT5uZXRkZXZfb3BzLT5uZG9fc3RhcnRfeG1pdChza2IsIGRscC0+c2xhdmUpOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbnQgZGxjaV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGRsY2lfY29uZiBfX3VzZXIgKmNvbmYsIGludCBnZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYyBiL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCmluZGV4IDhmYWNlNWQuLjgxYzhhZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCkBAIC0zNTksNyArMzU5LDggQEAKIHN0YXRpYyBpbnQgZHNjYzRfZm91bmQxKHN0cnVjdCBwY2lfZGV2ICosIHZvaWQgX19pb21lbSAqaW9hZGRyKTsKIHN0YXRpYyBpbnQgZHNjYzRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CiBzdGF0aWMgaW50IGRzY2M0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGRzY2M0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZHNjYzRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBkc2NjNF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgZHNjYzRfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CiBzdGF0aWMgaW50IGRzY2M0X2luaXRfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKQEAgLTY2MywxMiArNjY0LDEyIEBACiAJfSBlbHNlIHsKIAkJaWYgKHNrYi0+ZGF0YVtwa3RfbGVuXSAmIEZyYW1lUmRvKQogCQkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwotCQllbHNlIGlmICghKHNrYi0+ZGF0YVtwa3RfbGVuXSB8IH5GcmFtZUNyYykpCisJCWVsc2UgaWYgKCEoc2tiLT5kYXRhW3BrdF9sZW5dICYgRnJhbWVDcmMpKQogCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCWVsc2UgaWYgKCEoc2tiLT5kYXRhW3BrdF9sZW5dIHwgfihGcmFtZVZmciB8IEZyYW1lUmFiKSkpCisJCWVsc2UgaWYgKChza2ItPmRhdGFbcGt0X2xlbl0gJiAoRnJhbWVWZnIgfCBGcmFtZVJhYikpICE9CisJCQkgKEZyYW1lVmZyIHwgRnJhbWVSYWIpKQogCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCWVsc2UKLQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJfQogcmVmaWxsOgpAQCAtMTE0OCw3ICsxMTQ5LDggQEAKIH0KICNlbmRpZiAvKiBEU0NDNF9QT0xMSU5HICovCiAKLXN0YXRpYyBpbnQgZHNjYzRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGRzY2M0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkc2NjNF9kZXZfcHJpdiAqZHByaXYgPSBkc2NjNF9wcml2KGRldik7CiAJc3RydWN0IGRzY2M0X3BjaV9wcml2ICpwcHJpdiA9IGRwcml2LT5wY2lfcHJpdjsKQEAgLTExODIsNyArMTE4NCw3IEBACiAJaWYgKGRzY2M0X3R4X3F1aWVzY2VudChkcHJpdiwgZGV2KSkKIAkJZHNjYzRfZG9fdHgoZHByaXYsIGRldik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IGRzY2M0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwppbmRleCAyNWM5ZWY2Li4zZTkwZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKQEAgLTc5MiwyNSArNzkyLDYgQEAKIAkJCSAqLwogCQkJYnJlYWs7CiAJCX0KLQotCWNhc2UgTkVUX1JYX0NOX0xPVzoKLQkJewotCQkJZGJnKERCR19BU1MsICIlczogUmVjZWl2ZSBMb3cgQ29uZ2VzdGlvblxuIiwgbmFtZSk7Ci0JCQlicmVhazsKLQkJfQotCi0JY2FzZSBORVRfUlhfQ05fTU9EOgotCQl7Ci0JCQlkYmcoREJHX0FTUywgIiVzOiBSZWNlaXZlIE1vZGVyYXRlIENvbmdlc3Rpb25cbiIsIG5hbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCWNhc2UgTkVUX1JYX0NOX0hJR0g6Ci0JCXsKLQkJCWRiZyhEQkdfQVNTLCAiJXM6IFJlY2VpdmUgSGlnaCBDb25nZXN0aW9uXG4iLCBuYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0KIAljYXNlIE5FVF9SWF9EUk9QOgogCQl7CiAJCQlkYmcoREJHX0FTUywgIiVzOiBSZWNlaXZlZCBwYWNrZXQgZHJvcHBlZFxuIiwgbmFtZSk7CkBAIC0yMjkzLDcgKzIyNzQsNyBAQAogCXBvcnQtPnN0YXJ0ID0gMDsKIH0KIAotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBmc3Rfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmc3RfY2FyZF9pbmZvICpjYXJkOwpAQCAtMjMxMyw3ICsyMjk0LDcgQEAKIAkJZGJnKERCR19BU1MsCiAJCSAgICAiVHJpZWQgdG8gdHJhbnNtaXQgYnV0IG5vIGNhcnJpZXIgb24gY2FyZCAlZCBwb3J0ICVkXG4iLAogCQkgICAgY2FyZC0+Y2FyZF9ubywgcG9ydC0+aW5kZXgpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAkvKiBEcm9wIGl0IGlmIGl0J3MgdG9vIGJpZyEgTVRVIGZhaWx1cmUgPyAqLwpAQCAtMjMyMiw3ICsyMzAzLDcgQEAKIAkJICAgIExFTl9UWF9CVUZGRVIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCS8qCkBAIC0yMzU2LDcgKzIzMzcsNyBAQAogCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlkYmcoREJHX0FTUywgIlR4IHF1ZXVlIG92ZXJmbG93IGNhcmQgJWQgcG9ydCAlZFxuIiwKIAkJICAgIGNhcmQtPmNhcmRfbm8sIHBvcnQtPmluZGV4KTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJLyoKQEAgLTIzNzMsNyArMjM1NCw3IEBACiAJZnN0X3Ffd29ya19pdGVtKCZmc3Rfd29ya190eHEsIGNhcmQtPmNhcmRfbm8pOwogCXRhc2tsZXRfc2NoZWR1bGUoJmZzdF90eF90YXNrKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGQ2NDU3MC5jIGIvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzAuYwppbmRleCAxZWExZWY2Li44MDExNGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGQ2NDU3MC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTcwLmMKQEAgLTYyMCw3ICs2MjAsNyBAQAogI2VuZGlmIC8qIERFQlVHX1JJTkdTICovCiAKIAotc3RhdGljIGludCBzY2FfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNjYV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcG9ydF90ICpwb3J0ID0gZGV2X3RvX3BvcnQoZGV2KTsKIAljYXJkX3QgKmNhcmQgPSBwb3J0X3RvX2NhcmQocG9ydCk7CkBAIC02NzQsNyArNjc0LDcgQEAKIAlzcGluX3VubG9ja19pcnEoJnBvcnQtPmxvY2spOwogCiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzIuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTcyLmMKaW5kZXggZjA5OWMzNC4uODRmMDEzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzIuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGQ2NDU3Mi5jCkBAIC01NjIsNyArNTYyLDcgQEAKICNlbmRpZiAvKiBERUJVR19SSU5HUyAqLwogCiAKLXN0YXRpYyBpbnQgc2NhX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzY2FfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXBvcnRfdCAqcG9ydCA9IGRldl90b19wb3J0KGRldik7CiAJY2FyZF90ICpjYXJkID0gcG9ydC0+Y2FyZDsKQEAgLTYwMSw3ICs2MDEsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsYy5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuYwppbmRleCA3NTk2ZWFlLi5jYzA3MjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAlyZXR1cm4gaGRsYy0+cHJvdG8tPm5ldGlmX3J4KHNrYik7CiB9CiAKLWludCBoZGxjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IGhkbGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKaW5kZXggYmZhMDE2MS4uODQwY2ZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCkBAIC00MDcsNyArNDA3LDcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBwdmNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHB2Y194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcHZjX2RldmljZSAqcHZjID0gZGV2LT5tbF9wcml2OwogCkBAIC00MjEsNyArNDIxLDcgQEAKIAkJCQkJCQkgICAgIEdGUF9BVE9NSUMpKSB7CiAJCQkJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCQkJCXJldHVybiAwOworCQkJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJCQkJfQogCQkJCXNrYl9wdXQoc2tiLCBwYWQpOwogCQkJCW1lbXNldChza2ItPmRhdGEgKyBsZW4sIDAsIHBhZCk7CkBAIC00MzUsMTMgKzQzNSwxMyBAQAogCQkJCWRldi0+c3RhdHMudHhfY29tcHJlc3NlZCsrOwogCQkJc2tiLT5kZXYgPSBwdmMtPmZyYWQ7CiAJCQlkZXZfcXVldWVfeG1pdChza2IpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAJfQogCiAJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmcl9sb2dfZGxjaV9hY3RpdmUocHZjX2RldmljZSAqcHZjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcHBwLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYwppbmRleCA3MmE3Y2RhLi5iOWI5ZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYwpAQCAtMzg5LDYgKzM4OSw3IEBACiAJZm9yIChvcHQgPSBkYXRhOyBsZW47IGxlbiAtPSBvcHRbMV0sIG9wdCArPSBvcHRbMV0pIHsKIAkJaWYgKGxlbiA8IDIgfHwgbGVuIDwgb3B0WzFdKSB7CiAJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJa2ZyZWUob3V0KTsKIAkJCXJldHVybjsgLyogYmFkIHBhY2tldCwgZHJvcCBzaWxlbnRseSAqLwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYwppbmRleCA0OWU2OGY1Li4xYjMwZmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19yYXdfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3X2V0aC5jCkBAIC0yNSw3ICsyNSw3IEBACiAKIHN0YXRpYyBpbnQgcmF3X2V0aF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcik7CiAKLXN0YXRpYyBpbnQgZXRoX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZXRoX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IHBhZCA9IEVUSF9aTEVOIC0gc2tiLT5sZW47CiAJaWYgKHBhZCA+IDApIHsJCS8qIFBhZCB0aGUgZnJhbWUgd2l0aCB6ZXJvcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYwppbmRleCBiMWRjMjllLi5hYTkyNDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYwpAQCAtODcsNyArODcsNyBAQAogCiAKIAotc3RhdGljIGludCB4MjVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHgyNV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IHJlc3VsdDsKIApAQCAtOTgsNyArOTgsNyBAQAogCQlza2JfcHVsbChza2IsIDEpOwogCQlpZiAoKHJlc3VsdCA9IGxhcGJfZGF0YV9yZXF1ZXN0KGRldiwgc2tiKSkgIT0gTEFQQl9PSykKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAKIAljYXNlIDE6CiAJCWlmICgocmVzdWx0ID0gbGFwYl9jb25uZWN0X3JlcXVlc3QoZGV2KSkhPSBMQVBCX09LKSB7CkBAIC0xMjksNyArMTI5LDcgQEAKIAl9CiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMgYi9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMKaW5kZXggNTY3ZDRmNS4uMTUwMDJjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYwpAQCAtMTU2LDcgKzE1Niw4IEBACiAgKglQYXNzZWQgbmV0d29yayBmcmFtZXMsIGZpcmUgdGhlbSBkb3dud2luZC4KICAqLwogCi1zdGF0aWMgaW50IGhvc3Rlc3NfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZCkKK3N0YXRpYyBuZXRkZXZfdHhfdCBob3N0ZXNzX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkKQogewogCXJldHVybiB6ODUzMF9xdWV1ZV94bWl0KCZkZXZfdG9fc3YoZCktPmNoYW5BLCBza2IpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYyBiL2RyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMKaW5kZXggYmI3MTliNi4uYzcwNTA0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYworKysgYi9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jCkBAIC0xNjYsNiArMTY2LDI5IEBACiAjZGVmaW5lIENMSzQ2WF9TUEVFRF80MDk2S0haCSgoICAgMTYgPDwgMjIpIHwgKDI4MCA8PCAxMikgfCAxMDIzKQogI2RlZmluZSBDTEs0NlhfU1BFRURfODE5MktIWgkoKCAgICA4IDw8IDIyKSB8ICgyODAgPDwgMTIpIHwgMjA0NykKIAorLyoKKyAqIEhTU19DT05GSUdfQ0xPQ0tfQ1IgcmVnaXN0ZXIgY29uc2lzdHMgb2YgMyBwYXJ0czoKKyAqICAgICBBICgxMCBiaXRzKSwgQiAoMTAgYml0cykgYW5kIEMgKDEyIGJpdHMpLgorICogSVhQNDJ4IEhTUyBjbG9jayBnZW5lcmF0b3Igb3BlcmF0aW9uICh2ZXJpZmllZCB3aXRoIGFuIG9zY2lsbG9zY29wZSk6CisgKiBFYWNoIGNsb2NrIGJpdCB0YWtlcyA3LjUgbnMgKDEgLyAxMzMueHggTUh6KS4KKyAqIFRoZSBjbG9jayBzZXF1ZW5jZSBjb25zaXN0cyBvZiAoQyAtIEIpIHN0YXRlcyBvZiAwcyBhbmQgMXMsIGVhY2ggc3RhdGUgaXMKKyAqIEEgYml0cyB3aWRlLiBJdCdzIGZvbGxvd2VkIGJ5IChCICsgMSkgc3RhdGVzIG9mIDBzIGFuZCAxcywgZWFjaCBzdGF0ZSBpcworICogKEEgKyAxKSBiaXRzIHdpZGUuCisgKgorICogVGhlIHJlc3VsdGluZyBhdmVyYWdlIGNsb2NrIGZyZXF1ZW5jeSAoYXNzdW1pbmcgMzMuMzMzIE1IeiBvc2NpbGxhdG9yKSBpczoKKyAqIGZyZXEgPSA2Ni42NjYgTUh6IC8gKEEgKyAoQiArIDEpIC8gKEMgKyAxKSkKKyAqIG1pbnVtdW0gZnJlcSA9IDY2LjY2NiBNSHogLyAoQSArIDEpCisgKiBtYXhpbXVtIGZyZXEgPSA2Ni42NjYgTUh6IC8gQQorICoKKyAqIEV4YW1wbGU6IEEgPSAyLCBCID0gMiwgQyA9IDcsIENMT0NLX0NSIHJlZ2lzdGVyID0gMiA8PCAyMiB8IDIgPDwgMTIgfCA3CisgKiBmcmVxID0gNjYuNjY2IE1IeiAvICgyICsgKDIgKyAxKSAvICg3ICsgMSkpID0gMjguMDcgTUh6IChNYi9zKS4KKyAqIFRoZSBjbG9jayBzZXF1ZW5jZSBpczogMTEwMDExMDAxMSAoNSBkb3VibGVzKSAwMDAxMTEwMDAgKDMgdHJpcGxlcykuCisgKiBUaGUgc2VxdWVuY2UgdGFrZXMgKEMgLSBCKSAqIEEgKyAoQiArIDEpICogKEEgKyAxKSA9IDUgKiAyICsgMyAqIDMgYml0cworICogPSAxOSBiaXRzIChlYWNoIDcuNSBucyBsb25nKSA9IDE0Mi41IG5zICh0aGVuIHRoZSBzZXF1ZW5jZSByZXBlYXRzKS4KKyAqIFRoZSBzZXF1ZW5jZSBjb25zaXN0cyBvZiA0IGNvbXBsZXRlIGNsb2NrIHBlcmlvZHMsIHRodXMgdGhlIGF2ZXJhZ2UKKyAqIGZyZXF1ZW5jeSAoPSBjbG9jayByYXRlKSBpcyA0IC8gMTQyLjUgbnMgPSAyOC4wNyBNSHogKE1iL3MpLgorICogKG1heCBzcGVjaWZpZWQgY2xvY2sgcmF0ZSBmb3IgSVhQNDJ4IEhTUyBpcyA4LjE5MiBNYi9zKS4KKyAqLwogCiAvKiBoc3NfY29uZmlnLCBMVVQgZW50cmllcyAqLwogI2RlZmluZSBURE1NQVBfVU5BU1NJR05FRAkwCkBAIC0yMzksNiArMjYyLDcgQEAKIAl1bnNpZ25lZCBpbnQgY2xvY2tfdHlwZSwgY2xvY2tfcmF0ZSwgbG9vcGJhY2s7CiAJdW5zaWduZWQgaW50IGluaXRpYWxpemVkLCBjYXJyaWVyOwogCXU4IGhkbGNfY2ZnOworCXUzMiBjbG9ja19yZWc7CiB9OwogCiAvKiBOUEUgbWVzc2FnZSBzdHJ1Y3R1cmUgKi8KQEAgLTM5Myw3ICs0MTcsNyBAQAogCW1zZy5jbWQgPSBQT1JUX0NPTkZJR19XUklURTsKIAltc2cuaHNzX3BvcnQgPSBwb3J0LT5pZDsKIAltc2cuaW5kZXggPSBIU1NfQ09ORklHX0NMT0NLX0NSOwotCW1zZy5kYXRhMzIgPSBDTEs0MlhfU1BFRURfMjA0OEtIWiAvKiBGSVhNRSAqLzsKKwltc2cuZGF0YTMyID0gcG9ydC0+Y2xvY2tfcmVnOwogCWhzc19ucGVfc2VuZChwb3J0LCAmbXNnLCAiSFNTX1NFVF9DTE9DS19DUiIpOwogCiAJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKQEAgLTExNjAsNiArMTE4NCw2MiBAQAogCX0KIH0KIAorc3RhdGljIHUzMiBjaGVja19jbG9jayh1MzIgcmF0ZSwgdTMyIGEsIHUzMiBiLCB1MzIgYywKKwkJICAgICAgIHUzMiAqYmVzdCwgdTMyICpiZXN0X2RpZmYsIHUzMiAqcmVnKQoreworCS8qIGEgaXMgMTAtYml0LCBiIGlzIDEwLWJpdCwgYyBpcyAxMi1iaXQgKi8KKwl1NjQgbmV3X3JhdGU7CisJdTMyIG5ld19kaWZmOworCisJbmV3X3JhdGUgPSBpeHA0eHhfdGltZXJfZnJlcSAqICh1NjQpKGMgKyAxKTsKKwlkb19kaXYobmV3X3JhdGUsIGEgKiAoYyArIDEpICsgYiArIDEpOworCW5ld19kaWZmID0gYWJzKCh1MzIpbmV3X3JhdGUgLSByYXRlKTsKKworCWlmIChuZXdfZGlmZiA8ICpiZXN0X2RpZmYpIHsKKwkJKmJlc3QgPSBuZXdfcmF0ZTsKKwkJKmJlc3RfZGlmZiA9IG5ld19kaWZmOworCQkqcmVnID0gKGEgPDwgMjIpIHwgKGIgPDwgMTIpIHwgYzsKKwl9CisJcmV0dXJuIG5ld19kaWZmOworfQorCitzdGF0aWMgdm9pZCBmaW5kX2Jlc3RfY2xvY2sodTMyIHJhdGUsIHUzMiAqYmVzdCwgdTMyICpyZWcpCit7CisJdTMyIGEsIGIsIGRpZmYgPSAweEZGRkZGRkZGOworCisJYSA9IGl4cDR4eF90aW1lcl9mcmVxIC8gcmF0ZTsKKworCWlmIChhID4gMHgzRkYpIHsgLyogMTAtYml0IHZhbHVlIC0gd2UgY2FuIGdvIGFzIHNsb3cgYXMgY2EuIDY1IGtiL3MgKi8KKwkJY2hlY2tfY2xvY2socmF0ZSwgMHgzRkYsIDEsIDEsIGJlc3QsICZkaWZmLCByZWcpOworCQlyZXR1cm47CisJfQorCWlmIChhID09IDApIHsgLyogPiA2Ni42NjYgTUh6ICovCisJCWEgPSAxOyAvKiBtaW5pbXVtIGRpdmlkZXIgaXMgMSAoYSA9IDAsIGIgPSAxLCBjID0gMSkgKi8KKwkJcmF0ZSA9IGl4cDR4eF90aW1lcl9mcmVxOworCX0KKworCWlmIChyYXRlICogYSA9PSBpeHA0eHhfdGltZXJfZnJlcSkgeyAvKiBkb24ndCBkaXZpZGUgYnkgMCBsYXRlciAqLworCQljaGVja19jbG9jayhyYXRlLCBhIC0gMSwgMSwgMSwgYmVzdCwgJmRpZmYsIHJlZyk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGIgPSAwOyBiIDwgMHg0MDA7IGIrKykgeworCQl1NjQgYyA9IChiICsgMSkgKiAodTY0KXJhdGU7CisJCWRvX2RpdihjLCBpeHA0eHhfdGltZXJfZnJlcSAtIHJhdGUgKiBhKTsKKwkJYy0tOworCQlpZiAoYyA+PSAweEZGRikgeyAvKiAxMi1iaXQgLSBubyBuZWVkIHRvIGNoZWNrIG1vcmUgJ2IncyAqLworCQkJaWYgKGIgPT0gMCAmJiAvKiBhbHNvIHRyeSBhIGJpdCBoaWdoZXIgcmF0ZSAqLworCQkJICAgICFjaGVja19jbG9jayhyYXRlLCBhIC0gMSwgMSwgMSwgYmVzdCwgJmRpZmYsIHJlZykpCisJCQkJcmV0dXJuOworCQkJY2hlY2tfY2xvY2socmF0ZSwgYSwgYiwgMHhGRkYsIGJlc3QsICZkaWZmLCByZWcpOworCQkJcmV0dXJuOworCQl9CisJCWlmICghY2hlY2tfY2xvY2socmF0ZSwgYSwgYiwgYywgYmVzdCwgJmRpZmYsIHJlZykpCisJCQlyZXR1cm47CisJCWlmICghY2hlY2tfY2xvY2socmF0ZSwgYSwgYiwgYyArIDEsIGJlc3QsICZkaWZmLCByZWcpKQorCQkJcmV0dXJuOworCX0KK30KIAogc3RhdGljIGludCBoc3NfaGRsY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKIHsKQEAgLTExODIsNyArMTI2Miw3IEBACiAJCX0KIAkJbWVtc2V0KCZuZXdfbGluZSwgMCwgc2l6ZW9mKG5ld19saW5lKSk7CiAJCW5ld19saW5lLmNsb2NrX3R5cGUgPSBwb3J0LT5jbG9ja190eXBlOwotCQluZXdfbGluZS5jbG9ja19yYXRlID0gMjA0ODAwMDsgLyogRklYTUUgKi8KKwkJbmV3X2xpbmUuY2xvY2tfcmF0ZSA9IHBvcnQtPmNsb2NrX3JhdGU7CiAJCW5ld19saW5lLmxvb3BiYWNrID0gcG9ydC0+bG9vcGJhY2s7CiAJCWlmIChjb3B5X3RvX3VzZXIobGluZSwgJm5ld19saW5lLCBzaXplKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTIwNiw3ICsxMjg2LDEzIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlwb3J0LT5jbG9ja190eXBlID0gY2xrOyAvKiBVcGRhdGUgc2V0dGluZ3MgKi8KLQkJLyogRklYTUUgcG9ydC0+Y2xvY2tfcmF0ZSA9IG5ld19saW5lLmNsb2NrX3JhdGUgKi87CisJCWlmIChjbGsgPT0gQ0xPQ0tfSU5UKQorCQkJZmluZF9iZXN0X2Nsb2NrKG5ld19saW5lLmNsb2NrX3JhdGUsICZwb3J0LT5jbG9ja19yYXRlLAorCQkJCQkmcG9ydC0+Y2xvY2tfcmVnKTsKKwkJZWxzZSB7CisJCQlwb3J0LT5jbG9ja19yYXRlID0gMDsKKwkJCXBvcnQtPmNsb2NrX3JlZyA9IENMSzQyWF9TUEVFRF8yMDQ4S0haOworCQl9CiAJCXBvcnQtPmxvb3BiYWNrID0gbmV3X2xpbmUubG9vcGJhY2s7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wZV9sb2NrLCBmbGFncyk7CkBAIC0xMjY2LDcgKzEzNTIsOCBAQAogCWRldi0+bmV0ZGV2X29wcyA9ICZoc3NfaGRsY19vcHM7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7CiAJcG9ydC0+Y2xvY2tfdHlwZSA9IENMT0NLX0VYVDsKLQlwb3J0LT5jbG9ja19yYXRlID0gMjA0ODAwMDsKKwlwb3J0LT5jbG9ja19yYXRlID0gMDsKKwlwb3J0LT5jbG9ja19yZWcgPSBDTEs0MlhfU1BFRURfMjA0OEtIWjsKIAlwb3J0LT5pZCA9IHBkZXYtPmlkOwogCXBvcnQtPmRldiA9ICZwZGV2LT5kZXY7CiAJcG9ydC0+cGxhdCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jIGIvZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jCmluZGV4IGFmZjRmNmJkLi5kMWUzYzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jCkBAIC0xNDcsNyArMTQ3LDggQEAKIC8qCiAgKglTZW5kIGEgTEFQQiBmcmFtZSB2aWEgYW4gZXRoZXJuZXQgaW50ZXJmYWNlCiAgKi8KLXN0YXRpYyBpbnQgbGFwYmV0aF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbGFwYmV0aF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKaW5kZXggNDViMTgyMi4uN2VhNzFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYwpAQCAtODksNyArODksOCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogCiAKLXN0YXRpYyBpbnQgbG1jX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbG1jX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGxtY19yeCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGxtY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBsbWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xNDIzLDEyICsxNDI0LDEyIEBACiAgICAgcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKLXN0YXRpYyBpbnQgbG1jX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBsbWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIGxtY19zb2Z0Y190ICpzYyA9IGRldl90b19zYyhkZXYpOwogICAgIHUzMiBmbGFnOwogICAgIGludCBlbnRyeTsKLSAgICBpbnQgcmV0ID0gMDsKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAgICAgbG1jX3RyYWNlKGRldiwgImxtY19zdGFydF94bWl0IGluIik7CkBAIC0xNTEwLDcgKzE1MTEsNyBAQAogICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCiAgICAgbG1jX3RyYWNlKGRldiwgImxtY19zdGFydF94bWl0X291dCIpOwotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCkBAIC0xNjU3LDcgKzE2NTgsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHNrYl9wdXQobnNiLCBsZW4pLCBsZW4pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBuc2ItPnByb3RvY29sID0gbG1jX3Byb3RvX3R5cGUoc2MsIHNrYik7CisgICAgICAgICAgICBuc2ItPnByb3RvY29sID0gbG1jX3Byb3RvX3R5cGUoc2MsIG5zYik7CiAgICAgICAgICAgICBza2JfcmVzZXRfbWFjX2hlYWRlcihuc2IpOwogICAgICAgICAgICAgLyogc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKG5zYik7ICovCiAgICAgICAgICAgICBuc2ItPmRldiA9IGRldjsKQEAgLTE4OTcsMTEgKzE4OTgsMTIgQEAKICAgICAvKgogICAgICAqIFNldHMgZW5kIG9mIHJpbmcKICAgICAgKi8KLSAgICBzYy0+bG1jX3J4cmluZ1tpIC0gMV0ubGVuZ3RoIHw9IDB4MDIwMDAwMDA7IC8qIFNldCBlbmQgb2YgYnVmZmVycyBmbGFnICovCi0gICAgc2MtPmxtY19yeHJpbmdbaSAtIDFdLmJ1ZmZlcjIgPSB2aXJ0X3RvX2J1cyAoJnNjLT5sbWNfcnhyaW5nWzBdKTsgLyogUG9pbnQgYmFjayB0byB0aGUgc3RhcnQgKi8KKyAgICBpZiAoaSAhPSAwKSB7CisgICAgICAgIHNjLT5sbWNfcnhyaW5nW2kgLSAxXS5sZW5ndGggfD0gMHgwMjAwMDAwMDsgLyogU2V0IGVuZCBvZiBidWZmZXJzIGZsYWcgKi8KKyAgICAgICAgc2MtPmxtY19yeHJpbmdbaSAtIDFdLmJ1ZmZlcjIgPSB2aXJ0X3RvX2J1cygmc2MtPmxtY19yeHJpbmdbMF0pOyAvKiBQb2ludCBiYWNrIHRvIHRoZSBzdGFydCAqLworICAgIH0KICAgICBMTUNfQ1NSX1dSSVRFIChzYywgY3NyX3J4bGlzdCwgdmlydF90b19idXMgKHNjLT5sbWNfcnhyaW5nKSk7IC8qIHdyaXRlIGJhc2UgYWRkcmVzcyAqLwogCi0KICAgICAvKiBJbml0aWFsaXplIHRoZSB0cmFuc21pdCByaW5ncyBhbmQgYnVmZmVycyAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBMTUNfVFhERVNDUzsgaSsrKQogICAgIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYyBiL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYwppbmRleCBlMDM1ZDhjLi5hNTJmMjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCkBAIC0zNjAsMTUgKzM2MCw2IEBACiAJICAgICAgICIgJXUgUlggcGFja2V0cyByaW5nc1xuIiwgcmFtc2l6ZSAvIDEwMjQsIHJhbXBoeXMsCiAJICAgICAgIHBkZXYtPmlycSwgY2FyZC0+dHhfcmluZ19idWZmZXJzLCBjYXJkLT5yeF9yaW5nX2J1ZmZlcnMpOwogCi0JaWYgKHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QTFhfOTA1MCkgewotCQlwcmludGsoS0VSTl9FUlIgIkRldGVjdGVkIFBDSTIwMFNZTiBjYXJkIHdpdGggb2xkICIKLQkJICAgICAgICJjb25maWd1cmF0aW9uIGRhdGEuXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJTZWUgPGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvIgotCQkgICAgICAgImxpbnV4L3V0aWxzL25ldC9oZGxjL3BjaTIwMHN5bi8+IGZvciB1cGRhdGUuXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJUaGUgY2FyZCB3aWxsIHN0b3Agd29ya2luZyB3aXRoIgotCQkgICAgICAgIiBmdXR1cmUgdmVyc2lvbnMgb2YgTGludXggaWYgbm90IHVwZGF0ZWQuXG4iKTsKLQl9Ci0KIAlpZiAoY2FyZC0+dHhfcmluZ19idWZmZXJzIDwgMSkgewogCQlwcmludGsoS0VSTl9FUlIgInBjaTIwMHN5bjogUkFNIHRlc3QgZmFpbGVkXG4iKTsKIAkJcGNpMjAwX3BjaV9yZW1vdmVfb25lKHBkZXYpOwpAQCAtNDI3LDggKzQxOCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2kyMDBfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfOTA1MCwgUENJX1ZFTkRPUl9JRF9QTFgsCi0JICBQQ0lfREVWSUNFX0lEX1BMWF85MDUwLCAwLCAwLCAwIH0sCi0JeyBQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfOTA1MCwgUENJX1ZFTkRPUl9JRF9QTFgsCiAJICBQQ0lfREVWSUNFX0lEX1BMWF9QQ0kyMDBTWU4sIDAsIDAsIDAgfSwKIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2JuaS5jIGIvZHJpdmVycy9uZXQvd2FuL3NibmkuYwppbmRleCBkMTRlOTVhLi4xY2MyNGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2JuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKQEAgLTExNCw3ICsxMTQsOCBAQAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICAqc2JuaV9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKiwgdW5zaWduZWQgbG9uZywgaW50KTsKIHN0YXRpYyBpbnQgIHNibmlfb3Blbiggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIGludCAgc2JuaV9jbG9zZSggc3RydWN0IG5ldF9kZXZpY2UgKiApOwotc3RhdGljIGludCAgc2JuaV9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqICk7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgc2JuaV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqICk7CiBzdGF0aWMgaW50ICBzYm5pX2lvY3RsKCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50ICk7CiBzdGF0aWMgdm9pZCAgc2V0X211bHRpY2FzdF9saXN0KCBzdHJ1Y3QgbmV0X2RldmljZSAqICk7CiAKQEAgLTQ0NCw3ICs0NDUsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NCTklfTVVMVElMSU5FCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogc2JuaV9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAgKnNrYiwgIHN0cnVjdCBuZXRfZGV2aWNlICAqZGV2ICkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAgKnA7CkBAIC00NjMsNyArNDY0LDcgQEAKIAkJCXByZXBhcmVfdG9fc2VuZCggc2tiLCBwICk7CiAJCQlzcGluX3VubG9jayggJm5sLT5sb2NrICk7CiAJCQluZXRpZl9zdGFydF9xdWV1ZSggZGV2ICk7Ci0JCQlyZXR1cm4gIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAJfQogCkBAIC00NzIsNyArNDczLDcgQEAKIAogI2Vsc2UJLyogQ09ORklHX1NCTklfTVVMVElMSU5FICovCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogc2JuaV9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAgKnNrYiwgIHN0cnVjdCBuZXRfZGV2aWNlICAqZGV2ICkKIHsKIAlzdHJ1Y3QgbmV0X2xvY2FsICAqbmwgID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTQ4Myw3ICs0ODQsNyBAQAogCXByZXBhcmVfdG9fc2VuZCggc2tiLCBkZXYgKTsKIAogCXNwaW5fdW5sb2NrKCAmbmwtPmxvY2sgKTsKLQlyZXR1cm4gIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogI2VuZGlmCS8qIENPTkZJR19TQk5JX01VTFRJTElORSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NkbGEuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZGxhLmMKaW5kZXggMWQ2MzdmNC4uMmIxNWE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NkbGEuYworKysgYi9kcml2ZXJzL25ldC93YW4vc2RsYS5jCkBAIC02NTEsNyArNjUxLDggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogTk9URTogdGhlIERMQ0kgZHJpdmVyIGRlYWxzIHdpdGggZnJlZWluZyB0aGUgU0tCISEgKi8KLXN0YXRpYyBpbnQgc2RsYV90cmFuc21pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNkbGFfdHJhbnNtaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZnJhZF9sb2NhbCAqZmxwOwogCWludCAgICAgICAgICAgICAgIHJldCwgYWRkciwgYWNjZXB0LCBpOwpAQCAtNzExLDIzICs3MTIsMjEgQEAKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCX0KKwogCQlzd2l0Y2ggKHJldCkKIAkJewogCQkJY2FzZSBTRExBX1JFVF9PSzoKIAkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJCQlyZXQgPSBETENJX1JFVF9PSzsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBTRExBX1JFVF9DSVJfT1ZFUkZMT1c6CiAJCQljYXNlIFNETEFfUkVUX0JVRl9PVkVSU0laRToKIAkJCWNhc2UgU0RMQV9SRVRfTk9fQlVGUzoKIAkJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJCQlyZXQgPSBETENJX1JFVF9EUk9QOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCQkJcmV0ID0gRExDSV9SRVRfRVJSOwogCQkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNzM3LDcgKzczNiw5IEBACiAJCWlmKGZscC0+bWFzdGVyW2ldIT1OVUxMKQogCQkJbmV0aWZfd2FrZV9xdWV1ZShmbHAtPm1hc3RlcltpXSk7CiAJfQkJCi0JcmV0dXJuKHJldCk7CisKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgc2RsYV9yZWNlaXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2VhbGV2ZWwuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCmluZGV4IDIzYjI2OTAuLjBjNTI1ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCkBAIC0xNTYsNyArMTU2LDggQEAKICAqCVBhc3NlZCBuZXR3b3JrIGZyYW1lcywgZmlyZSB0aGVtIGRvd253aW5kLgogICovCiAKLXN0YXRpYyBpbnQgc2VhbGV2ZWxfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZCkKK3N0YXRpYyBuZXRkZXZfdHhfdCBzZWFsZXZlbF9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmQpCiB7CiAJcmV0dXJuIHo4NTMwX3F1ZXVlX3htaXQoZGV2X3RvX2NoYW4oZCktPmNoYW4sIHNrYik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vd2FueGwuYyBiL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jCmluZGV4IGU0YWQ3YjYuLmRhZWU4YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jCkBAIC0yNjgsNyArMjY4LDcgQEAKIAogCiAKLXN0YXRpYyBpbnQgd2FueGxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHdhbnhsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICAgICAgcG9ydF90ICpwb3J0ID0gZGV2X3RvX3BvcnQoZGV2KTsKIAlkZXNjX3QgKmRlc2M7CkBAIC0zMTAsNyArMzEwLDcgQEAKIAl9CiAKIAlzcGluX3VubG9jaygmcG9ydC0+bG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jIGIvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYwppbmRleCBkNjdlMjA4Li4yNzk0NTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKQEAgLTI5OSw3ICsyOTksOCBAQAogCiAvKiBFbmNhcHN1bGF0ZSBhbiBJUCBkYXRhZ3JhbSBhbmQga2ljayBpdCBpbnRvIGEgVFRZIHF1ZXVlLiAqLwogCi1zdGF0aWMgaW50IHgyNV9hc3lfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHgyNV9hc3lfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHgyNV9hc3kgKnNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgZXJyOwpAQCAtMzA4LDcgKzMwOSw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHhtaXQgY2FsbCB3aGVuIGlmYWNlIGlzIGRvd25cbiIsCiAJCQlkZXYtPm5hbWUpOwogCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJc3dpdGNoIChza2ItPmRhdGFbMF0pIHsKQEAgLTMxOSwxNCArMzIwLDE0IEBACiAJCWlmIChlcnIgIT0gTEFQQl9PSykKIAkJCXByaW50ayhLRVJOX0VSUiAieDI1X2FzeTogbGFwYl9jb25uZWN0X3JlcXVlc3QgZXJyb3IgLSAlZFxuIiwgZXJyKTsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCWNhc2UgMHgwMjogLyogRGlzY29ubmVjdCByZXF1ZXN0IC4uIGRvIG5vdGhpbmcgLSBoYW5nIHVwID8/ICovCiAJCWVyciA9IGxhcGJfZGlzY29ubmVjdF9yZXF1ZXN0KGRldik7CiAJCWlmIChlcnIgIT0gTEFQQl9PSykKIAkJCXByaW50ayhLRVJOX0VSUiAieDI1X2FzeTogbGFwYl9kaXNjb25uZWN0X3JlcXVlc3QgZXJyb3IgLSAlZFxuIiwgZXJyKTsKIAlkZWZhdWx0OgogCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuICAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlza2JfcHVsbChza2IsIDEpOwkvKiBSZW1vdmUgY29udHJvbCBieXRlICovCiAJLyoKQEAgLTM0NCw5ICszNDUsOSBAQAogCWlmIChlcnIgIT0gTEFQQl9PSykgewogCQlwcmludGsoS0VSTl9FUlIgIngyNV9hc3k6IGxhcGJfZGF0YV9yZXF1ZXN0IGVycm9yIC0gJWRcbiIsIGVycik7CiAJCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vejg1MjMwLmMgYi9kcml2ZXJzL25ldC93YW4vejg1MjMwLmMKaW5kZXggYWQ0ZTc5Yy4uMGJlN2VjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYwpAQCAtMTcyNywxNSArMTcyNywxNCBAQAogICoJcG9pbnQuCiAgKi8KIAotaW50IHo4NTMwX3F1ZXVlX3htaXQoc3RydWN0IHo4NTMwX2NoYW5uZWwgKmMsIHN0cnVjdCBza19idWZmICpza2IpCituZXRkZXZfdHhfdCB6ODUzMF9xdWV1ZV94bWl0KHN0cnVjdCB6ODUzMF9jaGFubmVsICpjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCiAJbmV0aWZfc3RvcF9xdWV1ZShjLT5uZXRkZXZpY2UpOwogCWlmKGMtPnR4X25leHRfc2tiKQotCXsKLQkJcmV0dXJuIDE7Ci0JfQorCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisKIAkKIAkvKiBQQyBTUEVDSUZJQyAtIERNQSBsaW1pdHMgKi8KIAkKQEAgLTE3NjcsNyArMTc2Niw3IEBACiAJejg1MzBfdHhfYmVnaW4oYyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShjLT5sb2NrLCBmbGFncyk7CiAJCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogRVhQT1JUX1NZTUJPTCh6ODUzMF9xdWV1ZV94bWl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuaCBiL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuaAppbmRleCA4NWIzZTc4Li5mMjlkNTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vejg1MjMwLmgKKysrIGIvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5oCkBAIC00MDYsNyArNDA2LDggQEAKIGV4dGVybiBpbnQgejg1MzBfc3luY190eGRtYV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCB6ODUzMF9jaGFubmVsICopOwogZXh0ZXJuIGludCB6ODUzMF9zeW5jX3R4ZG1hX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCB6ODUzMF9jaGFubmVsICopOwogZXh0ZXJuIGludCB6ODUzMF9jaGFubmVsX2xvYWQoc3RydWN0IHo4NTMwX2NoYW5uZWwgKiwgdTggKik7Ci1leHRlcm4gaW50IHo4NTMwX3F1ZXVlX3htaXQoc3RydWN0IHo4NTMwX2NoYW5uZWwgKmMsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIG5ldGRldl90eF90IHo4NTMwX3F1ZXVlX3htaXQoc3RydWN0IHo4NTMwX2NoYW5uZWwgKmMsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gdm9pZCB6ODUzMF9udWxsX3J4KHN0cnVjdCB6ODUzMF9jaGFubmVsICpjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vbmV0ZGV2LmMKaW5kZXggOTY1M2Y0Ny4uNzk2Mzk2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYwpAQCAtMzM0LDEyICszMzQsMTIgQEAKICAqIHRoYXQgd2lsbCBzbGVlcC4gU2VlIGkyNDAwbV9uZXRfd2FrZV90eCgpIGZvciBkZXRhaWxzLgogICovCiBzdGF0aWMKLWludCBpMjQwMG1faGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKK25ldGRldl90eF90IGkyNDAwbV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQogewotCWludCByZXN1bHQ7CiAJc3RydWN0IGkyNDAwbSAqaTI0MDBtID0gbmV0X2Rldl90b19pMjQwMG0obmV0X2Rldik7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCWludCByZXN1bHQ7CiAKIAlkX2Zuc3RhcnQoMywgZGV2LCAiKHNrYiAlcCBuZXRfZGV2ICVwKVxuIiwgc2tiLCBuZXRfZGV2KTsKIAlpZiAoaTI0MDBtLT5zdGF0ZSA9PSBJMjQwME1fU1NfSURMRSkKQEAgLTM1Myw5ICszNTMsOSBAQAogCQluZXRfZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAl9CiAJa2ZyZWVfc2tiKHNrYik7Ci0JcmVzdWx0ID0gTkVUREVWX1RYX09LOwotCWRfZm5lbmQoMywgZGV2LCAiKHNrYiAlcCBuZXRfZGV2ICVwKSA9ICVkXG4iLCBza2IsIG5ldF9kZXYsIHJlc3VsdCk7Ci0JcmV0dXJuIHJlc3VsdDsKKworCWRfZm5lbmQoMywgZGV2LCAiKHNrYiAlcCBuZXRfZGV2ICVwKVxuIiwgc2tiLCBuZXRfZGV2KTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zZGlvLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCmluZGV4IDI1Mzg4MjUuLjI5ODFlMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3NkaW8uYwpAQCAtNTgsNiArNTgsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL3NkaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19mdW5jLmg+CiAjaW5jbHVkZSAiaTI0MDBtLXNkaW8uaCIKQEAgLTM3MCw2ICszNzEsMTAgQEAKIH0KIAogCitzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGkyNDAwbXNfdHlwZSA9IHsKKwkubmFtZQk9ICJ3aW1heCIsCit9OworCiAvKgogICogUHJvYmUgYSBpMjQwMG0gaW50ZXJmYWNlIGFuZCByZWdpc3RlciBpdAogICoKQEAgLTQxMSw2ICs0MTYsNyBAQAogCQlnb3RvIGVycm9yX2FsbG9jX25ldGRldjsKIAl9CiAJU0VUX05FVERFVl9ERVYobmV0X2RldiwgZGV2KTsKKwlTRVRfTkVUREVWX0RFVlRZUEUobmV0X2RldiwgJmkyNDAwbXNfdHlwZSk7CiAJaTI0MDBtID0gbmV0X2Rldl90b19pMjQwMG0obmV0X2Rldik7CiAJaTI0MDBtcyA9IGNvbnRhaW5lcl9vZihpMjQwMG0sIHN0cnVjdCBpMjQwMG1zLCBpMjQwMG0pOwogCWkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYgPSBuZXRfZGV2OwpAQCAtNTAxLDE1ICs1MDcsMTIgQEAKIAlkX2ZuZW5kKDMsIGRldiwgIlNESU8gZnVuYyAlcFxuIiwgZnVuYyk7CiB9CiAKLWVudW0gewotCUkyNDAwTVNfSU5URUxfVklEID0gMHg4OSwKLX07Ci0KIHN0YXRpYwogY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkIGkyNDAwbXNfc2Rpb19pZHNbXSA9IHsKLQkvKiBJbnRlbDogaTI0MDBtIFdpTUFYIG92ZXIgU0RJTyAqLwotCXsgU0RJT19ERVZJQ0UoSTI0MDBNU19JTlRFTF9WSUQsIDB4MTQwMikgfSwKLQl7IH0sIAkJCS8qIGVuZDogYWxsIHplcm9lcyAqLworCS8qIEludGVsOiBpMjQwMG0gV2lNQVggKGl3bWMzMjAwKSBvdmVyIFNESU8gKi8KKwl7IFNESU9fREVWSUNFKFNESU9fVkVORE9SX0lEX0lOVEVMLAorCQkgICAgICBTRElPX0RFVklDRV9JRF9JTlRFTF9JV01DMzIwMFdJTUFYKSB9LAorCXsgLyogZW5kOiBhbGwgemVyb2VzICovIH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShzZGlvLCBpMjQwMG1zX3NkaW9faWRzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jCmluZGV4IGNmZGFmNjkuLjdlYWRkMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLmMKQEAgLTM1MSw2ICszNTEsMTAgQEAKIH0KIAogCitzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGkyNDAwbXVfdHlwZSA9IHsKKwkubmFtZQk9ICJ3aW1heCIsCit9OworCiAvKgogICogUHJvYmUgYSBpMjQwMG0gaW50ZXJmYWNlIGFuZCByZWdpc3RlciBpdAogICoKQEAgLTM4OCw2ICszOTIsNyBAQAogCQlnb3RvIGVycm9yX2FsbG9jX25ldGRldjsKIAl9CiAJU0VUX05FVERFVl9ERVYobmV0X2RldiwgZGV2KTsKKwlTRVRfTkVUREVWX0RFVlRZUEUobmV0X2RldiwgJmkyNDAwbXVfdHlwZSk7CiAJaTI0MDBtID0gbmV0X2Rldl90b19pMjQwMG0obmV0X2Rldik7CiAJaTI0MDBtdSA9IGNvbnRhaW5lcl9vZihpMjQwMG0sIHN0cnVjdCBpMjQwMG11LCBpMjQwMG0pOwogCWkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYgPSBuZXRfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKaW5kZXggNWJjMDBkYi4uYWQ4OWQyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCkBAIC0yLDEwICsyLDE5IEBACiAjIFdpcmVsZXNzIExBTiBkZXZpY2UgY29uZmlndXJhdGlvbgogIwogCi1tZW51ICJXaXJlbGVzcyBMQU4iCittZW51Y29uZmlnIFdMQU4KKwlib29sICJXaXJlbGVzcyBMQU4iCiAJZGVwZW5kcyBvbiAhUzM5MAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgc2VjdGlvbiBjb250YWlucyBhbGwgdGhlIHByZSA4MDIuMTEgYW5kIDgwMi4xMSB3aXJlbGVzcworCSAgZGV2aWNlIGRyaXZlcnMuIEZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgZHJpdmVycyBhbmQgZG9jdW1lbnRhdGlvbgorCSAgb24gdGhlbSByZWZlciB0byB0aGUgd2lyZWxlc3Mgd2lraToKIAotY29uZmlnIFdMQU5fUFJFODAyMTEKKwkgIGh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMKKworaWYgV0xBTgorCittZW51Y29uZmlnIFdMQU5fUFJFODAyMTEKIAlib29sICJXaXJlbGVzcyBMQU4gKHByZS04MDIuMTEpIgogCWRlcGVuZHMgb24gTkVUREVWSUNFUwogCS0tLWhlbHAtLS0KQEAgLTEwMSw3ICsxMTAsNyBAQAogCSAgY2FsbGVkIG5ldHdhdmVfY3MuICBJZiB1bnN1cmUsIHNheSBOLgogCiAKLWNvbmZpZyBXTEFOXzgwMjExCittZW51Y29uZmlnIFdMQU5fODAyMTEKIAlib29sICJXaXJlbGVzcyBMQU4gKElFRUUgODAyLjExKSIKIAlkZXBlbmRzIG9uIE5FVERFVklDRVMKIAktLS1oZWxwLS0tCkBAIC0yNjYsNTEgKzI3NSwyNiBAQAogCSBtaWNybyBzdXBwb3J0IGZvciBldGh0b29sLgogCiBjb25maWcgUFJJU001NAotCXRyaXN0YXRlICdJbnRlcnNpbCBQcmlzbSBHVC9EdWV0dGUvSW5kaWdvIFBDSS9DYXJkYnVzJyAKKwl0cmlzdGF0ZSAnSW50ZXJzaWwgUHJpc20gR1QvRHVldHRlL0luZGlnbyBQQ0kvQ2FyZGJ1cyAoREVQUkVDQVRFRCknCiAJZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMICYmIFdMQU5fODAyMTEKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IEZXX0xPQURFUgogCS0tLWhlbHAtLS0KLQkgIEVuYWJsZSBQQ0kgYW5kIENhcmRidXMgc3VwcG9ydCBmb3IgdGhlIGZvbGxvd2luZyBjaGlwc2V0IGJhc2VkIGNhcmRzOgorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEZ1bGxNQUMgUENJL0NhcmRidXMgcHJpc201NCBkZXZpY2VzLiBUaGlzCisJICBkcml2ZXIgaXMgbm93IGRlcHJlY2F0ZWQgaW4gZmF2b3IgZm9yIHRoZSBTb2Z0TUFDIGRyaXZlciwgcDU0cGNpLgorCSAgcDU0cGNpIHN1cHBvcnRzIEZ1bGxNQUMgUENJL0NhcmRidXMgZGV2aWNlcyBhcyB3ZWxsLiBGb3IgZGV0YWlscyBvbgorCSAgdGhlIHNjaGVkdWxlZCByZW1vdmFsIG9mIHRoaXMgZHJpdmVyIG9uIHRoZSBrZXJuZWwgc2VlIHRoZSBmZWF0dXJlCisJICByZW1vdmFsIHNjaGVkdWxlOgogCi0JICBJU0wzODgwIC0gUHJpc20gR1QgICAgICAgICAgICA4MDIuMTEgYi9nCi0JICBJU0wzODc3IC0gUHJpc20gSW5kaWdvICAgICAgICA4MDIuMTEgYQotCSAgSVNMMzg5MCAtIFByaXNtIER1ZXR0ZSAgICAgICAgODAyLjExIGEvYi9nCi0JICAKLQkgIEZvciBhIGNvbXBsZXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhcmRzIHZpc2l0IDxodHRwOi8vcHJpc201NC5vcmc+LgotCSAgSGVyZSBpcyB0aGUgbGF0ZXN0IGNvbmZpcm1lZCBsaXN0IG9mIHN1cHBvcnRlZCBjYXJkczoKKwkgIERvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAogCi0JICAzY29tIE9mZmljZUNvbm5lY3QgMTFnIENhcmRidXMgQ2FyZCBha2EgM0NSV0UxNTRHNzIgKHZlcnNpb24gMSkKLQkgIEFsbG5ldCBBTEwwMjcxIFBDSSBDYXJkCi0JICBDb21wZXggV0w1NEcgQ2FyZGJ1cyBDYXJkCi0JICBDb3JlZ2EgQ0ctV0xDQjU0R1QgQ2FyZGJ1cyBDYXJkCi0JICBELUxpbmsgQWlyIFBsdXMgWHRyZW1lIEcgQTEgQ2FyZGJ1cyBDYXJkIGFrYSBEV0wtZzY1MAotCSAgSS1PIERhdGEgV04tRzU0L0NCIENhcmRidXMgQ2FyZAotCSAgS29iaXNoaSBYRy0zMDAgYWthIFotQ29tIENhcmRidXMgQ2FyZAotCSAgTmV0Z2VhciBXRzUxMSBDYXJkYnVzIENhcmQKLQkgIE92aXNsaW5rIFdMLTU0MDBQQ0kgUENJIENhcmQKLQkgIFBlYWJpcmQgV0xHLVBDSSBQQ0kgQ2FyZAotCSAgU2l0ZWNvbSBXTC0xMDBpIENhcmRidXMgQ2FyZAotCSAgU2l0ZWNvbSBXTC0xMTBpIFBDSSBDYXJkCi0JICBTTUMyODAyVyAtICAgIEVaIENvbm5lY3QgZyAyLjRHSHogNTQgTWJwcyBXaXJlbGVzcyBQQ0kgQ2FyZAotCSAgU01DMjgzNVcgLSAgICBFWiBDb25uZWN0IGcgMi40R0h6IDU0IE1icHMgV2lyZWxlc3MgQ2FyZGJ1cyBDYXJkCi0JICBTTUMyODM1Vy1WMiAtIEVaIENvbm5lY3QgZyAyLjRHSHogNTQgTWJwcyBXaXJlbGVzcyBDYXJkYnVzIENhcmQKLQkgIFotQ29tIFhHLTkwMCBQQ0kgQ2FyZAotCSAgWnl4ZWwgRy0xMDAgQ2FyZGJ1cyBDYXJkCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byB0aGUgcDU0IHdpa2k6CiAKLQkgIElmIHlvdSBlbmFibGUgdGhpcyB5b3Ugd2lsbCBuZWVkIGEgZmlybXdhcmUgZmlsZSBhcyB3ZWxsLgotCSAgWW91IHdpbGwgbmVlZCB0byBjb3B5IHRoaXMgdG8gL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZS9pc2wzODkwLgotCSAgWW91IGNhbiBnZXQgdGhpcyBub24tR1BMJ2QgZmlybXdhcmUgZmlsZSBmcm9tIHRoZSBQcmlzbTU0IHByb2plY3QgcGFnZToKLQkgIDxodHRwOi8vcHJpc201NC5vcmc+Ci0JICBZb3Ugd2lsbCBhbHNvIG5lZWQgdGhlIC9ldGMvaG90cGx1Zy9maXJtd2FyZS5hZ2VudCBzY3JpcHQgZnJvbQotCSAgYSBjdXJyZW50IGhvdHBsdWcgcGFja2FnZS4KKwkgIGh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvcDU0CiAKLQkgIE5vdGU6IFlvdSBuZWVkIGEgbW90aGVyYm9hcmQgd2l0aCBETUEgc3VwcG9ydCB0byB1c2UgYW55IG9mIHRoZXNlIGNhcmRzIAotCSAgCi0JICBJZiB5b3Ugd2FudCB0byBjb21waWxlIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2ggY2FuIGJlCi0JICBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3Ugd2FudCksCi0JICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4KLQkgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHJpc201NC4KKwkgIE5vdGU6IFlvdSBuZWVkIGEgbW90aGVyYm9hcmQgd2l0aCBETUEgc3VwcG9ydCB0byB1c2UgYW55IG9mIHRoZXNlIGNhcmRzCisKKwkgIFdoZW4gYnVpbHQgYXMgbW9kdWxlIHlvdSBnZXQgdGhlIG1vZHVsZSBwcmlzbTU0CiAKIGNvbmZpZyBVU0JfWkQxMjAxCiAJdHJpc3RhdGUgIlVTQiBaRDEyMDEgYmFzZWQgV2lyZWxlc3MgZGV2aWNlIHN1cHBvcnQiCkBAIC0zMzcsNyArMzIxLDYgQEAKIAlzZWxlY3QgVVNCX1VTQk5FVAogCXNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSCiAJc2VsZWN0IFVTQl9ORVRfUk5ESVNfSE9TVAotCXNlbGVjdCBXSVJFTEVTU19FWFQKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB3aXJlbGVzcyBSTkRJUyBkZXZpY2VzLgogCSAgVGhlc2UgYXJlIFVTQiBiYXNlZCBhZGFwdGVycyBmb3VuZCBpbiBkZXZpY2VzIHN1Y2ggYXM6CkBAIC00MjgsMTAgKzQxMSwxMiBAQAogCSAgTWljcm9uZXQgU1A5MDdHSyBWNQogCSAgRW5jb3JlIEVOVVdJLUcyCiAJICBUcmVuZG5ldCBURVctNDI0VUIKLQkgIEFTVVMgUDVCIERlbHV4ZQorCSAgQVNVUyBQNUIgRGVsdXhlL1A1SyBQcmVtaXVtIG1vdGhlcmJvYXJkcwogCSAgVG9zaGliYSBTYXRlbGxpdGUgUHJvIHNlcmllcyBvZiBsYXB0b3BzCiAJICBBc3VzIFdpcmVsZXNzIExpbmsKLQkgIExpbmtzeXMgV1VTQjU0R0MtRVUKKwkgIExpbmtzeXMgV1VTQjU0R0MtRVUgdjIKKwkgICAgKHYxID0gcnQ3M3VzYjsgdjMgaXMgcnQyMDcwLWJhc2VkLAorCSAgICAgdXNlIHN0YWdpbmcvcnQzMDcwIG9yIHRyeSBydDI4MDB1c2IpCiAKIAkgIFRoYW5rcyB0byBSZWFsdGVrIGZvciB0aGVpciBzdXBwb3J0IQogCkBAIC01MDQsNCArNDg5LDQgQEAKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9LY29uZmlnIgogCi1lbmRtZW51CitlbmRpZiAjIFdMQU4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYwppbmRleCAyYjllMzc5Li5iODBmNTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jCkBAIC00NTIsNyArNDUyLDggQEAKIAkJCXJ4X3N0YXR1cy5mcmVxID0gYWRtODIxMV9jaGFubmVsc1twcml2LT5jaGFubmVsIC0gMV0uY2VudGVyX2ZyZXE7CiAJCQlyeF9zdGF0dXMuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAKLQkJCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRldiwgc2tiLCAmcnhfc3RhdHVzKTsKKwkJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgJnJ4X3N0YXR1cywgc2l6ZW9mKHJ4X3N0YXR1cykpOworCQkJaWVlZTgwMjExX3J4X2lycXNhZmUoZGV2LCBza2IpOwogCQl9CiAKIAkJZW50cnkgPSAoKytwcml2LT5jdXJfcngpICUgcHJpdi0+cnhfcmluZ19zaXplOwpAQCAtMTMyNywxNiArMTMyOCwzOSBAQAogCX0KIH0KIAorc3RhdGljIHU2NCBhZG04MjExX3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQoreworCXVuc2lnbmVkIGludCBiaXRfbnIsIGk7CisJdTMyIG1jX2ZpbHRlclsyXTsKKworCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgeworCQlpZiAoIW1jbGlzdCkKKwkJCWJyZWFrOworCQliaXRfbnIgPSBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2OworCisJCWJpdF9uciAmPSAweDNGOworCQltY19maWx0ZXJbYml0X25yID4+IDVdIHw9IDEgPDwgKGJpdF9uciAmIDMxKTsKKwkJbWNsaXN0ID0gbWNsaXN0LT5uZXh0OworCX0KKworCXJldHVybiBtY19maWx0ZXJbMF0gfCAoKHU2NCkobWNfZmlsdGVyWzFdKSA8PCAzMik7Cit9CisKIHN0YXRpYyB2b2lkIGFkbTgyMTFfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKIAkJCQkgICAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJICAgICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQorCQkJCSAgICAgdTY0IG11bHRpY2FzdCkKIHsKIAlzdGF0aWMgY29uc3QgdTggYmNhc3RbRVRIX0FMRU5dID0geyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH07CiAJc3RydWN0IGFkbTgyMTFfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQl1bnNpZ25lZCBpbnQgYml0X25yLCBuZXdfZmxhZ3M7CisJdW5zaWduZWQgaW50IG5ld19mbGFnczsKIAl1MzIgbWNfZmlsdGVyWzJdOwotCWludCBpOworCisJbWNfZmlsdGVyWzBdID0gbXVsdGljYXN0OworCW1jX2ZpbHRlclsxXSA9IG11bHRpY2FzdCA+PiAzMjsKIAogCW5ld19mbGFncyA9IDA7CiAKQEAgLTEzNDUsMjMgKzEzNjksMTMgQEAKIAkJcHJpdi0+bmFyIHw9IEFETTgyMTFfTkFSX1BSOwogCQlwcml2LT5uYXIgJj0gfkFETTgyMTFfTkFSX01NOwogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSB+MDsKLQl9IGVsc2UgaWYgKCgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpIHx8IChtY19jb3VudCA+IDMyKSkgeworCX0gZWxzZSBpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJIHx8IG11bHRpY2FzdCA9PSB+KDBVTEwpKSB7CiAJCW5ld19mbGFncyB8PSBGSUZfQUxMTVVMVEk7CiAJCXByaXYtPm5hciAmPSB+QURNODIxMV9OQVJfUFI7CiAJCXByaXYtPm5hciB8PSBBRE04MjExX05BUl9NTTsKIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gfjA7CiAJfSBlbHNlIHsKIAkJcHJpdi0+bmFyICY9IH4oQURNODIxMV9OQVJfTU0gfCBBRE04MjExX05BUl9QUik7Ci0JCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBtY19jb3VudDsgaSsrKSB7Ci0JCQlpZiAoIW1jbGlzdCkKLQkJCQlicmVhazsKLQkJCWJpdF9uciA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjY7Ci0KLQkJCWJpdF9uciAmPSAweDNGOwotCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7Ci0JCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7Ci0JCX0KIAl9CiAKIAlBRE04MjExX0lETEVfUlgoKTsKQEAgLTE3NTYsNiArMTc3MCw3IEBACiAJLnJlbW92ZV9pbnRlcmZhY2UJPSBhZG04MjExX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gYWRtODIxMV9jb25maWcsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSBhZG04MjExX2Jzc19pbmZvX2NoYW5nZWQsCisJLnByZXBhcmVfbXVsdGljYXN0CT0gYWRtODIxMV9wcmVwYXJlX211bHRpY2FzdCwKIAkuY29uZmlndXJlX2ZpbHRlcgk9IGFkbTgyMTFfY29uZmlndXJlX2ZpbHRlciwKIAkuZ2V0X3N0YXRzCQk9IGFkbTgyMTFfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMJCT0gYWRtODIxMV9nZXRfdHhfc3RhdHMsCkBAIC0xOTYzLDE0ICsxOTc4LDYgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgYWRtODIxMV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhZG04MjExX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0KLQlpZiAocHJpdi0+bW9kZSAhPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkgewotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoZGV2KTsKLQkJYWRtODIxMV9zdG9wKGRldik7Ci0JfQotCiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CiAJcmV0dXJuIDA7CkBAIC0xOTc4LDE3ICsxOTg1LDggQEAKIAogc3RhdGljIGludCBhZG04MjExX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGFkbTgyMTFfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQotCWlmIChwcml2LT5tb2RlICE9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSB7Ci0JCWFkbTgyMTFfc3RhcnQoZGV2KTsKLQkJaWVlZTgwMjExX3dha2VfcXVldWVzKGRldik7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggOGNlNWU0Yy4uNzExNmExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtMTkyMCwxNCArMTkyMCwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1waV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKK3N0YXRpYyBuZXRkZXZfdHhfdCBtcGlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorewogCWludCBucGFja3MsIHBlbmRpbmc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgYWlyb19pbmZvICphaSA9IGRldi0+bWxfcHJpdjsKIAogCWlmICghc2tiKSB7CiAJCWFpcm9fcHJpbnRfZXJyKGRldi0+bmFtZSwgIiVzOiBza2IgPT0gTlVMTCEiLF9fZnVuY19fKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCW5wYWNrcyA9IHNrYl9xdWV1ZV9sZW4gKCZhaS0+dHhxKTsKIApAQCAtMTkzOCw3ICsxOTQwLDcgQEAKIAkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAkJfQogCQlza2JfcXVldWVfdGFpbCAoJmFpLT50eHEsIHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhaS0+YXV4X2xvY2ssIGZsYWdzKTsKQEAgLTE5NTEsNyArMTk1Myw3IEBACiAJCXNldF9iaXQoRkxBR19QRU5ESU5HX1hNSVQsICZhaS0+ZmxhZ3MpOwogCQltcGlfc2VuZF9wYWNrZXQgKGRldik7CiAJfQotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCkBAIC0yMTE5LDcgKzIxMjEsOSBAQAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KIAotc3RhdGljIGludCBhaXJvX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeworc3RhdGljIG5ldGRldl90eF90IGFpcm9fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKIAlzMTYgbGVuOwogCWludCBpLCBqOwogCXN0cnVjdCBhaXJvX2luZm8gKnByaXYgPSBkZXYtPm1sX3ByaXY7CkBAIC0yMTI3LDcgKzIxMzEsNyBAQAogCiAJaWYgKCBza2IgPT0gTlVMTCApIHsKIAkJYWlyb19wcmludF9lcnIoZGV2LT5uYW1lLCAiJXM6IHNrYiA9PSBOVUxMISIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJLyogRmluZCBhIHZhY2FudCBGSUQgKi8KQEAgLTIxNTUsNyArMjE1OSw3IEBACiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+dGhyX3dhaXQpOwogCX0gZWxzZQogCQlhaXJvX2VuZF94bWl0KGRldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgYWlyb19lbmRfeG1pdDExKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKQEAgLTIxODQsNyArMjE4OCw5IEBACiAJZGV2X2tmcmVlX3NrYihza2IpOwogfQogCi1zdGF0aWMgaW50IGFpcm9fc3RhcnRfeG1pdDExKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKK3N0YXRpYyBuZXRkZXZfdHhfdCBhaXJvX3N0YXJ0X3htaXQxMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorewogCXMxNiBsZW47CiAJaW50IGksIGo7CiAJc3RydWN0IGFpcm9faW5mbyAqcHJpdiA9IGRldi0+bWxfcHJpdjsKQEAgLTIxOTksNyArMjIwNSw3IEBACiAKIAlpZiAoIHNrYiA9PSBOVUxMICkgewogCQlhaXJvX3ByaW50X2VycihkZXYtPm5hbWUsICIlczogc2tiID09IE5VTEwhIiwgX19mdW5jX18pOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAkvKiBGaW5kIGEgdmFjYW50IEZJRCAqLwpAQCAtMjIyNyw3ICsyMjMzLDcgQEAKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT50aHJfd2FpdCk7CiAJfSBlbHNlCiAJCWFpcm9fZW5kX3htaXQxMShkZXYpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIGFpcm9fcmVhZF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tbWFpbi5jCmluZGV4IGQ4NGNhZjEuLjkyMWEwODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1tYWluLmMKQEAgLTc3LDcgKzc3LDcgQEAKIHN0YXRpYyBpbnQgYXJsYW5zX2ZvdW5kOwogCiBzdGF0aWMgIGludCAJYXJsYW5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyAgaW50IAlhcmxhbl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyAgbmV0ZGV2X3R4X3QgYXJsYW5fdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgIGlycXJldHVybl90IGFybGFuX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljICBpbnQgCWFybGFuX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqCkBAIC0xMDIyLDcgKzEwMjIsNyBAQAogCUFSTEFOX0RFQlVHX0VOVFJZKCJhcmxhbl9tYWNfYWRkciIpOwogCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FQlVTWTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAKQEAgLTExNjksNyArMTE2OSw3IEBACiB9CiAKIAotc3RhdGljIGludCBhcmxhbl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGFybGFuX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc2hvcnQgbGVuZ3RoOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKQEAgLTExOTMsNyArMTE5Myw3IEBACiAKIAlhcmxhbl9wcm9jZXNzX2ludGVycnVwdChkZXYpOwogCUFSTEFOX0RFQlVHX0VYSVQoImFybGFuX3R4Iik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogYmFkX2VuZDoKIAlhcmxhbl9wcm9jZXNzX2ludGVycnVwdChkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYwppbmRleCA0ZWZiZGJlLi44ZTFhNTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYwpAQCAtMTU2OCw3ICsxNTY4LDggQEAKIAogCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgImNhbGxpbmcgaWVlZTgwMjExX3J4X2lycXNhZmUoKTogJWQvJWQiLAogCQkgcHJpdi0+cnhfc2tiLT5sZW4sIHByaXYtPnJ4X3NrYi0+ZGF0YV9sZW4pOwotCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCBwcml2LT5yeF9za2IsICZyeF9zdGF0dXMpOworCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IocHJpdi0+cnhfc2tiKSwgJnJ4X3N0YXR1cywgc2l6ZW9mKHJ4X3N0YXR1cykpOworCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCBwcml2LT5yeF9za2IpOwogCiAJLyogVXNlIGEgbmV3IHNrYiBmb3IgdGhlIG5leHQgcmVjZWl2ZSAqLwogCXByaXYtPnJ4X3NrYiA9IE5VTEw7CkBAIC0xNzcyLDYgKzE3NzMsOSBAQAogCiAJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKIAorCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2h3X3NjYW4pOworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPndvcmtfc2V0X3Byb21pc2MpOworCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKIAogCWlmICghcHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkgewpAQCAtMTg3MSw4ICsxODc1LDggQEAKIAkvKiBGSVhNRTogYWRkIG1heGltdW0gdGltZSBmb3Igc2NhbiB0byBjb21wbGV0ZSAqLwogCiAJaWYgKHJldCAhPSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7Ci0JCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5ody0+d29ya3F1ZXVlLCAmcHJpdi0+ZHdvcmtfaHdfc2NhbiwKLQkJCQkgICBTQ0FOX1BPTExfSU5URVJWQUwpOworCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LCAmcHJpdi0+ZHdvcmtfaHdfc2NhbiwKKwkJCQkJICAgICBTQ0FOX1BPTExfSU5URVJWQUwpOwogCQltdXRleF91bmxvY2soJnByaXYtPm10eCk7CiAJCXJldHVybjsKIAl9CkBAIC0xOTMzLDggKzE5MzcsOCBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT5kd29ya19od19zY2FuLAotCQkJICAgU0NBTl9QT0xMX0lOVEVSVkFMKTsKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LCAmcHJpdi0+ZHdvcmtfaHdfc2NhbiwKKwkJCQkgICAgIFNDQU5fUE9MTF9JTlRFUlZBTCk7CiAKIGV4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOwpAQCAtMTk0Niw5ICsxOTUwLDggQEAKIHsKIAlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpOiBjaGFubmVsICVkIHJhZGlvICVkIiwKLQkJIF9fZnVuY19fLCBody0+Y29uZi5jaGFubmVsLT5od192YWx1ZSwKLQkJIGh3LT5jb25mLnJhZGlvX2VuYWJsZWQpOworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCk6IGNoYW5uZWwgJWQiLAorCQkgX19mdW5jX18sIGh3LT5jb25mLmNoYW5uZWwtPmh3X3ZhbHVlKTsKIAlhdDc2X2RiZ19kdW1wKERCR19NQUM4MDIxMSwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOLCAiYnNzaWQ6Iik7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdHgpOwpAQCAtMTk5MywxNSArMTk5NiwxNCBAQAogLyogbXVzdCBiZSBhdG9taWMgKi8KIHN0YXRpYyB2b2lkIGF0NzZfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywgaW50IG1jX2NvdW50LAotCQkJCSAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCisJCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLCB1NjQgbXVsdGljYXN0KQogewogCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgZmxhZ3M7CiAKIAlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpOiBjaGFuZ2VkX2ZsYWdzPTB4JTA4eCAiCi0JCSAidG90YWxfZmxhZ3M9MHglMDh4IG1jX2NvdW50PSVkIiwKLQkJIF9fZnVuY19fLCBjaGFuZ2VkX2ZsYWdzLCAqdG90YWxfZmxhZ3MsIG1jX2NvdW50KTsKKwkJICJ0b3RhbF9mbGFncz0weCUwOHgiLAorCQkgX19mdW5jX18sIGNoYW5nZWRfZmxhZ3MsICp0b3RhbF9mbGFncyk7CiAKIAlmbGFncyA9IGNoYW5nZWRfZmxhZ3MgJiBBVDc2X1NVUFBPUlRFRF9GSUxURVJTOwogCSp0b3RhbF9mbGFncyA9IEFUNzZfU1VQUE9SVEVEX0ZJTFRFUlM7CkBAIC0yMDIzLDcgKzIwMjUsNyBAQAogCX0gZWxzZQogCQlyZXR1cm47CiAKLQlxdWV1ZV93b3JrKGh3LT53b3JrcXVldWUsICZwcml2LT53b3JrX3NldF9wcm9taXNjKTsKKwlpZWVlODAyMTFfcXVldWVfd29yayhodywgJnByaXYtPndvcmtfc2V0X3Byb21pc2MpOwogfQogCiBzdGF0aWMgaW50IGF0NzZfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCkBAIC0yMjk0LDExICsyMjk2LDggQEAKIAogCXRhc2tsZXRfa2lsbCgmcHJpdi0+cnhfdGFza2xldCk7CiAKLQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkgewotCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19od19zY2FuKTsKLQkJZmx1c2hfd29ya3F1ZXVlKHByaXYtPmh3LT53b3JrcXVldWUpOworCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQogCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhwcml2LT5odyk7Ci0JfQogCiAJaWYgKHByaXYtPnR4X3VyYikgewogCQl1c2Jfa2lsbF91cmIocHJpdi0+dHhfdXJiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWcKaW5kZXggZWIwMzM3Yy4uMTFkZWQxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWcKQEAgLTEsOSArMSwyMiBAQAotY29uZmlnIEFUSF9DT01NT04KK21lbnVjb25maWcgQVRIX0NPTU1PTgogCXRyaXN0YXRlICJBdGhlcm9zIFdpcmVsZXNzIENhcmRzIgogCWRlcGVuZHMgb24gV0xBTl84MDIxMQotCWRlcGVuZHMgb24gQVRINUsgfHwgQVRIOUsgfHwgQVI5MTcwX1VTQgorCWRlcGVuZHMgb24gQ0ZHODAyMTEKKwktLS1oZWxwLS0tCisJICBUaGlzIHdpbGwgZW5hYmxlIHRoZSBzdXBwb3J0IGZvciB0aGUgQXRoZXJvcyB3aXJlbGVzcyBkcml2ZXJzLgorCSAgYXRoNWssIGF0aDlrIGFuZCBhcjkxNzAgZHJpdmVycyBzaGFyZSBzb21lIGNvbW1vbiBjb2RlLCB0aGlzIG9wdGlvbgorCSAgZW5hYmxlcyB0aGUgY29tbW9uIGF0aC5rbyBtb2R1bGUgd2hpY2ggc2hhcmVzIGNvbW1vbiBoZWxwZXJzLgogCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRhdGlvbiBvbiB0aGlzIG1vZHVsZSB5b3UgY2FuIHZpc2l0OgorCisJICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2F0aAorCisJICBGb3IgaW5mb3JtYXRpb24gb24gYWxsIEF0aGVyb3Mgd2lyZWxlc3MgZHJpdmVycyB2aXNpdDoKKworCSAgaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9BdGhlcm9zCisKK2lmIEFUSF9DT01NT04KIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL0tjb25maWciCi0KK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL0tjb25maWcKaW5kZXggYjk5ZTMyNi4uMDU5MThmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvS2NvbmZpZwpAQCAtMSwxMyArMSwxMyBAQAogY29uZmlnIEFSOTE3MF9VU0IKIAl0cmlzdGF0ZSAiQXRoZXJvcyBBUjkxNzAgODAyLjExbiBVU0Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gVVNCICYmIE1BQzgwMjExICYmIFdMQU5fODAyMTEKIAlzZWxlY3QgRldfTE9BREVSCi0Jc2VsZWN0IEFUSF9DT01NT04KIAloZWxwCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgQXRoZXJvcyAib3R1cyIgODAyLjExbiBVU0IgZGV2aWNlcy4KIAogCSAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIGFkZGl0aW9uYWwgZmlybXdhcmUgKDIgZmlsZXMpLgogCSAgRm9yIG5vdywgdGhlc2UgZmlsZXMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBoZXJlOgorCiAJICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2FyOTE3MAogCiAJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgYXI5MTcwdXNiLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9hcjkxNzAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvYXI5MTcwLmgKaW5kZXggYmI5Nzk4MS4uOTE0ZTQ3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9hcjkxNzAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2FyOTE3MC5oCkBAIC0xMDksMTMgKzEwOSw1NSBAQAogCWJvb2wgaGFzX3BsY3A7CiB9OwogCisjZGVmaW5lIEFSOTE3MF9OVU1fTUFYX0JBX1JFVFJZCTUKKyNkZWZpbmUgQVI5MTcwX05VTV9USUQJMTYKKyNkZWZpbmUgV01FX0JBX0JNUF9TSVpFICAgICAgICAgNjQKKyNkZWZpbmUgQVI5MTcwX05VTV9NQVhfQUdHX0xFTgkoMiAqIFdNRV9CQV9CTVBfU0laRSkKKworI2RlZmluZSBXTUVfQUNfQkUgICAyCisjZGVmaW5lIFdNRV9BQ19CSyAgIDMKKyNkZWZpbmUgV01FX0FDX1ZJICAgMQorI2RlZmluZSBXTUVfQUNfVk8gICAwCisKKyNkZWZpbmUgVElEX1RPX1dNRV9BQyhfdGlkKQkJCQlcCisJKCgoKF90aWQpID09IDApIHx8ICgoX3RpZCkgPT0gMykpID8gV01FX0FDX0JFIDoJXAorCSAoKChfdGlkKSA9PSAxKSB8fCAoKF90aWQpID09IDIpKSA/IFdNRV9BQ19CSyA6CVwKKwkgKCgoX3RpZCkgPT0gNCkgfHwgKChfdGlkKSA9PSA1KSkgPyBXTUVfQUNfVkkgOglcCisJIFdNRV9BQ19WTykKKworI2RlZmluZSBCQVdfV0lUSElOKF9zdGFydCwgX2Jhd3N6LCBfc2Vxbm8pIFwKKwkoKCgoX3NlcW5vKSAtIChfc3RhcnQpKSAmIDB4ZmZmKSA8IChfYmF3c3opKQorCitlbnVtIGFyOTE3MF90aWRfc3RhdGUgeworCUFSOTE3MF9USURfU1RBVEVfSU5WQUxJRCwKKwlBUjkxNzBfVElEX1NUQVRFX1NIVVRET1dOLAorCUFSOTE3MF9USURfU1RBVEVfUFJPR1JFU1MsCisJQVI5MTcwX1RJRF9TVEFURV9DT01QTEVURSwKK307CisKK3N0cnVjdCBhcjkxNzBfc3RhX3RpZCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBza19idWZmX2hlYWQgcXVldWU7CisJdTggYWRkcltFVEhfQUxFTl07CisJdTE2IHNzbjsKKwl1MTYgdGlkOworCWVudW0gYXI5MTcwX3RpZF9zdGF0ZSBzdGF0ZTsKKwlib29sIGFjdGl2ZTsKKwl1OCByZXRyeTsKK307CisKICNkZWZpbmUgQVI5MTcwX1FVRVVFX1RJTUVPVVQJCTY0CiAjZGVmaW5lIEFSOTE3MF9UWF9USU1FT1VUCQk4CisjZGVmaW5lIEFSOTE3MF9CQV9USU1FT1VUCQk0CiAjZGVmaW5lIEFSOTE3MF9KQU5JVE9SX0RFTEFZCQkxMjgKICNkZWZpbmUgQVI5MTcwX1RYX0lOVkFMSURfUkFURQkJMHhmZmZmZmZmZgogCisjZGVmaW5lIEFSOTE3MF9OVU1fVFhfU1RBVFVTCQkxMjgKKyNkZWZpbmUgQVI5MTcwX05VTV9UWF9BR0dfTUFYCQkzMAorCiBzdHJ1Y3QgYXI5MTcwIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiBjb21tb247CiAJc3RydWN0IG11dGV4IG11dGV4OwogCWVudW0gYXI5MTcwX2RldmljZV9zdGF0ZSBzdGF0ZTsKIAl1bnNpZ25lZCBsb25nIGJhZF9od19uYWdnZXI7CkBAIC0xMzYsNiArMTc4LDcgQEAKIAkvKiBiZWFjb25pbmcgKi8KIAlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBiZWFjb25fd29yazsKKwlib29sIGVuYWJsZV9iZWFjb247CiAKIAkvKiBjcnlwdG9ncmFwaGljIGVuZ2luZSAqLwogCXU2NCB1c2Vka2V5czsKQEAgLTE0MywxMCArMTg2LDggQEAKIAlib29sIGRpc2FibGVfb2ZmbG9hZDsKIAogCS8qIGZpbHRlciBzZXR0aW5ncyAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCBmaWx0ZXJfY29uZmlnX3dvcms7Ci0JdTY0IGN1cl9tY19oYXNoLCB3YW50X21jX2hhc2g7Ci0JdTMyIGN1cl9maWx0ZXIsIHdhbnRfZmlsdGVyOwotCXVuc2lnbmVkIGxvbmcgZmlsdGVyX2NoYW5nZWQ7CisJdTY0IGN1cl9tY19oYXNoOworCXUzMiBjdXJfZmlsdGVyOwogCXVuc2lnbmVkIGludCBmaWx0ZXJfc3RhdGU7CiAJYm9vbCBzbmlmZmVyX2VuYWJsZWQ7CiAKQEAgLTE4MSwyMCArMjIyLDMwIEBACiAKIAkvKiBFRVBST00gKi8KIAlzdHJ1Y3QgYXI5MTcwX2VlcHJvbSBlZXByb207Ci0Jc3RydWN0IGF0aF9yZWd1bGF0b3J5IHJlZ3VsYXRvcnk7CiAKIAkvKiB0eCBxdWV1ZXMgLSBhcyBzZWVuIGJ5IGh3IC0gKi8KIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3BlbmRpbmdbX19BUjkxNzBfTlVNX1RYUV07CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9zdGF0dXNbX19BUjkxNzBfTlVNX1RYUV07CiAJc3RydWN0IGRlbGF5ZWRfd29yayB0eF9qYW5pdG9yOworCS8qIHR4IGFtcGR1ICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9zdGF0dXNfYW1wZHU7CisJc3BpbmxvY2tfdCB0eF9hbXBkdV9saXN0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCB0eF9hbXBkdV9saXN0OworCXVuc2lnbmVkIGludCB0eF9hbXBkdV9wZW5kaW5nOwogCiAJLyogcnhzdHJlYW0gbXBkdSBtZXJnZSAqLwogCXN0cnVjdCBhcjkxNzBfcnhzdHJlYW1fbXBkdV9tZXJnZSByeF9tcGR1OwogCXN0cnVjdCBza19idWZmICpyeF9mYWlsb3ZlcjsKIAlpbnQgcnhfZmFpbG92ZXJfbWlzc2luZzsKKworCS8qIChjYWNoZWQpIEhXIEEtTVBEVSBzZXR0aW5ncyAqLworCXU4IGdsb2JhbF9hbXBkdV9kZW5zaXR5OworCXU4IGdsb2JhbF9hbXBkdV9mYWN0b3I7CiB9OwogCiBzdHJ1Y3QgYXI5MTcwX3N0YV9pbmZvIHsKKwlzdHJ1Y3QgYXI5MTcwX3N0YV90aWQgYWdnW0FSOTE3MF9OVU1fVElEXTsKKwl1bnNpZ25lZCBpbnQgYW1wZHVfbWF4X2xlbjsKIH07CiAKICNkZWZpbmUgQVI5MTcwX1RYX0ZMQUdfV0FJVF9GT1JfQUNLCUJJVCgwKQpAQCAtMjA5LDEwICsyNjAsNiBAQAogI2RlZmluZSBJU19TVEFSVEVEKGEpCQkoKChzdHJ1Y3QgYXI5MTcwICopYSktPnN0YXRlID49IEFSOTE3MF9TVEFSVEVEKQogI2RlZmluZSBJU19BQ0NFUFRJTkdfQ01EKGEpCSgoKHN0cnVjdCBhcjkxNzAgKilhKS0+c3RhdGUgPj0gQVI5MTcwX0lETEUpCiAKLSNkZWZpbmUgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX01PREUJCUJJVCgwKQotI2RlZmluZSBBUjkxNzBfRklMVEVSX0NIQU5HRURfTVVMVElDQVNUCQlCSVQoMSkKLSNkZWZpbmUgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX0ZSQU1FRklMVEVSCUJJVCgyKQotCiAvKiBleHBvcnRlZCBpbnRlcmZhY2UgKi8KIHZvaWQgKmFyOTE3MF9hbGxvYyhzaXplX3QgcHJpdl9zaXplKTsKIGludCBhcjkxNzBfcmVnaXN0ZXIoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBkZXZpY2UgKnBkZXYpOwpAQCAtMjI2LDggKzI3Myw4IEBACiBpbnQgYXI5MTcwX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBhcjkxNzBfaW5pdF9tYWMoc3RydWN0IGFyOTE3MCAqYXIpOwogaW50IGFyOTE3MF9zZXRfcW9zKHN0cnVjdCBhcjkxNzAgKmFyKTsKLWludCBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChzdHJ1Y3QgYXI5MTcwICphcik7Ci1pbnQgYXI5MTcwX3VwZGF0ZV9mcmFtZV9maWx0ZXIoc3RydWN0IGFyOTE3MCAqYXIpOworaW50IGFyOTE3MF91cGRhdGVfbXVsdGljYXN0KHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCB1NjQgbWNfaGFzdCk7CitpbnQgYXI5MTcwX3VwZGF0ZV9mcmFtZV9maWx0ZXIoc3RydWN0IGFyOTE3MCAqYXIsIGNvbnN0IHUzMiBmaWx0ZXIpOwogaW50IGFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoc3RydWN0IGFyOTE3MCAqYXIpOwogaW50IGFyOTE3MF9zZXRfYmVhY29uX3RpbWVycyhzdHJ1Y3QgYXI5MTcwICphcik7CiBpbnQgYXI5MTcwX3NldF9keW5fc2lmc19hY2soc3RydWN0IGFyOTE3MCAqYXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbGVkLmMKaW5kZXggNjNmZGE2Yy4uODZjNGU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9sZWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2xlZC5jCkBAIC05MCw5ICs5MCwxMiBAQAogCWFyOTE3MF9zZXRfbGVkc19zdGF0ZShhciwgbGVkX3ZhbCk7CiAJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwogCi0JaWYgKHJlcnVuKQotCQlxdWV1ZV9kZWxheWVkX3dvcmsoYXItPmh3LT53b3JrcXVldWUsICZhci0+bGVkX3dvcmssCi0JCQkJICAgbXNlY3NfdG9famlmZmllcyhibGlua19kZWxheSkpOworCWlmICghcmVydW4pCisJCXJldHVybjsKKworCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoYXItPmh3LAorCQkJCSAgICAgJmFyLT5sZWRfd29yaywKKwkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMoYmxpbmtfZGVsYXkpKTsKIH0KIAogc3RhdGljIHZvaWQgYXI5MTcwX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQsCkBAIC0xMTAsNyArMTEzLDcgQEAKIAl9CiAKIAlpZiAobGlrZWx5KElTX0FDQ0VQVElOR19DTUQoYXIpICYmIGFybC0+dG9nZ2xlZCkpCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHctPndvcmtxdWV1ZSwgJmFyLT5sZWRfd29yaywgSFovMTApOworCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGFyLT5odywgJmFyLT5sZWRfd29yaywgSFovMTApOwogfQogCiBzdGF0aWMgaW50IGFyOTE3MF9yZWdpc3Rlcl9sZWQoc3RydWN0IGFyOTE3MCAqYXIsIGludCBpLCBjaGFyICpuYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFjLmMKaW5kZXggZDlmMWY0Ni4uNjE0ZTMyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21hYy5jCkBAIC0yMzgsMzkgKzIzOCwzMSBAQAogCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7CiB9CiAKLWludCBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChzdHJ1Y3QgYXI5MTcwICphcikKK2ludCBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTY0IG1jX2hhc2gpCiB7CiAJaW50IGVycjsKIAogCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0dST1VQX0hBU0hfVEJMX0gsCi0JCWFyLT53YW50X21jX2hhc2ggPj4gMzIpOwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19HUk9VUF9IQVNIX1RCTF9MLAotCQlhci0+d2FudF9tY19oYXNoKTsKLQorCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19HUk9VUF9IQVNIX1RCTF9ILCBtY19oYXNoID4+IDMyKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfR1JPVVBfSEFTSF9UQkxfTCwgbWNfaGFzaCk7CiAJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwogCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKLQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlhci0+Y3VyX21jX2hhc2ggPSBhci0+d2FudF9tY19oYXNoOwotCisJYXItPmN1cl9tY19oYXNoID0gbWNfaGFzaDsKIAlyZXR1cm4gMDsKIH0KIAotaW50IGFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKHN0cnVjdCBhcjkxNzAgKmFyKQoraW50IGFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCB1MzIgZmlsdGVyKQogewogCWludCBlcnI7CiAKLQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19GUkFNRVRZUEVfRklMVEVSLAotCQkJICAgICAgIGFyLT53YW50X2ZpbHRlcik7Ci0KKwllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19GUkFNRVRZUEVfRklMVEVSLCBmaWx0ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlhci0+Y3VyX2ZpbHRlciA9IGFyLT53YW50X2ZpbHRlcjsKLQorCWFyLT5jdXJfZmlsdGVyID0gZmlsdGVyOwogCXJldHVybiAwOwogfQogCkBAIC0zOTEsMjQgKzM4MywyNiBAQAogCWlmIChhci0+dmlmKSB7CiAJCXYgfD0gYXItPnZpZi0+YnNzX2NvbmYuYmVhY29uX2ludDsKIAotCQlzd2l0Y2ggKGFyLT52aWYtPnR5cGUpIHsKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgotCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQkJdiB8PSBCSVQoMjUpOworCQlpZiAoYXItPmVuYWJsZV9iZWFjb24pIHsKKwkJCXN3aXRjaCAoYXItPnZpZi0+dHlwZSkgeworCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCQl2IHw9IEJJVCgyNSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQkJCXYgfD0gQklUKDI0KTsKKwkJCQlwcmV0YnR0ID0gKGFyLT52aWYtPmJzc19jb25mLmJlYWNvbl9pbnQgLSA2KSA8PAorCQkJCQkgIDE2OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKIAkJCWJyZWFrOwotCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCQkJdiB8PSBCSVQoMjQpOwotCQkJcHJldGJ0dCA9IChhci0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50IC0gNikgPDwgMTY7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOworCQkJfQogCQl9CiAKIAkJdiB8PSBhci0+dmlmLT5ic3NfY29uZi5kdGltX3BlcmlvZCA8PCAxNjsKIAl9CiAKIAlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCiAJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1BSRVRCVFQsIHByZXRidHQpOwogCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fUEVSSU9ELCB2KTsKIAlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFpbi5jCmluZGV4IDg4YzNkODUuLmMxZjhjNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFpbi5jCkBAIC00OSw2ICs0OSwxMCBAQAogbW9kdWxlX3BhcmFtX25hbWVkKG5vaHdjcnlwdCwgbW9kcGFyYW1fbm9od2NyeXB0LCBib29sLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm9od2NyeXB0LCAiRGlzYWJsZSBoYXJkd2FyZSBlbmNyeXB0aW9uLiIpOwogCitzdGF0aWMgaW50IG1vZHBhcmFtX2h0OworbW9kdWxlX3BhcmFtX25hbWVkKGh0LCBtb2RwYXJhbV9odCwgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGh0LCAiZW5hYmxlIE1QRFUgYWdncmVnYXRpb24uIik7CisKICNkZWZpbmUgUkFURShfYml0cmF0ZSwgX2h3X3JhdGUsIF90eHBpZHgsIF9mbGFncykgewlcCiAJLmJpdHJhdGUJPSAoX2JpdHJhdGUpLAkJCVwKIAkuZmxhZ3MJCT0gKF9mbGFncyksCQkJXApAQCAtMTQ4LDEyICsxNTIsMTUgQEAKIAkuY2FwCQk9IElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVIHwJCQlcCiAJCQkgIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwIHwJCVwKIAkJCSAgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAkJCVwKKwkJCSAgSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEIHwJCQlcCiAJCQkgIElFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwIHwJCQlcCiAJCQkgIElFRUU4MDIxMV9IVF9DQVBfU01fUFMsCQkJXAogCS5hbXBkdV9mYWN0b3IJPSAzLAkJCQkJCVwKIAkuYW1wZHVfZGVuc2l0eQk9IDYsCQkJCQkJXAogCS5tY3MJCT0gewkJCQkJCVwKLQkJLnJ4X21hc2sgPSB7IDB4RkYsIDB4RkYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH0sCVwKKwkJLnJ4X21hc2sgPSB7IDB4ZmYsIDB4ZmYsIDAsIDAsIDB4MSwgMCwgMCwgMCwgMCwgMCwgfSwJXAorCQkucnhfaGlnaGVzdCA9IGNwdV90b19sZTE2KDMwMCksCQkJCVwKKwkJLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRCwJCVwKIAl9LAkJCQkJCQkJXAogfQogCkBAIC0xNzQsOCArMTgxLDMxIEBACiB9OwogCiBzdGF0aWMgdm9pZCBhcjkxNzBfdHgoc3RydWN0IGFyOTE3MCAqYXIpOworc3RhdGljIGJvb2wgYXI5MTcwX3R4X2FtcGR1KHN0cnVjdCBhcjkxNzAgKmFyKTsKIAotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRworc3RhdGljIGlubGluZSB1MTYgYXI5MTcwX2dldF9zZXFfaChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQoreworCXJldHVybiBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSA+PiA0OworfQorCitzdGF0aWMgaW5saW5lIHUxNiBhcjkxNzBfZ2V0X3NlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXJldHVybiBhcjkxNzBfZ2V0X3NlcV9oKCh2b2lkICopIHR4Yy0+ZnJhbWVfZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGFyOTE3MF9nZXRfdGlkKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGFyOTE3MF90eF9jb250cm9sICp0eGMgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopIHR4Yy0+ZnJhbWVfZGF0YTsKKworCXJldHVybiAoaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcikpWzBdICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7Cit9CisKKyNkZWZpbmUgR0VUX05FWFRfU0VRKHNlcSkJKChzZXEgKyAxKSAmIDB4MGZmZikKKyNkZWZpbmUgR0VUX05FWFRfU0VRX0ZST01fU0tCKHNrYikJKEdFVF9ORVhUX1NFUShhcjkxNzBfZ2V0X3NlcShza2IpKSkKKworI2lmIChkZWZpbmVkIEFSOTE3MF9RVUVVRV9ERUJVRykgfHwgKGRlZmluZWQgQVI5MTcwX1RYQUdHX0RFQlVHKQogc3RhdGljIHZvaWQgYXI5MTcwX3ByaW50X3R4aGVhZGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjID0gKHZvaWQgKikgc2tiLT5kYXRhOwpAQCAtMTgzLDEwICsyMTMsMTAgQEAKIAlzdHJ1Y3QgYXI5MTcwX3R4X2luZm8gKmFyaW5mbyA9ICh2b2lkICopIHR4aW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKikgdHhjLT5mcmFtZV9kYXRhOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA9PiBGUkFNRSBbc2tiOiVwLCBxOiVkLCBEQTpbJXBNXSBmbGFnczoleCAiCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA9PiBGUkFNRSBbc2tiOiVwLCBxOiVkLCBEQTpbJXBNXSBmbGFnczoleCBzOiVkICIKIAkJCSAgIm1hY19jdHJsOiUwNHgsIHBoeV9jdHJsOiUwOHgsIHRpbWVvdXQ6WyVkIG1zXV1cbiIsCiAJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIHNrYiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksCi0JICAgICAgIGllZWU4MDIxMV9nZXRfREEoaGRyKSwgYXJpbmZvLT5mbGFncywKKwkgICAgICAgaWVlZTgwMjExX2dldF9EQShoZHIpLCBhcmluZm8tPmZsYWdzLCBhcjkxNzBfZ2V0X3NlcV9oKGhkciksCiAJICAgICAgIGxlMTZfdG9fY3B1KHR4Yy0+bWFjX2NvbnRyb2wpLCBsZTMyX3RvX2NwdSh0eGMtPnBoeV9jb250cm9sKSwKIAkgICAgICAgamlmZmllc190b19tc2VjcyhhcmluZm8tPnRpbWVvdXQgLSBqaWZmaWVzKSk7CiB9CkBAIC0yMTAsNyArMjQwLDkgQEAKIAkJICAgICAgICJtaXNtYXRjaCAlZCAhPSAlZFxuIiwgc2tiX3F1ZXVlX2xlbihxdWV1ZSksIGkpOwogCXByaW50ayhLRVJOX0RFQlVHICItLS1bIGVuZCBdLS0tXG4iKTsKIH0KKyNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgfHwgQVI5MTcwX1RYQUdHX0RFQlVHICovCiAKKyNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKIHN0YXRpYyB2b2lkIGFyOTE3MF9kdW1wX3R4cXVldWUoc3RydWN0IGFyOTE3MCAqYXIsCiAJCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUpCiB7CkBAIC0yMjAsNyArMjUyLDkgQEAKIAlfX2FyOTE3MF9kdW1wX3R4cXVldWUoYXIsIHF1ZXVlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+bG9jaywgZmxhZ3MpOwogfQorI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwogCisjaWZkZWYgQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcKIHN0YXRpYyB2b2lkIF9fYXI5MTcwX2R1bXBfdHhzdGF0cyhzdHJ1Y3QgYXI5MTcwICphcikKIHsKIAlpbnQgaTsKQEAgLTIyOSwyMCArMjYzLDI3IEBACiAJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOwogCiAJZm9yIChpID0gMDsgaSA8IF9fQVI5MTcwX05VTV9UWFE7IGkrKykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBxdWV1ZTolZCBsaW1pdDolZCBsZW46JWQgd2FpdGFjazolZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGksIGFyLT50eF9zdGF0c1tpXS5saW1pdCwKLQkJICAgICAgIGFyLT50eF9zdGF0c1tpXS5sZW4sIHNrYl9xdWV1ZV9sZW4oJmFyLT50eF9zdGF0dXNbaV0pKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBxdWV1ZTolZCBsaW1pdDolZCBsZW46JWQgd2FpdGFjazolZCAiCisJCSAgICAgICAiIHN0b3BwZWQ6JWRcbiIsIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGksCisJCSAgICAgICBhci0+dHhfc3RhdHNbaV0ubGltaXQsIGFyLT50eF9zdGF0c1tpXS5sZW4sCisJCSAgICAgICBza2JfcXVldWVfbGVuKCZhci0+dHhfc3RhdHVzW2ldKSwKKwkJICAgICAgIGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKGFyLT5odywgaSkpOwogfQorI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHICovCiAKLXN0YXRpYyB2b2lkIGFyOTE3MF9kdW1wX3R4c3RhdHMoc3RydWN0IGFyOTE3MCAqYXIpCisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCitzdGF0aWMgdm9pZCBhcjkxNzBfZHVtcF90eF9zdGF0dXNfYW1wZHUoc3RydWN0IGFyOTE3MCAqYXIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOwotCV9fYXI5MTcwX2R1bXBfdHhzdGF0cyhhcik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXItPnR4X3N0YXR1c19hbXBkdS5sb2NrLCBmbGFncyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBLU1QRFUgdHhfc3RhdHVzIHF1ZXVlID0+IFxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisJX19hcjkxNzBfZHVtcF90eHF1ZXVlKGFyLCAmYXItPnR4X3N0YXR1c19hbXBkdSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X3N0YXR1c19hbXBkdS5sb2NrLCBmbGFncyk7CiB9Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCisKKyNlbmRpZiAvKiBBUjkxNzBfVFhBR0dfREVCVUcgKi8KIAogLyogY2FsbGVyIG11c3QgZ3VhcmFudGVlIGV4Y2x1c2l2ZSBhY2Nlc3MgZm9yIF9iaW5fIHF1ZXVlLiAqLwogc3RhdGljIHZvaWQgYXI5MTcwX3JlY3ljbGVfZXhwaXJlZChzdHJ1Y3QgYXI5MTcwICphciwKQEAgLTMxNSw2ICszNTYsNzAgQEAKIAlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoYXItPmh3LCBza2IpOwogfQogCitzdGF0aWMgdm9pZCBhcjkxNzBfdHhfZmFrZV9hbXBkdV9zdGF0dXMoc3RydWN0IGFyOTE3MCAqYXIpCit7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBzdWNjZXNzOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBxdWV1ZV9iaXRtYXAgPSAwOworCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc3VjY2Vzcyk7CisKKwl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmYXItPnR4X3N0YXR1c19hbXBkdSkgPiBBUjkxNzBfTlVNX1RYX1NUQVRVUykKKwkJX19za2JfcXVldWVfdGFpbCgmc3VjY2Vzcywgc2tiX2RlcXVldWUoJmFyLT50eF9zdGF0dXNfYW1wZHUpKTsKKworCWFyOTE3MF9yZWN5Y2xlX2V4cGlyZWQoYXIsICZhci0+dHhfc3RhdHVzX2FtcGR1LCAmc3VjY2Vzcyk7CisKKyNpZmRlZiBBUjkxNzBfVFhBR0dfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGNvbGxlY3RlZCAlZCBBLU1QRFUgZnJhbWVzLlxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgc2tiX3F1ZXVlX2xlbigmc3VjY2VzcykpOworCV9fYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJnN1Y2Nlc3MpOworI2VuZGlmIC8qIEFSOTE3MF9UWEFHR19ERUJVRyAqLworCisJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZzdWNjZXNzKSkpIHsKKwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm87CisKKwkJcXVldWVfYml0bWFwIHw9IEJJVChza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CisKKwkJdHhpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXModHhpbmZvKTsKKworCQl0eGluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwkJdHhpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSAxOworCisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCkpOworCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoYXItPmh3LCBza2IpOworCX0KKworCWZvcl9lYWNoX2JpdChpLCAmcXVldWVfYml0bWFwLCBCSVRTX1BFUl9CWVRFKSB7CisjaWZkZWYgQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3YWtlIHF1ZXVlICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgaSk7CisJCV9fYXI5MTcwX2R1bXBfdHhzdGF0cyhhcik7CisjZW5kaWYgLyogQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcgKi8KKwkJaWVlZTgwMjExX3dha2VfcXVldWUoYXItPmh3LCBpKTsKKwl9CisKKwlpZiAocXVldWVfYml0bWFwKQorCQlhcjkxNzBfdHgoYXIpOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfdHhfYW1wZHVfY2FsbGJhY2soc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGFyOTE3MF90eF9pbmZvICphcmluZm8gPSAodm9pZCAqKSB0eGluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CisKKwlhcmluZm8tPnRpbWVvdXQgPSBqaWZmaWVzICsKKwkJCSAgbXNlY3NfdG9famlmZmllcyhBUjkxNzBfQkFfVElNRU9VVCk7CisKKwlza2JfcXVldWVfdGFpbCgmYXItPnR4X3N0YXR1c19hbXBkdSwgc2tiKTsKKwlhcjkxNzBfdHhfZmFrZV9hbXBkdV9zdGF0dXMoYXIpOworCWFyLT50eF9hbXBkdV9wZW5kaW5nLS07CisKKwlpZiAoIWxpc3RfZW1wdHkoJmFyLT50eF9hbXBkdV9saXN0KSAmJiAhYXItPnR4X2FtcGR1X3BlbmRpbmcpCisJCWFyOTE3MF90eF9hbXBkdShhcik7Cit9CisKIHZvaWQgYXI5MTcwX3R4X2NhbGxiYWNrKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKQEAgLTMzNiw3ICs0NDEsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CiAKIAlpZiAoYXJpbmZvLT5mbGFncyAmIEFSOTE3MF9UWF9GTEFHX0JMT0NLX0FDSykgewotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlhcjkxNzBfdHhfYW1wZHVfY2FsbGJhY2soYXIsIHNrYik7CiAJfSBlbHNlIGlmIChhcmluZm8tPmZsYWdzICYgQVI5MTcwX1RYX0ZMQUdfV0FJVF9GT1JfQUNLKSB7CiAJCWFyaW5mby0+dGltZW91dCA9IGppZmZpZXMgKwogCQkJCSAgbXNlY3NfdG9famlmZmllcyhBUjkxNzBfVFhfVElNRU9VVCk7CkBAIC00MjAsNiArNTI1LDM4IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIGFyOTE3MF9oYW5kbGVfYmxvY2tfYWNrKHN0cnVjdCBhcjkxNzAgKmFyLCB1MTYgY291bnQsIHUxNiByKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm87CisKKwl3aGlsZSAoY291bnQpIHsKKwkJc2tiID0gYXI5MTcwX2dldF9xdWV1ZWRfc2tiKGFyLCBOVUxMLCAmYXItPnR4X3N0YXR1c19hbXBkdSwgcik7CisJCWlmICghc2tiKQorCQkJYnJlYWs7CisKKwkJdHhpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXModHhpbmZvKTsKKworCQkvKiBGSVhNRTogbWF5YmUgbW9yZSA/ICovCisJCXR4aW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gMTsKKworCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgYXI5MTcwX3R4X2NvbnRyb2wpKTsKKwkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGFyLT5odywgc2tiKTsKKwkJY291bnQtLTsKKwl9CisKKyNpZmRlZiBBUjkxNzBfVFhBR0dfREVCVUcKKwlpZiAoY291bnQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBnb3QgJWQgbW9yZSBmYWlsZWQgbXBkdXMsIGJ1dCBubyBtb3JlICIKKwkJICAgICAgICJzdWl0YWJsZSBmcmFtZXMgbGVmdCBpbiB0eF9zdGF0dXMgcXVldWUuXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgY291bnQpOworCisJCWFyOTE3MF9kdW1wX3R4X3N0YXR1c19hbXBkdShhcik7CisJfQorI2VuZGlmIC8qIEFSOTE3MF9UWEFHR19ERUJVRyAqLworfQorCiAvKgogICogVGhpcyB3b3JrZXIgdHJpZXMgdG8ga2VlcHMgYW4gbWFpbnRhaW4gdHhfc3RhdHVzIHF1ZXVlcy4KICAqIFNvIHdlIGNhbiBndWFyYW50ZWUgdGhhdCBpbmNvbWluZyB0eF9zdGF0dXMgcmVwb3J0cyBhcmUKQEAgLTQ1NiwxMCArNTkzLDE0IEBACiAJCQlyZXNjaGVkID0gdHJ1ZTsKIAl9CiAKLQlpZiAocmVzY2hlZCkKLQkJcXVldWVfZGVsYXllZF93b3JrKGFyLT5ody0+d29ya3F1ZXVlLAotCQkJCSAgICZhci0+dHhfamFuaXRvciwKLQkJCQkgICBtc2Vjc190b19qaWZmaWVzKEFSOTE3MF9KQU5JVE9SX0RFTEFZKSk7CisJYXI5MTcwX3R4X2Zha2VfYW1wZHVfc3RhdHVzKGFyKTsKKworCWlmICghcmVzY2hlZCkKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHcsCisJCQkJICAgICAmYXItPnR4X2phbml0b3IsCisJCQkJICAgICBtc2Vjc190b19qaWZmaWVzKEFSOTE3MF9KQU5JVE9SX0RFTEFZKSk7CiB9CiAKIHZvaWQgYXI5MTcwX2hhbmRsZV9jb21tYW5kX3Jlc3BvbnNlKHN0cnVjdCBhcjkxNzAgKmFyLCB2b2lkICpidWYsIHUzMiBsZW4pCkBAIC01MDksNyArNjUwLDcgQEAKIAkJICogcHJlLVRCVFQgZXZlbnQKIAkJICovCiAJCWlmIChhci0+dmlmICYmIGFyLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCQlxdWV1ZV93b3JrKGFyLT5ody0+d29ya3F1ZXVlLCAmYXItPmJlYWNvbl93b3JrKTsKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKGFyLT5odywgJmFyLT5iZWFjb25fd29yayk7CiAJCWJyZWFrOwogCiAJY2FzZSAweGMyOgpAQCAtNTI4LDggKzY2OSwxNSBAQAogCQlicmVhazsKIAogCWNhc2UgMHhjNDoKKwkJLyogQmxvY2tBQ0sgYml0bWFwICovCisJCWJyZWFrOworCiAJY2FzZSAweGM1OgogCQkvKiBCbG9ja0FDSyBldmVudHMgKi8KKwkJYXI5MTcwX2hhbmRsZV9ibG9ja19hY2soYXIsCisJCQkJCWxlMTZfdG9fY3B1KGNtZC0+YmFfZmFpbF9jbnQuZmFpbGVkKSwKKwkJCQkJbGUxNl90b19jcHUoY21kLT5iYV9mYWlsX2NudC5yYXRlKSk7CisJCWFyOTE3MF90eF9mYWtlX2FtcGR1X3N0YXR1cyhhcik7CiAJCWJyZWFrOwogCiAJY2FzZSAweGM2OgpAQCAtOTE3LDggKzEwNjUsMTAgQEAKIAkJYXI5MTcwX3J4X3BoeV9zdGF0dXMoYXIsIHBoeSwgJnN0YXR1cyk7CiAKIAlza2IgPSBhcjkxNzBfcnhfY29weV9kYXRhKGJ1ZiwgbXBkdV9sZW4pOwotCWlmIChsaWtlbHkoc2tiKSkKLQkJaWVlZTgwMjExX3J4X2lycXNhZmUoYXItPmh3LCBza2IsICZzdGF0dXMpOworCWlmIChsaWtlbHkoc2tiKSkgeworCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKwkJaWVlZTgwMjExX3J4X2lycXNhZmUoYXItPmh3LCBza2IpOworCX0KIH0KIAogdm9pZCBhcjkxNzBfcngoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xMDgyLDggKzEyMzIsNiBAQAogCiAJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKIAotCWFyLT5maWx0ZXJfY2hhbmdlZCA9IDA7Ci0KIAkvKiByZWluaXRpYWxpemUgcXVldWVzIHN0YXRpc3RpY3MgKi8KIAltZW1zZXQoJmFyLT50eF9zdGF0cywgMCwgc2l6ZW9mKGFyLT50eF9zdGF0cykpOwogCWZvciAoaSA9IDA7IGkgPCBfX0FSOTE3MF9OVU1fVFhROyBpKyspCkBAIC0xMDk2LDYgKzEyNDQsMTAgQEAKIAlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZlszXSwgMiwgMywgICAgIDcsIDQ3KTsgLyogVk9JQ0UgKi8KIAlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZls0XSwgMiwgMywgICAgIDcsICAwKTsgLyogU1BFQ0lBTCAqLwogCisJLyogc2V0IHNhbmUgQU1QRFUgZGVmYXVsdHMgKi8KKwlhci0+Z2xvYmFsX2FtcGR1X2RlbnNpdHkgPSA2OworCWFyLT5nbG9iYWxfYW1wZHVfZmFjdG9yID0gMzsKKwogCWFyLT5iYWRfaHdfbmFnZ2VyID0gamlmZmllczsKIAogCWVyciA9IGFyLT5vcGVuKGFyKTsKQEAgLTExMzgsMTEgKzEyOTAsMTIgQEAKIAlpZiAoSVNfU1RBUlRFRChhcikpCiAJCWFyLT5zdGF0ZSA9IEFSOTE3MF9JRExFOwogCi0JZmx1c2hfd29ya3F1ZXVlKGFyLT5ody0+d29ya3F1ZXVlKTsKLQogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYXItPnR4X2phbml0b3IpOwotCWNhbmNlbF93b3JrX3N5bmMoJmFyLT5maWx0ZXJfY29uZmlnX3dvcmspOworI2lmZGVmIENPTkZJR19BUjkxNzBfTEVEUworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYXItPmxlZF93b3JrKTsKKyNlbmRpZgogCWNhbmNlbF93b3JrX3N5bmMoJmFyLT5iZWFjb25fd29yayk7CisKIAltdXRleF9sb2NrKCZhci0+bXV0ZXgpOwogCiAJaWYgKElTX0FDQ0VQVElOR19DTUQoYXIpKSB7CkBAIC0xMTU3LDkgKzEzMTAsNDAgQEAKIAkJc2tiX3F1ZXVlX3B1cmdlKCZhci0+dHhfcGVuZGluZ1tpXSk7CiAJCXNrYl9xdWV1ZV9wdXJnZSgmYXItPnR4X3N0YXR1c1tpXSk7CiAJfQorCXNrYl9xdWV1ZV9wdXJnZSgmYXItPnR4X3N0YXR1c19hbXBkdSk7CisKIAltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CiB9CiAKK3N0YXRpYyB2b2lkIGFyOTE3MF90eF9pbmRpY2F0ZV9pbW1iYShzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgYXI5MTcwX3R4X2NvbnRyb2wgKnR4YyA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKworCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19JTU1fQU1QRFUpOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfdHhfY29weV9waHkoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpkc3QsCisJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNyYykKK3sKKwlzdHJ1Y3QgYXI5MTcwX3R4X2NvbnRyb2wgKmRzdF90eGMsICpzcmNfdHhjOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqZHN0X2luZm8sICpzcmNfaW5mbzsKKwlzdHJ1Y3QgYXI5MTcwX3R4X2luZm8gKmRzdF9hcmluZm8sICpzcmNfYXJpbmZvOworCisJc3JjX3R4YyA9ICh2b2lkICopIHNyYy0+ZGF0YTsKKwlzcmNfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc3JjKTsKKwlzcmNfYXJpbmZvID0gKHZvaWQgKikgc3JjX2luZm8tPnJhdGVfZHJpdmVyX2RhdGE7CisKKwlkc3RfdHhjID0gKHZvaWQgKikgZHN0LT5kYXRhOworCWRzdF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihkc3QpOworCWRzdF9hcmluZm8gPSAodm9pZCAqKSBkc3RfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKKworCWRzdF90eGMtPnBoeV9jb250cm9sID0gc3JjX3R4Yy0+cGh5X2NvbnRyb2w7CisKKwkvKiBzYW1lIE1DUyBmb3IgdGhlIHdob2xlIGFnZ3JlZ2F0ZSAqLworCW1lbWNweShkc3RfaW5mby0+ZHJpdmVyX3JhdGVzLCBzcmNfaW5mby0+ZHJpdmVyX3JhdGVzLAorCSAgICAgICBzaXplb2YoZHN0X2luZm8tPmRyaXZlcl9yYXRlcykpOworfQorCiBzdGF0aWMgaW50IGFyOTE3MF90eF9wcmVwYXJlKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CkBAIC0xMjI4LDYgKzE0MTIsNyBAQAogCiAJCQl0eGMtPm1hY19jb250cm9sIHw9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfQUdHUik7CiAJCQlhcmluZm8tPmZsYWdzID0gQVI5MTcwX1RYX0ZMQUdfQkxPQ0tfQUNLOworCiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0xMzU4LDYgKzE1NDMsMTU5IEBACiAJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihjaGFpbnMgPDwgQVI5MTcwX1RYX1BIWV9UWENIQUlOX1NISUZUKTsKIH0KIAorc3RhdGljIGJvb2wgYXI5MTcwX3R4X2FtcGR1KHN0cnVjdCBhcjkxNzAgKmFyKQoreworCXN0cnVjdCBza19idWZmX2hlYWQgYWdnOworCXN0cnVjdCBhcjkxNzBfc3RhX3RpZCAqdGlkX2luZm8gPSBOVUxMLCAqdG1wOworCXN0cnVjdCBza19idWZmICpza2IsICpmaXJzdCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFncywgZjI7CisJdW5zaWduZWQgaW50IGkgPSAwOworCXUxNiBzZXEsIHF1ZXVlLCB0bXBzc247CisJYm9vbCBydW4gPSBmYWxzZTsKKworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFnZyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXItPnR4X2FtcGR1X2xpc3RfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZhci0+dHhfYW1wZHVfbGlzdCkpIHsKKyNpZmRlZiBBUjkxNzBfVFhBR0dfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhZ2dyZWdhdGlvbiBsaXN0IGlzIGVtcHR5LlxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworI2VuZGlmIC8qIEFSOTE3MF9UWEFHR19ERUJVRyAqLworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRpZF9pbmZvLCB0bXAsICZhci0+dHhfYW1wZHVfbGlzdCwgbGlzdCkgeworCQlpZiAodGlkX2luZm8tPnN0YXRlICE9IEFSOTE3MF9USURfU1RBVEVfQ09NUExFVEUpIHsKKyNpZmRlZiBBUjkxNzBfVFhBR0dfREVCVUcKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGFuZ2xpbmcgYWdncmVnYXRpb24gZW50cnkhXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworI2VuZGlmIC8qIEFSOTE3MF9UWEFHR19ERUJVRyAqLworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKytpID4gNjQpIHsKKyNpZmRlZiBBUjkxNzBfVFhBR0dfREVCVUcKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZW5vdWdoIGZyYW1lcyBhZ2dyZWdhdGVkLlxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKyNlbmRpZiAvKiBBUjkxNzBfVFhBR0dfREVCVUcgKi8KKwkJCWJyZWFrOworCQl9CisKKwkJcXVldWUgPSBUSURfVE9fV01FX0FDKHRpZF9pbmZvLT50aWQpOworCisJCWlmIChza2JfcXVldWVfbGVuKCZhci0+dHhfcGVuZGluZ1txdWV1ZV0pID49CisJCSAgICBBUjkxNzBfTlVNX1RYX0FHR19NQVgpIHsKKyNpZmRlZiBBUjkxNzBfVFhBR0dfREVCVUcKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcXVldWUgJWQgZnVsbC5cbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgcXVldWUpOworI2VuZGlmIC8qIEFSOTE3MF9UWEFHR19ERUJVRyAqLworCQkJY29udGludWU7CisJCX0KKworCQlsaXN0X2RlbF9pbml0KCZ0aWRfaW5mby0+bGlzdCk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnRpZF9pbmZvLT5xdWV1ZS5sb2NrLCBmMik7CisJCXRtcHNzbiA9IHNlcSA9IHRpZF9pbmZvLT5zc247CisJCWZpcnN0ID0gc2tiX3BlZWsoJnRpZF9pbmZvLT5xdWV1ZSk7CisKKwkJaWYgKGxpa2VseShmaXJzdCkpCisJCQl0bXBzc24gPSBhcjkxNzBfZ2V0X3NlcShmaXJzdCk7CisKKwkJaWYgKHVubGlrZWx5KHRtcHNzbiAhPSBzZXEpKSB7CisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNzbiBtaXNtYXRjaCBbJWQgIT0gJWRdXG4uIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBzZXEsIHRtcHNzbik7CisjZW5kaWYgLyogQVI5MTcwX1RYQUdHX0RFQlVHICovCisJCQl0aWRfaW5mby0+c3NuID0gdG1wc3NuOworCQl9CisKKyNpZmRlZiBBUjkxNzBfVFhBR0dfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBnZW5lcmF0ZSBBLU1QRFUgZm9yIHRpZDolZCBzc246JWQgd2l0aCAiCisJCSAgICAgICAiJWQgcXVldWVkIGZyYW1lcy5cbiIsIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksCisJCSAgICAgICB0aWRfaW5mby0+dGlkLCB0aWRfaW5mby0+c3NuLAorCQkgICAgICAgc2tiX3F1ZXVlX2xlbigmdGlkX2luZm8tPnF1ZXVlKSk7CisJCV9fYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJnRpZF9pbmZvLT5xdWV1ZSk7CisjZW5kaWYgLyogQVI5MTcwX1RYQUdHX0RFQlVHICovCisKKwkJd2hpbGUgKChza2IgPSBza2JfcGVlaygmdGlkX2luZm8tPnF1ZXVlKSkpIHsKKwkJCWlmICh1bmxpa2VseShhcjkxNzBfZ2V0X3NlcShza2IpICE9IHNlcSkpCisJCQkJYnJlYWs7CisKKwkJCV9fc2tiX3VubGluayhza2IsICZ0aWRfaW5mby0+cXVldWUpOworCQkJdGlkX2luZm8tPnNzbiA9IHNlcSA9IEdFVF9ORVhUX1NFUShzZXEpOworCisJCQlpZiAodW5saWtlbHkoc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikgIT0gcXVldWUpKSB7CisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0aWQ6JWQocTolZCkgcXVldWU6JWQgIgorCQkJCSAgICAgICAiIW1hdGNoLlxuIiwgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwKKwkJCQkgICAgICAgdGlkX2luZm8tPnRpZCwKKwkJCQkgICAgICAgVElEX1RPX1dNRV9BQyh0aWRfaW5mby0+dGlkKSwKKwkJCQkgICAgICAgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOworI2VuZGlmIC8qIEFSOTE3MF9UWEFHR19ERUJVRyAqLworCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHVubGlrZWx5KGZpcnN0ID09IHNrYikpIHsKKwkJCQlhcjkxNzBfdHhfcHJlcGFyZV9waHkoYXIsIHNrYik7CisJCQkJX19za2JfcXVldWVfdGFpbCgmYWdnLCBza2IpOworCQkJCWZpcnN0ID0gc2tiOworCQkJfSBlbHNlIHsKKwkJCQlhcjkxNzBfdHhfY29weV9waHkoYXIsIHNrYiwgZmlyc3QpOworCQkJCV9fc2tiX3F1ZXVlX3RhaWwoJmFnZywgc2tiKTsKKwkJCX0KKworCQkJaWYgKHVubGlrZWx5KHNrYl9xdWV1ZV9sZW4oJmFnZykgPT0KKwkJCSAgICBBUjkxNzBfTlVNX1RYX0FHR19NQVgpKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmdGlkX2luZm8tPnF1ZXVlKSkKKwkJCXRpZF9pbmZvLT5hY3RpdmUgPSBmYWxzZTsKKwkJZWxzZQorCQkJbGlzdF9hZGRfdGFpbCgmdGlkX2luZm8tPmxpc3QsCisJCQkJICAgICAgJmFyLT50eF9hbXBkdV9saXN0KTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWRfaW5mby0+cXVldWUubG9jaywgZjIpOworCisJCWlmICh1bmxpa2VseShza2JfcXVldWVfZW1wdHkoJmFnZykpKSB7CisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHF1ZXVlZCBlbXB0eSBsaXN0IVxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKyNlbmRpZiAvKiBBUjkxNzBfVFhBR0dfREVCVUcgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogdGVsbCB0aGUgRlcvSFcgdGhhdCB0aGlzIGlzIHRoZSBsYXN0IGZyYW1lLAorCQkgKiB0aGF0IHdheSBpdCB3aWxsIHdhaXQgZm9yIHRoZSBpbW1lZGlhdGUgYmxvY2sgYWNrLgorCQkgKi8KKwkJaWYgKGxpa2VseShza2JfcGVla190YWlsKCZhZ2cpKSkKKwkJCWFyOTE3MF90eF9pbmRpY2F0ZV9pbW1iYShhciwgc2tiX3BlZWtfdGFpbCgmYWdnKSk7CisKKyNpZmRlZiBBUjkxNzBfVFhBR0dfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBnZW5lcmF0ZWQgQS1NUERVIGxvb2tzIGxpa2UgdGhpczpcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKwkJX19hcjkxNzBfZHVtcF90eHF1ZXVlKGFyLCAmYWdnKTsKKyNlbmRpZiAvKiBBUjkxNzBfVFhBR0dfREVCVUcgKi8KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrLCBmbGFncyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9wZW5kaW5nW3F1ZXVlXS5sb2NrLCBmbGFncyk7CisJCXNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KCZhZ2csICZhci0+dHhfcGVuZGluZ1txdWV1ZV0pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfcGVuZGluZ1txdWV1ZV0ubG9jaywgZmxhZ3MpOworCQlydW4gPSB0cnVlOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrLCBmbGFncyk7CisJfQorCitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9hbXBkdV9saXN0X2xvY2ssIGZsYWdzKTsKKwlfX3NrYl9xdWV1ZV9wdXJnZSgmYWdnKTsKKworCXJldHVybiBydW47Cit9CisKIHN0YXRpYyB2b2lkIGFyOTE3MF90eChzdHJ1Y3QgYXI5MTcwICphcikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMTM4MiwxMSArMTcyMCwxNyBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBxdWV1ZSAlZCBmdWxsXG4iLAogCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGkpOwogCi0JCQlfX2FyOTE3MF9kdW1wX3R4c3RhdHMoYXIpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgInN0dWNrIGZyYW1lczogPT09PiBcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzdHVjayBmcmFtZXM6ID09PT4gXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOwogCQkJYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJmFyLT50eF9wZW5kaW5nW2ldKTsKIAkJCWFyOTE3MF9kdW1wX3R4cXVldWUoYXIsICZhci0+dHhfc3RhdHVzW2ldKTsKICNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KKworI2lmZGVmIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN0b3AgcXVldWUgJWRcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgaSk7CisJCQlfX2FyOTE3MF9kdW1wX3R4c3RhdHMoYXIpOworI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHICovCiAJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShhci0+aHcsIGkpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKIAkJCWNvbnRpbnVlOwpAQCAtMTQwMSw4ICsxNzQ1LDYgQEAKIAkJCSAgICAgICAicmVtYWluaW5nIHNsb3RzOiVkLCBuZWVkZWQ6JWRcbiIsCiAJCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgaSwgcmVtYWluaW5nX3NwYWNlLAogCQkJICAgICAgIGZyYW1lcyk7Ci0KLQkJCWFyOTE3MF9kdW1wX3R4c3RhdHMoYXIpOwogI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwogCQkJZnJhbWVzID0gcmVtYWluaW5nX3NwYWNlOwogCQl9CkBAIC0xNDMwLDYgKzE3NzIsOSBAQAogCQkJYXJpbmZvLT50aW1lb3V0ID0gamlmZmllcyArCiAJCQkJCSAgbXNlY3NfdG9famlmZmllcyhBUjkxNzBfVFhfVElNRU9VVCk7CiAKKwkJCWlmIChhcmluZm8tPmZsYWdzID09IEFSOTE3MF9UWF9GTEFHX0JMT0NLX0FDSykKKwkJCQlhci0+dHhfYW1wZHVfcGVuZGluZysrOworCiAjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNlbmQgZnJhbWUgcTolZCA9PlxuIiwKIAkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBpKTsKQEAgLTE0MzgsNiArMTc4Myw5IEBACiAKIAkJCWVyciA9IGFyLT50eChhciwgc2tiKTsKIAkJCWlmICh1bmxpa2VseShlcnIpKSB7CisJCQkJaWYgKGFyaW5mby0+ZmxhZ3MgPT0gQVI5MTcwX1RYX0ZMQUdfQkxPQ0tfQUNLKQorCQkJCQlhci0+dHhfYW1wZHVfcGVuZGluZy0tOworCiAJCQkJZnJhbWVzX2ZhaWxlZCsrOwogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQl9IGVsc2UgewpAQCAtMTQ1OSwyMiArMTgwNywxMTMgQEAKIAogCQlpZiAodW5saWtlbHkoZnJhbWVzX2ZhaWxlZCkpIHsKICNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZnJhbWVzIGZhaWxlZCA9PlxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZnJhbWVzIGZhaWxlZCAlZCA9PlxuIiwKIAkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBmcmFtZXNfZmFpbGVkKTsKICNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KIAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CiAJCQlhci0+dHhfc3RhdHNbaV0ubGVuIC09IGZyYW1lc19mYWlsZWQ7CiAJCQlhci0+dHhfc3RhdHNbaV0uY291bnQgLT0gZnJhbWVzX2ZhaWxlZDsKKyNpZmRlZiBBUjkxNzBfUVVFVUVfU1RPUF9ERUJVRworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3YWtlIHF1ZXVlICVkXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGkpOworCQkJX19hcjkxNzBfZHVtcF90eHN0YXRzKGFyKTsKKyNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfU1RPUF9ERUJVRyAqLwogCQkJaWVlZTgwMjExX3dha2VfcXVldWUoYXItPmh3LCBpKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CiAJCX0KIAl9CiAKLQlpZiAoc2NoZWR1bGVfZ2FyYmFnZWNvbGxlY3RvcikKLQkJcXVldWVfZGVsYXllZF93b3JrKGFyLT5ody0+d29ya3F1ZXVlLAotCQkJCSAgICZhci0+dHhfamFuaXRvciwKLQkJCQkgICBtc2Vjc190b19qaWZmaWVzKEFSOTE3MF9KQU5JVE9SX0RFTEFZKSk7CisJaWYgKCFzY2hlZHVsZV9nYXJiYWdlY29sbGVjdG9yKQorCQlyZXR1cm47CisKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGFyLT5odywKKwkJCQkgICAgICZhci0+dHhfamFuaXRvciwKKwkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX0pBTklUT1JfREVMQVkpKTsKK30KKworc3RhdGljIGJvb2wgYXI5MTcwX3R4X2FtcGR1X3F1ZXVlKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpbmZvOworCXN0cnVjdCBhcjkxNzBfc3RhX2luZm8gKnN0YV9pbmZvOworCXN0cnVjdCBhcjkxNzBfc3RhX3RpZCAqYWdnOworCXN0cnVjdCBza19idWZmICppdGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGYyOworCXVuc2lnbmVkIGludCBtYXg7CisJdTE2IHRpZCwgc2VxLCBxc2VxOworCWJvb2wgcnVuID0gZmFsc2UsIHF1ZXVlID0gZmFsc2U7CisKKwl0aWQgPSBhcjkxNzBfZ2V0X3RpZChza2IpOworCXNlcSA9IGFyOTE3MF9nZXRfc2VxKHNrYik7CisJdHhpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0YV9pbmZvID0gKHZvaWQgKikgdHhpbmZvLT5jb250cm9sLnN0YS0+ZHJ2X3ByaXY7CisJYWdnID0gJnN0YV9pbmZvLT5hZ2dbdGlkXTsKKwltYXggPSBzdGFfaW5mby0+YW1wZHVfbWF4X2xlbjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrLCBmbGFncyk7CisKKwlpZiAodW5saWtlbHkoYWdnLT5zdGF0ZSAhPSBBUjkxNzBfVElEX1NUQVRFX0NPTVBMRVRFKSkgeworI2lmZGVmIEFSOTE3MF9UWEFHR19ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEJsb2NrQUNLIHNlc3Npb24gbm90IGZ1bGx5IGluaXRpYWxpemVkICIKKwkJICAgICAgICJmb3IgRVNTOiVwTSB0aWQ6JWQgc3RhdGU6JWQuXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgYWdnLT5hZGRyLCBhZ2ctPnRpZCwKKwkJICAgICAgIGFnZy0+c3RhdGUpOworI2VuZGlmIC8qIEFSOTE3MF9UWEFHR19ERUJVRyAqLworCQlnb3RvIGVycl91bmxvY2s7CisJfQorCisJaWYgKCFhZ2ctPmFjdGl2ZSkgeworCQlhZ2ctPmFjdGl2ZSA9IHRydWU7CisJCWFnZy0+c3NuID0gc2VxOworCQlxdWV1ZSA9IHRydWU7CisJfQorCisJLyogY2hlY2sgaWYgc2VxIGlzIHdpdGhpbiB0aGUgQkEgd2luZG93ICovCisJaWYgKHVubGlrZWx5KCFCQVdfV0lUSElOKGFnZy0+c3NuLCBtYXgsIHNlcSkpKSB7CisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZnJhbWUgd2l0aCB0aWQ6JWQgc2VxOiVkIGRvZXMgbm90ICIKKwkJICAgICAgICJmaXQgaW50byBCQSB3aW5kb3cgKCVkIC0gJWQpXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgdGlkLCBzZXEsIGFnZy0+c3NuLAorCQkgICAgICAgKGFnZy0+c3NuICsgbWF4KSAmIDB4ZmZmKTsKKyNlbmRpZiAvKiBBUjkxNzBfVFhBR0dfREVCVUcgKi8KKwkJZ290byBlcnJfdW5sb2NrOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZ2ctPnF1ZXVlLmxvY2ssIGYyKTsKKworCXNrYl9xdWV1ZV9yZXZlcnNlX3dhbGsoJmFnZy0+cXVldWUsIGl0ZXIpIHsKKwkJcXNlcSA9IGFyOTE3MF9nZXRfc2VxKGl0ZXIpOworCisJCWlmIChHRVRfTkVYVF9TRVEocXNlcSkgPT0gc2VxKSB7CisJCQlfX3NrYl9xdWV1ZV9hZnRlcigmYWdnLT5xdWV1ZSwgaXRlciwgc2tiKTsKKwkJCWdvdG8gcXVldWVkOworCQl9CisJfQorCisJX19za2JfcXVldWVfaGVhZCgmYWdnLT5xdWV1ZSwgc2tiKTsKKworcXVldWVkOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFnZy0+cXVldWUubG9jaywgZjIpOworCisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBuZXcgYWdncmVnYXRlICVwIHF1ZXVlZC5cbiIsCisJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIHNrYik7CisJX19hcjkxNzBfZHVtcF90eHF1ZXVlKGFyLCAmYWdnLT5xdWV1ZSk7CisjZW5kaWYgLyogQVI5MTcwX1RYQUdHX0RFQlVHICovCisKKwlpZiAoc2tiX3F1ZXVlX2xlbigmYWdnLT5xdWV1ZSkgPj0gQVI5MTcwX05VTV9UWF9BR0dfTUFYKQorCQlydW4gPSB0cnVlOworCisJaWYgKHF1ZXVlKQorCQlsaXN0X2FkZF90YWlsKCZhZ2ctPmxpc3QsICZhci0+dHhfYW1wZHVfbGlzdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJ1bjsKKworZXJyX3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrLCBmbGFncyk7CisJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIGludCBhcjkxNzBfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xNDkwLDggKzE5MjksMTAgQEAKIAogCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgewotCQkvKiBkcm9wIGZyYW1lLCB3ZSBkbyBub3QgYWxsb3cgVFggQS1NUERVIGFnZ3JlZ2F0aW9uIHlldC4gKi8KLQkJZ290byBlcnJfZnJlZTsKKwkJYm9vbCBydW4gPSBhcjkxNzBfdHhfYW1wZHVfcXVldWUoYXIsIHNrYik7CisKKwkJaWYgKHJ1biB8fCAhYXItPnR4X2FtcGR1X3BlbmRpbmcpCisJCQlhcjkxNzBfdHhfYW1wZHUoYXIpOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGludCBxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCkBAIC0xNTI5LDggKzE5NzAsNyBAQAogCX0KIAogCWFyLT5jdXJfZmlsdGVyID0gMDsKLQlhci0+d2FudF9maWx0ZXIgPSBBUjkxNzBfTUFDX1JFR19GVEZfREVGQVVMVFM7Ci0JZXJyID0gYXI5MTcwX3VwZGF0ZV9mcmFtZV9maWx0ZXIoYXIpOworCWVyciA9IGFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKGFyLCBBUjkxNzBfTUFDX1JFR19GVEZfREVGQVVMVFMpOwogCWlmIChlcnIpCiAJCWdvdG8gdW5sb2NrOwogCkBAIC0xNTQ4LDggKzE5ODgsNyBAQAogCiAJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKIAlhci0+dmlmID0gTlVMTDsKLQlhci0+d2FudF9maWx0ZXIgPSAwOwotCWFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKGFyKTsKKwlhcjkxNzBfdXBkYXRlX2ZyYW1lX2ZpbHRlcihhciwgMCk7CiAJYXI5MTcwX3NldF9iZWFjb25fdGltZXJzKGFyKTsKIAlkZXZfa2ZyZWVfc2tiKGFyLT5iZWFjb24pOwogCWFyLT5iZWFjb24gPSBOVUxMOwpAQCAtMTU5MiwxMiArMjAzMSw2IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpIHsKLQkJZXJyID0gYXI5MTcwX3NldF9iZWFjb25fdGltZXJzKGFyKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCX0KLQogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpIHsKIAogCQkvKiBhZGp1c3Qgc2xvdCB0aW1lIGZvciA1IEdIeiAqLwpAQCAtMTYyMSw0OCArMjA1NCwzNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGFyOTE3MF9zZXRfZmlsdGVycyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdTY0IGFyOTE3MF9vcF9wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IG1jX2NvdW50LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQogewotCXN0cnVjdCBhcjkxNzAgKmFyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhcjkxNzAsCi0JCQkJCSBmaWx0ZXJfY29uZmlnX3dvcmspOwotCWludCBlcnI7CisJdTY0IG1jaGFzaDsKKwlpbnQgaTsKIAotCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRChhcikpKQotCQlyZXR1cm4gOworCS8qIGFsd2F5cyBnZXQgYnJvYWRjYXN0IGZyYW1lcyAqLworCW1jaGFzaCA9IDFVTEwgPDwgKDB4ZmYgPj4gMik7CiAKLQltdXRleF9sb2NrKCZhci0+bXV0ZXgpOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX01PREUsCi0JCQkgICAgICAgJmFyLT5maWx0ZXJfY2hhbmdlZCkpIHsKLQkJZXJyID0gYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShhcik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIHVubG9jazsKKwlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgeworCQlpZiAoV0FSTl9PTighbWNsaXN0KSkKKwkJCWJyZWFrOworCQltY2hhc2ggfD0gMVVMTCA8PCAobWNsaXN0LT5kbWlfYWRkcls1XSA+PiAyKTsKKwkJbWNsaXN0ID0gbWNsaXN0LT5uZXh0OwogCX0KIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX01VTFRJQ0FTVCwKLQkJCSAgICAgICAmYXItPmZpbHRlcl9jaGFuZ2VkKSkgewotCQllcnIgPSBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChhcik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIHVubG9jazsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFSOTE3MF9GSUxURVJfQ0hBTkdFRF9GUkFNRUZJTFRFUiwKLQkJCSAgICAgICAmYXItPmZpbHRlcl9jaGFuZ2VkKSkgewotCQllcnIgPSBhcjkxNzBfdXBkYXRlX2ZyYW1lX2ZpbHRlcihhcik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIHVubG9jazsKLQl9Ci0KLXVubG9jazoKLQltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisJcmV0dXJuIG1jaGFzaDsKIH0KIAogc3RhdGljIHZvaWQgYXI5MTcwX29wX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKm5ld19mbGFncywKLQkJCQkgICAgICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCkKKwkJCQkgICAgICAgdTY0IG11bHRpY2FzdCkKIHsKIAlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwogCisJaWYgKHVubGlrZWx5KCFJU19BQ0NFUFRJTkdfQ01EKGFyKSkpCisJCXJldHVybiA7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCiAJLyogbWFzayBzdXBwb3J0ZWQgZmxhZ3MgKi8KIAkqbmV3X2ZsYWdzICY9IEZJRl9BTExNVUxUSSB8IEZJRl9DT05UUk9MIHwgRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfAogCQkgICAgICBGSUZfUFJPTUlTQ19JTl9CU1MgfCBGSUZfRkNTRkFJTCB8IEZJRl9QTENQRkFJTDsKQEAgLTE2NzIsMjYgKzIwOTQsMTEgQEAKIAkgKiB0aGVuIGNoZWNraW5nIHRoZSBlcnJvciBmbGFncywgbGF0ZXIuCiAJICovCiAKLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9BTExNVUxUSSkgewotCQlpZiAoKm5ld19mbGFncyAmIEZJRl9BTExNVUxUSSkgewotCQkJYXItPndhbnRfbWNfaGFzaCA9IH4wVUxMOwotCQl9IGVsc2UgewotCQkJdTY0IG1jaGFzaDsKLQkJCWludCBpOworCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJICYmICpuZXdfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCisJCW11bHRpY2FzdCA9IH4wVUxMOwogCi0JCQkvKiBhbHdheXMgZ2V0IGJyb2FkY2FzdCBmcmFtZXMgKi8KLQkJCW1jaGFzaCA9IDFVTEwgPDwgKDB4ZmYgPj4gMik7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBtY19jb3VudDsgaSsrKSB7Ci0JCQkJaWYgKFdBUk5fT04oIW1jbGlzdCkpCi0JCQkJCWJyZWFrOwotCQkJCW1jaGFzaCB8PSAxVUxMIDw8IChtY2xpc3QtPmRtaV9hZGRyWzVdID4+IDIpOwotCQkJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKLQkJCX0KLQkJYXItPndhbnRfbWNfaGFzaCA9IG1jaGFzaDsKLQkJfQotCQlzZXRfYml0KEFSOTE3MF9GSUxURVJfQ0hBTkdFRF9NVUxUSUNBU1QsICZhci0+ZmlsdGVyX2NoYW5nZWQpOwotCX0KKwlpZiAobXVsdGljYXN0ICE9IGFyLT5jdXJfbWNfaGFzaCkKKwkJYXI5MTcwX3VwZGF0ZV9tdWx0aWNhc3QoYXIsIG11bHRpY2FzdCk7CiAKIAlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9DT05UUk9MKSB7CiAJCXUzMiBmaWx0ZXIgPSBBUjkxNzBfTUFDX1JFR19GVEZfUFNQT0xMIHwKQEAgLTE3MDIsMjQgKzIxMDksMjIgQEAKIAkJCSAgICAgQVI5MTcwX01BQ19SRUdfRlRGX0NGRV9BQ0s7CiAKIAkJaWYgKCpuZXdfZmxhZ3MgJiBGSUZfQ09OVFJPTCkKLQkJCWFyLT53YW50X2ZpbHRlciA9IGFyLT5jdXJfZmlsdGVyIHwgZmlsdGVyOworCQkJZmlsdGVyIHw9IGFyLT5jdXJfZmlsdGVyOwogCQllbHNlCi0JCQlhci0+d2FudF9maWx0ZXIgPSBhci0+Y3VyX2ZpbHRlciAmIH5maWx0ZXI7CisJCQlmaWx0ZXIgJj0gKH5hci0+Y3VyX2ZpbHRlcik7CiAKLQkJc2V0X2JpdChBUjkxNzBfRklMVEVSX0NIQU5HRURfRlJBTUVGSUxURVIsCi0JCQkmYXItPmZpbHRlcl9jaGFuZ2VkKTsKKwkJYXI5MTcwX3VwZGF0ZV9mcmFtZV9maWx0ZXIoYXIsIGZpbHRlcik7CiAJfQogCiAJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpIHsKIAkJYXItPnNuaWZmZXJfZW5hYmxlZCA9ICgoKm5ld19mbGFncykgJiBGSUZfUFJPTUlTQ19JTl9CU1MpICE9IDA7Ci0JCXNldF9iaXQoQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX01PREUsCi0JCQkmYXItPmZpbHRlcl9jaGFuZ2VkKTsKKwkJYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShhcik7CiAJfQogCi0JaWYgKGxpa2VseShJU19TVEFSVEVEKGFyKSkpCi0JCXF1ZXVlX3dvcmsoYXItPmh3LT53b3JrcXVldWUsICZhci0+ZmlsdGVyX2NvbmZpZ193b3JrKTsKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CiB9CiAKKwogc3RhdGljIHZvaWQgYXI5MTcwX29wX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLApAQCAtMTczNywxMSArMjE0MiwxNyBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGNoYW5nZWQgJiAoQlNTX0NIQU5HRURfQkVBQ09OIHwgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpKSB7CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkKKwkJYXItPmVuYWJsZV9iZWFjb24gPSBic3NfY29uZi0+ZW5hYmxlX2JlYWNvbjsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OKSB7CiAJCWVyciA9IGFyOTE3MF91cGRhdGVfYmVhY29uKGFyKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OworCX0KIAorCWlmIChjaGFuZ2VkICYgKEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEIHwgQlNTX0NIQU5HRURfQkVBQ09OIHwKKwkJICAgICAgIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpKSB7CiAJCWVyciA9IGFyOTE3MF9zZXRfYmVhY29uX3RpbWVycyhhcik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKQEAgLTE3NTQsMTIgKzIxNjUsNiBAQAogI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLwogCX0KIAotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCkgewotCQllcnIgPSBhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoYXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JfQotCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9IVCkgewogCQkvKiBUT0RPICovCiAJCWVyciA9IDA7CkBAIC0xOTI5LDYgKzIzMzQsNTAgQEAKIAkJCSAgICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OworCXN0cnVjdCBhcjkxNzBfc3RhX2luZm8gKnN0YV9pbmZvID0gKHZvaWQgKikgc3RhLT5kcnZfcHJpdjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTVEFfTk9USUZZX0FERDoKKwkJbWVtc2V0KHN0YV9pbmZvLCAwLCBzaXplb2YoKnN0YV9pbmZvKSk7CisKKwkJaWYgKCFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCisJCQlicmVhazsKKworCQlpZiAoc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eSA+IGFyLT5nbG9iYWxfYW1wZHVfZGVuc2l0eSkKKwkJCWFyLT5nbG9iYWxfYW1wZHVfZGVuc2l0eSA9IHN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHk7CisKKwkJaWYgKHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvciA8IGFyLT5nbG9iYWxfYW1wZHVfZmFjdG9yKQorCQkJYXItPmdsb2JhbF9hbXBkdV9mYWN0b3IgPSBzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3I7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSOTE3MF9OVU1fVElEOyBpKyspIHsKKwkJCXN0YV9pbmZvLT5hZ2dbaV0uc3RhdGUgPSBBUjkxNzBfVElEX1NUQVRFX1NIVVRET1dOOworCQkJc3RhX2luZm8tPmFnZ1tpXS5hY3RpdmUgPSBmYWxzZTsKKwkJCXN0YV9pbmZvLT5hZ2dbaV0uc3NuID0gMDsKKwkJCXN0YV9pbmZvLT5hZ2dbaV0ucmV0cnkgPSAwOworCQkJc3RhX2luZm8tPmFnZ1tpXS50aWQgPSBpOworCQkJSU5JVF9MSVNUX0hFQUQoJnN0YV9pbmZvLT5hZ2dbaV0ubGlzdCk7CisJCQlza2JfcXVldWVfaGVhZF9pbml0KCZzdGFfaW5mby0+YWdnW2ldLnF1ZXVlKTsKKwkJfQorCisJCXN0YV9pbmZvLT5hbXBkdV9tYXhfbGVuID0gMSA8PCAoMyArIHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3Rvcik7CisJCWJyZWFrOworCisJY2FzZSBTVEFfTk9USUZZX1JFTU9WRToKKwkJaWYgKCFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCisJCQlicmVhazsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVI5MTcwX05VTV9USUQ7IGkrKykgeworCQkJc3RhX2luZm8tPmFnZ1tpXS5zdGF0ZSA9IEFSOTE3MF9USURfU1RBVEVfSU5WQUxJRDsKKwkJCXNrYl9xdWV1ZV9wdXJnZSgmc3RhX2luZm8tPmFnZ1tpXS5xdWV1ZSk7CisJCX0KKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIGludCBhcjkxNzBfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMTk4NCwxOCArMjQzMyw2NSBAQAogCQkJICAgICAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbikKIHsKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OworCXN0cnVjdCBhcjkxNzBfc3RhX2luZm8gKnN0YV9pbmZvID0gKHZvaWQgKikgc3RhLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgYXI5MTcwX3N0YV90aWQgKnRpZF9pbmZvID0gJnN0YV9pbmZvLT5hZ2dbdGlkXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFtb2RwYXJhbV9odCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVDoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9hbXBkdV9saXN0X2xvY2ssIGZsYWdzKTsKKwkJaWYgKHRpZF9pbmZvLT5zdGF0ZSAhPSBBUjkxNzBfVElEX1NUQVRFX1NIVVRET1dOIHx8CisJCSAgICAhbGlzdF9lbXB0eSgmdGlkX2luZm8tPmxpc3QpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrLCBmbGFncyk7CisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogQS1NUERVIFtFU1M6WyVwTV0gdGlkOlslZF1dICIKKwkJCSAgICAgICAiaXMgaW4gYSB2ZXJ5IGJhZCBzdGF0ZSFcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBzdGEtPmFkZHIsIHRpZCk7CisjZW5kaWYgLyogQVI5MTcwX1RYQUdHX0RFQlVHICovCisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisKKwkJKnNzbiA9IHRpZF9pbmZvLT5zc247CisJCXRpZF9pbmZvLT5zdGF0ZSA9IEFSOTE3MF9USURfU1RBVEVfUFJPR1JFU1M7CisJCXRpZF9pbmZvLT5hY3RpdmUgPSBmYWxzZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X2FtcGR1X2xpc3RfbG9jaywgZmxhZ3MpOworCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShodywgc3RhLT5hZGRyLCB0aWQpOworCQlicmVhazsKKworCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUT1A6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrLCBmbGFncyk7CisJCXRpZF9pbmZvLT5zdGF0ZSA9IEFSOTE3MF9USURfU1RBVEVfU0hVVERPV047CisJCWxpc3RfZGVsX2luaXQoJnRpZF9pbmZvLT5saXN0KTsKKwkJdGlkX2luZm8tPmFjdGl2ZSA9IGZhbHNlOworCQlza2JfcXVldWVfcHVyZ2UoJnRpZF9pbmZvLT5xdWV1ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9hbXBkdV9saXN0X2xvY2ssIGZsYWdzKTsKKwkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShodywgc3RhLT5hZGRyLCB0aWQpOworCQlicmVhazsKKworCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOgorI2lmZGVmIEFSOTE3MF9UWEFHR19ERUJVRworCQlwcmludGsoS0VSTl9JTkZPICIlczogQS1NUERVIGZvciAlcE0gW3RpZDolZF0gT3BlcmF0aW9uYWwuXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBzdGEtPmFkZHIsIHRpZCk7CisjZW5kaWYgLyogQVI5MTcwX1RYQUdHX0RFQlVHICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrLCBmbGFncyk7CisJCXN0YV9pbmZvLT5hZ2dbdGlkXS5zdGF0ZSA9IEFSOTE3MF9USURfU1RBVEVfQ09NUExFVEU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9hbXBkdV9saXN0X2xvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVDoKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QOgotCQkvKgotCQkgKiBTb21ldGhpbmcgZ29lcyB3cm9uZyAtLSBSWCBsb2NrcyB1cAotCQkgKiBhZnRlciBhIHdoaWxlIG9mIHJlY2VpdmluZyBhZ2dyZWdhdGVkCi0JCSAqIGZyYW1lcyAtLSBub3QgZW5hYmxpbmcgZm9yIG5vdy4KLQkJICovCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJLyogSGFuZGxlZCBieSBmaXJtd2FyZSAqLworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGFyOTE3MF9vcHMgPSB7CkBAIC0yMDA1LDYgKzI1MDEsNyBAQAogCS5hZGRfaW50ZXJmYWNlCQk9IGFyOTE3MF9vcF9hZGRfaW50ZXJmYWNlLAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gYXI5MTcwX29wX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gYXI5MTcwX29wX2NvbmZpZywKKwkucHJlcGFyZV9tdWx0aWNhc3QJPSBhcjkxNzBfb3BfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBhcjkxNzBfb3BfY29uZmlndXJlX2ZpbHRlciwKIAkuY29uZl90eAkJPSBhcjkxNzBfY29uZl90eCwKIAkuYnNzX2luZm9fY2hhbmdlZAk9IGFyOTE3MF9vcF9ic3NfaW5mb19jaGFuZ2VkLApAQCAtMjA0NCwxNCArMjU0MSwxNiBAQAogCW11dGV4X2luaXQoJmFyLT5tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJmFyLT5jbWRsb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYXItPnR4X3N0YXRzX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZhci0+dHhfc3RhdHVzX2FtcGR1KTsKIAlmb3IgKGkgPSAwOyBpIDwgX19BUjkxNzBfTlVNX1RYUTsgaSsrKSB7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFyLT50eF9zdGF0dXNbaV0pOwogCQlza2JfcXVldWVfaGVhZF9pbml0KCZhci0+dHhfcGVuZGluZ1tpXSk7CiAJfQogCWFyOTE3MF9yeF9yZXNldF9yeF9tcGR1KGFyKTsKLQlJTklUX1dPUksoJmFyLT5maWx0ZXJfY29uZmlnX3dvcmssIGFyOTE3MF9zZXRfZmlsdGVycyk7CiAJSU5JVF9XT1JLKCZhci0+YmVhY29uX3dvcmssIGFyOTE3MF9uZXdfYmVhY29uKTsKIAlJTklUX0RFTEFZRURfV09SSygmYXItPnR4X2phbml0b3IsIGFyOTE3MF90eF9qYW5pdG9yKTsKKwlJTklUX0xJU1RfSEVBRCgmYXItPnR4X2FtcGR1X2xpc3QpOwogCiAJLyogYWxsIGh3IHN1cHBvcnRzIDIuNCBHSHosIHNvIHNldCBjaGFubmVsIHRvIDEgYnkgZGVmYXVsdCAqLwogCWFyLT5jaGFubmVsID0gJmFyOTE3MF8yZ2h6X2NoYW50YWJsZVswXTsKQEAgLTIwNjUsNiArMjU2NCwxMyBAQAogCQkJIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkJCSBJRUVFODAyMTFfSFdfTk9JU0VfREJNOwogCisJaWYgKG1vZHBhcmFtX2h0KSB7CisJCWFyLT5ody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OOworCX0gZWxzZSB7CisJCWFyOTE3MF9iYW5kXzJHSHouaHRfY2FwLmh0X3N1cHBvcnRlZCA9IGZhbHNlOworCQlhcjkxNzBfYmFuZF81R0h6Lmh0X2NhcC5odF9zdXBwb3J0ZWQgPSBmYWxzZTsKKwl9CisKIAlhci0+aHctPnF1ZXVlcyA9IF9fQVI5MTcwX05VTV9UWFE7CiAJYXItPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IDg7CiAJYXItPmh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfc3RhX2luZm8pOwpAQCAtMjA4NiwxMCArMjU5MiwxMSBAQAogewogI2RlZmluZSBSVwk4CS8qIG51bWJlciBvZiB3b3JkcyB0byByZWFkIGF0IG9uY2UgKi8KICNkZWZpbmUgUkIJKHNpemVvZih1MzIpICogUlcpCi0JREVDTEFSRV9NQUNfQlVGKG1idWYpOworCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9ICZhci0+Y29tbW9uLnJlZ3VsYXRvcnk7CiAJdTggKmVlcHJvbSA9ICh2b2lkICopJmFyLT5lZXByb207CiAJdTggKmFkZHIgPSBhci0+ZWVwcm9tLm1hY19hZGRyZXNzOwogCV9fbGUzMiBvZmZzZXRzW1JXXTsKKwl1bnNpZ25lZCBpbnQgcnhfc3RyZWFtcywgdHhfc3RyZWFtcywgdHhfcGFyYW1zID0gMDsKIAlpbnQgaSwgaiwgZXJyLCBiYW5kcyA9IDA7CiAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKGFyLT5lZXByb20pICYgMyk7CkBAIC0yMTI2LDYgKzI2MzMsMjAgQEAKIAkJYXItPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSAmYXI5MTcwX2JhbmRfNUdIejsKIAkJYmFuZHMrKzsKIAl9CisKKwlyeF9zdHJlYW1zID0gaHdlaWdodDgoYXItPmVlcHJvbS5yeF9tYXNrKTsKKwl0eF9zdHJlYW1zID0gaHdlaWdodDgoYXItPmVlcHJvbS50eF9tYXNrKTsKKworCWlmIChyeF9zdHJlYW1zICE9IHR4X3N0cmVhbXMpCisJCXR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfUlhfRElGRjsKKworCWlmICh0eF9zdHJlYW1zID49IDEgJiYgdHhfc3RyZWFtcyA8PSBJRUVFODAyMTFfSFRfTUNTX1RYX01BWF9TVFJFQU1TKQorCQl0eF9wYXJhbXMgPSAodHhfc3RyZWFtcyAtIDEpIDw8CisJCQkgICAgSUVFRTgwMjExX0hUX01DU19UWF9NQVhfU1RSRUFNU19TSElGVDsKKworCWFyOTE3MF9iYW5kXzJHSHouaHRfY2FwLm1jcy50eF9wYXJhbXMgfD0gdHhfcGFyYW1zOworCWFyOTE3MF9iYW5kXzVHSHouaHRfY2FwLm1jcy50eF9wYXJhbXMgfD0gdHhfcGFyYW1zOworCiAJLyoKIAkgKiBJIG1lYXN1cmVkIHRoaXMsIGEgYmFuZHN3aXRjaCB0YWtlcyByb3VnaGx5CiAJICogMTM1IG1zIGFuZCBhIGZyZXF1ZW5jeSBzd2l0Y2ggYWJvdXQgODAuCkBAIC0yMTM4LDggKzI2NTksOCBAQAogCWVsc2UKIAkJYXItPmh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gODAgKiAxMDAwOwogCi0JYXItPnJlZ3VsYXRvcnkuY3VycmVudF9yZCA9IGxlMTZfdG9fY3B1KGFyLT5lZXByb20ucmVnX2RvbWFpblswXSk7Ci0JYXItPnJlZ3VsYXRvcnkuY3VycmVudF9yZF9leHQgPSBsZTE2X3RvX2NwdShhci0+ZWVwcm9tLnJlZ19kb21haW5bMV0pOworCXJlZ3VsYXRvcnktPmN1cnJlbnRfcmQgPSBsZTE2X3RvX2NwdShhci0+ZWVwcm9tLnJlZ19kb21haW5bMF0pOworCXJlZ3VsYXRvcnktPmN1cnJlbnRfcmRfZXh0ID0gbGUxNl90b19jcHUoYXItPmVlcHJvbS5yZWdfZG9tYWluWzFdKTsKIAogCS8qIHNlY29uZCBwYXJ0IG9mIHdpcGh5IGluaXQgKi8KIAlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihhci0+aHcsIGFkZHIpOwpAQCAtMjE1MywxMSArMjY3NCwxMiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd2lwaHlfdG9faWVlZTgwMjExX2h3KHdpcGh5KTsKIAlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwogCi0JcmV0dXJuIGF0aF9yZWdfbm90aWZpZXJfYXBwbHkod2lwaHksIHJlcXVlc3QsICZhci0+cmVndWxhdG9yeSk7CisJcmV0dXJuIGF0aF9yZWdfbm90aWZpZXJfYXBwbHkod2lwaHksIHJlcXVlc3QsICZhci0+Y29tbW9uLnJlZ3VsYXRvcnkpOwogfQogCiBpbnQgYXI5MTcwX3JlZ2lzdGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9ICZhci0+Y29tbW9uLnJlZ3VsYXRvcnk7CiAJaW50IGVycjsKIAogCS8qIHRyeSB0byByZWFkIEVFUFJPTSwgaW5pdCBNQUMgYWRkciAqLwpAQCAtMjE2NSw3ICsyNjg3LDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXQ7CiAKLQllcnIgPSBhdGhfcmVnZF9pbml0KCZhci0+cmVndWxhdG9yeSwgYXItPmh3LT53aXBoeSwKKwllcnIgPSBhdGhfcmVnZF9pbml0KHJlZ3VsYXRvcnksIGFyLT5ody0+d2lwaHksCiAJCQkgICAgYXI5MTcwX3JlZ19ub3RpZmllcik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwpAQCAtMjE3NCw4ICsyNjk2LDggQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXQ7CiAKLQlpZiAoIWF0aF9pc193b3JsZF9yZWdkKCZhci0+cmVndWxhdG9yeSkpCi0JCXJlZ3VsYXRvcnlfaGludChhci0+aHctPndpcGh5LCBhci0+cmVndWxhdG9yeS5hbHBoYTIpOworCWlmICghYXRoX2lzX3dvcmxkX3JlZ2QocmVndWxhdG9yeSkpCisJCXJlZ3VsYXRvcnlfaGludChhci0+aHctPndpcGh5LCByZWd1bGF0b3J5LT5hbHBoYTIpOwogCiAJZXJyID0gYXI5MTcwX2luaXRfbGVkcyhhcik7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3BoeS5jCmluZGV4IGRmODZmNzAuLmIzZTVjZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9waHkuYwpAQCAtMzk2LDYgKzM5NiwxMzYgQEAKIAl7IDB4MWM5Mzg0LCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCB9CiB9OwogCisvKgorICogbG9vayB1cCBhIGNlcnRhaW4gcmVnaXN0ZXIgaW4gYXI1NDE2X3BoeV9pbml0W10gYW5kIHJldHVybiB0aGUgaW5pdC4gdmFsdWUKKyAqIGZvciB0aGUgYmFuZCBhbmQgYmFuZHdpZHRoIGdpdmVuLiBSZXR1cm4gMCBpZiByZWdpc3RlciBhZGRyZXNzIG5vdCBmb3VuZC4KKyAqLworc3RhdGljIHUzMiBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwodTMyIHJlZywgYm9vbCBpc18yZ2h6LCBib29sIGlzXzQwbWh6KQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFyNTQxNl9waHlfaW5pdCk7IGkrKykgeworCQlpZiAoYXI1NDE2X3BoeV9pbml0W2ldLnJlZyAhPSByZWcpCisJCQljb250aW51ZTsKKworCQlpZiAoaXNfMmdoeikgeworCQkJaWYgKGlzXzQwbWh6KQorCQkJCXJldHVybiBhcjU0MTZfcGh5X2luaXRbaV0uXzJnaHpfNDA7CisJCQllbHNlCisJCQkJcmV0dXJuIGFyNTQxNl9waHlfaW5pdFtpXS5fMmdoel8yMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChpc180MG1oeikKKwkJCQlyZXR1cm4gYXI1NDE2X3BoeV9pbml0W2ldLl81Z2h6XzQwOworCQkJZWxzZQorCQkJCXJldHVybiBhcjU0MTZfcGh5X2luaXRbaV0uXzVnaHpfMjA7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpbml0aWFsaXplIHNvbWUgcGh5IHJlZ3MgZnJvbSBlZXByb20gdmFsdWVzIGluIG1vZGFsX2hlYWRlcltdCisgKiBhY2MuIHRvIGJhbmQgYW5kIGJhbmR3aXRoCisgKi8KK3N0YXRpYyBpbnQgYXI5MTcwX2luaXRfcGh5X2Zyb21fZWVwcm9tKHN0cnVjdCBhcjkxNzAgKmFyLAorCQkJCWJvb2wgaXNfMmdoeiwgYm9vbCBpc180MG1oeikKK3sKKwlzdGF0aWMgY29uc3QgdTggeHBkMnBkWzE2XSA9IHsKKwkJMHgyLCAweDIsIDB4MiwgMHgxLCAweDIsIDB4MiwgMHg2LCAweDIsCisJCTB4MiwgMHgzLCAweDcsIDB4MiwgMHhCLCAweDIsIDB4MiwgMHgyCisJfTsKKwl1MzIgZGVmdmFsLCBuZXd2YWw7CisJLyogcG9pbnRlciB0byB0aGUgbW9kYWxfaGVhZGVyIGFjYy4gdG8gYmFuZCAqLworCXN0cnVjdCBhcjkxNzBfZWVwcm9tX21vZGFsICptID0gJmFyLT5lZXByb20ubW9kYWxfaGVhZGVyW2lzXzJnaHpdOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCS8qIGFudCBjb21tb24gY29udHJvbCAoaW5kZXggMCkgKi8KKwluZXd2YWwgPSBsZTMyX3RvX2NwdShtLT5hbnRDdHJsQ29tbW9uKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzU5NjQsIG5ld3ZhbCk7CisKKwkvKiBhbnQgY29udHJvbCBjaGFpbiAwIChpbmRleCAxKSAqLworCW5ld3ZhbCA9IGxlMzJfdG9fY3B1KG0tPmFudEN0cmxDaGFpblswXSk7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWM1OTYwLCBuZXd2YWwpOworCisJLyogYW50IGNvbnRyb2wgY2hhaW4gMiAoaW5kZXggMikgKi8KKwluZXd2YWwgPSBsZTMyX3RvX2NwdShtLT5hbnRDdHJsQ2hhaW5bMV0pOworCWFyOTE3MF9yZWd3cml0ZSgweDFjNzk2MCwgbmV3dmFsKTsKKworCS8qIFN3U2V0dGxlIChpbmRleCAzKSAqLworCWlmICghaXNfNDBtaHopIHsKKwkJZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM1ODQ0LAorCQkJCQkJCWlzXzJnaHosIGlzXzQwbWh6KTsKKwkJbmV3dmFsID0gKGRlZnZhbCAmIH4weDNmODApIHwKKwkJCSgobS0+c3dpdGNoU2V0dGxpbmcgJiAweDdmKSA8PCA3KTsKKwkJYXI5MTcwX3JlZ3dyaXRlKDB4MWM1ODQ0LCBuZXd2YWwpOworCX0KKworCS8qIGFkY0Rlc2lyZWQsIHBkYURlc2lyZWQgKGluZGV4IDQpICovCisJZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM1ODUwLCBpc18yZ2h6LCBpc180MG1oeik7CisJbmV3dmFsID0gKGRlZnZhbCAmIH4weGZmZmYpIHwgKCh1OCltLT5wZ2FEZXNpcmVkU2l6ZSA8PCA4KSB8CisJCSgodTgpbS0+YWRjRGVzaXJlZFNpemUpOworCWFyOTE3MF9yZWd3cml0ZSgweDFjNTg1MCwgbmV3dmFsKTsKKworCS8qIFR4RW5kVG9YcGFPZmYsIFR4RnJhbWVUb1hwYU9uIChpbmRleCA1KSAqLworCWRlZnZhbCA9IGFyOTE3MF9nZXRfZGVmYXVsdF9waHlfcmVnX3ZhbCgweDFjNTgzNCwgaXNfMmdoeiwgaXNfNDBtaHopOworCW5ld3ZhbCA9IChtLT50eEVuZFRvWHBhT2ZmIDw8IDI0KSB8IChtLT50eEVuZFRvWHBhT2ZmIDw8IDE2KSB8CisJCShtLT50eEZyYW1lVG9YcGFPbiA8PCA4KSB8IG0tPnR4RnJhbWVUb1hwYU9uOworCWFyOTE3MF9yZWd3cml0ZSgweDFjNTgzNCwgbmV3dmFsKTsKKworCS8qIFR4RW5kVG9SeE9uIChpbmRleCA2KSAqLworCWRlZnZhbCA9IGFyOTE3MF9nZXRfZGVmYXVsdF9waHlfcmVnX3ZhbCgweDFjNTgyOCwgaXNfMmdoeiwgaXNfNDBtaHopOworCW5ld3ZhbCA9IChkZWZ2YWwgJiB+MHhmZjAwMDApIHwgKG0tPnR4RW5kVG9SeE9uIDw8IDE2KTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzU4MjgsIG5ld3ZhbCk7CisKKwkvKiB0aHJlc2g2MiAoaW5kZXggNykgKi8KKwlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzg4NjQsIGlzXzJnaHosIGlzXzQwbWh6KTsKKwluZXd2YWwgPSAoZGVmdmFsICYgfjB4N2YwMDApIHwgKG0tPnRocmVzaDYyIDw8IDEyKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzg4NjQsIG5ld3ZhbCk7CisKKwkvKiB0eC9yeCBhdHRlbnVhdGlvbiBjaGFpbiAwIChpbmRleCA4KSAqLworCWRlZnZhbCA9IGFyOTE3MF9nZXRfZGVmYXVsdF9waHlfcmVnX3ZhbCgweDFjNTg0OCwgaXNfMmdoeiwgaXNfNDBtaHopOworCW5ld3ZhbCA9IChkZWZ2YWwgJiB+MHgzZjAwMCkgfCAoKG0tPnR4UnhBdHRlbkNoWzBdICYgMHgzZikgPDwgMTIpOworCWFyOTE3MF9yZWd3cml0ZSgweDFjNTg0OCwgbmV3dmFsKTsKKworCS8qIHR4L3J4IGF0dGVudWF0aW9uIGNoYWluIDIgKGluZGV4IDkpICovCisJZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM3ODQ4LCBpc18yZ2h6LCBpc180MG1oeik7CisJbmV3dmFsID0gKGRlZnZhbCAmIH4weDNmMDAwKSB8ICgobS0+dHhSeEF0dGVuQ2hbMV0gJiAweDNmKSA8PCAxMik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWM3ODQ4LCBuZXd2YWwpOworCisJLyogdHgvcnggbWFyZ2luIGNoYWluIDAgKGluZGV4IDEwKSAqLworCWRlZnZhbCA9IGFyOTE3MF9nZXRfZGVmYXVsdF9waHlfcmVnX3ZhbCgweDFjNjIwYywgaXNfMmdoeiwgaXNfNDBtaHopOworCW5ld3ZhbCA9IChkZWZ2YWwgJiB+MHhmYzAwMDApIHwgKChtLT5yeFR4TWFyZ2luQ2hbMF0gJiAweDNmKSA8PCAxOCk7CisJLyogYnN3IG1hcmdpbiBjaGFpbiAwIGZvciA1R0h6IG9ubHkgKi8KKwlpZiAoIWlzXzJnaHopCisJCW5ld3ZhbCA9IChuZXd2YWwgJiB+MHgzYzAwKSB8ICgobS0+YnN3TWFyZ2luWzBdICYgMHhmKSA8PCAxMCk7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWM2MjBjLCBuZXd2YWwpOworCisJLyogdHgvcnggbWFyZ2luIGNoYWluIDIgKGluZGV4IDExKSAqLworCWRlZnZhbCA9IGFyOTE3MF9nZXRfZGVmYXVsdF9waHlfcmVnX3ZhbCgweDFjODIwYywgaXNfMmdoeiwgaXNfNDBtaHopOworCW5ld3ZhbCA9IChkZWZ2YWwgJiB+MHhmYzAwMDApIHwgKChtLT5yeFR4TWFyZ2luQ2hbMV0gJiAweDNmKSA8PCAxOCk7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWM4MjBjLCBuZXd2YWwpOworCisJLyogaXFDYWxsLCBpcUNhbGxxIGNoYWluIDAgKGluZGV4IDEyKSAqLworCWRlZnZhbCA9IGFyOTE3MF9nZXRfZGVmYXVsdF9waHlfcmVnX3ZhbCgweDFjNTkyMCwgaXNfMmdoeiwgaXNfNDBtaHopOworCW5ld3ZhbCA9IChkZWZ2YWwgJiB+MHg3ZmYpIHwgKCgodTgpbS0+aXFDYWxJQ2hbMF0gJiAweDNmKSA8PCA1KSB8CisJCSgodTgpbS0+aXFDYWxRQ2hbMF0gJiAweDFmKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzU5MjAsIG5ld3ZhbCk7CisKKwkvKiBpcUNhbGwsIGlxQ2FsbHEgY2hhaW4gMiAoaW5kZXggMTMpICovCisJZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM3OTIwLCBpc18yZ2h6LCBpc180MG1oeik7CisJbmV3dmFsID0gKGRlZnZhbCAmIH4weDdmZikgfCAoKCh1OCltLT5pcUNhbElDaFsxXSAmIDB4M2YpIDw8IDUpIHwKKwkJKCh1OCltLT5pcUNhbFFDaFsxXSAmIDB4MWYpOworCWFyOTE3MF9yZWd3cml0ZSgweDFjNzkyMCwgbmV3dmFsKTsKKworCS8qIHhwZCBnYWluIG1hc2sgKGluZGV4IDE0KSAqLworCWRlZnZhbCA9IGFyOTE3MF9nZXRfZGVmYXVsdF9waHlfcmVnX3ZhbCgweDFjNjI1OCwgaXNfMmdoeiwgaXNfNDBtaHopOworCW5ld3ZhbCA9IChkZWZ2YWwgJiB+MHhmMDAwMCkgfCAoeHBkMnBkW20tPnhwZEdhaW4gJiAweGZdIDw8IDE2KTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzYyNTgsIG5ld3ZhbCk7CisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKwogaW50IGFyOTE3MF9pbml0X3BoeShzdHJ1Y3QgYXI5MTcwICphciwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQogewogCWludCBpLCBlcnI7CkBAIC00MjYsNyArNTU2LDkgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JLyogWFhYOiB1c2UgRUVQUk9NIGRhdGEgaGVyZSEgKi8KKwllcnIgPSBhcjkxNzBfaW5pdF9waHlfZnJvbV9lZXByb20oYXIsIGlzXzJnaHosIGlzXzQwbWh6KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gYXI5MTcwX2luaXRfcG93ZXJfY2FsKGFyKTsKIAlpZiAoZXJyKQpAQCAtOTg3LDYgKzExMTksMjgyIEBACiAjdW5kZWYgU0hJRlQKIH0KIAorc3RhdGljIHU4IGFyOTE3MF9pbnRlcnBvbGF0ZV92YWwodTggeCwgdTggKnhfYXJyYXksIHU4ICp5X2FycmF5KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJaWYgKHggPD0geF9hcnJheVtpICsgMV0pCisJCQlicmVhazsKKworCXJldHVybiBhcjkxNzBfaW50ZXJwb2xhdGVfdTgoeCwKKwkJCQkgICAgIHhfYXJyYXlbaV0sCisJCQkJICAgICB5X2FycmF5W2ldLAorCQkJCSAgICAgeF9hcnJheVtpICsgMV0sCisJCQkJICAgICB5X2FycmF5W2kgKyAxXSk7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3NldF9mcmVxX2NhbF9kYXRhKHN0cnVjdCBhcjkxNzAgKmFyLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJdTggKmNhbF9mcmVxX3BpZXI7CisJdTggdnBkc1syXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOworCXU4IHB3cnNbMl1bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKKwlpbnQgY2hhaW4sIGlkeCwgaTsKKwl1OCBmOworCisJc3dpdGNoIChjaGFubmVsLT5iYW5kKSB7CisJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgorCQlmID0gY2hhbm5lbC0+Y2VudGVyX2ZyZXEgLSAyMzAwOworCQljYWxfZnJlcV9waWVyID0gYXItPmVlcHJvbS5jYWxfZnJlcV9waWVyXzJHOworCQlpID0gQVI1NDE2X05VTV8yR19DQUxfUElFUlMgLSAxOworCQlicmVhazsKKworCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKKwkJZiA9IChjaGFubmVsLT5jZW50ZXJfZnJlcSAtIDQ4MDApIC8gNTsKKwkJY2FsX2ZyZXFfcGllciA9IGFyLT5lZXByb20uY2FsX2ZyZXFfcGllcl81RzsKKwkJaSA9IEFSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTIC0gMTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJZm9yICg7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChjYWxfZnJlcV9waWVyW2ldICE9IDB4ZmYpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlkeCA9IGFyOTE3MF9maW5kX2ZyZXFfaWR4KGksIGNhbF9mcmVxX3BpZXIsIGYpOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWZvciAoY2hhaW4gPSAwOyBjaGFpbiA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBjaGFpbisrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfUERfR0FJTl9JQ0VQVFM7IGkrKykgeworCQkJc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl9kYXRhX3Blcl9mcmVxICpjYWxfcGllcl9kYXRhOworCQkJaW50IGo7CisKKwkJCXN3aXRjaCAoY2hhbm5lbC0+YmFuZCkgeworCQkJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgorCQkJCWNhbF9waWVyX2RhdGEgPSAmYXItPmVlcHJvbS4KKwkJCQkJY2FsX3BpZXJfZGF0YV8yR1tjaGFpbl1baWR4XTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgorCQkJCWNhbF9waWVyX2RhdGEgPSAmYXItPmVlcHJvbS4KKwkJCQkJY2FsX3BpZXJfZGF0YV81R1tjaGFpbl1baWR4XTsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgeworCQkJCXZwZHNbal1baV0gPSBhcjkxNzBfaW50ZXJwb2xhdGVfdTgoZiwKKwkJCQkJY2FsX2ZyZXFfcGllcltpZHhdLAorCQkJCQljYWxfcGllcl9kYXRhLT52cGRfcGRnW2pdW2ldLAorCQkJCQljYWxfZnJlcV9waWVyW2lkeCArIDFdLAorCQkJCQljYWxfcGllcl9kYXRhWzFdLnZwZF9wZGdbal1baV0pOworCisJCQkJcHdyc1tqXVtpXSA9IGFyOTE3MF9pbnRlcnBvbGF0ZV91OChmLAorCQkJCQljYWxfZnJlcV9waWVyW2lkeF0sCisJCQkJCWNhbF9waWVyX2RhdGEtPnB3cl9wZGdbal1baV0sCisJCQkJCWNhbF9mcmVxX3BpZXJbaWR4ICsgMV0sCisJCQkJCWNhbF9waWVyX2RhdGFbMV0ucHdyX3BkZ1tqXVtpXSkgLyAyOworCQkJfQorCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IDc2OyBpKyspIHsKKwkJCXUzMiBwaHlfZGF0YTsKKwkJCXU4IHRtcDsKKworCQkJaWYgKGkgPCAyNSkgeworCQkJCXRtcCA9IGFyOTE3MF9pbnRlcnBvbGF0ZV92YWwoaSwgJnB3cnNbMF1bMF0sCisJCQkJCQkJICAgICAmdnBkc1swXVswXSk7CisJCQl9IGVsc2UgeworCQkJCXRtcCA9IGFyOTE3MF9pbnRlcnBvbGF0ZV92YWwoaSAtIDEyLAorCQkJCQkJCSAgICAgJnB3cnNbMV1bMF0sCisJCQkJCQkJICAgICAmdnBkc1sxXVswXSk7CisJCQl9CisKKwkJCXBoeV9kYXRhIHw9IHRtcCA8PCAoKGkgJiAzKSA8PCAzKTsKKwkJCWlmICgoaSAmIDMpID09IDMpIHsKKwkJCQlhcjkxNzBfcmVnd3JpdGUoMHgxYzYyODAgKyBjaGFpbiAqIDB4MTAwMCArCisJCQkJCQkoaSAmIH4zKSwgcGh5X2RhdGEpOworCQkJCXBoeV9kYXRhID0gMDsKKwkJCX0KKwkJfQorCisJCWZvciAoaSA9IDE5OyBpIDwgMzI7IGkrKykKKwkJCWFyOTE3MF9yZWd3cml0ZSgweDFjNjI4MCArIGNoYWluICogMHgxMDAwICsgKGkgPDwgMiksCisJCQkJCTB4MCk7CisJfQorCisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Cit9CisKK3N0YXRpYyB1OCBhcjkxNzBfZ2V0X21heF9lZGdlX3Bvd2VyKHN0cnVjdCBhcjkxNzAgKmFyLAorCQkJCSAgICBzdHJ1Y3QgYXI5MTcwX2NhbGN0bF9lZGdlcyBlZGdlc1tdLAorCQkJCSAgICB1MzIgZnJlcSkKK3sKKy8qIFRPRE86IG1vdmUgc29tZXdoZXJlIGVsc2UgKi8KKyNkZWZpbmUgQVI1NDE2X01BWF9SQVRFX1BPV0VSICAgICAgICA2MworCisJaW50IGk7CisJdTggcmMgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisJdTggZjsKKwlpZiAoZnJlcSA8IDMwMDApCisJCWYgPSBmcmVxIC0gMjMwMDsKKwllbHNlCisJCWYgPSAoZnJlcSAtIDQ4MDApIC8gNTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTlVNX0JBTkRfRURHRVM7IGkrKykgeworCQlpZiAoZWRnZXNbaV0uY2hhbm5lbCA9PSAweGZmKQorCQkJYnJlYWs7CisJCWlmIChmID09IGVkZ2VzW2ldLmNoYW5uZWwpIHsKKwkJCS8qIGV4YWN0IGZyZXEgbWF0Y2ggKi8KKwkJCXJjID0gZWRnZXNbaV0ucG93ZXJfZmxhZ3MgJiB+QVI5MTcwX0NBTENUTF9FREdFX0ZMQUdTOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPiAwICYmIGYgPCBlZGdlc1tpXS5jaGFubmVsKSB7CisJCQlpZiAoZiA+IGVkZ2VzW2ktMV0uY2hhbm5lbCAmJgorCQkJICAgIGVkZ2VzW2ktMV0ucG93ZXJfZmxhZ3MgJiBBUjkxNzBfQ0FMQ1RMX0VER0VfRkxBR1MpIHsKKwkJCQkvKiBsb3dlciBjaGFubmVsIGhhcyB0aGUgaW5iYW5kIGZsYWcgc2V0ICovCisJCQkJcmMgPSBlZGdlc1tpLTFdLnBvd2VyX2ZsYWdzICYKKwkJCQkJfkFSOTE3MF9DQUxDVExfRURHRV9GTEFHUzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPT0gQVI1NDE2X05VTV9CQU5EX0VER0VTKSB7CisJCWlmIChmID4gZWRnZXNbaS0xXS5jaGFubmVsICYmCisJCSAgICBlZGdlc1tpLTFdLnBvd2VyX2ZsYWdzICYgQVI5MTcwX0NBTENUTF9FREdFX0ZMQUdTKSB7CisJCQkvKiBsb3dlciBjaGFubmVsIGhhcyB0aGUgaW5iYW5kIGZsYWcgc2V0ICovCisJCQlyYyA9IGVkZ2VzW2ktMV0ucG93ZXJfZmxhZ3MgJgorCQkJCX5BUjkxNzBfQ0FMQ1RMX0VER0VfRkxBR1M7CisJCX0KKwl9CisJcmV0dXJuIHJjOworfQorCisvKiBjYWxjdWxhdGUgdGhlIGNvbmZvcm1hbmNlIHRlc3QgbGltaXRzIGFuZCBhcHBseSB0aGVtIHRvIGFyLT5wb3dlcioKKyAqIChkZXJpdmVkIGZyb20gb3R1cyBoYWwvaHBtYWluLmMsIGxpbmUgMzcwNiBmZi4pCisgKi8KK3N0YXRpYyB2b2lkIGFyOTE3MF9jYWxjX2N0bChzdHJ1Y3QgYXI5MTcwICphciwgdTMyIGZyZXEsIGVudW0gYXI5MTcwX2J3IGJ3KQoreworCXU4IGN0bF9ncnA7IC8qIENUTCBncm91cCAqLworCXU4IGN0bF9pZHg7IC8qIENUTCBpbmRleCAqLworCWludCBpLCBqOworCXN0cnVjdCBjdGxfbW9kZXMgeworCQl1OCBjdGxfbW9kZTsKKwkJdTggbWF4X3Bvd2VyOworCQl1OCAqcHdyX2NhbF9kYXRhOworCQlpbnQgcHdyX2NhbF9sZW47CisJfSAqbW9kZXM7CisKKwkvKiBvcmRlciBpcyByZWxldmFudCBpbiB0aGUgbW9kZV9saXN0Xyo6IHdlIGZhbGwgYmFjayB0byB0aGUKKwkgKiBsb3dlciBpbmRpY2VzIGlmIGFueSBtb2RlIGlzIG1pc3NlZCBpbiB0aGUgRUVQUk9NLgorCSAqLworCXN0cnVjdCBjdGxfbW9kZXMgbW9kZV9saXN0XzJnaHpbXSA9IHsKKwkJeyBDVExfMTFCLCAwLCBhci0+cG93ZXJfMkdfY2NrLCA0IH0sCisJCXsgQ1RMXzExRywgMCwgYXItPnBvd2VyXzJHX29mZG0sIDQgfSwKKwkJeyBDVExfMkdIVDIwLCAwLCBhci0+cG93ZXJfMkdfaHQyMCwgOCB9LAorCQl7IENUTF8yR0hUNDAsIDAsIGFyLT5wb3dlcl8yR19odDQwLCA4IH0sCisJfTsKKwlzdHJ1Y3QgY3RsX21vZGVzIG1vZGVfbGlzdF81Z2h6W10gPSB7CisJCXsgQ1RMXzExQSwgMCwgYXItPnBvd2VyXzVHX2xlZywgNCB9LAorCQl7IENUTF81R0hUMjAsIDAsIGFyLT5wb3dlcl81R19odDIwLCA4IH0sCisJCXsgQ1RMXzVHSFQ0MCwgMCwgYXItPnBvd2VyXzVHX2h0NDAsIDggfSwKKwl9OworCWludCBucl9tb2RlczsKKworI2RlZmluZSBFREdFUyhjLCBuKSAoYXItPmVlcHJvbS5jdGxfZGF0YVtjXS5jb250cm9sX2VkZ2VzW25dKQorCisJLyogVE9ETzogaW52ZXN0aWdhdGUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gT1RVUycKKwkgKiBocHJlZy5jOjp6ZkhwR2V0UmVndWxhdG9yeURvbWFpbigpIGFuZAorCSAqIGF0aC9yZWdkLmM6OmF0aF9yZWdkX2dldF9iYW5kX2N0bCgpIC0KKwkgKiBlLmcuIGZvciBGQ0MzX1dPUkxEIHRoZSBPVFVTIHByb2NlZHVyZQorCSAqIGFsd2F5cyByZXR1cm5zIENUTF9GQ0MsIHdoaWxlIHRoZSBvbmUgaW4gYXRoLyBkZWxpdmVycworCSAqIENUTF9FVFNJIGZvciAyR0h6IGFuZCBDVExfRkNDIGZvciA1R0h6LgorCSAqLworCWN0bF9ncnAgPSBhdGhfcmVnZF9nZXRfYmFuZF9jdGwoJmFyLT5jb21tb24ucmVndWxhdG9yeSwKKwkJCQkJYXItPmh3LT5jb25mLmNoYW5uZWwtPmJhbmQpOworCisJLyogY3RsIGdyb3VwIG5vdCBmb3VuZCAtIGVpdGhlciBpbnZhbGlkIGJhbmQgKE5PX0NUTCkgb3Igd3cgcm9hbWluZyAqLworCWlmIChjdGxfZ3JwID09IE5PX0NUTCB8fCBjdGxfZ3JwID09IFNEX05PX0NUTCkKKwkJY3RsX2dycCA9IENUTF9GQ0M7CisKKwlpZiAoY3RsX2dycCAhPSBDVExfRkNDKQorCQkvKiBza2lwIENUTCBhbmQgaGVhdnkgY2xpcCBmb3IgQ1RMX01LSyBhbmQgQ1RMX0VUU0kgKi8KKwkJcmV0dXJuOworCisJaWYgKGFyLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJbW9kZXMgPSBtb2RlX2xpc3RfMmdoejsKKwkJbnJfbW9kZXMgPSBBUlJBWV9TSVpFKG1vZGVfbGlzdF8yZ2h6KTsKKwl9IGVsc2UgeworCQltb2RlcyA9IG1vZGVfbGlzdF81Z2h6OworCQlucl9tb2RlcyA9IEFSUkFZX1NJWkUobW9kZV9saXN0XzVnaHopOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBucl9tb2RlczsgaSsrKSB7CisJCXU4IGMgPSBjdGxfZ3JwIHwgbW9kZXNbaV0uY3RsX21vZGU7CisJCWZvciAoY3RsX2lkeCA9IDA7IGN0bF9pZHggPCBBUjU0MTZfTlVNX0NUTFM7IGN0bF9pZHgrKykKKwkJCWlmIChjID09IGFyLT5lZXByb20uY3RsX2luZGV4W2N0bF9pZHhdKQorCQkJCWJyZWFrOworCQlpZiAoY3RsX2lkeCA8IEFSNTQxNl9OVU1fQ1RMUykgeworCQkJaW50IGZfb2ZmID0gMDsKKworCQkJLyogYWRqdXN0IGZyZXEgZm9yIDQwTUh6ICovCisJCQlpZiAobW9kZXNbaV0uY3RsX21vZGUgPT0gQ1RMXzJHSFQ0MCB8fAorCQkJICAgIG1vZGVzW2ldLmN0bF9tb2RlID09IENUTF81R0hUNDApIHsKKwkJCQlpZiAoYncgPT0gQVI5MTcwX0JXXzQwX0JFTE9XKQorCQkJCQlmX29mZiA9IC0xMDsKKwkJCQllbHNlCisJCQkJCWZfb2ZmID0gMTA7CisJCQl9CisKKwkJCW1vZGVzW2ldLm1heF9wb3dlciA9CisJCQkJYXI5MTcwX2dldF9tYXhfZWRnZV9wb3dlcihhciwgRURHRVMoY3RsX2lkeCwgMSksCisJCQkJCQkJICBmcmVxK2Zfb2ZmKTsKKworCQkJLyogVE9ETzogY2hlY2sgaWYgdGhlIHJlZ3VsYXRvcnkgbWF4LiBwb3dlciBpcworCQkJICogIGNvbnRyb2xsZWQgYnkgY2ZnODAyMTEgZm9yIERGUworCQkJICogKGhwbWFpbiBhcHBsaWVzIGl0IHRvIG1heF9wb3dlciBpdHNlbGYgZm9yIERGUyBmcmVxKQorCQkJICovCisKKwkJfSBlbHNlIHsKKwkJCS8qIFdvcmthcm91bmQgaW4gb3R1cyBkcml2ZXIsIGhwbWFpbi5jLCBsaW5lIDM5MDY6CisJCQkgKiBpZiBubyBkYXRhIGZvciA1R0hUMjAgYXJlIGZvdW5kLCB0YWtlIHRoZQorCQkJICogbGVnYWN5IDVHIHZhbHVlLgorCQkJICogV2UgZXh0ZW5kIHRoaXMgaGVyZSB0byBmYWxsYmFjayBmcm9tIGFueSBvdGhlciAqSFQgb3IKKwkJCSAqIDExRywgdG9vLgorCQkJICovCisJCQlpbnQgayA9IGk7CisKKwkJCW1vZGVzW2ldLm1heF9wb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwkJCXdoaWxlIChrLS0gPiAwKSB7CisJCQkJaWYgKG1vZGVzW2tdLm1heF9wb3dlciAhPQorCQkJCSAgICBBUjU0MTZfTUFYX1JBVEVfUE9XRVIpIHsKKwkJCQkJbW9kZXNbaV0ubWF4X3Bvd2VyID0gbW9kZXNba10ubWF4X3Bvd2VyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBhcHBseSBtYXggcG93ZXIgdG8gcHdyX2NhbF9kYXRhIChhci0+cG93ZXJfKikgKi8KKwkJZm9yIChqID0gMDsgaiA8IG1vZGVzW2ldLnB3cl9jYWxfbGVuOyBqKyspIHsKKwkJCW1vZGVzW2ldLnB3cl9jYWxfZGF0YVtqXSA9IG1pbihtb2Rlc1tpXS5wd3JfY2FsX2RhdGFbal0sCisJCQkJCQkgICAgICAgbW9kZXNbaV0ubWF4X3Bvd2VyKTsKKwkJfQorCX0KKyN1bmRlZiBFREdFUworfQorCiBzdGF0aWMgaW50IGFyOTE3MF9zZXRfcG93ZXJfY2FsKHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgZnJlcSwgZW51bSBhcjkxNzBfYncgYncpCiB7CiAJc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfbGVnYWN5ICpjdHBsOwpAQCAtMTA4OSw2ICsxNDk3LDEyIEBACiAJCQkJCWN0cGhbaWR4ICsgMV0ucG93ZXJbbl0pOwogCX0KIAorCisJLyogY2FsYy4gY29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgYW5kIGFwcGx5IHRvIGFyLT5wb3dlcipbXSAqLworCWFyOTE3MF9jYWxjX2N0bChhciwgZnJlcSwgYncpOworCisJLyogVE9ETzogKGhlYXZ5IGNsaXApIHJlZ3VsYXRvcnkgZG9tYWluIHBvd2VyIGxldmVsIGZpbmUtdHVuaW5nLiAqLworCiAJLyogc2V0IEFDSy9DVFMgVFggcG93ZXIgKi8KIAlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwogCkBAIC0xMjA3LDYgKzE2MjEsMTAgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJZXJyID0gYXI5MTcwX3NldF9mcmVxX2NhbF9kYXRhKGFyLCBjaGFubmVsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJZXJyID0gYXI5MTcwX3NldF9wb3dlcl9jYWwoYXIsIGNoYW5uZWwtPmNlbnRlcl9mcmVxLCBidyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3VzYi5jCmluZGV4IDAwN2ViODUuLmUwMTM4YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC91c2IuYwpAQCAtNzgzLDcgKzc4Myw3IEBACiAJYXJ1LT5yZXFfb25lX3N0YWdlX2Z3ID0gYXI5MTcwX3JlcXVpcmVzX29uZV9zdGFnZShpZCk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGFydSk7Ci0JU0VUX0lFRUU4MDIxMV9ERVYoYXItPmh3LCAmdWRldi0+ZGV2KTsKKwlTRVRfSUVFRTgwMjExX0RFVihhci0+aHcsICZpbnRmLT5kZXYpOwogCiAJaW5pdF91c2JfYW5jaG9yKCZhcnUtPnJ4X3N1Ym1pdHRlZCk7CiAJaW5pdF91c2JfYW5jaG9yKCZhcnUtPnR4X3BlbmRpbmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2M2U5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgQVRIX0gKKyNkZWZpbmUgQVRIX0gKKworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCitzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgeworCXUxNiByZWdEbW5FbnVtOworCXUxNiByZWdfNWdoel9jdGw7CisJdTE2IHJlZ18yZ2h6X2N0bDsKK307CisKK3N0cnVjdCBhdGhfcmVndWxhdG9yeSB7CisJY2hhciBhbHBoYTJbMl07CisJdTE2IGNvdW50cnlfY29kZTsKKwl1MTYgbWF4X3Bvd2VyX2xldmVsOworCXUzMiB0cF9zY2FsZTsKKwl1MTYgY3VycmVudF9yZDsKKwl1MTYgY3VycmVudF9yZF9leHQ7CisJaW50MTZfdCBwb3dlcl9saW1pdDsKKwlzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgKnJlZ3BhaXI7Cit9OworCitzdHJ1Y3QgYXRoX2NvbW1vbiB7CisJdTE2IGNhY2hlbHN6OworCXN0cnVjdCBhdGhfcmVndWxhdG9yeSByZWd1bGF0b3J5OworfTsKKworc3RydWN0IHNrX2J1ZmYgKmF0aF9yeGJ1Zl9hbGxvYyhzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLAorCQkJCXUzMiBsZW4sCisJCQkJZ2ZwX3QgZ2ZwX21hc2spOworCisjZW5kaWYgLyogQVRIX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL0tjb25maWcKaW5kZXggZGFmMGM4My4uMDZkMDA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL0tjb25maWcKQEAgLTEsNyArMSw2IEBACiBjb25maWcgQVRINUsKIAl0cmlzdGF0ZSAiQXRoZXJvcyA1eHh4IHdpcmVsZXNzIGNhcmRzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBFWFBFUklNRU5UQUwKLQlzZWxlY3QgQVRIX0NPTU1PTgorCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExICYmIFdMQU5fODAyMTEKIAlzZWxlY3QgTUFDODAyMTFfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTCiAJc2VsZWN0IE5FV19MRURTCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXRoNWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oCmluZGV4IDYzNTgyMzMuLjZjZDVlZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oCkBAIC0yNyw4ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAotI2luY2x1ZGUgIi4uL3JlZ2QuaCIKLQogLyogUlgvVFggZGVzY3JpcHRvciBodyBzdHJ1Y3RzCiAgKiBUT0RPOiBEcml2ZXIgcGFydCBzaG91bGQgb25seSBzZWUgc3cgc3RydWN0cyAqLwogI2luY2x1ZGUgImRlc2MuaCIKQEAgLTMwOCw2ICszMDYsNyBAQAogI2RlZmluZSBBUjVLX1NSRVZfQVI1MzExQgkweDMwIC8qIFNwaXJpdCAqLwogI2RlZmluZSBBUjVLX1NSRVZfQVI1MjExCTB4NDAgLyogT2FodSAqLwogI2RlZmluZSBBUjVLX1NSRVZfQVI1MjEyCTB4NTAgLyogVmVuaWNlICovCisjZGVmaW5lIEFSNUtfU1JFVl9BUjUyMTJfVjQJMHg1NCAvKiA/Pz8gKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSNTIxMwkweDU1IC8qID8/PyAqLwogI2RlZmluZSBBUjVLX1NSRVZfQVI1MjEzQQkweDU5IC8qIEhhaW5hbiAqLwogI2RlZmluZSBBUjVLX1NSRVZfQVIyNDEzCTB4NzggLyogR3JpZmZpbiBsaXRlICovCkBAIC03MTMsOCArNzEyLDggQEAKICAqIFVzZWQgaW50ZXJuYWx5IGZvciByZXNldF90eF9xdWV1ZSkuCiAgKiBBbHNvIHNlZSBzdHJ1Y3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsLgogICovCi0jZGVmaW5lIElTX0NIQU5fWFIoX2MpCSgoX2MuaHdfdmFsdWUgJiBDSEFOTkVMX1hSKSAhPSAwKQotI2RlZmluZSBJU19DSEFOX0IoX2MpCSgoX2MuaHdfdmFsdWUgJiBDSEFOTkVMX0IpICE9IDApCisjZGVmaW5lIElTX0NIQU5fWFIoX2MpCSgoX2MtPmh3X3ZhbHVlICYgQ0hBTk5FTF9YUikgIT0gMCkKKyNkZWZpbmUgSVNfQ0hBTl9CKF9jKQkoKF9jLT5od192YWx1ZSAmIENIQU5ORUxfQikgIT0gMCkKIAogLyoKICAqIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzIHVzZWQgdG8gbWFwIDJHSHogY2hhbm5lbHMgdG8KQEAgLTkxOSw2ICs5MTgsMTIgQEAKIAlBUjVLX0lOVF9OT0NBUkQJPSAweGZmZmZmZmZmCiB9OwogCisvKiBTb2Z0d2FyZSBpbnRlcnJ1cHRzIHVzZWQgZm9yIGNhbGlicmF0aW9uICovCitlbnVtIGF0aDVrX3NvZnR3YXJlX2ludGVycnVwdCB7CisJQVI1S19TV0lfRlVMTF9DQUxJQlJBVElPTiA9IDB4MDEsCisJQVI1S19TV0lfU0hPUlRfQ0FMSUJSQVRJT04gPSAweDAyLAorfTsKKwogLyoKICAqIFBvd2VyIG1hbmFnZW1lbnQKICAqLwpAQCAtMTAyOSwxNCArMTAzNCwxNiBAQAogCWVudW0gYXRoNWtfaW50CQlhaF9pbXI7CiAKIAllbnVtIG5sODAyMTFfaWZ0eXBlCWFoX29wX21vZGU7Ci0JZW51bSBhdGg1a19wb3dlcl9tb2RlCWFoX3Bvd2VyX21vZGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGFoX2N1cnJlbnRfY2hhbm5lbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmFoX2N1cnJlbnRfY2hhbm5lbDsKIAlib29sCQkJYWhfdHVyYm87CiAJYm9vbAkJCWFoX2NhbGlicmF0aW9uOwotCWJvb2wJCQlhaF9ydW5uaW5nOwogCWJvb2wJCQlhaF9zaW5nbGVfY2hpcDsKKwlib29sCQkJYWhfYWVzX3N1cHBvcnQ7CiAJYm9vbAkJCWFoX2NvbWJpbmVkX21pYzsKIAorCWVudW0gYXRoNWtfdmVyc2lvbglhaF92ZXJzaW9uOworCWVudW0gYXRoNWtfcmFkaW8JYWhfcmFkaW87CisJdTMyCQkJYWhfcGh5OwogCXUzMgkJCWFoX21hY19zcmV2OwogCXUxNgkJCWFoX21hY192ZXJzaW9uOwogCXUxNgkJCWFoX21hY19yZXZpc2lvbjsKQEAgLTEwNDQsMTMgKzEwNTEsNiBAQAogCXUxNgkJCWFoX3JhZGlvXzVnaHpfcmV2aXNpb247CiAJdTE2CQkJYWhfcmFkaW9fMmdoel9yZXZpc2lvbjsKIAotCWVudW0gYXRoNWtfdmVyc2lvbglhaF92ZXJzaW9uOwotCWVudW0gYXRoNWtfcmFkaW8JYWhfcmFkaW87Ci0JdTMyCQkJYWhfcGh5OwotCi0JYm9vbAkJCWFoXzVnaHo7Ci0JYm9vbAkJCWFoXzJnaHo7Ci0KICNkZWZpbmUgYWhfbW9kZXMJCWFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZQogI2RlZmluZSBhaF9lZV92ZXJzaW9uCQlhaF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbS5lZV92ZXJzaW9uCiAKQEAgLTEwNTgsNyArMTA1OCw2IEBACiAJdTMyCQkJYWhfYWlmczsKIAl1MzIJCQlhaF9jd19taW47CiAJdTMyCQkJYWhfY3dfbWF4OwotCWJvb2wJCQlhaF9zb2Z0d2FyZV9yZXRyeTsKIAl1MzIJCQlhaF9saW1pdF90eF9yZXRyaWVzOwogCiAJLyogQW50ZW5uYSBDb250cm9sICovCkBAIC0xMDY2LDYgKzEwNjUsNyBAQAogCXU4CQkJYWhfYW50X21vZGU7CiAJdTgJCQlhaF90eF9hbnQ7CiAJdTgJCQlhaF9kZWZfYW50OworCWJvb2wJCQlhaF9zb2Z0d2FyZV9yZXRyeTsKIAogCXU4CQkJYWhfc3RhX2lkW0VUSF9BTEVOXTsKIApAQCAtMTA3NSwxMCArMTA3NSw4IEBACiAJdTgJCQlhaF9ic3NpZFtFVEhfQUxFTl07CiAJdTgJCQlhaF9ic3NpZF9tYXNrW0VUSF9BTEVOXTsKIAotCXUzMgkJCWFoX2dwaW9bQVI1S19NQVhfR1BJT107CiAJaW50CQkJYWhfZ3Bpb19ucGluczsKIAotCXN0cnVjdCBhdGhfcmVndWxhdG9yeQlhaF9yZWd1bGF0b3J5OwogCXN0cnVjdCBhdGg1a19jYXBhYmlsaXRpZXMgYWhfY2FwYWJpbGl0aWVzOwogCiAJc3RydWN0IGF0aDVrX3R4cV9pbmZvCWFoX3R4cVtBUjVLX05VTV9UWF9RVUVVRVNdOwpAQCAtMTEzMCw2ICsxMTI4LDE1IEBACiAJLyogbm9pc2UgZmxvb3IgZnJvbSBsYXN0IHBlcmlvZGljIGNhbGlicmF0aW9uICovCiAJczMyCQkJYWhfbm9pc2VfZmxvb3I7CiAKKwkvKiBDYWxpYnJhdGlvbiB0aW1lc3RhbXAgKi8KKwl1bnNpZ25lZCBsb25nCQlhaF9jYWxfdHN0YW1wOworCisJLyogQ2FsaWJyYXRpb24gaW50ZXJ2YWwgKHNlY3MpICovCisJdTgJCQlhaF9jYWxfaW50dmFsOworCisJLyogU29mdHdhcmUgaW50ZXJydXB0IG1hc2sgKi8KKwl1OAkJCWFoX3N3aV9tYXNrOworCiAJLyoKIAkgKiBGdW5jdGlvbiBwb2ludGVycwogCSAqLwpAQCAtMTE1Myw3ICsxMTYwLDcgQEAKICAqLwogCiAvKiBBdHRhY2gvRGV0YWNoIEZ1bmN0aW9ucyAqLwotZXh0ZXJuIHN0cnVjdCBhdGg1a19odyAqYXRoNWtfaHdfYXR0YWNoKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHU4IG1hY192ZXJzaW9uKTsKK2V4dGVybiBzdHJ1Y3QgYXRoNWtfaHcgKmF0aDVrX2h3X2F0dGFjaChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIGV4dGVybiB2b2lkIGF0aDVrX2h3X2RldGFjaChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIAogLyogTEVEIGZ1bmN0aW9ucyAqLwpAQCAtMTE2NCw2ICsxMTcxLDcgQEAKIAogLyogUmVzZXQgRnVuY3Rpb25zICovCiBleHRlcm4gaW50IGF0aDVrX2h3X25pY193YWtldXAoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IGZsYWdzLCBib29sIGluaXRpYWwpOworZXh0ZXJuIGludCBhdGg1a19od19vbl9ob2xkKHN0cnVjdCBhdGg1a19odyAqYWgpOwogZXh0ZXJuIGludCBhdGg1a19od19yZXNldChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBlbnVtIG5sODAyMTFfaWZ0eXBlIG9wX21vZGUsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgYm9vbCBjaGFuZ2VfY2hhbm5lbCk7CiAvKiBQb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCBhdGg1a19od19zZXRfcG93ZXIoc3RydWN0IGF0aDVrX2h3ICphaCwgZW51bSBhdGg1a19wb3dlcl9tb2RlIG1vZGUsIGJvb2wgc2V0X2NoaXAsIHUxNiBzbGVlcF9kdXJhdGlvbik7CkBAIC0xMjgyLDYgKzEyOTAsNyBAQAogLyogUEhZIGNhbGlicmF0aW9uICovCiBleHRlcm4gaW50IGF0aDVrX2h3X3BoeV9jYWxpYnJhdGUoc3RydWN0IGF0aDVrX2h3ICphaCwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKTsKIGV4dGVybiBpbnQgYXRoNWtfaHdfbm9pc2VfZmxvb3JfY2FsaWJyYXRpb24oc3RydWN0IGF0aDVrX2h3ICphaCwgc2hvcnQgZnJlcSk7CitleHRlcm4gdm9pZCBhdGg1a19od19jYWxpYnJhdGlvbl9wb2xsKHN0cnVjdCBhdGg1a19odyAqYWgpOwogLyogU3B1ciBtaXRpZ2F0aW9uICovCiBib29sIGF0aDVrX2h3X2NoYW5faGFzX3NwdXJfbm9pc2Uoc3RydWN0IGF0aDVrX2h3ICphaCwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0dGFjaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0dGFjaC5jCmluZGV4IGM0MWVmNTguLjcxYTFiZDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXR0YWNoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0dGFjaC5jCkBAIC05NSwxNyArOTUsMTcgQEAKICAqIGF0aDVrX2h3X2F0dGFjaCAtIENoZWNrIGlmIGh3IGlzIHN1cHBvcnRlZCBhbmQgaW5pdCB0aGUgbmVlZGVkIHN0cnVjdHMKICAqCiAgKiBAc2M6IFRoZSAmc3RydWN0IGF0aDVrX3NvZnRjIHdlIGdvdCBmcm9tIHRoZSBkcml2ZXIncyBhdHRhY2ggZnVuY3Rpb24KLSAqIEBtYWNfdmVyc2lvbjogVGhlIG1hYyB2ZXJzaW9uIGlkIChjaGVjayBvdXQgYXRoNWsuaCkgYmFzZWQgb24gcGNpIGlkCiAgKgogICogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBzdXBwb3J0ZWQsIHBlcmZvcm0gYSBQT1NUIGFuZCBpbml0aWFsaXplIHRoZSBuZWVkZWQKICAqIHN0cnVjdHMuIFJldHVybnMgLUVOT01FTSBpZiB3ZSBkb24ndCBoYXZlIG1lbW9yeSBmb3IgdGhlIG5lZWRlZCBzdHJ1Y3RzLAogICogLUVOT0RFViBpZiB0aGUgZGV2aWNlIGlzIG5vdCBzdXBwb3J0ZWQgb3IgcHJpbnRzIGFuIGVycm9yIG1zZyBpZiBzb21ldGhpbmcKICAqIGVsc2Ugd2VudCB3cm9uZy4KICAqLwotc3RydWN0IGF0aDVrX2h3ICphdGg1a19od19hdHRhY2goc3RydWN0IGF0aDVrX3NvZnRjICpzYywgdTggbWFjX3ZlcnNpb24pCitzdHJ1Y3QgYXRoNWtfaHcgKmF0aDVrX2h3X2F0dGFjaChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewogCXN0cnVjdCBhdGg1a19odyAqYWg7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBzYy0+cGRldjsKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlOwogCWludCByZXQ7CiAJdTMyIHNyZXY7CiAKQEAgLTEzNSw5ICsxMzUsMTUgQEAKIAlhaC0+YWhfc29mdHdhcmVfcmV0cnkgPSBmYWxzZTsKIAogCS8qCi0JICogU2V0IHRoZSBtYWMgdmVyc2lvbiBiYXNlZCBvbiB0aGUgcGNpIGlkCisJICogRmluZCB0aGUgbWFjIHZlcnNpb24KIAkgKi8KLQlhaC0+YWhfdmVyc2lvbiA9IG1hY192ZXJzaW9uOworCXNyZXYgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19TUkVWKTsKKwlpZiAoc3JldiA8IEFSNUtfU1JFVl9BUjUzMTEpCisJCWFoLT5haF92ZXJzaW9uID0gQVI1S19BUjUyMTA7CisJZWxzZSBpZiAoc3JldiA8IEFSNUtfU1JFVl9BUjUyMTIpCisJCWFoLT5haF92ZXJzaW9uID0gQVI1S19BUjUyMTE7CisJZWxzZQorCQlhaC0+YWhfdmVyc2lvbiA9IEFSNUtfQVI1MjEyOwogCiAJLypGaWxsIHRoZSBhdGg1a19odyBzdHJ1Y3Qgd2l0aCB0aGUgbmVlZGVkIGZ1bmN0aW9ucyovCiAJcmV0ID0gYXRoNWtfaHdfaW5pdF9kZXNjX2Z1bmN0aW9ucyhhaCk7CkBAIC0xNDUsMTIgKzE1MSwxMSBAQAogCQlnb3RvIGVycl9mcmVlOwogCiAJLyogQnJpbmcgZGV2aWNlIG91dCBvZiBzbGVlcCBhbmQgcmVzZXQgaXQncyB1bml0cyAqLwotCXJldCA9IGF0aDVrX2h3X25pY193YWtldXAoYWgsIENIQU5ORUxfQiwgdHJ1ZSk7CisJcmV0ID0gYXRoNWtfaHdfbmljX3dha2V1cChhaCwgMCwgdHJ1ZSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfZnJlZTsKIAogCS8qIEdldCBNQUMsIFBIWSBhbmQgUkFESU8gcmV2aXNpb25zICovCi0Jc3JldiA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1NSRVYpOwogCWFoLT5haF9tYWNfc3JldiA9IHNyZXY7CiAJYWgtPmFoX21hY192ZXJzaW9uID0gQVI1S19SRUdfTVMoc3JldiwgQVI1S19TUkVWX1ZFUik7CiAJYWgtPmFoX21hY19yZXZpc2lvbiA9IEFSNUtfUkVHX01TKHNyZXYsIEFSNUtfU1JFVl9SRVYpOwpAQCAtMjUzLDI4ICsyNTgsNiBAQAogCX0KIAogCS8qCi0JICogV3JpdGUgUENJLUUgcG93ZXIgc2F2ZSBzZXR0aW5ncwotCSAqLwotCWlmICgoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpICYmIChwZGV2LT5pc19wY2llKSkgewotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4OTI0OGZjMDAsIEFSNUtfUENJRV9TRVJERVMpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MjQ5MjQ5MjQsIEFSNUtfUENJRV9TRVJERVMpOwotCQkvKiBTaHV0IG9mZiBSWCB3aGVuIGVsZWNpZGxlIGlzIGFzc2VydGVkICovCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgyODAwMDAzOSwgQVI1S19QQ0lFX1NFUkRFUyk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHg1MzE2MDgyNCwgQVI1S19QQ0lFX1NFUkRFUyk7Ci0JCS8qIFRPRE86IEVFUFJPTSB3b3JrICovCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHhlNTk4MDU3OSwgQVI1S19QQ0lFX1NFUkRFUyk7Ci0JCS8qIFNodXQgb2ZmIFBMTCBhbmQgQ0xLUkVRIGFjdGl2ZSBpbiBMMSAqLwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAxZGVmZmYsIEFSNUtfUENJRV9TRVJERVMpOwotCQkvKiBQcmVzZXJjZSBvdGhlciBzZXR0aW5ncyAqLwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MWFhYWJlNDAsIEFSNUtfUENJRV9TRVJERVMpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4YmUxMDU1NTQsIEFSNUtfUENJRV9TRVJERVMpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwZTMwMDcsIEFSNUtfUENJRV9TRVJERVMpOwotCQkvKiBSZXNldCBTRVJERVMgdG8gbG9hZCBuZXcgc2V0dGluZ3MgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDAwLCBBUjVLX1BDSUVfU0VSREVTX1JFU0VUKTsKLQkJbWRlbGF5KDEpOwotCX0KLQotCS8qCiAJICogUE9TVAogCSAqLwogCXJldCA9IGF0aDVrX2h3X3Bvc3QoYWgpOwpAQCAtMjgzLDcgKzI2Niw3IEBACiAKIAkvKiBFbmFibGUgcGNpIGNvcmUgcmV0cnkgZml4IG9uIEhhaW5hbiAoNTIxM0EpIGFuZCBsYXRlciBjaGlwcyAqLwogCWlmIChzcmV2ID49IEFSNUtfU1JFVl9BUjUyMTNBKQotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUENJQ0ZHX1JFVFJZX0ZJWCwgQVI1S19QQ0lDRkcpOworCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsIEFSNUtfUENJQ0ZHX1JFVFJZX0ZJWCk7CiAKIAkvKgogCSAqIEdldCBjYXJkIGNhcGFiaWxpdGllcywgY2FsaWJyYXRpb24gdmFsdWVzIGV0YwpAQCAtMjk1LDYgKzI3OCw0MCBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAorCS8qCisJICogV3JpdGUgUENJLUUgcG93ZXIgc2F2ZSBzZXR0aW5ncworCSAqLworCWlmICgoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpICYmIChwZGV2LT5pc19wY2llKSkgeworCQlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4OTI0OGZjMDAsIEFSNUtfUENJRV9TRVJERVMpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MjQ5MjQ5MjQsIEFSNUtfUENJRV9TRVJERVMpOworCisJCS8qIFNodXQgb2ZmIFJYIHdoZW4gZWxlY2lkbGUgaXMgYXNzZXJ0ZWQgKi8KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDI4MDAwMDM5LCBBUjVLX1BDSUVfU0VSREVTKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDUzMTYwODI0LCBBUjVLX1BDSUVfU0VSREVTKTsKKworCQkvKiBJZiBzZXJkZXMgcHJvZ3JhbWluZyBpcyBlbmFibGVkLCBpbmNyZWFzZSBQQ0ktRQorCQkgKiB0eCBwb3dlciBmb3Igc3lzdGVtcyB3aXRoIGxvbmcgdHJhY2UgZnJvbSBob3N0CisJCSAqIHRvIG1pbmljYXJkIGNvbm5lY3Rvci4gKi8KKwkJaWYgKGVlLT5lZV9zZXJkZXMpCisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4ZTU5ODA1NzksIEFSNUtfUENJRV9TRVJERVMpOworCQllbHNlCisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4ZjY4MDA1NzksIEFSNUtfUENJRV9TRVJERVMpOworCisJCS8qIFNodXQgb2ZmIFBMTCBhbmQgQ0xLUkVRIGFjdGl2ZSBpbiBMMSAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAxZGVmZmYsIEFSNUtfUENJRV9TRVJERVMpOworCisJCS8qIFByZXNlcnZlIG90aGVyIHNldHRpbmdzICovCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgxYWFhYmU0MCwgQVI1S19QQ0lFX1NFUkRFUyk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHhiZTEwNTU1NCwgQVI1S19QQ0lFX1NFUkRFUyk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDBlMzAwNywgQVI1S19QQ0lFX1NFUkRFUyk7CisKKwkJLyogUmVzZXQgU0VSREVTIHRvIGxvYWQgbmV3IHNldHRpbmdzICovCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwMCwgQVI1S19QQ0lFX1NFUkRFU19SRVNFVCk7CisJCW1kZWxheSgxKTsKKwl9CisKIAkvKiBHZXQgbWlzYyBjYXBhYmlsaXRpZXMgKi8KIAlyZXQgPSBhdGg1a19od19zZXRfY2FwYWJpbGl0aWVzKGFoKTsKIAlpZiAocmV0KSB7CkBAIC0zMDMsNiArMzIwLDEyIEBACiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCisJLyogQ3J5cHRvIHNldHRpbmdzICovCisJZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCWFoLT5haF9hZXNfc3VwcG9ydCA9IHNyZXYgPj0gQVI1S19TUkVWX0FSNTIxMl9WNCAmJgorCQkoZWUtPmVlX3ZlcnNpb24gPj0gQVI1S19FRVBST01fVkVSU0lPTl81XzAgJiYKKwkJICFBUjVLX0VFUFJPTV9BRVNfRElTKGVlLT5lZV9taXNjNSkpOworCiAJaWYgKHNyZXYgPj0gQVI1S19TUkVWX0FSMjQxNCkgewogCQlhaC0+YWhfY29tYmluZWRfbWljID0gdHJ1ZTsKIAkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfTUlTQ19NT0RFLApAQCAtMzE5LDYgKzM0Miw5IEBACiAKIAlhdGg1a19od19yZmdhaW5fb3B0X2luaXQoYWgpOwogCisJLyogdHVybiBvbiBIVyBMRURzICovCisJYXRoNWtfaHdfc2V0X2xlZHN0YXRlKGFoLCBBUjVLX0xFRF9JTklUKTsKKwogCXJldHVybiBhaDsKIGVycl9mcmVlOgogCWtmcmVlKGFoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCmluZGV4IDAyOWMxYmMuLjljNmFiNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwpAQCAtNTksNyArNTksNyBAQAogI2luY2x1ZGUgInJlZy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKLXN0YXRpYyBpbnQgYXRoNWtfY2FsaW50ZXJ2YWwgPSAxMDsgLyogQ2FsaWJyYXRlIFBIWSBldmVyeSAxMCBzZWNzIChUT0RPOiBGaXhtZSkgKi8KK3N0YXRpYyB1OCBhdGg1a19jYWxpbnRlcnZhbCA9IDEwOyAvKiBDYWxpYnJhdGUgUEhZIGV2ZXJ5IDEwIHNlY3MgKFRPRE86IEZpeG1lKSAqLwogc3RhdGljIGludCBtb2RwYXJhbV9ub2h3Y3J5cHQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBtb2RwYXJhbV9ub2h3Y3J5cHQsIGJvb2wsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhub2h3Y3J5cHQsICJEaXNhYmxlIGhhcmR3YXJlIGVuY3J5cHRpb24uIik7CkBAIC04NCwyNCArODQsMjQgQEAKIAogLyogS25vd24gUENJIGlkcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aDVrX3BjaV9pZF90YWJsZVtdID0gewotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMjA3KSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTAgfSwgLyogNTIxMCBlYXJseSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDA3KSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTAgfSwgLyogNTIxMCAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDExKSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTEgfSwgLyogNTMxMSAtIHRoaXMgaXMgb24gQUhCIGJ1cyAhKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxMiksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjExIH0sIC8qIDUyMTEgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxMyksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEyIH0sIC8qIDUyMTIgKi8KLQl7IFBDSV9WREVWSUNFKDNDT01fMiwgIDB4MDAxMyksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEyIH0sIC8qIDNjb20gNTIxMiAqLwotCXsgUENJX1ZERVZJQ0UoM0NPTSwgICAgMHgwMDEzKSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTIgfSwgLyogM2NvbSAzQ1JEQUc2NzUgNTIxMiAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgxMDE0KSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTIgfSwgLyogSUJNIG1pbmlwY2kgNTIxMiAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDE0KSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTIgfSwgLyogNTIxMiBjb21iYXRpYmxlICovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTUpLCAuZHJpdmVyX2RhdGEgPSBBUjVLX0FSNTIxMiB9LCAvKiA1MjEyIGNvbWJhdGlibGUgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxNiksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEyIH0sIC8qIDUyMTIgY29tYmF0aWJsZSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDE3KSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTIgfSwgLyogNTIxMiBjb21iYXRpYmxlICovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTgpLCAuZHJpdmVyX2RhdGEgPSBBUjVLX0FSNTIxMiB9LCAvKiA1MjEyIGNvbWJhdGlibGUgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxOSksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEyIH0sIC8qIDUyMTIgY29tYmF0aWJsZSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDFhKSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTIgfSwgLyogMjQxMyBHcmlmZmluLWxpdGUgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxYiksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEyIH0sIC8qIDU0MTMgRWFnbGUgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxYyksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEyIH0sIC8qIFBDSS1FIGNhcmRzICovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMWQpLCAuZHJpdmVyX2RhdGEgPSBBUjVLX0FSNTIxMiB9LCAvKiAyNDE3IE5hbGEgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDIwNykgfSwgLyogNTIxMCBlYXJseSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDA3KSB9LCAvKiA1MjEwICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTEpIH0sIC8qIDUzMTEgLSB0aGlzIGlzIG9uIEFIQiBidXMgISovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTIpIH0sIC8qIDUyMTEgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxMykgfSwgLyogNTIxMiAqLworCXsgUENJX1ZERVZJQ0UoM0NPTV8yLCAgMHgwMDEzKSB9LCAvKiAzY29tIDUyMTIgKi8KKwl7IFBDSV9WREVWSUNFKDNDT00sICAgIDB4MDAxMykgfSwgLyogM2NvbSAzQ1JEQUc2NzUgNTIxMiAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgxMDE0KSB9LCAvKiBJQk0gbWluaXBjaSA1MjEyICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTQpIH0sIC8qIDUyMTIgY29tYmF0aWJsZSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDE1KSB9LCAvKiA1MjEyIGNvbWJhdGlibGUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxNikgfSwgLyogNTIxMiBjb21iYXRpYmxlICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTcpIH0sIC8qIDUyMTIgY29tYmF0aWJsZSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDE4KSB9LCAvKiA1MjEyIGNvbWJhdGlibGUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxOSkgfSwgLyogNTIxMiBjb21iYXRpYmxlICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMWEpIH0sIC8qIDI0MTMgR3JpZmZpbi1saXRlICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMWIpIH0sIC8qIDU0MTMgRWFnbGUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxYykgfSwgLyogUENJLUUgY2FyZHMgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxZCkgfSwgLyogMjQxNyBOYWxhICovCiAJeyAwIH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRoNWtfcGNpX2lkX3RhYmxlKTsKQEAgLTIxOCw2ICsyMTgsOCBAQAogICogUHJvdG90eXBlcyAtIE1BQyA4MDIuMTEgc3RhY2sgcmVsYXRlZCBmdW5jdGlvbnMKICAqLwogc3RhdGljIGludCBhdGg1a190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitzdGF0aWMgaW50IGF0aDVrX3R4X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQlzdHJ1Y3QgYXRoNWtfdHhxICp0eHEpOwogc3RhdGljIGludCBhdGg1a19yZXNldChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4pOwogc3RhdGljIGludCBhdGg1a19yZXNldF93YWtlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIGludCBhdGg1a19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CkBAIC0yMjcsMTAgKzIyOSwxMiBAQAogc3RhdGljIHZvaWQgYXRoNWtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpOwogc3RhdGljIGludCBhdGg1a19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKTsKK3N0YXRpYyB1NjQgYXRoNWtfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCk7CiBzdGF0aWMgdm9pZCBhdGg1a19jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQl1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKIAkJdW5zaWduZWQgaW50ICpuZXdfZmxhZ3MsCi0JCWludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpOworCQl1NjQgbXVsdGljYXN0KTsKIHN0YXRpYyBpbnQgYXRoNWtfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJZW51bSBzZXRfa2V5X2NtZCBjbWQsCiAJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCkBAIC0yNDgsNiArMjUyLDggQEAKIAkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCiAJCXUzMiBjaGFuZ2VzKTsKK3N0YXRpYyB2b2lkIGF0aDVrX3N3X3NjYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworc3RhdGljIHZvaWQgYXRoNWtfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg1a19od19vcHMgPSB7CiAJLnR4IAkJPSBhdGg1a190eCwKQEAgLTI1Niw2ICsyNjIsNyBAQAogCS5hZGRfaW50ZXJmYWNlIAk9IGF0aDVrX2FkZF9pbnRlcmZhY2UsCiAJLnJlbW92ZV9pbnRlcmZhY2UgPSBhdGg1a19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcgCT0gYXRoNWtfY29uZmlnLAorCS5wcmVwYXJlX211bHRpY2FzdCA9IGF0aDVrX3ByZXBhcmVfbXVsdGljYXN0LAogCS5jb25maWd1cmVfZmlsdGVyID0gYXRoNWtfY29uZmlndXJlX2ZpbHRlciwKIAkuc2V0X2tleSAJPSBhdGg1a19zZXRfa2V5LAogCS5nZXRfc3RhdHMgCT0gYXRoNWtfZ2V0X3N0YXRzLApAQCAtMjY1LDYgKzI3Miw4IEBACiAJLnNldF90c2YgCT0gYXRoNWtfc2V0X3RzZiwKIAkucmVzZXRfdHNmIAk9IGF0aDVrX3Jlc2V0X3RzZiwKIAkuYnNzX2luZm9fY2hhbmdlZCA9IGF0aDVrX2Jzc19pbmZvX2NoYW5nZWQsCisJLnN3X3NjYW5fc3RhcnQJPSBhdGg1a19zd19zY2FuX3N0YXJ0LAorCS5zd19zY2FuX2NvbXBsZXRlID0gYXRoNWtfc3dfc2Nhbl9jb21wbGV0ZSwKIH07CiAKIC8qCkBAIC0yOTcsNyArMzA2LDggQEAKIHN0YXRpYyBpbnQgCWF0aDVrX3J4YnVmX3NldHVwKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCiAJCQkJc3RydWN0IGF0aDVrX2J1ZiAqYmYpOwogc3RhdGljIGludCAJYXRoNWtfdHhidWZfc2V0dXAoc3RydWN0IGF0aDVrX3NvZnRjICpzYywKLQkJCQlzdHJ1Y3QgYXRoNWtfYnVmICpiZik7CisJCQkJc3RydWN0IGF0aDVrX2J1ZiAqYmYsCisJCQkJc3RydWN0IGF0aDVrX3R4cSAqdHhxKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGg1a190eGJ1Zl9mcmVlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCiAJCQkJc3RydWN0IGF0aDVrX2J1ZiAqYmYpCiB7CkBAIC0zNjksNyArMzc5LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGg1a19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCAJYXRoNWtfdGFza2xldF9yZXNldCh1bnNpZ25lZCBsb25nIGRhdGEpOwogCi1zdGF0aWMgdm9pZCAJYXRoNWtfY2FsaWJyYXRlKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCAJYXRoNWtfdGFza2xldF9jYWxpYnJhdGUodW5zaWduZWQgbG9uZyBkYXRhKTsKIAogLyoKICAqIE1vZHVsZSBpbml0L2V4aXQgZnVuY3Rpb25zCkBAIC00NjQsNyArNDc0LDcgQEAKIAkJICogRE1BIHRvIHdvcmsgc28gZm9yY2UgYSByZWFzb25hYmxlIHZhbHVlIGhlcmUgaWYgaXQKIAkJICogY29tZXMgdXAgemVyby4KIAkJICovCi0JCWNzeiA9IEwxX0NBQ0hFX0JZVEVTIC8gc2l6ZW9mKHUzMik7CisJCWNzeiA9IEwxX0NBQ0hFX0JZVEVTID4+IDI7CiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCBjc3opOwogCX0KIAkvKgpAQCAtNTEyLDYgKzUyMiw3IEBACiAJLyogSW5pdGlhbGl6ZSBkcml2ZXIgcHJpdmF0ZSBkYXRhICovCiAJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOwogCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAorCQkgICAgSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8CiAJCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CiAJCSAgICBJRUVFODAyMTFfSFdfTk9JU0VfREJNOwogCkBAIC01MzYsNyArNTQ3LDcgQEAKIAlfX3NldF9iaXQoQVRIX1NUQVRfSU5WQUxJRCwgc2MtPnN0YXR1cyk7CiAKIAlzYy0+aW9iYXNlID0gbWVtOyAvKiBTbyB3ZSBjYW4gdW5tYXAgaXQgb24gZGV0YWNoICovCi0Jc2MtPmNhY2hlbHN6ID0gY3N6ICogc2l6ZW9mKHUzMik7IC8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KKwlzYy0+Y29tbW9uLmNhY2hlbHN6ID0gY3N6IDw8IDI7IC8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KIAlzYy0+b3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKIAlzYy0+YmludHZhbCA9IDEwMDA7CiAJbXV0ZXhfaW5pdCgmc2MtPmxvY2spOwpAQCAtNTU1LDcgKzU2Niw3IEBACiAJfQogCiAJLyogSW5pdGlhbGl6ZSBkZXZpY2UgKi8KLQlzYy0+YWggPSBhdGg1a19od19hdHRhY2goc2MsIGlkLT5kcml2ZXJfZGF0YSk7CisJc2MtPmFoID0gYXRoNWtfaHdfYXR0YWNoKHNjKTsKIAlpZiAoSVNfRVJSKHNjLT5haCkpIHsKIAkJcmV0ID0gUFRSX0VSUihzYy0+YWgpOwogCQlnb3RvIGVycl9pcnE7CkBAIC02NjYsNyArNjc3LDYgQEAKIAogCWF0aDVrX2xlZF9vZmYoc2MpOwogCi0JZnJlZV9pcnEocGRldi0+aXJxLCBzYyk7CiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKQEAgLTY5NCwxOCArNzA0LDggQEAKIAkgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg0MSwgMCk7CiAKLQllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGF0aDVrX2ludHIsIElSUUZfU0hBUkVELCAiYXRoIiwgc2MpOwotCWlmIChlcnIpIHsKLQkJQVRINUtfRVJSKHNjLCAicmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKLQkJZ290byBlcnJfbm9faXJxOwotCX0KLQogCWF0aDVrX2xlZF9lbmFibGUoc2MpOwogCXJldHVybiAwOwotCi1lcnJfbm9faXJxOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlyZXR1cm4gZXJyOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCkBAIC03MTgsOSArNzE4LDkgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdpcGh5X3RvX2llZWU4MDIxMV9odyh3aXBoeSk7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVnID0gJnNjLT5haC0+YWhfcmVndWxhdG9yeTsKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSAmc2MtPmNvbW1vbi5yZWd1bGF0b3J5OwogCi0JcmV0dXJuIGF0aF9yZWdfbm90aWZpZXJfYXBwbHkod2lwaHksIHJlcXVlc3QsIHJlZyk7CisJcmV0dXJuIGF0aF9yZWdfbm90aWZpZXJfYXBwbHkod2lwaHksIHJlcXVlc3QsIHJlZ3VsYXRvcnkpOwogfQogCiBzdGF0aWMgaW50CkBAIC03MjgsNiArNzI4LDcgQEAKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CiAJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSAmc2MtPmNvbW1vbi5yZWd1bGF0b3J5OwogCXU4IG1hY1tFVEhfQUxFTl0gPSB7fTsKIAlpbnQgcmV0OwogCkBAIC03ODUsMTkgKzc4NiwyNSBAQAogCQlnb3RvIGVycl9kZXNjOwogCX0KIAlzYy0+YmhhbHEgPSByZXQ7CisJc2MtPmNhYnEgPSBhdGg1a190eHFfc2V0dXAoc2MsIEFSNUtfVFhfUVVFVUVfQ0FCLCAwKTsKKwlpZiAoSVNfRVJSKHNjLT5jYWJxKSkgeworCQlBVEg1S19FUlIoc2MsICJjYW4ndCBzZXR1cCBjYWIgcXVldWVcbiIpOworCQlyZXQgPSBQVFJfRVJSKHNjLT5jYWJxKTsKKwkJZ290byBlcnJfYmhhbDsKKwl9CiAKIAlzYy0+dHhxID0gYXRoNWtfdHhxX3NldHVwKHNjLCBBUjVLX1RYX1FVRVVFX0RBVEEsIEFSNUtfV01FX0FDX0JLKTsKIAlpZiAoSVNfRVJSKHNjLT50eHEpKSB7CiAJCUFUSDVLX0VSUihzYywgImNhbid0IHNldHVwIHhtaXQgcXVldWVcbiIpOwogCQlyZXQgPSBQVFJfRVJSKHNjLT50eHEpOwotCQlnb3RvIGVycl9iaGFsOworCQlnb3RvIGVycl9xdWV1ZXM7CiAJfQogCiAJdGFza2xldF9pbml0KCZzYy0+cnh0cSwgYXRoNWtfdGFza2xldF9yeCwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXRhc2tsZXRfaW5pdCgmc2MtPnR4dHEsIGF0aDVrX3Rhc2tsZXRfdHgsICh1bnNpZ25lZCBsb25nKXNjKTsKIAl0YXNrbGV0X2luaXQoJnNjLT5yZXN0cSwgYXRoNWtfdGFza2xldF9yZXNldCwgKHVuc2lnbmVkIGxvbmcpc2MpOworCXRhc2tsZXRfaW5pdCgmc2MtPmNhbGliLCBhdGg1a190YXNrbGV0X2NhbGlicmF0ZSwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXRhc2tsZXRfaW5pdCgmc2MtPmJlYWNvbnRxLCBhdGg1a190YXNrbGV0X2JlYWNvbiwgKHVuc2lnbmVkIGxvbmcpc2MpOwotCXNldHVwX3RpbWVyKCZzYy0+Y2FsaWJfdGltLCBhdGg1a19jYWxpYnJhdGUsICh1bnNpZ25lZCBsb25nKXNjKTsKIAogCXJldCA9IGF0aDVrX2VlcHJvbV9yZWFkX21hYyhhaCwgbWFjKTsKIAlpZiAocmV0KSB7CkBAIC04MTEsOSArODE4LDggQEAKIAltZW1zZXQoc2MtPmJzc2lkbWFzaywgMHhmZiwgRVRIX0FMRU4pOwogCWF0aDVrX2h3X3NldF9ic3NpZF9tYXNrKHNjLT5haCwgc2MtPmJzc2lkbWFzayk7CiAKLQlhaC0+YWhfcmVndWxhdG9yeS5jdXJyZW50X3JkID0KLQkJYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tLmVlX3JlZ2RvbWFpbjsKLQlyZXQgPSBhdGhfcmVnZF9pbml0KCZhaC0+YWhfcmVndWxhdG9yeSwgaHctPndpcGh5LCBhdGg1a19yZWdfbm90aWZpZXIpOworCXJlZ3VsYXRvcnktPmN1cnJlbnRfcmQgPSBhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb20uZWVfcmVnZG9tYWluOworCXJldCA9IGF0aF9yZWdkX2luaXQocmVndWxhdG9yeSwgaHctPndpcGh5LCBhdGg1a19yZWdfbm90aWZpZXIpOwogCWlmIChyZXQpIHsKIAkJQVRINUtfRVJSKHNjLCAiY2FuJ3QgaW5pdGlhbGl6ZSByZWd1bGF0b3J5IHN5c3RlbVxuIik7CiAJCWdvdG8gZXJyX3F1ZXVlczsKQEAgLTgyNSw4ICs4MzEsOCBAQAogCQlnb3RvIGVycl9xdWV1ZXM7CiAJfQogCi0JaWYgKCFhdGhfaXNfd29ybGRfcmVnZCgmc2MtPmFoLT5haF9yZWd1bGF0b3J5KSkKLQkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgc2MtPmFoLT5haF9yZWd1bGF0b3J5LmFscGhhMik7CisJaWYgKCFhdGhfaXNfd29ybGRfcmVnZChyZWd1bGF0b3J5KSkKKwkJcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgcmVndWxhdG9yeS0+YWxwaGEyKTsKIAogCWF0aDVrX2luaXRfbGVkcyhzYyk7CiAKQEAgLTEwNjgsMTAgKzEwNzQsOSBAQAogfQogCiAvKgotICogU2V0L2NoYW5nZSBjaGFubmVscy4gIElmIHRoZSBjaGFubmVsIGlzIHJlYWxseSBiZWluZyBjaGFuZ2VkLAotICogaXQncyBkb25lIGJ5IHJlc2V0aW5nIHRoZSBjaGlwLiAgVG8gYWNjb21wbGlzaCB0aGlzIHdlIG11c3QKLSAqIGZpcnN0IGNsZWFudXAgYW55IHBlbmRpbmcgRE1BLCB0aGVuIHJlc3RhcnQgc3R1ZmYgYWZ0ZXIgYSBsYQotICogYXRoNWtfaW5pdC4KKyAqIFNldC9jaGFuZ2UgY2hhbm5lbHMuIFdlIGFsd2F5cyByZXNldCB0aGUgY2hpcC4KKyAqIFRvIGFjY29tcGxpc2ggdGhpcyB3ZSBtdXN0IGZpcnN0IGNsZWFudXAgYW55IHBlbmRpbmcgRE1BLAorICogdGhlbiByZXN0YXJ0IHN0dWZmIGFmdGVyIGEgbGEgIGF0aDVrX2luaXQuCiAgKgogICogQ2FsbGVkIHdpdGggc2MtPmxvY2suCiAgKi8KQEAgLTEwODEsMTkgKzEwODYsMTMgQEAKIAlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULCAiKCV1IE1IeikgLT4gKCV1IE1IeilcbiIsCiAJCXNjLT5jdXJjaGFuLT5jZW50ZXJfZnJlcSwgY2hhbi0+Y2VudGVyX2ZyZXEpOwogCi0JaWYgKGNoYW4tPmNlbnRlcl9mcmVxICE9IHNjLT5jdXJjaGFuLT5jZW50ZXJfZnJlcSB8fAotCQljaGFuLT5od192YWx1ZSAhPSBzYy0+Y3VyY2hhbi0+aHdfdmFsdWUpIHsKLQotCQkvKgotCQkgKiBUbyBzd2l0Y2ggY2hhbm5lbHMgY2xlYXIgYW55IHBlbmRpbmcgRE1BIG9wZXJhdGlvbnM7Ci0JCSAqIHdhaXQgbG9uZyBlbm91Z2ggZm9yIHRoZSBSWCBmaWZvIHRvIGRyYWluLCByZXNldCB0aGUKLQkJICogaGFyZHdhcmUgYXQgdGhlIG5ldyBmcmVxdWVuY3ksIGFuZCB0aGVuIHJlLWVuYWJsZQotCQkgKiB0aGUgcmVsZXZhbnQgYml0cyBvZiB0aGUgaC93LgotCQkgKi8KLQkJcmV0dXJuIGF0aDVrX3Jlc2V0KHNjLCBjaGFuKTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwkvKgorCSAqIFRvIHN3aXRjaCBjaGFubmVscyBjbGVhciBhbnkgcGVuZGluZyBETUEgb3BlcmF0aW9uczsKKwkgKiB3YWl0IGxvbmcgZW5vdWdoIGZvciB0aGUgUlggZmlmbyB0byBkcmFpbiwgcmVzZXQgdGhlCisJICogaGFyZHdhcmUgYXQgdGhlIG5ldyBmcmVxdWVuY3ksIGFuZCB0aGVuIHJlLWVuYWJsZQorCSAqIHRoZSByZWxldmFudCBiaXRzIG9mIHRoZSBoL3cuCisJICovCisJcmV0dXJuIGF0aDVrX3Jlc2V0KHNjLCBjaGFuKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTExMTQsNiArMTExMyw4IEBACiAJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKIAl1MzIgcmZpbHQ7CiAKKwlhaC0+YWhfb3BfbW9kZSA9IHNjLT5vcG1vZGU7CisKIAkvKiBjb25maWd1cmUgcnggZmlsdGVyICovCiAJcmZpbHQgPSBzYy0+ZmlsdGVyX2ZsYWdzOwogCWF0aDVrX2h3X3NldF9yeF9maWx0ZXIoYWgsIHJmaWx0KTsKQEAgLTExNTMsMjcgKzExNTQsMjAgQEAKIHN0cnVjdCBza19idWZmICphdGg1a19yeF9za2JfYWxsb2Moc3RydWN0IGF0aDVrX3NvZnRjICpzYywgZG1hX2FkZHJfdCAqc2tiX2FkZHIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBpbnQgb2ZmOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBidWZmZXIgd2l0aCBoZWFkcm9vbV9uZWVkZWQgc3BhY2UgZm9yIHRoZQogCSAqIGZha2UgcGh5c2ljYWwgbGF5ZXIgaGVhZGVyIGF0IHRoZSBzdGFydC4KIAkgKi8KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNjLT5yeGJ1ZnNpemUgKyBzYy0+Y2FjaGVsc3ogLSAxKTsKKwlza2IgPSBhdGhfcnhidWZfYWxsb2MoJnNjLT5jb21tb24sCisJCQkgICAgICBzYy0+cnhidWZzaXplICsgc2MtPmNvbW1vbi5jYWNoZWxzeiAtIDEsCisJCQkgICAgICBHRlBfQVRPTUlDKTsKIAogCWlmICghc2tiKSB7CiAJCUFUSDVLX0VSUihzYywgImNhbid0IGFsbG9jIHNrYnVmZiBvZiBzaXplICV1XG4iLAotCQkJCXNjLT5yeGJ1ZnNpemUgKyBzYy0+Y2FjaGVsc3ogLSAxKTsKKwkJCQlzYy0+cnhidWZzaXplICsgc2MtPmNvbW1vbi5jYWNoZWxzeiAtIDEpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JLyoKLQkgKiBDYWNoZS1saW5lLWFsaWduLiAgVGhpcyBpcyBpbXBvcnRhbnQgKGZvciB0aGUKLQkgKiA1MjEwIGF0IGxlYXN0KSBhcyBub3QgZG9pbmcgc28gY2F1c2VzIGJvZ3VzIGRhdGEKLQkgKiBpbiByeCdkIGZyYW1lcy4KLQkgKi8KLQlvZmYgPSAoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhKSAlIHNjLT5jYWNoZWxzejsKLQlpZiAob2ZmICE9IDApCi0JCXNrYl9yZXNlcnZlKHNrYiwgc2MtPmNhY2hlbHN6IC0gb2ZmKTsKIAogCSpza2JfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHNjLT5wZGV2LAogCQlza2ItPmRhdGEsIHNjLT5yeGJ1ZnNpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CkBAIC0xMjI4LDEwICsxMjIyLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLWF0aDVrX3R4YnVmX3NldHVwKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBhdGg1a19idWYgKmJmKQorYXRoNWtfdHhidWZfc2V0dXAoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2J1ZiAqYmYsCisJCSAgc3RydWN0IGF0aDVrX3R4cSAqdHhxKQogewogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7Ci0Jc3RydWN0IGF0aDVrX3R4cSAqdHhxID0gc2MtPnR4cTsKIAlzdHJ1Y3QgYXRoNWtfZGVzYyAqZHMgPSBiZi0+ZGVzYzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYmYtPnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CkBAIC0xNjE1LDEwICsxNjA5LDEwIEBACiAJc3RydWN0IGF0aDVrX2J1ZiAqYmY7CiAJaW50IHJldDsKIAotCXNjLT5yeGJ1ZnNpemUgPSByb3VuZHVwKElFRUU4MDIxMV9NQVhfTEVOLCBzYy0+Y2FjaGVsc3opOworCXNjLT5yeGJ1ZnNpemUgPSByb3VuZHVwKElFRUU4MDIxMV9NQVhfTEVOLCBzYy0+Y29tbW9uLmNhY2hlbHN6KTsKIAogCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfUkVTRVQsICJjYWNoZWxzeiAldSByeGJ1ZnNpemUgJXVcbiIsCi0JCXNjLT5jYWNoZWxzeiwgc2MtPnJ4YnVmc2l6ZSk7CisJCXNjLT5jb21tb24uY2FjaGVsc3osIHNjLT5yeGJ1ZnNpemUpOwogCiAJc3Bpbl9sb2NrX2JoKCZzYy0+cnhidWZsb2NrKTsKIAlzYy0+cnhsaW5rID0gTlVMTDsKQEAgLTE3NDcsNyArMTc0MSw3IEBACiBzdGF0aWMgdm9pZAogYXRoNWtfdGFza2xldF9yeCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhzID0ge307CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4czsKIAlzdHJ1Y3QgYXRoNWtfcnhfc3RhdHVzIHJzID0ge307CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5leHRfc2tiOwogCWRtYV9hZGRyX3QgbmV4dF9za2JfYWRkcjsKQEAgLTE3NTcsNiArMTc1MSw3IEBACiAJaW50IHJldDsKIAlpbnQgaGRybGVuOwogCWludCBwYWRzaXplOworCWludCByeF9mbGFnOwogCiAJc3Bpbl9sb2NrKCZzYy0+cnhidWZsb2NrKTsKIAlpZiAobGlzdF9lbXB0eSgmc2MtPnJ4YnVmKSkgewpAQCAtMTc2NCw3ICsxNzU5LDcgQEAKIAkJZ290byB1bmxvY2s7CiAJfQogCWRvIHsKLQkJcnhzLmZsYWcgPSAwOworCQlyeF9mbGFnID0gMDsKIAogCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT5yeGJ1Ziwgc3RydWN0IGF0aDVrX2J1ZiwgbGlzdCk7CiAJCUJVR19PTihiZi0+c2tiID09IE5VTEwpOwpAQCAtMTgwOCw3ICsxODAzLDcgQEAKIAkJCQkJZ290byBhY2NlcHQ7CiAJCQl9CiAJCQlpZiAocnMucnNfc3RhdHVzICYgQVI1S19SWEVSUl9NSUMpIHsKLQkJCQlyeHMuZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7CisJCQkJcnhfZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7CiAJCQkJZ290byBhY2NlcHQ7CiAJCQl9CiAKQEAgLTE4NDYsNiArMTg0MSw3IEBACiAJCQltZW1tb3ZlKHNrYi0+ZGF0YSArIHBhZHNpemUsIHNrYi0+ZGF0YSwgaGRybGVuKTsKIAkJCXNrYl9wdWxsKHNrYiwgcGFkc2l6ZSk7CiAJCX0KKwkJcnhzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAKIAkJLyoKIAkJICogYWx3YXlzIGV4dGVuZCB0aGUgbWFjIHRpbWVzdGFtcCwgc2luY2UgdGhpcyBpbmZvcm1hdGlvbiBpcwpAQCAtMTg2Nyw0MSArMTg2Myw0MSBAQAogCQkgKiBpbXBvc3NpYmxlIHRvIGNvbXBseSB0byB0aGF0LiBUaGlzIGFmZmVjdHMgSUJTUyBtZXJnZSBvbmx5CiAJCSAqIHJpZ2h0IG5vdywgc28gaXQncyBub3QgdG9vIGJhZC4uLgogCQkgKi8KLQkJcnhzLm1hY3RpbWUgPSBhdGg1a19leHRlbmRfdHNmKHNjLT5haCwgcnMucnNfdHN0YW1wKTsKLQkJcnhzLmZsYWcgfD0gUlhfRkxBR19UU0ZUOworCQlyeHMtPm1hY3RpbWUgPSBhdGg1a19leHRlbmRfdHNmKHNjLT5haCwgcnMucnNfdHN0YW1wKTsKKwkJcnhzLT5mbGFnID0gcnhfZmxhZyB8IFJYX0ZMQUdfVFNGVDsKIAotCQlyeHMuZnJlcSA9IHNjLT5jdXJjaGFuLT5jZW50ZXJfZnJlcTsKLQkJcnhzLmJhbmQgPSBzYy0+Y3VyYmFuZC0+YmFuZDsKKwkJcnhzLT5mcmVxID0gc2MtPmN1cmNoYW4tPmNlbnRlcl9mcmVxOworCQlyeHMtPmJhbmQgPSBzYy0+Y3VyYmFuZC0+YmFuZDsKIAotCQlyeHMubm9pc2UgPSBzYy0+YWgtPmFoX25vaXNlX2Zsb29yOwotCQlyeHMuc2lnbmFsID0gcnhzLm5vaXNlICsgcnMucnNfcnNzaTsKKwkJcnhzLT5ub2lzZSA9IHNjLT5haC0+YWhfbm9pc2VfZmxvb3I7CisJCXJ4cy0+c2lnbmFsID0gcnhzLT5ub2lzZSArIHJzLnJzX3Jzc2k7CiAKIAkJLyogQW4gcnNzaSBvZiAzNSBpbmRpY2F0ZXMgeW91IHNob3VsZCBiZSBhYmxlIHVzZQogCQkgKiA1NCBNYnBzIHJlbGlhYmx5LiBBIG1vcmUgZWxhYm9yYXRlIHNjaGVtZSBjYW4gYmUgdXNlZAogCQkgKiBoZXJlIGJ1dCBpdCByZXF1aXJlcyBhIG1hcCBvZiBTTlIvdGhyb3VnaHB1dCBmb3IgZWFjaAogCQkgKiBwb3NzaWJsZSBtb2RlIHVzZWQgKi8KLQkJcnhzLnF1YWwgPSBycy5yc19yc3NpICogMTAwIC8gMzU7CisJCXJ4cy0+cXVhbCA9IHJzLnJzX3Jzc2kgKiAxMDAgLyAzNTsKIAogCQkvKiByc3NpIGNhbiBiZSBtb3JlIHRoYW4gMzUgdGhvdWdoLCBhbnl0aGluZyBhYm92ZSB0aGF0CiAJCSAqIHNob3VsZCBiZSBjb25zaWRlcmVkIGF0IDEwMCUgKi8KLQkJaWYgKHJ4cy5xdWFsID4gMTAwKQotCQkJcnhzLnF1YWwgPSAxMDA7CisJCWlmIChyeHMtPnF1YWwgPiAxMDApCisJCQlyeHMtPnF1YWwgPSAxMDA7CiAKLQkJcnhzLmFudGVubmEgPSBycy5yc19hbnRlbm5hOwotCQlyeHMucmF0ZV9pZHggPSBhdGg1a19od190b19kcml2ZXJfcml4KHNjLCBycy5yc19yYXRlKTsKLQkJcnhzLmZsYWcgfD0gYXRoNWtfcnhfZGVjcnlwdGVkKHNjLCBkcywgc2tiLCAmcnMpOworCQlyeHMtPmFudGVubmEgPSBycy5yc19hbnRlbm5hOworCQlyeHMtPnJhdGVfaWR4ID0gYXRoNWtfaHdfdG9fZHJpdmVyX3JpeChzYywgcnMucnNfcmF0ZSk7CisJCXJ4cy0+ZmxhZyB8PSBhdGg1a19yeF9kZWNyeXB0ZWQoc2MsIGRzLCBza2IsICZycyk7CiAKLQkJaWYgKHJ4cy5yYXRlX2lkeCA+PSAwICYmIHJzLnJzX3JhdGUgPT0KLQkJICAgIHNjLT5jdXJiYW5kLT5iaXRyYXRlc1tyeHMucmF0ZV9pZHhdLmh3X3ZhbHVlX3Nob3J0KQotCQkJcnhzLmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKKwkJaWYgKHJ4cy0+cmF0ZV9pZHggPj0gMCAmJiBycy5yc19yYXRlID09CisJCSAgICBzYy0+Y3VyYmFuZC0+Yml0cmF0ZXNbcnhzLT5yYXRlX2lkeF0uaHdfdmFsdWVfc2hvcnQpCisJCQlyeHMtPmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKIAogCQlhdGg1a19kZWJ1Z19kdW1wX3NrYihzYywgc2tiLCAiUlggICIsIDApOwogCiAJCS8qIGNoZWNrIGJlYWNvbnMgaW4gSUJTUyBtb2RlICovCiAJCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJYXRoNWtfY2hlY2tfaWJzc190c2Yoc2MsIHNrYiwgJnJ4cyk7CisJCQlhdGg1a19jaGVja19pYnNzX3RzZihzYywgc2tiLCByeHMpOwogCi0JCV9faWVlZTgwMjExX3J4KHNjLT5odywgc2tiLCAmcnhzKTsKKwkJaWVlZTgwMjExX3J4KHNjLT5odywgc2tiKTsKIAogCQliZi0+c2tiID0gbmV4dF9za2I7CiAJCWJmLT5za2JhZGRyID0gbmV4dF9za2JfYWRkcjsKQEAgLTE5OTQsOSArMTk5MCwxMiBAQAogc3RhdGljIHZvaWQKIGF0aDVrX3Rhc2tsZXRfdHgodW5zaWduZWQgbG9uZyBkYXRhKQogeworCWludCBpOwogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSAodm9pZCAqKWRhdGE7CiAKLQlhdGg1a190eF9wcm9jZXNzcShzYywgc2MtPnR4cSk7CisJZm9yIChpPTA7IGkgPCBBUjVLX05VTV9UWF9RVUVVRVM7IGkrKykKKwkJaWYgKHNjLT50eHFzW2ldLnNldHVwICYmIChzYy0+YWgtPmFoX3R4cV9pc3IgJiBCSVQoaSkpKQorCQkJYXRoNWtfdHhfcHJvY2Vzc3Eoc2MsICZzYy0+dHhxc1tpXSk7CiB9CiAKIApAQCAtMjA3OCwxMyArMjA3Nyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgYXRoNWtfYmVhY29uX2Rpc2FibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlzYy0+aW1hc2sgJj0gfihBUjVLX0lOVF9CTUlTUyB8IEFSNUtfSU5UX1NXQkEpOwotCWF0aDVrX2h3X3NldF9pbXIoc2MtPmFoLCBzYy0+aW1hc2spOwotCWF0aDVrX2h3X3N0b3BfdHhfZG1hKHNjLT5haCwgc2MtPmJoYWxxKTsKLX0KLQogLyoKICAqIFRyYW5zbWl0IGEgYmVhY29uIGZyYW1lIGF0IFNXQkEuICBEeW5hbWljIHVwZGF0ZXMgdG8gdGhlCiAgKiBmcmFtZSBjb250ZW50cyBhcmUgZG9uZSBhcyBuZWVkZWQgYW5kIHRoZSBzbG90IHRpbWUgaXMKQEAgLTIwOTgsNiArMjA5MCw3IEBACiB7CiAJc3RydWN0IGF0aDVrX2J1ZiAqYmYgPSBzYy0+YmJ1ZjsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOworCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlBVEg1S19EQkdfVU5MSU1JVChzYywgQVRINUtfREVCVUdfQkVBQ09OLCAiaW4gYmVhY29uX3NlbmRcbiIpOwogCkBAIC0yMTUxLDYgKzIxNDQsMTIgQEAKIAlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX0JFQUNPTiwgIlRYRFBbJXVdID0gJWxseCAoJXApXG4iLAogCQlzYy0+YmhhbHEsICh1bnNpZ25lZCBsb25nIGxvbmcpYmYtPmRhZGRyLCBiZi0+ZGVzYyk7CiAKKwlza2IgPSBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKHNjLT5odywgc2MtPnZpZik7CisJd2hpbGUgKHNrYikgeworCQlhdGg1a190eF9xdWV1ZShzYy0+aHcsIHNrYiwgc2MtPmNhYnEpOworCQlza2IgPSBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKHNjLT5odywgc2MtPnZpZik7CisJfQorCiAJc2MtPmJzZW50Kys7CiB9CiAKQEAgLTIyNzEsMTMgKzIyNzAsMTEgQEAKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlhdGg1a19od19zZXRfaW1yKGFoLCAwKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmJsb2NrLCBmbGFncyk7CiAJc2MtPmJtaXNzY291bnQgPSAwOwogCXNjLT5pbWFzayAmPSB+KEFSNUtfSU5UX0JNSVNTIHwgQVI1S19JTlRfU1dCQSk7CiAKLQlpZiAoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAotCQkJc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UIHx8Ci0JCQlzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJaWYgKHNjLT5lbmFibGVfYmVhY29uKSB7CiAJCS8qCiAJCSAqIEluIElCU1MgbW9kZSB3ZSB1c2UgYSBzZWxmLWxpbmtlZCB0eCBkZXNjcmlwdG9yIGFuZCBsZXQgdGhlCiAJCSAqIGhhcmR3YXJlIHNlbmQgdGhlIGJlYWNvbnMgYXV0b21hdGljYWxseS4gV2UgaGF2ZSB0byBsb2FkIGl0CkBAIC0yMjkwLDE2ICsyMjg3LDE3IEBACiAJCXNjLT5pbWFzayB8PSBBUjVLX0lOVF9TV0JBOwogCiAJCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCQlpZiAoYXRoNWtfaHdfaGFzdmVvbChhaCkpIHsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmJsb2NrLCBmbGFncyk7CisJCQlpZiAoYXRoNWtfaHdfaGFzdmVvbChhaCkpCiAJCQkJYXRoNWtfYmVhY29uX3NlbmQoc2MpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5ibG9jaywgZmxhZ3MpOwotCQkJfQogCQl9IGVsc2UKIAkJCWF0aDVrX2JlYWNvbl91cGRhdGVfdGltZXJzKHNjLCAtMSk7CisJfSBlbHNlIHsKKwkJYXRoNWtfaHdfc3RvcF90eF9kbWEoc2MtPmFoLCBzYy0+YmhhbHEpOwogCX0KIAogCWF0aDVrX2h3X3NldF9pbXIoYWgsIHNjLT5pbWFzayk7CisJbW1pb3diKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmJsb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDVrX3Rhc2tsZXRfYmVhY29uKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTIzNjMsNyArMjM2MSw3IEBACiAJc2MtPmN1cmJhbmQgPSAmc2MtPnNiYW5kc1tzYy0+Y3VyY2hhbi0+YmFuZF07CiAJc2MtPmltYXNrID0gQVI1S19JTlRfUlhPSyB8IEFSNUtfSU5UX1JYRVJSIHwgQVI1S19JTlRfUlhFT0wgfAogCQlBUjVLX0lOVF9SWE9STiB8IEFSNUtfSU5UX1RYREVTQyB8IEFSNUtfSU5UX1RYRU9MIHwKLQkJQVI1S19JTlRfRkFUQUwgfCBBUjVLX0lOVF9HTE9CQUw7CisJCUFSNUtfSU5UX0ZBVEFMIHwgQVI1S19JTlRfR0xPQkFMIHwgQVI1S19JTlRfU1dJOwogCXJldCA9IGF0aDVrX3Jlc2V0KHNjLCBOVUxMKTsKIAlpZiAocmV0KQogCQlnb3RvIGRvbmU7CkBAIC0yMzgwLDggKzIzNzgsOCBAQAogCS8qIFNldCBhY2sgdG8gYmUgc2VudCBhdCBsb3cgYml0LXJhdGVzICovCiAJYXRoNWtfaHdfc2V0X2Fja19iaXRyYXRlX2hpZ2goYWgsIGZhbHNlKTsKIAotCW1vZF90aW1lcigmc2MtPmNhbGliX3RpbSwgcm91bmRfamlmZmllcyhqaWZmaWVzICsKLQkJCW1zZWNzX3RvX2ppZmZpZXMoYXRoNWtfY2FsaW50ZXJ2YWwgKiAxMDAwKSkpOworCS8qIFNldCBQSFkgY2FsaWJyYXRpb24gaW50ZXZhbCAqLworCWFoLT5haF9jYWxfaW50dmFsID0gYXRoNWtfY2FsaW50ZXJ2YWw7CiAKIAlyZXQgPSAwOwogZG9uZToKQEAgLTI0NDUsMzcgKzI0NDMsMzkgQEAKIAlyZXQgPSBhdGg1a19zdG9wX2xvY2tlZChzYyk7CiAJaWYgKHJldCA9PSAwICYmICF0ZXN0X2JpdChBVEhfU1RBVF9JTlZBTElELCBzYy0+c3RhdHVzKSkgewogCQkvKgotCQkgKiBTZXQgdGhlIGNoaXAgaW4gZnVsbCBzbGVlcCBtb2RlLiAgTm90ZSB0aGF0IHdlIGFyZQotCQkgKiBjYXJlZnVsIHRvIGRvIHRoaXMgb25seSB3aGVuIGJyaW5naW5nIHRoZSBpbnRlcmZhY2UKLQkJICogY29tcGxldGVseSB0byBhIHN0b3AuICBXaGVuIHRoZSBjaGlwIGlzIGluIHRoaXMgc3RhdGUKLQkJICogaXQgbXVzdCBiZSBjYXJlZnVsbHkgd29rZW4gdXAgb3IgcmVmZXJlbmNlcyB0bwotCQkgKiByZWdpc3RlcnMgaW4gdGhlIFBDSSBjbG9jayBkb21haW4gbWF5IGZyZWV6ZSB0aGUgYnVzCi0JCSAqIChhbmQgc3lzdGVtKS4gIFRoaXMgdmFyaWVzIGJ5IGNoaXAgYW5kIGlzIG1vc3RseSBhbgotCQkgKiBpc3N1ZSB3aXRoIG5ld2VyIHBhcnRzIHRoYXQgZ28gdG8gc2xlZXAgbW9yZSBxdWlja2x5LgotCQkgKi8KLQkJaWYgKHNjLT5haC0+YWhfbWFjX3NyZXYgPj0gMHg3OCkgewotCQkJLyoKLQkJCSAqIFhYWAotCQkJICogZG9uJ3QgcHV0IG5ld2VyIE1BQyByZXZpc2lvbnMgPiA3LjggdG8gc2xlZXAgYmVjYXVzZQotCQkJICogb2YgdGhlIGFib3ZlIG1lbnRpb25lZCBwcm9ibGVtcwotCQkJICovCi0JCQlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULCAibWFjIHZlcnNpb24gPiA3LjgsICIKLQkJCQkibm90IHB1dHRpbmcgZGV2aWNlIHRvIHNsZWVwXG4iKTsKLQkJfSBlbHNlIHsKLQkJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfUkVTRVQsCi0JCQkJInB1dHRpbmcgZGV2aWNlIHRvIGZ1bGwgc2xlZXBcbiIpOwotCQkJYXRoNWtfaHdfc2V0X3Bvd2VyKHNjLT5haCwgQVI1S19QTV9GVUxMX1NMRUVQLCB0cnVlLCAwKTsKLQkJfQorCQkgKiBEb24ndCBzZXQgdGhlIGNhcmQgaW4gZnVsbCBzbGVlcCBtb2RlIQorCQkgKgorCQkgKiBhKSBXaGVuIHRoZSBkZXZpY2UgaXMgaW4gdGhpcyBzdGF0ZSBpdCBtdXN0IGJlIGNhcmVmdWxseQorCQkgKiB3b2tlbiB1cCBvciByZWZlcmVuY2VzIHRvIHJlZ2lzdGVycyBpbiB0aGUgUENJIGNsb2NrCisJCSAqIGRvbWFpbiBtYXkgZnJlZXplIHRoZSBidXMgKGFuZCBzeXN0ZW0pLiAgVGhpcyB2YXJpZXMKKwkJICogYnkgY2hpcCBhbmQgaXMgbW9zdGx5IGFuIGlzc3VlIHdpdGggbmV3ZXIgcGFydHMKKwkJICogKG1hZHdpZmkgc291cmNlcyBtZW50aW9uZWQgc3JldiA+PSAweDc4KSB0aGF0IGdvIHRvCisJCSAqIHNsZWVwIG1vcmUgcXVpY2tseS4KKwkJICoKKwkJICogYikgT24gb2xkZXIgY2hpcHMgZnVsbCBzbGVlcCByZXN1bHRzIGEgd2VpcmQgYmVoYXZpb3VyCisJCSAqIGR1cmluZyB3YWtldXAuIEkgdGVzdGVkIHZhcmlvdXMgY2FyZHMgd2l0aCBzcmV2IDwgMHg3OAorCQkgKiBhbmQgdGhleSBkb24ndCB3YWtlIHVwIGFmdGVyIG1vZHVsZSByZWxvYWQsIGEgc2Vjb25kCisJCSAqIG1vZHVsZSByZWxvYWQgaXMgbmVlZGVkIHRvIGJyaW5nIHRoZSBjYXJkIHVwIGFnYWluLgorCQkgKgorCQkgKiBVbnRpbCB3ZSBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiBkb24ndCBlbmFibGUKKwkJICogZnVsbCBjaGlwIHJlc2V0IG9uIGFueSBjaGlwICh0aGlzIGlzIHdoYXQgTGVnYWN5IEhBTAorCQkgKiBhbmQgU2FtJ3MgSEFMIGRvIGFueXdheSkuIEluc3RlYWQgUGVyZm9ybSBhIGZ1bGwgcmVzZXQKKwkJICogb24gdGhlIGRldmljZSAoc2FtZSBhcyBpbml0aWFsIHN0YXRlIGFmdGVyIGF0dGFjaCkgYW5kCisJCSAqIGxlYXZlIGl0IGlkbGUgKGtlZXAgTUFDL0JCIG9uIHdhcm0gcmVzZXQpICovCisJCXJldCA9IGF0aDVrX2h3X29uX2hvbGQoc2MtPmFoKTsKKworCQlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULAorCQkJCSJwdXR0aW5nIGRldmljZSB0byBzbGVlcFxuIik7CiAJfQogCWF0aDVrX3R4YnVmX2ZyZWUoc2MsIHNjLT5iYnVmKTsKIAogCW1taW93YigpOwogCW11dGV4X3VubG9jaygmc2MtPmxvY2spOwogCi0JZGVsX3RpbWVyX3N5bmMoJnNjLT5jYWxpYl90aW0pOwogCXRhc2tsZXRfa2lsbCgmc2MtPnJ4dHEpOwogCXRhc2tsZXRfa2lsbCgmc2MtPnR4dHEpOwogCXRhc2tsZXRfa2lsbCgmc2MtPnJlc3RxKTsKKwl0YXNrbGV0X2tpbGwoJnNjLT5jYWxpYik7CiAJdGFza2xldF9raWxsKCZzYy0+YmVhY29udHEpOwogCiAJYXRoNWtfcmZraWxsX2h3X3N0b3Aoc2MtPmFoKTsKQEAgLTI1MzEsNiArMjUzMSw5IEBACiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfQk1JU1MpIHsKIAkJCQkvKiBUT0RPICovCiAJCQl9CisJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfU1dJKSB7CisJCQkJdGFza2xldF9zY2hlZHVsZSgmc2MtPmNhbGliKTsKKwkJCX0KIAkJCWlmIChzdGF0dXMgJiBBUjVLX0lOVF9NSUIpIHsKIAkJCQkvKgogCQkJCSAqIFRoZXNlIHN0YXRzIGFyZSBhbHNvIHVzZWQgZm9yIEFOSSBpIHRoaW5rCkBAIC0yNTQ3LDYgKzI1NTAsOCBAQAogCWlmICh1bmxpa2VseSghY291bnRlcikpCiAJCUFUSDVLX1dBUk4oc2MsICJ0b28gbWFueSBpbnRlcnJ1cHRzLCBnaXZpbmcgdXAgZm9yIG5vd1xuIik7CiAKKwlhdGg1a19od19jYWxpYnJhdGlvbl9wb2xsKGFoKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMjU2MywxMSArMjU2OCwxOSBAQAogICogZm9yIHRlbXBlcmF0dXJlL2Vudmlyb25tZW50IGNoYW5nZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1hdGg1a19jYWxpYnJhdGUodW5zaWduZWQgbG9uZyBkYXRhKQorYXRoNWtfdGFza2xldF9jYWxpYnJhdGUodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSAodm9pZCAqKWRhdGE7CiAJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKIAorCS8qIE9ubHkgZnVsbCBjYWxpYnJhdGlvbiBmb3Igbm93ICovCisJaWYgKGFoLT5haF9zd2lfbWFzayAhPSBBUjVLX1NXSV9GVUxMX0NBTElCUkFUSU9OKQorCQlyZXR1cm47CisKKwkvKiBTdG9wIHF1ZXVlcyBzbyB0aGF0IGNhbGlicmF0aW9uCisJICogZG9lc24ndCBpbnRlcmZlcmUgd2l0aCB0eCAqLworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhzYy0+aHcpOworCiAJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19DQUxJQlJBVEUsICJjaGFubmVsICV1LyV4XG4iLAogCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoc2MtPmN1cmNoYW4tPmNlbnRlcl9mcmVxKSwKIAkJc2MtPmN1cmNoYW4tPmh3X3ZhbHVlKTsKQEAgLTI1ODUsOCArMjU5OCwxMSBAQAogCQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKAogCQkJCXNjLT5jdXJjaGFuLT5jZW50ZXJfZnJlcSkpOwogCi0JbW9kX3RpbWVyKCZzYy0+Y2FsaWJfdGltLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKwotCQkJbXNlY3NfdG9famlmZmllcyhhdGg1a19jYWxpbnRlcnZhbCAqIDEwMDApKSk7CisJYWgtPmFoX3N3aV9tYXNrID0gMDsKKworCS8qIFdha2UgcXVldWVzICovCisJaWVlZTgwMjExX3dha2VfcXVldWVzKHNjLT5odyk7CisKIH0KIAogCkBAIC0yNTk4LDYgKzI2MTQsMTQgQEAKIGF0aDVrX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKworCXJldHVybiBhdGg1a190eF9xdWV1ZShodywgc2tiLCBzYy0+dHhxKTsKK30KKworc3RhdGljIGludCBhdGg1a190eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgc3RydWN0IGF0aDVrX3R4cSAqdHhxKQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoNWtfYnVmICpiZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBoZHJsZW47CkBAIC0yNjQxLDcgKzI2NjUsNyBAQAogCiAJYmYtPnNrYiA9IHNrYjsKIAotCWlmIChhdGg1a190eGJ1Zl9zZXR1cChzYywgYmYpKSB7CisJaWYgKGF0aDVrX3R4YnVmX3NldHVwKHNjLCBiZiwgdHhxKSkgewogCQliZi0+c2tiID0gTlVMTDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT50eGJ1ZmxvY2ssIGZsYWdzKTsKIAkJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZzYy0+dHhidWYpOwpAQCAtMjY3Niw3ICsyNzAwLDcgQEAKIAkJc2MtPmN1cmNoYW4gPSBjaGFuOwogCQlzYy0+Y3VyYmFuZCA9ICZzYy0+c2JhbmRzW2NoYW4tPmJhbmRdOwogCX0KLQlyZXQgPSBhdGg1a19od19yZXNldChhaCwgc2MtPm9wbW9kZSwgc2MtPmN1cmNoYW4sIHRydWUpOworCXJldCA9IGF0aDVrX2h3X3Jlc2V0KGFoLCBzYy0+b3Btb2RlLCBzYy0+Y3VyY2hhbiwgY2hhbiAhPSBOVUxMKTsKIAlpZiAocmV0KSB7CiAJCUFUSDVLX0VSUihzYywgImNhbid0IHJlc2V0IGhhcmR3YXJlICglZClcbiIsIHJldCk7CiAJCWdvdG8gZXJyOwpAQCAtMjc1Nyw2ICsyNzgxLDcgQEAKIAl9CiAKIAlhdGg1a19od19zZXRfbGxhZGRyKHNjLT5haCwgY29uZi0+bWFjX2FkZHIpOworCWF0aDVrX21vZGVfc2V0dXAoc2MpOwogCiAJcmV0ID0gMDsKIGVuZDoKQEAgLTI3NzYsNyArMjgwMSw2IEBACiAJCWdvdG8gZW5kOwogCiAJYXRoNWtfaHdfc2V0X2xsYWRkcihzYy0+YWgsIG1hYyk7Ci0JYXRoNWtfYmVhY29uX2Rpc2FibGUoc2MpOwogCXNjLT52aWYgPSBOVUxMOwogZW5kOgogCW11dGV4X3VubG9jaygmc2MtPmxvY2spOwpAQCAtMjc5NSw5ICsyODE5LDExIEBACiAKIAltdXRleF9sb2NrKCZzYy0+bG9jayk7CiAKLQlyZXQgPSBhdGg1a19jaGFuX3NldChzYywgY29uZi0+Y2hhbm5lbCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gdW5sb2NrOworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpIHsKKwkJcmV0ID0gYXRoNWtfY2hhbl9zZXQoc2MsIGNvbmYtPmNoYW5uZWwpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gdW5sb2NrOworCX0KIAogCWlmICgoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUikgJiYKIAkoc2MtPnBvd2VyX2xldmVsICE9IGNvbmYtPnBvd2VyX2xldmVsKSkgewpAQCAtMjgzMSw2ICsyODU3LDM3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHU2NCBhdGg1a19wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCit7CisJdTMyIG1maWx0WzJdLCB2YWw7CisJaW50IGk7CisJdTggcG9zOworCisJbWZpbHRbMF0gPSAwOworCW1maWx0WzFdID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBtY19jb3VudDsgaSsrKSB7CisJCWlmICghbWNsaXN0KQorCQkJYnJlYWs7CisJCS8qIGNhbGN1bGF0ZSBYT1Igb2YgZWlnaHQgNi1iaXQgdmFsdWVzICovCisJCXZhbCA9IGdldF91bmFsaWduZWRfbGUzMihtY2xpc3QtPmRtaV9hZGRyICsgMCk7CisJCXBvcyA9ICh2YWwgPj4gMTgpIF4gKHZhbCA+PiAxMikgXiAodmFsID4+IDYpIF4gdmFsOworCQl2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMzIobWNsaXN0LT5kbWlfYWRkciArIDMpOworCQlwb3MgXj0gKHZhbCA+PiAxOCkgXiAodmFsID4+IDEyKSBeICh2YWwgPj4gNikgXiB2YWw7CisJCXBvcyAmPSAweDNmOworCQltZmlsdFtwb3MgLyAzMl0gfD0gKDEgPDwgKHBvcyAlIDMyKSk7CisJCS8qIFhYWDogd2UgbWlnaHQgYmUgYWJsZSB0byBqdXN0IGRvIHRoaXMgaW5zdGVhZCwKKwkJKiBidXQgbm90IHN1cmUsIG5lZWRzIHRlc3RpbmcsIGlmIHdlIGRvIHVzZSB0aGlzIHdlJ2QKKwkJKiBuZWV0IHRvIGluZm9ybSBiZWxvdyB0byBub3QgcmVzZXQgdGhlIG1jYXN0ICovCisJCS8qIGF0aDVrX2h3X3NldF9tY2FzdF9maWx0ZXJpbmRleChhaCwKKwkJICogICAgICBtY2xpc3QtPmRtaV9hZGRyWzVdKTsgKi8KKwkJbWNsaXN0ID0gbWNsaXN0LT5uZXh0OworCX0KKworCXJldHVybiAoKHU2NCkobWZpbHRbMV0pIDw8IDMyKSB8IG1maWx0WzBdOworfQorCiAjZGVmaW5lIFNVUFBPUlRFRF9GSUZfRkxBR1MgXAogCUZJRl9QUk9NSVNDX0lOX0JTUyB8ICBGSUZfQUxMTVVMVEkgfCBGSUZfRkNTRkFJTCB8IFwKIAlGSUZfUExDUEZBSUwgfCBGSUZfQ09OVFJPTCB8IEZJRl9PVEhFUl9CU1MgfCBcCkBAIC0yODU2LDE2ICsyOTEzLDE2IEBACiBzdGF0aWMgdm9pZCBhdGg1a19jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQl1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKIAkJdW5zaWduZWQgaW50ICpuZXdfZmxhZ3MsCi0JCWludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpCisJCXU2NCBtdWx0aWNhc3QpCiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7Ci0JdTMyIG1maWx0WzJdLCB2YWwsIHJmaWx0OwotCXU4IHBvczsKLQlpbnQgaTsKKwl1MzIgbWZpbHRbMl0sIHJmaWx0OwogCi0JbWZpbHRbMF0gPSAwOwotCW1maWx0WzFdID0gMDsKKwltdXRleF9sb2NrKCZzYy0+bG9jayk7CisKKwltZmlsdFswXSA9IG11bHRpY2FzdDsKKwltZmlsdFsxXSA9IG11bHRpY2FzdCA+PiAzMjsKIAogCS8qIE9ubHkgZGVhbCB3aXRoIHN1cHBvcnRlZCBmbGFncyAqLwogCWNoYW5nZWRfZmxhZ3MgJj0gU1VQUE9SVEVEX0ZJRl9GTEFHUzsKQEAgLTI4OTEsMjQgKzI5NDgsNiBAQAogCWlmICgqbmV3X2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7CiAJCW1maWx0WzBdID0gIH4wOwogCQltZmlsdFsxXSA9ICB+MDsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgewotCQkJaWYgKCFtY2xpc3QpCi0JCQkJYnJlYWs7Ci0JCQkvKiBjYWxjdWxhdGUgWE9SIG9mIGVpZ2h0IDYtYml0IHZhbHVlcyAqLwotCQkJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTMyKG1jbGlzdC0+ZG1pX2FkZHIgKyAwKTsKLQkJCXBvcyA9ICh2YWwgPj4gMTgpIF4gKHZhbCA+PiAxMikgXiAodmFsID4+IDYpIF4gdmFsOwotCQkJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTMyKG1jbGlzdC0+ZG1pX2FkZHIgKyAzKTsKLQkJCXBvcyBePSAodmFsID4+IDE4KSBeICh2YWwgPj4gMTIpIF4gKHZhbCA+PiA2KSBeIHZhbDsKLQkJCXBvcyAmPSAweDNmOwotCQkJbWZpbHRbcG9zIC8gMzJdIHw9ICgxIDw8IChwb3MgJSAzMikpOwotCQkJLyogWFhYOiB3ZSBtaWdodCBiZSBhYmxlIHRvIGp1c3QgZG8gdGhpcyBpbnN0ZWFkLAotCQkJKiBidXQgbm90IHN1cmUsIG5lZWRzIHRlc3RpbmcsIGlmIHdlIGRvIHVzZSB0aGlzIHdlJ2QKLQkJCSogbmVldCB0byBpbmZvcm0gYmVsb3cgdG8gbm90IHJlc2V0IHRoZSBtY2FzdCAqLwotCQkJLyogYXRoNWtfaHdfc2V0X21jYXN0X2ZpbHRlcmluZGV4KGFoLAotCQkJICogICAgICBtY2xpc3QtPmRtaV9hZGRyWzVdKTsgKi8KLQkJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKLQkJfQogCX0KIAogCS8qIFRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvICovCkBAIC0yOTMyLDIyICsyOTcxLDI1IEBACiAKIAkvKiBYWFggbW92ZSB0aGVzZSB0byBtYWM4MDIxMSwgYW5kIGFkZCBhIGJlYWNvbiBJRkYgZmxhZyB0byBtYWM4MDIxMSAqLwogCi0JaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKLQkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfQ09OVFJPTCB8IEFSNUtfUlhfRklMVEVSX0JFQUNPTiB8Ci0JCQlBUjVLX1JYX0ZJTFRFUl9QUk9CRVJFUSB8IEFSNUtfUlhfRklMVEVSX1BST007Ci0JaWYgKHNjLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfUFJPQkVSRVE7Ci0JaWYgKHNjLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKLQkJc2MtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UICYmCi0JCXRlc3RfYml0KEFUSF9TVEFUX1BST01JU0MsIHNjLT5zdGF0dXMpKQotCQlyZmlsdCB8PSBBUjVLX1JYX0ZJTFRFUl9QUk9NOwotCWlmICgoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmIHNjLT5hc3NvYykgfHwKLQkJc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAotCQlzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQlyZmlsdCB8PSBBUjVLX1JYX0ZJTFRFUl9CRUFDT047Ci0JaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKLQkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfQ09OVFJPTCB8IEFSNUtfUlhfRklMVEVSX0JFQUNPTiB8Ci0JCQlBUjVLX1JYX0ZJTFRFUl9QUk9CRVJFUSB8IEFSNUtfUlhfRklMVEVSX1BST007CisJc3dpdGNoIChzYy0+b3Btb2RlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKKwkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfQ09OVFJPTCB8CisJCQkgQVI1S19SWF9GSUxURVJfQkVBQ09OIHwKKwkJCSBBUjVLX1JYX0ZJTFRFUl9QUk9CRVJFUSB8CisJCQkgQVI1S19SWF9GSUxURVJfUFJPTTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlyZmlsdCB8PSBBUjVLX1JYX0ZJTFRFUl9QUk9CRVJFUSB8CisJCQkgQVI1S19SWF9GSUxURVJfQkVBQ09OOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWlmIChzYy0+YXNzb2MpCisJCQlyZmlsdCB8PSBBUjVLX1JYX0ZJTFRFUl9CRUFDT047CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJLyogU2V0IGZpbHRlcnMgKi8KIAlhdGg1a19od19zZXRfcnhfZmlsdGVyKGFoLCByZmlsdCk7CkBAIC0yOTU3LDYgKzI5OTksOCBAQAogCS8qIFNldCB0aGUgY2FjaGVkIGh3IGZpbHRlciBmbGFncywgdGhpcyB3aWxsIGFsdGVyIGFjdHVhbGx5CiAJICogYmUgc2V0IGluIEhXICovCiAJc2MtPmZpbHRlcl9mbGFncyA9IHJmaWx0OworCisJbXV0ZXhfdW5sb2NrKCZzYy0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI5NzgsNiArMzAyMiw5IEBACiAJY2FzZSBBTEdfVEtJUDoKIAkJYnJlYWs7CiAJY2FzZSBBTEdfQ0NNUDoKKwkJaWYgKHNjLT5haC0+YWhfYWVzX3N1cHBvcnQpCisJCQlicmVhazsKKwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsKQEAgLTMxMDgsMjUgKzMxNTUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiAgVXBkYXRlIHRoZSBiZWFjb24gYW5kIHJlY29uZmlndXJlIHRoZSBiZWFjb24gcXVldWVzLgotICovCi1zdGF0aWMgdm9pZAotYXRoNWtfYmVhY29uX3JlY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmJsb2NrLCBmbGFncyk7Ci0JcmV0ID0gYXRoNWtfYmVhY29uX3VwZGF0ZShodywgdmlmKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+YmxvY2ssIGZsYWdzKTsKLQlpZiAocmV0ID09IDApIHsKLQkJYXRoNWtfYmVhY29uX2NvbmZpZyhzYyk7Ci0JCW1taW93YigpOwotCX0KLX0KLQogc3RhdGljIHZvaWQKIHNldF9iZWFjb25fZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSkKIHsKQEAgLTMxNDksNiArMzE3Nyw3IEBACiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW11dGV4X2xvY2soJnNjLT5sb2NrKTsKIAlpZiAoV0FSTl9PTihzYy0+dmlmICE9IHZpZikpCkBAIC0zMTcwLDE1ICszMTk5LDM3IEBACiAJCXNjLT5hc3NvYyA9IGJzc19jb25mLT5hc3NvYzsKIAkJaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJCXNldF9iZWFjb25fZmlsdGVyKGh3LCBzYy0+YXNzb2MpOworCQlhdGg1a19od19zZXRfbGVkc3RhdGUoc2MtPmFoLCBzYy0+YXNzb2MgPworCQkJQVI1S19MRURfQVNTT0MgOiBBUjVLX0xFRF9JTklUKTsKIAl9CiAKLQlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JFQUNPTiAmJgotCSAgICAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8Ci0JICAgICB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCB8fAotCSAgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSkgewotCQlhdGg1a19iZWFjb25fcmVjb25maWcoaHcsIHZpZik7CisJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CRUFDT04pIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5ibG9jaywgZmxhZ3MpOworCQlhdGg1a19iZWFjb25fdXBkYXRlKGh3LCB2aWYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+YmxvY2ssIGZsYWdzKTsKIAl9CiAKKwlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKQorCQlzYy0+ZW5hYmxlX2JlYWNvbiA9IGJzc19jb25mLT5lbmFibGVfYmVhY29uOworCisJaWYgKGNoYW5nZXMgJiAoQlNTX0NIQU5HRURfQkVBQ09OIHwgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQgfAorCQkgICAgICAgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCkpCisJCWF0aDVrX2JlYWNvbl9jb25maWcoc2MpOworCiAgdW5sb2NrOgogCW11dGV4X3VubG9jaygmc2MtPmxvY2spOwogfQorCitzdGF0aWMgdm9pZCBhdGg1a19zd19zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlpZiAoIXNjLT5hc3NvYykKKwkJYXRoNWtfaHdfc2V0X2xlZHN0YXRlKHNjLT5haCwgQVI1S19MRURfU0NBTik7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDVrX3N3X3NjYW5fY29tcGxldGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OworCWF0aDVrX2h3X3NldF9sZWRzdGF0ZShzYy0+YWgsIHNjLT5hc3NvYyA/CisJCUFSNUtfTEVEX0FTU09DIDogQVI1S19MRURfSU5JVCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuaAppbmRleCBmOWI3ZjJmLi5hMjhjNDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmgKQEAgLTUxLDYgKzUxLDkgQEAKICNpbmNsdWRlICJhdGg1ay5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKKyNpbmNsdWRlICIuLi9yZWdkLmgiCisjaW5jbHVkZSAiLi4vYXRoLmgiCisKICNkZWZpbmUJQVRIX1JYQlVGCTQwCQkvKiBudW1iZXIgb2YgUlggYnVmZmVycyAqLwogI2RlZmluZQlBVEhfVFhCVUYJMjAwCQkvKiBudW1iZXIgb2YgVFggYnVmZmVycyAqLwogI2RlZmluZSBBVEhfQkNCVUYJMQkJLyogbnVtYmVyIG9mIGJlYWNvbiBidWZmZXJzICovCkBAIC0xMTIsMTAgKzExNSwxMCBAQAogICogYXNzb2NpYXRlZCB3aXRoIGFuIGluc3RhbmNlIG9mIGEgZGV2aWNlICovCiBzdHJ1Y3QgYXRoNWtfc29mdGMgewogCXN0cnVjdCBwY2lfZGV2CQkqcGRldjsJCS8qIGZvciBkbWEgbWFwcGluZyAqLworCXN0cnVjdCBhdGhfY29tbW9uCWNvbW1vbjsKIAl2b2lkIF9faW9tZW0JCSppb2Jhc2U7CS8qIGFkZHJlc3Mgb2YgdGhlIGRldmljZSAqLwogCXN0cnVjdCBtdXRleAkJbG9jazsJCS8qIGRldi1sZXZlbCBsb2NrICovCi0JLyogRklYTUU6IGhvdyBtYW55IGRvZXMgaXQgcmVhbGx5IG5lZWQ/ICovCi0Jc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0c1sxNl07CisJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0c1tBUjVLX05VTV9UWF9RVUVVRVNdOwogCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzIGxsX3N0YXRzOwogCXN0cnVjdCBpZWVlODAyMTFfaHcJKmh3OwkJLyogSUVFRSA4MDIuMTEgY29tbW9uICovCiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBzYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107CkBAIC0xMzUsNyArMTM4LDYgQEAKIAlzdHJ1Y3QgYXRoNWtfZGVzYwkqZGVzYzsJCS8qIFRYL1JYIGRlc2NyaXB0b3JzICovCiAJZG1hX2FkZHJfdAkJZGVzY19kYWRkcjsJLyogRE1BIChwaHlzaWNhbCkgYWRkcmVzcyAqLwogCXNpemVfdAkJCWRlc2NfbGVuOwkvKiBzaXplIG9mIFRYL1JYIGRlc2NyaXB0b3JzICovCi0JdTE2CQkJY2FjaGVsc3o7CS8qIGNhY2hlIGxpbmUgc2l6ZSAqLwogCiAJREVDTEFSRV9CSVRNQVAoc3RhdHVzLCA1KTsKICNkZWZpbmUgQVRIX1NUQVRfSU5WQUxJRAkwCQkvKiBkaXNhYmxlIGhhcmR3YXJlIGFjY2Vzc2VzICovCkBAIC0xNzEsMTQgKzE3MywxNSBAQAogCXN0cnVjdCBsaXN0X2hlYWQJdHhidWY7CQkvKiB0cmFuc21pdCBidWZmZXIgKi8KIAlzcGlubG9ja190CQl0eGJ1ZmxvY2s7CiAJdW5zaWduZWQgaW50CQl0eGJ1Zl9sZW47CS8qIGJ1ZiBjb3VudCBpbiB0eGJ1ZiBsaXN0ICovCi0Jc3RydWN0IGF0aDVrX3R4cQl0eHFzWzJdOwkvKiBiZWFjb24gYW5kIHR4ICovCi0KLQlzdHJ1Y3QgYXRoNWtfdHhxCSp0eHE7CQkvKiBiZWFjb24gYW5kIHR4Ki8KKwlzdHJ1Y3QgYXRoNWtfdHhxCXR4cXNbQVI1S19OVU1fVFhfUVVFVUVTXTsJLyogdHggcXVldWVzICovCisJc3RydWN0IGF0aDVrX3R4cQkqdHhxOwkJLyogbWFpbiB0eCBxdWV1ZSAqLwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAl0eHRxOwkJLyogdHggaW50ciB0YXNrbGV0ICovCiAJc3RydWN0IGF0aDVrX2xlZAl0eF9sZWQ7CQkvKiB0eCBsZWQgKi8KIAogCXN0cnVjdCBhdGg1a19yZmtpbGwJcmZfa2lsbDsKIAorCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAljYWxpYjsJCS8qIGNhbGlicmF0aW9uIHRhc2tsZXQgKi8KKwogCXNwaW5sb2NrX3QJCWJsb2NrOwkJLyogcHJvdGVjdHMgYmVhY29uICovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CWJlYWNvbnRxOwkvKiBiZWFjb24gaW50ciB0YXNrbGV0ICovCiAJc3RydWN0IGF0aDVrX2J1ZgkqYmJ1ZjsJCS8qIGJlYWNvbiBidWZmZXIgKi8KQEAgLTE4NywxMCArMTkwLDExIEBACiAJCQkJYmludHZhbCwJLyogYmVhY29uIGludGVydmFsIGluIFRVICovCiAJCQkJYnNlbnQ7CiAJdW5zaWduZWQgaW50CQluZXh0dGJ0dDsJLyogbmV4dCBiZWFjb24gdGltZSBpbiBUVSAqLworCXN0cnVjdCBhdGg1a190eHEJKmNhYnE7CQkvKiBjb250ZW50IGFmdGVyIGJlYWNvbiAqLwogCi0Jc3RydWN0IHRpbWVyX2xpc3QJY2FsaWJfdGltOwkvKiBjYWxpYnJhdGlvbiB0aW1lciAqLwogCWludCAJCQlwb3dlcl9sZXZlbDsJLyogUmVxdWVzdGVkIHR4IHBvd2VyIGluIGRibSAqLwogCWJvb2wJCQlhc3NvYzsJCS8qIGFzc29jYXRlIHN0YXRlICovCisJYm9vbAkJCWVuYWJsZV9iZWFjb247CS8qIHRydWUgaWYgYmVhY29ucyBhcmUgb24gKi8KIH07CiAKICNkZWZpbmUgYXRoNWtfaHdfaGFzYnNzaWRtYXNrKF9haCkgXApAQCAtMTk4LDQgKzIwMiwxNSBAQAogI2RlZmluZSBhdGg1a19od19oYXN2ZW9sKF9haCkgXAogCShhdGg1a19od19nZXRfY2FwYWJpbGl0eShfYWgsIEFSNUtfQ0FQX1ZFT0wsIDAsIE5VTEwpID09IDApCiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF0aF9jb21tb24gKmF0aDVrX2h3X2NvbW1vbihzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCXJldHVybiAmYWgtPmFoX3NjLT5jb21tb247Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF0aF9yZWd1bGF0b3J5ICphdGg1a19od19yZWd1bGF0b3J5KHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJcmV0dXJuICYoYXRoNWtfaHdfY29tbW9uKGFoKS0+cmVndWxhdG9yeSk7CisKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5jCmluZGV4IDQ5MDRhMDcuLjc0NzUwOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5jCkBAIC0zODAsMTMgKzM4MCwxNSBAQAogCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciA9IGRlYnVnZnNfY3JlYXRlX2Rpcih3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpLAogCQkJCWF0aDVrX2dsb2JhbF9kZWJ1Z2ZzKTsKIAotCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2RlYnVnID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGVidWciLCBTX0lXVVNSIHwgU19JUlVHTywKKwlzYy0+ZGVidWcuZGVidWdmc19kZWJ1ZyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRlYnVnIiwKKwkJCQlTX0lXVVNSIHwgU19JUlVTUiwKIAkJCQlzYy0+ZGVidWcuZGVidWdmc19waHlkaXIsIHNjLCAmZm9wc19kZWJ1Zyk7CiAKLQlzYy0+ZGVidWcuZGVidWdmc19yZWdpc3RlcnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdpc3RlcnMiLCBTX0lSVUdPLAorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3JlZ2lzdGVycyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ2lzdGVycyIsIFNfSVJVU1IsCiAJCQkJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyLCBzYywgJmZvcHNfcmVnaXN0ZXJzKTsKIAotCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2JlYWNvbiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImJlYWNvbiIsIFNfSVdVU1IgfCBTX0lSVUdPLAorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2JlYWNvbiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImJlYWNvbiIsCisJCQkJU19JV1VTUiB8IFNfSVJVU1IsCiAJCQkJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyLCBzYywgJmZvcHNfYmVhY29uKTsKIAogCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3Jlc2V0ID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmVzZXQiLCBTX0lXVVNSLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5jCmluZGV4IGM1NmI0OTRkLi42NDQ5NjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5jCkBAIC0xNjcsNiArMTY3LDE2IEBACiAJZWUtPmVlX3Jma2lsbF9waW4gPSAodTgpIEFSNUtfUkVHX01TKHZhbCwgQVI1S19FRVBST01fUkZLSUxMX0dQSU9fU0VMKTsKIAllZS0+ZWVfcmZraWxsX3BvbCA9IHZhbCAmIEFSNUtfRUVQUk9NX1JGS0lMTF9QT0xBUklUWSA/IHRydWUgOiBmYWxzZTsKIAorCS8qIENoZWNrIGlmIFBDSUVfT0ZGU0VUIHBvaW50cyB0byBQQ0lFX1NFUkRFU19TRUNUSU9OCisJICogYW5kIGVuYWJsZSBzZXJkZXMgcHJvZ3JhbW1pbmcgaWYgbmVlZGVkLgorCSAqCisJICogWFhYOiBTZXJkZXMgdmFsdWVzIHNlZW0gdG8gYmUgZml4ZWQgc28KKwkgKiBubyBuZWVkIHRvIHJlYWQgdGhlbSBoZXJlLCB3ZSB3cml0ZSB0aGVtCisJICogZHVyaW5nIGF0aDVrX2h3X2F0dGFjaCAqLworCUFSNUtfRUVQUk9NX1JFQUQoQVI1S19FRVBST01fUENJRV9PRkZTRVQsIHZhbCk7CisJZWUtPmVlX3NlcmRlcyA9ICh2YWwgPT0gQVI1S19FRVBST01fUENJRV9TRVJERVNfU0VDVElPTikgPworCQkJCQkJCXRydWUgOiBmYWxzZTsKKwogCXJldHVybiAwOwogfQogCkBAIC00MDQsMjcgKzQxNCwxMSBAQAogCQlicmVhazsKIAl9CiAKLWRvbmU6Ci0JLyogcmV0dXJuIG5ldyBvZmZzZXQgKi8KLQkqb2Zmc2V0ID0gbzsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmVhZCB0dXJibyBtb2RlIGluZm9ybWF0aW9uIG9uIG5ld2VyIEVFUFJPTSB2ZXJzaW9ucwotICovCi1zdGF0aWMgaW50Ci1hdGg1a19lZXByb21fcmVhZF90dXJib19tb2RlcyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotCQkJICAgICAgdTMyICpvZmZzZXQsIHVuc2lnbmVkIGludCBtb2RlKQotewotCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwotCXUzMiBvID0gKm9mZnNldDsKLQl1MTYgdmFsOwotCWludCByZXQ7Ci0KKwkvKgorCSAqIFJlYWQgdHVyYm8gbW9kZSBpbmZvcm1hdGlvbiBvbiBuZXdlciBFRVBST00gdmVyc2lvbnMKKwkgKi8KIAlpZiAoZWUtPmVlX3ZlcnNpb24gPCBBUjVLX0VFUFJPTV9WRVJTSU9OXzVfMCkKLQkJcmV0dXJuIDA7CisJCWdvdG8gZG9uZTsKIAogCXN3aXRjaCAobW9kZSl7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQToKQEAgLTQ1OCw2ICs0NTIsNyBAQAogCQlicmVhazsKIAl9CiAKK2RvbmU6CiAJLyogcmV0dXJuIG5ldyBvZmZzZXQgKi8KIAkqb2Zmc2V0ID0gbzsKIApAQCAtNDk0LDEwICs0ODksNiBAQAogCQlyZXQgPSBhdGg1a19lZXByb21fcmVhZF9tb2RlcyhhaCwgJm9mZnNldCwgbW9kZSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCi0JCXJldCA9IGF0aDVrX2VlcHJvbV9yZWFkX3R1cmJvX21vZGVzKGFoLCAmb2Zmc2V0LCBtb2RlKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CiAJfQogCiAJLyogb3ZlcnJpZGUgZm9yIG9sZGVyIGVlcHJvbSB2ZXJzaW9ucyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmgKaW5kZXggNjRiZTczYS4uMDEyM2YzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9lZXByb20uaApAQCAtMTksNiArMTksOSBAQAogLyoKICAqIENvbW1vbiBhcjV4eHggRUVQUk9NIGRhdGEgb2Zmc2V0cyAoc2V0IHRoZXNlIG9uIEFSNUtfRUVQUk9NX0JBU0UpCiAgKi8KKyNkZWZpbmUJQVI1S19FRVBST01fUENJRV9PRkZTRVQJCTB4MDIJLyogQ29udGFpbnMgb2Zmc2V0IHRvIFBDSS1FIGluZm9zICovCisjZGVmaW5lCUFSNUtfRUVQUk9NX1BDSUVfU0VSREVTX1NFQ1RJT04JMHg0MAkvKiBQQ0lFX09GRlNFVCBwb2ludHMgaGVyZSB3aGVuCisJCQkJCQkgKiBTRVJERVMgaW5mb3MgYXJlIHByZXNlbnQgKi8KICNkZWZpbmUgQVI1S19FRVBST01fTUFHSUMJCTB4MDAzZAkvKiBFRVBST00gTWFnaWMgbnVtYmVyICovCiAjZGVmaW5lIEFSNUtfRUVQUk9NX01BR0lDX1ZBTFVFCQkweDVhYTUJLyogRGVmYXVsdCAtIGZvdW5kIG9uIEVFUFJPTSAqLwogI2RlZmluZSBBUjVLX0VFUFJPTV9NQUdJQ181MjEyCQkweDAwMDAxNDVjIC8qIDUyMTIgKi8KQEAgLTM5MSw2ICszOTQsNyBAQAogCXU4CWVlX3Jma2lsbF9waW47CiAJYm9vbAllZV9yZmtpbGxfcG9sOwogCWJvb2wJZWVfaXNfaGI2MzsKKwlib29sCWVlX3NlcmRlczsKIAl1MTYJZWVfbWlzYzA7CiAJdTE2CWVlX21pc2MxOwogCXUxNgllZV9taXNjMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9sZWQuYwppbmRleCA4NzY3MjVmLi5iNzY3YzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2xlZC5jCkBAIC02OSw2ICs2OSw4IEBACiAJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0FaV0FWRSwgMHgxMDI2KSwgQVRIX0xFRCgzLCAwKSB9LAogCS8qIElCTSBUaGlua1BhZCBBUjVCWEI2IChsZWdvdmluaUBzcGlyby5maXNpY2EudW5pcGQuaXQpICovCiAJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0lCTSwgMHgwNThhKSwgQVRIX0xFRCgxLCAwKSB9LAorCS8qIEhQIENvbXBhcSBDNzAwIChuaXRyb3VzbnJnQGdtYWlsLmNvbSkgKi8KKwl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfSFAsIDB4MDEzN2IpLCBBVEhfTEVEKDMsIDEpIH0sCiAJLyogSUJNLXNwZWNpZmljIEFSNTIxMiAoYWxsIG90aGVycykgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19BUjUyMTJfSUJNKSwgQVRIX0xFRCgwLCAwKSB9LAogCXsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jCmluZGV4IGE4NzZjYTguLjFhMDM5ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGh5LmMKQEAgLTc0MCwxMyArNzQwLDIyIEBACiAJCQkJCQlBUjVLX1JGX1hQRF9HQUlOLCB0cnVlKTsKIAogCQl9IGVsc2UgewotCQkJLyogVE9ETzogU2V0IGhpZ2ggYW5kIGxvdyBnYWluIGJpdHMgKi8KLQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywKLQkJCQkJCWVlLT5lZV94X2dhaW5bZWVfbW9kZV0sCisJCQl1OCAqcGRnX2N1cnZlX3RvX2lkeCA9IGVlLT5lZV9wZGNfdG9faWR4W2VlX21vZGVdOworCQkJaWYgKGVlLT5lZV9wZF9nYWluc1tlZV9tb2RlXSA+IDEpIHsKKwkJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsCisJCQkJCQlwZGdfY3VydmVfdG9faWR4WzBdLAogCQkJCQkJQVI1S19SRl9QRF9HQUlOX0xPLCB0cnVlKTsKLQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywKLQkJCQkJCWVlLT5lZV94X2dhaW5bZWVfbW9kZV0sCisJCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLAorCQkJCQkJcGRnX2N1cnZlX3RvX2lkeFsxXSwKIAkJCQkJCUFSNUtfUkZfUERfR0FJTl9ISSwgdHJ1ZSk7CisJCQl9IGVsc2UgeworCQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywKKwkJCQkJCXBkZ19jdXJ2ZV90b19pZHhbMF0sCisJCQkJCQlBUjVLX1JGX1BEX0dBSU5fTE8sIHRydWUpOworCQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywKKwkJCQkJCXBkZ19jdXJ2ZV90b19pZHhbMF0sCisJCQkJCQlBUjVLX1JGX1BEX0dBSU5fSEksIHRydWUpOworCQkJfQogCiAJCQkvKiBMb3dlciBzeW50aCB2b2x0YWdlIG9uIFJldiAyICovCiAJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDIsCkBAIC0xMDg1LDggKzEwOTQsNyBAQAogCQkJCUFSNUtfUEhZX0NDS1RYQ1RMX1dPUkxEKTsKIAl9CiAKLQlhaC0+YWhfY3VycmVudF9jaGFubmVsLmNlbnRlcl9mcmVxID0gY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0JYWgtPmFoX2N1cnJlbnRfY2hhbm5lbC5od192YWx1ZSA9IGNoYW5uZWwtPmh3X3ZhbHVlOworCWFoLT5haF9jdXJyZW50X2NoYW5uZWwgPSBjaGFubmVsOwogCWFoLT5haF90dXJibyA9IGNoYW5uZWwtPmh3X3ZhbHVlID09IENIQU5ORUxfVCA/IHRydWUgOiBmYWxzZTsKIAogCXJldHVybiAwOwpAQCAtMTA5Niw2ICsxMTA0LDI5IEBACiAgIFBIWSBjYWxpYnJhdGlvbgogXCoqKioqKioqKioqKioqKioqLwogCit2b2lkCithdGg1a19od19jYWxpYnJhdGlvbl9wb2xsKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJLyogQ2FsaWJyYXRpb24gaW50ZXJ2YWwgaW4gamlmZmllcyAqLworCXVuc2lnbmVkIGxvbmcgY2FsX2ludHZhbDsKKworCWNhbF9pbnR2YWwgPSBtc2Vjc190b19qaWZmaWVzKGFoLT5haF9jYWxfaW50dmFsICogMTAwMCk7CisKKwkvKiBJbml0aWFsaXplIHRpbWVzdGFtcCBpZiBuZWVkZWQgKi8KKwlpZiAoIWFoLT5haF9jYWxfdHN0YW1wKQorCQlhaC0+YWhfY2FsX3RzdGFtcCA9IGppZmZpZXM7CisKKwkvKiBGb3Igbm93IHdlIGFsd2F5cyBkbyBmdWxsIGNhbGlicmF0aW9uCisJICogTWFyayBzb2Z0d2FyZSBpbnRlcnJ1cHQgbWFzayBhbmQgZmlyZSBzb2Z0d2FyZQorCSAqIGludGVycnVwdCAoYml0IGdldHMgYXV0by1jbGVhcmVkKSAqLworCWlmICh0aW1lX2lzX2JlZm9yZV9lcV9qaWZmaWVzKGFoLT5haF9jYWxfdHN0YW1wICsgY2FsX2ludHZhbCkpIHsKKwkJYWgtPmFoX2NhbF90c3RhbXAgPSBqaWZmaWVzOworCQlhaC0+YWhfc3dpX21hc2sgPSBBUjVLX1NXSV9GVUxMX0NBTElCUkFUSU9OOworCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19DUiwgQVI1S19DUl9TV0kpOworCX0KKworfQorCiAvKioKICAqIGF0aDVrX2h3X25vaXNlX2Zsb29yX2NhbGlicmF0aW9uIC0gcGVyZm9ybSBQSFkgbm9pc2UgZmxvb3IgY2FsaWJyYXRpb24KICAqCkBAIC0xNzMxLDcgKzE3NjIsNyBAQAogdm9pZAogYXRoNWtfaHdfc2V0X2FudGVubmFfbW9kZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBhbnRfbW9kZSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSAmYWgtPmFoX2N1cnJlbnRfY2hhbm5lbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBhaC0+YWhfY3VycmVudF9jaGFubmVsOwogCWJvb2wgdXNlX2RlZl9mb3JfdHgsIHVwZGF0ZV9kZWZfb25fdHgsIHVzZV9kZWZfZm9yX3J0cywgZmFzdF9kaXY7CiAJYm9vbCB1c2VfZGVmX2Zvcl9zZzsKIAl1OCBkZWZfYW50LCB0eF9hbnQsIGVlX21vZGU7CkBAIC0xODk3LDggKzE5MjgsOSBAQAogCXMxNiBtaW5fcHdyTCwgbWluX3B3clI7CiAJczE2IHB3cl9pOwogCi0JaWYgKFdBUk5fT04oc3RlcExbMF0gPT0gc3RlcExbMV0gfHwgc3RlcFJbMF0gPT0gc3RlcFJbMV0pKQotCQlyZXR1cm4gMDsKKwkvKiBTb21lIHZlbmRvcnMgd3JpdGUgdGhlIHNhbWUgcGNkYWMgdmFsdWUgdHdpY2UgISEhICovCisJaWYgKHN0ZXBMWzBdID09IHN0ZXBMWzFdIHx8IHN0ZXBSWzBdID09IHN0ZXBSWzFdKQorCQlyZXR1cm4gbWF4KHB3ckxbMF0sIHB3clJbMF0pOwogCiAJaWYgKHB3ckxbMF0gPT0gcHdyTFsxXSkKIAkJbWluX3B3ckwgPSBwd3JMWzBdOwpAQCAtMjE2Niw2ICsyMTk4LDcgQEAKIGF0aDVrX2dldF9tYXhfY3RsX3Bvd2VyKHN0cnVjdCBhdGg1a19odyAqYWgsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCiB7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoNWtfaHdfcmVndWxhdG9yeShhaCk7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CiAJc3RydWN0IGF0aDVrX2VkZ2VfcG93ZXIgKnJlcCA9IGVlLT5lZV9jdGxfcHdyOwogCXU4ICpjdGxfdmFsID0gZWUtPmVlX2N0bDsKQEAgLTIxNzYsNyArMjIwOSw3IEBACiAJdTggY3RsX2lkeCA9IDB4RkY7CiAJdTMyIHRhcmdldCA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCi0JY3RsX21vZGUgPSBhdGhfcmVnZF9nZXRfYmFuZF9jdGwoJmFoLT5haF9yZWd1bGF0b3J5LCBjaGFubmVsLT5iYW5kKTsKKwljdGxfbW9kZSA9IGF0aF9yZWdkX2dldF9iYW5kX2N0bChyZWd1bGF0b3J5LCBjaGFubmVsLT5iYW5kKTsKIAogCXN3aXRjaCAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX01PREVTKSB7CiAJY2FzZSBDSEFOTkVMX0E6CkBAIC0zMDExLDcgKzMwNDQsNyBAQAogaW50IGF0aDVrX2h3X3NldF90eHBvd2VyX2xpbWl0KHN0cnVjdCBhdGg1a19odyAqYWgsIHU4IHR4cG93ZXIpCiB7CiAJLypKdXN0IGEgdHJ5IE0uRi4qLwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9ICZhaC0+YWhfY3VycmVudF9jaGFubmVsOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGFoLT5haF9jdXJyZW50X2NoYW5uZWw7CiAJdTggZWVfbW9kZTsKIAogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcWN1LmMKaW5kZXggNzM0MDdiMy4uZWVlYmI5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3FjdS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9xY3UuYwpAQCAtMzYyLDcgKzM2Miw3IEBACiAJCX0KIAogCQlpZiAodHEtPnRxaV9yZWFkeV90aW1lICYmCi0JCSh0cS0+dHFpX3R5cGUgIT0gQVI1S19UWF9RVUVVRV9JRF9DQUIpKQorCQkodHEtPnRxaV90eXBlICE9IEFSNUtfVFhfUVVFVUVfQ0FCKSkKIAkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00odHEtPnRxaV9yZWFkeV90aW1lLAogCQkJCUFSNUtfUUNVX1JEWVRJTUVDRkdfSU5UVkFMKSB8CiAJCQkJQVI1S19RQ1VfUkRZVElNRUNGR19FTkFCTEUsCkBAIC00MTEsNyArNDExLDYgQEAKIAkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX01JU0MocXVldWUpLAogCQkJCUFSNUtfUUNVX01JU0NfRlJTSEVEX0JDTl9TRU5UX0dUIHwKIAkJCQlBUjVLX1FDVV9NSVNDX0NCUkVYUF9ESVMgfAotCQkJCUFSNUtfUUNVX01JU0NfUkRZX1ZFT0xfUE9MSUNZIHwKIAkJCQlBUjVLX1FDVV9NSVNDX0NCUkVYUF9CQ05fRElTKTsKIAogCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAoKEFSNUtfVFVORV9CRUFDT05fSU5URVJWQUwgLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JlZy5oCmluZGV4IDY4MDliNTRhLi5kZWJhZDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JlZy5oCkBAIC0zMzksOSArMzM5LDkgQEAKICNkZWZpbmUgQVI1S19TSVNSMgkJMHgwMDhjCQkJLyogUmVnaXN0ZXIgQWRkcmVzcyBbNTIxMStdICovCiAjZGVmaW5lIEFSNUtfU0lTUjJfUUNVX1RYVVJOCTB4MDAwMDAzZmYJLyogTWFzayBmb3IgUUNVX1RYVVJOICovCiAjZGVmaW5lCUFSNUtfU0lTUjJfUUNVX1RYVVJOX1MJMAotI2RlZmluZQlBUjVLX1NJU1IyX01DQUJUCTB4MDAxMDAwMDAJLyogTWFzdGVyIEN5Y2xlIEFib3J0ICovCi0jZGVmaW5lCUFSNUtfU0lTUjJfU1NFUlIJMHgwMDIwMDAwMAkvKiBTaWduYWxlZCBTeXN0ZW0gRXJyb3IgKi8KLSNkZWZpbmUJQVI1S19TSVNSMl9EUEVSUgkweDAwNDAwMDAwCS8qIEJ1cyBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUJQVI1S19TSVNSMl9NQ0FCVAkweDAwMDEwMDAwCS8qIE1hc3RlciBDeWNsZSBBYm9ydCAqLworI2RlZmluZQlBUjVLX1NJU1IyX1NTRVJSCTB4MDAwMjAwMDAJLyogU2lnbmFsZWQgU3lzdGVtIEVycm9yICovCisjZGVmaW5lCUFSNUtfU0lTUjJfRFBFUlIJMHgwMDA0MDAwMAkvKiBCdXMgcGFyaXR5IGVycm9yICovCiAjZGVmaW5lCUFSNUtfU0lTUjJfVElNCQkweDAxMDAwMDAwCS8qIFs1MjEyK10gKi8KICNkZWZpbmUJQVI1S19TSVNSMl9DQUJfRU5ECTB4MDIwMDAwMDAJLyogWzUyMTIrXSAqLwogI2RlZmluZQlBUjVLX1NJU1IyX0RUSU1fU1lOQwkweDA0MDAwMDAwCS8qIERUSU0gc3luYyBsb3N0IFs1MjEyK10gKi8KQEAgLTQzMCw5ICs0MzAsOSBAQAogI2RlZmluZSBBUjVLX1NJTVIyCQkweDAwYWMJCQkvKiBSZWdpc3RlciBBZGRyZXNzIFs1MjExK10gKi8KICNkZWZpbmUgQVI1S19TSU1SMl9RQ1VfVFhVUk4JMHgwMDAwMDNmZgkvKiBNYXNrIGZvciBRQ1VfVFhVUk4gKi8KICNkZWZpbmUgQVI1S19TSU1SMl9RQ1VfVFhVUk5fUwkwCi0jZGVmaW5lCUFSNUtfU0lNUjJfTUNBQlQJMHgwMDEwMDAwMAkvKiBNYXN0ZXIgQ3ljbGUgQWJvcnQgKi8KLSNkZWZpbmUJQVI1S19TSU1SMl9TU0VSUgkweDAwMjAwMDAwCS8qIFNpZ25hbGVkIFN5c3RlbSBFcnJvciAqLwotI2RlZmluZQlBUjVLX1NJTVIyX0RQRVJSCTB4MDA0MDAwMDAJLyogQnVzIHBhcml0eSBlcnJvciAqLworI2RlZmluZQlBUjVLX1NJTVIyX01DQUJUCTB4MDAwMTAwMDAJLyogTWFzdGVyIEN5Y2xlIEFib3J0ICovCisjZGVmaW5lCUFSNUtfU0lNUjJfU1NFUlIJMHgwMDAyMDAwMAkvKiBTaWduYWxlZCBTeXN0ZW0gRXJyb3IgKi8KKyNkZWZpbmUJQVI1S19TSU1SMl9EUEVSUgkweDAwMDQwMDAwCS8qIEJ1cyBwYXJpdHkgZXJyb3IgKi8KICNkZWZpbmUJQVI1S19TSU1SMl9USU0JCTB4MDEwMDAwMDAJLyogWzUyMTIrXSAqLwogI2RlZmluZQlBUjVLX1NJTVIyX0NBQl9FTkQJMHgwMjAwMDAwMAkvKiBbNTIxMitdICovCiAjZGVmaW5lCUFSNUtfU0lNUjJfRFRJTV9TWU5DCTB4MDQwMDAwMDAJLyogRFRJTSBTeW5jIGxvc3QgWzUyMTIrXSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwppbmRleCBiZDBhOTdhLi4zNGUxM2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwpAQCAtMjU4LDI5ICsyNTgsMzUgQEAKIAkJaWYgKCFzZXRfY2hpcCkKIAkJCWdvdG8gY29tbWl0OwogCi0JCS8qIFByZXNlcnZlIHNsZWVwIGR1cmF0aW9uICovCiAJCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19TTEVFUF9DVEwpOworCisJCS8qIElmIGNhcmQgaXMgZG93biB3ZSAnbGwgZ2V0IDB4ZmZmZi4uLiBzbyB3ZQorCQkgKiBuZWVkIHRvIGNsZWFuIHRoaXMgdXAgYmVmb3JlIHdlIHdyaXRlIHRoZSByZWdpc3RlcgorCQkgKi8KIAkJaWYgKGRhdGEgJiAweGZmYzAwMDAwKQogCQkJZGF0YSA9IDA7CiAJCWVsc2UKLQkJCWRhdGEgPSBkYXRhICYgMHhmZmZjZmZmZjsKKwkJCS8qIFByZXNlcnZlIHNsZWVwIGR1cmF0aW9uIGV0YyAqLworCQkJZGF0YSA9IGRhdGEgJiB+QVI1S19TTEVFUF9DVExfU0xFOwogCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgZGF0YSwgQVI1S19TTEVFUF9DVEwpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGRhdGEgfCBBUjVLX1NMRUVQX0NUTF9TTEVfV0FLRSwKKwkJCQkJCQlBUjVLX1NMRUVQX0NUTCk7CiAJCXVkZWxheSgxNSk7CiAKLQkJZm9yIChpID0gNTA7IGkgPiAwOyBpLS0pIHsKKwkJZm9yIChpID0gMjAwOyBpID4gMDsgaS0tKSB7CiAJCQkvKiBDaGVjayBpZiB0aGUgY2hpcCBkaWQgd2FrZSB1cCAqLwogCQkJaWYgKChhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QQ0lDRkcpICYKIAkJCQkJQVI1S19QQ0lDRkdfU1BXUl9ETikgPT0gMCkKIAkJCQlicmVhazsKIAogCQkJLyogV2FpdCBhIGJpdCBhbmQgcmV0cnkgKi8KLQkJCXVkZWxheSgyMDApOwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBkYXRhLCBBUjVLX1NMRUVQX0NUTCk7CisJCQl1ZGVsYXkoNTApOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBkYXRhIHwgQVI1S19TTEVFUF9DVExfU0xFX1dBS0UsCisJCQkJCQkJQVI1S19TTEVFUF9DVEwpOwogCQl9CiAKIAkJLyogRmFpbCBpZiB0aGUgY2hpcCBkaWRuJ3Qgd2FrZSB1cCAqLwotCQlpZiAoaSA8PSAwKQorCQlpZiAoaSA9PSAwKQogCQkJcmV0dXJuIC1FSU87CiAKIAkJYnJlYWs7CkBAIC0yOTAsMTMgKzI5Niw3MCBAQAogCX0KIAogY29tbWl0OgotCWFoLT5haF9wb3dlcl9tb2RlID0gbW9kZTsKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIHN0YWlkLCBBUjVLX1NUQV9JRDEpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCisgKiBQdXQgZGV2aWNlIG9uIGhvbGQKKyAqCisgKiBQdXQgTUFDIGFuZCBCYXNlYmFuZCBvbiB3YXJtIHJlc2V0IGFuZAorICoga2VlcCB0aGF0IHN0YXRlIChkb24ndCBjbGVhbiBzbGVlcCBjb250cm9sCisgKiByZWdpc3RlcikuIEFmdGVyIHRoaXMgTUFDIGFuZCBCYXNlYmFuZCBhcmUKKyAqIGRpc2FibGVkIGFuZCBhIGZ1bGwgcmVzZXQgaXMgbmVlZGVkIHRvIGNvbWUKKyAqIGJhY2suIFRoaXMgd2F5IHdlIHNhdmUgYXMgbXVjaCBwb3dlciBhcyBwb3NzaWJsZQorICogd2l0aG91dCBwdXRpbmcgdGhlIGNhcmQgb24gZnVsbCBzbGVlcC4KKyAqLworaW50IGF0aDVrX2h3X29uX2hvbGQoc3RydWN0IGF0aDVrX2h3ICphaCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFoLT5haF9zYy0+cGRldjsKKwl1MzIgYnVzX2ZsYWdzOworCWludCByZXQ7CisKKwkvKiBNYWtlIHN1cmUgZGV2aWNlIGlzIGF3YWtlICovCisJcmV0ID0gYXRoNWtfaHdfc2V0X3Bvd2VyKGFoLCBBUjVLX1BNX0FXQUtFLCB0cnVlLCAwKTsKKwlpZiAocmV0KSB7CisJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJmYWlsZWQgdG8gd2FrZXVwIHRoZSBNQUMgQ2hpcFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBQdXQgY2hpcHNldCBvbiB3YXJtIHJlc2V0Li4uCisJICoKKwkgKiBOb3RlOiBwdXRpbmcgUENJIGNvcmUgb24gd2FybSByZXNldCBvbiBQQ0ktRSBjYXJkcworCSAqIHJlc3VsdHMgY2FyZCB0byBoYW5nIGFuZCBhbHdheXMgcmV0dXJuIDB4ZmZmZi4uLiBzbworCSAqIHdlIGluZ29yZSB0aGF0IGZsYWcgZm9yIFBDSS1FIGNhcmRzLiBPbiBQQ0kgY2FyZHMKKwkgKiB0aGlzIGZsYWcgZ2V0cyBjbGVhcmVkIGFmdGVyIDY0IFBDSSBjbG9ja3MuCisJICovCisJYnVzX2ZsYWdzID0gKHBkZXYtPmlzX3BjaWUpID8gMCA6IEFSNUtfUkVTRVRfQ1RMX1BDSTsKKworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgeworCQlyZXQgPSBhdGg1a19od19uaWNfcmVzZXQoYWgsIEFSNUtfUkVTRVRfQ1RMX1BDVSB8CisJCQlBUjVLX1JFU0VUX0NUTF9NQUMgfCBBUjVLX1JFU0VUX0NUTF9ETUEgfAorCQkJQVI1S19SRVNFVF9DVExfUEhZIHwgQVI1S19SRVNFVF9DVExfUENJKTsKKwkJCW1kZWxheSgyKTsKKwl9IGVsc2UgeworCQlyZXQgPSBhdGg1a19od19uaWNfcmVzZXQoYWgsIEFSNUtfUkVTRVRfQ1RMX1BDVSB8CisJCQlBUjVLX1JFU0VUX0NUTF9CQVNFQkFORCB8IGJ1c19mbGFncyk7CisJfQorCisJaWYgKHJldCkgeworCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiZmFpbGVkIHRvIHB1dCBkZXZpY2Ugb24gd2FybSByZXNldFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIC4uLndha2V1cCBhZ2FpbiEqLworCXJldCA9IGF0aDVrX2h3X3NldF9wb3dlcihhaCwgQVI1S19QTV9BV0FLRSwgdHJ1ZSwgMCk7CisJaWYgKHJldCkgeworCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiZmFpbGVkIHRvIHB1dCBkZXZpY2Ugb24gaG9sZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIEJyaW5nIHVwIE1BQyArIFBIWSBDaGlwcyBhbmQgcHJvZ3JhbSBQTEwKICAqIFRPRE86IEhhbGYvUXVhcnRlciByYXRlIHN1cHBvcnQKICAqLwpAQCAtMzE5LDYgKzM4Miw1MCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCS8qCisJICogUHV0IGNoaXBzZXQgb24gd2FybSByZXNldC4uLgorCSAqCisJICogTm90ZTogcHV0aW5nIFBDSSBjb3JlIG9uIHdhcm0gcmVzZXQgb24gUENJLUUgY2FyZHMKKwkgKiByZXN1bHRzIGNhcmQgdG8gaGFuZyBhbmQgYWx3YXlzIHJldHVybiAweGZmZmYuLi4gc28KKwkgKiB3ZSBpbmdvcmUgdGhhdCBmbGFnIGZvciBQQ0ktRSBjYXJkcy4gT24gUENJIGNhcmRzCisJICogdGhpcyBmbGFnIGdldHMgY2xlYXJlZCBhZnRlciA2NCBQQ0kgY2xvY2tzLgorCSAqLworCWJ1c19mbGFncyA9IChwZGV2LT5pc19wY2llKSA/IDAgOiBBUjVLX1JFU0VUX0NUTF9QQ0k7CisKKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApIHsKKwkJcmV0ID0gYXRoNWtfaHdfbmljX3Jlc2V0KGFoLCBBUjVLX1JFU0VUX0NUTF9QQ1UgfAorCQkJQVI1S19SRVNFVF9DVExfTUFDIHwgQVI1S19SRVNFVF9DVExfRE1BIHwKKwkJCUFSNUtfUkVTRVRfQ1RMX1BIWSB8IEFSNUtfUkVTRVRfQ1RMX1BDSSk7CisJCQltZGVsYXkoMik7CisJfSBlbHNlIHsKKwkJcmV0ID0gYXRoNWtfaHdfbmljX3Jlc2V0KGFoLCBBUjVLX1JFU0VUX0NUTF9QQ1UgfAorCQkJQVI1S19SRVNFVF9DVExfQkFTRUJBTkQgfCBidXNfZmxhZ3MpOworCX0KKworCWlmIChyZXQpIHsKKwkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byByZXNldCB0aGUgTUFDIENoaXBcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiAuLi53YWtldXAgYWdhaW4hLi4uKi8KKwlyZXQgPSBhdGg1a19od19zZXRfcG93ZXIoYWgsIEFSNUtfUE1fQVdBS0UsIHRydWUsIDApOworCWlmIChyZXQpIHsKKwkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byByZXN1bWUgdGhlIE1BQyBDaGlwXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiAuLi5jbGVhciByZXNldCBjb250cm9sIHJlZ2lzdGVyIGFuZCBwdWxsIGRldmljZSBvdXQgb2YKKwkgKiB3YXJtIHJlc2V0ICovCisJaWYgKGF0aDVrX2h3X25pY19yZXNldChhaCwgMCkpIHsKKwkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byB3YXJtIHJlc2V0IHRoZSBNQUMgQ2hpcFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIE9uIGluaXRpYWxpemF0aW9uIHNraXAgUExMIHByb2dyYW1taW5nIHNpbmNlIHdlIGRvbid0IGhhdmUKKwkgKiBhIGNoYW5uZWwgLyBtb2RlIHNldCB5ZXQgKi8KKwlpZiAoaW5pdGlhbCkKKwkJcmV0dXJuIDA7CisKIAlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKIAkJLyoKIAkJICogR2V0IGNoYW5uZWwgbW9kZSBmbGFncwpAQCAtMzg0LDM5ICs0OTEsNiBAQAogCQkJCQlBUjVLX1BIWV9UVVJCTyk7CiAJfQogCi0JLyogcmVzZXRpbmcgUENJIG9uIFBDSS1FIGNhcmRzIHJlc3VsdHMgY2FyZCB0byBoYW5nCi0JICogYW5kIGFsd2F5cyByZXR1cm4gMHhmZmZmLi4uIHNvIHdlIGluZ29yZSB0aGF0IGZsYWcKLQkgKiBmb3IgUENJLUUgY2FyZHMgKi8KLQlidXNfZmxhZ3MgPSAocGRldi0+aXNfcGNpZSkgPyAwIDogQVI1S19SRVNFVF9DVExfUENJOwotCi0JLyogUmVzZXQgY2hpcHNldCAqLwotCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgewotCQlyZXQgPSBhdGg1a19od19uaWNfcmVzZXQoYWgsIEFSNUtfUkVTRVRfQ1RMX1BDVSB8Ci0JCQlBUjVLX1JFU0VUX0NUTF9NQUMgfCBBUjVLX1JFU0VUX0NUTF9ETUEgfAotCQkJQVI1S19SRVNFVF9DVExfUEhZIHwgQVI1S19SRVNFVF9DVExfUENJKTsKLQkJCW1kZWxheSgyKTsKLQl9IGVsc2UgewotCQlyZXQgPSBhdGg1a19od19uaWNfcmVzZXQoYWgsIEFSNUtfUkVTRVRfQ1RMX1BDVSB8Ci0JCQlBUjVLX1JFU0VUX0NUTF9CQVNFQkFORCB8IGJ1c19mbGFncyk7Ci0JfQotCWlmIChyZXQpIHsKLQkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byByZXNldCB0aGUgTUFDIENoaXBcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiAuLi53YWtldXAgYWdhaW4hKi8KLQlyZXQgPSBhdGg1a19od19zZXRfcG93ZXIoYWgsIEFSNUtfUE1fQVdBS0UsIHRydWUsIDApOwotCWlmIChyZXQpIHsKLQkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byByZXN1bWUgdGhlIE1BQyBDaGlwXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiAuLi5maW5hbCB3YXJtIHJlc2V0ICovCi0JaWYgKGF0aDVrX2h3X25pY19yZXNldChhaCwgMCkpIHsKLQkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byB3YXJtIHJlc2V0IHRoZSBNQUMgQ2hpcFxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewogCiAJCS8qIC4uLnVwZGF0ZSBQTEwgaWYgbmVlZGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCmluZGV4IDJkNzk2MTAuLmVmNWY1OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCkBAIC0xLDEzICsxLDE4IEBACiBjb25maWcgQVRIOUsKIAl0cmlzdGF0ZSAiQXRoZXJvcyA4MDIuMTFuIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEgJiYgV0xBTl84MDIxMQotCXNlbGVjdCBBVEhfQ09NTU9OCiAJc2VsZWN0IE1BQzgwMjExX0xFRFMKIAlzZWxlY3QgTEVEU19DTEFTUwogCXNlbGVjdCBORVdfTEVEUwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24KLQkgIEF0aGVyb3MgSUVFRSA4MDIuMTFuIEFSNTAwOCBhbmQgQVI5MDAxIGZhbWlseSBvZiBjaGlwc2V0cy4KKwkgIEF0aGVyb3MgSUVFRSA4MDIuMTFuIEFSNTAwOCwgQVI5MDAxIGFuZCBBUjkwMDIgZmFtaWx5CisJICBvZiBjaGlwc2V0cy4gRm9yIGEgc3BlY2lmaWMgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZXJuYWwKKwkgIGNhcmRzLCBsYXB0b3BzIHRoYXQgYWxyZWFkeSBzaGlwIHdpdGggdGhlc2UgY2FyZHMgYW5kCisJICBBUHMgdGhhdCBjb21lIHdpdGggdGhlc2UgY2FyZHMgcmVmZXIgdG8gdG8gYXRoOWsgd2lraQorCSAgcHJvZHVjdHMgcGFnZToKKworCSAgaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9hdGg5ay9wcm9kdWN0cwogCiAJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgYXRoOWsuCiAKQEAgLTE4LDYgKzIzLDYgQEAKIAkgIFNheSBZLCBpZiB5b3UgbmVlZCBhdGg5ayB0byBkaXNwbGF5IGRlYnVnIG1lc3NhZ2VzLgogCSAgUGFzcyB0aGUgZGVidWcgbWFzayBhcyBhIG1vZHVsZSBwYXJhbWV0ZXI6CiAKLQkgIG1vZHByb2JlIGF0aDlrIGRlYnVnPTB4MDAwMDIwMDAKKwkgIG1vZHByb2JlIGF0aDlrIGRlYnVnPTB4MDAwMDAyMDAKIAotCSAgTG9vayBpbiBhdGg5ay9jb3JlLmggZm9yIHBvc3NpYmxlIGRlYnVnIG1hc2tzCisJICBMb29rIGluIGF0aDlrL2RlYnVnLmggZm9yIHBvc3NpYmxlIGRlYnVnIG1hc2tzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUKaW5kZXggNzgzYmMzOS4uZmYyYzlhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZQpAQCAtMSw1ICsxLDggQEAKIGF0aDlrLXkgKz0JaHcubyBcCiAJCWVlcHJvbS5vIFwKKwkJZWVwcm9tX2RlZi5vIFwKKwkJZWVwcm9tXzRrLm8gXAorCQllZXByb21fOTI4Ny5vIFwKIAkJbWFjLm8gXAogCQljYWxpYi5vIFwKIAkJYW5pLm8gXApAQCAtOSw3ICsxMiw4IEBACiAJCXJlY3YubyBcCiAJCXhtaXQubyBcCiAJCXZpcnR1YWwubyBcCi0JCXJjLm8KKwkJcmMubyBcCisJCWJ0Y29leC5vCiAKIGF0aDlrLSQoQ09ORklHX1BDSSkgKz0gcGNpLm8KIGF0aDlrLSQoQ09ORklHX0FUSEVST1NfQVI3MVhYKSArPSBhaGIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jCmluZGV4IDBlNjVjNTEuLjJhZDdkMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9haGIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYWhiLmMKQEAgLTExOSwxNyArMTE5LDE1IEBACiAJc2MtPmJ1c19vcHMgPSAmYXRoX2FoYl9idXNfb3BzOwogCXNjLT5pcnEgPSBpcnE7CiAKLQlyZXQgPSBhdGhfYXR0YWNoKEFSNTQxNl9BUjkxMDBfREVWSUQsIHNjKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGF0dGFjaCBkZXZpY2UsIGVycj0lZFxuIiwgcmV0KTsKLQkJcmV0ID0gLUVOT0RFVjsKKwlyZXQgPSBhdGhfaW5pdF9kZXZpY2UoQVI1NDE2X0FSOTEwMF9ERVZJRCwgc2MsIDB4MCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZXZpY2VcbiIpOwogCQlnb3RvIGVycl9mcmVlX2h3OwogCX0KIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoX2lzciwgSVJRRl9TSEFSRUQsICJhdGg5ayIsIHNjKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZCwgZXJyPSVkXG4iLCByZXQpOwotCQlyZXQgPSAtRUlPOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9kZXRhY2g7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmMKaW5kZXggYWFkMjU5Yi4uYTdjYmIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hbmkuYwpAQCAtMjM2LDM2ICsyMzYsMzUgQEAKIAkJcmV0dXJuOwogCiAJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOwotCiAJYW5pU3RhdGUtPmxpc3RlblRpbWUgPSAwOwotCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7Ci0JCWlmIChhbmlTdGF0ZS0+b2ZkbVRyaWdIaWdoID4gQVJfUEhZX0NPVU5UTUFYKSB7Ci0JCQlhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UgPSAwOwotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAotCQkJCSJPRkRNIFRyaWdnZXIgaXMgdG9vIGhpZ2ggZm9yIGh3IGNvdW50ZXJzXG4iKTsKLQkJfSBlbHNlIHsKLQkJCWFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSA9Ci0JCQkJQVJfUEhZX0NPVU5UTUFYIC0gYW5pU3RhdGUtPm9mZG1UcmlnSGlnaDsKLQkJfQotCQlpZiAoYW5pU3RhdGUtPmNja1RyaWdIaWdoID4gQVJfUEhZX0NPVU5UTUFYKSB7Ci0JCQlhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSA9IDA7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCi0JCQkJIkNDSyBUcmlnZ2VyIGlzIHRvbyBoaWdoIGZvciBodyBjb3VudGVyc1xuIik7Ci0JCX0gZWxzZSB7Ci0JCQlhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSA9Ci0JCQkJQVJfUEhZX0NPVU5UTUFYIC0gYW5pU3RhdGUtPmNja1RyaWdIaWdoOwotCQl9Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKLQkJCSJXcml0aW5nIG9mZG1iYXNlPSV1ICAgY2NrYmFzZT0ldVxuIiwKLQkJCWFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSwKLQkJCWFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzEsIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSk7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8yLCBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSk7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl9NQVNLXzEsIEFSX1BIWV9FUlJfT0ZETV9USU1JTkcpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLCBBUl9QSFlfRVJSX0NDS19USU1JTkcpOwogCi0JCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFoLT5haF9taWJTdGF0cyk7CisJaWYgKGFuaVN0YXRlLT5vZmRtVHJpZ0hpZ2ggPiBBUl9QSFlfQ09VTlRNQVgpIHsKKwkJYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlID0gMDsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAorCQkJIk9GRE0gVHJpZ2dlciBpcyB0b28gaGlnaCBmb3IgaHcgY291bnRlcnNcbiIpOworCX0gZWxzZSB7CisJCWFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSA9CisJCQlBUl9QSFlfQ09VTlRNQVggLSBhbmlTdGF0ZS0+b2ZkbVRyaWdIaWdoOwogCX0KKwlpZiAoYW5pU3RhdGUtPmNja1RyaWdIaWdoID4gQVJfUEhZX0NPVU5UTUFYKSB7CisJCWFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlID0gMDsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAorCQkJIkNDSyBUcmlnZ2VyIGlzIHRvbyBoaWdoIGZvciBodyBjb3VudGVyc1xuIik7CisJfSBlbHNlIHsKKwkJYW5pU3RhdGUtPmNja1BoeUVyckJhc2UgPQorCQkJQVJfUEhZX0NPVU5UTUFYIC0gYW5pU3RhdGUtPmNja1RyaWdIaWdoOworCX0KKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCSJXcml0aW5nIG9mZG1iYXNlPSV1ICAgY2NrYmFzZT0ldVxuIiwKKwkJYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlLAorCQlhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzEsIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18xLCBBUl9QSFlfRVJSX09GRE1fVElNSU5HKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLCBBUl9QSFlfRVJSX0NDS19USU1JTkcpOworCisJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKKwogCWFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQgPSAwOwogCWFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudCA9IDA7CiB9CkBAIC01MzAsMzIgKzUyOSwyNiBAQAogCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsICE9IDApCiAJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfRklSU1RFUF9MRVZFTCwKIAkJCQkgICAgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwpOwotCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7Ci0JCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKGFoLCBhdGg5a19od19nZXRyeGZpbHRlcihhaCkgJgotCQkJCSAgICAgfkFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIpOwotCQlhdGg5a19hbmlfcmVzdGFydChhaCk7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl9NQVNLXzEsIEFSX1BIWV9FUlJfT0ZETV9USU1JTkcpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLCBBUl9QSFlfRVJSX0NDS19USU1JTkcpOwogCi0JfSBlbHNlIHsKLQkJYXRoOWtfYW5pX3Jlc3RhcnQoYWgpOwotCQlhdGg5a19od19zZXRyeGZpbHRlcihhaCwgYXRoOWtfaHdfZ2V0cnhmaWx0ZXIoYWgpIHwKLQkJCQkgICAgIEFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIpOwotCX0KKwlhdGg5a19od19zZXRyeGZpbHRlcihhaCwgYXRoOWtfaHdfZ2V0cnhmaWx0ZXIoYWgpICYKKwkJCSAgICAgfkFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIpOworCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18xLCBBUl9QSFlfRVJSX09GRE1fVElNSU5HKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLCBBUl9QSFlfRVJSX0NDS19USU1JTkcpOwogfQogCiB2b2lkIGF0aDlrX2h3X2FuaV9tb25pdG9yKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMsCiAJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7CiAJaW50MzJfdCBsaXN0ZW5UaW1lOworCXUzMiBwaHlDbnQxLCBwaHlDbnQyOworCXUzMiBvZmRtUGh5RXJyQ250LCBjY2tQaHlFcnJDbnQ7CiAKIAlpZiAoIURPX0FOSShhaCkpCiAJCXJldHVybjsKIAogCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKLQlhaC0+c3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKIAogCWxpc3RlblRpbWUgPSBhdGg5a19od19hbmlfZ2V0X2xpc3Rlbl90aW1lKGFoKTsKIAlpZiAobGlzdGVuVGltZSA8IDApIHsKQEAgLTU2Niw1MSArNTU5LDQ2IEBACiAKIAlhbmlTdGF0ZS0+bGlzdGVuVGltZSArPSBsaXN0ZW5UaW1lOwogCi0JaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKLQkJdTMyIHBoeUNudDEsIHBoeUNudDI7Ci0JCXUzMiBvZmRtUGh5RXJyQ250LCBjY2tQaHlFcnJDbnQ7CisJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKIAotCQlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOworCXBoeUNudDEgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0VSUl8xKTsKKwlwaHlDbnQyID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlJfMik7CiAKLQkJcGh5Q250MSA9IFJFR19SRUFEKGFoLCBBUl9QSFlfRVJSXzEpOwotCQlwaHlDbnQyID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlJfMik7Ci0KLQkJaWYgKHBoeUNudDEgPCBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UgfHwKLQkJICAgIHBoeUNudDIgPCBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSkgewotCQkJaWYgKHBoeUNudDEgPCBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UpIHsKLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCi0JCQkJCSJwaHlDbnQxIDB4JXgsIHJlc2V0dGluZyAiCi0JCQkJCSJjb3VudGVyIHZhbHVlIHRvIDB4JXhcbiIsCi0JCQkJCXBoeUNudDEsIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSk7Ci0JCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzEsCi0JCQkJCSAgYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlKTsKLQkJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18xLAotCQkJCQkgIEFSX1BIWV9FUlJfT0ZETV9USU1JTkcpOwotCQkJfQotCQkJaWYgKHBoeUNudDIgPCBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSkgewotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKLQkJCQkJInBoeUNudDIgMHgleCwgcmVzZXR0aW5nICIKLQkJCQkJImNvdW50ZXIgdmFsdWUgdG8gMHgleFxuIiwKLQkJCQkJcGh5Q250MiwgYW5pU3RhdGUtPmNja1BoeUVyckJhc2UpOwotCQkJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8yLAotCQkJCQkgIGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKTsKLQkJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLAotCQkJCQkgIEFSX1BIWV9FUlJfQ0NLX1RJTUlORyk7Ci0JCQl9Ci0JCQlyZXR1cm47CisJaWYgKHBoeUNudDEgPCBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UgfHwKKwkgICAgcGh5Q250MiA8IGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKSB7CisJCWlmIChwaHlDbnQxIDwgYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCQkJInBoeUNudDEgMHgleCwgcmVzZXR0aW5nICIKKwkJCQkiY291bnRlciB2YWx1ZSB0byAweCV4XG4iLAorCQkJCXBoeUNudDEsIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMSwKKwkJCQkgIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18xLAorCQkJCSAgQVJfUEhZX0VSUl9PRkRNX1RJTUlORyk7CiAJCX0KLQotCQlvZmRtUGh5RXJyQ250ID0gcGh5Q250MSAtIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZTsKLQkJYWgtPnN0YXRzLmFzdF9hbmlfb2ZkbWVycnMgKz0KLQkJCW9mZG1QaHlFcnJDbnQgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50OwotCQlhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50ID0gb2ZkbVBoeUVyckNudDsKLQotCQljY2tQaHlFcnJDbnQgPSBwaHlDbnQyIC0gYW5pU3RhdGUtPmNja1BoeUVyckJhc2U7Ci0JCWFoLT5zdGF0cy5hc3RfYW5pX2Nja2VycnMgKz0KLQkJCWNja1BoeUVyckNudCAtIGFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudDsKLQkJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID0gY2NrUGh5RXJyQ250OworCQlpZiAocGh5Q250MiA8IGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCQkJInBoeUNudDIgMHgleCwgcmVzZXR0aW5nICIKKwkJCQkiY291bnRlciB2YWx1ZSB0byAweCV4XG4iLAorCQkJCXBoeUNudDIsIGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKTsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8yLAorCQkJCSAgYW5pU3RhdGUtPmNja1BoeUVyckJhc2UpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMiwKKwkJCQkgIEFSX1BIWV9FUlJfQ0NLX1RJTUlORyk7CisJCX0KKwkJcmV0dXJuOwogCX0KIAorCW9mZG1QaHlFcnJDbnQgPSBwaHlDbnQxIC0gYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlOworCWFoLT5zdGF0cy5hc3RfYW5pX29mZG1lcnJzICs9CisJCW9mZG1QaHlFcnJDbnQgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50OworCWFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQgPSBvZmRtUGh5RXJyQ250OworCisJY2NrUGh5RXJyQ250ID0gcGh5Q250MiAtIGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlOworCWFoLT5zdGF0cy5hc3RfYW5pX2Nja2VycnMgKz0KKwkJY2NrUGh5RXJyQ250IC0gYW5pU3RhdGUtPmNja1BoeUVyckNvdW50OworCWFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudCA9IGNja1BoeUVyckNudDsKKwogCWlmIChhbmlTdGF0ZS0+bGlzdGVuVGltZSA+IDUgKiBhaC0+YW5pcGVyaW9kKSB7CiAJCWlmIChhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50IDw9IGFuaVN0YXRlLT5saXN0ZW5UaW1lICoKIAkJICAgIGFuaVN0YXRlLT5vZmRtVHJpZ0xvdyAvIDEwMDAgJiYKQEAgLTYzMiwxMSArNjIwLDYgQEAKIAl9CiB9CiAKLWJvb2wgYXRoOWtfaHdfcGh5Y291bnRlcnMoc3RydWN0IGF0aF9odyAqYWgpCi17Ci0JcmV0dXJuIGFoLT5oYXNfaHdfcGh5Y291bnRlcnMgPyB0cnVlIDogZmFsc2U7Ci19Ci0KIHZvaWQgYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJFbmFibGUgTUlCIGNvdW50ZXJzXG4iKTsKQEAgLTcwOCw4ICs2OTEsNyBAQAogICogYW55IG9mIHRoZSBNSUIgY291bnRlcnMgb3ZlcmZsb3cvdHJpZ2dlciBzbyBkb24ndCBhc3N1bWUgd2UncmUKICAqIGhlcmUgYmVjYXVzZSBhIFBIWSBlcnJvciBjb3VudGVyIHRyaWdnZXJlZC4KICAqLwotdm9pZCBhdGg5a19od19wcm9jbWliZXZlbnQoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkgICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMpCit2b2lkIGF0aDlrX2h3X3Byb2NtaWJldmVudChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgcGh5Q250MSwgcGh5Q250MjsKIApAQCAtNzIxLDcgKzcwMyw2IEBACiAKIAkvKiBDbGVhciB0aGUgbWliIGNvdW50ZXJzIGFuZCBzYXZlIHRoZW0gaW4gdGhlIHN0YXRzICovCiAJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKLQlhaC0+c3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKIAogCWlmICghRE9fQU5JKGFoKSkKIAkJcmV0dXJuOwpAQCAtNzc3LDEzICs3NTgsMTEgQEAKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfYW5pX2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKK3ZvaWQgYXRoOWtfaHdfYW5pX2luaXQoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGk7CiAKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJBdHRhY2ggQU5JXG4iKTsKLQotCWFoLT5oYXNfaHdfcGh5Y291bnRlcnMgPSAxOworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIkluaXRpYWxpemUgQU5JXG4iKTsKIAogCW1lbXNldChhaC0+YW5pLCAwLCBzaXplb2YoYWgtPmFuaSkpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFoLT5hbmkpOyBpKyspIHsKQEAgLTc5OSwzNiArNzc4LDMyIEBACiAJCQlBVEg5S19BTklfQ0NLX1dFQUtfU0lHX1RIUjsKIAkJYWgtPmFuaVtpXS5zcHVySW1tdW5pdHlMZXZlbCA9IEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkw7CiAJCWFoLT5hbmlbaV0uZmlyc3RlcExldmVsID0gQVRIOUtfQU5JX0ZJUlNURVBfTFZMOwotCQlpZiAoYWgtPmhhc19od19waHljb3VudGVycykgewotCQkJYWgtPmFuaVtpXS5vZmRtUGh5RXJyQmFzZSA9Ci0JCQkJQVJfUEhZX0NPVU5UTUFYIC0gQVRIOUtfQU5JX09GRE1fVFJJR19ISUdIOwotCQkJYWgtPmFuaVtpXS5jY2tQaHlFcnJCYXNlID0KLQkJCQlBUl9QSFlfQ09VTlRNQVggLSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSDsKLQkJfQorCQlhaC0+YW5pW2ldLm9mZG1QaHlFcnJCYXNlID0KKwkJCUFSX1BIWV9DT1VOVE1BWCAtIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSDsKKwkJYWgtPmFuaVtpXS5jY2tQaHlFcnJCYXNlID0KKwkJCUFSX1BIWV9DT1VOVE1BWCAtIEFUSDlLX0FOSV9DQ0tfVFJJR19ISUdIOwogCX0KLQlpZiAoYWgtPmhhc19od19waHljb3VudGVycykgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCi0JCQkiU2V0dGluZyBPZmRtRXJyQmFzZSA9IDB4JTA4eFxuIiwKLQkJCWFoLT5hbmlbMF0ub2ZkbVBoeUVyckJhc2UpOwotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJTZXR0aW5nIGNja0VyckJhc2UgPSAweCUwOHhcbiIsCi0JCQlhaC0+YW5pWzBdLmNja1BoeUVyckJhc2UpOwogCi0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCBhaC0+YW5pWzBdLm9mZG1QaHlFcnJCYXNlKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIGFoLT5hbmlbMF0uY2NrUGh5RXJyQmFzZSk7Ci0JCWF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoYWgpOwotCX0KKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCSJTZXR0aW5nIE9mZG1FcnJCYXNlID0gMHglMDh4XG4iLAorCQlhaC0+YW5pWzBdLm9mZG1QaHlFcnJCYXNlKTsKKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJTZXR0aW5nIGNja0VyckJhc2UgPSAweCUwOHhcbiIsCisJCWFoLT5hbmlbMF0uY2NrUGh5RXJyQmFzZSk7CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMSwgYWgtPmFuaVswXS5vZmRtUGh5RXJyQmFzZSk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIGFoLT5hbmlbMF0uY2NrUGh5RXJyQmFzZSk7CisJYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhhaCk7CisKIAlhaC0+YW5pcGVyaW9kID0gQVRIOUtfQU5JX1BFUklPRDsKIAlpZiAoYWgtPmNvbmZpZy5lbmFibGVfYW5pKQogCQlhaC0+cHJvY19waHllcnIgfD0gSEFMX1BST0NFU1NfQU5JOwogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpCit2b2lkIGF0aDlrX2h3X2FuaV9kaXNhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIkRldGFjaCBBTklcbiIpOworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIkRpc2FibGluZyBBTklcbiIpOwogCi0JaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKLQkJYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoYWgpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMSwgMCk7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8yLCAwKTsKLQl9CisJYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoYWgpOworCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCAwKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMiwgMCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmgKaW5kZXggMDhiNGU3ZS4uNGUxYWI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FuaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hbmkuaApAQCAtMTgsMTUgKzE4LDEwIEBACiAjZGVmaW5lIEFOSV9ICiAKICNkZWZpbmUgSEFMX1BST0NFU1NfQU5JICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFUSDlLX1JTU0lfRVBfTVVMVElQTElFUiAgKDE8PDcpCiAKICNkZWZpbmUgRE9fQU5JKGFoKSAoKChhaCktPnByb2NfcGh5ZXJyICYgSEFMX1BST0NFU1NfQU5JKSkKIAotI2RlZmluZSBIQUxfRVBfUk5EKHgsIG11bCkJCQkJCQlcCi0JKCgoKHgpJShtdWwpKSA+PSAoKG11bCkvMikpID8gKCh4KSArICgobXVsKSAtIDEpKSAvIChtdWwpIDogKHgpLyhtdWwpKQotI2RlZmluZSBCRUFDT05fUlNTSShhaHApCQkJCQlcCi0JSEFMX0VQX1JORChhaHAtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2ksCVwKLQkJICAgQVRIOUtfUlNTSV9FUF9NVUxUSVBMSUVSKQorI2RlZmluZSBCRUFDT05fUlNTSShhaHApIChhaHAtPnN0YXRzLmF2Z2Jyc3NpKQogCiAjZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSCAgICAgICAgICA1MDAKICNkZWZpbmUgQVRIOUtfQU5JX09GRE1fVFJJR19MT1cgICAgICAgICAgIDIwMApAQCAtNjUsMTMgKzYwLDYgQEAKIAl1MzIgYmVhY29uczsKIH07CiAKLXN0cnVjdCBhdGg5a19ub2RlX3N0YXRzIHsKLQl1MzIgbnNfYXZnYnJzc2k7Ci0JdTMyIG5zX2F2Z3Jzc2k7Ci0JdTMyIG5zX2F2Z3R4cnNzaTsKLQl1MzIgbnNfYXZndHhyYXRlOwotfTsKLQogc3RydWN0IGFyNTQxNkFuaVN0YXRlIHsKIAlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqYzsKIAl1OCBub2lzZUltbXVuaXR5TGV2ZWw7CkBAIC0xMTUsMjQgKzEwMywyMSBAQAogCXUzMiBhc3RfYW5pX3Jlc2V0OwogCXUzMiBhc3RfYW5pX2x6ZXJvOwogCXUzMiBhc3RfYW5pX2xuZWc7CisJdTMyIGF2Z2Jyc3NpOwogCXN0cnVjdCBhdGg5a19taWJfc3RhdHMgYXN0X21pYnN0YXRzOwotCXN0cnVjdCBhdGg5a19ub2RlX3N0YXRzIGFzdF9ub2Rlc3RhdHM7CiB9OwogI2RlZmluZSBhaF9taWJTdGF0cyBzdGF0cy5hc3RfbWlic3RhdHMKIAogdm9pZCBhdGg5a19hbmlfcmVzZXQoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od19hbmlfbW9uaXRvcihzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCSAgY29uc3Qgc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgKnN0YXRzLAogCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X3BoeWNvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X2Rpc2FibGVfbWliX2NvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHUzMiBhdGg5a19od19HZXRNaWJDeWNsZUNvdW50c1BjdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyICpyeGNfcGNudCwKIAkJCQkgIHUzMiAqcnhmX3BjbnQsIHUzMiAqdHhmX3BjbnQpOwotdm9pZCBhdGg5a19od19wcm9jbWliZXZlbnQoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkgICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMpOwordm9pZCBhdGg5a19od19wcm9jbWliZXZlbnQoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od19hbmlfc2V0dXAoc3RydWN0IGF0aF9odyAqYWgpOwotdm9pZCBhdGg5a19od19hbmlfYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKTsKLXZvaWQgYXRoOWtfaHdfYW5pX2RldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X2FuaV9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX2Rpc2FibGUoc3RydWN0IGF0aF9odyAqYWgpOwogCiAjZW5kaWYgLyogQU5JX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKaW5kZXggNWVmYzkzNC4uMWQ1OWYxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlICJody5oIgogI2luY2x1ZGUgInJjLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICIuLi9hdGguaCIKKyNpbmNsdWRlICJidGNvZXguaCIKIAogc3RydWN0IGF0aF9ub2RlOwogCkBAIC0xNjQsNyArMTY2LDYgQEAKICNkZWZpbmUgV01FX05VTV9USUQgICAgICAgICAgICAgMTYKICNkZWZpbmUgQVRIX1RYQlVGICAgICAgICAgICAgICAgNTEyCiAjZGVmaW5lIEFUSF9UWE1BWFRSWSAgICAgICAgICAgIDEzCi0jZGVmaW5lIEFUSF8xMU5fVFhNQVhUUlkgICAgICAgIDEwCiAjZGVmaW5lIEFUSF9NR1RfVFhNQVhUUlkgICAgICAgIDQKICNkZWZpbmUgV01FX0JBX0JNUF9TSVpFICAgICAgICAgNjQKICNkZWZpbmUgV01FX01BWF9CQSAgICAgICAgICAgICAgV01FX0JBX0JNUF9TSVpFCkBAIC0xOTEsMTIgKzE5Miw5IEBACiAjZGVmaW5lIEFUSF9BR0dSX01JTl9RREVQVEggICAgICAgIDIKICNkZWZpbmUgQVRIX0FNUERVX1NVQkZSQU1FX0RFRkFVTFQgMzIKICNkZWZpbmUgQVRIX0FNUERVX0xJTUlUX01BWCAgICAgICAgKDY0ICogMTAyNCAtIDEpCi0jZGVmaW5lIEFUSF9BTVBEVV9MSU1JVF9ERUZBVUxUICAgIEFUSF9BTVBEVV9MSU1JVF9NQVgKIAogI2RlZmluZSBJRUVFODAyMTFfU0VRX1NFUV9TSElGVCAgICA0CiAjZGVmaW5lIElFRUU4MDIxMV9TRVFfTUFYICAgICAgICAgIDQwOTYKLSNkZWZpbmUgSUVFRTgwMjExX01JTl9BTVBEVV9CVUYgICAgMHg4Ci0jZGVmaW5lIElFRUU4MDIxMV9IVENBUF9NQVhSWEFNUERVX0ZBQ1RPUiAxMwogI2RlZmluZSBJRUVFODAyMTFfV0VQX0lWTEVOICAgICAgICAzCiAjZGVmaW5lIElFRUU4MDIxMV9XRVBfS0lETEVOICAgICAgIDEKICNkZWZpbmUgSUVFRTgwMjExX1dFUF9DUkNMRU4gICAgICAgNApAQCAtMjI2LDYgKzIyNCw4IEBACiAjZGVmaW5lIEFUSF9EU19UWF9CQShfZHMpICAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfZmxhZ3MgJiBBVEg5S19UWF9CQSkKICNkZWZpbmUgQVRIX0FOXzJfVElEKF9hbiwgX3RpZG5vKSAgKCYoX2FuKS0+dGlkWyhfdGlkbm8pXSkKIAorI2RlZmluZSBBVEhfVFhfQ09NUExFVEVfUE9MTF9JTlQJMTAwMAorCiBlbnVtIEFUSF9BR0dSX1NUQVRVUyB7CiAJQVRIX0FHR1JfRE9ORSwKIAlBVEhfQUdHUl9CQVdfQ0xPU0VELApAQCAtMjM5LDggKzIzOSw4IEBACiAJc3BpbmxvY2tfdCBheHFfbG9jazsKIAl1MzIgYXhxX2RlcHRoOwogCXU4IGF4cV9hZ2dyX2RlcHRoOwotCXUzMiBheHFfdG90YWxxdWV1ZWQ7CiAJYm9vbCBzdG9wcGVkOworCWJvb2wgYXhxX3R4X2lucHJvZ3Jlc3M7CiAJc3RydWN0IGF0aF9idWYgKmF4cV9saW5rYnVmOwogCiAJLyogZmlyc3QgZGVzYyBvZiB0aGUgbGFzdCBkZXNjcmlwdG9yIHRoYXQgY29udGFpbnMgQ1RTICovCkBAIC0yNzIsNyArMjcyLDYgQEAKIAlpbnQgc2NoZWQ7CiAJaW50IHBhdXNlZDsKIAl1OCBzdGF0ZTsKLQlpbnQgYWRkYmFfZXhjaGFuZ2VhdHRlbXB0czsKIH07CiAKIHN0cnVjdCBhdGhfYXR4X2FjIHsKQEAgLTI5MiwxMiArMjkxLDI4IEBACiAjZGVmaW5lIEFUSF9UWF9YUkVUUlkgICAgICAgMHgwMgogI2RlZmluZSBBVEhfVFhfQkFSICAgICAgICAgIDB4MDQKIAorI2RlZmluZSBBVEhfUlNTSV9MUEZfTEVOIAkJMTAKKyNkZWZpbmUgUlNTSV9MUEZfVEhSRVNIT0xECQktMjAKKyNkZWZpbmUgQVRIOUtfUlNTSV9CQUQJCQkweDgwCisjZGVmaW5lIEFUSF9SU1NJX0VQX01VTFRJUExJRVIgICAgICgxPDw3KQorI2RlZmluZSBBVEhfRVBfTVVMKHgsIG11bCkgICAgICAgICAoKHgpICogKG11bCkpCisjZGVmaW5lIEFUSF9SU1NJX0lOKHgpICAgICAgICAgICAgIChBVEhfRVBfTVVMKCh4KSwgQVRIX1JTU0lfRVBfTVVMVElQTElFUikpCisjZGVmaW5lIEFUSF9MUEZfUlNTSSh4LCB5LCBsZW4pIFwKKyAgICAoKHggIT0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSKSA/ICgoKHgpICogKChsZW4pIC0gMSkgKyAoeSkpIC8gKGxlbikpIDogKHkpKQorI2RlZmluZSBBVEhfUlNTSV9MUEYoeCwgeSkgZG8geyAgICAgICAgICAgICAgICAgICAgIAkJCVwKKyAgICBpZiAoKHkpID49IFJTU0lfTFBGX1RIUkVTSE9MRCkgICAgICAgICAgICAgICAgICAgICAgICAgCQlcCisJeCA9IEFUSF9MUEZfUlNTSSgoeCksIEFUSF9SU1NJX0lOKCh5KSksIEFUSF9SU1NJX0xQRl9MRU4pOyAgCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIEFUSF9FUF9STkQoeCwgbXVsKSAJCQkJCQlcCisJKCgoKHgpJShtdWwpKSA+PSAoKG11bCkvMikpID8gKCh4KSArICgobXVsKSAtIDEpKSAvIChtdWwpIDogKHgpLyhtdWwpKQorCiBzdHJ1Y3QgYXRoX25vZGUgewogCXN0cnVjdCBhdGhfc29mdGMgKmFuX3NjOwogCXN0cnVjdCBhdGhfYXR4X3RpZCB0aWRbV01FX05VTV9USURdOwogCXN0cnVjdCBhdGhfYXR4X2FjIGFjW1dNRV9OVU1fQUNdOwogCXUxNiBtYXhhbXBkdTsKIAl1OCBtcGR1ZGVuc2l0eTsKKwlpbnQgbGFzdF9yc3NpOwogfTsKIAogc3RydWN0IGF0aF90eCB7CkBAIC0zNDgsOSArMzYzLDkgQEAKIHZvaWQgYXRoX3R4X3Rhc2tsZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwogdm9pZCBhdGhfdHhfY2FicShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBib29sIGF0aF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubyk7Ci1pbnQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKTsKLWludCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKK3ZvaWQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCSAgICAgICB1MTYgdGlkLCB1MTYgKnNzbik7Cit2b2lkIGF0aF90eF9hZ2dyX3N0b3Aoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpOwogdm9pZCBhdGhfdHhfYWdncl9yZXN1bWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpOwogCiAvKioqKioqKiovCkBAIC00NDAsNyArNDU1LDggQEAKIC8qICAgTEVEIENvbnRyb2wgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBBVEhfTEVEX1BJTgkxCisjZGVmaW5lIEFUSF9MRURfUElOX0RFRiAJCTEKKyNkZWZpbmUgQVRIX0xFRF9QSU5fOTI4NwkJOAogI2RlZmluZSBBVEhfTEVEX09OX0RVUkFUSU9OX0lETEUJMzUwCS8qIGluIG1zZWNzICovCiAjZGVmaW5lIEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUJMjUwCS8qIGluIG1zZWNzICovCiAKQEAgLTUwNiw2ICs1MjIsOCBAQAogI2RlZmluZSBTQ19PUF9XQUlUX0ZPUl9QU1BPTExfREFUQSBCSVQoMTcpCiAjZGVmaW5lIFNDX09QX1dBSVRfRk9SX1RYX0FDSyAgIEJJVCgxOCkKICNkZWZpbmUgU0NfT1BfQkVBQ09OX1NZTkMgICAgICAgQklUKDE5KQorI2RlZmluZSBTQ19PUF9CVENPRVhfRU5BQkxFRCAgICBCSVQoMjApCisjZGVmaW5lIFNDX09QX0JUX1BSSU9SSVRZX0RFVEVDVEVEIEJJVCgyMSkKIAogc3RydWN0IGF0aF9idXNfb3BzIHsKIAl2b2lkCQkoKnJlYWRfY2FjaGVzaXplKShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opOwpAQCAtNTE5LDYgKzUzNyw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCisJc3RydWN0IGF0aF9jb21tb24gY29tbW9uOworCiAJc3BpbmxvY2tfdCB3aXBoeV9sb2NrOyAvKiBzcGlubG9jayB0byBwcm90ZWN0IGF0aF93aXBoeSBkYXRhICovCiAJc3RydWN0IGF0aF93aXBoeSAqcHJpX3dpcGh5OwogCXN0cnVjdCBhdGhfd2lwaHkgKipzZWNfd2lwaHk7IC8qIHNlY29uZGFyeSB3aXBoeXMgKHZpcnR1YWwgcmFkaW9zKTsgbWF5CkBAIC01NDEsNiArNTYxLDggQEAKIAlpbnQgaXJxOwogCXNwaW5sb2NrX3Qgc2NfcmVzZXRsb2NrOwogCXNwaW5sb2NrX3Qgc2Nfc2VyaWFsX3J3OworCXNwaW5sb2NrX3QgYW5pX2xvY2s7CisJc3BpbmxvY2tfdCBzY19wbV9sb2NrOwogCXN0cnVjdCBtdXRleCBtdXRleDsKIAogCXU4IGN1cmJzc2lkW0VUSF9BTEVOXTsKQEAgLTU0OSw3ICs1NzEsNiBAQAogCXUzMiBzY19mbGFnczsgLyogU0NfT1BfKiAqLwogCXUxNiBjdXJ0eHBvdzsKIAl1MTYgY3VyYWlkOwotCXUxNiBjYWNoZWxzejsKIAl1OCBuYmNudmlmczsKIAl1MTYgbnZpZnM7CiAJdTggdHhfY2hhaW5tYXNrOwpAQCAtNTU3LDcgKzU3OCw4IEBACiAJdTMyIGtleW1heDsKIAlERUNMQVJFX0JJVE1BUChrZXltYXAsIEFUSF9LRVlNQVgpOwogCXU4IHNwbGl0bWljOwotCWF0b21pY190IHBzX3VzZWNvdW50OworCWJvb2wgcHNfZW5hYmxlZDsKKwl1bnNpZ25lZCBsb25nIHBzX3VzZWNvdW50OwogCWVudW0gYXRoOWtfaW50IGltYXNrOwogCWVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgaHRfZXh0cHJvdHNwYWNpbmc7CiAJZW51bSBhdGg5a19odF9tYWNtb2RlIHR4X2NoYW5fd2lkdGg7CkBAIC01ODQsMTIgKzYwNiwxMyBAQAogCWludCBiZWFjb25faW50ZXJ2YWw7CiAKIAlzdHJ1Y3QgYXRoX2FuaSBhbmk7Ci0Jc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgbm9kZXN0YXRzOwogI2lmZGVmIENPTkZJR19BVEg5S19ERUJVRwogCXN0cnVjdCBhdGg5a19kZWJ1ZyBkZWJ1ZzsKICNlbmRpZgogCXN0cnVjdCBhdGhfYnVzX29wcyAqYnVzX29wczsKIAlzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgY3VyX2JlYWNvbl9jb25mOworCXN0cnVjdCBkZWxheWVkX3dvcmsgdHhfY29tcGxldGVfd29yazsKKwlzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvIGJ0Y29leF9pbmZvOwogfTsKIAogc3RydWN0IGF0aF93aXBoeSB7CkBAIC02MTEsNiArNjM0LDE2IEBACiBpbnQgYXRoX2dldF9tYWM4MDIxMV9xbnVtKHUzMiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwogaW50IGF0aF9jYWJxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICopOwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhdGhfY29tbW9uICphdGg5a19od19jb21tb24oc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuICZhaC0+YWhfc2MtPmNvbW1vbjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKmF0aDlrX2h3X3JlZ3VsYXRvcnkoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuICYoYXRoOWtfaHdfY29tbW9uKGFoKS0+cmVndWxhdG9yeSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGhfcmVhZF9jYWNoZXNpemUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqY3N6KQogewogCXNjLT5idXNfb3BzLT5yZWFkX2NhY2hlc2l6ZShzYywgY3N6KTsKQEAgLTYyNSw3ICs2NTgsNyBAQAogCiBpcnFyZXR1cm5fdCBhdGhfaXNyKGludCBpcnEsIHZvaWQgKmRldik7CiB2b2lkIGF0aF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLWludCBhdGhfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aF9pbml0X2RldmljZSh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYgc3Vic3lzaWQpOwogdm9pZCBhdGhfZGV0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIGNvbnN0IGNoYXIgKmF0aF9tYWNfYmJfbmFtZSh1MzIgbWFjX2JiX3ZlcnNpb24pOwogY29uc3QgY2hhciAqYXRoX3JmX25hbWUodTE2IHJmX3ZlcnNpb24pOwpAQCAtNjU0LDI3ICs2ODcsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGF0aF9haGJfZXhpdCh2b2lkKSB7fTsKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfcHNfd2FrZXVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCWlmIChhdG9taWNfaW5jX3JldHVybigmc2MtPnBzX3VzZWNvdW50KSA9PSAxKQotCQlpZiAoc2MtPnNjX2FoLT5wb3dlcl9tb2RlICE9ICBBVEg5S19QTV9BV0FLRSkgewotCQkJc2MtPnNjX2FoLT5yZXN0b3JlX21vZGUgPSBzYy0+c2NfYWgtPnBvd2VyX21vZGU7Ci0JCQlhdGg5a19od19zZXRwb3dlcihzYy0+c2NfYWgsIEFUSDlLX1BNX0FXQUtFKTsKLQkJfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfcHNfcmVzdG9yZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2MtPnBzX3VzZWNvdW50KSkKLQkJaWYgKChzYy0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgJiYKLQkJICAgICEoc2MtPnNjX2ZsYWdzICYgKFNDX09QX1dBSVRfRk9SX0JFQUNPTiB8Ci0JCQkJICAgICAgU0NfT1BfV0FJVF9GT1JfQ0FCIHwKLQkJCQkgICAgICBTQ19PUF9XQUlUX0ZPUl9QU1BPTExfREFUQSB8Ci0JCQkJICAgICAgU0NfT1BfV0FJVF9GT1JfVFhfQUNLKSkpCi0JCQlhdGg5a19od19zZXRwb3dlcihzYy0+c2NfYWgsCi0JCQkJCSAgc2MtPnNjX2FoLT5yZXN0b3JlX21vZGUpOwotfQotCit2b2lkIGF0aDlrX3BzX3dha2V1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aDlrX3BzX3Jlc3RvcmUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwogCiB2b2lkIGF0aDlrX3NldF9ic3NpZF9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIGludCBhdGg5a193aXBoeV9hZGQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwpAQCAtNjkwLDggKzcwNCwxMCBAQAogCQkJCSAgc3RydWN0IGF0aF93aXBoeSAqc2VsZWN0ZWQpOwogYm9vbCBhdGg5a193aXBoeV9zY2FubmluZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiB2b2lkIGF0aDlrX3dpcGh5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK2Jvb2wgYXRoOWtfYWxsX3dpcGh5c19pZGxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIAogdm9pZCBhdGg5a19pb3dyaXRlMzIoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWdfb2Zmc2V0LCB1MzIgdmFsKTsKIHVuc2lnbmVkIGludCBhdGg5a19pb3JlYWQzMihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZ19vZmZzZXQpOwogCitpbnQgYXRoX3R4X2dldF9xbnVtKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBoYWx0eXBlKTsKICNlbmRpZiAvKiBBVEg5S19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMKaW5kZXggMzYzOWEyZS4uNDVjNGVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2JlYWNvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYwpAQCAtNjc0LDEzICs2NzQsNiBAQAogCiAJaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKIAotCS8qCi0JICogSXQgbG9va3MgbGlrZSBtYWM4MDIxMSBtYXkgZW5kIHVwIHVzaW5nIGJlYWNvbiBpbnRlcnZhbCBvZiB6ZXJvIGluCi0JICogc29tZSBjYXNlcyAoYXQgbGVhc3QgZm9yIG1lc2ggcG9pbnQpLiBBdm9pZCBnZXR0aW5nIGludG8gYW4KLQkgKiBpbmZpbml0ZSBsb29wIGJ5IHVzaW5nIGEgYml0IHNhZmVyIHZhbHVlIGluc3RlYWQuLgotCSAqLwotCWlmIChpbnR2YWwgPT0gMCkKLQkJaW50dmFsID0gMTAwOwogCiAJLyogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgVFNGICovCiAKQEAgLTc0NSw2ICs3MzgsMTQgQEAKIAkJaWZ0eXBlID0gc2MtPnNjX2FoLT5vcG1vZGU7CiAJfQogCisJLyoKKwkgKiBJdCBsb29rcyBsaWtlIG1hYzgwMjExIG1heSBlbmQgdXAgdXNpbmcgYmVhY29uIGludGVydmFsIG9mIHplcm8gaW4KKwkgKiBzb21lIGNhc2VzIChhdCBsZWFzdCBmb3IgbWVzaCBwb2ludCkuIEF2b2lkIGdldHRpbmcgaW50byBhbgorCSAqIGluZmluaXRlIGxvb3AgYnkgdXNpbmcgYSBiaXQgc2FmZXIgdmFsdWUgaW5zdGVhZC4gVG8gYmUgc2FmZSwKKwkgKiBkbyBzYW5pdHkgY2hlY2sgb24gYmVhY29uIGludGVydmFsIGZvciBhbGwgb3BlcmF0aW5nIG1vZGVzLgorCSAqLworCWlmIChjdXJfY29uZi0+YmVhY29uX2ludGVydmFsID09IDApCisJCWN1cl9jb25mLT5iZWFjb25faW50ZXJ2YWwgPSAxMDA7CiAKIAlzd2l0Y2ggKGlmdHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmNjA3YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9idGNvZXguYwpAQCAtMCwwICsxLDM0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiYXRoOWsuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGhfYnRjb2V4X2NvbmZpZyBhdGhfYnRfY29uZmlnID0geyAwLCB0cnVlLCB0cnVlLAorCQkJQVRIX0JUX0NPRVhfTU9ERV9TTE9UVEVELCB0cnVlLCB0cnVlLCAyLCA1LCB0cnVlIH07CisKK3N0YXRpYyBjb25zdCB1MTYgYXRoX3N1YnN5c2lkX3RibFtdID0geworCUFSOTI4MF9DT0VYMldJUkVfU1VCU1lTSUQsCisJQVQ5Mjg1X0NPRVgzV0lSRV9TQV9TVUJTWVNJRCwKKwlBVDkyODVfQ09FWDNXSVJFX0RBX1NVQlNZU0lECit9OworCisvKgorICogQ2hlY2tzIHRoZSBzdWJzeXN0ZW0gaWQgb2YgdGhlIGRldmljZSB0byBzZWUgaWYgaXQKKyAqIHN1cHBvcnRzIGJ0Y29leAorICovCitib29sIGF0aF9idGNvZXhfc3VwcG9ydGVkKHUxNiBzdWJzeXNpZCkKK3sKKwlpbnQgaTsKKworCWlmICghc3Vic3lzaWQpCisJCXJldHVybiBmYWxzZTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0aF9zdWJzeXNpZF90YmwpOyBpKyspCisJCWlmIChzdWJzeXNpZCA9PSBhdGhfc3Vic3lzaWRfdGJsW2ldKQorCQkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEZXRlY3RzIGlmIHRoZXJlIGlzIGFueSBwcmlvcml0eSBidCB0cmFmZmljCisgKi8KK3N0YXRpYyB2b2lkIGF0aF9kZXRlY3RfYnRfcHJpb3JpdHkoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGF0aF9idGNvZXhfaW5mbyAqYnRpbmZvID0gJnNjLT5idGNvZXhfaW5mbzsKKworCWlmIChhdGg5a19od19ncGlvX2dldChzYy0+c2NfYWgsIGJ0aW5mby0+YnRwcmlvcml0eV9ncGlvKSkKKwkJYnRpbmZvLT5idF9wcmlvcml0eV9jbnQrKzsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGJ0aW5mby0+YnRfcHJpb3JpdHlfdGltZSArCisJCQltc2Vjc190b19qaWZmaWVzKEFUSF9CVF9QUklPUklUWV9USU1FX1RIUkVTSE9MRCkpKSB7CisJCWlmIChidGluZm8tPmJ0X3ByaW9yaXR5X2NudCA+PSBBVEhfQlRfQ05UX1RIUkVTSE9MRCkgeworCQkJRFBSSU5URihzYywgQVRIX0RCR19CVENPRVgsCisJCQkJIkJUIHByaW9yaXR5IHRyYWZmaWMgZGV0ZWN0ZWQiKTsKKwkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9CVF9QUklPUklUWV9ERVRFQ1RFRDsKKwkJfSBlbHNlIHsKKwkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQlRfUFJJT1JJVFlfREVURUNURUQ7CisJCX0KKworCQlidGluZm8tPmJ0X3ByaW9yaXR5X2NudCA9IDA7CisJCWJ0aW5mby0+YnRfcHJpb3JpdHlfdGltZSA9IGppZmZpZXM7CisJfQorfQorCisvKgorICogQ29uZmlndXJlcyBhcHByb3ByaWF0ZSB3ZWlnaHQgYmFzZWQgb24gc3RvbXAgdHlwZS4KKyAqLworc3RhdGljIHZvaWQgYXRoX2J0Y29leF9idF9zdG9tcChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQlzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvICpidGluZm8sCisJCQkJaW50IHN0b21wX3R5cGUpCit7CisKKwlzd2l0Y2ggKHN0b21wX3R5cGUpIHsKKwljYXNlIEFUSF9CVENPRVhfU1RPTVBfQUxMOgorCQlhdGhfYnRjb2V4X3NldF93ZWlnaHQoYnRpbmZvLCBBUl9CVF9DT0VYX1dHSFQsCisJCQkJICAgICAgQVJfU1RPTVBfQUxMX1dMQU5fV0dIVCk7CisJCWJyZWFrOworCWNhc2UgQVRIX0JUQ09FWF9TVE9NUF9MT1c6CisJCWF0aF9idGNvZXhfc2V0X3dlaWdodChidGluZm8sIEFSX0JUX0NPRVhfV0dIVCwKKwkJCQkgICAgICBBUl9TVE9NUF9MT1dfV0xBTl9XR0hUKTsKKwkJYnJlYWs7CisJY2FzZSBBVEhfQlRDT0VYX1NUT01QX05PTkU6CisJCWF0aF9idGNvZXhfc2V0X3dlaWdodChidGluZm8sIEFSX0JUX0NPRVhfV0dIVCwKKwkJCQkgICAgICBBUl9TVE9NUF9OT05FX1dMQU5fV0dIVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQUklOVEYoc2MsIEFUSF9EQkdfQlRDT0VYLCAiSW52YWxpZCBTdG9tcHR5cGVcbiIpOworCQlicmVhazsKKwl9CisKKwlhdGg5a19od19idGNvZXhfZW5hYmxlKHNjLT5zY19haCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYXN0ZXIgYnQgY29leCB0aW1lciB3aGljaCBydW5zIGZvciBldmVyeQorICogNDVtcywgYnQgdHJhZmZpYyB3aWxsIGJlIGdpdmVuIHByaW9yaXR5IGR1cmluZyA1NSUgb2YgdGhpcworICogcGVyaW9kIHdoaWxlIHdsYW4gZ2V0cyByZW1haW5pbmcgNDUlCisgKi8KKworc3RhdGljIHZvaWQgYXRoX2J0Y29leF9wZXJpb2RfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgZGF0YTsKKwlzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvICpidGluZm8gPSAmc2MtPmJ0Y29leF9pbmZvOworCisJYXRoX2RldGVjdF9idF9wcmlvcml0eShzYyk7CisKKwlzcGluX2xvY2tfYmgoJmJ0aW5mby0+YnRjb2V4X2xvY2spOworCisJYXRoX2J0Y29leF9idF9zdG9tcChzYywgYnRpbmZvLCBidGluZm8tPmJ0X3N0b21wX3R5cGUpOworCisJc3Bpbl91bmxvY2tfYmgoJmJ0aW5mby0+YnRjb2V4X2xvY2spOworCisJaWYgKGJ0aW5mby0+YnRjb2V4X3BlcmlvZCAhPSBidGluZm8tPmJ0Y29leF9ub19zdG9tcCkgeworCQlpZiAoYnRpbmZvLT5od190aW1lcl9lbmFibGVkKQorCQkJYXRoX2dlbl90aW1lcl9zdG9wKHNjLT5zY19haCwgYnRpbmZvLT5ub19zdG9tcF90aW1lcik7CisKKwkJYXRoX2dlbl90aW1lcl9zdGFydChzYy0+c2NfYWgsCisJCQlidGluZm8tPm5vX3N0b21wX3RpbWVyLAorCQkJKGF0aDlrX2h3X2dldHRzZjMyKHNjLT5zY19haCkgKworCQkJCWJ0aW5mby0+YnRjb2V4X25vX3N0b21wKSwKKwkJCQlidGluZm8tPmJ0Y29leF9ub19zdG9tcCAqIDEwKTsKKwkJYnRpbmZvLT5od190aW1lcl9lbmFibGVkID0gdHJ1ZTsKKwl9CisKKwltb2RfdGltZXIoJmJ0aW5mby0+cGVyaW9kX3RpbWVyLCBqaWZmaWVzICsKKwkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQVRIX0JUQ09FWF9ERUZfQlRfUEVSSU9EKSk7Cit9CisKKy8qCisgKiBHZW5lcmljIHRzZiBiYXNlZCBodyB0aW1lciB3aGljaCBjb25maWd1cmVzIHdlaWdodAorICogcmVnaXN0ZXJzIHRvIHRpbWUgc2xpY2UgYmV0d2VlbiB3bGFuIGFuZCBidCB0cmFmZmljCisgKi8KKworc3RhdGljIHZvaWQgYXRoX2J0Y29leF9ub19zdG9tcF90aW1lcih2b2lkICphcmcpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKWFyZzsKKwlzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvICpidGluZm8gPSAmc2MtPmJ0Y29leF9pbmZvOworCisJRFBSSU5URihzYywgQVRIX0RCR19CVENPRVgsICJubyBzdG9tcCB0aW1lciBydW5uaW5nIFxuIik7CisKKwlzcGluX2xvY2tfYmgoJmJ0aW5mby0+YnRjb2V4X2xvY2spOworCisJaWYgKGJ0aW5mby0+YnRfc3RvbXBfdHlwZSA9PSBBVEhfQlRDT0VYX1NUT01QX0xPVykKKwkJYXRoX2J0Y29leF9idF9zdG9tcChzYywgYnRpbmZvLCBBVEhfQlRDT0VYX1NUT01QX05PTkUpOworCSBlbHNlIGlmIChidGluZm8tPmJ0X3N0b21wX3R5cGUgPT0gQVRIX0JUQ09FWF9TVE9NUF9BTEwpCisJCWF0aF9idGNvZXhfYnRfc3RvbXAoc2MsIGJ0aW5mbywgQVRIX0JUQ09FWF9TVE9NUF9MT1cpOworCisJc3Bpbl91bmxvY2tfYmgoJmJ0aW5mby0+YnRjb2V4X2xvY2spOworfQorCitzdGF0aWMgaW50IGF0aF9pbml0X2J0Y29leF9pbmZvKHN0cnVjdCBhdGhfaHcgKmh3LAorCQkJCXN0cnVjdCBhdGhfYnRjb2V4X2luZm8gKmJ0Y29leF9pbmZvKQoreworCXUzMiBpOworCWludCBxbnVtOworCisJcW51bSA9IGF0aF90eF9nZXRfcW51bShody0+YWhfc2MsIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19CRSk7CisKKwlidGNvZXhfaW5mby0+YnRfY29leF9tb2RlID0KKwkJKGJ0Y29leF9pbmZvLT5idF9jb2V4X21vZGUgJiBBUl9CVF9RQ1VfVEhSRVNIKSB8CisJCVNNKGF0aF9idF9jb25maWcuYnRfdGltZV9leHRlbmQsIEFSX0JUX1RJTUVfRVhURU5EKSB8CisJCVNNKGF0aF9idF9jb25maWcuYnRfdHhzdGF0ZV9leHRlbmQsIEFSX0JUX1RYU1RBVEVfRVhURU5EKSB8CisJCVNNKGF0aF9idF9jb25maWcuYnRfdHhmcmFtZV9leHRlbmQsIEFSX0JUX1RYX0ZSQU1FX0VYVEVORCkgfAorCQlTTShhdGhfYnRfY29uZmlnLmJ0X21vZGUsIEFSX0JUX01PREUpIHwKKwkJU00oYXRoX2J0X2NvbmZpZy5idF9xdWlldF9jb2xsaXNpb24sIEFSX0JUX1FVSUVUKSB8CisJCVNNKGF0aF9idF9jb25maWcuYnRfcnhjbGVhcl9wb2xhcml0eSwgQVJfQlRfUlhfQ0xFQVJfUE9MQVJJVFkpIHwKKwkJU00oYXRoX2J0X2NvbmZpZy5idF9wcmlvcml0eV90aW1lLCBBUl9CVF9QUklPUklUWV9USU1FKSB8CisJCVNNKGF0aF9idF9jb25maWcuYnRfZmlyc3Rfc2xvdF90aW1lLCBBUl9CVF9GSVJTVF9TTE9UX1RJTUUpIHwKKwkJU00ocW51bSwgQVJfQlRfUUNVX1RIUkVTSCk7CisKKwlidGNvZXhfaW5mby0+YnRfY29leF9tb2RlMiA9CisJCVNNKGF0aF9idF9jb25maWcuYnRfaG9sZF9yeF9jbGVhciwgQVJfQlRfSE9MRF9SWF9DTEVBUikgfAorCQlTTShBVEhfQlRDT0VYX0JNSVNTX1RIUkVTSCwgQVJfQlRfQkNOX01JU1NfVEhSRVNIKSB8CisJCUFSX0JUX0RJU0FCTEVfQlRfQU5UOworCisJYnRjb2V4X2luZm8tPmJ0X3N0b21wX3R5cGUgPSBBVEhfQlRDT0VYX1NUT01QX0xPVzsKKworCWJ0Y29leF9pbmZvLT5idGNvZXhfcGVyaW9kID0gQVRIX0JUQ09FWF9ERUZfQlRfUEVSSU9EICogMTAwMDsKKworCWJ0Y29leF9pbmZvLT5idGNvZXhfbm9fc3RvbXAgPSAoMTAwIC0gQVRIX0JUQ09FWF9ERUZfRFVUWV9DWUNMRSkgKgorCQlidGNvZXhfaW5mby0+YnRjb2V4X3BlcmlvZCAvIDEwMDsKKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorCQlody0+aHdfZ2VuX3RpbWVycy5nZW5fdGltZXJfaW5kZXhbKGRlYnJ1aWpuMzIgPDwgaSkgPj4gMjddID0gaTsKKworCXNldHVwX3RpbWVyKCZidGNvZXhfaW5mby0+cGVyaW9kX3RpbWVyLCBhdGhfYnRjb2V4X3BlcmlvZF90aW1lciwKKwkJCSh1bnNpZ25lZCBsb25nKSBody0+YWhfc2MpOworCisJYnRjb2V4X2luZm8tPm5vX3N0b21wX3RpbWVyID0gYXRoX2dlbl90aW1lcl9hbGxvYyhodywKKwkJCWF0aF9idGNvZXhfbm9fc3RvbXBfdGltZXIsCisJCQlhdGhfYnRjb2V4X25vX3N0b21wX3RpbWVyLAorCQkJKHZvaWQgKilody0+YWhfc2MsIEFSX0ZJUlNUX05EUF9USU1FUik7CisKKwlpZiAoYnRjb2V4X2luZm8tPm5vX3N0b21wX3RpbWVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmJ0Y29leF9pbmZvLT5idGNvZXhfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGF0aDlrX2h3X2J0Y29leF9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN0cnVjdCBhdGhfYnRjb2V4X2luZm8gKmJ0Y29leF9pbmZvID0gJmFoLT5haF9zYy0+YnRjb2V4X2luZm87CisJaW50IHJldCA9IDA7CisKKwlpZiAoYnRjb2V4X2luZm8tPmJ0Y29leF9zY2hlbWUgPT0gQVRIX0JUQ09FWF9DRkdfMldJUkUpIHsKKwkJLyogY29ubmVjdCBidF9hY3RpdmUgdG8gYmFzZWJhbmQgKi8KKwkJUkVHX0NMUl9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfRU5fVkFMLAorCQkJCShBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9ERUYgfAorCQkJCSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9GUkVRVUVOQ1lfREVGKSk7CisKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfRU5fVkFMLAorCQkJCUFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9CQik7CisKKwkJLyogU2V0IGlucHV0IG11eCBmb3IgYnRfYWN0aXZlIHRvIGdwaW8gcGluICovCisJCVJFR19STVdfRklFTEQoYWgsIEFSX0dQSU9fSU5QVVRfTVVYMSwKKwkJCQlBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFLAorCQkJCWJ0Y29leF9pbmZvLT5idGFjdGl2ZV9ncGlvKTsKKworCQkvKiBDb25maWd1cmUgdGhlIGRlc2lyZWQgZ3BpbyBwb3J0IGZvciBpbnB1dCAqLworCQlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYnRjb2V4X2luZm8tPmJ0YWN0aXZlX2dwaW8pOworCX0gZWxzZSB7CisJCS8qIGJ0Y29leCAzLXdpcmUgKi8KKwkJUkVHX1NFVF9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfRU5fVkFMLAorCQkJCShBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9CQiB8CisJCQkJIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9CQikpOworCisJCS8qIFNldCBpbnB1dCBtdXggZm9yIGJ0X3Byb3JpdHlfYXN5bmMgYW5kCisJCSAqICAgICAgICAgICAgICAgICAgYnRfYWN0aXZlX2FzeW5jIHRvIEdQSU8gcGlucyAqLworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9HUElPX0lOUFVUX01VWDEsCisJCQkJQVJfR1BJT19JTlBVVF9NVVgxX0JUX0FDVElWRSwKKwkJCQlidGNvZXhfaW5mby0+YnRhY3RpdmVfZ3Bpbyk7CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfR1BJT19JTlBVVF9NVVgxLAorCQkJCUFSX0dQSU9fSU5QVVRfTVVYMV9CVF9QUklPUklUWSwKKwkJCQlidGNvZXhfaW5mby0+YnRwcmlvcml0eV9ncGlvKTsKKworCQkvKiBDb25maWd1cmUgdGhlIGRlc2lyZWQgR1BJTyBwb3J0cyBmb3IgaW5wdXQgKi8KKworCQlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYnRjb2V4X2luZm8tPmJ0YWN0aXZlX2dwaW8pOworCQlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYnRjb2V4X2luZm8tPmJ0cHJpb3JpdHlfZ3Bpbyk7CisKKwkJcmV0ID0gYXRoX2luaXRfYnRjb2V4X2luZm8oYWgsIGJ0Y29leF9pbmZvKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGF0aDlrX2h3X2J0Y29leF9lbmFibGUoc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGF0aF9idGNvZXhfaW5mbyAqYnRjb2V4X2luZm8gPSAmYWgtPmFoX3NjLT5idGNvZXhfaW5mbzsKKworCWlmIChidGNvZXhfaW5mby0+YnRjb2V4X3NjaGVtZSA9PSBBVEhfQlRDT0VYX0NGR18yV0lSRSkgeworCQkvKiBDb25maWd1cmUgdGhlIGRlc2lyZWQgR1BJTyBwb3J0IGZvciBUWF9GUkFNRSBvdXRwdXQgKi8KKwkJYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgYnRjb2V4X2luZm8tPndsYW5hY3RpdmVfZ3BpbywKKwkJCQlBUl9HUElPX09VVFBVVF9NVVhfQVNfVFhfRlJBTUUpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFByb2dyYW0gY29leCBtb2RlIGFuZCB3ZWlnaHQgcmVnaXN0ZXJzIHRvCisJCSAqIGVuYWJsZSBjb2V4IDMtd2lyZQorCQkgKi8KKwkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX01PREUsIGJ0Y29leF9pbmZvLT5idF9jb2V4X21vZGUpOworCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfV0VJR0hULCBidGNvZXhfaW5mby0+YnRfY29leF93ZWlnaHRzKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX01PREUyLCBidGNvZXhfaW5mby0+YnRfY29leF9tb2RlMik7CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUVVJRVQxLAorCQkJCUFSX1FVSUVUMV9RVUlFVF9BQ0tfQ1RTX0VOQUJMRSwgMSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BDVV9NSVNDLAorCQkJCUFSX1BDVV9CVF9BTlRfUFJFVkVOVF9SWCwgMCk7CisKKwkJYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgYnRjb2V4X2luZm8tPndsYW5hY3RpdmVfZ3BpbywKKwkJCQlBUl9HUElPX09VVFBVVF9NVVhfQVNfUlhfQ0xFQVJfRVhURVJOQUwpOworCX0KKworCVJFR19STVcoYWgsIEFSX0dQSU9fUERQVSwKKwkJKDB4MiA8PCAoYnRjb2V4X2luZm8tPmJ0YWN0aXZlX2dwaW8gKiAyKSksCisJCSgweDMgPDwgKGJ0Y29leF9pbmZvLT5idGFjdGl2ZV9ncGlvICogMikpKTsKKworCWFoLT5haF9zYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQlRDT0VYX0VOQUJMRUQ7Cit9CisKK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2Rpc2FibGUoc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGF0aF9idGNvZXhfaW5mbyAqYnRjb2V4X2luZm8gPSAmYWgtPmFoX3NjLT5idGNvZXhfaW5mbzsKKworCWF0aDlrX2h3X3NldF9ncGlvKGFoLCBidGNvZXhfaW5mby0+d2xhbmFjdGl2ZV9ncGlvLCAwKTsKKworCWF0aDlrX2h3X2NmZ19vdXRwdXQoYWgsIGJ0Y29leF9pbmZvLT53bGFuYWN0aXZlX2dwaW8sCisJCQlBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKKworCWlmIChidGNvZXhfaW5mby0+YnRjb2V4X3NjaGVtZSA9PSBBVEhfQlRDT0VYX0NGR18zV0lSRSkgeworCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfTU9ERSwgQVJfQlRfUVVJRVQgfCBBUl9CVF9NT0RFKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX1dFSUdIVCwgMCk7CisJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9NT0RFMiwgMCk7CisJfQorCisJYWgtPmFoX3NjLT5zY19mbGFncyAmPSB+U0NfT1BfQlRDT0VYX0VOQUJMRUQ7Cit9CisKKy8qCisgKiBQYXVzZSBidGNvZXggdGltZXIgYW5kIGJ0IGR1dHkgY3ljbGUgdGltZXIKKyAqLwordm9pZCBhdGhfYnRjb2V4X3RpbWVyX3BhdXNlKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJICAgIHN0cnVjdCBhdGhfYnRjb2V4X2luZm8gKmJ0aW5mbykKK3sKKworCWRlbF90aW1lcl9zeW5jKCZidGluZm8tPnBlcmlvZF90aW1lcik7CisKKwlpZiAoYnRpbmZvLT5od190aW1lcl9lbmFibGVkKQorCQlhdGhfZ2VuX3RpbWVyX3N0b3Aoc2MtPnNjX2FoLCBidGluZm8tPm5vX3N0b21wX3RpbWVyKTsKKworCWJ0aW5mby0+aHdfdGltZXJfZW5hYmxlZCA9IGZhbHNlOworfQorCisvKgorICogKFJlKXN0YXJ0IGJ0Y29leCB0aW1lcnMKKyAqLwordm9pZCBhdGhfYnRjb2V4X3RpbWVyX3Jlc3VtZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCSAgICAgc3RydWN0IGF0aF9idGNvZXhfaW5mbyAqYnRpbmZvKQoreworCisJRFBSSU5URihzYywgQVRIX0RCR19CVENPRVgsICJTdGFydGluZyBidGNvZXggdGltZXJzIik7CisKKwkvKiBtYWtlIHN1cmUgZHV0eSBjeWNsZSB0aW1lciBpcyBhbHNvIHN0b3BwZWQgd2hlbiByZXN1bWluZyAqLworCWlmIChidGluZm8tPmh3X3RpbWVyX2VuYWJsZWQpCisJCWF0aF9nZW5fdGltZXJfc3RvcChzYy0+c2NfYWgsIGJ0aW5mby0+bm9fc3RvbXBfdGltZXIpOworCisJYnRpbmZvLT5idF9wcmlvcml0eV9jbnQgPSAwOworCWJ0aW5mby0+YnRfcHJpb3JpdHlfdGltZSA9IGppZmZpZXM7CisJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CVF9QUklPUklUWV9ERVRFQ1RFRDsKKworCW1vZF90aW1lcigmYnRpbmZvLT5wZXJpb2RfdGltZXIsIGppZmZpZXMpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5N2IwMjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBCVENPRVhfSAorI2RlZmluZSBCVENPRVhfSAorCisjZGVmaW5lIEFUSF9XTEFOQUNUSVZFX0dQSU8JNQorI2RlZmluZSBBVEhfQlRBQ1RJVkVfR1BJTwk2CisjZGVmaW5lIEFUSF9CVFBSSU9SSVRZX0dQSU8JNworCisjZGVmaW5lIEFUSF9CVENPRVhfREVGX0JUX1BFUklPRCAgNDUKKyNkZWZpbmUgQVRIX0JUQ09FWF9ERUZfRFVUWV9DWUNMRSA1NQorI2RlZmluZSBBVEhfQlRDT0VYX0JNSVNTX1RIUkVTSCAgIDUwCisKKyNkZWZpbmUgQVRIX0JUX1BSSU9SSVRZX1RJTUVfVEhSRVNIT0xEIDEwMDAgLyogbXMgKi8KKyNkZWZpbmUgQVRIX0JUX0NOVF9USFJFU0hPTEQJICAgICAgIDMKKworZW51bSBhdGhfYnRjb2V4X3NjaGVtZSB7CisJQVRIX0JUQ09FWF9DRkdfTk9ORSwKKwlBVEhfQlRDT0VYX0NGR18yV0lSRSwKKwlBVEhfQlRDT0VYX0NGR18zV0lSRSwKK307CisKK2VudW0gYXRoX3N0b21wX3R5cGUgeworCUFUSF9CVENPRVhfTk9fU1RPTVAsCisJQVRIX0JUQ09FWF9TVE9NUF9BTEwsCisJQVRIX0JUQ09FWF9TVE9NUF9MT1csCisJQVRIX0JUQ09FWF9TVE9NUF9OT05FCit9OworCitlbnVtIGF0aF9idF9tb2RlIHsKKwlBVEhfQlRfQ09FWF9NT0RFX0xFR0FDWSwJLyogbGVnYWN5IHJ4X2NsZWFyIG1vZGUgKi8KKwlBVEhfQlRfQ09FWF9NT0RFX1VOU0xPVFRFRCwJLyogdW50aW1lZC91bnNsb3R0ZWQgbW9kZSAqLworCUFUSF9CVF9DT0VYX01PREVfU0xPVFRFRCwJLyogc2xvdHRlZCBtb2RlICovCisJQVRIX0JUX0NPRVhfTU9ERV9ESVNBTEJFRCwJLyogY29leGlzdGVuY2UgZGlzYWJsZWQgKi8KK307CisKK3N0cnVjdCBhdGhfYnRjb2V4X2NvbmZpZyB7CisJdTggYnRfdGltZV9leHRlbmQ7CisJYm9vbCBidF90eHN0YXRlX2V4dGVuZDsKKwlib29sIGJ0X3R4ZnJhbWVfZXh0ZW5kOworCWVudW0gYXRoX2J0X21vZGUgYnRfbW9kZTsgLyogY29leGlzdGVuY2UgbW9kZSAqLworCWJvb2wgYnRfcXVpZXRfY29sbGlzaW9uOworCWJvb2wgYnRfcnhjbGVhcl9wb2xhcml0eTsgLyogaW52ZXJ0IHJ4X2NsZWFyIGFzIFdMQU5fQUNUSVZFKi8KKwl1OCBidF9wcmlvcml0eV90aW1lOworCXU4IGJ0X2ZpcnN0X3Nsb3RfdGltZTsKKwlib29sIGJ0X2hvbGRfcnhfY2xlYXI7Cit9OworCitzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvIHsKKwllbnVtIGF0aF9idGNvZXhfc2NoZW1lIGJ0Y29leF9zY2hlbWU7CisJdTggd2xhbmFjdGl2ZV9ncGlvOworCXU4IGJ0YWN0aXZlX2dwaW87CisJdTggYnRwcmlvcml0eV9ncGlvOworCXU4IGJ0X2R1dHlfY3ljbGU7IAkvKiBCVCBkdXR5IGN5Y2xlIGluIHBlcmNlbnRhZ2UgKi8KKwlpbnQgYnRfc3RvbXBfdHlwZTsgCS8qIFR5cGVzIG9mIEJUIHN0b21waW5nICovCisJdTMyIGJ0X2NvZXhfbW9kZTsgCS8qIFJlZ2lzdGVyIHNldHRpbmcgZm9yIEFSX0JUX0NPRVhfTU9ERSAqLworCXUzMiBidF9jb2V4X3dlaWdodHM7IAkvKiBSZWdpc3RlciBzZXR0aW5nIGZvciBBUl9CVF9DT0VYX1dFSUdIVCAqLworCXUzMiBidF9jb2V4X21vZGUyOyAJLyogUmVnaXN0ZXIgc2V0dGluZyBmb3IgQVJfQlRfQ09FWF9NT0RFMiAqLworCXUzMiBidGNvZXhfbm9fc3RvbXA7ICAgLyogaW4gdXNlYyAqLworCXUzMiBidGNvZXhfcGVyaW9kOyAgICAgCS8qIGluIHVzZWMgKi8KKwl1MzIgYnRfcHJpb3JpdHlfY250OworCXVuc2lnbmVkIGxvbmcgYnRfcHJpb3JpdHlfdGltZTsKKwlib29sIGh3X3RpbWVyX2VuYWJsZWQ7CisJc3BpbmxvY2tfdCBidGNvZXhfbG9jazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBwZXJpb2RfdGltZXI7ICAgICAgLyogVGltZXIgZm9yIEJUIHBlcmlvZCAqLworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyICpub19zdG9tcF90aW1lcjsgLypUaW1lciBmb3Igbm8gQlQgc3RvbXBpbmcqLworfTsKKworYm9vbCBhdGhfYnRjb2V4X3N1cHBvcnRlZCh1MTYgc3Vic3lzaWQpOworaW50IGF0aDlrX2h3X2J0Y29leF9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X2J0Y29leF9kaXNhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoX2J0Y29leF90aW1lcl9yZXN1bWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkgICAgIHN0cnVjdCBhdGhfYnRjb2V4X2luZm8gKmJ0aW5mbyk7Cit2b2lkIGF0aF9idGNvZXhfdGltZXJfcGF1c2Uoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkgICAgc3RydWN0IGF0aF9idGNvZXhfaW5mbyAqYnRpbmZvKTsKKworc3RhdGljIGlubGluZSB2b2lkIGF0aF9idGNvZXhfc2V0X3dlaWdodChzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvICpidGNvZXhfaW5mbywKKwkJCQkJIHUzMiBidF93ZWlnaHQsCisJCQkJCSB1MzIgd2xhbl93ZWlnaHQpCit7CisJYnRjb2V4X2luZm8tPmJ0X2NvZXhfd2VpZ2h0cyA9IFNNKGJ0X3dlaWdodCwgQVJfQlRDT0VYX0JUX1dHSFQpIHwKKwkJCQkgICAgICAgU00od2xhbl93ZWlnaHQsIEFSX0JUQ09FWF9XTF9XR0hUKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5jCmluZGV4IGEzMmQ3ZTcuLjMyMzQ5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkJCQkiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKIAkJbmZhcnJheVsxXSA9IG5mOwogCi0JCWlmICghQVJfU1JFVl85MjgwKGFoKSkgeworCQlpZiAoIUFSX1NSRVZfOTI4MChhaCkgJiYgIUFSX1NSRVZfOTI4NyhhaCkpIHsKIAkJCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDJfQ0NBKSwKIAkJCQkJQVJfUEhZX0NIMl9NSU5DQ0FfUFdSKTsKIAkJCWlmIChuZiAmIDB4MTAwKQpAQCAtMTU0LDcgKzE1NCw3IEBACiAJCQkJIk5GIGNhbGlicmF0ZWQgW2V4dF0gW2NoYWluIDFdIGlzICVkXG4iLCBuZik7CiAJCW5mYXJyYXlbNF0gPSBuZjsKIAotCQlpZiAoIUFSX1NSRVZfOTI4MChhaCkpIHsKKwkJaWYgKCFBUl9TUkVWXzkyODAoYWgpICYmICFBUl9TUkVWXzkyODcoYWgpKSB7CiAJCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gyX0VYVF9DQ0EpLAogCQkJCQlBUl9QSFlfQ0gyX0VYVF9NSU5DQ0FfUFdSKTsKIAkJCWlmIChuZiAmIDB4MTAwKQpAQCAtNjEzLDcgKzYxMyw3IEBACiAKIAlpZiAoQVJfU1JFVl85Mjg1KGFoKSkKIAkJY2hhaW5tYXNrID0gMHg5OwotCWVsc2UgaWYgKEFSX1NSRVZfOTI4MChhaCkpCisJZWxzZSBpZiAoQVJfU1JFVl85MjgwKGFoKSB8fCBBUl9TUkVWXzkyODcoYWgpKQogCQljaGFpbm1hc2sgPSAweDFCOwogCWVsc2UKIAkJY2hhaW5tYXNrID0gMHgzRjsKQEAgLTY5MSwxNSArNjkxLDIyIEBACiB2b2lkIGF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGksIGo7CisJczE2IG5vaXNlX2Zsb29yOworCisJaWYgKEFSX1NSRVZfOTI4MChhaCkpCisJCW5vaXNlX2Zsb29yID0gQVJfUEhZX0NDQV9NQVhfQVI5MjgwX0dPT0RfVkFMVUU7CisJZWxzZSBpZiAoQVJfU1JFVl85Mjg1KGFoKSkKKwkJbm9pc2VfZmxvb3IgPSBBUl9QSFlfQ0NBX01BWF9BUjkyODVfR09PRF9WQUxVRTsKKwllbHNlCisJCW5vaXNlX2Zsb29yID0gQVJfUEhZX0NDQV9NQVhfQVI1NDE2X0dPT0RfVkFMVUU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX05GX1JFQURJTkdTOyBpKyspIHsKIAkJYWgtPm5mQ2FsSGlzdFtpXS5jdXJySW5kZXggPSAwOwotCQlhaC0+bmZDYWxIaXN0W2ldLnByaXZORiA9IEFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMVUU7CisJCWFoLT5uZkNhbEhpc3RbaV0ucHJpdk5GID0gbm9pc2VfZmxvb3I7CiAJCWFoLT5uZkNhbEhpc3RbaV0uaW52YWxpZE5GY291bnQgPQogCQkJQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIOwogCQlmb3IgKGogPSAwOyBqIDwgQVRIOUtfTkZfQ0FMX0hJU1RfTUFYOyBqKyspIHsKLQkJCWFoLT5uZkNhbEhpc3RbaV0ubmZDYWxCdWZmZXJbal0gPQotCQkJCUFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMVUU7CisJCQlhaC0+bmZDYWxIaXN0W2ldLm5mQ2FsQnVmZmVyW2pdID0gbm9pc2VfZmxvb3I7CiAJCX0KIAl9CiB9CkBAIC03MjIsMzEgKzcyOSwxMzkgQEAKIHN0YXRpYyB2b2lkIGF0aDlrX29sY190ZW1wX2NvbXBlbnNhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgcmRkYXRhLCBpOwotCWludCBkZWx0YSwgY3VyclBEQURDLCByZWd2YWw7CisJaW50IGRlbHRhLCBjdXJyUERBREMsIHJlZ3ZhbCwgc2xvcGU7CiAKIAlyZGRhdGEgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw0KTsKLQogCWN1cnJQREFEQyA9IE1TKHJkZGF0YSwgQVJfUEhZX1RYX1BXUkNUUkxfUERfQVZHX09VVCk7CiAKLQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9EQUNfSFBXUl81RykpCi0JCWRlbHRhID0gKGN1cnJQREFEQyAtIGFoLT5pbml0UERBREMgKyA0KSAvIDg7Ci0JZWxzZQotCQlkZWx0YSA9IChjdXJyUERBREMgLSBhaC0+aW5pdFBEQURDICsgNSkgLyAxMDsKIAotCWlmIChkZWx0YSAhPSBhaC0+UERBRENkZWx0YSkgewotCQlhaC0+UERBRENkZWx0YSA9IGRlbHRhOwotCQlmb3IgKGkgPSAxOyBpIDwgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRTsgaSsrKSB7Ci0JCQlyZWd2YWwgPSBhaC0+b3JpZ2luYWxHYWluW2ldIC0gZGVsdGE7Ci0JCQlpZiAocmVndmFsIDwgMCkKLQkJCQlyZWd2YWwgPSAwOworCWlmIChPTENfRk9SX0FSOTI4N18xMF9MQVRFUikgeworCQlpZiAoYWgtPmluaXRQREFEQyA9PSAwIHx8IGN1cnJQREFEQyA9PSAwKSB7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQlzbG9wZSA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfVEVNUFNFTlNFX1NMT1BFKTsKKwkJCWlmIChzbG9wZSA9PSAwKQorCQkJCWRlbHRhID0gMDsKKwkJCWVsc2UKKwkJCQlkZWx0YSA9ICgoY3VyclBEQURDIC0gYWgtPmluaXRQREFEQykqNCkgLyBzbG9wZTsKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DSDBfVFhfUFdSQ1RSTDExLAorCQkJCQlBUl9QSFlfVFhfUFdSQ1RSTF9PTFBDX1RFTVBfQ09NUCwgZGVsdGEpOworCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NIMV9UWF9QV1JDVFJMMTEsCisJCQkJCUFSX1BIWV9UWF9QV1JDVFJMX09MUENfVEVNUF9DT01QLCBkZWx0YSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9EQUNfSFBXUl81RykpCisJCQlkZWx0YSA9IChjdXJyUERBREMgLSBhaC0+aW5pdFBEQURDICsgNCkgLyA4OworCQllbHNlCisJCQlkZWx0YSA9IChjdXJyUERBREMgLSBhaC0+aW5pdFBEQURDICsgNSkgLyAxMDsKIAotCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0dBSU5fVEJMMSArIGkgKiA0LAotCQkJCQlBUl9QSFlfVFhfR0FJTiwgcmVndmFsKTsKKwkJaWYgKGRlbHRhICE9IGFoLT5QREFEQ2RlbHRhKSB7CisJCQlhaC0+UERBRENkZWx0YSA9IGRlbHRhOworCQkJZm9yIChpID0gMTsgaSA8IEFSOTI4MF9UWF9HQUlOX1RBQkxFX1NJWkU7IGkrKykgeworCQkJCXJlZ3ZhbCA9IGFoLT5vcmlnaW5hbEdhaW5baV0gLSBkZWx0YTsKKwkJCQlpZiAocmVndmFsIDwgMCkKKwkJCQkJcmVndmFsID0gMDsKKworCQkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9HQUlOX1RCTDEgKyBpICogNCwKKwkJCQkJCUFSX1BIWV9UWF9HQUlOLCByZWd2YWwpOworCQkJfQogCQl9CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfOTI4NV9wYV9jYWwoc3RydWN0IGF0aF9odyAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od185MjcxX3BhX2NhbChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwl1MzIgcmVnVmFsOworCXVuc2lnbmVkIGludCBpOworCXUzMiByZWdMaXN0IFtdWzJdID0geworCQl7IDB4Nzg2YywgMCB9LAorCQl7IDB4Nzg1NCwgMCB9LAorCQl7IDB4NzgyMCwgMCB9LAorCQl7IDB4NzgyNCwgMCB9LAorCQl7IDB4Nzg2OCwgMCB9LAorCQl7IDB4NzgzYywgMCB9LAorCQl7IDB4NzgzOCwgMCB9ICwKKwkJeyAweDc4MjgsIDAgfSAsCisJfTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ0xpc3QpOyBpKyspCisJCXJlZ0xpc3RbaV1bMV0gPSBSRUdfUkVBRChhaCwgcmVnTGlzdFtpXVswXSk7CisKKwlyZWdWYWwgPSBSRUdfUkVBRChhaCwgMHg3ODM0KTsKKwlyZWdWYWwgJj0gKH4oMHgxKSk7CisJUkVHX1dSSVRFKGFoLCAweDc4MzQsIHJlZ1ZhbCk7CisJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4OTgwOCk7CisJcmVnVmFsIHw9ICgweDEgPDwgMjcpOworCVJFR19XUklURShhaCwgMHg5ODA4LCByZWdWYWwpOworCisJLyogNzg2YyxiMjMsMSwgcHdkZGFjPTEgKi8KKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fVE9QMywgQVI5Mjg1X0FOX1RPUDNfUFdEREFDLCAxKTsKKwkvKiA3ODU0LCBiNSwxLCBwZHJ4dHhiYj0xICovCisJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JYVFhCQjEsIEFSOTI4NV9BTl9SWFRYQkIxX1BEUlhUWEJCMSwgMSk7CisJLyogNzg1NCwgYjcsMSwgcGR2Mmk9MSAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SWFRYQkIxLCBBUjkyODVfQU5fUlhUWEJCMV9QRFYySSwgMSk7CisJLyogNzg1NCwgYjgsMSwgcGRkYWNpbnRlcmZhY2U9MSAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SWFRYQkIxLCBBUjkyODVfQU5fUlhUWEJCMV9QRERBQ0lGLCAxKTsKKwkvKiA3ODI0LGIxMiwwLCBvZmZjYWw9MCAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHMiwgQVI5Mjg1X0FOX1JGMkcyX09GRkNBTCwgMCk7CisJLyogNzgzOCwgYjEsMCwgcHdkZGI9MCAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHNywgQVI5Mjg1X0FOX1JGMkc3X1BXRERCLCAwKTsKKwkvKiA3ODIwLGIxMSwwLCBlbnBhY2FsPTAgKi8KKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzEsIEFSOTI4NV9BTl9SRjJHMV9FTlBBQ0FMLCAwKTsKKwkvKiA3ODIwLGIyNSwxLCBwZHBhZHJ2MT0wICovCisJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkcxLCBBUjkyODVfQU5fUkYyRzFfUERQQURSVjEsIDApOworCS8qIDc4MjAsYjI0LDAsIHBkcGFkcnYyPTAgKi8KKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzEsQVI5Mjg1X0FOX1JGMkcxX1BEUEFEUlYyLDApOworCS8qIDc4MjAsYjIzLDAsIHBkcGFvdXQ9MCAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHMSwgQVI5Mjg1X0FOX1JGMkcxX1BEUEFPVVQsIDApOworCS8qIDc4M2MsYjE0LTE2LDcsIHBhZHJ2Z24ydGFiXzA9NyAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHOCxBUjkyODVfQU5fUkYyRzhfUEFEUlZHTjJUQUIwLCA3KTsKKwkvKgorCSAqIDc4MzgsYjI5LTMxLDAsIHBhZHJ2Z24xdGFiXzA9MAorCSAqIGRvZXMgbm90IG1hdHRlciBzaW5jZSB3ZSB0dXJuIGl0IG9mZgorCSAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHNyxBUjkyODVfQU5fUkYyRzdfUEFEUlZHTjJUQUIwLCAwKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHMywgQVI5MjcxX0FOX1JGMkczX0NDT01QLCAweGZmZik7CisKKwkvKiBTZXQ6CisJICogbG9jYWxtb2RlPTEsYm1vZGU9MSxibW9kZXJ4dHg9MSxzeW50aG9uPTEsCisJICogdHhvbj0xLHBhb249MSxvc2Nvbj0xLHN5bnRob25fZm9yY2U9MQorCSAqLworCVJFR19XUklURShhaCwgQVI5Mjg1X0FOX1RPUDIsIDB4Y2EwMzU4YTApOworCXVkZWxheSgzMCk7CisJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkc2LCBBUjkyNzFfQU5fUkYyRzZfT0ZGUywgMCk7CisKKwkvKiBmaW5kIG9mZl82XzE7ICovCisJZm9yIChpID0gNjsgaSA+PSAwOyBpLS0pIHsKKwkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4NzgzNCk7CisJCXJlZ1ZhbCB8PSAoMSA8PCAoMjAgKyBpKSk7CisJCVJFR19XUklURShhaCwgMHg3ODM0LCByZWdWYWwpOworCQl1ZGVsYXkoMSk7CisJCS8vcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4NzgzNCk7CisJCXJlZ1ZhbCAmPSAofigweDEgPDwgKDIwICsgaSkpKTsKKwkJcmVnVmFsIHw9IChNUyhSRUdfUkVBRChhaCwgMHg3ODQwKSwgQVI5Mjg1X0FOX1JYVFhCQjFfU1BBUkU5KQorCQkJICAgIDw8ICgyMCArIGkpKTsKKwkJUkVHX1dSSVRFKGFoLCAweDc4MzQsIHJlZ1ZhbCk7CisJfQorCisJLyogIEVtcGlyaWNhbCBvZmZzZXQgY29ycmVjdGlvbiAgKi8KKyNpZiAwCisJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkc2LCBBUjkyNzFfQU5fUkYyRzZfT0ZGUywgMHgyMCk7CisjZW5kaWYKKworCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCAweDc4MzQpOworCXJlZ1ZhbCB8PSAweDE7CisJUkVHX1dSSVRFKGFoLCAweDc4MzQsIHJlZ1ZhbCk7CisJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4OTgwOCk7CisJcmVnVmFsICY9ICh+KDB4MSA8PCAyNykpOworCVJFR19XUklURShhaCwgMHg5ODA4LCByZWdWYWwpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVnTGlzdCk7IGkrKykKKwkJUkVHX1dSSVRFKGFoLCByZWdMaXN0W2ldWzBdLCByZWdMaXN0W2ldWzFdKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3XzkyODVfcGFfY2FsKHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIGlzX3Jlc2V0KQogewogCiAJdTMyIHJlZ1ZhbDsKQEAgLTc2Miw2ICs4NzcsMTMgQEAKIAkJeyAweDc4MzgsIDAgfSwKIAl9OwogCisJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLCAiUnVubmluZyBQQSBDYWxpYnJhdGlvblxuIik7CisKKwkvKiBQQSBDQUwgaXMgbm90IG5lZWRlZCBmb3IgaGlnaCBwb3dlciBzb2x1dGlvbiAqLworCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1RYR0FJTl9UWVBFKSA9PQorCSAgICBBUjU0MTZfRUVQX1RYR0FJTl9ISUdIX1BPV0VSKQorCQlyZXR1cm47CisKIAlpZiAoQVJfU1JFVl85Mjg1XzExKGFoKSkgewogCQlSRUdfV1JJVEUoYWgsIEFSOTI4NV9BTl9UT1A0LCAoQVI5Mjg1X0FOX1RPUDRfREVGQVVMVCB8IDB4MTQpKTsKIAkJdWRlbGF5KDEwKTsKQEAgLTc4NCwxMyArOTA2LDEzIEBACiAJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkcyLCBBUjkyODVfQU5fUkYyRzJfT0ZGQ0FMLCAwKTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzcsIEFSOTI4NV9BTl9SRjJHN19QV0REQiwgMCk7CiAJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkcxLCBBUjkyODVfQU5fUkYyRzFfRU5QQUNBTCwgMCk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkcxLCBBUjkyODVfQU5fUkYyRzFfUERQQURSVjEsIDEpOworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHMSwgQVI5Mjg1X0FOX1JGMkcxX1BEUEFEUlYxLCAwKTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzEsIEFSOTI4NV9BTl9SRjJHMV9QRFBBRFJWMiwgMCk7CiAJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkcxLCBBUjkyODVfQU5fUkYyRzFfUERQQU9VVCwgMCk7CiAJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkc4LCBBUjkyODVfQU5fUkYyRzhfUEFEUlZHTjJUQUIwLCA3KTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzcsIEFSOTI4NV9BTl9SRjJHN19QQURSVkdOMlRBQjAsIDApOwogCWNjb21wX29yZyA9IE1TKFJFR19SRUFEKGFoLCBBUjkyODVfQU5fUkYyRzYpLCBBUjkyODVfQU5fUkYyRzZfQ0NPTVApOwotCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHNiwgQVI5Mjg1X0FOX1JGMkc2X0NDT01QLCA3KTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzYsIEFSOTI4NV9BTl9SRjJHNl9DQ09NUCwgMHhmKTsKIAogCVJFR19XUklURShhaCwgQVI5Mjg1X0FOX1RPUDIsIDB4Y2EwMzU4YTApOwogCXVkZWxheSgzMCk7CkBAIC04MDIsNyArOTI0LDYgQEAKIAkJcmVnVmFsIHw9ICgxIDw8ICgxOSArIGkpKTsKIAkJUkVHX1dSSVRFKGFoLCAweDc4MzQsIHJlZ1ZhbCk7CiAJCXVkZWxheSgxKTsKLQkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4NzgzNCk7CiAJCXJlZ1ZhbCAmPSAofigweDEgPDwgKDE5ICsgaSkpKTsKIAkJcmVnX2ZpZWxkID0gTVMoUkVHX1JFQUQoYWgsIDB4Nzg0MCksIEFSOTI4NV9BTl9SWFRYQkIxX1NQQVJFOSk7CiAJCXJlZ1ZhbCB8PSAocmVnX2ZpZWxkIDw8ICgxOSArIGkpKTsKQEAgLTgyMSw2ICs5NDIsMTcgQEAKIAlvZmZzXzZfMSA9IG9mZnNldD4+MTsKIAlvZmZzXzAgPSBvZmZzZXQgJiAxOwogCisJaWYgKCghaXNfcmVzZXQpICYmIChhaC0+cGFjYWxfaW5mby5wcmV2X29mZnNldCA9PSBvZmZzZXQpKSB7CisJCWlmIChhaC0+cGFjYWxfaW5mby5tYXhfc2tpcGNvdW50IDwgTUFYX1BBQ0FMX1NLSVBDT1VOVCkKKwkJCWFoLT5wYWNhbF9pbmZvLm1heF9za2lwY291bnQgPQorCQkJCTIgKiBhaC0+cGFjYWxfaW5mby5tYXhfc2tpcGNvdW50OworCQlhaC0+cGFjYWxfaW5mby5za2lwY291bnQgPSBhaC0+cGFjYWxfaW5mby5tYXhfc2tpcGNvdW50OworCX0gZWxzZSB7CisJCWFoLT5wYWNhbF9pbmZvLm1heF9za2lwY291bnQgPSAxOworCQlhaC0+cGFjYWxfaW5mby5za2lwY291bnQgPSAwOworCQlhaC0+cGFjYWxfaW5mby5wcmV2X29mZnNldCA9IG9mZnNldDsKKwl9CisKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzYsIEFSOTI4NV9BTl9SRjJHNl9PRkZTLCBvZmZzXzZfMSk7CiAJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkczLCBBUjkyODVfQU5fUkYyRzNfUERWQ0NPTVAsIG9mZnNfMCk7CiAKQEAgLTg2MiwxNCArOTk0LDMwIEBACiAJCX0KIAl9CiAKKwkvKiBEbyBORiBjYWwgb25seSBhdCBsb25nZXIgaW50ZXJ2YWxzICovCiAJaWYgKGxvbmdjYWwpIHsKLQkJaWYgKEFSX1NSRVZfOTI4NV8xMV9PUl9MQVRFUihhaCkpCi0JCQlhdGg5a19od185Mjg1X3BhX2NhbChhaCk7CisJCS8qIERvIHBlcmlvZGljIFBBT2Zmc2V0IENhbCAqLworCQlpZiAoQVJfU1JFVl85MjcxKGFoKSkKKwkJCWF0aDlrX2h3XzkyNzFfcGFfY2FsKGFoKTsKKwkJZWxzZSBpZiAoQVJfU1JFVl85Mjg1XzExX09SX0xBVEVSKGFoKSkgeworCQkJaWYgKCFhaC0+cGFjYWxfaW5mby5za2lwY291bnQpCisJCQkJYXRoOWtfaHdfOTI4NV9wYV9jYWwoYWgsIGZhbHNlKTsKKwkJCWVsc2UKKwkJCQlhaC0+cGFjYWxfaW5mby5za2lwY291bnQtLTsKKwkJfQogCi0JCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikKKwkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSIHx8IE9MQ19GT1JfQVI5Mjg3XzEwX0xBVEVSKQogCQkJYXRoOWtfb2xjX3RlbXBfY29tcGVuc2F0aW9uKGFoKTsKKworCQkvKiBHZXQgdGhlIHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIE5GIGNhbCBhbmQgdXBkYXRlIGhpc3RvcnkgYnVmZmVyICovCiAJCWF0aDlrX2h3X2dldG5mKGFoLCBjaGFuKTsKKworCQkvKgorCQkgKiBMb2FkIHRoZSBORiBmcm9tIGhpc3RvcnkgYnVmZmVyIG9mIHRoZSBjdXJyZW50IGNoYW5uZWwuCisJCSAqIE5GIGlzIHNsb3cgdGltZS12YXJpYW50LCBzbyBpdCBpcyBPSyB0byB1c2UgYSBoaXN0b3JpY2FsIHZhbHVlLgorCQkgKi8KIAkJYXRoOWtfaHdfbG9hZG5mKGFoLCBhaC0+Y3VyY2hhbik7CisKIAkJYXRoOWtfaHdfc3RhcnRfbmZjYWwoYWgpOwogCX0KIApAQCAtOTIyLDggKzEwNzAsMTEgQEAKIAkJCXJldHVybiBmYWxzZTsKIAl9IGVsc2UgewogCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BRENfQ1RMLCBBUl9QSFlfQURDX0NUTF9PRkZfUFdEQURDKTsKLQkJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisJCQlpZiAoIUFSX1NSRVZfOTI4N18xMF9PUl9MQVRFUihhaCkpCisJCQkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BRENfQ1RMLAorCQkJCQkgICAgQVJfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyk7CisJCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkJCSAgICBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOwogCQl9CiAKIAkJLyogQ2FsaWJyYXRlIHRoZSBBR0MgKi8KQEAgLTk0MSwxNCArMTA5MiwxNyBAQAogCQl9CiAKIAkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQURDX0NUTCwgQVJfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyk7Ci0JCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCQkJaWYgKCFBUl9TUkVWXzkyODdfMTBfT1JfTEFURVIoYWgpKQorCQkJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQURDX0NUTCwKKwkJCQkJICAgIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCQkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKKwkJCQkgICAgQVJfUEhZX0FHQ19DT05UUk9MX0ZMVFJfQ0FMKTsKIAkJfQogCX0KIAogCS8qIERvIFBBIENhbGlicmF0aW9uICovCiAJaWYgKEFSX1NSRVZfOTI4NV8xMV9PUl9MQVRFUihhaCkpCi0JCWF0aDlrX2h3XzkyODVfcGFfY2FsKGFoKTsKKwkJYXRoOWtfaHdfOTI4NV9wYV9jYWwoYWgsIHRydWUpOwogCiAJLyogRG8gTkYgQ2FsaWJyYXRpb24gYWZ0ZXIgREMgb2Zmc2V0IGFuZCBvdGhlciBjYWxpYnJhdGlvbnMgKi8KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmgKaW5kZXggZmU1MzY3Zi4uMDE5YmNiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmgKQEAgLTI1LDcgKzI1LDkgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXRoOWtfcGVyY2FsX2RhdGEgYWRjX2RjX2NhbF9zaW5nbGVfc2FtcGxlOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdGg5a19wZXJjYWxfZGF0YSBhZGNfaW5pdF9kY19jYWw7CiAKLSNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxVRSAgICAgIAkJLTg1CisjZGVmaW5lIEFSX1BIWV9DQ0FfTUFYX0FSNTQxNl9HT09EX1ZBTFVFCS04NQorI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9BUjkyODBfR09PRF9WQUxVRQktMTEyCisjZGVmaW5lIEFSX1BIWV9DQ0FfTUFYX0FSOTI4NV9HT09EX1ZBTFVFCS0xMTgKICNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfSElHSF9WQUxVRSAgICAgIAkJLTYyCiAjZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0JBRF9WQUxVRSAgICAgICAJCS0xNDAKICNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIX0lOSVQgICAgIDMKQEAgLTEwOCw2ICsxMTAsMTMgQEAKIAl1OCBpbnZhbGlkTkZjb3VudDsKIH07CiAKKyNkZWZpbmUgTUFYX1BBQ0FMX1NLSVBDT1VOVCA4CitzdHJ1Y3QgYXRoOWtfcGFjYWxfaW5mb3sKKwlpbnQzMl90IHByZXZfb2Zmc2V0OwkvKiBQcmV2aW91cyB2YWx1ZSBvZiBQQSBvZmZzZXQgdmFsdWUgKi8KKwlpbnQ4X3QgbWF4X3NraXBjb3VudDsJLyogTWF4IE5vLiBvZiB0aW1lcyBQQUNBTCBjYW4gYmUgc2tpcHBlZCAqLworCWludDhfdCBza2lwY291bnQ7CS8qIE5vLiBvZiB0aW1lcyB0aGUgUEFDQUwgdG8gYmUgc2tpcHBlZCAqLworfTsKKwogYm9vbCBhdGg5a19od19yZXNldF9jYWx2YWxpZChzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X3N0YXJ0X25mY2FsKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfaHdfbG9hZG5mKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jCmluZGV4IDZkMjA3MjUuLjJiZTRjMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jCkBAIC05Myw2ICs5Myw4IEBACiAJaW50IGksIHFjdU9mZnNldCA9IDAsIGRjdU9mZnNldCA9IDA7CiAJdTMyICpxY3VCYXNlID0gJnZhbFswXSwgKmRjdUJhc2UgPSAmdmFsWzRdOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKKwogCVJFR19XUklURShhaCwgQVJfTUFDTUlTQywKIAkJICAoKEFSX01BQ01JU0NfRE1BX09CU19MSU5FXzggPDwgQVJfTUFDTUlTQ19ETUFfT0JTX1MpIHwKIAkJICAgKEFSX01BQ01JU0NfTUlTQ19PQlNfQlVTXzEgPDwKQEAgLTE1OSw2ICsxNjEsOCBAQAogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAogCQkJIkFSX0NSOiAweCV4IFxuIiwgUkVHX1JFQUQoYWgsIEFSX0NSKSk7CiAKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKKwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKIH0KIApAQCAtNDg2LDYgKzQ5MCw4MyBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFCiB9OwogCisjZGVmaW5lIFBSKHN0ciwgZWxlbSkJCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwJCQlcCisJCQkJIiVzJTEzdSUxMXUlMTB1JTEwdVxuIiwgc3RyLAkJXAorCQlzYy0+ZGVidWcuc3RhdHMudHhzdGF0c1tzYy0+dHguaHdxX21hcFtBVEg5S19XTUVfQUNfQkVdXS5lbGVtLCBcCisJCXNjLT5kZWJ1Zy5zdGF0cy50eHN0YXRzW3NjLT50eC5od3FfbWFwW0FUSDlLX1dNRV9BQ19CS11dLmVsZW0sIFwKKwkJc2MtPmRlYnVnLnN0YXRzLnR4c3RhdHNbc2MtPnR4Lmh3cV9tYXBbQVRIOUtfV01FX0FDX1ZJXV0uZWxlbSwgXAorCQlzYy0+ZGVidWcuc3RhdHMudHhzdGF0c1tzYy0+dHguaHdxX21hcFtBVEg5S19XTUVfQUNfVk9dXS5lbGVtKTsgXAorfSB3aGlsZSgwKQorCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfeG1pdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciAqYnVmOworCXVuc2lnbmVkIGludCBsZW4gPSAwLCBzaXplID0gMjA0ODsKKwlzc2l6ZV90IHJldHZhbCA9IDA7CisKKwlidWYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gKz0gc3ByaW50ZihidWYsICIlMzBzICUxMHMlMTBzJTEwc1xuXG4iLCAiQkUiLCAiQksiLCAiVkkiLCAiVk8iKTsKKworCVBSKCJNUERVcyBRdWV1ZWQ6ICAgICIsIHF1ZXVlZCk7CisJUFIoIk1QRFVzIENvbXBsZXRlZDogIiwgY29tcGxldGVkKTsKKwlQUigiQWdncmVnYXRlczogICAgICAiLCBhX2FnZ3IpOworCVBSKCJBTVBEVXMgUXVldWVkOiAgICIsIGFfcXVldWVkKTsKKwlQUigiQU1QRFVzIENvbXBsZXRlZDoiLCBhX2NvbXBsZXRlZCk7CisJUFIoIkFNUERVcyBSZXRyaWVkOiAgIiwgYV9yZXRyaWVzKTsKKwlQUigiQU1QRFVzIFhSZXRyaWVkOiAiLCBhX3hyZXRyaWVzKTsKKwlQUigiRklGTyBVbmRlcnJ1bjogICAiLCBmaWZvX3VuZGVycnVuKTsKKwlQUigiVFhPUCBFeGNlZWRlZDogICAiLCB4dHhvcCk7CisJUFIoIlRYVElNRVIgRXhwaXJ5OiAgIiwgdGltZXJfZXhwKTsKKwlQUigiREVTQyBDRkcgRXJyb3I6ICAiLCBkZXNjX2NmZ19lcnIpOworCVBSKCJEQVRBIFVuZGVycnVuOiAgICIsIGRhdGFfdW5kZXJydW4pOworCVBSKCJERUxJTSBVbmRlcnJ1bjogICIsIGRlbGltX3VuZGVycnVuKTsKKworCXJldHZhbCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCit2b2lkIGF0aF9kZWJ1Z19zdGF0X3R4KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAorCQkgICAgICAgc3RydWN0IGF0aF9idWYgKmJmKQoreworCXN0cnVjdCBhdGhfZGVzYyAqZHMgPSBiZi0+YmZfZGVzYzsKKworCWlmIChiZl9pc2FtcGR1KGJmKSkgeworCQlpZiAoYmZfaXN4cmV0cmllZChiZikpCisJCQlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBhX3hyZXRyaWVzKTsKKwkJZWxzZQorCQkJVFhfU1RBVF9JTkModHhxLT5heHFfcW51bSwgYV9jb21wbGV0ZWQpOworCX0gZWxzZSB7CisJCVRYX1NUQVRfSU5DKHR4cS0+YXhxX3FudW0sIGNvbXBsZXRlZCk7CisJfQorCisJaWYgKGRzLT5kc190eHN0YXQudHNfc3RhdHVzICYgQVRIOUtfVFhFUlJfRklGTykKKwkJVFhfU1RBVF9JTkModHhxLT5heHFfcW51bSwgZmlmb191bmRlcnJ1bik7CisJaWYgKGRzLT5kc190eHN0YXQudHNfc3RhdHVzICYgQVRIOUtfVFhFUlJfWFRYT1ApCisJCVRYX1NUQVRfSU5DKHR4cS0+YXhxX3FudW0sIHh0eG9wKTsKKwlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9USU1FUl9FWFBJUkVEKQorCQlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCB0aW1lcl9leHApOworCWlmIChkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzICYgQVRIOUtfVFhfREVTQ19DRkdfRVJSKQorCQlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBkZXNjX2NmZ19lcnIpOworCWlmIChkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzICYgQVRIOUtfVFhfREFUQV9VTkRFUlJVTikKKwkJVFhfU1RBVF9JTkModHhxLT5heHFfcW51bSwgZGF0YV91bmRlcnJ1bik7CisJaWYgKGRzLT5kc190eHN0YXQudHNfZmxhZ3MgJiBBVEg5S19UWF9ERUxJTV9VTkRFUlJVTikKKwkJVFhfU1RBVF9JTkModHhxLT5heHFfcW51bSwgZGVsaW1fdW5kZXJydW4pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3htaXQgPSB7CisJLnJlYWQgPSByZWFkX2ZpbGVfeG1pdCwKKwkub3BlbiA9IGF0aDlrX2RlYnVnZnNfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRQorfTsKIAogaW50IGF0aDlrX2luaXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CkBAIC01MDAsMzUgKzU4MSw0MiBAQAogCQlnb3RvIGVycjsKIAogCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2RlYnVnID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGVidWciLAotCQlTX0lSVUdPIHwgU19JV1VTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywgJmZvcHNfZGVidWcpOworCQlTX0lSVVNSIHwgU19JV1VTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywgJmZvcHNfZGVidWcpOwogCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfZGVidWcpCiAJCWdvdG8gZXJyOwogCi0Jc2MtPmRlYnVnLmRlYnVnZnNfZG1hID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZG1hIiwgU19JUlVHTywKKwlzYy0+ZGVidWcuZGVidWdmc19kbWEgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkbWEiLCBTX0lSVVNSLAogCQkJCSAgICAgICBzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLCAmZm9wc19kbWEpOwogCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfZG1hKQogCQlnb3RvIGVycjsKIAogCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImludGVycnVwdCIsCi0JCQkJCQkgICAgIFNfSVJVR08sCisJCQkJCQkgICAgIFNfSVJVU1IsCiAJCQkJCQkgICAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKIAkJCQkJCSAgICAgc2MsICZmb3BzX2ludGVycnVwdCk7CiAJaWYgKCFzYy0+ZGVidWcuZGVidWdmc19pbnRlcnJ1cHQpCiAJCWdvdG8gZXJyOwogCiAJc2MtPmRlYnVnLmRlYnVnZnNfcmNzdGF0ID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmNzdGF0IiwKLQkJCQkJCSAgU19JUlVHTywKKwkJCQkJCSAgU19JUlVTUiwKIAkJCQkJCSAgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAogCQkJCQkJICBzYywgJmZvcHNfcmNzdGF0KTsKIAlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3Jjc3RhdCkKIAkJZ290byBlcnI7CiAKIAlzYy0+ZGVidWcuZGVidWdmc193aXBoeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoCi0JCSJ3aXBoeSIsIFNfSVJVR08gfCBTX0lXVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLAorCQkid2lwaHkiLCBTX0lSVVNSIHwgU19JV1VTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywKIAkJJmZvcHNfd2lwaHkpOwogCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfd2lwaHkpCiAJCWdvdG8gZXJyOwogCisJc2MtPmRlYnVnLmRlYnVnZnNfeG1pdCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInhtaXQiLAorCQkJCQkJICAgICBTX0lSVVNSLAorCQkJCQkJICAgICBzYy0+ZGVidWcuZGVidWdmc19waHksCisJCQkJCQkgICAgIHNjLCAmZm9wc194bWl0KTsKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3htaXQpCisJCWdvdG8gZXJyOworCiAJcmV0dXJuIDA7CiBlcnI6CiAJYXRoOWtfZXhpdF9kZWJ1ZyhzYyk7CkBAIC01MzcsNiArNjI1LDcgQEAKIAogdm9pZCBhdGg5a19leGl0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogeworCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3htaXQpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3dpcGh5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19yY3N0YXQpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oCmluZGV4IGVkZGExNWIuLjcyNDFmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oCkBAIC0zMCwxMSArMzAsMjIgQEAKIAlBVEhfREJHX0NPTkZJRwkJPSAweDAwMDAwMjAwLAogCUFUSF9EQkdfRkFUQUwJCT0gMHgwMDAwMDQwMCwKIAlBVEhfREJHX1BTCQk9IDB4MDAwMDA4MDAsCisJQVRIX0RCR19IV1RJTUVSCQk9IDB4MDAwMDEwMDAsCisJQVRIX0RCR19CVENPRVgJCT0gMHgwMDAwMjAwMCwKIAlBVEhfREJHX0FOWQkJPSAweGZmZmZmZmZmCiB9OwogCiAjZGVmaW5lIERCR19ERUZBVUxUIChBVEhfREJHX0ZBVEFMKQogCitzdHJ1Y3QgYXRoX3R4cTsKK3N0cnVjdCBhdGhfYnVmOworCisjaWZkZWYgQ09ORklHX0FUSDlLX0RFQlVHCisjZGVmaW5lIFRYX1NUQVRfSU5DKHEsIGMpIHNjLT5kZWJ1Zy5zdGF0cy50eHN0YXRzW3FdLmMrKworI2Vsc2UKKyNkZWZpbmUgVFhfU1RBVF9JTkMocSwgYykgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQVRIOUtfREVCVUcKIAogLyoqCkBAIC04Nyw5ICs5OCw0NSBAQAogCXU4IHBlcjsKIH07CiAKKy8qKgorICogc3RydWN0IGF0aF90eF9zdGF0cyAtIFN0YXRpc3RpY3MgYWJvdXQgVFgKKyAqIEBxdWV1ZWQ6IFRvdGFsIE1QRFVzIChub24tYWdncikgcXVldWVkCisgKiBAY29tcGxldGVkOiBUb3RhbCBNUERVcyAobm9uLWFnZ3IpIGNvbXBsZXRlZAorICogQGFfYWdncjogVG90YWwgbm8uIG9mIGFnZ3JlZ2F0ZXMgcXVldWVkCisgKiBAYV9xdWV1ZWQ6IFRvdGFsIEFNUERVcyBxdWV1ZWQKKyAqIEBhX2NvbXBsZXRlZDogVG90YWwgQU1QRFVzIGNvbXBsZXRlZAorICogQGFfcmV0cmllczogTm8uIG9mIEFNUERVcyByZXRyaWVkIChTVykKKyAqIEBhX3hyZXRyaWVzOiBOby4gb2YgQU1QRFVzIGRyb3BwZWQgZHVlIHRvIHhyZXRyaWVzCisgKiBAZmlmb191bmRlcnJ1bjogRklGTyB1bmRlcnJ1biBvY2N1cnJlbmNlcworCVZhbGlkIG9ubHkgZm9yOgorCQktIG5vbi1hZ2dyZWdhdGUgY29uZGl0aW9uLgorCQktIGZpcnN0IHBhY2tldCBvZiBhZ2dyZWdhdGUuCisgKiBAeHR4b3A6IE5vLiBvZiBmcmFtZXMgZmlsdGVyZWQgYmVjYXVzZSBvZiBUWE9QIGxpbWl0CisgKiBAdGltZXJfZXhwOiBUcmFuc21pdCB0aW1lciBleHBpcnkKKyAqIEBkZXNjX2NmZ19lcnI6IERlc2NyaXB0b3IgY29uZmlndXJhdGlvbiBlcnJvcnMKKyAqIEBkYXRhX3VybjogVFggZGF0YSB1bmRlcnJ1biBlcnJvcnMKKyAqIEBkZWxpbV91cm46IFRYIGRlbGltaXRlciB1bmRlcnJ1biBlcnJvcnMKKyAqLworc3RydWN0IGF0aF90eF9zdGF0cyB7CisJdTMyIHF1ZXVlZDsKKwl1MzIgY29tcGxldGVkOworCXUzMiBhX2FnZ3I7CisJdTMyIGFfcXVldWVkOworCXUzMiBhX2NvbXBsZXRlZDsKKwl1MzIgYV9yZXRyaWVzOworCXUzMiBhX3hyZXRyaWVzOworCXUzMiBmaWZvX3VuZGVycnVuOworCXUzMiB4dHhvcDsKKwl1MzIgdGltZXJfZXhwOworCXUzMiBkZXNjX2NmZ19lcnI7CisJdTMyIGRhdGFfdW5kZXJydW47CisJdTMyIGRlbGltX3VuZGVycnVuOworfTsKKwogc3RydWN0IGF0aF9zdGF0cyB7CiAJc3RydWN0IGF0aF9pbnRlcnJ1cHRfc3RhdHMgaXN0YXRzOwogCXN0cnVjdCBhdGhfcmNfc3RhdHMgcmNzdGF0c1tSQVRFX1RBQkxFX1NJWkVdOworCXN0cnVjdCBhdGhfdHhfc3RhdHMgdHhzdGF0c1tBVEg5S19OVU1fVFhfUVVFVUVTXTsKIH07CiAKIHN0cnVjdCBhdGg5a19kZWJ1ZyB7CkBAIC0xMDAsNiArMTQ3LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2ludGVycnVwdDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jjc3RhdDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3dpcGh5OworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfeG1pdDsKIAlzdHJ1Y3QgYXRoX3N0YXRzIHN0YXRzOwogfTsKIApAQCAtMTEwLDYgKzE1OCw4IEBACiB2b2lkIGF0aDlrX2RlYnVnX3JlbW92ZV9yb290KHZvaWQpOwogdm9pZCBhdGhfZGVidWdfc3RhdF9pbnRlcnJ1cHQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGVudW0gYXRoOWtfaW50IHN0YXR1cyk7CiB2b2lkIGF0aF9kZWJ1Z19zdGF0X3JjKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgYXRoX2RlYnVnX3N0YXRfdHgoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCSAgICAgICBzdHJ1Y3QgYXRoX2J1ZiAqYmYpOwogdm9pZCBhdGhfZGVidWdfc3RhdF9yZXRyaWVzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcml4LAogCQkJICAgIGludCB4cmV0cmllcywgaW50IHJldHJpZXMsIHU4IHBlcik7CiAKQEAgLTE0OCw2ICsxOTgsMTIgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGF0aF9kZWJ1Z19zdGF0X3R4KHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCQkgICAgIHN0cnVjdCBhdGhfYnVmICpiZikKK3sKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCByaXgsCiAJCQkJCSAgaW50IHhyZXRyaWVzLCBpbnQgcmV0cmllcywgdTggcGVyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbS5jCmluZGV4IGNlMGU4NmMuLmI2ZTUyZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmMKQEAgLTE2LDkgKzE2LDE2IEBACiAKICNpbmNsdWRlICJhdGg5ay5oIgogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSAgICAgIHUzMiByZWcsIHUzMiBtYXNrLAotCQkJCSAgICAgIHUzMiBzaGlmdCwgdTMyIHZhbCkKK3N0YXRpYyBpbmxpbmUgdTE2IGF0aDlrX2h3X2ZiaW4yZnJlcSh1OCBmYmluLCBib29sIGlzMkdIeikKK3sKKwlpZiAoZmJpbiA9PSBBUjU0MTZfQkNIQU5fVU5VU0VEKQorCQlyZXR1cm4gZmJpbjsKKworCXJldHVybiAodTE2KSAoKGlzMkdIeikgPyAoMjMwMCArIGZiaW4pIDogKDQ4MDAgKyA1ICogZmJpbikpOworfQorCit2b2lkIGF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWcsIHUzMiBtYXNrLAorCQkJICAgICAgIHUzMiBzaGlmdCwgdTMyIHZhbCkKIHsKIAl1MzIgcmVnVmFsOwogCkBAIC0zMywxOSArNDAsOCBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGlubGluZSB1MTYgYXRoOWtfaHdfZmJpbjJmcmVxKHU4IGZiaW4sIGJvb2wgaXMyR0h6KQotewotCi0JaWYgKGZiaW4gPT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkKLQkJcmV0dXJuIGZiaW47Ci0KLQlyZXR1cm4gKHUxNikgKChpczJHSHopID8gKDIzMDAgKyBmYmluKSA6ICg0ODAwICsgNSAqIGZiaW4pKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQxNl90IGF0aDlrX2h3X2ludGVycG9sYXRlKHUxNiB0YXJnZXQsCi0JCQkJCSAgIHUxNiBzcmNMZWZ0LCB1MTYgc3JjUmlnaHQsCi0JCQkJCSAgIGludDE2X3QgdGFyZ2V0TGVmdCwKLQkJCQkJICAgaW50MTZfdCB0YXJnZXRSaWdodCkKK2ludDE2X3QgYXRoOWtfaHdfaW50ZXJwb2xhdGUodTE2IHRhcmdldCwgdTE2IHNyY0xlZnQsIHUxNiBzcmNSaWdodCwKKwkJCSAgICAgaW50MTZfdCB0YXJnZXRMZWZ0LCBpbnQxNl90IHRhcmdldFJpZ2h0KQogewogCWludDE2X3QgcnY7CiAKQEAgLTU5LDkgKzU1LDggQEAKIAlyZXR1cm4gcnY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgodTggdGFyZ2V0LCB1OCAqcExpc3QsCi0JCQkJCQkgIHUxNiBsaXN0U2l6ZSwgdTE2ICppbmRleEwsCi0JCQkJCQkgIHUxNiAqaW5kZXhSKQorYm9vbCBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgodTggdGFyZ2V0LCB1OCAqcExpc3QsIHUxNiBsaXN0U2l6ZSwKKwkJCQkgICAgdTE2ICppbmRleEwsIHUxNiAqaW5kZXhSKQogewogCXUxNiBpOwogCkBAIC04OCwxNiArODMsMTYgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19od19udnJhbV9yZWFkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCitib29sIGF0aDlrX2h3X252cmFtX3JlYWQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBvZmYsIHUxNiAqZGF0YSkKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFoLT5haF9zYzsKIAogCXJldHVybiBzYy0+YnVzX29wcy0+ZWVwcm9tX3JlYWQoYWgsIG9mZiwgZGF0YSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19od19maWxsX3ZwZF90YWJsZSh1OCBwd3JNaW4sIHU4IHB3ck1heCwgdTggKnBQd3JMaXN0LAotCQkJCQkgICB1OCAqcFZwZExpc3QsIHUxNiBudW1JbnRlcmNlcHRzLAotCQkJCQkgICB1OCAqcFJldFZwZExpc3QpCit2b2lkIGF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKHU4IHB3ck1pbiwgdTggcHdyTWF4LCB1OCAqcFB3ckxpc3QsCisJCQkgICAgIHU4ICpwVnBkTGlzdCwgdTE2IG51bUludGVyY2VwdHMsCisJCQkgICAgIHU4ICpwUmV0VnBkTGlzdCkKIHsKIAl1MTYgaSwgazsKIAl1OCBjdXJyUHdyID0gcHdyTWluOwpAQCAtMTIwLDE2ICsxMTUsMTQgQEAKIAkJcFJldFZwZExpc3RbaV0gPSAodTgpIGs7CiAJCWN1cnJQd3IgKz0gMjsKIAl9Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyAqcG93SW5mbywKLQkJCQkgICAgICB1MTYgbnVtQ2hhbm5lbHMsCi0JCQkJICAgICAgc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnICpwTmV3UG93ZXIsCi0JCQkJICAgICAgdTE2IG51bVJhdGVzLCBib29sIGlzRXh0VGFyZ2V0KQordm9pZCBhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgKnBvd0luZm8sCisJCQkJICAgICAgIHUxNiBudW1DaGFubmVscywKKwkJCQkgICAgICAgc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnICpwTmV3UG93ZXIsCisJCQkJICAgICAgIHUxNiBudW1SYXRlcywgYm9vbCBpc0V4dFRhcmdldCkKIHsKIAlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CiAJdTE2IGNsbywgY2hpOwpAQCAtMTUwLDEwICsxNDMsMTAgQEAKIAkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7CiAJCQkJbWF0Y2hJbmRleCA9IGk7CiAJCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSAmJgotCQkJCSAgIChmcmVxID4gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baSAtIDFdLmJDaGFubmVsLAotCQkJCQkJICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkpIHsKKwkJCX0gZWxzZSBpZiAoZnJlcSA8IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAorCQkJCQkJSVNfQ0hBTl8yR0haKGNoYW4pKSAmJiBpID4gMCAmJgorCQkJCSAgIGZyZXEgPiBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpIC0gMV0uYkNoYW5uZWwsCisJCQkJCQlJU19DSEFOXzJHSFooY2hhbikpKSB7CiAJCQkJbG93SW5kZXggPSBpIC0gMTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTE3OSw3NSArMTcyLDEyIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19nZXRfdHhnYWluX2luZGV4KHN0cnVjdCBhdGhfaHcgKmFoLAotCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICpyYXdEYXRhc2V0T3BMb29wLAotCQl1OCAqY2FsQ2hhbnMsICB1MTYgYXZhaWxQaWVycywgdTggKnB3ciwgdTggKnBjZGFjSWR4KQotewotCXU4IHBjZGFjLCBpID0gMDsKLQl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwLCBudW1QaWVyczsKLQlib29sIG1hdGNoOwotCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLQotCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKLQotCWZvciAobnVtUGllcnMgPSAwOyBudW1QaWVycyA8IGF2YWlsUGllcnM7IG51bVBpZXJzKyspCi0JCWlmIChjYWxDaGFuc1tudW1QaWVyc10gPT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkKLQkJCWJyZWFrOwotCi0JbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCi0JCQkodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLCBJU19DSEFOXzJHSFooY2hhbikpLAotCQkJY2FsQ2hhbnMsIG51bVBpZXJzLCAmaWR4TCwgJmlkeFIpOwotCWlmIChtYXRjaCkgewotCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4TF0ucGNkYWNbMF1bMF07Ci0JCSpwd3IgPSByYXdEYXRhc2V0T3BMb29wW2lkeExdLnB3clBkZ1swXVswXTsKLQl9IGVsc2UgewotCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucGNkYWNbMF1bMF07Ci0JCSpwd3IgPSAocmF3RGF0YXNldE9wTG9vcFtpZHhMXS5wd3JQZGdbMF1bMF0gKwotCQkJCXJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucHdyUGRnWzBdWzBdKS8yOwotCX0KLQotCXdoaWxlIChwY2RhYyA+IGFoLT5vcmlnaW5hbEdhaW5baV0gJiYKLQkJCWkgPCAoQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAtIDEpKQotCQlpKys7Ci0KLQkqcGNkYWNJZHggPSBpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfb2xjX2dldF9wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJdTMyIGluaXRUeEdhaW4sCi0JCQkJaW50IHR4UG93ZXIsCi0JCQkJdTggKnBQREFEQ1ZhbHVlcykKLXsKLQl1MzIgaTsKLQl1MzIgb2Zmc2V0OwotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw2XzAsCi0JCQlBUl9QSFlfVFhfUFdSQ1RSTF9FUlJfRVNUX01PREUsIDMpOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNl8xLAotCQkJQVJfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFLCAzKTsKLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNywKLQkJCUFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTiwgaW5pdFR4R2Fpbik7Ci0KLQlvZmZzZXQgPSB0eFBvd2VyOwotCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUzsgaSsrKQotCQlpZiAoaSA8IG9mZnNldCkKLQkJCXBQREFEQ1ZhbHVlc1tpXSA9IDB4MDsKLQkJZWxzZQotCQkJcFBEQURDVmFsdWVzW2ldID0gMHhGRjsKLX0KLQotCi0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcG93SW5mbywKLQkJCQkgICAgICAgdTE2IG51bUNoYW5uZWxzLAotCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcE5ld1Bvd2VyLAotCQkJCSAgICAgICB1MTYgbnVtUmF0ZXMsIGJvb2wgaXNIdDQwVGFyZ2V0KQordm9pZCBhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcG93SW5mbywKKwkJCQl1MTYgbnVtQ2hhbm5lbHMsCisJCQkJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgKnBOZXdQb3dlciwKKwkJCQl1MTYgbnVtUmF0ZXMsIGJvb2wgaXNIdDQwVGFyZ2V0KQogewogCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKIAl1MTYgY2xvLCBjaGk7CkBAIC0yNjgsMTAgKzE5OCwxMCBAQAogCQkJCW1hdGNoSW5kZXggPSBpOwogCQkJCWJyZWFrOwogCQkJfSBlbHNlCi0JCQkJaWYgKChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkgJiYKLQkJCQkgICAgKGZyZXEgPiBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpIC0gMV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkpIHsKKwkJCQlpZiAoZnJlcSA8IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAorCQkJCQkJSVNfQ0hBTl8yR0haKGNoYW4pKSAmJiBpID4gMCAmJgorCQkJCSAgICBmcmVxID4gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baSAtIDFdLmJDaGFubmVsLAorCQkJCQkJSVNfQ0hBTl8yR0haKGNoYW4pKSkgewogCQkJCQlsb3dJbmRleCA9IGkgLSAxOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC0yOTcsOSArMjI3LDggQEAKIAl9CiB9CiAKLXN0YXRpYyB1MTYgYXRoOWtfaHdfZ2V0X21heF9lZGdlX3Bvd2VyKHUxNiBmcmVxLAotCQkJCSAgICAgICBzdHJ1Y3QgY2FsX2N0bF9lZGdlcyAqcFJkRWRnZXNQb3dlciwKLQkJCQkgICAgICAgYm9vbCBpczJHSHosIGludCBudW1fYmFuZF9lZGdlcykKK3UxNiBhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIodTE2IGZyZXEsIHN0cnVjdCBjYWxfY3RsX2VkZ2VzICpwUmRFZGdlc1Bvd2VyLAorCQkJCWJvb2wgaXMyR0h6LCBpbnQgbnVtX2JhbmRfZWRnZXMpCiB7CiAJdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwogCWludCBpOwpAQCAtMzI1LDI0NTEgKzI1NCwxNCBAQAogCXJldHVybiB0d2ljZU1heEVkZ2VQb3dlcjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBFRVBST00gT3BlcmF0aW9ucyBmb3IgNEsgc2l6ZWQgY2FyZHMgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IGF0aDlrX2h3XzRrX2dldF9lZXByb21fdmVyKHN0cnVjdCBhdGhfaHcgKmFoKQotewotCXJldHVybiAoKGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci52ZXJzaW9uID4+IDEyKSAmIDB4Rik7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV9yZXYoc3RydWN0IGF0aF9odyAqYWgpCi17Ci0JcmV0dXJuICgoYWgtPmVlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLnZlcnNpb24pICYgMHhGRkYpOwotfQotCi1zdGF0aWMgYm9vbCBhdGg5a19od180a19maWxsX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLSNkZWZpbmUgU0laRV9FRVBST01fNEsgKHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80aykgLyBzaXplb2YodTE2KSkKLQl1MTYgKmVlcF9kYXRhID0gKHUxNiAqKSZhaC0+ZWVwcm9tLm1hcDRrOwotCWludCBhZGRyLCBlZXBfc3RhcnRfbG9jID0gMDsKLQotCWVlcF9zdGFydF9sb2MgPSA2NDsKLQotCWlmICghYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiUmVhZGluZyBmcm9tIEVFUFJPTSwgbm90IGZsYXNoXG4iKTsKLQl9Ci0KLQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgU0laRV9FRVBST01fNEs7IGFkZHIrKykgewotCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIGFkZHIgKyBlZXBfc3RhcnRfbG9jLCBlZXBfZGF0YSkpIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSAgICAgICAiVW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvbiBcbiIpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCWVlcF9kYXRhKys7Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci0jdW5kZWYgU0laRV9FRVBST01fNEsKLX0KLQotc3RhdGljIGludCBhdGg5a19od180a19jaGVja19lZXByb20oc3RydWN0IGF0aF9odyAqYWgpCi17Ci0jZGVmaW5lIEVFUFJPTV80S19TSVpFIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fNGspIC8gc2l6ZW9mKHUxNikpCi0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9Ci0JCShzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqKSAmYWgtPmVlcHJvbS5tYXA0azsKLQl1MTYgKmVlcGRhdGEsIHRlbXAsIG1hZ2ljLCBtYWdpYzI7Ci0JdTMyIHN1bSA9IDAsIGVsOwotCWJvb2wgbmVlZF9zd2FwID0gZmFsc2U7Ci0JaW50IGksIGFkZHI7Ci0KLQotCWlmICghYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkgewotCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIEFSNTQxNl9FRVBST01fTUFHSUNfT0ZGU0VULAotCQkJCQkgJm1hZ2ljKSkgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlJlYWRpbmcgTWFnaWMgIyBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJIlJlYWQgTWFnaWMgPSAweCUwNFhcbiIsIG1hZ2ljKTsKLQotCQlpZiAobWFnaWMgIT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgewotCQkJbWFnaWMyID0gc3dhYjE2KG1hZ2ljKTsKLQotCQkJaWYgKG1hZ2ljMiA9PSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7Ci0JCQkJbmVlZF9zd2FwID0gdHJ1ZTsKLQkJCQllZXBkYXRhID0gKHUxNiAqKSAoJmFoLT5lZXByb20pOwotCi0JCQkJZm9yIChhZGRyID0gMDsgYWRkciA8IEVFUFJPTV80S19TSVpFOyBhZGRyKyspIHsKLQkJCQkJdGVtcCA9IHN3YWIxNigqZWVwZGF0YSk7Ci0JCQkJCSplZXBkYXRhID0gdGVtcDsKLQkJCQkJZWVwZGF0YSsrOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJCSJJbnZhbGlkIEVFUFJPTSBNYWdpYy4gIgotCQkJCQkiZW5kaWFubmVzcyBtaXNtYXRjaC5cbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0JfQotCi0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLCAibmVlZF9zd2FwID0gJXMuXG4iLAotCQluZWVkX3N3YXAgPyAiVHJ1ZSIgOiAiRmFsc2UiKTsKLQotCWlmIChuZWVkX3N3YXApCi0JCWVsID0gc3dhYjE2KGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci5sZW5ndGgpOwotCWVsc2UKLQkJZWwgPSBhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIubGVuZ3RoOwotCi0JaWYgKGVsID4gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrKSkKLQkJZWwgPSBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fNGspIC8gc2l6ZW9mKHUxNik7Ci0JZWxzZQotCQllbCA9IGVsIC8gc2l6ZW9mKHUxNik7Ci0KLQllZXBkYXRhID0gKHUxNiAqKSgmYWgtPmVlcHJvbSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZWw7IGkrKykKLQkJc3VtIF49ICplZXBkYXRhKys7Ci0KLQlpZiAobmVlZF9zd2FwKSB7Ci0JCXUzMiBpbnRlZ2VyOwotCQl1MTYgd29yZDsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiRUVQUk9NIEVuZGlhbm5lc3MgaXMgbm90IG5hdGl2ZS4uIENoYW5naW5nXG4iKTsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGgpOwotCQllZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbik7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXApOwotCQllZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwID0gd29yZDsKLQotCQlpbnRlZ2VyID0gc3dhYjMyKGVlcC0+bW9kYWxIZWFkZXIuYW50Q3RybENvbW1vbik7Ci0JCWVlcC0+bW9kYWxIZWFkZXIuYW50Q3RybENvbW1vbiA9IGludGVnZXI7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9FRVA0S19NQVhfQ0hBSU5TOyBpKyspIHsKLQkJCWludGVnZXIgPSBzd2FiMzIoZWVwLT5tb2RhbEhlYWRlci5hbnRDdHJsQ2hhaW5baV0pOwotCQkJZWVwLT5tb2RhbEhlYWRlci5hbnRDdHJsQ2hhaW5baV0gPSBpbnRlZ2VyOwotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewotCQkJd29yZCA9IHN3YWIxNihlZXAtPm1vZGFsSGVhZGVyLnNwdXJDaGFuc1tpXS5zcHVyQ2hhbik7Ci0JCQllZXAtPm1vZGFsSGVhZGVyLnNwdXJDaGFuc1tpXS5zcHVyQ2hhbiA9IHdvcmQ7Ci0JCX0KLQl9Ci0KLQlpZiAoc3VtICE9IDB4ZmZmZiB8fCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpICE9IEFSNTQxNl9FRVBfVkVSIHx8Ci0JICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAotCQkJIkJhZCBFRVBST00gY2hlY2tzdW0gMHgleCBvciByZXZpc2lvbiAweCUwNHhcbiIsCi0JCQlzdW0sIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLSN1bmRlZiBFRVBST01fNEtfU0laRQotfQotCi1zdGF0aWMgdTMyIGF0aDlrX2h3XzRrX2dldF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICBlbnVtIGVlcHJvbV9wYXJhbSBwYXJhbSkKLXsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7Ci0Jc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKLQotCXN3aXRjaCAocGFyYW0pIHsKLQljYXNlIEVFUF9ORlRIUkVTSF8yOgotCQlyZXR1cm4gcE1vZGFsLT5ub2lzZUZsb29yVGhyZXNoQ2hbMF07Ci0JY2FzZSBBUl9FRVBST01fTUFDKDApOgotCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzFdOwotCWNhc2UgQVJfRUVQUk9NX01BQygxKToKLQkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzJdIDw8IDggfCBwQmFzZS0+bWFjQWRkclszXTsKLQljYXNlIEFSX0VFUFJPTV9NQUMoMik6Ci0JCXJldHVybiBwQmFzZS0+bWFjQWRkcls0XSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbNV07Ci0JY2FzZSBFRVBfUkVHXzA6Ci0JCXJldHVybiBwQmFzZS0+cmVnRG1uWzBdOwotCWNhc2UgRUVQX1JFR18xOgotCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblsxXTsKLQljYXNlIEVFUF9PUF9DQVA6Ci0JCXJldHVybiBwQmFzZS0+ZGV2aWNlQ2FwOwotCWNhc2UgRUVQX09QX01PREU6Ci0JCXJldHVybiBwQmFzZS0+b3BDYXBGbGFnczsKLQljYXNlIEVFUF9SRl9TSUxFTlQ6Ci0JCXJldHVybiBwQmFzZS0+cmZTaWxlbnQ7Ci0JY2FzZSBFRVBfT0JfMjoKLQkJcmV0dXJuIHBNb2RhbC0+b2JfMDE7Ci0JY2FzZSBFRVBfREJfMjoKLQkJcmV0dXJuIHBNb2RhbC0+ZGIxXzAxOwotCWNhc2UgRUVQX01JTk9SX1JFVjoKLQkJcmV0dXJuIHBCYXNlLT52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSzsKLQljYXNlIEVFUF9UWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnR4TWFzazsKLQljYXNlIEVFUF9SWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnJ4TWFzazsKLQljYXNlIEVFUF9GUkFDX05fNUc6Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxXzRrICpwUmF3RGF0YVNldCwKLQkJCQl1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKLQkJCQl1MTYgdFBkR2Fpbk92ZXJsYXAsIGludDE2X3QgKnBNaW5DYWxQb3dlciwKLQkJCQl1MTYgKnBQZEdhaW5Cb3VuZGFyaWVzLCB1OCAqcFBEQURDVmFsdWVzLAotCQkJCXUxNiBudW1YcGRHYWlucykKLXsKLSNkZWZpbmUgVE1QX1ZBTF9WUERfVEFCTEUgXAotCSgodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSArIChzcyAtIG1heEluZGV4ICsgMSkgKiB2cGRTdGVwKSk7Ci0JaW50IGksIGosIGs7Ci0JaW50MTZfdCBzczsKLQl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwLCBudW1QaWVyczsKLQlzdGF0aWMgdTggdnBkVGFibGVMW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCi0JCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKLQlzdGF0aWMgdTggdnBkVGFibGVSW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCi0JCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKLQlzdGF0aWMgdTggdnBkVGFibGVJW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCi0JCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKLQotCXU4ICpwVnBkTCwgKnBWcGRSLCAqcFB3ckwsICpwUHdyUjsKLQl1OCBtaW5Qd3JUNFtBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXTsKLQl1OCBtYXhQd3JUNFtBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXTsKLQlpbnQxNl90IHZwZFN0ZXA7Ci0JaW50MTZfdCB0bXBWYWw7Ci0JdTE2IHNpemVDdXJyVnBkVGFibGUsIG1heEluZGV4LCB0Z3RJbmRleDsKLQlib29sIG1hdGNoOwotCWludDE2X3QgbWluRGVsdGEgPSAwOwotCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLSNkZWZpbmUgUERfR0FJTl9CT1VOREFSWV9ERUZBVUxUIDU4OwotCi0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCi0JZm9yIChudW1QaWVycyA9IDA7IG51bVBpZXJzIDwgYXZhaWxQaWVyczsgbnVtUGllcnMrKykgewotCQlpZiAoYkNoYW5zW251bVBpZXJzXSA9PSBBUjU0MTZfQkNIQU5fVU5VU0VEKQotCQkJYnJlYWs7Ci0JfQotCi0JbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCi0JCQkJCSh1OClGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCi0JCQkJCUlTX0NIQU5fMkdIWihjaGFuKSksIGJDaGFucywgbnVtUGllcnMsCi0JCQkJCSZpZHhMLCAmaWR4Uik7Ci0KLQlpZiAobWF0Y2gpIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJCW1pblB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzBdOwotCQkJbWF4UHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bNF07Ci0JCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCi0JCQkJCXBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXSwKLQkJCQkJcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldLAotCQkJCQlBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMsCi0JCQkJCXZwZFRhYmxlSVtpXSk7Ci0JCX0KLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgewotCQkJcFZwZEwgPSBwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV07Ci0JCQlwUHdyTCA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXTsKLQkJCXBWcGRSID0gcFJhd0RhdGFTZXRbaWR4Ul0udnBkUGRnW2ldOwotCQkJcFB3clIgPSBwUmF3RGF0YVNldFtpZHhSXS5wd3JQZGdbaV07Ci0KLQkJCW1pblB3clQ0W2ldID0gbWF4KHBQd3JMWzBdLCBwUHdyUlswXSk7Ci0KLQkJCW1heFB3clQ0W2ldID0KLQkJCQltaW4ocFB3ckxbQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTIC0gMV0sCi0JCQkJICAgIHBQd3JSW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUUyAtIDFdKTsKLQotCi0JCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCi0JCQkJCQlwUHdyTCwgcFZwZEwsCi0JCQkJCQlBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMsCi0JCQkJCQl2cGRUYWJsZUxbaV0pOwotCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAotCQkJCQkJcFB3clIsIHBWcGRSLAotCQkJCQkJQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTLAotCQkJCQkJdnBkVGFibGVSW2ldKTsKLQotCQkJZm9yIChqID0gMDsgaiA8PSAobWF4UHdyVDRbaV0gLSBtaW5Qd3JUNFtpXSkgLyAyOyBqKyspIHsKLQkJCQl2cGRUYWJsZUlbaV1bal0gPQotCQkJCQkodTgpKGF0aDlrX2h3X2ludGVycG9sYXRlKCh1MTYpCi0JCQkJCSAgICAgRlJFUTJGQklOKGNlbnRlcnMuCi0JCQkJCQkgICAgICAgc3ludGhfY2VudGVyLAotCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWgotCQkJCQkJICAgICAgIChjaGFuKSksCi0JCQkJCSAgICAgYkNoYW5zW2lkeExdLCBiQ2hhbnNbaWR4Ul0sCi0JCQkJCSAgICAgdnBkVGFibGVMW2ldW2pdLCB2cGRUYWJsZVJbaV1bal0pKTsKLQkJCX0KLQkJfQotCX0KLQotCSpwTWluQ2FsUG93ZXIgPSAoaW50MTZfdCkobWluUHdyVDRbMF0gLyAyKTsKLQotCWsgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJaWYgKGkgPT0gKG51bVhwZEdhaW5zIC0gMSkpCi0JCQlwUGRHYWluQm91bmRhcmllc1tpXSA9Ci0JCQkJKHUxNikobWF4UHdyVDRbaV0gLyAyKTsKLQkJZWxzZQotCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQotCQkJCSh1MTYpKChtYXhQd3JUNFtpXSArIG1pblB3clQ0W2kgKyAxXSkgLyA0KTsKLQotCQlwUGRHYWluQm91bmRhcmllc1tpXSA9Ci0JCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKLQotCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKLQkJCW1pbkRlbHRhID0gcFBkR2FpbkJvdW5kYXJpZXNbMF0gLSAyMzsKLQkJCXBQZEdhaW5Cb3VuZGFyaWVzWzBdID0gMjM7Ci0JCX0gZWxzZSB7Ci0JCQltaW5EZWx0YSA9IDA7Ci0JCX0KLQotCQlpZiAoaSA9PSAwKSB7Ci0JCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKLQkJCQlzcyA9IChpbnQxNl90KSgwIC0gKG1pblB3clQ0W2ldIC8gMikpOwotCQkJZWxzZQotCQkJCXNzID0gMDsKLQkJfSBlbHNlIHsKLQkJCXNzID0gKGludDE2X3QpKChwUGRHYWluQm91bmRhcmllc1tpIC0gMV0gLQotCQkJCQkobWluUHdyVDRbaV0gLyAyKSkgLQotCQkJCSAgICAgICB0UGRHYWluT3ZlcmxhcCArIDEgKyBtaW5EZWx0YSk7Ci0JCX0KLQkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMV0gLSB2cGRUYWJsZUlbaV1bMF0pOwotCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7Ci0KLQkJd2hpbGUgKChzcyA8IDApICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7Ci0JCQl0bXBWYWwgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzBdICsgc3MgKiB2cGRTdGVwKTsKLQkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsIDwgMCkgPyAwIDogdG1wVmFsKTsKLQkJCXNzKys7Ci0JCX0KLQotCQlzaXplQ3VyclZwZFRhYmxlID0gKHU4KSAoKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMiArIDEpOwotCQl0Z3RJbmRleCA9ICh1OCkocFBkR2FpbkJvdW5kYXJpZXNbaV0gKyB0UGRHYWluT3ZlcmxhcCAtCi0JCQkJKG1pblB3clQ0W2ldIC8gMikpOwotCQltYXhJbmRleCA9ICh0Z3RJbmRleCA8IHNpemVDdXJyVnBkVGFibGUpID8KLQkJCXRndEluZGV4IDogc2l6ZUN1cnJWcGRUYWJsZTsKLQotCQl3aGlsZSAoKHNzIDwgbWF4SW5kZXgpICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKQotCQkJcFBEQURDVmFsdWVzW2srK10gPSB2cGRUYWJsZUlbaV1bc3MrK107Ci0KLQkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDFdIC0KLQkJCQkgICAgdnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAyXSk7Ci0JCXZwZFN0ZXAgPSAoaW50MTZfdCkoKHZwZFN0ZXAgPCAxKSA/IDEgOiB2cGRTdGVwKTsKLQotCQlpZiAodGd0SW5kZXggPj0gbWF4SW5kZXgpIHsKLQkJCXdoaWxlICgoc3MgPD0gdGd0SW5kZXgpICYmCi0JCQkgICAgICAgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKLQkJCQl0bXBWYWwgPSAoaW50MTZfdCkgVE1QX1ZBTF9WUERfVEFCTEU7Ci0JCQkJcFBEQURDVmFsdWVzW2srK10gPSAodTgpKCh0bXBWYWwgPiAyNTUpID8KLQkJCQkJCQkgMjU1IDogdG1wVmFsKTsKLQkJCQlzcysrOwotCQkJfQotCQl9Ci0JfQotCi0Jd2hpbGUgKGkgPCBBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSykgewotCQlwUGRHYWluQm91bmRhcmllc1tpXSA9IFBEX0dBSU5fQk9VTkRBUllfREVGQVVMVDsKLQkJaSsrOwotCX0KLQotCXdoaWxlIChrIDwgQVI1NDE2X05VTV9QREFEQ19WQUxVRVMpIHsKLQkJcFBEQURDVmFsdWVzW2tdID0gcFBEQURDVmFsdWVzW2sgLSAxXTsKLQkJaysrOwotCX0KLQotCXJldHVybjsKLSN1bmRlZiBUTVBfVkFMX1ZQRF9UQUJMRQotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfNGtfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICBpbnQxNl90ICpwVHhQb3dlckluZGV4T2Zmc2V0KQotewotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDRrOwotCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayAqcFJhd0RhdGFzZXQ7Ci0JdTggKnBDYWxCQ2hhbnMgPSBOVUxMOwotCXUxNiBwZEdhaW5PdmVybGFwX3QyOwotCXN0YXRpYyB1OCBwZGFkY1ZhbHVlc1tBUjU0MTZfTlVNX1BEQURDX1ZBTFVFU107Ci0JdTE2IGdhaW5Cb3VuZGFyaWVzW0FSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLXTsKLQl1MTYgbnVtUGllcnMsIGksIGo7Ci0JaW50MTZfdCB0TWluQ2FsUG93ZXI7Ci0JdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7Ci0JdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU10gPSB7IDAsIDAgfTsKLQl1MzIgcmVnMzIsIHJlZ09mZnNldCwgcmVnQ2hhaW5PZmZzZXQ7Ci0KLQl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLnhwZEdhaW47Ci0KLQlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7Ci0JCXBkR2Fpbk92ZXJsYXBfdDIgPQotCQkJcEVlcERhdGEtPm1vZGFsSGVhZGVyLnBkR2Fpbk92ZXJsYXA7Ci0JfSBlbHNlIHsKLQkJcGRHYWluT3ZlcmxhcF90MiA9ICh1MTYpKE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFBDUkc1KSwKLQkJCQkJICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKSk7Ci0JfQotCi0JcENhbEJDaGFucyA9IHBFZXBEYXRhLT5jYWxGcmVxUGllcjJHOwotCW51bVBpZXJzID0gQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlM7Ci0KLQludW1YcGRHYWluID0gMDsKLQotCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X0VFUDRLX1BEX0dBSU5TX0lOX01BU0s7IGkrKykgewotCQlpZiAoKHhwZE1hc2sgPj4gKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgewotCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOUykKLQkJCQlicmVhazsKLQkJCXhwZEdhaW5WYWx1ZXNbbnVtWHBkR2Fpbl0gPQotCQkJCSh1MTYpKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSk7Ci0JCQludW1YcGRHYWluKys7Ci0JCX0KLQl9Ci0KLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOLAotCQkgICAgICAobnVtWHBkR2FpbiAtIDEpICYgMHgzKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMSwKLQkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCi0JCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLCAwKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCi0JCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCi0JCSAgICAoaSAhPSAwKSkgewotCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKLQkJfSBlbHNlCi0JCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7Ci0KLQkJaWYgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnR4TWFzayAmICgxIDw8IGkpKSB7Ci0JCQlwUmF3RGF0YXNldCA9IHBFZXBEYXRhLT5jYWxQaWVyRGF0YTJHW2ldOwotCi0JCQlhdGg5a19od19nZXRfNGtfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwgY2hhbiwKLQkJCQkJICAgIHBSYXdEYXRhc2V0LCBwQ2FsQkNoYW5zLAotCQkJCQkgICAgbnVtUGllcnMsIHBkR2Fpbk92ZXJsYXBfdDIsCi0JCQkJCSAgICAmdE1pbkNhbFBvd2VyLCBnYWluQm91bmRhcmllcywKLQkJCQkJICAgIHBkYWRjVmFsdWVzLCBudW1YcGRHYWluKTsKLQotCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKLQkJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKLQkJCQkJICBTTShwZEdhaW5PdmVybGFwX3QyLAotCQkJCQkgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMF0sCi0JCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMSkKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzFdLAotCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzIpCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1syXSwKLQkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8zKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbM10sCi0JCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80KSk7Ci0JCQl9Ci0KLQkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArIHJlZ0NoYWluT2Zmc2V0OwotCQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKLQkJCQlyZWczMiA9ICgocGRhZGNWYWx1ZXNbNCAqIGogKyAwXSAmIDB4RkYpIDw8IDApIHwKLQkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDFdICYgMHhGRikgPDwgOCkgfAotCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgMl0gJiAweEZGKSA8PCAxNil8Ci0JCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAzXSAmIDB4RkYpIDw8IDI0KTsKLQkJCQlSRUdfV1JJVEUoYWgsIHJlZ09mZnNldCwgcmVnMzIpOwotCi0JCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAotCQkJCQlpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAotCQkJCQlyZWczMik7Ci0JCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCQkiUERBREM6IENoYWluICVkIHwgIgotCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKLQkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCi0JCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgotCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8XG4iLAotCQkJCQlpLCA0ICogaiwgcGRhZGNWYWx1ZXNbNCAqIGpdLAotCQkJCQk0ICogaiArIDEsIHBkYWRjVmFsdWVzWzQgKiBqICsgMV0sCi0JCQkJCTQgKiBqICsgMiwgcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKLQkJCQkJNCAqIGogKyAzLAotCQkJCQlwZGFkY1ZhbHVlc1s0ICogaiArIDNdKTsKLQotCQkJCXJlZ09mZnNldCArPSA0OwotCQkJfQotCQl9Ci0JfQotCi0JKnBUeFBvd2VySW5kZXhPZmZzZXQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfNGtfcG93ZXJfcGVyX3JhdGVfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJCQkgaW50MTZfdCAqcmF0ZXNBcnJheSwKLQkJCQkJCSB1MTYgY2ZnQ3RsLAotCQkJCQkJIHUxNiBBbnRlbm5hUmVkdWN0aW9uLAotCQkJCQkJIHUxNiB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCQkJCSB1MTYgcG93ZXJMaW1pdCkKLXsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKLQl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7Ci0Jc3RhdGljIGNvbnN0IHUxNiB0cFNjYWxlUmVkdWN0aW9uVGFibGVbNV0gPQotCQl7IDAsIDMsIDYsIDksIEFSNTQxNl9NQVhfUkFURV9QT1dFUiB9OwotCi0JaW50IGk7Ci0JaW50MTZfdCB0d2ljZUxhcmdlc3RBbnRlbm5hOwotCXN0cnVjdCBjYWxfY3RsX2RhdGFfNGsgKnJlcDsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtLCB0YXJnZXRQb3dlckNjayA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwfQotCX07Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHRhcmdldFBvd2VyT2ZkbUV4dCA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwfSB9LCB0YXJnZXRQb3dlckNja0V4dCA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwIH0KLQl9OwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHRhcmdldFBvd2VySHQyMCwgdGFyZ2V0UG93ZXJIdDQwID0gewotCQkwLCB7MCwgMCwgMCwgMH0KLQl9OwotCXUxNiBzY2FsZWRQb3dlciA9IDAsIG1pbkN0bFBvd2VyLCBtYXhSZWdBbGxvd2VkUG93ZXI7Ci0JdTE2IGN0bE1vZGVzRm9yMTFnW10gPQotCQl7IENUTF8xMUIsIENUTF8xMUcsIENUTF8yR0hUMjAsIENUTF8xMUJfRVhULCBDVExfMTFHX0VYVCwKLQkJICBDVExfMkdIVDQwCi0JCX07Ci0JdTE2IG51bUN0bE1vZGVzLCAqcEN0bE1vZGUsIGN0bE1vZGUsIGZyZXE7Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCWludCB0eF9jaGFpbm1hc2s7Ci0JdTE2IHR3aWNlTWluRWRnZVBvd2VyOwotCi0JdHhfY2hhaW5tYXNrID0gYWgtPnR4Y2hhaW5tYXNrOwotCi0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCi0JdHdpY2VMYXJnZXN0QW50ZW5uYSA9IHBFZXBEYXRhLT5tb2RhbEhlYWRlci5hbnRlbm5hR2FpbkNoWzBdOwotCi0JdHdpY2VMYXJnZXN0QW50ZW5uYSA9IChpbnQxNl90KW1pbihBbnRlbm5hUmVkdWN0aW9uIC0KLQkJCQkJICAgdHdpY2VMYXJnZXN0QW50ZW5uYSwgMCk7Ci0KLQltYXhSZWdBbGxvd2VkUG93ZXIgPSB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciArIHR3aWNlTGFyZ2VzdEFudGVubmE7Ci0KLQlpZiAoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUgIT0gQVRIOUtfVFBfU0NBTEVfTUFYKSB7Ci0JCW1heFJlZ0FsbG93ZWRQb3dlciAtPQotCQkJKHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVsoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUpXSAqIDIpOwotCX0KLQotCXNjYWxlZFBvd2VyID0gbWluKHBvd2VyTGltaXQsIG1heFJlZ0FsbG93ZWRQb3dlcik7Ci0Jc2NhbGVkUG93ZXIgPSBtYXgoKHUxNikwLCBzY2FsZWRQb3dlcik7Ci0KLQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpIC0gU1VCX05VTV9DVExfTU9ERVNfQVRfMkdfNDA7Ci0JcEN0bE1vZGUgPSBjdGxNb2Rlc0ZvcjExZzsKLQotCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKLQkJCUFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJDY2ssIDQsIGZhbHNlKTsKLQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyRywKLQkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKLQkJCSZ0YXJnZXRQb3dlck9mZG0sIDQsIGZhbHNlKTsKLQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHSFQyMCwKLQkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKLQkJCSZ0YXJnZXRQb3dlckh0MjAsIDgsIGZhbHNlKTsKLQotCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKLQkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKTsKLQkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDQwLAotCQkJCUFSNTQxNl9OVU1fMkdfNDBfVEFSR0VUX1BPV0VSUywKLQkJCQkmdGFyZ2V0UG93ZXJIdDQwLCA4LCB0cnVlKTsKLQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKLQkJCQlBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlckNja0V4dCwgNCwgdHJ1ZSk7Ci0JCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyRywKLQkJCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCi0JCQkJJnRhcmdldFBvd2VyT2ZkbUV4dCwgNCwgdHJ1ZSk7Ci0JfQotCi0JZm9yIChjdGxNb2RlID0gMDsgY3RsTW9kZSA8IG51bUN0bE1vZGVzOyBjdGxNb2RlKyspIHsKLQkJYm9vbCBpc0h0NDBDdGxNb2RlID0gKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF81R0hUNDApIHx8Ci0JCQkocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzJHSFQ0MCk7Ci0JCWlmIChpc0h0NDBDdGxNb2RlKQotCQkJZnJlcSA9IGNlbnRlcnMuc3ludGhfY2VudGVyOwotCQllbHNlIGlmIChwQ3RsTW9kZVtjdGxNb2RlXSAmIEVYVF9BRERJVElWRSkKLQkJCWZyZXEgPSBjZW50ZXJzLmV4dF9jZW50ZXI7Ci0JCWVsc2UKLQkJCWZyZXEgPSBjZW50ZXJzLmN0bF9jZW50ZXI7Ci0KLQkJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgPT0gMTQgJiYKLQkJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPD0gMikKLQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCi0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSJMT09QLU1vZGUgY3RsTW9kZSAlZCA8ICVkLCBpc0h0NDBDdGxNb2RlICVkLCAiCi0JCQkiRVhUX0FERElUSVZFICVkXG4iLAotCQkJY3RsTW9kZSwgbnVtQ3RsTW9kZXMsIGlzSHQ0MEN0bE1vZGUsCi0JCQkocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpKTsKLQotCQlmb3IgKGkgPSAwOyAoaSA8IEFSNTQxNl9FRVA0S19OVU1fQ1RMUykgJiYKLQkJCQlwRWVwRGF0YS0+Y3RsSW5kZXhbaV07IGkrKykgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCSIgIExPT1AtQ3RsaWR4ICVkOiBjZmdDdGwgMHglMi4yeCAiCi0JCQkJInBDdGxNb2RlIDB4JTIuMnggY3RsSW5kZXggMHglMi4yeCAiCi0JCQkJImNoYW4gJWRcbiIsCi0JCQkJaSwgY2ZnQ3RsLCBwQ3RsTW9kZVtjdGxNb2RlXSwKLQkJCQlwRWVwRGF0YS0+Y3RsSW5kZXhbaV0sIGNoYW4tPmNoYW5uZWwpOwotCi0JCQlpZiAoKCgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pIHwKLQkJCSAgICAgIChwQ3RsTW9kZVtjdGxNb2RlXSAmIENUTF9NT0RFX00pKSA9PQotCQkJICAgICBwRWVwRGF0YS0+Y3RsSW5kZXhbaV0pIHx8Ci0JCQkgICAgKCgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pIHwKLQkJCSAgICAgIChwQ3RsTW9kZVtjdGxNb2RlXSAmIENUTF9NT0RFX00pKSA9PQotCQkJICAgICAoKHBFZXBEYXRhLT5jdGxJbmRleFtpXSAmIENUTF9NT0RFX00pIHwKLQkJCSAgICAgIFNEX05PX0NUTCkpKSB7Ci0JCQkJcmVwID0gJihwRWVwRGF0YS0+Y3RsRGF0YVtpXSk7Ci0KLQkJCQl0d2ljZU1pbkVkZ2VQb3dlciA9Ci0JCQkJCWF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcihmcmVxLAotCQkJCXJlcC0+Y3RsRWRnZXNbYXI1NDE2X2dldF9udHhjaGFpbnMKLQkJCQkJCSh0eF9jaGFpbm1hc2spIC0gMV0sCi0JCQkJSVNfQ0hBTl8yR0haKGNoYW4pLAotCQkJCUFSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFUyk7Ci0KLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkJCSIgICAgTUFUQ0gtRUVfSURYICVkOiBjaCAlZCBpczIgJWQgIgotCQkJCQkiMnhNaW5FZGdlICVkIGNoYWlubWFzayAlZCBjaGFpbnMgJWRcbiIsCi0JCQkJCWksIGZyZXEsIElTX0NIQU5fMkdIWihjaGFuKSwKLQkJCQkJdHdpY2VNaW5FZGdlUG93ZXIsIHR4X2NoYWlubWFzaywKLQkJCQkJYXI1NDE2X2dldF9udHhjaGFpbnMKLQkJCQkJKHR4X2NoYWlubWFzaykpOwotCQkJCWlmICgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pID09IFNEX05PX0NUTCkgewotCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9Ci0JCQkJCQltaW4odHdpY2VNYXhFZGdlUG93ZXIsCi0JCQkJCQkgICAgdHdpY2VNaW5FZGdlUG93ZXIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gdHdpY2VNaW5FZGdlUG93ZXI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCW1pbkN0bFBvd2VyID0gKHU4KW1pbih0d2ljZU1heEVkZ2VQb3dlciwgc2NhbGVkUG93ZXIpOwotCi0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSIgICAgU0VMLU1pbiBjdGxNb2RlICVkIHBDdGxNb2RlICVkICIKLQkJCSIyeE1heEVkZ2UgJWQgc1AgJWQgbWluQ3RsUHdyICVkXG4iLAotCQkJY3RsTW9kZSwgcEN0bE1vZGVbY3RsTW9kZV0sIHR3aWNlTWF4RWRnZVBvd2VyLAotCQkJc2NhbGVkUG93ZXIsIG1pbkN0bFBvd2VyKTsKLQotCQlzd2l0Y2ggKHBDdGxNb2RlW2N0bE1vZGVdKSB7Ci0JCWNhc2UgQ1RMXzExQjoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyQ2NrLnRQb3cyeCk7Ci0JCQkJCWkrKykgewotCQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSA9Ci0JCQkJCW1pbigodTE2KXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIENUTF8xMUc6Ci0JCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlck9mZG0udFBvdzJ4KTsKLQkJCQkJaSsrKSB7Ci0JCQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSA9Ci0JCQkJCW1pbigodTE2KXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0sCi0JCQkJCSAgICBtaW5DdGxQb3dlcik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBDVExfMkdIVDIwOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7Ci0JCQkJCWkrKykgewotCQkJCXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0gPQotCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzExQl9FWFQ6Ci0JCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKLQkJCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdLAotCQkJCQltaW5DdGxQb3dlcik7Ci0JCQlicmVhazsKLQkJY2FzZSBDVExfMTFHX0VYVDoKLQkJCXRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKLQkJCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSwKLQkJCQkJbWluQ3RsUG93ZXIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzJHSFQ0MDoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOwotCQkJCQlpKyspIHsKLQkJCQl0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyYXRlc0FycmF5W3JhdGU2bWJdID0gcmF0ZXNBcnJheVtyYXRlOW1iXSA9IHJhdGVzQXJyYXlbcmF0ZTEybWJdID0KLQkJcmF0ZXNBcnJheVtyYXRlMThtYl0gPSByYXRlc0FycmF5W3JhdGUyNG1iXSA9Ci0JCXRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07Ci0JcmF0ZXNBcnJheVtyYXRlMzZtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzFdOwotCXJhdGVzQXJyYXlbcmF0ZTQ4bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsyXTsKLQlyYXRlc0FycmF5W3JhdGU1NG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbM107Ci0JcmF0ZXNBcnJheVtyYXRlWHJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQyMC50UG93MngpOyBpKyspCi0JCXJhdGVzQXJyYXlbcmF0ZUh0MjBfMCArIGldID0gdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXTsKLQotCXJhdGVzQXJyYXlbcmF0ZTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFswXTsKLQlyYXRlc0FycmF5W3JhdGUyc10gPSByYXRlc0FycmF5W3JhdGUybF0gPSB0YXJnZXRQb3dlckNjay50UG93MnhbMV07Ci0JcmF0ZXNBcnJheVtyYXRlNV81c10gPSByYXRlc0FycmF5W3JhdGU1XzVsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFsyXTsKLQlyYXRlc0FycmF5W3JhdGUxMXNdID0gcmF0ZXNBcnJheVtyYXRlMTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFszXTsKLQotCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7IGkrKykgewotCQkJcmF0ZXNBcnJheVtyYXRlSHQ0MF8wICsgaV0gPQotCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV07Ci0JCX0KLQkJcmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOwotCQlyYXRlc0FycmF5W3JhdGVEdXBDY2tdID0gdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFswXTsKLQkJcmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0gPSB0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdOwotCQlyYXRlc0FycmF5W3JhdGVFeHRDY2tdID0gdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfNGtfc2V0X3R4cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgdTE2IGNmZ0N0bCwKLQkJCQkgICB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkJICAgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkJICAgdTggcG93ZXJMaW1pdCkKLXsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKLQlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJnBFZXBEYXRhLT5tb2RhbEhlYWRlcjsKLQlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOwotCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKLQl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYyA9IDI7Ci0JaW50IGk7Ci0KLQltZW1zZXQocmF0ZXNBcnJheSwgMCwgc2l6ZW9mKHJhdGVzQXJyYXkpKTsKLQotCWlmICgocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKLQkJaHQ0MFBvd2VySW5jRm9yUGRhZGMgPSBwTW9kYWwtPmh0NDBQb3dlckluY0ZvclBkYWRjOwotCX0KLQotCWF0aDlrX2h3X3NldF80a19wb3dlcl9wZXJfcmF0ZV90YWJsZShhaCwgY2hhbiwKLQkJCQkJICAgICAgICZyYXRlc0FycmF5WzBdLCBjZmdDdGwsCi0JCQkJCSAgICAgICB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkJCSAgICAgICB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCQkJICAgICAgIHBvd2VyTGltaXQpOwotCi0JYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX2NhbF90YWJsZShhaCwgY2hhbiwgJnR4UG93ZXJJbmRleE9mZnNldCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlc0FycmF5KTsgaSsrKSB7Ci0JCXJhdGVzQXJyYXlbaV0gPQkoaW50MTZfdCkodHhQb3dlckluZGV4T2Zmc2V0ICsgcmF0ZXNBcnJheVtpXSk7Ci0JCWlmIChyYXRlc0FycmF5W2ldID4gQVI1NDE2X01BWF9SQVRFX1BPV0VSKQotCQkJcmF0ZXNBcnJheVtpXSA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQl9Ci0KLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQXI1NDE2UmF0ZVNpemU7IGkrKykKLQkJCXJhdGVzQXJyYXlbaV0gLT0gQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOwotCX0KLQotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTJtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTltYl0sIDgpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNm1iXSwgMCkpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUyLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1NG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNDhtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTM2bWJdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTI0bWJdLCAwKSk7Ci0KLQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUzLAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMnNdLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMmxdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlWHJdLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxbF0sIDApKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTQsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMXNdLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFsXSwgMTYpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNXNdLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVsXSwgMCkpOwotCX0KLQotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU1LAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzNdLCAyNCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzJdLCAxNikKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzFdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMF0sIDApKTsKLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNiwKLQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF83XSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF82XSwgMTYpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF81XSwgOCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzRdLCAwKSk7Ci0KLQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8zXSArCi0JCQkJICAgICAgIGh0NDBQb3dlckluY0ZvclBkYWRjLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMTYpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMV0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMF0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDApKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTgsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzddICsKLQkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzZdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF81XSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF80XSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOwotCi0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRDY2tdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKLQl9Ci0KLQlpID0gcmF0ZTZtYjsKLQotCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCi0JCWkgPSByYXRlSHQ0MF8wOwotCWVsc2UgaWYgKElTX0NIQU5fSFQyMChjaGFuKSkKLQkJaSA9IHJhdGVIdDIwXzA7Ci0KLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKLQkJYWgtPnJlZ3VsYXRvcnkubWF4X3Bvd2VyX2xldmVsID0KLQkJCXJhdGVzQXJyYXlbaV0gKyBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAqIDI7Ci0JZWxzZQotCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgPSByYXRlc0FycmF5W2ldOwotCi19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3XzRrX3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWw7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDRrOwotCXU4IGJpYXNsZXZlbDsKLQotCWlmIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl85MTYwKQotCQlyZXR1cm47Ci0KLQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcpCi0JCXJldHVybjsKLQotCXBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwotCi0JaWYgKHBNb2RhbC0+eHBhQmlhc0x2bCAhPSAweGZmKSB7Ci0JCWJpYXNsZXZlbCA9IHBNb2RhbC0+eHBhQmlhc0x2bDsKLQkJSU5JX1JBKCZhaC0+aW5pQWRkYWMsIDcsIDEpID0KLQkJICAoSU5JX1JBKCZhaC0+aW5pQWRkYWMsIDcsIDEpICYgKH4weDE4KSkgfCBiaWFzbGV2ZWwgPDwgMzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3XzRrX3NldF9nYWluKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSBzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsLAotCQkJCSBzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwLAotCQkJCSB1OCB0eFJ4QXR0ZW5Mb2NhbCwgaW50IHJlZ0NoYWluT2Zmc2V0KQotewotCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DSEFJTl8wICsgcmVnQ2hhaW5PZmZzZXQsCi0JCSAgcE1vZGFsLT5hbnRDdHJsQ2hhaW5bMF0pOwotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsgcmVnQ2hhaW5PZmZzZXQsCi0JCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsgcmVnQ2hhaW5PZmZzZXQpICYKLQkJICAgfihBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRiB8Ci0JCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpKSB8Ci0JCSAgU00ocE1vZGFsLT5pcUNhbElDaFswXSwgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKLQkJICBTTShwTW9kYWwtPmlxQ2FsUUNoWzBdLCBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRikpOwotCi0JaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKLQkJdHhSeEF0dGVuTG9jYWwgPSBwTW9kYWwtPnR4UnhBdHRlbkNoWzBdOwotCi0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKLQkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9NQVJHSU4sIHBNb2RhbC0+YnN3TWFyZ2luWzBdKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX0RCLCBwTW9kYWwtPmJzd0F0dGVuWzBdKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX01BUkdJTiwKLQkJCSAgICAgIHBNb2RhbC0+eGF0dGVuMk1hcmdpblswXSk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKLQkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9EQiwgcE1vZGFsLT54YXR0ZW4yRGJbMF0pOwotCX0KLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKLQkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9BVFRFTiwgdHhSeEF0dGVuTG9jYWwpOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKLQkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9NQVJHSU4sIHBNb2RhbC0+cnhUeE1hcmdpbkNoWzBdKTsKLQotCWlmIChBUl9TUkVWXzkyODVfMTEoYWgpKQotCQlSRUdfV1JJVEUoYWgsIEFSOTI4NV9BTl9UT1A0LCAoQVI5Mjg1X0FOX1RPUDRfREVGQVVMVCB8IDB4MTQpKTsKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfNGtfc2V0X2JvYXJkX3ZhbHVlcyhzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWw7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDRrOwotCXU4IHR4UnhBdHRlbkxvY2FsOwotCXU4IG9iWzVdLCBkYjFbNV0sIGRiMls1XTsKLQl1OCBhbnRfZGl2X2NvbnRyb2wxLCBhbnRfZGl2X2NvbnRyb2wyOwotCXUzMiByZWdWYWw7Ci0KLQlwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKLQl0eFJ4QXR0ZW5Mb2NhbCA9IDIzOwotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NPTSwKLQkJICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhhaCwgY2hhbikpOwotCi0JLyogU2luZ2xlIGNoYWluIGZvciA0SyBFRVBST00qLwotCWF0aDlrX2h3XzRrX3NldF9nYWluKGFoLCBwTW9kYWwsIGVlcCwgdHhSeEF0dGVuTG9jYWwsIDApOwotCi0JLyogSW5pdGlhbGl6ZSBBbnQgRGl2ZXJzaXR5IHNldHRpbmdzIGZyb20gRUVQUk9NICovCi0JaWYgKHBNb2RhbC0+dmVyc2lvbiA9PSAzKSB7Ci0JCWFudF9kaXZfY29udHJvbDEgPSAoKHBNb2RhbC0+b2JfMjM0ID4+IDEyKSAmIDB4Zik7Ci0JCWFudF9kaXZfY29udHJvbDIgPSAoKHBNb2RhbC0+ZGIxXzIzNCA+PiAxMikgJiAweGYpOwotCQlyZWdWYWwgPSBSRUdfUkVBRChhaCwgMHg5OWFjKTsKLQkJcmVnVmFsICY9ICh+KDB4N2YwMDAwMDApKTsKLQkJcmVnVmFsIHw9ICgoYW50X2Rpdl9jb250cm9sMSAmIDB4MSkgPDwgMjQpOwotCQlyZWdWYWwgfD0gKCgoYW50X2Rpdl9jb250cm9sMSA+PiAxKSAmIDB4MSkgPDwgMjkpOwotCQlyZWdWYWwgfD0gKCgoYW50X2Rpdl9jb250cm9sMSA+PiAyKSAmIDB4MSkgPDwgMzApOwotCQlyZWdWYWwgfD0gKChhbnRfZGl2X2NvbnRyb2wyICYgMHgzKSA8PCAyNSk7Ci0JCXJlZ1ZhbCB8PSAoKChhbnRfZGl2X2NvbnRyb2wyID4+IDIpICYgMHgzKSA8PCAyNyk7Ci0JCVJFR19XUklURShhaCwgMHg5OWFjLCByZWdWYWwpOwotCQlyZWdWYWwgPSBSRUdfUkVBRChhaCwgMHg5OWFjKTsKLQkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4YTIwOCk7Ci0JCXJlZ1ZhbCAmPSAofigweDEgPDwgMTMpKTsKLQkJcmVnVmFsIHw9ICgoKGFudF9kaXZfY29udHJvbDEgPj4gMykgJiAweDEpIDw8IDEzKTsKLQkJUkVHX1dSSVRFKGFoLCAweGEyMDgsIHJlZ1ZhbCk7Ci0JCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCAweGEyMDgpOwotCX0KLQotCWlmIChwTW9kYWwtPnZlcnNpb24gPj0gMikgewotCQlvYlswXSA9IChwTW9kYWwtPm9iXzAxICYgMHhmKTsKLQkJb2JbMV0gPSAocE1vZGFsLT5vYl8wMSA+PiA0KSAmIDB4ZjsKLQkJb2JbMl0gPSAocE1vZGFsLT5vYl8yMzQgJiAweGYpOwotCQlvYlszXSA9ICgocE1vZGFsLT5vYl8yMzQgPj4gNCkgJiAweGYpOwotCQlvYls0XSA9ICgocE1vZGFsLT5vYl8yMzQgPj4gOCkgJiAweGYpOwotCi0JCWRiMVswXSA9IChwTW9kYWwtPmRiMV8wMSAmIDB4Zik7Ci0JCWRiMVsxXSA9ICgocE1vZGFsLT5kYjFfMDEgPj4gNCkgJiAweGYpOwotCQlkYjFbMl0gPSAocE1vZGFsLT5kYjFfMjM0ICYgMHhmKTsKLQkJZGIxWzNdID0gKChwTW9kYWwtPmRiMV8yMzQgPj4gNCkgJiAweGYpOwotCQlkYjFbNF0gPSAoKHBNb2RhbC0+ZGIxXzIzNCA+PiA4KSAmIDB4Zik7Ci0KLQkJZGIyWzBdID0gKHBNb2RhbC0+ZGIyXzAxICYgMHhmKTsKLQkJZGIyWzFdID0gKChwTW9kYWwtPmRiMl8wMSA+PiA0KSAmIDB4Zik7Ci0JCWRiMlsyXSA9IChwTW9kYWwtPmRiMl8yMzQgJiAweGYpOwotCQlkYjJbM10gPSAoKHBNb2RhbC0+ZGIyXzIzNCA+PiA0KSAmIDB4Zik7Ci0JCWRiMls0XSA9ICgocE1vZGFsLT5kYjJfMjM0ID4+IDgpICYgMHhmKTsKLQotCX0gZWxzZSBpZiAocE1vZGFsLT52ZXJzaW9uID09IDEpIHsKLQkJb2JbMF0gPSAocE1vZGFsLT5vYl8wMSAmIDB4Zik7Ci0JCW9iWzFdID0gb2JbMl0gPSBvYlszXSA9IG9iWzRdID0gKHBNb2RhbC0+b2JfMDEgPj4gNCkgJiAweGY7Ci0JCWRiMVswXSA9IChwTW9kYWwtPmRiMV8wMSAmIDB4Zik7Ci0JCWRiMVsxXSA9IGRiMVsyXSA9IGRiMVszXSA9Ci0JCQlkYjFbNF0gPSAoKHBNb2RhbC0+ZGIxXzAxID4+IDQpICYgMHhmKTsKLQkJZGIyWzBdID0gKHBNb2RhbC0+ZGIyXzAxICYgMHhmKTsKLQkJZGIyWzFdID0gZGIyWzJdID0gZGIyWzNdID0KLQkJCWRiMls0XSA9ICgocE1vZGFsLT5kYjJfMDEgPj4gNCkgJiAweGYpOwotCX0gZWxzZSB7Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0JCQlvYltpXSA9IHBNb2RhbC0+b2JfMDE7Ci0JCQlkYjFbaV0gPSBwTW9kYWwtPmRiMV8wMTsKLQkJCWRiMltpXSA9IHBNb2RhbC0+ZGIxXzAxOwotCQl9Ci0JfQotCi0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX09CXzAsIEFSOTI4NV9BTl9SRjJHM19PQl8wX1MsIG9iWzBdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCi0JCQlBUjkyODVfQU5fUkYyRzNfT0JfMSwgQVI5Mjg1X0FOX1JGMkczX09CXzFfUywgb2JbMV0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKLQkJCUFSOTI4NV9BTl9SRjJHM19PQl8yLCBBUjkyODVfQU5fUkYyRzNfT0JfMl9TLCBvYlsyXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX09CXzMsIEFSOTI4NV9BTl9SRjJHM19PQl8zX1MsIG9iWzNdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCi0JCQlBUjkyODVfQU5fUkYyRzNfT0JfNCwgQVI5Mjg1X0FOX1JGMkczX09CXzRfUywgb2JbNF0pOwotCi0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX0RCMV8wLCBBUjkyODVfQU5fUkYyRzNfREIxXzBfUywgZGIxWzBdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCi0JCQlBUjkyODVfQU5fUkYyRzNfREIxXzEsIEFSOTI4NV9BTl9SRjJHM19EQjFfMV9TLCBkYjFbMV0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKLQkJCUFSOTI4NV9BTl9SRjJHM19EQjFfMiwgQVI5Mjg1X0FOX1JGMkczX0RCMV8yX1MsIGRiMVsyXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAotCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMV8zLCBBUjkyODVfQU5fUkYyRzRfREIxXzNfUywgZGIxWzNdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCi0JCQlBUjkyODVfQU5fUkYyRzRfREIxXzQsIEFSOTI4NV9BTl9SRjJHNF9EQjFfNF9TLCBkYjFbNF0pOwotCi0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAotCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl8wLCBBUjkyODVfQU5fUkYyRzRfREIyXzBfUywgZGIyWzBdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCi0JCQlBUjkyODVfQU5fUkYyRzRfREIyXzEsIEFSOTI4NV9BTl9SRjJHNF9EQjJfMV9TLCBkYjJbMV0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKLQkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfMiwgQVI5Mjg1X0FOX1JGMkc0X0RCMl8yX1MsIGRiMlsyXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAotCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl8zLCBBUjkyODVfQU5fUkYyRzRfREIyXzNfUywgZGIyWzNdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCi0JCQlBUjkyODVfQU5fUkYyRzRfREIyXzQsIEFSOTI4NV9BTl9SRjJHNF9EQjJfNF9TLCBkYjJbNF0pOwotCi0KLQlpZiAoQVJfU1JFVl85Mjg1XzExKGFoKSkKLQkJUkVHX1dSSVRFKGFoLCBBUjkyODVfQU5fVE9QNCwgQVI5Mjg1X0FOX1RPUDRfREVGQVVMVCk7Ci0KLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0VUVExJTkcsIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCi0JCSAgICAgIHBNb2RhbC0+c3dpdGNoU2V0dGxpbmcpOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9ERVNJUkVEX1NaLCBBUl9QSFlfREVTSVJFRF9TWl9BREMsCi0JCSAgICAgIHBNb2RhbC0+YWRjRGVzaXJlZFNpemUpOwotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfUkZfQ1RMNCwKLQkJICBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFBX09GRikgfAotCQkgIFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUJfT0ZGKSB8Ci0JCSAgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQV9PTikgIHwKLQkJICBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLCBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFCX09OKSk7Ci0KLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMywgQVJfUEhZX1RYX0VORF9UT19BMl9SWF9PTiwKLQkJICAgICAgcE1vZGFsLT50eEVuZFRvUnhPbik7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NDQSwgQVI5MjgwX1BIWV9DQ0FfVEhSRVNINjIsCi0JCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9FWFRfQ0NBMCwgQVJfUEhZX0VYVF9DQ0EwX1RIUkVTSDYyLAotCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKLQotCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCQkJCQkJQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgewotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMiwgQVJfUEhZX1RYX0VORF9EQVRBX1NUQVJULAotCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9EYXRhU3RhcnQpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMiwgQVJfUEhZX1RYX0VORF9QQV9PTiwKLQkJCSAgICAgIHBNb2RhbC0+dHhGcmFtZVRvUGFPbik7Ci0JfQotCi0JaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JCQkJCQlBUjU0MTZfRUVQX01JTk9SX1ZFUl8zKSB7Ci0JCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCi0JCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0VUVExJTkcsCi0JCQkJICAgICAgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKLQkJCQkgICAgICBwTW9kYWwtPnN3U2V0dGxlSHQ0MCk7Ci0JfQotfQotCi1zdGF0aWMgdTE2IGF0aDlrX2h3XzRrX2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKLQlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7Ci0KLQlyZXR1cm4gcE1vZGFsLT5hbnRDdHJsQ29tbW9uICYgMHhGRkZGOwotfQotCi1zdGF0aWMgdTggYXRoOWtfaHdfNGtfZ2V0X251bV9hbnRfY29uZmlnKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCQkgZW51bSBpZWVlODAyMTFfYmFuZCBmcmVxX2JhbmQpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1MTYgYXRoOWtfaHdfNGtfZ2V0X3NwdXJfY2hhbm5lbChzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KQotewotI2RlZmluZSBFRVBfTUFQNEtfU1BVUkNIQU4gXAotCShhaC0+ZWVwcm9tLm1hcDRrLm1vZGFsSGVhZGVyLnNwdXJDaGFuc1tpXS5zcHVyQ2hhbikKLQotCXUxNiBzcHVyX3ZhbCA9IEFSX05PX1NQVVI7Ci0KLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCi0JCSJHZXR0aW5nIHNwdXIgaWR4ICVkIGlzMkdoei4gJWQgdmFsICV4XG4iLAotCQlpLCBpczJHSHosIGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel0pOwotCi0Jc3dpdGNoIChhaC0+Y29uZmlnLnNwdXJtb2RlKSB7Ci0JY2FzZSBTUFVSX0RJU0FCTEU6Ci0JCWJyZWFrOwotCWNhc2UgU1BVUl9FTkFCTEVfSU9DVEw6Ci0JCXNwdXJfdmFsID0gYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XTsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAotCQkJIkdldHRpbmcgc3B1ciB2YWwgZnJvbSBuZXcgbG9jLiAlZFxuIiwgc3B1cl92YWwpOwotCQlicmVhazsKLQljYXNlIFNQVVJfRU5BQkxFX0VFUFJPTToKLQkJc3B1cl92YWwgPSBFRVBfTUFQNEtfU1BVUkNIQU47Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBzcHVyX3ZhbDsKLQotI3VuZGVmIEVFUF9NQVA0S19TUFVSQ0hBTgotfQotCi1zdGF0aWMgc3RydWN0IGVlcHJvbV9vcHMgZWVwXzRrX29wcyA9IHsKLQkuY2hlY2tfZWVwcm9tCQk9IGF0aDlrX2h3XzRrX2NoZWNrX2VlcHJvbSwKLQkuZ2V0X2VlcHJvbQkJPSBhdGg5a19od180a19nZXRfZWVwcm9tLAotCS5maWxsX2VlcHJvbQkJPSBhdGg5a19od180a19maWxsX2VlcHJvbSwKLQkuZ2V0X2VlcHJvbV92ZXIJCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV92ZXIsCi0JLmdldF9lZXByb21fcmV2CQk9IGF0aDlrX2h3XzRrX2dldF9lZXByb21fcmV2LAotCS5nZXRfbnVtX2FudF9jb25maWcJPSBhdGg5a19od180a19nZXRfbnVtX2FudF9jb25maWcsCi0JLmdldF9lZXByb21fYW50ZW5uYV9jZmcJPSBhdGg5a19od180a19nZXRfZWVwcm9tX2FudGVubmFfY2ZnLAotCS5zZXRfYm9hcmRfdmFsdWVzCT0gYXRoOWtfaHdfNGtfc2V0X2JvYXJkX3ZhbHVlcywKLQkuc2V0X2FkZGFjCQk9IGF0aDlrX2h3XzRrX3NldF9hZGRhYywKLQkuc2V0X3R4cG93ZXIJCT0gYXRoOWtfaHdfNGtfc2V0X3R4cG93ZXIsCi0JLmdldF9zcHVyX2NoYW5uZWwJPSBhdGg5a19od180a19nZXRfc3B1cl9jaGFubmVsCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRUVQUk9NIE9wZXJhdGlvbnMgZm9yIG5vbi00SyAoRGVmYXVsdCkgY2FyZHMgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fdmVyKHN0cnVjdCBhdGhfaHcgKmFoKQotewotCXJldHVybiAoKGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIudmVyc2lvbiA+PiAxMikgJiAweEYpOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX3JldihzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLQlyZXR1cm4gKChhaC0+ZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLnZlcnNpb24pICYgMHhGRkYpOwotfQotCi1zdGF0aWMgYm9vbCBhdGg5a19od19kZWZfZmlsbF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgpCi17Ci0jZGVmaW5lIFNJWkVfRUVQUk9NX0RFRiAoc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikgLyBzaXplb2YodTE2KSkKLQl1MTYgKmVlcF9kYXRhID0gKHUxNiAqKSZhaC0+ZWVwcm9tLmRlZjsKLQlpbnQgYWRkciwgYXI1NDE2X2VlcF9zdGFydF9sb2MgPSAweDEwMDsKLQotCWZvciAoYWRkciA9IDA7IGFkZHIgPCBTSVpFX0VFUFJPTV9ERUY7IGFkZHIrKykgewotCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIGFkZHIgKyBhcjU0MTZfZWVwX3N0YXJ0X2xvYywKLQkJCQkJIGVlcF9kYXRhKSkgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlVuYWJsZSB0byByZWFkIGVlcHJvbSByZWdpb25cbiIpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCWVlcF9kYXRhKys7Ci0JfQotCXJldHVybiB0cnVlOwotI3VuZGVmIFNJWkVfRUVQUk9NX0RFRgotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2RlZl9jaGVja19lZXByb20oc3RydWN0IGF0aF9odyAqYWgpCi17Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPQotCQkoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICopICZhaC0+ZWVwcm9tLmRlZjsKLQl1MTYgKmVlcGRhdGEsIHRlbXAsIG1hZ2ljLCBtYWdpYzI7Ci0JdTMyIHN1bSA9IDAsIGVsOwotCWJvb2wgbmVlZF9zd2FwID0gZmFsc2U7Ci0JaW50IGksIGFkZHIsIHNpemU7Ci0KLQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIEFSNTQxNl9FRVBST01fTUFHSUNfT0ZGU0VULCAmbWFnaWMpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLCAiUmVhZGluZyBNYWdpYyAjIGZhaWxlZFxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoIWF0aDlrX2h3X3VzZV9mbGFzaChhaCkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJIlJlYWQgTWFnaWMgPSAweCUwNFhcbiIsIG1hZ2ljKTsKLQotCQlpZiAobWFnaWMgIT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgewotCQkJbWFnaWMyID0gc3dhYjE2KG1hZ2ljKTsKLQotCQkJaWYgKG1hZ2ljMiA9PSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7Ci0JCQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpOwotCQkJCW5lZWRfc3dhcCA9IHRydWU7Ci0JCQkJZWVwZGF0YSA9ICh1MTYgKikgKCZhaC0+ZWVwcm9tKTsKLQotCQkJCWZvciAoYWRkciA9IDA7IGFkZHIgPCBzaXplIC8gc2l6ZW9mKHUxNik7IGFkZHIrKykgewotCQkJCQl0ZW1wID0gc3dhYjE2KCplZXBkYXRhKTsKLQkJCQkJKmVlcGRhdGEgPSB0ZW1wOwotCQkJCQllZXBkYXRhKys7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKLQkJCQkJIkludmFsaWQgRUVQUk9NIE1hZ2ljLiAiCi0JCQkJCSJFbmRpYW5uZXNzIG1pc21hdGNoLlxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sICJuZWVkX3N3YXAgPSAlcy5cbiIsCi0JCW5lZWRfc3dhcCA/ICJUcnVlIiA6ICJGYWxzZSIpOwotCi0JaWYgKG5lZWRfc3dhcCkKLQkJZWwgPSBzd2FiMTYoYWgtPmVlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci5sZW5ndGgpOwotCWVsc2UKLQkJZWwgPSBhaC0+ZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLmxlbmd0aDsKLQotCWlmIChlbCA+IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpKQotCQllbCA9IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpIC8gc2l6ZW9mKHUxNik7Ci0JZWxzZQotCQllbCA9IGVsIC8gc2l6ZW9mKHUxNik7Ci0KLQllZXBkYXRhID0gKHUxNiAqKSgmYWgtPmVlcHJvbSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZWw7IGkrKykKLQkJc3VtIF49ICplZXBkYXRhKys7Ci0KLQlpZiAobmVlZF9zd2FwKSB7Ci0JCXUzMiBpbnRlZ2VyLCBqOwotCQl1MTYgd29yZDsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiRUVQUk9NIEVuZGlhbm5lc3MgaXMgbm90IG5hdGl2ZS4uIENoYW5naW5nLlxuIik7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLmxlbmd0aCA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuY2hlY2tzdW0pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIuY2hlY2tzdW0gPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblswXSA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblsxXSA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIucmZTaWxlbnQpOwotCQllZXAtPmJhc2VFZXBIZWFkZXIucmZTaWxlbnQgPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmJsdWVUb290aE9wdGlvbnMpOwotCQllZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLmRldmljZUNhcCA9IHdvcmQ7Ci0KLQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoZWVwLT5tb2RhbEhlYWRlcik7IGorKykgewotCQkJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9Ci0JCQkJJmVlcC0+bW9kYWxIZWFkZXJbal07Ci0JCQlpbnRlZ2VyID0gc3dhYjMyKHBNb2RhbC0+YW50Q3RybENvbW1vbik7Ci0JCQlwTW9kYWwtPmFudEN0cmxDb21tb24gPSBpbnRlZ2VyOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewotCQkJCWludGVnZXIgPSBzd2FiMzIocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0pOwotCQkJCXBNb2RhbC0+YW50Q3RybENoYWluW2ldID0gaW50ZWdlcjsKLQkJCX0KLQotCQkJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewotCQkJCXdvcmQgPSBzd2FiMTYocE1vZGFsLT5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pOwotCQkJCXBNb2RhbC0+c3B1ckNoYW5zW2ldLnNwdXJDaGFuID0gd29yZDsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChzdW0gIT0gMHhmZmZmIHx8IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgIT0gQVI1NDE2X0VFUF9WRVIgfHwKLQkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTk9fQkFDS19WRVIpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkiQmFkIEVFUFJPTSBjaGVja3N1bSAweCV4IG9yIHJldmlzaW9uIDB4JTA0eFxuIiwKLQkJCXN1bSwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSAgIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQotewotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOwotCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPSBlZXAtPm1vZGFsSGVhZGVyOwotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKLQotCXN3aXRjaCAocGFyYW0pIHsKLQljYXNlIEVFUF9ORlRIUkVTSF81OgotCQlyZXR1cm4gcE1vZGFsWzBdLm5vaXNlRmxvb3JUaHJlc2hDaFswXTsKLQljYXNlIEVFUF9ORlRIUkVTSF8yOgotCQlyZXR1cm4gcE1vZGFsWzFdLm5vaXNlRmxvb3JUaHJlc2hDaFswXTsKLQljYXNlIEFSX0VFUFJPTV9NQUMoMCk6Ci0JCXJldHVybiBwQmFzZS0+bWFjQWRkclswXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbMV07Ci0JY2FzZSBBUl9FRVBST01fTUFDKDEpOgotCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMl0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzNdOwotCWNhc2UgQVJfRUVQUk9NX01BQygyKToKLQkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzRdIDw8IDggfCBwQmFzZS0+bWFjQWRkcls1XTsKLQljYXNlIEVFUF9SRUdfMDoKLQkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMF07Ci0JY2FzZSBFRVBfUkVHXzE6Ci0JCXJldHVybiBwQmFzZS0+cmVnRG1uWzFdOwotCWNhc2UgRUVQX09QX0NBUDoKLQkJcmV0dXJuIHBCYXNlLT5kZXZpY2VDYXA7Ci0JY2FzZSBFRVBfT1BfTU9ERToKLQkJcmV0dXJuIHBCYXNlLT5vcENhcEZsYWdzOwotCWNhc2UgRUVQX1JGX1NJTEVOVDoKLQkJcmV0dXJuIHBCYXNlLT5yZlNpbGVudDsKLQljYXNlIEVFUF9PQl81OgotCQlyZXR1cm4gcE1vZGFsWzBdLm9iOwotCWNhc2UgRUVQX0RCXzU6Ci0JCXJldHVybiBwTW9kYWxbMF0uZGI7Ci0JY2FzZSBFRVBfT0JfMjoKLQkJcmV0dXJuIHBNb2RhbFsxXS5vYjsKLQljYXNlIEVFUF9EQl8yOgotCQlyZXR1cm4gcE1vZGFsWzFdLmRiOwotCWNhc2UgRUVQX01JTk9SX1JFVjoKLQkJcmV0dXJuIEFSNTQxNl9WRVJfTUFTSzsKLQljYXNlIEVFUF9UWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnR4TWFzazsKLQljYXNlIEVFUF9SWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnJ4TWFzazsKLQljYXNlIEVFUF9SWEdBSU5fVFlQRToKLQkJcmV0dXJuIHBCYXNlLT5yeEdhaW5UeXBlOwotCWNhc2UgRUVQX1RYR0FJTl9UWVBFOgotCQlyZXR1cm4gcEJhc2UtPnR4R2FpblR5cGU7Ci0JY2FzZSBFRVBfT0xfUFdSQ1RSTDoKLQkJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xOSkKLQkJCXJldHVybiBwQmFzZS0+b3Blbkxvb3BQd3JDbnRsID8gdHJ1ZSA6IGZhbHNlOwotCQllbHNlCi0JCQlyZXR1cm4gZmFsc2U7Ci0JY2FzZSBFRVBfUkNfQ0hBSU5fTUFTSzoKLQkJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xOSkKLQkJCXJldHVybiBwQmFzZS0+cmNDaGFpbk1hc2s7Ci0JCWVsc2UKLQkJCXJldHVybiAwOwotCWNhc2UgRUVQX0RBQ19IUFdSXzVHOgotCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIwKQotCQkJcmV0dXJuIHBCYXNlLT5kYWNIaVB3ck1vZGVfNUc7Ci0JCWVsc2UKLQkJCXJldHVybiAwOwotCWNhc2UgRUVQX0ZSQUNfTl81RzoKLQkJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMikKLQkJCXJldHVybiBwQmFzZS0+ZnJhY19uXzVnOwotCQllbHNlCi0JCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2RlZl9zZXRfZ2FpbihzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkgIHN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwsCi0JCQkJICBzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCwKLQkJCQkgIHU4IHR4UnhBdHRlbkxvY2FsLCBpbnQgcmVnQ2hhaW5PZmZzZXQsIGludCBpKQotewotCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgewotCQl0eFJ4QXR0ZW5Mb2NhbCA9IHBNb2RhbC0+dHhSeEF0dGVuQ2hbaV07Ci0KLQkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKLQkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9NQVJHSU4sCi0JCQkgICAgICBwTW9kYWwtPmJzd01hcmdpbltpXSk7Ci0JCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfREIsCi0JCQkgICAgICBwTW9kYWwtPmJzd0F0dGVuW2ldKTsKLQkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKLQkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9NQVJHSU4sCi0JCQkgICAgICBwTW9kYWwtPnhhdHRlbjJNYXJnaW5baV0pOwotCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX0RCLAotCQkJICAgICAgcE1vZGFsLT54YXR0ZW4yRGJbaV0pOwotCQl9IGVsc2UgewotCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9CU1dfTUFSR0lOKQotCQkJICB8IFNNKHBNb2RhbC0+IGJzd01hcmdpbltpXSwKLQkJCSAgICAgICBBUl9QSFlfR0FJTl8yR0haX0JTV19NQVJHSU4pKTsKLQkJCVJFR19XUklURShhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJICAoUkVHX1JFQUQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCkgJgotCQkJICAgfkFSX1BIWV9HQUlOXzJHSFpfQlNXX0FUVEVOKQotCQkJICB8IFNNKHBNb2RhbC0+YnN3QXR0ZW5baV0sCi0JCQkgICAgICAgQVJfUEhZX0dBSU5fMkdIWl9CU1dfQVRURU4pKTsKLQkJfQotCX0KLQotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCVJFR19STVdfRklFTEQoYWgsCi0JCSAgICAgIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKLQkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9BVFRFTiwgdHhSeEF0dGVuTG9jYWwpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLAotCQkgICAgICBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCi0JCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfTUFSR0lOLCBwTW9kYWwtPnJ4VHhNYXJnaW5DaFtpXSk7Ci0JfSBlbHNlIHsKLQkJUkVHX1dSSVRFKGFoLAotCQkJICBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkgICB+QVJfUEhZX1JYR0FJTl9UWFJYX0FUVEVOKQotCQkJICB8IFNNKHR4UnhBdHRlbkxvY2FsLCBBUl9QSFlfUlhHQUlOX1RYUlhfQVRURU4pKTsKLQkJUkVHX1dSSVRFKGFoLAotCQkJICBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9SWFRYX01BUkdJTikgfAotCQkJICBTTShwTW9kYWwtPnJ4VHhNYXJnaW5DaFtpXSwgQVJfUEhZX0dBSU5fMkdIWl9SWFRYX01BUkdJTikpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfZGVmX3NldF9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbDsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKLQlpbnQgaSwgcmVnQ2hhaW5PZmZzZXQ7Ci0JdTggdHhSeEF0dGVuTG9jYWw7Ci0KLQlwTW9kYWwgPSAmKGVlcC0+bW9kYWxIZWFkZXJbSVNfQ0hBTl8yR0haKGNoYW4pXSk7Ci0JdHhSeEF0dGVuTG9jYWwgPSBJU19DSEFOXzJHSFooY2hhbikgPyAyMyA6IDQ0OwotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NPTSwKLQkJICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhhaCwgY2hhbikpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJaWYgKEFSX1NSRVZfOTI4MChhaCkpIHsKLQkJCWlmIChpID49IDIpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSAmJgotCQkgICAgKGFoLT5yeGNoYWlubWFzayA9PSA1IHx8IGFoLT50eGNoYWlubWFzayA9PSA1KSAmJiAoaSAhPSAwKSkKLQkJCXJlZ0NoYWluT2Zmc2V0ID0gKGkgPT0gMSkgPyAweDIwMDAgOiAweDEwMDA7Ci0JCWVsc2UKLQkJCXJlZ0NoYWluT2Zmc2V0ID0gaSAqIDB4MTAwMDsKLQotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ0hBSU5fMCArIHJlZ0NoYWluT2Zmc2V0LAotCQkJICBwTW9kYWwtPmFudEN0cmxDaGFpbltpXSk7Ci0KLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkgICB+KEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGIHwKLQkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpKSB8Ci0JCQkgIFNNKHBNb2RhbC0+aXFDYWxJQ2hbaV0sCi0JCQkgICAgIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfSV9DT0ZGKSB8Ci0JCQkgIFNNKHBNb2RhbC0+aXFDYWxRQ2hbaV0sCi0JCQkgICAgIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGKSk7Ci0KLQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpCi0JCQlhdGg5a19od19kZWZfc2V0X2dhaW4oYWgsIHBNb2RhbCwgZWVwLCB0eFJ4QXR0ZW5Mb2NhbCwKLQkJCQkJICAgICAgcmVnQ2hhaW5PZmZzZXQsIGkpOwotCX0KLQotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX09CLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfT0JfUywKLQkJCQkJCSAgcE1vZGFsLT5vYik7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDAsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9EQiwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX0RCX1MsCi0JCQkJCQkgIHBNb2RhbC0+ZGIpOwotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gxLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfT0IsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9PQl9TLAotCQkJCQkJICBwTW9kYWwtPm9iX2NoMSk7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDEsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9EQiwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX0RCX1MsCi0JCQkJCQkgIHBNb2RhbC0+ZGJfY2gxKTsKLQkJfSBlbHNlIHsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX09CNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX09CNV9TLAotCQkJCQkJICBwTW9kYWwtPm9iKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX0RCNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX0RCNV9TLAotCQkJCQkJICBwTW9kYWwtPmRiKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX09CNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX09CNV9TLAotCQkJCQkJICBwTW9kYWwtPm9iX2NoMSk7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDEsCi0JCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9EQjUsCi0JCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9EQjVfUywKLQkJCQkJCSAgcE1vZGFsLT5kYl9jaDEpOwotCQl9Ci0JCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1RPUDIsCi0JCQkJCSAgQVJfQU5fVE9QMl9YUEFCSUFTX0xWTCwKLQkJCQkJICBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMX1MsCi0JCQkJCSAgcE1vZGFsLT54cGFCaWFzTHZsKTsKLQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fVE9QMiwKLQkJCQkJICBBUl9BTl9UT1AyX0xPQ0FMQklBUywKLQkJCQkJICBBUl9BTl9UT1AyX0xPQ0FMQklBU19TLAotCQkJCQkgIHBNb2RhbC0+bG9jYWxfYmlhcyk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9YUEFfQ0ZHLCBBUl9QSFlfRk9SQ0VfWFBBX0NGRywKLQkJCSAgICAgIHBNb2RhbC0+Zm9yY2VfeHBhb24pOwotCX0KLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKLQkJICAgICAgcE1vZGFsLT5zd2l0Y2hTZXR0bGluZyk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osIEFSX1BIWV9ERVNJUkVEX1NaX0FEQywKLQkJICAgICAgcE1vZGFsLT5hZGNEZXNpcmVkU2l6ZSk7Ci0KLQlpZiAoIUFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9ERVNJUkVEX1NaLAotCQkJICAgICAgQVJfUEhZX0RFU0lSRURfU1pfUEdBLAotCQkJICAgICAgcE1vZGFsLT5wZ2FEZXNpcmVkU2l6ZSk7Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SRl9DVEw0LAotCQkgIFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUFfT0ZGKQotCQkgIHwgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLAotCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUJfT0ZGKQotCQkgIHwgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwKLQkJICAgICAgIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT04pCi0JCSAgfCBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLAotCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQl9PTikpOwotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDMsIEFSX1BIWV9UWF9FTkRfVE9fQTJfUlhfT04sCi0JCSAgICAgIHBNb2RhbC0+dHhFbmRUb1J4T24pOwotCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NDQSwgQVI5MjgwX1BIWV9DQ0FfVEhSRVNINjIsCi0JCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EwLAotCQkJICAgICAgQVJfUEhZX0VYVF9DQ0EwX1RIUkVTSDYyLAotCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0JfSBlbHNlIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NDQSwgQVJfUEhZX0NDQV9USFJFU0g2MiwKLQkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQSwKLQkJCSAgICAgIEFSX1BIWV9FWFRfQ0NBX1RIUkVTSDYyLAotCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0JfQotCi0JaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLAotCQkJICAgICAgQVJfUEhZX1RYX0VORF9EQVRBX1NUQVJULAotCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9EYXRhU3RhcnQpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMiwgQVJfUEhZX1RYX0VORF9QQV9PTiwKLQkJCSAgICAgIHBNb2RhbC0+dHhGcmFtZVRvUGFPbik7Ci0JfQotCi0JaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8zKSB7Ci0JCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCi0JCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0VUVExJTkcsCi0JCQkJICAgICAgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKLQkJCQkgICAgICBwTW9kYWwtPnN3U2V0dGxlSHQ0MCk7Ci0JfQotCi0JaWYgKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkgJiYKLQkgICAgQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KQotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NLX1RYX0NUUkwsCi0JCQkgICAgICBBUl9QSFlfQ0NLX1RYX0NUUkxfVFhfREFDX1NDQUxFX0NDSywKLQkJCSAgICAgIHBNb2RhbC0+bWlzY0JpdHMpOwotCi0KLQlpZiAoQVJfU1JFVl85MjgwXzIwKGFoKSAmJiBBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjApIHsKLQkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkKLQkJCVJFR19STVdfRklFTEQoYWgsIEFSX0FOX1RPUDEsIEFSX0FOX1RPUDFfREFDSVBNT0RFLAotCQkJCQllZXAtPmJhc2VFZXBIZWFkZXIuZGFjTHBNb2RlKTsKLQkJZWxzZSBpZiAoZWVwLT5iYXNlRWVwSGVhZGVyLmRhY0hpUHdyTW9kZV81RykKLQkJCVJFR19STVdfRklFTEQoYWgsIEFSX0FOX1RPUDEsIEFSX0FOX1RPUDFfREFDSVBNT0RFLCAwKTsKLQkJZWxzZQotCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fVE9QMSwgQVJfQU5fVE9QMV9EQUNJUE1PREUsCi0JCQkJICAgICAgZWVwLT5iYXNlRWVwSGVhZGVyLmRhY0xwTW9kZSk7Ci0KLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0ZSQU1FX0NUTCwgQVJfUEhZX0ZSQU1FX0NUTF9UWF9DTElQLAotCQkJICAgICAgcE1vZGFsLT5taXNjQml0cyA+PiAyKTsKLQotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfUFdSQ1RSTDksCi0JCQkgICAgICBBUl9QSFlfVFhfREVTSVJFRF9TQ0FMRV9DQ0ssCi0JCQkgICAgICBlZXAtPmJhc2VFZXBIZWFkZXIuZGVzaXJlZFNjYWxlQ0NLKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2RlZl9zZXRfYWRkYWMoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0jZGVmaW5lIFhQQV9MVkxfRlJFUShjbnQpIChwTW9kYWwtPnhwYUJpYXNMdmxGcmVxW2NudF0pCi0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbDsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKLQl1OCBiaWFzbGV2ZWw7Ci0KLQlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkKLQkJcmV0dXJuOwotCi0JaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX01JTk9SX1ZFUl83KQotCQlyZXR1cm47Ci0KLQlwTW9kYWwgPSAmKGVlcC0+bW9kYWxIZWFkZXJbSVNfQ0hBTl8yR0haKGNoYW4pXSk7Ci0KLQlpZiAocE1vZGFsLT54cGFCaWFzTHZsICE9IDB4ZmYpIHsKLQkJYmlhc2xldmVsID0gcE1vZGFsLT54cGFCaWFzTHZsOwotCX0gZWxzZSB7Ci0JCXUxNiByZXNldEZyZXFCaW4sIGZyZXFCaW4sIGZyZXFDb3VudCA9IDA7Ci0JCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLQotCQlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7Ci0KLQkJcmVzZXRGcmVxQmluID0gRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLAotCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKLQkJZnJlcUJpbiA9IFhQQV9MVkxfRlJFUSgwKSAmIDB4ZmY7Ci0JCWJpYXNsZXZlbCA9ICh1OCkgKFhQQV9MVkxfRlJFUSgwKSA+PiAxNCk7Ci0KLQkJZnJlcUNvdW50Kys7Ci0KLQkJd2hpbGUgKGZyZXFDb3VudCA8IDMpIHsKLQkJCWlmIChYUEFfTFZMX0ZSRVEoZnJlcUNvdW50KSA9PSAweDApCi0JCQkJYnJlYWs7Ci0KLQkJCWZyZXFCaW4gPSBYUEFfTFZMX0ZSRVEoZnJlcUNvdW50KSAmIDB4ZmY7Ci0JCQlpZiAocmVzZXRGcmVxQmluID49IGZyZXFCaW4pCi0JCQkJYmlhc2xldmVsID0gKHU4KShYUEFfTFZMX0ZSRVEoZnJlcUNvdW50KSA+PiAxNCk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCQlmcmVxQ291bnQrKzsKLQkJfQotCX0KLQotCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJSU5JX1JBKCZhaC0+aW5pQWRkYWMsIDcsIDEpID0gKElOSV9SQSgmYWgtPmluaUFkZGFjLAotCQkJCQk3LCAxKSAmICh+MHgxOCkpIHwgYmlhc2xldmVsIDw8IDM7Ci0JfSBlbHNlIHsKLQkJSU5JX1JBKCZhaC0+aW5pQWRkYWMsIDYsIDEpID0gKElOSV9SQSgmYWgtPmluaUFkZGFjLAotCQkJCQk2LCAxKSAmICh+MHhjMCkpIHwgYmlhc2xldmVsIDw8IDY7Ci0JfQotI3VuZGVmIFhQQV9MVkxfRlJFUQotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19nZXRfZGVmX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxICpwUmF3RGF0YVNldCwKLQkJCQl1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKLQkJCQl1MTYgdFBkR2Fpbk92ZXJsYXAsIGludDE2X3QgKnBNaW5DYWxQb3dlciwKLQkJCQl1MTYgKnBQZEdhaW5Cb3VuZGFyaWVzLCB1OCAqcFBEQURDVmFsdWVzLAotCQkJCXUxNiBudW1YcGRHYWlucykKLXsKLQlpbnQgaSwgaiwgazsKLQlpbnQxNl90IHNzOwotCXUxNiBpZHhMID0gMCwgaWR4UiA9IDAsIG51bVBpZXJzOwotCXN0YXRpYyB1OCB2cGRUYWJsZUxbQVI1NDE2X05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCXN0YXRpYyB1OCB2cGRUYWJsZVJbQVI1NDE2X05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCXN0YXRpYyB1OCB2cGRUYWJsZUlbQVI1NDE2X05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCi0JdTggKnBWcGRMLCAqcFZwZFIsICpwUHdyTCwgKnBQd3JSOwotCXU4IG1pblB3clQ0W0FSNTQxNl9OVU1fUERfR0FJTlNdOwotCXU4IG1heFB3clQ0W0FSNTQxNl9OVU1fUERfR0FJTlNdOwotCWludDE2X3QgdnBkU3RlcDsKLQlpbnQxNl90IHRtcFZhbDsKLQl1MTYgc2l6ZUN1cnJWcGRUYWJsZSwgbWF4SW5kZXgsIHRndEluZGV4OwotCWJvb2wgbWF0Y2g7Ci0JaW50MTZfdCBtaW5EZWx0YSA9IDA7Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCi0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCi0JZm9yIChudW1QaWVycyA9IDA7IG51bVBpZXJzIDwgYXZhaWxQaWVyczsgbnVtUGllcnMrKykgewotCQlpZiAoYkNoYW5zW251bVBpZXJzXSA9PSBBUjU0MTZfQkNIQU5fVU5VU0VEKQotCQkJYnJlYWs7Ci0JfQotCi0JbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoKHU4KUZSRVEyRkJJTihjZW50ZXJzLnN5bnRoX2NlbnRlciwKLQkJCQkJCQkgICAgIElTX0NIQU5fMkdIWihjaGFuKSksCi0JCQkJCSAgICAgICBiQ2hhbnMsIG51bVBpZXJzLCAmaWR4TCwgJmlkeFIpOwotCi0JaWYgKG1hdGNoKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1YcGRHYWluczsgaSsrKSB7Ci0JCQltaW5Qd3JUNFtpXSA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXVswXTsKLQkJCW1heFB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzRdOwotCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAotCQkJCQlwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV0sCi0JCQkJCXBSYXdEYXRhU2V0W2lkeExdLnZwZFBkZ1tpXSwKLQkJCQkJQVI1NDE2X1BEX0dBSU5fSUNFUFRTLAotCQkJCQl2cGRUYWJsZUlbaV0pOwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJCXBWcGRMID0gcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldOwotCQkJcFB3ckwgPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV07Ci0JCQlwVnBkUiA9IHBSYXdEYXRhU2V0W2lkeFJdLnZwZFBkZ1tpXTsKLQkJCXBQd3JSID0gcFJhd0RhdGFTZXRbaWR4Ul0ucHdyUGRnW2ldOwotCi0JCQltaW5Qd3JUNFtpXSA9IG1heChwUHdyTFswXSwgcFB3clJbMF0pOwotCi0JCQltYXhQd3JUNFtpXSA9Ci0JCQkJbWluKHBQd3JMW0FSNTQxNl9QRF9HQUlOX0lDRVBUUyAtIDFdLAotCQkJCSAgICBwUHdyUltBUjU0MTZfUERfR0FJTl9JQ0VQVFMgLSAxXSk7Ci0KLQotCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAotCQkJCQkJcFB3ckwsIHBWcGRMLAotCQkJCQkJQVI1NDE2X1BEX0dBSU5fSUNFUFRTLAotCQkJCQkJdnBkVGFibGVMW2ldKTsKLQkJCWF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKG1pblB3clQ0W2ldLCBtYXhQd3JUNFtpXSwKLQkJCQkJCXBQd3JSLCBwVnBkUiwKLQkJCQkJCUFSNTQxNl9QRF9HQUlOX0lDRVBUUywKLQkJCQkJCXZwZFRhYmxlUltpXSk7Ci0KLQkJCWZvciAoaiA9IDA7IGogPD0gKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMjsgaisrKSB7Ci0JCQkJdnBkVGFibGVJW2ldW2pdID0KLQkJCQkJKHU4KShhdGg5a19od19pbnRlcnBvbGF0ZSgodTE2KQotCQkJCQkgICAgIEZSRVEyRkJJTihjZW50ZXJzLgotCQkJCQkJICAgICAgIHN5bnRoX2NlbnRlciwKLQkJCQkJCSAgICAgICBJU19DSEFOXzJHSFoKLQkJCQkJCSAgICAgICAoY2hhbikpLAotCQkJCQkgICAgIGJDaGFuc1tpZHhMXSwgYkNoYW5zW2lkeFJdLAotCQkJCQkgICAgIHZwZFRhYmxlTFtpXVtqXSwgdnBkVGFibGVSW2ldW2pdKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkqcE1pbkNhbFBvd2VyID0gKGludDE2X3QpKG1pblB3clQ0WzBdIC8gMik7Ci0KLQlrID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1YcGRHYWluczsgaSsrKSB7Ci0JCWlmIChpID09IChudW1YcGRHYWlucyAtIDEpKQotCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQotCQkJCSh1MTYpKG1heFB3clQ0W2ldIC8gMik7Ci0JCWVsc2UKLQkJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0KLQkJCQkodTE2KSgobWF4UHdyVDRbaV0gKyBtaW5Qd3JUNFtpICsgMV0pIC8gNCk7Ci0KLQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQotCQkJbWluKCh1MTYpQVI1NDE2X01BWF9SQVRFX1BPV0VSLCBwUGRHYWluQm91bmRhcmllc1tpXSk7Ci0KLQkJaWYgKChpID09IDApICYmICFBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7Ci0JCQltaW5EZWx0YSA9IHBQZEdhaW5Cb3VuZGFyaWVzWzBdIC0gMjM7Ci0JCQlwUGRHYWluQm91bmRhcmllc1swXSA9IDIzOwotCQl9IGVsc2UgewotCQkJbWluRGVsdGEgPSAwOwotCQl9Ci0KLQkJaWYgKGkgPT0gMCkgewotCQkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCQkJc3MgPSAoaW50MTZfdCkoMCAtIChtaW5Qd3JUNFtpXSAvIDIpKTsKLQkJCWVsc2UKLQkJCQlzcyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlzcyA9IChpbnQxNl90KSgocFBkR2FpbkJvdW5kYXJpZXNbaSAtIDFdIC0KLQkJCQkJKG1pblB3clQ0W2ldIC8gMikpIC0KLQkJCQkgICAgICAgdFBkR2Fpbk92ZXJsYXAgKyAxICsgbWluRGVsdGEpOwotCQl9Ci0JCXZwZFN0ZXAgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzFdIC0gdnBkVGFibGVJW2ldWzBdKTsKLQkJdnBkU3RlcCA9IChpbnQxNl90KSgodnBkU3RlcCA8IDEpID8gMSA6IHZwZFN0ZXApOwotCi0JCXdoaWxlICgoc3MgPCAwKSAmJiAoayA8IChBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkgewotCQkJdG1wVmFsID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVswXSArIHNzICogdnBkU3RlcCk7Ci0JCQlwUERBRENWYWx1ZXNbaysrXSA9ICh1OCkoKHRtcFZhbCA8IDApID8gMCA6IHRtcFZhbCk7Ci0JCQlzcysrOwotCQl9Ci0KLQkJc2l6ZUN1cnJWcGRUYWJsZSA9ICh1OCkgKChtYXhQd3JUNFtpXSAtIG1pblB3clQ0W2ldKSAvIDIgKyAxKTsKLQkJdGd0SW5kZXggPSAodTgpKHBQZEdhaW5Cb3VuZGFyaWVzW2ldICsgdFBkR2Fpbk92ZXJsYXAgLQotCQkJCShtaW5Qd3JUNFtpXSAvIDIpKTsKLQkJbWF4SW5kZXggPSAodGd0SW5kZXggPCBzaXplQ3VyclZwZFRhYmxlKSA/Ci0JCQl0Z3RJbmRleCA6IHNpemVDdXJyVnBkVGFibGU7Ci0KLQkJd2hpbGUgKChzcyA8IG1heEluZGV4KSAmJiAoayA8IChBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkgewotCQkJcFBEQURDVmFsdWVzW2srK10gPSB2cGRUYWJsZUlbaV1bc3MrK107Ci0JCX0KLQotCQl2cGRTdGVwID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMV0gLQotCQkJCSAgICB2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDJdKTsKLQkJdnBkU3RlcCA9IChpbnQxNl90KSgodnBkU3RlcCA8IDEpID8gMSA6IHZwZFN0ZXApOwotCi0JCWlmICh0Z3RJbmRleCA+IG1heEluZGV4KSB7Ci0JCQl3aGlsZSAoKHNzIDw9IHRndEluZGV4KSAmJgotCQkJICAgICAgIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7Ci0JCQkJdG1wVmFsID0gKGludDE2X3QpKCh2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDFdICsKLQkJCQkJCSAgICAoc3MgLSBtYXhJbmRleCArIDEpICogdnBkU3RlcCkpOwotCQkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsID4gMjU1KSA/Ci0JCQkJCQkJIDI1NSA6IHRtcFZhbCk7Ci0JCQkJc3MrKzsKLQkJCX0KLQkJfQotCX0KLQotCXdoaWxlIChpIDwgQVI1NDE2X1BEX0dBSU5TX0lOX01BU0spIHsKLQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPSBwUGRHYWluQm91bmRhcmllc1tpIC0gMV07Ci0JCWkrKzsKLQl9Ci0KLQl3aGlsZSAoayA8IEFSNTQxNl9OVU1fUERBRENfVkFMVUVTKSB7Ci0JCXBQREFEQ1ZhbHVlc1trXSA9IHBQREFEQ1ZhbHVlc1trIC0gMV07Ci0JCWsrKzsKLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9kZWZfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICBpbnQxNl90ICpwVHhQb3dlckluZGV4T2Zmc2V0KQotewotI2RlZmluZSBTTV9QRF9HQUlOKHgpIFNNKDB4MzgsIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8jI3gpCi0jZGVmaW5lIFNNX1BER0FJTl9CKHgsIHkpIFwKLQkJU00oKGdhaW5Cb3VuZGFyaWVzW3hdKSwgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXyMjeSkKLQotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5kZWY7Ci0Jc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxICpwUmF3RGF0YXNldDsKLQl1OCAqcENhbEJDaGFucyA9IE5VTEw7Ci0JdTE2IHBkR2Fpbk92ZXJsYXBfdDI7Ci0Jc3RhdGljIHU4IHBkYWRjVmFsdWVzW0FSNTQxNl9OVU1fUERBRENfVkFMVUVTXTsKLQl1MTYgZ2FpbkJvdW5kYXJpZXNbQVI1NDE2X1BEX0dBSU5TX0lOX01BU0tdOwotCXUxNiBudW1QaWVycywgaSwgajsKLQlpbnQxNl90IHRNaW5DYWxQb3dlcjsKLQl1MTYgbnVtWHBkR2FpbiwgeHBkTWFzazsKLQl1MTYgeHBkR2FpblZhbHVlc1tBUjU0MTZfTlVNX1BEX0dBSU5TXSA9IHsgMCwgMCwgMCwgMCB9OwotCXUzMiByZWczMiwgcmVnT2Zmc2V0LCByZWdDaGFpbk9mZnNldDsKLQlpbnQxNl90IG1vZGFsSWR4OwotCi0JbW9kYWxJZHggPSBJU19DSEFOXzJHSFooY2hhbikgPyAxIDogMDsKLQl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyW21vZGFsSWR4XS54cGRHYWluOwotCi0JaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KLQkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgewotCQlwZEdhaW5PdmVybGFwX3QyID0KLQkJCXBFZXBEYXRhLT5tb2RhbEhlYWRlclttb2RhbElkeF0ucGRHYWluT3ZlcmxhcDsKLQl9IGVsc2UgewotCQlwZEdhaW5PdmVybGFwX3QyID0gKHUxNikoTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9UUENSRzUpLAotCQkJCQkgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApKTsKLQl9Ci0KLQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7Ci0JCXBDYWxCQ2hhbnMgPSBwRWVwRGF0YS0+Y2FsRnJlcVBpZXIyRzsKLQkJbnVtUGllcnMgPSBBUjU0MTZfTlVNXzJHX0NBTF9QSUVSUzsKLQl9IGVsc2UgewotCQlwQ2FsQkNoYW5zID0gcEVlcERhdGEtPmNhbEZyZXFQaWVyNUc7Ci0JCW51bVBpZXJzID0gQVI1NDE2X05VTV81R19DQUxfUElFUlM7Ci0JfQotCi0JaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSICYmIElTX0NIQU5fMkdIWihjaGFuKSkgewotCQlwUmF3RGF0YXNldCA9IHBFZXBEYXRhLT5jYWxQaWVyRGF0YTJHWzBdOwotCQlhaC0+aW5pdFBEQURDID0gKChzdHJ1Y3QgY2FsRGF0YVBlckZyZXFPcExvb3AgKikKLQkJCQkgcFJhd0RhdGFzZXQpLT52cGRQZGdbMF1bMF07Ci0JfQotCi0JbnVtWHBkR2FpbiA9IDA7Ci0KLQlmb3IgKGkgPSAxOyBpIDw9IEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLOyBpKyspIHsKLQkJaWYgKCh4cGRNYXNrID4+IChBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAtIGkpKSAmIDEpIHsKLQkJCWlmIChudW1YcGRHYWluID49IEFSNTQxNl9OVU1fUERfR0FJTlMpCi0JCQkJYnJlYWs7Ci0JCQl4cGRHYWluVmFsdWVzW251bVhwZEdhaW5dID0KLQkJCQkodTE2KShBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAtIGkpOwotCQkJbnVtWHBkR2FpbisrOwotCQl9Ci0JfQotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9OVU1fUERfR0FJTiwKLQkJICAgICAgKG51bVhwZEdhaW4gLSAxKSAmIDB4Myk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzEsCi0JCSAgICAgIHhwZEdhaW5WYWx1ZXNbMF0pOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8yLAotCQkgICAgICB4cGRHYWluVmFsdWVzWzFdKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMywKLQkJICAgICAgeHBkR2FpblZhbHVlc1syXSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewotCQlpZiAoQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSAmJgotCQkgICAgKGFoLT5yeGNoYWlubWFzayA9PSA1IHx8IGFoLT50eGNoYWlubWFzayA9PSA1KSAmJgotCQkgICAgKGkgIT0gMCkpIHsKLQkJCXJlZ0NoYWluT2Zmc2V0ID0gKGkgPT0gMSkgPyAweDIwMDAgOiAweDEwMDA7Ci0JCX0gZWxzZQotCQkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOwotCi0JCWlmIChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci50eE1hc2sgJiAoMSA8PCBpKSkgewotCQkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkKLQkJCQlwUmF3RGF0YXNldCA9IHBFZXBEYXRhLT5jYWxQaWVyRGF0YTJHW2ldOwotCQkJZWxzZQotCQkJCXBSYXdEYXRhc2V0ID0gcEVlcERhdGEtPmNhbFBpZXJEYXRhNUdbaV07Ci0KLQotCQkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKSB7Ci0JCQkJdTggcGNkYWNJZHg7Ci0JCQkJdTggdHhQb3dlcjsKLQotCQkJCWF0aDlrX2dldF90eGdhaW5faW5kZXgoYWgsIGNoYW4sCi0JCQkJKHN0cnVjdCBjYWxEYXRhUGVyRnJlcU9wTG9vcCAqKXBSYXdEYXRhc2V0LAotCQkJCXBDYWxCQ2hhbnMsIG51bVBpZXJzLCAmdHhQb3dlciwgJnBjZGFjSWR4KTsKLQkJCQlhdGg5a19vbGNfZ2V0X3BkYWRjcyhhaCwgcGNkYWNJZHgsCi0JCQkJCQkgICAgIHR4UG93ZXIvMiwgcGRhZGNWYWx1ZXMpOwotCQkJfSBlbHNlIHsKLQkJCQlhdGg5a19od19nZXRfZGVmX2dhaW5fYm91bmRhcmllc19wZGFkY3MoYWgsCi0JCQkJCQkJY2hhbiwgcFJhd0RhdGFzZXQsCi0JCQkJCQkJcENhbEJDaGFucywgbnVtUGllcnMsCi0JCQkJCQkJcGRHYWluT3ZlcmxhcF90MiwKLQkJCQkJCQkmdE1pbkNhbFBvd2VyLAotCQkJCQkJCWdhaW5Cb3VuZGFyaWVzLAotCQkJCQkJCXBkYWRjVmFsdWVzLAotCQkJCQkJCW51bVhwZEdhaW4pOwotCQkJfQotCi0JCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgewotCQkJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgewotCQkJCQlSRUdfV1JJVEUoYWgsCi0JCQkJCQlBUl9QSFlfVFBDUkc1ICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCQlTTSgweDYsCi0JCQkJCQlBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkgfAotCQkJCQkJU01fUERfR0FJTigxKSB8IFNNX1BEX0dBSU4oMikgfAotCQkJCQkJU01fUERfR0FJTigzKSB8IFNNX1BEX0dBSU4oNCkpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVJFR19XUklURShhaCwKLQkJCQkJCUFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKLQkJCQkJCVNNKHBkR2Fpbk92ZXJsYXBfdDIsCi0JCQkJCQlBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCl8Ci0JCQkJCQlTTV9QREdBSU5fQigwLCAxKSB8Ci0JCQkJCQlTTV9QREdBSU5fQigxLCAyKSB8Ci0JCQkJCQlTTV9QREdBSU5fQigyLCAzKSB8Ci0JCQkJCQlTTV9QREdBSU5fQigzLCA0KSk7Ci0JCQkJfQotCQkJfQotCi0JCQlyZWdPZmZzZXQgPSBBUl9QSFlfQkFTRSArICg2NzIgPDwgMikgKyByZWdDaGFpbk9mZnNldDsKLQkJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7Ci0JCQkJcmVnMzIgPSAoKHBkYWRjVmFsdWVzWzQgKiBqICsgMF0gJiAweEZGKSA8PCAwKSB8Ci0JCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAxXSAmIDB4RkYpIDw8IDgpIHwKLQkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDJdICYgMHhGRikgPDwgMTYpfAotCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgM10gJiAweEZGKSA8PCAyNCk7Ci0JCQkJUkVHX1dSSVRFKGFoLCByZWdPZmZzZXQsIHJlZzMyKTsKLQotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkJIlBEQURDICglZCwlNHgpOiAlNC40eCAlOC44eFxuIiwKLQkJCQkJaSwgcmVnQ2hhaW5PZmZzZXQsIHJlZ09mZnNldCwKLQkJCQkJcmVnMzIpOwotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkJIlBEQURDOiBDaGFpbiAlZCB8IFBEQURDICUzZCAiCi0JCQkJCSJWYWx1ZSAlM2QgfCBQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgotCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8IFBEQURDICUzZCAiCi0JCQkJCSJWYWx1ZSAlM2QgfFxuIiwKLQkJCQkJaSwgNCAqIGosIHBkYWRjVmFsdWVzWzQgKiBqXSwKLQkJCQkJNCAqIGogKyAxLCBwZGFkY1ZhbHVlc1s0ICogaiArIDFdLAotCQkJCQk0ICogaiArIDIsIHBkYWRjVmFsdWVzWzQgKiBqICsgMl0sCi0JCQkJCTQgKiBqICsgMywKLQkJCQkJcGRhZGNWYWx1ZXNbNCAqIGogKyAzXSk7Ci0KLQkJCQlyZWdPZmZzZXQgKz0gNDsKLQkJCX0KLQkJfQotCX0KLQotCSpwVHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKLSN1bmRlZiBTTV9QRF9HQUlOCi0jdW5kZWYgU01fUERHQUlOX0IKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJCQkgIGludDE2X3QgKnJhdGVzQXJyYXksCi0JCQkJCQkgIHUxNiBjZmdDdGwsCi0JCQkJCQkgIHUxNiBBbnRlbm5hUmVkdWN0aW9uLAotCQkJCQkJICB1MTYgdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkJCQkgIHUxNiBwb3dlckxpbWl0KQotewotI2RlZmluZSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RXT19DSEFJTiAgICAgNiAgLyogMTAqbG9nMTAoMikqMiAqLwotI2RlZmluZSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOICAgMTAgLyogMTAqbG9nMTAoMykqMiAqLwotCi0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLmRlZjsKLQl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7Ci0Jc3RhdGljIGNvbnN0IHUxNiB0cFNjYWxlUmVkdWN0aW9uVGFibGVbNV0gPQotCQl7IDAsIDMsIDYsIDksIEFSNTQxNl9NQVhfUkFURV9QT1dFUiB9OwotCi0JaW50IGk7Ci0JaW50MTZfdCB0d2ljZUxhcmdlc3RBbnRlbm5hOwotCXN0cnVjdCBjYWxfY3RsX2RhdGEgKnJlcDsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtLCB0YXJnZXRQb3dlckNjayA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwfQotCX07Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHRhcmdldFBvd2VyT2ZkbUV4dCA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwfSB9LCB0YXJnZXRQb3dlckNja0V4dCA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwIH0KLQl9OwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHRhcmdldFBvd2VySHQyMCwgdGFyZ2V0UG93ZXJIdDQwID0gewotCQkwLCB7MCwgMCwgMCwgMH0KLQl9OwotCXUxNiBzY2FsZWRQb3dlciA9IDAsIG1pbkN0bFBvd2VyLCBtYXhSZWdBbGxvd2VkUG93ZXI7Ci0JdTE2IGN0bE1vZGVzRm9yMTFhW10gPQotCQl7IENUTF8xMUEsIENUTF81R0hUMjAsIENUTF8xMUFfRVhULCBDVExfNUdIVDQwIH07Ci0JdTE2IGN0bE1vZGVzRm9yMTFnW10gPQotCQl7IENUTF8xMUIsIENUTF8xMUcsIENUTF8yR0hUMjAsIENUTF8xMUJfRVhULCBDVExfMTFHX0VYVCwKLQkJICBDVExfMkdIVDQwCi0JCX07Ci0JdTE2IG51bUN0bE1vZGVzLCAqcEN0bE1vZGUsIGN0bE1vZGUsIGZyZXE7Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCWludCB0eF9jaGFpbm1hc2s7Ci0JdTE2IHR3aWNlTWluRWRnZVBvd2VyOwotCi0JdHhfY2hhaW5tYXNrID0gYWgtPnR4Y2hhaW5tYXNrOwotCi0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCi0JdHdpY2VMYXJnZXN0QW50ZW5uYSA9IG1heCgKLQkJcEVlcERhdGEtPm1vZGFsSGVhZGVyCi0JCQlbSVNfQ0hBTl8yR0haKGNoYW4pXS5hbnRlbm5hR2FpbkNoWzBdLAotCQlwRWVwRGF0YS0+bW9kYWxIZWFkZXIKLQkJCVtJU19DSEFOXzJHSFooY2hhbildLmFudGVubmFHYWluQ2hbMV0pOwotCi0JdHdpY2VMYXJnZXN0QW50ZW5uYSA9IG1heCgodTgpdHdpY2VMYXJnZXN0QW50ZW5uYSwKLQkJCQkgIHBFZXBEYXRhLT5tb2RhbEhlYWRlcgotCQkJCSAgW0lTX0NIQU5fMkdIWihjaGFuKV0uYW50ZW5uYUdhaW5DaFsyXSk7Ci0KLQl0d2ljZUxhcmdlc3RBbnRlbm5hID0gKGludDE2X3QpbWluKEFudGVubmFSZWR1Y3Rpb24gLQotCQkJCQkgICB0d2ljZUxhcmdlc3RBbnRlbm5hLCAwKTsKLQotCW1heFJlZ0FsbG93ZWRQb3dlciA9IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyICsgdHdpY2VMYXJnZXN0QW50ZW5uYTsKLQotCWlmIChhaC0+cmVndWxhdG9yeS50cF9zY2FsZSAhPSBBVEg5S19UUF9TQ0FMRV9NQVgpIHsKLQkJbWF4UmVnQWxsb3dlZFBvd2VyIC09Ci0JCQkodHBTY2FsZVJlZHVjdGlvblRhYmxlWyhhaC0+cmVndWxhdG9yeS50cF9zY2FsZSldICogMik7Ci0JfQotCi0Jc2NhbGVkUG93ZXIgPSBtaW4ocG93ZXJMaW1pdCwgbWF4UmVnQWxsb3dlZFBvd2VyKTsKLQotCXN3aXRjaCAoYXI1NDE2X2dldF9udHhjaGFpbnModHhfY2hhaW5tYXNrKSkgewotCWNhc2UgMToKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlzY2FsZWRQb3dlciAtPSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RXT19DSEFJTjsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlzY2FsZWRQb3dlciAtPSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOOwotCQlicmVhazsKLQl9Ci0KLQlzY2FsZWRQb3dlciA9IG1heCgodTE2KTAsIHNjYWxlZFBvd2VyKTsKLQotCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKSAtCi0JCQlTVUJfTlVNX0NUTF9NT0RFU19BVF8yR180MDsKLQkJcEN0bE1vZGUgPSBjdGxNb2Rlc0ZvcjExZzsKLQotCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXJDY2ssCi0JCQlBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAotCQkJJnRhcmdldFBvd2VyQ2NrLCA0LCBmYWxzZSk7Ci0JCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHLAotCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAotCQkJJnRhcmdldFBvd2VyT2ZkbSwgNCwgZmFsc2UpOwotCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHSFQyMCwKLQkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKLQkJCSZ0YXJnZXRQb3dlckh0MjAsIDgsIGZhbHNlKTsKLQotCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpOwotCQkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDQwLAotCQkJCUFSNTQxNl9OVU1fMkdfNDBfVEFSR0VUX1BPV0VSUywKLQkJCQkmdGFyZ2V0UG93ZXJIdDQwLCA4LCB0cnVlKTsKLQkJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXJDY2ssCi0JCQkJQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUywKLQkJCQkmdGFyZ2V0UG93ZXJDY2tFeHQsIDQsIHRydWUpOwotCQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHLAotCQkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKLQkJCQkmdGFyZ2V0UG93ZXJPZmRtRXh0LCA0LCB0cnVlKTsKLQkJfQotCX0gZWxzZSB7Ci0JCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExYSkgLQotCQkJU1VCX05VTV9DVExfTU9ERVNfQVRfNUdfNDA7Ci0JCXBDdGxNb2RlID0gY3RsTW9kZXNGb3IxMWE7Ci0KLQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyNUcsCi0JCQlBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJPZmRtLCA0LCBmYWxzZSk7Ci0JCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyNUdIVDIwLAotCQkJQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTLAotCQkJJnRhcmdldFBvd2VySHQyMCwgOCwgZmFsc2UpOwotCi0JCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKLQkJCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExYSk7Ci0JCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXI1R0hUNDAsCi0JCQkJQVI1NDE2X05VTV81R180MF9UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlckh0NDAsIDgsIHRydWUpOwotCQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjVHLAotCQkJCUFSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSUywKLQkJCQkmdGFyZ2V0UG93ZXJPZmRtRXh0LCA0LCB0cnVlKTsKLQkJfQotCX0KLQotCWZvciAoY3RsTW9kZSA9IDA7IGN0bE1vZGUgPCBudW1DdGxNb2RlczsgY3RsTW9kZSsrKSB7Ci0JCWJvb2wgaXNIdDQwQ3RsTW9kZSA9IChwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfNUdIVDQwKSB8fAotCQkJKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF8yR0hUNDApOwotCQlpZiAoaXNIdDQwQ3RsTW9kZSkKLQkJCWZyZXEgPSBjZW50ZXJzLnN5bnRoX2NlbnRlcjsKLQkJZWxzZSBpZiAocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpCi0JCQlmcmVxID0gY2VudGVycy5leHRfY2VudGVyOwotCQllbHNlCi0JCQlmcmVxID0gY2VudGVycy5jdGxfY2VudGVyOwotCi0JCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpID09IDE0ICYmCi0JCSAgICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDw9IDIpCi0JCQl0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiTE9PUC1Nb2RlIGN0bE1vZGUgJWQgPCAlZCwgaXNIdDQwQ3RsTW9kZSAlZCwgIgotCQkJIkVYVF9BRERJVElWRSAlZFxuIiwKLQkJCWN0bE1vZGUsIG51bUN0bE1vZGVzLCBpc0h0NDBDdGxNb2RlLAotCQkJKHBDdGxNb2RlW2N0bE1vZGVdICYgRVhUX0FERElUSVZFKSk7Ci0KLQkJZm9yIChpID0gMDsgKGkgPCBBUjU0MTZfTlVNX0NUTFMpICYmIHBFZXBEYXRhLT5jdGxJbmRleFtpXTsgaSsrKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkJIiAgTE9PUC1DdGxpZHggJWQ6IGNmZ0N0bCAweCUyLjJ4ICIKLQkJCQkicEN0bE1vZGUgMHglMi4yeCBjdGxJbmRleCAweCUyLjJ4ICIKLQkJCQkiY2hhbiAlZFxuIiwKLQkJCQlpLCBjZmdDdGwsIHBDdGxNb2RlW2N0bE1vZGVdLAotCQkJCXBFZXBEYXRhLT5jdGxJbmRleFtpXSwgY2hhbi0+Y2hhbm5lbCk7Ci0KLQkJCWlmICgoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAotCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09Ci0JCQkgICAgIHBFZXBEYXRhLT5jdGxJbmRleFtpXSkgfHwKLQkJCSAgICAoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAotCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09Ci0JCQkgICAgICgocEVlcERhdGEtPmN0bEluZGV4W2ldICYgQ1RMX01PREVfTSkgfCBTRF9OT19DVEwpKSkgewotCQkJCXJlcCA9ICYocEVlcERhdGEtPmN0bERhdGFbaV0pOwotCi0JCQkJdHdpY2VNaW5FZGdlUG93ZXIgPSBhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIoZnJlcSwKLQkJCQlyZXAtPmN0bEVkZ2VzW2FyNTQxNl9nZXRfbnR4Y2hhaW5zKHR4X2NoYWlubWFzaykgLSAxXSwKLQkJCQlJU19DSEFOXzJHSFooY2hhbiksIEFSNTQxNl9OVU1fQkFORF9FREdFUyk7Ci0KLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkJCSIgICAgTUFUQ0gtRUVfSURYICVkOiBjaCAlZCBpczIgJWQgIgotCQkJCQkiMnhNaW5FZGdlICVkIGNoYWlubWFzayAlZCBjaGFpbnMgJWRcbiIsCi0JCQkJCWksIGZyZXEsIElTX0NIQU5fMkdIWihjaGFuKSwKLQkJCQkJdHdpY2VNaW5FZGdlUG93ZXIsIHR4X2NoYWlubWFzaywKLQkJCQkJYXI1NDE2X2dldF9udHhjaGFpbnMKLQkJCQkJKHR4X2NoYWlubWFzaykpOwotCQkJCWlmICgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pID09IFNEX05PX0NUTCkgewotCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IG1pbih0d2ljZU1heEVkZ2VQb3dlciwKLQkJCQkJCQkJdHdpY2VNaW5FZGdlUG93ZXIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gdHdpY2VNaW5FZGdlUG93ZXI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCW1pbkN0bFBvd2VyID0gbWluKHR3aWNlTWF4RWRnZVBvd2VyLCBzY2FsZWRQb3dlcik7Ci0KLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJIiAgICBTRUwtTWluIGN0bE1vZGUgJWQgcEN0bE1vZGUgJWQgIgotCQkJIjJ4TWF4RWRnZSAlZCBzUCAlZCBtaW5DdGxQd3IgJWRcbiIsCi0JCQljdGxNb2RlLCBwQ3RsTW9kZVtjdGxNb2RlXSwgdHdpY2VNYXhFZGdlUG93ZXIsCi0JCQlzY2FsZWRQb3dlciwgbWluQ3RsUG93ZXIpOwotCi0JCXN3aXRjaCAocEN0bE1vZGVbY3RsTW9kZV0pIHsKLQkJY2FzZSBDVExfMTFCOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJDY2sudFBvdzJ4KTsgaSsrKSB7Ci0JCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJDY2sudFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzExQToKLQkJY2FzZSBDVExfMTFHOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJPZmRtLnRQb3cyeCk7IGkrKykgewotCQkJCXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0gPQotCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlck9mZG0udFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzVHSFQyMDoKLQkJY2FzZSBDVExfMkdIVDIwOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7IGkrKykgewotCQkJCXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0gPQotCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzExQl9FWFQ6Ci0JCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKLQkJCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdLAotCQkJCQltaW5DdGxQb3dlcik7Ci0JCQlicmVhazsKLQkJY2FzZSBDVExfMTFBX0VYVDoKLQkJY2FzZSBDVExfMTFHX0VYVDoKLQkJCXRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKLQkJCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSwKLQkJCQkJbWluQ3RsUG93ZXIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzVHSFQ0MDoKLQkJY2FzZSBDVExfMkdIVDQwOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7IGkrKykgewotCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0gPQotCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJhdGVzQXJyYXlbcmF0ZTZtYl0gPSByYXRlc0FycmF5W3JhdGU5bWJdID0gcmF0ZXNBcnJheVtyYXRlMTJtYl0gPQotCQlyYXRlc0FycmF5W3JhdGUxOG1iXSA9IHJhdGVzQXJyYXlbcmF0ZTI0bWJdID0KLQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKLQlyYXRlc0FycmF5W3JhdGUzNm1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMV07Ci0JcmF0ZXNBcnJheVtyYXRlNDhtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzJdOwotCXJhdGVzQXJyYXlbcmF0ZTU0bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFszXTsKLQlyYXRlc0FycmF5W3JhdGVYcl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzBdOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7IGkrKykKLQkJcmF0ZXNBcnJheVtyYXRlSHQyMF8wICsgaV0gPSB0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldOwotCi0JaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQlyYXRlc0FycmF5W3JhdGUxbF0gPSB0YXJnZXRQb3dlckNjay50UG93MnhbMF07Ci0JCXJhdGVzQXJyYXlbcmF0ZTJzXSA9IHJhdGVzQXJyYXlbcmF0ZTJsXSA9Ci0JCQl0YXJnZXRQb3dlckNjay50UG93MnhbMV07Ci0JCXJhdGVzQXJyYXlbcmF0ZTVfNXNdID0gcmF0ZXNBcnJheVtyYXRlNV81bF0gPQotCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzJdOwotCQk7Ci0JCXJhdGVzQXJyYXlbcmF0ZTExc10gPSByYXRlc0FycmF5W3JhdGUxMWxdID0KLQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFszXTsKLQkJOwotCX0KLQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOyBpKyspIHsKLQkJCXJhdGVzQXJyYXlbcmF0ZUh0NDBfMCArIGldID0KLQkJCQl0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldOwotCQl9Ci0JCXJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dID0gdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFswXTsKLQkJcmF0ZXNBcnJheVtyYXRlRHVwQ2NrXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07Ci0JCXJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dID0gdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXTsKLQkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQkJcmF0ZXNBcnJheVtyYXRlRXh0Q2NrXSA9Ci0JCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19kZWZfc2V0X3R4cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICB1MTYgY2ZnQ3RsLAotCQkJCSAgICB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkJICAgIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCSAgICB1OCBwb3dlckxpbWl0KQotewotI2RlZmluZSBSVF9BUl9ERUxUQSh4KSAocmF0ZXNBcnJheVt4XSAtIGNja19vZmRtX2RlbHRhKQotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5kZWY7Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9Ci0JCSYocEVlcERhdGEtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwotCWludDE2X3QgcmF0ZXNBcnJheVtBcjU0MTZSYXRlU2l6ZV07Ci0JaW50MTZfdCB0eFBvd2VySW5kZXhPZmZzZXQgPSAwOwotCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjID0gMjsKLQlpbnQgaSwgY2NrX29mZG1fZGVsdGEgPSAwOwotCi0JbWVtc2V0KHJhdGVzQXJyYXksIDAsIHNpemVvZihyYXRlc0FycmF5KSk7Ci0KLQlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7Ci0JCWh0NDBQb3dlckluY0ZvclBkYWRjID0gcE1vZGFsLT5odDQwUG93ZXJJbmNGb3JQZGFkYzsKLQl9Ci0KLQlhdGg5a19od19zZXRfZGVmX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAotCQkJCQkgICAgICAgJnJhdGVzQXJyYXlbMF0sIGNmZ0N0bCwKLQkJCQkJICAgICAgIHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKLQkJCQkJICAgICAgIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCQkgICAgICAgcG93ZXJMaW1pdCk7Ci0KLQlhdGg5a19od19zZXRfZGVmX3Bvd2VyX2NhbF90YWJsZShhaCwgY2hhbiwgJnR4UG93ZXJJbmRleE9mZnNldCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlc0FycmF5KTsgaSsrKSB7Ci0JCXJhdGVzQXJyYXlbaV0gPQkoaW50MTZfdCkodHhQb3dlckluZGV4T2Zmc2V0ICsgcmF0ZXNBcnJheVtpXSk7Ci0JCWlmIChyYXRlc0FycmF5W2ldID4gQVI1NDE2X01BWF9SQVRFX1BPV0VSKQotCQkJcmF0ZXNBcnJheVtpXSA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQl9Ci0KLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQXI1NDE2UmF0ZVNpemU7IGkrKykKLQkJCXJhdGVzQXJyYXlbaV0gLT0gQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOwotCX0KLQotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTJtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTltYl0sIDgpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNm1iXSwgMCkpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUyLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1NG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNDhtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTM2bWJdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTI0bWJdLCAwKSk7Ci0KLQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7Ci0JCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgewotCQkJY2NrX29mZG1fZGVsdGEgPSAyOwotCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCi0JCQkJQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUycyksIDI0KQotCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUybCksIDE2KQotCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKLQkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMWwpLCAwKSk7Ci0JCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNCwKLQkJCQlBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTExcyksIDI0KQotCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUxMWwpLCAxNikKLQkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlNV81cyksIDgpCi0JCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTVfNWwpLCAwKSk7Ci0JCX0gZWxzZSB7Ci0JCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMywKLQkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMnNdLCAyNCkKLQkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUybF0sIDE2KQotCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKLQkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxbF0sIDApKTsKLQkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU0LAotCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMXNdLCAyNCkKLQkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMWxdLCAxNikKLQkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVzXSwgOCkKLQkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVsXSwgMCkpOwotCQl9Ci0JfQotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTUsCi0JCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfM10sIDI0KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMV0sIDgpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8wXSwgMCkpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU2LAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzddLCAyNCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzZdLCAxNikKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzVdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNF0sIDApKTsKLQotCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTcsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzNdICsKLQkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzJdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8xXSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8wXSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOCwKLQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfN10gKwotCQkJCSAgICAgICBodDQwUG93ZXJJbmNGb3JQZGFkYywgMjQpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNl0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzVdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzRdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAwKSk7Ci0JCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgewotCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTksCi0JCQkJQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dLCAyNCkKLQkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlRXh0Q2NrKSwgMTYpCi0JCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCi0JCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZUR1cENjayksIDApKTsKLQkJfSBlbHNlIHsKLQkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAotCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSwgMjQpCi0JCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0Q2NrXSwgMTYpCi0JCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCi0JCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwQ2NrXSwgMCkpOwotCQl9Ci0JfQotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfU1VCLAotCQkgIEFUSDlLX1BPV19TTShwTW9kYWwtPnB3ckRlY3JlYXNlRm9yM0NoYWluLCA2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHBNb2RhbC0+cHdyRGVjcmVhc2VGb3IyQ2hhaW4sIDApKTsKLQotCWkgPSByYXRlNm1iOwotCi0JaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKLQkJaSA9IHJhdGVIdDQwXzA7Ci0JZWxzZSBpZiAoSVNfQ0hBTl9IVDIwKGNoYW4pKQotCQlpID0gcmF0ZUh0MjBfMDsKLQotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQotCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgPQotCQkJcmF0ZXNBcnJheVtpXSArIEFSNTQxNl9QV1JfVEFCTEVfT0ZGU0VUICogMjsKLQllbHNlCi0JCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07Ci0KLQlzd2l0Y2goYXI1NDE2X2dldF9udHhjaGFpbnMoYWgtPnR4Y2hhaW5tYXNrKSkgewotCWNhc2UgMToKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RXT19DSEFJTjsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RIUkVFX0NIQUlOOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiSW52YWxpZCBjaGFpbm1hc2sgY29uZmlndXJhdGlvblxuIik7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHU4IGF0aDlrX2h3X2RlZl9nZXRfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBmcmVxX2JhbmQpCi17Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9Ci0JCSYoZWVwLT5tb2RhbEhlYWRlcltBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFogPT0gZnJlcV9iYW5kXSk7Ci0Jc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOwotCXU4IG51bV9hbnRfY29uZmlnOwotCi0JbnVtX2FudF9jb25maWcgPSAxOwotCi0JaWYgKHBCYXNlLT52ZXJzaW9uID49IDB4MEUwRCkKLQkJaWYgKHBNb2RhbC0+dXNlQW50MSkKLQkJCW51bV9hbnRfY29uZmlnICs9IDE7Ci0KLQlyZXR1cm4gbnVtX2FudF9jb25maWc7Ci19Ci0KLXN0YXRpYyB1MTYgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKLXsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKLQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KLQkJJihlZXAtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwotCi0JcmV0dXJuIHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjsKLX0KLQotc3RhdGljIHUxNiBhdGg5a19od19kZWZfZ2V0X3NwdXJfY2hhbm5lbChzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KQotewotI2RlZmluZSBFRVBfREVGX1NQVVJDSEFOIFwKLQkoYWgtPmVlcHJvbS5kZWYubW9kYWxIZWFkZXJbaXMyR0h6XS5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pCi0KLQl1MTYgc3B1cl92YWwgPSBBUl9OT19TUFVSOwotCi0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAotCQkiR2V0dGluZyBzcHVyIGlkeCAlZCBpczJHaHouICVkIHZhbCAleFxuIiwKLQkJaSwgaXMyR0h6LCBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdKTsKLQotCXN3aXRjaCAoYWgtPmNvbmZpZy5zcHVybW9kZSkgewotCWNhc2UgU1BVUl9ESVNBQkxFOgotCQlicmVhazsKLQljYXNlIFNQVVJfRU5BQkxFX0lPQ1RMOgotCQlzcHVyX3ZhbCA9IGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel07Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKLQkJCSJHZXR0aW5nIHNwdXIgdmFsIGZyb20gbmV3IGxvYy4gJWRcbiIsIHNwdXJfdmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFVSX0VOQUJMRV9FRVBST006Ci0JCXNwdXJfdmFsID0gRUVQX0RFRl9TUFVSQ0hBTjsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHNwdXJfdmFsOwotCi0jdW5kZWYgRUVQX0RFRl9TUFVSQ0hBTgotfQotCi1zdGF0aWMgc3RydWN0IGVlcHJvbV9vcHMgZWVwX2RlZl9vcHMgPSB7Ci0JLmNoZWNrX2VlcHJvbQkJPSBhdGg5a19od19kZWZfY2hlY2tfZWVwcm9tLAotCS5nZXRfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tLAotCS5maWxsX2VlcHJvbQkJPSBhdGg5a19od19kZWZfZmlsbF9lZXByb20sCi0JLmdldF9lZXByb21fdmVyCQk9IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX3ZlciwKLQkuZ2V0X2VlcHJvbV9yZXYJCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fcmV2LAotCS5nZXRfbnVtX2FudF9jb25maWcJPSBhdGg5a19od19kZWZfZ2V0X251bV9hbnRfY29uZmlnLAotCS5nZXRfZWVwcm9tX2FudGVubmFfY2ZnCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fYW50ZW5uYV9jZmcsCi0JLnNldF9ib2FyZF92YWx1ZXMJPSBhdGg5a19od19kZWZfc2V0X2JvYXJkX3ZhbHVlcywKLQkuc2V0X2FkZGFjCQk9IGF0aDlrX2h3X2RlZl9zZXRfYWRkYWMsCi0JLnNldF90eHBvd2VyCQk9IGF0aDlrX2h3X2RlZl9zZXRfdHhwb3dlciwKLQkuZ2V0X3NwdXJfY2hhbm5lbAk9IGF0aDlrX2h3X2RlZl9nZXRfc3B1cl9jaGFubmVsCi19OwotCi1pbnQgYXRoOWtfaHdfZWVwcm9tX2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKK2ludCBhdGg5a19od19lZXByb21faW5pdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpbnQgc3RhdHVzOwogCi0JaWYgKEFSX1NSRVZfOTI4NShhaCkpIHsKKwlpZiAoQVJfU1JFVl85Mjg3KGFoKSkgeworCQlhaC0+ZWVwX21hcCA9IEVFUF9NQVBfQVI5Mjg3OworCQlhaC0+ZWVwX29wcyA9ICZlZXBfQVI5Mjg3X29wczsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4NShhaCkgfHwgQVJfU1JFVl85MjcxKGFoKSkgewogCQlhaC0+ZWVwX21hcCA9IEVFUF9NQVBfNEtCSVRTOwogCQlhaC0+ZWVwX29wcyA9ICZlZXBfNGtfb3BzOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmgKaW5kZXggNjdiOGJkMTIuLjRmZTMzZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmgKQEAgLTEwMCw2ICsxMDAsOCBAQAogI2RlZmluZSBBUjU0MTZfVkVSX01BU0sgKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykKICNkZWZpbmUgT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIgKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkgJiYgXAogCQkJCSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX09MX1BXUkNUUkwpKQorI2RlZmluZSBPTENfRk9SX0FSOTI4N18xMF9MQVRFUiAoQVJfU1JFVl85Mjg3XzEwX09SX0xBVEVSKGFoKSAmJiBcCisJCQkJIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT0xfUFdSQ1RSTCkpCiAKICNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMICAgICAweDAwMWMKICNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMX1MgICAyCkBAIC0xNzYsNiArMTc4LDU3IEBACiAKICNkZWZpbmUgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAyMgogCisjZGVmaW5lIEFSOTI4N19FRVBfVkVSICAgICAgICAgICAgICAgMHhFCisjZGVmaW5lIEFSOTI4N19FRVBfVkVSX01JTk9SX01BU0sgICAgMHhGRkYKKyNkZWZpbmUgQVI5Mjg3X0VFUF9NSU5PUl9WRVJfMSAgICAgICAweDEKKyNkZWZpbmUgQVI5Mjg3X0VFUF9NSU5PUl9WRVJfMiAgICAgICAweDIKKyNkZWZpbmUgQVI5Mjg3X0VFUF9NSU5PUl9WRVJfMyAgICAgICAweDMKKyNkZWZpbmUgQVI5Mjg3X0VFUF9NSU5PUl9WRVIgICAgICAgICBBUjkyODdfRUVQX01JTk9SX1ZFUl8zCisjZGVmaW5lIEFSOTI4N19FRVBfTUlOT1JfVkVSX2IgICAgICAgQVI5Mjg3X0VFUF9NSU5PUl9WRVIKKyNkZWZpbmUgQVI5Mjg3X0VFUF9OT19CQUNLX1ZFUiAgICAgICBBUjkyODdfRUVQX01JTk9SX1ZFUl8xCisKKyNkZWZpbmUgQVI5Mjg3X0VFUF9TVEFSVF9MT0MgICAgICAgICAgICAxMjgKKyNkZWZpbmUgQVI5Mjg3X05VTV8yR19DQUxfUElFUlMgICAgICAgICAzCisjZGVmaW5lIEFSOTI4N19OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMgMworI2RlZmluZSBBUjkyODdfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMgIDMKKyNkZWZpbmUgQVI5Mjg3X05VTV8yR180MF9UQVJHRVRfUE9XRVJTICAzCisjZGVmaW5lIEFSOTI4N19OVU1fQ1RMUyAgICAgICAgICAgICAgCTEyCisjZGVmaW5lIEFSOTI4N19OVU1fQkFORF9FREdFUyAgICAgICAgCTQKKyNkZWZpbmUgQVI5Mjg3X05VTV9QRF9HQUlOUyAgICAgICAgICAgICA0CisjZGVmaW5lIEFSOTI4N19QRF9HQUlOU19JTl9NQVNLICAgICAgICAgNAorI2RlZmluZSBBUjkyODdfUERfR0FJTl9JQ0VQVFMgICAgICAgICAgIDEKKyNkZWZpbmUgQVI5Mjg3X0VFUFJPTV9NT0RBTF9TUFVSUyAgICAgICA1CisjZGVmaW5lIEFSOTI4N19NQVhfUkFURV9QT1dFUiAgICAgICAgICAgNjMKKyNkZWZpbmUgQVI5Mjg3X05VTV9QREFEQ19WQUxVRVMgICAgICAgICAxMjgKKyNkZWZpbmUgQVI5Mjg3X05VTV9SQVRFUyAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBUjkyODdfQkNIQU5fVU5VU0VEICAgICAgICAgICAgIDB4RkYKKyNkZWZpbmUgQVI5Mjg3X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQiA2NAorI2RlZmluZSBBUjkyODdfT1BGTEFHU18xMUEgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQVI5Mjg3X09QRkxBR1NfMTFHICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEFSOTI4N19PUEZMQUdTXzJHX0hUNDAgICAgICAgICAgMHgwOAorI2RlZmluZSBBUjkyODdfT1BGTEFHU18yR19IVDIwICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQVI5Mjg3X09QRkxBR1NfNUdfSFQ0MCAgICAgICAgICAweDA0CisjZGVmaW5lIEFSOTI4N19PUEZMQUdTXzVHX0hUMjAgICAgICAgICAgMHgxMAorI2RlZmluZSBBUjkyODdfRUVQTUlTQ19CSUdfRU5ESUFOICAgICAgIDB4MDEKKyNkZWZpbmUgQVI5Mjg3X0VFUE1JU0NfV09XICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEFSOTI4N19NQVhfQ0hBSU5TICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUjkyODdfQU5UXzE2UyAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEFSOTI4N19jdXN0ZGF0YXNpemUgICAgICAgICAgICAgMjAKKworI2RlZmluZSBBUjkyODdfTlVNX0FOVF9DSEFJTl9GSUVMRFMgICAgIDYKKyNkZWZpbmUgQVI5Mjg3X05VTV9BTlRfQ09NTU9OX0ZJRUxEUyAgICA0CisjZGVmaW5lIEFSOTI4N19TSVpFX0FOVF9DSEFJTl9GSUVMRCAgICAgMgorI2RlZmluZSBBUjkyODdfU0laRV9BTlRfQ09NTU9OX0ZJRUxEICAgIDQKKyNkZWZpbmUgQVI5Mjg3X0FOVF9DSEFJTl9NQVNLICAgICAgICAgICAweDMKKyNkZWZpbmUgQVI5Mjg3X0FOVF9DT01NT05fTUFTSyAgICAgICAgICAweGYKKyNkZWZpbmUgQVI5Mjg3X0NIQUlOXzBfSURYICAgICAgICAgICAgICAwCisjZGVmaW5lIEFSOTI4N19DSEFJTl8xX0lEWCAgICAgICAgICAgICAgMQorI2RlZmluZSBBUjkyODdfREFUQV9TWiAgICAgICAgICAgICAgICAgIDMyCisKKyNkZWZpbmUgQVI5Mjg3X1BXUl9UQUJMRV9PRkZTRVRfREIgIC01CisKKyNkZWZpbmUgQVI5Mjg3X0NIRUNLU1VNX0xPQ0FUSU9OIChBUjkyODdfRUVQX1NUQVJUX0xPQyArIDEpCisKIGVudW0gZWVwcm9tX3BhcmFtIHsKIAlFRVBfTkZUSFJFU0hfNSwKIAlFRVBfTkZUSFJFU0hfMiwKQEAgLTE5OSw3ICsyNTIsMTEgQEAKIAlFRVBfT0xfUFdSQ1RSTCwKIAlFRVBfUkNfQ0hBSU5fTUFTSywKIAlFRVBfREFDX0hQV1JfNUcsCi0JRUVQX0ZSQUNfTl81RworCUVFUF9GUkFDX05fNUcsCisJRUVQX0RFVl9UWVBFLAorCUVFUF9URU1QU0VOU0VfU0xPUEUsCisJRUVQX1RFTVBTRU5TRV9TTE9QRV9QQUxfT04sCisJRUVQX1BXUl9UQUJMRV9PRkZTRVQKIH07CiAKIGVudW0gYXI1NDE2X3JhdGVzIHsKQEAgLTMyOCw0NiArMzg1LDEyMyBAQAogfSBfX3BhY2tlZDsKIAogc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgewotCXUzMiAgYW50Q3RybENoYWluW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1MzIgIGFudEN0cmxDb21tb247Ci0JdTggICBhbnRlbm5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1OCAgIHN3aXRjaFNldHRsaW5nOwotCXU4ICAgdHhSeEF0dGVuQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotCXU4ICAgcnhUeE1hcmdpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1OCAgIGFkY0Rlc2lyZWRTaXplOwotCXU4ICAgcGdhRGVzaXJlZFNpemU7Ci0JdTggICB4bG5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1OCAgIHR4RW5kVG9YcGFPZmY7Ci0JdTggICB0eEVuZFRvUnhPbjsKLQl1OCAgIHR4RnJhbWVUb1hwYU9uOwotCXU4ICAgdGhyZXNoNjI7Ci0JdTggICBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotCXU4ICAgeHBkR2FpbjsKLQl1OCAgIHhwZDsKLQl1OCAgIGlxQ2FsSUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1OCAgIGlxQ2FsUUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1OCAgIHBkR2Fpbk92ZXJsYXA7Ci0JdTggICBvYl8wMTsKLQl1OCAgIGRiMV8wMTsKLQl1OCAgIHhwYUJpYXNMdmw7Ci0JdTggICB0eEZyYW1lVG9EYXRhU3RhcnQ7Ci0JdTggICB0eEZyYW1lVG9QYU9uOwotCXU4ICAgaHQ0MFBvd2VySW5jRm9yUGRhZGM7Ci0JdTggICBic3dBdHRlbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107Ci0JdTggICBic3dNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotCXU4ICAgc3dTZXR0bGVIdDQwOwotCXU4ICAgeGF0dGVuMkRiW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1OCAgIHhhdHRlbjJNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotCXU4ICAgZGIyXzAxOwotCXU4ICAgdmVyc2lvbjsKLQl1MTYgIG9iXzIzNDsKLQl1MTYgIGRiMV8yMzQ7Ci0JdTE2ICBkYjJfMjM0OwotCXU4ICAgZnV0dXJlTW9kYWxbNF07Ci0KKwl1MzIgYW50Q3RybENoYWluW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1MzIgYW50Q3RybENvbW1vbjsKKwl1OCBhbnRlbm5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCBzd2l0Y2hTZXR0bGluZzsKKwl1OCB0eFJ4QXR0ZW5DaFtBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggcnhUeE1hcmdpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCBhZGNEZXNpcmVkU2l6ZTsKKwl1OCBwZ2FEZXNpcmVkU2l6ZTsKKwl1OCB4bG5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCB0eEVuZFRvWHBhT2ZmOworCXU4IHR4RW5kVG9SeE9uOworCXU4IHR4RnJhbWVUb1hwYU9uOworCXU4IHRocmVzaDYyOworCXU4IG5vaXNlRmxvb3JUaHJlc2hDaFtBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggeHBkR2FpbjsKKwl1OCB4cGQ7CisJdTggaXFDYWxJQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4IGlxQ2FsUUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCBwZEdhaW5PdmVybGFwOworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorCXU4IG9iXzE6NCwgb2JfMDo0OworCXU4IGRiMV8xOjQsIGRiMV8wOjQ7CisjZWxzZQorCXU4IG9iXzA6NCwgb2JfMTo0OworCXU4IGRiMV8wOjQsIGRiMV8xOjQ7CisjZW5kaWYKKwl1OCB4cGFCaWFzTHZsOworCXU4IHR4RnJhbWVUb0RhdGFTdGFydDsKKwl1OCB0eEZyYW1lVG9QYU9uOworCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjOworCXU4IGJzd0F0dGVuW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCBic3dNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4IHN3U2V0dGxlSHQ0MDsKKwl1OCB4YXR0ZW4yRGJbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4IHhhdHRlbjJNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorCXU4IGRiMl8xOjQsIGRiMl8wOjQ7CisjZWxzZQorCXU4IGRiMl8wOjQsIGRiMl8xOjQ7CisjZW5kaWYKKwl1OCB2ZXJzaW9uOworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorCXU4IG9iXzM6NCwgb2JfMjo0OworCXU4IGFudGRpdl9jdGwxOjQsIG9iXzQ6NDsKKwl1OCBkYjFfMzo0LCBkYjFfMjo0OworCXU4IGFudGRpdl9jdGwyOjQsIGRiMV80OjQ7CisJdTggZGIyXzI6NCwgZGIyXzM6NDsKKwl1OCByZXNlcnZlZDo0LCBkYjJfNDo0OworI2Vsc2UKKwl1OCBvYl8yOjQsIG9iXzM6NDsKKwl1OCBvYl80OjQsIGFudGRpdl9jdGwxOjQ7CisJdTggZGIxXzI6NCwgZGIxXzM6NDsKKwl1OCBkYjFfNDo0LCBhbnRkaXZfY3RsMjo0OworCXU4IGRiMl8yOjQsIGRiMl8zOjQ7CisJdTggZGIyXzQ6NCwgcmVzZXJ2ZWQ6NDsKKyNlbmRpZgorCXU4IGZ1dHVyZU1vZGFsWzRdOwogCXN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSNTQxNl9FRVBST01fTU9EQUxfU1BVUlNdOwogfSBfX3BhY2tlZDsKIAorc3RydWN0IGJhc2VfZWVwX2FyOTI4N19oZWFkZXIgeworCXUxNiBsZW5ndGg7CisJdTE2IGNoZWNrc3VtOworCXUxNiB2ZXJzaW9uOworCXU4IG9wQ2FwRmxhZ3M7CisJdTggZWVwTWlzYzsKKwl1MTYgcmVnRG1uWzJdOworCXU4IG1hY0FkZHJbNl07CisJdTggcnhNYXNrOworCXU4IHR4TWFzazsKKwl1MTYgcmZTaWxlbnQ7CisJdTE2IGJsdWVUb290aE9wdGlvbnM7CisJdTE2IGRldmljZUNhcDsKKwl1MzIgYmluQnVpbGROdW1iZXI7CisJdTggZGV2aWNlVHlwZTsKKwl1OCBvcGVuTG9vcFB3ckNudGw7CisJaW50OF90IHB3clRhYmxlT2Zmc2V0OworCWludDhfdCB0ZW1wU2Vuc1Nsb3BlOworCWludDhfdCB0ZW1wU2Vuc1Nsb3BlUGFsT247CisJdTggZnV0dXJlQmFzZVsyOV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbW9kYWxfZWVwX2FyOTI4N19oZWFkZXIgeworCXUzMiBhbnRDdHJsQ2hhaW5bQVI5Mjg3X01BWF9DSEFJTlNdOworCXUzMiBhbnRDdHJsQ29tbW9uOworCWludDhfdCBhbnRlbm5hR2FpbkNoW0FSOTI4N19NQVhfQ0hBSU5TXTsKKwl1OCBzd2l0Y2hTZXR0bGluZzsKKwl1OCB0eFJ4QXR0ZW5DaFtBUjkyODdfTUFYX0NIQUlOU107CisJdTggcnhUeE1hcmdpbkNoW0FSOTI4N19NQVhfQ0hBSU5TXTsKKwlpbnQ4X3QgYWRjRGVzaXJlZFNpemU7CisJdTggdHhFbmRUb1hwYU9mZjsKKwl1OCB0eEVuZFRvUnhPbjsKKwl1OCB0eEZyYW1lVG9YcGFPbjsKKwl1OCB0aHJlc2g2MjsKKwlpbnQ4X3Qgbm9pc2VGbG9vclRocmVzaENoW0FSOTI4N19NQVhfQ0hBSU5TXTsKKwl1OCB4cGRHYWluOworCXU4IHhwZDsKKwlpbnQ4X3QgaXFDYWxJQ2hbQVI5Mjg3X01BWF9DSEFJTlNdOworCWludDhfdCBpcUNhbFFDaFtBUjkyODdfTUFYX0NIQUlOU107CisJdTggcGRHYWluT3ZlcmxhcDsKKwl1OCB4cGFCaWFzTHZsOworCXU4IHR4RnJhbWVUb0RhdGFTdGFydDsKKwl1OCB0eEZyYW1lVG9QYU9uOworCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjOworCXU4IGJzd0F0dGVuW0FSOTI4N19NQVhfQ0hBSU5TXTsKKwl1OCBic3dNYXJnaW5bQVI5Mjg3X01BWF9DSEFJTlNdOworCXU4IHN3U2V0dGxlSHQ0MDsKKwl1OCB2ZXJzaW9uOworCXU4IGRiMTsKKwl1OCBkYjI7CisJdTggb2JfY2NrOworCXU4IG9iX3BzazsKKwl1OCBvYl9xYW07CisJdTggb2JfcGFsX29mZjsKKwl1OCBmdXR1cmVNb2RhbFszMF07CisJc3RydWN0IHNwdXJfY2hhbiBzcHVyQ2hhbnNbQVI5Mjg3X0VFUFJPTV9NT0RBTF9TUFVSU107Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgewogCXU4IHB3clBkZ1tBUjU0MTZfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOwpAQCAtNDAyLDYgKzUzNiwyOCBAQAogfSBfX3BhY2tlZDsKICNlbmRpZgogCitzdHJ1Y3QgY2FsX2RhdGFfb3BfbG9vcF9hcjkyODcgeworCXU4IHB3clBkZ1syXVs1XTsKKwl1OCB2cGRQZGdbMl1bNV07CisJdTggcGNkYWNbMl1bNV07CisJdTggZW1wdHlbMl1bNV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfYXI5Mjg3IHsKKwl1OCBwd3JQZGdbQVI5Mjg3X05VTV9QRF9HQUlOU11bQVI5Mjg3X1BEX0dBSU5fSUNFUFRTXTsKKwl1OCB2cGRQZGdbQVI5Mjg3X05VTV9QRF9HQUlOU11bQVI5Mjg3X1BEX0dBSU5fSUNFUFRTXTsKK30gX19wYWNrZWQ7CisKK3VuaW9uIGNhbF9kYXRhX3Blcl9mcmVxX2FyOTI4N191IHsKKwlzdHJ1Y3QgY2FsX2RhdGFfb3BfbG9vcF9hcjkyODcgY2FsRGF0YU9wZW47CisJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxX2FyOTI4NyBjYWxEYXRhQ2xvc2U7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgY2FsX2N0bF9kYXRhX2FyOTI4NyB7CisJc3RydWN0IGNhbF9jdGxfZWRnZXMKKwljdGxFZGdlc1tBUjkyODdfTUFYX0NIQUlOU11bQVI5Mjg3X05VTV9CQU5EX0VER0VTXTsKK30gX19wYWNrZWQ7CisKIHN0cnVjdCBjYWxfY3RsX2RhdGEgewogCXN0cnVjdCBjYWxfY3RsX2VkZ2VzCiAJY3RsRWRnZXNbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fQkFORF9FREdFU107CkBAIC00NjEsNiArNjE3LDI2IEBACiAJdTggcGFkZGluZzsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCBhcjkyODdfZWVwcm9tIHsKKwlzdHJ1Y3QgYmFzZV9lZXBfYXI5Mjg3X2hlYWRlciBiYXNlRWVwSGVhZGVyOworCXU4IGN1c3REYXRhW0FSOTI4N19EQVRBX1NaXTsKKwlzdHJ1Y3QgbW9kYWxfZWVwX2FyOTI4N19oZWFkZXIgbW9kYWxIZWFkZXI7CisJdTggY2FsRnJlcVBpZXIyR1tBUjkyODdfTlVNXzJHX0NBTF9QSUVSU107CisJdW5pb24gY2FsX2RhdGFfcGVyX2ZyZXFfYXI5Mjg3X3UKKwljYWxQaWVyRGF0YTJHW0FSOTI4N19NQVhfQ0hBSU5TXVtBUjkyODdfTlVNXzJHX0NBTF9QSUVSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCisJY2FsVGFyZ2V0UG93ZXJDY2tbQVI5Mjg3X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCisJY2FsVGFyZ2V0UG93ZXIyR1tBUjkyODdfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0CisJY2FsVGFyZ2V0UG93ZXIyR0hUMjBbQVI5Mjg3X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAorCWNhbFRhcmdldFBvd2VyMkdIVDQwW0FSOTI4N19OVU1fMkdfNDBfVEFSR0VUX1BPV0VSU107CisJdTggY3RsSW5kZXhbQVI5Mjg3X05VTV9DVExTXTsKKwlzdHJ1Y3QgY2FsX2N0bF9kYXRhX2FyOTI4NyBjdGxEYXRhW0FSOTI4N19OVU1fQ1RMU107CisJdTggcGFkZGluZzsKK30gX19wYWNrZWQ7CisKIGVudW0gcmVnX2V4dF9iaXRtYXAgewogCVJFR19FWFRfSkFQQU5fTUlEQkFORCA9IDEsCiAJUkVHX0VYVF9GQ0NfREZTX0hUNDAgPSAyLApAQCAtNDgwLDYgKzY1Niw3IEBACiBlbnVtIGF0aDlrX2VlcF9tYXAgewogCUVFUF9NQVBfREVGQVVMVCA9IDB4MCwKIAlFRVBfTUFQXzRLQklUUywKKwlFRVBfTUFQX0FSOTI4NywKIAlFRVBfTUFQX01BWAogfTsKIApAQCAtNTAwLDEwICs2NzcsMzkgQEAKIAl1MTYgKCpnZXRfc3B1cl9jaGFubmVsKShzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KTsKIH07CiAKK3ZvaWQgYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZywgdTMyIG1hc2ssCisJCQkgICAgICAgdTMyIHNoaWZ0LCB1MzIgdmFsKTsKK2ludDE2X3QgYXRoOWtfaHdfaW50ZXJwb2xhdGUodTE2IHRhcmdldCwgdTE2IHNyY0xlZnQsIHUxNiBzcmNSaWdodCwKKwkJCSAgICAgaW50MTZfdCB0YXJnZXRMZWZ0LAorCQkJICAgICBpbnQxNl90IHRhcmdldFJpZ2h0KTsKK2Jvb2wgYXRoOWtfaHdfZ2V0X2xvd2VyX3VwcGVyX2luZGV4KHU4IHRhcmdldCwgdTggKnBMaXN0LCB1MTYgbGlzdFNpemUsCisJCQkJICAgIHUxNiAqaW5kZXhMLCB1MTYgKmluZGV4Uik7Citib29sIGF0aDlrX2h3X252cmFtX3JlYWQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBvZmYsIHUxNiAqZGF0YSk7Cit2b2lkIGF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKHU4IHB3ck1pbiwgdTggcHdyTWF4LCB1OCAqcFB3ckxpc3QsCisJCQkgICAgIHU4ICpwVnBkTGlzdCwgdTE2IG51bUludGVyY2VwdHMsCisJCQkgICAgIHU4ICpwUmV0VnBkTGlzdCk7Cit2b2lkIGF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJICAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyAqcG93SW5mbywKKwkJCQkgICAgICAgdTE2IG51bUNoYW5uZWxzLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgKnBOZXdQb3dlciwKKwkJCQkgICAgICAgdTE2IG51bVJhdGVzLCBib29sIGlzRXh0VGFyZ2V0KTsKK3ZvaWQgYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgKnBvd0luZm8sCisJCQkJdTE2IG51bUNoYW5uZWxzLAorCQkJCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0ICpwTmV3UG93ZXIsCisJCQkJdTE2IG51bVJhdGVzLCBib29sIGlzSHQ0MFRhcmdldCk7Cit1MTYgYXRoOWtfaHdfZ2V0X21heF9lZGdlX3Bvd2VyKHUxNiBmcmVxLCBzdHJ1Y3QgY2FsX2N0bF9lZGdlcyAqcFJkRWRnZXNQb3dlciwKKwkJCQlib29sIGlzMkdIeiwgaW50IG51bV9iYW5kX2VkZ2VzKTsKK2ludCBhdGg5a19od19lZXByb21faW5pdChzdHJ1Y3QgYXRoX2h3ICphaCk7CisKICNkZWZpbmUgYXI1NDE2X2dldF9udHhjaGFpbnMoX3R4Y2hhaW5tYXNrKQkJCVwKIAkoKChfdHhjaGFpbm1hc2sgPj4gMikgJiAxKSArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkgKChfdHhjaGFpbm1hc2sgPj4gMSkgJiAxKSArIChfdHhjaGFpbm1hc2sgJiAxKSkKIAotaW50IGF0aDlrX2h3X2VlcHJvbV9hdHRhY2goc3RydWN0IGF0aF9odyAqYWgpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBlZXByb21fb3BzIGVlcF9kZWZfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBlZXByb21fb3BzIGVlcF80a19vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGVlcHJvbV9vcHMgZWVwX0FSOTI4N19vcHM7CiAKICNlbmRpZiAvKiBFRVBST01fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV80ay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV80ay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZWNhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzRrLmMKQEAgLTAsMCArMSwxMTg4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImF0aDlrLmgiCisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV92ZXIoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuICgoYWgtPmVlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPj4gMTIpICYgMHhGKTsKK30KKworc3RhdGljIGludCBhdGg5a19od180a19nZXRfZWVwcm9tX3JldihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gKChhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIudmVyc2lvbikgJiAweEZGRik7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3XzRrX2ZpbGxfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoKQoreworI2RlZmluZSBTSVpFX0VFUFJPTV80SyAoc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrKSAvIHNpemVvZih1MTYpKQorCXUxNiAqZWVwX2RhdGEgPSAodTE2ICopJmFoLT5lZXByb20ubWFwNGs7CisJaW50IGFkZHIsIGVlcF9zdGFydF9sb2MgPSAwOworCisJZWVwX3N0YXJ0X2xvYyA9IDY0OworCisJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJSZWFkaW5nIGZyb20gRUVQUk9NLCBub3QgZmxhc2hcbiIpOworCX0KKworCWZvciAoYWRkciA9IDA7IGFkZHIgPCBTSVpFX0VFUFJPTV80SzsgYWRkcisrKSB7CisJCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgYWRkciArIGVlcF9zdGFydF9sb2MsIGVlcF9kYXRhKSkgeworCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJICAgICAgICJVbmFibGUgdG8gcmVhZCBlZXByb20gcmVnaW9uIFxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJZWVwX2RhdGErKzsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKKyN1bmRlZiBTSVpFX0VFUFJPTV80SworfQorCitzdGF0aWMgaW50IGF0aDlrX2h3XzRrX2NoZWNrX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKyNkZWZpbmUgRUVQUk9NXzRLX1NJWkUgKHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80aykgLyBzaXplb2YodTE2KSkKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0KKwkJKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICopICZhaC0+ZWVwcm9tLm1hcDRrOworCXUxNiAqZWVwZGF0YSwgdGVtcCwgbWFnaWMsIG1hZ2ljMjsKKwl1MzIgc3VtID0gMCwgZWw7CisJYm9vbCBuZWVkX3N3YXAgPSBmYWxzZTsKKwlpbnQgaSwgYWRkcjsKKworCisJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7CisJCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQsCisJCQkJCSAmbWFnaWMpKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCQkiUmVhZGluZyBNYWdpYyAjIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOworCisJCWlmIChtYWdpYyAhPSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7CisJCQltYWdpYzIgPSBzd2FiMTYobWFnaWMpOworCisJCQlpZiAobWFnaWMyID09IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKKwkJCQluZWVkX3N3YXAgPSB0cnVlOworCQkJCWVlcGRhdGEgPSAodTE2ICopICgmYWgtPmVlcHJvbSk7CisKKwkJCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgRUVQUk9NXzRLX1NJWkU7IGFkZHIrKykgeworCQkJCQl0ZW1wID0gc3dhYjE2KCplZXBkYXRhKTsKKwkJCQkJKmVlcGRhdGEgPSB0ZW1wOworCQkJCQllZXBkYXRhKys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCQkJIkludmFsaWQgRUVQUk9NIE1hZ2ljLiAiCisJCQkJCSJlbmRpYW5uZXNzIG1pc21hdGNoLlxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwl9CisKKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sICJuZWVkX3N3YXAgPSAlcy5cbiIsCisJCW5lZWRfc3dhcCA/ICJUcnVlIiA6ICJGYWxzZSIpOworCisJaWYgKG5lZWRfc3dhcCkKKwkJZWwgPSBzd2FiMTYoYWgtPmVlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJZWxzZQorCQllbCA9IGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci5sZW5ndGg7CisKKwlpZiAoZWwgPiBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fNGspKQorCQllbCA9IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80aykgLyBzaXplb2YodTE2KTsKKwllbHNlCisJCWVsID0gZWwgLyBzaXplb2YodTE2KTsKKworCWVlcGRhdGEgPSAodTE2ICopKCZhaC0+ZWVwcm9tKTsKKworCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQorCQlzdW0gXj0gKmVlcGRhdGErKzsKKworCWlmIChuZWVkX3N3YXApIHsKKwkJdTMyIGludGVnZXI7CisJCXUxNiB3b3JkOworCisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJFRVBST00gRW5kaWFubmVzcyBpcyBub3QgbmF0aXZlLi4gQ2hhbmdpbmdcbiIpOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGggPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmNoZWNrc3VtKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLmNoZWNrc3VtID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblswXSk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblsxXSk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJmU2lsZW50KTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLnJmU2lsZW50ID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLmJsdWVUb290aE9wdGlvbnMgPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmRldmljZUNhcCk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXAgPSB3b3JkOworCisJCWludGVnZXIgPSBzd2FiMzIoZWVwLT5tb2RhbEhlYWRlci5hbnRDdHJsQ29tbW9uKTsKKwkJZWVwLT5tb2RhbEhlYWRlci5hbnRDdHJsQ29tbW9uID0gaW50ZWdlcjsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X0VFUDRLX01BWF9DSEFJTlM7IGkrKykgeworCQkJaW50ZWdlciA9IHN3YWIzMihlZXAtPm1vZGFsSGVhZGVyLmFudEN0cmxDaGFpbltpXSk7CisJCQllZXAtPm1vZGFsSGVhZGVyLmFudEN0cmxDaGFpbltpXSA9IGludGVnZXI7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7CisJCQl3b3JkID0gc3dhYjE2KGVlcC0+bW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuKTsKKwkJCWVlcC0+bW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuID0gd29yZDsKKwkJfQorCX0KKworCWlmIChzdW0gIT0gMHhmZmZmIHx8IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgIT0gQVI1NDE2X0VFUF9WRVIgfHwKKwkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTk9fQkFDS19WRVIpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkiQmFkIEVFUFJPTSBjaGVja3N1bSAweCV4IG9yIHJldmlzaW9uIDB4JTA0eFxuIiwKKwkJCXN1bSwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworI3VuZGVmIEVFUFJPTV80S19TSVpFCit9CisKK3N0YXRpYyB1MzIgYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CisJc3RydWN0IGJhc2VfZWVwX2hlYWRlcl80ayAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOworCisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgRUVQX05GVEhSRVNIXzI6CisJCXJldHVybiBwTW9kYWwtPm5vaXNlRmxvb3JUaHJlc2hDaFswXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMCk6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkclswXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbMV07CisJY2FzZSBBUl9FRVBST01fTUFDKDEpOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMl0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzNdOworCWNhc2UgQVJfRUVQUk9NX01BQygyKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzRdIDw8IDggfCBwQmFzZS0+bWFjQWRkcls1XTsKKwljYXNlIEVFUF9SRUdfMDoKKwkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMF07CisJY2FzZSBFRVBfUkVHXzE6CisJCXJldHVybiBwQmFzZS0+cmVnRG1uWzFdOworCWNhc2UgRUVQX09QX0NBUDoKKwkJcmV0dXJuIHBCYXNlLT5kZXZpY2VDYXA7CisJY2FzZSBFRVBfT1BfTU9ERToKKwkJcmV0dXJuIHBCYXNlLT5vcENhcEZsYWdzOworCWNhc2UgRUVQX1JGX1NJTEVOVDoKKwkJcmV0dXJuIHBCYXNlLT5yZlNpbGVudDsKKwljYXNlIEVFUF9PQl8yOgorCQlyZXR1cm4gcE1vZGFsLT5vYl8wOworCWNhc2UgRUVQX0RCXzI6CisJCXJldHVybiBwTW9kYWwtPmRiMV8xOworCWNhc2UgRUVQX01JTk9SX1JFVjoKKwkJcmV0dXJuIHBCYXNlLT52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSzsKKwljYXNlIEVFUF9UWF9NQVNLOgorCQlyZXR1cm4gcEJhc2UtPnR4TWFzazsKKwljYXNlIEVFUF9SWF9NQVNLOgorCQlyZXR1cm4gcEJhc2UtPnJ4TWFzazsKKwljYXNlIEVFUF9GUkFDX05fNUc6CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCisJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxXzRrICpwUmF3RGF0YVNldCwKKwkJCQl1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKKwkJCQl1MTYgdFBkR2Fpbk92ZXJsYXAsIGludDE2X3QgKnBNaW5DYWxQb3dlciwKKwkJCQl1MTYgKnBQZEdhaW5Cb3VuZGFyaWVzLCB1OCAqcFBEQURDVmFsdWVzLAorCQkJCXUxNiBudW1YcGRHYWlucykKK3sKKyNkZWZpbmUgVE1QX1ZBTF9WUERfVEFCTEUgXAorCSgodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSArIChzcyAtIG1heEluZGV4ICsgMSkgKiB2cGRTdGVwKSk7CisJaW50IGksIGosIGs7CisJaW50MTZfdCBzczsKKwl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwLCBudW1QaWVyczsKKwlzdGF0aWMgdTggdnBkVGFibGVMW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCisJCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKKwlzdGF0aWMgdTggdnBkVGFibGVSW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCisJCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKKwlzdGF0aWMgdTggdnBkVGFibGVJW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCisJCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKKworCXU4ICpwVnBkTCwgKnBWcGRSLCAqcFB3ckwsICpwUHdyUjsKKwl1OCBtaW5Qd3JUNFtBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXTsKKwl1OCBtYXhQd3JUNFtBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXTsKKwlpbnQxNl90IHZwZFN0ZXA7CisJaW50MTZfdCB0bXBWYWw7CisJdTE2IHNpemVDdXJyVnBkVGFibGUsIG1heEluZGV4LCB0Z3RJbmRleDsKKwlib29sIG1hdGNoOworCWludDE2X3QgbWluRGVsdGEgPSAwOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKyNkZWZpbmUgUERfR0FJTl9CT1VOREFSWV9ERUZBVUxUIDU4OworCisJYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOworCisJZm9yIChudW1QaWVycyA9IDA7IG51bVBpZXJzIDwgYXZhaWxQaWVyczsgbnVtUGllcnMrKykgeworCQlpZiAoYkNoYW5zW251bVBpZXJzXSA9PSBBUjU0MTZfQkNIQU5fVU5VU0VEKQorCQkJYnJlYWs7CisJfQorCisJbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCisJCQkJCSh1OClGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCisJCQkJCUlTX0NIQU5fMkdIWihjaGFuKSksIGJDaGFucywgbnVtUGllcnMsCisJCQkJCSZpZHhMLCAmaWR4Uik7CisKKwlpZiAobWF0Y2gpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJCW1pblB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzBdOworCQkJbWF4UHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bNF07CisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCXBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXSwKKwkJCQkJcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldLAorCQkJCQlBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMsCisJCQkJCXZwZFRhYmxlSVtpXSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgeworCQkJcFZwZEwgPSBwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV07CisJCQlwUHdyTCA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXTsKKwkJCXBWcGRSID0gcFJhd0RhdGFTZXRbaWR4Ul0udnBkUGRnW2ldOworCQkJcFB3clIgPSBwUmF3RGF0YVNldFtpZHhSXS5wd3JQZGdbaV07CisKKwkJCW1pblB3clQ0W2ldID0gbWF4KHBQd3JMWzBdLCBwUHdyUlswXSk7CisKKwkJCW1heFB3clQ0W2ldID0KKwkJCQltaW4ocFB3ckxbQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTIC0gMV0sCisJCQkJICAgIHBQd3JSW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUUyAtIDFdKTsKKworCisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCQlwUHdyTCwgcFZwZEwsCisJCQkJCQlBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMsCisJCQkJCQl2cGRUYWJsZUxbaV0pOworCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAorCQkJCQkJcFB3clIsIHBWcGRSLAorCQkJCQkJQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTLAorCQkJCQkJdnBkVGFibGVSW2ldKTsKKworCQkJZm9yIChqID0gMDsgaiA8PSAobWF4UHdyVDRbaV0gLSBtaW5Qd3JUNFtpXSkgLyAyOyBqKyspIHsKKwkJCQl2cGRUYWJsZUlbaV1bal0gPQorCQkJCQkodTgpKGF0aDlrX2h3X2ludGVycG9sYXRlKCh1MTYpCisJCQkJCSAgICAgRlJFUTJGQklOKGNlbnRlcnMuCisJCQkJCQkgICAgICAgc3ludGhfY2VudGVyLAorCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWgorCQkJCQkJICAgICAgIChjaGFuKSksCisJCQkJCSAgICAgYkNoYW5zW2lkeExdLCBiQ2hhbnNbaWR4Ul0sCisJCQkJCSAgICAgdnBkVGFibGVMW2ldW2pdLCB2cGRUYWJsZVJbaV1bal0pKTsKKwkJCX0KKwkJfQorCX0KKworCSpwTWluQ2FsUG93ZXIgPSAoaW50MTZfdCkobWluUHdyVDRbMF0gLyAyKTsKKworCWsgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJaWYgKGkgPT0gKG51bVhwZEdhaW5zIC0gMSkpCisJCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CisJCQkJKHUxNikobWF4UHdyVDRbaV0gLyAyKTsKKwkJZWxzZQorCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQorCQkJCSh1MTYpKChtYXhQd3JUNFtpXSArIG1pblB3clQ0W2kgKyAxXSkgLyA0KTsKKworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CisJCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKKworCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCW1pbkRlbHRhID0gcFBkR2FpbkJvdW5kYXJpZXNbMF0gLSAyMzsKKwkJCXBQZEdhaW5Cb3VuZGFyaWVzWzBdID0gMjM7CisJCX0gZWxzZSB7CisJCQltaW5EZWx0YSA9IDA7CisJCX0KKworCQlpZiAoaSA9PSAwKSB7CisJCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJCQlzcyA9IChpbnQxNl90KSgwIC0gKG1pblB3clQ0W2ldIC8gMikpOworCQkJZWxzZQorCQkJCXNzID0gMDsKKwkJfSBlbHNlIHsKKwkJCXNzID0gKGludDE2X3QpKChwUGRHYWluQm91bmRhcmllc1tpIC0gMV0gLQorCQkJCQkobWluUHdyVDRbaV0gLyAyKSkgLQorCQkJCSAgICAgICB0UGRHYWluT3ZlcmxhcCArIDEgKyBtaW5EZWx0YSk7CisJCX0KKwkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMV0gLSB2cGRUYWJsZUlbaV1bMF0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisKKwkJd2hpbGUgKChzcyA8IDApICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CisJCQl0bXBWYWwgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzBdICsgc3MgKiB2cGRTdGVwKTsKKwkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsIDwgMCkgPyAwIDogdG1wVmFsKTsKKwkJCXNzKys7CisJCX0KKworCQlzaXplQ3VyclZwZFRhYmxlID0gKHU4KSAoKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMiArIDEpOworCQl0Z3RJbmRleCA9ICh1OCkocFBkR2FpbkJvdW5kYXJpZXNbaV0gKyB0UGRHYWluT3ZlcmxhcCAtCisJCQkJKG1pblB3clQ0W2ldIC8gMikpOworCQltYXhJbmRleCA9ICh0Z3RJbmRleCA8IHNpemVDdXJyVnBkVGFibGUpID8KKwkJCXRndEluZGV4IDogc2l6ZUN1cnJWcGRUYWJsZTsKKworCQl3aGlsZSAoKHNzIDwgbWF4SW5kZXgpICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKQorCQkJcFBEQURDVmFsdWVzW2srK10gPSB2cGRUYWJsZUlbaV1bc3MrK107CisKKwkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDFdIC0KKwkJCQkgICAgdnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAyXSk7CisJCXZwZFN0ZXAgPSAoaW50MTZfdCkoKHZwZFN0ZXAgPCAxKSA/IDEgOiB2cGRTdGVwKTsKKworCQlpZiAodGd0SW5kZXggPj0gbWF4SW5kZXgpIHsKKwkJCXdoaWxlICgoc3MgPD0gdGd0SW5kZXgpICYmCisJCQkgICAgICAgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKKwkJCQl0bXBWYWwgPSAoaW50MTZfdCkgVE1QX1ZBTF9WUERfVEFCTEU7CisJCQkJcFBEQURDVmFsdWVzW2srK10gPSAodTgpKCh0bXBWYWwgPiAyNTUpID8KKwkJCQkJCQkgMjU1IDogdG1wVmFsKTsKKwkJCQlzcysrOworCQkJfQorCQl9CisJfQorCisJd2hpbGUgKGkgPCBBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSykgeworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9IFBEX0dBSU5fQk9VTkRBUllfREVGQVVMVDsKKwkJaSsrOworCX0KKworCXdoaWxlIChrIDwgQVI1NDE2X05VTV9QREFEQ19WQUxVRVMpIHsKKwkJcFBEQURDVmFsdWVzW2tdID0gcFBEQURDVmFsdWVzW2sgLSAxXTsKKwkJaysrOworCX0KKworCXJldHVybjsKKyN1bmRlZiBUTVBfVkFMX1ZQRF9UQUJMRQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfNGtfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJICBpbnQxNl90ICpwVHhQb3dlckluZGV4T2Zmc2V0KQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDRrOworCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayAqcFJhd0RhdGFzZXQ7CisJdTggKnBDYWxCQ2hhbnMgPSBOVUxMOworCXUxNiBwZEdhaW5PdmVybGFwX3QyOworCXN0YXRpYyB1OCBwZGFkY1ZhbHVlc1tBUjU0MTZfTlVNX1BEQURDX1ZBTFVFU107CisJdTE2IGdhaW5Cb3VuZGFyaWVzW0FSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLXTsKKwl1MTYgbnVtUGllcnMsIGksIGo7CisJaW50MTZfdCB0TWluQ2FsUG93ZXI7CisJdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7CisJdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU10gPSB7IDAsIDAgfTsKKwl1MzIgcmVnMzIsIHJlZ09mZnNldCwgcmVnQ2hhaW5PZmZzZXQ7CisKKwl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLnhwZEdhaW47CisKKwlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7CisJCXBkR2Fpbk92ZXJsYXBfdDIgPQorCQkJcEVlcERhdGEtPm1vZGFsSGVhZGVyLnBkR2Fpbk92ZXJsYXA7CisJfSBlbHNlIHsKKwkJcGRHYWluT3ZlcmxhcF90MiA9ICh1MTYpKE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFBDUkc1KSwKKwkJCQkJICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKSk7CisJfQorCisJcENhbEJDaGFucyA9IHBFZXBEYXRhLT5jYWxGcmVxUGllcjJHOworCW51bVBpZXJzID0gQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlM7CisKKwludW1YcGRHYWluID0gMDsKKworCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X0VFUDRLX1BEX0dBSU5TX0lOX01BU0s7IGkrKykgeworCQlpZiAoKHhwZE1hc2sgPj4gKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgeworCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOUykKKwkJCQlicmVhazsKKwkJCXhwZEdhaW5WYWx1ZXNbbnVtWHBkR2Fpbl0gPQorCQkJCSh1MTYpKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSk7CisJCQludW1YcGRHYWluKys7CisJCX0KKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOLAorCQkgICAgICAobnVtWHBkR2FpbiAtIDEpICYgMHgzKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMSwKKwkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCisJCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCisJCSAgICAoaSAhPSAwKSkgeworCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKKwkJfSBlbHNlCisJCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7CisKKwkJaWYgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnR4TWFzayAmICgxIDw8IGkpKSB7CisJCQlwUmF3RGF0YXNldCA9IHBFZXBEYXRhLT5jYWxQaWVyRGF0YTJHW2ldOworCisJCQlhdGg5a19od19nZXRfNGtfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwgY2hhbiwKKwkJCQkJICAgIHBSYXdEYXRhc2V0LCBwQ2FsQkNoYW5zLAorCQkJCQkgICAgbnVtUGllcnMsIHBkR2Fpbk92ZXJsYXBfdDIsCisJCQkJCSAgICAmdE1pbkNhbFBvd2VyLCBnYWluQm91bmRhcmllcywKKwkJCQkJICAgIHBkYWRjVmFsdWVzLCBudW1YcGRHYWluKTsKKworCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKKwkJCQkJICBTTShwZEdhaW5PdmVybGFwX3QyLAorCQkJCQkgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKQorCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMF0sCisJCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMSkKKwkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzFdLAorCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzIpCisJCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1syXSwKKwkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8zKQorCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbM10sCisJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80KSk7CisJCQl9CisKKwkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArIHJlZ0NoYWluT2Zmc2V0OworCQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKKwkJCQlyZWczMiA9ICgocGRhZGNWYWx1ZXNbNCAqIGogKyAwXSAmIDB4RkYpIDw8IDApIHwKKwkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDFdICYgMHhGRikgPDwgOCkgfAorCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgMl0gJiAweEZGKSA8PCAxNil8CisJCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAzXSAmIDB4RkYpIDw8IDI0KTsKKwkJCQlSRUdfV1JJVEUoYWgsIHJlZ09mZnNldCwgcmVnMzIpOworCisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAorCQkJCQlpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAorCQkJCQlyZWczMik7CisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJCQkiUERBREM6IENoYWluICVkIHwgIgorCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKKwkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCisJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgorCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8XG4iLAorCQkJCQlpLCA0ICogaiwgcGRhZGNWYWx1ZXNbNCAqIGpdLAorCQkJCQk0ICogaiArIDEsIHBkYWRjVmFsdWVzWzQgKiBqICsgMV0sCisJCQkJCTQgKiBqICsgMiwgcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKKwkJCQkJNCAqIGogKyAzLAorCQkJCQlwZGFkY1ZhbHVlc1s0ICogaiArIDNdKTsKKworCQkJCXJlZ09mZnNldCArPSA0OworCQkJfQorCQl9CisJfQorCisJKnBUeFBvd2VySW5kZXhPZmZzZXQgPSAwOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfNGtfcG93ZXJfcGVyX3JhdGVfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJCQkgaW50MTZfdCAqcmF0ZXNBcnJheSwKKwkJCQkJCSB1MTYgY2ZnQ3RsLAorCQkJCQkJIHUxNiBBbnRlbm5hUmVkdWN0aW9uLAorCQkJCQkJIHUxNiB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkJCSB1MTYgcG93ZXJMaW1pdCkKK3sKKyNkZWZpbmUgQ01QX1RFU1RfR1JQIFwKKwkoKChjZmdDdGwgJiB+Q1RMX01PREVfTSl8IChwQ3RsTW9kZVtjdGxNb2RlXSAmIENUTF9NT0RFX00pKSA9PQlcCisJIHBFZXBEYXRhLT5jdGxJbmRleFtpXSkJCQkJCQlcCisJfHwgKCgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pIHwgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09IFwKKwkgICAgKChwRWVwRGF0YS0+Y3RsSW5kZXhbaV0gJiBDVExfTU9ERV9NKSB8IFNEX05PX0NUTCkpCisKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwlpbnQgaTsKKwlpbnQxNl90IHR3aWNlTGFyZ2VzdEFudGVubmE7CisJdTE2IHR3aWNlTWluRWRnZVBvd2VyOworCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwl1MTYgc2NhbGVkUG93ZXIgPSAwLCBtaW5DdGxQb3dlciwgbWF4UmVnQWxsb3dlZFBvd2VyOworCXUxNiBudW1DdGxNb2RlcywgKnBDdGxNb2RlLCBjdGxNb2RlLCBmcmVxOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwlzdHJ1Y3QgY2FsX2N0bF9kYXRhXzRrICpyZXA7CisJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKnBFZXBEYXRhID0gJmFoLT5lZXByb20ubWFwNGs7CisJc3RhdGljIGNvbnN0IHUxNiB0cFNjYWxlUmVkdWN0aW9uVGFibGVbNV0gPQorCQl7IDAsIDMsIDYsIDksIEFSNTQxNl9NQVhfUkFURV9QT1dFUiB9OworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB0YXJnZXRQb3dlck9mZG0sIHRhcmdldFBvd2VyQ2NrID0geworCQkwLCB7IDAsIDAsIDAsIDB9CisJfTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtRXh0ID0geworCQkwLCB7IDAsIDAsIDAsIDB9IH0sIHRhcmdldFBvd2VyQ2NrRXh0ID0geworCQkwLCB7IDAsIDAsIDAsIDAgfQorCX07CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgdGFyZ2V0UG93ZXJIdDIwLCB0YXJnZXRQb3dlckh0NDAgPSB7CisJCTAsIHswLCAwLCAwLCAwfQorCX07CisJdTE2IGN0bE1vZGVzRm9yMTFnW10gPQorCQl7IENUTF8xMUIsIENUTF8xMUcsIENUTF8yR0hUMjAsIENUTF8xMUJfRVhULCBDVExfMTFHX0VYVCwKKwkJICBDVExfMkdIVDQwCisJCX07CisKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CisKKwl0d2ljZUxhcmdlc3RBbnRlbm5hID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLmFudGVubmFHYWluQ2hbMF07CisJdHdpY2VMYXJnZXN0QW50ZW5uYSA9IChpbnQxNl90KW1pbihBbnRlbm5hUmVkdWN0aW9uIC0KKwkJCQkJICAgdHdpY2VMYXJnZXN0QW50ZW5uYSwgMCk7CisKKwltYXhSZWdBbGxvd2VkUG93ZXIgPSB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciArIHR3aWNlTGFyZ2VzdEFudGVubmE7CisJaWYgKHJlZ3VsYXRvcnktPnRwX3NjYWxlICE9IEFUSDlLX1RQX1NDQUxFX01BWCkgeworCQltYXhSZWdBbGxvd2VkUG93ZXIgLT0KKwkJCSh0cFNjYWxlUmVkdWN0aW9uVGFibGVbKHJlZ3VsYXRvcnktPnRwX3NjYWxlKV0gKiAyKTsKKwl9CisKKwlzY2FsZWRQb3dlciA9IG1pbihwb3dlckxpbWl0LCBtYXhSZWdBbGxvd2VkUG93ZXIpOworCXNjYWxlZFBvd2VyID0gbWF4KCh1MTYpMCwgc2NhbGVkUG93ZXIpOworCisJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKSAtIFNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwOworCXBDdGxNb2RlID0gY3RsTW9kZXNGb3IxMWc7CisKKwlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXJDY2ssCisJCQlBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAorCQkJJnRhcmdldFBvd2VyQ2NrLCA0LCBmYWxzZSk7CisJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCisJCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkmdGFyZ2V0UG93ZXJPZmRtLCA0LCBmYWxzZSk7CisJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUMjAsCisJCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkmdGFyZ2V0UG93ZXJIdDIwLCA4LCBmYWxzZSk7CisKKwlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7CisJCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZyk7CisJCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHSFQ0MCwKKwkJCQlBUjU0MTZfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VySHQ0MCwgOCwgdHJ1ZSk7CisJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXJDY2ssCisJCQkJQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUywKKwkJCQkmdGFyZ2V0UG93ZXJDY2tFeHQsIDQsIHRydWUpOworCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCisJCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAorCQkJCSZ0YXJnZXRQb3dlck9mZG1FeHQsIDQsIHRydWUpOworCX0KKworCWZvciAoY3RsTW9kZSA9IDA7IGN0bE1vZGUgPCBudW1DdGxNb2RlczsgY3RsTW9kZSsrKSB7CisJCWJvb2wgaXNIdDQwQ3RsTW9kZSA9IChwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfNUdIVDQwKSB8fAorCQkJKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF8yR0hUNDApOworCisJCWlmIChpc0h0NDBDdGxNb2RlKQorCQkJZnJlcSA9IGNlbnRlcnMuc3ludGhfY2VudGVyOworCQllbHNlIGlmIChwQ3RsTW9kZVtjdGxNb2RlXSAmIEVYVF9BRERJVElWRSkKKwkJCWZyZXEgPSBjZW50ZXJzLmV4dF9jZW50ZXI7CisJCWVsc2UKKwkJCWZyZXEgPSBjZW50ZXJzLmN0bF9jZW50ZXI7CisKKwkJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgPT0gMTQgJiYKKwkJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPD0gMikKKwkJCXR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCisJCWZvciAoaSA9IDA7IChpIDwgQVI1NDE2X0VFUDRLX05VTV9DVExTKSAmJgorCQkJICAgICBwRWVwRGF0YS0+Y3RsSW5kZXhbaV07IGkrKykgeworCisJCQlpZiAoQ01QX1RFU1RfR1JQKSB7CisJCQkJcmVwID0gJihwRWVwRGF0YS0+Y3RsRGF0YVtpXSk7CisKKwkJCQl0d2ljZU1pbkVkZ2VQb3dlciA9IGF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcigKKwkJCQkJZnJlcSwKKwkJCQkJcmVwLT5jdGxFZGdlc1sKKwkJCQkJYXI1NDE2X2dldF9udHhjaGFpbnMoYWgtPnR4Y2hhaW5tYXNrKSAtIDFdLAorCQkJCQlJU19DSEFOXzJHSFooY2hhbiksCisJCQkJCUFSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFUyk7CisKKwkJCQlpZiAoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSA9PSBTRF9OT19DVEwpIHsKKwkJCQkJdHdpY2VNYXhFZGdlUG93ZXIgPQorCQkJCQkJbWluKHR3aWNlTWF4RWRnZVBvd2VyLAorCQkJCQkJICAgIHR3aWNlTWluRWRnZVBvd2VyKTsKKwkJCQl9IGVsc2UgeworCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IHR3aWNlTWluRWRnZVBvd2VyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQltaW5DdGxQb3dlciA9ICh1OCltaW4odHdpY2VNYXhFZGdlUG93ZXIsIHNjYWxlZFBvd2VyKTsKKworCQlzd2l0Y2ggKHBDdGxNb2RlW2N0bE1vZGVdKSB7CisJCWNhc2UgQ1RMXzExQjoKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyQ2NrLnRQb3cyeCk7IGkrKykgeworCQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSwKKwkJCQkJICAgIG1pbkN0bFBvd2VyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENUTF8xMUc6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlck9mZG0udFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMkdIVDIwOgorCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7IGkrKykgeworCQkJCXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0gPQorCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldLAorCQkJCQkgICAgbWluQ3RsUG93ZXIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzExQl9FWFQ6CisJCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0gPQorCQkJCW1pbigodTE2KXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXSwKKwkJCQkgICAgbWluQ3RsUG93ZXIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzExR19FWFQ6CisJCQl0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdID0KKwkJCQltaW4oKHUxNil0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdLAorCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQlicmVhazsKKwkJY2FzZSBDVExfMkdIVDQwOgorCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7IGkrKykgeworCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0gPQorCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldLAorCQkJCQkgICAgbWluQ3RsUG93ZXIpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCXJhdGVzQXJyYXlbcmF0ZTZtYl0gPQorCXJhdGVzQXJyYXlbcmF0ZTltYl0gPQorCXJhdGVzQXJyYXlbcmF0ZTEybWJdID0KKwlyYXRlc0FycmF5W3JhdGUxOG1iXSA9CisJcmF0ZXNBcnJheVtyYXRlMjRtYl0gPQorCXRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07CisKKwlyYXRlc0FycmF5W3JhdGUzNm1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMV07CisJcmF0ZXNBcnJheVtyYXRlNDhtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzJdOworCXJhdGVzQXJyYXlbcmF0ZTU0bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFszXTsKKwlyYXRlc0FycmF5W3JhdGVYcl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzBdOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7IGkrKykKKwkJcmF0ZXNBcnJheVtyYXRlSHQyMF8wICsgaV0gPSB0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldOworCisJcmF0ZXNBcnJheVtyYXRlMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzBdOworCXJhdGVzQXJyYXlbcmF0ZTJzXSA9IHJhdGVzQXJyYXlbcmF0ZTJsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFsxXTsKKwlyYXRlc0FycmF5W3JhdGU1XzVzXSA9IHJhdGVzQXJyYXlbcmF0ZTVfNWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzJdOworCXJhdGVzQXJyYXlbcmF0ZTExc10gPSByYXRlc0FycmF5W3JhdGUxMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzNdOworCisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0NDAudFBvdzJ4KTsgaSsrKSB7CisJCQlyYXRlc0FycmF5W3JhdGVIdDQwXzAgKyBpXSA9CisJCQkJdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXTsKKwkJfQorCQlyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07CisJCXJhdGVzQXJyYXlbcmF0ZUR1cENja10gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSA9IHRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF07CisJCXJhdGVzQXJyYXlbcmF0ZUV4dENja10gPSB0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF07CisJfQorCisjdW5kZWYgQ01QX1RFU1RfR1JQCit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3XzRrX3NldF90eHBvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgdTE2IGNmZ0N0bCwKKwkJCQkgICAgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAorCQkJCSAgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkgICAgdTggcG93ZXJMaW1pdCkKK3sKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJnBFZXBEYXRhLT5tb2RhbEhlYWRlcjsKKwlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOworCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKKwl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYyA9IDI7CisJaW50IGk7CisKKwltZW1zZXQocmF0ZXNBcnJheSwgMCwgc2l6ZW9mKHJhdGVzQXJyYXkpKTsKKworCWlmICgocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49CisJICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKKwkJaHQ0MFBvd2VySW5jRm9yUGRhZGMgPSBwTW9kYWwtPmh0NDBQb3dlckluY0ZvclBkYWRjOworCX0KKworCWF0aDlrX2h3X3NldF80a19wb3dlcl9wZXJfcmF0ZV90YWJsZShhaCwgY2hhbiwKKwkJCQkJICAgICAmcmF0ZXNBcnJheVswXSwgY2ZnQ3RsLAorCQkJCQkgICAgIHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkJICAgICB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkJICAgICBwb3dlckxpbWl0KTsKKworCWF0aDlrX2h3X3NldF80a19wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZXNBcnJheSk7IGkrKykgeworCQlyYXRlc0FycmF5W2ldID0JKGludDE2X3QpKHR4UG93ZXJJbmRleE9mZnNldCArIHJhdGVzQXJyYXlbaV0pOworCQlpZiAocmF0ZXNBcnJheVtpXSA+IEFSNTQxNl9NQVhfUkFURV9QT1dFUikKKwkJCXJhdGVzQXJyYXlbaV0gPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisJfQorCisKKwkvKiBVcGRhdGUgcmVndWxhdG9yeSAqLworCisJaSA9IHJhdGU2bWI7CisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJaSA9IHJhdGVIdDQwXzA7CisJZWxzZSBpZiAoSVNfQ0hBTl9IVDIwKGNoYW4pKQorCQlpID0gcmF0ZUh0MjBfMDsKKworCXJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQXI1NDE2UmF0ZVNpemU7IGkrKykKKwkJCXJhdGVzQXJyYXlbaV0gLT0gQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOworCX0KKworCS8qIE9GRE0gcG93ZXIgcGVyIHJhdGUgKi8KKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMSwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMThtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTEybWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU5bWJdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTZtYl0sIDApKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMiwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNTRtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTQ4bWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUzNm1iXSwgOCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyNG1iXSwgMCkpOworCisJLyogQ0NLIHBvd2VyIHBlciByYXRlICovCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCisJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJzXSwgMjQpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMmxdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVYcl0sIDgpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMWxdLCAwKSk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTQsCisJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExc10sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExbF0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNXNdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNWxdLCAwKSk7CisKKwkvKiBIVDIwIHBvd2VyIHBlciByYXRlICovCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTUsCisJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfM10sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMl0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMV0sIDgpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8wXSwgMCkpOworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU2LAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzddLCAyNCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzZdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzVdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNF0sIDApKTsKKworCS8qIEhUNDAgcG93ZXIgcGVyIHJhdGUgKi8KKwlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7CisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAorCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8zXSArCisJCQkJICAgICAgIGh0NDBQb3dlckluY0ZvclBkYWRjLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMV0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDgpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMF0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDApKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTgsCisJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzddICsKKwkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzZdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF81XSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF80XSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOSwKKwkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0Q2NrXSwgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dLCA4KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBDY2tdLCAwKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od180a19zZXRfYWRkYWMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwl1OCBiaWFzbGV2ZWw7CisKKwlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkKKwkJcmV0dXJuOworCisJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX01JTk9SX1ZFUl83KQorCQlyZXR1cm47CisKKwlwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKKworCWlmIChwTW9kYWwtPnhwYUJpYXNMdmwgIT0gMHhmZikgeworCQliaWFzbGV2ZWwgPSBwTW9kYWwtPnhwYUJpYXNMdmw7CisJCUlOSV9SQSgmYWgtPmluaUFkZGFjLCA3LCAxKSA9CisJCSAgKElOSV9SQSgmYWgtPmluaUFkZGFjLCA3LCAxKSAmICh+MHgxOCkpIHwgYmlhc2xldmVsIDw8IDM7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od180a19zZXRfZ2FpbihzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCwKKwkJCQkgc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCwKKwkJCQkgdTggdHhSeEF0dGVuTG9jYWwpCit7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAsCisJCSAgcE1vZGFsLT5hbnRDdHJsQ2hhaW5bMF0pOworCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApLAorCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSkgJgorCQkgICB+KEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGIHwKKwkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKKwkJICBTTShwTW9kYWwtPmlxQ2FsSUNoWzBdLCBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikgfAorCQkgIFNNKHBNb2RhbC0+aXFDYWxRQ2hbMF0sIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGKSk7CisKKwlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgeworCQl0eFJ4QXR0ZW5Mb2NhbCA9IHBNb2RhbC0+dHhSeEF0dGVuQ2hbMF07CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9NQVJHSU4sIHBNb2RhbC0+YnN3TWFyZ2luWzBdKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9EQiwgcE1vZGFsLT5ic3dBdHRlblswXSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFosCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfTUFSR0lOLAorCQkJICAgICAgcE1vZGFsLT54YXR0ZW4yTWFyZ2luWzBdKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9EQiwgcE1vZGFsLT54YXR0ZW4yRGJbMF0pOworCisJCS8qIFNldCB0aGUgYmxvY2sgMSB2YWx1ZSB0byBibG9jayAwIHZhbHVlICovCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyAweDEwMDAsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfTUFSR0lOLAorCQkJICAgICAgcE1vZGFsLT5ic3dNYXJnaW5bMF0pOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgMHgxMDAwLAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX0RCLCBwTW9kYWwtPmJzd0F0dGVuWzBdKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIDB4MTAwMCwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9NQVJHSU4sCisJCQkgICAgICBwTW9kYWwtPnhhdHRlbjJNYXJnaW5bMF0pOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgMHgxMDAwLAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX0RCLAorCQkJICAgICAgcE1vZGFsLT54YXR0ZW4yRGJbMF0pOworCX0KKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SWEdBSU4sCisJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfQVRURU4sIHR4UnhBdHRlbkxvY2FsKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUlhHQUlOLAorCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX01BUkdJTiwgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbMF0pOworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JYR0FJTiArIDB4MTAwMCwKKwkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9BVFRFTiwgdHhSeEF0dGVuTG9jYWwpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SWEdBSU4gKyAweDEwMDAsCisJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfTUFSR0lOLCBwTW9kYWwtPnJ4VHhNYXJnaW5DaFswXSk7CisKKwlpZiAoQVJfU1JFVl85Mjg1XzExKGFoKSkKKwkJUkVHX1dSSVRFKGFoLCBBUjkyODVfQU5fVE9QNCwgKEFSOTI4NV9BTl9UT1A0X0RFRkFVTFQgfCAweDE0KSk7Cit9CisKKy8qCisgKiBSZWFkIEVFUFJPTSBoZWFkZXIgaW5mbyBhbmQgcHJvZ3JhbSB0aGUgZGV2aWNlIGZvciBjb3JyZWN0IG9wZXJhdGlvbgorICogZ2l2ZW4gdGhlIGNoYW5uZWwgdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIGF0aDlrX2h3XzRrX3NldF9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwl1OCB0eFJ4QXR0ZW5Mb2NhbDsKKwl1OCBvYls1XSwgZGIxWzVdLCBkYjJbNV07CisJdTggYW50X2Rpdl9jb250cm9sMSwgYW50X2Rpdl9jb250cm9sMjsKKwl1MzIgcmVnVmFsOworCisJcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CisJdHhSeEF0dGVuTG9jYWwgPSAyMzsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sCisJCSAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4pKTsKKworCS8qIFNpbmdsZSBjaGFpbiBmb3IgNEsgRUVQUk9NKi8KKwlhdGg5a19od180a19zZXRfZ2FpbihhaCwgcE1vZGFsLCBlZXAsIHR4UnhBdHRlbkxvY2FsKTsKKworCS8qIEluaXRpYWxpemUgQW50IERpdmVyc2l0eSBzZXR0aW5ncyBmcm9tIEVFUFJPTSAqLworCWlmIChwTW9kYWwtPnZlcnNpb24gPj0gMykgeworCQlhbnRfZGl2X2NvbnRyb2wxID0gcE1vZGFsLT5hbnRkaXZfY3RsMTsKKwkJYW50X2Rpdl9jb250cm9sMiA9IHBNb2RhbC0+YW50ZGl2X2N0bDI7CisKKwkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9NVUxUSUNIQUlOX0dBSU5fQ1RMKTsKKwkJcmVnVmFsICY9ICh+KEFSX1BIWV85Mjg1X0FOVF9ESVZfQ1RMX0FMTCkpOworCisJCXJlZ1ZhbCB8PSBTTShhbnRfZGl2X2NvbnRyb2wxLAorCQkJICAgICBBUl9QSFlfOTI4NV9BTlRfRElWX0NUTCk7CisJCXJlZ1ZhbCB8PSBTTShhbnRfZGl2X2NvbnRyb2wyLAorCQkJICAgICBBUl9QSFlfOTI4NV9BTlRfRElWX0FMVF9MTkFDT05GKTsKKwkJcmVnVmFsIHw9IFNNKChhbnRfZGl2X2NvbnRyb2wyID4+IDIpLAorCQkJICAgICBBUl9QSFlfOTI4NV9BTlRfRElWX01BSU5fTE5BQ09ORik7CisJCXJlZ1ZhbCB8PSBTTSgoYW50X2Rpdl9jb250cm9sMSA+PiAxKSwKKwkJCSAgICAgQVJfUEhZXzkyODVfQU5UX0RJVl9BTFRfR0FJTlRCKTsKKwkJcmVnVmFsIHw9IFNNKChhbnRfZGl2X2NvbnRyb2wxID4+IDIpLAorCQkJICAgICBBUl9QSFlfOTI4NV9BTlRfRElWX01BSU5fR0FJTlRCKTsKKworCisJCVJFR19XUklURShhaCwgQVJfUEhZX01VTFRJQ0hBSU5fR0FJTl9DVEwsIHJlZ1ZhbCk7CisJCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCBBUl9QSFlfTVVMVElDSEFJTl9HQUlOX0NUTCk7CisJCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCBBUl9QSFlfQ0NLX0RFVEVDVCk7CisJCXJlZ1ZhbCAmPSAofkFSX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVYpOworCQlyZWdWYWwgfD0gU00oKGFudF9kaXZfY29udHJvbDEgPj4gMyksCisJCQkgICAgIEFSX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVYpOworCisJCVJFR19XUklURShhaCwgQVJfUEhZX0NDS19ERVRFQ1QsIHJlZ1ZhbCk7CisJCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCBBUl9QSFlfQ0NLX0RFVEVDVCk7CisJfQorCisJaWYgKHBNb2RhbC0+dmVyc2lvbiA+PSAyKSB7CisJCW9iWzBdID0gcE1vZGFsLT5vYl8wOworCQlvYlsxXSA9IHBNb2RhbC0+b2JfMTsKKwkJb2JbMl0gPSBwTW9kYWwtPm9iXzI7CisJCW9iWzNdID0gcE1vZGFsLT5vYl8zOworCQlvYls0XSA9IHBNb2RhbC0+b2JfNDsKKworCQlkYjFbMF0gPSBwTW9kYWwtPmRiMV8wOworCQlkYjFbMV0gPSBwTW9kYWwtPmRiMV8xOworCQlkYjFbMl0gPSBwTW9kYWwtPmRiMV8yOworCQlkYjFbM10gPSBwTW9kYWwtPmRiMV8zOworCQlkYjFbNF0gPSBwTW9kYWwtPmRiMV80OworCisJCWRiMlswXSA9IHBNb2RhbC0+ZGIyXzA7CisJCWRiMlsxXSA9IHBNb2RhbC0+ZGIyXzE7CisJCWRiMlsyXSA9IHBNb2RhbC0+ZGIyXzI7CisJCWRiMlszXSA9IHBNb2RhbC0+ZGIyXzM7CisJCWRiMls0XSA9IHBNb2RhbC0+ZGIyXzQ7CisJfSBlbHNlIGlmIChwTW9kYWwtPnZlcnNpb24gPT0gMSkgeworCQlvYlswXSA9IHBNb2RhbC0+b2JfMDsKKwkJb2JbMV0gPSBvYlsyXSA9IG9iWzNdID0gb2JbNF0gPSBwTW9kYWwtPm9iXzE7CisJCWRiMVswXSA9IHBNb2RhbC0+ZGIxXzA7CisJCWRiMVsxXSA9IGRiMVsyXSA9IGRiMVszXSA9IGRiMVs0XSA9IHBNb2RhbC0+ZGIxXzE7CisJCWRiMlswXSA9IHBNb2RhbC0+ZGIyXzA7CisJCWRiMlsxXSA9IGRiMlsyXSA9IGRiMlszXSA9IGRiMls0XSA9IHBNb2RhbC0+ZGIyXzE7CisJfSBlbHNlIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQkJb2JbaV0gPSBwTW9kYWwtPm9iXzA7CisJCQlkYjFbaV0gPSBwTW9kYWwtPmRiMV8wOworCQkJZGIyW2ldID0gcE1vZGFsLT5kYjFfMDsKKwkJfQorCX0KKworCWlmIChBUl9TUkVWXzkyNzEoYWgpKSB7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczLAorCQkJCQkgIEFSOTI3MV9BTl9SRjJHM19PQl9jY2ssCisJCQkJCSAgQVI5MjcxX0FOX1JGMkczX09CX2Nja19TLAorCQkJCQkgIG9iWzBdKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzMsCisJCQkJCSAgQVI5MjcxX0FOX1JGMkczX09CX3BzaywKKwkJCQkJICBBUjkyNzFfQU5fUkYyRzNfT0JfcHNrX1MsCisJCQkJCSAgb2JbMV0pOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHMywKKwkJCQkJICBBUjkyNzFfQU5fUkYyRzNfT0JfcWFtLAorCQkJCQkgIEFSOTI3MV9BTl9SRjJHM19PQl9xYW1fUywKKwkJCQkJICBvYlsyXSk7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczLAorCQkJCQkgIEFSOTI3MV9BTl9SRjJHM19EQl8xLAorCQkJCQkgIEFSOTI3MV9BTl9SRjJHM19EQl8xX1MsCisJCQkJCSAgZGIxWzBdKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzQsCisJCQkJCSAgQVI5MjcxX0FOX1JGMkc0X0RCXzIsCisJCQkJCSAgQVI5MjcxX0FOX1JGMkc0X0RCXzJfUywKKwkJCQkJICBkYjJbMF0pOworCX0gZWxzZSB7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHM19PQl8wLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHM19PQl8wX1MsCisJCQkJCSAgb2JbMF0pOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHMywKKwkJCQkJICBBUjkyODVfQU5fUkYyRzNfT0JfMSwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzNfT0JfMV9TLAorCQkJCQkgIG9iWzFdKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzMsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczX09CXzIsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczX09CXzJfUywKKwkJCQkJICBvYlsyXSk7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHM19PQl8zLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHM19PQl8zX1MsCisJCQkJCSAgb2JbM10pOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHMywKKwkJCQkJICBBUjkyODVfQU5fUkYyRzNfT0JfNCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzNfT0JfNF9TLAorCQkJCQkgIG9iWzRdKTsKKworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHMywKKwkJCQkJICBBUjkyODVfQU5fUkYyRzNfREIxXzAsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczX0RCMV8wX1MsCisJCQkJCSAgZGIxWzBdKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzMsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczX0RCMV8xLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHM19EQjFfMV9TLAorCQkJCQkgIGRiMVsxXSk7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHM19EQjFfMiwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzNfREIxXzJfUywKKwkJCQkJICBkYjFbMl0pOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzRfREIxXzMsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0X0RCMV8zX1MsCisJCQkJCSAgZGIxWzNdKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzQsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0X0RCMV80LAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNF9EQjFfNF9TLCBkYjFbNF0pOworCisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0LAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNF9EQjJfMCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzRfREIyXzBfUywKKwkJCQkJICBkYjJbMF0pOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzRfREIyXzEsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0X0RCMl8xX1MsCisJCQkJCSAgZGIyWzFdKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzQsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0X0RCMl8yLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNF9EQjJfMl9TLAorCQkJCQkgIGRiMlsyXSk7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0LAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNF9EQjJfMywKKwkJCQkJICBBUjkyODVfQU5fUkYyRzRfREIyXzNfUywKKwkJCQkJICBkYjJbM10pOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzRfREIyXzQsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0X0RCMl80X1MsCisJCQkJCSAgZGIyWzRdKTsKKwl9CisKKworCWlmIChBUl9TUkVWXzkyODVfMTEoYWgpKQorCQlSRUdfV1JJVEUoYWgsIEFSOTI4NV9BTl9UT1A0LCBBUjkyODVfQU5fVE9QNF9ERUZBVUxUKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKKwkJICAgICAgcE1vZGFsLT5zd2l0Y2hTZXR0bGluZyk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osIEFSX1BIWV9ERVNJUkVEX1NaX0FEQywKKwkJICAgICAgcE1vZGFsLT5hZGNEZXNpcmVkU2l6ZSk7CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SRl9DVEw0LAorCQkgIFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUFfT0ZGKSB8CisJCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQl9PRkYpIHwKKwkJICBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLCBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFBX09OKSAgfAorCQkgIFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUJfT04pKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwzLCBBUl9QSFlfVFhfRU5EX1RPX0EyX1JYX09OLAorCQkgICAgICBwTW9kYWwtPnR4RW5kVG9SeE9uKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUjkyODBfUEhZX0NDQV9USFJFU0g2MiwKKwkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EwLCBBUl9QSFlfRVhUX0NDQTBfVEhSRVNINjIsCisJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOworCisJaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49CisJCQkJCQlBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX0RBVEFfU1RBUlQsCisJCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb0RhdGFTdGFydCk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX1BBX09OLAorCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9QYU9uKTsKKwl9CisKKwlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkJCQkJCUFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKKwkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywKKwkJCQkgICAgICBBUl9QSFlfU0VUVExJTkdfU1dJVENILAorCQkJCSAgICAgIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKKwl9Cit9CisKK3N0YXRpYyB1MTYgYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDRrOworCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKKworCXJldHVybiBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7Cit9CisKK3N0YXRpYyB1OCBhdGg5a19od180a19nZXRfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHUxNiBhdGg5a19od180a19nZXRfc3B1cl9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgaSwgYm9vbCBpczJHSHopCit7CisjZGVmaW5lIEVFUF9NQVA0S19TUFVSQ0hBTiBcCisJKGFoLT5lZXByb20ubWFwNGsubW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQorCisJdTE2IHNwdXJfdmFsID0gQVJfTk9fU1BVUjsKKworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKKwkJIkdldHRpbmcgc3B1ciBpZHggJWQgaXMyR2h6LiAlZCB2YWwgJXhcbiIsCisJCWksIGlzMkdIeiwgYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XSk7CisKKwlzd2l0Y2ggKGFoLT5jb25maWcuc3B1cm1vZGUpIHsKKwljYXNlIFNQVVJfRElTQUJMRToKKwkJYnJlYWs7CisJY2FzZSBTUFVSX0VOQUJMRV9JT0NUTDoKKwkJc3B1cl92YWwgPSBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdOworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCQkiR2V0dGluZyBzcHVyIHZhbCBmcm9tIG5ldyBsb2MuICVkXG4iLCBzcHVyX3ZhbCk7CisJCWJyZWFrOworCWNhc2UgU1BVUl9FTkFCTEVfRUVQUk9NOgorCQlzcHVyX3ZhbCA9IEVFUF9NQVA0S19TUFVSQ0hBTjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHNwdXJfdmFsOworCisjdW5kZWYgRUVQX01BUDRLX1NQVVJDSEFOCit9CisKK2NvbnN0IHN0cnVjdCBlZXByb21fb3BzIGVlcF80a19vcHMgPSB7CisJLmNoZWNrX2VlcHJvbQkJPSBhdGg5a19od180a19jaGVja19lZXByb20sCisJLmdldF9lZXByb20JCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbSwKKwkuZmlsbF9lZXByb20JCT0gYXRoOWtfaHdfNGtfZmlsbF9lZXByb20sCisJLmdldF9lZXByb21fdmVyCQk9IGF0aDlrX2h3XzRrX2dldF9lZXByb21fdmVyLAorCS5nZXRfZWVwcm9tX3JldgkJPSBhdGg5a19od180a19nZXRfZWVwcm9tX3JldiwKKwkuZ2V0X251bV9hbnRfY29uZmlnCT0gYXRoOWtfaHdfNGtfZ2V0X251bV9hbnRfY29uZmlnLAorCS5nZXRfZWVwcm9tX2FudGVubmFfY2ZnCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZywKKwkuc2V0X2JvYXJkX3ZhbHVlcwk9IGF0aDlrX2h3XzRrX3NldF9ib2FyZF92YWx1ZXMsCisJLnNldF9hZGRhYwkJPSBhdGg5a19od180a19zZXRfYWRkYWMsCisJLnNldF90eHBvd2VyCQk9IGF0aDlrX2h3XzRrX3NldF90eHBvd2VyLAorCS5nZXRfc3B1cl9jaGFubmVsCT0gYXRoOWtfaHdfNGtfZ2V0X3NwdXJfY2hhbm5lbAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV85Mjg3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwYzIxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCkBAIC0wLDAgKzEsMTE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdGF0aWMgaW50IGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tX3ZlcihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gKGFoLT5lZXByb20ubWFwOTI4Ny5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPj4gMTIpICYgMHhGOworfQorCitzdGF0aWMgaW50IGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tX3JldihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gKGFoLT5lZXByb20ubWFwOTI4Ny5iYXNlRWVwSGVhZGVyLnZlcnNpb24pICYgMHhGRkY7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3X0FSOTI4N19maWxsX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSAqZWVwID0gJmFoLT5lZXByb20ubWFwOTI4NzsKKwl1MTYgKmVlcF9kYXRhOworCWludCBhZGRyLCBlZXBfc3RhcnRfbG9jID0gQVI5Mjg3X0VFUF9TVEFSVF9MT0M7CisJZWVwX2RhdGEgPSAodTE2ICopZWVwOworCisJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJSZWFkaW5nIGZyb20gRUVQUk9NLCBub3QgZmxhc2hcbiIpOworCX0KKworCWZvciAoYWRkciA9IDA7IGFkZHIgPCBzaXplb2Yoc3RydWN0IGFyOTI4N19lZXByb20pIC8gc2l6ZW9mKHUxNik7CisJCQlhZGRyKyspCXsKKwkJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBhZGRyICsgZWVwX3N0YXJ0X2xvYywgZWVwX2RhdGEpKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkJIlVuYWJsZSB0byByZWFkIGVlcHJvbSByZWdpb24gXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQllZXBfZGF0YSsrOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBhdGg5a19od19BUjkyODdfY2hlY2tfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXUzMiBzdW0gPSAwLCBlbCwgaW50ZWdlcjsKKwl1MTYgdGVtcCwgd29yZCwgbWFnaWMsIG1hZ2ljMiwgKmVlcGRhdGE7CisJaW50IGksIGFkZHI7CisJYm9vbCBuZWVkX3N3YXAgPSBmYWxzZTsKKwlzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSAqZWVwID0gJmFoLT5lZXByb20ubWFwOTI4NzsKKworCWlmICghYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkgeworCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQKKwkJICAgIChhaCwgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQsICZtYWdpYykpIHsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJCSJSZWFkaW5nIE1hZ2ljICMgZmFpbGVkXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOworCQlpZiAobWFnaWMgIT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgeworCQkJbWFnaWMyID0gc3dhYjE2KG1hZ2ljKTsKKworCQkJaWYgKG1hZ2ljMiA9PSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7CisJCQkJbmVlZF9zd2FwID0gdHJ1ZTsKKwkJCQllZXBkYXRhID0gKHUxNiAqKSgmYWgtPmVlcHJvbSk7CisKKwkJCQlmb3IgKGFkZHIgPSAwOworCQkJCSAgICAgYWRkciA8IHNpemVvZihzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSkgLyBzaXplb2YodTE2KTsKKwkJCQkgICAgIGFkZHIrKykgeworCQkJCQl0ZW1wID0gc3dhYjE2KCplZXBkYXRhKTsKKwkJCQkJKmVlcGRhdGEgPSB0ZW1wOworCQkJCQllZXBkYXRhKys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCQkJIkludmFsaWQgRUVQUk9NIE1hZ2ljLiAiCisJCQkJCSJlbmRpYW5uZXNzIG1pc21hdGNoLlxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwl9CisJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLCAibmVlZF9zd2FwID0gJXMuXG4iLCBuZWVkX3N3YXAgPworCQkiVHJ1ZSIgOiAiRmFsc2UiKTsKKworCWlmIChuZWVkX3N3YXApCisJCWVsID0gc3dhYjE2KGFoLT5lZXByb20ubWFwOTI4Ny5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJZWxzZQorCQllbCA9IGFoLT5lZXByb20ubWFwOTI4Ny5iYXNlRWVwSGVhZGVyLmxlbmd0aDsKKworCWlmIChlbCA+IHNpemVvZihzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSkpCisJCWVsID0gc2l6ZW9mKHN0cnVjdCBhcjkyODdfZWVwcm9tKSAvIHNpemVvZih1MTYpOworCWVsc2UKKwkJZWwgPSBlbCAvIHNpemVvZih1MTYpOworCisJZWVwZGF0YSA9ICh1MTYgKikoJmFoLT5lZXByb20pOworCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQorCQlzdW0gXj0gKmVlcGRhdGErKzsKKworCWlmIChuZWVkX3N3YXApIHsKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLmxlbmd0aCA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuY2hlY2tzdW0pOworCQllZXAtPmJhc2VFZXBIZWFkZXIuY2hlY2tzdW0gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24pOworCQllZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblswXSA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblsxXSA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIucmZTaWxlbnQpOworCQllZXAtPmJhc2VFZXBIZWFkZXIucmZTaWxlbnQgPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmJsdWVUb290aE9wdGlvbnMpOworCQllZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLmRldmljZUNhcCA9IHdvcmQ7CisKKwkJaW50ZWdlciA9IHN3YWIzMihlZXAtPm1vZGFsSGVhZGVyLmFudEN0cmxDb21tb24pOworCQllZXAtPm1vZGFsSGVhZGVyLmFudEN0cmxDb21tb24gPSBpbnRlZ2VyOworCisJCWZvciAoaSA9IDA7IGkgPCBBUjkyODdfTUFYX0NIQUlOUzsgaSsrKSB7CisJCQlpbnRlZ2VyID0gc3dhYjMyKGVlcC0+bW9kYWxIZWFkZXIuYW50Q3RybENoYWluW2ldKTsKKwkJCWVlcC0+bW9kYWxIZWFkZXIuYW50Q3RybENoYWluW2ldID0gaW50ZWdlcjsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBBUjkyODdfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKKwkJCXdvcmQgPSBzd2FiMTYoZWVwLT5tb2RhbEhlYWRlci5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pOworCQkJZWVwLT5tb2RhbEhlYWRlci5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4gPSB3b3JkOworCQl9CisJfQorCisJaWYgKHN1bSAhPSAweGZmZmYgfHwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSAhPSBBUjkyODdfRUVQX1ZFUgorCSAgICB8fCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDwgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUikgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCSJCYWQgRUVQUk9NIGNoZWNrc3VtIDB4JXggb3IgcmV2aXNpb24gMHglMDR4XG4iLAorCQkJIHN1bSwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICAgIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQoreworCXN0cnVjdCBhcjkyODdfZWVwcm9tICplZXAgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OworCXN0cnVjdCBtb2RhbF9lZXBfYXI5Mjg3X2hlYWRlciAqcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CisJc3RydWN0IGJhc2VfZWVwX2FyOTI4N19oZWFkZXIgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKKwl1MTYgdmVyX21pbm9yOworCisJdmVyX21pbm9yID0gcEJhc2UtPnZlcnNpb24gJiBBUjkyODdfRUVQX1ZFUl9NSU5PUl9NQVNLOworCXN3aXRjaCAocGFyYW0pIHsKKwljYXNlIEVFUF9ORlRIUkVTSF8yOgorCQlyZXR1cm4gcE1vZGFsLT5ub2lzZUZsb29yVGhyZXNoQ2hbMF07CisJY2FzZSBBUl9FRVBST01fTUFDKDApOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzFdOworCWNhc2UgQVJfRUVQUk9NX01BQygxKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzJdIDw8IDggfCBwQmFzZS0+bWFjQWRkclszXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMik6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkcls0XSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbNV07CisJY2FzZSBFRVBfUkVHXzA6CisJCXJldHVybiBwQmFzZS0+cmVnRG1uWzBdOworCWNhc2UgRUVQX1JFR18xOgorCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblsxXTsKKwljYXNlIEVFUF9PUF9DQVA6CisJCXJldHVybiBwQmFzZS0+ZGV2aWNlQ2FwOworCWNhc2UgRUVQX09QX01PREU6CisJCXJldHVybiBwQmFzZS0+b3BDYXBGbGFnczsKKwljYXNlIEVFUF9SRl9TSUxFTlQ6CisJCXJldHVybiBwQmFzZS0+cmZTaWxlbnQ7CisJY2FzZSBFRVBfTUlOT1JfUkVWOgorCQlyZXR1cm4gdmVyX21pbm9yOworCWNhc2UgRUVQX1RYX01BU0s6CisJCXJldHVybiBwQmFzZS0+dHhNYXNrOworCWNhc2UgRUVQX1JYX01BU0s6CisJCXJldHVybiBwQmFzZS0+cnhNYXNrOworCWNhc2UgRUVQX0RFVl9UWVBFOgorCQlyZXR1cm4gcEJhc2UtPmRldmljZVR5cGU7CisJY2FzZSBFRVBfT0xfUFdSQ1RSTDoKKwkJcmV0dXJuIHBCYXNlLT5vcGVuTG9vcFB3ckNudGw7CisJY2FzZSBFRVBfVEVNUFNFTlNFX1NMT1BFOgorCQlpZiAodmVyX21pbm9yID49IEFSOTI4N19FRVBfTUlOT1JfVkVSXzIpCisJCQlyZXR1cm4gcEJhc2UtPnRlbXBTZW5zU2xvcGU7CisJCWVsc2UKKwkJCXJldHVybiAwOworCWNhc2UgRUVQX1RFTVBTRU5TRV9TTE9QRV9QQUxfT046CisJCWlmICh2ZXJfbWlub3IgPj0gQVI5Mjg3X0VFUF9NSU5PUl9WRVJfMykKKwkJCXJldHVybiBwQmFzZS0+dGVtcFNlbnNTbG9wZVBhbE9uOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X0FSOTI4N19nYWluX2JvdW5kYXJpZXNfcGRhZGNzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCSAgIHN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV9hcjkyODcgKnBSYXdEYXRhU2V0LAorCQkJCSAgIHU4ICpiQ2hhbnMsICB1MTYgYXZhaWxQaWVycywKKwkJCQkgICB1MTYgdFBkR2Fpbk92ZXJsYXAsIGludDE2X3QgKnBNaW5DYWxQb3dlciwKKwkJCQkgICB1MTYgKnBQZEdhaW5Cb3VuZGFyaWVzLCB1OCAqcFBEQURDVmFsdWVzLAorCQkJCSAgIHUxNiBudW1YcGRHYWlucykKK3sKKyNkZWZpbmUgVE1QX1ZBTF9WUERfVEFCTEUgXAorCSgodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSArIChzcyAtIG1heEluZGV4ICsgMSkgKiB2cGRTdGVwKSk7CisKKwlpbnQgICAgICAgaSwgaiwgazsKKwlpbnQxNl90ICAgc3M7CisJdTE2ICBpZHhMID0gMCwgaWR4UiA9IDAsIG51bVBpZXJzOworCXU4ICAgKnBWcGRMLCAqcFZwZFIsICpwUHdyTCwgKnBQd3JSOworCXU4ICAgbWluUHdyVDRbQVI5Mjg3X05VTV9QRF9HQUlOU107CisJdTggICBtYXhQd3JUNFtBUjkyODdfTlVNX1BEX0dBSU5TXTsKKwlpbnQxNl90ICAgdnBkU3RlcDsKKwlpbnQxNl90ICAgdG1wVmFsOworCXUxNiAgc2l6ZUN1cnJWcGRUYWJsZSwgbWF4SW5kZXgsIHRndEluZGV4OworCWJvb2wgICAgbWF0Y2g7CisJaW50MTZfdCAgbWluRGVsdGEgPSAwOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwlzdGF0aWMgdTggdnBkVGFibGVMW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCisJCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKKwlzdGF0aWMgdTggdnBkVGFibGVSW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCisJCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKKwlzdGF0aWMgdTggdnBkVGFibGVJW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCisJCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKKworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCWZvciAobnVtUGllcnMgPSAwOyBudW1QaWVycyA8IGF2YWlsUGllcnM7IG51bVBpZXJzKyspIHsKKwkJaWYgKGJDaGFuc1tudW1QaWVyc10gPT0gQVI5Mjg3X0JDSEFOX1VOVVNFRCkKKwkJCWJyZWFrOworCX0KKworCW1hdGNoID0gYXRoOWtfaHdfZ2V0X2xvd2VyX3VwcGVyX2luZGV4KAorCQkJCSAgICh1OClGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCisJCQkJICAgIElTX0NIQU5fMkdIWihjaGFuKSksIGJDaGFucywgbnVtUGllcnMsCisJCQkJICAgICZpZHhMLCAmaWR4Uik7CisKKwlpZiAobWF0Y2gpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJCW1pblB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzBdOworCQkJbWF4UHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bNF07CisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCXBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXSwKKwkJCQkJcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldLAorCQkJCQlBUjkyODdfUERfR0FJTl9JQ0VQVFMsIHZwZFRhYmxlSVtpXSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgeworCQkJcFZwZEwgPSBwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV07CisJCQlwUHdyTCA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXTsKKwkJCXBWcGRSID0gcFJhd0RhdGFTZXRbaWR4Ul0udnBkUGRnW2ldOworCQkJcFB3clIgPSBwUmF3RGF0YVNldFtpZHhSXS5wd3JQZGdbaV07CisKKwkJCW1pblB3clQ0W2ldID0gbWF4KHBQd3JMWzBdLCBwUHdyUlswXSk7CisKKwkJCW1heFB3clQ0W2ldID0KKwkJCQltaW4ocFB3ckxbQVI5Mjg3X1BEX0dBSU5fSUNFUFRTIC0gMV0sCisJCQkJICAgIHBQd3JSW0FSOTI4N19QRF9HQUlOX0lDRVBUUyAtIDFdKTsKKworCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAorCQkJCQlwUHdyTCwgcFZwZEwsCisJCQkJCUFSOTI4N19QRF9HQUlOX0lDRVBUUywKKwkJCQkJdnBkVGFibGVMW2ldKTsKKwkJCWF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKG1pblB3clQ0W2ldLCBtYXhQd3JUNFtpXSwKKwkJCQkJcFB3clIsIHBWcGRSLAorCQkJCQlBUjkyODdfUERfR0FJTl9JQ0VQVFMsCisJCQkJCXZwZFRhYmxlUltpXSk7CisKKwkJCWZvciAoaiA9IDA7IGogPD0gKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMjsgaisrKSB7CisJCQkJdnBkVGFibGVJW2ldW2pdID0KKwkJCQkJKHU4KShhdGg5a19od19pbnRlcnBvbGF0ZSgodTE2KQorCQkJCQlGUkVRMkZCSU4oY2VudGVycy4gc3ludGhfY2VudGVyLAorCQkJCQlJU19DSEFOXzJHSFooY2hhbikpLAorCQkJCQliQ2hhbnNbaWR4TF0sIGJDaGFuc1tpZHhSXSwKKwkJCQkJdnBkVGFibGVMW2ldW2pdLCB2cGRUYWJsZVJbaV1bal0pKTsKKwkJCX0KKwkJfQorCX0KKwkqcE1pbkNhbFBvd2VyID0gKGludDE2X3QpKG1pblB3clQ0WzBdIC8gMik7CisKKwlrID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgeworCQlpZiAoaSA9PSAobnVtWHBkR2FpbnMgLSAxKSkKKwkJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0gKHUxNikobWF4UHdyVDRbaV0gLyAyKTsKKwkJZWxzZQorCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPSAodTE2KSgobWF4UHdyVDRbaV0gKworCQkJCQkJICAgICAgbWluUHdyVDRbaSsxXSkgLyA0KTsKKworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9IG1pbigodTE2KUFSNTQxNl9NQVhfUkFURV9QT1dFUiwKKwkJCQkJICAgIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKKworCisJCWlmICgoaSA9PSAwKSAmJiAhQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgeworCQkJbWluRGVsdGEgPSBwUGRHYWluQm91bmRhcmllc1swXSAtIDIzOworCQkJcFBkR2FpbkJvdW5kYXJpZXNbMF0gPSAyMzsKKwkJfSBlbHNlCisJCQltaW5EZWx0YSA9IDA7CisKKwkJaWYgKGkgPT0gMCkgeworCQkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJCQkJc3MgPSAoaW50MTZfdCkoMCAtIChtaW5Qd3JUNFtpXSAvIDIpKTsKKwkJCWVsc2UKKwkJCQlzcyA9IDA7CisJCX0gZWxzZQorCQkJc3MgPSAoaW50MTZfdCkoKHBQZEdhaW5Cb3VuZGFyaWVzW2ktMV0gLQorCQkJCSAgICAgICAobWluUHdyVDRbaV0gLyAyKSkgLQorCQkJCSAgICAgICB0UGRHYWluT3ZlcmxhcCArIDEgKyBtaW5EZWx0YSk7CisKKwkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMV0gLSB2cGRUYWJsZUlbaV1bMF0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisJCXdoaWxlICgoc3MgPCAwKSAmJiAoayA8IChBUjkyODdfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkJeworCQkJdG1wVmFsID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVswXSArIHNzICogdnBkU3RlcCk7CisJCQlwUERBRENWYWx1ZXNbaysrXSA9ICh1OCkoKHRtcFZhbCA8IDApID8gMCA6IHRtcFZhbCk7CisJCQlzcysrOworCQl9CisKKwkJc2l6ZUN1cnJWcGRUYWJsZSA9ICh1OCkoKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMiArIDEpOworCQl0Z3RJbmRleCA9ICh1OCkocFBkR2FpbkJvdW5kYXJpZXNbaV0gKworCQkJCXRQZEdhaW5PdmVybGFwIC0gKG1pblB3clQ0W2ldIC8gMikpOworCQltYXhJbmRleCA9ICh0Z3RJbmRleCA8IHNpemVDdXJyVnBkVGFibGUpID8KKwkJCSAgICB0Z3RJbmRleCA6IHNpemVDdXJyVnBkVGFibGU7CisKKwkJd2hpbGUgKChzcyA8IG1heEluZGV4KSAmJiAoayA8IChBUjkyODdfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkKKwkJCXBQREFEQ1ZhbHVlc1trKytdID0gdnBkVGFibGVJW2ldW3NzKytdOworCisJCXZwZFN0ZXAgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSAtCisJCQkJICAgIHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMl0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisJCWlmICh0Z3RJbmRleCA+IG1heEluZGV4KSB7CisJCQl3aGlsZSAoKHNzIDw9IHRndEluZGV4KSAmJgorCQkJCShrIDwgKEFSOTI4N19OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CisJCQkJdG1wVmFsID0gKGludDE2X3QpIFRNUF9WQUxfVlBEX1RBQkxFOworCQkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsID4gMjU1KSA/CisJCQkJCQkJICAyNTUgOiB0bXBWYWwpOworCQkJCXNzKys7CisJCQl9CisJCX0KKwl9CisKKwl3aGlsZSAoaSA8IEFSOTI4N19QRF9HQUlOU19JTl9NQVNLKSB7CisJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0gcFBkR2FpbkJvdW5kYXJpZXNbaS0xXTsKKwkJaSsrOworCX0KKworCXdoaWxlIChrIDwgQVI5Mjg3X05VTV9QREFEQ19WQUxVRVMpIHsKKwkJcFBEQURDVmFsdWVzW2tdID0gcFBEQURDVmFsdWVzW2stMV07CisJCWsrKzsKKwl9CisKKyN1bmRlZiBUTVBfVkFMX1ZQRF9UQUJMRQorfQorCitzdGF0aWMgdm9pZCBhcjkyODdfZWVwcm9tX2dldF90eF9nYWluX2luZGV4KHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJICAgIHN0cnVjdCBjYWxfZGF0YV9vcF9sb29wX2FyOTI4NyAqcFJhd0RhdGFzZXRPcExvb3AsCisJCQkgICAgdTggKnBDYWxDaGFucywgIHUxNiBhdmFpbFBpZXJzLAorCQkJICAgIGludDhfdCAqcFB3cikKK3sKKwl1MTYgIGlkeEwgPSAwLCBpZHhSID0gMCwgbnVtUGllcnM7CisJYm9vbCBtYXRjaDsKKwlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CisKKwlmb3IgKG51bVBpZXJzID0gMDsgbnVtUGllcnMgPCBhdmFpbFBpZXJzOyBudW1QaWVycysrKSB7CisJCWlmIChwQ2FsQ2hhbnNbbnVtUGllcnNdID09IEFSOTI4N19CQ0hBTl9VTlVTRUQpCisJCQlicmVhazsKKwl9CisKKwltYXRjaCA9IGF0aDlrX2h3X2dldF9sb3dlcl91cHBlcl9pbmRleCgKKwkJCSh1OClGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsIElTX0NIQU5fMkdIWihjaGFuKSksCisJCQlwQ2FsQ2hhbnMsIG51bVBpZXJzLAorCQkJJmlkeEwsICZpZHhSKTsKKworCWlmIChtYXRjaCkgeworCQkqcFB3ciA9IChpbnQ4X3QpIHBSYXdEYXRhc2V0T3BMb29wW2lkeExdLnB3clBkZ1swXVswXTsKKwl9IGVsc2UgeworCQkqcFB3ciA9ICgoaW50OF90KSBwUmF3RGF0YXNldE9wTG9vcFtpZHhMXS5wd3JQZGdbMF1bMF0gKworCQkJICAgIChpbnQ4X3QpIHBSYXdEYXRhc2V0T3BMb29wW2lkeFJdLnB3clBkZ1swXVswXSkvMjsKKwl9CisKK30KKworc3RhdGljIHZvaWQgYXI5Mjg3X2VlcHJvbV9vbHBjX3NldF9wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSAgaW50MzJfdCB0eFBvd2VyLCB1MTYgY2hhaW4pCit7CisJdTMyIHRtcFZhbDsKKwl1MzIgYTsKKworCXRtcFZhbCA9IFJFR19SRUFEKGFoLCAweGEyNzApOworCXRtcFZhbCA9IHRtcFZhbCAmIDB4RkNGRkZGRkY7CisJdG1wVmFsID0gdG1wVmFsIHwgKDB4MyA8PCAyNCk7CisJUkVHX1dSSVRFKGFoLCAweGEyNzAsIHRtcFZhbCk7CisKKwl0bXBWYWwgPSBSRUdfUkVBRChhaCwgMHhiMjcwKTsKKwl0bXBWYWwgPSB0bXBWYWwgJiAweEZDRkZGRkZGOworCXRtcFZhbCA9IHRtcFZhbCB8ICgweDMgPDwgMjQpOworCVJFR19XUklURShhaCwgMHhiMjcwLCB0bXBWYWwpOworCisJaWYgKGNoYWluID09IDApIHsKKwkJdG1wVmFsID0gUkVHX1JFQUQoYWgsIDB4YTM5OCk7CisJCXRtcFZhbCA9IHRtcFZhbCAmIDB4ZmYwMGZmZmY7CisJCWEgPSAodHhQb3dlcikmMHhmZjsKKwkJdG1wVmFsID0gdG1wVmFsIHwgKGEgPDwgMTYpOworCQlSRUdfV1JJVEUoYWgsIDB4YTM5OCwgdG1wVmFsKTsKKwl9CisKKwlpZiAoY2hhaW4gPT0gMSkgeworCQl0bXBWYWwgPSBSRUdfUkVBRChhaCwgMHhiMzk4KTsKKwkJdG1wVmFsID0gdG1wVmFsICYgMHhmZjAwZmZmZjsKKwkJYSA9ICh0eFBvd2VyKSYweGZmOworCQl0bXBWYWwgPSB0bXBWYWwgfCAoYSA8PCAxNik7CisJCVJFR19XUklURShhaCwgMHhiMzk4LCB0bXBWYWwpOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X0FSOTI4N19wb3dlcl9jYWxfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkJCWludDE2X3QgKnBUeFBvd2VySW5kZXhPZmZzZXQpCit7CisJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxX2FyOTI4NyAqcFJhd0RhdGFzZXQ7CisJc3RydWN0IGNhbF9kYXRhX29wX2xvb3BfYXI5Mjg3ICpwUmF3RGF0YXNldE9wZW5Mb29wOworCXU4ICAqcENhbEJDaGFucyA9IE5VTEw7CisJdTE2IHBkR2Fpbk92ZXJsYXBfdDI7CisJdTggIHBkYWRjVmFsdWVzW0FSOTI4N19OVU1fUERBRENfVkFMVUVTXTsKKwl1MTYgZ2FpbkJvdW5kYXJpZXNbQVI5Mjg3X1BEX0dBSU5TX0lOX01BU0tdOworCXUxNiBudW1QaWVycyA9IDAsIGksIGo7CisJaW50MTZfdCAgdE1pbkNhbFBvd2VyOworCXUxNiBudW1YcGRHYWluLCB4cGRNYXNrOworCXUxNiB4cGRHYWluVmFsdWVzW0FSOTI4N19OVU1fUERfR0FJTlNdID0gezAsIDAsIDAsIDB9OworCXUzMiByZWczMiwgcmVnT2Zmc2V0LCByZWdDaGFpbk9mZnNldDsKKwlpbnQxNl90ICAgbW9kYWxJZHgsIGRpZmYgPSAwOworCXN0cnVjdCBhcjkyODdfZWVwcm9tICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDkyODc7CisJbW9kYWxJZHggPSBJU19DSEFOXzJHSFooY2hhbikgPyAxIDogMDsKKwl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLnhwZEdhaW47CisJaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI5Mjg3X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkJCUFSOTI4N19FRVBfTUlOT1JfVkVSXzIpCisJCXBkR2Fpbk92ZXJsYXBfdDIgPSBwRWVwRGF0YS0+bW9kYWxIZWFkZXIucGRHYWluT3ZlcmxhcDsKKwllbHNlCisJCXBkR2Fpbk92ZXJsYXBfdDIgPSAodTE2KShNUyhSRUdfUkVBRChhaCwgQVJfUEhZX1RQQ1JHNSksCisJCQkJCSAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkpOworCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQlwQ2FsQkNoYW5zID0gcEVlcERhdGEtPmNhbEZyZXFQaWVyMkc7CisJCW51bVBpZXJzID0gQVI5Mjg3X05VTV8yR19DQUxfUElFUlM7CisJCWlmIChhdGg5a19od19BUjkyODdfZ2V0X2VlcHJvbShhaCwgRUVQX09MX1BXUkNUUkwpKSB7CisJCQlwUmF3RGF0YXNldE9wZW5Mb29wID0KKwkJCQkoc3RydWN0IGNhbF9kYXRhX29wX2xvb3BfYXI5Mjg3ICopCisJCQkJcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbMF07CisJCQlhaC0+aW5pdFBEQURDID0gcFJhd0RhdGFzZXRPcGVuTG9vcC0+dnBkUGRnWzBdWzBdOworCQl9CisJfQorCisJbnVtWHBkR2FpbiA9IDA7CisJZm9yIChpID0gMTsgaSA8PSBBUjkyODdfUERfR0FJTlNfSU5fTUFTSzsgaSsrKSB7CisJCWlmICgoeHBkTWFzayA+PiAoQVI5Mjg3X1BEX0dBSU5TX0lOX01BU0sgLSBpKSkgJiAxKSB7CisJCQlpZiAobnVtWHBkR2FpbiA+PSBBUjkyODdfTlVNX1BEX0dBSU5TKQorCQkJCWJyZWFrOworCQkJeHBkR2FpblZhbHVlc1tudW1YcGRHYWluXSA9CisJCQkJKHUxNikoQVI5Mjg3X1BEX0dBSU5TX0lOX01BU0staSk7CisJCQludW1YcGRHYWluKys7CisJCX0KKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOLAorCQkgICAgICAobnVtWHBkR2FpbiAtIDEpICYgMHgzKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMSwKKwkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCisJCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLAorCQkgICAgICB4cGRHYWluVmFsdWVzWzJdKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjkyODdfTUFYX0NIQUlOUzsgaSsrKQl7CisJCXJlZ0NoYWluT2Zmc2V0ID0gaSAqIDB4MTAwMDsKKwkJaWYgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnR4TWFzayAmICgxIDw8IGkpKSB7CisJCQlwUmF3RGF0YXNldE9wZW5Mb29wID0gKHN0cnVjdCBjYWxfZGF0YV9vcF9sb29wX2FyOTI4NyAqKQorCQkJCQkgICAgICAgcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbaV07CisJCQlpZiAoYXRoOWtfaHdfQVI5Mjg3X2dldF9lZXByb20oYWgsIEVFUF9PTF9QV1JDVFJMKSkgeworCQkJCWludDhfdCB0eFBvd2VyOworCQkJCWFyOTI4N19lZXByb21fZ2V0X3R4X2dhaW5faW5kZXgoYWgsIGNoYW4sCisJCQkJCQkJICBwUmF3RGF0YXNldE9wZW5Mb29wLAorCQkJCQkJCSAgcENhbEJDaGFucywgbnVtUGllcnMsCisJCQkJCQkJICAmdHhQb3dlcik7CisJCQkJYXI5Mjg3X2VlcHJvbV9vbHBjX3NldF9wZGFkY3MoYWgsIHR4UG93ZXIsIGkpOworCQkJfSBlbHNlIHsKKwkJCQlwUmF3RGF0YXNldCA9CisJCQkJCShzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfYXI5Mjg3ICopCisJCQkJCXBFZXBEYXRhLT5jYWxQaWVyRGF0YTJHW2ldOworCQkJCWF0aDlrX2h3X2dldF9BUjkyODdfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcygKKwkJCQkJCSAgYWgsIGNoYW4sIHBSYXdEYXRhc2V0LAorCQkJCQkJICBwQ2FsQkNoYW5zLCBudW1QaWVycywKKwkJCQkJCSAgcGRHYWluT3ZlcmxhcF90MiwKKwkJCQkJCSAgJnRNaW5DYWxQb3dlciwgZ2FpbkJvdW5kYXJpZXMsCisJCQkJCQkgIHBkYWRjVmFsdWVzLCBudW1YcGRHYWluKTsKKwkJCX0KKworCQkJaWYgKGkgPT0gMCkgeworCQkJCWlmICghYXRoOWtfaHdfQVI5Mjg3X2dldF9lZXByb20oCisJCQkJCSAgICBhaCwgRUVQX09MX1BXUkNUUkwpKSB7CisJCQkJCVJFR19XUklURShhaCwgQVJfUEhZX1RQQ1JHNSArCisJCQkJCSAgcmVnQ2hhaW5PZmZzZXQsCisJCQkJCSAgU00ocGRHYWluT3ZlcmxhcF90MiwKKwkJCQkJICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkgfAorCQkJCQkgIFNNKGdhaW5Cb3VuZGFyaWVzWzBdLAorCQkJCQkgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8xKQorCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMV0sCisJCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMikKKwkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzJdLAorCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzMpCisJCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1szXSwKKwkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80KSk7CisJCQkJfQorCQkJfQorCisJCQlpZiAoKGludDMyX3QpQVI5Mjg3X1BXUl9UQUJMRV9PRkZTRVRfREIgIT0KKwkJCQkgICAgIHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnB3clRhYmxlT2Zmc2V0KSB7CisJCQkJZGlmZiA9ICh1MTYpCisJCQkJICAgICAgIChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci5wd3JUYWJsZU9mZnNldAorCQkJCQktIChpbnQzMl90KUFSOTI4N19QV1JfVEFCTEVfT0ZGU0VUX0RCKTsKKwkJCQlkaWZmICo9IDI7CisKKwkJCQlmb3IgKGogPSAwOworCQkJCSAgICAgaiA8ICgodTE2KUFSOTI4N19OVU1fUERBRENfVkFMVUVTLWRpZmYpOworCQkJCSAgICAgaisrKQorCQkJCQlwZGFkY1ZhbHVlc1tqXSA9IHBkYWRjVmFsdWVzW2orZGlmZl07CisKKwkJCQlmb3IgKGogPSAodTE2KShBUjkyODdfTlVNX1BEQURDX1ZBTFVFUy1kaWZmKTsKKwkJCQkgICAgIGogPCBBUjkyODdfTlVNX1BEQURDX1ZBTFVFUzsgaisrKQorCQkJCQlwZGFkY1ZhbHVlc1tqXSA9CisJCQkJCSAgcGRhZGNWYWx1ZXNbCisJCQkJCSAgQVI5Mjg3X05VTV9QREFEQ19WQUxVRVMtZGlmZl07CisJCQl9CisKKwkJCWlmICghYXRoOWtfaHdfQVI5Mjg3X2dldF9lZXByb20oYWgsIEVFUF9PTF9QV1JDVFJMKSkgeworCQkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArCisJCQkJCQkJICAgcmVnQ2hhaW5PZmZzZXQ7CisJCQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKKwkJCQkJcmVnMzIgPSAoKHBkYWRjVmFsdWVzWzQqaiArIDBdCisJCQkJCQkgICYgMHhGRikgPDwgMCkgIHwKKwkJCQkJCSgocGRhZGNWYWx1ZXNbNCpqICsgMV0KKwkJCQkJCSAgJiAweEZGKSA8PCA4KSAgfAorCQkJCQkJKChwZGFkY1ZhbHVlc1s0KmogKyAyXQorCQkJCQkJICAmIDB4RkYpIDw8IDE2KSB8CisJCQkJCQkoKHBkYWRjVmFsdWVzWzQqaiArIDNdCisJCQkJCQkgICYgMHhGRikgPDwgMjQpIDsKKwkJCQkJUkVHX1dSSVRFKGFoLCByZWdPZmZzZXQsIHJlZzMyKTsKKworCQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAorCQkJCQkJaSwgcmVnQ2hhaW5PZmZzZXQsIHJlZ09mZnNldCwKKwkJCQkJCXJlZzMyKTsKKworCQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkJCQkiUERBREM6IENoYWluICVkIHwgIgorCQkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCisJCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKKwkJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgorCQkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfFxuIiwKKwkJCQkJCWksIDQgKiBqLCBwZGFkY1ZhbHVlc1s0ICogal0sCisJCQkJCQk0ICogaiArIDEsCisJCQkJCQlwZGFkY1ZhbHVlc1s0ICogaiArIDFdLAorCQkJCQkJNCAqIGogKyAyLAorCQkJCQkJcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKKwkJCQkJCTQgKiBqICsgMywKKwkJCQkJCXBkYWRjVmFsdWVzWzQgKiBqICsgM10pOworCisJCQkJCXJlZ09mZnNldCArPSA0OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCSpwVHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X0FSOTI4N19wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sIGludDE2X3QgKnJhdGVzQXJyYXksIHUxNiBjZmdDdGwsCisJCXUxNiBBbnRlbm5hUmVkdWN0aW9uLCB1MTYgdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCisJCXUxNiBwb3dlckxpbWl0KQoreworI2RlZmluZSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RXT19DSEFJTiAgICAgNgorI2RlZmluZSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOICAgMTAKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisJc3RhdGljIGNvbnN0IHUxNiB0cFNjYWxlUmVkdWN0aW9uVGFibGVbNV0gPQorCQl7IDAsIDMsIDYsIDksIEFSNTQxNl9NQVhfUkFURV9QT1dFUiB9OworCWludCBpOworCWludDE2X3QgIHR3aWNlTGFyZ2VzdEFudGVubmE7CisJc3RydWN0IGNhbF9jdGxfZGF0YV9hcjkyODcgKnJlcDsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtID0gezAsIHswLCAwLCAwLCAwfSB9LAorCQkJCSAgICB0YXJnZXRQb3dlckNjayA9IHswLCB7MCwgMCwgMCwgMH0gfTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtRXh0ID0gezAsIHswLCAwLCAwLCAwfSB9LAorCQkJCSAgICB0YXJnZXRQb3dlckNja0V4dCA9IHswLCB7MCwgMCwgMCwgMH0gfTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAgdGFyZ2V0UG93ZXJIdDIwLAorCQkJCSAgICB0YXJnZXRQb3dlckh0NDAgPSB7MCwgezAsIDAsIDAsIDB9IH07CisJdTE2IHNjYWxlZFBvd2VyID0gMCwgbWluQ3RsUG93ZXIsIG1heFJlZ0FsbG93ZWRQb3dlcjsKKwl1MTYgY3RsTW9kZXNGb3IxMWdbXSA9CisJCXtDVExfMTFCLCBDVExfMTFHLCBDVExfMkdIVDIwLAorCQkgQ1RMXzExQl9FWFQsIENUTF8xMUdfRVhULCBDVExfMkdIVDQwfTsKKwl1MTYgbnVtQ3RsTW9kZXMgPSAwLCAqcEN0bE1vZGUgPSBOVUxMLCBjdGxNb2RlLCBmcmVxOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwlpbnQgdHhfY2hhaW5tYXNrOworCXUxNiB0d2ljZU1pbkVkZ2VQb3dlcjsKKwlzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OworCXR4X2NoYWlubWFzayA9IGFoLT50eGNoYWlubWFzazsKKworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCXR3aWNlTGFyZ2VzdEFudGVubmEgPSBtYXgocEVlcERhdGEtPm1vZGFsSGVhZGVyLmFudGVubmFHYWluQ2hbMF0sCisJCQkJICBwRWVwRGF0YS0+bW9kYWxIZWFkZXIuYW50ZW5uYUdhaW5DaFsxXSk7CisKKwl0d2ljZUxhcmdlc3RBbnRlbm5hID0gIChpbnQxNl90KW1pbigoQW50ZW5uYVJlZHVjdGlvbikgLQorCQkJCQkgICAgdHdpY2VMYXJnZXN0QW50ZW5uYSwgMCk7CisKKwltYXhSZWdBbGxvd2VkUG93ZXIgPSB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciArIHR3aWNlTGFyZ2VzdEFudGVubmE7CisJaWYgKHJlZ3VsYXRvcnktPnRwX3NjYWxlICE9IEFUSDlLX1RQX1NDQUxFX01BWCkKKwkJbWF4UmVnQWxsb3dlZFBvd2VyIC09CisJCQkodHBTY2FsZVJlZHVjdGlvblRhYmxlWyhyZWd1bGF0b3J5LT50cF9zY2FsZSldICogMik7CisKKwlzY2FsZWRQb3dlciA9IG1pbihwb3dlckxpbWl0LCBtYXhSZWdBbGxvd2VkUG93ZXIpOworCisJc3dpdGNoIChhcjU0MTZfZ2V0X250eGNoYWlucyh0eF9jaGFpbm1hc2spKSB7CisJY2FzZSAxOgorCQlicmVhazsKKwljYXNlIDI6CisJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOOworCQlicmVhazsKKwljYXNlIDM6CisJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU47CisJCWJyZWFrOworCX0KKwlzY2FsZWRQb3dlciA9IG1heCgodTE2KTAsIHNjYWxlZFBvd2VyKTsKKworCWlmIChJU19DSEFOXzJHSFooY2hhbikpCXsKKwkJbnVtQ3RsTW9kZXMgPQorCQkJQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZykgLSBTVUJfTlVNX0NUTF9NT0RFU19BVF8yR180MDsKKwkJcEN0bE1vZGUgPSBjdGxNb2Rlc0ZvcjExZzsKKworCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJCQkgIHBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKKwkJCQkJCSAgQVI5Mjg3X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUywKKwkJCQkJCSAgJnRhcmdldFBvd2VyQ2NrLCA0LCBmYWxzZSk7CisJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQkJCSAgcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCisJCQkJCQkgIEFSOTI4N19OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKKwkJCQkJCSAgJnRhcmdldFBvd2VyT2ZkbSwgNCwgZmFsc2UpOworCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQkJICAgcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDIwLAorCQkJCQkgICBBUjkyODdfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkJCSAgICZ0YXJnZXRQb3dlckh0MjAsIDgsIGZhbHNlKTsKKworCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQl7CisJCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpOworCQkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJCQkgICBwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDAsCisJCQkJCQkgICBBUjkyODdfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMsCisJCQkJCQkgICAmdGFyZ2V0UG93ZXJIdDQwLCA4LCB0cnVlKTsKKwkJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQkJCSAgcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyQ2NrLAorCQkJCQkJICBBUjkyODdfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAorCQkJCQkJICAmdGFyZ2V0UG93ZXJDY2tFeHQsIDQsIHRydWUpOworCQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJCQkJICBwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyRywKKwkJCQkJCSAgQVI5Mjg3X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAorCQkJCQkJICAmdGFyZ2V0UG93ZXJPZmRtRXh0LCA0LCB0cnVlKTsKKwkJfQorCX0KKworCWZvciAoY3RsTW9kZSA9IDA7IGN0bE1vZGUgPCBudW1DdGxNb2RlczsgY3RsTW9kZSsrKSB7CisJCWJvb2wgaXNIdDQwQ3RsTW9kZSA9IChwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfNUdIVDQwKSB8fAorCQkJCSAgICAgKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF8yR0hUNDApOworCQlpZiAoaXNIdDQwQ3RsTW9kZSkKKwkJCWZyZXEgPSBjZW50ZXJzLnN5bnRoX2NlbnRlcjsKKwkJZWxzZSBpZiAocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpCisJCQlmcmVxID0gY2VudGVycy5leHRfY2VudGVyOworCQllbHNlCisJCQlmcmVxID0gY2VudGVycy5jdGxfY2VudGVyOworCisJCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpID09IDE0ICYmCisJCSAgICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDw9IDIpCisJCQl0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKworCQlmb3IgKGkgPSAwOyAoaSA8IEFSOTI4N19OVU1fQ1RMUykgJiYgcEVlcERhdGEtPmN0bEluZGV4W2ldOyBpKyspIHsKKwkJCWlmICgoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAorCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09CisJCQkgICAgIHBFZXBEYXRhLT5jdGxJbmRleFtpXSkgfHwKKwkJCSAgICAoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAorCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09CisJCQkgICAgICgocEVlcERhdGEtPmN0bEluZGV4W2ldICYKKwkJCSAgICAgICBDVExfTU9ERV9NKSB8IFNEX05PX0NUTCkpKSB7CisKKwkJCQlyZXAgPSAmKHBFZXBEYXRhLT5jdGxEYXRhW2ldKTsKKwkJCQl0d2ljZU1pbkVkZ2VQb3dlciA9IGF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcigKKwkJCQkgICAgZnJlcSwKKwkJCQkgICAgcmVwLT5jdGxFZGdlc1thcjU0MTZfZ2V0X250eGNoYWlucygKKwkJCQkgICAgdHhfY2hhaW5tYXNrKSAtIDFdLAorCQkJCSAgICBJU19DSEFOXzJHSFooY2hhbiksIEFSNTQxNl9OVU1fQkFORF9FREdFUyk7CisKKwkJCQlpZiAoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSA9PSBTRF9OT19DVEwpCisJCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gbWluKAorCQkJCQkJCSAgICB0d2ljZU1heEVkZ2VQb3dlciwKKwkJCQkJCQkgICAgdHdpY2VNaW5FZGdlUG93ZXIpOworCQkJCWVsc2UgeworCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IHR3aWNlTWluRWRnZVBvd2VyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQltaW5DdGxQb3dlciA9ICh1OCltaW4odHdpY2VNYXhFZGdlUG93ZXIsIHNjYWxlZFBvd2VyKTsKKworCQlzd2l0Y2ggKHBDdGxNb2RlW2N0bE1vZGVdKSB7CisJCWNhc2UgQ1RMXzExQjoKKwkJCWZvciAoaSA9IDA7CisJCQkgICAgIGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyQ2NrLnRQb3cyeCk7CisJCQkgICAgIGkrKykgeworCQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSA9ICh1OCltaW4oCisJCQkJCSh1MTYpdGFyZ2V0UG93ZXJDY2sudFBvdzJ4W2ldLAorCQkJCQltaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMTFBOgorCQljYXNlIENUTF8xMUc6CisJCQlmb3IgKGkgPSAwOworCQkJICAgICBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlck9mZG0udFBvdzJ4KTsKKwkJCSAgICAgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSA9ICh1OCltaW4oCisJCQkJCSh1MTYpdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSwKKwkJCQkJbWluQ3RsUG93ZXIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzVHSFQyMDoKKwkJY2FzZSBDVExfMkdIVDIwOgorCQkJZm9yIChpID0gMDsKKwkJCSAgICAgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7CisJCQkgICAgIGkrKykgeworCQkJCXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0gPSAodTgpbWluKAorCQkJCQkodTE2KXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0sCisJCQkJCW1pbkN0bFBvd2VyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENUTF8xMUJfRVhUOgorCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdID0gKHU4KW1pbigKKwkJCQkgICAgKHUxNil0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0sCisJCQkJICAgIG1pbkN0bFBvd2VyKTsKKwkJCWJyZWFrOworCQljYXNlIENUTF8xMUFfRVhUOgorCQljYXNlIENUTF8xMUdfRVhUOgorCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSA9ICh1OCltaW4oCisJCQkJICAgICh1MTYpdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSwKKwkJCQkgICAgbWluQ3RsUG93ZXIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzVHSFQ0MDoKKwkJY2FzZSBDVExfMkdIVDQwOgorCQkJZm9yIChpID0gMDsKKwkJCSAgICAgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7CisJCQkgICAgIGkrKykgeworCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0gPSAodTgpbWluKAorCQkJCQkodTE2KXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0sCisJCQkJCW1pbkN0bFBvd2VyKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyYXRlc0FycmF5W3JhdGU2bWJdID0KKwlyYXRlc0FycmF5W3JhdGU5bWJdID0KKwlyYXRlc0FycmF5W3JhdGUxMm1iXSA9CisJcmF0ZXNBcnJheVtyYXRlMThtYl0gPQorCXJhdGVzQXJyYXlbcmF0ZTI0bWJdID0KKwl0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzBdOworCisJcmF0ZXNBcnJheVtyYXRlMzZtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzFdOworCXJhdGVzQXJyYXlbcmF0ZTQ4bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsyXTsKKwlyYXRlc0FycmF5W3JhdGU1NG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbM107CisJcmF0ZXNBcnJheVtyYXRlWHJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQyMC50UG93MngpOyBpKyspCisJCXJhdGVzQXJyYXlbcmF0ZUh0MjBfMCArIGldID0gdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXTsKKworCWlmIChJU19DSEFOXzJHSFooY2hhbikpCXsKKwkJcmF0ZXNBcnJheVtyYXRlMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGUyc10gPSByYXRlc0FycmF5W3JhdGUybF0gPQorCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzFdOworCQlyYXRlc0FycmF5W3JhdGU1XzVzXSA9IHJhdGVzQXJyYXlbcmF0ZTVfNWxdID0KKwkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFsyXTsKKwkJcmF0ZXNBcnJheVtyYXRlMTFzXSA9IHJhdGVzQXJyYXlbcmF0ZTExbF0gPQorCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzNdOworCX0KKwlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQl7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOyBpKyspCisJCQlyYXRlc0FycmF5W3JhdGVIdDQwXzAgKyBpXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbaV07CisKKwkJcmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGVEdXBDY2tdICA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07CisJCXJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dID0gdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXTsKKwkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkKKwkJCXJhdGVzQXJyYXlbcmF0ZUV4dENja10gPSB0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF07CisJfQorCisjdW5kZWYgUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9UV09fQ0hBSU4KKyN1bmRlZiBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOCit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X0FSOTI4N19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sIHUxNiBjZmdDdGwsCisJCQkJCXU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkJdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCisJCQkJCXU4IHBvd2VyTGltaXQpCit7CisjZGVmaW5lIElOQ1JFQVNFX01BWFBPV19CWV9UV09fQ0hBSU4gICAgIDYKKyNkZWZpbmUgSU5DUkVBU0VfTUFYUE9XX0JZX1RIUkVFX0NIQUlOICAgMTAKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwlzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OworCXN0cnVjdCBtb2RhbF9lZXBfYXI5Mjg3X2hlYWRlciAqcE1vZGFsID0gJnBFZXBEYXRhLT5tb2RhbEhlYWRlcjsKKwlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOworCWludDE2X3QgIHR4UG93ZXJJbmRleE9mZnNldCA9IDA7CisJdTggaHQ0MFBvd2VySW5jRm9yUGRhZGMgPSAyOworCWludCBpOworCisJbWVtc2V0KHJhdGVzQXJyYXksIDAsIHNpemVvZihyYXRlc0FycmF5KSk7CisKKwlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjkyODdfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCSAgICBBUjkyODdfRUVQX01JTk9SX1ZFUl8yKQorCQlodDQwUG93ZXJJbmNGb3JQZGFkYyA9IHBNb2RhbC0+aHQ0MFBvd2VySW5jRm9yUGRhZGM7CisKKwlhdGg5a19od19zZXRfQVI5Mjg3X3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAorCQkJCQkJICZyYXRlc0FycmF5WzBdLCBjZmdDdGwsCisJCQkJCQkgdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAorCQkJCQkJIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAorCQkJCQkJIHBvd2VyTGltaXQpOworCisJYXRoOWtfaHdfc2V0X0FSOTI4N19wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZXNBcnJheSk7IGkrKykgeworCQlyYXRlc0FycmF5W2ldID0gKGludDE2X3QpKHR4UG93ZXJJbmRleE9mZnNldCArIHJhdGVzQXJyYXlbaV0pOworCQlpZiAocmF0ZXNBcnJheVtpXSA+IEFSOTI4N19NQVhfUkFURV9QT1dFUikKKwkJCXJhdGVzQXJyYXlbaV0gPSBBUjkyODdfTUFYX1JBVEVfUE9XRVI7CisJfQorCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFyNTQxNlJhdGVTaXplOyBpKyspCisJCQlyYXRlc0FycmF5W2ldIC09IEFSOTI4N19QV1JfVEFCTEVfT0ZGU0VUX0RCICogMjsKKwl9CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMSwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMThtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTEybWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU5bWJdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTZtYl0sIDApKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUyLAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1NG1iXSwgMjQpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNDhtYl0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTM2bWJdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTI0bWJdLCAwKSk7CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQl7CisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUzLAorCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMnNdLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMmxdLCAxNikKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlWHJdLCA4KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxbF0sIDApKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTQsCisJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMXNdLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFsXSwgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNXNdLCA4KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVsXSwgMCkpOworCX0KKworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU1LAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzNdLCAyNCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzFdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMF0sIDApKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU2LAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzddLCAyNCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzZdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzVdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNF0sIDApKTsKKworCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCXsKKwkJaWYgKGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tKGFoLCBFRVBfT0xfUFdSQ1RSTCkpIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAorCQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfM10sIDI0KQorCQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSwgMTYpCisJCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzFdLCA4KQorCQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8wXSwgMCkpOworCisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOCwKKwkJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzddLCAyNCkKKwkJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNl0sIDE2KQorCQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF81XSwgOCkKKwkJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNF0sIDApKTsKKwkJfSBlbHNlIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAorCQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfM10gKworCQkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQorCQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSArCisJCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDE2KQorCQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8xXSArCisJCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDgpCisJCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzBdICsKKwkJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOworCisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOCwKKwkJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzddICsKKwkJCQkJICAgICAgIGh0NDBQb3dlckluY0ZvclBkYWRjLCAyNCkKKwkJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNl0gKworCQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKKwkJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNV0gKworCQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCA4KQorCQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF80XSArCisJCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDApKTsKKwkJfQorCisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAorCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRDY2tdLCAxNikKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKKwl9CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQorCQlpID0gcmF0ZTFsOworCWVsc2UKKwkJaSA9IHJhdGU2bWI7CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsID0KKwkJCXJhdGVzQXJyYXlbaV0gKyBBUjkyODdfUFdSX1RBQkxFX09GRlNFVF9EQiAqIDI7CisJZWxzZQorCQlyZWd1bGF0b3J5LT5tYXhfcG93ZXJfbGV2ZWwgPSByYXRlc0FycmF5W2ldOworCisJc3dpdGNoIChhcjU0MTZfZ2V0X250eGNoYWlucyhhaC0+dHhjaGFpbm1hc2spKSB7CisJY2FzZSAxOgorCQlicmVhazsKKwljYXNlIDI6CisJCXJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCArPQorCQkJSU5DUkVBU0VfTUFYUE9XX0JZX1RXT19DSEFJTjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZWd1bGF0b3J5LT5tYXhfcG93ZXJfbGV2ZWwgKz0KKwkJCUlOQ1JFQVNFX01BWFBPV19CWV9USFJFRV9DSEFJTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJIkludmFsaWQgY2hhaW5tYXNrIGNvbmZpZ3VyYXRpb25cbiIpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X0FSOTI4N19zZXRfYWRkYWMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X0FSOTI4N19zZXRfYm9hcmRfdmFsdWVzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBhcjkyODdfZWVwcm9tICplZXAgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OworCXN0cnVjdCBtb2RhbF9lZXBfYXI5Mjg3X2hlYWRlciAqcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CisJdTE2IGFudFdyaXRlc1tBUjkyODdfQU5UXzE2U107CisJdTMyIHJlZ0NoYWluT2Zmc2V0OworCXU4IHR4UnhBdHRlbkxvY2FsOworCWludCBpLCBqLCBvZmZzZXRfbnVtOworCisJcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CisKKwlhbnRXcml0ZXNbMF0gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ29tbW9uID4+IDI4KSAmIDB4Rik7CisJYW50V3JpdGVzWzFdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENvbW1vbiA+PiAyNCkgJiAweEYpOworCWFudFdyaXRlc1syXSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDb21tb24gPj4gMjApICYgMHhGKTsKKwlhbnRXcml0ZXNbM10gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ29tbW9uID4+IDE2KSAmIDB4Rik7CisJYW50V3JpdGVzWzRdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENvbW1vbiA+PiAxMikgJiAweEYpOworCWFudFdyaXRlc1s1XSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDb21tb24gPj4gOCkgJiAweEYpOworCWFudFdyaXRlc1s2XSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDb21tb24gPj4gNCkgICYgMHhGKTsKKwlhbnRXcml0ZXNbN10gPSAodTE2KShwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEYpOworCisJb2Zmc2V0X251bSA9IDg7CisKKwlmb3IgKGkgPSAwLCBqID0gb2Zmc2V0X251bTsgaSA8IEFSOTI4N19NQVhfQ0hBSU5TOyBpKyspIHsKKwkJYW50V3JpdGVzW2orK10gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPj4gMjgpICYgMHhmKTsKKwkJYW50V3JpdGVzW2orK10gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPj4gMTApICYgMHgzKTsKKwkJYW50V3JpdGVzW2orK10gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPj4gOCkgJiAweDMpOworCQlhbnRXcml0ZXNbaisrXSA9IDA7CisJCWFudFdyaXRlc1tqKytdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENoYWluW2ldID4+IDYpICYgMHgzKTsKKwkJYW50V3JpdGVzW2orK10gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPj4gNCkgJiAweDMpOworCQlhbnRXcml0ZXNbaisrXSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDaGFpbltpXSA+PiAyKSAmIDB4Myk7CisJCWFudFdyaXRlc1tqKytdID0gKHUxNikocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gJiAweDMpOworCX0KKworCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sCisJCSAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4pKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjkyODdfTUFYX0NIQUlOUzsgaSsrKQl7CisJCXJlZ0NoYWluT2Zmc2V0ID0gaSAqIDB4MTAwMDsKKworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ0hBSU5fMCArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICBwTW9kYWwtPmFudEN0cmxDaGFpbltpXSk7CisKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0KQorCQkJICAgJiB+KEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGIHwKKwkJCSAgICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbElDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbFFDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYpKTsKKworCQl0eFJ4QXR0ZW5Mb2NhbCA9IHBNb2RhbC0+dHhSeEF0dGVuQ2hbaV07CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX01BUkdJTiwKKwkJCSAgICAgIHBNb2RhbC0+YnN3TWFyZ2luW2ldKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX0RCLAorCQkJICAgICAgcE1vZGFsLT5ic3dBdHRlbltpXSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfQVRURU4sCisJCQkgICAgICB0eFJ4QXR0ZW5Mb2NhbCk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfTUFSR0lOLAorCQkJICAgICAgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbaV0pOworCX0KKworCisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLAorCQkJICAgICAgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwgcE1vZGFsLT5zd1NldHRsZUh0NDApOworCWVsc2UKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLAorCQkJICAgICAgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwgcE1vZGFsLT5zd2l0Y2hTZXR0bGluZyk7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwKKwkJICAgICAgQVJfUEhZX0RFU0lSRURfU1pfQURDLCBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1JGX0NUTDQsCisJCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQV9PRkYpCisJCSAgfCBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFCX09GRikKKwkJICB8IFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT04pCisJCSAgfCBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLCBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFCX09OKSk7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMywKKwkJICAgICAgQVJfUEhZX1RYX0VORF9UT19BMl9SWF9PTiwgcE1vZGFsLT50eEVuZFRvUnhPbik7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLAorCQkgICAgICBBUjkyODBfUEhZX0NDQV9USFJFU0g2MiwgcE1vZGFsLT50aHJlc2g2Mik7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EwLAorCQkgICAgICBBUl9QSFlfRVhUX0NDQTBfVEhSRVNINjIsIHBNb2RhbC0+dGhyZXNoNjIpOworCisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMCwgQVI5Mjg3X0FOX1JGMkczX0RCMSwKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19EQjFfUywgcE1vZGFsLT5kYjEpOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDAsIEFSOTI4N19BTl9SRjJHM19EQjIsCisJCQkJICBBUjkyODdfQU5fUkYyRzNfREIyX1MsIHBNb2RhbC0+ZGIyKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODdfQU5fUkYyRzNfQ0gwLAorCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX0NDSywKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9DQ0tfUywgcE1vZGFsLT5vYl9jY2spOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDAsCisJCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUFNLLAorCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX1BTS19TLCBwTW9kYWwtPm9iX3Bzayk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMCwKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9RQU0sCisJCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUUFNX1MsIHBNb2RhbC0+b2JfcWFtKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODdfQU5fUkYyRzNfQ0gwLAorCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX1BBTF9PRkYsCisJCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUEFMX09GRl9TLAorCQkJCSAgcE1vZGFsLT5vYl9wYWxfb2ZmKTsKKworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDEsCisJCQkJICBBUjkyODdfQU5fUkYyRzNfREIxLCBBUjkyODdfQU5fUkYyRzNfREIxX1MsCisJCQkJICBwTW9kYWwtPmRiMSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMSwgQVI5Mjg3X0FOX1JGMkczX0RCMiwKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19EQjJfUywgcE1vZGFsLT5kYjIpOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDEsCisJCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfQ0NLLAorCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX0NDS19TLCBwTW9kYWwtPm9iX2Njayk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMSwKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9QU0ssCisJCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUFNLX1MsIHBNb2RhbC0+b2JfcHNrKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODdfQU5fUkYyRzNfQ0gxLAorCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX1FBTSwKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9RQU1fUywgcE1vZGFsLT5vYl9xYW0pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDEsCisJCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUEFMX09GRiwKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9QQUxfT0ZGX1MsCisJCQkJICBwTW9kYWwtPm9iX3BhbF9vZmYpOworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsCisJCSAgICAgIEFSX1BIWV9UWF9FTkRfREFUQV9TVEFSVCwgcE1vZGFsLT50eEZyYW1lVG9EYXRhU3RhcnQpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLAorCQkgICAgICBBUl9QSFlfVFhfRU5EX1BBX09OLCBwTW9kYWwtPnR4RnJhbWVUb1BhT24pOworCisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1RPUDIsCisJCQkJICBBUjkyODdfQU5fVE9QMl9YUEFCSUFTX0xWTCwKKwkJCQkgIEFSOTI4N19BTl9UT1AyX1hQQUJJQVNfTFZMX1MsCisJCQkJICBwTW9kYWwtPnhwYUJpYXNMdmwpOworfQorCitzdGF0aWMgdTggYXRoOWtfaHdfQVI5Mjg3X2dldF9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHUxNiBhdGg5a19od19BUjkyODdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IGFyOTI4N19lZXByb20gKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDkyODc7CisJc3RydWN0IG1vZGFsX2VlcF9hcjkyODdfaGVhZGVyICpwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKKworCXJldHVybiBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7Cit9CisKK3N0YXRpYyB1MTYgYXRoOWtfaHdfQVI5Mjg3X2dldF9zcHVyX2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSAgICB1MTYgaSwgYm9vbCBpczJHSHopCit7CisjZGVmaW5lIEVFUF9NQVA5Mjg3X1NQVVJDSEFOIFwKKwkoYWgtPmVlcHJvbS5tYXA5Mjg3Lm1vZGFsSGVhZGVyLnNwdXJDaGFuc1tpXS5zcHVyQ2hhbikKKwl1MTYgc3B1cl92YWwgPSBBUl9OT19TUFVSOworCisJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAorCQkiR2V0dGluZyBzcHVyIGlkeCAlZCBpczJHaHouICVkIHZhbCAleFxuIiwKKwkJaSwgaXMyR0h6LCBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdKTsKKworCXN3aXRjaCAoYWgtPmNvbmZpZy5zcHVybW9kZSkgeworCWNhc2UgU1BVUl9ESVNBQkxFOgorCQlicmVhazsKKwljYXNlIFNQVVJfRU5BQkxFX0lPQ1RMOgorCQlzcHVyX3ZhbCA9IGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel07CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKKwkJICAgICAgICJHZXR0aW5nIHNwdXIgdmFsIGZyb20gbmV3IGxvYy4gJWRcbiIsIHNwdXJfdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBTUFVSX0VOQUJMRV9FRVBST006CisJCXNwdXJfdmFsID0gRUVQX01BUDkyODdfU1BVUkNIQU47CisJCWJyZWFrOworCX0KKworCXJldHVybiBzcHVyX3ZhbDsKKworI3VuZGVmIEVFUF9NQVA5Mjg3X1NQVVJDSEFOCit9CisKK2NvbnN0IHN0cnVjdCBlZXByb21fb3BzIGVlcF9BUjkyODdfb3BzID0geworCS5jaGVja19lZXByb20JCT0gYXRoOWtfaHdfQVI5Mjg3X2NoZWNrX2VlcHJvbSwKKwkuZ2V0X2VlcHJvbQkJPSBhdGg5a19od19BUjkyODdfZ2V0X2VlcHJvbSwKKwkuZmlsbF9lZXByb20JCT0gYXRoOWtfaHdfQVI5Mjg3X2ZpbGxfZWVwcm9tLAorCS5nZXRfZWVwcm9tX3ZlcgkJPSBhdGg5a19od19BUjkyODdfZ2V0X2VlcHJvbV92ZXIsCisJLmdldF9lZXByb21fcmV2CQk9IGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tX3JldiwKKwkuZ2V0X251bV9hbnRfY29uZmlnCT0gYXRoOWtfaHdfQVI5Mjg3X2dldF9udW1fYW50X2NvbmZpZywKKwkuZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZwk9IGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tX2FudGVubmFfY2ZnLAorCS5zZXRfYm9hcmRfdmFsdWVzCT0gYXRoOWtfaHdfQVI5Mjg3X3NldF9ib2FyZF92YWx1ZXMsCisJLnNldF9hZGRhYwkJPSBhdGg5a19od19BUjkyODdfc2V0X2FkZGFjLAorCS5zZXRfdHhwb3dlcgkJPSBhdGg5a19od19BUjkyODdfc2V0X3R4cG93ZXIsCisJLmdldF9zcHVyX2NoYW5uZWwJPSBhdGg5a19od19BUjkyODdfZ2V0X3NwdXJfY2hhbm5lbAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fZGVmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tX2RlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlN2ZiNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tX2RlZi5jCkBAIC0wLDAgKzEsMTM4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdGF0aWMgdm9pZCBhdGg5a19nZXRfdHhnYWluX2luZGV4KHN0cnVjdCBhdGhfaHcgKmFoLAorCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICpyYXdEYXRhc2V0T3BMb29wLAorCQl1OCAqY2FsQ2hhbnMsICB1MTYgYXZhaWxQaWVycywgdTggKnB3ciwgdTggKnBjZGFjSWR4KQoreworCXU4IHBjZGFjLCBpID0gMDsKKwl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwLCBudW1QaWVyczsKKwlib29sIG1hdGNoOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCWZvciAobnVtUGllcnMgPSAwOyBudW1QaWVycyA8IGF2YWlsUGllcnM7IG51bVBpZXJzKyspCisJCWlmIChjYWxDaGFuc1tudW1QaWVyc10gPT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkKKwkJCWJyZWFrOworCisJbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCisJCQkodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLCBJU19DSEFOXzJHSFooY2hhbikpLAorCQkJY2FsQ2hhbnMsIG51bVBpZXJzLCAmaWR4TCwgJmlkeFIpOworCWlmIChtYXRjaCkgeworCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4TF0ucGNkYWNbMF1bMF07CisJCSpwd3IgPSByYXdEYXRhc2V0T3BMb29wW2lkeExdLnB3clBkZ1swXVswXTsKKwl9IGVsc2UgeworCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucGNkYWNbMF1bMF07CisJCSpwd3IgPSAocmF3RGF0YXNldE9wTG9vcFtpZHhMXS5wd3JQZGdbMF1bMF0gKworCQkJCXJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucHdyUGRnWzBdWzBdKS8yOworCX0KKworCXdoaWxlIChwY2RhYyA+IGFoLT5vcmlnaW5hbEdhaW5baV0gJiYKKwkJCWkgPCAoQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAtIDEpKQorCQlpKys7CisKKwkqcGNkYWNJZHggPSBpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfb2xjX2dldF9wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCisJCQkJdTMyIGluaXRUeEdhaW4sCisJCQkJaW50IHR4UG93ZXIsCisJCQkJdTggKnBQREFEQ1ZhbHVlcykKK3sKKwl1MzIgaTsKKwl1MzIgb2Zmc2V0OworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw2XzAsCisJCQlBUl9QSFlfVFhfUFdSQ1RSTF9FUlJfRVNUX01PREUsIDMpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNl8xLAorCQkJQVJfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFLCAzKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNywKKwkJCUFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTiwgaW5pdFR4R2Fpbik7CisKKwlvZmZzZXQgPSB0eFBvd2VyOworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUzsgaSsrKQorCQlpZiAoaSA8IG9mZnNldCkKKwkJCXBQREFEQ1ZhbHVlc1tpXSA9IDB4MDsKKwkJZWxzZQorCQkJcFBEQURDVmFsdWVzW2ldID0gMHhGRjsKK30KKworc3RhdGljIGludCBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV92ZXIoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuICgoYWgtPmVlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci52ZXJzaW9uID4+IDEyKSAmIDB4Rik7Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fcmV2KHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiAoKGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIudmVyc2lvbikgJiAweEZGRik7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3X2RlZl9maWxsX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKyNkZWZpbmUgU0laRV9FRVBST01fREVGIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSAvIHNpemVvZih1MTYpKQorCXUxNiAqZWVwX2RhdGEgPSAodTE2ICopJmFoLT5lZXByb20uZGVmOworCWludCBhZGRyLCBhcjU0MTZfZWVwX3N0YXJ0X2xvYyA9IDB4MTAwOworCisJZm9yIChhZGRyID0gMDsgYWRkciA8IFNJWkVfRUVQUk9NX0RFRjsgYWRkcisrKSB7CisJCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgYWRkciArIGFyNTQxNl9lZXBfc3RhcnRfbG9jLAorCQkJCQkgZWVwX2RhdGEpKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCQkiVW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvblxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJZWVwX2RhdGErKzsKKwl9CisJcmV0dXJuIHRydWU7CisjdW5kZWYgU0laRV9FRVBST01fREVGCit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2NoZWNrX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9CisJCShzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKikgJmFoLT5lZXByb20uZGVmOworCXUxNiAqZWVwZGF0YSwgdGVtcCwgbWFnaWMsIG1hZ2ljMjsKKwl1MzIgc3VtID0gMCwgZWw7CisJYm9vbCBuZWVkX3N3YXAgPSBmYWxzZTsKKwlpbnQgaSwgYWRkciwgc2l6ZTsKKworCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQsICZtYWdpYykpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsICJSZWFkaW5nIE1hZ2ljICMgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICghYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOworCisJCWlmIChtYWdpYyAhPSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7CisJCQltYWdpYzIgPSBzd2FiMTYobWFnaWMpOworCisJCQlpZiAobWFnaWMyID09IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKKwkJCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZik7CisJCQkJbmVlZF9zd2FwID0gdHJ1ZTsKKwkJCQllZXBkYXRhID0gKHUxNiAqKSAoJmFoLT5lZXByb20pOworCisJCQkJZm9yIChhZGRyID0gMDsgYWRkciA8IHNpemUgLyBzaXplb2YodTE2KTsgYWRkcisrKSB7CisJCQkJCXRlbXAgPSBzd2FiMTYoKmVlcGRhdGEpOworCQkJCQkqZWVwZGF0YSA9IHRlbXA7CisJCQkJCWVlcGRhdGErKzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJCQkiSW52YWxpZCBFRVBST00gTWFnaWMuICIKKwkJCQkJIkVuZGlhbm5lc3MgbWlzbWF0Y2guXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCX0KKworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwgIm5lZWRfc3dhcCA9ICVzLlxuIiwKKwkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7CisKKwlpZiAobmVlZF9zd2FwKQorCQllbCA9IHN3YWIxNihhaC0+ZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJZWxzZQorCQllbCA9IGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIubGVuZ3RoOworCisJaWYgKGVsID4gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikpCisJCWVsID0gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikgLyBzaXplb2YodTE2KTsKKwllbHNlCisJCWVsID0gZWwgLyBzaXplb2YodTE2KTsKKworCWVlcGRhdGEgPSAodTE2ICopKCZhaC0+ZWVwcm9tKTsKKworCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQorCQlzdW0gXj0gKmVlcGRhdGErKzsKKworCWlmIChuZWVkX3N3YXApIHsKKwkJdTMyIGludGVnZXIsIGo7CisJCXUxNiB3b3JkOworCisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJFRVBST00gRW5kaWFubmVzcyBpcyBub3QgbmF0aXZlLi4gQ2hhbmdpbmcuXG4iKTsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGgpOworCQllZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbik7CisJCWVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0pOworCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0pOworCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXApOworCQllZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwID0gd29yZDsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShlZXAtPm1vZGFsSGVhZGVyKTsgaisrKSB7CisJCQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KKwkJCQkmZWVwLT5tb2RhbEhlYWRlcltqXTsKKwkJCWludGVnZXIgPSBzd2FiMzIocE1vZGFsLT5hbnRDdHJsQ29tbW9uKTsKKwkJCXBNb2RhbC0+YW50Q3RybENvbW1vbiA9IGludGVnZXI7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CisJCQkJaW50ZWdlciA9IHN3YWIzMihwTW9kYWwtPmFudEN0cmxDaGFpbltpXSk7CisJCQkJcE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPSBpbnRlZ2VyOworCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7CisJCQkJd29yZCA9IHN3YWIxNihwTW9kYWwtPnNwdXJDaGFuc1tpXS5zcHVyQ2hhbik7CisJCQkJcE1vZGFsLT5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4gPSB3b3JkOworCQkJfQorCQl9CisJfQorCisJaWYgKHN1bSAhPSAweGZmZmYgfHwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSAhPSBBUjU0MTZfRUVQX1ZFUiB8fAorCSAgICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDwgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUikgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCSJCYWQgRUVQUk9NIGNoZWNrc3VtIDB4JXggb3IgcmV2aXNpb24gMHglMDR4XG4iLAorCQkJc3VtLCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgYXRoOWtfaHdfZGVmX2dldF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgZW51bSBlZXByb21fcGFyYW0gcGFyYW0pCit7CisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7CisJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9IGVlcC0+bW9kYWxIZWFkZXI7CisJc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOworCisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgRUVQX05GVEhSRVNIXzU6CisJCXJldHVybiBwTW9kYWxbMF0ubm9pc2VGbG9vclRocmVzaENoWzBdOworCWNhc2UgRUVQX05GVEhSRVNIXzI6CisJCXJldHVybiBwTW9kYWxbMV0ubm9pc2VGbG9vclRocmVzaENoWzBdOworCWNhc2UgQVJfRUVQUk9NX01BQygwKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzBdIDw8IDggfCBwQmFzZS0+bWFjQWRkclsxXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMSk6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkclsyXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbM107CisJY2FzZSBBUl9FRVBST01fTUFDKDIpOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbNF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzVdOworCWNhc2UgRUVQX1JFR18wOgorCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblswXTsKKwljYXNlIEVFUF9SRUdfMToKKwkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMV07CisJY2FzZSBFRVBfT1BfQ0FQOgorCQlyZXR1cm4gcEJhc2UtPmRldmljZUNhcDsKKwljYXNlIEVFUF9PUF9NT0RFOgorCQlyZXR1cm4gcEJhc2UtPm9wQ2FwRmxhZ3M7CisJY2FzZSBFRVBfUkZfU0lMRU5UOgorCQlyZXR1cm4gcEJhc2UtPnJmU2lsZW50OworCWNhc2UgRUVQX09CXzU6CisJCXJldHVybiBwTW9kYWxbMF0ub2I7CisJY2FzZSBFRVBfREJfNToKKwkJcmV0dXJuIHBNb2RhbFswXS5kYjsKKwljYXNlIEVFUF9PQl8yOgorCQlyZXR1cm4gcE1vZGFsWzFdLm9iOworCWNhc2UgRUVQX0RCXzI6CisJCXJldHVybiBwTW9kYWxbMV0uZGI7CisJY2FzZSBFRVBfTUlOT1JfUkVWOgorCQlyZXR1cm4gQVI1NDE2X1ZFUl9NQVNLOworCWNhc2UgRUVQX1RYX01BU0s6CisJCXJldHVybiBwQmFzZS0+dHhNYXNrOworCWNhc2UgRUVQX1JYX01BU0s6CisJCXJldHVybiBwQmFzZS0+cnhNYXNrOworCWNhc2UgRUVQX1JYR0FJTl9UWVBFOgorCQlyZXR1cm4gcEJhc2UtPnJ4R2FpblR5cGU7CisJY2FzZSBFRVBfVFhHQUlOX1RZUEU6CisJCXJldHVybiBwQmFzZS0+dHhHYWluVHlwZTsKKwljYXNlIEVFUF9PTF9QV1JDVFJMOgorCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KQorCQkJcmV0dXJuIHBCYXNlLT5vcGVuTG9vcFB3ckNudGwgPyB0cnVlIDogZmFsc2U7CisJCWVsc2UKKwkJCXJldHVybiBmYWxzZTsKKwljYXNlIEVFUF9SQ19DSEFJTl9NQVNLOgorCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KQorCQkJcmV0dXJuIHBCYXNlLT5yY0NoYWluTWFzazsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJY2FzZSBFRVBfREFDX0hQV1JfNUc6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjApCisJCQlyZXR1cm4gcEJhc2UtPmRhY0hpUHdyTW9kZV81RzsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJY2FzZSBFRVBfRlJBQ19OXzVHOgorCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIyKQorCQkJcmV0dXJuIHBCYXNlLT5mcmFjX25fNWc7CisJCWVsc2UKKwkJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZGVmX3NldF9nYWluKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCwKKwkJCQkgIHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwLAorCQkJCSAgdTggdHhSeEF0dGVuTG9jYWwsIGludCByZWdDaGFpbk9mZnNldCwgaW50IGkpCit7CisJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8zKSB7CisJCXR4UnhBdHRlbkxvY2FsID0gcE1vZGFsLT50eFJ4QXR0ZW5DaFtpXTsKKworCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX01BUkdJTiwKKwkJCSAgICAgIHBNb2RhbC0+YnN3TWFyZ2luW2ldKTsKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9EQiwKKwkJCSAgICAgIHBNb2RhbC0+YnN3QXR0ZW5baV0pOworCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX01BUkdJTiwKKwkJCSAgICAgIHBNb2RhbC0+eGF0dGVuMk1hcmdpbltpXSk7CisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfREIsCisJCQkgICAgICBwTW9kYWwtPnhhdHRlbjJEYltpXSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX0JTV19NQVJHSU4pCisJCQkgIHwgU00ocE1vZGFsLT4gYnN3TWFyZ2luW2ldLAorCQkJICAgICAgIEFSX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTikpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0KSAmCisJCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9CU1dfQVRURU4pCisJCQkgIHwgU00ocE1vZGFsLT5ic3dBdHRlbltpXSwKKwkJCSAgICAgICBBUl9QSFlfR0FJTl8yR0haX0JTV19BVFRFTikpOworCQl9CisJfQorCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJUkVHX1JNV19GSUVMRChhaCwKKwkJICAgICAgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAorCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX0FUVEVOLCB0eFJ4QXR0ZW5Mb2NhbCk7CisJCVJFR19STVdfRklFTEQoYWgsCisJCSAgICAgIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKKwkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9NQVJHSU4sIHBNb2RhbC0+cnhUeE1hcmdpbkNoW2ldKTsKKwl9IGVsc2UgeworCQlSRUdfV1JJVEUoYWgsCisJCQkgIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH5BUl9QSFlfUlhHQUlOX1RYUlhfQVRURU4pCisJCQkgIHwgU00odHhSeEF0dGVuTG9jYWwsIEFSX1BIWV9SWEdBSU5fVFhSWF9BVFRFTikpOworCQlSRUdfV1JJVEUoYWgsCisJCQkgIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX1JYVFhfTUFSR0lOKSB8CisJCQkgIFNNKHBNb2RhbC0+cnhUeE1hcmdpbkNoW2ldLCBBUl9QSFlfR0FJTl8yR0haX1JYVFhfTUFSR0lOKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19kZWZfc2V0X2JvYXJkX3ZhbHVlcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCWludCBpLCByZWdDaGFpbk9mZnNldDsKKwl1OCB0eFJ4QXR0ZW5Mb2NhbDsKKworCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKwl0eFJ4QXR0ZW5Mb2NhbCA9IElTX0NIQU5fMkdIWihjaGFuKSA/IDIzIDogNDQ7CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLAorCQkgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX2FudGVubmFfY2ZnKGFoLCBjaGFuKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgeworCQlpZiAoQVJfU1JFVl85MjgwKGFoKSkgeworCQkJaWYgKGkgPj0gMikKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmIChpICE9IDApKQorCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKKwkJZWxzZQorCQkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOworCisJCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DSEFJTl8wICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgIHBNb2RhbC0+YW50Q3RybENoYWluW2ldKTsKKworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH4oQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYgfAorCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbElDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbFFDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYpKTsKKworCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkKKwkJCWF0aDlrX2h3X2RlZl9zZXRfZ2FpbihhaCwgcE1vZGFsLCBlZXAsIHR4UnhBdHRlbkxvY2FsLAorCQkJCQkgICAgICByZWdDaGFpbk9mZnNldCwgaSk7CisJfQorCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gwLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfT0IsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9PQl9TLAorCQkJCQkJICBwTW9kYWwtPm9iKTsKKwkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMCwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX0RCLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfREJfUywKKwkJCQkJCSAgcE1vZGFsLT5kYik7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDEsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9PQiwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX09CX1MsCisJCQkJCQkgIHBNb2RhbC0+b2JfY2gxKTsKKwkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMSwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX0RCLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfREJfUywKKwkJCQkJCSAgcE1vZGFsLT5kYl9jaDEpOworCQl9IGVsc2UgeworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gwLAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfT0I1LAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfT0I1X1MsCisJCQkJCQkgIHBNb2RhbC0+b2IpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gwLAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfREI1LAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfREI1X1MsCisJCQkJCQkgIHBNb2RhbC0+ZGIpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gxLAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfT0I1LAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfT0I1X1MsCisJCQkJCQkgIHBNb2RhbC0+b2JfY2gxKTsKKwkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMSwKKwkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX0RCNSwKKwkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX0RCNV9TLAorCQkJCQkJICBwTW9kYWwtPmRiX2NoMSk7CisJCX0KKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fVE9QMiwKKwkJCQkJICBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMLAorCQkJCQkgIEFSX0FOX1RPUDJfWFBBQklBU19MVkxfUywKKwkJCQkJICBwTW9kYWwtPnhwYUJpYXNMdmwpOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9UT1AyLAorCQkJCQkgIEFSX0FOX1RPUDJfTE9DQUxCSUFTLAorCQkJCQkgIEFSX0FOX1RPUDJfTE9DQUxCSUFTX1MsCisJCQkJCSAgcE1vZGFsLT5sb2NhbF9iaWFzKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1hQQV9DRkcsIEFSX1BIWV9GT1JDRV9YUEFfQ0ZHLAorCQkJICAgICAgcE1vZGFsLT5mb3JjZV94cGFvbik7CisJfQorCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLCBBUl9QSFlfU0VUVExJTkdfU1dJVENILAorCQkgICAgICBwTW9kYWwtPnN3aXRjaFNldHRsaW5nKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwgQVJfUEhZX0RFU0lSRURfU1pfQURDLAorCQkgICAgICBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKKworCWlmICghQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osCisJCQkgICAgICBBUl9QSFlfREVTSVJFRF9TWl9QR0EsCisJCQkgICAgICBwTW9kYWwtPnBnYURlc2lyZWRTaXplKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1JGX0NUTDQsCisJCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQV9PRkYpCisJCSAgfCBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsCisJCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQl9PRkYpCisJCSAgfCBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLAorCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQV9PTikKKwkJICB8IFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sCisJCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFCX09OKSk7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMywgQVJfUEhZX1RYX0VORF9UT19BMl9SWF9PTiwKKwkJICAgICAgcE1vZGFsLT50eEVuZFRvUnhPbik7CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUjkyODBfUEhZX0NDQV9USFJFU0g2MiwKKwkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQTAsCisJCQkgICAgICBBUl9QSFlfRVhUX0NDQTBfVEhSRVNINjIsCisJCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwl9IGVsc2UgeworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUl9QSFlfQ0NBX1RIUkVTSDYyLAorCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9FWFRfQ0NBLAorCQkJICAgICAgQVJfUEhZX0VYVF9DQ0FfVEhSRVNINjIsCisJCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwl9CisKKwlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsCisJCQkgICAgICBBUl9QSFlfVFhfRU5EX0RBVEFfU1RBUlQsCisJCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb0RhdGFTdGFydCk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX1BBX09OLAorCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9QYU9uKTsKKwl9CisKKwlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKKwkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywKKwkJCQkgICAgICBBUl9QSFlfU0VUVExJTkdfU1dJVENILAorCQkJCSAgICAgIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKKwl9CisKKwlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJgorCSAgICBBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkpCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0tfVFhfQ1RSTCwKKwkJCSAgICAgIEFSX1BIWV9DQ0tfVFhfQ1RSTF9UWF9EQUNfU0NBTEVfQ0NLLAorCQkJICAgICAgcE1vZGFsLT5taXNjQml0cyk7CisKKworCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpICYmIEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCkgeworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fVE9QMSwgQVJfQU5fVE9QMV9EQUNJUE1PREUsCisJCQkJCWVlcC0+YmFzZUVlcEhlYWRlci5kYWNMcE1vZGUpOworCQllbHNlIGlmIChlZXAtPmJhc2VFZXBIZWFkZXIuZGFjSGlQd3JNb2RlXzVHKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fVE9QMSwgQVJfQU5fVE9QMV9EQUNJUE1PREUsIDApOworCQllbHNlCisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9BTl9UT1AxLCBBUl9BTl9UT1AxX0RBQ0lQTU9ERSwKKwkJCQkgICAgICBlZXAtPmJhc2VFZXBIZWFkZXIuZGFjTHBNb2RlKTsKKworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRlJBTUVfQ1RMLCBBUl9QSFlfRlJBTUVfQ1RMX1RYX0NMSVAsCisJCQkgICAgICBwTW9kYWwtPm1pc2NCaXRzID4+IDIpOworCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMOSwKKwkJCSAgICAgIEFSX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDSywKKwkJCSAgICAgIGVlcC0+YmFzZUVlcEhlYWRlci5kZXNpcmVkU2NhbGVDQ0spOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZGVmX3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKyNkZWZpbmUgWFBBX0xWTF9GUkVRKGNudCkgKHBNb2RhbC0+eHBhQmlhc0x2bEZyZXFbY250XSkKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCXU4IGJpYXNsZXZlbDsKKworCWlmIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl85MTYwKQorCQlyZXR1cm47CisKKwlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcpCisJCXJldHVybjsKKworCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKworCWlmIChwTW9kYWwtPnhwYUJpYXNMdmwgIT0gMHhmZikgeworCQliaWFzbGV2ZWwgPSBwTW9kYWwtPnhwYUJpYXNMdmw7CisJfSBlbHNlIHsKKwkJdTE2IHJlc2V0RnJlcUJpbiwgZnJlcUJpbiwgZnJlcUNvdW50ID0gMDsKKwkJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOworCisJCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCQlyZXNldEZyZXFCaW4gPSBGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCQlmcmVxQmluID0gWFBBX0xWTF9GUkVRKDApICYgMHhmZjsKKwkJYmlhc2xldmVsID0gKHU4KSAoWFBBX0xWTF9GUkVRKDApID4+IDE0KTsKKworCQlmcmVxQ291bnQrKzsKKworCQl3aGlsZSAoZnJlcUNvdW50IDwgMykgeworCQkJaWYgKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID09IDB4MCkKKwkJCQlicmVhazsKKworCQkJZnJlcUJpbiA9IFhQQV9MVkxfRlJFUShmcmVxQ291bnQpICYgMHhmZjsKKwkJCWlmIChyZXNldEZyZXFCaW4gPj0gZnJlcUJpbikKKwkJCQliaWFzbGV2ZWwgPSAodTgpKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID4+IDE0KTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJCWZyZXFDb3VudCsrOworCQl9CisJfQorCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQlJTklfUkEoJmFoLT5pbmlBZGRhYywgNywgMSkgPSAoSU5JX1JBKCZhaC0+aW5pQWRkYWMsCisJCQkJCTcsIDEpICYgKH4weDE4KSkgfCBiaWFzbGV2ZWwgPDwgMzsKKwl9IGVsc2UgeworCQlJTklfUkEoJmFoLT5pbmlBZGRhYywgNiwgMSkgPSAoSU5JX1JBKCZhaC0+aW5pQWRkYWMsCisJCQkJCTYsIDEpICYgKH4weGMwKSkgfCBiaWFzbGV2ZWwgPDwgNjsKKwl9CisjdW5kZWYgWFBBX0xWTF9GUkVRCit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgKnBSYXdEYXRhU2V0LAorCQkJCXU4ICpiQ2hhbnMsIHUxNiBhdmFpbFBpZXJzLAorCQkJCXUxNiB0UGRHYWluT3ZlcmxhcCwgaW50MTZfdCAqcE1pbkNhbFBvd2VyLAorCQkJCXUxNiAqcFBkR2FpbkJvdW5kYXJpZXMsIHU4ICpwUERBRENWYWx1ZXMsCisJCQkJdTE2IG51bVhwZEdhaW5zKQoreworCWludCBpLCBqLCBrOworCWludDE2X3Qgc3M7CisJdTE2IGlkeEwgPSAwLCBpZHhSID0gMCwgbnVtUGllcnM7CisJc3RhdGljIHU4IHZwZFRhYmxlTFtBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisJc3RhdGljIHU4IHZwZFRhYmxlUltBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisJc3RhdGljIHU4IHZwZFRhYmxlSVtBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisKKwl1OCAqcFZwZEwsICpwVnBkUiwgKnBQd3JMLCAqcFB3clI7CisJdTggbWluUHdyVDRbQVI1NDE2X05VTV9QRF9HQUlOU107CisJdTggbWF4UHdyVDRbQVI1NDE2X05VTV9QRF9HQUlOU107CisJaW50MTZfdCB2cGRTdGVwOworCWludDE2X3QgdG1wVmFsOworCXUxNiBzaXplQ3VyclZwZFRhYmxlLCBtYXhJbmRleCwgdGd0SW5kZXg7CisJYm9vbCBtYXRjaDsKKwlpbnQxNl90IG1pbkRlbHRhID0gMDsKKwlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CisKKwlmb3IgKG51bVBpZXJzID0gMDsgbnVtUGllcnMgPCBhdmFpbFBpZXJzOyBudW1QaWVycysrKSB7CisJCWlmIChiQ2hhbnNbbnVtUGllcnNdID09IEFSNTQxNl9CQ0hBTl9VTlVTRUQpCisJCQlicmVhazsKKwl9CisKKwltYXRjaCA9IGF0aDlrX2h3X2dldF9sb3dlcl91cHBlcl9pbmRleCgodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLAorCQkJCQkJCSAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSwKKwkJCQkJICAgICAgIGJDaGFucywgbnVtUGllcnMsICZpZHhMLCAmaWR4Uik7CisKKwlpZiAobWF0Y2gpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJCW1pblB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzBdOworCQkJbWF4UHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bNF07CisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCXBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXSwKKwkJCQkJcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldLAorCQkJCQlBUjU0MTZfUERfR0FJTl9JQ0VQVFMsCisJCQkJCXZwZFRhYmxlSVtpXSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgeworCQkJcFZwZEwgPSBwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV07CisJCQlwUHdyTCA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXTsKKwkJCXBWcGRSID0gcFJhd0RhdGFTZXRbaWR4Ul0udnBkUGRnW2ldOworCQkJcFB3clIgPSBwUmF3RGF0YVNldFtpZHhSXS5wd3JQZGdbaV07CisKKwkJCW1pblB3clQ0W2ldID0gbWF4KHBQd3JMWzBdLCBwUHdyUlswXSk7CisKKwkJCW1heFB3clQ0W2ldID0KKwkJCQltaW4ocFB3ckxbQVI1NDE2X1BEX0dBSU5fSUNFUFRTIC0gMV0sCisJCQkJICAgIHBQd3JSW0FSNTQxNl9QRF9HQUlOX0lDRVBUUyAtIDFdKTsKKworCisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCQlwUHdyTCwgcFZwZEwsCisJCQkJCQlBUjU0MTZfUERfR0FJTl9JQ0VQVFMsCisJCQkJCQl2cGRUYWJsZUxbaV0pOworCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAorCQkJCQkJcFB3clIsIHBWcGRSLAorCQkJCQkJQVI1NDE2X1BEX0dBSU5fSUNFUFRTLAorCQkJCQkJdnBkVGFibGVSW2ldKTsKKworCQkJZm9yIChqID0gMDsgaiA8PSAobWF4UHdyVDRbaV0gLSBtaW5Qd3JUNFtpXSkgLyAyOyBqKyspIHsKKwkJCQl2cGRUYWJsZUlbaV1bal0gPQorCQkJCQkodTgpKGF0aDlrX2h3X2ludGVycG9sYXRlKCh1MTYpCisJCQkJCSAgICAgRlJFUTJGQklOKGNlbnRlcnMuCisJCQkJCQkgICAgICAgc3ludGhfY2VudGVyLAorCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWgorCQkJCQkJICAgICAgIChjaGFuKSksCisJCQkJCSAgICAgYkNoYW5zW2lkeExdLCBiQ2hhbnNbaWR4Ul0sCisJCQkJCSAgICAgdnBkVGFibGVMW2ldW2pdLCB2cGRUYWJsZVJbaV1bal0pKTsKKwkJCX0KKwkJfQorCX0KKworCSpwTWluQ2FsUG93ZXIgPSAoaW50MTZfdCkobWluUHdyVDRbMF0gLyAyKTsKKworCWsgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJaWYgKGkgPT0gKG51bVhwZEdhaW5zIC0gMSkpCisJCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CisJCQkJKHUxNikobWF4UHdyVDRbaV0gLyAyKTsKKwkJZWxzZQorCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQorCQkJCSh1MTYpKChtYXhQd3JUNFtpXSArIG1pblB3clQ0W2kgKyAxXSkgLyA0KTsKKworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CisJCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKKworCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCW1pbkRlbHRhID0gcFBkR2FpbkJvdW5kYXJpZXNbMF0gLSAyMzsKKwkJCXBQZEdhaW5Cb3VuZGFyaWVzWzBdID0gMjM7CisJCX0gZWxzZSB7CisJCQltaW5EZWx0YSA9IDA7CisJCX0KKworCQlpZiAoaSA9PSAwKSB7CisJCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJCQlzcyA9IChpbnQxNl90KSgwIC0gKG1pblB3clQ0W2ldIC8gMikpOworCQkJZWxzZQorCQkJCXNzID0gMDsKKwkJfSBlbHNlIHsKKwkJCXNzID0gKGludDE2X3QpKChwUGRHYWluQm91bmRhcmllc1tpIC0gMV0gLQorCQkJCQkobWluUHdyVDRbaV0gLyAyKSkgLQorCQkJCSAgICAgICB0UGRHYWluT3ZlcmxhcCArIDEgKyBtaW5EZWx0YSk7CisJCX0KKwkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMV0gLSB2cGRUYWJsZUlbaV1bMF0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisKKwkJd2hpbGUgKChzcyA8IDApICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CisJCQl0bXBWYWwgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzBdICsgc3MgKiB2cGRTdGVwKTsKKwkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsIDwgMCkgPyAwIDogdG1wVmFsKTsKKwkJCXNzKys7CisJCX0KKworCQlzaXplQ3VyclZwZFRhYmxlID0gKHU4KSAoKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMiArIDEpOworCQl0Z3RJbmRleCA9ICh1OCkocFBkR2FpbkJvdW5kYXJpZXNbaV0gKyB0UGRHYWluT3ZlcmxhcCAtCisJCQkJKG1pblB3clQ0W2ldIC8gMikpOworCQltYXhJbmRleCA9ICh0Z3RJbmRleCA8IHNpemVDdXJyVnBkVGFibGUpID8KKwkJCXRndEluZGV4IDogc2l6ZUN1cnJWcGRUYWJsZTsKKworCQl3aGlsZSAoKHNzIDwgbWF4SW5kZXgpICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CisJCQlwUERBRENWYWx1ZXNbaysrXSA9IHZwZFRhYmxlSVtpXVtzcysrXTsKKwkJfQorCisJCXZwZFN0ZXAgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSAtCisJCQkJICAgIHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMl0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisKKwkJaWYgKHRndEluZGV4ID4gbWF4SW5kZXgpIHsKKwkJCXdoaWxlICgoc3MgPD0gdGd0SW5kZXgpICYmCisJCQkgICAgICAgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKKwkJCQl0bXBWYWwgPSAoaW50MTZfdCkoKHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMV0gKworCQkJCQkJICAgIChzcyAtIG1heEluZGV4ICsgMSkgKiB2cGRTdGVwKSk7CisJCQkJcFBEQURDVmFsdWVzW2srK10gPSAodTgpKCh0bXBWYWwgPiAyNTUpID8KKwkJCQkJCQkgMjU1IDogdG1wVmFsKTsKKwkJCQlzcysrOworCQkJfQorCQl9CisJfQorCisJd2hpbGUgKGkgPCBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSykgeworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9IHBQZEdhaW5Cb3VuZGFyaWVzW2kgLSAxXTsKKwkJaSsrOworCX0KKworCXdoaWxlIChrIDwgQVI1NDE2X05VTV9QREFEQ19WQUxVRVMpIHsKKwkJcFBEQURDVmFsdWVzW2tdID0gcFBEQURDVmFsdWVzW2sgLSAxXTsKKwkJaysrOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9jYWxfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgIGludDE2X3QgKnBUeFBvd2VySW5kZXhPZmZzZXQpCit7CisjZGVmaW5lIFNNX1BEX0dBSU4oeCkgU00oMHgzOCwgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXyMjeCkKKyNkZWZpbmUgU01fUERHQUlOX0IoeCwgeSkgXAorCQlTTSgoZ2FpbkJvdW5kYXJpZXNbeF0pLCBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfIyN5KQorCisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLmRlZjsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgKnBSYXdEYXRhc2V0OworCXU4ICpwQ2FsQkNoYW5zID0gTlVMTDsKKwl1MTYgcGRHYWluT3ZlcmxhcF90MjsKKwlzdGF0aWMgdTggcGRhZGNWYWx1ZXNbQVI1NDE2X05VTV9QREFEQ19WQUxVRVNdOworCXUxNiBnYWluQm91bmRhcmllc1tBUjU0MTZfUERfR0FJTlNfSU5fTUFTS107CisJdTE2IG51bVBpZXJzLCBpLCBqOworCWludDE2X3QgdE1pbkNhbFBvd2VyOworCXUxNiBudW1YcGRHYWluLCB4cGRNYXNrOworCXUxNiB4cGRHYWluVmFsdWVzW0FSNTQxNl9OVU1fUERfR0FJTlNdID0geyAwLCAwLCAwLCAwIH07CisJdTMyIHJlZzMyLCByZWdPZmZzZXQsIHJlZ0NoYWluT2Zmc2V0OworCWludDE2X3QgbW9kYWxJZHg7CisKKwltb2RhbElkeCA9IElTX0NIQU5fMkdIWihjaGFuKSA/IDEgOiAwOworCXhwZE1hc2sgPSBwRWVwRGF0YS0+bW9kYWxIZWFkZXJbbW9kYWxJZHhdLnhwZEdhaW47CisKKwlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7CisJCXBkR2Fpbk92ZXJsYXBfdDIgPQorCQkJcEVlcERhdGEtPm1vZGFsSGVhZGVyW21vZGFsSWR4XS5wZEdhaW5PdmVybGFwOworCX0gZWxzZSB7CisJCXBkR2Fpbk92ZXJsYXBfdDIgPSAodTE2KShNUyhSRUdfUkVBRChhaCwgQVJfUEhZX1RQQ1JHNSksCisJCQkJCSAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkpOworCX0KKworCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKKwkJcENhbEJDaGFucyA9IHBFZXBEYXRhLT5jYWxGcmVxUGllcjJHOworCQludW1QaWVycyA9IEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTOworCX0gZWxzZSB7CisJCXBDYWxCQ2hhbnMgPSBwRWVwRGF0YS0+Y2FsRnJlcVBpZXI1RzsKKwkJbnVtUGllcnMgPSBBUjU0MTZfTlVNXzVHX0NBTF9QSUVSUzsKKwl9CisKKwlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIgJiYgSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCXBSYXdEYXRhc2V0ID0gcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbMF07CisJCWFoLT5pbml0UERBREMgPSAoKHN0cnVjdCBjYWxEYXRhUGVyRnJlcU9wTG9vcCAqKQorCQkJCSBwUmF3RGF0YXNldCktPnZwZFBkZ1swXVswXTsKKwl9CisKKwludW1YcGRHYWluID0gMDsKKworCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X1BEX0dBSU5TX0lOX01BU0s7IGkrKykgeworCQlpZiAoKHhwZE1hc2sgPj4gKEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgeworCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI1NDE2X05VTV9QRF9HQUlOUykKKwkJCQlicmVhazsKKwkJCXhwZEdhaW5WYWx1ZXNbbnVtWHBkR2Fpbl0gPQorCQkJCSh1MTYpKEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLIC0gaSk7CisJCQludW1YcGRHYWluKys7CisJCX0KKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOLAorCQkgICAgICAobnVtWHBkR2FpbiAtIDEpICYgMHgzKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMSwKKwkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCisJCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLAorCQkgICAgICB4cGRHYWluVmFsdWVzWzJdKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCisJCSAgICAoaSAhPSAwKSkgeworCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKKwkJfSBlbHNlCisJCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7CisKKwkJaWYgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnR4TWFzayAmICgxIDw8IGkpKSB7CisJCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQorCQkJCXBSYXdEYXRhc2V0ID0gcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbaV07CisJCQllbHNlCisJCQkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGE1R1tpXTsKKworCisJCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCQl1OCBwY2RhY0lkeDsKKwkJCQl1OCB0eFBvd2VyOworCisJCQkJYXRoOWtfZ2V0X3R4Z2Fpbl9pbmRleChhaCwgY2hhbiwKKwkJCQkoc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICopcFJhd0RhdGFzZXQsCisJCQkJcENhbEJDaGFucywgbnVtUGllcnMsICZ0eFBvd2VyLCAmcGNkYWNJZHgpOworCQkJCWF0aDlrX29sY19nZXRfcGRhZGNzKGFoLCBwY2RhY0lkeCwKKwkJCQkJCSAgICAgdHhQb3dlci8yLCBwZGFkY1ZhbHVlcyk7CisJCQl9IGVsc2UgeworCQkJCWF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwKKwkJCQkJCQljaGFuLCBwUmF3RGF0YXNldCwKKwkJCQkJCQlwQ2FsQkNoYW5zLCBudW1QaWVycywKKwkJCQkJCQlwZEdhaW5PdmVybGFwX3QyLAorCQkJCQkJCSZ0TWluQ2FsUG93ZXIsCisJCQkJCQkJZ2FpbkJvdW5kYXJpZXMsCisJCQkJCQkJcGRhZGNWYWx1ZXMsCisJCQkJCQkJbnVtWHBkR2Fpbik7CisJCQl9CisKKwkJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7CisJCQkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKSB7CisJCQkJCVJFR19XUklURShhaCwKKwkJCQkJCUFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKKwkJCQkJCVNNKDB4NiwKKwkJCQkJCUFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKSB8CisJCQkJCQlTTV9QRF9HQUlOKDEpIHwgU01fUERfR0FJTigyKSB8CisJCQkJCQlTTV9QRF9HQUlOKDMpIHwgU01fUERfR0FJTig0KSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJUkVHX1dSSVRFKGFoLAorCQkJCQkJQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAorCQkJCQkJU00ocGRHYWluT3ZlcmxhcF90MiwKKwkJCQkJCUFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKXwKKwkJCQkJCVNNX1BER0FJTl9CKDAsIDEpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDEsIDIpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDIsIDMpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDMsIDQpKTsKKwkJCQl9CisJCQl9CisKKwkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArIHJlZ0NoYWluT2Zmc2V0OworCQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKKwkJCQlyZWczMiA9ICgocGRhZGNWYWx1ZXNbNCAqIGogKyAwXSAmIDB4RkYpIDw8IDApIHwKKwkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDFdICYgMHhGRikgPDwgOCkgfAorCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgMl0gJiAweEZGKSA8PCAxNil8CisJCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAzXSAmIDB4RkYpIDw8IDI0KTsKKwkJCQlSRUdfV1JJVEUoYWgsIHJlZ09mZnNldCwgcmVnMzIpOworCisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAorCQkJCQlpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAorCQkJCQlyZWczMik7CisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJCQkiUERBREM6IENoYWluICVkIHwgUERBREMgJTNkICIKKwkJCQkJIlZhbHVlICUzZCB8IFBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCisJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgUERBREMgJTNkICIKKwkJCQkJIlZhbHVlICUzZCB8XG4iLAorCQkJCQlpLCA0ICogaiwgcGRhZGNWYWx1ZXNbNCAqIGpdLAorCQkJCQk0ICogaiArIDEsIHBkYWRjVmFsdWVzWzQgKiBqICsgMV0sCisJCQkJCTQgKiBqICsgMiwgcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKKwkJCQkJNCAqIGogKyAzLAorCQkJCQlwZGFkY1ZhbHVlc1s0ICogaiArIDNdKTsKKworCQkJCXJlZ09mZnNldCArPSA0OworCQkJfQorCQl9CisJfQorCisJKnBUeFBvd2VySW5kZXhPZmZzZXQgPSAwOworI3VuZGVmIFNNX1BEX0dBSU4KKyN1bmRlZiBTTV9QREdBSU5fQgorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfZGVmX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkJCSAgaW50MTZfdCAqcmF0ZXNBcnJheSwKKwkJCQkJCSAgdTE2IGNmZ0N0bCwKKwkJCQkJCSAgdTE2IEFudGVubmFSZWR1Y3Rpb24sCisJCQkJCQkgIHUxNiB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkJCSAgdTE2IHBvd2VyTGltaXQpCit7CisjZGVmaW5lIFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOICAgICA2ICAvKiAxMCpsb2cxMCgyKSoyICovCisjZGVmaW5lIFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU4gICAxMCAvKiAxMCpsb2cxMCgzKSoyICovCisKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhID0gJmFoLT5lZXByb20uZGVmOworCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwlzdGF0aWMgY29uc3QgdTE2IHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVs1XSA9CisJCXsgMCwgMywgNiwgOSwgQVI1NDE2X01BWF9SQVRFX1BPV0VSIH07CisKKwlpbnQgaTsKKwlpbnQxNl90IHR3aWNlTGFyZ2VzdEFudGVubmE7CisJc3RydWN0IGNhbF9jdGxfZGF0YSAqcmVwOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB0YXJnZXRQb3dlck9mZG0sIHRhcmdldFBvd2VyQ2NrID0geworCQkwLCB7IDAsIDAsIDAsIDB9CisJfTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtRXh0ID0geworCQkwLCB7IDAsIDAsIDAsIDB9IH0sIHRhcmdldFBvd2VyQ2NrRXh0ID0geworCQkwLCB7IDAsIDAsIDAsIDAgfQorCX07CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgdGFyZ2V0UG93ZXJIdDIwLCB0YXJnZXRQb3dlckh0NDAgPSB7CisJCTAsIHswLCAwLCAwLCAwfQorCX07CisJdTE2IHNjYWxlZFBvd2VyID0gMCwgbWluQ3RsUG93ZXIsIG1heFJlZ0FsbG93ZWRQb3dlcjsKKwl1MTYgY3RsTW9kZXNGb3IxMWFbXSA9CisJCXsgQ1RMXzExQSwgQ1RMXzVHSFQyMCwgQ1RMXzExQV9FWFQsIENUTF81R0hUNDAgfTsKKwl1MTYgY3RsTW9kZXNGb3IxMWdbXSA9CisJCXsgQ1RMXzExQiwgQ1RMXzExRywgQ1RMXzJHSFQyMCwgQ1RMXzExQl9FWFQsIENUTF8xMUdfRVhULAorCQkgIENUTF8yR0hUNDAKKwkJfTsKKwl1MTYgbnVtQ3RsTW9kZXMsICpwQ3RsTW9kZSwgY3RsTW9kZSwgZnJlcTsKKwlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisJaW50IHR4X2NoYWlubWFzazsKKwl1MTYgdHdpY2VNaW5FZGdlUG93ZXI7CisKKwl0eF9jaGFpbm1hc2sgPSBhaC0+dHhjaGFpbm1hc2s7CisKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CisKKwl0d2ljZUxhcmdlc3RBbnRlbm5hID0gbWF4KAorCQlwRWVwRGF0YS0+bW9kYWxIZWFkZXIKKwkJCVtJU19DSEFOXzJHSFooY2hhbildLmFudGVubmFHYWluQ2hbMF0sCisJCXBFZXBEYXRhLT5tb2RhbEhlYWRlcgorCQkJW0lTX0NIQU5fMkdIWihjaGFuKV0uYW50ZW5uYUdhaW5DaFsxXSk7CisKKwl0d2ljZUxhcmdlc3RBbnRlbm5hID0gbWF4KCh1OCl0d2ljZUxhcmdlc3RBbnRlbm5hLAorCQkJCSAgcEVlcERhdGEtPm1vZGFsSGVhZGVyCisJCQkJICBbSVNfQ0hBTl8yR0haKGNoYW4pXS5hbnRlbm5hR2FpbkNoWzJdKTsKKworCXR3aWNlTGFyZ2VzdEFudGVubmEgPSAoaW50MTZfdCltaW4oQW50ZW5uYVJlZHVjdGlvbiAtCisJCQkJCSAgIHR3aWNlTGFyZ2VzdEFudGVubmEsIDApOworCisJbWF4UmVnQWxsb3dlZFBvd2VyID0gdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIgKyB0d2ljZUxhcmdlc3RBbnRlbm5hOworCisJaWYgKHJlZ3VsYXRvcnktPnRwX3NjYWxlICE9IEFUSDlLX1RQX1NDQUxFX01BWCkgeworCQltYXhSZWdBbGxvd2VkUG93ZXIgLT0KKwkJCSh0cFNjYWxlUmVkdWN0aW9uVGFibGVbKHJlZ3VsYXRvcnktPnRwX3NjYWxlKV0gKiAyKTsKKwl9CisKKwlzY2FsZWRQb3dlciA9IG1pbihwb3dlckxpbWl0LCBtYXhSZWdBbGxvd2VkUG93ZXIpOworCisJc3dpdGNoIChhcjU0MTZfZ2V0X250eGNoYWlucyh0eF9jaGFpbm1hc2spKSB7CisJY2FzZSAxOgorCQlicmVhazsKKwljYXNlIDI6CisJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOOworCQlicmVhazsKKwljYXNlIDM6CisJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU47CisJCWJyZWFrOworCX0KKworCXNjYWxlZFBvd2VyID0gbWF4KCh1MTYpMCwgc2NhbGVkUG93ZXIpOworCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpIC0KKwkJCVNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwOworCQlwQ3RsTW9kZSA9IGN0bE1vZGVzRm9yMTFnOworCisJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKKwkJCUFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMsCisJCQkmdGFyZ2V0UG93ZXJDY2ssIDQsIGZhbHNlKTsKKwkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCisJCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkmdGFyZ2V0UG93ZXJPZmRtLCA0LCBmYWxzZSk7CisJCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDIwLAorCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAorCQkJJnRhcmdldFBvd2VySHQyMCwgOCwgZmFsc2UpOworCisJCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKKwkJCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZyk7CisJCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDAsCisJCQkJQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTLAorCQkJCSZ0YXJnZXRQb3dlckh0NDAsIDgsIHRydWUpOworCQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKKwkJCQlBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAorCQkJCSZ0YXJnZXRQb3dlckNja0V4dCwgNCwgdHJ1ZSk7CisJCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCisJCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAorCQkJCSZ0YXJnZXRQb3dlck9mZG1FeHQsIDQsIHRydWUpOworCQl9CisJfSBlbHNlIHsKKwkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFhKSAtCisJCQlTVUJfTlVNX0NUTF9NT0RFU19BVF81R180MDsKKwkJcEN0bE1vZGUgPSBjdGxNb2Rlc0ZvcjExYTsKKworCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXI1RywKKwkJCUFSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSUywKKwkJCSZ0YXJnZXRQb3dlck9mZG0sIDQsIGZhbHNlKTsKKwkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXI1R0hUMjAsCisJCQlBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkmdGFyZ2V0UG93ZXJIdDIwLCA4LCBmYWxzZSk7CisKKwkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgeworCQkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFhKTsKKwkJCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjVHSFQ0MCwKKwkJCQlBUjU0MTZfTlVNXzVHXzQwX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VySHQ0MCwgOCwgdHJ1ZSk7CisJCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyNUcsCisJCQkJQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTLAorCQkJCSZ0YXJnZXRQb3dlck9mZG1FeHQsIDQsIHRydWUpOworCQl9CisJfQorCisJZm9yIChjdGxNb2RlID0gMDsgY3RsTW9kZSA8IG51bUN0bE1vZGVzOyBjdGxNb2RlKyspIHsKKwkJYm9vbCBpc0h0NDBDdGxNb2RlID0gKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF81R0hUNDApIHx8CisJCQkocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzJHSFQ0MCk7CisJCWlmIChpc0h0NDBDdGxNb2RlKQorCQkJZnJlcSA9IGNlbnRlcnMuc3ludGhfY2VudGVyOworCQllbHNlIGlmIChwQ3RsTW9kZVtjdGxNb2RlXSAmIEVYVF9BRERJVElWRSkKKwkJCWZyZXEgPSBjZW50ZXJzLmV4dF9jZW50ZXI7CisJCWVsc2UKKwkJCWZyZXEgPSBjZW50ZXJzLmN0bF9jZW50ZXI7CisKKwkJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgPT0gMTQgJiYKKwkJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPD0gMikKKwkJCXR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCisJCWZvciAoaSA9IDA7IChpIDwgQVI1NDE2X05VTV9DVExTKSAmJiBwRWVwRGF0YS0+Y3RsSW5kZXhbaV07IGkrKykgeworCQkJaWYgKCgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8CisJCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KKwkJCSAgICAgcEVlcERhdGEtPmN0bEluZGV4W2ldKSB8fAorCQkJICAgICgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8CisJCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KKwkJCSAgICAgKChwRWVwRGF0YS0+Y3RsSW5kZXhbaV0gJiBDVExfTU9ERV9NKSB8IFNEX05PX0NUTCkpKSB7CisJCQkJcmVwID0gJihwRWVwRGF0YS0+Y3RsRGF0YVtpXSk7CisKKwkJCQl0d2ljZU1pbkVkZ2VQb3dlciA9IGF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcihmcmVxLAorCQkJCXJlcC0+Y3RsRWRnZXNbYXI1NDE2X2dldF9udHhjaGFpbnModHhfY2hhaW5tYXNrKSAtIDFdLAorCQkJCUlTX0NIQU5fMkdIWihjaGFuKSwgQVI1NDE2X05VTV9CQU5EX0VER0VTKTsKKworCQkJCWlmICgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pID09IFNEX05PX0NUTCkgeworCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IG1pbih0d2ljZU1heEVkZ2VQb3dlciwKKwkJCQkJCQkJdHdpY2VNaW5FZGdlUG93ZXIpOworCQkJCX0gZWxzZSB7CisJCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gdHdpY2VNaW5FZGdlUG93ZXI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCW1pbkN0bFBvd2VyID0gbWluKHR3aWNlTWF4RWRnZVBvd2VyLCBzY2FsZWRQb3dlcik7CisKKwkJc3dpdGNoIChwQ3RsTW9kZVtjdGxNb2RlXSkgeworCQljYXNlIENUTF8xMUI6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckNjay50UG93MngpOyBpKyspIHsKKwkJCQl0YXJnZXRQb3dlckNjay50UG93MnhbaV0gPQorCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckNjay50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMTFBOgorCQljYXNlIENUTF8xMUc6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlck9mZG0udFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfNUdIVDIwOgorCQljYXNlIENUTF8yR0hUMjA6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0MjAudFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMTFCX0VYVDoKKwkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXSA9IG1pbigodTE2KQorCQkJCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0sCisJCQkJCW1pbkN0bFBvd2VyKTsKKwkJCWJyZWFrOworCQljYXNlIENUTF8xMUFfRVhUOgorCQljYXNlIENUTF8xMUdfRVhUOgorCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSA9IG1pbigodTE2KQorCQkJCQl0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdLAorCQkJCQltaW5DdGxQb3dlcik7CisJCQlicmVhazsKKwkJY2FzZSBDVExfNUdIVDQwOgorCQljYXNlIENUTF8yR0hUNDA6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0NDAudFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmF0ZXNBcnJheVtyYXRlNm1iXSA9IHJhdGVzQXJyYXlbcmF0ZTltYl0gPSByYXRlc0FycmF5W3JhdGUxMm1iXSA9CisJCXJhdGVzQXJyYXlbcmF0ZTE4bWJdID0gcmF0ZXNBcnJheVtyYXRlMjRtYl0gPQorCQl0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzBdOworCXJhdGVzQXJyYXlbcmF0ZTM2bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsxXTsKKwlyYXRlc0FycmF5W3JhdGU0OG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMl07CisJcmF0ZXNBcnJheVtyYXRlNTRtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzNdOworCXJhdGVzQXJyYXlbcmF0ZVhyXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0MjAudFBvdzJ4KTsgaSsrKQorCQlyYXRlc0FycmF5W3JhdGVIdDIwXzAgKyBpXSA9IHRhcmdldFBvd2VySHQyMC50UG93MnhbaV07CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCXJhdGVzQXJyYXlbcmF0ZTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFswXTsKKwkJcmF0ZXNBcnJheVtyYXRlMnNdID0gcmF0ZXNBcnJheVtyYXRlMmxdID0KKwkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFsxXTsKKwkJcmF0ZXNBcnJheVtyYXRlNV81c10gPSByYXRlc0FycmF5W3JhdGU1XzVsXSA9CisJCQl0YXJnZXRQb3dlckNjay50UG93MnhbMl07CisJCXJhdGVzQXJyYXlbcmF0ZTExc10gPSByYXRlc0FycmF5W3JhdGUxMWxdID0KKwkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFszXTsKKwl9CisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0NDAudFBvdzJ4KTsgaSsrKSB7CisJCQlyYXRlc0FycmF5W3JhdGVIdDQwXzAgKyBpXSA9CisJCQkJdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXTsKKwkJfQorCQlyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07CisJCXJhdGVzQXJyYXlbcmF0ZUR1cENja10gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSA9IHRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF07CisJCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKKwkJCXJhdGVzQXJyYXlbcmF0ZUV4dENja10gPQorCQkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgdTE2IGNmZ0N0bCwKKwkJCQkgICAgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAorCQkJCSAgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkgICAgdTggcG93ZXJMaW1pdCkKK3sKKyNkZWZpbmUgUlRfQVJfREVMVEEoeCkgKHJhdGVzQXJyYXlbeF0gLSBjY2tfb2ZkbV9kZWx0YSkKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhID0gJmFoLT5lZXByb20uZGVmOworCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQorCQkmKHBFZXBEYXRhLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKwlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOworCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKKwl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYyA9IDI7CisJaW50IGksIGNja19vZmRtX2RlbHRhID0gMDsKKworCW1lbXNldChyYXRlc0FycmF5LCAwLCBzaXplb2YocmF0ZXNBcnJheSkpOworCisJaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgeworCQlodDQwUG93ZXJJbmNGb3JQZGFkYyA9IHBNb2RhbC0+aHQ0MFBvd2VySW5jRm9yUGRhZGM7CisJfQorCisJYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9wZXJfcmF0ZV90YWJsZShhaCwgY2hhbiwKKwkJCQkJICAgICAgICZyYXRlc0FycmF5WzBdLCBjZmdDdGwsCisJCQkJCSAgICAgICB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCisJCQkJCSAgICAgICB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkJICAgICAgIHBvd2VyTGltaXQpOworCisJYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZXNBcnJheSk7IGkrKykgeworCQlyYXRlc0FycmF5W2ldID0JKGludDE2X3QpKHR4UG93ZXJJbmRleE9mZnNldCArIHJhdGVzQXJyYXlbaV0pOworCQlpZiAocmF0ZXNBcnJheVtpXSA+IEFSNTQxNl9NQVhfUkFURV9QT1dFUikKKwkJCXJhdGVzQXJyYXlbaV0gPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisJfQorCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFyNTQxNlJhdGVTaXplOyBpKyspCisJCQlyYXRlc0FycmF5W2ldIC09IEFSNTQxNl9QV1JfVEFCTEVfT0ZGU0VUICogMjsKKwl9CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMSwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMThtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTEybWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU5bWJdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTZtYl0sIDApKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMiwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNTRtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTQ4bWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUzNm1iXSwgOCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyNG1iXSwgMCkpOworCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCWNja19vZmRtX2RlbHRhID0gMjsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUzLAorCQkJCUFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMnMpLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMmwpLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVYcl0sIDgpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTFsKSwgMCkpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTQsCisJCQkJQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUxMXMpLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMTFsKSwgMTYpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTVfNXMpLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGU1XzVsKSwgMCkpOworCQl9IGVsc2UgeworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCisJCQkJQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJzXSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMmxdLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVYcl0sIDgpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMWxdLCAwKSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNCwKKwkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFzXSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFsXSwgMTYpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNV81c10sIDgpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNV81bF0sIDApKTsKKwkJfQorCX0KKworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU1LAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzNdLCAyNCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzFdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMF0sIDApKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNiwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF83XSwgMjQpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF82XSwgMTYpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF81XSwgOCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzRdLCAwKSk7CisKKwlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7CisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAorCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8zXSArCisJCQkJICAgICAgIGh0NDBQb3dlckluY0ZvclBkYWRjLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMV0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDgpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMF0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDApKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTgsCisJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzddICsKKwkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzZdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF81XSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF80XSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOworCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAorCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZUV4dENjayksIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGVEdXBDY2spLCAwKSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOSwKKwkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dENja10sIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKKwkJfQorCX0KKworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1NVQiwKKwkJICBBVEg5S19QT1dfU00ocE1vZGFsLT5wd3JEZWNyZWFzZUZvcjNDaGFpbiwgNikKKwkJICB8IEFUSDlLX1BPV19TTShwTW9kYWwtPnB3ckRlY3JlYXNlRm9yMkNoYWluLCAwKSk7CisKKwlpID0gcmF0ZTZtYjsKKworCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCisJCWkgPSByYXRlSHQ0MF8wOworCWVsc2UgaWYgKElTX0NIQU5fSFQyMChjaGFuKSkKKwkJaSA9IHJhdGVIdDIwXzA7CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsID0KKwkJCXJhdGVzQXJyYXlbaV0gKyBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAqIDI7CisJZWxzZQorCQlyZWd1bGF0b3J5LT5tYXhfcG93ZXJfbGV2ZWwgPSByYXRlc0FycmF5W2ldOworCisJc3dpdGNoKGFyNTQxNl9nZXRfbnR4Y2hhaW5zKGFoLT50eGNoYWlubWFzaykpIHsKKwljYXNlIDE6CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsICs9IElOQ1JFQVNFX01BWFBPV19CWV9UV09fQ0hBSU47CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsICs9IElOQ1JFQVNFX01BWFBPV19CWV9USFJFRV9DSEFJTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJIkludmFsaWQgY2hhaW5tYXNrIGNvbmZpZ3VyYXRpb25cbiIpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB1OCBhdGg5a19od19kZWZfZ2V0X251bV9hbnRfY29uZmlnKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgIGVudW0gaWVlZTgwMjExX2JhbmQgZnJlcV9iYW5kKQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQorCQkmKGVlcC0+bW9kYWxIZWFkZXJbQVRIOUtfSEFMX0ZSRVFfQkFORF8yR0haID09IGZyZXFfYmFuZF0pOworCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKKwl1OCBudW1fYW50X2NvbmZpZzsKKworCW51bV9hbnRfY29uZmlnID0gMTsKKworCWlmIChwQmFzZS0+dmVyc2lvbiA+PSAweDBFMEQpCisJCWlmIChwTW9kYWwtPnVzZUFudDEpCisJCQludW1fYW50X2NvbmZpZyArPSAxOworCisJcmV0dXJuIG51bV9hbnRfY29uZmlnOworfQorCitzdGF0aWMgdTE2IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7CisJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9CisJCSYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKworCXJldHVybiBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7Cit9CisKK3N0YXRpYyB1MTYgYXRoOWtfaHdfZGVmX2dldF9zcHVyX2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBpLCBib29sIGlzMkdIeikKK3sKKyNkZWZpbmUgRUVQX0RFRl9TUFVSQ0hBTiBcCisJKGFoLT5lZXByb20uZGVmLm1vZGFsSGVhZGVyW2lzMkdIel0uc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQorCisJdTE2IHNwdXJfdmFsID0gQVJfTk9fU1BVUjsKKworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKKwkJIkdldHRpbmcgc3B1ciBpZHggJWQgaXMyR2h6LiAlZCB2YWwgJXhcbiIsCisJCWksIGlzMkdIeiwgYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XSk7CisKKwlzd2l0Y2ggKGFoLT5jb25maWcuc3B1cm1vZGUpIHsKKwljYXNlIFNQVVJfRElTQUJMRToKKwkJYnJlYWs7CisJY2FzZSBTUFVSX0VOQUJMRV9JT0NUTDoKKwkJc3B1cl92YWwgPSBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdOworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCQkiR2V0dGluZyBzcHVyIHZhbCBmcm9tIG5ldyBsb2MuICVkXG4iLCBzcHVyX3ZhbCk7CisJCWJyZWFrOworCWNhc2UgU1BVUl9FTkFCTEVfRUVQUk9NOgorCQlzcHVyX3ZhbCA9IEVFUF9ERUZfU1BVUkNIQU47CisJCWJyZWFrOworCX0KKworCXJldHVybiBzcHVyX3ZhbDsKKworI3VuZGVmIEVFUF9ERUZfU1BVUkNIQU4KK30KKworY29uc3Qgc3RydWN0IGVlcHJvbV9vcHMgZWVwX2RlZl9vcHMgPSB7CisJLmNoZWNrX2VlcHJvbQkJPSBhdGg5a19od19kZWZfY2hlY2tfZWVwcm9tLAorCS5nZXRfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tLAorCS5maWxsX2VlcHJvbQkJPSBhdGg5a19od19kZWZfZmlsbF9lZXByb20sCisJLmdldF9lZXByb21fdmVyCQk9IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX3ZlciwKKwkuZ2V0X2VlcHJvbV9yZXYJCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fcmV2LAorCS5nZXRfbnVtX2FudF9jb25maWcJPSBhdGg5a19od19kZWZfZ2V0X251bV9hbnRfY29uZmlnLAorCS5nZXRfZWVwcm9tX2FudGVubmFfY2ZnCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fYW50ZW5uYV9jZmcsCisJLnNldF9ib2FyZF92YWx1ZXMJPSBhdGg5a19od19kZWZfc2V0X2JvYXJkX3ZhbHVlcywKKwkuc2V0X2FkZGFjCQk9IGF0aDlrX2h3X2RlZl9zZXRfYWRkYWMsCisJLnNldF90eHBvd2VyCQk9IGF0aDlrX2h3X2RlZl9zZXRfdHhwb3dlciwKKwkuZ2V0X3NwdXJfY2hhbm5lbAk9IGF0aDlrX2h3X2RlZl9nZXRfc3B1cl9jaGFubmVsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCAzNDkzNWE4Li5iNmM2Y2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwpAQCAtMTYsMTQgKzE2LDExIEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAogI2luY2x1ZGUgImF0aDlrLmgiCiAjaW5jbHVkZSAiaW5pdHZhbHMuaCIKIAotc3RhdGljIGludCBidGNvZXhfZW5hYmxlOwotbW9kdWxlX3BhcmFtKGJ0Y29leF9lbmFibGUsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhidGNvZXhfZW5hYmxlLCAiRW5hYmxlIEJsdWV0b290aCBjb2V4aXN0ZW5jZSBzdXBwb3J0Iik7Ci0KICNkZWZpbmUgQVRIOUtfQ0xPQ0tfUkFURV9DQ0sJCTIyCiAjZGVmaW5lIEFUSDlLX0NMT0NLX1JBVEVfNUdIWl9PRkRNCTQwCiAjZGVmaW5lIEFUSDlLX0NMT0NLX1JBVEVfMkdIWl9PRkRNCTQ0CkBAIC0zODAsMTIgKzM3NywxNSBAQAogCQlyZXR1cm4gIkF0aGVyb3MgOTI4MCI7CiAJY2FzZSBBUjkyODVfREVWSURfUENJRToKIAkJcmV0dXJuICJBdGhlcm9zIDkyODUiOworCWNhc2UgQVI1NDE2X0RFVklEX0FSOTI4N19QQ0k6CisJY2FzZSBBUjU0MTZfREVWSURfQVI5Mjg3X1BDSUU6CisJCXJldHVybiAiQXRoZXJvcyA5Mjg3IjsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2RlZmF1bHRzKHN0cnVjdCBhdGhfaHcgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGk7CiAKQEAgLTQwNCw3ICs0MDQsNyBAQAogCWFoLT5jb25maWcuY2NrX3RyaWdfaGlnaCA9IDIwMDsKIAlhaC0+Y29uZmlnLmNja190cmlnX2xvdyA9IDEwMDsKIAlhaC0+Y29uZmlnLmVuYWJsZV9hbmkgPSAxOwotCWFoLT5jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2wgPSAwOworCWFoLT5jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2wgPSBBVEg5S19BTlRfVkFSSUFCTEU7CiAJYWgtPmNvbmZpZy5hbnRlbm5hX3N3aXRjaF9zd2FwID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBBUl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewpAQCAtNDM0LDM3ICs0MzQsMjQgQEAKIAkJYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9IFNFUl9SRUdfTU9ERV9BVVRPOwogfQogCi1zdGF0aWMgc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfbmV3c3RhdGUodTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkJaW50ICpzdGF0dXMpCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X2RlZmF1bHRzKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaHcgKmFoOworCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9IGF0aDlrX2h3X3JlZ3VsYXRvcnkoYWgpOwogCi0JYWggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXRoX2h3KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGFoID09IE5VTEwpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBzdGF0ZSBibG9ja1xuIik7Ci0JCSpzdGF0dXMgPSAtRU5PTUVNOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJcmVndWxhdG9yeS0+Y291bnRyeV9jb2RlID0gQ1RSWV9ERUZBVUxUOworCXJlZ3VsYXRvcnktPnBvd2VyX2xpbWl0ID0gTUFYX1JBVEVfUE9XRVI7CisJcmVndWxhdG9yeS0+dHBfc2NhbGUgPSBBVEg5S19UUF9TQ0FMRV9NQVg7CiAKLQlhaC0+YWhfc2MgPSBzYzsKIAlhaC0+aHdfdmVyc2lvbi5tYWdpYyA9IEFSNTQxNl9NQUdJQzsKLQlhaC0+cmVndWxhdG9yeS5jb3VudHJ5X2NvZGUgPSBDVFJZX0RFRkFVTFQ7Ci0JYWgtPmh3X3ZlcnNpb24uZGV2aWQgPSBkZXZpZDsKIAlhaC0+aHdfdmVyc2lvbi5zdWJ2ZW5kb3JpZCA9IDA7CiAKIAlhaC0+YWhfZmxhZ3MgPSAwOwotCWlmICgoZGV2aWQgPT0gQVI1NDE2X0FSOTEwMF9ERVZJRCkpCisJaWYgKGFoLT5od192ZXJzaW9uLmRldmlkID09IEFSNTQxNl9BUjkxMDBfREVWSUQpCiAJCWFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPSBBUl9TUkVWX1ZFUlNJT05fOTEwMDsKIAlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCiAJCWFoLT5haF9mbGFncyA9IEFIX1VTRV9FRVBST007CiAKLQlhaC0+cmVndWxhdG9yeS5wb3dlcl9saW1pdCA9IE1BWF9SQVRFX1BPV0VSOwotCWFoLT5yZWd1bGF0b3J5LnRwX3NjYWxlID0gQVRIOUtfVFBfU0NBTEVfTUFYOwogCWFoLT5hdGltX3dpbmRvdyA9IDA7Ci0JYWgtPmRpdmVyc2l0eV9jb250cm9sID0gYWgtPmNvbmZpZy5kaXZlcnNpdHlfY29udHJvbDsKLQlhaC0+YW50ZW5uYV9zd2l0Y2hfc3dhcCA9Ci0JCWFoLT5jb25maWcuYW50ZW5uYV9zd2l0Y2hfc3dhcDsKIAlhaC0+c3RhX2lkMV9kZWZhdWx0cyA9IEFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFOwogCWFoLT5iZWFjb25faW50ZXJ2YWwgPSAxMDA7CiAJYWgtPmVuYWJsZV8zMmtIel9jbG9jayA9IERPTlRfVVNFXzMyS0haOwpAQCAtNDc1LDcgKzQ2Miw3IEBACiAKIAlhaC0+Z2JlYWNvbl9yYXRlID0gMDsKIAotCXJldHVybiBhaDsKKwlhaC0+cG93ZXJfbW9kZSA9IEFUSDlLX1BNX1VOREVGSU5FRDsKIH0KIAogc3RhdGljIGludCBhdGg5a19od19yZmF0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKQEAgLTU4OCw3ICs1NzUsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBhdGg5a19od19wb3N0X2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfcG9zdF9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBlY29kZTsKIApAQCAtNTk5LDcgKzU4Niw3IEBACiAJaWYgKGVjb2RlICE9IDApCiAJCXJldHVybiBlY29kZTsKIAotCWVjb2RlID0gYXRoOWtfaHdfZWVwcm9tX2F0dGFjaChhaCk7CisJZWNvZGUgPSBhdGg5a19od19lZXByb21faW5pdChhaCk7CiAJaWYgKGVjb2RlICE9IDApCiAJCXJldHVybiBlY29kZTsKIApAQCAtNjEyLDcwICs1OTksNTIgQEAKIAogCWlmICghQVJfU1JFVl85MTAwKGFoKSkgewogCQlhdGg5a19od19hbmlfc2V0dXAoYWgpOwotCQlhdGg5a19od19hbmlfYXR0YWNoKGFoKTsKKwkJYXRoOWtfaHdfYW5pX2luaXQoYWgpOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfZG9fYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJCSBpbnQgKnN0YXR1cykKK3N0YXRpYyBib29sIGF0aDlrX2h3X2RldmlkX3N1cHBvcnRlZCh1MTYgZGV2aWQpCiB7Ci0Jc3RydWN0IGF0aF9odyAqYWg7Ci0JaW50IGVjb2RlOwotCXUzMiBpLCBqOwotCi0JYWggPSBhdGg5a19od19uZXdzdGF0ZShkZXZpZCwgc2MsIHN0YXR1cyk7Ci0JaWYgKGFoID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JYXRoOWtfaHdfc2V0X2RlZmF1bHRzKGFoKTsKLQotCWlmICghYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhhaCwgQVRIOUtfUkVTRVRfUE9XRVJfT04pKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsICJDb3VsZG4ndCByZXNldCBjaGlwXG4iKTsKLQkJZWNvZGUgPSAtRUlPOwotCQlnb3RvIGJhZDsKKwlzd2l0Y2ggKGRldmlkKSB7CisJY2FzZSBBUjU0MTZfREVWSURfUENJOgorCWNhc2UgQVI1NDE2X0RFVklEX1BDSUU6CisJY2FzZSBBUjU0MTZfQVI5MTAwX0RFVklEOgorCWNhc2UgQVI5MTYwX0RFVklEX1BDSToKKwljYXNlIEFSOTI4MF9ERVZJRF9QQ0k6CisJY2FzZSBBUjkyODBfREVWSURfUENJRToKKwljYXNlIEFSOTI4NV9ERVZJRF9QQ0lFOgorCWNhc2UgQVI1NDE2X0RFVklEX0FSOTI4N19QQ0k6CisJY2FzZSBBUjU0MTZfREVWSURfQVI5Mjg3X1BDSUU6CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KKwlyZXR1cm4gZmFsc2U7Cit9CiAKLQlpZiAoIWF0aDlrX2h3X3NldHBvd2VyKGFoLCBBVEg5S19QTV9BV0FLRSkpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgIkNvdWxkbid0IHdha2V1cCBjaGlwXG4iKTsKLQkJZWNvZGUgPSAtRUlPOwotCQlnb3RvIGJhZDsKK3N0YXRpYyBib29sIGF0aDlrX2h3X21hY3ZlcnNpb25fc3VwcG9ydGVkKHUzMiBtYWN2ZXJzaW9uKQoreworCXN3aXRjaCAobWFjdmVyc2lvbikgeworCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJOgorCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRToKKwljYXNlIEFSX1NSRVZfVkVSU0lPTl85MTYwOgorCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzkxMDA6CisJY2FzZSBBUl9TUkVWX1ZFUlNJT05fOTI4MDoKKwljYXNlIEFSX1NSRVZfVkVSU0lPTl85Mjg1OgorCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzkyODc6CisJCXJldHVybiB0cnVlOworCS8qIE5vdCB5ZXQgKi8KKwljYXNlIEFSX1NSRVZfVkVSU0lPTl85MjcxOgorCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KKwlyZXR1cm4gZmFsc2U7Cit9CiAKLQlpZiAoYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfQVVUTykgewotCQlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kgfHwKLQkJICAgIChBUl9TUkVWXzkyODAoYWgpICYmICFhaC0+aXNfcGNpZXhwcmVzcykpIHsKLQkJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPQotCQkJCVNFUl9SRUdfTU9ERV9PTjsKLQkJfSBlbHNlIHsKLQkJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPQotCQkJCVNFUl9SRUdfTU9ERV9PRkY7Ci0JCX0KLQl9Ci0KLQlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULCAic2VyaWFsaXplX3JlZ21vZGUgaXMgJWRcbiIsCi0JCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUpOwotCi0JaWYgKChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSkgJiYKLQkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkgJiYKLQkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApICYmCi0JICAgICghQVJfU1JFVl85MTAwKGFoKSkgJiYgKCFBUl9TUkVWXzkyODAoYWgpKSAmJiAoIUFSX1NSRVZfOTI4NShhaCkpKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkiTWFjIENoaXAgUmV2IDB4JTAyeC4leCBpcyBub3Qgc3VwcG9ydGVkIGJ5ICIKLQkJCSJ0aGlzIGRyaXZlclxuIiwgYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiwKLQkJCWFoLT5od192ZXJzaW9uLm1hY1Jldik7Ci0JCWVjb2RlID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gYmFkOwotCX0KLQotCWlmIChBUl9TUkVWXzkxMDAoYWgpKSB7Ci0JCWFoLT5pcV9jYWxkYXRhLmNhbERhdGEgPSAmaXFfY2FsX211bHRpX3NhbXBsZTsKLQkJYWgtPnN1cHBfY2FscyA9IElRX01JU01BVENIX0NBTDsKLQkJYWgtPmlzX3BjaWV4cHJlc3MgPSBmYWxzZTsKLQl9Ci0JYWgtPmh3X3ZlcnNpb24ucGh5UmV2ID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9DSElQX0lEKTsKLQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9jYWxfc2V0dGluZ3Moc3RydWN0IGF0aF9odyAqYWgpCit7CiAJaWYgKEFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihhaCkpIHsKIAkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKIAkJCWFoLT5pcV9jYWxkYXRhLmNhbERhdGEgPSAmaXFfY2FsX3NpbmdsZV9zYW1wbGU7CkBAIC02OTYsMTIgKzY2NSw0OSBAQAogCQl9CiAJCWFoLT5zdXBwX2NhbHMgPSBBRENfR0FJTl9DQUwgfCBBRENfRENfQ0FMIHwgSVFfTUlTTUFUQ0hfQ0FMOwogCX0KK30KIAotCWFoLT5hbmlfZnVuY3Rpb24gPSBBVEg5S19BTklfQUxMOwotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQotCQlhaC0+YW5pX2Z1bmN0aW9uICY9IH5BVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUw7CitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X21vZGVfcmVncyhzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlpZiAoQVJfU1JFVl85MjcxKGFoKSkgeworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjkyNzFNb2Rlc185MjcxXzFfMCwKKwkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI3MU1vZGVzXzkyNzFfMV8wKSwgNik7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjkyNzFDb21tb25fOTI3MV8xXzAsCisJCQkgICAgICAgQVJSQVlfU0laRShhcjkyNzFDb21tb25fOTI3MV8xXzApLCAyKTsKKwkJcmV0dXJuOworCX0KIAotCWlmIChBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSB7CisJaWYgKEFSX1NSRVZfOTI4N18xMV9PUl9MQVRFUihhaCkpIHsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2RlcywgYXI5Mjg3TW9kZXNfOTI4N18xXzEsCisJCQkJQVJSQVlfU0laRShhcjkyODdNb2Rlc185Mjg3XzFfMSksIDYpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI5Mjg3Q29tbW9uXzkyODdfMV8xLAorCQkJCUFSUkFZX1NJWkUoYXI5Mjg3Q29tbW9uXzkyODdfMV8xKSwgMik7CisJCWlmIChhaC0+Y29uZmlnLnBjaWVfY2xvY2tfcmVxKQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAorCQkJYXI5Mjg3UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODdfMV8xLAorCQkJQVJSQVlfU0laRShhcjkyODdQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4N18xXzEpLCAyKTsKKwkJZWxzZQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAorCQkJYXI5Mjg3UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODdfMV8xLAorCQkJQVJSQVlfU0laRShhcjkyODdQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4N18xXzEpLAorCQkJCQkyKTsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4N18xMF9PUl9MQVRFUihhaCkpIHsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2RlcywgYXI5Mjg3TW9kZXNfOTI4N18xXzAsCisJCQkJQVJSQVlfU0laRShhcjkyODdNb2Rlc185Mjg3XzFfMCksIDYpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI5Mjg3Q29tbW9uXzkyODdfMV8wLAorCQkJCUFSUkFZX1NJWkUoYXI5Mjg3Q29tbW9uXzkyODdfMV8wKSwgMik7CisKKwkJaWYgKGFoLT5jb25maWcucGNpZV9jbG9ja19yZXEpCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCisJCQlhcjkyODdQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4N18xXzAsCisJCQlBUlJBWV9TSVpFKGFyOTI4N1BjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg3XzFfMCksIDIpOworCQllbHNlCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCisJCQlhcjkyODdQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4N18xXzAsCisJCQlBUlJBWV9TSVpFKGFyOTI4N1BjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg3XzFfMCksCisJCQkJICAyKTsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihhaCkpIHsKKwogCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyOTI4NU1vZGVzXzkyODVfMV8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5Mjg1TW9kZXNfOTI4NV8xXzIpLCA2KTsKQEAgLTgzMiwxNyArODM4LDMyIEBACiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQWRkYWMsIGFyNTQxNkFkZGFjLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QWRkYWMpLCAyKTsKIAl9Cit9CiAKLQlpZiAoYWgtPmlzX3BjaWV4cHJlc3MpCi0JCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMCk7Ci0JZWxzZQotCQlhdGg5a19od19kaXNhYmxlcGNpZShhaCk7CitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X21vZGVfZ2Fpbl9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCWlmIChBUl9TUkVWXzkyODdfMTEoYWgpKQorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQlhcjkyODdNb2Rlc19yeF9nYWluXzkyODdfMV8xLAorCQlBUlJBWV9TSVpFKGFyOTI4N01vZGVzX3J4X2dhaW5fOTI4N18xXzEpLCA2KTsKKwllbHNlIGlmIChBUl9TUkVWXzkyODdfMTAoYWgpKQorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQlhcjkyODdNb2Rlc19yeF9nYWluXzkyODdfMV8wLAorCQlBUlJBWV9TSVpFKGFyOTI4N01vZGVzX3J4X2dhaW5fOTI4N18xXzApLCA2KTsKKwllbHNlIGlmIChBUl9TUkVWXzkyODBfMjAoYWgpKQorCQlhdGg5a19od19pbml0X3J4Z2Fpbl9pbmkoYWgpOwogCi0JZWNvZGUgPSBhdGg5a19od19wb3N0X2F0dGFjaChhaCk7Ci0JaWYgKGVjb2RlICE9IDApCi0JCWdvdG8gYmFkOwotCi0JaWYgKEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihhaCkpIHsKKwlpZiAoQVJfU1JFVl85Mjg3XzExKGFoKSkgeworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAorCQlhcjkyODdNb2Rlc190eF9nYWluXzkyODdfMV8xLAorCQlBUlJBWV9TSVpFKGFyOTI4N01vZGVzX3R4X2dhaW5fOTI4N18xXzEpLCA2KTsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4N18xMChhaCkpIHsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJYXI5Mjg3TW9kZXNfdHhfZ2Fpbl85Mjg3XzFfMCwKKwkJQVJSQVlfU0laRShhcjkyODdNb2Rlc190eF9nYWluXzkyODdfMV8wKSwgNik7CisJfSBlbHNlIGlmIChBUl9TUkVWXzkyODBfMjAoYWgpKSB7CisJCWF0aDlrX2h3X2luaXRfdHhnYWluX2luaShhaCk7CisJfSBlbHNlIGlmIChBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSB7CiAJCXUzMiB0eGdhaW5fdHlwZSA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfVFhHQUlOX1RZUEUpOwogCiAJCS8qIHR4Z2FpbiB0YWJsZSAqLwpAQCAtODU3LDE2ICs4NzgsMTEgQEAKIAkJfQogCiAJfQorfQogCi0JLyogcnhnYWluIHRhYmxlICovCi0JaWYgKEFSX1NSRVZfOTI4MF8yMChhaCkpCi0JCWF0aDlrX2h3X2luaXRfcnhnYWluX2luaShhaCk7Ci0KLQkvKiB0eGdhaW4gdGFibGUgKi8KLQlpZiAoQVJfU1JFVl85MjgwXzIwKGFoKSkKLQkJYXRoOWtfaHdfaW5pdF90eGdhaW5faW5pKGFoKTsKLQotCWF0aDlrX2h3X2ZpbGxfY2FwX2luZm8oYWgpOworc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF8xMWFfZWVwcm9tX2ZpeChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwl1MzIgaSwgajsKIAogCWlmICgoYWgtPmh3X3ZlcnNpb24uZGV2aWQgPT0gQVI5MjgwX0RFVklEX1BDSSkgJiYKIAkgICAgdGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIGFoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkgewpAQCAtODg1LDI5ICs5MDEsOTcgQEAKIAkJCX0KIAkJfQogCX0KK30KIAotCWVjb2RlID0gYXRoOWtfaHdfaW5pdF9tYWNhZGRyKGFoKTsKLQlpZiAoZWNvZGUgIT0gMCkgewotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJIkZhaWxlZCB0byBpbml0aWFsaXplIE1BQyBhZGRyZXNzXG4iKTsKLQkJZ290byBiYWQ7CitpbnQgYXRoOWtfaHdfaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlpbnQgciA9IDA7CisKKwlpZiAoIWF0aDlrX2h3X2RldmlkX3N1cHBvcnRlZChhaC0+aHdfdmVyc2lvbi5kZXZpZCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWF0aDlrX2h3X2luaXRfZGVmYXVsdHMoYWgpOworCWF0aDlrX2h3X2luaXRfY29uZmlnKGFoKTsKKworCWlmICghYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhhaCwgQVRIOUtfUkVTRVRfUE9XRVJfT04pKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLCAiQ291bGRuJ3QgcmVzZXQgY2hpcFxuIik7CisJCXJldHVybiAtRUlPOwogCX0KIAotCWlmIChBUl9TUkVWXzkyODUoYWgpKQorCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwgIkNvdWxkbid0IHdha2V1cCBjaGlwXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX0FVVE8pIHsKKwkJaWYgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJIHx8CisJCSAgICAoQVJfU1JFVl85MjgwKGFoKSAmJiAhYWgtPmlzX3BjaWV4cHJlc3MpKSB7CisJCQlhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0KKwkJCQlTRVJfUkVHX01PREVfT047CisJCX0gZWxzZSB7CisJCQlhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0KKwkJCQlTRVJfUkVHX01PREVfT0ZGOworCQl9CisJfQorCisJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsICJzZXJpYWxpemVfcmVnbW9kZSBpcyAlZFxuIiwKKwkJYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSk7CisKKwlpZiAoIWF0aDlrX2h3X21hY3ZlcnNpb25fc3VwcG9ydGVkKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24pKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIk1hYyBDaGlwIFJldiAweCUwMnguJXggaXMgbm90IHN1cHBvcnRlZCBieSAiCisJCQkidGhpcyBkcml2ZXJcbiIsIGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24sCisJCQlhaC0+aHdfdmVyc2lvbi5tYWNSZXYpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJaWYgKEFSX1NSRVZfOTEwMChhaCkpIHsKKwkJYWgtPmlxX2NhbGRhdGEuY2FsRGF0YSA9ICZpcV9jYWxfbXVsdGlfc2FtcGxlOworCQlhaC0+c3VwcF9jYWxzID0gSVFfTUlTTUFUQ0hfQ0FMOworCQlhaC0+aXNfcGNpZXhwcmVzcyA9IGZhbHNlOworCX0KKworCWlmIChBUl9TUkVWXzkyNzEoYWgpKQorCQlhaC0+aXNfcGNpZXhwcmVzcyA9IGZhbHNlOworCisJYWgtPmh3X3ZlcnNpb24ucGh5UmV2ID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9DSElQX0lEKTsKKworCWF0aDlrX2h3X2luaXRfY2FsX3NldHRpbmdzKGFoKTsKKworCWFoLT5hbmlfZnVuY3Rpb24gPSBBVEg5S19BTklfQUxMOworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlhaC0+YW5pX2Z1bmN0aW9uICY9IH5BVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUw7CisKKwlhdGg5a19od19pbml0X21vZGVfcmVncyhhaCk7CisKKwlpZiAoYWgtPmlzX3BjaWV4cHJlc3MpCisJCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMCk7CisJZWxzZQorCQlhdGg5a19od19kaXNhYmxlcGNpZShhaCk7CisKKwlyID0gYXRoOWtfaHdfcG9zdF9pbml0KGFoKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlhdGg5a19od19pbml0X21vZGVfZ2Fpbl9yZWdzKGFoKTsKKwlhdGg5a19od19maWxsX2NhcF9pbmZvKGFoKTsKKwlhdGg5a19od19pbml0XzExYV9lZXByb21fZml4KGFoKTsKKworCXIgPSBhdGg5a19od19pbml0X21hY2FkZHIoYWgpOworCWlmIChyKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIkZhaWxlZCB0byBpbml0aWFsaXplIE1BQyBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIHI7CisJfQorCisJaWYgKEFSX1NSRVZfOTI4NShhaCkgfHwgQVJfU1JFVl85MjcxKGFoKSkKIAkJYWgtPnR4X3RyaWdfbGV2ZWwgPSAoQVJfRlRSSUdfMjU2QiA+PiBBUl9GVFJJR19TKTsKIAllbHNlCiAJCWFoLT50eF90cmlnX2xldmVsID0gKEFSX0ZUUklHXzUxMkIgPj4gQVJfRlRSSUdfUyk7CiAKIAlhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKGFoKTsKIAotCXJldHVybiBhaDsKLWJhZDoKLQlpZiAoYWgpCi0JCWF0aDlrX2h3X2RldGFjaChhaCk7Ci0JaWYgKHN0YXR1cykKLQkJKnN0YXR1cyA9IGVjb2RlOwotCi0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfYmIoc3RydWN0IGF0aF9odyAqYWgsCkBAIC0xMTQ2LDMzICsxMjMwLDEyIEBACiB2b2lkIGF0aDlrX2h3X2RldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCi0JCWF0aDlrX2h3X2FuaV9kZXRhY2goYWgpOworCQlhdGg5a19od19hbmlfZGlzYWJsZShhaCk7CiAKLQlhdGg5a19od19yZmRldGFjaChhaCk7CisJYXRoOWtfaHdfcmZfZnJlZShhaCk7CiAJYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0ZVTExfU0xFRVApOwogCWtmcmVlKGFoKTsKLX0KLQotc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqZXJyb3IpCi17Ci0Jc3RydWN0IGF0aF9odyAqYWggPSBOVUxMOwotCi0Jc3dpdGNoIChkZXZpZCkgewotCWNhc2UgQVI1NDE2X0RFVklEX1BDSToKLQljYXNlIEFSNTQxNl9ERVZJRF9QQ0lFOgotCWNhc2UgQVI1NDE2X0FSOTEwMF9ERVZJRDoKLQljYXNlIEFSOTE2MF9ERVZJRF9QQ0k6Ci0JY2FzZSBBUjkyODBfREVWSURfUENJOgotCWNhc2UgQVI5MjgwX0RFVklEX1BDSUU6Ci0JY2FzZSBBUjkyODVfREVWSURfUENJRToKLQkJYWggPSBhdGg5a19od19kb19hdHRhY2goZGV2aWQsIHNjLCBlcnJvcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCSplcnJvciA9IC1FTlhJTzsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGFoOworCWFoID0gTlVMTDsKIH0KIAogLyoqKioqKiovCkBAIC0xMTgyLDYgKzEyNDUsMjcgQEAKIHN0YXRpYyB2b2lkIGF0aDlrX2h3X292ZXJyaWRlX2luaShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogeworCXUzMiB2YWw7CisKKwlpZiAoQVJfU1JFVl85MjcxKGFoKSkgeworCQkvKgorCQkgKiBFbmFibGUgc3BlY3RyYWwgc2NhbiB0byBzb2x1dGlvbiBmb3IgaXNzdWVzIHdpdGggc3R1Y2sKKwkJICogYmVhY29ucyBvbiBBUjkyNzEgMS4wLiBUaGUgYmVhY29uIHN0dWNrIGlzc3VlIGlzIG5vdCBzZWVvbiBvbgorCQkgKiBBUjkyNzEgMS4xCisJCSAqLworCQlpZiAoQVJfU1JFVl85MjcxXzEwKGFoKSkgeworCQkJdmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9TUEVDVFJBTF9TQ0FOKSB8IEFSX1BIWV9TUEVDVFJBTF9TQ0FOX0VOQUJMRTsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1NQRUNUUkFMX1NDQU4sIHZhbCk7CisJCX0KKwkJZWxzZSBpZiAoQVJfU1JFVl85MjcxXzExKGFoKSkKKwkJCS8qCisJCQkgKiBjaGFuZ2UgQVJfUEhZX1JGX0NUTDMgc2V0dGluZyB0byBmaXggTUFDIGlzc3VlCisJCQkgKiBwcmVzZW50IG9uIEFSOTI3MSAxLjEKKwkJCSAqLworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUkZfQ1RMMywgMHgzYTAyMDAwMSk7CisJCXJldHVybjsKKwl9CisKIAkvKgogCSAqIFNldCB0aGUgUlhfQUJPUlQgYW5kIFJYX0RJUyBhbmQgY2xlYXIgaWYgb2ZmIG9ubHkgYWZ0ZXIKIAkgKiBSWEUgaXMgc2V0IGZvciBNQUMuIFRoaXMgcHJldmVudHMgZnJhbWVzIHdpdGggY29ycnVwdGVkCkBAIC0xMTkzLDcgKzEyNzcsMTAgQEAKIAlpZiAoIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgfHwKIAkgICAgQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKIAkJcmV0dXJuOwotCisJLyoKKwkgKiBEaXNhYmxlIEJCIGNsb2NrIGdhdGluZworCSAqIE5lY2Vzc2FyeSB0byBhdm9pZCBpc3N1ZXMgb24gQVI1NDE2IDIuMAorCSAqLwogCVJFR19XUklURShhaCwgMHg5ODAwICsgKDY1MSA8PCAyKSwgMHgxMSk7CiB9CiAKQEAgLTEyNDUsMTEgKzEzMzIsMjEgQEAKIHsKIAl1MzIgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUjkyODBfVFhfR0FJTl9UQUJMRV9TSVpFOyBpKyspCi0JCWFoLT5vcmlnaW5hbEdhaW5baV0gPQotCQkJTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9UWF9HQUlOX1RCTDEgKyBpICogNCksCi0JCQkJCUFSX1BIWV9UWF9HQUlOKTsKLQlhaC0+UERBRENkZWx0YSA9IDA7CisJaWYgKE9MQ19GT1JfQVI5Mjg3XzEwX0xBVEVSKSB7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfVFhfUFdSQ1RSTDksCisJCQkJQVJfUEhZX1RYX1BXUkNUUkw5X1JFU19EQ19SRU1PVkFMKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1RYUEMwLAorCQkJCUFSOTI4N19BTl9UWFBDMF9UWFBDTU9ERSwKKwkJCQlBUjkyODdfQU5fVFhQQzBfVFhQQ01PREVfUywKKwkJCQlBUjkyODdfQU5fVFhQQzBfVFhQQ01PREVfVEVNUFNFTlNFKTsKKwkJdWRlbGF5KDEwMCk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSOTI4MF9UWF9HQUlOX1RBQkxFX1NJWkU7IGkrKykKKwkJCWFoLT5vcmlnaW5hbEdhaW5baV0gPQorCQkJCU1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFhfR0FJTl9UQkwxICsgaSAqIDQpLAorCQkJCQkJQVJfUEhZX1RYX0dBSU4pOworCQlhaC0+UERBRENkZWx0YSA9IDA7CisJfQogfQogCiBzdGF0aWMgdTMyIGF0aDlrX3JlZ2RfZ2V0X2N0bChzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZywKQEAgLTEyNzEsNiArMTM2OCw3IEBACiAJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpCiB7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7CiAJaW50IGksIHJlZ1dyaXRlcyA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY2hhbi0+Y2hhbjsKIAl1MzIgbW9kZXNJbmRleCwgZnJlcUluZGV4OwpAQCAtMTM0MSwxMCArMTQzOSwxMSBAQAogCQlET19ERUxBWShyZWdXcml0ZXMpOwogCX0KIAotCWlmIChBUl9TUkVWXzkyODAoYWgpKQorCWlmIChBUl9TUkVWXzkyODAoYWgpIHx8IEFSX1NSRVZfOTI4N18xMF9PUl9MQVRFUihhaCkpCiAJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLCBtb2Rlc0luZGV4LCByZWdXcml0ZXMpOwogCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkgfHwgQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkKKwlpZiAoQVJfU1JFVl85MjgwKGFoKSB8fCBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpIHx8CisJICAgIEFSX1NSRVZfOTI4N18xMF9PUl9MQVRFUihhaCkpCiAJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLCBtb2Rlc0luZGV4LCByZWdXcml0ZXMpOwogCiAJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlDb21tb24uaWFfcm93czsgaSsrKSB7CkBAIC0xMzc2LDExICsxNDc1LDExIEBACiAJCWF0aDlrX29sY19pbml0KGFoKTsKIAogCWFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKLQkJCQkgYXRoOWtfcmVnZF9nZXRfY3RsKCZhaC0+cmVndWxhdG9yeSwgY2hhbiksCisJCQkJIGF0aDlrX3JlZ2RfZ2V0X2N0bChyZWd1bGF0b3J5LCBjaGFuKSwKIAkJCQkgY2hhbm5lbC0+bWF4X2FudGVubmFfZ2FpbiAqIDIsCiAJCQkJIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCiAJCQkJIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKLQkJCQkgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKTsKKwkJCQkgKHUzMikgcmVndWxhdG9yeS0+cG93ZXJfbGltaXQpKTsKIAogCWlmICghYXRoOWtfaHdfc2V0X3JmX3JlZ3MoYWgsIGNoYW4sIGZyZXFJbmRleCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCkBAIC0xNDI0LDIzICsxNTIzLDQ4IEBACiB7CiAJdTMyIHJlZ3ZhbDsKIAorCS8qCisJICogc2V0IEFIQl9NT0RFIG5vdCB0byBkbyBjYWNoZWxpbmUgcHJlZmV0Y2hlcworCSovCiAJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX0FIQl9NT0RFKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0FIQl9NT0RFLCByZWd2YWwgfCBBUl9BSEJfUFJFRkVUQ0hfUkRfRU4pOwogCisJLyoKKwkgKiBsZXQgbWFjIGRtYSByZWFkcyBiZSBpbiAxMjggYnl0ZSBjaHVua3MKKwkgKi8KIAlyZWd2YWwgPSBSRUdfUkVBRChhaCwgQVJfVFhDRkcpICYgfkFSX1RYQ0ZHX0RNQVNaX01BU0s7CiAJUkVHX1dSSVRFKGFoLCBBUl9UWENGRywgcmVndmFsIHwgQVJfVFhDRkdfRE1BU1pfMTI4Qik7CiAKKwkvKgorCSAqIFJlc3RvcmUgVFggVHJpZ2dlciBMZXZlbCB0byBpdHMgcHJlLXJlc2V0IHZhbHVlLgorCSAqIFRoZSBpbml0aWFsIHZhbHVlIGRlcGVuZHMgb24gd2hldGhlciBhZ2dyZWdhdGlvbiBpcyBlbmFibGVkLCBhbmQgaXMKKwkgKiBhZGp1c3RlZCB3aGVuZXZlciB1bmRlcnJ1bnMgYXJlIGRldGVjdGVkLgorCSAqLwogCVJFR19STVdfRklFTEQoYWgsIEFSX1RYQ0ZHLCBBUl9GVFJJRywgYWgtPnR4X3RyaWdfbGV2ZWwpOwogCisJLyoKKwkgKiBsZXQgbWFjIGRtYSB3cml0ZXMgYmUgaW4gMTI4IGJ5dGUgY2h1bmtzCisJICovCiAJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX1JYQ0ZHKSAmIH5BUl9SWENGR19ETUFTWl9NQVNLOwogCVJFR19XUklURShhaCwgQVJfUlhDRkcsIHJlZ3ZhbCB8IEFSX1JYQ0ZHX0RNQVNaXzEyOEIpOwogCisJLyoKKwkgKiBTZXR1cCByZWNlaXZlIEZJRk8gdGhyZXNob2xkIHRvIGhvbGQgb2ZmIFRYIGFjdGl2aXRpZXMKKwkgKi8KIAlSRUdfV1JJVEUoYWgsIEFSX1JYRklGT19DRkcsIDB4MjAwKTsKIAorCS8qCisJICogcmVkdWNlIHRoZSBudW1iZXIgb2YgdXNhYmxlIGVudHJpZXMgaW4gUENVIFRYQlVGIHRvIGF2b2lkCisJICogd3JhcCBhcm91bmQgaXNzdWVzLgorCSAqLwogCWlmIChBUl9TUkVWXzkyODUoYWgpKSB7CisJCS8qIEZvciBBUjkyODUgdGhlIG51bWJlciBvZiBGaWZvcyBhcmUgcmVkdWNlZCB0byBoYWxmLgorCQkgKiBTbyBzZXQgdGhlIHVzYWJsZSB0eCBidWYgc2l6ZSBhbHNvIHRvIGhhbGYgdG8KKwkJICogYXZvaWQgZGF0YS9kZWxpbWl0ZXIgdW5kZXJydW5zCisJCSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDVV9UWEJVRl9DVFJMLAogCQkJICBBUl85Mjg1X1BDVV9UWEJVRl9DVFJMX1VTQUJMRV9TSVpFKTsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoIUFSX1NSRVZfOTI3MShhaCkpIHsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ1VfVFhCVUZfQ1RSTCwKIAkJCSAgQVJfUENVX1RYQlVGX0NUUkxfVVNBQkxFX1NJWkUpOwogCX0KQEAgLTE1ODUsOCArMTcwOSwxNSBAQAogCVJFR19XUklURShhaCwgQVJfUlRDX0ZPUkNFX1dBS0UsIEFSX1JUQ19GT1JDRV9XQUtFX0VOIHwKIAkJICBBUl9SVENfRk9SQ0VfV0FLRV9PTl9JTlQpOwogCisJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKQorCQlSRUdfV1JJVEUoYWgsIEFSX1JDLCBBUl9SQ19BSEIpOworCiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkVTRVQsIDApOwogCXVkZWxheSgyKTsKKworCWlmICghQVJfU1JFVl85MTAwKGFoKSkKKwkJUkVHX1dSSVRFKGFoLCBBUl9SQywgMCk7CisKIAlSRUdfV1JJVEUoYWgsIEFSX1JUQ19SRVNFVCwgMSk7CiAKIAlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsCkBAIC0xNjczLDYgKzE4MDQsNyBAQAogCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCQkgICAgZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpCiB7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY2hhbi0+Y2hhbjsKIAl1MzIgc3ludGhEZWxheSwgcW51bTsKIApAQCAtMTcwNSwxMSArMTgzNywxMSBAQAogCX0KIAogCWFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKLQkJCSAgICAgYXRoOWtfcmVnZF9nZXRfY3RsKCZhaC0+cmVndWxhdG9yeSwgY2hhbiksCisJCQkgICAgIGF0aDlrX3JlZ2RfZ2V0X2N0bChyZWd1bGF0b3J5LCBjaGFuKSwKIAkJCSAgICAgY2hhbm5lbC0+bWF4X2FudGVubmFfZ2FpbiAqIDIsCiAJCQkgICAgIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCiAJCQkgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKLQkJCSAgICAgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKTsKKwkJCSAgICAgKHUzMikgcmVndWxhdG9yeS0+cG93ZXJfbGltaXQpKTsKIAogCXN5bnRoRGVsYXkgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1JYX0RFTEFZKSAmIEFSX1BIWV9SWF9ERUxBWV9ERUxBWTsKIAlpZiAoSVNfQ0hBTl9CKGNoYW4pKQpAQCAtMjI0NiwxNCArMjM3OCwzOSBAQAogCiAJYXRoOWtfaHdfbWFya19waHlfaW5hY3RpdmUoYWgpOwogCisJaWYgKEFSX1NSRVZfOTI3MShhaCkgJiYgYWgtPmh0Y19yZXNldF9pbml0KSB7CisJCVJFR19XUklURShhaCwKKwkJCSAgQVI5MjcxX1JFU0VUX1BPV0VSX0RPV05fQ09OVFJPTCwKKwkJCSAgQVI5MjcxX1JBRElPX1JGX1JTVCk7CisJCXVkZWxheSg1MCk7CisJfQorCiAJaWYgKCFhdGg5a19od19jaGlwX3Jlc2V0KGFoLCBjaGFuKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwgIkNoaXAgcmVzZXQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKEFSX1NSRVZfOTI3MShhaCkgJiYgYWgtPmh0Y19yZXNldF9pbml0KSB7CisJCWFoLT5odGNfcmVzZXRfaW5pdCA9IGZhbHNlOworCQlSRUdfV1JJVEUoYWgsCisJCQkgIEFSOTI3MV9SRVNFVF9QT1dFUl9ET1dOX0NPTlRST0wsCisJCQkgIEFSOTI3MV9HQVRFX01BQ19DVEwpOworCQl1ZGVsYXkoNTApOworCX0KKwogCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQogCQlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsIEFSX0dQSU9fSlRBR19ESVNBQkxFKTsKIAorCWlmIChBUl9TUkVWXzkyODdfMTJfT1JfTEFURVIoYWgpKSB7CisJCS8qIEVuYWJsZSBBU1lOQyBGSUZPICovCisJCVJFR19TRVRfQklUKGFoLCBBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHMywKKwkJCQlBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHM19EQVRBUEFUSF9TRUwpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX01PREUsIEFSX1BIWV9NT0RFX0FTWU5DRklGTyk7CisJCVJFR19DTFJfQklUKGFoLCBBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHMywKKwkJCQlBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHM19TT0ZUX1JFU0VUKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczLAorCQkJCUFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczX1NPRlRfUkVTRVQpOworCX0KIAlyID0gYXRoOWtfaHdfcHJvY2Vzc19pbmkoYWgsIGNoYW4sIHNjLT50eF9jaGFuX3dpZHRoKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CkBAIC0yMzMwLDYgKzI0ODcsMjcgQEAKIAogCWF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhhaCk7CiAKKwlpZiAoQVJfU1JFVl85Mjg3XzEyX09SX0xBVEVSKGFoKSkgeworCQlSRUdfV1JJVEUoYWgsIEFSX0RfR0JMX0lGU19TSUZTLAorCQkJICBBUl9EX0dCTF9JRlNfU0lGU19BU1lOQ19GSUZPX0RVUik7CisJCVJFR19XUklURShhaCwgQVJfRF9HQkxfSUZTX1NMT1QsCisJCQkgIEFSX0RfR0JMX0lGU19TTE9UX0FTWU5DX0ZJRk9fRFVSKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9EX0dCTF9JRlNfRUlGUywKKwkJCSAgQVJfRF9HQkxfSUZTX0VJRlNfQVNZTkNfRklGT19EVVIpOworCisJCVJFR19XUklURShhaCwgQVJfVElNRV9PVVQsIEFSX1RJTUVfT1VUX0FDS19DVFNfQVNZTkNfRklGT19EVVIpOworCQlSRUdfV1JJVEUoYWgsIEFSX1VTRUMsIEFSX1VTRUNfQVNZTkNfRklGT19EVVIpOworCisJCVJFR19TRVRfQklUKGFoLCBBUl9NQUNfUENVX0xPR0lDX0FOQUxZWkVSLAorCQkJICAgIEFSX01BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfRElTQlVHMjA3NjgpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9BSEJfTU9ERSwgQVJfQUhCX0NVU1RPTV9CVVJTVF9FTiwKKwkJCSAgICAgIEFSX0FIQl9DVVNUT01fQlVSU1RfQVNZTkNfRklGT19WQUwpOworCX0KKwlpZiAoQVJfU1JFVl85Mjg3XzEyX09SX0xBVEVSKGFoKSkgeworCQlSRUdfU0VUX0JJVChhaCwgQVJfUENVX01JU0NfTU9ERTIsCisJCQkJQVJfUENVX01JU0NfTU9ERTJfRU5BQkxFX0FHR1dFUCk7CisJfQorCiAJUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQxLAogCQkgIFJFR19SRUFEKGFoLCBBUl9TVEFfSUQxKSB8IEFSX1NUQV9JRDFfUFJFU0VSVkVfU0VRTlVNKTsKIApAQCAtMjM0NSw3ICsyNTIzLDcgQEAKIAlhdGg5a19od19pbml0X2JiKGFoLCBjaGFuKTsKIAogCWlmICghYXRoOWtfaHdfaW5pdF9jYWwoYWgsIGNoYW4pKQotCQlyZXR1cm4gLUVJTzs7CisJCXJldHVybiAtRUlPOwogCiAJcnhfY2hhaW5tYXNrID0gYWgtPnJ4Y2hhaW5tYXNrOwogCWlmICgocnhfY2hhaW5tYXNrID09IDB4NSkgfHwgKHJ4X2NoYWlubWFzayA9PSAweDMpKSB7CkBAIC0yMzU1LDYgKzI1MzMsOSBAQAogCiAJUkVHX1dSSVRFKGFoLCBBUl9DRkdfTEVELCBzYXZlTGVkU3RhdGUgfCBBUl9DRkdfU0NMS18zMktIWik7CiAKKwkvKgorCSAqIEZvciBiaWcgZW5kaWFuIHN5c3RlbXMgdHVybiBvbiBzd2FwcGluZyBmb3IgZGVzY3JpcHRvcnMKKwkgKi8KIAlpZiAoQVJfU1JFVl85MTAwKGFoKSkgewogCQl1MzIgbWFzazsKIAkJbWFzayA9IFJFR19SRUFEKGFoLCBBUl9DRkcpOwpAQCAtMjM2OSwxMSArMjU1MCwxOCBAQAogCQkJCSJTZXR0aW5nIENGRyAweCV4XG4iLCBSRUdfUkVBRChhaCwgQVJfQ0ZHKSk7CiAJCX0KIAl9IGVsc2UgeworCQkvKiBDb25maWd1cmUgQVI5MjcxIHRhcmdldCBXTEFOICovCisgICAgICAgICAgICAgICAgaWYgKEFSX1NSRVZfOTI3MShhaCkpCisJCQlSRUdfV1JJVEUoYWgsIEFSX0NGRywgQVJfQ0ZHX1NXUkIgfCBBUl9DRkdfU1dUQik7CiAjaWZkZWYgX19CSUdfRU5ESUFOCi0JCVJFR19XUklURShhaCwgQVJfQ0ZHLCBBUl9DRkdfU1dURCB8IEFSX0NGR19TV1JEKTsKKyAgICAgICAgICAgICAgICBlbHNlCisJCQlSRUdfV1JJVEUoYWgsIEFSX0NGRywgQVJfQ0ZHX1NXVEQgfCBBUl9DRkdfU1dSRCk7CiAjZW5kaWYKIAl9CiAKKwlpZiAoYWgtPmFoX3NjLT5zY19mbGFncyAmIFNDX09QX0JUQ09FWF9FTkFCTEVEKQorCQlhdGg5a19od19idGNvZXhfZW5hYmxlKGFoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNDEyLDkgKzI2MDAsNiBAQAogCiAJfQogCi0JaWYgKGFoLT5jdXJjaGFuID09IE5VTEwpCi0JCXJldHVybiB0cnVlOwotCiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI3MjgsNyArMjkxMyw4IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfcG93ZXJfbW9kZSBtb2RlKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0cG93ZXJfbm9sb2NrKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICAgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpCiB7CiAJaW50IHN0YXR1cyA9IHRydWUsIHNldENoaXAgPSB0cnVlOwogCXN0YXRpYyBjb25zdCBjaGFyICptb2Rlc1tdID0gewpAQCAtMjczOCw2ICsyOTI0LDkgQEAKIAkJIlVOREVGSU5FRCIKIAl9OwogCisJaWYgKGFoLT5wb3dlcl9tb2RlID09IG1vZGUpCisJCXJldHVybiBzdGF0dXM7CisKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgIiVzIC0+ICVzXG4iLAogCQltb2Rlc1thaC0+cG93ZXJfbW9kZV0sIG1vZGVzW21vZGVdKTsKIApAQCAtMjc2Miw2ICsyOTUxLDUxIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorYm9vbCBhdGg5a19od19zZXRwb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhaC0+YWhfc2MtPnNjX3BtX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBhdGg5a19od19zZXRwb3dlcl9ub2xvY2soYWgsIG1vZGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFoLT5haF9zYy0+c2NfcG1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBhdGg5a19wc193YWtldXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+c2NfcG1fbG9jaywgZmxhZ3MpOworCWlmICgrK3NjLT5wc191c2Vjb3VudCAhPSAxKQorCQlnb3RvIHVubG9jazsKKworCWF0aDlrX2h3X3NldHBvd2VyX25vbG9jayhzYy0+c2NfYWgsIEFUSDlLX1BNX0FXQUtFKTsKKworIHVubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+c2NfcG1fbG9jaywgZmxhZ3MpOworfQorCit2b2lkIGF0aDlrX3BzX3Jlc3RvcmUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+c2NfcG1fbG9jaywgZmxhZ3MpOworCWlmICgtLXNjLT5wc191c2Vjb3VudCAhPSAwKQorCQlnb3RvIHVubG9jazsKKworCWlmIChzYy0+cHNfZW5hYmxlZCAmJgorCSAgICAhKHNjLT5zY19mbGFncyAmIChTQ19PUF9XQUlUX0ZPUl9CRUFDT04gfAorCQkJICAgICAgU0NfT1BfV0FJVF9GT1JfQ0FCIHwKKwkJCSAgICAgIFNDX09QX1dBSVRfRk9SX1BTUE9MTF9EQVRBIHwKKwkJCSAgICAgIFNDX09QX1dBSVRfRk9SX1RYX0FDSykpKQorCQlhdGg5a19od19zZXRwb3dlcl9ub2xvY2soc2MtPnNjX2FoLCBBVEg5S19QTV9ORVRXT1JLX1NMRUVQKTsKKworIHVubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+c2NfcG1fbG9jaywgZmxhZ3MpOworfQorCiAvKgogICogSGVscGVyIGZvciBBU1BNIHN1cHBvcnQuCiAgKgpAQCAtMjc5MCw3ICszMDI0LDcgQEAKIAkJLyoKIAkJICogQVI5MjgwIDIuMCBvciBsYXRlciBjaGlwcyB1c2UgU2VyRGVzIHZhbHVlcyBmcm9tIHRoZQogCQkgKiBpbml0dmFscy5oIGluaXRpYWxpemVkIGRlcGVuZGluZyBvbiBjaGlwc2V0IGR1cmluZwotCQkgKiBhdGg5a19od19kb19hdHRhY2goKQorCQkgKiBhdGg5a19od19pbml0KCkKIAkJICovCiAJCWZvciAoaSA9IDA7IGkgPCBhaC0+aW5pUGNpZVNlcmRlcy5pYV9yb3dzOyBpKyspIHsKIAkJCVJFR19XUklURShhaCwgSU5JX1JBKCZhaC0+aW5pUGNpZVNlcmRlcywgaSwgMCksCkBAIC0yODUxLDcgKzMwODUsNyBAQAogCWlmIChhaC0+Y29uZmlnLnBjaWVfd2FlbikgewogCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBhaC0+Y29uZmlnLnBjaWVfd2Flbik7CiAJfSBlbHNlIHsKLQkJaWYgKEFSX1NSRVZfOTI4NShhaCkpCisJCWlmIChBUl9TUkVWXzkyODUoYWgpIHx8IEFSX1NSRVZfOTI3MShhaCkgfHwgQVJfU1JFVl85Mjg3KGFoKSkKIAkJCVJFR19XUklURShhaCwgQVJfV0EsIEFSOTI4NV9XQV9ERUZBVUxUKTsKIAkJLyoKIAkJICogT24gQVI5MjgwIGNoaXBzIGJpdCAyMiBvZiAweDQwMDQgbmVlZHMgdG8gYmUgc2V0IHRvCkBAIC0yOTg1LDYgKzMyMTksMjMgQEAKIAlpZiAoQVJfU1JFVl85MTAwKGFoKSkKIAkJcmV0dXJuIHRydWU7CiAKKwlpZiAoaXNyICYgQVJfSVNSX0dFTlRNUikgeworCQl1MzIgczVfczsKKworCQlzNV9zID0gUkVHX1JFQUQoYWgsIEFSX0lTUl9TNV9TKTsKKwkJaWYgKGlzciAmIEFSX0lTUl9HRU5UTVIpIHsKKwkJCWFoLT5pbnRyX2dlbl90aW1lcl90cmlnZ2VyID0KKwkJCQlNUyhzNV9zLCBBUl9JU1JfUzVfR0VOVElNRVJfVFJJRyk7CisKKwkJCWFoLT5pbnRyX2dlbl90aW1lcl90aHJlc2ggPQorCQkJCU1TKHM1X3MsIEFSX0lTUl9TNV9HRU5USU1FUl9USFJFU0gpOworCisJCQlpZiAoYWgtPmludHJfZ2VuX3RpbWVyX3RyaWdnZXIpCisJCQkJKm1hc2tlZCB8PSBBVEg5S19JTlRfR0VOVElNRVI7CisKKwkJfQorCX0KKwogCWlmIChzeW5jX2NhdXNlKSB7CiAJCWZhdGFsX2ludCA9CiAJCQkoc3luY19jYXVzZSAmCkBAIC0zMDIxLDExICszMjcyLDYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLQlyZXR1cm4gYWgtPm1hc2tfcmVnOwotfQotCiBlbnVtIGF0aDlrX2ludCBhdGg5a19od19zZXRfaW50ZXJydXB0cyhzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19pbnQgaW50cykKIHsKIAl1MzIgb21hc2sgPSBhaC0+bWFza19yZWc7CkBAIC0zMjYzLDI3ICszNTA5LDMwIEBACiB2b2lkIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm8oc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwlzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvICpidGNvZXhfaW5mbyA9ICZhaC0+YWhfc2MtPmJ0Y29leF9pbmZvOworCiAJdTE2IGNhcEZpZWxkID0gMCwgZWV2YWw7CiAKIAllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUkVHXzApOwotCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPSBlZXZhbDsKKwlyZWd1bGF0b3J5LT5jdXJyZW50X3JkID0gZWV2YWw7CiAKIAllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUkVHXzEpOwogCWlmIChBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoYWgpKQogCQllZXZhbCB8PSBBUjkyODVfUkRFWFRfREVGQVVMVDsKLQlhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkX2V4dCA9IGVldmFsOworCXJlZ3VsYXRvcnktPmN1cnJlbnRfcmRfZXh0ID0gZWV2YWw7CiAKIAljYXBGaWVsZCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT1BfQ0FQKTsKIAogCWlmIChhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCiAJICAgIGFoLT5od192ZXJzaW9uLnN1YnZlbmRvcmlkID09IEFSX1NVQlZFTkRPUl9JRF9ORVdfQSkgewotCQlpZiAoYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCA9PSAweDY0IHx8Ci0JCSAgICBhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkID09IDB4NjUpCi0JCQlhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkICs9IDU7Ci0JCWVsc2UgaWYgKGFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPT0gMHg0MSkKLQkJCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPSAweDQzOworCQlpZiAocmVndWxhdG9yeS0+Y3VycmVudF9yZCA9PSAweDY0IHx8CisJCSAgICByZWd1bGF0b3J5LT5jdXJyZW50X3JkID09IDB4NjUpCisJCQlyZWd1bGF0b3J5LT5jdXJyZW50X3JkICs9IDU7CisJCWVsc2UgaWYgKHJlZ3VsYXRvcnktPmN1cnJlbnRfcmQgPT0gMHg0MSkKKwkJCXJlZ3VsYXRvcnktPmN1cnJlbnRfcmQgPSAweDQzOwogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJInJlZ2RvbWFpbiBtYXBwZWQgdG8gMHgleFxuIiwgYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCk7CisJCQkicmVnZG9tYWluIG1hcHBlZCB0byAweCV4XG4iLCByZWd1bGF0b3J5LT5jdXJyZW50X3JkKTsKIAl9CiAKIAllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT1BfTU9ERSk7CkBAIC0zMzA1LDcgKzM1NTQsNiBAQAogCX0KIAogCWlmIChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExRykgewotCQlzZXRfYml0KEFUSDlLX01PREVfMTFCLCBwQ2FwLT53aXJlbGVzc19tb2Rlcyk7CiAJCXNldF9iaXQoQVRIOUtfTU9ERV8xMUcsIHBDYXAtPndpcmVsZXNzX21vZGVzKTsKIAkJaWYgKGFoLT5jb25maWcuaHRfZW5hYmxlKSB7CiAJCQlpZiAoIShlZXZhbCAmIEFSNTQxNl9PUEZMQUdTX05fMkdfSFQyMCkpCkBAIC0zMzIxLDEwICszNTY5LDE3IEBACiAJfQogCiAJcENhcC0+dHhfY2hhaW5tYXNrID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9UWF9NQVNLKTsKKwkvKgorCSAqIEZvciBBUjkyNzEgd2Ugd2lsbCB0ZW1wb3JhcmlsbHkgdXNlcyB0aGUgcnggY2hhaW5tYXggYXMgcmVhZCBmcm9tCisJICogdGhlIEVFUFJPTS4KKwkgKi8KIAlpZiAoKGFoLT5od192ZXJzaW9uLmRldmlkID09IEFSNTQxNl9ERVZJRF9QQ0kpICYmCi0JICAgICEoZWV2YWwgJiBBUjU0MTZfT1BGTEFHU18xMUEpKQorCSAgICAhKGVldmFsICYgQVI1NDE2X09QRkxBR1NfMTFBKSAmJgorCSAgICAhKEFSX1NSRVZfOTI3MShhaCkpKQorCQkvKiBDQjcxOiBHUElPIDAgaXMgcHVsbGVkIGRvd24gdG8gaW5kaWNhdGUgMyByeCBjaGFpbnMgKi8KIAkJcENhcC0+cnhfY2hhaW5tYXNrID0gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIDApID8gMHg1IDogMHg3OwogCWVsc2UKKwkJLyogVXNlIHJ4X2NoYWlubWFzayBmcm9tIEVFUFJPTS4gKi8KIAkJcENhcC0+cnhfY2hhaW5tYXNrID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SWF9NQVNLKTsKIAogCWlmICghKEFSX1NSRVZfOTI4MChhaCkgJiYgKGFoLT5od192ZXJzaW9uLm1hY1JldiA9PSAwKSkpCkBAIC0zNDEyLDcgKzM2NjcsNyBAQAogCWVsc2UKIAkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfNEtCX1NQTElUVFJBTlM7CiAKLQlpZiAoYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZF9leHQgJiAoMSA8PCBSRUdfRVhUX0pBUEFOX01JREJBTkQpKSB7CisJaWYgKHJlZ3VsYXRvcnktPmN1cnJlbnRfcmRfZXh0ICYgKDEgPDwgUkVHX0VYVF9KQVBBTl9NSURCQU5EKSkgewogCQlwQ2FwLT5yZWdfY2FwID0KIAkJCUFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19ORVdfMTFBIHwKIAkJCUFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9FVkVOIHwKQEAgLTM0MzEsMTYgKzM2ODYsMjYgQEAKIAlwQ2FwLT5udW1fYW50Y2ZnXzJnaHogPQogCQlhaC0+ZWVwX29wcy0+Z2V0X251bV9hbnRfY29uZmlnKGFoLCBBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFopOwogCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkgJiYgYnRjb2V4X2VuYWJsZSkgewotCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9CVF9DT0VYOwotCQlhaC0+YnRhY3RpdmVfZ3BpbyA9IDY7Ci0JCWFoLT53bGFuYWN0aXZlX2dwaW8gPSA1OworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpICYmCisJICAgIGF0aF9idGNvZXhfc3VwcG9ydGVkKGFoLT5od192ZXJzaW9uLnN1YnN5c2lkKSkgeworCQlidGNvZXhfaW5mby0+YnRhY3RpdmVfZ3BpbyA9IEFUSF9CVEFDVElWRV9HUElPOworCQlidGNvZXhfaW5mby0+d2xhbmFjdGl2ZV9ncGlvID0gQVRIX1dMQU5BQ1RJVkVfR1BJTzsKKworCQlpZiAoQVJfU1JFVl85Mjg1KGFoKSkgeworCQkJYnRjb2V4X2luZm8tPmJ0Y29leF9zY2hlbWUgPSBBVEhfQlRDT0VYX0NGR18zV0lSRTsKKwkJCWJ0Y29leF9pbmZvLT5idHByaW9yaXR5X2dwaW8gPSBBVEhfQlRQUklPUklUWV9HUElPOworCQl9IGVsc2UgeworCQkJYnRjb2V4X2luZm8tPmJ0Y29leF9zY2hlbWUgPSBBVEhfQlRDT0VYX0NGR18yV0lSRTsKKwkJfQorCX0gZWxzZSB7CisJCWJ0Y29leF9pbmZvLT5idGNvZXhfc2NoZW1lID0gQVRIX0JUQ09FWF9DRkdfTk9ORTsKIAl9CiB9CiAKIGJvb2wgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgdHlwZSwKIAkJCSAgICB1MzIgY2FwYWJpbGl0eSwgdTMyICpyZXN1bHQpCiB7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBBVEg5S19DQVBfQ0lQSEVSOgogCQlzd2l0Y2ggKGNhcGFiaWxpdHkpIHsKQEAgLTM0ODksMTMgKzM3NTQsMTMgQEAKIAkJY2FzZSAwOgogCQkJcmV0dXJuIDA7CiAJCWNhc2UgMToKLQkJCSpyZXN1bHQgPSBhaC0+cmVndWxhdG9yeS5wb3dlcl9saW1pdDsKKwkJCSpyZXN1bHQgPSByZWd1bGF0b3J5LT5wb3dlcl9saW1pdDsKIAkJCXJldHVybiAwOwogCQljYXNlIDI6Ci0JCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkubWF4X3Bvd2VyX2xldmVsOworCQkJKnJlc3VsdCA9IHJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbDsKIAkJCXJldHVybiAwOwogCQljYXNlIDM6Ci0JCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGU7CisJCQkqcmVzdWx0ID0gcmVndWxhdG9yeS0+dHBfc2NhbGU7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyZXR1cm4gZmFsc2U7CkBAIC0zNTk1LDcgKzM4NjAsOSBAQAogCWlmIChncGlvID49IGFoLT5jYXBzLm51bV9ncGlvX3BpbnMpCiAJCXJldHVybiAweGZmZmZmZmZmOwogCi0JaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCisJaWYgKEFSX1NSRVZfOTI4N18xMF9PUl9MQVRFUihhaCkpCisJCXJldHVybiBNU19SRUdfUkVBRChBUjkyODcsIGdwaW8pICE9IDA7CisJZWxzZSBpZiAoQVJfU1JFVl85Mjg1XzEwX09SX0xBVEVSKGFoKSkKIAkJcmV0dXJuIE1TX1JFR19SRUFEKEFSOTI4NSwgZ3BpbykgIT0gMDsKIAllbHNlIGlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQogCQlyZXR1cm4gTVNfUkVHX1JFQUQoQVI5MjhYLCBncGlvKSAhPSAwOwpAQCAtMzY3Myw3ICszOTQwLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKLQkJYWgtPmRpdmVyc2l0eV9jb250cm9sID0gc2V0dGluZ3M7CisJCWFoLT5jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2wgPSBzZXR0aW5nczsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTM3MDAsNyArMzk2Nyw4IEBACiB7CiAJdTMyIHBoeWJpdHM7CiAKLQlSRUdfV1JJVEUoYWgsIEFSX1JYX0ZJTFRFUiwgKGJpdHMgJiAweGZmZmYpIHwgQVJfUlhfQ09NUFJfQkFSKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1JYX0ZJTFRFUiwgYml0cyk7CisKIAlwaHliaXRzID0gMDsKIAlpZiAoYml0cyAmIEFUSDlLX1JYX0ZJTFRFUl9QSFlSQURBUikKIAkJcGh5Yml0cyB8PSBBUl9QSFlfRVJSX1JBREFSOwpAQCAtMzczMSwxNyArMzk5OSwxOCBAQAogCiB2b2lkIGF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBsaW1pdCkKIHsKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKIAlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNoYW4tPmNoYW47CiAKLQlhaC0+cmVndWxhdG9yeS5wb3dlcl9saW1pdCA9IG1pbihsaW1pdCwgKHUzMikgTUFYX1JBVEVfUE9XRVIpOworCXJlZ3VsYXRvcnktPnBvd2VyX2xpbWl0ID0gbWluKGxpbWl0LCAodTMyKSBNQVhfUkFURV9QT1dFUik7CiAKIAlhaC0+ZWVwX29wcy0+c2V0X3R4cG93ZXIoYWgsIGNoYW4sCi0JCQkJIGF0aDlrX3JlZ2RfZ2V0X2N0bCgmYWgtPnJlZ3VsYXRvcnksIGNoYW4pLAorCQkJCSBhdGg5a19yZWdkX2dldF9jdGwocmVndWxhdG9yeSwgY2hhbiksCiAJCQkJIGNoYW5uZWwtPm1heF9hbnRlbm5hX2dhaW4gKiAyLAogCQkJCSBjaGFubmVsLT5tYXhfcG93ZXIgKiAyLAogCQkJCSBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCi0JCQkJICh1MzIpIGFoLT5yZWd1bGF0b3J5LnBvd2VyX2xpbWl0KSk7CisJCQkJICh1MzIpIHJlZ3VsYXRvcnktPnBvd2VyX2xpbWl0KSk7CiB9CiAKIHZvaWQgYXRoOWtfaHdfc2V0bWFjKHN0cnVjdCBhdGhfaHcgKmFoLCBjb25zdCB1OCAqbWFjKQpAQCAtMzc5MSwyOSArNDA2MCwyMiBAQAogCiB2b2lkIGF0aDlrX2h3X3Jlc2V0X3RzZihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlpbnQgY291bnQ7CisJYXRoOWtfcHNfd2FrZXVwKGFoLT5haF9zYyk7CisJaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9TTFAzMl9NT0RFLCBBUl9TTFAzMl9UU0ZfV1JJVEVfU1RBVFVTLCAwLAorCQkJICAgQUhfVFNGX1dSSVRFX1RJTUVPVVQpKQorCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKKwkJCSJBUl9TTFAzMl9UU0ZfV1JJVEVfU1RBVFVTIGxpbWl0IGV4Y2VlZGVkXG4iKTsKIAotCWNvdW50ID0gMDsKLQl3aGlsZSAoUkVHX1JFQUQoYWgsIEFSX1NMUDMyX01PREUpICYgQVJfU0xQMzJfVFNGX1dSSVRFX1NUQVRVUykgewotCQljb3VudCsrOwotCQlpZiAoY291bnQgPiAxMCkgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsCi0JCQkJIkFSX1NMUDMyX1RTRl9XUklURV9TVEFUVVMgbGltaXQgZXhjZWVkZWRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJdWRlbGF5KDEwKTsKLQl9CiAJUkVHX1dSSVRFKGFoLCBBUl9SRVNFVF9UU0YsIEFSX1JFU0VUX1RTRl9PTkNFKTsKKwlhdGg5a19wc19yZXN0b3JlKGFoLT5haF9zYyk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHNldHRpbmcpCit2b2lkIGF0aDlrX2h3X3NldF90c2ZhZGp1c3Qoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBzZXR0aW5nKQogewogCWlmIChzZXR0aW5nKQogCQlhaC0+bWlzY19tb2RlIHw9IEFSX1BDVV9UWF9BRERfVFNGOwogCWVsc2UKIAkJYWgtPm1pc2NfbW9kZSAmPSB+QVJfUENVX1RYX0FERF9UU0Y7Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBhdGg5a19od19zZXRzbG90dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHVzKQpAQCAtMzg0MiwyOSArNDEwNCwyMTAgQEAKIAlSRUdfV1JJVEUoYWgsIEFSXzIwNDBfTU9ERSwgbWFjbW9kZSk7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgQmx1ZXRvb3RoIENvZXhpc3RlbmNlICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEhXIEdlbmVyaWMgdGltZXJzIGNvbmZpZ3VyYXRpb24gKi8KIAotdm9pZCBhdGg5a19od19idGNvZXhfZW5hYmxlKHN0cnVjdCBhdGhfaHcgKmFoKQorc3RhdGljIGNvbnN0IHN0cnVjdCBhdGhfZ2VuX3RpbWVyX2NvbmZpZ3VyYXRpb24gZ2VuX3Rtcl9jb25maWd1cmF0aW9uW10gPQogewotCS8qIGNvbm5lY3QgYnRfYWN0aXZlIHRvIGJhc2ViYW5kICovCi0JUkVHX0NMUl9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfRU5fVkFMLAotCQkJKEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX1BSSU9SSVRZX0RFRiB8Ci0JCQkgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfRlJFUVVFTkNZX0RFRikpOworCXtBUl9ORVhUX05EUF9USU1FUiwgQVJfTkRQX1BFUklPRCwgQVJfVElNRVJfTU9ERSwgMHgwMDgwfSwKKwl7QVJfTkVYVF9ORFBfVElNRVIsIEFSX05EUF9QRVJJT0QsIEFSX1RJTUVSX01PREUsIDB4MDA4MH0sCisJe0FSX05FWFRfTkRQX1RJTUVSLCBBUl9ORFBfUEVSSU9ELCBBUl9USU1FUl9NT0RFLCAweDAwODB9LAorCXtBUl9ORVhUX05EUF9USU1FUiwgQVJfTkRQX1BFUklPRCwgQVJfVElNRVJfTU9ERSwgMHgwMDgwfSwKKwl7QVJfTkVYVF9ORFBfVElNRVIsIEFSX05EUF9QRVJJT0QsIEFSX1RJTUVSX01PREUsIDB4MDA4MH0sCisJe0FSX05FWFRfTkRQX1RJTUVSLCBBUl9ORFBfUEVSSU9ELCBBUl9USU1FUl9NT0RFLCAweDAwODB9LAorCXtBUl9ORVhUX05EUF9USU1FUiwgQVJfTkRQX1BFUklPRCwgQVJfVElNRVJfTU9ERSwgMHgwMDgwfSwKKwl7QVJfTkVYVF9ORFBfVElNRVIsIEFSX05EUF9QRVJJT0QsIEFSX1RJTUVSX01PREUsIDB4MDA4MH0sCisJe0FSX05FWFRfTkRQMl9USU1FUiwgQVJfTkRQMl9QRVJJT0QsIEFSX05EUDJfVElNRVJfTU9ERSwgMHgwMDAxfSwKKwl7QVJfTkVYVF9ORFAyX1RJTUVSICsgMSo0LCBBUl9ORFAyX1BFUklPRCArIDEqNCwKKwkJCQlBUl9ORFAyX1RJTUVSX01PREUsIDB4MDAwMn0sCisJe0FSX05FWFRfTkRQMl9USU1FUiArIDIqNCwgQVJfTkRQMl9QRVJJT0QgKyAyKjQsCisJCQkJQVJfTkRQMl9USU1FUl9NT0RFLCAweDAwMDR9LAorCXtBUl9ORVhUX05EUDJfVElNRVIgKyAzKjQsIEFSX05EUDJfUEVSSU9EICsgMyo0LAorCQkJCUFSX05EUDJfVElNRVJfTU9ERSwgMHgwMDA4fSwKKwl7QVJfTkVYVF9ORFAyX1RJTUVSICsgNCo0LCBBUl9ORFAyX1BFUklPRCArIDQqNCwKKwkJCQlBUl9ORFAyX1RJTUVSX01PREUsIDB4MDAxMH0sCisJe0FSX05FWFRfTkRQMl9USU1FUiArIDUqNCwgQVJfTkRQMl9QRVJJT0QgKyA1KjQsCisJCQkJQVJfTkRQMl9USU1FUl9NT0RFLCAweDAwMjB9LAorCXtBUl9ORVhUX05EUDJfVElNRVIgKyA2KjQsIEFSX05EUDJfUEVSSU9EICsgNio0LAorCQkJCUFSX05EUDJfVElNRVJfTU9ERSwgMHgwMDQwfSwKKwl7QVJfTkVYVF9ORFAyX1RJTUVSICsgNyo0LCBBUl9ORFAyX1BFUklPRCArIDcqNCwKKwkJCQlBUl9ORFAyX1RJTUVSX01PREUsIDB4MDA4MH0KK307CiAKLQlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsCi0JCQlBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9BQ1RJVkVfQkIpOworLyogSFcgZ2VuZXJpYyB0aW1lciBwcmltaXRpdmVzICovCiAKLQkvKiBTZXQgaW5wdXQgbXV4IGZvciBidF9hY3RpdmUgdG8gZ3BpbyBwaW4gKi8KLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9HUElPX0lOUFVUX01VWDEsCi0JCQlBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFLAotCQkJYWgtPmJ0YWN0aXZlX2dwaW8pOworLyogY29tcHV0ZSBhbmQgY2xlYXIgaW5kZXggb2YgcmlnaHRtb3N0IDEgKi8KK3N0YXRpYyB1MzIgcmlnaHRtb3N0X2luZGV4KHN0cnVjdCBhdGhfZ2VuX3RpbWVyX3RhYmxlICp0aW1lcl90YWJsZSwgdTMyICptYXNrKQoreworCXUzMiBiOwogCi0JLyogQ29uZmlndXJlIHRoZSBkZXNpcmVkIGdwaW8gcG9ydCBmb3IgaW5wdXQgKi8KLQlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmJ0YWN0aXZlX2dwaW8pOworCWIgPSAqbWFzazsKKwliICY9ICgwLWIpOworCSptYXNrICY9IH5iOworCWIgKj0gZGVicnVpam4zMjsKKwliID4+PSAyNzsKIAotCS8qIENvbmZpZ3VyZSB0aGUgZGVzaXJlZCBHUElPIHBvcnQgZm9yIFRYX0ZSQU1FIG91dHB1dCAqLwotCWF0aDlrX2h3X2NmZ19vdXRwdXQoYWgsIGFoLT53bGFuYWN0aXZlX2dwaW8sCi0JCQkgICAgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1RYX0ZSQU1FKTsKKwlyZXR1cm4gdGltZXJfdGFibGUtPmdlbl90aW1lcl9pbmRleFtiXTsKK30KKwordTMyIGF0aDlrX2h3X2dldHRzZjMyKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiBSRUdfUkVBRChhaCwgQVJfVFNGX0wzMik7Cit9CisKK3N0cnVjdCBhdGhfZ2VuX3RpbWVyICphdGhfZ2VuX3RpbWVyX2FsbG9jKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgIHZvaWQgKCp0cmlnZ2VyKSh2b2lkICopLAorCQkJCQkgIHZvaWQgKCpvdmVyZmxvdykodm9pZCAqKSwKKwkJCQkJICB2b2lkICphcmcsCisJCQkJCSAgdTggdGltZXJfaW5kZXgpCit7CisJc3RydWN0IGF0aF9nZW5fdGltZXJfdGFibGUgKnRpbWVyX3RhYmxlID0gJmFoLT5od19nZW5fdGltZXJzOworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lcjsKKworCXRpbWVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF0aF9nZW5fdGltZXIpLCBHRlBfS0VSTkVMKTsKKworCWlmICh0aW1lciA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IgorCQkgICAgICAgImZvciBodyB0aW1lclslZF1cbiIsIHRpbWVyX2luZGV4KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogYWxsb2NhdGUgYSBoYXJkd2FyZSBnZW5lcmljIHRpbWVyIHNsb3QgKi8KKwl0aW1lcl90YWJsZS0+dGltZXJzW3RpbWVyX2luZGV4XSA9IHRpbWVyOworCXRpbWVyLT5pbmRleCA9IHRpbWVyX2luZGV4OworCXRpbWVyLT50cmlnZ2VyID0gdHJpZ2dlcjsKKwl0aW1lci0+b3ZlcmZsb3cgPSBvdmVyZmxvdzsKKwl0aW1lci0+YXJnID0gYXJnOworCisJcmV0dXJuIHRpbWVyOworfQorCit2b2lkIGF0aF9nZW5fdGltZXJfc3RhcnQoc3RydWN0IGF0aF9odyAqYWgsCisJCQkgc3RydWN0IGF0aF9nZW5fdGltZXIgKnRpbWVyLAorCQkJIHUzMiB0aW1lcl9uZXh0LCB1MzIgdGltZXJfcGVyaW9kKQoreworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyX3RhYmxlICp0aW1lcl90YWJsZSA9ICZhaC0+aHdfZ2VuX3RpbWVyczsKKwl1MzIgdHNmOworCisJQlVHX09OKCF0aW1lcl9wZXJpb2QpOworCisJc2V0X2JpdCh0aW1lci0+aW5kZXgsICZ0aW1lcl90YWJsZS0+dGltZXJfbWFzay50aW1lcl9iaXRzKTsKKworCXRzZiA9IGF0aDlrX2h3X2dldHRzZjMyKGFoKTsKKworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0hXVElNRVIsICJjdXJlbnQgdHNmICV4IHBlcmlvZCAleCIKKwkJInRpbWVyX25leHQgJXhcbiIsIHRzZiwgdGltZXJfcGVyaW9kLCB0aW1lcl9uZXh0KTsKKworCS8qCisJICogUHVsbCB0aW1lcl9uZXh0IGZvcndhcmQgaWYgdGhlIGN1cnJlbnQgVFNGIGFscmVhZHkgcGFzc2VkIGl0CisJICogYmVjYXVzZSBvZiBzb2Z0d2FyZSBsYXRlbmN5CisJICovCisJaWYgKHRpbWVyX25leHQgPCB0c2YpCisJCXRpbWVyX25leHQgPSB0c2YgKyB0aW1lcl9wZXJpb2Q7CisKKwkvKgorCSAqIFByb2dyYW0gZ2VuZXJpYyB0aW1lciByZWdpc3RlcnMKKwkgKi8KKwlSRUdfV1JJVEUoYWgsIGdlbl90bXJfY29uZmlndXJhdGlvblt0aW1lci0+aW5kZXhdLm5leHRfYWRkciwKKwkJIHRpbWVyX25leHQpOworCVJFR19XUklURShhaCwgZ2VuX3Rtcl9jb25maWd1cmF0aW9uW3RpbWVyLT5pbmRleF0ucGVyaW9kX2FkZHIsCisJCSAgdGltZXJfcGVyaW9kKTsKKwlSRUdfU0VUX0JJVChhaCwgZ2VuX3Rtcl9jb25maWd1cmF0aW9uW3RpbWVyLT5pbmRleF0ubW9kZV9hZGRyLAorCQkgICAgZ2VuX3Rtcl9jb25maWd1cmF0aW9uW3RpbWVyLT5pbmRleF0ubW9kZV9tYXNrKTsKKworCS8qIEVuYWJsZSBib3RoIHRyaWdnZXIgYW5kIHRocmVzaCBpbnRlcnJ1cHQgbWFza3MgKi8KKwlSRUdfU0VUX0JJVChhaCwgQVJfSU1SX1M1LAorCQkoU00oQVJfR0VOVE1SX0JJVCh0aW1lci0+aW5kZXgpLCBBUl9JTVJfUzVfR0VOVElNRVJfVEhSRVNIKSB8CisJCVNNKEFSX0dFTlRNUl9CSVQodGltZXItPmluZGV4KSwgQVJfSU1SX1M1X0dFTlRJTUVSX1RSSUcpKSk7CisKKwlpZiAoKGFoLT5haF9zYy0+aW1hc2sgJiBBVEg5S19JTlRfR0VOVElNRVIpID09IDApIHsKKwkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOworCQlhaC0+YWhfc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9HRU5USU1FUjsKKwkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5haF9zYy0+aW1hc2spOworCX0KK30KKwordm9pZCBhdGhfZ2VuX3RpbWVyX3N0b3Aoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lcikKK3sKKwlzdHJ1Y3QgYXRoX2dlbl90aW1lcl90YWJsZSAqdGltZXJfdGFibGUgPSAmYWgtPmh3X2dlbl90aW1lcnM7CisKKwlpZiAoKHRpbWVyLT5pbmRleCA8IEFSX0ZJUlNUX05EUF9USU1FUikgfHwKKwkJKHRpbWVyLT5pbmRleCA+PSBBVEhfTUFYX0dFTl9USU1FUikpIHsKKwkJcmV0dXJuOworCX0KKworCS8qIENsZWFyIGdlbmVyaWMgdGltZXIgZW5hYmxlIGJpdHMuICovCisJUkVHX0NMUl9CSVQoYWgsIGdlbl90bXJfY29uZmlndXJhdGlvblt0aW1lci0+aW5kZXhdLm1vZGVfYWRkciwKKwkJCWdlbl90bXJfY29uZmlndXJhdGlvblt0aW1lci0+aW5kZXhdLm1vZGVfbWFzayk7CisKKwkvKiBEaXNhYmxlIGJvdGggdHJpZ2dlciBhbmQgdGhyZXNoIGludGVycnVwdCBtYXNrcyAqLworCVJFR19DTFJfQklUKGFoLCBBUl9JTVJfUzUsCisJCShTTShBUl9HRU5UTVJfQklUKHRpbWVyLT5pbmRleCksIEFSX0lNUl9TNV9HRU5USU1FUl9USFJFU0gpIHwKKwkJU00oQVJfR0VOVE1SX0JJVCh0aW1lci0+aW5kZXgpLCBBUl9JTVJfUzVfR0VOVElNRVJfVFJJRykpKTsKKworCWNsZWFyX2JpdCh0aW1lci0+aW5kZXgsICZ0aW1lcl90YWJsZS0+dGltZXJfbWFzay50aW1lcl9iaXRzKTsKKworCS8qIGlmIG5vIHRpbWVyIGlzIGVuYWJsZWQsIHR1cm4gb2ZmIGludGVycnVwdCBtYXNrICovCisJaWYgKHRpbWVyX3RhYmxlLT50aW1lcl9tYXNrLnZhbCA9PSAwKSB7CisJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKKwkJYWgtPmFoX3NjLT5pbWFzayAmPSB+QVRIOUtfSU5UX0dFTlRJTUVSOworCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWgtPmFoX3NjLT5pbWFzayk7CisJfQorfQorCit2b2lkIGF0aF9nZW5fdGltZXJfZnJlZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9nZW5fdGltZXIgKnRpbWVyKQoreworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyX3RhYmxlICp0aW1lcl90YWJsZSA9ICZhaC0+aHdfZ2VuX3RpbWVyczsKKworCS8qIGZyZWUgdGhlIGhhcmR3YXJlIGdlbmVyaWMgdGltZXIgc2xvdCAqLworCXRpbWVyX3RhYmxlLT50aW1lcnNbdGltZXItPmluZGV4XSA9IE5VTEw7CisJa2ZyZWUodGltZXIpOworfQorCisvKgorICogR2VuZXJpYyBUaW1lciBJbnRlcnJ1cHRzIGhhbmRsaW5nCisgKi8KK3ZvaWQgYXRoX2dlbl90aW1lcl9pc3Ioc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGF0aF9nZW5fdGltZXJfdGFibGUgKnRpbWVyX3RhYmxlID0gJmFoLT5od19nZW5fdGltZXJzOworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lcjsKKwl1MzIgdHJpZ2dlcl9tYXNrLCB0aHJlc2hfbWFzaywgaW5kZXg7CisKKwkvKiBnZXQgaGFyZHdhcmUgZ2VuZXJpYyB0aW1lciBpbnRlcnJ1cHQgc3RhdHVzICovCisJdHJpZ2dlcl9tYXNrID0gYWgtPmludHJfZ2VuX3RpbWVyX3RyaWdnZXI7CisJdGhyZXNoX21hc2sgPSBhaC0+aW50cl9nZW5fdGltZXJfdGhyZXNoOworCXRyaWdnZXJfbWFzayAmPSB0aW1lcl90YWJsZS0+dGltZXJfbWFzay52YWw7CisJdGhyZXNoX21hc2sgJj0gdGltZXJfdGFibGUtPnRpbWVyX21hc2sudmFsOworCisJdHJpZ2dlcl9tYXNrICY9IH50aHJlc2hfbWFzazsKKworCXdoaWxlICh0aHJlc2hfbWFzaykgeworCQlpbmRleCA9IHJpZ2h0bW9zdF9pbmRleCh0aW1lcl90YWJsZSwgJnRocmVzaF9tYXNrKTsKKwkJdGltZXIgPSB0aW1lcl90YWJsZS0+dGltZXJzW2luZGV4XTsKKwkJQlVHX09OKCF0aW1lcik7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0hXVElNRVIsCisJCQkiVFNGIG92ZXJmbG93IGZvciBHZW4gdGltZXIgJWRcbiIsIGluZGV4KTsKKwkJdGltZXItPm92ZXJmbG93KHRpbWVyLT5hcmcpOworCX0KKworCXdoaWxlICh0cmlnZ2VyX21hc2spIHsKKwkJaW5kZXggPSByaWdodG1vc3RfaW5kZXgodGltZXJfdGFibGUsICZ0cmlnZ2VyX21hc2spOworCQl0aW1lciA9IHRpbWVyX3RhYmxlLT50aW1lcnNbaW5kZXhdOworCQlCVUdfT04oIXRpbWVyKTsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfSFdUSU1FUiwKKwkJCSJHZW4gdGltZXJbJWRdIHRyaWdnZXJcbiIsIGluZGV4KTsKKwkJdGltZXItPnRyaWdnZXIodGltZXItPmFyZyk7CisJfQorfQorCisvKgorICogUHJpbWl0aXZlIHRvIGRpc2FibGUgQVNQTQorICovCit2b2lkIGF0aF9wY2llX2FzcG1fZGlzYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoc2MtPmRldik7CisJdTggYXNwbTsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEFUSF9QQ0lFX0NBUF9MSU5LX0NUUkwsICZhc3BtKTsKKwlhc3BtICY9IH4oQVRIX1BDSUVfQ0FQX0xJTktfTDBTIHwgQVRIX1BDSUVfQ0FQX0xJTktfTDEpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBBVEhfUENJRV9DQVBfTElOS19DVFJMLCBhc3BtKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKaW5kZXggOWQwYjMxYS4uOTEwNmEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKQEAgLTQyLDYgKzQyLDEzIEBACiAjZGVmaW5lIEFSX1NVQlZFTkRPUl9JRF9ORVdfQQkweDcwNjUKICNkZWZpbmUgQVI1NDE2X01BR0lDCQkweDE5NjQxMDE0CiAKKyNkZWZpbmUgQVI1NDE2X0RFVklEX0FSOTI4N19QQ0kgIDB4MDAyRAorI2RlZmluZSBBUjU0MTZfREVWSURfQVI5Mjg3X1BDSUUgMHgwMDJFCisKKyNkZWZpbmUgQVI5MjgwX0NPRVgyV0lSRV9TVUJTWVNJRAkweDMwOWIKKyNkZWZpbmUgQVQ5Mjg1X0NPRVgzV0lSRV9TQV9TVUJTWVNJRAkweDMwYWEKKyNkZWZpbmUgQVQ5Mjg1X0NPRVgzV0lSRV9EQV9TVUJTWVNJRAkweDMwYWIKKwogLyogUmVnaXN0ZXIgcmVhZC93cml0ZSBwcmltaXRpdmVzICovCiAjZGVmaW5lIFJFR19XUklURShfYWgsIF9yZWcsIF92YWwpIGF0aDlrX2lvd3JpdGUzMigoX2FoKSwgKF9yZWcpLCAoX3ZhbCkpCiAjZGVmaW5lIFJFR19SRUFEKF9haCwgX3JlZykgYXRoOWtfaW9yZWFkMzIoKF9haCksIChfcmVnKSkKQEAgLTc2LDYgKzgzLDcgQEAKICNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1BDSUVfQVRURU5USU9OX0xFRCAxCiAjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19QQ0lFX1BPV0VSX0xFRCAgICAgMgogI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfVFhfRlJBTUUgICAgICAgICAgIDMKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1JYX0NMRUFSX0VYVEVSTkFMICA0CiAjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19NQUNfTkVUV09SS19MRUQgICAgNQogI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfTUFDX1BPV0VSX0xFRCAgICAgIDYKIApAQCAtOTUsNiArMTAzLDcgQEAKIAogI2RlZmluZSBNQVhfUkFURV9QT1dFUiAgICAgICAgICAgICAgNjMKICNkZWZpbmUgQUhfV0FJVF9USU1FT1VUICAgICAgICAgICAgIDEwMDAwMCAvKiAodXMpICovCisjZGVmaW5lIEFIX1RTRl9XUklURV9USU1FT1VUICAgICAgICAxMDAgICAgLyogKHVzKSAqLwogI2RlZmluZSBBSF9USU1FX1FVQU5UVU0gICAgICAgICAgICAgMTAKICNkZWZpbmUgQVJfS0VZVEFCTEVfU0laRSAgICAgICAgICAgIDEyOAogI2RlZmluZSBQT1dFUl9VUF9USU1FICAgICAgICAgICAgICAgMjAwMDAwCkBAIC0xMTMsMTUgKzEyMiwyMCBAQAogCiBlbnVtIHdpcmVsZXNzX21vZGUgewogCUFUSDlLX01PREVfMTFBID0gMCwKLQlBVEg5S19NT0RFXzExQiA9IDIsCi0JQVRIOUtfTU9ERV8xMUcgPSAzLAotCUFUSDlLX01PREVfMTFOQV9IVDIwID0gNiwKLQlBVEg5S19NT0RFXzExTkdfSFQyMCA9IDcsCi0JQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTID0gOCwKLQlBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTID0gOSwKLQlBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMgPSAxMCwKLQlBVEg5S19NT0RFXzExTkdfSFQ0ME1JTlVTID0gMTEsCi0JQVRIOUtfTU9ERV9NQVgKKwlBVEg5S19NT0RFXzExRywKKwlBVEg5S19NT0RFXzExTkFfSFQyMCwKKwlBVEg5S19NT0RFXzExTkdfSFQyMCwKKwlBVEg5S19NT0RFXzExTkFfSFQ0MFBMVVMsCisJQVRIOUtfTU9ERV8xMU5BX0hUNDBNSU5VUywKKwlBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMsCisJQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUywKKwlBVEg5S19NT0RFX01BWCwKK307CisKK2VudW0gYXRoOWtfYW50X3NldHRpbmcgeworCUFUSDlLX0FOVF9WQVJJQUJMRSA9IDAsCisJQVRIOUtfQU5UX0ZJWEVEX0EsCisJQVRIOUtfQU5UX0ZJWEVEX0IKIH07CiAKIGVudW0gYXRoOWtfaHdfY2FwcyB7CkBAIC0xNDIsNyArMTU2LDYgQEAKIAlBVEg5S19IV19DQVBfRU5IQU5DRURQTSAgICAgICAgICAgICAgICAgPSBCSVQoMTQpLAogCUFUSDlLX0hXX0NBUF9BVVRPU0xFRVAgICAgICAgICAgICAgICAgICA9IEJJVCgxNSksCiAJQVRIOUtfSFdfQ0FQXzRLQl9TUExJVFRSQU5TICAgICAgICAgICAgID0gQklUKDE2KSwKLQlBVEg5S19IV19DQVBfQlRfQ09FWAkJCT0gQklUKDE3KQogfTsKIAogZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgewpAQCAtMTg4LDcgKzIwMSw3IEBACiAJdTMyIGNja190cmlnX2hpZ2g7CiAJdTMyIGNja190cmlnX2xvdzsKIAl1MzIgZW5hYmxlX2FuaTsKLQl1MTYgZGl2ZXJzaXR5X2NvbnRyb2w7CisJZW51bSBhdGg5a19hbnRfc2V0dGluZyBkaXZlcnNpdHlfY29udHJvbDsKIAl1MTYgYW50ZW5uYV9zd2l0Y2hfc3dhcDsKIAlpbnQgc2VyaWFsaXplX3JlZ21vZGU7CiAJYm9vbCBpbnRyX21pdGlnYXRpb247CkBAIC0yMjksNiArMjQyLDcgQEAKIAlBVEg5S19JTlRfR1BJTyA9IDB4MDEwMDAwMDAsCiAJQVRIOUtfSU5UX0NBQkVORCA9IDB4MDIwMDAwMDAsCiAJQVRIOUtfSU5UX1RTRk9PUiA9IDB4MDQwMDAwMDAsCisJQVRIOUtfSU5UX0dFTlRJTUVSID0gMHgwODAwMDAwMCwKIAlBVEg5S19JTlRfQ1NUID0gMHgxMDAwMDAwMCwKIAlBVEg5S19JTlRfR1RUID0gMHgyMDAwMDAwMCwKIAlBVEg5S19JTlRfRkFUQUwgPSAweDQwMDAwMDAwLApAQCAtMzI3LDEyICszNDEsNiBAQAogCUFUSDlLX1BNX1VOREVGSU5FRAogfTsKIAotZW51bSBhdGg5a19hbnRfc2V0dGluZyB7Ci0JQVRIOUtfQU5UX1ZBUklBQkxFID0gMCwKLQlBVEg5S19BTlRfRklYRURfQSwKLQlBVEg5S19BTlRfRklYRURfQgotfTsKLQogZW51bSBhdGg5a190cF9zY2FsZSB7CiAJQVRIOUtfVFBfU0NBTEVfTUFYID0gMCwKIAlBVEg5S19UUF9TQ0FMRV81MCwKQEAgLTM4Niw2ICszOTQsNDIgQEAKIAl1MTYgcGh5UmV2OwogCXUxNiBhbmFsb2c1R2h6UmV2OwogCXUxNiBhbmFsb2cyR2h6UmV2OworCXUxNiBzdWJzeXNpZDsKK307CisKKy8qIEdlbmVyaWMgVFNGIHRpbWVyIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgQVRIX01BWF9HRU5fVElNRVIJMTYKKworI2RlZmluZSBBUl9HRU5UTVJfQklUKF9pbmRleCkJKDEgPDwgKF9pbmRleCkpCisKKy8qCisgKiBVc2luZyBkZSBCcnVpamluIHNlcXVlbmNlIHRvIHRvIGxvb2sgdXAgMSdzIGluZGV4IGluIGEgMzIgYml0IG51bWJlcgorICogZGVicnVpam4zMiA9IDAwMDAgMDExMSAwMTExIDExMDAgMTAxMSAwMTAxIDAwMTEgMDAwMQorICovCisjZGVmaW5lIGRlYnJ1aWpuMzIgMHgwNzdDQjUzMVVMCisKK3N0cnVjdCBhdGhfZ2VuX3RpbWVyX2NvbmZpZ3VyYXRpb24geworCXUzMiBuZXh0X2FkZHI7CisJdTMyIHBlcmlvZF9hZGRyOworCXUzMiBtb2RlX2FkZHI7CisJdTMyIG1vZGVfbWFzazsKK307CisKK3N0cnVjdCBhdGhfZ2VuX3RpbWVyIHsKKwl2b2lkICgqdHJpZ2dlcikodm9pZCAqYXJnKTsKKwl2b2lkICgqb3ZlcmZsb3cpKHZvaWQgKmFyZyk7CisJdm9pZCAqYXJnOworCXU4IGluZGV4OworfTsKKworc3RydWN0IGF0aF9nZW5fdGltZXJfdGFibGUgeworCXUzMiBnZW5fdGltZXJfaW5kZXhbMzJdOworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lcnNbQVRIX01BWF9HRU5fVElNRVJdOworCXVuaW9uIHsKKwkJdW5zaWduZWQgbG9uZyB0aW1lcl9iaXRzOworCQl1MTYgdmFsOworCX0gdGltZXJfbWFzazsKIH07CiAKIHN0cnVjdCBhdGhfaHcgewpAQCAtMzkzLDEzICs0MzcsMTMgQEAKIAlzdHJ1Y3QgYXRoOWtfaHdfdmVyc2lvbiBod192ZXJzaW9uOwogCXN0cnVjdCBhdGg5a19vcHNfY29uZmlnIGNvbmZpZzsKIAlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzIGNhcHM7Ci0Jc3RydWN0IGF0aF9yZWd1bGF0b3J5IHJlZ3VsYXRvcnk7CiAJc3RydWN0IGF0aDlrX2NoYW5uZWwgY2hhbm5lbHNbMzhdOwogCXN0cnVjdCBhdGg5a19jaGFubmVsICpjdXJjaGFuOwogCiAJdW5pb24gewogCQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgZGVmOwogCQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayBtYXA0azsKKwkJc3RydWN0IGFyOTI4N19lZXByb20gbWFwOTI4NzsKIAl9IGVlcHJvbTsKIAljb25zdCBzdHJ1Y3QgZWVwcm9tX29wcyAqZWVwX29wczsKIAllbnVtIGF0aDlrX2VlcF9tYXAgZWVwX21hcDsKQEAgLTQxMSwxNSArNDU1LDE1IEBACiAJdTE2IHJmc2lsZW50OwogCXUzMiByZmtpbGxfZ3BpbzsKIAl1MzIgcmZraWxsX3BvbGFyaXR5OwotCXUzMiBidGFjdGl2ZV9ncGlvOwotCXUzMiB3bGFuYWN0aXZlX2dwaW87CiAJdTMyIGFoX2ZsYWdzOwogCisJYm9vbCBodGNfcmVzZXRfaW5pdDsKKwogCWVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlOwogCWVudW0gYXRoOWtfcG93ZXJfbW9kZSBwb3dlcl9tb2RlOwotCWVudW0gYXRoOWtfcG93ZXJfbW9kZSByZXN0b3JlX21vZGU7CiAKIAlzdHJ1Y3QgYXRoOWtfbmZjYWxfaGlzdCBuZkNhbEhpc3RbTlVNX05GX1JFQURJTkdTXTsKKwlzdHJ1Y3QgYXRoOWtfcGFjYWxfaW5mbyBwYWNhbF9pbmZvOwogCXN0cnVjdCBhcjU0MTZTdGF0cyBzdGF0czsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyB0eHFbQVRIOUtfTlVNX1RYX1FVRVVFU107CiAKQEAgLTQzMiw4ICs0NzYsNiBAQAogCXUzMiB0eHVybl9pbnRlcnJ1cHRfbWFzazsKIAlib29sIGNoaXBfZnVsbHNsZWVwOwogCXUzMiBhdGltX3dpbmRvdzsKLQl1MTYgYW50ZW5uYV9zd2l0Y2hfc3dhcDsKLQllbnVtIGF0aDlrX2FudF9zZXR0aW5nIGRpdmVyc2l0eV9jb250cm9sOwogCiAJLyogQ2FsaWJyYXRpb24gKi8KIAllbnVtIGF0aDlrX2NhbF90eXBlcyBzdXBwX2NhbHM7CkBAIC01MDIsNyArNTQ0LDYgQEAKIAogCS8qIEFOSSAqLwogCXUzMiBwcm9jX3BoeWVycjsKLQlib29sIGhhc19od19waHljb3VudGVyczsKIAl1MzIgYW5pcGVyaW9kOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqY3VyYW5pOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSBhbmlbMjU1XTsKQEAgLTUyMCw2ICs1NjEsNyBAQAogCXUzMiBvcmlnaW5hbEdhaW5bMjJdOwogCWludCBpbml0UERBREM7CiAJaW50IFBEQURDZGVsdGE7CisJdTggbGVkX3BpbjsKIAogCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2RlczsKIAlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQ29tbW9uOwpAQCAtNTM2LDEzICs1NzgsMTcgQEAKIAlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXNBZGRpdGlvbmFsOwogCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2Rlc1J4R2FpbjsKIAlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXNUeEdhaW47CisKKwl1MzIgaW50cl9nZW5fdGltZXJfdHJpZ2dlcjsKKwl1MzIgaW50cl9nZW5fdGltZXJfdGhyZXNoOworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyX3RhYmxlIGh3X2dlbl90aW1lcnM7CiB9OwogCi0vKiBBdHRhY2gsIERldGFjaCwgUmVzZXQgKi8KKy8qIEluaXRpYWxpemF0aW9uLCBEZXRhY2gsIFJlc2V0ICovCiBjb25zdCBjaGFyICphdGg5a19od19wcm9iZSh1MTYgdmVuZG9yaWQsIHUxNiBkZXZpZCk7CiB2b2lkIGF0aDlrX2h3X2RldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7Ci1zdHJ1Y3QgYXRoX2h3ICphdGg5a19od19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICplcnJvcik7Ci12b2lkIGF0aDlrX2h3X3JmZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2ludCBhdGg5a19od19pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfcmZfZnJlZShzdHJ1Y3QgYXRoX2h3ICphaCk7CiBpbnQgYXRoOWtfaHdfcmVzZXQoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkgICBib29sIGJDaGFubmVsQ2hhbmdlKTsKIHZvaWQgYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhzdHJ1Y3QgYXRoX2h3ICphaCk7CkBAIC01OTYsNyArNjQyLDcgQEAKIHU2NCBhdGg5a19od19nZXR0c2Y2NChzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X3NldHRzZjY0KHN0cnVjdCBhdGhfaHcgKmFoLCB1NjQgdHNmNjQpOwogdm9pZCBhdGg5a19od19yZXNldF90c2Yoc3RydWN0IGF0aF9odyAqYWgpOwotYm9vbCBhdGg5a19od19zZXRfdHNmYWRqdXN0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgc2V0dGluZyk7Cit2b2lkIGF0aDlrX2h3X3NldF90c2ZhZGp1c3Qoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBzZXR0aW5nKTsKIGJvb2wgYXRoOWtfaHdfc2V0c2xvdHRpbWUoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cyk7CiB2b2lkIGF0aDlrX2h3X3NldDExbm1hYzIwNDAoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtb2RlKTsKIHZvaWQgYXRoOWtfaHdfYmVhY29uaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCk7CkBAIC02MDksOSArNjU1LDI0IEBACiAvKiBJbnRlcnJ1cHQgSGFuZGxpbmcgKi8KIGJvb2wgYXRoOWtfaHdfaW50cnBlbmQoc3RydWN0IGF0aF9odyAqYWgpOwogYm9vbCBhdGg5a19od19nZXRpc3Ioc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfaW50ICptYXNrZWQpOwotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2h3ICphaCk7CiBlbnVtIGF0aDlrX2ludCBhdGg5a19od19zZXRfaW50ZXJydXB0cyhzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19pbnQgaW50cyk7CiAKLXZvaWQgYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7CisvKiBHZW5lcmljIGh3IHRpbWVyIHByaW1pdGl2ZXMgKi8KK3N0cnVjdCBhdGhfZ2VuX3RpbWVyICphdGhfZ2VuX3RpbWVyX2FsbG9jKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgIHZvaWQgKCp0cmlnZ2VyKSh2b2lkICopLAorCQkJCQkgIHZvaWQgKCpvdmVyZmxvdykodm9pZCAqKSwKKwkJCQkJICB2b2lkICphcmcsCisJCQkJCSAgdTggdGltZXJfaW5kZXgpOwordm9pZCBhdGhfZ2VuX3RpbWVyX3N0YXJ0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2dlbl90aW1lciAqdGltZXIsCisJCQkgdTMyIHRpbWVyX25leHQsIHUzMiB0aW1lcl9wZXJpb2QpOwordm9pZCBhdGhfZ2VuX3RpbWVyX3N0b3Aoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lcik7Cit2b2lkIGF0aF9nZW5fdGltZXJfZnJlZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9nZW5fdGltZXIgKnRpbWVyKTsKK3ZvaWQgYXRoX2dlbl90aW1lcl9pc3Ioc3RydWN0IGF0aF9odyAqaHcpOwordTMyIGF0aDlrX2h3X2dldHRzZjMyKHN0cnVjdCBhdGhfaHcgKmFoKTsKIAorI2RlZmluZSBBVEhfUENJRV9DQVBfTElOS19DVFJMCTB4NzAKKyNkZWZpbmUgQVRIX1BDSUVfQ0FQX0xJTktfTDBTCTEKKyNkZWZpbmUgQVRIX1BDSUVfQ0FQX0xJTktfTDEJMgorCit2b2lkIGF0aF9wY2llX2FzcG1fZGlzYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0dmFscy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXR2YWxzLmgKaW5kZXggZTJmMGEzNC4uODYyMjI2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXR2YWxzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXR2YWxzLmgKQEAgLTI3ODIsNyArMjc4Miw3IEBACiAgICAgeyAweDAwMDA4MzM4LCAweDAwZmYwMDAwIH0sCiAgICAgeyAweDAwMDA4MzNjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MzQwLCAweDAwMDEwN2ZmIH0sCi0gICAgeyAweDAwMDA4MzQ0LCAweDAwNTgxMDQzIH0sCisgICAgeyAweDAwMDA4MzQ0LCAweDAwNDgxMDQzIH0sCiAgICAgeyAweDAwMDA5ODA4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5ODBjLCAweGFmYTY4ZTMwIH0sCiAgICAgeyAweDAwMDA5ODEwLCAweGZkMTRlMDAwIH0sCkBAIC0zNDM5LDcgKzM0MzksNyBAQAogICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAogfTsKIAotLyogQVI5Mjg1ICovCisvKiBBUjkyODUgUmV2c2lvbiAxMCovCiBzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NU1vZGVzXzkyODVbXVs2XSA9IHsKICAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKQEAgLTM5NTUsNyArMzk1NSw3IEBACiAgICAgeyAweDAwMDA4MzM4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MzNjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MzQwLCAweDAwMDEwMzgwIH0sCi0gICAgeyAweDAwMDA4MzQ0LCAweDAwNTgxMDQzIH0sCisgICAgeyAweDAwMDA4MzQ0LCAweDAwNDgxMDQzIH0sCiAgICAgeyAweDAwMDA5ODA4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5ODBjLCAweGFmZTY4ZTMwIH0sCiAgICAgeyAweDAwMDA5ODEwLCAweGZkMTRlMDAwIH0sCkBAIC00MTIxLDggKzQxMjEsMjI1MiBAQAogICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAogfTsKIAotLyogQVI5Mjg1IHYxXzIgUENJIFJlZ2lzdGVyIFdyaXRlcy4gIENyZWF0ZWQ6IDAzLzA0LzA5ICovCisvKiBBUjkyODUgdjFfMiBQQ0kgUmVnaXN0ZXIgV3JpdGVzLiAgQ3JlYXRlZDogMDQvMTMvMDkgKi8KIHN0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfOTI4NV8xXzJbXVs2XSA9IHsKKyAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLworICAgIHsgMHgwMDAwMTAzMCwgMHgwMDAwMDIzMCwgMHgwMDAwMDQ2MCwgMHgwMDAwMDJjMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMCB9LAorICAgIHsgMHgwMDAwMTA3MCwgMHgwMDAwMDE2OCwgMHgwMDAwMDJkMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMCB9LAorICAgIHsgMHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MCB9LAorICAgIHsgMHgwMDAwMTBmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCB9LAorICAgIHsgMHgwMDAwODAxNCwgMHgwM2U4MDNlOCwgMHgwN2QwMDdkMCwgMHgxMDgwMTYwMCwgMHgwODQwMGIwMCwgMHgwNmUwMDZlMCB9LAorICAgIHsgMHgwMDAwODAxYywgMHgxMjhkODAyNywgMHgxMjhkODA0ZiwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYiwgMHgwOTg4MDA0ZiB9LAorICAgIHsgMHgwMDAwODMxOCwgMHgwMDAwM2U4MCwgMHgwMDAwN2QwMCwgMHgwMDAwNjg4MCwgMHgwMDAwMzQ0MCwgMHgwMDAwNjg4MCB9LAorICAgIHsgMHgwMDAwOTgwNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDNjNCwgMHgwMDAwMDNjNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwMyB9LAorICAgIHsgMHgwMDAwOTgyMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCB9LAorICAgIHsgMHgwMDAwOTgyNCwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSB9LAorICAgIHsgMHgwMDAwOTgyOCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9LAorICAgIHsgMHgwMDAwOTgzNCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9LAorICAgIHsgMHgwMDAwOTgzOCwgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNyB9LAorICAgIHsgMHgwMDAwOTg0MCwgMHgyMDZhMDEyZSwgMHgyMDZhMDEyZSwgMHgyMDZhMDEyZSwgMHgyMDZhMDEyZSwgMHgyMDZhMDEyZSB9LAorICAgIHsgMHgwMDAwOTg0NCwgMHgwMzcyMTYxZSwgMHgwMzcyMTYxZSwgMHgwMzcyMTYyMCwgMHgwMzcyMTYyMCwgMHgwMzcyMTZhMCB9LAorICAgIHsgMHgwMDAwOTg0OCwgMHgwMDAwMTA2NiwgMHgwMDAwMTA2NiwgMHgwMDAwMTA1MywgMHgwMDAwMTA1MywgMHgwMDAwMTA1OSB9LAorICAgIHsgMHgwMDAwYTg0OCwgMHgwMDAwMTA2NiwgMHgwMDAwMTA2NiwgMHgwMDAwMTA1MywgMHgwMDAwMTA1MywgMHgwMDAwMTA1OSB9LAorICAgIHsgMHgwMDAwOTg1MCwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiB9LAorICAgIHsgMHgwMDAwOTg1OCwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSB9LAorICAgIHsgMHgwMDAwOTg1YywgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM3NjA1ZSwgMHgzMTM3NjA1ZSwgMHgzMTM5NjA1ZSB9LAorICAgIHsgMHgwMDAwOTg2MCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQyMCwgMHgwMDA1OGQyMCwgMHgwMDA1OGQxOCB9LAorICAgIHsgMHgwMDAwOTg2NCwgMHgwMDAwZmUwMCwgMHgwMDAwZmUwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCB9LAorICAgIHsgMHgwMDAwOTg2OCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCB9LAorICAgIHsgMHgwMDAwOTg2YywgMHgwNjkwMzA4MSwgMHgwNjkwMzA4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSB9LAorICAgIHsgMHgwMDAwOTkxNCwgMHgwMDAwMDdkMCwgMHgwMDAwMGZhMCwgMHgwMDAwMTEzMCwgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9LAorICAgIHsgMHgwMDAwOTkxOCwgMHgwMDAwMDAwYSwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAxNiB9LAorICAgIHsgMHgwMDAwOTkyNCwgMHhkMDBhODAwNywgMHhkMDBhODAwNywgMHhkMDBhODAwZCwgMHhkMDBhODAwZCwgMHhkMDBhODAwZCB9LAorICAgIHsgMHgwMDAwOTk0NCwgMHhmZmJjMTAxMCwgMHhmZmJjMTAxMCwgMHhmZmJjMTAyMCwgMHhmZmJjMTAyMCwgMHhmZmJjMTAxMCB9LAorICAgIHsgMHgwMDAwOTk2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTk2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTliOCwgMHgwMDAwNDIxYywgMHgwMDAwNDIxYywgMHgwMDAwNDIxYywgMHgwMDAwNDIxYywgMHgwMDAwNDIxYyB9LAorICAgIHsgMHgwMDAwOTliYywgMHgwMDAwMDYwMCwgMHgwMDAwMDYwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCB9LAorICAgIHsgMHgwMDAwOTljMCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCB9LAorICAgIHsgMHgwMDAwOTljNCwgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NyB9LAorICAgIHsgMHgwMDAwOTljOCwgMHg2YWY2NTMyZiwgMHg2YWY2NTMyZiwgMHg2YWY2NTMyZiwgMHg2YWY2NTMyZiwgMHg2YWY2NTMyZiB9LAorICAgIHsgMHgwMDAwOTljYywgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCB9LAorICAgIHsgMHgwMDAwOTlkMCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCB9LAorICAgIHsgMHgwMDAwOTlkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTlkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4NCwgMHgwMDA1ODA4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4OCwgMHgwMDA1ODA4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4YywgMHgwMDA1ODA4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwMCwgMHgwMDA1ODEwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwNCwgMHgwMDA1ODEwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwOCwgMHgwMDA1ODEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwYywgMHgwMDA1ODEwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExMCwgMHgwMDA1ODExMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExNCwgMHgwMDA1ODExNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4MCwgMHgwMDA1ODE4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4NCwgMHgwMDA1ODE4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4OCwgMHgwMDA1ODE4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4YywgMHgwMDA1ODE4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5MCwgMHgwMDA1ODE5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5NCwgMHgwMDA1ODE5NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhMCwgMHgwMDA1ODFhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIwYywgMHgwMDA1ODIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhOCwgMHgwMDA1ODFhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4NCwgMHgwMDA1ODI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4OCwgMHgwMDA1ODI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIyMCwgMHgwMDA1ODIyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI5MCwgMHgwMDA1ODI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwMCwgMHgwMDA1ODMwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwNCwgMHgwMDA1ODMwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwOCwgMHgwMDA1ODMwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwYywgMHgwMDA1ODMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4MCwgMHgwMDA1ODM4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4NCwgMHgwMDA1ODM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwMCwgMHgwMDA2ODcwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwNCwgMHgwMDA2ODcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwOCwgMHgwMDA2ODcwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwYywgMHgwMDA2ODcwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4MCwgMHgwMDA2ODc4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4NCwgMHgwMDA2ODc4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwNCwgMHgwMDA3OGIwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwYywgMHgwMDA3OGIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4MCwgMHgwMDA3OGI4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4NCwgMHgwMDA3OGI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4OCwgMHgwMDA3OGI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4YywgMHgwMDA3OGI4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI5MCwgMHgwMDA3OGI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4MCwgMHgwMDBjYWY4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4NCwgMHgwMDBjYWY4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4OCwgMHgwMDBjYWY4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4YywgMHgwMDBjYWY4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY5MCwgMHgwMDBjYWY5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMwYywgMHgwMDBkYjMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMxMCwgMHgwMDBkYjMxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4NCwgMHgwMDBkYjM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4OCwgMHgwMDBkYjM4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMyNCwgMHgwMDBkYjMyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcwNCwgMHgwMDBlYjcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhNCwgMHgwMDBlYjZhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhOCwgMHgwMDBlYjZhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxMCwgMHgwMDBlYjcxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxNCwgMHgwMDBlYjcxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyMCwgMHgwMDBlYjcyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyNCwgMHgwMDBlYjcyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyOCwgMHgwMDBlYjcyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyYywgMHgwMDBlYjcyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhMCwgMHgwMDBlYjdhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNCwgMHgwMDBlYjdhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOCwgMHgwMDBlYjdhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMCwgMHgwMDBlYjdiMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNCwgMHgwMDBlYjdiNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOCwgMHgwMDBlYjdiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNSwgMHgwMDBlYjdhNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOSwgMHgwMDBlYjdhOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhZCwgMHgwMDBlYjdhZCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMSwgMHgwMDBlYjdiMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNSwgMHgwMDBlYjdiNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOSwgMHgwMDBlYjdiOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNSwgMHgwMDBlYjdjNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjOSwgMHgwMDBlYjdjOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMSwgMHgwMDBlYjdkMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNSwgMHgwMDBlYjdkNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkOSwgMHgwMDBlYjdkOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNiwgMHgwMDBlYjdjNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYSwgMHgwMDBlYjdjYSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZSwgMHgwMDBlYjdjZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMiwgMHgwMDBlYjdkMiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNiwgMHgwMDBlYjdkNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjMywgMHgwMDBlYjdjMywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNywgMHgwMDBlYjdjNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYiwgMHgwMDBlYjdjYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZiwgMHgwMDBlYjdjZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNywgMHgwMDBlYjdkNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4NCwgMHgwMDA1ODA4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4OCwgMHgwMDA1ODA4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4YywgMHgwMDA1ODA4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwMCwgMHgwMDA1ODEwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwNCwgMHgwMDA1ODEwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwOCwgMHgwMDA1ODEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwYywgMHgwMDA1ODEwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExMCwgMHgwMDA1ODExMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExNCwgMHgwMDA1ODExNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4MCwgMHgwMDA1ODE4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4NCwgMHgwMDA1ODE4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4OCwgMHgwMDA1ODE4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4YywgMHgwMDA1ODE4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5MCwgMHgwMDA1ODE5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5NCwgMHgwMDA1ODE5NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhMCwgMHgwMDA1ODFhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIwYywgMHgwMDA1ODIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhOCwgMHgwMDA1ODFhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4NCwgMHgwMDA1ODI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4OCwgMHgwMDA1ODI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIyMCwgMHgwMDA1ODIyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI5MCwgMHgwMDA1ODI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwMCwgMHgwMDA1ODMwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwNCwgMHgwMDA1ODMwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwOCwgMHgwMDA1ODMwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwYywgMHgwMDA1ODMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4MCwgMHgwMDA1ODM4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4NCwgMHgwMDA1ODM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwMCwgMHgwMDA2ODcwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwNCwgMHgwMDA2ODcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwOCwgMHgwMDA2ODcwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwYywgMHgwMDA2ODcwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4MCwgMHgwMDA2ODc4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4NCwgMHgwMDA2ODc4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwNCwgMHgwMDA3OGIwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwYywgMHgwMDA3OGIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4MCwgMHgwMDA3OGI4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4NCwgMHgwMDA3OGI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4OCwgMHgwMDA3OGI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4YywgMHgwMDA3OGI4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI5MCwgMHgwMDA3OGI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4MCwgMHgwMDBjYWY4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4NCwgMHgwMDBjYWY4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4OCwgMHgwMDBjYWY4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4YywgMHgwMDBjYWY4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY5MCwgMHgwMDBjYWY5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMwYywgMHgwMDBkYjMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMxMCwgMHgwMDBkYjMxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4NCwgMHgwMDBkYjM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4OCwgMHgwMDBkYjM4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMyNCwgMHgwMDBkYjMyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcwNCwgMHgwMDBlYjcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhNCwgMHgwMDBlYjZhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhOCwgMHgwMDBlYjZhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxMCwgMHgwMDBlYjcxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxNCwgMHgwMDBlYjcxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyMCwgMHgwMDBlYjcyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyNCwgMHgwMDBlYjcyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyOCwgMHgwMDBlYjcyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyYywgMHgwMDBlYjcyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhMCwgMHgwMDBlYjdhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNCwgMHgwMDBlYjdhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOCwgMHgwMDBlYjdhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMCwgMHgwMDBlYjdiMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNCwgMHgwMDBlYjdiNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOCwgMHgwMDBlYjdiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNSwgMHgwMDBlYjdhNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOSwgMHgwMDBlYjdhOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhZCwgMHgwMDBlYjdhZCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMSwgMHgwMDBlYjdiMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNSwgMHgwMDBlYjdiNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOSwgMHgwMDBlYjdiOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNSwgMHgwMDBlYjdjNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjOSwgMHgwMDBlYjdjOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMSwgMHgwMDBlYjdkMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNSwgMHgwMDBlYjdkNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkOSwgMHgwMDBlYjdkOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNiwgMHgwMDBlYjdjNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYSwgMHgwMDBlYjdjYSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZSwgMHgwMDBlYjdjZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMiwgMHgwMDBlYjdkMiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNiwgMHgwMDBlYjdkNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjMywgMHgwMDBlYjdjMywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNywgMHgwMDBlYjdjNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYiwgMHgwMDBlYjdjYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZiwgMHgwMDBlYjdjZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNywgMHgwMDBlYjdkNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTIwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9LAorICAgIHsgMHgwMDAwYTIwYywgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCB9LAorICAgIHsgMHgwMDAwYjIwYywgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCB9LAorICAgIHsgMHgwMDAwYTIxYywgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9LAorICAgIHsgMHgwMDAwYTIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTI1MCwgMHgwMDA0ZjAwMCwgMHgwMDA0ZjAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCB9LAorICAgIHsgMHgwMDAwYTM1OCwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSB9LAorfTsKKworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODVDb21tb25fOTI4NV8xXzJbXVsyXSA9IHsKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAwMjAwNDUgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAwMDAwMDUgfSwKKyAgICB7IDB4MDAwMDAwNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDAwNDQsIDB4MDAwMDAwMDggfSwKKyAgICB7IDB4MDAwMDAwNDgsIDB4MDAwMDAwMDggfSwKKyAgICB7IDB4MDAwMDAwNGMsIDB4MDAwMDAwMTAgfSwKKyAgICB7IDB4MDAwMDAwNTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDAwNTQsIDB4MDAwMDAwMWYgfSwKKyAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwNDAsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNDQsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNDgsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNGMsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNTAsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNTQsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNTgsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNWMsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNjAsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNjQsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEyMzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0M2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0N2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDQwMzAsIDB4MDAwMDAwMDIgfSwKKyAgICB7IDB4MDAwMDQwM2MsIDB4MDAwMDAwMDIgfSwKKyAgICB7IDB4MDAwMDQwMjQsIDB4MDAwMDAwMWYgfSwKKyAgICB7IDB4MDAwMDQwNjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDQwNjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDcwMTAsIDB4MDAwMDAwMzEgfSwKKyAgICB7IDB4MDAwMDcwMzQsIDB4MDAwMDAwMDIgfSwKKyAgICB7IDB4MDAwMDcwMzgsIDB4MDAwMDA0YzIgfSwKKyAgICB7IDB4MDAwMDgwMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMTgsIDB4MDAwMDA3MDAgfSwKKyAgICB7IDB4MDAwMDgwMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNWMsIDB4MDAwZmM3OGYgfSwKKyAgICB7IDB4MDAwMDgwNjAsIDB4MDAwMDAwMGYgfSwKKyAgICB7IDB4MDAwMDgwNjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwYzAsIDB4MmE4MDAwMWEgfSwKKyAgICB7IDB4MDAwMDgwYzQsIDB4MDVkYzAxZTAgfSwKKyAgICB7IDB4MDAwMDgwYzgsIDB4MWY0MDI3MTAgfSwKKyAgICB7IDB4MDAwMDgwY2MsIDB4MDFmNDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZDAsIDB4MDAwMDFlMDAgfSwKKyAgICB7IDB4MDAwMDgwZDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZDgsIDB4MDA0MDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZTAsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgwZTQsIDB4MDAwMGZmZmYgfSwKKyAgICB7IDB4MDAwMDgwZTgsIDB4MDAzZjNmM2YgfSwKKyAgICB7IDB4MDAwMDgwZWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZmMsIDB4MDAwMjAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMDAsIDB4MDAwMjAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMDQsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDgxMDgsIDB4MDAwMDAwNTIgfSwKKyAgICB7IDB4MDAwMDgxMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMTAsIDB4MDAwMDAxNjggfSwKKyAgICB7IDB4MDAwMDgxMTgsIDB4MDAwMTAwYWEgfSwKKyAgICB7IDB4MDAwMDgxMWMsIDB4MDAwMDMyMTAgfSwKKyAgICB7IDB4MDAwMDgxMjAsIDB4MDhmMDQ4MTAgfSwKKyAgICB7IDB4MDAwMDgxMjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxNDQsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgxNjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxNmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxNzAsIDB4MzIxNDMzMjAgfSwKKyAgICB7IDB4MDAwMDgxNzQsIDB4ZmFhNGZhNTAgfSwKKyAgICB7IDB4MDAwMDgxNzgsIDB4MDAwMDAxMDAgfSwKKyAgICB7IDB4MDAwMDgxN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxYzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZDAsIDB4MDAwMDMyMGEgfSwKKyAgICB7IDB4MDAwMDgxZWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNDAsIDB4MDAxMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNDQsIDB4MDAxMGY0MDAgfSwKKyAgICB7IDB4MDAwMDgyNDgsIDB4MDAwMDAxMDAgfSwKKyAgICB7IDB4MDAwMDgyNGMsIDB4MDAwMWU4MDAgfSwKKyAgICB7IDB4MDAwMDgyNTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNWMsIDB4NDAwMDAwZmYgfSwKKyAgICB7IDB4MDAwMDgyNjAsIDB4MDAwODA5MjIgfSwKKyAgICB7IDB4MDAwMDgyNjQsIDB4ODhhMDAwMTAgfSwKKyAgICB7IDB4MDAwMDgyNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNzQsIDB4NDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNzgsIDB4MDAzZTQxODAgfSwKKyAgICB7IDB4MDAwMDgyN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyODQsIDB4MDAwMDAwMmMgfSwKKyAgICB7IDB4MDAwMDgyODgsIDB4MDAwMDAwMmMgfSwKKyAgICB7IDB4MDAwMDgyOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyOTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyOTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyOWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzMDAsIDB4MDAwMDAwNDAgfSwKKyAgICB7IDB4MDAwMDgzMTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzMjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzMmMsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDgzMzAsIDB4MDAwMDAzMDIgfSwKKyAgICB7IDB4MDAwMDgzMzQsIDB4MDAwMDBlMDAgfSwKKyAgICB7IDB4MDAwMDgzMzgsIDB4MDBmZjAwMDAgfSwKKyAgICB7IDB4MDAwMDgzM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzNDAsIDB4MDAwMTAzODAgfSwKKyAgICB7IDB4MDAwMDgzNDQsIDB4MDA0ODEwNDMgfSwKKyAgICB7IDB4MDAwMDk4MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4MGMsIDB4YWZlNjhlMzAgfSwKKyAgICB7IDB4MDAwMDk4MTAsIDB4ZmQxNGUwMDAgfSwKKyAgICB7IDB4MDAwMDk4MTQsIDB4OWMwYTlmNmIgfSwKKyAgICB7IDB4MDAwMDk4MWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4MmMsIDB4MDAwMGEwMDAgfSwKKyAgICB7IDB4MDAwMDk4MzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4M2MsIDB4MDAyMDA0MDAgfSwKKyAgICB7IDB4MDAwMDk4NGMsIDB4MDA0MDIzM2MgfSwKKyAgICB7IDB4MDAwMDk4NTQsIDB4MDAwMDAwNDQgfSwKKyAgICB7IDB4MDAwMDk5MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MTAsIDB4MDEwMDIzMTAgfSwKKyAgICB7IDB4MDAwMDk5MWMsIDB4MTAwMDBmZmYgfSwKKyAgICB7IDB4MDAwMDk5MjAsIDB4MDQ5MDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MjgsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDk5MmMsIDB4MDAwMDAwMDQgfSwKKyAgICB7IDB4MDAwMDk5MzQsIDB4MWUxZjIwMjIgfSwKKyAgICB7IDB4MDAwMDk5MzgsIDB4MGEwYjBjMGQgfSwKKyAgICB7IDB4MDAwMDk5M2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5NDAsIDB4MTQ3NTA2MDQgfSwKKyAgICB7IDB4MDAwMDk5NDgsIDB4OTI4MGMwMGEgfSwKKyAgICB7IDB4MDAwMDk5NGMsIDB4MDAwMjAwMjggfSwKKyAgICB7IDB4MDAwMDk5NTQsIDB4NWYzY2EzZGUgfSwKKyAgICB7IDB4MDAwMDk5NTgsIDB4MjEwOGVjZmYgfSwKKyAgICB7IDB4MDAwMDk5NjgsIDB4MDAwMDAzY2UgfSwKKyAgICB7IDB4MDAwMDk5NzAsIDB4MTkyYmI1MTQgfSwKKyAgICB7IDB4MDAwMDk5NzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5NzgsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDk5N2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5OGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5OTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5OTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5OTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5OWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5YTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5YTQsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDk5YTgsIDB4MjAxZmZmMDAgfSwKKyAgICB7IDB4MDAwMDk5YWMsIDB4MmRlZjA0MDAgfSwKKyAgICB7IDB4MDAwMDk5YjAsIDB4MDMwNTEwMDAgfSwKKyAgICB7IDB4MDAwMDk5YjQsIDB4MDAwMDA4MjAgfSwKKyAgICB7IDB4MDAwMDk5ZGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ZTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ZTQsIDB4YWFhYWFhYWEgfSwKKyAgICB7IDB4MDAwMDk5ZTgsIDB4M2M0NjY0NzggfSwKKyAgICB7IDB4MDAwMDk5ZWMsIDB4MGNjODBjYWEgfSwKKyAgICB7IDB4MDAwMDk5ZjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyMDgsIDB4ODAzZTY4YzggfSwKKyAgICB7IDB4MDAwMGEyMTAsIDB4NDA4MGEzMzMgfSwKKyAgICB7IDB4MDAwMGEyMTQsIDB4MDAyMDZjMTAgfSwKKyAgICB7IDB4MDAwMGEyMTgsIDB4MDA5YzQwNjAgfSwKKyAgICB7IDB4MDAwMGEyMjAsIDB4MDE4MzQwNjEgfSwKKyAgICB7IDB4MDAwMGEyMjQsIDB4MDAwMDA0MDAgfSwKKyAgICB7IDB4MDAwMGEyMjgsIDB4MDAwMDAzYjUgfSwKKyAgICB7IDB4MDAwMGEyMmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyMzQsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEyMzgsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEyNDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNDgsIDB4ZmZmZmZmZmMgfSwKKyAgICB7IDB4MDAwMGEyNGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNTgsIDB4MGNjYjUzODAgfSwKKyAgICB7IDB4MDAwMGEyNWMsIDB4MTUxNTE1MDEgfSwKKyAgICB7IDB4MDAwMGEyNjAsIDB4ZGZhOTBmMDEgfSwKKyAgICB7IDB4MDAwMGEyNjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNmMsIDB4MGViYWU5ZTYgfSwKKyAgICB7IDB4MDAwMGQyNzAsIDB4MGQ4MjA4MjAgfSwKKyAgICB7IDB4MDAwMGQzNWMsIDB4MDdmZmZmZWYgfSwKKyAgICB7IDB4MDAwMGQzNjAsIDB4MGZmZmZmZTcgfSwKKyAgICB7IDB4MDAwMGQzNjQsIDB4MTdmZmZmZTUgfSwKKyAgICB7IDB4MDAwMGQzNjgsIDB4MWZmZmZmZTQgfSwKKyAgICB7IDB4MDAwMGQzNmMsIDB4MzdmZmZmZTMgfSwKKyAgICB7IDB4MDAwMGQzNzAsIDB4M2ZmZmZmZTMgfSwKKyAgICB7IDB4MDAwMGQzNzQsIDB4NTdmZmZmZTMgfSwKKyAgICB7IDB4MDAwMGQzNzgsIDB4NWZmZmZmZTIgfSwKKyAgICB7IDB4MDAwMGQzN2MsIDB4N2ZmZmZmZTIgfSwKKyAgICB7IDB4MDAwMGQzODAsIDB4N2YzYzdiYmEgfSwKKyAgICB7IDB4MDAwMGQzODQsIDB4ZjMzMDdmZjAgfSwKKyAgICB7IDB4MDAwMGEzODgsIDB4MGMwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzOGMsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzOTAsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzOWMsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMGEzYTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzY2MsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzZDAsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzZDQsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzZTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzZTgsIDB4MThjNDM0MzMgfSwKKyAgICB7IDB4MDAwMGEzZWMsIDB4MDBmNzAwODEgfSwKKyAgICB7IDB4MDAwMDc4MDAsIDB4MDAxNDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MDQsIDB4MGU0NTQ4ZDggfSwKKyAgICB7IDB4MDAwMDc4MDgsIDB4NTQyMTQ1MTQgfSwKKyAgICB7IDB4MDAwMDc4MGMsIDB4MDIwMjU4MzAgfSwKKyAgICB7IDB4MDAwMDc4MTAsIDB4NzFjMGQzODggfSwKKyAgICB7IDB4MDAwMDc4MTQsIDB4OTI0OTM0YTggfSwKKyAgICB7IDB4MDAwMDc4MWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MjQsIDB4MDBkODZmZmYgfSwKKyAgICB7IDB4MDAwMDc4MjgsIDB4MjZkMjQ5MWIgfSwKKyAgICB7IDB4MDAwMDc4MmMsIDB4NmUzNmQ5N2IgfSwKKyAgICB7IDB4MDAwMDc4MzAsIDB4ZWRiNmQ5NmUgfSwKKyAgICB7IDB4MDAwMDc4MzQsIDB4NzE0MDAwODcgfSwKKyAgICB7IDB4MDAwMDc4M2MsIDB4MDAwMWZmZmUgfSwKKyAgICB7IDB4MDAwMDc4NDAsIDB4ZmZlYjFhMjAgfSwKKyAgICB7IDB4MDAwMDc4NDQsIDB4MDAwYzBkYjYgfSwKKyAgICB7IDB4MDAwMDc4NDgsIDB4NmRiNjFiNmYgfSwKKyAgICB7IDB4MDAwMDc4NGMsIDB4NmQ5YjY2ZGIgfSwKKyAgICB7IDB4MDAwMDc4NTAsIDB4NmQ4YzZkYmEgfSwKKyAgICB7IDB4MDAwMDc4NTQsIDB4MDAwNDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4NTgsIDB4ZGIwMDMwMTIgfSwKKyAgICB7IDB4MDAwMDc4NWMsIDB4MDQ5MjQ5MTQgfSwKKyAgICB7IDB4MDAwMDc4NjAsIDB4MjEwODQyMTAgfSwKKyAgICB7IDB4MDAwMDc4NjQsIDB4ZjdkN2ZmZGUgfSwKKyAgICB7IDB4MDAwMDc4NjgsIDB4YzIwMzQwODAgfSwKKyAgICB7IDB4MDAwMDc4NzAsIDB4MTAxNDJjMDAgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODVfMV8yW11bNl0gPSB7CisgICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KKyAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDYyMDAsIDB4MDAwMDYyMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDgyMDEsIDB4MDAwMDgyMDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGIyNDAsIDB4MDAwMGIyNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQyNDEsIDB4MDAwMGQyNDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY2MDAsIDB4MDAwMGY2MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTI4MDAsIDB4MDAwMTI4MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTY4MDIsIDB4MDAwMTY4MDIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWI4MDUsIDB4MDAwMWI4MDUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjFhODAsIDB4MDAwMjFhODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjhiMDAsIDB4MDAwMjhiMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmFiNDAsIDB4MDAwMmFiNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmNkODAsIDB4MDAwMmNkODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzNkODIsIDB4MDAwMzNkODIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzM2MsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDgsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNTAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNTQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMgfSwKKyAgICB7IDB4MDAwMDc4NmMsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUgfSwKKyAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAgfSwKKyAgICB7IDB4MDAwMGEyNzQsIDB4MGEyMmE2NTIsIDB4MGEyMmE2NTIsIDB4MGEyMTY2NTIsIDB4MGEyMTY2NTIsIDB4MGEyMmE2NTIgfSwKKyAgICB7IDB4MDAwMGEyNzgsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcgfSwKKyAgICB7IDB4MDAwMGEyN2MsIDB4MDUwMzgwZTcsIDB4MDUwMzgwZTcsIDB4MDUwMzgwZTcsIDB4MDUwMzgwZTcsIDB4MDUwMzgwZTcgfSwKKyAgICB7IDB4MDAwMGEzOTQsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcgfSwKKyAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcgfSwKKyAgICB7IDB4MDAwMGEzZGMsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcgfSwKKyAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfb3JpZ2luYWxfdHhfZ2Fpbl85Mjg1XzFfMltdWzZdID0geworICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCisgICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA5MjAwLCAweDAwMDA5MjAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMjA4LCAweDAwMDEwMjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE5NjA4LCAweDAwMDE5NjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIyNjE4LCAweDAwMDIyNjE4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJhNmM5LCAweDAwMDJhNmM5LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMxNzEwLCAweDAwMDMxNzEwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM1NzE4LCAweDAwMDM1NzE4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM4NzU4LCAweDAwMDM4NzU4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNjNzVhLCAweDAwMDNjNzVhLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQwNzVjLCAweDAwMDQwNzVjLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ0NzVlLCAweDAwMDQ0NzVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ2NzlmLCAweDAwMDQ2NzlmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ4N2RmLCAweDAwMDQ4N2RmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ4LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzRjLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzUwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzU0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA3ODM4LCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxIH0sCisgICAgeyAweDAwMDA3ODZjLCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0IH0sCisgICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0IH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMjFjNjUyLCAweDBhMjFjNjUyLCAweDBhMjFhNjUyLCAweDBhMjFhNjUyLCAweDBhMjJhNjUyIH0sCisgICAgeyAweDAwMDBhMjc4LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhMjdjLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljIH0sCisgICAgeyAweDAwMDBhMzk0LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhMzk4LCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCisgICAgeyAweDAwMDBhM2RjLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCit9OworCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NVBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg1XzFfMltdWzJdID0geworICAgIHsweDAwMDA0MDQwLCAgMHg5MjQ4ZmQwMCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgyNDkyNDkyNCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhhODAwMDAxOSB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgxMzE2MDgyMCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhlNTk4MDU2MCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhjMDFkY2ZmZCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgxYWFhYmU0MSB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhiZTEwNTU1NCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgwMDA0MzAwNyB9LAorICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODVQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4NV8xXzJbXVsyXSA9IHsKKyAgICB7MHgwMDAwNDA0MCwgIDB4OTI0OGZkMDAgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MjQ5MjQ5MjQgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4YTgwMDAwMTkgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MTMxNjA4MjAgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4ZTU5ODA1NjAgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4YzAxZGNmZmMgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MWFhYWJlNDEgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4YmUxMDU1NTQgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MDAwNDMwMDcgfSwKKyAgICB7MHgwMDAwNDA0NCwgIDB4MDAwMDAwMDAgfSwKK307CisKKy8qIEFSOTI4NyBSZXZpc2lvbiAxMCAqLworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODdNb2Rlc185Mjg3XzFfMFtdWzZdID0geworICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCisgICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCisgICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCisgICAgeyAweDAwMDAxMGIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0sCisgICAgeyAweDAwMDAxMGYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA4IH0sCisgICAgeyAweDAwMDA4MDE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwLCAweDA2ZTAwNmUwIH0sCisgICAgeyAweDAwMDA4MDFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDEyZTAwMDU3LCAweDEyZTAwMDJiLCAweDA5ODgwMDRmIH0sCisgICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODEwLCAweDA4ZjA0ODEwLCAweDA4ZjA0ODEwIH0sCisgICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjAwLCAweDAwMDAzMjAwLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhIH0sCisgICAgeyAweDAwMDA4MzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA2ODgwLCAweDAwMDAzNDQwLCAweDAwMDA2ODgwIH0sCisgICAgeyAweDAwMDA5ODA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCAweDAwMDAwMzAzIH0sCisgICAgeyAweDAwMDA5ODIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwIH0sCisgICAgeyAweDAwMDA5ODI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlIH0sCisgICAgeyAweDAwMDA5ODI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0sCisgICAgeyAweDAwMDA5ODM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0sCisgICAgeyAweDAwMDA5ODM4LCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0sCisgICAgeyAweDAwMDA5ODQwLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlIH0sCisgICAgeyAweDAwMDA5ODQ0LCAweDAzNzIwMDAwLCAweDAzNzIwMDAwLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwIH0sCisgICAgeyAweDAwMDA5ODUwLCAweDYwMDAwMDAwLCAweDYwMDAwMDAwLCAweDZkNDAwMGUyLCAweDZjNDAwMGUyLCAweDZjNDAwMGUyIH0sCisgICAgeyAweDAwMDA5ODU4LCAweDdjMDAwZDAwLCAweDdjMDAwZDAwLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlIH0sCisgICAgeyAweDAwMDA5ODVjLCAweDMxMDAwMDVlLCAweDMxMDAwMDVlLCAweDMxMzk2MDVlLCAweDMxMzk1ZDVlLCAweDMxMzk1ZDVlIH0sCisgICAgeyAweDAwMDA5ODYwLCAweDAwMDU4ZDAwLCAweDAwMDU4ZDAwLCAweDAwMDU4ZDIwLCAweDAwMDU4ZDIwLCAweDAwMDU4ZDE4IH0sCisgICAgeyAweDAwMDA5ODY0LCAweDAwMDAwZTAwLCAweDAwMDAwZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0sCisgICAgeyAweDAwMDA5ODY4LCAweDAwMDA0MGMwLCAweDAwMDA0MGMwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwIH0sCisgICAgeyAweDAwMDA5ODZjLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDA2OTAzODgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxIH0sCisgICAgeyAweDAwMDA5OTE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAxMTMwLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0sCisgICAgeyAweDAwMDA5OTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDE2LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2IH0sCisgICAgeyAweDAwMDA5OTI0LCAweGQwMGE4YTAxLCAweGQwMGE4YTAxLCAweGQwMGE4YTBkLCAweGQwMGE4YTBkLCAweGQwMGE4YTBkIH0sCisgICAgeyAweDAwMDA5OTQ0LCAweGVmYmMwMDAwLCAweGVmYmMwMDAwLCAweGVmYmMxMDEwLCAweGVmYmMxMDEwLCAweGVmYmMxMDEwIH0sCisgICAgeyAweDAwMDA5OTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0sCisgICAgeyAweDAwMDBhOTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0sCisgICAgeyAweDAwMDA5OTY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMjEwLCAweDAwMDAwMjEwIH0sCisgICAgeyAweDAwMDBjOTY4LCAweDAwMDAwMjAwLCAweDAwMDAwMjAwLCAweDAwMDAwM2NlLCAweDAwMDAwM2NlLCAweDAwMDAwM2NlIH0sCisgICAgeyAweDAwMDA5OWI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjIH0sCisgICAgeyAweDAwMDA5OWJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwIH0sCisgICAgeyAweDAwMDA5OWMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0IH0sCisgICAgeyAweDAwMDBhMjA0LCAweDAwMDAwNDQwLCAweDAwMDAwNDQwLCAweDAwMDAwNDQ0LCAweDAwMDAwNDQ0LCAweDAwMDAwNDQ0IH0sCisgICAgeyAweDAwMDBhMjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBiMjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMjFjLCAweDE4MDM4MDBhLCAweDE4MDM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0sCisgICAgeyAweDAwMDBhMjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwIH0sCisgICAgeyAweDAwMDBhMzU4LCAweDc5OTlhYTAyLCAweDc5OTlhYTAyLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlIH0sCisgICAgeyAweDAwMDBhM2Q4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCit9OworCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4N0NvbW1vbl85Mjg3XzFfMFtdWzJdID0geworICAgIHsgMHgwMDAwMDAwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDAyMDAxNSB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDAwMDAwNSB9LAorICAgIHsgMHgwMDAwMDA0MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDA0NCwgMHgwMDAwMDAwOCB9LAorICAgIHsgMHgwMDAwMDA0OCwgMHgwMDAwMDAwOCB9LAorICAgIHsgMHgwMDAwMDA0YywgMHgwMDAwMDAxMCB9LAorICAgIHsgMHgwMDAwMDA1MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDA1NCwgMHgwMDAwMDAxZiB9LAorICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgxOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgxYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTA0MCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA0NCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA0OCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA0YywgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA1MCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA1NCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA1OCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA1YywgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA2MCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA2NCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTIzMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTI3MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTAzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTA3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTBiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTBmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTEzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTE3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTFiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTFmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTIzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTI3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTJiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTJmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTMzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTM3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTNiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTNmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTQzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTQ3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTRiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTRmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTUzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTU3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTViOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTVmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTYzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTY3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTZiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTZmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTczOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTc3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTdiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTdmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTAzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTA3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTBiYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTBmYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTEzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTE3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTFiYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTFmYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTIzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTI3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTJiYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTJmYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTMzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTM3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTNiYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTNmYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTQzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTQ3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNDAzMCwgMHgwMDAwMDAwMiB9LAorICAgIHsgMHgwMDAwNDAzYywgMHgwMDAwMDAwMiB9LAorICAgIHsgMHgwMDAwNDAyNCwgMHgwMDAwMDAxZiB9LAorICAgIHsgMHgwMDAwNDA2MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNDA2NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNzAxMCwgMHgwMDAwMDAzMyB9LAorICAgIHsgMHgwMDAwNzAyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNzAzNCwgMHgwMDAwMDAwMiB9LAorICAgIHsgMHgwMDAwNzAzOCwgMHgwMDAwMDRjMiB9LAorICAgIHsgMHgwMDAwODAwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODAwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODAwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODAxOCwgMHgwMDAwMDcwMCB9LAorICAgIHsgMHgwMDAwODAyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODAzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODAzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODA0OCwgMHg0MDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODA1NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODA1OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODA1YywgMHgwMDBmYzc4ZiB9LAorICAgIHsgMHgwMDAwODA2MCwgMHgwMDAwMDAwZiB9LAorICAgIHsgMHgwMDAwODA2NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODA3MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODBjMCwgMHgyYTgwMDAxYSB9LAorICAgIHsgMHgwMDAwODBjNCwgMHgwNWRjMDFlMCB9LAorICAgIHsgMHgwMDAwODBjOCwgMHgxZjQwMjcxMCB9LAorICAgIHsgMHgwMDAwODBjYywgMHgwMWY0MDAwMCB9LAorICAgIHsgMHgwMDAwODBkMCwgMHgwMDAwMWUwMCB9LAorICAgIHsgMHgwMDAwODBkNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODBkOCwgMHgwMDQwMDAwMCB9LAorICAgIHsgMHgwMDAwODBlMCwgMHhmZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODBlNCwgMHgwMDAwZmZmZiB9LAorICAgIHsgMHgwMDAwODBlOCwgMHgwMDNmM2YzZiB9LAorICAgIHsgMHgwMDAwODBlYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODBmMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODBmNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODBmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODBmYywgMHgwMDAyMDAwMCB9LAorICAgIHsgMHgwMDAwODEwMCwgMHgwMDAyMDAwMCB9LAorICAgIHsgMHgwMDAwODEwNCwgMHgwMDAwMDAwMSB9LAorICAgIHsgMHgwMDAwODEwOCwgMHgwMDAwMDA1MiB9LAorICAgIHsgMHgwMDAwODEwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODExMCwgMHgwMDAwMDE2OCB9LAorICAgIHsgMHgwMDAwODExOCwgMHgwMDAxMDBhYSB9LAorICAgIHsgMHgwMDAwODExYywgMHgwMDAwMzIxMCB9LAorICAgIHsgMHgwMDAwODEyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODEyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODEyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODEzMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODEzNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODEzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODEzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODE0NCwgMHhmZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODE2OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODE2YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODE3MCwgMHgxODQ4NzMyMCB9LAorICAgIHsgMHgwMDAwODE3NCwgMHhmYWE0ZmE1MCB9LAorICAgIHsgMHgwMDAwODE3OCwgMHgwMDAwMDEwMCB9LAorICAgIHsgMHgwMDAwODE3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFjMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFjNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFkNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFlYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFmMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFmNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFmYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIxOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIxYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIzMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIzNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI0MCwgMHgwMDEwMDAwMCB9LAorICAgIHsgMHgwMDAwODI0NCwgMHgwMDEwZjQwMCB9LAorICAgIHsgMHgwMDAwODI0OCwgMHgwMDAwMDEwMCB9LAorICAgIHsgMHgwMDAwODI0YywgMHgwMDAxZTgwMCB9LAorICAgIHsgMHgwMDAwODI1MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI1NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI1OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI1YywgMHg0MDAwMDBmZiB9LAorICAgIHsgMHgwMDAwODI2MCwgMHgwMDA4MDkyMiB9LAorICAgIHsgMHgwMDAwODI2NCwgMHhhOGEwMDAxMCB9LAorICAgIHsgMHgwMDAwODI3MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI3NCwgMHg0MDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI3OCwgMHgwMDNlNDE4MCB9LAorICAgIHsgMHgwMDAwODI3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI4NCwgMHgwMDAwMDAyYyB9LAorICAgIHsgMHgwMDAwODI4OCwgMHgwMDAwMDAyYyB9LAorICAgIHsgMHgwMDAwODI4YywgMHgwMDAwMDBmZiB9LAorICAgIHsgMHgwMDAwODI5NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI5OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI5YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODMwMCwgMHgwMDAwMDA0MCB9LAorICAgIHsgMHgwMDAwODMxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODMyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODMyYywgMHgwMDAwMDAwNyB9LAorICAgIHsgMHgwMDAwODMzMCwgMHgwMDAwMDMwMiB9LAorICAgIHsgMHgwMDAwODMzNCwgMHgwMDAwMGUwMCB9LAorICAgIHsgMHgwMDAwODMzOCwgMHgwMGZmMDAwMCB9LAorICAgIHsgMHgwMDAwODMzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODM0MCwgMHgwMDAxMDdmZiB9LAorICAgIHsgMHgwMDAwODM0NCwgMHgwMWM4MTA0MyB9LAorICAgIHsgMHgwMDAwODM2MCwgMHhmZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODM2NCwgMHhmZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODM2OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODM3MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODM3NCwgMHgwMDAwMDBmZiB9LAorICAgIHsgMHgwMDAwODM3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODM3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODM4MCwgMHhmZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODM4NCwgMHhmZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODM5MCwgMHgwZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODM5NCwgMHgwZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODM5OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODM5YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODNhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTgwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTgwYywgMHhhZmU2OGUzMCB9LAorICAgIHsgMHgwMDAwOTgxMCwgMHhmZDE0ZTAwMCB9LAorICAgIHsgMHgwMDAwOTgxNCwgMHg5YzBhOWY2YiB9LAorICAgIHsgMHgwMDAwOTgxYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTgyYywgMHgwMDAwYTAwMCB9LAorICAgIHsgMHgwMDAwOTgzMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTgzYywgMHgwMDIwMDQwMCB9LAorICAgIHsgMHgwMDAwOTg0YywgMHgwMDQwMjMzYyB9LAorICAgIHsgMHgwMDAwYTg0YywgMHgwMDQwMjMzYyB9LAorICAgIHsgMHgwMDAwOTg1NCwgMHgwMDAwMDA0NCB9LAorICAgIHsgMHgwMDAwOTkwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTkwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTkwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTkwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTkxMCwgMHgxMDAwMjMxMCB9LAorICAgIHsgMHgwMDAwOTkxYywgMHgxMDAwMGZmZiB9LAorICAgIHsgMHgwMDAwOTkyMCwgMHgwNDkwMDAwMCB9LAorICAgIHsgMHgwMDAwYTkyMCwgMHgwNDkwMDAwMCB9LAorICAgIHsgMHgwMDAwOTkyOCwgMHgwMDAwMDAwMSB9LAorICAgIHsgMHgwMDAwOTkyYywgMHgwMDAwMDAwNCB9LAorICAgIHsgMHgwMDAwOTkzMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTkzMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTkzNCwgMHgxZTFmMjAyMiB9LAorICAgIHsgMHgwMDAwOTkzOCwgMHgwYTBiMGMwZCB9LAorICAgIHsgMHgwMDAwOTkzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTk0OCwgMHg5MjgwYzAwYSB9LAorICAgIHsgMHgwMDAwOTk0YywgMHgwMDAyMDAyOCB9LAorICAgIHsgMHgwMDAwOTk1NCwgMHg1ZjNjYTNkZSB9LAorICAgIHsgMHgwMDAwOTk1OCwgMHgwMTA4ZWNmZiB9LAorICAgIHsgMHgwMDAwOTk0MCwgMHgxNDc1MDYwNCB9LAorICAgIHsgMHgwMDAwYzk1YywgMHgwMDRiNmE4ZSB9LAorICAgIHsgMHgwMDAwOTk3MCwgMHg5OTBiYjUxNSB9LAorICAgIHsgMHgwMDAwOTk3NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTk3OCwgMHgwMDAwMDAwMSB9LAorICAgIHsgMHgwMDAwOTk3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTlhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTlhNCwgMHgwMDAwMDAwMSB9LAorICAgIHsgMHgwMDAwOTlhOCwgMHgyMDFmZmYwMCB9LAorICAgIHsgMHgwMDAwOTlhYywgMHgwYzZmMDAwMCB9LAorICAgIHsgMHgwMDAwOTliMCwgMHgwMzA1MTAwMCB9LAorICAgIHsgMHgwMDAwOTliNCwgMHgwMDAwMDgyMCB9LAorICAgIHsgMHgwMDAwOTljNCwgMHgwNjMzNmY3NyB9LAorICAgIHsgMHgwMDAwOTljOCwgMHg2YWY2NTMyOSB9LAorICAgIHsgMHgwMDAwOTljYywgMHgwOGYxODZjOCB9LAorICAgIHsgMHgwMDAwOTlkMCwgMHgwMDA0NjM4NCB9LAorICAgIHsgMHgwMDAwOTlkYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTllMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTllNCwgMHhhYWFhYWFhYSB9LAorICAgIHsgMHgwMDAwOTllOCwgMHgzYzQ2NjQ3OCB9LAorICAgIHsgMHgwMDAwOTllYywgMHgwY2M4MGNhYSB9LAorICAgIHsgMHgwMDAwOTlmMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTlmYywgMHgwMDAwMTA0MiB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMGZmZmVmZiB9LAorICAgIHsgMHgwMDAwYTFmOCwgMHgwMGY1ZjlmZiB9LAorICAgIHsgMHgwMDAwYTFmYywgMHhiNzlmNjQyNyB9LAorICAgIHsgMHgwMDAwYTIwOCwgMHg4MDNlNDc4OCB9LAorICAgIHsgMHgwMDAwYTIxMCwgMHg0MDgwYTMzMyB9LAorICAgIHsgMHgwMDAwYTIxNCwgMHg0MDIwNmMxMCB9LAorICAgIHsgMHgwMDAwYTIxOCwgMHgwMDljNDA2MCB9LAorICAgIHsgMHgwMDAwYTIyMCwgMHgwMTgzNDA2MSB9LAorICAgIHsgMHgwMDAwYTIyNCwgMHgwMDAwMDQwMCB9LAorICAgIHsgMHgwMDAwYTIyOCwgMHgwMDAwMDNiNSB9LAorICAgIHsgMHgwMDAwYTIyYywgMHgyMzNmNzE4MCB9LAorICAgIHsgMHgwMDAwYTIzNCwgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTIzOCwgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTIzYywgMHgxM2M4ODlhZiB9LAorICAgIHsgMHgwMDAwYTI0MCwgMHgzODQ5MGEyMCB9LAorICAgIHsgMHgwMDAwYTI0NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTI0OCwgMHhmZmZmZmZmYyB9LAorICAgIHsgMHgwMDAwYTI0YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTI1NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTI1OCwgMHgwY2RiZDM4MCB9LAorICAgIHsgMHgwMDAwYTI1YywgMHgwZjBmMGYwMSB9LAorICAgIHsgMHgwMDAwYTI2MCwgMHhkZmE5MWYwMSB9LAorICAgIHsgMHgwMDAwYTI2NCwgMHgwMDQxOGExMSB9LAorICAgIHsgMHgwMDAwYjI2NCwgMHgwMDQxOGExMSB9LAorICAgIHsgMHgwMDAwYTI2OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTI2YywgMHgwZTc5ZTVjNiB9LAorICAgIHsgMHgwMDAwYjI2YywgMHgwZTc5ZTVjNiB9LAorICAgIHsgMHgwMDAwZDI3MCwgMHgwMDgyMDgyMCB9LAorICAgIHsgMHgwMDAwYTI3OCwgMHgxY2U3MzljZSB9LAorICAgIHsgMHgwMDAwYTI3YywgMHgwNTA3MDFjZSB9LAorICAgIHsgMHgwMDAwZDM1YywgMHgwN2ZmZmZlZiB9LAorICAgIHsgMHgwMDAwZDM2MCwgMHgwZmZmZmZlNyB9LAorICAgIHsgMHgwMDAwZDM2NCwgMHgxN2ZmZmZlNSB9LAorICAgIHsgMHgwMDAwZDM2OCwgMHgxZmZmZmZlNCB9LAorICAgIHsgMHgwMDAwZDM2YywgMHgzN2ZmZmZlMyB9LAorICAgIHsgMHgwMDAwZDM3MCwgMHgzZmZmZmZlMyB9LAorICAgIHsgMHgwMDAwZDM3NCwgMHg1N2ZmZmZlMyB9LAorICAgIHsgMHgwMDAwZDM3OCwgMHg1ZmZmZmZlMiB9LAorICAgIHsgMHgwMDAwZDM3YywgMHg3ZmZmZmZlMiB9LAorICAgIHsgMHgwMDAwZDM4MCwgMHg3ZjNjN2JiYSB9LAorICAgIHsgMHgwMDAwZDM4NCwgMHhmMzMwN2ZmMCB9LAorICAgIHsgMHgwMDAwYTM4OCwgMHgwYzAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM4YywgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTM5MCwgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTM5NCwgMHgxY2U3MzljZSB9LAorICAgIHsgMHgwMDAwYTM5OCwgMHgwMDAwMDFjZSB9LAorICAgIHsgMHgwMDAwYjM5OCwgMHgwMDAwMDFjZSB9LAorICAgIHsgMHgwMDAwYTM5YywgMHgwMDAwMDAwMSB9LAorICAgIHsgMHgwMDAwYTNjOCwgMHgwMDAwMDI0NiB9LAorICAgIHsgMHgwMDAwYTNjYywgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTNkMCwgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTNkNCwgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTNkYywgMHgxY2U3MzljZSB9LAorICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSB9LAorICAgIHsgMHgwMDAwYTNlNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTNlOCwgMHgxOGM0MzQzMyB9LAorICAgIHsgMHgwMDAwYTNlYywgMHgwMGY3MDA4MSB9LAorICAgIHsgMHgwMDAwYTNmMCwgMHgwMTAzNmExZSB9LAorICAgIHsgMHgwMDAwYTNmNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYjNmNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTdkOCwgMHgwMDAwMDAwMSB9LAorICAgIHsgMHgwMDAwNzgwMCwgMHgwMDAwMDgwMCB9LAorICAgIHsgMHgwMDAwNzgwNCwgMHg2YzM1ZmZiMCB9LAorICAgIHsgMHgwMDAwNzgwOCwgMHg2ZGI2YzAwMCB9LAorICAgIHsgMHgwMDAwNzgwYywgMHg2ZGI2Y2IzMCB9LAorICAgIHsgMHgwMDAwNzgxMCwgMHg2ZGI2Y2I2YyB9LAorICAgIHsgMHgwMDAwNzgxNCwgMHgwNTAxZTIwMCB9LAorICAgIHsgMHgwMDAwNzgxOCwgMHgwMDk0MTI4ZCB9LAorICAgIHsgMHgwMDAwNzgxYywgMHg5NzZlZTM5MiB9LAorICAgIHsgMHgwMDAwNzgyMCwgMHhmNzVmZjZmYyB9LAorICAgIHsgMHgwMDAwNzgyNCwgMHgwMDA0MDAwMCB9LAorICAgIHsgMHgwMDAwNzgyOCwgMHhkYjAwMzAxMiB9LAorICAgIHsgMHgwMDAwNzgyYywgMHgwNDkyNDkxNCB9LAorICAgIHsgMHgwMDAwNzgzMCwgMHgyMTA4NDIxMCB9LAorICAgIHsgMHgwMDAwNzgzNCwgMHgwMDE0MDAwMCB9LAorICAgIHsgMHgwMDAwNzgzOCwgMHgwZTQ1NDhkOCB9LAorICAgIHsgMHgwMDAwNzgzYywgMHg1NDIxNDUxNCB9LAorICAgIHsgMHgwMDAwNzg0MCwgMHgwMjAyNTgyMCB9LAorICAgIHsgMHgwMDAwNzg0NCwgMHg3MWMwZDM4OCB9LAorICAgIHsgMHgwMDAwNzg0OCwgMHg5MzQ5MzRhOCB9LAorICAgIHsgMHgwMDAwNzg1MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNzg1NCwgMHgwMDAwMDgwMCB9LAorICAgIHsgMHgwMDAwNzg1OCwgMHg2YzM1ZmZiMCB9LAorICAgIHsgMHgwMDAwNzg1YywgMHg2ZGI2YzAwMCB9LAorICAgIHsgMHgwMDAwNzg2MCwgMHg2ZGI2Y2IyYyB9LAorICAgIHsgMHgwMDAwNzg2NCwgMHg2ZGI2Y2I2YyB9LAorICAgIHsgMHgwMDAwNzg2OCwgMHgwNTAxZTIwMCB9LAorICAgIHsgMHgwMDAwNzg2YywgMHgwMDk0MTI4ZCB9LAorICAgIHsgMHgwMDAwNzg3MCwgMHg5NzZlZTM5MiB9LAorICAgIHsgMHgwMDAwNzg3NCwgMHhmNzVmZjZmYyB9LAorICAgIHsgMHgwMDAwNzg3OCwgMHgwMDA0MDAwMCB9LAorICAgIHsgMHgwMDAwNzg3YywgMHhkYjAwMzAxMiB9LAorICAgIHsgMHgwMDAwNzg4MCwgMHgwNDkyNDkxNCB9LAorICAgIHsgMHgwMDAwNzg4NCwgMHgyMTA4NDIxMCB9LAorICAgIHsgMHgwMDAwNzg4OCwgMHgwMDFiNmRiMCB9LAorICAgIHsgMHgwMDAwNzg4YywgMHgwMDM3NmI2MyB9LAorICAgIHsgMHgwMDAwNzg5MCwgMHgwNmRiNmRiNiB9LAorICAgIHsgMHgwMDAwNzg5NCwgMHgwMDZkODAwMCB9LAorICAgIHsgMHgwMDAwNzg5OCwgMHg0ODEwMDAwMCB9LAorICAgIHsgMHgwMDAwNzg5YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNzhhMCwgMHgwODAwMDAwMCB9LAorICAgIHsgMHgwMDAwNzhhNCwgMHgwMDA3ZmZkOCB9LAorICAgIHsgMHgwMDAwNzhhOCwgMHgwMDA3ZmZkOCB9LAorICAgIHsgMHgwMDAwNzhhYywgMHgwMDFjMDAyMCB9LAorICAgIHsgMHgwMDAwNzhiMCwgMHgwMDA2MTFlYiB9LAorICAgIHsgMHgwMDAwNzhiNCwgMHg0MDAwODA4MCB9LAorICAgIHsgMHgwMDAwNzhiOCwgMHgyYTg1MDE2MCB9LAorfTsKKworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODdNb2Rlc190eF9nYWluXzkyODdfMV8wW11bNl0gPSB7CisgICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KKyAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDQwMDIsIDB4MDAwMDQwMDIsIDB4MDAwMDQwMDIgfSwKKyAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDgwMDQsIDB4MDAwMDgwMDQsIDB4MDAwMDgwMDQgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGMwMGEsIDB4MDAwMGMwMGEsIDB4MDAwMGMwMGEgfSwKKyAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMGMsIDB4MDAwMTAwMGMsIDB4MDAwMTAwMGMgfSwKKyAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTQyMGIsIDB4MDAwMTQyMGIsIDB4MDAwMTQyMGIgfSwKKyAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTgyNGEsIDB4MDAwMTgyNGEsIDB4MDAwMTgyNGEgfSwKKyAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWM0NGEsIDB4MDAwMWM0NGEsIDB4MDAwMWM0NGEgfSwKKyAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjA2NGEsIDB4MDAwMjA2NGEsIDB4MDAwMjA2NGEgfSwKKyAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjQ4NGEsIDB4MDAwMjQ4NGEsIDB4MDAwMjQ4NGEgfSwKKyAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjhhNGEsIDB4MDAwMjhhNGEsIDB4MDAwMjhhNGEgfSwKKyAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmNjNGEsIDB4MDAwMmNjNGEsIDB4MDAwMmNjNGEgfSwKKyAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzBlNGEsIDB4MDAwMzBlNGEsIDB4MDAwMzBlNGEgfSwKKyAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzRlOGEsIDB4MDAwMzRlOGEsIDB4MDAwMzRlOGEgfSwKKyAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzhlOGMsIDB4MDAwMzhlOGMsIDB4MDAwMzhlOGMgfSwKKyAgICB7IDB4MDAwMGEzM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2NlY2MsIDB4MDAwM2NlY2MsIDB4MDAwM2NlY2MgfSwKKyAgICB7IDB4MDAwMGEzNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDBlZDQsIDB4MDAwNDBlZDQsIDB4MDAwNDBlZDQgfSwKKyAgICB7IDB4MDAwMGEzNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDRlZGMsIDB4MDAwNDRlZGMsIDB4MDAwNDRlZGMgfSwKKyAgICB7IDB4MDAwMGEzNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDhlZGUsIDB4MDAwNDhlZGUsIDB4MDAwNDhlZGUgfSwKKyAgICB7IDB4MDAwMGEzNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNGNmMWUsIDB4MDAwNGNmMWUsIDB4MDAwNGNmMWUgfSwKKyAgICB7IDB4MDAwMGEzNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTBmNWUsIDB4MDAwNTBmNWUsIDB4MDAwNTBmNWUgfSwKKyAgICB7IDB4MDAwMGEzNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTRmOWUsIDB4MDAwNTRmOWUsIDB4MDAwNTRmOWUgfSwKKyAgICB7IDB4MDAwMGE3ODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSwKKyAgICB7IDB4MDAwMGE3ODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDQwNjIsIDB4MDAwMDQwNjIsIDB4MDAwMDQwNjIgfSwKKyAgICB7IDB4MDAwMGE3ODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDgwNjQsIDB4MDAwMDgwNjQsIDB4MDAwMDgwNjQgfSwKKyAgICB7IDB4MDAwMGE3OGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGMwYTQsIDB4MDAwMGMwYTQsIDB4MDAwMGMwYTQgfSwKKyAgICB7IDB4MDAwMGE3OTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwYjAsIDB4MDAwMTAwYjAsIDB4MDAwMTAwYjAgfSwKKyAgICB7IDB4MDAwMGE3OTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTQwYjIsIDB4MDAwMTQwYjIsIDB4MDAwMTQwYjIgfSwKKyAgICB7IDB4MDAwMGE3OTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTgwYjQsIDB4MDAwMTgwYjQsIDB4MDAwMTgwYjQgfSwKKyAgICB7IDB4MDAwMGE3OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWMwZjQsIDB4MDAwMWMwZjQsIDB4MDAwMWMwZjQgfSwKKyAgICB7IDB4MDAwMGE3YTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjAxMzQsIDB4MDAwMjAxMzQsIDB4MDAwMjAxMzQgfSwKKyAgICB7IDB4MDAwMGE3YTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjQwZmUsIDB4MDAwMjQwZmUsIDB4MDAwMjQwZmUgfSwKKyAgICB7IDB4MDAwMGE3YTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjgxM2UsIDB4MDAwMjgxM2UsIDB4MDAwMjgxM2UgfSwKKyAgICB7IDB4MDAwMGE3YWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmMxN2UsIDB4MDAwMmMxN2UsIDB4MDAwMmMxN2UgfSwKKyAgICB7IDB4MDAwMGE3YjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzAxYmUsIDB4MDAwMzAxYmUsIDB4MDAwMzAxYmUgfSwKKyAgICB7IDB4MDAwMGE3YjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3YjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3YmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3YzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3YzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3YzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3Y2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3ZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGEyNzQsIDB4MGExODAwMDAsIDB4MGExODAwMDAsIDB4MGExYWEwMDAsIDB4MGExYWEwMDAsIDB4MGExYWEwMDAgfSwKK307CisKKworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODdNb2Rlc19yeF9nYWluXzkyODdfMV8wW11bNl0gPSB7CisgICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KKyAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjAsIDB4MDAwMGExMjAsIDB4MDAwMGExMjAgfSwKKyAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjQsIDB4MDAwMGExMjQsIDB4MDAwMGExMjQgfSwKKyAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjgsIDB4MDAwMGExMjgsIDB4MDAwMGExMjggfSwKKyAgICB7IDB4MDAwMDlhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMmMsIDB4MDAwMGExMmMsIDB4MDAwMGExMmMgfSwKKyAgICB7IDB4MDAwMDlhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMzAsIDB4MDAwMGExMzAsIDB4MDAwMGExMzAgfSwKKyAgICB7IDB4MDAwMDlhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExOTQsIDB4MDAwMGExOTQsIDB4MDAwMGExOTQgfSwKKyAgICB7IDB4MDAwMDlhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExOTgsIDB4MDAwMGExOTgsIDB4MDAwMGExOTggfSwKKyAgICB7IDB4MDAwMDlhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyMGMsIDB4MDAwMGEyMGMsIDB4MDAwMGEyMGMgfSwKKyAgICB7IDB4MDAwMDlhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyMTAsIDB4MDAwMGEyMTAsIDB4MDAwMGEyMTAgfSwKKyAgICB7IDB4MDAwMDlhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyODQsIDB4MDAwMGEyODQsIDB4MDAwMGEyODQgfSwKKyAgICB7IDB4MDAwMDlhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyODgsIDB4MDAwMGEyODgsIDB4MDAwMGEyODggfSwKKyAgICB7IDB4MDAwMDlhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOGMsIDB4MDAwMGEyOGMsIDB4MDAwMGEyOGMgfSwKKyAgICB7IDB4MDAwMDlhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOTAsIDB4MDAwMGEyOTAsIDB4MDAwMGEyOTAgfSwKKyAgICB7IDB4MDAwMDlhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOTQsIDB4MDAwMGEyOTQsIDB4MDAwMGEyOTQgfSwKKyAgICB7IDB4MDAwMDlhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTAsIDB4MDAwMGEyYTAsIDB4MDAwMGEyYTAgfSwKKyAgICB7IDB4MDAwMDlhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTQsIDB4MDAwMGEyYTQsIDB4MDAwMGEyYTQgfSwKKyAgICB7IDB4MDAwMDlhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTgsIDB4MDAwMGEyYTgsIDB4MDAwMGEyYTggfSwKKyAgICB7IDB4MDAwMDlhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYWMsIDB4MDAwMGEyYWMsIDB4MDAwMGEyYWMgfSwKKyAgICB7IDB4MDAwMDlhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjAsIDB4MDAwMGEyYjAsIDB4MDAwMGEyYjAgfSwKKyAgICB7IDB4MDAwMDlhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjQsIDB4MDAwMGEyYjQsIDB4MDAwMGEyYjQgfSwKKyAgICB7IDB4MDAwMDlhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjgsIDB4MDAwMGEyYjgsIDB4MDAwMGEyYjggfSwKKyAgICB7IDB4MDAwMDlhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYzQsIDB4MDAwMGEyYzQsIDB4MDAwMGEyYzQgfSwKKyAgICB7IDB4MDAwMDlhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MDgsIDB4MDAwMGE3MDgsIDB4MDAwMGE3MDggfSwKKyAgICB7IDB4MDAwMDlhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MGMsIDB4MDAwMGE3MGMsIDB4MDAwMGE3MGMgfSwKKyAgICB7IDB4MDAwMDlhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MTAsIDB4MDAwMGE3MTAsIDB4MDAwMGE3MTAgfSwKKyAgICB7IDB4MDAwMDlhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMDQsIDB4MDAwMGFiMDQsIDB4MDAwMGFiMDQgfSwKKyAgICB7IDB4MDAwMDlhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMDgsIDB4MDAwMGFiMDgsIDB4MDAwMGFiMDggfSwKKyAgICB7IDB4MDAwMDlhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMGMsIDB4MDAwMGFiMGMsIDB4MDAwMGFiMGMgfSwKKyAgICB7IDB4MDAwMDlhNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTAsIDB4MDAwMGFiMTAsIDB4MDAwMGFiMTAgfSwKKyAgICB7IDB4MDAwMDlhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTQsIDB4MDAwMGFiMTQsIDB4MDAwMGFiMTQgfSwKKyAgICB7IDB4MDAwMDlhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTgsIDB4MDAwMGFiMTgsIDB4MDAwMGFiMTggfSwKKyAgICB7IDB4MDAwMDlhN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOGMsIDB4MDAwMGFiOGMsIDB4MDAwMGFiOGMgfSwKKyAgICB7IDB4MDAwMDlhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTAsIDB4MDAwMGFiOTAsIDB4MDAwMGFiOTAgfSwKKyAgICB7IDB4MDAwMDlhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTQgfSwKKyAgICB7IDB4MDAwMDlhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTgsIDB4MDAwMGFiOTgsIDB4MDAwMGFiOTggfSwKKyAgICB7IDB4MDAwMDlhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiYTQsIDB4MDAwMGFiYTQsIDB4MDAwMGFiYTQgfSwKKyAgICB7IDB4MDAwMDlhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiYTgsIDB4MDAwMGFiYTgsIDB4MDAwMGFiYTggfSwKKyAgICB7IDB4MDAwMDlhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMDQsIDB4MDAwMGNiMDQsIDB4MDAwMGNiMDQgfSwKKyAgICB7IDB4MDAwMDlhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMDgsIDB4MDAwMGNiMDgsIDB4MDAwMGNiMDggfSwKKyAgICB7IDB4MDAwMDlhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMGMsIDB4MDAwMGNiMGMsIDB4MDAwMGNiMGMgfSwKKyAgICB7IDB4MDAwMDlhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTAsIDB4MDAwMGNiMTAsIDB4MDAwMGNiMTAgfSwKKyAgICB7IDB4MDAwMDlhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTQsIDB4MDAwMGNiMTQsIDB4MDAwMGNiMTQgfSwKKyAgICB7IDB4MDAwMDlhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTgsIDB4MDAwMGNiMTgsIDB4MDAwMGNiMTggfSwKKyAgICB7IDB4MDAwMDlhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiOGMsIDB4MDAwMGNiOGMsIDB4MDAwMGNiOGMgfSwKKyAgICB7IDB4MDAwMDlhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiOTAsIDB4MDAwMGNiOTAsIDB4MDAwMGNiOTAgfSwKKyAgICB7IDB4MDAwMDlhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMTgsIDB4MDAwMGNmMTgsIDB4MDAwMGNmMTggfSwKKyAgICB7IDB4MDAwMDlhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMjQsIDB4MDAwMGNmMjQsIDB4MDAwMGNmMjQgfSwKKyAgICB7IDB4MDAwMDlhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMjgsIDB4MDAwMGNmMjgsIDB4MDAwMGNmMjggfSwKKyAgICB7IDB4MDAwMDlhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzMTQsIDB4MDAwMGQzMTQsIDB4MDAwMGQzMTQgfSwKKyAgICB7IDB4MDAwMDlhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzMTgsIDB4MDAwMGQzMTgsIDB4MDAwMGQzMTggfSwKKyAgICB7IDB4MDAwMDlhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOGMsIDB4MDAwMGQzOGMsIDB4MDAwMGQzOGMgfSwKKyAgICB7IDB4MDAwMDlhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTAsIDB4MDAwMGQzOTAsIDB4MDAwMGQzOTAgfSwKKyAgICB7IDB4MDAwMDlhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTQsIDB4MDAwMGQzOTQsIDB4MDAwMGQzOTQgfSwKKyAgICB7IDB4MDAwMDlhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTgsIDB4MDAwMGQzOTgsIDB4MDAwMGQzOTggfSwKKyAgICB7IDB4MDAwMDlhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYTQsIDB4MDAwMGQzYTQsIDB4MDAwMGQzYTQgfSwKKyAgICB7IDB4MDAwMDlhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYTgsIDB4MDAwMGQzYTgsIDB4MDAwMGQzYTggfSwKKyAgICB7IDB4MDAwMDlhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYWMsIDB4MDAwMGQzYWMsIDB4MDAwMGQzYWMgfSwKKyAgICB7IDB4MDAwMDlhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYjAsIDB4MDAwMGQzYjAsIDB4MDAwMGQzYjAgfSwKKyAgICB7IDB4MDAwMDlhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODAsIDB4MDAwMGYzODAsIDB4MDAwMGYzODAgfSwKKyAgICB7IDB4MDAwMDlhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODQsIDB4MDAwMGYzODQsIDB4MDAwMGYzODQgfSwKKyAgICB7IDB4MDAwMDlhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODgsIDB4MDAwMGYzODgsIDB4MDAwMGYzODggfSwKKyAgICB7IDB4MDAwMDlhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTAsIDB4MDAwMGY3MTAsIDB4MDAwMGY3MTAgfSwKKyAgICB7IDB4MDAwMDlhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTQsIDB4MDAwMGY3MTQsIDB4MDAwMGY3MTQgfSwKKyAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTgsIDB4MDAwMGY3MTgsIDB4MDAwMGY3MTggfSwKKyAgICB7IDB4MDAwMDliMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTAsIDB4MDAwMGZiMTAsIDB4MDAwMGZiMTAgfSwKKyAgICB7IDB4MDAwMDliMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTQsIDB4MDAwMGZiMTQsIDB4MDAwMGZiMTQgfSwKKyAgICB7IDB4MDAwMDliMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTgsIDB4MDAwMGZiMTgsIDB4MDAwMGZiMTggfSwKKyAgICB7IDB4MDAwMDliMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOGMsIDB4MDAwMGZiOGMsIDB4MDAwMGZiOGMgfSwKKyAgICB7IDB4MDAwMDliMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOTAsIDB4MDAwMGZiOTAsIDB4MDAwMGZiOTAgfSwKKyAgICB7IDB4MDAwMDliMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOTQsIDB4MDAwMGZiOTQsIDB4MDAwMGZiOTQgfSwKKyAgICB7IDB4MDAwMDliMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOGMsIDB4MDAwMGZmOGMsIDB4MDAwMGZmOGMgfSwKKyAgICB7IDB4MDAwMDliMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOTAsIDB4MDAwMGZmOTAsIDB4MDAwMGZmOTAgfSwKKyAgICB7IDB4MDAwMDliMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOTQsIDB4MDAwMGZmOTQsIDB4MDAwMGZmOTQgfSwKKyAgICB7IDB4MDAwMDliMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTAsIDB4MDAwMGZmYTAsIDB4MDAwMGZmYTAgfSwKKyAgICB7IDB4MDAwMDliMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTQsIDB4MDAwMGZmYTQsIDB4MDAwMGZmYTQgfSwKKyAgICB7IDB4MDAwMDliMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTgsIDB4MDAwMGZmYTgsIDB4MDAwMGZmYTggfSwKKyAgICB7IDB4MDAwMDliMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYWMsIDB4MDAwMGZmYWMsIDB4MDAwMGZmYWMgfSwKKyAgICB7IDB4MDAwMDliMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjAsIDB4MDAwMGZmYjAsIDB4MDAwMGZmYjAgfSwKKyAgICB7IDB4MDAwMDliMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjQsIDB4MDAwMGZmYjQsIDB4MDAwMGZmYjQgfSwKKyAgICB7IDB4MDAwMDliM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTEsIDB4MDAwMGZmYTEsIDB4MDAwMGZmYTEgfSwKKyAgICB7IDB4MDAwMDliNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTUsIDB4MDAwMGZmYTUsIDB4MDAwMGZmYTUgfSwKKyAgICB7IDB4MDAwMDliNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTksIDB4MDAwMGZmYTksIDB4MDAwMGZmYTkgfSwKKyAgICB7IDB4MDAwMDliNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYWQsIDB4MDAwMGZmYWQsIDB4MDAwMGZmYWQgfSwKKyAgICB7IDB4MDAwMDliNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjEsIDB4MDAwMGZmYjEsIDB4MDAwMGZmYjEgfSwKKyAgICB7IDB4MDAwMDliNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjUsIDB4MDAwMGZmYjUsIDB4MDAwMGZmYjUgfSwKKyAgICB7IDB4MDAwMDliNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjksIDB4MDAwMGZmYjksIDB4MDAwMGZmYjkgfSwKKyAgICB7IDB4MDAwMDliNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzUsIDB4MDAwMGZmYzUsIDB4MDAwMGZmYzUgfSwKKyAgICB7IDB4MDAwMDliNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzksIDB4MDAwMGZmYzksIDB4MDAwMGZmYzkgfSwKKyAgICB7IDB4MDAwMDliNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2QsIDB4MDAwMGZmY2QsIDB4MDAwMGZmY2QgfSwKKyAgICB7IDB4MDAwMDliNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDEsIDB4MDAwMGZmZDEsIDB4MDAwMGZmZDEgfSwKKyAgICB7IDB4MDAwMDliNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDUsIDB4MDAwMGZmZDUsIDB4MDAwMGZmZDUgfSwKKyAgICB7IDB4MDAwMDliNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzIsIDB4MDAwMGZmYzIsIDB4MDAwMGZmYzIgfSwKKyAgICB7IDB4MDAwMDliNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzYsIDB4MDAwMGZmYzYsIDB4MDAwMGZmYzYgfSwKKyAgICB7IDB4MDAwMDliNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2EsIDB4MDAwMGZmY2EsIDB4MDAwMGZmY2EgfSwKKyAgICB7IDB4MDAwMDliNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2UsIDB4MDAwMGZmY2UsIDB4MDAwMGZmY2UgfSwKKyAgICB7IDB4MDAwMDliN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDIsIDB4MDAwMGZmZDIsIDB4MDAwMGZmZDIgfSwKKyAgICB7IDB4MDAwMDliODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDYsIDB4MDAwMGZmZDYsIDB4MDAwMGZmZDYgfSwKKyAgICB7IDB4MDAwMDliODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGEsIDB4MDAwMGZmZGEsIDB4MDAwMGZmZGEgfSwKKyAgICB7IDB4MDAwMDliODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzcsIDB4MDAwMGZmYzcsIDB4MDAwMGZmYzcgfSwKKyAgICB7IDB4MDAwMDliOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2IsIDB4MDAwMGZmY2IsIDB4MDAwMGZmY2IgfSwKKyAgICB7IDB4MDAwMDliOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2YsIDB4MDAwMGZmY2YsIDB4MDAwMGZmY2YgfSwKKyAgICB7IDB4MDAwMDliOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDMsIDB4MDAwMGZmZDMsIDB4MDAwMGZmZDMgfSwKKyAgICB7IDB4MDAwMDliOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDcsIDB4MDAwMGZmZDcsIDB4MDAwMGZmZDcgfSwKKyAgICB7IDB4MDAwMDliOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjAsIDB4MDAwMGExMjAsIDB4MDAwMGExMjAgfSwKKyAgICB7IDB4MDAwMGFhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjQsIDB4MDAwMGExMjQsIDB4MDAwMGExMjQgfSwKKyAgICB7IDB4MDAwMGFhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjgsIDB4MDAwMGExMjgsIDB4MDAwMGExMjggfSwKKyAgICB7IDB4MDAwMGFhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMmMsIDB4MDAwMGExMmMsIDB4MDAwMGExMmMgfSwKKyAgICB7IDB4MDAwMGFhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMzAsIDB4MDAwMGExMzAsIDB4MDAwMGExMzAgfSwKKyAgICB7IDB4MDAwMGFhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExOTQsIDB4MDAwMGExOTQsIDB4MDAwMGExOTQgfSwKKyAgICB7IDB4MDAwMGFhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExOTgsIDB4MDAwMGExOTgsIDB4MDAwMGExOTggfSwKKyAgICB7IDB4MDAwMGFhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyMGMsIDB4MDAwMGEyMGMsIDB4MDAwMGEyMGMgfSwKKyAgICB7IDB4MDAwMGFhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyMTAsIDB4MDAwMGEyMTAsIDB4MDAwMGEyMTAgfSwKKyAgICB7IDB4MDAwMGFhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyODQsIDB4MDAwMGEyODQsIDB4MDAwMGEyODQgfSwKKyAgICB7IDB4MDAwMGFhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyODgsIDB4MDAwMGEyODgsIDB4MDAwMGEyODggfSwKKyAgICB7IDB4MDAwMGFhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOGMsIDB4MDAwMGEyOGMsIDB4MDAwMGEyOGMgfSwKKyAgICB7IDB4MDAwMGFhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOTAsIDB4MDAwMGEyOTAsIDB4MDAwMGEyOTAgfSwKKyAgICB7IDB4MDAwMGFhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOTQsIDB4MDAwMGEyOTQsIDB4MDAwMGEyOTQgfSwKKyAgICB7IDB4MDAwMGFhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTAsIDB4MDAwMGEyYTAsIDB4MDAwMGEyYTAgfSwKKyAgICB7IDB4MDAwMGFhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTQsIDB4MDAwMGEyYTQsIDB4MDAwMGEyYTQgfSwKKyAgICB7IDB4MDAwMGFhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTgsIDB4MDAwMGEyYTgsIDB4MDAwMGEyYTggfSwKKyAgICB7IDB4MDAwMGFhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYWMsIDB4MDAwMGEyYWMsIDB4MDAwMGEyYWMgfSwKKyAgICB7IDB4MDAwMGFhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjAsIDB4MDAwMGEyYjAsIDB4MDAwMGEyYjAgfSwKKyAgICB7IDB4MDAwMGFhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjQsIDB4MDAwMGEyYjQsIDB4MDAwMGEyYjQgfSwKKyAgICB7IDB4MDAwMGFhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjgsIDB4MDAwMGEyYjgsIDB4MDAwMGEyYjggfSwKKyAgICB7IDB4MDAwMGFhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYzQsIDB4MDAwMGEyYzQsIDB4MDAwMGEyYzQgfSwKKyAgICB7IDB4MDAwMGFhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MDgsIDB4MDAwMGE3MDgsIDB4MDAwMGE3MDggfSwKKyAgICB7IDB4MDAwMGFhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MGMsIDB4MDAwMGE3MGMsIDB4MDAwMGE3MGMgfSwKKyAgICB7IDB4MDAwMGFhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MTAsIDB4MDAwMGE3MTAsIDB4MDAwMGE3MTAgfSwKKyAgICB7IDB4MDAwMGFhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMDQsIDB4MDAwMGFiMDQsIDB4MDAwMGFiMDQgfSwKKyAgICB7IDB4MDAwMGFhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMDgsIDB4MDAwMGFiMDgsIDB4MDAwMGFiMDggfSwKKyAgICB7IDB4MDAwMGFhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMGMsIDB4MDAwMGFiMGMsIDB4MDAwMGFiMGMgfSwKKyAgICB7IDB4MDAwMGFhNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTAsIDB4MDAwMGFiMTAsIDB4MDAwMGFiMTAgfSwKKyAgICB7IDB4MDAwMGFhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTQsIDB4MDAwMGFiMTQsIDB4MDAwMGFiMTQgfSwKKyAgICB7IDB4MDAwMGFhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTgsIDB4MDAwMGFiMTgsIDB4MDAwMGFiMTggfSwKKyAgICB7IDB4MDAwMGFhN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOGMsIDB4MDAwMGFiOGMsIDB4MDAwMGFiOGMgfSwKKyAgICB7IDB4MDAwMGFhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTAsIDB4MDAwMGFiOTAsIDB4MDAwMGFiOTAgfSwKKyAgICB7IDB4MDAwMGFhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTQgfSwKKyAgICB7IDB4MDAwMGFhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTgsIDB4MDAwMGFiOTgsIDB4MDAwMGFiOTggfSwKKyAgICB7IDB4MDAwMGFhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiYTQsIDB4MDAwMGFiYTQsIDB4MDAwMGFiYTQgfSwKKyAgICB7IDB4MDAwMGFhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiYTgsIDB4MDAwMGFiYTgsIDB4MDAwMGFiYTggfSwKKyAgICB7IDB4MDAwMGFhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMDQsIDB4MDAwMGNiMDQsIDB4MDAwMGNiMDQgfSwKKyAgICB7IDB4MDAwMGFhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMDgsIDB4MDAwMGNiMDgsIDB4MDAwMGNiMDggfSwKKyAgICB7IDB4MDAwMGFhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMGMsIDB4MDAwMGNiMGMsIDB4MDAwMGNiMGMgfSwKKyAgICB7IDB4MDAwMGFhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTAsIDB4MDAwMGNiMTAsIDB4MDAwMGNiMTAgfSwKKyAgICB7IDB4MDAwMGFhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTQsIDB4MDAwMGNiMTQsIDB4MDAwMGNiMTQgfSwKKyAgICB7IDB4MDAwMGFhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTgsIDB4MDAwMGNiMTgsIDB4MDAwMGNiMTggfSwKKyAgICB7IDB4MDAwMGFhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiOGMsIDB4MDAwMGNiOGMsIDB4MDAwMGNiOGMgfSwKKyAgICB7IDB4MDAwMGFhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiOTAsIDB4MDAwMGNiOTAsIDB4MDAwMGNiOTAgfSwKKyAgICB7IDB4MDAwMGFhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMTgsIDB4MDAwMGNmMTgsIDB4MDAwMGNmMTggfSwKKyAgICB7IDB4MDAwMGFhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMjQsIDB4MDAwMGNmMjQsIDB4MDAwMGNmMjQgfSwKKyAgICB7IDB4MDAwMGFhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMjgsIDB4MDAwMGNmMjgsIDB4MDAwMGNmMjggfSwKKyAgICB7IDB4MDAwMGFhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzMTQsIDB4MDAwMGQzMTQsIDB4MDAwMGQzMTQgfSwKKyAgICB7IDB4MDAwMGFhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzMTgsIDB4MDAwMGQzMTgsIDB4MDAwMGQzMTggfSwKKyAgICB7IDB4MDAwMGFhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOGMsIDB4MDAwMGQzOGMsIDB4MDAwMGQzOGMgfSwKKyAgICB7IDB4MDAwMGFhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTAsIDB4MDAwMGQzOTAsIDB4MDAwMGQzOTAgfSwKKyAgICB7IDB4MDAwMGFhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTQsIDB4MDAwMGQzOTQsIDB4MDAwMGQzOTQgfSwKKyAgICB7IDB4MDAwMGFhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTgsIDB4MDAwMGQzOTgsIDB4MDAwMGQzOTggfSwKKyAgICB7IDB4MDAwMGFhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYTQsIDB4MDAwMGQzYTQsIDB4MDAwMGQzYTQgfSwKKyAgICB7IDB4MDAwMGFhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYTgsIDB4MDAwMGQzYTgsIDB4MDAwMGQzYTggfSwKKyAgICB7IDB4MDAwMGFhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYWMsIDB4MDAwMGQzYWMsIDB4MDAwMGQzYWMgfSwKKyAgICB7IDB4MDAwMGFhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYjAsIDB4MDAwMGQzYjAsIDB4MDAwMGQzYjAgfSwKKyAgICB7IDB4MDAwMGFhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODAsIDB4MDAwMGYzODAsIDB4MDAwMGYzODAgfSwKKyAgICB7IDB4MDAwMGFhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODQsIDB4MDAwMGYzODQsIDB4MDAwMGYzODQgfSwKKyAgICB7IDB4MDAwMGFhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODgsIDB4MDAwMGYzODgsIDB4MDAwMGYzODggfSwKKyAgICB7IDB4MDAwMGFhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTAsIDB4MDAwMGY3MTAsIDB4MDAwMGY3MTAgfSwKKyAgICB7IDB4MDAwMGFhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTQsIDB4MDAwMGY3MTQsIDB4MDAwMGY3MTQgfSwKKyAgICB7IDB4MDAwMGFhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTgsIDB4MDAwMGY3MTgsIDB4MDAwMGY3MTggfSwKKyAgICB7IDB4MDAwMGFiMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTAsIDB4MDAwMGZiMTAsIDB4MDAwMGZiMTAgfSwKKyAgICB7IDB4MDAwMGFiMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTQsIDB4MDAwMGZiMTQsIDB4MDAwMGZiMTQgfSwKKyAgICB7IDB4MDAwMGFiMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTgsIDB4MDAwMGZiMTgsIDB4MDAwMGZiMTggfSwKKyAgICB7IDB4MDAwMGFiMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOGMsIDB4MDAwMGZiOGMsIDB4MDAwMGZiOGMgfSwKKyAgICB7IDB4MDAwMGFiMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOTAsIDB4MDAwMGZiOTAsIDB4MDAwMGZiOTAgfSwKKyAgICB7IDB4MDAwMGFiMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOTQsIDB4MDAwMGZiOTQsIDB4MDAwMGZiOTQgfSwKKyAgICB7IDB4MDAwMGFiMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOGMsIDB4MDAwMGZmOGMsIDB4MDAwMGZmOGMgfSwKKyAgICB7IDB4MDAwMGFiMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOTAsIDB4MDAwMGZmOTAsIDB4MDAwMGZmOTAgfSwKKyAgICB7IDB4MDAwMGFiMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOTQsIDB4MDAwMGZmOTQsIDB4MDAwMGZmOTQgfSwKKyAgICB7IDB4MDAwMGFiMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTAsIDB4MDAwMGZmYTAsIDB4MDAwMGZmYTAgfSwKKyAgICB7IDB4MDAwMGFiMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTQsIDB4MDAwMGZmYTQsIDB4MDAwMGZmYTQgfSwKKyAgICB7IDB4MDAwMGFiMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTgsIDB4MDAwMGZmYTgsIDB4MDAwMGZmYTggfSwKKyAgICB7IDB4MDAwMGFiMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYWMsIDB4MDAwMGZmYWMsIDB4MDAwMGZmYWMgfSwKKyAgICB7IDB4MDAwMGFiMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjAsIDB4MDAwMGZmYjAsIDB4MDAwMGZmYjAgfSwKKyAgICB7IDB4MDAwMGFiMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjQsIDB4MDAwMGZmYjQsIDB4MDAwMGZmYjQgfSwKKyAgICB7IDB4MDAwMGFiM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTEsIDB4MDAwMGZmYTEsIDB4MDAwMGZmYTEgfSwKKyAgICB7IDB4MDAwMGFiNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTUsIDB4MDAwMGZmYTUsIDB4MDAwMGZmYTUgfSwKKyAgICB7IDB4MDAwMGFiNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTksIDB4MDAwMGZmYTksIDB4MDAwMGZmYTkgfSwKKyAgICB7IDB4MDAwMGFiNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYWQsIDB4MDAwMGZmYWQsIDB4MDAwMGZmYWQgfSwKKyAgICB7IDB4MDAwMGFiNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjEsIDB4MDAwMGZmYjEsIDB4MDAwMGZmYjEgfSwKKyAgICB7IDB4MDAwMGFiNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjUsIDB4MDAwMGZmYjUsIDB4MDAwMGZmYjUgfSwKKyAgICB7IDB4MDAwMGFiNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjksIDB4MDAwMGZmYjksIDB4MDAwMGZmYjkgfSwKKyAgICB7IDB4MDAwMGFiNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzUsIDB4MDAwMGZmYzUsIDB4MDAwMGZmYzUgfSwKKyAgICB7IDB4MDAwMGFiNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzksIDB4MDAwMGZmYzksIDB4MDAwMGZmYzkgfSwKKyAgICB7IDB4MDAwMGFiNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2QsIDB4MDAwMGZmY2QsIDB4MDAwMGZmY2QgfSwKKyAgICB7IDB4MDAwMGFiNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDEsIDB4MDAwMGZmZDEsIDB4MDAwMGZmZDEgfSwKKyAgICB7IDB4MDAwMGFiNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDUsIDB4MDAwMGZmZDUsIDB4MDAwMGZmZDUgfSwKKyAgICB7IDB4MDAwMGFiNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzIsIDB4MDAwMGZmYzIsIDB4MDAwMGZmYzIgfSwKKyAgICB7IDB4MDAwMGFiNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzYsIDB4MDAwMGZmYzYsIDB4MDAwMGZmYzYgfSwKKyAgICB7IDB4MDAwMGFiNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2EsIDB4MDAwMGZmY2EsIDB4MDAwMGZmY2EgfSwKKyAgICB7IDB4MDAwMGFiNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2UsIDB4MDAwMGZmY2UsIDB4MDAwMGZmY2UgfSwKKyAgICB7IDB4MDAwMGFiN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDIsIDB4MDAwMGZmZDIsIDB4MDAwMGZmZDIgfSwKKyAgICB7IDB4MDAwMGFiODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDYsIDB4MDAwMGZmZDYsIDB4MDAwMGZmZDYgfSwKKyAgICB7IDB4MDAwMGFiODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGEsIDB4MDAwMGZmZGEsIDB4MDAwMGZmZGEgfSwKKyAgICB7IDB4MDAwMGFiODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzcsIDB4MDAwMGZmYzcsIDB4MDAwMGZmYzcgfSwKKyAgICB7IDB4MDAwMGFiOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2IsIDB4MDAwMGZmY2IsIDB4MDAwMGZmY2IgfSwKKyAgICB7IDB4MDAwMGFiOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2YsIDB4MDAwMGZmY2YsIDB4MDAwMGZmY2YgfSwKKyAgICB7IDB4MDAwMGFiOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDMsIDB4MDAwMGZmZDMsIDB4MDAwMGZmZDMgfSwKKyAgICB7IDB4MDAwMGFiOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDcsIDB4MDAwMGZmZDcsIDB4MDAwMGZmZDcgfSwKKyAgICB7IDB4MDAwMGFiOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDk4NDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDEwNjcsIDB4MDAwMDEwNjcsIDB4MDAwMDEwNjcgfSwKKyAgICB7IDB4MDAwMGE4NDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDEwNjcsIDB4MDAwMDEwNjcsIDB4MDAwMDEwNjcgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg3UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODdfMV8wW11bMl0gPSB7CisgICAgezB4MDAwMDQwNDAsICAweDkyNDhmZDAwIH0sCisgICAgezB4MDAwMDQwNDAsICAweDI0OTI0OTI0IH0sCisgICAgezB4MDAwMDQwNDAsICAweGE4MDAwMDE5IH0sCisgICAgezB4MDAwMDQwNDAsICAweDEzMTYwODIwIH0sCisgICAgezB4MDAwMDQwNDAsICAweGU1OTgwNTYwIH0sCisgICAgezB4MDAwMDQwNDAsICAweGMwMWRjZmZkIH0sCisgICAgezB4MDAwMDQwNDAsICAweDFhYWFiZTQxIH0sCisgICAgezB4MDAwMDQwNDAsICAweGJlMTA1NTU0IH0sCisgICAgezB4MDAwMDQwNDAsICAweDAwMDQzMDA3IH0sCisgICAgezB4MDAwMDQwNDQsICAweDAwMDAwMDAwIH0sCit9OworCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4N1BjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg3XzFfMFtdWzJdID0geworICAgIHsweDAwMDA0MDQwLCAgMHg5MjQ4ZmQwMCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgyNDkyNDkyNCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhhODAwMDAxOSB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgxMzE2MDgyMCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhlNTk4MDU2MCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhjMDFkY2ZmYyB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgxYWFhYmU0MSB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhiZTEwNTU1NCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgwMDA0MzAwNyB9LAorICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAorfTsKKworLyogQVI5Mjg3IFJldmlzaW9uIDExICovCisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg3TW9kZXNfOTI4N18xXzFbXVs2XSA9IHsKKyAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLworICAgIHsgMHgwMDAwMTAzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDJjMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMCB9LAorICAgIHsgMHgwMDAwMTA3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMCB9LAorICAgIHsgMHgwMDAwMTBiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MCB9LAorICAgIHsgMHgwMDAwMTBmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCB9LAorICAgIHsgMHgwMDAwODAxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgxMDgwMTYwMCwgMHgwODQwMGIwMCwgMHgwNmUwMDZlMCB9LAorICAgIHsgMHgwMDAwODAxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYiwgMHgwOTg4MDA0ZiB9LAorICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMCB9LAorICAgIHsgMHgwMDAwODFkMCwgMHgwMDAwMzIwMCwgMHgwMDAwMzIwMCwgMHgwMDAwMzIwYSwgMHgwMDAwMzIwYSwgMHgwMDAwMzIwYSB9LAorICAgIHsgMHgwMDAwODMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwNjg4MCwgMHgwMDAwMzQ0MCwgMHgwMDAwNjg4MCB9LAorICAgIHsgMHgwMDAwOTgwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDNjNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwMyB9LAorICAgIHsgMHgwMDAwOTgyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCB9LAorICAgIHsgMHgwMDAwOTgyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSB9LAorICAgIHsgMHgwMDAwOTgyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgzYTAyMDAwMSwgMHgzYTAyMDAwMSwgMHgzYTAyMDAwMSB9LAorICAgIHsgMHgwMDAwOTgzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9LAorICAgIHsgMHgwMDAwOTgzOCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNyB9LAorICAgIHsgMHgwMDAwOTg0MCwgMHgyMDZhMDAyZSwgMHgyMDZhMDAyZSwgMHgyMDZhMDEyZSwgMHgyMDZhMDEyZSwgMHgyMDZhMDEyZSB9LAorICAgIHsgMHgwMDAwOTg0NCwgMHgwMzcyMDAwMCwgMHgwMzcyMDAwMCwgMHgwMzcyMTZhMCwgMHgwMzcyMTZhMCwgMHgwMzcyMTZhMCB9LAorICAgIHsgMHgwMDAwOTg1MCwgMHg2MDAwMDAwMCwgMHg2MDAwMDAwMCwgMHg2ZDQwMDBlMiwgMHg2YzQwMDBlMiwgMHg2YzQwMDBlMiB9LAorICAgIHsgMHgwMDAwOTg1OCwgMHg3YzAwMGQwMCwgMHg3YzAwMGQwMCwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSB9LAorICAgIHsgMHgwMDAwOTg1YywgMHgzMTAwMDA1ZSwgMHgzMTAwMDA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NWQ1ZSwgMHgzMTM5NWQ1ZSB9LAorICAgIHsgMHgwMDAwOTg2MCwgMHgwMDA1OGQwMCwgMHgwMDA1OGQwMCwgMHgwMDA1OGQyMCwgMHgwMDA1OGQyMCwgMHgwMDA1OGQxOCB9LAorICAgIHsgMHgwMDAwOTg2NCwgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCB9LAorICAgIHsgMHgwMDAwOTg2OCwgMHgwMDAwNDBjMCwgMHgwMDAwNDBjMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCB9LAorICAgIHsgMHgwMDAwOTg2YywgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSB9LAorICAgIHsgMHgwMDAwOTkxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMTEzMCwgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9LAorICAgIHsgMHgwMDAwOTkxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxNiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAxNiB9LAorICAgIHsgMHgwMDAwOTkyNCwgMHhkMDBhOGEwMSwgMHhkMDBhOGEwMSwgMHhkMDBhOGEwZCwgMHhkMDBhOGEwZCwgMHhkMDBhOGEwZCB9LAorICAgIHsgMHgwMDAwOTk0NCwgMHhlZmJjMDAwMCwgMHhlZmJjMDAwMCwgMHhlZmJjMTAxMCwgMHhlZmJjMTAxMCwgMHhlZmJjMTAxMCB9LAorICAgIHsgMHgwMDAwOTk2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCB9LAorICAgIHsgMHgwMDAwYTk2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCB9LAorICAgIHsgMHgwMDAwOTk2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDIxMCB9LAorICAgIHsgMHgwMDAwYzk2OCwgMHgwMDAwMDIwMCwgMHgwMDAwMDIwMCwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZSB9LAorICAgIHsgMHgwMDAwOTliOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxYywgMHgwMDAwMDAxYywgMHgwMDAwMDAxYyB9LAorICAgIHsgMHgwMDAwOTliYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCB9LAorICAgIHsgMHgwMDAwOTljMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCB9LAorICAgIHsgMHgwMDAwYTIwNCwgMHgwMDAwMDQ0MCwgMHgwMDAwMDQ0MCwgMHgwMDAwMDQ0NCwgMHgwMDAwMDQ0NCwgMHgwMDAwMDQ0NCB9LAorICAgIHsgMHgwMDAwYTIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYjIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTIxYywgMHgxODAzODAwYSwgMHgxODAzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9LAorICAgIHsgMHgwMDAwYTIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCB9LAorICAgIHsgMHgwMDAwYTM1OCwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSB9LAorICAgIHsgMHgwMDAwYTNkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODdDb21tb25fOTI4N18xXzFbXVsyXSA9IHsKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAwMjAwMTUgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAwMDAwMDUgfSwKKyAgICB7IDB4MDAwMDAwNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDAwNDQsIDB4MDAwMDAwMDggfSwKKyAgICB7IDB4MDAwMDAwNDgsIDB4MDAwMDAwMDggfSwKKyAgICB7IDB4MDAwMDAwNGMsIDB4MDAwMDAwMTAgfSwKKyAgICB7IDB4MDAwMDAwNTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDAwNTQsIDB4MDAwMDAwMWYgfSwKKyAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwNDAsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNDQsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNDgsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNGMsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNTAsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNTQsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNTgsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNWMsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNjAsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNjQsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEyMzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0M2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0N2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDQwMzAsIDB4MDAwMDAwMDIgfSwKKyAgICB7IDB4MDAwMDQwM2MsIDB4MDAwMDAwMDIgfSwKKyAgICB7IDB4MDAwMDQwMjQsIDB4MDAwMDAwMWYgfSwKKyAgICB7IDB4MDAwMDQwNjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDQwNjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDcwMTAsIDB4MDAwMDAwMzMgfSwKKyAgICB7IDB4MDAwMDcwMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDcwMzQsIDB4MDAwMDAwMDIgfSwKKyAgICB7IDB4MDAwMDcwMzgsIDB4MDAwMDA0YzIgfSwKKyAgICB7IDB4MDAwMDgwMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMTgsIDB4MDAwMDA3MDAgfSwKKyAgICB7IDB4MDAwMDgwMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNDgsIDB4NDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNWMsIDB4MDAwZmM3OGYgfSwKKyAgICB7IDB4MDAwMDgwNjAsIDB4MDAwMDAwMGYgfSwKKyAgICB7IDB4MDAwMDgwNjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwYzAsIDB4MmE4MDAwMWEgfSwKKyAgICB7IDB4MDAwMDgwYzQsIDB4MDVkYzAxZTAgfSwKKyAgICB7IDB4MDAwMDgwYzgsIDB4MWY0MDI3MTAgfSwKKyAgICB7IDB4MDAwMDgwY2MsIDB4MDFmNDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZDAsIDB4MDAwMDFlMDAgfSwKKyAgICB7IDB4MDAwMDgwZDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZDgsIDB4MDA0MDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZTAsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgwZTQsIDB4MDAwMGZmZmYgfSwKKyAgICB7IDB4MDAwMDgwZTgsIDB4MDAzZjNmM2YgfSwKKyAgICB7IDB4MDAwMDgwZWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZmMsIDB4MDAwMjAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMDAsIDB4MDAwMjAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMDQsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDgxMDgsIDB4MDAwMDAwNTIgfSwKKyAgICB7IDB4MDAwMDgxMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMTAsIDB4MDAwMDAxNjggfSwKKyAgICB7IDB4MDAwMDgxMTgsIDB4MDAwMTAwYWEgfSwKKyAgICB7IDB4MDAwMDgxMWMsIDB4MDAwMDMyMTAgfSwKKyAgICB7IDB4MDAwMDgxMjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxNDQsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgxNjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxNmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxNzAsIDB4MTg0ODczMjAgfSwKKyAgICB7IDB4MDAwMDgxNzQsIDB4ZmFhNGZhNTAgfSwKKyAgICB7IDB4MDAwMDgxNzgsIDB4MDAwMDAxMDAgfSwKKyAgICB7IDB4MDAwMDgxN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxYzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxYzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNDAsIDB4MDAxMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNDQsIDB4MDAxMGY0MDAgfSwKKyAgICB7IDB4MDAwMDgyNDgsIDB4MDAwMDAxMDAgfSwKKyAgICB7IDB4MDAwMDgyNGMsIDB4MDAwMWU4MDAgfSwKKyAgICB7IDB4MDAwMDgyNTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNWMsIDB4NDAwMDAwZmYgfSwKKyAgICB7IDB4MDAwMDgyNjAsIDB4MDAwODA5MjIgfSwKKyAgICB7IDB4MDAwMDgyNjQsIDB4ODhhMDAwMTAgfSwKKyAgICB7IDB4MDAwMDgyNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNzQsIDB4NDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNzgsIDB4MDAzZTQxODAgfSwKKyAgICB7IDB4MDAwMDgyN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyODQsIDB4MDAwMDAwMmMgfSwKKyAgICB7IDB4MDAwMDgyODgsIDB4MDAwMDAwMmMgfSwKKyAgICB7IDB4MDAwMDgyOGMsIDB4MDAwMDAwZmYgfSwKKyAgICB7IDB4MDAwMDgyOTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyOTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyOWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzMDAsIDB4MDAwMDAwNDAgfSwKKyAgICB7IDB4MDAwMDgzMTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzMjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzMmMsIDB4MDAwMDAwMDcgfSwKKyAgICB7IDB4MDAwMDgzMzAsIDB4MDAwMDAzMDIgfSwKKyAgICB7IDB4MDAwMDgzMzQsIDB4MDAwMDBlMDAgfSwKKyAgICB7IDB4MDAwMDgzMzgsIDB4MDBmZjAwMDAgfSwKKyAgICB7IDB4MDAwMDgzM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzNDAsIDB4MDAwMTA3ZmYgfSwKKyAgICB7IDB4MDAwMDgzNDQsIDB4MDFjODEwNDMgfSwKKyAgICB7IDB4MDAwMDgzNjAsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgzNjQsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgzNjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzNzQsIDB4MDAwMDAwZmYgfSwKKyAgICB7IDB4MDAwMDgzNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzODAsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgzODQsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgzOTAsIDB4MGZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgzOTQsIDB4MGZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgzOTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzOWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzYTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4MGMsIDB4YWZlNjhlMzAgfSwKKyAgICB7IDB4MDAwMDk4MTAsIDB4ZmQxNGUwMDAgfSwKKyAgICB7IDB4MDAwMDk4MTQsIDB4OWMwYTlmNmIgfSwKKyAgICB7IDB4MDAwMDk4MWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4MmMsIDB4MDAwMGEwMDAgfSwKKyAgICB7IDB4MDAwMDk4MzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4M2MsIDB4MDAyMDA0MDAgfSwKKyAgICB7IDB4MDAwMDk4NGMsIDB4MDA0MDIzM2MgfSwKKyAgICB7IDB4MDAwMGE4NGMsIDB4MDA0MDIzM2MgfSwKKyAgICB7IDB4MDAwMDk4NTQsIDB4MDAwMDAwNDQgfSwKKyAgICB7IDB4MDAwMDk5MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MTAsIDB4MTAwMDIzMTAgfSwKKyAgICB7IDB4MDAwMDk5MWMsIDB4MTAwMDBmZmYgfSwKKyAgICB7IDB4MDAwMDk5MjAsIDB4MDQ5MDAwMDAgfSwKKyAgICB7IDB4MDAwMGE5MjAsIDB4MDQ5MDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MjgsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDk5MmMsIDB4MDAwMDAwMDQgfSwKKyAgICB7IDB4MDAwMDk5MzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGE5MzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MzQsIDB4MWUxZjIwMjIgfSwKKyAgICB7IDB4MDAwMDk5MzgsIDB4MGEwYjBjMGQgfSwKKyAgICB7IDB4MDAwMDk5M2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5NDgsIDB4OTI4MGMwMGEgfSwKKyAgICB7IDB4MDAwMDk5NGMsIDB4MDAwMjAwMjggfSwKKyAgICB7IDB4MDAwMDk5NTQsIDB4NWYzY2EzZGUgfSwKKyAgICB7IDB4MDAwMDk5NTgsIDB4MDEwOGVjZmYgfSwKKyAgICB7IDB4MDAwMDk5NDAsIDB4MTQ3NTA2MDQgfSwKKyAgICB7IDB4MDAwMGM5NWMsIDB4MDA0YjZhOGUgfSwKKyAgICB7IDB4MDAwMDk5NzAsIDB4OTkwYmI1MTQgfSwKKyAgICB7IDB4MDAwMDk5NzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5NzgsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDk5N2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5YTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5YTQsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDk5YTgsIDB4MjAxZmZmMDAgfSwKKyAgICB7IDB4MDAwMDk5YWMsIDB4MGM2ZjAwMDAgfSwKKyAgICB7IDB4MDAwMDk5YjAsIDB4MDMwNTEwMDAgfSwKKyAgICB7IDB4MDAwMDk5YjQsIDB4MDAwMDA4MjAgfSwKKyAgICB7IDB4MDAwMDk5YzQsIDB4MDYzMzZmNzcgfSwKKyAgICB7IDB4MDAwMDk5YzgsIDB4NmFmNjUzMmYgfSwKKyAgICB7IDB4MDAwMDk5Y2MsIDB4MDhmMTg2YzggfSwKKyAgICB7IDB4MDAwMDk5ZDAsIDB4MDAwNDYzODQgfSwKKyAgICB7IDB4MDAwMDk5ZGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ZTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ZTQsIDB4YWFhYWFhYWEgfSwKKyAgICB7IDB4MDAwMDk5ZTgsIDB4M2M0NjY0NzggfSwKKyAgICB7IDB4MDAwMDk5ZWMsIDB4MGNjODBjYWEgfSwKKyAgICB7IDB4MDAwMDk5ZjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ZmMsIDB4MDAwMDEwNDIgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDBmZmZlZmYgfSwKKyAgICB7IDB4MDAwMGExZjgsIDB4MDBmNWY5ZmYgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4Yjc5ZjY0MjcgfSwKKyAgICB7IDB4MDAwMGEyMDgsIDB4ODAzZTQ3ODggfSwKKyAgICB7IDB4MDAwMGEyMTAsIDB4NDA4MGEzMzMgfSwKKyAgICB7IDB4MDAwMGEyMTQsIDB4NDAyMDZjMTAgfSwKKyAgICB7IDB4MDAwMGEyMTgsIDB4MDA5YzQwNjAgfSwKKyAgICB7IDB4MDAwMGEyMjAsIDB4MDE4MzQwNjEgfSwKKyAgICB7IDB4MDAwMGEyMjQsIDB4MDAwMDA0MDAgfSwKKyAgICB7IDB4MDAwMGEyMjgsIDB4MDAwMDAzYjUgfSwKKyAgICB7IDB4MDAwMGEyMmMsIDB4MjMzZjcxODAgfSwKKyAgICB7IDB4MDAwMGEyMzQsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEyMzgsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEyM2MsIDB4MTNjODg5YWYgfSwKKyAgICB7IDB4MDAwMGEyNDAsIDB4Mzg0OTBhMjAgfSwKKyAgICB7IDB4MDAwMGEyNDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNDgsIDB4ZmZmZmZmZmMgfSwKKyAgICB7IDB4MDAwMGEyNGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNTgsIDB4MGNkYmQzODAgfSwKKyAgICB7IDB4MDAwMGEyNWMsIDB4MGYwZjBmMDEgfSwKKyAgICB7IDB4MDAwMGEyNjAsIDB4ZGZhOTFmMDEgfSwKKyAgICB7IDB4MDAwMGEyNjQsIDB4MDA0MThhMTEgfSwKKyAgICB7IDB4MDAwMGIyNjQsIDB4MDA0MThhMTEgfSwKKyAgICB7IDB4MDAwMGEyNjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNmMsIDB4MGU3OWU1YzYgfSwKKyAgICB7IDB4MDAwMGIyNmMsIDB4MGU3OWU1YzYgfSwKKyAgICB7IDB4MDAwMGQyNzAsIDB4MDA4MjA4MjAgfSwKKyAgICB7IDB4MDAwMGEyNzgsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEyN2MsIDB4MDUwNzAxY2UgfSwKKyAgICB7IDB4MDAwMGQzNWMsIDB4MDdmZmZmZWYgfSwKKyAgICB7IDB4MDAwMGQzNjAsIDB4MGZmZmZmZTcgfSwKKyAgICB7IDB4MDAwMGQzNjQsIDB4MTdmZmZmZTUgfSwKKyAgICB7IDB4MDAwMGQzNjgsIDB4MWZmZmZmZTQgfSwKKyAgICB7IDB4MDAwMGQzNmMsIDB4MzdmZmZmZTMgfSwKKyAgICB7IDB4MDAwMGQzNzAsIDB4M2ZmZmZmZTMgfSwKKyAgICB7IDB4MDAwMGQzNzQsIDB4NTdmZmZmZTMgfSwKKyAgICB7IDB4MDAwMGQzNzgsIDB4NWZmZmZmZTIgfSwKKyAgICB7IDB4MDAwMGQzN2MsIDB4N2ZmZmZmZTIgfSwKKyAgICB7IDB4MDAwMGQzODAsIDB4N2YzYzdiYmEgfSwKKyAgICB7IDB4MDAwMGQzODQsIDB4ZjMzMDdmZjAgfSwKKyAgICB7IDB4MDAwMGEzODgsIDB4MGMwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzOGMsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzOTAsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzOTQsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAxY2UgfSwKKyAgICB7IDB4MDAwMGIzOTgsIDB4MDAwMDAxY2UgfSwKKyAgICB7IDB4MDAwMGEzOWMsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMGEzYzgsIDB4MDAwMDAyNDYgfSwKKyAgICB7IDB4MDAwMGEzY2MsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzZDAsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzZDQsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzZGMsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAxY2UgfSwKKyAgICB7IDB4MDAwMGEzZTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzZTgsIDB4MThjNDM0MzMgfSwKKyAgICB7IDB4MDAwMGEzZWMsIDB4MDBmNzAwODEgfSwKKyAgICB7IDB4MDAwMGEzZjAsIDB4MDEwMzZhMWUgfSwKKyAgICB7IDB4MDAwMGEzZjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGIzZjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGE3ZDgsIDB4MDAwMDAzZjEgfSwKKyAgICB7IDB4MDAwMDc4MDAsIDB4MDAwMDA4MDAgfSwKKyAgICB7IDB4MDAwMDc4MDQsIDB4NmMzNWZmYzIgfSwKKyAgICB7IDB4MDAwMDc4MDgsIDB4NmRiNmMwMDAgfSwKKyAgICB7IDB4MDAwMDc4MGMsIDB4NmRiNmNiMzAgfSwKKyAgICB7IDB4MDAwMDc4MTAsIDB4NmRiNmNiNmMgfSwKKyAgICB7IDB4MDAwMDc4MTQsIDB4MDUwMWUyMDAgfSwKKyAgICB7IDB4MDAwMDc4MTgsIDB4MDA5NDEyOGQgfSwKKyAgICB7IDB4MDAwMDc4MWMsIDB4OTc2ZWUzOTIgfSwKKyAgICB7IDB4MDAwMDc4MjAsIDB4Zjc1ZmY2ZmMgfSwKKyAgICB7IDB4MDAwMDc4MjQsIDB4MDAwNDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MjgsIDB4ZGIwMDMwMTIgfSwKKyAgICB7IDB4MDAwMDc4MmMsIDB4MDQ5MjQ5MTQgfSwKKyAgICB7IDB4MDAwMDc4MzAsIDB4MjEwODQyMTAgfSwKKyAgICB7IDB4MDAwMDc4MzQsIDB4MDAxNDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MzgsIDB4MGU0NTQ4ZDggfSwKKyAgICB7IDB4MDAwMDc4M2MsIDB4NTQyMTQ1MTQgfSwKKyAgICB7IDB4MDAwMDc4NDAsIDB4MDIwMjU4MzAgfSwKKyAgICB7IDB4MDAwMDc4NDQsIDB4NzFjMGQzODggfSwKKyAgICB7IDB4MDAwMDc4NDgsIDB4OTM0OTM0YTggfSwKKyAgICB7IDB4MDAwMDc4NTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4NTQsIDB4MDAwMDA4MDAgfSwKKyAgICB7IDB4MDAwMDc4NTgsIDB4NmMzNWZmYzIgfSwKKyAgICB7IDB4MDAwMDc4NWMsIDB4NmRiNmMwMDAgfSwKKyAgICB7IDB4MDAwMDc4NjAsIDB4NmRiNmNiMzAgfSwKKyAgICB7IDB4MDAwMDc4NjQsIDB4NmRiNmNiNmMgfSwKKyAgICB7IDB4MDAwMDc4NjgsIDB4MDUwMWUyMDAgfSwKKyAgICB7IDB4MDAwMDc4NmMsIDB4MDA5NDEyOGQgfSwKKyAgICB7IDB4MDAwMDc4NzAsIDB4OTc2ZWUzOTIgfSwKKyAgICB7IDB4MDAwMDc4NzQsIDB4Zjc1ZmY2ZmMgfSwKKyAgICB7IDB4MDAwMDc4NzgsIDB4MDAwNDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4N2MsIDB4ZGIwMDMwMTIgfSwKKyAgICB7IDB4MDAwMDc4ODAsIDB4MDQ5MjQ5MTQgfSwKKyAgICB7IDB4MDAwMDc4ODQsIDB4MjEwODQyMTAgfSwKKyAgICB7IDB4MDAwMDc4ODgsIDB4MDAxYjZkYjAgfSwKKyAgICB7IDB4MDAwMDc4OGMsIDB4MDAzNzZiNjMgfSwKKyAgICB7IDB4MDAwMDc4OTAsIDB4MDZkYjZkYjYgfSwKKyAgICB7IDB4MDAwMDc4OTQsIDB4MDA2ZDgwMDAgfSwKKyAgICB7IDB4MDAwMDc4OTgsIDB4NDgxMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4OWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4YTAsIDB4MDgwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4YTQsIDB4MDAwN2ZmZDggfSwKKyAgICB7IDB4MDAwMDc4YTgsIDB4MDAwN2ZmZDggfSwKKyAgICB7IDB4MDAwMDc4YWMsIDB4MDAxYzAwMjAgfSwKKyAgICB7IDB4MDAwMDc4YjAsIDB4MDAwNjBhZWIgfSwKKyAgICB7IDB4MDAwMDc4YjQsIDB4NDAwMDgwODAgfSwKKyAgICB7IDB4MDAwMDc4YjgsIDB4MmE4NTAxNjAgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg3TW9kZXNfdHhfZ2Fpbl85Mjg3XzFfMVtdWzZdID0geworICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCisgICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA0MDAyLCAweDAwMDA0MDAyLCAweDAwMDA0MDAyIH0sCisgICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA4MDA0LCAweDAwMDA4MDA0LCAweDAwMDA4MDA0IH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjMDBhLCAweDAwMDBjMDBhLCAweDAwMDBjMDBhIH0sCisgICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMDBjLCAweDAwMDEwMDBjLCAweDAwMDEwMDBjIH0sCisgICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE0MjBiLCAweDAwMDE0MjBiLCAweDAwMDE0MjBiIH0sCisgICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE4MjRhLCAweDAwMDE4MjRhLCAweDAwMDE4MjRhIH0sCisgICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFjNDRhLCAweDAwMDFjNDRhLCAweDAwMDFjNDRhIH0sCisgICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIwNjRhLCAweDAwMDIwNjRhLCAweDAwMDIwNjRhIH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI0ODRhLCAweDAwMDI0ODRhLCAweDAwMDI0ODRhIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI4YTRhLCAweDAwMDI4YTRhLCAweDAwMDI4YTRhIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJjYzRhLCAweDAwMDJjYzRhLCAweDAwMDJjYzRhIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwZTRhLCAweDAwMDMwZTRhLCAweDAwMDMwZTRhIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM0ZThhLCAweDAwMDM0ZThhLCAweDAwMDM0ZThhIH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM4ZThjLCAweDAwMDM4ZThjLCAweDAwMDM4ZThjIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNjZWNjLCAweDAwMDNjZWNjLCAweDAwMDNjZWNjIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQwZWQ0LCAweDAwMDQwZWQ0LCAweDAwMDQwZWQ0IH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ0ZWRjLCAweDAwMDQ0ZWRjLCAweDAwMDQ0ZWRjIH0sCisgICAgeyAweDAwMDBhMzQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ4ZWRlLCAweDAwMDQ4ZWRlLCAweDAwMDQ4ZWRlIH0sCisgICAgeyAweDAwMDBhMzRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDRjZjFlLCAweDAwMDRjZjFlLCAweDAwMDRjZjFlIH0sCisgICAgeyAweDAwMDBhMzUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDUwZjVlLCAweDAwMDUwZjVlLCAweDAwMDUwZjVlIH0sCisgICAgeyAweDAwMDBhMzU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU0ZjllLCAweDAwMDU0ZjllLCAweDAwMDU0ZjllIH0sCisgICAgeyAweDAwMDBhNzgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDYyLCAweDAwMDAwMDYyLCAweDAwMDAwMDYyIH0sCisgICAgeyAweDAwMDBhNzg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA0MDY0LCAweDAwMDA0MDY0LCAweDAwMDA0MDY0IH0sCisgICAgeyAweDAwMDBhNzg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA4MGE0LCAweDAwMDA4MGE0LCAweDAwMDA4MGE0IH0sCisgICAgeyAweDAwMDBhNzhjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjMGFhLCAweDAwMDBjMGFhLCAweDAwMDBjMGFhIH0sCisgICAgeyAweDAwMDBhNzkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMGFjLCAweDAwMDEwMGFjLCAweDAwMDEwMGFjIH0sCisgICAgeyAweDAwMDBhNzk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE0MGI0LCAweDAwMDE0MGI0LCAweDAwMDE0MGI0IH0sCisgICAgeyAweDAwMDBhNzk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE4MGY0LCAweDAwMDE4MGY0LCAweDAwMDE4MGY0IH0sCisgICAgeyAweDAwMDBhNzljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFjMTM0LCAweDAwMDFjMTM0LCAweDAwMDFjMTM0IH0sCisgICAgeyAweDAwMDBhN2EwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIwMTc0LCAweDAwMDIwMTc0LCAweDAwMDIwMTc0IH0sCisgICAgeyAweDAwMDBhN2E0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI0MTdjLCAweDAwMDI0MTdjLCAweDAwMDI0MTdjIH0sCisgICAgeyAweDAwMDBhN2E4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI4MTdlLCAweDAwMDI4MTdlLCAweDAwMDI4MTdlIH0sCisgICAgeyAweDAwMDBhN2FjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJjMWJlLCAweDAwMDJjMWJlLCAweDAwMDJjMWJlIH0sCisgICAgeyAweDAwMDBhN2IwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2I0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2I4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2JjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2MwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2M0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2M4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2NjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2QwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2Q0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMTgwMDAwLCAweDBhMTgwMDAwLCAweDBhMWFhMDAwLCAweDBhMWFhMDAwLCAweDBhMWFhMDAwIH0sCit9OworCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4N01vZGVzX3J4X2dhaW5fOTI4N18xXzFbXVs2XSA9IHsKKyAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLworICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCB9LAorICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCB9LAorICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCB9LAorICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyYywgMHgwMDAwYTEyYywgMHgwMDAwYTEyYyB9LAorICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCB9LAorICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCB9LAorICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCB9LAorICAgIHsgMHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIwYywgMHgwMDAwYTIwYywgMHgwMDAwYTIwYyB9LAorICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCB9LAorICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCB9LAorICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCB9LAorICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4YywgMHgwMDAwYTI4YywgMHgwMDAwYTI4YyB9LAorICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCB9LAorICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCB9LAorICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCB9LAorICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCB9LAorICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCB9LAorICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhYywgMHgwMDAwYTJhYywgMHgwMDAwYTJhYyB9LAorICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCB9LAorICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCB9LAorICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCB9LAorICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCB9LAorICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCB9LAorICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwYywgMHgwMDAwYTcwYywgMHgwMDAwYTcwYyB9LAorICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCB9LAorICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCB9LAorICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCB9LAorICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwYywgMHgwMDAwYWIwYywgMHgwMDAwYWIwYyB9LAorICAgIHsgMHgwMDAwOWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCB9LAorICAgIHsgMHgwMDAwOWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCB9LAorICAgIHsgMHgwMDAwOWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCB9LAorICAgIHsgMHgwMDAwOWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI4YywgMHgwMDAwYWI4YywgMHgwMDAwYWI4YyB9LAorICAgIHsgMHgwMDAwOWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCB9LAorICAgIHsgMHgwMDAwOWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCB9LAorICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCB9LAorICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCB9LAorICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCB9LAorICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCB9LAorICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCB9LAorICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwYywgMHgwMDAwY2IwYywgMHgwMDAwY2IwYyB9LAorICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCB9LAorICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCB9LAorICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCB9LAorICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I4YywgMHgwMDAwY2I4YywgMHgwMDAwY2I4YyB9LAorICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCB9LAorICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCB9LAorICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCB9LAorICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCB9LAorICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCB9LAorICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCB9LAorICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM4YywgMHgwMDAwZDM4YywgMHgwMDAwZDM4YyB9LAorICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCB9LAorICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCB9LAorICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCB9LAorICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCB9LAorICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCB9LAorICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhYywgMHgwMDAwZDNhYywgMHgwMDAwZDNhYyB9LAorICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCB9LAorICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCB9LAorICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCB9LAorICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCB9LAorICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCB9LAorICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCB9LAorICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCB9LAorICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCB9LAorICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCB9LAorICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCB9LAorICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI4YywgMHgwMDAwZmI4YywgMHgwMDAwZmI4YyB9LAorICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCB9LAorICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCB9LAorICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY4YywgMHgwMDAwZmY4YywgMHgwMDAwZmY4YyB9LAorICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCB9LAorICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCB9LAorICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCB9LAorICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCB9LAorICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCB9LAorICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhYywgMHgwMDAwZmZhYywgMHgwMDAwZmZhYyB9LAorICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCB9LAorICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCB9LAorICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSB9LAorICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSB9LAorICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSB9LAorICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCB9LAorICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSB9LAorICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSB9LAorICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSB9LAorICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSB9LAorICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSB9LAorICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCB9LAorICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSB9LAorICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSB9LAorICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiB9LAorICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiB9LAorICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSB9LAorICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSB9LAorICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiB9LAorICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiB9LAorICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSB9LAorICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNywgMHgwMDAwZmZjNywgMHgwMDAwZmZjNyB9LAorICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiB9LAorICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiB9LAorICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMywgMHgwMDAwZmZkMywgMHgwMDAwZmZkMyB9LAorICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNywgMHgwMDAwZmZkNywgMHgwMDAwZmZkNyB9LAorICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCB9LAorICAgIHsgMHgwMDAwYWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCB9LAorICAgIHsgMHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCB9LAorICAgIHsgMHgwMDAwYWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyYywgMHgwMDAwYTEyYywgMHgwMDAwYTEyYyB9LAorICAgIHsgMHgwMDAwYWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCB9LAorICAgIHsgMHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCB9LAorICAgIHsgMHgwMDAwYWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCB9LAorICAgIHsgMHgwMDAwYWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIwYywgMHgwMDAwYTIwYywgMHgwMDAwYTIwYyB9LAorICAgIHsgMHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCB9LAorICAgIHsgMHgwMDAwYWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCB9LAorICAgIHsgMHgwMDAwYWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCB9LAorICAgIHsgMHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4YywgMHgwMDAwYTI4YywgMHgwMDAwYTI4YyB9LAorICAgIHsgMHgwMDAwYWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCB9LAorICAgIHsgMHgwMDAwYWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCB9LAorICAgIHsgMHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCB9LAorICAgIHsgMHgwMDAwYWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCB9LAorICAgIHsgMHgwMDAwYWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCB9LAorICAgIHsgMHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhYywgMHgwMDAwYTJhYywgMHgwMDAwYTJhYyB9LAorICAgIHsgMHgwMDAwYWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCB9LAorICAgIHsgMHgwMDAwYWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCB9LAorICAgIHsgMHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCB9LAorICAgIHsgMHgwMDAwYWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCB9LAorICAgIHsgMHgwMDAwYWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCB9LAorICAgIHsgMHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwYywgMHgwMDAwYTcwYywgMHgwMDAwYTcwYyB9LAorICAgIHsgMHgwMDAwYWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCB9LAorICAgIHsgMHgwMDAwYWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCB9LAorICAgIHsgMHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCB9LAorICAgIHsgMHgwMDAwYWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwYywgMHgwMDAwYWIwYywgMHgwMDAwYWIwYyB9LAorICAgIHsgMHgwMDAwYWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCB9LAorICAgIHsgMHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCB9LAorICAgIHsgMHgwMDAwYWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCB9LAorICAgIHsgMHgwMDAwYWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI4YywgMHgwMDAwYWI4YywgMHgwMDAwYWI4YyB9LAorICAgIHsgMHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCB9LAorICAgIHsgMHgwMDAwYWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCB9LAorICAgIHsgMHgwMDAwYWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCB9LAorICAgIHsgMHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCB9LAorICAgIHsgMHgwMDAwYWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCB9LAorICAgIHsgMHgwMDAwYWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCB9LAorICAgIHsgMHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCB9LAorICAgIHsgMHgwMDAwYWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwYywgMHgwMDAwY2IwYywgMHgwMDAwY2IwYyB9LAorICAgIHsgMHgwMDAwYWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCB9LAorICAgIHsgMHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCB9LAorICAgIHsgMHgwMDAwYWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCB9LAorICAgIHsgMHgwMDAwYWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I4YywgMHgwMDAwY2I4YywgMHgwMDAwY2I4YyB9LAorICAgIHsgMHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCB9LAorICAgIHsgMHgwMDAwYWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCB9LAorICAgIHsgMHgwMDAwYWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCB9LAorICAgIHsgMHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCB9LAorICAgIHsgMHgwMDAwYWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCB9LAorICAgIHsgMHgwMDAwYWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCB9LAorICAgIHsgMHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM4YywgMHgwMDAwZDM4YywgMHgwMDAwZDM4YyB9LAorICAgIHsgMHgwMDAwYWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCB9LAorICAgIHsgMHgwMDAwYWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCB9LAorICAgIHsgMHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCB9LAorICAgIHsgMHgwMDAwYWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCB9LAorICAgIHsgMHgwMDAwYWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCB9LAorICAgIHsgMHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhYywgMHgwMDAwZDNhYywgMHgwMDAwZDNhYyB9LAorICAgIHsgMHgwMDAwYWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCB9LAorICAgIHsgMHgwMDAwYWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCB9LAorICAgIHsgMHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCB9LAorICAgIHsgMHgwMDAwYWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCB9LAorICAgIHsgMHgwMDAwYWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCB9LAorICAgIHsgMHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCB9LAorICAgIHsgMHgwMDAwYWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCB9LAorICAgIHsgMHgwMDAwYWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCB9LAorICAgIHsgMHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCB9LAorICAgIHsgMHgwMDAwYWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCB9LAorICAgIHsgMHgwMDAwYWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI4YywgMHgwMDAwZmI4YywgMHgwMDAwZmI4YyB9LAorICAgIHsgMHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCB9LAorICAgIHsgMHgwMDAwYWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCB9LAorICAgIHsgMHgwMDAwYWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY4YywgMHgwMDAwZmY4YywgMHgwMDAwZmY4YyB9LAorICAgIHsgMHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCB9LAorICAgIHsgMHgwMDAwYWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCB9LAorICAgIHsgMHgwMDAwYWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCB9LAorICAgIHsgMHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCB9LAorICAgIHsgMHgwMDAwYWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCB9LAorICAgIHsgMHgwMDAwYWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhYywgMHgwMDAwZmZhYywgMHgwMDAwZmZhYyB9LAorICAgIHsgMHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCB9LAorICAgIHsgMHgwMDAwYWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCB9LAorICAgIHsgMHgwMDAwYWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSB9LAorICAgIHsgMHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSB9LAorICAgIHsgMHgwMDAwYWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSB9LAorICAgIHsgMHgwMDAwYWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCB9LAorICAgIHsgMHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSB9LAorICAgIHsgMHgwMDAwYWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSB9LAorICAgIHsgMHgwMDAwYWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSB9LAorICAgIHsgMHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSB9LAorICAgIHsgMHgwMDAwYWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSB9LAorICAgIHsgMHgwMDAwYWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCB9LAorICAgIHsgMHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSB9LAorICAgIHsgMHgwMDAwYWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSB9LAorICAgIHsgMHgwMDAwYWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiB9LAorICAgIHsgMHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiB9LAorICAgIHsgMHgwMDAwYWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSB9LAorICAgIHsgMHgwMDAwYWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSB9LAorICAgIHsgMHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiB9LAorICAgIHsgMHgwMDAwYWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiB9LAorICAgIHsgMHgwMDAwYWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSB9LAorICAgIHsgMHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNywgMHgwMDAwZmZjNywgMHgwMDAwZmZjNyB9LAorICAgIHsgMHgwMDAwYWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiB9LAorICAgIHsgMHgwMDAwYWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiB9LAorICAgIHsgMHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMywgMHgwMDAwZmZkMywgMHgwMDAwZmZkMyB9LAorICAgIHsgMHgwMDAwYWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNywgMHgwMDAwZmZkNywgMHgwMDAwZmZkNyB9LAorICAgIHsgMHgwMDAwYWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOTg0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMTA2NywgMHgwMDAwMTA2NywgMHgwMDAwMTA2NyB9LAorICAgIHsgMHgwMDAwYTg0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMTA2NywgMHgwMDAwMTA2NywgMHgwMDAwMTA2NyB9LAorfTsKKworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODdQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4N18xXzFbXVsyXSA9IHsKKyAgICB7MHgwMDAwNDA0MCwgIDB4OTI0OGZkMDAgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MjQ5MjQ5MjQgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4YTgwMDAwMTkgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MTMxNjA4MjAgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4ZTU5ODA1NjAgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4YzAxZGNmZmQgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MWFhYWJlNDEgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4YmUxMDU1NTQgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MDAwNDMwMDcgfSwKKyAgICB7MHgwMDAwNDA0NCwgIDB4MDAwMDAwMDAgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg3UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODdfMV8xW11bMl0gPSB7CisgICAgezB4MDAwMDQwNDAsICAweDkyNDhmZDAwIH0sCisgICAgezB4MDAwMDQwNDAsICAweDI0OTI0OTI0IH0sCisgICAgezB4MDAwMDQwNDAsICAweGE4MDAwMDE5IH0sCisgICAgezB4MDAwMDQwNDAsICAweDEzMTYwODIwIH0sCisgICAgezB4MDAwMDQwNDAsICAweGU1OTgwNTYwIH0sCisgICAgezB4MDAwMDQwNDAsICAweGMwMWRjZmZjIH0sCisgICAgezB4MDAwMDQwNDAsICAweDFhYWFiZTQxIH0sCisgICAgezB4MDAwMDQwNDAsICAweGJlMTA1NTU0IH0sCisgICAgezB4MDAwMDQwNDAsICAweDAwMDQzMDA3IH0sCisgICAgezB4MDAwMDQwNDQsICAweDAwMDAwMDAwIH0sCit9OworCisKKy8qIEFSOTI3MSBpbml0aWFsaXphdGlvbiB2YWx1ZXMgYXV0b21hdGljYWx5IGNyZWF0ZWQ6IDAzLzIzLzA5ICovCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI3MU1vZGVzXzkyNzFfMV8wW11bNl0gPSB7CiAgICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMGIwLCAweDAwMDAwZTYwLCAweDAwMDAxY2MwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0sCkBAIC00MTM5LDEwICs2MzgzLDExIEBACiAgICAgeyAweDAwMDA5ODQwLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlIH0sCiAgICAgeyAweDAwMDA5ODQ0LCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIxNjIwLCAweDAzNzIxNjIwLCAweDAzNzIxNmEwIH0sCiAgICAgeyAweDAwMDA5ODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDUzLCAweDAwMDAxMDUzLCAweDAwMDAxMDU5IH0sCisgICAgeyAweDAwMDBhODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDUzLCAweDAwMDAxMDUzLCAweDAwMDAxMDU5IH0sCiAgICAgeyAweDAwMDA5ODUwLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyIH0sCiAgICAgeyAweDAwMDA5ODU4LCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlIH0sCiAgICAgeyAweDAwMDA5ODVjLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzc2MDVlLCAweDMxMzc2MDVlLCAweDMxMzk2MDVlIH0sCi0gICAgeyAweDAwMDA5ODYwLCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDIwLCAweDAwMDU4ZDIwLCAweDAwMDU4ZDE4IH0sCisgICAgeyAweDAwMDA5ODYwLCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4IH0sCiAgICAgeyAweDAwMDA5ODY0LCAweDAwMDBmZTAwLCAweDAwMDBmZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0sCiAgICAgeyAweDAwMDA5ODY4LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwIH0sCiAgICAgeyAweDAwMDA5ODZjLCAweDA2OTAzMDgxLCAweDA2OTAzMDgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxIH0sCkBAIC00NDE5LDEzICs2NjY0LDMzIEBACiAgICAgeyAweDAwMDBhYmZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMjA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0sCiAgICAgeyAweDAwMDBhMjBjLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDFmMDAwLCAweDAwMDFmMDAwLCAweDAwMDFmMDAwIH0sCisgICAgeyAweDAwMDBiMjBjLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDFmMDAwLCAweDAwMDFmMDAwLCAweDAwMDFmMDAwIH0sCiAgICAgeyAweDAwMDBhMjFjLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0sCiAgICAgeyAweDAwMDBhMjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMjUwLCAweDAwMDRmMDAwLCAweDAwMDRmMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwIH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMjFjNjUyLCAweDBhMjFjNjUyLCAweDBhMjE4NjUyLCAweDBhMjE4NjUyLCAweDBhMjJhNjUyIH0sCisgICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA5MjAwLCAweDAwMDA5MjAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMjA4LCAweDAwMDEwMjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE5NjA4LCAweDAwMDE5NjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFlNjEwLCAweDAwMDFlNjEwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJkNmQwLCAweDAwMDJkNmQwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM5NzU4LCAweDAwMDM5NzU4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNiNzU5LCAweDAwMDNiNzU5LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNkNzVhLCAweDAwMDNkNzVhLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQxNzVjLCAweDAwMDQxNzVjLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ1NzVlLCAweDAwMDQ1NzVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ5NzlmLCAweDAwMDQ5NzlmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDRkN2RmLCAweDAwMDRkN2RmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDM2OGRlLCAweDAwMDM2OGRlLCAweDAwMDM2OGRlLCAweDAwMDM2OGRlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMzU4LCAweDc5OTlhYTAyLCAweDc5OTlhYTAyLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NUNvbW1vbl85Mjg1XzFfMltdWzJdID0geworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyNzFDb21tb25fOTI3MV8xXzBbXVsyXSA9IHsKICAgICB7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDAwMzAsIDB4MDAwMjAwNDUgfSwKICAgICB7IDB4MDAwMDAwMzQsIDB4MDAwMDAwMDUgfSwKQEAgLTQ1MTIsOSArNjc3Nyw2IEBACiAgICAgeyAweDAwMDA0MDI0LCAweDAwMDAwMDFmIH0sCiAgICAgeyAweDAwMDA0MDYwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA0MDY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3MDEwLCAweDAwMDAwMDMxIH0sCi0gICAgeyAweDAwMDA3MDM0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3MDM4LCAweDAwMDAwNGMyIH0sCiAgICAgeyAweDAwMDA4MDA0LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MDA4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MDBjLCAweDAwMDAwMDAwIH0sCkBAIC00NTI0LDExICs2Nzg2LDE1IEBACiAgICAgeyAweDAwMDA4MDNjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MDQ4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MDU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDU4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA4MDU4LCAweDAyMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MDVjLCAweDAwMGZjNzhmIH0sCiAgICAgeyAweDAwMDA4MDYwLCAweDAwMDAwMDBmIH0sCiAgICAgeyAweDAwMDA4MDY0LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MDcwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA4MGIwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA4MGI0LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA4MGI4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA4MGJjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MGMwLCAweDJhODAwMDFhIH0sCiAgICAgeyAweDAwMDA4MGM0LCAweDA1ZGMwMWUwIH0sCiAgICAgeyAweDAwMDA4MGM4LCAweDFmNDAyNzEwIH0sCkBAIC00NTUxLDcgKzY4MTcsNyBAQAogICAgIHsgMHgwMDAwODExMCwgMHgwMDAwMDE2OCB9LAogICAgIHsgMHgwMDAwODExOCwgMHgwMDAxMDBhYSB9LAogICAgIHsgMHgwMDAwODExYywgMHgwMDAwMzIxMCB9LAotICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgxMCB9LAorICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgxNCB9LAogICAgIHsgMHgwMDAwODEyNCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODEyOCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODEyYywgMHgwMDAwMDAwMCB9LApAQCAtNDYxOSw2ICs2ODg1LDM3IEBACiAgICAgeyAweDAwMDA4MzNjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MzQwLCAweDAwMDEwMzgwIH0sCiAgICAgeyAweDAwMDA4MzQ0LCAweDAwNTgxMDQzIH0sCisgICAgeyAweDAwMDA3MDEwLCAweDAwMDAwMDMwIH0sCisgICAgeyAweDAwMDA3MDM0LCAweDAwMDAwMDAyIH0sCisgICAgeyAweDAwMDA3MDM4LCAweDAwMDAwNGMyIH0sCisgICAgeyAweDAwMDA3ODAwLCAweDAwMTQwMDAwIH0sCisgICAgeyAweDAwMDA3ODA0LCAweDBlNDU0OGQ4IH0sCisgICAgeyAweDAwMDA3ODA4LCAweDU0MjE0NTE0IH0sCisgICAgeyAweDAwMDA3ODBjLCAweDAyMDI1ODIwIH0sCisgICAgeyAweDAwMDA3ODEwLCAweDcxYzBkMzg4IH0sCisgICAgeyAweDAwMDA3ODE0LCAweDkyNDkzNGE4IH0sCisgICAgeyAweDAwMDA3ODFjLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzA0IH0sCisgICAgeyAweDAwMDA3ODI0LCAweDAwZDg2YmZmIH0sCisgICAgeyAweDAwMDA3ODI4LCAweDY2OTY0MzAwIH0sCisgICAgeyAweDAwMDA3ODJjLCAweDhkYjZkOTYxIH0sCisgICAgeyAweDAwMDA3ODMwLCAweDhkYjZkOTZjIH0sCisgICAgeyAweDAwMDA3ODM0LCAweDYxNDAwMDhiIH0sCisgICAgeyAweDAwMDA3ODM4LCAweDAwMDAwMDI5IH0sCisgICAgeyAweDAwMDA3ODNjLCAweDcyZWUwYTcyIH0sCisgICAgeyAweDAwMDA3ODQwLCAweGJiZmZmZmZjIH0sCisgICAgeyAweDAwMDA3ODQ0LCAweDAwMGMwZGI2IH0sCisgICAgeyAweDAwMDA3ODQ4LCAweDZkYjYxYjZmIH0sCisgICAgeyAweDAwMDA3ODRjLCAweDZkOWI2NmRiIH0sCisgICAgeyAweDAwMDA3ODUwLCAweDZkOGM2ZGJhIH0sCisgICAgeyAweDAwMDA3ODU0LCAweDAwMDQwMDAwIH0sCisgICAgeyAweDAwMDA3ODU4LCAweGRiMDAzMDEyIH0sCisgICAgeyAweDAwMDA3ODVjLCAweDA0OTI0OTE0IH0sCisgICAgeyAweDAwMDA3ODYwLCAweDIxMDg0MjEwIH0sCisgICAgeyAweDAwMDA3ODY0LCAweGY3ZDdmZmRlIH0sCisgICAgeyAweDAwMDA3ODY4LCAweGMyMDM0MDgwIH0sCisgICAgeyAweDAwMDA3ODZjLCAweDQ4NjA5ZWI0IH0sCisgICAgeyAweDAwMDA3ODcwLCAweDEwMTQyYzAwIH0sCiAgICAgeyAweDAwMDA5ODA4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5ODBjLCAweGFmZTY4ZTMwIH0sCiAgICAgeyAweDAwMDA5ODEwLCAweGZkMTRlMDAwIH0sCkBAIC00NjMzLDcgKzY5MzAsNyBAQAogICAgIHsgMHgwMDAwOTkwNCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTkwOCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTkwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTkxMCwgMHgwMTAwMjMxMCB9LAorICAgIHsgMHgwMDAwOTkxMCwgMHgzMDAwMjMxMCB9LAogICAgIHsgMHgwMDAwOTkxYywgMHgxMDAwMGZmZiB9LAogICAgIHsgMHgwMDAwOTkyMCwgMHgwNDkwMDAwMCB9LAogICAgIHsgMHgwMDAwOTkyOCwgMHgwMDAwMDAwMSB9LApAQCAtNDY0NSw3ICs2OTQyLDcgQEAKICAgICB7IDB4MDAwMDk5NDgsIDB4OTI4MGMwMGEgfSwKICAgICB7IDB4MDAwMDk5NGMsIDB4MDAwMjAwMjggfSwKICAgICB7IDB4MDAwMDk5NTQsIDB4NWYzY2EzZGUgfSwKLSAgICB7IDB4MDAwMDk5NTgsIDB4MjEwOGVjZmYgfSwKKyAgICB7IDB4MDAwMDk5NTgsIDB4MDEwOGVjZmYgfSwKICAgICB7IDB4MDAwMDk5NjgsIDB4MDAwMDAzY2UgfSwKICAgICB7IDB4MDAwMDk5NzAsIDB4MTkyYmI1MTUgfSwKICAgICB7IDB4MDAwMDk5NzQsIDB4MDAwMDAwMDAgfSwKQEAgLTQ2NzEsNiArNjk2OCw5IEBACiAgICAgeyAweDAwMDA5OWU4LCAweDNjNDY2NDc4IH0sCiAgICAgeyAweDAwMDA5OWVjLCAweDBjYzgwY2FhIH0sCiAgICAgeyAweDAwMDA5OWYwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMWY4LCAweDcxNzMzZDAxIH0sCisgICAgeyAweDAwMDBhMWZjLCAweGQwYWQ1YzEyIH0sCiAgICAgeyAweDAwMDBhMjA4LCAweDgwM2U2OGM4IH0sCiAgICAgeyAweDAwMDBhMjEwLCAweDQwODBhMzMzIH0sCiAgICAgeyAweDAwMDBhMjE0LCAweDAwMjA2YzEwIH0sCkBAIC00NjkwLDIxICs2OTkwLDEzIEBACiAgICAgeyAweDAwMDBhMjYwLCAweGRmYTkwZjAxIH0sCiAgICAgeyAweDAwMDBhMjY4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMjZjLCAweDBlYmFlOWU2IH0sCi0gICAgeyAweDAwMDBkMjcwLCAweDBkODIwODIwIH0sCi0gICAgeyAweDAwMDBkMzVjLCAweDA3ZmZmZmVmIH0sCi0gICAgeyAweDAwMDBkMzYwLCAweDBmZmZmZmU3IH0sCi0gICAgeyAweDAwMDBkMzY0LCAweDE3ZmZmZmU1IH0sCi0gICAgeyAweDAwMDBkMzY4LCAweDFmZmZmZmU0IH0sCi0gICAgeyAweDAwMDBkMzZjLCAweDM3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzcwLCAweDNmZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc0LCAweDU3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc4LCAweDVmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzdjLCAweDdmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzgwLCAweDdmM2M3YmJhIH0sCi0gICAgeyAweDAwMDBkMzg0LCAweGYzMzA3ZmYwIH0sCisgICAgeyAweDAwMDBhMjc4LCAweDNiZGVmN2JkIH0sCisgICAgeyAweDAwMDBhMjdjLCAweDA1MGU4M2JkIH0sCiAgICAgeyAweDAwMDBhMzg4LCAweDBjMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMzhjLCAweDIwMjAyMDIwIH0sCiAgICAgeyAweDAwMDBhMzkwLCAweDIwMjAyMDIwIH0sCisgICAgeyAweDAwMDBhMzk0LCAweDNiZGVmN2JkIH0sCisgICAgeyAweDAwMDBhMzk4LCAweDAwMDAwM2JkIH0sCiAgICAgeyAweDAwMDBhMzljLCAweDAwMDAwMDAxIH0sCiAgICAgeyAweDAwMDBhM2EwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhM2E0LCAweDAwMDAwMDAwIH0sCkBAIC00NzE5LDEzMCArNzAxMSwyMyBAQAogICAgIHsgMHgwMDAwYTNjYywgMHgyMDIwMjAyMCB9LAogICAgIHsgMHgwMDAwYTNkMCwgMHgyMDIwMjAyMCB9LAogICAgIHsgMHgwMDAwYTNkNCwgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTNkYywgMHgzYmRlZjdiZCB9LAorICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDNiZCB9LAogICAgIHsgMHgwMDAwYTNlNCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTNlOCwgMHgxOGM0MzQzMyB9LAogICAgIHsgMHgwMDAwYTNlYywgMHgwMGY3MDA4MSB9LAotICAgIHsgMHgwMDAwNzgwMCwgMHgwMDE0MDAwMCB9LAotICAgIHsgMHgwMDAwNzgwNCwgMHgwZTQ1NDhkOCB9LAotICAgIHsgMHgwMDAwNzgwOCwgMHg1NDIxNDUxNCB9LAotICAgIHsgMHgwMDAwNzgwYywgMHgwMjAyNTgyMCB9LAotICAgIHsgMHgwMDAwNzgxMCwgMHg3MWMwZDM4OCB9LAotICAgIHsgMHgwMDAwNzgxNCwgMHg5MjQ5MzRhOCB9LAotICAgIHsgMHgwMDAwNzgxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwNzgyNCwgMHgwMGQ4NmZmZiB9LAotICAgIHsgMHgwMDAwNzgyOCwgMHgyNmQyNDkxYiB9LAotICAgIHsgMHgwMDAwNzgyYywgMHg2ZTM2ZDk3YiB9LAotICAgIHsgMHgwMDAwNzgzMCwgMHhlZGI2ZDk2ZSB9LAotICAgIHsgMHgwMDAwNzgzNCwgMHg3MTQwMDA4NyB9LAotICAgIHsgMHgwMDAwNzgzYywgMHgwMDAxZmZmZSB9LAotICAgIHsgMHgwMDAwNzg0MCwgMHhmZmViMWEyMCB9LAotICAgIHsgMHgwMDAwNzg0NCwgMHgwMDBjMGRiNiB9LAotICAgIHsgMHgwMDAwNzg0OCwgMHg2ZGI2MWI2ZiB9LAotICAgIHsgMHgwMDAwNzg0YywgMHg2ZDliNjZkYiB9LAotICAgIHsgMHgwMDAwNzg1MCwgMHg2ZDhjNmRiYSB9LAotICAgIHsgMHgwMDAwNzg1NCwgMHgwMDA0MDAwMCB9LAotICAgIHsgMHgwMDAwNzg1OCwgMHhkYjAwMzAxMiB9LAotICAgIHsgMHgwMDAwNzg1YywgMHgwNDkyNDkxNCB9LAotICAgIHsgMHgwMDAwNzg2MCwgMHgyMTA4NDIxMCB9LAotICAgIHsgMHgwMDAwNzg2NCwgMHhmN2Q3ZmZkZSB9LAotICAgIHsgMHgwMDAwNzg2OCwgMHhjMjAzNDA4MCB9LAotICAgIHsgMHgwMDAwNzg3MCwgMHgxMDE0MmMwMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODVNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fOTI4NV8xXzJbXVs2XSA9IHsKLSAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLwotICAgIHsgMHgwMDAwYTMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwNTIwMCwgMHgwMDAwNTIwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwNzIwMSwgMHgwMDAwNzIwMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYjI0MCwgMHgwMDAwYjI0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDI0MSwgMHgwMDAwZDI0MSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjQ0MCwgMHgwMDAwZjQ0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxNDY0MCwgMHgwMDAxNDY0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxODY4MCwgMHgwMDAxODY4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxOTg0MSwgMHgwMDAxOTg0MSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxY2E0MCwgMHgwMDAxY2E0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxZmE4MCwgMHgwMDAxZmE4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyM2FjMCwgMHgwMDAyM2FjMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyYWI0MCwgMHgwMDAyYWI0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzM2Q4MiwgMHgwMDAzM2Q4MiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzYywgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0OCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0YywgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM1MCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM1NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwNzgzOCwgMHhmYWM2ODgwMywgMHhmYWM2ODgwMywgMHhmYWM2ODgwMywgMHhmYWM2ODgwMywgMHhmYWM2ODgwMyB9LAotICAgIHsgMHgwMDAwNzg2YywgMHgwODYwOWViZSwgMHgwODYwOWViZSwgMHgwODYwOWViZSwgMHgwODYwOWViZSwgMHgwODYwOWViZSB9LAotICAgIHsgMHgwMDAwNzgyMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCB9LAotICAgIHsgMHgwMDAwYTI3NCwgMHgwYTIyYTY1MiwgMHgwYTIyYTY1MiwgMHgwYTIxYTY1MiwgMHgwYTIxYTY1MiwgMHgwYTIyYTY1MiB9LAotICAgIHsgMHgwMDAwYTI3OCwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSB9LAotICAgIHsgMHgwMDAwYTI3YywgMHgwNTA3MDFjZSwgMHgwNTA3MDFjZSwgMHgwNTA3MDFjZSwgMHgwNTA3MDFjZSwgMHgwNTA3MDFjZSB9LAotICAgIHsgMHgwMDAwYTM5NCwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSB9LAotICAgIHsgMHgwMDAwYTM5OCwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSB9LAotICAgIHsgMHgwMDAwYTNkYywgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSB9LAotICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSB9LAotfTsKLQotc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODVNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODVfMV8yW11bNl0gPSB7Ci0gICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KLSAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDkyMDAsIDB4MDAwMDkyMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAyMDgsIDB4MDAwMTAyMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTk2MDgsIDB4MDAwMTk2MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjI2MTgsIDB4MDAwMjI2MTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmE2YzksIDB4MDAwMmE2YzksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzE3MTAsIDB4MDAwMzE3MTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzU3MTgsIDB4MDAwMzU3MTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzg3NTgsIDB4MDAwMzg3NTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2M3NWEsIDB4MDAwM2M3NWEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDA3NWMsIDB4MDAwNDA3NWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDQ3NWUsIDB4MDAwNDQ3NWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDY3OWYsIDB4MDAwNDY3OWYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDg3ZGYsIDB4MDAwNDg3ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzM2MsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDgsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNTAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNTQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDEsIDB4ZmFjNjg4MDEsIDB4ZmFjNjg4MDEsIDB4ZmFjNjg4MDEsIDB4ZmFjNjg4MDEgfSwKLSAgICB7IDB4MDAwMDc4NmMsIDB4NDg2MDllYjQsIDB4NDg2MDllYjQsIDB4NDg2MDllYjQsIDB4NDg2MDllYjQsIDB4NDg2MDllYjQgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGEyMWM2NTIsIDB4MGEyMWM2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMmE2NTIgfSwKLSAgICB7IDB4MDAwMGEyNzgsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMgfSwKLSAgICB7IDB4MDAwMGEyN2MsIDB4MDUwZTAzOWMsIDB4MDUwZTAzOWMsIDB4MDUwZTAzOWMsIDB4MDUwZTAzOWMsIDB4MDUwZTAzOWMgfSwKLSAgICB7IDB4MDAwMGEzOTQsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMgfSwKLSAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMgfSwKLSAgICB7IDB4MDAwMGEzZGMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMgfSwKLSAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODVfMV8yW11bMl0gPSB7Ci0gICAgezB4MDAwMDQwNDAsICAweDkyNDhmZDAwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweDI0OTI0OTI0IH0sCi0gICAgezB4MDAwMDQwNDAsICAweGE4MDAwMDE5IH0sCi0gICAgezB4MDAwMDQwNDAsICAweDEzMTYwODIwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGU1OTgwNTYwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGMwMWRjZmZkIH0sCi0gICAgezB4MDAwMDQwNDAsICAweDFhYWFiZTQxIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGJlMTA1NTU0IH0sCi0gICAgezB4MDAwMDQwNDAsICAweDAwMDQzMDA3IH0sCi0gICAgezB4MDAwMDQwNDQsICAweDAwMDAwMDAwIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NVBjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg1XzFfMltdWzJdID0gewotICAgIHsweDAwMDA0MDQwLCAgMHg5MjQ4ZmQwMCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgyNDkyNDkyNCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhhODAwMDAxOSB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgxMzE2MDgyMCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhlNTk4MDU2MCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhjMDFkY2ZmYyB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgxYWFhYmU0MSB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhiZTEwNTU1NCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgwMDA0MzAwNyB9LAotICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTNmMCwgMHgwMTAzNmEyZiB9LAorICAgIHsgMHgwMDAwYTNmNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwZDI3MCwgMHgwZDgyMDgyMCB9LAorICAgIHsgMHgwMDAwZDM1YywgMHgwN2ZmZmZlZiB9LAorICAgIHsgMHgwMDAwZDM2MCwgMHgwZmZmZmZlNyB9LAorICAgIHsgMHgwMDAwZDM2NCwgMHgxN2ZmZmZlNSB9LAorICAgIHsgMHgwMDAwZDM2OCwgMHgxZmZmZmZlNCB9LAorICAgIHsgMHgwMDAwZDM2YywgMHgzN2ZmZmZlMyB9LAorICAgIHsgMHgwMDAwZDM3MCwgMHgzZmZmZmZlMyB9LAorICAgIHsgMHgwMDAwZDM3NCwgMHg1N2ZmZmZlMyB9LAorICAgIHsgMHgwMDAwZDM3OCwgMHg1ZmZmZmZlMiB9LAorICAgIHsgMHgwMDAwZDM3YywgMHg3ZmZmZmZlMiB9LAorICAgIHsgMHgwMDAwZDM4MCwgMHg3ZjNjN2JiYSB9LAorICAgIHsgMHgwMDAwZDM4NCwgMHhmMzMwN2ZmMCB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYwppbmRleCA4YWU0ZWMyLi44MDBiZmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCkBAIC00MCwyMCArNDAsMTUgQEAKIAlyZXR1cm4gUkVHX1JFQUQoYWgsIEFSX1FUWERQKHEpKTsKIH0KIAotYm9vbCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEsIHUzMiB0eGRwKQordm9pZCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEsIHUzMiB0eGRwKQogewogCVJFR19XUklURShhaCwgQVJfUVRYRFAocSksIHR4ZHApOwotCi0JcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfdHhzdGFydChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpCit2b2lkIGF0aDlrX2h3X3R4c3RhcnQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKQogewogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1FVRVVFLCAiRW5hYmxlIFRYRSBvbiBxdWV1ZTogJXVcbiIsIHEpOwotCiAJUkVHX1dSSVRFKGFoLCBBUl9RX1RYRSwgMSA8PCBxKTsKLQotCXJldHVybiB0cnVlOwogfQogCiB1MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKQEAgLTE3OCw3ICsxNzMsNyBAQAogI3VuZGVmIEFUSDlLX1RJTUVfUVVBTlRVTQogfQogCi1ib29sIGF0aDlrX2h3X2ZpbGx0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X2ZpbGx0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkgdTMyIHNlZ0xlbiwgYm9vbCBmaXJzdFNlZywKIAkJCSBib29sIGxhc3RTZWcsIGNvbnN0IHN0cnVjdCBhdGhfZGVzYyAqZHMwKQogewpAQCAtMjAyLDggKzE5Nyw2IEBACiAJYWRzLT5kc190eHN0YXR1czQgPSBhZHMtPmRzX3R4c3RhdHVzNSA9IDA7CiAJYWRzLT5kc190eHN0YXR1czYgPSBhZHMtPmRzX3R4c3RhdHVzNyA9IDA7CiAJYWRzLT5kc190eHN0YXR1czggPSBhZHMtPmRzX3R4c3RhdHVzOSA9IDA7Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBhdGg5a19od19jbGVhcnR4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcykKQEAgLTgyNSwxMyArODE4LDI5IEBACiAJZHMtPmRzX3J4c3RhdC5yc19kYXRhbGVuID0gYWRzLmRzX3J4c3RhdHVzMSAmIEFSX0RhdGFMZW47CiAJZHMtPmRzX3J4c3RhdC5yc190c3RhbXAgPSBhZHMuQVJfUmN2VGltZXN0YW1wOwogCi0JZHMtPmRzX3J4c3RhdC5yc19yc3NpID0gTVMoYWRzLmRzX3J4c3RhdHVzNCwgQVJfUnhSU1NJQ29tYmluZWQpOwotCWRzLT5kc19yeHN0YXQucnNfcnNzaV9jdGwwID0gTVMoYWRzLmRzX3J4c3RhdHVzMCwgQVJfUnhSU1NJQW50MDApOwotCWRzLT5kc19yeHN0YXQucnNfcnNzaV9jdGwxID0gTVMoYWRzLmRzX3J4c3RhdHVzMCwgQVJfUnhSU1NJQW50MDEpOwotCWRzLT5kc19yeHN0YXQucnNfcnNzaV9jdGwyID0gTVMoYWRzLmRzX3J4c3RhdHVzMCwgQVJfUnhSU1NJQW50MDIpOwotCWRzLT5kc19yeHN0YXQucnNfcnNzaV9leHQwID0gTVMoYWRzLmRzX3J4c3RhdHVzNCwgQVJfUnhSU1NJQW50MTApOwotCWRzLT5kc19yeHN0YXQucnNfcnNzaV9leHQxID0gTVMoYWRzLmRzX3J4c3RhdHVzNCwgQVJfUnhSU1NJQW50MTEpOwotCWRzLT5kc19yeHN0YXQucnNfcnNzaV9leHQyID0gTVMoYWRzLmRzX3J4c3RhdHVzNCwgQVJfUnhSU1NJQW50MTIpOworCWlmIChhZHMuZHNfcnhzdGF0dXM4ICYgQVJfUG9zdERlbGltQ1JDRXJyKSB7CisJCWRzLT5kc19yeHN0YXQucnNfcnNzaSA9IEFUSDlLX1JTU0lfQkFEOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfY3RsMCA9IEFUSDlLX1JTU0lfQkFEOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfY3RsMSA9IEFUSDlLX1JTU0lfQkFEOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfY3RsMiA9IEFUSDlLX1JTU0lfQkFEOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfZXh0MCA9IEFUSDlLX1JTU0lfQkFEOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfZXh0MSA9IEFUSDlLX1JTU0lfQkFEOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfZXh0MiA9IEFUSDlLX1JTU0lfQkFEOworCX0gZWxzZSB7CisJCWRzLT5kc19yeHN0YXQucnNfcnNzaSA9IE1TKGFkcy5kc19yeHN0YXR1czQsIEFSX1J4UlNTSUNvbWJpbmVkKTsKKwkJZHMtPmRzX3J4c3RhdC5yc19yc3NpX2N0bDAgPSBNUyhhZHMuZHNfcnhzdGF0dXMwLAorCQkJCQkJQVJfUnhSU1NJQW50MDApOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfY3RsMSA9IE1TKGFkcy5kc19yeHN0YXR1czAsCisJCQkJCQlBUl9SeFJTU0lBbnQwMSk7CisJCWRzLT5kc19yeHN0YXQucnNfcnNzaV9jdGwyID0gTVMoYWRzLmRzX3J4c3RhdHVzMCwKKwkJCQkJCUFSX1J4UlNTSUFudDAyKTsKKwkJZHMtPmRzX3J4c3RhdC5yc19yc3NpX2V4dDAgPSBNUyhhZHMuZHNfcnhzdGF0dXM0LAorCQkJCQkJQVJfUnhSU1NJQW50MTApOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfZXh0MSA9IE1TKGFkcy5kc19yeHN0YXR1czQsCisJCQkJCQlBUl9SeFJTU0lBbnQxMSk7CisJCWRzLT5kc19yeHN0YXQucnNfcnNzaV9leHQyID0gTVMoYWRzLmRzX3J4c3RhdHVzNCwKKwkJCQkJCUFSX1J4UlNTSUFudDEyKTsKKwl9CiAJaWYgKGFkcy5kc19yeHN0YXR1czggJiBBUl9SeEtleUlkeFZhbGlkKQogCQlkcy0+ZHNfcnhzdGF0LnJzX2tleWl4ID0gTVMoYWRzLmRzX3J4c3RhdHVzOCwgQVJfS2V5SWR4KTsKIAllbHNlCkBAIC04NzIsNyArODgxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotYm9vbCBhdGg5a19od19zZXR1cHJ4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfc2V0dXByeGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkgIHUzMiBzaXplLCB1MzIgZmxhZ3MpCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjICphZHMgPSBBUjU0MTZERVNDKGRzKTsKQEAgLTg4NSw4ICs4OTQsNiBAQAogCWFkcy0+ZHNfcnhzdGF0dXM4ICY9IH5BUl9SeERvbmU7CiAJaWYgKCEocENhcC0+aHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKQogCQltZW1zZXQoJihhZHMtPnUpLCAwLCBzaXplb2YoYWRzLT51KSk7Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBhdGg5a19od19zZXRyeGFib3J0KHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIHNldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaAppbmRleCAxMTc2YmNlLi5mNTZlNzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oCkBAIC01NjgsNiArNTY4LDcgQEAKIAlBVEg5S19SWF9GSUxURVJfUFJPQkVSRVEgPSAweDAwMDAwMDgwLAogCUFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIgPSAweDAwMDAwMTAwLAogCUFUSDlLX1JYX0ZJTFRFUl9NWUJFQUNPTiA9IDB4MDAwMDAyMDAsCisJQVRIOUtfUlhfRklMVEVSX0NPTVBfQkFSID0gMHgwMDAwMDQwMCwKIAlBVEg5S19SWF9GSUxURVJfUFNQT0xMID0gMHgwMDAwNDAwMCwKIAlBVEg5S19SWF9GSUxURVJfUEhZUkFEQVIgPSAweDAwMDAyMDAwLAogCUFUSDlLX1JYX0ZJTFRFUl9NQ0FTVF9CQ0FTVF9BTEwgPSAweDAwMDA4MDAwLApAQCAtNjI4LDEyICs2MjksMTIgQEAKIHN0cnVjdCBhdGhfcmF0ZV90YWJsZTsKIAogdTMyIGF0aDlrX2h3X2dldHR4YnVmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7Ci1ib29sIGF0aDlrX2h3X3B1dHR4YnVmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSwgdTMyIHR4ZHApOwotYm9vbCBhdGg5a19od190eHN0YXJ0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7Cit2b2lkIGF0aDlrX2h3X3B1dHR4YnVmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSwgdTMyIHR4ZHApOwordm9pZCBhdGg5a19od190eHN0YXJ0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7CiB1MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7CiBib29sIGF0aDlrX2h3X3VwZGF0ZXR4dHJpZ2xldmVsKHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIGJJbmNUcmlnTGV2ZWwpOwogYm9vbCBhdGg5a19od19zdG9wdHhkbWEoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKTsKLWJvb2wgYXRoOWtfaHdfZmlsbHR4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfZmlsbHR4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCSB1MzIgc2VnTGVuLCBib29sIGZpcnN0U2VnLAogCQkJIGJvb2wgbGFzdFNlZywgY29uc3Qgc3RydWN0IGF0aF9kZXNjICpkczApOwogdm9pZCBhdGg5a19od19jbGVhcnR4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7CkBAIC02NjgsNyArNjY5LDcgQEAKIGJvb2wgYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7CiBpbnQgYXRoOWtfaHdfcnhwcm9jZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCXUzMiBwYSwgc3RydWN0IGF0aF9kZXNjICpuZHMsIHU2NCB0c2YpOwotYm9vbCBhdGg5a19od19zZXR1cHJ4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfc2V0dXByeGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkgIHUzMiBzaXplLCB1MzIgZmxhZ3MpOwogYm9vbCBhdGg5a19od19zZXRyeGFib3J0KHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIHNldCk7CiB2b2lkIGF0aDlrX2h3X3B1dHJ4YnVmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcnhkcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwppbmRleCA2NmE2YzFmLi4zZGM3YjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKQEAgLTE3LDggKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CiAjaW5jbHVkZSAiYXRoOWsuaCIKIAotI2RlZmluZSBBVEhfUENJX1ZFUlNJT04gIjAuMSIKLQogc3RhdGljIGNoYXIgKmRldl9pbmZvID0gImF0aDlrIjsKIAogTU9EVUxFX0FVVEhPUigiQXRoZXJvcyBDb21tdW5pY2F0aW9ucyIpOwpAQCAtMzQyLDYgKzM0MCw3IEBACiAJKiBkb24ndCBjYWxpYnJhdGUgd2hlbiB3ZSdyZSBzY2FubmluZy4KIAkqIHdlIGFyZSBtb3N0IGxpa2VseSBub3Qgb24gb3VyIGhvbWUgY2hhbm5lbC4KIAkqLworCXNwaW5fbG9jaygmc2MtPmFuaV9sb2NrKTsKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfU0NBTk5JTkcpCiAJCWdvdG8gc2V0X3RpbWVyOwogCkBAIC0zODUsNyArMzg0LDcgQEAKIAlpZiAobG9uZ2NhbCB8fCBzaG9ydGNhbCB8fCBhbmlmbGFnKSB7CiAJCS8qIENhbGwgQU5JIHJvdXRpbmUgaWYgbmVjZXNzYXJ5ICovCiAJCWlmIChhbmlmbGFnKQotCQkJYXRoOWtfaHdfYW5pX21vbml0b3IoYWgsICZzYy0+bm9kZXN0YXRzLCBhaC0+Y3VyY2hhbik7CisJCQlhdGg5a19od19hbmlfbW9uaXRvcihhaCwgYWgtPmN1cmNoYW4pOwogCiAJCS8qIFBlcmZvcm0gY2FsaWJyYXRpb24gaWYgbmVjZXNzYXJ5ICovCiAJCWlmIChsb25nY2FsIHx8IHNob3J0Y2FsKSB7CkBAIC00MDUsNiArNDA0LDcgQEAKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAogc2V0X3RpbWVyOgorCXNwaW5fdW5sb2NrKCZzYy0+YW5pX2xvY2spOwogCS8qCiAJKiBTZXQgdGltZXIgaW50ZXJ2YWwgYmFzZWQgb24gcHJldmlvdXMgcmVzdWx0cy4KIAkqIFRoZSBpbnRlcnZhbCBtdXN0IGJlIHRoZSBzaG9ydGVzdCBuZWNlc3NhcnkgdG8gc2F0aXNmeSBBTkksCkBAIC00MzksOCArNDM5LDggQEAKICAqLwogdm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KQogewotCWlmIChpc19odCB8fAotCSAgICAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlRfQ09FWCkpIHsKKwlpZiAoKHNjLT5zY19mbGFncyAmIFNDX09QX1NDQU5OSU5HKSB8fCBpc19odCB8fAorCSAgICAoc2MtPmJ0Y29leF9pbmZvLmJ0Y29leF9zY2hlbWUgIT0gQVRIX0JUQ09FWF9DRkdfTk9ORSkpIHsKIAkJc2MtPnR4X2NoYWlubWFzayA9IHNjLT5zY19haC0+Y2Fwcy50eF9jaGFpbm1hc2s7CiAJCXNjLT5yeF9jaGFpbm1hc2sgPSBzYy0+c2NfYWgtPmNhcHMucnhfY2hhaW5tYXNrOwogCX0gZWxzZSB7CkBAIC00NjAsOSArNDYwLDEwIEBACiAKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSB7CiAJCWF0aF90eF9ub2RlX2luaXQoc2MsIGFuKTsKLQkJYW4tPm1heGFtcGR1ID0gMSA8PCAoSUVFRTgwMjExX0hUQ0FQX01BWFJYQU1QRFVfRkFDVE9SICsKKwkJYW4tPm1heGFtcGR1ID0gMSA8PCAoSUVFRTgwMjExX0hUX01BWF9BTVBEVV9GQUNUT1IgKwogCQkJCSAgICAgc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yKTsKIAkJYW4tPm1wZHVkZW5zaXR5ID0gcGFyc2VfbXBkdWRlbnNpdHkoc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eSk7CisJCWFuLT5sYXN0X3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CiAJfQogfQogCkBAIC00OTYsOCArNDk3LDcgQEAKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1RYKQogCQlhdGhfdHhfdGFza2xldChzYyk7CiAKLQlpZiAoKHN0YXR1cyAmIEFUSDlLX0lOVF9UU0ZPT1IpICYmCi0JICAgIChzYy0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykpIHsKKwlpZiAoKHN0YXR1cyAmIEFUSDlLX0lOVF9UU0ZPT1IpICYmIHNjLT5wc19lbmFibGVkKSB7CiAJCS8qCiAJCSAqIFRTRiBzeW5jIGRvZXMgbm90IGxvb2sgY29ycmVjdDsgcmVtYWluIGF3YWtlIHRvIHN5bmMgd2l0aAogCQkgKiB0aGUgbmV4dCBCZWFjb24uCkBAIC01MDYsNiArNTA2LDEwIEBACiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9XQUlUX0ZPUl9CRUFDT04gfCBTQ19PUF9CRUFDT05fU1lOQzsKIAl9CiAKKwlpZiAoc2MtPmJ0Y29leF9pbmZvLmJ0Y29leF9zY2hlbWUgPT0gQVRIX0JUQ09FWF9DRkdfM1dJUkUpCisJCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfR0VOVElNRVIpCisJCQlhdGhfZ2VuX3RpbWVyX2lzcihzYy0+c2NfYWgpOworCiAJLyogcmUtZW5hYmxlIGhhcmR3YXJlIGludGVycnVwdCAqLwogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPmltYXNrKTsKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKQEAgLTUyMSw3ICs1MjUsOCBAQAogCQlBVEg5S19JTlRfVFggfAkJCVwKIAkJQVRIOUtfSU5UX0JNSVNTIHwJCVwKIAkJQVRIOUtfSU5UX0NTVCB8CQkJXAotCQlBVEg5S19JTlRfVFNGT09SKQorCQlBVEg5S19JTlRfVFNGT09SIHwJCVwKKwkJQVRIOUtfSU5UX0dFTlRJTUVSKQogCiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBkZXY7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CkBAIC01ODksNyArNTk0LDcgQEAKIAkJICogaXQgd2lsbCBjbGVhciB3aGF0ZXZlciBjb25kaXRpb24gY2F1c2VkCiAJCSAqIHRoZSBpbnRlcnJ1cHQuCiAJCSAqLwotCQlhdGg5a19od19wcm9jbWliZXZlbnQoYWgsICZzYy0+bm9kZXN0YXRzKTsKKwkJYXRoOWtfaHdfcHJvY21pYmV2ZW50KGFoKTsKIAkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5pbWFzayk7CiAJfQogCkBAIC04ODUsOCArODkwLDcgQEAKIHN0YXRpYyB2b2lkIHNldHVwX2h0X2NhcChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2luZm8pCiB7Ci0jZGVmaW5lCUFUSDlLX0hUX0NBUF9NQVhSWEFNUERVXzY1NTM2IDB4MwkvKiAyIF4gMTYgKi8KLSNkZWZpbmUJQVRIOUtfSFRfQ0FQX01QRFVERU5TSVRZXzggMHg2CQkvKiA4IHVzZWMgKi8KKwl1OCB0eF9zdHJlYW1zLCByeF9zdHJlYW1zOwogCiAJaHRfaW5mby0+aHRfc3VwcG9ydGVkID0gdHJ1ZTsKIAlodF9pbmZvLT5jYXAgPSBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCB8CkBAIC04OTQsNjQgKzg5OCw2MSBAQAogCQkgICAgICAgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAogCQkgICAgICAgSUVFRTgwMjExX0hUX0NBUF9EU1NTQ0NLNDA7CiAKLQlodF9pbmZvLT5hbXBkdV9mYWN0b3IgPSBBVEg5S19IVF9DQVBfTUFYUlhBTVBEVV82NTUzNjsKLQlodF9pbmZvLT5hbXBkdV9kZW5zaXR5ID0gQVRIOUtfSFRfQ0FQX01QRFVERU5TSVRZXzg7CisJaHRfaW5mby0+YW1wZHVfZmFjdG9yID0gSUVFRTgwMjExX0hUX01BWF9BTVBEVV82NEs7CisJaHRfaW5mby0+YW1wZHVfZGVuc2l0eSA9IElFRUU4MDIxMV9IVF9NUERVX0RFTlNJVFlfODsKIAogCS8qIHNldCB1cCBzdXBwb3J0ZWQgbWNzIHNldCAqLwogCW1lbXNldCgmaHRfaW5mby0+bWNzLCAwLCBzaXplb2YoaHRfaW5mby0+bWNzKSk7CisJdHhfc3RyZWFtcyA9ICEoc2MtPnR4X2NoYWlubWFzayAmIChzYy0+dHhfY2hhaW5tYXNrIC0gMSkpID8gMSA6IDI7CisJcnhfc3RyZWFtcyA9ICEoc2MtPnJ4X2NoYWlubWFzayAmIChzYy0+cnhfY2hhaW5tYXNrIC0gMSkpID8gMSA6IDI7CiAKLQlzd2l0Y2goc2MtPnJ4X2NoYWlubWFzaykgewotCWNhc2UgMToKLQkJaHRfaW5mby0+bWNzLnJ4X21hc2tbMF0gPSAweGZmOwotCQlicmVhazsKLQljYXNlIDM6Ci0JY2FzZSA1OgotCWNhc2UgNzoKLQlkZWZhdWx0OgotCQlodF9pbmZvLT5tY3MucnhfbWFza1swXSA9IDB4ZmY7Ci0JCWh0X2luZm8tPm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKLQkJYnJlYWs7CisJaWYgKHR4X3N0cmVhbXMgIT0gcnhfc3RyZWFtcykgeworCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIlRYIHN0cmVhbXMgJWQsIFJYIHN0cmVhbXM6ICVkXG4iLAorCQkJdHhfc3RyZWFtcywgcnhfc3RyZWFtcyk7CisJCWh0X2luZm8tPm1jcy50eF9wYXJhbXMgfD0gSUVFRTgwMjExX0hUX01DU19UWF9SWF9ESUZGOworCQlodF9pbmZvLT5tY3MudHhfcGFyYW1zIHw9ICgodHhfc3RyZWFtcyAtIDEpIDw8CisJCQkJSUVFRTgwMjExX0hUX01DU19UWF9NQVhfU1RSRUFNU19TSElGVCk7CiAJfQogCi0JaHRfaW5mby0+bWNzLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKKwlodF9pbmZvLT5tY3MucnhfbWFza1swXSA9IDB4ZmY7CisJaWYgKHJ4X3N0cmVhbXMgPj0gMikKKwkJaHRfaW5mby0+bWNzLnJ4X21hc2tbMV0gPSAweGZmOworCisJaHRfaW5mby0+bWNzLnR4X3BhcmFtcyB8PSBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQ7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDlrX2Jzc19hc3NvY19pbmZvKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwogCiAJaWYgKGJzc19jb25mLT5hc3NvYykgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIkJzcyBJbmZvIEFTU09DICVkLCBic3NpZDogJXBNXG4iLAogCQkJYnNzX2NvbmYtPmFpZCwgc2MtPmN1cmJzc2lkKTsKIAogCQkvKiBOZXcgYXNzb2NpYXRpb24sIHN0b3JlIGFpZCAqLwotCQlpZiAoYXZwLT5hdl9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJc2MtPmN1cmFpZCA9IGJzc19jb25mLT5haWQ7Ci0JCQlhdGg5a19od193cml0ZV9hc3NvY2lkKHNjKTsKKwkJc2MtPmN1cmFpZCA9IGJzc19jb25mLT5haWQ7CisJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwogCi0JCQkvKgotCQkJICogUmVxdWVzdCBhIHJlLWNvbmZpZ3VyYXRpb24gb2YgQmVhY29uIHJlbGF0ZWQgdGltZXJzCi0JCQkgKiBvbiB0aGUgcmVjZWlwdCBvZiB0aGUgZmlyc3QgQmVhY29uIGZyYW1lIChpLmUuLAotCQkJICogYWZ0ZXIgdGltZSBzeW5jIHdpdGggdGhlIEFQKS4KLQkJCSAqLwotCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0JFQUNPTl9TWU5DOwotCQl9CisJCS8qCisJCSAqIFJlcXVlc3QgYSByZS1jb25maWd1cmF0aW9uIG9mIEJlYWNvbiByZWxhdGVkIHRpbWVycworCQkgKiBvbiB0aGUgcmVjZWlwdCBvZiB0aGUgZmlyc3QgQmVhY29uIGZyYW1lIChpLmUuLAorCQkgKiBhZnRlciB0aW1lIHN5bmMgd2l0aCB0aGUgQVApLgorCQkgKi8KKwkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0JFQUNPTl9TWU5DOwogCiAJCS8qIENvbmZpZ3VyZSB0aGUgYmVhY29uICovCiAJCWF0aF9iZWFjb25fY29uZmlnKHNjLCB2aWYpOwogCiAJCS8qIFJlc2V0IHJzc2kgc3RhdHMgKi8KLQkJc2MtPm5vZGVzdGF0cy5uc19hdmdicnNzaSA9IEFUSF9SU1NJX0RVTU1ZX01BUktFUjsKLQkJc2MtPm5vZGVzdGF0cy5uc19hdmdyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z3R4cnNzaSA9IEFUSF9SU1NJX0RVTU1ZX01BUktFUjsKLQkJc2MtPm5vZGVzdGF0cy5uc19hdmd0eHJhdGUgPSBBVEhfUkFURV9EVU1NWV9NQVJLRVI7CisJCXNjLT5zY19haC0+c3RhdHMuYXZnYnJzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CiAKIAkJYXRoX3N0YXJ0X2FuaShzYyk7CiAJfSBlbHNlIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJCc3MgSW5mbyBESVNBU1NPQ1xuIik7CiAJCXNjLT5jdXJhaWQgPSAwOworCQkvKiBTdG9wIEFOSSAqLworCQlkZWxfdGltZXJfc3luYygmc2MtPmFuaS50aW1lcik7CiAJfQogfQogCkBAIC05NjksMTUgKzk3MCwxNiBAQAogCiAJaWYgKChzYy0+bGVkX29uX2R1cmF0aW9uID09IEFUSF9MRURfT05fRFVSQVRJT05fSURMRSkgfHwKIAkgICAgKHNjLT5sZWRfb2ZmX2R1cmF0aW9uID09IEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUpKQotCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAwKTsKKwkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sIDApOwogCWVsc2UKLQkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwKKwkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sCiAJCQkJICAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX09OKSA/IDEgOiAwKTsKIAotCXF1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHctPndvcmtxdWV1ZSwgJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmssCi0JCQkgICAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX09OKSA/Ci0JCQkgICBtc2Vjc190b19qaWZmaWVzKHNjLT5sZWRfb2ZmX2R1cmF0aW9uKSA6Ci0JCQkgICBtc2Vjc190b19qaWZmaWVzKHNjLT5sZWRfb25fZHVyYXRpb24pKTsKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywKKwkJCQkgICAgICZzYy0+YXRoX2xlZF9ibGlua193b3JrLAorCQkJCSAgICAgKHNjLT5zY19mbGFncyAmIFNDX09QX0xFRF9PTikgPworCQkJCQltc2Vjc190b19qaWZmaWVzKHNjLT5sZWRfb2ZmX2R1cmF0aW9uKSA6CisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoc2MtPmxlZF9vbl9kdXJhdGlvbikpOwogCiAJc2MtPmxlZF9vbl9kdXJhdGlvbiA9IHNjLT5sZWRfb25fY250ID8KIAkJCW1heCgoQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFIC0gc2MtPmxlZF9vbl9jbnQpLCAyNSkgOgpAQCAtMTAwMiw3ICsxMDA0LDcgQEAKIAljYXNlIExFRF9PRkY6CiAJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MgfHwKIAkJICAgIGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykgewotCQkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwKKwkJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgc2MtPnNjX2FoLT5sZWRfcGluLAogCQkJCShsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pKTsKIAkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7CiAJCQlpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKQpAQCAtMTAxNCwxMCArMTAxNiwxMCBAQAogCWNhc2UgTEVEX0ZVTEw6CiAJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpIHsKIAkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfQVNTT0NJQVRFRDsKLQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHctPndvcmtxdWV1ZSwKLQkJCQkJICAgJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmssIDApOworCQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsCisJCQkJCQkgICAgICZzYy0+YXRoX2xlZF9ibGlua193b3JrLCAwKTsKIAkJfSBlbHNlIGlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKLQkJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDApOworCQkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sIDApOwogCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0xFRF9PTjsKIAkJfSBlbHNlIHsKIAkJCXNjLT5sZWRfb25fY250Kys7CkBAIC0xMDU3LDEzICsxMDU5LDEyIEBACiAKIHN0YXRpYyB2b2lkIGF0aF9kZWluaXRfbGVkcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmspOwogCWF0aF91bnJlZ2lzdGVyX2xlZCgmc2MtPmFzc29jX2xlZCk7CiAJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9MRURfQVNTT0NJQVRFRDsKIAlhdGhfdW5yZWdpc3Rlcl9sZWQoJnNjLT50eF9sZWQpOwogCWF0aF91bnJlZ2lzdGVyX2xlZCgmc2MtPnJ4X2xlZCk7CiAJYXRoX3VucmVnaXN0ZXJfbGVkKCZzYy0+cmFkaW9fbGVkKTsKLQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKKwlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aF9pbml0X2xlZHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCkBAIC0xMDcxLDExICsxMDcyLDE2IEBACiAJY2hhciAqdHJpZ2dlcjsKIAlpbnQgcmV0OwogCisJaWYgKEFSX1NSRVZfOTI4NyhzYy0+c2NfYWgpKQorCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl85Mjg3OworCWVsc2UKKwkJc2MtPnNjX2FoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fREVGOworCiAJLyogQ29uZmlndXJlIGdwaW8gMSBmb3Igb3V0cHV0ICovCi0JYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIEFUSF9MRURfUElOLAorCWF0aDlrX2h3X2NmZ19vdXRwdXQoc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sCiAJCQkgICAgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCk7CiAJLyogTEVEIG9mZiwgYWN0aXZlIGxvdyAqLwotCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDEpOworCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgc2MtPnNjX2FoLT5sZWRfcGluLCAxKTsKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+YXRoX2xlZF9ibGlua193b3JrLCBhdGhfbGVkX2JsaW5rX3dvcmspOwogCkBAIC0xMTE0LDYgKzExMjAsNyBAQAogCXJldHVybjsKIAogZmFpbDoKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmspOwogCWF0aF9kZWluaXRfbGVkcyhzYyk7CiB9CiAKQEAgLTExNTMsOSArMTE2MCw5IEBACiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5pbWFzayk7CiAKIAkvKiBFbmFibGUgTEVEICovCi0JYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgQVRIX0xFRF9QSU4sCisJYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgYWgtPmxlZF9waW4sCiAJCQkgICAgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCk7Ci0JYXRoOWtfaHdfc2V0X2dwaW8oYWgsIEFUSF9MRURfUElOLCAwKTsKKwlhdGg5a19od19zZXRfZ3BpbyhhaCwgYWgtPmxlZF9waW4sIDApOwogCiAJaWVlZTgwMjExX3dha2VfcXVldWVzKHNjLT5odyk7CiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7CkBAIC0xMTcxLDggKzExNzgsOCBAQAogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhzYy0+aHcpOwogCiAJLyogRGlzYWJsZSBMRUQgKi8KLQlhdGg5a19od19zZXRfZ3BpbyhhaCwgQVRIX0xFRF9QSU4sIDEpOwotCWF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KGFoLCBBVEhfTEVEX1BJTik7CisJYXRoOWtfaHdfc2V0X2dwaW8oYWgsIGFoLT5sZWRfcGluLCAxKTsKKwlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmxlZF9waW4pOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOwpAQCAtMTI1Myw4ICsxMjYwLDYgQEAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIkRldGFjaCBBVEggaHdcbiIpOwogCiAJYXRoX2RlaW5pdF9sZWRzKHNjKTsKLQljYW5jZWxfd29ya19zeW5jKCZzYy0+Y2hhbl93b3JrKTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT53aXBoeV93b3JrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CiAJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOwpAQCAtMTI3OSw5ICsxMjg0LDEzIEBACiAJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKIAkJCWF0aF90eF9jbGVhbnVwcShzYywgJnNjLT50eC50eHFbaV0pOwogCisJaWYgKChzYy0+YnRjb2V4X2luZm8ubm9fc3RvbXBfdGltZXIpICYmCisJICAgIHNjLT5idGNvZXhfaW5mby5idGNvZXhfc2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKQorCQlhdGhfZ2VuX3RpbWVyX2ZyZWUoc2MtPnNjX2FoLCBzYy0+YnRjb2V4X2luZm8ubm9fc3RvbXBfdGltZXIpOworCiAJYXRoOWtfaHdfZGV0YWNoKHNjLT5zY19haCk7CisJc2MtPnNjX2FoID0gTlVMTDsKIAlhdGg5a19leGl0X2RlYnVnKHNjKTsKLQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAogc3RhdGljIGludCBhdGg5a19yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKQEAgLTEyOTAsMTYgKzEyOTksMjEgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdpcGh5X3RvX2llZWU4MDIxMV9odyh3aXBoeSk7CiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7Ci0Jc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWcgPSAmc2MtPnNjX2FoLT5yZWd1bGF0b3J5OworCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVnID0gJnNjLT5jb21tb24ucmVndWxhdG9yeTsKIAogCXJldHVybiBhdGhfcmVnX25vdGlmaWVyX2FwcGx5KHdpcGh5LCByZXF1ZXN0LCByZWcpOwogfQogCi1zdGF0aWMgaW50IGF0aF9pbml0KHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpCisvKgorICogSW5pdGlhbGl6ZSBhbmQgZmlsbCBhdGhfc29mdGMsIGF0aF9zb2ZjdCBpcyB0aGUKKyAqICJTb2Z0d2FyZSBDYXJyaWVyIiBzdHJ1Y3QuIEhpc3RvcmljYWxseSBpdCBoYXMgZXhpc3RlZAorICogdG8gYWxsb3cgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBoYXJkd2FyZSBzcGVjaWZpYworICogdmFyaWFibGVzIChub3cgaW4gYXRoX2h3KSBhbmQgZHJpdmVyIHNwZWNpZmljIHZhcmlhYmxlcy4KKyAqLworc3RhdGljIGludCBhdGhfaW5pdF9zb2Z0Yyh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYgc3Vic3lzaWQpCiB7CiAJc3RydWN0IGF0aF9odyAqYWggPSBOVUxMOwotCWludCBzdGF0dXM7Ci0JaW50IGVycm9yID0gMCwgaTsKKwlpbnQgciA9IDAsIGk7CiAJaW50IGNzeiA9IDA7CiAKIAkvKiBYWFg6IGhhcmR3YXJlIHdpbGwgbm90IGJlIHJlYWR5IHVudGlsIGF0aF9vcGVuKCkgYmVpbmcgY2FsbGVkICovCkBAIC0xMzExLDYgKzEzMjUsOCBAQAogCXNwaW5fbG9ja19pbml0KCZzYy0+d2lwaHlfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnNjLT5zY19yZXNldGxvY2spOwogCXNwaW5fbG9ja19pbml0KCZzYy0+c2Nfc2VyaWFsX3J3KTsKKwlzcGluX2xvY2tfaW5pdCgmc2MtPmFuaV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3BtX2xvY2spOwogCW11dGV4X2luaXQoJnNjLT5tdXRleCk7CiAJdGFza2xldF9pbml0KCZzYy0+aW50cl90cSwgYXRoOWtfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXRhc2tsZXRfaW5pdCgmc2MtPmJjb25fdGFza2xldCwgYXRoX2JlYWNvbl90YXNrbGV0LApAQCAtMTMyMiwxNiArMTMzOCwyNiBAQAogCSAqLwogCWF0aF9yZWFkX2NhY2hlc2l6ZShzYywgJmNzeik7CiAJLyogWFhYIGFzc2VydCBjc3ogaXMgbm9uLXplcm8gKi8KLQlzYy0+Y2FjaGVsc3ogPSBjc3ogPDwgMjsJLyogY29udmVydCB0byBieXRlcyAqLworCXNjLT5jb21tb24uY2FjaGVsc3ogPSBjc3ogPDwgMjsJLyogY29udmVydCB0byBieXRlcyAqLwogCi0JYWggPSBhdGg5a19od19hdHRhY2goZGV2aWQsIHNjLCAmc3RhdHVzKTsKLQlpZiAoYWggPT0gTlVMTCkgeworCWFoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF0aF9odyksIEdGUF9LRVJORUwpOworCWlmICghYWgpIHsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gYmFkX25vX2FoOworCX0KKworCWFoLT5haF9zYyA9IHNjOworCWFoLT5od192ZXJzaW9uLmRldmlkID0gZGV2aWQ7CisJYWgtPmh3X3ZlcnNpb24uc3Vic3lzaWQgPSBzdWJzeXNpZDsKKwlzYy0+c2NfYWggPSBhaDsKKworCXIgPSBhdGg5a19od19pbml0KGFoKTsKKwlpZiAocikgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJIlVuYWJsZSB0byBhdHRhY2ggaGFyZHdhcmU7IEhBTCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7Ci0JCWVycm9yID0gLUVOWElPOworCQkJIlVuYWJsZSB0byBpbml0aWFsaXplIGhhcmR3YXJlOyAiCisJCQkiaW5pdGlhbGl6YXRpb24gc3RhdHVzOiAlZFxuIiwgcik7CiAJCWdvdG8gYmFkOwogCX0KLQlzYy0+c2NfYWggPSBhaDsKIAogCS8qIEdldCB0aGUgaGFyZHdhcmUga2V5IGNhY2hlIHNpemUuICovCiAJc2MtPmtleW1heCA9IGFoLT5jYXBzLmtleWNhY2hlX3NpemU7CkBAIC0xMzQ5LDkgKzEzNzUsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBzYy0+a2V5bWF4OyBpKyspCiAJCWF0aDlrX2h3X2tleXJlc2V0KGFoLCAodTE2KSBpKTsKIAotCWlmIChlcnJvcikKLQkJZ290byBiYWQ7Ci0KIAkvKiBkZWZhdWx0IHRvIE1PTklUT1IgbW9kZSAqLwogCXNjLT5zY19haC0+b3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKIApAQCAtMTM3MSwxNCArMTM5NCwxNCBAQAogCWlmIChzYy0+YmVhY29uLmJlYWNvbnEgPT0gLTEpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKIAkJCSJVbmFibGUgdG8gc2V0dXAgYSBiZWFjb24geG1pdCBxdWV1ZVxuIik7Ci0JCWVycm9yID0gLUVJTzsKKwkJciA9IC1FSU87CiAJCWdvdG8gYmFkMjsKIAl9CiAJc2MtPmJlYWNvbi5jYWJxID0gYXRoX3R4cV9zZXR1cChzYywgQVRIOUtfVFhfUVVFVUVfQ0FCLCAwKTsKIAlpZiAoc2MtPmJlYWNvbi5jYWJxID09IE5VTEwpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKIAkJCSJVbmFibGUgdG8gc2V0dXAgQ0FCIHhtaXQgcXVldWVcbiIpOwotCQllcnJvciA9IC1FSU87CisJCXIgPSAtRUlPOwogCQlnb3RvIGJhZDI7CiAJfQogCkBAIC0xMzkzLDI2ICsxNDE2LDI2IEBACiAJaWYgKCFhdGhfdHhfc2V0dXAoc2MsIEFUSDlLX1dNRV9BQ19CSykpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKIAkJCSJVbmFibGUgdG8gc2V0dXAgeG1pdCBxdWV1ZSBmb3IgQksgdHJhZmZpY1xuIik7Ci0JCWVycm9yID0gLUVJTzsKKwkJciA9IC1FSU87CiAJCWdvdG8gYmFkMjsKIAl9CiAKIAlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX0JFKSkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAogCQkJIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBCRSB0cmFmZmljXG4iKTsKLQkJZXJyb3IgPSAtRUlPOworCQlyID0gLUVJTzsKIAkJZ290byBiYWQyOwogCX0KIAlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX1ZJKSkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAogCQkJIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBWSSB0cmFmZmljXG4iKTsKLQkJZXJyb3IgPSAtRUlPOworCQlyID0gLUVJTzsKIAkJZ290byBiYWQyOwogCX0KIAlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX1ZPKSkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAogCQkJIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBWTyB0cmFmZmljXG4iKTsKLQkJZXJyb3IgPSAtRUlPOworCQlyID0gLUVJTzsKIAkJZ290byBiYWQyOwogCX0KIApAQCAtMTQ5Niw4ICsxNTE5LDExIEBACiAJCQlBUlJBWV9TSVpFKGF0aDlrXzVnaHpfY2hhbnRhYmxlKTsKIAl9CiAKLQlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlRfQ09FWCkKLQkJYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzYy0+c2NfYWgpOworCWlmIChzYy0+YnRjb2V4X2luZm8uYnRjb2V4X3NjaGVtZSAhPSBBVEhfQlRDT0VYX0NGR19OT05FKSB7CisJCXIgPSBhdGg5a19od19idGNvZXhfaW5pdChhaCk7CisJCWlmIChyKQorCQkJZ290byBiYWQyOworCX0KIAogCXJldHVybiAwOwogYmFkMjoKQEAgLTE1MDYsMTEgKzE1MzIsMTIgQEAKIAkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpKQogCQkJYXRoX3R4X2NsZWFudXBxKHNjLCAmc2MtPnR4LnR4cVtpXSk7CiBiYWQ6Ci0JaWYgKGFoKQotCQlhdGg5a19od19kZXRhY2goYWgpOworCWF0aDlrX2h3X2RldGFjaChhaCk7CisJc2MtPnNjX2FoID0gTlVMTDsKK2JhZF9ub19haDoKIAlhdGg5a19leGl0X2RlYnVnKHNjKTsKIAotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gcjsKIH0KIAogdm9pZCBhdGhfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTE1MzYsNyArMTU2Myw4IEBACiAJaHctPm1heF9yYXRlcyA9IDQ7CiAJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA1MDAwOwogCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gMTA7Ci0JaHctPm1heF9yYXRlX3RyaWVzID0gQVRIXzExTl9UWE1BWFRSWTsKKwkvKiBIYXJkd2FyZSBzdXBwb3J0cyAxMCBidXQgd2UgdXNlIDQgKi8KKwlody0+bWF4X3JhdGVfdHJpZXMgPSA0OwogCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfbm9kZSk7CiAJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGF0aF92aWYpOwogCkBAIC0xNTQ5LDcgKzE1NzcsOCBAQAogCQkJJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CiB9CiAKLWludCBhdGhfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpCisvKiBEZXZpY2UgZHJpdmVyIGNvcmUgaW5pdGlhbGl6YXRpb24gKi8KK2ludCBhdGhfaW5pdF9kZXZpY2UodTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTE2IHN1YnN5c2lkKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwogCWludCBlcnJvciA9IDAsIGk7CkBAIC0xNTU3LDcgKzE1ODYsNyBAQAogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJBdHRhY2ggQVRIIGh3XG4iKTsKIAotCWVycm9yID0gYXRoX2luaXQoZGV2aWQsIHNjKTsKKwllcnJvciA9IGF0aF9pbml0X3NvZnRjKGRldmlkLCBzYywgc3Vic3lzaWQpOwogCWlmIChlcnJvciAhPSAwKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTE1NjcsMTIgKzE1OTYsMTIgQEAKIAogCWF0aF9zZXRfaHdfY2FwYWIoc2MsIGh3KTsKIAotCWVycm9yID0gYXRoX3JlZ2RfaW5pdCgmc2MtPnNjX2FoLT5yZWd1bGF0b3J5LCBzYy0+aHctPndpcGh5LAorCWVycm9yID0gYXRoX3JlZ2RfaW5pdCgmc2MtPmNvbW1vbi5yZWd1bGF0b3J5LCBzYy0+aHctPndpcGh5LAogCQkJICAgICAgYXRoOWtfcmVnX25vdGlmaWVyKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXJlZyA9ICZzYy0+c2NfYWgtPnJlZ3VsYXRvcnk7CisJcmVnID0gJnNjLT5jb21tb24ucmVndWxhdG9yeTsKIAogCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgewogCQlzZXR1cF9odF9jYXAoc2MsICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7CkBAIC0xNjE1LDYgKzE2NDQsNyBAQAogCQkJYXRoX3R4X2NsZWFudXBxKHNjLCAmc2MtPnR4LnR4cVtpXSk7CiAKIAlhdGg5a19od19kZXRhY2goc2MtPnNjX2FoKTsKKwlzYy0+c2NfYWggPSBOVUxMOwogCWF0aDlrX2V4aXRfZGVidWcoc2MpOwogCiAJcmV0dXJuIGVycm9yOwpAQCAtMTg1MCw3ICsxODgwLDcgQEAKIAogCWlmIChjaGFuLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKIAkJaWNoYW4tPmNoYW5tb2RlID0gQ0hBTk5FTF9HOwotCQlpY2hhbi0+Y2hhbm5lbEZsYWdzID0gQ0hBTk5FTF8yR0haIHwgQ0hBTk5FTF9PRkRNOworCQlpY2hhbi0+Y2hhbm5lbEZsYWdzID0gQ0hBTk5FTF8yR0haIHwgQ0hBTk5FTF9PRkRNIHwgQ0hBTk5FTF9HOwogCX0gZWxzZSB7CiAJCWljaGFuLT5jaGFubW9kZSA9IENIQU5ORUxfQTsKIAkJaWNoYW4tPmNoYW5uZWxGbGFncyA9IENIQU5ORUxfNUdIWiB8IENIQU5ORUxfT0ZETTsKQEAgLTE5NzMsNiArMjAwMywxOSBAQAogCiAJaWVlZTgwMjExX3dha2VfcXVldWVzKGh3KTsKIAorCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LCAmc2MtPnR4X2NvbXBsZXRlX3dvcmssIDApOworCisJaWYgKChzYy0+YnRjb2V4X2luZm8uYnRjb2V4X3NjaGVtZSAhPSBBVEhfQlRDT0VYX0NGR19OT05FKSAmJgorCSAgICAhKHNjLT5zY19mbGFncyAmIFNDX09QX0JUQ09FWF9FTkFCTEVEKSkgeworCQlhdGhfYnRjb2V4X3NldF93ZWlnaHQoJnNjLT5idGNvZXhfaW5mbywgQVJfQlRfQ09FWF9XR0hULAorCQkJCSAgICAgIEFSX1NUT01QX0xPV19XTEFOX1dHSFQpOworCQlhdGg5a19od19idGNvZXhfZW5hYmxlKHNjLT5zY19haCk7CisKKwkJYXRoX3BjaWVfYXNwbV9kaXNhYmxlKHNjKTsKKwkJaWYgKHNjLT5idGNvZXhfaW5mby5idGNvZXhfc2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKQorCQkJYXRoX2J0Y29leF90aW1lcl9yZXN1bWUoc2MsICZzYy0+YnRjb2V4X2luZm8pOworCX0KKwogbXV0ZXhfdW5sb2NrOgogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIApAQCAtMTk5NCw3ICsyMDM3LDcgQEAKIAkJZ290byBleGl0OwogCX0KIAotCWlmIChzYy0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgeworCWlmIChzYy0+cHNfZW5hYmxlZCkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAkJLyoKIAkJICogbWFjODAyMTEgZG9lcyBub3Qgc2V0IFBNIGZpZWxkIGZvciBub3JtYWwgZGF0YSBmcmFtZXMsIHNvIHdlCkBAIC0yMDgzLDIyICsyMTI2LDM1IEBACiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCiAJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfSU5BQ1RJVkU7CiAKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPnR4X2NvbXBsZXRlX3dvcmspOworCisJaWYgKCFzYy0+bnVtX3NlY193aXBoeSkgeworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT53aXBoeV93b3JrKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmc2MtPmNoYW5fd29yayk7CisJfQorCiAJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19BTlksICJEZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiAJCXJldHVybjsKIAl9CiAKLQltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwotCi0JaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKLQogCWlmIChhdGg5a193aXBoeV9zdGFydGVkKHNjKSkgewogCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiAJCXJldHVybjsgLyogYW5vdGhlciB3aXBoeSBzdGlsbCBpbiB1c2UgKi8KIAl9CiAKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfQlRDT0VYX0VOQUJMRUQpIHsKKwkJYXRoOWtfaHdfYnRjb2V4X2Rpc2FibGUoc2MtPnNjX2FoKTsKKwkJaWYgKHNjLT5idGNvZXhfaW5mby5idGNvZXhfc2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKQorCQkJYXRoX2J0Y29leF90aW1lcl9wYXVzZShzYywgJnNjLT5idGNvZXhfaW5mbyk7CisJfQorCiAJLyogbWFrZSBzdXJlIGgvdyB3aWxsIG5vdCBnZW5lcmF0ZSBhbnkgaW50ZXJydXB0CiAJICogYmVmb3JlIHNldHRpbmcgdGhlIGludmFsaWQgZmxhZy4gKi8KIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIDApOwpAQCAtMjExNSw2ICsyMTcxLDcgQEAKIAkvKiBkaXNhYmxlIEhBTCBhbmQgcHV0IGgvdyB0byBzbGVlcCAqLwogCWF0aDlrX2h3X2Rpc2FibGUoc2MtPnNjX2FoKTsKIAlhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc2MtPnNjX2FoLCAxKTsKKwlhdGg5a19od19zZXRwb3dlcihzYy0+c2NfYWgsIEFUSDlLX1BNX0ZVTExfU0xFRVApOwogCiAJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0lOVkFMSUQ7CiAKQEAgLTIxODksMTQgKzIyNDYsMTUgQEAKIAlpZiAoKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKIAkgICAgKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8CiAJICAgIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKSB7Ci0JCWlmIChhdGg5a19od19waHljb3VudGVycyhzYy0+c2NfYWgpKQotCQkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9NSUI7CisJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfTUlCOwogCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1RTRk9PUjsKIAl9CiAKIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CiAKLQlpZiAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKKwlpZiAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCAgICB8fAorCSAgICBjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJICAgIGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKIAkJYXRoX3N0YXJ0X2FuaShzYyk7CiAKIG91dDoKQEAgLTIyNDksOSArMjMwNywyOCBAQAogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCWJvb2wgYWxsX3dpcGh5c19pZGxlID0gZmFsc2UsIGRpc2FibGVfcmFkaW8gPSBmYWxzZTsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKKwkvKiBMZWF2ZSB0aGlzIGFzIHRoZSBmaXJzdCBjaGVjayAqLworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0lETEUpIHsKKworCQlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJYWxsX3dpcGh5c19pZGxlID0gIGF0aDlrX2FsbF93aXBoeXNfaWRsZShzYyk7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwkJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSl7CisJCQlpZiAoYWxsX3dpcGh5c19pZGxlKQorCQkJCWRpc2FibGVfcmFkaW8gPSB0cnVlOworCQl9CisJCWVsc2UgaWYgKGFsbF93aXBoeXNfaWRsZSkgeworCQkJYXRoX3JhZGlvX2VuYWJsZShzYyk7CisJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKKwkJCQkibm90LWlkbGU6IGVuYWJsaW5nIHJhZGlvXG4iKTsKKwkJfQorCX0KKwogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSB7CiAJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CiAJCQlpZiAoIShhaC0+Y2Fwcy5od19jYXBzICYKQEAgLTIyNjMsOCArMjM0MCw5IEBACiAJCQkJfQogCQkJCWF0aDlrX2h3X3NldHJ4YWJvcnQoc2MtPnNjX2FoLCAxKTsKIAkJCX0KLQkJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwgQVRIOUtfUE1fTkVUV09SS19TTEVFUCk7CisJCQlzYy0+cHNfZW5hYmxlZCA9IHRydWU7CiAJCX0gZWxzZSB7CisJCQlzYy0+cHNfZW5hYmxlZCA9IGZhbHNlOwogCQkJYXRoOWtfaHdfc2V0cG93ZXIoc2MtPnNjX2FoLCBBVEg5S19QTV9BV0FLRSk7CiAJCQlpZiAoIShhaC0+Y2Fwcy5od19jYXBzICYKIAkJCSAgICAgIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKSB7CkBAIC0yMzE5LDYgKzIzOTcsMTEgQEAKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUikKIAkJc2MtPmNvbmZpZy50eHBvd2xpbWl0ID0gMiAqIGNvbmYtPnBvd2VyX2xldmVsOwogCisJaWYgKGRpc2FibGVfcmFkaW8pIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJpZGxlOiBkaXNhYmxpbmcgcmFkaW9cbiIpOworCQlhdGhfcmFkaW9fZGlzYWJsZShzYyk7CisJfQorCiAJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC0yMzI4LDYgKzI0MTEsNyBAQAogCShGSUZfUFJPTUlTQ19JTl9CU1MgfAkJCVwKIAlGSUZfQUxMTVVMVEkgfAkJCQlcCiAJRklGX0NPTlRST0wgfAkJCQlcCisJRklGX1BTUE9MTCB8CQkJCVwKIAlGSUZfT1RIRVJfQlNTIHwJCQkJXAogCUZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwJCVwKIAlGSUZfRkNTRkFJTCkKQEAgLTIzMzYsOCArMjQyMCw3IEBACiBzdGF0aWMgdm9pZCBhdGg5a19jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAogCQkJCSAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJICAgaW50IG1jX2NvdW50LAotCQkJCSAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQorCQkJCSAgIHU2NCBtdWx0aWNhc3QpCiB7CiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CkBAIC0yMzUyLDcgKzI0MzUsNyBAQAogCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKHNjLT5zY19haCwgcmZpbHQpOwogCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCi0JRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJTZXQgSFcgUlggZmlsdGVyOiAweCV4XG4iLCBzYy0+cngucnhmaWx0ZXIpOworCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiU2V0IEhXIFJYIGZpbHRlcjogMHgleFxuIiwgcmZpbHQpOwogfQogCiBzdGF0aWMgdm9pZCBhdGg5a19zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMjYzOCwxOSArMjcyMSwxMSBAQAogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgotCQlyZXQgPSBhdGhfdHhfYWdncl9zdGFydChzYywgc3RhLCB0aWQsIHNzbik7Ci0JCWlmIChyZXQgPCAwKQotCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCQkiVW5hYmxlIHRvIHN0YXJ0IFRYIGFnZ3JlZ2F0aW9uXG4iKTsKLQkJZWxzZQotCQkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUoaHcsIHN0YS0+YWRkciwgdGlkKTsKKwkJYXRoX3R4X2FnZ3Jfc3RhcnQoc2MsIHN0YSwgdGlkLCBzc24pOworCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShodywgc3RhLT5hZGRyLCB0aWQpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QOgotCQlyZXQgPSBhdGhfdHhfYWdncl9zdG9wKHNjLCBzdGEsIHRpZCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCQkiVW5hYmxlIHRvIHN0b3AgVFggYWdncmVnYXRpb25cbiIpOwotCisJCWF0aF90eF9hZ2dyX3N0b3Aoc2MsIHN0YSwgdGlkKTsKIAkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShodywgc3RhLT5hZGRyLCB0aWQpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTDoKQEAgLTI2NjgsNiArMjc0Myw3IEBACiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCWlmIChhdGg5a193aXBoeV9zY2FubmluZyhzYykpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBUd28gd2lwaHlzIHRyeWluZyB0byBzY2FuIGF0IHRoZSAiCiAJCSAgICAgICAic2FtZSB0aW1lXG4iKTsKQEAgLTI2NzUsMTQgKzI3NTEsMTYgQEAKIAkJICogRG8gbm90IGFsbG93IHRoZSBjb25jdXJyZW50IHNjYW5uaW5nIHN0YXRlIGZvciBub3cuIFRoaXMKIAkJICogY291bGQgYmUgaW1wcm92ZWQgd2l0aCBzY2FubmluZyBjb250cm9sIG1vdmVkIGludG8gYXRoOWsuCiAJCSAqLworCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiAJCXJldHVybjsKIAl9CiAKIAlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9TQ0FOOwogCWF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc2MsIGFwaHkpOwogCi0JbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwlzcGluX2xvY2tfYmgoJnNjLT5hbmlfbG9jayk7CiAJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1NDQU5OSU5HOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+YW5pX2xvY2spOwogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIH0KIApAQCAtMjY5Miw5ICsyNzcwLDEyIEBACiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJc3Bpbl9sb2NrX2JoKCZzYy0+YW5pX2xvY2spOwogCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKIAlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1NDQU5OSU5HOwogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9GVUxMX1JFU0VUOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+YW5pX2xvY2spOworCWF0aF9iZWFjb25fY29uZmlnKHNjLCBOVUxMKTsKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiB9CiAKQEAgLTI3MjgsNyArMjgwOSw4IEBACiAJeyBBUl9TUkVWX1ZFUlNJT05fOTEwMCwJCSI5MTAwIiB9LAogCXsgQVJfU1JFVl9WRVJTSU9OXzkxNjAsCQkiOTE2MCIgfSwKIAl7IEFSX1NSRVZfVkVSU0lPTl85MjgwLAkJIjkyODAiIH0sCi0JeyBBUl9TUkVWX1ZFUlNJT05fOTI4NSwJCSI5Mjg1IiB9CisJeyBBUl9TUkVWX1ZFUlNJT05fOTI4NSwJCSI5Mjg1IiB9LAorCXsgQVJfU1JFVl9WRVJTSU9OXzkyODcsICAgICAgICAgIjkyODciIH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jCmluZGV4IDE3MGM1YjMuLjkwM2RkOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMKQEAgLTI1LDYgKzI1LDggQEAKIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyOSkgfSwgLyogUENJICAgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyQSkgfSwgLyogUENJLUUgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyQikgfSwgLyogUENJLUUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyRCkgfSwgLyogUENJICAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyRSkgfSwgLyogUENJLUUgKi8KIAl7IDAgfQogfTsKIApAQCAtMzMsOCArMzUsNyBAQAogewogCXU4IHU4dG1wOwogCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUodG9fcGNpX2RldihzYy0+ZGV2KSwgUENJX0NBQ0hFX0xJTkVfU0laRSwKLQkJCSAgICAgKHU4ICopJnU4dG1wKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZSh0b19wY2lfZGV2KHNjLT5kZXYpLCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAmdTh0bXApOwogCSpjc3ogPSAoaW50KXU4dG1wOwogCiAJLyoKQEAgLTg3LDYgKzg4LDcgQEAKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAl1OCBjc3o7CisJdTE2IHN1YnN5c2lkOwogCXUzMiB2YWw7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGF0aF9odyAqYWg7CkBAIC0xNTgsOCArMTYwLDkgQEAKIAogCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgYXRoX3dpcGh5KSArCiAJCQkJc2l6ZW9mKHN0cnVjdCBhdGhfc29mdGMpLCAmYXRoOWtfb3BzKTsKLQlpZiAoaHcgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImF0aF9wY2k6IG5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKKwlpZiAoIWh3KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBiYWQyOwogCX0KIApAQCAtMTc2LDE3ICsxNzksMTggQEAKIAlzYy0+bWVtID0gbWVtOwogCXNjLT5idXNfb3BzID0gJmF0aF9wY2lfYnVzX29wczsKIAotCWlmIChhdGhfYXR0YWNoKGlkLT5kZXZpY2UsIHNjKSAhPSAwKSB7Ci0JCXJldCA9IC1FTk9ERVY7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1NVQlNZU1RFTV9JRCwgJnN1YnN5c2lkKTsKKwlyZXQgPSBhdGhfaW5pdF9kZXZpY2UoaWQtPmRldmljZSwgc2MsIHN1YnN5c2lkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGRldmljZVxuIik7CiAJCWdvdG8gYmFkMzsKIAl9CiAKIAkvKiBzZXR1cCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCiAKLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdGhfaXNyLCBJUlFGX1NIQVJFRCwgImF0aCIsIHNjKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIsCi0JCQl3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlyZXQgPSAtRUlPOworCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgYXRoX2lzciwgSVJRRl9TSEFSRUQsICJhdGg5ayIsIHNjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CiAJCWdvdG8gYmFkNDsKIAl9CiAKQEAgLTIzNCw3ICsyMzgsNyBAQAogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCi0JYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwgMSk7CisJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sIDEpOwogCiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtMjUxLDEwICsyNTUsMTIgQEAKIAl1MzIgdmFsOwogCWludCBlcnI7CiAKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKIAkvKgogCSAqIFN1c3BlbmQvUmVzdW1lIHJlc2V0cyB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHNvIHdlIGhhdmUgdG8KIAkgKiByZS1kaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCkBAIC0yNjUsOSArMjcxLDkgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKIAogCS8qIEVuYWJsZSBMRUQgKi8KLQlhdGg5a19od19jZmdfb3V0cHV0KHNjLT5zY19haCwgQVRIX0xFRF9QSU4sCisJYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwKIAkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKLQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKKwlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwgMSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9waHkuYwppbmRleCBhYWE5NDE1Li42M2JmOWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BoeS5jCkBAIC0yNjQsNDQgKzI2NCwyMyBAQAogfQogCiB2b2lkCi1hdGg5a19od19yZmRldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKK2F0aDlrX2h3X3JmX2ZyZWUoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0JaWYgKGFoLT5hbmFsb2dCYW5rMERhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaC0+YW5hbG9nQmFuazBEYXRhKTsKLQkJYWgtPmFuYWxvZ0JhbmswRGF0YSA9IE5VTEw7Ci0JfQotCWlmIChhaC0+YW5hbG9nQmFuazFEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWgtPmFuYWxvZ0JhbmsxRGF0YSk7Ci0JCWFoLT5hbmFsb2dCYW5rMURhdGEgPSBOVUxMOwotCX0KLQlpZiAoYWgtPmFuYWxvZ0JhbmsyRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFoLT5hbmFsb2dCYW5rMkRhdGEpOwotCQlhaC0+YW5hbG9nQmFuazJEYXRhID0gTlVMTDsKLQl9Ci0JaWYgKGFoLT5hbmFsb2dCYW5rM0RhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaC0+YW5hbG9nQmFuazNEYXRhKTsKLQkJYWgtPmFuYWxvZ0JhbmszRGF0YSA9IE5VTEw7Ci0JfQotCWlmIChhaC0+YW5hbG9nQmFuazZEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWgtPmFuYWxvZ0Jhbms2RGF0YSk7Ci0JCWFoLT5hbmFsb2dCYW5rNkRhdGEgPSBOVUxMOwotCX0KLQlpZiAoYWgtPmFuYWxvZ0Jhbms2VFBDRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFoLT5hbmFsb2dCYW5rNlRQQ0RhdGEpOwotCQlhaC0+YW5hbG9nQmFuazZUUENEYXRhID0gTlVMTDsKLQl9Ci0JaWYgKGFoLT5hbmFsb2dCYW5rN0RhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaC0+YW5hbG9nQmFuazdEYXRhKTsKLQkJYWgtPmFuYWxvZ0Jhbms3RGF0YSA9IE5VTEw7Ci0JfQotCWlmIChhaC0+YWRkYWM1NDE2XzIxICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWgtPmFkZGFjNTQxNl8yMSk7Ci0JCWFoLT5hZGRhYzU0MTZfMjEgPSBOVUxMOwotCX0KLQlpZiAoYWgtPmJhbms2VGVtcCAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFoLT5iYW5rNlRlbXApOwotCQlhaC0+YmFuazZUZW1wID0gTlVMTDsKLQl9CisjZGVmaW5lIEFUSF9GUkVFX0JBTksoYmFuaykgZG8geyBcCisJCWtmcmVlKGJhbmspOyBcCisJCWJhbmsgPSBOVUxMOyBcCisJfSB3aGlsZSAoMCk7CisKKwlBVEhfRlJFRV9CQU5LKGFoLT5hbmFsb2dCYW5rMERhdGEpOworCUFUSF9GUkVFX0JBTksoYWgtPmFuYWxvZ0JhbmsxRGF0YSk7CisJQVRIX0ZSRUVfQkFOSyhhaC0+YW5hbG9nQmFuazJEYXRhKTsKKwlBVEhfRlJFRV9CQU5LKGFoLT5hbmFsb2dCYW5rM0RhdGEpOworCUFUSF9GUkVFX0JBTksoYWgtPmFuYWxvZ0Jhbms2RGF0YSk7CisJQVRIX0ZSRUVfQkFOSyhhaC0+YW5hbG9nQmFuazZUUENEYXRhKTsKKwlBVEhfRlJFRV9CQU5LKGFoLT5hbmFsb2dCYW5rN0RhdGEpOworCUFUSF9GUkVFX0JBTksoYWgtPmFkZGFjNTQxNl8yMSk7CisJQVRIX0ZSRUVfQkFOSyhhaC0+YmFuazZUZW1wKTsKKyN1bmRlZiBBVEhfRlJFRV9CQU5LCiB9CiAKIGJvb2wgYXRoOWtfaHdfaW5pdF9yZihzdHJ1Y3QgYXRoX2h3ICphaCwgaW50ICpzdGF0dXMpCkBAIC0zNzQsMTggKzM1MywxNiBAQAogCXUzMiBiYW5rNlNlbE1hc2s7CiAJdTMyICpiYW5rNlRlbXAgPSBhaC0+YmFuazZUZW1wOwogCi0Jc3dpdGNoIChhaC0+ZGl2ZXJzaXR5X2NvbnRyb2wpIHsKKwlzd2l0Y2ggKGFoLT5jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2wpIHsKIAljYXNlIEFUSDlLX0FOVF9GSVhFRF9BOgogCQliYW5rNlNlbE1hc2sgPQotCQkgICAgKGFoLT4KLQkJICAgICBhbnRlbm5hX3N3aXRjaF9zd2FwICYgQU5UU1dBUF9BQikgPyBSRURVQ0VfQ0hBSU5fMCA6Ci0JCSAgICBSRURVQ0VfQ0hBSU5fMTsKKwkJICAgIChhaC0+Y29uZmlnLmFudGVubmFfc3dpdGNoX3N3YXAgJiBBTlRTV0FQX0FCKSA/CisJCQlSRURVQ0VfQ0hBSU5fMCA6IFJFRFVDRV9DSEFJTl8xOwogCQlicmVhazsKIAljYXNlIEFUSDlLX0FOVF9GSVhFRF9COgogCQliYW5rNlNlbE1hc2sgPQotCQkgICAgKGFoLT4KLQkJICAgICBhbnRlbm5hX3N3aXRjaF9zd2FwICYgQU5UU1dBUF9BQikgPyBSRURVQ0VfQ0hBSU5fMSA6Ci0JCSAgICBSRURVQ0VfQ0hBSU5fMDsKKwkJICAgIChhaC0+Y29uZmlnLmFudGVubmFfc3dpdGNoX3N3YXAgJiBBTlRTV0FQX0FCKSA/CisJCQlSRURVQ0VfQ0hBSU5fMSA6IFJFRFVDRV9DSEFJTl8wOwogCQlicmVhazsKIAljYXNlIEFUSDlLX0FOVF9WQVJJQUJMRToKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BoeS5oCmluZGV4IGM3MGY1MzAuLmRmZGE2ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9waHkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGh5LmgKQEAgLTE4NSw2ICsxODUsOSBAQAogI2RlZmluZSBBUl9QSFlfUExMX0NUTF80NF8yMTMzICAweGViCiAjZGVmaW5lIEFSX1BIWV9QTExfQ1RMXzQwXzIxMzMgIDB4ZWEKIAorI2RlZmluZSBBUl9QSFlfU1BFQ1RSQUxfU0NBTgkJMHg5OTEyCisjZGVmaW5lIEFSX1BIWV9TUEVDVFJBTF9TQ0FOX0VOQUJMRQkweDEKKwogI2RlZmluZSBBUl9QSFlfUlhfREVMQVkgICAgICAgICAgIDB4OTkxNAogI2RlZmluZSBBUl9QSFlfU0VBUkNIX1NUQVJUX0RFTEFZIDB4OTkxOAogI2RlZmluZSBBUl9QSFlfUlhfREVMQVlfREVMQVkgICAgIDB4MDAwMDNGRkYKQEAgLTMwOSw3ICszMTIsMjUgQEAKICNkZWZpbmUgQVJfUEhZX05FV19BRENfRENfR0FJTl9DT1JSKF9pKSAoMHg5OWI0ICsgKChfaSkgPDwgMTIpKQogI2RlZmluZSBBUl9QSFlfTkVXX0FEQ19HQUlOX0NPUlJfRU5BQkxFIDB4NDAwMDAwMDAKICNkZWZpbmUgQVJfUEhZX05FV19BRENfRENfT0ZGU0VUX0NPUlJfRU5BQkxFIDB4ODAwMDAwMDAKLSNkZWZpbmUgQVJfUEhZX01VTFRJQ0hBSU5fR0FJTl9DVEwgIDB4OTlhYworCisjZGVmaW5lIEFSX1BIWV9NVUxUSUNIQUlOX0dBSU5fQ1RMICAgICAgICAgIDB4OTlhYworI2RlZmluZSBBUl9QSFlfOTI4NV9BTlRfRElWX0NUTF9BTEwgICAgICAgICAweDdmMDAwMDAwCisjZGVmaW5lIEFSX1BIWV85Mjg1X0FOVF9ESVZfQ1RMICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQVJfUEhZXzkyODVfQU5UX0RJVl9DVExfUyAgICAgICAgICAgMjQKKyNkZWZpbmUgQVJfUEhZXzkyODVfQU5UX0RJVl9BTFRfTE5BQ09ORiAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBBUl9QSFlfOTI4NV9BTlRfRElWX0FMVF9MTkFDT05GX1MgICAyNQorI2RlZmluZSBBUl9QSFlfOTI4NV9BTlRfRElWX01BSU5fTE5BQ09ORiAgICAweDE4MDAwMDAwCisjZGVmaW5lIEFSX1BIWV85Mjg1X0FOVF9ESVZfTUFJTl9MTkFDT05GX1MgIDI3CisjZGVmaW5lIEFSX1BIWV85Mjg1X0FOVF9ESVZfQUxUX0dBSU5UQiAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQVJfUEhZXzkyODVfQU5UX0RJVl9BTFRfR0FJTlRCX1MgICAgMjkKKyNkZWZpbmUgQVJfUEhZXzkyODVfQU5UX0RJVl9NQUlOX0dBSU5UQiAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBBUl9QSFlfOTI4NV9BTlRfRElWX01BSU5fR0FJTlRCX1MgICAzMAorI2RlZmluZSBBUl9QSFlfOTI4NV9BTlRfRElWX0xOQTEgICAgICAgICAgICAyCisjZGVmaW5lIEFSX1BIWV85Mjg1X0FOVF9ESVZfTE5BMiAgICAgICAgICAgIDEKKyNkZWZpbmUgQVJfUEhZXzkyODVfQU5UX0RJVl9MTkExX1BMVVNfTE5BMiAgMworI2RlZmluZSBBUl9QSFlfOTI4NV9BTlRfRElWX0xOQTFfTUlOVVNfTE5BMiAwCisjZGVmaW5lIEFSX1BIWV85Mjg1X0FOVF9ESVZfR0FJTlRCXzAgICAgICAgIDAKKyNkZWZpbmUgQVJfUEhZXzkyODVfQU5UX0RJVl9HQUlOVEJfMSAgICAgICAgMQogCiAjZGVmaW5lIEFSX1BIWV9FWFRfQ0NBMCAgICAgICAgICAgICAweDk5YjgKICNkZWZpbmUgQVJfUEhZX0VYVF9DQ0EwX1RIUkVTSDYyICAgIDB4MDAwMDAwRkYKQEAgLTM3NSw2ICszOTYsNyBAQAogI2RlZmluZSBBUl9QSFlfQ0hBTl9JTkZPX0dBSU4gICAgICAgICAgMHg5Q0ZDCiAKICNkZWZpbmUgQVJfUEhZX01PREUgICAgICAgICAweEEyMDAKKyNkZWZpbmUgQVJfUEhZX01PREVfQVNZTkNGSUZPIDB4ODAKICNkZWZpbmUgQVJfUEhZX01PREVfQVIyMTMzICAweDA4CiAjZGVmaW5lIEFSX1BIWV9NT0RFX0FSNTExMSAgMHgwMAogI2RlZmluZSBBUl9QSFlfTU9ERV9BUjUxMTIgIDB4MDgKQEAgLTM5Nyw2ICs0MTksNyBAQAogI2RlZmluZSBBUl9QSFlfQ0NLX0RFVEVDVF9BTlRfU1dJVENIX1RJTUUgICAgICAgICAgIDB4MDAwMDFGQzAKICNkZWZpbmUgQVJfUEhZX0NDS19ERVRFQ1RfQU5UX1NXSVRDSF9USU1FX1MgICAgICAgICA2CiAjZGVmaW5lIEFSX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVYgICAgMHgyMDAwCisjZGVmaW5lIEFSX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVZfUyAgMTMKIAogI2RlZmluZSBBUl9QSFlfR0FJTl8yR0haICAgICAgICAgICAgICAgIDB4QTIwQwogI2RlZmluZSBBUl9QSFlfR0FJTl8yR0haX1JYVFhfTUFSR0lOICAgIDB4MDBGQzAwMDAKQEAgLTQ2NywxMSArNDkwLDE4IEBACiAjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMOSAgICAgICAweGEyN0MKICNkZWZpbmUgQVJfUEhZX1RYX0RFU0lSRURfU0NBTEVfQ0NLICAgICAgICAweDAwMDA3QzAwCiAjZGVmaW5lIEFSX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDS19TICAgICAgMTAKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw5X1JFU19EQ19SRU1PVkFMICAweDgwMDAwMDAwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMOV9SRVNfRENfUkVNT1ZBTF9TIDMxCiAKICNkZWZpbmUgQVJfUEhZX1RYX0dBSU5fVEJMMSAgICAgIDB4YTMwMAogI2RlZmluZSBBUl9QSFlfVFhfR0FJTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0YwMDAKICNkZWZpbmUgQVJfUEhZX1RYX0dBSU5fUyAgICAgICAgICAgICAgICAgICAxMgogCisjZGVmaW5lIEFSX1BIWV9DSDBfVFhfUFdSQ1RSTDExICAweGEzOTgKKyNkZWZpbmUgQVJfUEhZX0NIMV9UWF9QV1JDVFJMMTEgIDB4YjM5OAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9PTFBDX1RFTVBfQ09NUCAgIDB4MDAwMEZDMDAKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfT0xQQ19URU1QX0NPTVBfUyAxMAorCiAjZGVmaW5lIEFSX1BIWV9WSVRfTUFTSzJfTV80Nl82MSAweGEzYTAKICNkZWZpbmUgQVJfUEhZX01BU0syX01fMzFfNDUgICAgIDB4YTNhNAogI2RlZmluZSBBUl9QSFlfTUFTSzJfTV8xNl8zMCAgICAgMHhhM2E4CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCmluZGV4IGJhMDZlNzguLjE2YTI3MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCkBAIC0yMiwxMzMgKzIyLDEzMiBAQAogCXsKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDYwMDAsIC8qIDYgTWIgKi8KIAkJCTU0MDAsIDB4MGIsIDB4MDAsIDEyLAotCQkJMCwgMiwgMSwgMCwgMCwgMCwgMCwgMCB9LAorCQkJMCwgMCwgMCwgMCwgMCwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgOTAwMCwgLyogOSBNYiAqLwogCQkJNzgwMCwgIDB4MGYsIDB4MDAsIDE4LAotCQkJMCwgMywgMSwgMSwgMSwgMSwgMSwgMCB9LAorCQkJMCwgMSwgMSwgMSwgMSwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTIwMDAsIC8qIDEyIE1iICovCiAJCQkxMDAwMCwgMHgwYSwgMHgwMCwgMjQsCi0JCQkyLCA0LCAyLCAyLCAyLCAyLCAyLCAwIH0sCisJCQkyLCAyLCAyLCAyLCAyLCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAxODAwMCwgLyogMTggTWIgKi8KIAkJCTEzOTAwLCAweDBlLCAweDAwLCAzNiwKLQkJCTIsIDYsICAyLCAzLCAzLCAzLCAzLCAwIH0sCisJCQkyLCAgMywgMywgMywgMywgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMjQwMDAsIC8qIDI0IE1iICovCiAJCQkxNzMwMCwgMHgwOSwgMHgwMCwgNDgsCi0JCQk0LCAxMCwgMywgNCwgNCwgNCwgNCwgMCB9LAorCQkJNCwgIDQsIDQsIDQsIDQsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDM2MDAwLCAvKiAzNiBNYiAqLwogCQkJMjMwMDAsIDB4MGQsIDB4MDAsIDcyLAotCQkJNCwgMTQsIDMsIDUsIDUsIDUsIDUsIDAgfSwKKwkJCTQsICA1LCA1LCA1LCA1LCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA0ODAwMCwgLyogNDggTWIgKi8KIAkJCTI3NDAwLCAweDA4LCAweDAwLCA5NiwKLQkJCTQsIDIwLCAzLCA2LCA2LCA2LCA2LCAwIH0sCisJCQk0LCAgNiwgNiwgNiwgNiwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNTQwMDAsIC8qIDU0IE1iICovCiAJCQkyOTMwMCwgMHgwYywgMHgwMCwgMTA4LAotCQkJNCwgMjMsIDMsIDcsIDcsIDcsIDcsIDAgfSwKLQkJeyBWQUxJRF8yMCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCA2NTAwLCAvKiA2LjUgTWIgKi8KKwkJCTQsICA3LCA3LCA3LCA3LCAwIH0sCisJCXsgVkFMSURfMjA0MCwgVkFMSURfMjA0MCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDY1MDAsIC8qIDYuNSBNYiAqLwogCQkJNjQwMCwgMHg4MCwgMHgwMCwgMCwKLQkJCTAsIDIsIDMsIDgsIDI0LCA4LCAyNCwgMzIxNiB9LAorCQkJMCwgOCwgMjQsIDgsIDI0LCAzMjE2IH0sCiAJCXsgVkFMSURfMjAsIFZBTElEXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgMTMwMDAsIC8qIDEzIE1iICovCiAJCQkxMjcwMCwgMHg4MSwgMHgwMCwgMSwKLQkJCTIsIDQsIDMsIDksIDI1LCA5LCAyNSwgNjQzNCB9LAorCQkJMiwgOSwgMjUsIDksIDI1LCA2NDM0IH0sCiAJCXsgVkFMSURfMjAsIFZBTElEXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgMTk1MDAsIC8qIDE5LjUgTWIgKi8KIAkJCTE4ODAwLCAweDgyLCAweDAwLCAyLAotCQkJMiwgNiwgMywgMTAsIDI2LCAxMCwgMjYsIDk2NTAgfSwKKwkJCTIsIDEwLCAyNiwgMTAsIDI2LCA5NjUwIH0sCiAJCXsgVkFMSURfMjAsIFZBTElEXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgMjYwMDAsIC8qIDI2IE1iICovCiAJCQkyNTAwMCwgMHg4MywgMHgwMCwgMywKLQkJCTQsIDEwLCAzLCAxMSwgMjcsIDExLCAyNywgMTI4NjggfSwKKwkJCTQsICAxMSwgMjcsIDExLCAyNywgMTI4NjggfSwKIAkJeyBWQUxJRF8yMCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCAzOTAwMCwgLyogMzkgTWIgKi8KIAkJCTM2NzAwLCAweDg0LCAweDAwLCA0LAotCQkJNCwgMTQsIDMsIDEyLCAyOCwgMTIsIDI4LCAxOTMwNCB9LAorCQkJNCwgIDEyLCAyOCwgMTIsIDI4LCAxOTMwNCB9LAogCQl7IElOVkFMSUQsIFZBTElEXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgNTIwMDAsIC8qIDUyIE1iICovCiAJCQk0ODEwMCwgMHg4NSwgMHgwMCwgNSwKLQkJCTQsIDIwLCAzLCAxMywgMjksIDEzLCAyOSwgMjU3NDAgfSwKKwkJCTQsICAxMywgMjksIDEzLCAyOSwgMjU3NDAgfSwKIAkJeyBJTlZBTElELCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDU4NTAwLCAvKiA1OC41IE1iICovCiAJCQk1MzUwMCwgMHg4NiwgMHgwMCwgNiwKLQkJCTQsIDIzLCAzLCAxNCwgMzAsIDE0LCAzMCwgIDI4OTU2IH0sCisJCQk0LCAgMTQsIDMwLCAxNCwgMzAsICAyODk1NiB9LAogCQl7IElOVkFMSUQsIFZBTElEXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgNjUwMDAsIC8qIDY1IE1iICovCiAJCQk1OTAwMCwgMHg4NywgMHgwMCwgNywKLQkJCTQsIDI1LCAzLCAxNSwgMzEsIDE1LCAzMiwgMzIxODAgfSwKKwkJCTQsICAxNSwgMzEsIDE1LCAzMiwgMzIxODAgfSwKIAkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMTMwMDAsIC8qIDEzIE1iICovCiAJCQkxMjcwMCwgMHg4OCwgMHgwMCwKLQkJCTgsIDAsIDIsIDMsIDE2LCAzMywgMTYsIDMzLCA2NDMwIH0sCisJCQk4LCAzLCAxNiwgMzMsIDE2LCAzMywgNjQzMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCAyNjAwMCwgLyogMjYgTWIgKi8KIAkJCTI0ODAwLCAweDg5LCAweDAwLCA5LAotCQkJMiwgNCwgMywgMTcsIDM0LCAxNywgMzQsIDEyODYwIH0sCisJCQkyLCAxNywgMzQsIDE3LCAzNCwgMTI4NjAgfSwKIAkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMzkwMDAsIC8qIDM5IE1iICovCiAJCQkzNjYwMCwgMHg4YSwgMHgwMCwgMTAsCi0JCQkyLCA2LCAzLCAxOCwgMzUsIDE4LCAzNSwgMTkzMDAgfSwKKwkJCTIsIDE4LCAzNSwgMTgsIDM1LCAxOTMwMCB9LAogCQl7IFZBTElEXzIwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgNTIwMDAsIC8qIDUyIE1iICovCiAJCQk0ODEwMCwgMHg4YiwgMHgwMCwgMTEsCi0JCQk0LCAxMCwgMywgMTksIDM2LCAxOSwgMzYsIDI1NzM2IH0sCisJCQk0LCAgMTksIDM2LCAxOSwgMzYsIDI1NzM2IH0sCiAJCXsgVkFMSURfMjAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCA3ODAwMCwgLyogNzggTWIgKi8KIAkJCTY5NTAwLCAweDhjLCAweDAwLCAxMiwKLQkJCTQsIDE0LCAzLCAyMCwgMzcsIDIwLCAzNywgMzg2MDAgfSwKKwkJCTQsICAyMCwgMzcsIDIwLCAzNywgMzg2MDAgfSwKIAkJeyBWQUxJRF8yMCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDEwNDAwMCwgLyogMTA0IE1iICovCiAJCQk4OTUwMCwgMHg4ZCwgMHgwMCwgMTMsCi0JCQk0LCAyMCwgMywgMjEsIDM4LCAyMSwgMzgsIDUxNDcyIH0sCisJCQk0LCAgMjEsIDM4LCAyMSwgMzgsIDUxNDcyIH0sCiAJCXsgVkFMSURfMjAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCAxMTcwMDAsIC8qIDExNyBNYiAqLwogCQkJOTg5MDAsIDB4OGUsIDB4MDAsIDE0LAotCQkJNCwgMjMsIDMsIDIyLCAzOSwgMjIsIDM5LCA1Nzg5MCB9LAorCQkJNCwgIDIyLCAzOSwgMjIsIDM5LCA1Nzg5MCB9LAogCQl7IFZBTElEXzIwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMTMwMDAwLCAvKiAxMzAgTWIgKi8KIAkJCTEwODMwMCwgMHg4ZiwgMHgwMCwgMTUsCi0JCQk0LCAyNSwgMywgMjMsIDQwLCAyMywgNDEsIDY0MzIwIH0sCisJCQk0LCAgMjMsIDQwLCAyMywgNDEsIDY0MzIwIH0sCiAJCXsgVkFMSURfNDAsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTM1MDAsIC8qIDEzLjUgTWIgKi8KIAkJCTEzMjAwLCAweDgwLCAweDAwLCAwLAotCQkJMCwgMiwgMywgOCwgMjQsIDI0LCAyNCwgNjY4NCB9LAorCQkJMCwgOCwgMjQsIDI0LCAyNCwgNjY4NCB9LAogCQl7IFZBTElEXzQwLCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDI3NTAwLCAvKiAyNy4wIE1iICovCiAJCQkyNTkwMCwgMHg4MSwgMHgwMCwgMSwKLQkJCTIsIDQsIDMsIDksIDI1LCAyNSwgMjUsIDEzMzY4IH0sCisJCQkyLCA5LCAyNSwgMjUsIDI1LCAxMzM2OCB9LAogCQl7IFZBTElEXzQwLCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDQwNTAwLCAvKiA0MC41IE1iICovCiAJCQkzODYwMCwgMHg4MiwgMHgwMCwgMiwKLQkJCTIsIDYsIDMsIDEwLCAyNiwgMjYsIDI2LCAyMDA1MiB9LAorCQkJMiwgMTAsIDI2LCAyNiwgMjYsIDIwMDUyIH0sCiAJCXsgVkFMSURfNDAsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgNTQwMDAsIC8qIDU0IE1iICovCiAJCQk0OTgwMCwgMHg4MywgMHgwMCwgMywKLQkJCTQsIDEwLCAzLCAxMSwgMjcsIDI3LCAyNywgMjY3MzggfSwKKwkJCTQsICAxMSwgMjcsIDI3LCAyNywgMjY3MzggfSwKIAkJeyBWQUxJRF80MCwgVkFMSURfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCA4MTUwMCwgLyogODEgTWIgKi8KIAkJCTcyMjAwLCAweDg0LCAweDAwLCA0LAotCQkJNCwgMTQsIDMsIDEyLCAyOCwgMjgsIDI4LCA0MDEwNCB9LAorCQkJNCwgIDEyLCAyOCwgMjgsIDI4LCA0MDEwNCB9LAogCQl7IElOVkFMSUQsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTA4MDAwLCAvKiAxMDggTWIgKi8KIAkJCTkyOTAwLCAweDg1LCAweDAwLCA1LAotCQkJNCwgMjAsIDMsIDEzLCAyOSwgMjksIDI5LCA1MzQ3NiB9LAorCQkJNCwgIDEzLCAyOSwgMjksIDI5LCA1MzQ3NiB9LAogCQl7IElOVkFMSUQsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTIxNTAwLCAvKiAxMjEuNSBNYiAqLwogCQkJMTAyNzAwLCAweDg2LCAweDAwLCA2LAotCQkJNCwgMjMsIDMsIDE0LCAzMCwgMzAsIDMwLCA2MDE1NiB9LAorCQkJNCwgIDE0LCAzMCwgMzAsIDMwLCA2MDE1NiB9LAogCQl7IElOVkFMSUQsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTM1MDAwLCAvKiAxMzUgTWIgKi8KIAkJCTExMjAwMCwgMHg4NywgMHgwMCwgNywKLQkJCTQsIDI1LCAzLCAxNSwgMzEsIDMyLCAzMiwgNjY4NDAgfSwKKwkJCTQsICAxNSwgMzEsIDMyLCAzMiwgNjY4NDAgfSwKIAkJeyBJTlZBTElELCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1NfSEdJLCAxNTAwMDAsIC8qIDE1MCBNYiAqLwogCQkJMTIyMDAwLCAweDg3LCAweDAwLCA3LAotCQkJNCwgMjUsIDMsIDE1LCAzMSwgMzIsIDMyLCA3NDIwMCB9LAorCQkJNCwgIDE1LCAzMSwgMzIsIDMyLCA3NDIwMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAyNzAwMCwgLyogMjcgTWIgKi8KIAkJCTI1ODAwLCAweDg4LCAweDAwLCA4LAotCQkJMCwgMiwgMywgMTYsIDMzLCAzMywgMzMsIDEzMzYwIH0sCisJCQkwLCAxNiwgMzMsIDMzLCAzMywgMTMzNjAgfSwKIAkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9EUywgNTQwMDAsIC8qIDU0IE1iICovCiAJCQk0OTgwMCwgMHg4OSwgMHgwMCwgOSwKLQkJCTIsIDQsIDMsIDE3LCAzNCwgMzQsIDM0LCAyNjcyMCB9LAorCQkJMiwgMTcsIDM0LCAzNCwgMzQsIDI2NzIwIH0sCiAJCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDgxMDAwLCAvKiA4MSBNYiAqLwogCQkJNzE5MDAsIDB4OGEsIDB4MDAsIDEwLAotCQkJMiwgNiwgMywgMTgsIDM1LCAzNSwgMzUsIDQwMDgwIH0sCisJCQkyLCAxOCwgMzUsIDM1LCAzNSwgNDAwODAgfSwKIAkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDEwODAwMCwgLyogMTA4IE1iICovCiAJCQk5MjUwMCwgMHg4YiwgMHgwMCwgMTEsCi0JCQk0LCAxMCwgMywgMTksIDM2LCAzNiwgMzYsIDUzNDQwIH0sCisJCQk0LCAgMTksIDM2LCAzNiwgMzYsIDUzNDQwIH0sCiAJCXsgVkFMSURfNDAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAxNjIwMDAsIC8qIDE2MiBNYiAqLwogCQkJMTMwMzAwLCAweDhjLCAweDAwLCAxMiwKLQkJCTQsIDE0LCAzLCAyMCwgMzcsIDM3LCAzNywgODAxNjAgfSwKKwkJCTQsICAyMCwgMzcsIDM3LCAzNywgODAxNjAgfSwKIAkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDIxNjAwMCwgLyogMjE2IE1iICovCiAJCQkxNjI4MDAsIDB4OGQsIDB4MDAsIDEzLAotCQkJNCwgMjAsIDMsIDIxLCAzOCwgMzgsIDM4LCAxMDY4ODAgfSwKKwkJCTQsICAyMSwgMzgsIDM4LCAzOCwgMTA2ODgwIH0sCiAJCXsgVkFMSURfNDAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAyNDMwMDAsIC8qIDI0MyBNYiAqLwogCQkJMTc4MjAwLCAweDhlLCAweDAwLCAxNCwKLQkJCTQsIDIzLCAzLCAyMiwgMzksIDM5LCAzOSwgMTIwMjQwIH0sCisJCQk0LCAgMjIsIDM5LCAzOSwgMzksIDEyMDI0MCB9LAogCQl7IFZBTElEXzQwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9EUywgMjcwMDAwLCAvKiAyNzAgTWIgKi8KIAkJCTE5MjEwMCwgMHg4ZiwgMHgwMCwgMTUsCi0JCQk0LCAyNSwgMywgMjMsIDQwLCA0MSwgNDEsIDEzMzYwMCB9LAorCQkJNCwgIDIzLCA0MCwgNDEsIDQxLCAxMzM2MDAgfSwKIAkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFNfSEdJLCAzMDAwMDAsIC8qIDMwMCBNYiAqLwogCQkJMjA3MDAwLCAweDhmLCAweDAwLCAxNSwKLQkJCTQsIDI1LCAzLCAyMywgNDAsIDQxLCA0MSwgMTQ4NDAwIH0sCisJCQk0LCAgMjMsIDQwLCA0MSwgNDEsIDE0ODQwMCB9LAogCX0sCiAJNTAsICAvKiBwcm9iZSBpbnRlcnZhbCAqLwotCTUwLCAgLyogcnNzaSByZWR1Y2UgaW50ZXJ2YWwgKi8KIAlXTEFOX1JDX0hUX0ZMQUcsICAvKiBQaHkgcmF0ZXMgYWxsb3dlZCBpbml0aWFsbHkgKi8KIH07CiAKQEAgLTE2MCwxNDUgKzE1OSwxNDQgQEAKIAl7CiAJCXsgVkFMSURfQUxMLCBWQUxJRF9BTEwsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLAotCQkJMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCB9LAorCQkJMCwgMCwgMCwgMCwgMCwgMCB9LAogCQl7IFZBTElEX0FMTCwgVkFMSURfQUxMLCBXTEFOX1JDX1BIWV9DQ0ssIDIwMDAsIC8qIDIgTWIgKi8KIAkJCTE5MDAsIDB4MWEsIDB4MDQsIDQsCi0JCQkxLCAxLCAxLCAxLCAxLCAxLCAxLCAwIH0sCisJCQkxLCAxLCAxLCAxLCAxLCAwIH0sCiAJCXsgVkFMSURfQUxMLCBWQUxJRF9BTEwsIFdMQU5fUkNfUEhZX0NDSywgNTUwMCwgLyogNS41IE1iICovCiAJCQk0OTAwLCAweDE5LCAweDA0LCAxMSwKLQkJCTIsIDIsIDIsIDIsIDIsIDIsIDIsIDAgfSwKKwkJCTIsIDIsIDIsIDIsIDIsIDAgfSwKIAkJeyBWQUxJRF9BTEwsIFZBTElEX0FMTCwgV0xBTl9SQ19QSFlfQ0NLLCAxMTAwMCwgLyogMTEgTWIgKi8KIAkJCTgxMDAsIDB4MTgsIDB4MDQsIDIyLAotCQkJMywgMywgMiwgMywgMywgMywgMywgMCB9LAorCQkJMywgMywgMywgMywgMywgMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDYwMDAsIC8qIDYgTWIgKi8KIAkJCTU0MDAsIDB4MGIsIDB4MDAsIDEyLAotCQkJNCwgMiwgMSwgNCwgNCwgNCwgNCwgMCB9LAorCQkJNCwgNCwgNCwgNCwgNCwgMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KIAkJCTc4MDAsIDB4MGYsIDB4MDAsIDE4LAotCQkJNCwgMywgMSwgNSwgNSwgNSwgNSwgMCB9LAorCQkJNCwgNSwgNSwgNSwgNSwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTIwMDAsIC8qIDEyIE1iICovCiAJCQkxMDEwMCwgMHgwYSwgMHgwMCwgMjQsCi0JCQk2LCA0LCAxLCA2LCA2LCA2LCA2LCAwIH0sCisJCQk2LCA2LCA2LCA2LCA2LCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAxODAwMCwgLyogMTggTWIgKi8KIAkJCTE0MTAwLCAgMHgwZSwgMHgwMCwgMzYsCi0JCQk2LCA2LCAyLCA3LCA3LCA3LCA3LCAwIH0sCisJCQk2LCA3LCA3LCA3LCA3LCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAyNDAwMCwgLyogMjQgTWIgKi8KIAkJCTE3NzAwLCAweDA5LCAweDAwLCA0OCwKLQkJCTgsIDEwLCAzLCA4LCA4LCA4LCA4LCAwIH0sCisJCQk4LCAgOCwgOCwgOCwgOCwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMzYwMDAsIC8qIDM2IE1iICovCiAJCQkyMzcwMCwgMHgwZCwgMHgwMCwgNzIsCi0JCQk4LCAxNCwgMywgOSwgOSwgOSwgOSwgMCB9LAorCQkJOCwgIDksIDksIDksIDksIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDQ4MDAwLCAvKiA0OCBNYiAqLwogCQkJMjc0MDAsIDB4MDgsIDB4MDAsIDk2LAotCQkJOCwgMjAsIDMsIDEwLCAxMCwgMTAsIDEwLCAwIH0sCisJCQk4LCAgMTAsIDEwLCAxMCwgMTAsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDU0MDAwLCAvKiA1NCBNYiAqLwogCQkJMzA5MDAsIDB4MGMsIDB4MDAsIDEwOCwKLQkJCTgsIDIzLCAzLCAxMSwgMTEsIDExLCAxMSwgMCB9LAorCQkJOCwgIDExLCAxMSwgMTEsIDExLCAwIH0sCiAJCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDY1MDAsIC8qIDYuNSBNYiAqLwogCQkJNjQwMCwgMHg4MCwgMHgwMCwgMCwKLQkJCTQsIDIsIDMsIDEyLCAyOCwgMTIsIDI4LCAzMjE2IH0sCisJCQk0LCAxMiwgMjgsIDEyLCAyOCwgMzIxNiB9LAogCQl7IFZBTElEXzIwLCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDEzMDAwLCAvKiAxMyBNYiAqLwogCQkJMTI3MDAsIDB4ODEsIDB4MDAsIDEsCi0JCQk2LCA0LCAzLCAxMywgMjksIDEzLCAyOSwgNjQzNCB9LAorCQkJNiwgMTMsIDI5LCAxMywgMjksIDY0MzQgfSwKIAkJeyBWQUxJRF8yMCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCAxOTUwMCwgLyogMTkuNSBNYiAqLwogCQkJMTg4MDAsIDB4ODIsIDB4MDAsIDIsCi0JCQk2LCA2LCAzLCAxNCwgMzAsIDE0LCAzMCwgOTY1MCB9LAorCQkJNiwgMTQsIDMwLCAxNCwgMzAsIDk2NTAgfSwKIAkJeyBWQUxJRF8yMCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCAyNjAwMCwgLyogMjYgTWIgKi8KIAkJCTI1MDAwLCAweDgzLCAweDAwLCAzLAotCQkJOCwgMTAsIDMsIDE1LCAzMSwgMTUsIDMxLCAxMjg2OCB9LAorCQkJOCwgIDE1LCAzMSwgMTUsIDMxLCAxMjg2OCB9LAogCQl7IFZBTElEXzIwLCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDM5MDAwLCAvKiAzOSBNYiAqLwogCQkJMzY3MDAsIDB4ODQsIDB4MDAsIDQsCi0JCQk4LCAxNCwgMywgMTYsIDMyLCAxNiwgMzIsIDE5MzA0IH0sCisJCQk4LCAgMTYsIDMyLCAxNiwgMzIsIDE5MzA0IH0sCiAJCXsgSU5WQUxJRCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCA1MjAwMCwgLyogNTIgTWIgKi8KIAkJCTQ4MTAwLCAweDg1LCAweDAwLCA1LAotCQkJOCwgMjAsIDMsIDE3LCAzMywgMTcsIDMzLCAyNTc0MCB9LAorCQkJOCwgIDE3LCAzMywgMTcsIDMzLCAyNTc0MCB9LAogCQl7IElOVkFMSUQsICBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDU4NTAwLCAvKiA1OC41IE1iICovCiAJCQk1MzUwMCwgMHg4NiwgMHgwMCwgNiwKLQkJCTgsIDIzLCAzLCAxOCwgMzQsIDE4LCAzNCwgMjg5NTYgfSwKKwkJCTgsICAxOCwgMzQsIDE4LCAzNCwgMjg5NTYgfSwKIAkJeyBJTlZBTElELCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDY1MDAwLCAvKiA2NSBNYiAqLwogCQkJNTkwMDAsIDB4ODcsIDB4MDAsIDcsCi0JCQk4LCAyNSwgMywgMTksIDM1LCAxOSwgMzYsIDMyMTgwIH0sCisJCQk4LCAgMTksIDM1LCAxOSwgMzYsIDMyMTgwIH0sCiAJCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDEzMDAwLCAvKiAxMyBNYiAqLwogCQkJMTI3MDAsIDB4ODgsIDB4MDAsIDgsCi0JCQk0LCAyLCAzLCAyMCwgMzcsIDIwLCAzNywgNjQzMCB9LAorCQkJNCwgMjAsIDM3LCAyMCwgMzcsIDY0MzAgfSwKIAkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMjYwMDAsIC8qIDI2IE1iICovCiAJCQkyNDgwMCwgMHg4OSwgMHgwMCwgOSwKLQkJCTYsIDQsIDMsIDIxLCAzOCwgMjEsIDM4LCAxMjg2MCB9LAorCQkJNiwgMjEsIDM4LCAyMSwgMzgsIDEyODYwIH0sCiAJCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDM5MDAwLCAvKiAzOSBNYiAqLwogCQkJMzY2MDAsIDB4OGEsIDB4MDAsIDEwLAotCQkJNiwgNiwgMywgMjIsIDM5LCAyMiwgMzksIDE5MzAwIH0sCisJCQk2LCAyMiwgMzksIDIyLCAzOSwgMTkzMDAgfSwKIAkJeyBWQUxJRF8yMCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDUyMDAwLCAvKiA1MiBNYiAqLwogCQkJNDgxMDAsIDB4OGIsIDB4MDAsIDExLAotCQkJOCwgMTAsIDMsIDIzLCA0MCwgMjMsIDQwLCAyNTczNiB9LAorCQkJOCwgIDIzLCA0MCwgMjMsIDQwLCAyNTczNiB9LAogCQl7IFZBTElEXzIwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgNzgwMDAsIC8qIDc4IE1iICovCiAJCQk2OTUwMCwgMHg4YywgMHgwMCwgMTIsCi0JCQk4LCAxNCwgMywgMjQsIDQxLCAyNCwgNDEsIDM4NjAwIH0sCisJCQk4LCAgMjQsIDQxLCAyNCwgNDEsIDM4NjAwIH0sCiAJCXsgVkFMSURfMjAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCAxMDQwMDAsIC8qIDEwNCBNYiAqLwogCQkJODk1MDAsIDB4OGQsIDB4MDAsIDEzLAotCQkJOCwgMjAsIDMsIDI1LCA0MiwgMjUsIDQyLCA1MTQ3MiB9LAorCQkJOCwgIDI1LCA0MiwgMjUsIDQyLCA1MTQ3MiB9LAogCQl7IFZBTElEXzIwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMTE3MDAwLCAvKiAxMTcgTWIgKi8KIAkJCTk4OTAwLCAweDhlLCAweDAwLCAxNCwKLQkJCTgsIDIzLCAzLCAyNiwgNDMsIDI2LCA0NCwgNTc4OTAgfSwKKwkJCTgsICAyNiwgNDMsIDI2LCA0NCwgNTc4OTAgfSwKIAkJeyBWQUxJRF8yMCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDEzMDAwMCwgLyogMTMwIE1iICovCiAJCQkxMDgzMDAsIDB4OGYsIDB4MDAsIDE1LAotCQkJOCwgMjUsIDMsIDI3LCA0NCwgMjcsIDQ1LCA2NDMyMCB9LAorCQkJOCwgIDI3LCA0NCwgMjcsIDQ1LCA2NDMyMCB9LAogCQl7IFZBTElEXzQwLCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDEzNTAwLCAvKiAxMy41IE1iICovCiAJCQkxMzIwMCwgMHg4MCwgMHgwMCwgMCwKLQkJCTgsIDIsIDMsIDEyLCAyOCwgMjgsIDI4LCA2Njg0IH0sCisJCQk4LCAxMiwgMjgsIDI4LCAyOCwgNjY4NCB9LAogCQl7IFZBTElEXzQwLCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDI3NTAwLCAvKiAyNy4wIE1iICovCiAJCQkyNTkwMCwgMHg4MSwgMHgwMCwgMSwKLQkJCTgsIDQsIDMsIDEzLCAyOSwgMjksIDI5LCAxMzM2OCB9LAorCQkJOCwgMTMsIDI5LCAyOSwgMjksIDEzMzY4IH0sCiAJCXsgVkFMSURfNDAsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgNDA1MDAsIC8qIDQwLjUgTWIgKi8KIAkJCTM4NjAwLCAweDgyLCAweDAwLCAyLAotCQkJOCwgNiwgMywgMTQsIDMwLCAzMCwgMzAsIDIwMDUyIH0sCisJCQk4LCAxNCwgMzAsIDMwLCAzMCwgMjAwNTIgfSwKIAkJeyBWQUxJRF80MCwgVkFMSURfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCA1NDAwMCwgLyogNTQgTWIgKi8KIAkJCTQ5ODAwLCAweDgzLCAweDAwLCAzLAotCQkJOCwgMTAsIDMsIDE1LCAzMSwgMzEsIDMxLCAyNjczOCB9LAorCQkJOCwgIDE1LCAzMSwgMzEsIDMxLCAyNjczOCB9LAogCQl7IFZBTElEXzQwLCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDgxNTAwLCAvKiA4MSBNYiAqLwogCQkJNzIyMDAsIDB4ODQsIDB4MDAsIDQsCi0JCQk4LCAxNCwgMywgMTYsIDMyLCAzMiwgMzIsIDQwMTA0IH0sCisJCQk4LCAgMTYsIDMyLCAzMiwgMzIsIDQwMTA0IH0sCiAJCXsgSU5WQUxJRCwgVkFMSURfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCAxMDgwMDAsIC8qIDEwOCBNYiAqLwogCQkJOTI5MDAsIDB4ODUsIDB4MDAsIDUsCi0JCQk4LCAyMCwgMywgMTcsIDMzLCAzMywgMzMsIDUzNDc2IH0sCisJCQk4LCAgMTcsIDMzLCAzMywgMzMsIDUzNDc2IH0sCiAJCXsgSU5WQUxJRCwgIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTIxNTAwLCAvKiAxMjEuNSBNYiAqLwogCQkJMTAyNzAwLCAweDg2LCAweDAwLCA2LAotCQkJOCwgMjMsIDMsIDE4LCAzNCwgMzQsIDM0LCA2MDE1NiB9LAorCQkJOCwgIDE4LCAzNCwgMzQsIDM0LCA2MDE1NiB9LAogCQl7IElOVkFMSUQsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTM1MDAwLCAvKiAxMzUgTWIgKi8KIAkJCTExMjAwMCwgMHg4NywgMHgwMCwgNywKLQkJCTgsIDIzLCAzLCAxOSwgMzUsIDM2LCAzNiwgNjY4NDAgfSwKKwkJCTgsICAxOSwgMzUsIDM2LCAzNiwgNjY4NDAgfSwKIAkJeyBJTlZBTElELCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1NfSEdJLCAxNTAwMDAsIC8qIDE1MCBNYiAqLwogCQkJMTIyMDAwLCAweDg3LCAweDAwLCA3LAotCQkJOCwgMjUsIDMsIDE5LCAzNSwgMzYsIDM2LCA3NDIwMCB9LAorCQkJOCwgIDE5LCAzNSwgMzYsIDM2LCA3NDIwMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAyNzAwMCwgLyogMjcgTWIgKi8KIAkJCTI1ODAwLCAweDg4LCAweDAwLCA4LAotCQkJOCwgMiwgMywgMjAsIDM3LCAzNywgMzcsIDEzMzYwIH0sCisJCQk4LCAyMCwgMzcsIDM3LCAzNywgMTMzNjAgfSwKIAkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9EUywgNTQwMDAsIC8qIDU0IE1iICovCiAJCQk0OTgwMCwgMHg4OSwgMHgwMCwgOSwKLQkJCTgsIDQsIDMsIDIxLCAzOCwgMzgsIDM4LCAyNjcyMCB9LAorCQkJOCwgMjEsIDM4LCAzOCwgMzgsIDI2NzIwIH0sCiAJCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDgxMDAwLCAvKiA4MSBNYiAqLwogCQkJNzE5MDAsIDB4OGEsIDB4MDAsIDEwLAotCQkJOCwgNiwgMywgMjIsIDM5LCAzOSwgMzksIDQwMDgwIH0sCisJCQk4LCAyMiwgMzksIDM5LCAzOSwgNDAwODAgfSwKIAkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDEwODAwMCwgLyogMTA4IE1iICovCiAJCQk5MjUwMCwgMHg4YiwgMHgwMCwgMTEsCi0JCQk4LCAxMCwgMywgMjMsIDQwLCA0MCwgNDAsIDUzNDQwIH0sCisJCQk4LCAgMjMsIDQwLCA0MCwgNDAsIDUzNDQwIH0sCiAJCXsgVkFMSURfNDAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAxNjIwMDAsIC8qIDE2MiBNYiAqLwogCQkJMTMwMzAwLCAweDhjLCAweDAwLCAxMiwKLQkJCTgsIDE0LCAzLCAyNCwgNDEsIDQxLCA0MSwgODAxNjAgfSwKKwkJCTgsICAyNCwgNDEsIDQxLCA0MSwgODAxNjAgfSwKIAkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDIxNjAwMCwgLyogMjE2IE1iICovCiAJCQkxNjI4MDAsIDB4OGQsIDB4MDAsIDEzLAotCQkJOCwgMjAsIDMsIDI1LCA0MiwgNDIsIDQyLCAxMDY4ODAgfSwKKwkJCTgsICAyNSwgNDIsIDQyLCA0MiwgMTA2ODgwIH0sCiAJCXsgVkFMSURfNDAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAyNDMwMDAsIC8qIDI0MyBNYiAqLwogCQkJMTc4MjAwLCAweDhlLCAweDAwLCAxNCwKLQkJCTgsIDIzLCAzLCAyNiwgNDMsIDQzLCA0MywgMTIwMjQwIH0sCisJCQk4LCAgMjYsIDQzLCA0MywgNDMsIDEyMDI0MCB9LAogCQl7IFZBTElEXzQwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9EUywgMjcwMDAwLCAvKiAyNzAgTWIgKi8KIAkJCTE5MjEwMCwgMHg4ZiwgMHgwMCwgMTUsCi0JCQk4LCAyMywgMywgMjcsIDQ0LCA0NSwgNDUsIDEzMzYwMCB9LAorCQkJOCwgIDI3LCA0NCwgNDUsIDQ1LCAxMzM2MDAgfSwKIAkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFNfSEdJLCAzMDAwMDAsIC8qIDMwMCBNYiAqLwogCQkJMjA3MDAwLCAweDhmLCAweDAwLCAxNSwKLQkJCTgsIDI1LCAzLCAyNywgNDQsIDQ1LCA0NSwgMTQ4NDAwIH0sCisJCQk4LCAgMjcsIDQ0LCA0NSwgNDUsIDE0ODQwMCB9LAogCQl9LAogCTUwLCAgLyogcHJvYmUgaW50ZXJ2YWwgKi8KLQk1MCwgIC8qIHJzc2kgcmVkdWNlIGludGVydmFsICovCiAJV0xBTl9SQ19IVF9GTEFHLCAgLyogUGh5IHJhdGVzIGFsbG93ZWQgaW5pdGlhbGx5ICovCiB9OwogCkBAIC0zMDcsMzEgKzMwNSwzMCBAQAogCXsKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDYwMDAsIC8qIDYgTWIgKi8KIAkJCTU0MDAsIDB4MGIsIDB4MDAsICgweDgwfDEyKSwKLQkJCTAsIDIsIDEsIDAsIDAgfSwKKwkJCTAsIDAsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KIAkJCTc4MDAsIDB4MGYsIDB4MDAsIDE4LAotCQkJMCwgMywgMSwgMSwgMCB9LAorCQkJMCwgMSwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTIwMDAsIC8qIDEyIE1iICovCiAJCQkxMDAwMCwgMHgwYSwgMHgwMCwgKDB4ODB8MjQpLAotCQkJMiwgNCwgMiwgMiwgMCB9LAorCQkJMiwgMiwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTgwMDAsIC8qIDE4IE1iICovCiAJCQkxMzkwMCwgMHgwZSwgMHgwMCwgMzYsCi0JCQkyLCA2LCAyLCAzLCAwIH0sCisJCQkyLCAzLCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAyNDAwMCwgLyogMjQgTWIgKi8KIAkJCTE3MzAwLCAweDA5LCAweDAwLCAoMHg4MHw0OCksCi0JCQk0LCAxMCwgMywgNCwgMCB9LAorCQkJNCwgIDQsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDM2MDAwLCAvKiAzNiBNYiAqLwogCQkJMjMwMDAsIDB4MGQsIDB4MDAsIDcyLAotCQkJNCwgMTQsIDMsIDUsIDAgfSwKKwkJCTQsICA1LCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA0ODAwMCwgLyogNDggTWIgKi8KIAkJCTI3NDAwLCAweDA4LCAweDAwLCA5NiwKLQkJCTQsIDE5LCAzLCA2LCAwIH0sCisJCQk0LCAgNiwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNTQwMDAsIC8qIDU0IE1iICovCiAJCQkyOTMwMCwgMHgwYywgMHgwMCwgMTA4LAotCQkJNCwgMjMsIDMsIDcsIDAgfSwKKwkJCTQsICA3LCAwIH0sCiAJfSwKIAk1MCwgIC8qIHByb2JlIGludGVydmFsICovCi0JNTAsICAvKiByc3NpIHJlZHVjZSBpbnRlcnZhbCAqLwogCTAsICAgLyogUGh5IHJhdGVzIGFsbG93ZWQgaW5pdGlhbGx5ICovCiB9OwogCkBAIC0zNDAsNjQgKzMzNyw0MiBAQAogCXsKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLAotCQkJMCwgMCwgMSwgMCwgMCB9LAorCQkJMCwgMCwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCAyMDAwLCAvKiAyIE1iICovCiAJCQkxOTAwLCAweDFhLCAweDA0LCA0LAotCQkJMSwgMSwgMSwgMSwgMCB9LAorCQkJMSwgMSwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCA1NTAwLCAvKiA1LjUgTWIgKi8KIAkJCTQ5MDAsIDB4MTksIDB4MDQsIDExLAotCQkJMiwgMiwgMiwgMiwgMCB9LAorCQkJMiwgMiwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCAxMTAwMCwgLyogMTEgTWIgKi8KIAkJCTgxMDAsIDB4MTgsIDB4MDQsIDIyLAotCQkJMywgMywgMiwgMywgMCB9LAorCQkJMywgMywgMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDYwMDAsIC8qIDYgTWIgKi8KIAkJCTU0MDAsIDB4MGIsIDB4MDAsIDEyLAotCQkJNCwgMiwgMSwgNCwgMCB9LAorCQkJNCwgNCwgMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KIAkJCTc4MDAsIDB4MGYsIDB4MDAsIDE4LAotCQkJNCwgMywgMSwgNSwgMCB9LAorCQkJNCwgNSwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTIwMDAsIC8qIDEyIE1iICovCiAJCQkxMDAwMCwgMHgwYSwgMHgwMCwgMjQsCi0JCQk2LCA0LCAxLCA2LCAwIH0sCisJCQk2LCA2LCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAxODAwMCwgLyogMTggTWIgKi8KIAkJCTEzOTAwLCAweDBlLCAweDAwLCAzNiwKLQkJCTYsIDYsIDIsIDcsIDAgfSwKKwkJCTYsIDcsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDI0MDAwLCAvKiAyNCBNYiAqLwogCQkJMTczMDAsIDB4MDksIDB4MDAsIDQ4LAotCQkJOCwgMTAsIDMsIDgsIDAgfSwKKwkJCTgsICA4LCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAzNjAwMCwgLyogMzYgTWIgKi8KIAkJCTIzMDAwLCAweDBkLCAweDAwLCA3MiwKLQkJCTgsIDE0LCAzLCA5LCAwIH0sCisJCQk4LCAgOSwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNDgwMDAsIC8qIDQ4IE1iICovCiAJCQkyNzQwMCwgMHgwOCwgMHgwMCwgOTYsCi0JCQk4LCAxOSwgMywgMTAsIDAgfSwKKwkJCTgsICAxMCwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNTQwMDAsIC8qIDU0IE1iICovCiAJCQkyOTMwMCwgMHgwYywgMHgwMCwgMTA4LAotCQkJOCwgMjMsIDMsIDExLCAwIH0sCisJCQk4LCAgMTEsIDAgfSwKIAl9LAogCTUwLCAgLyogcHJvYmUgaW50ZXJ2YWwgKi8KLQk1MCwgIC8qIHJzc2kgcmVkdWNlIGludGVydmFsICovCi0JMCwgICAvKiBQaHkgcmF0ZXMgYWxsb3dlZCBpbml0aWFsbHkgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExYl9yYXRldGFibGUgPSB7Ci0JNCwKLQl7Ci0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9DQ0ssIDEwMDAsIC8qIDEgTWIgKi8KLQkJCTkwMCwgMHgxYiwgIDB4MDAsICgweDgwfDIpLAotCQkJMCwgMCwgMSwgMCwgMCB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCAyMDAwLCAvKiAyIE1iICovCi0JCQkxODAwLCAweDFhLCAweDA0LCAoMHg4MHw0KSwKLQkJCTEsIDEsIDEsIDEsIDAgfSwKLQkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX0NDSywgNTUwMCwgLyogNS41IE1iICovCi0JCQk0MzAwLCAweDE5LCAweDA0LCAoMHg4MHwxMSksCi0JCQkxLCAyLCAyLCAyLCAwIH0sCi0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9DQ0ssIDExMDAwLCAvKiAxMSBNYiAqLwotCQkJNzEwMCwgMHgxOCwgMHgwNCwgKDB4ODB8MjIpLAotCQkJMSwgNCwgMTAwLCAzLCAwIH0sCi0JfSwKLQkxMDAsIC8qIHByb2JlIGludGVydmFsICovCi0JMTAwLCAvKiByc3NpIHJlZHVjZSBpbnRlcnZhbCAqLwogCTAsICAgLyogUGh5IHJhdGVzIGFsbG93ZWQgaW5pdGlhbGx5ICovCiB9OwogCkBAIC00NTQsMTMgKzQyOSw2IEBACiAJYXRoX3JjX3ByaXYtPnZhbGlkX3JhdGVfaW5kZXhbaW5kZXhdID0gdmFsaWRfdHhfcmF0ZSA/IDEgOiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhdGhfcmNfaXN2YWxpZF90eG1hc2soc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAotCQkJCQl1OCBpbmRleCkKLXsKLQlBU1NFUlQoaW5kZXggPD0gYXRoX3JjX3ByaXYtPnJhdGVfdGFibGVfc2l6ZSk7Ci0JcmV0dXJuIGF0aF9yY19wcml2LT52YWxpZF9yYXRlX2luZGV4W2luZGV4XTsKLX0KLQogc3RhdGljIGlubGluZQogaW50IGF0aF9yY19nZXRfbmV4dHZhbGlkX3R4cmF0ZShjb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCiAJCQkJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LApAQCAtNDk1LDE1ICs0NjMsMTMgQEAKIAlpZiAoIWlnbm9yZV9jdyAmJiBXTEFOX1JDX1BIWV9IVChwaHkpKQogCQlpZiAoV0xBTl9SQ19QSFlfNDAocGh5KSAmJiAhKGNhcGZsYWcgJiBXTEFOX1JDXzQwX0ZMQUcpKQogCQkJcmV0dXJuIDA7Ci0JCWlmICghV0xBTl9SQ19QSFlfNDAocGh5KSAmJiAoY2FwZmxhZyAmIFdMQU5fUkNfNDBfRkxBRykpCi0JCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLWF0aF9yY19nZXRfbmV4dGxvd2VydmFsaWRfdHhyYXRlKGNvbnN0IHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSwKLQkJCQkgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAotCQkJCSB1OCBjdXJfdmFsaWRfdHhyYXRlLCB1OCAqbmV4dF9pZHgpCithdGhfcmNfZ2V0X2xvd2VyX3JpeChjb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCisJCSAgICAgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAorCQkgICAgIHU4IGN1cl92YWxpZF90eHJhdGUsIHU4ICpuZXh0X2lkeCkKIHsKIAlpbnQ4X3QgaTsKIApAQCAtNjI5LDUyICs1OTUsMjAgQEAKIAlyZXR1cm4gaGk7CiB9CiAKLXN0YXRpYyB1OCBhdGhfcmNfcmF0ZWZpbmRfaHQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgICAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlLAotCQkJICAgICBpbnQgKmlzX3Byb2JpbmcpCisvKiBGaW5kcyB0aGUgaGlnaGVzdCByYXRlIGluZGV4IHdlIGNhbiB1c2UgKi8KK3N0YXRpYyB1OCBhdGhfcmNfZ2V0X2hpZ2hlc3Rfcml4KHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJICAgICAgICAgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAorCQkJCSBjb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCisJCQkJIGludCAqaXNfcHJvYmluZykKIHsKLQl1MzIgZHQsIGJlc3RfdGhydXB1dCwgdGhpc190aHJ1cHV0LCBub3dfbXNlYzsKKwl1MzIgYmVzdF90aHJ1cHV0LCB0aGlzX3RocnVwdXQsIG5vd19tc2VjOwogCXU4IHJhdGUsIG5leHRfcmF0ZSwgYmVzdF9yYXRlLCBtYXhpbmRleCwgbWluaW5kZXg7Ci0JaW50OF90ICByc3NpX2xhc3QsIHJzc2lfcmVkdWNlID0gMCwgaW5kZXggPSAwOwotCi0JKmlzX3Byb2JpbmcgPSAwOwotCi0JcnNzaV9sYXN0ID0gbWVkaWFuKGF0aF9yY19wcml2LT5yc3NpX2xhc3QsCi0JCQkgICBhdGhfcmNfcHJpdi0+cnNzaV9sYXN0X3ByZXYsCi0JCQkgICBhdGhfcmNfcHJpdi0+cnNzaV9sYXN0X3ByZXYyKTsKLQotCS8qCi0JICogQWdlIChyZWR1Y2UpIGxhc3QgYWNrIHJzc2kgYmFzZWQgb24gaG93IG9sZCBpdCBpcy4KLQkgKiBUaGUgYml6YXJyZSBudW1iZXJzIGFyZSBzbyB0aGUgZGVsdGEgaXMgMTYwbXNlYywKLQkgKiBtZWFuaW5nIHdlIGRpdmlkZSBieSAxNi4KLQkgKiAgIDBtc2VjICAgPD0gZHQgPD0gMjVtc2VjOiAgIGRvbid0IGRlcmF0ZQotCSAqICAgMjVtc2VjICA8PSBkdCA8PSAxODVtc2VjOiAgZGVyYXRlIGxpbmVhcmx5IGZyb20gMCB0byAxMGRCCi0JICogICAxODVtc2VjIDw9IGR0OiAgICAgICAgICAgICBkZXJhdGUgYnkgMTBkQgotCSAqLworCWludDhfdCBpbmRleCA9IDA7CiAKIAlub3dfbXNlYyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7Ci0JZHQgPSBub3dfbXNlYyAtIGF0aF9yY19wcml2LT5yc3NpX3RpbWU7Ci0KLQlpZiAoZHQgPj0gMTg1KQotCQlyc3NpX3JlZHVjZSA9IDEwOwotCWVsc2UgaWYgKGR0ID49IDI1KQotCQlyc3NpX3JlZHVjZSA9ICh1OCkoKGR0IC0gMjUpID4+IDQpOwotCi0JLyogTm93IHJlZHVjZSByc3NpX2xhc3QgYnkgcnNzaV9yZWR1Y2UgKi8KLQlpZiAocnNzaV9sYXN0IDwgcnNzaV9yZWR1Y2UpCi0JCXJzc2lfbGFzdCA9IDA7Ci0JZWxzZQotCQlyc3NpX2xhc3QgLT0gcnNzaV9yZWR1Y2U7Ci0KLQkvKgotCSAqIE5vdyBsb29rIHVwIHRoZSByYXRlIGluIHRoZSByc3NpIHRhYmxlIGFuZCByZXR1cm4gaXQuCi0JICogSWYgbm8gcmF0ZXMgbWF0Y2ggdGhlbiB3ZSByZXR1cm4gMCAobG93ZXN0IHJhdGUpCi0JICovCi0KKwkqaXNfcHJvYmluZyA9IDA7CiAJYmVzdF90aHJ1cHV0ID0gMDsKIAltYXhpbmRleCA9IGF0aF9yY19wcml2LT5tYXhfdmFsaWRfcmF0ZS0xOwotCiAJbWluaW5kZXggPSAwOwogCWJlc3RfcmF0ZSA9IG1pbmluZGV4OwogCkBAIC03MDAsNyArNjM0LDcgQEAKIAkJICogMTAtMTUgYW5kIHdlIHdvdWxkIGJlIHdvcnNlIG9mZiB0aGVuIHN0YXlpbmcKIAkJICogYXQgdGhlIGN1cnJlbnQgcmF0ZS4KIAkJICovCi0JCXBlcl90aHJlcyA9IGF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5wZXI7CisJCXBlcl90aHJlcyA9IGF0aF9yY19wcml2LT5wZXJbcmF0ZV07CiAJCWlmIChwZXJfdGhyZXMgPCAxMikKIAkJCXBlcl90aHJlcyA9IDEyOwogCkBAIC03MTQsNyArNjQ4LDYgQEAKIAl9CiAKIAlyYXRlID0gYmVzdF9yYXRlOwotCWF0aF9yY19wcml2LT5yc3NpX2xhc3RfbG9va3VwID0gcnNzaV9sYXN0OwogCiAJLyoKIAkgKiBNdXN0IGNoZWNrIHRoZSBhY3R1YWwgcmF0ZSAocmF0ZWticHMpIHRvIGFjY291bnQgZm9yCkBAIC03NDEsMTAgKzY3NCwxOCBAQAogCWlmIChyYXRlID4gKGF0aF9yY19wcml2LT5yYXRlX3RhYmxlX3NpemUgLSAxKSkKIAkJcmF0ZSA9IGF0aF9yY19wcml2LT5yYXRlX3RhYmxlX3NpemUgLSAxOwogCi0JQVNTRVJUKChyYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnZhbGlkICYmCi0JCShhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19EU19GTEFHKSkgfHwKLQkgICAgICAgKHJhdGVfdGFibGUtPmluZm9bcmF0ZV0udmFsaWRfc2luZ2xlX3N0cmVhbSAmJgotCQkhKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX0RTX0ZMQUcpKSk7CisJaWYgKHJhdGVfdGFibGUtPmluZm9bcmF0ZV0udmFsaWQgJiYKKwkgICAgKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX0RTX0ZMQUcpKQorCQlyZXR1cm4gcmF0ZTsKKworCWlmIChyYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnZhbGlkX3NpbmdsZV9zdHJlYW0gJiYKKwkgICAgIShhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19EU19GTEFHKSk7CisJCXJldHVybiByYXRlOworCisJLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbiAqLworCVdBUk5fT04oMSk7CisKKwlyYXRlID0gYXRoX3JjX3ByaXYtPnZhbGlkX3JhdGVfaW5kZXhbMF07CiAKIAlyZXR1cm4gcmF0ZTsKIH0KQEAgLTc5Niw3ICs3MzcsNiBAQAogCSAqIGp1c3QgQ1RTLiAgTm90ZSB0aGF0IHRoaXMgaXMgb25seSBkb25lIGZvciBPRkRNL0hUIHVuaWNhc3QgZnJhbWVzLgogCSAqLwogCWlmICgoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUFJPVEVDVF9FTkFCTEUpICYmCi0JICAgICEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKIAkgICAgKHJhdGVfdGFibGUtPmluZm9bcml4XS5waHkgPT0gV0xBTl9SQ19QSFlfT0ZETSB8fAogCSAgICAgV0xBTl9SQ19QSFlfSFQocmF0ZV90YWJsZS0+aW5mb1tyaXhdLnBoeSkpKSB7CiAJCXJhdGVzWzBdLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1Q7CkBAIC04MDYsNTAgKzc0NiwzNyBAQAogCXR4X2luZm8tPmNvbnRyb2wucnRzX2N0c19yYXRlX2lkeCA9IGNpeDsKIH0KIAotc3RhdGljIHU4IGF0aF9yY19yYXRlX2dldGlkeChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCSAgICAgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAotCQkJICAgICBjb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCi0JCQkgICAgIHU4IHJpeCwgdTE2IHN0ZXBkb3duLAotCQkJICAgICB1MTYgbWluX3JhdGUpCitzdGF0aWMgdm9pZCBhdGhfZ2V0X3JhdGUodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEsCisJCQkgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCiB7Ci0JdTMyIGo7Ci0JdTggbmV4dGluZGV4ID0gMDsKLQotCWlmIChtaW5fcmF0ZSkgewotCQlmb3IgKGogPSBSQVRFX1RBQkxFX1NJWkU7IGogPiAwOyBqLS0pIHsKLQkJCWlmIChhdGhfcmNfZ2V0X25leHRsb3dlcnZhbGlkX3R4cmF0ZShyYXRlX3RhYmxlLAotCQkJCQkJYXRoX3JjX3ByaXYsIHJpeCwgJm5leHRpbmRleCkpCi0JCQkJcml4ID0gbmV4dGluZGV4OwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yIChqID0gc3RlcGRvd247IGogPiAwOyBqLS0pIHsKLQkJCWlmIChhdGhfcmNfZ2V0X25leHRsb3dlcnZhbGlkX3R4cmF0ZShyYXRlX3RhYmxlLAotCQkJCQkJYXRoX3JjX3ByaXYsIHJpeCwgJm5leHRpbmRleCkpCi0JCQkJcml4ID0gbmV4dGluZGV4OwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiByaXg7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9yY19yYXRlZmluZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCSAgICBzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCi17CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBwcml2OworCXN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiA9IHByaXZfc3RhOwogCWNvbnN0IHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhyYy0+c2tiOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzID0gdHhfaW5mby0+Y29udHJvbC5yYXRlczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQl1OCB0cnlfcGVyX3JhdGUgPSAwLCBpID0gMCwgcml4LCBucml4OworCXU4IHRyeV9wZXJfcmF0ZSwgaSA9IDAsIHJpeCwgbnJpeDsKIAlpbnQgaXNfcHJvYmUgPSAwOwogCisJaWYgKHJhdGVfY29udHJvbF9zZW5kX2xvdyhzdGEsIHByaXZfc3RhLCB0eHJjKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBGb3IgTXVsdGkgUmF0ZSBSZXRyeSB3ZSB1c2UgYSBkaWZmZXJlbnQgbnVtYmVyIG9mCisJICogcmV0cnkgYXR0ZW1wdCBjb3VudHMuIFRoaXMgZW5kcyB1cCBsb29raW5nIGxpa2UgdGhpczoKKwkgKgorCSAqIE1SUlswXSA9IDIKKwkgKiBNUlJbMV0gPSAyCisJICogTVJSWzJdID0gMgorCSAqIE1SUlszXSA9IDQKKwkgKgorCSAqLworCXRyeV9wZXJfcmF0ZSA9IHNjLT5ody0+bWF4X3JhdGVfdHJpZXM7CisKIAlyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCXJpeCA9IGF0aF9yY19yYXRlZmluZF9odChzYywgYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsICZpc19wcm9iZSk7CisJcml4ID0gYXRoX3JjX2dldF9oaWdoZXN0X3JpeChzYywgYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsICZpc19wcm9iZSk7CiAJbnJpeCA9IHJpeDsKIAogCWlmIChpc19wcm9iZSkgewpAQCAtODU4LDE4ICs3ODUsMTUgQEAKIAkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKIAkJCQkgICAgICAgMSwgbnJpeCwgMCk7CiAKLQkJdHJ5X3Blcl9yYXRlID0gKEFUSF8xMU5fVFhNQVhUUlkvNCk7CiAJCS8qIEdldCB0aGUgbmV4dCB0cmllZC9hbGxvd2VkIHJhdGUuIE5vIFJUUyBmb3IgdGhlIG5leHQgc2VyaWVzCiAJCSAqIGFmdGVyIHRoZSBwcm9iZSByYXRlCiAJCSAqLwotCQlucml4ID0gYXRoX3JjX3JhdGVfZ2V0aWR4KHNjLCBhdGhfcmNfcHJpdiwKLQkJCQkJICByYXRlX3RhYmxlLCBucml4LCAxLCAwKTsKKwkJYXRoX3JjX2dldF9sb3dlcl9yaXgocmF0ZV90YWJsZSwgYXRoX3JjX3ByaXYsIHJpeCwgJm5yaXgpOwogCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsICZyYXRlc1tpKytdLCB0eHJjLAogCQkJCSAgICAgICB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOwogCiAJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkFURV9DVFJMX1BST0JFOwogCX0gZWxzZSB7Ci0JCXRyeV9wZXJfcmF0ZSA9IChBVEhfMTFOX1RYTUFYVFJZLzQpOwogCQkvKiBTZXQgdGhlIGNob29zZW4gcmF0ZS4gTm8gUlRTIGZvciBmaXJzdCBzZXJpZXMgZW50cnkuICovCiAJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2krK10sIHR4cmMsCiAJCQkJICAgICAgIHRyeV9wZXJfcmF0ZSwgbnJpeCwgMCk7CkBAIC04NzcsMTggKzgwMSwxNCBAQAogCiAJLyogRmlsbCBpbiB0aGUgb3RoZXIgcmF0ZXMgZm9yIG11bHRpcmF0ZSByZXRyeSAqLwogCWZvciAoIDsgaSA8IDQ7IGkrKykgewotCQl1OCB0cnlfbnVtOwotCQl1OCBtaW5fcmF0ZTsKKwkJLyogVXNlIHR3aWNlIHRoZSBudW1iZXIgb2YgdHJpZXMgZm9yIHRoZSBsYXN0IE1SUiBzZWdtZW50LiAqLworCQlpZiAoaSArIDEgPT0gNCkKKwkJCXRyeV9wZXJfcmF0ZSA9IDQ7CiAKLQkJdHJ5X251bSA9ICgoaSArIDEpID09IDQpID8KLQkJCUFUSF8xMU5fVFhNQVhUUlkgLSAodHJ5X3Blcl9yYXRlICogaSkgOiB0cnlfcGVyX3JhdGUgOwotCQltaW5fcmF0ZSA9ICgoKGkgKyAxKSA9PSA0KSAmJiAwKTsKLQotCQlucml4ID0gYXRoX3JjX3JhdGVfZ2V0aWR4KHNjLCBhdGhfcmNfcHJpdiwKLQkJCQkJICByYXRlX3RhYmxlLCBucml4LCAxLCBtaW5fcmF0ZSk7CisJCWF0aF9yY19nZXRfbG93ZXJfcml4KHJhdGVfdGFibGUsIGF0aF9yY19wcml2LCByaXgsICZucml4KTsKIAkJLyogQWxsIG90aGVyIHJhdGVzIGluIHRoZSBzZXJpZXMgaGF2ZSBSVFMgZW5hYmxlZCAqLwogCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsICZyYXRlc1tpXSwgdHhyYywKLQkJCQkgICAgICAgdHJ5X251bSwgbnJpeCwgMSk7CisJCQkJICAgICAgIHRyeV9wZXJfcmF0ZSwgbnJpeCwgMSk7CiAJfQogCiAJLyoKQEAgLTkyNSw5ICs4NDUsOCBAQAogCSAqCiAJICogRklYTUU6IEZpeCBkdXJhdGlvbgogCSAqLwotCWlmICghKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICYmCi0JICAgIChpZWVlODAyMTFfaGFzX21vcmVmcmFncyhmYykgfHwKLQkgICAgIChsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpKSkgeworCWlmIChpZWVlODAyMTFfaGFzX21vcmVmcmFncyhmYykgfHwKKwkgICAgKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfRlJBRykpIHsKIAkJcmF0ZXNbMV0uY291bnQgPSByYXRlc1syXS5jb3VudCA9IHJhdGVzWzNdLmNvdW50ID0gMDsKIAkJcmF0ZXNbMV0uaWR4ID0gcmF0ZXNbMl0uaWR4ID0gcmF0ZXNbM10uaWR4ID0gMDsKIAkJcmF0ZXNbMF0uY291bnQgPSBBVEhfVFhNQVhUUlk7CkBAIC05NjAsMTMgKzg3OSwxMyBAQAogCQkxMDAgKiA5IC8gMTAKIAl9OwogCi0JbGFzdF9wZXIgPSBhdGhfcmNfcHJpdi0+c3RhdGVbdHhfcmF0ZV0ucGVyOworCWxhc3RfcGVyID0gYXRoX3JjX3ByaXYtPnBlclt0eF9yYXRlXTsKIAogCWlmICh4cmV0cmllcykgewogCQlpZiAoeHJldHJpZXMgPT0gMSkgewotCQkJYXRoX3JjX3ByaXYtPnN0YXRlW3R4X3JhdGVdLnBlciArPSAzMDsKLQkJCWlmIChhdGhfcmNfcHJpdi0+c3RhdGVbdHhfcmF0ZV0ucGVyID4gMTAwKQotCQkJCWF0aF9yY19wcml2LT5zdGF0ZVt0eF9yYXRlXS5wZXIgPSAxMDA7CisJCQlhdGhfcmNfcHJpdi0+cGVyW3R4X3JhdGVdICs9IDMwOworCQkJaWYgKGF0aF9yY19wcml2LT5wZXJbdHhfcmF0ZV0gPiAxMDApCisJCQkJYXRoX3JjX3ByaXYtPnBlclt0eF9yYXRlXSA9IDEwMDsKIAkJfSBlbHNlIHsKIAkJCS8qIHhyZXRyaWVzID09IDIgKi8KIAkJCWNvdW50ID0gQVJSQVlfU0laRShucmV0cnlfdG9fcGVyX2xvb2t1cCk7CkBAIC05NzQsNyArODkzLDcgQEAKIAkJCQlyZXRyaWVzID0gY291bnQgLSAxOwogCiAJCQkvKiBuZXdfUEVSID0gNy84Km9sZF9QRVIgKyAxLzgqKGN1cnJlbnRQRVIpICovCi0JCQlhdGhfcmNfcHJpdi0+c3RhdGVbdHhfcmF0ZV0ucGVyID0KKwkJCWF0aF9yY19wcml2LT5wZXJbdHhfcmF0ZV0gPQogCQkJCSh1OCkobGFzdF9wZXIgLSAobGFzdF9wZXIgPj4gMykgKyAoMTAwID4+IDMpKTsKIAkJfQogCkBAIC0xMDEwLDE4ICs5MjksMTQgQEAKIAkJCQluX2ZyYW1lcyA9IHR4X2luZm9fcHJpdi0+bl9mcmFtZXMgKiAocmV0cmllcyArIDEpOwogCQkJCWN1cl9wZXIgPSAoMTAwICogbl9iYWRfZnJhbWVzIC8gbl9mcmFtZXMpID4+IDM7CiAJCQkJbmV3X3BlciA9ICh1OCkobGFzdF9wZXIgLSAobGFzdF9wZXIgPj4gMykgKyBjdXJfcGVyKTsKLQkJCQlhdGhfcmNfcHJpdi0+c3RhdGVbdHhfcmF0ZV0ucGVyID0gbmV3X3BlcjsKKwkJCQlhdGhfcmNfcHJpdi0+cGVyW3R4X3JhdGVdID0gbmV3X3BlcjsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWF0aF9yY19wcml2LT5zdGF0ZVt0eF9yYXRlXS5wZXIgPQorCQkJYXRoX3JjX3ByaXYtPnBlclt0eF9yYXRlXSA9CiAJCQkJKHU4KShsYXN0X3BlciAtIChsYXN0X3BlciA+PiAzKSArCiAJCQkJICAgICAobnJldHJ5X3RvX3Blcl9sb29rdXBbcmV0cmllc10gPj4gMykpOwogCQl9CiAKLQkJYXRoX3JjX3ByaXYtPnJzc2lfbGFzdF9wcmV2MiA9IGF0aF9yY19wcml2LT5yc3NpX2xhc3RfcHJldjsKLQkJYXRoX3JjX3ByaXYtPnJzc2lfbGFzdF9wcmV2ICA9IGF0aF9yY19wcml2LT5yc3NpX2xhc3Q7Ci0JCWF0aF9yY19wcml2LT5yc3NpX2xhc3QgPSB0eF9pbmZvX3ByaXYtPnR4LnRzX3Jzc2k7Ci0JCWF0aF9yY19wcml2LT5yc3NpX3RpbWUgPSBub3dfbXNlYzsKIAogCQkvKgogCQkgKiBJZiB3ZSBnb3QgYXQgbW9zdCBvbmUgcmV0cnkgdGhlbiBpbmNyZWFzZSB0aGUgbWF4IHJhdGUgaWYKQEAgLTEwNDUsOCArOTYwLDggQEAKIAkJCQkJYXRoX3JjX3ByaXYtPnByb2JlX3JhdGU7CiAJCQkJcHJvYmVfcmF0ZSA9IGF0aF9yY19wcml2LT5wcm9iZV9yYXRlOwogCi0JCQkJaWYgKGF0aF9yY19wcml2LT5zdGF0ZVtwcm9iZV9yYXRlXS5wZXIgPiAzMCkKLQkJCQkJYXRoX3JjX3ByaXYtPnN0YXRlW3Byb2JlX3JhdGVdLnBlciA9IDIwOworCQkJCWlmIChhdGhfcmNfcHJpdi0+cGVyW3Byb2JlX3JhdGVdID4gMzApCisJCQkJCWF0aF9yY19wcml2LT5wZXJbcHJvYmVfcmF0ZV0gPSAyMDsKIAogCQkJCWF0aF9yY19wcml2LT5wcm9iZV9yYXRlID0gMDsKIApAQCAtMTA2NSwxOCArOTgwLDkgQEAKIAkJCS8qCiAJCQkgKiBEb24ndCB1cGRhdGUgYW55dGhpbmcuICBXZSBkb24ndCBrbm93IGlmCiAJCQkgKiB0aGlzIHdhcyBiZWNhdXNlIG9mIGNvbGxpc2lvbnMgb3IgcG9vciBzaWduYWwuCi0JCQkgKgotCQkJICogTGF0ZXI6IGlmIHJzc2lfYWNrIGlzIGNsb3NlIHRvCi0JCQkgKiBhdGhfcmNfcHJpdi0+c3RhdGVbdHhSYXRlXS5yc3NpX3RocmVzIGFuZCB3ZSBzZWUgbG90cwotCQkJICogb2YgcmV0cmllcywgdGhlbiB3ZSBjb3VsZCBpbmNyZWFzZQotCQkJICogYXRoX3JjX3ByaXYtPnN0YXRlW3R4UmF0ZV0ucnNzaV90aHJlcy4KIAkJCSAqLwogCQkJYXRoX3JjX3ByaXYtPmh3X21heHJldHJ5X3BrdGNudCA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlpbnQzMl90IHJzc2lfYWNrQXZnOwotCQkJaW50OF90IHJzc2lfdGhyZXM7Ci0JCQlpbnQ4X3QgcnNzaV9hY2tfdm1pbjsKLQogCQkJLyoKIAkJCSAqIEl0IHdvcmtlZCB3aXRoIG5vIHJldHJpZXMuIEZpcnN0IGlnbm9yZSBib2d1cyAoc21hbGwpCiAJCQkgKiByc3NpX2FjayB2YWx1ZXMuCkBAIC0xMDg2LDQzICs5OTIsOSBAQAogCQkJCWF0aF9yY19wcml2LT5od19tYXhyZXRyeV9wa3RjbnQrKzsKIAkJCX0KIAotCQkJaWYgKHR4X2luZm9fcHJpdi0+dHgudHNfcnNzaSA8Ci0JCQkgICAgcmF0ZV90YWJsZS0+aW5mb1t0eF9yYXRlXS5yc3NpX2Fja192YWxpZG1pbikKLQkJCQlnb3RvIGV4aXQ7Ci0KLQkJCS8qIEF2ZXJhZ2UgdGhlIHJzc2kgKi8KLQkJCWlmICh0eF9yYXRlICE9IGF0aF9yY19wcml2LT5yc3NpX3N1bV9yYXRlKSB7Ci0JCQkJYXRoX3JjX3ByaXYtPnJzc2lfc3VtX3JhdGUgPSB0eF9yYXRlOwotCQkJCWF0aF9yY19wcml2LT5yc3NpX3N1bSA9Ci0JCQkJCWF0aF9yY19wcml2LT5yc3NpX3N1bV9jbnQgPSAwOwotCQkJfQotCi0JCQlhdGhfcmNfcHJpdi0+cnNzaV9zdW0gKz0gdHhfaW5mb19wcml2LT50eC50c19yc3NpOwotCQkJYXRoX3JjX3ByaXYtPnJzc2lfc3VtX2NudCsrOwotCi0JCQlpZiAoYXRoX3JjX3ByaXYtPnJzc2lfc3VtX2NudCA8IDQpCi0JCQkJZ290byBleGl0OwotCi0JCQlyc3NpX2Fja0F2ZyA9Ci0JCQkJKGF0aF9yY19wcml2LT5yc3NpX3N1bSArIDIpIC8gNDsKLQkJCXJzc2lfdGhyZXMgPQotCQkJCWF0aF9yY19wcml2LT5zdGF0ZVt0eF9yYXRlXS5yc3NpX3RocmVzOwotCQkJcnNzaV9hY2tfdm1pbiA9Ci0JCQkJcmF0ZV90YWJsZS0+aW5mb1t0eF9yYXRlXS5yc3NpX2Fja192YWxpZG1pbjsKLQotCQkJYXRoX3JjX3ByaXYtPnJzc2lfc3VtID0KLQkJCQlhdGhfcmNfcHJpdi0+cnNzaV9zdW1fY250ID0gMDsKLQotCQkJLyogTm93IHJlZHVjZSB0aGUgY3VycmVudCByc3NpIHRocmVzaG9sZCAqLwotCQkJaWYgKChyc3NpX2Fja0F2ZyA8IHJzc2lfdGhyZXMgKyAyKSAmJgotCQkJICAgIChyc3NpX3RocmVzID4gcnNzaV9hY2tfdm1pbikpIHsKLQkJCQlhdGhfcmNfcHJpdi0+c3RhdGVbdHhfcmF0ZV0ucnNzaV90aHJlcy0tOwotCQkJfQotCi0JCQlzdGF0ZV9jaGFuZ2UgPSB0cnVlOwogCQl9CiAJfQotZXhpdDoKKwogCXJldHVybiBzdGF0ZV9jaGFuZ2U7CiB9CiAKQEAgLTExMzQsMTEgKzEwMDYsNiBAQAogCQkJICAgICBzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2LAogCQkJICAgICBpbnQgdHhfcmF0ZSwgaW50IHhyZXRyaWVzLCBpbnQgcmV0cmllcykKIHsKLSNkZWZpbmUgQ0hLX1JTU0kocmF0ZSkJCQkJCVwKLQkoKGF0aF9yY19wcml2LT5zdGF0ZVsocmF0ZSldLnJzc2lfdGhyZXMgKwlcCi0JICByYXRlX3RhYmxlLT5pbmZvWyhyYXRlKV0ucnNzaV9hY2tfZGVsdGFtaW4pID4gXAotCSBhdGhfcmNfcHJpdi0+c3RhdGVbKHJhdGUpKzFdLnJzc2lfdGhyZXMpCi0KIAl1MzIgbm93X21zZWMgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOwogCWludCByYXRlOwogCXU4IGxhc3RfcGVyOwpAQCAtMTE0OSwxNCArMTAxNiw3IEBACiAJaWYgKCh0eF9yYXRlIDwgMCkgfHwgKHR4X3JhdGUgPiByYXRlX3RhYmxlLT5yYXRlX2NudCkpCiAJCXJldHVybjsKIAotCS8qIFRvIGNvbXBlbnNhdGUgZm9yIHNvbWUgaW1iYWxhbmNlIGJldHdlZW4gY3RybCBhbmQgZXh0LiBjaGFubmVsICovCi0KLQlpZiAoV0xBTl9SQ19QSFlfNDAocmF0ZV90YWJsZS0+aW5mb1t0eF9yYXRlXS5waHkpKQotCQl0eF9pbmZvX3ByaXYtPnR4LnRzX3Jzc2kgPQotCQkJdHhfaW5mb19wcml2LT50eC50c19yc3NpIDwgMyA/IDAgOgotCQkJdHhfaW5mb19wcml2LT50eC50c19yc3NpIC0gMzsKLQotCWxhc3RfcGVyID0gYXRoX3JjX3ByaXYtPnN0YXRlW3R4X3JhdGVdLnBlcjsKKwlsYXN0X3BlciA9IGF0aF9yY19wcml2LT5wZXJbdHhfcmF0ZV07CiAKIAkvKiBVcGRhdGUgUEVSIGZpcnN0ICovCiAJc3RhdGVfY2hhbmdlID0gYXRoX3JjX3VwZGF0ZV9wZXIoc2MsIHJhdGVfdGFibGUsIGF0aF9yY19wcml2LApAQCAtMTE2NywxMTQgKzEwMjcsNTIgQEAKIAkgKiBJZiB0aGlzIHJhdGUgbG9va3MgYmFkIChoaWdoIFBFUikgdGhlbiBzdG9wIHVzaW5nIGl0IGZvcgogCSAqIGEgd2hpbGUgKGV4Y2VwdCBpZiB3ZSBhcmUgcHJvYmluZykuCiAJICovCi0JaWYgKGF0aF9yY19wcml2LT5zdGF0ZVt0eF9yYXRlXS5wZXIgPj0gNTUgJiYgdHhfcmF0ZSA+IDAgJiYKKwlpZiAoYXRoX3JjX3ByaXYtPnBlclt0eF9yYXRlXSA+PSA1NSAmJiB0eF9yYXRlID4gMCAmJgogCSAgICByYXRlX3RhYmxlLT5pbmZvW3R4X3JhdGVdLnJhdGVrYnBzIDw9CiAJICAgIHJhdGVfdGFibGUtPmluZm9bYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeV0ucmF0ZWticHMpIHsKLQkJYXRoX3JjX2dldF9uZXh0bG93ZXJ2YWxpZF90eHJhdGUocmF0ZV90YWJsZSwgYXRoX3JjX3ByaXYsCi0JCQkJICh1OCl0eF9yYXRlLCAmYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSk7CisJCWF0aF9yY19nZXRfbG93ZXJfcml4KHJhdGVfdGFibGUsIGF0aF9yY19wcml2LAorCQkJCSAgICAgKHU4KXR4X3JhdGUsICZhdGhfcmNfcHJpdi0+cmF0ZV9tYXhfcGh5KTsKIAogCQkvKiBEb24ndCBwcm9iZSBmb3IgYSBsaXR0bGUgd2hpbGUuICovCiAJCWF0aF9yY19wcml2LT5wcm9iZV90aW1lID0gbm93X21zZWM7CiAJfQogCi0JaWYgKHN0YXRlX2NoYW5nZSkgewotCQkvKgotCQkgKiBNYWtlIHN1cmUgdGhlIHJhdGVzIGFib3ZlIHRoaXMgaGF2ZSBoaWdoZXIgcnNzaSB0aHJlc2hvbGRzLgotCQkgKiAoTm90ZTogIE1vbm90b25pY2l0eSBpcyBrZXB0IHdpdGhpbiB0aGUgT0ZETSByYXRlcyBhbmQKLQkJICogICAgICAgICB3aXRoaW4gdGhlIENDSyByYXRlcy4gSG93ZXZlciwgbm8gYWRqdXN0bWVudCBpcwotCQkgKiAgICAgICAgIG1hZGUgdG8ga2VlcCB0aGUgcnNzaSB0aHJlc2hvbGRzIG1vbm90b25pY2FsbHkKLQkJICogICAgICAgICBpbmNyZWFzaW5nIGJldHdlZW4gdGhlIENDSyBhbmQgT0ZETSByYXRlcy4pCi0JCSAqLwotCQlmb3IgKHJhdGUgPSB0eF9yYXRlOyByYXRlIDwgc2l6ZSAtIDE7IHJhdGUrKykgewotCQkJaWYgKHJhdGVfdGFibGUtPmluZm9bcmF0ZSsxXS5waHkgIT0KLQkJCSAgICByYXRlX3RhYmxlLT5pbmZvW3R4X3JhdGVdLnBoeSkKLQkJCQlicmVhazsKLQotCQkJaWYgKENIS19SU1NJKHJhdGUpKSB7Ci0JCQkJYXRoX3JjX3ByaXYtPnN0YXRlW3JhdGUrMV0ucnNzaV90aHJlcyA9Ci0JCQkJCWF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5yc3NpX3RocmVzICsKLQkJCQkJcmF0ZV90YWJsZS0+aW5mb1tyYXRlXS5yc3NpX2Fja19kZWx0YW1pbjsKLQkJCX0KLQkJfQotCi0JCS8qIE1ha2Ugc3VyZSB0aGUgcmF0ZXMgYmVsb3cgdGhpcyBoYXZlIGxvd2VyIHJzc2kgdGhyZXNob2xkcy4gKi8KLQkJZm9yIChyYXRlID0gdHhfcmF0ZSAtIDE7IHJhdGUgPj0gMDsgcmF0ZS0tKSB7Ci0JCQlpZiAocmF0ZV90YWJsZS0+aW5mb1tyYXRlXS5waHkgIT0KLQkJCSAgICByYXRlX3RhYmxlLT5pbmZvW3R4X3JhdGVdLnBoeSkKLQkJCQlicmVhazsKLQotCQkJaWYgKENIS19SU1NJKHJhdGUpKSB7Ci0JCQkJaWYgKGF0aF9yY19wcml2LT5zdGF0ZVtyYXRlKzFdLnJzc2lfdGhyZXMgPAotCQkJCSAgICByYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnJzc2lfYWNrX2RlbHRhbWluKQotCQkJCQlhdGhfcmNfcHJpdi0+c3RhdGVbcmF0ZV0ucnNzaV90aHJlcyA9IDA7Ci0JCQkJZWxzZSB7Ci0JCQkJCWF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5yc3NpX3RocmVzID0KLQkJCQkJYXRoX3JjX3ByaXYtPnN0YXRlW3JhdGUrMV0ucnNzaV90aHJlcyAtCi0JCQkJCXJhdGVfdGFibGUtPmluZm9bcmF0ZV0ucnNzaV9hY2tfZGVsdGFtaW47Ci0JCQkJfQotCi0JCQkJaWYgKGF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5yc3NpX3RocmVzIDwKLQkJCQkgICAgcmF0ZV90YWJsZS0+aW5mb1tyYXRlXS5yc3NpX2Fja192YWxpZG1pbikgewotCQkJCQlhdGhfcmNfcHJpdi0+c3RhdGVbcmF0ZV0ucnNzaV90aHJlcyA9Ci0JCQkJCXJhdGVfdGFibGUtPmluZm9bcmF0ZV0ucnNzaV9hY2tfdmFsaWRtaW47Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCiAJLyogTWFrZSBzdXJlIHRoZSByYXRlcyBiZWxvdyB0aGlzIGhhdmUgbG93ZXIgUEVSICovCiAJLyogTW9ub3RvbmljaXR5IGlzIGtlcHQgb25seSBmb3IgcmF0ZXMgYmVsb3cgdGhlIGN1cnJlbnQgcmF0ZS4gKi8KLQlpZiAoYXRoX3JjX3ByaXYtPnN0YXRlW3R4X3JhdGVdLnBlciA8IGxhc3RfcGVyKSB7CisJaWYgKGF0aF9yY19wcml2LT5wZXJbdHhfcmF0ZV0gPCBsYXN0X3BlcikgewogCQlmb3IgKHJhdGUgPSB0eF9yYXRlIC0gMTsgcmF0ZSA+PSAwOyByYXRlLS0pIHsKLQkJCWlmIChyYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnBoeSAhPQotCQkJICAgIHJhdGVfdGFibGUtPmluZm9bdHhfcmF0ZV0ucGh5KQotCQkJCWJyZWFrOwogCi0JCQlpZiAoYXRoX3JjX3ByaXYtPnN0YXRlW3JhdGVdLnBlciA+Ci0JCQkgICAgYXRoX3JjX3ByaXYtPnN0YXRlW3JhdGUrMV0ucGVyKSB7Ci0JCQkJYXRoX3JjX3ByaXYtPnN0YXRlW3JhdGVdLnBlciA9Ci0JCQkJCWF0aF9yY19wcml2LT5zdGF0ZVtyYXRlKzFdLnBlcjsKKwkJCWlmIChhdGhfcmNfcHJpdi0+cGVyW3JhdGVdID4KKwkJCSAgICBhdGhfcmNfcHJpdi0+cGVyW3JhdGUrMV0pIHsKKwkJCQlhdGhfcmNfcHJpdi0+cGVyW3JhdGVdID0KKwkJCQkJYXRoX3JjX3ByaXYtPnBlcltyYXRlKzFdOwogCQkJfQogCQl9CiAJfQogCiAJLyogTWFpbnRhaW4gbW9ub3RvbmljaXR5IGZvciByYXRlcyBhYm92ZSB0aGUgY3VycmVudCByYXRlICovCiAJZm9yIChyYXRlID0gdHhfcmF0ZTsgcmF0ZSA8IHNpemUgLSAxOyByYXRlKyspIHsKLQkJaWYgKGF0aF9yY19wcml2LT5zdGF0ZVtyYXRlKzFdLnBlciA8Ci0JCSAgICBhdGhfcmNfcHJpdi0+c3RhdGVbcmF0ZV0ucGVyKQotCQkJYXRoX3JjX3ByaXYtPnN0YXRlW3JhdGUrMV0ucGVyID0KLQkJCQlhdGhfcmNfcHJpdi0+c3RhdGVbcmF0ZV0ucGVyOwotCX0KLQotCS8qIEV2ZXJ5IHNvIG9mdGVuLCB3ZSByZWR1Y2UgdGhlIHRocmVzaG9sZHMgYW5kCi0JICogUEVSIChkaWZmZXJlbnQgZm9yIENDSyBhbmQgT0ZETSkuICovCi0JaWYgKG5vd19tc2VjIC0gYXRoX3JjX3ByaXYtPnJzc2lfZG93bl90aW1lID49Ci0JICAgIHJhdGVfdGFibGUtPnJzc2lfcmVkdWNlX2ludGVydmFsKSB7Ci0KLQkJZm9yIChyYXRlID0gMDsgcmF0ZSA8IHNpemU7IHJhdGUrKykgewotCQkJaWYgKGF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5yc3NpX3RocmVzID4KLQkJCSAgICByYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnJzc2lfYWNrX3ZhbGlkbWluKQotCQkJCWF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5yc3NpX3RocmVzIC09IDE7Ci0JCX0KLQkJYXRoX3JjX3ByaXYtPnJzc2lfZG93bl90aW1lID0gbm93X21zZWM7CisJCWlmIChhdGhfcmNfcHJpdi0+cGVyW3JhdGUrMV0gPAorCQkgICAgYXRoX3JjX3ByaXYtPnBlcltyYXRlXSkKKwkJCWF0aF9yY19wcml2LT5wZXJbcmF0ZSsxXSA9CisJCQkJYXRoX3JjX3ByaXYtPnBlcltyYXRlXTsKIAl9CiAKIAkvKiBFdmVyeSBzbyBvZnRlbiwgd2UgcmVkdWNlIHRoZSB0aHJlc2hvbGRzCiAJICogYW5kIFBFUiAoZGlmZmVyZW50IGZvciBDQ0sgYW5kIE9GRE0pLiAqLwogCWlmIChub3dfbXNlYyAtIGF0aF9yY19wcml2LT5wZXJfZG93bl90aW1lID49Ci0JICAgIHJhdGVfdGFibGUtPnJzc2lfcmVkdWNlX2ludGVydmFsKSB7CisJICAgIHJhdGVfdGFibGUtPnByb2JlX2ludGVydmFsKSB7CiAJCWZvciAocmF0ZSA9IDA7IHJhdGUgPCBzaXplOyByYXRlKyspIHsKLQkJCWF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5wZXIgPQotCQkJCTcgKiBhdGhfcmNfcHJpdi0+c3RhdGVbcmF0ZV0ucGVyIC8gODsKKwkJCWF0aF9yY19wcml2LT5wZXJbcmF0ZV0gPQorCQkJCTcgKiBhdGhfcmNfcHJpdi0+cGVyW3JhdGVdIC8gODsKIAkJfQogCiAJCWF0aF9yY19wcml2LT5wZXJfZG93bl90aW1lID0gbm93X21zZWM7CiAJfQogCiAJYXRoX2RlYnVnX3N0YXRfcmV0cmllcyhzYywgdHhfcmF0ZSwgeHJldHJpZXMsIHJldHJpZXMsCi0JCQkgICAgICAgYXRoX3JjX3ByaXYtPnN0YXRlW3R4X3JhdGVdLnBlcik7CisJCQkgICAgICAgYXRoX3JjX3ByaXYtPnBlclt0eF9yYXRlXSk7CiAKLSN1bmRlZiBDSEtfUlNTSQogfQogCiBzdGF0aWMgaW50IGF0aF9yY19nZXRfcmF0ZWluZGV4KGNvbnN0IHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSwKQEAgLTE0MTAsOSArMTIwOCw3IEBACiAKIAkvKiBJbml0aWFsaXplIHRocmVzaG9sZHMgYWNjb3JkaW5nIHRvIHRoZSBnbG9iYWwgcmF0ZSB0YWJsZSAqLwogCWZvciAoaSA9IDAgOyBpIDwgYXRoX3JjX3ByaXYtPnJhdGVfdGFibGVfc2l6ZTsgaSsrKSB7Ci0JCWF0aF9yY19wcml2LT5zdGF0ZVtpXS5yc3NpX3RocmVzID0KLQkJCXJhdGVfdGFibGUtPmluZm9baV0ucnNzaV9hY2tfdmFsaWRtaW47Ci0JCWF0aF9yY19wcml2LT5zdGF0ZVtpXS5wZXIgPSAwOworCQlhdGhfcmNfcHJpdi0+cGVyW2ldID0gMDsKIAl9CiAKIAkvKiBEZXRlcm1pbmUgdGhlIHZhbGlkIHJhdGVzICovCkBAIC0xNTIxLDcgKzEzMTcsNyBAQAogCS8qCiAJICogSWYgdW5kZXJydW4gZXJyb3IgaXMgc2VlbiBhc3N1bWUgaXQgYXMgYW4gZXhjZXNzaXZlIHJldHJ5IG9ubHkKIAkgKiBpZiBwcmVmZXRjaCB0cmlnZ2VyIGxldmVsIGhhdmUgcmVhY2hlZCB0aGUgbWF4ICgweDNmIGZvciA1NDE2KQotCSAqIEFkanVzdCB0aGUgbG9uZyByZXRyeSBhcyBpZiB0aGUgZnJhbWUgd2FzIHRyaWVkIEFUSF8xMU5fVFhNQVhUUlkKKwkgKiBBZGp1c3QgdGhlIGxvbmcgcmV0cnkgYXMgaWYgdGhlIGZyYW1lIHdhcyB0cmllZCBody0+bWF4X3JhdGVfdHJpZXMKIAkgKiB0aW1lcy4gVGhpcyBhZmZlY3RzIGhvdyByYXRlY3RybCB1cGRhdGVzIFBFUiBmb3IgdGhlIGZhaWxlZCByYXRlLgogCSAqLwogCWlmICh0eF9pbmZvX3ByaXYtPnR4LnRzX2ZsYWdzICYKQEAgLTE1MzYsNyArMTMzMiw3IEBACiAJCXR4X3N0YXR1cyA9IDE7CiAKIAlhdGhfcmNfdHhfc3RhdHVzKHNjLCBhdGhfcmNfcHJpdiwgdHhfaW5mbywgZmluYWxfdHNfaWR4LCB0eF9zdGF0dXMsCi0JCQkgKGlzX3VuZGVycnVuKSA/IEFUSF8xMU5fVFhNQVhUUlkgOgorCQkJIChpc191bmRlcnJ1bikgPyBzYy0+aHctPm1heF9yYXRlX3RyaWVzIDoKIAkJCSB0eF9pbmZvX3ByaXYtPnR4LnRzX2xvbmdyZXRyeSk7CiAKIAkvKiBDaGVjayBpZiBhZ2dyZWdhdGlvbiBoYXMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0aWQgKi8KQEAgLTE1NjAsMzEgKzEzNTYsNiBAQAogCWtmcmVlKHR4X2luZm9fcHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aF9nZXRfcmF0ZSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKLQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCAqdHhyYykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9IHR4cmMtPnNiYW5kOwotCXN0cnVjdCBza19idWZmICpza2IgPSB0eHJjLT5za2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBwcml2OwotCXN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiA9IHByaXZfc3RhOwotCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQotCS8qIGxvd2VzdCByYXRlIGZvciBtYW5hZ2VtZW50IGFuZCBOT19BQ0sgZnJhbWVzICovCi0JaWYgKCFpZWVlODAyMTFfaXNfZGF0YShmYykgfHwKLQkgICAgdHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSyB8fCAhc3RhKSB7Ci0JCXR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0gcmF0ZV9sb3dlc3RfaW5kZXgoc2JhbmQsIHN0YSk7Ci0JCXR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPQotCQkJKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spID8KLQkJCQkxIDogQVRIX01HVF9UWE1BWFRSWTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEZpbmQgdHggcmF0ZSBmb3IgdW5pY2FzdCBmcmFtZXMgKi8KLQlhdGhfcmNfcmF0ZWZpbmQoc2MsIGF0aF9yY19wcml2LCB0eHJjKTsKLX0KLQogc3RhdGljIHZvaWQgYXRoX3JhdGVfaW5pdCh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEpCiB7CkBAIC0xNjk3LDcgKzE0NjgsNiBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlyYXRlX3ByaXYtPnJzc2lfZG93bl90aW1lID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKIAlyYXRlX3ByaXYtPnR4X3RyaWdsZXZlbF9tYXggPSBzYy0+c2NfYWgtPmNhcHMudHhfdHJpZ2xldmVsX21heDsKIAogCXJldHVybiByYXRlX3ByaXY7CkBAIC0xNzI1LDggKzE0OTUsNiBAQAogCiB2b2lkIGF0aF9yYXRlX2F0dGFjaChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExQl0gPQotCQkmYXI1NDE2XzExYl9yYXRldGFibGU7CiAJc2MtPmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV8xMUFdID0KIAkJJmFyNTQxNl8xMWFfcmF0ZXRhYmxlOwogCXNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFHXSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oCmluZGV4IGUzYWJkNzYuLmZhMjFhNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oCkBAIC0xMTIsOCArMTEyLDYgQEAKIAkJdTggc2hvcnRfcHJlYW1ibGU7CiAJCXU4IGRvdDExcmF0ZTsKIAkJdTggY3RybF9yYXRlOwotCQlpbnQ4X3QgcnNzaV9hY2tfdmFsaWRtaW47Ci0JCWludDhfdCByc3NpX2Fja19kZWx0YW1pbjsKIAkJdTggYmFzZV9pbmRleDsKIAkJdTggY3c0MGluZGV4OwogCQl1OCBzZ2lfaW5kZXg7CkBAIC0xMjEsMTUgKzExOSw5IEBACiAJCXUzMiBtYXhfNG1zX2ZyYW1lbGVuOwogCX0gaW5mb1tSQVRFX1RBQkxFX1NJWkVdOwogCXUzMiBwcm9iZV9pbnRlcnZhbDsKLQl1MzIgcnNzaV9yZWR1Y2VfaW50ZXJ2YWw7CiAJdTggaW5pdGlhbF9yYXRlbWF4OwogfTsKIAotc3RydWN0IGF0aF90eF9yYXRlY3RybF9zdGF0ZSB7Ci0JaW50OF90IHJzc2lfdGhyZXM7CS8qIHJlcXVpcmVkIHJzc2kgZm9yIHRoaXMgcmF0ZSAoZEIpICovCi0JdTggcGVyOwkJCS8qIHJlY2VudCBlc3RpbWF0ZSBvZiBwYWNrZXQgZXJyb3IgcmF0ZSAoJSkgKi8KLX07Ci0KIHN0cnVjdCBhdGhfcmF0ZXNldCB7CiAJdTggcnNfbnJhdGVzOwogCXU4IHJzX3JhdGVzW0FUSF9SQVRFX01BWF07CkBAIC0xMzgsMjIgKzEzMCwxNCBAQAogLyoqCiAgKiBzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAtIFJhdGUgQ29udHJvbCBwcml2IGRhdGEKICAqIEBzdGF0ZTogUkMgc3RhdGUKLSAqIEByc3NpX2xhc3Q6IGxhc3QgQUNLIHJzc2kKLSAqIEByc3NpX2xhc3RfbG9va3VwOiBsYXN0IEFDSyByc3NpIHVzZWQgZm9yIGxvb2t1cAotICogQHJzc2lfbGFzdF9wcmV2OiBwcmV2aW91cyBsYXN0IEFDSyByc3NpCi0gKiBAcnNzaV9sYXN0X3ByZXYyOiAybmQgcHJldmlvdXMgbGFzdCBBQ0sgcnNzaQotICogQHJzc2lfc3VtX2NudDogY291bnQgb2YgcnNzaV9zdW0gZm9yIGF2ZXJhZ2luZwotICogQHJzc2lfc3VtX3JhdGU6IHJhdGUgdGhhdCB3ZSBhcmUgYXZlcmFnaW5nCi0gKiBAcnNzaV9zdW06IHJ1bm5pbmcgc3VtIG9mIHJzc2kgZm9yIGF2ZXJhZ2luZwogICogQHByb2JlX3JhdGU6IHJhdGUgd2UgYXJlIHByb2JpbmcgYXQKLSAqIEByc3NpX3RpbWU6IG1zZWMgdGltZXN0YW1wIGZvciBsYXN0IGFjayByc3NpCi0gKiBAcnNzaV9kb3duX3RpbWU6IG1zZWMgdGltZXN0YW1wIGZvciBsYXN0IGRvd24gc3RlcAogICogQHByb2JlX3RpbWU6IG1zZWMgdGltZXN0YW1wIGZvciBsYXN0IHByb2JlCiAgKiBAaHdfbWF4cmV0cnlfcGt0Y250OiBudW0gb2YgcGFja2V0cyBzaW5jZSB3ZSBnb3QgSFcgbWF4IHJldHJ5IGVycm9yCiAgKiBAbWF4X3ZhbGlkX3JhdGU6IG1heGltdW0gbnVtYmVyIG9mIHZhbGlkIHJhdGUKICAqIEBwZXJfZG93bl90aW1lOiBtc2VjIHRpbWVzdGFtcCBmb3IgbGFzdCBQRVIgZG93biBzdGVwCiAgKiBAdmFsaWRfcGh5X3JhdGVjbnQ6IHZhbGlkIHJhdGUgY291bnQKICAqIEByYXRlX21heF9waHk6IHBoeSBpbmRleCBmb3IgdGhlIG1heCByYXRlCisgKiBAcGVyOiBQRVIgZm9yIGV2ZXJ5IHZhbGlkIHJhdGUgaW4gJQogICogQHByb2JlX2ludGVydmFsOiBpbnRlcnZhbCBmb3IgcmF0ZWN0cmwgdG8gcHJvYmUgZm9yIG90aGVyIHJhdGVzCiAgKiBAcHJldl9kYXRhX3JpeDogcmF0ZSBpZHggb2YgbGFzdCBkYXRhIGZyYW1lCiAgKiBAaHRfY2FwOiBIVCBjYXBhYmlsaXRpZXMKQEAgLTE2MSwxMyArMTQ1LDYgQEAKICAqIEBuZWdfaHRfcmF0ZXM6IE5lZ290aWF0ZWQgSFQgcmF0ZXMKICAqLwogc3RydWN0IGF0aF9yYXRlX3ByaXYgewotCWludDhfdCByc3NpX2xhc3Q7Ci0JaW50OF90IHJzc2lfbGFzdF9sb29rdXA7Ci0JaW50OF90IHJzc2lfbGFzdF9wcmV2OwotCWludDhfdCByc3NpX2xhc3RfcHJldjI7Ci0JaW50MzJfdCByc3NpX3N1bV9jbnQ7Ci0JaW50MzJfdCByc3NpX3N1bV9yYXRlOwotCWludDMyX3QgcnNzaV9zdW07CiAJdTggcmF0ZV90YWJsZV9zaXplOwogCXU4IHByb2JlX3JhdGU7CiAJdTggaHdfbWF4cmV0cnlfcGt0Y250OwpAQCAtMTc3LDE0ICsxNTQsMTIgQEAKIAl1OCB2YWxpZF9waHlfcmF0ZWNudFtXTEFOX1JDX1BIWV9NQVhdOwogCXU4IHZhbGlkX3BoeV9yYXRlaWR4W1dMQU5fUkNfUEhZX01BWF1bUkFURV9UQUJMRV9TSVpFXTsKIAl1OCByYXRlX21heF9waHk7Ci0JdTMyIHJzc2lfdGltZTsKLQl1MzIgcnNzaV9kb3duX3RpbWU7CisJdTggcGVyW1JBVEVfVEFCTEVfU0laRV07CiAJdTMyIHByb2JlX3RpbWU7CiAJdTMyIHBlcl9kb3duX3RpbWU7CiAJdTMyIHByb2JlX2ludGVydmFsOwogCXUzMiBwcmV2X2RhdGFfcml4OwogCXUzMiB0eF90cmlnbGV2ZWxfbWF4OwotCXN0cnVjdCBhdGhfdHhfcmF0ZWN0cmxfc3RhdGUgc3RhdGVbUkFURV9UQUJMRV9TSVpFXTsKIAlzdHJ1Y3QgYXRoX3JhdGVzZXQgbmVnX3JhdGVzOwogCXN0cnVjdCBhdGhfcmF0ZXNldCBuZWdfaHRfcmF0ZXM7CiAJc3RydWN0IGF0aF9yYXRlX3NvZnRjICphc2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYwppbmRleCBjZWNlMWM0Li5lYzBhYmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMKQEAgLTEwMCwzOCArMTAwLDYgQEAKIAlyZXR1cm4gKHRzZiAmIH4weDdmZmYpIHwgcnN0YW1wOwogfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmF0aF9yeGJ1Zl9hbGxvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTMyIGxlbiwgZ2ZwX3QgZ2ZwX21hc2spCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1MzIgb2ZmOwotCi0JLyoKLQkgKiBDYWNoZS1saW5lLWFsaWduLiAgVGhpcyBpcyBpbXBvcnRhbnQgKGZvciB0aGUKLQkgKiA1MjEwIGF0IGxlYXN0KSBhcyBub3QgZG9pbmcgc28gY2F1c2VzIGJvZ3VzIGRhdGEKLQkgKiBpbiByeCdkIGZyYW1lcy4KLQkgKi8KLQotCS8qIE5vdGU6IHRoZSBrZXJuZWwgY2FuIGFsbG9jYXRlIGEgdmFsdWUgZ3JlYXRlciB0aGFuCi0JICogd2hhdCB3ZSBhc2sgaXQgdG8gZ2l2ZSB1cy4gV2UgcmVhbGx5IG9ubHkgbmVlZCA0IEtCIGFzIHRoYXQKLQkgKiBpcyB0aGlzIGhhcmR3YXJlIHN1cHBvcnRzIGFuZCBpbiBmYWN0IHdlIG5lZWQgYXQgbGVhc3QgMzg0OQotCSAqIGFzIHRoYXQgaXMgdGhlIE1BWCBBTVNEVSBzaXplIHRoaXMgaGFyZHdhcmUgc3VwcG9ydHMuCi0JICogVW5mb3J0dW5hdGVseSB0aGlzIG1lYW5zIHdlIG1heSBnZXQgOCBLQiBoZXJlIGZyb20gdGhlCi0JICoga2VybmVsLi4uIGFuZCB0aGF0IGlzIGFjdHVhbGx5IHdoYXQgaXMgb2JzZXJ2ZWQgb24gc29tZQotCSAqIHN5c3RlbXMgOiggKi8KLQlza2IgPSBfX2Rldl9hbGxvY19za2IobGVuICsgc2MtPmNhY2hlbHN6IC0gMSwgZ2ZwX21hc2spOwotCWlmIChza2IgIT0gTlVMTCkgewotCQlvZmYgPSAoKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSkgJSBzYy0+Y2FjaGVsc3o7Ci0JCWlmIChvZmYgIT0gMCkKLQkJCXNrYl9yZXNlcnZlKHNrYiwgc2MtPmNhY2hlbHN6IC0gb2ZmKTsKLQl9IGVsc2UgewotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJInNrYnVmZiBhbGxvYyBvZiBzaXplICV1IGZhaWxlZFxuIiwgbGVuKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIHNrYjsKLX0KLQogLyoKICAqIEZvciBEZWNyeXB0IG9yIERlbWljIGVycm9ycywgd2Ugb25seSBtYXJrIHBhY2tldCBzdGF0dXMgaGVyZSBhbmQgYWx3YXlzIHB1c2gKICAqIHVwIHRoZSBmcmFtZSB1cCB0byBsZXQgbWFjODAyMTEgaGFuZGxlIHRoZSBhY3R1YWwgZXJyb3IgY2FzZSwgYmUgaXQgbm8KQEAgLTE0NSw2ICsxMTMsMTAgQEAKIAl1OCByYXRlY29kZTsKIAlfX2xlMTYgZmM7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwlzdHJ1Y3QgYXRoX25vZGUgKmFuOworCWludCBsYXN0X3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CisKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKQEAgLTIyOSwxNyArMjAxLDYxIEBACiAJCX0KIAl9CiAKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHNjLT5odywgaGRyLT5hZGRyMik7CisJaWYgKHN0YSkgeworCQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKikgc3RhLT5kcnZfcHJpdjsKKwkJaWYgKGRzLT5kc19yeHN0YXQucnNfcnNzaSAhPSBBVEg5S19SU1NJX0JBRCAmJgorCQkgICAhZHMtPmRzX3J4c3RhdC5yc19tb3JlYWdncikKKwkJCUFUSF9SU1NJX0xQRihhbi0+bGFzdF9yc3NpLCBkcy0+ZHNfcnhzdGF0LnJzX3Jzc2kpOworCQlsYXN0X3Jzc2kgPSBhbi0+bGFzdF9yc3NpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChsaWtlbHkobGFzdF9yc3NpICE9IEFUSF9SU1NJX0RVTU1ZX01BUktFUikpCisJCWRzLT5kc19yeHN0YXQucnNfcnNzaSA9IEFUSF9FUF9STkQobGFzdF9yc3NpLAorCQkJCQlBVEhfUlNTSV9FUF9NVUxUSVBMSUVSKTsKKwlpZiAoZHMtPmRzX3J4c3RhdC5yc19yc3NpIDwgMCkKKwkJZHMtPmRzX3J4c3RhdC5yc19yc3NpID0gMDsKKwllbHNlIGlmIChkcy0+ZHNfcnhzdGF0LnJzX3Jzc2kgPiAxMjcpCisJCWRzLT5kc19yeHN0YXQucnNfcnNzaSA9IDEyNzsKKworCS8qIFVwZGF0ZSBCZWFjb24gUlNTSSwgdGhpcyBpcyB1c2VkIGJ5IEFOSS4gKi8KKwlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpCisJCXNjLT5zY19haC0+c3RhdHMuYXZnYnJzc2kgPSBkcy0+ZHNfcnhzdGF0LnJzX3Jzc2k7CisKIAlyeF9zdGF0dXMtPm1hY3RpbWUgPSBhdGhfZXh0ZW5kX3RzZihzYywgZHMtPmRzX3J4c3RhdC5yc190c3RhbXApOwogCXJ4X3N0YXR1cy0+YmFuZCA9IGh3LT5jb25mLmNoYW5uZWwtPmJhbmQ7CiAJcnhfc3RhdHVzLT5mcmVxID0gaHctPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CiAJcnhfc3RhdHVzLT5ub2lzZSA9IHNjLT5hbmkubm9pc2VfZmxvb3I7Ci0Jcnhfc3RhdHVzLT5zaWduYWwgPSByeF9zdGF0dXMtPm5vaXNlICsgZHMtPmRzX3J4c3RhdC5yc19yc3NpOworCXJ4X3N0YXR1cy0+c2lnbmFsID0gQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1IgKyBkcy0+ZHNfcnhzdGF0LnJzX3Jzc2k7CiAJcnhfc3RhdHVzLT5hbnRlbm5hID0gZHMtPmRzX3J4c3RhdC5yc19hbnRlbm5hOwogCi0JLyogYXQgNDUgeW91IHdpbGwgYmUgYWJsZSB0byB1c2UgTUNTIDE1IHJlbGlhYmx5LiBBIG1vcmUgZWxhYm9yYXRlCi0JICogc2NoZW1lIGNhbiBiZSB1c2VkIGhlcmUgYnV0IGl0IHJlcXVpcmVzIHRhYmxlcyBvZiBTTlIvdGhyb3VnaHB1dCBmb3IKLQkgKiBlYWNoIHBvc3NpYmxlIG1vZGUgdXNlZC4gKi8KLQlyeF9zdGF0dXMtPnF1YWwgPSAgZHMtPmRzX3J4c3RhdC5yc19yc3NpICogMTAwIC8gNDU7CisJLyoKKwkgKiBUaGVvcnkgZm9yIHJlcG9ydGluZyBxdWFsaXR5OgorCSAqCisJICogQXQgYSBoYXJkd2FyZSBSU1NJIG9mIDQ1IHlvdSB3aWxsIGJlIGFibGUgdG8gdXNlIE1DUyA3ICByZWxpYWJseS4KKwkgKiBBdCBhIGhhcmR3YXJlIFJTU0kgb2YgNDUgeW91IHdpbGwgYmUgYWJsZSB0byB1c2UgTUNTIDE1IHJlbGlhYmx5LgorCSAqIEF0IGEgaGFyZHdhcmUgUlNTSSBvZiAzNSB5b3Ugc2hvdWxkIGJlIGFibGUgdXNlIDU0IE1icHMgcmVsaWFibHkuCisJICoKKwkgKiBNQ1MgNyAgaXMgdGhlIGhpZ2hldHMgTUNTIGluZGV4IHVzYWJsZSBieSBhIDEtc3RyZWFtIGRldmljZS4KKwkgKiBNQ1MgMTUgaXMgdGhlIGhpZ2hlc3QgTUNTIGluZGV4IHVzYWJsZSBieSBhIDItc3RyZWFtIGRldmljZS4KKwkgKgorCSAqIEFsbCBhdGg5ayBkZXZpY2VzIGFyZSBlaXRoZXIgMS1zdHJlYW0gb3IgMi1zdHJlYW0uCisJICoKKwkgKiBIb3cgbWFueSBiYXJzIHlvdSBzZWUgaXMgZGVyaXZlZCBmcm9tIHRoZSBxdWFsIHJlcG9ydGluZy4KKwkgKgorCSAqIEEgbW9yZSBlbGFib3JhdGUgc2NoZW1lIGNhbiBiZSB1c2VkIGhlcmUgYnV0IGl0IHJlcXVpcmVzIHRhYmxlcworCSAqIG9mIFNOUi90aHJvdWdocHV0IGZvciBlYWNoIHBvc3NpYmxlIG1vZGUgdXNlZC4gRm9yIHRoZSBNQ1MgdGFibGUKKwkgKiB5b3UgY2FuIHJlZmVyIHRvIHRoZSB3aXJlbGVzcyB3aWtpOgorCSAqCisJICogaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2llZWU4MDIxMS84MDIuMTFuCisJICoKKwkgKi8KKwlpZiAoY29uZl9pc19odCgmaHctPmNvbmYpKQorCQlyeF9zdGF0dXMtPnF1YWwgPSAgZHMtPmRzX3J4c3RhdC5yc19yc3NpICogMTAwIC8gNDU7CisJZWxzZQorCQlyeF9zdGF0dXMtPnF1YWwgPSAgZHMtPmRzX3J4c3RhdC5yc19yc3NpICogMTAwIC8gMzU7CiAKIAkvKiByc3NpIGNhbiBiZSBtb3JlIHRoYW4gNDUgdGhvdWdoLCBhbnl0aGluZyBhYm92ZSB0aGF0CiAJICogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXQgMTAwJSAqLwpAQCAtMjg4LDEwICszMDQsMTAgQEAKIAlzcGluX2xvY2tfaW5pdCgmc2MtPnJ4LnJ4YnVmbG9jayk7CiAKIAlzYy0+cnguYnVmc2l6ZSA9IHJvdW5kdXAoSUVFRTgwMjExX01BWF9NUERVX0xFTiwKLQkJCQkgbWluKHNjLT5jYWNoZWxzeiwgKHUxNik2NCkpOworCQkJCSBtaW4oc2MtPmNvbW1vbi5jYWNoZWxzeiwgKHUxNik2NCkpOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJjYWNoZWxzeiAldSByeGJ1ZnNpemUgJXVcbiIsCi0JCXNjLT5jYWNoZWxzeiwgc2MtPnJ4LmJ1ZnNpemUpOworCQlzYy0+Y29tbW9uLmNhY2hlbHN6LCBzYy0+cnguYnVmc2l6ZSk7CiAKIAkvKiBJbml0aWFsaXplIHJ4IGRlc2NyaXB0b3JzICovCiAKQEAgLTMwNCw3ICszMjAsNyBAQAogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmYsICZzYy0+cngucnhidWYsIGxpc3QpIHsKLQkJc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCXNrYiA9IGF0aF9yeGJ1Zl9hbGxvYygmc2MtPmNvbW1vbiwgc2MtPnJ4LmJ1ZnNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCWVycm9yID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyOwpAQCAtNDA0LDE1ICs0MjAsMTggQEAKIAllbHNlCiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9CRUFDT047CiAKLQkvKiBJZiBpbiBIT1NUQVAgbW9kZSwgd2FudCB0byBlbmFibGUgcmVjZXB0aW9uIG9mIFBTUE9MTCBmcmFtZXMgKi8KLQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCisJaWYgKHNjLT5yeC5yeGZpbHRlciAmIEZJRl9QU1BPTEwpCiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9QU1BPTEw7CiAKLQlpZiAoc2MtPnNlY193aXBoeSkgeworCWlmIChjb25mX2lzX2h0KCZzYy0+aHctPmNvbmYpKQorCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfQ09NUF9CQVI7CisKKwlpZiAoc2MtPnNlY193aXBoeSB8fCAoc2MtPnJ4LnJ4ZmlsdGVyICYgRklGX09USEVSX0JTUykpIHsKIAkJLyogVE9ETzogb25seSBuZWVkZWQgaWYgbW9yZSB0aGFuIG9uZSBCU1NJRCBpcyBpbiB1c2UgaW4KIAkJICogc3RhdGlvbi9hZGhvYyBtb2RlICovCi0JCS8qIFRPRE86IGZvciBvbGRlciBjaGlwcywgbWF5IG5lZWQgdG8gYWRkIEFUSDlLX1JYX0ZJTFRFUl9QUk9NCi0JCSAqLworCQkvKiBUaGUgZm9sbG93aW5nIG1heSBhbHNvIGJlIG5lZWRlZCBmb3Igb3RoZXIgb2xkZXIgY2hpcHMgKi8KKwkJaWYgKHNjLT5zY19haC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MTYwKQorCQkJcmZpbHQgfD0gQVRIOUtfUlhfRklMVEVSX1BST007CiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9NQ0FTVF9CQ0FTVF9BTEw7CiAJfQogCkBAIC01MDUsMTEgKzUyNCw2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCBhdGhfcnhfcHNfYmFja190b19zbGVlcChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQlzYy0+c2NfZmxhZ3MgJj0gfihTQ19PUF9XQUlUX0ZPUl9CRUFDT04gfCBTQ19PUF9XQUlUX0ZPUl9DQUIpOwotfQotCiBzdGF0aWMgdm9pZCBhdGhfcnhfcHNfYmVhY29uKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKQEAgLTUyMSw2ICs1MzUsOCBAQAogCWlmIChtZW1jbXAoc2MtPmN1cmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsgLyogbm90IGZyb20gb3VyIGN1cnJlbnQgQVAgKi8KIAorCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfV0FJVF9GT1JfQkVBQ09OOworCiAJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0JFQUNPTl9TWU5DKSB7CiAJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQkVBQ09OX1NZTkM7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfUFMsICJSZWNvbmZpZ3VyZSBCZWFjb24gdGltZXJzIGJhc2VkIG9uICIKQEAgLTUyOCwxNCArNTQ0LDYgQEAKIAkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOwogCX0KIAotCWlmICghKHNjLT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSkgewotCQkvKiBXZSBhcmUgbm90IGluIFBTIG1vZGUgYW55bW9yZTsgcmVtYWluIGF3YWtlICovCi0JCURQUklOVEYoc2MsIEFUSF9EQkdfUFMsICJOb3QgaW4gUFMgbW9kZSBhbnltb3JlLCByZW1haW4gIgotCQkJImF3YWtlXG4iKTsKLQkJc2MtPnNjX2ZsYWdzICY9IH4oU0NfT1BfV0FJVF9GT1JfQkVBQ09OIHwgU0NfT1BfV0FJVF9GT1JfQ0FCKTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChhdGhfYmVhY29uX2R0aW1fcGVuZGluZ19jYWIoc2tiKSkgewogCQkvKgogCQkgKiBSZW1haW4gYXdha2Ugd2FpdGluZyBmb3IgYnVmZmVyZWQgYnJvYWRjYXN0L211bHRpY2FzdApAQCAtNTU2LDExICs1NjQsOSBAQAogCQkgKiBmYWlscyB0byBzZW5kIGEgZnJhbWUgaW5kaWNhdGluZyB0aGF0IGFsbCBDQUIgZnJhbWVzIGhhdmUKIAkJICogYmVlbiBkZWxpdmVyZWQuCiAJCSAqLworCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1dBSVRfRk9SX0NBQjsKIAkJRFBSSU5URihzYywgQVRIX0RCR19QUywgIlBTIHdhaXQgZm9yIENBQiBmcmFtZXMgdGltZWQgb3V0XG4iKTsKIAl9Ci0KLQkvKiBObyBtb3JlIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWVzIHRvIGJlIHJlY2VpdmVkIGF0IHRoaXMgcG9pbnQuICovCi0JYXRoX3J4X3BzX2JhY2tfdG9fc2xlZXAoc2MpOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfcnhfcHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC01NzgsMTMgKzU4NCwxMyBAQAogCQkgIGllZWU4MDIxMV9pc19hY3Rpb24oaGRyLT5mcmFtZV9jb250cm9sKSkgJiYKIAkJIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCiAJCSAhaWVlZTgwMjExX2hhc19tb3JlZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfUFMsICJBbGwgUFMgQ0FCIGZyYW1lcyByZWNlaXZlZCwgYmFjayB0byAiCi0JCQkic2xlZXBcbiIpOwogCQkvKgogCQkgKiBObyBtb3JlIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWVzIHRvIGJlIHJlY2VpdmVkIGF0IHRoaXMKIAkJICogcG9pbnQuCiAJCSAqLwotCQlhdGhfcnhfcHNfYmFja190b19zbGVlcChzYyk7CisJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfV0FJVF9GT1JfQ0FCOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX1BTLCAiQWxsIFBTIENBQiBmcmFtZXMgcmVjZWl2ZWQsIGJhY2sgdG8gIgorCQkJInNsZWVwXG4iKTsKIAl9IGVsc2UgaWYgKChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9XQUlUX0ZPUl9QU1BPTExfREFUQSkgJiYKIAkJICAgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCiAJCSAgICFpZWVlODAyMTFfaGFzX21vcmVmcmFncyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CkBAIC02MTksMTMgKzYyNSwxOCBAQAogCQkJaWYgKGFwaHkgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKIAkJCW5za2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOwotCQkJaWYgKG5za2IpCi0JCQkJX19pZWVlODAyMTFfcngoYXBoeS0+aHcsIG5za2IsIHJ4X3N0YXR1cyk7CisJCQlpZiAobnNrYikgeworCQkJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IobnNrYiksIHJ4X3N0YXR1cywKKwkJCQkJc2l6ZW9mKCpyeF9zdGF0dXMpKTsKKwkJCQlpZWVlODAyMTFfcngoYXBoeS0+aHcsIG5za2IpOworCQkJfQogCQl9Ci0JCV9faWVlZTgwMjExX3J4KHNjLT5odywgc2tiLCByeF9zdGF0dXMpOworCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksIHJ4X3N0YXR1cywgc2l6ZW9mKCpyeF9zdGF0dXMpKTsKKwkJaWVlZTgwMjExX3J4KHNjLT5odywgc2tiKTsKIAl9IGVsc2UgewogCQkvKiBEZWxpdmVyIHVuaWNhc3QgZnJhbWVzIGJhc2VkIG9uIHJlY2VpdmVyIGFkZHJlc3MgKi8KLQkJX19pZWVlODAyMTFfcngoYXRoX2dldF92aXJ0X2h3KHNjLCBoZHIpLCBza2IsIHJ4X3N0YXR1cyk7CisJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgcnhfc3RhdHVzLCBzaXplb2YoKnJ4X3N0YXR1cykpOworCQlpZWVlODAyMTFfcngoYXRoX2dldF92aXJ0X2h3KHNjLCBoZHIpLCBza2IpOwogCX0KIH0KIApAQCAtNzM4LDcgKzc0OSw3IEBACiAKIAkJLyogRW5zdXJlIHdlIGFsd2F5cyBoYXZlIGFuIHNrYiB0byByZXF1ZXVlIG9uY2Ugd2UgYXJlIGRvbmUKIAkJICogcHJvY2Vzc2luZyB0aGUgY3VycmVudCBidWZmZXIncyBza2IgKi8KLQkJcmVxdWV1ZV9za2IgPSBhdGhfcnhidWZfYWxsb2Moc2MsIHNjLT5yeC5idWZzaXplLCBHRlBfQVRPTUlDKTsKKwkJcmVxdWV1ZV9za2IgPSBhdGhfcnhidWZfYWxsb2MoJnNjLT5jb21tb24sIHNjLT5yeC5idWZzaXplLCBHRlBfQVRPTUlDKTsKIAogCQkvKiBJZiB0aGVyZSBpcyBubyBtZW1vcnkgd2UgaWdub3JlIHRoZSBjdXJyZW50IFJYJ2QgZnJhbWUsCiAJCSAqIHRlbGwgaGFyZHdhcmUgaXQgY2FuIGdpdmUgdXMgYSBuZXcgZnJhbWUgdXNpbmcgdGhlIG9sZApAQCAtNzUzLDcgKzc2NCw2IEBACiAJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJc2tiX3B1dChza2IsIGRzLT5kc19yeHN0YXQucnNfZGF0YWxlbik7Ci0JCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9DT05UUk9MKTsKIAogCQkvKiBzZWUgaWYgYW55IHBhZGRpbmcgaXMgZG9uZSBieSB0aGUgaHcgYW5kIHJlbW92ZSBpdCAqLwogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmgKaW5kZXggNTI2MDUyNC4uZTVjMjllYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWcuaApAQCAtMjM0LDcgKzIzNCwxNSBAQAogI2RlZmluZSBBUl9JTVJfUzUgICAgICAgICAgICAgICAgICAgMHgwMGI4CiAjZGVmaW5lIEFSX0lNUl9TNV9USU1fVElNRVIgICAgICAgICAweDAwMDAwMDEwCiAjZGVmaW5lIEFSX0lNUl9TNV9EVElNX1RJTUVSICAgICAgICAweDAwMDAwMDIwCi0KKyNkZWZpbmUgQVJfSVNSX1M1X0dFTlRJTUVSX1RSSUcgICAgIDB4MDAwMEZGODAKKyNkZWZpbmUgQVJfSVNSX1M1X0dFTlRJTUVSX1RSSUdfUyAgIDAKKyNkZWZpbmUgQVJfSVNSX1M1X0dFTlRJTUVSX1RIUkVTSCAgIDB4RkY4MDAwMDAKKyNkZWZpbmUgQVJfSVNSX1M1X0dFTlRJTUVSX1RIUkVTSF9TIDE2CisjZGVmaW5lIEFSX0lTUl9TNV9TICAgICAgICAgICAgICAgICAweDAwZDgKKyNkZWZpbmUgQVJfSU1SX1M1X0dFTlRJTUVSX1RSSUcgICAgIDB4MDAwMEZGODAKKyNkZWZpbmUgQVJfSU1SX1M1X0dFTlRJTUVSX1RSSUdfUyAgIDAKKyNkZWZpbmUgQVJfSU1SX1M1X0dFTlRJTUVSX1RIUkVTSCAgIDB4RkY4MDAwMDAKKyNkZWZpbmUgQVJfSU1SX1M1X0dFTlRJTUVSX1RIUkVTSF9TIDE2CiAKICNkZWZpbmUgQVJfSU1SICAgICAgICAgICAgICAgMHgwMGEwCiAjZGVmaW5lIEFSX0lNUl9SWE9LICAgICAgICAgIDB4MDAwMDAwMDEKQEAgLTU3NCw2ICs1ODIsNyBAQAogCiAjZGVmaW5lIEFSX0RfR0JMX0lGU19TSUZTICAgICAgICAgMHgxMDMwCiAjZGVmaW5lIEFSX0RfR0JMX0lGU19TSUZTX00gICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBBUl9EX0dCTF9JRlNfU0lGU19BU1lOQ19GSUZPX0RVUiAweDAwMDAwM0FCCiAjZGVmaW5lIEFSX0RfR0JMX0lGU19TSUZTX1JFU1YwICAgMHhGRkZGRkZGRgogCiAjZGVmaW5lIEFSX0RfVFhCTEtfQkFTRSAgICAgICAgICAgIDB4MTAzOApAQCAtNTg5LDEwICs1OTgsMTIgQEAKICNkZWZpbmUgQVJfRF9HQkxfSUZTX1NMT1QgICAgICAgICAweDEwNzAKICNkZWZpbmUgQVJfRF9HQkxfSUZTX1NMT1RfTSAgICAgICAweDAwMDBGRkZGCiAjZGVmaW5lIEFSX0RfR0JMX0lGU19TTE9UX1JFU1YwICAgMHhGRkZGMDAwMAorI2RlZmluZSBBUl9EX0dCTF9JRlNfU0xPVF9BU1lOQ19GSUZPX0RVUiAgIDB4MDAwMDA0MjAKIAogI2RlZmluZSBBUl9EX0dCTF9JRlNfRUlGUyAgICAgICAgIDB4MTBiMAogI2RlZmluZSBBUl9EX0dCTF9JRlNfRUlGU19NICAgICAgIDB4MDAwMEZGRkYKICNkZWZpbmUgQVJfRF9HQkxfSUZTX0VJRlNfUkVTVjAgICAweEZGRkYwMDAwCisjZGVmaW5lIEFSX0RfR0JMX0lGU19FSUZTX0FTWU5DX0ZJRk9fRFVSICAgMHgwMDAwQTVFQgogCiAjZGVmaW5lIEFSX0RfR0JMX0lGU19NSVNDICAgICAgICAweDEwZjAKICNkZWZpbmUgQVJfRF9HQkxfSUZTX01JU0NfTEZTUl9TTElDRV9TRUwgICAgICAgIDB4MDAwMDAwMDcKQEAgLTczOCw2ICs3NDksMTMgQEAKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzEwICAgICAgICAgICAgICAwCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSAgICAgICAgICAgICAgMQogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVJfU1JFVl9WRVJTSU9OXzkyODcgICAgICAgICAgICAgICAgICAweDE4MAorI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODdfMTAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85Mjg3XzExICAgICAgICAgICAgICAxCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4N18xMiAgICAgICAgICAgICAgMgorI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTI3MQkJCTB4MTQwCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI3MV8xMAkJMAorI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyNzFfMTEJCTEKIAogI2RlZmluZSBBUl9TUkVWXzU0MTYoX2FoKSBcCiAJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSkgfHwgXApAQCAtNzk0LDYgKzgxMiwzNiBAQAogCSAoQVJfU1JFVl85Mjg1KGFoKSAmJiAoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID49IFwKIAkJCSAgICAgICBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIpKSkKIAorI2RlZmluZSBBUl9TUkVWXzkyODcoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85Mjg3KSkKKyNkZWZpbmUgQVJfU1JFVl85Mjg3XzEwX09SX0xBVEVSKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTI4NykpCisjZGVmaW5lIEFSX1NSRVZfOTI4N18xMChfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODcpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyODdfMTApKQorI2RlZmluZSBBUl9TUkVWXzkyODdfMTEoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85Mjg3KSAmJiBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85Mjg3XzExKSkKKyNkZWZpbmUgQVJfU1JFVl85Mjg3XzExX09SX0xBVEVSKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85Mjg3KSB8fCBcCisJICgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTI4NykgJiYgXAorCSAgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzkyODdfMTEpKSkKKyNkZWZpbmUgQVJfU1JFVl85Mjg3XzEyKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTI4NykgJiYgXAorCSAoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4N18xMikpCisjZGVmaW5lIEFSX1NSRVZfOTI4N18xMl9PUl9MQVRFUihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPiBBUl9TUkVWX1ZFUlNJT05fOTI4NykgfHwgXAorCSAoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODcpICYmIFwKKwkgICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl85Mjg3XzEyKSkpCisjZGVmaW5lIEFSX1NSRVZfOTI3MShfYWgpIFwKKyAgICAoKChfYWgpKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjcxKQorI2RlZmluZSBBUl9TUkVWXzkyNzFfMTAoX2FoKSBcCisgICAgKEFSX1NSRVZfOTI3MShfYWgpICYmIFwKKyAgICAgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyNzFfMTApKQorI2RlZmluZSBBUl9TUkVWXzkyNzFfMTEoX2FoKSBcCisgICAgKEFSX1NSRVZfOTI3MShfYWgpICYmIFwKKyAgICAgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyNzFfMTEpKQorCiAjZGVmaW5lIEFSX1JBRElPX1NSRVZfTUFKT1IgICAgICAgICAgICAgICAgICAgMHhmMAogI2RlZmluZSBBUl9SQUQ1MTMzX1NSRVZfTUFKT1IgICAgICAgICAgICAgICAgIDB4YzAKICNkZWZpbmUgQVJfUkFEMjEzM19TUkVWX01BSk9SICAgICAgICAgICAgICAgICAweGQwCkBAIC04MDksNiArODU3LDkgQEAKICNkZWZpbmUgQVJfQUhCX1BBR0VfU0laRV8xSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lIEFSX0FIQl9QQUdFX1NJWkVfMksgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAogI2RlZmluZSBBUl9BSEJfUEFHRV9TSVpFXzRLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVJfQUhCX0NVU1RPTV9CVVJTVF9FTiAgICAgICAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lIEFSX0FIQl9DVVNUT01fQlVSU1RfRU5fUyAgICAgICAgICAgICAgNgorI2RlZmluZSBBUl9BSEJfQ1VTVE9NX0JVUlNUX0FTWU5DX0ZJRk9fVkFMICAgIDMKIAogI2RlZmluZSBBUl9JTlRSX1JUQ19JUlEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgQVJfSU5UUl9NQUNfSVJRICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCkBAIC04ODUsNiArOTM2LDcgQEAKICNkZWZpbmUgQVJfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAogI2RlZmluZSBBUjkyOFhfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgIDEwCiAjZGVmaW5lIEFSOTI4NV9OVU1fR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVI5Mjg3X05VTV9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAxMQogCiAjZGVmaW5lIEFSX0dQSU9fSU5fT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDQ4CiAjZGVmaW5lIEFSX0dQSU9fSU5fVkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGQzAwMApAQCAtODkzLDYgKzk0NSw4IEBACiAjZGVmaW5lIEFSOTI4WF9HUElPX0lOX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgMTAKICNkZWZpbmUgQVI5Mjg1X0dQSU9fSU5fVkFMICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGMDAwCiAjZGVmaW5lIEFSOTI4NV9HUElPX0lOX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVI5Mjg3X0dQSU9fSU5fVkFMICAgICAgICAgICAgICAgICAgICAgICAweDAwM0ZGODAwCisjZGVmaW5lIEFSOTI4N19HUElPX0lOX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgMTEKIAogI2RlZmluZSBBUl9HUElPX09FX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDA0YwogI2RlZmluZSBBUl9HUElPX09FX09VVF9EUlYgICAgICAgICAgICAgICAgICAgICAgIDB4MwpAQCAtOTE2LDYgKzk3MCw4IEBACiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX1JGU0lMRU5UX0RFRl9TICAgICAgNwogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9BQ1RJVkVfQkIgICAgICAgIDB4MDAwMDEwMDAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfQUNUSVZFX0JCX1MgICAgICAxMgorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9CQiAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfUFJJT1JJVFlfQkJfUyAgICAxCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX1JGU0lMRU5UX0JCICAgICAgICAgMHgwMDAwODAwMAogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9CQl9TICAgICAgIDE1CiAjZGVmaW5lIEFSX0dQSU9fUlRDX1JFU0VUX09WRVJSSURFX0VOQUJMRSAgICAgICAgMHgwMDAxMDAwMApAQCAtOTI0LDYgKzk4MCw4IEBACiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMSAgICAgICAgICAgICAgICAgICAgICAgMHg0MDU4CiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMV9CVF9BQ1RJVkUgICAgICAgICAgICAgMHgwMDBmMDAwMAogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFX1MgICAgICAgICAgIDE2CisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMV9CVF9QUklPUklUWSAgICAgICAgICAgMHgwMDAwMGYwMAorI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDFfQlRfUFJJT1JJVFlfUyAgICAgICAgIDgKIAogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDIgICAgICAgICAgICAgICAgICAgICAgIDB4NDA1YwogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDJfQ0xLMjUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKQEAgLTk0OSw2ICsxMDA3LDggQEAKIAogI2RlZmluZSBBUl9PQlMgICAgICAgICAgICAgICAgICAweDQwODAKIAorI2RlZmluZSBBUl9HUElPX1BEUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDA4OAorCiAjZGVmaW5lIEFSX1BDSUVfTVNJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDk0CiAjZGVmaW5lIEFSX1BDSUVfTVNJX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQogCkBAIC0xMTE1LDEyICsxMTc1LDMyIEBACiAjZGVmaW5lIEFSOTI4NV9BTl9SRjJHNF9EQjJfNCAgICAweDAwMDAzODAwCiAjZGVmaW5lIEFSOTI4NV9BTl9SRjJHNF9EQjJfNF9TICAgIDExCiAKKy8qIEFSOTI3MSA6IDB4NzgyOCwgMHg3ODJjIGRpZmZlcmVudCBzZXR0aW5nIGZyb20gQVI5Mjg1ICovCisjZGVmaW5lIEFSOTI3MV9BTl9SRjJHM19PQl9jY2sJCTB4MDAxQzAwMDAKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkczX09CX2Nja19TCTE4CisjZGVmaW5lIEFSOTI3MV9BTl9SRjJHM19PQl9wc2sJCTB4MDAwMzgwMDAKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkczX09CX3Bza19TCTE1CisjZGVmaW5lIEFSOTI3MV9BTl9SRjJHM19PQl9xYW0JCTB4MDAwMDcwMDAKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkczX09CX3FhbV9TCTEyCisKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkczX0RCXzEJCTB4MDBFMDAwMDAKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkczX0RCXzFfUwkJMjEKKworI2RlZmluZSBBUjkyNzFfQU5fUkYyRzNfQ0NPTVAJCTB4RkZGCisjZGVmaW5lIEFSOTI3MV9BTl9SRjJHM19DQ09NUF9TCQkwCisKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkc0X0RCXzIJCTB4RTAwMDAwMDAKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkc0X0RCXzJfUwkJMjkKKwogI2RlZmluZSBBUjkyODVfQU5fUkYyRzYgICAgICAgICAgICAgICAgIDB4NzgzNAogI2RlZmluZSBBUjkyODVfQU5fUkYyRzZfQ0NPTVAgICAgICAgICAgIDB4MDAwMDc4MDAKICNkZWZpbmUgQVI5Mjg1X0FOX1JGMkc2X0NDT01QX1MgICAgICAgICAxMQogI2RlZmluZSBBUjkyODVfQU5fUkYyRzZfT0ZGUyAgICAgICAgICAgIDB4MDNmMDAwMDAKICNkZWZpbmUgQVI5Mjg1X0FOX1JGMkc2X09GRlNfUyAgICAgICAgICAyMAogCisjZGVmaW5lIEFSOTI3MV9BTl9SRjJHNl9PRkZTICAgICAgICAgICAgMHgwN2YwMDAwMAorI2RlZmluZSBBUjkyNzFfQU5fUkYyRzZfT0ZGU19TICAgICAgICAgICAgMjAKKwogI2RlZmluZSBBUjkyODVfQU5fUkYyRzcgICAgICAgICAgICAgICAgIDB4NzgzOAogI2RlZmluZSBBUjkyODVfQU5fUkYyRzdfUFdEREIgICAgICAgICAgIDB4MDAwMDAwMDIKICNkZWZpbmUgQVI5Mjg1X0FOX1JGMkc3X1BXRERCX1MgICAgICAgICAxCkBAIC0xMTU0LDYgKzEyMzQsMzggQEAKICNkZWZpbmUgQVI5Mjg1X0FOX1RPUDQgICAgICAgICAgIDB4Nzg3MAogI2RlZmluZSBBUjkyODVfQU5fVE9QNF9ERUZBVUxUICAgMHgxMDE0MmMwMAogCisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19DSDAgICAgICAgICAgICAgMHg3ODA4CisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19DSDEgICAgICAgICAgICAgMHg3ODVjCisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19EQjEgICAgICAgICAgICAgMHhFMDAwMDAwMAorI2RlZmluZSBBUjkyODdfQU5fUkYyRzNfREIxX1MgICAgICAgICAgIDI5CisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19EQjIgICAgICAgICAgICAgMHgxQzAwMDAwMAorI2RlZmluZSBBUjkyODdfQU5fUkYyRzNfREIyX1MgICAgICAgICAgIDI2CisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19PQl9DQ0sgICAgICAgICAgMHgwMzgwMDAwMAorI2RlZmluZSBBUjkyODdfQU5fUkYyRzNfT0JfQ0NLX1MgICAgICAgIDIzCisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19PQl9QU0sgICAgICAgICAgMHgwMDcwMDAwMAorI2RlZmluZSBBUjkyODdfQU5fUkYyRzNfT0JfUFNLX1MgICAgICAgIDIwCisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19PQl9RQU0gICAgICAgICAgMHgwMDBFMDAwMAorI2RlZmluZSBBUjkyODdfQU5fUkYyRzNfT0JfUUFNX1MgICAgICAgIDE3CisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19PQl9QQUxfT0ZGICAgICAgMHgwMDAxQzAwMAorI2RlZmluZSBBUjkyODdfQU5fUkYyRzNfT0JfUEFMX09GRl9TICAgIDE0CisKKyNkZWZpbmUgQVI5Mjg3X0FOX1RYUEMwICAgICAgICAgICAgICAgICAweDc4OTgKKyNkZWZpbmUgQVI5Mjg3X0FOX1RYUEMwX1RYUENNT0RFICAgICAgICAweDAwMDBDMDAwCisjZGVmaW5lIEFSOTI4N19BTl9UWFBDMF9UWFBDTU9ERV9TICAgICAgMTQKKyNkZWZpbmUgQVI5Mjg3X0FOX1RYUEMwX1RYUENNT0RFX05PUk1BTCAgICAwCisjZGVmaW5lIEFSOTI4N19BTl9UWFBDMF9UWFBDTU9ERV9URVNUICAgICAgMQorI2RlZmluZSBBUjkyODdfQU5fVFhQQzBfVFhQQ01PREVfVEVNUFNFTlNFIDIKKyNkZWZpbmUgQVI5Mjg3X0FOX1RYUEMwX1RYUENNT0RFX0FUQlRFU1QgICAzCisKKyNkZWZpbmUgQVI5Mjg3X0FOX1RPUDIgICAgICAgICAgICAgICAgICAweDc4YjQKKyNkZWZpbmUgQVI5Mjg3X0FOX1RPUDJfWFBBQklBU19MVkwgICAgICAweEMwMDAwMDAwCisjZGVmaW5lIEFSOTI4N19BTl9UT1AyX1hQQUJJQVNfTFZMX1MgICAgMzAKKworLyogQVI5MjcxIHNwZWNpZmljIHN0dWZmICovCisjZGVmaW5lIEFSOTI3MV9SRVNFVF9QT1dFUl9ET1dOX0NPTlRST0wJCTB4NTAwNDQKKyNkZWZpbmUgQVI5MjcxX1JBRElPX1JGX1JTVAkJCTB4MjAKKyNkZWZpbmUgQVI5MjcxX0dBVEVfTUFDX0NUTAkJCTB4NDAwMAorCiAjZGVmaW5lIEFSX1NUQV9JRDAgICAgICAgICAgICAgICAgIDB4ODAwMAogI2RlZmluZSBBUl9TVEFfSUQxICAgICAgICAgICAgICAgICAweDgwMDQKICNkZWZpbmUgQVJfU1RBX0lEMV9TQURIX01BU0sgICAgICAgMHgwMDAwRkZGRgpAQCAtMTE4OCw2ICsxMzAwLDcgQEAKICNkZWZpbmUgQVJfVElNRV9PVVRfQUNLX1MgICAgMAogI2RlZmluZSBBUl9USU1FX09VVF9DVFMgICAgICAweDNGRkYwMDAwCiAjZGVmaW5lIEFSX1RJTUVfT1VUX0NUU19TICAgIDE2CisjZGVmaW5lIEFSX1RJTUVfT1VUX0FDS19DVFNfQVNZTkNfRklGT19EVVIgICAgMHgxNjAwMUQ1NgogCiAjZGVmaW5lIEFSX1JTU0lfVEhSICAgICAgICAgIDB4ODAxOAogI2RlZmluZSBBUl9SU1NJX1RIUl9NQVNLICAgICAweDAwMDAwMEZGCkBAIC0xMjAzLDYgKzEzMTYsNyBAQAogI2RlZmluZSBBUl9VU0VDX1RYX0xBVF9TICAgICAxNAogI2RlZmluZSBBUl9VU0VDX1JYX0xBVCAgICAgICAweDFGODAwMDAwCiAjZGVmaW5lIEFSX1VTRUNfUlhfTEFUX1MgICAgIDIzCisjZGVmaW5lIEFSX1VTRUNfQVNZTkNfRklGT19EVVIgICAgMHgxMmUwMDA3NAogCiAjZGVmaW5lIEFSX1JFU0VUX1RTRiAgICAgICAgMHg4MDIwCiAjZGVmaW5lIEFSX1JFU0VUX1RTRl9PTkNFICAgMHgwMTAwMDAwMApAQCAtMTIxMSw3ICsxMzI1LDYgQEAKICNkZWZpbmUgQVJfQ0ZQX1ZBTCAgICAgICAgICAweDAwMDBGRkZGCiAKICNkZWZpbmUgQVJfUlhfRklMVEVSICAgICAgICAweDgwM0MKLSNkZWZpbmUgQVJfUlhfQ09NUFJfQkFSICAgICAweDAwMDAwNDAwCiAKICNkZWZpbmUgQVJfTUNBU1RfRklMMCAgICAgICAweDgwNDAKICNkZWZpbmUgQVJfTUNBU1RfRklMMSAgICAgICAweDgwNDQKQEAgLTEzMjgsNiArMTQ0MSw3IEBACiAjZGVmaW5lIEFSX1FVSUVUMV9ORVhUX1FVSUVUX00gICAgICAgICAweDAwMDBmZmZmCiAjZGVmaW5lIEFSX1FVSUVUMV9RVUlFVF9FTkFCTEUgICAgICAgICAweDAwMDEwMDAwCiAjZGVmaW5lIEFSX1FVSUVUMV9RVUlFVF9BQ0tfQ1RTX0VOQUJMRSAweDAwMDIwMDAwCisjZGVmaW5lIEFSX1FVSUVUMV9RVUlFVF9BQ0tfQ1RTX0VOQUJMRV9TIDE3CiAjZGVmaW5lIEFSX1FVSUVUMiAgICAgICAgICAweDgxMDAKICNkZWZpbmUgQVJfUVVJRVQyX1FVSUVUX1BFUklPRF9TICAgICAgIDAKICNkZWZpbmUgQVJfUVVJRVQyX1FVSUVUX1BFUklPRF9NICAgICAgIDB4MDAwMGZmZmYKQEAgLTEzNzMsNiArMTQ4Nyw4IEBACiAjZGVmaW5lIEFSX1BDVV9DTEVBUl9WTUYgICAgICAgICAgIDB4MDEwMDAwMDAKICNkZWZpbmUgQVJfUENVX0NMRUFSX0JBX1ZBTElEICAgICAgMHgwNDAwMDAwMAogCisjZGVmaW5lIEFSX1BDVV9CVF9BTlRfUFJFVkVOVF9SWCAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQVJfUENVX0JUX0FOVF9QUkVWRU5UX1JYX1MgMjAKIAogI2RlZmluZSBBUl9GSUxUX09GRE0gICAgICAgICAgIDB4ODEyNAogI2RlZmluZSBBUl9GSUxUX09GRE1fQ09VTlQgICAgIDB4MDBGRkZGRkYKQEAgLTE0MDAsNiArMTUxNiw0NiBAQAogI2RlZmluZSBBUl9QSFlfRVJSXzNfQ09VTlQgICAgIDB4MDBGRkZGRkYKICNkZWZpbmUgQVJfUEhZX0VSUl9NQVNLXzMgICAgICAweDgxNmMKIAorI2RlZmluZSBBUl9CVF9DT0VYX01PREUgICAgICAgICAgICAweDgxNzAKKyNkZWZpbmUgQVJfQlRfVElNRV9FWFRFTkQgICAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBBUl9CVF9USU1FX0VYVEVORF9TICAgICAgICAwCisjZGVmaW5lIEFSX0JUX1RYU1RBVEVfRVhURU5EICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVJfQlRfVFhTVEFURV9FWFRFTkRfUyAgICAgOAorI2RlZmluZSBBUl9CVF9UWF9GUkFNRV9FWFRFTkQgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFSX0JUX1RYX0ZSQU1FX0VYVEVORF9TICAgIDkKKyNkZWZpbmUgQVJfQlRfTU9ERSAgICAgICAgICAgICAgICAgMHgwMDAwMGMwMAorI2RlZmluZSBBUl9CVF9NT0RFX1MgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBUl9CVF9RVUlFVCAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFSX0JUX1FVSUVUX1MgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFSX0JUX1FDVV9USFJFU0ggICAgICAgICAgIDB4MDAwMWUwMDAKKyNkZWZpbmUgQVJfQlRfUUNVX1RIUkVTSF9TICAgICAgICAgMTMKKyNkZWZpbmUgQVJfQlRfUlhfQ0xFQVJfUE9MQVJJVFkgICAgMHgwMDAyMDAwMAorI2RlZmluZSBBUl9CVF9SWF9DTEVBUl9QT0xBUklUWV9TICAxNworI2RlZmluZSBBUl9CVF9QUklPUklUWV9USU1FICAgICAgICAweDAwZmMwMDAwCisjZGVmaW5lIEFSX0JUX1BSSU9SSVRZX1RJTUVfUyAgICAgIDE4CisjZGVmaW5lIEFSX0JUX0ZJUlNUX1NMT1RfVElNRSAgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgQVJfQlRfRklSU1RfU0xPVF9USU1FX1MgICAgMjQKKworI2RlZmluZSBBUl9CVF9DT0VYX1dFSUdIVCAgICAgICAgICAweDgxNzQKKyNkZWZpbmUgQVJfQlRfQ09FWF9XR0hUCQkgICAweGZmNTUKKyNkZWZpbmUgQVJfU1RPTVBfQUxMX1dMQU5fV0dIVAkgICAweGZmY2MKKyNkZWZpbmUgQVJfU1RPTVBfTE9XX1dMQU5fV0dIVAkgICAweGFhYTgKKyNkZWZpbmUgQVJfU1RPTVBfTk9ORV9XTEFOX1dHSFQJICAgMHhhYTAwCisjZGVmaW5lIEFSX0JUQ09FWF9CVF9XR0hUICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgQVJfQlRDT0VYX0JUX1dHSFRfUyAgICAgICAgMAorI2RlZmluZSBBUl9CVENPRVhfV0xfV0dIVCAgICAgICAgICAweGZmZmYwMDAwCisjZGVmaW5lIEFSX0JUQ09FWF9XTF9XR0hUX1MgICAgICAgIDE2CisKKyNkZWZpbmUgQVJfQlRfQ09FWF9NT0RFMiAgICAgICAgICAgMHg4MTdjCisjZGVmaW5lIEFSX0JUX0JDTl9NSVNTX1RIUkVTSCAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgQVJfQlRfQkNOX01JU1NfVEhSRVNIX1MgICAgMAorI2RlZmluZSBBUl9CVF9CQ05fTUlTU19DTlQgICAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEFSX0JUX0JDTl9NSVNTX0NOVF9TICAgICAgIDgKKyNkZWZpbmUgQVJfQlRfSE9MRF9SWF9DTEVBUiAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBUl9CVF9IT0xEX1JYX0NMRUFSX1MgICAgICAxNgorI2RlZmluZSBBUl9CVF9ESVNBQkxFX0JUX0FOVCAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEFSX0JUX0RJU0FCTEVfQlRfQU5UX1MgICAgIDIwCisKICNkZWZpbmUgQVJfVFhTSUZTICAgICAgICAgICAgICAweDgxZDAKICNkZWZpbmUgQVJfVFhTSUZTX1RJTUUgICAgICAgICAweDAwMDAwMEZGCiAjZGVmaW5lIEFSX1RYU0lGU19UWF9MQVRFTkNZICAgMHgwMDAwMEYwMApAQCAtMTQxNiw3ICsxNTcyLDEwIEBACiAjZGVmaW5lIEFSX1RYT1BfOF8xMSAgIDB4ODFmOAogI2RlZmluZSBBUl9UWE9QXzEyXzE1ICAweDgxZmMKIAotCisjZGVmaW5lIEFSX05FWFRfTkRQMl9USU1FUiAgICAgICAgICAgICAgICAgIDB4ODE4MAorI2RlZmluZSBBUl9GSVJTVF9ORFBfVElNRVIgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFSX05EUDJfUEVSSU9EICAgICAgICAgICAgICAgICAgICAgIDB4ODFhMAorI2RlZmluZSBBUl9ORFAyX1RJTUVSX01PREUgICAgICAgICAgICAgICAgICAweDgxYzAKICNkZWZpbmUgQVJfTkVYVF9UQlRUX1RJTUVSICAgICAgICAgICAgICAgICAgMHg4MjAwCiAjZGVmaW5lIEFSX05FWFRfRE1BX0JFQUNPTl9BTEVSVCAgICAgICAgICAgIDB4ODIwNAogI2RlZmluZSBBUl9ORVhUX1NXQkEgICAgICAgICAgICAgICAgICAgICAgICAweDgyMDgKQEAgLTE0NjgsNiArMTYyNywxMCBAQAogI2RlZmluZSBBUl9TTFBfTUlCX0NMRUFSICAgMHgwMDAwMDAwMQogI2RlZmluZSBBUl9TTFBfTUlCX1BFTkRJTkcgMHgwMDAwMDAwMgogCisjZGVmaW5lIEFSX01BQ19QQ1VfTE9HSUNfQU5BTFlaRVIgICAgICAgICAgICAgICAweDgyNjQKKyNkZWZpbmUgQVJfTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9ESVNCVUcyMDc2OCAgIDB4MjAwMDAwMDAKKworCiAjZGVmaW5lIEFSXzIwNDBfTU9ERSAgICAgICAgICAgICAgICAweDgzMTgKICNkZWZpbmUgQVJfMjA0MF9KT0lORURfUlhfQ0xFQVIgMHgwMDAwMDAwMQogCkBAIC0xNDg1LDYgKzE2NDgsMzkgQEAKICNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTJfTUdNVF9DUllQVE9fRU5BQkxFICAgICAgICAgICAweDAwMDAwMDAyCiAjZGVmaW5lIEFSX1BDVV9NSVNDX01PREUyX05PX0NSWVBUT19GT1JfTk9OX0RBVEFfUEtUICAgMHgwMDAwMDAwNAogCisjZGVmaW5lIEFSX1BDVV9NSVNDX01PREUyX1JFU0VSVkVEICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBBUl9QQ1VfTUlTQ19NT0RFMl9BREhPQ19NQ0FTVF9LRVlJRF9FTkFCTEUgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTJfQ0ZQX0lHTk9SRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFSX1BDVV9NSVNDX01PREUyX01HTVRfUU9TICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBBUl9QQ1VfTUlTQ19NT0RFMl9NR01UX1FPU19TICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTJfRU5BQkxFX0xPQURfTkFWX0JFQUNPTl9EVVJBVElPTiAweDAwMDEwMDAwCisjZGVmaW5lIEFSX1BDVV9NSVNDX01PREUyX0VOQUJMRV9BR0dXRVAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBBUl9QQ1VfTUlTQ19NT0RFMl9IV1dBUjEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTJfSFdXQVIyICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEFSX1BDVV9NSVNDX01PREUyX1JFU0VSVkVEMiAgICAgICAgICAgICAgICAgICAgMHhGRkZFMDAwMAorCisjZGVmaW5lIEFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczICAgICAgICAgICAgICAgICAgICAgMHg4MzU4CisjZGVmaW5lIEFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczX0RBVEFQQVRIX1NFTCAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHM19TT0ZUX1JFU0VUICAgICAgICAgIDB4ODAwMDAwMDAKKworCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0swICAgICAgIDB4ODA1YworI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMF9GQyAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0swX1FPUyAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgQVJfQUVTX01VVEVfTUFTSzBfUU9TX1MgMTYKKworI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMSAgICAgICAgICAgICAgMHg4MDYwCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxX1NFUSAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxX1NFUV9TICAgICAgICAwCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxX0ZDX01HTVQgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxX0ZDX01HTVRfUyAgICAxNgorCisjZGVmaW5lIEFSX1JBVEVfRFVSQVRJT05fMCAgICAgIDB4ODcwMAorI2RlZmluZSBBUl9SQVRFX0RVUkFUSU9OXzMxICAgICAweDg3Q0MKKyNkZWZpbmUgQVJfUkFURV9EVVJBVElPTl8zMiAgICAgMHg4NzgwCisjZGVmaW5lIEFSX1JBVEVfRFVSQVRJT04oX24pICAgIChBUl9SQVRFX0RVUkFUSU9OXzAgKyAoKF9uKTw8MikpCisKKwogI2RlZmluZSBBUl9LRVlUQUJMRV8wICAgICAgICAgICAweDg4MDAKICNkZWZpbmUgQVJfS0VZVEFCTEUoX24pICAgICAgICAgKEFSX0tFWVRBQkxFXzAgKyAoKF9uKSozMikpCiAjZGVmaW5lIEFSX0tFWV9DQUNIRV9TSVpFICAgICAgIDEyOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3ZpcnR1YWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay92aXJ0dWFsLmMKaW5kZXggMWZmNDI5Yi4uMTliODhmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3ZpcnR1YWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvdmlydHVhbC5jCkBAIC0zNTEsNyArMzUxLDcgQEAKIAkJCSAqIERyb3AgZnJvbSB0YXNrbGV0IHRvIHdvcmsgdG8gYWxsb3cgbXV0ZXggZm9yIGNoYW5uZWwKIAkJCSAqIGNoYW5nZS4KIAkJCSAqLwotCQkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKGFwaHktPnNjLT5odywKIAkJCQkgICAmYXBoeS0+c2MtPmNoYW5fd29yayk7CiAJCX0KIAl9CkBAIC0zNjcsNyArMzY3LDcgQEAKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKIAlpZiAoIV9fYXRoOWtfd2lwaHlfcGF1c2luZyhzYykpCi0JCXF1ZXVlX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsICZzYy0+Y2hhbl93b3JrKTsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoc2MtPmh3LCAmc2MtPmNoYW5fd29yayk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDlrX3BhdXNlX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKQEAgLTUyMSw3ICs1MjEsNyBAQAogCQkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKIAkJCWF0aF9yYWRpb19kaXNhYmxlKHNjKTsKIAkJCWF0aF9yYWRpb19lbmFibGUoc2MpOwotCQkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKGFwaHktPnNjLT5odywKIAkJCQkgICAmYXBoeS0+c2MtPmNoYW5fd29yayk7CiAJCQlyZXR1cm4gLUVCVVNZOyAvKiBwcmV2aW91cyBzZWxlY3Qgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KIAkJfQpAQCAtNTQxLDcgKzU0MSw3IEBACiAKIAlpZiAobm93KSB7CiAJCS8qIFJlYWR5IHRvIHJlcXVlc3QgY2hhbm5lbCBjaGFuZ2UgaW1tZWRpYXRlbHkgKi8KLQkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwgJmFwaHktPnNjLT5jaGFuX3dvcmspOworCQlpZWVlODAyMTFfcXVldWVfd29yayhhcGh5LT5zYy0+aHcsICZhcGh5LT5zYy0+Y2hhbl93b3JrKTsKIAl9CiAKIAkvKgpAQCAtNjQ4LDggKzY0OCw5IEBACiAJCSAgICAgICAiY2hhbmdlXG4iKTsKIAl9CiAKLQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsICZzYy0+d2lwaHlfd29yaywKLQkJCSAgIHNjLT53aXBoeV9zY2hlZHVsZXJfaW50KTsKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywKKwkJCQkgICAgICZzYy0+d2lwaHlfd29yaywKKwkJCQkgICAgIHNjLT53aXBoeV9zY2hlZHVsZXJfaW50KTsKIH0KIAogdm9pZCBhdGg5a193aXBoeV9zZXRfc2NoZWR1bGVyKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1bnNpZ25lZCBpbnQgbXNlY19pbnQpCkBAIC02NTcsNiArNjU4LDIzIEBACiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+d2lwaHlfd29yayk7CiAJc2MtPndpcGh5X3NjaGVkdWxlcl9pbnQgPSBtc2Vjc190b19qaWZmaWVzKG1zZWNfaW50KTsKIAlpZiAoc2MtPndpcGh5X3NjaGVkdWxlcl9pbnQpCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHctPndvcmtxdWV1ZSwgJnNjLT53aXBoeV93b3JrLAotCQkJCSAgIHNjLT53aXBoeV9zY2hlZHVsZXJfaW50KTsKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsICZzYy0+d2lwaHlfd29yaywKKwkJCQkJICAgICBzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCk7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworYm9vbCBhdGg5a19hbGxfd2lwaHlzX2lkbGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJdW5zaWduZWQgaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9JTkFDVElWRSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQlpZiAoIWFwaHkpCisJCQljb250aW51ZTsKKwkJaWYgKGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9JTkFDVElWRSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwppbmRleCA0Y2NmNDhlLi40MjU1MWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKQEAgLTU5LDYgKzU5LDcgQEAKIAkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAogCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCk7CiBzdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGVfYnVmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCisJCQkJc3RydWN0IGF0aF90eHEgKnR4cSwKIAkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpiZl9xLAogCQkJCWludCB0eG9rLCBpbnQgc2VuZGJhcik7CiBzdGF0aWMgdm9pZCBhdGhfdHhfdHhxYWRkYnVmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLApAQCAtNzMsMTggKzc0LDYgQEAKIC8qIEFnZ3JlZ2F0aW9uIGxvZ2ljICovCiAvKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IGF0aF9hZ2dyX3F1ZXJ5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubykKLXsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZDsKLQl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZG5vKTsKLQotCWlmICh0aWQtPnN0YXRlICYgQUdHUl9BRERCQV9DT01QTEVURSB8fAotCSAgICB0aWQtPnN0YXRlICYgQUdHUl9BRERCQV9QUk9HUkVTUykKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgYXRoX3R4X3F1ZXVlX3RpZChzdHJ1Y3QgYXRoX3R4cSAqdHhxLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKIHsKIAlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWMgPSB0aWQtPmFjOwpAQCAtMjI0LDcgKzIxMyw3IEBACiAJCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOwogCiAJCXNwaW5fdW5sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKLQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAwLCAwKTsKKwkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsIHR4cSwgJmJmX2hlYWQsIDAsIDApOwogCQlzcGluX2xvY2soJnR4cS0+YXhxX2xvY2spOwogCX0KIApAQCAtMjMyLDEzICsyMjEsMTUgQEAKIAl0aWQtPmJhd190YWlsID0gdGlkLT5iYXdfaGVhZDsKIH0KIAotc3RhdGljIHZvaWQgYXRoX3R4X3NldF9yZXRyeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQorc3RhdGljIHZvaWQgYXRoX3R4X3NldF9yZXRyeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCSAgICAgc3RydWN0IGF0aF9idWYgKmJmKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9SRVRSWTsKIAliZi0+YmZfcmV0cmllcysrOworCVRYX1NUQVRfSU5DKHR4cS0+YXhxX3FudW0sIGFfcmV0cmllcyk7CiAKIAlza2IgPSBiZi0+YmZfbXBkdTsKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CkBAIC0yNTAsNyArMjQxLDEwIEBACiAJc3RydWN0IGF0aF9idWYgKnRiZjsKIAogCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0JQVNTRVJUKCFsaXN0X2VtcHR5KCgmc2MtPnR4LnR4YnVmKSkpOworCWlmIChXQVJOX09OKGxpc3RfZW1wdHkoJnNjLT50eC50eGJ1ZikpKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCXRiZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eC50eGJ1Ziwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCWxpc3RfZGVsKCZ0YmYtPmxpc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKQEAgLTMzNyw3ICszMzEsNyBAQAogCQkJaWYgKCEodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgJiYKIAkJCSAgICBkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzICE9IEFUSDlLX1RYX1NXX0FCT1JURUQpIHsKIAkJCQlpZiAoYmYtPmJmX3JldHJpZXMgPCBBVEhfTUFYX1NXX1JFVFJJRVMpIHsKLQkJCQkJYXRoX3R4X3NldF9yZXRyeShzYywgYmYpOworCQkJCQlhdGhfdHhfc2V0X3JldHJ5KHNjLCB0eHEsIGJmKTsKIAkJCQkJdHhwZW5kaW5nID0gMTsKIAkJCQl9IGVsc2UgewogCQkJCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfWFJFVFJZOwpAQCAtMzg0LDEzICszNzgsMzEgQEAKIAkJCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCBkcywgbmJhZCwgdHhvaywgZmFsc2UpOwogCQkJfQogCi0JCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsICF0eGZhaWwsIHNlbmRiYXIpOworCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsIHR4cSwgJmJmX2hlYWQsICF0eGZhaWwsIHNlbmRiYXIpOwogCQl9IGVsc2UgewogCQkJLyogcmV0cnkgdGhlIHVuLWFja2VkIG9uZXMgKi8KIAkJCWlmIChiZi0+YmZfbmV4dCA9PSBOVUxMICYmIGJmX2xhc3QtPmJmX3N0YWxlKSB7CiAJCQkJc3RydWN0IGF0aF9idWYgKnRiZjsKIAogCQkJCXRiZiA9IGF0aF9jbG9uZV90eGJ1ZihzYywgYmZfbGFzdCk7CisJCQkJLyoKKwkJCQkgKiBVcGRhdGUgdHggYmF3IGFuZCBjb21wbGV0ZSB0aGUgZnJhbWUgd2l0aAorCQkJCSAqIGZhaWxlZCBzdGF0dXMgaWYgd2UgcnVuIG91dCBvZiB0eCBidWYKKwkJCQkgKi8KKwkJCQlpZiAoIXRiZikgeworCQkJCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQkJCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLAorCQkJCQkJCSAgYmYtPmJmX3NlcW5vKTsKKwkJCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCisJCQkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9YUkVUUlk7CisJCQkJCWF0aF90eF9yY19zdGF0dXMoYmYsIGRzLCBuYmFkLAorCQkJCQkJCSAwLCBmYWxzZSk7CisJCQkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCB0eHEsCisJCQkJCQkJICAgICZiZl9oZWFkLCAwLCAwKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCiAJCQkJYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc2MtPnNjX2FoLCB0YmYtPmJmX2Rlc2MpOwogCQkJCWxpc3RfYWRkX3RhaWwoJnRiZi0+bGlzdCwgJmJmX2hlYWQpOwogCQkJfSBlbHNlIHsKQEAgLTQxNCw3ICs0MjYsNiBAQAogCWlmICh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKSB7CiAJCWlmICh0aWQtPmJhd19oZWFkID09IHRpZC0+YmF3X3RhaWwpIHsKIAkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7Ci0JCQl0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOwogCQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9DTEVBTlVQOwogCiAJCQkvKiBzZW5kIGJ1ZmZlcmVkIGZyYW1lcyBhcyBzaW5nbGVzICovCkBAIC00NDcsNyArNDU4LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzOwogCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXY7CiAJdTMyIG1heF80bXNfZnJhbWVsZW4sIGZybWxlbjsKLQl1MTYgYWdncl9saW1pdCwgbGVnYWN5ID0gMCwgbWF4YW1wZHU7CisJdTE2IGFnZ3JfbGltaXQsIGxlZ2FjeSA9IDA7CiAJaW50IGk7CiAKIAlza2IgPSBiZi0+YmZfbXBkdTsKQEAgLTQ4MiwxNiArNDkzLDIwIEBACiAJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SQVRFX0NUUkxfUFJPQkUgfHwgbGVnYWN5KQogCQlyZXR1cm4gMDsKIAotCWFnZ3JfbGltaXQgPSBtaW4obWF4XzRtc19mcmFtZWxlbiwgKHUzMilBVEhfQU1QRFVfTElNSVRfREVGQVVMVCk7CisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0JUX1BSSU9SSVRZX0RFVEVDVEVEKQorCQlhZ2dyX2xpbWl0ID0gbWluKChtYXhfNG1zX2ZyYW1lbGVuICogMykgLyA4LAorCQkJCSAodTMyKUFUSF9BTVBEVV9MSU1JVF9NQVgpOworCWVsc2UKKwkJYWdncl9saW1pdCA9IG1pbihtYXhfNG1zX2ZyYW1lbGVuLAorCQkJCSAodTMyKUFUSF9BTVBEVV9MSU1JVF9NQVgpOwogCiAJLyoKIAkgKiBoL3cgY2FuIGFjY2VwdCBhZ2dyZWdhdGVzIHVwdG8gMTYgYml0IGxlbmd0aHMgKDY1NTM1KS4KIAkgKiBUaGUgSUUsIGhvd2V2ZXIgY2FuIGhvbGQgdXB0byA2NTUzNiwgd2hpY2ggc2hvd3MgdXAgaGVyZQogCSAqIGFzIHplcm8uIElnbm9yZSA2NTUzNiBzaW5jZSB3ZSAgYXJlIGNvbnN0cmFpbmVkIGJ5IGh3LgogCSAqLwotCW1heGFtcGR1ID0gdGlkLT5hbi0+bWF4YW1wZHU7Ci0JaWYgKG1heGFtcGR1KQotCQlhZ2dyX2xpbWl0ID0gbWluKGFnZ3JfbGltaXQsIG1heGFtcGR1KTsKKwlpZiAodGlkLT5hbi0+bWF4YW1wZHUpCisJCWFnZ3JfbGltaXQgPSBtaW4oYWdncl9saW1pdCwgdGlkLT5hbi0+bWF4YW1wZHUpOwogCiAJcmV0dXJuIGFnZ3JfbGltaXQ7CiB9CkBAIC00OTksNyArNTE0LDYgQEAKIC8qCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVsaW1pdGVycyB0byBiZSBhZGRlZCB0bwogICogbWVldCB0aGUgbWluaW11bSByZXF1aXJlZCBtcGR1ZGVuc2l0eS4KLSAqIGNhbGxlciBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHJhdGUgaXMgSFQgcmF0ZSAuCiAgKi8KIHN0YXRpYyBpbnQgYXRoX2NvbXB1dGVfbnVtX2RlbGltcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCiAJCQkJICBzdHJ1Y3QgYXRoX2J1ZiAqYmYsIHUxNiBmcm1sZW4pCkBAIC01MDcsNyArNTIxLDcgQEAKIAljb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJ0ID0gc2MtPmN1cl9yYXRlX3RhYmxlOwogCXN0cnVjdCBza19idWZmICpza2IgPSBiZi0+YmZfbXBkdTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JdTMyIG5zeW1iaXRzLCBuc3ltYm9scywgbXBkdWRlbnNpdHk7CisJdTMyIG5zeW1iaXRzLCBuc3ltYm9sczsKIAl1MTYgbWlubGVuOwogCXU4IHJjLCBmbGFncywgcml4OwogCWludCB3aWR0aCwgaGFsZl9naSwgbmRlbGltLCBtaW5kZWxpbTsKQEAgLTUyOSwxNCArNTQzLDEyIEBACiAJICogb24gaGlnaGVzdCByYXRlIGluIHJhdGUgc2VyaWVzIChpLmUuIGZpcnN0IHJhdGUpIHRvIGRldGVybWluZQogCSAqIHJlcXVpcmVkIG1pbmltdW0gbGVuZ3RoIGZvciBzdWJmcmFtZS4gVGFrZSBpbnRvIGFjY291bnQKIAkgKiB3aGV0aGVyIGhpZ2ggcmF0ZSBpcyAyMCBvciA0ME1oeiBhbmQgaGFsZiBvciBmdWxsIEdJLgotCSAqLwotCW1wZHVkZW5zaXR5ID0gdGlkLT5hbi0+bXBkdWRlbnNpdHk7Ci0KLQkvKgorCSAqCiAJICogSWYgdGhlcmUgaXMgbm8gbXBkdSBkZW5zaXR5IHJlc3RyaWN0aW9uLCBubyBmdXJ0aGVyIGNhbGN1bGF0aW9uCiAJICogaXMgbmVlZGVkLgogCSAqLwotCWlmIChtcGR1ZGVuc2l0eSA9PSAwKQorCisJaWYgKHRpZC0+YW4tPm1wZHVkZW5zaXR5ID09IDApCiAJCXJldHVybiBuZGVsaW07CiAKIAlyaXggPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeDsKQEAgLTU0Niw5ICs1NTgsOSBAQAogCWhhbGZfZ2kgPSAoZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpID8gMSA6IDA7CiAKIAlpZiAoaGFsZl9naSkKLQkJbnN5bWJvbHMgPSBOVU1fU1lNQk9MU19QRVJfVVNFQ19IQUxGR0kobXBkdWRlbnNpdHkpOworCQluc3ltYm9scyA9IE5VTV9TWU1CT0xTX1BFUl9VU0VDX0hBTEZHSSh0aWQtPmFuLT5tcGR1ZGVuc2l0eSk7CiAJZWxzZQotCQluc3ltYm9scyA9IE5VTV9TWU1CT0xTX1BFUl9VU0VDKG1wZHVkZW5zaXR5KTsKKwkJbnN5bWJvbHMgPSBOVU1fU1lNQk9MU19QRVJfVVNFQyh0aWQtPmFuLT5tcGR1ZGVuc2l0eSk7CiAKIAlpZiAobnN5bWJvbHMgPT0gMCkKIAkJbnN5bWJvbHMgPSAxOwpAQCAtNTY1LDYgKzU3Nyw3IEBACiB9CiAKIHN0YXRpYyBlbnVtIEFUSF9BR0dSX1NUQVRVUyBhdGhfdHhfZm9ybV9hZ2dyKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCQkgICAgIHN0cnVjdCBhdGhfdHhxICp0eHEsCiAJCQkJCSAgICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCiAJCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqYmZfcSkKIHsKQEAgLTYyOSw2ICs2NDIsNyBAQAogCQkJYmZfcHJldi0+YmZfZGVzYy0+ZHNfbGluayA9IGJmLT5iZl9kYWRkcjsKIAkJfQogCQliZl9wcmV2ID0gYmY7CisKIAl9IHdoaWxlICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpOwogCiAJYmZfZmlyc3QtPmJmX2FsID0gYWw7CkBAIC02NTEsNyArNjY1LDcgQEAKIAogCQlJTklUX0xJU1RfSEVBRCgmYmZfcSk7CiAKLQkJc3RhdHVzID0gYXRoX3R4X2Zvcm1fYWdncihzYywgdGlkLCAmYmZfcSk7CisJCXN0YXR1cyA9IGF0aF90eF9mb3JtX2FnZ3Ioc2MsIHR4cSwgdGlkLCAmYmZfcSk7CiAKIAkJLyoKIAkJICogbm8gZnJhbWVzIHBpY2tlZCB1cCB0byBiZSBhZ2dyZWdhdGVkOwpAQCAtNjgyLDMwICs2OTYsMjYgQEAKIAogCQl0eHEtPmF4cV9hZ2dyX2RlcHRoKys7CiAJCWF0aF90eF90eHFhZGRidWYoc2MsIHR4cSwgJmJmX3EpOworCQlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBhX2FnZ3IpOwogCiAJfSB3aGlsZSAodHhxLT5heHFfZGVwdGggPCBBVEhfQUdHUl9NSU5fUURFUFRIICYmCiAJCSBzdGF0dXMgIT0gQVRIX0FHR1JfQkFXX0NMT1NFRCk7CiB9CiAKLWludCBhdGhfdHhfYWdncl9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJICAgICAgdTE2IHRpZCwgdTE2ICpzc24pCit2b2lkIGF0aF90eF9hZ2dyX3N0YXJ0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkgICAgICAgdTE2IHRpZCwgdTE2ICpzc24pCiB7CiAJc3RydWN0IGF0aF9hdHhfdGlkICp0eHRpZDsKIAlzdHJ1Y3QgYXRoX25vZGUgKmFuOwogCiAJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKLQotCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpIHsKLQkJdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZCk7Ci0JCXR4dGlkLT5zdGF0ZSB8PSBBR0dSX0FEREJBX1BST0dSRVNTOwotCQlhdGhfdHhfcGF1c2VfdGlkKHNjLCB0eHRpZCk7Ci0JCSpzc24gPSB0eHRpZC0+c2VxX3N0YXJ0OwotCX0KLQotCXJldHVybiAwOworCXR4dGlkID0gQVRIX0FOXzJfVElEKGFuLCB0aWQpOworCXR4dGlkLT5zdGF0ZSB8PSBBR0dSX0FEREJBX1BST0dSRVNTOworCWF0aF90eF9wYXVzZV90aWQoc2MsIHR4dGlkKTsKKwkqc3NuID0gdHh0aWQtPnNlcV9zdGFydDsKIH0KIAotaW50IGF0aF90eF9hZ2dyX3N0b3Aoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpCit2b2lkIGF0aF90eF9hZ2dyX3N0b3Aoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpCiB7CiAJc3RydWN0IGF0aF9ub2RlICphbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OwogCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZCk7CkBAIC03MTUsMTIgKzcyNSwxMSBAQAogCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKIAogCWlmICh0eHRpZC0+c3RhdGUgJiBBR0dSX0NMRUFOVVApCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKIAlpZiAoISh0eHRpZC0+c3RhdGUgJiBBR0dSX0FEREJBX0NPTVBMRVRFKSkgewogCQl0eHRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfUFJPR1JFU1M7Ci0JCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAl9CiAKIAlhdGhfdHhfcGF1c2VfdGlkKHNjLCB0eHRpZCk7CkBAIC03MzksNyArNzQ4LDcgQEAKIAkJfQogCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKIAkJYXRoX3R4X3VwZGF0ZV9iYXcoc2MsIHR4dGlkLCBiZi0+YmZfc2Vxbm8pOwotCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIDAsIDApOworCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgdHhxLCAmYmZfaGVhZCwgMCwgMCk7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIApAQCAtNzQ3LDExICs3NTYsOCBAQAogCQl0eHRpZC0+c3RhdGUgfD0gQUdHUl9DTEVBTlVQOwogCX0gZWxzZSB7CiAJCXR4dGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9DT01QTEVURTsKLQkJdHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOwogCQlhdGhfdHhfZmx1c2hfdGlkKHNjLCB0eHRpZCk7CiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKIHZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQpAQCAtNzgwLDE0ICs3ODYsOCBAQAogCiAJdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZG5vKTsKIAotCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfQ09NUExFVEUpKSB7Ci0JCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfUFJPR1JFU1MpICYmCi0JCSAgICAodHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPCBBRERCQV9FWENIQU5HRV9BVFRFTVBUUykpIHsKLQkJCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzKys7CisJaWYgKCEodHh0aWQtPnN0YXRlICYgKEFHR1JfQUREQkFfQ09NUExFVEUgfCBBR0dSX0FEREJBX1BST0dSRVNTKSkpCiAJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQogCXJldHVybiBmYWxzZTsKIH0KIApAQCAtODcwLDE0ICs4NzAsMTQgQEAKIAkJc3Bpbl9sb2NrX2luaXQoJnR4cS0+YXhxX2xvY2spOwogCQl0eHEtPmF4cV9kZXB0aCA9IDA7CiAJCXR4cS0+YXhxX2FnZ3JfZGVwdGggPSAwOwotCQl0eHEtPmF4cV90b3RhbHF1ZXVlZCA9IDA7CiAJCXR4cS0+YXhxX2xpbmtidWYgPSBOVUxMOworCQl0eHEtPmF4cV90eF9pbnByb2dyZXNzID0gZmFsc2U7CiAJCXNjLT50eC50eHFzZXR1cCB8PSAxPDxxbnVtOwogCX0KIAlyZXR1cm4gJnNjLT50eC50eHFbcW51bV07CiB9CiAKLXN0YXRpYyBpbnQgYXRoX3R4X2dldF9xbnVtKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBoYWx0eXBlKQoraW50IGF0aF90eF9nZXRfcW51bShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHF0eXBlLCBpbnQgaGFsdHlwZSkKIHsKIAlpbnQgcW51bTsKIApAQCAtMTAzNSw5ICsxMDM1LDEzIEBACiAJCWlmIChiZl9pc2FtcGR1KGJmKSkKIAkJCWF0aF90eF9jb21wbGV0ZV9hZ2dyKHNjLCB0eHEsIGJmLCAmYmZfaGVhZCwgMCk7CiAJCWVsc2UKLQkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgMCwgMCk7CisJCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgdHhxLCAmYmZfaGVhZCwgMCwgMCk7CiAJfQogCisJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwl0eHEtPmF4cV90eF9pbnByb2dyZXNzID0gZmFsc2U7CisJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCiAJLyogZmx1c2ggYW55IHBlbmRpbmcgZnJhbWVzIGlmIGFnZ3JlZ2F0aW9uIGlzIGVuYWJsZWQgKi8KIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSB7CiAJCWlmICghcmV0cnlfdHgpIHsKQEAgLTExMTgsOCArMTEyMiw3IEBACiAJCWlmICh0aWQtPnBhdXNlZCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgodHhxLT5heHFfZGVwdGggJSAyKSA9PSAwKQotCQkJYXRoX3R4X3NjaGVkX2FnZ3Ioc2MsIHR4cSwgdGlkKTsKKwkJYXRoX3R4X3NjaGVkX2FnZ3Ioc2MsIHR4cSwgdGlkKTsKIAogCQkvKgogCQkgKiBhZGQgdGlkIHRvIHJvdW5kLXJvYmluIHF1ZXVlIGlmIG1vcmUgZnJhbWVzCkBAIC0xMTgzLDcgKzExODYsNiBAQAogCiAJbGlzdF9zcGxpY2VfdGFpbF9pbml0KGhlYWQsICZ0eHEtPmF4cV9xKTsKIAl0eHEtPmF4cV9kZXB0aCsrOwotCXR4cS0+YXhxX3RvdGFscXVldWVkKys7CiAJdHhxLT5heHFfbGlua2J1ZiA9IGxpc3RfZW50cnkodHhxLT5heHFfcS5wcmV2LCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX1FVRVVFLApAQCAtMTIzMSw2ICsxMjMzLDcgQEAKIAogCWJmID0gbGlzdF9maXJzdF9lbnRyeShiZl9oZWFkLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX0FNUERVOworCVRYX1NUQVRfSU5DKHR4Y3RsLT50eHEtPmF4cV9xbnVtLCBhX3F1ZXVlZCk7CiAKIAkvKgogCSAqIERvIG5vdCBxdWV1ZSB0byBoL3cgd2hlbiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6CkBAIC0xMjc3LDYgKzEyODAsNyBAQAogCWJmLT5iZl9sYXN0YmYgPSBiZjsKIAlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CiAJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCBiZl9oZWFkKTsKKwlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBxdWV1ZWQpOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfdHhfc2VuZF9ub3JtYWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCkBAIC0xMjkwLDYgKzEyOTQsNyBAQAogCWJmLT5iZl9uZnJhbWVzID0gMTsKIAlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CiAJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCBiZl9oZWFkKTsKKwlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBxdWV1ZWQpOwogfQogCiBzdGF0aWMgZW51bSBhdGg5a19wa3RfdHlwZSBnZXRfaHdfcGFja2V0X3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE2MzYsNyArMTY0MSw3IEBACiAJCQlnb3RvIHR4X2RvbmU7CiAJCX0KIAotCQlpZiAoYXRoX2FnZ3JfcXVlcnkoc2MsIGFuLCBiZi0+YmZfdGlkbm8pKSB7CisJCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKIAkJCS8qCiAJCQkgKiBUcnkgYWdncmVnYXRpb24gaWYgaXQncyBhIHVuaWNhc3QgZGF0YSBmcmFtZQogCQkJICogYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyBIVCBjYXBhYmxlLgpAQCAtMTgxNSw2ICsxODIwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2J1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJCXN0cnVjdCBhdGhfdHhxICp0eHEsCiAJCQkJc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKIAkJCQlpbnQgdHhvaywgaW50IHNlbmRiYXIpCiB7CkBAIC0xODIyLDcgKzE4MjgsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHR4X2ZsYWdzID0gMDsKIAotCiAJaWYgKHNlbmRiYXIpCiAJCXR4X2ZsYWdzID0gQVRIX1RYX0JBUjsKIApAQCAtMTgzNSw2ICsxODQwLDcgQEAKIAogCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAlhdGhfdHhfY29tcGxldGUoc2MsIHNrYiwgdHhfZmxhZ3MpOworCWF0aF9kZWJ1Z19zdGF0X3R4KHNjLCB0eHEsIGJmKTsKIAogCS8qCiAJICogUmV0dXJuIHRoZSBsaXN0IG9mIGF0aF9idWYgb2YgdGhpcyBtcGR1IHRvIGZyZWUgcXVldWUKQEAgLTE5NjIsMTkgKzE5NjgsNyBAQAogCQlpZiAoYmYtPmJmX3N0YWxlKSB7CiAJCQliZl9oZWxkID0gYmY7CiAJCQlpZiAobGlzdF9pc19sYXN0KCZiZl9oZWxkLT5saXN0LCAmdHhxLT5heHFfcSkpIHsKLQkJCQl0eHEtPmF4cV9saW5rID0gTlVMTDsKLQkJCQl0eHEtPmF4cV9saW5rYnVmID0gTlVMTDsKIAkJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJCQkvKgotCQkJCSAqIFRoZSBob2xkaW5nIGRlc2NyaXB0b3IgaXMgdGhlIGxhc3QKLQkJCQkgKiBkZXNjcmlwdG9yIGluIHF1ZXVlLiBJdCdzIHNhZmUgdG8gcmVtb3ZlCi0JCQkJICogdGhlIGxhc3QgaG9sZGluZyBkZXNjcmlwdG9yIGluIEJIIGNvbnRleHQuCi0JCQkJICovCi0JCQkJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQkJCQlsaXN0X21vdmVfdGFpbCgmYmZfaGVsZC0+bGlzdCwgJnNjLT50eC50eGJ1Zik7Ci0JCQkJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgewogCQkJCWJmID0gbGlzdF9lbnRyeShiZl9oZWxkLT5saXN0Lm5leHQsCkBAIC0yMDExLDYgKzIwMDUsNyBAQAogCQkJdHhxLT5heHFfYWdncl9kZXB0aC0tOwogCiAJCXR4b2sgPSAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgPT0gMCk7CisJCXR4cS0+YXhxX3R4X2lucHJvZ3Jlc3MgPSBmYWxzZTsKIAkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwogCiAJCWlmIChiZl9oZWxkKSB7CkBAIC0yMDMzLDcgKzIwMjgsNyBAQAogCQlpZiAoYmZfaXNhbXBkdShiZikpCiAJCQlhdGhfdHhfY29tcGxldGVfYWdncihzYywgdHhxLCBiZiwgJmJmX2hlYWQsIHR4b2spOwogCQllbHNlCi0JCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIHR4b2ssIDApOworCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsIHR4cSwgJmJmX2hlYWQsIHR4b2ssIDApOwogCiAJCWF0aF93YWtlX21hYzgwMjExX3F1ZXVlKHNjLCB0eHEpOwogCkBAIC0yMDQ0LDYgKzIwMzksNDAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZV9wb2xsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGhfc29mdGMsCisJCQl0eF9jb21wbGV0ZV93b3JrLndvcmspOworCXN0cnVjdCBhdGhfdHhxICp0eHE7CisJaW50IGk7CisJYm9vbCBuZWVkcmVzZXQgPSBmYWxzZTsKKworCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspCisJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkgeworCQkJdHhxID0gJnNjLT50eC50eHFbaV07CisJCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQkJaWYgKHR4cS0+YXhxX2RlcHRoKSB7CisJCQkJaWYgKHR4cS0+YXhxX3R4X2lucHJvZ3Jlc3MpIHsKKwkJCQkJbmVlZHJlc2V0ID0gdHJ1ZTsKKwkJCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQl0eHEtPmF4cV90eF9pbnByb2dyZXNzID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCX0KKworCWlmIChuZWVkcmVzZXQpIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwgInR4IGh1bmcsIHJlc2V0dGluZyB0aGUgY2hpcFxuIik7CisJCWF0aF9yZXNldChzYywgZmFsc2UpOworCX0KKworCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LCAmc2MtPnR4X2NvbXBsZXRlX3dvcmssCisJCQltc2Vjc190b19qaWZmaWVzKEFUSF9UWF9DT01QTEVURV9QT0xMX0lOVCkpOworfQorCisKIAogdm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKQEAgLTIwODQsNiArMjExMyw4IEBACiAJCWdvdG8gZXJyOwogCX0KIAorCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+dHhfY29tcGxldGVfd29yaywgYXRoX3R4X2NvbXBsZXRlX3BvbGxfd29yayk7CisKIGVycjoKIAlpZiAoZXJyb3IgIT0gMCkKIAkJYXRoX3R4X2NsZWFudXAoc2MpOwpAQCAtMjEyMiw3ICsyMTUzLDYgQEAKIAkJdGlkLT5hYyA9ICZhbi0+YWNbYWNub107CiAJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CiAJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfUFJPR1JFU1M7Ci0JCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7CiAJfQogCiAJZm9yIChhY25vID0gMCwgYWMgPSAmYW4tPmFjW2Fjbm9dOwpAQCAtMjE3OSw3ICsyMjA5LDYgQEAKIAkJCQkJdGlkLT5zY2hlZCA9IGZhbHNlOwogCQkJCQlhdGhfdGlkX2RyYWluKHNjLCB0eHEsIHRpZCk7CiAJCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7Ci0JCQkJCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7CiAJCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKIAkJCQl9CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL21haW4uYwppbmRleCA5OTQ5YjExLi40ODcxOTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9tYWluLmMKQEAgLTE3LDYgKzE3LDQyIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKKyNpbmNsdWRlICJhdGguaCIKKwogTU9EVUxFX0FVVEhPUigiQXRoZXJvcyBDb21tdW5pY2F0aW9ucyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTaGFyZWQgbGlicmFyeSBmb3IgQXRoZXJvcyB3aXJlbGVzcyBMQU4gY2FyZHMuIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CisKK3N0cnVjdCBza19idWZmICphdGhfcnhidWZfYWxsb2Moc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwKKwkJCQl1MzIgbGVuLAorCQkJCWdmcF90IGdmcF9tYXNrKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJdTMyIG9mZjsKKworCS8qCisJICogQ2FjaGUtbGluZS1hbGlnbi4gIFRoaXMgaXMgaW1wb3J0YW50IChmb3IgdGhlCisJICogNTIxMCBhdCBsZWFzdCkgYXMgbm90IGRvaW5nIHNvIGNhdXNlcyBib2d1cyBkYXRhCisJICogaW4gcngnZCBmcmFtZXMuCisJICovCisKKwkvKiBOb3RlOiB0aGUga2VybmVsIGNhbiBhbGxvY2F0ZSBhIHZhbHVlIGdyZWF0ZXIgdGhhbgorCSAqIHdoYXQgd2UgYXNrIGl0IHRvIGdpdmUgdXMuIFdlIHJlYWxseSBvbmx5IG5lZWQgNCBLQiBhcyB0aGF0CisJICogaXMgdGhpcyBoYXJkd2FyZSBzdXBwb3J0cyBhbmQgaW4gZmFjdCB3ZSBuZWVkIGF0IGxlYXN0IDM4NDkKKwkgKiBhcyB0aGF0IGlzIHRoZSBNQVggQU1TRFUgc2l6ZSB0aGlzIGhhcmR3YXJlIHN1cHBvcnRzLgorCSAqIFVuZm9ydHVuYXRlbHkgdGhpcyBtZWFucyB3ZSBtYXkgZ2V0IDggS0IgaGVyZSBmcm9tIHRoZQorCSAqIGtlcm5lbC4uLiBhbmQgdGhhdCBpcyBhY3R1YWxseSB3aGF0IGlzIG9ic2VydmVkIG9uIHNvbWUKKwkgKiBzeXN0ZW1zIDooICovCisJc2tiID0gX19kZXZfYWxsb2Nfc2tiKGxlbiArIGNvbW1vbi0+Y2FjaGVsc3ogLSAxLCBnZnBfbWFzayk7CisJaWYgKHNrYiAhPSBOVUxMKSB7CisJCW9mZiA9ICgodW5zaWduZWQgbG9uZykgc2tiLT5kYXRhKSAlIGNvbW1vbi0+Y2FjaGVsc3o7CisJCWlmIChvZmYgIT0gMCkKKwkJCXNrYl9yZXNlcnZlKHNrYiwgY29tbW9uLT5jYWNoZWxzeiAtIG9mZik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJza2J1ZmYgYWxsb2Mgb2Ygc2l6ZSAldSBmYWlsZWRcbiIsIGxlbik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBza2I7Cit9CitFWFBPUlRfU1lNQk9MKGF0aF9yeGJ1Zl9hbGxvYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuYwppbmRleCBiZjNkMjViLi4wNzdiY2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmMKQEAgLTU4Niw3ICs1ODYsNSBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiBOT19DVEw7CiAJfQotCi0JcmV0dXJuIE5PX0NUTDsKIH0KIEVYUE9SVF9TWU1CT0woYXRoX3JlZ2RfZ2V0X2JhbmRfY3RsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5oCmluZGV4IDA3MjkxY2MuLmMxZGQ4NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuaApAQCAtMTgsOSArMTgsMTYgQEAKICNkZWZpbmUgUkVHRF9ICiAKICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+Ci0KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KIAorI2luY2x1ZGUgImF0aC5oIgorCitlbnVtIGN0bF9ncm91cCB7CisJQ1RMX0ZDQyA9IDB4MTAsCisJQ1RMX01LSyA9IDB4NDAsCisJQ1RMX0VUU0kgPSAweDMwLAorfTsKKwogI2RlZmluZSBOT19DVEwgMHhmZgogI2RlZmluZSBTRF9OT19DVEwgICAgICAgICAgICAgICAweEUwCiAjZGVmaW5lIE5PX0NUTCAgICAgICAgICAgICAgICAgIDB4ZmYKQEAgLTQ3LDI5ICs1NCwxMiBAQAogI2RlZmluZSBDSEFOTkVMX0hBTEZfQlcgICAgICAgICAxMAogI2RlZmluZSBDSEFOTkVMX1FVQVJURVJfQlcgICAgICA1CiAKLXN0cnVjdCByZWdfZG1uX3BhaXJfbWFwcGluZyB7Ci0JdTE2IHJlZ0RtbkVudW07Ci0JdTE2IHJlZ181Z2h6X2N0bDsKLQl1MTYgcmVnXzJnaHpfY3RsOwotfTsKLQogc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkIHsKIAl1MTYgY291bnRyeUNvZGU7CiAJdTE2IHJlZ0RtbkVudW07CiAJY29uc3QgY2hhciAqaXNvTmFtZTsKIH07CiAKLXN0cnVjdCBhdGhfcmVndWxhdG9yeSB7Ci0JY2hhciBhbHBoYTJbMl07Ci0JdTE2IGNvdW50cnlfY29kZTsKLQl1MTYgbWF4X3Bvd2VyX2xldmVsOwotCXUzMiB0cF9zY2FsZTsKLQl1MTYgY3VycmVudF9yZDsKLQl1MTYgY3VycmVudF9yZF9leHQ7Ci0JaW50MTZfdCBwb3dlcl9saW1pdDsKLQlzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgKnJlZ3BhaXI7Ci19OwotCiBlbnVtIENvdW50cnlDb2RlIHsKIAlDVFJZX0FMQkFOSUEgPSA4LAogCUNUUllfQUxHRVJJQSA9IDEyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2RfY29tbW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZF9jb21tb24uaAppbmRleCA0ZDBlMjk4Li45ODQ3YWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZF9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZF9jb21tb24uaApAQCAtMTU0LDEyICsxNTQsNiBAQAogCURFQlVHX1JFR19ETU4gPSAweDAxZmYsCiB9OwogCi1lbnVtIGN0bF9ncm91cCB7Ci0JQ1RMX0ZDQyA9IDB4MTAsCi0JQ1RMX01LSyA9IDB4NDAsCi0JQ1RMX0VUU0kgPSAweDMwLAotfTsKLQogLyogUmVncGFpciB0byBDVEwgYmFuZCBtYXBwaW5nICovCiBzdGF0aWMgc3RydWN0IHJlZ19kbW5fcGFpcl9tYXBwaW5nIHJlZ0RvbWFpblBhaXJzW10gPSB7CiAJLyogcmVncGFpciwgNSBHSHogQ1RMLCAyIEdIeiBDVEwgKi8KQEAgLTQ1MCw3ICs0NDQsNyBAQAogCXtDVFJZX1NXSVRaRVJMQU5ELCBFVFNJMV9XT1JMRCwgIkNIIn0sCiAJe0NUUllfU1lSSUEsIE5VTEwxX1dPUkxELCAiU1kifSwKIAl7Q1RSWV9UQUlXQU4sIEFQTDNfRkNDQSwgIlRXIn0sCi0Je0NUUllfVEhBSUxBTkQsIE5VTEwxX1dPUkxELCAiVEgifSwKKwl7Q1RSWV9USEFJTEFORCwgRkNDM19XT1JMRCwgIlRIIn0sCiAJe0NUUllfVFJJTklEQURfWV9UT0JBR08sIEVUU0k0X1dPUkxELCAiVFQifSwKIAl7Q1RSWV9UVU5JU0lBLCBFVFNJM19XT1JMRCwgIlROIn0sCiAJe0NUUllfVFVSS0VZLCBFVFNJM19XT1JMRCwgIlRSIn0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwppbmRleCAyOTFhOTRiLi5hM2IzNmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKQEAgLTc4MSw3ICs3ODEsNyBAQAogCXByaXYtPnR4X2ZyZWVfbWVtIC09IGxlbjsKIH0KIAotc3RhdGljIGludCBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RhdGljIGNvbnN0IHU4IFNOQVBfUkZDMTAyNFs2XSA9IHsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCB9OwogCXN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTc5MywxMyArNzkzLDEzIEBACiAJICAgICEoKnByaXYtPnByZXNlbnRfY2FsbGJhY2spKHByaXYtPmNhcmQpKSB7CiAJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJaWYgKHByaXYtPnN0YXRpb25fc3RhdGUgIT0gU1RBVElPTl9TVEFURV9SRUFEWSkgewogCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCS8qIGZpcnN0IGVuc3VyZSB0aGUgdGltZXIgZnVuYyBjYW5ub3QgcnVuICovCkBAIC04NTYsNyArODU2LDcgQEAKIAlzcGluX3VubG9ja19iaCgmcHJpdi0+dGltZXJsb2NrKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBhdG1lbF90cmFuc21pdF9tYW5hZ2VtZW50X2ZyYW1lKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZwppbmRleCA2N2Y1NjRlLi44M2UzODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZwpAQCAtNDIsOCArNDIsOCBAQAogCWRlZmF1bHQgeQogCiBjb25maWcgQjQzX1BDTUNJQQotCWJvb2wgIkJyb2FkY29tIDQzeHggUENNQ0lBIGRldmljZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gQjQzICYmIFNTQl9QQ01DSUFIT1NUX1BPU1NJQkxFICYmIEVYUEVSSU1FTlRBTAorCWJvb2wgIkJyb2FkY29tIDQzeHggUENNQ0lBIGRldmljZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQjQzICYmIFNTQl9QQ01DSUFIT1NUX1BPU1NJQkxFCiAJc2VsZWN0IFNTQl9QQ01DSUFIT1NUCiAJLS0taGVscC0tLQogCSAgQnJvYWRjb20gNDN4eCBQQ01DSUEgZGV2aWNlIHN1cHBvcnQuCkBAIC04MCwxNiArODAsMTQgQEAKIAkgIFNBWSBOLgogCiBjb25maWcgQjQzX1BIWV9MUAotCWJvb2wgIklFRUUgODAyLjExZyBMUC1QSFkgc3VwcG9ydCAoQlJPS0VOKSIKLQlkZXBlbmRzIG9uIEI0MyAmJiBFWFBFUklNRU5UQUwgJiYgQlJPS0VOCisJYm9vbCAiU3VwcG9ydCBmb3IgbG93LXBvd2VyIChMUC1QSFkpIGRldmljZXMgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBCNDMgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGhlIExQLVBIWS4KLQkgIFRoZSBMUC1QSFkgaXMgYW4gSUVFRSA4MDIuMTFnIGJhc2VkIFBIWSBidWlsdCBpbnRvIHNvbWUgbm90ZWJvb2tzCi0JICBhbmQgZW1iZWRkZWQgZGV2aWNlcy4KLQotCSAgVEhJUyBJUyBCUk9LRU4gQU5EIERPRVMgTk9UIFdPUksgWUVULgotCi0JICBTQVkgTi4KKwkgIFRoZSBMUC1QSFkgaXMgYSBsb3ctcG93ZXIgUEhZIGJ1aWx0IGludG8gc29tZSBub3RlYm9va3MKKwkgIGFuZCBlbWJlZGRlZCBkZXZpY2VzLiBJdCBzdXBwb3J0cyA4MDIuMTFhL2cKKwkgICg4MDIuMTFhIHN1cHBvcnQgaXMgb3B0aW9uYWwsIGFuZCBjdXJyZW50bHkgZGlzYWJsZWQpLgogCiAjIFRoaXMgY29uZmlnIG9wdGlvbiBhdXRvbWF0aWNhbGx5IGVuYWJsZXMgYjQzIExFRFMgc3VwcG9ydCwKICMgaWYgaXQncyBwb3NzaWJsZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAppbmRleCA0MDQ0ODA2Li4wOWNmZTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCkBAIC0xNDIsNiArMTQyLDE3IEBACiAjZGVmaW5lIEI0M19CRkxfQlRDTU9ECQkJMHg0MDAwCS8qIEJGTF9CVENPRVhJU1QgaXMgZ2l2ZW4gaW4gYWx0ZXJuYXRlIEdQSU9zICovCiAjZGVmaW5lIEI0M19CRkxfQUxUSVEJCQkweDgwMDAJLyogYWx0ZXJuYXRlIEkvUSBzZXR0aW5ncyAqLwogCisvKiBTUFJPTSBib2FyZGZsYWdzX2hpIHZhbHVlcyAqLworI2RlZmluZSBCNDNfQkZIX05PUEEJCQkweDAwMDEJLyogaGFzIG5vIFBBICovCisjZGVmaW5lIEI0M19CRkhfUlNTSUlOVgkJCTB4MDAwMgkvKiBSU1NJIHVzZXMgcG9zaXRpdmUgc2xvcGUgKG5vdCBUU1NJKSAqLworI2RlZmluZSBCNDNfQkZIX1BBUkVGCQkJMHgwMDA0CS8qIHVzZXMgdGhlIFBBUmVmIExETyAqLworI2RlZmluZSBCNDNfQkZIXzNUU1dJVENICQkweDAwMDgJLyogdXNlcyBhIHRyaXBsZSB0aHJvdyBzd2l0Y2ggc2hhcmVkCisJCQkJCQkgKiB3aXRoIGJsdWV0b290aCAqLworI2RlZmluZSBCNDNfQkZIX1BIQVNFU0hJRlQJCTB4MDAxMAkvKiBjYW4gc3VwcG9ydCBwaGFzZSBzaGlmdGVyICovCisjZGVmaW5lIEI0M19CRkhfQlVDS0JPT1NUCQkweDAwMjAJLyogaGFzIGJ1Y2svYm9vc3RlciAqLworI2RlZmluZSBCNDNfQkZIX0ZFTV9CVAkJCTB4MDA0MAkvKiBoYXMgRkVNIGFuZCBzd2l0Y2ggdG8gc2hhcmUgYW50ZW5uYQorCQkJCQkJICogd2l0aCBibHVldG9vdGggKi8KKwogLyogR1BJTyByZWdpc3RlciBvZmZzZXQsIGluIGJvdGggQ2hpcENvbW1vbiBhbmQgUENJIGNvcmUuICovCiAjZGVmaW5lIEI0M19HUElPX0NPTlRST0wJCTB4NmMKIApAQCAtNDgyLDYgKzQ5MywxMCBAQAogCiAvKiBNYXggc2l6ZSBvZiBhIHNlY3VyaXR5IGtleSAqLwogI2RlZmluZSBCNDNfU0VDX0tFWVNJWkUJCQkxNgorLyogTWF4IG51bWJlciBvZiBncm91cCBrZXlzICovCisjZGVmaW5lIEI0M19OUl9HUk9VUF9LRVlTCQk0CisvKiBNYXggbnVtYmVyIG9mIHBhaXJ3aXNlIGtleXMgKi8KKyNkZWZpbmUgQjQzX05SX1BBSVJXSVNFX0tFWVMJCTUwCiAvKiBTZWN1cml0eSBhbGdvcml0aG1zLiAqLwogZW51bSB7CiAJQjQzX1NFQ19BTEdPX05PTkUgPSAwLAkvKiB1bmVuY3J5cHRlZCwgYXMgb2YgVFggaGVhZGVyLiAqLwpAQCAtNjAxLDYgKzYxNiwxMiBAQAogCS8qIFBvaW50ZXIgdG8gdGhlIGllZWU4MDIxMSBoYXJkd2FyZSBkYXRhIHN0cnVjdHVyZSAqLwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCisJLyogR2xvYmFsIGRyaXZlciBtdXRleC4gRXZlcnkgb3BlcmF0aW9uIG11c3QgcnVuIHdpdGggdGhpcyBtdXRleCBsb2NrZWQuICovCisJc3RydWN0IG11dGV4IG11dGV4OworCS8qIEhhcmQtSVJRIHNwaW5sb2NrLiBUaGlzIGxvY2sgcHJvdGVjdHMgdGhpbmdzIHVzZWQgaW4gdGhlIGhhcmQtSVJRCisJICogaGFuZGxlciwgb25seS4gVGhpcyBiYXNpY2FsbHkgaXMganVzdCB0aGUgSVJRIG1hc2sgcmVnaXN0ZXIuICovCisJc3BpbmxvY2tfdCBoYXJkaXJxX2xvY2s7CisKIAkvKiBUaGUgbnVtYmVyIG9mIHF1ZXVlcyB0aGF0IHdlcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0KIAkgKiBpbml0aWFsbHkuIFRoaXMgaXMgYSBiYWNrdXAgY29weSBvZiBody0+cXVldWVzIGluIGNhc2UgaHctPnF1ZXVlcyBoYXMKIAkgKiB0byBiZSBkeW5hbWljYWxseSBsb3dlcmVkIGF0IHJ1bnRpbWUgKEZpcm13YXJlIGRvZXMgbm90IHN1cHBvcnQgUW9TKS4KQEAgLTYwOCwxNiArNjI5LDEyIEBACiAJICogZnJvbSB0aGUgbWFjODAyMTEgc3Vic3lzdGVtLiAqLwogCXUxNiBtYWM4MDIxMV9pbml0aWFsbHlfcmVnaXN0ZXJlZF9xdWV1ZXM7CiAKLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0Jc3BpbmxvY2tfdCBpcnFfbG9jazsKIAkvKiBSL1cgbG9jayBmb3IgZGF0YSB0cmFuc21pc3Npb24uCiAJICogVHJhbnNtaXNzaW9ucyBvbiAyKyBxdWV1ZXMgY2FuIHJ1biBjb25jdXJyZW50bHksIGJ1dCBzb21lYm9keSBlbHNlCiAJICogbWlnaHQgc3luYyB3aXRoIFRYIGJ5IHdyaXRlX2xvY2tfaXJxc2F2ZSgpJ2luZy4gKi8KIAlyd2xvY2tfdCB0eF9sb2NrOwogCS8qIExvY2sgZm9yIExFRHMgYWNjZXNzLiAqLwogCXNwaW5sb2NrX3QgbGVkc19sb2NrOwotCS8qIExvY2sgZm9yIFNITSBhY2Nlc3MuICovCi0Jc3BpbmxvY2tfdCBzaG1fbG9jazsKIAogCS8qIFdlIGNhbiBvbmx5IGhhdmUgb25lIG9wZXJhdGluZyBpbnRlcmZhY2UgKDgwMi4xMSBjb3JlKQogCSAqIGF0IGEgdGltZS4gR2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGludGVyZmFjZSBmb2xsb3dzLgpAQCAtNjI4LDcgKzY0NSw3IEBACiAJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwogCS8qIEN1cnJlbnQgQlNTSUQgKi8KIAl1OCBic3NpZFtFVEhfQUxFTl07Ci0JLyogSW50ZXJmYWNlIHR5cGUuIChJRUVFODAyMTFfSUZfVFlQRV9YWFgpICovCisJLyogSW50ZXJmYWNlIHR5cGUuIChOTDgwMjExX0lGVFlQRV9YWFgpICovCiAJaW50IGlmX3R5cGU7CiAJLyogSXMgdGhlIGNhcmQgb3BlcmF0aW5nIGluIEFQLCBTVEEgb3IgSUJTUyBtb2RlPyAqLwogCWJvb2wgb3BlcmF0aW5nOwpAQCAtNjUwLDggKzY2Nyw3IEBACiAJYm9vbCByYWRpb3RhcF9lbmFibGVkOwogCWJvb2wgcmFkaW9fZW5hYmxlZDsKIAotCS8qIFRoZSBiZWFjb24gd2UgYXJlIGN1cnJlbnRseSB1c2luZyAoQVAgb3IgSUJTUyBtb2RlKS4KLQkgKiBUaGlzIGJlYWNvbiBzdHVmZiBpcyBwcm90ZWN0ZWQgYnkgdGhlIGlycV9sb2NrLiAqLworCS8qIFRoZSBiZWFjb24gd2UgYXJlIGN1cnJlbnRseSB1c2luZyAoQVAgb3IgSUJTUyBtb2RlKS4gKi8KIAlzdHJ1Y3Qgc2tfYnVmZiAqY3VycmVudF9iZWFjb247CiAJYm9vbCBiZWFjb24wX3VwbG9hZGVkOwogCWJvb2wgYmVhY29uMV91cGxvYWRlZDsKQEAgLTY2NSw2ICs2ODEsMTEgQEAKIAkgKiBUaGlzIGlzIHNjaGVkdWxlZCB3aGVuIHdlIGRldGVybWluZSB0aGF0IHRoZSBhY3R1YWwgVFggb3V0cHV0CiAJICogcG93ZXIgZG9lc24ndCBtYXRjaCB3aGF0IHdlIHdhbnQuICovCiAJc3RydWN0IHdvcmtfc3RydWN0IHR4cG93ZXJfYWRqdXN0X3dvcms7CisKKwkvKiBQYWNrZXQgdHJhbnNtaXQgd29yayAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF93b3JrOworCS8qIFF1ZXVlIG9mIHBhY2tldHMgdG8gYmUgdHJhbnNtaXR0ZWQuICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZTsKIH07CiAKIC8qIFRoZSB0eXBlIG9mIHRoZSBmaXJtd2FyZSBmaWxlLiAqLwpAQCAtNzM5LDE0ICs3NjAsNiBAQAogCQlzbXBfd21iKCk7CQkJCQlcCiAJCQkJCX0gd2hpbGUgKDApCiAKLS8qIFhYWC0tLSAgIEhPVyBMT0NLSU5HIFdPUktTIElOIEI0MyAgIC0tLVhYWAotICoKLSAqIFlvdSBzaG91bGQgYWx3YXlzIGFjcXVpcmUgYm90aCwgd2wtPm11dGV4IGFuZCB3bC0+aXJxX2xvY2sgdW5sZXNzOgotICogLSBZb3UgZG9uJ3QgbmVlZCB0byBhY3F1aXJlIHdsLT5pcnFfbG9jaywgaWYgdGhlIGludGVyZmFjZSBpcyBzdG9wcGVkLgotICogLSBZb3UgZG9uJ3QgbmVlZCB0byBhY3F1aXJlIHdsLT5tdXRleCBpbiB0aGUgSVJRIGhhbmRsZXIsIElSUSB0YXNrbGV0Ci0gKiAgIGFuZCBwYWNrZXQgVFggcGF0aCAoYW5kIF9PTkxZXyB0aGVyZS4pCi0gKi8KLQogLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIG9uZSB3aXJlbGVzcyBkZXZpY2UgKDgwMi4xMSBjb3JlKSAqLwogc3RydWN0IGI0M193bGRldiB7CiAJc3RydWN0IHNzYl9kZXZpY2UgKmRldjsKQEAgLTc5MiwxNCArODA1LDEyIEBACiAJdTMyIGRtYV9yZWFzb25bNl07CiAJLyogVGhlIGN1cnJlbnRseSBhY3RpdmUgZ2VuZXJpYy1pbnRlcnJ1cHQgbWFzay4gKi8KIAl1MzIgaXJxX21hc2s7CisKIAkvKiBMaW5rIFF1YWxpdHkgY2FsY3VsYXRpb24gY29udGV4dC4gKi8KIAlzdHJ1Y3QgYjQzX25vaXNlX2NhbGN1bGF0aW9uIG5vaXNlY2FsYzsKIAkvKiBpZiA+IDAgTUFDIGlzIHN1c3BlbmRlZC4gaWYgPT0gMCBNQUMgaXMgZW5hYmxlZC4gKi8KIAlpbnQgbWFjX3N1c3BlbmRlZDsKIAotCS8qIEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUgdGFza2xldCAoYm90dG9tLWhhbGYpICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGlzcl90YXNrbGV0OwotCiAJLyogUGVyaW9kaWMgdGFza3MgKi8KIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHBlcmlvZGljX3dvcms7CiAJdW5zaWduZWQgaW50IHBlcmlvZGljX3N0YXRlOwpAQCAtODA4LDggKzgxOSw3IEBACiAKIAkvKiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gKi8KIAl1MTYga3RwOwkJLyogS2V5IHRhYmxlIHBvaW50ZXIgKi8KLQl1OCBtYXhfbnJfa2V5czsKLQlzdHJ1Y3QgYjQzX2tleSBrZXlbNThdOworCXN0cnVjdCBiNDNfa2V5IGtleVtCNDNfTlJfR1JPVVBfS0VZUyAqIDIgKyBCNDNfTlJfUEFJUldJU0VfS0VZU107CiAKIAkvKiBGaXJtd2FyZSBkYXRhICovCiAJc3RydWN0IGI0M19maXJtd2FyZSBmdzsKQEAgLTgzNCw3ICs4NDQsNyBAQAogCXJldHVybiBzc2JfZ2V0X2RydmRhdGEoc3NiX2Rldik7CiB9CiAKLS8qIElzIHRoZSBkZXZpY2Ugb3BlcmF0aW5nIGluIGEgc3BlY2lmaWVkIG1vZGUgKElFRUU4MDIxMV9JRl9UWVBFX1hYWCkuICovCisvKiBJcyB0aGUgZGV2aWNlIG9wZXJhdGluZyBpbiBhIHNwZWNpZmllZCBtb2RlIChOTDgwMjExX0lGVFlQRV9YWFgpLiAqLwogc3RhdGljIGlubGluZSBpbnQgYjQzX2lzX21vZGUoc3RydWN0IGI0M193bCAqd2wsIGludCB0eXBlKQogewogCXJldHVybiAod2wtPm9wZXJhdGluZyAmJiB3bC0+aWZfdHlwZSA9PSB0eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5jCmluZGV4IDQ1ZTNkNmEuLjhmNjQ5NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYwpAQCAtNDYsOCArNDYsNiBAQAogCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wczsKIAkvKiBPZmZzZXQgb2Ygc3RydWN0IGI0M19kZnNfZmlsZSBpbiBzdHJ1Y3QgYjQzX2Rmc2VudHJ5ICovCiAJc2l6ZV90IGZpbGVfc3RydWN0X29mZnNldDsKLQkvKiBUYWtlIHdsLT5pcnFfbG9jayBiZWZvcmUgY2FsbGluZyByZWFkL3dyaXRlPyAqLwotCWJvb2wgdGFrZV9pcnFsb2NrOwogfTsKIAogc3RhdGljIGlubGluZQpAQCAtMTI3LDcgKzEyNSw2IEBACiAJdW5zaWduZWQgaW50IHJvdXRpbmcsIGFkZHIsIG1hc2ssIHNldDsKIAl1MTYgdmFsOwogCWludCByZXM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJlcyA9IHNzY2FuZihidWYsICIweCVYIDB4JVggMHglWCAweCVYIiwKIAkJICAgICAmcm91dGluZywgJmFkZHIsICZtYXNrLCAmc2V0KTsKQEAgLTE0NCwxNSArMTQxLDEzIEBACiAJaWYgKChtYXNrID4gMHhGRkZGKSB8fCAoc2V0ID4gMHhGRkZGKSkKIAkJcmV0dXJuIC1FMkJJRzsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPndsLT5zaG1fbG9jaywgZmxhZ3MpOwogCWlmIChtYXNrID09IDApCiAJCXZhbCA9IDA7CiAJZWxzZQotCQl2YWwgPSBfX2I0M19zaG1fcmVhZDE2KGRldiwgcm91dGluZywgYWRkcik7CisJCXZhbCA9IGI0M19zaG1fcmVhZDE2KGRldiwgcm91dGluZywgYWRkcik7CiAJdmFsICY9IG1hc2s7CiAJdmFsIHw9IHNldDsKLQlfX2I0M19zaG1fd3JpdGUxNihkZXYsIHJvdXRpbmcsIGFkZHIsIHZhbCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT53bC0+c2htX2xvY2ssIGZsYWdzKTsKKwliNDNfc2htX3dyaXRlMTYoZGV2LCByb3V0aW5nLCBhZGRyLCB2YWwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMDYsNyArMjAxLDYgQEAKIAl1bnNpZ25lZCBpbnQgcm91dGluZywgYWRkciwgbWFzaywgc2V0OwogCXUzMiB2YWw7CiAJaW50IHJlczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmVzID0gc3NjYW5mKGJ1ZiwgIjB4JVggMHglWCAweCVYIDB4JVgiLAogCQkgICAgICZyb3V0aW5nLCAmYWRkciwgJm1hc2ssICZzZXQpOwpAQCAtMjIzLDE1ICsyMTcsMTMgQEAKIAlpZiAoKG1hc2sgPiAweEZGRkZGRkZGKSB8fCAoc2V0ID4gMHhGRkZGRkZGRikpCiAJCXJldHVybiAtRTJCSUc7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT53bC0+c2htX2xvY2ssIGZsYWdzKTsKIAlpZiAobWFzayA9PSAwKQogCQl2YWwgPSAwOwogCWVsc2UKLQkJdmFsID0gX19iNDNfc2htX3JlYWQzMihkZXYsIHJvdXRpbmcsIGFkZHIpOworCQl2YWwgPSBiNDNfc2htX3JlYWQzMihkZXYsIHJvdXRpbmcsIGFkZHIpOwogCXZhbCAmPSBtYXNrOwogCXZhbCB8PSBzZXQ7Ci0JX19iNDNfc2htX3dyaXRlMzIoZGV2LCByb3V0aW5nLCBhZGRyLCB2YWwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+d2wtPnNobV9sb2NrLCBmbGFncyk7CisJYjQzX3NobV93cml0ZTMyKGRldiwgcm91dGluZywgYWRkciwgdmFsKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzcyLDE0ICszNjQsMTIgQEAKIHsKIAlzdHJ1Y3QgYjQzX3R4c3RhdHVzX2xvZyAqbG9nID0gJmRldi0+ZGZzZW50cnktPnR4c3RhdGxvZzsKIAlzc2l6ZV90IGNvdW50ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCBpZHg7CiAJc3RydWN0IGI0M190eHN0YXR1cyAqc3RhdDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZsb2ctPmxvY2ssIGZsYWdzKTsKIAlpZiAobG9nLT5lbmQgPCAwKSB7CiAJCWZhcHBlbmQoIk5vdGhpbmcgdHJhbnNtaXR0ZWQsIHlldFxuIik7Ci0JCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXQ7CiAJfQogCWZhcHBlbmQoImI0MyBUWCBzdGF0dXMgcmVwb3J0czpcblxuIgogCQkiaW5kZXggfCBjb29raWUgfCBzZXEgfCBwaHlfc3RhdCB8IGZyYW1lX2NvdW50IHwgIgpAQCAtNDA5LDEzICszOTksMTEgQEAKIAkJCWJyZWFrOwogCQlpKys7CiAJfQotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2ctPmxvY2ssIGZsYWdzKTsKK291dDoKIAogCXJldHVybiBjb3VudDsKIH0KIAotLyogd2wtPmlycV9sb2NrIGlzIGxvY2tlZCAqLwogc3RhdGljIGludCByZXN0YXJ0X3dyaXRlX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CkBAIC01NTYsMTIgKzU0NCw3IEBACiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAkJbWVtc2V0KGJ1ZiwgMCwgYnVmc2l6ZSk7Ci0JCWlmIChkZm9wcy0+dGFrZV9pcnFsb2NrKSB7Ci0JCQlzcGluX2xvY2tfaXJxKCZkZXYtPndsLT5pcnFfbG9jayk7Ci0JCQlyZXQgPSBkZm9wcy0+cmVhZChkZXYsIGJ1ZiwgYnVmc2l6ZSk7Ci0JCQlzcGluX3VubG9ja19pcnEoJmRldi0+d2wtPmlycV9sb2NrKTsKLQkJfSBlbHNlCi0JCQlyZXQgPSBkZm9wcy0+cmVhZChkZXYsIGJ1ZiwgYnVmc2l6ZSk7CisJCXJldCA9IGRmb3BzLT5yZWFkKGRldiwgYnVmLCBidWZzaXplKTsKIAkJaWYgKHJldCA8PSAwKSB7CiAJCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWJ1ZiwgYnVmb3JkZXIpOwogCQkJZXJyID0gcmV0OwpAQCAtNjIzLDEyICs2MDYsNyBAQAogCQllcnIgPSAtRUZBVUxUOwogCQlnb3RvIG91dF9mcmVlcGFnZTsKIAl9Ci0JaWYgKGRmb3BzLT50YWtlX2lycWxvY2spIHsKLQkJc3Bpbl9sb2NrX2lycSgmZGV2LT53bC0+aXJxX2xvY2spOwotCQllcnIgPSBkZm9wcy0+d3JpdGUoZGV2LCBidWYsIGNvdW50KTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPndsLT5pcnFfbG9jayk7Ci0JfSBlbHNlCi0JCWVyciA9IGRmb3BzLT53cml0ZShkZXYsIGJ1ZiwgY291bnQpOworCWVyciA9IGRmb3BzLT53cml0ZShkZXYsIGJ1ZiwgY291bnQpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWVwYWdlOwogCkBAIC02NDEsNyArNjE5LDcgQEAKIH0KIAogCi0jZGVmaW5lIEI0M19ERUJVR0ZTX0ZPUFMobmFtZSwgX3JlYWQsIF93cml0ZSwgX3Rha2VfaXJxbG9jaykJXAorI2RlZmluZSBCNDNfREVCVUdGU19GT1BTKG5hbWUsIF9yZWFkLCBfd3JpdGUpCQkJXAogCXN0YXRpYyBzdHJ1Y3QgYjQzX2RlYnVnZnNfZm9wcyBmb3BzXyMjbmFtZSA9IHsJCVwKIAkJLnJlYWQJPSBfcmVhZCwJCQkJXAogCQkud3JpdGUJPSBfd3JpdGUsCQkJCVwKQEAgLTY1MiwyMCArNjMwLDE5IEBACiAJCX0sCQkJCQkJXAogCQkuZmlsZV9zdHJ1Y3Rfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGI0M19kZnNlbnRyeSwgXAogCQkJCQkgICAgICAgZmlsZV8jI25hbWUpLAlcCi0JCS50YWtlX2lycWxvY2sJPSBfdGFrZV9pcnFsb2NrLAkJXAogCX0KIAotQjQzX0RFQlVHRlNfRk9QUyhzaG0xNnJlYWQsIHNobTE2cmVhZF9fcmVhZF9maWxlLCBzaG0xNnJlYWRfX3dyaXRlX2ZpbGUsIDEpOwotQjQzX0RFQlVHRlNfRk9QUyhzaG0xNndyaXRlLCBOVUxMLCBzaG0xNndyaXRlX193cml0ZV9maWxlLCAxKTsKLUI0M19ERUJVR0ZTX0ZPUFMoc2htMzJyZWFkLCBzaG0zMnJlYWRfX3JlYWRfZmlsZSwgc2htMzJyZWFkX193cml0ZV9maWxlLCAxKTsKLUI0M19ERUJVR0ZTX0ZPUFMoc2htMzJ3cml0ZSwgTlVMTCwgc2htMzJ3cml0ZV9fd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKG1taW8xNnJlYWQsIG1taW8xNnJlYWRfX3JlYWRfZmlsZSwgbW1pbzE2cmVhZF9fd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKG1taW8xNndyaXRlLCBOVUxMLCBtbWlvMTZ3cml0ZV9fd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKG1taW8zMnJlYWQsIG1taW8zMnJlYWRfX3JlYWRfZmlsZSwgbW1pbzMycmVhZF9fd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKG1taW8zMndyaXRlLCBOVUxMLCBtbWlvMzJ3cml0ZV9fd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKHR4c3RhdCwgdHhzdGF0X3JlYWRfZmlsZSwgTlVMTCwgMCk7Ci1CNDNfREVCVUdGU19GT1BTKHJlc3RhcnQsIE5VTEwsIHJlc3RhcnRfd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKGxvY3RscywgbG9jdGxzX3JlYWRfZmlsZSwgTlVMTCwgMCk7CitCNDNfREVCVUdGU19GT1BTKHNobTE2cmVhZCwgc2htMTZyZWFkX19yZWFkX2ZpbGUsIHNobTE2cmVhZF9fd3JpdGVfZmlsZSk7CitCNDNfREVCVUdGU19GT1BTKHNobTE2d3JpdGUsIE5VTEwsIHNobTE2d3JpdGVfX3dyaXRlX2ZpbGUpOworQjQzX0RFQlVHRlNfRk9QUyhzaG0zMnJlYWQsIHNobTMycmVhZF9fcmVhZF9maWxlLCBzaG0zMnJlYWRfX3dyaXRlX2ZpbGUpOworQjQzX0RFQlVHRlNfRk9QUyhzaG0zMndyaXRlLCBOVUxMLCBzaG0zMndyaXRlX193cml0ZV9maWxlKTsKK0I0M19ERUJVR0ZTX0ZPUFMobW1pbzE2cmVhZCwgbW1pbzE2cmVhZF9fcmVhZF9maWxlLCBtbWlvMTZyZWFkX193cml0ZV9maWxlKTsKK0I0M19ERUJVR0ZTX0ZPUFMobW1pbzE2d3JpdGUsIE5VTEwsIG1taW8xNndyaXRlX193cml0ZV9maWxlKTsKK0I0M19ERUJVR0ZTX0ZPUFMobW1pbzMycmVhZCwgbW1pbzMycmVhZF9fcmVhZF9maWxlLCBtbWlvMzJyZWFkX193cml0ZV9maWxlKTsKK0I0M19ERUJVR0ZTX0ZPUFMobW1pbzMyd3JpdGUsIE5VTEwsIG1taW8zMndyaXRlX193cml0ZV9maWxlKTsKK0I0M19ERUJVR0ZTX0ZPUFModHhzdGF0LCB0eHN0YXRfcmVhZF9maWxlLCBOVUxMKTsKK0I0M19ERUJVR0ZTX0ZPUFMocmVzdGFydCwgTlVMTCwgcmVzdGFydF93cml0ZV9maWxlKTsKK0I0M19ERUJVR0ZTX0ZPUFMobG9jdGxzLCBsb2N0bHNfcmVhZF9maWxlLCBOVUxMKTsKIAogCiBib29sIGI0M19kZWJ1ZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGVudW0gYjQzX2R5bmRiZyBmZWF0dXJlKQpAQCAtNzM4LDcgKzcxNSw2IEBACiAJCXJldHVybjsKIAl9CiAJbG9nLT5lbmQgPSAtMTsKLQlzcGluX2xvY2tfaW5pdCgmbG9nLT5sb2NrKTsKIAogCWRldi0+ZGZzZW50cnkgPSBlOwogCkBAIC04MjIsNyArNzk4LDYgQEAKIAlrZnJlZShlKTsKIH0KIAotLyogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZC4gKi8KIHZvaWQgYjQzX2RlYnVnZnNfbG9nX3R4c3RhdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgICAgY29uc3Qgc3RydWN0IGI0M190eHN0YXR1cyAqc3RhdHVzKQogewpAQCAtODM0LDE0ICs4MDksMTIgQEAKIAlpZiAoIWUpCiAJCXJldHVybjsKIAlsb2cgPSAmZS0+dHhzdGF0bG9nOwotCXNwaW5fbG9jaygmbG9nLT5sb2NrKTsgLyogSVJRcyBhcmUgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAlpID0gbG9nLT5lbmQgKyAxOwogCWlmIChpID09IEI0M19OUl9MT0dHRURfVFhTVEFUVVMpCiAJCWkgPSAwOwogCWxvZy0+ZW5kID0gaTsKIAljdXIgPSAmKGxvZy0+bG9nW2ldKTsKIAltZW1jcHkoY3VyLCBzdGF0dXMsIHNpemVvZigqY3VyKSk7Ci0Jc3Bpbl91bmxvY2soJmxvZy0+bG9jayk7CiB9CiAKIHZvaWQgYjQzX2RlYnVnZnNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmgKaW5kZXggYjlkNGRlNC4uZTQ3YjRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5oCkBAIC0yMyw5ICsyMywxMCBAQAogI2RlZmluZSBCNDNfTlJfTE9HR0VEX1RYU1RBVFVTCTEwMAogCiBzdHJ1Y3QgYjQzX3R4c3RhdHVzX2xvZyB7CisJLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcHJvdGVjdGVkIGJ5IHdsLT5tdXRleCAqLworCiAJc3RydWN0IGI0M190eHN0YXR1cyAqbG9nOwogCWludCBlbmQ7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogc3RydWN0IGI0M19kZnNfZmlsZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKaW5kZXggNzk2NGNjMy4uYTQ2N2VlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwpAQCAtODU2LDcgKzg1Niw2IEBACiAJCX0gZWxzZQogCQkJQjQzX1dBUk5fT04oMSk7CiAJfQotCXNwaW5fbG9ja19pbml0KCZyaW5nLT5sb2NrKTsKICNpZmRlZiBDT05GSUdfQjQzX0RFQlVHCiAJcmluZy0+bGFzdF9pbmplY3RlZF9vdmVyZmxvdyA9IGppZmZpZXM7CiAjZW5kaWYKQEAgLTExODgsNyArMTE4Nyw3IEBACiAJaGVhZGVyID0gJihyaW5nLT50eGhkcl9jYWNoZVsoc2xvdCAvIFRYX1NMT1RTX1BFUl9GUkFNRSkgKiBoZHJzaXplXSk7CiAJY29va2llID0gZ2VuZXJhdGVfY29va2llKHJpbmcsIHNsb3QpOwogCWVyciA9IGI0M19nZW5lcmF0ZV90eGhkcihyaW5nLT5kZXYsIGhlYWRlciwKLQkJCQkgc2tiLT5kYXRhLCBza2ItPmxlbiwgaW5mbywgY29va2llKTsKKwkJCQkgc2tiLCBpbmZvLCBjb29raWUpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCXJpbmctPmN1cnJlbnRfc2xvdCA9IG9sZF90b3Bfc2xvdDsKIAkJcmluZy0+dXNlZF9zbG90cyA9IG9sZF91c2VkX3Nsb3RzOwpAQCAtMTMxNSw3ICsxMzE0LDYgQEAKIAlzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmc7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKQEAgLTEzMzEsMTggKzEzMjksMjUgQEAKIAkJCWRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7Ci0KIAlCNDNfV0FSTl9PTighcmluZy0+dHgpOwotCS8qIENoZWNrIGlmIHRoZSBxdWV1ZSB3YXMgc3RvcHBlZCBpbiBtYWM4MDIxMSwKLQkgKiBidXQgd2UgZ290IGNhbGxlZCBuZXZlcnRoZWxlc3MuCi0JICogVGhhdCB3b3VsZCBiZSBhIG1hYzgwMjExIGJ1Zy4gKi8KLQlCNDNfV0FSTl9PTihyaW5nLT5zdG9wcGVkKTsKIAotCWlmICh1bmxpa2VseShmcmVlX3Nsb3RzKHJpbmcpIDwgVFhfU0xPVFNfUEVSX0ZSQU1FKSkgewotCQliNDN3YXJuKGRldi0+d2wsICJETUEgcXVldWUgb3ZlcmZsb3dcbiIpOworCWlmICh1bmxpa2VseShyaW5nLT5zdG9wcGVkKSkgeworCQkvKiBXZSBnZXQgaGVyZSBvbmx5IGJlY2F1c2Ugb2YgYSBidWcgaW4gbWFjODAyMTEuCisJCSAqIEJlY2F1c2Ugb2YgYSByYWNlLCBvbmUgcGFja2V0IG1heSBiZSBxdWV1ZWQgYWZ0ZXIKKwkJICogdGhlIHF1ZXVlIGlzIHN0b3BwZWQsIHRodXMgd2UgZ290IGNhbGxlZCB3aGVuIHdlIHNob3VsZG4ndC4KKwkJICogRm9yIG5vdywganVzdCByZWZ1c2UgdGhlIHRyYW5zbWl0LiAqLworCQlpZiAoYjQzX2RlYnVnKGRldiwgQjQzX0RCR19ETUFWRVJCT1NFKSkKKwkJCWI0M2VycihkZXYtPndsLCAiUGFja2V0IGFmdGVyIHF1ZXVlIHN0b3BwZWRcbiIpOwogCQllcnIgPSAtRU5PU1BDOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh1bmxpa2VseShXQVJOX09OKGZyZWVfc2xvdHMocmluZykgPCBUWF9TTE9UU19QRVJfRlJBTUUpKSkgeworCQkvKiBJZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZSBhIHJlYWwgZXJyb3Igd2l0aCB0aGUgcXVldWUKKwkJICogZnVsbCwgYnV0IHF1ZXVlcyBub3Qgc3RvcHBlZC4gKi8KKwkJYjQzZXJyKGRldi0+d2wsICJETUEgcXVldWUgb3ZlcmZsb3dcbiIpOworCQllcnIgPSAtRU5PU1BDOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBBc3NpZ24gdGhlIHF1ZXVlIG51bWJlciB0byB0aGUgcmluZyAoaWYgbm90IGFscmVhZHkgZG9uZSBiZWZvcmUpCkBAIC0xMzU2LDExICsxMzYxLDExIEBACiAJCSAqIGFueW1vcmUgYW5kIG11c3Qgbm90IHRyYW5zbWl0IGl0IHVuZW5jcnlwdGVkLiAqLwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQllcnIgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQliNDNlcnIoZGV2LT53bCwgIkRNQSB0eCBtYXBwaW5nIGZhaWx1cmVcbiIpOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0OwogCX0KIAlyaW5nLT5ucl90eF9wYWNrZXRzKys7CiAJaWYgKChmcmVlX3Nsb3RzKHJpbmcpIDwgVFhfU0xPVFNfUEVSX0ZSQU1FKSB8fApAQCAtMTM3MiwxMyArMTM3NywxMSBAQAogCQkJYjQzZGJnKGRldi0+d2wsICJTdG9wcGVkIFRYIHJpbmcgJWRcbiIsIHJpbmctPmluZGV4KTsKIAkJfQogCX0KLW91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmluZy0+bG9jaywgZmxhZ3MpOworb3V0OgogCiAJcmV0dXJuIGVycjsKIH0KIAotLyogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZC4gKi8KIHZvaWQgYjQzX2RtYV9oYW5kbGVfdHhzdGF0dXMoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJICAgICBjb25zdCBzdHJ1Y3QgYjQzX3R4c3RhdHVzICpzdGF0dXMpCiB7CkBAIC0xMzkzLDggKzEzOTYsNiBAQAogCWlmICh1bmxpa2VseSghcmluZykpCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmcmluZy0+bG9jayk7IC8qIElSUXMgYXJlIGFscmVhZHkgZGlzYWJsZWQuICovCi0KIAlCNDNfV0FSTl9PTighcmluZy0+dHgpOwogCW9wcyA9IHJpbmctPm9wczsKIAl3aGlsZSAoMSkgewpAQCAtMTQ1Myw4ICsxNDU0LDYgQEAKIAkJCWI0M2RiZyhkZXYtPndsLCAiV29rZSB1cCBUWCByaW5nICVkXG4iLCByaW5nLT5pbmRleCk7CiAJCX0KIAl9Ci0KLQlzcGluX3VubG9jaygmcmluZy0+bG9jayk7CiB9CiAKIHZvaWQgYjQzX2RtYV9nZXRfdHhfc3RhdHMoc3RydWN0IGI0M193bGRldiAqZGV2LApAQCAtMTQ2MiwxNyArMTQ2MSwxNCBAQAogewogCWNvbnN0IGludCBucl9xdWV1ZXMgPSBkZXYtPndsLT5ody0+cXVldWVzOwogCXN0cnVjdCBiNDNfZG1hcmluZyAqcmluZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX3F1ZXVlczsgaSsrKSB7CiAJCXJpbmcgPSBzZWxlY3RfcmluZ19ieV9wcmlvcml0eShkZXYsIGkpOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CiAJCXN0YXRzW2ldLmxlbiA9IHJpbmctPnVzZWRfc2xvdHMgLyBUWF9TTE9UU19QRVJfRlJBTUU7CiAJCXN0YXRzW2ldLmxpbWl0ID0gcmluZy0+bnJfc2xvdHMgLyBUWF9TTE9UU19QRVJfRlJBTUU7CiAJCXN0YXRzW2ldLmNvdW50ID0gcmluZy0+bnJfdHhfcGFja2V0czsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmluZy0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtMTU4MywyMiArMTU3OSwxNCBAQAogCiBzdGF0aWMgdm9pZCBiNDNfZG1hX3R4X3N1c3BlbmRfcmluZyhzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CiAJQjQzX1dBUk5fT04oIXJpbmctPnR4KTsKIAlyaW5nLT5vcHMtPnR4X3N1c3BlbmQocmluZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmluZy0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBiNDNfZG1hX3R4X3Jlc3VtZV9yaW5nKHN0cnVjdCBiNDNfZG1hcmluZyAqcmluZykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKIAlCNDNfV0FSTl9PTighcmluZy0+dHgpOwogCXJpbmctPm9wcy0+dHhfcmVzdW1lKHJpbmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBiNDNfZG1hX3R4X3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCmluZGV4IDA1ZGRlNjQuLmYwYjA4MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIEI0M19ETUFfSF8KIAogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpbmNsdWRlICJiNDMuaCIKIApAQCAtMjQ0LDggKzI0Myw2IEBACiAJLyogVGhlIFFPUyBwcmlvcml0eSBhc3NpZ25lZCB0byB0aGlzIHJpbmcuIE9ubHkgdXNlZCBmb3IgVFggcmluZ3MuCiAJICogVGhpcyBpcyB0aGUgbWFjODAyMTEgInF1ZXVlIiB2YWx1ZS4gKi8KIAl1OCBxdWV1ZV9wcmlvOwotCS8qIExvY2ssIG9ubHkgdXNlZCBmb3IgVFguICovCi0Jc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKICNpZmRlZiBDT05GSUdfQjQzX0RFQlVHCiAJLyogTWF4aW11bSBudW1iZXIgb2YgdXNlZCBzbG90cy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xvLmMKaW5kZXggMjJkMGZiZC4uOTc2MTA0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xvLmMKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogCX0gZWxzZQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgyQiksIDB4MDgwMik7CiAJaWYgKHBoeS0+cmV2ID49IDIpCi0JCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2KTsKKwkJYjQzX2R1bW15X3RyYW5zbWlzc2lvbihkZXYsIGZhbHNlLCB0cnVlKTsKIAliNDNfZ3BoeV9jaGFubmVsX3N3aXRjaChkZXYsIDYsIDApOwogCWI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUxKTsJLyogZHVtbXkgcmVhZCAqLwogCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfRykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCmluZGV4IGU3MWM4ZDkuLjdhOWEzZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwpAQCAtNTgsNiArNTgsNyBAQAogTU9EVUxFX0FVVEhPUigiTWFydGluIExhbmdlciIpOwogTU9EVUxFX0FVVEhPUigiU3RlZmFubyBCcml2aW8iKTsKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgQnVlc2NoIik7CitNT0RVTEVfQVVUSE9SKCJHw6Fib3IgU3RlZmFuaWsiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogTU9EVUxFX0ZJUk1XQVJFKEI0M19TVVBQT1JURURfRklSTVdBUkVfSUQpOwpAQCAtODAsMTMgKzgxLDE3IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBtb2RwYXJhbV9ub2h3Y3J5cHQsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbi4iKTsKIAorc3RhdGljIGludCBtb2RwYXJhbV9od3RraXA7Cittb2R1bGVfcGFyYW1fbmFtZWQoaHd0a2lwLCBtb2RwYXJhbV9od3RraXAsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGh3dGtpcCwgIkVuYWJsZSBoYXJkd2FyZSB0a2lwLiIpOworCiBzdGF0aWMgaW50IG1vZHBhcmFtX3FvcyA9IDE7CiBtb2R1bGVfcGFyYW1fbmFtZWQocW9zLCBtb2RwYXJhbV9xb3MsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHFvcywgIkVuYWJsZSBRT1Mgc3VwcG9ydCAoZGVmYXVsdCBvbikiKTsKIAogc3RhdGljIGludCBtb2RwYXJhbV9idGNvZXggPSAxOwogbW9kdWxlX3BhcmFtX25hbWVkKGJ0Y29leCwgbW9kcGFyYW1fYnRjb2V4LCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhidGNvZXgsICJFbmFibGUgQmx1ZXRvb3RoIGNvZXhpc3RhbmNlIChkZWZhdWx0IG9uKSIpOworTU9EVUxFX1BBUk1fREVTQyhidGNvZXgsICJFbmFibGUgQmx1ZXRvb3RoIGNvZXhpc3RlbmNlIChkZWZhdWx0IG9uKSIpOwogCiBpbnQgYjQzX21vZHBhcmFtX3ZlcmJvc2UgPSBCNDNfVkVSQk9TSVRZX0RFRkFVTFQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQodmVyYm9zZSwgYjQzX21vZHBhcmFtX3ZlcmJvc2UsIGludCwgMDY0NCk7CkBAIC0yODYsNyArMjkxLDcgQEAKIAogc3RhdGljIHZvaWQgYjQzX3dpcmVsZXNzX2NvcmVfZXhpdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogc3RhdGljIGludCBiNDNfd2lyZWxlc3NfY29yZV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Ci1zdGF0aWMgdm9pZCBiNDNfd2lyZWxlc3NfY29yZV9zdG9wKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CitzdGF0aWMgc3RydWN0IGI0M193bGRldiAqIGI0M193aXJlbGVzc19jb3JlX3N0b3Aoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIHN0YXRpYyBpbnQgYjQzX3dpcmVsZXNzX2NvcmVfc3RhcnQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIAogc3RhdGljIGludCBiNDNfcmF0ZWxpbWl0KHN0cnVjdCBiNDNfd2wgKndsKQpAQCAtMzg1LDcgKzM5MCw3IEBACiAJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19TSE1fQ09OVFJPTCwgY29udHJvbCk7CiB9CiAKLXUzMiBfX2I0M19zaG1fcmVhZDMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQpCit1MzIgYjQzX3NobV9yZWFkMzIoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCkKIHsKIAl1MzIgcmV0OwogCkBAIC0zOTUsOSArNDAwLDggQEAKIAkJCS8qIFVuYWxpZ25lZCBhY2Nlc3MgKi8KIAkJCWI0M19zaG1fY29udHJvbF93b3JkKGRldiwgcm91dGluZywgb2Zmc2V0ID4+IDIpOwogCQkJcmV0ID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1NITV9EQVRBX1VOQUxJR05FRCk7Ci0JCQlyZXQgPDw9IDE2OwogCQkJYjQzX3NobV9jb250cm9sX3dvcmQoZGV2LCByb3V0aW5nLCAob2Zmc2V0ID4+IDIpICsgMSk7Ci0JCQlyZXQgfD0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1NITV9EQVRBKTsKKwkJCXJldCB8PSAoKHUzMiliNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fU0hNX0RBVEEpKSA8PCAxNjsKIAogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTQwOSwyMCArNDEzLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi11MzIgYjQzX3NobV9yZWFkMzIoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCkKLXsKLQlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgcmV0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwotCXJldCA9IF9fYjQzX3NobV9yZWFkMzIoZGV2LCByb3V0aW5nLCBvZmZzZXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdTE2IF9fYjQzX3NobV9yZWFkMTYoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCkKK3UxNiBiNDNfc2htX3JlYWQxNihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0KQogewogCXUxNiByZXQ7CiAKQEAgLTQ0MywyMCArNDM0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi11MTYgYjQzX3NobV9yZWFkMTYoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCkKLXsKLQlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MTYgcmV0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwotCXJldCA9IF9fYjQzX3NobV9yZWFkMTYoZGV2LCByb3V0aW5nLCBvZmZzZXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBfX2I0M19zaG1fd3JpdGUzMihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCit2b2lkIGI0M19zaG1fd3JpdGUzMihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCiB7CiAJaWYgKHJvdXRpbmcgPT0gQjQzX1NITV9TSEFSRUQpIHsKIAkJQjQzX1dBUk5fT04ob2Zmc2V0ICYgMHgwMDAxKTsKQEAgLTQ2NCw5ICs0NDIsMTAgQEAKIAkJCS8qIFVuYWxpZ25lZCBhY2Nlc3MgKi8KIAkJCWI0M19zaG1fY29udHJvbF93b3JkKGRldiwgcm91dGluZywgb2Zmc2V0ID4+IDIpOwogCQkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19TSE1fREFUQV9VTkFMSUdORUQsCi0JCQkJICAgICh2YWx1ZSA+PiAxNikgJiAweGZmZmYpOworCQkJCSAgICB2YWx1ZSAmIDB4RkZGRik7CiAJCQliNDNfc2htX2NvbnRyb2xfd29yZChkZXYsIHJvdXRpbmcsIChvZmZzZXQgPj4gMikgKyAxKTsKLQkJCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fU0hNX0RBVEEsIHZhbHVlICYgMHhmZmZmKTsKKwkJCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fU0hNX0RBVEEsCisJCQkJICAgICh2YWx1ZSA+PiAxNikgJiAweEZGRkYpOwogCQkJcmV0dXJuOwogCQl9CiAJCW9mZnNldCA+Pj0gMjsKQEAgLTQ3NSwxNyArNDU0LDcgQEAKIAliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1NITV9EQVRBLCB2YWx1ZSk7CiB9CiAKLXZvaWQgYjQzX3NobV93cml0ZTMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+c2htX2xvY2ssIGZsYWdzKTsKLQlfX2I0M19zaG1fd3JpdGUzMihkZXYsIHJvdXRpbmcsIG9mZnNldCwgdmFsdWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwotfQotCi12b2lkIF9fYjQzX3NobV93cml0ZTE2KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUxNiB2YWx1ZSkKK3ZvaWQgYjQzX3NobV93cml0ZTE2KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUxNiB2YWx1ZSkKIHsKIAlpZiAocm91dGluZyA9PSBCNDNfU0hNX1NIQVJFRCkgewogCQlCNDNfV0FSTl9PTihvZmZzZXQgJiAweDAwMDEpOwpAQCAtNTAxLDE2ICs0NzAsNiBAQAogCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fU0hNX0RBVEEsIHZhbHVlKTsKIH0KIAotdm9pZCBiNDNfc2htX3dyaXRlMTYoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCwgdTE2IHZhbHVlKQotewotCXN0cnVjdCBiNDNfd2wgKndsID0gZGV2LT53bDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwotCV9fYjQzX3NobV93cml0ZTE2KGRldiwgcm91dGluZywgb2Zmc2V0LCB2YWx1ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPnNobV9sb2NrLCBmbGFncyk7Ci19Ci0KIC8qIFJlYWQgSG9zdEZsYWdzICovCiB1NjQgYjQzX2hmX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewpAQCAtNjgwLDIyICs2MzksMTEgQEAKIAliNDNfc2V0X3Nsb3RfdGltZShkZXYsIDIwKTsKIH0KIAotLyogU3luY2hyb25pemUgSVJRIHRvcC0gYW5kIGJvdHRvbS1oYWxmLgotICogSVJRcyBtdXN0IGJlIG1hc2tlZCBiZWZvcmUgY2FsbGluZyB0aGlzLgotICogVGhpcyBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCB0aGUgaXJxX2xvY2sgaGVsZC4KLSAqLwotc3RhdGljIHZvaWQgYjQzX3N5bmNocm9uaXplX2lycShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCi17Ci0Jc3luY2hyb25pemVfaXJxKGRldi0+ZGV2LT5pcnEpOwotCXRhc2tsZXRfa2lsbCgmZGV2LT5pc3JfdGFza2xldCk7Ci19Ci0KIC8qIER1bW15VHJhbnNtaXNzaW9uIGZ1bmN0aW9uLCBhcyBkb2N1bWVudGVkIG9uCi0gKiBodHRwOi8vYmNtLXNwZWNzLnNpcHNvbHV0aW9ucy5uZXQvRHVtbXlUcmFuc21pc3Npb24KKyAqIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvRHVtbXlUcmFuc21pc3Npb24KICAqLwotdm9pZCBiNDNfZHVtbXlfdHJhbnNtaXNzaW9uKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3ZvaWQgYjQzX2R1bW15X3RyYW5zbWlzc2lvbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGJvb2wgb2ZkbSwgYm9vbCBwYV9vbikKIHsKLQlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKIAl1bnNpZ25lZCBpbnQgaSwgbWF4X2xvb3A7CiAJdTE2IHZhbHVlOwpAQCAtNzA3LDQxICs2NTUsNDYgQEAKIAkJMHgwMDAwMDAwMCwKIAl9OwogCi0Jc3dpdGNoIChwaHktPnR5cGUpIHsKLQljYXNlIEI0M19QSFlUWVBFX0E6CisJaWYgKG9mZG0pIHsKIAkJbWF4X2xvb3AgPSAweDFFOwogCQlidWZmZXJbMF0gPSAweDAwMDIwMUNDOwotCQlicmVhazsKLQljYXNlIEI0M19QSFlUWVBFX0I6Ci0JY2FzZSBCNDNfUEhZVFlQRV9HOgorCX0gZWxzZSB7CiAJCW1heF9sb29wID0gMHhGQTsKIAkJYnVmZmVyWzBdID0gMHgwMDBCODQ2RTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQjQzX1dBUk5fT04oMSk7Ci0JCXJldHVybjsKIAl9CiAKLQlzcGluX2xvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOwotCXdyaXRlX2xvY2soJndsLT50eF9sb2NrKTsKLQogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCiAJCWI0M19yYW1fd3JpdGUoZGV2LCBpICogNCwgYnVmZmVyW2ldKTsKIAotCS8qIENvbW1pdCB3cml0ZXMgKi8KLQliNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fTUFDQ1RMKTsKLQogCWI0M193cml0ZTE2KGRldiwgMHgwNTY4LCAweDAwMDApOwotCWI0M193cml0ZTE2KGRldiwgMHgwN0MwLCAweDAwMDApOwotCXZhbHVlID0gKChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQSkgPyAxIDogMCk7CisJaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA8IDExKQorCQliNDNfd3JpdGUxNihkZXYsIDB4MDdDMCwgMHgwMDAwKTsKKwllbHNlCisJCWI0M193cml0ZTE2KGRldiwgMHgwN0MwLCAweDAxMDApOworCXZhbHVlID0gKG9mZG0gPyAweDQxIDogMHg0MCk7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1MEMsIHZhbHVlKTsKKwlpZiAoKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9OKSB8fCAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0xQKSkKKwkJYjQzX3dyaXRlMTYoZGV2LCAweDA1MTQsIDB4MUEwMik7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1MDgsIDB4MDAwMCk7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1MEEsIDB4MDAwMCk7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1NEMsIDB4MDAwMCk7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1NkEsIDB4MDAxNCk7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1NjgsIDB4MDgyNik7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1MDAsIDB4MDAwMCk7Ci0JYjQzX3dyaXRlMTYoZGV2LCAweDA1MDIsIDB4MDAzMCk7CisJaWYgKCFwYV9vbiAmJiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX04pKSB7CisJCS8vU1BFQyBUT0RPCisJfQorCisJc3dpdGNoIChwaHktPnR5cGUpIHsKKwljYXNlIEI0M19QSFlUWVBFX046CisJCWI0M193cml0ZTE2KGRldiwgMHgwNTAyLCAweDAwRDApOworCQlicmVhazsKKwljYXNlIEI0M19QSFlUWVBFX0xQOgorCQliNDNfd3JpdGUxNihkZXYsIDB4MDUwMiwgMHgwMDUwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYjQzX3dyaXRlMTYoZGV2LCAweDA1MDIsIDB4MDAzMCk7CisJfQogCiAJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCAmJiBwaHktPnJhZGlvX3JldiA8PSAweDUpCiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDUxLCAweDAwMTcpOwpAQCAtNzY1LDkgKzcxOCw2IEBACiAJfQogCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTAgJiYgcGh5LT5yYWRpb19yZXYgPD0gMHg1KQogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1MSwgMHgwMDM3KTsKLQotCXdyaXRlX3VubG9jaygmd2wtPnR4X2xvY2spOwotCXNwaW5fdW5sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQga2V5X3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKQEAgLTc5NiwxOCArNzQ2LDE5IEBACiBzdGF0aWMgdm9pZCBrZXltYWNfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBpbmRleCwgY29uc3QgdTggKmFkZHIpCiB7CiAJdTMyIGFkZHJ0bXBbMl0gPSB7IDAsIDAsIH07Ci0JdTggcGVyX3N0YV9rZXlzX3N0YXJ0ID0gODsKKwl1OCBwYWlyd2lzZV9rZXlzX3N0YXJ0ID0gQjQzX05SX0dST1VQX0tFWVMgKiAyOwogCiAJaWYgKGI0M19uZXdfa2lkeF9hcGkoZGV2KSkKLQkJcGVyX3N0YV9rZXlzX3N0YXJ0ID0gNDsKKwkJcGFpcndpc2Vfa2V5c19zdGFydCA9IEI0M19OUl9HUk9VUF9LRVlTOwogCi0JQjQzX1dBUk5fT04oaW5kZXggPCBwZXJfc3RhX2tleXNfc3RhcnQpOwotCS8qIFdlIGhhdmUgdHdvIGRlZmF1bHQgVFgga2V5cyBhbmQgcG9zc2libHkgdHdvIGRlZmF1bHQgUlgga2V5cy4KKwlCNDNfV0FSTl9PTihpbmRleCA8IHBhaXJ3aXNlX2tleXNfc3RhcnQpOworCS8qIFdlIGhhdmUgZm91ciBkZWZhdWx0IFRYIGtleXMgYW5kIHBvc3NpYmx5IGZvdXIgZGVmYXVsdCBSWCBrZXlzLgogCSAqIFBoeXNpY2FsIG1hYyAwIGlzIG1hcHBlZCB0byBwaHlzaWNhbCBrZXkgNCBvciA4LCBkZXBlbmRpbmcKIAkgKiBvbiB0aGUgZmlybXdhcmUgdmVyc2lvbi4KIAkgKiBTbyB3ZSBtdXN0IGFkanVzdCB0aGUgaW5kZXggaGVyZS4KIAkgKi8KLQlpbmRleCAtPSBwZXJfc3RhX2tleXNfc3RhcnQ7CisJaW5kZXggLT0gcGFpcndpc2Vfa2V5c19zdGFydDsKKwlCNDNfV0FSTl9PTihpbmRleCA+PSBCNDNfTlJfUEFJUldJU0VfS0VZUyk7CiAKIAlpZiAoYWRkcikgewogCQlhZGRydG1wWzBdID0gYWRkclswXTsKQEAgLTgxOCwyNyArNzY5LDkwIEBACiAJCWFkZHJ0bXBbMV0gfD0gKCh1MzIpIChhZGRyWzVdKSA8PCA4KTsKIAl9CiAKLQlpZiAoZGV2LT5kZXYtPmlkLnJldmlzaW9uID49IDUpIHsKLQkJLyogUmVjZWl2ZSBtYXRjaCB0cmFuc21pdHRlciBhZGRyZXNzIG1lY2hhbmlzbSAqLwotCQliNDNfc2htX3dyaXRlMzIoZGV2LCBCNDNfU0hNX1JDTVRBLAotCQkJCShpbmRleCAqIDIpICsgMCwgYWRkcnRtcFswXSk7Ci0JCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fUkNNVEEsCi0JCQkJKGluZGV4ICogMikgKyAxLCBhZGRydG1wWzFdKTsKLQl9IGVsc2UgewotCQkvKiBSWEUgKFJlY2VpdmUgRW5naW5lKSBhbmQKLQkJICogUFNNIChQcm9ncmFtbWFibGUgU3RhdGUgTWFjaGluZSkgbWVjaGFuaXNtCi0JCSAqLwotCQlpZiAoaW5kZXggPCA4KSB7Ci0JCQkvKiBUT0RPIHdyaXRlIHRvIFJDTSAxNiwgMTksIDIyIGFuZCAyNSAqLwotCQl9IGVsc2UgewotCQkJYjQzX3NobV93cml0ZTMyKGRldiwgQjQzX1NITV9TSEFSRUQsCi0JCQkJCUI0M19TSE1fU0hfUFNNICsgKGluZGV4ICogNikgKyAwLAotCQkJCQlhZGRydG1wWzBdKTsKLQkJCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELAotCQkJCQlCNDNfU0hNX1NIX1BTTSArIChpbmRleCAqIDYpICsgNCwKLQkJCQkJYWRkcnRtcFsxXSk7Ci0JCX0KKwkvKiBSZWNlaXZlIG1hdGNoIHRyYW5zbWl0dGVyIGFkZHJlc3MgKFJDTVRBKSBtZWNoYW5pc20gKi8KKwliNDNfc2htX3dyaXRlMzIoZGV2LCBCNDNfU0hNX1JDTVRBLAorCQkJKGluZGV4ICogMikgKyAwLCBhZGRydG1wWzBdKTsKKwliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1JDTVRBLAorCQkJKGluZGV4ICogMikgKyAxLCBhZGRydG1wWzFdKTsKK30KKworLyogVGhlIHVjb2RlIHdpbGwgdXNlIHBoYXNlMSBrZXkgd2l0aCBURUsga2V5IHRvIGRlY3J5cHQgcnggcGFja2V0cy4KKyAqIFdoZW4gYSBwYWNrZXQgaXMgcmVjZWl2ZWQsIHRoZSBpdjMyIGlzIGNoZWNrZWQuCisgKiAtIGlmIGl0IGRvZXNuJ3QgdGhlIHBhY2tldCBpcyByZXR1cm5lZCB3aXRob3V0IG1vZGlmaWNhdGlvbiAoYW5kIHNvZnR3YXJlCisgKiAgIGRlY3J5cHRpb24gY2FuIGJlIGRvbmUpLiBUaGF0J3Mgd2hhdCBoYXBwZW4gd2hlbiBpdjE2IHdyYXAuCisgKiAtIGlmIGl0IGRvZXMsIHRoZSByYzQga2V5IGlzIGNvbXB1dGVkLCBhbmQgZGVjcnlwdGlvbiBpcyB0cmllZC4KKyAqICAgRWl0aGVyIGl0IHdpbGwgc3VjY2VzcyBhbmQgQjQzX1JYX01BQ19ERUMgaXMgcmV0dXJuZWQsCisgKiAgIGVpdGhlciBpdCBmYWlscyBhbmQgQjQzX1JYX01BQ19ERUN8QjQzX1JYX01BQ19ERUNFUlIgaXMgcmV0dXJuZWQKKyAqICAgYW5kIHRoZSBwYWNrZXQgaXMgbm90IHVzYWJsZSAoaXQgZ290IG1vZGlmaWVkIGJ5IHRoZSB1Y29kZSkuCisgKiBTbyBpbiBvcmRlciB0byBuZXZlciBoYXZlIEI0M19SWF9NQUNfREVDRVJSLCB3ZSBzaG91bGQgcHJvdmlkZQorICogYSBpdjMyIGFuZCBwaGFzZTFrZXkgdGhhdCBtYXRjaC4gQmVjYXVzZSB3ZSBkcm9wIHBhY2tldHMgaW4gY2FzZSBvZgorICogQjQzX1JYX01BQ19ERUNFUlIsIGlmIHdlIGhhdmUgYSBjb3JyZWN0IGl2MzIgYnV0IGEgd3JvbmcgcGhhc2Uxa2V5LCBhbGwKKyAqIHBhY2tldHMgd2lsbCBiZSBsb3N0IHdpdGhvdXQgaGlnaGVyIGxheWVyIGtub3dpbmcgKGllIG5vIHJlc3luYyBwb3NzaWJsZQorICogdW50aWwgbmV4dCB3cmFwKS4KKyAqCisgKiBOT1RFIDogdGhpcyBzaG91bGQgc3VwcG9ydCA1MCBrZXkgbGlrZSBSQ01UQSBiZWNhdXNlCisgKiAoQjQzX1NITV9TSF9LRVlJRFhCTE9DSyAtIEI0M19TSE1fU0hfVEtJUFRTQ1RUQUspLzE0ID0gNTAKKyAqLworc3RhdGljIHZvaWQgcnhfdGtpcF9waGFzZTFfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBpbmRleCwgdTMyIGl2MzIsCisJCXUxNiAqcGhhc2Uxa2V5KQoreworCXVuc2lnbmVkIGludCBpOworCXUzMiBvZmZzZXQ7CisJdTggcGFpcndpc2Vfa2V5c19zdGFydCA9IEI0M19OUl9HUk9VUF9LRVlTICogMjsKKworCWlmICghbW9kcGFyYW1faHd0a2lwKQorCQlyZXR1cm47CisKKwlpZiAoYjQzX25ld19raWR4X2FwaShkZXYpKQorCQlwYWlyd2lzZV9rZXlzX3N0YXJ0ID0gQjQzX05SX0dST1VQX0tFWVM7CisKKwlCNDNfV0FSTl9PTihpbmRleCA8IHBhaXJ3aXNlX2tleXNfc3RhcnQpOworCS8qIFdlIGhhdmUgZm91ciBkZWZhdWx0IFRYIGtleXMgYW5kIHBvc3NpYmx5IGZvdXIgZGVmYXVsdCBSWCBrZXlzLgorCSAqIFBoeXNpY2FsIG1hYyAwIGlzIG1hcHBlZCB0byBwaHlzaWNhbCBrZXkgNCBvciA4LCBkZXBlbmRpbmcKKwkgKiBvbiB0aGUgZmlybXdhcmUgdmVyc2lvbi4KKwkgKiBTbyB3ZSBtdXN0IGFkanVzdCB0aGUgaW5kZXggaGVyZS4KKwkgKi8KKwlpbmRleCAtPSBwYWlyd2lzZV9rZXlzX3N0YXJ0OworCUI0M19XQVJOX09OKGluZGV4ID49IEI0M19OUl9QQUlSV0lTRV9LRVlTKTsKKworCWlmIChiNDNfZGVidWcoZGV2LCBCNDNfREJHX0tFWVMpKSB7CisJCWI0M2RiZyhkZXYtPndsLCAicnhfdGtpcF9waGFzZTFfd3JpdGUgOiBpZHggMHgleCwgaXYzMiAweCV4XG4iLAorCQkJCWluZGV4LCBpdjMyKTsKIAl9CisJLyogV3JpdGUgdGhlIGtleSB0byB0aGUgIFJYIHRraXAgc2hhcmVkIG1lbSAqLworCW9mZnNldCA9IEI0M19TSE1fU0hfVEtJUFRTQ1RUQUsgKyBpbmRleCAqICgxMCArIDQpOworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSArPSAyKSB7CisJCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBvZmZzZXQgKyBpLAorCQkJCXBoYXNlMWtleSA/IHBoYXNlMWtleVtpIC8gMl0gOiAwKTsKKwl9CisJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsIG9mZnNldCArIGksIGl2MzIpOworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBvZmZzZXQgKyBpICsgMiwgaXYzMiA+PiAxNik7Cit9CisKK3N0YXRpYyB2b2lkIGI0M19vcF91cGRhdGVfdGtpcF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLCBjb25zdCB1OCAqYWRkciwKKwkJCXUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSkKK3sKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCWludCBpbmRleCA9IGtleWNvbmYtPmh3X2tleV9pZHg7CisKKwlpZiAoQjQzX1dBUk5fT04oIW1vZHBhcmFtX2h3dGtpcCkpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisJaWYgKCFkZXYgfHwgYjQzX3N0YXR1cyhkZXYpIDwgQjQzX1NUQVRfSU5JVElBTElaRUQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWtleW1hY193cml0ZShkZXYsIGluZGV4LCBOVUxMKTsJLyogRmlyc3QgemVybyBvdXQgbWFjIHRvIGF2b2lkIHJhY2UgKi8KKworCXJ4X3RraXBfcGhhc2UxX3dyaXRlKGRldiwgaW5kZXgsIGl2MzIsIHBoYXNlMWtleSk7CisJa2V5bWFjX3dyaXRlKGRldiwgaW5kZXgsIGFkZHIpOworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgZG9fa2V5X3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKQEAgLTg0NiwyMCArODYwLDMzIEBACiAJCQkgY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKIAl1OCBidWZbQjQzX1NFQ19LRVlTSVpFXSA9IHsgMCwgfTsKLQl1OCBwZXJfc3RhX2tleXNfc3RhcnQgPSA4OworCXU4IHBhaXJ3aXNlX2tleXNfc3RhcnQgPSBCNDNfTlJfR1JPVVBfS0VZUyAqIDI7CiAKIAlpZiAoYjQzX25ld19raWR4X2FwaShkZXYpKQotCQlwZXJfc3RhX2tleXNfc3RhcnQgPSA0OworCQlwYWlyd2lzZV9rZXlzX3N0YXJ0ID0gQjQzX05SX0dST1VQX0tFWVM7CiAKLQlCNDNfV0FSTl9PTihpbmRleCA+PSBkZXYtPm1heF9ucl9rZXlzKTsKKwlCNDNfV0FSTl9PTihpbmRleCA+PSBBUlJBWV9TSVpFKGRldi0+a2V5KSk7CiAJQjQzX1dBUk5fT04oa2V5X2xlbiA+IEI0M19TRUNfS0VZU0laRSk7CiAKLQlpZiAoaW5kZXggPj0gcGVyX3N0YV9rZXlzX3N0YXJ0KQorCWlmIChpbmRleCA+PSBwYWlyd2lzZV9rZXlzX3N0YXJ0KQogCQlrZXltYWNfd3JpdGUoZGV2LCBpbmRleCwgTlVMTCk7CS8qIEZpcnN0IHplcm8gb3V0IG1hYy4gKi8KKwlpZiAoYWxnb3JpdGhtID09IEI0M19TRUNfQUxHT19US0lQKSB7CisJCS8qCisJCSAqIFdlIHNob3VsZCBwcm92aWRlIGFuIGluaXRpYWwgaXYzMiwgcGhhc2Uxa2V5IHBhaXIuCisJCSAqIFdlIGNvdWxkIHN0YXJ0IHdpdGggaXYzMj0wIGFuZCBjb21wdXRlIHRoZSBjb3JyZXNwb25kaW5nCisJCSAqIHBoYXNlMWtleSwgYnV0IHRoaXMgbWVhbnMgY2FsbGluZyBpZWVlODAyMTFfZ2V0X3RraXBfa2V5CisJCSAqIHdpdGggYSBmYWtlIHNrYiAob3IgZXhwb3J0IG90aGVyIHRraXAgZnVuY3Rpb24pLgorCQkgKiBCZWNhdXNlIHdlIGFyZSBsYXp5IHdlIGhvcGUgaXYzMiB3b24ndCBzdGFydCB3aXRoCisJCSAqIDB4ZmZmZmZmZmYgYW5kIGxldCdzIGI0M19vcF91cGRhdGVfdGtpcF9rZXkgcHJvdmlkZSBhCisJCSAqIGNvcnJlY3QgcGFpci4KKwkJICovCisJCXJ4X3RraXBfcGhhc2UxX3dyaXRlKGRldiwgaW5kZXgsIDB4ZmZmZmZmZmYsICh1MTYqKWJ1Zik7CisJfSBlbHNlIGlmIChpbmRleCA+PSBwYWlyd2lzZV9rZXlzX3N0YXJ0KSAvKiBjbGVhciBpdCAqLworCQlyeF90a2lwX3BoYXNlMV93cml0ZShkZXYsIGluZGV4LCAwLCBOVUxMKTsKIAlpZiAoa2V5KQogCQltZW1jcHkoYnVmLCBrZXksIGtleV9sZW4pOwogCWtleV93cml0ZShkZXYsIGluZGV4LCBhbGdvcml0aG0sIGJ1Zik7Ci0JaWYgKGluZGV4ID49IHBlcl9zdGFfa2V5c19zdGFydCkKKwlpZiAoaW5kZXggPj0gcGFpcndpc2Vfa2V5c19zdGFydCkKIAkJa2V5bWFjX3dyaXRlKGRldiwgaW5kZXgsIG1hY19hZGRyKTsKIAogCWRldi0+a2V5W2luZGV4XS5hbGdvcml0aG0gPSBhbGdvcml0aG07CkBAIC04NzIsMjEgKzg5OSwzMyBAQAogCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYpCiB7CiAJaW50IGk7Ci0JaW50IHN0YV9rZXlzX3N0YXJ0OworCWludCBwYWlyd2lzZV9rZXlzX3N0YXJ0OwogCisJLyogRm9yIEFMR19US0lQIHRoZSBrZXkgaXMgZW5jb2RlZCBhcyBhIDI1Ni1iaXQgKDMyIGJ5dGUpIGRhdGEgYmxvY2s6CisJICogCS0gVGVtcG9yYWwgRW5jcnlwdGlvbiBLZXkgKDEyOCBiaXRzKQorCSAqIAktIFRlbXBvcmFsIEF1dGhlbnRpY2F0b3IgVHggTUlDIEtleSAoNjQgYml0cykKKwkgKiAJLSBUZW1wb3JhbCBBdXRoZW50aWNhdG9yIFJ4IE1JQyBLZXkgKDY0IGJpdHMpCisJICoKKwkgKiAJSGFyZHdhcmUgb25seSBzdG9yZSBURUsKKwkgKi8KKwlpZiAoYWxnb3JpdGhtID09IEI0M19TRUNfQUxHT19US0lQICYmIGtleV9sZW4gPT0gMzIpCisJCWtleV9sZW4gPSAxNjsKIAlpZiAoa2V5X2xlbiA+IEI0M19TRUNfS0VZU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yIChpID0gMDsgaSA8IGRldi0+bWF4X25yX2tleXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldi0+a2V5KTsgaSsrKSB7CiAJCS8qIENoZWNrIHRoYXQgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIHRoaXMga2V5LiAqLwogCQlCNDNfV0FSTl9PTihkZXYtPmtleVtpXS5rZXljb25mID09IGtleWNvbmYpOwogCX0KIAlpZiAoaW5kZXggPCAwKSB7CiAJCS8qIFBhaXJ3aXNlIGtleS4gR2V0IGFuIGVtcHR5IHNsb3QgZm9yIHRoZSBrZXkuICovCiAJCWlmIChiNDNfbmV3X2tpZHhfYXBpKGRldikpCi0JCQlzdGFfa2V5c19zdGFydCA9IDQ7CisJCQlwYWlyd2lzZV9rZXlzX3N0YXJ0ID0gQjQzX05SX0dST1VQX0tFWVM7CiAJCWVsc2UKLQkJCXN0YV9rZXlzX3N0YXJ0ID0gODsKLQkJZm9yIChpID0gc3RhX2tleXNfc3RhcnQ7IGkgPCBkZXYtPm1heF9ucl9rZXlzOyBpKyspIHsKKwkJCXBhaXJ3aXNlX2tleXNfc3RhcnQgPSBCNDNfTlJfR1JPVVBfS0VZUyAqIDI7CisJCWZvciAoaSA9IHBhaXJ3aXNlX2tleXNfc3RhcnQ7CisJCSAgICAgaSA8IHBhaXJ3aXNlX2tleXNfc3RhcnQgKyBCNDNfTlJfUEFJUldJU0VfS0VZUzsKKwkJICAgICBpKyspIHsKKwkJCUI0M19XQVJOX09OKGkgPj0gQVJSQVlfU0laRShkZXYtPmtleSkpOwogCQkJaWYgKCFkZXYtPmtleVtpXS5rZXljb25mKSB7CiAJCQkJLyogZm91bmQgZW1wdHkgKi8KIAkJCQlpbmRleCA9IGk7CkBAIC05MTQsNyArOTUzLDcgQEAKIAogc3RhdGljIGludCBiNDNfa2V5X2NsZWFyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGluZGV4KQogewotCWlmIChCNDNfV0FSTl9PTigoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gZGV2LT5tYXhfbnJfa2V5cykpKQorCWlmIChCNDNfV0FSTl9PTigoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gQVJSQVlfU0laRShkZXYtPmtleSkpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZG9fa2V5X3dyaXRlKGRldiwgaW5kZXgsIEI0M19TRUNfQUxHT19OT05FLAogCQkgICAgIE5VTEwsIEI0M19TRUNfS0VZU0laRSwgTlVMTCk7CkBAIC05MjksMTYgKzk2OCwxOSBAQAogCiBzdGF0aWMgdm9pZCBiNDNfY2xlYXJfa2V5cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JaW50IGk7CisJaW50IGksIGNvdW50OwogCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bWF4X25yX2tleXM7IGkrKykKKwlpZiAoYjQzX25ld19raWR4X2FwaShkZXYpKQorCQljb3VudCA9IEI0M19OUl9HUk9VUF9LRVlTICsgQjQzX05SX1BBSVJXSVNFX0tFWVM7CisJZWxzZQorCQljb3VudCA9IEI0M19OUl9HUk9VUF9LRVlTICogMiArIEI0M19OUl9QQUlSV0lTRV9LRVlTOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogCQliNDNfa2V5X2NsZWFyKGRldiwgaSk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M19kdW1wX2tleW1lbW9yeShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JdW5zaWduZWQgaW50IGksIGluZGV4LCBvZmZzZXQ7Ci0JREVDTEFSRV9NQUNfQlVGKG1hY2J1Zik7CisJdW5zaWduZWQgaW50IGksIGluZGV4LCBjb3VudCwgb2Zmc2V0LCBwYWlyd2lzZV9rZXlzX3N0YXJ0OwogCXU4IG1hY1tFVEhfQUxFTl07CiAJdTE2IGFsZ287CiAJdTMyIHJjbXRhMDsKQEAgLTk1Miw3ICs5OTQsMTQgQEAKIAloZiA9IGI0M19oZl9yZWFkKGRldik7CiAJYjQzZGJnKGRldi0+d2wsICJIYXJkd2FyZSBrZXkgbWVtb3J5IGR1bXA6ICBVU0VERUZLRVlTPSV1XG4iLAogCSAgICAgICAhIShoZiAmIEI0M19IRl9VU0VERUZLRVlTKSk7Ci0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgZGV2LT5tYXhfbnJfa2V5czsgaW5kZXgrKykgeworCWlmIChiNDNfbmV3X2tpZHhfYXBpKGRldikpIHsKKwkJcGFpcndpc2Vfa2V5c19zdGFydCA9IEI0M19OUl9HUk9VUF9LRVlTOworCQljb3VudCA9IEI0M19OUl9HUk9VUF9LRVlTICsgQjQzX05SX1BBSVJXSVNFX0tFWVM7CisJfSBlbHNlIHsKKwkJcGFpcndpc2Vfa2V5c19zdGFydCA9IEI0M19OUl9HUk9VUF9LRVlTICogMjsKKwkJY291bnQgPSBCNDNfTlJfR1JPVVBfS0VZUyAqIDIgKyBCNDNfTlJfUEFJUldJU0VfS0VZUzsKKwl9CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7IGluZGV4KyspIHsKIAkJa2V5ID0gJihkZXYtPmtleVtpbmRleF0pOwogCQlwcmludGsoS0VSTl9ERUJVRyAiS2V5IHNsb3QgJTAydTogJXMiLAogCQkgICAgICAgaW5kZXgsIChrZXktPmtleWNvbmYgPT0gTlVMTCkgPyAiICIgOiAiKiIpOwpAQCAtOTY2LDE1ICsxMDE1LDIyIEBACiAJCQkJICAgICAgQjQzX1NITV9TSF9LRVlJRFhCTE9DSyArIChpbmRleCAqIDIpKTsKIAkJcHJpbnRrKCIgICBBbGdvOiAlMDRYLyUwMlgiLCBhbGdvLCBrZXktPmFsZ29yaXRobSk7CiAKLQkJaWYgKGluZGV4ID49IDQpIHsKKwkJaWYgKGluZGV4ID49IHBhaXJ3aXNlX2tleXNfc3RhcnQpIHsKKwkJCWlmIChrZXktPmFsZ29yaXRobSA9PSBCNDNfU0VDX0FMR09fVEtJUCkgeworCQkJCXByaW50aygiICAgVEtJUDogIik7CisJCQkJb2Zmc2V0ID0gQjQzX1NITV9TSF9US0lQVFNDVFRBSyArIChpbmRleCAtIDQpICogKDEwICsgNCk7CisJCQkJZm9yIChpID0gMDsgaSA8IDE0OyBpICs9IDIpIHsKKwkJCQkJdTE2IHRtcCA9IGI0M19zaG1fcmVhZDE2KGRldiwgQjQzX1NITV9TSEFSRUQsIG9mZnNldCArIGkpOworCQkJCQlwcmludGsoIiUwMlglMDJYIiwgKHRtcCAmIDB4RkYpLCAoKHRtcCA+PiA4KSAmIDB4RkYpKTsKKwkJCQl9CisJCQl9CiAJCQlyY210YTAgPSBiNDNfc2htX3JlYWQzMihkZXYsIEI0M19TSE1fUkNNVEEsCi0JCQkJCQkoKGluZGV4IC0gNCkgKiAyKSArIDApOworCQkJCQkJKChpbmRleCAtIHBhaXJ3aXNlX2tleXNfc3RhcnQpICogMikgKyAwKTsKIAkJCXJjbXRhMSA9IGI0M19zaG1fcmVhZDE2KGRldiwgQjQzX1NITV9SQ01UQSwKLQkJCQkJCSgoaW5kZXggLSA0KSAqIDIpICsgMSk7CisJCQkJCQkoKGluZGV4IC0gcGFpcndpc2Vfa2V5c19zdGFydCkgKiAyKSArIDEpOwogCQkJKigoX19sZTMyICopKCZtYWNbMF0pKSA9IGNwdV90b19sZTMyKHJjbXRhMCk7CiAJCQkqKChfX2xlMTYgKikoJm1hY1s0XSkpID0gY3B1X3RvX2xlMTYocmNtdGExKTsKLQkJCXByaW50aygiICAgTUFDOiAlcyIsCi0JCQkgICAgICAgcHJpbnRfbWFjKG1hY2J1ZiwgbWFjKSk7CisJCQlwcmludGsoIiAgIE1BQzogJXBNIiwgbWFjKTsKIAkJfSBlbHNlCiAJCQlwcmludGsoIiAgIERFRkFVTFQgS0VZIik7CiAJCXByaW50aygiXG4iKTsKQEAgLTEzMzgsNyArMTM5NCw4IEBACiAJCXJldHVybiBCNDNfVFhIX1BIWV9BTlQyOwogCWNhc2UgQjQzX0FOVEVOTkEzOgogCQlyZXR1cm4gQjQzX1RYSF9QSFlfQU5UMzsKLQljYXNlIEI0M19BTlRFTk5BX0FVVE86CisJY2FzZSBCNDNfQU5URU5OQV9BVVRPMDoKKwljYXNlIEI0M19BTlRFTk5BX0FVVE8xOgogCQlyZXR1cm4gQjQzX1RYSF9QSFlfQU5UMDFBVVRPOwogCX0KIAlCNDNfV0FSTl9PTigxKTsKQEAgLTE0MzEsMTEzICsxNDg4LDYgQEAKIAliNDNkYmcoZGV2LT53bCwgIlVwZGF0ZWQgYmVhY29uIHRlbXBsYXRlIGF0IDB4JXhcbiIsIHJhbV9vZmZzZXQpOwogfQogCi1zdGF0aWMgdm9pZCBiNDNfd3JpdGVfcHJvYmVfcmVzcF9wbGNwKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICAgICB1MTYgc2htX29mZnNldCwgdTE2IHNpemUsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQotewotCXN0cnVjdCBiNDNfcGxjcF9oZHI0IHBsY3A7Ci0JdTMyIHRtcDsKLQlfX2xlMTYgZHVyOwotCi0JcGxjcC5kYXRhID0gMDsKLQliNDNfZ2VuZXJhdGVfcGxjcF9oZHIoJnBsY3AsIHNpemUgKyBGQ1NfTEVOLCByYXRlLT5od192YWx1ZSk7Ci0JZHVyID0gaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oZGV2LT53bC0+aHcsCi0JCQkJCSAgICAgICBkZXYtPndsLT52aWYsIHNpemUsCi0JCQkJCSAgICAgICByYXRlKTsKLQkvKiBXcml0ZSBQTENQIGluIHR3byBwYXJ0cyBhbmQgdGltaW5nIGZvciBwYWNrZXQgdHJhbnNmZXIgKi8KLQl0bXAgPSBsZTMyX3RvX2NwdShwbGNwLmRhdGEpOwotCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBzaG1fb2Zmc2V0LCB0bXAgJiAweEZGRkYpOwotCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBzaG1fb2Zmc2V0ICsgMiwgdG1wID4+IDE2KTsKLQliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgc2htX29mZnNldCArIDYsIGxlMTZfdG9fY3B1KGR1cikpOwotfQotCi0vKiBJbnN0ZWFkIG9mIHVzaW5nIGN1c3RvbSBwcm9iZSByZXNwb25zZSB0ZW1wbGF0ZSwgdGhpcyBmdW5jdGlvbgotICoganVzdCBwYXRjaGVzIGN1c3RvbSBiZWFjb24gdGVtcGxhdGUgYnk6Ci0gKiAxKSBDaGFuZ2luZyBwYWNrZXQgdHlwZQotICogMikgUGF0Y2hpbmcgZHVyYXRpb24gZmllbGQKLSAqIDMpIFN0cmlwcGluZyBUSU0KLSAqLwotc3RhdGljIGNvbnN0IHU4ICpiNDNfZ2VuZXJhdGVfcHJvYmVfcmVzcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJCSB1MTYgKmRlc3Rfc2l6ZSwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKLXsKLQljb25zdCB1OCAqc3JjX2RhdGE7Ci0JdTggKmRlc3RfZGF0YTsKLQl1MTYgc3JjX3NpemUsIGVsZW1fc2l6ZSwgc3JjX3BvcywgZGVzdF9wb3M7Ci0JX19sZTE2IGR1cjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCXNpemVfdCBpZV9zdGFydDsKLQotCXNyY19zaXplID0gZGV2LT53bC0+Y3VycmVudF9iZWFjb24tPmxlbjsKLQlzcmNfZGF0YSA9IChjb25zdCB1OCAqKWRldi0+d2wtPmN1cnJlbnRfYmVhY29uLT5kYXRhOwotCi0JLyogR2V0IHRoZSBzdGFydCBvZmZzZXQgb2YgdGhlIHZhcmlhYmxlIElFcyBpbiB0aGUgcGFja2V0LiAqLwotCWllX3N0YXJ0ID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LnByb2JlX3Jlc3AudmFyaWFibGUpOwotCUI0M19XQVJOX09OKGllX3N0YXJ0ICE9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpKTsKLQotCWlmIChCNDNfV0FSTl9PTihzcmNfc2l6ZSA8IGllX3N0YXJ0KSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlkZXN0X2RhdGEgPSBrbWFsbG9jKHNyY19zaXplLCBHRlBfQVRPTUlDKTsKLQlpZiAodW5saWtlbHkoIWRlc3RfZGF0YSkpCi0JCXJldHVybiBOVUxMOwotCi0JLyogQ29weSB0aGUgc3RhdGljIGRhdGEgYW5kIGFsbCBJbmZvcm1hdGlvbiBFbGVtZW50cywgZXhjZXB0IHRoZSBUSU0uICovCi0JbWVtY3B5KGRlc3RfZGF0YSwgc3JjX2RhdGEsIGllX3N0YXJ0KTsKLQlzcmNfcG9zID0gaWVfc3RhcnQ7Ci0JZGVzdF9wb3MgPSBpZV9zdGFydDsKLQlmb3IgKCA7IHNyY19wb3MgPCBzcmNfc2l6ZSAtIDI7IHNyY19wb3MgKz0gZWxlbV9zaXplKSB7Ci0JCWVsZW1fc2l6ZSA9IHNyY19kYXRhW3NyY19wb3MgKyAxXSArIDI7Ci0JCWlmIChzcmNfZGF0YVtzcmNfcG9zXSA9PSA1KSB7Ci0JCQkvKiBUaGlzIGlzIHRoZSBUSU0uICovCi0JCQljb250aW51ZTsKLQkJfQotCQltZW1jcHkoZGVzdF9kYXRhICsgZGVzdF9wb3MsIHNyY19kYXRhICsgc3JjX3BvcywKLQkJICAgICAgIGVsZW1fc2l6ZSk7Ci0JCWRlc3RfcG9zICs9IGVsZW1fc2l6ZTsKLQl9Ci0JKmRlc3Rfc2l6ZSA9IGRlc3RfcG9zOwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWRlc3RfZGF0YTsKLQotCS8qIFNldCB0aGUgZnJhbWUgY29udHJvbC4gKi8KLQloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7Ci0JZHVyID0gaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oZGV2LT53bC0+aHcsCi0JCQkJCSAgICAgICBkZXYtPndsLT52aWYsICpkZXN0X3NpemUsCi0JCQkJCSAgICAgICByYXRlKTsKLQloZHItPmR1cmF0aW9uX2lkID0gZHVyOwotCi0JcmV0dXJuIGRlc3RfZGF0YTsKLX0KLQotc3RhdGljIHZvaWQgYjQzX3dyaXRlX3Byb2JlX3Jlc3BfdGVtcGxhdGUoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkgIHUxNiByYW1fb2Zmc2V0LAotCQkJCQkgIHUxNiBzaG1fc2l6ZV9vZmZzZXQsCi0JCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQotewotCWNvbnN0IHU4ICpwcm9iZV9yZXNwX2RhdGE7Ci0JdTE2IHNpemU7Ci0KLQlzaXplID0gZGV2LT53bC0+Y3VycmVudF9iZWFjb24tPmxlbjsKLQlwcm9iZV9yZXNwX2RhdGEgPSBiNDNfZ2VuZXJhdGVfcHJvYmVfcmVzcChkZXYsICZzaXplLCByYXRlKTsKLQlpZiAodW5saWtlbHkoIXByb2JlX3Jlc3BfZGF0YSkpCi0JCXJldHVybjsKLQotCS8qIExvb2tzIGxpa2UgUExDUCBoZWFkZXJzIHBsdXMgcGFja2V0IHRpbWluZ3MgYXJlIHN0b3JlZCBmb3IKLQkgKiBhbGwgcG9zc2libGUgYmFzaWMgcmF0ZXMKLQkgKi8KLQliNDNfd3JpdGVfcHJvYmVfcmVzcF9wbGNwKGRldiwgMHgzMUEsIHNpemUsICZiNDNfYl9yYXRldGFibGVbMF0pOwotCWI0M193cml0ZV9wcm9iZV9yZXNwX3BsY3AoZGV2LCAweDMyQywgc2l6ZSwgJmI0M19iX3JhdGV0YWJsZVsxXSk7Ci0JYjQzX3dyaXRlX3Byb2JlX3Jlc3BfcGxjcChkZXYsIDB4MzNFLCBzaXplLCAmYjQzX2JfcmF0ZXRhYmxlWzJdKTsKLQliNDNfd3JpdGVfcHJvYmVfcmVzcF9wbGNwKGRldiwgMHgzNTAsIHNpemUsICZiNDNfYl9yYXRldGFibGVbM10pOwotCi0Jc2l6ZSA9IG1pbigoc2l6ZV90KSBzaXplLCAweDIwMCAtIHNpemVvZihzdHJ1Y3QgYjQzX3BsY3BfaGRyNikpOwotCWI0M193cml0ZV90ZW1wbGF0ZV9jb21tb24oZGV2LCBwcm9iZV9yZXNwX2RhdGEsCi0JCQkJICBzaXplLCByYW1fb2Zmc2V0LCBzaG1fc2l6ZV9vZmZzZXQsCi0JCQkJICByYXRlLT5od192YWx1ZSk7Ci0Ja2ZyZWUocHJvYmVfcmVzcF9kYXRhKTsKLX0KLQogc3RhdGljIHZvaWQgYjQzX3VwbG9hZF9iZWFjb24wKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7CkBAIC0xNTQ1LDEwICsxNDk1LDYgQEAKIAlpZiAod2wtPmJlYWNvbjBfdXBsb2FkZWQpCiAJCXJldHVybjsKIAliNDNfd3JpdGVfYmVhY29uX3RlbXBsYXRlKGRldiwgMHg2OCwgMHgxOCk7Ci0JLyogRklYTUU6IFByb2JlIHJlc3AgdXBsb2FkIGRvZXNuJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLAotCSAqICAgICAgICBidXQgd2UgZG9uJ3QgdXNlIHRoYXQgZmVhdHVyZSBhbnl3YXkuICovCi0JYjQzX3dyaXRlX3Byb2JlX3Jlc3BfdGVtcGxhdGUoZGV2LCAweDI2OCwgMHg0QSwKLQkJCQkgICAgICAmX19iNDNfcmF0ZXRhYmxlWzNdKTsKIAl3bC0+YmVhY29uMF91cGxvYWRlZCA9IDE7CiB9CiAKQEAgLTE2MTEsNiArMTU1NywyNyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgYjQzX2RvX2JlYWNvbl91cGRhdGVfdHJpZ2dlcl93b3JrKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwl1MzIgb2xkX2lycV9tYXNrID0gZGV2LT5pcnFfbWFzazsKKworCS8qIHVwZGF0ZSBiZWFjb24gcmlnaHQgYXdheSBvciBkZWZlciB0byBpcnEgKi8KKwloYW5kbGVfaXJxX2JlYWNvbihkZXYpOworCWlmIChvbGRfaXJxX21hc2sgIT0gZGV2LT5pcnFfbWFzaykgeworCQkvKiBUaGUgaGFuZGxlciB1cGRhdGVkIHRoZSBJUlEgbWFzay4gKi8KKwkJQjQzX1dBUk5fT04oIWRldi0+aXJxX21hc2spOworCQlpZiAoYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfTUFTSykpIHsKKwkJCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fR0VOX0lSUV9NQVNLLCBkZXYtPmlycV9tYXNrKTsKKwkJfSBlbHNlIHsKKwkJCS8qIERldmljZSBpbnRlcnJ1cHRzIGFyZSBjdXJyZW50bHkgZGlzYWJsZWQuIFRoYXQgbWVhbnMKKwkJCSAqIHdlIGp1c3QgcmFuIHRoZSBoYXJkaXJxIGhhbmRsZXIgYW5kIHNjaGVkdWxlZCB0aGUKKwkJCSAqIElSUSB0aHJlYWQuIFRoZSB0aHJlYWQgd2lsbCB3cml0ZSB0aGUgSVJRIG1hc2sgd2hlbgorCQkJICogaXQgZmluaXNoZWQsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBkbyBoZXJlLiBXcml0aW5nCisJCQkgKiB0aGUgbWFzayBfaGVyZV8gd291bGQgaW5jb3JyZWN0bHkgcmUtZW5hYmxlIElSUXMuICovCisJCX0KKwl9Cit9CisKIHN0YXRpYyB2b2lkIGI0M19iZWFjb25fdXBkYXRlX3RyaWdnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGI0M193bCwKQEAgLTE2MjAsMTkgKzE1ODcsMjIgQEAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCWRldiA9IHdsLT5jdXJyZW50X2RldjsKIAlpZiAobGlrZWx5KGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkpIHsKLQkJc3Bpbl9sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKLQkJLyogdXBkYXRlIGJlYWNvbiByaWdodCBhd2F5IG9yIGRlZmVyIHRvIGlycSAqLwotCQloYW5kbGVfaXJxX2JlYWNvbihkZXYpOwotCQkvKiBUaGUgaGFuZGxlciBtaWdodCBoYXZlIHVwZGF0ZWQgdGhlIElSUSBtYXNrLiAqLwotCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfTUFTSywgZGV2LT5pcnFfbWFzayk7Ci0JCW1taW93YigpOwotCQlzcGluX3VubG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJCWlmICgwIC8qRklYTUUgZGV2LT5kZXYtPmJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9TRElPKi8pIHsKKwkJCS8qIHdsLT5tdXRleCBpcyBlbm91Z2guICovCisJCQliNDNfZG9fYmVhY29uX3VwZGF0ZV90cmlnZ2VyX3dvcmsoZGV2KTsKKwkJCW1taW93YigpOworCQl9IGVsc2UgeworCQkJc3Bpbl9sb2NrX2lycSgmd2wtPmhhcmRpcnFfbG9jayk7CisJCQliNDNfZG9fYmVhY29uX3VwZGF0ZV90cmlnZ2VyX3dvcmsoZGV2KTsKKwkJCW1taW93YigpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZ3bC0+aGFyZGlycV9sb2NrKTsKKwkJfQogCX0KIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiB9CiAKIC8qIEFzeW5jaHJvbm91c2x5IHVwZGF0ZSB0aGUgcGFja2V0IHRlbXBsYXRlcyBpbiB0ZW1wbGF0ZSBSQU0uCi0gKiBMb2NraW5nOiBSZXF1aXJlcyB3bC0+aXJxX2xvY2sgdG8gYmUgbG9ja2VkLiAqLworICogTG9ja2luZzogUmVxdWlyZXMgd2wtPm11dGV4IHRvIGJlIGxvY2tlZC4gKi8KIHN0YXRpYyB2b2lkIGI0M191cGRhdGVfdGVtcGxhdGVzKHN0cnVjdCBiNDNfd2wgKndsKQogewogCXN0cnVjdCBza19idWZmICpiZWFjb247CkBAIC0xNjU2LDcgKzE2MjYsNyBAQAogCXdsLT5jdXJyZW50X2JlYWNvbiA9IGJlYWNvbjsKIAl3bC0+YmVhY29uMF91cGxvYWRlZCA9IDA7CiAJd2wtPmJlYWNvbjFfdXBsb2FkZWQgPSAwOwotCXF1ZXVlX3dvcmsod2wtPmh3LT53b3JrcXVldWUsICZ3bC0+YmVhY29uX3VwZGF0ZV90cmlnZ2VyKTsKKwlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+YmVhY29uX3VwZGF0ZV90cmlnZ2VyKTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX3NldF9iZWFjb25faW50KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IGJlYWNvbl9pbnQpCkBAIC0xNzY5LDE4ICsxNzM5LDE1IEBACiAJCQlCNDNfREVCVUdJUlFfUkVBU09OX1JFRywgQjQzX0RFQlVHSVJRX0FDSyk7CiB9CiAKLS8qIEludGVycnVwdCBoYW5kbGVyIGJvdHRvbS1oYWxmICovCi1zdGF0aWMgdm9pZCBiNDNfaW50ZXJydXB0X3Rhc2tsZXQoc3RydWN0IGI0M193bGRldiAqZGV2KQorc3RhdGljIHZvaWQgYjQzX2RvX2ludGVycnVwdF90aHJlYWQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXUzMiByZWFzb247CiAJdTMyIGRtYV9yZWFzb25bQVJSQVlfU0laRShkZXYtPmRtYV9yZWFzb24pXTsKIAl1MzIgbWVyZ2VkX2RtYV9yZWFzb24gPSAwOwogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT53bC0+aXJxX2xvY2ssIGZsYWdzKTsKLQotCUI0M19XQVJOX09OKGI0M19zdGF0dXMoZGV2KSAhPSBCNDNfU1RBVF9TVEFSVEVEKTsKKwlpZiAodW5saWtlbHkoYjQzX3N0YXR1cyhkZXYpICE9IEI0M19TVEFUX1NUQVJURUQpKQorCQlyZXR1cm47CiAKIAlyZWFzb24gPSBkZXYtPmlycV9yZWFzb247CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZG1hX3JlYXNvbik7IGkrKykgewpAQCAtMTgxMyw4ICsxNzgwLDYgQEAKIAkJCSAgICAgICBkbWFfcmVhc29uWzJdLCBkbWFfcmVhc29uWzNdLAogCQkJICAgICAgIGRtYV9yZWFzb25bNF0sIGRtYV9yZWFzb25bNV0pOwogCQkJYjQzX2NvbnRyb2xsZXJfcmVzdGFydChkZXYsICJETUEgZXJyb3IiKTsKLQkJCW1taW93YigpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT53bC0+aXJxX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAobWVyZ2VkX2RtYV9yZWFzb24gJiBCNDNfRE1BSVJRX05PTkZBVEFMTUFTSykgewpAQCAtMTg1OCw0NyArMTgyMywzNiBAQAogCWlmIChyZWFzb24gJiBCNDNfSVJRX1RYX09LKQogCQloYW5kbGVfaXJxX3RyYW5zbWl0X3N0YXR1cyhkZXYpOwogCisJLyogUmUtZW5hYmxlIGludGVycnVwdHMgb24gdGhlIGRldmljZSBieSByZXN0b3JpbmcgdGhlIGN1cnJlbnQgaW50ZXJydXB0IG1hc2suICovCiAJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0ssIGRldi0+aXJxX21hc2spOwotCW1taW93YigpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+d2wtPmlycV9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGI0M19pbnRlcnJ1cHRfYWNrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIHJlYXNvbikKKy8qIEludGVycnVwdCB0aHJlYWQgaGFuZGxlci4gSGFuZGxlcyBkZXZpY2UgaW50ZXJydXB0cyBpbiB0aHJlYWQgY29udGV4dC4gKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBiNDNfaW50ZXJydXB0X3RocmVhZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfUkVBU09OLCByZWFzb24pOwotCi0JYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19ETUEwX1JFQVNPTiwgZGV2LT5kbWFfcmVhc29uWzBdKTsKLQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTFfUkVBU09OLCBkZXYtPmRtYV9yZWFzb25bMV0pOwotCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fRE1BMl9SRUFTT04sIGRldi0+ZG1hX3JlYXNvblsyXSk7Ci0JYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19ETUEzX1JFQVNPTiwgZGV2LT5kbWFfcmVhc29uWzNdKTsKLQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTRfUkVBU09OLCBkZXYtPmRtYV9yZWFzb25bNF0pOwotLyogVW51c2VkIHJpbmcKLQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTVfUkVBU09OLCBkZXYtPmRtYV9yZWFzb25bNV0pOwotKi8KLX0KLQotLyogSW50ZXJydXB0IGhhbmRsZXIgdG9wLWhhbGYgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBiNDNfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IGRldl9pZDsKKworCW11dGV4X2xvY2soJmRldi0+d2wtPm11dGV4KTsKKwliNDNfZG9faW50ZXJydXB0X3RocmVhZChkZXYpOworCW1taW93YigpOworCW11dGV4X3VubG9jaygmZGV2LT53bC0+bXV0ZXgpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYjQzX2RvX2ludGVycnVwdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CiAJdTMyIHJlYXNvbjsKIAotCUI0M19XQVJOX09OKCFkZXYpOworCS8qIFRoaXMgY29kZSBydW5zIHVuZGVyIHdsLT5oYXJkaXJxX2xvY2ssIGJ1dCBfb25seV8gb24gbm9uLVNESU8gYnVzc2VzLgorCSAqIE9uIFNESU8sIHRoaXMgcnVucyB1bmRlciB3bC0+bXV0ZXguICovCiAKLQlzcGluX2xvY2soJmRldi0+d2wtPmlycV9sb2NrKTsKLQotCWlmICh1bmxpa2VseShiNDNfc3RhdHVzKGRldikgPCBCNDNfU1RBVF9TVEFSVEVEKSkgewotCQkvKiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBvbiBzaGFyZWQgSVJRIGxpbmVzLiAqLwotCQlnb3RvIG91dDsKLQl9CiAJcmVhc29uID0gYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfUkVBU09OKTsKIAlpZiAocmVhc29uID09IDB4ZmZmZmZmZmYpCS8qIHNoYXJlZCBJUlEgKi8KLQkJZ290byBvdXQ7Ci0JcmV0ID0gSVJRX0hBTkRMRUQ7CisJCXJldHVybiBJUlFfTk9ORTsKIAlyZWFzb24gJj0gZGV2LT5pcnFfbWFzazsKIAlpZiAoIXJlYXNvbikKLQkJZ290byBvdXQ7CisJCXJldHVybiBJUlFfSEFORExFRDsKIAogCWRldi0+ZG1hX3JlYXNvblswXSA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19ETUEwX1JFQVNPTikKIAkgICAgJiAweDAwMDFEQzAwOwpAQCAtMTkxNSwxNSArMTg2OSwzOCBAQAogCSAgICAmIDB4MDAwMERDMDA7CiAqLwogCi0JYjQzX2ludGVycnVwdF9hY2soZGV2LCByZWFzb24pOwotCS8qIGRpc2FibGUgYWxsIElSUXMuIFRoZXkgYXJlIGVuYWJsZWQgYWdhaW4gaW4gdGhlIGJvdHRvbSBoYWxmLiAqLworCS8qIEFDSyB0aGUgaW50ZXJydXB0LiAqLworCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fR0VOX0lSUV9SRUFTT04sIHJlYXNvbik7CisJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19ETUEwX1JFQVNPTiwgZGV2LT5kbWFfcmVhc29uWzBdKTsKKwliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTFfUkVBU09OLCBkZXYtPmRtYV9yZWFzb25bMV0pOworCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fRE1BMl9SRUFTT04sIGRldi0+ZG1hX3JlYXNvblsyXSk7CisJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19ETUEzX1JFQVNPTiwgZGV2LT5kbWFfcmVhc29uWzNdKTsKKwliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTRfUkVBU09OLCBkZXYtPmRtYV9yZWFzb25bNF0pOworLyogVW51c2VkIHJpbmcKKwliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTVfUkVBU09OLCBkZXYtPmRtYV9yZWFzb25bNV0pOworKi8KKworCS8qIERpc2FibGUgSVJRcyBvbiB0aGUgZGV2aWNlLiBUaGUgSVJRIHRocmVhZCBoYW5kbGVyIHdpbGwgcmUtZW5hYmxlIHRoZW0uICovCiAJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0ssIDApOwotCS8qIHNhdmUgdGhlIHJlYXNvbiBjb2RlIGFuZCBjYWxsIG91ciBib3R0b20gaGFsZi4gKi8KKwkvKiBTYXZlIHRoZSByZWFzb24gYml0bWFza3MgZm9yIHRoZSBJUlEgdGhyZWFkIGhhbmRsZXIuICovCiAJZGV2LT5pcnFfcmVhc29uID0gcmVhc29uOwotCXRhc2tsZXRfc2NoZWR1bGUoJmRldi0+aXNyX3Rhc2tsZXQpOwotb3V0OgorCisJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKK30KKworLyogSW50ZXJydXB0IGhhbmRsZXIgdG9wLWhhbGYuIFRoaXMgcnVucyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYjQzX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSBkZXZfaWQ7CisJaXJxcmV0dXJuX3QgcmV0OworCisJaWYgKHVubGlrZWx5KGI0M19zdGF0dXMoZGV2KSA8IEI0M19TVEFUX1NUQVJURUQpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlzcGluX2xvY2soJmRldi0+d2wtPmhhcmRpcnFfbG9jayk7CisJcmV0ID0gYjQzX2RvX2ludGVycnVwdChkZXYpOwogCW1taW93YigpOwotCXNwaW5fdW5sb2NrKCZkZXYtPndsLT5pcnFfbG9jayk7CisJc3Bpbl91bmxvY2soJmRldi0+d2wtPmhhcmRpcnFfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjA2MSw4ICsyMDM4LDEyIEBACiAJCWZpbGVuYW1lID0gInVjb2RlNSI7CiAJZWxzZSBpZiAoKHJldiA+PSAxMSkgJiYgKHJldiA8PSAxMikpCiAJCWZpbGVuYW1lID0gInVjb2RlMTEiOwotCWVsc2UgaWYgKHJldiA+PSAxMykKKwllbHNlIGlmIChyZXYgPT0gMTMpCiAJCWZpbGVuYW1lID0gInVjb2RlMTMiOworCWVsc2UgaWYgKHJldiA9PSAxNCkKKwkJZmlsZW5hbWUgPSAidWNvZGUxNCI7CisJZWxzZSBpZiAocmV2ID49IDE1KQorCQlmaWxlbmFtZSA9ICJ1Y29kZTE1IjsKIAllbHNlCiAJCWdvdG8gZXJyX25vX3Vjb2RlOwogCWVyciA9IGI0M19kb19yZXF1ZXN0X2Z3KGN0eCwgZmlsZW5hbWUsICZmdy0+dWNvZGUpOwpAQCAtMjExMCw2ICsyMDkxLDE2IEBACiAJCWVsc2UKIAkJCWdvdG8gZXJyX25vX2luaXR2YWxzOwogCQlicmVhazsKKwljYXNlIEI0M19QSFlUWVBFX0xQOgorCQlpZiAocmV2ID09IDEzKQorCQkJZmlsZW5hbWUgPSAibHAwaW5pdHZhbHMxMyI7CisJCWVsc2UgaWYgKHJldiA9PSAxNCkKKwkJCWZpbGVuYW1lID0gImxwMGluaXR2YWxzMTQiOworCQllbHNlIGlmIChyZXYgPj0gMTUpCisJCQlmaWxlbmFtZSA9ICJscDBpbml0dmFsczE1IjsKKwkJZWxzZQorCQkJZ290byBlcnJfbm9faW5pdHZhbHM7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWdvdG8gZXJyX25vX2luaXR2YWxzOwogCX0KQEAgLTIxNDQsNiArMjEzNSwxNiBAQAogCQllbHNlCiAJCQlnb3RvIGVycl9ub19pbml0dmFsczsKIAkJYnJlYWs7CisJY2FzZSBCNDNfUEhZVFlQRV9MUDoKKwkJaWYgKHJldiA9PSAxMykKKwkJCWZpbGVuYW1lID0gImxwMGJzaW5pdHZhbHMxMyI7CisJCWVsc2UgaWYgKHJldiA9PSAxNCkKKwkJCWZpbGVuYW1lID0gImxwMGJzaW5pdHZhbHMxNCI7CisJCWVsc2UgaWYgKHJldiA+PSAxNSkKKwkJCWZpbGVuYW1lID0gImxwMGJzaW5pdHZhbHMxNSI7CisJCWVsc2UKKwkJCWdvdG8gZXJyX25vX2luaXR2YWxzOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlnb3RvIGVycl9ub19pbml0dmFsczsKIAl9CkBAIC0yNjcxLDYgKzI2NzIsNyBAQAogCWNhc2UgQjQzX1BIWVRZUEVfQToKIAljYXNlIEI0M19QSFlUWVBFX0c6CiAJY2FzZSBCNDNfUEhZVFlQRV9OOgorCWNhc2UgQjQzX1BIWVRZUEVfTFA6CiAJCWI0M19yYXRlX21lbW9yeV93cml0ZShkZXYsIEI0M19PRkRNX1JBVEVfNk1CLCAxKTsKIAkJYjQzX3JhdGVfbWVtb3J5X3dyaXRlKGRldiwgQjQzX09GRE1fUkFURV8xMk1CLCAxKTsKIAkJYjQzX3JhdGVfbWVtb3J5X3dyaXRlKGRldiwgQjQzX09GRE1fUkFURV8xOE1CLCAxKTsKQEAgLTI5MTYsNyArMjkxOCw3IEBACiAJCWRlbGF5ID0gbXNlY3NfdG9famlmZmllcyg1MCk7CiAJZWxzZQogCQlkZWxheSA9IHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFogKiAxNSk7Ci0JcXVldWVfZGVsYXllZF93b3JrKHdsLT5ody0+d29ya3F1ZXVlLCAmZGV2LT5wZXJpb2RpY193b3JrLCBkZWxheSk7CisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayh3bC0+aHcsICZkZXYtPnBlcmlvZGljX3dvcmssIGRlbGF5KTsKIG91dDoKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiB9CkBAIC0yOTI3LDE1ICsyOTI5LDE2IEBACiAKIAlkZXYtPnBlcmlvZGljX3N0YXRlID0gMDsKIAlJTklUX0RFTEFZRURfV09SSyh3b3JrLCBiNDNfcGVyaW9kaWNfd29ya19oYW5kbGVyKTsKLQlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2LT53bC0+aHctPndvcmtxdWV1ZSwgd29yaywgMCk7CisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhkZXYtPndsLT5odywgd29yaywgMCk7CiB9CiAKIC8qIENoZWNrIGlmIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZGV2aWNlIHdvcmtzIGNvcnJlY3RseS4gKi8KIHN0YXRpYyBpbnQgYjQzX3ZhbGlkYXRlX2NoaXBhY2Nlc3Moc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCXUzMiB2LCBiYWNrdXA7CisJdTMyIHYsIGJhY2t1cDAsIGJhY2t1cDQ7CiAKLQliYWNrdXAgPSBiNDNfc2htX3JlYWQzMihkZXYsIEI0M19TSE1fU0hBUkVELCAwKTsKKwliYWNrdXAwID0gYjQzX3NobV9yZWFkMzIoZGV2LCBCNDNfU0hNX1NIQVJFRCwgMCk7CisJYmFja3VwNCA9IGI0M19zaG1fcmVhZDMyKGRldiwgQjQzX1NITV9TSEFSRUQsIDQpOwogCiAJLyogQ2hlY2sgZm9yIHJlYWQvd3JpdGUgYW5kIGVuZGlhbm5lc3MgcHJvYmxlbXMuICovCiAJYjQzX3NobV93cml0ZTMyKGRldiwgQjQzX1NITV9TSEFSRUQsIDAsIDB4NTVBQUFBNTUpOwpAQCAtMjk0NSw3ICsyOTQ4LDIzIEBACiAJaWYgKGI0M19zaG1fcmVhZDMyKGRldiwgQjQzX1NITV9TSEFSRUQsIDApICE9IDB4QUE1NTU1QUEpCiAJCWdvdG8gZXJyb3I7CiAKLQliNDNfc2htX3dyaXRlMzIoZGV2LCBCNDNfU0hNX1NIQVJFRCwgMCwgYmFja3VwKTsKKwkvKiBDaGVjayBpZiB1bmFsaWduZWQgMzJiaXQgU0hNX1NIQVJFRCBhY2Nlc3Mgd29ya3MgcHJvcGVybHkuCisJICogSG93ZXZlciwgZG9uJ3QgYmFpbCBvdXQgb24gZmFpbHVyZSwgYmVjYXVzZSBpdCdzIG5vbmNyaXRpY2FsLiAqLworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCAwLCAweDExMjIpOworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCAyLCAweDMzNDQpOworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCA0LCAweDU1NjYpOworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCA2LCAweDc3ODgpOworCWlmIChiNDNfc2htX3JlYWQzMihkZXYsIEI0M19TSE1fU0hBUkVELCAyKSAhPSAweDU1NjYzMzQ0KQorCQliNDN3YXJuKGRldi0+d2wsICJVbmFsaWduZWQgMzJiaXQgU0hNIHJlYWQgYWNjZXNzIGlzIGJyb2tlblxuIik7CisJYjQzX3NobV93cml0ZTMyKGRldiwgQjQzX1NITV9TSEFSRUQsIDIsIDB4QUFCQkNDREQpOworCWlmIChiNDNfc2htX3JlYWQxNihkZXYsIEI0M19TSE1fU0hBUkVELCAwKSAhPSAweDExMjIgfHwKKwkgICAgYjQzX3NobV9yZWFkMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgMikgIT0gMHhDQ0REIHx8CisJICAgIGI0M19zaG1fcmVhZDE2KGRldiwgQjQzX1NITV9TSEFSRUQsIDQpICE9IDB4QUFCQiB8fAorCSAgICBiNDNfc2htX3JlYWQxNihkZXYsIEI0M19TSE1fU0hBUkVELCA2KSAhPSAweDc3ODgpCisJCWI0M3dhcm4oZGV2LT53bCwgIlVuYWxpZ25lZCAzMmJpdCBTSE0gd3JpdGUgYWNjZXNzIGlzIGJyb2tlblxuIik7CisKKwliNDNfc2htX3dyaXRlMzIoZGV2LCBCNDNfU0hNX1NIQVJFRCwgMCwgYmFja3VwMCk7CisJYjQzX3NobV93cml0ZTMyKGRldiwgQjQzX1NITV9TSEFSRUQsIDQsIGJhY2t1cDQpOwogCiAJaWYgKChkZXYtPmRldi0+aWQucmV2aXNpb24gPj0gMykgJiYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA8PSAxMCkpIHsKIAkJLyogVGhlIDMyYml0IHJlZ2lzdGVyIHNoYWRvd3MgdGhlIHR3byAxNmJpdCByZWdpc3RlcnMKQEAgLTI5NzIsMTcgKzI5OTEsMTQgQEAKIAogc3RhdGljIHZvaWQgYjQzX3NlY3VyaXR5X2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCWRldi0+bWF4X25yX2tleXMgPSAoZGV2LT5kZXYtPmlkLnJldmlzaW9uID49IDUpID8gNTggOiAyMDsKLQlCNDNfV0FSTl9PTihkZXYtPm1heF9ucl9rZXlzID4gQVJSQVlfU0laRShkZXYtPmtleSkpOwogCWRldi0+a3RwID0gYjQzX3NobV9yZWFkMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9LVFApOwogCS8qIEtUUCBpcyBhIHdvcmQgYWRkcmVzcywgYnV0IHdlIGFkZHJlc3MgU0hNIGJ5dGV3aXNlLgogCSAqIFNvIG11bHRpcGx5IGJ5IHR3by4KIAkgKi8KIAlkZXYtPmt0cCAqPSAyOwotCWlmIChkZXYtPmRldi0+aWQucmV2aXNpb24gPj0gNSkgewotCQkvKiBOdW1iZXIgb2YgUkNNVEEgYWRkcmVzcyBzbG90cyAqLwotCQliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX1JDTVRBX0NPVU5ULCBkZXYtPm1heF9ucl9rZXlzIC0gOCk7Ci0JfQorCS8qIE51bWJlciBvZiBSQ01UQSBhZGRyZXNzIHNsb3RzICovCisJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19SQ01UQV9DT1VOVCwgQjQzX05SX1BBSVJXSVNFX0tFWVMpOworCS8qIENsZWFyIHRoZSBrZXkgbWVtb3J5LiAqLwogCWI0M19jbGVhcl9rZXlzKGRldik7CiB9CiAKQEAgLTI5OTAsMTUgKzMwMDYsMTIgQEAKIHN0YXRpYyBpbnQgYjQzX3JuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB1MzIgKmRhdGEpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSAoc3RydWN0IGI0M193bCAqKXJuZy0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogRG9uJ3QgdGFrZSB3bC0+bXV0ZXggaGVyZSwgYXMgaXQgY291bGQgZGVhZGxvY2sgd2l0aAotCSAqIGh3cm5nIGludGVybmFsIGxvY2tpbmcuIEl0J3Mgbm90IG5lZWRlZCB0byB0YWtlCi0JICogd2wtPm11dGV4IGhlcmUsIGFueXdheS4gKi8KKwkvKiBGSVhNRTogV2UgbmVlZCB0byB0YWtlIHdsLT5tdXRleCBoZXJlIHRvIG1ha2Ugc3VyZSB0aGUgZGV2aWNlCisJICogaXMgbm90IGdvaW5nIGF3YXkgZnJvbSB1bmRlciBvdXIgYXNzLiBIb3dldmVyIGl0IGNvdWxkIGRlYWRsb2NrCisJICogd2l0aCBod3JuZyBpbnRlcm5hbCBsb2NraW5nLiAqLwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCSpkYXRhID0gYjQzX3JlYWQxNih3bC0+Y3VycmVudF9kZXYsIEI0M19NTUlPX1JORyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gKHNpemVvZih1MTYpKTsKIH0KQEAgLTMwMzQsNDYgKzMwNDcsNTIgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGI0M19vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgYjQzX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKLQlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSB3bC0+Y3VycmVudF9kZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyOworCXN0cnVjdCBiNDNfd2wgKndsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiNDNfd2wsIHR4X3dvcmspOworCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBlcnIgPSAwOwogCi0JaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgMiArIDIgKyA2KSkgewotCQkvKiBUb28gc2hvcnQsIHRoaXMgY2FuJ3QgYmUgYSB2YWxpZCBmcmFtZS4gKi8KLQkJZ290byBkcm9wX3BhY2tldDsKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWRldiA9IHdsLT5jdXJyZW50X2RldjsKKwlpZiAodW5saWtlbHkoIWRldiB8fCBiNDNfc3RhdHVzKGRldikgPCBCNDNfU1RBVF9TVEFSVEVEKSkgeworCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJCXJldHVybjsKIAl9Ci0JQjQzX1dBUk5fT04oc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyk7Ci0JaWYgKHVubGlrZWx5KCFkZXYpKQotCQlnb3RvIGRyb3BfcGFja2V0OwogCi0JLyogVHJhbnNtaXNzaW9ucyBvbiBzZXBlcmF0ZSBxdWV1ZXMgY2FuIHJ1biBjb25jdXJyZW50bHkuICovCi0JcmVhZF9sb2NrX2lycXNhdmUoJndsLT50eF9sb2NrLCBmbGFncyk7CisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJndsLT50eF9xdWV1ZSkpIHsKKwkJc2tiID0gc2tiX2RlcXVldWUoJndsLT50eF9xdWV1ZSk7CiAKLQllcnIgPSAtRU5PREVWOwotCWlmIChsaWtlbHkoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX1NUQVJURUQpKSB7CiAJCWlmIChiNDNfdXNpbmdfcGlvX3RyYW5zZmVycyhkZXYpKQogCQkJZXJyID0gYjQzX3Bpb190eChkZXYsIHNrYik7CiAJCWVsc2UKIAkJCWVyciA9IGI0M19kbWFfdHgoZGV2LCBza2IpOworCQlpZiAodW5saWtlbHkoZXJyKSkKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsgLyogRHJvcCBpdCAqLwogCX0KIAotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJndsLT50eF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQogCi0JaWYgKHVubGlrZWx5KGVycikpCi0JCWdvdG8gZHJvcF9wYWNrZXQ7Ci0JcmV0dXJuIE5FVERFVl9UWF9PSzsKK3N0YXRpYyBpbnQgYjQzX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCi1kcm9wX3BhY2tldDoKLQkvKiBXZSBjYW4gbm90IHRyYW5zbWl0IHRoaXMgcGFja2V0LiBEcm9wIGl0LiAqLwotCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgMiArIDIgKyA2KSkgeworCQkvKiBUb28gc2hvcnQsIHRoaXMgY2FuJ3QgYmUgYSB2YWxpZCBmcmFtZS4gKi8KKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisJQjQzX1dBUk5fT04oc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyk7CisKKwlza2JfcXVldWVfdGFpbCgmd2wtPnR4X3F1ZXVlLCBza2IpOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKHdsLT5odywgJndsLT50eF93b3JrKTsKKwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKLS8qIExvY2tpbmc6IHdsLT5pcnFfbG9jayAqLwogc3RhdGljIHZvaWQgYjQzX3Fvc19wYXJhbXNfdXBsb2FkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwLAogCQkJCSAgdTE2IHNobV9vZmZzZXQpCkBAIC0zMDgyLDYgKzMxMDEsOSBAQAogCWludCBic2xvdHMsIHRtcDsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCWlmICghZGV2LT5xb3NfZW5hYmxlZCkKKwkJcmV0dXJuOworCiAJYnNsb3RzID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1JORykgJiBwLT5jd19taW47CiAKIAltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOwpAQCAtMzEyNyw2ICszMTQ5LDkgQEAKIAlzdHJ1Y3QgYjQzX3Fvc19wYXJhbXMgKnBhcmFtczsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCWlmICghZGV2LT5xb3NfZW5hYmxlZCkKKwkJcmV0dXJuOworCiAJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoYjQzX3Fvc19zaG1fb2Zmc2V0cykgIT0KIAkJICAgICBBUlJBWV9TSVpFKHdsLT5xb3NfcGFyYW1zKSk7CiAKQEAgLTMxODYsNiArMzIxMSwxNiBAQAogLyogSW5pdGlhbGl6ZSB0aGUgY29yZSdzIFFPUyBjYXBhYmlsaXRpZXMgKi8KIHN0YXRpYyB2b2lkIGI0M19xb3NfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CisJaWYgKCFkZXYtPnFvc19lbmFibGVkKSB7CisJCS8qIERpc2FibGUgUU9TIHN1cHBvcnQuICovCisJCWI0M19oZl93cml0ZShkZXYsIGI0M19oZl9yZWFkKGRldikgJiB+QjQzX0hGX0VEQ0YpOworCQliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX0lGU0NUTCwKKwkJCSAgICBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fSUZTQ1RMKQorCQkJICAgICYgfkI0M19NTUlPX0lGU0NUTF9VU0VfRURDRik7CisJCWI0M2RiZyhkZXYtPndsLCAiUW9TIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwogCS8qIFVwbG9hZCB0aGUgY3VycmVudCBRT1MgcGFyYW1ldGVycy4gKi8KIAliNDNfcW9zX3VwbG9hZF9hbGwoZGV2KTsKIApAQCAtMzE5NCw2ICszMjI5LDcgQEAKIAliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX0lGU0NUTCwKIAkJICAgIGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19JRlNDVEwpCiAJCSAgICB8IEI0M19NTUlPX0lGU0NUTF9VU0VfRURDRik7CisJYjQzZGJnKGRldi0+d2wsICJRb1MgZW5hYmxlZFxuIik7CiB9CiAKIHN0YXRpYyBpbnQgYjQzX29wX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBfcXVldWUsCkBAIC0zMjM1LDIyICszMjcxLDIwIEBACiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwotCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IHdsLT5jdXJyZW50X2RldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKIAlpbnQgZXJyID0gLUVOT0RFVjsKIAotCWlmICghZGV2KQotCQlnb3RvIG91dDsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7Ci0JaWYgKGxpa2VseShiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfU1RBUlRFRCkpIHsKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWRldiA9IHdsLT5jdXJyZW50X2RldjsKKwlpZiAoZGV2ICYmIGI0M19zdGF0dXMoZGV2KSA+PSBCNDNfU1RBVF9TVEFSVEVEKSB7CiAJCWlmIChiNDNfdXNpbmdfcGlvX3RyYW5zZmVycyhkZXYpKQogCQkJYjQzX3Bpb19nZXRfdHhfc3RhdHMoZGV2LCBzdGF0cyk7CiAJCWVsc2UKIAkJCWI0M19kbWFfZ2V0X3R4X3N0YXRzKGRldiwgc3RhdHMpOwogCQllcnIgPSAwOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKLW91dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zMjU4LDExICszMjkyLDEwIEBACiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAJbWVtY3B5KHN0YXRzLCAmd2wtPmllZWVfc3RhdHMsIHNpemVvZigqc3RhdHMpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyNzQsNyArMzMwNyw2IEBACiAJdTY0IHRzZjsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKIAlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAKIAlpZiAoZGV2ICYmIChiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfSU5JVElBTElaRUQpKQpAQCAtMzI4Miw3ICszMzE0LDYgQEAKIAllbHNlCiAJCXRzZiA9IDA7CiAKLQlzcGluX3VubG9ja19pcnEoJndsLT5pcnFfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCiAJcmV0dXJuIHRzZjsKQEAgLTMyOTQsMTMgKzMzMjUsMTEgQEAKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnEoJndsLT5pcnFfbG9jayk7CiAJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwogCiAJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkKIAkJYjQzX3RzZl93cml0ZShkZXYsIHRzZik7CiAKLQlzcGluX3VubG9ja19pcnEoJndsLT5pcnFfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogfQogCkBAIC0zMzg2LDcgKzM0MTUsNyBAQAogCXByZXZfc3RhdHVzID0gYjQzX3N0YXR1cyhkb3duX2Rldik7CiAJLyogU2h1dGRvd24gdGhlIGN1cnJlbnRseSBydW5uaW5nIGNvcmUuICovCiAJaWYgKHByZXZfc3RhdHVzID49IEI0M19TVEFUX1NUQVJURUQpCi0JCWI0M193aXJlbGVzc19jb3JlX3N0b3AoZG93bl9kZXYpOworCQlkb3duX2RldiA9IGI0M193aXJlbGVzc19jb3JlX3N0b3AoZG93bl9kZXYpOwogCWlmIChwcmV2X3N0YXR1cyA+PSBCNDNfU1RBVF9JTklUSUFMSVpFRCkKIAkJYjQzX3dpcmVsZXNzX2NvcmVfZXhpdChkb3duX2Rldik7CiAKQEAgLTM0NTAsNyArMzQ3OSw2IEBACiAJc3RydWN0IGI0M193bGRldiAqZGV2OwogCXN0cnVjdCBiNDNfcGh5ICpwaHk7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGFudGVubmE7CiAJaW50IGVyciA9IDA7CiAKQEAgLTM0ODEsMTMgKzM1MDksMTEgQEAKIAogCS8qIEFkanVzdCB0aGUgZGVzaXJlZCBUWCBwb3dlciBsZXZlbC4gKi8KIAlpZiAoY29uZi0+cG93ZXJfbGV2ZWwgIT0gMCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAJCWlmIChjb25mLT5wb3dlcl9sZXZlbCAhPSBwaHktPmRlc2lyZWRfdHhwb3dlcikgewogCQkJcGh5LT5kZXNpcmVkX3R4cG93ZXIgPSBjb25mLT5wb3dlcl9sZXZlbDsKIAkJCWI0M19waHlfdHhwb3dlcl9jaGVjayhkZXYsIEI0M19UWFBXUl9JR05PUkVfVElNRSB8CiAJCQkJCQkgICBCNDNfVFhQV1JfSUdOT1JFX1RTU0kpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCX0KIAogCS8qIEFudGVubmFzIGZvciBSWCBhbmQgbWFuYWdlbWVudCBmcmFtZSBUWC4gKi8KQEAgLTM1NzIsNyArMzU5OCw2IEBACiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIApAQCAtMzU4Miw3ICszNjA3LDYgQEAKIAogCUI0M19XQVJOX09OKHdsLT52aWYgIT0gdmlmKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSB7CiAJCWlmIChjb25mLT5ic3NpZCkKIAkJCW1lbWNweSh3bC0+YnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7CkBAIC0zNjAwLDcgKzM2MjQsNiBAQAogCQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKQogCQkJYjQzX3dyaXRlX21hY19ic3NpZF90ZW1wbGF0ZXMoZGV2KTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAKIAliNDNfbWFjX3N1c3BlbmQoZGV2KTsKIApAQCAtMzY0MSwxNSArMzY2NCw2IEBACiAJCXJldHVybiAtRU5PU1BDOyAvKiBVc2VyIGRpc2FibGVkIEhXLWNyeXB0byAqLwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOwotCXdyaXRlX2xvY2soJndsLT50eF9sb2NrKTsKLQkvKiBXaHkgZG8gd2UgbmVlZCBhbGwgdGhpcyBsb2NraW5nIGhlcmU/Ci0JICogbXV0ZXggICAgIC0+IEV2ZXJ5IGNvbmZpZyBvcGVyYXRpb24gbXVzdCB0YWtlIGl0LgotCSAqIGlycV9sb2NrICAtPiBXZSBtb2RpZnkgdGhlIGRldi0+a2V5IGFycmF5LCB3aGljaCBpcyBhY2Nlc3NlZAotCSAqICAgICAgICAgICAgICBpbiB0aGUgSVJRIGhhbmRsZXJzLgotCSAqIHR4X2xvY2sgICAtPiBXZSBtb2RpZnkgdGhlIGRldi0+a2V5IGFycmF5LCB3aGljaCBpcyBhY2Nlc3NlZAotCSAqICAgICAgICAgICAgICBpbiB0aGUgVFggaGFuZGxlci4KLQkgKi8KIAogCWRldiA9IHdsLT5jdXJyZW50X2RldjsKIAllcnIgPSAtRU5PREVWOwpAQCAtMzY4Nyw4ICszNzAxLDEwIEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0VUX0tFWToKLQkJaWYgKGFsZ29yaXRobSA9PSBCNDNfU0VDX0FMR09fVEtJUCkgewotCQkJLyogRklYTUU6IE5vIFRLSVAgaGFyZHdhcmUgZW5jcnlwdGlvbiBmb3Igbm93LiAqLworCQlpZiAoYWxnb3JpdGhtID09IEI0M19TRUNfQUxHT19US0lQICYmCisJCSAgICAoIShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSB8fAorCQkgICAgIW1vZHBhcmFtX2h3dGtpcCkpIHsKKwkJCS8qIFdlIHN1cHBvcnQgb25seSBwYWlyd2lzZSBrZXkgKi8KIAkJCWVyciA9IC1FT1BOT1RTVVBQOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CkBAIC0zNzE4LDYgKzM3MzQsOCBAQAogCQkJCSAgICAgYjQzX2hmX3JlYWQoZGV2KSAmIH5CNDNfSEZfVVNFREVGS0VZUyk7CiAJCX0KIAkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CisJCWlmIChhbGdvcml0aG0gPT0gQjQzX1NFQ19BTEdPX1RLSVApCisJCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDOwogCQlicmVhazsKIAljYXNlIERJU0FCTEVfS0VZOiB7CiAJCWVyciA9IGI0M19rZXlfY2xlYXIoZGV2LCBrZXktPmh3X2tleV9pZHgpOwpAQCAtMzczNyw4ICszNzU1LDYgQEAKIAkJICAgICAgIHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHIpOwogCQliNDNfZHVtcF9rZXltZW1vcnkoZGV2KTsKIAl9Ci0Jd3JpdGVfdW5sb2NrKCZ3bC0+dHhfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOwogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIAogCXJldHVybiBlcnI7CkBAIC0zNzQ2LDE4ICszNzYyLDE4IEBACiAKIHN0YXRpYyB2b2lkIGI0M19vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZCwgdW5zaWduZWQgaW50ICpmZmxhZ3MsCi0JCQkJICAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCisJCQkJICAgIHU2NCBtdWx0aWNhc3QpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwotCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IHdsLT5jdXJyZW50X2RldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKIAorCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwogCWlmICghZGV2KSB7CiAJCSpmZmxhZ3MgPSAwOwotCQlyZXR1cm47CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAJKmZmbGFncyAmPSBGSUZfUFJPTUlTQ19JTl9CU1MgfAogCQkgIEZJRl9BTExNVUxUSSB8CiAJCSAgRklGX0ZDU0ZBSUwgfApAQCAtMzc3OCw0MSArMzc5NCw3MCBAQAogCiAJaWYgKGNoYW5nZWQgJiYgYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKQogCQliNDNfYWRqdXN0X29wbW9kZShkZXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIH0KIAotLyogTG9ja2luZzogd2wtPm11dGV4ICovCi1zdGF0aWMgdm9pZCBiNDNfd2lyZWxlc3NfY29yZV9zdG9wKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKKy8qIExvY2tpbmc6IHdsLT5tdXRleAorICogUmV0dXJucyB0aGUgY3VycmVudCBkZXYuIFRoaXMgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gdGhlIHBhc3NlZCBpbiBkZXYsCisgKiBiZWNhdXNlIHRoZSBjb3JlIG1pZ2h0IGJlIGdvbmUgYXdheSB3aGlsZSB3ZSB1bmxvY2tlZCB0aGUgbXV0ZXguICovCitzdGF0aWMgc3RydWN0IGI0M193bGRldiAqIGI0M193aXJlbGVzc19jb3JlX3N0b3Aoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gZGV2LT53bDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBiNDNfd2xkZXYgKm9yaWdfZGV2OwogCi0JaWYgKGI0M19zdGF0dXMoZGV2KSA8IEI0M19TVEFUX1NUQVJURUQpCi0JCXJldHVybjsKK3JlZG86CisJaWYgKCFkZXYgfHwgYjQzX3N0YXR1cyhkZXYpIDwgQjQzX1NUQVRfU1RBUlRFRCkKKwkJcmV0dXJuIGRldjsKIAotCS8qIERpc2FibGUgYW5kIHN5bmMgaW50ZXJydXB0cy4gV2UgbXVzdCBkbyB0aGlzIGJlZm9yZSB0aGFuCi0JICogc2V0dGluZyB0aGUgc3RhdHVzIHRvIElOSVRJQUxJWkVELCBhcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIKLQkgKiB3b24ndCBjYXJlIGFib3V0IElSUXMgdGhlbi4gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7Ci0JYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0ssIDApOwotCWI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0spOwkvKiBmbHVzaCAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwotCWI0M19zeW5jaHJvbml6ZV9pcnEoZGV2KTsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmd2wtPnR4X2xvY2ssIGZsYWdzKTsKLQliNDNfc2V0X3N0YXR1cyhkZXYsIEI0M19TVEFUX0lOSVRJQUxJWkVEKTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPnR4X2xvY2ssIGZsYWdzKTsKLQotCWI0M19waW9fc3RvcChkZXYpOworCS8qIENhbmNlbCB3b3JrLiBVbmxvY2sgdG8gYXZvaWQgZGVhZGxvY2tzLiAqLwogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQkvKiBNdXN0IHVubG9jayBhcyBpdCB3b3VsZCBvdGhlcndpc2UgZGVhZGxvY2suIE5vIHJhY2VzIGhlcmUuCi0JICogQ2FuY2VsIHRoZSBwb3NzaWJseSBydW5uaW5nIHNlbGYtcmVhcm1pbmcgcGVyaW9kaWMgd29yay4gKi8KIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldi0+cGVyaW9kaWNfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmd2wtPnR4X3dvcmspOwogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OworCWlmICghZGV2IHx8IGI0M19zdGF0dXMoZGV2KSA8IEI0M19TVEFUX1NUQVJURUQpIHsKKwkJLyogV2hvb3BzLCBhbGllbnMgYXRlIHVwIHRoZSBkZXZpY2Ugd2hpbGUgd2Ugd2VyZSB1bmxvY2tlZC4gKi8KKwkJcmV0dXJuIGRldjsKKwl9CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgb24gdGhlIGRldmljZS4gKi8KKwliNDNfc2V0X3N0YXR1cyhkZXYsIEI0M19TVEFUX0lOSVRJQUxJWkVEKTsKKwlpZiAoMCAvKkZJWE1FIGRldi0+ZGV2LT5idXMtPmJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfU0RJTyovKSB7CisJCS8qIHdsLT5tdXRleCBpcyBsb2NrZWQuIFRoYXQgaXMgZW5vdWdoLiAqLworCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfTUFTSywgMCk7CisJCWI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0spOwkvKiBGbHVzaCAqLworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnEoJndsLT5oYXJkaXJxX2xvY2spOworCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfTUFTSywgMCk7CisJCWI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0spOwkvKiBGbHVzaCAqLworCQlzcGluX3VubG9ja19pcnEoJndsLT5oYXJkaXJxX2xvY2spOworCX0KKwkvKiBTeW5jaHJvbml6ZSB0aGUgaW50ZXJydXB0IGhhbmRsZXJzLiBVbmxvY2sgdG8gYXZvaWQgZGVhZGxvY2tzLiAqLworCW9yaWdfZGV2ID0gZGV2OworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwlzeW5jaHJvbml6ZV9pcnEoZGV2LT5kZXYtPmlycSk7CisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisJaWYgKCFkZXYpCisJCXJldHVybiBkZXY7CisJaWYgKGRldiAhPSBvcmlnX2RldikgeworCQlpZiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX1NUQVJURUQpCisJCQlnb3RvIHJlZG87CisJCXJldHVybiBkZXY7CisJfQorCUI0M19XQVJOX09OKGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0spKTsKKworCS8qIERyYWluIHRoZSBUWCBxdWV1ZSAqLworCXdoaWxlIChza2JfcXVldWVfbGVuKCZ3bC0+dHhfcXVldWUpKQorCQlkZXZfa2ZyZWVfc2tiKHNrYl9kZXF1ZXVlKCZ3bC0+dHhfcXVldWUpKTsKIAogCWI0M19tYWNfc3VzcGVuZChkZXYpOwogCWZyZWVfaXJxKGRldi0+ZGV2LT5pcnEsIGRldik7CiAJYjQzZGJnKHdsLCAiV2lyZWxlc3MgaW50ZXJmYWNlIHN0b3BwZWRcbiIpOworCisJcmV0dXJuIGRldjsKIH0KIAogLyogTG9ja2luZzogd2wtPm11dGV4ICovCkBAIC0zODIzLDggKzM4NjgsOSBAQAogCUI0M19XQVJOX09OKGI0M19zdGF0dXMoZGV2KSAhPSBCNDNfU1RBVF9JTklUSUFMSVpFRCk7CiAKIAlkcmFpbl90eHN0YXR1c19xdWV1ZShkZXYpOwotCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+ZGV2LT5pcnEsIGI0M19pbnRlcnJ1cHRfaGFuZGxlciwKLQkJCSAgSVJRRl9TSEFSRUQsIEtCVUlMRF9NT0ROQU1FLCBkZXYpOworCWVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGRldi0+ZGV2LT5pcnEsIGI0M19pbnRlcnJ1cHRfaGFuZGxlciwKKwkJCQkgICBiNDNfaW50ZXJydXB0X3RocmVhZF9oYW5kbGVyLAorCQkJCSAgIElSUUZfU0hBUkVELCBLQlVJTERfTU9ETkFNRSwgZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWI0M2VycihkZXYtPndsLCAiQ2Fubm90IHJlcXVlc3QgSVJRLSVkXG4iLCBkZXYtPmRldi0+aXJxKTsKIAkJZ290byBvdXQ7CkBAIC0zODg1LDcgKzM5MzEsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0I0M19QSFlfTFAKIAljYXNlIEI0M19QSFlUWVBFX0xQOgotCQlpZiAocGh5X3JldiA+IDEpCisJCWlmIChwaHlfcmV2ID4gMikKIAkJCXVuc3VwcG9ydGVkID0gMTsKIAkJYnJlYWs7CiAjZW5kaWYKQEAgLTM5NDIsNyArMzk4OCw3IEBACiAJCQl1bnN1cHBvcnRlZCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQjQzX1BIWVRZUEVfTFA6Ci0JCWlmIChyYWRpb192ZXIgIT0gMHgyMDYyKQorCQlpZiAocmFkaW9fdmVyICE9IDB4MjA2MiAmJiByYWRpb192ZXIgIT0gMHgyMDYzKQogCQkJdW5zdXBwb3J0ZWQgPSAxOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNDA0NiwxNiArNDA5MiwyMCBAQAogCSAgICBidXMtPnBjaWNvcmUuZGV2LT5pZC5yZXZpc2lvbiA8PSA1KSB7CiAJCS8qIElNQ0ZHTE8gdGltZW91dHMgd29ya2Fyb3VuZC4gKi8KIAkJdG1wID0gc3NiX3JlYWQzMihkZXYtPmRldiwgU1NCX0lNQ0ZHTE8pOwotCQl0bXAgJj0gflNTQl9JTUNGR0xPX1JFUVRPOwotCQl0bXAgJj0gflNTQl9JTUNGR0xPX1NFUlRPOwogCQlzd2l0Y2ggKGJ1cy0+YnVzdHlwZSkgewogCQljYXNlIFNTQl9CVVNUWVBFX1BDSToKIAkJY2FzZSBTU0JfQlVTVFlQRV9QQ01DSUE6CisJCQl0bXAgJj0gflNTQl9JTUNGR0xPX1JFUVRPOworCQkJdG1wICY9IH5TU0JfSU1DRkdMT19TRVJUTzsKIAkJCXRtcCB8PSAweDMyOwogCQkJYnJlYWs7CiAJCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgorCQkJdG1wICY9IH5TU0JfSU1DRkdMT19SRVFUTzsKKwkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fU0VSVE87CiAJCQl0bXAgfD0gMHg1MzsKIAkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CiAJCX0KIAkJc3NiX3dyaXRlMzIoZGV2LT5kZXYsIFNTQl9JTUNGR0xPLCB0bXApOwogCX0KQEAgLTQxMDMsOCArNDE1Myw4IEBACiB7CiAJdTMyIG1hY2N0bDsKIAotCUI0M19XQVJOX09OKGI0M19zdGF0dXMoZGV2KSA+IEI0M19TVEFUX0lOSVRJQUxJWkVEKTsKLQlpZiAoYjQzX3N0YXR1cyhkZXYpICE9IEI0M19TVEFUX0lOSVRJQUxJWkVEKQorCUI0M19XQVJOX09OKGRldiAmJiBiNDNfc3RhdHVzKGRldikgPiBCNDNfU1RBVF9JTklUSUFMSVpFRCk7CisJaWYgKCFkZXYgfHwgYjQzX3N0YXR1cyhkZXYpICE9IEI0M19TVEFUX0lOSVRJQUxJWkVEKQogCQlyZXR1cm47CiAJYjQzX3NldF9zdGF0dXMoZGV2LCBCNDNfU1RBVF9VTklOSVQpOwogCkBAIC00MjU3LDcgKzQzMDcsNiBAQAogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gLUVPUE5PVFNVUFA7CiAKIAkvKiBUT0RPOiBhbGxvdyBXRFMvQVAgZGV2aWNlcyB0byBjb2V4aXN0ICovCkBAIC00MjgxLDEyICs0MzMwLDEwIEBACiAJd2wtPmlmX3R5cGUgPSBjb25mLT50eXBlOwogCW1lbWNweSh3bC0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAJYjQzX2FkanVzdF9vcG1vZGUoZGV2KTsKIAliNDNfc2V0X3ByZXRidHQoZGV2KTsKIAliNDNfc2V0X3N5bnRoX3B1X2RlbGF5KGRldiwgMCk7CiAJYjQzX3VwbG9hZF9jYXJkX21hY2FkZHJlc3MoZGV2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKIAogCWVyciA9IDA7CiAgb3V0X211dGV4X3VubG9jazoKQEAgLTQzMDAsNyArNDM0Nyw2IEBACiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IHdsLT5jdXJyZW50X2RldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYjQzZGJnKHdsLCAiUmVtb3ZpbmcgSW50ZXJmYWNlIHR5cGUgJWRcbiIsIGNvbmYtPnR5cGUpOwogCkBAIC00MzEyLDExICs0MzU4LDkgQEAKIAogCXdsLT5vcGVyYXRpbmcgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCWI0M19hZGp1c3Rfb3Btb2RlKGRldik7CiAJbWVtc2V0KHdsLT5tYWNfYWRkciwgMCwgRVRIX0FMRU4pOwogCWI0M191cGxvYWRfY2FyZF9tYWNhZGRyZXNzKGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiB9CkBAIC00Mzc2LDEwICs0NDIwLDE1IEBACiAJY2FuY2VsX3dvcmtfc3luYygmKHdsLT5iZWFjb25fdXBkYXRlX3RyaWdnZXIpKTsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0JaWYgKGI0M19zdGF0dXMoZGV2KSA+PSBCNDNfU1RBVF9TVEFSVEVEKQotCQliNDNfd2lyZWxlc3NfY29yZV9zdG9wKGRldik7CisJaWYgKGI0M19zdGF0dXMoZGV2KSA+PSBCNDNfU1RBVF9TVEFSVEVEKSB7CisJCWRldiA9IGI0M193aXJlbGVzc19jb3JlX3N0b3AoZGV2KTsKKwkJaWYgKCFkZXYpCisJCQlnb3RvIG91dF91bmxvY2s7CisJfQogCWI0M193aXJlbGVzc19jb3JlX2V4aXQoZGV2KTsKIAl3bC0+cmFkaW9fZW5hYmxlZCA9IDA7CisKK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCiAJY2FuY2VsX3dvcmtfc3luYygmKHdsLT50eHBvd2VyX2FkanVzdF93b3JrKSk7CkBAIC00Mzg5LDExICs0NDM4LDEwIEBACiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgc2V0KQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAJYjQzX3VwZGF0ZV90ZW1wbGF0ZXMod2wpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtNDQ0NSw2ICs0NDkzLDcgQEAKIAkuYnNzX2luZm9fY2hhbmdlZAk9IGI0M19vcF9ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25maWd1cmVfZmlsdGVyCT0gYjQzX29wX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLnNldF9rZXkJCT0gYjQzX29wX3NldF9rZXksCisJLnVwZGF0ZV90a2lwX2tleQk9IGI0M19vcF91cGRhdGVfdGtpcF9rZXksCiAJLmdldF9zdGF0cwkJPSBiNDNfb3BfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMJCT0gYjQzX29wX2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSBiNDNfb3BfZ2V0X3RzZiwKQEAgLTQ0NzMsOCArNDUyMiwxMyBAQAogCiAJcHJldl9zdGF0dXMgPSBiNDNfc3RhdHVzKGRldik7CiAJLyogQnJpbmcgdGhlIGRldmljZSBkb3duLi4uICovCi0JaWYgKHByZXZfc3RhdHVzID49IEI0M19TVEFUX1NUQVJURUQpCi0JCWI0M193aXJlbGVzc19jb3JlX3N0b3AoZGV2KTsKKwlpZiAocHJldl9zdGF0dXMgPj0gQjQzX1NUQVRfU1RBUlRFRCkgeworCQlkZXYgPSBiNDNfd2lyZWxlc3NfY29yZV9zdG9wKGRldik7CisJCWlmICghZGV2KSB7CisJCQllcnIgPSAtRU5PREVWOworCQkJZ290byBvdXQ7CisJCX0KKwl9CiAJaWYgKHByZXZfc3RhdHVzID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKQogCQliNDNfd2lyZWxlc3NfY29yZV9leGl0KGRldik7CiAKQEAgLTQ1ODAsOSArNDYzNCwxMiBAQAogCQljYXNlIEI0M19QSFlUWVBFX0E6CiAJCQloYXZlXzVnaHpfcGh5ID0gMTsKIAkJCWJyZWFrOworCQljYXNlIEI0M19QSFlUWVBFX0xQOiAvL0ZJWE1FIG5vdCBhbHdheXMhCisjaWYgMCAvL0ZJWE1FIGVuYWJsaW5nIDVHSHogY2F1c2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlCisJCQloYXZlXzVnaHpfcGh5ID0gMTsKKyNlbmRpZgogCQljYXNlIEI0M19QSFlUWVBFX0c6CiAJCWNhc2UgQjQzX1BIWVRZUEVfTjoKLQkJY2FzZSBCNDNfUEhZVFlQRV9MUDoKIAkJCWhhdmVfMmdoel9waHkgPSAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC00NTk3LDcgKzQ2NTQsOCBAQAogCX0KIAlpZiAoMSAvKiBkaXNhYmxlIEEtUEhZICovKSB7CiAJCS8qIEZJWE1FOiBGb3Igbm93IHdlIGRpc2FibGUgdGhlIEEtUEhZIG9uIG11bHRpLVBIWSBkZXZpY2VzLiAqLwotCQlpZiAoZGV2LT5waHkudHlwZSAhPSBCNDNfUEhZVFlQRV9OKSB7CisJCWlmIChkZXYtPnBoeS50eXBlICE9IEI0M19QSFlUWVBFX04gJiYKKwkJICAgIGRldi0+cGh5LnR5cGUgIT0gQjQzX1BIWVRZUEVfTFApIHsKIAkJCWhhdmVfMmdoel9waHkgPSAxOwogCQkJaGF2ZV81Z2h6X3BoeSA9IDA7CiAJCX0KQEAgLTQ2ODUsOSArNDc0Myw2IEBACiAJd2xkZXYtPndsID0gd2w7CiAJYjQzX3NldF9zdGF0dXMod2xkZXYsIEI0M19TVEFUX1VOSU5JVCk7CiAJd2xkZXYtPmJhZF9mcmFtZXNfcHJlZW1wdCA9IG1vZHBhcmFtX2JhZF9mcmFtZXNfcHJlZW1wdDsKLQl0YXNrbGV0X2luaXQoJndsZGV2LT5pc3JfdGFza2xldCwKLQkJICAgICAodm9pZCAoKikodW5zaWduZWQgbG9uZykpYjQzX2ludGVycnVwdF90YXNrbGV0LAotCQkgICAgICh1bnNpZ25lZCBsb25nKXdsZGV2KTsKIAlJTklUX0xJU1RfSEVBRCgmd2xkZXYtPmxpc3QpOwogCiAJZXJyID0gYjQzX3dpcmVsZXNzX2NvcmVfYXR0YWNoKHdsZGV2KTsKQEAgLTQ3ODQsMTQgKzQ4MzksMTQgQEAKIAogCS8qIEluaXRpYWxpemUgc3RydWN0IGI0M193bCAqLwogCXdsLT5odyA9IGh3OwotCXNwaW5fbG9ja19pbml0KCZ3bC0+aXJxX2xvY2spOwotCXJ3bG9ja19pbml0KCZ3bC0+dHhfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJndsLT5sZWRzX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZ3bC0+c2htX2xvY2spOwogCW11dGV4X2luaXQoJndsLT5tdXRleCk7CisJc3Bpbl9sb2NrX2luaXQoJndsLT5oYXJkaXJxX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZ3bC0+ZGV2bGlzdCk7CiAJSU5JVF9XT1JLKCZ3bC0+YmVhY29uX3VwZGF0ZV90cmlnZ2VyLCBiNDNfYmVhY29uX3VwZGF0ZV90cmlnZ2VyX3dvcmspOwogCUlOSVRfV09SSygmd2wtPnR4cG93ZXJfYWRqdXN0X3dvcmssIGI0M19waHlfdHhwb3dlcl9hZGp1c3Rfd29yayk7CisJSU5JVF9XT1JLKCZ3bC0+dHhfd29yaywgYjQzX3R4X3dvcmspOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJndsLT50eF9xdWV1ZSk7CiAKIAlzc2Jfc2V0X2RldnR5cGVkYXRhKGRldiwgd2wpOwogCWI0M2luZm8od2wsICJCcm9hZGNvbSAlMDRYIFdMQU4gZm91bmQgKGNvcmUgcmV2aXNpb24gJXUpXG4iLApAQCAtNDg3Myw3ICs0OTI4LDcgQEAKIAlpZiAoYjQzX3N0YXR1cyhkZXYpIDwgQjQzX1NUQVRfSU5JVElBTElaRUQpCiAJCXJldHVybjsKIAliNDNpbmZvKGRldi0+d2wsICJDb250cm9sbGVyIFJFU0VUICglcykgLi4uXG4iLCByZWFzb24pOwotCXF1ZXVlX3dvcmsoZGV2LT53bC0+aHctPndvcmtxdWV1ZSwgJmRldi0+cmVzdGFydF93b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yayhkZXYtPndsLT5odywgJmRldi0+cmVzdGFydF93b3JrKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpAQCAtNDg4OSw4ICs0OTQ0LDggQEAKIAl3bGRldi0+c3VzcGVuZF9pbl9wcm9ncmVzcyA9IHRydWU7CiAJd2xkZXYtPnN1c3BlbmRfaW5pdF9zdGF0dXMgPSBiNDNfc3RhdHVzKHdsZGV2KTsKIAlpZiAod2xkZXYtPnN1c3BlbmRfaW5pdF9zdGF0dXMgPj0gQjQzX1NUQVRfU1RBUlRFRCkKLQkJYjQzX3dpcmVsZXNzX2NvcmVfc3RvcCh3bGRldik7Ci0JaWYgKHdsZGV2LT5zdXNwZW5kX2luaXRfc3RhdHVzID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKQorCQl3bGRldiA9IGI0M193aXJlbGVzc19jb3JlX3N0b3Aod2xkZXYpOworCWlmICh3bGRldiAmJiB3bGRldi0+c3VzcGVuZF9pbml0X3N0YXR1cyA+PSBCNDNfU1RBVF9JTklUSUFMSVpFRCkKIAkJYjQzX3dpcmVsZXNzX2NvcmVfZXhpdCh3bGRldik7CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uaAppbmRleCA5NTBmYjFiLi40MGRiMDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmgKQEAgLTExMiwxOCArMTEyLDE0IEBACiB2b2lkIGI0M190c2Zfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1NjQgdHNmKTsKIAogdTMyIGI0M19zaG1fcmVhZDMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQpOwotdTMyIF9fYjQzX3NobV9yZWFkMzIoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCk7CiB1MTYgYjQzX3NobV9yZWFkMTYoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCk7Ci11MTYgX19iNDNfc2htX3JlYWQxNihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0KTsKIHZvaWQgYjQzX3NobV93cml0ZTMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSk7Ci12b2lkIF9fYjQzX3NobV93cml0ZTMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSk7CiB2b2lkIGI0M19zaG1fd3JpdGUxNihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpOwotdm9pZCBfX2I0M19zaG1fd3JpdGUxNihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpOwogCiB1NjQgYjQzX2hmX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIHZvaWQgYjQzX2hmX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTY0IHZhbHVlKTsKIAotdm9pZCBiNDNfZHVtbXlfdHJhbnNtaXNzaW9uKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Cit2b2lkIGI0M19kdW1teV90cmFuc21pc3Npb24oc3RydWN0IGI0M193bGRldiAqZGV2LCBib29sIG9mZG0sIGJvb2wgcGFfb24pOwogCiB2b2lkIGI0M193aXJlbGVzc19jb3JlX3Jlc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYwppbmRleCA4MTZlMDI4Li5kOTAyMTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYwpAQCAtNTE4LDU4ICs1MTgsNDAgQEAKIHN0YXRpYyB2b2lkIGI0M19hcGh5X29wX3NldF9yeF9hbnRlbm5hKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGFudGVubmEpCiB7Ly9UT0RPCiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKLQl1NjQgaGY7CiAJdTE2IHRtcDsKIAlpbnQgYXV0b2RpdiA9IDA7CiAKIAlpZiAoYW50ZW5uYSA9PSBCNDNfQU5URU5OQV9BVVRPMCB8fCBhbnRlbm5hID09IEI0M19BTlRFTk5BX0FVVE8xKQogCQlhdXRvZGl2ID0gMTsKIAotCWhmID0gYjQzX2hmX3JlYWQoZGV2KTsKLQloZiAmPSB+QjQzX0hGX0FOVERJVkhFTFA7Ci0JYjQzX2hmX3dyaXRlKGRldiwgaGYpOworCWI0M19oZl93cml0ZShkZXYsIGI0M19oZl9yZWFkKGRldikgJiB+QjQzX0hGX0FOVERJVkhFTFApOwogCi0JdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9CQkFORENGRyk7Ci0JdG1wICY9IH5CNDNfUEhZX0JCQU5EQ0ZHX1JYQU5UOwotCXRtcCB8PSAoYXV0b2RpdiA/IEI0M19BTlRFTk5BX0FVVE8wIDogYW50ZW5uYSkKLQkgICAgPDwgQjQzX1BIWV9CQkFORENGR19SWEFOVF9TSElGVDsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9CQkFORENGRywgdG1wKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0JCQU5EQ0ZHLCB+QjQzX1BIWV9CQkFORENGR19SWEFOVCwKKwkJCShhdXRvZGl2ID8gQjQzX0FOVEVOTkFfQVVUTzEgOiBhbnRlbm5hKSA8PAorCQkJQjQzX1BIWV9CQkFORENGR19SWEFOVF9TSElGVCk7CiAKIAlpZiAoYXV0b2RpdikgewogCQl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOVERXRUxMKTsKLQkJaWYgKGFudGVubmEgPT0gQjQzX0FOVEVOTkFfQVVUTzApCisJCWlmIChhbnRlbm5hID09IEI0M19BTlRFTk5BX0FVVE8xKQogCQkJdG1wICY9IH5CNDNfUEhZX0FOVERXRUxMX0FVVE9ESVYxOwogCQllbHNlCiAJCQl0bXAgfD0gQjQzX1BIWV9BTlREV0VMTF9BVVRPRElWMTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5URFdFTEwsIHRtcCk7CiAJfQotCWlmIChwaHktPnJldiA8IDMpIHsKLQkJdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTlREV0VMTCk7Ci0JCXRtcCA9ICh0bXAgJiAweEZGMDApIHwgMHgyNDsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5URFdFTEwsIHRtcCk7Ci0JfSBlbHNlIHsKLQkJdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNNjEpOwotCQl0bXAgfD0gMHgxMDsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETTYxLCB0bXApOwotCQlpZiAocGh5LT5hbmFsb2cgPT0gMykgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0xJUFBXUkRPV05ULAotCQkJCSAgICAgIDB4MUQpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQURJVlJFTEFURUQsCi0JCQkJICAgICAgOCk7CisJaWYgKHBoeS0+cmV2IDwgMykKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9BTlREV0VMTCwgMHhGRjAwLCAweDI0KTsKKwllbHNlIHsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX09GRE02MSwgMHgxMCk7CisJCWlmIChwaHktPnJldiA9PSAzKSB7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DTElQUFdSRE9XTlQsIDB4MUQpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQURJVlJFTEFURUQsIDgpOwogCQl9IGVsc2UgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0xJUFBXUkRPV05ULAotCQkJCSAgICAgIDB4M0EpOwotCQkJdG1wID0KLQkJCSAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkgQjQzX1BIWV9BRElWUkVMQVRFRCk7Ci0JCQl0bXAgPSAodG1wICYgMHhGRjAwKSB8IDg7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BRElWUkVMQVRFRCwKLQkJCQkgICAgICB0bXApOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0xJUFBXUkRPV05ULCAweDNBKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQURJVlJFTEFURUQsIDB4RkYwMCwgOCk7CiAJCX0KIAl9CiAKLQloZiB8PSBCNDNfSEZfQU5URElWSEVMUDsKLQliNDNfaGZfd3JpdGUoZGV2LCBoZik7CisJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9BTlRESVZIRUxQKTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX2FwaHlfb3BfYWRqdXN0X3R4cG93ZXIoc3RydWN0IGI0M193bGRldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmMKaW5kZXggNmQyNDE2Mi4uNzViMjZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5jCkBAIC0yNDAsMjIgKzI0MCw0NCBAQAogCWRldi0+cGh5Lm9wcy0+cGh5X3dyaXRlKGRldiwgcmVnLCB2YWx1ZSk7CiB9CiAKK3ZvaWQgYjQzX3BoeV9jb3B5KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IGRlc3RyZWcsIHUxNiBzcmNyZWcpCit7CisJYXNzZXJ0X21hY19zdXNwZW5kZWQoZGV2KTsKKwlkZXYtPnBoeS5vcHMtPnBoeV93cml0ZShkZXYsIGRlc3RyZWcsCisJCWRldi0+cGh5Lm9wcy0+cGh5X3JlYWQoZGV2LCBzcmNyZWcpKTsKK30KKwogdm9pZCBiNDNfcGh5X21hc2soc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgb2Zmc2V0LCB1MTYgbWFzaykKIHsKLQliNDNfcGh5X3dyaXRlKGRldiwgb2Zmc2V0LAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBvZmZzZXQpICYgbWFzayk7CisJaWYgKGRldi0+cGh5Lm9wcy0+cGh5X21hc2tzZXQpIHsKKwkJYXNzZXJ0X21hY19zdXNwZW5kZWQoZGV2KTsKKwkJZGV2LT5waHkub3BzLT5waHlfbWFza3NldChkZXYsIG9mZnNldCwgbWFzaywgMCk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV93cml0ZShkZXYsIG9mZnNldCwKKwkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIG9mZnNldCkgJiBtYXNrKTsKKwl9CiB9CiAKIHZvaWQgYjQzX3BoeV9zZXQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgb2Zmc2V0LCB1MTYgc2V0KQogewotCWI0M19waHlfd3JpdGUoZGV2LCBvZmZzZXQsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIG9mZnNldCkgfCBzZXQpOworCWlmIChkZXYtPnBoeS5vcHMtPnBoeV9tYXNrc2V0KSB7CisJCWFzc2VydF9tYWNfc3VzcGVuZGVkKGRldik7CisJCWRldi0+cGh5Lm9wcy0+cGh5X21hc2tzZXQoZGV2LCBvZmZzZXQsIDB4RkZGRiwgc2V0KTsKKwl9IGVsc2UgeworCQliNDNfcGh5X3dyaXRlKGRldiwgb2Zmc2V0LAorCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgb2Zmc2V0KSB8IHNldCk7CisJfQogfQogCiB2b2lkIGI0M19waHlfbWFza3NldChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBvZmZzZXQsIHUxNiBtYXNrLCB1MTYgc2V0KQogewotCWI0M19waHlfd3JpdGUoZGV2LCBvZmZzZXQsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBvZmZzZXQpICYgbWFzaykgfCBzZXQpOworCWlmIChkZXYtPnBoeS5vcHMtPnBoeV9tYXNrc2V0KSB7CisJCWFzc2VydF9tYWNfc3VzcGVuZGVkKGRldik7CisJCWRldi0+cGh5Lm9wcy0+cGh5X21hc2tzZXQoZGV2LCBvZmZzZXQsIG1hc2ssIHNldCk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV93cml0ZShkZXYsIG9mZnNldCwKKwkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBvZmZzZXQpICYgbWFzaykgfCBzZXQpOworCX0KIH0KIAogaW50IGI0M19zd2l0Y2hfY2hhbm5lbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHVuc2lnbmVkIGludCBuZXdfY2hhbm5lbCkKQEAgLTMyNSw3ICszNDcsNiBAQAogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIH0KIAotLyogQ2FsbGVkIHdpdGggd2wtPmlycV9sb2NrIGxvY2tlZCAqLwogdm9pZCBiNDNfcGh5X3R4cG93ZXJfY2hlY2soc3RydWN0IGI0M193bGRldiAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKQEAgLTM1Miw3ICszNzMsNyBAQAogCiAJLyogV2UgbXVzdCBhZGp1c3QgdGhlIHRyYW5zbWlzc2lvbiBwb3dlciBpbiBoYXJkd2FyZS4KIAkgKiBTY2hlZHVsZSBiNDNfcGh5X3R4cG93ZXJfYWRqdXN0X3dvcmsoKS4gKi8KLQlxdWV1ZV93b3JrKGRldi0+d2wtPmh3LT53b3JrcXVldWUsICZkZXYtPndsLT50eHBvd2VyX2FkanVzdF93b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yayhkZXYtPndsLT5odywgJmRldi0+d2wtPnR4cG93ZXJfYWRqdXN0X3dvcmspOwogfQogCiBpbnQgYjQzX3BoeV9zaG1fdHNzaV9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHNobV9vZmZzZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uaAppbmRleCA0NGNjOTE4Li45ZWRkNGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmgKQEAgLTQ5LDExICs0OSwxMSBAQAogCiAvKiBBbnRlbm5hIGlkZW50aWZpZXJzICovCiBlbnVtIHsKLQlCNDNfQU5URU5OQTAsCQkvKiBBbnRlbm5hIDAgKi8KLQlCNDNfQU5URU5OQTEsCQkvKiBBbnRlbm5hIDAgKi8KLQlCNDNfQU5URU5OQV9BVVRPMSwJLyogQXV0b21hdGljLCBzdGFydGluZyB3aXRoIGFudGVubmEgMSAqLwotCUI0M19BTlRFTk5BX0FVVE8wLAkvKiBBdXRvbWF0aWMsIHN0YXJ0aW5nIHdpdGggYW50ZW5uYSAwICovCi0JQjQzX0FOVEVOTkEyLAorCUI0M19BTlRFTk5BMCA9IDAsCS8qIEFudGVubmEgMCAqLworCUI0M19BTlRFTk5BMSA9IDEsCS8qIEFudGVubmEgMSAqLworCUI0M19BTlRFTk5BX0FVVE8wID0gMiwJLyogQXV0b21hdGljLCBzdGFydGluZyB3aXRoIGFudGVubmEgMCAqLworCUI0M19BTlRFTk5BX0FVVE8xID0gMywJLyogQXV0b21hdGljLCBzdGFydGluZyB3aXRoIGFudGVubmEgMSAqLworCUI0M19BTlRFTk5BMiA9IDQsCiAJQjQzX0FOVEVOTkEzID0gOCwKIAogCUI0M19BTlRFTk5BX0FVVE8gPSBCNDNfQU5URU5OQV9BVVRPMCwKQEAgLTk1LDYgKzk1LDggQEAKICAqIAkJCU11c3Qgbm90IGJlIE5VTEwuCiAgKiBAcGh5X3dyaXRlOgkJV3JpdGUgdG8gYSBQSFkgcmVnaXN0ZXIuCiAgKiAJCQlNdXN0IG5vdCBiZSBOVUxMLgorICogQHBoeV9tYXNrc2V0OglNYXNrc2V0IGEgUEhZIHJlZ2lzdGVyLCB0YWtpbmcgc2hvcnRjdXRzLgorICoJCQlJZiBpdCBpcyBOVUxMLCBhIGdlbmVyaWMgYWxnb3JpdGhtIGlzIHVzZWQuCiAgKiBAcmFkaW9fcmVhZDoJCVJlYWQgZnJvbSBhIFJhZGlvIHJlZ2lzdGVyLgogICogCQkJTXVzdCBub3QgYmUgTlVMTC4KICAqIEByYWRpb193cml0ZToJV3JpdGUgdG8gYSBSYWRpbyByZWdpc3Rlci4KQEAgLTEyOSw3ICsxMzEsNyBAQAogICogCQkJSWYgdGhlIHBhcmFtZXRlciAiaWdub3JlX3Rzc2kiIGlzIHRydWUsIHRoZSBUU1NJIHZhbHVlcyBzaG91bGQKICAqIAkJCWJlIGlnbm9yZWQgYW5kIGEgcmVjYWxjdWxhdGlvbiBvZiB0aGUgcG93ZXIgc2V0dGluZ3Mgc2hvdWxkIGJlCiAgKiAJCQlkb25lIGV2ZW4gaWYgdGhlIFRTU0kgdmFsdWVzIGRpZCBub3QgY2hhbmdlLgotICogCQkJVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB3bC0+aXJxX2xvY2sgaGVsZCBhbmQgbXVzdCBub3Qgc2xlZXAuCisgKiAJCQlUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCwgYnV0IHNob3VsZCBub3QuCiAgKiAJCQlNdXN0IG5vdCBiZSBOVUxMLgogICogQGFkanVzdF90eHBvd2VyOglXcml0ZSB0aGUgcHJldmlvdXNseSBjYWxjdWxhdGVkIFRYIHBvd2VyIHNldHRpbmdzCiAgKiAJCQkoZnJvbSBAcmVjYWxjX3R4cG93ZXIpIHRvIHRoZSBoYXJkd2FyZS4KQEAgLTE1NCw2ICsxNTYsNyBAQAogCS8qIFJlZ2lzdGVyIGFjY2VzcyAqLwogCXUxNiAoKnBoeV9yZWFkKShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByZWcpOwogCXZvaWQgKCpwaHlfd3JpdGUpKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJlZywgdTE2IHZhbHVlKTsKKwl2b2lkICgqcGh5X21hc2tzZXQpKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJlZywgdTE2IG1hc2ssIHUxNiBzZXQpOwogCXUxNiAoKnJhZGlvX3JlYWQpKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJlZyk7CiAJdm9pZCAoKnJhZGlvX3dyaXRlKShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByZWcsIHUxNiB2YWx1ZSk7CiAKQEAgLTI5MSw2ICsyOTQsMTEgQEAKIHZvaWQgYjQzX3BoeV93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByZWcsIHUxNiB2YWx1ZSk7CiAKIC8qKgorICogYjQzX3BoeV9jb3B5IC0gY29weSBjb250ZW50cyBvZiAxNmJpdCBQSFkgcmVnaXN0ZXIgdG8gYW5vdGhlcgorICovCit2b2lkIGI0M19waHlfY29weShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBkZXN0cmVnLCB1MTYgc3JjcmVnKTsKKworLyoqCiAgKiBiNDNfcGh5X21hc2sgLSBNYXNrIGEgUEhZIHJlZ2lzdGVyIHdpdGggYSBtYXNrCiAgKi8KIHZvaWQgYjQzX3BoeV9tYXNrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IG9mZnNldCwgdTE2IG1hc2spOwpAQCAtMzcxLDcgKzM3OSw2IEBACiAgKgogICogQ29tcGFyZSB0aGUgY3VycmVudCBUWCBwb3dlciBvdXRwdXQgdG8gdGhlIGRlc2lyZWQgcG93ZXIgZW1pc3Npb24KICAqIGFuZCBzY2hlZHVsZSBhbiBhZGp1c3RtZW50IGluIGNhc2UgaXQgbWlzbWF0Y2hlcy4KLSAqIFJlcXVpcmVzIHdsLT5pcnFfbG9jayBsb2NrZWQuCiAgKgogICogQGZsYWdzOglPUidlZCBlbnVtIGI0M19waHlfdHhwb3dlcl9jaGVja19mbGFncyBmbGFncy4KICAqIAkJU2VlIHRoZSBkb2NzIGJlbG93LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9nLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYwppbmRleCA1MzAwMjMyLi4zODI4MjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYwpAQCAtMzMzLDcgKzMzMyw3IEBACiAJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMSwgMHhCRkJGLCB0bXApOwogCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTIsIDB4QkZCRiwgdG1wKTsKIAl9Ci0JYjQzX2R1bW15X3RyYW5zbWlzc2lvbihkZXYpOworCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2LCBmYWxzZSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M19zZXRfb3JpZ2luYWxfZ2FpbnMoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtMzY1LDcgKzM2NSw3IEBACiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEwLCAweEJGQkYsIDB4NDA0MCk7CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEExLCAweEJGQkYsIDB4NDA0MCk7CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEyLCAweEJGQkYsIDB4NDAwMCk7Ci0JYjQzX2R1bW15X3RyYW5zbWlzc2lvbihkZXYpOworCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2LCBmYWxzZSwgdHJ1ZSk7CiB9CiAKIC8qIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9OUlNTSUxvb2t1cFRhYmxlICovCkBAIC0xOTY0LDcgKzE5NjQsNyBAQAogCQkJfQogCQkJYjQzX3NldF90eHBvd2VyX2coZGV2LCAmYmJhdHQsICZyZmF0dCwgMCk7CiAJCX0KLQkJYjQzX2R1bW15X3RyYW5zbWlzc2lvbihkZXYpOworCQliNDNfZHVtbXlfdHJhbnNtaXNzaW9uKGRldiwgZmFsc2UsIHRydWUpOwogCQlncGh5LT5jdXJfaWRsZV90c3NpID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9JVFNTSSk7CiAJCWlmIChCNDNfREVCVUcpIHsKIAkJCS8qIEN1cnJlbnQtSWRsZS1UU1NJIHNhbml0eSBjaGVjay4gKi8KQEAgLTI2NTEsNjUgKzI2NTEsNTQgQEAKIHN0YXRpYyB2b2lkIGI0M19ncGh5X29wX3NldF9yeF9hbnRlbm5hKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGFudGVubmEpCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKLQl1NjQgaGY7CiAJdTE2IHRtcDsKIAlpbnQgYXV0b2RpdiA9IDA7CiAKIAlpZiAoYW50ZW5uYSA9PSBCNDNfQU5URU5OQV9BVVRPMCB8fCBhbnRlbm5hID09IEI0M19BTlRFTk5BX0FVVE8xKQogCQlhdXRvZGl2ID0gMTsKIAotCWhmID0gYjQzX2hmX3JlYWQoZGV2KTsKLQloZiAmPSB+QjQzX0hGX0FOVERJVkhFTFA7Ci0JYjQzX2hmX3dyaXRlKGRldiwgaGYpOworCWI0M19oZl93cml0ZShkZXYsIGI0M19oZl9yZWFkKGRldikgJiB+QjQzX0hGX0FOVERJVkhFTFApOwogCi0JdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9CQkFORENGRyk7Ci0JdG1wICY9IH5CNDNfUEhZX0JCQU5EQ0ZHX1JYQU5UOwotCXRtcCB8PSAoYXV0b2RpdiA/IEI0M19BTlRFTk5BX0FVVE8wIDogYW50ZW5uYSkKLQkJCTw8IEI0M19QSFlfQkJBTkRDRkdfUlhBTlRfU0hJRlQ7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQkJBTkRDRkcsIHRtcCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9CQkFORENGRywgfkI0M19QSFlfQkJBTkRDRkdfUlhBTlQsCisJCQkoYXV0b2RpdiA/IEI0M19BTlRFTk5BX0FVVE8xIDogYW50ZW5uYSkgPDwKKwkJCUI0M19QSFlfQkJBTkRDRkdfUlhBTlRfU0hJRlQpOwogCiAJaWYgKGF1dG9kaXYpIHsKIAkJdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTlREV0VMTCk7Ci0JCWlmIChhbnRlbm5hID09IEI0M19BTlRFTk5BX0FVVE8wKQorCQlpZiAoYW50ZW5uYSA9PSBCNDNfQU5URU5OQV9BVVRPMSkKIAkJCXRtcCAmPSB+QjQzX1BIWV9BTlREV0VMTF9BVVRPRElWMTsKIAkJZWxzZQogCQkJdG1wIHw9IEI0M19QSFlfQU5URFdFTExfQVVUT0RJVjE7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOVERXRUxMLCB0bXApOwogCX0KKwogCXRtcCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5UV1JTRVRUKTsKIAlpZiAoYXV0b2RpdikKIAkJdG1wIHw9IEI0M19QSFlfQU5UV1JTRVRUX0FSWERJVjsKIAllbHNlCiAJCXRtcCAmPSB+QjQzX1BIWV9BTlRXUlNFVFRfQVJYRElWOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOVFdSU0VUVCwgdG1wKTsKKworCWlmIChhdXRvZGl2KQorCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5UV1JTRVRULCBCNDNfUEhZX0FOVFdSU0VUVF9BUlhESVYpOworCWVsc2UgeworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0FOVFdSU0VUVCwKKwkJCSAgICAgQjQzX1BIWV9BTlRXUlNFVFRfQVJYRElWKTsKKwl9CisKIAlpZiAocGh5LT5yZXYgPj0gMikgewotCQl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE02MSk7Ci0JCXRtcCB8PSBCNDNfUEhZX09GRE02MV8xMDsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETTYxLCB0bXApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETTYxLCBCNDNfUEhZX09GRE02MV8xMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfRElWU1JDSEdBSU5CQUNLLCAweEZGMDAsIDB4MTUpOwogCi0JCXRtcCA9Ci0JCSAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RJVlNSQ0hHQUlOQkFDSyk7Ci0JCXRtcCA9ICh0bXAgJiAweEZGMDApIHwgMHgxNTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfRElWU1JDSEdBSU5CQUNLLAotCQkJICAgICAgdG1wKTsKLQotCQlpZiAocGh5LT5yZXYgPT0gMikgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQURJVlJFTEFURUQsCi0JCQkJICAgICAgOCk7Ci0JCX0gZWxzZSB7Ci0JCQl0bXAgPQotCQkJICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCSBCNDNfUEhZX0FESVZSRUxBVEVEKTsKLQkJCXRtcCA9ICh0bXAgJiAweEZGMDApIHwgODsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FESVZSRUxBVEVELAotCQkJCSAgICAgIHRtcCk7Ci0JCX0KKwkJaWYgKHBoeS0+cmV2ID09IDIpCisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BRElWUkVMQVRFRCwgOCk7CisJCWVsc2UKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQURJVlJFTEFURUQsIDB4RkYwMCwgOCk7CiAJfQogCWlmIChwaHktPnJldiA+PSA2KQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNOUIsIDB4REMpOwogCi0JaGYgfD0gQjQzX0hGX0FOVERJVkhFTFA7Ci0JYjQzX2hmX3dyaXRlKGRldiwgaGYpOworCWI0M19oZl93cml0ZShkZXYsIGI0M19oZl9yZWFkKGRldikgfCBCNDNfSEZfQU5URElWSEVMUCk7CiB9CiAKIHN0YXRpYyBpbnQgYjQzX2dwaHlfb3BfaW50ZXJmX21pdGlnYXRpb24oc3RydWN0IGI0M193bGRldiAqZGV2LApAQCAtMjgzNCw4ICsyODIzLDYgQEAKIAogCWI0M19tYWNfc3VzcGVuZChkZXYpOwogCi0Jc3Bpbl9sb2NrX2lycSgmZGV2LT53bC0+aXJxX2xvY2spOwotCiAJLyogQ2FsY3VsYXRlIHRoZSBuZXcgYXR0ZW51YXRpb24gdmFsdWVzLiAqLwogCWJiYXR0ID0gZ3BoeS0+YmJhdHQuYXR0OwogCWJiYXR0ICs9IGdwaHktPmJiYXR0X2RlbHRhOwpAQCAtMjg3NSwxMSArMjg2Miw2IEBACiAJZ3BoeS0+cmZhdHQuYXR0ID0gcmZhdHQ7CiAJZ3BoeS0+YmJhdHQuYXR0ID0gYmJhdHQ7CiAKLQkvKiBXZSBkcm9wIHRoZSBsb2NrIGVhcmx5LCBzbyB3ZSBjYW4gc2xlZXAgZHVyaW5nIGhhcmR3YXJlCi0JICogYWRqdXN0bWVudC4gUG9zc2libGUgcmFjZXMgd2l0aCBvcF9yZWNhbGNfdHhwb3dlciBhcmUgaGFybWxlc3MsCi0JICogYXMgd2Ugd2lsbCBiZSBjYWxsZWQgb25jZSBhZ2FpbiBpbiBjYXNlIHdlIHJhY2VkLiAqLwotCXNwaW5fdW5sb2NrX2lycSgmZGV2LT53bC0+aXJxX2xvY2spOwotCiAJaWYgKGI0M19kZWJ1ZyhkZXYsIEI0M19EQkdfWE1JVFBPV0VSKSkKIAkJYjQzZGJnKGRldi0+d2wsICJBZGp1c3RpbmcgVFggcG93ZXJcbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5oCmluZGV4IDcxODk0N2YuLjg1NjlmZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5oCkBAIC0xNDEsOCArMTQxLDcgQEAKIAlpbnQgdGd0X2lkbGVfdHNzaTsKIAkvKiBDdXJyZW50IGlkbGUgVFNTSSAqLwogCWludCBjdXJfaWRsZV90c3NpOwotCS8qIFRoZSBjdXJyZW50IGF2ZXJhZ2UgVFNTSS4KLQkgKiBOZWVkcyBpcnFfbG9jaywgYXMgaXQncyB1cGRhdGVkIGluIHRoZSBJUlEgcGF0aC4gKi8KKwkvKiBUaGUgY3VycmVudCBhdmVyYWdlIFRTU0kuICovCiAJdTggYXZlcmFnZV90c3NpOwogCS8qIEN1cnJlbnQgVFggcG93ZXIgbGV2ZWwgYXR0ZW51YXRpb24gY29udHJvbCB2YWx1ZXMgKi8KIAlzdHJ1Y3QgYjQzX2JiYXR0IGJiYXR0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5jCmluZGV4IGVhMGQzYTMuLjNlMDJkOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmMKQEAgLTEsOSArMSwxMCBAQAogLyoKIAogICBCcm9hZGNvbSBCNDMgd2lyZWxlc3MgZHJpdmVyCi0gIElFRUUgODAyLjExZyBMUC1QSFkgZHJpdmVyCisgIElFRUUgODAyLjExYS9nIExQLVBIWSBkcml2ZXIKIAogICBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICBDb3B5cmlnaHQgKGMpIDIwMDkgR8OhYm9yIFN0ZWZhbmlrIDxuZXRyb2xsbGVyLjNkQGdtYWlsLmNvbT4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjksNiArMzAsMjUgQEAKICNpbmNsdWRlICJ0YWJsZXNfbHBwaHkuaCIKIAogCitzdGF0aWMgaW5saW5lIHUxNiBjaGFubmVsMmZyZXFfbHAodTggY2hhbm5lbCkKK3sKKwlpZiAoY2hhbm5lbCA8IDE0KQorCQlyZXR1cm4gKDI0MDcgKyA1ICogY2hhbm5lbCk7CisJZWxzZSBpZiAoY2hhbm5lbCA9PSAxNCkKKwkJcmV0dXJuIDI0ODQ7CisJZWxzZSBpZiAoY2hhbm5lbCA8IDE4NCkKKwkJcmV0dXJuICg1MDAwICsgNSAqIGNoYW5uZWwpOworCWVsc2UKKwkJcmV0dXJuICg0MDAwICsgNSAqIGNoYW5uZWwpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGI0M19scHBoeV9vcF9nZXRfZGVmYXVsdF9jaGFuKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMzY7Cit9CisKIHN0YXRpYyBpbnQgYjQzX2xwcGh5X29wX2FsbG9jYXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHk7CkBAIC01OSwxNCArNzksMzI1IEBACiAJZGV2LT5waHkubHAgPSBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBscHBoeV9yZWFkX2JhbmRfc3Byb20oc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmRldi0+YnVzOworCXUxNiBjY2twbywgbWF4cHdyOworCXUzMiBvZmRtcG87CisJaW50IGk7CisKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWxwcGh5LT50eF9pc29sYXRpb25fbWVkX2JhbmQgPSBidXMtPnNwcm9tLnRyaTJnOworCQlscHBoeS0+YnhfYXJjaCA9IGJ1cy0+c3Byb20uYnhhMmc7CisJCWxwcGh5LT5yeF9wd3Jfb2Zmc2V0ID0gYnVzLT5zcHJvbS5yeHBvMmc7CisJCWxwcGh5LT5yc3NpX3ZmID0gYnVzLT5zcHJvbS5yc3Npc21mMmc7CisJCWxwcGh5LT5yc3NpX3ZjID0gYnVzLT5zcHJvbS5yc3Npc21jMmc7CisJCWxwcGh5LT5yc3NpX2dzID0gYnVzLT5zcHJvbS5yc3Npc2F2Mmc7CisJCWxwcGh5LT50eHBhWzBdID0gYnVzLT5zcHJvbS5wYTBiMDsKKwkJbHBwaHktPnR4cGFbMV0gPSBidXMtPnNwcm9tLnBhMGIxOworCQlscHBoeS0+dHhwYVsyXSA9IGJ1cy0+c3Byb20ucGEwYjI7CisJCW1heHB3ciA9IGJ1cy0+c3Byb20ubWF4cHdyX2JnOworCQlscHBoeS0+bWF4X3R4X3B3cl9tZWRfYmFuZCA9IG1heHB3cjsKKwkJY2NrcG8gPSBidXMtPnNwcm9tLmNjazJncG87CisJCW9mZG1wbyA9IGJ1cy0+c3Byb20ub2ZkbTJncG87CisJCWlmIChjY2twbykgeworCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJCWxwcGh5LT50eF9tYXhfcmF0ZVtpXSA9CisJCQkJCW1heHB3ciAtIChvZmRtcG8gJiAweEYpICogMjsKKwkJCQlvZmRtcG8gPj49IDQ7CisJCQl9CisJCQlvZmRtcG8gPSBidXMtPnNwcm9tLm9mZG0yZ3BvOworCQkJZm9yIChpID0gNDsgaSA8IDE1OyBpKyspIHsKKwkJCQlscHBoeS0+dHhfbWF4X3JhdGVbaV0gPQorCQkJCQltYXhwd3IgLSAob2ZkbXBvICYgMHhGKSAqIDI7CisJCQkJb2ZkbXBvID4+PSA0OworCQkJfQorCQl9IGVsc2UgeworCQkJb2ZkbXBvICY9IDB4RkY7CisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJCWxwcGh5LT50eF9tYXhfcmF0ZVtpXSA9IG1heHB3cjsKKwkJCWZvciAoaSA9IDQ7IGkgPCAxNTsgaSsrKQorCQkJCWxwcGh5LT50eF9tYXhfcmF0ZVtpXSA9IG1heHB3ciAtIG9mZG1wbzsKKwkJfQorCX0gZWxzZSB7IC8qIDVHSHogKi8KKwkJbHBwaHktPnR4X2lzb2xhdGlvbl9sb3dfYmFuZCA9IGJ1cy0+c3Byb20udHJpNWdsOworCQlscHBoeS0+dHhfaXNvbGF0aW9uX21lZF9iYW5kID0gYnVzLT5zcHJvbS50cmk1ZzsKKwkJbHBwaHktPnR4X2lzb2xhdGlvbl9oaV9iYW5kID0gYnVzLT5zcHJvbS50cmk1Z2g7CisJCWxwcGh5LT5ieF9hcmNoID0gYnVzLT5zcHJvbS5ieGE1ZzsKKwkJbHBwaHktPnJ4X3B3cl9vZmZzZXQgPSBidXMtPnNwcm9tLnJ4cG81ZzsKKwkJbHBwaHktPnJzc2lfdmYgPSBidXMtPnNwcm9tLnJzc2lzbWY1ZzsKKwkJbHBwaHktPnJzc2lfdmMgPSBidXMtPnNwcm9tLnJzc2lzbWM1ZzsKKwkJbHBwaHktPnJzc2lfZ3MgPSBidXMtPnNwcm9tLnJzc2lzYXY1ZzsKKwkJbHBwaHktPnR4cGFbMF0gPSBidXMtPnNwcm9tLnBhMWIwOworCQlscHBoeS0+dHhwYVsxXSA9IGJ1cy0+c3Byb20ucGExYjE7CisJCWxwcGh5LT50eHBhWzJdID0gYnVzLT5zcHJvbS5wYTFiMjsKKwkJbHBwaHktPnR4cGFsWzBdID0gYnVzLT5zcHJvbS5wYTFsb2IwOworCQlscHBoeS0+dHhwYWxbMV0gPSBidXMtPnNwcm9tLnBhMWxvYjE7CisJCWxwcGh5LT50eHBhbFsyXSA9IGJ1cy0+c3Byb20ucGExbG9iMjsKKwkJbHBwaHktPnR4cGFoWzBdID0gYnVzLT5zcHJvbS5wYTFoaWIwOworCQlscHBoeS0+dHhwYWhbMV0gPSBidXMtPnNwcm9tLnBhMWhpYjE7CisJCWxwcGh5LT50eHBhaFsyXSA9IGJ1cy0+c3Byb20ucGExaGliMjsKKwkJbWF4cHdyID0gYnVzLT5zcHJvbS5tYXhwd3JfYWw7CisJCW9mZG1wbyA9IGJ1cy0+c3Byb20ub2ZkbTVnbHBvOworCQlscHBoeS0+bWF4X3R4X3B3cl9sb3dfYmFuZCA9IG1heHB3cjsKKwkJZm9yIChpID0gNDsgaSA8IDEyOyBpKyspIHsKKwkJCWxwcGh5LT50eF9tYXhfcmF0ZWxbaV0gPSBtYXhwd3IgLSAob2ZkbXBvICYgMHhGKSAqIDI7CisJCQlvZmRtcG8gPj49IDQ7CisJCX0KKwkJbWF4cHdyID0gYnVzLT5zcHJvbS5tYXhwd3JfYTsKKwkJb2ZkbXBvID0gYnVzLT5zcHJvbS5vZmRtNWdwbzsKKwkJbHBwaHktPm1heF90eF9wd3JfbWVkX2JhbmQgPSBtYXhwd3I7CisJCWZvciAoaSA9IDQ7IGkgPCAxMjsgaSsrKSB7CisJCQlscHBoeS0+dHhfbWF4X3JhdGVbaV0gPSBtYXhwd3IgLSAob2ZkbXBvICYgMHhGKSAqIDI7CisJCQlvZmRtcG8gPj49IDQ7CisJCX0KKwkJbWF4cHdyID0gYnVzLT5zcHJvbS5tYXhwd3JfYWg7CisJCW9mZG1wbyA9IGJ1cy0+c3Byb20ub2ZkbTVnaHBvOworCQlscHBoeS0+bWF4X3R4X3B3cl9oaV9iYW5kID0gbWF4cHdyOworCQlmb3IgKGkgPSA0OyBpIDwgMTI7IGkrKykgeworCQkJbHBwaHktPnR4X21heF9yYXRlaFtpXSA9IG1heHB3ciAtIChvZmRtcG8gJiAweEYpICogMjsKKwkJCW9mZG1wbyA+Pj0gNDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbHBwaHlfYWRqdXN0X2dhaW5fdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgZnJlcSkKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKwl1MTYgdGVtcFszXTsKKwl1MTYgaXNvbGF0aW9uOworCisJQjQzX1dBUk5fT04oZGV2LT5waHkucmV2ID49IDIpOworCisJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJaXNvbGF0aW9uID0gbHBwaHktPnR4X2lzb2xhdGlvbl9tZWRfYmFuZDsKKwllbHNlIGlmIChmcmVxIDw9IDUzMjApCisJCWlzb2xhdGlvbiA9IGxwcGh5LT50eF9pc29sYXRpb25fbG93X2JhbmQ7CisJZWxzZSBpZiAoZnJlcSA8PSA1NzAwKQorCQlpc29sYXRpb24gPSBscHBoeS0+dHhfaXNvbGF0aW9uX21lZF9iYW5kOworCWVsc2UKKwkJaXNvbGF0aW9uID0gbHBwaHktPnR4X2lzb2xhdGlvbl9oaV9iYW5kOworCisJdGVtcFswXSA9ICgoaXNvbGF0aW9uIC0gMjYpIC8gMTIpIDw8IDEyOworCXRlbXBbMV0gPSB0ZW1wWzBdICsgMHgxMDAwOworCXRlbXBbMl0gPSB0ZW1wWzBdICsgMHgyMDAwOworCisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIxNigxMywgMCksIDMsIHRlbXApOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMTIsIDApLCAzLCB0ZW1wKTsKK30KKwogc3RhdGljIHZvaWQgbHBwaHlfdGFibGVfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JLy9UT0RPCisJdTMyIGZyZXEgPSBjaGFubmVsMmZyZXFfbHAoYjQzX2xwcGh5X29wX2dldF9kZWZhdWx0X2NoYW4oZGV2KSk7CisKKwlpZiAoZGV2LT5waHkucmV2IDwgMikKKwkJbHBwaHlfcmV2MF8xX3RhYmxlX2luaXQoZGV2KTsKKwllbHNlCisJCWxwcGh5X3JldjJwbHVzX3RhYmxlX2luaXQoZGV2KTsKKworCWxwcGh5X2luaXRfdHhfZ2Fpbl90YWJsZShkZXYpOworCisJaWYgKGRldi0+cGh5LnJldiA8IDIpCisJCWxwcGh5X2FkanVzdF9nYWluX3RhYmxlKGRldiwgZnJlcSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxwcGh5X2Jhc2ViYW5kX3JldjBfMV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQlCNDNfV0FSTl9PTigxKTsvL1RPRE8gcmV2IDwgMiBub3Qgc3VwcG9ydGVkLCB5ZXQuCisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+ZGV2LT5idXM7CisJc3RydWN0IGI0M19waHlfbHAgKmxwcGh5ID0gZGV2LT5waHkubHA7CisJdTE2IHRtcCwgdG1wMjsKKworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9BRkVfREFDX0NUTCwgMHhGN0ZGKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FGRV9DVEwsIDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlIsIDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9BRkVfREFDX0NUTCwgMHgwMDA0KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfT0ZETVNZTkNUSFJFU0gwLCAweEZGMDAsIDB4MDA3OCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NMSVBDVFJUSFJFU0gsIDB4ODNGRiwgMHg1ODAwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FEQ19DT01QRU5TQVRJT05fQ1RMLCAweDAwMTYpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfQURDX0NUTF8wLCAweEZGRjgsIDB4MDAwNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1ZFUllMT1dHQUlOREIsIDB4MDBGRiwgMHg1NDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfSElHQUlOREIsIDB4MDBGRiwgMHgyNDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfTE9XR0FJTkRCLCAweDAwRkYsIDB4MjEwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1ZFUllMT1dHQUlOREIsIDB4RkYwMCwgMHgwMDA2KTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUlhfUkFESU9fQ1RMLCAweEZGRkUpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNILCAweEZGRTAsIDB4MDAwNSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NMSVBDVFJUSFJFU0gsIDB4RkMxRiwgMHgwMTgwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQ0xJUENUUlRIUkVTSCwgMHg4M0ZGLCAweDNDMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9HQUlORElSRUNUTUlTTUFUQ0gsIDB4RkZGMCwgMHgwMDA1KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfR0FJTl9NSVNNQVRDSF9MSU1JVCwgMHhGRkMwLCAweDAwMUEpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNfRURfVEhSRVNILCAweEZGMDAsIDB4MDBCMyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU19FRF9USFJFU0gsIDB4MDBGRiwgMHhBRDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfSU5QVVRfUFdSREIsCisJCQkweEZGMDAsIGxwcGh5LT5yeF9wd3Jfb2Zmc2V0KTsKKwlpZiAoKGJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfRkVNKSAmJgorCSAgICgoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haKSB8fAorCSAgIChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfaGkgJiBCNDNfQkZIX1BBUkVGKSkpIHsKKwkJc3NiX3BtdV9zZXRfbGRvX3ZvbHRhZ2UoJmJ1cy0+Y2hpcGNvLCBMRE9fUEFSRUYsIDB4MjgpOworCQlzc2JfcG11X3NldF9sZG9fcGFyZWYoJmJ1cy0+Y2hpcGNvLCB0cnVlKTsKKwkJaWYgKGRldi0+cGh5LnJldiA9PSAwKSB7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfTFBfUkZfU0lHTkFMX0xVVCwKKwkJCQkJMHhGRkNGLCAweDAwMTApOworCQl9CisJCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjE2KDExLCA3KSwgNjApOworCX0gZWxzZSB7CisJCXNzYl9wbXVfc2V0X2xkb19wYXJlZigmYnVzLT5jaGlwY28sIGZhbHNlKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0xQX1JGX1NJR05BTF9MVVQsCisJCQkJMHhGRkNGLCAweDAwMjApOworCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIxNigxMSwgNyksIDEwMCk7CisJfQorCXRtcCA9IGxwcGh5LT5yc3NpX3ZmIHwgbHBwaHktPnJzc2lfdmMgPDwgNCB8IDB4QTAwMDsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8wLCB0bXApOworCWlmIChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfaGkgJiBCNDNfQkZIX1JTU0lJTlYpCisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfUlNTSV9DVExfMSwgMHhGMDAwLCAweDBBQUEpOworCWVsc2UKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8xLCAweEYwMDAsIDB4MDJBQSk7CisJYjQzX2xwdGFiX3dyaXRlKGRldiwgQjQzX0xQVEFCMTYoMTEsIDEpLCAyNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1JYX1JBRElPX0NUTCwKKwkJCTB4RkZGOSwgKGxwcGh5LT5ieF9hcmNoIDw8IDEpKTsKKwlpZiAoZGV2LT5waHkucmV2ID09IDEgJiYKKwkgICAoYnVzLT5zcHJvbS5ib2FyZGZsYWdzX2hpICYgQjQzX0JGSF9GRU1fQlQpKSB7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMSwgMHhGRkMwLCAweDAwMEEpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzEsIDB4M0YwMCwgMHgwOTAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8yLCAweEZGQzAsIDB4MDAwQSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMiwgMHhDMEZGLCAweDBCMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzMsIDB4RkZDMCwgMHgwMDBBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8zLCAweEMwRkYsIDB4MDQwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfNCwgMHhGRkMwLCAweDAwMEEpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzQsIDB4QzBGRiwgMHgwQjAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF81LCAweEZGQzAsIDB4MDAwQSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfNSwgMHhDMEZGLCAweDA5MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzYsIDB4RkZDMCwgMHgwMDBBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF82LCAweEMwRkYsIDB4MEIwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfNywgMHhGRkMwLCAweDAwMEEpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzcsIDB4QzBGRiwgMHgwOTAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF84LCAweEZGQzAsIDB4MDAwQSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfOCwgMHhDMEZGLCAweDBCMDApOworCX0gZWxzZSBpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haIHx8CisJCSAgKGJ1cy0+Ym9hcmRpbmZvLnR5cGUgPT0gMHgwNDhBKSB8fCAoKGRldi0+cGh5LnJldiA9PSAwKSAmJgorCQkgIChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0ZFTSkpKSB7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMSwgMHhGRkMwLCAweDAwMDEpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzEsIDB4QzBGRiwgMHgwNDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8yLCAweEZGQzAsIDB4MDAwMSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMiwgMHhDMEZGLCAweDA1MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzMsIDB4RkZDMCwgMHgwMDAyKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8zLCAweEMwRkYsIDB4MDgwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfNCwgMHhGRkMwLCAweDAwMDIpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzQsIDB4QzBGRiwgMHgwQTAwKTsKKwl9IGVsc2UgaWYgKGRldi0+cGh5LnJldiA9PSAxIHx8CisJCSAgKGJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfRkVNKSkgeworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzEsIDB4RkZDMCwgMHgwMDA0KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8xLCAweEMwRkYsIDB4MDgwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMiwgMHhGRkMwLCAweDAwMDQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzIsIDB4QzBGRiwgMHgwQzAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8zLCAweEZGQzAsIDB4MDAwMik7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMywgMHhDMEZGLCAweDAxMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzQsIDB4RkZDMCwgMHgwMDAyKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF80LCAweEMwRkYsIDB4MDMwMCk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8xLCAweEZGQzAsIDB4MDAwQSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMSwgMHhDMEZGLCAweDA5MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzIsIDB4RkZDMCwgMHgwMDBBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8yLCAweEMwRkYsIDB4MEIwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMywgMHhGRkMwLCAweDAwMDYpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzMsIDB4QzBGRiwgMHgwNTAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF80LCAweEZGQzAsIDB4MDAwNik7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfNCwgMHhDMEZGLCAweDA3MDApOworCX0KKwlpZiAoZGV2LT5waHkucmV2ID09IDEgJiYgKGJ1cy0+c3Byb20uYm9hcmRmbGFnc19oaSAmIEI0M19CRkhfUEFSRUYpKSB7CisJCWI0M19waHlfY29weShkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfNSwgQjQzX0xQUEhZX1RSX0xPT0tVUF8xKTsKKwkJYjQzX3BoeV9jb3B5KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF82LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzIpOworCQliNDNfcGh5X2NvcHkoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzcsIEI0M19MUFBIWV9UUl9MT09LVVBfMyk7CisJCWI0M19waHlfY29weShkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfOCwgQjQzX0xQUEhZX1RSX0xPT0tVUF80KTsKKwl9CisJaWYgKChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfaGkgJiBCNDNfQkZIX0ZFTV9CVCkgJiYKKwkgICAgKGJ1cy0+Y2hpcF9pZCA9PSAweDUzNTQpICYmCisJICAgIChidXMtPmNoaXBfcGFja2FnZSA9PSBTU0JfQ0hJUFBBQ0tfQkNNNDcxMlMpKSB7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweDAwMDYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0dQSU9fU0VMRUNULCAweDAwMDUpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0dQSU9fT1VURU4sIDB4RkZGRik7CisJCS8vRklYTUUgdGhlIEJyb2FkY29tIGRyaXZlciBjYWNoZXMgJiBkZWxheXMgdGhpcyBIRiB3cml0ZSEKKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9QUjQ1OTYwVyk7CisJfQorCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfTFBfUEhZX0NUTCwgMHg4MDAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfQ1JTR0FJTl9DVEwsIDB4MDA0MCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9NSU5QV1JfTEVWRUwsIDB4MDBGRiwgMHhBNDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweEYwRkYsIDB4MEIwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9TWU5DUEVBS0NOVCwgMHhGRkY4LCAweDAwMDcpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfRFNTU19DT05GSVJNX0NOVCwgMHhGRkY4LCAweDAwMDMpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfRFNTU19DT05GSVJNX0NOVCwgMHhGRkM3LCAweDAwMjApOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfSURMRUFGVEVSUEtUUlhUTywgMHgwMEZGKTsKKwl9IGVsc2UgeyAvKiA1R0h6ICovCisJCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9MUF9QSFlfQ1RMLCAweDdGRkYpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfQ1JTR0FJTl9DVEwsIDB4RkZCRik7CisJfQorCWlmIChkZXYtPnBoeS5yZXYgPT0gMSkgeworCQl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfQ0xJUENUUlRIUkVTSCk7CisJCXRtcDIgPSAodG1wICYgMHgwM0UwKSA+PiA1OworCQl0bXAyIHw9IHRtcDIgPDwgNTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV80QzMsIHRtcDIpOworCQl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfR0FJTkRJUkVDVE1JU01BVENIKTsKKwkJdG1wMiA9ICh0bXAgJiAweDFGMDApID4+IDg7CisJCXRtcDIgfD0gdG1wMiA8PCA1OworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZXzRDNCwgdG1wMik7CisJCXRtcCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9WRVJZTE9XR0FJTkRCKTsKKwkJdG1wMiA9IHRtcCAmIDB4MDBGRjsKKwkJdG1wMiB8PSB0bXAgPDwgODsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV80QzUsIHRtcDIpOworCX0KK30KKworc3RhdGljIHZvaWQgbHBwaHlfc2F2ZV9kaWdfZmx0X3N0YXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdGF0aWMgY29uc3QgdTE2IGFkZHJbXSA9IHsKKwkJQjQzX1BIWV9PRkRNKDB4QzEpLAorCQlCNDNfUEhZX09GRE0oMHhDMiksCisJCUI0M19QSFlfT0ZETSgweEMzKSwKKwkJQjQzX1BIWV9PRkRNKDB4QzQpLAorCQlCNDNfUEhZX09GRE0oMHhDNSksCisJCUI0M19QSFlfT0ZETSgweEM2KSwKKwkJQjQzX1BIWV9PRkRNKDB4QzcpLAorCQlCNDNfUEhZX09GRE0oMHhDOCksCisJCUI0M19QSFlfT0ZETSgweENGKSwKKwl9OworCisJc3RhdGljIGNvbnN0IHUxNiBjb2Vmc1tdID0geworCQkweERFNUUsIDB4RTgzMiwgMHhFMzMxLCAweDREMjYsCisJCTB4MDAyNiwgMHgxNDIwLCAweDAwMjAsIDB4RkUwOCwKKwkJMHgwMDA4LAorCX07CisKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkZHIpOyBpKyspIHsKKwkJbHBwaHktPmRpZ19mbHRfc3RhdGVbaV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBhZGRyW2ldKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIGFkZHJbaV0sIGNvZWZzW2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3Jlc3RvcmVfZGlnX2ZsdF9zdGF0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RhdGljIGNvbnN0IHUxNiBhZGRyW10gPSB7CisJCUI0M19QSFlfT0ZETSgweEMxKSwKKwkJQjQzX1BIWV9PRkRNKDB4QzIpLAorCQlCNDNfUEhZX09GRE0oMHhDMyksCisJCUI0M19QSFlfT0ZETSgweEM0KSwKKwkJQjQzX1BIWV9PRkRNKDB4QzUpLAorCQlCNDNfUEhZX09GRE0oMHhDNiksCisJCUI0M19QSFlfT0ZETSgweEM3KSwKKwkJQjQzX1BIWV9PRkRNKDB4QzgpLAorCQlCNDNfUEhZX09GRE0oMHhDRiksCisJfTsKKworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWRkcik7IGkrKykKKwkJYjQzX3BoeV93cml0ZShkZXYsIGFkZHJbaV0sIGxwcGh5LT5kaWdfZmx0X3N0YXRlW2ldKTsKIH0KIAogc3RhdGljIHZvaWQgbHBwaHlfYmFzZWJhbmRfcmV2MnBsdXNfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC04Myw3ICs0MTQsNyBAQAogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhGOSksIDApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzEsIDApOwogCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX0FEQ19DT01QRU5TQVRJT05fQ1RMLCAweDEwKTsKLQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfT0ZETVNZTkNUSFJFU0gwLCAweEZGMDAsIDB4NzgpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9PRkRNU1lOQ1RIUkVTSDAsIDB4RkYwMCwgMHhCNCk7CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0RDT0ZGU0VUVFJBTlNJRU5ULCAweEY4RkYsIDB4MjAwKTsKIAliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfRENPRkZTRVRUUkFOU0lFTlQsIDB4RkYwMCwgMHg3Rik7CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0dBSU5ESVJFQ1RNSVNNQVRDSCwgMHhGRjBGLCAweDQwKTsKQEAgLTkxLDcgKzQyMiwxMiBAQAogCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9DUlNHQUlOX0NUTCwgfjB4NDAwMCk7CiAJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCB+MHgyMDAwKTsKIAliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwQSksIDB4MSk7Ci0JYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MTBBKSwgMHhGRjAxLCAweDEwKTsKKwlpZiAoYnVzLT5ib2FyZGluZm8ucmV2ID49IDB4MTgpIHsKKwkJYjQzX2xwdGFiX3dyaXRlKGRldiwgQjQzX0xQVEFCMzIoMTcsIDY1KSwgMHhFQyk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwQSksIDB4RkYwMSwgMHgxNCk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MTBBKSwgMHhGRjAxLCAweDEwKTsKKwl9CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4REYpLCAweEZGMDAsIDB4RjQpOwogCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweERGKSwgMHgwMEZGLCAweEYxMDApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQ0xJUFRIUkVTSCwgMHg0OCk7CkBAIC0xMDAsNyArNDM2LDcgQEAKIAliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfUFdSX1RIUkVTSDEsIDB4RkZGMCwgMHg5KTsKIAliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfR0FJTkRJUkVDVE1JU01BVENILCB+MHhGKTsKIAliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVkVSWUxPV0dBSU5EQiwgMHgwMEZGLCAweDU1MDApOwotCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNILCAweEY4MUYsIDB4QTApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNILCAweEZDMUYsIDB4QTApOwogCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9HQUlORElSRUNUTUlTTUFUQ0gsIDB4RTBGRiwgMHgzMDApOwogCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9ISUdBSU5EQiwgMHgwMEZGLCAweDJBMDApOwogCWlmICgoYnVzLT5jaGlwX2lkID09IDB4NDMyNSkgJiYgKGJ1cy0+Y2hpcF9yZXYgPT0gMCkpIHsKQEAgLTEyMSw4ICs0NTcsMTAgQEAKIAliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQ0xJUENUUlRIUkVTSCwgMHhGRkUwLCAweDEyKTsKIAliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfR0FJTk1JU01BVENILCAweDBGRkYsIDB4OTAwMCk7CiAKLQliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIxNigweDA4LCAweDE0KSwgMCk7Ci0JYjQzX2xwdGFiX3dyaXRlKGRldiwgQjQzX0xQVEFCMTYoMHgwOCwgMHgxMiksIDB4NDApOworCWlmICgoYnVzLT5jaGlwX2lkID09IDB4NDMyNSkgJiYgKGJ1cy0+Y2hpcF9yZXYgPT0gMCkpIHsKKwkJYjQzX2xwdGFiX3dyaXRlKGRldiwgQjQzX0xQVEFCMTYoMHgwOCwgMHgxNCksIDApOworCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIxNigweDA4LCAweDEyKSwgMHg0MCk7CisJfQogCiAJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgewogCQliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9DUlNHQUlOX0NUTCwgMHg0MCk7CkBAIC0xMzAsNiArNDY4LDcgQEAKIAkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1NZTkNQRUFLQ05ULCAweEZGRjgsIDB4Nik7CiAJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9NSU5QV1JfTEVWRUwsIDB4MDBGRiwgMHg5RDAwKTsKIAkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX01JTlBXUl9MRVZFTCwgMHhGRjAwLCAweEExKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0lETEVBRlRFUlBLVFJYVE8sIDB4MDBGRik7CiAJfSBlbHNlIC8qIDVHSHogKi8KIAkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCB+MHg0MCk7CiAKQEAgLTE0Miw2ICs0ODEsMTQgQEAKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8xLAogCQkgICAgICAweDIwMDAgfCAoKHUxNilscHBoeS0+cnNzaV9ncyA8PCAxMCkgfAogCQkgICAgICAoKHUxNilscHBoeS0+cnNzaV92YyA8PCA0KSB8IGxwcGh5LT5yc3NpX3ZmKTsKKworCWlmICgoYnVzLT5jaGlwX2lkID09IDB4NDMyNSkgJiYgKGJ1cy0+Y2hpcF9yZXYgPT0gMCkpIHsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfQUZFX0FEQ19DVExfMCwgMHgxQyk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfQ1RMLCAweDAwRkYsIDB4ODgwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfQURDX0NUTF8xLCAweEZDM0MsIDB4MDQwMCk7CisJfQorCisJbHBwaHlfc2F2ZV9kaWdfZmx0X3N0YXRlKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGxwcGh5X2Jhc2ViYW5kX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtMTYxLDggKzUwOCw5IEBACiAvKiBJbml0aWFsaXplIHRoZSAyMDYyIHJhZGlvLiAqLwogc3RhdGljIHZvaWQgbHBwaHlfMjA2Ml9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKIAlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKLQl1MzIgY3J5c3RhbGZyZXEsIHBkaXYsIHRtcCwgcmVmOworCXUzMiBjcnlzdGFsZnJlcSwgdG1wLCByZWY7CiAJdW5zaWduZWQgaW50IGk7CiAJY29uc3Qgc3RydWN0IGIyMDYyX2ZyZXFkYXRhICpmZCA9IE5VTEw7CiAKQEAgLTE4NiwxMCArNTM0LDE1IEBACiAJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9DVEwzLCAwKTsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1RYX0NUTDQsIDApOwogCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fVFhfQ1RMNSwgMCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9DVEw2LCAwKTsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1BETl9DVEwwLCAweDQwKTsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1BETl9DVEwwLCAwKTsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX0NBTElCX1RTLCAweDEwKTsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX0NBTElCX1RTLCAwKTsKKwlpZiAoZGV2LT5waHkucmV2ID4gMCkgeworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX0JHX0NUTDEsCisJCQkoYjQzX3JhZGlvX3JlYWQoZGV2LCBCMjA2Ml9OX0NPTU0yKSA+PiAxKSB8IDB4ODApOworCX0KIAlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKQogCQliNDNfcmFkaW9fc2V0KGRldiwgQjIwNjJfTl9UU1NJX0NUTDAsIDB4MSk7CiAJZWxzZQpAQCAtMjAxLDIzICs1NTQsMjcgQEAKIAlCNDNfV0FSTl9PTighKGJ1cy0+Y2hpcGNvLmNhcGFiaWxpdGllcyAmIFNTQl9DSElQQ09fQ0FQX1BNVSkpOwogCUI0M19XQVJOX09OKGNyeXN0YWxmcmVxID09IDApOwogCi0JaWYgKGNyeXN0YWxmcmVxID49IDMwMDAwMDAwKSB7Ci0JCXBkaXYgPSAxOworCWlmIChjcnlzdGFsZnJlcSA8PSAzMDAwMDAwMCkgeworCQlscHBoeS0+cGRpdiA9IDE7CiAJCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNjJfU19SRlBMTF9DVEwxLCAweEZGRkIpOwogCX0gZWxzZSB7Ci0JCXBkaXYgPSAyOworCQlscHBoeS0+cGRpdiA9IDI7CiAJCWI0M19yYWRpb19zZXQoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDEsIDB4NCk7CiAJfQogCi0JdG1wID0gKDgwMDAwMDAwMCAqIHBkaXYgKyBjcnlzdGFsZnJlcSkgLyAoMzIwMDAwMDAgKiBwZGl2KTsKLQl0bXAgPSAodG1wIC0gMSkgJiAweEZGOworCXRtcCA9ICgoKDgwMDAwMDAwMCAqIGxwcGh5LT5wZGl2ICsgY3J5c3RhbGZyZXEpIC8KKwkgICAgICAoMiAqIGNyeXN0YWxmcmVxKSkgLSA4KSAmIDB4RkY7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEw3LCB0bXApOworCisJdG1wID0gKCgoMTAwICogY3J5c3RhbGZyZXEgKyAxNjAwMDAwMCAqIGxwcGh5LT5wZGl2KSAvCisJICAgICAgKDMyMDAwMDAwICogbHBwaHktPnBkaXYpKSAtIDEpICYgMHhGRjsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDE4LCB0bXApOwogCi0JdG1wID0gKDIgKiBjcnlzdGFsZnJlcSArIDEwMDAwMDAgKiBwZGl2KSAvICgyMDAwMDAwICogcGRpdik7Ci0JdG1wID0gKCh0bXAgJiAweEZGKSAtIDEpICYgMHhGRkZGOworCXRtcCA9ICgoKDIgKiBjcnlzdGFsZnJlcSArIDEwMDAwMDAgKiBscHBoeS0+cGRpdikgLworCSAgICAgICgyMDAwMDAwICogbHBwaHktPnBkaXYpKSAtIDEpICYgMHhGRjsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDE5LCB0bXApOwogCi0JcmVmID0gKDEwMDAgKiBwZGl2ICsgMiAqIGNyeXN0YWxmcmVxKSAvICgyMDAwICogcGRpdik7CisJcmVmID0gKDEwMDAgKiBscHBoeS0+cGRpdiArIDIgKiBjcnlzdGFsZnJlcSkgLyAoMjAwMCAqIGxwcGh5LT5wZGl2KTsKIAlyZWYgJj0gMHhGRkZGOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZyZXFkYXRhX3RhYik7IGkrKykgewogCQlpZiAocmVmIDwgZnJlcWRhdGFfdGFiW2ldLmZyZXEpIHsKQEAgLTI0MSwxMiArNTk4LDc4IEBACiAvKiBJbml0aWFsaXplIHRoZSAyMDYzIHJhZGlvLiAqLwogc3RhdGljIHZvaWQgbHBwaHlfMjA2M19pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQkvL1RPRE8KKwliMjA2M191cGxvYWRfaW5pdF90YWJsZShkZXYpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX0xPR0VOX1NQNSwgMCk7CisJYjQzX3JhZGlvX3NldChkZXYsIEIyMDYzX0NPTU04LCAweDM4KTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19SRUdfU1AxLCAweDU2KTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIEIyMDYzX1JYX0JCX0NUTDIsIH4weDIpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BBX1NQNywgMCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfVFhfUkZfU1A2LCAweDIwKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19UWF9SRl9TUDksIDB4NDApOworCWlmIChkZXYtPnBoeS5yZXYgPT0gMikgeworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19QQV9TUDMsIDB4YTApOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19QQV9TUDQsIDB4YTApOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19QQV9TUDIsIDB4MTgpOworCX0gZWxzZSB7CisJCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BBX1NQMywgMHgyMCk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BBX1NQMiwgMHgyMCk7CisJfQogfQogCitzdHJ1Y3QgbHBwaHlfc3R4X3RhYmxlX2VudHJ5IHsKKwl1MTYgcGh5X29mZnNldDsKKwl1MTYgcGh5X3NoaWZ0OworCXUxNiByZl9hZGRyOworCXUxNiByZl9zaGlmdDsKKwl1MTYgbWFzazsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHBwaHlfc3R4X3RhYmxlX2VudHJ5IGxwcGh5X3N0eF90YWJsZVtdID0geworCXsgLnBoeV9vZmZzZXQgPSAyLCAucGh5X3NoaWZ0ID0gNiwgLnJmX2FkZHIgPSAweDNkLCAucmZfc2hpZnQgPSAzLCAubWFzayA9IDB4MDEsIH0sCisJeyAucGh5X29mZnNldCA9IDEsIC5waHlfc2hpZnQgPSAxMiwgLnJmX2FkZHIgPSAweDRjLCAucmZfc2hpZnQgPSAxLCAubWFzayA9IDB4MDEsIH0sCisJeyAucGh5X29mZnNldCA9IDEsIC5waHlfc2hpZnQgPSA4LCAucmZfYWRkciA9IDB4NTAsIC5yZl9zaGlmdCA9IDAsIC5tYXNrID0gMHg3ZiwgfSwKKwl7IC5waHlfb2Zmc2V0ID0gMCwgLnBoeV9zaGlmdCA9IDgsIC5yZl9hZGRyID0gMHg0NCwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweGZmLCB9LAorCXsgLnBoeV9vZmZzZXQgPSAxLCAucGh5X3NoaWZ0ID0gMCwgLnJmX2FkZHIgPSAweDRhLCAucmZfc2hpZnQgPSAwLCAubWFzayA9IDB4ZmYsIH0sCisJeyAucGh5X29mZnNldCA9IDAsIC5waHlfc2hpZnQgPSA0LCAucmZfYWRkciA9IDB4NGQsIC5yZl9zaGlmdCA9IDAsIC5tYXNrID0gMHhmZiwgfSwKKwl7IC5waHlfb2Zmc2V0ID0gMSwgLnBoeV9zaGlmdCA9IDQsIC5yZl9hZGRyID0gMHg0ZSwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweGZmLCB9LAorCXsgLnBoeV9vZmZzZXQgPSAwLCAucGh5X3NoaWZ0ID0gMTIsIC5yZl9hZGRyID0gMHg0ZiwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweDBmLCB9LAorCXsgLnBoeV9vZmZzZXQgPSAxLCAucGh5X3NoaWZ0ID0gMCwgLnJmX2FkZHIgPSAweDRmLCAucmZfc2hpZnQgPSA0LCAubWFzayA9IDB4MGYsIH0sCisJeyAucGh5X29mZnNldCA9IDMsIC5waHlfc2hpZnQgPSAwLCAucmZfYWRkciA9IDB4NDksIC5yZl9zaGlmdCA9IDAsIC5tYXNrID0gMHgwZiwgfSwKKwl7IC5waHlfb2Zmc2V0ID0gNCwgLnBoeV9zaGlmdCA9IDMsIC5yZl9hZGRyID0gMHg0NiwgLnJmX3NoaWZ0ID0gNCwgLm1hc2sgPSAweDA3LCB9LAorCXsgLnBoeV9vZmZzZXQgPSAzLCAucGh5X3NoaWZ0ID0gMTUsIC5yZl9hZGRyID0gMHg0NiwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweDAxLCB9LAorCXsgLnBoeV9vZmZzZXQgPSA0LCAucGh5X3NoaWZ0ID0gMCwgLnJmX2FkZHIgPSAweDQ2LCAucmZfc2hpZnQgPSAxLCAubWFzayA9IDB4MDcsIH0sCisJeyAucGh5X29mZnNldCA9IDMsIC5waHlfc2hpZnQgPSA4LCAucmZfYWRkciA9IDB4NDgsIC5yZl9zaGlmdCA9IDQsIC5tYXNrID0gMHgwNywgfSwKKwl7IC5waHlfb2Zmc2V0ID0gMywgLnBoeV9zaGlmdCA9IDExLCAucmZfYWRkciA9IDB4NDgsIC5yZl9zaGlmdCA9IDAsIC5tYXNrID0gMHgwZiwgfSwKKwl7IC5waHlfb2Zmc2V0ID0gMywgLnBoeV9zaGlmdCA9IDQsIC5yZl9hZGRyID0gMHg0OSwgLnJmX3NoaWZ0ID0gNCwgLm1hc2sgPSAweDBmLCB9LAorCXsgLnBoeV9vZmZzZXQgPSAyLCAucGh5X3NoaWZ0ID0gMTUsIC5yZl9hZGRyID0gMHg0NSwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweDAxLCB9LAorCXsgLnBoeV9vZmZzZXQgPSA1LCAucGh5X3NoaWZ0ID0gMTMsIC5yZl9hZGRyID0gMHg1MiwgLnJmX3NoaWZ0ID0gNCwgLm1hc2sgPSAweDA3LCB9LAorCXsgLnBoeV9vZmZzZXQgPSA2LCAucGh5X3NoaWZ0ID0gMCwgLnJmX2FkZHIgPSAweDUyLCAucmZfc2hpZnQgPSA3LCAubWFzayA9IDB4MDEsIH0sCisJeyAucGh5X29mZnNldCA9IDUsIC5waHlfc2hpZnQgPSAzLCAucmZfYWRkciA9IDB4NDEsIC5yZl9zaGlmdCA9IDUsIC5tYXNrID0gMHgwNywgfSwKKwl7IC5waHlfb2Zmc2V0ID0gNSwgLnBoeV9zaGlmdCA9IDYsIC5yZl9hZGRyID0gMHg0MSwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweDBmLCB9LAorCXsgLnBoeV9vZmZzZXQgPSA1LCAucGh5X3NoaWZ0ID0gMTAsIC5yZl9hZGRyID0gMHg0MiwgLnJmX3NoaWZ0ID0gNSwgLm1hc2sgPSAweDA3LCB9LAorCXsgLnBoeV9vZmZzZXQgPSA0LCAucGh5X3NoaWZ0ID0gMTUsIC5yZl9hZGRyID0gMHg0MiwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweDAxLCB9LAorCXsgLnBoeV9vZmZzZXQgPSA1LCAucGh5X3NoaWZ0ID0gMCwgLnJmX2FkZHIgPSAweDQyLCAucmZfc2hpZnQgPSAxLCAubWFzayA9IDB4MDcsIH0sCisJeyAucGh5X29mZnNldCA9IDQsIC5waHlfc2hpZnQgPSAxMSwgLnJmX2FkZHIgPSAweDQzLCAucmZfc2hpZnQgPSA0LCAubWFzayA9IDB4MGYsIH0sCisJeyAucGh5X29mZnNldCA9IDQsIC5waHlfc2hpZnQgPSA3LCAucmZfYWRkciA9IDB4NDMsIC5yZl9zaGlmdCA9IDAsIC5tYXNrID0gMHgwZiwgfSwKKwl7IC5waHlfb2Zmc2V0ID0gNCwgLnBoeV9zaGlmdCA9IDYsIC5yZl9hZGRyID0gMHg0NSwgLnJmX3NoaWZ0ID0gMSwgLm1hc2sgPSAweDAxLCB9LAorCXsgLnBoeV9vZmZzZXQgPSAyLCAucGh5X3NoaWZ0ID0gNywgLnJmX2FkZHIgPSAweDQwLCAucmZfc2hpZnQgPSA0LCAubWFzayA9IDB4MGYsIH0sCisJeyAucGh5X29mZnNldCA9IDIsIC5waHlfc2hpZnQgPSAxMSwgLnJmX2FkZHIgPSAweDQwLCAucmZfc2hpZnQgPSAwLCAubWFzayA9IDB4MGYsIH0sCit9OworCiBzdGF0aWMgdm9pZCBscHBoeV9zeW5jX3N0eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JLy9UT0RPCisJY29uc3Qgc3RydWN0IGxwcGh5X3N0eF90YWJsZV9lbnRyeSAqZTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MTYgdG1wOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobHBwaHlfc3R4X3RhYmxlKTsgaSsrKSB7CisJCWUgPSAmbHBwaHlfc3R4X3RhYmxlW2ldOworCQl0bXAgPSBiNDNfcmFkaW9fcmVhZChkZXYsIGUtPnJmX2FkZHIpOworCQl0bXAgPj49IGUtPnJmX3NoaWZ0OworCQl0bXAgPDw9IGUtPnBoeV9zaGlmdDsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RjIgKyBlLT5waHlfb2Zmc2V0KSwKKwkJCQl+KGUtPm1hc2sgPDwgZS0+cGh5X3NoaWZ0KSwgdG1wKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGxwcGh5X3JhZGlvX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtMjU3LDE3ICs2ODAsMzgxIEBACiAJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0ZPVVJXSVJFX0NUTCwgMHhGRkZEKTsKIAl1ZGVsYXkoMSk7CiAKLQlpZiAoZGV2LT5waHkucmV2IDwgMikgeworCWlmIChkZXYtPnBoeS5yYWRpb192ZXIgPT0gMHgyMDYyKSB7CiAJCWxwcGh5XzIwNjJfaW5pdChkZXYpOwogCX0gZWxzZSB7CiAJCWxwcGh5XzIwNjNfaW5pdChkZXYpOwogCQlscHBoeV9zeW5jX3N0eChkZXYpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjApLCAweDVGODApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjEpLCAwKTsKLQkJLy9UT0RPIERvIHNvbWV0aGluZyBvbiB0aGUgYmFja3BsYW5lCisJCWlmIChkZXYtPmRldi0+YnVzLT5jaGlwX2lkID09IDB4NDMyNSkgeworCQkJLy8gVE9ETyBTU0IgUE1VIHJlY2FsaWJyYXRpb24KKwkJfQogCX0KIH0KIAorc3RydWN0IGxwcGh5X2lxX2VzdCB7IHUzMiBpcV9wcm9kLCBpX3B3ciwgcV9wd3I7IH07CisKK3N0YXRpYyB2b2lkIGxwcGh5X3NldF9yY19jYXAoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCisJdTggcmNfY2FwID0gKGxwcGh5LT5yY19jYXAgJiAweDFGKSA+PiAxOworCisJaWYgKGRldi0+cGh5LnJldiA9PSAxKSAvL0ZJWE1FIGNoZWNrIGNoYW5uZWwgMTQhCisJCXJjX2NhcCA9IG1pbl90KHU4LCByY19jYXAgKyA1LCAxNSk7CisKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1JYQkJfQ0FMSUIyLAorCQkJbWF4X3QodTgsIGxwcGh5LT5yY19jYXAgLSA0LCAweDgwKSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9DVExfQSwgcmNfY2FwIHwgMHg4MCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SWEdfQ05UMTYsCisJCQkoKGxwcGh5LT5yY19jYXAgJiAweDFGKSA+PiAyKSB8IDB4ODApOworfQorCitzdGF0aWMgdTggbHBwaHlfZ2V0X2JiX211bHQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXJldHVybiAoYjQzX2xwdGFiX3JlYWQoZGV2LCBCNDNfTFBUQUIxNigwLCA4NykpICYgMHhGRjAwKSA+PiA4OworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfYmJfbXVsdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGJiX211bHQpCit7CisJYjQzX2xwdGFiX3dyaXRlKGRldiwgQjQzX0xQVEFCMTYoMCwgODcpLCAodTE2KWJiX211bHQgPDwgOCk7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3NldF9kZWFmKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgYm9vbCB1c2VyKQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCisJaWYgKHVzZXIpCisJCWxwcGh5LT5jcnNfdXNyX2Rpc2FibGUgPSAxOworCWVsc2UKKwkJbHBwaHktPmNyc19zeXNfZGlzYWJsZSA9IDE7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweEZGMUYsIDB4ODApOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9jbGVhcl9kZWFmKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgYm9vbCB1c2VyKQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCisJaWYgKHVzZXIpCisJCWxwcGh5LT5jcnNfdXNyX2Rpc2FibGUgPSAwOworCWVsc2UKKwkJbHBwaHktPmNyc19zeXNfZGlzYWJsZSA9IDA7CisKKwlpZiAoIWxwcGh5LT5jcnNfdXNyX2Rpc2FibGUgJiYgIWxwcGh5LT5jcnNfc3lzX2Rpc2FibGUpIHsKKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNHQUlOX0NUTCwKKwkJCQkJMHhGRjFGLCAweDYwKTsKKwkJZWxzZQorCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLAorCQkJCQkweEZGMUYsIDB4MjApOworCX0KK30KKworc3RhdGljIHZvaWQgbHBwaHlfZGlzYWJsZV9jcnMoc3RydWN0IGI0M193bGRldiAqZGV2LCBib29sIHVzZXIpCit7CisJbHBwaHlfc2V0X2RlYWYoZGV2LCB1c2VyKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAsIDB4RkZGQywgMHgxKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8wLCAweDMpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV9WQUxfMCwgMHhGRkZCKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8wLCAweDQpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV9WQUxfMCwgMHhGRkY3KTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8wLCAweDgpOworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFX1ZBTF8wLCAweDEwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8wLCAweDEwKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAsIDB4RkZERik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMHgyMCk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFX1ZBTF8wLCAweEZGQkYpOworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4NDApOworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzJfVkFMLCAweDcpOworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzJfVkFMLCAweDM4KTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMl9WQUwsIDB4RkYzRik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMl9WQUwsIDB4MTAwKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMl9WQUwsIDB4RkRGRik7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9QU19DVExfT1ZFUlJJREVfVkFMMCwgMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9QU19DVExfT1ZFUlJJREVfVkFMMSwgMSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9QU19DVExfT1ZFUlJJREVfVkFMMiwgMHgyMCk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzJfVkFMLCAweEZCRkYpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCwgMHhGN0ZGKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RYX0dBSU5fQ1RMX09WRVJSSURFX1ZBTCwgMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SWF9HQUlOX0NUTF9PVkVSUklERV9WQUwsIDB4NDVBRik7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAweDNGRik7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3Jlc3RvcmVfY3JzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgYm9vbCB1c2VyKQoreworCWxwcGh5X2NsZWFyX2RlYWYoZGV2LCB1c2VyKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMHhGRjgwKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMiwgMHhGQzAwKTsKK30KKworc3RydWN0IGxwcGh5X3R4X2dhaW5zIHsgdTE2IGdtLCBwZ2EsIHBhZCwgZGFjOyB9OworCitzdGF0aWMgc3RydWN0IGxwcGh5X3R4X2dhaW5zIGxwcGh5X2dldF90eF9nYWlucyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGxwcGh5X3R4X2dhaW5zIGdhaW5zOworCXUxNiB0bXA7CisKKwlnYWlucy5kYWMgPSAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX0xQUEhZX0FGRV9EQUNfQ1RMKSAmIDB4MzgwKSA+PiA3OworCWlmIChkZXYtPnBoeS5yZXYgPCAyKSB7CisJCXRtcCA9IGI0M19waHlfcmVhZChkZXYsCisJCQkJICAgQjQzX0xQUEhZX1RYX0dBSU5fQ1RMX09WRVJSSURFX1ZBTCkgJiAweDdGRjsKKwkJZ2FpbnMuZ20gPSB0bXAgJiAweDAwMDc7CisJCWdhaW5zLnBnYSA9ICh0bXAgJiAweDAwNzgpID4+IDM7CisJCWdhaW5zLnBhZCA9ICh0bXAgJiAweDc4MCkgPj4gNzsKKwl9IGVsc2UgeworCQl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfVFhfR0FJTl9DVExfT1ZFUlJJREVfVkFMKTsKKwkJZ2FpbnMucGFkID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4RkIpKSAmIDB4RkY7CisJCWdhaW5zLmdtID0gdG1wICYgMHhGRjsKKwkJZ2FpbnMucGdhID0gKHRtcCA+PiA4KSAmIDB4RkY7CisJfQorCisJcmV0dXJuIGdhaW5zOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfZGFjX2dhaW4oc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgZGFjKQoreworCXUxNiBjdGwgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfQUZFX0RBQ19DVEwpICYgMHhDN0Y7CisJY3RsIHw9IGRhYyA8PCA3OworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfREFDX0NUTCwgMHhGMDAwLCBjdGwpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHhfZ2FpbnMoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBscHBoeV90eF9nYWlucyBnYWlucykKK3sKKwl1MTYgcmZfZ2FpbiwgcGFfZ2FpbjsKKworCWlmIChkZXYtPnBoeS5yZXYgPCAyKSB7CisJCXJmX2dhaW4gPSAoZ2FpbnMucGFkIDw8IDcpIHwgKGdhaW5zLnBnYSA8PCAzKSB8IGdhaW5zLmdtOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFhfR0FJTl9DVExfT1ZFUlJJREVfVkFMLAorCQkJCTB4RjgwMCwgcmZfZ2Fpbik7CisJfSBlbHNlIHsKKwkJcGFfZ2FpbiA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweEZCKSkgJiAweDFGQzA7CisJCXBhX2dhaW4gPDw9IDI7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVFhfR0FJTl9DVExfT1ZFUlJJREVfVkFMLAorCQkJICAgICAgKGdhaW5zLnBnYSA8PCA4KSB8IGdhaW5zLmdtKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RkIpLAorCQkJCTB4ODAwMCwgZ2FpbnMucGFkIHwgcGFfZ2Fpbik7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhGQyksCisJCQkgICAgICAoZ2FpbnMucGdhIDw8IDgpIHwgZ2FpbnMuZ20pOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRCksCisJCQkJMHg4MDAwLCBnYWlucy5wYWQgfCBwYV9nYWluKTsKKwl9CisJbHBwaHlfc2V0X2RhY19nYWluKGRldiwgZ2FpbnMuZGFjKTsKKwlpZiAoZGV2LT5waHkucmV2IDwgMikgeworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMiwgMHhGRUZGLCAxIDw8IDgpOworCX0gZWxzZSB7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAweEZGN0YsIDEgPDwgNyk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAweEJGRkYsIDEgPDwgMTQpOworCX0KKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlIsIDB4RkZCRiwgMSA8PCA2KTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfcmV2MF8xX3NldF9yeF9nYWluKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIGdhaW4pCit7CisJdTE2IHRyc3cgPSBnYWluICYgMHgxOworCXUxNiBsbmEgPSAoZ2FpbiAmIDB4RkZGQykgfCAoKGdhaW4gJiAweEMpID4+IDIpOworCXUxNiBleHRfbG5hID0gKGdhaW4gJiAyKSA+PiAxOworCisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFX1ZBTF8wLCAweEZGRkUsIHRyc3cpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCwKKwkJCTB4RkJGRiwgZXh0X2xuYSA8PCAxMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzJfVkFMLAorCQkJMHhGN0ZGLCBleHRfbG5hIDw8IDExKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1JYX0dBSU5fQ1RMX09WRVJSSURFX1ZBTCwgbG5hKTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfcmV2MnBsdXNfc2V0X3J4X2dhaW4oc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgZ2FpbikKK3sKKwl1MTYgbG93X2dhaW4gPSBnYWluICYgMHhGRkZGOworCXUxNiBoaWdoX2dhaW4gPSAoZ2FpbiA+PiAxNikgJiAweEY7CisJdTE2IGV4dF9sbmEgPSAoZ2FpbiA+PiAyMSkgJiAweDE7CisJdTE2IHRyc3cgPSB+KGdhaW4gPj4gMjApICYgMHgxOworCXUxNiB0bXA7CisKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAsIDB4RkZGRSwgdHJzdyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzJfVkFMLAorCQkJMHhGREZGLCBleHRfbG5hIDw8IDkpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCwKKwkJCTB4RkJGRiwgZXh0X2xuYSA8PCAxMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SWF9HQUlOX0NUTF9PVkVSUklERV9WQUwsIGxvd19nYWluKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQUZFX0RERlMsIDB4RkZGMCwgaGlnaF9nYWluKTsKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCXRtcCA9IChnYWluID4+IDIpICYgMHgzOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMl9WQUwsCisJCQkJMHhFN0ZGLCB0bXA8PDExKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RTYpLCAweEZGRTcsIHRtcCA8PCAzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2Rpc2FibGVfcnhfZ2Fpbl9vdmVycmlkZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4RkZGRSk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4RkZFRik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4RkZCRik7CisJaWYgKGRldi0+cGh5LnJldiA+PSAyKSB7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAweEZFRkYpOworCQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMiwgMHhGQkZGKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweEU1KSwgMHhGRkY3KTsKKwkJfQorCX0gZWxzZSB7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAweEZERkYpOworCX0KK30KKworc3RhdGljIHZvaWQgbHBwaHlfZW5hYmxlX3J4X2dhaW5fb3ZlcnJpZGUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4MSk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMHgxMCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMHg0MCk7CisJaWYgKGRldi0+cGh5LnJldiA+PSAyKSB7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzIsIDB4MTAwKTsKKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMiwgMHg0MDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhFNSksIDB4OCk7CisJCX0KKwl9IGVsc2UgeworCQliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAweDIwMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfcnhfZ2FpbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBnYWluKQoreworCWlmIChkZXYtPnBoeS5yZXYgPCAyKQorCQlscHBoeV9yZXYwXzFfc2V0X3J4X2dhaW4oZGV2LCBnYWluKTsKKwllbHNlCisJCWxwcGh5X3JldjJwbHVzX3NldF9yeF9nYWluKGRldiwgZ2Fpbik7CisJbHBwaHlfZW5hYmxlX3J4X2dhaW5fb3ZlcnJpZGUoZGV2KTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfc2V0X3J4X2dhaW5fYnlfaW5kZXgoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgaWR4KQoreworCXUzMiBnYWluID0gYjQzX2xwdGFiX3JlYWQoZGV2LCBCNDNfTFBUQUIxNigxMiwgaWR4KSk7CisJbHBwaHlfc2V0X3J4X2dhaW4oZGV2LCBnYWluKTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfc3RvcF9kZGZzKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfQUZFX0RERlMsIDB4RkZGRCk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0xQX1BIWV9DVEwsIDB4RkZERik7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3J1bl9kZGZzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGlfb24sIGludCBxX29uLAorCQkJICAgaW50IGluY3IxLCBpbnQgaW5jcjIsIGludCBzY2FsZV9pZHgpCit7CisJbHBwaHlfc3RvcF9kZGZzKGRldik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0FGRV9EREZTX1BPSU5URVJfSU5JVCwgMHhGRjgwKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfQUZFX0RERlNfUE9JTlRFUl9JTklULCAweDgwRkYpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfRERGU19JTkNSX0lOSVQsIDB4RkY4MCwgaW5jcjEpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfRERGU19JTkNSX0lOSVQsIDB4ODBGRiwgaW5jcjIgPDwgOCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0FGRV9EREZTLCAweEZGRjcsIGlfb24gPDwgMyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0FGRV9EREZTLCAweEZGRUYsIHFfb24gPDwgNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0FGRV9EREZTLCAweEZGOUYsIHNjYWxlX2lkeCA8PCA1KTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfQUZFX0RERlMsIDB4RkZGQik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfQUZFX0RERlMsIDB4Mik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfTFBfUEhZX0NUTCwgMHgyMCk7Cit9CisKK3N0YXRpYyBib29sIGxwcGh5X3J4X2lxX2VzdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBzYW1wbGVzLCB1OCB0aW1lLAorCQkJICAgc3RydWN0IGxwcGh5X2lxX2VzdCAqaXFfZXN0KQoreworCWludCBpOworCisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweEZGRjcpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfSVFfTlVNX1NNUExTX0FERFIsIHNhbXBsZXMpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9JUV9FTkFCTEVfV0FJVF9USU1FX0FERFIsIDB4RkYwMCwgdGltZSk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0lRX0VOQUJMRV9XQUlUX1RJTUVfQUREUiwgMHhGRUZGKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9JUV9FTkFCTEVfV0FJVF9USU1FX0FERFIsIDB4MjAwKTsKKworCWZvciAoaSA9IDA7IGkgPCA1MDA7IGkrKykgeworCQlpZiAoIShiNDNfcGh5X3JlYWQoZGV2LAorCQkJCUI0M19MUFBIWV9JUV9FTkFCTEVfV0FJVF9USU1FX0FERFIpICYgMHgyMDApKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoKGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9JUV9FTkFCTEVfV0FJVF9USU1FX0FERFIpICYgMHgyMDApKSB7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweDgpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaXFfZXN0LT5pcV9wcm9kID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX0xQUEhZX0lRX0FDQ19ISV9BRERSKTsKKwlpcV9lc3QtPmlxX3Byb2QgPDw9IDE2OworCWlxX2VzdC0+aXFfcHJvZCB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfSVFfQUNDX0xPX0FERFIpOworCisJaXFfZXN0LT5pX3B3ciA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9JUV9JX1BXUl9BQ0NfSElfQUREUik7CisJaXFfZXN0LT5pX3B3ciA8PD0gMTY7CisJaXFfZXN0LT5pX3B3ciB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfSVFfSV9QV1JfQUNDX0xPX0FERFIpOworCisJaXFfZXN0LT5xX3B3ciA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9JUV9RX1BXUl9BQ0NfSElfQUREUik7CisJaXFfZXN0LT5xX3B3ciA8PD0gMTY7CisJaXFfZXN0LT5xX3B3ciB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfSVFfUV9QV1JfQUNDX0xPX0FERFIpOworCisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfQ1JTR0FJTl9DVEwsIDB4OCk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgbHBwaHlfbG9vcGJhY2soc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBscHBoeV9pcV9lc3QgaXFfZXN0OworCWludCBpLCBpbmRleCA9IC0xOworCXUzMiB0bXA7CisKKwltZW1zZXQoJmlxX2VzdCwgMCwgc2l6ZW9mKGlxX2VzdCkpOworCisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFX1ZBTF8wLCAweEZGRkMsIDB4Myk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMHgzKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9BRkVfQ1RMX09WUiwgMSk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0FGRV9DVExfT1ZSVkFMLCAweEZGRkUpOworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4ODAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV9WQUxfMCwgMHg4MDApOworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4OCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAsIDB4OCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9DVExfQSwgMHg4MCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMHg4MCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAsIDB4ODApOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWxwcGh5X3NldF9yeF9nYWluX2J5X2luZGV4KGRldiwgaSk7CisJCWxwcGh5X3J1bl9kZGZzKGRldiwgMSwgMSwgNSwgNSwgMCk7CisJCWlmICghKGxwcGh5X3J4X2lxX2VzdChkZXYsIDEwMDAsIDMyLCAmaXFfZXN0KSkpCisJCQljb250aW51ZTsKKwkJdG1wID0gKGlxX2VzdC5pX3B3ciArIGlxX2VzdC5xX3B3cikgLyAxMDAwOworCQlpZiAoKHRtcCA+IDQwMDApICYmICh0bXAgPCAxMDAwMCkpIHsKKwkJCWluZGV4ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCWxwcGh5X3N0b3BfZGRmcyhkZXYpOworCXJldHVybiBpbmRleDsKK30KKworLyogRml4ZWQtcG9pbnQgZGl2aXNpb24gYWxnb3JpdGhtIHVzaW5nIG9ubHkgaW50ZWdlciBtYXRoLiAqLworc3RhdGljIHUzMiBscHBoeV9xZGl2X3JvdW5kdXAodTMyIGRpdmlkZW5kLCB1MzIgZGl2aXNvciwgdTggcHJlY2lzaW9uKQoreworCXUzMiBxdW90aWVudCwgcmVtYWluZGVyOworCisJaWYgKGRpdmlzb3IgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlxdW90aWVudCA9IGRpdmlkZW5kIC8gZGl2aXNvcjsKKwlyZW1haW5kZXIgPSBkaXZpZGVuZCAlIGRpdmlzb3I7CisKKwl3aGlsZSAocHJlY2lzaW9uID4gMCkgeworCQlxdW90aWVudCA8PD0gMTsKKwkJaWYgKHJlbWFpbmRlciA8PCAxID49IGRpdmlzb3IpIHsKKwkJCXF1b3RpZW50Kys7CisJCQlyZW1haW5kZXIgPSAocmVtYWluZGVyIDw8IDEpIC0gZGl2aXNvcjsKKwkJfQorCQlwcmVjaXNpb24tLTsKKwl9CisKKwlpZiAocmVtYWluZGVyIDw8IDEgPj0gZGl2aXNvcikKKwkJcXVvdGllbnQrKzsKKworCXJldHVybiBxdW90aWVudDsKK30KKwogLyogUmVhZCB0aGUgVFggcG93ZXIgY29udHJvbCBtb2RlIGZyb20gaGFyZHdhcmUuICovCiBzdGF0aWMgdm9pZCBscHBoeV9yZWFkX3R4X3BjdGxfbW9kZV9mcm9tX2hhcmR3YXJlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKQEAgLTMyMiw5ICsxMTA5LDkgQEAKIAlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKIAllbnVtIGI0M19scHBoeV90eHBjdGxfbW9kZSBvbGRtb2RlOwogCi0Jb2xkbW9kZSA9IGxwcGh5LT50eHBjdGxfbW9kZTsKIAlscHBoeV9yZWFkX3R4X3BjdGxfbW9kZV9mcm9tX2hhcmR3YXJlKGRldik7Ci0JaWYgKGxwcGh5LT50eHBjdGxfbW9kZSA9PSBtb2RlKQorCW9sZG1vZGUgPSBscHBoeS0+dHhwY3RsX21vZGU7CisJaWYgKG9sZG1vZGUgPT0gbW9kZSkKIAkJcmV0dXJuOwogCWxwcGh5LT50eHBjdGxfbW9kZSA9IG1vZGU7CiAKQEAgLTM0NSwxMyArMTEzMiwxODYgQEAKIAl9CiAJaWYgKGRldi0+cGh5LnJldiA+PSAyKSB7CiAJCWlmIChtb2RlID09IEI0M19MUFBIWV9UWFBDVExfSFcpCi0JCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhEMCksIDB4RkQsIDB4Mik7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETSgweEQwKSwgMHgyKTsKIAkJZWxzZQotCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RDApLCAweEZELCAwKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweEQwKSwgMHhGRkZEKTsKIAl9CiAJbHBwaHlfd3JpdGVfdHhfcGN0bF9tb2RlX3RvX2hhcmR3YXJlKGRldik7CiB9CiAKK3N0YXRpYyBpbnQgYjQzX2xwcGh5X29wX3N3aXRjaF9jaGFubmVsKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IG5ld19jaGFubmVsKTsKKworc3RhdGljIHZvaWQgbHBwaHlfcmV2MF8xX3JjX2NhbGliKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKwlzdHJ1Y3QgbHBwaHlfaXFfZXN0IGlxX2VzdDsKKwlzdHJ1Y3QgbHBwaHlfdHhfZ2FpbnMgdHhfZ2FpbnM7CisJc3RhdGljIGNvbnN0IHUzMiBpZGVhbF9wd3JfdGFibGVbMjFdID0geworCQkweDEwMDAwLCAweDEwNTU3LCAweDEwZTJkLCAweDExM2UwLCAweDEwZjIyLCAweDBmZjY0LAorCQkweDBlZGEyLCAweDBlNWQ0LCAweDBlZmQxLCAweDBmYmU4LCAweDBiN2I4LCAweDA0YjM1LAorCQkweDAxYTVlLCAweDAwYTBiLCAweDAwNDQ0LCAweDAwMWZkLCAweDAwMGZmLCAweDAwMDg4LAorCQkweDAwMDRjLCAweDAwMDJjLCAweDAwMDFhLAorCX07CisJYm9vbCBvbGRfdHhnX292cjsKKwl1OCBvbGRfYmJtdWx0OworCXUxNiBvbGRfcmZfb3ZyLCBvbGRfcmZfb3ZydmFsLCBvbGRfYWZlX292ciwgb2xkX2FmZV9vdnJ2YWwsCisJICAgIG9sZF9yZjJfb3ZyLCBvbGRfcmYyX292cnZhbCwgb2xkX3BoeV9jdGw7CisJZW51bSBiNDNfbHBwaHlfdHhwY3RsX21vZGUgb2xkX3R4cGN0bDsKKwl1MzIgbm9ybWFsX3B3ciwgaWRlYWxfcHdyLCBtZWFuX3NxX3B3ciwgdG1wID0gMCwgbWVhbl9zcV9wd3JfbWluID0gMDsKKwlpbnQgbG9vcGJhY2ssIGksIGosIGlubmVyX3N1bSwgZXJyOworCisJbWVtc2V0KCZpcV9lc3QsIDAsIHNpemVvZihpcV9lc3QpKTsKKworCWVyciA9IGI0M19scHBoeV9vcF9zd2l0Y2hfY2hhbm5lbChkZXYsIDcpOworCWlmIChlcnIpIHsKKwkJYjQzZGJnKGRldi0+d2wsCisJCSAgICAgICAiUkMgY2FsaWI6IEZhaWxlZCB0byBzd2l0Y2ggdG8gY2hhbm5lbCA3LCBlcnJvciA9ICVkXG4iLAorCQkgICAgICAgZXJyKTsKKwl9CisJb2xkX3R4Z19vdnIgPSAhIShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlIpICYgMHg0MCk7CisJb2xkX2JibXVsdCA9IGxwcGh5X2dldF9iYl9tdWx0KGRldik7CisJaWYgKG9sZF90eGdfb3ZyKQorCQl0eF9nYWlucyA9IGxwcGh5X2dldF90eF9nYWlucyhkZXYpOworCW9sZF9yZl9vdnIgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCk7CisJb2xkX3JmX292cnZhbCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV9WQUxfMCk7CisJb2xkX2FmZV9vdnIgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlIpOworCW9sZF9hZmVfb3ZydmFsID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX0xQUEhZX0FGRV9DVExfT1ZSVkFMKTsKKwlvbGRfcmYyX292ciA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yKTsKKwlvbGRfcmYyX292cnZhbCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCk7CisJb2xkX3BoeV9jdGwgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfTFBfUEhZX0NUTCk7CisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCW9sZF90eHBjdGwgPSBscHBoeS0+dHhwY3RsX21vZGU7CisKKwlscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChkZXYsIEI0M19MUFBIWV9UWFBDVExfT0ZGKTsKKwlscHBoeV9kaXNhYmxlX2NycyhkZXYsIHRydWUpOworCWxvb3BiYWNrID0gbHBwaHlfbG9vcGJhY2soZGV2KTsKKwlpZiAobG9vcGJhY2sgPT0gLTEpCisJCWdvdG8gZmluaXNoOworCWxwcGh5X3NldF9yeF9nYWluX2J5X2luZGV4KGRldiwgbG9vcGJhY2spOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9MUF9QSFlfQ1RMLCAweEZGQkYsIDB4NDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCwgMHhGRkY4LCAweDEpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCwgMHhGRkM3LCAweDgpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCwgMHhGRjNGLCAweEMwKTsKKwlmb3IgKGkgPSAxMjg7IGkgPD0gMTU5OyBpKyspIHsKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9SWEJCX0NBTElCMiwgaSk7CisJCWlubmVyX3N1bSA9IDA7CisJCWZvciAoaiA9IDU7IGogPD0gMjU7IGorKykgeworCQkJbHBwaHlfcnVuX2RkZnMoZGV2LCAxLCAxLCBqLCBqLCAwKTsKKwkJCWlmICghKGxwcGh5X3J4X2lxX2VzdChkZXYsIDEwMDAsIDMyLCAmaXFfZXN0KSkpCisJCQkJZ290byBmaW5pc2g7CisJCQltZWFuX3NxX3B3ciA9IGlxX2VzdC5pX3B3ciArIGlxX2VzdC5xX3B3cjsKKwkJCWlmIChqID09IDUpCisJCQkJdG1wID0gbWVhbl9zcV9wd3I7CisJCQlpZGVhbF9wd3IgPSAoKGlkZWFsX3B3cl90YWJsZVtqLTVdID4+IDMpICsgMSkgPj4gMTsKKwkJCW5vcm1hbF9wd3IgPSBscHBoeV9xZGl2X3JvdW5kdXAobWVhbl9zcV9wd3IsIHRtcCwgMTIpOworCQkJbWVhbl9zcV9wd3IgPSBpZGVhbF9wd3IgLSBub3JtYWxfcHdyOworCQkJbWVhbl9zcV9wd3IgKj0gbWVhbl9zcV9wd3I7CisJCQlpbm5lcl9zdW0gKz0gbWVhbl9zcV9wd3I7CisJCQlpZiAoKGkgPT0gMTI4KSB8fCAoaW5uZXJfc3VtIDwgbWVhbl9zcV9wd3JfbWluKSkgeworCQkJCWxwcGh5LT5yY19jYXAgPSBpOworCQkJCW1lYW5fc3FfcHdyX21pbiA9IGlubmVyX3N1bTsKKwkJCX0KKwkJfQorCX0KKwlscHBoeV9zdG9wX2RkZnMoZGV2KTsKKworZmluaXNoOgorCWxwcGh5X3Jlc3RvcmVfY3JzKGRldiwgdHJ1ZSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV9WQUxfMCwgb2xkX3JmX292cnZhbCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8wLCBvbGRfcmZfb3ZyKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FGRV9DVExfT1ZSVkFMLCBvbGRfYWZlX292cnZhbCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9BRkVfQ1RMX09WUiwgb2xkX2FmZV9vdnIpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMl9WQUwsIG9sZF9yZjJfb3ZydmFsKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzIsIG9sZF9yZjJfb3ZyKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0xQX1BIWV9DVEwsIG9sZF9waHlfY3RsKTsKKworCWxwcGh5X3NldF9iYl9tdWx0KGRldiwgb2xkX2JibXVsdCk7CisJaWYgKG9sZF90eGdfb3ZyKSB7CisJCS8qCisJCSAqIFNQRUMgRklYTUU6IFRoZSBzcGVjcyBzYXkgImdldF90eF9nYWlucyIgaGVyZSwgd2hpY2ggaXMKKwkJICogaWxsb2dpY2FsLiBBY2NvcmRpbmcgdG8gbHdmaW5nZXIsIHZlbmRvciBkcml2ZXIgdjQuMTUwLjEwLjUKKwkJICogaGFzIGEgU2V0IGhlcmUsIHdoaWxlIHY0LjE3NC42NC4xOSBoYXMgYSBHZXQgLSByZWdyZXNzaW9uIGluCisJCSAqIHRoZSB2ZW5kb3IgZHJpdmVyPyBUaGlzIHNob3VsZCBiZSB0ZXN0ZWQgdGhpcyBvbmNlIHRoZSBjb2RlCisJCSAqIGlzIHRlc3RhYmxlLgorCQkgKi8KKwkJbHBwaHlfc2V0X3R4X2dhaW5zKGRldiwgdHhfZ2FpbnMpOworCX0KKwlscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChkZXYsIG9sZF90eHBjdGwpOworCWlmIChscHBoeS0+cmNfY2FwKQorCQlscHBoeV9zZXRfcmNfY2FwKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3JldjJwbHVzX3JjX2NhbGliKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKKwl1MzIgY3J5c3RhbF9mcmVxID0gYnVzLT5jaGlwY28ucG11LmNyeXN0YWxmcmVxICogMTAwMDsKKwl1OCB0bXAgPSBiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYzX1JYX0JCX1NQOCkgJiAweEZGOworCWludCBpOworCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUlhfQkJfU1A4LCAweDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDEsIDB4N0UpOworCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNjNfUExMX1NQMSwgMHhGNyk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMMSwgMHg3Qyk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMMiwgMHgxNSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMMywgMHg3MCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMNCwgMHg1Mik7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMNSwgMHgxKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19SQ19DQUxJQl9DVEwxLCAweDdEKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisJCWlmIChiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDYpICYgMHgyKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoIShiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDYpICYgMHgyKSkKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUlhfQkJfU1A4LCB0bXApOworCisJdG1wID0gYjQzX3JhZGlvX3JlYWQoZGV2LCBCMjA2M19UWF9CQl9TUDMpICYgMHhGRjsKKworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1RYX0JCX1NQMywgMHgwKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19SQ19DQUxJQl9DVEwxLCAweDdFKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19SQ19DQUxJQl9DVEwxLCAweDdDKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19SQ19DQUxJQl9DVEwyLCAweDU1KTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19SQ19DQUxJQl9DVEwzLCAweDc2KTsKKworCWlmIChjcnlzdGFsX2ZyZXEgPT0gMjQwMDAwMDApIHsKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMNCwgMHhGQyk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDUsIDB4MCk7CisJfSBlbHNlIHsKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMNCwgMHgxMyk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDUsIDB4MSk7CisJfQorCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUEFfU1A3LCAweDdEKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisJCWlmIChiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDYpICYgMHgyKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoIShiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDYpICYgMHgyKSkKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfVFhfQkJfU1AzLCB0bXApOworCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMMSwgMHg3RSk7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2NhbGlicmF0ZV9yYyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M19waHlfbHAgKmxwcGh5ID0gZGV2LT5waHkubHA7CisKKwlpZiAoZGV2LT5waHkucmV2ID49IDIpIHsKKwkJbHBwaHlfcmV2MnBsdXNfcmNfY2FsaWIoZGV2KTsKKwl9IGVsc2UgaWYgKCFscHBoeS0+cmNfY2FwKSB7CisJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQlscHBoeV9yZXYwXzFfcmNfY2FsaWIoZGV2KTsKKwl9IGVsc2UgeworCQlscHBoeV9zZXRfcmNfY2FwKGRldik7CisJfQorfQorCiBzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHhfcG93ZXJfYnlfaW5kZXgoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBpbmRleCkKIHsKIAlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKQEAgLTQyMywzNCArMTM4MywxMTIgQEAKIAliNDNfbWFjX2VuYWJsZShkZXYpOwogfQogCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHNzaV9tdXgoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIHRzc2lfbXV4X21vZGUgbW9kZSkKK3sKKwlpZiAobW9kZSAhPSBUU1NJX01VWF9FWFQpIHsKKwkJYjQzX3JhZGlvX3NldChkZXYsIEIyMDYzX1BBX1NQMSwgMHgyKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGMyksIDB4MTAwMCk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BBX0NUTDEwLCAweDUxKTsKKwkJaWYgKG1vZGUgPT0gVFNTSV9NVVhfUE9TVFBBKSB7CisJCQliNDNfcmFkaW9fbWFzayhkZXYsIEIyMDYzX1BBX1NQMSwgMHhGRkZFKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9BRkVfQ1RMX09WUlZBTCwgMHhGRkM3KTsKKwkJfSBlbHNlIHsKKwkJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNjNfUEFfU1AxLCAweEZGRkUsIDB4MSk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlJWQUwsCisJCQkJCTB4RkZDNywgMHgyMCk7CisJCX0KKwl9IGVsc2UgeworCQlCNDNfV0FSTl9PTigxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3R4X3BjdGxfaW5pdF9odyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJdTE2IHRtcDsKKwlpbnQgaTsKKworCS8vU1BFQyBUT0RPIENhbGwgTFAgUEhZIENsZWFyIFRYIFBvd2VyIG9mZnNldHMKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQlpZiAoZGV2LT5waHkucmV2ID49IDIpCisJCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIzMig3LCBpICsgMSksIGkpOworCQllbHNlCisJCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIzMigxMCwgaSArIDEpLCBpKTsKKwl9CisKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9OTlVNLCAweEZGMDAsIDB4RkYpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX05OVU0sIDB4OEZGRiwgMHg1MDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9JRExFVFNTSSwgMHhGRkMwLCAweDFGKTsKKwlpZiAoZGV2LT5waHkucmV2IDwgMikgeworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfTFBfUEhZX0NUTCwgMHhFRkZGKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0xQX1BIWV9DVEwsIDB4REZGRiwgMHgyMDAwKTsKKwl9IGVsc2UgeworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHgxMDMpLCAweEZGRkUpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxMDMpLCAweEZGRkIsIDB4NCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwMyksIDB4RkZFRiwgMHgxMCk7CisJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNjNfSVFfQ0FMSUJfQ1RMMiwgMHhGMywgMHgxKTsKKwkJbHBwaHlfc2V0X3Rzc2lfbXV4KGRldiwgVFNTSV9NVVhfUE9TVFBBKTsKKwl9CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RYX1BXUl9DVExfSURMRVRTU0ksIDB4N0ZGRiwgMHg4MDAwKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9ERUxUQVBXUl9MSU1JVCwgMHhGRik7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0RFTFRBUFdSX0xJTUlULCAweEEpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKKwkJCSh1MTYpfkI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFLAorCQkJQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfT0ZGKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9OTlVNLCAweEY4RkYpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKKwkJCSh1MTYpfkI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFLAorCQkJQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfU1cpOworCisJaWYgKGRldi0+cGh5LnJldiA8IDIpIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4RUZGRiwgMHgxMDAwKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFX1ZBTF8wLCAweEVGRkYpOworCX0gZWxzZSB7CisJCWxwcGh5X3NldF90eF9wb3dlcl9ieV9pbmRleChkZXYsIDB4N0YpOworCX0KKworCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2LCB0cnVlLCB0cnVlKTsKKworCXRtcCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX1NUQVQpOworCWlmICh0bXAgJiAweDgwMDApIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RYX1BXUl9DVExfSURMRVRTU0ksCisJCQkJMHhGRkMwLCAodG1wICYgMHhGRikgLSAzMik7CisJfQorCisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4RUZGRik7CisKKwkvLyAoU1BFQz8pIFRPRE8gU2V0ICJUYXJnZXQgVFggZnJlcXVlbmN5IiB2YXJpYWJsZSB0byAwCisJLy8gU1BFQyBGSVhNRSAiU2V0IEJCIE11bHRpcGxpZXIgdG8gMHhFMDAwIiBpbXBvc3NpYmxlIC0gYmJfbXVsdCBpcyB1OCEKK30KKworc3RhdGljIHZvaWQgbHBwaHlfdHhfcGN0bF9pbml0X3N3KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgbHBwaHlfdHhfZ2FpbnMgZ2FpbnM7CisKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWdhaW5zLmdtID0gNDsKKwkJZ2FpbnMucGFkID0gMTI7CisJCWdhaW5zLnBnYSA9IDEyOworCQlnYWlucy5kYWMgPSAwOworCX0gZWxzZSB7CisJCWdhaW5zLmdtID0gNzsKKwkJZ2FpbnMucGFkID0gMTQ7CisJCWdhaW5zLnBnYSA9IDE1OworCQlnYWlucy5kYWMgPSAwOworCX0KKwlscHBoeV9zZXRfdHhfZ2FpbnMoZGV2LCBnYWlucyk7CisJbHBwaHlfc2V0X2JiX211bHQoZGV2LCAxNTApOworfQorCiAvKiBJbml0aWFsaXplIFRYIHBvd2VyIGNvbnRyb2wgKi8KIHN0YXRpYyB2b2lkIGxwcGh5X3R4X3BjdGxfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJaWYgKDAvKkZJWE1FIEhXUENUTCBjYXBhYmxlICovKSB7Ci0JCS8vVE9ETworCQlscHBoeV90eF9wY3RsX2luaXRfaHcoZGV2KTsKIAl9IGVsc2UgeyAvKiBUaGlzIGRldmljZSBpcyBvbmx5IHNvZnR3YXJlIFRYIHBvd2VyIGNvbnRyb2wgY2FwYWJsZS4gKi8KLQkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgewotCQkJLy9UT0RPCi0JCX0gZWxzZSB7Ci0JCQkvL1RPRE8KLQkJfQotCQkvL1RPRE8gc2V0IEJCIG11bHRpcGxpZXIgdG8gMHgwMDk2CisJCWxwcGh5X3R4X3BjdGxfaW5pdF9zdyhkZXYpOwogCX0KIH0KIAotc3RhdGljIGludCBiNDNfbHBwaHlfb3BfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCi17Ci0JLyogVE9ETzogYmFuZCBTUFJPTSAqLwotCWxwcGh5X2Jhc2ViYW5kX2luaXQoZGV2KTsKLQlscHBoeV9yYWRpb19pbml0KGRldik7Ci0JLy9UT0RPIGNhbGlicmF0ZSBSQwotCS8vVE9ETyBzZXQgY2hhbm5lbAotCWxwcGh5X3R4X3BjdGxfaW5pdChkZXYpOwotCS8vVE9ETyBmdWxsIGNhbGliCi0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHUxNiBiNDNfbHBwaHlfb3BfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByZWcpCiB7CiAJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19QSFlfQ09OVFJPTCwgcmVnKTsKQEAgLTQ2Myw2ICsxNTAxLDE0IEBACiAJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19QSFlfREFUQSwgdmFsdWUpOwogfQogCitzdGF0aWMgdm9pZCBiNDNfbHBwaHlfb3BfbWFza3NldChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByZWcsIHUxNiBtYXNrLAorCQkJCSB1MTYgc2V0KQoreworCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fUEhZX0NPTlRST0wsIHJlZyk7CisJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19QSFlfREFUQSwKKwkJICAgIChiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fUEhZX0RBVEEpICYgbWFzaykgfCBzZXQpOworfQorCiBzdGF0aWMgdTE2IGI0M19scHBoeV9vcF9yYWRpb19yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJlZykKIHsKIAkvKiBSZWdpc3RlciAxIGlzIGEgMzItYml0IHJlZ2lzdGVyLiAqLwpAQCAtNDkzLDIzICsxNTM5LDY4MSBAQAogCS8vVE9ETwogfQogCi1zdGF0aWMgaW50IGI0M19scHBoeV9vcF9zd2l0Y2hfY2hhbm5lbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBuZXdfY2hhbm5lbCkKK3N0cnVjdCBiMjA2eF9jaGFubmVsIHsKKwl1OCBjaGFubmVsOworCXUxNiBmcmVxOworCXU4IGRhdGFbMTJdOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiMjA2eF9jaGFubmVsIGIyMDYyX2NoYW50YmxbXSA9IHsKKwl7IC5jaGFubmVsID0gMSwgLmZyZXEgPSAyNDEyLCAuZGF0YVswXSA9IDB4RkYsIC5kYXRhWzFdID0gMHhGRiwKKwkgIC5kYXRhWzJdID0gMHhCNSwgLmRhdGFbM10gPSAweDFCLCAuZGF0YVs0XSA9IDB4MjQsIC5kYXRhWzVdID0gMHgzMiwKKwkgIC5kYXRhWzZdID0gMHgzMiwgLmRhdGFbN10gPSAweDg4LCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDIsIC5mcmVxID0gMjQxNywgLmRhdGFbMF0gPSAweEZGLCAuZGF0YVsxXSA9IDB4RkYsCisJICAuZGF0YVsyXSA9IDB4QjUsIC5kYXRhWzNdID0gMHgxQiwgLmRhdGFbNF0gPSAweDI0LCAuZGF0YVs1XSA9IDB4MzIsCisJICAuZGF0YVs2XSA9IDB4MzIsIC5kYXRhWzddID0gMHg4OCwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSAzLCAuZnJlcSA9IDI0MjIsIC5kYXRhWzBdID0gMHhGRiwgLmRhdGFbMV0gPSAweEZGLAorCSAgLmRhdGFbMl0gPSAweEI1LCAuZGF0YVszXSA9IDB4MUIsIC5kYXRhWzRdID0gMHgyNCwgLmRhdGFbNV0gPSAweDMyLAorCSAgLmRhdGFbNl0gPSAweDMyLCAuZGF0YVs3XSA9IDB4ODgsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gNCwgLmZyZXEgPSAyNDI3LCAuZGF0YVswXSA9IDB4RkYsIC5kYXRhWzFdID0gMHhGRiwKKwkgIC5kYXRhWzJdID0gMHhCNSwgLmRhdGFbM10gPSAweDFCLCAuZGF0YVs0XSA9IDB4MjQsIC5kYXRhWzVdID0gMHgzMiwKKwkgIC5kYXRhWzZdID0gMHgzMiwgLmRhdGFbN10gPSAweDg4LCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDUsIC5mcmVxID0gMjQzMiwgLmRhdGFbMF0gPSAweEZGLCAuZGF0YVsxXSA9IDB4RkYsCisJICAuZGF0YVsyXSA9IDB4QjUsIC5kYXRhWzNdID0gMHgxQiwgLmRhdGFbNF0gPSAweDI0LCAuZGF0YVs1XSA9IDB4MzIsCisJICAuZGF0YVs2XSA9IDB4MzIsIC5kYXRhWzddID0gMHg4OCwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSA2LCAuZnJlcSA9IDI0MzcsIC5kYXRhWzBdID0gMHhGRiwgLmRhdGFbMV0gPSAweEZGLAorCSAgLmRhdGFbMl0gPSAweEI1LCAuZGF0YVszXSA9IDB4MUIsIC5kYXRhWzRdID0gMHgyNCwgLmRhdGFbNV0gPSAweDMyLAorCSAgLmRhdGFbNl0gPSAweDMyLCAuZGF0YVs3XSA9IDB4ODgsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gNywgLmZyZXEgPSAyNDQyLCAuZGF0YVswXSA9IDB4RkYsIC5kYXRhWzFdID0gMHhGRiwKKwkgIC5kYXRhWzJdID0gMHhCNSwgLmRhdGFbM10gPSAweDFCLCAuZGF0YVs0XSA9IDB4MjQsIC5kYXRhWzVdID0gMHgzMiwKKwkgIC5kYXRhWzZdID0gMHgzMiwgLmRhdGFbN10gPSAweDg4LCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDgsIC5mcmVxID0gMjQ0NywgLmRhdGFbMF0gPSAweEZGLCAuZGF0YVsxXSA9IDB4RkYsCisJICAuZGF0YVsyXSA9IDB4QjUsIC5kYXRhWzNdID0gMHgxQiwgLmRhdGFbNF0gPSAweDI0LCAuZGF0YVs1XSA9IDB4MzIsCisJICAuZGF0YVs2XSA9IDB4MzIsIC5kYXRhWzddID0gMHg4OCwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSA5LCAuZnJlcSA9IDI0NTIsIC5kYXRhWzBdID0gMHhGRiwgLmRhdGFbMV0gPSAweEZGLAorCSAgLmRhdGFbMl0gPSAweEI1LCAuZGF0YVszXSA9IDB4MUIsIC5kYXRhWzRdID0gMHgyNCwgLmRhdGFbNV0gPSAweDMyLAorCSAgLmRhdGFbNl0gPSAweDMyLCAuZGF0YVs3XSA9IDB4ODgsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gMTAsIC5mcmVxID0gMjQ1NywgLmRhdGFbMF0gPSAweEZGLCAuZGF0YVsxXSA9IDB4RkYsCisJICAuZGF0YVsyXSA9IDB4QjUsIC5kYXRhWzNdID0gMHgxQiwgLmRhdGFbNF0gPSAweDI0LCAuZGF0YVs1XSA9IDB4MzIsCisJICAuZGF0YVs2XSA9IDB4MzIsIC5kYXRhWzddID0gMHg4OCwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSAxMSwgLmZyZXEgPSAyNDYyLCAuZGF0YVswXSA9IDB4RkYsIC5kYXRhWzFdID0gMHhGRiwKKwkgIC5kYXRhWzJdID0gMHhCNSwgLmRhdGFbM10gPSAweDFCLCAuZGF0YVs0XSA9IDB4MjQsIC5kYXRhWzVdID0gMHgzMiwKKwkgIC5kYXRhWzZdID0gMHgzMiwgLmRhdGFbN10gPSAweDg4LCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEyLCAuZnJlcSA9IDI0NjcsIC5kYXRhWzBdID0gMHhGRiwgLmRhdGFbMV0gPSAweEZGLAorCSAgLmRhdGFbMl0gPSAweEI1LCAuZGF0YVszXSA9IDB4MUIsIC5kYXRhWzRdID0gMHgyNCwgLmRhdGFbNV0gPSAweDMyLAorCSAgLmRhdGFbNl0gPSAweDMyLCAuZGF0YVs3XSA9IDB4ODgsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gMTMsIC5mcmVxID0gMjQ3MiwgLmRhdGFbMF0gPSAweEZGLCAuZGF0YVsxXSA9IDB4RkYsCisJICAuZGF0YVsyXSA9IDB4QjUsIC5kYXRhWzNdID0gMHgxQiwgLmRhdGFbNF0gPSAweDI0LCAuZGF0YVs1XSA9IDB4MzIsCisJICAuZGF0YVs2XSA9IDB4MzIsIC5kYXRhWzddID0gMHg4OCwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSAxNCwgLmZyZXEgPSAyNDg0LCAuZGF0YVswXSA9IDB4RkYsIC5kYXRhWzFdID0gMHhGRiwKKwkgIC5kYXRhWzJdID0gMHhCNSwgLmRhdGFbM10gPSAweDFCLCAuZGF0YVs0XSA9IDB4MjQsIC5kYXRhWzVdID0gMHgzMiwKKwkgIC5kYXRhWzZdID0gMHgzMiwgLmRhdGFbN10gPSAweDg4LCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDM0LCAuZnJlcSA9IDUxNzAsIC5kYXRhWzBdID0gMHgwMCwgLmRhdGFbMV0gPSAweDIyLAorCSAgLmRhdGFbMl0gPSAweDIwLCAuZGF0YVszXSA9IDB4ODQsIC5kYXRhWzRdID0gMHgzQywgLmRhdGFbNV0gPSAweDc3LAorCSAgLmRhdGFbNl0gPSAweDM1LCAuZGF0YVs3XSA9IDB4RkYsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gMzgsIC5mcmVxID0gNTE5MCwgLmRhdGFbMF0gPSAweDAwLCAuZGF0YVsxXSA9IDB4MTEsCisJICAuZGF0YVsyXSA9IDB4MTAsIC5kYXRhWzNdID0gMHg4MywgLmRhdGFbNF0gPSAweDNDLCAuZGF0YVs1XSA9IDB4NzcsCisJICAuZGF0YVs2XSA9IDB4MzUsIC5kYXRhWzddID0gMHhGRiwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSA0MiwgLmZyZXEgPSA1MjEwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgxMSwKKwkgIC5kYXRhWzJdID0gMHgxMCwgLmRhdGFbM10gPSAweDgzLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDQ2LCAuZnJlcSA9IDUyMzAsIC5kYXRhWzBdID0gMHgwMCwgLmRhdGFbMV0gPSAweDAwLAorCSAgLmRhdGFbMl0gPSAweDAwLCAuZGF0YVszXSA9IDB4ODMsIC5kYXRhWzRdID0gMHgzQywgLmRhdGFbNV0gPSAweDc3LAorCSAgLmRhdGFbNl0gPSAweDM1LCAuZGF0YVs3XSA9IDB4RkYsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gMzYsIC5mcmVxID0gNTE4MCwgLmRhdGFbMF0gPSAweDAwLCAuZGF0YVsxXSA9IDB4MTEsCisJICAuZGF0YVsyXSA9IDB4MjAsIC5kYXRhWzNdID0gMHg4MywgLmRhdGFbNF0gPSAweDNDLCAuZGF0YVs1XSA9IDB4NzcsCisJICAuZGF0YVs2XSA9IDB4MzUsIC5kYXRhWzddID0gMHhGRiwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSA0MCwgLmZyZXEgPSA1MjAwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgxMSwKKwkgIC5kYXRhWzJdID0gMHgxMCwgLmRhdGFbM10gPSAweDg0LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDQ0LCAuZnJlcSA9IDUyMjAsIC5kYXRhWzBdID0gMHgwMCwgLmRhdGFbMV0gPSAweDExLAorCSAgLmRhdGFbMl0gPSAweDAwLCAuZGF0YVszXSA9IDB4ODMsIC5kYXRhWzRdID0gMHgzQywgLmRhdGFbNV0gPSAweDc3LAorCSAgLmRhdGFbNl0gPSAweDM1LCAuZGF0YVs3XSA9IDB4RkYsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gNDgsIC5mcmVxID0gNTI0MCwgLmRhdGFbMF0gPSAweDAwLCAuZGF0YVsxXSA9IDB4MDAsCisJICAuZGF0YVsyXSA9IDB4MDAsIC5kYXRhWzNdID0gMHg4MywgLmRhdGFbNF0gPSAweDNDLCAuZGF0YVs1XSA9IDB4NzcsCisJICAuZGF0YVs2XSA9IDB4MzUsIC5kYXRhWzddID0gMHhGRiwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSA1MiwgLmZyZXEgPSA1MjYwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDgzLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDU2LCAuZnJlcSA9IDUyODAsIC5kYXRhWzBdID0gMHgwMCwgLmRhdGFbMV0gPSAweDAwLAorCSAgLmRhdGFbMl0gPSAweDAwLCAuZGF0YVszXSA9IDB4ODMsIC5kYXRhWzRdID0gMHgzQywgLmRhdGFbNV0gPSAweDc3LAorCSAgLmRhdGFbNl0gPSAweDM1LCAuZGF0YVs3XSA9IDB4RkYsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gNjAsIC5mcmVxID0gNTMwMCwgLmRhdGFbMF0gPSAweDAwLCAuZGF0YVsxXSA9IDB4MDAsCisJICAuZGF0YVsyXSA9IDB4MDAsIC5kYXRhWzNdID0gMHg2MywgLmRhdGFbNF0gPSAweDNDLCAuZGF0YVs1XSA9IDB4NzcsCisJICAuZGF0YVs2XSA9IDB4MzUsIC5kYXRhWzddID0gMHhGRiwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSA2NCwgLmZyZXEgPSA1MzIwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDYyLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEwMCwgLmZyZXEgPSA1NTAwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDMwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEwNCwgLmZyZXEgPSA1NTIwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDIwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEwOCwgLmZyZXEgPSA1NTQwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDIwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDExMiwgLmZyZXEgPSA1NTYwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDIwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDExNiwgLmZyZXEgPSA1NTgwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDEwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEyMCwgLmZyZXEgPSA1NjAwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEyNCwgLmZyZXEgPSA1NjIwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEyOCwgLmZyZXEgPSA1NjQwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEzMiwgLmZyZXEgPSA1NjYwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEzNiwgLmZyZXEgPSA1NjgwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE0MCwgLmZyZXEgPSA1NzAwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE0OSwgLmZyZXEgPSA1NzQ1LCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE1MywgLmZyZXEgPSA1NzY1LCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE1NywgLmZyZXEgPSA1Nzg1LCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE2MSwgLmZyZXEgPSA1ODA1LCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE2NSwgLmZyZXEgPSA1ODI1LCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE4NCwgLmZyZXEgPSA0OTIwLCAuZGF0YVswXSA9IDB4NTUsIC5kYXRhWzFdID0gMHg3NywKKwkgIC5kYXRhWzJdID0gMHg5MCwgLmRhdGFbM10gPSAweEY3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDE4OCwgLmZyZXEgPSA0OTQwLCAuZGF0YVswXSA9IDB4NDQsIC5kYXRhWzFdID0gMHg3NywKKwkgIC5kYXRhWzJdID0gMHg4MCwgLmRhdGFbM10gPSAweEU3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDE5MiwgLmZyZXEgPSA0OTYwLCAuZGF0YVswXSA9IDB4NDQsIC5kYXRhWzFdID0gMHg2NiwKKwkgIC5kYXRhWzJdID0gMHg4MCwgLmRhdGFbM10gPSAweEU3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDE5NiwgLmZyZXEgPSA0OTgwLCAuZGF0YVswXSA9IDB4MzMsIC5kYXRhWzFdID0gMHg2NiwKKwkgIC5kYXRhWzJdID0gMHg3MCwgLmRhdGFbM10gPSAweEM3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDIwMCwgLmZyZXEgPSA1MDAwLCAuZGF0YVswXSA9IDB4MjIsIC5kYXRhWzFdID0gMHg1NSwKKwkgIC5kYXRhWzJdID0gMHg2MCwgLmRhdGFbM10gPSAweEQ3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDIwNCwgLmZyZXEgPSA1MDIwLCAuZGF0YVswXSA9IDB4MjIsIC5kYXRhWzFdID0gMHg1NSwKKwkgIC5kYXRhWzJdID0gMHg2MCwgLmRhdGFbM10gPSAweEM3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDIwOCwgLmZyZXEgPSA1MDQwLCAuZGF0YVswXSA9IDB4MjIsIC5kYXRhWzFdID0gMHg0NCwKKwkgIC5kYXRhWzJdID0gMHg1MCwgLmRhdGFbM10gPSAweEM3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDIxMiwgLmZyZXEgPSA1MDYwLCAuZGF0YVswXSA9IDB4MTEsIC5kYXRhWzFdID0gMHg0NCwKKwkgIC5kYXRhWzJdID0gMHg1MCwgLmRhdGFbM10gPSAweEE1LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDIxNiwgLmZyZXEgPSA1MDgwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHg0NCwKKwkgIC5kYXRhWzJdID0gMHg0MCwgLmRhdGFbM10gPSAweEI2LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDZ4X2NoYW5uZWwgYjIwNjNfY2hhbnRibFtdID0geworCXsgLmNoYW5uZWwgPSAxLCAuZnJlcSA9IDI0MTIsIC5kYXRhWzBdID0gMHg2RiwgLmRhdGFbMV0gPSAweDNDLAorCSAgLmRhdGFbMl0gPSAweDNDLCAuZGF0YVszXSA9IDB4MDQsIC5kYXRhWzRdID0gMHgwNSwgLmRhdGFbNV0gPSAweDA1LAorCSAgLmRhdGFbNl0gPSAweDA1LCAuZGF0YVs3XSA9IDB4MDUsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDgwLAorCSAgLmRhdGFbMTBdID0gMHg4MCwgLmRhdGFbMTFdID0gMHg3MCwgfSwKKwl7IC5jaGFubmVsID0gMiwgLmZyZXEgPSAyNDE3LCAuZGF0YVswXSA9IDB4NkYsIC5kYXRhWzFdID0gMHgzQywKKwkgIC5kYXRhWzJdID0gMHgzQywgLmRhdGFbM10gPSAweDA0LCAuZGF0YVs0XSA9IDB4MDUsIC5kYXRhWzVdID0gMHgwNSwKKwkgIC5kYXRhWzZdID0gMHgwNSwgLmRhdGFbN10gPSAweDA1LCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg4MCwKKwkgIC5kYXRhWzEwXSA9IDB4ODAsIC5kYXRhWzExXSA9IDB4NzAsIH0sCisJeyAuY2hhbm5lbCA9IDMsIC5mcmVxID0gMjQyMiwgLmRhdGFbMF0gPSAweDZGLCAuZGF0YVsxXSA9IDB4M0MsCisJICAuZGF0YVsyXSA9IDB4M0MsIC5kYXRhWzNdID0gMHgwNCwgLmRhdGFbNF0gPSAweDA1LCAuZGF0YVs1XSA9IDB4MDUsCisJICAuZGF0YVs2XSA9IDB4MDUsIC5kYXRhWzddID0gMHgwNSwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4ODAsCisJICAuZGF0YVsxMF0gPSAweDgwLCAuZGF0YVsxMV0gPSAweDcwLCB9LAorCXsgLmNoYW5uZWwgPSA0LCAuZnJlcSA9IDI0MjcsIC5kYXRhWzBdID0gMHg2RiwgLmRhdGFbMV0gPSAweDJDLAorCSAgLmRhdGFbMl0gPSAweDJDLCAuZGF0YVszXSA9IDB4MDQsIC5kYXRhWzRdID0gMHgwNSwgLmRhdGFbNV0gPSAweDA1LAorCSAgLmRhdGFbNl0gPSAweDA1LCAuZGF0YVs3XSA9IDB4MDUsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDgwLAorCSAgLmRhdGFbMTBdID0gMHg4MCwgLmRhdGFbMTFdID0gMHg3MCwgfSwKKwl7IC5jaGFubmVsID0gNSwgLmZyZXEgPSAyNDMyLCAuZGF0YVswXSA9IDB4NkYsIC5kYXRhWzFdID0gMHgyQywKKwkgIC5kYXRhWzJdID0gMHgyQywgLmRhdGFbM10gPSAweDA0LCAuZGF0YVs0XSA9IDB4MDUsIC5kYXRhWzVdID0gMHgwNSwKKwkgIC5kYXRhWzZdID0gMHgwNSwgLmRhdGFbN10gPSAweDA1LCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg4MCwKKwkgIC5kYXRhWzEwXSA9IDB4ODAsIC5kYXRhWzExXSA9IDB4NzAsIH0sCisJeyAuY2hhbm5lbCA9IDYsIC5mcmVxID0gMjQzNywgLmRhdGFbMF0gPSAweDZGLCAuZGF0YVsxXSA9IDB4MkMsCisJICAuZGF0YVsyXSA9IDB4MkMsIC5kYXRhWzNdID0gMHgwNCwgLmRhdGFbNF0gPSAweDA1LCAuZGF0YVs1XSA9IDB4MDUsCisJICAuZGF0YVs2XSA9IDB4MDUsIC5kYXRhWzddID0gMHgwNSwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4ODAsCisJICAuZGF0YVsxMF0gPSAweDgwLCAuZGF0YVsxMV0gPSAweDcwLCB9LAorCXsgLmNoYW5uZWwgPSA3LCAuZnJlcSA9IDI0NDIsIC5kYXRhWzBdID0gMHg2RiwgLmRhdGFbMV0gPSAweDJDLAorCSAgLmRhdGFbMl0gPSAweDJDLCAuZGF0YVszXSA9IDB4MDQsIC5kYXRhWzRdID0gMHgwNSwgLmRhdGFbNV0gPSAweDA1LAorCSAgLmRhdGFbNl0gPSAweDA1LCAuZGF0YVs3XSA9IDB4MDUsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDgwLAorCSAgLmRhdGFbMTBdID0gMHg4MCwgLmRhdGFbMTFdID0gMHg3MCwgfSwKKwl7IC5jaGFubmVsID0gOCwgLmZyZXEgPSAyNDQ3LCAuZGF0YVswXSA9IDB4NkYsIC5kYXRhWzFdID0gMHgyQywKKwkgIC5kYXRhWzJdID0gMHgyQywgLmRhdGFbM10gPSAweDA0LCAuZGF0YVs0XSA9IDB4MDUsIC5kYXRhWzVdID0gMHgwNSwKKwkgIC5kYXRhWzZdID0gMHgwNSwgLmRhdGFbN10gPSAweDA1LCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg4MCwKKwkgIC5kYXRhWzEwXSA9IDB4ODAsIC5kYXRhWzExXSA9IDB4NzAsIH0sCisJeyAuY2hhbm5lbCA9IDksIC5mcmVxID0gMjQ1MiwgLmRhdGFbMF0gPSAweDZGLCAuZGF0YVsxXSA9IDB4MUMsCisJICAuZGF0YVsyXSA9IDB4MUMsIC5kYXRhWzNdID0gMHgwNCwgLmRhdGFbNF0gPSAweDA1LCAuZGF0YVs1XSA9IDB4MDUsCisJICAuZGF0YVs2XSA9IDB4MDUsIC5kYXRhWzddID0gMHgwNSwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4ODAsCisJICAuZGF0YVsxMF0gPSAweDgwLCAuZGF0YVsxMV0gPSAweDcwLCB9LAorCXsgLmNoYW5uZWwgPSAxMCwgLmZyZXEgPSAyNDU3LCAuZGF0YVswXSA9IDB4NkYsIC5kYXRhWzFdID0gMHgxQywKKwkgIC5kYXRhWzJdID0gMHgxQywgLmRhdGFbM10gPSAweDA0LCAuZGF0YVs0XSA9IDB4MDUsIC5kYXRhWzVdID0gMHgwNSwKKwkgIC5kYXRhWzZdID0gMHgwNSwgLmRhdGFbN10gPSAweDA1LCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg4MCwKKwkgIC5kYXRhWzEwXSA9IDB4ODAsIC5kYXRhWzExXSA9IDB4NzAsIH0sCisJeyAuY2hhbm5lbCA9IDExLCAuZnJlcSA9IDI0NjIsIC5kYXRhWzBdID0gMHg2RSwgLmRhdGFbMV0gPSAweDFDLAorCSAgLmRhdGFbMl0gPSAweDFDLCAuZGF0YVszXSA9IDB4MDQsIC5kYXRhWzRdID0gMHgwNSwgLmRhdGFbNV0gPSAweDA1LAorCSAgLmRhdGFbNl0gPSAweDA1LCAuZGF0YVs3XSA9IDB4MDUsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDgwLAorCSAgLmRhdGFbMTBdID0gMHg4MCwgLmRhdGFbMTFdID0gMHg3MCwgfSwKKwl7IC5jaGFubmVsID0gMTIsIC5mcmVxID0gMjQ2NywgLmRhdGFbMF0gPSAweDZFLCAuZGF0YVsxXSA9IDB4MUMsCisJICAuZGF0YVsyXSA9IDB4MUMsIC5kYXRhWzNdID0gMHgwNCwgLmRhdGFbNF0gPSAweDA1LCAuZGF0YVs1XSA9IDB4MDUsCisJICAuZGF0YVs2XSA9IDB4MDUsIC5kYXRhWzddID0gMHgwNSwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4ODAsCisJICAuZGF0YVsxMF0gPSAweDgwLCAuZGF0YVsxMV0gPSAweDcwLCB9LAorCXsgLmNoYW5uZWwgPSAxMywgLmZyZXEgPSAyNDcyLCAuZGF0YVswXSA9IDB4NkUsIC5kYXRhWzFdID0gMHgxQywKKwkgIC5kYXRhWzJdID0gMHgxQywgLmRhdGFbM10gPSAweDA0LCAuZGF0YVs0XSA9IDB4MDUsIC5kYXRhWzVdID0gMHgwNSwKKwkgIC5kYXRhWzZdID0gMHgwNSwgLmRhdGFbN10gPSAweDA1LCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg4MCwKKwkgIC5kYXRhWzEwXSA9IDB4ODAsIC5kYXRhWzExXSA9IDB4NzAsIH0sCisJeyAuY2hhbm5lbCA9IDE0LCAuZnJlcSA9IDI0ODQsIC5kYXRhWzBdID0gMHg2RSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDQsIC5kYXRhWzRdID0gMHgwNSwgLmRhdGFbNV0gPSAweDA1LAorCSAgLmRhdGFbNl0gPSAweDA1LCAuZGF0YVs3XSA9IDB4MDUsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDgwLAorCSAgLmRhdGFbMTBdID0gMHg4MCwgLmRhdGFbMTFdID0gMHg3MCwgfSwKKwl7IC5jaGFubmVsID0gMzQsIC5mcmVxID0gNTE3MCwgLmRhdGFbMF0gPSAweDZBLCAuZGF0YVsxXSA9IDB4MEMsCisJICAuZGF0YVsyXSA9IDB4MEMsIC5kYXRhWzNdID0gMHgwMCwgLmRhdGFbNF0gPSAweDAyLCAuZGF0YVs1XSA9IDB4MDUsCisJICAuZGF0YVs2XSA9IDB4MEQsIC5kYXRhWzddID0gMHgwRCwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4ODAsCisJICAuZGF0YVsxMF0gPSAweDIwLCAuZGF0YVsxMV0gPSAweDAwLCB9LAorCXsgLmNoYW5uZWwgPSAzNiwgLmZyZXEgPSA1MTgwLCAuZGF0YVswXSA9IDB4NkEsIC5kYXRhWzFdID0gMHgwQywKKwkgIC5kYXRhWzJdID0gMHgwQywgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4MDEsIC5kYXRhWzVdID0gMHgwNSwKKwkgIC5kYXRhWzZdID0gMHgwRCwgLmRhdGFbN10gPSAweDBDLCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg4MCwKKwkgIC5kYXRhWzEwXSA9IDB4MjAsIC5kYXRhWzExXSA9IDB4MDAsIH0sCisJeyAuY2hhbm5lbCA9IDM4LCAuZnJlcSA9IDUxOTAsIC5kYXRhWzBdID0gMHg2QSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMSwgLmRhdGFbNV0gPSAweDA0LAorCSAgLmRhdGFbNl0gPSAweDBDLCAuZGF0YVs3XSA9IDB4MEMsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDgwLAorCSAgLmRhdGFbMTBdID0gMHgyMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gNDAsIC5mcmVxID0gNTIwMCwgLmRhdGFbMF0gPSAweDY5LCAuZGF0YVsxXSA9IDB4MEMsCisJICAuZGF0YVsyXSA9IDB4MEMsIC5kYXRhWzNdID0gMHgwMCwgLmRhdGFbNF0gPSAweDAxLCAuZGF0YVs1XSA9IDB4MDQsCisJICAuZGF0YVs2XSA9IDB4MEMsIC5kYXRhWzddID0gMHgwQywgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4NzAsCisJICAuZGF0YVsxMF0gPSAweDIwLCAuZGF0YVsxMV0gPSAweDAwLCB9LAorCXsgLmNoYW5uZWwgPSA0MiwgLmZyZXEgPSA1MjEwLCAuZGF0YVswXSA9IDB4NjksIC5kYXRhWzFdID0gMHgwQywKKwkgIC5kYXRhWzJdID0gMHgwQywgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4MDEsIC5kYXRhWzVdID0gMHgwNCwKKwkgIC5kYXRhWzZdID0gMHgwQiwgLmRhdGFbN10gPSAweDBDLCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg3MCwKKwkgIC5kYXRhWzEwXSA9IDB4MjAsIC5kYXRhWzExXSA9IDB4MDAsIH0sCisJeyAuY2hhbm5lbCA9IDQ0LCAuZnJlcSA9IDUyMjAsIC5kYXRhWzBdID0gMHg2OSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDA0LAorCSAgLmRhdGFbNl0gPSAweDBCLCAuZGF0YVs3XSA9IDB4MEIsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDYwLAorCSAgLmRhdGFbMTBdID0gMHgyMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gNDYsIC5mcmVxID0gNTIzMCwgLmRhdGFbMF0gPSAweDY5LCAuZGF0YVsxXSA9IDB4MEMsCisJICAuZGF0YVsyXSA9IDB4MEMsIC5kYXRhWzNdID0gMHgwMCwgLmRhdGFbNF0gPSAweDAwLCAuZGF0YVs1XSA9IDB4MDMsCisJICAuZGF0YVs2XSA9IDB4MEEsIC5kYXRhWzddID0gMHgwQiwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4NjAsCisJICAuZGF0YVsxMF0gPSAweDIwLCAuZGF0YVsxMV0gPSAweDAwLCB9LAorCXsgLmNoYW5uZWwgPSA0OCwgLmZyZXEgPSA1MjQwLCAuZGF0YVswXSA9IDB4NjksIC5kYXRhWzFdID0gMHgwQywKKwkgIC5kYXRhWzJdID0gMHgwQywgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4MDAsIC5kYXRhWzVdID0gMHgwMywKKwkgIC5kYXRhWzZdID0gMHgwQSwgLmRhdGFbN10gPSAweDBBLCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg2MCwKKwkgIC5kYXRhWzEwXSA9IDB4MjAsIC5kYXRhWzExXSA9IDB4MDAsIH0sCisJeyAuY2hhbm5lbCA9IDUyLCAuZnJlcSA9IDUyNjAsIC5kYXRhWzBdID0gMHg2OCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAyLAorCSAgLmRhdGFbNl0gPSAweDA5LCAuZGF0YVs3XSA9IDB4MDksIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDYwLAorCSAgLmRhdGFbMTBdID0gMHgyMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gNTYsIC5mcmVxID0gNTI4MCwgLmRhdGFbMF0gPSAweDY4LCAuZGF0YVsxXSA9IDB4MEMsCisJICAuZGF0YVsyXSA9IDB4MEMsIC5kYXRhWzNdID0gMHgwMCwgLmRhdGFbNF0gPSAweDAwLCAuZGF0YVs1XSA9IDB4MDEsCisJICAuZGF0YVs2XSA9IDB4MDgsIC5kYXRhWzddID0gMHgwOCwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4NTAsCisJICAuZGF0YVsxMF0gPSAweDEwLCAuZGF0YVsxMV0gPSAweDAwLCB9LAorCXsgLmNoYW5uZWwgPSA2MCwgLmZyZXEgPSA1MzAwLCAuZGF0YVswXSA9IDB4NjgsIC5kYXRhWzFdID0gMHgwQywKKwkgIC5kYXRhWzJdID0gMHgwQywgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4MDAsIC5kYXRhWzVdID0gMHgwMSwKKwkgIC5kYXRhWzZdID0gMHgwOCwgLmRhdGFbN10gPSAweDA4LCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg1MCwKKwkgIC5kYXRhWzEwXSA9IDB4MTAsIC5kYXRhWzExXSA9IDB4MDAsIH0sCisJeyAuY2hhbm5lbCA9IDY0LCAuZnJlcSA9IDUzMjAsIC5kYXRhWzBdID0gMHg2NywgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDA4LCAuZGF0YVs3XSA9IDB4MDgsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDUwLAorCSAgLmRhdGFbMTBdID0gMHgxMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTAwLCAuZnJlcSA9IDU1MDAsIC5kYXRhWzBdID0gMHg2NCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAyLCAuZGF0YVs3XSA9IDB4MDEsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDIwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTA0LCAuZnJlcSA9IDU1MjAsIC5kYXRhWzBdID0gMHg2NCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAxLCAuZGF0YVs3XSA9IDB4MDEsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDIwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTA4LCAuZnJlcSA9IDU1NDAsIC5kYXRhWzBdID0gMHg2MywgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAxLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDEwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTEyLCAuZnJlcSA9IDU1NjAsIC5kYXRhWzBdID0gMHg2MywgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDEwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTE2LCAuZnJlcSA9IDU1ODAsIC5kYXRhWzBdID0gMHg2MiwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDEwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTIwLCAuZnJlcSA9IDU2MDAsIC5kYXRhWzBdID0gMHg2MiwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTI0LCAuZnJlcSA9IDU2MjAsIC5kYXRhWzBdID0gMHg2MiwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTI4LCAuZnJlcSA9IDU2NDAsIC5kYXRhWzBdID0gMHg2MSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTMyLCAuZnJlcSA9IDU2NjAsIC5kYXRhWzBdID0gMHg2MSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTM2LCAuZnJlcSA9IDU2ODAsIC5kYXRhWzBdID0gMHg2MSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTQwLCAuZnJlcSA9IDU3MDAsIC5kYXRhWzBdID0gMHg2MCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTQ5LCAuZnJlcSA9IDU3NDUsIC5kYXRhWzBdID0gMHg2MCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTUzLCAuZnJlcSA9IDU3NjUsIC5kYXRhWzBdID0gMHg2MCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTU3LCAuZnJlcSA9IDU3ODUsIC5kYXRhWzBdID0gMHg2MCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTYxLCAuZnJlcSA9IDU4MDUsIC5kYXRhWzBdID0gMHg2MCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTY1LCAuZnJlcSA9IDU4MjUsIC5kYXRhWzBdID0gMHg2MCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTg0LCAuZnJlcSA9IDQ5MjAsIC5kYXRhWzBdID0gMHg2RSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwOSwgLmRhdGFbNV0gPSAweDBFLAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweEMwLAorCSAgLmRhdGFbMTBdID0gMHg1MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTg4LCAuZnJlcSA9IDQ5NDAsIC5kYXRhWzBdID0gMHg2RSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwOSwgLmRhdGFbNV0gPSAweDBELAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweEIwLAorCSAgLmRhdGFbMTBdID0gMHg1MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTkyLCAuZnJlcSA9IDQ5NjAsIC5kYXRhWzBdID0gMHg2RSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwOCwgLmRhdGFbNV0gPSAweDBDLAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweEIwLAorCSAgLmRhdGFbMTBdID0gMHg1MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTk2LCAuZnJlcSA9IDQ5ODAsIC5kYXRhWzBdID0gMHg2RCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwOCwgLmRhdGFbNV0gPSAweDBDLAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweEEwLAorCSAgLmRhdGFbMTBdID0gMHg0MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMjAwLCAuZnJlcSA9IDUwMDAsIC5kYXRhWzBdID0gMHg2RCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwOCwgLmRhdGFbNV0gPSAweDBCLAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweEEwLAorCSAgLmRhdGFbMTBdID0gMHg0MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMjA0LCAuZnJlcSA9IDUwMjAsIC5kYXRhWzBdID0gMHg2RCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwOCwgLmRhdGFbNV0gPSAweDBBLAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweEEwLAorCSAgLmRhdGFbMTBdID0gMHg0MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMjA4LCAuZnJlcSA9IDUwNDAsIC5kYXRhWzBdID0gMHg2QywgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwNywgLmRhdGFbNV0gPSAweDA5LAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDkwLAorCSAgLmRhdGFbMTBdID0gMHg0MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMjEyLCAuZnJlcSA9IDUwNjAsIC5kYXRhWzBdID0gMHg2QywgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwNiwgLmRhdGFbNV0gPSAweDA4LAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDkwLAorCSAgLmRhdGFbMTBdID0gMHg0MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMjE2LCAuZnJlcSA9IDUwODAsIC5kYXRhWzBdID0gMHg2QywgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwNSwgLmRhdGFbNV0gPSAweDA4LAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDkwLAorCSAgLmRhdGFbMTBdID0gMHg0MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKK307CisKK3N0YXRpYyB2b2lkIGxwcGh5X2IyMDYyX3Jlc2V0X3BsbF9iaWFzKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQkvL1RPRE8KKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKKworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMiwgMHhGRik7CisJdWRlbGF5KDIwKTsKKwlpZiAoYnVzLT5jaGlwX2lkID09IDB4NTM1NCkgeworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX0NPTU0xLCA0KTsKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEwyLCA0KTsKKwl9IGVsc2UgeworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDIsIDApOworCX0KKwl1ZGVsYXkoNSk7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2IyMDYyX3Zjb19jYWxpYihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEwyMSwgMHg0Mik7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEwyMSwgMHg2Mik7CisJdWRlbGF5KDIwMCk7Cit9CisKK3N0YXRpYyBpbnQgbHBwaHlfYjIwNjJfdHVuZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkgICAgdW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJc3RydWN0IGI0M19waHlfbHAgKmxwcGh5ID0gZGV2LT5waHkubHA7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+ZGV2LT5idXM7CisJY29uc3Qgc3RydWN0IGIyMDZ4X2NoYW5uZWwgKmNoYW5kYXRhID0gTlVMTDsKKwl1MzIgY3J5c3RhbF9mcmVxID0gYnVzLT5jaGlwY28ucG11LmNyeXN0YWxmcmVxICogMTAwMDsKKwl1MzIgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNiwgdG1wNywgdG1wOCwgdG1wOTsKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGIyMDYyX2NoYW50YmwpOyBpKyspIHsKKwkJaWYgKGIyMDYyX2NoYW50YmxbaV0uY2hhbm5lbCA9PSBjaGFubmVsKSB7CisJCQljaGFuZGF0YSA9ICZiMjA2Ml9jaGFudGJsW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoQjQzX1dBUk5fT04oIWNoYW5kYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliNDNfcmFkaW9fc2V0KGRldiwgQjIwNjJfU19SRlBMTF9DVEwxNCwgMHgwNCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9MR0VOQV9UVU5FMCwgY2hhbmRhdGEtPmRhdGFbMF0pOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fTEdFTkFfVFVORTIsIGNoYW5kYXRhLT5kYXRhWzFdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX0xHRU5BX1RVTkUzLCBjaGFuZGF0YS0+ZGF0YVsyXSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9UVU5FLCBjaGFuZGF0YS0+ZGF0YVszXSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19MR0VOR19DVEwxLCBjaGFuZGF0YS0+ZGF0YVs0XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9MR0VOQV9DVEw1LCBjaGFuZGF0YS0+ZGF0YVs1XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9MR0VOQV9DVEw2LCBjaGFuZGF0YS0+ZGF0YVs2XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9QR0EsIGNoYW5kYXRhLT5kYXRhWzddKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1RYX1BBRCwgY2hhbmRhdGEtPmRhdGFbOF0pOworCisJdG1wMSA9IGNyeXN0YWxfZnJlcSAvIDEwMDA7CisJdG1wMiA9IGxwcGh5LT5wZGl2ICogMTAwMDsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDMzLCAweENDKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDM0LCAweDA3KTsKKwlscHBoeV9iMjA2Ml9yZXNldF9wbGxfYmlhcyhkZXYpOworCXRtcDMgPSB0bXAyICogY2hhbm5lbDJmcmVxX2xwKGNoYW5uZWwpOworCWlmIChjaGFubmVsMmZyZXFfbHAoY2hhbm5lbCkgPCA0MDAwKQorCQl0bXAzICo9IDI7CisJdG1wNCA9IDQ4ICogdG1wMTsKKwl0bXA2ID0gdG1wMyAvIHRtcDQ7CisJdG1wNyA9IHRtcDMgJSB0bXA0OworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMjYsIHRtcDYpOworCXRtcDUgPSB0bXA3ICogMHgxMDA7CisJdG1wNiA9IHRtcDUgLyB0bXA0OworCXRtcDcgPSB0bXA1ICUgdG1wNDsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDI3LCB0bXA2KTsKKwl0bXA1ID0gdG1wNyAqIDB4MTAwOworCXRtcDYgPSB0bXA1IC8gdG1wNDsKKwl0bXA3ID0gdG1wNSAlIHRtcDQ7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEwyOCwgdG1wNik7CisJdG1wNSA9IHRtcDcgKiAweDEwMDsKKwl0bXA2ID0gdG1wNSAvIHRtcDQ7CisJdG1wNyA9IHRtcDUgJSB0bXA0OworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMjksIHRtcDYgKyAoKDIgKiB0bXA3KSAvIHRtcDQpKTsKKwl0bXA4ID0gYjQzX3JhZGlvX3JlYWQoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDE5KTsKKwl0bXA5ID0gKCgyICogdG1wMyAqICh0bXA4ICsgMSkpICsgKDMgKiB0bXAxKSkgLyAoNiAqIHRtcDEpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMjMsICh0bXA5ID4+IDgpICsgMTYpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMjQsIHRtcDkgJiAweEZGKTsKKworCWxwcGh5X2IyMDYyX3Zjb19jYWxpYihkZXYpOworCWlmIChiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMykgJiAweDEwKSB7CisJCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMzMsIDB4RkMpOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDM0LCAwKTsKKwkJbHBwaHlfYjIwNjJfcmVzZXRfcGxsX2JpYXMoZGV2KTsKKwkJbHBwaHlfYjIwNjJfdmNvX2NhbGliKGRldik7CisJCWlmIChiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMykgJiAweDEwKQorCQkJZXJyID0gLUVJTzsKKwl9CisKKwliNDNfcmFkaW9fbWFzayhkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMTQsIH4weDA0KTsKKwlyZXR1cm4gZXJyOworfQorCisKKy8qIFRoaXMgd2FzIHByZXZpb3VzbHkgY2FsbGVkIGxwcGh5X2phcGFuX2ZpbHRlciAqLworc3RhdGljIHZvaWQgbHBwaHlfc2V0X2FuYWxvZ19maWx0ZXIoc3RydWN0IGI0M193bGRldiAqZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKwl1MTYgdG1wID0gKGNoYW5uZWwgPT0gMTQpOyAvL1NQRUMgRklYTUUgY2hlY2sgamFwYW53aWRlZmlsdGVyIQorCisJaWYgKGRldi0+cGh5LnJldiA8IDIpIHsgLy9TUEVDIEZJWE1FIElzbid0IHRoaXMgcmV2MC8xLXNwZWNpZmljPworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfTFBfUEhZX0NUTCwgMHhGQ0ZGLCB0bXAgPDwgOSk7CisJCWlmICgoZGV2LT5waHkucmV2ID09IDEpICYmIChscHBoeS0+cmNfY2FwKSkKKwkJCWxwcGh5X3NldF9yY19jYXAoZGV2KTsKKwl9IGVsc2UgeworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19UWF9CQl9TUDMsIDB4M0YpOworCX0KK30KKworc3RhdGljIHZvaWQgbHBwaHlfYjIwNjNfdmNvX2NhbGliKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwl1MTYgdG1wOworCisJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA2M19QTExfU1AxLCB+MHg0MCk7CisJdG1wID0gYjQzX3JhZGlvX3JlYWQoZGV2LCBCMjA2M19QTExfSlRBR19DQUxOUlNUKSAmIDB4Rjg7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfQ0FMTlJTVCwgdG1wKTsKKwl1ZGVsYXkoMSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfQ0FMTlJTVCwgdG1wIHwgMHg0KTsKKwl1ZGVsYXkoMSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfQ0FMTlJTVCwgdG1wIHwgMHg2KTsKKwl1ZGVsYXkoMSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfQ0FMTlJTVCwgdG1wIHwgMHg3KTsKKwl1ZGVsYXkoMzAwKTsKKwliNDNfcmFkaW9fc2V0KGRldiwgQjIwNjNfUExMX1NQMSwgMHg0MCk7Cit9CisKK3N0YXRpYyBpbnQgbHBwaHlfYjIwNjNfdHVuZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkgICAgdW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+ZGV2LT5idXM7CisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDZ4X2NoYW5uZWwgKmNoYW5kYXRhID0gTlVMTDsKKwl1MzIgY3J5c3RhbF9mcmVxID0gYnVzLT5jaGlwY28ucG11LmNyeXN0YWxmcmVxICogMTAwMDsKKwl1MzIgZnJlcXJlZiwgdmNvX2ZyZXEsIHZhbDEsIHZhbDIsIHZhbDMsIHRpbWVvdXQsIHRpbWVvdXRyZWYsIGNvdW50OworCXUxNiBvbGRfY29tbTE1LCBzY2FsZTsKKwl1MzIgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNjsKKwlpbnQgaSwgZGl2ID0gKGNyeXN0YWxfZnJlcSA8PSAyNjAwMDAwMCA/IDEgOiAyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGIyMDYzX2NoYW50YmwpOyBpKyspIHsKKwkJaWYgKGIyMDYzX2NoYW50YmxbaV0uY2hhbm5lbCA9PSBjaGFubmVsKSB7CisJCQljaGFuZGF0YSA9ICZiMjA2M19jaGFudGJsW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoQjQzX1dBUk5fT04oIWNoYW5kYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19MT0dFTl9WQ09CVUYxLCBjaGFuZGF0YS0+ZGF0YVswXSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfTE9HRU5fTUlYRVIyLCBjaGFuZGF0YS0+ZGF0YVsxXSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfTE9HRU5fQlVGMiwgY2hhbmRhdGEtPmRhdGFbMl0pOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX0xPR0VOX1JDQ1IxLCBjaGFuZGF0YS0+ZGF0YVszXSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfQV9SWF8xU1QzLCBjaGFuZGF0YS0+ZGF0YVs0XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfQV9SWF8yTkQxLCBjaGFuZGF0YS0+ZGF0YVs1XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfQV9SWF8yTkQ0LCBjaGFuZGF0YS0+ZGF0YVs2XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfQV9SWF8yTkQ3LCBjaGFuZGF0YS0+ZGF0YVs3XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfQV9SWF9QUzYsIGNoYW5kYXRhLT5kYXRhWzhdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19UWF9SRl9DVEwyLCBjaGFuZGF0YS0+ZGF0YVs5XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfVFhfUkZfQ1RMNSwgY2hhbmRhdGEtPmRhdGFbMTBdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19QQV9DVEwxMSwgY2hhbmRhdGEtPmRhdGFbMTFdKTsKKworCW9sZF9jb21tMTUgPSBiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYzX0NPTU0xNSk7CisJYjQzX3JhZGlvX3NldChkZXYsIEIyMDYzX0NPTU0xNSwgMHgxRSk7CisKKwlpZiAoY2hhbmRhdGEtPmZyZXEgPiA0MDAwKSAvKiBzcGVjIHNheXMgMjQ4NCwgYnV0IDQwMDAgaXMgc2FmZXIgKi8KKwkJdmNvX2ZyZXEgPSBjaGFuZGF0YS0+ZnJlcSA8PCAxOworCWVsc2UKKwkJdmNvX2ZyZXEgPSBjaGFuZGF0YS0+ZnJlcSA8PCAyOworCisJZnJlcXJlZiA9IGNyeXN0YWxfZnJlcSAqIDM7CisJdmFsMSA9IGxwcGh5X3FkaXZfcm91bmR1cChjcnlzdGFsX2ZyZXEsIDEwMDAwMDAsIDE2KTsKKwl2YWwyID0gbHBwaHlfcWRpdl9yb3VuZHVwKGNyeXN0YWxfZnJlcSwgMTAwMDAwMCAqIGRpdiwgMTYpOworCXZhbDMgPSBscHBoeV9xZGl2X3JvdW5kdXAodmNvX2ZyZXEsIDMsIDE2KTsKKwl0aW1lb3V0ID0gKCgoKDggKiBjcnlzdGFsX2ZyZXEpIC8gKGRpdiAqIDUwMDAwMDApKSArIDEpID4+IDEpIC0gMTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCMywgMHgyKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9WQ09fQ0FMSUI2LAorCQkJICAweEZGRjgsIHRpbWVvdXQgPj4gMik7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCNywKKwkJCSAgMHhGRjlGLHRpbWVvdXQgPDwgNSk7CisKKwl0aW1lb3V0cmVmID0gKCgoKDggKiBjcnlzdGFsX2ZyZXEpIC8gKGRpdiAqICh0aW1lb3V0ICsgMSkpKSArCisJCQkJCQk5OTk5OTkpIC8gMTAwMDAwMCkgKyAxOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9WQ09fQ0FMSUI1LCB0aW1lb3V0cmVmKTsKKworCWNvdW50ID0gbHBwaHlfcWRpdl9yb3VuZHVwKHZhbDMsIHZhbDIgKyAxNiwgMTYpOworCWNvdW50ICo9ICh0aW1lb3V0ICsgMSkgKiAodGltZW91dHJlZiArIDEpOworCWNvdW50LS07CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCNywKKwkJCQkJCTB4RjAsIGNvdW50ID4+IDgpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9WQ09fQ0FMSUI4LCBjb3VudCAmIDB4RkYpOworCisJdG1wMSA9ICgodmFsMyAqIDYyNTAwKSAvIGZyZXFyZWYpIDw8IDQ7CisJdG1wMiA9ICgodmFsMyAqIDYyNTAwKSAlIGZyZXFyZWYpIDw8IDQ7CisJd2hpbGUgKHRtcDIgPj0gZnJlcXJlZikgeworCQl0bXAxKys7CisJCXRtcDIgLT0gZnJlcXJlZjsKKwl9CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfU0cxLCAweEZGRTAsIHRtcDEgPj4gNCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfU0cyLCAweEZFMEYsIHRtcDEgPDwgNCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfU0cyLCAweEZGRjAsIHRtcDEgPj4gMTYpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9TRzMsICh0bXAyID4+IDgpICYgMHhGRik7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfUExMX1NHNCwgdG1wMiAmIDB4RkYpOworCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfUExMX0xGMSwgMHhCOSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfUExMX0xGMiwgMHg4OCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfUExMX0xGMywgMHgyOCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfUExMX0xGNCwgMHg2Myk7CisKKwl0bXAzID0gKCg0MSAqICh2YWwzIC0gMzAwMCkpIC8xMjAwKSArIDI3OworCXRtcDQgPSBscHBoeV9xZGl2X3JvdW5kdXAoMTMyMDAwICogdG1wMSwgODQ1MSwgMTYpOworCisJaWYgKCh0bXA0ICsgdG1wMyAtIDEpIC8gdG1wMyA+IDYwKSB7CisJCXNjYWxlID0gMTsKKwkJdG1wNSA9ICgodG1wNCArIHRtcDMpIC8gKHRtcDMgPDwgMSkpIC0gODsKKwl9IGVsc2UgeworCQlzY2FsZSA9IDA7CisJCXRtcDUgPSAoKHRtcDQgKyAodG1wMyA+PiAxKSkgLyB0bXAzKSAtIDg7CisJfQorCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNjNfUExMX0pUQUdfUExMX0NQMiwgMHhGRkMwLCB0bXA1KTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9DUDIsIDB4RkZCRiwgc2NhbGUgPDwgNik7CisKKwl0bXA2ID0gbHBwaHlfcWRpdl9yb3VuZHVwKDEwMCAqIHZhbDEsIHZhbDMsIDE2KTsKKwl0bXA2ICo9ICh0bXA1ICogOCkgKiAoc2NhbGUgKyAxKTsKKwlpZiAodG1wNiA+IDE1MCkKKwkJdG1wNiA9IDA7CisKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9DUDMsIDB4RkZFMCwgdG1wNik7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfQ1AzLCAweEZGREYsIHNjYWxlIDw8IDUpOworCisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfWFRBTF8xMiwgMHhGRkZCLCAweDQpOworCWlmIChjcnlzdGFsX2ZyZXEgPiAyNjAwMDAwMCkKKwkJYjQzX3JhZGlvX3NldChkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9YVEFMXzEyLCAweDIpOworCWVsc2UKKwkJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA2M19QTExfSlRBR19QTExfWFRBTF8xMiwgMHhGRCk7CisKKwlpZiAodmFsMSA9PSA0NSkKKwkJYjQzX3JhZGlvX3NldChkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9WQ08xLCAweDIpOworCWVsc2UKKwkJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA2M19QTExfSlRBR19QTExfVkNPMSwgMHhGRCk7CisKKwliNDNfcmFkaW9fc2V0KGRldiwgQjIwNjNfUExMX1NQMiwgMHgzKTsKKwl1ZGVsYXkoMSk7CisJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA2M19QTExfU1AyLCAweEZGRkMpOworCWxwcGh5X2IyMDYzX3Zjb19jYWxpYihkZXYpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX0NPTU0xNSwgb2xkX2NvbW0xNSk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBiNDNfbHBwaHlfb3BfZ2V0X2RlZmF1bHRfY2hhbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCitzdGF0aWMgaW50IGI0M19scHBoeV9vcF9zd2l0Y2hfY2hhbm5lbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBuZXdfY2hhbm5lbCkKIHsKLQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMzY7CisJc3RydWN0IGI0M19waHlfbHAgKmxwcGh5ID0gZGV2LT5waHkubHA7CisJaW50IGVycjsKKworCWlmIChkZXYtPnBoeS5yYWRpb192ZXIgPT0gMHgyMDYzKSB7CisJCWVyciA9IGxwcGh5X2IyMDYzX3R1bmUoZGV2LCBuZXdfY2hhbm5lbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCWVyciA9IGxwcGh5X2IyMDYyX3R1bmUoZGV2LCBuZXdfY2hhbm5lbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlscHBoeV9zZXRfYW5hbG9nX2ZpbHRlcihkZXYsIG5ld19jaGFubmVsKTsKKwkJbHBwaHlfYWRqdXN0X2dhaW5fdGFibGUoZGV2LCBjaGFubmVsMmZyZXFfbHAobmV3X2NoYW5uZWwpKTsKKwl9CisKKwlscHBoeS0+Y2hhbm5lbCA9IG5ld19jaGFubmVsOworCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fQ0hBTk5FTCwgbmV3X2NoYW5uZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjQzX2xwcGh5X29wX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWludCBlcnI7CisKKwlscHBoeV9yZWFkX2JhbmRfc3Byb20oZGV2KTsgLy9GSVhNRSBzaG91bGQgdGhpcyBiZSBpbiBwcmVwYXJlX3N0cnVjdHM/CisJbHBwaHlfYmFzZWJhbmRfaW5pdChkZXYpOworCWxwcGh5X3JhZGlvX2luaXQoZGV2KTsKKwlscHBoeV9jYWxpYnJhdGVfcmMoZGV2KTsKKwllcnIgPSBiNDNfbHBwaHlfb3Bfc3dpdGNoX2NoYW5uZWwoZGV2LCA3KTsKKwlpZiAoZXJyKSB7CisJCWI0M2RiZyhkZXYtPndsLCAiU3dpdGNoIHRvIGNoYW5uZWwgNyBmYWlsZWQsIGVycm9yID0gJWQuXG4iLAorCQkgICAgICAgZXJyKTsKKwl9CisJbHBwaHlfdHhfcGN0bF9pbml0KGRldik7CisJbHBwaHlfY2FsaWJyYXRpb24oZGV2KTsKKwkvL1RPRE8gQUNJIGluaXQKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBiNDNfbHBwaHlfb3Bfc2V0X3J4X2FudGVubmEoc3RydWN0IGI0M193bGRldiAqZGV2LCBpbnQgYW50ZW5uYSkKIHsKLQkvL1RPRE8KKwlpZiAoZGV2LT5waHkucmV2ID49IDIpCisJCXJldHVybjsgLy8gcmV2MisgZG9lc24ndCBzdXBwb3J0IGFudGVubmEgZGl2ZXJzaXR5CisKKwlpZiAoQjQzX1dBUk5fT04oYW50ZW5uYSA+IEI0M19BTlRFTk5BX0FVVE8xKSkKKwkJcmV0dXJuOworCisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweEZGRkQsIGFudGVubmEgJiAweDIpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNHQUlOX0NUTCwgMHhGRkZFLCBhbnRlbm5hICYgMHgxKTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX2xwcGh5X29wX2FkanVzdF90eHBvd2VyKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKQEAgLTUyNCw3ICsyMjI4LDYgQEAKIAlyZXR1cm4gQjQzX1RYUFdSX1JFU19ET05FOwogfQogCi0KIGNvbnN0IHN0cnVjdCBiNDNfcGh5X29wZXJhdGlvbnMgYjQzX3BoeW9wc19scCA9IHsKIAkuYWxsb2NhdGUJCT0gYjQzX2xwcGh5X29wX2FsbG9jYXRlLAogCS5mcmVlCQkJPSBiNDNfbHBwaHlfb3BfZnJlZSwKQEAgLTUzMiw2ICsyMjM1LDcgQEAKIAkuaW5pdAkJCT0gYjQzX2xwcGh5X29wX2luaXQsCiAJLnBoeV9yZWFkCQk9IGI0M19scHBoeV9vcF9yZWFkLAogCS5waHlfd3JpdGUJCT0gYjQzX2xwcGh5X29wX3dyaXRlLAorCS5waHlfbWFza3NldAkJPSBiNDNfbHBwaHlfb3BfbWFza3NldCwKIAkucmFkaW9fcmVhZAkJPSBiNDNfbHBwaHlfb3BfcmFkaW9fcmVhZCwKIAkucmFkaW9fd3JpdGUJCT0gYjQzX2xwcGh5X29wX3JhZGlvX3dyaXRlLAogCS5zb2Z0d2FyZV9yZmtpbGwJPSBiNDNfbHBwaHlfb3Bfc29mdHdhcmVfcmZraWxsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5oCmluZGV4IDE4MzcwYjQuLmMzMjMyYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmgKQEAgLTI3MywxMiArMjczLDE5IEBACiAjZGVmaW5lIEI0M19MUFBIWV9BRkVfRERGU19QT0lOVEVSX0lOSVQJCUI0M19QSFlfT0ZETSgweEI4KSAvKiBBRkUgRERGUyBwb2ludGVyIGluaXQgKi8KICNkZWZpbmUgQjQzX0xQUEhZX0FGRV9EREZTX0lOQ1JfSU5JVAkJQjQzX1BIWV9PRkRNKDB4QjkpIC8qIEFGRSBEREZTIGluY3IgaW5pdCAqLwogI2RlZmluZSBCNDNfTFBQSFlfTVJDTk9JU0VSRURVQ1RJT04JCUI0M19QSFlfT0ZETSgweEJBKSAvKiBtcmNOb2lzZVJlZHVjdGlvbiAqLwotI2RlZmluZSBCNDNfTFBQSFlfVFJMT09LVVAzCQkJQjQzX1BIWV9PRkRNKDB4QkIpIC8qIFRSTG9va3VwMyAqLwotI2RlZmluZSBCNDNfTFBQSFlfVFJMT09LVVA0CQkJQjQzX1BIWV9PRkRNKDB4QkMpIC8qIFRSTG9va3VwNCAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9PS1VQXzMJCQlCNDNfUEhZX09GRE0oMHhCQikgLyogVFIgTG9va3VwIDMgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RSX0xPT0tVUF80CQkJQjQzX1BIWV9PRkRNKDB4QkMpIC8qIFRSIExvb2t1cCA0ICovCiAjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9GSUZPX1NUQVQJCUI0M19QSFlfT0ZETSgweEJEKSAvKiBSYWRhciBGSUZPIFN0YXR1cyAqLwogI2RlZmluZSBCNDNfTFBQSFlfR1BJT19PVVRFTgkJCUI0M19QSFlfT0ZETSgweEJFKSAvKiBHUElPIE91dCBlbmFibGUgKi8KICNkZWZpbmUgQjQzX0xQUEhZX0dQSU9fU0VMRUNUCQkJQjQzX1BIWV9PRkRNKDB4QkYpIC8qIEdQSU8gU2VsZWN0ICovCiAjZGVmaW5lIEI0M19MUFBIWV9HUElPX09VVAkJCUI0M19QSFlfT0ZETSgweEMwKSAvKiBHUElPIE91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfNEMzCQkJCUI0M19QSFlfT0ZETSgweEMzKSAvKiB1bmtub3duLCB1c2VkIGR1cmluZyBCQiBpbml0ICovCisjZGVmaW5lIEI0M19MUFBIWV80QzQJCQkJQjQzX1BIWV9PRkRNKDB4QzQpIC8qIHVua25vd24sIHVzZWQgZHVyaW5nIEJCIGluaXQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZXzRDNQkJCQlCNDNfUEhZX09GRE0oMHhDNSkgLyogdW5rbm93biwgdXNlZCBkdXJpbmcgQkIgaW5pdCAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9PS1VQXzUJCQlCNDNfUEhZX09GRE0oMHhDNykgLyogVFIgTG9va3VwIDUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RSX0xPT0tVUF82CQkJQjQzX1BIWV9PRkRNKDB4QzgpIC8qIFRSIExvb2t1cCA2ICovCisjZGVmaW5lIEI0M19MUFBIWV9UUl9MT09LVVBfNwkJCUI0M19QSFlfT0ZETSgweEM5KSAvKiBUUiBMb29rdXAgNyAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9PS1VQXzgJCQlCNDNfUEhZX09GRE0oMHhDQSkgLyogVFIgTG9va3VwIDggKi8KIAogCiAKQEAgLTgxOCwxNCArODI1LDMwIEBACiAJZW51bSBiNDNfbHBwaHlfdHhwY3RsX21vZGUgdHhwY3RsX21vZGU7CiAKIAkvKiBUcmFuc21pdCBpc29sYXRpb24gbWVkaXVtIGJhbmQgKi8KLQl1OCB0eF9pc29sYXRpb25fbWVkX2JhbmQ7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisJdTggdHhfaXNvbGF0aW9uX21lZF9iYW5kOwogCS8qIFRyYW5zbWl0IGlzb2xhdGlvbiBsb3cgYmFuZCAqLwotCXU4IHR4X2lzb2xhdGlvbl9sb3dfYmFuZDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwl1OCB0eF9pc29sYXRpb25fbG93X2JhbmQ7CiAJLyogVHJhbnNtaXQgaXNvbGF0aW9uIGhpZ2ggYmFuZCAqLwotCXU4IHR4X2lzb2xhdGlvbl9oaV9iYW5kOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCXU4IHR4X2lzb2xhdGlvbl9oaV9iYW5kOworCisJLyogTWF4IHRyYW5zbWl0IHBvd2VyIG1lZGl1bSBiYW5kICovCisJdTE2IG1heF90eF9wd3JfbWVkX2JhbmQ7CisJLyogTWF4IHRyYW5zbWl0IHBvd2VyIGxvdyBiYW5kICovCisJdTE2IG1heF90eF9wd3JfbG93X2JhbmQ7CisJLyogTWF4IHRyYW5zbWl0IHBvd2VyIGhpZ2ggYmFuZCAqLworCXUxNiBtYXhfdHhfcHdyX2hpX2JhbmQ7CisKKwkvKiBGSVhNRSBXaGF0IGFyZSB0aGVzZSB1c2VkIGZvcj8gKi8KKwkvKiBGSVhNRSBJcyAxNSB0aGUgY29ycmVjdCBhcnJheSBzaXplPyAqLworCXUxNiB0eF9tYXhfcmF0ZVsxNV07CisJdTE2IHR4X21heF9yYXRlbFsxNV07CisJdTE2IHR4X21heF9yYXRlaFsxNV07CisKKwkvKiBUcmFuc21pdCBwb3dlciBhcnJheXMgKi8KKwlzMTYgdHhwYVszXSwgdHhwYWxbM10sIHR4cGFoWzNdOwogCiAJLyogUmVjZWl2ZSBwb3dlciBvZmZzZXQgKi8KLQl1OCByeF9wd3Jfb2Zmc2V0OyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCXU4IHJ4X3B3cl9vZmZzZXQ7CiAKIAkvKiBUU1NJIHRyYW5zbWl0IGNvdW50ICovCiAJdTE2IHRzc2lfdHhfY291bnQ7CkBAIC04NDEsMTYgKzg2NCwxNiBAQAogCXM4IHR4X3B3cl9pZHhfb3ZlcjsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KIAogCS8qIFJTU0kgdmYgKi8KLQl1OCByc3NpX3ZmOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCXU4IHJzc2lfdmY7CiAJLyogUlNTSSB2YyAqLwotCXU4IHJzc2lfdmM7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisJdTggcnNzaV92YzsKIAkvKiBSU1NJIGdzICovCi0JdTggcnNzaV9nczsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwl1OCByc3NpX2dzOwogCiAJLyogUkMgY2FwICovCiAJdTggcmNfY2FwOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLwogCS8qIEJYIGFyY2ggKi8KLQl1OCBieF9hcmNoOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCXU4IGJ4X2FyY2g7CiAKIAkvKiBGdWxsIGNhbGlicmF0aW9uIGNoYW5uZWwgKi8KIAl1OCBmdWxsX2NhbGliX2NoYW47IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCkBAIC04NTgsOCArODgxLDIzIEBACiAJLyogVHJhbnNtaXQgaXFsb2NhbCBiZXN0IGNvZWZmcyAqLwogCWJvb2wgdHhfaXFsb2NfYmVzdF9jb2VmZnNfdmFsaWQ7CiAJdTggdHhfaXFsb2NfYmVzdF9jb2VmZnNbMTFdOworCisJLyogVXNlZCBmb3IgIlNhdmUvUmVzdG9yZSBEaWcgRmlsdCBTdGF0ZSIgKi8KKwl1MTYgZGlnX2ZsdF9zdGF0ZVs5XTsKKworCWJvb2wgY3JzX3Vzcl9kaXNhYmxlLCBjcnNfc3lzX2Rpc2FibGU7CisKKwl1bnNpZ25lZCBpbnQgcGRpdjsKKworCS8qIFRoZSBjaGFubmVsIHdlIGFyZSB0dW5lZCB0byAqLworCXU4IGNoYW5uZWw7CiB9OwogCitlbnVtIHRzc2lfbXV4X21vZGUgeworCVRTU0lfTVVYX1BSRVBBLAorCVRTU0lfTVVYX1BPU1RQQSwKKwlUU1NJX01VWF9FWFQsCit9OwogCiBzdHJ1Y3QgYjQzX3BoeV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBiNDNfcGh5X29wZXJhdGlvbnMgYjQzX3BoeW9wc19scDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKaW5kZXggYmU3YjU2MC4uOTkyMzE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKQEAgLTEzNyw3ICsxMzcsOCBAQAogCiAJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA1NV9NQVNURVIxLCAweEZGRjMpOwogCW1zbGVlcCgxKTsKLQlpZiAoKHNwcm9tLT5yZXZpc2lvbiAhPSA0KSB8fCAhKHNwcm9tLT5ib2FyZGZsYWdzX2hpICYgMHgwMDAyKSkgeworCWlmICgoc3Byb20tPnJldmlzaW9uICE9IDQpIHx8CisJICAgIShzcHJvbS0+Ym9hcmRmbGFnc19oaSAmIEI0M19CRkhfUlNTSUlOVikpIHsKIAkJaWYgKChiaW5mby0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQlJPQURDT00pIHx8CiAJCSAgICAoYmluZm8tPnR5cGUgIT0gMHg0NkQpIHx8CiAJCSAgICAoYmluZm8tPnJldiA8IDB4NDEpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKaW5kZXggNjkxMzhlOC4uMzQ5OGI2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYwpAQCAtMzIsOSArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKIAotc3RhdGljIHZvaWQgYjQzX3Bpb19yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLQogc3RhdGljIHUxNiBnZW5lcmF0ZV9jb29raWUoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSwKIAkJCSAgIHN0cnVjdCBiNDNfcGlvX3R4cGFja2V0ICpwYWNrKQogewpAQCAtMTQ0LDcgKzE0MSw2IEBACiAJcSA9IGt6YWxsb2Moc2l6ZW9mKCpxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFxKQogCQlyZXR1cm4gTlVMTDsKLQlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7CiAJcS0+ZGV2ID0gZGV2OwogCXEtPnJldiA9IGRldi0+ZGV2LT5pZC5yZXZpc2lvbjsKIAlxLT5tbWlvX2Jhc2UgPSBpbmRleF90b19waW9xdWV1ZV9iYXNlKGRldiwgaW5kZXgpICsKQEAgLTE3OSwxMiArMTc1LDEwIEBACiAJcSA9IGt6YWxsb2Moc2l6ZW9mKCpxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFxKQogCQlyZXR1cm4gTlVMTDsKLQlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7CiAJcS0+ZGV2ID0gZGV2OwogCXEtPnJldiA9IGRldi0+ZGV2LT5pZC5yZXZpc2lvbjsKIAlxLT5tbWlvX2Jhc2UgPSBpbmRleF90b19waW9xdWV1ZV9iYXNlKGRldiwgaW5kZXgpICsKIAkJICAgICAgIHBpb19yeHF1ZXVlX29mZnNldChkZXYpOwotCUlOSVRfV09SSygmcS0+cnhfd29yaywgYjQzX3Bpb19yeF93b3JrKTsKIAogCS8qIEVuYWJsZSBEaXJlY3QgRklGTyBSWCAoUElPKSBvbiB0aGUgZW5naW5lLiAqLwogCWI0M19kbWFfZGlyZWN0X2ZpZm9fcngoZGV2LCBpbmRleCwgMSk7CkBAIC0yNDksMTMgKzI0Myw2IEBACiAJZGVzdHJveV9xdWV1ZV90eChwaW8sIHR4X3F1ZXVlX0FDX0JLKTsKIH0KIAotdm9pZCBiNDNfcGlvX3N0b3Aoc3RydWN0IGI0M193bGRldiAqZGV2KQotewotCWlmICghYjQzX3VzaW5nX3Bpb190cmFuc2ZlcnMoZGV2KSkKLQkJcmV0dXJuOwotCWNhbmNlbF93b3JrX3N5bmMoJmRldi0+cGlvLnJ4X3F1ZXVlLT5yeF93b3JrKTsKLX0KLQogaW50IGI0M19waW9faW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJc3RydWN0IGI0M19waW8gKnBpbyA9ICZkZXYtPnBpbzsKQEAgLTQ2MSw4ICs0NDgsOCBAQAogCiAJY29va2llID0gZ2VuZXJhdGVfY29va2llKHEsIHBhY2spOwogCWhkcmxlbiA9IGI0M190eGhkcl9zaXplKHEtPmRldik7Ci0JZXJyID0gYjQzX2dlbmVyYXRlX3R4aGRyKHEtPmRldiwgKHU4ICopJnR4aGRyLCBza2ItPmRhdGEsCi0JCQkJIHNrYi0+bGVuLCBpbmZvLCBjb29raWUpOworCWVyciA9IGI0M19nZW5lcmF0ZV90eGhkcihxLT5kZXYsICh1OCAqKSZ0eGhkciwgc2tiLAorCQkJCSBpbmZvLCBjb29raWUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTQ5NCw3ICs0ODEsNiBAQAogewogCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBoZHJsZW4sIHRvdGFsX2xlbjsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CkBAIC01MTIsMjAgKzQ5OCwxOCBAQAogCQlxID0gc2VsZWN0X3F1ZXVlX2J5X3ByaW9yaXR5KGRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7Ci0KIAloZHJsZW4gPSBiNDNfdHhoZHJfc2l6ZShkZXYpOwogCXRvdGFsX2xlbiA9IHJvdW5kdXAoc2tiLT5sZW4gKyBoZHJsZW4sIDQpOwogCiAJaWYgKHVubGlrZWx5KHRvdGFsX2xlbiA+IHEtPmJ1ZmZlcl9zaXplKSkgewogCQllcnIgPSAtRU5PQlVGUzsKIAkJYjQzZGJnKGRldi0+d2wsICJQSU86IFRYIHBhY2tldCBsb25nZXIgdGhhbiBxdWV1ZS5cbiIpOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAodW5saWtlbHkocS0+ZnJlZV9wYWNrZXRfc2xvdHMgPT0gMCkpIHsKIAkJZXJyID0gLUVOT0JVRlM7CiAJCWI0M3dhcm4oZGV2LT53bCwgIlBJTzogVFggcGFja2V0IG92ZXJmbG93LlxuIik7Ci0JCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXQ7CiAJfQogCUI0M19XQVJOX09OKHEtPmJ1ZmZlcl91c2VkID4gcS0+YnVmZmVyX3NpemUpOwogCkBAIC01MzQsNyArNTE4LDcgQEAKIAkJZXJyID0gLUVCVVNZOwogCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShkZXYtPndsLT5odywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCQlxLT5zdG9wcGVkID0gMTsKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBBc3NpZ24gdGhlIHF1ZXVlIG51bWJlciB0byB0aGUgcmluZyAoaWYgbm90IGFscmVhZHkgZG9uZSBiZWZvcmUpCkBAIC01NDgsMTEgKzUzMiwxMSBAQAogCQkgKiBhbnltb3JlIGFuZCBtdXN0IG5vdCB0cmFuc21pdCBpdCB1bmVuY3J5cHRlZC4gKi8KIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJZXJyID0gMDsKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJYjQzZXJyKGRldi0+d2wsICJQSU8gdHJhbnNtaXNzaW9uIGZhaWx1cmVcbiIpOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0OwogCX0KIAlxLT5ucl90eF9wYWNrZXRzKys7CiAKQEAgLTU2NCwxMyArNTQ4LDEwIEBACiAJCXEtPnN0b3BwZWQgPSAxOwogCX0KIAotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7Ci0KK291dDoKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkLiAqLwogdm9pZCBiNDNfcGlvX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBiNDNfdHhzdGF0dXMgKnN0YXR1cykKIHsKQEAgLTU4NCw4ICs1NjUsNiBAQAogCQlyZXR1cm47CiAJQjQzX1dBUk5fT04oIXBhY2spOwogCi0Jc3Bpbl9sb2NrKCZxLT5sb2NrKTsgLyogSVJRcyBhcmUgYWxyZWFkeSBkaXNhYmxlZC4gKi8KLQogCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHBhY2stPnNrYik7CiAKIAliNDNfZmlsbF90eHN0YXR1c19yZXBvcnQoZGV2LCBpbmZvLCBzdGF0dXMpOwpAQCAtNjAzLDggKzU4Miw2IEBACiAJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGRldi0+d2wtPmh3LCBxLT5xdWV1ZV9wcmlvKTsKIAkJcS0+c3RvcHBlZCA9IDA7CiAJfQotCi0Jc3Bpbl91bmxvY2soJnEtPmxvY2spOwogfQogCiB2b2lkIGI0M19waW9fZ2V0X3R4X3N0YXRzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKQEAgLTYxMiwxNyArNTg5LDE0IEBACiB7CiAJY29uc3QgaW50IG5yX3F1ZXVlcyA9IGRldi0+d2wtPmh3LT5xdWV1ZXM7CiAJc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX3F1ZXVlczsgaSsrKSB7CiAJCXEgPSBzZWxlY3RfcXVldWVfYnlfcHJpb3JpdHkoZGV2LCBpKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOwogCQlzdGF0c1tpXS5sZW4gPSBCNDNfUElPX01BWF9OUl9UWFBBQ0tFVFMgLSBxLT5mcmVlX3BhY2tldF9zbG90czsKIAkJc3RhdHNbaV0ubGltaXQgPSBCNDNfUElPX01BWF9OUl9UWFBBQ0tFVFM7CiAJCXN0YXRzW2ldLmNvdW50ID0gcS0+bnJfdHhfcGFja2V0czsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtNzYwLDM3ICs3MzQsMjMgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyogUlggd29ya3F1ZXVlLiBXZSBjYW4gc2xlZXAsIHlheSEgKi8KLXN0YXRpYyB2b2lkIGI0M19waW9fcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlLAotCQkJCQkJIHJ4X3dvcmspOwotCXVuc2lnbmVkIGludCBidWRnZXQgPSA1MDsKLQlib29sIHN0b3A7Ci0KLQlkbyB7Ci0JCXNwaW5fbG9ja19pcnEoJnEtPmxvY2spOwotCQlzdG9wID0gKHBpb19yeF9mcmFtZShxKSA9PSAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZxLT5sb2NrKTsKLQkJY29uZF9yZXNjaGVkKCk7Ci0JCWlmIChzdG9wKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoLS1idWRnZXQpOwotfQotCi0vKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkLiAqLwogdm9pZCBiNDNfcGlvX3J4KHN0cnVjdCBiNDNfcGlvX3J4cXVldWUgKnEpCiB7Ci0JLyogRHVlIHRvIGxhdGVuY3kgaXNzdWVzIHdlIG11c3QgcnVuIHRoZSBSWCBwYXRoIGluCi0JICogYSB3b3JrcXVldWUgdG8gYmUgYWJsZSB0byBzY2hlZHVsZSBiZXR3ZWVuIHBhY2tldHMuICovCi0JcXVldWVfd29yayhxLT5kZXYtPndsLT5ody0+d29ya3F1ZXVlLCAmcS0+cnhfd29yayk7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwlib29sIHN0b3A7CisKKwl3aGlsZSAoMSkgeworCQlzdG9wID0gKHBpb19yeF9mcmFtZShxKSA9PSAwKTsKKwkJaWYgKHN0b3ApCisJCQlicmVhazsKKwkJY29uZF9yZXNjaGVkKCk7CisJCWlmIChXQVJOX09OX09OQ0UoKytjb3VudCA+IDEwMDAwKSkKKwkJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIHZvaWQgYjQzX3Bpb190eF9zdXNwZW5kX3F1ZXVlKHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CiAJaWYgKHEtPnJldiA+PSA4KSB7CiAJCWI0M19waW90eF93cml0ZTMyKHEsIEI0M19QSU84X1RYQ1RMLAogCQkJCSAgYjQzX3Bpb3R4X3JlYWQzMihxLCBCNDNfUElPOF9UWENUTCkKQEAgLTgwMCwxNCArNzYwLDEwIEBACiAJCQkJICBiNDNfcGlvdHhfcmVhZDE2KHEsIEI0M19QSU9fVFhDVEwpCiAJCQkJICB8IEI0M19QSU9fVFhDVExfU1VTUFJFUSk7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX3Bpb190eF9yZXN1bWVfcXVldWUoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKIAlpZiAocS0+cmV2ID49IDgpIHsKIAkJYjQzX3Bpb3R4X3dyaXRlMzIocSwgQjQzX1BJTzhfVFhDVEwsCiAJCQkJICBiNDNfcGlvdHhfcmVhZDMyKHEsIEI0M19QSU84X1RYQ1RMKQpAQCAtODE3LDcgKzc3Myw2IEBACiAJCQkJICBiNDNfcGlvdHhfcmVhZDE2KHEsIEI0M19QSU9fVFhDVEwpCiAJCQkJICAmIH5CNDNfUElPX1RYQ1RMX1NVU1BSRVEpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgYjQzX3Bpb190eF9zdXNwZW5kKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaAppbmRleCA2YzE3NGM5Li43ZGQ2NDljOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaApAQCAtNzAsNyArNzAsNiBAQAogCiBzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlIHsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogCXUxNiBtbWlvX2Jhc2U7CiAKIAkvKiBUaGUgZGV2aWNlIHF1ZXVlIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiAqLwpAQCAtMTAzLDEyICsxMDIsOCBAQAogCiBzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlIHsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogCXUxNiBtbWlvX2Jhc2U7CiAKLQkvKiBXb3JrIHRvIHJlZHVjZSBsYXRlbmN5IGlzc3VlcyBvbiBSWC4gKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgcnhfd29yazsKLQogCS8qIFNob3J0Y3V0IHRvIHRoZSA4MDIuMTEgY29yZSByZXZpc2lvbi4gVGhpcyBpcyB0bwogCSAqIGF2b2lkIGhvcnJpYmxlIHBvaW50ZXIgZGVyZWZlcmVuY2luZyBpbiB0aGUgZmFzdHBhdGhzLiAqLwogCXU4IHJldjsKQEAgLTE2Miw3ICsxNTcsNiBAQAogCiAKIGludCBiNDNfcGlvX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKLXZvaWQgYjQzX3Bpb19zdG9wKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiB2b2lkIGI0M19waW9fZnJlZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogCiBpbnQgYjQzX3Bpb190eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3N5c2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvc3lzZnMuYwppbmRleCA1YWRhYTM2Li5mMWFlNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvc3lzZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvc3lzZnMuYwpAQCAtOTQsNyArOTQsNiBAQAogCQkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGI0M193bGRldiAqd2xkZXYgPSBkZXZfdG9fYjQzX3dsZGV2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCWludCBtb2RlOwogCkBAIC0xMjAsNyArMTE5LDYgQEAKIAl9CiAKIAltdXRleF9sb2NrKCZ3bGRldi0+d2wtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2xkZXYtPndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHdsZGV2LT5waHkub3BzLT5pbnRlcmZfbWl0aWdhdGlvbikgewogCQllcnIgPSB3bGRldi0+cGh5Lm9wcy0+aW50ZXJmX21pdGlnYXRpb24od2xkZXYsIG1vZGUpOwpAQCAtMTMyLDcgKzEzMCw2IEBACiAJCWVyciA9IC1FTk9TWVM7CiAKIAltbWlvd2IoKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bGRldi0+d2wtPmlycV9sb2NrLCBmbGFncyk7CiAJbXV0ZXhfdW5sb2NrKCZ3bGRldi0+d2wtPm11dGV4KTsKIAogCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuYwppbmRleCA0ZWE3MzRkLi42MTAyN2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX2xwcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5jCkBAIC0xLDkgKzEsMTAgQEAKIC8qCiAKICAgQnJvYWRjb20gQjQzIHdpcmVsZXNzIGRyaXZlcgotICBJRUVFIDgwMi4xMWcgTFAtUEhZIGFuZCByYWRpbyBkZXZpY2UgZGF0YSB0YWJsZXMKKyAgSUVFRSA4MDIuMTFhL2cgTFAtUEhZIGFuZCByYWRpbyBkZXZpY2UgZGF0YSB0YWJsZXMKIAogICBDb3B5cmlnaHQgKGMpIDIwMDkgTWljaGFlbCBCdWVzY2ggPG1iQGJ1M3NjaC5kZT4KKyAgQ29weXJpZ2h0IChjKSAyMDA5IEfDoWJvciBTdGVmYW5payA8bmV0cm9sbGxlci4zZEBnbWFpbC5jb20+CiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI4LDIyICsyOSwyMiBAQAogI2luY2x1ZGUgInBoeV9scC5oIgogCiAKLS8qIEVudHJ5IG9mIHRoZSAyMDYyIHJhZGlvIGluaXQgdGFibGUgKi8KLXN0cnVjdCBiMjA2Ml9pbml0X3RhYl9lbnRyeSB7CisvKiBFbnRyeSBvZiB0aGUgMjA2Mi8yMDYzIHJhZGlvIGluaXQgdGFibGUgKi8KK3N0cnVjdCBiMjA2eF9pbml0X3RhYl9lbnRyeSB7CiAJdTE2IG9mZnNldDsKIAl1MTYgdmFsdWVfYTsKIAl1MTYgdmFsdWVfZzsKIAl1OCBmbGFnczsKIH07Ci0jZGVmaW5lIEIyMDYyX0ZMQUdfQQkweDAxIC8qIEZsYWc6IEluaXQgaW4gQSBtb2RlICovCi0jZGVmaW5lIEIyMDYyX0ZMQUdfRwkweDAyIC8qIEZsYWc6IEluaXQgaW4gRyBtb2RlICovCisjZGVmaW5lIEIyMDZYX0ZMQUdfQQkweDAxIC8qIEZsYWc6IEluaXQgaW4gQSBtb2RlICovCisjZGVmaW5lIEIyMDZYX0ZMQUdfRwkweDAyIC8qIEZsYWc6IEluaXQgaW4gRyBtb2RlICovCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYjIwNjJfaW5pdF90YWJfZW50cnkgYjIwNjJfaW5pdF90YWJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYjIwNnhfaW5pdF90YWJfZW50cnkgYjIwNjJfaW5pdF90YWJbXSA9IHsKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0xLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gMHgwMDAxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU00LCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU00LCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU01LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTcsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KQEAgLTU2LDQyICs1Nyw0MiBAQAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTE0LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1BETl9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMENBLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMENBLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0csIH0sCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMiwgLnZhbHVlX2EgPSAweDAwMTgsIC52YWx1ZV9nID0gMHgwMDE4LCAuZmxhZ3MgPSAwLCB9LCAqLwotCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDQsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAyQSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDQsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAyQSwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fR0VOX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0lRX0NBTElCLCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDEsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQywgLnZhbHVlX2EgPSAweDAwREIsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EsIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQywgLnZhbHVlX2EgPSAweDAwREIsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EsIH0sCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9MUEYsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMSwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0JJQVMwLCAudmFsdWVfYSA9IDB4MDA0MSwgLnZhbHVlX2cgPSAweDAwNDEsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR05FQV9CSUFTMSwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwotCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTAsIC52YWx1ZV9hID0gMHgwMERELCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTAsIC52YWx1ZV9hID0gMHgwMERELCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX1RVTkUyLCAudmFsdWVfYSA9IDB4MDBERCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX1RVTkUzLCAudmFsdWVfYSA9IDB4MDA3NywgLnZhbHVlX2cgPSAweDAwQjUsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDBGRiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTIsIC52YWx1ZV9hID0gMHgwMERELCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTMsIC52YWx1ZV9hID0gMHgwMDc3LCAudmFsdWVfZyA9IDB4MDBCNSwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9DVEw0LCAudmFsdWVfYSA9IDB4MDAxRiwgLnZhbHVlX2cgPSAweDAwMUYsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9DVEw1LCAudmFsdWVfYSA9IDB4MDAzMiwgLnZhbHVlX2cgPSAweDAwMzIsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9DVEw2LCAudmFsdWVfYSA9IDB4MDAzMiwgLnZhbHVlX2cgPSAweDAwMzIsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9DVEw3LCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0NUTDcsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDAsIC52YWx1ZV9hID0gMHgwMDA5LCAudmFsdWVfZyA9IDB4MDAwOSwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEwyLCAudmFsdWVfYSA9IDB4MDAxOCwgLnZhbHVlX2cgPSAweDAwMTgsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMMywgLnZhbHVlX2EgPSAweDAwMjcsIC52YWx1ZV9nID0gMHgwMDI3LCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDQsIC52YWx1ZV9hID0gMHgwMDI4LCAudmFsdWVfZyA9IDB4MDAyOCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEw1LCAudmFsdWVfYSA9IDB4MDAwNywgLnZhbHVlX2cgPSAweDAwMDcsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDcsIC52YWx1ZV9hID0gMHgwMDA4LCAudmFsdWVfZyA9IDB4MDAwOCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfQ1RMMCwgLnZhbHVlX2EgPSAweDAwODIsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0NUTDAsIC52YWx1ZV9hID0gMHgwMDgyLCAudmFsdWVfZyA9IDB4MDA4MCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfR0FJTjAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfR0FJTjEsIC52YWx1ZV9hID0gMHgwMDA0LCAudmFsdWVfZyA9IDB4MDAwNCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9HQUlOMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0dBSU4xLCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfR0FJTjIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9HQUlOMywgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMCwgLnZhbHVlX2EgPSAweDAwNDMsIC52YWx1ZV9nID0gMHgwMDQzLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMSwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLwpAQCAtMTEyLDggKzExMyw4IEBACiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEwyLCAudmFsdWVfYSA9IDB4MDA4NCwgLnZhbHVlX2cgPSAweDAwODQsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEwzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEw0LCAudmFsdWVfYSA9IDB4MDAwMywgLnZhbHVlX2cgPSAweDAwMDMsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDUsIC52YWx1ZV9hID0gMHgwMDAyLCAudmFsdWVfZyA9IDB4MDAwMiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEw1LCAudmFsdWVfYSA9IDB4MDAwMiwgLnZhbHVlX2cgPSAweDAwMDIsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDcsIC52YWx1ZV9hID0gMHgwMDU4LCAudmFsdWVfZyA9IDB4MDA1OCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDgsIC52YWx1ZV9hID0gMHgwMDgyLCAudmFsdWVfZyA9IDB4MDA4MiwgLmZsYWdzID0gMCwgfSwgKi8KQEAgLTEyMSw3ICsxMjIsNyBAQAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMX0EsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0dDMkcsIC52YWx1ZV9hID0gMHgwMEZGLCAudmFsdWVfZyA9IDB4MDBGRiwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0dDNUcsIC52YWx1ZV9hID0gMHgwMEZGLCAudmFsdWVfZyA9IDB4MDBGRiwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX1RVTkUsIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDAxQiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fVFhfVFVORSwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDFCLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9QQUQsIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX1BHQSwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDg4LCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfUEFEQVVYLCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IDAsIH0sICovCkBAIC0xNTAsNyArMTUxLDcgQEAKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JBRElPX0lEX0NPREUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0yLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwotCXsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTQsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTQsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU02LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwpAQCAtMTYyLDI0ICsxNjMsMjQgQEAKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0xMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTE0LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1BEU19DVEwwLCAudmFsdWVfYSA9IDB4MDBGRiwgLnZhbHVlX2cgPSAweDAwRkYsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1BEU19DVEwwLCAudmFsdWVfYSA9IDB4MDBGRiwgLnZhbHVlX2cgPSAweDAwRkYsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1BEU19DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19QRFNfQ1RMMiwgLnZhbHVlX2EgPSAweDAwOEUsIC52YWx1ZV9nID0gMHgwMDhFLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUERTX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0JHX0NUTDAsIC52YWx1ZV9hID0gMHgwMDA2LCAudmFsdWVfZyA9IDB4MDAwNiwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0JHX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0JHX0NUTDIsIC52YWx1ZV9hID0gMHgwMDExLCAudmFsdWVfZyA9IDB4MDAxMSwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDAsIC52YWx1ZV9hID0gMHgwMEY4LCAudmFsdWVfZyA9IDB4MDBEOCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMSwgLnZhbHVlX2EgPSAweDAwM0MsIC52YWx1ZV9nID0gMHgwMDI0LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwwLCAudmFsdWVfYSA9IDB4MDBGOCwgLnZhbHVlX2cgPSAweDAwRDgsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDEsIC52YWx1ZV9hID0gMHgwMDNDLCAudmFsdWVfZyA9IDB4MDAyNCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMywgLnZhbHVlX2EgPSAweDAwNDEsIC52YWx1ZV9nID0gMHgwMDQxLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNSwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMjIsIC52YWx1ZV9nID0gMHgwMDIyLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwotCXsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMOCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEw4LCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDksIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDEwLCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDEwLCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDExLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDEsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gMCwgfSwgKi8KQEAgLTE5OCw0MSArMTk5LDQxIEBACiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMTQsIC52YWx1ZV9hID0gMHgwMDc1LCAudmFsdWVfZyA9IDB4MDA3NSwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxNSwgLnZhbHVlX2EgPSAweDAwQjQsIC52YWx1ZV9nID0gMHgwMEI0LCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDE2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwwLCAudmFsdWVfYSA9IDB4MDA5OCwgLnZhbHVlX2cgPSAweDAwOTgsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDEsIC52YWx1ZV9hID0gMHgwMDEwLCAudmFsdWVfZyA9IDB4MDAxMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMCwgLnZhbHVlX2EgPSAweDAwOTgsIC52YWx1ZV9nID0gMHgwMDk4LCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxLCAudmFsdWVfYSA9IDB4MDAxMCwgLnZhbHVlX2cgPSAweDAwMTAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDUsIC52YWx1ZV9hID0gMHgwMDQzLCAudmFsdWVfZyA9IDB4MDA0MywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMNiwgLnZhbHVlX2EgPSAweDAwNDcsIC52YWx1ZV9nID0gMHgwMDQ3LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEw3LCAudmFsdWVfYSA9IDB4MDAwQywgLnZhbHVlX2cgPSAweDAwMEMsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDgsIC52YWx1ZV9hID0gMHgwMDExLCAudmFsdWVfZyA9IDB4MDAxMSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMOSwgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMCwgLnZhbHVlX2EgPSAweDAwMEUsIC52YWx1ZV9nID0gMHgwMDBFLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMSwgLnZhbHVlX2EgPSAweDAwMDgsIC52YWx1ZV9nID0gMHgwMDA4LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMiwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMywgLnZhbHVlX2EgPSAweDAwMEEsIC52YWx1ZV9nID0gMHgwMDBBLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxNCwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEw1LCAudmFsdWVfYSA9IDB4MDA0MywgLnZhbHVlX2cgPSAweDAwNDMsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDYsIC52YWx1ZV9hID0gMHgwMDQ3LCAudmFsdWVfZyA9IDB4MDA0NywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMNywgLnZhbHVlX2EgPSAweDAwMEMsIC52YWx1ZV9nID0gMHgwMDBDLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEw4LCAudmFsdWVfYSA9IDB4MDAxMSwgLnZhbHVlX2cgPSAweDAwMTEsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDksIC52YWx1ZV9hID0gMHgwMDExLCAudmFsdWVfZyA9IDB4MDAxMSwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTAsIC52YWx1ZV9hID0gMHgwMDBFLCAudmFsdWVfZyA9IDB4MDAwRSwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTEsIC52YWx1ZV9hID0gMHgwMDA4LCAudmFsdWVfZyA9IDB4MDAwOCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTIsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTMsIC52YWx1ZV9hID0gMHgwMDBBLCAudmFsdWVfZyA9IDB4MDAwQSwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTQsIC52YWx1ZV9hID0gMHgwMDA2LCAudmFsdWVfZyA9IDB4MDAwNiwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDE2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwotCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTgsIC52YWx1ZV9hID0gMHgwMDNFLCAudmFsdWVfZyA9IDB4MDAzRSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTksIC52YWx1ZV9hID0gMHgwMDEzLCAudmFsdWVfZyA9IDB4MDAxMywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTgsIC52YWx1ZV9hID0gMHgwMDNFLCAudmFsdWVfZyA9IDB4MDAzRSwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTksIC52YWx1ZV9hID0gMHgwMDEzLCAudmFsdWVfZyA9IDB4MDAxMywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIxLCAudmFsdWVfYSA9IDB4MDA2MiwgLnZhbHVlX2cgPSAweDAwNjIsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIyLCAudmFsdWVfYSA9IDB4MDAwNywgLnZhbHVlX2cgPSAweDAwMDcsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIzLCAudmFsdWVfYSA9IDB4MDAxNiwgLnZhbHVlX2cgPSAweDAwMTYsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI0LCAudmFsdWVfYSA9IDB4MDA1QywgLnZhbHVlX2cgPSAweDAwNUMsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI1LCAudmFsdWVfYSA9IDB4MDA5NSwgLnZhbHVlX2cgPSAweDAwOTUsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIxLCAudmFsdWVfYSA9IDB4MDA2MiwgLnZhbHVlX2cgPSAweDAwNjIsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIyLCAudmFsdWVfYSA9IDB4MDAwNywgLnZhbHVlX2cgPSAweDAwMDcsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIzLCAudmFsdWVfYSA9IDB4MDAxNiwgLnZhbHVlX2cgPSAweDAwMTYsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI0LCAudmFsdWVfYSA9IDB4MDA1QywgLnZhbHVlX2cgPSAweDAwNUMsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI1LCAudmFsdWVfYSA9IDB4MDA5NSwgLnZhbHVlX2cgPSAweDAwOTUsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwyNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI5LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMCwgLnZhbHVlX2EgPSAweDAwQTAsIC52YWx1ZV9nID0gMHgwMEEwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMSwgLnZhbHVlX2EgPSAweDAwMDQsIC52YWx1ZV9nID0gMHgwMDA0LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMCwgLnZhbHVlX2EgPSAweDAwQTAsIC52YWx1ZV9nID0gMHgwMEEwLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMSwgLnZhbHVlX2EgPSAweDAwMDQsIC52YWx1ZV9nID0gMHgwMDA0LCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwotCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMzMsIC52YWx1ZV9hID0gMHgwMENDLCAudmFsdWVfZyA9IDB4MDBDQywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMzQsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMzMsIC52YWx1ZV9hID0gMHgwMENDLCAudmFsdWVfZyA9IDB4MDBDQywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMzQsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDAsIC52YWx1ZV9hID0gMHgwMDEwLCAudmFsdWVfZyA9IDB4MDAxMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwpAQCAtMjQxLDcgKzI0Miw3IEBACiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UNSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDYsIC52YWx1ZV9hID0gMHgwMDU1LCAudmFsdWVfZyA9IDB4MDA1NSwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ3LCAudmFsdWVfYSA9IDB4MDAwNSwgLnZhbHVlX2cgPSAweDAwMDUsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UOCwgLnZhbHVlX2EgPSAweDAwMEYsIC52YWx1ZV9nID0gMHgwMDBGLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EsIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UOCwgLnZhbHVlX2EgPSAweDAwMEYsIC52YWx1ZV9nID0gMHgwMDBGLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EsIH0sCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UOSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDEwLCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTEsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KQEAgLTI1MywxOSArMjU0LDMzNyBAQAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDE3LCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDZ4X2luaXRfdGFiX2VudHJ5IGIyMDYzX2luaXRfdGFiW10gPSB7CisJeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU0yLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19DT01NNCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU01LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19DT01NNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU04LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19DT01NMTAsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19BLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU0xMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU0xMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU0xMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU0xNCwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU0xNSwgLnZhbHVlX2EgPSAweDAwMGYsIC52YWx1ZV9nID0gMHgwMDBmLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX0NPTU0xNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTE3LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2M19DT01NMTgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYzX0NPTU0xOSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTIwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2M19DT01NMjEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYzX0NPTU0yMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTIzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2M19DT01NMjQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BXUl9TV0lUQ0hfQ1RMLCAudmFsdWVfYSA9IDB4MDA3ZiwgLnZhbHVlX2cgPSAweDAwN2YsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX1NQMSwgLnZhbHVlX2EgPSAweDAwM2YsIC52YWx1ZV9nID0gMHgwMDNmLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9TUDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9TUDEsIC52YWx1ZV9hID0gMHgwMGU4LCAudmFsdWVfZyA9IDB4MDBkNCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX1NQMiwgLnZhbHVlX2EgPSAweDAwYTcsIC52YWx1ZV9nID0gMHgwMDUzLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fU1AzLCAudmFsdWVfYSA9IDB4MDBmZiwgLnZhbHVlX2cgPSAweDAwZmYsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fU1A0LCAudmFsdWVfYSA9IDB4MDBmMCwgLnZhbHVlX2cgPSAweDAwMGYsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9TUDUsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMSwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1NQMSwgLnZhbHVlX2EgPSAweDAwMWYsIC52YWx1ZV9nID0gMHgwMDVlLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUDIsIC52YWx1ZV9hID0gMHgwMDdmLCAudmFsdWVfZyA9IDB4MDA3ZSwgLmZsYWdzID0gQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYzX0dfUlhfU1AzLCAudmFsdWVfYSA9IDB4MDAzMCwgLnZhbHVlX2cgPSAweDAwZjAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1NQNCwgLnZhbHVlX2EgPSAweDAwMzUsIC52YWx1ZV9nID0gMHgwMDM1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0dfUlhfU1A1LCAudmFsdWVfYSA9IDB4MDAzZiwgLnZhbHVlX2cgPSAweDAwM2YsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1NQNywgLnZhbHVlX2EgPSAweDAwN2YsIC52YWx1ZV9nID0gMHgwMDdmLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUDgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1NQOSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX0dfUlhfU1AxMCwgLnZhbHVlX2EgPSAweDAwMGMsIC52YWx1ZV9nID0gMHgwMDBjLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUDExLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF9TUDEsIC52YWx1ZV9hID0gMHgwMDNjLCAudmFsdWVfZyA9IDB4MDAzZiwgLmZsYWdzID0gQjIwNlhfRkxBR19BLCB9LAorCXsgLm9mZnNldCA9IEIyMDYzX0FfUlhfU1AyLCAudmFsdWVfYSA9IDB4MDBmYywgLnZhbHVlX2cgPSAweDAwZmUsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSwgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYX1NQMywgLnZhbHVlX2EgPSAweDAwZmYsIC52YWx1ZV9nID0gMHgwMGZmLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfU1A0LCAudmFsdWVfYSA9IDB4MDBmZiwgLnZhbHVlX2cgPSAweDAwZmYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF9TUDUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYX1NQNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX0FfUlhfU1A3LCAudmFsdWVfYSA9IDB4MDAwOCwgLnZhbHVlX2cgPSAweDAwMDgsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9TUDEsIC52YWx1ZV9hID0gMHgwMDBmLCAudmFsdWVfZyA9IDB4MDAwZiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9TUDIsIC52YWx1ZV9hID0gMHgwMDIyLCAudmFsdWVfZyA9IDB4MDAyMiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9TUDMsIC52YWx1ZV9hID0gMHgwMGE4LCAudmFsdWVfZyA9IDB4MDBhOCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9TUDQsIC52YWx1ZV9hID0gMHgwMDYwLCAudmFsdWVfZyA9IDB4MDA2MCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JYX0JCX1NQNSwgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JYX0JCX1NQNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JYX0JCX1NQNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX1JYX0JCX1NQOCwgLnZhbHVlX2EgPSAweDAwMzAsIC52YWx1ZV9nID0gMHgwMDMwLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfU1AxLCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDEsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfU1AyLCAudmFsdWVfYSA9IDB4MDAwMywgLnZhbHVlX2cgPSAweDAwMDMsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfU1AzLCAudmFsdWVfYSA9IDB4MDAwYywgLnZhbHVlX2cgPSAweDAwMGIsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9TUDQsIC52YWx1ZV9hID0gMHgwMDEwLCAudmFsdWVfZyA9IDB4MDAwZiwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQNSwgLnZhbHVlX2EgPSAweDAwMGYsIC52YWx1ZV9nID0gMHgwMDBmLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQNiwgLnZhbHVlX2EgPSAweDAwODAsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQNywgLnZhbHVlX2EgPSAweDAwNjgsIC52YWx1ZV9nID0gMHgwMDY4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQOCwgLnZhbHVlX2EgPSAweDAwNjgsIC52YWx1ZV9nID0gMHgwMDY4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQOSwgLnZhbHVlX2EgPSAweDAwODAsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQMTAsIC52YWx1ZV9hID0gMHgwMGZmLCAudmFsdWVfZyA9IDB4MDBmZiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9TUDExLCAudmFsdWVfYSA9IDB4MDAwMywgLnZhbHVlX2cgPSAweDAwMDMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfU1AxMiwgLnZhbHVlX2EgPSAweDAwMzgsIC52YWx1ZV9nID0gMHgwMDM4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQMTMsIC52YWx1ZV9hID0gMHgwMGZmLCAudmFsdWVfZyA9IDB4MDBmZiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9TUDE0LCAudmFsdWVfYSA9IDB4MDAzOCwgLnZhbHVlX2cgPSAweDAwMzgsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfU1AxNSwgLnZhbHVlX2EgPSAweDAwYzAsIC52YWx1ZV9nID0gMHgwMGMwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQMTYsIC52YWx1ZV9hID0gMHgwMGZmLCAudmFsdWVfZyA9IDB4MDBmZiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9TUDE3LCAudmFsdWVfYSA9IDB4MDBmZiwgLnZhbHVlX2cgPSAweDAwZmYsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfUEFfU1AxLCAudmFsdWVfYSA9IDB4MDAzZCwgLnZhbHVlX2cgPSAweDAwZmQsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9TUDIsIC52YWx1ZV9hID0gMHgwMDBjLCAudmFsdWVfZyA9IDB4MDAwYywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9TUDMsIC52YWx1ZV9hID0gMHgwMDk2LCAudmFsdWVfZyA9IDB4MDA5NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9TUDQsIC52YWx1ZV9hID0gMHgwMDVhLCAudmFsdWVfZyA9IDB4MDA1YSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9TUDUsIC52YWx1ZV9hID0gMHgwMDdmLCAudmFsdWVfZyA9IDB4MDA3ZiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9TUDYsIC52YWx1ZV9hID0gMHgwMDdmLCAudmFsdWVfZyA9IDB4MDA3ZiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9TUDcsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19UWF9CQl9TUDEsIC52YWx1ZV9hID0gMHgwMDAyLCAudmFsdWVfZyA9IDB4MDAwMiwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX0JCX1NQMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX0JCX1NQMywgLnZhbHVlX2EgPSAweDAwMzAsIC52YWx1ZV9nID0gMHgwMDMwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JFR19TUDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19CQU5ER0FQX0NUTDEsIC52YWx1ZV9hID0gMHgwMDU2LCAudmFsdWVfZyA9IDB4MDA1NiwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX0JBTkRHQVBfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xQT19DVEwxLCAudmFsdWVfYSA9IDB4MDAwZSwgLnZhbHVlX2cgPSAweDAwMGUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUkNfQ0FMSUJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwN2UsIC52YWx1ZV9nID0gMHgwMDdlLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JDX0NBTElCX0NUTDIsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAxNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SQ19DQUxJQl9DVEwzLCAudmFsdWVfYSA9IDB4MDAwZiwgLnZhbHVlX2cgPSAweDAwMGYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUkNfQ0FMSUJfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JDX0NBTElCX0NUTDUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SQ19DQUxJQl9DVEw2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUkNfQ0FMSUJfQ1RMNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JDX0NBTElCX0NUTDgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SQ19DQUxJQl9DVEw5LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUkNfQ0FMSUJfQ1RMMTAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19DQUxOUlNULCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfSU5fUExMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX0lOX1BMTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfQ1AxLCAudmFsdWVfYSA9IDB4MDBjZiwgLnZhbHVlX2cgPSAweDAwY2YsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX0NQMiwgLnZhbHVlX2EgPSAweDAwNTksIC52YWx1ZV9nID0gMHgwMDU5LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9DUDMsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfQ1A0LCAudmFsdWVfYSA9IDB4MDA0MiwgLnZhbHVlX2cgPSAweDAwNDIsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfTEYxLCAudmFsdWVfYSA9IDB4MDBkYiwgLnZhbHVlX2cgPSAweDAwZGIsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX0xGMiwgLnZhbHVlX2EgPSAweDAwOTQsIC52YWx1ZV9nID0gMHgwMDk0LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9MRjMsIC52YWx1ZV9hID0gMHgwMDI4LCAudmFsdWVfZyA9IDB4MDAyOCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfTEY0LCAudmFsdWVfYSA9IDB4MDA2MywgLnZhbHVlX2cgPSAweDAwNjMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX1NHMSwgLnZhbHVlX2EgPSAweDAwMDcsIC52YWx1ZV9nID0gMHgwMDA3LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9TRzIsIC52YWx1ZV9hID0gMHgwMGQzLCAudmFsdWVfZyA9IDB4MDBkMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfU0czLCAudmFsdWVfYSA9IDB4MDBiMSwgLnZhbHVlX2cgPSAweDAwYjEsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX1NHNCwgLnZhbHVlX2EgPSAweDAwM2IsIC52YWx1ZV9nID0gMHgwMDNiLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9TRzUsIC52YWx1ZV9hID0gMHgwMDA2LCAudmFsdWVfZyA9IDB4MDAwNiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfVkNPMSwgLnZhbHVlX2EgPSAweDAwNTgsIC52YWx1ZV9nID0gMHgwMDU4LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9WQ08yLCAudmFsdWVfYSA9IDB4MDBmNywgLnZhbHVlX2cgPSAweDAwZjcsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9WQ09fQ0FMSUIyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX1ZDT19DQUxJQjMsIC52YWx1ZV9hID0gMHgwMDAyLCAudmFsdWVfZyA9IDB4MDAwMiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCNCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9WQ09fQ0FMSUI1LCAudmFsdWVfYSA9IDB4MDAwOSwgLnZhbHVlX2cgPSAweDAwMDksIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX1ZDT19DQUxJQjYsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCNywgLnZhbHVlX2EgPSAweDAwMTYsIC52YWx1ZV9nID0gMHgwMDE2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9WQ09fQ0FMSUI4LCAudmFsdWVfYSA9IDB4MDA2YiwgLnZhbHVlX2cgPSAweDAwNmIsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX1ZDT19DQUxJQjksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCMTAsIC52YWx1ZV9hID0gMHgwMGIzLCAudmFsdWVfZyA9IDB4MDBiMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfWFRBTF8xMiwgLnZhbHVlX2EgPSAweDAwMDQsIC52YWx1ZV9nID0gMHgwMDA0LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9YVEFMMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX0FDTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9BQ0wyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fQUNMMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX0FDTDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9BQ0w1LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfSU5QVVRTLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9DVEwzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfV0FJVENOVCwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX09WUjEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9PVlIyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfT1ZBTDEsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9PVkFMMiwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX09WQUwzLCAudmFsdWVfYSA9IDB4MDA2NiwgLnZhbHVlX2cgPSAweDAwNjYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfT1ZBTDQsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9PVkFMNSwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX09WQUw2LCAudmFsdWVfYSA9IDB4MDA2NiwgLnZhbHVlX2cgPSAweDAwNjYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfT1ZBTDcsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9DQUxWTEQxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfQ0FMVkxEMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX0NWQUwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfQ1ZBTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9DVkFMMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX0NWQUw0LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfQ1ZBTDUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9DVkFMNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX0NWQUw3LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fQ0FMSUJfRU4sIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9QRUFLREVUMSwgLnZhbHVlX2EgPSAweDAwZmYsIC52YWx1ZV9nID0gMHgwMGZmLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX1JDQ1IxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fVkNPQlVGMSwgLnZhbHVlX2EgPSAweDAwNjAsIC52YWx1ZV9nID0gMHgwMDYwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX01JWEVSMSwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX01JWEVSMiwgLnZhbHVlX2EgPSAweDAwMGMsIC52YWx1ZV9nID0gMHgwMDBjLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX0JVRjEsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9CVUYyLCAudmFsdWVfYSA9IDB4MDAwYywgLnZhbHVlX2cgPSAweDAwMGMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fRElWMSwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX0RJVjIsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9ESVYzLCAudmFsdWVfYSA9IDB4MDA2NiwgLnZhbHVlX2cgPSAweDAwNjYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fQ0JVRlJYMSwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX0NCVUZSWDIsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9DQlVGVFgxLCAudmFsdWVfYSA9IDB4MDA2NiwgLnZhbHVlX2cgPSAweDAwNjYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fQ0JVRlRYMiwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX0lEQUMxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fU1BBUkUxLCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDEsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fU1BBUkUyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fU1BBUkUzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8xU1QxLCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8xU1QyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8xU1QzLCAudmFsdWVfYSA9IDB4MDAwNSwgLnZhbHVlX2cgPSAweDAwMDUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQxLCAudmFsdWVfYSA9IDB4MDAzMCwgLnZhbHVlX2cgPSAweDAwMzAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQyLCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQzLCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQ0LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQ1LCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQ2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQ3LCAudmFsdWVfYSA9IDB4MDAzNSwgLnZhbHVlX2cgPSAweDAwMzUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQ4LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9QUzEsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1BTMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0dfUlhfUFMzLCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9QUzQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1BTNSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0dfUlhfTUlYMSwgLnZhbHVlX2EgPSAweDAwNDQsIC52YWx1ZV9nID0gMHgwMDQ0LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0dfUlhfTUlYMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX0dfUlhfTUlYMywgLnZhbHVlX2EgPSAweDAwNzEsIC52YWx1ZV9nID0gMHgwMDcxLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9NSVg0LCAudmFsdWVfYSA9IDB4MDA3MSwgLnZhbHVlX2cgPSAweDAwNzEsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX01JWDUsIC52YWx1ZV9hID0gMHgwMDAzLCAudmFsdWVfZyA9IDB4MDAwMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX01JWDYsIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX01JWDcsIC52YWx1ZV9hID0gMHgwMDQ0LCAudmFsdWVfZyA9IDB4MDA0NCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX01JWDgsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1BERVQxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUEFSRVMxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUEFSRVMyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUEFSRVMzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF8xU1QxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF8xU1QyLCAudmFsdWVfYSA9IDB4MDBmMCwgLnZhbHVlX2cgPSAweDAwMzAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSwgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzFTVDMsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzFTVDQsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzFTVDUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDEsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDQsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDcsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYX1BTMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfUFMyLCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF9QUzMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYX1BTNCwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfUFM1LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF9QUzYsIC52YWx1ZV9hID0gMHgwMDc3LCAudmFsdWVfZyA9IDB4MDA3NywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfTUlYMSwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDg4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfTUlYMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfTUlYMywgLnZhbHVlX2EgPSAweDAwNDQsIC52YWx1ZV9nID0gMHgwMDQ0LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX0FfUlhfTUlYNCwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF9NSVg1LCAudmFsdWVfYSA9IDB4MDAwZiwgLnZhbHVlX2cgPSAweDAwMGYsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2M19BX1JYX01JWDYsIC52YWx1ZV9hID0gMHgwMDBmLCAudmFsdWVfZyA9IDB4MDAwZiwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfTUlYNywgLnZhbHVlX2EgPSAweDAwNDQsIC52YWx1ZV9nID0gMHgwMDQ0LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfTUlYOCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfUFdSREVUMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfU1BBUkUxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF9TUEFSRTIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYX1NQQVJFMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX1JYX1RJQV9DVEwxLCAudmFsdWVfYSA9IDB4MDA3NywgLnZhbHVlX2cgPSAweDAwNzcsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9USUFfQ1RMMiwgLnZhbHVlX2EgPSAweDAwNTgsIC52YWx1ZV9nID0gMHgwMDU4LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX1JYX1RJQV9DVEwzLCAudmFsdWVfYSA9IDB4MDA3NywgLnZhbHVlX2cgPSAweDAwNzcsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9USUFfQ1RMNCwgLnZhbHVlX2EgPSAweDAwNTgsIC52YWx1ZV9nID0gMHgwMDU4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JYX1RJQV9DVEw1LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUlhfVElBX0NUTDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9DVEwxLCAudmFsdWVfYSA9IDB4MDA3NCwgLnZhbHVlX2cgPSAweDAwNzQsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfUlhfQkJfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDQsIC52YWx1ZV9nID0gMHgwMDA0LCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUlhfQkJfQ1RMMywgLnZhbHVlX2EgPSAweDAwYTIsIC52YWx1ZV9nID0gMHgwMGEyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JYX0JCX0NUTDQsIC52YWx1ZV9hID0gMHgwMGFhLCAudmFsdWVfZyA9IDB4MDBhYSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9DVEw1LCAudmFsdWVfYSA9IDB4MDAyNCwgLnZhbHVlX2cgPSAweDAwMjQsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUlhfQkJfQ1RMNiwgLnZhbHVlX2EgPSAweDAwYTksIC52YWx1ZV9nID0gMHgwMGE5LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JYX0JCX0NUTDcsIC52YWx1ZV9hID0gMHgwMDI4LCAudmFsdWVfZyA9IDB4MDAyOCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9DVEw4LCAudmFsdWVfYSA9IDB4MDAxMCwgLnZhbHVlX2cgPSAweDAwMTAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUlhfQkJfQ1RMOSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX0NUTDEsIC52YWx1ZV9hID0gMHgwMDgwLCAudmFsdWVfZyA9IDB4MDA4MCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9JREFDX0xPX1JGX0ksIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9JREFDX0xPX1JGX1EsIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9JREFDX0xPX0JCX0ksIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9JREFDX0xPX0JCX1EsIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9DVEwyLCAudmFsdWVfYSA9IDB4MDA4MCwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfQ1RMMywgLnZhbHVlX2EgPSAweDAwMzgsIC52YWx1ZV9nID0gMHgwMDM4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX0NUTDQsIC52YWx1ZV9hID0gMHgwMGI4LCAudmFsdWVfZyA9IDB4MDBiOCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9DVEw1LCAudmFsdWVfYSA9IDB4MDA4MCwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMzgsIC52YWx1ZV9nID0gMHgwMDM4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX0NUTDcsIC52YWx1ZV9hID0gMHgwMDc4LCAudmFsdWVfZyA9IDB4MDA3OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9DVEw4LCAudmFsdWVfYSA9IDB4MDBjMCwgLnZhbHVlX2cgPSAweDAwYzAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfQ1RMOSwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX0NUTDEwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfQ1RMMTQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9DVEwxNSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX1BBX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwNCwgLmZsYWdzID0gQjIwNlhfRkxBR19BLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BBX0NUTDIsIC52YWx1ZV9hID0gMHgwMDBjLCAudmFsdWVfZyA9IDB4MDAwYywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9DVEwzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUEFfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BBX0NUTDUsIC52YWx1ZV9hID0gMHgwMDk2LCAudmFsdWVfZyA9IDB4MDA5NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9DVEw2LCAudmFsdWVfYSA9IDB4MDA3NywgLnZhbHVlX2cgPSAweDAwNzcsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUEFfQ1RMNywgLnZhbHVlX2EgPSAweDAwNWEsIC52YWx1ZV9nID0gMHgwMDVhLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BBX0NUTDgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9DVEw5LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUEFfQ1RMMTAsIC52YWx1ZV9hID0gMHgwMDIxLCAudmFsdWVfZyA9IDB4MDAyMSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9DVEwxMSwgLnZhbHVlX2EgPSAweDAwNzAsIC52YWx1ZV9nID0gMHgwMDcwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BBX0NUTDEyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUEFfQ1RMMTMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9CQl9DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfQkJfQ1RMMiwgLnZhbHVlX2EgPSAweDAwYjMsIC52YWx1ZV9nID0gMHgwMGIzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX0JCX0NUTDMsIC52YWx1ZV9hID0gMHgwMDU1LCAudmFsdWVfZyA9IDB4MDA1NSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9CQl9DVEw0LCAudmFsdWVfYSA9IDB4MDAwYiwgLnZhbHVlX2cgPSAweDAwMGIsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR1BJT19DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfVlJFR19DVEwxLCAudmFsdWVfYSA9IDB4MDAwMywgLnZhbHVlX2cgPSAweDAwMDMsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BTVVYX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19JUV9DQUxJQl9HVkFSLCAudmFsdWVfYSA9IDB4MDBiMywgLnZhbHVlX2cgPSAweDAwYjMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfSVFfQ0FMSUJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0lRX0NBTElCX0NUTDIsIC52YWx1ZV9hID0gMHgwMDMwLCAudmFsdWVfZyA9IDB4MDAzMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19URU1QU0VOU0VfQ1RMMSwgLnZhbHVlX2EgPSAweDAwNDYsIC52YWx1ZV9nID0gMHgwMDQ2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RFTVBTRU5TRV9DVEwyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUlhfTE9PUEJBQ0sxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUlhfTE9PUEJBQ0syLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfRVhUX1RTU0lfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMjEsIC52YWx1ZV9nID0gMHgwMDIxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0VYVF9UU1NJX0NUTDIsIC52YWx1ZV9hID0gMHgwMDIzLCAudmFsdWVfZyA9IDB4MDAyMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BRkVfQ1RMICwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLworfTsKKwogdm9pZCBiMjA2Ml91cGxvYWRfaW5pdF90YWJsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JY29uc3Qgc3RydWN0IGIyMDYyX2luaXRfdGFiX2VudHJ5ICplOworCWNvbnN0IHN0cnVjdCBiMjA2eF9pbml0X3RhYl9lbnRyeSAqZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGIyMDYyX2luaXRfdGFiKTsgaSsrKSB7CiAJCWUgPSAmYjIwNjJfaW5pdF90YWJbaV07CiAJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKLQkJCWlmICghKGUtPmZsYWdzICYgQjIwNjJfRkxBR19HKSkKKwkJCWlmICghKGUtPmZsYWdzICYgQjIwNlhfRkxBR19HKSkKIAkJCQljb250aW51ZTsKIAkJCWI0M19yYWRpb193cml0ZShkZXYsIGUtPm9mZnNldCwgZS0+dmFsdWVfZyk7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoIShlLT5mbGFncyAmIEIyMDYyX0ZMQUdfQSkpCisJCQlpZiAoIShlLT5mbGFncyAmIEIyMDZYX0ZMQUdfQSkpCisJCQkJY29udGludWU7CisJCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBlLT5vZmZzZXQsIGUtPnZhbHVlX2EpOworCQl9CisJfQorfQorCit2b2lkIGIyMDYzX3VwbG9hZF9pbml0X3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwljb25zdCBzdHJ1Y3QgYjIwNnhfaW5pdF90YWJfZW50cnkgKmU7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiMjA2M19pbml0X3RhYik7IGkrKykgeworCQllID0gJmIyMDYzX2luaXRfdGFiW2ldOworCQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCQlpZiAoIShlLT5mbGFncyAmIEIyMDZYX0ZMQUdfRykpCisJCQkJY29udGludWU7CisJCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBlLT5vZmZzZXQsIGUtPnZhbHVlX2cpOworCQl9IGVsc2UgeworCQkJaWYgKCEoZS0+ZmxhZ3MgJiBCMjA2WF9GTEFHX0EpKQogCQkJCWNvbnRpbnVlOwogCQkJYjQzX3JhZGlvX3dyaXRlKGRldiwgZS0+b2Zmc2V0LCBlLT52YWx1ZV9hKTsKIAkJfQpAQCAtMzA2LDMwICs2MjUsMzUgQEAKIHZvaWQgYjQzX2xwdGFiX3JlYWRfYnVsayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQsCiAJCQkgdW5zaWduZWQgaW50IG5yX2VsZW1lbnRzLCB2b2lkICpfZGF0YSkKIHsKLQl1MzIgdHlwZSwgdmFsdWU7CisJdTMyIHR5cGU7CiAJdTggKmRhdGEgPSBfZGF0YTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCXR5cGUgPSBvZmZzZXQgJiBCNDNfTFBUQUJfVFlQRU1BU0s7CisJb2Zmc2V0ICY9IH5CNDNfTFBUQUJfVFlQRU1BU0s7CisJQjQzX1dBUk5fT04ob2Zmc2V0ID4gMHhGRkZGKTsKKworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKwogCWZvciAoaSA9IDA7IGkgPCBucl9lbGVtZW50czsgaSsrKSB7Ci0JCXZhbHVlID0gYjQzX2xwdGFiX3JlYWQoZGV2LCBvZmZzZXQpOwogCQlzd2l0Y2ggKHR5cGUpIHsKIAkJY2FzZSBCNDNfTFBUQUJfOEJJVDoKLQkJCSpkYXRhID0gdmFsdWU7CisJCQkqZGF0YSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTykgJiAweEZGOwogCQkJZGF0YSsrOwogCQkJYnJlYWs7CiAJCWNhc2UgQjQzX0xQVEFCXzE2QklUOgotCQkJKigodTE2ICopZGF0YSkgPSB2YWx1ZTsKKwkJCSooKHUxNiAqKWRhdGEpID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUxPKTsKIAkJCWRhdGEgKz0gMjsKIAkJCWJyZWFrOwogCQljYXNlIEI0M19MUFRBQl8zMkJJVDoKLQkJCSooKHUzMiAqKWRhdGEpID0gdmFsdWU7CisJCQkqKCh1MzIgKilkYXRhKSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFISSk7CisJCQkqKCh1MzIgKilkYXRhKSA8PD0gMTY7CisJCQkqKCh1MzIgKilkYXRhKSB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfVEFCTEVEQVRBTE8pOwogCQkJZGF0YSArPSA0OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlCNDNfV0FSTl9PTigxKTsKIAkJfQotCQlvZmZzZXQrKzsKIAl9CiB9CiAKQEAgLTM3MCwyNSArNjk0LDE3NjQgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogCXR5cGUgPSBvZmZzZXQgJiBCNDNfTFBUQUJfVFlQRU1BU0s7CisJb2Zmc2V0ICY9IH5CNDNfTFBUQUJfVFlQRU1BU0s7CisJQjQzX1dBUk5fT04ob2Zmc2V0ID4gMHhGRkZGKTsKKworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKwogCWZvciAoaSA9IDA7IGkgPCBucl9lbGVtZW50czsgaSsrKSB7CiAJCXN3aXRjaCAodHlwZSkgewogCQljYXNlIEI0M19MUFRBQl84QklUOgogCQkJdmFsdWUgPSAqZGF0YTsKIAkJCWRhdGErKzsKKwkJCUI0M19XQVJOX09OKHZhbHVlICYgfjB4RkYpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTywgdmFsdWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgQjQzX0xQVEFCXzE2QklUOgogCQkJdmFsdWUgPSAqKCh1MTYgKilkYXRhKTsKIAkJCWRhdGEgKz0gMjsKKwkJCUI0M19XQVJOX09OKHZhbHVlICYgfjB4RkZGRik7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUxPLCB2YWx1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBCNDNfTFBUQUJfMzJCSVQ6CiAJCQl2YWx1ZSA9ICooKHUzMiAqKWRhdGEpOwogCQkJZGF0YSArPSA0OworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFISSwgdmFsdWUgPj4gMTYpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTywgdmFsdWUpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlCNDNfV0FSTl9PTigxKTsKLQkJCXZhbHVlID0gMDsKIAkJfQotCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBvZmZzZXQsIHZhbHVlKTsKLQkJb2Zmc2V0Kys7CisJfQorfQorCitzdGF0aWMgY29uc3QgdTggbHBwaHlfbWluX3NpZ19zcV90YWJsZVtdID0geworCTB4ZGUsIDB4ZGMsIDB4ZGEsIDB4ZDgsIDB4ZDYsIDB4ZDQsIDB4ZDIsIDB4Y2YsIDB4Y2QsCisJMHhjYSwgMHhjNywgMHhjNCwgMHhjMSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwKKwkweGJlLCAweGJlLCAweGJlLCAweGJlLCAweGJlLCAweGJlLCAweGJlLCAweGJlLCAweDAwLAorCTB4YmUsIDB4YmUsIDB4YmUsIDB4YmUsIDB4YmUsIDB4YmUsIDB4YmUsIDB4YmUsIDB4YmUsCisJMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhjMSwgMHhjNCwgMHhjNywgMHhjYSwgMHhjZCwKKwkweGNmLCAweGQyLCAweGQ0LCAweGQ2LCAweGQ4LCAweGRhLCAweGRjLCAweGRlLAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9yZXYwMV9ub2lzZV9zY2FsZV90YWJsZVtdID0geworCTB4YTRhNCwgMHhhNGE0LCAweGE0YTQsIDB4YTRhNCwgMHhhNGE0LCAweGE0YTQsIDB4YTRhNCwgMHhhNGE0LCAweGE0YTQsCisJMHhhNGE0LCAweGE0YTQsIDB4YTRhNCwgMHhhNGE0LCAweGE0MDAsIDB4YTRhNCwgMHhhNGE0LCAweGE0YTQsIDB4YTRhNCwKKwkweGE0YTQsIDB4YTRhNCwgMHhhNGE0LCAweGE0YTQsIDB4YTRhNCwgMHhhNGE0LCAweGE0YTQsIDB4YTRhNCwgMHgwMGE0LAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg0YzAwLCAweDJkMzYsCisJMHgwMDAwLCAweDAwMDAsIDB4NGMwMCwgMHgyZDM2LAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9yZXYycGx1c19ub2lzZV9zY2FsZV90YWJsZVtdID0geworCTB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsCisJMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwKKwkweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMDAwLAorCTB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsCisJMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwKKwkweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsCisJMHgwMGE0LAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9jcnNfZ2Fpbl9uZnRfdGFibGVbXSA9IHsKKwkweDAzNjYsIDB4MDM2YSwgMHgwMzZmLCAweDAzNjQsIDB4MDM2NywgMHgwMzZkLCAweDAzNzQsIDB4MDM3ZiwgMHgwMzZmLAorCTB4MDM3YiwgMHgwMzhhLCAweDAzNzgsIDB4MDM2NywgMHgwMzZkLCAweDAzNzUsIDB4MDM4MSwgMHgwMzc0LCAweDAzODEsCisJMHgwMzkyLCAweDAzYTksIDB4MDNjNCwgMHgwM2UxLCAweDAwMDEsIDB4MDAxZiwgMHgwMDQwLCAweDAwNWUsIDB4MDA3ZiwKKwkweDAwOWUsIDB4MDBiZCwgMHgwMGRkLCAweDAwZmQsIDB4MDExZCwgMHgwMTNkLAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9yZXYwMV9maWx0ZXJfY29udHJvbF90YWJsZVtdID0geworCTB4YTBmYywgMHgxMGZjLCAweDEwZGIsIDB4MjBiNywgMHhmZjkzLCAweDEwYmYsIDB4MTA5YiwgMHgyMDc3LCAweGZmNTMsCisJMHgwMTI3LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBscHBoeV9yZXYycGx1c19maWx0ZXJfY29udHJvbF90YWJsZVtdID0geworCTB4MDAwMTQxZmMsIDB4MDAwMDIxZmMsIDB4MDAwMDIxYjcsIDB4MDAwMDQxNmYsIDB4MDAwMWZmMjcsIDB4MDAwMDIxN2YsCisJMHgwMDAwMjEzNywgMHgwMDAwNDBlZiwgMHgwMDAxZmVhNywgMHgwMDAwMDI0ZiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgbHBwaHlfcmV2MDFfcHNfY29udHJvbF90YWJsZVtdID0geworCTB4MDAwMTAwMDAsIDB4MDAwMDAwYTAsIDB4MDAwNDAwMDAsIDB4MDAwMDAwNDgsIDB4MDgwODAxMDEsIDB4MDAwMDAwODAsCisJMHgwODA4MDEwMSwgMHgwMDAwMDA0MCwgMHgwODA4MDEwMSwgMHgwMDAwMDBjMCwgMHgwOGE4MTUwMSwgMHgwMDAwMDBjMCwKKwkweDBmZThmZDAxLCAweDAwMDAwMGMwLCAweDA4MzAwMTA1LCAweDAwMDAwMGMwLCAweDA4MDgwMjAxLCAweDAwMDAwMGMwLAorCTB4MDgyODAyMDUsIDB4MDAwMDAwYzAsIDB4ZTgwODAyZmUsIDB4MDAwMDAwYzcsIDB4MjgwODAyMDYsIDB4MDAwMDAwYzAsCisJMHgwODA4MDIwMiwgMHgwMDAwMDBjMCwgMHgwYmE4NzYwMiwgMHgwMDAwMDBjMCwgMHgxMDY4MDEzZCwgMHgwMDAwMDBjMCwKKwkweDEwMjgwMTA1LCAweDAwMDAwMGMwLCAweDA4ODgwMTAyLCAweDAwMDAwMGMwLCAweDA4MjgwMTA2LCAweDAwMDAwMGMwLAorCTB4ZTgwODAxZmQsIDB4MDAwMDAwYzcsIDB4YTgwODAxMTUsIDB4MDAwMDAwYzAsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGxwcGh5X3JldjJwbHVzX3BzX2NvbnRyb2xfdGFibGVbXSA9IHsKKwkweDAwZTM4ZTA4LCAweDAwZTA4ZTM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAyMDgwLAorCTB4MDAwMDYxODAsIDB4MDAwMDMwMDIsIDB4MDAwMDAwNDAsIDB4MDAwMDIwNDIsIDB4MDAxODAwNDcsIDB4MDAwODAwNDMsCisJMHgwMDAwMDA0MSwgMHgwMDAwMjBjMSwgMHgwMDA0NjAwNiwgMHgwMDA0MjAwMiwgMHgwMDA0MDAwMCwgMHgwMDAwMjAwMywKKwkweDAwMTgwMDA2LCAweDAwMDgwMDAyLAorfTsKKworc3RhdGljIGNvbnN0IHU4IGxwcGh5X3BsbF9mcmFjdGlvbl90YWJsZVtdID0geworCTB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsCisJMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgbHBwaHlfaXFsb19jYWxfdGFibGVbXSA9IHsKKwkweDAyMDAsIDB4MDMwMCwgMHgwNDAwLCAweDA2MDAsIDB4MDgwMCwgMHgwYjAwLCAweDEwMDAsIDB4MTAwMSwgMHgxMDAyLAorCTB4MTAwMywgMHgxMDA0LCAweDEwMDUsIDB4MTAwNiwgMHgxMDA3LCAweDE3MDcsIDB4MjAwNywgMHgyZDA3LCAweDQwMDcsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMjAwLCAweDAzMDAsIDB4MDQwMCwgMHgwNjAwLAorCTB4MDgwMCwgMHgwYjAwLCAweDEwMDAsIDB4MTAwMSwgMHgxMDAyLCAweDEwMDMsIDB4MTAwNCwgMHgxMDA1LCAweDEwMDYsCisJMHgxMDA3LCAweDE3MDcsIDB4MjAwNywgMHgyZDA3LCAweDQwMDcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDQwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgbHBwaHlfcmV2MF9vZmRtX2Nja19nYWluX3RhYmxlW10gPSB7CisJMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDEwMDEsIDB4MjAwMSwgMHgzMDAxLCAweDQwMDEsIDB4NTAwMSwKKwkweDYwMDEsIDB4NzAwMSwgMHg3MDExLCAweDcwMjEsIDB4MjAzNSwgMHgyMDQ1LCAweDIwNTUsIDB4MjA2NSwgMHgyMDc1LAorCTB4MDA2ZCwgMHgwMDdkLCAweDAxNGQsIDB4MDE1ZCwgMHgxMTVkLCAweDAzNWQsIDB4MTM1ZCwgMHgwNTVkLCAweDE1NWQsCisJMHgwZDVkLCAweDFkNWQsIDB4MmQ1ZCwgMHg1NTVkLCAweDY1NWQsIDB4NzU1ZCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgbHBwaHlfcmV2MV9vZmRtX2Nja19nYWluX3RhYmxlW10gPSB7CisJMHg1MDAwLCAweDYwMDAsIDB4NzAwMCwgMHgwMDAxLCAweDEwMDEsIDB4MjAwMSwgMHgzMDAxLCAweDQwMDEsIDB4NTAwMSwKKwkweDYwMDEsIDB4NzAwMSwgMHg3MDExLCAweDcwMjEsIDB4MjAzNSwgMHgyMDQ1LCAweDIwNTUsIDB4MjA2NSwgMHgyMDc1LAorCTB4MDA2ZCwgMHgwMDdkLCAweDAxNGQsIDB4MDE1ZCwgMHgxMTVkLCAweDAzNWQsIDB4MTM1ZCwgMHgwNTVkLCAweDE1NWQsCisJMHgwZDVkLCAweDFkNWQsIDB4MmQ1ZCwgMHg1NTVkLCAweDY1NWQsIDB4NzU1ZCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgbHBwaHlfZ2Fpbl9kZWx0YV90YWJsZVtdID0geworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGxwcGh5X3R4X3Bvd2VyX2NvbnRyb2xfdGFibGVbXSA9IHsKKwkweDAwMDAwMDUwLCAweDAwMDAwMDRmLCAweDAwMDAwMDRlLCAweDAwMDAwMDRkLCAweDAwMDAwMDRjLCAweDAwMDAwMDRiLAorCTB4MDAwMDAwNGEsIDB4MDAwMDAwNDksIDB4MDAwMDAwNDgsIDB4MDAwMDAwNDcsIDB4MDAwMDAwNDYsIDB4MDAwMDAwNDUsCisJMHgwMDAwMDA0NCwgMHgwMDAwMDA0MywgMHgwMDAwMDA0MiwgMHgwMDAwMDA0MSwgMHgwMDAwMDA0MCwgMHgwMDAwMDAzZiwKKwkweDAwMDAwMDNlLCAweDAwMDAwMDNkLCAweDAwMDAwMDNjLCAweDAwMDAwMDNiLCAweDAwMDAwMDNhLCAweDAwMDAwMDM5LAorCTB4MDAwMDAwMzgsIDB4MDAwMDAwMzcsIDB4MDAwMDAwMzYsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzQsIDB4MDAwMDAwMzMsCisJMHgwMDAwMDAzMiwgMHgwMDAwMDAzMSwgMHgwMDAwMDAzMCwgMHgwMDAwMDAyZiwgMHgwMDAwMDAyZSwgMHgwMDAwMDAyZCwKKwkweDAwMDAwMDJjLCAweDAwMDAwMDJiLCAweDAwMDAwMDJhLCAweDAwMDAwMDI5LCAweDAwMDAwMDI4LCAweDAwMDAwMDI3LAorCTB4MDAwMDAwMjYsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjQsIDB4MDAwMDAwMjMsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjEsCisJMHgwMDAwMDAyMCwgMHgwMDAwMDAxZiwgMHgwMDAwMDAxZSwgMHgwMDAwMDAxZCwgMHgwMDAwMDAxYywgMHgwMDAwMDAxYiwKKwkweDAwMDAwMDFhLCAweDAwMDAwMDE5LCAweDAwMDAwMDE4LCAweDAwMDAwMDE3LCAweDAwMDAwMDE2LCAweDAwMDAwMDE1LAorCTB4MDAwMDAwMTQsIDB4MDAwMDAwMTMsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwNzVhMCwgMHgwMDAwNzVhMCwgMHgwMDAwNzVhMSwgMHgwMDAwNzVhMSwgMHgwMDAwNzVhMiwgMHgwMDAwNzVhMiwKKwkweDAwMDA3NWEzLCAweDAwMDA3NWEzLCAweDAwMDA3NGIwLCAweDAwMDA3NGIwLCAweDAwMDA3NGIxLCAweDAwMDA3NGIxLAorCTB4MDAwMDc0YjIsIDB4MDAwMDc0YjIsIDB4MDAwMDc0YjMsIDB4MDAwMDc0YjMsIDB4MDAwMDZkMjAsIDB4MDAwMDZkMjAsCisJMHgwMDAwNmQyMSwgMHgwMDAwNmQyMSwgMHgwMDAwNmQyMiwgMHgwMDAwNmQyMiwgMHgwMDAwNmQyMywgMHgwMDAwNmQyMywKKwkweDAwMDA0NjYwLCAweDAwMDA0NjYwLCAweDAwMDA0NjYxLCAweDAwMDA0NjYxLCAweDAwMDA0NjYyLCAweDAwMDA0NjYyLAorCTB4MDAwMDQ2NjMsIDB4MDAwMDQ2NjMsIDB4MDAwMDNlNjAsIDB4MDAwMDNlNjAsIDB4MDAwMDNlNjEsIDB4MDAwMDNlNjEsCisJMHgwMDAwM2U2MiwgMHgwMDAwM2U2MiwgMHgwMDAwM2U2MywgMHgwMDAwM2U2MywgMHgwMDAwMzY2MCwgMHgwMDAwMzY2MCwKKwkweDAwMDAzNjYxLCAweDAwMDAzNjYxLCAweDAwMDAzNjYyLCAweDAwMDAzNjYyLCAweDAwMDAzNjYzLCAweDAwMDAzNjYzLAorCTB4MDAwMDJlNjAsIDB4MDAwMDJlNjAsIDB4MDAwMDJlNjEsIDB4MDAwMDJlNjEsIDB4MDAwMDJlNjIsIDB4MDAwMDJlNjIsCisJMHgwMDAwMmU2MywgMHgwMDAwMmU2MywgMHgwMDAwMjY2MCwgMHgwMDAwMjY2MCwgMHgwMDAwMjY2MSwgMHgwMDAwMjY2MSwKKwkweDAwMDAyNjYyLCAweDAwMDAyNjYyLCAweDAwMDAyNjYzLCAweDAwMDAyNjYzLCAweDAwMDAyNWUwLCAweDAwMDAyNWUwLAorCTB4MDAwMDI1ZTEsIDB4MDAwMDI1ZTEsIDB4MDAwMDI1ZTIsIDB4MDAwMDI1ZTIsIDB4MDAwMDI1ZTMsIDB4MDAwMDI1ZTMsCisJMHgwMDAwMWRlMCwgMHgwMDAwMWRlMCwgMHgwMDAwMWRlMSwgMHgwMDAwMWRlMSwgMHgwMDAwMWRlMiwgMHgwMDAwMWRlMiwKKwkweDAwMDAxZGUzLCAweDAwMDAxZGUzLCAweDAwMDAxZDYwLCAweDAwMDAxZDYwLCAweDAwMDAxZDYxLCAweDAwMDAxZDYxLAorCTB4MDAwMDFkNjIsIDB4MDAwMDFkNjIsIDB4MDAwMDFkNjMsIDB4MDAwMDFkNjMsIDB4MDAwMDE1NjAsIDB4MDAwMDE1NjAsCisJMHgwMDAwMTU2MSwgMHgwMDAwMTU2MSwgMHgwMDAwMTU2MiwgMHgwMDAwMTU2MiwgMHgwMDAwMTU2MywgMHgwMDAwMTU2MywKKwkweDAwMDAwZDYwLCAweDAwMDAwZDYwLCAweDAwMDAwZDYxLCAweDAwMDAwZDYxLCAweDAwMDAwZDYyLCAweDAwMDAwZDYyLAorCTB4MDAwMDBkNjMsIDB4MDAwMDBkNjMsIDB4MDAwMDBjZTAsIDB4MDAwMDBjZTAsIDB4MDAwMDBjZTEsIDB4MDAwMDBjZTEsCisJMHgwMDAwMGNlMiwgMHgwMDAwMGNlMiwgMHgwMDAwMGNlMywgMHgwMDAwMGNlMywgMHgwMDAwMGUxMCwgMHgwMDAwMGUxMCwKKwkweDAwMDAwZTExLCAweDAwMDAwZTExLCAweDAwMDAwZTEyLCAweDAwMDAwZTEyLCAweDAwMDAwZTEzLCAweDAwMDAwZTEzLAorCTB4MDAwMDBiZjAsIDB4MDAwMDBiZjAsIDB4MDAwMDBiZjEsIDB4MDAwMDBiZjEsIDB4MDAwMDBiZjIsIDB4MDAwMDBiZjIsCisJMHgwMDAwMGJmMywgMHgwMDAwMGJmMywgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwMDAwMDBmZiwgMHgwMDAwMDJmYywKKwkweDAwMDBmYTA4LCAweDAwMDAwMzA1LCAweDAwMDAwMjA2LCAweDAwMDAwMzA0LCAweDAwMDBmYjA0LCAweDAwMDBmY2ZmLAorCTB4MDAwMDA1ZmIsIDB4MDAwMGZkMDEsIDB4MDAwMDA0MDEsIDB4MDAwMDAwMDYsIDB4MDAwMGZmMDMsIDB4MDAwMDA3ZmMsCisJMHgwMDAwZmMwOCwgMHgwMDAwMDIwMywgMHgwMDAwZmZmYiwgMHgwMDAwMDYwMCwgMHgwMDAwZmEwMSwgMHgwMDAwZmMwMywKKwkweDAwMDBmZTA2LCAweDAwMDBmZTAwLCAweDAwMDAwMTAyLCAweDAwMDAwN2ZkLCAweDAwMDAwNGZiLCAweDAwMDAwNmZmLAorCTB4MDAwMDA0ZmQsIDB4MDAwMGZkZmEsIDB4MDAwMDA3ZmIsIDB4MDAwMGZkZmEsIDB4MDAwMGZhMDYsIDB4MDAwMDA1MDAsCisJMHgwMDAwZjkwMiwgMHgwMDAwMDdmYSwgMHgwMDAwZmFmYSwgMHgwMDAwMDUwMCwgMHgwMDAwMDdmYSwgMHgwMDAwMDcwMCwKKwkweDAwMDAwMzA1LCAweDAwMDAwNGZmLCAweDAwMDAwODAxLCAweDAwMDAwNTAzLCAweDAwMDAwNWY5LCAweDAwMDAwNDA0LAorCTB4MDAwMGZiMDgsIDB4MDAwMDA1ZmQsIDB4MDAwMDA1MDEsIDB4MDAwMDA0MDUsIDB4MDAwMGZiMDMsIDB4MDAwMDA3ZmMsCisJMHgwMDAwMDQwMywgMHgwMDAwMDMwMywgMHgwMDAwMDQwMiwgMHgwMDAwZmFmZiwgMHgwMDAwZmUwNSwgMHgwMDAwMDVmZCwKKwkweDAwMDBmZTAxLCAweDAwMDAwN2ZhLCAweDAwMDAwMjAyLCAweDAwMDAwNTA0LCAweDAwMDAwMTAyLCAweDAwMDAwOGZlLAorCTB4MDAwMGZhMDQsIDB4MDAwMGZhZmMsIDB4MDAwMGZlMDgsIDB4MDAwMDAwZjksIDB4MDAwMDAyZmEsIDB4MDAwMDAzZmUsCisJMHgwMDAwMDMwNCwgMHgwMDAwMDRmOSwgMHgwMDAwMDEwMCwgMHgwMDAwZmQwNiwgMHgwMDAwMDhmYywgMHgwMDAwMDcwMSwKKwkweDAwMDAwNTA0LCAweDAwMDBmZGZlLCAweDAwMDBmZGZjLCAweDAwMDAwM2ZlLCAweDAwMDAwNzA0LCAweDAwMDAwMmZjLAorCTB4MDAwMDA0ZjksIDB4MDAwMGZkZmQsIDB4MDAwMGZhMDcsIDB4MDAwMDAyMDUsIDB4MDAwMDAzZmQsIDB4MDAwMDA1ZmIsCisJMHgwMDAwMDRmOSwgMHgwMDAwMDgwNCwgMHgwMDAwZmMwNiwgMHgwMDAwZmNmOSwgMHgwMDAwMDEwMCwgMHgwMDAwZmUwNSwKKwkweDAwMDAwNDA4LCAweDAwMDBmYjAyLCAweDAwMDAwMzA0LCAweDAwMDAwNmZlLCAweDAwMDAwNGZhLCAweDAwMDAwMzA1LAorCTB4MDAwMDA4ZmMsIDB4MDAwMDAxMDIsIDB4MDAwMDAxZmQsIDB4MDAwMDA0ZmMsIDB4MDAwMGZlMDMsIDB4MDAwMDA3MDEsCisJMHgwMDAwMDFmYiwgMHgwMDAwMDFmOSwgMHgwMDAwMDIwNiwgMHgwMDAwMDZmZCwgMHgwMDAwMDUwOCwgMHgwMDAwMDcwMCwKKwkweDAwMDAwMzA0LCAweDAwMDAwNWZlLCAweDAwMDAwNWZmLCAweDAwMDBmYTA0LCAweDAwMDAwMzAzLCAweDAwMDBmZWZiLAorCTB4MDAwMDA3ZjksIDB4MDAwMGZlZmMsIDB4MDAwMDA0ZmQsIDB4MDAwMDA1ZmMsIDB4MDAwMGZmZmQsIDB4MDAwMGZjMDgsCisJMHgwMDAwZmJmOSwgMHgwMDAwZmQwNywgMHgwMDAwMDhmYiwgMHgwMDAwZmUwMiwgMHgwMDAwMDZmYiwgMHgwMDAwMDcwMiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgbHBwaHlfZ2Fpbl9pZHhfdGFibGVbXSA9IHsKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDEwMDAwMDAxLCAweDAwMDAwMDAwLCAweDIwMDAwMDgyLCAweDAwMDAwMDAwLCAweDQwMDAwMTA0LCAweDAwMDAwMDAwLAorCTB4NjAwMDQyMDcsIDB4MDAwMDAwMDEsIDB4NzAwMDgzOGEsIDB4MDAwMDAwMDEsIDB4ZDAyMTA1MGQsIDB4MDAwMDAwMDEsCisJMHhlMDQxYzY4MywgMHgwMDAwMDAwMSwgMHg1MDgyODgwNSwgMHgwMDAwMDAwMCwgMHg4MGUzNDI4OCwgMHgwMDAwMDAwMCwKKwkweGIxNDQwNDBiLCAweDAwMDAwMDAwLCAweGUxYTYwNThlLCAweDAwMDAwMDAwLCAweDEyMDY0NzExLCAweDAwMDAwMDAxLAorCTB4YjBhMTg2MTIsIDB4MDAwMDAwMTAsIDB4ZTEwMjQ3OTQsIDB4MDAwMDAwMTAsIDB4MTE2MzA5MTUsIDB4MDAwMDAwMTEsCisJMHgzMWMzY2ExYiwgMHgwMDAwMDAxMSwgMHhjMTg0OGE5YywgMHgwMDAwMDAxOCwgMHhmMWU1MGRhMCwgMHgwMDAwMDAxOCwKKwkweDIyNDY4ZTIxLCAweDAwMDAwMDE5LCAweDQyODZkMDIzLCAweDAwMDAwMDE5LCAweGEzNDdkMGE0LCAweDAwMDAwMDE5LAorCTB4YjM2ODExYTYsIDB4MDAwMDAwMTksIDB4ZjNlODkyMjcsIDB4MDAwMDAwMTksIDB4MDQwOGQzMjksIDB4MDAwMDAwMWEsCisJMHgyNDQ5NTNhYSwgMHgwMDAwMDAxYSwgMHgzNDY5OTRhYiwgMHgwMDAwMDAxYSwgMHg1NGFhMTUyYywgMHgwMDAwMDAxYSwKKwkweDY0Y2E1NWFkLCAweDAwMDAwMDFhLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDEwMDAwMDAxLCAweDAwMDAwMDAwLCAweDIwMDAwMDgyLCAweDAwMDAwMDAwLAorCTB4NDAwMDAxMDQsIDB4MDAwMDAwMDAsIDB4NjAwMDQyMDcsIDB4MDAwMDAwMDEsIDB4NzAwMDgzOGEsIDB4MDAwMDAwMDEsCisJMHhkMDIxMDUwZCwgMHgwMDAwMDAwMSwgMHhlMDQxYzY4MywgMHgwMDAwMDAwMSwgMHg1MDgyODgwNSwgMHgwMDAwMDAwMCwKKwkweDgwZTM0Mjg4LCAweDAwMDAwMDAwLCAweGIxNDQwNDBiLCAweDAwMDAwMDAwLCAweGUxYTYwNThlLCAweDAwMDAwMDAwLAorCTB4MTIwNjQ3MTEsIDB4MDAwMDAwMDEsIDB4YjBhMTg2MTIsIDB4MDAwMDAwMTAsIDB4ZTEwMjQ3OTQsIDB4MDAwMDAwMTAsCisJMHgxMTYzMDkxNSwgMHgwMDAwMDAxMSwgMHgzMWMzY2ExYiwgMHgwMDAwMDAxMSwgMHhjMTg0OGE5YywgMHgwMDAwMDAxOCwKKwkweGYxZTUwZGEwLCAweDAwMDAwMDE4LCAweDIyNDY4ZTIxLCAweDAwMDAwMDE5LCAweDQyODZkMDIzLCAweDAwMDAwMDE5LAorCTB4YTM0N2QwYTQsIDB4MDAwMDAwMTksIDB4YjM2ODExYTYsIDB4MDAwMDAwMTksIDB4ZjNlODkyMjcsIDB4MDAwMDAwMTksCisJMHgwNDA4ZDMyOSwgMHgwMDAwMDAxYSwgMHgyNDQ5NTNhYSwgMHgwMDAwMDAxYSwgMHgzNDY5OTRhYiwgMHgwMDAwMDAxYSwKKwkweDU0YWExNTJjLCAweDAwMDAwMDFhLCAweDY0Y2E1NWFkLCAweDAwMDAwMDFhLAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9hdXhfZ2Fpbl9pZHhfdGFibGVbXSA9IHsKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMSwgMHgwMDAyLCAweDAwMDQsIDB4MDAxNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDEsIDB4MDAwMiwgMHgwMDA0LCAweDAwMTYsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGxwcGh5X2dhaW5fdmFsdWVfdGFibGVbXSA9IHsKKwkweDAwMDAwMDA4LCAweDAwMDAwMDBlLCAweDAwMDAwMDE0LCAweDAwMDAwMDFhLCAweDAwMDAwMGZiLCAweDAwMDAwMDA0LAorCTB4MDAwMDAwMDgsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGEsCisJMHgwMDAwMDAwZCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxNSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwNiwKKwkweDAwMDAwMDBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEyLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMWUsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwNiwgMHgwMDAwMDAwOSwgMHgwMDAwMDAwYywgMHgwMDAwMDAwZiwKKwkweDAwMDAwMDEyLCAweDAwMDAwMDE1LCAweDAwMDAwMDE4LCAweDAwMDAwMDFiLCAweDAwMDAwMDFlLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDksIDB4MDAwMDAwZjEsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgbHBwaHlfZ2Fpbl90YWJsZVtdID0geworCTB4MDAwMCwgMHgwNDAwLCAweDA4MDAsIDB4MDgwMiwgMHgwODA0LCAweDA4MDYsIDB4MDgwNywgMHgwODA4LCAweDA4MGEsCisJMHgwODBiLCAweDA4MGMsIDB4MDgwZSwgMHgwODBmLCAweDA4MTAsIDB4MDgxMiwgMHgwODEzLCAweDA4MTQsIDB4MDgxNiwKKwkweDA4MTcsIDB4MDgxYSwgMHgwODFiLCAweDA4MWYsIDB4MDgyMCwgMHgwODI0LCAweDA4MzAsIDB4MDgzNCwgMHgwODM3LAorCTB4MDgzYiwgMHgwODNmLCAweDA4NDAsIDB4MDg0NCwgMHgwODU3LCAweDA4NWIsIDB4MDg1ZiwgMHgwOGQ3LCAweDA4ZGIsCisJMHgwOGRmLCAweDA5NTcsIDB4MDk1YiwgMHgwOTVmLCAweDBiNTcsIDB4MGI1YiwgMHgwYjVmLCAweDBmNWYsIDB4MTM1ZiwKKwkweDE3NWYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgbHBwaHlfYTBfZ2Fpbl9pZHhfdGFibGVbXSA9IHsKKwkweDAwMTExMWUwLCAweDAwNjUyMDUxLCAweDAwNjA2MDU1LCAweDAwNWIwMDVhLCAweDAwNTU1MDYwLCAweDAwNTExMDY1LAorCTB4MDA0YzgwNmIsIDB4MDA0N2QwNzIsIDB4MDA0NDQwNzgsIDB4MDA0MDAwODAsIDB4MDAzY2EwODcsIDB4MDAzOTQwOGYsCisJMHgwMDM1ZTA5OCwgMHgwMDMyZTBhMSwgMHgwMDMwMzBhYSwgMHgwMDJkODBiNCwgMHgwMDJhZTBiZiwgMHgwMDI4ODBjYSwKKwkweDAwMjY0MGQ2LCAweDAwMjQxMGUzLCAweDAwMjIyMGYwLCAweDAwMjAyMGZmLCAweDAwMWU1MTBlLCAweDAwMWNhMTFlLAorCTB4MDAxYjAxMmYsIDB4MDAxOTkxNDAsIDB4MDAxODIxNTMsIDB4MDAxNmMxNjgsIDB4MDAxNTgxN2QsIDB4MDAxNDUxOTMsCisJMHgwMDEzMjFhYiwgMHgwMDEyMTFjNSwgMHgwMDExMTFlMCwgMHgwMDEwMjFmYywgMHgwMDBmMzIxYSwgMHgwMDBlNTIzYSwKKwkweDAwMGQ5MjVjLCAweDAwMGNkMjdmLCAweDAwMGMxMmE1LCAweDAwMGI2MmNkLCAweDAwMGFjMmY4LCAweDAwMGEyMzI1LAorCTB4MDAwOTkzNTUsIDB4MDAwOTEzODcsIDB4MDAwODgzYmQsIDB4MDAwODEzZjUsIDB4MDAwN2E0MzIsIDB4MDAwNzM0NzEsCisJMHgwMDA2YzRiNSwgMHgwMDA2NjRmYywgMHgwMDA2MTU0NywgMHgwMDA1YjU5OCwgMHgwMDA1NjVlYywgMHgwMDA1MTY0NiwKKwkweDAwMDRkNmE1LCAweDAwMDQ4NzBhLCAweDAwMDQ0Nzc1LCAweDAwMDQwN2U2LCAweDAwMDNkODVlLCAweDAwMDM5OGRkLAorCTB4MDAwMzY5NjMsIDB4MDAwMzM5ZjIsIDB4MDAwMzBhODksIDB4MDAwMmRiMjgsCit9OworCitzdGF0aWMgY29uc3QgdTE2IGxwcGh5X2EwX2F1eF9nYWluX2lkeF90YWJsZVtdID0geworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMiwgMHgwMDE0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDIsIDB4MDAxNCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgbHBwaHlfYTBfZ2Fpbl92YWx1ZV90YWJsZVtdID0geworCTB4MDAwMDAwMDgsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMWEsIDB4MDAwMDAwZmIsIDB4MDAwMDAwMDQsCisJMHgwMDAwMDAwOCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNywgMHgwMDAwMDAwYSwKKwkweDAwMDAwMDBkLCAweDAwMDAwMDEwLCAweDAwMDAwMDEyLCAweDAwMDAwMDE1LCAweDAwMDAwMDAwLCAweDAwMDAwMDA2LAorCTB4MDAwMDAwMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAxZSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAzLCAweDAwMDAwMDA2LCAweDAwMDAwMDA5LCAweDAwMDAwMDBjLCAweDAwMDAwMDBmLAorCTB4MDAwMDAwMTIsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMWIsIDB4MDAwMDAwMWUsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZiwgMHgwMDAwMDBmNywKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9hMF9nYWluX3RhYmxlW10gPSB7CisJMHgwMDAwLCAweDAwMDIsIDB4MDAwNCwgMHgwMDA2LCAweDAwMDcsIDB4MDAwOCwgMHgwMDBhLCAweDAwMGIsIDB4MDAwYywKKwkweDAwMGUsIDB4MDAwZiwgMHgwMDEwLCAweDAwMTIsIDB4MDAxMywgMHgwMDE0LCAweDAwMTYsIDB4MDAxNywgMHgwMDFhLAorCTB4MDAxYiwgMHgwMDFmLCAweDAwMjAsIDB4MDAyNCwgMHgwMDMwLCAweDAwMzQsIDB4MDAzNywgMHgwMDNiLCAweDAwM2YsCisJMHgwMDQwLCAweDAwNDQsIDB4MDA1NywgMHgwMDViLCAweDAwNWYsIDB4MDBkNywgMHgwMGRiLCAweDAwZGYsIDB4MDE1NywKKwkweDAxNWIsIDB4MDE1ZiwgMHgwMzU3LCAweDAzNWIsIDB4MDM1ZiwgMHgwNzVmLCAweDBiNWYsIDB4MGY1ZiwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9zd19jb250cm9sX3RhYmxlW10gPSB7CisJMHgwMTI4LCAweDAxMjgsIDB4MDAwOSwgMHgwMDA5LCAweDAwMjgsIDB4MDAyOCwgMHgwMDI4LCAweDAwMjgsIDB4MDEyOCwKKwkweDAxMjgsIDB4MDAwOSwgMHgwMDA5LCAweDAwMjgsIDB4MDAyOCwgMHgwMDI4LCAweDAwMjgsIDB4MDAwOSwgMHgwMDA5LAorCTB4MDAwOSwgMHgwMDA5LCAweDAwMDksIDB4MDAwOSwgMHgwMDA5LCAweDAwMDksIDB4MDAxOCwgMHgwMDE4LCAweDAwMTgsCisJMHgwMDE4LCAweDAwMTgsIDB4MDAxOCwgMHgwMDE4LCAweDAwMTgsIDB4MDEyOCwgMHgwMTI4LCAweDAwMDksIDB4MDAwOSwKKwkweDAwMjgsIDB4MDAyOCwgMHgwMDI4LCAweDAwMjgsIDB4MDEyOCwgMHgwMTI4LCAweDAwMDksIDB4MDAwOSwgMHgwMDI4LAorCTB4MDAyOCwgMHgwMDI4LCAweDAwMjgsIDB4MDAwOSwgMHgwMDA5LCAweDAwMDksIDB4MDAwOSwgMHgwMDA5LCAweDAwMDksCisJMHgwMDA5LCAweDAwMDksIDB4MDAxOCwgMHgwMDE4LCAweDAwMTgsIDB4MDAxOCwgMHgwMDE4LCAweDAwMTgsIDB4MDAxOCwKKwkweDAwMTgsCit9OworCitzdGF0aWMgY29uc3QgdTggbHBwaHlfaGZfdGFibGVbXSA9IHsKKwkweDRiLCAweDM2LCAweDI0LCAweDE4LCAweDQ5LCAweDM0LCAweDIzLCAweDE3LCAweDQ4LAorCTB4MzMsIDB4MjMsIDB4MTcsIDB4NDgsIDB4MzMsIDB4MjMsIDB4MTcsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGxwcGh5X3BhcGRfZXBzX3RhYmxlW10gPSB7CisJMHgwMDAwMDAwMCwgMHgwMDAxM2ZmYywgMHgwMDAxZGZmMywgMHgwMDAxYmZmMCwgMHgwMDAyM2ZlOSwgMHgwMDAyMWZkZiwKKwkweDAwMDI4ZmRmLCAweDAwMDMzZmQyLCAweDAwMDM5ZmNiLCAweDAwMDQzZmM3LCAweDAwMDRlZmMyLCAweDAwMDU1ZmI1LAorCTB4MDAwNWNmYjAsIDB4MDAwNjNmYTgsIDB4MDAwNjhmYTMsIDB4MDAwNzFmOTgsIDB4MDAwN2VmOTIsIDB4MDAwODRmOGIsCisJMHgwMDA4ZGY4MiwgMHgwMDA5N2Y3NywgMHgwMDA5ZGY2OSwgMHgwMDBhM2Y2MiwgMHgwMDBhZGY1NywgMHgwMDBiNmY0YywKKwkweDAwMGJmZjQxLCAweDAwMGM5ZjM5LCAweDAwMGNmZjMwLCAweDAwMGRiZjI3LCAweDAwMGU0ZjFlLCAweDAwMGVkZjE2LAorCTB4MDAwZjdmMTMsIDB4MDAxMDJmMTEsIDB4MDAxMTBmMTAsIDB4MDAxMWRmMTEsIDB4MDAxMmVmMTUsIDB4MDAxNDNmMWMsCisJMHgwMDE1OGYyNywgMHgwMDE3MmYzNSwgMHgwMDE5M2Y0NywgMHgwMDFiYWY1ZiwgMHgwMDFlNmY3ZSwgMHgwMDIxY2ZhNCwKKwkweDAwMjViZmQyLCAweDAwMmEyMDA4LCAweDAwMmZiMDQ3LCAweDAwMzYwMDkwLCAweDAwM2Q0MGUwLCAweDAwNDVjMTM1LAorCTB4MDA0ZmIxODksIDB4MDA1YWUxZDcsIDB4MDA2NzIyMWQsIDB4MDA3NTAyNWEsIDB4MDA3ZmYyOTEsIDB4MDA3ZmYyYmYsCisJMHgwMDdmZjJlMywgMHgwMDdmZjJmZiwgMHgwMDdmZjMxNSwgMHgwMDdmZjMyOSwgMHgwMDdmZjMzZiwgMHgwMDdmZjM1NiwKKwkweDAwN2ZmMzZlLCAweDAwN2ZmMzljLCAweDAwN2ZmNDQxLCAweDAwN2ZmNTA2LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBscHBoeV9wYXBkX211bHRfdGFibGVbXSA9IHsKKwkweDAwMTExMWUwLCAweDAwNjUyMDUxLCAweDAwNjA2MDU1LCAweDAwNWIwMDVhLCAweDAwNTU1MDYwLCAweDAwNTExMDY1LAorCTB4MDA0YzgwNmIsIDB4MDA0N2QwNzIsIDB4MDA0NDQwNzgsIDB4MDA0MDAwODAsIDB4MDAzY2EwODcsIDB4MDAzOTQwOGYsCisJMHgwMDM1ZTA5OCwgMHgwMDMyZTBhMSwgMHgwMDMwMzBhYSwgMHgwMDJkODBiNCwgMHgwMDJhZTBiZiwgMHgwMDI4ODBjYSwKKwkweDAwMjY0MGQ2LCAweDAwMjQxMGUzLCAweDAwMjIyMGYwLCAweDAwMjAyMGZmLCAweDAwMWU1MTBlLCAweDAwMWNhMTFlLAorCTB4MDAxYjAxMmYsIDB4MDAxOTkxNDAsIDB4MDAxODIxNTMsIDB4MDAxNmMxNjgsIDB4MDAxNTgxN2QsIDB4MDAxNDUxOTMsCisJMHgwMDEzMjFhYiwgMHgwMDEyMTFjNSwgMHgwMDExMTFlMCwgMHgwMDEwMjFmYywgMHgwMDBmMzIxYSwgMHgwMDBlNTIzYSwKKwkweDAwMGQ5MjVjLCAweDAwMGNkMjdmLCAweDAwMGMxMmE1LCAweDAwMGI2MmNkLCAweDAwMGFjMmY4LCAweDAwMGEyMzI1LAorCTB4MDAwOTkzNTUsIDB4MDAwOTEzODcsIDB4MDAwODgzYmQsIDB4MDAwODEzZjUsIDB4MDAwN2E0MzIsIDB4MDAwNzM0NzEsCisJMHgwMDA2YzRiNSwgMHgwMDA2NjRmYywgMHgwMDA2MTU0NywgMHgwMDA1YjU5OCwgMHgwMDA1NjVlYywgMHgwMDA1MTY0NiwKKwkweDAwMDRkNmE1LCAweDAwMDQ4NzBhLCAweDAwMDQ0Nzc1LCAweDAwMDQwN2U2LCAweDAwMDNkODVlLCAweDAwMDM5OGRkLAorCTB4MDAwMzY5NjMsIDB4MDAwMzM5ZjIsIDB4MDAwMzBhODksIDB4MDAwMmRiMjgsCit9OworCitzdGF0aWMgc3RydWN0IGxwcGh5X3R4X2dhaW5fdGFibGVfZW50cnkgbHBwaHlfcmV2MF9ub3BhX3R4X2dhaW5fdGFibGVbXSA9IHsKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxNTIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTQ3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDE0MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMzksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTM1LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEzMSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTI0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEyMSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTE0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDExMSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMDcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTA0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEwMSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA5OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA5NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA5MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA5MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA4OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA4NSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA4MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA4MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA3OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA3NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA3NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA1NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA1NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA3MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA1OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA1NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA1OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA3MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA1OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA1NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYzLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcxLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjBfMmdoel90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSA0LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDczLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY3LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY1LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYzLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA1LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDksIC5wYWQgPSA1LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA5LCAucGFkID0gNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOSwgLnBhZCA9IDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDksIC5wYWQgPSA1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA5LCAucGFkID0gNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOSwgLnBhZCA9IDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDksIC5wYWQgPSA1LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA5LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOSwgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDksIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NywgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA5LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOSwgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYzLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDksIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA5LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOSwgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDgsIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA4LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOCwgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDgsIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA4LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOCwgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDgsIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA3LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNywgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDcsIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA3LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNywgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDcsIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA3LCAucGFkID0gMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNywgLnBhZCA9IDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY1LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDcsIC5wYWQgPSAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA3LCAucGFkID0gMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNywgLnBhZCA9IDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDYsIC5wYWQgPSAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA2LCAucGFkID0gMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNiwgLnBhZCA9IDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDYsIC5wYWQgPSAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA2LCAucGFkID0gMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNSwgLnBhZCA9IDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDUsIC5wYWQgPSAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA1LCAucGFkID0gMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNSwgLnBhZCA9IDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDUsIC5wYWQgPSAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA1LCAucGFkID0gMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNSwgLnBhZCA9IDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDQsIC5wYWQgPSAyLCAuZGFjID0gMCwgLmJiX211bHQgPSA4MywgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA0LCAucGFkID0gMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNCwgLnBhZCA9IDIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDc4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDQsIC5wYWQgPSAyLCAuZGFjID0gMCwgLmJiX211bHQgPSA3NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA0LCAucGFkID0gMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzQsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNCwgLnBhZCA9IDIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjBfNWdoel90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY1LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjFfbm9wYV90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTUyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDE0NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxNDMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTM5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEzNSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTI4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEyNCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTE3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDExNCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMTEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTA3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEwNCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMDEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDczLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY1LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbHBwaHlfdHhfZ2Fpbl90YWJsZV9lbnRyeSBscHBoeV9yZXYxXzJnaHpfdHhfZ2Fpbl90YWJsZVtdID0geworCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDkwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDg4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDg1LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDgzLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDgxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDc4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDc2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDc0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDczLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY3LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY1LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYzLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjFfNWdoel90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY1LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjJfbm9wYV90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDE1MiwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTQ3LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSAxNDMsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEzOSwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTM1LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSAxMzEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEyOCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTI0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSAxMjEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDExNywgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTE0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSAxMTEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEwNywgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTA0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSAxMDEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDk5LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA5NiwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTMsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDkwLCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA4OCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODUsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDgzLCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA4MSwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzgsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDc2LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA3NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTk3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE5MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxODYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTgxLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE3NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxNzEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTY2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE2MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxNTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTUyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE0OCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxNDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTQwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDEzNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTI4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDEyNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMjEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTE3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDExNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDEwNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMDIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gOTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gOTYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gOTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gOTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gODgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gODYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gODMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gODEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNzksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNzYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNzQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNzAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNjgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNjYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNjQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjQ4LCAucGFkID0gNjQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjQ4LCAucGFkID0gNjIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjQxLCAucGFkID0gNjIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjQxLCAucGFkID0gNjAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjM0LCAucGFkID0gNjAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjM0LCAucGFkID0gNTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjI3LCAucGFkID0gNTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjI3LCAucGFkID0gNTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjIxLCAucGFkID0gNTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjIxLCAucGFkID0gNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjE1LCAucGFkID0gNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjE1LCAucGFkID0gNTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjA4LCAucGFkID0gNTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjA4LCAucGFkID0gNTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjAzLCAucGFkID0gNTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjAzLCAucGFkID0gNTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTk3LCAucGFkID0gNTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTk3LCAucGFkID0gNDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTkxLCAucGFkID0gNDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTkxLCAucGFkID0gNDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTg2LCAucGFkID0gNDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTg2LCAucGFkID0gNDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTgxLCAucGFkID0gNDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTgxLCAucGFkID0gNDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTc1LCAucGFkID0gNDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTc1LCAucGFkID0gNDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTcwLCAucGFkID0gNDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTcwLCAucGFkID0gNDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTY2LCAucGFkID0gNDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTY2LCAucGFkID0gNDIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTYxLCAucGFkID0gNDIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTYxLCAucGFkID0gNDAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTU2LCAucGFkID0gNDAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTU2LCAucGFkID0gMzksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTUyLCAucGFkID0gMzksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTUyLCAucGFkID0gMzgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTQ4LCAucGFkID0gMzgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTQ4LCAucGFkID0gMzcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTQzLCAucGFkID0gMzcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTQzLCAucGFkID0gMzYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTM5LCAucGFkID0gMzYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTM5LCAucGFkID0gMzUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTM1LCAucGFkID0gMzUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTM1LCAucGFkID0gMzQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTMyLCAucGFkID0gMzQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTMyLCAucGFkID0gMzMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTI4LCAucGFkID0gMzMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTI4LCAucGFkID0gMzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTI0LCAucGFkID0gMzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTI0LCAucGFkID0gMzEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTIxLCAucGFkID0gMzEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTIxLCAucGFkID0gMzAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTE3LCAucGFkID0gMzAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTE3LCAucGFkID0gMjksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTE0LCAucGFkID0gMjksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTE0LCAucGFkID0gMjksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTExLCAucGFkID0gMjksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjJfMmdoel90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSA3LCAucGdhID0gOTksIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDk2LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA5MywgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gOTAsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDg4LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA4NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gODMsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDgxLCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA3OCwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNzYsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDc0LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA3MiwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNzAsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDY4LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA2NiwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNjQsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDY0LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA2MiwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNjIsIC5wYWQgPSAyNDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDYwLCAucGFkID0gMjQ4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA2MCwgLnBhZCA9IDI0MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNTksIC5wYWQgPSAyNDEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDU5LCAucGFkID0gMjM0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA1NywgLnBhZCA9IDIzNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNTcsIC5wYWQgPSAyMjcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDU1LCAucGFkID0gMjI3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA1NSwgLnBhZCA9IDIyMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNTQsIC5wYWQgPSAyMjEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDU0LCAucGFkID0gMjE1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA1MiwgLnBhZCA9IDIxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNTIsIC5wYWQgPSAyMDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDUxLCAucGFkID0gMjA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA1MSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNDksIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDQ5LCAucGFkID0gMTk3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA0OCwgLnBhZCA9IDE5NywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNDgsIC5wYWQgPSAxOTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDQ3LCAucGFkID0gMTkxLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA0NywgLnBhZCA9IDE4NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNDUsIC5wYWQgPSAxODYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDQ1LCAucGFkID0gMTgxLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA0NCwgLnBhZCA9IDE4MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNDQsIC5wYWQgPSAxNzUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDQzLCAucGFkID0gMTc1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA0MywgLnBhZCA9IDE3MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNDIsIC5wYWQgPSAxNzAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDQyLCAucGFkID0gMTY2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA0MCwgLnBhZCA9IDE2NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNDAsIC5wYWQgPSAxNjEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDM5LCAucGFkID0gMTYxLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzOSwgLnBhZCA9IDE1NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMzgsIC5wYWQgPSAxNTYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDM4LCAucGFkID0gMTUyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzNywgLnBhZCA9IDE1MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMzcsIC5wYWQgPSAxNDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDM2LCAucGFkID0gMTQ4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzNiwgLnBhZCA9IDE0MywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMzUsIC5wYWQgPSAxNDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDM1LCAucGFkID0gMTM5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzNCwgLnBhZCA9IDEzOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMzQsIC5wYWQgPSAxMzUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDMzLCAucGFkID0gMTM1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzMywgLnBhZCA9IDEzMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMzIsIC5wYWQgPSAxMzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDMyLCAucGFkID0gMTI4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzMSwgLnBhZCA9IDEyOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMzEsIC5wYWQgPSAxMjQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDMwLCAucGFkID0gMTI0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzMCwgLnBhZCA9IDEyMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMjksIC5wYWQgPSAxMjEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI5LCAucGFkID0gMTE3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAyOSwgLnBhZCA9IDExNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMjksIC5wYWQgPSAxMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI4LCAucGFkID0gMTE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAyOCwgLnBhZCA9IDExMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMjcsIC5wYWQgPSAxMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI3LCAucGFkID0gMTA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAyNiwgLnBhZCA9IDEwOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMjYsIC5wYWQgPSAxMDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI1LCAucGFkID0gMTA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAyNSwgLnBhZCA9IDEwMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMjUsIC5wYWQgPSAxMDIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI1LCAucGFkID0gOTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI0LCAucGFkID0gOTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI0LCAucGFkID0gOTYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIzLCAucGFkID0gOTYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIzLCAucGFkID0gOTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIzLCAucGFkID0gOTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIzLCAucGFkID0gOTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIyLCAucGFkID0gOTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIyLCAucGFkID0gODgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIxLCAucGFkID0gODgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIxLCAucGFkID0gODUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIxLCAucGFkID0gODUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIxLCAucGFkID0gODMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIwLCAucGFkID0gODMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIwLCAucGFkID0gODEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIwLCAucGFkID0gODEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIwLCAucGFkID0gNzgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE5LCAucGFkID0gNzgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE5LCAucGFkID0gNzYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE5LCAucGFkID0gNzYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE5LCAucGFkID0gNzQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE4LCAucGFkID0gNzQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE4LCAucGFkID0gNzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE4LCAucGFkID0gNzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE4LCAucGFkID0gNzAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE3LCAucGFkID0gNzAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE3LCAucGFkID0gNjgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE3LCAucGFkID0gNjgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE3LCAucGFkID0gNjYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE2LCAucGFkID0gNjYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE2LCAucGFkID0gNjQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE2LCAucGFkID0gNjQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE2LCAucGFkID0gNjIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gNjIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gNjAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gNjAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gNTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gNTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gNTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gNTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gNTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gNTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gNTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gNTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjJfNWdoel90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDE1MiwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTQ3LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSAxNDMsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEzOSwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTM1LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMzEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEyOCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTI0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMjEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDExNywgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTE0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMTEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEwNywgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTA0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMDEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDk5LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA5NiwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTMsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDkwLCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA4OCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODUsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDgzLCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA4MSwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzgsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDc2LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA3NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjQ4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI0MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMzQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjI3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIyMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxOTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTkxLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE4NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxODEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTc1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE3MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxNjYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTYxLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE1NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxNTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTQ4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE0MywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMzksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTM1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDEzMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMjgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTI0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDEyMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDExMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDEwMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA5OSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA5NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA5MywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA5MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA4OCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA4NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA4MywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA4MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA3OCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA3NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA3NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA3MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA3MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA2OCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA2NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA2NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA2NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA2MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNDgsIC5wYWQgPSA2MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNDgsIC5wYWQgPSA2MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNDEsIC5wYWQgPSA2MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNDEsIC5wYWQgPSA1OSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMzQsIC5wYWQgPSA1OSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMzQsIC5wYWQgPSA1NywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMjcsIC5wYWQgPSA1NywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMjcsIC5wYWQgPSA1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMjEsIC5wYWQgPSA1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMjEsIC5wYWQgPSA1NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMTUsIC5wYWQgPSA1NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMTUsIC5wYWQgPSA1MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMDgsIC5wYWQgPSA1MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMDgsIC5wYWQgPSA1MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMDMsIC5wYWQgPSA1MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMDMsIC5wYWQgPSA0OSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxOTcsIC5wYWQgPSA0OSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxOTcsIC5wYWQgPSA0OCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxOTEsIC5wYWQgPSA0OCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxOTEsIC5wYWQgPSA0NywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxODYsIC5wYWQgPSA0NywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxODYsIC5wYWQgPSA0NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxODEsIC5wYWQgPSA0NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxODEsIC5wYWQgPSA0NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNzUsIC5wYWQgPSA0NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNzUsIC5wYWQgPSA0MywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNzAsIC5wYWQgPSA0MywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNzAsIC5wYWQgPSA0MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNjYsIC5wYWQgPSA0MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNjYsIC5wYWQgPSA0MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNjEsIC5wYWQgPSA0MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNjEsIC5wYWQgPSAzOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNTYsIC5wYWQgPSAzOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNTYsIC5wYWQgPSAzOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNTIsIC5wYWQgPSAzOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNTIsIC5wYWQgPSAzNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNDgsIC5wYWQgPSAzNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNDgsIC5wYWQgPSAzNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNDMsIC5wYWQgPSAzNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNDMsIC5wYWQgPSAzNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMzksIC5wYWQgPSAzNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMzksIC5wYWQgPSAzNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMzUsIC5wYWQgPSAzNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMzUsIC5wYWQgPSAzMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMzIsIC5wYWQgPSAzMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMzIsIC5wYWQgPSAzMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMjgsIC5wYWQgPSAzMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCit9OworCit2b2lkIGxwcGh5X3JldjBfMV90YWJsZV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlCNDNfV0FSTl9PTihkZXYtPnBoeS5yZXYgPj0gMik7CisKKwliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjgoMiwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfbWluX3NpZ19zcV90YWJsZSksIGxwcGh5X21pbl9zaWdfc3FfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcmV2MDFfbm9pc2Vfc2NhbGVfdGFibGUpLCBscHBoeV9yZXYwMV9ub2lzZV9zY2FsZV90YWJsZSk7CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIxNigxNCwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfY3JzX2dhaW5fbmZ0X3RhYmxlKSwgbHBwaHlfY3JzX2dhaW5fbmZ0X3RhYmxlKTsKKwliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjE2KDgsIDApLAorCQlBUlJBWV9TSVpFKGxwcGh5X3JldjAxX2ZpbHRlcl9jb250cm9sX3RhYmxlKSwgbHBwaHlfcmV2MDFfZmlsdGVyX2NvbnRyb2xfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMzIoOSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcmV2MDFfcHNfY29udHJvbF90YWJsZSksIGxwcGh5X3JldjAxX3BzX2NvbnRyb2xfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCOCg2LCAwKSwKKwkJQVJSQVlfU0laRShscHBoeV9wbGxfZnJhY3Rpb25fdGFibGUpLCBscHBoeV9wbGxfZnJhY3Rpb25fdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMCwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfaXFsb19jYWxfdGFibGUpLCBscHBoeV9pcWxvX2NhbF90YWJsZSk7CisJaWYgKGRldi0+cGh5LnJldiA9PSAwKSB7CisJCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMTMsIDApLAorCQkJQVJSQVlfU0laRShscHBoeV9yZXYwX29mZG1fY2NrX2dhaW5fdGFibGUpLCBscHBoeV9yZXYwX29mZG1fY2NrX2dhaW5fdGFibGUpOworCQliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjE2KDEyLCAwKSwKKwkJCUFSUkFZX1NJWkUobHBwaHlfcmV2MF9vZmRtX2Nja19nYWluX3RhYmxlKSwgbHBwaHlfcmV2MF9vZmRtX2Nja19nYWluX3RhYmxlKTsKKwl9IGVsc2UgeworCQliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjE2KDEzLCAwKSwKKwkJCUFSUkFZX1NJWkUobHBwaHlfcmV2MV9vZmRtX2Nja19nYWluX3RhYmxlKSwgbHBwaHlfcmV2MV9vZmRtX2Nja19nYWluX3RhYmxlKTsKKwkJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIxNigxMiwgMCksCisJCQlBUlJBWV9TSVpFKGxwcGh5X3JldjFfb2ZkbV9jY2tfZ2Fpbl90YWJsZSksIGxwcGh5X3JldjFfb2ZkbV9jY2tfZ2Fpbl90YWJsZSk7Cit9CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIxNigxNSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfZ2Fpbl9kZWx0YV90YWJsZSksIGxwcGh5X2dhaW5fZGVsdGFfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMzIoMTAsIDApLAorCQlBUlJBWV9TSVpFKGxwcGh5X3R4X3Bvd2VyX2NvbnRyb2xfdGFibGUpLCBscHBoeV90eF9wb3dlcl9jb250cm9sX3RhYmxlKTsKK30KKwordm9pZCBscHBoeV9yZXYycGx1c190YWJsZV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKKwlpbnQgaTsKKworCUI0M19XQVJOX09OKGRldi0+cGh5LnJldiA8IDIpOworCisJZm9yIChpID0gMDsgaSA8IDcwNDsgaSsrKQorCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIzMig3LCBpKSwgMCk7CisKKwliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjgoMiwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfbWluX3NpZ19zcV90YWJsZSksIGxwcGh5X21pbl9zaWdfc3FfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcmV2MnBsdXNfbm9pc2Vfc2NhbGVfdGFibGUpLCBscHBoeV9yZXYycGx1c19ub2lzZV9zY2FsZV90YWJsZSk7CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIzMigxMSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcmV2MnBsdXNfZmlsdGVyX2NvbnRyb2xfdGFibGUpLCBscHBoeV9yZXYycGx1c19maWx0ZXJfY29udHJvbF90YWJsZSk7CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIzMigxMiwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcmV2MnBsdXNfcHNfY29udHJvbF90YWJsZSksIGxwcGh5X3JldjJwbHVzX3BzX2NvbnRyb2xfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMzIoMTMsIDApLAorCQlBUlJBWV9TSVpFKGxwcGh5X2dhaW5faWR4X3RhYmxlKSwgbHBwaHlfZ2Fpbl9pZHhfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMTQsIDApLAorCQlBUlJBWV9TSVpFKGxwcGh5X2F1eF9nYWluX2lkeF90YWJsZSksIGxwcGh5X2F1eF9nYWluX2lkeF90YWJsZSk7CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIxNigxNSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfc3dfY29udHJvbF90YWJsZSksIGxwcGh5X3N3X2NvbnRyb2xfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCOCgxNiwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfaGZfdGFibGUpLCBscHBoeV9oZl90YWJsZSk7CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIzMigxNywgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfZ2Fpbl92YWx1ZV90YWJsZSksIGxwcGh5X2dhaW5fdmFsdWVfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMTgsIDApLAorCQlBUlJBWV9TSVpFKGxwcGh5X2dhaW5fdGFibGUpLCBscHBoeV9nYWluX3RhYmxlKTsKKwliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjgoNiwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcGxsX2ZyYWN0aW9uX3RhYmxlKSwgbHBwaHlfcGxsX2ZyYWN0aW9uX3RhYmxlKTsKKwliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjE2KDAsIDApLAorCQlBUlJBWV9TSVpFKGxwcGh5X2lxbG9fY2FsX3RhYmxlKSwgbHBwaHlfaXFsb19jYWxfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMzIoOSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcGFwZF9lcHNfdGFibGUpLCBscHBoeV9wYXBkX2Vwc190YWJsZSk7CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIzMigxMCwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcGFwZF9tdWx0X3RhYmxlKSwgbHBwaHlfcGFwZF9tdWx0X3RhYmxlKTsKKworCWlmICgoYnVzLT5jaGlwX2lkID09IDB4NDMyNSkgJiYgKGJ1cy0+Y2hpcF9yZXYgPT0gMCkpIHsKKwkJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIzMigxMywgMCksCisJCQlBUlJBWV9TSVpFKGxwcGh5X2EwX2dhaW5faWR4X3RhYmxlKSwgbHBwaHlfYTBfZ2Fpbl9pZHhfdGFibGUpOworCQliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjE2KDE0LCAwKSwKKwkJCUFSUkFZX1NJWkUobHBwaHlfYTBfYXV4X2dhaW5faWR4X3RhYmxlKSwgbHBwaHlfYTBfYXV4X2dhaW5faWR4X3RhYmxlKTsKKwkJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIzMigxNywgMCksCisJCQlBUlJBWV9TSVpFKGxwcGh5X2EwX2dhaW5fdmFsdWVfdGFibGUpLCBscHBoeV9hMF9nYWluX3ZhbHVlX3RhYmxlKTsKKwkJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIxNigxOCwgMCksCisJCQlBUlJBWV9TSVpFKGxwcGh5X2EwX2dhaW5fdGFibGUpLCBscHBoeV9hMF9nYWluX3RhYmxlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3JldjBfMV93cml0ZV9nYWluX3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IG9mZnNldCwKKwkJCQlzdHJ1Y3QgbHBwaHlfdHhfZ2Fpbl90YWJsZV9lbnRyeSBkYXRhKQoreworCXUzMiB0bXA7CisKKwlCNDNfV0FSTl9PTihkZXYtPnBoeS5yZXYgPj0gMik7CisKKwl0bXAgID0gZGF0YS5wYWQgPDwgMTE7CisJdG1wIHw9IGRhdGEucGdhIDw8IDc7CisJdG1wIHw9IGRhdGEuZ20gIDw8IDQ7CisJdG1wIHw9IGRhdGEuZGFjOworCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjMyKDEwLCAweEMwICsgb2Zmc2V0KSwgdG1wKTsKKwl0bXAgID0gZGF0YS5iYl9tdWx0IDw8IDIwOworCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjMyKDEwLCAweDE0MCArIG9mZnNldCksIHRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3JldjJwbHVzX3dyaXRlX2dhaW5fdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2LCBpbnQgb2Zmc2V0LAorCQkJCXN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGRhdGEpCit7CisJdTMyIHRtcDsKKworCUI0M19XQVJOX09OKGRldi0+cGh5LnJldiA8IDIpOworCisJdG1wICA9IGRhdGEucGFkIDw8IDE2OworCXRtcCB8PSBkYXRhLnBnYSA8PCA4OworCXRtcCB8PSBkYXRhLmdtOworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQkJdG1wIHw9IDB4MTAgPDwgMjQ7CisJCWVsc2UKKwkJCXRtcCB8PSAweDcwIDw8IDI0OworCX0gZWxzZSB7CisJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQl0bXAgfD0gMHgxNCA8PCAyNDsKKwkJZWxzZQorCQkJdG1wIHw9IDB4N0YgPDwgMjQ7CisJfQorCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjMyKDcsIDB4QzAgKyBvZmZzZXQpLCB0bXApOworCXRtcCAgPSBkYXRhLmJiX211bHQgPDwgMjA7CisJdG1wIHw9IGRhdGEuZGFjIDw8IDI4OworCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjMyKDcsIDB4MTQwICsgb2Zmc2V0KSwgdG1wKTsKK30KKwordm9pZCBscHBoeV93cml0ZV9nYWluX3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IG9mZnNldCwKKwkJCSAgICBzdHJ1Y3QgbHBwaHlfdHhfZ2Fpbl90YWJsZV9lbnRyeSBkYXRhKQoreworCWlmIChkZXYtPnBoeS5yZXYgPj0gMikKKwkJbHBwaHlfcmV2MnBsdXNfd3JpdGVfZ2Fpbl90YWJsZShkZXYsIG9mZnNldCwgZGF0YSk7CisJZWxzZQorCQlscHBoeV9yZXYwXzFfd3JpdGVfZ2Fpbl90YWJsZShkZXYsIG9mZnNldCwgZGF0YSk7Cit9CisKK3ZvaWQgbHBwaHlfd3JpdGVfZ2Fpbl90YWJsZV9idWxrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IG9mZnNldCwgaW50IGNvdW50LAorCQkJCSBzdHJ1Y3QgbHBwaHlfdHhfZ2Fpbl90YWJsZV9lbnRyeSAqdGFibGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBvZmZzZXQ7IGkgPCBjb3VudDsgaSsrKQorCQlscHBoeV93cml0ZV9nYWluX3RhYmxlKGRldiwgaSwgdGFibGVbaV0pOworfQorCit2b2lkIGxwcGh5X2luaXRfdHhfZ2Fpbl90YWJsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+ZGV2LT5idXM7CisKKwlzd2l0Y2ggKGRldi0+cGh5LnJldikgeworCWNhc2UgMDoKKwkJaWYgKChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfaGkgJiBCNDNfQkZIX05PUEEpIHx8CisJCSAgICAoYnVzLT5zcHJvbS5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9IR1BBKSkKKwkJCWxwcGh5X3dyaXRlX2dhaW5fdGFibGVfYnVsayhkZXYsIDAsIDEyOCwKKwkJCQkJbHBwaHlfcmV2MF9ub3BhX3R4X2dhaW5fdGFibGUpOworCQllbHNlIGlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQlscHBoeV93cml0ZV9nYWluX3RhYmxlX2J1bGsoZGV2LCAwLCAxMjgsCisJCQkJCWxwcGh5X3JldjBfMmdoel90eF9nYWluX3RhYmxlKTsKKwkJZWxzZQorCQkJbHBwaHlfd3JpdGVfZ2Fpbl90YWJsZV9idWxrKGRldiwgMCwgMTI4LAorCQkJCQlscHBoeV9yZXYwXzVnaHpfdHhfZ2Fpbl90YWJsZSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaWYgKChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfaGkgJiBCNDNfQkZIX05PUEEpIHx8CisJCSAgICAoYnVzLT5zcHJvbS5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9IR1BBKSkKKwkJCWxwcGh5X3dyaXRlX2dhaW5fdGFibGVfYnVsayhkZXYsIDAsIDEyOCwKKwkJCQkJbHBwaHlfcmV2MV9ub3BhX3R4X2dhaW5fdGFibGUpOworCQllbHNlIGlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQlscHBoeV93cml0ZV9nYWluX3RhYmxlX2J1bGsoZGV2LCAwLCAxMjgsCisJCQkJCWxwcGh5X3JldjFfMmdoel90eF9nYWluX3RhYmxlKTsKKwkJZWxzZQorCQkJbHBwaHlfd3JpdGVfZ2Fpbl90YWJsZV9idWxrKGRldiwgMCwgMTI4LAorCQkJCQlscHBoeV9yZXYxXzVnaHpfdHhfZ2Fpbl90YWJsZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfaGkgJiBCNDNfQkZIX05PUEEpCisJCQlscHBoeV93cml0ZV9nYWluX3RhYmxlX2J1bGsoZGV2LCAwLCAxMjgsCisJCQkJCWxwcGh5X3JldjJfbm9wYV90eF9nYWluX3RhYmxlKTsKKwkJZWxzZSBpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQkJbHBwaHlfd3JpdGVfZ2Fpbl90YWJsZV9idWxrKGRldiwgMCwgMTI4LAorCQkJCQlscHBoeV9yZXYyXzJnaHpfdHhfZ2Fpbl90YWJsZSk7CisJCWVsc2UKKwkJCWxwcGh5X3dyaXRlX2dhaW5fdGFibGVfYnVsayhkZXYsIDAsIDEyOCwKKwkJCQkJbHBwaHlfcmV2Ml81Z2h6X3R4X2dhaW5fdGFibGUpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuaAppbmRleCAwYjhkMDI4Li44NGYxZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX2xwcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5oCkBAIC0yNiw2ICsyNiwxOSBAQAogCQkJICB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIGNvbnN0IHZvaWQgKmRhdGEpOwogCiB2b2lkIGIyMDYyX3VwbG9hZF9pbml0X3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Cit2b2lkIGIyMDYzX3VwbG9hZF9pbml0X3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiAKK3N0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IHsKKwl1OCBnbSwgIHBnYSwgIHBhZCwgIGRhYywgIGJiX211bHQ7Cit9OworCit2b2lkIGxwcGh5X3dyaXRlX2dhaW5fdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2LCBpbnQgb2Zmc2V0LAorCQkJICAgIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGRhdGEpOwordm9pZCBscHBoeV93cml0ZV9nYWluX3RhYmxlX2J1bGsoc3RydWN0IGI0M193bGRldiAqZGV2LCBpbnQgb2Zmc2V0LCBpbnQgY291bnQsCisJCQkJIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5ICp0YWJsZSk7CisKK3ZvaWQgbHBwaHlfcmV2MF8xX3RhYmxlX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKK3ZvaWQgbHBwaHlfcmV2MnBsdXNfdGFibGVfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwordm9pZCBscHBoeV9pbml0X3R4X2dhaW5fdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIAogI2VuZGlmIC8qIEI0M19UQUJMRVNfTFBQSFlfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My93YS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3dhLmMKaW5kZXggZTFlMjBmNi4uOTdjNzkxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3dhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3dhLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAliYWNrdXAgPSBiNDNfb2ZkbXRhYl9yZWFkMTYoZGV2LCBCNDNfT0ZETVRBQl9QV1JEWU4yLCAwKTsKIAliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfUFdSRFlOMiwgMCwgNyk7CiAJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX1VOS05PV05fQVBIWSwgMCwgMCk7Ci0JYjQzX2R1bW15X3RyYW5zbWlzc2lvbihkZXYpOworCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2LCB0cnVlLCB0cnVlKTsKIAliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfUFdSRFlOMiwgMCwgYmFja3VwKTsKIH0KIApAQCAtNjI4LDcgKzYyOCw3IEBACiAJCQlCNDNfV0FSTl9PTigxKTsKIAkJfQogCQliNDNfd2FfYm9hcmRzX2coZGV2KTsKLQl9IGVsc2UgeyAvKiBObyBOIFBIWSBzdXBwb3J0IHNvIGZhciAqLworCX0gZWxzZSB7IC8qIE5vIE4gUEhZIHN1cHBvcnQgc28gZmFyLCBMUCBQSFkgaXMgaW4gcGh5X2xwLmMgKi8KIAkJQjQzX1dBUk5fT04oMSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYwppbmRleCA1NWYzNmE3Li4xNGY1NDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMKQEAgLTE4MCwxMSArMTgwLDEyIEBACiAvKiBHZW5lcmF0ZSBhIFRYIGRhdGEgaGVhZGVyLiAqLwogaW50IGI0M19nZW5lcmF0ZV90eGhkcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCSAgICAgICB1OCAqX3R4aGRyLAotCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZnJhZ21lbnRfZGF0YSwKLQkJICAgICAgIHVuc2lnbmVkIGludCBmcmFnbWVudF9sZW4sCisJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWcsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCiAJCSAgICAgICB1MTYgY29va2llKQogeworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyYWdtZW50X2RhdGEgPSBza2JfZnJhZy0+ZGF0YTsKKwl1bnNpZ25lZCBpbnQgZnJhZ21lbnRfbGVuID0gc2tiX2ZyYWctPmxlbjsKIAlzdHJ1Y3QgYjQzX3R4aGRyICp0eGhkciA9IChzdHJ1Y3QgYjQzX3R4aGRyICopX3R4aGRyOwogCWNvbnN0IHN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKndsaGRyID0KQEAgLTIzNyw3ICsyMzgsNyBAQAogCQlpbnQgd2xoZHJfbGVuOwogCQlzaXplX3QgaXZfbGVuOwogCi0JCUI0M19XQVJOX09OKGtleV9pZHggPj0gZGV2LT5tYXhfbnJfa2V5cyk7CisJCUI0M19XQVJOX09OKGtleV9pZHggPj0gQVJSQVlfU0laRShkZXYtPmtleSkpOwogCQlrZXkgPSAmKGRldi0+a2V5W2tleV9pZHhdKTsKIAogCQlpZiAodW5saWtlbHkoIWtleS0+a2V5Y29uZikpIHsKQEAgLTI1OCw5ICsyNTksMjYgQEAKIAkJbWFjX2N0bCB8PSAoa2V5LT5hbGdvcml0aG0gPDwgQjQzX1RYSF9NQUNfS0VZQUxHX1NISUZUKSAmCiAJCQkgICBCNDNfVFhIX01BQ19LRVlBTEc7CiAJCXdsaGRyX2xlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmN0bCk7Ci0JCWl2X2xlbiA9IG1pbigoc2l6ZV90KSBpbmZvLT5jb250cm9sLmh3X2tleS0+aXZfbGVuLAotCQkJICAgICBBUlJBWV9TSVpFKHR4aGRyLT5pdikpOwotCQltZW1jcHkodHhoZHItPml2LCAoKHU4ICopIHdsaGRyKSArIHdsaGRyX2xlbiwgaXZfbGVuKTsKKwkJaWYgKGtleS0+YWxnb3JpdGhtID09IEI0M19TRUNfQUxHT19US0lQKSB7CisJCQl1MTYgcGhhc2Uxa2V5WzVdOworCQkJaW50IGk7CisJCQkvKiB3ZSBnaXZlIHRoZSBwaGFzZTFrZXkgYW5kIGl2MTYgaGVyZSwgdGhlIGtleSBpcyBzdG9yZWQgaW4KKwkJCSAqIHNobS4gV2l0aCB0aGF0IHRoZSBoYXJkd2FyZSBjYW4gZG8gcGhhc2UgMiBhbmQgZW5jcnlwdGlvbi4KKwkJCSAqLworCQkJaWVlZTgwMjExX2dldF90a2lwX2tleShpbmZvLT5jb250cm9sLmh3X2tleSwgc2tiX2ZyYWcsCisJCQkJCUlFRUU4MDIxMV9US0lQX1AxX0tFWSwgKHU4KilwaGFzZTFrZXkpOworCQkJLyogcGhhc2Uxa2V5IGlzIGluIGhvc3QgZW5kaWFuLiBDb3B5IHRvIGxpdHRsZS1lbmRpYW4gdHhoZHItPml2LiAqLworCQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQkJCXR4aGRyLT5pdltpICogMiArIDBdID0gcGhhc2Uxa2V5W2ldOworCQkJCXR4aGRyLT5pdltpICogMiArIDFdID0gcGhhc2Uxa2V5W2ldID4+IDg7CisJCQl9CisJCQkvKiBpdjE2ICovCisJCQltZW1jcHkodHhoZHItPml2ICsgMTAsICgodTggKikgd2xoZHIpICsgd2xoZHJfbGVuLCAzKTsKKwkJfSBlbHNlIHsKKwkJCWl2X2xlbiA9IG1pbigoc2l6ZV90KSBpbmZvLT5jb250cm9sLmh3X2tleS0+aXZfbGVuLAorCQkJCSAgICAgQVJSQVlfU0laRSh0eGhkci0+aXYpKTsKKwkJCW1lbWNweSh0eGhkci0+aXYsICgodTggKikgd2xoZHIpICsgd2xoZHJfbGVuLCBpdl9sZW4pOworCQl9CiAJfQogCWlmIChiNDNfaXNfb2xkX3R4aGRyX2Zvcm1hdChkZXYpKSB7CiAJCWI0M19nZW5lcmF0ZV9wbGNwX2hkcigoc3RydWN0IGI0M19wbGNwX2hkcjQgKikoJnR4aGRyLT5vbGRfZm9ybWF0LnBsY3ApLApAQCAtNTc4LDcgKzU5Niw3IEBACiAJCSAqIGtleSBpbmRleCwgYnV0IHRoZSB1Y29kZSBwYXNzZWQgaXQgc2xpZ2h0bHkgZGlmZmVyZW50LgogCQkgKi8KIAkJa2V5aWR4ID0gYjQzX2tpZHhfdG9fcmF3KGRldiwga2V5aWR4KTsKLQkJQjQzX1dBUk5fT04oa2V5aWR4ID49IGRldi0+bWF4X25yX2tleXMpOworCQlCNDNfV0FSTl9PTihrZXlpZHggPj0gQVJSQVlfU0laRShkZXYtPmtleSkpOwogCiAJCWlmIChkZXYtPmtleVtrZXlpZHhdLmFsZ29yaXRobSAhPSBCNDNfU0VDX0FMR09fTk9ORSkgewogCQkJd2xoZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihmY3RsKTsKQEAgLTY1NSw2ICs2NzMsNyBAQAogCQlzdGF0dXMuZnJlcSA9IGNoYW5pZCArIDI0MDA7CiAJCWJyZWFrOwogCWNhc2UgQjQzX1BIWVRZUEVfTjoKKwljYXNlIEI0M19QSFlUWVBFX0xQOgogCQkvKiBjaGFuaWQgaXMgdGhlIFNITSBjaGFubmVsIGNvb2tpZS4gV2hpY2ggaXMgdGhlIHBsYWluCiAJCSAqIGNoYW5uZWwgbnVtYmVyIGluIGI0My4gKi8KIAkJaWYgKGNoYW5zdGF0ICYgQjQzX1JYX0NIQU5fNUdIWikgewpAQCAtNjcwLDcgKzY4OSw4IEBACiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlpZWVlODAyMTFfcnhfaXJxc2FmZShkZXYtPndsLT5odywgc2tiLCAmc3RhdHVzKTsKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShkZXYtPndsLT5odywgc2tiKTsKIAogCXJldHVybjsKIGRyb3A6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuaAppbmRleCA0ZmIyYTE5Li4zNTMwZGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmgKQEAgLTE3Niw4ICsxNzYsNyBAQAogCiBpbnQgYjQzX2dlbmVyYXRlX3R4aGRyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKIAkJICAgICAgIHU4ICogdHhoZHIsCi0JCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmcmFnbWVudF9kYXRhLAotCQkgICAgICAgdW5zaWduZWQgaW50IGZyYWdtZW50X2xlbiwKKwkJICAgICAgIHN0cnVjdCBza19idWZmICpza2JfZnJhZywKIAkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhjdGwsIHUxNiBjb29raWUpOwogCiAvKiBUcmFuc21pdCBTdGF0dXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuYwppbmRleCAyZjkwZmI5Li44NjY0MDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5jCkBAIC0xMzY2LDE1ICsxMzY2LDI1IEBACiAJcmluZyA9IHByaW9yaXR5X3RvX3R4cmluZyhkZXYsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+bG9jaywgZmxhZ3MpOwogCUI0M2xlZ2FjeV9XQVJOX09OKCFyaW5nLT50eCk7Ci0JaWYgKHVubGlrZWx5KGZyZWVfc2xvdHMocmluZykgPCBTTE9UU19QRVJfUEFDS0VUKSkgewotCQliNDNsZWdhY3l3YXJuKGRldi0+d2wsICJETUEgcXVldWUgb3ZlcmZsb3dcbiIpOworCisJaWYgKHVubGlrZWx5KHJpbmctPnN0b3BwZWQpKSB7CisJCS8qIFdlIGdldCBoZXJlIG9ubHkgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBtYWM4MDIxMS4KKwkJICogQmVjYXVzZSBvZiBhIHJhY2UsIG9uZSBwYWNrZXQgbWF5IGJlIHF1ZXVlZCBhZnRlcgorCQkgKiB0aGUgcXVldWUgaXMgc3RvcHBlZCwgdGh1cyB3ZSBnb3QgY2FsbGVkIHdoZW4gd2Ugc2hvdWxkbid0LgorCQkgKiBGb3Igbm93LCBqdXN0IHJlZnVzZSB0aGUgdHJhbnNtaXQuICovCisJCWlmIChiNDNsZWdhY3lfZGVidWcoZGV2LCBCNDNsZWdhY3lfREJHX0RNQVZFUkJPU0UpKQorCQkJYjQzbGVnYWN5ZXJyKGRldi0+d2wsICJQYWNrZXQgYWZ0ZXIgcXVldWUgc3RvcHBlZFxuIik7CiAJCWVyciA9IC1FTk9TUEM7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JLyogQ2hlY2sgaWYgdGhlIHF1ZXVlIHdhcyBzdG9wcGVkIGluIG1hYzgwMjExLAotCSAqIGJ1dCB3ZSBnb3QgY2FsbGVkIG5ldmVydGhlbGVzcy4KLQkgKiBUaGF0IHdvdWxkIGJlIGEgbWFjODAyMTEgYnVnLiAqLwotCUI0M2xlZ2FjeV9CVUdfT04ocmluZy0+c3RvcHBlZCk7CisKKwlpZiAodW5saWtlbHkoV0FSTl9PTihmcmVlX3Nsb3RzKHJpbmcpIDwgU0xPVFNfUEVSX1BBQ0tFVCkpKSB7CisJCS8qIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGEgcmVhbCBlcnJvciB3aXRoIHRoZSBxdWV1ZQorCQkgKiBmdWxsLCBidXQgcXVldWVzIG5vdCBzdG9wcGVkLiAqLworCQliNDNsZWdhY3llcnIoZGV2LT53bCwgIkRNQSBxdWV1ZSBvdmVyZmxvd1xuIik7CisJCWVyciA9IC1FTk9TUEM7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAKIAllcnIgPSBkbWFfdHhfZnJhZ21lbnQocmluZywgc2tiKTsKIAlpZiAodW5saWtlbHkoZXJyID09IC1FTk9LRVkpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwppbmRleCBjNDk3M2MxLi4xZDkyMjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKQEAgLTEyNTIsNyArMTI1Miw3IEBACiAJd2wtPmN1cnJlbnRfYmVhY29uID0gYmVhY29uOwogCXdsLT5iZWFjb24wX3VwbG9hZGVkID0gMDsKIAl3bC0+YmVhY29uMV91cGxvYWRlZCA9IDA7Ci0JcXVldWVfd29yayh3bC0+aHctPndvcmtxdWV1ZSwgJndsLT5iZWFjb25fdXBkYXRlX3RyaWdnZXIpOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKHdsLT5odywgJndsLT5iZWFjb25fdXBkYXRlX3RyaWdnZXIpOwogfQogCiBzdGF0aWMgdm9pZCBiNDNsZWdhY3lfc2V0X2JlYWNvbl9pbnQoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LApAQCAtMjMwMCw3ICsyMzAwLDcgQEAKIAkJZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDUwKTsKIAllbHNlCiAJCWRlbGF5ID0gcm91bmRfamlmZmllc19yZWxhdGl2ZShIWiAqIDE1KTsKLQlxdWV1ZV9kZWxheWVkX3dvcmsod2wtPmh3LT53b3JrcXVldWUsICZkZXYtPnBlcmlvZGljX3dvcmssIGRlbGF5KTsKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHdsLT5odywgJmRldi0+cGVyaW9kaWNfd29yaywgZGVsYXkpOwogb3V0OgogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIH0KQEAgLTIzMTEsNyArMjMxMSw3IEBACiAKIAlkZXYtPnBlcmlvZGljX3N0YXRlID0gMDsKIAlJTklUX0RFTEFZRURfV09SSyh3b3JrLCBiNDNsZWdhY3lfcGVyaW9kaWNfd29ya19oYW5kbGVyKTsKLQlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2LT53bC0+aHctPndvcmtxdWV1ZSwgd29yaywgMCk7CisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhkZXYtPndsLT5odywgd29yaywgMCk7CiB9CiAKIC8qIFZhbGlkYXRlIGFjY2VzcyB0byB0aGUgY2hpcCAoU0hNKSAqLwpAQCAtMjgzNiw5ICsyODM2LDcgQEAKIAogc3RhdGljIHZvaWQgYjQzbGVnYWN5X29wX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgdW5zaWduZWQgaW50IGNoYW5nZWQsCi0JCQkJCSAgdW5zaWduZWQgaW50ICpmZmxhZ3MsCi0JCQkJCSAgaW50IG1jX2NvdW50LAotCQkJCQkgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQorCQkJCQkgIHVuc2lnbmVkIGludCAqZmZsYWdzLHU2NCBtdWx0aWNhc3QpCiB7CiAJc3RydWN0IGI0M2xlZ2FjeV93bCAqd2wgPSBod190b19iNDNsZWdhY3lfd2woaHcpOwogCXN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiA9IHdsLT5jdXJyZW50X2RldjsKQEAgLTMxMDgsMTYgKzMxMDYsMjAgQEAKIAkgICAgYnVzLT5wY2ljb3JlLmRldi0+aWQucmV2aXNpb24gPD0gNSkgewogCQkvKiBJTUNGR0xPIHRpbWVvdXRzIHdvcmthcm91bmQuICovCiAJCXRtcCA9IHNzYl9yZWFkMzIoZGV2LT5kZXYsIFNTQl9JTUNGR0xPKTsKLQkJdG1wICY9IH5TU0JfSU1DRkdMT19SRVFUTzsKLQkJdG1wICY9IH5TU0JfSU1DRkdMT19TRVJUTzsKIAkJc3dpdGNoIChidXMtPmJ1c3R5cGUpIHsKIAkJY2FzZSBTU0JfQlVTVFlQRV9QQ0k6CiAJCWNhc2UgU1NCX0JVU1RZUEVfUENNQ0lBOgorCQkJdG1wICY9IH5TU0JfSU1DRkdMT19SRVFUTzsKKwkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fU0VSVE87CiAJCQl0bXAgfD0gMHgzMjsKIAkJCWJyZWFrOwogCQljYXNlIFNTQl9CVVNUWVBFX1NTQjoKKwkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fUkVRVE87CisJCQl0bXAgJj0gflNTQl9JTUNGR0xPX1NFUlRPOwogCQkJdG1wIHw9IDB4NTM7CiAJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOwogCQl9CiAJCXNzYl93cml0ZTMyKGRldi0+ZGV2LCBTU0JfSU1DRkdMTywgdG1wKTsKIAl9CkBAIC0zODg1LDcgKzM4ODcsNyBAQAogCWlmIChiNDNsZWdhY3lfc3RhdHVzKGRldikgPCBCNDNsZWdhY3lfU1RBVF9JTklUSUFMSVpFRCkKIAkJcmV0dXJuOwogCWI0M2xlZ2FjeWluZm8oZGV2LT53bCwgIkNvbnRyb2xsZXIgUkVTRVQgKCVzKSAuLi5cbiIsIHJlYXNvbik7Ci0JcXVldWVfd29yayhkZXYtPndsLT5ody0+d29ya3F1ZXVlLCAmZGV2LT5yZXN0YXJ0X3dvcmspOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKGRldi0+d2wtPmh3LCAmZGV2LT5yZXN0YXJ0X3dvcmspOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3htaXQuYwppbmRleCBiOGUzOWRkLi4xMDNmM2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS94bWl0LmMKQEAgLTU5MCw4ICs1OTAsOCBAQAogCQkgICAgICAgY2hhbnN0YXQpOwogCX0KIAotCWRldi0+c3RhdHMubGFzdF9yeCA9IGppZmZpZXM7Ci0JaWVlZTgwMjExX3J4X2lycXNhZmUoZGV2LT53bC0+aHcsIHNrYiwgJnN0YXR1cyk7CisJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWVlZTgwMjExX3J4X2lycXNhZmUoZGV2LT53bC0+aHcsIHNrYik7CiAKIAlyZXR1cm47CiBkcm9wOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMS5oCmluZGV4IDJlOWZiMGYuLjdmOWQ4ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCiBzdHJ1Y3QgaG9zdGFwX2llZWU4MDIxMV9tZ210IHsKIAlfX2xlMTYgZnJhbWVfY29udHJvbDsKQEAgLTg1LDggKzg2LDExIEBACiAJCQkgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cyk7CiAKIHZvaWQgaG9zdGFwX2R1bXBfdHhfODAyMTEoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgaG9zdGFwX2RhdGFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWludCBob3N0YXBfbWdtdF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGhvc3RhcF9tYXN0ZXJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK25ldGRldl90eF90IGhvc3RhcF9kYXRhX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK25ldGRldl90eF90IGhvc3RhcF9tZ210X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK25ldGRldl90eF90IGhvc3RhcF9tYXN0ZXJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKICNlbmRpZiAvKiBIT1NUQVBfODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jCmluZGV4IGQzMTNiMDAuLjkwMTA4YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMKQEAgLTUzLDcgKzUzLDggQEAKIC8qIGhhcmRfc3RhcnRfeG1pdCBmdW5jdGlvbiBmb3IgZGF0YSBpbnRlcmZhY2VzICh3bGFuIywgd2xhbiN3ZHMjLCB3bGFuI3N0YSkKICAqIENvbnZlcnQgRXRoZXJuZXQgaGVhZGVyIGludG8gYSBzdWl0YWJsZSBJRUVFIDgwMi4xMSBoZWFkZXIgZGVwZW5kaW5nIG9uCiAgKiBkZXZpY2UgY29uZmlndXJhdGlvbi4gKi8KLWludCBob3N0YXBfZGF0YV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCituZXRkZXZfdHhfdCBob3N0YXBfZGF0YV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKQEAgLTc1LDcgKzc2LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0YXBfZGF0YV9zdGFydF94bWl0OiBzaG9ydCBza2IgIgogCQkgICAgICAgIihsZW49JWQpXG4iLCBkZXYtPm5hbWUsIHNrYi0+bGVuKTsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCWlmIChsb2NhbC0+ZGRldiAhPSBkZXYpIHsKQEAgLTg5LDE0ICs5MCwxNCBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcmlzbTJfdHg6IHRyeWluZyB0byB1c2UgIgogCQkJICAgICAgICJBUCBkZXZpY2Ugd2l0aCBFdGhlcm5ldCBuZXQgZGV2XG4iLCBkZXYtPm5hbWUpOwogCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAobG9jYWwtPml3X21vZGUgPT0gSVdfTU9ERV9SRVBFQVQpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcHJpc20yX3R4OiB0cnlpbmcgdG8gdXNlICIKIAkJCSAgICAgICAibm9uLVdEUyBsaW5rIGluIFJlcGVhdGVyIG1vZGVcbiIsIGRldi0+bmFtZSk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfSBlbHNlIGlmIChsb2NhbC0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBICYmCiAJCQkgICAobG9jYWwtPndkc190eXBlICYgSE9TVEFQX1dEU19BUF9DTElFTlQpICYmCiAJCQkgICBtZW1jbXAoc2tiLT5kYXRhICsgRVRIX0FMRU4sIGRldi0+ZGV2X2FkZHIsCkBAIC0yMTAsMTMgKzIxMSwxMyBAQAogCQlza2IgPSBza2JfdW5zaGFyZShza2IsIEdGUF9BVE9NSUMpOwogCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCWlmYWNlLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAkJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuZWVkX2hlYWRyb29tLCBuZWVkX3RhaWxyb29tLAogCQkJCSAgICAgR0ZQX0FUT01JQykpIHsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJaWZhY2UtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCX0gZWxzZSBpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBuZWVkX2hlYWRyb29tKSB7CiAJCXN0cnVjdCBza19idWZmICp0bXAgPSBza2I7CkBAIC0yMjQsMTMgKzIyNSwxMyBAQAogCQlrZnJlZV9za2IodG1wKTsKIAkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQlpZmFjZS0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAJfSBlbHNlIHsKIAkJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQlpZmFjZS0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAJfQogCkBAIC0yNTYsMTIgKzI1NywxMyBAQAogCS8qIFNlbmQgSUVFRSA4MDIuMTEgZW5jYXBzdWxhdGVkIGZyYW1lIHVzaW5nIHRoZSBtYXN0ZXIgcmFkaW8gZGV2aWNlICovCiAJc2tiLT5kZXYgPSBsb2NhbC0+ZGV2OwogCWRldl9xdWV1ZV94bWl0KHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCiAvKiBoYXJkX3N0YXJ0X3htaXQgZnVuY3Rpb24gZm9yIGhvc3RhcGQgd2xhbiNhcCBpbnRlcmZhY2VzICovCi1pbnQgaG9zdGFwX21nbXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorbmV0ZGV2X3R4X3QgaG9zdGFwX21nbXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7CkBAIC0yNzYsNyArMjc4LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0YXBfbWdtdF9zdGFydF94bWl0OiBzaG9ydCBza2IgIgogCQkgICAgICAgIihsZW49JWQpXG4iLCBkZXYtPm5hbWUsIHNrYi0+bGVuKTsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCWlmYWNlLT5zdGF0cy50eF9wYWNrZXRzKys7CkBAIC0zMDEsNyArMzAzLDcgQEAKIAkvKiBTZW5kIElFRUUgODAyLjExIGVuY2Fwc3VsYXRlZCBmcmFtZSB1c2luZyB0aGUgbWFzdGVyIHJhZGlvIGRldmljZSAqLwogCXNrYi0+ZGV2ID0gbG9jYWwtPmRldjsKIAlkZXZfcXVldWVfeG1pdChza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApAQCAtMzczLDExICszNzUsMTIgQEAKIC8qIGhhcmRfc3RhcnRfeG1pdCBmdW5jdGlvbiBmb3IgbWFzdGVyIHJhZGlvIGludGVyZmFjZSB3aWZpIy4KICAqIEFQIHByb2Nlc3NpbmcgKFRYIHJhdGUgY29udHJvbCwgcG93ZXIgc2F2ZSBidWZmZXJpbmcsIGV0Yy4pLgogICogVXNlIGhhcmR3YXJlIFRYIGZ1bmN0aW9uIHRvIHNlbmQgdGhlIGZyYW1lLiAqLwotaW50IGhvc3RhcF9tYXN0ZXJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorbmV0ZGV2X3R4X3QgaG9zdGFwX21hc3Rlcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwotCWludCByZXQgPSBORVRERVZfVFhfQlVTWTsKKwluZXRkZXZfdHhfdCByZXQgPSBORVRERVZfVFhfQlVTWTsKIAl1MTYgZmM7CiAJc3RydWN0IGhvc3RhcF90eF9kYXRhIHR4OwogCWFwX3R4X3JldCB0eF9yZXQ7CkBAIC0zOTYsNyArMzk5LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbnZhbGlkIHNrYi0+Y2IgbWFnaWMgKDB4JTA4eCwgIgogCQkgICAgICAgImV4cGVjdGVkIDB4JTA4eClcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIG1ldGEtPm1hZ2ljLCBIT1NUQVBfU0tCX1RYX0RBVEFfTUFHSUMpOwotCQlyZXQgPSAwOworCQlyZXQgPSBORVRERVZfVFhfT0s7CiAJCWlmYWNlLT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC00MTQsNyArNDE3LDcgQEAKIAlpZiAoc2tiLT5sZW4gPCAyNCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhvc3RhcF9tYXN0ZXJfc3RhcnRfeG1pdDogc2hvcnQgc2tiICIKIAkJICAgICAgICIobGVuPSVkKVxuIiwgZGV2LT5uYW1lLCBza2ItPmxlbik7Ci0JCXJldCA9IDA7CisJCXJldCA9IE5FVERFVl9UWF9PSzsKIAkJaWZhY2UtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJZ290byBmYWlsOwogCX0KQEAgLTQ0MSwxMyArNDQ0LDEzIEBACiAJCQkgICAgICAgZGV2LT5uYW1lLCBtZXRhLT5ldGhlcnR5cGUpOwogCQkJaG9zdGFwX2R1bXBfdHhfODAyMTEoZGV2LT5uYW1lLCBza2IpOwogCi0JCQlyZXQgPSAwOyAvKiBkcm9wIHBhY2tldCAqLworCQkJcmV0ID0gTkVUREVWX1RYX09LOyAvKiBkcm9wIHBhY2tldCAqLwogCQkJaWZhY2UtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCQlicmVhazsKIAljYXNlIEFQX1RYX0RST1A6Ci0JCXJldCA9IDA7IC8qIGRyb3AgcGFja2V0ICovCisJCXJldCA9IE5FVERFVl9UWF9PSzsgLyogZHJvcCBwYWNrZXQgKi8KIAkJaWZhY2UtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJZ290byBmYWlsOwogCWNhc2UgQVBfVFhfUkVUUlk6CkBAIC00NTUsNyArNDU4LDcgQEAKIAljYXNlIEFQX1RYX0JVRkZFUkVEOgogCQkvKiBkbyBub3QgZnJlZSBza2IgaGVyZSwgaXQgd2lsbCBiZSBmcmVlZCB3aGVuIHRoZQogCQkgKiBidWZmZXJlZCBmcmFtZSBpcyBzZW50L3RpbWVkIG91dCAqLwotCQlyZXQgPSAwOworCQlyZXQgPSBORVRERVZfVFhfT0s7CiAJCWdvdG8gdHhfZXhpdDsKIAl9CiAKQEAgLTUwMSw3ICs1MDQsNyBAQAogCQkJICAgICAgICJmcmFtZSAoZHJvcF91bmVuY3J5cHRlZD0xKVxuIiwgZGV2LT5uYW1lKTsKIAkJfQogCQlpZmFjZS0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQlyZXQgPSAwOworCQlyZXQgPSBORVRERVZfVFhfT0s7CiAJCWdvdG8gZmFpbDsKIAl9CiAKQEAgLTUxMCw3ICs1MTMsNyBAQAogCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVFggLSBlbmNyeXB0aW9uIGZhaWxlZFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJcmV0ID0gMDsKKwkJCXJldCA9IE5FVERFVl9UWF9PSzsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCQltZXRhID0gKHN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKikgc2tiLT5jYjsKQEAgLTUxOSwyMyArNTIyLDIzIEBACiAJCQkgICAgICAgImV4cGVjdGVkIDB4JTA4eCkgYWZ0ZXIgaG9zdGFwX3R4X2VuY3J5cHRcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBtZXRhLT5tYWdpYywKIAkJCSAgICAgICBIT1NUQVBfU0tCX1RYX0RBVEFfTUFHSUMpOwotCQkJcmV0ID0gMDsKKwkJCXJldCA9IE5FVERFVl9UWF9PSzsKIAkJCWlmYWNlLT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlnb3RvIGZhaWw7CiAJCX0KIAl9CiAKIAlpZiAobG9jYWwtPmZ1bmMtPnR4ID09IE5VTEwgfHwgbG9jYWwtPmZ1bmMtPnR4KHNrYiwgZGV2KSkgewotCQlyZXQgPSAwOworCQlyZXQgPSBORVRERVZfVFhfT0s7CiAJCWlmYWNlLT5zdGF0cy50eF9kcm9wcGVkKys7CiAJfSBlbHNlIHsKLQkJcmV0ID0gMDsKKwkJcmV0ID0gTkVUREVWX1RYX09LOwogCQlpZmFjZS0+c3RhdHMudHhfcGFja2V0cysrOwogCQlpZmFjZS0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJfQogCiAgZmFpbDoKLQlpZiAoIXJldCAmJiBza2IpCisJaWYgKHJldCA9PSBORVRERVZfVFhfT0sgJiYgc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAgdHhfZXhpdDoKIAlpZiAodHguc3RhX3B0cikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYwppbmRleCA2MzM3NDAyLi5hZDhlYWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCkBAIC02NjYsNyArNjY2LDggQEAKIAkgKiBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgogCSAqLwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpIHsKLQkJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfSEFORExFX1BSRVNFTlQ7CisJCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwKKwkJCQkgICAgICAgSVJRX0hBTkRMRV9QUkVTRU5UOwogCQlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJCWxpbmstPmlycS5IYW5kbGVyID0gcHJpc20yX2ludGVycnVwdDsKIAkJbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnCmluZGV4IDg1Y2M3OTkuLmE4MTMxMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcKQEAgLTQsNyArNCw3IEBACiAKIGNvbmZpZyBJUFcyMTAwCiAJdHJpc3RhdGUgIkludGVsIFBSTy9XaXJlbGVzcyAyMTAwIE5ldHdvcmsgQ29ubmVjdGlvbiIKLQlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTl84MDIxMSAmJiBDRkc4MDIxMQogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgRldfTE9BREVSCiAJc2VsZWN0IExJQjgwMjExCkBAIC02Myw3ICs2Myw3IEBACiAKIGNvbmZpZyBJUFcyMjAwCiAJdHJpc3RhdGUgIkludGVsIFBSTy9XaXJlbGVzcyAyMjAwQkcgYW5kIDI5MTVBQkcgTmV0d29yayBDb25uZWN0aW9uIgotCWRlcGVuZHMgb24gUENJICYmIFdMQU5fODAyMTEKKwlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOXzgwMjExICYmIENGRzgwMjExCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgTElCODAyMTEKQEAgLTE1MCw3ICsxNTAsNyBAQAogCiBjb25maWcgTElCSVBXCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTl84MDIxMSAmJiBDRkc4MDIxMQogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgQ1JZUFRPCiAJc2VsZWN0IENSWVBUT19BUkM0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2llZWU4MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pZWVlODAyMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA3NTVjMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2llZWU4MDIxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4NyArMCwwIEBACi0vKgotICogTWVyZ2VkIHdpdGggbWFpbmxpbmUgaWVlZTgwMjExLmggaW4gQXVnIDIwMDQuICBPcmlnaW5hbCBpZWVlODAyXzExCi0gKiByZW1haW5zIGNvcHlyaWdodCBieSB0aGUgb3JpZ2luYWwgYXV0aG9ycwotICoKLSAqIFBvcnRpb25zIG9mIHRoZSBtZXJnZWQgY29kZSBhcmUgYmFzZWQgb24gSG9zdCBBUCAoc29mdHdhcmUgd2lyZWxlc3MKLSAqIExBTiBhY2Nlc3MgcG9pbnQpIGRyaXZlciBmb3IgSW50ZXJzaWwgUHJpc20yLzIuNS8zLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyLCBTU0ggQ29tbXVuaWNhdGlvbnMgU2VjdXJpdHkgQ29ycCBhbmQgSm91bmkgTWFsaW5lbgotICogPGpAdzEuZmk+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMywgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KLSAqCi0gKiBBZGFwdGlvbiB0byBhIGdlbmVyaWMgSUVFRSA4MDIuMTEgc3RhY2sgYnkgSmFtZXMgS2V0cmVub3MKLSAqIDxqa2V0cmVub0BsaW51eC5pbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSwgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBTZWUgUkVBRE1FIGFuZCBDT1BZSU5HIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIEFQSSBWZXJzaW9uIEhpc3RvcnkKLSAqIDEuMC54IC0tIEluaXRpYWwgdmVyc2lvbgotICogMS4xLnggLS0gQWRkZWQgcmFkaW90YXAsIFFvUywgVElNLCBpZWVlODAyMTFfZ2VvIEFQSXMsCi0gKiAgICAgICAgICB2YXJpb3VzIHN0cnVjdHVyZSBjaGFuZ2VzLCBhbmQgY3J5cHRvIEFQSSBpbml0IG1ldGhvZAotICovCi0jaWZuZGVmIElFRUU4MDIxMV9ICi0jZGVmaW5lIElFRUU4MDIxMV9ICi0jaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4JLyogRVRIX0FMRU4gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogQVJSQVlfU0laRSAqLwotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+Ci0KLSNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KLQotI2RlZmluZSBJRUVFODAyMTFfVkVSU0lPTiAiZ2l0LTEuMS4xMyIKLQotI2RlZmluZSBJRUVFODAyMTFfREFUQV9MRU4JCTIzMDQKLS8qIE1heGltdW0gc2l6ZSBmb3IgdGhlIE1BLVVOSVREQVRBIHByaW1pdGl2ZSwgODAyLjExIHN0YW5kYXJkIHNlY3Rpb24KLSAgIDYuMi4xLjEuMi4KLQotICAgVGhlIGZpZ3VyZSBpbiBzZWN0aW9uIDcuMS4yIHN1Z2dlc3RzIGEgYm9keSBzaXplIG9mIHVwIHRvIDIzMTIKLSAgIGJ5dGVzIGlzIGFsbG93ZWQsIHdoaWNoIGlzIGEgYml0IGNvbmZ1c2luZywgSSBzdXNwZWN0IHRoaXMKLSAgIHJlcHJlc2VudHMgdGhlIDIzMDQgYnl0ZXMgb2YgcmVhbCBkYXRhLCBwbHVzIGEgcG9zc2libGUgOCBieXRlcyBvZgotICAgV0VQIElWIGFuZCBJQ1YuICh0aGlzIGludGVycHJldGF0aW9uIHN1Z2dlc3RlZCBieSBSYW1pcm8gQmFycmVpcm8pICovCi0KLSNkZWZpbmUgSUVFRTgwMjExXzFBRERSX0xFTiAxMAotI2RlZmluZSBJRUVFODAyMTFfMkFERFJfTEVOIDE2Ci0jZGVmaW5lIElFRUU4MDIxMV8zQUREUl9MRU4gMjQKLSNkZWZpbmUgSUVFRTgwMjExXzRBRERSX0xFTiAzMAotI2RlZmluZSBJRUVFODAyMTFfRkNTX0xFTiAgICA0Ci0jZGVmaW5lIElFRUU4MDIxMV9ITEVOCQkJKElFRUU4MDIxMV80QUREUl9MRU4pCi0jZGVmaW5lIElFRUU4MDIxMV9GUkFNRV9MRU4JCShJRUVFODAyMTFfREFUQV9MRU4gKyBJRUVFODAyMTFfSExFTikKLQotI2RlZmluZSBNSU5fRlJBR19USFJFU0hPTEQgICAgIDI1NlUKLSNkZWZpbmUJTUFYX0ZSQUdfVEhSRVNIT0xEICAgICAyMzQ2VQotCi0vKiBRT1MgY29udHJvbCAqLwotI2RlZmluZSBJRUVFODAyMTFfUUNUTF9USUQJCTB4MDAwRgotCi0vKiBkZWJ1ZyBtYWNyb3MgKi8KLQotI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKLWV4dGVybiB1MzIgaWVlZTgwMjExX2RlYnVnX2xldmVsOwotI2RlZmluZSBJRUVFODAyMTFfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAoaWVlZTgwMjExX2RlYnVnX2xldmVsICYgKGxldmVsKSkgXAotICBwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExOiAlYyAlcyAiIGZtdCwgXAotICAgICAgICAgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCi1zdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3JhdGVsaW1pdF9kZWJ1Zyh1MzIgbGV2ZWwpCi17Ci0JcmV0dXJuIChpZWVlODAyMTFfZGVidWdfbGV2ZWwgJiBsZXZlbCkgJiYgbmV0X3JhdGVsaW1pdCgpOwotfQotI2Vsc2UKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQotc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yYXRlbGltaXRfZGVidWcodTMyIGxldmVsKQotewotCXJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgkJCQkvKiBDT05GSUdfTElCSVBXX0RFQlVHICovCi0KLS8qCi0gKiBUbyB1c2UgdGhlIGRlYnVnIHN5c3RlbToKLSAqCi0gKiBJZiB5b3UgYXJlIGRlZmluaW5nIGEgbmV3IGRlYnVnIGNsYXNzaWZpY2F0aW9uLCBzaW1wbHkgYWRkIGl0IHRvIHRoZSAjZGVmaW5lCi0gKiBsaXN0IGhlcmUgaW4gdGhlIGZvcm0gb2Y6Ci0gKgotICogI2RlZmluZSBJRUVFODAyMTFfRExfeHh4eCBWQUxVRQotICoKLSAqIHNoaWZ0aW5nIHZhbHVlIHRvIHRoZSBsZWZ0IG9uZSBiaXQgZnJvbSB0aGUgcHJldmlvdXMgZW50cnkuICB4eHh4IHNob3VsZCBiZQotICogdGhlIG5hbWUgb2YgdGhlIGNsYXNzaWZpY2F0aW9uIChmb3IgZXhhbXBsZSwgV0VQKQotICoKLSAqIFlvdSB0aGVuIG5lZWQgdG8gZWl0aGVyIGFkZCBhIElFRUU4MDIxMV94eHh4X0RFQlVHKCkgbWFjcm8gZGVmaW5pdGlvbiBmb3IgeW91cgotICogY2xhc3NpZmljYXRpb24sIG9yIHVzZSBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX3h4eHgsIC4uLikgd2hlbmV2ZXIgeW91IHdhbnQKLSAqIHRvIHNlbmQgb3V0cHV0IHRvIHRoYXQgY2xhc3NpZmljYXRpb24uCi0gKgotICogVG8gYWRkIHlvdXIgZGVidWcgbGV2ZWwgdG8gdGhlIGxpc3Qgb2YgbGV2ZWxzIHNlZW4gd2hlbiB5b3UgcGVyZm9ybQotICoKLSAqICUgY2F0IC9wcm9jL25ldC9pZWVlODAyMTEvZGVidWdfbGV2ZWwKLSAqCi0gKiB5b3Ugc2ltcGx5IG5lZWQgdG8gYWRkIHlvdXIgZW50cnkgdG8gdGhlIGllZWU4MDIxMV9kZWJ1Z19sZXZlbCBhcnJheS4KLSAqCi0gKiBJZiB5b3UgZG8gbm90IHNlZSBkZWJ1Z19sZXZlbCBpbiAvcHJvYy9uZXQvaWVlZTgwMjExIHRoZW4geW91IGRvIG5vdCBoYXZlCi0gKiBDT05GSUdfTElCSVBXX0RFQlVHIGRlZmluZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgotICoKLSAqLwotCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9JTkZPICAgICAgICAgICgxPDwwKQotI2RlZmluZSBJRUVFODAyMTFfRExfV1ggICAgICAgICAgICAoMTw8MSkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX1NDQU4gICAgICAgICAgKDE8PDIpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9TVEFURSAgICAgICAgICgxPDwzKQotI2RlZmluZSBJRUVFODAyMTFfRExfTUdNVCAgICAgICAgICAoMTw8NCkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX0ZSQUcgICAgICAgICAgKDE8PDUpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9EUk9QICAgICAgICAgICgxPDw3KQotCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9UWCAgICAgICAgICAgICgxPDw4KQotI2RlZmluZSBJRUVFODAyMTFfRExfUlggICAgICAgICAgICAoMTw8OSkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX1FPUyAgICAgICAgICAgKDE8PDMxKQotCi0jZGVmaW5lIElFRUU4MDIxMV9FUlJPUihmLCBhLi4uKSBwcmludGsoS0VSTl9FUlIgImllZWU4MDIxMTogIiBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfV0FSTklORyhmLCBhLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICJpZWVlODAyMTE6ICIgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX0lORk8oZiwgYS4uLikgICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0lORk8sIGYsICMjIGEpCi0KLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1dYKGYsIGEuLi4pICAgICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1dYLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfU0NBTihmLCBhLi4uKSAgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfU0NBTiwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1NUQVRFKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1NUQVRFLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfTUdNVChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9NR01ULCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfRlJBRyhmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9GUkFHLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfRFJPUChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9EUk9QLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfVFgoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFgsIGYsICMjIGEpCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19SWChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9SWCwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1FPUyhmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9RT1MsIGYsICMjIGEpCi0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CS8qIEFSUEhSRF9FVEhFUiAqLwotCi0jaWZuZGVmIFdJUkVMRVNTX1NQWQotI2RlZmluZSBXSVJFTEVTU19TUFkJCS8qIGVuYWJsZSBpd3NweSBzdXBwb3J0ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgkvKiBuZXcgZHJpdmVyIEFQSSAqLwotCi0jZGVmaW5lIEVUSF9QX1BSRUFVVEggMHg4OEM3CS8qIElFRUUgODAyLjExaSBwcmUtYXV0aGVudGljYXRpb24gKi8KLQotI2lmbmRlZiBFVEhfUF84MDIxMV9SQVcKLSNkZWZpbmUgRVRIX1BfODAyMTFfUkFXIChFVEhfUF9FQ09ORVQgKyAxKQotI2VuZGlmCi0KLS8qIElFRUUgODAyLjExIGRlZmluZXMgKi8KLQotI2RlZmluZSBQODAyMTFfT1VJX0xFTiAzCi0KLXN0cnVjdCBpZWVlODAyMTFfc25hcF9oZHIgewotCi0JdTggZHNhcDsJCS8qIGFsd2F5cyAweEFBICovCi0JdTggc3NhcDsJCS8qIGFsd2F5cyAweEFBICovCi0JdTggY3RybDsJCS8qIGFsd2F5cyAweDAzICovCi0JdTggb3VpW1A4MDIxMV9PVUlfTEVOXTsJLyogb3JnYW5pemF0aW9uYWwgdW5pdmVyc2FsIGlkICovCi0KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIFNOQVBfU0laRSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zbmFwX2hkcikKLQotI2RlZmluZSBXTEFOX0ZDX0dFVF9WRVJTKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX1ZFUlMpCi0jZGVmaW5lIFdMQU5fRkNfR0VUX1RZUEUoZmMpICgoZmMpICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpCi0jZGVmaW5lIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKQotCi0jZGVmaW5lIFdMQU5fR0VUX1NFUV9GUkFHKHNlcSkgKChzZXEpICYgSUVFRTgwMjExX1NDVExfRlJBRykKLSNkZWZpbmUgV0xBTl9HRVRfU0VRX1NFUShzZXEpICAoKChzZXEpICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0KQotCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19TSUdOQUwgKDE8PDApCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19SU1NJICgxPDwxKQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfTk9JU0UgKDE8PDIpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19SQVRFICgxPDwzKQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfV0VNQVNLIDB4NwotCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTiAgICAoMTw8MCkKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTiAgICgxPDwxKQotCi0jZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9CQU5EICAgICAoMTw8MCkKLSNkZWZpbmUgSUVFRTgwMjExXzUyR0haX0JBTkQgICAgICgxPDwxKQotCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8xTUIJCSAgICAgICAgMHgwMgotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1CCQkgICAgICAgIDB4MDQKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzVNQgkJICAgICAgICAweDBCCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1CCQkgICAgICAgIDB4MTYKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV82TUIJCSAgICAgICAgMHgwQwotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQgkJICAgICAgICAweDEyCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQgkJMHgxOAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUIJCTB4MjQKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8yNE1CCQkweDMwCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQgkJMHg0OAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUIJCTB4NjAKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV81NE1CCQkweDZDCi0jZGVmaW5lIElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sJCTB4ODAKLQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CX01BU0sJCSgxPDwwKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1CX01BU0sJCSgxPDwxKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1CX01BU0sJCSgxPDwyKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQl9NQVNLCQkoMTw8MykKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSwkJKDE8PDQpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0sJCSgxPDw1KQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSwkJKDE8PDYpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQl9NQVNLCQkoMTw8NykKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0sJCSgxPDw4KQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUJfTUFTSwkJKDE8PDkpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQl9NQVNLCQkoMTw8MTApCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLCQkoMTw8MTEpCi0KLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFU19NQVNLCSAgICAgICAgMHgwMDAwMDAwRgotI2RlZmluZSBJRUVFODAyMTFfQ0NLX0JBU0lDX1JBVEVTX01BU0sJKElFRUU4MDIxMV9DQ0tfUkFURV8xTUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfQ0NLX1JBVEVfMk1CX01BU0spCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfREVGQVVMVF9SQVRFU19NQVNLCShJRUVFODAyMTFfQ0NLX0JBU0lDX1JBVEVTX01BU0sgfCBcCi0gICAgICAgIElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSyB8IFwKLSAgICAgICAgSUVFRTgwMjExX0NDS19SQVRFXzExTUJfTUFTSykKLQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFU19NQVNLCQkweDAwMDAwRkYwCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX0JBU0lDX1JBVEVTX01BU0sJKElFRUU4MDIxMV9PRkRNX1JBVEVfNk1CX01BU0sgfCBcCi0JSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0sgfCBcCi0JSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0spCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX0RFRkFVTFRfUkFURVNfTUFTSwkoSUVFRTgwMjExX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzlNQl9NQVNLICB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUJfTUFTSykKLSNkZWZpbmUgSUVFRTgwMjExX0RFRkFVTFRfUkFURVNfTUFTSyAoSUVFRTgwMjExX09GRE1fREVGQVVMVF9SQVRFU19NQVNLIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRUVFODAyMTFfQ0NLX0RFRkFVTFRfUkFURVNfTUFTSykKLQotI2RlZmluZSBJRUVFODAyMTFfTlVNX09GRE1fUkFURVMJICAgIDgKLSNkZWZpbmUgSUVFRTgwMjExX05VTV9DQ0tfUkFURVMJICAgICAgICAgICAgNAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9TSElGVF9NQVNLX0EgICAgICAgICA0Ci0KLS8qIE5PVEU6IFRoaXMgZGF0YSBpcyBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXM7IG5vdCBhbGwgaGFyZHdhcmUgcHJvdmlkZXMgdGhpcwotICogICAgICAgaW5mb3JtYXRpb24gZm9yIGZyYW1lcyByZWNlaXZlZC4KLSAqICAgICAgIEZvciBpZWVlODAyMTFfcnhfbWd0LCB5b3UgbmVlZCB0byBzZXQgYXQgbGVhc3QgdGhlICdsZW4nIHBhcmFtZXRlci4KLSAqLwotc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyB7Ci0JdTMyIG1hY190aW1lOwotCXM4IHJzc2k7Ci0JdTggc2lnbmFsOwotCXU4IG5vaXNlOwotCXUxNiByYXRlOwkJLyogaW4gMTAwIGticHMgKi8KLQl1OCByZWNlaXZlZF9jaGFubmVsOwotCXU4IGNvbnRyb2w7Ci0JdTggbWFzazsKLQl1OCBmcmVxOwotCXUxNiBsZW47Ci0JdTY0IHRzZjsKLQl1MzIgYmVhY29uX3RpbWU7Ci19OwotCi0vKiBJRUVFIDgwMi4xMSByZXF1aXJlcyB0aGF0IFNUQSBzdXBwb3J0cyBjb25jdXJyZW50IHJlY2VwdGlvbiBvZiBhdCBsZWFzdAotICogdGhyZWUgZnJhZ21lbnRlZCBmcmFtZXMuIFRoaXMgZGVmaW5lIGNhbiBiZSBpbmNyZWFzZWQgdG8gc3VwcG9ydCBtb3JlCi0gKiBjb25jdXJyZW50IGZyYW1lcywgYnV0IGl0IHNob3VsZCBiZSBub3RlZCB0aGF0IGVhY2ggZW50cnkgY2FuIGNvbnN1bWUgYWJvdXQKLSAqIDIga0Igb2YgUkFNIGFuZCBpbmNyZWFzaW5nIGNhY2hlIHNpemUgd2lsbCBzbG93IGRvd24gZnJhbWUgcmVhc3NlbWJseS4gKi8KLSNkZWZpbmUgSUVFRTgwMjExX0ZSQUdfQ0FDSEVfTEVOIDQKLQotc3RydWN0IGllZWU4MDIxMV9mcmFnX2VudHJ5IHsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X2ZyYWdfdGltZTsKLQl1bnNpZ25lZCBpbnQgc2VxOwotCXVuc2lnbmVkIGludCBsYXN0X2ZyYWc7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1OCBzcmNfYWRkcltFVEhfQUxFTl07Ci0JdTggZHN0X2FkZHJbRVRIX0FMRU5dOwotfTsKLQotc3RydWN0IGllZWU4MDIxMV9zdGF0cyB7Ci0JdW5zaWduZWQgaW50IHR4X3VuaWNhc3RfZnJhbWVzOwotCXVuc2lnbmVkIGludCB0eF9tdWx0aWNhc3RfZnJhbWVzOwotCXVuc2lnbmVkIGludCB0eF9mcmFnbWVudHM7Ci0JdW5zaWduZWQgaW50IHR4X3VuaWNhc3Rfb2N0ZXRzOwotCXVuc2lnbmVkIGludCB0eF9tdWx0aWNhc3Rfb2N0ZXRzOwotCXVuc2lnbmVkIGludCB0eF9kZWZlcnJlZF90cmFuc21pc3Npb25zOwotCXVuc2lnbmVkIGludCB0eF9zaW5nbGVfcmV0cnlfZnJhbWVzOwotCXVuc2lnbmVkIGludCB0eF9tdWx0aXBsZV9yZXRyeV9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHR4X3JldHJ5X2xpbWl0X2V4Y2VlZGVkOwotCXVuc2lnbmVkIGludCB0eF9kaXNjYXJkczsKLQl1bnNpZ25lZCBpbnQgcnhfdW5pY2FzdF9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHJ4X211bHRpY2FzdF9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHJ4X2ZyYWdtZW50czsKLQl1bnNpZ25lZCBpbnQgcnhfdW5pY2FzdF9vY3RldHM7Ci0JdW5zaWduZWQgaW50IHJ4X211bHRpY2FzdF9vY3RldHM7Ci0JdW5zaWduZWQgaW50IHJ4X2Zjc19lcnJvcnM7Ci0JdW5zaWduZWQgaW50IHJ4X2Rpc2NhcmRzX25vX2J1ZmZlcjsKLQl1bnNpZ25lZCBpbnQgdHhfZGlzY2FyZHNfd3Jvbmdfc2E7Ci0JdW5zaWduZWQgaW50IHJ4X2Rpc2NhcmRzX3VuZGVjcnlwdGFibGU7Ci0JdW5zaWduZWQgaW50IHJ4X21lc3NhZ2VfaW5fbXNnX2ZyYWdtZW50czsKLQl1bnNpZ25lZCBpbnQgcnhfbWVzc2FnZV9pbl9iYWRfbXNnX2ZyYWdtZW50czsKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlOwotCi0jZGVmaW5lIFNFQ19LRVlfMQkJKDE8PDApCi0jZGVmaW5lIFNFQ19LRVlfMgkJKDE8PDEpCi0jZGVmaW5lIFNFQ19LRVlfMwkJKDE8PDIpCi0jZGVmaW5lIFNFQ19LRVlfNAkJKDE8PDMpCi0jZGVmaW5lIFNFQ19BQ1RJVkVfS0VZCQkoMTw8NCkKLSNkZWZpbmUgU0VDX0FVVEhfTU9ERQkJKDE8PDUpCi0jZGVmaW5lIFNFQ19VTklDQVNUX0dST1VQCSgxPDw2KQotI2RlZmluZSBTRUNfTEVWRUwJCSgxPDw3KQotI2RlZmluZSBTRUNfRU5BQkxFRAkJKDE8PDgpCi0jZGVmaW5lIFNFQ19FTkNSWVBUCQkoMTw8OSkKLQotI2RlZmluZSBTRUNfTEVWRUxfMAkJMAkvKiBOb25lICovCi0jZGVmaW5lIFNFQ19MRVZFTF8xCQkxCS8qIFdFUCA0MCBhbmQgMTA0IGJpdCAqLwotI2RlZmluZSBTRUNfTEVWRUxfMgkJMgkvKiBMZXZlbCAxICsgVEtJUCAqLwotI2RlZmluZSBTRUNfTEVWRUxfMl9DS0lQCTMJLyogTGV2ZWwgMSArIENLSVAgKi8KLSNkZWZpbmUgU0VDX0xFVkVMXzMJCTQJLyogTGV2ZWwgMiArIENDTVAgKi8KLQotI2RlZmluZSBTRUNfQUxHX05PTkUJCTAKLSNkZWZpbmUgU0VDX0FMR19XRVAJCTEKLSNkZWZpbmUgU0VDX0FMR19US0lQCQkyCi0jZGVmaW5lIFNFQ19BTEdfQ0NNUAkJMwotCi0jZGVmaW5lIFdFUF9LRVlTCQk0Ci0jZGVmaW5lIFdFUF9LRVlfTEVOCQkxMwotI2RlZmluZSBTQ01fS0VZX0xFTgkJMzIKLSNkZWZpbmUgU0NNX1RFTVBPUkFMX0tFWV9MRU5HVEgJMTYKLQotc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSB7Ci0JdTE2IGFjdGl2ZV9rZXk6MiwgZW5hYmxlZDoxLCB1bmljYXN0X3VzZXNfZ3JvdXA6MSwgZW5jcnlwdDoxOwotCXU4IGF1dGhfbW9kZTsKLQl1OCBlbmNvZGVfYWxnW1dFUF9LRVlTXTsKLQl1OCBrZXlfc2l6ZXNbV0VQX0tFWVNdOwotCXU4IGtleXNbV0VQX0tFWVNdW1NDTV9LRVlfTEVOXTsKLQl1OCBsZXZlbDsKLQl1MTYgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLQotIDgwMi4xMSBkYXRhIGZyYW1lIGZyb20gQVAKLQotICAgICAgLC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi1CeXRlcyB8ICAyICAgfCAgMiAgIHwgICAgNiAgICB8ICAgIDYgICAgfCAgICA2ICAgIHwgIDIgICB8IDAuLjIzMTIgfCAgIDQgIHwKLSAgICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tfAotRGVzYy4gfCBjdHJsIHwgZHVyYSB8ICBEQS9SQSAgfCAgIFRBICAgIHwgICAgU0EgICB8IFNlcXUgfCAgZnJhbWUgIHwgIGZjcyB8Ci0gICAgICB8ICAgICAgfCB0aW9uIHwgKEJTU0lEKSB8ICAgICAgICAgfCAgICAgICAgIHwgZW5jZSB8ICBkYXRhICAgfCAgICAgIHwKLSAgICAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJwotCi1Ub3RhbDogMjgtMjM0MCBieXRlcwotCi0qLwotCi0jZGVmaW5lIEJFQUNPTl9QUk9CRV9TU0lEX0lEX1BPU0lUSU9OIDEyCi0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzFhZGRyIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2hkcl8yYWRkciB7Ci0JX19sZTE2IGZyYW1lX2N0bDsKLQlfX2xlMTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IGFkZHIzW0VUSF9BTEVOXTsKLQlfX2xlMTYgc2VxX2N0bDsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IGFkZHIzW0VUSF9BTEVOXTsKLQlfX2xlMTYgc2VxX2N0bDsKLQl1OCBhZGRyNFtFVEhfQUxFTl07Ci0JdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcnFvcyB7Ci0JX19sZTE2IGZyYW1lX2N0bDsKLQlfX2xlMTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBhZGRyM1tFVEhfQUxFTl07Ci0JX19sZTE2IHNlcV9jdGw7Ci0JdTggcGF5bG9hZFswXTsKLQlfX2xlMTYgcW9zX2N0bDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCB7Ci0JdTggaWQ7Ci0JdTggbGVuOwotCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGF0YSB0eXBlcyB0aGF0IGNhbiBtYWtlIHVwIG1hbmFnZW1lbnQgcGFja2V0cwotICoKLQl1MTYgYXV0aF9hbGdvcml0aG07Ci0JdTE2IGF1dGhfc2VxdWVuY2U7Ci0JdTE2IGJlYWNvbl9pbnRlcnZhbDsKLQl1MTYgY2FwYWJpbGl0eTsKLQl1OCBjdXJyZW50X2FwW0VUSF9BTEVOXTsKLQl1MTYgbGlzdGVuX2ludGVydmFsOwotCXN0cnVjdCB7Ci0JCXUxNiBhc3NvY2lhdGlvbl9pZDoxNCwgcmVzZXJ2ZWQ6MjsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQl1MzIgdGltZV9zdGFtcFsyXTsKLQl1MTYgcmVhc29uOwotCXUxNiBzdGF0dXM7Ci0qLwotCi1zdHJ1Y3QgaWVlZTgwMjExX2F1dGggewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQlfX2xlMTYgYWxnb3JpdGhtOwotCV9fbGUxNiB0cmFuc2FjdGlvbjsKLQlfX2xlMTYgc3RhdHVzOwotCS8qIGNoYWxsZW5nZSAqLwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoIHsKLQl1OCBpZDsKLQl1OCBsZW47Ci0JdTggbW9kZTsKLQl1OCBjaGFubmVsOwotCXU4IGNvdW50OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfYWN0aW9uIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JdTggY2F0ZWdvcnk7Ci0JdTggYWN0aW9uOwotCXVuaW9uIHsKLQkJc3RydWN0IGllZWU4MDIxMV9hY3Rpb25fZXhjaGFuZ2UgewotCQkJdTggdG9rZW47Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Ci0JCX0gZXhjaGFuZ2U7Ci0JCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd2l0Y2ggY2hhbm5lbF9zd2l0Y2g7Ci0KLQl9IGZvcm1hdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JX19sZTE2IHJlYXNvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBBbGlhcyBkZWF1dGggZm9yIGRpc2Fzc29jICovCi0jZGVmaW5lIGllZWU4MDIxMV9kZWF1dGggaWVlZTgwMjExX2Rpc2Fzc29jCi0KLXN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVxdWVzdCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcyAqLwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JX19sZTMyIHRpbWVfc3RhbXBbMl07Ci0JX19sZTE2IGJlYWNvbl9pbnRlcnZhbDsKLQlfX2xlMTYgY2FwYWJpbGl0eTsKLQkvKiBTU0lELCBzdXBwb3J0ZWQgcmF0ZXMsIEZIIHBhcmFtcywgRFMgcGFyYW1zLAotCSAqIENGIHBhcmFtcywgSUJTUyBwYXJhbXMsIFRJTSAoaWYgYmVhY29uKSwgUlNOICovCi0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIEFsaWFzIGJlYWNvbiBmb3IgcHJvYmVfcmVzcG9uc2UgKi8KLSNkZWZpbmUgaWVlZTgwMjExX2JlYWNvbiBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UKLQotc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXF1ZXN0IHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JX19sZTE2IGNhcGFiaWxpdHk7Ci0JX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKLQkvKiBTU0lELCBzdXBwb3J0ZWQgcmF0ZXMsIFJTTiAqLwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3JlYXNzb2NfcmVxdWVzdCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCV9fbGUxNiBjYXBhYmlsaXR5OwotCV9fbGUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0JdTggY3VycmVudF9hcFtFVEhfQUxFTl07Ci0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQlfX2xlMTYgY2FwYWJpbGl0eTsKLQlfX2xlMTYgc3RhdHVzOwotCV9fbGUxNiBhaWQ7Ci0JLyogc3VwcG9ydGVkIHJhdGVzICovCi0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfdHhiIHsKLQl1OCBucl9mcmFnczsKLQl1OCBlbmNyeXB0ZWQ7Ci0JdTggcnRzX2luY2x1ZGVkOwotCXU4IHJlc2VydmVkOwotCXUxNiBmcmFnX3NpemU7Ci0JdTE2IHBheWxvYWRfc2l6ZTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ21lbnRzWzBdOwotfTsKLQotLyogU1dFRVAgVEFCTEUgRU5UUklFUyBOVU1CRVIgKi8KLSNkZWZpbmUgTUFYX1NXRUVQX1RBQl9FTlRSSUVTCQkgIDQyCi0jZGVmaW5lIE1BWF9TV0VFUF9UQUJfRU5UUklFU19QRVJfUEFDS0VUICA3Ci0vKiBNQVhfUkFURVNfTEVOR1RIIG5lZWRzIHRvIGJlIDEyLiAgVGhlIHNwZWMgc2F5cyA4LCBhbmQgbWFueSBBUHMKLSAqIG9ubHkgdXNlIDgsIGFuZCB0aGVuIHVzZSBleHRlbmRlZCByYXRlcyBmb3IgdGhlIHJlbWFpbmluZyBzdXBwb3J0ZWQKLSAqIHJhdGVzLiAgT3RoZXIgQVBzLCBob3dldmVyLCBzdGljayBhbGwgb2YgdGhlaXIgc3VwcG9ydGVkIHJhdGVzIG9uIHRoZQotICogbWFpbiByYXRlcyBpbmZvcm1hdGlvbiBlbGVtZW50Li4uICovCi0jZGVmaW5lIE1BWF9SQVRFU19MRU5HVEggICAgICAgICAgICAgICAgICAoKHU4KTEyKQotI2RlZmluZSBNQVhfUkFURVNfRVhfTEVOR1RIICAgICAgICAgICAgICAgKCh1OCkxNikKLSNkZWZpbmUgTUFYX05FVFdPUktfQ09VTlQgICAgICAgICAgICAgICAgICAxMjgKLQotI2RlZmluZSBDUkNfTEVOR1RIICAgICAgICAgICAgICAgICA0VQotCi0jZGVmaW5lIE1BWF9XUEFfSUVfTEVOIDY0Ci0KLSNkZWZpbmUgTkVUV09SS19IQVNfT0ZETSAgICAgICAoMTw8MSkKLSNkZWZpbmUgTkVUV09SS19IQVNfQ0NLICAgICAgICAoMTw8MikKLQotLyogUW9TIHN0cnVjdHVyZSAqLwotI2RlZmluZSBORVRXT1JLX0hBU19RT1NfUEFSQU1FVEVSUyAgICAgICgxPDwzKQotI2RlZmluZSBORVRXT1JLX0hBU19RT1NfSU5GT1JNQVRJT04gICAgICgxPDw0KQotI2RlZmluZSBORVRXT1JLX0hBU19RT1NfTUFTSyAgICAgICAgICAgIChORVRXT1JLX0hBU19RT1NfUEFSQU1FVEVSUyB8IFwKLQkJCQkJIE5FVFdPUktfSEFTX1FPU19JTkZPUk1BVElPTikKLQotLyogODAyLjExaCAqLwotI2RlZmluZSBORVRXT1JLX0hBU19QT1dFUl9DT05TVFJBSU5UICAgICgxPDw1KQotI2RlZmluZSBORVRXT1JLX0hBU19DU0EgICAgICAgICAgICAgICAgICgxPDw2KQotI2RlZmluZSBORVRXT1JLX0hBU19RVUlFVCAgICAgICAgICAgICAgICgxPDw3KQotI2RlZmluZSBORVRXT1JLX0hBU19JQlNTX0RGUyAgICAgICAgICAgICgxPDw4KQotI2RlZmluZSBORVRXT1JLX0hBU19UUENfUkVQT1JUICAgICAgICAgICgxPDw5KQotCi0jZGVmaW5lIE5FVFdPUktfSEFTX0VSUF9WQUxVRSAgICAgICAgICAgKDE8PDEwKQotCi0jZGVmaW5lIFFPU19RVUVVRV9OVU0gICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBRT1NfT1VJX0xFTiAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUU9TX09VSV9UWVBFICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFFPU19FTEVNRU5UX0lEICAgICAgICAgICAgICAgICAgMjIxCi0jZGVmaW5lIFFPU19PVUlfSU5GT19TVUJfVFlQRSAgICAgICAgICAgMAotI2RlZmluZSBRT1NfT1VJX1BBUkFNX1NVQl9UWVBFICAgICAgICAgIDEKLSNkZWZpbmUgUU9TX1ZFUlNJT05fMSAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFFPU19BSUZTTl9NSU5fVkFMVUUgICAgICAgICAgICAgMgotCi1zdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IHsKLQl1OCBlbGVtZW50SUQ7Ci0JdTggbGVuZ3RoOwotCXU4IHF1aVtRT1NfT1VJX0xFTl07Ci0JdTggcXVpX3R5cGU7Ci0JdTggcXVpX3N1YnR5cGU7Ci0JdTggdmVyc2lvbjsKLQl1OCBhY19pbmZvOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfcW9zX2FjX3BhcmFtZXRlciB7Ci0JdTggYWNpX2FpZnNuOwotCXU4IGVjd19taW5fbWF4OwotCV9fbGUxNiB0eF9vcF9saW1pdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJfaW5mbyB7Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudCBpbmZvX2VsZW1lbnQ7Ci0JdTggcmVzZXJ2ZWQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfYWNfcGFyYW1ldGVyIGFjX3BhcmFtc19yZWNvcmRbUU9TX1FVRVVFX05VTV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyB7Ci0JX19sZTE2IGN3X21pbltRT1NfUVVFVUVfTlVNXTsKLQlfX2xlMTYgY3dfbWF4W1FPU19RVUVVRV9OVU1dOwotCXU4IGFpZnNbUU9TX1FVRVVFX05VTV07Ci0JdTggZmxhZ1tRT1NfUVVFVUVfTlVNXTsKLQlfX2xlMTYgdHhfb3BfbGltaXRbUU9TX1FVRVVFX05VTV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9xb3NfZGF0YSB7Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCWludCBhY3RpdmU7Ci0JaW50IHN1cHBvcnRlZDsKLQl1OCBwYXJhbV9jb3VudDsKLQl1OCBvbGRfcGFyYW1fY291bnQ7Ci19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX3RpbV9wYXJhbWV0ZXJzIHsKLQl1OCB0aW1fY291bnQ7Ci0JdTggdGltX3BlcmlvZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotZW51bSB7CQkJCS8qIGllZWU4MDIxMV9iYXNpY19yZXBvcnQubWFwICovCi0JSUVFRTgwMjExX0JBU0lDX01BUF9CU1MgPSAoMSA8PCAwKSwKLQlJRUVFODAyMTFfQkFTSUNfTUFQX09GRE0gPSAoMSA8PCAxKSwKLQlJRUVFODAyMTFfQkFTSUNfTUFQX1VOSURFTlRJRklFRCA9ICgxIDw8IDIpLAotCUlFRUU4MDIxMV9CQVNJQ19NQVBfUkFEQVIgPSAoMSA8PCAzKSwKLQlJRUVFODAyMTFfQkFTSUNfTUFQX1VOTUVBU1VSRUQgPSAoMSA8PCA0KSwKLQkvKiBCaXRzIDUtNyBhcmUgcmVzZXJ2ZWQgKi8KLQotfTsKLXN0cnVjdCBpZWVlODAyMTFfYmFzaWNfcmVwb3J0IHsKLQl1OCBjaGFubmVsOwotCV9fbGU2NCBzdGFydF90aW1lOwotCV9fbGUxNiBkdXJhdGlvbjsKLQl1OCBtYXA7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotZW51bSB7CQkJCS8qIGllZWU4MDIxMV9tZWFzdXJlbWVudF9yZXF1ZXN0Lm1vZGUgKi8KLQkvKiBCaXQgMCBpcyByZXNlcnZlZCAqLwotCUlFRUU4MDIxMV9NRUFTVVJFTUVOVF9FTkFCTEUgPSAoMSA8PCAxKSwKLQlJRUVFODAyMTFfTUVBU1VSRU1FTlRfUkVRVUVTVCA9ICgxIDw8IDIpLAotCUlFRUU4MDIxMV9NRUFTVVJFTUVOVF9SRVBPUlQgPSAoMSA8PCAzKSwKLQkvKiBCaXRzIDQtNyBhcmUgcmVzZXJ2ZWQgKi8KLX07Ci0KLWVudW0gewotCUlFRUU4MDIxMV9SRVBPUlRfQkFTSUMgPSAwLAkvKiByZXF1aXJlZCAqLwotCUlFRUU4MDIxMV9SRVBPUlRfQ0NBID0gMSwJLyogb3B0aW9uYWwgKi8KLQlJRUVFODAyMTFfUkVQT1JUX1JQSSA9IDIsCS8qIG9wdGlvbmFsICovCi0JLyogMy0yNTUgcmVzZXJ2ZWQgKi8KLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcGFyYW1zIHsKLQl1OCBjaGFubmVsOwotCV9fbGU2NCBzdGFydF90aW1lOwotCV9fbGUxNiBkdXJhdGlvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3JlcXVlc3QgewotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGllOwotCXU4IHRva2VuOwotCXU4IG1vZGU7Ci0JdTggdHlwZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3BhcmFtcyBwYXJhbXNbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9yZXBvcnQgewotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGllOwotCXU4IHRva2VuOwotCXU4IG1vZGU7Ci0JdTggdHlwZTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfYmFzaWNfcmVwb3J0IGJhc2ljWzBdOwotCX0gdTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3RwY19yZXBvcnQgewotCXU4IHRyYW5zbWl0X3Bvd2VyOwotCXU4IGxpbmtfbWFyZ2luOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9tYXAgewotCXU4IGNoYW5uZWw7Ci0JdTggbWFwOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaWJzc19kZnMgewotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGllOwotCXU4IG93bmVyW0VUSF9BTEVOXTsKLQl1OCByZWNvdmVyeV9pbnRlcnZhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfbWFwIGNoYW5uZWxfbWFwWzBdOwotfTsKLQotc3RydWN0IGllZWU4MDIxMV9jc2EgewotCXU4IG1vZGU7Ci0JdTggY2hhbm5lbDsKLQl1OCBjb3VudDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3F1aWV0IHsKLQl1OCBjb3VudDsKLQl1OCBwZXJpb2Q7Ci0JdTggZHVyYXRpb247Ci0JdTggb2Zmc2V0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayB7Ci0JLyogVGhlc2UgZW50cmllcyBhcmUgdXNlZCB0byBpZGVudGlmeSBhIHVuaXF1ZSBuZXR3b3JrICovCi0JdTggYnNzaWRbRVRIX0FMRU5dOwotCXU4IGNoYW5uZWw7Ci0JLyogRW5zdXJlIG51bGwtdGVybWluYXRlZCBmb3IgYW55IGRlYnVnIG1zZ3MgKi8KLQl1OCBzc2lkW0lXX0VTU0lEX01BWF9TSVpFICsgMV07Ci0JdTggc3NpZF9sZW47Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhIHFvc19kYXRhOwotCi0JLyogVGhlc2UgYXJlIG5ldHdvcmsgc3RhdGlzdGljcyAqLwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgc3RhdHM7Ci0JdTE2IGNhcGFiaWxpdHk7Ci0JdTggcmF0ZXNbTUFYX1JBVEVTX0xFTkdUSF07Ci0JdTggcmF0ZXNfbGVuOwotCXU4IHJhdGVzX2V4W01BWF9SQVRFU19FWF9MRU5HVEhdOwotCXU4IHJhdGVzX2V4X2xlbjsKLQl1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbm5lZDsKLQl1OCBtb2RlOwotCXUzMiBmbGFnczsKLQl1MzIgbGFzdF9hc3NvY2lhdGU7Ci0JdTMyIHRpbWVfc3RhbXBbMl07Ci0JdTE2IGJlYWNvbl9pbnRlcnZhbDsKLQl1MTYgbGlzdGVuX2ludGVydmFsOwotCXUxNiBhdGltX3dpbmRvdzsKLQl1OCBlcnBfdmFsdWU7Ci0JdTggd3BhX2llW01BWF9XUEFfSUVfTEVOXTsKLQlzaXplX3Qgd3BhX2llX2xlbjsKLQl1OCByc25faWVbTUFYX1dQQV9JRV9MRU5dOwotCXNpemVfdCByc25faWVfbGVuOwotCXN0cnVjdCBpZWVlODAyMTFfdGltX3BhcmFtZXRlcnMgdGltOwotCi0JLyogODAyLjExaCBpbmZvICovCi0KLQkvKiBQb3dlciBDb25zdHJhaW50IC0gbWFuZGF0b3J5IGlmIHNwY3RybSBtZ210IHJlcXVpcmVkICovCi0JdTggcG93ZXJfY29uc3RyYWludDsKLQotCS8qIFRQQyBSZXBvcnQgLSBtYW5kYXRvcnkgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3RwY19yZXBvcnQgdHBjX3JlcG9ydDsKLQotCS8qIElCU1MgREZTIC0gbWFuZGF0b3J5IGlmIHNwY3RybSBtZ210IHJlcXVpcmVkIGFuZCBJQlNTCi0JICogTk9URTogVGhpcyBpcyB2YXJpYWJsZSBsZW5ndGggYW5kIHNvIG11c3QgYmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5ICovCi0Jc3RydWN0IGllZWU4MDIxMV9pYnNzX2RmcyAqaWJzc19kZnM7Ci0KLQkvKiBDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQgLSBvcHRpb25hbCBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCAqLwotCXN0cnVjdCBpZWVlODAyMTFfY3NhIGNzYTsKLQotCS8qIFF1aWV0IC0gb3B0aW9uYWwgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3F1aWV0IHF1aWV0OwotCi0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQotZW51bSBpZWVlODAyMTFfc3RhdGUgewotCUlFRUU4MDIxMV9VTklOSVRJQUxJWkVEID0gMCwKLQlJRUVFODAyMTFfSU5JVElBTElaRUQsCi0JSUVFRTgwMjExX0FTU09DSUFUSU5HLAotCUlFRUU4MDIxMV9BU1NPQ0lBVEVELAotCUlFRUU4MDIxMV9BVVRIRU5USUNBVElORywKLQlJRUVFODAyMTFfQVVUSEVOVElDQVRFRCwKLQlJRUVFODAyMTFfU0hVVERPV04KLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9NQVhfU0NBTl9BR0UgKDE1ICogSFopCi0jZGVmaW5lIERFRkFVTFRfRlRTIDIzNDYKLQotI2RlZmluZSBDRkdfSUVFRTgwMjExX1JFU0VSVkVfRkNTICgxPDwwKQotI2RlZmluZSBDRkdfSUVFRTgwMjExX0NPTVBVVEVfRkNTICgxPDwxKQotI2RlZmluZSBDRkdfSUVFRTgwMjExX1JUUyAoMTw8MikKLQotI2RlZmluZSBJRUVFODAyMTFfMjRHSFpfTUlOX0NIQU5ORUwgMQotI2RlZmluZSBJRUVFODAyMTFfMjRHSFpfTUFYX0NIQU5ORUwgMTQKLSNkZWZpbmUgSUVFRTgwMjExXzI0R0haX0NIQU5ORUxTIChJRUVFODAyMTFfMjRHSFpfTUFYX0NIQU5ORUwgLSBcCi0JCQkJICBJRUVFODAyMTFfMjRHSFpfTUlOX0NIQU5ORUwgKyAxKQotCi0jZGVmaW5lIElFRUU4MDIxMV81MkdIWl9NSU5fQ0hBTk5FTCAzNAotI2RlZmluZSBJRUVFODAyMTFfNTJHSFpfTUFYX0NIQU5ORUwgMTY1Ci0jZGVmaW5lIElFRUU4MDIxMV81MkdIWl9DSEFOTkVMUyAoSUVFRTgwMjExXzUyR0haX01BWF9DSEFOTkVMIC0gXAotCQkJCSAgSUVFRTgwMjExXzUyR0haX01JTl9DSEFOTkVMICsgMSkKLQotZW51bSB7Ci0JSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSA9ICgxIDw8IDApLAotCUlFRUU4MDIxMV9DSF84MDIxMUhfUlVMRVMgPSAoMSA8PCAxKSwKLQlJRUVFODAyMTFfQ0hfQl9PTkxZID0gKDEgPDwgMiksCi0JSUVFRTgwMjExX0NIX05PX0lCU1MgPSAoMSA8PCAzKSwKLQlJRUVFODAyMTFfQ0hfVU5JRk9STV9TUFJFQURJTkcgPSAoMSA8PCA0KSwKLQlJRUVFODAyMTFfQ0hfUkFEQVJfREVURUNUID0gKDEgPDwgNSksCi0JSUVFRTgwMjExX0NIX0lOVkFMSUQgPSAoMSA8PCA2KSwKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCB7Ci0JdTMyIGZyZXE7CS8qIGluIE1IeiAqLwotCXU4IGNoYW5uZWw7Ci0JdTggZmxhZ3M7Ci0JdTggbWF4X3Bvd2VyOwkvKiBpbiBkQm0gKi8KLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfZ2VvIHsKLQl1OCBuYW1lWzRdOwotCXU4IGJnX2NoYW5uZWxzOwotCXU4IGFfY2hhbm5lbHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGJnW0lFRUU4MDIxMV8yNEdIWl9DSEFOTkVMU107Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGFbSUVFRTgwMjExXzUyR0haX0NIQU5ORUxTXTsKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgc2VjOwotCi0JLyogQm9va2tlZXBpbmcgc3RydWN0dXJlcyAqLwotCXN0cnVjdCBpZWVlODAyMTFfc3RhdHMgaWVlZV9zdGF0czsKLQotCXN0cnVjdCBpZWVlODAyMTFfZ2VvIGdlbzsKLQotCS8qIFByb2JlIC8gQmVhY29uIG1hbmFnZW1lbnQgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG5ldHdvcmtfZnJlZV9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgbmV0d29ya19saXN0OwotCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29ya3M7Ci0JaW50IHNjYW5zOwotCWludCBzY2FuX2FnZTsKLQotCWludCBpd19tb2RlOwkJLyogb3BlcmF0aW5nIG1vZGUgKElXX01PREVfKikgKi8KLQlzdHJ1Y3QgaXdfc3B5X2RhdGEgc3B5X2RhdGE7CS8qIGl3c3B5IHN1cHBvcnQgKi8KLQotCXNwaW5sb2NrX3QgbG9jazsKLQotCWludCB0eF9oZWFkcm9vbTsJLyogU2V0IHRvIHNpemUgb2YgYW55IGFkZGl0aW9uYWwgcm9vbSBuZWVkZWQgYXQgZnJvbnQKLQkJCQkgKiBvZiBhbGxvY2F0ZWQgVHggU0tCcyAqLwotCXUzMiBjb25maWc7Ci0KLQkvKiBXRVAgYW5kIG90aGVyIGVuY3J5cHRpb24gcmVsYXRlZCBzZXR0aW5ncyBhdCB0aGUgZGV2aWNlIGxldmVsICovCi0JaW50IG9wZW5fd2VwOwkJLyogU2V0IHRvIDEgdG8gYWxsb3cgdW5lbmNyeXB0ZWQgZnJhbWVzICovCi0KLQlpbnQgcmVzZXRfb25fa2V5Y2hhbmdlOwkvKiBTZXQgdG8gMSBpZiB0aGUgSFcgbmVlZHMgdG8gYmUgcmVzZXQgb24KLQkJCQkgKiBXRVAga2V5IGNoYW5nZXMgKi8KLQotCS8qIElmIHRoZSBob3N0IHBlcmZvcm1zIHtlbixkZX1jcnlwdGlvbiwgdGhlbiBzZXQgdG8gMSAqLwotCWludCBob3N0X2VuY3J5cHQ7Ci0JaW50IGhvc3RfZW5jcnlwdF9tc2R1OwotCWludCBob3N0X2RlY3J5cHQ7Ci0JLyogaG9zdCBwZXJmb3JtcyBtdWx0aWNhc3QgZGVjcnlwdGlvbiAqLwotCWludCBob3N0X21jX2RlY3J5cHQ7Ci0KLQkvKiBob3N0IHNob3VsZCBzdHJpcCBJViBhbmQgSUNWIGZyb20gcHJvdGVjdGVkIGZyYW1lcyAqLwotCS8qIG1lYW5pbmdmdWwgb25seSB3aGVuIGhhcmR3YXJlIGRlY3J5cHRpb24gaXMgYmVpbmcgdXNlZCAqLwotCWludCBob3N0X3N0cmlwX2l2X2ljdjsKLQotCWludCBob3N0X29wZW5fZnJhZzsKLQlpbnQgaG9zdF9idWlsZF9pdjsKLQlpbnQgaWVlZTgwMl8xeDsJCS8qIGlzIElFRUUgODAyLjFYIHVzZWQgKi8KLQotCS8qIFdQQSBkYXRhICovCi0JaW50IHdwYV9lbmFibGVkOwotCWludCBkcm9wX3VuZW5jcnlwdGVkOwotCWludCBwcml2YWN5X2ludm9rZWQ7Ci0Jc2l6ZV90IHdwYV9pZV9sZW47Ci0JdTggKndwYV9pZTsKLQotCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9pbmZvIGNyeXB0X2luZm87Ci0KLQlpbnQgYmNyeF9zdGFfa2V5OwkvKiB1c2UgaW5kaXZpZHVhbCBrZXlzIHRvIG92ZXJyaWRlIGRlZmF1bHQga2V5cyBldmVuCi0JCQkJICogd2l0aCBSWCBvZiBicm9hZC9tdWx0aWNhc3QgZnJhbWVzICovCi0KLQkvKiBGcmFnbWVudGF0aW9uIHN0cnVjdHVyZXMgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgZnJhZ19jYWNoZVtJRUVFODAyMTFfRlJBR19DQUNIRV9MRU5dOwotCXVuc2lnbmVkIGludCBmcmFnX25leHRfaWR4OwotCXUxNiBmdHM7CQkvKiBGcmFnbWVudGF0aW9uIFRocmVzaG9sZCAqLwotCXUxNiBydHM7CQkvKiBSVFMgdGhyZXNob2xkICovCi0KLQkvKiBBc3NvY2lhdGlvbiBpbmZvICovCi0JdTggYnNzaWRbRVRIX0FMRU5dOwotCi0JZW51bSBpZWVlODAyMTFfc3RhdGUgc3RhdGU7Ci0KLQlpbnQgbW9kZTsJCS8qIEEsIEIsIEcgKi8KLQlpbnQgbW9kdWxhdGlvbjsJCS8qIENDSywgT0ZETSAqLwotCWludCBmcmVxX2JhbmQ7CQkvKiAyLjRHaHosIDUuMkdoeiwgTWl4ZWQgKi8KLQlpbnQgYWJnX3RydWU7CQkvKiBBQkcgZmxhZyAgICAgICAgICAgICAgKi8KLQotCWludCBwZXJmZWN0X3Jzc2k7Ci0JaW50IHdvcnN0X3Jzc2k7Ci0KLQl1MTYgcHJldl9zZXFfY3RsOwkvKiB1c2VkIHRvIGRyb3AgZHVwbGljYXRlIGZyYW1lcyAqLwotCi0JLyogQ2FsbGJhY2sgZnVuY3Rpb25zICovCi0Jdm9pZCAoKnNldF9zZWN1cml0eSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSAqIHNlYyk7Ci0JaW50ICgqaGFyZF9zdGFydF94bWl0KSAoc3RydWN0IGllZWU4MDIxMV90eGIgKiB0eGIsCi0JCQkJc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBwcmkpOwotCWludCAoKnJlc2V0X3BvcnQpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7Ci0JaW50ICgqaXNfcXVldWVfZnVsbCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBpbnQgcHJpKTsKLQotCWludCAoKmhhbmRsZV9tYW5hZ2VtZW50KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKiBuZXR3b3JrLCB1MTYgdHlwZSk7Ci0JaW50ICgqaXNfcW9zX2FjdGl2ZSkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwotCi0JLyogVHlwaWNhbCBTVEEgbWV0aG9kcyAqLwotCWludCAoKmhhbmRsZV9hdXRoKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9hdXRoICogYXV0aCk7Ci0JaW50ICgqaGFuZGxlX2RlYXV0aCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9kZWF1dGggKiBhdXRoKTsKLQlpbnQgKCpoYW5kbGVfYWN0aW9uKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2FjdGlvbiAqIGFjdGlvbiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKiBzdGF0cyk7Ci0JaW50ICgqaGFuZGxlX2Rpc2Fzc29jKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyAqIGFzc29jKTsKLQlpbnQgKCpoYW5kbGVfYmVhY29uKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2JlYWNvbiAqIGJlYWNvbiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqIG5ldHdvcmspOwotCWludCAoKmhhbmRsZV9wcm9iZV9yZXNwb25zZSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgKiByZXNwLAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqIG5ldHdvcmspOwotCWludCAoKmhhbmRsZV9wcm9iZV9yZXF1ZXN0KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3JlcXVlc3QgKiByZXEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICogc3RhdHMpOwotCWludCAoKmhhbmRsZV9hc3NvY19yZXNwb25zZSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgKiByZXNwLAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqIG5ldHdvcmspOwotCi0JLyogVHlwaWNhbCBBUCBtZXRob2RzICovCi0JaW50ICgqaGFuZGxlX2Fzc29jX3JlcXVlc3QpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7Ci0JaW50ICgqaGFuZGxlX3JlYXNzb2NfcmVxdWVzdCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3JlYXNzb2NfcmVxdWVzdCAqIHJlcSk7Ci0KLQkvKiBUaGlzIG11c3QgYmUgdGhlIGxhc3QgaXRlbSBzbyB0aGF0IGl0IHBvaW50cyB0byB0aGUgZGF0YQotCSAqIGFsbG9jYXRlZCBiZXlvbmQgdGhpcyBzdHJ1Y3R1cmUgYnkgYWxsb2NfaWVlZTgwMjExICovCi0JdTggcHJpdlswXTsKLX07Ci0KLSNkZWZpbmUgSUVFRV9BICAgICAgICAgICAgKDE8PDApCi0jZGVmaW5lIElFRUVfQiAgICAgICAgICAgICgxPDwxKQotI2RlZmluZSBJRUVFX0cgICAgICAgICAgICAoMTw8MikKLSNkZWZpbmUgSUVFRV9NT0RFX01BU0sgICAgKElFRUVfQXxJRUVFX0J8SUVFRV9HKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKmllZWU4MDIxMV9wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiluZXRkZXZfcHJpdihkZXYpKS0+cHJpdjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX3ZhbGlkX21vZGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJCSAgaW50IG1vZGUpCi17Ci0JLyoKLQkgKiBJdCBpcyBwb3NzaWJsZSBmb3IgYm90aCBhY2Nlc3MgcG9pbnRzIGFuZCBvdXIgZGV2aWNlIHRvIHN1cHBvcnQKLQkgKiBjb21iaW5hdGlvbnMgb2YgbW9kZXMsIHNvIGFzIGxvbmcgYXMgdGhlcmUgaXMgb25lIHZhbGlkIGNvbWJpbmF0aW9uCi0JICogb2YgYXAvZGV2aWNlIHN1cHBvcnRlZCBtb2RlcywgdGhlbiByZXR1cm4gc3VjY2VzcwotCSAqCi0JICovCi0JaWYgKChtb2RlICYgSUVFRV9BKSAmJgotCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pICYmCi0JICAgIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfNTJHSFpfQkFORCkpCi0JCXJldHVybiAxOwotCi0JaWYgKChtb2RlICYgSUVFRV9HKSAmJgotCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pICYmCi0JICAgIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfMjRHSFpfQkFORCkpCi0JCXJldHVybiAxOwotCi0JaWYgKChtb2RlICYgSUVFRV9CKSAmJgotCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTikgJiYKLQkgICAgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2dldF9oZHJsZW4odTE2IGZjKQotewotCWludCBoZHJsZW4gPSBJRUVFODAyMTFfM0FERFJfTEVOOwotCXUxNiBzdHlwZSA9IFdMQU5fRkNfR0VUX1NUWVBFKGZjKTsKLQotCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRShmYykpIHsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgotCQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSkKLQkJCWhkcmxlbiA9IElFRUU4MDIxMV80QUREUl9MRU47Ci0JCWlmIChzdHlwZSAmIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSkKLQkJCWhkcmxlbiArPSAyOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6Ci0JCXN3aXRjaCAoV0xBTl9GQ19HRVRfU1RZUEUoZmMpKSB7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNLOgotCQkJaGRybGVuID0gSUVFRTgwMjExXzFBRERSX0xFTjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaGRybGVuID0gSUVFRTgwMjExXzJBRERSX0xFTjsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBoZHJsZW47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggKmllZWU4MDIxMV9nZXRfcGF5bG9hZChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQotewotCXN3aXRjaCAoaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKLQljYXNlIElFRUU4MDIxMV8xQUREUl9MRU46Ci0JCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzFhZGRyICopaGRyKS0+cGF5bG9hZDsKLQljYXNlIElFRUU4MDIxMV8yQUREUl9MRU46Ci0JCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzJhZGRyICopaGRyKS0+cGF5bG9hZDsKLQljYXNlIElFRUU4MDIxMV8zQUREUl9MRU46Ci0JCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopaGRyKS0+cGF5bG9hZDsKLQljYXNlIElFRUU4MDIxMV80QUREUl9MRU46Ci0JCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopaGRyKS0+cGF5bG9hZDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19vZmRtX3JhdGUodTggcmF0ZSkKLXsKLQlzd2l0Y2ggKHJhdGUgJiB+SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykgewotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV82TUI6Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjoKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfY2NrX3JhdGUodTggcmF0ZSkKLXsKLQlzd2l0Y2ggKHJhdGUgJiB+SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykgewotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzFNQjoKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8yTUI6Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COgotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzExTUI6Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogaWVlZTgwMjExLmMgKi8KLWV4dGVybiB2b2lkIGZyZWVfaWVlZTgwMjExKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pZWVlODAyMTEoaW50IHNpemVvZl9wcml2KTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpOwotCi1leHRlcm4gdm9pZCBpZWVlODAyMTFfbmV0d29ya3NfYWdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV9zZXRfZW5jcnlwdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci0KLS8qIGllZWU4MDIxMV90eC5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwotCi0vKiBpZWVlODAyMTFfcnguYyAqLwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J4X2FueShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cyk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKLS8qIG1ha2Ugc3VyZSB0byBzZXQgc3RhdHMtPmxlbiAqLwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J4X21ndChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX25ldHdvcmtfcmVzZXQoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKTsKLQotLyogaWVlZTgwMjExX2dlby5jICovCi1leHRlcm4gY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmllZWU4MDIxMV9nZXRfZ2VvKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlCi0JCQkJCQkgICAgICppZWVlKTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3NldF9nZW8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8pOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV9pc192YWxpZF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgICAgIHU4IGNoYW5uZWwpOwotZXh0ZXJuIGludCBpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCQkgICAgICB1OCBjaGFubmVsKTsKLWV4dGVybiB1OCBpZWVlODAyMTFfZnJlcV90b19jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1MzIgZnJlcSk7Ci1leHRlcm4gdTggaWVlZTgwMjExX2dldF9jaGFubmVsX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgICAgIHU4IGNoYW5uZWwpOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqaWVlZTgwMjExX2dldF9jaGFubmVsKHN0cnVjdAotCQkJCQkJCSAgICAgaWVlZTgwMjExX2RldmljZQotCQkJCQkJCSAgICAgKmllZWUsIHU4IGNoYW5uZWwpOwotZXh0ZXJuIHUzMiBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSwKLQkJCQkgICAgICB1OCBjaGFubmVsKTsKLQotLyogaWVlZTgwMjExX3d4LmMgKi8KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICprZXkpOwotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X2VuY29kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfZW5jb2RlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqa2V5KTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X3NldF9lbmNvZGVleHQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2luY3JlbWVudF9zY2FucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKLXsKLQlpZWVlLT5zY2FucysrOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZ2V0X3NjYW5zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQotewotCXJldHVybiBpZWVlLT5zY2FuczsKLX0KLQotI2VuZGlmCQkJCS8qIElFRUU4MDIxMV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCmluZGV4IDc0MjQzMjMuLjI0MGNmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCkBAIC0xOSw3ICsxOSw3IEBACiAgIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAKICAgQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAgSmFtZXMgUC4gS2V0cmVub3MgPGlwdzIxMDAtYWRtaW5AbGludXguaW50ZWwuY29tPgorICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KICAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwogCiAgIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgYmFzZWQgb24gdGhlIHNhbXBsZV8qIGZpbGVzIHByb3ZpZGVkIGJ5IFdpcmVsZXNzCkBAIC0xODUsNyArMTg1LDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIGludCBkZWJ1ZyA9IDA7Ci1zdGF0aWMgaW50IG1vZGUgPSAwOworc3RhdGljIGludCBuZXR3b3JrX21vZGUgPSAwOwogc3RhdGljIGludCBjaGFubmVsID0gMDsKIHN0YXRpYyBpbnQgYXNzb2NpYXRlID0gMDsKIHN0YXRpYyBpbnQgZGlzYWJsZSA9IDA7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW0obW9kZSwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9uYW1lZChtb2RlLCBuZXR3b3JrX21vZGUsIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0oY2hhbm5lbCwgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbShhc3NvY2lhdGUsIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0oZGlzYWJsZSwgaW50LCAwNDQ0KTsKQEAgLTE2NzMsNyArMTY3Myw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvIGlwd19nZW9zW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxpYmlwd19nZW8gaXB3X2dlb3NbXSA9IHsKIAl7CQkJLyogUmVzdHJpY3RlZCAqLwogCSAiLS0tIiwKIAkgLmJnX2NoYW5uZWxzID0gMTQsCkBAIC0xNjk0LDcgKzE2OTQsNyBAQAogCiAJLyogQWdlIHNjYW4gbGlzdCBlbnRyaWVzIGZvdW5kIGJlZm9yZSBzdXNwZW5kICovCiAJaWYgKHByaXYtPnN1c3BlbmRfdGltZSkgewotCQlpZWVlODAyMTFfbmV0d29ya3NfYWdlKHByaXYtPmllZWUsIHByaXYtPnN1c3BlbmRfdGltZSk7CisJCWxpYmlwd19uZXR3b3Jrc19hZ2UocHJpdi0+aWVlZSwgcHJpdi0+c3VzcGVuZF90aW1lKTsKIAkJcHJpdi0+c3VzcGVuZF90aW1lID0gMDsKIAl9CiAKQEAgLTE3NTIsMTEgKzE3NTIsMTEgQEAKIAl9CiAKIAkvKiBJbml0aWFsaXplIHRoZSBnZW8gKi8KLQlpZiAoaWVlZTgwMjExX3NldF9nZW8ocHJpdi0+aWVlZSwgJmlwd19nZW9zWzBdKSkgeworCWlmIChsaWJpcHdfc2V0X2dlbyhwcml2LT5pZWVlLCAmaXB3X2dlb3NbMF0pKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIkNvdWxkIG5vdCBzZXQgZ2VvXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCXByaXYtPmllZWUtPmZyZXFfYmFuZCA9IElFRUU4MDIxMV8yNEdIWl9CQU5EOworCXByaXYtPmllZWUtPmZyZXFfYmFuZCA9IExJQklQV18yNEdIWl9CQU5EOwogCiAJbG9jayA9IExPQ0tfTk9ORTsKIAlpZiAoaXB3MjEwMF9zZXRfb3JkaW5hbChwcml2LCBJUFdfT1JEX1BFUlNfREJfTE9DSywgJmxvY2ssICZvcmRfbGVuKSkgewpAQCAtMTgxNyw3ICsxODE3LDcgQEAKIC8qIENhbGxlZCBieSByZWdpc3Rlcl9uZXRkZXYoKSAqLwogc3RhdGljIGludCBpcHcyMTAwX25ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJcmV0dXJuIGlwdzIxMDBfdXAocHJpdiwgMSk7CiB9CiAKQEAgLTIzNDAsOCArMjM0MCw4IEBACiAgKgogICogV2hlbiBwYWNrZXQgaXMgcHJvdmlkZWQgYnkgdGhlIGZpcm13YXJlLCBpdCBjb250YWlucyB0aGUgZm9sbG93aW5nOgogICoKLSAqIC4gIGllZWU4MDIxMV9oZHIKLSAqIC4gIGllZWU4MDIxMV9zbmFwX2hkcgorICogLiAgbGliaXB3X2hkcgorICogLiAgbGliaXB3X3NuYXBfaGRyCiAgKgogICogVGhlIHNpemUgb2YgdGhlIGNvbnN0cnVjdGVkIGV0aGVybmV0CiAgKgpAQCAtMjM5Niw3ICsyMzk2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgaXNyX3J4KHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBpLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKKwkJCSAgc3RydWN0IGxpYmlwd19yeF9zdGF0cyAqc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5ldF9kZXY7CiAJc3RydWN0IGlwdzIxMDBfc3RhdHVzICpzdGF0dXMgPSAmcHJpdi0+c3RhdHVzX3F1ZXVlLmRydltpXTsKQEAgLTI0MzUsMTMgKzI0MzUsMTMgQEAKIAogI2lmZGVmIElQVzIxMDBfUlhfREVCVUcKIAkvKiBNYWtlIGEgY29weSBvZiB0aGUgZnJhbWUgc28gd2UgY2FuIGR1bXAgaXQgdG8gdGhlIGxvZ3MgaWYKLQkgKiBpZWVlODAyMTFfcnggZmFpbHMgKi8KKwkgKiBsaWJpcHdfcnggZmFpbHMgKi8KIAlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHBhY2tldC0+c2tiLCBwYWNrZXRfZGF0YSwKIAkJCQkgIG1pbl90KHUzMiwgc3RhdHVzLT5mcmFtZV9zaXplLAogCQkJCQkgICAgIElQV19SWF9OSUNfQlVGRkVSX0xFTkdUSCkpOwogI2VuZGlmCiAKLQlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlLCBwYWNrZXQtPnNrYiwgc3RhdHMpKSB7CisJaWYgKCFsaWJpcHdfcngocHJpdi0+aWVlZSwgcGFja2V0LT5za2IsIHN0YXRzKSkgewogI2lmZGVmIElQVzIxMDBfUlhfREVCVUcKIAkJSVBXX0RFQlVHX0RST1AoIiVzOiBOb24gY29uc3VtZWQgcGFja2V0OlxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwpAQCAtMjQ0OSw3ICsyNDQ5LDcgQEAKICNlbmRpZgogCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCi0JCS8qIGllZWU4MDIxMV9yeCBmYWlsZWQsIHNvIGl0IGRpZG4ndCBmcmVlIHRoZSBTS0IgKi8KKwkJLyogbGliaXB3X3J4IGZhaWxlZCwgc28gaXQgZGlkbid0IGZyZWUgdGhlIFNLQiAqLwogCQlkZXZfa2ZyZWVfc2tiX2FueShwYWNrZXQtPnNrYik7CiAJCXBhY2tldC0+c2tiID0gTlVMTDsKIAl9CkBAIC0yNDcwLDcgKzI0NzAsNyBAQAogI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKIAogc3RhdGljIHZvaWQgaXNyX3J4X21vbml0b3Ioc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgaW50IGksCi0JCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQorCQkgICBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICpzdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKIAlzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMgKnN0YXR1cyA9ICZwcml2LT5zdGF0dXNfcXVldWUuZHJ2W2ldOwpAQCAtMjUyOCwxMCArMjUyOCwxMCBAQAogCiAJc2tiX3B1dChwYWNrZXQtPnNrYiwgc3RhdHVzLT5mcmFtZV9zaXplICsgc2l6ZW9mKHN0cnVjdCBpcHdfcnRfaGRyKSk7CiAKLQlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlLCBwYWNrZXQtPnNrYiwgc3RhdHMpKSB7CisJaWYgKCFsaWJpcHdfcngocHJpdi0+aWVlZSwgcGFja2V0LT5za2IsIHN0YXRzKSkgewogCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCi0JCS8qIGllZWU4MDIxMV9yeCBmYWlsZWQsIHNvIGl0IGRpZG4ndCBmcmVlIHRoZSBTS0IgKi8KKwkJLyogbGliaXB3X3J4IGZhaWxlZCwgc28gaXQgZGlkbid0IGZyZWUgdGhlIFNLQiAqLwogCQlkZXZfa2ZyZWVfc2tiX2FueShwYWNrZXQtPnNrYik7CiAJCXBhY2tldC0+c2tiID0gTlVMTDsKIAl9CkBAIC0yNjE1LDcgKzI2MTUsNyBAQAogCXUxNiBmcmFtZV90eXBlOwogCXUzMiByLCB3LCBpLCBzOwogCXN0cnVjdCBpcHcyMTAwX3J4ICp1OwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgc3RhdHMgPSB7CisJc3RydWN0IGxpYmlwd19yeF9zdGF0cyBzdGF0cyA9IHsKIAkJLm1hY190aW1lID0gamlmZmllcywKIAl9OwogCkBAIC0yNjYxLDggKzI2NjEsOCBAQAogCiAJCXN0YXRzLm1hc2sgPSAwOwogCQlpZiAoc3RhdHMucnNzaSAhPSAwKQotCQkJc3RhdHMubWFzayB8PSBJRUVFODAyMTFfU1RBVE1BU0tfUlNTSTsKLQkJc3RhdHMuZnJlcSA9IElFRUU4MDIxMV8yNEdIWl9CQU5EOworCQkJc3RhdHMubWFzayB8PSBMSUJJUFdfU1RBVE1BU0tfUlNTSTsKKwkJc3RhdHMuZnJlcSA9IExJQklQV18yNEdIWl9CQU5EOwogCiAJCUlQV19ERUJVR19SWCgiJXM6ICclcycgZnJhbWUgdHlwZSByZWNlaXZlZCAoJWQpLlxuIiwKIAkJCSAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgZnJhbWVfdHlwZXNbZnJhbWVfdHlwZV0sCkBAIC0yNjg2LDExICsyNjg2LDExIEBACiAJCQkJYnJlYWs7CiAJCQl9CiAjZW5kaWYKLQkJCWlmIChzdGF0cy5sZW4gPCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpKQorCQkJaWYgKHN0YXRzLmxlbiA8IHNpemVvZihzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkcikpCiAJCQkJYnJlYWs7CiAJCQlzd2l0Y2ggKFdMQU5fRkNfR0VUX1RZUEUobGUxNl90b19jcHUodS0+cnhfZGF0YS5oZWFkZXIuZnJhbWVfY3RsKSkpIHsKIAkJCWNhc2UgSUVFRTgwMjExX0ZUWVBFX01HTVQ6Ci0JCQkJaWVlZTgwMjExX3J4X21ndChwcml2LT5pZWVlLAorCQkJCWxpYmlwd19yeF9tZ3QocHJpdi0+aWVlZSwKIAkJCQkJCSAmdS0+cnhfZGF0YS5oZWFkZXIsICZzdGF0cyk7CiAJCQkJYnJlYWs7CiAKQEAgLTI4NDQsNyArMjg0NCw3IEBACiAKICNpZmRlZiBDT05GSUdfSVBXMjEwMF9ERUJVRwogCXsKLQkJaW50IGkgPSB0eHEtPm9sZGVzdDsKKwkJaSA9IHR4cS0+b2xkZXN0OwogCQlJUFdfREVCVUdfVFgoIlRYJWQgVj0lcCBQPSUwNFggVD0lMDRYIEw9JWRcbiIsIGksCiAJCQkgICAgICZ0eHEtPmRydltpXSwKIAkJCSAgICAgKHUzMikgKHR4cS0+bmljICsgaSAqIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9iZCkpLApAQCAtMjg4NCw3ICsyODg0LDcgQEAKIAkJCQkJIHRiZC0+YnVmX2xlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7CiAJCX0KIAotCQlpZWVlODAyMTFfdHhiX2ZyZWUocGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yik7CisJCWxpYmlwd190eGJfZnJlZShwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiKTsKIAkJcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4YiA9IE5VTEw7CiAKIAkJbGlzdF9hZGRfdGFpbChlbGVtZW50LCAmcHJpdi0+dHhfZnJlZV9saXN0KTsKQEAgLTMwMjgsNyArMzAyOCw3IEBACiAJaW50IG5leHQgPSB0eHEtPm5leHQ7CiAJaW50IGkgPSAwOwogCXN0cnVjdCBpcHcyMTAwX2RhdGFfaGVhZGVyICppcHdfaGRyOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZHI7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgKmhkcjsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmcHJpdi0+dHhfcGVuZF9saXN0KSkgewogCQkvKiBpZiB0aGVyZSBpc24ndCBlbm91Z2ggc3BhY2UgaW4gVEJEIHF1ZXVlLCB0aGVuCkBAIC0zMDYyLDcgKzMwNjIsNyBAQAogCQlwYWNrZXQtPmluZGV4ID0gdHhxLT5uZXh0OwogCiAJCWlwd19oZHIgPSBwYWNrZXQtPmluZm8uZF9zdHJ1Y3QuZGF0YTsKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+CisJCWhkciA9IChzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciAqKXBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPgogCQkgICAgZnJhZ21lbnRzWzBdLT5kYXRhOwogCiAJCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfSU5GUkEpIHsKQEAgLTMwODYsNyArMzA4Niw3IEBACiAJCWlmIChwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5ucl9mcmFncyA+IDEpCiAJCQlpcHdfaGRyLT5mcmFnbWVudF9zaXplID0KIAkJCSAgICBwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5mcmFnX3NpemUgLQotCQkJICAgIElFRUU4MDIxMV8zQUREUl9MRU47CisJCQkgICAgTElCSVBXXzNBRERSX0xFTjsKIAkJZWxzZQogCQkJaXB3X2hkci0+ZnJhZ21lbnRfc2l6ZSA9IDA7CiAKQEAgLTMxMTksMTMgKzMxMTksMTMgQEAKIAkJCQkgICAgSVBXX0JEX1NUQVRVU19UWF9GUkFNRV9OT1RfTEFTVF9GUkFHTUVOVDsKIAogCQkJdGJkLT5idWZfbGVuZ3RoID0gcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+Ci0JCQkgICAgZnJhZ21lbnRzW2ldLT5sZW4gLSBJRUVFODAyMTFfM0FERFJfTEVOOworCQkJICAgIGZyYWdtZW50c1tpXS0+bGVuIC0gTElCSVBXXzNBRERSX0xFTjsKIAogCQkJdGJkLT5ob3N0X2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAogCQkJCQkJCXBhY2tldC0+aW5mby5kX3N0cnVjdC4KIAkJCQkJCQl0eGItPmZyYWdtZW50c1tpXS0+CiAJCQkJCQkJZGF0YSArCi0JCQkJCQkJSUVFRTgwMjExXzNBRERSX0xFTiwKKwkJCQkJCQlMSUJJUFdfM0FERFJfTEVOLAogCQkJCQkJCXRiZC0+YnVmX2xlbmd0aCwKIAkJCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIApAQCAtMzMzMCwxMCArMzMzMCwxMCBAQAogCXJldHVybiBJUlFfTk9ORTsKIH0KIAotc3RhdGljIGludCBpcHcyMTAwX3R4KHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgIGludCBwcmkpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaXB3MjEwMF90eChzdHJ1Y3QgbGliaXB3X3R4YiAqdHhiLAorCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByaSkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwogCXN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCAqcGFja2V0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMzY5LDEyICszMzY5LDEyIEBACiAJaXB3MjEwMF90eF9zZW5kX2RhdGEocHJpdik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb3dfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKLSAgICAgIGZhaWxfdW5sb2NrOgorZmFpbF91bmxvY2s6CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvd19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogfQogCiBzdGF0aWMgaW50IGlwdzIxMDBfbXNnX2FsbG9jYXRlKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpCkBAIC00NDg4LDcgKzQ0ODgsNyBAQAogCQkvKiBXZSBzaW1wbHkgZHJvcCBhbnkgU0tCcyB0aGF0IGhhdmUgYmVlbiBxdWV1ZWQgZm9yCiAJCSAqIHRyYW5zbWl0ICovCiAJCWlmIChwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QudHhiKSB7Ci0JCQlpZWVlODAyMTFfdHhiX2ZyZWUocHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LgorCQkJbGliaXB3X3R4Yl9mcmVlKHByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC4KIAkJCQkJICAgdHhiKTsKIAkJCXByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC50eGIgPSBOVUxMOwogCQl9CkBAIC00NTI3LDcgKzQ1MjcsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IFRYX1BFTkRFRF9RVUVVRV9MRU5HVEg7IGkrKykgewogCQlpZiAocHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LnR4YikgewotCQkJaWVlZTgwMjExX3R4Yl9mcmVlKHByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC4KKwkJCWxpYmlwd190eGJfZnJlZShwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QuCiAJCQkJCSAgIHR4Yik7CiAJCQlwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QudHhiID0gTlVMTDsKIAkJfQpAQCAtNTU1OCw5ICs1NTU4LDkgQEAKIH0KIAogc3RhdGljIHZvaWQgc2hpbV9fc2V0X3NlY3VyaXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSAqc2VjKQorCQkJICAgICAgIHN0cnVjdCBsaWJpcHdfc2VjdXJpdHkgKnNlYykKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgaSwgZm9yY2VfdXBkYXRlID0gMDsKIAogCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CkBAIC01NzUzLDcgKzU3NTMsNyBAQAogICogbWV0aG9kIGFzIHdlbGwpIHRvIHRhbGsgdG8gdGhlIGZpcm13YXJlICovCiBzdGF0aWMgaW50IGlwdzIxMDBfc2V0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCWludCBlcnIgPSAwOwogCkBAIC01NzgxLDcgKzU3ODEsNyBAQAogCiBzdGF0aWMgaW50IGlwdzIxMDBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJSVBXX0RFQlVHX0lORk8oImRldi0+b3BlblxuIik7CiAKQEAgLTU3OTcsNyArNTc5Nyw3IEBACiAKIHN0YXRpYyBpbnQgaXB3MjEwMF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKIAlzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQgKnBhY2tldDsKQEAgLTU4MTgsNyArNTgxOCw3IEBACiAJCWxpc3RfZGVsKGVsZW1lbnQpOwogCQlERUNfU1RBVCgmcHJpdi0+dHhfcGVuZF9zdGF0KTsKIAotCQlpZWVlODAyMTFfdHhiX2ZyZWUocGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yik7CisJCWxpYmlwd190eGJfZnJlZShwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiKTsKIAkJcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4YiA9IE5VTEw7CiAKIAkJbGlzdF9hZGRfdGFpbChlbGVtZW50LCAmcHJpdi0+dHhfZnJlZV9saXN0KTsKQEAgLTU4MzYsNyArNTgzNiw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGlwdzIxMDBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIApAQCAtNTg2MSw4ICs1ODYxLDggQEAKIHN0YXRpYyBpbnQgaXB3MjEwMF93cGFfc2V0X2F1dGhfYWxncyhzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBpbnQgdmFsdWUpCiB7CiAKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWMgPSB7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOworCXN0cnVjdCBsaWJpcHdfc2VjdXJpdHkgc2VjID0gewogCQkuZmxhZ3MgPSBTRUNfQVVUSF9NT0RFLAogCX07CiAJaW50IHJldCA9IDA7CkBAIC01OTA3LDcgKzU5MDcsNyBAQAogc3RhdGljIHZvaWQgaXB3X2V0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAljaGFyIGZ3X3Zlcls2NF0sIHVjb2RlX3Zlcls2NF07CiAKIAlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSk7CkBAIC01OTI0LDcgKzU5MjQsNyBAQAogCiBzdGF0aWMgdTMyIGlwdzIxMDBfZXRodG9vbF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCXJldHVybiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpID8gMSA6IDA7CiB9CiAKQEAgLTYwMTEsOCArNjAxMSw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwdzIxMDBfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4JCT0gaXB3MjEwMF9vcGVuLAogCS5uZG9fc3RvcAkJPSBpcHcyMTAwX2Nsb3NlLAotCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfeG1pdCwKLQkubmRvX2NoYW5nZV9tdHUJCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CQk9IGxpYmlwd194bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBsaWJpcHdfY2hhbmdlX210dSwKIAkubmRvX2luaXQJCT0gaXB3MjEwMF9uZXRfaW5pdCwKIAkubmRvX3R4X3RpbWVvdXQJCT0gaXB3MjEwMF90eF90aW1lb3V0LAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gaXB3MjEwMF9zZXRfYWRkcmVzcywKQEAgLTYwMjksMTAgKzYwMjksMTAgQEAKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlkZXYgPSBhbGxvY19pZWVlODAyMTEoc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3ByaXYpKTsKKwlkZXYgPSBhbGxvY19pZWVlODAyMTEoc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3ByaXYpLCAwKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7Ci0JcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJcHJpdi0+aWVlZSA9IG5ldGRldl9wcml2KGRldik7CiAJcHJpdi0+cGNpX2RldiA9IHBjaV9kZXY7CiAJcHJpdi0+bmV0X2RldiA9IGRldjsKQEAgLTYwNDYsNyArNjA0Niw3IEBACiAJZGV2LT5uZXRkZXZfb3BzID0gJmlwdzIxMDBfbmV0ZGV2X29wczsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJmlwdzIxMDBfZXRodG9vbF9vcHM7CiAJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpcHcyMTAwX3d4X2hhbmRsZXJfZGVmOwotCXByaXYtPndpcmVsZXNzX2RhdGEuaWVlZTgwMjExID0gcHJpdi0+aWVlZTsKKwlwcml2LT53aXJlbGVzc19kYXRhLmxpYmlwdyA9IHByaXYtPmllZWU7CiAJZGV2LT53aXJlbGVzc19kYXRhID0gJnByaXYtPndpcmVsZXNzX2RhdGE7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDMgKiBIWjsKIAlkZXYtPmlycSA9IDA7CkBAIC02MDc2LDcgKzYwNzYsNyBAQAogCXByaXYtPmllZWUtPmllZWU4MDJfMXggPSAxOwogCiAJLyogU2V0IG1vZHVsZSBwYXJhbWV0ZXJzICovCi0Jc3dpdGNoIChtb2RlKSB7CisJc3dpdGNoIChuZXR3b3JrX21vZGUpIHsKIAljYXNlIDE6CiAJCXByaXYtPmllZWUtPml3X21vZGUgPSBJV19NT0RFX0FESE9DOwogCQlicmVhazsKQEAgLTYyMDIsNyArNjIwMiw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAlwY2lfc2V0X21hc3RlcihwY2lfZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgcHJpdik7CkBAIC02MzQyLDcgKzYzNDIsNyBAQAogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBjaV9kZXYtPmRldi5rb2JqLAogCQkJCSAgICZpcHcyMTAwX2F0dHJpYnV0ZV9ncm91cCk7CiAKLQkJZnJlZV9pZWVlODAyMTEoZGV2KTsKKwkJZnJlZV9pZWVlODAyMTEoZGV2LCAwKTsKIAkJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOwogCX0KIApAQCAtNjQwMCw3ICs2NDAwLDcgQEAKIAkJaWYgKGRldi0+YmFzZV9hZGRyKQogCQkJaW91bm1hcCgodm9pZCBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHIpOwogCi0JCWZyZWVfaWVlZTgwMjExKGRldik7CisJCWZyZWVfaWVlZTgwMjExKGRldiwgMCk7CiAJfQogCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lfZGV2KTsKQEAgLTY2MjksNyArNjYyOSw3IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkKIAkJc3RyY3B5KHdycXUtPm5hbWUsICJ1bmFzc29jaWF0ZWQiKTsKIAllbHNlCkBAIC02NjQzLDcgKzY2NDMsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJc3RydWN0IGl3X2ZyZXEgKmZ3cnEgPSAmd3JxdS0+ZnJlcTsKIAlpbnQgZXJyID0gMDsKIApAQCAtNjY5Myw3ICs2NjkzLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAl3cnF1LT5mcmVxLmUgPSAwOwogCkBAIC02NzE0LDcgKzY3MTQsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGVyciA9IDA7CiAKIAlJUFdfREVCVUdfV1goIlNFVCBNb2RlIC0+ICVkIFxuIiwgd3JxdS0+bW9kZSk7CkBAIC02NzU3LDcgKzY3NTcsNyBAQAogCSAqIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZS4gIE5vIGFjdGlvbiBsb2NrIHJlcXVpcmVkCiAJICovCiAKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAogCXdycXUtPm1vZGUgPSBwcml2LT5pZWVlLT5pd19tb2RlOwogCUlQV19ERUJVR19XWCgiR0VUIE1vZGUgLT4gJWRcbiIsIHdycXUtPm1vZGUpOwpAQCAtNjc5Miw3ICs2NzkyLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKilleHRyYTsKIAl1MTYgdmFsOwogCWludCBpLCBsZXZlbDsKQEAgLTY5MTMsNyArNjkxMyw3IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGVyciA9IDA7CiAKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhbnlbXSA9IHsKQEAgLTY5NjIsNyArNjk2Miw3IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJLyogSWYgd2UgYXJlIGFzc29jaWF0ZWQsIHRyeWluZyB0byBhc3NvY2lhdGUsIG9yIGhhdmUgYSBzdGF0aWNhbGx5CiAJICogY29uZmlndXJlZCBCU1NJRCB0aGVuIHJldHVybiB0aGF0OyBvdGhlcndpc2UgcmV0dXJuIEFOWSAqLwpAQCAtNjk4MCw3ICs2OTgwLDcgQEAKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWNoYXIgKmVzc2lkID0gIiI7CS8qIEFOWSAqLwogCWludCBsZW5ndGggPSAwOwogCWludCBlcnIgPSAwOwpAQCAtNzAzNSw3ICs3MDM1LDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKIAogCS8qIElmIHdlIGFyZSBhc3NvY2lhdGVkLCB0cnlpbmcgdG8gYXNzb2NpYXRlLCBvciBoYXZlIGEgc3RhdGljYWxseQpAQCAtNzA2Myw3ICs3MDYzLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKIAkJcmV0dXJuIC1FMkJJRzsKQEAgLTcwODUsNyArNzA4NSw3IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJd3JxdS0+ZGF0YS5sZW5ndGggPSBzdHJsZW4ocHJpdi0+bmljayk7CiAJbWVtY3B5KGV4dHJhLCBwcml2LT5uaWNrLCB3cnF1LT5kYXRhLmxlbmd0aCk7CkBAIC03MTAwLDcgKzcxMDAsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJdTMyIHRhcmdldF9yYXRlID0gd3JxdS0+Yml0cmF0ZS52YWx1ZTsKIAl1MzIgcmF0ZTsKIAlpbnQgZXJyID0gMDsKQEAgLTcxNDAsNyArNzE0MCw3IEBACiAJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgdmFsOwogCXVuc2lnbmVkIGludCBsZW4gPSBzaXplb2YodmFsKTsKIAlpbnQgZXJyID0gMDsKQEAgLTcxOTIsNyArNzE5Miw3IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IHZhbHVlLCBlcnI7CiAKIAkvKiBBdXRvIFJUUyBub3QgeWV0IHN1cHBvcnRlZCAqLwpAQCAtNzIzMSw3ICs3MjMxLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAl3cnF1LT5ydHMudmFsdWUgPSBwcml2LT5ydHNfdGhyZXNob2xkICYgflJUU19ESVNBQkxFRDsKIAl3cnF1LT5ydHMuZml4ZWQgPSAxOwkvKiBubyBhdXRvIHNlbGVjdCAqLwpAQCAtNzI0OCw3ICs3MjQ4LDcgQEAKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBlcnIgPSAwLCB2YWx1ZTsKIAkKIAlpZiAoaXB3X3JhZGlvX2tpbGxfc3cocHJpdiwgd3JxdS0+dHhwb3dlci5kaXNhYmxlZCkpCkBAIC03MjkzLDcgKzcyOTMsNyBAQAogCSAqIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZS4gIE5vIGFjdGlvbiBsb2NrIHJlcXVpcmVkCiAJICovCiAKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAogCXdycXUtPnR4cG93ZXIuZGlzYWJsZWQgPSAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykgPyAxIDogMDsKIApAQCAtNzMyMCw3ICs3MzIwLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAlpZiAoIXdycXUtPmZyYWcuZml4ZWQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzM1MCw3ICs3MzUwLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJd3JxdS0+ZnJhZy52YWx1ZSA9IHByaXYtPmZyYWdfdGhyZXNob2xkICYgfkZSQUdfRElTQUJMRUQ7CiAJd3JxdS0+ZnJhZy5maXhlZCA9IDA7CS8qIG5vIGF1dG8gc2VsZWN0ICovCiAJd3JxdS0+ZnJhZy5kaXNhYmxlZCA9IChwcml2LT5mcmFnX3RocmVzaG9sZCAmIEZSQUdfRElTQUJMRUQpID8gMSA6IDA7CkBAIC03MzY0LDcgKzczNjQsNyBAQAogCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9MSUZFVElNRSB8fCB3cnF1LT5yZXRyeS5kaXNhYmxlZCkKQEAgLTc0MTIsNyArNzQxMiw3IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJd3JxdS0+cmV0cnkuZGlzYWJsZWQgPSAwOwkvKiBjYW4ndCBiZSBkaXNhYmxlZCAqLwogCkBAIC03NDQwLDcgKzc0NDAsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGVyciA9IDA7CiAKIAltdXRleF9sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwpAQCAtNzQ3Miw4ICs3NDcyLDggQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfc2Nhbihwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJcmV0dXJuIGxpYmlwd193eF9nZXRfc2Nhbihwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CiB9CiAKIC8qCkBAIC03NDg3LDggKzc0ODcsOCBAQAogCSAqIE5vIGNoZWNrIG9mIFNUQVRVU19JTklUSUFMSVpFRCByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JcmV0dXJuIGllZWU4MDIxMV93eF9zZXRfZW5jb2RlKHByaXYtPmllZWUsIGluZm8sIHdycXUsIGtleSk7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJcmV0dXJuIGxpYmlwd193eF9zZXRfZW5jb2RlKHByaXYtPmllZWUsIGluZm8sIHdycXUsIGtleSk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3MjEwMF93eF9nZXRfZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC03NDk5LDE1ICs3NDk5LDE1IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXJldHVybiBpZWVlODAyMTFfd3hfZ2V0X2VuY29kZShwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBrZXkpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOworCXJldHVybiBsaWJpcHdfd3hfZ2V0X2VuY29kZShwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBrZXkpOwogfQogCiBzdGF0aWMgaW50IGlwdzIxMDBfd3hfc2V0X3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgZXJyID0gMDsKIAogCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CkBAIC03NTU2LDcgKzc1NTYsNyBAQAogCSAqIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZS4gIE5vIGFjdGlvbiBsb2NrIHJlcXVpcmVkCiAJICovCiAKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAogCWlmICghKHByaXYtPnBvd2VyX21vZGUgJiBJUFdfUE9XRVJfRU5BQkxFRCkpCiAJCXdycXUtPnBvd2VyLmRpc2FibGVkID0gMTsKQEAgLTc1ODAsOCArNzU4MCw4IEBACiAJCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOwogCXU4ICpidWY7CiAKIAlpZiAoIWllZWUtPndwYV9lbmFibGVkKQpAQCAtNzYxNSw4ICs3NjE1LDggQEAKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CiAKIAlpZiAoaWVlZS0+d3BhX2llX2xlbiA9PSAwIHx8IGllZWUtPndwYV9pZSA9PSBOVUxMKSB7CiAJCXdycXUtPmRhdGEubGVuZ3RoID0gMDsKQEAgLTc2MzcsOCArNzYzNyw4IEBACiAJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOwogCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CiAJc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKmNyeXB0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NjgyLDcgKzc2ODIsNyBAQAogCQkJICogY2FuIHVzZSB0aGlzIHRvIGRldGVybWluZSBpZiB0aGUgQ0FQX1BSSVZBQ1lfT04gYml0IHNob3VsZAogCQkJICogYmUgc2V0LgogCQkJICovCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHNlYyA9IHsKKwkJCXN0cnVjdCBsaWJpcHdfc2VjdXJpdHkgc2VjID0gewogCQkJCS5mbGFncyA9IFNFQ19FTkFCTEVELAogCQkJCS5lbmFibGVkID0gcGFyYW0tPnZhbHVlLAogCQkJfTsKQEAgLTc3MzAsOCArNzczMCw4IEBACiAJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOwogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKIAlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwogCWludCByZXQgPSAwOwpAQCAtNzc5Miw4ICs3NzkyLDggQEAKIAkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JcmV0dXJuIGllZWU4MDIxMV93eF9zZXRfZW5jb2RlZXh0KHByaXYtPmllZWUsIGluZm8sIHdycXUsIGV4dHJhKTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKKwlyZXR1cm4gbGliaXB3X3d4X3NldF9lbmNvZGVleHQocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwgZXh0cmEpOwogfQogCiAvKiBTSU9DR0lXRU5DT0RFRVhUICovCkBAIC03ODAxLDggKzc4MDEsOCBAQAogCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlyZXR1cm4gaWVlZTgwMjExX3d4X2dldF9lbmNvZGVleHQocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwgZXh0cmEpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOworCXJldHVybiBsaWJpcHdfd3hfZ2V0X2VuY29kZWV4dChwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CiB9CiAKIC8qIFNJT0NTSVdNTE1FICovCkBAIC03ODEwLDcgKzc4MTAsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKIAlfX2xlMTYgcmVhc29uOwogCkBAIC03ODQxLDcgKzc4NDEsNyBAQAogCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCAqcGFybXMgPSAoaW50ICopZXh0cmE7CiAJaW50IGVuYWJsZSA9IChwYXJtc1swXSA+IDApOwogCWludCBlcnIgPSAwOwpAQCAtNzg3Miw3ICs3ODcyLDcgQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfSU5JVElBTElaRUQpCiAJCXNjaGVkdWxlX3Jlc2V0KHByaXYpOwogCXJldHVybiAwOwpAQCAtNzg4NCw3ICs3ODg0LDcgQEAKIAkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGVyciA9IDAsIG1vZGUgPSAqKGludCAqKWV4dHJhOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKQEAgLTc5MTIsNyArNzkxMiw3IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBsZXZlbCA9IElQV19QT1dFUl9MRVZFTChwcml2LT5wb3dlcl9tb2RlKTsKIAlzMzIgdGltZW91dCwgcGVyaW9kOwogCkBAIC03OTQ4LDcgKzc5NDgsNyBAQAogCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGVyciwgbW9kZSA9ICooaW50ICopZXh0cmE7CiAKIAltdXRleF9sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwpAQCAtNzk4MSw3ICs3OTgxLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX0xPTkdfUFJFQU1CTEUpCiAJCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAibG9uZyAoMSkiKTsKQEAgLTc5OTYsNyArNzk5Niw3IEBACiAJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBlcnIsIG1vZGUgPSAqKGludCAqKWV4dHJhOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKQEAgLTgwMjgsNyArODAyOCw3IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJaWYgKHByaXYtPmNvbmZpZyAmIENGR19DUkNfQ0hFQ0spCiAJCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAiQ1JDIGNoZWNrZWQgKDEpIik7CkBAIC04MTc5LDEwICs4MTc5LDExIEBACiAJaW50IHJzc2lfcXVhbDsKIAlpbnQgdHhfcXVhbDsKIAlpbnQgYmVhY29uX3F1YWw7CisJaW50IHF1YWxpdHk7CiAKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzOwotCXUzMiByc3NpLCBxdWFsaXR5LCB0eF9yZXRyaWVzLCBtaXNzZWRfYmVhY29ucywgdHhfZmFpbHVyZXM7CisJdTMyIHJzc2ksIHR4X3JldHJpZXMsIG1pc3NlZF9iZWFjb25zLCB0eF9mYWlsdXJlczsKIAl1MzIgb3JkX2xlbiA9IHNpemVvZih1MzIpOwogCiAJaWYgKCFwcml2KQpAQCAtODI2NSw3ICs4MjY2LDggQEAKIAkJCWJlYWNvbl9xdWFsID0gKDIwIC0gbWlzc2VkX2JlYWNvbnMpICoKIAkJCSAgICAoUEVSRkVDVCAtIFZFUllfR09PRCkgLyAyMCArIFZFUllfR09PRDsKIAotCQlxdWFsaXR5ID0gbWluKGJlYWNvbl9xdWFsLCBtaW4odHhfcXVhbCwgcnNzaV9xdWFsKSk7CisJCXF1YWxpdHkgPSBtaW4odHhfcXVhbCwgcnNzaV9xdWFsKTsKKwkJcXVhbGl0eSA9IG1pbihiZWFjb25fcXVhbCwgcXVhbGl0eSk7CiAKICNpZmRlZiBDT05GSUdfSVBXMjEwMF9ERUJVRwogCQlpZiAoYmVhY29uX3F1YWwgPT0gcXVhbGl0eSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmgKaW5kZXggZjE4M2Q5NS4uMWVhYjBkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmgKQEAgLTE5LDcgKzE5LDcgQEAKICAgZmlsZSBjYWxsZWQgTElDRU5TRS4KIAogICBDb250YWN0IEluZm9ybWF0aW9uOgotICBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgogICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0jaW5jbHVkZSAiaWVlZTgwMjExLmgiCisjaW5jbHVkZSAibGliaXB3LmgiCiAKIHN0cnVjdCBpcHcyMTAwX3ByaXY7CiBzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQ7CkBAIC0zNDMsNyArMzQzLDcgQEAKIAkJc3RydWN0IHsJLyogREFUQSAqLwogCQkJc3RydWN0IGlwdzIxMDBfZGF0YV9oZWFkZXIgKmRhdGE7CiAJCQlkbWFfYWRkcl90IGRhdGFfcGh5czsKLQkJCXN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGI7CisJCQlzdHJ1Y3QgbGliaXB3X3R4YiAqdHhiOwogCQl9IGRfc3RydWN0OwogCX0gaW5mbzsKIAlpbnQgamlmZnlfc3RhcnQ7CkBAIC00OTIsNyArNDkyLDcgQEAKIAlpbnQgc3RvcF9oYW5nX2NoZWNrOwkvKiBTZXQgMSB3aGVuIHNodXR0aW5nIGRvd24gdG8ga2lsbCBoYW5nX2NoZWNrICovCiAJaW50IHN0b3BfcmZfa2lsbDsJLyogU2V0IDEgd2hlbiBzaHV0dGluZyBkb3duIHRvIGtpbGwgcmZfa2lsbCAqLwogCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWU7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWU7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBjb25maWc7CiAJdW5zaWduZWQgbG9uZyBjYXBhYmlsaXR5OwpAQCAtNzg4LDcgKzc4OCw3IEBACiAjZGVmaW5lIElQV19DQVJEX0RJU0FCTEVfUEhZX09GRl9DT01QTEVURV9XQUlUCSAgICAxMDAJLy8gMTAwIG1pbGxpCiAjZGVmaW5lIElQV19QUkVQQVJFX1BPV0VSX0RPV05fQ09NUExFVEVfV0FJVAkgICAgMTAwCS8vIDEwMCBtaWxsaQogCi0jZGVmaW5lIElQV19IRUFERVJfODAyXzExX1NJWkUJCSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpCisjZGVmaW5lIElQV19IRUFERVJfODAyXzExX1NJWkUJCSBzaXplb2Yoc3RydWN0IGxpYmlwd19oZHJfM2FkZHIpCiAjZGVmaW5lIElQV19NQVhfODAyMTFfUEFZTE9BRF9TSVpFICAgICAgICAgICAgICAyMzA0VQogI2RlZmluZSBJUFdfTUFYXzgwMl8xMV9QQVlMT0FEX0xFTkdUSAkJMjMxMgogI2RlZmluZSBJUFdfTUFYX0FDQ0VQVEFCTEVfVFhfRlJBTUVfTEVOR1RICTE1MzYKQEAgLTgwMywxMyArODAzLDEzIEBACiAJCUlQV184MDJfMTFfRkNTX0xFTkdUSCkKIAogI2RlZmluZSBJUFdfODAyXzExX1BBWUxPQURfT0ZGU0VUIFwKLSAgICAgICAgKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyBcCi0gICAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zbmFwX2hkcikpCisgICAgICAgIChzaXplb2Yoc3RydWN0IGxpYmlwd19oZHJfM2FkZHIpICsgXAorICAgICAgICAgc2l6ZW9mKHN0cnVjdCBsaWJpcHdfc25hcF9oZHIpKQogCiBzdHJ1Y3QgaXB3MjEwMF9yeCB7CiAJdW5pb24gewogCQl1bnNpZ25lZCBjaGFyIHBheWxvYWRbSVBXX1JYX05JQ19CVUZGRVJfTEVOR1RIXTsKLQkJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgaGVhZGVyOworCQlzdHJ1Y3QgbGliaXB3X2hkcl80YWRkciBoZWFkZXI7CiAJCXUzMiBzdGF0dXM7CiAJCXN0cnVjdCBpcHcyMTAwX25vdGlmaWNhdGlvbiBub3RpZmljYXRpb247CiAJCXN0cnVjdCBpcHcyMTAwX2NtZF9oZWFkZXIgY29tbWFuZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKaW5kZXggZjU5M2ZiYi4uOGQ1OGU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKQEAgLTI1LDcgKzI1LDcgQEAKICAgZmlsZSBjYWxsZWQgTElDRU5TRS4KIAogICBDb250YWN0IEluZm9ybWF0aW9uOgotICBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgogICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTgzLDEzICs4MywxMyBAQAogCiBzdGF0aWMgaW50IGNtZGxvZyA9IDA7CiBzdGF0aWMgaW50IGRlYnVnID0gMDsKLXN0YXRpYyBpbnQgY2hhbm5lbCA9IDA7Ci1zdGF0aWMgaW50IG1vZGUgPSAwOworc3RhdGljIGludCBkZWZhdWx0X2NoYW5uZWwgPSAwOworc3RhdGljIGludCBuZXR3b3JrX21vZGUgPSAwOwogCiBzdGF0aWMgdTMyIGlwd19kZWJ1Z19sZXZlbDsKIHN0YXRpYyBpbnQgYXNzb2NpYXRlOwogc3RhdGljIGludCBhdXRvX2NyZWF0ZSA9IDE7Ci1zdGF0aWMgaW50IGxlZCA9IDA7CitzdGF0aWMgaW50IGxlZF9zdXBwb3J0ID0gMDsKIHN0YXRpYyBpbnQgZGlzYWJsZSA9IDA7CiBzdGF0aWMgaW50IGJ0X2NvZXhpc3QgPSAwOwogc3RhdGljIGludCBod2NyeXB0byA9IDA7CkBAIC0xMDMsNiArMTAzLDI1IEBACiBzdGF0aWMgaW50IHJ0YXBfaWZhY2UgPSAwOyAgICAgLyogZGVmOiAwIC0tIGRvIG5vdCBjcmVhdGUgcnRhcCBpbnRlcmZhY2UgKi8KICNlbmRpZgogCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIGlwdzIyMDBfcmF0ZXNbXSA9IHsKKwl7IC5iaXRyYXRlID0gMTAgfSwKKwl7IC5iaXRyYXRlID0gMjAsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDU1LCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSAxMTAsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDYwIH0sCisJeyAuYml0cmF0ZSA9IDkwIH0sCisJeyAuYml0cmF0ZSA9IDEyMCB9LAorCXsgLmJpdHJhdGUgPSAxODAgfSwKKwl7IC5iaXRyYXRlID0gMjQwIH0sCisJeyAuYml0cmF0ZSA9IDM2MCB9LAorCXsgLmJpdHJhdGUgPSA0ODAgfSwKKwl7IC5iaXRyYXRlID0gNTQwIH0KK307CisKKyNkZWZpbmUgaXB3MjIwMF9hX3JhdGVzCQkoaXB3MjIwMF9yYXRlcyArIDQpCisjZGVmaW5lIGlwdzIyMDBfbnVtX2FfcmF0ZXMJOAorI2RlZmluZSBpcHcyMjAwX2JnX3JhdGVzCShpcHcyMjAwX3JhdGVzICsgMCkKKyNkZWZpbmUgaXB3MjIwMF9udW1fYmdfcmF0ZXMJMTIKIAogI2lmZGVmIENPTkZJR19JUFcyMjAwX1FPUwogc3RhdGljIGludCBxb3NfZW5hYmxlID0gMDsKQEAgLTExMSw3ICsxMzAsNyBAQAogc3RhdGljIGludCBidXJzdF9kdXJhdGlvbl9DQ0sgPSAwOwogc3RhdGljIGludCBidXJzdF9kdXJhdGlvbl9PRkRNID0gMDsKIAotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMgZGVmX3Fvc19wYXJhbWV0ZXJzX09GRE0gPSB7CitzdGF0aWMgc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycyBkZWZfcW9zX3BhcmFtZXRlcnNfT0ZETSA9IHsKIAl7UU9TX1RYMF9DV19NSU5fT0ZETSwgUU9TX1RYMV9DV19NSU5fT0ZETSwgUU9TX1RYMl9DV19NSU5fT0ZETSwKIAkgUU9TX1RYM19DV19NSU5fT0ZETX0sCiAJe1FPU19UWDBfQ1dfTUFYX09GRE0sIFFPU19UWDFfQ1dfTUFYX09GRE0sIFFPU19UWDJfQ1dfTUFYX09GRE0sCkBAIC0xMjIsNyArMTQxLDcgQEAKIAkgUU9TX1RYMl9UWE9QX0xJTUlUX09GRE0sIFFPU19UWDNfVFhPUF9MSU1JVF9PRkRNfQogfTsKIAotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMgZGVmX3Fvc19wYXJhbWV0ZXJzX0NDSyA9IHsKK3N0YXRpYyBzdHJ1Y3QgbGliaXB3X3Fvc19wYXJhbWV0ZXJzIGRlZl9xb3NfcGFyYW1ldGVyc19DQ0sgPSB7CiAJe1FPU19UWDBfQ1dfTUlOX0NDSywgUU9TX1RYMV9DV19NSU5fQ0NLLCBRT1NfVFgyX0NXX01JTl9DQ0ssCiAJIFFPU19UWDNfQ1dfTUlOX0NDS30sCiAJe1FPU19UWDBfQ1dfTUFYX0NDSywgUU9TX1RYMV9DV19NQVhfQ0NLLCBRT1NfVFgyX0NXX01BWF9DQ0ssCkBAIC0xMzMsNyArMTUyLDcgQEAKIAkgUU9TX1RYM19UWE9QX0xJTUlUX0NDS30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIGRlZl9wYXJhbWV0ZXJzX09GRE0gPSB7CitzdGF0aWMgc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycyBkZWZfcGFyYW1ldGVyc19PRkRNID0gewogCXtERUZfVFgwX0NXX01JTl9PRkRNLCBERUZfVFgxX0NXX01JTl9PRkRNLCBERUZfVFgyX0NXX01JTl9PRkRNLAogCSBERUZfVFgzX0NXX01JTl9PRkRNfSwKIAl7REVGX1RYMF9DV19NQVhfT0ZETSwgREVGX1RYMV9DV19NQVhfT0ZETSwgREVGX1RYMl9DV19NQVhfT0ZETSwKQEAgLTE0NCw3ICsxNjMsNyBAQAogCSBERUZfVFgyX1RYT1BfTElNSVRfT0ZETSwgREVGX1RYM19UWE9QX0xJTUlUX09GRE19CiB9OwogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyBkZWZfcGFyYW1ldGVyc19DQ0sgPSB7CitzdGF0aWMgc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycyBkZWZfcGFyYW1ldGVyc19DQ0sgPSB7CiAJe0RFRl9UWDBfQ1dfTUlOX0NDSywgREVGX1RYMV9DV19NSU5fQ0NLLCBERUZfVFgyX0NXX01JTl9DQ0ssCiAJIERFRl9UWDNfQ1dfTUlOX0NDS30sCiAJe0RFRl9UWDBfQ1dfTUFYX0NDSywgREVGX1RYMV9DV19NQVhfQ0NLLCBERUZfVFgyX0NXX01BWF9DQ0ssCkBAIC0xNjQsOSArMTgzLDkgQEAKIAogc3RhdGljIHUzMiBpcHdfcW9zX2dldF9idXJzdF9kdXJhdGlvbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpOwogCi1zdGF0aWMgaW50IGlwd19zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMKK3N0YXRpYyBpbnQgaXB3X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycwogCQkJCSAgICAgICAqcW9zX3BhcmFtKTsKLXN0YXRpYyBpbnQgaXB3X3NlbmRfcW9zX2luZm9fY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQKK3N0YXRpYyBpbnQgaXB3X3NlbmRfcW9zX2luZm9fY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBsaWJpcHdfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQKIAkJCQkgICAgICpxb3NfcGFyYW0pOwogI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX1FPUyAqLwogCkBAIC0xODMwLDcgKzE4NDksNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoaWVlZTgwMjExX2lzX3ZhbGlkX2NoYW5uZWwocHJpdi0+aWVlZSwgY2hhbm5lbCkpCisJCWlmIChsaWJpcHdfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBjaGFubmVsKSkKIAkJCXByaXYtPnNwZWVkX3NjYW5bcG9zKytdID0gY2hhbm5lbDsKIAkJZWxzZQogCQkJSVBXX1dBUk5JTkcoIlNraXBwaW5nIGludmFsaWQgY2hhbm5lbCByZXF1ZXN0OiAlZFxuIiwKQEAgLTE4ODIsNyArMTkwMSw3IEBACiAJCQkgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyA9IGllZWU4MDIxMV9nZXRfZ2VvKHByaXYtPmllZWUpOworCWNvbnN0IHN0cnVjdCBsaWJpcHdfZ2VvICpnZW8gPSBsaWJpcHdfZ2V0X2dlbyhwcml2LT5pZWVlKTsKIAlpbnQgbGVuID0gMCwgaTsKIAogCWxlbiA9IHNwcmludGYoJmJ1ZltsZW5dLApAQCAtMTg5MiwxNCArMTkxMSwxNCBAQAogCWZvciAoaSA9IDA7IGkgPCBnZW8tPmJnX2NoYW5uZWxzOyBpKyspIHsKIAkJbGVuICs9IHNwcmludGYoJmJ1ZltsZW5dLCAiJWQ6IEJTUyVzJXMsICVzLCBCYW5kICVzLlxuIiwKIAkJCSAgICAgICBnZW8tPmJnW2ldLmNoYW5uZWwsCi0JCQkgICAgICAgZ2VvLT5iZ1tpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9SQURBUl9ERVRFQ1QgPworCQkJICAgICAgIGdlby0+YmdbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfUkFEQVJfREVURUNUID8KIAkJCSAgICAgICAiIChyYWRhciBzcGVjdHJ1bSkiIDogIiIsCi0JCQkgICAgICAgKChnZW8tPmJnW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX05PX0lCU1MpIHx8Ci0JCQkJKGdlby0+YmdbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUkFEQVJfREVURUNUKSkKKwkJCSAgICAgICAoKGdlby0+YmdbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfTk9fSUJTUykgfHwKKwkJCQkoZ2VvLT5iZ1tpXS5mbGFncyAmIExJQklQV19DSF9SQURBUl9ERVRFQ1QpKQogCQkJICAgICAgID8gIiIgOiAiLCBJQlNTIiwKLQkJCSAgICAgICBnZW8tPmJnW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSA/CisJCQkgICAgICAgZ2VvLT5iZ1tpXS5mbGFncyAmIExJQklQV19DSF9QQVNTSVZFX09OTFkgPwogCQkJICAgICAgICJwYXNzaXZlIG9ubHkiIDogImFjdGl2ZS9wYXNzaXZlIiwKLQkJCSAgICAgICBnZW8tPmJnW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX0JfT05MWSA/CisJCQkgICAgICAgZ2VvLT5iZ1tpXS5mbGFncyAmIExJQklQV19DSF9CX09OTFkgPwogCQkJICAgICAgICJCIiA6ICJCL0ciKTsKIAl9CiAKQEAgLTE5MDksMTIgKzE5MjgsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZ2VvLT5hX2NoYW5uZWxzOyBpKyspIHsKIAkJbGVuICs9IHNwcmludGYoJmJ1ZltsZW5dLCAiJWQ6IEJTUyVzJXMsICVzLlxuIiwKIAkJCSAgICAgICBnZW8tPmFbaV0uY2hhbm5lbCwKLQkJCSAgICAgICBnZW8tPmFbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUkFEQVJfREVURUNUID8KKwkJCSAgICAgICBnZW8tPmFbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfUkFEQVJfREVURUNUID8KIAkJCSAgICAgICAiIChyYWRhciBzcGVjdHJ1bSkiIDogIiIsCi0JCQkgICAgICAgKChnZW8tPmFbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfTk9fSUJTUykgfHwKLQkJCQkoZ2VvLT5hW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX1JBREFSX0RFVEVDVCkpCisJCQkgICAgICAgKChnZW8tPmFbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfTk9fSUJTUykgfHwKKwkJCQkoZ2VvLT5hW2ldLmZsYWdzICYgTElCSVBXX0NIX1JBREFSX0RFVEVDVCkpCiAJCQkgICAgICAgPyAiIiA6ICIsIElCU1MiLAotCQkJICAgICAgIGdlby0+YVtpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkgPworCQkJICAgICAgIGdlby0+YVtpXS5mbGFncyAmIExJQklQV19DSF9QQVNTSVZFX09OTFkgPwogCQkJICAgICAgICJwYXNzaXZlIG9ubHkiIDogImFjdGl2ZS9wYXNzaXZlIik7CiAJfQogCkBAIC0yNDI5LDcgKzI0NDgsNyBAQAogCiBzdGF0aWMgaW50IGlwd19zZXRfdHhfcG93ZXIoc3RydWN0IGlwd19wcml2ICpwcml2KQogewotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8gPSBpZWVlODAyMTFfZ2V0X2dlbyhwcml2LT5pZWVlKTsKKwljb25zdCBzdHJ1Y3QgbGliaXB3X2dlbyAqZ2VvID0gbGliaXB3X2dldF9nZW8ocHJpdi0+aWVlZSk7CiAJc3RydWN0IGlwd190eF9wb3dlciB0eF9wb3dlcjsKIAlzOCBtYXhfcG93ZXI7CiAJaW50IGk7CkBAIC0yOTQyLDEyICsyOTYxLDEyIEBACiBzdGF0aWMgdm9pZCBpcHdfcmVtb3ZlX2N1cnJlbnRfbmV0d29yayhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudCwgKnNhZmU7Ci0Jc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKKwlzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmsgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfc2FmZShlbGVtZW50LCBzYWZlLCAmcHJpdi0+aWVlZS0+bmV0d29ya19saXN0KSB7Ci0JCW5ldHdvcmsgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yaywgbGlzdCk7CisJCW5ldHdvcmsgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBsaWJpcHdfbmV0d29yaywgbGlzdCk7CiAJCWlmICghbWVtY21wKG5ldHdvcmstPmJzc2lkLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pKSB7CiAJCQlsaXN0X2RlbChlbGVtZW50KTsKIAkJCWxpc3RfYWRkX3RhaWwoJm5ldHdvcmstPmxpc3QsCkBAIC0zNzY1LDcgKzM3ODQsNyBAQAogCQkJCSBsZTE2X3RvX2NwdShiZC0+dS5kYXRhLmNodW5rX2xlbltpXSksCiAJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlpZiAodHhxLT50eGJbdHhxLT5xLmxhc3RfdXNlZF0pIHsKLQkJCWllZWU4MDIxMV90eGJfZnJlZSh0eHEtPnR4Ylt0eHEtPnEubGFzdF91c2VkXSk7CisJCQlsaWJpcHdfdHhiX2ZyZWUodHhxLT50eGJbdHhxLT5xLmxhc3RfdXNlZF0pOwogCQkJdHhxLT50eGJbdHhxLT5xLmxhc3RfdXNlZF0gPSBOVUxMOwogCQl9CiAJfQpAQCAtNDA4NCw3ICs0MTAzLDcgQEAKIAkvKiBJZiBjdXJyZW50bHkgYXNzb2NpYXRlZCBpbiBCIG1vZGUsIHJlc3RyaWN0IHRoZSBtYXhpbXVtCiAJICogcmF0ZSBtYXRjaCB0byBCIHJhdGVzICovCiAJaWYgKHByaXYtPmFzc29jX3JlcXVlc3QuaWVlZV9tb2RlID09IElQV19CX01PREUpCi0JCW1hc2sgJj0gSUVFRTgwMjExX0NDS19SQVRFU19NQVNLOworCQltYXNrICY9IExJQklQV19DQ0tfUkFURVNfTUFTSzsKIAogCS8qIFRPRE86IFZlcmlmeSB0aGF0IHRoZSByYXRlIGlzIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCByYXRlcwogCSAqIGxpc3QuICovCkBAIC00MDkyLDI5ICs0MTExLDI5IEBACiAJd2hpbGUgKGkgJiYgIShtYXNrICYgaSkpCiAJCWkgPj49IDE7CiAJc3dpdGNoIChpKSB7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CX01BU0s6CisJY2FzZSBMSUJJUFdfQ0NLX1JBVEVfMU1CX01BU0s6CiAJCXJldHVybiAxMDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzJNQl9NQVNLOgorCWNhc2UgTElCSVBXX0NDS19SQVRFXzJNQl9NQVNLOgogCQlyZXR1cm4gMjAwMDAwMDsKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSzoKKwljYXNlIExJQklQV19DQ0tfUkFURV81TUJfTUFTSzoKIAkJcmV0dXJuIDU1MDAwMDA7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQl9NQVNLOgorCWNhc2UgTElCSVBXX09GRE1fUkFURV82TUJfTUFTSzoKIAkJcmV0dXJuIDYwMDAwMDA7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQl9NQVNLOgorCWNhc2UgTElCSVBXX09GRE1fUkFURV85TUJfTUFTSzoKIAkJcmV0dXJuIDkwMDAwMDA7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQl9NQVNLOgorCWNhc2UgTElCSVBXX0NDS19SQVRFXzExTUJfTUFTSzoKIAkJcmV0dXJuIDExMDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0s6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzEyTUJfTUFTSzoKIAkJcmV0dXJuIDEyMDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xOE1CX01BU0s6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzE4TUJfTUFTSzoKIAkJcmV0dXJuIDE4MDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0s6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzI0TUJfTUFTSzoKIAkJcmV0dXJuIDI0MDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8zNk1CX01BU0s6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzM2TUJfTUFTSzoKIAkJcmV0dXJuIDM2MDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV80OE1CX01BU0s6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzQ4TUJfTUFTSzoKIAkJcmV0dXJuIDQ4MDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV81NE1CX01BU0s6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzU0TUJfTUFTSzoKIAkJcmV0dXJuIDU0MDAwMDAwOwogCX0KIApAQCAtNDI3OSw5ICs0Mjk4LDEwIEBACiAJSVBXX0RFQlVHX1NUQVRTKCJTaWduYWwgbGV2ZWwgOiAlM2QlJSAoJWQgZEJtKVxuIiwKIAkJCXNpZ25hbF9xdWFsaXR5LCByc3NpKTsKIAotCXF1YWxpdHkgPSBtaW4oYmVhY29uX3F1YWxpdHksCi0JCSAgICAgIG1pbihyYXRlX3F1YWxpdHksCi0JCQkgIG1pbih0eF9xdWFsaXR5LCBtaW4ocnhfcXVhbGl0eSwgc2lnbmFsX3F1YWxpdHkpKSkpOworCXF1YWxpdHkgPSBtaW4ocnhfcXVhbGl0eSwgc2lnbmFsX3F1YWxpdHkpOworCXF1YWxpdHkgPSBtaW4odHhfcXVhbGl0eSwgcXVhbGl0eSk7CisJcXVhbGl0eSA9IG1pbihyYXRlX3F1YWxpdHksIHF1YWxpdHkpOworCXF1YWxpdHkgPSBtaW4oYmVhY29uX3F1YWxpdHksIHF1YWxpdHkpOwogCWlmIChxdWFsaXR5ID09IGJlYWNvbl9xdWFsaXR5KQogCQlJUFdfREVCVUdfU1RBVFMoIlF1YWxpdHkgKCVkJSUpOiBDbGFtcGVkIHRvIG1pc3NlZCBiZWFjb25zLlxuIiwKIAkJCQlxdWFsaXR5KTsKQEAgLTQ0MjUsNyArNDQ0NSw2IEBACiB7CiAJREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKIAl1MTYgc2l6ZSA9IGxlMTZfdG9fY3B1KG5vdGlmLT5zaXplKTsKLQlub3RpZi0+c2l6ZSA9IGxlMTZfdG9fY3B1KG5vdGlmLT5zaXplKTsKIAogCUlQV19ERUJVR19OT1RJRigidHlwZSA9ICVpICglZCBieXRlcylcbiIsIG5vdGlmLT5zdWJ0eXBlLCBzaXplKTsKIApAQCAtNDQ4MCwxMSArNDQ5OSwxMSBAQAogCQkJCQkgICAgID09IElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQKSkgewogCQkJCQkJaWYgKChzaXplb2YKIAkJCQkJCSAgICAgKHN0cnVjdAotCQkJCQkJICAgICAgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlKQorCQkJCQkJICAgICAgbGliaXB3X2Fzc29jX3Jlc3BvbnNlKQogCQkJCQkJICAgICA8PSBzaXplKQogCQkJCQkJICAgICYmIChzaXplIDw9IDIzMTQpKSB7CiAJCQkJCQkJc3RydWN0Ci0JCQkJCQkJaWVlZTgwMjExX3J4X3N0YXRzCisJCQkJCQkJbGliaXB3X3J4X3N0YXRzCiAJCQkJCQkJICAgIHN0YXRzID0gewogCQkJCQkJCQkubGVuID0gc2l6ZSAtIDEsCiAJCQkJCQkJfTsKQEAgLTQ0OTIsMTAgKzQ1MTEsMTAgQEAKIAkJCQkJCQlJUFdfREVCVUdfUU9TCiAJCQkJCQkJICAgICgiUW9TIEFzc29jaWF0ZSAiCiAJCQkJCQkJICAgICAic2l6ZSAlZFxuIiwgc2l6ZSk7Ci0JCQkJCQkJaWVlZTgwMjExX3J4X21ndChwcml2LT4KKwkJCQkJCQlsaWJpcHdfcnhfbWd0KHByaXYtPgogCQkJCQkJCQkJIGllZWUsCiAJCQkJCQkJCQkgKHN0cnVjdAotCQkJCQkJCQkJICBpZWVlODAyMTFfaGRyXzRhZGRyCisJCQkJCQkJCQkgIGxpYmlwd19oZHJfNGFkZHIKIAkJCQkJCQkJCSAgKikKIAkJCQkJCQkJCSAmbm90aWYtPnUucmF3LCAmc3RhdHMpOwogCQkJCQkJfQpAQCAtNDU1MSwxMSArNDU3MCwxMSBAQAogCQkJY2FzZSBDTUFTX0lOSVQ6ewogCQkJCQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FVVEgpIHsKIAkJCQkJCXN0cnVjdAotCQkJCQkJICAgIGllZWU4MDIxMV9hc3NvY19yZXNwb25zZQorCQkJCQkJICAgIGxpYmlwd19hc3NvY19yZXNwb25zZQogCQkJCQkJKnJlc3A7CiAJCQkJCQlyZXNwID0KIAkJCQkJCSAgICAoc3RydWN0Ci0JCQkJCQkgICAgIGllZWU4MDIxMV9hc3NvY19yZXNwb25zZQorCQkJCQkJICAgICBsaWJpcHdfYXNzb2NfcmVzcG9uc2UKIAkJCQkJCSAgICAgKikmbm90aWYtPnUucmF3OwogCQkJCQkJSVBXX0RFQlVHKElQV19ETF9OT1RJRiB8CiAJCQkJCQkJICBJUFdfRExfU1RBVEUgfApAQCAtNTI0MSwzMyArNTI2MCwzMyBAQAogCiBzdGF0aWMgaW50IGlwd19pc19yYXRlX2luX21hc2soc3RydWN0IGlwd19wcml2ICpwcml2LCBpbnQgaWVlZV9tb2RlLCB1OCByYXRlKQogewotCXJhdGUgJj0gfklFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0s7CisJcmF0ZSAmPSB+TElCSVBXX0JBU0lDX1JBVEVfTUFTSzsKIAlpZiAoaWVlZV9tb2RlID09IElFRUVfQSkgewogCQlzd2l0Y2ggKHJhdGUpIHsKLQkJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQjoKLQkJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSyA/CisJCWNhc2UgTElCSVBXX09GRE1fUkFURV82TUI6CisJCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIExJQklQV19PRkRNX1JBVEVfNk1CX01BU0sgPwogCQkJICAgIDEgOiAwOwotCQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COgotCQkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQl9NQVNLID8KKwkJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzlNQjoKKwkJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV85TUJfTUFTSyA/CiAJCQkgICAgMSA6IDA7Ci0JCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xMk1COgorCQljYXNlIExJQklQV19PRkRNX1JBVEVfMTJNQjoKIAkJCXJldHVybiBwcml2LT4KLQkJCSAgICByYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0sgPyAxIDogMDsKLQkJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI6CisJCQkgICAgcmF0ZXNfbWFzayAmIExJQklQV19PRkRNX1JBVEVfMTJNQl9NQVNLID8gMSA6IDA7CisJCWNhc2UgTElCSVBXX09GRE1fUkFURV8xOE1COgogCQkJcmV0dXJuIHByaXYtPgotCQkJICAgIHJhdGVzX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUJfTUFTSyA/IDEgOiAwOwotCQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjoKKwkJCSAgICByYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV8xOE1CX01BU0sgPyAxIDogMDsKKwkJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzI0TUI6CiAJCQlyZXR1cm4gcHJpdi0+Ci0JCQkgICAgcmF0ZXNfbWFzayAmIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQl9NQVNLID8gMSA6IDA7Ci0JCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8zNk1COgorCQkJICAgIHJhdGVzX21hc2sgJiBMSUJJUFdfT0ZETV9SQVRFXzI0TUJfTUFTSyA/IDEgOiAwOworCQljYXNlIExJQklQV19PRkRNX1JBVEVfMzZNQjoKIAkJCXJldHVybiBwcml2LT4KLQkJCSAgICByYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV8zNk1CX01BU0sgPyAxIDogMDsKLQkJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUI6CisJCQkgICAgcmF0ZXNfbWFzayAmIExJQklQV19PRkRNX1JBVEVfMzZNQl9NQVNLID8gMSA6IDA7CisJCWNhc2UgTElCSVBXX09GRE1fUkFURV80OE1COgogCQkJcmV0dXJuIHByaXYtPgotCQkJICAgIHJhdGVzX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUJfTUFTSyA/IDEgOiAwOwotCQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjoKKwkJCSAgICByYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV80OE1CX01BU0sgPyAxIDogMDsKKwkJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzU0TUI6CiAJCQlyZXR1cm4gcHJpdi0+Ci0JCQkgICAgcmF0ZXNfbWFzayAmIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLID8gMSA6IDA7CisJCQkgICAgcmF0ZXNfbWFzayAmIExJQklQV19PRkRNX1JBVEVfNTRNQl9NQVNLID8gMSA6IDA7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtNTI3NSwxNCArNTI5NCwxNCBAQAogCiAJLyogQiBhbmQgRyBtaXhlZCAqLwogCXN3aXRjaCAocmF0ZSkgewotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzFNQjoKLQkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CX01BU0sgPyAxIDogMDsKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8yTUI6Ci0JCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX0NDS19SQVRFXzJNQl9NQVNLID8gMSA6IDA7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COgotCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSyA/IDEgOiAwOwotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzExTUI6Ci0JCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX0NDS19SQVRFXzExTUJfTUFTSyA/IDEgOiAwOworCWNhc2UgTElCSVBXX0NDS19SQVRFXzFNQjoKKwkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBMSUJJUFdfQ0NLX1JBVEVfMU1CX01BU0sgPyAxIDogMDsKKwljYXNlIExJQklQV19DQ0tfUkFURV8yTUI6CisJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX0NDS19SQVRFXzJNQl9NQVNLID8gMSA6IDA7CisJY2FzZSBMSUJJUFdfQ0NLX1JBVEVfNU1COgorCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIExJQklQV19DQ0tfUkFURV81TUJfTUFTSyA/IDEgOiAwOworCWNhc2UgTElCSVBXX0NDS19SQVRFXzExTUI6CisJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX0NDS19SQVRFXzExTUJfTUFTSyA/IDEgOiAwOwogCX0KIAogCS8qIElmIHdlIGFyZSBsaW1pdGVkIHRvIEIgbW9kdWxhdGlvbnMsIGJhaWwgYXQgdGhpcyBwb2ludCAqLwpAQCAtNTI5MSwyOSArNTMxMCwyOSBAQAogCiAJLyogRyAqLwogCXN3aXRjaCAocmF0ZSkgewotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV82TUI6Ci0JCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSyA/IDEgOiAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV85TUI6Ci0JCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV85TUJfTUFTSyA/IDEgOiAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xMk1COgotCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQl9NQVNLID8gMSA6IDA7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI6Ci0JCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV8xOE1CX01BU0sgPyAxIDogMDsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjoKLQkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUJfTUFTSyA/IDEgOiAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8zNk1COgotCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQl9NQVNLID8gMSA6IDA7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUI6Ci0JCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV80OE1CX01BU0sgPyAxIDogMDsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjoKLQkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUJfTUFTSyA/IDEgOiAwOworCWNhc2UgTElCSVBXX09GRE1fUkFURV82TUI6CisJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV82TUJfTUFTSyA/IDEgOiAwOworCWNhc2UgTElCSVBXX09GRE1fUkFURV85TUI6CisJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV85TUJfTUFTSyA/IDEgOiAwOworCWNhc2UgTElCSVBXX09GRE1fUkFURV8xMk1COgorCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIExJQklQV19PRkRNX1JBVEVfMTJNQl9NQVNLID8gMSA6IDA7CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzE4TUI6CisJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV8xOE1CX01BU0sgPyAxIDogMDsKKwljYXNlIExJQklQV19PRkRNX1JBVEVfMjRNQjoKKwkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBMSUJJUFdfT0ZETV9SQVRFXzI0TUJfTUFTSyA/IDEgOiAwOworCWNhc2UgTElCSVBXX09GRE1fUkFURV8zNk1COgorCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIExJQklQV19PRkRNX1JBVEVfMzZNQl9NQVNLID8gMSA6IDA7CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzQ4TUI6CisJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV80OE1CX01BU0sgPyAxIDogMDsKKwljYXNlIExJQklQV19PRkRNX1JBVEVfNTRNQjoKKwkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBMSUJJUFdfT0ZETV9SQVRFXzU0TUJfTUFTSyA/IDEgOiAwOwogCX0KIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGlwd19jb21wYXRpYmxlX3JhdGVzKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmssCisJCQkJY29uc3Qgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrLAogCQkJCXN0cnVjdCBpcHdfc3VwcG9ydGVkX3JhdGVzICpyYXRlcykKIHsKIAlpbnQgbnVtX3JhdGVzLCBpOwpAQCAtNTMyNSw3ICs1MzQ0LDcgQEAKIAkJaWYgKCFpcHdfaXNfcmF0ZV9pbl9tYXNrKHByaXYsIG5ldHdvcmstPm1vZGUsCiAJCQkJCSBuZXR3b3JrLT5yYXRlc1tpXSkpIHsKIAotCQkJaWYgKG5ldHdvcmstPnJhdGVzW2ldICYgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykgeworCQkJaWYgKG5ldHdvcmstPnJhdGVzW2ldICYgTElCSVBXX0JBU0lDX1JBVEVfTUFTSykgewogCQkJCUlQV19ERUJVR19TQ0FOKCJBZGRpbmcgbWFza2VkIG1hbmRhdG9yeSAiCiAJCQkJCSAgICAgICAicmF0ZSAlMDJYXG4iLAogCQkJCQkgICAgICAgbmV0d29yay0+cmF0ZXNbaV0pOwpAQCAtNTM0Nyw3ICs1MzY2LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3JhdGVzOyBpKyspIHsKIAkJaWYgKCFpcHdfaXNfcmF0ZV9pbl9tYXNrKHByaXYsIG5ldHdvcmstPm1vZGUsCiAJCQkJCSBuZXR3b3JrLT5yYXRlc19leFtpXSkpIHsKLQkJCWlmIChuZXR3b3JrLT5yYXRlc19leFtpXSAmIElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0spIHsKKwkJCWlmIChuZXR3b3JrLT5yYXRlc19leFtpXSAmIExJQklQV19CQVNJQ19SQVRFX01BU0spIHsKIAkJCQlJUFdfREVCVUdfU0NBTigiQWRkaW5nIG1hc2tlZCBtYW5kYXRvcnkgIgogCQkJCQkgICAgICAgInJhdGUgJTAyWFxuIiwKIAkJCQkJICAgICAgIG5ldHdvcmstPnJhdGVzX2V4W2ldKTsKQEAgLTUzODMsNzMgKzU0MDIsNzMgQEAKIHN0YXRpYyB2b2lkIGlwd19hZGRfY2NrX3NjYW5fcmF0ZXMoc3RydWN0IGlwd19zdXBwb3J0ZWRfcmF0ZXMgKnJhdGVzLAogCQkJCSAgIHU4IG1vZHVsYXRpb24sIHUzMiByYXRlX21hc2spCiB7Ci0JdTggYmFzaWNfbWFzayA9IChJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OID09IG1vZHVsYXRpb24pID8KLQkgICAgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyA6IDA7CisJdTggYmFzaWNfbWFzayA9IChMSUJJUFdfT0ZETV9NT0RVTEFUSU9OID09IG1vZHVsYXRpb24pID8KKwkgICAgTElCSVBXX0JBU0lDX1JBVEVfTUFTSyA6IDA7CiAKLQlpZiAocmF0ZV9tYXNrICYgSUVFRTgwMjExX0NDS19SQVRFXzFNQl9NQVNLKQorCWlmIChyYXRlX21hc2sgJiBMSUJJUFdfQ0NLX1JBVEVfMU1CX01BU0spCiAJCXJhdGVzLT5zdXBwb3J0ZWRfcmF0ZXNbcmF0ZXMtPm51bV9yYXRlcysrXSA9Ci0JCSAgICBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKwkJICAgIExJQklQV19CQVNJQ19SQVRFX01BU0sgfCBMSUJJUFdfQ0NLX1JBVEVfMU1COwogCi0JaWYgKHJhdGVfbWFzayAmIElFRUU4MDIxMV9DQ0tfUkFURV8yTUJfTUFTSykKKwlpZiAocmF0ZV9tYXNrICYgTElCSVBXX0NDS19SQVRFXzJNQl9NQVNLKQogCQlyYXRlcy0+c3VwcG9ydGVkX3JhdGVzW3JhdGVzLT5udW1fcmF0ZXMrK10gPQotCQkgICAgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyB8IElFRUU4MDIxMV9DQ0tfUkFURV8yTUI7CisJCSAgICBMSUJJUFdfQkFTSUNfUkFURV9NQVNLIHwgTElCSVBXX0NDS19SQVRFXzJNQjsKIAotCWlmIChyYXRlX21hc2sgJiBJRUVFODAyMTFfQ0NLX1JBVEVfNU1CX01BU0spCisJaWYgKHJhdGVfbWFzayAmIExJQklQV19DQ0tfUkFURV81TUJfTUFTSykKIAkJcmF0ZXMtPnN1cHBvcnRlZF9yYXRlc1tyYXRlcy0+bnVtX3JhdGVzKytdID0gYmFzaWNfbWFzayB8Ci0JCSAgICBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COworCQkgICAgTElCSVBXX0NDS19SQVRFXzVNQjsKIAotCWlmIChyYXRlX21hc2sgJiBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQl9NQVNLKQorCWlmIChyYXRlX21hc2sgJiBMSUJJUFdfQ0NLX1JBVEVfMTFNQl9NQVNLKQogCQlyYXRlcy0+c3VwcG9ydGVkX3JhdGVzW3JhdGVzLT5udW1fcmF0ZXMrK10gPSBiYXNpY19tYXNrIHwKLQkJICAgIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COworCQkgICAgTElCSVBXX0NDS19SQVRFXzExTUI7CiB9CiAKIHN0YXRpYyB2b2lkIGlwd19hZGRfb2ZkbV9zY2FuX3JhdGVzKHN0cnVjdCBpcHdfc3VwcG9ydGVkX3JhdGVzICpyYXRlcywKIAkJCQkgICAgdTggbW9kdWxhdGlvbiwgdTMyIHJhdGVfbWFzaykKIHsKLQl1OCBiYXNpY19tYXNrID0gKElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04gPT0gbW9kdWxhdGlvbikgPwotCSAgICBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIDogMDsKKwl1OCBiYXNpY19tYXNrID0gKExJQklQV19PRkRNX01PRFVMQVRJT04gPT0gbW9kdWxhdGlvbikgPworCSAgICBMSUJJUFdfQkFTSUNfUkFURV9NQVNLIDogMDsKIAotCWlmIChyYXRlX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQl9NQVNLKQorCWlmIChyYXRlX21hc2sgJiBMSUJJUFdfT0ZETV9SQVRFXzZNQl9NQVNLKQogCQlyYXRlcy0+c3VwcG9ydGVkX3JhdGVzW3JhdGVzLT5udW1fcmF0ZXMrK10gPSBiYXNpY19tYXNrIHwKLQkJICAgIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1COworCQkgICAgTElCSVBXX09GRE1fUkFURV82TUI7CiAKLQlpZiAocmF0ZV9tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV85TUJfTUFTSykKKwlpZiAocmF0ZV9tYXNrICYgTElCSVBXX09GRE1fUkFURV85TUJfTUFTSykKIAkJcmF0ZXMtPnN1cHBvcnRlZF9yYXRlc1tyYXRlcy0+bnVtX3JhdGVzKytdID0KLQkJICAgIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COworCQkgICAgTElCSVBXX09GRE1fUkFURV85TUI7CiAKLQlpZiAocmF0ZV9tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0spCisJaWYgKHJhdGVfbWFzayAmIExJQklQV19PRkRNX1JBVEVfMTJNQl9NQVNLKQogCQlyYXRlcy0+c3VwcG9ydGVkX3JhdGVzW3JhdGVzLT5udW1fcmF0ZXMrK10gPSBiYXNpY19tYXNrIHwKLQkJICAgIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjsKKwkJICAgIExJQklQV19PRkRNX1JBVEVfMTJNQjsKIAotCWlmIChyYXRlX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUJfTUFTSykKKwlpZiAocmF0ZV9tYXNrICYgTElCSVBXX09GRE1fUkFURV8xOE1CX01BU0spCiAJCXJhdGVzLT5zdXBwb3J0ZWRfcmF0ZXNbcmF0ZXMtPm51bV9yYXRlcysrXSA9Ci0JCSAgICBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI7CisJCSAgICBMSUJJUFdfT0ZETV9SQVRFXzE4TUI7CiAKLQlpZiAocmF0ZV9tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0spCisJaWYgKHJhdGVfbWFzayAmIExJQklQV19PRkRNX1JBVEVfMjRNQl9NQVNLKQogCQlyYXRlcy0+c3VwcG9ydGVkX3JhdGVzW3JhdGVzLT5udW1fcmF0ZXMrK10gPSBiYXNpY19tYXNrIHwKLQkJICAgIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjsKKwkJICAgIExJQklQV19PRkRNX1JBVEVfMjRNQjsKIAotCWlmIChyYXRlX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUJfTUFTSykKKwlpZiAocmF0ZV9tYXNrICYgTElCSVBXX09GRE1fUkFURV8zNk1CX01BU0spCiAJCXJhdGVzLT5zdXBwb3J0ZWRfcmF0ZXNbcmF0ZXMtPm51bV9yYXRlcysrXSA9Ci0JCSAgICBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUI7CisJCSAgICBMSUJJUFdfT0ZETV9SQVRFXzM2TUI7CiAKLQlpZiAocmF0ZV9tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV80OE1CX01BU0spCisJaWYgKHJhdGVfbWFzayAmIExJQklQV19PRkRNX1JBVEVfNDhNQl9NQVNLKQogCQlyYXRlcy0+c3VwcG9ydGVkX3JhdGVzW3JhdGVzLT5udW1fcmF0ZXMrK10gPQotCQkgICAgSUVFRTgwMjExX09GRE1fUkFURV80OE1COworCQkgICAgTElCSVBXX09GRE1fUkFURV80OE1COwogCi0JaWYgKHJhdGVfbWFzayAmIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLKQorCWlmIChyYXRlX21hc2sgJiBMSUJJUFdfT0ZETV9SQVRFXzU0TUJfTUFTSykKIAkJcmF0ZXMtPnN1cHBvcnRlZF9yYXRlc1tyYXRlcy0+bnVtX3JhdGVzKytdID0KLQkJICAgIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjsKKwkJICAgIExJQklQV19PRkRNX1JBVEVfNTRNQjsKIH0KIAogc3RydWN0IGlwd19uZXR3b3JrX21hdGNoIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcms7CisJc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrOwogCXN0cnVjdCBpcHdfc3VwcG9ydGVkX3JhdGVzIHJhdGVzOwogfTsKIAogc3RhdGljIGludCBpcHdfZmluZF9hZGhvY19uZXR3b3JrKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCQkgIHN0cnVjdCBpcHdfbmV0d29ya19tYXRjaCAqbWF0Y2gsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmssCisJCQkJICBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmssCiAJCQkJICBpbnQgcm9hbWluZykKIHsKIAlzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyByYXRlczsKQEAgLTU1NzAsNyArNTU4OSw3IEBACiAJfQogCiAJLyogRmlsdGVyIG91dCBhbnkgaW5jb21wYXRpYmxlIGZyZXEgLyBtb2RlIGNvbWJpbmF0aW9ucyAqLwotCWlmICghaWVlZTgwMjExX2lzX3ZhbGlkX21vZGUocHJpdi0+aWVlZSwgbmV0d29yay0+bW9kZSkpIHsKKwlpZiAoIWxpYmlwd19pc192YWxpZF9tb2RlKHByaXYtPmllZWUsIG5ldHdvcmstPm1vZGUpKSB7CiAJCUlQV19ERUJVR19NRVJHRSgiTmV0d29yayAnJXMgKCVwTSknIGV4Y2x1ZGVkICIKIAkJCQkiYmVjYXVzZSBvZiBpbnZhbGlkIGZyZXF1ZW5jeS9tb2RlICIKIAkJCQkiY29tYmluYXRpb24uXG4iLApAQCAtNTYyMCw3ICs1NjM5LDcgQEAKIAlERUNMQVJFX1NTSURfQlVGKHNzaWQpOwogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXB3X3ByaXYsIG1lcmdlX25ldHdvcmtzKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmsgPSBOVUxMOworCXN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29yayA9IE5VTEw7CiAJc3RydWN0IGlwd19uZXR3b3JrX21hdGNoIG1hdGNoID0gewogCQkubmV0d29yayA9IHByaXYtPmFzc29jX25ldHdvcmsKIAl9OwpAQCAtNTY2Miw3ICs1NjgxLDcgQEAKIAogc3RhdGljIGludCBpcHdfYmVzdF9uZXR3b3JrKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgaXB3X25ldHdvcmtfbWF0Y2ggKm1hdGNoLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaywgaW50IHJvYW1pbmcpCisJCQkgICAgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrLCBpbnQgcm9hbWluZykKIHsKIAlzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyByYXRlczsKIAlERUNMQVJFX1NTSURfQlVGKHNzaWQpOwpAQCAtNTc5Niw3ICs1ODE1LDcgQEAKIAl9CiAKIAkvKiBGaWx0ZXIgb3V0IGFueSBpbmNvbXBhdGlibGUgZnJlcSAvIG1vZGUgY29tYmluYXRpb25zICovCi0JaWYgKCFpZWVlODAyMTFfaXNfdmFsaWRfbW9kZShwcml2LT5pZWVlLCBuZXR3b3JrLT5tb2RlKSkgeworCWlmICghbGliaXB3X2lzX3ZhbGlkX21vZGUocHJpdi0+aWVlZSwgbmV0d29yay0+bW9kZSkpIHsKIAkJSVBXX0RFQlVHX0FTU09DKCJOZXR3b3JrICclcyAoJXBNKScgZXhjbHVkZWQgIgogCQkJCSJiZWNhdXNlIG9mIGludmFsaWQgZnJlcXVlbmN5L21vZGUgIgogCQkJCSJjb21iaW5hdGlvbi5cbiIsCkBAIC01ODA3LDcgKzU4MjYsNyBAQAogCX0KIAogCS8qIEZpbHRlciBvdXQgaW52YWxpZCBjaGFubmVsIGluIGN1cnJlbnQgR0VPICovCi0JaWYgKCFpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBuZXR3b3JrLT5jaGFubmVsKSkgeworCWlmICghbGliaXB3X2lzX3ZhbGlkX2NoYW5uZWwocHJpdi0+aWVlZSwgbmV0d29yay0+Y2hhbm5lbCkpIHsKIAkJSVBXX0RFQlVHX0FTU09DKCJOZXR3b3JrICclcyAoJXBNKScgZXhjbHVkZWQgIgogCQkJCSJiZWNhdXNlIG9mIGludmFsaWQgY2hhbm5lbCBpbiBjdXJyZW50IEdFT1xuIiwKIAkJCQlwcmludF9zc2lkKHNzaWQsIG5ldHdvcmstPnNzaWQsCkBAIC01ODUzLDkgKzU4NzIsOSBAQAogfQogCiBzdGF0aWMgdm9pZCBpcHdfYWRob2NfY3JlYXRlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQorCQkJICAgICBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmspCiB7Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyA9IGllZWU4MDIxMV9nZXRfZ2VvKHByaXYtPmllZWUpOworCWNvbnN0IHN0cnVjdCBsaWJpcHdfZ2VvICpnZW8gPSBsaWJpcHdfZ2V0X2dlbyhwcml2LT5pZWVlKTsKIAlpbnQgaTsKIAogCS8qCkBAIC01ODcwLDI1ICs1ODg5LDI1IEBACiAJICogRlcgZmF0YWwgZXJyb3IuCiAJICoKIAkgKi8KLQlzd2l0Y2ggKGllZWU4MDIxMV9pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpKSB7Ci0JY2FzZSBJRUVFODAyMTFfNTJHSFpfQkFORDoKKwlzd2l0Y2ggKGxpYmlwd19pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpKSB7CisJY2FzZSBMSUJJUFdfNTJHSFpfQkFORDoKIAkJbmV0d29yay0+bW9kZSA9IElFRUVfQTsKLQkJaSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpOworCQlpID0gbGliaXB3X2NoYW5uZWxfdG9faW5kZXgocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCk7CiAJCUJVR19PTihpID09IC0xKTsKLQkJaWYgKGdlby0+YVtpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkpIHsKKwkJaWYgKGdlby0+YVtpXS5mbGFncyAmIExJQklQV19DSF9QQVNTSVZFX09OTFkpIHsKIAkJCUlQV19XQVJOSU5HKCJPdmVycmlkaW5nIGludmFsaWQgY2hhbm5lbFxuIik7CiAJCQlwcml2LT5jaGFubmVsID0gZ2VvLT5hWzBdLmNoYW5uZWw7CiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIElFRUU4MDIxMV8yNEdIWl9CQU5EOgorCWNhc2UgTElCSVBXXzI0R0haX0JBTkQ6CiAJCWlmIChwcml2LT5pZWVlLT5tb2RlICYgSUVFRV9HKQogCQkJbmV0d29yay0+bW9kZSA9IElFRUVfRzsKIAkJZWxzZQogCQkJbmV0d29yay0+bW9kZSA9IElFRUVfQjsKLQkJaSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpOworCQlpID0gbGliaXB3X2NoYW5uZWxfdG9faW5kZXgocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCk7CiAJCUJVR19PTihpID09IC0xKTsKLQkJaWYgKGdlby0+YmdbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZKSB7CisJCWlmIChnZW8tPmJnW2ldLmZsYWdzICYgTElCSVBXX0NIX1BBU1NJVkVfT05MWSkgewogCQkJSVBXX1dBUk5JTkcoIk92ZXJyaWRpbmcgaW52YWxpZCBjaGFubmVsXG4iKTsKIAkJCXByaXYtPmNoYW5uZWwgPSBnZW8tPmJnWzBdLmNoYW5uZWw7CiAJCX0KQEAgLTYxMTUsNzAgKzYxMzQsNzEgQEAKIHN0YXRpYyB2b2lkIGlwd19zZXRfZml4ZWRfcmF0ZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGludCBtb2RlKQogewogCS8qIFRPRE86IFZlcmlmeSB0aGF0IHRoaXMgd29ya3MuLi4gKi8KLQlzdHJ1Y3QgaXB3X2ZpeGVkX3JhdGUgZnIgPSB7Ci0JCS50eF9yYXRlcyA9IHByaXYtPnJhdGVzX21hc2sKLQl9OworCXN0cnVjdCBpcHdfZml4ZWRfcmF0ZSBmcjsKIAl1MzIgcmVnOwogCXUxNiBtYXNrID0gMDsKKwl1MTYgbmV3X3R4X3JhdGVzID0gcHJpdi0+cmF0ZXNfbWFzazsKIAogCS8qIElkZW50aWZ5ICdjdXJyZW50IEZXIGJhbmQnIGFuZCBtYXRjaCBpdCB3aXRoIHRoZSBmaXhlZAogCSAqIFR4IHJhdGVzICovCiAKIAlzd2l0Y2ggKHByaXYtPmllZWUtPmZyZXFfYmFuZCkgewotCWNhc2UgSUVFRTgwMjExXzUyR0haX0JBTkQ6CS8qIEEgb25seSAqLworCWNhc2UgTElCSVBXXzUyR0haX0JBTkQ6CS8qIEEgb25seSAqLwogCQkvKiBJRUVFX0EgKi8KLQkJaWYgKHByaXYtPnJhdGVzX21hc2sgJiB+SUVFRTgwMjExX09GRE1fUkFURVNfTUFTSykgeworCQlpZiAocHJpdi0+cmF0ZXNfbWFzayAmIH5MSUJJUFdfT0ZETV9SQVRFU19NQVNLKSB7CiAJCQkvKiBJbnZhbGlkIGZpeGVkIHJhdGUgbWFzayAqLwogCQkJSVBXX0RFQlVHX1dYCiAJCQkgICAgKCJpbnZhbGlkIGZpeGVkIHJhdGUgbWFzayBpbiBpcHdfc2V0X2ZpeGVkX3JhdGVcbiIpOwotCQkJZnIudHhfcmF0ZXMgPSAwOworCQkJbmV3X3R4X3JhdGVzID0gMDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJZnIudHhfcmF0ZXMgPj49IElFRUU4MDIxMV9PRkRNX1NISUZUX01BU0tfQTsKKwkJbmV3X3R4X3JhdGVzID4+PSBMSUJJUFdfT0ZETV9TSElGVF9NQVNLX0E7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoJCS8qIDIuNEdoeiBvciBNaXhlZCAqLwogCQkvKiBJRUVFX0IgKi8KIAkJaWYgKG1vZGUgPT0gSUVFRV9CKSB7Ci0JCQlpZiAoZnIudHhfcmF0ZXMgJiB+SUVFRTgwMjExX0NDS19SQVRFU19NQVNLKSB7CisJCQlpZiAobmV3X3R4X3JhdGVzICYgfkxJQklQV19DQ0tfUkFURVNfTUFTSykgewogCQkJCS8qIEludmFsaWQgZml4ZWQgcmF0ZSBtYXNrICovCiAJCQkJSVBXX0RFQlVHX1dYCiAJCQkJICAgICgiaW52YWxpZCBmaXhlZCByYXRlIG1hc2sgaW4gaXB3X3NldF9maXhlZF9yYXRlXG4iKTsKLQkJCQlmci50eF9yYXRlcyA9IDA7CisJCQkJbmV3X3R4X3JhdGVzID0gMDsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogSUVFRV9HICovCi0JCWlmIChmci50eF9yYXRlcyAmIH4oSUVFRTgwMjExX0NDS19SQVRFU19NQVNLIHwKLQkJCQkgICAgSUVFRTgwMjExX09GRE1fUkFURVNfTUFTSykpIHsKKwkJaWYgKG5ld190eF9yYXRlcyAmIH4oTElCSVBXX0NDS19SQVRFU19NQVNLIHwKKwkJCQkgICAgTElCSVBXX09GRE1fUkFURVNfTUFTSykpIHsKIAkJCS8qIEludmFsaWQgZml4ZWQgcmF0ZSBtYXNrICovCiAJCQlJUFdfREVCVUdfV1gKIAkJCSAgICAoImludmFsaWQgZml4ZWQgcmF0ZSBtYXNrIGluIGlwd19zZXRfZml4ZWRfcmF0ZVxuIik7Ci0JCQlmci50eF9yYXRlcyA9IDA7CisJCQluZXdfdHhfcmF0ZXMgPSAwOwogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSyAmIGZyLnR4X3JhdGVzKSB7Ci0JCQltYXNrIHw9IChJRUVFODAyMTFfT0ZETV9SQVRFXzZNQl9NQVNLID4+IDEpOwotCQkJZnIudHhfcmF0ZXMgJj0gfklFRUU4MDIxMV9PRkRNX1JBVEVfNk1CX01BU0s7CisJCWlmIChMSUJJUFdfT0ZETV9SQVRFXzZNQl9NQVNLICYgbmV3X3R4X3JhdGVzKSB7CisJCQltYXNrIHw9IChMSUJJUFdfT0ZETV9SQVRFXzZNQl9NQVNLID4+IDEpOworCQkJbmV3X3R4X3JhdGVzICY9IH5MSUJJUFdfT0ZETV9SQVRFXzZNQl9NQVNLOwogCQl9CiAKLQkJaWYgKElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0sgJiBmci50eF9yYXRlcykgewotCQkJbWFzayB8PSAoSUVFRTgwMjExX09GRE1fUkFURV85TUJfTUFTSyA+PiAxKTsKLQkJCWZyLnR4X3JhdGVzICY9IH5JRUVFODAyMTFfT0ZETV9SQVRFXzlNQl9NQVNLOworCQlpZiAoTElCSVBXX09GRE1fUkFURV85TUJfTUFTSyAmIG5ld190eF9yYXRlcykgeworCQkJbWFzayB8PSAoTElCSVBXX09GRE1fUkFURV85TUJfTUFTSyA+PiAxKTsKKwkJCW5ld190eF9yYXRlcyAmPSB+TElCSVBXX09GRE1fUkFURV85TUJfTUFTSzsKIAkJfQogCi0JCWlmIChJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSyAmIGZyLnR4X3JhdGVzKSB7Ci0JCQltYXNrIHw9IChJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSyA+PiAxKTsKLQkJCWZyLnR4X3JhdGVzICY9IH5JRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSzsKKwkJaWYgKExJQklQV19PRkRNX1JBVEVfMTJNQl9NQVNLICYgbmV3X3R4X3JhdGVzKSB7CisJCQltYXNrIHw9IChMSUJJUFdfT0ZETV9SQVRFXzEyTUJfTUFTSyA+PiAxKTsKKwkJCW5ld190eF9yYXRlcyAmPSB+TElCSVBXX09GRE1fUkFURV8xMk1CX01BU0s7CiAJCX0KIAotCQlmci50eF9yYXRlcyB8PSBtYXNrOworCQluZXdfdHhfcmF0ZXMgfD0gbWFzazsKIAkJYnJlYWs7CiAJfQogCisJZnIudHhfcmF0ZXMgPSBjcHVfdG9fbGUxNihuZXdfdHhfcmF0ZXMpOworCiAJcmVnID0gaXB3X3JlYWQzMihwcml2LCBJUFdfTUVNX0ZJWEVEX09WRVJSSURFKTsKIAlpcHdfd3JpdGVfcmVnMzIocHJpdiwgcmVnLCAqKHUzMiAqKSAmIGZyKTsKIH0KQEAgLTYyMDMsMTIgKzYyMjMsMTIgQEAKIAkJCQkgIGludCBzY2FuX3R5cGUpCiB7CiAJaW50IGNoYW5uZWxfaW5kZXggPSAwOwotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW87CisJY29uc3Qgc3RydWN0IGxpYmlwd19nZW8gKmdlbzsKIAlpbnQgaTsKIAotCWdlbyA9IGllZWU4MDIxMV9nZXRfZ2VvKHByaXYtPmllZWUpOworCWdlbyA9IGxpYmlwd19nZXRfZ2VvKHByaXYtPmllZWUpOwogCi0JaWYgKHByaXYtPmllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV81MkdIWl9CQU5EKSB7CisJaWYgKHByaXYtPmllZWUtPmZyZXFfYmFuZCAmIExJQklQV181MkdIWl9CQU5EKSB7CiAJCWludCBzdGFydCA9IGNoYW5uZWxfaW5kZXg7CiAJCWZvciAoaSA9IDA7IGkgPCBnZW8tPmFfY2hhbm5lbHM7IGkrKykgewogCQkJaWYgKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgJiYKQEAgLTYyMTgsNyArNjIzOCw3IEBACiAJCQlzY2FuLT5jaGFubmVsc19saXN0W2NoYW5uZWxfaW5kZXhdID0gZ2VvLT5hW2ldLmNoYW5uZWw7CiAJCQlpcHdfc2V0X3NjYW5fdHlwZShzY2FuLCBjaGFubmVsX2luZGV4LAogCQkJCQkgIGdlby0+YVtpXS4KLQkJCQkJICBmbGFncyAmIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkgPworCQkJCQkgIGZsYWdzICYgTElCSVBXX0NIX1BBU1NJVkVfT05MWSA/CiAJCQkJCSAgSVBXX1NDQU5fUEFTU0lWRV9GVUxMX0RXRUxMX1NDQU4gOgogCQkJCQkgIHNjYW5fdHlwZSk7CiAJCX0KQEAgLTYyMzAsMTEgKzYyNTAsMTEgQEAKIAkJfQogCX0KIAotCWlmIChwcml2LT5pZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfMjRHSFpfQkFORCkgeworCWlmIChwcml2LT5pZWVlLT5mcmVxX2JhbmQgJiBMSUJJUFdfMjRHSFpfQkFORCkgewogCQlpbnQgc3RhcnQgPSBjaGFubmVsX2luZGV4OwogCQlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NQRUVEX1NDQU4pIHsKIAkJCWludCBpbmRleDsKLQkJCXU4IGNoYW5uZWxzW0lFRUU4MDIxMV8yNEdIWl9DSEFOTkVMU10gPSB7CisJCQl1OCBjaGFubmVsc1tMSUJJUFdfMjRHSFpfQ0hBTk5FTFNdID0gewogCQkJCS8qIG5vcCBvdXQgdGhlIGxpc3QgKi8KIAkJCQlbMF0gPSAwCiAJCQl9OwpAQCAtNjI2NiwxMSArNjI4NiwxMSBAQAogCQkJCWNoYW5uZWxfaW5kZXgrKzsKIAkJCQlzY2FuLT5jaGFubmVsc19saXN0W2NoYW5uZWxfaW5kZXhdID0gY2hhbm5lbDsKIAkJCQlpbmRleCA9Ci0JCQkJICAgIGllZWU4MDIxMV9jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIGNoYW5uZWwpOworCQkJCSAgICBsaWJpcHdfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBjaGFubmVsKTsKIAkJCQlpcHdfc2V0X3NjYW5fdHlwZShzY2FuLCBjaGFubmVsX2luZGV4LAogCQkJCQkJICBnZW8tPmJnW2luZGV4XS4KIAkJCQkJCSAgZmxhZ3MgJgotCQkJCQkJICBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZID8KKwkJCQkJCSAgTElCSVBXX0NIX1BBU1NJVkVfT05MWSA/CiAJCQkJCQkgIElQV19TQ0FOX1BBU1NJVkVfRlVMTF9EV0VMTF9TQ0FOCiAJCQkJCQkgIDogc2Nhbl90eXBlKTsKIAkJCX0KQEAgLTYyODUsNyArNjMwNSw3IEBACiAJCQkJaXB3X3NldF9zY2FuX3R5cGUoc2NhbiwgY2hhbm5lbF9pbmRleCwKIAkJCQkJCSAgZ2VvLT5iZ1tpXS4KIAkJCQkJCSAgZmxhZ3MgJgotCQkJCQkJICBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZID8KKwkJCQkJCSAgTElCSVBXX0NIX1BBU1NJVkVfT05MWSA/CiAJCQkJCQkgIElQV19TQ0FOX1BBU1NJVkVfRlVMTF9EV0VMTF9TQ0FOCiAJCQkJCQkgIDogc2Nhbl90eXBlKTsKIAkJCX0KQEAgLTYzNTIsNyArNjM3Miw3IEBACiAJfQogCiAJbWVtc2V0KCZzY2FuLCAwLCBzaXplb2Yoc2NhbikpOwotCXNjYW4uZnVsbF9zY2FuX2luZGV4ID0gY3B1X3RvX2xlMzIoaWVlZTgwMjExX2dldF9zY2Fucyhwcml2LT5pZWVlKSk7CisJc2Nhbi5mdWxsX3NjYW5faW5kZXggPSBjcHVfdG9fbGUzMihsaWJpcHdfZ2V0X3NjYW5zKHByaXYtPmllZWUpKTsKIAogCWlmICh0eXBlID09IElXX1NDQU5fVFlQRV9QQVNTSVZFKSB7CiAJCUlQV19ERUJVR19XWCgidXNlIHBhc3NpdmUgc2Nhbm5pbmdcbiIpOwpAQCAtNjM4MywxMyArNjQwMywxMyBAQAogCQl1OCBjaGFubmVsOwogCQl1OCBiYW5kID0gMDsKIAotCQlzd2l0Y2ggKGllZWU4MDIxMV9pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpKSB7Ci0JCWNhc2UgSUVFRTgwMjExXzUyR0haX0JBTkQ6CisJCXN3aXRjaCAobGliaXB3X2lzX3ZhbGlkX2NoYW5uZWwocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCkpIHsKKwkJY2FzZSBMSUJJUFdfNTJHSFpfQkFORDoKIAkJCWJhbmQgPSAodTgpIChJUFdfQV9NT0RFIDw8IDYpIHwgMTsKIAkJCWNoYW5uZWwgPSBwcml2LT5jaGFubmVsOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBJRUVFODAyMTFfMjRHSFpfQkFORDoKKwkJY2FzZSBMSUJJUFdfMjRHSFpfQkFORDoKIAkJCWJhbmQgPSAodTgpIChJUFdfQl9NT0RFIDw8IDYpIHwgMTsKIAkJCWNoYW5uZWwgPSBwcml2LT5jaGFubmVsOwogCQkJYnJlYWs7CkBAIC02NTEwLDggKzY1MzAsOCBAQAogCiBzdGF0aWMgaW50IGlwd193cGFfc2V0X2F1dGhfYWxncyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGludCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWMgPSB7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOworCXN0cnVjdCBsaWJpcHdfc2VjdXJpdHkgc2VjID0gewogCQkuZmxhZ3MgPSBTRUNfQVVUSF9NT0RFLAogCX07CiAJaW50IHJldCA9IDA7CkBAIC02NTYxLDggKzY1ODEsOCBAQAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CiAJdTggKmJ1ZjsKIAlpbnQgZXJyID0gMDsKIApAQCAtNjU5Nyw4ICs2NjE3LDggQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOwogCWludCBlcnIgPSAwOwogCiAJaWYgKGllZWUtPndwYV9pZV9sZW4gPT0gMCB8fCBpZWVlLT53cGFfaWUgPT0gTlVMTCkgewpAQCAtNjY0MCw4ICs2NjYwLDggQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOworCXN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKIAlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjY5Miw3ICs2NzEyLDcgQEAKIAkJCSAqIGNhbiB1c2UgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhlIENBUF9QUklWQUNZX09OIGJpdCBzaG91bGQKIAkJCSAqIGJlIHNldC4KIAkJCSAqLwotCQkJc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWMgPSB7CisJCQlzdHJ1Y3QgbGliaXB3X3NlY3VyaXR5IHNlYyA9IHsKIAkJCQkuZmxhZ3MgPSBTRUNfRU5BQkxFRCwKIAkJCQkuZW5hYmxlZCA9IHBhcmFtLT52YWx1ZSwKIAkJCX07CkBAIC02NzQwLDggKzY3NjAsOCBAQAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOwogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKIAlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwogCWludCByZXQgPSAwOwpAQCAtNjc5OSw3ICs2ODE5LDcgQEAKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CiAKIAlpZiAoaHdjcnlwdG8pIHsKQEAgLTY4MjEsNyArNjg0MSw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gaWVlZTgwMjExX3d4X3NldF9lbmNvZGVleHQocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwgZXh0cmEpOworCXJldHVybiBsaWJpcHdfd3hfc2V0X2VuY29kZWV4dChwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CiB9CiAKIC8qIFNJT0NHSVdFTkNPREVFWFQgKi8KQEAgLTY4MjksOCArNjg0OSw4IEBACiAJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXJldHVybiBpZWVlODAyMTFfd3hfZ2V0X2VuY29kZWV4dChwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKKwlyZXR1cm4gbGliaXB3X3d4X2dldF9lbmNvZGVleHQocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwgZXh0cmEpOwogfQogCiAvKiBTSU9DU0lXTUxNRSAqLwpAQCAtNjgzOCw3ICs2ODU4LDcgQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKIAlfX2xlMTYgcmVhc29uOwogCkBAIC02ODg4LDkgKzY5MDgsOSBAQAogKi8KIHN0YXRpYyBpbnQgaXB3X3Fvc19oYW5kbGVfcHJvYmVfcmVzcG9uc2Uoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCQkgaW50IGFjdGl2ZV9uZXR3b3JrLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQorCQkJCQkgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrKQogewotCXUzMiBzaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMpOworCXUzMiBzaXplID0gc2l6ZW9mKHN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMpOwogCiAJaWYgKG5ldHdvcmstPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykKIAkJbmV0d29yay0+cW9zX2RhdGEuYWN0aXZlID0gbmV0d29yay0+cW9zX2RhdGEuc3VwcG9ydGVkOwpAQCAtNjk0OCwxMiArNjk2OCwxMiBAQAogKiBJUFdfQ01EX1FPU19QQVJBTUVURVJTIGFuZCBJUFdfQ01EX1dNRV9JTkZPCiAqLwogc3RhdGljIGludCBpcHdfcW9zX2FjdGl2YXRlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhICpxb3NfbmV0d29ya19kYXRhKQorCQkJICAgIHN0cnVjdCBsaWJpcHdfcW9zX2RhdGEgKnFvc19uZXR3b3JrX2RhdGEpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIHFvc19wYXJhbWV0ZXJzW1FPU19RT1NfU0VUU107Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyAqYWN0aXZlX29uZSA9IE5VTEw7Ci0JdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyk7CisJc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycyBxb3NfcGFyYW1ldGVyc1tRT1NfUU9TX1NFVFNdOworCXN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMgKmFjdGl2ZV9vbmUgPSBOVUxMOworCXUzMiBzaXplID0gc2l6ZW9mKHN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMpOwogCXUzMiBidXJzdF9kdXJhdGlvbjsKIAlpbnQgaTsKIAl1OCB0eXBlOwpAQCAtNzAxNCw3ICs3MDM0LDcgQEAKIAogCUlQV19ERUJVR19RT1MoIlFvUyBzZW5kaW5nIElQV19DTURfUU9TX1BBUkFNRVRFUlNcbiIpOwogCWVyciA9IGlwd19zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChwcml2LAotCQkJCQkgIChzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzICopCisJCQkJCSAgKHN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMgKikKIAkJCQkJICAmKHFvc19wYXJhbWV0ZXJzWzBdKSk7CiAJaWYgKGVycikKIAkJSVBXX0RFQlVHX1FPUygiUW9TIElQV19DTURfUU9TX1BBUkFNRVRFUlMgZmFpbGVkXG4iKTsKQEAgLTcwMjgsMTMgKzcwNDgsMTMgQEAKIHN0YXRpYyBpbnQgaXB3X3Fvc19zZXRfaW5mb19lbGVtZW50KHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IHFvc19pbmZvOworCXN0cnVjdCBsaWJpcHdfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQgcW9zX2luZm87CiAKIAlpZiAocHJpdiA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKIAlxb3NfaW5mby5lbGVtZW50SUQgPSBRT1NfRUxFTUVOVF9JRDsKLQlxb3NfaW5mby5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudCkgLSAyOworCXFvc19pbmZvLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgbGliaXB3X3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50KSAtIDI7CiAKIAlxb3NfaW5mby52ZXJzaW9uID0gUU9TX1ZFUlNJT05fMTsKIAlxb3NfaW5mby5hY19pbmZvID0gMDsKQEAgLTcwNTQsMTEgKzcwNzQsMTEgQEAKICogU2V0IHRoZSBRb1MgcGFyYW1ldGVyIHdpdGggdGhlIGFzc29jaWF0aW9uIHJlcXVlc3Qgc3RydWN0dXJlCiAqLwogc3RhdGljIGludCBpcHdfcW9zX2Fzc29jaWF0aW9uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCisJCQkgICAgICAgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrKQogewogCWludCBlcnIgPSAwOwotCXN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEgKnFvc19kYXRhID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhIGlic3NfZGF0YSA9IHsKKwlzdHJ1Y3QgbGliaXB3X3Fvc19kYXRhICpxb3NfZGF0YSA9IE5VTEw7CisJc3RydWN0IGxpYmlwd19xb3NfZGF0YSBpYnNzX2RhdGEgPSB7CiAJCS5zdXBwb3J0ZWQgPSAxLAogCQkuYWN0aXZlID0gMSwKIAl9OwpAQCAtNzEwMCwxMSArNzEyMCwxMSBAQAogKiBzZXR0aW5nCiAqLwogc3RhdGljIGludCBpcHdfcW9zX2Fzc29jaWF0aW9uX3Jlc3Aoc3RydWN0IGlwd19wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCisJCQkJICAgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29yaykKIHsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiBzaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMpOworCXUzMiBzaXplID0gc2l6ZW9mKHN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMpOwogCWludCBzZXRfcW9zX3BhcmFtID0gMDsKIAogCWlmICgocHJpdiA9PSBOVUxMKSB8fCAobmV0d29yayA9PSBOVUxMKSB8fApAQCAtNzEyMCw3ICs3MTQwLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOwogCWlmIChuZXR3b3JrLT5mbGFncyAmIE5FVFdPUktfSEFTX1FPU19QQVJBTUVURVJTKSB7CiAJCW1lbWNweSgmcHJpdi0+YXNzb2NfbmV0d29yay0+cW9zX2RhdGEsICZuZXR3b3JrLT5xb3NfZGF0YSwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhKSk7CisJCSAgICAgICBzaXplb2Yoc3RydWN0IGxpYmlwd19xb3NfZGF0YSkpOwogCQlwcml2LT5hc3NvY19uZXR3b3JrLT5xb3NfZGF0YS5hY3RpdmUgPSAxOwogCQlpZiAoKG5ldHdvcmstPnFvc19kYXRhLm9sZF9wYXJhbV9jb3VudCAhPQogCQkgICAgIG5ldHdvcmstPnFvc19kYXRhLnBhcmFtX2NvdW50KSkgewpAQCAtNzE1Niw3ICs3MTc2LDcgQEAKIAlpZiAoKHByaXYgPT0gTlVMTCkpCiAJCXJldHVybiAwOwogCi0JaWYgKCEocHJpdi0+aWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pKQorCWlmICghKHByaXYtPmllZWUtPm1vZHVsYXRpb24gJiBMSUJJUFdfT0ZETV9NT0RVTEFUSU9OKSkKIAkJcmV0ID0gcHJpdi0+cW9zX2RhdGEuYnVyc3RfZHVyYXRpb25fQ0NLOwogCWVsc2UKIAkJcmV0ID0gcHJpdi0+cW9zX2RhdGEuYnVyc3RfZHVyYXRpb25fT0ZETTsKQEAgLTcyMDgsOCArNzIyOCw4IEBACiBzdGF0aWMgaW50IGlwd19pc19xb3NfYWN0aXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhICpxb3NfZGF0YSA9IE5VTEw7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGliaXB3X3Fvc19kYXRhICpxb3NfZGF0YSA9IE5VTEw7CiAJaW50IGFjdGl2ZSwgc3VwcG9ydGVkOwogCXU4ICpkYWRkciA9IHNrYi0+ZGF0YSArIEVUSF9BTEVOOwogCWludCB1bmljYXN0ID0gIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGRhZGRyKTsKQEAgLTcyNjQsOSArNzI4NCw2IEBACiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpcHdfcHJpdiwgcW9zX2FjdGl2YXRlKTsKIAotCWlmIChwcml2ID09IE5VTEwpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkKQEAgLTcyNzYsMTAgKzcyOTMsMTAgQEAKIH0KIAogc3RhdGljIGludCBpcHdfaGFuZGxlX3Byb2JlX3Jlc3BvbnNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlICpyZXNwLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQorCQkJCSAgICAgc3RydWN0IGxpYmlwd19wcm9iZV9yZXNwb25zZSAqcmVzcCwKKwkJCQkgICAgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29yaykKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGFjdGl2ZV9uZXR3b3JrID0gKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgJiYKIAkJCSAgICAgIChuZXR3b3JrID09IHByaXYtPmFzc29jX25ldHdvcmspKTsKIApAQCAtNzI4OSwxMCArNzMwNiwxMCBAQAogfQogCiBzdGF0aWMgaW50IGlwd19oYW5kbGVfYmVhY29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYmVhY29uICpyZXNwLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCisJCQkgICAgIHN0cnVjdCBsaWJpcHdfYmVhY29uICpyZXNwLAorCQkJICAgICBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmspCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBhY3RpdmVfbmV0d29yayA9ICgocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpICYmCiAJCQkgICAgICAobmV0d29yayA9PSBwcml2LT5hc3NvY19uZXR3b3JrKSk7CiAKQEAgLTczMDIsMjIgKzczMTksMjIgQEAKIH0KIAogc3RhdGljIGludCBpcHdfaGFuZGxlX2Fzc29jX3Jlc3BvbnNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlICpyZXNwLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQorCQkJCSAgICAgc3RydWN0IGxpYmlwd19hc3NvY19yZXNwb25zZSAqcmVzcCwKKwkJCQkgICAgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29yaykKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaXB3X3Fvc19hc3NvY2lhdGlvbl9yZXNwKHByaXYsIG5ldHdvcmspOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlwd19zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMKK3N0YXRpYyBpbnQgaXB3X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycwogCQkJCSAgICAgICAqcW9zX3BhcmFtKQogewogCXJldHVybiBpcHdfc2VuZF9jbWRfcGR1KHByaXYsIElQV19DTURfUU9TX1BBUkFNRVRFUlMsCiAJCQkJc2l6ZW9mKCpxb3NfcGFyYW0pICogMywgcW9zX3BhcmFtKTsKIH0KIAotc3RhdGljIGludCBpcHdfc2VuZF9xb3NfaW5mb19jb21tYW5kKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudAorc3RhdGljIGludCBpcHdfc2VuZF9xb3NfaW5mb19jb21tYW5kKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGxpYmlwd19xb3NfaW5mb3JtYXRpb25fZWxlbWVudAogCQkJCSAgICAgKnFvc19wYXJhbSkKIHsKIAlyZXR1cm4gaXB3X3NlbmRfY21kX3BkdShwcml2LCBJUFdfQ01EX1dNRV9JTkZPLCBzaXplb2YoKnFvc19wYXJhbSksCkBAIC03MzI3LDcgKzczNDQsNyBAQAogI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX1FPUyAqLwogCiBzdGF0aWMgaW50IGlwd19hc3NvY2lhdGVfbmV0d29yayhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaywKKwkJCQkgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrLAogCQkJCSBzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyAqcmF0ZXMsIGludCByb2FtaW5nKQogewogCWludCBlcnI7CkBAIC03NTA5LDcgKzc1MjYsNyBAQAogc3RhdGljIHZvaWQgaXB3X3JvYW0odm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yayA9IE5VTEw7CisJc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKIAlzdHJ1Y3QgaXB3X25ldHdvcmtfbWF0Y2ggbWF0Y2ggPSB7CiAJCS5uZXR3b3JrID0gcHJpdi0+YXNzb2NfbmV0d29yawogCX07CkBAIC03NTg0LDcgKzc2MDEsNyBAQAogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CiAKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmsgPSBOVUxMOworCXN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29yayA9IE5VTEw7CiAJc3RydWN0IGlwd19uZXR3b3JrX21hdGNoIG1hdGNoID0gewogCQkubmV0d29yayA9IE5VTEwKIAl9OwpAQCAtNzYzOCw4ICs3NjU1LDggQEAKIAkgICAgcHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19DSEFOTkVMKSB7CiAJCS8qIFVzZSBvbGRlc3QgbmV0d29yayBpZiB0aGUgZnJlZSBsaXN0IGlzIGVtcHR5ICovCiAJCWlmIChsaXN0X2VtcHR5KCZwcml2LT5pZWVlLT5uZXR3b3JrX2ZyZWVfbGlzdCkpIHsKLQkJCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqb2xkZXN0ID0gTlVMTDsKLQkJCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqdGFyZ2V0OworCQkJc3RydWN0IGxpYmlwd19uZXR3b3JrICpvbGRlc3QgPSBOVUxMOworCQkJc3RydWN0IGxpYmlwd19uZXR3b3JrICp0YXJnZXQ7CiAKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkodGFyZ2V0LCAmcHJpdi0+aWVlZS0+bmV0d29ya19saXN0LCBsaXN0KSB7CiAJCQkJaWYgKChvbGRlc3QgPT0gTlVMTCkgfHwKQEAgLTc2NjAsNyArNzY3Nyw3IEBACiAJCX0KIAogCQllbGVtZW50ID0gcHJpdi0+aWVlZS0+bmV0d29ya19mcmVlX2xpc3QubmV4dDsKLQkJbmV0d29yayA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrLCBsaXN0KTsKKwkJbmV0d29yayA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGxpYmlwd19uZXR3b3JrLCBsaXN0KTsKIAkJaXB3X2FkaG9jX2NyZWF0ZShwcml2LCBuZXR3b3JrKTsKIAkJcmF0ZXMgPSAmcHJpdi0+cmF0ZXM7CiAJCWxpc3RfZGVsKGVsZW1lbnQpOwpAQCAtNzcxNiwxOCArNzczMywxOCBAQAogCXN3aXRjaCAocHJpdi0+aWVlZS0+c2VjLmxldmVsKSB7CiAJY2FzZSBTRUNfTEVWRUxfMzoKIAkJLyogUmVtb3ZlIENDTVAgSERSICovCi0JCW1lbW1vdmUoc2tiLT5kYXRhICsgSUVFRTgwMjExXzNBRERSX0xFTiwKLQkJCXNrYi0+ZGF0YSArIElFRUU4MDIxMV8zQUREUl9MRU4gKyA4LAotCQkJc2tiLT5sZW4gLSBJRUVFODAyMTFfM0FERFJfTEVOIC0gOCk7CisJCW1lbW1vdmUoc2tiLT5kYXRhICsgTElCSVBXXzNBRERSX0xFTiwKKwkJCXNrYi0+ZGF0YSArIExJQklQV18zQUREUl9MRU4gKyA4LAorCQkJc2tiLT5sZW4gLSBMSUJJUFdfM0FERFJfTEVOIC0gOCk7CiAJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSAxNik7CS8qIENDTVBfSERSX0xFTiArIENDTVBfTUlDX0xFTiAqLwogCQlicmVhazsKIAljYXNlIFNFQ19MRVZFTF8yOgogCQlicmVhazsKIAljYXNlIFNFQ19MRVZFTF8xOgogCQkvKiBSZW1vdmUgSVYgKi8KLQkJbWVtbW92ZShza2ItPmRhdGEgKyBJRUVFODAyMTFfM0FERFJfTEVOLAotCQkJc2tiLT5kYXRhICsgSUVFRTgwMjExXzNBRERSX0xFTiArIDQsCi0JCQlza2ItPmxlbiAtIElFRUU4MDIxMV8zQUREUl9MRU4gLSA0KTsKKwkJbWVtbW92ZShza2ItPmRhdGEgKyBMSUJJUFdfM0FERFJfTEVOLAorCQkJc2tiLT5kYXRhICsgTElCSVBXXzNBRERSX0xFTiArIDQsCisJCQlza2ItPmxlbiAtIExJQklQV18zQUREUl9MRU4gLSA0KTsKIAkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIDgpOwkvKiBJViArIElDViAqLwogCQlicmVhazsKIAljYXNlIFNFQ19MRVZFTF8wOgpAQCAtNzc0MSwxMCArNzc1OCwxMCBAQAogCiBzdGF0aWMgdm9pZCBpcHdfaGFuZGxlX2RhdGFfcGFja2V0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCQkgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKKwkJCQkgICBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICpzdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZHI7CiAJc3RydWN0IGlwd19yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KQEAgLTc3NzQsMTUgKzc3OTEsMTUgQEAKIAlJUFdfREVCVUdfUlgoIlJ4IHBhY2tldCBvZiAlZCBieXRlcy5cbiIsIHJ4Yi0+c2tiLT5sZW4pOwogCiAJLyogSFcgZGVjcnlwdCB3aWxsIG5vdCBjbGVhciB0aGUgV0VQIGJpdCwgTUlDLCBQTiwgZXRjLiAqLwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXJ4Yi0+c2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgbGliaXB3X2hkcl80YWRkciAqKXJ4Yi0+c2tiLT5kYXRhOwogCWlmIChwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUiAmJgogCSAgICAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgPwogCSAgICAgIXByaXYtPmllZWUtPmhvc3RfbWNfZGVjcnlwdCA6ICFwcml2LT5pZWVlLT5ob3N0X2RlY3J5cHQpKQogCQlpcHdfcmVidWlsZF9kZWNyeXB0ZWRfc2tiKHByaXYsIHJ4Yi0+c2tiKTsKIAotCWlmICghaWVlZTgwMjExX3J4KHByaXYtPmllZWUsIHJ4Yi0+c2tiLCBzdGF0cykpCisJaWYgKCFsaWJpcHdfcngocHJpdi0+aWVlZSwgcnhiLT5za2IsIHN0YXRzKSkKIAkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQllbHNlIHsJCQkvKiBpZWVlODAyMTFfcnggc3VjY2VlZGVkLCBzbyBpdCBub3cgb3ducyB0aGUgU0tCICovCisJZWxzZSB7CQkJLyogbGliaXB3X3J4IHN1Y2NlZWRlZCwgc28gaXQgbm93IG93bnMgdGhlIFNLQiAqLwogCQlyeGItPnNrYiA9IE5VTEw7CiAJCV9faXB3X2xlZF9hY3Rpdml0eV9vbihwcml2KTsKIAl9CkBAIC03NzkxLDcgKzc4MDgsNyBAQAogI2lmZGVmIENPTkZJR19JUFcyMjAwX1JBRElPVEFQCiBzdGF0aWMgdm9pZCBpcHdfaGFuZGxlX2RhdGFfcGFja2V0X21vbml0b3Ioc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCQkgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKLQkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCisJCQkJCSAgIHN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgKnN0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwogCXN0cnVjdCBpcHdfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGlwd19yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKQEAgLTc4NjcsNyArNzg4NCw3IEBACiAKIAkvKiBDb252ZXJ0IHNpZ25hbCB0byBEQk0gKi8KIAlpcHdfcnQtPnJ0X2RibXNpZ25hbCA9IGFudHNpZ25hbDsKLQlpcHdfcnQtPnJ0X2RibW5vaXNlID0gZnJhbWUtPm5vaXNlOworCWlwd19ydC0+cnRfZGJtbm9pc2UgPSAoczgpIGxlMTZfdG9fY3B1KGZyYW1lLT5ub2lzZSk7CiAKIAkvKiBDb252ZXJ0IHRoZSBjaGFubmVsIGRhdGEgYW5kIHNldCB0aGUgZmxhZ3MgKi8KIAlpcHdfcnQtPnJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihpZWVlODAyMTFjaGFuMm1oeihyZWNlaXZlZF9jaGFubmVsKSk7CkBAIC03OTM3LDkgKzc5NTQsOSBAQAogCiAJSVBXX0RFQlVHX1JYKCJSeCBwYWNrZXQgb2YgJWQgYnl0ZXMuXG4iLCByeGItPnNrYi0+bGVuKTsKIAotCWlmICghaWVlZTgwMjExX3J4KHByaXYtPmllZWUsIHJ4Yi0+c2tiLCBzdGF0cykpCisJaWYgKCFsaWJpcHdfcngocHJpdi0+aWVlZSwgcnhiLT5za2IsIHN0YXRzKSkKIAkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQllbHNlIHsJCQkvKiBpZWVlODAyMTFfcnggc3VjY2VlZGVkLCBzbyBpdCBub3cgb3ducyB0aGUgU0tCICovCisJZWxzZSB7CQkJLyogbGliaXB3X3J4IHN1Y2NlZWRlZCwgc28gaXQgbm93IG93bnMgdGhlIFNLQiAqLwogCQlyeGItPnNrYiA9IE5VTEw7CiAJCS8qIG5vIExFRCBkdXJpbmcgY2FwdHVyZSAqLwogCX0KQEAgLTc5NDcsMjggKzc5NjQsMjggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0lQVzIyMDBfUFJPTUlTQ1VPVVMKLSNkZWZpbmUgaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3BvbnNlKGZjKSBcCisjZGVmaW5lIGxpYmlwd19pc19wcm9iZV9yZXNwb25zZShmYykgXAogICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJiBcCiAgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQICkKIAotI2RlZmluZSBpZWVlODAyMTFfaXNfbWFuYWdlbWVudChmYykgXAorI2RlZmluZSBsaWJpcHdfaXNfbWFuYWdlbWVudChmYykgXAogICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkKIAotI2RlZmluZSBpZWVlODAyMTFfaXNfY29udHJvbChmYykgXAorI2RlZmluZSBsaWJpcHdfaXNfY29udHJvbChmYykgXAogICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfQ1RMKQogCi0jZGVmaW5lIGllZWU4MDIxMV9pc19kYXRhKGZjKSBcCisjZGVmaW5lIGxpYmlwd19pc19kYXRhKGZjKSBcCiAgICAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKQogCi0jZGVmaW5lIGllZWU4MDIxMV9pc19hc3NvY19yZXF1ZXN0KGZjKSBcCisjZGVmaW5lIGxpYmlwd19pc19hc3NvY19yZXF1ZXN0KGZjKSBcCiAgICAoKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEpCiAKLSNkZWZpbmUgaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxdWVzdChmYykgXAorI2RlZmluZSBsaWJpcHdfaXNfcmVhc3NvY19yZXF1ZXN0KGZjKSBcCiAgICAoKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUSkKIAogc3RhdGljIHZvaWQgaXB3X2hhbmRsZV9wcm9taXNjdW91c19yeChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCiAJCQkJICAgICAgc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyICpyeGIsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCisJCQkJICAgICAgc3RydWN0IGxpYmlwd19yeF9zdGF0cyAqc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPnByb21fbmV0X2RldjsKIAlzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpcHdfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CkBAIC03OTgxLDcgKzc5OTgsNyBAQAogCXUxNiBjaGFubmVsID0gZnJhbWUtPnJlY2VpdmVkX2NoYW5uZWw7CiAJdTggcGh5X2ZsYWdzID0gZnJhbWUtPmFudGVubmFBbmRQaHk7CiAJczggc2lnbmFsID0gZnJhbWUtPnJzc2lfZGJtIC0gSVBXX1JTU0lfVE9fREJNOwotCXM4IG5vaXNlID0gZnJhbWUtPm5vaXNlOworCXM4IG5vaXNlID0gKHM4KSBsZTE2X3RvX2NwdShmcmFtZS0+bm9pc2UpOwogCXU4IHJhdGUgPSBmcmFtZS0+cmF0ZTsKIAlzaG9ydCBsZW4gPSBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtODAxOCwxNyArODAzNSwxNyBAQAogCX0KIAogCWhkciA9ICh2b2lkICopcnhiLT5za2ItPmRhdGEgKyBJUFdfUlhfRlJBTUVfU0laRTsKLQlpZiAoaWVlZTgwMjExX2lzX21hbmFnZW1lbnQobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwlpZiAobGliaXB3X2lzX21hbmFnZW1lbnQobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKIAkJaWYgKGZpbHRlciAmIElQV19QUk9NX05PX01HTVQpCiAJCQlyZXR1cm47CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9NR01UX0hFQURFUl9PTkxZKQogCQkJaGRyX29ubHkgPSAxOwotCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2NvbnRyb2wobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwl9IGVsc2UgaWYgKGxpYmlwd19pc19jb250cm9sKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9OT19DVEwpCiAJCQlyZXR1cm47CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9DVExfSEVBREVSX09OTFkpCiAJCQloZHJfb25seSA9IDE7Ci0JfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfZGF0YShsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpKSkgeworCX0gZWxzZSBpZiAobGliaXB3X2lzX2RhdGEobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKIAkJaWYgKGZpbHRlciAmIElQV19QUk9NX05PX0RBVEEpCiAJCQlyZXR1cm47CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9EQVRBX0hFQURFUl9PTkxZKQpAQCAtODA0Niw3ICs4MDYzLDcgQEAKIAlpcHdfcnQgPSAodm9pZCAqKXNrYi0+ZGF0YTsKIAogCWlmIChoZHJfb25seSkKLQkJbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSk7CisJCWxlbiA9IGxpYmlwd19nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpOwogCiAJbWVtY3B5KGlwd19ydC0+cGF5bG9hZCwgaGRyLCBsZW4pOwogCkBAIC04MTQzLDcgKzgxNjAsNyBAQAogCiAJSVBXX0RFQlVHX1JYKCJSeCBwYWNrZXQgb2YgJWQgYnl0ZXMuXG4iLCBza2ItPmxlbik7CiAKLQlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5wcm9tX3ByaXYtPmllZWUsIHNrYiwgc3RhdHMpKSB7CisJaWYgKCFsaWJpcHdfcngocHJpdi0+cHJvbV9wcml2LT5pZWVlLCBza2IsIHN0YXRzKSkgewogCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0KQEAgLTgxNTEsNyArODE2OCw3IEBACiAjZW5kaWYKIAogc3RhdGljIGludCBpc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIpCisJCQkJICAgIHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZWFkZXIpCiB7CiAJLyogRmlsdGVyIGluY29taW5nIHBhY2tldHMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIHRhcmdldHRlZCB0b3dhcmQKIAkgKiB0aGlzIG5ldHdvcmssIGRpc2NhcmRpbmcgcGFja2V0cyBjb21pbmcgZnJvbSBvdXJzZWx2ZXMgKi8KQEAgLTgxODksNyArODIwNiw3IEBACiAjZGVmaW5lIElQV19QQUNLRVRfUkVUUllfVElNRSBIWgogCiBzdGF0aWMgIGludCBpc19kdXBsaWNhdGVfcGFja2V0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyKQorCQkJCSAgICAgIHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZWFkZXIpCiB7CiAJdTE2IHNjID0gbGUxNl90b19jcHUoaGVhZGVyLT5zZXFfY3RsKTsKIAl1MTYgc2VxID0gV0xBTl9HRVRfU0VRX1NFUShzYyk7CkBAIC04MjYzLDE0ICs4MjgwLDE0IEBACiAKIHN0YXRpYyB2b2lkIGlwd19oYW5kbGVfbWdtdF9wYWNrZXQoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCSAgIHN0cnVjdCBpcHdfcnhfbWVtX2J1ZmZlciAqcnhiLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQorCQkJCSAgIHN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgKnN0YXRzKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSByeGItPnNrYjsKIAlzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpcHdfcnhfcGFja2V0ICopc2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikKKwlzdHJ1Y3QgbGliaXB3X2hkcl80YWRkciAqaGVhZGVyID0gKHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICopCiAJICAgIChza2ItPmRhdGEgKyBJUFdfUlhfRlJBTUVfU0laRSk7CiAKLQlpZWVlODAyMTFfcnhfbWd0KHByaXYtPmllZWUsIGhlYWRlciwgc3RhdHMpOworCWxpYmlwd19yeF9tZ3QocHJpdi0+aWVlZSwgaGVhZGVyLCBzdGF0cyk7CiAKIAlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DICYmCiAJICAgICgoV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUoaGVhZGVyLT5mcmFtZV9jdGwpKSA9PQpAQCAtODI5MiwxMiArODMwOSwxMiBAQAogCQkvKiBBZHZhbmNlIHBhc3QgdGhlIGlwdyBwYWNrZXQgaGVhZGVyIHRvIHRoZSA4MDIuMTEgZnJhbWUgKi8KIAkJc2tiX3B1bGwoc2tiLCBJUFdfUlhfRlJBTUVfU0laRSk7CiAKLQkJLyogUHVzaCB0aGUgaWVlZTgwMjExX3J4X3N0YXRzIGJlZm9yZSB0aGUgODAyLjExIGZyYW1lICovCisJCS8qIFB1c2ggdGhlIGxpYmlwd19yeF9zdGF0cyBiZWZvcmUgdGhlIDgwMi4xMSBmcmFtZSAqLwogCQltZW1jcHkoc2tiX3B1c2goc2tiLCBzaXplb2YoKnN0YXRzKSksIHN0YXRzLCBzaXplb2YoKnN0YXRzKSk7CiAKIAkJc2tiLT5kZXYgPSBwcml2LT5pZWVlLT5kZXY7CiAKLQkJLyogUG9pbnQgcmF3IGF0IHRoZSBpZWVlODAyMTFfc3RhdHMgKi8KKwkJLyogUG9pbnQgcmF3IGF0IHRoZSBsaWJpcHdfc3RhdHMgKi8KIAkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAogCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKQEAgLTgzMTcsNyArODMzNCw3IEBACiB7CiAJc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyICpyeGI7CiAJc3RydWN0IGlwd19yeF9wYWNrZXQgKnBrdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyOworCXN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZWFkZXI7CiAJdTMyIHIsIHcsIGk7CiAJdTggbmV0d29ya19wYWNrZXQ7CiAJdTggZmlsbF9yeCA9IDA7CkBAIC04MzQ4LDExICs4MzY1LDExIEBACiAKIAkJc3dpdGNoIChwa3QtPmhlYWRlci5tZXNzYWdlX3R5cGUpIHsKIAkJY2FzZSBSWF9GUkFNRV9UWVBFOgkvKiA4MDIuMTEgZnJhbWUgKi8gIHsKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzIHN0YXRzID0geworCQkJCXN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgc3RhdHMgPSB7CiAJCQkJCS5yc3NpID0gcGt0LT51LmZyYW1lLnJzc2lfZGJtIC0KIAkJCQkJICAgIElQV19SU1NJX1RPX0RCTSwKIAkJCQkJLnNpZ25hbCA9Ci0JCQkJCSAgICBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUucnNzaV9kYm0pIC0KKwkJCQkJICAgIHBrdC0+dS5mcmFtZS5yc3NpX2RibSAtCiAJCQkJCSAgICBJUFdfUlNTSV9UT19EQk0gKyAweDEwMCwKIAkJCQkJLm5vaXNlID0KIAkJCQkJICAgIGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5ub2lzZSksCkBAIC04MzYzLDE5ICs4MzgwLDE5IEBACiAJCQkJCS5mcmVxID0KIAkJCQkJICAgIChwa3QtPnUuZnJhbWUuCiAJCQkJCSAgICAgY29udHJvbCAmICgxIDw8IDApKSA/Ci0JCQkJCSAgICBJRUVFODAyMTFfMjRHSFpfQkFORCA6Ci0JCQkJCSAgICBJRUVFODAyMTFfNTJHSFpfQkFORCwKKwkJCQkJICAgIExJQklQV18yNEdIWl9CQU5EIDoKKwkJCQkJICAgIExJQklQV181MkdIWl9CQU5ELAogCQkJCQkubGVuID0gbGUxNl90b19jcHUocGt0LT51LmZyYW1lLmxlbmd0aCksCiAJCQkJfTsKIAogCQkJCWlmIChzdGF0cy5yc3NpICE9IDApCi0JCQkJCXN0YXRzLm1hc2sgfD0gSUVFRTgwMjExX1NUQVRNQVNLX1JTU0k7CisJCQkJCXN0YXRzLm1hc2sgfD0gTElCSVBXX1NUQVRNQVNLX1JTU0k7CiAJCQkJaWYgKHN0YXRzLnNpZ25hbCAhPSAwKQotCQkJCQlzdGF0cy5tYXNrIHw9IElFRUU4MDIxMV9TVEFUTUFTS19TSUdOQUw7CisJCQkJCXN0YXRzLm1hc2sgfD0gTElCSVBXX1NUQVRNQVNLX1NJR05BTDsKIAkJCQlpZiAoc3RhdHMubm9pc2UgIT0gMCkKLQkJCQkJc3RhdHMubWFzayB8PSBJRUVFODAyMTFfU1RBVE1BU0tfTk9JU0U7CisJCQkJCXN0YXRzLm1hc2sgfD0gTElCSVBXX1NUQVRNQVNLX05PSVNFOwogCQkJCWlmIChzdGF0cy5yYXRlICE9IDApCi0JCQkJCXN0YXRzLm1hc2sgfD0gSUVFRTgwMjExX1NUQVRNQVNLX1JBVEU7CisJCQkJCXN0YXRzLm1hc2sgfD0gTElCSVBXX1NUQVRNQVNLX1JBVEU7CiAKIAkJCQlwcml2LT5yeF9wYWNrZXRzKys7CiAKQEAgLTg0MDAsNyArODQxNyw3IEBACiAjZW5kaWYKIAogCQkJCWhlYWRlciA9Ci0JCQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKShyeGItPnNrYi0+CisJCQkJICAgIChzdHJ1Y3QgbGliaXB3X2hkcl80YWRkciAqKShyeGItPnNrYi0+CiAJCQkJCQkJCSAgIGRhdGEgKwogCQkJCQkJCQkgICBJUFdfUlhfRlJBTUVfU0laRSk7CiAJCQkJLyogVE9ETzogQ2hlY2sgQWQtSG9jIGRlc3Qvc291cmNlIGFuZCBtYWtlIHN1cmUKQEAgLTg0MjMsNyArODQ0MCw3IEBACiAJCQkJCSAgICAgbGUxNl90b19jcHUocGt0LT51LmZyYW1lLmxlbmd0aCkpOwogCiAJCQkJaWYgKGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5sZW5ndGgpIDwKLQkJCQkgICAgaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoCisJCQkJICAgIGxpYmlwd19nZXRfaGRybGVuKGxlMTZfdG9fY3B1KAogCQkJCQkJICAgIGhlYWRlci0+ZnJhbWVfY3RsKSkpIHsKIAkJCQkJSVBXX0RFQlVHX0RST1AKIAkJCQkJICAgICgiUmVjZWl2ZWQgcGFja2V0IGlzIHRvbyBzbWFsbC4gIgpAQCAtODUzNCw3ICs4NTUxLDcgQEAKIAogCS8qIFdlIGRlZmF1bHQgdG8gZGlzYWJsaW5nIHRoZSBMRUQgY29kZSBhcyByaWdodCBub3cgaXQgY2F1c2VzCiAJICogdG9vIG1hbnkgc3lzdGVtcyB0byBsb2NrIHVwLi4uICovCi0JaWYgKCFsZWQpCisJaWYgKCFsZWRfc3VwcG9ydCkKIAkJcHJpdi0+Y29uZmlnIHw9IENGR19OT19MRUQ7CiAKIAlpZiAoYXNzb2NpYXRlKQpAQCAtODU1NiwxMCArODU3MywxMCBAQAogCQlJUFdfREVCVUdfSU5GTygiUmFkaW8gZGlzYWJsZWQuXG4iKTsKIAl9CiAKLQlpZiAoY2hhbm5lbCAhPSAwKSB7CisJaWYgKGRlZmF1bHRfY2hhbm5lbCAhPSAwKSB7CiAJCXByaXYtPmNvbmZpZyB8PSBDRkdfU1RBVElDX0NIQU5ORUw7Ci0JCXByaXYtPmNoYW5uZWwgPSBjaGFubmVsOwotCQlJUFdfREVCVUdfSU5GTygiQmluZCB0byBzdGF0aWMgY2hhbm5lbCAlZFxuIiwgY2hhbm5lbCk7CisJCXByaXYtPmNoYW5uZWwgPSBkZWZhdWx0X2NoYW5uZWw7CisJCUlQV19ERUJVR19JTkZPKCJCaW5kIHRvIHN0YXRpYyBjaGFubmVsICVkXG4iLCBkZWZhdWx0X2NoYW5uZWwpOwogCQkvKiBUT0RPOiBWYWxpZGF0ZSB0aGF0IHByb3ZpZGVkIGNoYW5uZWwgaXMgaW4gcmFuZ2UgKi8KIAl9CiAjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCkBAIC04NTY3LDcgKzg1ODQsNyBAQAogCQkgICAgIGJ1cnN0X2R1cmF0aW9uX0NDSywgYnVyc3RfZHVyYXRpb25fT0ZETSk7CiAjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfUU9TICovCiAKLQlzd2l0Y2ggKG1vZGUpIHsKKwlzd2l0Y2ggKG5ldHdvcmtfbW9kZSkgewogCWNhc2UgMToKIAkJcHJpdi0+aWVlZS0+aXdfbW9kZSA9IElXX01PREVfQURIT0M7CiAJCXByaXYtPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7CkBAIC04NjA4LDkgKzg2MjUsOSBAQAogCQkJICAgICAgICI6IERldGVjdGVkIEludGVsIFBSTy9XaXJlbGVzcyAyOTE1QUJHIE5ldHdvcmsgIgogCQkJICAgICAgICJDb25uZWN0aW9uXG4iKTsKIAkJcHJpdi0+aWVlZS0+YWJnX3RydWUgPSAxOwotCQliYW5kID0gSUVFRTgwMjExXzUyR0haX0JBTkQgfCBJRUVFODAyMTFfMjRHSFpfQkFORDsKLQkJbW9kdWxhdGlvbiA9IElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04gfAotCQkgICAgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OOworCQliYW5kID0gTElCSVBXXzUyR0haX0JBTkQgfCBMSUJJUFdfMjRHSFpfQkFORDsKKwkJbW9kdWxhdGlvbiA9IExJQklQV19PRkRNX01PRFVMQVRJT04gfAorCQkgICAgTElCSVBXX0NDS19NT0RVTEFUSU9OOwogCQlwcml2LT5hZGFwdGVyID0gSVBXXzI5MTVBQkc7CiAJCXByaXYtPmllZWUtPm1vZGUgPSBJRUVFX0EgfCBJRUVFX0cgfCBJRUVFX0I7CiAJfSBlbHNlIHsKQEAgLTg2MjAsOSArODYzNyw5IEBACiAJCQkgICAgICAgIkNvbm5lY3Rpb25cbiIpOwogCiAJCXByaXYtPmllZWUtPmFiZ190cnVlID0gMDsKLQkJYmFuZCA9IElFRUU4MDIxMV8yNEdIWl9CQU5EOwotCQltb2R1bGF0aW9uID0gSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTiB8Ci0JCSAgICBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT047CisJCWJhbmQgPSBMSUJJUFdfMjRHSFpfQkFORDsKKwkJbW9kdWxhdGlvbiA9IExJQklQV19PRkRNX01PRFVMQVRJT04gfAorCQkgICAgTElCSVBXX0NDS19NT0RVTEFUSU9OOwogCQlwcml2LT5hZGFwdGVyID0gSVBXXzIyMDBCRzsKIAkJcHJpdi0+aWVlZS0+bW9kZSA9IElFRUVfRyB8IElFRUVfQjsKIAl9CkBAIC04NjMwLDcgKzg2NDcsNyBAQAogCXByaXYtPmllZWUtPmZyZXFfYmFuZCA9IGJhbmQ7CiAJcHJpdi0+aWVlZS0+bW9kdWxhdGlvbiA9IG1vZHVsYXRpb247CiAKLQlwcml2LT5yYXRlc19tYXNrID0gSUVFRTgwMjExX0RFRkFVTFRfUkFURVNfTUFTSzsKKwlwcml2LT5yYXRlc19tYXNrID0gTElCSVBXX0RFRkFVTFRfUkFURVNfTUFTSzsKIAogCXByaXYtPmRpc2Fzc29jaWF0ZV90aHJlc2hvbGQgPSBJUFdfTUJfRElTQVNTT0NJQVRFX1RIUkVTSE9MRF9ERUZBVUxUOwogCXByaXYtPnJvYW1pbmdfdGhyZXNob2xkID0gSVBXX01CX1JPQU1JTkdfVEhSRVNIT0xEX0RFRkFVTFQ7CkBAIC04NjU2LDI0ICs4NjczLDYgQEAKICAqCiAgKi8KIAotc3RhdGljIGludCBpcHdfd3hfZ2V0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykKLQkJc3RyY3B5KHdycXUtPm5hbWUsICJyYWRpbyBvZmYiKTsKLQllbHNlIGlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkKLQkJc3RyY3B5KHdycXUtPm5hbWUsICJ1bmFzc29jaWF0ZWQiKTsKLQllbHNlCi0JCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAiSUVFRSA4MDIuMTElYyIsCi0JCQkgaXB3X21vZGVzW3ByaXYtPmFzc29jX3JlcXVlc3QuaWVlZV9tb2RlXSk7Ci0JSVBXX0RFQlVHX1dYKCJOYW1lOiAlc1xuIiwgd3JxdS0+bmFtZSk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgaXB3X3NldF9jaGFubmVsKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTggY2hhbm5lbCkKIHsKIAlpZiAoY2hhbm5lbCA9PSAwKSB7CkBAIC04NzMwLDggKzg3MjksOCBAQAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyA9IGllZWU4MDIxMV9nZXRfZ2VvKHByaXYtPmllZWUpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJY29uc3Qgc3RydWN0IGxpYmlwd19nZW8gKmdlbyA9IGxpYmlwd19nZXRfZ2VvKHByaXYtPmllZWUpOwogCXN0cnVjdCBpd19mcmVxICpmd3JxID0gJndycXUtPmZyZXE7CiAJaW50IHJldCA9IDAsIGk7CiAJdTggY2hhbm5lbCwgZmxhZ3M7CkBAIC04NzQ2LDIzICs4NzQ1LDIzIEBACiAJfQogCS8qIGlmIHNldHRpbmcgYnkgZnJlcSBjb252ZXJ0IHRvIGNoYW5uZWwgKi8KIAlpZiAoZndycS0+ZSA9PSAxKSB7Ci0JCWNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcV90b19jaGFubmVsKHByaXYtPmllZWUsIGZ3cnEtPm0pOworCQljaGFubmVsID0gbGliaXB3X2ZyZXFfdG9fY2hhbm5lbChwcml2LT5pZWVlLCBmd3JxLT5tKTsKIAkJaWYgKGNoYW5uZWwgPT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZQogCQljaGFubmVsID0gZndycS0+bTsKIAotCWlmICghKGJhbmQgPSBpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBjaGFubmVsKSkpCisJaWYgKCEoYmFuZCA9IGxpYmlwd19pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIGNoYW5uZWwpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7Ci0JCWkgPSBpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBjaGFubmVsKTsKKwkJaSA9IGxpYmlwd19jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIGNoYW5uZWwpOwogCQlpZiAoaSA9PSAtMSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWZsYWdzID0gKGJhbmQgPT0gSUVFRTgwMjExXzI0R0haX0JBTkQpID8KKwkJZmxhZ3MgPSAoYmFuZCA9PSBMSUJJUFdfMjRHSFpfQkFORCkgPwogCQkgICAgZ2VvLT5iZ1tpXS5mbGFncyA6IGdlby0+YVtpXS5mbGFnczsKLQkJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSkgeworCQlpZiAoZmxhZ3MgJiBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZKSB7CiAJCQlJUFdfREVCVUdfV1goIkludmFsaWQgQWQtSG9jIGNoYW5uZWwgZm9yIDgwMi4xMWFcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTg3NzksNyArODc3OCw3IEBACiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJd3JxdS0+ZnJlcS5lID0gMDsKIApAQCAtODc5MCwxNiArODc4OSwxNiBAQAogCSAgICBwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFUSU5HIHwgU1RBVFVTX0FTU09DSUFURUQpKSB7CiAJCWludCBpOwogCi0JCWkgPSBpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBwcml2LT5jaGFubmVsKTsKKwkJaSA9IGxpYmlwd19jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpOwogCQlCVUdfT04oaSA9PSAtMSk7CiAJCXdycXUtPmZyZXEuZSA9IDE7CiAKLQkJc3dpdGNoIChpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBwcml2LT5jaGFubmVsKSkgewotCQljYXNlIElFRUU4MDIxMV81MkdIWl9CQU5EOgorCQlzd2l0Y2ggKGxpYmlwd19pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpKSB7CisJCWNhc2UgTElCSVBXXzUyR0haX0JBTkQ6CiAJCQl3cnF1LT5mcmVxLm0gPSBwcml2LT5pZWVlLT5nZW8uYVtpXS5mcmVxICogMTAwMDAwOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBJRUVFODAyMTFfMjRHSFpfQkFORDoKKwkJY2FzZSBMSUJJUFdfMjRHSFpfQkFORDoKIAkJCXdycXUtPmZyZXEubSA9IHByaXYtPmllZWUtPmdlby5iZ1tpXS5mcmVxICogMTAwMDAwOwogCQkJYnJlYWs7CiAKQEAgLTg4MTgsNyArODgxNyw3IEBACiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBlcnIgPSAwOwogCiAJSVBXX0RFQlVHX1dYKCJTZXQgTU9ERTogJWRcbiIsIHdycXUtPm1vZGUpOwpAQCAtODg3MCw3ICs4ODY5LDcgQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXdycXUtPm1vZGUgPSBwcml2LT5pZWVlLT5pd19tb2RlOwogCUlQV19ERUJVR19XWCgiR2V0IE1PREUgLT4gJWRcbiIsIHdycXUtPm1vZGUpOwpAQCAtODg5OSw5ICs4ODk4LDkgQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKWV4dHJhOwotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8gPSBpZWVlODAyMTFfZ2V0X2dlbyhwcml2LT5pZWVlKTsKKwljb25zdCBzdHJ1Y3QgbGliaXB3X2dlbyAqZ2VvID0gbGliaXB3X2dldF9nZW8ocHJpdi0+aWVlZSk7CiAJaW50IGkgPSAwLCBqOwogCiAJd3JxdS0+ZGF0YS5sZW5ndGggPSBzaXplb2YoKnJhbmdlKTsKQEAgLTg5NDUsNyArODk0NCw3IEBACiAJaWYgKHByaXYtPmllZWUtPm1vZGUgJiAoSUVFRV9CIHwgSUVFRV9HKSkgewogCQlmb3IgKGogPSAwOyBqIDwgZ2VvLT5iZ19jaGFubmVscyAmJiBpIDwgSVdfTUFYX0ZSRVFVRU5DSUVTOyBqKyspIHsKIAkJCWlmICgocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJgotCQkJICAgIChnZW8tPmJnW2pdLmZsYWdzICYgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSkpCisJCQkgICAgKGdlby0+Ymdbal0uZmxhZ3MgJiBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZKSkKIAkJCQljb250aW51ZTsKIAogCQkJcmFuZ2UtPmZyZXFbaV0uaSA9IGdlby0+Ymdbal0uY2hhbm5lbDsKQEAgLTg5NTgsNyArODk1Nyw3IEBACiAJaWYgKHByaXYtPmllZWUtPm1vZGUgJiBJRUVFX0EpIHsKIAkJZm9yIChqID0gMDsgaiA8IGdlby0+YV9jaGFubmVscyAmJiBpIDwgSVdfTUFYX0ZSRVFVRU5DSUVTOyBqKyspIHsKIAkJCWlmICgocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJgotCQkJICAgIChnZW8tPmFbal0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZKSkKKwkJCSAgICAoZ2VvLT5hW2pdLmZsYWdzICYgTElCSVBXX0NIX1BBU1NJVkVfT05MWSkpCiAJCQkJY29udGludWU7CiAKIAkJCXJhbmdlLT5mcmVxW2ldLmkgPSBnZW8tPmFbal0uY2hhbm5lbDsKQEAgLTg5OTMsNyArODk5Miw3IEBACiAJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFueVtdID0gewogCQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCkBAIC05MDQyLDcgKzkwNDEsNyBAQAogCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAkvKiBJZiB3ZSBhcmUgYXNzb2NpYXRlZCwgdHJ5aW5nIHRvIGFzc29jaWF0ZSwgb3IgaGF2ZSBhIHN0YXRpY2FsbHkKIAkgKiBjb25maWd1cmVkIEJTU0lEIHRoZW4gcmV0dXJuIHRoYXQ7IG90aGVyd2lzZSByZXR1cm4gQU5ZICovCkBAIC05MDY0LDcgKzkwNjMsNyBAQAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogICAgICAgICBpbnQgbGVuZ3RoOwogCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7CiAKQEAgLTkxMTAsNyArOTEwOSw3IEBACiAJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKIAogCS8qIElmIHdlIGFyZSBhc3NvY2lhdGVkLCB0cnlpbmcgdG8gYXNzb2NpYXRlLCBvciBoYXZlIGEgc3RhdGljYWxseQpAQCAtOTEzNiw3ICs5MTM1LDcgQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAlJUFdfREVCVUdfV1goIlNldHRpbmcgbmljayB0byAnJXMnXG4iLCBleHRyYSk7CiAJaWYgKHdycXUtPmRhdGEubGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpCkBAIC05MTU1LDcgKzkxNTQsNyBAQAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlJUFdfREVCVUdfV1goIkdldHRpbmcgbmlja1xuIik7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXdycXUtPmRhdGEubGVuZ3RoID0gc3RybGVuKHByaXYtPm5pY2spOwpAQCAtOTE2OSw3ICs5MTY4LDcgQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgZXJyID0gMDsKIAogCUlQV19ERUJVR19XWCgiU2V0dGluZyByb2FtaW5nIHRocmVzaG9sZCB0byAlZFxuIiwgd3JxdS0+c2Vucy52YWx1ZSk7CkBAIC05MTk5LDcgKzkxOTgsNyBAQAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAl3cnF1LT5zZW5zLmZpeGVkID0gMTsKIAl3cnF1LT5zZW5zLnZhbHVlID0gcHJpdi0+cm9hbWluZ190aHJlc2hvbGQ7CkBAIC05MjE2LDcgKzkyMTUsNyBAQAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJLyogVE9ETzogV2Ugc2hvdWxkIHVzZSBzZW1hcGhvcmVzIG9yIGxvY2tzIGZvciBhY2Nlc3MgdG8gcHJpdiAqLwotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAl1MzIgdGFyZ2V0X3JhdGUgPSB3cnF1LT5iaXRyYXRlLnZhbHVlOwogCXUzMiBmaXhlZCwgbWFzazsKIApAQCAtOTIyNiw3ICs5MjI1LDcgQEAKIAogCWlmICh0YXJnZXRfcmF0ZSA9PSAtMSkgewogCQlmaXhlZCA9IDA7Ci0JCW1hc2sgPSBJRUVFODAyMTFfREVGQVVMVF9SQVRFU19NQVNLOworCQltYXNrID0gTElCSVBXX0RFRkFVTFRfUkFURVNfTUFTSzsKIAkJLyogTm93IHdlIHNob3VsZCByZWFzc29jaWF0ZSAqLwogCQlnb3RvIGFwcGx5OwogCX0KQEAgLTkyMzUsNjIgKzkyMzQsNjIgQEAKIAlmaXhlZCA9IHdycXUtPmJpdHJhdGUuZml4ZWQ7CiAKIAlpZiAodGFyZ2V0X3JhdGUgPT0gMTAwMDAwMCB8fCAhZml4ZWQpCi0JCW1hc2sgfD0gSUVFRTgwMjExX0NDS19SQVRFXzFNQl9NQVNLOworCQltYXNrIHw9IExJQklQV19DQ0tfUkFURV8xTUJfTUFTSzsKIAlpZiAodGFyZ2V0X3JhdGUgPT0gMTAwMDAwMCkKIAkJZ290byBhcHBseTsKIAogCWlmICh0YXJnZXRfcmF0ZSA9PSAyMDAwMDAwIHx8ICFmaXhlZCkKLQkJbWFzayB8PSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1CX01BU0s7CisJCW1hc2sgfD0gTElCSVBXX0NDS19SQVRFXzJNQl9NQVNLOwogCWlmICh0YXJnZXRfcmF0ZSA9PSAyMDAwMDAwKQogCQlnb3RvIGFwcGx5OwogCiAJaWYgKHRhcmdldF9yYXRlID09IDU1MDAwMDAgfHwgIWZpeGVkKQotCQltYXNrIHw9IElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSzsKKwkJbWFzayB8PSBMSUJJUFdfQ0NLX1JBVEVfNU1CX01BU0s7CiAJaWYgKHRhcmdldF9yYXRlID09IDU1MDAwMDApCiAJCWdvdG8gYXBwbHk7CiAKIAlpZiAodGFyZ2V0X3JhdGUgPT0gNjAwMDAwMCB8fCAhZml4ZWQpCi0JCW1hc2sgfD0gSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSzsKKwkJbWFzayB8PSBMSUJJUFdfT0ZETV9SQVRFXzZNQl9NQVNLOwogCWlmICh0YXJnZXRfcmF0ZSA9PSA2MDAwMDAwKQogCQlnb3RvIGFwcGx5OwogCiAJaWYgKHRhcmdldF9yYXRlID09IDkwMDAwMDAgfHwgIWZpeGVkKQotCQltYXNrIHw9IElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0s7CisJCW1hc2sgfD0gTElCSVBXX09GRE1fUkFURV85TUJfTUFTSzsKIAlpZiAodGFyZ2V0X3JhdGUgPT0gOTAwMDAwMCkKIAkJZ290byBhcHBseTsKIAogCWlmICh0YXJnZXRfcmF0ZSA9PSAxMTAwMDAwMCB8fCAhZml4ZWQpCi0JCW1hc2sgfD0gSUVFRTgwMjExX0NDS19SQVRFXzExTUJfTUFTSzsKKwkJbWFzayB8PSBMSUJJUFdfQ0NLX1JBVEVfMTFNQl9NQVNLOwogCWlmICh0YXJnZXRfcmF0ZSA9PSAxMTAwMDAwMCkKIAkJZ290byBhcHBseTsKIAogCWlmICh0YXJnZXRfcmF0ZSA9PSAxMjAwMDAwMCB8fCAhZml4ZWQpCi0JCW1hc2sgfD0gSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0s7CisJCW1hc2sgfD0gTElCSVBXX09GRE1fUkFURV8xMk1CX01BU0s7CiAJaWYgKHRhcmdldF9yYXRlID09IDEyMDAwMDAwKQogCQlnb3RvIGFwcGx5OwogCiAJaWYgKHRhcmdldF9yYXRlID09IDE4MDAwMDAwIHx8ICFmaXhlZCkKLQkJbWFzayB8PSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUJfTUFTSzsKKwkJbWFzayB8PSBMSUJJUFdfT0ZETV9SQVRFXzE4TUJfTUFTSzsKIAlpZiAodGFyZ2V0X3JhdGUgPT0gMTgwMDAwMDApCiAJCWdvdG8gYXBwbHk7CiAKIAlpZiAodGFyZ2V0X3JhdGUgPT0gMjQwMDAwMDAgfHwgIWZpeGVkKQotCQltYXNrIHw9IElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQl9NQVNLOworCQltYXNrIHw9IExJQklQV19PRkRNX1JBVEVfMjRNQl9NQVNLOwogCWlmICh0YXJnZXRfcmF0ZSA9PSAyNDAwMDAwMCkKIAkJZ290byBhcHBseTsKIAogCWlmICh0YXJnZXRfcmF0ZSA9PSAzNjAwMDAwMCB8fCAhZml4ZWQpCi0JCW1hc2sgfD0gSUVFRTgwMjExX09GRE1fUkFURV8zNk1CX01BU0s7CisJCW1hc2sgfD0gTElCSVBXX09GRE1fUkFURV8zNk1CX01BU0s7CiAJaWYgKHRhcmdldF9yYXRlID09IDM2MDAwMDAwKQogCQlnb3RvIGFwcGx5OwogCiAJaWYgKHRhcmdldF9yYXRlID09IDQ4MDAwMDAwIHx8ICFmaXhlZCkKLQkJbWFzayB8PSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUJfTUFTSzsKKwkJbWFzayB8PSBMSUJJUFdfT0ZETV9SQVRFXzQ4TUJfTUFTSzsKIAlpZiAodGFyZ2V0X3JhdGUgPT0gNDgwMDAwMDApCiAJCWdvdG8gYXBwbHk7CiAKIAlpZiAodGFyZ2V0X3JhdGUgPT0gNTQwMDAwMDAgfHwgIWZpeGVkKQotCQltYXNrIHw9IElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLOworCQltYXNrIHw9IExJQklQV19PRkRNX1JBVEVfNTRNQl9NQVNLOwogCWlmICh0YXJnZXRfcmF0ZSA9PSA1NDAwMDAwMCkKIAkJZ290byBhcHBseTsKIApAQCAtOTMwMSw3ICs5MzAwLDcgQEAKIAlJUFdfREVCVUdfV1goIlNldHRpbmcgcmF0ZSBtYXNrIHRvIDB4JTA4WCBbJXNdXG4iLAogCQkgICAgIG1hc2ssIGZpeGVkID8gImZpeGVkIiA6ICJzdWItcmF0ZXMiKTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaWYgKG1hc2sgPT0gSUVFRTgwMjExX0RFRkFVTFRfUkFURVNfTUFTSykgeworCWlmIChtYXNrID09IExJQklQV19ERUZBVUxUX1JBVEVTX01BU0spIHsKIAkJcHJpdi0+Y29uZmlnICY9IH5DRkdfRklYRURfUkFURTsKIAkJaXB3X3NldF9maXhlZF9yYXRlKHByaXYsIHByaXYtPmllZWUtPm1vZGUpOwogCX0gZWxzZQpAQCAtOTMyOCw3ICs5MzI3LDcgQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXdycXUtPmJpdHJhdGUudmFsdWUgPSBwcml2LT5sYXN0X3JhdGU7CiAJd3JxdS0+Yml0cmF0ZS5maXhlZCA9IChwcml2LT5jb25maWcgJiBDRkdfRklYRURfUkFURSkgPyAxIDogMDsKQEAgLTkzNDEsNyArOTM0MCw3IEBACiAJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHdycXUtPnJ0cy5kaXNhYmxlZCB8fCAhd3JxdS0+cnRzLmZpeGVkKQogCQlwcml2LT5ydHNfdGhyZXNob2xkID0gREVGQVVMVF9SVFNfVEhSRVNIT0xEOwpAQCAtOTM2NCw3ICs5MzYzLDcgQEAKIAkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAl3cnF1LT5ydHMudmFsdWUgPSBwcml2LT5ydHNfdGhyZXNob2xkOwogCXdycXUtPnJ0cy5maXhlZCA9IDA7CS8qIG5vIGF1dG8gc2VsZWN0ICovCkBAIC05Mzc4LDcgKzkzNzcsNyBAQAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBlcnIgPSAwOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtOTQxMiw3ICs5NDExLDcgQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJd3JxdS0+cG93ZXIudmFsdWUgPSBwcml2LT50eF9wb3dlcjsKIAl3cnF1LT5wb3dlci5maXhlZCA9IDE7CkBAIC05NDMwLDcgKzk0MjksNyBAQAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHdycXUtPmZyYWcuZGlzYWJsZWQgfHwgIXdycXUtPmZyYWcuZml4ZWQpCiAJCXByaXYtPmllZWUtPmZ0cyA9IERFRkFVTFRfRlRTOwpAQCAtOTQ1NCw3ICs5NDUzLDcgQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXdycXUtPmZyYWcudmFsdWUgPSBwcml2LT5pZWVlLT5mdHM7CiAJd3JxdS0+ZnJhZy5maXhlZCA9IDA7CS8qIG5vIGF1dG8gc2VsZWN0ICovCkBAIC05NDY5LDcgKzk0NjgsNyBAQAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJaWYgKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTElGRVRJTUUgfHwgd3JxdS0+cmV0cnkuZGlzYWJsZWQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtOTUwMiw3ICs5NTAxLDcgQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAl3cnF1LT5yZXRyeS5kaXNhYmxlZCA9IDA7CkBAIC05NTMzLDcgKzk1MzIsNyBAQAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKnJlcSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKilleHRyYTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrID0gTlVMTDsKIApAQCAtOTU2OSwyMCArOTU2OCwyMCBAQAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfc2Nhbihwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKKwlyZXR1cm4gbGliaXB3X3d4X2dldF9zY2FuKHByaXYtPmllZWUsIGluZm8sIHdycXUsIGV4dHJhKTsKIH0KIAogc3RhdGljIGludCBpcHdfd3hfc2V0X2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICprZXkpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCByZXQ7CiAJdTMyIGNhcCA9IHByaXYtPmNhcGFiaWxpdHk7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JcmV0ID0gaWVlZTgwMjExX3d4X3NldF9lbmNvZGUocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwga2V5KTsKKwlyZXQgPSBsaWJpcHdfd3hfc2V0X2VuY29kZShwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBrZXkpOwogCiAJLyogSW4gSUJTUyBtb2RlLCB3ZSBuZWVkIHRvIG5vdGlmeSB0aGUgZmlybXdhcmUgdG8gdXBkYXRlCiAJICogdGhlIGJlYWNvbiBpbmZvIGFmdGVyIHdlIGNoYW5nZWQgdGhlIGNhcGFiaWxpdHkuICovCkBAIC05NTk5LDE1ICs5NTk4LDE1IEBACiAJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXJldHVybiBpZWVlODAyMTFfd3hfZ2V0X2VuY29kZShwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBrZXkpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJcmV0dXJuIGxpYmlwd193eF9nZXRfZW5jb2RlKHByaXYtPmllZWUsIGluZm8sIHdycXUsIGtleSk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3d4X3NldF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBlcnI7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmICh3cnF1LT5wb3dlci5kaXNhYmxlZCkgewpAQCAtOTY1OCw3ICs5NjU3LDcgQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKCEocHJpdi0+cG93ZXJfbW9kZSAmIElQV19QT1dFUl9FTkFCTEVEKSkKIAkJd3JxdS0+cG93ZXIuZGlzYWJsZWQgPSAxOwpAQCAtOTY3NSw3ICs5Njc0LDcgQEAKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgbW9kZSA9ICooaW50ICopZXh0cmE7CiAJaW50IGVycjsKIApAQCAtOTcwMSw3ICs5NzAwLDcgQEAKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgbGV2ZWwgPSBJUFdfUE9XRVJfTEVWRUwocHJpdi0+cG93ZXJfbW9kZSk7CiAJY2hhciAqcCA9IGV4dHJhOwogCkBAIC05NzMzLDcgKzk3MzIsNyBAQAogCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IG1vZGUgPSAqKGludCAqKWV4dHJhOwogCXU4IGJhbmQgPSAwLCBtb2R1bGF0aW9uID0gMDsKIApAQCAtOTc0NSw4ICs5NzQ0LDggQEAKIAlpZiAocHJpdi0+YWRhcHRlciA9PSBJUFdfMjkxNUFCRykgewogCQlwcml2LT5pZWVlLT5hYmdfdHJ1ZSA9IDE7CiAJCWlmIChtb2RlICYgSUVFRV9BKSB7Ci0JCQliYW5kIHw9IElFRUU4MDIxMV81MkdIWl9CQU5EOwotCQkJbW9kdWxhdGlvbiB8PSBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OOworCQkJYmFuZCB8PSBMSUJJUFdfNTJHSFpfQkFORDsKKwkJCW1vZHVsYXRpb24gfD0gTElCSVBXX09GRE1fTU9EVUxBVElPTjsKIAkJfSBlbHNlCiAJCQlwcml2LT5pZWVlLT5hYmdfdHJ1ZSA9IDA7CiAJfSBlbHNlIHsKQEAgLTk3NjEsMTQgKzk3NjAsMTQgQEAKIAl9CiAKIAlpZiAobW9kZSAmIElFRUVfQikgewotCQliYW5kIHw9IElFRUU4MDIxMV8yNEdIWl9CQU5EOwotCQltb2R1bGF0aW9uIHw9IElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTjsKKwkJYmFuZCB8PSBMSUJJUFdfMjRHSFpfQkFORDsKKwkJbW9kdWxhdGlvbiB8PSBMSUJJUFdfQ0NLX01PRFVMQVRJT047CiAJfSBlbHNlCiAJCXByaXYtPmllZWUtPmFiZ190cnVlID0gMDsKIAogCWlmIChtb2RlICYgSUVFRV9HKSB7Ci0JCWJhbmQgfD0gSUVFRTgwMjExXzI0R0haX0JBTkQ7Ci0JCW1vZHVsYXRpb24gfD0gSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTjsKKwkJYmFuZCB8PSBMSUJJUFdfMjRHSFpfQkFORDsKKwkJbW9kdWxhdGlvbiB8PSBMSUJJUFdfT0ZETV9NT0RVTEFUSU9OOwogCX0gZWxzZQogCQlwcml2LT5pZWVlLT5hYmdfdHJ1ZSA9IDA7CiAKQEAgLTk3OTgsNyArOTc5Nyw3IEBACiAJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJc3dpdGNoIChwcml2LT5pZWVlLT5tb2RlKSB7CiAJY2FzZSBJRUVFX0E6CkBAIC05ODM5LDcgKzk4MzgsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBtb2RlID0gKihpbnQgKilleHRyYTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJLyogU3dpdGNoaW5nIGZyb20gU0hPUlQgLT4gTE9ORyByZXF1aXJlcyBhIGRpc2Fzc29jaWF0aW9uICovCkBAIC05ODcyLDcgKzk4NzEsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1BSRUFNQkxFX0xPTkcpCiAJCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAibG9uZyAoMSkiKTsKQEAgLTk4ODcsNyArOTg4Niw3IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCAqcGFybXMgPSAoaW50ICopZXh0cmE7CiAJaW50IGVuYWJsZSA9IChwYXJtc1swXSA+IDApOwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKQEAgLTk5MjEsNyArOTkyMCw3IEBACiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCUlQV19ERUJVR19XWCgiUkVTRVRcbiIpOwogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWRhcHRlcl9yZXN0YXJ0KTsKIAlyZXR1cm4gMDsKQEAgLTk5MzEsNyArOTkzMCw3IEBACiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdV9zZWMgPSB7CiAJCS5lbmNvZGluZyA9IHsKIAkJCSAgICAgLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVELApAQCAtOTk1NCw3ICs5OTUzLDcgQEAKIAlpcHdfcmFkaW9fa2lsbF9zdyhwcml2LCBwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9TVyk7CiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlpZWVlODAyMTFfd3hfc2V0X2VuY29kZShwcml2LT5pZWVlLCBpbmZvLCAmd3JxdV9zZWMsIE5VTEwpOworCWxpYmlwd193eF9zZXRfZW5jb2RlKHByaXYtPmllZWUsIGluZm8sICZ3cnF1X3NlYywgTlVMTCk7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykpIHsKQEAgLTk5NzMsNyArOTk3Miw3IEBACiAvKiBSZWJhc2UgdGhlIFdFIElPQ1RMcyB0byB6ZXJvIGZvciB0aGUgaGFuZGxlciBhcnJheSAqLwogI2RlZmluZSBJV19JT0NUTCh4KSBbKHgpLVNJT0NTSVdDT01NSVRdCiBzdGF0aWMgaXdfaGFuZGxlciBpcHdfd3hfaGFuZGxlcnNbXSA9IHsKLQlJV19JT0NUTChTSU9DR0lXTkFNRSkgPSBpcHdfd3hfZ2V0X25hbWUsCisJSVdfSU9DVEwoU0lPQ0dJV05BTUUpID0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3bmFtZSwKIAlJV19JT0NUTChTSU9DU0lXRlJFUSkgPSBpcHdfd3hfc2V0X2ZyZXEsCiAJSVdfSU9DVEwoU0lPQ0dJV0ZSRVEpID0gaXB3X3d4X2dldF9mcmVxLAogCUlXX0lPQ1RMKFNJT0NTSVdNT0RFKSA9IGlwd193eF9zZXRfbW9kZSwKQEAgLTEwMDk5LDcgKzEwMDk4LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICppcHdfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHM7CiAKIAl3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOwpAQCAtMTAxODAsMTMgKzEwMTc5LDEzIEBACiB0b2RvOgogCiBtb2RpZnkgdG8gc2VuZCBvbmUgdGZkIHBlciBmcmFnbWVudCBpbnN0ZWFkIG9mIHVzaW5nIGNodW5raW5nLiAgb3RoZXJ3aXNlCi13ZSBuZWVkIHRvIGhlYXZpbHkgbW9kaWZ5IHRoZSBpZWVlODAyMTFfc2tiX3RvX3R4Yi4KK3dlIG5lZWQgdG8gaGVhdmlseSBtb2RpZnkgdGhlIGxpYmlwd19za2JfdG9fdHhiLgogKi8KIAotc3RhdGljIGludCBpcHdfdHhfc2tiKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YiwKK3N0YXRpYyBpbnQgaXB3X3R4X3NrYihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBsaWJpcHdfdHhiICp0eGIsCiAJCQkgICAgIGludCBwcmkpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHJxb3MgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcnFvcyAqKQorCXN0cnVjdCBsaWJpcHdfaGRyXzNhZGRycW9zICpoZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfM2FkZHJxb3MgKikKIAkgICAgdHhiLT5mcmFnbWVudHNbMF0tPmRhdGE7CiAJaW50IGkgPSAwOwogCXN0cnVjdCB0ZmRfZnJhbWUgKnRmZDsKQEAgLTEwMTk4LDEzICsxMDE5NywxMiBAQAogI2VuZGlmCiAJc3RydWN0IGNseDJfcXVldWUgKnEgPSAmdHhxLT5xOwogCXU4IGlkLCBoZHJfbGVuLCB1bmljYXN0OwotCXUxNiByZW1haW5pbmdfYnl0ZXM7CiAJaW50IGZjOwogCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKQogCQlnb3RvIGRyb3A7CiAKLQloZHJfbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKTsKKwloZHJfbGVuID0gbGliaXB3X2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKTsKIAlzd2l0Y2ggKHByaXYtPmllZWUtPml3X21vZGUpIHsKIAljYXNlIElXX01PREVfQURIT0M6CiAJCXVuaWNhc3QgPSAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSk7CkBAIC0xMDIzNyw3ICsxMDIzNSw2IEBACiAKIAl0ZmQtPnUuZGF0YS5jbWRfaWQgPSBESU5PX0NNRF9UWDsKIAl0ZmQtPnUuZGF0YS5sZW4gPSBjcHVfdG9fbGUxNih0eGItPnBheWxvYWRfc2l6ZSk7Ci0JcmVtYWluaW5nX2J5dGVzID0gdHhiLT5wYXlsb2FkX3NpemU7CiAKIAlpZiAocHJpdi0+YXNzb2NfcmVxdWVzdC5pZWVlX21vZGUgPT0gSVBXX0JfTU9ERSkKIAkJdGZkLT51LmRhdGEudHhfZmxhZ3NfZXh0IHw9IERDVF9GTEFHX0VYVF9NT0RFX0NDSzsKQEAgLTEwMzc0LDEzICsxMDM3MSwxMyBAQAogCiAgICAgICBkcm9wOgogCUlQV19ERUJVR19EUk9QKCJTaWxlbnRseSBkcm9wcGluZyBUeCBwYWNrZXQuXG4iKTsKLQlpZWVlODAyMTFfdHhiX2ZyZWUodHhiKTsKKwlsaWJpcHdfdHhiX2ZyZWUodHhiKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IGlwd19uZXRfaXNfcXVldWVfZnVsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcHJpKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKICNpZmRlZiBDT05GSUdfSVBXMjIwMF9RT1MKIAlpbnQgdHhfaWQgPSBpcHdfZ2V0X3R4X3F1ZXVlX251bWJlcihwcml2LCBwcmkpOwogCXN0cnVjdCBjbHgyX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4X2lkXTsKQEAgLTEwMzk2LDkgKzEwMzkzLDkgQEAKIAogI2lmZGVmIENPTkZJR19JUFcyMjAwX1BST01JU0NVT1VTCiBzdGF0aWMgdm9pZCBpcHdfaGFuZGxlX3Byb21pc2N1b3VzX3R4KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiKQorCQkJCSAgICAgIHN0cnVjdCBsaWJpcHdfdHhiICp0eGIpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyBkdW1teXN0YXRzOworCXN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgZHVtbXlzdGF0czsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXU4IG47CiAJdTE2IGZpbHRlciA9IHByaXYtPnByb21fcHJpdi0+ZmlsdGVyOwpAQCAtMTA0MTEsMTcgKzEwNDA4LDE3IEBACiAKIAkvKiBGaWx0ZXJpbmcgb2YgZnJhZ21lbnQgY2hhaW5zIGlzIGRvbmUgYWdhaW5zIHRoZSBmaXJzdCBmcmFnbWVudCAqLwogCWhkciA9ICh2b2lkICopdHhiLT5mcmFnbWVudHNbMF0tPmRhdGE7Ci0JaWYgKGllZWU4MDIxMV9pc19tYW5hZ2VtZW50KGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CisJaWYgKGxpYmlwd19pc19tYW5hZ2VtZW50KGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9OT19NR01UKQogCQkJcmV0dXJuOwogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTUdNVF9IRUFERVJfT05MWSkKIAkJCWhkcl9vbmx5ID0gMTsKLQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19jb250cm9sKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CisJfSBlbHNlIGlmIChsaWJpcHdfaXNfY29udHJvbChsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpKSkgewogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTk9fQ1RMKQogCQkJcmV0dXJuOwogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fQ1RMX0hFQURFUl9PTkxZKQogCQkJaGRyX29ubHkgPSAxOwotCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RhdGEobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwl9IGVsc2UgaWYgKGxpYmlwd19pc19kYXRhKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9OT19EQVRBKQogCQkJcmV0dXJuOwogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fREFUQV9IRUFERVJfT05MWSkKQEAgLTEwNDM2LDcgKzEwNDMzLDcgQEAKIAogCQlpZiAoaGRyX29ubHkpIHsKIAkJCWhkciA9ICh2b2lkICopc3JjLT5kYXRhOwotCQkJbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSk7CisJCQlsZW4gPSBsaWJpcHdfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpKTsKIAkJfSBlbHNlCiAJCQlsZW4gPSBzcmMtPmxlbjsKIApAQCAtMTA0NzAsMTggKzEwNDY3LDE4IEBACiAKIAkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShzcmMsIHNrYl9wdXQoZHN0LCBsZW4pLCBsZW4pOwogCi0JCWlmICghaWVlZTgwMjExX3J4KHByaXYtPnByb21fcHJpdi0+aWVlZSwgZHN0LCAmZHVtbXlzdGF0cykpCisJCWlmICghbGliaXB3X3J4KHByaXYtPnByb21fcHJpdi0+aWVlZSwgZHN0LCAmZHVtbXlzdGF0cykpCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShkc3QpOwogCX0KIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGlwd19uZXRfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIsCi0JCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByaSkKK3N0YXRpYyBuZXRkZXZfdHhfdCBpcHdfbmV0X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3QgbGliaXB3X3R4YiAqdHhiLAorCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcHJpKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7CisJbmV0ZGV2X3R4X3QgcmV0OwogCiAJSVBXX0RFQlVHX1RYKCJkZXYtPnhtaXQoJWQgYnl0ZXMpXG4iLCB0eGItPnBheWxvYWRfc2l6ZSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTEwNTA2LDcgKzEwNTAzLDcgQEAKIAogc3RhdGljIGludCBpcHdfbmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQpAQCAtMTA1MjQsNyArMTA1MjEsNyBAQAogc3RhdGljIHZvaWQgaXB3X2V0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnAgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcCA9IGxpYmlwd19wcml2KGRldik7CiAJY2hhciB2ZXJzWzY0XTsKIAljaGFyIGRhdGVbMzJdOwogCXUzMiBsZW47CkBAIC0xMDU0NSw3ICsxMDU0Miw3IEBACiAKIHN0YXRpYyB1MzIgaXB3X2V0aHRvb2xfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJcmV0dXJuIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgIT0gMDsKIH0KIApAQCAtMTA1NTcsNyArMTA1NTQsNyBAQAogc3RhdGljIGludCBpcHdfZXRodG9vbF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKiBieXRlcykKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnAgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcCA9IGxpYmlwd19wcml2KGRldik7CiAKIAlpZiAoZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbiA+IElQV19FRVBST01fSU1BR0VfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDU3MCw3ICsxMDU2Nyw3IEBACiBzdGF0aWMgaW50IGlwd19ldGh0b29sX3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqIGJ5dGVzKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcCA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAogCWlmIChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuID4gSVBXX0VFUFJPTV9JTUFHRV9TSVpFKQpAQCAtMTA3ODYsOSArMTA3ODMsOSBAQAogfQogCiBzdGF0aWMgdm9pZCBzaGltX19zZXRfc2VjdXJpdHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5ICpzZWMpCisJCQkgICAgICAgc3RydWN0IGxpYmlwd19zZWN1cml0eSAqc2VjKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWlmIChzZWMtPmZsYWdzICYgKDEgPDwgaSkpIHsKQEAgLTEwODczLDIxICsxMDg3MCwyMSBAQAogCW1lbXNldChyYXRlcywgMCwgc2l6ZW9mKCpyYXRlcykpOwogCS8qIGNvbmZpZ3VyZSBzdXBwb3J0ZWQgcmF0ZXMgKi8KIAlzd2l0Y2ggKHByaXYtPmllZWUtPmZyZXFfYmFuZCkgewotCWNhc2UgSUVFRTgwMjExXzUyR0haX0JBTkQ6CisJY2FzZSBMSUJJUFdfNTJHSFpfQkFORDoKIAkJcmF0ZXMtPmllZWVfbW9kZSA9IElQV19BX01PREU7CiAJCXJhdGVzLT5wdXJwb3NlID0gSVBXX1JBVEVfQ0FQQUJJTElUSUVTOwotCQlpcHdfYWRkX29mZG1fc2Nhbl9yYXRlcyhyYXRlcywgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OLAotCQkJCQlJRUVFODAyMTFfT0ZETV9ERUZBVUxUX1JBVEVTX01BU0spOworCQlpcHdfYWRkX29mZG1fc2Nhbl9yYXRlcyhyYXRlcywgTElCSVBXX0NDS19NT0RVTEFUSU9OLAorCQkJCQlMSUJJUFdfT0ZETV9ERUZBVUxUX1JBVEVTX01BU0spOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CQkvKiBNaXhlZCBvciAyLjRHaHogKi8KIAkJcmF0ZXMtPmllZWVfbW9kZSA9IElQV19HX01PREU7CiAJCXJhdGVzLT5wdXJwb3NlID0gSVBXX1JBVEVfQ0FQQUJJTElUSUVTOwotCQlpcHdfYWRkX2Nja19zY2FuX3JhdGVzKHJhdGVzLCBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT04sCi0JCQkJICAgICAgIElFRUU4MDIxMV9DQ0tfREVGQVVMVF9SQVRFU19NQVNLKTsKLQkJaWYgKHByaXYtPmllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OKSB7Ci0JCQlpcHdfYWRkX29mZG1fc2Nhbl9yYXRlcyhyYXRlcywgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OLAotCQkJCQkJSUVFRTgwMjExX09GRE1fREVGQVVMVF9SQVRFU19NQVNLKTsKKwkJaXB3X2FkZF9jY2tfc2Nhbl9yYXRlcyhyYXRlcywgTElCSVBXX0NDS19NT0RVTEFUSU9OLAorCQkJCSAgICAgICBMSUJJUFdfQ0NLX0RFRkFVTFRfUkFURVNfTUFTSyk7CisJCWlmIChwcml2LT5pZWVlLT5tb2R1bGF0aW9uICYgTElCSVBXX09GRE1fTU9EVUxBVElPTikgeworCQkJaXB3X2FkZF9vZmRtX3NjYW5fcmF0ZXMocmF0ZXMsIExJQklQV19DQ0tfTU9EVUxBVElPTiwKKwkJCQkJCUxJQklQV19PRkRNX0RFRkFVTFRfUkFURVNfTUFTSyk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTA5OTMsNyArMTA5OTAsNyBAQAogICogdGFibGUuCiAgKgogICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gaXB3X2dlb3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGliaXB3X2dlbyBpcHdfZ2Vvc1tdID0gewogCXsJCQkvKiBSZXN0cmljdGVkICovCiAJICItLS0iLAogCSAuYmdfY2hhbm5lbHMgPSAxMSwKQEAgLTExMDE1LDEwICsxMTAxMiwxMCBAQAogCSAgICAgICB7NTIwMCwgNDB9LAogCSAgICAgICB7NTIyMCwgNDR9LAogCSAgICAgICB7NTI0MCwgNDh9LAotCSAgICAgICB7NTI2MCwgNTIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTI4MCwgNTYsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTMwMCwgNjAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTMyMCwgNjQsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkgICAgICAgezUyNjAsIDUyLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyODAsIDU2LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMDAsIDYwLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMjAsIDY0LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfX0sCiAJIH0sCiAKIAl7CQkJLyogUmVzdCBvZiBXb3JsZCAqLwpAQCAtMTEwNDMsMTAgKzExMDQwLDEwIEBACiAJICAgICAgIHs1MjAwLCA0MH0sCiAJICAgICAgIHs1MjIwLCA0NH0sCiAJICAgICAgIHs1MjQwLCA0OH0sCi0JICAgICAgIHs1MjYwLCA1MiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MjgwLCA1NiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MzAwLCA2MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MzIwLCA2NCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjYwLCA1MiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjgwLCA1NiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzAwLCA2MCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzIwLCA2NCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCiAJICAgICAgIHs1NzQ1LCAxNDl9LAogCSAgICAgICB7NTc2NSwgMTUzfSwKIAkgICAgICAgezU3ODUsIDE1N30sCkBAIC0xMTA2NiwxNSArMTEwNjMsMTUgQEAKIAkgICAgICAgezUyMDAsIDQwfSwKIAkgICAgICAgezUyMjAsIDQ0fSwKIAkgICAgICAgezUyNDAsIDQ4fSwKLQkgICAgICAgezUyNjAsIDUyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUyODAsIDU2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUzMDAsIDYwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUzMjAsIDY0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU3NDUsIDE0OSwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NzY1LCAxNTMsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTc4NSwgMTU3LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU4MDUsIDE2MSwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1ODI1LCAxNjUsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkgICAgICAgezUyNjAsIDUyLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyODAsIDU2LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMDAsIDYwLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMjAsIDY0LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3NDUsIDE0OSwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NzY1LCAxNTMsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTc4NSwgMTU3LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU4MDUsIDE2MSwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1ODI1LCAxNjUsIExJQklQV19DSF9QQVNTSVZFX09OTFl9fSwKIAkgfSwKIAogCXsJCQkvKiBDdXN0b20gSmFwYW4gKi8KQEAgLTExMTExLDIxICsxMTEwOCwyMSBAQAogCSAgICAgICB7NTIwMCwgNDB9LAogCSAgICAgICB7NTIyMCwgNDR9LAogCSAgICAgICB7NTI0MCwgNDh9LAotCSAgICAgICB7NTI2MCwgNTIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTI4MCwgNTYsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTMwMCwgNjAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTMyMCwgNjQsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTUwMCwgMTAwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU1MjAsIDEwNCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NTQwLCAxMDgsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTU2MCwgMTEyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU1ODAsIDExNiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NjAwLCAxMjAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTYyMCwgMTI0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU2NDAsIDEyOCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NjYwLCAxMzIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTY4MCwgMTM2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU3MDAsIDE0MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX19LAorCSAgICAgICB7NTI2MCwgNTIsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTI4MCwgNTYsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTMwMCwgNjAsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTMyMCwgNjQsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTUwMCwgMTAwLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1MjAsIDEwNCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NTQwLCAxMDgsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTU2MCwgMTEyLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1ODAsIDExNiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjAwLCAxMjAsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTYyMCwgMTI0LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU2NDAsIDEyOCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjYwLCAxMzIsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTY4MCwgMTM2LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3MDAsIDE0MCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX19LAogCSB9LAogCiAJewkJCS8qIEN1c3RvbSBKYXBhbiAqLwpAQCAtMTExMzUsNyArMTExMzIsNyBAQAogCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAogCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAogCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9LCB7MjQ2NywgMTJ9LAotCQl7MjQ3MiwgMTN9LCB7MjQ4NCwgMTQsIElFRUU4MDIxMV9DSF9CX09OTFl9fSwKKwkJezI0NzIsIDEzfSwgezI0ODQsIDE0LCBMSUJJUFdfQ0hfQl9PTkxZfX0sCiAJIC5hX2NoYW5uZWxzID0gNCwKIAkgLmEgPSB7ezUxNzAsIDM0fSwgezUxOTAsIDM4fSwKIAkgICAgICAgezUyMTAsIDQyfSwgezUyMzAsIDQ2fX0sCkBAIC0xMTE0OCw4ICsxMTE0NSw4IEBACiAJCXsyNDI3LCA0fSwgezI0MzIsIDV9LCB7MjQzNywgNn0sCiAJCXsyNDQyLCA3fSwgezI0NDcsIDh9LCB7MjQ1MiwgOX0sCiAJCXsyNDU3LCAxMH0sIHsyNDYyLCAxMX0sIHsyNDY3LCAxMn0sCi0JCXsyNDcyLCAxM30sIHsyNDg0LCAxNCwgSUVFRTgwMjExX0NIX0JfT05MWSB8Ci0JCQkgICAgIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkJezI0NzIsIDEzfSwgezI0ODQsIDE0LCBMSUJJUFdfQ0hfQl9PTkxZIHwKKwkJCSAgICAgTElCSVBXX0NIX1BBU1NJVkVfT05MWX19LAogCSB9LAogCiAJewkJCS8qIEhpZ2ggQmFuZCAqLwpAQCAtMTExNTksOCArMTExNTYsOCBAQAogCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAogCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAogCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9LAotCQl7MjQ2NywgMTIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCQl7MjQ3MiwgMTMsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkJezI0NjcsIDEyLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkJezI0NzIsIDEzLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfX0sCiAJIC5hX2NoYW5uZWxzID0gNCwKIAkgLmEgPSB7ezU3NDUsIDE0OX0sIHs1NzY1LCAxNTN9LAogCSAgICAgICB7NTc4NSwgMTU3fSwgezU4MDUsIDE2MX19LApAQCAtMTExODYsMzMgKzExMTgzLDMzIEBACiAJCXsyNDI3LCA0fSwgezI0MzIsIDV9LCB7MjQzNywgNn0sCiAJCXsyNDQyLCA3fSwgezI0NDcsIDh9LCB7MjQ1MiwgOX0sCiAJCXsyNDU3LCAxMH0sIHsyNDYyLCAxMX0sCi0JCXsyNDY3LCAxMiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JCXsyNDcyLCAxMywgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX19LAorCQl7MjQ2NywgMTIsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCQl7MjQ3MiwgMTMsIExJQklQV19DSF9QQVNTSVZFX09OTFl9fSwKIAkgLmFfY2hhbm5lbHMgPSAyNCwKLQkgLmEgPSB7ezUxODAsIDM2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUyMDAsIDQwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUyMjAsIDQ0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUyNDAsIDQ4LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUyNjAsIDUyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUyODAsIDU2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUzMDAsIDYwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUzMjAsIDY0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU1MDAsIDEwMCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NTIwLCAxMDQsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTU0MCwgMTA4LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU1NjAsIDExMiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NTgwLCAxMTYsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTYwMCwgMTIwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU2MjAsIDEyNCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NjQwLCAxMjgsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTY2MCwgMTMyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU2ODAsIDEzNiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NzAwLCAxNDAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTc0NSwgMTQ5LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU3NjUsIDE1MywgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1Nzg1LCAxNTcsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTgwNSwgMTYxLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU4MjUsIDE2NSwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX19LAorCSAuYSA9IHt7NTE4MCwgMzYsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTIwMCwgNDAsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTIyMCwgNDQsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTI0MCwgNDgsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTI2MCwgNTIsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTI4MCwgNTYsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTMwMCwgNjAsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTMyMCwgNjQsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTUwMCwgMTAwLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1MjAsIDEwNCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NTQwLCAxMDgsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTU2MCwgMTEyLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1ODAsIDExNiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjAwLCAxMjAsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTYyMCwgMTI0LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU2NDAsIDEyOCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjYwLCAxMzIsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTY4MCwgMTM2LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3MDAsIDE0MCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NzQ1LCAxNDksIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTc2NSwgMTUzLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3ODUsIDE1NywgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1ODA1LCAxNjEsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTgyNSwgMTY1LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfX0sCiAJIH0sCiAKIAl7CQkJLyogRXVyb3BlICovCkBAIC0xMTIyMywxOSArMTEyMjAsMTkgQEAKIAkJezI0NDIsIDd9LCB7MjQ0NywgOH0sIHsyNDUyLCA5fSwKIAkJezI0NTcsIDEwfSwgezI0NjIsIDExfX0sCiAJIC5hX2NoYW5uZWxzID0gMTMsCi0JIC5hID0ge3s1MTgwLCAzNiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MjAwLCA0MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MjIwLCA0NCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MjQwLCA0OCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MjYwLCA1MiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MjgwLCA1NiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MzAwLCA2MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MzIwLCA2NCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NzQ1LCAxNDksIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTc2NSwgMTUzLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU3ODUsIDE1NywgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1ODA1LCAxNjEsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTgyNSwgMTY1LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfX0sCisJIC5hID0ge3s1MTgwLCAzNiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjAwLCA0MCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjIwLCA0NCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjQwLCA0OCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjYwLCA1MiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjgwLCA1NiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzAwLCA2MCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzIwLCA2NCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NzQ1LCAxNDksIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTc2NSwgMTUzLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3ODUsIDE1NywgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1ODA1LCAxNjEsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTgyNSwgMTY1LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfX0sCiAJIH0KIH07CiAKQEAgLTExMjQ2LDcgKzExMjQzLDcgQEAKIAogCS8qIEFnZSBzY2FuIGxpc3QgZW50cmllcyBmb3VuZCBiZWZvcmUgc3VzcGVuZCAqLwogCWlmIChwcml2LT5zdXNwZW5kX3RpbWUpIHsKLQkJaWVlZTgwMjExX25ldHdvcmtzX2FnZShwcml2LT5pZWVlLCBwcml2LT5zdXNwZW5kX3RpbWUpOworCQlsaWJpcHdfbmV0d29ya3NfYWdlKHByaXYtPmllZWUsIHByaXYtPnN1c3BlbmRfdGltZSk7CiAJCXByaXYtPnN1c3BlbmRfdGltZSA9IDA7CiAJfQogCkBAIC0xMTI5MSw3ICsxMTI4OCw3IEBACiAJCQkJICAgIHByaXYtPmVlcHJvbVtFRVBST01fQ09VTlRSWV9DT0RFICsgMl0pOwogCQkJaiA9IDA7CiAJCX0KLQkJaWYgKGllZWU4MDIxMV9zZXRfZ2VvKHByaXYtPmllZWUsICZpcHdfZ2Vvc1tqXSkpIHsKKwkJaWYgKGxpYmlwd19zZXRfZ2VvKHByaXYtPmllZWUsICZpcHdfZ2Vvc1tqXSkpIHsKIAkJCUlQV19XQVJOSU5HKCJDb3VsZCBub3Qgc2V0IGdlb2dyYXBoeS4iKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xMTQxOSwxNiArMTE0MTYsMTAwIEBACiAvKiBDYWxsZWQgYnkgcmVnaXN0ZXJfbmV0ZGV2KCkgKi8KIHN0YXRpYyBpbnQgaXB3X25ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlpbnQgaSwgcmMgPSAwOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJY29uc3Qgc3RydWN0IGxpYmlwd19nZW8gKmdlbyA9IGxpYmlwd19nZXRfZ2VvKHByaXYtPmllZWUpOworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSAmcHJpdi0+aWVlZS0+d2RldjsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAoaXB3X3VwKHByaXYpKSB7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCQlyZXR1cm4gLUVJTzsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG91dDsKIAl9CiAKKwltZW1jcHkod2Rldi0+d2lwaHktPnBlcm1fYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCS8qIGZpbGwtb3V0IHByaXYtPmllZWUtPmJnX2JhbmQgKi8KKwlpZiAoZ2VvLT5iZ19jaGFubmVscykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiZ19iYW5kID0gJnByaXYtPmllZWUtPmJnX2JhbmQ7CisKKwkJYmdfYmFuZC0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJCWJnX2JhbmQtPm5fY2hhbm5lbHMgPSBnZW8tPmJnX2NoYW5uZWxzOworCQliZ19iYW5kLT5jaGFubmVscyA9CisJCQlremFsbG9jKGdlby0+YmdfY2hhbm5lbHMgKgorCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwpLCBHRlBfS0VSTkVMKTsKKwkJLyogdHJhbnNsYXRlIGdlby0+YmcgdG8gYmdfYmFuZC5jaGFubmVscyAqLworCQlmb3IgKGkgPSAwOyBpIDwgZ2VvLT5iZ19jaGFubmVsczsgaSsrKSB7CisJCQliZ19iYW5kLT5jaGFubmVsc1tpXS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwkJCWJnX2JhbmQtPmNoYW5uZWxzW2ldLmNlbnRlcl9mcmVxID0gZ2VvLT5iZ1tpXS5mcmVxOworCQkJYmdfYmFuZC0+Y2hhbm5lbHNbaV0uaHdfdmFsdWUgPSBnZW8tPmJnW2ldLmNoYW5uZWw7CisJCQliZ19iYW5kLT5jaGFubmVsc1tpXS5tYXhfcG93ZXIgPSBnZW8tPmJnW2ldLm1heF9wb3dlcjsKKwkJCWlmIChnZW8tPmJnW2ldLmZsYWdzICYgTElCSVBXX0NIX1BBU1NJVkVfT05MWSkKKwkJCQliZ19iYW5kLT5jaGFubmVsc1tpXS5mbGFncyB8PQorCQkJCQlJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCQlpZiAoZ2VvLT5iZ1tpXS5mbGFncyAmIExJQklQV19DSF9OT19JQlNTKQorCQkJCWJnX2JhbmQtPmNoYW5uZWxzW2ldLmZsYWdzIHw9CisJCQkJCUlFRUU4MDIxMV9DSEFOX05PX0lCU1M7CisJCQlpZiAoZ2VvLT5iZ1tpXS5mbGFncyAmIExJQklQV19DSF9SQURBUl9ERVRFQ1QpCisJCQkJYmdfYmFuZC0+Y2hhbm5lbHNbaV0uZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX0NIQU5fUkFEQVI7CisJCQkvKiBObyBlcXVpdmFsZW50IGZvciBMSUJJUFdfQ0hfODAyMTFIX1JVTEVTLAorCQkJICAgTElCSVBXX0NIX1VOSUZPUk1fU1BSRUFESU5HLCBvcgorCQkJICAgTElCSVBXX0NIX0JfT05MWS4uLiAqLworCQl9CisJCS8qIHBvaW50IGF0IGJpdHJhdGUgaW5mbyAqLworCQliZ19iYW5kLT5iaXRyYXRlcyA9IGlwdzIyMDBfYmdfcmF0ZXM7CisJCWJnX2JhbmQtPm5fYml0cmF0ZXMgPSBpcHcyMjAwX251bV9iZ19yYXRlczsKKworCQl3ZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSBiZ19iYW5kOworCX0KKworCS8qIGZpbGwtb3V0IHByaXYtPmllZWUtPmFfYmFuZCAqLworCWlmIChnZW8tPmFfY2hhbm5lbHMpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYV9iYW5kID0gJnByaXYtPmllZWUtPmFfYmFuZDsKKworCQlhX2JhbmQtPmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOworCQlhX2JhbmQtPm5fY2hhbm5lbHMgPSBnZW8tPmFfY2hhbm5lbHM7CisJCWFfYmFuZC0+Y2hhbm5lbHMgPQorCQkJa3phbGxvYyhnZW8tPmFfY2hhbm5lbHMgKgorCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwpLCBHRlBfS0VSTkVMKTsKKwkJLyogdHJhbnNsYXRlIGdlby0+YmcgdG8gYV9iYW5kLmNoYW5uZWxzICovCisJCWZvciAoaSA9IDA7IGkgPCBnZW8tPmFfY2hhbm5lbHM7IGkrKykgeworCQkJYV9iYW5kLT5jaGFubmVsc1tpXS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwkJCWFfYmFuZC0+Y2hhbm5lbHNbaV0uY2VudGVyX2ZyZXEgPSBnZW8tPmFbaV0uZnJlcTsKKwkJCWFfYmFuZC0+Y2hhbm5lbHNbaV0uaHdfdmFsdWUgPSBnZW8tPmFbaV0uY2hhbm5lbDsKKwkJCWFfYmFuZC0+Y2hhbm5lbHNbaV0ubWF4X3Bvd2VyID0gZ2VvLT5hW2ldLm1heF9wb3dlcjsKKwkJCWlmIChnZW8tPmFbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZKQorCQkJCWFfYmFuZC0+Y2hhbm5lbHNbaV0uZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCQkJaWYgKGdlby0+YVtpXS5mbGFncyAmIExJQklQV19DSF9OT19JQlNTKQorCQkJCWFfYmFuZC0+Y2hhbm5lbHNbaV0uZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKKwkJCWlmIChnZW8tPmFbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfUkFEQVJfREVURUNUKQorCQkJCWFfYmFuZC0+Y2hhbm5lbHNbaV0uZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX0NIQU5fUkFEQVI7CisJCQkvKiBObyBlcXVpdmFsZW50IGZvciBMSUJJUFdfQ0hfODAyMTFIX1JVTEVTLAorCQkJICAgTElCSVBXX0NIX1VOSUZPUk1fU1BSRUFESU5HLCBvcgorCQkJICAgTElCSVBXX0NIX0JfT05MWS4uLiAqLworCQl9CisJCS8qIHBvaW50IGF0IGJpdHJhdGUgaW5mbyAqLworCQlhX2JhbmQtPmJpdHJhdGVzID0gaXB3MjIwMF9hX3JhdGVzOworCQlhX2JhbmQtPm5fYml0cmF0ZXMgPSBpcHcyMjAwX251bV9hX3JhdGVzOworCisJCXdkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9IGFfYmFuZDsKKwl9CisKKwlzZXRfd2lwaHlfZGV2KHdkZXYtPndpcGh5LCAmcHJpdi0+cGNpX2Rldi0+ZGV2KTsKKworCS8qIFdpdGggdGhhdCBpbmZvcm1hdGlvbiBpbiBwbGFjZSwgd2UgY2FuIG5vdyByZWdpc3RlciB0aGUgd2lwaHkuLi4gKi8KKwlpZiAod2lwaHlfcmVnaXN0ZXIod2Rldi0+d2lwaHkpKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiAvKiBQQ0kgZHJpdmVyIHN0dWZmICovCkBAIC0xMTQ1MCwxMSArMTE1MzEsMTEgQEAKIAl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMDQzLCAweDgwODYsIDB4Mjc1NCwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfSU5URUwsIDB4MTA0MywgMHg4MDg2LCAweDI3NjEsIDAsIDAsIDB9LAogCXtQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwNDMsIDB4ODA4NiwgMHgyNzYyLCAwLCAwLCAwfSwKLQl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMDRmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKLQl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0MjIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwJLyogQkcgKi8KLQl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0MjIxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwJLyogQkcgKi8KLQl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0MjIzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwJLyogQUJHICovCi0Je1BDSV9WRU5ET1JfSURfSU5URUwsIDB4NDIyNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCS8qIEFCRyAqLworCXtQQ0lfVkRFVklDRShJTlRFTCwgMHgxMDRmKSwgMH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCAweDQyMjApLCAwfSwJLyogQkcgKi8KKwl7UENJX1ZERVZJQ0UoSU5URUwsIDB4NDIyMSksIDB9LAkvKiBCRyAqLworCXtQQ0lfVkRFVklDRShJTlRFTCwgMHg0MjIzKSwgMH0sCS8qIEFCRyAqLworCXtQQ0lfVkRFVklDRShJTlRFTCwgMHg0MjI0KSwgMH0sCS8qIEFCRyAqLwogCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLH0KQEAgLTExNDk4LDcgKzExNTc5LDcgQEAKICNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUwogc3RhdGljIGludCBpcHdfcHJvbV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gcHJvbV9wcml2LT5wcml2OwogCiAJSVBXX0RFQlVHX0lORk8oInByb20gZGV2LT5vcGVuXG4iKTsKQEAgLTExNTE4LDcgKzExNTk5LDcgQEAKIAogc3RhdGljIGludCBpcHdfcHJvbV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gcHJvbV9wcml2LT5wcml2OwogCiAJSVBXX0RFQlVHX0lORk8oInByb20gZGV2LT5zdG9wXG4iKTsKQEAgLTExNTM1LDcgKzExNjE2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpcHdfcHJvbV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBpcHdfcHJvbV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJSVBXX0RFQlVHX0lORk8oInByb20gZGV2LT54bWl0XG4iKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC0xMTU0Niw3ICsxMTYyOCw3IEBACiAJLm5kb19vcGVuIAkJPSBpcHdfcHJvbV9vcGVuLAogCS5uZG9fc3RvcAkJPSBpcHdfcHJvbV9zdG9wLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBpcHdfcHJvbV9oYXJkX3N0YXJ0X3htaXQsCi0JLm5kb19jaGFuZ2VfbXR1CQk9IGllZWU4MDIxMV9jaGFuZ2VfbXR1LAorCS5uZG9fY2hhbmdlX210dQkJPSBsaWJpcHdfY2hhbmdlX210dSwKIAkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiB9OwpAQCAtMTE1NTgsMTEgKzExNjQwLDExIEBACiAJaWYgKHByaXYtPnByb21fbmV0X2RldikKIAkJcmV0dXJuIC1FUEVSTTsKIAotCXByaXYtPnByb21fbmV0X2RldiA9IGFsbG9jX2llZWU4MDIxMShzaXplb2Yoc3RydWN0IGlwd19wcm9tX3ByaXYpKTsKKwlwcml2LT5wcm9tX25ldF9kZXYgPSBhbGxvY19pZWVlODAyMTEoc2l6ZW9mKHN0cnVjdCBpcHdfcHJvbV9wcml2KSwgMSk7CiAJaWYgKHByaXYtPnByb21fbmV0X2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXByaXYtPnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KHByaXYtPnByb21fbmV0X2Rldik7CisJcHJpdi0+cHJvbV9wcml2ID0gbGliaXB3X3ByaXYocHJpdi0+cHJvbV9uZXRfZGV2KTsKIAlwcml2LT5wcm9tX3ByaXYtPmllZWUgPSBuZXRkZXZfcHJpdihwcml2LT5wcm9tX25ldF9kZXYpOwogCXByaXYtPnByb21fcHJpdi0+cHJpdiA9IHByaXY7CiAKQEAgLTExNTc3LDcgKzExNjU5LDcgQEAKIAogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KHByaXYtPnByb21fbmV0X2Rldik7CiAJaWYgKHJjKSB7Ci0JCWZyZWVfaWVlZTgwMjExKHByaXYtPnByb21fbmV0X2Rldik7CisJCWZyZWVfaWVlZTgwMjExKHByaXYtPnByb21fbmV0X2RldiwgMSk7CiAJCXByaXYtPnByb21fbmV0X2RldiA9IE5VTEw7CiAJCXJldHVybiByYzsKIAl9CkBAIC0xMTU5MSw3ICsxMTY3Myw3IEBACiAJCXJldHVybjsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPnByb21fbmV0X2Rldik7Ci0JZnJlZV9pZWVlODAyMTEocHJpdi0+cHJvbV9uZXRfZGV2KTsKKwlmcmVlX2llZWU4MDIxMShwcml2LT5wcm9tX25ldF9kZXYsIDEpOwogCiAJcHJpdi0+cHJvbV9uZXRfZGV2ID0gTlVMTDsKIH0KQEAgLTExNjA0LDggKzExNjg2LDggQEAKIAkubmRvX3N0b3AJCT0gaXB3X25ldF9zdG9wLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gaXB3X25ldF9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBpcHdfbmV0X3NldF9tYWNfYWRkcmVzcywKLQkubmRvX3N0YXJ0X3htaXQJCT0gaWVlZTgwMjExX3htaXQsCi0JLm5kb19jaGFuZ2VfbXR1CQk9IGllZWU4MDIxMV9jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsaWJpcHdfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gbGliaXB3X2NoYW5nZV9tdHUsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiB9OwogCkBAIC0xMTYxOSwxMyArMTE3MDEsMTMgQEAKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXY7CiAJaW50IGk7CiAKLQluZXRfZGV2ID0gYWxsb2NfaWVlZTgwMjExKHNpemVvZihzdHJ1Y3QgaXB3X3ByaXYpKTsKKwluZXRfZGV2ID0gYWxsb2NfaWVlZTgwMjExKHNpemVvZihzdHJ1Y3QgaXB3X3ByaXYpLCAwKTsKIAlpZiAobmV0X2RldiA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAotCXByaXYgPSBpZWVlODAyMTFfcHJpdihuZXRfZGV2KTsKKwlwcml2ID0gbGliaXB3X3ByaXYobmV0X2Rldik7CiAJcHJpdi0+aWVlZSA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCiAJcHJpdi0+bmV0X2RldiA9IG5ldF9kZXY7CkBAIC0xMTc2Nyw3ICsxMTg0OSw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKICAgICAgIG91dF9mcmVlX2llZWU4MDIxMToKLQlmcmVlX2llZWU4MDIxMShwcml2LT5uZXRfZGV2KTsKKwlmcmVlX2llZWU4MDIxMShwcml2LT5uZXRfZGV2LCAwKTsKICAgICAgIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTE4MzQsNyArMTE5MTYsNyBAQAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlmcmVlX2llZWU4MDIxMShwcml2LT5uZXRfZGV2KTsKKwlmcmVlX2llZWU4MDIxMShwcml2LT5uZXRfZGV2LCAwKTsKIAlmcmVlX2Zpcm13YXJlKCk7CiB9CiAKQEAgLTExOTYzLDEzICsxMjA0NSwxMyBAQAogbW9kdWxlX3BhcmFtKGF1dG9fY3JlYXRlLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhhdXRvX2NyZWF0ZSwgImF1dG8gY3JlYXRlIGFkaG9jIG5ldHdvcmsgKGRlZmF1bHQgb24pIik7CiAKLW1vZHVsZV9wYXJhbShsZWQsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQobGVkLCBsZWRfc3VwcG9ydCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobGVkLCAiZW5hYmxlIGxlZCBjb250cm9sIG9uIHNvbWUgc3lzdGVtcyAoZGVmYXVsdCAwIG9mZikiKTsKIAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIG91dHB1dCBtYXNrIik7CiAKLW1vZHVsZV9wYXJhbShjaGFubmVsLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKGNoYW5uZWwsIGRlZmF1bHRfY2hhbm5lbCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoY2hhbm5lbCwgImNoYW5uZWwgdG8gbGltaXQgYXNzb2NpYXRlIHRvIChkZWZhdWx0IDAgW0FOWV0pIik7CiAKICNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUwpAQCAtMTE5OTUsMTAgKzEyMDc3LDEwIEBACiAjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfUU9TICovCiAKICNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCi1tb2R1bGVfcGFyYW0obW9kZSwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9uYW1lZChtb2RlLCBuZXR3b3JrX21vZGUsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1vZGUsICJuZXR3b3JrIG1vZGUgKDA9QlNTLDE9SUJTUywyPU1vbml0b3IpIik7CiAjZWxzZQotbW9kdWxlX3BhcmFtKG1vZGUsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQobW9kZSwgbmV0d29ya19tb2RlLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtb2RlLCAibmV0d29yayBtb2RlICgwPUJTUywxPUlCU1MpIik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaAppbmRleCAwNWU4Y2NmLi5iZjBlZWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaApAQCAtMTksNyArMTksNyBAQAogICBmaWxlIGNhbGxlZCBMSUNFTlNFLgogCiAgIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gIEphbWVzIFAuIEtldHJlbm9zIDxpcHcyMTAwLWFkbWluQGxpbnV4LmludGVsLmNvbT4KKyAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+CiAgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTUsNyArNTUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKLSNpbmNsdWRlICJpZWVlODAyMTEuaCIKKyNpbmNsdWRlICJsaWJpcHcuaCIKIAogLyogQXV0aGVudGljYXRpb24gIGFuZCBBc3NvY2lhdGlvbiBTdGF0ZXMgKi8KIGVudW0gY29ubmVjdGlvbl9tYW5hZ2VyX2Fzc29jX3N0YXRlcyB7CkBAIC0zNjUsOCArMzY1LDggQEAKIC8qIFFvUyBzdHVyY3R1cmVzICovCiBzdHJ1Y3QgaXB3X3Fvc19pbmZvIHsKIAlpbnQgcW9zX2VuYWJsZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzICpkZWZfcW9zX3Bhcm1fT0ZETTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzICpkZWZfcW9zX3Bhcm1fQ0NLOworCXN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMgKmRlZl9xb3NfcGFybV9PRkRNOworCXN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMgKmRlZl9xb3NfcGFybV9DQ0s7CiAJdTMyIGJ1cnN0X2R1cmF0aW9uX0NDSzsKIAl1MzIgYnVyc3RfZHVyYXRpb25fT0ZETTsKIAl1MTYgcW9zX25vX2Fja19tYXNrOwpAQCAtNTM0LDcgKzUzNCw3IEBACiBzdHJ1Y3QgY2x4Ml90eF9xdWV1ZSB7CiAJc3RydWN0IGNseDJfcXVldWUgcTsKIAlzdHJ1Y3QgdGZkX2ZyYW1lICpiZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqKnR4YjsKKwlzdHJ1Y3QgbGliaXB3X3R4YiAqKnR4YjsKIH07CiAKIC8qCkBAIC0xMTQ0LDcgKzExNDQsNyBAQAogc3RydWN0IGlwd19wcml2Owogc3RydWN0IGlwd19wcm9tX3ByaXYgewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTsKKwlzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZTsKIAllbnVtIGlwd19wcm9tX2ZpbHRlciBmaWx0ZXI7CiAJaW50IHR4X3BhY2tldHM7CiAJaW50IHJ4X3BhY2tldHM7CkBAIC0xMTc1LDcgKzExNzUsNyBAQAogCiBzdHJ1Y3QgaXB3X3ByaXYgewogCS8qIGllZWUgZGV2aWNlIHVzZWQgYnkgZ2VuZXJpYyBpZWVlIHByb2Nlc3NpbmcgY29kZSAqLwotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlOworCXN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlOwogCiAJc3BpbmxvY2tfdCBsb2NrOwogCXNwaW5sb2NrX3QgaXJxX2xvY2s7CkBAIC0xMjIyLDcgKzEyMjIsNyBAQAogCXUzMiByb2FtaW5nX3RocmVzaG9sZDsKIAogCXN0cnVjdCBpcHdfYXNzb2NpYXRlIGFzc29jX3JlcXVlc3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICphc3NvY19uZXR3b3JrOworCXN0cnVjdCBsaWJpcHdfbmV0d29yayAqYXNzb2NfbmV0d29yazsKIAogCXVuc2lnbmVkIGxvbmcgdHNfc2Nhbl9hYm9ydDsKIAlzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyByYXRlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNDUzOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwdy5oCkBAIC0wLDAgKzEsMTA5MiBAQAorLyoKKyAqIE1lcmdlZCB3aXRoIG1haW5saW5lIGllZWU4MDIxMS5oIGluIEF1ZyAyMDA0LiAgT3JpZ2luYWwgaWVlZTgwMl8xMQorICogcmVtYWlucyBjb3B5cmlnaHQgYnkgdGhlIG9yaWdpbmFsIGF1dGhvcnMKKyAqCisgKiBQb3J0aW9ucyBvZiB0aGUgbWVyZ2VkIGNvZGUgYXJlIGJhc2VkIG9uIEhvc3QgQVAgKHNvZnR3YXJlIHdpcmVsZXNzCisgKiBMQU4gYWNjZXNzIHBvaW50KSBkcml2ZXIgZm9yIEludGVyc2lsIFByaXNtMi8yLjUvMy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiwgU1NIIENvbW11bmljYXRpb25zIFNlY3VyaXR5IENvcnAgYW5kIEpvdW5pIE1hbGluZW4KKyAqIDxqQHcxLmZpPgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CisgKgorICogQWRhcHRpb24gdG8gYSBnZW5lcmljIElFRUUgODAyLjExIHN0YWNrIGJ5IEphbWVzIEtldHJlbm9zCisgKiA8amtldHJlbm9AbGludXguaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUsIEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gU2VlIFJFQURNRSBhbmQgQ09QWUlORyBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBBUEkgVmVyc2lvbiBIaXN0b3J5CisgKiAxLjAueCAtLSBJbml0aWFsIHZlcnNpb24KKyAqIDEuMS54IC0tIEFkZGVkIHJhZGlvdGFwLCBRb1MsIFRJTSwgbGliaXB3X2dlbyBBUElzLAorICogICAgICAgICAgdmFyaW91cyBzdHJ1Y3R1cmUgY2hhbmdlcywgYW5kIGNyeXB0byBBUEkgaW5pdCBtZXRob2QKKyAqLworI2lmbmRlZiBMSUJJUFdfSAorI2RlZmluZSBMSUJJUFdfSAorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CS8qIEVUSF9BTEVOICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIEFSUkFZX1NJWkUgKi8KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorCisjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisKKyNkZWZpbmUgTElCSVBXX1ZFUlNJT04gImdpdC0xLjEuMTMiCisKKyNkZWZpbmUgTElCSVBXX0RBVEFfTEVOCQkyMzA0CisvKiBNYXhpbXVtIHNpemUgZm9yIHRoZSBNQS1VTklUREFUQSBwcmltaXRpdmUsIDgwMi4xMSBzdGFuZGFyZCBzZWN0aW9uCisgICA2LjIuMS4xLjIuCisKKyAgIFRoZSBmaWd1cmUgaW4gc2VjdGlvbiA3LjEuMiBzdWdnZXN0cyBhIGJvZHkgc2l6ZSBvZiB1cCB0byAyMzEyCisgICBieXRlcyBpcyBhbGxvd2VkLCB3aGljaCBpcyBhIGJpdCBjb25mdXNpbmcsIEkgc3VzcGVjdCB0aGlzCisgICByZXByZXNlbnRzIHRoZSAyMzA0IGJ5dGVzIG9mIHJlYWwgZGF0YSwgcGx1cyBhIHBvc3NpYmxlIDggYnl0ZXMgb2YKKyAgIFdFUCBJViBhbmQgSUNWLiAodGhpcyBpbnRlcnByZXRhdGlvbiBzdWdnZXN0ZWQgYnkgUmFtaXJvIEJhcnJlaXJvKSAqLworCisjZGVmaW5lIExJQklQV18xQUREUl9MRU4gMTAKKyNkZWZpbmUgTElCSVBXXzJBRERSX0xFTiAxNgorI2RlZmluZSBMSUJJUFdfM0FERFJfTEVOIDI0CisjZGVmaW5lIExJQklQV180QUREUl9MRU4gMzAKKyNkZWZpbmUgTElCSVBXX0ZDU19MRU4gICAgNAorI2RlZmluZSBMSUJJUFdfSExFTgkJCShMSUJJUFdfNEFERFJfTEVOKQorI2RlZmluZSBMSUJJUFdfRlJBTUVfTEVOCQkoTElCSVBXX0RBVEFfTEVOICsgTElCSVBXX0hMRU4pCisKKyNkZWZpbmUgTUlOX0ZSQUdfVEhSRVNIT0xEICAgICAyNTZVCisjZGVmaW5lCU1BWF9GUkFHX1RIUkVTSE9MRCAgICAgMjM0NlUKKworLyogUU9TIGNvbnRyb2wgKi8KKyNkZWZpbmUgTElCSVBXX1FDVExfVElECQkweDAwMEYKKworLyogZGVidWcgbWFjcm9zICovCisKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCitleHRlcm4gdTMyIGxpYmlwd19kZWJ1Z19sZXZlbDsKKyNkZWZpbmUgTElCSVBXX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKK2RvIHsgaWYgKGxpYmlwd19kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKKyAgcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMTogJWMgJXMgIiBmbXQsIFwKKyAgICAgICAgIGluX2ludGVycnVwdCgpID8gJ0knIDogJ1UnLCBfX2Z1bmNfXyAsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSBib29sIGxpYmlwd19yYXRlbGltaXRfZGVidWcodTMyIGxldmVsKQoreworCXJldHVybiAobGliaXB3X2RlYnVnX2xldmVsICYgbGV2ZWwpICYmIG5ldF9yYXRlbGltaXQoKTsKK30KKyNlbHNlCisjZGVmaW5lIExJQklQV19ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBsaWJpcHdfcmF0ZWxpbWl0X2RlYnVnKHUzMiBsZXZlbCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLworCisvKgorICogVG8gdXNlIHRoZSBkZWJ1ZyBzeXN0ZW06CisgKgorICogSWYgeW91IGFyZSBkZWZpbmluZyBhIG5ldyBkZWJ1ZyBjbGFzc2lmaWNhdGlvbiwgc2ltcGx5IGFkZCBpdCB0byB0aGUgI2RlZmluZQorICogbGlzdCBoZXJlIGluIHRoZSBmb3JtIG9mOgorICoKKyAqICNkZWZpbmUgTElCSVBXX0RMX3h4eHggVkFMVUUKKyAqCisgKiBzaGlmdGluZyB2YWx1ZSB0byB0aGUgbGVmdCBvbmUgYml0IGZyb20gdGhlIHByZXZpb3VzIGVudHJ5LiAgeHh4eCBzaG91bGQgYmUKKyAqIHRoZSBuYW1lIG9mIHRoZSBjbGFzc2lmaWNhdGlvbiAoZm9yIGV4YW1wbGUsIFdFUCkKKyAqCisgKiBZb3UgdGhlbiBuZWVkIHRvIGVpdGhlciBhZGQgYSBMSUJJUFdfeHh4eF9ERUJVRygpIG1hY3JvIGRlZmluaXRpb24gZm9yIHlvdXIKKyAqIGNsYXNzaWZpY2F0aW9uLCBvciB1c2UgTElCSVBXX0RFQlVHKExJQklQV19ETF94eHh4LCAuLi4pIHdoZW5ldmVyIHlvdSB3YW50CisgKiB0byBzZW5kIG91dHB1dCB0byB0aGF0IGNsYXNzaWZpY2F0aW9uLgorICoKKyAqIFRvIGFkZCB5b3VyIGRlYnVnIGxldmVsIHRvIHRoZSBsaXN0IG9mIGxldmVscyBzZWVuIHdoZW4geW91IHBlcmZvcm0KKyAqCisgKiAlIGNhdCAvcHJvYy9uZXQvaWVlZTgwMjExL2RlYnVnX2xldmVsCisgKgorICogeW91IHNpbXBseSBuZWVkIHRvIGFkZCB5b3VyIGVudHJ5IHRvIHRoZSBsaWJpcHdfZGVidWdfbGV2ZWwgYXJyYXkuCisgKgorICogSWYgeW91IGRvIG5vdCBzZWUgZGVidWdfbGV2ZWwgaW4gL3Byb2MvbmV0L2llZWU4MDIxMSB0aGVuIHlvdSBkbyBub3QgaGF2ZQorICogQ09ORklHX0xJQklQV19ERUJVRyBkZWZpbmVkIGluIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KKworI2RlZmluZSBMSUJJUFdfRExfSU5GTyAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgTElCSVBXX0RMX1dYICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIExJQklQV19ETF9TQ0FOICAgICAgICAgICgxPDwyKQorI2RlZmluZSBMSUJJUFdfRExfU1RBVEUgICAgICAgICAoMTw8MykKKyNkZWZpbmUgTElCSVBXX0RMX01HTVQgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIExJQklQV19ETF9GUkFHICAgICAgICAgICgxPDw1KQorI2RlZmluZSBMSUJJUFdfRExfRFJPUCAgICAgICAgICAoMTw8NykKKworI2RlZmluZSBMSUJJUFdfRExfVFggICAgICAgICAgICAoMTw8OCkKKyNkZWZpbmUgTElCSVBXX0RMX1JYICAgICAgICAgICAgKDE8PDkpCisjZGVmaW5lIExJQklQV19ETF9RT1MgICAgICAgICAgICgxPDwzMSkKKworI2RlZmluZSBMSUJJUFdfRVJST1IoZiwgYS4uLikgcHJpbnRrKEtFUk5fRVJSICJpZWVlODAyMTE6ICIgZiwgIyMgYSkKKyNkZWZpbmUgTElCSVBXX1dBUk5JTkcoZiwgYS4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiaWVlZTgwMjExOiAiIGYsICMjIGEpCisjZGVmaW5lIExJQklQV19ERUJVR19JTkZPKGYsIGEuLi4pICAgTElCSVBXX0RFQlVHKExJQklQV19ETF9JTkZPLCBmLCAjIyBhKQorCisjZGVmaW5lIExJQklQV19ERUJVR19XWChmLCBhLi4uKSAgICAgTElCSVBXX0RFQlVHKExJQklQV19ETF9XWCwgZiwgIyMgYSkKKyNkZWZpbmUgTElCSVBXX0RFQlVHX1NDQU4oZiwgYS4uLikgICBMSUJJUFdfREVCVUcoTElCSVBXX0RMX1NDQU4sIGYsICMjIGEpCisjZGVmaW5lIExJQklQV19ERUJVR19TVEFURShmLCBhLi4uKSAgTElCSVBXX0RFQlVHKExJQklQV19ETF9TVEFURSwgZiwgIyMgYSkKKyNkZWZpbmUgTElCSVBXX0RFQlVHX01HTVQoZiwgYS4uLikgIExJQklQV19ERUJVRyhMSUJJUFdfRExfTUdNVCwgZiwgIyMgYSkKKyNkZWZpbmUgTElCSVBXX0RFQlVHX0ZSQUcoZiwgYS4uLikgIExJQklQV19ERUJVRyhMSUJJUFdfRExfRlJBRywgZiwgIyMgYSkKKyNkZWZpbmUgTElCSVBXX0RFQlVHX0RST1AoZiwgYS4uLikgIExJQklQV19ERUJVRyhMSUJJUFdfRExfRFJPUCwgZiwgIyMgYSkKKyNkZWZpbmUgTElCSVBXX0RFQlVHX1RYKGYsIGEuLi4pICBMSUJJUFdfREVCVUcoTElCSVBXX0RMX1RYLCBmLCAjIyBhKQorI2RlZmluZSBMSUJJUFdfREVCVUdfUlgoZiwgYS4uLikgIExJQklQV19ERUJVRyhMSUJJUFdfRExfUlgsIGYsICMjIGEpCisjZGVmaW5lIExJQklQV19ERUJVR19RT1MoZiwgYS4uLikgIExJQklQV19ERUJVRyhMSUJJUFdfRExfUU9TLCBmLCAjIyBhKQorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgkvKiBBUlBIUkRfRVRIRVIgKi8KKworI2lmbmRlZiBXSVJFTEVTU19TUFkKKyNkZWZpbmUgV0lSRUxFU1NfU1BZCQkvKiBlbmFibGUgaXdzcHkgc3VwcG9ydCAqLworI2VuZGlmCisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4JLyogbmV3IGRyaXZlciBBUEkgKi8KKworI2RlZmluZSBFVEhfUF9QUkVBVVRIIDB4ODhDNwkvKiBJRUVFIDgwMi4xMWkgcHJlLWF1dGhlbnRpY2F0aW9uICovCisKKyNpZm5kZWYgRVRIX1BfODAyMTFfUkFXCisjZGVmaW5lIEVUSF9QXzgwMjExX1JBVyAoRVRIX1BfRUNPTkVUICsgMSkKKyNlbmRpZgorCisvKiBJRUVFIDgwMi4xMSBkZWZpbmVzICovCisKKyNkZWZpbmUgUDgwMjExX09VSV9MRU4gMworCitzdHJ1Y3QgbGliaXB3X3NuYXBfaGRyIHsKKworCXU4IGRzYXA7CQkvKiBhbHdheXMgMHhBQSAqLworCXU4IHNzYXA7CQkvKiBhbHdheXMgMHhBQSAqLworCXU4IGN0cmw7CQkvKiBhbHdheXMgMHgwMyAqLworCXU4IG91aVtQODAyMTFfT1VJX0xFTl07CS8qIG9yZ2FuaXphdGlvbmFsIHVuaXZlcnNhbCBpZCAqLworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBTTkFQX1NJWkUgc2l6ZW9mKHN0cnVjdCBsaWJpcHdfc25hcF9oZHIpCisKKyNkZWZpbmUgV0xBTl9GQ19HRVRfVkVSUyhmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9WRVJTKQorI2RlZmluZSBXTEFOX0ZDX0dFVF9UWVBFKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKQorI2RlZmluZSBXTEFOX0ZDX0dFVF9TVFlQRShmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkKKworI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJBRyhzZXEpICgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpCisjZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVEoc2VxKSAgKCgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCkKKworI2RlZmluZSBMSUJJUFdfU1RBVE1BU0tfU0lHTkFMICgxPDwwKQorI2RlZmluZSBMSUJJUFdfU1RBVE1BU0tfUlNTSSAoMTw8MSkKKyNkZWZpbmUgTElCSVBXX1NUQVRNQVNLX05PSVNFICgxPDwyKQorI2RlZmluZSBMSUJJUFdfU1RBVE1BU0tfUkFURSAoMTw8MykKKyNkZWZpbmUgTElCSVBXX1NUQVRNQVNLX1dFTUFTSyAweDcKKworI2RlZmluZSBMSUJJUFdfQ0NLX01PRFVMQVRJT04gICAgKDE8PDApCisjZGVmaW5lIExJQklQV19PRkRNX01PRFVMQVRJT04gICAoMTw8MSkKKworI2RlZmluZSBMSUJJUFdfMjRHSFpfQkFORCAgICAgKDE8PDApCisjZGVmaW5lIExJQklQV181MkdIWl9CQU5EICAgICAoMTw8MSkKKworI2RlZmluZSBMSUJJUFdfQ0NLX1JBVEVfMU1CCQkgICAgICAgIDB4MDIKKyNkZWZpbmUgTElCSVBXX0NDS19SQVRFXzJNQgkJICAgICAgICAweDA0CisjZGVmaW5lIExJQklQV19DQ0tfUkFURV81TUIJCSAgICAgICAgMHgwQgorI2RlZmluZSBMSUJJUFdfQ0NLX1JBVEVfMTFNQgkJICAgICAgICAweDE2CisjZGVmaW5lIExJQklQV19PRkRNX1JBVEVfNk1CCQkgICAgICAgIDB4MEMKKyNkZWZpbmUgTElCSVBXX09GRE1fUkFURV85TUIJCSAgICAgICAgMHgxMgorI2RlZmluZSBMSUJJUFdfT0ZETV9SQVRFXzEyTUIJCTB4MTgKKyNkZWZpbmUgTElCSVBXX09GRE1fUkFURV8xOE1CCQkweDI0CisjZGVmaW5lIExJQklQV19PRkRNX1JBVEVfMjRNQgkJMHgzMAorI2RlZmluZSBMSUJJUFdfT0ZETV9SQVRFXzM2TUIJCTB4NDgKKyNkZWZpbmUgTElCSVBXX09GRE1fUkFURV80OE1CCQkweDYwCisjZGVmaW5lIExJQklQV19PRkRNX1JBVEVfNTRNQgkJMHg2QworI2RlZmluZSBMSUJJUFdfQkFTSUNfUkFURV9NQVNLCQkweDgwCisKKyNkZWZpbmUgTElCSVBXX0NDS19SQVRFXzFNQl9NQVNLCQkoMTw8MCkKKyNkZWZpbmUgTElCSVBXX0NDS19SQVRFXzJNQl9NQVNLCQkoMTw8MSkKKyNkZWZpbmUgTElCSVBXX0NDS19SQVRFXzVNQl9NQVNLCQkoMTw8MikKKyNkZWZpbmUgTElCSVBXX0NDS19SQVRFXzExTUJfTUFTSwkJKDE8PDMpCisjZGVmaW5lIExJQklQV19PRkRNX1JBVEVfNk1CX01BU0sJCSgxPDw0KQorI2RlZmluZSBMSUJJUFdfT0ZETV9SQVRFXzlNQl9NQVNLCQkoMTw8NSkKKyNkZWZpbmUgTElCSVBXX09GRE1fUkFURV8xMk1CX01BU0sJCSgxPDw2KQorI2RlZmluZSBMSUJJUFdfT0ZETV9SQVRFXzE4TUJfTUFTSwkJKDE8PDcpCisjZGVmaW5lIExJQklQV19PRkRNX1JBVEVfMjRNQl9NQVNLCQkoMTw8OCkKKyNkZWZpbmUgTElCSVBXX09GRE1fUkFURV8zNk1CX01BU0sJCSgxPDw5KQorI2RlZmluZSBMSUJJUFdfT0ZETV9SQVRFXzQ4TUJfTUFTSwkJKDE8PDEwKQorI2RlZmluZSBMSUJJUFdfT0ZETV9SQVRFXzU0TUJfTUFTSwkJKDE8PDExKQorCisjZGVmaW5lIExJQklQV19DQ0tfUkFURVNfTUFTSwkgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgTElCSVBXX0NDS19CQVNJQ19SQVRFU19NQVNLCShMSUJJUFdfQ0NLX1JBVEVfMU1CX01BU0sgfCBcCisJTElCSVBXX0NDS19SQVRFXzJNQl9NQVNLKQorI2RlZmluZSBMSUJJUFdfQ0NLX0RFRkFVTFRfUkFURVNfTUFTSwkoTElCSVBXX0NDS19CQVNJQ19SQVRFU19NQVNLIHwgXAorICAgICAgICBMSUJJUFdfQ0NLX1JBVEVfNU1CX01BU0sgfCBcCisgICAgICAgIExJQklQV19DQ0tfUkFURV8xMU1CX01BU0spCisKKyNkZWZpbmUgTElCSVBXX09GRE1fUkFURVNfTUFTSwkJMHgwMDAwMEZGMAorI2RlZmluZSBMSUJJUFdfT0ZETV9CQVNJQ19SQVRFU19NQVNLCShMSUJJUFdfT0ZETV9SQVRFXzZNQl9NQVNLIHwgXAorCUxJQklQV19PRkRNX1JBVEVfMTJNQl9NQVNLIHwgXAorCUxJQklQV19PRkRNX1JBVEVfMjRNQl9NQVNLKQorI2RlZmluZSBMSUJJUFdfT0ZETV9ERUZBVUxUX1JBVEVTX01BU0sJKExJQklQV19PRkRNX0JBU0lDX1JBVEVTX01BU0sgfCBcCisJTElCSVBXX09GRE1fUkFURV85TUJfTUFTSyAgfCBcCisJTElCSVBXX09GRE1fUkFURV8xOE1CX01BU0sgfCBcCisJTElCSVBXX09GRE1fUkFURV8zNk1CX01BU0sgfCBcCisJTElCSVBXX09GRE1fUkFURV80OE1CX01BU0sgfCBcCisJTElCSVBXX09GRE1fUkFURV81NE1CX01BU0spCisjZGVmaW5lIExJQklQV19ERUZBVUxUX1JBVEVTX01BU0sgKExJQklQV19PRkRNX0RFRkFVTFRfUkFURVNfTUFTSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSVBXX0NDS19ERUZBVUxUX1JBVEVTX01BU0spCisKKyNkZWZpbmUgTElCSVBXX05VTV9PRkRNX1JBVEVTCSAgICA4CisjZGVmaW5lIExJQklQV19OVU1fQ0NLX1JBVEVTCSAgICAgICAgICAgIDQKKyNkZWZpbmUgTElCSVBXX09GRE1fU0hJRlRfTUFTS19BICAgICAgICAgNAorCisvKiBOT1RFOiBUaGlzIGRhdGEgaXMgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzOyBub3QgYWxsIGhhcmR3YXJlIHByb3ZpZGVzIHRoaXMKKyAqICAgICAgIGluZm9ybWF0aW9uIGZvciBmcmFtZXMgcmVjZWl2ZWQuCisgKiAgICAgICBGb3IgbGliaXB3X3J4X21ndCwgeW91IG5lZWQgdG8gc2V0IGF0IGxlYXN0IHRoZSAnbGVuJyBwYXJhbWV0ZXIuCisgKi8KK3N0cnVjdCBsaWJpcHdfcnhfc3RhdHMgeworCXUzMiBtYWNfdGltZTsKKwlzOCByc3NpOworCXU4IHNpZ25hbDsKKwl1OCBub2lzZTsKKwl1MTYgcmF0ZTsJCS8qIGluIDEwMCBrYnBzICovCisJdTggcmVjZWl2ZWRfY2hhbm5lbDsKKwl1OCBjb250cm9sOworCXU4IG1hc2s7CisJdTggZnJlcTsKKwl1MTYgbGVuOworCXU2NCB0c2Y7CisJdTMyIGJlYWNvbl90aW1lOworfTsKKworLyogSUVFRSA4MDIuMTEgcmVxdWlyZXMgdGhhdCBTVEEgc3VwcG9ydHMgY29uY3VycmVudCByZWNlcHRpb24gb2YgYXQgbGVhc3QKKyAqIHRocmVlIGZyYWdtZW50ZWQgZnJhbWVzLiBUaGlzIGRlZmluZSBjYW4gYmUgaW5jcmVhc2VkIHRvIHN1cHBvcnQgbW9yZQorICogY29uY3VycmVudCBmcmFtZXMsIGJ1dCBpdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBlYWNoIGVudHJ5IGNhbiBjb25zdW1lIGFib3V0CisgKiAyIGtCIG9mIFJBTSBhbmQgaW5jcmVhc2luZyBjYWNoZSBzaXplIHdpbGwgc2xvdyBkb3duIGZyYW1lIHJlYXNzZW1ibHkuICovCisjZGVmaW5lIExJQklQV19GUkFHX0NBQ0hFX0xFTiA0CisKK3N0cnVjdCBsaWJpcHdfZnJhZ19lbnRyeSB7CisJdW5zaWduZWQgbG9uZyBmaXJzdF9mcmFnX3RpbWU7CisJdW5zaWduZWQgaW50IHNlcTsKKwl1bnNpZ25lZCBpbnQgbGFzdF9mcmFnOworCXN0cnVjdCBza19idWZmICpza2I7CisJdTggc3JjX2FkZHJbRVRIX0FMRU5dOworCXU4IGRzdF9hZGRyW0VUSF9BTEVOXTsKK307CisKK3N0cnVjdCBsaWJpcHdfc3RhdHMgeworCXVuc2lnbmVkIGludCB0eF91bmljYXN0X2ZyYW1lczsKKwl1bnNpZ25lZCBpbnQgdHhfbXVsdGljYXN0X2ZyYW1lczsKKwl1bnNpZ25lZCBpbnQgdHhfZnJhZ21lbnRzOworCXVuc2lnbmVkIGludCB0eF91bmljYXN0X29jdGV0czsKKwl1bnNpZ25lZCBpbnQgdHhfbXVsdGljYXN0X29jdGV0czsKKwl1bnNpZ25lZCBpbnQgdHhfZGVmZXJyZWRfdHJhbnNtaXNzaW9uczsKKwl1bnNpZ25lZCBpbnQgdHhfc2luZ2xlX3JldHJ5X2ZyYW1lczsKKwl1bnNpZ25lZCBpbnQgdHhfbXVsdGlwbGVfcmV0cnlfZnJhbWVzOworCXVuc2lnbmVkIGludCB0eF9yZXRyeV9saW1pdF9leGNlZWRlZDsKKwl1bnNpZ25lZCBpbnQgdHhfZGlzY2FyZHM7CisJdW5zaWduZWQgaW50IHJ4X3VuaWNhc3RfZnJhbWVzOworCXVuc2lnbmVkIGludCByeF9tdWx0aWNhc3RfZnJhbWVzOworCXVuc2lnbmVkIGludCByeF9mcmFnbWVudHM7CisJdW5zaWduZWQgaW50IHJ4X3VuaWNhc3Rfb2N0ZXRzOworCXVuc2lnbmVkIGludCByeF9tdWx0aWNhc3Rfb2N0ZXRzOworCXVuc2lnbmVkIGludCByeF9mY3NfZXJyb3JzOworCXVuc2lnbmVkIGludCByeF9kaXNjYXJkc19ub19idWZmZXI7CisJdW5zaWduZWQgaW50IHR4X2Rpc2NhcmRzX3dyb25nX3NhOworCXVuc2lnbmVkIGludCByeF9kaXNjYXJkc191bmRlY3J5cHRhYmxlOworCXVuc2lnbmVkIGludCByeF9tZXNzYWdlX2luX21zZ19mcmFnbWVudHM7CisJdW5zaWduZWQgaW50IHJ4X21lc3NhZ2VfaW5fYmFkX21zZ19mcmFnbWVudHM7Cit9OworCitzdHJ1Y3QgbGliaXB3X2RldmljZTsKKworI2RlZmluZSBTRUNfS0VZXzEJCSgxPDwwKQorI2RlZmluZSBTRUNfS0VZXzIJCSgxPDwxKQorI2RlZmluZSBTRUNfS0VZXzMJCSgxPDwyKQorI2RlZmluZSBTRUNfS0VZXzQJCSgxPDwzKQorI2RlZmluZSBTRUNfQUNUSVZFX0tFWQkJKDE8PDQpCisjZGVmaW5lIFNFQ19BVVRIX01PREUJCSgxPDw1KQorI2RlZmluZSBTRUNfVU5JQ0FTVF9HUk9VUAkoMTw8NikKKyNkZWZpbmUgU0VDX0xFVkVMCQkoMTw8NykKKyNkZWZpbmUgU0VDX0VOQUJMRUQJCSgxPDw4KQorI2RlZmluZSBTRUNfRU5DUllQVAkJKDE8PDkpCisKKyNkZWZpbmUgU0VDX0xFVkVMXzAJCTAJLyogTm9uZSAqLworI2RlZmluZSBTRUNfTEVWRUxfMQkJMQkvKiBXRVAgNDAgYW5kIDEwNCBiaXQgKi8KKyNkZWZpbmUgU0VDX0xFVkVMXzIJCTIJLyogTGV2ZWwgMSArIFRLSVAgKi8KKyNkZWZpbmUgU0VDX0xFVkVMXzJfQ0tJUAkzCS8qIExldmVsIDEgKyBDS0lQICovCisjZGVmaW5lIFNFQ19MRVZFTF8zCQk0CS8qIExldmVsIDIgKyBDQ01QICovCisKKyNkZWZpbmUgU0VDX0FMR19OT05FCQkwCisjZGVmaW5lIFNFQ19BTEdfV0VQCQkxCisjZGVmaW5lIFNFQ19BTEdfVEtJUAkJMgorI2RlZmluZSBTRUNfQUxHX0NDTVAJCTMKKworI2RlZmluZSBXRVBfS0VZUwkJNAorI2RlZmluZSBXRVBfS0VZX0xFTgkJMTMKKyNkZWZpbmUgU0NNX0tFWV9MRU4JCTMyCisjZGVmaW5lIFNDTV9URU1QT1JBTF9LRVlfTEVOR1RICTE2CisKK3N0cnVjdCBsaWJpcHdfc2VjdXJpdHkgeworCXUxNiBhY3RpdmVfa2V5OjIsIGVuYWJsZWQ6MSwgdW5pY2FzdF91c2VzX2dyb3VwOjEsIGVuY3J5cHQ6MTsKKwl1OCBhdXRoX21vZGU7CisJdTggZW5jb2RlX2FsZ1tXRVBfS0VZU107CisJdTgga2V5X3NpemVzW1dFUF9LRVlTXTsKKwl1OCBrZXlzW1dFUF9LRVlTXVtTQ01fS0VZX0xFTl07CisJdTggbGV2ZWw7CisJdTE2IGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisKKyA4MDIuMTEgZGF0YSBmcmFtZSBmcm9tIEFQCisKKyAgICAgICwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorQnl0ZXMgfCAgMiAgIHwgIDIgICB8ICAgIDYgICAgfCAgICA2ICAgIHwgICAgNiAgICB8ICAyICAgfCAwLi4yMzEyIHwgICA0ICB8CisgICAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS18LS0tLS0tLS0tfC0tLS0tLXwKK0Rlc2MuIHwgY3RybCB8IGR1cmEgfCAgREEvUkEgIHwgICBUQSAgICB8ICAgIFNBICAgfCBTZXF1IHwgIGZyYW1lICB8ICBmY3MgfAorICAgICAgfCAgICAgIHwgdGlvbiB8IChCU1NJRCkgfCAgICAgICAgIHwgICAgICAgICB8IGVuY2UgfCAgZGF0YSAgIHwgICAgICB8CisgICAgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKKworVG90YWw6IDI4LTIzNDAgYnl0ZXMKKworKi8KKworI2RlZmluZSBCRUFDT05fUFJPQkVfU1NJRF9JRF9QT1NJVElPTiAxMgorCitzdHJ1Y3QgbGliaXB3X2hkcl8xYWRkciB7CisJX19sZTE2IGZyYW1lX2N0bDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbRVRIX0FMRU5dOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19oZHJfMmFkZHIgeworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKKwl1OCBhZGRyMltFVEhfQUxFTl07CisJdTggcGF5bG9hZFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciB7CisJX19sZTE2IGZyYW1lX2N0bDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbRVRIX0FMRU5dOworCXU4IGFkZHIyW0VUSF9BTEVOXTsKKwl1OCBhZGRyM1tFVEhfQUxFTl07CisJX19sZTE2IHNlcV9jdGw7CisJdTggcGF5bG9hZFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X2hkcl80YWRkciB7CisJX19sZTE2IGZyYW1lX2N0bDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbRVRIX0FMRU5dOworCXU4IGFkZHIyW0VUSF9BTEVOXTsKKwl1OCBhZGRyM1tFVEhfQUxFTl07CisJX19sZTE2IHNlcV9jdGw7CisJdTggYWRkcjRbRVRIX0FMRU5dOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19oZHJfM2FkZHJxb3MgeworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKKwl1OCBhZGRyMltFVEhfQUxFTl07CisJdTggYWRkcjNbRVRIX0FMRU5dOworCV9fbGUxNiBzZXFfY3RsOworCXU4IHBheWxvYWRbMF07CisJX19sZTE2IHFvc19jdGw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19pbmZvX2VsZW1lbnQgeworCXU4IGlkOworCXU4IGxlbjsKKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGRhdGEgdHlwZXMgdGhhdCBjYW4gbWFrZSB1cCBtYW5hZ2VtZW50IHBhY2tldHMKKyAqCisJdTE2IGF1dGhfYWxnb3JpdGhtOworCXUxNiBhdXRoX3NlcXVlbmNlOworCXUxNiBiZWFjb25faW50ZXJ2YWw7CisJdTE2IGNhcGFiaWxpdHk7CisJdTggY3VycmVudF9hcFtFVEhfQUxFTl07CisJdTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwlzdHJ1Y3QgeworCQl1MTYgYXNzb2NpYXRpb25faWQ6MTQsIHJlc2VydmVkOjI7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJdTMyIHRpbWVfc3RhbXBbMl07CisJdTE2IHJlYXNvbjsKKwl1MTYgc3RhdHVzOworKi8KKworc3RydWN0IGxpYmlwd19hdXRoIHsKKwlzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciBoZWFkZXI7CisJX19sZTE2IGFsZ29yaXRobTsKKwlfX2xlMTYgdHJhbnNhY3Rpb247CisJX19sZTE2IHN0YXR1czsKKwkvKiBjaGFsbGVuZ2UgKi8KKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19jaGFubmVsX3N3aXRjaCB7CisJdTggaWQ7CisJdTggbGVuOworCXU4IG1vZGU7CisJdTggY2hhbm5lbDsKKwl1OCBjb3VudDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X2FjdGlvbiB7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgaGVhZGVyOworCXU4IGNhdGVnb3J5OworCXU4IGFjdGlvbjsKKwl1bmlvbiB7CisJCXN0cnVjdCBsaWJpcHdfYWN0aW9uX2V4Y2hhbmdlIHsKKwkJCXU4IHRva2VuOworCQkJc3RydWN0IGxpYmlwd19pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOworCQl9IGV4Y2hhbmdlOworCQlzdHJ1Y3QgbGliaXB3X2NoYW5uZWxfc3dpdGNoIGNoYW5uZWxfc3dpdGNoOworCisJfSBmb3JtYXQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19kaXNhc3NvYyB7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUxNiByZWFzb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQWxpYXMgZGVhdXRoIGZvciBkaXNhc3NvYyAqLworI2RlZmluZSBsaWJpcHdfZGVhdXRoIGxpYmlwd19kaXNhc3NvYworCitzdHJ1Y3QgbGliaXB3X3Byb2JlX3JlcXVlc3QgeworCXN0cnVjdCBsaWJpcHdfaGRyXzNhZGRyIGhlYWRlcjsKKwkvKiBTU0lELCBzdXBwb3J0ZWQgcmF0ZXMgKi8KKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19wcm9iZV9yZXNwb25zZSB7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUzMiB0aW1lX3N0YW1wWzJdOworCV9fbGUxNiBiZWFjb25faW50ZXJ2YWw7CisJX19sZTE2IGNhcGFiaWxpdHk7CisJLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzLCBGSCBwYXJhbXMsIERTIHBhcmFtcywKKwkgKiBDRiBwYXJhbXMsIElCU1MgcGFyYW1zLCBUSU0gKGlmIGJlYWNvbiksIFJTTiAqLworCXN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBBbGlhcyBiZWFjb24gZm9yIHByb2JlX3Jlc3BvbnNlICovCisjZGVmaW5lIGxpYmlwd19iZWFjb24gbGliaXB3X3Byb2JlX3Jlc3BvbnNlCisKK3N0cnVjdCBsaWJpcHdfYXNzb2NfcmVxdWVzdCB7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUxNiBjYXBhYmlsaXR5OworCV9fbGUxNiBsaXN0ZW5faW50ZXJ2YWw7CisJLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzLCBSU04gKi8KKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19yZWFzc29jX3JlcXVlc3QgeworCXN0cnVjdCBsaWJpcHdfaGRyXzNhZGRyIGhlYWRlcjsKKwlfX2xlMTYgY2FwYWJpbGl0eTsKKwlfX2xlMTYgbGlzdGVuX2ludGVydmFsOworCXU4IGN1cnJlbnRfYXBbRVRIX0FMRU5dOworCXN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X2Fzc29jX3Jlc3BvbnNlIHsKKwlzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciBoZWFkZXI7CisJX19sZTE2IGNhcGFiaWxpdHk7CisJX19sZTE2IHN0YXR1czsKKwlfX2xlMTYgYWlkOworCS8qIHN1cHBvcnRlZCByYXRlcyAqLworCXN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X3R4YiB7CisJdTggbnJfZnJhZ3M7CisJdTggZW5jcnlwdGVkOworCXU4IHJ0c19pbmNsdWRlZDsKKwl1OCByZXNlcnZlZDsKKwl1MTYgZnJhZ19zaXplOworCXUxNiBwYXlsb2FkX3NpemU7CisJc3RydWN0IHNrX2J1ZmYgKmZyYWdtZW50c1swXTsKK307CisKKy8qIFNXRUVQIFRBQkxFIEVOVFJJRVMgTlVNQkVSICovCisjZGVmaW5lIE1BWF9TV0VFUF9UQUJfRU5UUklFUwkJICA0MgorI2RlZmluZSBNQVhfU1dFRVBfVEFCX0VOVFJJRVNfUEVSX1BBQ0tFVCAgNworLyogTUFYX1JBVEVTX0xFTkdUSCBuZWVkcyB0byBiZSAxMi4gIFRoZSBzcGVjIHNheXMgOCwgYW5kIG1hbnkgQVBzCisgKiBvbmx5IHVzZSA4LCBhbmQgdGhlbiB1c2UgZXh0ZW5kZWQgcmF0ZXMgZm9yIHRoZSByZW1haW5pbmcgc3VwcG9ydGVkCisgKiByYXRlcy4gIE90aGVyIEFQcywgaG93ZXZlciwgc3RpY2sgYWxsIG9mIHRoZWlyIHN1cHBvcnRlZCByYXRlcyBvbiB0aGUKKyAqIG1haW4gcmF0ZXMgaW5mb3JtYXRpb24gZWxlbWVudC4uLiAqLworI2RlZmluZSBNQVhfUkFURVNfTEVOR1RIICAgICAgICAgICAgICAgICAgKCh1OCkxMikKKyNkZWZpbmUgTUFYX1JBVEVTX0VYX0xFTkdUSCAgICAgICAgICAgICAgICgodTgpMTYpCisjZGVmaW5lIE1BWF9ORVRXT1JLX0NPVU5UICAgICAgICAgICAgICAgICAgMTI4CisKKyNkZWZpbmUgQ1JDX0xFTkdUSCAgICAgICAgICAgICAgICAgNFUKKworI2RlZmluZSBNQVhfV1BBX0lFX0xFTiA2NAorCisjZGVmaW5lIE5FVFdPUktfSEFTX09GRE0gICAgICAgKDE8PDEpCisjZGVmaW5lIE5FVFdPUktfSEFTX0NDSyAgICAgICAgKDE8PDIpCisKKy8qIFFvUyBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgTkVUV09SS19IQVNfUU9TX1BBUkFNRVRFUlMgICAgICAoMTw8MykKKyNkZWZpbmUgTkVUV09SS19IQVNfUU9TX0lORk9STUFUSU9OICAgICAoMTw8NCkKKyNkZWZpbmUgTkVUV09SS19IQVNfUU9TX01BU0sgICAgICAgICAgICAoTkVUV09SS19IQVNfUU9TX1BBUkFNRVRFUlMgfCBcCisJCQkJCSBORVRXT1JLX0hBU19RT1NfSU5GT1JNQVRJT04pCisKKy8qIDgwMi4xMWggKi8KKyNkZWZpbmUgTkVUV09SS19IQVNfUE9XRVJfQ09OU1RSQUlOVCAgICAoMTw8NSkKKyNkZWZpbmUgTkVUV09SS19IQVNfQ1NBICAgICAgICAgICAgICAgICAoMTw8NikKKyNkZWZpbmUgTkVUV09SS19IQVNfUVVJRVQgICAgICAgICAgICAgICAoMTw8NykKKyNkZWZpbmUgTkVUV09SS19IQVNfSUJTU19ERlMgICAgICAgICAgICAoMTw8OCkKKyNkZWZpbmUgTkVUV09SS19IQVNfVFBDX1JFUE9SVCAgICAgICAgICAoMTw8OSkKKworI2RlZmluZSBORVRXT1JLX0hBU19FUlBfVkFMVUUgICAgICAgICAgICgxPDwxMCkKKworI2RlZmluZSBRT1NfUVVFVUVfTlVNICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUU9TX09VSV9MRU4gICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFFPU19PVUlfVFlQRSAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBRT1NfRUxFTUVOVF9JRCAgICAgICAgICAgICAgICAgIDIyMQorI2RlZmluZSBRT1NfT1VJX0lORk9fU1VCX1RZUEUgICAgICAgICAgIDAKKyNkZWZpbmUgUU9TX09VSV9QQVJBTV9TVUJfVFlQRSAgICAgICAgICAxCisjZGVmaW5lIFFPU19WRVJTSU9OXzEgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBRT1NfQUlGU05fTUlOX1ZBTFVFICAgICAgICAgICAgIDIKKworc3RydWN0IGxpYmlwd19xb3NfaW5mb3JtYXRpb25fZWxlbWVudCB7CisJdTggZWxlbWVudElEOworCXU4IGxlbmd0aDsKKwl1OCBxdWlbUU9TX09VSV9MRU5dOworCXU4IHF1aV90eXBlOworCXU4IHF1aV9zdWJ0eXBlOworCXU4IHZlcnNpb247CisJdTggYWNfaW5mbzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X3Fvc19hY19wYXJhbWV0ZXIgeworCXU4IGFjaV9haWZzbjsKKwl1OCBlY3dfbWluX21heDsKKwlfX2xlMTYgdHhfb3BfbGltaXQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVyX2luZm8geworCXN0cnVjdCBsaWJpcHdfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQgaW5mb19lbGVtZW50OworCXU4IHJlc2VydmVkOworCXN0cnVjdCBsaWJpcHdfcW9zX2FjX3BhcmFtZXRlciBhY19wYXJhbXNfcmVjb3JkW1FPU19RVUVVRV9OVU1dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMgeworCV9fbGUxNiBjd19taW5bUU9TX1FVRVVFX05VTV07CisJX19sZTE2IGN3X21heFtRT1NfUVVFVUVfTlVNXTsKKwl1OCBhaWZzW1FPU19RVUVVRV9OVU1dOworCXU4IGZsYWdbUU9TX1FVRVVFX05VTV07CisJX19sZTE2IHR4X29wX2xpbWl0W1FPU19RVUVVRV9OVU1dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBsaWJpcHdfcW9zX2RhdGEgeworCXN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKwlpbnQgYWN0aXZlOworCWludCBzdXBwb3J0ZWQ7CisJdTggcGFyYW1fY291bnQ7CisJdTggb2xkX3BhcmFtX2NvdW50OworfTsKKworc3RydWN0IGxpYmlwd190aW1fcGFyYW1ldGVycyB7CisJdTggdGltX2NvdW50OworCXU4IHRpbV9wZXJpb2Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2VudW0gewkJCQkvKiBsaWJpcHdfYmFzaWNfcmVwb3J0Lm1hcCAqLworCUxJQklQV19CQVNJQ19NQVBfQlNTID0gKDEgPDwgMCksCisJTElCSVBXX0JBU0lDX01BUF9PRkRNID0gKDEgPDwgMSksCisJTElCSVBXX0JBU0lDX01BUF9VTklERU5USUZJRUQgPSAoMSA8PCAyKSwKKwlMSUJJUFdfQkFTSUNfTUFQX1JBREFSID0gKDEgPDwgMyksCisJTElCSVBXX0JBU0lDX01BUF9VTk1FQVNVUkVEID0gKDEgPDwgNCksCisJLyogQml0cyA1LTcgYXJlIHJlc2VydmVkICovCisKK307CitzdHJ1Y3QgbGliaXB3X2Jhc2ljX3JlcG9ydCB7CisJdTggY2hhbm5lbDsKKwlfX2xlNjQgc3RhcnRfdGltZTsKKwlfX2xlMTYgZHVyYXRpb247CisJdTggbWFwOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0gewkJCQkvKiBsaWJpcHdfbWVhc3VyZW1lbnRfcmVxdWVzdC5tb2RlICovCisJLyogQml0IDAgaXMgcmVzZXJ2ZWQgKi8KKwlMSUJJUFdfTUVBU1VSRU1FTlRfRU5BQkxFID0gKDEgPDwgMSksCisJTElCSVBXX01FQVNVUkVNRU5UX1JFUVVFU1QgPSAoMSA8PCAyKSwKKwlMSUJJUFdfTUVBU1VSRU1FTlRfUkVQT1JUID0gKDEgPDwgMyksCisJLyogQml0cyA0LTcgYXJlIHJlc2VydmVkICovCit9OworCitlbnVtIHsKKwlMSUJJUFdfUkVQT1JUX0JBU0lDID0gMCwJLyogcmVxdWlyZWQgKi8KKwlMSUJJUFdfUkVQT1JUX0NDQSA9IDEsCS8qIG9wdGlvbmFsICovCisJTElCSVBXX1JFUE9SVF9SUEkgPSAyLAkvKiBvcHRpb25hbCAqLworCS8qIDMtMjU1IHJlc2VydmVkICovCit9OworCitzdHJ1Y3QgbGliaXB3X21lYXN1cmVtZW50X3BhcmFtcyB7CisJdTggY2hhbm5lbDsKKwlfX2xlNjQgc3RhcnRfdGltZTsKKwlfX2xlMTYgZHVyYXRpb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19tZWFzdXJlbWVudF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCBpZTsKKwl1OCB0b2tlbjsKKwl1OCBtb2RlOworCXU4IHR5cGU7CisJc3RydWN0IGxpYmlwd19tZWFzdXJlbWVudF9wYXJhbXMgcGFyYW1zWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBsaWJpcHdfbWVhc3VyZW1lbnRfcmVwb3J0IHsKKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCBpZTsKKwl1OCB0b2tlbjsKKwl1OCBtb2RlOworCXU4IHR5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgbGliaXB3X2Jhc2ljX3JlcG9ydCBiYXNpY1swXTsKKwl9IHU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd190cGNfcmVwb3J0IHsKKwl1OCB0cmFuc21pdF9wb3dlcjsKKwl1OCBsaW5rX21hcmdpbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X2NoYW5uZWxfbWFwIHsKKwl1OCBjaGFubmVsOworCXU4IG1hcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X2lic3NfZGZzIHsKKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCBpZTsKKwl1OCBvd25lcltFVEhfQUxFTl07CisJdTggcmVjb3ZlcnlfaW50ZXJ2YWw7CisJc3RydWN0IGxpYmlwd19jaGFubmVsX21hcCBjaGFubmVsX21hcFswXTsKK307CisKK3N0cnVjdCBsaWJpcHdfY3NhIHsKKwl1OCBtb2RlOworCXU4IGNoYW5uZWw7CisJdTggY291bnQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19xdWlldCB7CisJdTggY291bnQ7CisJdTggcGVyaW9kOworCXU4IGR1cmF0aW9uOworCXU4IG9mZnNldDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X25ldHdvcmsgeworCS8qIFRoZXNlIGVudHJpZXMgYXJlIHVzZWQgdG8gaWRlbnRpZnkgYSB1bmlxdWUgbmV0d29yayAqLworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBjaGFubmVsOworCS8qIEVuc3VyZSBudWxsLXRlcm1pbmF0ZWQgZm9yIGFueSBkZWJ1ZyBtc2dzICovCisJdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOworCXU4IHNzaWRfbGVuOworCisJc3RydWN0IGxpYmlwd19xb3NfZGF0YSBxb3NfZGF0YTsKKworCS8qIFRoZXNlIGFyZSBuZXR3b3JrIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzIHN0YXRzOworCXUxNiBjYXBhYmlsaXR5OworCXU4IHJhdGVzW01BWF9SQVRFU19MRU5HVEhdOworCXU4IHJhdGVzX2xlbjsKKwl1OCByYXRlc19leFtNQVhfUkFURVNfRVhfTEVOR1RIXTsKKwl1OCByYXRlc19leF9sZW47CisJdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQ7CisJdTggbW9kZTsKKwl1MzIgZmxhZ3M7CisJdTMyIGxhc3RfYXNzb2NpYXRlOworCXUzMiB0aW1lX3N0YW1wWzJdOworCXUxNiBiZWFjb25faW50ZXJ2YWw7CisJdTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwl1MTYgYXRpbV93aW5kb3c7CisJdTggZXJwX3ZhbHVlOworCXU4IHdwYV9pZVtNQVhfV1BBX0lFX0xFTl07CisJc2l6ZV90IHdwYV9pZV9sZW47CisJdTggcnNuX2llW01BWF9XUEFfSUVfTEVOXTsKKwlzaXplX3QgcnNuX2llX2xlbjsKKwlzdHJ1Y3QgbGliaXB3X3RpbV9wYXJhbWV0ZXJzIHRpbTsKKworCS8qIDgwMi4xMWggaW5mbyAqLworCisJLyogUG93ZXIgQ29uc3RyYWludCAtIG1hbmRhdG9yeSBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCAqLworCXU4IHBvd2VyX2NvbnN0cmFpbnQ7CisKKwkvKiBUUEMgUmVwb3J0IC0gbWFuZGF0b3J5IGlmIHNwY3RybSBtZ210IHJlcXVpcmVkICovCisJc3RydWN0IGxpYmlwd190cGNfcmVwb3J0IHRwY19yZXBvcnQ7CisKKwkvKiBJQlNTIERGUyAtIG1hbmRhdG9yeSBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCBhbmQgSUJTUworCSAqIE5PVEU6IFRoaXMgaXMgdmFyaWFibGUgbGVuZ3RoIGFuZCBzbyBtdXN0IGJlIGFsbG9jYXRlZCBkeW5hbWljYWxseSAqLworCXN0cnVjdCBsaWJpcHdfaWJzc19kZnMgKmlic3NfZGZzOworCisJLyogQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IC0gb3B0aW9uYWwgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgKi8KKwlzdHJ1Y3QgbGliaXB3X2NzYSBjc2E7CisKKwkvKiBRdWlldCAtIG9wdGlvbmFsIGlmIHNwY3RybSBtZ210IHJlcXVpcmVkICovCisJc3RydWN0IGxpYmlwd19xdWlldCBxdWlldDsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK2VudW0gbGliaXB3X3N0YXRlIHsKKwlMSUJJUFdfVU5JTklUSUFMSVpFRCA9IDAsCisJTElCSVBXX0lOSVRJQUxJWkVELAorCUxJQklQV19BU1NPQ0lBVElORywKKwlMSUJJUFdfQVNTT0NJQVRFRCwKKwlMSUJJUFdfQVVUSEVOVElDQVRJTkcsCisJTElCSVBXX0FVVEhFTlRJQ0FURUQsCisJTElCSVBXX1NIVVRET1dOCit9OworCisjZGVmaW5lIERFRkFVTFRfTUFYX1NDQU5fQUdFICgxNSAqIEhaKQorI2RlZmluZSBERUZBVUxUX0ZUUyAyMzQ2CisKKyNkZWZpbmUgQ0ZHX0xJQklQV19SRVNFUlZFX0ZDUyAoMTw8MCkKKyNkZWZpbmUgQ0ZHX0xJQklQV19DT01QVVRFX0ZDUyAoMTw8MSkKKyNkZWZpbmUgQ0ZHX0xJQklQV19SVFMgKDE8PDIpCisKKyNkZWZpbmUgTElCSVBXXzI0R0haX01JTl9DSEFOTkVMIDEKKyNkZWZpbmUgTElCSVBXXzI0R0haX01BWF9DSEFOTkVMIDE0CisjZGVmaW5lIExJQklQV18yNEdIWl9DSEFOTkVMUyAoTElCSVBXXzI0R0haX01BWF9DSEFOTkVMIC0gXAorCQkJCSAgTElCSVBXXzI0R0haX01JTl9DSEFOTkVMICsgMSkKKworI2RlZmluZSBMSUJJUFdfNTJHSFpfTUlOX0NIQU5ORUwgMzQKKyNkZWZpbmUgTElCSVBXXzUyR0haX01BWF9DSEFOTkVMIDE2NQorI2RlZmluZSBMSUJJUFdfNTJHSFpfQ0hBTk5FTFMgKExJQklQV181MkdIWl9NQVhfQ0hBTk5FTCAtIFwKKwkJCQkgIExJQklQV181MkdIWl9NSU5fQ0hBTk5FTCArIDEpCisKK2VudW0geworCUxJQklQV19DSF9QQVNTSVZFX09OTFkgPSAoMSA8PCAwKSwKKwlMSUJJUFdfQ0hfODAyMTFIX1JVTEVTID0gKDEgPDwgMSksCisJTElCSVBXX0NIX0JfT05MWSA9ICgxIDw8IDIpLAorCUxJQklQV19DSF9OT19JQlNTID0gKDEgPDwgMyksCisJTElCSVBXX0NIX1VOSUZPUk1fU1BSRUFESU5HID0gKDEgPDwgNCksCisJTElCSVBXX0NIX1JBREFSX0RFVEVDVCA9ICgxIDw8IDUpLAorCUxJQklQV19DSF9JTlZBTElEID0gKDEgPDwgNiksCit9OworCitzdHJ1Y3QgbGliaXB3X2NoYW5uZWwgeworCXUzMiBmcmVxOwkvKiBpbiBNSHogKi8KKwl1OCBjaGFubmVsOworCXU4IGZsYWdzOworCXU4IG1heF9wb3dlcjsJLyogaW4gZEJtICovCit9OworCitzdHJ1Y3QgbGliaXB3X2dlbyB7CisJdTggbmFtZVs0XTsKKwl1OCBiZ19jaGFubmVsczsKKwl1OCBhX2NoYW5uZWxzOworCXN0cnVjdCBsaWJpcHdfY2hhbm5lbCBiZ1tMSUJJUFdfMjRHSFpfQ0hBTk5FTFNdOworCXN0cnVjdCBsaWJpcHdfY2hhbm5lbCBhW0xJQklQV181MkdIWl9DSEFOTkVMU107Cit9OworCitzdHJ1Y3QgbGliaXB3X2RldmljZSB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2IHdkZXY7CisJc3RydWN0IGxpYmlwd19zZWN1cml0eSBzZWM7CisKKwkvKiBCb29ra2VlcGluZyBzdHJ1Y3R1cmVzICovCisJc3RydWN0IGxpYmlwd19zdGF0cyBpZWVlX3N0YXRzOworCisJc3RydWN0IGxpYmlwd19nZW8gZ2VvOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmdfYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGFfYmFuZDsKKworCS8qIFByb2JlIC8gQmVhY29uIG1hbmFnZW1lbnQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIG5ldHdvcmtfZnJlZV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgbmV0d29ya19saXN0OworCXN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29ya3M7CisJaW50IHNjYW5zOworCWludCBzY2FuX2FnZTsKKworCWludCBpd19tb2RlOwkJLyogb3BlcmF0aW5nIG1vZGUgKElXX01PREVfKikgKi8KKwlzdHJ1Y3QgaXdfc3B5X2RhdGEgc3B5X2RhdGE7CS8qIGl3c3B5IHN1cHBvcnQgKi8KKworCXNwaW5sb2NrX3QgbG9jazsKKworCWludCB0eF9oZWFkcm9vbTsJLyogU2V0IHRvIHNpemUgb2YgYW55IGFkZGl0aW9uYWwgcm9vbSBuZWVkZWQgYXQgZnJvbnQKKwkJCQkgKiBvZiBhbGxvY2F0ZWQgVHggU0tCcyAqLworCXUzMiBjb25maWc7CisKKwkvKiBXRVAgYW5kIG90aGVyIGVuY3J5cHRpb24gcmVsYXRlZCBzZXR0aW5ncyBhdCB0aGUgZGV2aWNlIGxldmVsICovCisJaW50IG9wZW5fd2VwOwkJLyogU2V0IHRvIDEgdG8gYWxsb3cgdW5lbmNyeXB0ZWQgZnJhbWVzICovCisKKwlpbnQgcmVzZXRfb25fa2V5Y2hhbmdlOwkvKiBTZXQgdG8gMSBpZiB0aGUgSFcgbmVlZHMgdG8gYmUgcmVzZXQgb24KKwkJCQkgKiBXRVAga2V5IGNoYW5nZXMgKi8KKworCS8qIElmIHRoZSBob3N0IHBlcmZvcm1zIHtlbixkZX1jcnlwdGlvbiwgdGhlbiBzZXQgdG8gMSAqLworCWludCBob3N0X2VuY3J5cHQ7CisJaW50IGhvc3RfZW5jcnlwdF9tc2R1OworCWludCBob3N0X2RlY3J5cHQ7CisJLyogaG9zdCBwZXJmb3JtcyBtdWx0aWNhc3QgZGVjcnlwdGlvbiAqLworCWludCBob3N0X21jX2RlY3J5cHQ7CisKKwkvKiBob3N0IHNob3VsZCBzdHJpcCBJViBhbmQgSUNWIGZyb20gcHJvdGVjdGVkIGZyYW1lcyAqLworCS8qIG1lYW5pbmdmdWwgb25seSB3aGVuIGhhcmR3YXJlIGRlY3J5cHRpb24gaXMgYmVpbmcgdXNlZCAqLworCWludCBob3N0X3N0cmlwX2l2X2ljdjsKKworCWludCBob3N0X29wZW5fZnJhZzsKKwlpbnQgaG9zdF9idWlsZF9pdjsKKwlpbnQgaWVlZTgwMl8xeDsJCS8qIGlzIElFRUUgODAyLjFYIHVzZWQgKi8KKworCS8qIFdQQSBkYXRhICovCisJaW50IHdwYV9lbmFibGVkOworCWludCBkcm9wX3VuZW5jcnlwdGVkOworCWludCBwcml2YWN5X2ludm9rZWQ7CisJc2l6ZV90IHdwYV9pZV9sZW47CisJdTggKndwYV9pZTsKKworCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9pbmZvIGNyeXB0X2luZm87CisKKwlpbnQgYmNyeF9zdGFfa2V5OwkvKiB1c2UgaW5kaXZpZHVhbCBrZXlzIHRvIG92ZXJyaWRlIGRlZmF1bHQga2V5cyBldmVuCisJCQkJICogd2l0aCBSWCBvZiBicm9hZC9tdWx0aWNhc3QgZnJhbWVzICovCisKKwkvKiBGcmFnbWVudGF0aW9uIHN0cnVjdHVyZXMgKi8KKwlzdHJ1Y3QgbGliaXB3X2ZyYWdfZW50cnkgZnJhZ19jYWNoZVtMSUJJUFdfRlJBR19DQUNIRV9MRU5dOworCXVuc2lnbmVkIGludCBmcmFnX25leHRfaWR4OworCXUxNiBmdHM7CQkvKiBGcmFnbWVudGF0aW9uIFRocmVzaG9sZCAqLworCXUxNiBydHM7CQkvKiBSVFMgdGhyZXNob2xkICovCisKKwkvKiBBc3NvY2lhdGlvbiBpbmZvICovCisJdTggYnNzaWRbRVRIX0FMRU5dOworCisJZW51bSBsaWJpcHdfc3RhdGUgc3RhdGU7CisKKwlpbnQgbW9kZTsJCS8qIEEsIEIsIEcgKi8KKwlpbnQgbW9kdWxhdGlvbjsJCS8qIENDSywgT0ZETSAqLworCWludCBmcmVxX2JhbmQ7CQkvKiAyLjRHaHosIDUuMkdoeiwgTWl4ZWQgKi8KKwlpbnQgYWJnX3RydWU7CQkvKiBBQkcgZmxhZyAgICAgICAgICAgICAgKi8KKworCWludCBwZXJmZWN0X3Jzc2k7CisJaW50IHdvcnN0X3Jzc2k7CisKKwl1MTYgcHJldl9zZXFfY3RsOwkvKiB1c2VkIHRvIGRyb3AgZHVwbGljYXRlIGZyYW1lcyAqLworCisJLyogQ2FsbGJhY2sgZnVuY3Rpb25zICovCisJdm9pZCAoKnNldF9zZWN1cml0eSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAorCQkJICAgICAgc3RydWN0IGxpYmlwd19zZWN1cml0eSAqIHNlYyk7CisJbmV0ZGV2X3R4X3QgKCpoYXJkX3N0YXJ0X3htaXQpIChzdHJ1Y3QgbGliaXB3X3R4YiAqIHR4YiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBwcmkpOworCWludCAoKnJlc2V0X3BvcnQpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7CisJaW50ICgqaXNfcXVldWVfZnVsbCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBpbnQgcHJpKTsKKworCWludCAoKmhhbmRsZV9tYW5hZ2VtZW50KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJICBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKiBuZXR3b3JrLCB1MTYgdHlwZSk7CisJaW50ICgqaXNfcW9zX2FjdGl2ZSkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOworCisJLyogVHlwaWNhbCBTVEEgbWV0aG9kcyAqLworCWludCAoKmhhbmRsZV9hdXRoKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkgICAgc3RydWN0IGxpYmlwd19hdXRoICogYXV0aCk7CisJaW50ICgqaGFuZGxlX2RlYXV0aCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAorCQkJICAgICAgc3RydWN0IGxpYmlwd19kZWF1dGggKiBhdXRoKTsKKwlpbnQgKCpoYW5kbGVfYWN0aW9uKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkgICAgICBzdHJ1Y3QgbGliaXB3X2FjdGlvbiAqIGFjdGlvbiwKKwkJCSAgICAgIHN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgKiBzdGF0cyk7CisJaW50ICgqaGFuZGxlX2Rpc2Fzc29jKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJc3RydWN0IGxpYmlwd19kaXNhc3NvYyAqIGFzc29jKTsKKwlpbnQgKCpoYW5kbGVfYmVhY29uKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkgICAgICBzdHJ1Y3QgbGliaXB3X2JlYWNvbiAqIGJlYWNvbiwKKwkJCSAgICAgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqIG5ldHdvcmspOworCWludCAoKmhhbmRsZV9wcm9iZV9yZXNwb25zZSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAorCQkJCSAgICAgIHN0cnVjdCBsaWJpcHdfcHJvYmVfcmVzcG9uc2UgKiByZXNwLAorCQkJCSAgICAgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqIG5ldHdvcmspOworCWludCAoKmhhbmRsZV9wcm9iZV9yZXF1ZXN0KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJICAgICBzdHJ1Y3QgbGliaXB3X3Byb2JlX3JlcXVlc3QgKiByZXEsCisJCQkJICAgICBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICogc3RhdHMpOworCWludCAoKmhhbmRsZV9hc3NvY19yZXNwb25zZSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAorCQkJCSAgICAgIHN0cnVjdCBsaWJpcHdfYXNzb2NfcmVzcG9uc2UgKiByZXNwLAorCQkJCSAgICAgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqIG5ldHdvcmspOworCisJLyogVHlwaWNhbCBBUCBtZXRob2RzICovCisJaW50ICgqaGFuZGxlX2Fzc29jX3JlcXVlc3QpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7CisJaW50ICgqaGFuZGxlX3JlYXNzb2NfcmVxdWVzdCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgbGliaXB3X3JlYXNzb2NfcmVxdWVzdCAqIHJlcSk7CisKKwkvKiBUaGlzIG11c3QgYmUgdGhlIGxhc3QgaXRlbSBzbyB0aGF0IGl0IHBvaW50cyB0byB0aGUgZGF0YQorCSAqIGFsbG9jYXRlZCBiZXlvbmQgdGhpcyBzdHJ1Y3R1cmUgYnkgYWxsb2NfaWVlZTgwMjExICovCisJdTggcHJpdlswXTsKK307CisKKyNkZWZpbmUgSUVFRV9BICAgICAgICAgICAgKDE8PDApCisjZGVmaW5lIElFRUVfQiAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBJRUVFX0cgICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgSUVFRV9NT0RFX01BU0sgICAgKElFRUVfQXxJRUVFX0J8SUVFRV9HKQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmxpYmlwd19wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuICgoc3RydWN0IGxpYmlwd19kZXZpY2UgKiluZXRkZXZfcHJpdihkZXYpKS0+cHJpdjsKK30KKworc3RhdGljIGlubGluZSBpbnQgbGliaXB3X2lzX3ZhbGlkX21vZGUoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCisJCQkJCSAgaW50IG1vZGUpCit7CisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSBmb3IgYm90aCBhY2Nlc3MgcG9pbnRzIGFuZCBvdXIgZGV2aWNlIHRvIHN1cHBvcnQKKwkgKiBjb21iaW5hdGlvbnMgb2YgbW9kZXMsIHNvIGFzIGxvbmcgYXMgdGhlcmUgaXMgb25lIHZhbGlkIGNvbWJpbmF0aW9uCisJICogb2YgYXAvZGV2aWNlIHN1cHBvcnRlZCBtb2RlcywgdGhlbiByZXR1cm4gc3VjY2VzcworCSAqCisJICovCisJaWYgKChtb2RlICYgSUVFRV9BKSAmJgorCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIExJQklQV19PRkRNX01PRFVMQVRJT04pICYmCisJICAgIChpZWVlLT5mcmVxX2JhbmQgJiBMSUJJUFdfNTJHSFpfQkFORCkpCisJCXJldHVybiAxOworCisJaWYgKChtb2RlICYgSUVFRV9HKSAmJgorCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIExJQklQV19PRkRNX01PRFVMQVRJT04pICYmCisJICAgIChpZWVlLT5mcmVxX2JhbmQgJiBMSUJJUFdfMjRHSFpfQkFORCkpCisJCXJldHVybiAxOworCisJaWYgKChtb2RlICYgSUVFRV9CKSAmJgorCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIExJQklQV19DQ0tfTU9EVUxBVElPTikgJiYKKwkgICAgKGllZWUtPmZyZXFfYmFuZCAmIExJQklQV18yNEdIWl9CQU5EKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbGliaXB3X2dldF9oZHJsZW4odTE2IGZjKQoreworCWludCBoZHJsZW4gPSBMSUJJUFdfM0FERFJfTEVOOworCXUxNiBzdHlwZSA9IFdMQU5fRkNfR0VUX1NUWVBFKGZjKTsKKworCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRShmYykpIHsKKwljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgorCQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSkKKwkJCWhkcmxlbiA9IExJQklQV180QUREUl9MRU47CisJCWlmIChzdHlwZSAmIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSkKKwkJCWhkcmxlbiArPSAyOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6CisJCXN3aXRjaCAoV0xBTl9GQ19HRVRfU1RZUEUoZmMpKSB7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNLOgorCQkJaGRybGVuID0gTElCSVBXXzFBRERSX0xFTjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaGRybGVuID0gTElCSVBXXzJBRERSX0xFTjsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiBoZHJsZW47Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggKmxpYmlwd19nZXRfcGF5bG9hZChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQoreworCXN3aXRjaCAobGliaXB3X2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwljYXNlIExJQklQV18xQUREUl9MRU46CisJCXJldHVybiAoKHN0cnVjdCBsaWJpcHdfaGRyXzFhZGRyICopaGRyKS0+cGF5bG9hZDsKKwljYXNlIExJQklQV18yQUREUl9MRU46CisJCXJldHVybiAoKHN0cnVjdCBsaWJpcHdfaGRyXzJhZGRyICopaGRyKS0+cGF5bG9hZDsKKwljYXNlIExJQklQV18zQUREUl9MRU46CisJCXJldHVybiAoKHN0cnVjdCBsaWJpcHdfaGRyXzNhZGRyICopaGRyKS0+cGF5bG9hZDsKKwljYXNlIExJQklQV180QUREUl9MRU46CisJCXJldHVybiAoKHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICopaGRyKS0+cGF5bG9hZDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxpYmlwd19pc19vZmRtX3JhdGUodTggcmF0ZSkKK3sKKwlzd2l0Y2ggKHJhdGUgJiB+TElCSVBXX0JBU0lDX1JBVEVfTUFTSykgeworCWNhc2UgTElCSVBXX09GRE1fUkFURV82TUI6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzlNQjoKKwljYXNlIExJQklQV19PRkRNX1JBVEVfMTJNQjoKKwljYXNlIExJQklQV19PRkRNX1JBVEVfMThNQjoKKwljYXNlIExJQklQV19PRkRNX1JBVEVfMjRNQjoKKwljYXNlIExJQklQV19PRkRNX1JBVEVfMzZNQjoKKwljYXNlIExJQklQV19PRkRNX1JBVEVfNDhNQjoKKwljYXNlIExJQklQV19PRkRNX1JBVEVfNTRNQjoKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBsaWJpcHdfaXNfY2NrX3JhdGUodTggcmF0ZSkKK3sKKwlzd2l0Y2ggKHJhdGUgJiB+TElCSVBXX0JBU0lDX1JBVEVfTUFTSykgeworCWNhc2UgTElCSVBXX0NDS19SQVRFXzFNQjoKKwljYXNlIExJQklQV19DQ0tfUkFURV8yTUI6CisJY2FzZSBMSUJJUFdfQ0NLX1JBVEVfNU1COgorCWNhc2UgTElCSVBXX0NDS19SQVRFXzExTUI6CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogaWVlZTgwMjExLmMgKi8KK2V4dGVybiB2b2lkIGZyZWVfaWVlZTgwMjExKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtb25pdG9yKTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaWVlZTgwMjExKGludCBzaXplb2ZfcHJpdiwgaW50IG1vbml0b3IpOworZXh0ZXJuIGludCBsaWJpcHdfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSk7CisKK2V4dGVybiB2b2lkIGxpYmlwd19uZXR3b3Jrc19hZ2Uoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCisJCQkJICAgdW5zaWduZWQgbG9uZyBhZ2Vfc2Vjcyk7CisKK2V4dGVybiBpbnQgbGliaXB3X3NldF9lbmNyeXB0aW9uKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlKTsKKworLyogbGliaXB3X3R4LmMgKi8KK2V4dGVybiBuZXRkZXZfdHhfdCBsaWJpcHdfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgbGliaXB3X3R4Yl9mcmVlKHN0cnVjdCBsaWJpcHdfdHhiICopOworCisvKiBsaWJpcHdfcnguYyAqLworZXh0ZXJuIHZvaWQgbGliaXB3X3J4X2FueShzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICpzdGF0cyk7CitleHRlcm4gaW50IGxpYmlwd19yeChzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKKy8qIG1ha2Ugc3VyZSB0byBzZXQgc3RhdHMtPmxlbiAqLworZXh0ZXJuIHZvaWQgbGliaXB3X3J4X21ndChzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKKwkJCSAgICAgc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKmhlYWRlciwKKwkJCSAgICAgc3RydWN0IGxpYmlwd19yeF9zdGF0cyAqc3RhdHMpOworZXh0ZXJuIHZvaWQgbGliaXB3X25ldHdvcmtfcmVzZXQoc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrKTsKKworLyogbGliaXB3X2dlby5jICovCitleHRlcm4gY29uc3Qgc3RydWN0IGxpYmlwd19nZW8gKmxpYmlwd19nZXRfZ2VvKHN0cnVjdCBsaWJpcHdfZGV2aWNlCisJCQkJCQkgICAgICppZWVlKTsKK2V4dGVybiBpbnQgbGliaXB3X3NldF9nZW8oc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBsaWJpcHdfZ2VvICpnZW8pOworCitleHRlcm4gaW50IGxpYmlwd19pc192YWxpZF9jaGFubmVsKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAorCQkJCSAgICAgIHU4IGNoYW5uZWwpOworZXh0ZXJuIGludCBsaWJpcHdfY2hhbm5lbF90b19pbmRleChzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKKwkJCQkgICAgICB1OCBjaGFubmVsKTsKK2V4dGVybiB1OCBsaWJpcHdfZnJlcV90b19jaGFubmVsKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLCB1MzIgZnJlcSk7CitleHRlcm4gdTggbGliaXB3X2dldF9jaGFubmVsX2ZsYWdzKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAorCQkJCSAgICAgIHU4IGNoYW5uZWwpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsaWJpcHdfY2hhbm5lbCAqbGliaXB3X2dldF9jaGFubmVsKHN0cnVjdAorCQkJCQkJCSAgICAgbGliaXB3X2RldmljZQorCQkJCQkJCSAgICAgKmllZWUsIHU4IGNoYW5uZWwpOworZXh0ZXJuIHUzMiBsaWJpcHdfY2hhbm5lbF90b19mcmVxKHN0cnVjdCBsaWJpcHdfZGV2aWNlICogaWVlZSwKKwkJCQkgICAgICB1OCBjaGFubmVsKTsKKworLyogbGliaXB3X3d4LmMgKi8KK2V4dGVybiBpbnQgbGliaXB3X3d4X2dldF9zY2FuKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICprZXkpOworZXh0ZXJuIGludCBsaWJpcHdfd3hfc2V0X2VuY29kZShzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleSk7CitleHRlcm4gaW50IGxpYmlwd193eF9nZXRfZW5jb2RlKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqa2V5KTsKK2V4dGVybiBpbnQgbGliaXB3X3d4X3NldF9lbmNvZGVleHQoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCisJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7CitleHRlcm4gaW50IGxpYmlwd193eF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAorCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbGliaXB3X2luY3JlbWVudF9zY2FucyhzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSkKK3sKKwlpZWVlLT5zY2FucysrOworfQorCitzdGF0aWMgaW5saW5lIGludCBsaWJpcHdfZ2V0X3NjYW5zKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlKQoreworCXJldHVybiBpZWVlLT5zY2FuczsKK30KKworI2VuZGlmCQkJCS8qIExJQklQV19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19nZW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCmluZGV4IDlkZmJiODcuLjY1ZThjMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCkBAIC0xOSw3ICsxOSw3IEBACiAgIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAKICAgQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAgSmFtZXMgUC4gS2V0cmVub3MgPGlwdzIxMDAtYWRtaW5AbGludXguaW50ZWwuY29tPgorICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KICAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MSw5ICs0MSw5IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAiaWVlZTgwMjExLmgiCisjaW5jbHVkZSAibGliaXB3LmgiCiAKLWludCBpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggY2hhbm5lbCkKK2ludCBsaWJpcHdfaXNfdmFsaWRfY2hhbm5lbChzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwgdTggY2hhbm5lbCkKIHsKIAlpbnQgaTsKIApAQCAtNTIsMjcgKzUyLDI3IEBACiAJaWYgKGllZWUtPmdlby5iZ19jaGFubmVscyA9PSAwICYmIGllZWUtPmdlby5hX2NoYW5uZWxzID09IDApCiAJCXJldHVybiAwOwogCi0JaWYgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKQorCWlmIChpZWVlLT5mcmVxX2JhbmQgJiBMSUJJUFdfMjRHSFpfQkFORCkKIAkJZm9yIChpID0gMDsgaSA8IGllZWUtPmdlby5iZ19jaGFubmVsczsgaSsrKQogCQkJLyogTk9URTogSWYgRyBtb2RlIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnV0CiAJCQkgKiB0aGlzIGlzIGEgQiBvbmx5IGNoYW5uZWwsIHdlIGRvbid0IHNlZSBpdAogCQkJICogYXMgdmFsaWQuICovCiAJCQlpZiAoKGllZWUtPmdlby5iZ1tpXS5jaGFubmVsID09IGNoYW5uZWwpICYmCi0JCQkgICAgIShpZWVlLT5nZW8uYmdbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfSU5WQUxJRCkgJiYKKwkJCSAgICAhKGllZWUtPmdlby5iZ1tpXS5mbGFncyAmIExJQklQV19DSF9JTlZBTElEKSAmJgogCQkJICAgICghKGllZWUtPm1vZGUgJiBJRUVFX0cpIHx8Ci0JCQkgICAgICEoaWVlZS0+Z2VvLmJnW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX0JfT05MWSkpKQotCQkJCXJldHVybiBJRUVFODAyMTFfMjRHSFpfQkFORDsKKwkJCSAgICAgIShpZWVlLT5nZW8uYmdbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfQl9PTkxZKSkpCisJCQkJcmV0dXJuIExJQklQV18yNEdIWl9CQU5EOwogCi0JaWYgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV81MkdIWl9CQU5EKQorCWlmIChpZWVlLT5mcmVxX2JhbmQgJiBMSUJJUFdfNTJHSFpfQkFORCkKIAkJZm9yIChpID0gMDsgaSA8IGllZWUtPmdlby5hX2NoYW5uZWxzOyBpKyspCiAJCQlpZiAoKGllZWUtPmdlby5hW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkgJiYKLQkJCSAgICAhKGllZWUtPmdlby5hW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX0lOVkFMSUQpKQotCQkJCXJldHVybiBJRUVFODAyMTFfNTJHSFpfQkFORDsKKwkJCSAgICAhKGllZWUtPmdlby5hW2ldLmZsYWdzICYgTElCSVBXX0NIX0lOVkFMSUQpKQorCQkJCXJldHVybiBMSUJJUFdfNTJHSFpfQkFORDsKIAogCXJldHVybiAwOwogfQogCi1pbnQgaWVlZTgwMjExX2NoYW5uZWxfdG9faW5kZXgoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4IGNoYW5uZWwpCitpbnQgbGliaXB3X2NoYW5uZWxfdG9faW5kZXgoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsIHU4IGNoYW5uZWwpCiB7CiAJaW50IGk7CiAKQEAgLTgxLDEyICs4MSwxMiBAQAogCWlmIChpZWVlLT5nZW8uYmdfY2hhbm5lbHMgPT0gMCAmJiBpZWVlLT5nZW8uYV9jaGFubmVscyA9PSAwKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpCisJaWYgKGllZWUtPmZyZXFfYmFuZCAmIExJQklQV18yNEdIWl9CQU5EKQogCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmJnX2NoYW5uZWxzOyBpKyspCiAJCQlpZiAoaWVlZS0+Z2VvLmJnW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkKIAkJCQlyZXR1cm4gaTsKIAotCWlmIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfNTJHSFpfQkFORCkKKwlpZiAoaWVlZS0+ZnJlcV9iYW5kICYgTElCSVBXXzUyR0haX0JBTkQpCiAJCWZvciAoaSA9IDA7IGkgPCBpZWVlLT5nZW8uYV9jaGFubmVsczsgaSsrKQogCQkJaWYgKGllZWUtPmdlby5hW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkKIAkJCQlyZXR1cm4gaTsKQEAgLTk0LDIyICs5NCwyMiBAQAogCXJldHVybiAtMTsKIH0KIAotdTMyIGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXEoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlLCB1OCBjaGFubmVsKQordTMyIGxpYmlwd19jaGFubmVsX3RvX2ZyZXEoc3RydWN0IGxpYmlwd19kZXZpY2UgKiBpZWVlLCB1OCBjaGFubmVsKQogewotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqIGNoOworCWNvbnN0IHN0cnVjdCBsaWJpcHdfY2hhbm5lbCAqIGNoOwogCiAJLyogRHJpdmVyIG5lZWRzIHRvIGluaXRpYWxpemUgdGhlIGdlb2dyYXBoeSBtYXAgYmVmb3JlIHVzaW5nCiAJICogdGhlc2UgaGVscGVyIGZ1bmN0aW9ucyAqLwogCWlmIChpZWVlLT5nZW8uYmdfY2hhbm5lbHMgPT0gMCAmJiBpZWVlLT5nZW8uYV9jaGFubmVscyA9PSAwKQogCQlyZXR1cm4gMDsKIAotCWNoID0gaWVlZTgwMjExX2dldF9jaGFubmVsKGllZWUsIGNoYW5uZWwpOworCWNoID0gbGliaXB3X2dldF9jaGFubmVsKGllZWUsIGNoYW5uZWwpOwogCWlmICghY2gtPmNoYW5uZWwpCiAJCXJldHVybiAwOwogCXJldHVybiBjaC0+ZnJlcTsKIH0KIAotdTggaWVlZTgwMjExX2ZyZXFfdG9fY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGllZWUsIHUzMiBmcmVxKQordTggbGliaXB3X2ZyZXFfdG9fY2hhbm5lbChzdHJ1Y3QgbGliaXB3X2RldmljZSAqIGllZWUsIHUzMiBmcmVxKQogewogCWludCBpOwogCkBAIC0xMjAsMTIgKzEyMCwxMiBAQAogCiAJZnJlcSAvPSAxMDAwMDA7CiAKLQlpZiAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpCisJaWYgKGllZWUtPmZyZXFfYmFuZCAmIExJQklQV18yNEdIWl9CQU5EKQogCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmJnX2NoYW5uZWxzOyBpKyspCiAJCQlpZiAoaWVlZS0+Z2VvLmJnW2ldLmZyZXEgPT0gZnJlcSkKIAkJCQlyZXR1cm4gaWVlZS0+Z2VvLmJnW2ldLmNoYW5uZWw7CiAKLQlpZiAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzUyR0haX0JBTkQpCisJaWYgKGllZWUtPmZyZXFfYmFuZCAmIExJQklQV181MkdIWl9CQU5EKQogCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmFfY2hhbm5lbHM7IGkrKykKIAkJCWlmIChpZWVlLT5nZW8uYVtpXS5mcmVxID09IGZyZXEpCiAJCQkJcmV0dXJuIGllZWUtPmdlby5hW2ldLmNoYW5uZWw7CkBAIC0xMzMsNjMgKzEzMyw2MyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaWVlZTgwMjExX3NldF9nZW8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8pCitpbnQgbGliaXB3X3NldF9nZW8oc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBsaWJpcHdfZ2VvICpnZW8pCiB7CiAJbWVtY3B5KGllZWUtPmdlby5uYW1lLCBnZW8tPm5hbWUsIDMpOwogCWllZWUtPmdlby5uYW1lWzNdID0gJ1wwJzsKIAlpZWVlLT5nZW8uYmdfY2hhbm5lbHMgPSBnZW8tPmJnX2NoYW5uZWxzOwogCWllZWUtPmdlby5hX2NoYW5uZWxzID0gZ2VvLT5hX2NoYW5uZWxzOwogCW1lbWNweShpZWVlLT5nZW8uYmcsIGdlby0+YmcsIGdlby0+YmdfY2hhbm5lbHMgKgotCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsKSk7CisJICAgICAgIHNpemVvZihzdHJ1Y3QgbGliaXB3X2NoYW5uZWwpKTsKIAltZW1jcHkoaWVlZS0+Z2VvLmEsIGdlby0+YSwgaWVlZS0+Z2VvLmFfY2hhbm5lbHMgKgotCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsKSk7CisJICAgICAgIHNpemVvZihzdHJ1Y3QgbGliaXB3X2NoYW5uZWwpKTsKIAlyZXR1cm4gMDsKIH0KIAotY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmllZWU4MDIxMV9nZXRfZ2VvKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQorY29uc3Qgc3RydWN0IGxpYmlwd19nZW8gKmxpYmlwd19nZXRfZ2VvKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlKQogewogCXJldHVybiAmaWVlZS0+Z2VvOwogfQogCi11OCBpZWVlODAyMTFfZ2V0X2NoYW5uZWxfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlLCB1OCBjaGFubmVsKQordTggbGliaXB3X2dldF9jaGFubmVsX2ZsYWdzKHN0cnVjdCBsaWJpcHdfZGV2aWNlICogaWVlZSwgdTggY2hhbm5lbCkKIHsKLQlpbnQgaW5kZXggPSBpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleChpZWVlLCBjaGFubmVsKTsKKwlpbnQgaW5kZXggPSBsaWJpcHdfY2hhbm5lbF90b19pbmRleChpZWVlLCBjaGFubmVsKTsKIAogCWlmIChpbmRleCA9PSAtMSkKLQkJcmV0dXJuIElFRUU4MDIxMV9DSF9JTlZBTElEOworCQlyZXR1cm4gTElCSVBXX0NIX0lOVkFMSUQ7CiAKLQlpZiAoY2hhbm5lbCA8PSBJRUVFODAyMTFfMjRHSFpfQ0hBTk5FTFMpCisJaWYgKGNoYW5uZWwgPD0gTElCSVBXXzI0R0haX0NIQU5ORUxTKQogCQlyZXR1cm4gaWVlZS0+Z2VvLmJnW2luZGV4XS5mbGFnczsKIAogCXJldHVybiBpZWVlLT5nZW8uYVtpbmRleF0uZmxhZ3M7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYmFkX2NoYW5uZWwgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxpYmlwd19jaGFubmVsIGJhZF9jaGFubmVsID0gewogCS5jaGFubmVsID0gMCwKLQkuZmxhZ3MgPSBJRUVFODAyMTFfQ0hfSU5WQUxJRCwKKwkuZmxhZ3MgPSBMSUJJUFdfQ0hfSU5WQUxJRCwKIAkubWF4X3Bvd2VyID0gMCwKIH07CiAKLWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqaWVlZTgwMjExX2dldF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlCitjb25zdCBzdHJ1Y3QgbGliaXB3X2NoYW5uZWwgKmxpYmlwd19nZXRfY2hhbm5lbChzdHJ1Y3QgbGliaXB3X2RldmljZQogCQkJCQkJICAgICAgKmllZWUsIHU4IGNoYW5uZWwpCiB7Ci0JaW50IGluZGV4ID0gaWVlZTgwMjExX2NoYW5uZWxfdG9faW5kZXgoaWVlZSwgY2hhbm5lbCk7CisJaW50IGluZGV4ID0gbGliaXB3X2NoYW5uZWxfdG9faW5kZXgoaWVlZSwgY2hhbm5lbCk7CiAKIAlpZiAoaW5kZXggPT0gLTEpCiAJCXJldHVybiAmYmFkX2NoYW5uZWw7CiAKLQlpZiAoY2hhbm5lbCA8PSBJRUVFODAyMTFfMjRHSFpfQ0hBTk5FTFMpCisJaWYgKGNoYW5uZWwgPD0gTElCSVBXXzI0R0haX0NIQU5ORUxTKQogCQlyZXR1cm4gJmllZWUtPmdlby5iZ1tpbmRleF07CiAKIAlyZXR1cm4gJmllZWUtPmdlby5hW2luZGV4XTsKIH0KIAotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X2NoYW5uZWwpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X2NoYW5uZWxfZmxhZ3MpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbCk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9mcmVxX3RvX2NoYW5uZWwpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2NoYW5uZWxfdG9faW5kZXgpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2V0X2dlbyk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9nZXRfZ2VvKTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X2dldF9jaGFubmVsKTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X2dldF9jaGFubmVsX2ZsYWdzKTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X2lzX3ZhbGlkX2NoYW5uZWwpOworRVhQT1JUX1NZTUJPTChsaWJpcHdfZnJlcV90b19jaGFubmVsKTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X2NoYW5uZWxfdG9fZnJlcSk7CitFWFBPUlRfU1lNQk9MKGxpYmlwd19jaGFubmVsX3RvX2luZGV4KTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X3NldF9nZW8pOworRVhQT1JUX1NZTUJPTChsaWJpcHdfZ2V0X2dlbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCmluZGV4IDhjZTZlOTYuLmEwZTlmNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCkBAIC0yNSw3ICsyNSw3IEBACiAgIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAKICAgQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAgSmFtZXMgUC4gS2V0cmVub3MgPGlwdzIxMDAtYWRtaW5AbGludXguaW50ZWwuY29tPgorICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KICAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTAsMTEgKzUwLDExIEBACiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAKLSNpbmNsdWRlICJpZWVlODAyMTEuaCIKKyNpbmNsdWRlICJsaWJpcHcuaCIKIAogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04gIjgwMi4xMSBkYXRhL21hbmFnZW1lbnQvY29udHJvbCBzdGFjayIKICNkZWZpbmUgRFJWX05BTUUgICAgICAgICJpZWVlODAyMTEiCi0jZGVmaW5lIERSVl9WRVJTSU9OCUlFRUU4MDIxMV9WRVJTSU9OCisjZGVmaW5lIERSVl9WRVJTSU9OCUxJQklQV19WRVJTSU9OCiAjZGVmaW5lIERSVl9DT1BZUklHSFQgICAiQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgSW50ZWwgQ29ycG9yYXRpb24gPGprZXRyZW5vQGxpbnV4LmludGVsLmNvbT4iCiAKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKQEAgLTYyLDEzICs2MiwxNiBAQAogTU9EVUxFX0FVVEhPUihEUlZfQ09QWVJJR0hUKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIGludCBpZWVlODAyMTFfbmV0d29ya3NfYWxsb2NhdGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCitzdHJ1Y3QgY2ZnODAyMTFfb3BzIGxpYmlwd19jb25maWdfb3BzID0geyB9Owordm9pZCAqbGliaXB3X3dpcGh5X3ByaXZpZCA9ICZsaWJpcHdfd2lwaHlfcHJpdmlkOworCitzdGF0aWMgaW50IGxpYmlwd19uZXR3b3Jrc19hbGxvY2F0ZShzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSkKIHsKIAlpZiAoaWVlZS0+bmV0d29ya3MpCiAJCXJldHVybiAwOwogCiAJaWVlZS0+bmV0d29ya3MgPQotCSAgICBremFsbG9jKE1BWF9ORVRXT1JLX0NPVU5UICogc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayksCisJICAgIGt6YWxsb2MoTUFYX05FVFdPUktfQ09VTlQgKiBzaXplb2Yoc3RydWN0IGxpYmlwd19uZXR3b3JrKSwKIAkJICAgIEdGUF9LRVJORUwpOwogCWlmICghaWVlZS0+bmV0d29ya3MpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBiZWFjb25zXG4iLApAQCAtNzksNyArODIsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGllZWU4MDIxMV9uZXR3b3JrX3Jlc2V0KHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaykKK3ZvaWQgbGliaXB3X25ldHdvcmtfcmVzZXQoc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrKQogewogCWlmICghbmV0d29yaykKIAkJcmV0dXJuOwpAQCAtOTAsNyArOTMsNyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9uZXR3b3Jrc19mcmVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQorc3RhdGljIGlubGluZSB2b2lkIGxpYmlwd19uZXR3b3Jrc19mcmVlKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlKQogewogCWludCBpOwogCkBAIC0xMDUsMTAgKzEwOCwxMCBAQAogCWllZWUtPm5ldHdvcmtzID0gTlVMTDsKIH0KIAotdm9pZCBpZWVlODAyMTFfbmV0d29ya3NfYWdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAordm9pZCBsaWJpcHdfbmV0d29ya3NfYWdlKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKKwlzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmsgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBhZ2VfamlmZmllcyA9IG1zZWNzX3RvX2ppZmZpZXMoYWdlX3NlY3MgKiBNU0VDX1BFUl9TRUMpOwogCkBAIC0xMTgsOSArMTIxLDkgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfbmV0d29ya3NfYWdlKTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X25ldHdvcmtzX2FnZSk7CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9uZXR3b3Jrc19pbml0aWFsaXplKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQorc3RhdGljIHZvaWQgbGliaXB3X25ldHdvcmtzX2luaXRpYWxpemUoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUpCiB7CiAJaW50IGk7CiAKQEAgLTEzMSwzOCArMTM0LDU5IEBACiAJCQkgICAgICAmaWVlZS0+bmV0d29ya19mcmVlX2xpc3QpOwogfQogCi1pbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCitpbnQgbGliaXB3X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7Ci0JaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gSUVFRTgwMjExX0RBVEFfTEVOKSkKKwlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiBMSUJJUFdfREFUQV9MRU4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlkZXYtPm10dSA9IG5ld19tdHU7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9jaGFuZ2VfbXR1KTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X2NoYW5nZV9tdHUpOwogCi1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaWVlZTgwMjExKGludCBzaXplb2ZfcHJpdikKK3N0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pZWVlODAyMTEoaW50IHNpemVvZl9wcml2LCBpbnQgbW9uaXRvcikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTsKKwlzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBlcnI7CiAKLQlJRUVFODAyMTFfREVCVUdfSU5GTygiSW5pdGlhbGl6aW5nLi4uXG4iKTsKKwlMSUJJUFdfREVCVUdfSU5GTygiSW5pdGlhbGl6aW5nLi4uXG4iKTsKIAotCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSkgKyBzaXplb2ZfcHJpdik7CisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBsaWJpcHdfZGV2aWNlKSArIHNpemVvZl9wcml2KTsKIAlpZiAoIWRldikgewotCQlJRUVFODAyMTFfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZS5cbiIpOworCQlMSUJJUFdfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZS5cbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAJaWVlZSA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZWVlLT5kZXYgPSBkZXY7CiAKLQllcnIgPSBpZWVlODAyMTFfbmV0d29ya3NfYWxsb2NhdGUoaWVlZSk7Ci0JaWYgKGVycikgewotCQlJRUVFODAyMTFfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSBiZWFjb24gc3RvcmFnZTogJWRcbiIsIGVycik7Ci0JCWdvdG8gZmFpbGVkX2ZyZWVfbmV0ZGV2OworCWlmICghbW9uaXRvcikgeworCQlpZWVlLT53ZGV2LndpcGh5ID0gd2lwaHlfbmV3KCZsaWJpcHdfY29uZmlnX29wcywgMCk7CisJCWlmICghaWVlZS0+d2Rldi53aXBoeSkgeworCQkJTElCSVBXX0VSUk9SKCJVbmFibGUgdG8gYWxsb2NhdGUgd2lwaHkuXG4iKTsKKwkJCWdvdG8gZmFpbGVkX2ZyZWVfbmV0ZGV2OworCQl9CisKKwkJaWVlZS0+ZGV2LT5pZWVlODAyMTFfcHRyID0gJmllZWUtPndkZXY7CisJCWllZWUtPndkZXYuaWZ0eXBlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKworCQkvKiBGaWxsLW91dCB3aXBoeSBzdHJ1Y3R1cmUgYml0cyB3ZSBrbm93Li4uICBOb3QgZW5vdWdoIGluZm8KKwkJICAgaGVyZSB0byBjYWxsIHNldF93aXBoeV9kZXYgb3Igc2V0IE1BQyBhZGRyZXNzIG9yIGNoYW5uZWwgaW5mbworCQkgICAtLSBoYXZlIHRvIGRvIHRoYXQgaW4gLT5uZG9faW5pdC4uLiAqLworCQlpZWVlLT53ZGV2LndpcGh5LT5wcml2aWQgPSBsaWJpcHdfd2lwaHlfcHJpdmlkOworCisJCWllZWUtPndkZXYud2lwaHktPm1heF9zY2FuX3NzaWRzID0gMTsKKwkJaWVlZS0+d2Rldi53aXBoeS0+bWF4X3NjYW5faWVfbGVuID0gMDsKKwkJaWVlZS0+d2Rldi53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQkJCQl8IEJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAJfQotCWllZWU4MDIxMV9uZXR3b3Jrc19pbml0aWFsaXplKGllZWUpOworCisJZXJyID0gbGliaXB3X25ldHdvcmtzX2FsbG9jYXRlKGllZWUpOworCWlmIChlcnIpIHsKKwkJTElCSVBXX0VSUk9SKCJVbmFibGUgdG8gYWxsb2NhdGUgYmVhY29uIHN0b3JhZ2U6ICVkXG4iLCBlcnIpOworCQlnb3RvIGZhaWxlZF9mcmVlX3dpcGh5OworCX0KKwlsaWJpcHdfbmV0d29ya3NfaW5pdGlhbGl6ZShpZWVlKTsKIAogCS8qIERlZmF1bHQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgaXMgbWF4aW11bSBwYXlsb2FkIHNpemUgKi8KIAlpZWVlLT5mdHMgPSBERUZBVUxUX0ZUUzsKQEAgLTE5MywzMyArMjE3LDQ1IEBACiAKIAlyZXR1cm4gZGV2OwogCitmYWlsZWRfZnJlZV93aXBoeToKKwlpZiAoIW1vbml0b3IpCisJCXdpcGh5X2ZyZWUoaWVlZS0+d2Rldi53aXBoeSk7CiBmYWlsZWRfZnJlZV9uZXRkZXY6CiAJZnJlZV9uZXRkZXYoZGV2KTsKIGZhaWxlZDoKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCBmcmVlX2llZWU4MDIxMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQordm9pZCBmcmVlX2llZWU4MDIxMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbW9uaXRvcikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJbGliODAyMTFfY3J5cHRfaW5mb19mcmVlKCZpZWVlLT5jcnlwdF9pbmZvKTsKIAotCWllZWU4MDIxMV9uZXR3b3Jrc19mcmVlKGllZWUpOworCWxpYmlwd19uZXR3b3Jrc19mcmVlKGllZWUpOworCisJLyogZnJlZSBjZmc4MDIxMSByZXNvdXJjZXMgKi8KKwlpZiAoIW1vbml0b3IpIHsKKwkJd2lwaHlfdW5yZWdpc3RlcihpZWVlLT53ZGV2LndpcGh5KTsKKwkJa2ZyZWUoaWVlZS0+YV9iYW5kLmNoYW5uZWxzKTsKKwkJa2ZyZWUoaWVlZS0+YmdfYmFuZC5jaGFubmVscyk7CisJCXdpcGh5X2ZyZWUoaWVlZS0+d2Rldi53aXBoeSk7CisJfQorCiAJZnJlZV9uZXRkZXYoZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAogc3RhdGljIGludCBkZWJ1ZyA9IDA7Ci11MzIgaWVlZTgwMjExX2RlYnVnX2xldmVsID0gMDsKLUVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV9kZWJ1Z19sZXZlbCk7Ci1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICppZWVlODAyMTFfcHJvYyA9IE5VTEw7Cit1MzIgbGliaXB3X2RlYnVnX2xldmVsID0gMDsKK0VYUE9SVF9TWU1CT0xfR1BMKGxpYmlwd19kZWJ1Z19sZXZlbCk7CitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpsaWJpcHdfcHJvYyA9IE5VTEw7CiAKIHN0YXRpYyBpbnQgc2hvd19kZWJ1Z19sZXZlbChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKIAkJCSAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotCXJldHVybiBzbnByaW50ZihwYWdlLCBjb3VudCwgIjB4JTA4WFxuIiwgaWVlZTgwMjExX2RlYnVnX2xldmVsKTsKKwlyZXR1cm4gc25wcmludGYocGFnZSwgY291bnQsICIweCUwOFhcbiIsIGxpYmlwd19kZWJ1Z19sZXZlbCk7CiB9CiAKIHN0YXRpYyBpbnQgc3RvcmVfZGVidWdfbGV2ZWwoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLApAQCAtMjM2LDI5ICsyNzIsMjkgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQogCQkgICAgICAgIjogJXMgaXMgbm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOwogCWVsc2UKLQkJaWVlZTgwMjExX2RlYnVnX2xldmVsID0gdmFsOworCQlsaWJpcHdfZGVidWdfbGV2ZWwgPSB2YWw7CiAKIAlyZXR1cm4gc3RybmxlbihidWYsIGxlbik7CiB9CiAjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogCi1zdGF0aWMgaW50IF9faW5pdCBpZWVlODAyMTFfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbGliaXB3X2luaXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplOwogCi0JaWVlZTgwMjExX2RlYnVnX2xldmVsID0gZGVidWc7Ci0JaWVlZTgwMjExX3Byb2MgPSBwcm9jX21rZGlyKERSVl9OQU1FLCBpbml0X25ldC5wcm9jX25ldCk7Ci0JaWYgKGllZWU4MDIxMV9wcm9jID09IE5VTEwpIHsKLQkJSUVFRTgwMjExX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlICIgRFJWX05BTUUKKwlsaWJpcHdfZGVidWdfbGV2ZWwgPSBkZWJ1ZzsKKwlsaWJpcHdfcHJvYyA9IHByb2NfbWtkaXIoRFJWX05BTUUsIGluaXRfbmV0LnByb2NfbmV0KTsKKwlpZiAobGliaXB3X3Byb2MgPT0gTlVMTCkgeworCQlMSUJJUFdfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgIiBEUlZfTkFNRQogCQkJCSIgcHJvYyBkaXJlY3RvcnlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkZWJ1Z19sZXZlbCIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJCSAgICAgIGllZWU4MDIxMV9wcm9jKTsKKwkJCSAgICAgIGxpYmlwd19wcm9jKTsKIAlpZiAoIWUpIHsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoRFJWX05BTUUsIGluaXRfbmV0LnByb2NfbmV0KTsKLQkJaWVlZTgwMjExX3Byb2MgPSBOVUxMOworCQlsaWJpcHdfcHJvYyA9IE5VTEw7CiAJCXJldHVybiAtRUlPOwogCX0KIAllLT5yZWFkX3Byb2MgPSBzaG93X2RlYnVnX2xldmVsOwpAQCAtMjcyLDEzICszMDgsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGllZWU4MDIxMV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgbGliaXB3X2V4aXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCi0JaWYgKGllZWU4MDIxMV9wcm9jKSB7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KCJkZWJ1Z19sZXZlbCIsIGllZWU4MDIxMV9wcm9jKTsKKwlpZiAobGliaXB3X3Byb2MpIHsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoImRlYnVnX2xldmVsIiwgbGliaXB3X3Byb2MpOwogCQlyZW1vdmVfcHJvY19lbnRyeShEUlZfTkFNRSwgaW5pdF9uZXQucHJvY19uZXQpOwotCQlpZWVlODAyMTFfcHJvYyA9IE5VTEw7CisJCWxpYmlwd19wcm9jID0gTlVMTDsKIAl9CiAjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogfQpAQCAtMjg5LDggKzMyNSw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKICNlbmRpZgkJCQkvKiBDT05GSUdfTElCSVBXX0RFQlVHICovCiAKLW1vZHVsZV9leGl0KGllZWU4MDIxMV9leGl0KTsKLW1vZHVsZV9pbml0KGllZWU4MDIxMV9pbml0KTsKK21vZHVsZV9leGl0KGxpYmlwd19leGl0KTsKK21vZHVsZV9pbml0KGxpYmlwd19pbml0KTsKIAogRVhQT1JUX1NZTUJPTChhbGxvY19pZWVlODAyMTEpOwogRVhQT1JUX1NZTUJPTChmcmVlX2llZWU4MDIxMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfcnguYwppbmRleCBkYWU0YjhlLi4yODJiMWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3J4LmMKQEAgLTM0LDE4ICszNCwxOCBAQAogCiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAKLSNpbmNsdWRlICJpZWVlODAyMTEuaCIKKyNpbmNsdWRlICJsaWJpcHcuaCIKIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX21vbml0b3Jfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCitzdGF0aWMgdm9pZCBsaWJpcHdfbW9uaXRvcl9yeChzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpCisJCQkJCXN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCXNrYi0+ZGV2ID0gaWVlZS0+ZGV2OwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0Jc2tiX3B1bGwoc2tiLCBpZWVlODAyMTFfZ2V0X2hkcmxlbihmYykpOworCXNrYl9wdWxsKHNrYiwgbGliaXB3X2dldF9oZHJsZW4oZmMpKTsKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyMTFfUkFXKTsKIAltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKQEAgLTUzLDIyICs1MywyMiBAQAogfQogCiAvKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgKmllZWU4MDIxMV9mcmFnX2NhY2hlX2ZpbmQoc3RydWN0Ci0JCQkJCQkJICAgICAgaWVlZTgwMjExX2RldmljZQorc3RhdGljIHN0cnVjdCBsaWJpcHdfZnJhZ19lbnRyeSAqbGliaXB3X2ZyYWdfY2FjaGVfZmluZChzdHJ1Y3QKKwkJCQkJCQkgICAgICBsaWJpcHdfZGV2aWNlCiAJCQkJCQkJICAgICAgKmllZWUsCiAJCQkJCQkJICAgICAgdW5zaWduZWQgaW50IHNlcSwKIAkJCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgZnJhZywKIAkJCQkJCQkgICAgICB1OCAqIHNyYywKIAkJCQkJCQkgICAgICB1OCAqIGRzdCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgKmVudHJ5OworCXN0cnVjdCBsaWJpcHdfZnJhZ19lbnRyeSAqZW50cnk7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX0ZSQUdfQ0FDSEVfTEVOOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTElCSVBXX0ZSQUdfQ0FDSEVfTEVOOyBpKyspIHsKIAkJZW50cnkgPSAmaWVlZS0+ZnJhZ19jYWNoZVtpXTsKIAkJaWYgKGVudHJ5LT5za2IgIT0gTlVMTCAmJgogCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBlbnRyeS0+Zmlyc3RfZnJhZ190aW1lICsgMiAqIEhaKSkgewotCQkJSUVFRTgwMjExX0RFQlVHX0ZSQUcoImV4cGlyaW5nIGZyYWdtZW50IGNhY2hlIGVudHJ5ICIKKwkJCUxJQklQV19ERUJVR19GUkFHKCJleHBpcmluZyBmcmFnbWVudCBjYWNoZSBlbnRyeSAiCiAJCQkJCSAgICAgInNlcT0ldSBsYXN0X2ZyYWc9JXVcbiIsCiAJCQkJCSAgICAgZW50cnktPnNlcSwgZW50cnktPmxhc3RfZnJhZyk7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShlbnRyeS0+c2tiKTsKQEAgLTg2LDEzICs4NiwxMyBAQAogfQogCiAvKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2ZyYWdfY2FjaGVfZ2V0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCQkJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbGliaXB3X2ZyYWdfY2FjaGVfZ2V0KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAorCQkJCQkJc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKmhkcikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAl1MTYgc2M7CiAJdW5zaWduZWQgaW50IGZyYWcsIHNlcTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgKmVudHJ5OworCXN0cnVjdCBsaWJpcHdfZnJhZ19lbnRyeSAqZW50cnk7CiAKIAlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0bCk7CiAJZnJhZyA9IFdMQU5fR0VUX1NFUV9GUkFHKHNjKTsKQEAgLTEwMSw3ICsxMDEsNyBAQAogCWlmIChmcmFnID09IDApIHsKIAkJLyogUmVzZXJ2ZSBlbm91Z2ggc3BhY2UgdG8gZml0IG1heGltdW0gZnJhbWUgbGVuZ3RoICovCiAJCXNrYiA9IGRldl9hbGxvY19za2IoaWVlZS0+ZGV2LT5tdHUgKwotCQkJCSAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIpICsKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyKSArCiAJCQkJICAgIDggLyogTExDICovICArCiAJCQkJICAgIDIgLyogYWxpZ25tZW50ICovICArCiAJCQkJICAgIDggLyogV0VQICovICArIEVUSF9BTEVOIC8qIFdEUyAqLyApOwpAQCAtMTEwLDcgKzExMCw3IEBACiAKIAkJZW50cnkgPSAmaWVlZS0+ZnJhZ19jYWNoZVtpZWVlLT5mcmFnX25leHRfaWR4XTsKIAkJaWVlZS0+ZnJhZ19uZXh0X2lkeCsrOwotCQlpZiAoaWVlZS0+ZnJhZ19uZXh0X2lkeCA+PSBJRUVFODAyMTFfRlJBR19DQUNIRV9MRU4pCisJCWlmIChpZWVlLT5mcmFnX25leHRfaWR4ID49IExJQklQV19GUkFHX0NBQ0hFX0xFTikKIAkJCWllZWUtPmZyYWdfbmV4dF9pZHggPSAwOwogCiAJCWlmIChlbnRyeS0+c2tiICE9IE5VTEwpCkBAIC0xMjUsNyArMTI1LDcgQEAKIAl9IGVsc2UgewogCQkvKiByZWNlaXZlZCBhIGZyYWdtZW50IG9mIGEgZnJhbWUgZm9yIHdoaWNoIHRoZSBoZWFkIGZyYWdtZW50CiAJCSAqIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZWNlaXZlZCAqLwotCQllbnRyeSA9IGllZWU4MDIxMV9mcmFnX2NhY2hlX2ZpbmQoaWVlZSwgc2VxLCBmcmFnLCBoZHItPmFkZHIyLAorCQllbnRyeSA9IGxpYmlwd19mcmFnX2NhY2hlX2ZpbmQoaWVlZSwgc2VxLCBmcmFnLCBoZHItPmFkZHIyLAogCQkJCQkJICBoZHItPmFkZHIxKTsKIAkJaWYgKGVudHJ5ICE9IE5VTEwpIHsKIAkJCWVudHJ5LT5sYXN0X2ZyYWcgPSBmcmFnOwpAQCAtMTM3LDIxICsxMzcsMjEgQEAKIH0KIAogLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpICovCi1zdGF0aWMgaW50IGllZWU4MDIxMV9mcmFnX2NhY2hlX2ludmFsaWRhdGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpCitzdGF0aWMgaW50IGxpYmlwd19mcmFnX2NhY2hlX2ludmFsaWRhdGUoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCisJCQkJCSAgIHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZHIpCiB7CiAJdTE2IHNjOwogCXVuc2lnbmVkIGludCBzZXE7Ci0Jc3RydWN0IGllZWU4MDIxMV9mcmFnX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgbGliaXB3X2ZyYWdfZW50cnkgKmVudHJ5OwogCiAJc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdGwpOwogCXNlcSA9IFdMQU5fR0VUX1NFUV9TRVEoc2MpOwogCi0JZW50cnkgPSBpZWVlODAyMTFfZnJhZ19jYWNoZV9maW5kKGllZWUsIHNlcSwgLTEsIGhkci0+YWRkcjIsCisJZW50cnkgPSBsaWJpcHdfZnJhZ19jYWNoZV9maW5kKGllZWUsIHNlcSwgLTEsIGhkci0+YWRkcjIsCiAJCQkJCSAgaGRyLT5hZGRyMSk7CiAKIAlpZiAoZW50cnkgPT0gTlVMTCkgewotCQlJRUVFODAyMTFfREVCVUdfRlJBRygiY291bGQgbm90IGludmFsaWRhdGUgZnJhZ21lbnQgY2FjaGUgIgorCQlMSUJJUFdfREVCVUdfRlJBRygiY291bGQgbm90IGludmFsaWRhdGUgZnJhZ21lbnQgY2FjaGUgIgogCQkJCSAgICAgImVudHJ5IChzZXE9JXUpXG4iLCBzZXEpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTYxLDE0ICsxNjEsMTQgQEAKIH0KIAogI2lmZGVmIE5PVF9ZRVQKLS8qIGllZWU4MDIxMV9yeF9mcmFtZV9tZ3RtdAorLyogbGliaXB3X3J4X2ZyYW1lX21ndG10CiAgKgogICogUmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIG1hbmFnZW1lbnQgY29udHJvbCBmcmFtZXMKICAqCi0gKiBDYWxsZWQgYnkgaWVlZTgwMjExX3J4ICovCisgKiBDYWxsZWQgYnkgbGliaXB3X3J4ICovCiBzdGF0aWMgaW50Ci1pZWVlODAyMTFfcnhfZnJhbWVfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzLCB1MTYgdHlwZSwKK2xpYmlwd19yeF9mcmFtZV9tZ210KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IGxpYmlwd19yeF9zdGF0cyAqcnhfc3RhdHMsIHUxNiB0eXBlLAogCQkJdTE2IHN0eXBlKQogewogCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSKSB7CkBAIC0xNzYsNyArMTc2LDcgQEAKIAkJICAgICAgIGllZWUtPmRldi0+bmFtZSk7CiAJCXJldHVybiAwOwogLyoKLSAgaG9zdGFwX3VwZGF0ZV9zdGFfcHMoaWVlZSwgKHN0cnVjdCBob3N0YXBfaWVlZTgwMjExX2hkcl80YWRkciAqKQorICBob3N0YXBfdXBkYXRlX3N0YV9wcyhpZWVlLCAoc3RydWN0IGhvc3RhcF9saWJpcHdfaGRyXzRhZGRyICopCiAgIHNrYi0+ZGF0YSk7Ki8KIAl9CiAKQEAgLTIxOSwyNiArMjE5LDI3IEBACiAKIC8qIFNlZSBJRUVFIDgwMi4xSCBmb3IgTExDL1NOQVAgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uICovCiAvKiBFdGhlcm5ldC1JSSBzbmFwIGhlYWRlciAoUkZDMTA0MiBmb3IgbW9zdCBFdGhlclR5cGVzKSAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgcmZjMTA0Ml9oZWFkZXJbXSA9IHsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGliaXB3X3JmYzEwNDJfaGVhZGVyW10gPQorICAgIHsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCB9OwogCiAvKiBCcmlkZ2UtVHVubmVsIGhlYWRlciAoZm9yIEV0aGVyVHlwZXMgRVRIX1BfQUFSUCBhbmQgRVRIX1BfSVBYKSAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgYnJpZGdlX3R1bm5lbF9oZWFkZXJbXSA9CitzdGF0aWMgdW5zaWduZWQgY2hhciBsaWJpcHdfYnJpZGdlX3R1bm5lbF9oZWFkZXJbXSA9CiAgICAgeyAweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweGY4IH07CiAvKiBObyBlbmNhcHN1bGF0aW9uIGhlYWRlciBpZiBFdGhlclR5cGUgPCAweDYwMCAoPWxlbmd0aCkgKi8KIAotLyogQ2FsbGVkIGJ5IGllZWU4MDIxMV9yeF9mcmFtZV9kZWNyeXB0ICovCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pc19lYXBvbF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKy8qIENhbGxlZCBieSBsaWJpcHdfcnhfZnJhbWVfZGVjcnlwdCAqLworc3RhdGljIGludCBsaWJpcHdfaXNfZWFwb2xfZnJhbWUoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKIAl1MTYgZmMsIGV0aGVydHlwZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaGRyOworCXN0cnVjdCBsaWJpcHdfaGRyXzNhZGRyICpoZHI7CiAJdTggKnBvczsKIAogCWlmIChza2ItPmxlbiA8IDI0KQogCQlyZXR1cm4gMDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKXNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgKilza2ItPmRhdGE7CiAJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CiAKIAkvKiBjaGVjayB0aGF0IHRoZSBmcmFtZSBpcyB1bmljYXN0IGZyYW1lIHRvIHVzICovCkBAIC0yNjYsMjggKzI2NywyOCBAQAogCXJldHVybiAwOwogfQogCi0vKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSksIGJ5IGllZWU4MDIxMV9yeCAqLworLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLCBieSBsaWJpcHdfcnggKi8KIHN0YXRpYyBpbnQKLWllZWU4MDIxMV9yeF9mcmFtZV9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorbGliaXB3X3J4X2ZyYW1lX2RlY3J5cHQoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICBzdHJ1Y3QgbGliODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKmhkcjsKKwlzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciAqaGRyOwogCWludCByZXMsIGhkcmxlbjsKIAogCWlmIChjcnlwdCA9PSBOVUxMIHx8IGNyeXB0LT5vcHMtPmRlY3J5cHRfbXBkdSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKXNrYi0+ZGF0YTsKLQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCkpOworCWhkciA9IChzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciAqKXNrYi0+ZGF0YTsKKwloZHJsZW4gPSBsaWJpcHdfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCkpOwogCiAJYXRvbWljX2luYygmY3J5cHQtPnJlZmNudCk7CiAJcmVzID0gY3J5cHQtPm9wcy0+ZGVjcnlwdF9tcGR1KHNrYiwgaGRybGVuLCBjcnlwdC0+cHJpdik7CiAJYXRvbWljX2RlYygmY3J5cHQtPnJlZmNudCk7CiAJaWYgKHJlcyA8IDApIHsKLQkJSUVFRTgwMjExX0RFQlVHX0RST1AoImRlY3J5cHRpb24gZmFpbGVkIChTQT0lcE0pIHJlcz0lZFxuIiwKKwkJTElCSVBXX0RFQlVHX0RST1AoImRlY3J5cHRpb24gZmFpbGVkIChTQT0lcE0pIHJlcz0lZFxuIiwKIAkJCQkgICAgIGhkci0+YWRkcjIsIHJlcyk7CiAJCWlmIChyZXMgPT0gLTIpCi0JCQlJRUVFODAyMTFfREVCVUdfRFJPUCgiRGVjcnlwdGlvbiBmYWlsZWQgSUNWICIKKwkJCUxJQklQV19ERUJVR19EUk9QKCJEZWNyeXB0aW9uIGZhaWxlZCBJQ1YgIgogCQkJCQkgICAgICJtaXNtYXRjaCAoa2V5ICVkKVxuIiwKIAkJCQkJICAgICBza2ItPmRhdGFbaGRybGVuICsgM10gPj4gNik7CiAJCWllZWUtPmllZWVfc3RhdHMucnhfZGlzY2FyZHNfdW5kZWNyeXB0YWJsZSsrOwpAQCAtMjk3LDIwICsyOTgsMjAgQEAKIAlyZXR1cm4gcmVzOwogfQogCi0vKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSksIGJ5IGllZWU4MDIxMV9yeCAqLworLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLCBieSBsaWJpcHdfcnggKi8KIHN0YXRpYyBpbnQKLWllZWU4MDIxMV9yeF9mcmFtZV9kZWNyeXB0X21zZHUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCitsaWJpcHdfcnhfZnJhbWVfZGVjcnlwdF9tc2R1KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAogCQkJCXN0cnVjdCBza19idWZmICpza2IsIGludCBrZXlpZHgsCiAJCQkJc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKmNyeXB0KQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZHI7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgKmhkcjsKIAlpbnQgcmVzLCBoZHJsZW47CiAKIAlpZiAoY3J5cHQgPT0gTlVMTCB8fCBjcnlwdC0+b3BzLT5kZWNyeXB0X21zZHUgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKilza2ItPmRhdGE7Ci0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKTsKKwloZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgKilza2ItPmRhdGE7CisJaGRybGVuID0gbGliaXB3X2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKTsKIAogCWF0b21pY19pbmMoJmNyeXB0LT5yZWZjbnQpOwogCXJlcyA9IGNyeXB0LT5vcHMtPmRlY3J5cHRfbXNkdShza2IsIGtleWlkeCwgaGRybGVuLCBjcnlwdC0+cHJpdik7CkBAIC0zMjgsMTEgKzMyOSwxMSBAQAogLyogQWxsIHJlY2VpdmVkIGZyYW1lcyBhcmUgc2VudCB0byB0aGlzIGZ1bmN0aW9uLiBAc2tiIGNvbnRhaW5zIHRoZSBmcmFtZSBpbgogICogSUVFRSA4MDIuMTEgZm9ybWF0LCBpLmUuLCBpbiB0aGUgZm9ybWF0IGl0IHdhcyBzZW50IG92ZXIgYWlyLgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkuICovCi1pbnQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpCitpbnQgbGliaXB3X3J4KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgc3RydWN0IGxpYmlwd19yeF9zdGF0cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZHI7CiAJc2l6ZV90IGhkcmxlbjsKIAl1MTYgZmMsIHR5cGUsIHN0eXBlLCBzYzsKIAl1bnNpZ25lZCBpbnQgZnJhZzsKQEAgLTM1Miw3ICszNTMsNyBAQAogCWludCBrZXlpZHggPSAwOwogCWludCBjYW5fYmVfZGVjcnlwdGVkID0gMDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKilza2ItPmRhdGE7CiAJaWYgKHNrYi0+bGVuIDwgMTApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNLQiBsZW5ndGggPCAxMFxuIiwgZGV2LT5uYW1lKTsKIAkJZ290byByeF9kcm9wcGVkOwpAQCAtMzYzLDcgKzM2NCw3IEBACiAJc3R5cGUgPSBXTEFOX0ZDX0dFVF9TVFlQRShmYyk7CiAJc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdGwpOwogCWZyYWcgPSBXTEFOX0dFVF9TRVFfRlJBRyhzYyk7Ci0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpOworCWhkcmxlbiA9IGxpYmlwd19nZXRfaGRybGVuKGZjKTsKIAogCWlmIChza2ItPmxlbiA8IGhkcmxlbikgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBTS0IgbGVuZ3RoICVkXG4iLApAQCAtMzgwLDE5ICszODEsMTkgQEAKIAkJc3RydWN0IGl3X3F1YWxpdHkgd3N0YXRzOwogCiAJCXdzdGF0cy51cGRhdGVkID0gMDsKLQkJaWYgKHJ4X3N0YXRzLT5tYXNrICYgSUVFRTgwMjExX1NUQVRNQVNLX1JTU0kpIHsKKwkJaWYgKHJ4X3N0YXRzLT5tYXNrICYgTElCSVBXX1NUQVRNQVNLX1JTU0kpIHsKIAkJCXdzdGF0cy5sZXZlbCA9IHJ4X3N0YXRzLT5zaWduYWw7CiAJCQl3c3RhdHMudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX1VQREFURUQ7CiAJCX0gZWxzZQogCQkJd3N0YXRzLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9JTlZBTElEOwogCi0JCWlmIChyeF9zdGF0cy0+bWFzayAmIElFRUU4MDIxMV9TVEFUTUFTS19OT0lTRSkgeworCQlpZiAocnhfc3RhdHMtPm1hc2sgJiBMSUJJUFdfU1RBVE1BU0tfTk9JU0UpIHsKIAkJCXdzdGF0cy5ub2lzZSA9IHJ4X3N0YXRzLT5ub2lzZTsKIAkJCXdzdGF0cy51cGRhdGVkIHw9IElXX1FVQUxfTk9JU0VfVVBEQVRFRDsKIAkJfSBlbHNlCiAJCQl3c3RhdHMudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CiAKLQkJaWYgKHJ4X3N0YXRzLT5tYXNrICYgSUVFRTgwMjExX1NUQVRNQVNLX1NJR05BTCkgeworCQlpZiAocnhfc3RhdHMtPm1hc2sgJiBMSUJJUFdfU1RBVE1BU0tfU0lHTkFMKSB7CiAJCQl3c3RhdHMucXVhbCA9IHJ4X3N0YXRzLT5zaWduYWw7CiAJCQl3c3RhdHMudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfVVBEQVRFRDsKIAkJfSBlbHNlCkBAIC00MTEsNyArNDEyLDcgQEAKIAlpZiAoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKIAkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCWllZWU4MDIxMV9tb25pdG9yX3J4KGllZWUsIHNrYiwgcnhfc3RhdHMpOworCQlsaWJpcHdfbW9uaXRvcl9yeChpZWVlLCBza2IsIHJ4X3N0YXRzKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC00NTcsNyArNDU4LDcgQEAKIAkJCSAqIGZyYW1lcyBmcm9tIG90aGVyIHRoYW4gY3VycmVudCBCU1MsIHNvIGp1c3QgZHJvcCB0aGUKIAkJCSAqIGZyYW1lcyBzaWxlbnRseSBpbnN0ZWFkIG9mIGZpbGxpbmcgc3lzdGVtIGxvZyB3aXRoCiAJCQkgKiB0aGVzZSByZXBvcnRzLiAqLwotCQkJSUVFRTgwMjExX0RFQlVHX0RST1AoIkRlY3J5cHRpb24gZmFpbGVkIChub3Qgc2V0KSIKKwkJCUxJQklQV19ERUJVR19EUk9QKCJEZWNyeXB0aW9uIGZhaWxlZCAobm90IHNldCkiCiAJCQkJCSAgICAgIiAoU0E9JXBNKVxuIiwgaGRyLT5hZGRyMik7CiAJCQlpZWVlLT5pZWVlX3N0YXRzLnJ4X2Rpc2NhcmRzX3VuZGVjcnlwdGFibGUrKzsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKQEAgLTQ3NSw3ICs0NzYsNyBAQAogCQkJZ290byByeF9kcm9wcGVkOwogCQl9CiAKLQkJaWYgKGllZWU4MDIxMV9yeF9mcmFtZV9tZ210KGllZWUsIHNrYiwgcnhfc3RhdHMsIHR5cGUsIHN0eXBlKSkKKwkJaWYgKGxpYmlwd19yeF9mcmFtZV9tZ210KGllZWUsIHNrYiwgcnhfc3RhdHMsIHR5cGUsIHN0eXBlKSkKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJZWxzZQogCQkJZ290byByeF9leGl0OwpAQCAtNDg4LDcgKzQ4OSw3IEBACiAJCWllZWUtPnByZXZfc2VxX2N0bCA9IHNjOwogCiAJLyogRGF0YSBmcmFtZSAtIGV4dHJhY3Qgc3JjL2RzdCBhZGRyZXNzZXMgKi8KLQlpZiAoc2tiLT5sZW4gPCBJRUVFODAyMTFfM0FERFJfTEVOKQorCWlmIChza2ItPmxlbiA8IExJQklQV18zQUREUl9MRU4pCiAJCWdvdG8gcnhfZHJvcHBlZDsKIAogCXN3aXRjaCAoZmMgJiAoSUVFRTgwMjExX0ZDVExfRlJPTURTIHwgSUVFRTgwMjExX0ZDVExfVE9EUykpIHsKQEAgLTUwMSw3ICs1MDIsNyBAQAogCQltZW1jcHkoc3JjLCBoZHItPmFkZHIyLCBFVEhfQUxFTik7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0ZDVExfRlJPTURTIHwgSUVFRTgwMjExX0ZDVExfVE9EUzoKLQkJaWYgKHNrYi0+bGVuIDwgSUVFRTgwMjExXzRBRERSX0xFTikKKwkJaWYgKHNrYi0+bGVuIDwgTElCSVBXXzRBRERSX0xFTikKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJbWVtY3B5KGRzdCwgaGRyLT5hZGRyMywgRVRIX0FMRU4pOwogCQltZW1jcHkoc3JjLCBoZHItPmFkZHI0LCBFVEhfQUxFTik7CkBAIC01NjAsNyArNTYxLDcgQEAKIAkgICAgc3R5cGUgIT0gSUVFRTgwMjExX1NUWVBFX0RBVEFfQ0ZQT0xMICYmCiAJICAgIHN0eXBlICE9IElFRUU4MDIxMV9TVFlQRV9EQVRBX0NGQUNLUE9MTCkgewogCQlpZiAoc3R5cGUgIT0gSUVFRTgwMjExX1NUWVBFX05VTExGVU5DKQotCQkJSUVFRTgwMjExX0RFQlVHX0RST1AoIlJYOiBkcm9wcGVkIGRhdGEgZnJhbWUgIgorCQkJTElCSVBXX0RFQlVHX0RST1AoIlJYOiBkcm9wcGVkIGRhdGEgZnJhbWUgIgogCQkJCQkgICAgICJ3aXRoIG5vIGRhdGEgKHR5cGU9MHglMDJ4LCAiCiAJCQkJCSAgICAgInN1YnR5cGU9MHglMDJ4LCBsZW49JWQpXG4iLAogCQkJCQkgICAgIHR5cGUsIHN0eXBlLCBza2ItPmxlbik7CkBAIC01NzAsMjEgKzU3MSwyMSBAQAogCS8qIHNrYjogaGRyICsgKHBvc3NpYmx5IGZyYWdtZW50ZWQsIHBvc3NpYmx5IGVuY3J5cHRlZCkgcGF5bG9hZCAqLwogCiAJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgJiYgY2FuX2JlX2RlY3J5cHRlZCAmJgotCSAgICAoa2V5aWR4ID0gaWVlZTgwMjExX3J4X2ZyYW1lX2RlY3J5cHQoaWVlZSwgc2tiLCBjcnlwdCkpIDwgMCkKKwkgICAgKGtleWlkeCA9IGxpYmlwd19yeF9mcmFtZV9kZWNyeXB0KGllZWUsIHNrYiwgY3J5cHQpKSA8IDApCiAJCWdvdG8gcnhfZHJvcHBlZDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKilza2ItPmRhdGE7CiAKIAkvKiBza2I6IGhkciArIChwb3NzaWJseSBmcmFnbWVudGVkKSBwbGFpbnRleHQgcGF5bG9hZCAqLwogCS8vIFBSOiBGSVhNRTogaG9zdGFwIGhhcyBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgaW4gdGhlICJpZiIgYmVsb3c6CiAJLy8gaWVlZS0+aG9zdF9kZWNyeXB0ICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgJiYKIAlpZiAoKGZyYWcgIT0gMCkgfHwgKGZjICYgSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKSkgewogCQlpbnQgZmxlbjsKLQkJc3RydWN0IHNrX2J1ZmYgKmZyYWdfc2tiID0gaWVlZTgwMjExX2ZyYWdfY2FjaGVfZ2V0KGllZWUsIGhkcik7Ci0JCUlFRUU4MDIxMV9ERUJVR19GUkFHKCJSeCBGcmFnbWVudCByZWNlaXZlZCAoJXUpXG4iLCBmcmFnKTsKKwkJc3RydWN0IHNrX2J1ZmYgKmZyYWdfc2tiID0gbGliaXB3X2ZyYWdfY2FjaGVfZ2V0KGllZWUsIGhkcik7CisJCUxJQklQV19ERUJVR19GUkFHKCJSeCBGcmFnbWVudCByZWNlaXZlZCAoJXUpXG4iLCBmcmFnKTsKIAogCQlpZiAoIWZyYWdfc2tiKSB7Ci0JCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1JYIHwgSUVFRTgwMjExX0RMX0ZSQUcsCisJCQlMSUJJUFdfREVCVUcoTElCSVBXX0RMX1JYIHwgTElCSVBXX0RMX0ZSQUcsCiAJCQkJCSJSeCBjYW5ub3QgZ2V0IHNrYiBmcm9tIGZyYWdtZW50ICIKIAkJCQkJImNhY2hlIChtb3JlZnJhZz0lZCBzZXE9JXUgZnJhZz0ldSlcbiIsCiAJCQkJCShmYyAmIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUykgIT0gMCwKQEAgLTYwMCw3ICs2MDEsNyBAQAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGhvc3QgZGVjcnlwdGVkIGFuZCAiCiAJCQkgICAgICAgInJlYXNzZW1ibGVkIGZyYW1lIGRpZCBub3QgZml0IHNrYlxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJaWVlZTgwMjExX2ZyYWdfY2FjaGVfaW52YWxpZGF0ZShpZWVlLCBoZHIpOworCQkJbGliaXB3X2ZyYWdfY2FjaGVfaW52YWxpZGF0ZShpZWVlLCBoZHIpOwogCQkJZ290byByeF9kcm9wcGVkOwogCQl9CiAKQEAgLTYyNywyNCArNjI4LDI0IEBACiAJCS8qIHRoaXMgd2FzIHRoZSBsYXN0IGZyYWdtZW50IGFuZCB0aGUgZnJhbWUgd2lsbCBiZQogCQkgKiBkZWxpdmVyZWQsIHNvIHJlbW92ZSBza2IgZnJvbSBmcmFnbWVudCBjYWNoZSAqLwogCQlza2IgPSBmcmFnX3NrYjsKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopc2tiLT5kYXRhOwotCQlpZWVlODAyMTFfZnJhZ19jYWNoZV9pbnZhbGlkYXRlKGllZWUsIGhkcik7CisJCWhkciA9IChzdHJ1Y3QgbGliaXB3X2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKKwkJbGliaXB3X2ZyYWdfY2FjaGVfaW52YWxpZGF0ZShpZWVlLCBoZHIpOwogCX0KIAogCS8qIHNrYjogaGRyICsgKHBvc3NpYmxlIHJlYXNzZW1ibGVkKSBmdWxsIE1TRFUgcGF5bG9hZDsgcG9zc2libHkgc3RpbGwKIAkgKiBlbmNyeXB0ZWQvYXV0aGVudGljYXRlZCAqLwogCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpICYmIGNhbl9iZV9kZWNyeXB0ZWQgJiYKLQkgICAgaWVlZTgwMjExX3J4X2ZyYW1lX2RlY3J5cHRfbXNkdShpZWVlLCBza2IsIGtleWlkeCwgY3J5cHQpKQorCSAgICBsaWJpcHdfcnhfZnJhbWVfZGVjcnlwdF9tc2R1KGllZWUsIHNrYiwga2V5aWR4LCBjcnlwdCkpCiAJCWdvdG8gcnhfZHJvcHBlZDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKilza2ItPmRhdGE7CiAJaWYgKGNyeXB0ICYmICEoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpICYmICFpZWVlLT5vcGVuX3dlcCkgewogCQlpZiAoCQkvKmllZWUtPmllZWU4MDJfMXggJiYgKi8KLQkJCSAgIGllZWU4MDIxMV9pc19lYXBvbF9mcmFtZShpZWVlLCBza2IpKSB7CisJCQkgICBsaWJpcHdfaXNfZWFwb2xfZnJhbWUoaWVlZSwgc2tiKSkgewogCQkJLyogcGFzcyB1bmVuY3J5cHRlZCBFQVBPTCBmcmFtZXMgZXZlbiBpZiBlbmNyeXB0aW9uIGlzCiAJCQkgKiBjb25maWd1cmVkICovCiAJCX0gZWxzZSB7Ci0JCQlJRUVFODAyMTFfREVCVUdfRFJPUCgiZW5jcnlwdGlvbiBjb25maWd1cmVkLCBidXQgUlggIgorCQkJTElCSVBXX0RFQlVHX0RST1AoImVuY3J5cHRpb24gY29uZmlndXJlZCwgYnV0IFJYICIKIAkJCQkJICAgICAiZnJhbWUgbm90IGVuY3J5cHRlZCAoU0E9JXBNKVxuIiwKIAkJCQkJICAgICBoZHItPmFkZHIyKTsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKQEAgLTY1Miw4ICs2NTMsOCBAQAogCX0KIAogCWlmIChjcnlwdCAmJiAhKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSAmJiAhaWVlZS0+b3Blbl93ZXAgJiYKLQkgICAgIWllZWU4MDIxMV9pc19lYXBvbF9mcmFtZShpZWVlLCBza2IpKSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19EUk9QKCJkcm9wcGVkIHVuZW5jcnlwdGVkIFJYIGRhdGEgIgorCSAgICAhbGliaXB3X2lzX2VhcG9sX2ZyYW1lKGllZWUsIHNrYikpIHsKKwkJTElCSVBXX0RFQlVHX0RST1AoImRyb3BwZWQgdW5lbmNyeXB0ZWQgUlggZGF0YSAiCiAJCQkJICAgICAiZnJhbWUgZnJvbSAlcE0gKGRyb3BfdW5lbmNyeXB0ZWQ9MSlcbiIsCiAJCQkJICAgICBoZHItPmFkZHIyKTsKIAkJZ290byByeF9kcm9wcGVkOwpAQCAtNzM2LDkgKzczNyw5IEBACiAKIAkvKiBjb252ZXJ0IGhkciArIHBvc3NpYmxlIExMQyBoZWFkZXJzIGludG8gRXRoZXJuZXQgaGVhZGVyICovCiAJaWYgKHNrYi0+bGVuIC0gaGRybGVuID49IDggJiYKLQkgICAgKChtZW1jbXAocGF5bG9hZCwgcmZjMTA0Ml9oZWFkZXIsIFNOQVBfU0laRSkgPT0gMCAmJgorCSAgICAoKG1lbWNtcChwYXlsb2FkLCBsaWJpcHdfcmZjMTA0Ml9oZWFkZXIsIFNOQVBfU0laRSkgPT0gMCAmJgogCSAgICAgIGV0aGVydHlwZSAhPSBFVEhfUF9BQVJQICYmIGV0aGVydHlwZSAhPSBFVEhfUF9JUFgpIHx8Ci0JICAgICBtZW1jbXAocGF5bG9hZCwgYnJpZGdlX3R1bm5lbF9oZWFkZXIsIFNOQVBfU0laRSkgPT0gMCkpIHsKKwkgICAgIG1lbWNtcChwYXlsb2FkLCBsaWJpcHdfYnJpZGdlX3R1bm5lbF9oZWFkZXIsIFNOQVBfU0laRSkgPT0gMCkpIHsKIAkJLyogcmVtb3ZlIFJGQzEwNDIgb3IgQnJpZGdlLVR1bm5lbCBlbmNhcHN1bGF0aW9uIGFuZAogCQkgKiByZXBsYWNlIEV0aGVyVHlwZSAqLwogCQlza2JfcHVsbChza2IsIGhkcmxlbiArIFNOQVBfU0laRSk7CkBAIC04MDcsNyArODA4LDcgQEAKIAkJCS8qIG5ldGlmX3J4IGFsd2F5cyBzdWNjZWVkcywgYnV0IGl0IG1pZ2h0IGRyb3AKIAkJCSAqIHRoZSBwYWNrZXQuICBJZiBpdCBkcm9wcyB0aGUgcGFja2V0LCB3ZSBsb2cgdGhhdAogCQkJICogaW4gb3VyIHN0YXRzLiAqLwotCQkJSUVFRTgwMjExX0RFQlVHX0RST1AKKwkJCUxJQklQV19ERUJVR19EUk9QCiAJCQkgICAgKCJSWDogbmV0aWZfcnggZHJvcHBlZCB0aGUgcGFja2V0XG4iKTsKIAkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQl9CkBAIC04MjksMTggKzgzMCwxOCBAQAogCXJldHVybiAwOwogfQogCi0vKiBGaWx0ZXIgb3V0IHVucmVsYXRlZCBwYWNrZXRzLCBjYWxsIGllZWU4MDIxMV9yeFtfbWd0XQorLyogRmlsdGVyIG91dCB1bnJlbGF0ZWQgcGFja2V0cywgY2FsbCBsaWJpcHdfcnhbX21ndF0KICAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3ZlciB0aGUgc2tiLCBpdCBzaG91bGQgbm90IGJlIHVzZWQgYWdhaW4gYWZ0ZXIgY2FsbGluZwogICogdGhpcyBmdW5jdGlvbi4gKi8KLXZvaWQgaWVlZTgwMjExX3J4X2FueShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKK3ZvaWQgbGliaXB3X3J4X2FueShzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICpzdGF0cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZHI7CiAJaW50IGlzX3BhY2tldF9mb3JfdXM7CiAJdTE2IGZjOwogCiAJaWYgKGllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7Ci0JCWlmICghaWVlZTgwMjExX3J4KGllZWUsIHNrYiwgc3RhdHMpKQorCQlpZiAoIWxpYmlwd19yeChpZWVlLCBza2IsIHN0YXRzKSkKIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCXJldHVybjsKIAl9CkBAIC04NDgsNyArODQ5LDcgQEAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpKQogCQlnb3RvIGRyb3BfZnJlZTsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKilza2ItPmRhdGE7CiAJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CiAKIAlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfVkVSUykgIT0gMCkKQEAgLTg1Niw5ICs4NTcsOSBAQAogCiAJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSB7CiAJY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKLQkJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSkKKwkJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBsaWJpcHdfaGRyXzNhZGRyKSkKIAkJCWdvdG8gZHJvcF9mcmVlOwotCQlpZWVlODAyMTFfcnhfbWd0KGllZWUsIGhkciwgc3RhdHMpOworCQlsaWJpcHdfcnhfbWd0KGllZWUsIGhkciwgc3RhdHMpOwogCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCQlyZXR1cm47CiAJY2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQToKQEAgLTkxMCw3ICs5MTEsNyBAQAogCX0KIAogCWlmIChpc19wYWNrZXRfZm9yX3VzKQotCQlpZiAoIWllZWU4MDIxMV9yeChpZWVlLCBza2IsIHN0YXRzKSkKKwkJaWYgKCFsaWJpcHdfcngoaWVlZSwgc2tiLCBzdGF0cykpCiAJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCXJldHVybjsKIApAQCAtOTI4LDcgKzkyOSw3IEBACiAqIE1ha2UgdGhlciBzdHJ1Y3R1cmUgd2UgcmVhZCBmcm9tIHRoZSBiZWFjb24gcGFja2V0IGhhcwogKiB0aGUgcmlnaHQgdmFsdWVzCiAqLwotc3RhdGljIGludCBpZWVlODAyMTFfdmVyaWZ5X3Fvc19pbmZvKHN0cnVjdCBpZWVlODAyMTFfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQKK3N0YXRpYyBpbnQgbGliaXB3X3ZlcmlmeV9xb3NfaW5mbyhzdHJ1Y3QgbGliaXB3X3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50CiAJCQkJICAgICAqaW5mb19lbGVtZW50LCBpbnQgc3ViX3R5cGUpCiB7CiAKQEAgLTk0NywxMiArOTQ4LDEyIEBACiAvKgogICogUGFyc2UgYSBRb1MgcGFyYW1ldGVyIGVsZW1lbnQKICAqLwotc3RhdGljIGludCBpZWVlODAyMTFfcmVhZF9xb3NfcGFyYW1fZWxlbWVudChzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJfaW5mbwotCQkJCQkgICAgKmVsZW1lbnRfcGFyYW0sIHN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50CitzdGF0aWMgaW50IGxpYmlwd19yZWFkX3Fvc19wYXJhbV9lbGVtZW50KHN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcl9pbmZvCisJCQkJCSAgICAqZWxlbWVudF9wYXJhbSwgc3RydWN0IGxpYmlwd19pbmZvX2VsZW1lbnQKIAkJCQkJICAgICppbmZvX2VsZW1lbnQpCiB7CiAJaW50IHJldCA9IDA7Ci0JdTE2IHNpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVyX2luZm8pIC0gMjsKKwl1MTYgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbGliaXB3X3Fvc19wYXJhbWV0ZXJfaW5mbykgLSAyOwogCiAJaWYgKChpbmZvX2VsZW1lbnQgPT0gTlVMTCkgfHwgKGVsZW1lbnRfcGFyYW0gPT0gTlVMTCkpCiAJCXJldHVybiAtMTsKQEAgLTk2NSw3ICs5NjYsNyBAQAogCX0gZWxzZQogCQlyZXQgPSAtMTsKIAlpZiAocmV0ID09IDApCi0JCXJldCA9IGllZWU4MDIxMV92ZXJpZnlfcW9zX2luZm8oJmVsZW1lbnRfcGFyYW0tPmluZm9fZWxlbWVudCwKKwkJcmV0ID0gbGliaXB3X3ZlcmlmeV9xb3NfaW5mbygmZWxlbWVudF9wYXJhbS0+aW5mb19lbGVtZW50LAogCQkJCQkJUU9TX09VSV9QQVJBTV9TVUJfVFlQRSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTk3MywxMyArOTc0LDEzIEBACiAvKgogICogUGFyc2UgYSBRb1MgaW5mb3JtYXRpb24gZWxlbWVudAogICovCi1zdGF0aWMgaW50IGllZWU4MDIxMV9yZWFkX3Fvc19pbmZvX2VsZW1lbnQoc3RydWN0Ci0JCQkJCSAgIGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudAotCQkJCQkgICAqZWxlbWVudF9pbmZvLCBzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudAorc3RhdGljIGludCBsaWJpcHdfcmVhZF9xb3NfaW5mb19lbGVtZW50KHN0cnVjdAorCQkJCQkgICBsaWJpcHdfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQKKwkJCQkJICAgKmVsZW1lbnRfaW5mbywgc3RydWN0IGxpYmlwd19pbmZvX2VsZW1lbnQKIAkJCQkJICAgKmluZm9fZWxlbWVudCkKIHsKIAlpbnQgcmV0ID0gMDsKLQl1MTYgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50KSAtIDI7CisJdTE2IHNpemUgPSBzaXplb2Yoc3RydWN0IGxpYmlwd19xb3NfaW5mb3JtYXRpb25fZWxlbWVudCkgLSAyOwogCiAJaWYgKGVsZW1lbnRfaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CkBAIC05OTUsNyArOTk2LDcgQEAKIAkJcmV0ID0gLTE7CiAKIAlpZiAocmV0ID09IDApCi0JCXJldCA9IGllZWU4MDIxMV92ZXJpZnlfcW9zX2luZm8oZWxlbWVudF9pbmZvLAorCQlyZXQgPSBsaWJpcHdfdmVyaWZ5X3Fvc19pbmZvKGVsZW1lbnRfaW5mbywKIAkJCQkJCVFPU19PVUlfSU5GT19TVUJfVFlQRSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwMDMsMTUgKzEwMDQsMTUgQEAKIC8qCiAgKiBXcml0ZSBRb1MgcGFyYW1ldGVycyBmcm9tIHRoZSBhYyBwYXJhbWV0ZXJzLgogICovCi1zdGF0aWMgaW50IGllZWU4MDIxMV9xb3NfY29udmVydF9hY190b19wYXJhbWV0ZXJzKHN0cnVjdAotCQkJCQkJICBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcl9pbmZvCitzdGF0aWMgaW50IGxpYmlwd19xb3NfY29udmVydF9hY190b19wYXJhbWV0ZXJzKHN0cnVjdAorCQkJCQkJICBsaWJpcHdfcW9zX3BhcmFtZXRlcl9pbmZvCiAJCQkJCQkgICpwYXJhbV9lbG0sIHN0cnVjdAotCQkJCQkJICBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMKKwkJCQkJCSAgbGliaXB3X3Fvc19wYXJhbWV0ZXJzCiAJCQkJCQkgICpxb3NfcGFyYW0pCiB7CiAJaW50IHJjID0gMDsKIAlpbnQgaTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19hY19wYXJhbWV0ZXIgKmFjX3BhcmFtczsKKwlzdHJ1Y3QgbGliaXB3X3Fvc19hY19wYXJhbWV0ZXIgKmFjX3BhcmFtczsKIAl1MzIgdHhvcDsKIAl1OCBjd19taW47CiAJdTggY3dfbWF4OwpAQCAtMTA0MiwyNyArMTA0MywyNyBAQAogICogcGFyYW1ldGVycyBlbGVtZW50LiBjaGVjayB0aGUgaW5mb3JtYXRpb24gZWxlbWVudCBsZW5ndGggdG8gZGVjaWRlCiAgKiB3aGljaCB0eXBlIHRvIHJlYWQKICAqLwotc3RhdGljIGludCBpZWVlODAyMTFfcGFyc2VfcW9zX2luZm9fcGFyYW1fSUUoc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQKK3N0YXRpYyBpbnQgbGliaXB3X3BhcnNlX3Fvc19pbmZvX3BhcmFtX0lFKHN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50CiAJCQkJCSAgICAgKmluZm9fZWxlbWVudCwKLQkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCisJCQkJCSAgICAgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrKQogewogCWludCByYyA9IDA7Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyAqcW9zX3BhcmFtID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IHFvc19pbmZvX2VsZW1lbnQ7CisJc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycyAqcW9zX3BhcmFtID0gTlVMTDsKKwlzdHJ1Y3QgbGliaXB3X3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IHFvc19pbmZvX2VsZW1lbnQ7CiAKLQlyYyA9IGllZWU4MDIxMV9yZWFkX3Fvc19pbmZvX2VsZW1lbnQoJnFvc19pbmZvX2VsZW1lbnQsIGluZm9fZWxlbWVudCk7CisJcmMgPSBsaWJpcHdfcmVhZF9xb3NfaW5mb19lbGVtZW50KCZxb3NfaW5mb19lbGVtZW50LCBpbmZvX2VsZW1lbnQpOwogCiAJaWYgKHJjID09IDApIHsKIAkJbmV0d29yay0+cW9zX2RhdGEucGFyYW1fY291bnQgPSBxb3NfaW5mb19lbGVtZW50LmFjX2luZm8gJiAweDBGOwogCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19RT1NfSU5GT1JNQVRJT047CiAJfSBlbHNlIHsKLQkJc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVyX2luZm8gcGFyYW1fZWxlbWVudDsKKwkJc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVyX2luZm8gcGFyYW1fZWxlbWVudDsKIAotCQlyYyA9IGllZWU4MDIxMV9yZWFkX3Fvc19wYXJhbV9lbGVtZW50KCZwYXJhbV9lbGVtZW50LAorCQlyYyA9IGxpYmlwd19yZWFkX3Fvc19wYXJhbV9lbGVtZW50KCZwYXJhbV9lbGVtZW50LAogCQkJCQkJICAgICAgaW5mb19lbGVtZW50KTsKIAkJaWYgKHJjID09IDApIHsKIAkJCXFvc19wYXJhbSA9ICYobmV0d29yay0+cW9zX2RhdGEucGFyYW1ldGVycyk7Ci0JCQlpZWVlODAyMTFfcW9zX2NvbnZlcnRfYWNfdG9fcGFyYW1ldGVycygmcGFyYW1fZWxlbWVudCwKKwkJCWxpYmlwd19xb3NfY29udmVydF9hY190b19wYXJhbWV0ZXJzKCZwYXJhbV9lbGVtZW50LAogCQkJCQkJCSAgICAgICBxb3NfcGFyYW0pOwogCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfUU9TX1BBUkFNRVRFUlM7CiAJCQluZXR3b3JrLT5xb3NfZGF0YS5wYXJhbV9jb3VudCA9CkBAIC0xMDcxLDcgKzEwNzIsNyBAQAogCX0KIAogCWlmIChyYyA9PSAwKSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19RT1MoIlFvUyBpcyBzdXBwb3J0ZWRcbiIpOworCQlMSUJJUFdfREVCVUdfUU9TKCJRb1MgaXMgc3VwcG9ydGVkXG4iKTsKIAkJbmV0d29yay0+cW9zX2RhdGEuc3VwcG9ydGVkID0gMTsKIAl9CiAJcmV0dXJuIHJjOwpAQCAtMTExNiw5ICsxMTE3LDkgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9wYXJzZV9pbmZvX3BhcmFtKHN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50CitzdGF0aWMgaW50IGxpYmlwd19wYXJzZV9pbmZvX3BhcmFtKHN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50CiAJCQkJICAgICAgKmluZm9fZWxlbWVudCwgdTE2IGxlbmd0aCwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCisJCQkJICAgICAgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrKQogewogCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7CiAJdTggaTsKQEAgLTExMjksNyArMTEzMCw3IEBACiAKIAl3aGlsZSAobGVuZ3RoID49IHNpemVvZigqaW5mb19lbGVtZW50KSkgewogCQlpZiAoc2l6ZW9mKCppbmZvX2VsZW1lbnQpICsgaW5mb19lbGVtZW50LT5sZW4gPiBsZW5ndGgpIHsKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJJbmZvIGVsZW06IHBhcnNlIGZhaWxlZDogIgorCQkJTElCSVBXX0RFQlVHX01HTVQoIkluZm8gZWxlbTogcGFyc2UgZmFpbGVkOiAiCiAJCQkJCSAgICAgImluZm9fZWxlbWVudC0+bGVuICsgMiA+IGxlZnQgOiAiCiAJCQkJCSAgICAgImluZm9fZWxlbWVudC0+bGVuKzI9JXpkIGxlZnQ9JWQsIGlkPSVkLlxuIiwKIAkJCQkJICAgICBpbmZvX2VsZW1lbnQtPmxlbiArCkBAIC0xMTUxLDcgKzExNTIsNyBAQAogCQkJCW1lbXNldChuZXR3b3JrLT5zc2lkICsgbmV0d29yay0+c3NpZF9sZW4sIDAsCiAJCQkJICAgICAgIElXX0VTU0lEX01BWF9TSVpFIC0gbmV0d29yay0+c3NpZF9sZW4pOwogCi0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfU1NJRDogJyVzJyBsZW49JWQuXG4iLAorCQkJTElCSVBXX0RFQlVHX01HTVQoIldMQU5fRUlEX1NTSUQ6ICclcycgbGVuPSVkLlxuIiwKIAkJCQkJICAgICBwcmludF9zc2lkKHNzaWQsIG5ldHdvcmstPnNzaWQsCiAJCQkJCQkJbmV0d29yay0+c3NpZF9sZW4pLAogCQkJCQkgICAgIG5ldHdvcmstPnNzaWRfbGVuKTsKQEAgLTExNzAsMTcgKzExNzEsMTcgQEAKIAkJCQkJICAgICAgKHAgLSByYXRlc19zdHIpLCAiJTAyWCAiLAogCQkJCQkgICAgICBuZXR3b3JrLT5yYXRlc1tpXSk7CiAjZW5kaWYKLQkJCQlpZiAoaWVlZTgwMjExX2lzX29mZG1fcmF0ZQorCQkJCWlmIChsaWJpcHdfaXNfb2ZkbV9yYXRlCiAJCQkJICAgIChpbmZvX2VsZW1lbnQtPmRhdGFbaV0pKSB7CiAJCQkJCW5ldHdvcmstPmZsYWdzIHw9IE5FVFdPUktfSEFTX09GRE07CiAJCQkJCWlmIChpbmZvX2VsZW1lbnQtPmRhdGFbaV0gJgotCQkJCQkgICAgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykKKwkJCQkJICAgIExJQklQV19CQVNJQ19SQVRFX01BU0spCiAJCQkJCQluZXR3b3JrLT5mbGFncyAmPQogCQkJCQkJICAgIH5ORVRXT1JLX0hBU19DQ0s7CiAJCQkJfQogCQkJfQogCi0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfU1VQUF9SQVRFUzogJyVzJyAoJWQpXG4iLAorCQkJTElCSVBXX0RFQlVHX01HTVQoIldMQU5fRUlEX1NVUFBfUkFURVM6ICclcycgKCVkKVxuIiwKIAkJCQkJICAgICByYXRlc19zdHIsIG5ldHdvcmstPnJhdGVzX2xlbik7CiAJCQlicmVhazsKIApAQCAtMTE5Nyw2MSArMTE5OCw2MSBAQAogCQkJCQkgICAgICAocCAtIHJhdGVzX3N0ciksICIlMDJYICIsCiAJCQkJCSAgICAgIG5ldHdvcmstPnJhdGVzW2ldKTsKICNlbmRpZgotCQkJCWlmIChpZWVlODAyMTFfaXNfb2ZkbV9yYXRlCisJCQkJaWYgKGxpYmlwd19pc19vZmRtX3JhdGUKIAkJCQkgICAgKGluZm9fZWxlbWVudC0+ZGF0YVtpXSkpIHsKIAkJCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfT0ZETTsKIAkJCQkJaWYgKGluZm9fZWxlbWVudC0+ZGF0YVtpXSAmCi0JCQkJCSAgICBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKQorCQkJCQkgICAgTElCSVBXX0JBU0lDX1JBVEVfTUFTSykKIAkJCQkJCW5ldHdvcmstPmZsYWdzICY9CiAJCQkJCQkgICAgfk5FVFdPUktfSEFTX0NDSzsKIAkJCQl9CiAJCQl9CiAKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzogJyVzJyAoJWQpXG4iLAorCQkJTElCSVBXX0RFQlVHX01HTVQoIldMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOiAnJXMnICglZClcbiIsCiAJCQkJCSAgICAgcmF0ZXNfc3RyLCBuZXR3b3JrLT5yYXRlc19leF9sZW4pOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBXTEFOX0VJRF9EU19QQVJBTVM6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfRFNfUEFSQU1TOiAlZFxuIiwKKwkJCUxJQklQV19ERUJVR19NR01UKCJXTEFOX0VJRF9EU19QQVJBTVM6ICVkXG4iLAogCQkJCQkgICAgIGluZm9fZWxlbWVudC0+ZGF0YVswXSk7CiAJCQluZXR3b3JrLT5jaGFubmVsID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBXTEFOX0VJRF9GSF9QQVJBTVM6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfRkhfUEFSQU1TOiBpZ25vcmVkXG4iKTsKKwkJCUxJQklQV19ERUJVR19NR01UKCJXTEFOX0VJRF9GSF9QQVJBTVM6IGlnbm9yZWRcbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBXTEFOX0VJRF9DRl9QQVJBTVM6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfQ0ZfUEFSQU1TOiBpZ25vcmVkXG4iKTsKKwkJCUxJQklQV19ERUJVR19NR01UKCJXTEFOX0VJRF9DRl9QQVJBTVM6IGlnbm9yZWRcbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBXTEFOX0VJRF9USU06CiAJCQluZXR3b3JrLT50aW0udGltX2NvdW50ID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJbmV0d29yay0+dGltLnRpbV9wZXJpb2QgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMV07Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfVElNOiBwYXJ0aWFsbHkgaWdub3JlZFxuIik7CisJCQlMSUJJUFdfREVCVUdfTUdNVCgiV0xBTl9FSURfVElNOiBwYXJ0aWFsbHkgaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAogCQljYXNlIFdMQU5fRUlEX0VSUF9JTkZPOgogCQkJbmV0d29yay0+ZXJwX3ZhbHVlID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfRVJQX1ZBTFVFOwotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9FUlBfU0VUOiAlZFxuIiwKKwkJCUxJQklQV19ERUJVR19NR01UKCJNRklFX1RZUEVfRVJQX1NFVDogJWRcbiIsCiAJCQkJCSAgICAgbmV0d29yay0+ZXJwX3ZhbHVlKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgV0xBTl9FSURfSUJTU19QQVJBTVM6CiAJCQluZXR3b3JrLT5hdGltX3dpbmRvdyA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9JQlNTX1BBUkFNUzogJWRcbiIsCisJCQlMSUJJUFdfREVCVUdfTUdNVCgiV0xBTl9FSURfSUJTU19QQVJBTVM6ICVkXG4iLAogCQkJCQkgICAgIG5ldHdvcmstPmF0aW1fd2luZG93KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgV0xBTl9FSURfQ0hBTExFTkdFOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0NIQUxMRU5HRTogaWdub3JlZFxuIik7CisJCQlMSUJJUFdfREVCVUdfTUdNVCgiV0xBTl9FSURfQ0hBTExFTkdFOiBpZ25vcmVkXG4iKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgV0xBTl9FSURfR0VORVJJQzoKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9HRU5FUklDOiAlZCBieXRlc1xuIiwKKwkJCUxJQklQV19ERUJVR19NR01UKCJXTEFOX0VJRF9HRU5FUklDOiAlZCBieXRlc1xuIiwKIAkJCQkJICAgICBpbmZvX2VsZW1lbnQtPmxlbik7Ci0JCQlpZiAoIWllZWU4MDIxMV9wYXJzZV9xb3NfaW5mb19wYXJhbV9JRShpbmZvX2VsZW1lbnQsCisJCQlpZiAoIWxpYmlwd19wYXJzZV9xb3NfaW5mb19wYXJhbV9JRShpbmZvX2VsZW1lbnQsCiAJCQkJCQkJICAgICAgIG5ldHdvcmspKQogCQkJCWJyZWFrOwogCkBAIC0xMjY4LDcgKzEyNjksNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBXTEFOX0VJRF9SU046Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfUlNOOiAlZCBieXRlc1xuIiwKKwkJCUxJQklQV19ERUJVR19NR01UKCJXTEFOX0VJRF9SU046ICVkIGJ5dGVzXG4iLAogCQkJCQkgICAgIGluZm9fZWxlbWVudC0+bGVuKTsKIAkJCW5ldHdvcmstPnJzbl9pZV9sZW4gPSBtaW4oaW5mb19lbGVtZW50LT5sZW4gKyAyLAogCQkJCQkJICBNQVhfV1BBX0lFX0xFTik7CkBAIC0xMzE4LDcgKzEzMTksNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UCisJCQlMSUJJUFdfREVCVUdfTUdNVAogCQkJICAgICgiVW5zdXBwb3J0ZWQgaW5mbyBlbGVtZW50OiAlcyAoJWQpXG4iLAogCQkJICAgICBnZXRfaW5mb19lbGVtZW50X3N0cmluZyhpbmZvX2VsZW1lbnQtPmlkKSwKIAkJCSAgICAgaW5mb19lbGVtZW50LT5pZCk7CkBAIC0xMzI3LDIwICsxMzI4LDIwIEBACiAKIAkJbGVuZ3RoIC09IHNpemVvZigqaW5mb19lbGVtZW50KSArIGluZm9fZWxlbWVudC0+bGVuOwogCQlpbmZvX2VsZW1lbnQgPQotCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICopJmluZm9fZWxlbWVudC0+CisJCSAgICAoc3RydWN0IGxpYmlwd19pbmZvX2VsZW1lbnQgKikmaW5mb19lbGVtZW50LT4KIAkJICAgIGRhdGFbaW5mb19lbGVtZW50LT5sZW5dOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9oYW5kbGVfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZQotCQkJCSAgICAgICAqZnJhbWUsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQorc3RhdGljIGludCBsaWJpcHdfaGFuZGxlX2Fzc29jX3Jlc3Aoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsIHN0cnVjdCBsaWJpcHdfYXNzb2NfcmVzcG9uc2UKKwkJCQkgICAgICAgKmZyYW1lLCBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICpzdGF0cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgbmV0d29ya19yZXNwID0geworCXN0cnVjdCBsaWJpcHdfbmV0d29yayBuZXR3b3JrX3Jlc3AgPSB7CiAJCS5pYnNzX2RmcyA9IE5VTEwsCiAJfTsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmsgPSAmbmV0d29ya19yZXNwOworCXN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29yayA9ICZuZXR3b3JrX3Jlc3A7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKIAogCW5ldHdvcmstPmZsYWdzID0gMDsKQEAgLTEzNjEsNyArMTM2Miw3IEBACiAJbmV0d29yay0+ZXJwX3ZhbHVlID0KIAkgICAgKG5ldHdvcmstPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykgPyAweDMgOiAweDA7CiAKLQlpZiAoc3RhdHMtPmZyZXEgPT0gSUVFRTgwMjExXzUyR0haX0JBTkQpIHsKKwlpZiAoc3RhdHMtPmZyZXEgPT0gTElCSVBXXzUyR0haX0JBTkQpIHsKIAkJLyogZm9yIEEgYmFuZCAoTm8gRFMgaW5mbykgKi8KIAkJbmV0d29yay0+Y2hhbm5lbCA9IHN0YXRzLT5yZWNlaXZlZF9jaGFubmVsOwogCX0gZWxzZQpAQCAtMTM3MCwxMiArMTM3MSwxMiBAQAogCW5ldHdvcmstPndwYV9pZV9sZW4gPSAwOwogCW5ldHdvcmstPnJzbl9pZV9sZW4gPSAwOwogCi0JaWYgKGllZWU4MDIxMV9wYXJzZV9pbmZvX3BhcmFtCisJaWYgKGxpYmlwd19wYXJzZV9pbmZvX3BhcmFtCiAJICAgIChmcmFtZS0+aW5mb19lbGVtZW50LCBzdGF0cy0+bGVuIC0gc2l6ZW9mKCpmcmFtZSksIG5ldHdvcmspKQogCQlyZXR1cm4gMTsKIAogCW5ldHdvcmstPm1vZGUgPSAwOwotCWlmIChzdGF0cy0+ZnJlcSA9PSBJRUVFODAyMTFfNTJHSFpfQkFORCkKKwlpZiAoc3RhdHMtPmZyZXEgPT0gTElCSVBXXzUyR0haX0JBTkQpCiAJCW5ldHdvcmstPm1vZGUgPSBJRUVFX0E7CiAJZWxzZSB7CiAJCWlmIChuZXR3b3JrLT5mbGFncyAmIE5FVFdPUktfSEFTX09GRE0pCkBAIC0xMzk0LDEwICsxMzk1LDEwIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX25ldHdvcmtfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZQorc3RhdGljIGludCBsaWJpcHdfbmV0d29ya19pbml0KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLCBzdHJ1Y3QgbGliaXB3X3Byb2JlX3Jlc3BvbnNlCiAJCQkJCSAqYmVhY29uLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCisJCQkJCSBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmssCisJCQkJCSBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICpzdGF0cykKIHsKIAlERUNMQVJFX1NTSURfQlVGKHNzaWQpOwogCkBAIC0xNDIzLDcgKzE0MjQsNyBAQAogCW5ldHdvcmstPmVycF92YWx1ZSA9IChuZXR3b3JrLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpID8KIAkgICAgMHgzIDogMHgwOwogCi0JaWYgKHN0YXRzLT5mcmVxID09IElFRUU4MDIxMV81MkdIWl9CQU5EKSB7CisJaWYgKHN0YXRzLT5mcmVxID09IExJQklQV181MkdIWl9CQU5EKSB7CiAJCS8qIGZvciBBIGJhbmQgKE5vIERTIGluZm8pICovCiAJCW5ldHdvcmstPmNoYW5uZWwgPSBzdGF0cy0+cmVjZWl2ZWRfY2hhbm5lbDsKIAl9IGVsc2UKQEAgLTE0MzIsMTIgKzE0MzMsMTIgQEAKIAluZXR3b3JrLT53cGFfaWVfbGVuID0gMDsKIAluZXR3b3JrLT5yc25faWVfbGVuID0gMDsKIAotCWlmIChpZWVlODAyMTFfcGFyc2VfaW5mb19wYXJhbQorCWlmIChsaWJpcHdfcGFyc2VfaW5mb19wYXJhbQogCSAgICAoYmVhY29uLT5pbmZvX2VsZW1lbnQsIHN0YXRzLT5sZW4gLSBzaXplb2YoKmJlYWNvbiksIG5ldHdvcmspKQogCQlyZXR1cm4gMTsKIAogCW5ldHdvcmstPm1vZGUgPSAwOwotCWlmIChzdGF0cy0+ZnJlcSA9PSBJRUVFODAyMTFfNTJHSFpfQkFORCkKKwlpZiAoc3RhdHMtPmZyZXEgPT0gTElCSVBXXzUyR0haX0JBTkQpCiAJCW5ldHdvcmstPm1vZGUgPSBJRUVFX0E7CiAJZWxzZSB7CiAJCWlmIChuZXR3b3JrLT5mbGFncyAmIE5FVFdPUktfSEFTX09GRE0pCkBAIC0xNDQ3LDcgKzE0NDgsNyBAQAogCX0KIAogCWlmIChuZXR3b3JrLT5tb2RlID09IDApIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkZpbHRlcmVkIG91dCAnJXMgKCVwTSknICIKKwkJTElCSVBXX0RFQlVHX1NDQU4oIkZpbHRlcmVkIG91dCAnJXMgKCVwTSknICIKIAkJCQkgICAgICJuZXR3b3JrLlxuIiwKIAkJCQkgICAgIHByaW50X3NzaWQoc3NpZCwgbmV0d29yay0+c3NpZCwKIAkJCQkJCSBuZXR3b3JrLT5zc2lkX2xlbiksCkBAIC0xNDYwLDggKzE0NjEsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpc19zYW1lX25ldHdvcmsoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpzcmMsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKmRzdCkKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3NhbWVfbmV0d29yayhzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKnNyYywKKwkJCQkgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqZHN0KQogewogCS8qIEEgbmV0d29yayBpcyBvbmx5IGEgZHVwbGljYXRlIGlmIHRoZSBjaGFubmVsLCBCU1NJRCwgYW5kIEVTU0lECiAJICogYWxsIG1hdGNoLiAgV2UgdHJlYXQgYWxsIDxoaWRkZW4+IHdpdGggdGhlIHNhbWUgQlNTSUQgYW5kIGNoYW5uZWwKQEAgLTE0NzIsMTMgKzE0NzMsMTMgQEAKIAkJIW1lbWNtcChzcmMtPnNzaWQsIGRzdC0+c3NpZCwgc3JjLT5zc2lkX2xlbikpOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfbmV0d29yayhzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKmRzdCwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqc3JjKQorc3RhdGljIHZvaWQgdXBkYXRlX25ldHdvcmsoc3RydWN0IGxpYmlwd19uZXR3b3JrICpkc3QsCisJCQkJICBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKnNyYykKIHsKIAlpbnQgcW9zX2FjdGl2ZTsKIAl1OCBvbGRfcGFyYW07CiAKLQlpZWVlODAyMTFfbmV0d29ya19yZXNldChkc3QpOworCWxpYmlwd19uZXR3b3JrX3Jlc2V0KGRzdCk7CiAJZHN0LT5pYnNzX2RmcyA9IHNyYy0+aWJzc19kZnM7CiAKIAkvKiBXZSBvbmx5IHVwZGF0ZSB0aGUgc3RhdGlzdGljcyBpZiB0aGV5IHdlcmUgY3JlYXRlZCBieSByZWNlaXZpbmcKQEAgLTE0ODgsOSArMTQ4OSw5IEBACiAJICogZG93biB0aGUgc2lnbmFsIGxldmVsIG9mIGFuIEFQLiAqLwogCWlmIChkc3QtPmNoYW5uZWwgPT0gc3JjLT5zdGF0cy5yZWNlaXZlZF9jaGFubmVsKQogCQltZW1jcHkoJmRzdC0+c3RhdHMsICZzcmMtPnN0YXRzLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMpKTsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzKSk7CiAJZWxzZQotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiTmV0d29yayAlcE0gaW5mbyByZWNlaXZlZCAiCisJCUxJQklQV19ERUJVR19TQ0FOKCJOZXR3b3JrICVwTSBpbmZvIHJlY2VpdmVkICIKIAkJCSJvZmYgY2hhbm5lbCAoJWQgdnMuICVkKVxuIiwgc3JjLT5ic3NpZCwKIAkJCWRzdC0+Y2hhbm5lbCwgc3JjLT5zdGF0cy5yZWNlaXZlZF9jaGFubmVsKTsKIApAQCAtMTUyMSw3ICsxNTIyLDcgQEAKIAlvbGRfcGFyYW0gPSBkc3QtPnFvc19kYXRhLm9sZF9wYXJhbV9jb3VudDsKIAlpZiAoZHN0LT5mbGFncyAmIE5FVFdPUktfSEFTX1FPU19NQVNLKQogCQltZW1jcHkoJmRzdC0+cW9zX2RhdGEsICZzcmMtPnFvc19kYXRhLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEpKTsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbGliaXB3X3Fvc19kYXRhKSk7CiAJZWxzZSB7CiAJCWRzdC0+cW9zX2RhdGEuc3VwcG9ydGVkID0gc3JjLT5xb3NfZGF0YS5zdXBwb3J0ZWQ7CiAJCWRzdC0+cW9zX2RhdGEucGFyYW1fY291bnQgPSBzcmMtPnFvc19kYXRhLnBhcmFtX2NvdW50OwpAQCAtMTUyOSwxMSArMTUzMCwxMSBAQAogCiAJaWYgKGRzdC0+cW9zX2RhdGEuc3VwcG9ydGVkID09IDEpIHsKIAkJaWYgKGRzdC0+c3NpZF9sZW4pCi0JCQlJRUVFODAyMTFfREVCVUdfUU9TCisJCQlMSUJJUFdfREVCVUdfUU9TCiAJCQkgICAgKCJRb1MgdGhlIG5ldHdvcmsgJXMgaXMgUW9TIHN1cHBvcnRlZFxuIiwKIAkJCSAgICAgZHN0LT5zc2lkKTsKIAkJZWxzZQotCQkJSUVFRTgwMjExX0RFQlVHX1FPUworCQkJTElCSVBXX0RFQlVHX1FPUwogCQkJICAgICgiUW9TIHRoZSBuZXR3b3JrIGlzIFFvUyBzdXBwb3J0ZWRcbiIpOwogCX0KIAlkc3QtPnFvc19kYXRhLmFjdGl2ZSA9IHFvc19hY3RpdmU7CkBAIC0xNTQ3LDI1ICsxNTQ4LDI1IEBACiAJcmV0dXJuIChXTEFOX0ZDX0dFVF9TVFlQRShsZTE2X3RvX2NwdShmYykpID09IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19wcm9iZV9yZXNwb25zZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZQorc3RhdGljIHZvaWQgbGliaXB3X3Byb2Nlc3NfcHJvYmVfcmVzcG9uc2Uoc3RydWN0IGxpYmlwd19kZXZpY2UKIAkJCQkJCSAgICAqaWVlZSwgc3RydWN0Ci0JCQkJCQkgICAgaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlCi0JCQkJCQkgICAgKmJlYWNvbiwgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cworCQkJCQkJICAgIGxpYmlwd19wcm9iZV9yZXNwb25zZQorCQkJCQkJICAgICpiZWFjb24sIHN0cnVjdCBsaWJpcHdfcnhfc3RhdHMKIAkJCQkJCSAgICAqc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgbmV0d29yayA9IHsKKwlzdHJ1Y3QgbGliaXB3X25ldHdvcmsgbmV0d29yayA9IHsKIAkJLmlic3NfZGZzID0gTlVMTCwKIAl9OwotCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqdGFyZ2V0OwotCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqb2xkZXN0ID0gTlVMTDsKKwlzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKnRhcmdldDsKKwlzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm9sZGVzdCA9IE5VTEw7CiAjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICppbmZvX2VsZW1lbnQgPSBiZWFjb24tPmluZm9fZWxlbWVudDsKKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCAqaW5mb19lbGVtZW50ID0gYmVhY29uLT5pbmZvX2VsZW1lbnQ7CiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7CiAKLQlJRUVFODAyMTFfREVCVUdfU0NBTigiJyVzJyAoJXBNIgorCUxJQklQV19ERUJVR19TQ0FOKCInJXMnICglcE0iCiAJCSAgICAgIik6ICVjJWMlYyVjICVjJWMlYyVjLSVjJWMlYyVjICVjJWMlYyVjXG4iLAogCQkgICAgIHByaW50X3NzaWQoc3NpZCwgaW5mb19lbGVtZW50LT5kYXRhLCBpbmZvX2VsZW1lbnQtPmxlbiksCiAJCSAgICAgYmVhY29uLT5oZWFkZXIuYWRkcjMsCkBAIC0xNTg2LDggKzE1ODcsOCBAQAogCQkgICAgIChiZWFjb24tPmNhcGFiaWxpdHkgJiBjcHVfdG9fbGUxNigxIDw8IDB4MSkpID8gJzEnIDogJzAnLAogCQkgICAgIChiZWFjb24tPmNhcGFiaWxpdHkgJiBjcHVfdG9fbGUxNigxIDw8IDB4MCkpID8gJzEnIDogJzAnKTsKIAotCWlmIChpZWVlODAyMTFfbmV0d29ya19pbml0KGllZWUsIGJlYWNvbiwgJm5ldHdvcmssIHN0YXRzKSkgewotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiRHJvcHBlZCAnJXMnICglcE0pIHZpYSAlcy5cbiIsCisJaWYgKGxpYmlwd19uZXR3b3JrX2luaXQoaWVlZSwgYmVhY29uLCAmbmV0d29yaywgc3RhdHMpKSB7CisJCUxJQklQV19ERUJVR19TQ0FOKCJEcm9wcGVkICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIHByaW50X3NzaWQoc3NpZCwgaW5mb19lbGVtZW50LT5kYXRhLAogCQkJCQkJIGluZm9fZWxlbWVudC0+bGVuKSwKIAkJCQkgICAgIGJlYWNvbi0+aGVhZGVyLmFkZHIzLApAQCAtMTYyNCwyMSArMTYyNSwyMSBAQAogCQkJLyogSWYgdGhlcmUgYXJlIG5vIG1vcmUgc2xvdHMsIGV4cGlyZSB0aGUgb2xkZXN0ICovCiAJCQlsaXN0X2RlbCgmb2xkZXN0LT5saXN0KTsKIAkJCXRhcmdldCA9IG9sZGVzdDsKLQkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJFeHBpcmVkICclcycgKCVwTSkgZnJvbSAiCisJCQlMSUJJUFdfREVCVUdfU0NBTigiRXhwaXJlZCAnJXMnICglcE0pIGZyb20gIgogCQkJCQkgICAgICJuZXR3b3JrIGxpc3QuXG4iLAogCQkJCQkgICAgIHByaW50X3NzaWQoc3NpZCwgdGFyZ2V0LT5zc2lkLAogCQkJCQkJCSB0YXJnZXQtPnNzaWRfbGVuKSwKIAkJCQkJICAgICB0YXJnZXQtPmJzc2lkKTsKLQkJCWllZWU4MDIxMV9uZXR3b3JrX3Jlc2V0KHRhcmdldCk7CisJCQlsaWJpcHdfbmV0d29ya19yZXNldCh0YXJnZXQpOwogCQl9IGVsc2UgewogCQkJLyogT3RoZXJ3aXNlIGp1c3QgcHVsbCBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KIAkJCXRhcmdldCA9IGxpc3RfZW50cnkoaWVlZS0+bmV0d29ya19mcmVlX2xpc3QubmV4dCwKLQkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yaywgbGlzdCk7CisJCQkJCSAgICBzdHJ1Y3QgbGliaXB3X25ldHdvcmssIGxpc3QpOwogCQkJbGlzdF9kZWwoaWVlZS0+bmV0d29ya19mcmVlX2xpc3QubmV4dCk7CiAJCX0KIAogI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkFkZGluZyAnJXMnICglcE0pIHZpYSAlcy5cbiIsCisJCUxJQklQV19ERUJVR19TQ0FOKCJBZGRpbmcgJyVzJyAoJXBNKSB2aWEgJXMuXG4iLAogCQkJCSAgICAgcHJpbnRfc3NpZChzc2lkLCBuZXR3b3JrLnNzaWQsCiAJCQkJCQkgbmV0d29yay5zc2lkX2xlbiksCiAJCQkJICAgICBuZXR3b3JrLmJzc2lkLApAQCAtMTY0OSw3ICsxNjUwLDcgQEAKIAkJbmV0d29yay5pYnNzX2RmcyA9IE5VTEw7CiAJCWxpc3RfYWRkX3RhaWwoJnRhcmdldC0+bGlzdCwgJmllZWUtPm5ldHdvcmtfbGlzdCk7CiAJfSBlbHNlIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIlVwZGF0aW5nICclcycgKCVwTSkgdmlhICVzLlxuIiwKKwkJTElCSVBXX0RFQlVHX1NDQU4oIlVwZGF0aW5nICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIHByaW50X3NzaWQoc3NpZCwgdGFyZ2V0LT5zc2lkLAogCQkJCQkJIHRhcmdldC0+c3NpZF9sZW4pLAogCQkJCSAgICAgdGFyZ2V0LT5ic3NpZCwKQEAgLTE2NzAsMTIxICsxNjcxLDEyMSBAQAogCX0KIH0KIAotdm9pZCBpZWVlODAyMTFfcnhfbWd0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyLAotCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKK3ZvaWQgbGliaXB3X3J4X21ndChzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKKwkJICAgICAgc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKmhlYWRlciwKKwkJICAgICAgc3RydWN0IGxpYmlwd19yeF9zdGF0cyAqc3RhdHMpCiB7CiAJc3dpdGNoIChXTEFOX0ZDX0dFVF9TVFlQRShsZTE2X3RvX2NwdShoZWFkZXItPmZyYW1lX2N0bCkpKSB7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUDoKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoInJlY2VpdmVkIEFTU09DSUFUSU9OIFJFU1BPTlNFICglZClcbiIsCisJCUxJQklQV19ERUJVR19NR01UKCJyZWNlaXZlZCBBU1NPQ0lBVElPTiBSRVNQT05TRSAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7Ci0JCWllZWU4MDIxMV9oYW5kbGVfYXNzb2NfcmVzcChpZWVlLAotCQkJCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgKikKKwkJbGliaXB3X2hhbmRsZV9hc3NvY19yZXNwKGllZWUsCisJCQkJCSAgICAoc3RydWN0IGxpYmlwd19hc3NvY19yZXNwb25zZSAqKQogCQkJCQkgICAgaGVhZGVyLCBzdGF0cyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgotCQlJRUVFODAyMTFfREVCVUdfTUdNVCgicmVjZWl2ZWQgUkVBU1NPQ0lBVElPTiBSRVNQT05TRSAoJWQpXG4iLAorCQlMSUJJUFdfREVCVUdfTUdNVCgicmVjZWl2ZWQgUkVBU1NPQ0lBVElPTiBSRVNQT05TRSAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgotCQlJRUVFODAyMTFfREVCVUdfTUdNVCgicmVjZWl2ZWQgYXV0aCAoJWQpXG4iLAorCQlMSUJJUFdfREVCVUdfTUdNVCgicmVjZWl2ZWQgYXV0aCAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7CiAKIAkJaWYgKGllZWUtPmhhbmRsZV9wcm9iZV9yZXF1ZXN0ICE9IE5VTEwpCiAJCQlpZWVlLT5oYW5kbGVfcHJvYmVfcmVxdWVzdChpZWVlLT5kZXYsCiAJCQkJCQkgICAoc3RydWN0Ci0JCQkJCQkgICAgaWVlZTgwMjExX3Byb2JlX3JlcXVlc3QgKikKKwkJCQkJCSAgICBsaWJpcHdfcHJvYmVfcmVxdWVzdCAqKQogCQkJCQkJICAgaGVhZGVyLCBzdGF0cyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoInJlY2VpdmVkIFBST0JFIFJFU1BPTlNFICglZClcbiIsCisJCUxJQklQV19ERUJVR19NR01UKCJyZWNlaXZlZCBQUk9CRSBSRVNQT05TRSAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7Ci0JCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJQcm9iZSByZXNwb25zZVxuIik7Ci0JCWllZWU4MDIxMV9wcm9jZXNzX3Byb2JlX3Jlc3BvbnNlKGllZWUsCisJCUxJQklQV19ERUJVR19TQ0FOKCJQcm9iZSByZXNwb25zZVxuIik7CisJCWxpYmlwd19wcm9jZXNzX3Byb2JlX3Jlc3BvbnNlKGllZWUsCiAJCQkJCQkgKHN0cnVjdAotCQkJCQkJICBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgKikKKwkJCQkJCSAgbGliaXB3X3Byb2JlX3Jlc3BvbnNlICopCiAJCQkJCQkgaGVhZGVyLCBzdGF0cyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCQlJRUVFODAyMTFfREVCVUdfTUdNVCgicmVjZWl2ZWQgQkVBQ09OICglZClcbiIsCisJCUxJQklQV19ERUJVR19NR01UKCJyZWNlaXZlZCBCRUFDT04gKCVkKVxuIiwKIAkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGxlMTZfdG9fY3B1CiAJCQkJCQkgICAgICAgKGhlYWRlci0+ZnJhbWVfY3RsKSkpOwotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiQmVhY29uXG4iKTsKLQkJaWVlZTgwMjExX3Byb2Nlc3NfcHJvYmVfcmVzcG9uc2UoaWVlZSwKKwkJTElCSVBXX0RFQlVHX1NDQU4oIkJlYWNvblxuIik7CisJCWxpYmlwd19wcm9jZXNzX3Byb2JlX3Jlc3BvbnNlKGllZWUsCiAJCQkJCQkgKHN0cnVjdAotCQkJCQkJICBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgKikKKwkJCQkJCSAgbGliaXB3X3Byb2JlX3Jlc3BvbnNlICopCiAJCQkJCQkgaGVhZGVyLCBzdGF0cyk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CiAKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoInJlY2VpdmVkIGF1dGggKCVkKVxuIiwKKwkJTElCSVBXX0RFQlVHX01HTVQoInJlY2VpdmVkIGF1dGggKCVkKVxuIiwKIAkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGxlMTZfdG9fY3B1CiAJCQkJCQkgICAgICAgKGhlYWRlci0+ZnJhbWVfY3RsKSkpOwogCiAJCWlmIChpZWVlLT5oYW5kbGVfYXV0aCAhPSBOVUxMKQogCQkJaWVlZS0+aGFuZGxlX2F1dGgoaWVlZS0+ZGV2LAotCQkJCQkgIChzdHJ1Y3QgaWVlZTgwMjExX2F1dGggKiloZWFkZXIpOworCQkJCQkgIChzdHJ1Y3QgbGliaXB3X2F1dGggKiloZWFkZXIpOwogCQlicmVhazsKIAogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgogCQlpZiAoaWVlZS0+aGFuZGxlX2Rpc2Fzc29jICE9IE5VTEwpCiAJCQlpZWVlLT5oYW5kbGVfZGlzYXNzb2MoaWVlZS0+ZGV2LAotCQkJCQkgICAgICAoc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyAqKQorCQkJCQkgICAgICAoc3RydWN0IGxpYmlwd19kaXNhc3NvYyAqKQogCQkJCQkgICAgICBoZWFkZXIpOwogCQlicmVhazsKIAogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIkFDVElPTlxuIik7CisJCUxJQklQV19ERUJVR19NR01UKCJBQ1RJT05cbiIpOwogCQlpZiAoaWVlZS0+aGFuZGxlX2FjdGlvbikKIAkJCWllZWUtPmhhbmRsZV9hY3Rpb24oaWVlZS0+ZGV2LAotCQkJCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfYWN0aW9uICopCisJCQkJCSAgICAoc3RydWN0IGxpYmlwd19hY3Rpb24gKikKIAkJCQkJICAgIGhlYWRlciwgc3RhdHMpOwogCQlicmVhazsKIAogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVROgotCQlJRUVFODAyMTFfREVCVUdfTUdNVCgicmVjZWl2ZWQgcmVhc3NvYyAoJWQpXG4iLAorCQlMSUJJUFdfREVCVUdfTUdNVCgicmVjZWl2ZWQgcmVhc3NvYyAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7CiAKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIiVzOiBJRUVFODAyMTFfUkVBU1NPQ19SRVEgcmVjZWl2ZWRcbiIsCisJCUxJQklQV19ERUJVR19NR01UKCIlczogTElCSVBXX1JFQVNTT0NfUkVRIHJlY2VpdmVkXG4iLAogCQkJCSAgICAgaWVlZS0+ZGV2LT5uYW1lKTsKIAkJaWYgKGllZWUtPmhhbmRsZV9yZWFzc29jX3JlcXVlc3QgIT0gTlVMTCkKIAkJCWllZWUtPmhhbmRsZV9yZWFzc29jX3JlcXVlc3QoaWVlZS0+ZGV2LAotCQkJCQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX3JlYXNzb2NfcmVxdWVzdCAqKQorCQkJCQkJICAgIChzdHJ1Y3QgbGliaXB3X3JlYXNzb2NfcmVxdWVzdCAqKQogCQkJCQkJICAgICBoZWFkZXIpOwogCQlicmVhazsKIAogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUToKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoInJlY2VpdmVkIGFzc29jICglZClcbiIsCisJCUxJQklQV19ERUJVR19NR01UKCJyZWNlaXZlZCBhc3NvYyAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7CiAKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIiVzOiBJRUVFODAyMTFfQVNTT0NfUkVRIHJlY2VpdmVkXG4iLAorCQlMSUJJUFdfREVCVUdfTUdNVCgiJXM6IExJQklQV19BU1NPQ19SRVEgcmVjZWl2ZWRcbiIsCiAJCQkJICAgICBpZWVlLT5kZXYtPm5hbWUpOwogCQlpZiAoaWVlZS0+aGFuZGxlX2Fzc29jX3JlcXVlc3QgIT0gTlVMTCkKIAkJCWllZWUtPmhhbmRsZV9hc3NvY19yZXF1ZXN0KGllZWUtPmRldik7CiAJCWJyZWFrOwogCiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgotCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiREVBVVRIXG4iKTsKKwkJTElCSVBXX0RFQlVHX01HTVQoIkRFQVVUSFxuIik7CiAJCWlmIChpZWVlLT5oYW5kbGVfZGVhdXRoICE9IE5VTEwpCiAJCQlpZWVlLT5oYW5kbGVfZGVhdXRoKGllZWUtPmRldiwKLQkJCQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2RlYXV0aCAqKQorCQkJCQkgICAgKHN0cnVjdCBsaWJpcHdfZGVhdXRoICopCiAJCQkJCSAgICBoZWFkZXIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJRUVFODAyMTFfREVCVUdfTUdNVCgicmVjZWl2ZWQgVU5LTk9XTiAoJWQpXG4iLAorCQlMSUJJUFdfREVCVUdfTUdNVCgicmVjZWl2ZWQgVU5LTk9XTiAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7Ci0JCUlFRUU4MDIxMV9ERUJVR19NR01UKCIlczogVW5rbm93biBtYW5hZ2VtZW50IHBhY2tldDogJWRcbiIsCisJCUxJQklQV19ERUJVR19NR01UKCIlczogVW5rbm93biBtYW5hZ2VtZW50IHBhY2tldDogJWRcbiIsCiAJCQkJICAgICBpZWVlLT5kZXYtPm5hbWUsCiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShsZTE2X3RvX2NwdQogCQkJCQkJICAgICAgIChoZWFkZXItPmZyYW1lX2N0bCkpKTsKQEAgLTE3OTIsNiArMTc5Myw2IEBACiAJfQogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfcnhfYW55KTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X21ndCk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeCk7CitFWFBPUlRfU1lNQk9MX0dQTChsaWJpcHdfcnhfYW55KTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X3J4X21ndCk7CitFWFBPUlRfU1lNQk9MKGxpYmlwd19yeCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd190eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfdHguYwppbmRleCBkYTJhZDU0Li5kYThiZWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd190eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3R4LmMKQEAgLTE5LDcgKzE5LDcgQEAKICAgZmlsZSBjYWxsZWQgTElDRU5TRS4KIAogICBDb250YWN0IEluZm9ybWF0aW9uOgotICBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgogICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJpZWVlODAyMTEuaCIKKyNpbmNsdWRlICJsaWJpcHcuaCIKIAogLyoKIApAQCAtMTI2LDEyICsxMjYsMTIgQEAKIHN0YXRpYyB1OCBQODAyXzFIX09VSVtQODAyMTFfT1VJX0xFTl0gPSB7IDB4MDAsIDB4MDAsIDB4ZjggfTsKIHN0YXRpYyB1OCBSRkMxMDQyX09VSVtQODAyMTFfT1VJX0xFTl0gPSB7IDB4MDAsIDB4MDAsIDB4MDAgfTsKIAotc3RhdGljIGludCBpZWVlODAyMTFfY29weV9zbmFwKHU4ICogZGF0YSwgX19iZTE2IGhfcHJvdG8pCitzdGF0aWMgaW50IGxpYmlwd19jb3B5X3NuYXAodTggKiBkYXRhLCBfX2JlMTYgaF9wcm90bykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3NuYXBfaGRyICpzbmFwOworCXN0cnVjdCBsaWJpcHdfc25hcF9oZHIgKnNuYXA7CiAJdTggKm91aTsKIAotCXNuYXAgPSAoc3RydWN0IGllZWU4MDIxMV9zbmFwX2hkciAqKWRhdGE7CisJc25hcCA9IChzdHJ1Y3QgbGliaXB3X3NuYXBfaGRyICopZGF0YTsKIAlzbmFwLT5kc2FwID0gMHhhYTsKIAlzbmFwLT5zc2FwID0gMHhhYTsKIAlzbmFwLT5jdHJsID0gMHgwMzsKQEAgLTE0OSw3ICsxNDksNyBAQAogCXJldHVybiBTTkFQX1NJWkUgKyBzaXplb2YodTE2KTsKIH0KIAotc3RhdGljIGludCBpZWVlODAyMTFfZW5jcnlwdF9mcmFnbWVudChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKK3N0YXRpYyBpbnQgbGliaXB3X2VuY3J5cHRfZnJhZ21lbnQoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCiAJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKmZyYWcsIGludCBoZHJfbGVuKQogewogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdCA9CkBAIC0xNzcsNyArMTc3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBpZWVlODAyMTFfdHhiX2ZyZWUoc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YikKK3ZvaWQgbGliaXB3X3R4Yl9mcmVlKHN0cnVjdCBsaWJpcHdfdHhiICp0eGIpCiB7CiAJaW50IGk7CiAJaWYgKHVubGlrZWx5KCF0eGIpKQpAQCAtMTg4LDE3ICsxODgsMTcgQEAKIAlrZnJlZSh0eGIpOwogfQogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV90eGIgKmllZWU4MDIxMV9hbGxvY190eGIoaW50IG5yX2ZyYWdzLCBpbnQgdHhiX3NpemUsCitzdGF0aWMgc3RydWN0IGxpYmlwd190eGIgKmxpYmlwd19hbGxvY190eGIoaW50IG5yX2ZyYWdzLCBpbnQgdHhiX3NpemUsCiAJCQkJCQkgaW50IGhlYWRyb29tLCBnZnBfdCBnZnBfbWFzaykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiOworCXN0cnVjdCBsaWJpcHdfdHhiICp0eGI7CiAJaW50IGk7Ci0JdHhiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eGIpICsgKHNpemVvZih1OCAqKSAqIG5yX2ZyYWdzKSwKKwl0eGIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGliaXB3X3R4YikgKyAoc2l6ZW9mKHU4ICopICogbnJfZnJhZ3MpLAogCQkgICAgICBnZnBfbWFzayk7CiAJaWYgKCF0eGIpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtc2V0KHR4YiwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhiKSk7CisJbWVtc2V0KHR4YiwgMCwgc2l6ZW9mKHN0cnVjdCBsaWJpcHdfdHhiKSk7CiAJdHhiLT5ucl9mcmFncyA9IG5yX2ZyYWdzOwogCXR4Yi0+ZnJhZ19zaXplID0gdHhiX3NpemU7CiAKQEAgLTIyMCw3ICsyMjAsNyBAQAogCXJldHVybiB0eGI7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGxpYmlwd19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBldGhoZHIgKmV0aDsKIAlzdHJ1Y3QgaXBoZHIgKmlwOwpAQCAtMjUyLDExICsyNTIsMTEgQEAKIAogLyogSW5jb21pbmcgc2tiIGlzIGNvbnZlcnRlZCB0byBhIHR4YiB3aGljaCBjb25zaXN0cyBvZgogICogYSBibG9jayBvZiA4MDIuMTEgZnJhZ21lbnQgcGFja2V0cyAoc3RvcmVkIGFzIHNrYnMpICovCi1pbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IGxpYmlwd194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIgPSBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zICpmcmFnX2hkcjsKKwlzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxpYmlwd190eGIgKnR4YiA9IE5VTEw7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHJxb3MgKmZyYWdfaGRyOwogCWludCBpLCBieXRlc19wZXJfZnJhZywgbnJfZnJhZ3MsIGJ5dGVzX2xhc3RfZnJhZywgZnJhZ19zaXplLAogCSAgICBydHNfcmVxdWlyZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI2NCw3ICsyNjQsNyBAQAogCV9fYmUxNiBldGhlcl90eXBlOwogCWludCBieXRlcywgZmMsIGhkcl9sZW47CiAJc3RydWN0IHNrX2J1ZmYgKnNrYl9mcmFnOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zIGhlYWRlciA9IHsvKiBFbnN1cmUgemVybyBpbml0aWFsaXplZCAqLworCXN0cnVjdCBsaWJpcHdfaGRyXzNhZGRycW9zIGhlYWRlciA9IHsvKiBFbnN1cmUgemVybyBpbml0aWFsaXplZCAqLwogCQkuZHVyYXRpb25faWQgPSAwLAogCQkuc2VxX2N0bCA9IDAsCiAJCS5xb3NfY3RsID0gMApAQCAtMzMxLDE0ICszMzEsMTQgQEAKIAkJbWVtY3B5KGhlYWRlci5hZGRyMiwgc3JjLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZWFkZXIuYWRkcjMsIGllZWUtPmJzc2lkLCBFVEhfQUxFTik7CiAJfQotCWhkcl9sZW4gPSBJRUVFODAyMTFfM0FERFJfTEVOOworCWhkcl9sZW4gPSBMSUJJUFdfM0FERFJfTEVOOwogCiAJaWYgKGllZWUtPmlzX3Fvc19hY3RpdmUgJiYgaWVlZS0+aXNfcW9zX2FjdGl2ZShkZXYsIHNrYikpIHsKIAkJZmMgfD0gSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBOwogCQloZHJfbGVuICs9IDI7CiAKLQkJc2tiLT5wcmlvcml0eSA9IGllZWU4MDIxMV9jbGFzc2lmeShza2IpOwotCQloZWFkZXIucW9zX2N0bCB8PSBjcHVfdG9fbGUxNihza2ItPnByaW9yaXR5ICYgSUVFRTgwMjExX1FDVExfVElEKTsKKwkJc2tiLT5wcmlvcml0eSA9IGxpYmlwd19jbGFzc2lmeShza2IpOworCQloZWFkZXIucW9zX2N0bCB8PSBjcHVfdG9fbGUxNihza2ItPnByaW9yaXR5ICYgTElCSVBXX1FDVExfVElEKTsKIAl9CiAJaGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKIApAQCAtMzYyLDEyICszNjIsMTIgQEAKIAkJc2tiX3Jlc2VydmUoc2tiX25ldywgY3J5cHQtPm9wcy0+ZXh0cmFfbXNkdV9wcmVmaXhfbGVuKTsKIAkJbWVtY3B5KHNrYl9wdXQoc2tiX25ldywgaGRyX2xlbiksICZoZWFkZXIsIGhkcl9sZW4pOwogCQlzbmFwcGVkID0gMTsKLQkJaWVlZTgwMjExX2NvcHlfc25hcChza2JfcHV0KHNrYl9uZXcsIFNOQVBfU0laRSArIHNpemVvZih1MTYpKSwKKwkJbGliaXB3X2NvcHlfc25hcChza2JfcHV0KHNrYl9uZXcsIFNOQVBfU0laRSArIHNpemVvZih1MTYpKSwKIAkJCQkgICAgZXRoZXJfdHlwZSk7CiAJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBza2JfcHV0KHNrYl9uZXcsIHNrYi0+bGVuKSwgc2tiLT5sZW4pOwogCQlyZXMgPSBjcnlwdC0+b3BzLT5lbmNyeXB0X21zZHUoc2tiX25ldywgaGRyX2xlbiwgY3J5cHQtPnByaXYpOwogCQlpZiAocmVzIDwgMCkgewotCQkJSUVFRTgwMjExX0VSUk9SKCJtc2R1IGVuY3J5cHRpb24gZmFpbGVkXG4iKTsKKwkJCUxJQklQV19FUlJPUigibXNkdSBlbmNyeXB0aW9uIGZhaWxlZFxuIik7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2JfbmV3KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CkBAIC0zOTMsOCArMzkzLDggQEAKIAkJICogZm9yIGl0IHdoZW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvZiBwYXlsb2FkIHNwYWNlLiAqLwogCQlieXRlc19wZXJfZnJhZyA9IGZyYWdfc2l6ZSAtIGhkcl9sZW47CiAJCWlmIChpZWVlLT5jb25maWcgJgotCQkgICAgKENGR19JRUVFODAyMTFfQ09NUFVURV9GQ1MgfCBDRkdfSUVFRTgwMjExX1JFU0VSVkVfRkNTKSkKLQkJCWJ5dGVzX3Blcl9mcmFnIC09IElFRUU4MDIxMV9GQ1NfTEVOOworCQkgICAgKENGR19MSUJJUFdfQ09NUFVURV9GQ1MgfCBDRkdfTElCSVBXX1JFU0VSVkVfRkNTKSkKKwkJCWJ5dGVzX3Blcl9mcmFnIC09IExJQklQV19GQ1NfTEVOOwogCiAJCS8qIEVhY2ggZnJhZ21lbnQgbWF5IG5lZWQgdG8gaGF2ZSByb29tIGZvciBlbmNyeXB0aW9uZwogCQkgKiBwcmUvcG9zdGZpeCAqLwpAQCAtNDE3LDE0ICs0MTcsMTQgQEAKIAl9CiAKIAlydHNfcmVxdWlyZWQgPSAoZnJhZ19zaXplID4gaWVlZS0+cnRzCi0JCQkmJiBpZWVlLT5jb25maWcgJiBDRkdfSUVFRTgwMjExX1JUUyk7CisJCQkmJiBpZWVlLT5jb25maWcgJiBDRkdfTElCSVBXX1JUUyk7CiAJaWYgKHJ0c19yZXF1aXJlZCkKIAkJbnJfZnJhZ3MrKzsKIAogCS8qIFdoZW4gd2UgYWxsb2NhdGUgdGhlIFRYQiB3ZSBhbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSByZXNlcnZlCiAJICogYW5kIGZ1bGwgZnJhZ21lbnQgYnl0ZXMgKGJ5dGVzX3Blcl9mcmFnIGRvZXNuJ3QgaW5jbHVkZSBwcmVmaXgsCiAJICogcG9zdGZpeCwgaGVhZGVyLCBGQ1MsIGV0Yy4pICovCi0JdHhiID0gaWVlZTgwMjExX2FsbG9jX3R4Yihucl9mcmFncywgZnJhZ19zaXplLAorCXR4YiA9IGxpYmlwd19hbGxvY190eGIobnJfZnJhZ3MsIGZyYWdfc2l6ZSwKIAkJCQkgIGllZWUtPnR4X2hlYWRyb29tLCBHRlBfQVRPTUlDKTsKIAlpZiAodW5saWtlbHkoIXR4YikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSBUWEJcbiIsCkBAIC00NDEsNyArNDQxLDcgQEAKIAlpZiAocnRzX3JlcXVpcmVkKSB7CiAJCXNrYl9mcmFnID0gdHhiLT5mcmFnbWVudHNbMF07CiAJCWZyYWdfaGRyID0KLQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcnFvcyAqKXNrYl9wdXQoc2tiX2ZyYWcsIGhkcl9sZW4pOworCQkgICAgKHN0cnVjdCBsaWJpcHdfaGRyXzNhZGRycW9zICopc2tiX3B1dChza2JfZnJhZywgaGRyX2xlbik7CiAKIAkJLyoKIAkJICogU2V0IGhlYWRlciBmcmFtZV9jdGwgdG8gdGhlIFJUUy4KQEAgLTQ1Niw3ICs0NTYsNyBAQAogCQloZWFkZXIuZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoZmMpOwogCiAJCWlmIChpZWVlLT5jb25maWcgJgotCQkgICAgKENGR19JRUVFODAyMTFfQ09NUFVURV9GQ1MgfCBDRkdfSUVFRTgwMjExX1JFU0VSVkVfRkNTKSkKKwkJICAgIChDRkdfTElCSVBXX0NPTVBVVEVfRkNTIHwgQ0ZHX0xJQklQV19SRVNFUlZFX0ZDUykpCiAJCQlza2JfcHV0KHNrYl9mcmFnLCA0KTsKIAogCQl0eGItPnJ0c19pbmNsdWRlZCA9IDE7CkBAIC00NzIsNyArNDcyLDcgQEAKIAkJCQkgICAgY3J5cHQtPm9wcy0+ZXh0cmFfbXBkdV9wcmVmaXhfbGVuKTsKIAogCQlmcmFnX2hkciA9Ci0JCSAgICAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHJxb3MgKilza2JfcHV0KHNrYl9mcmFnLCBoZHJfbGVuKTsKKwkJICAgIChzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkcnFvcyAqKXNrYl9wdXQoc2tiX2ZyYWcsIGhkcl9sZW4pOwogCQltZW1jcHkoZnJhZ19oZHIsICZoZWFkZXIsIGhkcl9sZW4pOwogCiAJCS8qIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IGZyYWdtZW50LCB0aGVuIGFkZCB0aGUgTU9SRUZSQUdTCkBAIC00ODcsNyArNDg3LDcgQEAKIAkJfQogCiAJCWlmIChpID09IDAgJiYgIXNuYXBwZWQpIHsKLQkJCWllZWU4MDIxMV9jb3B5X3NuYXAoc2tiX3B1dAorCQkJbGliaXB3X2NvcHlfc25hcChza2JfcHV0CiAJCQkJCSAgICAoc2tiX2ZyYWcsIFNOQVBfU0laRSArIHNpemVvZih1MTYpKSwKIAkJCQkJICAgIGV0aGVyX3R5cGUpOwogCQkJYnl0ZXMgLT0gU05BUF9TSVpFICsgc2l6ZW9mKHUxNik7CkBAIC01MDEsNyArNTAxLDcgQEAKIAkJLyogRW5jcnlwdGlvbiByb3V0aW5lIHdpbGwgbW92ZSB0aGUgaGVhZGVyIGZvcndhcmQgaW4gb3JkZXIKIAkJICogdG8gaW5zZXJ0IHRoZSBJViBiZXR3ZWVuIHRoZSBoZWFkZXIgYW5kIHRoZSBwYXlsb2FkICovCiAJCWlmIChob3N0X2VuY3J5cHQpCi0JCQlpZWVlODAyMTFfZW5jcnlwdF9mcmFnbWVudChpZWVlLCBza2JfZnJhZywgaGRyX2xlbik7CisJCQlsaWJpcHdfZW5jcnlwdF9mcmFnbWVudChpZWVlLCBza2JfZnJhZywgaGRyX2xlbik7CiAJCWVsc2UgaWYgKGhvc3RfYnVpbGRfaXYpIHsKIAkJCWF0b21pY19pbmMoJmNyeXB0LT5yZWZjbnQpOwogCQkJaWYgKGNyeXB0LT5vcHMtPmJ1aWxkX2l2KQpAQCAtNTEzLDcgKzUxMyw3IEBACiAJCX0KIAogCQlpZiAoaWVlZS0+Y29uZmlnICYKLQkJICAgIChDRkdfSUVFRTgwMjExX0NPTVBVVEVfRkNTIHwgQ0ZHX0lFRUU4MDIxMV9SRVNFUlZFX0ZDUykpCisJCSAgICAoQ0ZHX0xJQklQV19DT01QVVRFX0ZDUyB8IENGR19MSUJJUFdfUkVTRVJWRV9GQ1MpKQogCQkJc2tiX3B1dChza2JfZnJhZywgNCk7CiAJfQogCkBAIC01MjMsMTcgKzUyMywxNyBAQAogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKIAlpZiAodHhiKSB7Ci0JCWludCByZXQgPSAoKmllZWUtPmhhcmRfc3RhcnRfeG1pdCkgKHR4YiwgZGV2LCBwcmlvcml0eSk7Ci0JCWlmIChyZXQgPT0gMCkgeworCQluZXRkZXZfdHhfdCByZXQgPSAoKmllZWUtPmhhcmRfc3RhcnRfeG1pdCkodHhiLCBkZXYsIHByaW9yaXR5KTsKKwkJaWYgKHJldCA9PSBORVRERVZfVFhfT0spIHsKIAkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSB0eGItPnBheWxvYWRfc2l6ZTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCi0JCWllZWU4MDIxMV90eGJfZnJlZSh0eGIpOworCQlsaWJpcHdfdHhiX2ZyZWUodHhiKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAgICAgICBmYWlsZWQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwpAQCAtNTQxLDYgKzU0MSw2IEBACiAJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiB9Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV94bWl0KTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X3htaXQpOwogCi1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eGJfZnJlZSk7CitFWFBPUlRfU1lNQk9MKGxpYmlwd190eGJfZnJlZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd193eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfd3guYwppbmRleCAzYzA4MTJkLi40ZDg5ZjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd193eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3d4LmMKQEAgLTI1LDcgKzI1LDcgQEAKICAgZmlsZSBjYWxsZWQgTElDRU5TRS4KIAogICBDb250YWN0IEluZm9ybWF0aW9uOgotICBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgogICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM3LDkgKzM3LDkgQEAKICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogCi0jaW5jbHVkZSAiaWVlZTgwMjExLmgiCisjaW5jbHVkZSAibGliaXB3LmgiCiAKLXN0YXRpYyBjb25zdCBjaGFyICppZWVlODAyMTFfbW9kZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpsaWJpcHdfbW9kZXNbXSA9IHsKIAkiPyIsICJhIiwgImIiLCAiYWIiLCAiZyIsICJhZyIsICJiZyIsICJhYmciCiB9OwogCkBAIC01NCw5ICs1NCw5IEBACiB9CiAKICNkZWZpbmUgTUFYX0NVU1RPTV9MRU4gNjQKLXN0YXRpYyBjaGFyICppZWVlODAyMTFfdHJhbnNsYXRlX3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCitzdGF0aWMgY2hhciAqbGliaXB3X3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAogCQkJCSAgICAgIGNoYXIgKnN0YXJ0LCBjaGFyICpzdG9wLAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaywKKwkJCQkgICAgICBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmssCiAJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbykKIHsKIAljaGFyIGN1c3RvbVtNQVhfQ1VTVE9NX0xFTl07CkBAIC04NCw3ICs4NCw3IEBACiAJLyogQWRkIHRoZSBwcm90b2NvbCBuYW1lICovCiAJaXdlLmNtZCA9IFNJT0NHSVdOQU1FOwogCXNucHJpbnRmKGl3ZS51Lm5hbWUsIElGTkFNU0laLCAiSUVFRSA4MDIuMTElcyIsCi0JCSBpZWVlODAyMTFfbW9kZXNbbmV0d29yay0+bW9kZV0pOworCQkgbGliaXB3X21vZGVzW25ldHdvcmstPm1vZGVdKTsKIAlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9DSEFSX0xFTik7CiAKIAkvKiBBZGQgbW9kZSAqLwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJLyogQWRkIGNoYW5uZWwgYW5kIGZyZXF1ZW5jeSAqLwogCS8qIE5vdGUgOiB1c2Vyc3BhY2UgYXV0b21hdGljYWxseSBjb21wdXRlcyBjaGFubmVsIHVzaW5nIGl3cmFuZ2UgKi8KIAlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7Ci0JaXdlLnUuZnJlcS5tID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcShpZWVlLCBuZXR3b3JrLT5jaGFubmVsKTsKKwlpd2UudS5mcmVxLm0gPSBsaWJpcHdfY2hhbm5lbF90b19mcmVxKGllZWUsIG5ldHdvcmstPmNoYW5uZWwpOwogCWl3ZS51LmZyZXEuZSA9IDY7CiAJaXdlLnUuZnJlcS5pID0gMDsKIAlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9GUkVRX0xFTik7CkBAIC0xNTUsNyArMTU1LDcgQEAKIAlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX1FVQUxfVVBEQVRFRCB8IElXX1FVQUxfTEVWRUxfVVBEQVRFRCB8CiAJICAgIElXX1FVQUxfTk9JU0VfVVBEQVRFRDsKIAotCWlmICghKG5ldHdvcmstPnN0YXRzLm1hc2sgJiBJRUVFODAyMTFfU1RBVE1BU0tfUlNTSSkpIHsKKwlpZiAoIShuZXR3b3JrLT5zdGF0cy5tYXNrICYgTElCSVBXX1NUQVRNQVNLX1JTU0kpKSB7CiAJCWl3ZS51LnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfSU5WQUxJRCB8CiAJCSAgICBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7CiAJCWl3ZS51LnF1YWwucXVhbCA9IDA7CkBAIC0xODAsMTQgKzE4MCwxNCBAQAogCQkJaXdlLnUucXVhbC5xdWFsID0gMDsKIAl9CiAKLQlpZiAoIShuZXR3b3JrLT5zdGF0cy5tYXNrICYgSUVFRTgwMjExX1NUQVRNQVNLX05PSVNFKSkgeworCWlmICghKG5ldHdvcmstPnN0YXRzLm1hc2sgJiBMSUJJUFdfU1RBVE1BU0tfTk9JU0UpKSB7CiAJCWl3ZS51LnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CiAJCWl3ZS51LnF1YWwubm9pc2UgPSAwOwogCX0gZWxzZSB7CiAJCWl3ZS51LnF1YWwubm9pc2UgPSBuZXR3b3JrLT5zdGF0cy5ub2lzZTsKIAl9CiAKLQlpZiAoIShuZXR3b3JrLT5zdGF0cy5tYXNrICYgSUVFRTgwMjExX1NUQVRNQVNLX1NJR05BTCkpIHsKKwlpZiAoIShuZXR3b3JrLT5zdGF0cy5tYXNrICYgTElCSVBXX1NUQVRNQVNLX1NJR05BTCkpIHsKIAkJaXdlLnUucXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfSU5WQUxJRDsKIAkJaXdlLnUucXVhbC5sZXZlbCA9IDA7CiAJfSBlbHNlIHsKQEAgLTIzNywxNCArMjM3LDE0IEBACiAJcCA9IGN1c3RvbTsKIAlwICs9IHNucHJpbnRmKHAsIE1BWF9DVVNUT01fTEVOIC0gKHAgLSBjdXN0b20pLCAiIENoYW5uZWwgZmxhZ3M6ICIpOwogCi0JaWYgKGllZWU4MDIxMV9nZXRfY2hhbm5lbF9mbGFncyhpZWVlLCBuZXR3b3JrLT5jaGFubmVsKSAmCi0JICAgIElFRUU4MDIxMV9DSF9JTlZBTElEKSB7CisJaWYgKGxpYmlwd19nZXRfY2hhbm5lbF9mbGFncyhpZWVlLCBuZXR3b3JrLT5jaGFubmVsKSAmCisJICAgIExJQklQV19DSF9JTlZBTElEKSB7CiAJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwogCQlwICs9IHNucHJpbnRmKHAsIE1BWF9DVVNUT01fTEVOIC0gKHAgLSBjdXN0b20pLCAiSU5WQUxJRCAiKTsKIAl9CiAKLQlpZiAoaWVlZTgwMjExX2dldF9jaGFubmVsX2ZsYWdzKGllZWUsIG5ldHdvcmstPmNoYW5uZWwpICYKLQkgICAgSUVFRTgwMjExX0NIX1JBREFSX0RFVEVDVCkgeworCWlmIChsaWJpcHdfZ2V0X2NoYW5uZWxfZmxhZ3MoaWVlZSwgbmV0d29yay0+Y2hhbm5lbCkgJgorCSAgICBMSUJJUFdfQ0hfUkFEQVJfREVURUNUKSB7CiAJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwogCQlwICs9IHNucHJpbnRmKHAsIE1BWF9DVVNUT01fTEVOIC0gKHAgLSBjdXN0b20pLCAiREZTICIpOwogCX0KQEAgLTI1OSwxMSArMjU5LDExIEBACiAKICNkZWZpbmUgU0NBTl9JVEVNX1NJWkUgMTI4CiAKLWludCBpZWVlODAyMTFfd3hfZ2V0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCitpbnQgbGliaXB3X3d4X2dldF9zY2FuKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAogCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcms7CisJc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IDA7CiAKQEAgLTI3Miw3ICsyNzIsNyBAQAogCWludCBpID0gMDsKIAlERUNMQVJFX1NTSURfQlVGKHNzaWQpOwogCi0JSUVFRTgwMjExX0RFQlVHX1dYKCJHZXR0aW5nIHNjYW5cbiIpOworCUxJQklQV19ERUJVR19XWCgiR2V0dGluZyBzY2FuXG4iKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAKQEAgLTI4NSwxMCArMjg1LDEwIEBACiAKIAkJaWYgKGllZWUtPnNjYW5fYWdlID09IDAgfHwKIAkJICAgIHRpbWVfYWZ0ZXIobmV0d29yay0+bGFzdF9zY2FubmVkICsgaWVlZS0+c2Nhbl9hZ2UsIGppZmZpZXMpKQotCQkJZXYgPSBpZWVlODAyMTFfdHJhbnNsYXRlX3NjYW4oaWVlZSwgZXYsIHN0b3AsIG5ldHdvcmssCisJCQlldiA9IGxpYmlwd190cmFuc2xhdGVfc2NhbihpZWVlLCBldiwgc3RvcCwgbmV0d29yaywKIAkJCQkJCSAgICAgIGluZm8pOwogCQllbHNlIHsKLQkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJOb3Qgc2hvd2luZyBuZXR3b3JrICclcyAoIgorCQkJTElCSVBXX0RFQlVHX1NDQU4oIk5vdCBzaG93aW5nIG5ldHdvcmsgJyVzICgiCiAJCQkJCSAgICAgIiVwTSknIGR1ZSB0byBhZ2UgKCV1bXMpLlxuIiwKIAkJCQkJICAgICBwcmludF9zc2lkKHNzaWQsIG5ldHdvcmstPnNzaWQsCiAJCQkJCQkJIG5ldHdvcmstPnNzaWRfbGVuKSwKQEAgLTMwMywxOCArMzAzLDE4IEBACiAJd3JxdS0+ZGF0YS5sZW5ndGggPSBldiAtIGV4dHJhOwogCXdycXUtPmRhdGEuZmxhZ3MgPSAwOwogCi0JSUVFRTgwMjExX0RFQlVHX1dYKCJleGl0OiAlZCBuZXR3b3JrcyByZXR1cm5lZC5cbiIsIGkpOworCUxJQklQV19ERUJVR19XWCgiZXhpdDogJWQgbmV0d29ya3MgcmV0dXJuZWQuXG4iLCBpKTsKIAogCXJldHVybiBlcnI7CiB9CiAKLWludCBpZWVlODAyMTFfd3hfc2V0X2VuY29kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKK2ludCBsaWJpcHdfd3hfc2V0X2VuY29kZShzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleWJ1ZikKIHsKIAlzdHJ1Y3QgaXdfcG9pbnQgKmVycSA9ICYod3JxdS0+ZW5jb2RpbmcpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWMgPSB7CisJc3RydWN0IGxpYmlwd19zZWN1cml0eSBzZWMgPSB7CiAJCS5mbGFncyA9IDAKIAl9OwogCWludCBpLCBrZXksIGtleV9wcm92aWRlZCwgbGVuOwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJaW50IGhvc3RfY3J5cHRvID0gaWVlZS0+aG9zdF9lbmNyeXB0IHx8IGllZWUtPmhvc3RfZGVjcnlwdCB8fCBpZWVlLT5ob3N0X2J1aWxkX2l2OwogCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7CiAKLQlJRUVFODAyMTFfREVCVUdfV1goIlNFVF9FTkNPREVcbiIpOworCUxJQklQV19ERUJVR19XWCgiU0VUX0VOQ09ERVxuIik7CiAKIAlrZXkgPSBlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwogCWlmIChrZXkpIHsKQEAgLTMzNSwxOCArMzM1LDE4IEBACiAJCWtleSA9IGllZWUtPmNyeXB0X2luZm8udHhfa2V5aWR4OwogCX0KIAotCUlFRUU4MDIxMV9ERUJVR19XWCgiS2V5OiAlZCBbJXNdXG4iLCBrZXksIGtleV9wcm92aWRlZCA/CisJTElCSVBXX0RFQlVHX1dYKCJLZXk6ICVkIFslc11cbiIsIGtleSwga2V5X3Byb3ZpZGVkID8KIAkJCSAgICJwcm92aWRlZCIgOiAiZGVmYXVsdCIpOwogCiAJY3J5cHQgPSAmaWVlZS0+Y3J5cHRfaW5mby5jcnlwdFtrZXldOwogCiAJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpIHsKIAkJaWYgKGtleV9wcm92aWRlZCAmJiAqY3J5cHQpIHsKLQkJCUlFRUU4MDIxMV9ERUJVR19XWCgiRGlzYWJsaW5nIGVuY3J5cHRpb24gb24ga2V5ICVkLlxuIiwKKwkJCUxJQklQV19ERUJVR19XWCgiRGlzYWJsaW5nIGVuY3J5cHRpb24gb24ga2V5ICVkLlxuIiwKIAkJCQkJICAga2V5KTsKIAkJCWxpYjgwMjExX2NyeXB0X2RlbGF5ZWRfZGVpbml0KCZpZWVlLT5jcnlwdF9pbmZvLCBjcnlwdCk7CiAJCX0gZWxzZQotCQkJSUVFRTgwMjExX0RFQlVHX1dYKCJEaXNhYmxpbmcgZW5jcnlwdGlvbi5cbiIpOworCQkJTElCSVBXX0RFQlVHX1dYKCJEaXNhYmxpbmcgZW5jcnlwdGlvbi5cbiIpOwogCiAJCS8qIENoZWNrIGFsbCB0aGUga2V5cyB0byBzZWUgaWYgYW55IGFyZSBzdGlsbCBjb25maWd1cmVkLAogCQkgKiBhbmQgaWYgbm8ga2V5IGluZGV4IHdhcyBwcm92aWRlZCwgZGUtaW5pdCB0aGVtIGFsbCAqLwpAQCAtNDEwLDcgKzQxMCw3IEBACiAKIAkvKiBJZiBhIG5ldyBrZXkgd2FzIHByb3ZpZGVkLCBzZXQgaXQgdXAgKi8KIAlpZiAoZXJxLT5sZW5ndGggPiAwKSB7Ci0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAkJREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKICNlbmRpZgogCkBAIC00MTksNyArNDE5LDcgQEAKIAkJaWYgKGxlbiA+IGVycS0+bGVuZ3RoKQogCQkJbWVtc2V0KHNlYy5rZXlzW2tleV0gKyBlcnEtPmxlbmd0aCwgMCwKIAkJCSAgICAgICBsZW4gLSBlcnEtPmxlbmd0aCk7Ci0JCUlFRUU4MDIxMV9ERUJVR19XWCgiU2V0dGluZyBrZXkgJWQgdG8gJyVzJyAoJWQ6JWQgYnl0ZXMpXG4iLAorCQlMSUJJUFdfREVCVUdfV1goIlNldHRpbmcga2V5ICVkIHRvICclcycgKCVkOiVkIGJ5dGVzKVxuIiwKIAkJCQkgICBrZXksIHByaW50X3NzaWQoc3NpZCwgc2VjLmtleXNba2V5XSwgbGVuKSwKIAkJCQkgICBlcnEtPmxlbmd0aCwgbGVuKTsKIAkJc2VjLmtleV9zaXplc1trZXldID0gbGVuOwpAQCAtNDM4LDcgKzQzOCw3IEBACiAJCQkJCQkgICAgIE5VTEwsICgqY3J5cHQpLT5wcml2KTsKIAkJCWlmIChsZW4gPT0gMCkgewogCQkJCS8qIFNldCBhIGRlZmF1bHQga2V5IG9mIGFsbCAwICovCi0JCQkJSUVFRTgwMjExX0RFQlVHX1dYKCJTZXR0aW5nIGtleSAlZCB0byBhbGwgIgorCQkJCUxJQklQV19ERUJVR19XWCgiU2V0dGluZyBrZXkgJWQgdG8gYWxsICIKIAkJCQkJCSAgICJ6ZXJvLlxuIiwga2V5KTsKIAkJCQltZW1zZXQoc2VjLmtleXNba2V5XSwgMCwgMTMpOwogCQkJCSgqY3J5cHQpLT5vcHMtPnNldF9rZXkoc2VjLmtleXNba2V5XSwgMTMsIE5VTEwsCkBAIC00NDksNyArNDQ5LDcgQEAKIAkJfQogCQkvKiBObyBrZXkgZGF0YSAtIGp1c3Qgc2V0IHRoZSBkZWZhdWx0IFRYIGtleSBpbmRleCAqLwogCQlpZiAoa2V5X3Byb3ZpZGVkKSB7Ci0JCQlJRUVFODAyMTFfREVCVUdfV1goIlNldHRpbmcga2V5ICVkIHRvIGRlZmF1bHQgVHggIgorCQkJTElCSVBXX0RFQlVHX1dYKCJTZXR0aW5nIGtleSAlZCB0byBkZWZhdWx0IFR4ICIKIAkJCQkJICAgImtleS5cbiIsIGtleSk7CiAJCQlpZWVlLT5jcnlwdF9pbmZvLnR4X2tleWlkeCA9IGtleTsKIAkJCXNlYy5hY3RpdmVfa2V5ID0ga2V5OwpAQCAtNDYxLDcgKzQ2MSw3IEBACiAJCXNlYy5hdXRoX21vZGUgPSBpZWVlLT5vcGVuX3dlcCA/IFdMQU5fQVVUSF9PUEVOIDoKIAkJICAgIFdMQU5fQVVUSF9TSEFSRURfS0VZOwogCQlzZWMuZmxhZ3MgfD0gU0VDX0FVVEhfTU9ERTsKLQkJSUVFRTgwMjExX0RFQlVHX1dYKCJBdXRoOiAlc1xuIiwKKwkJTElCSVBXX0RFQlVHX1dYKCJBdXRoOiAlc1xuIiwKIAkJCQkgICBzZWMuYXV0aF9tb2RlID09IFdMQU5fQVVUSF9PUEVOID8KIAkJCQkgICAiT1BFTiIgOiAiU0hBUkVEIEtFWSIpOwogCX0KQEAgLTQ5MCwxNiArNDkwLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpZWVlODAyMTFfd3hfZ2V0X2VuY29kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKK2ludCBsaWJpcHdfd3hfZ2V0X2VuY29kZShzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleWJ1ZikKIHsKIAlzdHJ1Y3QgaXdfcG9pbnQgKmVycSA9ICYod3JxdS0+ZW5jb2RpbmcpOwogCWludCBsZW4sIGtleTsKIAlzdHJ1Y3QgbGliODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSAqc2VjID0gJmllZWUtPnNlYzsKKwlzdHJ1Y3QgbGliaXB3X3NlY3VyaXR5ICpzZWMgPSAmaWVlZS0+c2VjOwogCi0JSUVFRTgwMjExX0RFQlVHX1dYKCJHRVRfRU5DT0RFXG4iKTsKKwlMSUJJUFdfREVCVUdfV1goIkdFVF9FTkNPREVcbiIpOwogCiAJa2V5ID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKIAlpZiAoa2V5KSB7CkBAIC01MzIsNyArNTMyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGllZWU4MDIxMV93eF9zZXRfZW5jb2RlZXh0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAoraW50IGxpYmlwd193eF9zZXRfZW5jb2RlZXh0KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CkBAIC01NDUsNyArNTQ1LDcgQEAKIAlzdHJ1Y3QgbGliODAyMTFfY3J5cHRvX29wcyAqb3BzOwogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICoqY3J5cHQ7CiAKLQlzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHNlYyA9IHsKKwlzdHJ1Y3QgbGliaXB3X3NlY3VyaXR5IHNlYyA9IHsKIAkJLmZsYWdzID0gMCwKIAl9OwogCkBAIC02MTEsNyArNjExLDcgQEAKIAkJbW9kdWxlID0gImxpYjgwMjExX2NyeXB0X2NjbXAiOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCisJCUxJQklQV19ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKIAkJCQkgICBkZXYtPm5hbWUsIGV4dC0+YWxnKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwpAQCAtNjIzLDcgKzYyMyw3IEBACiAJCW9wcyA9IGxpYjgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7CiAJfQogCWlmIChvcHMgPT0gTlVMTCkgewotCQlJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCisJCUxJQklQV19ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKIAkJCQkgICBkZXYtPm5hbWUsIGV4dC0+YWxnKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwpAQCAtNjUzLDcgKzY1Myw3IEBACiAJaWYgKGV4dC0+a2V5X2xlbiA+IDAgJiYgKCpjcnlwdCktPm9wcy0+c2V0X2tleSAmJgogCSAgICAoKmNyeXB0KS0+b3BzLT5zZXRfa2V5KGV4dC0+a2V5LCBleHQtPmtleV9sZW4sIGV4dC0+cnhfc2VxLAogCQkJCSAgICgqY3J5cHQpLT5wcml2KSA8IDApIHsKLQkJSUVFRTgwMjExX0RFQlVHX1dYKCIlczoga2V5IHNldHRpbmcgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQlMSUJJUFdfREVCVUdfV1goIiVzOiBrZXkgc2V0dGluZyBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC03MDAsMjAgKzcwMCwyMCBAQAogCWlmIChpZWVlLT5yZXNldF9vbl9rZXljaGFuZ2UgJiYKIAkgICAgaWVlZS0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBICYmCiAJICAgIGllZWUtPnJlc2V0X3BvcnQgJiYgaWVlZS0+cmVzZXRfcG9ydChkZXYpKSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHJlc2V0X3BvcnQgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQlMSUJJUFdfREVCVUdfV1goIiVzOiByZXNldF9wb3J0IGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGllZWU4MDIxMV93eF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAoraW50IGxpYmlwd193eF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSAqc2VjID0gJmllZWUtPnNlYzsKKwlzdHJ1Y3QgbGliaXB3X3NlY3VyaXR5ICpzZWMgPSAmaWVlZS0+c2VjOwogCWludCBpZHgsIG1heF9rZXlfbGVuOwogCiAJbWF4X2tleV9sZW4gPSBlbmNvZGluZy0+bGVuZ3RoIC0gc2l6ZW9mKCpleHQpOwpAQCAtNzYzLDkgKzc2Myw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9lbmNvZGVleHQpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X2VuY29kZWV4dCk7CitFWFBPUlRfU1lNQk9MKGxpYmlwd193eF9zZXRfZW5jb2RlZXh0KTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X3d4X2dldF9lbmNvZGVleHQpOwogCi1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfc2Nhbik7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfZW5jb2RlKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9lbmNvZGUpOworRVhQT1JUX1NZTUJPTChsaWJpcHdfd3hfZ2V0X3NjYW4pOworRVhQT1JUX1NZTUJPTChsaWJpcHdfd3hfc2V0X2VuY29kZSk7CitFWFBPUlRfU1lNQk9MKGxpYmlwd193eF9nZXRfZW5jb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZwppbmRleCBlMDkyYWYwLi45OTMxMGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCkBAIC05LDYgKzksOSBAQAogY29uZmlnIElXTFdJRklfTEVEUwogCWJvb2wgIkVuYWJsZSBMRUQgc3VwcG9ydCBpbiBpd2xhZ24gYW5kIGl3bDM5NDUgZHJpdmVycyIKIAlkZXBlbmRzIG9uIElXTFdJRkkKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCBMRUQgc3VwcG9ydC4KIAogY29uZmlnIElXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKIAlib29sICJFbmFibGUgU3BlY3RydW0gTWVhc3VyZW1lbnQgaW4gaXdsYWduIGRyaXZlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYwppbmRleCA3ZGE1MmYxLi5hOTVjYWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSAiaXdsLTUwMDAtaHcuaCIKIAogLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgSVdMMTAwMF9VQ09ERV9BUElfTUFYIDIKKyNkZWZpbmUgSVdMMTAwMF9VQ09ERV9BUElfTUFYIDMKIAogLyogTG93ZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwogI2RlZmluZSBJV0wxMDAwX1VDT0RFX0FQSV9NSU4gMQpAQCAtNTUsMTkgKzU1LDEwOSBAQAogI2RlZmluZSBfSVdMMTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0wxMDAwX0ZXX1BSRSAjYXBpICIudWNvZGUiCiAjZGVmaW5lIElXTDEwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDEwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKIAorCisvKgorICogRm9yIDEwMDAsIHVzZSBhZHZhbmNlIHRoZXJtYWwgdGhyb3R0bGluZyBjcml0aWNhbCB0ZW1wZXJhdHVyZSB0aHJlc2hvbGQsCisgKiBidXQgbGVnYWN5IHRoZXJtYWwgbWFuYWdlbWVudCBpbXBsZW1lbnRhdGlvbiBmb3Igbm93LgorICogVGhpcyBpcyBmb3IgdGhlIHJlYXNvbiBvZiAxMDAwIHVDb2RlIHVzaW5nIGFkdmFuY2UgdGhlcm1hbCB0aHJvdHRsaW5nIEFQSQorICogYnV0IG5vdCBpbXBsZW1lbnQgY3Rfa2lsbF9leGl0IGJhc2VkIG9uIGN0X2tpbGwgZXhpdCB0ZW1wZXJhdHVyZQorICogc28gdGhlIHRoZXJtYWwgdGhyb3R0bGluZyB3aWxsIHN0aWxsIGJhc2VkIG9uIGxlZ2FjeSB0aGVybWFsIHRocm90dGxpbmcKKyAqIG1hbmFnZW1lbnQuCisgKiBUaGUgY29kZSBoZXJlIG5lZWQgdG8gYmUgbW9kaWZpZWQgb25jZSAxMDAwIHVDb2RlIGhhcyB0aGUgYWR2YW5jZWQgdGhlcm1hbAorICogdGhyb3R0bGluZyBhbGdvcml0aG0gaW4gcGxhY2UKKyAqLworc3RhdGljIHZvaWQgaXdsMTAwMF9zZXRfY3RfdGhyZXNob2xkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwkvKiB3YW50IENlbHNpdXMgKi8KKwlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDVF9LSUxMX1RIUkVTSE9MRF9MRUdBQ1k7CisJcHJpdi0+aHdfcGFyYW1zLmN0X2tpbGxfZXhpdF90aHJlc2hvbGQgPSBDVF9LSUxMX0VYSVRfVEhSRVNIT0xEOworfQorCisvKiBOSUMgY29uZmlndXJhdGlvbiBmb3IgMTAwMCBzZXJpZXMgKi8KK3N0YXRpYyB2b2lkIGl3bDEwMDBfbmljX2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaXdsNTAwMF9uaWNfY29uZmlnKHByaXYpOworCisJLyogU2V0dGluZyBkaWdpdGFsIFNWUiBmb3IgMTAwMCBjYXJkIHRvIDEuMzJWICovCisJLyogbG9ja2luZyBpcyBhY3F1aXJlZCBpbiBpd2xfc2V0X2JpdHNfbWFza19wcnBoKCkgZnVuY3Rpb24gKi8KKwlpd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIEFQTUdfRElHSVRBTF9TVlJfUkVHLAorCQkJCUFQTUdfU1ZSX0RJR0lUQUxfVk9MVEFHRV8xXzMyLAorCQkJCX5BUE1HX1NWUl9WT0xUQUdFX0NPTkZJR19CSVRfTVNLKTsKK30KKworc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2wxMDAwX2xpYiA9IHsKKwkuc2V0X2h3X3BhcmFtcyA9IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcywKKwkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAorCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAorCS50eHFfc2V0X3NjaGVkID0gaXdsNTAwMF90eHFfc2V0X3NjaGVkLAorCS50eHFfYWdnX2VuYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19lbmFibGUsCisJLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19kaXNhYmxlLAorCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAorCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAorCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAorCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsNTAwMF9yeF9oYW5kbGVyX3NldHVwLAorCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsNTAwMF9zZXR1cF9kZWZlcnJlZF93b3JrLAorCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyLAorCS5sb2FkX3Vjb2RlID0gaXdsNTAwMF9sb2FkX3Vjb2RlLAorCS5pbml0X2FsaXZlX3N0YXJ0ID0gaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0LAorCS5hbGl2ZV9ub3RpZnkgPSBpd2w1MDAwX2FsaXZlX25vdGlmeSwKKwkuc2VuZF90eF9wb3dlciA9IGl3bDUwMDBfc2VuZF90eF9wb3dlciwKKwkudXBkYXRlX2NoYWluX2ZsYWdzID0gaXdsX3VwZGF0ZV9jaGFpbl9mbGFncywKKwkuYXBtX29wcyA9IHsKKwkJLmluaXQgPQlpd2w1MDAwX2FwbV9pbml0LAorCQkucmVzZXQgPSBpd2w1MDAwX2FwbV9yZXNldCwKKwkJLnN0b3AgPSBpd2w1MDAwX2FwbV9zdG9wLAorCQkuY29uZmlnID0gaXdsMTAwMF9uaWNfY29uZmlnLAorCQkuc2V0X3B3cl9zcmMgPSBpd2xfc2V0X3B3cl9zcmMsCisJfSwKKwkuZWVwcm9tX29wcyA9IHsKKwkJLnJlZ3VsYXRvcnlfYmFuZHMgPSB7CisJCQlFRVBST01fNTAwMF9SRUdfQkFORF8xX0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfMl9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzNfQ0hBTk5FTFMsCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF80X0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNV9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzI0X0hUNDBfQ0hBTk5FTFMsCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF81Ml9IVDQwX0NIQU5ORUxTCisJCX0sCisJCS52ZXJpZnlfc2lnbmF0dXJlICA9IGl3bGNvcmVfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUsCisJCS5hY3F1aXJlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlLAorCQkucmVsZWFzZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZSwKKwkJLmNhbGliX3ZlcnNpb24JPSBpd2w1MDAwX2VlcHJvbV9jYWxpYl92ZXJzaW9uLAorCQkucXVlcnlfYWRkciA9IGl3bDUwMDBfZWVwcm9tX3F1ZXJ5X2FkZHIsCisJfSwKKwkucG9zdF9hc3NvY2lhdGUgPSBpd2xfcG9zdF9hc3NvY2lhdGUsCisJLmlzciA9IGl3bF9pc3JfaWN0LAorCS5jb25maWdfYXAgPSBpd2xfY29uZmlnX2FwLAorCS50ZW1wX29wcyA9IHsKKwkJLnRlbXBlcmF0dXJlID0gaXdsNTAwMF90ZW1wZXJhdHVyZSwKKwkJLnNldF9jdF9raWxsID0gaXdsMTAwMF9zZXRfY3RfdGhyZXNob2xkLAorCSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDEwMDBfb3BzID0geworCS51Y29kZSA9ICZpd2w1MDAwX3Vjb2RlLAorCS5saWIgPSAmaXdsMTAwMF9saWIsCisJLmhjbWQgPSAmaXdsNTAwMF9oY21kLAorCS51dGlscyA9ICZpd2w1MDAwX2hjbWRfdXRpbHMsCit9OworCiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2Jnbl9jZmcgPSB7CiAJLm5hbWUgPSAiMTAwMCBTZXJpZXMgQkdOIiwKIAkuZndfbmFtZV9wcmUgPSBJV0wxMDAwX0ZXX1BSRSwKIAkudWNvZGVfYXBpX21heCA9IElXTDEwMDBfVUNPREVfQVBJX01BWCwKIAkudWNvZGVfYXBpX21pbiA9IElXTDEwMDBfVUNPREVfQVBJX01JTiwKIAkuc2t1ID0gSVdMX1NLVV9HfElXTF9TS1VfTiwKLQkub3BzID0gJml3bDUwMDBfb3BzLAotCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkub3BzID0gJml3bDEwMDBfb3BzLAorCS5lZXByb21fc2l6ZSA9IE9UUF9MT1dfSU1BR0VfU0laRSwKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDAwX0VFUFJPTV9WRVJTSU9OLAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTiwKIAkubW9kX3BhcmFtcyA9ICZpd2w1MF9tb2RfcGFyYW1zLAogCS52YWxpZF90eF9hbnQgPSBBTlRfQSwKIAkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAogCS5uZWVkX3BsbF9jZmcgPSB0cnVlLAorCS5tYXhfbGxfaXRlbXMgPSBPVFBfTUFYX0xMX0lURU1TXzEwMDAsCisJLnNoYWRvd19yYW1fc3VwcG9ydCA9IGZhbHNlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oCmluZGV4IDczZjkzYTAuLjE2NzcyNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmgKQEAgLTE3Niw3ICsxNzYsNyBAQAogICogaW4gRUVQUk9NIGNvbnRhaW5pbmcgRUVQUk9NX0NIQU5ORUxfKiB1c2FnZSBmbGFncyAoTFNCKSBhbmQgbWF4IHJlZ3VsYXRvcnkKICAqIHR4cG93ZXIgKE1TQikuCiAgKgotICogRW50cmllcyBpbW1lZGlhdGVseSBiZWxvdyBhcmUgZm9yIDIwIE1IeiBjaGFubmVsIHdpZHRoLiAgRkFUICg0MCBNSHopCisgKiBFbnRyaWVzIGltbWVkaWF0ZWx5IGJlbG93IGFyZSBmb3IgMjAgTUh6IGNoYW5uZWwgd2lkdGguICBIVDQwICg0MCBNSHopCiAgKiBjaGFubmVscyAob25seSBmb3IgNDk2NSwgbm90IHN1cHBvcnRlZCBieSAzOTQ1KSBhcHBlYXIgbGF0ZXIgaW4gdGhlIEVFUFJPTS4KICAqCiAgKiAyLjQgR0h6IGNoYW5uZWxzIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNApAQCAtMjMyLDkgKzIzMiw4IEBACiAjZGVmaW5lIFBDSV9DRkdfUkVWX0lEX0JJVF9CQVNJQ19TS1UgICAgICAgICAgICAgICAgKDB4NDApCS8qIGJpdCA2ICAgICovCiAjZGVmaW5lIFBDSV9DRkdfUkVWX0lEX0JJVF9SVFAgICAgICAgICAgICAgICAgICAgICAgKDB4ODApCS8qIGJpdCA3ICAgICovCiAKLSNkZWZpbmUgVEZEX1FVRVVFX01JTiAgICAgICAgICAgMAotI2RlZmluZSBURkRfUVVFVUVfTUFYICAgICAgICAgICA1CS8qIDQgREFUQSArIDEgQ01EICovCi0KKy8qIDQgREFUQSArIDEgQ01ELiBUaGVyZSBhcmUgMiBIQ0NBIHF1ZXVlcyB0aGF0IGFyZSBub3QgdXNlZC4gKi8KKyNkZWZpbmUgSVdMMzlfTlVNX1FVRVVFUyAgICAgICAgNQogI2RlZmluZSBJV0xfTlVNX1NDQU5fUkFURVMgICAgICAgICAoMikKIAogI2RlZmluZSBJV0xfREVGQVVMVF9UWF9SRVRSWSAgMTUKQEAgLTI4MCw4ICsyNzksNiBAQAogLyogU2l6ZSBvZiB1Q29kZSBpbnN0cnVjdGlvbiBtZW1vcnkgaW4gYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUgKi8KICNkZWZpbmUgSVdMMzlfTUFYX0JTTV9TSVpFIElXTDM5X1JUQ19JTlNUX1NJWkUKIAotI2RlZmluZSBJV0wzOV9NQVhfTlVNX1FVRVVFUwk4Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaHdfdmFsaWRfcnRjX2RhdGFfYWRkcih1MzIgYWRkcikKIHsKIAlyZXR1cm4gKGFkZHIgPj0gSVdMMzlfUlRDX0RBVEFfTE9XRVJfQk9VTkQpICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuYwppbmRleCAyMjVlNWY4Li44YzI5ZGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMKQEAgLTc5LDExICs3OSwxMCBAQAogI2RlZmluZSBJV0xfTUFYX0JMSU5LX1RCTCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkgLypFeGNsdWRlIFNvbGlkIG9uKi8KICNkZWZpbmUgSVdMX1NPTElEX0JMSU5LX0lEWCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkKIAotc3RhdGljIGludCBpd2wzOTQ1X2xlZF9jbWRfY2FsbGJhY2soc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLAotCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgaXdsMzk0NV9sZWRfY21kX2NhbGxiYWNrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kLAorCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9icmlnaHRuZXNzX3RvX2lkeChlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCkBAIC05OSw4ICs5OCw4IEBACiAJCS5pZCA9IFJFUExZX0xFRFNfQ01ELAogCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfbGVkX2NtZCksCiAJCS5kYXRhID0gbGVkX2NtZCwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfQVNZTkMsCi0JCS5tZXRhLnUuY2FsbGJhY2sgPSBpd2wzOTQ1X2xlZF9jbWRfY2FsbGJhY2ssCisJCS5mbGFncyA9IENNRF9BU1lOQywKKwkJLmNhbGxiYWNrID0gaXdsMzk0NV9sZWRfY21kX2NhbGxiYWNrLAogCX07CiAKIAlyZXR1cm4gaXdsX3NlbmRfY21kKHByaXYsICZjbWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCmluZGV4IDVlYjUzOGQuLmExNmJkNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKQEAgLTY3MywzMyArNjczLDE3IEBACiAJczggc2NhbGVfYWN0aW9uID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JdTE2IGZjOwotCXUxNiByYXRlX21hc2sgPSAwOworCXUxNiByYXRlX21hc2sgPSBzdGEgPyBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdIDogMDsKIAlzOCBtYXhfcmF0ZV9pZHggPSAtMTsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAogCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAoc3RhKQotCQlyYXRlX21hc2sgPSBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdOwotCi0JLyogU2VuZCBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgTk9fQUNLIGRhdGEgdXNpbmcgbG93ZXN0IHJhdGUuICovCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfHwKLQkgICAgaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSyB8fAotCSAgICAhc3RhIHx8ICFwcml2X3N0YSkgewotCQlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmU6IE5vIFNUQSBwcml2IGRhdGEgdG8gdXBkYXRlIVxuIik7Ci0JCWlmICghcmF0ZV9tYXNrKQotCQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPQotCQkJCQlyYXRlX2xvd2VzdF9pbmRleChzYmFuZCwgTlVMTCk7Ci0JCWVsc2UKLQkJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0KLQkJCQkJcmF0ZV9sb3dlc3RfaW5kZXgoc2JhbmQsIHN0YSk7Ci0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQotCQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3VudCA9IDE7CisJaWYgKHJhdGVfY29udHJvbF9zZW5kX2xvdyhzdGEsIHByaXZfc3RhLCB0eHJjKSkKIAkJcmV0dXJuOwotCX0KKworCXJhdGVfbWFzayA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF07CiAKIAkvKiBnZXQgdXNlciBtYXggcmF0ZSBpZiBzZXQgKi8KIAltYXhfcmF0ZV9pZHggPSB0eHJjLT5tYXhfcmF0ZV9pZHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKaW5kZXggNDYyODhlNy4uZTlhNjg1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwpAQCAtMzQ5LDEyICszNDksMTMgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit2b2lkIGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwogCUlXTF9ERUJVR19SWChwcml2LCAiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIHZzICVkKS5cbiIsCiAJCSAgICAgKGludClzaXplb2Yoc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyksCi0JCSAgICAgbGUzMl90b19jcHUocGt0LT5sZW4pKTsKKwkJICAgICBsZTMyX3RvX2NwdShwa3QtPmxlbl9uX2ZsYWdzKSAmIEZIX1JTQ1NSX0ZSQU1FX1NJWkVfTVNLKTsKIAogCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljc18zOSwgcGt0LT51LnJhdywgc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3NfMzkpKTsKIApAQCAtNTA5LDcgKzUxMCw3IEBACiAJCSAgICAgIHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsIGludCBncm91cDEwMCkKIHsKLQlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfUlgpCisJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiBJV0xfRExfUlgpCiAJCV9pd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUocHJpdiwgcGt0LCBoZWFkZXIsIGdyb3VwMTAwKTsKIH0KIApAQCAtNTQ0LDkgKzU0NSw3IEBACiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKQogewogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRURTCiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKUlXTF9SWF9EQVRBKHBrdCk7Ci0jZW5kaWYKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgKnJ4X2hkciA9IElXTF9SWF9IRFIocGt0KTsKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgKnJ4X2VuZCA9IElXTF9SWF9FTkQocGt0KTsKIAlzaG9ydCBsZW4gPSBsZTE2X3RvX2NwdShyeF9oZHItPmxlbik7CkBAIC01NzcsNyArNTc2LDEwIEBACiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCXByaXYtPnJ4dHhwYWNrZXRzICs9IGxlbjsKICNlbmRpZgotCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCByeGItPnNrYiwgc3RhdHMpOworCWl3bF91cGRhdGVfc3RhdHMocHJpdiwgZmFsc2UsIGhkci0+ZnJhbWVfY29udHJvbCwgbGVuKTsKKworCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IocnhiLT5za2IpLCBzdGF0cywgc2l6ZW9mKCpzdGF0cykpOworCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCByeGItPnNrYik7CiAJcnhiLT5za2IgPSBOVUxMOwogfQogCkBAIC02NzgsNiArNjgwLDcgQEAKIAogCS8qIFNldCAiMSIgdG8gcmVwb3J0IGdvb2QgZGF0YSBmcmFtZXMgaW4gZ3JvdXBzIG9mIDEwMCAqLwogCWl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShwcml2LCBwa3QsIGhlYWRlciwgMSk7CisJaXdsX2RiZ19sb2dfcnhfZGF0YV9mcmFtZShwcml2LCBsZTE2X3RvX2NwdShyeF9oZHItPmxlbiksIGhlYWRlcik7CiAKIAlpZiAobmV0d29ya19wYWNrZXQpIHsKIAkJcHJpdi0+bGFzdF9iZWFjb25fdGltZSA9IGxlMzJfdG9fY3B1KHJ4X2VuZC0+YmVhY29uX3RpbWVzdGFtcCk7CkBAIC03NDgsOCArNzUxLDggQEAKIAkvKiBVbm1hcCB0eF9jbWQgKi8KIAlpZiAoY291bnRlcikKIAkJcGNpX3VubWFwX3NpbmdsZShkZXYsCi0JCQkJcGNpX3VubWFwX2FkZHIoJnR4cS0+Y21kW2luZGV4XS0+bWV0YSwgbWFwcGluZyksCi0JCQkJcGNpX3VubWFwX2xlbigmdHhxLT5jbWRbaW5kZXhdLT5tZXRhLCBsZW4pLAorCQkJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPm1ldGFbaW5kZXhdLCBtYXBwaW5nKSwKKwkJCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPm1ldGFbaW5kZXhdLCBsZW4pLAogCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJLyogdW5tYXAgY2h1bmtzIGlmIGFueSAqLwpAQCAtNzczLDkgKzc3NiwxMSBAQAogICogaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZSAtIEFkZCByYXRlIHBvcnRpb24gdG8gVFhfQ01EOgogICoKICovCi12b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2NtZCAqY21kLAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgaW50IHN0YV9pZCwgaW50IHR4X2lkKQordm9pZCBpd2wzOTQ1X2h3X2J1aWxkX3R4X2NtZF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgIHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKKwkJCQkgIGludCBzdGFfaWQsIGludCB0eF9pZCkKIHsKIAl1MTYgaHdfdmFsdWUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUocHJpdi0+aHcsIGluZm8pLT5od192YWx1ZTsKIAl1MTYgcmF0ZV9pbmRleCA9IG1pbihod192YWx1ZSAmIDB4ZmZmZiwgSVdMX1JBVEVfQ09VTlQgLSAxKTsKQEAgLTk2Miw3ICs5NjcsNyBAQAogCQlnb3RvIGVycm9yOwogCiAJLyogVHggcXVldWUocykgKi8KLQlmb3IgKHR4cV9pZCA9IDA7IHR4cV9pZCA8PSBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IHR4cV9pZCsrKSB7CisJZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IHR4cV9pZCsrKSB7CiAJCXNsb3RzX251bSA9ICh0eHFfaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pID8KIAkJCQlURkRfQ01EX1NMT1RTIDogVEZEX1RYX0NNRF9TTE9UUzsKIAkJcmMgPSBpd2xfdHhfcXVldWVfaW5pdChwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHNsb3RzX251bSwKQEAgLTExMzksNyArMTE0NCw3IEBACiAJaW50IHR4cV9pZDsKIAogCS8qIFR4IHF1ZXVlcyAqLwotCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDw9IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspCisJZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IHR4cV9pZCsrKQogCQlpZiAodHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKQogCQkJaXdsX2NtZF9xdWV1ZV9mcmVlKHByaXYpOwogCQllbHNlCkBAIC0xMTU1LDcgKzExNjAsNyBAQAogCWl3bF93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfTU9ERV9SRUcsIDApOwogCiAJLyogcmVzZXQgVEZEIHF1ZXVlcyAqLwotCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDw9IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspIHsKKwlmb3IgKHR4cV9pZCA9IDA7IHR4cV9pZCA8IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspIHsKIAkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfVENTUl9DT05GSUcodHhxX2lkKSwgMHgwKTsKIAkJaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBGSDM5X1RTU1JfVFhfU1RBVFVTLAogCQkJCUZIMzlfVFNTUl9UWF9TVEFUVVNfUkVHX01TS19DSE5MX0lETEUodHhxX2lkKSwKQEAgLTE4NTcsNyArMTg2Miw3IEBACiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1JYT05fQVNTT0MsCiAJCS5sZW4gPSBzaXplb2Yocnhvbl9hc3NvYyksCi0JCS5tZXRhLmZsYWdzID0gQ01EX1dBTlRfU0tCLAorCQkuZmxhZ3MgPSBDTURfV0FOVF9TS0IsCiAJCS5kYXRhID0gJnJ4b25fYXNzb2MsCiAJfTsKIAljb25zdCBzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uMSA9ICZwcml2LT5zdGFnaW5nX3J4b247CkBAIC0xODgxLDE0ICsxODg2LDE0IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKKwlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQucmVwbHlfc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewogCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhPTl9BU1NPQyBjb21tYW5kXG4iKTsKIAkJcmMgPSAtRUlPOwogCX0KIAogCXByaXYtPmFsbG9jX3J4Yl9za2ItLTsKLQlkZXZfa2ZyZWVfc2tiX2FueShjbWQubWV0YS51LnNrYik7CisJZGV2X2tmcmVlX3NrYl9hbnkoY21kLnJlcGx5X3NrYik7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0xOTg2LDcgKzE5OTEsNyBAQAogCXN0YWdpbmdfcnhvbi0+cmVzZXJ2ZWQ0ID0gMDsKIAlzdGFnaW5nX3J4b24tPnJlc2VydmVkNSA9IDA7CiAKLQlpd2xfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgIXByaXYtPmh3X3BhcmFtcy5zd19jcnlwdG8pOworCWl3bF9zZXRfcnhvbl9od2NyeXB0byhwcml2LCAhaXdsMzk0NV9tb2RfcGFyYW1zLnN3X2NyeXB0byk7CiAKIAkvKiBBcHBseSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gKi8KIAlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKQEAgLTI1NTEsNyArMjU1Niw3IEBACiAJfQogCiAJLyogQXNzaWduIG51bWJlciBvZiBVc2FibGUgVFggcXVldWVzICovCi0JcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtID0gVEZEX1FVRVVFX01BWDsKKwlwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0gPSBJV0wzOV9OVU1fUVVFVUVTOwogCiAJcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3RmZCk7CiAJcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplID0gSVdMX1JYX0JVRl9TSVpFXzNLOwpAQCAtMjU2Miw2ICsyNTY3LDcgQEAKIAlwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkID0gSVdMMzk0NV9CUk9BRENBU1RfSUQ7CiAKIAlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSDM5X1JTQ1NSX0NITkwwX1dQVFI7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9iZWFjb25faXRydmwgPSBJV0wzOV9NQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNzg0LDExICsyNzkwLDUwIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgSVdMMzk0NV9VQ09ERV9HRVQoaXRlbSkJCQkJCQlcCitzdGF0aWMgdTMyIGl3bDM5NDVfdWNvZGVfZ2V0XyMjaXRlbShjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqdWNvZGUsXAorCQkJCSAgICB1MzIgYXBpX3ZlcikJCQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBsZTMyX3RvX2NwdSh1Y29kZS0+dS52MS5pdGVtKTsJCQkJXAorfQorCitzdGF0aWMgdTMyIGl3bDM5NDVfdWNvZGVfZ2V0X2hlYWRlcl9zaXplKHUzMiBhcGlfdmVyKQoreworCXJldHVybiBVQ09ERV9IRUFERVJfU0laRSgxKTsKK30KK3N0YXRpYyB1MzIgaXdsMzk0NV91Y29kZV9nZXRfYnVpbGQoY29uc3Qgc3RydWN0IGl3bF91Y29kZV9oZWFkZXIgKnVjb2RlLAorCQkJCSAgIHUzMiBhcGlfdmVyKQoreworCXJldHVybiAwOworfQorc3RhdGljIHU4ICppd2wzOTQ1X3Vjb2RlX2dldF9kYXRhKGNvbnN0IHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICp1Y29kZSwKKwkJCQkgIHUzMiBhcGlfdmVyKQoreworCXJldHVybiAodTggKikgdWNvZGUtPnUudjEuZGF0YTsKK30KKworSVdMMzk0NV9VQ09ERV9HRVQoaW5zdF9zaXplKTsKK0lXTDM5NDVfVUNPREVfR0VUKGRhdGFfc2l6ZSk7CitJV0wzOTQ1X1VDT0RFX0dFVChpbml0X3NpemUpOworSVdMMzk0NV9VQ09ERV9HRVQoaW5pdF9kYXRhX3NpemUpOworSVdMMzk0NV9VQ09ERV9HRVQoYm9vdF9zaXplKTsKKwogc3RhdGljIHN0cnVjdCBpd2xfaGNtZF9vcHMgaXdsMzk0NV9oY21kID0gewogCS5yeG9uX2Fzc29jID0gaXdsMzk0NV9zZW5kX3J4b25fYXNzb2MsCiAJLmNvbW1pdF9yeG9uID0gaXdsMzk0NV9jb21taXRfcnhvbiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaXdsX3Vjb2RlX29wcyBpd2wzOTQ1X3Vjb2RlID0geworCS5nZXRfaGVhZGVyX3NpemUgPSBpd2wzOTQ1X3Vjb2RlX2dldF9oZWFkZXJfc2l6ZSwKKwkuZ2V0X2J1aWxkID0gaXdsMzk0NV91Y29kZV9nZXRfYnVpbGQsCisJLmdldF9pbnN0X3NpemUgPSBpd2wzOTQ1X3Vjb2RlX2dldF9pbnN0X3NpemUsCisJLmdldF9kYXRhX3NpemUgPSBpd2wzOTQ1X3Vjb2RlX2dldF9kYXRhX3NpemUsCisJLmdldF9pbml0X3NpemUgPSBpd2wzOTQ1X3Vjb2RlX2dldF9pbml0X3NpemUsCisJLmdldF9pbml0X2RhdGFfc2l6ZSA9IGl3bDM5NDVfdWNvZGVfZ2V0X2luaXRfZGF0YV9zaXplLAorCS5nZXRfYm9vdF9zaXplID0gaXdsMzk0NV91Y29kZV9nZXRfYm9vdF9zaXplLAorCS5nZXRfZGF0YSA9IGl3bDM5NDVfdWNvZGVfZ2V0X2RhdGEsCit9OworCiBzdGF0aWMgc3RydWN0IGl3bF9saWJfb3BzIGl3bDM5NDVfbGliID0gewogCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCwKIAkudHhxX2ZyZWVfdGZkID0gaXdsMzk0NV9od190eHFfZnJlZV90ZmQsCkBAIC0yODA4LDggKzI4NTMsOCBAQAogCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF8zX0NIQU5ORUxTLAogCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF80X0NIQU5ORUxTLAogCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF81X0NIQU5ORUxTLAotCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF9OT19GQVQsCi0JCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVCwKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fSFQ0MCwKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fSFQ0MCwKIAkJfSwKIAkJLnZlcmlmeV9zaWduYXR1cmUgID0gaXdsY29yZV9lZXByb21fdmVyaWZ5X3NpZ25hdHVyZSwKIAkJLmFjcXVpcmVfc2VtYXBob3JlID0gaXdsMzk0NV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUsCkBAIC0yODI5LDYgKzI4NzQsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDM5NDVfb3BzID0geworCS51Y29kZSA9ICZpd2wzOTQ1X3Vjb2RlLAogCS5saWIgPSAmaXdsMzk0NV9saWIsCiAJLmhjbWQgPSAmaXdsMzk0NV9oY21kLAogCS51dGlscyA9ICZpd2wzOTQ1X2hjbWRfdXRpbHMsCkBAIC0yODQ0LDcgKzI4OTAsOCBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04sCiAJLm9wcyA9ICZpd2wzOTQ1X29wcywKIAkubW9kX3BhcmFtcyA9ICZpd2wzOTQ1X21vZF9wYXJhbXMsCi0JLnVzZV9pc3JfbGVnYWN5ID0gdHJ1ZQorCS51c2VfaXNyX2xlZ2FjeSA9IHRydWUsCisJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IGZhbHNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfY2ZnIGl3bDM5NDVfYWJnX2NmZyA9IHsKQEAgLTI4NTcsNyArMjkwNCw4IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fMzk0NV9FRVBST01fVkVSU0lPTiwKIAkub3BzID0gJml3bDM5NDVfb3BzLAogCS5tb2RfcGFyYW1zID0gJml3bDM5NDVfbW9kX3BhcmFtcywKLQkudXNlX2lzcl9sZWdhY3kgPSB0cnVlCisJLnVzZV9pc3JfbGVnYWN5ID0gdHJ1ZSwKKwkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gZmFsc2UsCiB9OwogCiBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpd2wzOTQ1X2h3X2NhcmRfaWRzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKaW5kZXggMmRlNjQ3MS4uZjI0MDM2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaApAQCAtMTExLDkgKzExMSw2IEBACiAjZGVmaW5lIElXTF9UWF9GSUZPX0hDQ0FfMgk2CiAjZGVmaW5lIElXTF9UWF9GSUZPX05PTkUJNwogCi0vKiBNaW5pbXVtIG51bWJlciBvZiBxdWV1ZXMuIE1BWF9OVU0gaXMgZGVmaW5lZCBpbiBodyBzcGVjaWZpYyBmaWxlcyAqLwotI2RlZmluZSBJV0wzOV9NSU5fTlVNX1FVRVVFUwk0Ci0KICNkZWZpbmUgSUVFRTgwMjExX0RBVEFfTEVOICAgICAgICAgICAgICAyMzA0CiAjZGVmaW5lIElFRUU4MDIxMV80QUREUl9MRU4gICAgICAgICAgICAgMzAKICNkZWZpbmUgSUVFRTgwMjExX0hMRU4gICAgICAgICAgICAgICAgICAoSUVFRTgwMjExXzRBRERSX0xFTikKQEAgLTI1NywxMCArMjU0LDExIEBACiAJCQkJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZSwgdTggcmF0ZSk7Ci12b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2NtZCAqY21kLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKLQkJCQkgICAgIGludCBzdGFfaWQsIGludCB0eF9pZCk7Cit2b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IGl3bF9kZXZpY2VfY21kICpjbWQsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorCQkJCSAgaW50IHN0YV9pZCwgaW50IHR4X2lkKTsKIGV4dGVybiBpbnQgaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBleHRlcm4gaW50IGl3bDM5NDVfaHdfcmVnX3NldF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgczggcG93ZXIpOwogZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaAppbmRleCBhNzFhNDg5Li5iMzQzMjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWh3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oCkBAIC0xODgsNyArMTg4LDcgQEAKICAqCiAgKiAxKSAgUmVndWxhdG9yeSBpbmZvcm1hdGlvbiAobWF4IHR4cG93ZXIgYW5kIGNoYW5uZWwgdXNhZ2UgZmxhZ3MpIGlzIHByb3ZpZGVkCiAgKiAgICAgc2VwYXJhdGVseSBmb3IgZWFjaCBjaGFubmVsIHRoYXQgY2FuIHBvc3NpYmx5IHN1cHBvcnRlZCBieSA0OTY1LgotICogICAgIDQwIE1IeiB3aWRlICguMTFuIGZhdCkgY2hhbm5lbHMgYXJlIGxpc3RlZCBzZXBhcmF0ZWx5IGZyb20gMjAgTUh6CisgKiAgICAgNDAgTUh6IHdpZGUgKC4xMW4gSFQ0MCkgY2hhbm5lbHMgYXJlIGxpc3RlZCBzZXBhcmF0ZWx5IGZyb20gMjAgTUh6CiAgKiAgICAgKGxlZ2FjeSkgY2hhbm5lbHMuCiAgKgogICogICAgIFNlZSBzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbCBmb3IgZm9ybWF0LCBhbmQgc3RydWN0IGl3bDQ5NjVfZWVwcm9tCkBAIC0yNTEsOCArMjUxLDggQEAKICAqICAgICBubyByZWR1Y3Rpb24gKHN1Y2ggYXMgd2l0aCByZWd1bGF0b3J5IHR4cG93ZXIgbGltaXRzKSBpcyByZXF1aXJlZC4KICAqCiAgKiAgICAgU2F0dXJhdGlvbiBhbmQgQmFja29mZiB2YWx1ZXMgYXBwbHkgZXF1YWxseSB0byAyMCBNaHogKGxlZ2FjeSkgY2hhbm5lbAotICogICAgIHdpZHRocyBhbmQgNDAgTWh6ICguMTFuIGZhdCkgY2hhbm5lbCB3aWR0aHM7IHRoZXJlIGlzIG5vIHNlcGFyYXRlCi0gKiAgICAgZmFjdG9yeSBtZWFzdXJlbWVudCBmb3IgZmF0IGNoYW5uZWxzLgorICogICAgIHdpZHRocyBhbmQgNDAgTWh6ICguMTFuIEhUNDApIGNoYW5uZWwgd2lkdGhzOyB0aGVyZSBpcyBubyBzZXBhcmF0ZQorICogICAgIGZhY3RvcnkgbWVhc3VyZW1lbnQgZm9yIGh0NDAgY2hhbm5lbHMuCiAgKgogICogICAgIFRoZSByZXN1bHQgb2YgdGhpcyBzdGVwIGlzIHRoZSBmaW5hbCB0YXJnZXQgdHhwb3dlci4gIFRoZSByZXN0IG9mCiAgKiAgICAgdGhlIHN0ZXBzIGZpZ3VyZSBvdXQgdGhlIHByb3BlciBzZXR0aW5ncyBmb3IgdGhlIGRldmljZSB0byBhY2hpZXZlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKaW5kZXggOGYzZDRiYy4uNmExM2JmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwpAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgIml3bC1zdGEuaCIKIAogc3RhdGljIGludCBpd2w0OTY1X3NlbmRfdHhfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLXN0YXRpYyBpbnQgaXdsNDk2NV9od19nZXRfdGVtcGVyYXR1cmUoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3N0YXRpYyBpbnQgaXdsNDk2NV9od19nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgSVdMNDk2NV9VQ09ERV9BUElfTUFYIDIKQEAgLTI5Myw3ICsyOTMsNyBAQAogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CiB9CiAKLXN0YXRpYyBib29sIGlzX2ZhdF9jaGFubmVsKF9fbGUzMiByeG9uX2ZsYWdzKQorc3RhdGljIGJvb2wgaXNfaHQ0MF9jaGFubmVsKF9fbGUzMiByeG9uX2ZsYWdzKQogewogCWludCBjaGFuX21vZCA9IGxlMzJfdG9fY3B1KHJ4b25fZmxhZ3MgJiBSWE9OX0ZMR19DSEFOTkVMX01PREVfTVNLKQogCQkJCSAgICA+PiBSWE9OX0ZMR19DSEFOTkVMX01PREVfUE9TOwpAQCAtNzI4LDcgKzcyOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X3JhbmdlcyBpd2w0OTY1X3NlbnNpdGl2aXR5ID0gewogCS5taW5fbnJnX2NjayA9IDk3LAotCS5tYXhfbnJnX2NjayA9IDAsCisJLm1heF9ucmdfY2NrID0gMCwgLyogbm90IHVzZWQsIHNldCB0byAwICovCiAKIAkuYXV0b19jb3JyX21pbl9vZmRtID0gODUsCiAJLmF1dG9fY29ycl9taW5fb2ZkbV9tcmMgPSAxNzAsCkBAIC03NTIsNyArNzUyLDggQEAKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfc2V0X2N0X3RocmVzaG9sZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogd2FudCBLZWx2aW4gKi8KLQlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDRUxTSVVTX1RPX0tFTFZJTihDVF9LSUxMX1RIUkVTSE9MRCk7CisJcHJpdi0+aHdfcGFyYW1zLmN0X2tpbGxfdGhyZXNob2xkID0KKwkJQ0VMU0lVU19UT19LRUxWSU4oQ1RfS0lMTF9USFJFU0hPTERfTEVHQUNZKTsKIH0KIAogLyoqCkBAIC03ODEsNyArNzgyLDcgQEAKIAlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDQ5X1JUQ19EQVRBX1NJWkU7CiAJcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUgPSBJV0w0OV9SVENfSU5TVF9TSVpFOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUgPSBCU01fU1JBTV9TSVpFOwotCXByaXYtPmh3X3BhcmFtcy5mYXRfY2hhbm5lbCA9IEJJVChJRUVFODAyMTFfQkFORF81R0haKTsKKwlwcml2LT5od19wYXJhbXMuaHQ0MF9jaGFubmVsID0gQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOwogCiAJcHJpdi0+aHdfcGFyYW1zLnJ4X3dydF9wdHJfcmVnID0gRkhfUlNDU1JfQ0hOTDBfV1BUUjsKIApAQCAtMTI0MSw3ICsxMjQyLDcgQEAKIH07CiAKIHN0YXRpYyBpbnQgaXdsNDk2NV9maWxsX3R4cG93ZXJfdGJsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggYmFuZCwgdTE2IGNoYW5uZWwsCi0JCQkJICAgIHU4IGlzX2ZhdCwgdTggY3RybF9jaGFuX2hpZ2gsCisJCQkJICAgIHU4IGlzX2h0NDAsIHU4IGN0cmxfY2hhbl9oaWdoLAogCQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV90eF9wb3dlcl9kYiAqdHhfcG93ZXJfdGJsKQogewogCXU4IHNhdHVyYXRpb25fcG93ZXI7CkBAIC0xMjczLDggKzEyNzQsOCBAQAogCXVzZXJfdGFyZ2V0X3Bvd2VyID0gMiAqIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10OwogCiAJLyogR2V0IGN1cnJlbnQgKFJYT04pIGNoYW5uZWwsIGJhbmQsIHdpZHRoICovCi0JSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImNoYW4gJWQgYmFuZCAlZCBpc19mYXQgJWRcbiIsIGNoYW5uZWwsIGJhbmQsCi0JCQkgIGlzX2ZhdCk7CisJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImNoYW4gJWQgYmFuZCAlZCBpc19odDQwICVkXG4iLCBjaGFubmVsLCBiYW5kLAorCQkJICBpc19odDQwKTsKIAogCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwcml2LT5iYW5kLCBjaGFubmVsKTsKIApAQCAtMTI5Myw3ICsxMjk0LDcgQEAKIAlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhbm5lbCAlZCBiZWxvbmdzIHRvIHR4YXR0ZW4gZ3JvdXAgJWRcbiIsCiAJCQkgIGNoYW5uZWwsIHR4YXR0ZW5fZ3JwKTsKIAotCWlmIChpc19mYXQpIHsKKwlpZiAoaXNfaHQ0MCkgewogCQlpZiAoY3RybF9jaGFuX2hpZ2gpCiAJCQljaGFubmVsIC09IDI7CiAJCWVsc2UKQEAgLTEzMTcsOCArMTMxOCw4IEBACiAKIAkvKiByZWd1bGF0b3J5IHR4cG93ZXIgbGltaXRzIC4uLiByZWdfbGltaXQgdmFsdWVzIGFyZSBpbiBoYWxmLWRCbSwKIAkgKiAgIG1heF9wb3dlcl9hdmcgdmFsdWVzIGFyZSBpbiBkQm0sIGNvbnZlcnQgKiAyICovCi0JaWYgKGlzX2ZhdCkKLQkJcmVnX2xpbWl0ID0gY2hfaW5mby0+ZmF0X21heF9wb3dlcl9hdmcgKiAyOworCWlmIChpc19odDQwKQorCQlyZWdfbGltaXQgPSBjaF9pbmZvLT5odDQwX21heF9wb3dlcl9hdmcgKiAyOwogCWVsc2UKIAkJcmVnX2xpbWl0ID0gY2hfaW5mby0+bWF4X3Bvd2VyX2F2ZyAqIDI7CiAKQEAgLTE0ODQsNyArMTQ4NSw3IEBACiAvKioKICAqIGl3bDQ5NjVfc2VuZF90eF9wb3dlciAtIENvbmZpZ3VyZSB0aGUgVFhQT1dFUiBsZXZlbCB1c2VyIGxpbWl0CiAgKgotICogVXNlcyB0aGUgYWN0aXZlIFJYT04gZm9yIGNoYW5uZWwsIGJhbmQsIGFuZCBjaGFyYWN0ZXJpc3RpY3MgKGZhdCwgaGlnaCkKKyAqIFVzZXMgdGhlIGFjdGl2ZSBSWE9OIGZvciBjaGFubmVsLCBiYW5kLCBhbmQgY2hhcmFjdGVyaXN0aWNzIChodDQwLCBoaWdoKQogICogVGhlIHBvd2VyIGxpbWl0IGlzIHRha2VuIGZyb20gcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQuCiAgKi8KIHN0YXRpYyBpbnQgaXdsNDk2NV9zZW5kX3R4X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKQEAgLTE0OTIsNyArMTQ5Myw3IEBACiAJc3RydWN0IGl3bDQ5NjVfdHhwb3dlcnRhYmxlX2NtZCBjbWQgPSB7IDAgfTsKIAlpbnQgcmV0OwogCXU4IGJhbmQgPSAwOwotCWJvb2wgaXNfZmF0ID0gZmFsc2U7CisJYm9vbCBpc19odDQwID0gZmFsc2U7CiAJdTggY3RybF9jaGFuX2hpZ2ggPSAwOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKQEAgLTE1MDUsOSArMTUwNiw5IEBACiAKIAliYW5kID0gcHJpdi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haOwogCi0JaXNfZmF0ID0gIGlzX2ZhdF9jaGFubmVsKHByaXYtPmFjdGl2ZV9yeG9uLmZsYWdzKTsKKwlpc19odDQwID0gIGlzX2h0NDBfY2hhbm5lbChwcml2LT5hY3RpdmVfcnhvbi5mbGFncyk7CiAKLQlpZiAoaXNfZmF0ICYmCisJaWYgKGlzX2h0NDAgJiYKIAkgICAgKHByaXYtPmFjdGl2ZV9yeG9uLmZsYWdzICYgUlhPTl9GTEdfQ1RSTF9DSEFOTkVMX0xPQ19ISV9NU0spKQogCQljdHJsX2NoYW5faGlnaCA9IDE7CiAKQEAgLTE1MTYsNyArMTUxNyw3IEBACiAKIAlyZXQgPSBpd2w0OTY1X2ZpbGxfdHhwb3dlcl90YmwocHJpdiwgYmFuZCwKIAkJCQlsZTE2X3RvX2NwdShwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsKSwKLQkJCQlpc19mYXQsIGN0cmxfY2hhbl9oaWdoLCAmY21kLnR4X3Bvd2VyKTsKKwkJCQlpc19odDQwLCBjdHJsX2NoYW5faGlnaCwgJmNtZC50eF9wb3dlcik7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTE1NzAsNyArMTU3MSw3IEBACiB7CiAJaW50IHJjOwogCXU4IGJhbmQgPSAwOwotCWJvb2wgaXNfZmF0ID0gZmFsc2U7CisJYm9vbCBpc19odDQwID0gZmFsc2U7CiAJdTggY3RybF9jaGFuX2hpZ2ggPSAwOwogCXN0cnVjdCBpd2w0OTY1X2NoYW5uZWxfc3dpdGNoX2NtZCBjbWQgPSB7IDAgfTsKIAljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKQEAgLTE1NzksOSArMTU4MCw5IEBACiAKIAljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwgY2hhbm5lbCk7CiAKLQlpc19mYXQgPSBpc19mYXRfY2hhbm5lbChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MpOworCWlzX2h0NDAgPSBpc19odDQwX2NoYW5uZWwocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzKTsKIAotCWlmIChpc19mYXQgJiYKKwlpZiAoaXNfaHQ0MCAmJgogCSAgICAocHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19DVFJMX0NIQU5ORUxfTE9DX0hJX01TSykpCiAJCWN0cmxfY2hhbl9oaWdoID0gMTsKIApAQCAtMTU5Niw3ICsxNTk3LDcgQEAKIAllbHNlCiAJCWNtZC5leHBlY3RfYmVhY29uID0gMTsKIAotCXJjID0gaXdsNDk2NV9maWxsX3R4cG93ZXJfdGJsKHByaXYsIGJhbmQsIGNoYW5uZWwsIGlzX2ZhdCwKKwlyYyA9IGl3bDQ5NjVfZmlsbF90eHBvd2VyX3RibChwcml2LCBiYW5kLCBjaGFubmVsLCBpc19odDQwLAogCQkJCSAgICAgIGN0cmxfY2hhbl9oaWdoLCAmY21kLnR4X3Bvd2VyKTsKIAlpZiAocmMpIHsKIAkJSVdMX0RFQlVHXzExSChwcml2LCAiZXJyb3I6JWQgIGZpbGwgdHhwb3dlcl90YmxcbiIsIHJjKTsKQEAgLTE2NTUsNyArMTY1Niw3IEBACiAgKgogICogQSByZXR1cm4gb2YgPDAgaW5kaWNhdGVzIGJvZ3VzIGRhdGEgaW4gdGhlIHN0YXRpc3RpY3MKICAqLwotc3RhdGljIGludCBpd2w0OTY1X2h3X2dldF90ZW1wZXJhdHVyZShjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDQ5NjVfaHdfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzMzIgdGVtcGVyYXR1cmU7CiAJczMyIHZ0OwpAQCAtMTY2Myw4ICsxNjY0LDggQEAKIAl1MzIgUjQ7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1RFTVBFUkFUVVJFLCAmcHJpdi0+c3RhdHVzKSAmJgotCQkocHJpdi0+c3RhdGlzdGljcy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLKSkgewotCQlJV0xfREVCVUdfVEVNUChwcml2LCAiUnVubmluZyBGQVQgdGVtcGVyYXR1cmUgY2FsaWJyYXRpb25cbiIpOworCQkocHJpdi0+c3RhdGlzdGljcy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfSFQ0MF9NT0RFX01TSykpIHsKKwkJSVdMX0RFQlVHX1RFTVAocHJpdiwgIlJ1bm5pbmcgSFQ0MCB0ZW1wZXJhdHVyZSBjYWxpYnJhdGlvblxuIik7CiAJCVIxID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjFbMV0pOwogCQlSMiA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IyWzFdKTsKIAkJUjMgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yM1sxXSk7CkBAIC0xNzcyLDYgKzE3NzMsNyBAQAogCX0KIAogCXByaXYtPnRlbXBlcmF0dXJlID0gdGVtcDsKKwlpd2xfdHRfaGFuZGxlcihwcml2KTsKIAlzZXRfYml0KFNUQVRVU19URU1QRVJBVFVSRSwgJnByaXYtPnN0YXR1cyk7CiAKIAlpZiAoIXByaXYtPmRpc2FibGVfdHhfcG93ZXJfY2FsICYmCkBAIC0yMjIxLDEyICsyMjIzLDUwIEBACiAJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+dHhwb3dlcl93b3JrKTsKIH0KIAorI2RlZmluZSBJV0w0OTY1X1VDT0RFX0dFVChpdGVtKQkJCQkJCVwKK3N0YXRpYyB1MzIgaXdsNDk2NV91Y29kZV9nZXRfIyNpdGVtKGNvbnN0IHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICp1Y29kZSxcCisJCQkJICAgIHUzMiBhcGlfdmVyKQkJCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIGxlMzJfdG9fY3B1KHVjb2RlLT51LnYxLml0ZW0pOwkJCQlcCit9CisKK3N0YXRpYyB1MzIgaXdsNDk2NV91Y29kZV9nZXRfaGVhZGVyX3NpemUodTMyIGFwaV92ZXIpCit7CisJcmV0dXJuIFVDT0RFX0hFQURFUl9TSVpFKDEpOworfQorc3RhdGljIHUzMiBpd2w0OTY1X3Vjb2RlX2dldF9idWlsZChjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqdWNvZGUsCisJCQkJICAgdTMyIGFwaV92ZXIpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdTggKml3bDQ5NjVfdWNvZGVfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IGl3bF91Y29kZV9oZWFkZXIgKnVjb2RlLAorCQkJCSAgdTMyIGFwaV92ZXIpCit7CisJcmV0dXJuICh1OCAqKSB1Y29kZS0+dS52MS5kYXRhOworfQorCitJV0w0OTY1X1VDT0RFX0dFVChpbnN0X3NpemUpOworSVdMNDk2NV9VQ09ERV9HRVQoZGF0YV9zaXplKTsKK0lXTDQ5NjVfVUNPREVfR0VUKGluaXRfc2l6ZSk7CitJV0w0OTY1X1VDT0RFX0dFVChpbml0X2RhdGFfc2l6ZSk7CitJV0w0OTY1X1VDT0RFX0dFVChib290X3NpemUpOworCiBzdGF0aWMgc3RydWN0IGl3bF9oY21kX29wcyBpd2w0OTY1X2hjbWQgPSB7CiAJLnJ4b25fYXNzb2MgPSBpd2w0OTY1X3NlbmRfcnhvbl9hc3NvYywKIAkuY29tbWl0X3J4b24gPSBpd2xfY29tbWl0X3J4b24sCiAJLnNldF9yeG9uX2NoYWluID0gaXdsX3NldF9yeG9uX2NoYWluLAogfTsKIAorc3RhdGljIHN0cnVjdCBpd2xfdWNvZGVfb3BzIGl3bDQ5NjVfdWNvZGUgPSB7CisJLmdldF9oZWFkZXJfc2l6ZSA9IGl3bDQ5NjVfdWNvZGVfZ2V0X2hlYWRlcl9zaXplLAorCS5nZXRfYnVpbGQgPSBpd2w0OTY1X3Vjb2RlX2dldF9idWlsZCwKKwkuZ2V0X2luc3Rfc2l6ZSA9IGl3bDQ5NjVfdWNvZGVfZ2V0X2luc3Rfc2l6ZSwKKwkuZ2V0X2RhdGFfc2l6ZSA9IGl3bDQ5NjVfdWNvZGVfZ2V0X2RhdGFfc2l6ZSwKKwkuZ2V0X2luaXRfc2l6ZSA9IGl3bDQ5NjVfdWNvZGVfZ2V0X2luaXRfc2l6ZSwKKwkuZ2V0X2luaXRfZGF0YV9zaXplID0gaXdsNDk2NV91Y29kZV9nZXRfaW5pdF9kYXRhX3NpemUsCisJLmdldF9ib290X3NpemUgPSBpd2w0OTY1X3Vjb2RlX2dldF9ib290X3NpemUsCisJLmdldF9kYXRhID0gaXdsNDk2NV91Y29kZV9nZXRfZGF0YSwKK307CiBzdGF0aWMgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2w0OTY1X2hjbWRfdXRpbHMgPSB7CiAJLmdldF9oY21kX3NpemUgPSBpd2w0OTY1X2dldF9oY21kX3NpemUsCiAJLmJ1aWxkX2FkZHN0YV9oY21kID0gaXdsNDk2NV9idWlsZF9hZGRzdGFfaGNtZCwKQEAgLTIyNjYsOCArMjMwNiw4IEBACiAJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzNfQ0hBTk5FTFMsCiAJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzRfQ0hBTk5FTFMsCiAJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzVfQ0hBTk5FTFMsCi0JCQlFRVBST01fNDk2NV9SRUdVTEFUT1JZX0JBTkRfMjRfRkFUX0NIQU5ORUxTLAotCQkJRUVQUk9NXzQ5NjVfUkVHVUxBVE9SWV9CQU5EXzUyX0ZBVF9DSEFOTkVMUworCQkJRUVQUk9NXzQ5NjVfUkVHVUxBVE9SWV9CQU5EXzI0X0hUNDBfQ0hBTk5FTFMsCisJCQlFRVBST01fNDk2NV9SRUdVTEFUT1JZX0JBTkRfNTJfSFQ0MF9DSEFOTkVMUwogCQl9LAogCQkudmVyaWZ5X3NpZ25hdHVyZSAgPSBpd2xjb3JlX2VlcHJvbV92ZXJpZnlfc2lnbmF0dXJlLAogCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKQEAgLTIyODcsNiArMjMyNyw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNDk2NV9vcHMgPSB7CisJLnVjb2RlID0gJml3bDQ5NjVfdWNvZGUsCiAJLmxpYiA9ICZpd2w0OTY1X2xpYiwKIAkuaGNtZCA9ICZpd2w0OTY1X2hjbWQsCiAJLnV0aWxzID0gJml3bDQ5NjVfaGNtZF91dGlscywKQEAgLTIzMDMsNyArMjM0NCw4IEBACiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNDk2NV9UWF9QT1dFUl9WRVJTSU9OLAogCS5vcHMgPSAmaXdsNDk2NV9vcHMsCiAJLm1vZF9wYXJhbXMgPSAmaXdsNDk2NV9tb2RfcGFyYW1zLAotCS51c2VfaXNyX2xlZ2FjeSA9IHRydWUKKwkudXNlX2lzcl9sZWdhY3kgPSB0cnVlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSBmYWxzZSwKIH07CiAKIC8qIE1vZHVsZSBmaXJtd2FyZSAqLwpAQCAtMjMxMyw4ICsyMzU1LDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoYW50ZW5uYSwgInNlbGVjdCBhbnRlbm5hICgxPU1haW4sIDI9QXV4LCBkZWZhdWx0IDAgW2JvdGhdKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKHN3Y3J5cHRvLCBpd2w0OTY1X21vZF9wYXJhbXMuc3dfY3J5cHRvLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhzd2NyeXB0bywgInVzaW5nIGNyeXB0byBpbiBzb2Z0d2FyZSAoZGVmYXVsdCAwIFtoYXJkd2FyZV0pIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGl3bDQ5NjVfbW9kX3BhcmFtcy5kZWJ1ZywgdWludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKIG1vZHVsZV9wYXJhbV9uYW1lZCgKIAlkaXNhYmxlX2h3X3NjYW4sIGl3bDQ5NjVfbW9kX3BhcmFtcy5kaXNhYmxlX2h3X3NjYW4sIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfaHdfc2NhbiwgImRpc2FibGUgaGFyZHdhcmUgc2Nhbm5pbmcgKGRlZmF1bHQgMCkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCBiM2M2NDhjLi4xZDUzOWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC05MSw3ICs5MSw3IEBACiB9CiAKIAotc3RhdGljIGludCBpd2w1MDAwX2FwbV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK2ludCBpd2w1MDAwX2FwbV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMTM3LDcgKzEzNyw3IEBACiB9CiAKIC8qIEZJWE1FOiB0aGlzIGlzIGlkZW50aWNhbCB0byA0OTY1ICovCi1zdGF0aWMgdm9pZCBpd2w1MDAwX2FwbV9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3ZvaWQgaXdsNTAwMF9hcG1fc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTU2LDcgKzE1Niw3IEBACiB9CiAKIAotc3RhdGljIGludCBpd2w1MDAwX2FwbV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitpbnQgaXdsNTAwMF9hcG1fcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByZXQgPSAwOwogCkBAIC0xOTgsNyArMTk4LDggQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBpd2w1MDAwX25pY19jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQorLyogTklDIGNvbmZpZ3VyYXRpb24gZm9yIDUwMDAgc2VyaWVzIGFuZCB1cCAqLwordm9pZCBpd2w1MDAwX25pY19jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IHJhZGlvX2NmZzsKQEAgLTIzOSwxMSArMjQwLDExIEBACiAJCQkJQVBNR19QU19DVFJMX0VBUkxZX1BXUl9PRkZfUkVTRVRfRElTLAogCQkJCX5BUE1HX1BTX0NUUkxfRUFSTFlfUFdSX09GRl9SRVNFVF9ESVMpOwogCisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKIAotCiAvKgogICogRUVQUk9NCiAgKi8KQEAgLTI4Myw3ICsyODQsNyBAQAogCXJldHVybiAoYWRkcmVzcyAmIEFERFJFU1NfTVNLKSArIChvZmZzZXQgPDwgMSk7CiB9CiAKLXN0YXRpYyB1MTYgaXdsNTAwMF9lZXByb21fY2FsaWJfdmVyc2lvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit1MTYgaXdsNTAwMF9lZXByb21fY2FsaWJfdmVyc2lvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9lZXByb21fY2FsaWJfaGRyIHsKIAkJdTggdmVyc2lvbjsKQEAgLTM4OCw3ICszODksNyBAQAogCiBzdGF0aWMgc3RydWN0IGl3bF9zZW5zaXRpdml0eV9yYW5nZXMgaXdsNTAwMF9zZW5zaXRpdml0eSA9IHsKIAkubWluX25yZ19jY2sgPSA5NSwKLQkubWF4X25yZ19jY2sgPSAwLAorCS5tYXhfbnJnX2NjayA9IDAsIC8qIG5vdCB1c2VkLCBzZXQgdG8gMCAqLwogCS5hdXRvX2NvcnJfbWluX29mZG0gPSA5MCwKIAkuYXV0b19jb3JyX21pbl9vZmRtX21yYyA9IDE3MCwKIAkuYXV0b19jb3JyX21pbl9vZmRtX3gxID0gMTIwLApAQCAtNDA3LDcgKzQwOCwyOSBAQAogCS5ucmdfdGhfb2ZkbSA9IDk1LAogfTsKIAotc3RhdGljIGNvbnN0IHU4ICppd2w1MDAwX2VlcHJvbV9xdWVyeV9hZGRyKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKK3N0YXRpYyBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X3JhbmdlcyBpd2w1MTUwX3NlbnNpdGl2aXR5ID0geworCS5taW5fbnJnX2NjayA9IDk1LAorCS5tYXhfbnJnX2NjayA9IDAsIC8qIG5vdCB1c2VkLCBzZXQgdG8gMCAqLworCS5hdXRvX2NvcnJfbWluX29mZG0gPSA5MCwKKwkuYXV0b19jb3JyX21pbl9vZmRtX21yYyA9IDE3MCwKKwkuYXV0b19jb3JyX21pbl9vZmRtX3gxID0gMTA1LAorCS5hdXRvX2NvcnJfbWluX29mZG1fbXJjX3gxID0gMjIwLAorCisJLmF1dG9fY29ycl9tYXhfb2ZkbSA9IDEyMCwKKwkuYXV0b19jb3JyX21heF9vZmRtX21yYyA9IDIxMCwKKwkvKiBtYXggPSBtaW4gZm9yIHBlcmZvcm1hbmNlIGJ1ZyBpbiA1MTUwIERTUCAqLworCS5hdXRvX2NvcnJfbWF4X29mZG1feDEgPSAxMDUsCisJLmF1dG9fY29ycl9tYXhfb2ZkbV9tcmNfeDEgPSAyMjAsCisKKwkuYXV0b19jb3JyX21pbl9jY2sgPSAxMjUsCisJLmF1dG9fY29ycl9tYXhfY2NrID0gMjAwLAorCS5hdXRvX2NvcnJfbWluX2Nja19tcmMgPSAxNzAsCisJLmF1dG9fY29ycl9tYXhfY2NrX21yYyA9IDQwMCwKKwkubnJnX3RoX2NjayA9IDk1LAorCS5ucmdfdGhfb2ZkbSA9IDk1LAorfTsKKworY29uc3QgdTggKml3bDUwMDBfZWVwcm9tX3F1ZXJ5X2FkZHIoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgICBzaXplX3Qgb2Zmc2V0KQogewogCXUzMiBhZGRyZXNzID0gZWVwcm9tX2luZGlyZWN0X2FkZHJlc3MocHJpdiwgb2Zmc2V0KTsKQEAgLTQxOCw3ICs0NDEsNyBAQAogc3RhdGljIHZvaWQgaXdsNTE1MF9zZXRfY3RfdGhyZXNob2xkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAljb25zdCBzMzIgdm9sdDJ0ZW1wX2NvZWYgPSBJV0xfNTE1MF9WT0xUQUdFX1RPX1RFTVBFUkFUVVJFX0NPRUZGOwotCXMzMiB0aHJlc2hvbGQgPSAoczMyKUNFTFNJVVNfVE9fS0VMVklOKENUX0tJTExfVEhSRVNIT0xEKSAtCisJczMyIHRocmVzaG9sZCA9IChzMzIpQ0VMU0lVU19UT19LRUxWSU4oQ1RfS0lMTF9USFJFU0hPTERfTEVHQUNZKSAtCiAJCQlpd2xfdGVtcF9jYWxpYl90b19vZmZzZXQocHJpdik7CiAKIAlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSB0aHJlc2hvbGQgKiB2b2x0MnRlbXBfY29lZjsKQEAgLTQyNyw3ICs0NTAsNyBAQAogc3RhdGljIHZvaWQgaXdsNTAwMF9zZXRfY3RfdGhyZXNob2xkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiB3YW50IENlbHNpdXMgKi8KLQlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDVF9LSUxMX1RIUkVTSE9MRDsKKwlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDVF9LSUxMX1RIUkVTSE9MRF9MRUdBQ1k7CiB9CiAKIC8qCkBAIC00NzEsNyArNDk0LDcgQEAKIHsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXdsX2NhbGliX2hkciAqaGRyID0gKHN0cnVjdCBpd2xfY2FsaWJfaGRyICopcGt0LT51LnJhdzsKLQlpbnQgbGVuID0gbGUzMl90b19jcHUocGt0LT5sZW4pICYgRkhfUlNDU1JfRlJBTUVfU0laRV9NU0s7CisJaW50IGxlbiA9IGxlMzJfdG9fY3B1KHBrdC0+bGVuX25fZmxhZ3MpICYgRkhfUlNDU1JfRlJBTUVfU0laRV9NU0s7CiAJaW50IGluZGV4OwogCiAJLyogcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBsZW5ndGggZmllbGQgaXRzZWxmICovCkBAIC02MDIsNyArNjI1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGl3bDUwMDBfbG9hZF91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitpbnQgaXdsNTAwMF9sb2FkX3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNjI5LDcgKzY1Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3ZvaWQgaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNzA1LDcgKzcyOCw3IEBACiAJCQkJc2l6ZW9mKGNvZXhfY21kKSwgJmNvZXhfY21kKTsKIH0KIAotc3RhdGljIGludCBpd2w1MDAwX2FsaXZlX25vdGlmeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitpbnQgaXdsNTAwMF9hbGl2ZV9ub3RpZnkoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUzMiBhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03OTIsNyArODE1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2w1MDAwX2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaWYgKChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPiBJV0w1MF9OVU1fUVVFVUVTKSB8fAogCSAgICAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzIDwgSVdMX01JTl9OVU1fUVVFVUVTKSkgewpAQCAtODIyLDEyICs4NDUsMTAgQEAKIAl9CiAKIAlwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplID0gMDsKLQlwcml2LT5od19wYXJhbXMuZmF0X2NoYW5uZWwgPSAgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopIHwKKwlwcml2LT5od19wYXJhbXMuaHQ0MF9jaGFubmVsID0gIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSB8CiAJCQkJCUJJVChJRUVFODAyMTFfQkFORF81R0haKTsKIAlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSF9SU0NTUl9DSE5MMF9XUFRSOwogCi0JcHJpdi0+aHdfcGFyYW1zLnNlbnMgPSAmaXdsNTAwMF9zZW5zaXRpdml0eTsKLQogCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gbnVtX29mX2FudChwcml2LT5jZmctPnZhbGlkX3R4X2FudCk7CiAJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSBudW1fb2ZfYW50KHByaXYtPmNmZy0+dmFsaWRfcnhfYW50KTsKIAlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gcHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQ7CkBAIC04MzYsOSArODU3LDExIEBACiAJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnRlbXBfb3BzLnNldF9jdF9raWxsKQogCQlwcml2LT5jZmctPm9wcy0+bGliLT50ZW1wX29wcy5zZXRfY3Rfa2lsbChwcml2KTsKIAorCS8qIFNldCBpbml0aWFsIHNlbnNpdGl2aXR5IHBhcmFtZXRlcnMgKi8KIAkvKiBTZXQgaW5pdGlhbCBjYWxpYnJhdGlvbiBzZXQgKi8KIAlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKIAljYXNlIENTUl9IV19SRVZfVFlQRV81MTUwOgorCQlwcml2LT5od19wYXJhbXMuc2VucyA9ICZpd2w1MTUwX3NlbnNpdGl2aXR5OwogCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQogCQkJQklUKElXTF9DQUxJQl9EQykJCXwKIAkJCUJJVChJV0xfQ0FMSUJfTE8pCQl8CkBAIC04NDcsNiArODcwLDcgQEAKIAogCQlicmVhazsKIAlkZWZhdWx0OgorCQlwcml2LT5od19wYXJhbXMuc2VucyA9ICZpd2w1MDAwX3NlbnNpdGl2aXR5OwogCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQogCQkJQklUKElXTF9DQUxJQl9YVEFMKQkJfAogCQkJQklUKElXTF9DQUxJQl9MTykJCXwKQEAgLTg2Miw3ICs4ODYsNyBAQAogLyoqCiAgKiBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsIC0gU2V0IHVwIGVudHJ5IGluIFR4IGJ5dGUtY291bnQgYXJyYXkKICAqLwotc3RhdGljIHZvaWQgaXdsNTAwMF90eHFfdXBkYXRlX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCit2b2lkIGl3bDUwMDBfdHhxX3VwZGF0ZV9ieXRlX2NudF90Ymwoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAogCQkJCQkgICAgdTE2IGJ5dGVfY250KQogewpAQCAtOTAyLDcgKzkyNiw3IEBACiAJCQl0ZmRfb2Zmc2V0W1RGRF9RVUVVRV9TSVpFX01BWCArIHdyaXRlX3B0cl0gPSBiY19lbnQ7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDUwMDBfdHhxX2ludmFsX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCit2b2lkIGl3bDUwMDBfdHhxX2ludmFsX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCSAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKIHsKIAlzdHJ1Y3QgaXdsNTAwMF9zY2RfYmNfdGJsICpzY2RfYmNfdGJsID0gcHJpdi0+c2NkX2JjX3RibHMuYWRkcjsKQEAgLTk1Nyw3ICs5ODEsNyBAQAogCQkoMSA8PCBJV0w1MF9TQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1NDRF9BQ1RfRU4pKTsKIH0KIAotc3RhdGljIGludCBpd2w1MDAwX3R4cV9hZ2dfZW5hYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwKK2ludCBpd2w1MDAwX3R4cV9hZ2dfZW5hYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwKIAkJCQkgIGludCB0eF9maWZvLCBpbnQgc3RhX2lkLCBpbnQgdGlkLCB1MTYgc3NuX2lkeCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTAxOCw3ICsxMDQyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2w1MDAwX3R4cV9hZ2dfZGlzYWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiB0eHFfaWQsCitpbnQgaXdsNTAwMF90eHFfYWdnX2Rpc2FibGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgdHhxX2lkLAogCQkJCSAgIHUxNiBzc25faWR4LCB1OCB0eF9maWZvKQogewogCWlmICgoSVdMNTBfRklSU1RfQU1QRFVfUVVFVUUgPiB0eHFfaWQpIHx8CkBAIC0xMDYxLDcgKzEwODUsNyBAQAogICogQWN0aXZhdGUvRGVhY3RpdmF0ZSBUeCBETUEvRklGTyBjaGFubmVscyBhY2NvcmRpbmcgdHggZmlmb3MgbWFzawogICogbXVzdCBiZSBjYWxsZWQgdW5kZXIgcHJpdi0+bG9jayBhbmQgbWFjIGFjY2VzcwogICovCi1zdGF0aWMgdm9pZCBpd2w1MDAwX3R4cV9zZXRfc2NoZWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgbWFzaykKK3ZvaWQgaXdsNTAwMF90eHFfc2V0X3NjaGVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIG1hc2spCiB7CiAJaXdsX3dyaXRlX3BycGgocHJpdiwgSVdMNTBfU0NEX1RYRkFDVCwgbWFzayk7CiB9CkBAIC0xMjgyLDEzICsxMzA2LDEzIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHZvaWQgaXdsNTAwMF9zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3ZvaWQgaXdsNTAwMF9zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBpbiA1MDAwIHRoZSB0eCBwb3dlciBjYWxpYnJhdGlvbiBpcyBkb25lIGluIHVDb2RlICovCiAJcHJpdi0+ZGlzYWJsZV90eF9wb3dlcl9jYWwgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBpd2w1MDAwX3J4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQordm9pZCBpd2w1MDAwX3J4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIGluaXQgY2FsaWJyYXRpb24gaGFuZGxlcnMgKi8KIAlwcml2LT5yeF9oYW5kbGVyc1tDQUxJQlJBVElPTl9SRVNfTk9USUZJQ0FUSU9OXSA9CkBAIC0xMjk5LDcgKzEzMjMsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyKHUzMiBhZGRyKQoraW50IGl3bDUwMDBfaHdfdmFsaWRfcnRjX2RhdGFfYWRkcih1MzIgYWRkcikKIHsKIAlyZXR1cm4gKGFkZHIgPj0gSVdMNTBfUlRDX0RBVEFfTE9XRVJfQk9VTkQpICYmCiAJCShhZGRyIDwgSVdMNTBfUlRDX0RBVEFfVVBQRVJfQk9VTkQpOwpAQCAtMTM1MSw3ICsxMzc1LDcgQEAKIAogCXJldHVybiByZXQ7CiB9Ci1zdGF0aWMgaW50ICBpd2w1MDAwX3NlbmRfdHhfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50ICBpd2w1MDAwX3NlbmRfdHhfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2w1MDAwX3R4X3Bvd2VyX2RibV9jbWQgdHhfcG93ZXJfY21kOwogCXU4IHR4X2FudF9jZmdfY21kOwpAQCAtMTM3MSwxMCArMTM5NSwxMSBAQAogCQkJCSAgICAgICBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgaXdsNTAwMF90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit2b2lkIGl3bDUwMDBfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIHN0b3JlIHRlbXBlcmF0dXJlIGZyb20gc3RhdGlzdGljcyAoaW4gQ2Vsc2l1cykgKi8KIAlwcml2LT50ZW1wZXJhdHVyZSA9IGxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC50ZW1wZXJhdHVyZSk7CisJaXdsX3R0X2hhbmRsZXIocHJpdik7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bDUxNTBfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQpAQCAtMTM4Niw2ICsxNDExLDcgQEAKIAl2dCA9IHZ0IC8gSVdMXzUxNTBfVk9MVEFHRV9UT19URU1QRVJBVFVSRV9DT0VGRiArIG9mZnNldDsKIAkvKiBub3cgdnQgaG9sZCB0aGUgdGVtcGVyYXR1cmUgaW4gS2VsdmluICovCiAJcHJpdi0+dGVtcGVyYXR1cmUgPSBLRUxWSU5fVE9fQ0VMU0lVUyh2dCk7CisJaXdsX3R0X2hhbmRsZXIocHJpdik7CiB9CiAKIC8qIENhbGMgbWF4IHNpZ25hbCBsZXZlbCAoZEJtKSBhbW9uZyAzIHBvc3NpYmxlIHJlY2VpdmVycyAqLwpAQCAtMTQyNiw2ICsxNDUyLDQ0IEBACiAJcmV0dXJuIG1heF9yc3NpIC0gYWdjIC0gSVdMNDlfUlNTSV9PRkZTRVQ7CiB9CiAKKyNkZWZpbmUgSVdMNTAwMF9VQ09ERV9HRVQoaXRlbSkJCQkJCQlcCitzdGF0aWMgdTMyIGl3bDUwMDBfdWNvZGVfZ2V0XyMjaXRlbShjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqdWNvZGUsXAorCQkJCSAgICB1MzIgYXBpX3ZlcikJCQlcCit7CQkJCQkJCQkJXAorCWlmIChhcGlfdmVyIDw9IDIpCQkJCQkJXAorCQlyZXR1cm4gbGUzMl90b19jcHUodWNvZGUtPnUudjEuaXRlbSk7CQkJXAorCXJldHVybiBsZTMyX3RvX2NwdSh1Y29kZS0+dS52Mi5pdGVtKTsJCQkJXAorfQorCitzdGF0aWMgdTMyIGl3bDUwMDBfdWNvZGVfZ2V0X2hlYWRlcl9zaXplKHUzMiBhcGlfdmVyKQoreworCWlmIChhcGlfdmVyIDw9IDIpCisJCXJldHVybiBVQ09ERV9IRUFERVJfU0laRSgxKTsKKwlyZXR1cm4gVUNPREVfSEVBREVSX1NJWkUoMik7Cit9CisKK3N0YXRpYyB1MzIgaXdsNTAwMF91Y29kZV9nZXRfYnVpbGQoY29uc3Qgc3RydWN0IGl3bF91Y29kZV9oZWFkZXIgKnVjb2RlLAorCQkJCSAgIHUzMiBhcGlfdmVyKQoreworCWlmIChhcGlfdmVyIDw9IDIpCisJCXJldHVybiAwOworCXJldHVybiBsZTMyX3RvX2NwdSh1Y29kZS0+dS52Mi5idWlsZCk7Cit9CisKK3N0YXRpYyB1OCAqaXdsNTAwMF91Y29kZV9nZXRfZGF0YShjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqdWNvZGUsCisJCQkJICB1MzIgYXBpX3ZlcikKK3sKKwlpZiAoYXBpX3ZlciA8PSAyKQorCQlyZXR1cm4gKHU4ICopIHVjb2RlLT51LnYxLmRhdGE7CisJcmV0dXJuICh1OCAqKSB1Y29kZS0+dS52Mi5kYXRhOworfQorCitJV0w1MDAwX1VDT0RFX0dFVChpbnN0X3NpemUpOworSVdMNTAwMF9VQ09ERV9HRVQoZGF0YV9zaXplKTsKK0lXTDUwMDBfVUNPREVfR0VUKGluaXRfc2l6ZSk7CitJV0w1MDAwX1VDT0RFX0dFVChpbml0X2RhdGFfc2l6ZSk7CitJV0w1MDAwX1VDT0RFX0dFVChib290X3NpemUpOworCiBzdHJ1Y3QgaXdsX2hjbWRfb3BzIGl3bDUwMDBfaGNtZCA9IHsKIAkucnhvbl9hc3NvYyA9IGl3bDUwMDBfc2VuZF9yeG9uX2Fzc29jLAogCS5jb21taXRfcnhvbiA9IGl3bF9jb21taXRfcnhvbiwKQEAgLTE0NDEsNiArMTUwNSwxNyBAQAogCS5jYWxjX3Jzc2kgPSBpd2w1MDAwX2NhbGNfcnNzaSwKIH07CiAKK3N0cnVjdCBpd2xfdWNvZGVfb3BzIGl3bDUwMDBfdWNvZGUgPSB7CisJLmdldF9oZWFkZXJfc2l6ZSA9IGl3bDUwMDBfdWNvZGVfZ2V0X2hlYWRlcl9zaXplLAorCS5nZXRfYnVpbGQgPSBpd2w1MDAwX3Vjb2RlX2dldF9idWlsZCwKKwkuZ2V0X2luc3Rfc2l6ZSA9IGl3bDUwMDBfdWNvZGVfZ2V0X2luc3Rfc2l6ZSwKKwkuZ2V0X2RhdGFfc2l6ZSA9IGl3bDUwMDBfdWNvZGVfZ2V0X2RhdGFfc2l6ZSwKKwkuZ2V0X2luaXRfc2l6ZSA9IGl3bDUwMDBfdWNvZGVfZ2V0X2luaXRfc2l6ZSwKKwkuZ2V0X2luaXRfZGF0YV9zaXplID0gaXdsNTAwMF91Y29kZV9nZXRfaW5pdF9kYXRhX3NpemUsCisJLmdldF9ib290X3NpemUgPSBpd2w1MDAwX3Vjb2RlX2dldF9ib290X3NpemUsCisJLmdldF9kYXRhID0gaXdsNTAwMF91Y29kZV9nZXRfZGF0YSwKK307CisKIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYiA9IHsKIAkuc2V0X2h3X3BhcmFtcyA9IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcywKIAkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLApAQCAtMTQ3Myw4ICsxNTQ4LDggQEAKIAkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzNfQ0hBTk5FTFMsCiAJCQlFRVBST01fNTAwMF9SRUdfQkFORF80X0NIQU5ORUxTLAogCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNV9DSEFOTkVMUywKLQkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzI0X0ZBVF9DSEFOTkVMUywKLQkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzUyX0ZBVF9DSEFOTkVMUworCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfMjRfSFQ0MF9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzUyX0hUNDBfQ0hBTk5FTFMKIAkJfSwKIAkJLnZlcmlmeV9zaWduYXR1cmUgID0gaXdsY29yZV9lZXByb21fdmVyaWZ5X3NpZ25hdHVyZSwKIAkJLmFjcXVpcmVfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUsCkBAIC0xNTIzLDggKzE1OTgsOCBAQAogCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfM19DSEFOTkVMUywKIAkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzRfQ0hBTk5FTFMsCiAJCQlFRVBST01fNTAwMF9SRUdfQkFORF81X0NIQU5ORUxTLAotCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfMjRfRkFUX0NIQU5ORUxTLAotCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNTJfRkFUX0NIQU5ORUxTCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF8yNF9IVDQwX0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNTJfSFQ0MF9DSEFOTkVMUwogCQl9LAogCQkudmVyaWZ5X3NpZ25hdHVyZSAgPSBpd2xjb3JlX2VlcHJvbV92ZXJpZnlfc2lnbmF0dXJlLAogCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKQEAgLTE1NDIsMTIgKzE2MTcsMTQgQEAKIH07CiAKIHN0cnVjdCBpd2xfb3BzIGl3bDUwMDBfb3BzID0geworCS51Y29kZSA9ICZpd2w1MDAwX3Vjb2RlLAogCS5saWIgPSAmaXdsNTAwMF9saWIsCiAJLmhjbWQgPSAmaXdsNTAwMF9oY21kLAogCS51dGlscyA9ICZpd2w1MDAwX2hjbWRfdXRpbHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNTE1MF9vcHMgPSB7CisJLnVjb2RlID0gJml3bDUwMDBfdWNvZGUsCiAJLmxpYiA9ICZpd2w1MTUwX2xpYiwKIAkuaGNtZCA9ICZpd2w1MDAwX2hjbWQsCiAJLnV0aWxzID0gJml3bDUwMDBfaGNtZF91dGlscywKQEAgLTE1NzYsNiArMTY1Myw3IEBACiAJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCiAJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCiAJLm5lZWRfcGxsX2NmZyA9IHRydWUsCisJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2JnX2NmZyA9IHsKQEAgLTE1OTIsNiArMTY3MCw3IEBACiAJLnZhbGlkX3R4X2FudCA9IEFOVF9CLAogCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCiAJLm5lZWRfcGxsX2NmZyA9IHRydWUsCisJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2FiZ19jZmcgPSB7CkBAIC0xNjA4LDYgKzE2ODcsNyBAQAogCS52YWxpZF90eF9hbnQgPSBBTlRfQiwKIAkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAogCS5uZWVkX3BsbF9jZmcgPSB0cnVlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9hZ25fY2ZnID0gewpAQCAtMTYyNCw2ICsxNzA0LDcgQEAKIAkudmFsaWRfdHhfYW50ID0gQU5UX0IsCiAJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKIAkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKKwkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUzNTBfYWduX2NmZyA9IHsKQEAgLTE2NDAsNiArMTcyMSw3IEBACiAJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCiAJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCiAJLm5lZWRfcGxsX2NmZyA9IHRydWUsCisJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTUwX2Fnbl9jZmcgPSB7CkBAIC0xNjU2LDYgKzE3MzgsNyBAQAogCS52YWxpZF90eF9hbnQgPSBBTlRfQSwKIAkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAogCS5uZWVkX3BsbF9jZmcgPSB0cnVlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAogfTsKIAogTU9EVUxFX0ZJUk1XQVJFKElXTDUwMDBfTU9EVUxFX0ZJUk1XQVJFKElXTDUwMDBfVUNPREVfQVBJX01BWCkpOwpAQCAtMTY2NCw4ICsxNzQ3LDYgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChzd2NyeXB0bzUwLCBpd2w1MF9tb2RfcGFyYW1zLnN3X2NyeXB0bywgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHN3Y3J5cHRvNTAsCiAJCSAgInVzaW5nIHNvZnR3YXJlIGNyeXB0byBlbmdpbmUgKGRlZmF1bHQgMCBbaGFyZHdhcmVdKVxuIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWc1MCwgaXdsNTBfbW9kX3BhcmFtcy5kZWJ1ZywgdWludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnNTAsICI1MFhYIGRlYnVnIG91dHB1dCBtYXNrIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQocXVldWVzX251bTUwLCBpd2w1MF9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHF1ZXVlc19udW01MCwgIm51bWJlciBvZiBodyBxdWV1ZXMgaW4gNTB4eCBzZXJpZXMiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZCgxMW5fZGlzYWJsZTUwLCBpd2w1MF9tb2RfcGFyYW1zLmRpc2FibGVfMTFuLCBpbnQsIDA0NDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCmluZGV4IGJkNDM4ZDguLjgyYjljOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKQEAgLTQ2LDggKzQ2LDggQEAKICNpbmNsdWRlICJpd2wtNTAwMC1ody5oIgogCiAvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwotI2RlZmluZSBJV0w2MDAwX1VDT0RFX0FQSV9NQVggMgotI2RlZmluZSBJV0w2MDUwX1VDT0RFX0FQSV9NQVggMgorI2RlZmluZSBJV0w2MDAwX1VDT0RFX0FQSV9NQVggNAorI2RlZmluZSBJV0w2MDUwX1VDT0RFX0FQSV9NQVggNAogCiAvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCiAjZGVmaW5lIElXTDYwMDBfVUNPREVfQVBJX01JTiAxCkBAIC02MSw2ICs2MSw4MiBAQAogI2RlZmluZSBfSVdMNjA1MF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDUwX0ZXX1BSRSAjYXBpICIudWNvZGUiCiAjZGVmaW5lIElXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKIAorc3RhdGljIHZvaWQgaXdsNjAwMF9zZXRfY3RfdGhyZXNob2xkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwkvKiB3YW50IENlbHNpdXMgKi8KKwlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDVF9LSUxMX1RIUkVTSE9MRDsKKwlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF9leGl0X3RocmVzaG9sZCA9IENUX0tJTExfRVhJVF9USFJFU0hPTEQ7Cit9CisKKy8qIE5JQyBjb25maWd1cmF0aW9uIGZvciA2MDAwIHNlcmllcyAqLworc3RhdGljIHZvaWQgaXdsNjAwMF9uaWNfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpd2w1MDAwX25pY19jb25maWcocHJpdik7CisKKwkvKiBubyBsb2NraW5nIHJlcXVpcmVkIGZvciByZWdpc3RlciB3cml0ZSAqLworCWlmIChwcml2LT5jZmctPnBhX3R5cGUgPT0gSVdMX1BBX0hZQlJJRCkgeworCQkvKiAyeDIgaHlicmlkIHBoeSB0eXBlICovCisJCWl3bF93cml0ZTMyKHByaXYsIENTUl9HUF9EUklWRVJfUkVHLAorCQkJICAgICBDU1JfR1BfRFJJVkVSX1JFR19CSVRfUkFESU9fU0tVXzJ4Ml9IWUIpOworCX0gZWxzZSBpZiAocHJpdi0+Y2ZnLT5wYV90eXBlID09IElXTF9QQV9JTlRFUk5BTCkgeworCQkvKiAyeDIgSVBBIHBoeSB0eXBlICovCisJCWl3bF93cml0ZTMyKHByaXYsIENTUl9HUF9EUklWRVJfUkVHLAorCQkJICAgICBDU1JfR1BfRFJJVkVSX1JFR19CSVRfUkFESU9fU0tVXzJ4Ml9JUEEpOworCX0KKwkvKiBlbHNlIGRvIG5vdGhpbmcsIHVDb2RlIGNvbmZpZ3VyZWQgKi8KK30KKworc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2w2MDAwX2xpYiA9IHsKKwkuc2V0X2h3X3BhcmFtcyA9IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcywKKwkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAorCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAorCS50eHFfc2V0X3NjaGVkID0gaXdsNTAwMF90eHFfc2V0X3NjaGVkLAorCS50eHFfYWdnX2VuYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19lbmFibGUsCisJLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19kaXNhYmxlLAorCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAorCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAorCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAorCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsNTAwMF9yeF9oYW5kbGVyX3NldHVwLAorCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsNTAwMF9zZXR1cF9kZWZlcnJlZF93b3JrLAorCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyLAorCS5sb2FkX3Vjb2RlID0gaXdsNTAwMF9sb2FkX3Vjb2RlLAorCS5pbml0X2FsaXZlX3N0YXJ0ID0gaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0LAorCS5hbGl2ZV9ub3RpZnkgPSBpd2w1MDAwX2FsaXZlX25vdGlmeSwKKwkuc2VuZF90eF9wb3dlciA9IGl3bDUwMDBfc2VuZF90eF9wb3dlciwKKwkudXBkYXRlX2NoYWluX2ZsYWdzID0gaXdsX3VwZGF0ZV9jaGFpbl9mbGFncywKKwkuYXBtX29wcyA9IHsKKwkJLmluaXQgPQlpd2w1MDAwX2FwbV9pbml0LAorCQkucmVzZXQgPSBpd2w1MDAwX2FwbV9yZXNldCwKKwkJLnN0b3AgPSBpd2w1MDAwX2FwbV9zdG9wLAorCQkuY29uZmlnID0gaXdsNjAwMF9uaWNfY29uZmlnLAorCQkuc2V0X3B3cl9zcmMgPSBpd2xfc2V0X3B3cl9zcmMsCisJfSwKKwkuZWVwcm9tX29wcyA9IHsKKwkJLnJlZ3VsYXRvcnlfYmFuZHMgPSB7CisJCQlFRVBST01fNTAwMF9SRUdfQkFORF8xX0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfMl9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzNfQ0hBTk5FTFMsCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF80X0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNV9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzI0X0hUNDBfQ0hBTk5FTFMsCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF81Ml9IVDQwX0NIQU5ORUxTCisJCX0sCisJCS52ZXJpZnlfc2lnbmF0dXJlICA9IGl3bGNvcmVfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUsCisJCS5hY3F1aXJlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlLAorCQkucmVsZWFzZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZSwKKwkJLmNhbGliX3ZlcnNpb24JPSBpd2w1MDAwX2VlcHJvbV9jYWxpYl92ZXJzaW9uLAorCQkucXVlcnlfYWRkciA9IGl3bDUwMDBfZWVwcm9tX3F1ZXJ5X2FkZHIsCisJCS51cGRhdGVfZW5oYW5jZWRfdHhwb3dlciA9IGl3bGNvcmVfZWVwcm9tX2VuaGFuY2VkX3R4cG93ZXIsCisJfSwKKwkucG9zdF9hc3NvY2lhdGUgPSBpd2xfcG9zdF9hc3NvY2lhdGUsCisJLmlzciA9IGl3bF9pc3JfaWN0LAorCS5jb25maWdfYXAgPSBpd2xfY29uZmlnX2FwLAorCS50ZW1wX29wcyA9IHsKKwkJLnRlbXBlcmF0dXJlID0gaXdsNTAwMF90ZW1wZXJhdHVyZSwKKwkJLnNldF9jdF9raWxsID0gaXdsNjAwMF9zZXRfY3RfdGhyZXNob2xkLAorCSB9LAorfTsKKwogc3RhdGljIHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsNjAwMF9oY21kX3V0aWxzID0gewogCS5nZXRfaGNtZF9zaXplID0gaXdsNTAwMF9nZXRfaGNtZF9zaXplLAogCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bDUwMDBfYnVpbGRfYWRkc3RhX2hjbWQsCkBAIC02OSw0MSArMTQ1LDU3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNjAwMF9vcHMgPSB7Ci0JLmxpYiA9ICZpd2w1MDAwX2xpYiwKKwkudWNvZGUgPSAmaXdsNTAwMF91Y29kZSwKKwkubGliID0gJml3bDYwMDBfbGliLAogCS5oY21kID0gJml3bDUwMDBfaGNtZCwKIAkudXRpbHMgPSAmaXdsNjAwMF9oY21kX3V0aWxzLAogfTsKIAotc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWdfY2ZnID0gewotCS5uYW1lID0gIjYwMDAgU2VyaWVzIDJ4MiBBRyIsCi0JLmZ3X25hbWVfcHJlID0gSVdMNjAwMF9GV19QUkUsCi0JLnVjb2RlX2FwaV9tYXggPSBJV0w2MDAwX1VDT0RFX0FQSV9NQVgsCi0JLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCi0JLm9wcyA9ICZpd2w2MDAwX29wcywKLQkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCi0JLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKLQkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCi0JLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKLQkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAotCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCi0JLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAotfTsKIAotc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWduX2NmZyA9IHsKKy8qCisgKiAiaCI6IEh5YnJpZCBjb25maWd1cmF0aW9uLCB1c2UgYm90aCBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgUG93ZXIgQW1wbGlmaWVyCisgKi8KK3N0cnVjdCBpd2xfY2ZnIGl3bDYwMDBoXzJhZ25fY2ZnID0gewogCS5uYW1lID0gIjYwMDAgU2VyaWVzIDJ4MiBBR04iLAogCS5md19uYW1lX3ByZSA9IElXTDYwMDBfRldfUFJFLAogCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMF9VQ09ERV9BUElfTUFYLAogCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMF9VQ09ERV9BUElfTUlOLAogCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKIAkub3BzID0gJml3bDYwMDBfb3BzLAotCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKIAkudmFsaWRfdHhfYW50ID0gQU5UX0FCLAogCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCiAJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorCS5wYV90eXBlID0gSVdMX1BBX0hZQlJJRCwKKwkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU182eDAwLAorCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAorfTsKKworLyoKKyAqICJpIjogSW50ZXJuYWwgY29uZmlndXJhdGlvbiwgdXNlIGludGVybmFsIFBvd2VyIEFtcGxpZmllcgorICovCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwaV8yYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAyeDIgQUdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDAwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwMDBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwMDBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCisJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorCS5wYV90eXBlID0gSVdMX1BBX0lOVEVSTkFMLAorCS5tYXhfbGxfaXRlbXMgPSBPVFBfTUFYX0xMX0lURU1TXzZ4MDAsCisJLnNoYWRvd19yYW1fc3VwcG9ydCA9IHRydWUsCisJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhZ25fY2ZnID0gewpAQCAtMTEzLDEzICsyMDUsMTcgQEAKIAkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwKIAkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCiAJLm9wcyA9ICZpd2w2MDAwX29wcywKLQkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV9zaXplID0gT1RQX0xPV19JTUFHRV9TSVpFLAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCiAJLnZhbGlkX3R4X2FudCA9IEFOVF9BQiwKIAkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAogCS5uZWVkX3BsbF9jZmcgPSBmYWxzZSwKKwkucGFfdHlwZSA9IElXTF9QQV9TWVNURU0sCisJLm1heF9sbF9pdGVtcyA9IE9UUF9NQVhfTExfSVRFTVNfNngwMCwKKwkuc2hhZG93X3JhbV9zdXBwb3J0ID0gdHJ1ZSwKKwkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfM2Fnbl9jZmcgPSB7CkBAIC0xMjksMTMgKzIyNSwxNyBAQAogCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMF9VQ09ERV9BUElfTUlOLAogCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKIAkub3BzID0gJml3bDYwMDBfb3BzLAotCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKIAkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywKIAkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKIAkubmVlZF9wbGxfY2ZnID0gZmFsc2UsCisJLnBhX3R5cGUgPSBJV0xfUEFfU1lTVEVNLAorCS5tYXhfbGxfaXRlbXMgPSBPVFBfTUFYX0xMX0lURU1TXzZ4MDAsCisJLnNoYWRvd19yYW1fc3VwcG9ydCA9IHRydWUsCisJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzNhZ25fY2ZnID0gewpAQCAtMTQ1LDEzICsyNDUsMTcgQEAKIAkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwKIAkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCiAJLm9wcyA9ICZpd2w2MDAwX29wcywKLQkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV9zaXplID0gT1RQX0xPV19JTUFHRV9TSVpFLAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCiAJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCiAJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCiAJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorCS5wYV90eXBlID0gSVdMX1BBX1NZU1RFTSwKKwkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU182eDAwLAorCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAogfTsKIAogTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBfTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBfVUNPREVfQVBJX01BWCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwppbmRleCBmZjIwZTUwNC4uNDBiMjA3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAllbnVtIGl3bF90YWJsZV90eXBlIGxxX3R5cGU7CiAJdTggYW50X3R5cGU7CiAJdTggaXNfU0dJOwkvKiAxID0gc2hvcnQgZ3VhcmQgaW50ZXJ2YWwgKi8KLQl1OCBpc19mYXQ7CS8qIDEgPSA0MCBNSHogY2hhbm5lbCB3aWR0aCAqLworCXU4IGlzX2h0NDA7CS8qIDEgPSA0MCBNSHogY2hhbm5lbCB3aWR0aCAqLwogCXU4IGlzX2R1cDsJLyogMSA9IGR1cGxpY2F0ZWQgZGF0YSBzdHJlYW1zICovCiAJdTggYWN0aW9uOwkvKiBjaGFuZ2UgbW9kdWxhdGlvbjsgSVdMX1tMRUdBQ1kvU0lTTy9NSU1PXV9TV0lUQ0hfKiAqLwogCXU4IG1heF9zZWFyY2g7CS8qIG1heGltdW4gbnVtYmVyIG9mIHRhYmxlcyB3ZSBjYW4gc2VhcmNoICovCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkJICAgc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSk7Ci1zdGF0aWMgdm9pZCByc19maWxsX2xpbmtfY21kKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIHJzX2ZpbGxfbGlua19jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhLCB1MzIgcmF0ZV9uX2ZsYWdzKTsKIAogCkBAIC0zMzIsNiArMzMyLDkgQEAKIAl9IGVsc2UKIAkJcmV0dXJuIE1BWF9USURfQ09VTlQ7CiAKKwlpZiAodW5saWtlbHkodGlkID49IFRJRF9NQVhfTE9BRF9DT1VOVCkpCisJCXJldHVybiBNQVhfVElEX0NPVU5UOworCiAJdGwgPSAmbHFfZGF0YS0+bG9hZFt0aWRdOwogCiAJY3Vycl90aW1lIC09IGN1cnJfdGltZSAlIFRJRF9ST1VORF9WQUxVRTsKQEAgLTUzOSwxMSArNTQyLDExIEBACiAJCQkJCQkgICAgIFJBVEVfTUNTX0FOVF9BQkNfTVNLKTsKIAogCWlmIChpc19IdCh0YmwtPmxxX3R5cGUpKSB7Ci0JCWlmICh0YmwtPmlzX2ZhdCkgeworCQlpZiAodGJsLT5pc19odDQwKSB7CiAJCQlpZiAodGJsLT5pc19kdXApCiAJCQkJcmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0RVUF9NU0s7CiAJCQllbHNlCi0JCQkJcmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0ZBVF9NU0s7CisJCQkJcmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0hUNDBfTVNLOwogCQl9CiAJCWlmICh0YmwtPmlzX1NHSSkKIAkJCXJhdGVfbl9mbGFncyB8PSBSQVRFX01DU19TR0lfTVNLOwpAQCAtNTc5LDcgKzU4Miw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAl0YmwtPmlzX1NHSSA9IDA7CS8qIGRlZmF1bHQgbGVnYWN5IHNldHVwICovCi0JdGJsLT5pc19mYXQgPSAwOworCXRibC0+aXNfaHQ0MCA9IDA7CiAJdGJsLT5pc19kdXAgPSAwOwogCXRibC0+YW50X3R5cGUgPSAoYW50X21zayA+PiBSQVRFX01DU19BTlRfUE9TKTsKIAl0YmwtPmxxX3R5cGUgPSBMUV9OT05FOwpAQCAtNTk4LDkgKzYwMSw5IEBACiAJCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19TR0lfTVNLKQogCQkJdGJsLT5pc19TR0kgPSAxOwogCi0JCWlmICgocmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfRkFUX01TSykgfHwKKwkJaWYgKChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19IVDQwX01TSykgfHwKIAkJICAgIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19EVVBfTVNLKSkKLQkJCXRibC0+aXNfZmF0ID0gMTsKKwkJCXRibC0+aXNfaHQ0MCA9IDE7CiAKIAkJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0RVUF9NU0spCiAJCQl0YmwtPmlzX2R1cCA9IDE7CkBAIC02NTQsMTkgKzY1NywxNSBAQAogCXJldHVybiAxOwogfQogCi0vKiBpbiA0OTY1IHdlIGRvbid0IHVzZSBncmVlbmZpZWxkIGF0IGFsbCAqLwotc3RhdGljIGlubGluZSB1OCByc191c2VfZ3JlZW4oc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQorLyoqCisgKiBHcmVlbi1maWVsZCBtb2RlIGlzIHZhbGlkIGlmIHRoZSBzdGF0aW9uIHN1cHBvcnRzIGl0IGFuZAorICogdGhlcmUgYXJlIG5vIG5vbi1HRiBzdGF0aW9ucyBwcmVzZW50IGluIHRoZSBCU1MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggcnNfdXNlX2dyZWVuKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICAgICBzdHJ1Y3QgaXdsX2h0X2luZm8gKmh0X2NvbmYpCiB7Ci0JdTggaXNfZ3JlZW47Ci0KLQlpZiAoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spID09IENTUl9IV19SRVZfVFlQRV80OTY1KQotCQlpc19ncmVlbiA9IDA7Ci0JZWxzZQotCQlpc19ncmVlbiA9IChjb25mX2lzX2h0KGNvbmYpICYmCi0JCQkgICBwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5pc19ncmVlbl9maWVsZCAmJgotCQkJICAgIXByaXYtPmN1cnJlbnRfaHRfY29uZmlnLm5vbl9HRl9TVEFfcHJlc2VudCk7Ci0JcmV0dXJuIGlzX2dyZWVuOworCXJldHVybiAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEKSAmJgorCQkhKGh0X2NvbmYtPm5vbl9HRl9TVEFfcHJlc2VudCk7CiB9CiAKIC8qKgpAQCAtNzc2LDcgKzc3NSw3IEBACiAJCWlmIChudW1fb2ZfYW50KHRibC0+YW50X3R5cGUpID4gMSkKIAkJCXRibC0+YW50X3R5cGUgPSBBTlRfQTsvKkZJWE1FOlJTKi8KIAotCQl0YmwtPmlzX2ZhdCA9IDA7CisJCXRibC0+aXNfaHQ0MCA9IDA7CiAJCXRibC0+aXNfU0dJID0gMDsKIAkJdGJsLT5tYXhfc2VhcmNoID0gSVdMX01BWF9TRUFSQ0g7CiAJfQpAQCAtODE5LDE1ICs4MTgsMTUgQEAKIHsKIAlpbnQgc3RhdHVzOwogCXU4IHJldHJpZXM7Ci0JaW50IHJzX2luZGV4LCBpbmRleCA9IDA7CisJaW50IHJzX2luZGV4LCBtYWNfaW5kZXgsIGluZGV4ID0gMDsKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gcHJpdl9zdGE7CiAJc3RydWN0IGl3bF9saW5rX3F1YWxpdHlfY21kICp0YWJsZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilwcml2X3I7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwcml2LT5odzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGl3bF9yYXRlX3NjYWxlX2RhdGEgKndpbmRvdyA9IE5VTEw7CiAJc3RydWN0IGl3bF9yYXRlX3NjYWxlX2RhdGEgKnNlYXJjaF93aW4gPSBOVUxMOworCWVudW0gbWFjODAyMTFfcmF0ZV9jb250cm9sX2ZsYWdzIG1hY19mbGFnczsKIAl1MzIgdHhfcmF0ZTsKIAlzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvIHRibF90eXBlOwogCXN0cnVjdCBpd2xfc2NhbGVfdGJsX2luZm8gKmN1cnJfdGJsLCAqc2VhcmNoX3RibDsKQEAgLTg3NywxNyArODc2LDI0IEBACiAJcnNfZ2V0X3RibF9pbmZvX2Zyb21fbWNzKHR4X3JhdGUsIHByaXYtPmJhbmQsICZ0YmxfdHlwZSwgJnJzX2luZGV4KTsKIAlpZiAocHJpdi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQlyc19pbmRleCAtPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCW1hY19mbGFncyA9IGluZm8tPnN0YXR1cy5yYXRlc1swXS5mbGFnczsKKwltYWNfaW5kZXggPSBpbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4OworCS8qIEZvciBIVCBwYWNrZXRzLCBtYXAgTUNTIHRvIFBMQ1AgKi8KKwlpZiAobWFjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykgeworCQltYWNfaW5kZXggJj0gUkFURV9NQ1NfQ09ERV9NU0s7CS8qIFJlbW92ZSAjIG9mIHN0cmVhbXMgKi8KKwkJaWYgKG1hY19pbmRleCA+PSAoSVdMX1JBVEVfOU1fSU5ERVggLSBJV0xfRklSU1RfT0ZETV9SQVRFKSkKKwkJCW1hY19pbmRleCsrOworCX0KIAotCWlmICgoaW5mby0+c3RhdHVzLnJhdGVzWzBdLmlkeCA8IDApIHx8Ci0JICAgICh0YmxfdHlwZS5pc19TR0kgIT0gISEoaW5mby0+c3RhdHVzLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKSkgfHwKLQkgICAgKHRibF90eXBlLmlzX2ZhdCAhPSAhIShpbmZvLT5zdGF0dXMucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSkgfHwKLQkgICAgKHRibF90eXBlLmlzX2R1cCAhPSAhIShpbmZvLT5zdGF0dXMucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpKSB8fAorCWlmICgobWFjX2luZGV4IDwgMCkgfHwKKwkgICAgKHRibF90eXBlLmlzX1NHSSAhPSAhIShtYWNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpKSB8fAorCSAgICAodGJsX3R5cGUuaXNfaHQ0MCAhPSAhIShtYWNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSkgfHwKKwkgICAgKHRibF90eXBlLmlzX2R1cCAhPSAhIShtYWNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpKSB8fAogCSAgICAodGJsX3R5cGUuYW50X3R5cGUgIT0gaW5mby0+YW50ZW5uYV9zZWxfdHgpIHx8Ci0JICAgICghISh0eF9yYXRlICYgUkFURV9NQ1NfSFRfTVNLKSAhPSAhIShpbmZvLT5zdGF0dXMucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSkgfHwKLQkgICAgKCEhKHR4X3JhdGUgJiBSQVRFX01DU19HRl9NU0spICE9ICEhKGluZm8tPnN0YXR1cy5yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19HUkVFTl9GSUVMRCkpIHx8Ci0JICAgIChody0+d2lwaHktPmJhbmRzW3ByaXYtPmJhbmRdLT5iaXRyYXRlc1tyc19pbmRleF0uYml0cmF0ZSAhPQotCSAgICAgaHctPndpcGh5LT5iYW5kc1tpbmZvLT5iYW5kXS0+Yml0cmF0ZXNbaW5mby0+c3RhdHVzLnJhdGVzWzBdLmlkeF0uYml0cmF0ZSkpIHsKLQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImluaXRpYWwgcmF0ZSBkb2VzIG5vdCBtYXRjaCAweCV4XG4iLCB0eF9yYXRlKTsKKwkgICAgKCEhKHR4X3JhdGUgJiBSQVRFX01DU19IVF9NU0spICE9ICEhKG1hY19mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpKSB8fAorCSAgICAoISEodHhfcmF0ZSAmIFJBVEVfTUNTX0dGX01TSykgIT0gISEobWFjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEKSkgfHwKKwkgICAgKHJzX2luZGV4ICE9IG1hY19pbmRleCkpIHsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImluaXRpYWwgcmF0ZSAlZCBkb2VzIG5vdCBtYXRjaCAlZCAoMHgleClcbiIsIG1hY19pbmRleCwgcnNfaW5kZXgsIHR4X3JhdGUpOwogCQkvKiB0aGUgbGFzdCBMUSBjb21tYW5kIGNvdWxkIGZhaWxlZCBzbyB0aGUgTFEgaW4gdWNvZGUgbm90CiAJCSAqIHRoZSBzYW1lIGluIGRyaXZlciBzeW5jIHVwCiAJCSAqLwpAQCAtMTA0OSw3ICsxMDU1LDcgQEAKIAkJZWxzZQogCQkJdGJsLT5leHBlY3RlZF90cHQgPSBleHBlY3RlZF90cHRfQTsKIAl9IGVsc2UgaWYgKGlzX3Npc28odGJsLT5scV90eXBlKSkgewotCQlpZiAodGJsLT5pc19mYXQgJiYgIWxxX3N0YS0+aXNfZHVwKQorCQlpZiAodGJsLT5pc19odDQwICYmICFscV9zdGEtPmlzX2R1cCkKIAkJCWlmICh0YmwtPmlzX1NHSSkKIAkJCQl0YmwtPmV4cGVjdGVkX3RwdCA9IGV4cGVjdGVkX3RwdF9zaXNvNDBNSHpTR0k7CiAJCQllbHNlCkBAIC0xMDU5LDcgKzEwNjUsNyBAQAogCQllbHNlCiAJCQl0YmwtPmV4cGVjdGVkX3RwdCA9IGV4cGVjdGVkX3RwdF9zaXNvMjBNSHo7CiAJfSBlbHNlIGlmIChpc19taW1vMih0YmwtPmxxX3R5cGUpKSB7Ci0JCWlmICh0YmwtPmlzX2ZhdCAmJiAhbHFfc3RhLT5pc19kdXApCisJCWlmICh0YmwtPmlzX2h0NDAgJiYgIWxxX3N0YS0+aXNfZHVwKQogCQkJaWYgKHRibC0+aXNfU0dJKQogCQkJCXRibC0+ZXhwZWN0ZWRfdHB0ID0gZXhwZWN0ZWRfdHB0X21pbW8yXzQwTUh6U0dJOwogCQkJZWxzZQpAQCAtMTA2OSw3ICsxMDc1LDcgQEAKIAkJZWxzZQogCQkJdGJsLT5leHBlY3RlZF90cHQgPSBleHBlY3RlZF90cHRfbWltbzJfMjBNSHo7CiAJfSBlbHNlIGlmIChpc19taW1vMyh0YmwtPmxxX3R5cGUpKSB7Ci0JCWlmICh0YmwtPmlzX2ZhdCAmJiAhbHFfc3RhLT5pc19kdXApCisJCWlmICh0YmwtPmlzX2h0NDAgJiYgIWxxX3N0YS0+aXNfZHVwKQogCQkJaWYgKHRibC0+aXNfU0dJKQogCQkJCXRibC0+ZXhwZWN0ZWRfdHB0ID0gZXhwZWN0ZWRfdHB0X21pbW8zXzQwTUh6U0dJOwogCQkJZWxzZQpAQCAtMTIxNywyMiArMTIyMywxMCBAQAogCXRibC0+bWF4X3NlYXJjaCA9IElXTF9NQVhfU0VBUkNIOwogCXJhdGVfbWFzayA9IGxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGU7CiAKLQlpZiAoaXdsX2lzX2ZhdF90eF9hbGxvd2VkKHByaXYsICZzdGEtPmh0X2NhcCkpCi0JCXRibC0+aXNfZmF0ID0gMTsKKwlpZiAoaXdsX2lzX2h0NDBfdHhfYWxsb3dlZChwcml2LCAmc3RhLT5odF9jYXApKQorCQl0YmwtPmlzX2h0NDAgPSAxOwogCWVsc2UKLQkJdGJsLT5pc19mYXQgPSAwOwotCi0JLyogRklYTUU6IC0gZG9uJ3QgdG9nZ2xlIFNHSSBoZXJlCi0JaWYgKHRibC0+aXNfZmF0KSB7Ci0JCWlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJiBIVF9TSE9SVF9HSV80ME1IWl9PTkxZKQotCQkJdGJsLT5pc19TR0kgPSAxOwotCQllbHNlCi0JCQl0YmwtPmlzX1NHSSA9IDA7Ci0JfSBlbHNlIGlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJiBIVF9TSE9SVF9HSV8yME1IWl9PTkxZKQotCQl0YmwtPmlzX1NHSSA9IDE7Ci0JZWxzZQotCQl0YmwtPmlzX1NHSSA9IDA7Ci0JKi8KKwkJdGJsLT5pc19odDQwID0gMDsKIAogCXJzX3NldF9leHBlY3RlZF90cHRfdGFibGUobHFfc3RhLCB0YmwpOwogCkBAIC0xMjgzLDIyICsxMjc3LDEwIEBACiAJdGJsLT5tYXhfc2VhcmNoID0gSVdMX01BWF8xMU5fTUlNTzNfU0VBUkNIOwogCXJhdGVfbWFzayA9IGxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGU7CiAKLQlpZiAoaXdsX2lzX2ZhdF90eF9hbGxvd2VkKHByaXYsICZzdGEtPmh0X2NhcCkpCi0JCXRibC0+aXNfZmF0ID0gMTsKKwlpZiAoaXdsX2lzX2h0NDBfdHhfYWxsb3dlZChwcml2LCAmc3RhLT5odF9jYXApKQorCQl0YmwtPmlzX2h0NDAgPSAxOwogCWVsc2UKLQkJdGJsLT5pc19mYXQgPSAwOwotCi0JLyogRklYTUU6IC0gZG9uJ3QgdG9nZ2xlIFNHSSBoZXJlCi0JaWYgKHRibC0+aXNfZmF0KSB7Ci0JCWlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJiBIVF9TSE9SVF9HSV80ME1IWl9PTkxZKQotCQkJdGJsLT5pc19TR0kgPSAxOwotCQllbHNlCi0JCQl0YmwtPmlzX1NHSSA9IDA7Ci0JfSBlbHNlIGlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJiBIVF9TSE9SVF9HSV8yME1IWl9PTkxZKQotCQl0YmwtPmlzX1NHSSA9IDE7Ci0JZWxzZQotCQl0YmwtPmlzX1NHSSA9IDA7Ci0JKi8KKwkJdGJsLT5pc19odDQwID0gMDsKIAogCXJzX3NldF9leHBlY3RlZF90cHRfdGFibGUobHFfc3RhLCB0YmwpOwogCkBAIC0xMzQyLDIyICsxMzI0LDEwIEBACiAJdGJsLT5tYXhfc2VhcmNoID0gSVdMX01BWF9TRUFSQ0g7CiAJcmF0ZV9tYXNrID0gbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlOwogCi0JaWYgKGl3bF9pc19mYXRfdHhfYWxsb3dlZChwcml2LCAmc3RhLT5odF9jYXApKQotCQl0YmwtPmlzX2ZhdCA9IDE7CisJaWYgKGl3bF9pc19odDQwX3R4X2FsbG93ZWQocHJpdiwgJnN0YS0+aHRfY2FwKSkKKwkJdGJsLT5pc19odDQwID0gMTsKIAllbHNlCi0JCXRibC0+aXNfZmF0ID0gMDsKLQotCS8qIEZJWE1FOiAtIGRvbid0IHRvZ2dsZSBTR0kgaGVyZQotCWlmICh0YmwtPmlzX2ZhdCkgewotCQlpZiAocHJpdi0+Y3VycmVudF9odF9jb25maWcuc2dmICYgSFRfU0hPUlRfR0lfNDBNSFpfT05MWSkKLQkJCXRibC0+aXNfU0dJID0gMTsKLQkJZWxzZQotCQkJdGJsLT5pc19TR0kgPSAwOwotCX0gZWxzZSBpZiAocHJpdi0+Y3VycmVudF9odF9jb25maWcuc2dmICYgSFRfU0hPUlRfR0lfMjBNSFpfT05MWSkKLQkJdGJsLT5pc19TR0kgPSAxOwotCWVsc2UKLQkJdGJsLT5pc19TR0kgPSAwOwotCSovCisJCXRibC0+aXNfaHQ0MCA9IDA7CiAKIAlpZiAoaXNfZ3JlZW4pCiAJCXRibC0+aXNfU0dJID0gMDsgLyoxMW4gc3BlYzogbm8gU0dJIGluIFNJU08rR3JlZW5maWVsZCovCkBAIC0xMzk4LDYgKzEzNjgsMTIgQEAKIAlpbnQgcmV0ID0gMDsKIAl1OCB1cGRhdGVfc2VhcmNoX3RibF9jb3VudGVyID0gMDsKIAorCWlmICghaXdsX2h0X2VuYWJsZWQocHJpdikpCisJCS8qIHN0YXkgaW4gTGVnYWN5ICovCisJCXRibC0+YWN0aW9uID0gSVdMX0xFR0FDWV9TV0lUQ0hfQU5URU5OQTE7CisJZWxzZSBpZiAoaXdsX3R4X2FudF9yZXN0cmljdGlvbihwcml2KSA9PSBJV0xfQU5UX09LX1NJTkdMRSAmJgorCQkgICB0YmwtPmFjdGlvbiA+IElXTF9MRUdBQ1lfU1dJVENIX1NJU08pCisJCXRibC0+YWN0aW9uID0gSVdMX0xFR0FDWV9TV0lUQ0hfU0lTTzsKIAlmb3IgKDsgOykgewogCQlscV9zdGEtPmFjdGlvbl9jb3VudGVyKys7CiAJCXN3aXRjaCAodGJsLT5hY3Rpb24pIHsKQEAgLTE1MjEsNiArMTQ5Nyw3IEBACiAJc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqc2VhcmNoX3RibCA9CiAJCQkJJihscV9zdGEtPmxxX2luZm9bKDEgLSBscV9zdGEtPmFjdGl2ZV90YmwpXSk7CiAJc3RydWN0IGl3bF9yYXRlX3NjYWxlX2RhdGEgKndpbmRvdyA9ICYodGJsLT53aW5baW5kZXhdKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCA9ICZzdGEtPmh0X2NhcDsKIAl1MzIgc3ogPSAoc2l6ZW9mKHN0cnVjdCBpd2xfc2NhbGVfdGJsX2luZm8pIC0KIAkJICAoc2l6ZW9mKHN0cnVjdCBpd2xfcmF0ZV9zY2FsZV9kYXRhKSAqIElXTF9SQVRFX0NPVU5UKSk7CiAJdTggc3RhcnRfYWN0aW9uID0gdGJsLT5hY3Rpb247CkBAIC0xNTI5LDYgKzE1MDYsMTEgQEAKIAl1OCB1cGRhdGVfc2VhcmNoX3RibF9jb3VudGVyID0gMDsKIAlpbnQgcmV0OwogCisJaWYgKGl3bF90eF9hbnRfcmVzdHJpY3Rpb24ocHJpdikgPT0gSVdMX0FOVF9PS19TSU5HTEUgJiYKKwkgICAgdGJsLT5hY3Rpb24gPiBJV0xfU0lTT19TV0lUQ0hfQU5URU5OQTIpIHsKKwkJLyogc3RheSBpbiBTSVNPICovCisJCXRibC0+YWN0aW9uID0gSVdMX1NJU09fU1dJVENIX0FOVEVOTkExOworCX0KIAlmb3IgKDs7KSB7CiAJCWxxX3N0YS0+YWN0aW9uX2NvdW50ZXIrKzsKIAkJc3dpdGNoICh0YmwtPmFjdGlvbikgewpAQCAtMTU3NSwxMyArMTU1NywxMSBAQAogCQkJCWdvdG8gb3V0OwogCQkJYnJlYWs7CiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX0dJOgotCQkJaWYgKCF0YmwtPmlzX2ZhdCAmJgotCQkJCSEocHJpdi0+Y3VycmVudF9odF9jb25maWcuc2dmICYKLQkJCQkJCUhUX1NIT1JUX0dJXzIwTUhaKSkKKwkJCWlmICghdGJsLT5pc19odDQwICYmICEoaHRfY2FwLT5jYXAgJgorCQkJCQkJSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApKQogCQkJCWJyZWFrOwotCQkJaWYgKHRibC0+aXNfZmF0ICYmCi0JCQkJIShwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJgotCQkJCQkJSFRfU0hPUlRfR0lfNDBNSFopKQorCQkJaWYgKHRibC0+aXNfaHQ0MCAmJiAhKGh0X2NhcC0+Y2FwICYKKwkJCQkJCUlFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSkKIAkJCQlicmVhazsKIAogCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBTSVNPIHRvZ2dsZSBTR0kvTkdJXG4iKTsKQEAgLTE2NTUsNiArMTYzNSw3IEBACiAJc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqc2VhcmNoX3RibCA9CiAJCQkJJihscV9zdGEtPmxxX2luZm9bKDEgLSBscV9zdGEtPmFjdGl2ZV90YmwpXSk7CiAJc3RydWN0IGl3bF9yYXRlX3NjYWxlX2RhdGEgKndpbmRvdyA9ICYodGJsLT53aW5baW5kZXhdKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCA9ICZzdGEtPmh0X2NhcDsKIAl1MzIgc3ogPSAoc2l6ZW9mKHN0cnVjdCBpd2xfc2NhbGVfdGJsX2luZm8pIC0KIAkJICAoc2l6ZW9mKHN0cnVjdCBpd2xfcmF0ZV9zY2FsZV9kYXRhKSAqIElXTF9SQVRFX0NPVU5UKSk7CiAJdTggc3RhcnRfYWN0aW9uID0gdGJsLT5hY3Rpb247CkBAIC0xNjYzLDYgKzE2NDQsMTIgQEAKIAl1OCB1cGRhdGVfc2VhcmNoX3RibF9jb3VudGVyID0gMDsKIAlpbnQgcmV0OwogCisJaWYgKChpd2xfdHhfYW50X3Jlc3RyaWN0aW9uKHByaXYpID09IElXTF9BTlRfT0tfU0lOR0xFKSAmJgorCSAgICAodGJsLT5hY3Rpb24gPCBJV0xfTUlNTzJfU1dJVENIX1NJU09fQSB8fAorCSAgICAgdGJsLT5hY3Rpb24gPiBJV0xfTUlNTzJfU1dJVENIX1NJU09fQykpIHsKKwkJLyogc3dpdGNoIGluIFNJU08gKi8KKwkJdGJsLT5hY3Rpb24gPSBJV0xfTUlNTzJfU1dJVENIX1NJU09fQTsKKwl9CiAJZm9yICg7OykgewogCQlscV9zdGEtPmFjdGlvbl9jb3VudGVyKys7CiAJCXN3aXRjaCAodGJsLT5hY3Rpb24pIHsKQEAgLTE3MDksMTMgKzE2OTYsMTEgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9HSToKLQkJCWlmICghdGJsLT5pc19mYXQgJiYKLQkJCQkhKHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnNnZiAmCi0JCQkJCQlIVF9TSE9SVF9HSV8yME1IWikpCisJCQlpZiAoIXRibC0+aXNfaHQ0MCAmJiAhKGh0X2NhcC0+Y2FwICYKKwkJCQkJCUlFRUU4MDIxMV9IVF9DQVBfU0dJXzIwKSkKIAkJCQlicmVhazsKLQkJCWlmICh0YmwtPmlzX2ZhdCAmJgotCQkJCSEocHJpdi0+Y3VycmVudF9odF9jb25maWcuc2dmICYKLQkJCQkJCUhUX1NIT1JUX0dJXzQwTUhaKSkKKwkJCWlmICh0YmwtPmlzX2h0NDAgJiYgIShodF9jYXAtPmNhcCAmCisJCQkJCQlJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCkpCiAJCQkJYnJlYWs7CiAKIAkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTUlNTzIgdG9nZ2xlIFNHSS9OR0lcbiIpOwpAQCAtMTc5MSw2ICsxNzc2LDcgQEAKIAlzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvICpzZWFyY2hfdGJsID0KIAkJCQkmKGxxX3N0YS0+bHFfaW5mb1soMSAtIGxxX3N0YS0+YWN0aXZlX3RibCldKTsKIAlzdHJ1Y3QgaXdsX3JhdGVfc2NhbGVfZGF0YSAqd2luZG93ID0gJih0YmwtPndpbltpbmRleF0pOworCXN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfY2FwID0gJnN0YS0+aHRfY2FwOwogCXUzMiBzeiA9IChzaXplb2Yoc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbykgLQogCQkgIChzaXplb2Yoc3RydWN0IGl3bF9yYXRlX3NjYWxlX2RhdGEpICogSVdMX1JBVEVfQ09VTlQpKTsKIAl1OCBzdGFydF9hY3Rpb24gPSB0YmwtPmFjdGlvbjsKQEAgLTE3OTksNiArMTc4NSwxMiBAQAogCWludCByZXQ7CiAJdTggdXBkYXRlX3NlYXJjaF90YmxfY291bnRlciA9IDA7CiAKKwlpZiAoKGl3bF90eF9hbnRfcmVzdHJpY3Rpb24ocHJpdikgPT0gSVdMX0FOVF9PS19TSU5HTEUpICYmCisJICAgICh0YmwtPmFjdGlvbiA8IElXTF9NSU1PM19TV0lUQ0hfU0lTT19BIHx8CisJICAgICB0YmwtPmFjdGlvbiA+IElXTF9NSU1PM19TV0lUQ0hfU0lTT19DKSkgeworCQkvKiBzd2l0Y2ggaW4gU0lTTyAqLworCQl0YmwtPmFjdGlvbiA9IElXTF9NSU1PM19TV0lUQ0hfU0lTT19BOworCX0KIAlmb3IgKDs7KSB7CiAJCWxxX3N0YS0+YWN0aW9uX2NvdW50ZXIrKzsKIAkJc3dpdGNoICh0YmwtPmFjdGlvbikgewpAQCAtMTg2NywxMyArMTg1OSwxMSBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBJV0xfTUlNTzNfU1dJVENIX0dJOgotCQkJaWYgKCF0YmwtPmlzX2ZhdCAmJgotCQkJCSEocHJpdi0+Y3VycmVudF9odF9jb25maWcuc2dmICYKLQkJCQkJCUhUX1NIT1JUX0dJXzIwTUhaKSkKKwkJCWlmICghdGJsLT5pc19odDQwICYmICEoaHRfY2FwLT5jYXAgJgorCQkJCQkJSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApKQogCQkJCWJyZWFrOwotCQkJaWYgKHRibC0+aXNfZmF0ICYmCi0JCQkJIShwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJgotCQkJCQkJSFRfU0hPUlRfR0lfNDBNSFopKQorCQkJaWYgKHRibC0+aXNfaHQ0MCAmJiAhKGh0X2NhcC0+Y2FwICYKKwkJCQkJCUlFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSkKIAkJCQlicmVhazsKIAogCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBNSU1PMyB0b2dnbGUgU0dJL05HSVxuIik7CkBAIC0yMDAzLDYgKzE5OTMsMjUgQEAKIH0KIAogLyoKKyAqIHNldHVwIHJhdGUgdGFibGUgaW4gdUNvZGUKKyAqIHJldHVybiByYXRlX25fZmxhZ3MgYXMgdXNlZCBpbiB0aGUgdGFibGUKKyAqLworc3RhdGljIHUzMiByc191cGRhdGVfcmF0ZV90Ymwoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEsCisJCQkJc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqdGJsLAorCQkJCWludCBpbmRleCwgdTggaXNfZ3JlZW4pCit7CisJdTMyIHJhdGU7CisKKwkvKiBVcGRhdGUgdUNvZGUncyByYXRlIHRhYmxlLiAqLworCXJhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgdGJsLCBpbmRleCwgaXNfZ3JlZW4pOworCXJzX2ZpbGxfbGlua19jbWQocHJpdiwgbHFfc3RhLCByYXRlKTsKKwlpd2xfc2VuZF9scV9jbWQocHJpdiwgJmxxX3N0YS0+bHEsIENNRF9BU1lOQyk7CisKKwlyZXR1cm4gcmF0ZTsKK30KKworLyoKICAqIERvIHJhdGUgc2NhbGluZyBhbmQgc2VhcmNoIGZvciBuZXcgbW9kdWxhdGlvbiBtb2RlLgogICovCiBzdGF0aWMgdm9pZCByc19yYXRlX3NjYWxlX3BlcmZvcm0oc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtMjA2Niw3ICsyMDc1LDcgQEAKIAlpZiAoaXNfbGVnYWN5KHRibC0+bHFfdHlwZSkpCiAJCWxxX3N0YS0+aXNfZ3JlZW4gPSAwOwogCWVsc2UKLQkJbHFfc3RhLT5pc19ncmVlbiA9IHJzX3VzZV9ncmVlbihwcml2LCBjb25mKTsKKwkJbHFfc3RhLT5pc19ncmVlbiA9IHJzX3VzZV9ncmVlbihzdGEsICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZyk7CiAJaXNfZ3JlZW4gPSBscV9zdGEtPmlzX2dyZWVuOwogCiAJLyogY3VycmVudCB0eCByYXRlICovCkBAIC0yMDk4LDYgKzIxMDcsMTYgQEAKIAogCWlmICghKCgxIDw8IGluZGV4KSAmIHJhdGVfc2NhbGVfaW5kZXhfbXNrKSkgewogCQlJV0xfRVJSKHByaXYsICJDdXJyZW50IFJhdGUgaXMgbm90IHZhbGlkXG4iKTsKKwkJaWYgKGxxX3N0YS0+c2VhcmNoX2JldHRlcl90YmwpIHsKKwkJCS8qIHJldmVydCB0byBhY3RpdmUgdGFibGUgaWYgc2VhcmNoIHRhYmxlIGlzIG5vdCB2YWxpZCovCisJCQl0YmwtPmxxX3R5cGUgPSBMUV9OT05FOworCQkJbHFfc3RhLT5zZWFyY2hfYmV0dGVyX3RibCA9IDA7CisJCQl0YmwgPSAmKGxxX3N0YS0+bHFfaW5mb1tscV9zdGEtPmFjdGl2ZV90YmxdKTsKKwkJCS8qIGdldCAiYWN0aXZlIiByYXRlIGluZm8gKi8KKwkJCWluZGV4ID0gaXdsX2h3cmF0ZV90b19wbGNwX2lkeCh0YmwtPmN1cnJlbnRfcmF0ZSk7CisJCQlyYXRlID0gcnNfdXBkYXRlX3JhdGVfdGJsKHByaXYsIGxxX3N0YSwKKwkJCQkJCSAgdGJsLCBpbmRleCwgaXNfZ3JlZW4pOworCQl9CiAJCXJldHVybjsKIAl9CiAKQEAgLTIxNDksOCArMjE2OCw4IEBACiAJCQl0YmwtPmV4cGVjdGVkX3RwdFtpbmRleF0gKyA2NCkgLyAxMjgpKTsKIAogCS8qIElmIHdlIGFyZSBzZWFyY2hpbmcgZm9yIGJldHRlciBtb2R1bGF0aW9uIG1vZGUsIGNoZWNrIHN1Y2Nlc3MuICovCi0JaWYgKGxxX3N0YS0+c2VhcmNoX2JldHRlcl90YmwpIHsKLQorCWlmIChscV9zdGEtPnNlYXJjaF9iZXR0ZXJfdGJsICYmCisJICAgIChpd2xfdHhfYW50X3Jlc3RyaWN0aW9uKHByaXYpID09IElXTF9BTlRfT0tfTVVMVEkpKSB7CiAJCS8qIElmIGdvb2Qgc3VjY2VzcywgY29udGludWUgdXNpbmcgdGhlICJzZWFyY2giIG1vZGU7CiAJCSAqIG5vIG5lZWQgdG8gc2VuZCBuZXcgbGluayBxdWFsaXR5IGNvbW1hbmQsIHNpbmNlIHdlJ3JlCiAJCSAqIGNvbnRpbnVpbmcgdG8gdXNlIHRoZSBzZXR1cCB0aGF0IHdlJ3ZlIGJlZW4gdHJ5aW5nLiAqLwpAQCAtMjI3OCw3ICsyMjk3LDExIEBACiAJCSAgICAoKHNyID4gSVdMX1JBVEVfSElHSF9USCkgfHwKIAkJICAgICAoY3VycmVudF90cHQgPiAoMTAwICogdGJsLT5leHBlY3RlZF90cHRbbG93XSkpKSkKIAkJc2NhbGVfYWN0aW9uID0gMDsKLQorCWlmICghaXdsX2h0X2VuYWJsZWQocHJpdikgJiYgIWlzX2xlZ2FjeSh0YmwtPmxxX3R5cGUpKQorCQlzY2FsZV9hY3Rpb24gPSAtMTsKKwlpZiAoaXdsX3R4X2FudF9yZXN0cmljdGlvbihwcml2KSAhPSBJV0xfQU5UX09LX01VTFRJICYmCisJCShpc19taW1vMih0YmwtPmxxX3R5cGUpIHx8IGlzX21pbW8zKHRibC0+bHFfdHlwZSkpKQorCQlzY2FsZV9hY3Rpb24gPSAtMTsKIAlzd2l0Y2ggKHNjYWxlX2FjdGlvbikgewogCWNhc2UgLTE6CiAJCS8qIERlY3JlYXNlIHN0YXJ0aW5nIHJhdGUsIHVwZGF0ZSB1Q29kZSdzIHJhdGUgdGFibGUgKi8KQEAgLTIzMDgsMTUgKzIzMzEsMTUgQEAKIAogbHFfdXBkYXRlOgogCS8qIFJlcGxhY2UgdUNvZGUncyByYXRlIHRhYmxlIGZvciB0aGUgZGVzdGluYXRpb24gc3RhdGlvbi4gKi8KLQlpZiAodXBkYXRlX2xxKSB7Ci0JCXJhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgdGJsLCBpbmRleCwgaXNfZ3JlZW4pOwotCQlyc19maWxsX2xpbmtfY21kKHByaXYsIGxxX3N0YSwgcmF0ZSk7Ci0JCWl3bF9zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKKwlpZiAodXBkYXRlX2xxKQorCQlyYXRlID0gcnNfdXBkYXRlX3JhdGVfdGJsKHByaXYsIGxxX3N0YSwKKwkJCQkJICB0YmwsIGluZGV4LCBpc19ncmVlbik7CisKKwlpZiAoaXdsX3R4X2FudF9yZXN0cmljdGlvbihwcml2KSA9PSBJV0xfQU5UX09LX01VTFRJKSB7CisJCS8qIFNob3VsZCB3ZSBzdGF5IHdpdGggdGhpcyBtb2R1bGF0aW9uIG1vZGUsCisJCSAqIG9yIHNlYXJjaCBmb3IgYSBuZXcgb25lPyAqLworCQlyc19zdGF5X2luX3RhYmxlKGxxX3N0YSk7CiAJfQotCi0JLyogU2hvdWxkIHdlIHN0YXkgd2l0aCB0aGlzIG1vZHVsYXRpb24gbW9kZSwgb3Igc2VhcmNoIGZvciBhIG5ldyBvbmU/ICovCi0JcnNfc3RheV9pbl90YWJsZShscV9zdGEpOwotCiAJLyoKIAkgKiBTZWFyY2ggZm9yIG5ldyBtb2R1bGF0aW9uIG1vZGUgaWYgd2UncmU6CiAJICogMSkgIE5vdCBjaGFuZ2luZyByYXRlcyByaWdodCBub3cKQEAgLTIzNzMsNyArMjM5Niw4IEBACiAJCSAqIGhhdmUgYmVlbiB0cmllZCBhbmQgY29tcGFyZWQsIHN0YXkgaW4gdGhpcyBiZXN0IG1vZHVsYXRpb24KIAkJICogbW9kZSBmb3IgYSB3aGlsZSBiZWZvcmUgbmV4dCByb3VuZCBvZiBtb2RlIGNvbXBhcmlzb25zLiAqLwogCQlpZiAobHFfc3RhLT5lbmFibGVfY291bnRlciAmJgotCQkgICAgKGxxX3N0YS0+YWN0aW9uX2NvdW50ZXIgPj0gdGJsMS0+bWF4X3NlYXJjaCkpIHsKKwkJICAgIChscV9zdGEtPmFjdGlvbl9jb3VudGVyID49IHRibDEtPm1heF9zZWFyY2gpICYmCisJCSAgICBpd2xfaHRfZW5hYmxlZChwcml2KSkgewogCQkJaWYgKChscV9zdGEtPmxhc3RfdHB0ID4gSVdMX0FHR19UUFRfVEhSRUhPTEQpICYmCiAJCQkgICAgKGxxX3N0YS0+dHhfYWdnX3RpZF9lbiAmICgxIDw8IHRpZCkpICYmCiAJCQkgICAgKHRpZCAhPSBNQVhfVElEX0NPVU5UKSkgewpAQCAtMjQwOSw3ICsyNDMzLDcgQEAKIAlpbnQgcmF0ZV9pZHg7CiAJaW50IGk7CiAJdTMyIHJhdGU7Ci0JdTggdXNlX2dyZWVuID0gcnNfdXNlX2dyZWVuKHByaXYsIGNvbmYpOworCXU4IHVzZV9ncmVlbiA9IHJzX3VzZV9ncmVlbihzdGEsICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZyk7CiAJdTggYWN0aXZlX3RibCA9IDA7CiAJdTggdmFsaWRfdHhfYW50OwogCkBAIC0yNDYyLDExICsyNDg2LDExIEBACiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPSB0eHJjLT5zYmFuZDsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZwcml2LT5ody0+Y29uZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCA9ICZzdGEtPmh0X2NhcDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gcHJpdl9zdGE7CiAJaW50IHJhdGVfaWR4OwotCXU2NCBtYXNrX2JpdCA9IDA7CiAKIAlJV0xfREVCVUdfUkFURV9MSU1JVChwcml2LCAicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CiAKQEAgLTI0ODEsMjIgKzI1MDUsOSBAQAogCQkJbHFfc3RhLT5tYXhfcmF0ZV9pZHggPSAtMTsKIAl9CiAKLQlpZiAoc3RhKQotCQltYXNrX2JpdCA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF07Ci0KIAkvKiBTZW5kIG1hbmFnZW1lbnQgZnJhbWVzIGFuZCBOT19BQ0sgZGF0YSB1c2luZyBsb3dlc3QgcmF0ZS4gKi8KLQlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKLQkgICAgaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSyB8fCAhc3RhIHx8ICFscV9zdGEpIHsKLQkJaWYgKCFtYXNrX2JpdCkKLQkJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0KLQkJCQkJcmF0ZV9sb3dlc3RfaW5kZXgoc2JhbmQsIE5VTEwpOwotCQllbHNlCi0JCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9Ci0JCQkJCXJhdGVfbG93ZXN0X2luZGV4KHNiYW5kLCBzdGEpOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykKLQkJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPSAxOworCWlmIChyYXRlX2NvbnRyb2xfc2VuZF9sb3coc3RhLCBwcml2X3N0YSwgdHhyYykpCiAJCXJldHVybjsKLQl9CiAKIAlyYXRlX2lkeCAgPSBscV9zdGEtPmxhc3RfdHhyYXRlX2lkeDsKIApAQCAtMjUwOCw3ICsyNTE5LDcgQEAKIAkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogQUREIHN0YXRpb24gJXBNXG4iLAogCQkJCSAgICAgICBoZHItPmFkZHIxKTsKIAkJCXN0YV9pZCA9IGl3bF9hZGRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxLAotCQkJCQkJZmFsc2UsIENNRF9BU1lOQywgTlVMTCk7CisJCQkJCQlmYWxzZSwgQ01EX0FTWU5DLCBodF9jYXApOwogCQl9CiAJCWlmICgoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pKSB7CiAJCQlscV9zdGEtPmxxLnN0YV9pZCA9IHN0YV9pZDsKQEAgLTI1MzMsMTUgKzI1NDQsMjAgQEAKIAkJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOwogCQlpZiAobHFfc3RhLT5sYXN0X3JhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0RVUF9NU0spCiAJCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19EVVBfREFUQTsKLQkJaWYgKGxxX3N0YS0+bGFzdF9yYXRlX25fZmxhZ3MgJiBSQVRFX01DU19GQVRfTVNLKQorCQlpZiAobHFfc3RhLT5sYXN0X3JhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0hUNDBfTVNLKQogCQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIOwogCQlpZiAobHFfc3RhLT5sYXN0X3JhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0dGX01TSykKIAkJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEOwogCX0gZWxzZSB7Ci0JCWlmIChyYXRlX2lkeCA8IDAgfHwgcmF0ZV9pZHggPiBJV0xfUkFURV9DT1VOVCkKKwkJLyogQ2hlY2sgZm9yIGludmFsaWQgcmF0ZXMgKi8KKwkJaWYgKChyYXRlX2lkeCA8IDApIHx8IChyYXRlX2lkeCA+PSBJV0xfUkFURV9DT1VOVF9MRUdBQ1kpIHx8CisJCQkJKChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSAmJgorCQkJCSAocmF0ZV9pZHggPCBJV0xfRklSU1RfT0ZETV9SQVRFKSkpCiAJCQlyYXRlX2lkeCA9IHJhdGVfbG93ZXN0X2luZGV4KHNiYW5kLCBzdGEpOworCQkvKiBPbiB2YWxpZCA1IEdIeiByYXRlLCBhZGp1c3QgaW5kZXggKi8KIAkJZWxzZSBpZiAoc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJCXJhdGVfaWR4IC09IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgPSAwOwogCX0KIAlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IHJhdGVfaWR4OwogCkBAIC0yNTc3LDEwICsyNTkzLDggQEAKIAlpbnQgaSwgajsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZwcml2LT5ody0+Y29uZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCA9ICZzdGEtPmh0X2NhcDsKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gcHJpdl9zdGE7Ci0JdTE2IG1hc2tfYml0ID0gMDsKLQlpbnQgY291bnQ7Ci0JaW50IHN0YXJ0X3JhdGUgPSAwOwogCiAJbHFfc3RhLT5mbHVzaF90aW1lciA9IDA7CiAJbHFfc3RhLT5zdXBwX3JhdGVzID0gc3RhLT5zdXBwX3JhdGVzW3NiYW5kLT5iYW5kXTsKQEAgLTI2MDUsNyArMjYxOSw3IEBACiAJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewogCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBBREQgc3RhdGlvbiAlcE1cbiIsIHN0YS0+YWRkcik7CiAJCQlzdGFfaWQgPSBpd2xfYWRkX3N0YXRpb24ocHJpdiwgc3RhLT5hZGRyLCBmYWxzZSwKLQkJCQkJCUNNRF9BU1lOQywgTlVMTCk7CisJCQkJCQlDTURfQVNZTkMsIGh0X2NhcCk7CiAJCX0KIAkJaWYgKChzdGFfaWQgIT0gSVdMX0lOVkFMSURfU1RBVElPTikpIHsKIAkJCWxxX3N0YS0+bHEuc3RhX2lkID0gc3RhX2lkOwpAQCAtMjYxOCw3ICsyNjMyLDcgQEAKIAlscV9zdGEtPmlzX2R1cCA9IDA7CiAJbHFfc3RhLT5tYXhfcmF0ZV9pZHggPSAtMTsKIAlscV9zdGEtPm1pc3NlZF9yYXRlX2NvdW50ZXIgPSBJV0xfTUlTU0VEX1JBVEVfTUFYOwotCWxxX3N0YS0+aXNfZ3JlZW4gPSByc191c2VfZ3JlZW4ocHJpdiwgY29uZik7CisJbHFfc3RhLT5pc19ncmVlbiA9IHJzX3VzZV9ncmVlbihzdGEsICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZyk7CiAJbHFfc3RhLT5hY3RpdmVfbGVnYWN5X3JhdGUgPSBwcml2LT5hY3RpdmVfcmF0ZSAmIH4oMHgxMDAwKTsKIAlscV9zdGEtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWM7CiAJbHFfc3RhLT5iYW5kID0gcHJpdi0+YmFuZDsKQEAgLTI2MjYsMTkgKzI2NDAsMTkgQEAKIAkgKiBhY3RpdmVfc2lzb19yYXRlIG1hc2sgaW5jbHVkZXMgOSBNQml0cyAoYml0IDUpLCBhbmQgQ0NLIChiaXRzIDAtMyksCiAJICogc3VwcF9yYXRlc1tdIGRvZXMgbm90OyBzaGlmdCB0byBjb252ZXJ0IGZvcm1hdCwgZm9yY2UgOSBNQml0cyBvZmYuCiAJICovCi0JbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMF0gPDwgMTsKLQlscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUgfD0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMF0gJiAweDE7CisJbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlID0gaHRfY2FwLT5tY3MucnhfbWFza1swXSA8PCAxOworCWxxX3N0YS0+YWN0aXZlX3Npc29fcmF0ZSB8PSBodF9jYXAtPm1jcy5yeF9tYXNrWzBdICYgMHgxOwogCWxxX3N0YS0+YWN0aXZlX3Npc29fcmF0ZSAmPSB+KCh1MTYpMHgyKTsKIAlscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUgPDw9IElXTF9GSVJTVF9PRkRNX1JBVEU7CiAKIAkvKiBTYW1lIGhlcmUgKi8KLQlscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMV0gPDwgMTsKLQlscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlIHw9IHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdICYgMHgxOworCWxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGUgPSBodF9jYXAtPm1jcy5yeF9tYXNrWzFdIDw8IDE7CisJbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSB8PSBodF9jYXAtPm1jcy5yeF9tYXNrWzFdICYgMHgxOwogCWxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGUgJj0gfigodTE2KTB4Mik7CiAJbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSA8PD0gSVdMX0ZJUlNUX09GRE1fUkFURTsKIAotCWxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGUgPSBzdGEtPmh0X2NhcC5tY3MucnhfbWFza1syXSA8PCAxOwotCWxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGUgfD0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMl0gJiAweDE7CisJbHFfc3RhLT5hY3RpdmVfbWltbzNfcmF0ZSA9IGh0X2NhcC0+bWNzLnJ4X21hc2tbMl0gPDwgMTsKKwlscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlIHw9IGh0X2NhcC0+bWNzLnJ4X21hc2tbMl0gJiAweDE7CiAJbHFfc3RhLT5hY3RpdmVfbWltbzNfcmF0ZSAmPSB+KCh1MTYpMHgyKTsKIAlscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlIDw8PSBJV0xfRklSU1RfT0ZETV9SQVRFOwogCkBAIC0yNjU1LDI1ICsyNjY5LDE1IEBACiAJbHFfc3RhLT50eF9hZ2dfdGlkX2VuID0gSVdMX0FHR19BTExfVElEOwogCWxxX3N0YS0+ZHJ2ID0gcHJpdjsKIAotCS8qIEZpbmQgaGlnaGVzdCB0eCByYXRlIHN1cHBvcnRlZCBieSBoYXJkd2FyZSBhbmQgZGVzdGluYXRpb24gc3RhdGlvbiAqLwotCW1hc2tfYml0ID0gc3RhLT5zdXBwX3JhdGVzW3NiYW5kLT5iYW5kXTsKLQljb3VudCA9IHNiYW5kLT5uX2JpdHJhdGVzOwotCWlmIChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7Ci0JCWNvdW50ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7Ci0JCXN0YXJ0X3JhdGUgPSBJV0xfRklSU1RfT0ZETV9SQVRFOwotCQltYXNrX2JpdCA8PD0gSVdMX0ZJUlNUX09GRE1fUkFURTsKLQl9Ci0KLQltYXNrX2JpdCA9IG1hc2tfYml0ICYgbHFfc3RhLT5hY3RpdmVfbGVnYWN5X3JhdGU7Ci0JbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHggPSA0OwotCWZvciAoaSA9IHN0YXJ0X3JhdGU7IGkgPCBjb3VudDsgaSsrKQotCQlpZiAobWFza19iaXQgJiBCSVQoaSkpCi0JCQlscV9zdGEtPmxhc3RfdHhyYXRlX2lkeCA9IGk7CisJLyogU2V0IGxhc3RfdHhyYXRlX2lkeCB0byBsb3dlc3QgcmF0ZSAqLworCWxxX3N0YS0+bGFzdF90eHJhdGVfaWR4ID0gcmF0ZV9sb3dlc3RfaW5kZXgoc2JhbmQsIHN0YSk7CisJaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCWxxX3N0YS0+bGFzdF90eHJhdGVfaWR4ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7CiAKIAlyc19pbml0aWFsaXplX2xxKHByaXYsIGNvbmYsIHN0YSwgbHFfc3RhKTsKIH0KIAotc3RhdGljIHZvaWQgcnNfZmlsbF9saW5rX2NtZChjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCByc19maWxsX2xpbmtfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSwgdTMyIG5ld19yYXRlKQogewogCXN0cnVjdCBpd2xfc2NhbGVfdGJsX2luZm8gdGJsX3R5cGU7CkBAIC0yOTIwLDcgKzI5MjQsNyBAQAogCQkgICAoaXNfc2lzbyh0YmwtPmxxX3R5cGUpKSA/ICJTSVNPIiA6CiAJCSAgICgoaXNfbWltbzIodGJsLT5scV90eXBlKSkgPyAiTUlNTzIiIDogIk1JTU8zIikpOwogCQkgICBkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiICVzIiwKLQkJICAgKHRibC0+aXNfZmF0KSA/ICI0ME1IeiIgOiAiMjBNSHoiKTsKKwkJICAgKHRibC0+aXNfaHQ0MCkgPyAiNDBNSHoiIDogIjIwTUh6Iik7CiAJCSAgIGRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIgJXMgJXNcbiIsICh0YmwtPmlzX1NHSSkgPyAiU0dJIiA6ICIiLAogCQkgICAobHFfc3RhLT5pc19ncmVlbikgPyAiR0YgZW5hYmxlZCIgOiAiIik7CiAJfQpAQCAtMjk4NSwxMiArMjk4OSwxMyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZvciAoaSA9IDA7IGkgPCBMUV9TSVpFOyBpKyspIHsKLQkJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgIiVzIHR5cGU9JWQgU0dJPSVkIEZBVD0lZCBEVVA9JWQgR0Y9JWRcbiIKKwkJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywKKwkJCQkiJXMgdHlwZT0lZCBTR0k9JWQgSFQ0MD0lZCBEVVA9JWQgR0Y9JWRcbiIKIAkJCQkicmF0ZT0weCVYXG4iLAogCQkJCWxxX3N0YS0+YWN0aXZlX3RibCA9PSBpID8gIioiIDogIngiLAogCQkJCWxxX3N0YS0+bHFfaW5mb1tpXS5scV90eXBlLAogCQkJCWxxX3N0YS0+bHFfaW5mb1tpXS5pc19TR0ksCi0JCQkJbHFfc3RhLT5scV9pbmZvW2ldLmlzX2ZhdCwKKwkJCQlscV9zdGEtPmxxX2luZm9baV0uaXNfaHQ0MCwKIAkJCQlscV9zdGEtPmxxX2luZm9baV0uaXNfZHVwLAogCQkJCWxxX3N0YS0+aXNfZ3JlZW4sCiAJCQkJbHFfc3RhLT5scV9pbmZvW2ldLmN1cnJlbnRfcmF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCmluZGV4IDI1MDUwYmYuLjlmYWM1MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCkBAIC03Myw2ICs3Myw3IEBACiAJSVdMX1JBVEVfNTRNX0lOREVYLAogCUlXTF9SQVRFXzYwTV9JTkRFWCwKIAlJV0xfUkFURV9DT1VOVCwgLypGSVhNRTpSUzpjaGFuZ2UgdG8gSVdMX1JBVEVfSU5ERVhfQ09VTlQsKi8KKwlJV0xfUkFURV9DT1VOVF9MRUdBQ1kgPSBJV0xfUkFURV9DT1VOVCAtIDEsCS8qIEV4Y2x1ZGluZyA2ME0gKi8KIAlJV0xfUkFURV9DT1VOVF8zOTQ1ID0gSVdMX1JBVEVfQ09VTlQgLSAxLAogCUlXTF9SQVRFX0lOVk1fSU5ERVggPSBJV0xfUkFURV9DT1VOVCwKIAlJV0xfUkFURV9JTlZBTElEID0gSVdMX1JBVEVfQ09VTlQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IDM1NWY1MGUuLjAwNDU3YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0xNzEsNyArMTcxLDcgQEAKIAkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSwKIAkJICAgICAgIHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyKTsKIAotCWl3bF9zZXRfcnhvbl9od2NyeXB0byhwcml2LCAhcHJpdi0+aHdfcGFyYW1zLnN3X2NyeXB0byk7CisJaXdsX3NldF9yeG9uX2h3Y3J5cHRvKHByaXYsICFwcml2LT5jZmctPm1vZF9wYXJhbXMtPnN3X2NyeXB0byk7CiAKIAkvKiBBcHBseSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24KIAkgKiBSWE9OIHVuYXNzb2MgY2xlYXJzIHRoZSBzdGF0aW9uIHRhYmxlIGluIHVDb2RlLCBzZW5kIGl0IGJlZm9yZQpAQCAtNDQyLDggKzQ0Miw4IEBACiAJLyogVW5tYXAgdHhfY21kICovCiAJaWYgKG51bV90YnMpCiAJCXBjaV91bm1hcF9zaW5nbGUoZGV2LAotCQkJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIG1hcHBpbmcpLAotCQkJCXBjaV91bm1hcF9sZW4oJnR4cS0+Y21kW2luZGV4XS0+bWV0YSwgbGVuKSwKKwkJCQlwY2lfdW5tYXBfYWRkcigmdHhxLT5tZXRhW2luZGV4XSwgbWFwcGluZyksCisJCQkJcGNpX3VubWFwX2xlbigmdHhxLT5tZXRhW2luZGV4XSwgbGVuKSwKIAkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCiAJLyogVW5tYXAgY2h1bmtzLCBpZiBhbnkuICovCkBAIC01MTIsNzAgKzUxMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE1pc2MuIGludGVybmFsIHN0YXRlIGFuZCBoZWxwZXIgZnVuY3Rpb25zCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTQwOTYKLQotc3RhdGljIHUxNiBpd2xfYWRqdXN0X2JlYWNvbl9pbnRlcnZhbCh1MTYgYmVhY29uX3ZhbCkKLXsKLQl1MTYgbmV3X3ZhbCA9IDA7Ci0JdTE2IGJlYWNvbl9mYWN0b3IgPSAwOwotCi0JYmVhY29uX2ZhY3RvciA9IChiZWFjb25fdmFsICsgTUFYX1VDT0RFX0JFQUNPTl9JTlRFUlZBTCkKLQkJCQkJLyBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMOwotCW5ld192YWwgPSBiZWFjb25fdmFsIC8gYmVhY29uX2ZhY3RvcjsKLQotCWlmICghbmV3X3ZhbCkKLQkJbmV3X3ZhbCA9IE1BWF9VQ09ERV9CRUFDT05fSU5URVJWQUw7Ci0KLQlyZXR1cm4gbmV3X3ZhbDsKLX0KLQotc3RhdGljIHZvaWQgaXdsX3NldHVwX3J4b25fdGltaW5nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQl1NjQgdHNmOwotCXMzMiBpbnRlcnZhbF90bSwgcmVtOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gTlVMTDsKLQl1MTYgYmVhY29uX2ludCA9IDA7Ci0KLQljb25mID0gaWVlZTgwMjExX2dldF9od19jb25mKHByaXYtPmh3KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhvbl90aW1pbmcudGltZXN0YW1wID0gY3B1X3RvX2xlNjQocHJpdi0+dGltZXN0YW1wKTsKLQlwcml2LT5yeG9uX3RpbWluZy5saXN0ZW5faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNihjb25mLT5saXN0ZW5faW50ZXJ2YWwpOwotCi0JaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQliZWFjb25faW50ID0gaXdsX2FkanVzdF9iZWFjb25faW50ZXJ2YWwocHJpdi0+YmVhY29uX2ludCk7Ci0JCXByaXYtPnJ4b25fdGltaW5nLmF0aW1fd2luZG93ID0gMDsKLQl9IGVsc2UgewotCQliZWFjb25faW50ID0gaXdsX2FkanVzdF9iZWFjb25faW50ZXJ2YWwoCi0JCQlwcml2LT52aWYtPmJzc19jb25mLmJlYWNvbl9pbnQpOwotCi0JCS8qIFRPRE86IHdlIG5lZWQgdG8gZ2V0IGF0aW1fd2luZG93IGZyb20gdXBwZXIgc3RhY2sKLQkJICogZm9yIG5vdyB3ZSBzZXQgdG8gMCAqLwotCQlwcml2LT5yeG9uX3RpbWluZy5hdGltX3dpbmRvdyA9IDA7Ci0JfQotCi0JcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsID0gY3B1X3RvX2xlMTYoYmVhY29uX2ludCk7Ci0KLQl0c2YgPSBwcml2LT50aW1lc3RhbXA7IC8qIHRzZiBpcyBtb2RpZmVkIGJ5IGRvX2RpdjogY29weSBpdCAqLwotCWludGVydmFsX3RtID0gYmVhY29uX2ludCAqIDEwMjQ7Ci0JcmVtID0gZG9fZGl2KHRzZiwgaW50ZXJ2YWxfdG0pOwotCXByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbml0X3ZhbCA9IGNwdV90b19sZTMyKGludGVydmFsX3RtIC0gcmVtKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlJV0xfREVCVUdfQVNTT0MocHJpdiwgImJlYWNvbiBpbnRlcnZhbCAlZCBiZWFjb24gdGltZXIgJWQgYmVhY29uIHRpbSAlZFxuIiwKLQkJCWxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbnRlcnZhbCksCi0JCQlsZTMyX3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW5pdF92YWwpLAotCQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYXRpbV93aW5kb3cpKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEdlbmVyaWMgUlggaGFuZGxlciBpbXBsZW1lbnRhdGlvbnMKQEAgLTY5Nyw3ICs2MzMsNiBAQAogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAl1MzIgZmxhZ3MgPSBsZTMyX3RvX2NwdShwa3QtPnUuY2FyZF9zdGF0ZV9ub3RpZi5mbGFncyk7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBwcml2LT5zdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyByZWdfZmxhZ3M7CiAKIAlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiQ2FyZCBzdGF0ZSByZWNlaXZlZDogSFc6JXMgU1c6JXNcbiIsCiAJCQkgIChmbGFncyAmIEhXX0NBUkRfRElTQUJMRUQpID8gIktpbGwiIDogIk9uIiwKQEAgLTcxNywxOSArNjUyLDEyIEBACiAJCQkJICAgIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9DTURfQkxPQ0tFRCk7CiAJCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01CWF9DLAogCQkJCQlIQlVTX1RBUkdfTUJYX0NfUkVHX0JJVF9DTURfQkxPQ0tFRCk7Ci0KIAkJfQotCi0JCWlmIChmbGFncyAmIFJGX0NBUkRfRElTQUJMRUQpIHsKLQkJCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKLQkJCQkgICAgQ1NSX1VDT0RFX0RSVl9HUDFfUkVHX0JJVF9DVF9LSUxMX0VYSVQpOwotCQkJaXdsX3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci0JCQlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpCi0JCQkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCQl9CisJCWlmIChmbGFncyAmIFJGX0NBUkRfRElTQUJMRUQpCisJCQlpd2xfdHRfZW50ZXJfY3Rfa2lsbChwcml2KTsKIAl9CisJaWYgKCEoZmxhZ3MgJiBSRl9DQVJEX0RJU0FCTEVEKSkKKwkJaXdsX3R0X2V4aXRfY3Rfa2lsbChwcml2KTsKIAogCWlmIChmbGFncyAmIEhXX0NBUkRfRElTQUJMRUQpCiAJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwpAQCAtOTY0LDcgKzg5Miw3IEBACiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIGludGFfZmgpOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfSVNSKSB7CisJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiBJV0xfRExfSVNSKSB7CiAJCS8qIGp1c3QgZm9yIGRlYnVnICovCiAJCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKIAkJSVdMX0RFQlVHX0lTUihwcml2LCAiaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCkBAIC05ODMsNyArOTExLDcgQEAKIAogCS8qIE5vdyBzZXJ2aWNlIGFsbCBpbnRlcnJ1cHQgYml0cyBkaXNjb3ZlcmVkIGFib3ZlLiAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfSFdfRVJSKSB7Ci0JCUlXTF9FUlIocHJpdiwgIk1pY3JvY29kZSBIVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiSGFyZHdhcmUgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7CiAKIAkJLyogVGVsbCB0aGUgZGV2aWNlIHRvIHN0b3Agc2VuZGluZyBpbnRlcnJ1cHRzICovCiAJCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CkBAIC05OTksNyArOTI3LDcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgeworCWlmIChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgKElXTF9ETF9JU1IpKSB7CiAJCS8qIE5JQyBmaXJlcyB0aGlzLCBidXQgd2UgZG9uJ3QgdXNlIGl0LCByZWR1bmRhbnQgd2l0aCBXQUtFVVAgKi8KIAkJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9TQ0QpIHsKIAkJCUlXTF9ERUJVR19JU1IocHJpdiwgIlNjaGVkdWxlciBmaW5pc2hlZCB0byB0cmFuc21pdCAiCkBAIC0xMDI0LDcgKzk1Miw3IEBACiAJCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cpKQogCQkJaHdfcmZfa2lsbCA9IDE7CiAKLQkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIlJGX0tJTEwgYml0IHRvZ2dsZWQgdG8gJXMuXG4iLAorCQlJV0xfV0FSTihwcml2LCAiUkZfS0lMTCBiaXQgdG9nZ2xlZCB0byAlcy5cbiIsCiAJCQkJaHdfcmZfa2lsbCA/ICJkaXNhYmxlIHJhZGlvIiA6ICJlbmFibGUgcmFkaW8iKTsKIAogCQlwcml2LT5pc3Jfc3RhdHMucmZraWxsKys7CkBAIC0xMTEzLDcgKzEwNDEsNyBAQAogCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgeworCWlmIChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgKElXTF9ETF9JU1IpKSB7CiAJCWludGEgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlQpOwogCQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7CiAJCWludGFfZmggPSBpd2xfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKQEAgLTExNDQsNyArMTA3Miw3IEBACiAJaW50YSA9IHByaXYtPmludGE7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9JU1IpIHsKKwlpZiAoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIElXTF9ETF9JU1IpIHsKIAkJLyoganVzdCBmb3IgZGVidWcgKi8KIAkJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOwogCQlJV0xfREVCVUdfSVNSKHByaXYsICJpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHhcbiAiLApAQCAtMTE1Niw3ICsxMDg0LDcgQEAKIAogCS8qIE5vdyBzZXJ2aWNlIGFsbCBpbnRlcnJ1cHQgYml0cyBkaXNjb3ZlcmVkIGFib3ZlLiAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfSFdfRVJSKSB7Ci0JCUlXTF9FUlIocHJpdiwgIk1pY3JvY29kZSBIVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiSGFyZHdhcmUgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7CiAKIAkJLyogVGVsbCB0aGUgZGV2aWNlIHRvIHN0b3Agc2VuZGluZyBpbnRlcnJ1cHRzICovCiAJCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CkBAIC0xMTcyLDcgKzExMDAsNyBAQAogCX0KIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JaWYgKHByaXYtPmRlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CisJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiAoSVdMX0RMX0lTUikpIHsKIAkJLyogTklDIGZpcmVzIHRoaXMsIGJ1dCB3ZSBkb24ndCB1c2UgaXQsIHJlZHVuZGFudCB3aXRoIFdBS0VVUCAqLwogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NDRCkgewogCQkJSVdMX0RFQlVHX0lTUihwcml2LCAiU2NoZWR1bGVyIGZpbmlzaGVkIHRvIHRyYW5zbWl0ICIKQEAgLTExOTcsNyArMTEyNSw3IEBACiAJCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cpKQogCQkJaHdfcmZfa2lsbCA9IDE7CiAKLQkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIlJGX0tJTEwgYml0IHRvZ2dsZWQgdG8gJXMuXG4iLAorCQlJV0xfV0FSTihwcml2LCAiUkZfS0lMTCBiaXQgdG9nZ2xlZCB0byAlcy5cbiIsCiAJCQkJaHdfcmZfa2lsbCA/ICJkaXNhYmxlIHJhZGlvIiA6ICJlbmFibGUgcmFkaW8iKTsKIAogCQlwcml2LT5pc3Jfc3RhdHMucmZraWxsKys7CkBAIC0xMzQ4LDcgKzEyNzYsNyBAQAogICovCiBzdGF0aWMgaW50IGl3bF9yZWFkX3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsX3Vjb2RlICp1Y29kZTsKKwlzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqdWNvZGU7CiAJaW50IHJldCA9IC1FSU5WQUwsIGluZGV4OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdWNvZGVfcmF3OwogCWNvbnN0IGNoYXIgKm5hbWVfcHJlID0gcHJpdi0+Y2ZnLT5md19uYW1lX3ByZTsKQEAgLTEzNTcsNyArMTI4NSw5IEBACiAJY2hhciBidWZbMjVdOwogCXU4ICpzcmM7CiAJc2l6ZV90IGxlbjsKLQl1MzIgYXBpX3ZlciwgaW5zdF9zaXplLCBkYXRhX3NpemUsIGluaXRfc2l6ZSwgaW5pdF9kYXRhX3NpemUsIGJvb3Rfc2l6ZTsKKwl1MzIgYXBpX3ZlciwgYnVpbGQ7CisJdTMyIGluc3Rfc2l6ZSwgZGF0YV9zaXplLCBpbml0X3NpemUsIGluaXRfZGF0YV9zaXplLCBib290X3NpemU7CisJdTE2IGVlcHJvbV92ZXI7CiAKIAkvKiBBc2sga2VybmVsIGZpcm13YXJlX2NsYXNzIG1vZHVsZSB0byBnZXQgdGhlIGJvb3QgZmlybXdhcmUgb2ZmIGRpc2suCiAJICogcmVxdWVzdF9maXJtd2FyZSgpIGlzIHN5bmNocm9ub3VzLCBmaWxlIGlzIGluIG1lbW9yeSBvbiByZXR1cm4uICovCkBAIC0xMzg3LDIzICsxMzE3LDI2IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBnb3QgYXQgbGVhc3Qgb3VyIGhlYWRlciEgKi8KLQlpZiAodWNvZGVfcmF3LT5zaXplIDwgc2l6ZW9mKCp1Y29kZSkpIHsKKwkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBnb3QgYXQgbGVhc3QgdGhlIHYxIGhlYWRlciEgKi8KKwlpZiAodWNvZGVfcmF3LT5zaXplIDwgcHJpdi0+Y2ZnLT5vcHMtPnVjb2RlLT5nZXRfaGVhZGVyX3NpemUoMSkpIHsKIAkJSVdMX0VSUihwcml2LCAiRmlsZSBzaXplIHdheSB0b28gc21hbGwhXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAKIAkvKiBEYXRhIGZyb20gdWNvZGUgZmlsZTogIGhlYWRlciBmb2xsb3dlZCBieSB1Q29kZSBpbWFnZXMgKi8KLQl1Y29kZSA9ICh2b2lkICopdWNvZGVfcmF3LT5kYXRhOworCXVjb2RlID0gKHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICopdWNvZGVfcmF3LT5kYXRhOwogCiAJcHJpdi0+dWNvZGVfdmVyID0gbGUzMl90b19jcHUodWNvZGUtPnZlcik7CiAJYXBpX3ZlciA9IElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKTsKLQlpbnN0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+aW5zdF9zaXplKTsKLQlkYXRhX3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+ZGF0YV9zaXplKTsKLQlpbml0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+aW5pdF9zaXplKTsKLQlpbml0X2RhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT5pbml0X2RhdGFfc2l6ZSk7Ci0JYm9vdF9zaXplID0gbGUzMl90b19jcHUodWNvZGUtPmJvb3Rfc2l6ZSk7CisJYnVpbGQgPSBwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9idWlsZCh1Y29kZSwgYXBpX3Zlcik7CisJaW5zdF9zaXplID0gcHJpdi0+Y2ZnLT5vcHMtPnVjb2RlLT5nZXRfaW5zdF9zaXplKHVjb2RlLCBhcGlfdmVyKTsKKwlkYXRhX3NpemUgPSBwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9kYXRhX3NpemUodWNvZGUsIGFwaV92ZXIpOworCWluaXRfc2l6ZSA9IHByaXYtPmNmZy0+b3BzLT51Y29kZS0+Z2V0X2luaXRfc2l6ZSh1Y29kZSwgYXBpX3Zlcik7CisJaW5pdF9kYXRhX3NpemUgPQorCQlwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9pbml0X2RhdGFfc2l6ZSh1Y29kZSwgYXBpX3Zlcik7CisJYm9vdF9zaXplID0gcHJpdi0+Y2ZnLT5vcHMtPnVjb2RlLT5nZXRfYm9vdF9zaXplKHVjb2RlLCBhcGlfdmVyKTsKKwlzcmMgPSBwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9kYXRhKHVjb2RlLCBhcGlfdmVyKTsKIAogCS8qIGFwaV92ZXIgc2hvdWxkIG1hdGNoIHRoZSBhcGkgdmVyc2lvbiBmb3JtaW5nIHBhcnQgb2YgdGhlCiAJICogZmlybXdhcmUgZmlsZW5hbWUgLi4uIGJ1dCB3ZSBkb24ndCBjaGVjayBmb3IgdGhhdCBhbmQgb25seSByZWx5CkBAIC0xNDI5LDYgKzEzNjIsMTQgQEAKIAkgICAgICAgSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpLAogCSAgICAgICBJV0xfVUNPREVfU0VSSUFMKHByaXYtPnVjb2RlX3ZlcikpOwogCisJaWYgKGJ1aWxkKQorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQnVpbGQgJXVcbiIsIGJ1aWxkKTsKKworCWVlcHJvbV92ZXIgPSBpd2xfZWVwcm9tX3F1ZXJ5MTYocHJpdiwgRUVQUk9NX1ZFUlNJT04pOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJOVk0gVHlwZTogJXMsIHZlcnNpb246IDB4JXhcbiIsCisJCSAgICAgICAocHJpdi0+bnZtX2RldmljZV90eXBlID09IE5WTV9ERVZJQ0VfVFlQRV9PVFApCisJCSAgICAgICA/ICJPVFAiIDogIkVFUFJPTSIsIGVlcHJvbV92ZXIpOworCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciB1Y29kZSB2ZXJzaW9uIHJhdyA9IDB4JXhcbiIsCiAJCSAgICAgICBwcml2LT51Y29kZV92ZXIpOwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgcnVudGltZSBpbnN0IHNpemUgPSAldVxuIiwKQEAgLTE0NDMsMTIgKzEzODQsMTQgQEAKIAkJICAgICAgIGJvb3Rfc2l6ZSk7CiAKIAkvKiBWZXJpZnkgc2l6ZSBvZiBmaWxlIHZzLiBpbWFnZSBzaXplIGluZm8gaW4gZmlsZSdzIGhlYWRlciAqLwotCWlmICh1Y29kZV9yYXctPnNpemUgPCBzaXplb2YoKnVjb2RlKSArCisJaWYgKHVjb2RlX3Jhdy0+c2l6ZSAhPQorCQlwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9oZWFkZXJfc2l6ZShhcGlfdmVyKSArCiAJCWluc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZSArCiAJCWluaXRfZGF0YV9zaXplICsgYm9vdF9zaXplKSB7CiAKLQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVDb2RlIGZpbGUgc2l6ZSAlZCB0b28gc21hbGxcbiIsCi0JCQkgICAgICAgKGludCl1Y29kZV9yYXctPnNpemUpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJInVDb2RlIGZpbGUgc2l6ZSAlZCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBzaXplXG4iLAorCQkJKGludCl1Y29kZV9yYXctPnNpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KQEAgLTE1MjgsNDIgKzE0NzEsNDIgQEAKIAkvKiBDb3B5IGltYWdlcyBpbnRvIGJ1ZmZlcnMgZm9yIGNhcmQncyBidXMtbWFzdGVyIHJlYWRzIC4uLiAqLwogCiAJLyogUnVudGltZSBpbnN0cnVjdGlvbnMgKGZpcnN0IGJsb2NrIG9mIGRhdGEgaW4gZmlsZSkgKi8KLQlzcmMgPSAmdWNvZGUtPmRhdGFbMF07Ci0JbGVuID0gcHJpdi0+dWNvZGVfY29kZS5sZW47CisJbGVuID0gaW5zdF9zaXplOwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGluc3RyIGxlbiAlWmRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2NvZGUudl9hZGRyLCBzcmMsIGxlbik7CisJc3JjICs9IGxlbjsKKwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBpbnN0ciBidWYgdmFkZHIgPSAweCVwLCBwYWRkciA9IDB4JTA4eFxuIiwKIAkJcHJpdi0+dWNvZGVfY29kZS52X2FkZHIsICh1MzIpcHJpdi0+dWNvZGVfY29kZS5wX2FkZHIpOwogCiAJLyogUnVudGltZSBkYXRhICgybmQgYmxvY2spCiAJICogTk9URTogIENvcHkgaW50byBiYWNrdXAgYnVmZmVyIHdpbGwgYmUgZG9uZSBpbiBpd2xfdXAoKSAgKi8KLQlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplXTsKLQlsZW4gPSBwcml2LT51Y29kZV9kYXRhLmxlbjsKKwlsZW4gPSBkYXRhX3NpemU7CiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgZGF0YSBsZW4gJVpkXG4iLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9kYXRhLnZfYWRkciwgc3JjLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9kYXRhX2JhY2t1cC52X2FkZHIsIHNyYywgbGVuKTsKKwlzcmMgKz0gbGVuOwogCiAJLyogSW5pdGlhbGl6YXRpb24gaW5zdHJ1Y3Rpb25zICgzcmQgYmxvY2spICovCiAJaWYgKGluaXRfc2l6ZSkgewotCQlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplXTsKLQkJbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47CisJCWxlbiA9IGluaXRfc2l6ZTsKIAkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBpbnN0ciBsZW4gJVpkXG4iLAogCQkJCWxlbik7CiAJCW1lbWNweShwcml2LT51Y29kZV9pbml0LnZfYWRkciwgc3JjLCBsZW4pOworCQlzcmMgKz0gbGVuOwogCX0KIAogCS8qIEluaXRpYWxpemF0aW9uIGRhdGEgKDR0aCBibG9jaykgKi8KIAlpZiAoaW5pdF9kYXRhX3NpemUpIHsKLQkJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZV07Ci0JCWxlbiA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5sZW47CisJCWxlbiA9IGluaXRfZGF0YV9zaXplOwogCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGRhdGEgbGVuICVaZFxuIiwKIAkJCSAgICAgICBsZW4pOwogCQltZW1jcHkocHJpdi0+dWNvZGVfaW5pdF9kYXRhLnZfYWRkciwgc3JjLCBsZW4pOworCQlzcmMgKz0gbGVuOwogCX0KIAogCS8qIEJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKDV0aCBibG9jaykgKi8KLQlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplICsgaW5pdF9kYXRhX3NpemVdOwotCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOworCWxlbiA9IGJvb3Rfc2l6ZTsKIAlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBib290IGluc3RyIGxlbiAlWmRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyLCBzcmMsIGxlbik7CiAKQEAgLTE2NjMsNyArMTYwNiw3IEBACiAJc2V0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIAotCWl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCAxKTsKKwlpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgdHJ1ZSk7CiAKIAkvKiByZWFzc29jaWF0ZSBmb3IgQURIT0MgbW9kZSAqLwogCWlmIChwcml2LT52aWYgJiYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKSB7CkBAIC0xODEyLDYgKzE3NTUsMTEgQEAKIAogCUlXTF9ERUJVR19JTkZPKHByaXYsICJpd2xfcHJlcGFyZV9jYXJkX2h3IGVudGVyIFxuIik7CiAKKwlyZXQgPSBpd2xfc2V0X2h3X3JlYWR5KHByaXYpOworCWlmIChwcml2LT5od19yZWFkeSkKKwkJcmV0dXJuIHJldDsKKworCS8qIElmIEhXIGlzIG5vdCByZWFkeSwgcHJlcGFyZSB0aGUgY29uZGl0aW9ucyB0byBjaGVjayBhZ2FpbiAqLwogCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAogCQkJQ1NSX0hXX0lGX0NPTkZJR19SRUdfUFJFUEFSRSk7CiAKQEAgLTE4MTksNiArMTc2Nyw3IEBACiAJCQl+Q1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX05JQ19QUkVQQVJFX0RPTkUsCiAJCQlDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfTklDX1BSRVBBUkVfRE9ORSwgMTUwMDAwKTsKIAorCS8qIEhXIHNob3VsZCBiZSByZWFkeSBieSBub3csIGNoZWNrIGFnYWluLiAqLwogCWlmIChyZXQgIT0gLUVUSU1FRE9VVCkKIAkJaXdsX3NldF9od19yZWFkeShwcml2KTsKIApAQCAtMjEyNiw3ICsyMDc1LDcgQEAKIAkgKiBJZiBjaGFpbiBub2lzZSBoYXMgYWxyZWFkeSBiZWVuIHJ1biwgdGhlbiB3ZSBuZWVkIHRvIGVuYWJsZQogCSAqIHBvd2VyIG1hbmFnZW1lbnQgaGVyZSAqLwogCWlmIChwcml2LT5jaGFpbl9ub2lzZV9kYXRhLnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9ET05FKQotCQlpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgMCk7CisJCWl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCBmYWxzZSk7CiAKIAkvKiBFbmFibGUgUnggZGlmZmVyZW50aWFsIGdhaW4gYW5kIHNlbnNpdGl2aXR5IGNhbGlicmF0aW9ucyAqLwogCWl3bF9jaGFpbl9ub2lzZV9yZXNldChwcml2KTsKQEAgLTIyMDYsNyArMjE1NSw3IEBACiAKIAlwcml2LT5pc19vcGVuID0gMDsKIAotCWlmIChpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwlpZiAoaXdsX2lzX3JlYWR5X3JmKHByaXYpIHx8IHRlc3RfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKSkgewogCQkvKiBzdG9wIG1hYywgY2FuY2VsIGFueSBzY2FuIHJlcXVlc3QgYW5kIGNsZWFyCiAJCSAqIFJYT05fRklMVEVSX0FTU09DX01TSyBCSVQKIAkJICovCkBAIC0yMzMxLDcgKzIyODAsNyBAQAogCiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAocHJpdi0+aHdfcGFyYW1zLnN3X2NyeXB0bykgeworCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPnN3X2NyeXB0bykgewogCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gaHdjcnlwdG8gZGlzYWJsZWRcbiIpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpAQCAtMjQ1NSwxNCArMjQwNCwxNiBAQAogICogdXNlZCBmb3IgY29udHJvbGxpbmcgdGhlIGRlYnVnIGxldmVsLgogICoKICAqIFNlZSB0aGUgbGV2ZWwgZGVmaW5pdGlvbnMgaW4gaXdsIGZvciBkZXRhaWxzLgorICoKKyAqIFRoZSBkZWJ1Z19sZXZlbCBiZWluZyBtYW5hZ2VkIHVzaW5nIHN5c2ZzIGJlbG93IGlzIGEgcGVyIGRldmljZSBkZWJ1ZworICogbGV2ZWwgdGhhdCBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIGdsb2JhbCBkZWJ1ZyBsZXZlbCBpZiBpdCAodGhlIHBlcgorICogZGV2aWNlIGRlYnVnIGxldmVsKSBpcyBzZXQuCiAgKi8KLQogc3RhdGljIHNzaXplX3Qgc2hvd19kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDhYXG4iLCBwcml2LT5kZWJ1Z19sZXZlbCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDhYXG4iLCBpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpKTsKIH0KIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0yNDc1LDkgKzI0MjYsMTIgQEAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpOwogCWlmIChyZXQpCiAJCUlXTF9FUlIocHJpdiwgIiVzIGlzIG5vdCBpbiBoZXggb3IgZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKLQllbHNlCisJZWxzZSB7CiAJCXByaXYtPmRlYnVnX2xldmVsID0gdmFsOwotCisJCWlmIChpd2xfYWxsb2NfdHJhZmZpY19tZW0ocHJpdikpCisJCQlJV0xfRVJSKHByaXYsCisJCQkJIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGdlbmVyYXRlIHRyYWZmaWMgbG9nXG4iKTsKKwl9CiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKQEAgLTI0ODgsMzkgKzI0NDIsNiBAQAogI2VuZGlmIC8qIENPTkZJR19JV0xXSUZJX0RFQlVHICovCiAKIAotc3RhdGljIHNzaXplX3Qgc2hvd192ZXJzaW9uKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0Jc3RydWN0IGl3bF9hbGl2ZV9yZXNwICpwYWxpdmUgPSAmcHJpdi0+Y2FyZF9hbGl2ZTsKLQlzc2l6ZV90IHBvcyA9IDA7Ci0JdTE2IGVlcHJvbV92ZXI7Ci0KLQlpZiAocGFsaXZlLT5pc192YWxpZCkKLQkJcG9zICs9IHNwcmludGYoYnVmICsgcG9zLAotCQkJCSJmdyB2ZXJzaW9uOiAweCUwMVguMHglMDFYLjB4JTAxWC4weCUwMVhcbiIKLQkJCQkiZncgdHlwZTogMHglMDFYIDB4JTAxWFxuIiwKLQkJCQlwYWxpdmUtPnVjb2RlX21ham9yLCBwYWxpdmUtPnVjb2RlX21pbm9yLAotCQkJCXBhbGl2ZS0+c3dfcmV2WzBdLCBwYWxpdmUtPnN3X3JldlsxXSwKLQkJCQlwYWxpdmUtPnZlcl90eXBlLCBwYWxpdmUtPnZlcl9zdWJ0eXBlKTsKLQllbHNlCi0JCXBvcyArPSBzcHJpbnRmKGJ1ZiArIHBvcywgImZ3IG5vdCBsb2FkZWRcbiIpOwotCi0JaWYgKHByaXYtPmVlcHJvbSkgewotCQllZXByb21fdmVyID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9WRVJTSU9OKTsKLQkJcG9zICs9IHNwcmludGYoYnVmICsgcG9zLCAiTlZNIFR5cGU6ICVzLCB2ZXJzaW9uOiAweCV4XG4iLAotCQkJICAgICAgIChwcml2LT5udm1fZGV2aWNlX3R5cGUgPT0gTlZNX0RFVklDRV9UWVBFX09UUCkKLQkJCSAgICAgICA/ICJPVFAiIDogIkVFUFJPTSIsIGVlcHJvbV92ZXIpOwotCi0JfSBlbHNlIHsKLQkJcG9zICs9IHNwcmludGYoYnVmICsgcG9zLCAiRUVQUk9NIG5vdCBpbml0aWFsemVkXG4iKTsKLQl9Ci0KLQlyZXR1cm4gcG9zOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIodmVyc2lvbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdmVyc2lvbiwgTlVMTCk7Ci0KIHN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcGVyYXR1cmUoc3RydWN0IGRldmljZSAqZCwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMjU1NiwxMCArMjQ3NywxNSBAQAogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOwogCWlmIChyZXQpCiAJCUlXTF9JTkZPKHByaXYsICIlcyBpcyBub3QgaW4gZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKLQllbHNlCi0JCWl3bF9zZXRfdHhfcG93ZXIocHJpdiwgdmFsLCBmYWxzZSk7Ci0KLQlyZXR1cm4gY291bnQ7CisJZWxzZSB7CisJCXJldCA9IGl3bF9zZXRfdHhfcG93ZXIocHJpdiwgdmFsLCBmYWxzZSk7CisJCWlmIChyZXQpCisJCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgc2V0dGluZyB0eCBwb3dlciAoMHglZCkuXG4iLAorCQkJCXJldCk7CisJCWVsc2UKKwkJCXJldCA9IGNvdW50OworCX0KKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIodHhfcG93ZXIsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3R4X3Bvd2VyLCBzdG9yZV90eF9wb3dlcik7CkBAIC0yNjQ0LDY3ICsyNTcwLDYgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihmaWx0ZXJfZmxhZ3MsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2ZpbHRlcl9mbGFncywKIAkJICAgc3RvcmVfZmlsdGVyX2ZsYWdzKTsKIAotc3RhdGljIHNzaXplX3Qgc3RvcmVfcG93ZXJfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKLQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgbW9kZTsKLQotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJm1vZGUpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gaXdsX3Bvd2VyX3NldF91c2VyX21vZGUocHJpdiwgbW9kZSk7Ci0JaWYgKHJldCkgewotCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImZhaWxlZCBzZXR0aW5nIHBvd2VyIG1vZGUuXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCXJldCA9IGNvdW50OwotCi0gb3V0OgotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfcG93ZXJfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlpbnQgbGV2ZWwgPSBwcml2LT5wb3dlcl9kYXRhLnBvd2VyX21vZGU7Ci0JY2hhciAqcCA9IGJ1ZjsKLQotCXAgKz0gc3ByaW50ZihwLCAiJWRcbiIsIGxldmVsKTsKLQlyZXR1cm4gcCAtIGJ1ZiArIDE7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihwb3dlcl9sZXZlbCwgU19JV1VTUiB8IFNfSVJVU1IsIHNob3dfcG93ZXJfbGV2ZWwsCi0JCSAgIHN0b3JlX3Bvd2VyX2xldmVsKTsKLQotc3RhdGljIHNzaXplX3Qgc2hvd19xb3Moc3RydWN0IGRldmljZSAqZCwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQljaGFyICpwID0gYnVmOwotCWludCAgIHE7Ci0KLQlmb3IgKHEgPSAwOyBxIDwgQUNfTlVNOyBxKyspIHsKLQkJcCArPSBzcHJpbnRmKHAsICJcdGN3X21pblx0Y3dfbWF4XHRhaWZzblx0dHhvcFxuIik7Ci0JCXAgKz0gc3ByaW50ZihwLCAiQUNbJWRdXHQldVx0JXVcdCV1XHQldVxuIiwgcSwKLQkJCSAgICAgcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW3FdLmN3X21pbiwKLQkJCSAgICAgcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW3FdLmN3X21heCwKLQkJCSAgICAgcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW3FdLmFpZnNuLAotCQkJICAgICBwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbcV0uZWRjYV90eG9wKTsKLQl9Ci0KLQlyZXR1cm4gcCAtIGJ1ZiArIDE7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihxb3MsIFNfSVJVR08sIHNob3dfcW9zLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0aXN0aWNzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTI3OTcsMTUgKzI2NjIsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppd2xfc3lzZnNfZW50cmllc1tdID0gewogCSZkZXZfYXR0cl9mbGFncy5hdHRyLAogCSZkZXZfYXR0cl9maWx0ZXJfZmxhZ3MuYXR0ciwKLQkmZGV2X2F0dHJfcG93ZXJfbGV2ZWwuYXR0ciwKIAkmZGV2X2F0dHJfc3RhdGlzdGljcy5hdHRyLAogCSZkZXZfYXR0cl90ZW1wZXJhdHVyZS5hdHRyLAogCSZkZXZfYXR0cl90eF9wb3dlci5hdHRyLAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJJmRldl9hdHRyX2RlYnVnX2xldmVsLmF0dHIsCiAjZW5kaWYKLQkmZGV2X2F0dHJfdmVyc2lvbi5hdHRyLAotCSZkZXZfYXR0cl9xb3MuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC0yODQ5LDcgKzI3MTEsNyBAQAogCS8qIERpc2FibGluZyBoYXJkd2FyZSBzY2FuIG1lYW5zIHRoYXQgbWFjODAyMTEgd2lsbCBwZXJmb3JtIHNjYW5zCiAJICogInRoZSBoYXJkIHdheSIsIHJhdGhlciB0aGFuIHVzaW5nIGRldmljZSdzIHNjYW4uICovCiAJaWYgKGNmZy0+bW9kX3BhcmFtcy0+ZGlzYWJsZV9od19zY2FuKSB7Ci0JCWlmIChjZmctPm1vZF9wYXJhbXMtPmRlYnVnICYgSVdMX0RMX0lORk8pCisJCWlmIChpd2xfZGVidWdfbGV2ZWwgJiBJV0xfRExfSU5GTykKIAkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJihwZGV2LT5kZXYpLAogCQkJCSAgICJEaXNhYmxpbmcgaHdfc2NhblxuIik7CiAJCWl3bF9od19vcHMuaHdfc2NhbiA9IE5VTEw7CkBAIC0yODcxLDkgKzI3MzMsMTAgQEAKIAlwcml2LT5pbnRhX21hc2sgPSBDU1JfSU5JX1NFVF9NQVNLOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlwcml2LT5kZWJ1Z19sZXZlbCA9IHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+ZGVidWc7CiAJYXRvbWljX3NldCgmcHJpdi0+cmVzdHJpY3RfcmVmY250LCAwKTsKICNlbmRpZgorCWlmIChpd2xfYWxsb2NfdHJhZmZpY19tZW0ocHJpdikpCisJCUlXTF9FUlIocHJpdiwgIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGdlbmVyYXRlIHRyYWZmaWMgbG9nXG4iKTsKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDIuIEluaXRpYWxpemluZyBQQ0kgYnVzCkBAIC0zMDM0LDYgKzI4OTcsNyBAQAogCQl0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpOwogCiAJaXdsX3Bvd2VyX2luaXRpYWxpemUocHJpdik7CisJaXdsX3R0X2luaXRpYWxpemUocHJpdik7CiAJcmV0dXJuIDA7CiAKICBvdXRfcmVtb3ZlX3N5c2ZzOgpAQCAtMzA1Nyw2ICsyOTIxLDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAgb3V0X2llZWU4MDIxMV9mcmVlX2h3OgogCWllZWU4MDIxMV9mcmVlX2h3KHByaXYtPmh3KTsKKwlpd2xfZnJlZV90cmFmZmljX21lbShwcml2KTsKICBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTMwODYsNiArMjk1MSw4IEBACiAJCWl3bF9kb3duKHByaXYpOwogCX0KIAorCWl3bF90dF9leGl0KHByaXYpOworCiAJLyogbWFrZSBzdXJlIHdlIGZsdXNoIGFueSBwZW5kaW5nIGlycSBvcgogCSAqIHRhc2tsZXQgZm9yIHRoZSBkcml2ZXIKIAkgKi8KQEAgLTMxMTMsNiArMjk4MCw3IEBACiAJICogdW50aWwgbm93Li4uICovCiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAlwcml2LT53b3JrcXVldWUgPSBOVUxMOworCWl3bF9mcmVlX3RyYWZmaWNfbWVtKHByaXYpOwogCiAJZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKIAlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7CkBAIC0zMTYzLDE1ICszMDMxLDEyIEBACiAJe0lXTF9QQ0lfREVWSUNFKDB4NDIzQywgUENJX0FOWV9JRCwgaXdsNTE1MF9hZ25fY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4NDIzRCwgUENJX0FOWV9JRCwgaXdsNTE1MF9hZ25fY2ZnKX0sCiAvKiA2MDAwLzYwNTAgU2VyaWVzICovCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMTAyLCBpd2w2MDAwXzJhZ19jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCAweDExMTIsIGl3bDYwMDBfMmFnX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwODIsIDB4MTEyMiwgaXdsNjAwMF8yYWdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4RCwgUENJX0FOWV9JRCwgaXdsNjAwMGhfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDhFLCBQQ0lfQU5ZX0lELCBpd2w2MDAwaF8yYWduX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDQyMkIsIFBDSV9BTllfSUQsIGl3bDYwMDBfM2Fnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHg0MjJDLCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzJhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4NDIyQywgUENJX0FOWV9JRCwgaXdsNjAwMGlfMmFnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjM4LCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4NDIzOSwgUENJX0FOWV9JRCwgaXdsNjAwMF8yYWduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwODIsIFBDSV9BTllfSUQsIGl3bDYwMDBfMmFnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4NDIzOSwgUENJX0FOWV9JRCwgaXdsNjAwMGlfMmFnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg2LCBQQ0lfQU5ZX0lELCBpd2w2MDUwXzNhZ25fY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MDA4NywgUENJX0FOWV9JRCwgaXdsNjA1MF8yYWduX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDAwODgsIFBDSV9BTllfSUQsIGl3bDYwNTBfM2Fnbl9jZmcpfSwKQEAgLTMyMzEsMyArMzA5NiwxMSBAQAogCiBtb2R1bGVfZXhpdChpd2xfZXhpdCk7CiBtb2R1bGVfaW5pdChpd2xfaW5pdCk7CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnNTAsIGl3bF9kZWJ1Z19sZXZlbCwgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnNTAsICI1MFhYIGRlYnVnIG91dHB1dCBtYXNrIChkZXByZWNhdGVkKSIpOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpd2xfZGVidWdfbGV2ZWwsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIG91dHB1dCBtYXNrIik7CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmMKaW5kZXggYTVkNjM2Ny4uYzRiNTY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jCkBAIC04Niw3ICs4Niw3IEBACiAKIAlzdHJ1Y3QgaXdsX2hvc3RfY21kIGhjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCi0JCS5tZXRhLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKKwkJLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKIAl9OwogCiAJZm9yIChpID0gMDsgaSA8IElXTF9DQUxJQl9NQVg7IGkrKykgewpAQCAtMjUxLDEyICsyNTEsNyBAQAogCiAJCS8qIGluY3JlYXNlIGVuZXJneSB0aHJlc2hvbGQgKHJlZHVjZSBucmcgdmFsdWUpCiAJCSAqICAgdG8gZGVjcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KLQkJaWYgKGRhdGEtPm5yZ190aF9jY2sgPgotCQkJKHJhbmdlcy0+bWF4X25yZ19jY2sgKyBOUkdfU1RFUF9DQ0spKQotCQkJZGF0YS0+bnJnX3RoX2NjayA9IGRhdGEtPm5yZ190aF9jY2sKLQkJCQkJCSAtIE5SR19TVEVQX0NDSzsKLQkJZWxzZQotCQkJZGF0YS0+bnJnX3RoX2NjayA9IHJhbmdlcy0+bWF4X25yZ19jY2s7CisJCWRhdGEtPm5yZ190aF9jY2sgPSBkYXRhLT5ucmdfdGhfY2NrIC0gTlJHX1NURVBfQ0NLOwogCS8qIEVsc2UgaWYgd2UgZ290IGZld2VyIHRoYW4gZGVzaXJlZCwgaW5jcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KIAl9IGVsc2UgaWYgKGZhbHNlX2FsYXJtcyA8IG1pbl9mYWxzZV9hbGFybXMpIHsKIAkJZGF0YS0+bnJnX2N1cnJfc3RhdGUgPSBJV0xfRkFfVE9PX0ZFVzsKQEAgLTQyNCw3ICs0MTksNyBAQAogCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kX291dCA9IHsKIAkJLmlkID0gU0VOU0lUSVZJVFlfQ01ELAogCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfY21kKSwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfQVNZTkMsCisJCS5mbGFncyA9IENNRF9BU1lOQywKIAkJLmRhdGEgPSAmY21kLAogCX07CiAKQEAgLTg1Nyw3ICs4NTIsNyBAQAogCQlwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MocHJpdik7CiAKIAlkYXRhLT5zdGF0ZSA9IElXTF9DSEFJTl9OT0lTRV9ET05FOwotCWl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCAwKTsKKwlpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgZmFsc2UpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfY2hhaW5fbm9pc2VfY2FsaWJyYXRpb24pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaAppbmRleCBjODcwMzNiLi4yYzVjODhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKQEAgLTI4Myw3ICsyODMsNyBAQAogICogICAgICAgIDEpICBEdWFsIHN0cmVhbSAoTUlNTykKICAqICAgICAgICAyKSAgVHJpcGxlIHN0cmVhbSAoTUlNTykKICAqCi0gKiAgICA1OiAgVmFsdWUgb2YgMHgyMCBpbiBiaXRzIDc6MCBpbmRpY2F0ZXMgNiBNYnBzIEZBVCBkdXBsaWNhdGUgZGF0YQorICogICAgNTogIFZhbHVlIG9mIDB4MjAgaW4gYml0cyA3OjAgaW5kaWNhdGVzIDYgTWJwcyBIVDQwIGR1cGxpY2F0ZSBkYXRhCiAgKgogICogTGVnYWN5IE9GRE0gcmF0ZSBmb3JtYXQgZm9yIGJpdHMgNzowIChiaXQgOCBtdXN0IGJlICIwIiwgYml0IDkgIjAiKToKICAqICAzLTA6ICAweEQpICAgNiBNYnBzCkBAIC0zMjAsMTEgKzMyMCwxMSBAQAogI2RlZmluZSBSQVRFX01DU19HRl9QT1MgMTAKICNkZWZpbmUgUkFURV9NQ1NfR0ZfTVNLIDB4NDAwCiAKLS8qIEJpdCAxMTogKDEpIFVzZSA0ME1oeiBGQVQgY2hubCB3aWR0aCwgKDApIHVzZSAyMCBNSHogbGVnYWN5IGNobmwgd2lkdGggKi8KLSNkZWZpbmUgUkFURV9NQ1NfRkFUX1BPUyAxMQotI2RlZmluZSBSQVRFX01DU19GQVRfTVNLIDB4ODAwCisvKiBCaXQgMTE6ICgxKSBVc2UgNDBNaHogSFQ0MCBjaG5sIHdpZHRoLCAoMCkgdXNlIDIwIE1IeiBsZWdhY3kgY2hubCB3aWR0aCAqLworI2RlZmluZSBSQVRFX01DU19IVDQwX1BPUyAxMQorI2RlZmluZSBSQVRFX01DU19IVDQwX01TSyAweDgwMAogCi0vKiBCaXQgMTI6ICgxKSBEdXBsaWNhdGUgZGF0YSBvbiBib3RoIDIwTUh6IGNobmxzLiAgRkFUIChiaXQgMTEpIG11c3QgYmUgc2V0LiAqLworLyogQml0IDEyOiAoMSkgRHVwbGljYXRlIGRhdGEgb24gYm90aCAyME1IeiBjaG5scy4gSFQ0MCAoYml0IDExKSBtdXN0IGJlIHNldC4gKi8KICNkZWZpbmUgUkFURV9NQ1NfRFVQX1BPUyAxMgogI2RlZmluZSBSQVRFX01DU19EVVBfTVNLIDB4MTAwMAogCkBAIC00NTksNyArNDU5LDcgQEAKIAogCS8qIGNhbGlicmF0aW9uIHZhbHVlcyBmcm9tICJpbml0aWFsaXplIiB1Q29kZSAqLwogCV9fbGUzMiB2b2x0YWdlOwkJLyogc2lnbmVkLCBoaWdoZXIgdmFsdWUgaXMgbG93ZXIgdm9sdGFnZSAqLwotCV9fbGUzMiB0aGVybV9yMVsyXTsJLyogc2lnbmVkLCAxc3QgZm9yIG5vcm1hbCwgMm5kIGZvciBGQVQgY2hhbm5lbCovCisJX19sZTMyIHRoZXJtX3IxWzJdOwkvKiBzaWduZWQsIDFzdCBmb3Igbm9ybWFsLCAybmQgZm9yIEhUNDAgKi8KIAlfX2xlMzIgdGhlcm1fcjJbMl07CS8qIHNpZ25lZCAqLwogCV9fbGUzMiB0aGVybV9yM1syXTsJLyogc2lnbmVkICovCiAJX19sZTMyIHRoZXJtX3I0WzJdOwkvKiBzaWduZWQgKi8KQEAgLTYxMCw3ICs2MTAsNyBAQAogI2RlZmluZSBSWE9OX0ZMR19IVF9PUEVSQVRJTkdfTU9ERV9QT1MJCSgyMykKIAogI2RlZmluZSBSWE9OX0ZMR19IVF9QUk9UX01TSwkJCWNwdV90b19sZTMyKDB4MSA8PCAyMykKLSNkZWZpbmUgUlhPTl9GTEdfRkFUX1BST1RfTVNLCQkJY3B1X3RvX2xlMzIoMHgyIDw8IDIzKQorI2RlZmluZSBSWE9OX0ZMR19IVDQwX1BST1RfTVNLCQkJY3B1X3RvX2xlMzIoMHgyIDw8IDIzKQogCiAjZGVmaW5lIFJYT05fRkxHX0NIQU5ORUxfTU9ERV9QT1MJCSgyNSkKICNkZWZpbmUgUlhPTl9GTEdfQ0hBTk5FTF9NT0RFX01TSwkJY3B1X3RvX2xlMzIoMHgzIDw8IDI1KQpAQCAtNzY1LDYgKzc2NSw4IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBJV0xfQ09OTl9NQVhfTElTVEVOX0lOVEVSVkFMCTEwCisjZGVmaW5lIElXTF9NQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTQgLyogNDA5NiAqLworI2RlZmluZSBJV0wzOV9NQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTEgLyogMTAyNCAqLwogCiAvKgogICogUkVQTFlfUlhPTl9USU1JTkcgPSAweDE0IChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCkBAIC04ODQsMTIgKzg4NiwxMSBAQAogCiAjZGVmaW5lIFNUQV9GTEdfVFhfUkFURV9NU0sJCWNwdV90b19sZTMyKDEgPDwgMik7CiAjZGVmaW5lIFNUQV9GTEdfUFdSX1NBVkVfTVNLCQljcHVfdG9fbGUzMigxIDw8IDgpOwotI2RlZmluZSBTVEFfRkxHX1BXUl9TQVZFX01TSwkJY3B1X3RvX2xlMzIoMSA8PCA4KTsKICNkZWZpbmUgU1RBX0ZMR19SVFNfTUlNT19QUk9UX01TSwljcHVfdG9fbGUzMigxIDw8IDE3KQogI2RlZmluZSBTVEFfRkxHX0FHR19NUERVXzhVU19NU0sJY3B1X3RvX2xlMzIoMSA8PCAxOCkKICNkZWZpbmUgU1RBX0ZMR19NQVhfQUdHX1NJWkVfUE9TCSgxOSkKICNkZWZpbmUgU1RBX0ZMR19NQVhfQUdHX1NJWkVfTVNLCWNwdV90b19sZTMyKDMgPDwgMTkpCi0jZGVmaW5lIFNUQV9GTEdfRkFUX0VOX01TSwkJY3B1X3RvX2xlMzIoMSA8PCAyMSkKKyNkZWZpbmUgU1RBX0ZMR19IVDQwX0VOX01TSwkJY3B1X3RvX2xlMzIoMSA8PCAyMSkKICNkZWZpbmUgU1RBX0ZMR19NSU1PX0RJU19NU0sJCWNwdV90b19sZTMyKDEgPDwgMjIpCiAjZGVmaW5lIFNUQV9GTEdfQUdHX01QRFVfREVOU0lUWV9QT1MJKDIzKQogI2RlZmluZSBTVEFfRkxHX0FHR19NUERVX0RFTlNJVFlfTVNLCWNwdV90b19sZTMyKDcgPDwgMjMpCkBAIC0xMTU0LDYgKzExNTUsNyBAQAogI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX1NIT1JUX1BSRUFNQkxFX01TSwljcHVfdG9fbGUxNigxIDw8IDIpCiAjZGVmaW5lIFJYX1JFU19QSFlfRkxBR1NfTkFSUk9XX0JBTkRfTVNLCWNwdV90b19sZTE2KDEgPDwgMykKICNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSwkJY3B1X3RvX2xlMTYoMHhmMCkKKyNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX1BPUwkJNAogCiAjZGVmaW5lIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTVNLCSgweDcgPDwgOCkKICNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9OT05FCSgweDAgPDwgOCkKQEAgLTE5MjIsNyArMTkyNCw3IEBACiAjZGVmaW5lIExJTktfUVVBTF9BR0dfRElTQUJMRV9TVEFSVF9NSU4JKDApCiAKICNkZWZpbmUgTElOS19RVUFMX0FHR19GUkFNRV9MSU1JVF9ERUYJKDMxKQotI2RlZmluZSBMSU5LX1FVQUxfQUdHX0ZSQU1FX0xJTUlUX01BWAkoNjQpCisjZGVmaW5lIExJTktfUVVBTF9BR0dfRlJBTUVfTElNSVRfTUFYCSg2MykKICNkZWZpbmUgTElOS19RVUFMX0FHR19GUkFNRV9MSU1JVF9NSU4JKDApCiAKIC8qKgpAQCAtMTk4MiwxMCArMTk4NCwxMCBAQAogICogICAgIGEpIFVzZSB0aGlzIHNhbWUgaW5pdGlhbCByYXRlIGZvciBmaXJzdCAzIGVudHJpZXMuCiAgKiAgICAgYikgRmluZCBuZXh0IGxvd2VyIGF2YWlsYWJsZSByYXRlIHVzaW5nIHNhbWUgbW9kZSAoU0lTTyBvciBNSU1PKSwKICAqICAgICAgICB1c2UgZm9yIG5leHQgMyBlbnRyaWVzLiAgSWYgbm8gbG93ZXIgcmF0ZSBhdmFpbGFibGUsIHN3aXRjaCB0bwotICogICAgICAgIGxlZ2FjeSBtb2RlIChubyBGQVQgY2hhbm5lbCwgbm8gTUlNTywgbm8gc2hvcnQgZ3VhcmQgaW50ZXJ2YWwpLgorICogICAgICAgIGxlZ2FjeSBtb2RlIChubyBIVDQwIGNoYW5uZWwsIG5vIE1JTU8sIG5vIHNob3J0IGd1YXJkIGludGVydmFsKS4KICAqICAgICBjKSBJZiB1c2luZyBNSU1PLCBzZXQgY29tbWFuZCdzIG1pbW9fZGVsaW1pdGVyIHRvIG51bWJlciBvZiBlbnRyaWVzCiAgKiAgICAgICAgdXNpbmcgTUlNTyAoMyBvciA2KS4KLSAqICAgICBkKSBBZnRlciB0cnlpbmcgMiBIVCByYXRlcywgc3dpdGNoIHRvIGxlZ2FjeSBtb2RlIChubyBGQVQgY2hhbm5lbCwKKyAqICAgICBkKSBBZnRlciB0cnlpbmcgMiBIVCByYXRlcywgc3dpdGNoIHRvIGxlZ2FjeSBtb2RlIChubyBIVDQwIGNoYW5uZWwsCiAgKiAgICAgICAgbm8gTUlNTywgbm8gc2hvcnQgZ3VhcmQgaW50ZXJ2YWwpLCBhdCB0aGUgbmV4dCBsb3dlciBiaXQgcmF0ZQogICogICAgICAgIChlLmcuIGlmIHNlY29uZCBIVCBiaXQgcmF0ZSB3YXMgNTQsIHRyeSA0OCBsZWdhY3kpLCBhbmQgZm9sbG93CiAgKiAgICAgICAgbGVnYWN5IHByb2NlZHVyZSBmb3IgcmVtYWluaW5nIHRhYmxlIGVudHJpZXMuCkBAIC0yMzExLDE1ICsyMzEzLDIyIEBACiAgKiBQTSBhbGxvdzoKICAqICAgYml0IDAgLSAnMCcgRHJpdmVyIG5vdCBhbGxvdyBwb3dlciBtYW5hZ2VtZW50CiAgKiAgICAgICAgICAgJzEnIERyaXZlciBhbGxvdyBQTSAodXNlIHJlc3Qgb2YgcGFyYW1ldGVycykKKyAqCiAgKiB1Q29kZSBzZW5kIHNsZWVwIG5vdGlmaWNhdGlvbnM6CiAgKiAgIGJpdCAxIC0gJzAnIERvbid0IHNlbmQgc2xlZXAgbm90aWZpY2F0aW9uCiAgKiAgICAgICAgICAgJzEnIHNlbmQgc2xlZXAgbm90aWZpY2F0aW9uIChTRU5EX1BNX05PVElGSUNBVElPTikKKyAqCiAgKiBTbGVlcCBvdmVyIERUSU0KICAqICAgYml0IDIgLSAnMCcgUE0gaGF2ZSB0byB3YWxrIHVwIGV2ZXJ5IERUSU0KICAqICAgICAgICAgICAnMScgUE0gY291bGQgc2xlZXAgb3ZlciBEVElNIHRpbGwgbGlzdGVuIEludGVydmFsLgorICoKICAqIFBDSSBwb3dlciBtYW5hZ2VkCiAgKiAgIGJpdCAzIC0gJzAnIChQQ0lfQ0ZHX0xJTktfQ1RSTCAmIDB4MSkKICAqICAgICAgICAgICAnMScgIShQQ0lfQ0ZHX0xJTktfQ1RSTCAmIDB4MSkKKyAqCisgKiBGYXN0IFBECisgKiAgIGJpdCA0IC0gJzEnIFB1dCByYWRpbyB0byBzbGVlcCB3aGVuIHJlY2VpdmluZyBmcmFtZSBmb3Igb3RoZXJzCisgKgogICogRm9yY2Ugc2xlZXAgTW9kZXMKICAqICAgYml0IDMxLzMwLSAnMDAnIHVzZSBib3RoIG1hYy94dGFsIHNsZWVwcwogICogICAgICAgICAgICAgICcwMScgZm9yY2UgTWFjIHNsZWVwCkBAIC0yNDExLDYgKzI0MjAsMTMgQEAKIAlfX2xlMzIgICBjcml0aWNhbF90ZW1wZXJhdHVyZV9SOwogfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiAxMDAwLCBhbmQgNngwMCAqLworc3RydWN0IGl3bF9jdF9raWxsX3Rocm90dGxpbmdfY29uZmlnIHsKKwlfX2xlMzIgICBjcml0aWNhbF90ZW1wZXJhdHVyZV9leGl0OworCV9fbGUzMiAgIHJlc2VydmVkOworCV9fbGUzMiAgIGNyaXRpY2FsX3RlbXBlcmF0dXJlX2VudGVyOworfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAoOCkKICAqIFNjYW4gQ29tbWFuZHMsIFJlc3BvbnNlcywgTm90aWZpY2F0aW9uczoKQEAgLTI5MTMsNiArMjkyOSwyMCBAQAogCXN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSBvZmRtX2h0OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKy8qKgorICogc3RydWN0IHN0YXRpc3RpY3NfdHhfcG93ZXIgLSBjdXJyZW50IHR4IHBvd2VyCisgKgorICogQGFudF9hOiBjdXJyZW50IHR4IHBvd2VyIG9uIGNoYWluIGEgaW4gMS8yIGRCIHN0ZXAKKyAqIEBhbnRfYjogY3VycmVudCB0eCBwb3dlciBvbiBjaGFpbiBiIGluIDEvMiBkQiBzdGVwCisgKiBAYW50X2M6IGN1cnJlbnQgdHggcG93ZXIgb24gY2hhaW4gYyBpbiAxLzIgZEIgc3RlcAorICovCitzdHJ1Y3Qgc3RhdGlzdGljc190eF9wb3dlciB7CisJdTggYW50X2E7CisJdTggYW50X2I7CisJdTggYW50X2M7CisJdTggcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IHN0YXRpc3RpY3NfdHhfbm9uX3BoeV9hZ2cgewogCV9fbGUzMiBiYV90aW1lb3V0OwogCV9fbGUzMiBiYV9yZXNjaGVkdWxlX2ZyYW1lczsKQEAgLTI5MjQsOCArMjk1NCw2IEBACiAJX19sZTMyIHVuZGVycnVuOwogCV9fbGUzMiBidF9wcmlvX2tpbGw7CiAJX19sZTMyIHJ4X2JhX3JzcF9jbnQ7Ci0JX19sZTMyIHJlc2VydmVkMjsKLQlfX2xlMzIgcmVzZXJ2ZWQzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBzdGF0aXN0aWNzX3R4IHsKQEAgLTI5NDQsNiArMjk3Miw4IEBACiAJX19sZTMyIGN0c190aW1lb3V0X2NvbGxpc2lvbjsKIAlfX2xlMzIgYWNrX29yX2JhX3RpbWVvdXRfY29sbGlzaW9uOwogCXN0cnVjdCBzdGF0aXN0aWNzX3R4X25vbl9waHlfYWdnIGFnZzsKKwlzdHJ1Y3Qgc3RhdGlzdGljc190eF9wb3dlciB0eF9wb3dlcjsKKwlfX2xlMzIgcmVzZXJ2ZWQxOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIApAQCAtMzAwOCw3ICszMDM4LDcgQEAKICAqIG9uZSBjaGFubmVsIHRoYXQgaGFzIGp1c3QgYmVlbiBzY2FubmVkLgogICovCiAjZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0JBTkRfMjRHX01TSyAgICAgICAgIGNwdV90b19sZTMyKDB4MikKLSNkZWZpbmUgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLICAgICAgICAgY3B1X3RvX2xlMzIoMHg4KQorI2RlZmluZSBTVEFUSVNUSUNTX1JFUExZX0ZMR19IVDQwX01PREVfTVNLICAgICAgICBjcHVfdG9fbGUzMigweDgpCiAKIHN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3MgewogCV9fbGUzMiBmbGFnOwpAQCAtMzQ2NSw3ICszNDk1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RydWN0IGl3bF9yeF9wYWNrZXQgewotCV9fbGUzMiBsZW47CisJX19sZTMyIGxlbl9uX2ZsYWdzOwogCXN0cnVjdCBpd2xfY21kX2hlYWRlciBoZHI7CiAJdW5pb24gewogCQlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZSByeF9mcmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCAxOGIxMzVmLi5hY2ZkN2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC01OSw2ICs1OSw5IEBACiAJCQkJICAgIElXTF9SQVRFXyMjcHAjI01fSU5ERVgsICAgIFwKIAkJCQkgICAgSVdMX1JBVEVfIyNucCMjTV9JTkRFWCB9CiAKK3UzMiBpd2xfZGVidWdfbGV2ZWw7CitFWFBPUlRfU1lNQk9MKGl3bF9kZWJ1Z19sZXZlbCk7CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBpd2xfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpOwogCiAvKgpAQCAtOTMsNyArOTYsNiBAQAogdm9pZCBpd2xfaHdyYXRlX3RvX3R4X2NvbnRyb2woc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmF0ZV9uX2ZsYWdzLAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvKQogewotCWludCByYXRlX2luZGV4OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqciA9ICZpbmZvLT5jb250cm9sLnJhdGVzWzBdOwogCiAJaW5mby0+YW50ZW5uYV9zZWxfdHggPQpAQCAtMTAyLDE2ICsxMDQsMTMgQEAKIAkJci0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX01DUzsKIAlpZiAocmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfR0ZfTVNLKQogCQlyLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfR1JFRU5fRklFTEQ7Ci0JaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0ZBVF9NU0spCisJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0hUNDBfTVNLKQogCQlyLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIOwogCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19EVVBfTVNLKQogCQlyLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEE7CiAJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX1NHSV9NU0spCiAJCXItPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSTsKLQlyYXRlX2luZGV4ID0gaXdsX2h3cmF0ZV90b19wbGNwX2lkeChyYXRlX25fZmxhZ3MpOwotCWlmIChpbmZvLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCXJhdGVfaW5kZXggLT0gSVdMX0ZJUlNUX09GRE1fUkFURTsKLQlyLT5pZHggPSByYXRlX2luZGV4OworCXItPmlkeCA9IGl3bF9od3JhdGVfdG9fbWFjODAyMTFfaWR4KHJhdGVfbl9mbGFncywgaW5mby0+YmFuZCk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9od3JhdGVfdG9fdHhfY29udHJvbCk7CiAKQEAgLTE0Niw2ICsxNDUsMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX2h3cmF0ZV90b19wbGNwX2lkeCk7CiAKK2ludCBpd2xfaHdyYXRlX3RvX21hYzgwMjExX2lkeCh1MzIgcmF0ZV9uX2ZsYWdzLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCit7CisJaW50IGlkeCA9IDA7CisJaW50IGJhbmRfb2Zmc2V0ID0gMDsKKworCS8qIEhUIHJhdGUgZm9ybWF0OiBtYWM4MDIxMSB3YW50cyBhbiBNQ1MgbnVtYmVyLCB3aGljaCBpcyBqdXN0IExTQiAqLworCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19IVF9NU0spIHsKKwkJaWR4ID0gKHJhdGVfbl9mbGFncyAmIDB4ZmYpOworCQlyZXR1cm4gaWR4OworCS8qIExlZ2FjeSByYXRlIGZvcm1hdCwgc2VhcmNoIGZvciBtYXRjaCBpbiB0YWJsZSAqLworCX0gZWxzZSB7CisJCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQliYW5kX29mZnNldCA9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJCWZvciAoaWR4ID0gYmFuZF9vZmZzZXQ7IGlkeCA8IElXTF9SQVRFX0NPVU5UX0xFR0FDWTsgaWR4KyspCisJCQlpZiAoaXdsX3JhdGVzW2lkeF0ucGxjcCA9PSAocmF0ZV9uX2ZsYWdzICYgMHhGRikpCisJCQkJcmV0dXJuIGlkeCAtIGJhbmRfb2Zmc2V0OworCX0KKworCXJldHVybiAtMTsKK30KKwogdTggaXdsX3RvZ2dsZV90eF9hbnQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBhbnQpCiB7CiAJaW50IGk7CkBAIC0zOTEsMTMgKzQxMSwxNCBAQAogCiAJaHRfaW5mby0+aHRfc3VwcG9ydGVkID0gdHJ1ZTsKIAotCWh0X2luZm8tPmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQ7CisJaWYgKHByaXYtPmNmZy0+aHRfZ3JlZW5maWVsZF9zdXBwb3J0KQorCQlodF9pbmZvLT5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEOwogCWh0X2luZm8tPmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMDsKIAlodF9pbmZvLT5jYXAgfD0gKElFRUU4MDIxMV9IVF9DQVBfU01fUFMgJgogCQkJICAgICAoV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQgPDwgMikpOwogCiAJbWF4X2JpdF9yYXRlID0gTUFYX0JJVF9SQVRFXzIwX01IWjsKLQlpZiAocHJpdi0+aHdfcGFyYW1zLmZhdF9jaGFubmVsICYgQklUKGJhbmQpKSB7CisJaWYgKHByaXYtPmh3X3BhcmFtcy5odDQwX2NoYW5uZWwgJiBCSVQoYmFuZCkpIHsKIAkJaHRfaW5mby0+Y2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOwogCQlodF9pbmZvLT5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7CiAJCWh0X2luZm8tPm1jcy5yeF9tYXNrWzRdID0gMHgwMTsKQEAgLTQzNSwxMiArNDU2LDEyIEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVF9MRUdBQ1k7IGkrKykgewogCQlyYXRlc1tpXS5iaXRyYXRlID0gaXdsX3JhdGVzW2ldLmllZWUgKiA1OwogCQlyYXRlc1tpXS5od192YWx1ZSA9IGk7IC8qIFJhdGUgc2NhbGluZyB3aWxsIHdvcmsgb24gaW5kZXhlcyAqLwogCQlyYXRlc1tpXS5od192YWx1ZV9zaG9ydCA9IGk7CiAJCXJhdGVzW2ldLmZsYWdzID0gMDsKLQkJaWYgKChpID4gSVdMX0xBU1RfT0ZETV9SQVRFKSB8fCAoaSA8IElXTF9GSVJTVF9PRkRNX1JBVEUpKSB7CisJCWlmICgoaSA+PSBJV0xfRklSU1RfQ0NLX1JBVEUpICYmIChpIDw9IElXTF9MQVNUX0NDS19SQVRFKSkgewogCQkJLyoKIAkJCSAqIElmIENDSyAhPSAxTSB0aGVuIHNldCBzaG9ydCBwcmVhbWJsZSByYXRlIGZsYWcuCiAJCQkgKi8KQEAgLTQ3Niw3ICs0OTcsNyBAQAogCWlmICghY2hhbm5lbHMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmF0ZXMgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yYXRlKSAqIChJV0xfUkFURV9DT1VOVCArIDEpKSwKKwlyYXRlcyA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JhdGUpICogSVdMX1JBVEVfQ09VTlRfTEVHQUNZKSwKIAkJCUdGUF9LRVJORUwpOwogCWlmICghcmF0ZXMpIHsKIAkJa2ZyZWUoY2hhbm5lbHMpOwpAQCAtNDg4LDcgKzUwOSw3IEBACiAJc2JhbmQtPmNoYW5uZWxzID0gJmNoYW5uZWxzW0FSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzEpXTsKIAkvKiBqdXN0IE9GRE0gKi8KIAlzYmFuZC0+Yml0cmF0ZXMgPSAmcmF0ZXNbSVdMX0ZJUlNUX09GRE1fUkFURV07Ci0Jc2JhbmQtPm5fYml0cmF0ZXMgPSBJV0xfUkFURV9DT1VOVCAtIElXTF9GSVJTVF9PRkRNX1JBVEU7CisJc2JhbmQtPm5fYml0cmF0ZXMgPSBJV0xfUkFURV9DT1VOVF9MRUdBQ1kgLSBJV0xfRklSU1RfT0ZETV9SQVRFOwogCiAJaWYgKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9OKQogCQlpd2xjb3JlX2luaXRfaHRfaHdfY2FwYWIocHJpdiwgJnNiYW5kLT5odF9jYXAsCkBAIC00OTgsNyArNTE5LDcgQEAKIAlzYmFuZC0+Y2hhbm5lbHMgPSBjaGFubmVsczsKIAkvKiBPRkRNICYgQ0NLICovCiAJc2JhbmQtPmJpdHJhdGVzID0gcmF0ZXM7Ci0Jc2JhbmQtPm5fYml0cmF0ZXMgPSBJV0xfUkFURV9DT1VOVDsKKwlzYmFuZC0+bl9iaXRyYXRlcyA9IElXTF9SQVRFX0NPVU5UX0xFR0FDWTsKIAogCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfTikKIAkJaXdsY29yZV9pbml0X2h0X2h3X2NhcGFiKHByaXYsICZzYmFuZC0+aHRfY2FwLApAQCAtNTM3LDE3ICs1NTgsMTQgQEAKIAkJCWlmIChjaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9SQURBUikKIAkJCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1JBREFSOwogCi0JCQlnZW9fY2gtPmZsYWdzIHw9IGNoLT5mYXRfZXh0ZW5zaW9uX2NoYW5uZWw7CisJCQlnZW9fY2gtPmZsYWdzIHw9IGNoLT5odDQwX2V4dGVuc2lvbl9jaGFubmVsOwogCi0JCQlpZiAoY2gtPm1heF9wb3dlcl9hdmcgPiBwcml2LT50eF9wb3dlcl9jaGFubmVsX2xtdCkKLQkJCQlwcml2LT50eF9wb3dlcl9jaGFubmVsX2xtdCA9IGNoLT5tYXhfcG93ZXJfYXZnOworCQkJaWYgKGNoLT5tYXhfcG93ZXJfYXZnID4gcHJpdi0+dHhfcG93ZXJfZGV2aWNlX2xtdCkKKwkJCQlwcml2LT50eF9wb3dlcl9kZXZpY2VfbG10ID0gY2gtPm1heF9wb3dlcl9hdmc7CiAJCX0gZWxzZSB7CiAJCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOwogCQl9CiAKLQkJLyogU2F2ZSBmbGFncyBmb3IgcmVnIGRvbWFpbiB1c2FnZSAqLwotCQlnZW9fY2gtPm9yaWdfZmxhZ3MgPSBnZW9fY2gtPmZsYWdzOwotCiAJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDaGFubmVsICVkIEZyZXE9JWRbJXNHSHpdICVzIGZsYWc9MHglWFxuIiwKIAkJCQljaC0+Y2hhbm5lbCwgZ2VvX2NoLT5jZW50ZXJfZnJlcSwKIAkJCQlpc19jaGFubmVsX2FfYmFuZChjaCkgPyAgIjUuMiIgOiAiMi40IiwKQEAgLTYwNCwxNiArNjIyLDE2IEBACiAJCXJldHVybiAwOwogCiAJaWYgKGV4dGVuc2lvbl9jaGFuX29mZnNldCA9PSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRSkKLQkJcmV0dXJuICEoY2hfaW5mby0+ZmF0X2V4dGVuc2lvbl9jaGFubmVsICYKKwkJcmV0dXJuICEoY2hfaW5mby0+aHQ0MF9leHRlbnNpb25fY2hhbm5lbCAmCiAJCQkJCUlFRUU4MDIxMV9DSEFOX05PX0hUNDBQTFVTKTsKIAllbHNlIGlmIChleHRlbnNpb25fY2hhbl9vZmZzZXQgPT0gSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQkVMT1cpCi0JCXJldHVybiAhKGNoX2luZm8tPmZhdF9leHRlbnNpb25fY2hhbm5lbCAmCisJCXJldHVybiAhKGNoX2luZm8tPmh0NDBfZXh0ZW5zaW9uX2NoYW5uZWwgJgogCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19IVDQwTUlOVVMpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXU4IGl3bF9pc19mYXRfdHhfYWxsb3dlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCit1OCBpd2xfaXNfaHQ0MF90eF9hbGxvd2VkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKnN0YV9odF9pbmYpCiB7CiAJc3RydWN0IGl3bF9odF9pbmZvICppd2xfaHRfY29uZiA9ICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZzsKQEAgLTYyOSwxMSArNjQ3LDcyIEBACiAJCWlmICghc3RhX2h0X2luZi0+aHRfc3VwcG9ydGVkKQogCQkJcmV0dXJuIDA7CiAJfQorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKHByaXYtPmRpc2FibGVfaHQ0MCkKKwkJcmV0dXJuIDA7CisjZW5kaWYKIAlyZXR1cm4gaXdsX2lzX2NoYW5uZWxfZXh0ZW5zaW9uKHByaXYsIHByaXYtPmJhbmQsCiAJCQlsZTE2X3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCksCiAJCQlpd2xfaHRfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0KTsKIH0KLUVYUE9SVF9TWU1CT0woaXdsX2lzX2ZhdF90eF9hbGxvd2VkKTsKK0VYUE9SVF9TWU1CT0woaXdsX2lzX2h0NDBfdHhfYWxsb3dlZCk7CisKK3N0YXRpYyB1MTYgaXdsX2FkanVzdF9iZWFjb25faW50ZXJ2YWwodTE2IGJlYWNvbl92YWwsIHUxNiBtYXhfYmVhY29uX3ZhbCkKK3sKKwl1MTYgbmV3X3ZhbCA9IDA7CisJdTE2IGJlYWNvbl9mYWN0b3IgPSAwOworCisJYmVhY29uX2ZhY3RvciA9IChiZWFjb25fdmFsICsgbWF4X2JlYWNvbl92YWwpIC8gbWF4X2JlYWNvbl92YWw7CisJbmV3X3ZhbCA9IGJlYWNvbl92YWwgLyBiZWFjb25fZmFjdG9yOworCisJaWYgKCFuZXdfdmFsKQorCQluZXdfdmFsID0gbWF4X2JlYWNvbl92YWw7CisKKwlyZXR1cm4gbmV3X3ZhbDsKK30KKwordm9pZCBpd2xfc2V0dXBfcnhvbl90aW1pbmcoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXU2NCB0c2Y7CisJczMyIGludGVydmFsX3RtLCByZW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSBOVUxMOworCXUxNiBiZWFjb25faW50OworCisJY29uZiA9IGllZWU4MDIxMV9nZXRfaHdfY29uZihwcml2LT5odyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPnJ4b25fdGltaW5nLnRpbWVzdGFtcCA9IGNwdV90b19sZTY0KHByaXYtPnRpbWVzdGFtcCk7CisJcHJpdi0+cnhvbl90aW1pbmcubGlzdGVuX2ludGVydmFsID0gY3B1X3RvX2xlMTYoY29uZi0+bGlzdGVuX2ludGVydmFsKTsKKworCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJYmVhY29uX2ludCA9IHByaXYtPmJlYWNvbl9pbnQ7CisJCXByaXYtPnJ4b25fdGltaW5nLmF0aW1fd2luZG93ID0gMDsKKwl9IGVsc2UgeworCQliZWFjb25faW50ID0gcHJpdi0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50OworCisJCS8qIFRPRE86IHdlIG5lZWQgdG8gZ2V0IGF0aW1fd2luZG93IGZyb20gdXBwZXIgc3RhY2sKKwkJICogZm9yIG5vdyB3ZSBzZXQgdG8gMCAqLworCQlwcml2LT5yeG9uX3RpbWluZy5hdGltX3dpbmRvdyA9IDA7CisJfQorCisJYmVhY29uX2ludCA9IGl3bF9hZGp1c3RfYmVhY29uX2ludGVydmFsKGJlYWNvbl9pbnQsCisJCQkJcHJpdi0+aHdfcGFyYW1zLm1heF9iZWFjb25faXRydmwgKiAxMDI0KTsKKwlwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNihiZWFjb25faW50KTsKKworCXRzZiA9IHByaXYtPnRpbWVzdGFtcDsgLyogdHNmIGlzIG1vZGlmZWQgYnkgZG9fZGl2OiBjb3B5IGl0ICovCisJaW50ZXJ2YWxfdG0gPSBiZWFjb25faW50ICogMTAyNDsKKwlyZW0gPSBkb19kaXYodHNmLCBpbnRlcnZhbF90bSk7CisJcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2luaXRfdmFsID0gY3B1X3RvX2xlMzIoaW50ZXJ2YWxfdG0gLSByZW0pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCUlXTF9ERUJVR19BU1NPQyhwcml2LAorCQkJImJlYWNvbiBpbnRlcnZhbCAlZCBiZWFjb24gdGltZXIgJWQgYmVhY29uIHRpbSAlZFxuIiwKKwkJCWxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbnRlcnZhbCksCisJCQlsZTMyX3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW5pdF92YWwpLAorCQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYXRpbV93aW5kb3cpKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NldHVwX3J4b25fdGltaW5nKTsKIAogdm9pZCBpd2xfc2V0X3J4b25faHdjcnlwdG8oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgaHdfZGVjcnlwdCkKIHsKQEAgLTgwNSw3ICs4ODQsNyBAQAogCWlmICghaHRfaW5mby0+aXNfaHQpIHsKIAkJcnhvbi0+ZmxhZ3MgJj0gfihSWE9OX0ZMR19DSEFOTkVMX01PREVfTVNLIHwKIAkJCVJYT05fRkxHX0NUUkxfQ0hBTk5FTF9MT0NfSElfTVNLIHwKLQkJCVJYT05fRkxHX0ZBVF9QUk9UX01TSyB8CisJCQlSWE9OX0ZMR19IVDQwX1BST1RfTVNLIHwKIAkJCVJYT05fRkxHX0hUX1BST1RfTVNLKTsKIAkJcmV0dXJuOwogCX0KQEAgLTgxNiwxMiArODk1LDEyIEBACiAJcnhvbi0+ZmxhZ3MgfD0gY3B1X3RvX2xlMzIoaHRfaW5mby0+aHRfcHJvdGVjdGlvbiA8PCBSWE9OX0ZMR19IVF9PUEVSQVRJTkdfTU9ERV9QT1MpOwogCiAJLyogU2V0IHVwIGNoYW5uZWwgYmFuZHdpZHRoOgotCSAqIDIwIE1IeiBvbmx5LCAyMC80MCBtaXhlZCBvciBwdXJlIDQwIGlmIGZhdCBvayAqLworCSAqIDIwIE1IeiBvbmx5LCAyMC80MCBtaXhlZCBvciBwdXJlIDQwIGlmIGh0NDAgb2sgKi8KIAkvKiBjbGVhciB0aGUgSFQgY2hhbm5lbCBtb2RlIGJlZm9yZSBzZXQgdGhlIG1vZGUgKi8KIAlyeG9uLT5mbGFncyAmPSB+KFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NU0sgfAogCQkJIFJYT05fRkxHX0NUUkxfQ0hBTk5FTF9MT0NfSElfTVNLKTsKLQlpZiAoaXdsX2lzX2ZhdF90eF9hbGxvd2VkKHByaXYsIE5VTEwpKSB7Ci0JCS8qIHB1cmUgNDAgZmF0ICovCisJaWYgKGl3bF9pc19odDQwX3R4X2FsbG93ZWQocHJpdiwgTlVMTCkpIHsKKwkJLyogcHVyZSBodDQwICovCiAJCWlmIChodF9pbmZvLT5odF9wcm90ZWN0aW9uID09IElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT05fMjBNSFopIHsKIAkJCXJ4b24tPmZsYWdzIHw9IFJYT05fRkxHX0NIQU5ORUxfTU9ERV9QVVJFXzQwOwogCQkJLyogTm90ZTogY29udHJvbCBjaGFubmVsIGlzIG9wcG9zaXRlIG9mIGV4dGVuc2lvbiBjaGFubmVsICovCkBAIC0xMDc2LDcgKzExNTUsNiBAQAogCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX0NDS19NU0s7CiAJfQogfQotRVhQT1JUX1NZTUJPTChpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKTsKIAogLyoKICAqIGluaXRpYWxpemUgcnhvbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmcm9tIGVlcHJvbQpAQCAtMTE3MCw3ICsxMjQ4LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBody0+bl9iaXRyYXRlczsgaSsrKSB7CiAJCXJhdGUgPSAmKGh3LT5iaXRyYXRlc1tpXSk7Ci0JCWlmIChyYXRlLT5od192YWx1ZSA8IElXTF9SQVRFX0NPVU5UKQorCQlpZiAocmF0ZS0+aHdfdmFsdWUgPCBJV0xfUkFURV9DT1VOVF9MRUdBQ1kpCiAJCQlwcml2LT5hY3RpdmVfcmF0ZSB8PSAoMSA8PCByYXRlLT5od192YWx1ZSk7CiAJfQogCkBAIC0xMjMxLDggKzEzMDksMTkwIEBACiAJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1OFs2XSBic3NpZF9hZGRyOiAlcE1cbiIsIHJ4b24tPmJzc2lkX2FkZHIpOwogCUlXTF9ERUJVR19SQURJTyhwcml2LCAidTE2IGFzc29jX2lkOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkpOwogfQotI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cF90ZXh0W10gPSB7CisJIk9LIiwKKwkiRkFJTCIsCisJIkJBRF9QQVJBTSIsCisJIkJBRF9DSEVDS1NVTSIsCisJIk5NSV9JTlRFUlJVUFRfV0RHIiwKKwkiU1lTQVNTRVJUIiwKKwkiRkFUQUxfRVJST1IiLAorCSJCQURfQ09NTUFORCIsCisJIkhXX0VSUk9SX1RVTkVfTE9DSyIsCisJIkhXX0VSUk9SX1RFTVBFUkFUVVJFIiwKKwkiSUxMRUdBTF9DSEFOX0ZSRVEiLAorCSJWQ0NfTk9UX1NUQUJMRSIsCisJIkZIX0VSUk9SIiwKKwkiTk1JX0lOVEVSUlVQVF9IT1NUIiwKKwkiTk1JX0lOVEVSUlVQVF9BQ1RJT05fUFQiLAorCSJOTUlfSU5URVJSVVBUX1VOS05PV04iLAorCSJVQ09ERV9WRVJTSU9OX01JU01BVENIIiwKKwkiSFdfRVJST1JfQUJTX0xPQ0siLAorCSJIV19FUlJPUl9DQUxfTE9DS19GQUlMIiwKKwkiTk1JX0lOVEVSUlVQVF9JTlNUX0FDVElPTl9QVCIsCisJIk5NSV9JTlRFUlJVUFRfREFUQV9BQ1RJT05fUFQiLAorCSJOTUlfVFJNX0hXX0VSIiwKKwkiTk1JX0lOVEVSUlVQVF9UUk0iLAorCSJOTUlfSU5URVJSVVBUX0JSRUFLX1BPSU5UIgorCSJERUJVR18wIiwKKwkiREVCVUdfMSIsCisJIkRFQlVHXzIiLAorCSJERUJVR18zIiwKKwkiVU5LTk9XTiIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cChpbnQgaSkKK3sKKwlpbnQgbWF4ID0gQVJSQVlfU0laRShkZXNjX2xvb2t1cF90ZXh0KSAtIDE7CisKKwlpZiAoaSA8IDAgfHwgaSA+IG1heCkKKwkJaSA9IG1heDsKKworCXJldHVybiBkZXNjX2xvb2t1cF90ZXh0W2ldOworfQorCisjZGVmaW5lIEVSUk9SX1NUQVJUX09GRlNFVCAgKDEgKiBzaXplb2YodTMyKSkKKyNkZWZpbmUgRVJST1JfRUxFTV9TSVpFICAgICAoNyAqIHNpemVvZih1MzIpKQorCitzdGF0aWMgdm9pZCBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1MzIgZGF0YTIsIGxpbmU7CisJdTMyIGRlc2MsIHRpbWUsIGNvdW50LCBiYXNlLCBkYXRhMTsKKwl1MzIgYmxpbmsxLCBibGluazIsIGlsaW5rMSwgaWxpbmsyOworCisJaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkKKwkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC5lcnJvcl9ldmVudF90YWJsZV9wdHIpOworCWVsc2UKKwkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKKworCWlmICghcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgeworCQlJV0xfRVJSKHByaXYsICJOb3QgdmFsaWQgZXJyb3IgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKKwkJcmV0dXJuOworCX0KKworCWNvdW50ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7CisKKwlpZiAoRVJST1JfU1RBUlRfT0ZGU0VUIDw9IGNvdW50ICogRVJST1JfRUxFTV9TSVpFKSB7CisJCUlXTF9FUlIocHJpdiwgIlN0YXJ0IElXTCBFcnJvciBMb2cgRHVtcDpcbiIpOworCQlJV0xfRVJSKHByaXYsICJTdGF0dXM6IDB4JTA4bFgsIGNvdW50OiAlZFxuIiwKKwkJCXByaXYtPnN0YXR1cywgY291bnQpOworCX0KKworCWRlc2MgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgMSAqIHNpemVvZih1MzIpKTsKKwlibGluazEgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgMyAqIHNpemVvZih1MzIpKTsKKwlibGluazIgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgNCAqIHNpemVvZih1MzIpKTsKKwlpbGluazEgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgNSAqIHNpemVvZih1MzIpKTsKKwlpbGluazIgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgNiAqIHNpemVvZih1MzIpKTsKKwlkYXRhMSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA3ICogc2l6ZW9mKHUzMikpOworCWRhdGEyID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDggKiBzaXplb2YodTMyKSk7CisJbGluZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA5ICogc2l6ZW9mKHUzMikpOworCXRpbWUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgMTEgKiBzaXplb2YodTMyKSk7CisKKwlJV0xfRVJSKHByaXYsICJEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWUgICAgICAgIgorCQkiZGF0YTEgICAgICBkYXRhMiAgICAgIGxpbmVcbiIpOworCUlXTF9FUlIocHJpdiwgIiUtMjhzICgjJTAyZCkgJTAxMHUgMHglMDhYIDB4JTA4WCAldVxuIiwKKwkJZGVzY19sb29rdXAoZGVzYyksIGRlc2MsIHRpbWUsIGRhdGExLCBkYXRhMiwgbGluZSk7CisJSVdMX0VSUihwcml2LCAiYmxpbmsxICBibGluazIgIGlsaW5rMSAgaWxpbmsyXG4iKTsKKwlJV0xfRVJSKHByaXYsICIweCUwNVggMHglMDVYIDB4JTA1WCAweCUwNVhcbiIsIGJsaW5rMSwgYmxpbmsyLAorCQlpbGluazEsIGlsaW5rMik7CisKK30KKworI2RlZmluZSBFVkVOVF9TVEFSVF9PRkZTRVQgICg0ICogc2l6ZW9mKHUzMikpCisKKy8qKgorICogaXdsX3ByaW50X2V2ZW50X2xvZyAtIER1bXAgZXJyb3IgZXZlbnQgbG9nIHRvIHN5c2xvZworICoKKyAqLworc3RhdGljIHZvaWQgaXdsX3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCisJCQkJdTMyIG51bV9ldmVudHMsIHUzMiBtb2RlKQoreworCXUzMiBpOworCXUzMiBiYXNlOyAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBldmVudCBsb2cgaGVhZGVyICovCisJdTMyIGV2ZW50X3NpemU7IC8qIDIgdTMycywgb3IgMyB1MzJzIGlmIHRpbWVzdGFtcCByZWNvcmRlZCAqLworCXUzMiBwdHI7ICAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBsb2cgZGF0YSAqLworCXUzMiBldiwgdGltZSwgZGF0YTsgLyogZXZlbnQgbG9nIGRhdGEgKi8KKworCWlmIChudW1fZXZlbnRzID09IDApCisJCXJldHVybjsKKwlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQorCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmxvZ19ldmVudF90YWJsZV9wdHIpOworCWVsc2UKKwkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7CisKKwlpZiAobW9kZSA9PSAwKQorCQlldmVudF9zaXplID0gMiAqIHNpemVvZih1MzIpOworCWVsc2UKKwkJZXZlbnRfc2l6ZSA9IDMgKiBzaXplb2YodTMyKTsKKworCXB0ciA9IGJhc2UgKyBFVkVOVF9TVEFSVF9PRkZTRVQgKyAoc3RhcnRfaWR4ICogZXZlbnRfc2l6ZSk7CisKKwkvKiAidGltZSIgaXMgYWN0dWFsbHkgImRhdGEiIGZvciBtb2RlIDAgKG5vIHRpbWVzdGFtcCkuCisJKiBwbGFjZSBldmVudCBpZCAjIGF0IGZhciByaWdodCBmb3IgZWFzaWVyIHZpc3VhbCBwYXJzaW5nLiAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKyspIHsKKwkJZXYgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOworCQlwdHIgKz0gc2l6ZW9mKHUzMik7CisJCXRpbWUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOworCQlwdHIgKz0gc2l6ZW9mKHUzMik7CisJCWlmIChtb2RlID09IDApIHsKKwkJCS8qIGRhdGEsIGV2ICovCisJCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HOjB4JTA4eDolMDR1XG4iLCB0aW1lLCBldik7CisJCX0gZWxzZSB7CisJCQlkYXRhID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKKwkJCXB0ciArPSBzaXplb2YodTMyKTsKKwkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0dUOiUwMTB1OjB4JTA4eDolMDR1XG4iLAorCQkJCQl0aW1lLCBkYXRhLCBldik7CisJCX0KKwl9Cit9CisKK3ZvaWQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KKwl1MzIgY2FwYWNpdHk7ICAgLyogZXZlbnQgbG9nIGNhcGFjaXR5IGluICMgZW50cmllcyAqLworCXUzMiBtb2RlOyAgICAgICAvKiAwIC0gbm8gdGltZXN0YW1wLCAxIC0gdGltZXN0YW1wIHJlY29yZGVkICovCisJdTMyIG51bV93cmFwczsgIC8qICMgdGltZXMgdUNvZGUgd3JhcHBlZCB0byB0b3Agb2YgbG9nICovCisJdTMyIG5leHRfZW50cnk7IC8qIGluZGV4IG9mIG5leHQgZW50cnkgdG8gYmUgd3JpdHRlbiBieSB1Q29kZSAqLworCXUzMiBzaXplOyAgICAgICAvKiAjIGVudHJpZXMgdGhhdCB3ZSdsbCBwcmludCAqLworCisJaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkKKwkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC5sb2dfZXZlbnRfdGFibGVfcHRyKTsKKwllbHNlCisJCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOworCisJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CisJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgZXZlbnQgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGV2ZW50IGxvZyBoZWFkZXIgKi8KKwljYXBhY2l0eSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOworCW1vZGUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDEgKiBzaXplb2YodTMyKSkpOworCW51bV93cmFwcyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMiAqIHNpemVvZih1MzIpKSk7CisJbmV4dF9lbnRyeSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMyAqIHNpemVvZih1MzIpKSk7CisKKwlzaXplID0gbnVtX3dyYXBzID8gY2FwYWNpdHkgOiBuZXh0X2VudHJ5OworCisJLyogYmFpbCBvdXQgaWYgbm90aGluZyBpbiBsb2cgKi8KKwlpZiAoc2l6ZSA9PSAwKSB7CisJCUlXTF9FUlIocHJpdiwgIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogbm90aGluZyBpbiBsb2dcbiIpOworCQlyZXR1cm47CisJfQorCisJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBkaXNwbGF5IGNvdW50ICVkLCB3cmFwcyAlZFxuIiwKKwkJCXNpemUsIG51bV93cmFwcyk7CisKKwkvKiBpZiB1Q29kZSBoYXMgd3JhcHBlZCBiYWNrIHRvIHRvcCBvZiBsb2csIHN0YXJ0IGF0IHRoZSBvbGRlc3QgZW50cnksCisJICogaS5lIHRoZSBuZXh0IG9uZSB0aGF0IHVDb2RlIHdvdWxkIGZpbGwuICovCisJaWYgKG51bV93cmFwcykKKwkJaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5LAorCQkJCQljYXBhY2l0eSAtIG5leHRfZW50cnksIG1vZGUpOworCS8qICh0aGVuL2Vsc2UpIHN0YXJ0IGF0IHRvcCBvZiBsb2cgKi8KKwlpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksIG1vZGUpOworCit9CisjZW5kaWYKIC8qKgogICogaXdsX2lycV9oYW5kbGVfZXJyb3IgLSBjYWxsZWQgZm9yIEhXIG9yIFNXIGVycm9yIGludGVycnVwdCBmcm9tIGNhcmQKICAqLwpAQCAtMTI0NSw3ICsxNTA1LDcgQEAKIAljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JaWYgKHByaXYtPmRlYnVnX2xldmVsICYgSVdMX0RMX0ZXX0VSUk9SUykgeworCWlmIChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX0ZXX0VSUk9SUykgewogCQlpd2xfZHVtcF9uaWNfZXJyb3JfbG9nKHByaXYpOwogCQlpd2xfZHVtcF9uaWNfZXZlbnRfbG9nKHByaXYpOwogCQlpd2xfcHJpbnRfcnhfY29uZmlnX2NtZChwcml2KTsKQEAgLTEyNzEsNyArMTUzMSw3IEBACiB2b2lkIGl3bF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKIAkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCSAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKKwkJCSAgdTY0IG11bHRpY2FzdCkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlfX2xlMzIgKmZpbHRlcl9mbGFncyA9ICZwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzOwpAQCAtMTMyNSw3ICsxNTg1LDkgQEAKIAlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CiAJCSAgICBJRUVFODAyMTFfSFdfTk9JU0VfREJNIHwKIAkJICAgIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTiB8Ci0JCSAgICBJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVDsKKwkJICAgIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UIHwKKwkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJCSAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUzsKIAlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CiAJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CiAJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CkBAIC0xMzM1LDYgKzE1OTcsMTIgQEAKIAkvKiBGaXJtd2FyZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgKi8KIAlody0+d2lwaHktPmRpc2FibGVfYmVhY29uX2hpbnRzID0gdHJ1ZTsKIAorCS8qCisJICogRm9yIG5vdywgZGlzYWJsZSBQUyBieSBkZWZhdWx0IGJlY2F1c2UgaXQgYWZmZWN0cworCSAqIFJYIHBlcmZvcm1hbmNlIHNpZ25pZmljYW50bHkuCisJICovCisJaHctPndpcGh5LT5wc19kZWZhdWx0ID0gZmFsc2U7CisKIAlody0+d2lwaHktPm1heF9zY2FuX3NzaWRzID0gUFJPQkVfT1BUSU9OX01BWDsKIAkvKiB3ZSBjcmVhdGUgdGhlIDgwMi4xMSBoZWFkZXIgYW5kIGEgemVyby1sZW5ndGggU1NJRCBlbGVtZW50ICovCiAJaHctPndpcGh5LT5tYXhfc2Nhbl9pZV9sZW4gPSBJV0xfTUFYX1BST0JFX1JFUVVFU1QgLSAyNCAtIDI7CkBAIC0xMzY0LDcgKzE2MzIsNiBAQAogCiBpbnQgaXdsX3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXByaXYtPmh3X3BhcmFtcy5zd19jcnlwdG8gPSBwcml2LT5jZmctPm1vZF9wYXJhbXMtPnN3X2NyeXB0bzsKIAlwcml2LT5od19wYXJhbXMubWF4X3J4cV9zaXplID0gUlhfUVVFVUVfU0laRTsKIAlwcml2LT5od19wYXJhbXMubWF4X3J4cV9sb2cgPSBSWF9RVUVVRV9TSVpFX0xPRzsKIAlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5hbXNkdV9zaXplXzhLKQpAQCAtMTM3Myw2ICsxNjQwLDggQEAKIAkJcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplID0gSVdMX1JYX0JVRl9TSVpFXzRLOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfcGt0X3NpemUgPSBwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUgLSAyNTY7CiAKKwlwcml2LT5od19wYXJhbXMubWF4X2JlYWNvbl9pdHJ2bCA9IElXTF9NQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMOworCiAJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+ZGlzYWJsZV8xMW4pCiAJCXByaXYtPmNmZy0+c2t1ICY9IH5JV0xfU0tVX047CiAKQEAgLTE0MTksOSArMTY4OCwxMCBAQAogCXByaXYtPnFvc19kYXRhLnFvc19jYXAudmFsID0gMDsKIAogCXByaXYtPnJhdGVzX21hc2sgPSBJV0xfUkFURVNfTUFTSzsKLQkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBDQU0gbW9kZSAqLwotCXByaXYtPnBvd2VyX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07Ci0JcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWDsKKwkvKiBTZXQgdGhlIHR4X3Bvd2VyX3VzZXJfbG10IHRvIHRoZSBsb3dlc3QgcG93ZXIgbGV2ZWwKKwkgKiB0aGlzIHZhbHVlIHdpbGwgZ2V0IG92ZXJ3cml0dGVuIGJ5IGNoYW5uZWwgbWF4IHBvd2VyIGF2ZworCSAqIGZyb20gZWVwcm9tICovCisJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTjsKIAogCXJldCA9IGl3bF9pbml0X2NoYW5uZWxfbWFwKHByaXYpOwogCWlmIChyZXQpIHsKQEAgLTE0NDgsNiArMTcxOCw4IEBACiBpbnQgaXdsX3NldF90eF9wb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHM4IHR4X3Bvd2VyLCBib29sIGZvcmNlKQogewogCWludCByZXQgPSAwOworCXM4IHByZXZfdHhfcG93ZXIgPSBwcml2LT50eF9wb3dlcl91c2VyX2xtdDsKKwogCWlmICh0eF9wb3dlciA8IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUlOKSB7CiAJCUlXTF9XQVJOKHByaXYsICJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGJlbG93IGxvd2VyIGxpbWl0ICVkLlxuIiwKIAkJCSB0eF9wb3dlciwKQEAgLTE0NTUsMjUgKzE3MjcsMzcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKHR4X3Bvd2VyID4gSVdMX1RYX1BPV0VSX1RBUkdFVF9QT1dFUl9NQVgpIHsKLQkJSVdMX1dBUk4ocHJpdiwgIlJlcXVlc3RlZCB1c2VyIFRYUE9XRVIgJWQgYWJvdmUgdXBwZXIgbGltaXQgJWQuXG4iLAotCQkJIHR4X3Bvd2VyLAotCQkJIElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUFYKTsKKwlpZiAodHhfcG93ZXIgPiBwcml2LT50eF9wb3dlcl9kZXZpY2VfbG10KSB7CisJCUlXTF9XQVJOKHByaXYsCisJCQkiUmVxdWVzdGVkIHVzZXIgVFhQT1dFUiAlZCBhYm92ZSB1cHBlciBsaW1pdCAlZC5cbiIsCisJCQkgdHhfcG93ZXIsIHByaXYtPnR4X3Bvd2VyX2RldmljZV9sbXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAocHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgIT0gdHhfcG93ZXIpCiAJCWZvcmNlID0gdHJ1ZTsKIAotCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gdHhfcG93ZXI7Ci0KIAkvKiBpZiBuaWMgaXMgbm90IHVwIGRvbid0IHNlbmQgY29tbWFuZCAqLwotCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKQotCQlyZXR1cm4gcmV0OworCWlmIChpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSB0eF9wb3dlcjsKKwkJaWYgKGZvcmNlICYmIHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIpCisJCQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5zZW5kX3R4X3Bvd2VyKHByaXYpOworCQllbHNlIGlmICghcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2VuZF90eF9wb3dlcikKKwkJCXJldCA9IC1FT1BOT1RTVVBQOworCQkvKgorCQkgKiBpZiBmYWlsIHRvIHNldCB0eF9wb3dlciwgcmVzdG9yZSB0aGUgb3JpZy4gdHggcG93ZXIKKwkJICovCisJCWlmIChyZXQpCisJCQlwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9IHByZXZfdHhfcG93ZXI7CisJfQogCi0JaWYgKGZvcmNlICYmIHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIpCi0JCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIocHJpdik7Ci0KKwkvKgorCSAqIEV2ZW4gdGhpcyBpcyBhbiBhc3luYyBob3N0IGNvbW1hbmQsIHRoZSBjb21tYW5kCisJICogd2lsbCBhbHdheXMgcmVwb3J0IHN1Y2Nlc3MgZnJvbSB1Q29kZQorCSAqIFNvIG9uY2UgZHJpdmVyIGNhbiBwbGFjaW5nIHRoZSBjb21tYW5kIGludG8gdGhlIHF1ZXVlCisJICogc3VjY2Vzc2Z1bGx5LCBkcml2ZXIgY2FuIHVzZSBwcml2LT50eF9wb3dlcl91c2VyX2xtdAorCSAqIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgdHggcG93ZXIKKwkgKi8KIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpd2xfc2V0X3R4X3Bvd2VyKTsKQEAgLTE0ODcsMzEgKzE3NzEsNiBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfdW5pbml0X2Rydik7CiAKLQotdm9pZCBpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQljbGVhcl9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKTsKLQotCS8qIGRpc2FibGUgaW50ZXJydXB0cyBmcm9tIHVDb2RlL05JQyB0byBob3N0ICovCi0JaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCAweDAwMDAwMDAwKTsKLQotCS8qIGFja25vd2xlZGdlL2NsZWFyL3Jlc2V0IGFueSBpbnRlcnJ1cHRzIHN0aWxsIHBlbmRpbmcKLQkgKiBmcm9tIHVDb2RlIG9yIGZsb3cgaGFuZGxlciAoUngvVHggRE1BKSAqLwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4ZmZmZmZmZmYpOwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTLCAweGZmZmZmZmZmKTsKLQlJV0xfREVCVUdfSVNSKHByaXYsICJEaXNhYmxlZCBpbnRlcnJ1cHRzXG4iKTsKLX0KLUVYUE9SVF9TWU1CT0woaXdsX2Rpc2FibGVfaW50ZXJydXB0cyk7Ci0KLXZvaWQgaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlJV0xfREVCVUdfSVNSKHByaXYsICJFbmFibGluZyBpbnRlcnJ1cHRzXG4iKTsKLQlzZXRfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cyk7Ci0JaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCBwcml2LT5pbnRhX21hc2spOwotfQotRVhQT1JUX1NZTUJPTChpd2xfZW5hYmxlX2ludGVycnVwdHMpOwotCi0KICNkZWZpbmUgSUNUX0NPVU5UIChQQUdFX1NJWkUvc2l6ZW9mKHUzMikpCiAKIC8qIEZyZWUgZHJhbSB0YWJsZSAqLwpAQCAtMTU4MSw3ICsxODQwLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAKLQltZW1zZXQoJnByaXYtPmljdF90YmxbMF0sMCwgc2l6ZW9mKHUzMikgKiBJQ1RfQ09VTlQpOworCW1lbXNldCgmcHJpdi0+aWN0X3RibFswXSwgMCwgc2l6ZW9mKHUzMikgKiBJQ1RfQ09VTlQpOwogCiAJdmFsID0gcHJpdi0+YWxpZ25lZF9pY3RfdGJsX2RtYSA+PiBQQUdFX1NISUZUOwogCkBAIC0xNjU5LDEzICsxOTE4LDEzIEBACiAJLyogcmVhZCBhbGwgZW50cmllcyB0aGF0IG5vdCAwIHN0YXJ0IHdpdGggaWN0X2luZGV4ICovCiAJd2hpbGUgKHByaXYtPmljdF90YmxbcHJpdi0+aWN0X2luZGV4XSkgewogCi0JCXZhbCB8PSBwcml2LT5pY3RfdGJsW3ByaXYtPmljdF9pbmRleF07CisJCXZhbCB8PSBsZTMyX3RvX2NwdShwcml2LT5pY3RfdGJsW3ByaXYtPmljdF9pbmRleF0pOwogCQlJV0xfREVCVUdfSVNSKHByaXYsICJJQ1QgaW5kZXggJWQgdmFsdWUgMHglMDhYXG4iLAotCQkJCQlwcml2LT5pY3RfaW5kZXgsCi0JCQkJCXByaXYtPmljdF90YmxbcHJpdi0+aWN0X2luZGV4XSk7CisJCQkJcHJpdi0+aWN0X2luZGV4LAorCQkJCWxlMzJfdG9fY3B1KHByaXYtPmljdF90YmxbcHJpdi0+aWN0X2luZGV4XSkpOwogCQlwcml2LT5pY3RfdGJsW3ByaXYtPmljdF9pbmRleF0gPSAwOwogCQlwcml2LT5pY3RfaW5kZXggPSBpd2xfcXVldWVfaW5jX3dyYXAocHJpdi0+aWN0X2luZGV4LAotCQkJCQkJCQlJQ1RfQ09VTlQpOworCQkJCQkJICAgICBJQ1RfQ09VTlQpOwogCiAJfQogCkBAIC0xNzQ1LDcgKzIwMDQsNyBAQAogCX0KIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JaWYgKHByaXYtPmRlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CisJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiAoSVdMX0RMX0lTUikpIHsKIAkJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwogCQlJV0xfREVCVUdfSVNSKHByaXYsICJJU1IgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCAiCiAJCQkgICAgICAiZmggMHglMDh4XG4iLCBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgpOwpAQCAtMTg1Miw3ICsyMTExLDcgQEAKIAl1MzIgc3RhdF9mbGFncyA9IDA7CiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1NUQVRJU1RJQ1NfQ01ELAotCQkubWV0YS5mbGFncyA9IGZsYWdzLAorCQkuZmxhZ3MgPSBmbGFncywKIAkJLmxlbiA9IHNpemVvZihzdGF0X2ZsYWdzKSwKIAkJLmRhdGEgPSAodTggKikgJnN0YXRfZmxhZ3MsCiAJfTsKQEAgLTE5ODQsMTk0ICsyMjQzLDEwIEBACiBFWFBPUlRfU1lNQk9MKGl3bF92ZXJpZnlfdWNvZGUpOwogCiAKLXN0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cF90ZXh0W10gPSB7Ci0JIk9LIiwKLQkiRkFJTCIsCi0JIkJBRF9QQVJBTSIsCi0JIkJBRF9DSEVDS1NVTSIsCi0JIk5NSV9JTlRFUlJVUFRfV0RHIiwKLQkiU1lTQVNTRVJUIiwKLQkiRkFUQUxfRVJST1IiLAotCSJCQURfQ09NTUFORCIsCi0JIkhXX0VSUk9SX1RVTkVfTE9DSyIsCi0JIkhXX0VSUk9SX1RFTVBFUkFUVVJFIiwKLQkiSUxMRUdBTF9DSEFOX0ZSRVEiLAotCSJWQ0NfTk9UX1NUQUJMRSIsCi0JIkZIX0VSUk9SIiwKLQkiTk1JX0lOVEVSUlVQVF9IT1NUIiwKLQkiTk1JX0lOVEVSUlVQVF9BQ1RJT05fUFQiLAotCSJOTUlfSU5URVJSVVBUX1VOS05PV04iLAotCSJVQ09ERV9WRVJTSU9OX01JU01BVENIIiwKLQkiSFdfRVJST1JfQUJTX0xPQ0siLAotCSJIV19FUlJPUl9DQUxfTE9DS19GQUlMIiwKLQkiTk1JX0lOVEVSUlVQVF9JTlNUX0FDVElPTl9QVCIsCi0JIk5NSV9JTlRFUlJVUFRfREFUQV9BQ1RJT05fUFQiLAotCSJOTUlfVFJNX0hXX0VSIiwKLQkiTk1JX0lOVEVSUlVQVF9UUk0iLAotCSJOTUlfSU5URVJSVVBUX0JSRUFLX1BPSU5UIgotCSJERUJVR18wIiwKLQkiREVCVUdfMSIsCi0JIkRFQlVHXzIiLAotCSJERUJVR18zIiwKLQkiVU5LTk9XTiIKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cChpbnQgaSkKLXsKLQlpbnQgbWF4ID0gQVJSQVlfU0laRShkZXNjX2xvb2t1cF90ZXh0KSAtIDE7Ci0KLQlpZiAoaSA8IDAgfHwgaSA+IG1heCkKLQkJaSA9IG1heDsKLQotCXJldHVybiBkZXNjX2xvb2t1cF90ZXh0W2ldOwotfQotCi0jZGVmaW5lIEVSUk9SX1NUQVJUX09GRlNFVCAgKDEgKiBzaXplb2YodTMyKSkKLSNkZWZpbmUgRVJST1JfRUxFTV9TSVpFICAgICAoNyAqIHNpemVvZih1MzIpKQotCi12b2lkIGl3bF9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXUzMiBkYXRhMiwgbGluZTsKLQl1MzIgZGVzYywgdGltZSwgY291bnQsIGJhc2UsIGRhdGExOwotCXUzMiBibGluazEsIGJsaW5rMiwgaWxpbmsxLCBpbGluazI7Ci0KLQlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmVycm9yX2V2ZW50X3RhYmxlX3B0cik7Ci0JZWxzZQotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5lcnJvcl9ldmVudF90YWJsZV9wdHIpOwotCi0JaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlIocHJpdiwgIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOwotCQlyZXR1cm47Ci0JfQotCi0JY291bnQgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlKTsKLQotCWlmIChFUlJPUl9TVEFSVF9PRkZTRVQgPD0gY291bnQgKiBFUlJPUl9FTEVNX1NJWkUpIHsKLQkJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEVycm9yIExvZyBEdW1wOlxuIik7Ci0JCUlXTF9FUlIocHJpdiwgIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLAotCQkJcHJpdi0+c3RhdHVzLCBjb3VudCk7Ci0JfQotCi0JZGVzYyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAxICogc2l6ZW9mKHUzMikpOwotCWJsaW5rMSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAzICogc2l6ZW9mKHUzMikpOwotCWJsaW5rMiA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA0ICogc2l6ZW9mKHUzMikpOwotCWlsaW5rMSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA1ICogc2l6ZW9mKHUzMikpOwotCWlsaW5rMiA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA2ICogc2l6ZW9mKHUzMikpOwotCWRhdGExID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDcgKiBzaXplb2YodTMyKSk7Ci0JZGF0YTIgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgOCAqIHNpemVvZih1MzIpKTsKLQlsaW5lID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDkgKiBzaXplb2YodTMyKSk7Ci0JdGltZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAxMSAqIHNpemVvZih1MzIpKTsKLQotCUlXTF9FUlIocHJpdiwgIkRlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZSAgICAgICAiCi0JCSJkYXRhMSAgICAgIGRhdGEyICAgICAgbGluZVxuIik7Ci0JSVdMX0VSUihwcml2LCAiJS0yOHMgKCMlMDJkKSAlMDEwdSAweCUwOFggMHglMDhYICV1XG4iLAotCQlkZXNjX2xvb2t1cChkZXNjKSwgZGVzYywgdGltZSwgZGF0YTEsIGRhdGEyLCBsaW5lKTsKLQlJV0xfRVJSKHByaXYsICJibGluazEgIGJsaW5rMiAgaWxpbmsxICBpbGluazJcbiIpOwotCUlXTF9FUlIocHJpdiwgIjB4JTA1WCAweCUwNVggMHglMDVYIDB4JTA1WFxuIiwgYmxpbmsxLCBibGluazIsCi0JCWlsaW5rMSwgaWxpbmsyKTsKLQotfQotRVhQT1JUX1NZTUJPTChpd2xfZHVtcF9uaWNfZXJyb3JfbG9nKTsKLQotI2RlZmluZSBFVkVOVF9TVEFSVF9PRkZTRVQgICg0ICogc2l6ZW9mKHUzMikpCi0KLS8qKgotICogaXdsX3ByaW50X2V2ZW50X2xvZyAtIER1bXAgZXJyb3IgZXZlbnQgbG9nIHRvIHN5c2xvZwotICoKLSAqLwotc3RhdGljIHZvaWQgaXdsX3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCi0JCQkJdTMyIG51bV9ldmVudHMsIHUzMiBtb2RlKQotewotCXUzMiBpOwotCXUzMiBiYXNlOyAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBldmVudCBsb2cgaGVhZGVyICovCi0JdTMyIGV2ZW50X3NpemU7IC8qIDIgdTMycywgb3IgMyB1MzJzIGlmIHRpbWVzdGFtcCByZWNvcmRlZCAqLwotCXUzMiBwdHI7ICAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBsb2cgZGF0YSAqLwotCXUzMiBldiwgdGltZSwgZGF0YTsgLyogZXZlbnQgbG9nIGRhdGEgKi8KLQotCWlmIChudW1fZXZlbnRzID09IDApCi0JCXJldHVybjsKLQlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmxvZ19ldmVudF90YWJsZV9wdHIpOwotCWVsc2UKLQkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7Ci0KLQlpZiAobW9kZSA9PSAwKQotCQlldmVudF9zaXplID0gMiAqIHNpemVvZih1MzIpOwotCWVsc2UKLQkJZXZlbnRfc2l6ZSA9IDMgKiBzaXplb2YodTMyKTsKLQotCXB0ciA9IGJhc2UgKyBFVkVOVF9TVEFSVF9PRkZTRVQgKyAoc3RhcnRfaWR4ICogZXZlbnRfc2l6ZSk7Ci0KLQkvKiAidGltZSIgaXMgYWN0dWFsbHkgImRhdGEiIGZvciBtb2RlIDAgKG5vIHRpbWVzdGFtcCkuCi0JKiBwbGFjZSBldmVudCBpZCAjIGF0IGZhciByaWdodCBmb3IgZWFzaWVyIHZpc3VhbCBwYXJzaW5nLiAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKyspIHsKLQkJZXYgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOwotCQlwdHIgKz0gc2l6ZW9mKHUzMik7Ci0JCXRpbWUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOwotCQlwdHIgKz0gc2l6ZW9mKHUzMik7Ci0JCWlmIChtb2RlID09IDApIHsKLQkJCS8qIGRhdGEsIGV2ICovCi0JCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HOjB4JTA4eDolMDR1XG4iLCB0aW1lLCBldik7Ci0JCX0gZWxzZSB7Ci0JCQlkYXRhID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKLQkJCXB0ciArPSBzaXplb2YodTMyKTsKLQkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0dUOiUwMTB1OjB4JTA4eDolMDR1XG4iLAotCQkJCQl0aW1lLCBkYXRhLCBldik7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KLQl1MzIgY2FwYWNpdHk7ICAgLyogZXZlbnQgbG9nIGNhcGFjaXR5IGluICMgZW50cmllcyAqLwotCXUzMiBtb2RlOyAgICAgICAvKiAwIC0gbm8gdGltZXN0YW1wLCAxIC0gdGltZXN0YW1wIHJlY29yZGVkICovCi0JdTMyIG51bV93cmFwczsgIC8qICMgdGltZXMgdUNvZGUgd3JhcHBlZCB0byB0b3Agb2YgbG9nICovCi0JdTMyIG5leHRfZW50cnk7IC8qIGluZGV4IG9mIG5leHQgZW50cnkgdG8gYmUgd3JpdHRlbiBieSB1Q29kZSAqLwotCXUzMiBzaXplOyAgICAgICAvKiAjIGVudHJpZXMgdGhhdCB3ZSdsbCBwcmludCAqLwotCi0JaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkKLQkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC5sb2dfZXZlbnRfdGFibGVfcHRyKTsKLQllbHNlCi0JCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwotCi0JaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkludmFsaWQgZXZlbnQgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGV2ZW50IGxvZyBoZWFkZXIgKi8KLQljYXBhY2l0eSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOwotCW1vZGUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDEgKiBzaXplb2YodTMyKSkpOwotCW51bV93cmFwcyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMiAqIHNpemVvZih1MzIpKSk7Ci0JbmV4dF9lbnRyeSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMyAqIHNpemVvZih1MzIpKSk7Ci0KLQlzaXplID0gbnVtX3dyYXBzID8gY2FwYWNpdHkgOiBuZXh0X2VudHJ5OwotCi0JLyogYmFpbCBvdXQgaWYgbm90aGluZyBpbiBsb2cgKi8KLQlpZiAoc2l6ZSA9PSAwKSB7Ci0JCUlXTF9FUlIocHJpdiwgIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogbm90aGluZyBpbiBsb2dcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBkaXNwbGF5IGNvdW50ICVkLCB3cmFwcyAlZFxuIiwKLQkJCXNpemUsIG51bV93cmFwcyk7Ci0KLQkvKiBpZiB1Q29kZSBoYXMgd3JhcHBlZCBiYWNrIHRvIHRvcCBvZiBsb2csIHN0YXJ0IGF0IHRoZSBvbGRlc3QgZW50cnksCi0JICogaS5lIHRoZSBuZXh0IG9uZSB0aGF0IHVDb2RlIHdvdWxkIGZpbGwuICovCi0JaWYgKG51bV93cmFwcykKLQkJaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5LAotCQkJCQljYXBhY2l0eSAtIG5leHRfZW50cnksIG1vZGUpOwotCS8qICh0aGVuL2Vsc2UpIHN0YXJ0IGF0IHRvcCBvZiBsb2cgKi8KLQlpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksIG1vZGUpOwotCi19Ci1FWFBPUlRfU1lNQk9MKGl3bF9kdW1wX25pY19ldmVudF9sb2cpOwotCiB2b2lkIGl3bF9yZl9raWxsX2N0X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9jdF9raWxsX2NvbmZpZyBjbWQ7CisJc3RydWN0IGl3bF9jdF9raWxsX3Rocm90dGxpbmdfY29uZmlnIGFkdl9jbWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMjE3OSwxOCArMjI1NCw0NCBAQAogCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwKIAkJICAgIENTUl9VQ09ERV9EUlZfR1AxX1JFR19CSVRfQ1RfS0lMTF9FWElUKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+dGhlcm1hbF90aHJvdHRsZS5jdF9raWxsX3RvZ2dsZSA9IGZhbHNlOwogCi0JY21kLmNyaXRpY2FsX3RlbXBlcmF0dXJlX1IgPQotCQljcHVfdG9fbGUzMihwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQpOworCXN3aXRjaCAocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgeworCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzEwMDA6CisJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNngwMDoKKwljYXNlIENTUl9IV19SRVZfVFlQRV82eDUwOgorCQlhZHZfY21kLmNyaXRpY2FsX3RlbXBlcmF0dXJlX2VudGVyID0KKwkJCWNwdV90b19sZTMyKHByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCk7CisJCWFkdl9jbWQuY3JpdGljYWxfdGVtcGVyYXR1cmVfZXhpdCA9CisJCQljcHVfdG9fbGUzMihwcml2LT5od19wYXJhbXMuY3Rfa2lsbF9leGl0X3RocmVzaG9sZCk7CiAKLQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0NUX0tJTExfQ09ORklHX0NNRCwKLQkJCSAgICAgICBzaXplb2YoY21kKSwgJmNtZCk7Ci0JaWYgKHJldCkKLQkJSVdMX0VSUihwcml2LCAiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIGZhaWxlZFxuIik7Ci0JZWxzZQotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIHN1Y2NlZWRlZCwgIgotCQkJImNyaXRpY2FsIHRlbXBlcmF0dXJlIGlzICVkXG4iLAotCQkJY21kLmNyaXRpY2FsX3RlbXBlcmF0dXJlX1IpOworCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0NUX0tJTExfQ09ORklHX0NNRCwKKwkJCQkgICAgICAgc2l6ZW9mKGFkdl9jbWQpLCAmYWR2X2NtZCk7CisJCWlmIChyZXQpCisJCQlJV0xfRVJSKHByaXYsICJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgZmFpbGVkXG4iKTsKKwkJZWxzZQorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJFUExZX0NUX0tJTExfQ09ORklHX0NNRCAiCisJCQkJCSJzdWNjZWVkZWQsICIKKwkJCQkJImNyaXRpY2FsIHRlbXBlcmF0dXJlIGVudGVyIGlzICVkLCIKKwkJCQkJImV4aXQgaXMgJWRcbiIsCisJCQkJICAgICAgIHByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCwKKwkJCQkgICAgICAgcHJpdi0+aHdfcGFyYW1zLmN0X2tpbGxfZXhpdF90aHJlc2hvbGQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljbWQuY3JpdGljYWxfdGVtcGVyYXR1cmVfUiA9CisJCQljcHVfdG9fbGUzMihwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQpOworCisJCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01ELAorCQkJCSAgICAgICBzaXplb2YoY21kKSwgJmNtZCk7CisJCWlmIChyZXQpCisJCQlJV0xfRVJSKHByaXYsICJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgZmFpbGVkXG4iKTsKKwkJZWxzZQorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJFUExZX0NUX0tJTExfQ09ORklHX0NNRCAiCisJCQkJCSJzdWNjZWVkZWQsICIKKwkJCQkJImNyaXRpY2FsIHRlbXBlcmF0dXJlIGlzICVkXG4iLAorCQkJCQlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQpOworCQlicmVhazsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9yZl9raWxsX2N0X2NvbmZpZyk7CiAKQEAgLTIyMTEsMTIgKzIzMTIsMTEgQEAKIAkJLmlkID0gUkVQTFlfQ0FSRF9TVEFURV9DTUQsCiAJCS5sZW4gPSBzaXplb2YodTMyKSwKIAkJLmRhdGEgPSAmZmxhZ3MsCi0JCS5tZXRhLmZsYWdzID0gbWV0YV9mbGFnLAorCQkuZmxhZ3MgPSBtZXRhX2ZsYWcsCiAJfTsKIAogCXJldHVybiBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2NhcmRfc3RhdGUpOwogCiB2b2lkIGl3bF9yeF9wbV9zbGVlcF9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKQEAgLTIyMzQsMTAgKzIzMzQsMTEgQEAKIAkJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJdTMyIGxlbiA9IGxlMzJfdG9fY3B1KHBrdC0+bGVuX25fZmxhZ3MpICYgRkhfUlNDU1JfRlJBTUVfU0laRV9NU0s7CiAJSVdMX0RFQlVHX1JBRElPKHByaXYsICJEdW1waW5nICVkIGJ5dGVzIG9mIHVuaGFuZGxlZCAiCi0JCQkibm90aWZpY2F0aW9uIGZvciAlczpcbiIsCi0JCQlsZTMyX3RvX2NwdShwa3QtPmxlbiksIGdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCkpOwotCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfUkFESU8sIHBrdC0+dS5yYXcsIGxlMzJfdG9fY3B1KHBrdC0+bGVuKSk7CisJCQkibm90aWZpY2F0aW9uIGZvciAlczpcbiIsIGxlbiwKKwkJCWdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCkpOworCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfUkFESU8sIHBrdC0+dS5yYXcsIGxlbik7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9yeF9wbV9kZWJ1Z19zdGF0aXN0aWNzX25vdGlmKTsKIApAQCAtMjI2MCw3ICsyMzYxLDYgQEAKIHsKIAltZW1zZXQoJnByaXYtPmlzcl9zdGF0cywgMCwgc2l6ZW9mKHByaXYtPmlzcl9zdGF0cykpOwogfQotRVhQT1JUX1NZTUJPTChpd2xfY2xlYXJfaXNyX3N0YXRzKTsKIAogaW50IGl3bF9tYWNfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkJICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKQEAgLTIzMzMsMzkgKzI0MzMsMTAgQEAKIAl9CiAJaHRfY29uZiA9ICZzdGEtPmh0X2NhcDsKIAotCWlmIChodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCkKLQkJaXdsX2NvbmYtPnNnZiB8PSBIVF9TSE9SVF9HSV8yME1IWjsKLQlpZiAoaHRfY29uZi0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDApCi0JCWl3bF9jb25mLT5zZ2YgfD0gSFRfU0hPUlRfR0lfNDBNSFo7Ci0KLQlpd2xfY29uZi0+aXNfZ3JlZW5fZmllbGQgPSAhIShodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQpOwotCWl3bF9jb25mLT5tYXhfYW1zZHVfc2l6ZSA9Ci0JCSEhKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVKTsKLQotCWl3bF9jb25mLT5zdXBwb3J0ZWRfY2hhbl93aWR0aCA9Ci0JCSEhKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKTsKLQotCS8qCi0JICogWFhYOiBUaGUgSFQgY29uZmlndXJhdGlvbiBuZWVkcyB0byBiZSBtb3ZlZCBpbnRvIGl3bF9tYWNfY29uZmlnKCkKLQkgKgl0byBiZSBkb25lIHRoZXJlIGNvcnJlY3RseS4KLQkgKi8KLQotCWl3bF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19OT05FOwotCWlmIChjb25mX2lzX2h0NDBfbWludXMoJnByaXYtPmh3LT5jb25mKSkKLQkJaXdsX2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCA9IElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0JFTE9XOwotCWVsc2UgaWYgKGNvbmZfaXNfaHQ0MF9wbHVzKCZwcml2LT5ody0+Y29uZikpCi0JCWl3bF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRTsKLQotCS8qIElmIG5vIGFib3ZlIG9yIGJlbG93IGNoYW5uZWwgc3VwcGxpZWQgZGlzYWJsZSBGQVQgY2hhbm5lbCAqLwotCWlmIChpd2xfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ICE9IElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0FCT1ZFICYmCi0JICAgIGl3bF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgIT0gSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQkVMT1cpCi0JCWl3bF9jb25mLT5zdXBwb3J0ZWRfY2hhbl93aWR0aCA9IDA7Ci0KIAlpd2xfY29uZi0+c21fcHMgPSAodTgpKChodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTKSA+PiAyKTsKIAogCW1lbWNweSgmaXdsX2NvbmYtPm1jcywgJmh0X2NvbmYtPm1jcywgMTYpOwogCi0JaXdsX2NvbmYtPnR4X2NoYW5fd2lkdGggPSBpd2xfY29uZi0+c3VwcG9ydGVkX2NoYW5fd2lkdGggIT0gMDsKIAlpd2xfY29uZi0+aHRfcHJvdGVjdGlvbiA9CiAJCWJzc19jb25mLT5odF9vcGVyYXRpb25fbW9kZSAmIElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT047CiAJaXdsX2NvbmYtPm5vbl9HRl9TVEFfcHJlc2VudCA9CkBAIC0yNDkyLDcgKzI1NjMsNiBAQAogCQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CiAJCQlwcml2LT5hc3NvY19pZCA9IGJzc19jb25mLT5haWQ7CiAJCQlwcml2LT5iZWFjb25faW50ID0gYnNzX2NvbmYtPmJlYWNvbl9pbnQ7Ci0JCQlwcml2LT5wb3dlcl9kYXRhLmR0aW1fcGVyaW9kID0gYnNzX2NvbmYtPmR0aW1fcGVyaW9kOwogCQkJcHJpdi0+dGltZXN0YW1wID0gYnNzX2NvbmYtPnRpbWVzdGFtcDsKIAkJCXByaXYtPmFzc29jX2NhcGFiaWxpdHkgPSBic3NfY29uZi0+YXNzb2NfY2FwYWJpbGl0eTsKIApAQCAtMjY3OSw2ICsyNzQ5LDcgQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CisJc3RydWN0IGl3bF9odF9pbmZvICpodF9jb25mID0gJnByaXYtPmN1cnJlbnRfaHRfY29uZmlnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWludCByZXQgPSAwOwogCXUxNiBjaDsKQEAgLTI3MjAsMTAgKzI3OTEsMzIgQEAKIAkJCWdvdG8gc2V0X2NoX291dDsKIAkJfQogCi0JCXByaXYtPmN1cnJlbnRfaHRfY29uZmlnLmlzX2h0ID0gY29uZl9pc19odChjb25mKTsKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCisJCS8qIENvbmZpZ3VyZSBIVDQwIGNoYW5uZWxzICovCisJCWh0X2NvbmYtPmlzX2h0ID0gY29uZl9pc19odChjb25mKTsKKwkJaWYgKGh0X2NvbmYtPmlzX2h0KSB7CisJCQlpZiAoY29uZl9pc19odDQwX21pbnVzKGNvbmYpKSB7CisJCQkJaHRfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID0KKwkJCQkJSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQkVMT1c7CisJCQkJaHRfY29uZi0+c3VwcG9ydGVkX2NoYW5fd2lkdGggPQorCQkJCQlJV0xfQ0hBTk5FTF9XSURUSF80ME1IWjsKKwkJCX0gZWxzZSBpZiAoY29uZl9pc19odDQwX3BsdXMoY29uZikpIHsKKwkJCQlodF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPQorCQkJCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRTsKKwkJCQlodF9jb25mLT5zdXBwb3J0ZWRfY2hhbl93aWR0aCA9CisJCQkJCUlXTF9DSEFOTkVMX1dJRFRIXzQwTUhaOworCQkJfSBlbHNlIHsKKwkJCQlodF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPQorCQkJCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19OT05FOworCQkJCWh0X2NvbmYtPnN1cHBvcnRlZF9jaGFuX3dpZHRoID0KKwkJCQkJSVdMX0NIQU5ORUxfV0lEVEhfMjBNSFo7CisJCQl9CisJCX0gZWxzZQorCQkJaHRfY29uZi0+c3VwcG9ydGVkX2NoYW5fd2lkdGggPSBJV0xfQ0hBTk5FTF9XSURUSF8yME1IWjsKKwkJLyogRGVmYXVsdCB0byBubyBwcm90ZWN0aW9uLiBQcm90ZWN0aW9uIG1vZGUgd2lsbCBsYXRlciBiZSBzZXQKKwkJICogZnJvbSBCU1MgY29uZmlnIGluIGl3bF9odF9jb25mICovCisJCWh0X2NvbmYtPmh0X3Byb3RlY3Rpb24gPSBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OX05PTkU7CiAKIAkJLyogaWYgd2UgYXJlIHN3aXRjaGluZyBmcm9tIGh0IHRvIDIuNCBjbGVhciBmbGFncwogCQkgKiBmcm9tIGFueSBodCByZWxhdGVkIGluZm8gc2luY2UgMi40IGRvZXMgbm90CkBAIC0yNzQyLDEzICsyODM1LDEwIEBACiAJCWl3bF9zZXRfcmF0ZShwcml2KTsKIAl9CiAKLQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyAmJgotCSAgICBwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJcHJpdi0+cG93ZXJfZGF0YS5wb3dlcl9kaXNhYmxlZCA9Ci0JCQkhKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpOwotCQlyZXQgPSBpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgMCk7CisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpIHsKKwkJcmV0ID0gaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHByaXYsIGZhbHNlKTsKIAkJaWYgKHJldCkKLQkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRXJyb3Igc2V0dGluZyBwb3dlciBsZXZlbFxuIik7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVycm9yIHNldHRpbmcgc2xlZXAgbGV2ZWxcbiIpOwogCX0KIAogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKSB7CkBAIC0yODgxLDYgKzI5NzEsMjQ4IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9tYWNfcmVzZXRfdHNmKTsKIAorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKKworI2RlZmluZSBJV0xfVFJBRkZJQ19EVU1QX1NJWkUJKElXTF9UUkFGRklDX0VOVFJZX1NJWkUgKiBJV0xfVFJBRkZJQ19FTlRSSUVTKQorCit2b2lkIGl3bF9yZXNldF90cmFmZmljX2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcHJpdi0+dHhfdHJhZmZpY19pZHggPSAwOworCXByaXYtPnJ4X3RyYWZmaWNfaWR4ID0gMDsKKwlpZiAocHJpdi0+dHhfdHJhZmZpYykKKwkJbWVtc2V0KHByaXYtPnR4X3RyYWZmaWMsIDAsIElXTF9UUkFGRklDX0RVTVBfU0laRSk7CisJaWYgKHByaXYtPnJ4X3RyYWZmaWMpCisJCW1lbXNldChwcml2LT5yeF90cmFmZmljLCAwLCBJV0xfVFJBRkZJQ19EVU1QX1NJWkUpOworfQorCitpbnQgaXdsX2FsbG9jX3RyYWZmaWNfbWVtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1MzIgdHJhZmZpY19zaXplID0gSVdMX1RSQUZGSUNfRFVNUF9TSVpFOworCisJaWYgKGl3bF9kZWJ1Z19sZXZlbCAmIElXTF9ETF9UWCkgeworCQlpZiAoIXByaXYtPnR4X3RyYWZmaWMpIHsKKwkJCXByaXYtPnR4X3RyYWZmaWMgPQorCQkJCWt6YWxsb2ModHJhZmZpY19zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghcHJpdi0+dHhfdHJhZmZpYykKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKwlpZiAoaXdsX2RlYnVnX2xldmVsICYgSVdMX0RMX1JYKSB7CisJCWlmICghcHJpdi0+cnhfdHJhZmZpYykgeworCQkJcHJpdi0+cnhfdHJhZmZpYyA9CisJCQkJa3phbGxvYyh0cmFmZmljX3NpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFwcml2LT5yeF90cmFmZmljKQorCQkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCWl3bF9yZXNldF90cmFmZmljX2xvZyhwcml2KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2FsbG9jX3RyYWZmaWNfbWVtKTsKKwordm9pZCBpd2xfZnJlZV90cmFmZmljX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJa2ZyZWUocHJpdi0+dHhfdHJhZmZpYyk7CisJcHJpdi0+dHhfdHJhZmZpYyA9IE5VTEw7CisKKwlrZnJlZShwcml2LT5yeF90cmFmZmljKTsKKwlwcml2LT5yeF90cmFmZmljID0gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2ZyZWVfdHJhZmZpY19tZW0pOworCit2b2lkIGl3bF9kYmdfbG9nX3R4X2RhdGFfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICB1MTYgbGVuZ3RoLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKQoreworCV9fbGUxNiBmYzsKKwl1MTYgbGVuOworCisJaWYgKGxpa2VseSghKGl3bF9kZWJ1Z19sZXZlbCAmIElXTF9ETF9UWCkpKQorCQlyZXR1cm47CisKKwlpZiAoIXByaXYtPnR4X3RyYWZmaWMpCisJCXJldHVybjsKKworCWZjID0gaGVhZGVyLT5mcmFtZV9jb250cm9sOworCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKKwkJbGVuID0gKGxlbmd0aCA+IElXTF9UUkFGRklDX0VOVFJZX1NJWkUpCisJCSAgICAgICA/IElXTF9UUkFGRklDX0VOVFJZX1NJWkUgOiBsZW5ndGg7CisJCW1lbWNweSgocHJpdi0+dHhfdHJhZmZpYyArCisJCSAgICAgICAocHJpdi0+dHhfdHJhZmZpY19pZHggKiBJV0xfVFJBRkZJQ19FTlRSWV9TSVpFKSksCisJCSAgICAgICBoZWFkZXIsIGxlbik7CisJCXByaXYtPnR4X3RyYWZmaWNfaWR4ID0KKwkJCShwcml2LT50eF90cmFmZmljX2lkeCArIDEpICUgSVdMX1RSQUZGSUNfRU5UUklFUzsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9kYmdfbG9nX3R4X2RhdGFfZnJhbWUpOworCit2b2lkIGl3bF9kYmdfbG9nX3J4X2RhdGFfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICB1MTYgbGVuZ3RoLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKQoreworCV9fbGUxNiBmYzsKKwl1MTYgbGVuOworCisJaWYgKGxpa2VseSghKGl3bF9kZWJ1Z19sZXZlbCAmIElXTF9ETF9SWCkpKQorCQlyZXR1cm47CisKKwlpZiAoIXByaXYtPnJ4X3RyYWZmaWMpCisJCXJldHVybjsKKworCWZjID0gaGVhZGVyLT5mcmFtZV9jb250cm9sOworCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKKwkJbGVuID0gKGxlbmd0aCA+IElXTF9UUkFGRklDX0VOVFJZX1NJWkUpCisJCSAgICAgICA/IElXTF9UUkFGRklDX0VOVFJZX1NJWkUgOiBsZW5ndGg7CisJCW1lbWNweSgocHJpdi0+cnhfdHJhZmZpYyArCisJCSAgICAgICAocHJpdi0+cnhfdHJhZmZpY19pZHggKiBJV0xfVFJBRkZJQ19FTlRSWV9TSVpFKSksCisJCSAgICAgICBoZWFkZXIsIGxlbik7CisJCXByaXYtPnJ4X3RyYWZmaWNfaWR4ID0KKwkJCShwcml2LT5yeF90cmFmZmljX2lkeCArIDEpICUgSVdMX1RSQUZGSUNfRU5UUklFUzsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9kYmdfbG9nX3J4X2RhdGFfZnJhbWUpOworCitjb25zdCBjaGFyICpnZXRfbWdtdF9zdHJpbmcoaW50IGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCQlJV0xfQ01EKE1BTkFHRU1FTlRfQVNTT0NfUkVRKTsKKwkJSVdMX0NNRChNQU5BR0VNRU5UX0FTU09DX1JFU1ApOworCQlJV0xfQ01EKE1BTkFHRU1FTlRfUkVBU1NPQ19SRVEpOworCQlJV0xfQ01EKE1BTkFHRU1FTlRfUkVBU1NPQ19SRVNQKTsKKwkJSVdMX0NNRChNQU5BR0VNRU5UX1BST0JFX1JFUSk7CisJCUlXTF9DTUQoTUFOQUdFTUVOVF9QUk9CRV9SRVNQKTsKKwkJSVdMX0NNRChNQU5BR0VNRU5UX0JFQUNPTik7CisJCUlXTF9DTUQoTUFOQUdFTUVOVF9BVElNKTsKKwkJSVdMX0NNRChNQU5BR0VNRU5UX0RJU0FTU09DKTsKKwkJSVdMX0NNRChNQU5BR0VNRU5UX0FVVEgpOworCQlJV0xfQ01EKE1BTkFHRU1FTlRfREVBVVRIKTsKKwkJSVdMX0NNRChNQU5BR0VNRU5UX0FDVElPTik7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVTktOT1dOIjsKKworCX0KK30KKworY29uc3QgY2hhciAqZ2V0X2N0cmxfc3RyaW5nKGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwkJSVdMX0NNRChDT05UUk9MX0JBQ0tfUkVRKTsKKwkJSVdMX0NNRChDT05UUk9MX0JBQ0spOworCQlJV0xfQ01EKENPTlRST0xfUFNQT0xMKTsKKwkJSVdMX0NNRChDT05UUk9MX1JUUyk7CisJCUlXTF9DTUQoQ09OVFJPTF9DVFMpOworCQlJV0xfQ01EKENPTlRST0xfQUNLKTsKKwkJSVdMX0NNRChDT05UUk9MX0NGRU5EKTsKKwkJSVdMX0NNRChDT05UUk9MX0NGRU5EQUNLKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVOS05PV04iOworCisJfQorfQorCit2b2lkIGl3bF9jbGVhcl90eF9zdGF0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJbWVtc2V0KCZwcml2LT50eF9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCB0cmFmZmljX3N0YXRzKSk7CisKK30KKwordm9pZCBpd2xfY2xlYXJfcnhfc3RhdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCW1lbXNldCgmcHJpdi0+cnhfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgdHJhZmZpY19zdGF0cykpOworfQorCisvKgorICogaWYgQ09ORklHX0lXTFdJRklfREVCVUdGUyBkZWZpbmVkLCBpd2xfdXBkYXRlX3N0YXRzIGZ1bmN0aW9uIHdpbGwKKyAqIHJlY29yZCBhbGwgdGhlIE1HTVQsIENUUkwgYW5kIERBVEEgcGt0IGZvciBib3RoIFRYIGFuZCBSeCBwYXNzLgorICogVXNlIGRlYnVnRnMgdG8gZGlzcGxheSB0aGUgcngvcnhfc3RhdGlzdGljcworICogaWYgQ09ORklHX0lXTFdJRklfREVCVUdGUyBub3QgYmVpbmcgZGVmaW5lZCwgdGhlbiBubyBNR01UIGFuZCBDVFJMCisgKiBpbmZvcm1hdGlvbiB3aWxsIGJlIHJlY29yZGVkLCBidXQgREFUQSBwa3Qgc3RpbGwgd2lsbCBiZSByZWNvcmRlZAorICogZm9yIHRoZSByZWFzb24gb2YgaXdsX2xlZC5jIG5lZWQgdG8gY29udHJvbCB0aGUgbGVkIGJsaW5raW5nIGJhc2VkIG9uCisgKiBudW1iZXIgb2YgdHggYW5kIHJ4IGRhdGEuCisgKgorICovCit2b2lkIGl3bF91cGRhdGVfc3RhdHMoc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGlzX3R4LCBfX2xlMTYgZmMsIHUxNiBsZW4pCit7CisJc3RydWN0IHRyYWZmaWNfc3RhdHMJKnN0YXRzOworCisJaWYgKGlzX3R4KQorCQlzdGF0cyA9ICZwcml2LT50eF9zdGF0czsKKwllbHNlCisJCXN0YXRzID0gJnByaXYtPnJ4X3N0YXRzOworCisJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkgeworCQlzd2l0Y2ggKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfU1RZUEUpKSB7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSk6CisJCQlzdGF0cy0+bWdtdFtNQU5BR0VNRU5UX0FTU09DX1JFUV0rKzsKKwkJCWJyZWFrOworCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQKToKKwkJCXN0YXRzLT5tZ210W01BTkFHRU1FTlRfQVNTT0NfUkVTUF0rKzsKKwkJCWJyZWFrOworCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUSk6CisJCQlzdGF0cy0+bWdtdFtNQU5BR0VNRU5UX1JFQVNTT0NfUkVRXSsrOworCQkJYnJlYWs7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUCk6CisJCQlzdGF0cy0+bWdtdFtNQU5BR0VNRU5UX1JFQVNTT0NfUkVTUF0rKzsKKwkJCWJyZWFrOworCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOgorCQkJc3RhdHMtPm1nbXRbTUFOQUdFTUVOVF9QUk9CRV9SRVFdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk6CisJCQlzdGF0cy0+bWdtdFtNQU5BR0VNRU5UX1BST0JFX1JFU1BdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQkVBQ09OKToKKwkJCXN0YXRzLT5tZ210W01BTkFHRU1FTlRfQkVBQ09OXSsrOworCQkJYnJlYWs7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0FUSU0pOgorCQkJc3RhdHMtPm1nbXRbTUFOQUdFTUVOVF9BVElNXSsrOworCQkJYnJlYWs7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DKToKKwkJCXN0YXRzLT5tZ210W01BTkFHRU1FTlRfRElTQVNTT0NdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVVUSCk6CisJCQlzdGF0cy0+bWdtdFtNQU5BR0VNRU5UX0FVVEhdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfREVBVVRIKToKKwkJCXN0YXRzLT5tZ210W01BTkFHRU1FTlRfREVBVVRIXSsrOworCQkJYnJlYWs7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0FDVElPTik6CisJCQlzdGF0cy0+bWdtdFtNQU5BR0VNRU5UX0FDVElPTl0rKzsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfY3RsKGZjKSkgeworCQlzd2l0Y2ggKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfU1RZUEUpKSB7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0JBQ0tfUkVRKToKKwkJCXN0YXRzLT5jdHJsW0NPTlRST0xfQkFDS19SRVFdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQkFDSyk6CisJCQlzdGF0cy0+Y3RybFtDT05UUk9MX0JBQ0tdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFNQT0xMKToKKwkJCXN0YXRzLT5jdHJsW0NPTlRST0xfUFNQT0xMXSsrOworCQkJYnJlYWs7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1JUUyk6CisJCQlzdGF0cy0+Y3RybFtDT05UUk9MX1JUU10rKzsKKwkJCWJyZWFrOworCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9DVFMpOgorCQkJc3RhdHMtPmN0cmxbQ09OVFJPTF9DVFNdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQUNLKToKKwkJCXN0YXRzLT5jdHJsW0NPTlRST0xfQUNLXSsrOworCQkJYnJlYWs7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0NGRU5EKToKKwkJCXN0YXRzLT5jdHJsW0NPTlRST0xfQ0ZFTkRdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQ0ZFTkRBQ0spOgorCQkJc3RhdHMtPmN0cmxbQ09OVFJPTF9DRkVOREFDS10rKzsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJLyogZGF0YSAqLworCQlzdGF0cy0+ZGF0YV9jbnQrKzsKKwkJc3RhdHMtPmRhdGFfYnl0ZXMgKz0gbGVuOworCX0KK30KK0VYUE9SVF9TWU1CT0woaXdsX3VwZGF0ZV9zdGF0cyk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19QTQogCiBpbnQgaXdsX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKaW5kZXggZGFiZjY2My4uYzA0ZDJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaApAQCAtODMsNiArODMsOCBAQAogI2RlZmluZSBJV0xfU0tVX0EgICAgICAgMHgyCiAjZGVmaW5lIElXTF9TS1VfTiAgICAgICAweDgKIAorI2RlZmluZSBJV0xfQ01EKHgpIGNhc2UgeDogcmV0dXJuICN4CisKIHN0cnVjdCBpd2xfaGNtZF9vcHMgewogCWludCAoKnJ4b25fYXNzb2MpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAJaW50ICgqY29tbWl0X3J4b24pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC0xMTYsNiArMTE4LDE3IEBACiAJdm9pZCAoKnNldF9jdF9raWxsKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogfTsKIAorc3RydWN0IGl3bF91Y29kZV9vcHMgeworCXUzMiAoKmdldF9oZWFkZXJfc2l6ZSkodTMyKTsKKwl1MzIgKCpnZXRfYnVpbGQpKGNvbnN0IHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICosIHUzMik7CisJdTMyICgqZ2V0X2luc3Rfc2l6ZSkoY29uc3Qgc3RydWN0IGl3bF91Y29kZV9oZWFkZXIgKiwgdTMyKTsKKwl1MzIgKCpnZXRfZGF0YV9zaXplKShjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqLCB1MzIpOworCXUzMiAoKmdldF9pbml0X3NpemUpKGNvbnN0IHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICosIHUzMik7CisJdTMyICgqZ2V0X2luaXRfZGF0YV9zaXplKShjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqLCB1MzIpOworCXUzMiAoKmdldF9ib290X3NpemUpKGNvbnN0IHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICosIHUzMik7CisJdTggKiAoKmdldF9kYXRhKShjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqLCB1MzIpOworfTsKKwogc3RydWN0IGl3bF9saWJfb3BzIHsKIAkvKiBzZXQgaHcgZGVwZW5kZW50IHBhcmFtZXRlcnMgKi8KIAlpbnQgKCpzZXRfaHdfcGFyYW1zKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpAQCAtMTcxLDYgKzE4NCw3IEBACiB9OwogCiBzdHJ1Y3QgaXdsX29wcyB7CisJY29uc3Qgc3RydWN0IGl3bF91Y29kZV9vcHMgKnVjb2RlOwogCWNvbnN0IHN0cnVjdCBpd2xfbGliX29wcyAqbGliOwogCWNvbnN0IHN0cnVjdCBpd2xfaGNtZF9vcHMgKmhjbWQ7CiAJY29uc3Qgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyAqdXRpbHM7CkBAIC0xNzgsNyArMTkyLDYgQEAKIAogc3RydWN0IGl3bF9tb2RfcGFyYW1zIHsKIAlpbnQgc3dfY3J5cHRvOwkJLyogZGVmOiAwID0gdXNpbmcgaGFyZHdhcmUgZW5jcnlwdGlvbiAqLwotCXUzMiBkZWJ1ZzsJCS8qIGRlZjogMCA9IG1pbmltYWwgZGVidWcgbG9nIG1lc3NhZ2VzICovCiAJaW50IGRpc2FibGVfaHdfc2NhbjsJLyogZGVmOiAwID0gdXNlIGgvdyBzY2FuICovCiAJaW50IG51bV9vZl9xdWV1ZXM7CS8qIGRlZjogSFcgZGVwZW5kZW50ICovCiAJaW50IG51bV9vZl9hbXBkdV9xdWV1ZXM7LyogZGVmOiBIVyBkZXBlbmRlbnQgKi8KQEAgLTE5NSw2ICsyMDgsOSBAQAogICogCWZpbGVuYW1lIGlzIGNvbnN0cnVjdGVkIGFzIGZ3X25hbWVfcHJlPGFwaT4udWNvZGUuCiAgKiBAdWNvZGVfYXBpX21heDogSGlnaGVzdCB2ZXJzaW9uIG9mIHVDb2RlIEFQSSBzdXBwb3J0ZWQgYnkgZHJpdmVyLgogICogQHVjb2RlX2FwaV9taW46IExvd2VzdCB2ZXJzaW9uIG9mIHVDb2RlIEFQSSBzdXBwb3J0ZWQgYnkgZHJpdmVyLgorICogQHBhX3R5cGU6IHVzZWQgYnkgNjAwMCBzZXJpZXMgb25seSB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiBQb3dlciBBbXBsaWZpZXIKKyAqIEBtYXhfbGxfaXRlbXM6IG1heCBudW1iZXIgb2YgT1RQIGJsb2NrcworICogQHNoYWRvd19yYW1fc3VwcG9ydDogc2hhZG93IHN1cHBvcnQgZm9yIE9UUCBtZW1vcnkKICAqCiAgKiBXZSBlbmFibGUgdGhlIGRyaXZlciB0byBiZSBiYWNrd2FyZCBjb21wYXRpYmxlIHdydCBBUEkgdmVyc2lvbi4gVGhlCiAgKiBkcml2ZXIgc3BlY2lmaWVzIHdoaWNoIEFQSXMgaXQgc3VwcG9ydHMgKHdpdGggQHVjb2RlX2FwaV9tYXggYmVpbmcgdGhlCkBAIC0yMTUsNiArMjMxLDcgQEAKICAqIGl3bF9oY21kX3V0aWxzX29wcyBldGMuIHdlIGFjY29tbW9kYXRlIGRpZmZlcmVudCBjb21tYW5kIHN0cnVjdHVyZXMKICAqIGFuZCBmbG93cyBiZXR3ZWVuIGhhcmR3YXJlIHZlcnNpb25zICg0OTY1LzUwMDApIGFzIHdlbGwgYXMgdGhlaXIgQVBJCiAgKiB2ZXJzaW9ucy4KKyAqCiAgKi8KIHN0cnVjdCBpd2xfY2ZnIHsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtMjMxLDYgKzI0OCwxMCBAQAogCXU4ICAgdmFsaWRfcnhfYW50OwogCWJvb2wgbmVlZF9wbGxfY2ZnOwogCWJvb2wgdXNlX2lzcl9sZWdhY3k7CisJZW51bSBpd2xfcGFfdHlwZSBwYV90eXBlOworCWNvbnN0IHUxNiBtYXhfbGxfaXRlbXM7CisJY29uc3QgYm9vbCBzaGFkb3dfcmFtX3N1cHBvcnQ7CisJY29uc3QgYm9vbCBodF9ncmVlbmZpZWxkX3N1cHBvcnQ7CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNTAsNyArMjcxLDcgQEAKIHZvaWQgaXdsX3NldF9yeG9uX2NoYWluKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldF9yeG9uX2NoYW5uZWwoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoKTsKIHZvaWQgaXdsX3NldF9yeG9uX2h0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9odF9pbmZvICpodF9pbmZvKTsKLXU4IGl3bF9pc19mYXRfdHhfYWxsb3dlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCit1OCBpd2xfaXNfaHQ0MF90eF9hbGxvd2VkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKnN0YV9odF9pbmYpOwogdm9pZCBpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKIHZvaWQgaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbW9kZSk7CkBAIC0yNjEsOCArMjgyLDcgQEAKIHZvaWQgaXdsX2lycV9oYW5kbGVfZXJyb3Ioc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KTsKKwkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywgdTY0IG11bHRpY2FzdCk7CiBpbnQgaXdsX2h3X25pY19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldHVwX21hYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9zZXRfaHdfcGFyYW1zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC0yODYsNyArMzA2LDU1IEBACiBpbnQgaXdsX21hY19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwogdm9pZCBpd2xfbWFjX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUworaW50IGl3bF9hbGxvY190cmFmZmljX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xfZnJlZV90cmFmZmljX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xfcmVzZXRfdHJhZmZpY19sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2RiZ19sb2dfdHhfZGF0YV9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJdTE2IGxlbmd0aCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlcik7Cit2b2lkIGl3bF9kYmdfbG9nX3J4X2RhdGFfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXUxNiBsZW5ndGgsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIpOworY29uc3QgY2hhciAqZ2V0X21nbXRfc3RyaW5nKGludCBjbWQpOworY29uc3QgY2hhciAqZ2V0X2N0cmxfc3RyaW5nKGludCBjbWQpOwordm9pZCBpd2xfY2xlYXJfdHhfc3RhdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2NsZWFyX3J4X3N0YXRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF91cGRhdGVfc3RhdHMoc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGlzX3R4LCBfX2xlMTYgZmMsCisJCSAgICAgIHUxNiBsZW4pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGl3bF9hbGxvY190cmFmZmljX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2ZyZWVfdHJhZmZpY19tZW0oc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGl3bF9yZXNldF90cmFmZmljX2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2RiZ19sb2dfdHhfZGF0YV9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCSAgICAgIHUxNiBsZW5ndGgsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2RiZ19sb2dfcnhfZGF0YV9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCSAgICAgIHUxNiBsZW5ndGgsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgaXNfdHgsCisJCQkJICAgIF9fbGUxNiBmYywgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgdHJhZmZpY19zdGF0cwkqc3RhdHM7CiAKKwlpZiAoaXNfdHgpCisJCXN0YXRzID0gJnByaXYtPnR4X3N0YXRzOworCWVsc2UKKwkJc3RhdHMgPSAmcHJpdi0+cnhfc3RhdHM7CisKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7CisJCS8qIGRhdGEgKi8KKwkJc3RhdHMtPmRhdGFfYnl0ZXMgKz0gbGVuOworCX0KK30KKyNlbmRpZgogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSWCBoYW5kbGVycy4KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzU1LDYgKzQyMyw3IEBACiB2b2lkIGl3bF9od3JhdGVfdG9fdHhfY29udHJvbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByYXRlX25fZmxhZ3MsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8pOwogaW50IGl3bF9od3JhdGVfdG9fcGxjcF9pZHgodTMyIHJhdGVfbl9mbGFncyk7CitpbnQgaXdsX2h3cmF0ZV90b19tYWM4MDIxMV9pZHgodTMyIHJhdGVfbl9mbGFncywgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKIAogdTggaXdsX3JhdGVfZ2V0X2xvd2VzdF9wbGNwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKQEAgLTM4NCw3ICs0NTMsNiBAQAogdm9pZCBpd2xfaW5pdF9zY2FuX3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9zY2FuX2NhbmNlbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBtcyk7Ci1pbnQgaXdsX3NjYW5faW5pdGlhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfbWFjX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7CiB1MTYgaXdsX2ZpbGxfcHJvYmVfcmVxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9tZ210ICpmcmFtZSwKIAkJICAgICAgIGNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwgaW50IGxlZnQpOwpAQCAtMzk4LDcgKzQ2Niw2IEBACiB2b2lkIGl3bF9iZ19hYm9ydF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIGl3bF9iZ19zY2FuX2NvbXBsZXRlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBpd2xfc2V0dXBfc2Nhbl9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1pbnQgaXdsX3NlbmRfc2Nhbl9hYm9ydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAvKiBGb3IgZmFzdGVyIGFjdGl2ZSBzY2FubmluZywgc2NhbiB3aWxsIG1vdmUgdG8gdGhlIG5leHQgY2hhbm5lbCBpZiBmZXdlciB0aGFuCiAgKiBQTENQX1FVSUVUX1RIUkVTSCBwYWNrZXRzIGFyZSBoZWFyZCBvbiB0aGlzIGNoYW5uZWwgd2l0aGluCkBAIC00MzcsOSArNTA0LDkgQEAKIAkJCQkgIHUxNiBsZW4sIGNvbnN0IHZvaWQgKmRhdGEpOwogaW50IGl3bF9zZW5kX2NtZF9wZHVfYXN5bmMoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBpZCwgdTE2IGxlbiwKIAkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsCi0JCQkgICBpbnQgKCpjYWxsYmFjaykoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQkgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLAotCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSk7CisJCQkgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICAgIHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kLAorCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpOwogCiBpbnQgaXdsX2VucXVldWVfaGNtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaG9zdF9jbWQgKmNtZCk7CiAKQEAgLTQ0OSw4ICs1MTYsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBQQ0kJCQkJCQkgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotdm9pZCBpd2xfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGlycXJldHVybl90IGl3bF9pc3JfbGVnYWN5KGludCBpcnEsIHZvaWQgKmRhdGEpOwogaW50IGl3bF9yZXNldF9pY3Qoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2Rpc2FibGVfaWN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC00NzQsNyArNTM5LDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgRXJyb3IgSGFuZGxpbmcgRGVidWdnaW5nCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIGl3bF9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfY2xlYXJfaXNyX3N0YXRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKQEAgLTU1Niw2ICs2MjAsNyBAQAogdm9pZCBpd2xfcnhfcmVwbHlfY29tcHJlc3NlZF9iYShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCSAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKIAordm9pZCBpd2xfc2V0dXBfcnhvbl90aW1pbmcoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9zZW5kX3J4b25fYXNzb2Moc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXJldHVybiBwcml2LT5jZmctPm9wcy0+aGNtZC0+cnhvbl9hc3NvYyhwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKaW5kZXggZjAzZGFlMS4uMDY0MzdkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKQEAgLTkxLDcgKzkxLDggQEAKICNkZWZpbmUgQ1NSX0VFUFJPTV9HUCAgICAgICAgICAgKENTUl9CQVNFKzB4MDMwKQogI2RlZmluZSBDU1JfT1RQX0dQX1JFRyAgIAkoQ1NSX0JBU0UrMHgwMzQpCiAjZGVmaW5lIENTUl9HSU9fUkVHCQkoQ1NSX0JBU0UrMHgwM0MpCi0jZGVmaW5lIENTUl9HUF9VQ09ERQkJKENTUl9CQVNFKzB4MDQ0KQorI2RlZmluZSBDU1JfR1BfVUNPREVfUkVHCShDU1JfQkFTRSsweDA0OCkKKyNkZWZpbmUgQ1NSX0dQX0RSSVZFUl9SRUcJKENTUl9CQVNFKzB4MDUwKQogI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMSAgICAgICAoQ1NSX0JBU0UrMHgwNTQpCiAjZGVmaW5lIENTUl9VQ09ERV9EUlZfR1AxX1NFVCAgIChDU1JfQkFTRSsweDA1OCkKICNkZWZpbmUgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSICAgKENTUl9CQVNFKzB4MDVjKQpAQCAtMjQ1LDYgKzI0NiwxMyBAQAogI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9CSVRfQ01EX0JMT0NLRUQgICAgICAgICAgICgweDAwMDAwMDA0KQogI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9SRUdfQklUX0NUX0tJTExfRVhJVCAgICAgICgweDAwMDAwMDA4KQogCisvKiBHUCBEcml2ZXIgKi8KKyNkZWZpbmUgQ1NSX0dQX0RSSVZFUl9SRUdfQklUX1JBRElPX1NLVV9NU0sJICAgICgweDAwMDAwMDAzKQorI2RlZmluZSBDU1JfR1BfRFJJVkVSX1JFR19CSVRfUkFESU9fU0tVXzN4M19IWUIJICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBDU1JfR1BfRFJJVkVSX1JFR19CSVRfUkFESU9fU0tVXzJ4Ml9IWUIJICAgICgweDAwMDAwMDAxKQorI2RlZmluZSBDU1JfR1BfRFJJVkVSX1JFR19CSVRfUkFESU9fU0tVXzJ4Ml9JUEEJICAgICgweDAwMDAwMDAyKQorCisKIC8qIEdJIENoaWNrZW4gQml0cyAqLwogI2RlZmluZSBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0wxQV9OT19MMFNfUlggICgweDAwODAwMDAwKQogI2RlZmluZSBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0RJU19MMFNfRVhJVF9USU1FUiAgKDB4MjAwMDAwMDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaAppbmRleCAyY2YwMTRmLi5jYmM2MjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKQEAgLTMwLDE2ICszMCwyMyBAQAogI2RlZmluZSBfX2l3bF9kZWJ1Z19oX18KIAogc3RydWN0IGl3bF9wcml2OworZXh0ZXJuIHUzMiBpd2xfZGVidWdfbGV2ZWw7CiAKICNkZWZpbmUgSVdMX0VSUihwLCBmLCBhLi4uKSBkZXZfZXJyKCYoKHApLT5wY2lfZGV2LT5kZXYpLCBmLCAjIyBhKQogI2RlZmluZSBJV0xfV0FSTihwLCBmLCBhLi4uKSBkZXZfd2FybigmKChwKS0+cGNpX2Rldi0+ZGV2KSwgZiwgIyMgYSkKICNkZWZpbmUgSVdMX0lORk8ocCwgZiwgYS4uLikgZGV2X2luZm8oJigocCktPnBjaV9kZXYtPmRldiksIGYsICMjIGEpCiAjZGVmaW5lIElXTF9DUklUKHAsIGYsIGEuLi4pIGRldl9jcml0KCYoKHApLT5wY2lfZGV2LT5kZXYpLCBmLCAjIyBhKQogCisjZGVmaW5lIGl3bF9wcmludF9oZXhfZXJyb3IocHJpdiwgcCwgbGVuKSAJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgIml3bCBkYXRhOiAiLAkJCQlcCisJCSAgICAgICBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLCBwLCBsZW4sIDEpOwkJXAorfSB3aGlsZSAoMCkKKwogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAjZGVmaW5lIElXTF9ERUJVRyhfX3ByaXYsIGxldmVsLCBmbXQsIGFyZ3MuLi4pCQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JaWYgKF9fcHJpdi0+ZGVidWdfbGV2ZWwgJiAobGV2ZWwpKQkJCQlcCisJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwoX19wcml2KSAmIChsZXZlbCkpCQkJCQlcCiAJCWRldl9wcmludGsoS0VSTl9FUlIsICYoX19wcml2LT5ody0+d2lwaHktPmRldiksCQlcCiAJCQkgIiVjICVzICIgZm10LCBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywJXAogCQkJX19mdW5jX18gLCAjIyBhcmdzKTsJCQkJXApAQCAtNDcsNyArNTQsNyBAQAogCiAjZGVmaW5lIElXTF9ERUJVR19MSU1JVChfX3ByaXYsIGxldmVsLCBmbXQsIGFyZ3MuLi4pCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpZiAoKF9fcHJpdi0+ZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSAmJiBuZXRfcmF0ZWxpbWl0KCkpCQlcCisJaWYgKChpd2xfZ2V0X2RlYnVnX2xldmVsKF9fcHJpdikgJiAobGV2ZWwpKSAmJiBuZXRfcmF0ZWxpbWl0KCkpCQlcCiAJCWRldl9wcmludGsoS0VSTl9FUlIsICYoX19wcml2LT5ody0+d2lwaHktPmRldiksCQlcCiAJCQkiJWMgJXMgIiBmbXQsIGluX2ludGVycnVwdCgpID8gJ0knIDogJ1UnLAlcCiAJCQkgX19mdW5jX18gLCAjIyBhcmdzKTsJCQkJXApAQCAtNTUsNyArNjIsNyBAQAogCiAjZGVmaW5lIGl3bF9wcmludF9oZXhfZHVtcChwcml2LCBsZXZlbCwgcCwgbGVuKSAJCQlcCiBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCi0JaWYgKHByaXYtPmRlYnVnX2xldmVsICYgbGV2ZWwpICAgICAgICAgIAkJCVwKKwlpZiAoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIGxldmVsKSAJCQkJXAogCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiaXdsIGRhdGE6ICIsCQlcCiAJCQkgICAgICAgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwgcCwgbGVuLCAxKTsJXAogfSB3aGlsZSAoMCkKQEAgLTY1LDIzICs3Miw0MyBAQAogCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IGRlbnRyeSAqZGlyX2RydjsKIAlzdHJ1Y3QgZGVudHJ5ICpkaXJfZGF0YTsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXJfZGVidWc7CiAJc3RydWN0IGRlbnRyeSAqZGlyX3JmOwogCXN0cnVjdCBkaXJfZGF0YV9maWxlcyB7CiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfc3JhbTsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9udm07CiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfc3RhdGlvbnM7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfcnhfc3RhdGlzdGljczsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV90eF9zdGF0aXN0aWNzOwogCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2xvZ19ldmVudDsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9jaGFubmVsczsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9zdGF0dXM7CiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfaW50ZXJydXB0OworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3FvczsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV90aGVybWFsX3Rocm90dGxpbmc7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2xlZDsKKyNlbmRpZgorCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2Rpc2FibGVfaHQ0MDsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV9zbGVlcF9sZXZlbF9vdmVycmlkZTsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV9jdXJyZW50X3NsZWVwX2NvbW1hbmQ7CiAJfSBkYmdmc19kYXRhX2ZpbGVzOwogCXN0cnVjdCBkaXJfcmZfZmlsZXMgewogCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2Rpc2FibGVfc2Vuc2l0aXZpdHk7CiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfZGlzYWJsZV9jaGFpbl9ub2lzZTsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9kaXNhYmxlX3R4X3Bvd2VyOwogCX0gZGJnZnNfcmZfZmlsZXM7CisJc3RydWN0IGRpcl9kZWJ1Z19maWxlcyB7CisJCXN0cnVjdCBkZW50cnkgKmZpbGVfcnhfc3RhdGlzdGljczsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV90eF9zdGF0aXN0aWNzOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3RyYWZmaWNfbG9nOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3J4X3F1ZXVlOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3R4X3F1ZXVlOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3Vjb2RlX3J4X3N0YXRzOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3Vjb2RlX3R4X3N0YXRzOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3Vjb2RlX2dlbmVyYWxfc3RhdHM7CisJCXN0cnVjdCBkZW50cnkgKmZpbGVfc2Vuc2l0aXZpdHk7CisJCXN0cnVjdCBkZW50cnkgKmZpbGVfY2hhaW5fbm9pc2U7CisJCXN0cnVjdCBkZW50cnkgKmZpbGVfdHhfcG93ZXI7CisJfSBkYmdmc19kZWJ1Z19maWxlczsKIAl1MzIgc3JhbV9vZmZzZXQ7CiAJdTMyIHNyYW1fbGVuOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYwppbmRleCBjYTAwY2M4Li5mYjg0NDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiaXdsLWRlYnVnLmgiCiAjaW5jbHVkZSAiaXdsLWNvcmUuaCIKICNpbmNsdWRlICJpd2wtaW8uaCIKLQorI2luY2x1ZGUgIml3bC1jYWxpYi5oIgogCiAvKiBjcmVhdGUgYW5kIHJlbW92ZSBvZiBmaWxlcyAqLwogI2RlZmluZSBERUJVR0ZTX0FERF9ESVIobmFtZSwgcGFyZW50KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNDksNyArNDksOCBAQAogCiAjZGVmaW5lIERFQlVHRlNfQUREX0ZJTEUobmFtZSwgcGFyZW50KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUgPSAgICAgICAgICAgICAgICAgICAgIFwKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCAwNjQ0LCBkYmdmcy0+ZGlyXyMjcGFyZW50LCBwcml2LCAgICAgXAorCWRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIFNfSVdVU1IgfCBTX0lSVVNSLCAgICAgICAgICAgICAgICAgICBcCisJCQkJZGJnZnMtPmRpcl8jI3BhcmVudCwgcHJpdiwgICAgICAgICAgICAgIFwKIAkJCQkmaXdsX2RiZ2ZzXyMjbmFtZSMjX29wcyk7ICAgICAgICAgICAgICAgXAogCWlmICghKGRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lKSkgICAgICAgICAgICAgICBcCiAJCWdvdG8gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNTcsNyArNTgsOCBAQAogCiAjZGVmaW5lIERFQlVHRlNfQUREX0JPT0wobmFtZSwgcGFyZW50LCBwdHIpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCiAJZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUgPSAgICAgICAgICAgICAgICAgICAgIFwKLQlkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCNuYW1lLCAwNjQ0LCBkYmdmcy0+ZGlyXyMjcGFyZW50LCBwdHIpOyAgICAgXAorCWRlYnVnZnNfY3JlYXRlX2Jvb2woI25hbWUsIFNfSVdVU1IgfCBTX0lSVVNSLCAgICAgICAgICAgICAgICAgICBcCisJCQkgICAgZGJnZnMtPmRpcl8jI3BhcmVudCwgcHRyKTsgICAgICAgICAgICAgICAgICBcCiAJaWYgKElTX0VSUihkYmdmcy0+ZGJnZnNfIyNwYXJlbnQjI19maWxlcy5maWxlXyMjbmFtZSkJCVwKIAkJCXx8ICFkYmdmcy0+ZGJnZnNfIyNwYXJlbnQjI19maWxlcy5maWxlXyMjbmFtZSkJXAogCQlnb3RvIGVycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTY1LDcgKzY3LDcgQEAKIAogI2RlZmluZSBERUJVR0ZTX0FERF9YMzIobmFtZSwgcGFyZW50LCBwdHIpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCiAJZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUgPSAgICAgICAgICAgICAgICAgICAgIFwKLQlkZWJ1Z2ZzX2NyZWF0ZV94MzIoI25hbWUsIDA0NDQsIGRiZ2ZzLT5kaXJfIyNwYXJlbnQsIHB0cik7ICAgICBcCisJZGVidWdmc19jcmVhdGVfeDMyKCNuYW1lLCBTX0lSVVNSLCBkYmdmcy0+ZGlyXyMjcGFyZW50LCBwdHIpOyAgIFwKIAlpZiAoSVNfRVJSKGRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lKQkJXAogCQkJfHwgIWRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lKQlcCiAJCWdvdG8gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTI0LDE4ICsxMjYsNTggQEAKIAkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CiAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzI1Nl07CisJY2hhciAqYnVmOwogCWludCBwb3MgPSAwOwotCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOwogCi0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibWdtdDogJXVcbiIsCi0JCQkJCQlwcml2LT50eF9zdGF0c1swXS5jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImN0cmw6ICV1XG4iLAotCQkJCQkJcHJpdi0+dHhfc3RhdHNbMV0uY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJkYXRhOiAldVxuIiwKLQkJCQkJCXByaXYtPnR4X3N0YXRzWzJdLmNudCk7CisJaW50IGNudDsKKwlzc2l6ZV90IHJldDsKKwljb25zdCBzaXplX3QgYnVmc3ogPSAxMDAgKyBzaXplb2YoY2hhcikgKiAyNCAqIChNQU5BR0VNRU5UX01BWCArIENPTlRST0xfTUFYKTsKKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiTWFuYWdlbWVudDpcbiIpOworCWZvciAoY250ID0gMDsgY250IDwgTUFOQUdFTUVOVF9NQVg7IGNudCsrKSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkgIlx0JXNcdFx0OiAldVxuIiwKKwkJCQkgZ2V0X21nbXRfc3RyaW5nKGNudCksCisJCQkJIHByaXYtPnR4X3N0YXRzLm1nbXRbY250XSk7CisJfQorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIkNvbnRyb2xcbiIpOworCWZvciAoY250ID0gMDsgY250IDwgQ09OVFJPTF9NQVg7IGNudCsrKSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkgIlx0JXNcdFx0OiAldVxuIiwKKwkJCQkgZ2V0X2N0cmxfc3RyaW5nKGNudCksCisJCQkJIHByaXYtPnR4X3N0YXRzLmN0cmxbY250XSk7CisJfQorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIkRhdGE6XG4iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJcdGNudDogJXVcbiIsCisJCQkgcHJpdi0+dHhfc3RhdHMuZGF0YV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlx0Ynl0ZXM6ICVsbHVcbiIsCisJCQkgcHJpdi0+dHhfc3RhdHMuZGF0YV9ieXRlcyk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQogCi0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3R4X3N0YXRpc3RpY3Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXUzMiBjbGVhcl9mbGFnOworCWNoYXIgYnVmWzhdOworCWludCBidWZfc2l6ZTsKKworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwlidWZfc2l6ZSA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAgMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHNzY2FuZihidWYsICIleCIsICZjbGVhcl9mbGFnKSAhPSAxKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoY2xlYXJfZmxhZyA9PSAxKQorCQlpd2xfY2xlYXJfdHhfc3RhdHMocHJpdik7CisKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19yeF9zdGF0aXN0aWNzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCkBAIC0xNDMsMTggKzE4NSw1OSBAQAogCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpIHsKIAogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbMjU2XTsKKwljaGFyICpidWY7CiAJaW50IHBvcyA9IDA7Ci0JY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisJaW50IGNudDsKKwlzc2l6ZV90IHJldDsKKwljb25zdCBzaXplX3QgYnVmc3ogPSAxMDAgKworCQlzaXplb2YoY2hhcikgKiAyNCAqIChNQU5BR0VNRU5UX01BWCArIENPTlRST0xfTUFYKTsKKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJtZ210OiAldVxuIiwKLQkJCQkJCXByaXYtPnJ4X3N0YXRzWzBdLmNudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3RybDogJXVcbiIsCi0JCQkJCQlwcml2LT5yeF9zdGF0c1sxXS5jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImRhdGE6ICV1XG4iLAotCQkJCQkJcHJpdi0+cnhfc3RhdHNbMl0uY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJNYW5hZ2VtZW50OlxuIik7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQU5BR0VNRU5UX01BWDsgY250KyspIHsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSAiXHQlc1x0XHQ6ICV1XG4iLAorCQkJCSBnZXRfbWdtdF9zdHJpbmcoY250KSwKKwkJCQkgcHJpdi0+cnhfc3RhdHMubWdtdFtjbnRdKTsKKwl9CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiQ29udHJvbDpcbiIpOworCWZvciAoY250ID0gMDsgY250IDwgQ09OVFJPTF9NQVg7IGNudCsrKSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkgIlx0JXNcdFx0OiAldVxuIiwKKwkJCQkgZ2V0X2N0cmxfc3RyaW5nKGNudCksCisJCQkJIHByaXYtPnJ4X3N0YXRzLmN0cmxbY250XSk7CisJfQorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIkRhdGE6XG4iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJcdGNudDogJXVcbiIsCisJCQkgcHJpdi0+cnhfc3RhdHMuZGF0YV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlx0Ynl0ZXM6ICVsbHVcbiIsCisJCQkgcHJpdi0+cnhfc3RhdHMuZGF0YV9ieXRlcyk7CiAKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfcnhfc3RhdGlzdGljc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdTMyIGNsZWFyX2ZsYWc7CisJY2hhciBidWZbOF07CisJaW50IGJ1Zl9zaXplOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCWJ1Zl9zaXplID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtICAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiV4IiwgJmNsZWFyX2ZsYWcpICE9IDEpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChjbGVhcl9mbGFnID09IDEpCisJCWl3bF9jbGVhcl9yeF9zdGF0cyhwcml2KTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKICNkZWZpbmUgQllURTFfTUFTSyAweDAwMDAwMGZmOwpAQCAtNTY2LDE2ICs2NDksOTgyIEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfcW9zX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMCwgaTsKKwljaGFyIGJ1ZlsyNTZdOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCXNzaXplX3QgcmV0OworCisJZm9yIChpID0gMDsgaSA8IEFDX05VTTsgaSsrKSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJcdGN3X21pblx0Y3dfbWF4XHRhaWZzblx0dHhvcFxuIik7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkiQUNbJWRdXHQldVx0JXVcdCV1XHQldVxuIiwgaSwKKwkJCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWluLAorCQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19tYXgsCisJCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmFpZnNuLAorCQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3ApOworCX0KKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX2xlZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBwb3MgPSAwOworCWNoYXIgYnVmWzI1Nl07CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisJc3NpemVfdCByZXQ7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgImFsbG93IGJsaW5raW5nOiAlc1xuIiwKKwkJCSAocHJpdi0+YWxsb3dfYmxpbmtpbmcpID8gIlRydWUiIDogIkZhbHNlIik7CisJaWYgKHByaXYtPmFsbG93X2JsaW5raW5nKSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkgIkxlZCBibGlua2luZyByYXRlOiAldVxuIiwKKwkJCQkgcHJpdi0+bGFzdF9ibGlua19yYXRlKTsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSAiTGFzdCBibGluayB0aW1lOiAlbHVcbiIsCisJCQkJIHByaXYtPmxhc3RfYmxpbmtfdGltZSk7CisJfQorCisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfdGhlcm1hbF90aHJvdHRsaW5nX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF90dF9tZ210ICp0dCA9ICZwcml2LT50aGVybWFsX3Rocm90dGxlOworCXN0cnVjdCBpd2xfdHRfcmVzdHJpY3Rpb24gKnJlc3RyaWN0aW9uOworCWNoYXIgYnVmWzEwMF07CisJaW50IHBvcyA9IDA7CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisJc3NpemVfdCByZXQ7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkiVGhlcm1hbCBUaHJvdHRsaW5nIE1vZGU6ICVzXG4iLAorCQkJdHQtPmFkdmFuY2VkX3R0ID8gIkFkdmFuY2UiIDogIkxlZ2FjeSIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJUaGVybWFsIFRocm90dGxpbmcgU3RhdGU6ICVkXG4iLAorCQkJdHQtPnN0YXRlKTsKKwlpZiAodHQtPmFkdmFuY2VkX3R0KSB7CisJCXJlc3RyaWN0aW9uID0gdHQtPnJlc3RyaWN0aW9uICsgdHQtPnN0YXRlOworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJIlR4IG1vZGU6ICVkXG4iLAorCQkJCXJlc3RyaWN0aW9uLT50eF9zdHJlYW0pOworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJIlJ4IG1vZGU6ICVkXG4iLAorCQkJCXJlc3RyaWN0aW9uLT5yeF9zdHJlYW0pOworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJIkhUIG1vZGU6ICVkXG4iLAorCQkJCXJlc3RyaWN0aW9uLT5pc19odCk7CisJfQorCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19kaXNhYmxlX2h0NDBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbOF07CisJaW50IGJ1Zl9zaXplOworCWludCBodDQwOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCWJ1Zl9zaXplID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtICAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmh0NDApICE9IDEpCisJCXJldHVybiAtRUZBVUxUOworCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpCisJCXByaXYtPmRpc2FibGVfaHQ0MCA9IGh0NDAgPyB0cnVlIDogZmFsc2U7CisJZWxzZSB7CisJCUlXTF9FUlIocHJpdiwgIlN0YSBhc3NvY2lhdGVkIHdpdGggQVAgLSAiCisJCQkiQ2hhbmdlIHRvIDQwTUh6IGNoYW5uZWwgc3VwcG9ydCBpcyBub3QgYWxsb3dlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX2Rpc2FibGVfaHQ0MF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxMDBdOworCWludCBwb3MgPSAwOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCXNzaXplX3QgcmV0OworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIjExbiA0ME1IeiBNb2RlOiAlc1xuIiwKKwkJCXByaXYtPmRpc2FibGVfaHQ0MCA/ICJEaXNhYmxlZCIgOiAiRW5hYmxlZCIpOworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19zbGVlcF9sZXZlbF9vdmVycmlkZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCSAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzhdOworCWludCBidWZfc2l6ZTsKKwlpbnQgdmFsdWU7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJYnVmX3NpemUgPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZ2YWx1ZSkgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIE91ciB1c2VycyBleHBlY3QgMCB0byBiZSAiQ0FNIiwgYnV0IDAgaXNuJ3QgYWN0dWFsbHkKKwkgKiB2YWxpZCBoZXJlLiBIb3dldmVyLCBsZXQncyBub3QgY29uZnVzZSB0aGVtIGFuZCBwcmVzZW50CisJICogSVdMX1BPV0VSX0lOREVYXzEgYXMgIjEiLCBub3QgIjAiLgorCSAqLworCWlmICh2YWx1ZSA+IDApCisJCXZhbHVlIC09IDE7CisKKwlpZiAodmFsdWUgIT0gLTEgJiYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+PSBJV0xfUE9XRVJfTlVNKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2LT5wb3dlcl9kYXRhLmRlYnVnX3NsZWVwX2xldmVsX292ZXJyaWRlID0gdmFsdWU7CisKKwlpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgZmFsc2UpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfc2xlZXBfbGV2ZWxfb3ZlcnJpZGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCSAgIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTBdOworCWludCBwb3MsIHZhbHVlOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCisJLyogc2VlIHRoZSB3cml0ZSBmdW5jdGlvbiAqLworCXZhbHVlID0gcHJpdi0+cG93ZXJfZGF0YS5kZWJ1Z19zbGVlcF9sZXZlbF9vdmVycmlkZTsKKwlpZiAodmFsdWUgPj0gMCkKKwkJdmFsdWUgKz0gMTsKKworCXBvcyA9IHNjbnByaW50ZihidWYsIGJ1ZnN6LCAiJWRcbiIsIHZhbHVlKTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19jdXJyZW50X3NsZWVwX2NvbW1hbmRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCSAgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsyMDBdOworCWludCBwb3MgPSAwLCBpOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgKmNtZCA9ICZwcml2LT5wb3dlcl9kYXRhLnNsZWVwX2NtZDsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSAiZmxhZ3M6ICUjLjJ4XG4iLCBsZTE2X3RvX2NwdShjbWQtPmZsYWdzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJICJSWC9UWCB0aW1lb3V0OiAlZC8lZCB1c2VjXG4iLAorCQkJIGxlMzJfdG9fY3B1KGNtZC0+cnhfZGF0YV90aW1lb3V0KSwKKwkJCSBsZTMyX3RvX2NwdShjbWQtPnR4X2RhdGFfdGltZW91dCkpOworCWZvciAoaSA9IDA7IGkgPCBJV0xfUE9XRVJfVkVDX1NJWkU7IGkrKykKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSAic2xlZXBfaW50ZXJ2YWxbJWRdOiAlZFxuIiwgaSwKKwkJCQkgbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFtpXSkpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworfQogCiBERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMoc3JhbSk7CiBERUJVR0ZTX1dSSVRFX0ZJTEVfT1BTKGxvZ19ldmVudCk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFMobnZtKTsKIERFQlVHRlNfUkVBRF9GSUxFX09QUyhzdGF0aW9ucyk7Ci1ERUJVR0ZTX1JFQURfRklMRV9PUFMocnhfc3RhdGlzdGljcyk7Ci1ERUJVR0ZTX1JFQURfRklMRV9PUFModHhfc3RhdGlzdGljcyk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFMoY2hhbm5lbHMpOwogREVCVUdGU19SRUFEX0ZJTEVfT1BTKHN0YXR1cyk7CiBERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMoaW50ZXJydXB0KTsKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyhxb3MpOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyhsZWQpOworI2VuZGlmCitERUJVR0ZTX1JFQURfRklMRV9PUFModGhlcm1hbF90aHJvdHRsaW5nKTsKK0RFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhkaXNhYmxlX2h0NDApOworREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKHNsZWVwX2xldmVsX292ZXJyaWRlKTsKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyhjdXJyZW50X3NsZWVwX2NvbW1hbmQpOworCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfdHJhZmZpY19sb2dfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMCwgb2ZzID0gMDsKKwlpbnQgY250ID0gMCwgZW50cnk7CisJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxOworCXN0cnVjdCBpd2xfcXVldWUgKnE7CisJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gKChJV0xfVFJBRkZJQ19FTlRSSUVTICogSVdMX1RSQUZGSUNfRU5UUllfU0laRSAqIDY0KSAqIDIpICsKKwkJKElXTF9NQVhfTlVNX1FVRVVFUyAqIDMyICogOCkgKyA0MDA7CisJY29uc3QgdTggKnB0cjsKKwlzc2l6ZV90IHJldDsKKworCWJ1ZiA9IGt6YWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlR4IFF1ZXVlXG4iKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgY250KyspIHsKKwkJdHhxID0gJnByaXYtPnR4cVtjbnRdOworCQlxID0gJnR4cS0+cTsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSJxWyVkXTogcmVhZF9wdHI6ICV1LCB3cml0ZV9wdHI6ICV1XG4iLAorCQkJCWNudCwgcS0+cmVhZF9wdHIsIHEtPndyaXRlX3B0cik7CisJfQorCWlmIChwcml2LT50eF90cmFmZmljICYmIChpd2xfZGVidWdfbGV2ZWwgJiBJV0xfRExfVFgpKSB7CisJCXB0ciA9IHByaXYtPnR4X3RyYWZmaWM7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkiVHggVHJhZmZpYyBpZHg6ICV1XG4iLAlwcml2LT50eF90cmFmZmljX2lkeCk7CisJCWZvciAoY250ID0gMCwgb2ZzID0gMDsgY250IDwgSVdMX1RSQUZGSUNfRU5UUklFUzsgY250KyspIHsKKwkJCWZvciAoZW50cnkgPSAwOyBlbnRyeSA8IElXTF9UUkFGRklDX0VOVFJZX1NJWkUgLyAxNjsKKwkJCSAgICAgZW50cnkrKywgIG9mcyArPSAxNikgeworCQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSIweCUuNHggIiwgb2ZzKTsKKwkJCQloZXhfZHVtcF90b19idWZmZXIocHRyICsgb2ZzLCAxNiwgMTYsIDIsCisJCQkJCQkgICBidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAwKTsKKwkJCQlwb3MgKz0gc3RybGVuKGJ1Zik7CisJCQkJaWYgKGJ1ZnN6IC0gcG9zID4gMCkKKwkJCQkJYnVmW3BvcysrXSA9ICdcbic7CisJCQl9CisJCX0KKwl9CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJSeCBRdWV1ZVxuIik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJInJlYWQ6ICV1LCB3cml0ZTogJXVcbiIsCisJCQkgcnhxLT5yZWFkLCByeHEtPndyaXRlKTsKKworCWlmIChwcml2LT5yeF90cmFmZmljICYmIChpd2xfZGVidWdfbGV2ZWwgJiBJV0xfRExfUlgpKSB7CisJCXB0ciA9IHByaXYtPnJ4X3RyYWZmaWM7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkiUnggVHJhZmZpYyBpZHg6ICV1XG4iLAlwcml2LT5yeF90cmFmZmljX2lkeCk7CisJCWZvciAoY250ID0gMCwgb2ZzID0gMDsgY250IDwgSVdMX1RSQUZGSUNfRU5UUklFUzsgY250KyspIHsKKwkJCWZvciAoZW50cnkgPSAwOyBlbnRyeSA8IElXTF9UUkFGRklDX0VOVFJZX1NJWkUgLyAxNjsKKwkJCSAgICAgZW50cnkrKywgIG9mcyArPSAxNikgeworCQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSIweCUuNHggIiwgb2ZzKTsKKwkJCQloZXhfZHVtcF90b19idWZmZXIocHRyICsgb2ZzLCAxNiwgMTYsIDIsCisJCQkJCQkgICBidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAwKTsKKwkJCQlwb3MgKz0gc3RybGVuKGJ1Zik7CisJCQkJaWYgKGJ1ZnN6IC0gcG9zID4gMCkKKwkJCQkJYnVmW3BvcysrXSA9ICdcbic7CisJCQl9CisJCX0KKwl9CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc190cmFmZmljX2xvZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls4XTsKKwlpbnQgYnVmX3NpemU7CisJaW50IHRyYWZmaWNfbG9nOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCWJ1Zl9zaXplID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtICAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJnRyYWZmaWNfbG9nKSAhPSAxKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAodHJhZmZpY19sb2cgPT0gMCkKKwkJaXdsX3Jlc2V0X3RyYWZmaWNfbG9nKHByaXYpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfdHhfcXVldWVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CisKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cTsKKwlzdHJ1Y3QgaXdsX3F1ZXVlICpxOworCWNoYXIgKmJ1ZjsKKwlpbnQgcG9zID0gMDsKKwlpbnQgY250OworCWludCByZXQ7CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGNoYXIpICogNjAgKiBJV0xfTUFYX05VTV9RVUVVRVM7CisKKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGNudCA9IDA7IGNudCA8IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgY250KyspIHsKKwkJdHhxID0gJnByaXYtPnR4cVtjbnRdOworCQlxID0gJnR4cS0+cTsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSJod3EgJS4yZDogcmVhZD0ldSB3cml0ZT0ldSBzdG9wPSVkIgorCQkJCSIgc3dxX2lkPSUjLjJ4IChhYyAlZC9od3EgJWQpXG4iLAorCQkJCWNudCwgcS0+cmVhZF9wdHIsIHEtPndyaXRlX3B0ciwKKwkJCQkhIXRlc3RfYml0KGNudCwgcHJpdi0+cXVldWVfc3RvcHBlZCksCisJCQkJdHhxLT5zd3FfaWQsCisJCQkJdHhxLT5zd3FfaWQgJiAweDgwID8gdHhxLT5zd3FfaWQgJiAzIDoKKwkJCQl0eHEtPnN3cV9pZCwKKwkJCQl0eHEtPnN3cV9pZCAmIDB4ODAgPyAodHhxLT5zd3FfaWQgPj4gMikgJgorCQkJCTB4MWYgOiB0eHEtPnN3cV9pZCk7CisJCWlmIChjbnQgPj0gNCkKKwkJCWNvbnRpbnVlOworCQkvKiBmb3IgdGhlIEFDcywgZGlzcGxheSB0aGUgc3RvcCBjb3VudCB0b28gKi8KKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSIgICAgICAgIHN0b3AtY291bnQ6ICVkXG4iLAorCQkJCWF0b21pY19yZWFkKCZwcml2LT5xdWV1ZV9zdG9wX2NvdW50W2NudF0pKTsKKwl9CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfcnhfcXVldWVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CisKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CisJY2hhciBidWZbMjU2XTsKKwlpbnQgcG9zID0gMDsKKwljb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YoYnVmKTsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInJlYWQ6ICV1XG4iLAorCQkJCQkJcnhxLT5yZWFkKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ3cml0ZTogJXVcbiIsCisJCQkJCQlyeHEtPndyaXRlKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJmcmVlX2NvdW50OiAldVxuIiwKKwkJCQkJCXJ4cS0+ZnJlZV9jb3VudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY2xvc2VkX3JiX251bTogJXVcbiIsCisJCQkgbGUxNl90b19jcHUocnhxLT5yYl9zdHRzLT5jbG9zZWRfcmJfbnVtKSAmICAweDBGRkYpOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKK30KKworI2RlZmluZSBVQ09ERV9TVEFUSVNUSUNTX0NMRUFSX01TSwkJKDB4MSA8PCAwKQorI2RlZmluZSBVQ09ERV9TVEFUSVNUSUNTX0ZSRVFVRU5DWV9NU0sJCSgweDEgPDwgMSkKKyNkZWZpbmUgVUNPREVfU1RBVElTVElDU19OQVJST1dfQkFORF9NU0sJKDB4MSA8PCAyKQorCitzdGF0aWMgaW50IGl3bF9kYmdmc19zdGF0aXN0aWNzX2ZsYWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjaGFyICpidWYsCisJCQkJICAgICBpbnQgYnVmc3opCit7CisJaW50IHAgPSAwOworCisJcCArPSBzY25wcmludGYoYnVmICsgcCwgYnVmc3ogLSBwLAorCQkiU3RhdGlzdGljcyBGbGFnKDB4JVgpOlxuIiwKKwkJbGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5mbGFnKSk7CisJaWYgKGxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZmxhZykgJiBVQ09ERV9TVEFUSVNUSUNTX0NMRUFSX01TSykKKwkJcCArPSBzY25wcmludGYoYnVmICsgcCwgYnVmc3ogLSBwLAorCQkiXHRTdGF0aXN0aWNzIGhhdmUgYmVlbiBjbGVhcmVkXG4iKTsKKwlwICs9IHNjbnByaW50ZihidWYgKyBwLCBidWZzeiAtIHAsCisJCSJcdE9wZXJhdGlvbmFsIEZyZXF1ZW5jeTogJXNcbiIsCisJCShsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLmZsYWcpICYKKwkJVUNPREVfU1RBVElTVElDU19GUkVRVUVOQ1lfTVNLKQorCQkgPyAiMi40IEdIeiIgOiAiNS4yIEdIeiIpOworCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwKKwkJIlx0VEdqIE5hcnJvdyBCYW5kOiAlc1xuIiwKKwkJKGxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZmxhZykgJgorCQlVQ09ERV9TVEFUSVNUSUNTX05BUlJPV19CQU5EX01TSykKKwkJID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisJcmV0dXJuIHA7Cit9CisKKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX3J4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSkgKiAyMCArCisJCXNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5KSAqIDIwICsKKwkJc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSkgKiAyMCArIDQwMDsKKwlzc2l6ZV90IHJldDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgKm9mZG07CisJc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpjY2s7CisJc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqZ2VuZXJhbDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgKmh0OworCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCisJCXJldHVybiAtRUFHQUlOOworCisJLyogbWFrZSByZXF1ZXN0IHRvIHVDb2RlIHRvIHJldHJpZXZlIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gKi8KKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJcmV0ID0gaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIDApOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsCisJCQkiRXJyb3Igc2VuZGluZyBzdGF0aXN0aWNzIHJlcXVlc3Q6ICV6ZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCWJ1ZiA9IGt6YWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogdGhlIHN0YXRpc3RpYyBpbmZvcm1hdGlvbiBkaXNwbGF5IGhlcmUgaXMgYmFzZWQgb24KKwkgKiB0aGUgbGFzdCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlCisJICogbWlnaHQgbm90IHJlZmxlY3QgdGhlIGN1cnJlbnQgdUNvZGUgYWN0aXZpdHkKKwkgKi8KKwlvZmRtID0gJnByaXYtPnN0YXRpc3RpY3Mucngub2ZkbTsKKwljY2sgPSAmcHJpdi0+c3RhdGlzdGljcy5yeC5jY2s7CisJZ2VuZXJhbCA9ICZwcml2LT5zdGF0aXN0aWNzLnJ4LmdlbmVyYWw7CisJaHQgPSAmcHJpdi0+c3RhdGlzdGljcy5yeC5vZmRtX2h0OworCXBvcyArPSBpd2xfZGJnZnNfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfUnggLSBPRkRNOlxuIik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiaW5hX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+aW5hX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImZpbmFfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5maW5hX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInBsY3BfZXJyOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5wbGNwX2VycikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNyYzMyX2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+Y3JjMzJfZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAib3ZlcnJ1bl9lcnI6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPm92ZXJydW5fZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZWFybHlfb3ZlcnJ1bl9lcnI6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmVhcmx5X292ZXJydW5fZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3JjMzJfZ29vZDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+Y3JjMzJfZ29vZCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImZhbHNlX2FsYXJtX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+ZmFsc2VfYWxhcm1fY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZmluYV9zeW5jX2Vycl9jbnQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZpbmFfc3luY19lcnJfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic2ZkX3RpbWVvdXQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnNmZF90aW1lb3V0KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZmluYV90aW1lb3V0OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5maW5hX3RpbWVvdXQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ1bnJlc3BvbmRlZF9ydHM6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnVucmVzcG9uZGVkX3J0cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJyeGVfZnJhbWVfbGltaXRfb3ZlcnJ1bjogJXVcbiIsCisJCQlsZTMyX3RvX2NwdShvZmRtLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1bikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInNlbnRfYWNrX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+c2VudF9hY2tfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic2VudF9jdHNfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZW50X2N0c19jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJzZW50X2JhX3JzcF9jbnQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnNlbnRfYmFfcnNwX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImRzcF9zZWxmX2tpbGw6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmRzcF9zZWxmX2tpbGwpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJtaF9mb3JtYXRfZXJyOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5taF9mb3JtYXRfZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAicmVfYWNxX21haW5fcnNzaV9zdW06ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnJlX2FjcV9tYWluX3Jzc2lfc3VtKSk7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTdGF0aXN0aWNzX1J4IC0gQ0NLOlxuIik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiaW5hX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5pbmFfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZmluYV9jbnQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+ZmluYV9jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJwbGNwX2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5wbGNwX2VycikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNyYzMyX2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5jcmMzMl9lcnIpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJvdmVycnVuX2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5vdmVycnVuX2VycikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImVhcmx5X292ZXJydW5fZXJyOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmVhcmx5X292ZXJydW5fZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3JjMzJfZ29vZDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5jcmMzMl9nb29kKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZmFsc2VfYWxhcm1fY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmZhbHNlX2FsYXJtX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImZpbmFfc3luY19lcnJfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmZpbmFfc3luY19lcnJfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic2ZkX3RpbWVvdXQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+c2ZkX3RpbWVvdXQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJmaW5hX3RpbWVvdXQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+ZmluYV90aW1lb3V0KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAidW5yZXNwb25kZWRfcnRzOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnVucmVzcG9uZGVkX3J0cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJyeGVfZnJhbWVfbGltaXRfb3ZlcnJ1bjogJXVcbiIsCisJCQlsZTMyX3RvX2NwdShjY2stPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic2VudF9hY2tfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnNlbnRfYWNrX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInNlbnRfY3RzX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5zZW50X2N0c19jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJzZW50X2JhX3JzcF9jbnQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+c2VudF9iYV9yc3BfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZHNwX3NlbGZfa2lsbDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5kc3Bfc2VsZl9raWxsKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibWhfZm9ybWF0X2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5taF9mb3JtYXRfZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAicmVfYWNxX21haW5fcnNzaV9zdW06ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+cmVfYWNxX21haW5fcnNzaV9zdW0pKTsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfUnggLSBHRU5FUkFMOlxuIik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYm9ndXNfY3RzOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5ib2d1c19jdHMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJib2d1c19hY2s6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJvZ3VzX2FjaykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5vbl9ic3NpZF9mcmFtZXM6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJmaWx0ZXJlZF9mcmFtZXM6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5vbl9jaGFubmVsX2JlYWNvbnM6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPm5vbl9jaGFubmVsX2JlYWNvbnMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJjaGFubmVsX2JlYWNvbnM6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmNoYW5uZWxfYmVhY29ucykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm51bV9taXNzZWRfYmNvbjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+bnVtX21pc3NlZF9iY29uKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJImFkY19yeF9zYXR1cmF0aW9uX3RpbWU6ICV1XG4iLAorCQkJbGUzMl90b19jcHUoZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJpbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lOiAldVxuIiwKKwkJCWxlMzJfdG9fY3B1KGdlbmVyYWwtPmluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWUpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJiZWFjb25fc2lsZW5jZV9yc3NpX2E6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImJlYWNvbl9zaWxlbmNlX3Jzc2lfYjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9iKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYmVhY29uX3NpbGVuY2VfcnNzaV9jOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkiaW50ZXJmZXJlbmNlX2RhdGFfZmxhZzogJXVcbiIsCisJCQlsZTMyX3RvX2NwdShnZW5lcmFsLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY2hhbm5lbF9sb2FkOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5jaGFubmVsX2xvYWQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJkc3BfZmFsc2VfYWxhcm1zOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5kc3BfZmFsc2VfYWxhcm1zKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYmVhY29uX3Jzc2lfYTogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYSkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImJlYWNvbl9yc3NpX2I6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9yc3NpX2IpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJiZWFjb25fcnNzaV9jOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fcnNzaV9jKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYmVhY29uX2VuZXJneV9hOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fZW5lcmd5X2EpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJiZWFjb25fZW5lcmd5X2I6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImJlYWNvbl9lbmVyZ3lfYzogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9jKSk7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTdGF0aXN0aWNzX1J4IC0gT0ZETV9IVDpcbiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInBsY3BfZXJyOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShodC0+cGxjcF9lcnIpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJvdmVycnVuX2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoaHQtPm92ZXJydW5fZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZWFybHlfb3ZlcnJ1bl9lcnI6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGh0LT5lYXJseV9vdmVycnVuX2VycikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNyYzMyX2dvb2Q6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGh0LT5jcmMzMl9nb29kKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3JjMzJfZXJyOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShodC0+Y3JjMzJfZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibWhfZm9ybWF0X2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoaHQtPm1oX2Zvcm1hdF9lcnIpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJhZ2dfY3JjMzJfZ29vZDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmFnZ19jcmMzMl9nb29kKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYWdnX21wZHVfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShodC0+YWdnX21wZHVfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYWdnX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmFnZ19jbnQpKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX3R4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gKHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc190eCkgKiAyNCkgKyAyNTA7CisJc3NpemVfdCByZXQ7CisJc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4OworCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCisJCXJldHVybiAtRUFHQUlOOworCisJLyogbWFrZSByZXF1ZXN0IHRvIHVDb2RlIHRvIHJldHJpZXZlIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gKi8KKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJcmV0ID0gaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIDApOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsCisJCQkiRXJyb3Igc2VuZGluZyBzdGF0aXN0aWNzIHJlcXVlc3Q6ICV6ZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCWJ1ZiA9IGt6YWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogdGhlIHN0YXRpc3RpYyBpbmZvcm1hdGlvbiBkaXNwbGF5IGhlcmUgaXMgYmFzZWQgb24KKwkgKiB0aGUgbGFzdCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlCisJICogbWlnaHQgbm90IHJlZmxlY3QgdGhlIGN1cnJlbnQgdUNvZGUgYWN0aXZpdHkKKwkgKi8KKwl0eCA9ICZwcml2LT5zdGF0aXN0aWNzLnR4OworCXBvcyArPSBpd2xfZGJnZnNfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfVHg6XG4iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJwcmVhbWJsZTogJXVcbiIsCisJCQkgbGUzMl90b19jcHUodHgtPnByZWFtYmxlX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInJ4X2RldGVjdGVkX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUodHgtPnJ4X2RldGVjdGVkX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImJ0X3ByaW9fZGVmZXJfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YnRfcHJpb19kZWZlcl9jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJidF9wcmlvX2tpbGxfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YnRfcHJpb19raWxsX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImZld19ieXRlc19jbnQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5mZXdfYnl0ZXNfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3RzX3RpbWVvdXQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5jdHNfdGltZW91dCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImFja190aW1lb3V0OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWNrX3RpbWVvdXQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJleHBlY3RlZF9hY2tfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+ZXhwZWN0ZWRfYWNrX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImFjdHVhbF9hY2tfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWN0dWFsX2Fja19jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJkdW1wX21zZHVfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+ZHVtcF9tc2R1X2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJidXJzdF9hYm9ydF9uZXh0X2ZyYW1lX21pc21hdGNoX2NudDogJXVcbiIsCisJCQlsZTMyX3RvX2NwdSh0eC0+YnVyc3RfYWJvcnRfbmV4dF9mcmFtZV9taXNtYXRjaF9jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkiYnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudDogJXVcbiIsCisJCQlsZTMyX3RvX2NwdSh0eC0+YnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImN0c190aW1lb3V0X2NvbGxpc2lvbjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUodHgtPmN0c190aW1lb3V0X2NvbGxpc2lvbikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJhY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb246ICV1XG4iLAorCQkJbGUzMl90b19jcHUodHgtPmFja19vcl9iYV90aW1lb3V0X2NvbGxpc2lvbikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImFnZyBiYV90aW1lb3V0OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLmJhX3RpbWVvdXQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkiYWdnIGJhX3Jlc2NoZWR1bGVfZnJhbWVzOiAldVxuIiwKKwkJCWxlMzJfdG9fY3B1KHR4LT5hZ2cuYmFfcmVzY2hlZHVsZV9mcmFtZXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkiYWdnIHNjZF9xdWVyeV9hZ2dfZnJhbWVfY250OiAldVxuIiwKKwkJCWxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X2FnZ19mcmFtZV9jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJhZ2cgc2NkX3F1ZXJ5X25vX2FnZzogJXVcbiIsCisJCQkgbGUzMl90b19jcHUodHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYWdnIHNjZF9xdWVyeV9hZ2c6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X2FnZykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJhZ2cgc2NkX3F1ZXJ5X21pc21hdGNoOiAldVxuIiwKKwkJCWxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X21pc21hdGNoKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYWdnIGZyYW1lX25vdF9yZWFkeTogJXVcbiIsCisJCQkgbGUzMl90b19jcHUodHgtPmFnZy5mcmFtZV9ub3RfcmVhZHkpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJhZ2cgdW5kZXJydW46ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cudW5kZXJydW4pKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJhZ2cgYnRfcHJpb19raWxsOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLmJ0X3ByaW9fa2lsbCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImFnZyByeF9iYV9yc3BfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnJ4X2JhX3JzcF9jbnQpKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX2dlbmVyYWxfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBwb3MgPSAwOworCWNoYXIgKmJ1ZjsKKwlpbnQgYnVmc3ogPSBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbCkgKiA0ICsgMjUwOworCXNzaXplX3QgcmV0OworCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWwgKmdlbmVyYWw7CisJc3RydWN0IHN0YXRpc3RpY3NfZGJnICpkYmc7CisJc3RydWN0IHN0YXRpc3RpY3NfZGl2ICpkaXY7CisKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwkvKiBtYWtlIHJlcXVlc3QgdG8gdUNvZGUgdG8gcmV0cmlldmUgc3RhdGlzdGljcyBpbmZvcm1hdGlvbiAqLworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlyZXQgPSBpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QocHJpdiwgMCk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisKKwlpZiAocmV0KSB7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJFcnJvciBzZW5kaW5nIHN0YXRpc3RpY3MgcmVxdWVzdDogJXpkXG4iLCByZXQpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiB0aGUgc3RhdGlzdGljIGluZm9ybWF0aW9uIGRpc3BsYXkgaGVyZSBpcyBiYXNlZCBvbgorCSAqIHRoZSBsYXN0IHN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUKKwkgKiBtaWdodCBub3QgcmVmbGVjdCB0aGUgY3VycmVudCB1Q29kZSBhY3Rpdml0eQorCSAqLworCWdlbmVyYWwgPSAmcHJpdi0+c3RhdGlzdGljcy5nZW5lcmFsOworCWRiZyA9ICZwcml2LT5zdGF0aXN0aWNzLmdlbmVyYWwuZGJnOworCWRpdiA9ICZwcml2LT5zdGF0aXN0aWNzLmdlbmVyYWwuZGl2OworCXBvcyArPSBpd2xfZGJnZnNfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfR2VuZXJhbDpcbiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInRlbXBlcmF0dXJlOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT50ZW1wZXJhdHVyZSkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInRlbXBlcmF0dXJlX206ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnRlbXBlcmF0dXJlX20pKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJidXJzdF9jaGVjazogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZGJnLT5idXJzdF9jaGVjaykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImJ1cnN0X2NvdW50OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShkYmctPmJ1cnN0X2NvdW50KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic2xlZXBfdGltZTogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+c2xlZXBfdGltZSkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInNsb3RzX291dDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+c2xvdHNfb3V0KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic2xvdHNfaWRsZTogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+c2xvdHNfaWRsZSkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInR0bF90aW1lc3RhbXA6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnR0bF90aW1lc3RhbXApKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ0eF9vbl9hOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShkaXYtPnR4X29uX2EpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ0eF9vbl9iOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShkaXYtPnR4X29uX2IpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJleGVjX3RpbWU6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGRpdi0+ZXhlY190aW1lKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAicHJvYmVfdGltZTogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZGl2LT5wcm9iZV90aW1lKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAicnhfZW5hYmxlX2NvdW50ZXI6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnJ4X2VuYWJsZV9jb3VudGVyKSk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfc2Vuc2l0aXZpdHlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgeworCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwlpbnQgY250ID0gMDsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gc2l6ZW9mKHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSkgKiA0ICsgMTAwOworCXNzaXplX3QgcmV0OworCXN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSAqZGF0YTsKKworCWRhdGEgPSAmcHJpdi0+c2Vuc2l0aXZpdHlfZGF0YTsKKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImF1dG9fY29ycl9vZmRtOlx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPmF1dG9fY29ycl9vZmRtKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkiYXV0b19jb3JyX29mZG1fbXJjOlx0XHQgJXVcbiIsCisJCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmMpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImF1dG9fY29ycl9vZmRtX3gxOlx0XHQgJXVcbiIsCisJCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV94MSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJImF1dG9fY29ycl9vZmRtX21yY194MTpcdFx0ICV1XG4iLAorCQkJZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjX3gxKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJhdXRvX2NvcnJfY2NrOlx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPmF1dG9fY29ycl9jY2spOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImF1dG9fY29ycl9jY2tfbXJjOlx0XHQgJXVcbiIsCisJCQlkYXRhLT5hdXRvX2NvcnJfY2NrX21yYyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJImxhc3RfYmFkX3BsY3BfY250X29mZG06XHRcdCAldVxuIiwKKwkJCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG0pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImxhc3RfZmFfY250X29mZG06XHRcdCAldVxuIiwKKwkJCWRhdGEtPmxhc3RfZmFfY250X29mZG0pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJsYXN0X2JhZF9wbGNwX2NudF9jY2s6XHRcdCAldVxuIiwKKwkJCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X2Njayk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibGFzdF9mYV9jbnRfY2NrOlx0XHQgJXVcbiIsCisJCQlkYXRhLT5sYXN0X2ZhX2NudF9jY2spOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5yZ19jdXJyX3N0YXRlOlx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPm5yZ19jdXJyX3N0YXRlKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJucmdfcHJldl9zdGF0ZTpcdFx0XHQgJXVcbiIsCisJCQlkYXRhLT5ucmdfcHJldl9zdGF0ZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibnJnX3ZhbHVlOlx0XHRcdCIpOworCWZvciAoY250ID0gMDsgY250IDwgMTA7IGNudCsrKSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiAldSIsCisJCQkJZGF0YS0+bnJnX3ZhbHVlW2NudF0pOworCX0KKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJcbiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5yZ19zaWxlbmNlX3Jzc2k6XHRcdCIpOworCWZvciAoY250ID0gMDsgY250IDwgTlJHX05VTV9QUkVWX1NUQVRfTDsgY250KyspIHsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiICV1IiwKKwkJCQlkYXRhLT5ucmdfc2lsZW5jZV9yc3NpW2NudF0pOworCX0KKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJcbiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5yZ19zaWxlbmNlX3JlZjpcdFx0ICV1XG4iLAorCQkJZGF0YS0+bnJnX3NpbGVuY2VfcmVmKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJucmdfZW5lcmd5X2lkeDpcdFx0XHQgJXVcbiIsCisJCQlkYXRhLT5ucmdfZW5lcmd5X2lkeCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibnJnX3NpbGVuY2VfaWR4Olx0XHQgJXVcbiIsCisJCQlkYXRhLT5ucmdfc2lsZW5jZV9pZHgpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5yZ190aF9jY2s6XHRcdFx0ICV1XG4iLAorCQkJZGF0YS0+bnJnX3RoX2Njayk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmOlx0ICV1XG4iLAorCQkJZGF0YS0+bnJnX2F1dG9fY29ycl9zaWxlbmNlX2RpZmYpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm51bV9pbl9jY2tfbm9fZmE6XHRcdCAldVxuIiwKKwkJCWRhdGEtPm51bV9pbl9jY2tfbm9fZmEpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5yZ190aF9vZmRtOlx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPm5yZ190aF9vZmRtKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfY2hhaW5fbm9pc2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgeworCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwlpbnQgY250ID0gMDsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gc2l6ZW9mKHN0cnVjdCBpd2xfY2hhaW5fbm9pc2VfZGF0YSkgKiA0ICsgMTAwOworCXNzaXplX3QgcmV0OworCXN0cnVjdCBpd2xfY2hhaW5fbm9pc2VfZGF0YSAqZGF0YTsKKworCWRhdGEgPSAmcHJpdi0+Y2hhaW5fbm9pc2VfZGF0YTsKKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImFjdGl2ZV9jaGFpbnM6XHRcdFx0ICV1XG4iLAorCQkJZGF0YS0+YWN0aXZlX2NoYWlucyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY2hhaW5fbm9pc2VfYTpcdFx0XHQgJXVcbiIsCisJCQlkYXRhLT5jaGFpbl9ub2lzZV9hKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJjaGFpbl9ub2lzZV9iOlx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPmNoYWluX25vaXNlX2IpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNoYWluX25vaXNlX2M6XHRcdFx0ICV1XG4iLAorCQkJZGF0YS0+Y2hhaW5fbm9pc2VfYyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY2hhaW5fc2lnbmFsX2E6XHRcdFx0ICV1XG4iLAorCQkJZGF0YS0+Y2hhaW5fc2lnbmFsX2EpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNoYWluX3NpZ25hbF9iOlx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPmNoYWluX3NpZ25hbF9iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJjaGFpbl9zaWduYWxfYzpcdFx0XHQgJXVcbiIsCisJCQlkYXRhLT5jaGFpbl9zaWduYWxfYyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYmVhY29uX2NvdW50Olx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPmJlYWNvbl9jb3VudCk7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJkaXNjb25uX2FycmF5Olx0XHRcdCIpOworCWZvciAoY250ID0gMDsgY250IDwgTlVNX1JYX0NIQUlOUzsgY250KyspIHsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiICV1IiwKKwkJCQlkYXRhLT5kaXNjb25uX2FycmF5W2NudF0pOworCX0KKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJcbiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImRlbHRhX2dhaW5fY29kZTpcdFx0Iik7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBOVU1fUlhfQ0hBSU5TOyBjbnQrKykgeworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIgJXUiLAorCQkJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVtjbnRdKTsKKwl9CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiXG4iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJyYWRpb193cml0ZTpcdFx0XHQgJXVcbiIsCisJCQlkYXRhLT5yYWRpb193cml0ZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic3RhdGU6XHRcdFx0XHQgJXVcbiIsCisJCQlkYXRhLT5zdGF0ZSk7CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc190eF9wb3dlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CisKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzEyOF07CisJaW50IHBvcyA9IDA7CisJc3NpemVfdCByZXQ7CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisJc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4OworCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIk4vQVxuIik7CisJZWxzZSB7CisJCS8qIG1ha2UgcmVxdWVzdCB0byB1Q29kZSB0byByZXRyaWV2ZSBzdGF0aXN0aWNzIGluZm9ybWF0aW9uICovCisJCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwkJcmV0ID0gaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIDApOworCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCQlpZiAocmV0KSB7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZW5kaW5nIHN0YXRpc3RpY3MgcmVxdWVzdDogJXpkXG4iLAorCQkJCXJldCk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQl0eCA9ICZwcml2LT5zdGF0aXN0aWNzLnR4OworCQlpZiAodHgtPnR4X3Bvd2VyLmFudF9hIHx8CisJCSAgICB0eC0+dHhfcG93ZXIuYW50X2IgfHwKKwkJICAgIHR4LT50eF9wb3dlci5hbnRfYykgeworCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSJ0eCBwb3dlcjogKDEvMiBkQiBzdGVwKVxuIik7CisJCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0EpICYmCisJCQkgICAgdHgtPnR4X3Bvd2VyLmFudF9hKQorCQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSJcdGFudGVubmEgQTogMHglWFxuIiwKKwkJCQkJCXR4LT50eF9wb3dlci5hbnRfYSk7CisJCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0IpICYmCisJCQkgICAgdHgtPnR4X3Bvd2VyLmFudF9iKQorCQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSJcdGFudGVubmEgQjogMHglWFxuIiwKKwkJCQkJCXR4LT50eF9wb3dlci5hbnRfYik7CisJCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0MpICYmCisJCQkgICAgdHgtPnR4X3Bvd2VyLmFudF9jKQorCQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSJcdGFudGVubmEgQzogMHglWFxuIiwKKwkJCQkJCXR4LT50eF9wb3dlci5hbnRfYyk7CisJCX0gZWxzZQorCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiTi9BXG4iKTsKKwl9CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworfQorCitERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMocnhfc3RhdGlzdGljcyk7CitERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFModHhfc3RhdGlzdGljcyk7CitERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFModHJhZmZpY19sb2cpOworREVCVUdGU19SRUFEX0ZJTEVfT1BTKHJ4X3F1ZXVlKTsKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyh0eF9xdWV1ZSk7CitERUJVR0ZTX1JFQURfRklMRV9PUFModWNvZGVfcnhfc3RhdHMpOworREVCVUdGU19SRUFEX0ZJTEVfT1BTKHVjb2RlX3R4X3N0YXRzKTsKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyh1Y29kZV9nZW5lcmFsX3N0YXRzKTsKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyhzZW5zaXRpdml0eSk7CitERUJVR0ZTX1JFQURfRklMRV9PUFMoY2hhaW5fbm9pc2UpOworREVCVUdGU19SRUFEX0ZJTEVfT1BTKHR4X3Bvd2VyKTsKIAogLyoKICAqIENyZWF0ZSB0aGUgZGVidWdmcyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMKQEAgLTYwMywxOSArMTY1Miw0MiBAQAogCiAJREVCVUdGU19BRERfRElSKGRhdGEsIGRiZ2ZzLT5kaXJfZHJ2KTsKIAlERUJVR0ZTX0FERF9ESVIocmYsIGRiZ2ZzLT5kaXJfZHJ2KTsKKwlERUJVR0ZTX0FERF9ESVIoZGVidWcsIGRiZ2ZzLT5kaXJfZHJ2KTsKIAlERUJVR0ZTX0FERF9GSUxFKG52bSwgZGF0YSk7CiAJREVCVUdGU19BRERfRklMRShzcmFtLCBkYXRhKTsKIAlERUJVR0ZTX0FERF9GSUxFKGxvZ19ldmVudCwgZGF0YSk7CiAJREVCVUdGU19BRERfRklMRShzdGF0aW9ucywgZGF0YSk7Ci0JREVCVUdGU19BRERfRklMRShyeF9zdGF0aXN0aWNzLCBkYXRhKTsKLQlERUJVR0ZTX0FERF9GSUxFKHR4X3N0YXRpc3RpY3MsIGRhdGEpOwogCURFQlVHRlNfQUREX0ZJTEUoY2hhbm5lbHMsIGRhdGEpOwogCURFQlVHRlNfQUREX0ZJTEUoc3RhdHVzLCBkYXRhKTsKIAlERUJVR0ZTX0FERF9GSUxFKGludGVycnVwdCwgZGF0YSk7CisJREVCVUdGU19BRERfRklMRShxb3MsIGRhdGEpOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKKwlERUJVR0ZTX0FERF9GSUxFKGxlZCwgZGF0YSk7CisjZW5kaWYKKwlERUJVR0ZTX0FERF9GSUxFKHNsZWVwX2xldmVsX292ZXJyaWRlLCBkYXRhKTsKKwlERUJVR0ZTX0FERF9GSUxFKGN1cnJlbnRfc2xlZXBfY29tbWFuZCwgZGF0YSk7CisJREVCVUdGU19BRERfRklMRSh0aGVybWFsX3Rocm90dGxpbmcsIGRhdGEpOworCURFQlVHRlNfQUREX0ZJTEUoZGlzYWJsZV9odDQwLCBkYXRhKTsKKwlERUJVR0ZTX0FERF9GSUxFKHJ4X3N0YXRpc3RpY3MsIGRlYnVnKTsKKwlERUJVR0ZTX0FERF9GSUxFKHR4X3N0YXRpc3RpY3MsIGRlYnVnKTsKKwlERUJVR0ZTX0FERF9GSUxFKHRyYWZmaWNfbG9nLCBkZWJ1Zyk7CisJREVCVUdGU19BRERfRklMRShyeF9xdWV1ZSwgZGVidWcpOworCURFQlVHRlNfQUREX0ZJTEUodHhfcXVldWUsIGRlYnVnKTsKKwlERUJVR0ZTX0FERF9GSUxFKHR4X3Bvd2VyLCBkZWJ1Zyk7CisJaWYgKChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSAhPSBDU1JfSFdfUkVWX1RZUEVfMzk0NSkgeworCQlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX3J4X3N0YXRzLCBkZWJ1Zyk7CisJCURFQlVHRlNfQUREX0ZJTEUodWNvZGVfdHhfc3RhdHMsIGRlYnVnKTsKKwkJREVCVUdGU19BRERfRklMRSh1Y29kZV9nZW5lcmFsX3N0YXRzLCBkZWJ1Zyk7CisJCURFQlVHRlNfQUREX0ZJTEUoc2Vuc2l0aXZpdHksIGRlYnVnKTsKKwkJREVCVUdGU19BRERfRklMRShjaGFpbl9ub2lzZSwgZGVidWcpOworCX0KIAlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfc2Vuc2l0aXZpdHksIHJmLCAmcHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCk7CiAJREVCVUdGU19BRERfQk9PTChkaXNhYmxlX2NoYWluX25vaXNlLCByZiwKIAkJCSAmcHJpdi0+ZGlzYWJsZV9jaGFpbl9ub2lzZV9jYWwpOwotCURFQlVHRlNfQUREX0JPT0woZGlzYWJsZV90eF9wb3dlciwgcmYsICZwcml2LT5kaXNhYmxlX3R4X3Bvd2VyX2NhbCk7CisJaWYgKCgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzQ5NjUpIHx8CisJICAgICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzM5NDUpKQorCQlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfdHhfcG93ZXIsIHJmLAorCQkJCSZwcml2LT5kaXNhYmxlX3R4X3Bvd2VyX2NhbCk7CiAJcmV0dXJuIDA7CiAKIGVycjoKQEAgLTYzNCwxOSArMTcwNiw0NiBAQAogCWlmICghcHJpdi0+ZGJnZnMpCiAJCXJldHVybjsKIAorCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc2xlZXBfbGV2ZWxfb3ZlcnJpZGUpOworCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfY3VycmVudF9zbGVlcF9jb21tYW5kKTsKIAlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX252bSk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9yeF9zdGF0aXN0aWNzKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX3R4X3N0YXRpc3RpY3MpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3JhbSk7CiAJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9sb2dfZXZlbnQpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3RhdGlvbnMpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfY2hhbm5lbHMpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3RhdHVzKTsKIAlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX2ludGVycnVwdCk7CisJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9xb3MpOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX2xlZCk7CisjZW5kaWYKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX3RoZXJtYWxfdGhyb3R0bGluZyk7CisJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9kaXNhYmxlX2h0NDApOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kaXJfZGF0YSk7CisJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfcnhfc3RhdGlzdGljcyk7CisJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfdHhfc3RhdGlzdGljcyk7CisJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfdHJhZmZpY19sb2cpOworCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy5maWxlX3J4X3F1ZXVlKTsKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuZmlsZV90eF9xdWV1ZSk7CisJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfdHhfcG93ZXIpOworCWlmICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgIT0gQ1NSX0hXX1JFVl9UWVBFXzM5NDUpIHsKKwkJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLgorCQkJZmlsZV91Y29kZV9yeF9zdGF0cyk7CisJCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy4KKwkJCWZpbGVfdWNvZGVfdHhfc3RhdHMpOworCQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuCisJCQlmaWxlX3Vjb2RlX2dlbmVyYWxfc3RhdHMpOworCQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuCisJCQlmaWxlX3NlbnNpdGl2aXR5KTsKKwkJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLgorCQkJZmlsZV9jaGFpbl9ub2lzZSk7CisJfQorCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kaXJfZGVidWcpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfc2Vuc2l0aXZpdHkpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfY2hhaW5fbm9pc2UpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfdHhfcG93ZXIpOworCWlmICgoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spID09IENTUl9IV19SRVZfVFlQRV80OTY1KSB8fAorCSAgICAoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spID09IENTUl9IV19SRVZfVFlQRV8zOTQ1KSkKKwkJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX3JmX2ZpbGVzLmZpbGVfZGlzYWJsZV90eF9wb3dlcik7CiAJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRpcl9yZik7CiAJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRpcl9kcnYpOwogCWtmcmVlKHByaXYtPmRiZ2ZzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKaW5kZXggNjUwZTIwYS4uMDI4ZDUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKQEAgLTU2LDE2ICs1NiwxOSBAQAogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYmdfY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYWJnX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTUwX2Fnbl9jZmc7Ci1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWdfY2ZnOwotZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfMmFnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMGhfMmFnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMGlfMmFnbl9jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8zYWduX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhZ25fY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfM2Fnbl9jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMTAwMF9iZ25fY2ZnOwogCitzdHJ1Y3QgaXdsX3R4X3F1ZXVlOworCiAvKiBzaGFyZWQgc3RydWN0dXJlcyBmcm9tIGl3bC01MDAwLmMgKi8KIGV4dGVybiBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsNTBfbW9kX3BhcmFtczsKIGV4dGVybiBzdHJ1Y3QgaXdsX29wcyBpd2w1MDAwX29wczsKK2V4dGVybiBzdHJ1Y3QgaXdsX3Vjb2RlX29wcyBpd2w1MDAwX3Vjb2RlOwogZXh0ZXJuIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYjsKIGV4dGVybiBzdHJ1Y3QgaXdsX2hjbWRfb3BzIGl3bDUwMDBfaGNtZDsKIGV4dGVybiBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDUwMDBfaGNtZF91dGlsczsKQEAgLTc4LDkgKzgxLDM3IEBACiAJCQkJICAgIF9fbGUzMiAqdHhfZmxhZ3MpOwogZXh0ZXJuIGludCBpd2w1MDAwX2NhbGNfcnNzaShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgIHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqcnhfcmVzcCk7CitleHRlcm4gaW50IGl3bDUwMDBfYXBtX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDUwMDBfYXBtX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsNTAwMF9hcG1fcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDUwMDBfbmljX2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHUxNiBpd2w1MDAwX2VlcHJvbV9jYWxpYl92ZXJzaW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gY29uc3QgdTggKml3bDUwMDBfZWVwcm9tX3F1ZXJ5X2FkZHIoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICBzaXplX3Qgb2Zmc2V0KTsKK2V4dGVybiB2b2lkIGl3bDUwMDBfdHhxX3VwZGF0ZV9ieXRlX2NudF90Ymwoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkJCQkgICAgdTE2IGJ5dGVfY250KTsKK2V4dGVybiB2b2lkIGl3bDUwMDBfdHhxX2ludmFsX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CitleHRlcm4gaW50IGl3bDUwMDBfbG9hZF91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDUwMDBfYWxpdmVfbm90aWZ5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2w1MDAwX3R4cV9hZ2dfZW5hYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwKKwkJCSAgIGludCB0eF9maWZvLCBpbnQgc3RhX2lkLCBpbnQgdGlkLCB1MTYgc3NuX2lkeCk7CitleHRlcm4gaW50IGl3bDUwMDBfdHhxX2FnZ19kaXNhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IHR4cV9pZCwKKwkJCSAgICB1MTYgc3NuX2lkeCwgdTggdHhfZmlmbyk7CitleHRlcm4gdm9pZCBpd2w1MDAwX3R4cV9zZXRfc2NoZWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgbWFzayk7CitleHRlcm4gdm9pZCBpd2w1MDAwX3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDUwMDBfcnhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2w1MDAwX2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIodTMyIGFkZHIpOworZXh0ZXJuIGludCBpd2w1MDAwX3NlbmRfdHhfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDUwMDBfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogLyogQ1QtS0lMTCBjb25zdGFudHMgKi8KLSNkZWZpbmUgQ1RfS0lMTF9USFJFU0hPTEQJMTEwIC8qIGluIENlbHNpdXMgKi8KKyNkZWZpbmUgQ1RfS0lMTF9USFJFU0hPTERfTEVHQUNZICAgMTEwIC8qIGluIENlbHNpdXMgKi8KKyNkZWZpbmUgQ1RfS0lMTF9USFJFU0hPTEQJICAgMTE0IC8qIGluIENlbHNpdXMgKi8KKyNkZWZpbmUgQ1RfS0lMTF9FWElUX1RIUkVTSE9MRCAgICAgOTUgIC8qIGluIENlbHNpdXMgKi8KIAogLyogRGVmYXVsdCBub2lzZSBsZXZlbCB0byByZXBvcnQgd2hlbiBub2lzZSBtZWFzdXJlbWVudCBpcyBub3QgYXZhaWxhYmxlLgogICogICBUaGlzIG1heSBiZSBiZWNhdXNlIHdlJ3JlOgpAQCAtMTE5LDYgKzE1MCwzMSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKKy8qIGRlZmluZWQgYmVsb3cgKi8KK3N0cnVjdCBpd2xfZGV2aWNlX2NtZDsKKworc3RydWN0IGl3bF9jbWRfbWV0YSB7CisJLyogb25seSBmb3IgU1lOQyBjb21tYW5kcywgaWZmIHRoZSByZXBseSBza2IgaXMgd2FudGVkICovCisJc3RydWN0IGl3bF9ob3N0X2NtZCAqc291cmNlOworCS8qCisJICogb25seSBmb3IgQVNZTkMgY29tbWFuZHMKKwkgKiAod2hpY2ggaXMgc29tZXdoYXQgc3R1cGlkIC0tIGxvb2sgYXQgaXdsLXN0YS5jIGZvciBpbnN0YW5jZQorCSAqIHdoaWNoIGR1cGxpY2F0ZXMgYSBidW5jaCBvZiBjb2RlIGJlY2F1c2UgdGhlIGNhbGxiYWNrIGlzbid0CisJICogaW52b2tlZCBmb3IgU1lOQyBjb21tYW5kcywgaWYgaXQgd2VyZSBhbmQgaXRzIHJlc3VsdCBwYXNzZWQKKwkgKiB0aHJvdWdoIGl0IHdvdWxkIGJlIHNpbXBsZXIuLi4pCisJICovCisJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgc3RydWN0IGl3bF9kZXZpY2VfY21kICpjbWQsCisJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwkvKiBUaGUgQ01EX1NJWkVfSFVHRSBmbGFnIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29tbWFuZAorCSAqIHN0cnVjdHVyZSBpcyBzdG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgc2hhcmVkIHF1ZXVlIG1lbW9yeS4gKi8KKwl1MzIgZmxhZ3M7CisKKwlERUNMQVJFX1BDSV9VTk1BUF9BRERSKG1hcHBpbmcpCisJREVDTEFSRV9QQ0lfVU5NQVBfTEVOKGxlbikKK307CisKIC8qCiAgKiBHZW5lcmljIHF1ZXVlIHN0cnVjdHVyZQogICoKQEAgLTE0Niw3ICsyMDIsOCBAQAogICogc3RydWN0IGl3bF90eF9xdWV1ZSAtIFR4IFF1ZXVlIGZvciBETUEKICAqIEBxOiBnZW5lcmljIFJ4L1R4IHF1ZXVlIGRlc2NyaXB0b3IKICAqIEBiZDogYmFzZSBvZiBjaXJjdWxhciBidWZmZXIgb2YgVEZEcwotICogQGNtZDogYXJyYXkgb2YgY29tbWFuZC9UeCBidWZmZXJzCisgKiBAY21kOiBhcnJheSBvZiBjb21tYW5kL1RYIGJ1ZmZlciBwb2ludGVycworICogQG1ldGE6IGFycmF5IG9mIG1ldGEgZGF0YSBmb3IgZWFjaCBjb21tYW5kL3R4IGJ1ZmZlcgogICogQGRtYV9hZGRyX2NtZDogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQvdHggYnVmZmVyIGFycmF5CiAgKiBAdHhiOiBhcnJheSBvZiBwZXItVEZEIGRyaXZlciBkYXRhCiAgKiBAbmVlZF91cGRhdGU6IGluZGljYXRlcyBuZWVkIHRvIHVwZGF0ZSByZWFkL3dyaXRlIGluZGV4CkBAIC0xNjEsNyArMjE4LDggQEAKIHN0cnVjdCBpd2xfdHhfcXVldWUgewogCXN0cnVjdCBpd2xfcXVldWUgcTsKIAl2b2lkICp0ZmRzOwotCXN0cnVjdCBpd2xfY21kICpjbWRbVEZEX1RYX0NNRF9TTE9UU107CisJc3RydWN0IGl3bF9kZXZpY2VfY21kICoqY21kOworCXN0cnVjdCBpd2xfY21kX21ldGEgKm1ldGE7CiAJc3RydWN0IGl3bF90eF9pbmZvICp0eGI7CiAJdTggbmVlZF91cGRhdGU7CiAJdTggc2NoZWRfcmV0cnk7CkBAIC0yMTksOCArMjc3LDggQEAKIAlzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3RnZF9pbmZvIHRnZDsKIAlzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3RnaF9pbmZvIHRnaDsKIAlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGVlcHJvbTsJLyogRUVQUk9NIHJlZ3VsYXRvcnkgbGltaXQgKi8KLQlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGZhdF9lZXByb207CS8qIEVFUFJPTSByZWd1bGF0b3J5IGxpbWl0IGZvcgotCQkJCQkJICogRkFUIGNoYW5uZWwgKi8KKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGh0NDBfZWVwcm9tOwkvKiBFRVBST00gcmVndWxhdG9yeSBsaW1pdCBmb3IKKwkJCQkJCSAqIEhUNDAgY2hhbm5lbCAqLwogCiAJdTggY2hhbm5lbDsJICAvKiBjaGFubmVsIG51bWJlciAqLwogCXU4IGZsYWdzOwkgIC8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLwpAQCAtMjMzLDEzICsyOTEsMTMgQEAKIAl1OCBiYW5kX2luZGV4OwkgIC8qIDAtNCwgbWFwcyBjaGFubmVsIHRvIGJhbmQxLzIvMy80LzUgKi8KIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAKLQkvKiBGQVQgY2hhbm5lbCBpbmZvICovCi0JczggZmF0X21heF9wb3dlcl9hdmc7CS8qIChkQm0pIHJlZ3VsLiBlZXByb20sIG5vcm1hbCBUeCwgYW55IHJhdGUgKi8KLQlzOCBmYXRfY3Vycl90eHBvdzsJLyogKGRCbSkgcmVndWxhdG9yeS9zcGVjdHJ1bS91c2VyIChub3QgaC93KSAqLwotCXM4IGZhdF9taW5fcG93ZXI7CS8qIGFsd2F5cyAwICovCi0JczggZmF0X3NjYW5fcG93ZXI7CS8qIChkQm0pIGVlcHJvbSwgZGlyZWN0IHNjYW5zLCBhbnkgcmF0ZSAqLwotCXU4IGZhdF9mbGFnczsJCS8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLwotCXU4IGZhdF9leHRlbnNpb25fY2hhbm5lbDsgLyogSFRfSUVfRVhUX0NIQU5ORUxfKiAqLworCS8qIEhUNDAgY2hhbm5lbCBpbmZvICovCisJczggaHQ0MF9tYXhfcG93ZXJfYXZnOwkvKiAoZEJtKSByZWd1bC4gZWVwcm9tLCBub3JtYWwgVHgsIGFueSByYXRlICovCisJczggaHQ0MF9jdXJyX3R4cG93OwkvKiAoZEJtKSByZWd1bGF0b3J5L3NwZWN0cnVtL3VzZXIgKG5vdCBoL3cpICovCisJczggaHQ0MF9taW5fcG93ZXI7CS8qIGFsd2F5cyAwICovCisJczggaHQ0MF9zY2FuX3Bvd2VyOwkvKiAoZEJtKSBlZXByb20sIGRpcmVjdCBzY2FucywgYW55IHJhdGUgKi8KKwl1OCBodDQwX2ZsYWdzOwkJLyogZmxhZ3MgY29waWVkIGZyb20gRUVQUk9NICovCisJdTggaHQ0MF9leHRlbnNpb25fY2hhbm5lbDsgLyogSFRfSUVfRVhUX0NIQU5ORUxfKiAqLwogCiAJLyogUmFkaW8vRFNQIGdhaW4gc2V0dGluZ3MgZm9yIGVhY2ggIm5vcm1hbCIgZGF0YSBUeCByYXRlLgogCSAqIFRoZXNlIGluY2x1ZGUsIGluIGFkZGl0aW9uIHRvIFJGIGFuZCBEU1AgZ2FpbiwgYSBmZXcgZmllbGRzIGZvcgpAQCAtMjk4LDM1ICszNTYsMTYgQEAKIAlDTURfV0FOVF9TS0IgPSAoMSA8PCAyKSwKIH07CiAKLXN0cnVjdCBpd2xfY21kOwotc3RydWN0IGl3bF9wcml2OwotCi1zdHJ1Y3QgaXdsX2NtZF9tZXRhIHsKLQlzdHJ1Y3QgaXdsX2NtZF9tZXRhICpzb3VyY2U7Ci0JdW5pb24gewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQlpbnQgKCpjYWxsYmFjaykoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2xfY21kICpjbWQsIHN0cnVjdCBza19idWZmICpza2IpOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHU7Ci0KLQkvKiBUaGUgQ01EX1NJWkVfSFVHRSBmbGFnIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29tbWFuZAotCSAqIHN0cnVjdHVyZSBpcyBzdG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgc2hhcmVkIHF1ZXVlIG1lbW9yeS4gKi8KLQl1MzIgZmxhZ3M7Ci0JREVDTEFSRV9QQ0lfVU5NQVBfQUREUihtYXBwaW5nKQotCURFQ0xBUkVfUENJX1VOTUFQX0xFTihsZW4pCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogI2RlZmluZSBJV0xfQ01EX01BWF9QQVlMT0FEIDMyMAogCiAvKioKLSAqIHN0cnVjdCBpd2xfY21kCisgKiBzdHJ1Y3QgaXdsX2RldmljZV9jbWQKICAqCiAgKiBGb3IgYWxsb2NhdGlvbiBvZiB0aGUgY29tbWFuZCBhbmQgdHggcXVldWVzLCB0aGlzIGVzdGFibGlzaGVzIHRoZSBvdmVyYWxsCiAgKiBzaXplIG9mIHRoZSBsYXJnZXN0IGNvbW1hbmQgd2Ugc2VuZCB0byB1Q29kZSwgZXhjZXB0IGZvciBhIHNjYW4gY29tbWFuZAogICogKHdoaWNoIGlzIHJlbGF0aXZlbHkgaHVnZTsgc3BhY2UgaXMgYWxsb2NhdGVkIHNlcGFyYXRlbHkpLgogICovCi1zdHJ1Y3QgaXdsX2NtZCB7Ci0Jc3RydWN0IGl3bF9jbWRfbWV0YSBtZXRhOwkvKiBkcml2ZXIgZGF0YSAqLworc3RydWN0IGl3bF9kZXZpY2VfY21kIHsKIAlzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIgaGRyOwkvKiB1Q29kZSBBUEkgKi8KIAl1bmlvbiB7CiAJCXUzMiBmbGFnczsKQEAgLTMzOCwxNyArMzc3LDIwIEBACiAJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY21kOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgVEZEX01BWF9QQVlMT0FEX1NJWkUgKHNpemVvZihzdHJ1Y3QgaXdsX2RldmljZV9jbWQpKQorCiAKIHN0cnVjdCBpd2xfaG9zdF9jbWQgewotCXU4IGlkOwotCXUxNiBsZW47Ci0Jc3RydWN0IGl3bF9jbWRfbWV0YSBtZXRhOwogCWNvbnN0IHZvaWQgKmRhdGE7CisJc3RydWN0IHNrX2J1ZmYgKnJlcGx5X3NrYjsKKwl2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSBzdHJ1Y3QgaXdsX2RldmljZV9jbWQgKmNtZCwKKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwl1MzIgZmxhZ3M7CisJdTE2IGxlbjsKKwl1OCBpZDsKIH07CiAKLSNkZWZpbmUgVEZEX01BWF9QQVlMT0FEX1NJWkUgKHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkgLSBcCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bF9jbWRfbWV0YSkpCi0KIC8qCiAgKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucwogICovCkBAIC00NDksMjMgKzQ5MSwyNSBAQAogfTsKIAogI2RlZmluZSBDRkdfSFRfUlhfQU1QRFVfRkFDVE9SX0RFRiAgKDB4MykKLSNkZWZpbmUgQ0ZHX0hUX01QRFVfREVOU0lUWV8yVVNFQyAgICgweDUpCi0jZGVmaW5lIENGR19IVF9NUERVX0RFTlNJVFlfREVGIENGR19IVF9NUERVX0RFTlNJVFlfMlVTRUMKKworLyoKKyAqIE1heGltYWwgTVBEVSBkZW5zaXR5IGZvciBUWCBhZ2dyZWdhdGlvbgorICogNCAtIDJ1cyBkZW5zaXR5CisgKiA1IC0gNHVzIGRlbnNpdHkKKyAqIDYgLSA4dXMgZGVuc2l0eQorICogNyAtIDE2dXMgZGVuc2l0eQorICovCisjZGVmaW5lIENGR19IVF9NUERVX0RFTlNJVFlfNFVTRUMgICAoMHg1KQorI2RlZmluZSBDRkdfSFRfTVBEVV9ERU5TSVRZX0RFRiBDRkdfSFRfTVBEVV9ERU5TSVRZXzRVU0VDCiAKIHN0cnVjdCBpd2xfaHRfaW5mbyB7CiAJLyogc2VsZiBjb25maWd1cmF0aW9uIGRhdGEgKi8KIAl1OCBpc19odDsKIAl1OCBzdXBwb3J0ZWRfY2hhbl93aWR0aDsKIAl1OCBzbV9wczsKLQl1OCBpc19ncmVlbl9maWVsZDsKLQl1OCBzZ2Y7CQkJLyogSFRfU0hPUlRfR0lfKiBzaG9ydCBndWFyZCBpbnRlcnZhbCAqLwotCXU4IG1heF9hbXNkdV9zaXplOwotCXU4IGFtcGR1X2ZhY3RvcjsKLQl1OCBtcGR1X2RlbnNpdHk7CiAJc3RydWN0IGllZWU4MDIxMV9tY3NfaW5mbyBtY3M7CiAJLyogQlNTIHJlbGF0ZWQgZGF0YSAqLwogCXU4IGV4dGVuc2lvbl9jaGFuX29mZnNldDsKLQl1OCB0eF9jaGFuX3dpZHRoOwogCXU4IGh0X3Byb3RlY3Rpb247CiAJdTggbm9uX0dGX1NUQV9wcmVzZW50OwogfTsKQEAgLTUyNSwxNSArNTY5LDI5IEBACiB9OwogCiAvKiB1Q29kZSBmaWxlIGxheW91dCAqLwotc3RydWN0IGl3bF91Y29kZSB7Ci0JX19sZTMyIHZlcjsJCS8qIG1ham9yL21pbm9yL0FQSS9zZXJpYWwgKi8KLQlfX2xlMzIgaW5zdF9zaXplOwkvKiBieXRlcyBvZiBydW50aW1lIGluc3RydWN0aW9ucyAqLwotCV9fbGUzMiBkYXRhX3NpemU7CS8qIGJ5dGVzIG9mIHJ1bnRpbWUgZGF0YSAqLwotCV9fbGUzMiBpbml0X3NpemU7CS8qIGJ5dGVzIG9mIGluaXRpYWxpemF0aW9uIGluc3RydWN0aW9ucyAqLwotCV9fbGUzMiBpbml0X2RhdGFfc2l6ZTsJLyogYnl0ZXMgb2YgaW5pdGlhbGl6YXRpb24gZGF0YSAqLwotCV9fbGUzMiBib290X3NpemU7CS8qIGJ5dGVzIG9mIGJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKi8KLQl1OCBkYXRhWzBdOwkJLyogZGF0YSBpbiBzYW1lIG9yZGVyIGFzICJzaXplIiBlbGVtZW50cyAqLworc3RydWN0IGl3bF91Y29kZV9oZWFkZXIgeworCV9fbGUzMiB2ZXI7CS8qIG1ham9yL21pbm9yL0FQSS9zZXJpYWwgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX2xlMzIgaW5zdF9zaXplOwkvKiBieXRlcyBvZiBydW50aW1lIGNvZGUgKi8KKwkJCV9fbGUzMiBkYXRhX3NpemU7CS8qIGJ5dGVzIG9mIHJ1bnRpbWUgZGF0YSAqLworCQkJX19sZTMyIGluaXRfc2l6ZTsJLyogYnl0ZXMgb2YgaW5pdCBjb2RlICovCisJCQlfX2xlMzIgaW5pdF9kYXRhX3NpemU7CS8qIGJ5dGVzIG9mIGluaXQgZGF0YSAqLworCQkJX19sZTMyIGJvb3Rfc2l6ZTsJLyogYnl0ZXMgb2YgYm9vdHN0cmFwIGNvZGUgKi8KKwkJCXU4IGRhdGFbMF07CQkvKiBpbiBzYW1lIG9yZGVyIGFzIHNpemVzICovCisJCX0gdjE7CisJCXN0cnVjdCB7CisJCQlfX2xlMzIgYnVpbGQ7CQkvKiBidWlsZCBudW1iZXIgKi8KKwkJCV9fbGUzMiBpbnN0X3NpemU7CS8qIGJ5dGVzIG9mIHJ1bnRpbWUgY29kZSAqLworCQkJX19sZTMyIGRhdGFfc2l6ZTsJLyogYnl0ZXMgb2YgcnVudGltZSBkYXRhICovCisJCQlfX2xlMzIgaW5pdF9zaXplOwkvKiBieXRlcyBvZiBpbml0IGNvZGUgKi8KKwkJCV9fbGUzMiBpbml0X2RhdGFfc2l6ZTsJLyogYnl0ZXMgb2YgaW5pdCBkYXRhICovCisJCQlfX2xlMzIgYm9vdF9zaXplOwkvKiBieXRlcyBvZiBib290c3RyYXAgY29kZSAqLworCQkJdTggZGF0YVswXTsJCS8qIGluIHNhbWUgb3JkZXIgYXMgc2l6ZXMgKi8KKwkJfSB2MjsKKwl9IHU7CiB9OworI2RlZmluZSBVQ09ERV9IRUFERVJfU0laRSh2ZXIpICgodmVyKSA9PSAxID8gMjQgOiAyOCkKIAogc3RydWN0IGl3bDQ5NjVfaWJzc19zZXEgewogCXU4IG1hY1tFVEhfQUxFTl07CkBAIC01ODUsNyArNjQzLDcgQEAKICAqIEByeF93cnRfcHRyX3JlZzogRkh7Mzl9X1JTQ1NSX0NITkwwX1dQVFIKICAqIEBtYXhfc3RhdGlvbnM6CiAgKiBAYmNhc3Rfc3RhX2lkOgotICogQGZhdF9jaGFubmVsOiBpcyA0ME1IeiB3aWR0aCBwb3NzaWJsZSBpbiBiYW5kIDIuNAorICogQGh0NDBfY2hhbm5lbDogaXMgNDBNSHogd2lkdGggcG9zc2libGUgaW4gYmFuZCAyLjQKICAqIEJJVChJRUVFODAyMTFfQkFORF81R0haKSBCSVQoSUVFRTgwMjExX0JBTkRfNUdIWikKICAqIEBzd19jcnlwdG86IDAgZm9yIGh3LCAxIGZvciBzdwogICogQG1heF94eHhfc2l6ZTogZm9yIHVjb2RlIHVzZXMKQEAgLTYwOSwxMiArNjY3LDE0IEBACiAJdTMyIG1heF9wa3Rfc2l6ZTsKIAl1OCAgbWF4X3N0YXRpb25zOwogCXU4ICBiY2FzdF9zdGFfaWQ7Ci0JdTggZmF0X2NoYW5uZWw7Ci0JdTggc3dfY3J5cHRvOworCXU4ICBodDQwX2NoYW5uZWw7CisJdTggIG1heF9iZWFjb25faXRydmw7CS8qIGluIDEwMjQgbXMgKi8KIAl1MzIgbWF4X2luc3Rfc2l6ZTsKIAl1MzIgbWF4X2RhdGFfc2l6ZTsKIAl1MzIgbWF4X2JzbV9zaXplOwogCXUzMiBjdF9raWxsX3RocmVzaG9sZDsgLyogdmFsdWUgaW4gaHctZGVwZW5kZW50IHVuaXRzICovCisJdTMyIGN0X2tpbGxfZXhpdF90aHJlc2hvbGQ7IC8qIHZhbHVlIGluIGh3LWRlcGVuZGVudCB1bml0cyAqLworCQkJCSAgICAvKiBmb3IgMTAwMCwgNjAwMCBzZXJpZXMgYW5kIHVwICovCiAJdTMyIGNhbGliX2luaXRfY2ZnOwogCWNvbnN0IHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfcmFuZ2VzICpzZW5zOwogfTsKQEAgLTY2Niw5ICs3MjYsNiBAQAogCXNpemVfdCBzaXplOwogfTsKIAotI2RlZmluZSBIVF9TSE9SVF9HSV8yME1IWgkoMSA8PCAwKQotI2RlZmluZSBIVF9TSE9SVF9HSV80ME1IWgkoMSA8PCAxKQotCiAjZGVmaW5lIElXTF9DSEFOTkVMX1dJRFRIXzIwTUhaICAgMAogI2RlZmluZSBJV0xfQ0hBTk5FTF9XSURUSF80ME1IWiAgIDEKIApAQCAtODA5LDYgKzg2Niw4IEBACiAjZGVmaW5lCUVFUFJPTV9TRU1fVElNRU9VVCAxMAkJLyogbWlsbGlzZWNvbmRzICovCiAjZGVmaW5lIEVFUFJPTV9TRU1fUkVUUllfTElNSVQgMTAwMAkvKiBudW1iZXIgb2YgYXR0ZW1wdHMgKG5vdCB0aW1lKSAqLwogCisjZGVmaW5lIElXTF9UUkFGRklDX0VOVFJJRVMJKDI1NikKKyNkZWZpbmUgSVdMX1RSQUZGSUNfRU5UUllfU0laRSAgKDY0KQogCiBlbnVtIHsKIAlNRUFTVVJFTUVOVF9SRUFEWSA9ICgxIDw8IDApLApAQCAtODIwLDYgKzg3OSwzMCBAQAogCU5WTV9ERVZJQ0VfVFlQRV9PVFAsCiB9OwogCisvKgorICogVHdvIHR5cGVzIG9mIE9UUCBtZW1vcnkgYWNjZXNzIG1vZGVzCisgKiAgIElXTF9PVFBfQUNDRVNTX0FCU09MVVRFIC0gYWJzb2x1dGUgYWRkcmVzcyBtb2RlLAorICogCQkJICAgICAgICBiYXNlZCBvbiBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzc2luZworICogICBJV0xfT1RQX0FDQ0VTU19SRUxBVElWRSAtIHJlbGF0aXZlIGFkZHJlc3MgbW9kZSwKKyAqIAkJCSAgICAgICBiYXNlZCBvbiBsb2dpY2FsIG1lbW9yeSBhZGRyZXNzaW5nCisgKi8KK2VudW0gaXdsX2FjY2Vzc19tb2RlIHsKKwlJV0xfT1RQX0FDQ0VTU19BQlNPTFVURSwKKwlJV0xfT1RQX0FDQ0VTU19SRUxBVElWRSwKK307CisKKy8qKgorICogZW51bSBpd2xfcGFfdHlwZSAtIFBvd2VyIEFtcGxpZmllciB0eXBlCisgKiBASVdMX1BBX1NZU1RFTTogIGJhc2VkIG9uIHVDb2RlIGNvbmZpZ3VyYXRpb24KKyAqIEBJV0xfUEFfSFlCUklEOiB1c2UgYm90aCBJbnRlcm5hbCBhbmQgZXh0ZXJuYWwgUEEKKyAqIEBJV0xfUEFfSU5URVJOQUw6IHVzZSBJbnRlcm5hbCBvbmx5CisgKi8KK2VudW0gaXdsX3BhX3R5cGUgeworCUlXTF9QQV9TWVNURU0gPSAwLAorCUlXTF9QQV9IWUJSSUQgPSAxLAorCUlXTF9QQV9JTlRFUk5BTCA9IDIsCit9OworCiAvKiBpbnRlcnJ1cHQgc3RhdGlzdGljcyAqLwogc3RydWN0IGlzcl9zdGF0aXN0aWNzIHsKIAl1MzIgaHc7CkBAIC04MzYsNiArOTE5LDQ4IEBACiAJdTMyIHVuaGFuZGxlZDsKIH07CiAKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCisvKiBtYW5hZ2VtZW50IHN0YXRpc3RpY3MgKi8KK2VudW0gaXdsX21nbXRfc3RhdHMgeworCU1BTkFHRU1FTlRfQVNTT0NfUkVRID0gMCwKKwlNQU5BR0VNRU5UX0FTU09DX1JFU1AsCisJTUFOQUdFTUVOVF9SRUFTU09DX1JFUSwKKwlNQU5BR0VNRU5UX1JFQVNTT0NfUkVTUCwKKwlNQU5BR0VNRU5UX1BST0JFX1JFUSwKKwlNQU5BR0VNRU5UX1BST0JFX1JFU1AsCisJTUFOQUdFTUVOVF9CRUFDT04sCisJTUFOQUdFTUVOVF9BVElNLAorCU1BTkFHRU1FTlRfRElTQVNTT0MsCisJTUFOQUdFTUVOVF9BVVRILAorCU1BTkFHRU1FTlRfREVBVVRILAorCU1BTkFHRU1FTlRfQUNUSU9OLAorCU1BTkFHRU1FTlRfTUFYLAorfTsKKy8qIGNvbnRyb2wgc3RhdGlzdGljcyAqLworZW51bSBpd2xfY3RybF9zdGF0cyB7CisJQ09OVFJPTF9CQUNLX1JFUSA9ICAwLAorCUNPTlRST0xfQkFDSywKKwlDT05UUk9MX1BTUE9MTCwKKwlDT05UUk9MX1JUUywKKwlDT05UUk9MX0NUUywKKwlDT05UUk9MX0FDSywKKwlDT05UUk9MX0NGRU5ELAorCUNPTlRST0xfQ0ZFTkRBQ0ssCisJQ09OVFJPTF9NQVgsCit9OworCitzdHJ1Y3QgdHJhZmZpY19zdGF0cyB7CisJdTMyIG1nbXRbTUFOQUdFTUVOVF9NQVhdOworCXUzMiBjdHJsW0NPTlRST0xfTUFYXTsKKwl1MzIgZGF0YV9jbnQ7CisJdTY0IGRhdGFfYnl0ZXM7Cit9OworI2Vsc2UKK3N0cnVjdCB0cmFmZmljX3N0YXRzIHsKKwl1NjQgZGF0YV9ieXRlczsKK307CisjZW5kaWYKKwogI2RlZmluZSBJV0xfTUFYX05VTV9RVUVVRVMJMjAgLyogRklYTUU6IGRvIGR5bmFtaWMgYWxsb2NhdGlvbiAqLwogCiBzdHJ1Y3QgaXdsX3ByaXYgewpAQCAtOTgxLDE1ICsxMTA2LDE0IEBACiAJaW50IGxhc3Rfcnhfbm9pc2U7CS8qIEZyb20gYmVhY29uIHN0YXRpc3RpY3MgKi8KIAogCS8qIGNvdW50cyBtZ210LCBjdGwsIGFuZCBkYXRhIHBhY2tldHMgKi8KLQlzdHJ1Y3QgdHJhZmZpY19zdGF0cyB7Ci0JCXUzMiBjbnQ7Ci0JCXU2NCBieXRlczsKLQl9IHR4X3N0YXRzWzNdLCByeF9zdGF0c1szXTsKKwlzdHJ1Y3QgdHJhZmZpY19zdGF0cyB0eF9zdGF0czsKKwlzdHJ1Y3QgdHJhZmZpY19zdGF0cyByeF9zdGF0czsKIAogCS8qIGNvdW50cyBpbnRlcnJ1cHRzICovCiAJc3RydWN0IGlzcl9zdGF0aXN0aWNzIGlzcl9zdGF0czsKIAogCXN0cnVjdCBpd2xfcG93ZXJfbWdyIHBvd2VyX2RhdGE7CisJc3RydWN0IGl3bF90dF9tZ210IHRoZXJtYWxfdGhyb3R0bGU7CiAKIAlzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3Mgc3RhdGlzdGljczsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfc3RhdGlzdGljc190aW1lOwpAQCAtOTk3LDcgKzExMjEsNiBAQAogCS8qIGNvbnRleHQgaW5mb3JtYXRpb24gKi8KIAl1MTYgcmF0ZXNfbWFzazsKIAotCXUzMiBwb3dlcl9tb2RlOwogCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAl1MTYgcnRzX3RocmVzaG9sZDsKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CkBAIC0xMDQ3LDcgKzExNzAsNyBAQAogCXN0cnVjdCBpd2xfaHdfcGFyYW1zIGh3X3BhcmFtczsKIAogCS8qIElOVCBJQ1QgVGFibGUgKi8KLQl1MzIgKmljdF90Ymw7CisJX19sZTMyICppY3RfdGJsOwogCWRtYV9hZGRyX3QgaWN0X3RibF9kbWE7CiAJZG1hX2FkZHJfdCBhbGlnbmVkX2ljdF90YmxfZG1hOwogCWludCBpY3RfaW5kZXg7CkBAIC0xMDc2LDYgKzExOTksOSBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXBvcnRfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVxdWVzdF9zY2FuOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBiZWFjb25fdXBkYXRlOworCXN0cnVjdCB3b3JrX3N0cnVjdCB0dF93b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBjdF9lbnRlcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3RfZXhpdDsKIAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpcnFfdGFza2xldDsKIApAQCAtMTA4OSwxNiArMTIxNSwyMiBAQAogCiAJLyogVFggUG93ZXIgKi8KIAlzOCB0eF9wb3dlcl91c2VyX2xtdDsKLQlzOCB0eF9wb3dlcl9jaGFubmVsX2xtdDsKKwlzOCB0eF9wb3dlcl9kZXZpY2VfbG10OwogCiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCS8qIGRlYnVnZ2luZyBpbmZvICovCi0JdTMyIGRlYnVnX2xldmVsOworCXUzMiBkZWJ1Z19sZXZlbDsgLyogcGVyIGRldmljZSBkZWJ1Z2dpbmcgd2lsbCBvdmVycmlkZSBnbG9iYWwKKwkJCSAgICBpd2xfZGVidWdfbGV2ZWwgaWYgc2V0ICovCiAJdTMyIGZyYW1lY250X3RvX3VzOwogCWF0b21pY190IHJlc3RyaWN0X3JlZmNudDsKKwlib29sIGRpc2FibGVfaHQ0MDsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCiAJLyogZGVidWdmcyAqLworCXUxNiB0eF90cmFmZmljX2lkeDsKKwl1MTYgcnhfdHJhZmZpY19pZHg7CisJdTggKnR4X3RyYWZmaWM7CisJdTggKnJ4X3RyYWZmaWM7CiAJc3RydWN0IGl3bF9kZWJ1Z2ZzICpkYmdmczsKICNlbmRpZiAvKiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTICovCiAjZW5kaWYgLyogQ09ORklHX0lXTFdJRklfREVCVUcgKi8KQEAgLTExMzAsOCArMTI2MiwyNyBAQAogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIGNvbnN0IGNoYXIgKml3bF9nZXRfdHhfZmFpbF9yZWFzb24odTMyIHN0YXR1cyk7CisvKgorICogaXdsX2dldF9kZWJ1Z19sZXZlbDogUmV0dXJuIGFjdGl2ZSBkZWJ1ZyBsZXZlbCBmb3IgZGV2aWNlCisgKgorICogVXNpbmcgc3lzZnMgaXQgaXMgcG9zc2libGUgdG8gc2V0IHBlciBkZXZpY2UgZGVidWcgbGV2ZWwuIFRoaXMgZGVidWcKKyAqIGxldmVsIHdpbGwgYmUgdXNlZCBpZiBzZXQsIG90aGVyd2lzZSB0aGUgZ2xvYmFsIGRlYnVnIGxldmVsIHdoaWNoIGNhbiBiZQorICogc2V0IHZpYSBtb2R1bGUgcGFyYW1ldGVyIGlzIHVzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGl3bF9nZXRfZGVidWdfbGV2ZWwoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWlmIChwcml2LT5kZWJ1Z19sZXZlbCkKKwkJcmV0dXJuIHByaXYtPmRlYnVnX2xldmVsOworCWVsc2UKKwkJcmV0dXJuIGl3bF9kZWJ1Z19sZXZlbDsKK30KICNlbHNlCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKml3bF9nZXRfdHhfZmFpbF9yZWFzb24odTMyIHN0YXR1cykgeyByZXR1cm4gIiI7IH0KKworc3RhdGljIGlubGluZSB1MzIgaXdsX2dldF9kZWJ1Z19sZXZlbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIGl3bF9kZWJ1Z19sZXZlbDsKK30KICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMKaW5kZXggN2Q3NTU0YS4uM2QyYjkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMKQEAgLTEyNywxNCArMTI3LDg2IEBACiAJMTQ1LCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NQogfTsKIAotc3RhdGljIGNvbnN0IHU4IGl3bF9lZXByb21fYmFuZF82W10gPSB7ICAgICAgIC8qIDIuNCBGQVQgY2hhbm5lbCAqLworc3RhdGljIGNvbnN0IHU4IGl3bF9lZXByb21fYmFuZF82W10gPSB7ICAgICAgIC8qIDIuNCBodDQwIGNoYW5uZWwgKi8KIAkxLCAyLCAzLCA0LCA1LCA2LCA3CiB9OwogCi1zdGF0aWMgY29uc3QgdTggaXdsX2VlcHJvbV9iYW5kXzdbXSA9IHsgICAgICAgLyogNS4yIEZBVCBjaGFubmVsICovCitzdGF0aWMgY29uc3QgdTggaXdsX2VlcHJvbV9iYW5kXzdbXSA9IHsgICAgICAgLyogNS4yIGh0NDAgY2hhbm5lbCAqLwogCTM2LCA0NCwgNTIsIDYwLCAxMDAsIDEwOCwgMTE2LCAxMjQsIDEzMiwgMTQ5LCAxNTcKIH07CiAKKy8qKgorICogc3RydWN0IGl3bF90eHB3cl9zZWN0aW9uOiBlZXByb20gc2VjdGlvbiBpbmZvcm1hdGlvbgorICogQG9mZnNldDogaW5kaXJlY3QgYWRkcmVzcyBpbnRvIGVlcHJvbSBpbWFnZQorICogQGNvdW50OiBudW1iZXIgb2YgInN0cnVjdCBpd2xfZWVwcm9tX2VuaGFuY2VkX3R4cHdyIiBpbiB0aGlzIHNlY3Rpb24KKyAqIEBiYW5kOiBiYW5kIHR5cGUgZm9yIHRoZSBzZWN0aW9uCisgKiBAaXNfY29tbW9uIC0gdHJ1ZTogY29tbW9uIHNlY3Rpb24sIGZhbHNlOiBjaGFubmVsIHNlY3Rpb24KKyAqIEBpc19jY2sgLSB0cnVlOiBjY2sgc2VjdGlvbiwgZmFsc2U6IG5vdCBjY2sgc2VjdGlvbgorICogQGlzX2h0XzQwIC0gdHJ1ZTogYWxsIGNoYW5uZWwgaW4gdGhlIHNlY3Rpb24gYXJlIEhUNDAgY2hhbm5lbCwKKyAqIAkgICAgICAgZmFsc2U6IGxlZ2FjeSBvciBIVCAyMCBNSHoKKyAqCSAgICAgICBpZ25vcmUgaWYgaXQgaXMgY29tbW9uIHNlY3Rpb24KKyAqIEBpd2xfZWVwcm9tX3NlY3Rpb25fY2hhbm5lbDogY2hhbm5lbCBhcnJheSBpbiB0aGUgc2VjdGlvbiwKKyAqCSAgICAgICBpZ25vcmUgaWYgY29tbW9uIHNlY3Rpb24KKyAqLworc3RydWN0IGl3bF90eHB3cl9zZWN0aW9uIHsKKwl1MzIgb2Zmc2V0OworCXU4IGNvdW50OworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKwlib29sIGlzX2NvbW1vbjsKKwlib29sIGlzX2NjazsKKwlib29sIGlzX2h0NDA7CisJdTggaXdsX2VlcHJvbV9zZWN0aW9uX2NoYW5uZWxbRUVQUk9NX01BWF9UWFBPV0VSX1NFQ1RJT05fRUxFTUVOVFNdOworfTsKKworLyoqCisgKiBzZWN0aW9uIDEgLSAzIGFyZSByZWd1bGF0b3J5IHR4IHBvd2VyIGFwcGx5IHRvIGFsbCBjaGFubmVscyBiYXNlZCBvbgorICogICAgbW9kdWxhdGlvbjogQ0NLLCBPRkRNCisgKiAgICBCYW5kOiAyLjRHSHosIDUuMkdIegorICogc2VjdGlvbiA0IC0gMTAgYXJlIHJlZ3VsYXRvcnkgdHggcG93ZXIgYXBwbHkgdG8gc3BlY2lmaWVkIGNoYW5uZWxzCisgKiAgICBGb3IgZXhhbXBsZToKKyAqCTFMIC0gQ2hhbm5lbCAxIExlZ2FjeQorICoJMUhUIC0gQ2hhbm5lbCAxIEhUCisgKgkoMSwrMSkgLSBDaGFubmVsIDEgSFQ0MCAiX2Fib3ZlXyIKKyAqCisgKiBTZWN0aW9uIDE6IGFsbCBDQ0sgY2hhbm5lbHMKKyAqIFNlY3Rpb24gMjogYWxsIDIuNCBHSHogT0ZETSAoTGVnYWN5LCBIVCBhbmQgSFQ0MCkgY2hhbm5lbHMKKyAqIFNlY3Rpb24gMzogYWxsIDUuMiBHSHogT0ZETSAoTGVnYWN5LCBIVCBhbmQgSFQ0MCkgY2hhbm5lbHMKKyAqIFNlY3Rpb24gNDogMi40IEdIeiAyME1IeiBjaGFubmVsczogMUwsIDFIVCwgMkwsIDJIVCwgMTBMLCAxMEhULCAxMUwsIDExSFQKKyAqIFNlY3Rpb24gNTogMi40IEdIeiA0ME1IeiBjaGFubmVsczogKDEsKzEpICgyLCsxKSAoNiwrMSkgKDcsKzEpICg5LCsxKQorICogU2VjdGlvbiA2OiA1LjIgR0h6IDIwTUh6IGNoYW5uZWxzOiAzNkwsIDY0TCwgMTAwTCwgMzZIVCwgNjRIVCwgMTAwSFQKKyAqIFNlY3Rpb24gNzogNS4yIEdIeiA0ME1IeiBjaGFubmVsczogKDM2LCsxKSAoNjAsKzEpICgxMDAsKzEpCisgKiBTZWN0aW9uIDg6IDIuNCBHSHogY2hhbm5lbDogMTNMLCAxM0hUCisgKiBTZWN0aW9uIDk6IDIuNCBHSHogY2hhbm5lbDogMTQwTCwgMTQwSFQKKyAqIFNlY3Rpb24gMTA6IDIuNCBHSHogNDBNSHogY2hhbm5lbHM6ICgxMzIsKzEpICAoNDQsKzEpCisgKgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF90eHB3cl9zZWN0aW9uIGVuaGluZm9bXSA9IHsKKwl7IEVFUFJPTV9MQl9DQ0tfMjBfQ09NTU9OLCAxLCBJRUVFODAyMTFfQkFORF8yR0haLCB0cnVlLCB0cnVlLCBmYWxzZSB9LAorCXsgRUVQUk9NX0xCX09GRE1fQ09NTU9OLCAzLCBJRUVFODAyMTFfQkFORF8yR0haLCB0cnVlLCBmYWxzZSwgZmFsc2UgfSwKKwl7IEVFUFJPTV9IQl9PRkRNX0NPTU1PTiwgMywgSUVFRTgwMjExX0JBTkRfNUdIWiwgdHJ1ZSwgZmFsc2UsIGZhbHNlIH0sCisJeyBFRVBST01fTEJfT0ZETV8yMF9CQU5ELCA4LCBJRUVFODAyMTFfQkFORF8yR0haLAorCQlmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQl7MSwgMSwgMiwgMiwgMTAsIDEwLCAxMSwgMTEgfSB9LAorCXsgRUVQUk9NX0xCX09GRE1fSFQ0MF9CQU5ELCA1LCBJRUVFODAyMTFfQkFORF8yR0haLAorCQlmYWxzZSwgZmFsc2UsIHRydWUsCisJCXsgMSwgMiwgNiwgNywgOSB9IH0sCisJeyBFRVBST01fSEJfT0ZETV8yMF9CQU5ELCA2LCBJRUVFODAyMTFfQkFORF81R0haLAorCQlmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQl7IDM2LCA2NCwgMTAwLCAzNiwgNjQsIDEwMCB9IH0sCisJeyBFRVBST01fSEJfT0ZETV9IVDQwX0JBTkQsIDMsIElFRUU4MDIxMV9CQU5EXzVHSFosCisJCWZhbHNlLCBmYWxzZSwgdHJ1ZSwKKwkJeyAzNiwgNjAsIDEwMCB9IH0sCisJeyBFRVBST01fTEJfT0ZETV8yMF9DSEFOTkVMXzEzLCAyLCBJRUVFODAyMTFfQkFORF8yR0haLAorCQlmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQl7IDEzLCAxMyB9IH0sCisJeyBFRVBST01fSEJfT0ZETV8yMF9DSEFOTkVMXzE0MCwgMiwgSUVFRTgwMjExX0JBTkRfNUdIWiwKKwkJZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJeyAxNDAsIDE0MCB9IH0sCisJeyBFRVBST01fSEJfT0ZETV9IVDQwX0JBTkRfMSwgMiwgSUVFRTgwMjExX0JBTkRfNUdIWiwKKwkJZmFsc2UsIGZhbHNlLCB0cnVlLAorCQl7IDEzMiwgNDQgfSB9LAorfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEVFUFJPTSByZWxhdGVkIGZ1bmN0aW9ucwpAQCAtMTUyLDYgKzIyNCwxOSBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xjb3JlX2VlcHJvbV92ZXJpZnlfc2lnbmF0dXJlKTsKIAorc3RhdGljIHZvaWQgaXdsX3NldF9vdHBfYWNjZXNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgZW51bSBpd2xfYWNjZXNzX21vZGUgbW9kZSkKK3sKKwl1MzIgb3RwZ3A7CisKKwlvdHBncCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX09UUF9HUF9SRUcpOworCWlmIChtb2RlID09IElXTF9PVFBfQUNDRVNTX0FCU09MVVRFKQorCQlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9PVFBfR1BfUkVHLAorCQkJCUNTUl9PVFBfR1BfUkVHX09UUF9BQ0NFU1NfTU9ERSk7CisJZWxzZQorCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfT1RQX0dQX1JFRywKKwkJCQlDU1JfT1RQX0dQX1JFR19PVFBfQUNDRVNTX01PREUpOworfQorCiBzdGF0aWMgaW50IGl3bGNvcmVfZ2V0X252bV90eXBlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MzIgb3RwZ3A7CkBAIC0xNTksNiArMjQ0LDkgQEAKIAogCS8qIE9UUCBvbmx5IHZhbGlkIGZvciBDUC9QUCBhbmQgYWZ0ZXIgKi8KIAlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKKwljYXNlIENTUl9IV19SRVZfVFlQRV9OT05FOgorCQlJV0xfRVJSKHByaXYsICJVbmtub3duIGhhcmR3YXJlIHR5cGVcbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKIAljYXNlIENTUl9IV19SRVZfVFlQRV8zOTQ1OgogCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzQ5NjU6CiAJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTMwMDoKQEAgLTI0OSw2ICszMzcsMTI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBpd2xfcmVhZF9vdHBfd29yZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBhZGRyLCB1MTYgKmVlcHJvbV9kYXRhKQoreworCWludCByZXQgPSAwOworCXUzMiByOworCXUzMiBvdHBncDsKKworCV9pd2xfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX1JFRywKKwkJICAgICBDU1JfRUVQUk9NX1JFR19NU0tfQUREUiAmIChhZGRyIDw8IDEpKTsKKwlyZXQgPSBpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9FRVBST01fUkVHLAorCQkJCSAgQ1NSX0VFUFJPTV9SRUdfUkVBRF9WQUxJRF9NU0ssCisJCQkJICBJV0xfRUVQUk9NX0FDQ0VTU19USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlJV0xfRVJSKHByaXYsICJUaW1lIG91dCByZWFkaW5nIE9UUFslZF1cbiIsIGFkZHIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKKwkvKiBjaGVjayBmb3IgRUNDIGVycm9yczogKi8KKwlvdHBncCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX09UUF9HUF9SRUcpOworCWlmIChvdHBncCAmIENTUl9PVFBfR1BfUkVHX0VDQ19VTkNPUlJfU1RBVFVTX01TSykgeworCQkvKiBzdG9wIGluIHRoaXMgY2FzZSAqLworCQkvKiBzZXQgdGhlIHVuY29ycmVjdGFibGUgT1RQIEVDQyBiaXQgZm9yIGFja25vd2xlZGdlbWVudCAqLworCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfT1RQX0dQX1JFRywKKwkJCUNTUl9PVFBfR1BfUkVHX0VDQ19VTkNPUlJfU1RBVFVTX01TSyk7CisJCUlXTF9FUlIocHJpdiwgIlVuY29ycmVjdGFibGUgT1RQIEVDQyBlcnJvciwgYWJvcnQgT1RQIHJlYWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKG90cGdwICYgQ1NSX09UUF9HUF9SRUdfRUNDX0NPUlJfU1RBVFVTX01TSykgeworCQkvKiBjb250aW51ZSBpbiB0aGlzIGNhc2UgKi8KKwkJLyogc2V0IHRoZSBjb3JyZWN0YWJsZSBPVFAgRUNDIGJpdCBmb3IgYWNrbm93bGVkZ2VtZW50ICovCisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9PVFBfR1BfUkVHLAorCQkJCUNTUl9PVFBfR1BfUkVHX0VDQ19DT1JSX1NUQVRVU19NU0spOworCQlJV0xfRVJSKHByaXYsICJDb3JyZWN0YWJsZSBPVFAgRUNDIGVycm9yLCBjb250aW51ZSByZWFkXG4iKTsKKwl9CisJKmVlcHJvbV9kYXRhID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KShyID4+IDE2KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpd2xfaXNfb3RwX2VtcHR5OiBjaGVjayBmb3IgZW1wdHkgT1RQCisgKi8KK3N0YXRpYyBib29sIGl3bF9pc19vdHBfZW1wdHkoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXUxNiBuZXh0X2xpbmtfYWRkciA9IDAsIGxpbmtfdmFsdWU7CisJYm9vbCBpc19lbXB0eSA9IGZhbHNlOworCisJLyogbG9jYXRlIHRoZSBiZWdpbm5pbmcgb2YgT1RQIGxpbmsgbGlzdCAqLworCWlmICghaXdsX3JlYWRfb3RwX3dvcmQocHJpdiwgbmV4dF9saW5rX2FkZHIsICZsaW5rX3ZhbHVlKSkgeworCQlpZiAoIWxpbmtfdmFsdWUpIHsKKwkJCUlXTF9FUlIocHJpdiwgIk9UUCBpcyBlbXB0eVxuIik7CisJCQlpc19lbXB0eSA9IHRydWU7CisJCX0KKwl9IGVsc2UgeworCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gcmVhZCBmaXJzdCBibG9jayBvZiBPVFAgbGlzdC5cbiIpOworCQlpc19lbXB0eSA9IHRydWU7CisJfQorCisJcmV0dXJuIGlzX2VtcHR5OworfQorCisKKy8qCisgKiBpd2xfZmluZF9vdHBfaW1hZ2U6IGZpbmQgRUVQUk9NIGltYWdlIGluIE9UUAorICogICBmaW5kaW5nIHRoZSBPVFAgYmxvY2sgdGhhdCBjb250YWlucyB0aGUgRUVQUk9NIGltYWdlLgorICogICB0aGUgbGFzdCB2YWxpZCBibG9jayBvbiB0aGUgbGluayBsaXN0ICh0aGUgYmxvY2sgX2JlZm9yZV8gdGhlIGxhc3QgYmxvY2spCisgKiAgIGlzIHRoZSBibG9jayB3ZSBzaG91bGQgcmVhZCBhbmQgdXNlZCB0byBjb25maWd1cmUgdGhlIGRldmljZS4KKyAqICAgSWYgYWxsIHRoZSBhdmFpbGFibGUgT1RQIGJsb2NrcyBhcmUgZnVsbCwgdGhlIGxhc3QgYmxvY2sgd2lsbCBiZSB0aGUgYmxvY2sKKyAqICAgd2Ugc2hvdWxkIHJlYWQgYW5kIHVzZWQgdG8gY29uZmlndXJlIHRoZSBkZXZpY2UuCisgKiAgIG9ubHkgcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiBpZiBzaGFkb3cgUkFNIGlzIGRpc2FibGVkCisgKi8KK3N0YXRpYyBpbnQgaXdsX2ZpbmRfb3RwX2ltYWdlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJdTE2ICp2YWxpZGJsb2NrYWRkcikKK3sKKwl1MTYgbmV4dF9saW5rX2FkZHIgPSAwLCBsaW5rX3ZhbHVlID0gMCwgdmFsaWRfYWRkcjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgdXNlZGJsb2NrcyA9IDA7CisKKwkvKiBzZXQgYWRkcmVzc2luZyBtb2RlIHRvIGFic29sdXRlIHRvIHRyYXZlcnNlIHRoZSBsaW5rIGxpc3QgKi8KKwlpd2xfc2V0X290cF9hY2Nlc3MocHJpdiwgSVdMX09UUF9BQ0NFU1NfQUJTT0xVVEUpOworCisJLyogY2hlY2tpbmcgZm9yIGVtcHR5IE9UUCBvciBlcnJvciAqLworCWlmIChpd2xfaXNfb3RwX2VtcHR5KHByaXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogc3RhcnQgdHJhdmVyc2UgbGluayBsaXN0CisJICogdW50aWwgcmVhY2ggdGhlIG1heCBudW1iZXIgb2YgT1RQIGJsb2NrcworCSAqIGRpZmZlcmVudCBkZXZpY2VzIGhhdmUgZGlmZmVyZW50IG51bWJlciBvZiBPVFAgYmxvY2tzCisJICovCisJZG8geworCQkvKiBzYXZlIGN1cnJlbnQgdmFsaWQgYmxvY2sgYWRkcmVzcworCQkgKiBjaGVjayBmb3IgbW9yZSBibG9jayBvbiB0aGUgbGluayBsaXN0CisJCSAqLworCQl2YWxpZF9hZGRyID0gbmV4dF9saW5rX2FkZHI7CisJCW5leHRfbGlua19hZGRyID0gbGlua192YWx1ZTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk9UUCBibG9ja3MgJWQgYWRkciAweCV4XG4iLAorCQkJICAgICAgIHVzZWRibG9ja3MsIG5leHRfbGlua19hZGRyKTsKKwkJaWYgKGl3bF9yZWFkX290cF93b3JkKHByaXYsIG5leHRfbGlua19hZGRyLCAmbGlua192YWx1ZSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFsaW5rX3ZhbHVlKSB7CisJCQkvKgorCQkJICogcmVhY2ggdGhlIGVuZCBvZiBsaW5rIGxpc3QsCisJCQkgKiBzZXQgYWRkcmVzcyBwb2ludCB0byB0aGUgc3RhcnRpbmcgYWRkcmVzcworCQkJICogb2YgdGhlIGltYWdlCisJCQkgKi8KKwkJCWdvdG8gZG9uZTsKKwkJfQorCQkvKiBtb3JlIGluIHRoZSBsaW5rIGxpc3QsIGNvbnRpbnVlICovCisJCXVzZWRibG9ja3MrKzsKKwl9IHdoaWxlICh1c2VkYmxvY2tzIDwgcHJpdi0+Y2ZnLT5tYXhfbGxfaXRlbXMpOworCS8qIE9UUCBmdWxsLCB1c2UgbGFzdCBibG9jayAqLworCUlXTF9ERUJVR19JTkZPKHByaXYsICJPVFAgaXMgZnVsbCwgdXNlIGxhc3QgYmxvY2tcbiIpOworZG9uZToKKwkqdmFsaWRibG9ja2FkZHIgPSB2YWxpZF9hZGRyOworCS8qIHNraXAgZmlyc3QgMiBieXRlcyAobGluayBsaXN0IHBvaW50ZXIpICovCisJKnZhbGlkYmxvY2thZGRyICs9IDI7CisJcmV0dXJuIHJldDsKK30KKwogLyoqCiAgKiBpd2xfZWVwcm9tX2luaXQgLSByZWFkIEVFUFJPTSBjb250ZW50cwogICoKQEAgLTI2MywxNCArNDY5LDE0IEBACiAJaW50IHN6OwogCWludCByZXQ7CiAJdTE2IGFkZHI7Ci0JdTMyIG90cGdwOworCXUxNiB2YWxpZGJsb2NrYWRkciA9IDA7CisJdTE2IGNhY2hlX2FkZHIgPSAwOwogCiAJcHJpdi0+bnZtX2RldmljZV90eXBlID0gaXdsY29yZV9nZXRfbnZtX3R5cGUocHJpdik7Ci0KKwlpZiAocHJpdi0+bnZtX2RldmljZV90eXBlID09IC1FTk9FTlQpCisJCXJldHVybiAtRU5PRU5UOwogCS8qIGFsbG9jYXRlIGVlcHJvbSAqLwotCWlmIChwcml2LT5udm1fZGV2aWNlX3R5cGUgPT0gTlZNX0RFVklDRV9UWVBFX09UUCkKLQkJcHJpdi0+Y2ZnLT5lZXByb21fc2l6ZSA9Ci0JCQlPVFBfQkxPQ0tfU0laRSAqIE9UUF9MT1dFUl9CTE9DS1NfVE9UQUw7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk5WTSBzaXplID0gJWRcbiIsIHByaXYtPmNmZy0+ZWVwcm9tX3NpemUpOwogCXN6ID0gcHJpdi0+Y2ZnLT5lZXByb21fc2l6ZTsKIAlwcml2LT5lZXByb20gPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYtPmVlcHJvbSkgewpAQCAtMjk4LDQ2ICs1MDQsMzEgQEAKIAkJaWYgKHJldCkgewogCQkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgT1RQIGFjY2Vzcy5cbiIpOwogCQkJcmV0ID0gLUVOT0VOVDsKLQkJCWdvdG8gZXJyOworCQkJZ290byBkb25lOwogCQl9CiAJCV9pd2xfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX0dQLAogCQkJICAgICBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApICYKIAkJCSAgICAgfkNTUl9FRVBST01fR1BfSUZfT1dORVJfTVNLKTsKLQkJLyogY2xlYXIgKi8KLQkJX2l3bF93cml0ZTMyKHByaXYsIENTUl9PVFBfR1BfUkVHLAotCQkJICAgICBpd2xfcmVhZDMyKHByaXYsIENTUl9PVFBfR1BfUkVHKSB8CisKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX09UUF9HUF9SRUcsCiAJCQkgICAgIENTUl9PVFBfR1BfUkVHX0VDQ19DT1JSX1NUQVRVU19NU0sgfAogCQkJICAgICBDU1JfT1RQX0dQX1JFR19FQ0NfVU5DT1JSX1NUQVRVU19NU0spOwotCi0JCWZvciAoYWRkciA9IDA7IGFkZHIgPCBzejsgYWRkciArPSBzaXplb2YodTE2KSkgewotCQkJdTMyIHI7Ci0KLQkJCV9pd2xfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX1JFRywKLQkJCQkgICAgIENTUl9FRVBST01fUkVHX01TS19BRERSICYgKGFkZHIgPDwgMSkpOwotCi0JCQlyZXQgPSBpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9FRVBST01fUkVHLAotCQkJCQkJICBDU1JfRUVQUk9NX1JFR19SRUFEX1ZBTElEX01TSywKLQkJCQkJCSAgSVdMX0VFUFJPTV9BQ0NFU1NfVElNRU9VVCk7Ci0JCQlpZiAocmV0IDwgMCkgewotCQkJCUlXTF9FUlIocHJpdiwgIlRpbWUgb3V0IHJlYWRpbmcgT1RQWyVkXVxuIiwgYWRkcik7CisJCS8qIHRyYXZlcnNpbmcgdGhlIGxpbmtlZCBsaXN0IGlmIG5vIHNoYWRvdyByYW0gc3VwcG9ydGVkICovCisJCWlmICghcHJpdi0+Y2ZnLT5zaGFkb3dfcmFtX3N1cHBvcnQpIHsKKwkJCWlmIChpd2xfZmluZF9vdHBfaW1hZ2UocHJpdiwgJnZhbGlkYmxvY2thZGRyKSkgeworCQkJCXJldCA9IC1FTk9FTlQ7CiAJCQkJZ290byBkb25lOwogCQkJfQotCQkJciA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBDU1JfRUVQUk9NX1JFRyk7Ci0JCQkvKiBjaGVjayBmb3IgRUNDIGVycm9yczogKi8KLQkJCW90cGdwID0gaXdsX3JlYWQzMihwcml2LCBDU1JfT1RQX0dQX1JFRyk7Ci0JCQlpZiAob3RwZ3AgJiBDU1JfT1RQX0dQX1JFR19FQ0NfVU5DT1JSX1NUQVRVU19NU0spIHsKLQkJCQkvKiBzdG9wIGluIHRoaXMgY2FzZSAqLwotCQkJCUlXTF9FUlIocHJpdiwgIlVuY29ycmVjdGFibGUgT1RQIEVDQyBlcnJvciwgQWJvcnQgT1RQIHJlYWRcbiIpOworCQl9CisJCWZvciAoYWRkciA9IHZhbGlkYmxvY2thZGRyOyBhZGRyIDwgdmFsaWRibG9ja2FkZHIgKyBzejsKKwkJICAgICBhZGRyICs9IHNpemVvZih1MTYpKSB7CisJCQl1MTYgZWVwcm9tX2RhdGE7CisKKwkJCXJldCA9IGl3bF9yZWFkX290cF93b3JkKHByaXYsIGFkZHIsICZlZXByb21fZGF0YSk7CisJCQlpZiAocmV0KQogCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJCWlmIChvdHBncCAmIENTUl9PVFBfR1BfUkVHX0VDQ19DT1JSX1NUQVRVU19NU0spIHsKLQkJCQkvKiBjb250aW51ZSBpbiB0aGlzIGNhc2UgKi8KLQkJCQlfaXdsX3dyaXRlMzIocHJpdiwgQ1NSX09UUF9HUF9SRUcsCi0JCQkJCSAgICAgaXdsX3JlYWQzMihwcml2LCBDU1JfT1RQX0dQX1JFRykgfAotCQkJCQkgICAgIENTUl9PVFBfR1BfUkVHX0VDQ19DT1JSX1NUQVRVU19NU0spOwotCQkJCUlXTF9FUlIocHJpdiwgIkNvcnJlY3RhYmxlIE9UUCBFQ0MgZXJyb3IsIGNvbnRpbnVlIHJlYWRcbiIpOwotCQkJfQotCQkJZVthZGRyIC8gMl0gPSBsZTE2X3RvX2NwdSgoX19mb3JjZSBfX2xlMTYpKHIgPj4gMTYpKTsKKwkJCWVbY2FjaGVfYWRkciAvIDJdID0gZWVwcm9tX2RhdGE7CisJCQljYWNoZV9hZGRyICs9IHNpemVvZih1MTYpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogZWVwcm9tIGlzIGFuIGFycmF5IG9mIDE2Yml0IHZhbHVlcyAqLwpAQCAtNDU4LDEzICs2NDksMTMgQEAKIAkJCQlpd2xfZWVwcm9tX3F1ZXJ5X2FkZHIocHJpdiwgb2Zmc2V0KTsKIAkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bF9lZXByb21fYmFuZF81OwogCQlicmVhazsKLQljYXNlIDY6CQkvKiAyLjRHSHogRkFUIGNoYW5uZWxzICovCisJY2FzZSA2OgkJLyogMi40R0h6IGh0NDAgY2hhbm5lbHMgKi8KIAkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzYpOwogCQkqZWVwcm9tX2NoX2luZm8gPSAoc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCAqKQogCQkJCWl3bF9lZXByb21fcXVlcnlfYWRkcihwcml2LCBvZmZzZXQpOwogCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsX2VlcHJvbV9iYW5kXzY7CiAJCWJyZWFrOwotCWNhc2UgNzoJCS8qIDUgR0h6IEZBVCBjaGFubmVscyAqLworCWNhc2UgNzoJCS8qIDUgR0h6IGh0NDAgY2hhbm5lbHMgKi8KIAkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzcpOwogCQkqZWVwcm9tX2NoX2luZm8gPSAoc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCAqKQogCQkJCWl3bF9lZXByb21fcXVlcnlfYWRkcihwcml2LCBvZmZzZXQpOwpAQCAtNDgwLDE0ICs2NzEsMTQgQEAKIAkJCSAgICA/ICMgeCAiICIgOiAiIikKIAogLyoqCi0gKiBpd2xfc2V0X2ZhdF9jaGFuX2luZm8gLSBDb3B5IGZhdCBjaGFubmVsIGluZm8gaW50byBkcml2ZXIncyBwcml2LgorICogaXdsX21vZF9odDQwX2NoYW5faW5mbyAtIENvcHkgaHQ0MCBjaGFubmVsIGluZm8gaW50byBkcml2ZXIncyBwcml2LgogICoKICAqIERvZXMgbm90IHNldCB1cCBhIGNvbW1hbmQsIG9yIHRvdWNoIGhhcmR3YXJlLgogICovCi1zdGF0aWMgaW50IGl3bF9zZXRfZmF0X2NoYW5faW5mbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCitzdGF0aWMgaW50IGl3bF9tb2RfaHQ0MF9jaGFuX2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCB1MTYgY2hhbm5lbCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBpd2xfZWVwcm9tX2NoYW5uZWwgKmVlcHJvbV9jaCwKLQkJCSAgICAgIHU4IGZhdF9leHRlbnNpb25fY2hhbm5lbCkKKwkJCSAgICAgIHU4IGNsZWFyX2h0NDBfZXh0ZW5zaW9uX2NoYW5uZWwpCiB7CiAJc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAKQEAgLTQ5Nyw3ICs2ODgsNyBAQAogCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkKIAkJcmV0dXJuIC0xOwogCi0JSVdMX0RFQlVHX0lORk8ocHJpdiwgIkZBVCBDaC4gJWQgWyVzR0h6XSAlcyVzJXMlcyVzKDB4JTAyeCAlZGRCbSk6IgorCUlXTF9ERUJVR19JTkZPKHByaXYsICJIVDQwIENoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMoMHglMDJ4ICVkZEJtKToiCiAJCQkiIEFkLUhvYyAlc3N1cHBvcnRlZFxuIiwKIAkJCWNoX2luZm8tPmNoYW5uZWwsCiAJCQlpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/CkBAIC01MTMsMTcgKzcwNCwxODkgQEAKIAkJCSAmJiAhKGVlcHJvbV9jaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9SQURBUikpID8KIAkJCSIiIDogIm5vdCAiKTsKIAotCWNoX2luZm8tPmZhdF9lZXByb20gPSAqZWVwcm9tX2NoOwotCWNoX2luZm8tPmZhdF9tYXhfcG93ZXJfYXZnID0gZWVwcm9tX2NoLT5tYXhfcG93ZXJfYXZnOwotCWNoX2luZm8tPmZhdF9jdXJyX3R4cG93ID0gZWVwcm9tX2NoLT5tYXhfcG93ZXJfYXZnOwotCWNoX2luZm8tPmZhdF9taW5fcG93ZXIgPSAwOwotCWNoX2luZm8tPmZhdF9zY2FuX3Bvd2VyID0gZWVwcm9tX2NoLT5tYXhfcG93ZXJfYXZnOwotCWNoX2luZm8tPmZhdF9mbGFncyA9IGVlcHJvbV9jaC0+ZmxhZ3M7Ci0JY2hfaW5mby0+ZmF0X2V4dGVuc2lvbl9jaGFubmVsID0gZmF0X2V4dGVuc2lvbl9jaGFubmVsOworCWNoX2luZm8tPmh0NDBfZWVwcm9tID0gKmVlcHJvbV9jaDsKKwljaF9pbmZvLT5odDQwX21heF9wb3dlcl9hdmcgPSBlZXByb21fY2gtPm1heF9wb3dlcl9hdmc7CisJY2hfaW5mby0+aHQ0MF9jdXJyX3R4cG93ID0gZWVwcm9tX2NoLT5tYXhfcG93ZXJfYXZnOworCWNoX2luZm8tPmh0NDBfbWluX3Bvd2VyID0gMDsKKwljaF9pbmZvLT5odDQwX3NjYW5fcG93ZXIgPSBlZXByb21fY2gtPm1heF9wb3dlcl9hdmc7CisJY2hfaW5mby0+aHQ0MF9mbGFncyA9IGVlcHJvbV9jaC0+ZmxhZ3M7CisJY2hfaW5mby0+aHQ0MF9leHRlbnNpb25fY2hhbm5lbCAmPSB+Y2xlYXJfaHQ0MF9leHRlbnNpb25fY2hhbm5lbDsKIAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGl3bF9nZXRfbWF4X3R4cG93ZXJfYXZnIC0gZ2V0IHRoZSBoaWdoZXN0IHR4IHBvd2VyIGZyb20gYWxsIGNoYWlucy4KKyAqICAgICBmaW5kIHRoZSBoaWdoZXN0IHR4IHBvd2VyIGZyb20gYWxsIGNoYWlucyBmb3IgdGhlIGNoYW5uZWwKKyAqLworc3RhdGljIHM4IGl3bF9nZXRfbWF4X3R4cG93ZXJfYXZnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJc3RydWN0IGl3bF9lZXByb21fZW5oYW5jZWRfdHhwd3IgKmVuaGFuY2VkX3R4cG93ZXIsIGludCBlbGVtZW50KQoreworCXM4IG1heF90eHBvd2VyX2F2ZyA9IDA7IC8qIChkQm0pICovCisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiJWQgLSAiCisJCQkiY2hhaW5fYTogJWQgZEIgY2hhaW5fYjogJWQgZEIgIgorCQkJImNoYWluX2M6ICVkIGRCIG1pbW8yOiAlZCBkQiBtaW1vMzogJWQgZEJcbiIsCisJCQllbGVtZW50LAorCQkJZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5jaGFpbl9hX21heCA+PiAxLAorCQkJZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5jaGFpbl9iX21heCA+PiAxLAorCQkJZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5jaGFpbl9jX21heCA+PiAxLAorCQkJZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5taW1vMl9tYXggPj4gMSwKKwkJCWVuaGFuY2VkX3R4cG93ZXJbZWxlbWVudF0ubWltbzNfbWF4ID4+IDEpOworCS8qIFRha2UgdGhlIGhpZ2hlc3QgdHggcG93ZXIgZnJvbSBhbnkgdmFsaWQgY2hhaW5zICovCisJaWYgKChwcml2LT5jZmctPnZhbGlkX3R4X2FudCAmIEFOVF9BKSAmJgorCSAgICAoZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5jaGFpbl9hX21heCA+IG1heF90eHBvd2VyX2F2ZykpCisJCW1heF90eHBvd2VyX2F2ZyA9IGVuaGFuY2VkX3R4cG93ZXJbZWxlbWVudF0uY2hhaW5fYV9tYXg7CisJaWYgKChwcml2LT5jZmctPnZhbGlkX3R4X2FudCAmIEFOVF9CKSAmJgorCSAgICAoZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5jaGFpbl9iX21heCA+IG1heF90eHBvd2VyX2F2ZykpCisJCW1heF90eHBvd2VyX2F2ZyA9IGVuaGFuY2VkX3R4cG93ZXJbZWxlbWVudF0uY2hhaW5fYl9tYXg7CisJaWYgKChwcml2LT5jZmctPnZhbGlkX3R4X2FudCAmIEFOVF9DKSAmJgorCSAgICAoZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5jaGFpbl9jX21heCA+IG1heF90eHBvd2VyX2F2ZykpCisJCW1heF90eHBvd2VyX2F2ZyA9IGVuaGFuY2VkX3R4cG93ZXJbZWxlbWVudF0uY2hhaW5fY19tYXg7CisJaWYgKCgocHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQgPT0gQU5UX0FCKSB8CisJICAgIChwcml2LT5jZmctPnZhbGlkX3R4X2FudCA9PSBBTlRfQkMpIHwKKwkgICAgKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ID09IEFOVF9BQykpICYmCisJICAgIChlbmhhbmNlZF90eHBvd2VyW2VsZW1lbnRdLm1pbW8yX21heCA+IG1heF90eHBvd2VyX2F2ZykpCisJCW1heF90eHBvd2VyX2F2ZyA9ICBlbmhhbmNlZF90eHBvd2VyW2VsZW1lbnRdLm1pbW8yX21heDsKKwlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ID09IEFOVF9BQkMpICYmCisJICAgIChlbmhhbmNlZF90eHBvd2VyW2VsZW1lbnRdLm1pbW8zX21heCA+IG1heF90eHBvd2VyX2F2ZykpCisJCW1heF90eHBvd2VyX2F2ZyA9IGVuaGFuY2VkX3R4cG93ZXJbZWxlbWVudF0ubWltbzNfbWF4OworCisJLyogbWF4LiB0eCBwb3dlciBpbiBFRVBST00gaXMgaW4gMS8yIGRCbSBmb3JtYXQKKwkgKiBjb252ZXJ0IGZyb20gMS8yIGRCbSB0byBkQm0KKwkgKi8KKwlyZXR1cm4gbWF4X3R4cG93ZXJfYXZnID4+IDE7Cit9CisKKy8qKgorICogaXdsX3VwZGF0ZV9jb21tb25fdHhwb3dlcjogdXBkYXRlIGNoYW5uZWwgdHggcG93ZXIKKyAqICAgICB1cGRhdGUgdHggcG93ZXIgcGVyIGJhbmQgYmFzZWQgb24gRUVQUk9NIGVuaGFuY2VkIHR4IHBvd2VyIGluZm8uCisgKi8KK3N0YXRpYyBzOCBpd2xfdXBkYXRlX2NvbW1vbl90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJc3RydWN0IGl3bF9lZXByb21fZW5oYW5jZWRfdHhwd3IgKmVuaGFuY2VkX3R4cG93ZXIsCisJCWludCBzZWN0aW9uLCBpbnQgZWxlbWVudCkKK3sKKwlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKKwlpbnQgY2g7CisJYm9vbCBpc19odDQwID0gZmFsc2U7CisJczggbWF4X3R4cG93ZXJfYXZnOyAvKiAoZEJtKSAqLworCisJLyogaXQgaXMgY29tbW9uIHNlY3Rpb24sIGNvbnRhaW4gYWxsIHR5cGUgKExlZ2FjeSwgSFQgYW5kIEhUNDApCisJICogYmFzZWQgb24gdGhlIGVsZW1lbnQgaW4gdGhlIHNlY3Rpb24gdG8gZGV0ZXJtaW5lCisJICogaXMgaXQgSFQgNDAgb3Igbm90CisJICovCisJaWYgKGVsZW1lbnQgPT0gRUVQUk9NX1RYUE9XRVJfQ09NTU9OX0hUNDBfSU5ERVgpCisJCWlzX2h0NDAgPSB0cnVlOworCW1heF90eHBvd2VyX2F2ZyA9CisJCWl3bF9nZXRfbWF4X3R4cG93ZXJfYXZnKHByaXYsIGVuaGFuY2VkX3R4cG93ZXIsIGVsZW1lbnQpOworCWNoX2luZm8gPSBwcml2LT5jaGFubmVsX2luZm87CisKKwlmb3IgKGNoID0gMDsgY2ggPCBwcml2LT5jaGFubmVsX2NvdW50OyBjaCsrKSB7CisJCS8qIGZpbmQgbWF0Y2hpbmcgYmFuZCBhbmQgdXBkYXRlIHR4IHBvd2VyIGlmIG5lZWRlZCAqLworCQlpZiAoKGNoX2luZm8tPmJhbmQgPT0gZW5oaW5mb1tzZWN0aW9uXS5iYW5kKSAmJgorCQkgICAgKGNoX2luZm8tPm1heF9wb3dlcl9hdmcgPCBtYXhfdHhwb3dlcl9hdmcpICYmICghaXNfaHQ0MCkpIHsKKwkJCS8qIFVwZGF0ZSByZWd1bGF0b3J5LWJhc2VkIHJ1bi10aW1lIGRhdGEgKi8KKwkJCWNoX2luZm8tPm1heF9wb3dlcl9hdmcgPSBjaF9pbmZvLT5jdXJyX3R4cG93ID0KKwkJCSAgICBtYXhfdHhwb3dlcl9hdmc7CisJCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gbWF4X3R4cG93ZXJfYXZnOworCQl9CisJCWlmICgoY2hfaW5mby0+YmFuZCA9PSBlbmhpbmZvW3NlY3Rpb25dLmJhbmQpICYmIGlzX2h0NDAgJiYKKwkJICAgIGNoX2luZm8tPmh0NDBfbWF4X3Bvd2VyX2F2ZyAmJgorCQkgICAgKGNoX2luZm8tPmh0NDBfbWF4X3Bvd2VyX2F2ZyA8IG1heF90eHBvd2VyX2F2ZykpIHsKKwkJCS8qIFVwZGF0ZSByZWd1bGF0b3J5LWJhc2VkIHJ1bi10aW1lIGRhdGEgKi8KKwkJCWNoX2luZm8tPmh0NDBfbWF4X3Bvd2VyX2F2ZyA9IG1heF90eHBvd2VyX2F2ZzsKKwkJCWNoX2luZm8tPmh0NDBfY3Vycl90eHBvdyA9IG1heF90eHBvd2VyX2F2ZzsKKwkJCWNoX2luZm8tPmh0NDBfc2Nhbl9wb3dlciA9IG1heF90eHBvd2VyX2F2ZzsKKwkJfQorCQljaF9pbmZvKys7CisJfQorCXJldHVybiBtYXhfdHhwb3dlcl9hdmc7Cit9CisKKy8qKgorICogaXdsX3VwZGF0ZV9jaGFubmVsX3R4cG93ZXI6IHVwZGF0ZSBjaGFubmVsIHR4IHBvd2VyCisgKiAgICAgIHVwZGF0ZSBjaGFubmVsIHR4IHBvd2VyIGJhc2VkIG9uIEVFUFJPTSBlbmhhbmNlZCB0eCBwb3dlciBpbmZvLgorICovCitzdGF0aWMgczggaXdsX3VwZGF0ZV9jaGFubmVsX3R4cG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQlzdHJ1Y3QgaXdsX2VlcHJvbV9lbmhhbmNlZF90eHB3ciAqZW5oYW5jZWRfdHhwb3dlciwKKwkJaW50IHNlY3Rpb24sIGludCBlbGVtZW50KQoreworCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOworCWludCBjaDsKKwl1OCBjaGFubmVsOworCXM4IG1heF90eHBvd2VyX2F2ZzsgLyogKGRCbSkgKi8KKworCWNoYW5uZWwgPSBlbmhpbmZvW3NlY3Rpb25dLml3bF9lZXByb21fc2VjdGlvbl9jaGFubmVsW2VsZW1lbnRdOworCW1heF90eHBvd2VyX2F2ZyA9CisJCWl3bF9nZXRfbWF4X3R4cG93ZXJfYXZnKHByaXYsIGVuaGFuY2VkX3R4cG93ZXIsIGVsZW1lbnQpOworCisJY2hfaW5mbyA9IHByaXYtPmNoYW5uZWxfaW5mbzsKKwlmb3IgKGNoID0gMDsgY2ggPCBwcml2LT5jaGFubmVsX2NvdW50OyBjaCsrKSB7CisJCS8qIGZpbmQgbWF0Y2hpbmcgY2hhbm5lbCBhbmQgdXBkYXRlIHR4IHBvd2VyIGlmIG5lZWRlZCAqLworCQlpZiAoY2hfaW5mby0+Y2hhbm5lbCA9PSBjaGFubmVsKSB7CisJCQlpZiAoKGNoX2luZm8tPm1heF9wb3dlcl9hdmcgPCBtYXhfdHhwb3dlcl9hdmcpICYmCisJCQkgICAgKCFlbmhpbmZvW3NlY3Rpb25dLmlzX2h0NDApKSB7CisJCQkJLyogVXBkYXRlIHJlZ3VsYXRvcnktYmFzZWQgcnVuLXRpbWUgZGF0YSAqLworCQkJCWNoX2luZm8tPm1heF9wb3dlcl9hdmcgPSBtYXhfdHhwb3dlcl9hdmc7CisJCQkJY2hfaW5mby0+Y3Vycl90eHBvdyA9IG1heF90eHBvd2VyX2F2ZzsKKwkJCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gbWF4X3R4cG93ZXJfYXZnOworCQkJfQorCQkJaWYgKChlbmhpbmZvW3NlY3Rpb25dLmlzX2h0NDApICYmCisJCQkgICAgKGNoX2luZm8tPmh0NDBfbWF4X3Bvd2VyX2F2ZykgJiYKKwkJCSAgICAoY2hfaW5mby0+aHQ0MF9tYXhfcG93ZXJfYXZnIDwgbWF4X3R4cG93ZXJfYXZnKSkgeworCQkJCS8qIFVwZGF0ZSByZWd1bGF0b3J5LWJhc2VkIHJ1bi10aW1lIGRhdGEgKi8KKwkJCQljaF9pbmZvLT5odDQwX21heF9wb3dlcl9hdmcgPSBtYXhfdHhwb3dlcl9hdmc7CisJCQkJY2hfaW5mby0+aHQ0MF9jdXJyX3R4cG93ID0gbWF4X3R4cG93ZXJfYXZnOworCQkJCWNoX2luZm8tPmh0NDBfc2Nhbl9wb3dlciA9IG1heF90eHBvd2VyX2F2ZzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWNoX2luZm8rKzsKKwl9CisJcmV0dXJuIG1heF90eHBvd2VyX2F2ZzsKK30KKworLyoqCisgKiBpd2xjb3JlX2VlcHJvbV9lbmhhbmNlZF90eHBvd2VyOiBwcm9jZXNzIGVuaGFuY2VkIHR4IHBvd2VyIGluZm8KKyAqLwordm9pZCBpd2xjb3JlX2VlcHJvbV9lbmhhbmNlZF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgZWVwcm9tX3NlY3Rpb25fY291bnQgPSAwOworCWludCBzZWN0aW9uLCBlbGVtZW50OworCXN0cnVjdCBpd2xfZWVwcm9tX2VuaGFuY2VkX3R4cHdyICplbmhhbmNlZF90eHBvd2VyOworCXUzMiBvZmZzZXQ7CisJczggbWF4X3R4cG93ZXJfYXZnOyAvKiAoZEJtKSAqLworCisJLyogTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VjdGlvbnMKKwkgKiBhZGp1c3QgYmFuZHMgYW5kIGNoYW5uZWwncyBtYXggdHggcG93ZXIKKwkgKiBTZXQgdGhlIHR4X3Bvd2VyX3VzZXJfbG10IHRvIHRoZSBoaWdoZXN0IHBvd2VyCisJICogc3VwcG9ydGVkIGJ5IGFueSBjaGFubmVscyBhbmQgY2hhaW5zCisJICovCisJZm9yIChzZWN0aW9uID0gMDsgc2VjdGlvbiA8IEFSUkFZX1NJWkUoZW5oaW5mbyk7IHNlY3Rpb24rKykgeworCQllZXByb21fc2VjdGlvbl9jb3VudCA9IGVuaGluZm9bc2VjdGlvbl0uY291bnQ7CisJCW9mZnNldCA9IGVuaGluZm9bc2VjdGlvbl0ub2Zmc2V0OworCQllbmhhbmNlZF90eHBvd2VyID0gKHN0cnVjdCBpd2xfZWVwcm9tX2VuaGFuY2VkX3R4cHdyICopCisJCQkJaXdsX2VlcHJvbV9xdWVyeV9hZGRyKHByaXYsIG9mZnNldCk7CisKKwkJZm9yIChlbGVtZW50ID0gMDsgZWxlbWVudCA8IGVlcHJvbV9zZWN0aW9uX2NvdW50OyBlbGVtZW50KyspIHsKKwkJCWlmIChlbmhpbmZvW3NlY3Rpb25dLmlzX2NvbW1vbikKKwkJCQltYXhfdHhwb3dlcl9hdmcgPQorCQkJCQlpd2xfdXBkYXRlX2NvbW1vbl90eHBvd2VyKHByaXYsCisJCQkJCWVuaGFuY2VkX3R4cG93ZXIsIHNlY3Rpb24sIGVsZW1lbnQpOworCQkJZWxzZQorCQkJCW1heF90eHBvd2VyX2F2ZyA9CisJCQkJCWl3bF91cGRhdGVfY2hhbm5lbF90eHBvd2VyKHByaXYsCisJCQkJCWVuaGFuY2VkX3R4cG93ZXIsIHNlY3Rpb24sIGVsZW1lbnQpOworCisJCQkvKiBVcGRhdGUgdGhlIHR4X3Bvd2VyX3VzZXJfbG10IHRvIHRoZSBoaWdoZXN0IHBvd2VyCisJCQkgKiBzdXBwb3J0ZWQgYnkgYW55IGNoYW5uZWwgKi8KKwkJCWlmIChtYXhfdHhwb3dlcl9hdmcgPiBwcml2LT50eF9wb3dlcl91c2VyX2xtdCkKKwkJCQlwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9IG1heF90eHBvd2VyX2F2ZzsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0woaXdsY29yZV9lZXByb21fZW5oYW5jZWRfdHhwb3dlcik7CisKICNkZWZpbmUgQ0hFQ0tfQU5EX1BSSU5UX0koeCkgKChlZXByb21fY2hfaW5mb1tjaF0uZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF8jI3gpIFwKIAkJCSAgICA/ICMgeCAiICIgOiAiIikKIApAQCAtNTg1LDExICs5NDgsMTAgQEAKIAkJCS8qIENvcHkgdGhlIHJ1bi10aW1lIGZsYWdzIHNvIHRoZXkgYXJlIHRoZXJlIGV2ZW4gb24KIAkJCSAqIGludmFsaWQgY2hhbm5lbHMgKi8KIAkJCWNoX2luZm8tPmZsYWdzID0gZWVwcm9tX2NoX2luZm9bY2hdLmZsYWdzOwotCQkJLyogRmlyc3Qgd3JpdGUgdGhhdCBmYXQgaXMgbm90IGVuYWJsZWQsIGFuZCB0aGVuIGVuYWJsZQorCQkJLyogRmlyc3Qgd3JpdGUgdGhhdCBodDQwIGlzIG5vdCBlbmFibGVkLCBhbmQgdGhlbiBlbmFibGUKIAkJCSAqIG9uZSBieSBvbmUgKi8KLQkJCWNoX2luZm8tPmZhdF9leHRlbnNpb25fY2hhbm5lbCA9Ci0JCQkJKElFRUU4MDIxMV9DSEFOX05PX0hUNDBQTFVTIHwKLQkJCQkgSUVFRTgwMjExX0NIQU5fTk9fSFQ0ME1JTlVTKTsKKwkJCWNoX2luZm8tPmh0NDBfZXh0ZW5zaW9uX2NoYW5uZWwgPQorCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19IVDQwOwogCiAJCQlpZiAoIShpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSkgewogCQkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDaC4gJWQgRmxhZ3MgJXggWyVzR0h6XSAtICIKQEAgLTYzOCwxNyArMTAwMCwxNiBAQAogCQl9CiAJfQogCi0JLyogQ2hlY2sgaWYgd2UgZG8gaGF2ZSBGQVQgY2hhbm5lbHMgKi8KKwkvKiBDaGVjayBpZiB3ZSBkbyBoYXZlIEhUNDAgY2hhbm5lbHMgKi8KIAlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy5yZWd1bGF0b3J5X2JhbmRzWzVdID09Ci0JICAgIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fRkFUICYmCisJICAgIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fSFQ0MCAmJgogCSAgICBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLnJlZ3VsYXRvcnlfYmFuZHNbNl0gPT0KLQkgICAgRUVQUk9NX1JFR1VMQVRPUllfQkFORF9OT19GQVQpCisJICAgIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fSFQ0MCkKIAkJcmV0dXJuIDA7CiAKLQkvKiBUd28gYWRkaXRpb25hbCBFRVBST00gYmFuZHMgZm9yIDIuNCBhbmQgNSBHSHogRkFUIGNoYW5uZWxzICovCisJLyogVHdvIGFkZGl0aW9uYWwgRUVQUk9NIGJhbmRzIGZvciAyLjQgYW5kIDUgR0h6IEhUNDAgY2hhbm5lbHMgKi8KIAlmb3IgKGJhbmQgPSA2OyBiYW5kIDw9IDc7IGJhbmQrKykgewogCQllbnVtIGllZWU4MDIxMV9iYW5kIGllZWViYW5kOwotCQl1OCBmYXRfZXh0ZW5zaW9uX2NoYW47CiAKIAkJaXdsX2luaXRfYmFuZF9yZWZlcmVuY2UocHJpdiwgYmFuZCwgJmVlcHJvbV9jaF9jb3VudCwKIAkJCQkJJmVlcHJvbV9jaF9pbmZvLCAmZWVwcm9tX2NoX2luZGV4KTsKQEAgLTY1OSwzMSArMTAyMCwyOCBAQAogCiAJCS8qIExvb3AgdGhyb3VnaCBlYWNoIGJhbmQgYWRkaW5nIGVhY2ggb2YgdGhlIGNoYW5uZWxzICovCiAJCWZvciAoY2ggPSAwOyBjaCA8IGVlcHJvbV9jaF9jb3VudDsgY2grKykgewotCi0JCQlpZiAoKGJhbmQgPT0gNikgJiYKLQkJCQkoKGVlcHJvbV9jaF9pbmRleFtjaF0gPT0gNSkgfHwKLQkJCQkgKGVlcHJvbV9jaF9pbmRleFtjaF0gPT0gNikgfHwKLQkJCQkgKGVlcHJvbV9jaF9pbmRleFtjaF0gPT0gNykpKQotCQkJCS8qIGJvdGggYXJlIGFsbG93ZWQ6IGFib3ZlIGFuZCBiZWxvdyAqLwotCQkJCWZhdF9leHRlbnNpb25fY2hhbiA9IDA7Ci0JCQllbHNlCi0JCQkJZmF0X2V4dGVuc2lvbl9jaGFuID0KLQkJCQkJSUVFRTgwMjExX0NIQU5fTk9fSFQ0ME1JTlVTOwotCiAJCQkvKiBTZXQgdXAgZHJpdmVyJ3MgaW5mbyBmb3IgbG93ZXIgaGFsZiAqLwotCQkJaXdsX3NldF9mYXRfY2hhbl9pbmZvKHByaXYsIGllZWViYW5kLAorCQkJaXdsX21vZF9odDQwX2NoYW5faW5mbyhwcml2LCBpZWVlYmFuZCwKIAkJCQkJCWVlcHJvbV9jaF9pbmRleFtjaF0sCi0JCQkJCQkmKGVlcHJvbV9jaF9pbmZvW2NoXSksCi0JCQkJCQlmYXRfZXh0ZW5zaW9uX2NoYW4pOworCQkJCQkJJmVlcHJvbV9jaF9pbmZvW2NoXSwKKwkJCQkJCUlFRUU4MDIxMV9DSEFOX05PX0hUNDBQTFVTKTsKIAogCQkJLyogU2V0IHVwIGRyaXZlcidzIGluZm8gZm9yIHVwcGVyIGhhbGYgKi8KLQkJCWl3bF9zZXRfZmF0X2NoYW5faW5mbyhwcml2LCBpZWVlYmFuZCwKLQkJCQkJCShlZXByb21fY2hfaW5kZXhbY2hdICsgNCksCi0JCQkJCQkmKGVlcHJvbV9jaF9pbmZvW2NoXSksCi0JCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19IVDQwUExVUyk7CisJCQlpd2xfbW9kX2h0NDBfY2hhbl9pbmZvKHByaXYsIGllZWViYW5kLAorCQkJCQkJZWVwcm9tX2NoX2luZGV4W2NoXSArIDQsCisJCQkJCQkmZWVwcm9tX2NoX2luZm9bY2hdLAorCQkJCQkJSUVFRTgwMjExX0NIQU5fTk9fSFQ0ME1JTlVTKTsKIAkJfQogCX0KIAorCS8qIGZvciBuZXdlciBkZXZpY2UgKDYwMDAgc2VyaWVzIGFuZCB1cCkKKwkgKiBFRVBST00gY29udGFpbiBlbmhhbmNlZCB0eCBwb3dlciBpbmZvcm1hdGlvbgorCSAqIGRyaXZlciBuZWVkIHRvIHByb2Nlc3MgYWRkaXRpb24gaW5mb3JtYXRpb24KKwkgKiB0byBkZXRlcm1pbmUgdGhlIG1heCBjaGFubmVsIHR4IHBvd2VyIGxpbWl0cworCSAqLworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLnVwZGF0ZV9lbmhhbmNlZF90eHBvd2VyKQorCQlwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLnVwZGF0ZV9lbmhhbmNlZF90eHBvd2VyKHByaXYpOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9pbml0X2NoYW5uZWxfbWFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKaW5kZXggMTk1YjRlZi4uNmI2OGRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKQEAgLTg4LDEwICs4OCwxMCBAQAogICogcmVxdWlyZW1lbnQgZm9yIGVzdGFibGlzaGluZyBhIG5ldyBuZXR3b3JrIGZvciBsZWdhbCBvcGVyYXRpb24gb24gY2hhbm5lbHMKICAqIHJlcXVpcmluZyBSQURBUiBkZXRlY3Rpb24gb3IgcmVzdHJpY3RpbmcgQUNUSVZFIHNjYW5uaW5nLgogICoKLSAqIE5PVEU6ICAiV0lERSIgZmxhZyBkb2VzIG5vdCBpbmRpY2F0ZSBhbnl0aGluZyBhYm91dCAiRkFUIiA0MCBNSHogY2hhbm5lbHMuCi0gKiAgICAgICAgSXQgb25seSBpbmRpY2F0ZXMgdGhhdCAyMCBNSHogY2hhbm5lbCB1c2UgaXMgc3VwcG9ydGVkOyBGQVQgY2hhbm5lbAorICogTk9URTogICJXSURFIiBmbGFnIGRvZXMgbm90IGluZGljYXRlIGFueXRoaW5nIGFib3V0ICJIVDQwIiA0MCBNSHogY2hhbm5lbHMuCisgKiAgICAgICAgSXQgb25seSBpbmRpY2F0ZXMgdGhhdCAyMCBNSHogY2hhbm5lbCB1c2UgaXMgc3VwcG9ydGVkOyBIVDQwIGNoYW5uZWwKICAqICAgICAgICB1c2FnZSBpcyBpbmRpY2F0ZWQgYnkgYSBzZXBhcmF0ZSBzZXQgb2YgcmVndWxhdG9yeSBmbGFncyBmb3IgZWFjaAotICogICAgICAgIEZBVCBjaGFubmVsIHBhaXIuCisgKiAgICAgICAgSFQ0MCBjaGFubmVsIHBhaXIuCiAgKgogICogTk9URTogIFVzaW5nIGEgY2hhbm5lbCBpbmFwcHJvcHJpYXRlbHkgd2lsbCByZXN1bHQgaW4gYSB1Q29kZSBlcnJvciEKICAqLwpAQCAtMTEyLDEyICsxMTIsMzYgQEAKICNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfSFdfUkZfS0lMTF9FTkFCTEUgICAgICAgICAgICAgICAgKDEgPDwgMSkKIAogLyogKnJlZ3VsYXRvcnkqIGNoYW5uZWwgZGF0YSBmb3JtYXQgaW4gZWVwcm9tLCBvbmUgZm9yIGVhY2ggY2hhbm5lbC4KLSAqIFRoZXJlIGFyZSBzZXBhcmF0ZSBlbnRyaWVzIGZvciBGQVQgKDQwIE1IeikgdnMuIG5vcm1hbCAoMjAgTUh6KSBjaGFubmVscy4gKi8KKyAqIFRoZXJlIGFyZSBzZXBhcmF0ZSBlbnRyaWVzIGZvciBIVDQwICg0MCBNSHopIHZzLiBub3JtYWwgKDIwIE1IeikgY2hhbm5lbHMuICovCiBzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIHsKIAl1OCBmbGFnczsJCS8qIEVFUFJPTV9DSEFOTkVMXyogZmxhZ3MgY29waWVkIGZyb20gRUVQUk9NICovCiAJczggbWF4X3Bvd2VyX2F2ZzsJLyogbWF4IHBvd2VyIChkQm0pIG9uIHRoaXMgY2hubCwgbGltaXQgMzEgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKioKKyAqIGl3bF9lZXByb21fZW5oYW5jZWRfdHhwd3Igc3RydWN0dXJlCisgKiAgICBUaGlzIHN0cnVjdHVyZSBwcmVzZW50cyB0aGUgZW5oYW5jZWQgcmVndWxhdG9yeSB0eCBwb3dlciBsaW1pdCBsYXlvdXQKKyAqICAgIGluIGVlcHJvbSBpbWFnZQorICogICAgRW5oYW5jZWQgcmVndWxhdG9yeSB0eCBwb3dlciBwb3J0aW9uIG9mIGVlcHJvbSBpbWFnZSBjYW4gYmUgYnJva2VuIGRvd24KKyAqICAgIGludG8gaW5kaXZpZHVhbCBzdHJ1Y3R1cmVzOyBlYWNoIG9uZSBpcyA4IGJ5dGVzIGluIHNpemUgYW5kIGNvbnRhaW4gdGhlCisgKiAgICBmb2xsb3dpbmcgaW5mb3JtYXRpb24KKyAqIEBjaGFpbl9hX21heF9wd3I6IGNoYWluIGEgbWF4IHBvd2VyIGluIDEvMiBkQm0KKyAqIEBjaGFpbl9iX21heF9wd3I6IGNoYWluIGIgbWF4IHBvd2VyIGluIDEvMiBkQm0KKyAqIEBjaGFpbl9jX21heF9wd3I6IGNoYWluIGMgbWF4IHBvd2VyIGluIDEvMiBkQm0KKyAqIEBtaW1vMl9tYXhfcHdyOiBtaW1vMiBtYXggcG93ZXIgaW4gMS8yIGRCbQorICogQG1pbW8zX21heF9wd3I6IG1pbW8zIG1heCBwb3dlciBpbiAxLzIgZEJtCisgKgorICovCitzdHJ1Y3QgaXdsX2VlcHJvbV9lbmhhbmNlZF90eHB3ciB7CisJdTE2IHJlc2VydmVkOworCXM4IGNoYWluX2FfbWF4OworCXM4IGNoYWluX2JfbWF4OworCXM4IGNoYWluX2NfbWF4OworCXM4IHJlc2VydmVkMTsKKwlzOCBtaW1vMl9tYXg7CisJczggbWltbzNfbWF4OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qIDM5NDUgU3BlY2lmaWMgKi8KICNkZWZpbmUgRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04JKDB4MmYpCiAKQEAgLTE3MCwxOCArMTk0LDc3IEBACiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMjIgYnl0ZXMgKi8KICNkZWZpbmUgRUVQUk9NXzUwMDBfUkVHX0JBTkRfNV9DSEFOTkVMUyAgICAgICAoKDB4NzQpXAogCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDEyIGJ5dGVzICovCi0jZGVmaW5lIEVFUFJPTV81MDAwX1JFR19CQU5EXzI0X0ZBVF9DSEFOTkVMUyAgKCgweDgyKVwKKyNkZWZpbmUgRUVQUk9NXzUwMDBfUkVHX0JBTkRfMjRfSFQ0MF9DSEFOTkVMUyAgKCgweDgyKVwKIAkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAxNCAgYnl0ZXMgKi8KLSNkZWZpbmUgRUVQUk9NXzUwMDBfUkVHX0JBTkRfNTJfRkFUX0NIQU5ORUxTICAoKDB4OTIpXAorI2RlZmluZSBFRVBST01fNTAwMF9SRUdfQkFORF81Ml9IVDQwX0NIQU5ORUxTICAoKDB4OTIpXAogCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDIyICBieXRlcyAqLwogCisvKiA2MDAwIGFuZCB1cCByZWd1bGF0b3J5IHR4IHBvd2VyIC0gaW5kaXJlY3QgYWNjZXNzICovCisvKiBtYXguIGVsZW1lbnRzIHBlciBzZWN0aW9uICovCisjZGVmaW5lIEVFUFJPTV9NQVhfVFhQT1dFUl9TRUNUSU9OX0VMRU1FTlRTCSg4KQorI2RlZmluZSBFRVBST01fVFhQT1dFUl9DT01NT05fSFQ0MF9JTkRFWAkoMikKKworLyoqCisgKiBQYXJ0aXRpb24gdGhlIGVuaGFuY2VkIHR4IHBvd2VyIHBvcnRpb24gb2YgZWVwcm9tIGltYWdlIGludG8KKyAqIDEwIHNlY3Rpb25zIGJhc2VkIG9uIGJhbmQsIG1vZHVsYXRpb24sIGZyZXF1ZW5jeSBhbmQgY2hhbm5lbAorICoKKyAqIFNlY3Rpb24gMTogYWxsIENDSyBjaGFubmVscworICogU2VjdGlvbiAyOiBhbGwgMi40IEdIeiBPRkRNIChMZWdhY3ksIEhUIGFuZCBIVDQwICkgY2hhbm5lbHMKKyAqIFNlY3Rpb24gMzogYWxsIDUuMiBHSHogT0ZETSAoTGVnYWN5LCBIVCBhbmQgSFQ0MCkgY2hhbm5lbHMKKyAqIFNlY3Rpb24gNDogMi40IEdIeiAyME1IeiBjaGFubmVsczogMSwgMiwgMTAsIDExLiBCb3RoIExlZ2FjeSBhbmQgSFQKKyAqIFNlY3Rpb24gNTogMi40IEdIeiA0ME1IeiBjaGFubmVsczogMSwgMiwgNiwgNywgOSwgKF9hYm92ZV8pCisgKiBTZWN0aW9uIDY6IDUuMiBHSHogMjBNSHogY2hhbm5lbHM6IDM2LCA2NCwgMTAwLCBib3RoIExlZ2FjeSBhbmQgSFQKKyAqIFNlY3Rpb24gNzogNS4yIEdIeiA0ME1IeiBjaGFubmVsczogMzYsIDYwLCAxMDAgKF9hYm92ZV8pCisgKiBTZWN0aW9uIDg6IDIuNCBHSHogY2hhbm5lbCAxMywgQm90aCBMZWdhY3kgYW5kIEhUCisgKiBTZWN0aW9uIDk6IDIuNCBHSHogY2hhbm5lbCAxNDAsIEJvdGggTGVnYWN5IGFuZCBIVAorICogU2VjdGlvbiAxMDogMi40IEdIeiA0ME1IeiBjaGFubmVsczogMTMyLCA0NCAoX2Fib3ZlXykKKyAqLworLyogMi40IEdIeiBiYW5kOiBDQ0sgKi8KKyNkZWZpbmUgRUVQUk9NX0xCX0NDS18yMF9DT01NT04gICAgICAgKCgweEFBKVwKKwkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiA4IGJ5dGVzICovCisvKiAyLjQgR0h6IGJhbmQ6IDIwTUh6LUxlZ2FjeSwgMjBNSHotSFQsIDQwTUh6LUhUICovCisjZGVmaW5lIEVFUFJPTV9MQl9PRkRNX0NPTU1PTiAgICAgICAoKDB4QjIpXAorCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDI0IGJ5dGVzICovCisvKiA1LjIgR0h6IGJhbmQ6IDIwTUh6LUxlZ2FjeSwgMjBNSHotSFQsIDQwTUh6LUhUICovCisjZGVmaW5lIEVFUFJPTV9IQl9PRkRNX0NPTU1PTiAgICAgICAoKDB4Q0EpXAorCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDI0IGJ5dGVzICovCisvKiAyLjRHSHogYmFuZCBjaGFubmVsczoKKyAqCTFMZWdhY3ksIDFIVCwgMkxlZ2FjeSwgMkhULCAxMExlZ2FjeSwgMTBIVCwgMTFMZWdhY3ksIDExSFQgKi8KKyNkZWZpbmUgRUVQUk9NX0xCX09GRE1fMjBfQkFORCAgICAgICAoKDB4RTIpXAorCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDY0IGJ5dGVzICovCisvKiAyLjQgR0h6IGJhbmQgSFQ0MCBjaGFubmVsczogKDEsKzEpICgyLCsxKSAoNiwrMSkgKDcsKzEpICg5LCsxKSAqLworI2RlZmluZSBFRVBST01fTEJfT0ZETV9IVDQwX0JBTkQgICAgICAgKCgweDEyMilcCisJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogNDAgYnl0ZXMgKi8KKy8qIDUuMkdIeiBiYW5kIGNoYW5uZWxzOiAzNkxlZ2FjeSwgMzZIVCwgNjRMZWdhY3ksIDY0SFQsIDEwMExlZ2FjeSwgMTAwSFQgKi8KKyNkZWZpbmUgRUVQUk9NX0hCX09GRE1fMjBfQkFORCAgICAgICAoKDB4MTRBKVwKKwkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiA0OCBieXRlcyAqLworLyogNS4yIEdIeiBiYW5kIEhUNDAgY2hhbm5lbHM6ICgzNiwrMSkgKDYwLCsxKSAoMTAwLCsxKSAqLworI2RlZmluZSBFRVBST01fSEJfT0ZETV9IVDQwX0JBTkQgICAgICAgKCgweDE3QSlcCisJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMjQgYnl0ZXMgKi8KKy8qIDIuNCBHSHogYmFuZCwgY2hhbm5uZWwgMTM6IExlZ2FjeSwgSFQgKi8KKyNkZWZpbmUgRUVQUk9NX0xCX09GRE1fMjBfQ0hBTk5FTF8xMyAgICAgICAoKDB4MTkyKVwKKwkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAxNiBieXRlcyAqLworLyogNS4yIEdIeiBiYW5kLCBjaGFubm5lbCAxNDA6IExlZ2FjeSwgSFQgKi8KKyNkZWZpbmUgRUVQUk9NX0hCX09GRE1fMjBfQ0hBTk5FTF8xNDAgICAgICAgKCgweDFBMilcCisJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMTYgYnl0ZXMgKi8KKy8qIDUuMiBHSHogYmFuZCwgSFQ0MCBjaGFubm5lbHMgKDEzMiwrMSkgKDQ0LCsxKSAqLworI2RlZmluZSBFRVBST01fSEJfT0ZETV9IVDQwX0JBTkRfMSAgICAgICAoKDB4MUIyKVwKKwkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAxNiBieXRlcyAqLworCisKIC8qIDUwNTAgU3BlY2lmaWMgKi8KICNkZWZpbmUgRUVQUk9NXzUwNTBfVFhfUE9XRVJfVkVSU0lPTiAgICAoNCkKICNkZWZpbmUgRUVQUk9NXzUwNTBfRUVQUk9NX1ZFUlNJT04JKDB4MjFFKQogCiAvKiBPVFAgKi8KLSNkZWZpbmUgT1RQX0xPV0VSX0JMT0NLU19UT1RBTAkJKDMpCi0jZGVmaW5lIE9UUF9CTE9DS19TSVpFCQkJKDB4NDAwKQorLyogbG93ZXIgYmxvY2tzIGNvbnRhaW4gRUVQUk9NIGltYWdlIGFuZCBjYWxpYnJhdGlvbiBkYXRhICovCisjZGVmaW5lIE9UUF9MT1dfSU1BR0VfU0laRQkJKDIgKiA1MTIgKiBzaXplb2YodTE2KSkgLyogMiBLQiAqLworLyogaGlnaCBibG9ja3MgY29udGFpbiBQQVBEIGRhdGEgKi8KKyNkZWZpbmUgT1RQX0hJR0hfSU1BR0VfU0laRV82eDAwICAgICAgICAoNiAqIDUxMiAqIHNpemVvZih1MTYpKSAvKiA2IEtCICovCisjZGVmaW5lIE9UUF9ISUdIX0lNQUdFX1NJWkVfMTAwMCAgICAgICAgKDB4MjAwICogc2l6ZW9mKHUxNikpIC8qIDEwMjQgYnl0ZXMgKi8KKyNkZWZpbmUgT1RQX01BWF9MTF9JVEVNU18xMDAwCQkoMykJLyogT1RQIGJsb2NrcyBmb3IgMTAwMCAqLworI2RlZmluZSBPVFBfTUFYX0xMX0lURU1TXzZ4MDAJCSg0KQkvKiBPVFAgYmxvY2tzIGZvciA2eDAwICovCisjZGVmaW5lIE9UUF9NQVhfTExfSVRFTVNfNng1MAkJKDcpCS8qIE9UUCBibG9ja3MgZm9yIDZ4NTAgKi8KIAogLyogMi40IEdIeiAqLwogZXh0ZXJuIGNvbnN0IHU4IGl3bF9lZXByb21fYmFuZF8xWzE0XTsKQEAgLTMxMyw3ICszOTYsNyBAQAogICogaW4gRUVQUk9NIGNvbnRhaW5pbmcgRUVQUk9NX0NIQU5ORUxfKiB1c2FnZSBmbGFncyAoTFNCKSBhbmQgbWF4IHJlZ3VsYXRvcnkKICAqIHR4cG93ZXIgKE1TQikuCiAgKgotICogRW50cmllcyBpbW1lZGlhdGVseSBiZWxvdyBhcmUgZm9yIDIwIE1IeiBjaGFubmVsIHdpZHRoLiAgRkFUICg0MCBNSHopCisgKiBFbnRyaWVzIGltbWVkaWF0ZWx5IGJlbG93IGFyZSBmb3IgMjAgTUh6IGNoYW5uZWwgd2lkdGguICBIVDQwICg0MCBNSHopCiAgKiBjaGFubmVscyAob25seSBmb3IgNDk2NSwgbm90IHN1cHBvcnRlZCBieSAzOTQ1KSBhcHBlYXIgbGF0ZXIgaW4gdGhlIEVFUFJPTS4KICAqCiAgKiAyLjQgR0h6IGNoYW5uZWxzIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNApAQCAtMzUyLDI5ICs0MzUsMjkgQEAKICNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF81X0NIQU5ORUxTICAgKDIqMHg5OSkJLyogMTIgYnl0ZXMgKi8KIAogLyoKLSAqIDIuNCBHSHogRkFUIGNoYW5uZWxzIDEgKDUpLCAyICg2KSwgMyAoNyksIDQgKDgpLCA1ICg5KSwgNiAoMTApLCA3ICgxMSkKKyAqIDIuNCBHSHogSFQ0MCBjaGFubmVscyAxICg1KSwgMiAoNiksIDMgKDcpLCA0ICg4KSwgNSAoOSksIDYgKDEwKSwgNyAoMTEpCiAgKgogICogVGhlIGNoYW5uZWwgbGlzdGVkIGlzIHRoZSBjZW50ZXIgb2YgdGhlIGxvd2VyIDIwIE1IeiBoYWxmIG9mIHRoZSBjaGFubmVsLgogICogVGhlIG92ZXJhbGwgY2VudGVyIGZyZXF1ZW5jeSBpcyBhY3R1YWxseSAyIGNoYW5uZWxzICgxMCBNSHopIGFib3ZlIHRoYXQsCi0gKiBhbmQgdGhlIHVwcGVyIGhhbGYgb2YgZWFjaCBGQVQgY2hhbm5lbCBpcyBjZW50ZXJlZCA0IGNoYW5uZWxzICgyMCBNSHopIGF3YXkKLSAqIGZyb20gdGhlIGxvd2VyIGhhbGY7IGUuZy4gdGhlIHVwcGVyIGhhbGYgb2YgRkFUIGNoYW5uZWwgMSBpcyBjaGFubmVsIDUsCi0gKiBhbmQgdGhlIG92ZXJhbGwgRkFUIGNoYW5uZWwgd2lkdGggY2VudGVycyBvbiBjaGFubmVsIDMuCisgKiBhbmQgdGhlIHVwcGVyIGhhbGYgb2YgZWFjaCBIVDQwIGNoYW5uZWwgaXMgY2VudGVyZWQgNCBjaGFubmVscyAoMjAgTUh6KSBhd2F5CisgKiBmcm9tIHRoZSBsb3dlciBoYWxmOyBlLmcuIHRoZSB1cHBlciBoYWxmIG9mIEhUNDAgY2hhbm5lbCAxIGlzIGNoYW5uZWwgNSwKKyAqIGFuZCB0aGUgb3ZlcmFsbCBIVDQwIGNoYW5uZWwgd2lkdGggY2VudGVycyBvbiBjaGFubmVsIDMuCiAgKgogICogTk9URTogIFRoZSBSWE9OIGNvbW1hbmQgdXNlcyAyMCBNSHogY2hhbm5lbCBudW1iZXJzIHRvIHNwZWNpZnkgdGhlCiAgKiAgICAgICAgY29udHJvbCBjaGFubmVsIHRvIHdoaWNoIHRvIHR1bmUuICBSWE9OIGFsc28gc3BlY2lmaWVzIHdoZXRoZXIgdGhlCi0gKiAgICAgICAgY29udHJvbCBjaGFubmVsIGlzIHRoZSB1cHBlciBvciBsb3dlciBoYWxmIG9mIGEgRkFUIGNoYW5uZWwuCisgKiAgICAgICAgY29udHJvbCBjaGFubmVsIGlzIHRoZSB1cHBlciBvciBsb3dlciBoYWxmIG9mIGEgSFQ0MCBjaGFubmVsLgogICoKLSAqIE5PVEU6ICA0OTY1IGRvZXMgbm90IHN1cHBvcnQgRkFUIGNoYW5uZWxzIG9uIDIuNCBHSHouCisgKiBOT1RFOiAgNDk2NSBkb2VzIG5vdCBzdXBwb3J0IEhUNDAgY2hhbm5lbHMgb24gMi40IEdIei4KICAqLwotI2RlZmluZSBFRVBST01fNDk2NV9SRUdVTEFUT1JZX0JBTkRfMjRfRkFUX0NIQU5ORUxTICgyKjB4QTApCS8qIDE0IGJ5dGVzICovCisjZGVmaW5lIEVFUFJPTV80OTY1X1JFR1VMQVRPUllfQkFORF8yNF9IVDQwX0NIQU5ORUxTICgyKjB4QTApCS8qIDE0IGJ5dGVzICovCiAKIC8qCi0gKiA1LjIgR0h6IEZBVCBjaGFubmVscyAzNiAoNDApLCA0NCAoNDgpLCA1MiAoNTYpLCA2MCAoNjQpLAorICogNS4yIEdIeiBIVDQwIGNoYW5uZWxzIDM2ICg0MCksIDQ0ICg0OCksIDUyICg1NiksIDYwICg2NCksCiAgKiAxMDAgKDEwNCksIDEwOCAoMTEyKSwgMTE2ICgxMjApLCAxMjQgKDEyOCksIDEzMiAoMTM2KSwgMTQ5ICgxNTMpLCAxNTcgKDE2MSkKICAqLwotI2RlZmluZSBFRVBST01fNDk2NV9SRUdVTEFUT1JZX0JBTkRfNTJfRkFUX0NIQU5ORUxTICgyKjB4QTgpCS8qIDIyIGJ5dGVzICovCisjZGVmaW5lIEVFUFJPTV80OTY1X1JFR1VMQVRPUllfQkFORF81Ml9IVDQwX0NIQU5ORUxTICgyKjB4QTgpCS8qIDIyIGJ5dGVzICovCiAKLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF9OT19GQVQJCQkoMCkKKyNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF9OT19IVDQwCQkJKDApCiAKIHN0cnVjdCBpd2xfZWVwcm9tX29wcyB7CiAJY29uc3QgdTMyIHJlZ3VsYXRvcnlfYmFuZHNbN107CkBAIC0zODMsNiArNDY2LDcgQEAKIAl2b2lkICgqcmVsZWFzZV9zZW1hcGhvcmUpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCXUxNiAoKmNhbGliX3ZlcnNpb24pIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCWNvbnN0IHU4KiAoKnF1ZXJ5X2FkZHIpIChjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHNpemVfdCBvZmZzZXQpOworCXZvaWQgKCp1cGRhdGVfZW5oYW5jZWRfdHhwb3dlcikgKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB9OwogCiAKQEAgLTM5Nyw3ICs0ODEsNyBAQAogaW50IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bGNvcmVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBjb25zdCB1OCAqaXdsY29yZV9lZXByb21fcXVlcnlfYWRkcihjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHNpemVfdCBvZmZzZXQpOwotCit2b2lkIGl3bGNvcmVfZWVwcm9tX2VuaGFuY2VkX3R4cG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfaW5pdF9jaGFubmVsX21hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfZnJlZV9jaGFubmVsX21hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKml3bF9nZXRfY2hhbm5lbF9pbmZvKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCmluZGV4IDE3ZDYxYWMuLjUzMmM4ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKQEAgLTM2LDggKzM2LDYgQEAKICNpbmNsdWRlICJpd2wtY29yZS5oIgogCiAKLSNkZWZpbmUgSVdMX0NNRCh4KSBjYXNlIHg6IHJldHVybiAjeAotCiBjb25zdCBjaGFyICpnZXRfY21kX3N0cmluZyh1OCBjbWQpCiB7CiAJc3dpdGNoIChjbWQpIHsKQEAgLTEwMywyMiArMTAxLDIzIEBACiAKICNkZWZpbmUgSE9TVF9DT01QTEVURV9USU1FT1VUIChIWiAvIDIpCiAKLXN0YXRpYyBpbnQgaXdsX2dlbmVyaWNfY21kX2NhbGxiYWNrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bF9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGl3bF9nZW5lcmljX2NtZF9jYWxsYmFjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgaXdsX2RldmljZV9jbWQgKmNtZCwKKwkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IE5VTEw7CiAKIAlpZiAoIXNrYikgewogCQlJV0xfRVJSKHByaXYsICJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiAlcy5cbiIsCiAJCQkJZ2V0X2NtZF9zdHJpbmcoY21kLT5oZHIuY21kKSk7Ci0JCXJldHVybiAxOworCQlyZXR1cm47CiAJfQogCiAJcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopc2tiLT5kYXRhOwogCWlmIChwa3QtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewogCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gJXMgKDB4JTA4WClcbiIsCiAJCQlnZXRfY21kX3N0cmluZyhjbWQtPmhkci5jbWQpLCBwa3QtPmhkci5mbGFncyk7Ci0JCXJldHVybiAxOworCQlyZXR1cm47CiAJfQogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKQEAgLTEyNywyOSArMTI2LDI2IEBACiAJY2FzZSBTRU5TSVRJVklUWV9DTUQ6CiAJCUlXTF9ERUJVR19IQ19EVU1QKHByaXYsICJiYWNrIGZyb20gJXMgKDB4JTA4WClcbiIsCiAJCQkJZ2V0X2NtZF9zdHJpbmcoY21kLT5oZHIuY21kKSwgcGt0LT5oZHIuZmxhZ3MpOwotCQkJCWJyZWFrOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlJV0xfREVCVUdfSEMocHJpdiwgImJhY2sgZnJvbSAlcyAoMHglMDhYKVxuIiwKIAkJCQlnZXRfY21kX3N0cmluZyhjbWQtPmhkci5jbWQpLCBwa3QtPmhkci5mbGFncyk7CiAJfQogI2VuZGlmCi0KLQkvKiBMZXQgaXdsX3R4X2NvbXBsZXRlIGZyZWUgdGhlIHJlc3BvbnNlIHNrYiAqLwotCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IGl3bF9zZW5kX2NtZF9hc3luYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaG9zdF9jbWQgKmNtZCkKIHsKIAlpbnQgcmV0OwogCi0JQlVHX09OKCEoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSk7CisJQlVHX09OKCEoY21kLT5mbGFncyAmIENNRF9BU1lOQykpOwogCiAJLyogQW4gYXN5bmNocm9ub3VzIGNvbW1hbmQgY2FuIG5vdCBleHBlY3QgYW4gU0tCIHRvIGJlIHNldC4gKi8KLQlCVUdfT04oY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKTsKKwlCVUdfT04oY21kLT5mbGFncyAmIENNRF9XQU5UX1NLQik7CiAKIAkvKiBBc3NpZ24gYSBnZW5lcmljIGNhbGxiYWNrIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQgKi8KLQlpZiAoIWNtZC0+bWV0YS51LmNhbGxiYWNrKQotCQljbWQtPm1ldGEudS5jYWxsYmFjayA9IGl3bF9nZW5lcmljX2NtZF9jYWxsYmFjazsKKwlpZiAoIWNtZC0+Y2FsbGJhY2spCisJCWNtZC0+Y2FsbGJhY2sgPSBpd2xfZ2VuZXJpY19jbWRfY2FsbGJhY2s7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybiAtRUJVU1k7CkBAIC0xNjgsMTAgKzE2NCwxMCBAQAogCWludCBjbWRfaWR4OwogCWludCByZXQ7CiAKLQlCVUdfT04oY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKTsKKwlCVUdfT04oY21kLT5mbGFncyAmIENNRF9BU1lOQyk7CiAKIAkgLyogQSBzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgaGF2ZSBhIGNhbGxiYWNrIHNldC4gKi8KLQlCVUdfT04oY21kLT5tZXRhLnUuY2FsbGJhY2sgIT0gTlVMTCk7CisJQlVHX09OKGNtZC0+Y2FsbGJhY2spOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoU1RBVFVTX0hDTURfU1lOQ19BQ1RJVkUsICZwcml2LT5zdGF0dXMpKSB7CiAJCUlXTF9FUlIocHJpdiwKQEAgLTE4Myw5ICsxNzksNiBAQAogCiAJc2V0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCi0JaWYgKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQikKLQkJY21kLT5tZXRhLnNvdXJjZSA9ICZjbWQtPm1ldGE7Ci0KIAljbWRfaWR4ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChjbWRfaWR4IDwgMCkgewogCQlyZXQgPSBjbWRfaWR4OwpAQCAtMjIyLDcgKzIxNSw3IEBACiAJCXJldCA9IC1FSU87CiAJCWdvdG8gZmFpbDsKIAl9Ci0JaWYgKChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfV0FOVF9TS0IpICYmICFjbWQtPm1ldGEudS5za2IpIHsKKwlpZiAoKGNtZC0+ZmxhZ3MgJiBDTURfV0FOVF9TS0IpICYmICFjbWQtPnJlcGx5X3NrYikgewogCQlJV0xfRVJSKHByaXYsICJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiAnJXMnXG4iLAogCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7CiAJCXJldCA9IC1FSU87CkBAIC0yMzMsMjAgKzIyNiwyMCBAQAogCWdvdG8gb3V0OwogCiBjYW5jZWw6Ci0JaWYgKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQikgewotCQlzdHJ1Y3QgaXdsX2NtZCAqcWNtZDsKLQotCQkvKiBDYW5jZWwgdGhlIENNRF9XQU5UX1NLQiBmbGFnIGZvciB0aGUgY21kIGluIHRoZQorCWlmIChjbWQtPmZsYWdzICYgQ01EX1dBTlRfU0tCKSB7CisJCS8qCisJCSAqIENhbmNlbCB0aGUgQ01EX1dBTlRfU0tCIGZsYWcgZm9yIHRoZSBjbWQgaW4gdGhlCiAJCSAqIFRYIGNtZCBxdWV1ZS4gT3RoZXJ3aXNlIGluIGNhc2UgdGhlIGNtZCBjb21lcwogCQkgKiBpbiBsYXRlciwgaXQgd2lsbCBwb3NzaWJseSBzZXQgYW4gaW52YWxpZAotCQkgKiBhZGRyZXNzIChjbWQtPm1ldGEuc291cmNlKS4gKi8KLQkJcWNtZCA9IHByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0uY21kW2NtZF9pZHhdOwotCQlxY21kLT5tZXRhLmZsYWdzICY9IH5DTURfV0FOVF9TS0I7CisJCSAqIGFkZHJlc3MgKGNtZC0+bWV0YS5zb3VyY2UpLgorCQkgKi8KKwkJcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5tZXRhW2NtZF9pZHhdLmZsYWdzICY9CisJCQkJCQkJfkNNRF9XQU5UX1NLQjsKIAl9CiBmYWlsOgotCWlmIChjbWQtPm1ldGEudS5za2IpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoY21kLT5tZXRhLnUuc2tiKTsKLQkJY21kLT5tZXRhLnUuc2tiID0gTlVMTDsKKwlpZiAoY21kLT5yZXBseV9za2IpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoY21kLT5yZXBseV9za2IpOworCQljbWQtPnJlcGx5X3NrYiA9IE5VTEw7CiAJfQogb3V0OgogCWNsZWFyX2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7CkBAIC0yNTYsNyArMjQ5LDcgQEAKIAogaW50IGl3bF9zZW5kX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaG9zdF9jbWQgKmNtZCkKIHsKLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKQorCWlmIChjbWQtPmZsYWdzICYgQ01EX0FTWU5DKQogCQlyZXR1cm4gaXdsX3NlbmRfY21kX2FzeW5jKHByaXYsIGNtZCk7CiAKIAlyZXR1cm4gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgY21kKTsKQEAgLTI3Nyw5ICsyNzAsOSBAQAogCiBpbnQgaXdsX3NlbmRfY21kX3BkdV9hc3luYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICB1OCBpZCwgdTE2IGxlbiwgY29uc3Qgdm9pZCAqZGF0YSwKLQkJCSAgIGludCAoKmNhbGxiYWNrKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgIHN0cnVjdCBpd2xfY21kICpjbWQsCi0JCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpKQorCQkJICAgdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSAgICBzdHJ1Y3QgaXdsX2RldmljZV9jbWQgKmNtZCwKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpKQogewogCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kID0gewogCQkuaWQgPSBpZCwKQEAgLTI4Nyw4ICsyODAsOCBAQAogCQkuZGF0YSA9IGRhdGEsCiAJfTsKIAotCWNtZC5tZXRhLmZsYWdzIHw9IENNRF9BU1lOQzsKLQljbWQubWV0YS51LmNhbGxiYWNrID0gY2FsbGJhY2s7CisJY21kLmZsYWdzIHw9IENNRF9BU1lOQzsKKwljbWQuY2FsbGJhY2sgPSBjYWxsYmFjazsKIAogCXJldHVybiBpd2xfc2VuZF9jbWRfYXN5bmMocHJpdiwgJmNtZCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKaW5kZXggYTEzMjhjMy4uYmQwYjEyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaApAQCAtMTQ1LDQgKzE0NSwyNSBAQAogI2RlZmluZSBpZWVlODAyMTFfc3RvcF9xdWV1ZSBET19OT1RfVVNFX2llZWU4MDIxMV9zdG9wX3F1ZXVlCiAjZGVmaW5lIGllZWU4MDIxMV93YWtlX3F1ZXVlIERPX05PVF9VU0VfaWVlZTgwMjExX3dha2VfcXVldWUKIAorc3RhdGljIGlubGluZSB2b2lkIGl3bF9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWNsZWFyX2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGZyb20gdUNvZGUvTklDIHRvIGhvc3QgKi8KKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIDB4MDAwMDAwMDApOworCisJLyogYWNrbm93bGVkZ2UvY2xlYXIvcmVzZXQgYW55IGludGVycnVwdHMgc3RpbGwgcGVuZGluZworCSAqIGZyb20gdUNvZGUgb3IgZmxvdyBoYW5kbGVyIChSeC9UeCBETUEpICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhmZmZmZmZmZik7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIDB4ZmZmZmZmZmYpOworCUlXTF9ERUJVR19JU1IocHJpdiwgIkRpc2FibGVkIGludGVycnVwdHNcbiIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlJV0xfREVCVUdfSVNSKHByaXYsICJFbmFibGluZyBpbnRlcnJ1cHRzXG4iKTsKKwlzZXRfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cyk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCBwcml2LT5pbnRhX21hc2spOworfQorCiAjZW5kaWYJCQkJLyogX19pd2xfaGVscGVyc19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKaW5kZXggNWU2NDI1Mi4uZjQyMGM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKLQl1MTYgdHB0OworCXUxNiB0cHQ7CS8qIE1iL3MgKi8KIAl1OCBvbl90aW1lOwogCXU4IG9mZl90aW1lOwogfSBibGlua190YmxbXSA9CkBAIC05MSw4ICs5MSw4IEBACiAJCS5pZCA9IFJFUExZX0xFRFNfQ01ELAogCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfbGVkX2NtZCksCiAJCS5kYXRhID0gbGVkX2NtZCwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfQVNZTkMsCi0JCS5tZXRhLnUuY2FsbGJhY2sgPSBOVUxMLAorCQkuZmxhZ3MgPSBDTURfQVNZTkMsCisJCS5jYWxsYmFjayA9IE5VTEwsCiAJfTsKIAl1MzIgcmVnOwogCkBAIC0xMDQsNyArMTA0LDcgQEAKIH0KIAogLyogU2V0IGxlZCBwYXR0ZXJuIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9sZWRfcGF0dGVybihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQsCitzdGF0aWMgaW50IGl3bF9sZWRfcGF0dGVybihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGlkeCkKIHsKIAlzdHJ1Y3QgaXdsX2xlZF9jbWQgbGVkX2NtZCA9IHsKQEAgLTEyMSw3ICsxMjEsNyBAQAogfQogCiAvKiBTZXQgbGVkIHJlZ2lzdGVyIG9mZiAqLwotc3RhdGljIGludCBpd2w0OTY1X2xlZF9vbl9yZWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQorc3RhdGljIGludCBpd2xfbGVkX29uX3JlZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7CiAJSVdMX0RFQlVHX0xFRChwcml2LCAibGVkIG9uICVkXG4iLCBsZWRfaWQpOwogCWl3bF93cml0ZTMyKHByaXYsIENTUl9MRURfUkVHLCBDU1JfTEVEX1JFR19UUlVOX09OKTsKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiAjaWYgMAogLyogU2V0IGxlZCBvbiBjb21tYW5kICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfbGVkX29uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK3N0YXRpYyBpbnQgaXdsX2xlZF9vbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7CiAJc3RydWN0IGl3bF9sZWRfY21kIGxlZF9jbWQgPSB7CiAJCS5pZCA9IGxlZF9pZCwKQEAgLTE0Miw3ICsxNDIsNyBAQAogfQogCiAvKiBTZXQgbGVkIG9mZiBjb21tYW5kICovCi1pbnQgaXdsNDk2NV9sZWRfb2ZmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK2ludCBpd2xfbGVkX29mZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7CiAJc3RydWN0IGl3bF9sZWRfY21kIGxlZF9jbWQgPSB7CiAJCS5pZCA9IGxlZF9pZCwKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiAKIC8qIFNldCBsZWQgcmVnaXN0ZXIgb2ZmICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfbGVkX29mZl9yZWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQorc3RhdGljIGludCBpd2xfbGVkX29mZl9yZWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewogCUlXTF9ERUJVR19MRUQocHJpdiwgIkxFRCBSZWcgb2ZmXG4iKTsKIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfTEVEX1JFRywgQ1NSX0xFRF9SRUdfVFJVTl9PRkYpOwpAQCAtMTcxLDcgKzE3MSw3IEBACiB7CiAJSVdMX0RFQlVHX0xFRChwcml2LCAiQXNzb2NpYXRlZFxuIik7CiAJcHJpdi0+YWxsb3dfYmxpbmtpbmcgPSAxOwotCXJldHVybiBpd2w0OTY1X2xlZF9vbl9yZWcocHJpdiwgbGVkX2lkKTsKKwlyZXR1cm4gaXdsX2xlZF9vbl9yZWcocHJpdiwgbGVkX2lkKTsKIH0KIHN0YXRpYyBpbnQgaXdsX2xlZF9kaXNhc3NvY2lhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewpAQCAtMjY0LDEzICsyNjQsMTYgQEAKIAogCiAvKgotICogY2FsY3VsYXRlIGJsaW5rIHJhdGUgYWNjb3JkaW5nIHRvIGxhc3QgMiBzZWMgVHgvUnggYWN0aXZpdGllcworICogY2FsY3VsYXRlIGJsaW5rIHJhdGUgYWNjb3JkaW5nIHRvIGxhc3Qgc2Vjb25kIFR4L1J4IGFjdGl2aXRpZXMKICAqLwogc3RhdGljIGludCBpd2xfZ2V0X2JsaW5rX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCBpOwotCXU2NCBjdXJyZW50X3RwdCA9IHByaXYtPnR4X3N0YXRzWzJdLmJ5dGVzOwotCS8qIEZJWE1FOiArIHByaXYtPnJ4X3N0YXRzWzJdLmJ5dGVzOyAqLworCS8qIGNvdW50IGJvdGggdHggYW5kIHJ4IHRyYWZmaWMgdG8gYmUgYWJsZSB0bworCSAqIGhhbmRsZSB0cmFmZmljIGluIGVpdGhlciBkaXJlY3Rpb24KKwkgKi8KKwl1NjQgY3VycmVudF90cHQgPSBwcml2LT50eF9zdGF0cy5kYXRhX2J5dGVzICsKKwkJCSAgcHJpdi0+cnhfc3RhdHMuZGF0YV9ieXRlczsKIAlzNjQgdHB0ID0gY3VycmVudF90cHQgLSBwcml2LT5sZWRfdHB0OwogCiAJaWYgKHRwdCA8IDApIC8qIHdyYXBhcm91bmQgKi8KQEAgLTMxNCw3ICszMTcsNyBAQAogCQlwcml2LT5sYXN0X2JsaW5rX3RpbWUgPSAwOwogCQlpZiAocHJpdi0+bGFzdF9ibGlua19yYXRlICE9IElXTF9TT0xJRF9CTElOS19JRFgpIHsKIAkJCXByaXYtPmxhc3RfYmxpbmtfcmF0ZSA9IElXTF9TT0xJRF9CTElOS19JRFg7Ci0JCQlpd2w0OTY1X2xlZF9wYXR0ZXJuKHByaXYsIElXTF9MRURfTElOSywKKwkJCWl3bF9sZWRfcGF0dGVybihwcml2LCBJV0xfTEVEX0xJTkssCiAJCQkJCSAgICBJV0xfU09MSURfQkxJTktfSURYKTsKIAkJfQogCQlyZXR1cm47CkBAIC0zMjgsMTIgKzMzMSwxMSBAQAogCiAJLyogY2FsbCBvbmx5IGlmIGJsaW5rIHJhdGUgY2hhbmdlICovCiAJaWYgKGJsaW5rX2lkeCAhPSBwcml2LT5sYXN0X2JsaW5rX3JhdGUpCi0JCWl3bDQ5NjVfbGVkX3BhdHRlcm4ocHJpdiwgSVdMX0xFRF9MSU5LLCBibGlua19pZHgpOworCQlpd2xfbGVkX3BhdHRlcm4ocHJpdiwgSVdMX0xFRF9MSU5LLCBibGlua19pZHgpOwogCiAJcHJpdi0+bGFzdF9ibGlua190aW1lID0gamlmZmllczsKIAlwcml2LT5sYXN0X2JsaW5rX3JhdGUgPSBibGlua19pZHg7CiB9Ci1FWFBPUlRfU1lNQk9MKGl3bF9sZWRzX2JhY2tncm91bmQpOwogCiAvKiBSZWdpc3RlciBhbGwgbGVkIGhhbmRsZXIgKi8KIGludCBpd2xfbGVkc19yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC0zNTEsOCArMzUzLDggQEAKIAkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLm5hbWUpLCAiaXdsLSVzOjpyYWRpbyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCi0JcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5sZWRfb24gPSBpd2w0OTY1X2xlZF9vbl9yZWc7Ci0JcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5sZWRfb2ZmID0gaXdsNDk2NV9sZWRfb2ZmX3JlZzsKKwlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9vbiA9IGl3bF9sZWRfb25fcmVnOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubGVkX29mZiA9IGl3bF9sZWRfb2ZmX3JlZzsKIAlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9wYXR0ZXJuID0gTlVMTDsKIAogCXJldCA9IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChwcml2LCAmcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXSwKQEAgLTM4Niw3ICszODgsNyBAQAogCiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5sZWRfb24gPSBpd2xfbGVkX2Fzc29jaWF0ZWQ7CiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5sZWRfb2ZmID0gaXdsX2xlZF9hc3NvY2lhdGVkOwotCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubGVkX3BhdHRlcm4gPSBpd2w0OTY1X2xlZF9wYXR0ZXJuOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubGVkX3BhdHRlcm4gPSBpd2xfbGVkX3BhdHRlcm47CiAKIAlpZiAocmV0KQogCQlnb3RvIGV4aXRfZmFpbDsKQEAgLTQwMSw3ICs0MDMsNyBAQAogCiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5sZWRfb24gPSBpd2xfbGVkX2Fzc29jaWF0ZWQ7CiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5sZWRfb2ZmID0gaXdsX2xlZF9hc3NvY2lhdGVkOwotCXByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubGVkX3BhdHRlcm4gPSBpd2w0OTY1X2xlZF9wYXR0ZXJuOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubGVkX3BhdHRlcm4gPSBpd2xfbGVkX3BhdHRlcm47CiAKIAlpZiAocmV0KQogCQlnb3RvIGV4aXRfZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCmluZGV4IGYyZWEzZjAuLjRlYzZhODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYwpAQCAtMzYsMjUgKzM2LDQxIEBACiAjaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgogI2luY2x1ZGUgIml3bC1kZXYuaCIKICNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1pby5oIgogI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgogI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgogI2luY2x1ZGUgIml3bC1wb3dlci5oIgogCiAvKgotICogU2V0dGluZyBwb3dlciBsZXZlbCBhbGxvdyB0aGUgY2FyZCB0byBnbyB0byBzbGVlcCB3aGVuIG5vdCBidXN5LgorICogU2V0dGluZyBwb3dlciBsZXZlbCBhbGxvd3MgdGhlIGNhcmQgdG8gZ28gdG8gc2xlZXAgd2hlbiBub3QgYnVzeS4KICAqCi0gKiBUaGUgcG93ZXIgbGV2ZWwgaXMgc2V0IHRvIElOREVYXzEgKHRoZSBsZWFzdCBkZWVwIHN0YXRlKSBieQotICogZGVmYXVsdCwgYW5kIHdpbGwsIGluIHRoZSBmdXR1cmUsIGJlIHRoZSBkZWVwZXN0IHN0YXRlIHVubGVzcwotICogb3RoZXJ3aXNlIHJlcXVpcmVkIGJ5IHBtX3FvcyBuZXR3b3JrIGxhdGVuY3kgcmVxdWlyZW1lbnRzLgotICoKLSAqIFVzaW5nIElOREVYXzEgd2l0aG91dCBwbV9xb3MgaXMgb2sgYmVjYXVzZSBtYWM4MDIxMSB3aWxsIGRpc2FibGUKLSAqIFBTIHdoZW4gZXZlbiBjaGVja2luZyBldmVyeSBiZWFjb24gZm9yIHRoZSBUSU0gYml0IHdvdWxkIGV4Y2VlZAotICogdGhlIHJlcXVpcmVkIGxhdGVuY3kuCisgKiBXZSBjYWxjdWxhdGUgYSBzbGVlcCBjb21tYW5kIGJhc2VkIG9uIHRoZSByZXF1aXJlZCBsYXRlbmN5LCB3aGljaAorICogd2UgZ2V0IGZyb20gbWFjODAyMTEuIEluIG9yZGVyIHRvIGhhbmRsZSB0aGVybWFsIHRocm90dGxpbmcsIHdlIGNhbgorICogYWxzbyB1c2UgcHJlLWRlZmluZWQgcG93ZXIgbGV2ZWxzLgogICovCiAKLSNkZWZpbmUgSVdMX1BPV0VSX1JBTkdFXzBfTUFYICAoMikKLSNkZWZpbmUgSVdMX1BPV0VSX1JBTkdFXzFfTUFYICAoMTApCisvKgorICogRm9yIG5vdywga2VlcCB1c2luZyBwb3dlciBsZXZlbCAxIGluc3RlYWQgb2YgYXV0b21hdGljYWxseQorICogYWRqdXN0aW5nIC4uLgorICovCitib29sIG5vX3NsZWVwX2F1dG9hZGp1c3QgPSB0cnVlOworbW9kdWxlX3BhcmFtKG5vX3NsZWVwX2F1dG9hZGp1c3QsIGJvb2wsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhub19zbGVlcF9hdXRvYWRqdXN0LAorCQkgImRvbid0IGF1dG9tYXRpY2FsbHkgYWRqdXN0IHNsZWVwIGxldmVsICIKKwkJICJhY2NvcmRpbmcgdG8gbWF4aW11bSBuZXR3b3JrIGxhdGVuY3kiKTsKIAorLyoKKyAqIFRoaXMgZGVmaW5lcyB0aGUgb2xkIHBvd2VyIGxldmVscy4gVGhleSBhcmUgc3RpbGwgdXNlZCBieSBkZWZhdWx0CisgKiAobGV2ZWwgMSkgYW5kIGZvciB0aGVybWFsIHRocm90dGxlIChsZXZlbHMgMyB0aHJvdWdoIDUpCisgKi8KKworc3RydWN0IGl3bF9wb3dlcl92ZWNfZW50cnkgeworCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgY21kOworCXU4IG5vX2R0aW07Cit9OworCisjZGVmaW5lIElXTF9EVElNX1JBTkdFXzBfTUFYCTIKKyNkZWZpbmUgSVdMX0RUSU1fUkFOR0VfMV9NQVgJMTAKIAogI2RlZmluZSBOT1NMUCBjcHVfdG9fbGUxNigwKSwgMCwgMAogI2RlZmluZSBTTFAgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0ssIDAsIDAKQEAgLTY2LDkgKzgyLDggQEAKIAkJCQkgICAgIGNwdV90b19sZTMyKFgzKSwgXAogCQkJCSAgICAgY3B1X3RvX2xlMzIoWDQpfQogLyogZGVmYXVsdCBwb3dlciBtYW5hZ2VtZW50IChub3QgVHggcG93ZXIpIHRhYmxlIHZhbHVlcyAqLwotLyogZm9yIERUSU0gcGVyaW9kIDAgdGhyb3VnaCBJV0xfUE9XRVJfUkFOR0VfMF9NQVggKi8KKy8qIGZvciBEVElNIHBlcmlvZCAwIHRocm91Z2ggSVdMX0RUSU1fUkFOR0VfMF9NQVggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSByYW5nZV8wW0lXTF9QT1dFUl9OVU1dID0gewotCXt7Tk9TTFAsIFNMUF9UT1VUKDApLCBTTFBfVE9VVCgwKSwgU0xQX1ZFQygwLCAwLCAwLCAwLCAwKX0sIDB9LAogCXt7U0xQLCBTTFBfVE9VVCgyMDApLCBTTFBfVE9VVCg1MDApLCBTTFBfVkVDKDEsIDIsIDIsIDIsIDB4RkYpfSwgMH0sCiAJe3tTTFAsIFNMUF9UT1VUKDIwMCksIFNMUF9UT1VUKDMwMCksIFNMUF9WRUMoMSwgMiwgMiwgMiwgMHhGRil9LCAwfSwKIAl7e1NMUCwgU0xQX1RPVVQoNTApLCBTTFBfVE9VVCgxMDApLCBTTFBfVkVDKDIsIDIsIDIsIDIsIDB4RkYpfSwgMH0sCkBAIC03Nyw5ICs5Miw4IEBACiB9OwogCiAKLS8qIGZvciBEVElNIHBlcmlvZCBJV0xfUE9XRVJfUkFOR0VfMF9NQVggKyAxIHRocm91Z2ggSVdMX1BPV0VSX1JBTkdFXzFfTUFYICovCisvKiBmb3IgRFRJTSBwZXJpb2QgSVdMX0RUSU1fUkFOR0VfMF9NQVggKyAxIHRocm91Z2ggSVdMX0RUSU1fUkFOR0VfMV9NQVggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSByYW5nZV8xW0lXTF9QT1dFUl9OVU1dID0gewotCXt7Tk9TTFAsIFNMUF9UT1VUKDApLCBTTFBfVE9VVCgwKSwgU0xQX1ZFQygwLCAwLCAwLCAwLCAwKX0sIDB9LAogCXt7U0xQLCBTTFBfVE9VVCgyMDApLCBTTFBfVE9VVCg1MDApLCBTTFBfVkVDKDEsIDIsIDMsIDQsIDQpfSwgMH0sCiAJe3tTTFAsIFNMUF9UT1VUKDIwMCksIFNMUF9UT1VUKDMwMCksIFNMUF9WRUMoMSwgMiwgMywgNCwgNyl9LCAwfSwKIAl7e1NMUCwgU0xQX1RPVVQoNTApLCBTTFBfVE9VVCgxMDApLCBTTFBfVkVDKDIsIDQsIDYsIDcsIDkpfSwgMH0sCkBAIC04Nyw5ICsxMDEsOCBAQAogCXt7U0xQLCBTTFBfVE9VVCgyNSksIFNMUF9UT1VUKDI1KSwgU0xQX1ZFQygyLCA0LCA3LCAxMCwgMTApfSwgMn0KIH07CiAKLS8qIGZvciBEVElNIHBlcmlvZCA+IElXTF9QT1dFUl9SQU5HRV8xX01BWCAqLworLyogZm9yIERUSU0gcGVyaW9kID4gSVdMX0RUSU1fUkFOR0VfMV9NQVggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSByYW5nZV8yW0lXTF9QT1dFUl9OVU1dID0gewotCXt7Tk9TTFAsIFNMUF9UT1VUKDApLCBTTFBfVE9VVCgwKSwgU0xQX1ZFQygwLCAwLCAwLCAwLCAwKX0sIDB9LAogCXt7U0xQLCBTTFBfVE9VVCgyMDApLCBTTFBfVE9VVCg1MDApLCBTTFBfVkVDKDEsIDIsIDMsIDQsIDB4RkYpfSwgMH0sCiAJe3tTTFAsIFNMUF9UT1VUKDIwMCksIFNMUF9UT1VUKDMwMCksIFNMUF9WRUMoMiwgNCwgNiwgNywgMHhGRil9LCAwfSwKIAl7e1NMUCwgU0xQX1RPVVQoNTApLCBTTFBfVE9VVCgxMDApLCBTTFBfVkVDKDIsIDcsIDksIDksIDB4RkYpfSwgMH0sCkBAIC05Nyw4MCArMTEwLDI5IEBACiAJe3tTTFAsIFNMUF9UT1VUKDI1KSwgU0xQX1RPVVQoMjUpLCBTTFBfVkVDKDQsIDcsIDEwLCAxMCwgMHhGRil9LCAwfQogfTsKIAotCi0vKiBzZXQgY2FyZCBwb3dlciBjb21tYW5kICovCi1zdGF0aWMgaW50IGl3bF9zZXRfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCB2b2lkICpjbWQpCitzdGF0aWMgdm9pZCBpd2xfc3RhdGljX3NsZWVwX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgKmNtZCwKKwkJCQkgZW51bSBpd2xfcG93ZXJfbGV2ZWwgbHZsLCBpbnQgcGVyaW9kKQogewotCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFBPV0VSX1RBQkxFX0NNRCwKLQkJCQlzaXplb2Yoc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCksIGNtZCk7Ci19Ci0KLS8qIGluaXRpYWxpemUgdG8gZGVmYXVsdCAqLwotc3RhdGljIHZvaWQgaXdsX3Bvd2VyX2luaXRfaGFuZGxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsX3Bvd2VyX21nciAqcG93X2RhdGE7Ci0JaW50IHNpemUgPSBzaXplb2Yoc3RydWN0IGl3bF9wb3dlcl92ZWNfZW50cnkpICogSVdMX1BPV0VSX05VTTsKLQlzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kICpjbWQ7Ci0JaW50IGk7Ci0JdTE2IGxjdGw7Ci0KLQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKLQotCXBvd19kYXRhID0gJnByaXYtPnBvd2VyX2RhdGE7Ci0KLQltZW1zZXQocG93X2RhdGEsIDAsIHNpemVvZigqcG93X2RhdGEpKTsKLQotCW1lbWNweSgmcG93X2RhdGEtPnB3cl9yYW5nZV8wWzBdLCAmcmFuZ2VfMFswXSwgc2l6ZSk7Ci0JbWVtY3B5KCZwb3dfZGF0YS0+cHdyX3JhbmdlXzFbMF0sICZyYW5nZV8xWzBdLCBzaXplKTsKLQltZW1jcHkoJnBvd19kYXRhLT5wd3JfcmFuZ2VfMlswXSwgJnJhbmdlXzJbMF0sIHNpemUpOwotCi0JbGN0bCA9IGl3bF9wY2llX2xpbmtfY3RsKHByaXYpOwotCi0JSVdMX0RFQlVHX1BPV0VSKHByaXYsICJhZGp1c3QgcG93ZXIgY29tbWFuZCBmbGFnc1xuIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX05VTTsgaSsrKSB7Ci0JCWNtZCA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbaV0uY21kOwotCi0JCWlmIChsY3RsICYgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wwU19FTikKLQkJCWNtZC0+ZmxhZ3MgJj0gfklXTF9QT1dFUl9QQ0lfUE1fTVNLOwotCQllbHNlCi0JCQljbWQtPmZsYWdzIHw9IElXTF9QT1dFUl9QQ0lfUE1fTVNLOwotCX0KLX0KLQotLyogYWRqdXN0IHBvd2VyIGNvbW1hbmQgYWNjb3JkaW5nIHRvIERUSU0gcGVyaW9kIGFuZCBwb3dlciBsZXZlbCovCi1zdGF0aWMgaW50IGl3bF91cGRhdGVfcG93ZXJfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kICpjbWQsIHUxNiBtb2RlKQotewotCXN0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5ICpyYW5nZTsKLQlzdHJ1Y3QgaXdsX3Bvd2VyX21nciAqcG93X2RhdGE7Ci0JaW50IGk7Ci0JdTMyIG1heF9zbGVlcCA9IDA7Ci0JdTggcGVyaW9kOworCWNvbnN0IHN0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5ICp0YWJsZTsKKwlpbnQgbWF4X3NsZWVwLCBpOwogCWJvb2wgc2tpcDsKIAotCWlmIChtb2RlID4gSVdMX1BPV0VSX0lOREVYXzUpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJFcnJvciBpbnZhbGlkIHBvd2VyIG1vZGUgXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCXRhYmxlID0gcmFuZ2VfMjsKKwlpZiAocGVyaW9kIDwgSVdMX0RUSU1fUkFOR0VfMV9NQVgpCisJCXRhYmxlID0gcmFuZ2VfMTsKKwlpZiAocGVyaW9kIDwgSVdMX0RUSU1fUkFOR0VfMF9NQVgpCisJCXRhYmxlID0gcmFuZ2VfMDsKIAotCXBvd19kYXRhID0gJnByaXYtPnBvd2VyX2RhdGE7CisJQlVHX09OKGx2bCA8IDAgfHwgbHZsID49IElXTF9QT1dFUl9OVU0pOwogCi0JaWYgKHBvd19kYXRhLT5kdGltX3BlcmlvZCA8PSBJV0xfUE9XRVJfUkFOR0VfMF9NQVgpCi0JCXJhbmdlID0gJnBvd19kYXRhLT5wd3JfcmFuZ2VfMFswXTsKLQllbHNlIGlmIChwb3dfZGF0YS0+ZHRpbV9wZXJpb2QgPD0gSVdMX1BPV0VSX1JBTkdFXzFfTUFYKQotCQlyYW5nZSA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzFbMF07Ci0JZWxzZQotCQlyYW5nZSA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzJbMF07Ci0KLQlwZXJpb2QgPSBwb3dfZGF0YS0+ZHRpbV9wZXJpb2Q7Ci0JbWVtY3B5KGNtZCwgJnJhbmdlW21vZGVdLmNtZCwgc2l6ZW9mKHN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQpKTsKKwkqY21kID0gdGFibGVbbHZsXS5jbWQ7CiAKIAlpZiAocGVyaW9kID09IDApIHsKLQkJcGVyaW9kID0gMTsKIAkJc2tpcCA9IGZhbHNlOworCQlwZXJpb2QgPSAxOwogCX0gZWxzZSB7Ci0JCXNraXAgPSAhIXJhbmdlW21vZGVdLm5vX2R0aW07CisJCXNraXAgPSAhIXRhYmxlW2x2bF0ubm9fZHRpbTsKIAl9CiAKIAlpZiAoc2tpcCkgewpAQCAtMTc4LDcgKzE0MCw3IEBACiAJCW1heF9zbGVlcCA9IGxlMzJfdG9fY3B1KHNscF9pdHJ2bCk7CiAJCWlmIChtYXhfc2xlZXAgPT0gMHhGRikKIAkJCW1heF9zbGVlcCA9IHBlcmlvZCAqIChza2lwICsgMSk7Ci0JCWVsc2UgaWYgKG1heF9zbGVlcCA+ICBwZXJpb2QpCisJCWVsc2UgaWYgKG1heF9zbGVlcCA+IHBlcmlvZCkKIAkJCW1heF9zbGVlcCA9IChsZTMyX3RvX2NwdShzbHBfaXRydmwpIC8gcGVyaW9kKSAqIHBlcmlvZDsKIAkJY21kLT5mbGFncyB8PSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKIAl9IGVsc2UgewpAQCAtMTkwLDYgKzE1MiwxMTIgQEAKIAkJaWYgKGxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbaV0pID4gbWF4X3NsZWVwKQogCQkJY21kLT5zbGVlcF9pbnRlcnZhbFtpXSA9IGNwdV90b19sZTMyKG1heF9zbGVlcCk7CiAKKwlpZiAocHJpdi0+cG93ZXJfZGF0YS5wY2lfcG0pCisJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1BDSV9QTV9NU0s7CisJZWxzZQorCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfUENJX1BNX01TSzsKKworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiU2xlZXAgY29tbWFuZCBmb3IgaW5kZXggJWRcbiIsIGx2bCArIDEpOworfQorCisvKiBkZWZhdWx0IFRoZXJtYWwgVGhyb3R0bGluZyB0cmFuc2FjdGlvbiB0YWJsZQorICogQ3VycmVudCBzdGF0ZSAgIHwgICAgICAgICBUaHJvdHRsaW5nIERvd24gICAgICAgICAgICAgICB8ICBUaHJvdHRsaW5nIFVwCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgQ29uZGl0aW9uIE54dCBTdGF0ZSAgQ29uZGl0aW9uIE54dCBTdGF0ZSBDb25kaXRpb24gTnh0IFN0YXRlCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgSVdMX1RJXzAgICAgIFQgPj0gMTE1ICAgQ1RfS0lMTCAgMTE1PlQ+PTEwNSAgIFRJXzEgICAgICBOL0EgICAgICBOL0EKKyAqICAgICBJV0xfVElfMSAgICAgVCA+PSAxMTUgICBDVF9LSUxMICAxMTU+VD49MTEwICAgVElfMiAgICAgVDw9OTUgICAgIFRJXzAKKyAqICAgICBJV0xfVElfMiAgICAgVCA+PSAxMTUgICBDVF9LSUxMICAgICAgICAgICAgICAgICAgICAgICAgVDw9MTAwICAgIFRJXzEKKyAqICAgIElXTF9DVF9LSUxMICAgICAgTi9BICAgICAgIE4vQSAgICAgICBOL0EgICAgICAgIE4vQSAgICAgVDw9OTUgICAgIFRJXzAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfdHRfdHJhbnMgdHRfcmFuZ2VfMFtJV0xfVElfU1RBVEVfTUFYIC0gMV0gPSB7CisJe0lXTF9USV8wLCBJV0xfQUJTT0xVVEVfWkVSTywgMTA0fSwKKwl7SVdMX1RJXzEsIDEwNSwgQ1RfS0lMTF9USFJFU0hPTER9LAorCXtJV0xfVElfQ1RfS0lMTCwgQ1RfS0lMTF9USFJFU0hPTEQgKyAxLCBJV0xfQUJTT0xVVEVfTUFYfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3R0X3RyYW5zIHR0X3JhbmdlXzFbSVdMX1RJX1NUQVRFX01BWCAtIDFdID0geworCXtJV0xfVElfMCwgSVdMX0FCU09MVVRFX1pFUk8sIDk1fSwKKwl7SVdMX1RJXzIsIDExMCwgQ1RfS0lMTF9USFJFU0hPTER9LAorCXtJV0xfVElfQ1RfS0lMTCwgQ1RfS0lMTF9USFJFU0hPTEQgKyAxLCBJV0xfQUJTT0xVVEVfTUFYfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3R0X3RyYW5zIHR0X3JhbmdlXzJbSVdMX1RJX1NUQVRFX01BWCAtIDFdID0geworCXtJV0xfVElfMSwgSVdMX0FCU09MVVRFX1pFUk8sIDEwMH0sCisJe0lXTF9USV9DVF9LSUxMLCBDVF9LSUxMX1RIUkVTSE9MRCArIDEsIElXTF9BQlNPTFVURV9NQVh9LAorCXtJV0xfVElfQ1RfS0lMTCwgQ1RfS0lMTF9USFJFU0hPTEQgKyAxLCBJV0xfQUJTT0xVVEVfTUFYfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3R0X3RyYW5zIHR0X3JhbmdlXzNbSVdMX1RJX1NUQVRFX01BWCAtIDFdID0geworCXtJV0xfVElfMCwgSVdMX0FCU09MVVRFX1pFUk8sIENUX0tJTExfRVhJVF9USFJFU0hPTER9LAorCXtJV0xfVElfQ1RfS0lMTCwgQ1RfS0lMTF9FWElUX1RIUkVTSE9MRCArIDEsIElXTF9BQlNPTFVURV9NQVh9LAorCXtJV0xfVElfQ1RfS0lMTCwgQ1RfS0lMTF9FWElUX1RIUkVTSE9MRCArIDEsIElXTF9BQlNPTFVURV9NQVh9Cit9OworCisvKiBBZHZhbmNlIFRoZXJtYWwgVGhyb3R0bGluZyBkZWZhdWx0IHJlc3RyaWN0aW9uIHRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF90dF9yZXN0cmljdGlvbiByZXN0cmljdGlvbl9yYW5nZVtJV0xfVElfU1RBVEVfTUFYXSA9IHsKKwl7SVdMX0FOVF9PS19NVUxUSSwgSVdMX0FOVF9PS19NVUxUSSwgdHJ1ZSB9LAorCXtJV0xfQU5UX09LX1NJTkdMRSwgSVdMX0FOVF9PS19NVUxUSSwgdHJ1ZSB9LAorCXtJV0xfQU5UX09LX1NJTkdMRSwgSVdMX0FOVF9PS19TSU5HTEUsIGZhbHNlIH0sCisJe0lXTF9BTlRfT0tfTk9ORSwgSVdMX0FOVF9PS19OT05FLCBmYWxzZSB9Cit9OworCisKK3N0YXRpYyB2b2lkIGl3bF9wb3dlcl9zbGVlcF9jYW1fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kKQoreworCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CisKKwlpZiAocHJpdi0+cG93ZXJfZGF0YS5wY2lfcG0pCisJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1BDSV9QTV9NU0s7CisKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlNsZWVwIGNvbW1hbmQgZm9yIENBTVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGl3bF9wb3dlcl9maWxsX3NsZWVwX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kICpjbWQsCisJCQkJICAgICBpbnQgZHlucHNfbXMsIGludCB3YWtldXBfcGVyaW9kKQoreworCS8qCisJICogVGhlc2UgYXJlIHRoZSBvcmlnaW5hbCBwb3dlciBsZXZlbCAzIHNsZWVwIHN1Y2Nlc3Npb25zLiBUaGUKKwkgKiBkZXZpY2UgbWF5IGJlaGF2ZSBiZXR0ZXIgd2l0aCBzdWNoIHN1Y2Nlc3Npb24gYW5kIHdhcyBhbHNvCisJICogb25seSB0ZXN0ZWQgd2l0aCB0aGF0LiBKdXN0IGxpa2UgdGhlIG9yaWdpbmFsIHNsZWVwIGNvbW1hbmRzLAorCSAqIGFsc28gYWRqdXN0IHRoZSBzdWNjZXNzaW9uIGhlcmUgdG8gdGhlIHdha2V1cF9wZXJpb2QgYmVsb3cuCisJICogVGhlIHJhbmdlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBzbGVlcCBjb21tYW5kcywgMC0yLCAzLTkKKwkgKiBhbmQgPjEwLCB3aGljaCBpcyBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgRFRJTSBpbnRlcnZhbCBmb3IKKwkgKiB0aGUgc2xlZXAgaW5kZXggYnV0IGhlcmUgd2UgdXNlIHRoZSB3YWtldXAgcGVyaW9kIHNpbmNlIHRoYXQKKwkgKiBpcyB3aGF0IHdlIG5lZWQgdG8gZG8gZm9yIHRoZSBsYXRlbmN5IHJlcXVpcmVtZW50cy4KKwkgKi8KKwlzdGF0aWMgY29uc3QgdTggc2xwX3N1Y2NfcjBbSVdMX1BPV0VSX1ZFQ19TSVpFXSA9IHsgMiwgMiwgMiwgMiwgMiB9OworCXN0YXRpYyBjb25zdCB1OCBzbHBfc3VjY19yMVtJV0xfUE9XRVJfVkVDX1NJWkVdID0geyAyLCA0LCA2LCA3LCA5IH07CisJc3RhdGljIGNvbnN0IHU4IHNscF9zdWNjX3IyW0lXTF9QT1dFUl9WRUNfU0laRV0gPSB7IDIsIDcsIDksIDksIDB4RkYgfTsKKwljb25zdCB1OCAqc2xwX3N1Y2MgPSBzbHBfc3VjY19yMDsKKwlpbnQgaTsKKworCWlmICh3YWtldXBfcGVyaW9kID4gSVdMX0RUSU1fUkFOR0VfMF9NQVgpCisJCXNscF9zdWNjID0gc2xwX3N1Y2NfcjE7CisJaWYgKHdha2V1cF9wZXJpb2QgPiBJV0xfRFRJTV9SQU5HRV8xX01BWCkKKwkJc2xwX3N1Y2MgPSBzbHBfc3VjY19yMjsKKworCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CisKKwljbWQtPmZsYWdzID0gSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sgfAorCQkgICAgIElXTF9QT1dFUl9GQVNUX1BEOyAvKiBubyB1c2Ugc2VlaW5nIGZyYW1lcyBmb3Igb3RoZXJzICovCisKKwlpZiAocHJpdi0+cG93ZXJfZGF0YS5wY2lfcG0pCisJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1BDSV9QTV9NU0s7CisKKwljbWQtPnJ4X2RhdGFfdGltZW91dCA9IGNwdV90b19sZTMyKDEwMDAgKiBkeW5wc19tcyk7CisJY21kLT50eF9kYXRhX3RpbWVvdXQgPSBjcHVfdG9fbGUzMigxMDAwICogZHlucHNfbXMpOworCisJZm9yIChpID0gMDsgaSA8IElXTF9QT1dFUl9WRUNfU0laRTsgaSsrKQorCQljbWQtPnNsZWVwX2ludGVydmFsW2ldID0KKwkJCWNwdV90b19sZTMyKG1pbl90KGludCwgc2xwX3N1Y2NbaV0sIHdha2V1cF9wZXJpb2QpKTsKKworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiQXV0b21hdGljIHNsZWVwIGNvbW1hbmRcbiIpOworfQorCitzdGF0aWMgaW50IGl3bF9zZXRfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kICpjbWQpCit7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTZW5kaW5nIHBvd2VyL3NsZWVwIGNvbW1hbmRcbiIpOwogCUlXTF9ERUJVR19QT1dFUihwcml2LCAiRmxhZ3MgdmFsdWUgPSAweCUwOFhcbiIsIGNtZC0+ZmxhZ3MpOwogCUlXTF9ERUJVR19QT1dFUihwcml2LCAiVHggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnR4X2RhdGFfdGltZW91dCkpOwogCUlXTF9ERUJVR19QT1dFUihwcml2LCAiUnggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnJ4X2RhdGFfdGltZW91dCkpOwpAQCAtMjAwLDc5ICsyNjgsNTg3IEBACiAJCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzNdKSwKIAkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbNF0pKTsKIAotCXJldHVybiAwOworCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFBPV0VSX1RBQkxFX0NNRCwKKwkJCQlzaXplb2Yoc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCksIGNtZCk7CiB9CiAKIAotLyoKLSAqIGNvbXB1dGUgdGhlIGZpbmFsIHBvd2VyIG1vZGUgaW5kZXgKLSAqLwogaW50IGl3bF9wb3dlcl91cGRhdGVfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgZm9yY2UpCiB7Ci0Jc3RydWN0IGl3bF9wb3dlcl9tZ3IgKnNldHRpbmcgPSAmKHByaXYtPnBvd2VyX2RhdGEpOwogCWludCByZXQgPSAwOwotCXUxNiB1bmluaXRpYWxpemVkX3ZhcihmaW5hbF9tb2RlKTsKKwlzdHJ1Y3QgaXdsX3R0X21nbXQgKnR0ID0gJnByaXYtPnRoZXJtYWxfdGhyb3R0bGU7CisJYm9vbCBlbmFibGVkID0gKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkJCShwcml2LT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKTsKIAlib29sIHVwZGF0ZV9jaGFpbnM7CisJc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCBjbWQ7CisJaW50IGR0aW1wZXI7CiAKIAkvKiBEb24ndCB1cGRhdGUgdGhlIFJYIGNoYWluIHdoZW4gY2hhaW4gbm9pc2UgY2FsaWJyYXRpb24gaXMgcnVubmluZyAqLwogCXVwZGF0ZV9jaGFpbnMgPSBwcml2LT5jaGFpbl9ub2lzZV9kYXRhLnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9ET05FIHx8CiAJCQlwcml2LT5jaGFpbl9ub2lzZV9kYXRhLnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9BTElWRTsKIAotCWZpbmFsX21vZGUgPSBwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZzsKKwlpZiAocHJpdi0+dmlmKQorCQlkdGltcGVyID0gcHJpdi0+dmlmLT5ic3NfY29uZi5kdGltX3BlcmlvZDsKKwllbHNlCisJCWR0aW1wZXIgPSAxOwogCi0JaWYgKHNldHRpbmctPnBvd2VyX2Rpc2FibGVkKQotCQlmaW5hbF9tb2RlID0gSVdMX1BPV0VSX01PREVfQ0FNOworCS8qIFRUIHBvd2VyIHNldHRpbmcgb3ZlcndyaXRlcyBldmVyeXRoaW5nICovCisJaWYgKHR0LT5zdGF0ZSA+PSBJV0xfVElfMSkKKwkJaXdsX3N0YXRpY19zbGVlcF9jbWQocHJpdiwgJmNtZCwgdHQtPnR0X3Bvd2VyX21vZGUsIGR0aW1wZXIpOworCWVsc2UgaWYgKCFlbmFibGVkKQorCQlpd2xfcG93ZXJfc2xlZXBfY2FtX2NtZChwcml2LCAmY21kKTsKKwllbHNlIGlmIChwcml2LT5wb3dlcl9kYXRhLmRlYnVnX3NsZWVwX2xldmVsX292ZXJyaWRlID49IDApCisJCWl3bF9zdGF0aWNfc2xlZXBfY21kKHByaXYsICZjbWQsCisJCQkJICAgICBwcml2LT5wb3dlcl9kYXRhLmRlYnVnX3NsZWVwX2xldmVsX292ZXJyaWRlLAorCQkJCSAgICAgZHRpbXBlcik7CisJZWxzZSBpZiAobm9fc2xlZXBfYXV0b2FkanVzdCkKKwkJaXdsX3N0YXRpY19zbGVlcF9jbWQocHJpdiwgJmNtZCwgSVdMX1BPV0VSX0lOREVYXzEsIGR0aW1wZXIpOworCWVsc2UKKwkJaXdsX3Bvd2VyX2ZpbGxfc2xlZXBfY21kKHByaXYsICZjbWQsCisJCQkJCSBwcml2LT5ody0+Y29uZi5keW5hbWljX3BzX3RpbWVvdXQsCisJCQkJCSBwcml2LT5ody0+Y29uZi5tYXhfc2xlZXBfcGVyaW9kKTsKIAogCWlmIChpd2xfaXNfcmVhZHlfcmYocHJpdikgJiYKLQkgICAgKChzZXR0aW5nLT5wb3dlcl9tb2RlICE9IGZpbmFsX21vZGUpIHx8IGZvcmNlKSkgewotCQlzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kIGNtZDsKLQotCQlpZiAoZmluYWxfbW9kZSAhPSBJV0xfUE9XRVJfTU9ERV9DQU0pCisJICAgIChtZW1jbXAoJnByaXYtPnBvd2VyX2RhdGEuc2xlZXBfY21kLCAmY21kLCBzaXplb2YoY21kKSkgfHwgZm9yY2UpKSB7CisJCWlmIChjbWQuZmxhZ3MgJiBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSykKIAkJCXNldF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cyk7CiAKLQkJaXdsX3VwZGF0ZV9wb3dlcl9jbWQocHJpdiwgJmNtZCwgZmluYWxfbW9kZSk7Ci0JCWNtZC5rZWVwX2FsaXZlX2JlYWNvbnMgPSAwOwotCi0JCWlmIChmaW5hbF9tb2RlID09IElXTF9QT1dFUl9JTkRFWF81KQotCQkJY21kLmZsYWdzIHw9IElXTF9QT1dFUl9GQVNUX1BEOwotCiAJCXJldCA9IGl3bF9zZXRfcG93ZXIocHJpdiwgJmNtZCk7CisJCWlmICghcmV0KSB7CisJCQlpZiAoIShjbWQuZmxhZ3MgJiBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSykpCisJCQkJY2xlYXJfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpOwogCi0JCWlmIChmaW5hbF9tb2RlID09IElXTF9QT1dFUl9NT0RFX0NBTSkKLQkJCWNsZWFyX2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKTsKLQotCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dXBkYXRlX2NoYWluX2ZsYWdzICYmIHVwZGF0ZV9jaGFpbnMpCi0JCQlwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MocHJpdik7Ci0JCWVsc2UKLQkJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiQ2Fubm90IHVwZGF0ZSB0aGUgcG93ZXIsIGNoYWluIG5vaXNlICIKKwkJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MgJiYKKwkJCSAgICB1cGRhdGVfY2hhaW5zKQorCQkJCXByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9jaGFpbl9mbGFncyhwcml2KTsKKwkJCWVsc2UgaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9jaGFpbl9mbGFncykKKwkJCQlJV0xfREVCVUdfUE9XRVIocHJpdiwKKwkJCQkJIkNhbm5vdCB1cGRhdGUgdGhlIHBvd2VyLCBjaGFpbiBub2lzZSAiCiAJCQkJCSJjYWxpYnJhdGlvbiBydW5uaW5nOiAlZFxuIiwKIAkJCQkJcHJpdi0+Y2hhaW5fbm9pc2VfZGF0YS5zdGF0ZSk7Ci0JCWlmICghcmV0KQotCQkJc2V0dGluZy0+cG93ZXJfbW9kZSA9IGZpbmFsX21vZGU7CisJCQltZW1jcHkoJnByaXYtPnBvd2VyX2RhdGEuc2xlZXBfY21kLCAmY21kLCBzaXplb2YoY21kKSk7CisJCX0gZWxzZQorCQkJSVdMX0VSUihwcml2LCAic2V0IHBvd2VyIGZhaWwsIHJldCA9ICVkIiwgcmV0KTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpd2xfcG93ZXJfdXBkYXRlX21vZGUpOwogCi0vKiBzZXQgdXNlcl9wb3dlcl9zZXR0aW5nICovCi1pbnQgaXdsX3Bvd2VyX3NldF91c2VyX21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgbW9kZSkKK2Jvb2wgaXdsX2h0X2VuYWJsZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWlmIChtb2RlID49IElXTF9QT1dFUl9OVU0pCi0JCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBpd2xfdHRfbWdtdCAqdHQgPSAmcHJpdi0+dGhlcm1hbF90aHJvdHRsZTsKKwlzdHJ1Y3QgaXdsX3R0X3Jlc3RyaWN0aW9uICpyZXN0cmljdGlvbjsKIAotCXByaXYtPnBvd2VyX2RhdGEudXNlcl9wb3dlcl9zZXR0aW5nID0gbW9kZTsKLQotCXJldHVybiBpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgMCk7CisJaWYgKCFwcml2LT50aGVybWFsX3Rocm90dGxlLmFkdmFuY2VkX3R0KQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXN0cmljdGlvbiA9IHR0LT5yZXN0cmljdGlvbiArIHR0LT5zdGF0ZTsKKwlyZXR1cm4gcmVzdHJpY3Rpb24tPmlzX2h0OwogfQotRVhQT1JUX1NZTUJPTChpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZSk7CitFWFBPUlRfU1lNQk9MKGl3bF9odF9lbmFibGVkKTsKKworZW51bSBpd2xfYW50ZW5uYV9vayBpd2xfdHhfYW50X3Jlc3RyaWN0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsX3R0X21nbXQgKnR0ID0gJnByaXYtPnRoZXJtYWxfdGhyb3R0bGU7CisJc3RydWN0IGl3bF90dF9yZXN0cmljdGlvbiAqcmVzdHJpY3Rpb247CisKKwlpZiAoIXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuYWR2YW5jZWRfdHQpCisJCXJldHVybiBJV0xfQU5UX09LX01VTFRJOworCXJlc3RyaWN0aW9uID0gdHQtPnJlc3RyaWN0aW9uICsgdHQtPnN0YXRlOworCXJldHVybiByZXN0cmljdGlvbi0+dHhfc3RyZWFtOworfQorRVhQT1JUX1NZTUJPTChpd2xfdHhfYW50X3Jlc3RyaWN0aW9uKTsKKworZW51bSBpd2xfYW50ZW5uYV9vayBpd2xfcnhfYW50X3Jlc3RyaWN0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsX3R0X21nbXQgKnR0ID0gJnByaXYtPnRoZXJtYWxfdGhyb3R0bGU7CisJc3RydWN0IGl3bF90dF9yZXN0cmljdGlvbiAqcmVzdHJpY3Rpb247CisKKwlpZiAoIXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuYWR2YW5jZWRfdHQpCisJCXJldHVybiBJV0xfQU5UX09LX01VTFRJOworCXJlc3RyaWN0aW9uID0gdHQtPnJlc3RyaWN0aW9uICsgdHQtPnN0YXRlOworCXJldHVybiByZXN0cmljdGlvbi0+cnhfc3RyZWFtOworfQorCisjZGVmaW5lIENUX0tJTExfRVhJVF9EVVJBVElPTiAoNSkJLyogNSBzZWNvbmRzIGR1cmF0aW9uICovCisKKy8qCisgKiB0b2dnbGUgdGhlIGJpdCB0byB3YWtlIHVwIHVDb2RlIGFuZCBjaGVjayB0aGUgdGVtcGVyYXR1cmUKKyAqIGlmIHRoZSB0ZW1wZXJhdHVyZSBpcyBiZWxvdyBDVCwgdUNvZGUgd2lsbCBzdGF5IGF3YWtlIGFuZCBzZW5kIGNhcmQKKyAqIHN0YXRlIG5vdGlmaWNhdGlvbiB3aXRoIENUX0tJTEwgYml0IGNsZWFyIHRvIGluZm9ybSBUaGVybWFsIFRocm90dGxpbmcKKyAqIE1hbmFnZW1lbnQgdG8gY2hhbmdlIHN0YXRlLiBPdGhlcndpc2UsIHVDb2RlIHdpbGwgZ28gYmFjayB0byBzbGVlcAorICogd2l0aG91dCBkb2luZyBhbnl0aGluZywgZHJpdmVyIHNob3VsZCBjb250aW51ZSB0aGUgNSBzZWNvbmRzIHRpbWVyCisgKiB0byB3YWtlIHVwIHVDb2RlIGZvciB0ZW1wZXJhdHVyZSBjaGVjayB1bnRpbCB0ZW1wZXJhdHVyZSBkcm9wIGJlbG93IENUCisgKi8KK3N0YXRpYyB2b2lkIGl3bF90dF9jaGVja19leGl0X2N0X2tpbGwodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkYXRhOworCXN0cnVjdCBpd2xfdHRfbWdtdCAqdHQgPSAmcHJpdi0+dGhlcm1hbF90aHJvdHRsZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlpZiAodHQtPnN0YXRlID09IElXTF9USV9DVF9LSUxMKSB7CisJCWlmIChwcml2LT50aGVybWFsX3Rocm90dGxlLmN0X2tpbGxfdG9nZ2xlKSB7CisJCQlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsCisJCQkJICAgIENTUl9VQ09ERV9EUlZfR1AxX1JFR19CSVRfQ1RfS0lMTF9FWElUKTsKKwkJCXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF90b2dnbGUgPSBmYWxzZTsKKwkJfSBlbHNlIHsKKwkJCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKKwkJCQkgICAgQ1NSX1VDT0RFX0RSVl9HUDFfUkVHX0JJVF9DVF9LSUxMX0VYSVQpOworCQkJcHJpdi0+dGhlcm1hbF90aHJvdHRsZS5jdF9raWxsX3RvZ2dsZSA9IHRydWU7CisJCX0KKwkJaXdsX3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCQlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpCisJCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCisJCS8qIFJlc2NoZWR1bGUgdGhlIGN0X2tpbGwgdGltZXIgdG8gb2NjdXIgaW4KKwkJICogQ1RfS0lMTF9FWElUX0RVUkFUSU9OIHNlY29uZHMgdG8gZW5zdXJlIHdlIGdldCBhCisJCSAqIHRoZXJtYWwgdXBkYXRlICovCisJCW1vZF90aW1lcigmcHJpdi0+dGhlcm1hbF90aHJvdHRsZS5jdF9raWxsX2V4aXRfdG0sIGppZmZpZXMgKworCQkJICBDVF9LSUxMX0VYSVRfRFVSQVRJT04gKiBIWik7CisJfQorfQorCitzdGF0aWMgdm9pZCBpd2xfcGVyZm9ybV9jdF9raWxsX3Rhc2soc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgYm9vbCBzdG9wKQoreworCWlmIChzdG9wKSB7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiU3RvcCBhbGwgcXVldWVzXG4iKTsKKwkJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpCisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi0+aHcpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwKKwkJCQkiU2NoZWR1bGUgNSBzZWNvbmRzIENUX0tJTEwgVGltZXJcbiIpOworCQltb2RfdGltZXIoJnByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF9leGl0X3RtLCBqaWZmaWVzICsKKwkJCSAgQ1RfS0lMTF9FWElUX0RVUkFUSU9OICogSFopOworCX0gZWxzZSB7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiV2FrZSBhbGwgcXVldWVzXG4iKTsKKwkJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOworCX0KK30KKworI2RlZmluZSBJV0xfTUlOSU1BTF9QT1dFUl9USFJFU0hPTEQJCShDVF9LSUxMX1RIUkVTSE9MRF9MRUdBQ1kpCisjZGVmaW5lIElXTF9SRURVQ0VEX1BFUkZPUk1BTkNFX1RIUkVTSE9MRF8yCSgxMDApCisjZGVmaW5lIElXTF9SRURVQ0VEX1BFUkZPUk1BTkNFX1RIUkVTSE9MRF8xCSg5MCkKKworLyoKKyAqIExlZ2FjeSB0aGVybWFsIHRocm90dGxpbmcKKyAqIDEpIEF2b2lkIE5JQyBkZXN0cnVjdGlvbiBkdWUgdG8gaGlnaCB0ZW1wZXJhdHVyZXMKKyAqCUNoaXAgd2lsbCBpZGVudGlmeSBkYW5nZXJvdXNseSBoaWdoIHRlbXBlcmF0dXJlcyB0aGF0IGNhbgorICoJaGFybSB0aGUgZGV2aWNlIGFuZCB3aWxsIHBvd2VyIGRvd24KKyAqIDIpIEF2b2lkIHRoZSBOSUMgcG93ZXIgZG93biBkdWUgdG8gaGlnaCB0ZW1wZXJhdHVyZQorICoJVGhyb3R0bGUgZWFybHkgZW5vdWdoIHRvIGxvd2VyIHRoZSBwb3dlciBjb25zdW1wdGlvbiBiZWZvcmUKKyAqCWRyYXN0aWMgc3RlcHMgYXJlIG5lZWRlZAorICovCitzdGF0aWMgdm9pZCBpd2xfbGVnYWN5X3R0X2hhbmRsZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzMzIgdGVtcCkKK3sKKwlzdHJ1Y3QgaXdsX3R0X21nbXQgKnR0ID0gJnByaXYtPnRoZXJtYWxfdGhyb3R0bGU7CisJZW51bSBpd2xfdHRfc3RhdGUgb2xkX3N0YXRlOworCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAoKHR0LT50dF9wcmV2aW91c190ZW1wKSAmJgorCSAgICAodGVtcCA+IHR0LT50dF9wcmV2aW91c190ZW1wKSAmJgorCSAgICAoKHRlbXAgLSB0dC0+dHRfcHJldmlvdXNfdGVtcCkgPgorCSAgICBJV0xfVFRfSU5DUkVBU0VfTUFSR0lOKSkgeworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwKKwkJCSJUZW1wZXJhdHVyZSBpbmNyZWFzZSAlZCBkZWdyZWUgQ2Vsc2l1c1xuIiwKKwkJCSh0ZW1wIC0gdHQtPnR0X3ByZXZpb3VzX3RlbXApKTsKKwl9CisjZW5kaWYKKwlvbGRfc3RhdGUgPSB0dC0+c3RhdGU7CisJLyogaW4gQ2Vsc2l1cyAqLworCWlmICh0ZW1wID49IElXTF9NSU5JTUFMX1BPV0VSX1RIUkVTSE9MRCkKKwkJdHQtPnN0YXRlID0gSVdMX1RJX0NUX0tJTEw7CisJZWxzZSBpZiAodGVtcCA+PSBJV0xfUkVEVUNFRF9QRVJGT1JNQU5DRV9USFJFU0hPTERfMikKKwkJdHQtPnN0YXRlID0gSVdMX1RJXzI7CisJZWxzZSBpZiAodGVtcCA+PSBJV0xfUkVEVUNFRF9QRVJGT1JNQU5DRV9USFJFU0hPTERfMSkKKwkJdHQtPnN0YXRlID0gSVdMX1RJXzE7CisJZWxzZQorCQl0dC0+c3RhdGUgPSBJV0xfVElfMDsKKworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJdHQtPnR0X3ByZXZpb3VzX3RlbXAgPSB0ZW1wOworI2VuZGlmCisJaWYgKHR0LT5zdGF0ZSAhPSBvbGRfc3RhdGUpIHsKKwkJc3dpdGNoICh0dC0+c3RhdGUpIHsKKwkJY2FzZSBJV0xfVElfMDoKKwkJCS8qCisJCQkgKiBXaGVuIHRoZSBzeXN0ZW0gaXMgcmVhZHkgdG8gZ28gYmFjayB0byBJV0xfVElfMAorCQkJICogd2Ugb25seSBoYXZlIHRvIGNhbGwgaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKCkgdG8KKwkJCSAqIGRvIHNvLgorCQkJICovCisJCQlicmVhazsKKwkJY2FzZSBJV0xfVElfMToKKwkJCXR0LT50dF9wb3dlcl9tb2RlID0gSVdMX1BPV0VSX0lOREVYXzM7CisJCQlicmVhazsKKwkJY2FzZSBJV0xfVElfMjoKKwkJCXR0LT50dF9wb3dlcl9tb2RlID0gSVdMX1BPV0VSX0lOREVYXzQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXR0LT50dF9wb3dlcl9tb2RlID0gSVdMX1BPV0VSX0lOREVYXzU7CisJCQlicmVhazsKKwkJfQorCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJCWlmIChpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgdHJ1ZSkpIHsKKwkJCS8qIFRUIHN0YXRlIG5vdCB1cGRhdGVkCisJCQkgKiB0cnkgYWdhaW4gZHVyaW5nIG5leHQgdGVtcGVyYXR1cmUgcmVhZAorCQkJICovCisJCQl0dC0+c3RhdGUgPSBvbGRfc3RhdGU7CisJCQlJV0xfRVJSKHByaXYsICJDYW5ub3QgdXBkYXRlIHBvd2VyIG1vZGUsICIKKwkJCQkJIlRUIHN0YXRlIG5vdCB1cGRhdGVkXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh0dC0+c3RhdGUgPT0gSVdMX1RJX0NUX0tJTEwpCisJCQkJaXdsX3BlcmZvcm1fY3Rfa2lsbF90YXNrKHByaXYsIHRydWUpOworCQkJZWxzZSBpZiAob2xkX3N0YXRlID09IElXTF9USV9DVF9LSUxMICYmCisJCQkJIHR0LT5zdGF0ZSAhPSBJV0xfVElfQ1RfS0lMTCkKKwkJCQlpd2xfcGVyZm9ybV9jdF9raWxsX3Rhc2socHJpdiwgZmFsc2UpOworCQkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUZW1wZXJhdHVyZSBzdGF0ZSBjaGFuZ2VkICV1XG4iLAorCQkJCQl0dC0+c3RhdGUpOworCQkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJQb3dlciBJbmRleCBjaGFuZ2UgdG8gJXVcbiIsCisJCQkJCXR0LT50dF9wb3dlcl9tb2RlKTsKKwkJfQorCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwl9Cit9CisKKy8qCisgKiBBZHZhbmNlIHRoZXJtYWwgdGhyb3R0bGluZworICogMSkgQXZvaWQgTklDIGRlc3RydWN0aW9uIGR1ZSB0byBoaWdoIHRlbXBlcmF0dXJlcworICoJQ2hpcCB3aWxsIGlkZW50aWZ5IGRhbmdlcm91c2x5IGhpZ2ggdGVtcGVyYXR1cmVzIHRoYXQgY2FuCisgKgloYXJtIHRoZSBkZXZpY2UgYW5kIHdpbGwgcG93ZXIgZG93bgorICogMikgQXZvaWQgdGhlIE5JQyBwb3dlciBkb3duIGR1ZSB0byBoaWdoIHRlbXBlcmF0dXJlCisgKglUaHJvdHRsZSBlYXJseSBlbm91Z2ggdG8gbG93ZXIgdGhlIHBvd2VyIGNvbnN1bXB0aW9uIGJlZm9yZQorICoJZHJhc3RpYyBzdGVwcyBhcmUgbmVlZGVkCisgKglBY3Rpb25zIGluY2x1ZGUgcmVsYXhpbmcgdGhlIHBvd2VyIGRvd24gc2xlZXAgdGhyZXNob2xkcyBhbmQKKyAqCWRlY3JlYXNpbmcgdGhlIG51bWJlciBvZiBUWCBzdHJlYW1zCisgKiAzKSBBdm9pZCB0aHJvdWdocHV0IHBlcmZvcm1hbmNlIGltcGFjdCBhcyBtdWNoIGFzIHBvc3NpYmxlCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgIENvbmRpdGlvbiBOeHQgU3RhdGUgIENvbmRpdGlvbiBOeHQgU3RhdGUgQ29uZGl0aW9uIE54dCBTdGF0ZQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgIElXTF9USV8wICAgICBUID49IDExNSAgIENUX0tJTEwgIDExNT5UPj0xMDUgICBUSV8xICAgICAgTi9BICAgICAgTi9BCisgKiAgICAgSVdMX1RJXzEgICAgIFQgPj0gMTE1ICAgQ1RfS0lMTCAgMTE1PlQ+PTExMCAgIFRJXzIgICAgIFQ8PTk1ICAgICBUSV8wCisgKiAgICAgSVdMX1RJXzIgICAgIFQgPj0gMTE1ICAgQ1RfS0lMTCAgICAgICAgICAgICAgICAgICAgICAgIFQ8PTEwMCAgICBUSV8xCisgKiAgICBJV0xfQ1RfS0lMTCAgICAgIE4vQSAgICAgICBOL0EgICAgICAgTi9BICAgICAgICBOL0EgICAgIFQ8PTk1ICAgICBUSV8wCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkIGl3bF9hZHZhbmNlX3R0X2hhbmRsZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzMzIgdGVtcCkKK3sKKwlzdHJ1Y3QgaXdsX3R0X21nbXQgKnR0ID0gJnByaXYtPnRoZXJtYWxfdGhyb3R0bGU7CisJaW50IGk7CisJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisJZW51bSBpd2xfdHRfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBpd2xfdHRfdHJhbnMgKnRyYW5zYWN0aW9uOworCisJb2xkX3N0YXRlID0gdHQtPnN0YXRlOworCWZvciAoaSA9IDA7IGkgPCBJV0xfVElfU1RBVEVfTUFYIC0gMTsgaSsrKSB7CisJCS8qIGJhc2VkIG9uIHRoZSBjdXJyZW50IFRUIHN0YXRlLAorCQkgKiBmaW5kIHRoZSBjdXJyZXNwb25kaW5nIHRyYW5zYWN0aW9uIHRhYmxlCisJCSAqIGVhY2ggdGFibGUgaGFzIChJV0xfVElfU1RBVEVfTUFYIC0gMSkgZW50cmllcworCQkgKiB0dC0+dHJhbnNhY3Rpb24gKyAoKG9sZF9zdGF0ZSAqIChJV0xfVElfU1RBVEVfTUFYIC0gMSkpCisJCSAqIHdpbGwgYWR2YW5jZSB0byB0aGUgY29ycmVjdCB0YWJsZS4KKwkJICogdGhlbiBiYXNlZCBvbiB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZQorCQkgKiBmaW5kIHRoZSBuZXh0IHN0YXRlIG5lZWQgdG8gdHJhbnNhY3Rpb24gdG8KKwkJICogZ28gdGhyb3VnaCBhbGwgdGhlIHBvc3NpYmxlIChJV0xfVElfU1RBVEVfTUFYIC0gMSkgZW50cmllcworCQkgKiBpbiB0aGUgY3VycmVudCB0YWJsZSB0byBzZWUgaWYgdHJhbnNhY3Rpb24gaXMgbmVlZGVkCisJCSAqLworCQl0cmFuc2FjdGlvbiA9IHR0LT50cmFuc2FjdGlvbiArCisJCQkoKG9sZF9zdGF0ZSAqIChJV0xfVElfU1RBVEVfTUFYIC0gMSkpICsgaSk7CisJCWlmICh0ZW1wID49IHRyYW5zYWN0aW9uLT50dF9sb3cgJiYKKwkJICAgIHRlbXAgPD0gdHJhbnNhY3Rpb24tPnR0X2hpZ2gpIHsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCQkJaWYgKCh0dC0+dHRfcHJldmlvdXNfdGVtcCkgJiYKKwkJCSAgICAodGVtcCA+IHR0LT50dF9wcmV2aW91c190ZW1wKSAmJgorCQkJICAgICgodGVtcCAtIHR0LT50dF9wcmV2aW91c190ZW1wKSA+CisJCQkgICAgSVdMX1RUX0lOQ1JFQVNFX01BUkdJTikpIHsKKwkJCQlJV0xfREVCVUdfUE9XRVIocHJpdiwKKwkJCQkJIlRlbXBlcmF0dXJlIGluY3JlYXNlICVkICIKKwkJCQkJImRlZ3JlZSBDZWxzaXVzXG4iLAorCQkJCQkodGVtcCAtIHR0LT50dF9wcmV2aW91c190ZW1wKSk7CisJCQl9CisJCQl0dC0+dHRfcHJldmlvdXNfdGVtcCA9IHRlbXA7CisjZW5kaWYKKwkJCWlmIChvbGRfc3RhdGUgIT0KKwkJCSAgICB0cmFuc2FjdGlvbi0+bmV4dF9zdGF0ZSkgeworCQkJCWNoYW5nZWQgPSB0cnVlOworCQkJCXR0LT5zdGF0ZSA9CisJCQkJCXRyYW5zYWN0aW9uLT5uZXh0X3N0YXRlOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGNoYW5nZWQpIHsKKwkJc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247CisKKwkJaWYgKHR0LT5zdGF0ZSA+PSBJV0xfVElfMSkgeworCQkJLyogZm9yY2UgUEkgPSBJV0xfUE9XRVJfSU5ERVhfNSBpbiB0aGUgY2FzZSBvZiBUSSA+IDAgKi8KKwkJCXR0LT50dF9wb3dlcl9tb2RlID0gSVdMX1BPV0VSX0lOREVYXzU7CisJCQlpZiAoIWl3bF9odF9lbmFibGVkKHByaXYpKQorCQkJCS8qIGRpc2FibGUgSFQgKi8KKwkJCQlyeG9uLT5mbGFncyAmPSB+KFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NU0sgfAorCQkJCQlSWE9OX0ZMR19DVFJMX0NIQU5ORUxfTE9DX0hJX01TSyB8CisJCQkJCVJYT05fRkxHX0hUNDBfUFJPVF9NU0sgfAorCQkJCQlSWE9OX0ZMR19IVF9QUk9UX01TSyk7CisJCQllbHNlIHsKKwkJCQkvKiBjaGVjayBIVCBjYXBhYmlsaXR5IGFuZCBzZXQKKwkJCQkgKiBhY2NvcmRpbmcgdG8gdGhlIHN5c3RlbSBIVCBjYXBhYmlsaXR5CisJCQkJICogaW4gY2FzZSBnZXQgZGlzYWJsZWQgYmVmb3JlICovCisJCQkJaXdsX3NldF9yeG9uX2h0KHByaXYsICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZyk7CisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiByZXN0b3JlIHN5c3RlbSBwb3dlciBzZXR0aW5nIC0tIGl0IHdpbGwgYmUKKwkJCSAqIHJlY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5LgorCQkJICovCisKKwkJCS8qIGNoZWNrIEhUIGNhcGFiaWxpdHkgYW5kIHNldAorCQkJICogYWNjb3JkaW5nIHRvIHRoZSBzeXN0ZW0gSFQgY2FwYWJpbGl0eQorCQkJICogaW4gY2FzZSBnZXQgZGlzYWJsZWQgYmVmb3JlICovCisJCQlpd2xfc2V0X3J4b25faHQocHJpdiwgJnByaXYtPmN1cnJlbnRfaHRfY29uZmlnKTsKKwkJfQorCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJCWlmIChpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgdHJ1ZSkpIHsKKwkJCS8qIFRUIHN0YXRlIG5vdCB1cGRhdGVkCisJCQkgKiB0cnkgYWdhaW4gZHVyaW5nIG5leHQgdGVtcGVyYXR1cmUgcmVhZAorCQkJICovCisJCQlJV0xfRVJSKHByaXYsICJDYW5ub3QgdXBkYXRlIHBvd2VyIG1vZGUsICIKKwkJCQkJIlRUIHN0YXRlIG5vdCB1cGRhdGVkXG4iKTsKKwkJCXR0LT5zdGF0ZSA9IG9sZF9zdGF0ZTsKKwkJfSBlbHNlIHsKKwkJCUlXTF9ERUJVR19QT1dFUihwcml2LAorCQkJCQkiVGhlcm1hbCBUaHJvdHRsaW5nIHRvIG5ldyBzdGF0ZTogJXVcbiIsCisJCQkJCXR0LT5zdGF0ZSk7CisJCQlpZiAob2xkX3N0YXRlICE9IElXTF9USV9DVF9LSUxMICYmCisJCQkgICAgdHQtPnN0YXRlID09IElXTF9USV9DVF9LSUxMKSB7CisJCQkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJFbnRlciBJV0xfVElfQ1RfS0lMTFxuIik7CisJCQkJaXdsX3BlcmZvcm1fY3Rfa2lsbF90YXNrKHByaXYsIHRydWUpOworCisJCQl9IGVsc2UgaWYgKG9sZF9zdGF0ZSA9PSBJV0xfVElfQ1RfS0lMTCAmJgorCQkJCSAgdHQtPnN0YXRlICE9IElXTF9USV9DVF9LSUxMKSB7CisJCQkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJFeGl0IElXTF9USV9DVF9LSUxMXG4iKTsKKwkJCQlpd2xfcGVyZm9ybV9jdF9raWxsX3Rhc2socHJpdiwgZmFsc2UpOworCQkJfQorCQl9CisJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCX0KK30KKworLyogQ2FyZCBTdGF0ZSBOb3RpZmljYXRpb24gaW5kaWNhdGVkIHJlYWNoIGNyaXRpY2FsIHRlbXBlcmF0dXJlCisgKiBpZiBQU1Agbm90IGVuYWJsZSwgbm8gVGhlcm1hbCBUaHJvdHRsaW5nIGZ1bmN0aW9uIHdpbGwgYmUgcGVyZm9ybWVkCisgKiBqdXN0IHNldCB0aGUgR1AxIGJpdCB0byBhY2tub3dsZWRnZSB0aGUgZXZlbnQKKyAqIG90aGVyd2lzZSwgZ28gaW50byBJV0xfVElfQ1RfS0lMTCBzdGF0ZQorICogc2luY2UgQ2FyZCBTdGF0ZSBOb3RpZmljYXRpb24gd2lsbCBub3QgcHJvdmlkZSBhbnkgdGVtcGVyYXR1cmUgcmVhZGluZworICogZm9yIExlZ2FjeSBtb2RlCisgKiBzbyBqdXN0IHBhc3MgdGhlIENUX0tJTEwgdGVtcGVyYXR1cmUgdG8gaXdsX2xlZ2FjeV90dF9oYW5kbGVyKCkKKyAqIGZvciBhZHZhbmNlIG1vZGUKKyAqIHBhc3MgQ1RfS0lMTF9USFJFU0hPTEQrMSB0byBtYWtlIHN1cmUgbW92ZSBpbnRvIElXTF9USV9DVF9LSUxMIHN0YXRlCisgKi8KK3N0YXRpYyB2b2lkIGl3bF9iZ19jdF9lbnRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgY3RfZW50ZXIpOworCXN0cnVjdCBpd2xfdHRfbWdtdCAqdHQgPSAmcHJpdi0+dGhlcm1hbF90aHJvdHRsZTsKKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJaWYgKCFpd2xfaXNfcmVhZHkocHJpdikpCisJCXJldHVybjsKKworCWlmICh0dC0+c3RhdGUgIT0gSVdMX1RJX0NUX0tJTEwpIHsKKwkJSVdMX0VSUihwcml2LCAiRGV2aWNlIHJlYWNoZWQgY3JpdGljYWwgdGVtcGVyYXR1cmUgIgorCQkJICAgICAgIi0gdWNvZGUgZ29pbmcgdG8gc2xlZXAhXG4iKTsKKwkJaWYgKCFwcml2LT50aGVybWFsX3Rocm90dGxlLmFkdmFuY2VkX3R0KQorCQkJaXdsX2xlZ2FjeV90dF9oYW5kbGVyKHByaXYsCisJCQkJCSAgICAgIElXTF9NSU5JTUFMX1BPV0VSX1RIUkVTSE9MRCk7CisJCWVsc2UKKwkJCWl3bF9hZHZhbmNlX3R0X2hhbmRsZXIocHJpdiwKKwkJCQkJICAgICAgIENUX0tJTExfVEhSRVNIT0xEICsgMSk7CisJfQorfQorCisvKiBDYXJkIFN0YXRlIE5vdGlmaWNhdGlvbiBpbmRpY2F0ZWQgb3V0IG9mIGNyaXRpY2FsIHRlbXBlcmF0dXJlCisgKiBzaW5jZSBDYXJkIFN0YXRlIE5vdGlmaWNhdGlvbiB3aWxsIG5vdCBwcm92aWRlIGFueSB0ZW1wZXJhdHVyZSByZWFkaW5nCisgKiBzbyBwYXNzIHRoZSBJV0xfUkVEVUNFRF9QRVJGT1JNQU5DRV9USFJFU0hPTERfMiB0ZW1wZXJhdHVyZQorICogdG8gaXdsX2xlZ2FjeV90dF9oYW5kbGVyKCkgdG8gZ2V0IG91dCBvZiBJV0xfQ1RfS0lMTCBzdGF0ZQorICovCitzdGF0aWMgdm9pZCBpd2xfYmdfY3RfZXhpdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgY3RfZXhpdCk7CisJc3RydWN0IGl3bF90dF9tZ210ICp0dCA9ICZwcml2LT50aGVybWFsX3Rocm90dGxlOworCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkKKwkJcmV0dXJuOworCisJLyogc3RvcCBjdF9raWxsX2V4aXRfdG0gdGltZXIgKi8KKwlkZWxfdGltZXJfc3luYygmcHJpdi0+dGhlcm1hbF90aHJvdHRsZS5jdF9raWxsX2V4aXRfdG0pOworCisJaWYgKHR0LT5zdGF0ZSA9PSBJV0xfVElfQ1RfS0lMTCkgeworCQlJV0xfRVJSKHByaXYsCisJCQkiRGV2aWNlIHRlbXBlcmF0dXJlIGJlbG93IGNyaXRpY2FsIgorCQkJIi0gdWNvZGUgYXdha2UhXG4iKTsKKwkJaWYgKCFwcml2LT50aGVybWFsX3Rocm90dGxlLmFkdmFuY2VkX3R0KQorCQkJaXdsX2xlZ2FjeV90dF9oYW5kbGVyKHByaXYsCisJCQkJCUlXTF9SRURVQ0VEX1BFUkZPUk1BTkNFX1RIUkVTSE9MRF8yKTsKKwkJZWxzZQorCQkJaXdsX2FkdmFuY2VfdHRfaGFuZGxlcihwcml2LCBDVF9LSUxMX0VYSVRfVEhSRVNIT0xEKTsKKwl9Cit9CisKK3ZvaWQgaXdsX3R0X2VudGVyX2N0X2tpbGwoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJRdWV1ZWluZyBjcml0aWNhbCB0ZW1wZXJhdHVyZSBlbnRlci5cbiIpOworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+Y3RfZW50ZXIpOworfQorRVhQT1JUX1NZTUJPTChpd2xfdHRfZW50ZXJfY3Rfa2lsbCk7CisKK3ZvaWQgaXdsX3R0X2V4aXRfY3Rfa2lsbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlF1ZXVlaW5nIGNyaXRpY2FsIHRlbXBlcmF0dXJlIGV4aXQuXG4iKTsKKwlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmN0X2V4aXQpOworfQorRVhQT1JUX1NZTUJPTChpd2xfdHRfZXhpdF9jdF9raWxsKTsKKworc3RhdGljIHZvaWQgaXdsX2JnX3R0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIHR0X3dvcmspOworCXMzMiB0ZW1wID0gcHJpdi0+dGVtcGVyYXR1cmU7IC8qIGRlZ3JlZXMgQ0VMU0lVUyBleGNlcHQgNDk2NSAqLworCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlpZiAoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spID09IENTUl9IV19SRVZfVFlQRV80OTY1KQorCQl0ZW1wID0gS0VMVklOX1RPX0NFTFNJVVMocHJpdi0+dGVtcGVyYXR1cmUpOworCisJaWYgKCFwcml2LT50aGVybWFsX3Rocm90dGxlLmFkdmFuY2VkX3R0KQorCQlpd2xfbGVnYWN5X3R0X2hhbmRsZXIocHJpdiwgdGVtcCk7CisJZWxzZQorCQlpd2xfYWR2YW5jZV90dF9oYW5kbGVyKHByaXYsIHRlbXApOworfQorCit2b2lkIGl3bF90dF9oYW5kbGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiUXVldWVpbmcgdGhlcm1hbCB0aHJvdHRsaW5nIHdvcmsuXG4iKTsKKwlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnR0X3dvcmspOworfQorRVhQT1JUX1NZTUJPTChpd2xfdHRfaGFuZGxlcik7CisKKy8qIFRoZXJtYWwgdGhyb3R0bGluZyBpbml0aWFsaXphdGlvbgorICogRm9yIGFkdmFuY2UgdGhlcm1hbCB0aHJvdHRsaW5nOgorICogICAgIEluaXRpYWxpemUgVGhlcm1hbCBJbmRleCBhbmQgdGVtcGVyYXR1cmUgdGhyZXNob2xkIHRhYmxlCisgKiAgICAgSW5pdGlhbGl6ZSB0aGVybWFsIHRocm90dGxpbmcgcmVzdHJpY3Rpb24gdGFibGUKKyAqLwordm9pZCBpd2xfdHRfaW5pdGlhbGl6ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF90dF9tZ210ICp0dCA9ICZwcml2LT50aGVybWFsX3Rocm90dGxlOworCWludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfdHRfdHJhbnMpICogKElXTF9USV9TVEFURV9NQVggLSAxKTsKKwlzdHJ1Y3QgaXdsX3R0X3RyYW5zICp0cmFuc2FjdGlvbjsKKworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiSW5pdGlhbGl6ZSBUaGVybWFsIFRocm90dGxpbmcgXG4iKTsKKworCW1lbXNldCh0dCwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfdHRfbWdtdCkpOworCisJdHQtPnN0YXRlID0gSVdMX1RJXzA7CisJaW5pdF90aW1lcigmcHJpdi0+dGhlcm1hbF90aHJvdHRsZS5jdF9raWxsX2V4aXRfdG0pOworCXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF9leGl0X3RtLmRhdGEgPSAodW5zaWduZWQgbG9uZylwcml2OworCXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF9leGl0X3RtLmZ1bmN0aW9uID0gaXdsX3R0X2NoZWNrX2V4aXRfY3Rfa2lsbDsKKworCS8qIHNldHVwIGRlZmVycmVkIGN0IGtpbGwgd29yayAqLworCUlOSVRfV09SSygmcHJpdi0+dHRfd29yaywgaXdsX2JnX3R0X3dvcmspOworCUlOSVRfV09SSygmcHJpdi0+Y3RfZW50ZXIsIGl3bF9iZ19jdF9lbnRlcik7CisJSU5JVF9XT1JLKCZwcml2LT5jdF9leGl0LCBpd2xfYmdfY3RfZXhpdCk7CisKKwlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKKwljYXNlIENTUl9IV19SRVZfVFlQRV82eDAwOgorCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzZ4NTA6CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiQWR2YW5jZWQgVGhlcm1hbCBUaHJvdHRsaW5nXG4iKTsKKwkJdHQtPnJlc3RyaWN0aW9uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bF90dF9yZXN0cmljdGlvbikgKgorCQkJCQkgSVdMX1RJX1NUQVRFX01BWCwgR0ZQX0tFUk5FTCk7CisJCXR0LT50cmFuc2FjdGlvbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2xfdHRfdHJhbnMpICoKKwkJCUlXTF9USV9TVEFURV9NQVggKiAoSVdMX1RJX1NUQVRFX01BWCAtIDEpLAorCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghdHQtPnJlc3RyaWN0aW9uIHx8ICF0dC0+dHJhbnNhY3Rpb24pIHsKKwkJCUlXTF9FUlIocHJpdiwgIkZhbGxiYWNrIHRvIExlZ2FjeSBUaHJvdHRsaW5nXG4iKTsKKwkJCXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuYWR2YW5jZWRfdHQgPSBmYWxzZTsKKwkJCWtmcmVlKHR0LT5yZXN0cmljdGlvbik7CisJCQl0dC0+cmVzdHJpY3Rpb24gPSBOVUxMOworCQkJa2ZyZWUodHQtPnRyYW5zYWN0aW9uKTsKKwkJCXR0LT50cmFuc2FjdGlvbiA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQl0cmFuc2FjdGlvbiA9IHR0LT50cmFuc2FjdGlvbiArCisJCQkJKElXTF9USV8wICogKElXTF9USV9TVEFURV9NQVggLSAxKSk7CisJCQltZW1jcHkodHJhbnNhY3Rpb24sICZ0dF9yYW5nZV8wWzBdLCBzaXplKTsKKwkJCXRyYW5zYWN0aW9uID0gdHQtPnRyYW5zYWN0aW9uICsKKwkJCQkoSVdMX1RJXzEgKiAoSVdMX1RJX1NUQVRFX01BWCAtIDEpKTsKKwkJCW1lbWNweSh0cmFuc2FjdGlvbiwgJnR0X3JhbmdlXzFbMF0sIHNpemUpOworCQkJdHJhbnNhY3Rpb24gPSB0dC0+dHJhbnNhY3Rpb24gKworCQkJCShJV0xfVElfMiAqIChJV0xfVElfU1RBVEVfTUFYIC0gMSkpOworCQkJbWVtY3B5KHRyYW5zYWN0aW9uLCAmdHRfcmFuZ2VfMlswXSwgc2l6ZSk7CisJCQl0cmFuc2FjdGlvbiA9IHR0LT50cmFuc2FjdGlvbiArCisJCQkJKElXTF9USV9DVF9LSUxMICogKElXTF9USV9TVEFURV9NQVggLSAxKSk7CisJCQltZW1jcHkodHJhbnNhY3Rpb24sICZ0dF9yYW5nZV8zWzBdLCBzaXplKTsKKwkJCXNpemUgPSBzaXplb2Yoc3RydWN0IGl3bF90dF9yZXN0cmljdGlvbikgKgorCQkJCUlXTF9USV9TVEFURV9NQVg7CisJCQltZW1jcHkodHQtPnJlc3RyaWN0aW9uLAorCQkJCSZyZXN0cmljdGlvbl9yYW5nZVswXSwgc2l6ZSk7CisJCQlwcml2LT50aGVybWFsX3Rocm90dGxlLmFkdmFuY2VkX3R0ID0gdHJ1ZTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkxlZ2FjeSBUaGVybWFsIFRocm90dGxpbmdcbiIpOworCQlwcml2LT50aGVybWFsX3Rocm90dGxlLmFkdmFuY2VkX3R0ID0gZmFsc2U7CisJCWJyZWFrOworCX0KK30KK0VYUE9SVF9TWU1CT0woaXdsX3R0X2luaXRpYWxpemUpOworCisvKiBjbGVhbnVwIHRoZXJtYWwgdGhyb3R0bGluZyBtYW5hZ2VtZW50IHJlbGF0ZWQgbWVtb3J5IGFuZCB0aW1lciAqLwordm9pZCBpd2xfdHRfZXhpdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF90dF9tZ210ICp0dCA9ICZwcml2LT50aGVybWFsX3Rocm90dGxlOworCisJLyogc3RvcCBjdF9raWxsX2V4aXRfdG0gdGltZXIgaWYgYWN0aXZhdGVkICovCisJZGVsX3RpbWVyX3N5bmMoJnByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF9leGl0X3RtKTsKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT50dF93b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5jdF9lbnRlcik7CisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+Y3RfZXhpdCk7CisKKwlpZiAocHJpdi0+dGhlcm1hbF90aHJvdHRsZS5hZHZhbmNlZF90dCkgeworCQkvKiBmcmVlIGFkdmFuY2UgdGhlcm1hbCB0aHJvdHRsaW5nIG1lbW9yeSAqLworCQlrZnJlZSh0dC0+cmVzdHJpY3Rpb24pOworCQl0dC0+cmVzdHJpY3Rpb24gPSBOVUxMOworCQlrZnJlZSh0dC0+dHJhbnNhY3Rpb24pOworCQl0dC0+dHJhbnNhY3Rpb24gPSBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0woaXdsX3R0X2V4aXQpOwogCiAvKiBpbml0aWFsaXplIHRvIGRlZmF1bHQgKi8KIHZvaWQgaXdsX3Bvd2VyX2luaXRpYWxpemUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWl3bF9wb3dlcl9pbml0X2hhbmRsZShwcml2KTsKLQlwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZyA9IElXTF9QT1dFUl9JTkRFWF8xOwotCS8qIGRlZmF1bHQgdG8gZGlzYWJsZWQgdW50aWwgbWFjODAyMTEgc2F5cyBvdGhlcndpc2UgKi8KLQlwcml2LT5wb3dlcl9kYXRhLnBvd2VyX2Rpc2FibGVkID0gMTsKKwl1MTYgbGN0bCA9IGl3bF9wY2llX2xpbmtfY3RsKHByaXYpOworCisJcHJpdi0+cG93ZXJfZGF0YS5wY2lfcG0gPSAhKGxjdGwgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDBTX0VOKTsKKworCXByaXYtPnBvd2VyX2RhdGEuZGVidWdfc2xlZXBfbGV2ZWxfb3ZlcnJpZGUgPSAtMTsKKworCW1lbXNldCgmcHJpdi0+cG93ZXJfZGF0YS5zbGVlcF9jbWQsIDAsCisJCXNpemVvZihwcml2LT5wb3dlcl9kYXRhLnNsZWVwX2NtZCkpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfcG93ZXJfaW5pdGlhbGl6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaAppbmRleCAzN2JhM2JiLi5kZjZmNmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmgKQEAgLTI4LDEzICsyOCw5MSBAQAogI2lmbmRlZiBfX2l3bF9wb3dlcl9zZXR0aW5nX2hfXwogI2RlZmluZSBfX2l3bF9wb3dlcl9zZXR0aW5nX2hfXwogCi0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSAiaXdsLWNvbW1hbmRzLmgiCiAKLXN0cnVjdCBpd2xfcHJpdjsKKyNkZWZpbmUgSVdMX0FCU09MVVRFX1pFUk8JCTAKKyNkZWZpbmUgSVdMX0FCU09MVVRFX01BWAkJMHhGRkZGRkZGRgorI2RlZmluZSBJV0xfVFRfSU5DUkVBU0VfTUFSR0lOCTUKIAotZW51bSB7Ci0JSVdMX1BPV0VSX01PREVfQ0FNLCAvKiBDb250aW51b3VzbHkgQXdhcmUgTW9kZSwgYWx3YXlzIG9uICovCitlbnVtIGl3bF9hbnRlbm5hX29rIHsKKwlJV0xfQU5UX09LX05PTkUsCisJSVdMX0FOVF9PS19TSU5HTEUsCisJSVdMX0FOVF9PS19NVUxUSSwKK307CisKKy8qIFRoZXJtYWwgVGhyb3R0bGluZyBTdGF0ZSBNYWNoaW5lIHN0YXRlcyAqLworZW51bSAgaXdsX3R0X3N0YXRlIHsKKwlJV0xfVElfMCwJLyogbm9ybWFsIHRlbXBlcmF0dXJlLCBzeXN0ZW0gcG93ZXIgc3RhdGUgKi8KKwlJV0xfVElfMSwJLyogaGlnaCB0ZW1wZXJhdHVyZSBkZXRlY3QsIGxvdyBwb3dlciBzdGF0ZSAqLworCUlXTF9USV8yLAkvKiBoaWdoZXIgdGVtcGVyYXR1cmUgZGV0ZWN0ZWQsIGxvd2VyIHBvd2VyIHN0YXRlICovCisJSVdMX1RJX0NUX0tJTEwsIC8qIGNyaXRpY2FsIHRlbXBlcmF0dXJlIGRldGVjdGVkLCBsb3dlc3QgcG93ZXIgc3RhdGUgKi8KKwlJV0xfVElfU1RBVEVfTUFYCit9OworCisvKioKKyAqIHN0cnVjdCBpd2xfdHRfcmVzdHJpY3Rpb24gLSBUaGVybWFsIFRocm90dGxpbmcgcmVzdHJpY3Rpb24gdGFibGUKKyAqIEB0eF9zdHJlYW06IG51bWJlciBvZiB0eCBzdHJlYW0gYWxsb3dlZAorICogQGlzX2h0OiBodCBlbmFibGUvZGlzYWJsZQorICogQHJ4X3N0cmVhbTogbnVtYmVyIG9mIHJ4IHN0cmVhbSBhbGxvd2VkCisgKgorICogVGhpcyB0YWJsZSBpcyB1c2VkIGJ5IGFkdmFuY2UgdGhlcm1hbCB0aHJvdHRsaW5nIG1hbmFnZW1lbnQKKyAqIGJhc2VkIG9uIHRoZSBjdXJyZW50IHRoZXJtYWwgdGhyb3R0bGluZyBzdGF0ZSwgYW5kIGRldGVybWluZXMKKyAqIHRoZSBudW1iZXIgb2YgdHgvcnggc3RyZWFtcyBhbmQgdGhlIHN0YXR1cyBvZiBIVCBvcGVyYXRpb24uCisgKi8KK3N0cnVjdCBpd2xfdHRfcmVzdHJpY3Rpb24geworCWVudW0gaXdsX2FudGVubmFfb2sgdHhfc3RyZWFtOworCWVudW0gaXdsX2FudGVubmFfb2sgcnhfc3RyZWFtOworCWJvb2wgaXNfaHQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBpd2xfdHRfdHJhbnMgLSBUaGVybWFsIFRocm90dGxpbmcgdHJhbnNhY3Rpb24gdGFibGUKKyAqIEBuZXh0X3N0YXRlOiAgbmV4dCB0aGVybWFsIHRocm90dGxpbmcgbW9kZQorICogQHR0X2xvdzogbG93IHRlbXBlcmF0dXJlIHRocmVzaG9sZCB0byBjaGFuZ2Ugc3RhdGUKKyAqIEB0dF9oaWdoOiBoaWdoIHRlbXBlcmF0dXJlIHRocmVzaG9sZCB0byBjaGFuZ2Ugc3RhdGUKKyAqCisgKiBUaGlzIGlzIHVzZWQgYnkgdGhlIGFkdmFuY2VkIHRoZXJtYWwgdGhyb3R0bGluZyBhbGdvcml0aG0KKyAqIHRvIGRldGVybWluZSB0aGUgbmV4dCB0aGVybWFsIHN0YXRlIHRvIGdvIGJhc2VkIG9uIHRoZQorICogY3VycmVudCB0ZW1wZXJhdHVyZS4KKyAqLworc3RydWN0IGl3bF90dF90cmFucyB7CisJZW51bSBpd2xfdHRfc3RhdGUgbmV4dF9zdGF0ZTsKKwl1MzIgdHRfbG93OworCXUzMiB0dF9oaWdoOworfTsKKworLyoqCisgKiBzdHJ1Y3QgaXdsX3R0X21nbnQgLSBUaGVybWFsIFRocm90dGxpbmcgTWFuYWdlbWVudCBzdHJ1Y3R1cmUKKyAqIEBhZHZhbmNlZF90dDogICAgYWR2YW5jZWQgdGhlcm1hbCB0aHJvdHRsZSByZXF1aXJlZAorICogQHN0YXRlOiAgICAgICAgICBjdXJyZW50IFRoZXJtYWwgVGhyb3R0bGluZyBzdGF0ZQorICogQHR0X3Bvd2VyX21vZGU6ICBUaGVybWFsIFRocm90dGxpbmcgcG93ZXIgbW9kZSBpbmRleAorICoJCSAgICBiZWluZyB1c2VkIHRvIHNldCBwb3dlciBsZXZlbCB3aGVuCisgKiAJCSAgICB3aGVuIHRoZXJtYWwgdGhyb3R0bGluZyBzdGF0ZSAhPSBJV0xfVElfMAorICoJCSAgICB0aGUgdHRfcG93ZXJfbW9kZSBzaG91bGQgc2V0IHRvIGRpZmZlcmVudAorICoJCSAgICBwb3dlciBtb2RlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHR0IHN0YXRlCisgKiBAdHRfcHJldmlvdXNfdGVtcGVyYXR1cmU6IGxhc3QgbWVhc3VyZWQgdGVtcGVyYXR1cmUKKyAqIEBpd2xfdHRfcmVzdHJpY3Rpb246IHB0ciB0byByZXN0cmljdGlvbiB0YmwsIHVzZWQgYnkgYWR2YW5jZQorICoJCSAgICB0aGVybWFsIHRocm90dGxpbmcgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IHR4L3J4IHN0cmVhbXMKKyAqCQkgICAgc2hvdWxkIGJlIHVzZWQgaW4gdHQgc3RhdGU7IGFuZCBjYW4gSFQgYmUgZW5hYmxlZCBvciBub3QKKyAqIEBpd2xfdHRfdHJhbnM6IHB0ciB0byBhZHYgdHJhbnMgdGFibGUsIHVzZWQgYnkgYWR2YW5jZSB0aGVybWFsIHRocm90dGxpbmcKKyAqCQkgICAgc3RhdGUgdHJhbnNhY3Rpb24KKyAqIEBjdF9raWxsX3RvZ2dsZTogdXNlZCB0byB0b2dnbGUgdGhlIENTUiBiaXQgd2hlbiBjaGVja2luZyB1Q29kZSB0ZW1wZXJhdHVyZQorICogQGN0X2tpbGxfZXhpdF90bTogdGltZXIgdG8gZXhpdCB0aGVybWFsIGtpbGwKKyAqLworc3RydWN0IGl3bF90dF9tZ210IHsKKwllbnVtIGl3bF90dF9zdGF0ZSBzdGF0ZTsKKwlib29sIGFkdmFuY2VkX3R0OworCXU4IHR0X3Bvd2VyX21vZGU7CisJYm9vbCBjdF9raWxsX3RvZ2dsZTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCXMzMiB0dF9wcmV2aW91c190ZW1wOworI2VuZGlmCisJc3RydWN0IGl3bF90dF9yZXN0cmljdGlvbiAqcmVzdHJpY3Rpb247CisJc3RydWN0IGl3bF90dF90cmFucyAqdHJhbnNhY3Rpb247CisJc3RydWN0IHRpbWVyX2xpc3QgY3Rfa2lsbF9leGl0X3RtOworfTsKKworZW51bSBpd2xfcG93ZXJfbGV2ZWwgewogCUlXTF9QT1dFUl9JTkRFWF8xLAogCUlXTF9QT1dFUl9JTkRFWF8yLAogCUlXTF9QT1dFUl9JTkRFWF8zLApAQCAtNDMsMjYgKzEyMSwyMyBAQAogCUlXTF9QT1dFUl9OVU0KIH07CiAKLS8qIFBvd2VyIG1hbmFnZW1lbnQgKG5vdCBUeCBwb3dlcikgc3RydWN0dXJlcyAqLwotCi1zdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSB7Ci0Jc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCBjbWQ7Ci0JdTggbm9fZHRpbTsKLX07Ci0KIHN0cnVjdCBpd2xfcG93ZXJfbWdyIHsKLQlzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSBwd3JfcmFuZ2VfMFtJV0xfUE9XRVJfTlVNXTsKLQlzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSBwd3JfcmFuZ2VfMVtJV0xfUE9XRVJfTlVNXTsKLQlzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSBwd3JfcmFuZ2VfMltJV0xfUE9XRVJfTlVNXTsKLQl1MzIgZHRpbV9wZXJpb2Q7Ci0JLyogZmluYWwgcG93ZXIgbGV2ZWwgdGhhdCB1c2VkIHRvIGNhbGN1bGF0ZSBmaW5hbCBwb3dlciBjb21tYW5kICovCi0JdTggcG93ZXJfbW9kZTsKLQl1OCB1c2VyX3Bvd2VyX3NldHRpbmc7IC8qIHNldCBieSB1c2VyIHRocm91Z2ggc3lzZnMgKi8KLQl1OCBwb3dlcl9kaXNhYmxlZDsgLyogc2V0IGJ5IG1hYzgwMjExJ3MgQ09ORl9QUyAqLworCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgc2xlZXBfY21kOworCWludCBkZWJ1Z19zbGVlcF9sZXZlbF9vdmVycmlkZTsKKwlib29sIHBjaV9wbTsKIH07CiAKIGludCBpd2xfcG93ZXJfdXBkYXRlX21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZvcmNlKTsKLWludCBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBtb2RlKTsKK2Jvb2wgaXdsX2h0X2VuYWJsZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2VudW0gaXdsX2FudGVubmFfb2sgaXdsX3R4X2FudF9yZXN0cmljdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZW51bSBpd2xfYW50ZW5uYV9vayBpd2xfcnhfYW50X3Jlc3RyaWN0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF90dF9lbnRlcl9jdF9raWxsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF90dF9leGl0X2N0X2tpbGwoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3R0X2hhbmRsZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3R0X2luaXRpYWxpemUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3R0X2V4aXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX3Bvd2VyX2luaXRpYWxpemUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAorZXh0ZXJuIGJvb2wgbm9fc2xlZXBfYXV0b2FkanVzdDsKKwogI2VuZGlmICAvKiBfX2l3bF9wb3dlcl9zZXR0aW5nX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCmluZGV4IDNiOWNhYzMuLmQzOTNlOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKQEAgLTgwLDYgKzgwLDggQEAKICNkZWZpbmUgQVBNR19SRktJTExfUkVHCQkJKEFQTUdfQkFTRSArIDB4MDAxNCkKICNkZWZpbmUgQVBNR19SVENfSU5UX1NUVF9SRUcJCShBUE1HX0JBU0UgKyAweDAwMWMpCiAjZGVmaW5lIEFQTUdfUlRDX0lOVF9NU0tfUkVHCQkoQVBNR19CQVNFICsgMHgwMDIwKQorI2RlZmluZSBBUE1HX0RJR0lUQUxfU1ZSX1JFRwkJKEFQTUdfQkFTRSArIDB4MDA1OCkKKyNkZWZpbmUgQVBNR19BTkFMT0dfU1ZSX1JFRwkJKEFQTUdfQkFTRSArIDB4MDA2QykKIAogI2RlZmluZSBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQJKDB4MDAwMDAyMDApCiAjZGVmaW5lIEFQTUdfQ0xLX1ZBTF9CU01fQ0xLX1JRVAkoMHgwMDAwMDgwMCkKQEAgLTkxLDcgKzkzLDggQEAKICNkZWZpbmUgQVBNR19QU19DVFJMX1ZBTF9QV1JfU1JDX1ZNQUlOCQkoMHgwMDAwMDAwMCkKICNkZWZpbmUgQVBNR19QU19DVFJMX1ZBTF9QV1JfU1JDX01BWAkJKDB4MDEwMDAwMDApIC8qIDM5NDUgb25seSAqLwogI2RlZmluZSBBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVkFVWAkJKDB4MDIwMDAwMDApCi0KKyNkZWZpbmUgQVBNR19TVlJfVk9MVEFHRV9DT05GSUdfQklUX01TSwkoMHgwMDAwMDFFMCkgLyogYml0IDg6NSAqLworI2RlZmluZSBBUE1HX1NWUl9ESUdJVEFMX1ZPTFRBR0VfMV8zMgkJKDB4MDAwMDAwNjApCiAKICNkZWZpbmUgQVBNR19QQ0lERVZfU1RUX1ZBTF9MMV9BQ1RfRElTCQkoMHgwMDAwMDgwMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKaW5kZXggMmI4ZDQwYi4uODE1MGM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCkBAIC00MDYsNyArNDA2LDYgQEAKIAlyeHEtPmZyZWVfY291bnQgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChpd2xfcnhfcXVldWVfcmVzZXQpOwogCiBpbnQgaXdsX3J4X2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEpCiB7CkBAIC01NDAsMTMgKzUzOSwxNCBAQAogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAogCUlXTF9ERUJVR19SWChwcml2LCAiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIHZzICVkKS5cbiIsCi0JCSAgICAgKGludClzaXplb2YocHJpdi0+c3RhdGlzdGljcyksIHBrdC0+bGVuKTsKKwkJICAgICAoaW50KXNpemVvZihwcml2LT5zdGF0aXN0aWNzKSwKKwkJICAgICBsZTMyX3RvX2NwdShwa3QtPmxlbl9uX2ZsYWdzKSAmIEZIX1JTQ1NSX0ZSQU1FX1NJWkVfTVNLKTsKIAogCWNoYW5nZSA9ICgocHJpdi0+c3RhdGlzdGljcy5nZW5lcmFsLnRlbXBlcmF0dXJlICE9CiAJCSAgIHBrdC0+dS5zdGF0cy5nZW5lcmFsLnRlbXBlcmF0dXJlKSB8fAogCQkgICgocHJpdi0+c3RhdGlzdGljcy5mbGFnICYKLQkJICAgIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0ZBVF9NT0RFX01TSykgIT0KLQkJICAgKHBrdC0+dS5zdGF0cy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLKSkpOworCQkgICAgU1RBVElTVElDU19SRVBMWV9GTEdfSFQ0MF9NT0RFX01TSykgIT0KKwkJICAgKHBrdC0+dS5zdGF0cy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfSFQ0MF9NT0RFX01TSykpKTsKIAogCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljcywgJnBrdC0+dS5zdGF0cywgc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3MpKTsKIApAQCAtNjQ2LDcgKzY0Niw3IEBACiAJdTMyIHRzZl9sb3c7CiAJaW50IHJzc2k7CiAKLQlpZiAobGlrZWx5KCEocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfUlgpKSkKKwlpZiAobGlrZWx5KCEoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIElXTF9ETF9SWCkpKQogCQlyZXR1cm47CiAKIAkvKiBNQUMgaGVhZGVyICovCkBAIC03NDYsMTQgKzc0Niw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgaXdsX3VwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBmYywgdTE2IGxlbikKLXsKLQkvKiAwIC0gbWdtdCwgMSAtIGNudCwgMiAtIGRhdGEgKi8KLQlpbnQgaWR4ID0gKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDI7Ci0JcHJpdi0+cnhfc3RhdHNbaWR4XS5jbnQrKzsKLQlwcml2LT5yeF9zdGF0c1tpZHhdLmJ5dGVzICs9IGxlbjsKLX0KLQogLyoKICAqIHJldHVybnMgbm9uLXplcm8gaWYgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkCiAgKi8KQEAgLTg2Miw2MSArODU0LDEyIEBACiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgIGludCBpbmNsdWRlX3BoeSwKLQkJCQkgICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIsCi0JCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKKwkJCQkJdTE2IGxlbiwKKwkJCQkJdTMyIGFtcGR1X3N0YXR1cywKKwkJCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKIHsKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bF9yeF9waHlfcmVzICpyeF9zdGFydCA9IChpbmNsdWRlX3BoeSkgPwotCSAgICAoc3RydWN0IGl3bF9yeF9waHlfcmVzICopJihwa3QtPnUucmF3WzBdKSA6IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQl1MTYgbGVuOwotCV9fbGUzMiAqcnhfZW5kOwotCXVuc2lnbmVkIGludCBza2JsZW47Ci0JdTMyIGFtcGR1X3N0YXR1czsKLQl1MzIgYW1wZHVfc3RhdHVzX2xlZ2FjeTsKLQotCWlmICghaW5jbHVkZV9waHkgJiYgcHJpdi0+bGFzdF9waHlfcmVzWzBdKQotCQlyeF9zdGFydCA9IChzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgKikmcHJpdi0+bGFzdF9waHlfcmVzWzFdOwotCi0JaWYgKCFyeF9zdGFydCkgewotCQlJV0xfRVJSKHByaXYsICJNUERVIGZyYW1lIHdpdGhvdXQgYSBQSFkgZGF0YVxuIik7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKGluY2x1ZGVfcGh5KSB7Ci0JCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSgodTggKikgJnJ4X3N0YXJ0WzFdICsKLQkJCQkJICAgICAgIHJ4X3N0YXJ0LT5jZmdfcGh5X2NudCk7Ci0KLQkJbGVuID0gbGUxNl90b19jcHUocnhfc3RhcnQtPmJ5dGVfY291bnQpOwotCi0JCXJ4X2VuZCA9IChfX2xlMzIgKikoKHU4ICopICZwa3QtPnUucmF3WzBdICsKLQkJCQkgIHNpemVvZihzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMpICsKLQkJCQkgIHJ4X3N0YXJ0LT5jZmdfcGh5X2NudCArIGxlbik7Ci0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgaXdsNDk2NV9yeF9tcGR1X3Jlc19zdGFydCAqYW1zZHUgPQotCQkgICAgKHN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0ICopcGt0LT51LnJhdzsKLQotCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikocGt0LT51LnJhdyArCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0KSk7Ci0JCWxlbiA9ICBsZTE2X3RvX2NwdShhbXNkdS0+Ynl0ZV9jb3VudCk7Ci0JCXJ4X3N0YXJ0LT5ieXRlX2NvdW50ID0gYW1zZHUtPmJ5dGVfY291bnQ7Ci0JCXJ4X2VuZCA9IChfX2xlMzIgKikgKCgodTggKikgaGRyKSArIGxlbik7Ci0JfQotCi0JYW1wZHVfc3RhdHVzID0gbGUzMl90b19jcHUoKnJ4X2VuZCk7Ci0Jc2tibGVuID0gKCh1OCAqKSByeF9lbmQgLSAodTggKikgJnBrdC0+dS5yYXdbMF0pICsgc2l6ZW9mKHUzMik7Ci0KLQlpZiAoIWluY2x1ZGVfcGh5KSB7Ci0JCS8qIE5ldyBzdGF0dXMgc2NoZW1lLCBuZWVkIHRvIHRyYW5zbGF0ZSAqLwotCQlhbXBkdV9zdGF0dXNfbGVnYWN5ID0gYW1wZHVfc3RhdHVzOwotCQlhbXBkdV9zdGF0dXMgPSBpd2xfdHJhbnNsYXRlX3J4X3N0YXR1cyhwcml2LCBhbXBkdV9zdGF0dXMpOwotCX0KLQotCS8qIHN0YXJ0IGZyb20gTUFDICovCi0Jc2tiX3Jlc2VydmUocnhiLT5za2IsICh2b2lkICopaGRyIC0gKHZvaWQgKilwa3QpOwotCXNrYl9wdXQocnhiLT5za2IsIGxlbik7CS8qIGVuZCB3aGVyZSBkYXRhIGVuZHMgKi8KLQogCS8qIFdlIG9ubHkgcHJvY2VzcyBkYXRhIHBhY2tldHMgaWYgdGhlIGludGVyZmFjZSBpcyBvcGVuICovCiAJaWYgKHVubGlrZWx5KCFwcml2LT5pc19vcGVuKSkgewogCQlJV0xfREVCVUdfRFJPUF9MSU1JVChwcml2LApAQCAtOTI0LDE1ICs4NjcsMTggQEAKIAkJcmV0dXJuOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4Yi0+c2tiLT5kYXRhOwotCi0JLyogIGluIGNhc2Ugb2YgSFcgYWNjZWxlcmF0ZWQgY3J5cHRvIGFuZCBiYWQgZGVjcnlwdGlvbiwgZHJvcCAqLwotCWlmICghcHJpdi0+aHdfcGFyYW1zLnN3X2NyeXB0byAmJgorCS8qIEluIGNhc2Ugb2YgSFcgYWNjZWxlcmF0ZWQgY3J5cHRvIGFuZCBiYWQgZGVjcnlwdGlvbiwgZHJvcCAqLworCWlmICghcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5zd19jcnlwdG8gJiYKIAkgICAgaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyhwcml2LCBoZHIsIGFtcGR1X3N0YXR1cywgc3RhdHMpKQogCQlyZXR1cm47CiAKLQlpd2xfdXBkYXRlX3J4X3N0YXRzKHByaXYsIGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCksIGxlbik7Ci0JaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHJ4Yi0+c2tiLCBzdGF0cyk7CisJLyogUmVzaXplIFNLQiBmcm9tIG1hYyBoZWFkZXIgdG8gZW5kIG9mIHBhY2tldCAqLworCXNrYl9yZXNlcnZlKHJ4Yi0+c2tiLCAodm9pZCAqKWhkciAtICh2b2lkICopcnhiLT5za2ItPmRhdGEpOworCXNrYl9wdXQocnhiLT5za2IsIGxlbik7CisKKwlpd2xfdXBkYXRlX3N0YXRzKHByaXYsIGZhbHNlLCBoZHItPmZyYW1lX2NvbnRyb2wsIGxlbik7CisJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihyeGItPnNrYiksIHN0YXRzLCBzaXplb2YoKnN0YXRzKSk7CisJaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHJ4Yi0+c2tiKTsKIAlwcml2LT5hbGxvY19yeGJfc2tiLS07CiAJcnhiLT5za2IgPSBOVUxMOwogfQpAQCAtOTYzLDgyICs5MDksODAgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXR1czsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0JLyogVXNlIHBoeSBkYXRhIChSeCBzaWduYWwgc3RyZW5ndGgsIGV0Yy4pIGNvbnRhaW5lZCB3aXRoaW4KLQkgKiAgIHRoaXMgcnggcGFja2V0IGZvciBsZWdhY3kgZnJhbWVzLAotCSAqICAgb3IgcGh5IGRhdGEgY2FjaGVkIGZyb20gUkVQTFlfUlhfUEhZX0NNRCBmb3IgSFQgZnJhbWVzLiAqLwotCWludCBpbmNsdWRlX3BoeSA9IChwa3QtPmhkci5jbWQgPT0gUkVQTFlfUlgpOwotCXN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqcnhfc3RhcnQgPSAoaW5jbHVkZV9waHkpID8KLQkJKHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqKSYocGt0LT51LnJhd1swXSkgOgotCQkoc3RydWN0IGl3bF9yeF9waHlfcmVzICopJnByaXYtPmxhc3RfcGh5X3Jlc1sxXTsKLQlfX2xlMzIgKnJ4X2VuZDsKLQl1bnNpZ25lZCBpbnQgbGVuID0gMDsKKwlzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgKnBoeV9yZXM7CisJX19sZTMyIHJ4X3BrdF9zdGF0dXM7CisJc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQgKmFtc2R1OworCXUzMiBsZW47CisJdTMyIGFtcGR1X3N0YXR1czsKIAl1MTYgZmM7Ci0JdTggbmV0d29ya19wYWNrZXQ7CisJdTMyIHJhdGVfbl9mbGFnczsKIAotCXJ4X3N0YXR1cy5tYWN0aW1lID0gbGU2NF90b19jcHUocnhfc3RhcnQtPnRpbWVzdGFtcCk7CisJLyoqCisJICogUkVQTFlfUlggYW5kIFJFUExZX1JYX01QRFVfQ01EIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5LgorCSAqCVJFUExZX1JYOiBwaHlzaWNhbCBsYXllciBpbmZvIGlzIGluIHRoaXMgYnVmZmVyCisJICoJUkVQTFlfUlhfTVBEVV9DTUQ6IHBoeXNpY2FsIGxheWVyIGluZm8gd2FzIHNlbnQgaW4gc2VwYXJhdGUKKwkgKgkJY29tbWFuZCBhbmQgY2FjaGVkIGluIHByaXYtPmxhc3RfcGh5X3JlcworCSAqCisJICogSGVyZSB3ZSBzZXQgdXAgbG9jYWwgdmFyaWFibGVzIGRlcGVuZGluZyBvbiB3aGljaCBjb21tYW5kIGlzCisJICogcmVjZWl2ZWQuCisJICovCisJaWYgKHBrdC0+aGRyLmNtZCA9PSBSRVBMWV9SWCkgeworCQlwaHlfcmVzID0gKHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqKXBrdC0+dS5yYXc7CisJCWhlYWRlciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShwa3QtPnUucmF3ICsgc2l6ZW9mKCpwaHlfcmVzKQorCQkJCSsgcGh5X3Jlcy0+Y2ZnX3BoeV9jbnQpOworCisJCWxlbiA9IGxlMTZfdG9fY3B1KHBoeV9yZXMtPmJ5dGVfY291bnQpOworCQlyeF9wa3Rfc3RhdHVzID0gKihfX2xlMzIgKikocGt0LT51LnJhdyArIHNpemVvZigqcGh5X3JlcykgKworCQkJCXBoeV9yZXMtPmNmZ19waHlfY250ICsgbGVuKTsKKwkJYW1wZHVfc3RhdHVzID0gbGUzMl90b19jcHUocnhfcGt0X3N0YXR1cyk7CisJfSBlbHNlIHsKKwkJaWYgKCFwcml2LT5sYXN0X3BoeV9yZXNbMF0pIHsKKwkJCUlXTF9FUlIocHJpdiwgIk1QRFUgZnJhbWUgd2l0aG91dCBjYWNoZWQgUEhZIGRhdGFcbiIpOworCQkJcmV0dXJuOworCQl9CisJCXBoeV9yZXMgPSAoc3RydWN0IGl3bF9yeF9waHlfcmVzICopJnByaXYtPmxhc3RfcGh5X3Jlc1sxXTsKKwkJYW1zZHUgPSAoc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQgKilwa3QtPnUucmF3OworCQloZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikocGt0LT51LnJhdyArIHNpemVvZigqYW1zZHUpKTsKKwkJbGVuID0gbGUxNl90b19jcHUoYW1zZHUtPmJ5dGVfY291bnQpOworCQlyeF9wa3Rfc3RhdHVzID0gKihfX2xlMzIgKikocGt0LT51LnJhdyArIHNpemVvZigqYW1zZHUpICsgbGVuKTsKKwkJYW1wZHVfc3RhdHVzID0gaXdsX3RyYW5zbGF0ZV9yeF9zdGF0dXMocHJpdiwKKwkJCQlsZTMyX3RvX2NwdShyeF9wa3Rfc3RhdHVzKSk7CisJfQorCisJaWYgKCh1bmxpa2VseShwaHlfcmVzLT5jZmdfcGh5X2NudCA+IDIwKSkpIHsKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgImRzcCBzaXplIG91dCBvZiByYW5nZSBbMCwyMF06ICVkL24iLAorCQkJCXBoeV9yZXMtPmNmZ19waHlfY250KTsKKwkJcmV0dXJuOworCX0KKworCWlmICghKHJ4X3BrdF9zdGF0dXMgJiBSWF9SRVNfU1RBVFVTX05PX0NSQzMyX0VSUk9SKSB8fAorCSAgICAhKHJ4X3BrdF9zdGF0dXMgJiBSWF9SRVNfU1RBVFVTX05PX1JYRV9PVkVSRkxPVykpIHsKKwkJSVdMX0RFQlVHX1JYKHByaXYsICJCYWQgQ1JDIG9yIEZJRk86IDB4JTA4WC5cbiIsCisJCQkJbGUzMl90b19jcHUocnhfcGt0X3N0YXR1cykpOworCQlyZXR1cm47CisJfQorCisJLyogVGhpcyB3aWxsIGJlIHVzZWQgaW4gc2V2ZXJhbCBwbGFjZXMgbGF0ZXIgKi8KKwlyYXRlX25fZmxhZ3MgPSBsZTMyX3RvX2NwdShwaHlfcmVzLT5yYXRlX25fZmxhZ3MpOworCisJLyogcnhfc3RhdHVzIGNhcnJpZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhY2tldCB0byBtYWM4MDIxMSAqLworCXJ4X3N0YXR1cy5tYWN0aW1lID0gbGU2NF90b19jcHUocGh5X3Jlcy0+dGltZXN0YW1wKTsKIAlyeF9zdGF0dXMuZnJlcSA9Ci0JCWllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShsZTE2X3RvX2NwdShyeF9zdGFydC0+Y2hhbm5lbCkpOwotCXJ4X3N0YXR1cy5iYW5kID0gKHJ4X3N0YXJ0LT5waHlfZmxhZ3MgJiBSWF9SRVNfUEhZX0ZMQUdTX0JBTkRfMjRfTVNLKSA/CisJCWllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShsZTE2X3RvX2NwdShwaHlfcmVzLT5jaGFubmVsKSk7CisJcnhfc3RhdHVzLmJhbmQgPSAocGh5X3Jlcy0+cGh5X2ZsYWdzICYgUlhfUkVTX1BIWV9GTEFHU19CQU5EXzI0X01TSykgPwogCQkJCUlFRUU4MDIxMV9CQU5EXzJHSFogOiBJRUVFODAyMTFfQkFORF81R0haOwogCXJ4X3N0YXR1cy5yYXRlX2lkeCA9Ci0JCWl3bF9od3JhdGVfdG9fcGxjcF9pZHgobGUzMl90b19jcHUocnhfc3RhcnQtPnJhdGVfbl9mbGFncykpOwotCWlmIChyeF9zdGF0dXMuYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQotCQlyeF9zdGF0dXMucmF0ZV9pZHggLT0gSVdMX0ZJUlNUX09GRE1fUkFURTsKLQorCQlpd2xfaHdyYXRlX3RvX21hYzgwMjExX2lkeChyYXRlX25fZmxhZ3MsIHJ4X3N0YXR1cy5iYW5kKTsKIAlyeF9zdGF0dXMuZmxhZyA9IDA7CiAKIAkvKiBUU0YgaXNuJ3QgcmVsaWFibGUuIEluIG9yZGVyIHRvIGFsbG93IHNtb290aCB1c2VyIGV4cGVyaWVuY2UsCiAJICogdGhpcyBXL0EgZG9lc24ndCBwcm9wYWdhdGUgaXQgdG8gdGhlIG1hYzgwMjExICovCiAJLypyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1RTRlQ7Ki8KIAotCWlmICgodW5saWtlbHkocnhfc3RhcnQtPmNmZ19waHlfY250ID4gMjApKSkgewotCQlJV0xfREVCVUdfRFJPUChwcml2LCAiZHNwIHNpemUgb3V0IG9mIHJhbmdlIFswLDIwXTogJWQvbiIsCi0JCQkJcnhfc3RhcnQtPmNmZ19waHlfY250KTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghaW5jbHVkZV9waHkpIHsKLQkJaWYgKHByaXYtPmxhc3RfcGh5X3Jlc1swXSkKLQkJCXJ4X3N0YXJ0ID0gKHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqKQotCQkJCSZwcml2LT5sYXN0X3BoeV9yZXNbMV07Ci0JCWVsc2UKLQkJCXJ4X3N0YXJ0ID0gTlVMTDsKLQl9Ci0KLQlpZiAoIXJ4X3N0YXJ0KSB7Ci0JCUlXTF9FUlIocHJpdiwgIk1QRFUgZnJhbWUgd2l0aG91dCBhIFBIWSBkYXRhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChpbmNsdWRlX3BoeSkgewotCQloZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoKHU4ICopICZyeF9zdGFydFsxXQotCQkJCQkJICArIHJ4X3N0YXJ0LT5jZmdfcGh5X2NudCk7Ci0KLQkJbGVuID0gbGUxNl90b19jcHUocnhfc3RhcnQtPmJ5dGVfY291bnQpOwotCQlyeF9lbmQgPSAoX19sZTMyICopKHBrdC0+dS5yYXcgKyByeF9zdGFydC0+Y2ZnX3BoeV9jbnQgKwotCQkJCSAgc2l6ZW9mKHN0cnVjdCBpd2xfcnhfcGh5X3JlcykgKyBsZW4pOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0ICphbXNkdSA9Ci0JCQkoc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQgKilwa3QtPnUucmF3OwotCi0JCWhlYWRlciA9ICh2b2lkICopKHBrdC0+dS5yYXcgKwotCQkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0KSk7Ci0JCWxlbiA9IGxlMTZfdG9fY3B1KGFtc2R1LT5ieXRlX2NvdW50KTsKLQkJcnhfZW5kID0gKF9fbGUzMiAqKSAocGt0LT51LnJhdyArCi0JCQlzaXplb2Yoc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQpICsgbGVuKTsKLQl9Ci0KLQlpZiAoISgqcnhfZW5kICYgUlhfUkVTX1NUQVRVU19OT19DUkMzMl9FUlJPUikgfHwKLQkgICAgISgqcnhfZW5kICYgUlhfUkVTX1NUQVRVU19OT19SWEVfT1ZFUkZMT1cpKSB7Ci0JCUlXTF9ERUJVR19SWChwcml2LCAiQmFkIENSQyBvciBGSUZPOiAweCUwOFguXG4iLAotCQkJCWxlMzJfdG9fY3B1KCpyeF9lbmQpKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaXYtPnVjb2RlX2JlYWNvbl90aW1lID0gbGUzMl90b19jcHUocnhfc3RhcnQtPmJlYWNvbl90aW1lX3N0YW1wKTsKKwlwcml2LT51Y29kZV9iZWFjb25fdGltZSA9IGxlMzJfdG9fY3B1KHBoeV9yZXMtPmJlYWNvbl90aW1lX3N0YW1wKTsKIAogCS8qIEZpbmQgbWF4IHNpZ25hbCBzdHJlbmd0aCAoZEJtKSBhbW9uZyAzIGFudGVubmEvcmVjZWl2ZXIgY2hhaW5zICovCi0Jcnhfc3RhdHVzLnNpZ25hbCA9IGl3bF9jYWxjX3Jzc2kocHJpdiwgcnhfc3RhcnQpOworCXJ4X3N0YXR1cy5zaWduYWwgPSBpd2xfY2FsY19yc3NpKHByaXYsIHBoeV9yZXMpOwogCiAJLyogTWVhbmluZ2Z1bCBub2lzZSB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBvbmx5IGZyb20gYmVhY29uIHN0YXRpc3RpY3MsCiAJICogICB3aGljaCBhcmUgZ2F0aGVyZWQgb25seSB3aGVuIGFzc29jaWF0ZWQsIGFuZCBpbmRpY2F0ZSBub2lzZQpAQCAtMTA1OCwxMyArMTAwMiwxNCBAQAogCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpCiAJCXByaXYtPmxhc3Rfcnhfbm9pc2UgPSBJV0xfTk9JU0VfTUVBU19OT1RfQVZBSUxBQkxFOwogCi0JLyogU2V0ICIxIiB0byByZXBvcnQgZ29vZCBkYXRhIGZyYW1lcyBpbiBncm91cHMgb2YgMTAwICovCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlpZiAodW5saWtlbHkocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfUlgpKQotCQlpd2xfZGJnX3JlcG9ydF9mcmFtZShwcml2LCByeF9zdGFydCwgbGVuLCBoZWFkZXIsIDEpOworCS8qIFNldCAiMSIgdG8gcmVwb3J0IGdvb2QgZGF0YSBmcmFtZXMgaW4gZ3JvdXBzIG9mIDEwMCAqLworCWlmICh1bmxpa2VseShpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX1JYKSkKKwkJaXdsX2RiZ19yZXBvcnRfZnJhbWUocHJpdiwgcGh5X3JlcywgbGVuLCBoZWFkZXIsIDEpOwogI2VuZGlmCisJaXdsX2RiZ19sb2dfcnhfZGF0YV9mcmFtZShwcml2LCBsZW4sIGhlYWRlcik7CiAJSVdMX0RFQlVHX1NUQVRTX0xJTUlUKHByaXYsICJSc3NpICVkLCBub2lzZSAlZCwgcXVhbCAlZCwgVFNGICVsbHVcbiIsCi0JCXJ4X3N0YXR1cy5zaWduYWwsIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnNpZ25hbCwKKwkJcnhfc3RhdHVzLnNpZ25hbCwgcnhfc3RhdHVzLm5vaXNlLCByeF9zdGF0dXMucXVhbCwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylyeF9zdGF0dXMubWFjdGltZSk7CiAKIAkvKgpAQCAtMTA4MCwxOCArMTAyNSwyNiBAQAogCSAqIG5ldyA4MDIuMTFuIHJhZGlvdGFwIGZpZWxkICJSWCBjaGFpbnMiIHRoYXQgaXMgZGVmaW5lZAogCSAqIGFzIGEgYml0bWFzay4KIAkgKi8KLQlyeF9zdGF0dXMuYW50ZW5uYSA9IGxlMTZfdG9fY3B1KHJ4X3N0YXJ0LT5waHlfZmxhZ3MgJgotCQkJCQlSWF9SRVNfUEhZX0ZMQUdTX0FOVEVOTkFfTVNLKSA+PiA0OworCXJ4X3N0YXR1cy5hbnRlbm5hID0KKwkJbGUxNl90b19jcHUocGh5X3Jlcy0+cGh5X2ZsYWdzICYgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSykKKwkJPj4gUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX1BPUzsKIAogCS8qIHNldCB0aGUgcHJlYW1ibGUgZmxhZyBpZiBhcHByb3ByaWF0ZSAqLwotCWlmIChyeF9zdGFydC0+cGh5X2ZsYWdzICYgUlhfUkVTX1BIWV9GTEFHU19TSE9SVF9QUkVBTUJMRV9NU0spCisJaWYgKHBoeV9yZXMtPnBoeV9mbGFncyAmIFJYX1JFU19QSFlfRkxBR1NfU0hPUlRfUFJFQU1CTEVfTVNLKQogCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1NIT1JUUFJFOwogCi0JbmV0d29ya19wYWNrZXQgPSBpd2xfaXNfbmV0d29ya19wYWNrZXQocHJpdiwgaGVhZGVyKTsKLQlpZiAobmV0d29ya19wYWNrZXQpIHsKKwkvKiBTZXQgdXAgdGhlIEhUIHBoeSBmbGFncyAqLworCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19IVF9NU0spCisJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfSFQ7CisJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0hUNDBfTVNLKQorCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHXzQwTUhaOworCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19TR0lfTVNLKQorCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1NIT1JUX0dJOworCisJaWYgKGl3bF9pc19uZXR3b3JrX3BhY2tldChwcml2LCBoZWFkZXIpKSB7CiAJCXByaXYtPmxhc3RfcnhfcnNzaSA9IHJ4X3N0YXR1cy5zaWduYWw7CiAJCXByaXYtPmxhc3RfYmVhY29uX3RpbWUgPSAgcHJpdi0+dWNvZGVfYmVhY29uX3RpbWU7Ci0JCXByaXYtPmxhc3RfdHNmID0gbGU2NF90b19jcHUocnhfc3RhcnQtPnRpbWVzdGFtcCk7CisJCXByaXYtPmxhc3RfdHNmID0gbGU2NF90b19jcHUocGh5X3Jlcy0+dGltZXN0YW1wKTsKIAl9CiAKIAlmYyA9IGxlMTZfdG9fY3B1KGhlYWRlci0+ZnJhbWVfY29udHJvbCk7CkBAIC0xMTAzLDggKzEwNTYsOCBAQAogCQkJCQkJaGVhZGVyLT5hZGRyMik7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6Ci0JCQlpd2xfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEocHJpdiwgaW5jbHVkZV9waHksIHJ4YiwKLQkJCQkgICAmcnhfc3RhdHVzKTsKKwkJaXdsX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHByaXYsIGhlYWRlciwgbGVuLCBhbXBkdV9zdGF0dXMsCisJCQkJcnhiLCAmcnhfc3RhdHVzKTsKIAkJYnJlYWs7CiAKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKaW5kZXggZTI2ODc1ZC4uNGYzYTEwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYwpAQCAtMTA5LDEzICsxMDksMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQpOwogCi1pbnQgaXdsX3NlbmRfc2Nhbl9hYm9ydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bF9zZW5kX3NjYW5fYWJvcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpyZXM7CiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1NDQU5fQUJPUlRfQ01ELAotCQkubWV0YS5mbGFncyA9IENNRF9XQU5UX1NLQiwKKwkJLmZsYWdzID0gQ01EX1dBTlRfU0tCLAogCX07CiAKIAkvKiBJZiB0aGVyZSBpc24ndCBhIHNjYW4gYWN0aXZlbHkgZ29pbmcgb24gaW4gdGhlIGhhcmR3YXJlCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKKwlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQucmVwbHlfc2tiLT5kYXRhOwogCWlmIChyZXMtPnUuc3RhdHVzICE9IENBTl9BQk9SVF9TVEFUVVMpIHsKIAkJLyogVGhlIHNjYW4gYWJvcnQgd2lsbCByZXR1cm4gMSBmb3Igc3VjY2VzcyBvcgogCQkgKiAyIGZvciAiZmFpbHVyZSIuICBBIGZhaWx1cmUgY29uZGl0aW9uIGNhbiBiZQpAQCAtMTQ2LDExICsxNDYsMTAgQEAKIAl9CiAKIAlwcml2LT5hbGxvY19yeGJfc2tiLS07Ci0JZGV2X2tmcmVlX3NrYl9hbnkoY21kLm1ldGEudS5za2IpOworCWRldl9rZnJlZV9za2JfYW55KGNtZC5yZXBseV9za2IpOwogCiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woaXdsX3NlbmRfc2Nhbl9hYm9ydCk7CiAKIC8qIFNlcnZpY2UgcmVzcG9uc2UgdG8gUkVQTFlfU0NBTl9DTUQgKDB4ODApICovCiBzdGF0aWMgdm9pZCBpd2xfcnhfcmVwbHlfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0zMjIsNyArMzIxLDcgQEAKIAkJCQkgICAgIHU4IGlzX2FjdGl2ZSwgdTggbl9wcm9iZXMsCiAJCQkJICAgICBzdHJ1Y3QgaXdsX3NjYW5fY2hhbm5lbCAqc2Nhbl9jaCkKIHsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJdTE2IHBhc3NpdmVfZHdlbGwgPSAwOwpAQCAtMzM0LDIwICszMzMsMTkgQEAKIAlpZiAoIXNiYW5kKQogCQlyZXR1cm4gMDsKIAotCWNoYW5uZWxzID0gc2JhbmQtPmNoYW5uZWxzOwotCiAJYWN0aXZlX2R3ZWxsID0gaXdsX2dldF9hY3RpdmVfZHdlbGxfdGltZShwcml2LCBiYW5kLCBuX3Byb2Jlcyk7CiAJcGFzc2l2ZV9kd2VsbCA9IGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQpOwogCiAJaWYgKHBhc3NpdmVfZHdlbGwgPD0gYWN0aXZlX2R3ZWxsKQogCQlwYXNzaXZlX2R3ZWxsID0gYWN0aXZlX2R3ZWxsICsgMTsKIAotCWZvciAoaSA9IDAsIGFkZGVkID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKLQkJaWYgKGNoYW5uZWxzW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJZm9yIChpID0gMCwgYWRkZWQgPSAwOyBpIDwgcHJpdi0+c2Nhbl9yZXF1ZXN0LT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJY2hhbiA9IHByaXYtPnNjYW5fcmVxdWVzdC0+Y2hhbm5lbHNbaV07CisKKwkJaWYgKGNoYW4tPmJhbmQgIT0gYmFuZCkKIAkJCWNvbnRpbnVlOwogCi0JCWNoYW5uZWwgPQotCQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNoYW5uZWxzW2ldLmNlbnRlcl9mcmVxKTsKKwkJY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaGFuLT5jZW50ZXJfZnJlcSk7CiAJCXNjYW5fY2gtPmNoYW5uZWwgPSBjcHVfdG9fbGUxNihjaGFubmVsKTsKIAogCQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgYmFuZCwgY2hhbm5lbCk7CkBAIC0zNTgsNyArMzU2LDcgQEAKIAkJfQogCiAJCWlmICghaXNfYWN0aXZlIHx8IGlzX2NoYW5uZWxfcGFzc2l2ZShjaF9pbmZvKSB8fAotCQkgICAgKGNoYW5uZWxzW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKSkKKwkJICAgIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikpCiAJCQlzY2FuX2NoLT50eXBlID0gU0NBTl9DSEFOTkVMX1RZUEVfUEFTU0lWRTsKIAkJZWxzZQogCQkJc2Nhbl9jaC0+dHlwZSA9IFNDQU5fQ0hBTk5FTF9UWVBFX0FDVElWRTsKQEAgLTQwNSw3ICs0MDMsNyBAQAogCQlwcml2LT5zY2FuX3R4X2FudFtJRUVFODAyMTFfQkFORF8yR0haXSA9IGFudF9pZHg7CiB9CiAKLWludCBpd2xfc2Nhbl9pbml0aWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bF9zY2FuX2luaXRpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewogCQlJV0xfREVCVUdfU0NBTihwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm90IHJlYWR5LlxuIik7CkBAIC00MjMsMTAgKzQyMSw2IEBACiAJfQogCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlN0YXJ0aW5nIHNjYW4uLi5cbiIpOwotCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfRykKLQkJcHJpdi0+c2Nhbl9iYW5kcyB8PSBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7Ci0JaWYgKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9BKQotCQlwcml2LT5zY2FuX2JhbmRzIHw9IEJJVChJRUVFODAyMTFfQkFORF81R0haKTsKIAlzZXRfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7CiAJcHJpdi0+c2Nhbl9zdGFydCA9IGppZmZpZXM7CiAJcHJpdi0+c2Nhbl9wYXNzX3N0YXJ0ID0gcHJpdi0+c2Nhbl9zdGFydDsKQEAgLTQzNSw3ICs0MjksNiBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGl3bF9zY2FuX2luaXRpYXRlKTsKIAogI2RlZmluZSBJV0xfREVMQVlfTkVYVF9TQ0FOIChIWioyKQogCkBAIC00NDQsNyArNDM3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCkBAIC00NzgsNiArNDcxLDEwIEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKKwlwcml2LT5zY2FuX2JhbmRzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcmVxLT5uX2NoYW5uZWxzOyBpKyspCisJCXByaXYtPnNjYW5fYmFuZHMgfD0gQklUKHJlcS0+Y2hhbm5lbHNbaV0tPmJhbmQpOworCiAJcHJpdi0+c2Nhbl9yZXF1ZXN0ID0gcmVxOwogCiAJcmV0ID0gaXdsX3NjYW5faW5pdGlhdGUocHJpdik7CkBAIC01NzAsNyArNTY3LDcgQEAKIAlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfU0NBTl9DTUQsCiAJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9zY2FuX2NtZCksCi0JCS5tZXRhLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKKwkJLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKIAl9OwogCXN0cnVjdCBpd2xfc2Nhbl9jbWQgKnNjYW47CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gTlVMTDsKQEAgLTc5OSw3ICs3OTYsOCBAQAogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIGFib3J0X3NjYW4pOwogCi0JaWYgKCFpd2xfaXNfcmVhZHkocHJpdikpCisJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpIHx8CisJICAgICF0ZXN0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCmluZGV4IGZmZDVjNjEuLmEyYjllYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCkBAIC05Nyw4ICs5Nyw5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBpd2xfYWRkX3N0YV9jYWxsYmFjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgc3RydWN0IGl3bF9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGl3bF9hZGRfc3RhX2NhbGxiYWNrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IGl3bF9kZXZpY2VfY21kICpjbWQsCisJCQkJIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnJlcyA9IE5VTEw7CiAJc3RydWN0IGl3bF9hZGRzdGFfY21kICphZGRzdGEgPQpAQCAtMTA3LDE0ICsxMDgsMTQgQEAKIAogCWlmICghc2tiKSB7CiAJCUlXTF9FUlIocHJpdiwgIkVycm9yOiBSZXNwb25zZSBOVUxMIGluIFJFUExZX0FERF9TVEEuXG4iKTsKLQkJcmV0dXJuIDE7CisJCXJldHVybjsKIAl9CiAKIAlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilza2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7CiAJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAogCQkJICByZXMtPmhkci5mbGFncyk7Ci0JCXJldHVybiAxOworCQlyZXR1cm47CiAJfQogCiAJc3dpdGNoIChyZXMtPnUuYWRkX3N0YS5zdGF0dXMpIHsKQEAgLTEyNiw5ICsxMjcsNiBAQAogCQkJICAgICByZXMtPnUuYWRkX3N0YS5zdGF0dXMpOwogCQlicmVhazsKIAl9Ci0KLQkvKiBXZSBkaWRuJ3QgY2FjaGUgdGhlIFNLQjsgbGV0IHRoZSBjYWxsZXIgZnJlZSBpdCAqLwotCXJldHVybiAxOwogfQogCiBpbnQgaXdsX3NlbmRfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0xMzksMTQgKzEzNywxNCBAQAogCXU4IGRhdGFbc2l6ZW9mKCpzdGEpXTsKIAlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfQUREX1NUQSwKLQkJLm1ldGEuZmxhZ3MgPSBmbGFncywKKwkJLmZsYWdzID0gZmxhZ3MsCiAJCS5kYXRhID0gZGF0YSwKIAl9OwogCiAJaWYgKGZsYWdzICYgQ01EX0FTWU5DKQotCQljbWQubWV0YS51LmNhbGxiYWNrID0gaXdsX2FkZF9zdGFfY2FsbGJhY2s7CisJCWNtZC5jYWxsYmFjayA9IGl3bF9hZGRfc3RhX2NhbGxiYWNrOwogCWVsc2UKLQkJY21kLm1ldGEuZmxhZ3MgfD0gQ01EX1dBTlRfU0tCOworCQljbWQuZmxhZ3MgfD0gQ01EX1dBTlRfU0tCOwogCiAJY21kLmxlbiA9IHByaXYtPmNmZy0+b3BzLT51dGlscy0+YnVpbGRfYWRkc3RhX2hjbWQoc3RhLCBkYXRhKTsKIAlyZXQgPSBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZCk7CkBAIC0xNTQsNyArMTUyLDcgQEAKIAlpZiAocmV0IHx8IChmbGFncyAmIENNRF9BU1lOQykpCiAJCXJldHVybiByZXQ7CiAKLQlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKKwlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQucmVwbHlfc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewogCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKIAkJCSAgcmVzLT5oZHIuZmxhZ3MpOwpAQCAtMTc1LDcgKzE3Myw3IEBACiAJfQogCiAJcHJpdi0+YWxsb2NfcnhiX3NrYi0tOwotCWRldl9rZnJlZV9za2JfYW55KGNtZC5tZXRhLnUuc2tiKTsKKwlkZXZfa2ZyZWVfc2tiX2FueShjbWQucmVwbHlfc2tiKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMTYsMTAgKzIxNCwxMCBAQAogCXN0YV9mbGFncyB8PSBjcHVfdG9fbGUzMigKIAkgICAgICAodTMyKXN0YV9odF9pbmYtPmFtcGR1X2RlbnNpdHkgPDwgU1RBX0ZMR19BR0dfTVBEVV9ERU5TSVRZX1BPUyk7CiAKLQlpZiAoaXdsX2lzX2ZhdF90eF9hbGxvd2VkKHByaXYsIHN0YV9odF9pbmYpKQotCQlzdGFfZmxhZ3MgfD0gU1RBX0ZMR19GQVRfRU5fTVNLOworCWlmIChpd2xfaXNfaHQ0MF90eF9hbGxvd2VkKHByaXYsIHN0YV9odF9pbmYpKQorCQlzdGFfZmxhZ3MgfD0gU1RBX0ZMR19IVDQwX0VOX01TSzsKIAllbHNlCi0JCXN0YV9mbGFncyAmPSB+U1RBX0ZMR19GQVRfRU5fTVNLOworCQlzdGFfZmxhZ3MgJj0gflNUQV9GTEdfSFQ0MF9FTl9NU0s7CiAKIAlwcml2LT5zdGF0aW9uc1tpbmRleF0uc3RhLnN0YXRpb25fZmxhZ3MgPSBzdGFfZmxhZ3M7CiAgZG9uZToKQEAgLTMyNCw4ICszMjIsOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgaXdsX3JlbW92ZV9zdGFfY2FsbGJhY2soc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgIHN0cnVjdCBpd2xfY21kICpjbWQsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBpd2xfcmVtb3ZlX3N0YV9jYWxsYmFjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kLAorCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpyZXMgPSBOVUxMOwogCXN0cnVjdCBpd2xfcmVtX3N0YV9jbWQgKnJtX3N0YSA9CkBAIC0zMzQsMTQgKzMzMywxNCBAQAogCiAJaWYgKCFza2IpIHsKIAkJSVdMX0VSUihwcml2LCAiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gUkVQTFlfUkVNT1ZFX1NUQS5cbiIpOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuOwogCX0KIAogCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXNrYi0+ZGF0YTsKIAlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKIAkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCiAJCXJlcy0+aGRyLmZsYWdzKTsKLQkJcmV0dXJuIDE7CisJCXJldHVybjsKIAl9CiAKIAlzd2l0Y2ggKHJlcy0+dS5yZW1fc3RhLnN0YXR1cykgewpAQCAtMzUyLDkgKzM1MSw2IEBACiAJCUlXTF9FUlIocHJpdiwgIlJFUExZX1JFTU9WRV9TVEEgZmFpbGVkXG4iKTsKIAkJYnJlYWs7CiAJfQotCi0JLyogV2UgZGlkbid0IGNhY2hlIHRoZSBTS0I7IGxldCB0aGUgY2FsbGVyIGZyZWUgaXQgKi8KLQlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCBpd2xfc2VuZF9yZW1vdmVfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLApAQCAtMzY4LDcgKzM2NCw3IEBACiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1JFTU9WRV9TVEEsCiAJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9yZW1fc3RhX2NtZCksCi0JCS5tZXRhLmZsYWdzID0gZmxhZ3MsCisJCS5mbGFncyA9IGZsYWdzLAogCQkuZGF0YSA9ICZybV9zdGFfY21kLAogCX07CiAKQEAgLTM3NywxNSArMzczLDE1IEBACiAJbWVtY3B5KCZybV9zdGFfY21kLmFkZHIsIGFkZHIgLCBFVEhfQUxFTik7CiAKIAlpZiAoZmxhZ3MgJiBDTURfQVNZTkMpCi0JCWNtZC5tZXRhLnUuY2FsbGJhY2sgPSBpd2xfcmVtb3ZlX3N0YV9jYWxsYmFjazsKKwkJY21kLmNhbGxiYWNrID0gaXdsX3JlbW92ZV9zdGFfY2FsbGJhY2s7CiAJZWxzZQotCQljbWQubWV0YS5mbGFncyB8PSBDTURfV0FOVF9TS0I7CisJCWNtZC5mbGFncyB8PSBDTURfV0FOVF9TS0I7CiAJcmV0ID0gaXdsX3NlbmRfY21kKHByaXYsICZjbWQpOwogCiAJaWYgKHJldCB8fCAoZmxhZ3MgJiBDTURfQVNZTkMpKQogCQlyZXR1cm4gcmV0OwogCi0JcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CisJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLnJlcGx5X3NrYi0+ZGF0YTsKIAlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKIAkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCiAJCQkgIHJlcy0+aGRyLmZsYWdzKTsKQEAgLTQwNiw3ICs0MDIsNyBAQAogCX0KIAogCXByaXYtPmFsbG9jX3J4Yl9za2ItLTsKLQlkZXZfa2ZyZWVfc2tiX2FueShjbWQubWV0YS51LnNrYik7CisJZGV2X2tmcmVlX3NrYl9hbnkoY21kLnJlcGx5X3NrYik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDY4LDcgKzQ2NCw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChpd2xfcmVtb3ZlX3N0YXRpb24pOwogCiAvKioKICAqIGl3bF9jbGVhcl9zdGF0aW9uc190YWJsZSAtIENsZWFyIHRoZSBkcml2ZXIncyBzdGF0aW9uIHRhYmxlCkBAIC01MjUsNyArNTIwLDcgQEAKIAlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfV0VQS0VZLAogCQkuZGF0YSA9IHdlcF9jbWQsCi0JCS5tZXRhLmZsYWdzID0gQ01EX0FTWU5DLAorCQkuZmxhZ3MgPSBDTURfU1lOQywKIAl9OwogCiAJbWVtc2V0KHdlcF9jbWQsIDAsIGNtZF9zaXplICsKQEAgLTkzMCw3ICs5MjUsNyBAQAogCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kID0gewogCQkuaWQgPSBSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01ELAogCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCksCi0JCS5tZXRhLmZsYWdzID0gZmxhZ3MsCisJCS5mbGFncyA9IGZsYWdzLAogCQkuZGF0YSA9IGxxLAogCX07CiAKQEAgLTEwNTYsMTEgKzEwNTEsMTAgQEAKIGludCBpd2xfZ2V0X3N0YV9pZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJaW50IHN0YV9pZDsKLQl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAogCS8qIElmIHRoaXMgZnJhbWUgaXMgYnJvYWRjYXN0IG9yIG1hbmFnZW1lbnQsIHVzZSBicm9hZGNhc3Qgc3RhdGlvbiBpZCAqLwotCWlmICgoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBKSB8fAotCSAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGZjKSB8fCAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCiAJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJc3dpdGNoIChwcml2LT5pd19tb2RlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCAyZTg5MDQwLi5hNzQyMmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKQogCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKIAotCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkgKiBxLT5uX3dpbmRvdzsKKwlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9kZXZpY2VfY21kKSAqIHEtPm5fd2luZG93OwogCiAJLyogRGUtYWxsb2MgYXJyYXkgb2YgY29tbWFuZC90eCBidWZmZXJzICovCiAJZm9yIChpID0gMDsgaSA8IFRGRF9UWF9DTURfU0xPVFM7IGkrKykKQEAgLTE1Niw2ICsxNTYsMTIgQEAKIAlrZnJlZSh0eHEtPnR4Yik7CiAJdHhxLT50eGIgPSBOVUxMOwogCisJLyogZGVhbGxvY2F0ZSBhcnJheXMgKi8KKwlrZnJlZSh0eHEtPmNtZCk7CisJa2ZyZWUodHhxLT5tZXRhKTsKKwl0eHEtPmNtZCA9IE5VTEw7CisJdHhxLT5tZXRhID0gTlVMTDsKKwogCS8qIDAtZmlsbCBxdWV1ZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSAqLwogCW1lbXNldCh0eHEsIDAsIHNpemVvZigqdHhxKSk7CiB9CkBAIC0xNzksNyArMTg1LDcgQEAKIAlpZiAocS0+bl9iZCA9PSAwKQogCQlyZXR1cm47CiAKLQlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9jbWQpICogcS0+bl93aW5kb3c7CisJbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfZGV2aWNlX2NtZCkgKiBxLT5uX3dpbmRvdzsKIAlsZW4gKz0gSVdMX01BWF9TQ0FOX1NJWkU7CiAKIAkvKiBEZS1hbGxvYyBhcnJheSBvZiBjb21tYW5kL3R4IGJ1ZmZlcnMgKi8KQEAgLTMxOCw2ICszMjQsNyBAQAogewogCWludCBpLCBsZW47CiAJaW50IHJldDsKKwlpbnQgYWN0dWFsX3Nsb3RzID0gc2xvdHNfbnVtOwogCiAJLyoKIAkgKiBBbGxvYyBidWZmZXIgYXJyYXkgZm9yIGNvbW1hbmRzIChUeCBvciBvdGhlciB0eXBlcyBvZiBjb21tYW5kcykuCkBAIC0zMjcsMTQgKzMzNCwyMiBAQAogCSAqIEZvciBub3JtYWwgVHggcXVldWVzIChhbGwgb3RoZXIgcXVldWVzKSwgbm8gc3VwZXItc2l6ZSBjb21tYW5kCiAJICogc3BhY2UgaXMgbmVlZGVkLgogCSAqLwotCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2NtZCk7Ci0JZm9yIChpID0gMDsgaSA8PSBzbG90c19udW07IGkrKykgewotCQlpZiAoaSA9PSBzbG90c19udW0pIHsKLQkJCWlmICh0eHFfaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCi0JCQkJbGVuICs9IElXTF9NQVhfU0NBTl9TSVpFOwotCQkJZWxzZQotCQkJCWNvbnRpbnVlOwotCQl9CisJaWYgKHR4cV9pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkKKwkJYWN0dWFsX3Nsb3RzKys7CisKKwl0eHEtPm1ldGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXdsX2NtZF9tZXRhKSAqIGFjdHVhbF9zbG90cywKKwkJCSAgICBHRlBfS0VSTkVMKTsKKwl0eHEtPmNtZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqKSAqIGFjdHVhbF9zbG90cywKKwkJCSAgIEdGUF9LRVJORUwpOworCisJaWYgKCF0eHEtPm1ldGEgfHwgIXR4cS0+Y21kKQorCQlnb3RvIG91dF9mcmVlX2FycmF5czsKKworCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2RldmljZV9jbWQpOworCWZvciAoaSA9IDA7IGkgPCBhY3R1YWxfc2xvdHM7IGkrKykgeworCQkvKiBvbmx5IGhhcHBlbnMgZm9yIGNtZCBxdWV1ZSAqLworCQlpZiAoaSA9PSBzbG90c19udW0pCisJCQlsZW4gKz0gSVdMX01BWF9TQ0FOX1NJWkU7CiAKIAkJdHhxLT5jbWRbaV0gPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdHhxLT5jbWRbaV0pCkBAIC0zNDgsNiArMzYzLDEwIEBACiAKIAl0eHEtPm5lZWRfdXBkYXRlID0gMDsKIAorCS8qIGFnZ3JlZ2F0aW9uIFRYIHF1ZXVlcyB3aWxsIGdldCB0aGVpciBJRCB3aGVuIGFnZ3JlZ2F0aW9uIGJlZ2lucyAqLworCWlmICh0eHFfaWQgPD0gSVdMX1RYX0ZJRk9fQUMzKQorCQl0eHEtPnN3cV9pZCA9IHR4cV9pZDsKKwogCS8qIFRGRF9RVUVVRV9TSVpFX01BWCBtdXN0IGJlIHBvd2VyLW9mLXR3byBzaXplLCBvdGhlcndpc2UKIAkgKiBpd2xfcXVldWVfaW5jX3dyYXAgYW5kIGl3bF9xdWV1ZV9kZWNfd3JhcCBhcmUgYnJva2VuLiAqLwogCUJVSUxEX0JVR19PTihURkRfUVVFVUVfU0laRV9NQVggJiAoVEZEX1FVRVVFX1NJWkVfTUFYIC0gMSkpOwpAQCAtMzYwLDE1ICszNzksMTIgQEAKIAogCXJldHVybiAwOwogZXJyOgotCWZvciAoaSA9IDA7IGkgPCBzbG90c19udW07IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBhY3R1YWxfc2xvdHM7IGkrKykKIAkJa2ZyZWUodHhxLT5jbWRbaV0pOwotCQl0eHEtPmNtZFtpXSA9IE5VTEw7Ci0JfQorb3V0X2ZyZWVfYXJyYXlzOgorCWtmcmVlKHR4cS0+bWV0YSk7CisJa2ZyZWUodHhxLT5jbWQpOwogCi0JaWYgKHR4cV9pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkgewotCQlrZnJlZSh0eHEtPmNtZFtzbG90c19udW1dKTsKLQkJdHhxLT5jbWRbc2xvdHNfbnVtXSA9IE5VTEw7Ci0JfQogCXJldHVybiAtRU5PTUVNOwogfQogRVhQT1JUX1NZTUJPTChpd2xfdHhfcXVldWVfaW5pdCk7CkBAIC01NTAsNjIgKzU2Niw4MSBAQAogc3RhdGljIHZvaWQgaXdsX3R4X2NtZF9idWlsZF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBpd2xfdHhfY21kICp0eF9jbWQsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCi0JCQkgICAgICBfX2xlMTYgZmMsIGludCBzdGFfaWQsCi0JCQkgICAgICBpbnQgaXNfaGNjYSkKKwkJCSAgICAgIF9fbGUxNiBmYywgaW50IGlzX2hjY2EpCiB7Ci0JdTMyIHJhdGVfZmxhZ3MgPSAwOworCXUzMiByYXRlX2ZsYWdzOwogCWludCByYXRlX2lkeDsKLQl1OCBydHNfcmV0cnlfbGltaXQgPSAwOwotCXU4IGRhdGFfcmV0cnlfbGltaXQgPSAwOworCXU4IHJ0c19yZXRyeV9saW1pdDsKKwl1OCBkYXRhX3JldHJ5X2xpbWl0OwogCXU4IHJhdGVfcGxjcDsKIAotCXJhdGVfaWR4ID0gbWluKGllZWU4MDIxMV9nZXRfdHhfcmF0ZShwcml2LT5odywgaW5mbyktPmh3X3ZhbHVlICYgMHhmZmZmLAotCQkJSVdMX1JBVEVfQ09VTlQgLSAxKTsKLQotCXJhdGVfcGxjcCA9IGl3bF9yYXRlc1tyYXRlX2lkeF0ucGxjcDsKLQotCXJ0c19yZXRyeV9saW1pdCA9IChpc19oY2NhKSA/Ci0JICAgIFJUU19IQ0NBX1JFVFJZX0xJTUlUIDogUlRTX0RGQVVMVF9SRVRSWV9MSU1JVDsKLQotCWlmICgocmF0ZV9pZHggPj0gSVdMX0ZJUlNUX0NDS19SQVRFKSAmJiAocmF0ZV9pZHggPD0gSVdMX0xBU1RfQ0NLX1JBVEUpKQotCQlyYXRlX2ZsYWdzIHw9IFJBVEVfTUNTX0NDS19NU0s7Ci0KLQotCWlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpIHsKLQkJZGF0YV9yZXRyeV9saW1pdCA9IDM7Ci0JCWlmIChkYXRhX3JldHJ5X2xpbWl0IDwgcnRzX3JldHJ5X2xpbWl0KQotCQkJcnRzX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKLQl9IGVsc2UKLQkJZGF0YV9yZXRyeV9saW1pdCA9IElXTF9ERUZBVUxUX1RYX1JFVFJZOwotCisJLyogU2V0IHJldHJ5IGxpbWl0IG9uIERBVEEgcGFja2V0cyBhbmQgUHJvYmUgUmVzcG9uc2VzKi8KIAlpZiAocHJpdi0+ZGF0YV9yZXRyeV9saW1pdCAhPSAtMSkKIAkJZGF0YV9yZXRyeV9saW1pdCA9IHByaXYtPmRhdGFfcmV0cnlfbGltaXQ7CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQorCQlkYXRhX3JldHJ5X2xpbWl0ID0gMzsKKwllbHNlCisJCWRhdGFfcmV0cnlfbGltaXQgPSBJV0xfREVGQVVMVF9UWF9SRVRSWTsKKwl0eF9jbWQtPmRhdGFfcmV0cnlfbGltaXQgPSBkYXRhX3JldHJ5X2xpbWl0OwogCisJLyogU2V0IHJldHJ5IGxpbWl0IG9uIFJUUyBwYWNrZXRzICovCisJcnRzX3JldHJ5X2xpbWl0ID0gKGlzX2hjY2EpID8gIFJUU19IQ0NBX1JFVFJZX0xJTUlUIDoKKwkJUlRTX0RGQVVMVF9SRVRSWV9MSU1JVDsKKwlpZiAoZGF0YV9yZXRyeV9saW1pdCA8IHJ0c19yZXRyeV9saW1pdCkKKwkJcnRzX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKKwl0eF9jbWQtPnJ0c19yZXRyeV9saW1pdCA9IHJ0c19yZXRyeV9saW1pdDsKIAorCS8qIERBVEEgcGFja2V0cyB3aWxsIHVzZSB0aGUgdUNvZGUgc3RhdGlvbiB0YWJsZSBmb3IgcmF0ZS9hbnRlbm5hCisJICogc2VsZWN0aW9uICovCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkgewogCQl0eF9jbWQtPmluaXRpYWxfcmF0ZV9pbmRleCA9IDA7CiAJCXR4X2NtZC0+dHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19TVEFfUkFURV9NU0s7Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgewotCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9BVVRIKToKLQkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfREVBVVRIKToKLQkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRKToKLQkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOgotCQkJaWYgKHR4X2NtZC0+dHhfZmxhZ3MgJiBUWF9DTURfRkxHX1JUU19NU0spIHsKLQkJCQl0eF9jbWQtPnR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX1JUU19NU0s7Ci0JCQkJdHhfY21kLT50eF9mbGFncyB8PSBUWF9DTURfRkxHX0NUU19NU0s7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcHJpdi0+bWdtdF90eF9hbnQgPSBpd2xfdG9nZ2xlX3R4X2FudChwcml2LCBwcml2LT5tZ210X3R4X2FudCk7Ci0JCXJhdGVfZmxhZ3MgfD0gaXdsX2FudF9pZHhfdG9fZmxhZ3MocHJpdi0+bWdtdF90eF9hbnQpOworCQlyZXR1cm47CiAJfQogCi0JdHhfY21kLT5ydHNfcmV0cnlfbGltaXQgPSBydHNfcmV0cnlfbGltaXQ7Ci0JdHhfY21kLT5kYXRhX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKKwkvKioKKwkgKiBJZiB0aGUgY3VycmVudCBUWCByYXRlIHN0b3JlZCBpbiBtYWM4MDIxMSBoYXMgdGhlIE1DUyBiaXQgc2V0LCBpdCdzCisJICogbm90IHJlYWxseSBhIFRYIHJhdGUuICBUaHVzLCB3ZSB1c2UgdGhlIGxvd2VzdCBzdXBwb3J0ZWQgcmF0ZSBmb3IKKwkgKiB0aGlzIGJhbmQuICBBbHNvIHVzZSB0aGUgbG93ZXN0IHN1cHBvcnRlZCByYXRlIGlmIHRoZSBzdG9yZWQgcmF0ZQorCSAqIGluZGV4IGlzIGludmFsaWQuCisJICovCisJcmF0ZV9pZHggPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeDsKKwlpZiAoaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MgfHwKKwkJCShyYXRlX2lkeCA8IDApIHx8IChyYXRlX2lkeCA+IElXTF9SQVRFX0NPVU5UX0xFR0FDWSkpCisJCXJhdGVfaWR4ID0gcmF0ZV9sb3dlc3RfaW5kZXgoJnByaXYtPmJhbmRzW2luZm8tPmJhbmRdLAorCQkJCWluZm8tPmNvbnRyb2wuc3RhKTsKKwkvKiBGb3IgNSBHSFogYmFuZCwgcmVtYXAgbWFjODAyMTEgcmF0ZSBpbmRpY2VzIGludG8gZHJpdmVyIGluZGljZXMgKi8KKwlpZiAoaW5mby0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQlyYXRlX2lkeCArPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCS8qIEdldCBQTENQIHJhdGUgZm9yIHR4X2NtZC0+cmF0ZV9uX2ZsYWdzICovCisJcmF0ZV9wbGNwID0gaXdsX3JhdGVzW3JhdGVfaWR4XS5wbGNwOworCS8qIFplcm8gb3V0IGZsYWdzIGZvciB0aGlzIHBhY2tldCAqLworCXJhdGVfZmxhZ3MgPSAwOworCisJLyogU2V0IENDSyBmbGFnIGFzIG5lZWRlZCAqLworCWlmICgocmF0ZV9pZHggPj0gSVdMX0ZJUlNUX0NDS19SQVRFKSAmJiAocmF0ZV9pZHggPD0gSVdMX0xBU1RfQ0NLX1JBVEUpKQorCQlyYXRlX2ZsYWdzIHw9IFJBVEVfTUNTX0NDS19NU0s7CisKKwkvKiBTZXQgdXAgUlRTIGFuZCBDVFMgZmxhZ3MgZm9yIGNlcnRhaW4gcGFja2V0cyAqLworCXN3aXRjaCAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9TVFlQRSkpIHsKKwljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9BVVRIKToKKwljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9ERUFVVEgpOgorCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSk6CisJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOgorCQlpZiAodHhfY21kLT50eF9mbGFncyAmIFRYX0NNRF9GTEdfUlRTX01TSykgeworCQkJdHhfY21kLT50eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19SVFNfTVNLOworCQkJdHhfY21kLT50eF9mbGFncyB8PSBUWF9DTURfRkxHX0NUU19NU0s7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IHVwIGFudGVubmFzICovCisJcHJpdi0+bWdtdF90eF9hbnQgPSBpd2xfdG9nZ2xlX3R4X2FudChwcml2LCBwcml2LT5tZ210X3R4X2FudCk7CisJcmF0ZV9mbGFncyB8PSBpd2xfYW50X2lkeF90b19mbGFncyhwcml2LT5tZ210X3R4X2FudCk7CisKKwkvKiBTZXQgdGhlIHJhdGUgaW4gdGhlIFRYIGNtZCAqLwogCXR4X2NtZC0+cmF0ZV9uX2ZsYWdzID0gaXdsX2h3X3NldF9yYXRlX25fZmxhZ3MocmF0ZV9wbGNwLCByYXRlX2ZsYWdzKTsKIH0KIApAQCAtNjUyLDE0ICs2ODcsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaXdsX3VwZGF0ZV90eF9zdGF0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBmYywgdTE2IGxlbikKLXsKLQkvKiAwIC0gbWdtdCwgMSAtIGNudCwgMiAtIGRhdGEgKi8KLQlpbnQgaWR4ID0gKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDI7Ci0JcHJpdi0+dHhfc3RhdHNbaWR4XS5jbnQrKzsKLQlwcml2LT50eF9zdGF0c1tpZHhdLmJ5dGVzICs9IGxlbjsKLX0KLQogLyoKICAqIHN0YXJ0IFJFUExZX1RYIGNvbW1hbmQgcHJvY2VzcwogICovCkBAIC02NjksNyArNjk2LDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxOwogCXN0cnVjdCBpd2xfcXVldWUgKnE7Ci0Jc3RydWN0IGl3bF9jbWQgKm91dF9jbWQ7CisJc3RydWN0IGl3bF9kZXZpY2VfY21kICpvdXRfY21kOworCXN0cnVjdCBpd2xfY21kX21ldGEgKm91dF9tZXRhOwogCXN0cnVjdCBpd2xfdHhfY21kICp0eF9jbWQ7CiAJaW50IHN3cV9pZCwgdHhxX2lkOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwpAQCAtNjkyLDEyICs3MjAsNiBAQAogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIAotCWlmICgoaWVlZTgwMjExX2dldF90eF9yYXRlKHByaXYtPmh3LCBpbmZvKS0+aHdfdmFsdWUgJiAweEZGKSA9PQotCSAgICAgSVdMX0lOVkFMSURfUkFURSkgewotCQlJV0xfRVJSKHByaXYsICJFUlJPUjogTm8gVFggcmF0ZSBhdmFpbGFibGUuXG4iKTsKLQkJZ290byBkcm9wX3VubG9jazsKLQl9Ci0KIAlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCkBAIC03MDksMTAgKzczMSw5IEBACiAJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBSRUFTU09DIGZyYW1lXG4iKTsKICNlbmRpZgogCi0JLyogZHJvcCBhbGwgZGF0YSBmcmFtZSBpZiB3ZSBhcmUgbm90IGFzc29jaWF0ZWQgKi8KKwkvKiBkcm9wIGFsbCBub24taW5qZWN0ZWQgZGF0YSBmcmFtZSBpZiB3ZSBhcmUgbm90IGFzc29jaWF0ZWQgKi8KIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmCi0JICAgICghaXdsX2lzX21vbml0b3JfbW9kZShwcml2KSB8fAotCSAgICAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpICYmIC8qIHBhY2tldCBpbmplY3Rpb24gKi8KKwkgICAgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpICYmCiAJICAgICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgfHwKIAkgICAgICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJiAhcHJpdi0+YXNzb2NfaWQpIHx8CiAJICAgICAhcHJpdi0+YXNzb2Nfc3RhdGlvbl9hZGRlZCkpIHsKQEAgLTcyMyw3ICs3NDQsMTAgQEAKIAloZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihmYyk7CiAKIAkvKiBGaW5kIChvciBjcmVhdGUpIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwotCXN0YV9pZCA9IGl3bF9nZXRfc3RhX2lkKHByaXYsIGhkcik7CisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkKKwkJc3RhX2lkID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKKwllbHNlCisJCXN0YV9pZCA9IGl3bF9nZXRfc3RhX2lkKHByaXYsIGhkcik7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CiAJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAogCQkJICAgICAgIGhkci0+YWRkcjEpOwpAQCAtNzMyLDExICs3NTYsMTIgQEAKIAogCUlXTF9ERUJVR19UWChwcml2LCAic3RhdGlvbiBJZCAlZFxuIiwgc3RhX2lkKTsKIAotCXN3cV9pZCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCXR4cV9pZCA9IHN3cV9pZDsKKwl0eHFfaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewogCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwogCQl0aWQgPSBxY1swXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworCQlpZiAodW5saWtlbHkodGlkID49IE1BWF9USURfQ09VTlQpKQorCQkJZ290byBkcm9wX3VubG9jazsKIAkJc2VxX251bWJlciA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlcjsKIAkJc2VxX251bWJlciAmPSBJRUVFODAyMTFfU0NUTF9TRVE7CiAJCWhkci0+c2VxX2N0cmwgPSBoZHItPnNlcV9jdHJsICYKQEAgLTc0NCwxNSArNzY5LDEzIEBACiAJCWhkci0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoc2VxX251bWJlcik7CiAJCXNlcV9udW1iZXIgKz0gMHgxMDsKIAkJLyogYWdncmVnYXRpb24gaXMgb24gZm9yIHRoaXMgPHN0YSx0aWQ+ICovCi0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKIAkJCXR4cV9pZCA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uYWdnLnR4cV9pZDsKLQkJCXN3cV9pZCA9IGl3bF92aXJ0dWFsX2FnZ19xdWV1ZV9udW0oc3dxX2lkLCB0eHFfaWQpOwotCQl9CiAJfQogCiAJdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOworCXN3cV9pZCA9IHR4cS0+c3dxX2lkOwogCXEgPSAmdHhxLT5xOwotCXR4cS0+c3dxX2lkID0gc3dxX2lkOwogCiAJaWYgKHVubGlrZWx5KGl3bF9xdWV1ZV9zcGFjZShxKSA8IHEtPmhpZ2hfbWFyaykpCiAJCWdvdG8gZHJvcF91bmxvY2s7CkBAIC03NjYsNiArNzg5LDcgQEAKIAogCS8qIFNldCB1cCBmaXJzdCBlbXB0eSBlbnRyeSBpbiBxdWV1ZSdzIGFycmF5IG9mIFR4L2NtZCBidWZmZXJzICovCiAJb3V0X2NtZCA9IHR4cS0+Y21kW3EtPndyaXRlX3B0cl07CisJb3V0X21ldGEgPSAmdHhxLT5tZXRhW3EtPndyaXRlX3B0cl07CiAJdHhfY21kID0gJm91dF9jbWQtPmNtZC50eDsKIAltZW1zZXQoJm91dF9jbWQtPmhkciwgMCwgc2l6ZW9mKG91dF9jbWQtPmhkcikpOwogCW1lbXNldCh0eF9jbWQsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3R4X2NtZCkpOwpAQCAtNzkzLDEyICs4MTcsMTIgQEAKIAogCS8qIFRPRE8gbmVlZCB0aGlzIGZvciBidXJzdCBtb2RlIGxhdGVyIG9uICovCiAJaXdsX3R4X2NtZF9idWlsZF9iYXNpYyhwcml2LCB0eF9jbWQsIGluZm8sIGhkciwgc3RhX2lkKTsKKwlpd2xfZGJnX2xvZ190eF9kYXRhX2ZyYW1lKHByaXYsIGxlbiwgaGRyKTsKIAogCS8qIHNldCBpc19oY2NhIHRvIDA7IGl0IHByb2JhYmx5IHdpbGwgbmV2ZXIgYmUgaW1wbGVtZW50ZWQgKi8KLQlpd2xfdHhfY21kX2J1aWxkX3JhdGUocHJpdiwgdHhfY21kLCBpbmZvLCBmYywgc3RhX2lkLCAwKTsKKwlpd2xfdHhfY21kX2J1aWxkX3JhdGUocHJpdiwgdHhfY21kLCBpbmZvLCBmYywgMCk7CiAKLQlpd2xfdXBkYXRlX3R4X3N0YXRzKHByaXYsIGxlMTZfdG9fY3B1KGZjKSwgbGVuKTsKLQorCWl3bF91cGRhdGVfc3RhdHMocHJpdiwgdHJ1ZSwgZmMsIGxlbik7CiAJLyoKIAkgKiBVc2UgdGhlIGZpcnN0IGVtcHR5IGVudHJ5IGluIHRoaXMgcXVldWUncyBjb21tYW5kIGJ1ZmZlciBhcnJheQogCSAqIHRvIGNvbnRhaW4gdGhlIFR4IGNvbW1hbmQgYW5kIE1BQyBoZWFkZXIgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyCkBAIC04MjgsOCArODUyLDggQEAKIAl0eGNtZF9waHlzID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKIAkJCQkgICAgJm91dF9jbWQtPmhkciwgbGVuLAogCQkJCSAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCXBjaV91bm1hcF9hZGRyX3NldCgmb3V0X2NtZC0+bWV0YSwgbWFwcGluZywgdHhjbWRfcGh5cyk7Ci0JcGNpX3VubWFwX2xlbl9zZXQoJm91dF9jbWQtPm1ldGEsIGxlbiwgbGVuKTsKKwlwY2lfdW5tYXBfYWRkcl9zZXQob3V0X21ldGEsIG1hcHBpbmcsIHR4Y21kX3BoeXMpOworCXBjaV91bm1hcF9sZW5fc2V0KG91dF9tZXRhLCBsZW4sIGxlbik7CiAJLyogQWRkIGJ1ZmZlciBjb250YWluaW5nIFR4IGNvbW1hbmQgYW5kIE1BQyghKSBoZWFkZXIgdG8gVEZEJ3MKIAkgKiBmaXJzdCBlbnRyeSAqLwogCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0eHEsCkBAIC05MjIsNyArOTQ2LDggQEAKIHsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXTsKIAlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgaXdsX2NtZCAqb3V0X2NtZDsKKwlzdHJ1Y3QgaXdsX2RldmljZV9jbWQgKm91dF9jbWQ7CisJc3RydWN0IGl3bF9jbWRfbWV0YSAqb3V0X21ldGE7CiAJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbGVuLCByZXQ7CkBAIC05MzYsMjUgKzk2MSwzMiBAQAogCSAqIHRoZSBURkRfTUFYX1BBWUxPQURfU0laRSwgYW5kIGl0IHNlbnQgYXMgYSAnc21hbGwnIGNvbW1hbmQgdGhlbgogCSAqIHdlIHdpbGwgbmVlZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgVEZEIGVudHJpZXMgKi8KIAlCVUdfT04oKGZpeF9zaXplID4gVEZEX01BWF9QQVlMT0FEX1NJWkUpICYmCi0JICAgICAgICEoY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSkpOworCSAgICAgICAhKGNtZC0+ZmxhZ3MgJiBDTURfU0laRV9IVUdFKSk7CiAKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiTm90IHNlbmRpbmcgY29tbWFuZCAtIFJGIEtJTEwiKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk5vdCBzZW5kaW5nIGNvbW1hbmQgLSBSRiBLSUxMXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKGl3bF9xdWV1ZV9zcGFjZShxKSA8ICgoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSA/IDIgOiAxKSkgeworCWlmIChpd2xfcXVldWVfc3BhY2UocSkgPCAoKGNtZC0+ZmxhZ3MgJiBDTURfQVNZTkMpID8gMiA6IDEpKSB7CiAJCUlXTF9FUlIocHJpdiwgIk5vIHNwYWNlIGZvciBUeFxuIik7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5oY21kX2xvY2ssIGZsYWdzKTsKIAotCWlkeCA9IGdldF9jbWRfaW5kZXgocSwgcS0+d3JpdGVfcHRyLCBjbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKTsKKwlpZHggPSBnZXRfY21kX2luZGV4KHEsIHEtPndyaXRlX3B0ciwgY21kLT5mbGFncyAmIENNRF9TSVpFX0hVR0UpOwogCW91dF9jbWQgPSB0eHEtPmNtZFtpZHhdOworCW91dF9tZXRhID0gJnR4cS0+bWV0YVtpZHhdOworCisJbWVtc2V0KG91dF9tZXRhLCAwLCBzaXplb2YoKm91dF9tZXRhKSk7CS8qIHJlLWluaXRpYWxpemUgdG8gTlVMTCAqLworCW91dF9tZXRhLT5mbGFncyA9IGNtZC0+ZmxhZ3M7CisJaWYgKGNtZC0+ZmxhZ3MgJiBDTURfV0FOVF9TS0IpCisJCW91dF9tZXRhLT5zb3VyY2UgPSBjbWQ7CisJaWYgKGNtZC0+ZmxhZ3MgJiBDTURfQVNZTkMpCisJCW91dF9tZXRhLT5jYWxsYmFjayA9IGNtZC0+Y2FsbGJhY2s7CiAKIAlvdXRfY21kLT5oZHIuY21kID0gY21kLT5pZDsKLQltZW1jcHkoJm91dF9jbWQtPm1ldGEsICZjbWQtPm1ldGEsIHNpemVvZihjbWQtPm1ldGEpKTsKIAltZW1jcHkoJm91dF9jbWQtPmNtZC5wYXlsb2FkLCBjbWQtPmRhdGEsIGNtZC0+bGVuKTsKIAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZSBvdXRfY21kIG5vdyBoYXMgYWxsIG9mIHRoZSBpbmNvbWluZyBjbWQKQEAgLTk2Myw5ICs5OTUsOSBAQAogCW91dF9jbWQtPmhkci5mbGFncyA9IDA7CiAJb3V0X2NtZC0+aGRyLnNlcXVlbmNlID0gY3B1X3RvX2xlMTYoUVVFVUVfVE9fU0VRKElXTF9DTURfUVVFVUVfTlVNKSB8CiAJCQlJTkRFWF9UT19TRVEocS0+d3JpdGVfcHRyKSk7Ci0JaWYgKG91dF9jbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKQorCWlmIChjbWQtPmZsYWdzICYgQ01EX1NJWkVfSFVHRSkKIAkJb3V0X2NtZC0+aGRyLnNlcXVlbmNlIHw9IFNFUV9IVUdFX0ZSQU1FOwotCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkgLSBzaXplb2Yoc3RydWN0IGl3bF9jbWRfbWV0YSk7CisJbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfZGV2aWNlX2NtZCk7CiAJbGVuICs9IChpZHggPT0gVEZEX0NNRF9TTE9UUykgPyAgSVdMX01BWF9TQ0FOX1NJWkUgOiAwOwogCiAKQEAgLTk5Nyw4ICsxMDI5LDggQEAKIAogCXBoeXNfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsICZvdXRfY21kLT5oZHIsCiAJCQkJICAgZml4X3NpemUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0JcGNpX3VubWFwX2FkZHJfc2V0KCZvdXRfY21kLT5tZXRhLCBtYXBwaW5nLCBwaHlzX2FkZHIpOwotCXBjaV91bm1hcF9sZW5fc2V0KCZvdXRfY21kLT5tZXRhLCBsZW4sIGZpeF9zaXplKTsKKwlwY2lfdW5tYXBfYWRkcl9zZXQob3V0X21ldGEsIG1hcHBpbmcsIHBoeXNfYWRkcik7CisJcGNpX3VubWFwX2xlbl9zZXQob3V0X21ldGEsIGxlbiwgZml4X3NpemUpOwogCiAJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHR4cSwKIAkJCQkJCSAgIHBoeXNfYWRkciwgZml4X3NpemUsIDEsCkBAIC0xMDY3LDggKzEwOTksOCBAQAogCX0KIAogCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKLQkJcGNpX3VubWFwX2FkZHIoJnR4cS0+Y21kW2NtZF9pZHhdLT5tZXRhLCBtYXBwaW5nKSwKLQkJcGNpX3VubWFwX2xlbigmdHhxLT5jbWRbY21kX2lkeF0tPm1ldGEsIGxlbiksCisJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPm1ldGFbY21kX2lkeF0sIG1hcHBpbmcpLAorCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPm1ldGFbY21kX2lkeF0sIGxlbiksCiAJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAKIAlmb3IgKGlkeCA9IGl3bF9xdWV1ZV9pbmNfd3JhcChpZHgsIHEtPm5fYmQpOyBxLT5yZWFkX3B0ciAhPSBpZHg7CkBAIC0xMDk5LDcgKzExMzEsOCBAQAogCWludCBpbmRleCA9IFNFUV9UT19JTkRFWChzZXF1ZW5jZSk7CiAJaW50IGNtZF9pbmRleDsKIAlib29sIGh1Z2UgPSAhIShwa3QtPmhkci5zZXF1ZW5jZSAmIFNFUV9IVUdFX0ZSQU1FKTsKLQlzdHJ1Y3QgaXdsX2NtZCAqY21kOworCXN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kOworCXN0cnVjdCBpd2xfY21kX21ldGEgKm1ldGE7CiAKIAkvKiBJZiBhIFR4IGNvbW1hbmQgaXMgYmVpbmcgaGFuZGxlZCBhbmQgaXQgaXNuJ3QgaW4gdGhlIGFjdHVhbAogCSAqIGNvbW1hbmQgcXVldWUgdGhlbiB0aGVyZSBhIGNvbW1hbmQgcm91dGluZyBidWcgaGFzIGJlZW4gaW50cm9kdWNlZApAQCAtMTEwOSwyNCArMTE0MiwyNCBAQAogCQkgIHR4cV9pZCwgc2VxdWVuY2UsCiAJCSAgcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5xLnJlYWRfcHRyLAogCQkgIHByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0ucS53cml0ZV9wdHIpKSB7Ci0JCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfSU5GTyAsIHJ4YiwgMzIpOworCQlpd2xfcHJpbnRfaGV4X2Vycm9yKHByaXYsIHBrdCwgMzIpOwogCQlyZXR1cm47CiAJfQogCiAJY21kX2luZGV4ID0gZ2V0X2NtZF9pbmRleCgmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5xLCBpbmRleCwgaHVnZSk7CiAJY21kID0gcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5jbWRbY21kX2luZGV4XTsKKwltZXRhID0gJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0ubWV0YVtjbWRfaW5kZXhdOwogCiAJLyogSW5wdXQgZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSB3aGVuIGNvbW1hbmRzIGFyZSBhZGRlZCB0byBxdWV1ZS4gKi8KLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSB7Ci0JCWNtZC0+bWV0YS5zb3VyY2UtPnUuc2tiID0gcnhiLT5za2I7CisJaWYgKG1ldGEtPmZsYWdzICYgQ01EX1dBTlRfU0tCKSB7CisJCW1ldGEtPnNvdXJjZS0+cmVwbHlfc2tiID0gcnhiLT5za2I7CiAJCXJ4Yi0+c2tiID0gTlVMTDsKLQl9IGVsc2UgaWYgKGNtZC0+bWV0YS51LmNhbGxiYWNrICYmCi0JCSAgICFjbWQtPm1ldGEudS5jYWxsYmFjayhwcml2LCBjbWQsIHJ4Yi0+c2tiKSkKLQkJcnhiLT5za2IgPSBOVUxMOworCX0gZWxzZSBpZiAobWV0YS0+Y2FsbGJhY2spCisJCW1ldGEtPmNhbGxiYWNrKHByaXYsIGNtZCwgcnhiLT5za2IpOwogCiAJaXdsX2hjbWRfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4LCBjbWRfaW5kZXgpOwogCi0JaWYgKCEoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSkgeworCWlmICghKG1ldGEtPmZsYWdzICYgQ01EX0FTWU5DKSkgewogCQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCX0KQEAgLTExODksNiArMTIyMiw3IEBACiAJdGlkX2RhdGEgPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXTsKIAkqc3NuID0gU0VRX1RPX1NOKHRpZF9kYXRhLT5zZXFfbnVtYmVyKTsKIAl0aWRfZGF0YS0+YWdnLnR4cV9pZCA9IHR4cV9pZDsKKwlwcml2LT50eHFbdHhxX2lkXS5zd3FfaWQgPSBpd2xfdmlydHVhbF9hZ2dfcXVldWVfbnVtKHR4X2ZpZm8sIHR4cV9pZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAogCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hZ2dfZW5hYmxlKHByaXYsIHR4cV9pZCwgdHhfZmlmbywKQEAgLTEyMjEsNiArMTI1NSw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmICh1bmxpa2VseSh0aWQgPj0gTUFYX1RJRF9DT1VOVCkpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGxpa2VseSh0aWQgPCBBUlJBWV9TSVpFKGRlZmF1bHRfdGlkX3RvX3R4X2ZpZm8pKSkKIAkJdHhfZmlmb19pZCA9IGRlZmF1bHRfdGlkX3RvX3R4X2ZpZm9bdGlkXTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCA1MjM4NDMzLi4yMjM4YzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAogIC8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsMzk0NV9tb2RfcGFyYW1zID0gewotCS5udW1fb2ZfcXVldWVzID0gSVdMMzlfTUFYX05VTV9RVUVVRVMsCisJLm51bV9vZl9xdWV1ZXMgPSBJV0wzOV9OVU1fUVVFVUVTLCAvKiBOb3QgdXNlZCAqLwogCS5zd19jcnlwdG8gPSAxLAogCS5yZXN0YXJ0X2Z3ID0gMSwKIAkvKiB0aGUgcmVzdCBhcmUgMCBieSBkZWZhdWx0ICovCkBAIC0zNjEsNzkgKzM2MSw5IEBACiAJCQkJICAgIHByaXYtPnNoYXJlZF9waHlzKTsKIH0KIAotI2RlZmluZSBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTEwMjQKLSNkZWZpbmUgSU5URUxfQ09OTl9MSVNURU5fSU5URVJWQUwJY3B1X3RvX2xlMTYoMHhBKQotCi1zdGF0aWMgX19sZTE2IGl3bDM5NDVfYWRqdXN0X2JlYWNvbl9pbnRlcnZhbCh1MTYgYmVhY29uX3ZhbCkKLXsKLQl1MTYgbmV3X3ZhbCA9IDA7Ci0JdTE2IGJlYWNvbl9mYWN0b3IgPSAwOwotCi0JYmVhY29uX2ZhY3RvciA9Ci0JICAgIChiZWFjb25fdmFsICsgTUFYX1VDT0RFX0JFQUNPTl9JTlRFUlZBTCkKLQkJLyBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMOwotCW5ld192YWwgPSBiZWFjb25fdmFsIC8gYmVhY29uX2ZhY3RvcjsKLQotCXJldHVybiBjcHVfdG9fbGUxNihuZXdfdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9zZXR1cF9yeG9uX3RpbWluZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JdTY0IGludGVydmFsX3RtX3VuaXQ7Ci0JdTY0IHRzZiwgcmVzdWx0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gTlVMTDsKLQl1MTYgYmVhY29uX2ludCA9IDA7Ci0KLQljb25mID0gaWVlZTgwMjExX2dldF9od19jb25mKHByaXYtPmh3KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhvbl90aW1pbmcudGltZXN0YW1wID0gY3B1X3RvX2xlNjQocHJpdi0+dGltZXN0YW1wKTsKLQlwcml2LT5yeG9uX3RpbWluZy5saXN0ZW5faW50ZXJ2YWwgPSBJTlRFTF9DT05OX0xJU1RFTl9JTlRFUlZBTDsKLQotCXRzZiA9IHByaXYtPnRpbWVzdGFtcDsKLQotCWJlYWNvbl9pbnQgPSBwcml2LT5iZWFjb25faW50OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJaWYgKGJlYWNvbl9pbnQgPT0gMCkgewotCQkJcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsID0gY3B1X3RvX2xlMTYoMTAwKTsKLQkJCXByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbml0X3ZhbCA9IGNwdV90b19sZTMyKDEwMjQwMCk7Ci0JCX0gZWxzZSB7Ci0JCQlwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW50ZXJ2YWwgPQotCQkJCWNwdV90b19sZTE2KGJlYWNvbl9pbnQpOwotCQkJcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsID0KLQkJCSAgICBpd2wzOTQ1X2FkanVzdF9iZWFjb25faW50ZXJ2YWwoCi0JCQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsKSk7Ci0JCX0KLQotCQlwcml2LT5yeG9uX3RpbWluZy5hdGltX3dpbmRvdyA9IDA7Ci0JfSBlbHNlIHsKLQkJcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsID0KLQkJCWl3bDM5NDVfYWRqdXN0X2JlYWNvbl9pbnRlcnZhbCgKLQkJCQlwcml2LT52aWYtPmJzc19jb25mLmJlYWNvbl9pbnQpOwotCQkvKiBUT0RPOiB3ZSBuZWVkIHRvIGdldCBhdGltX3dpbmRvdyBmcm9tIHVwcGVyIHN0YWNrCi0JCSAqIGZvciBub3cgd2Ugc2V0IHRvIDAgKi8KLQkJcHJpdi0+cnhvbl90aW1pbmcuYXRpbV93aW5kb3cgPSAwOwotCX0KLQotCWludGVydmFsX3RtX3VuaXQgPQotCQkobGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsKSAqIDEwMjQpOwotCXJlc3VsdCA9IGRvX2Rpdih0c2YsIGludGVydmFsX3RtX3VuaXQpOwotCXByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbml0X3ZhbCA9Ci0JICAgIGNwdV90b19sZTMyKCh1MzIpICgodTY0KSBpbnRlcnZhbF90bV91bml0IC0gcmVzdWx0KSk7Ci0KLQlJV0xfREVCVUdfQVNTT0MocHJpdiwKLQkJImJlYWNvbiBpbnRlcnZhbCAlZCBiZWFjb24gdGltZXIgJWQgYmVhY29uIHRpbSAlZFxuIiwKLQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsKSwKLQkJbGUzMl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2luaXRfdmFsKSwKLQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYXRpbV93aW5kb3cpKTsKLX0KLQogc3RhdGljIHZvaWQgaXdsMzk0NV9idWlsZF90eF9jbWRfaHdjcnlwdG8oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKLQkJCQkgICAgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLAorCQkJCSAgICAgIHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kLAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2JfZnJhZywKIAkJCQkgICAgICBpbnQgc3RhX2lkKQogewpAQCAtNDczLDcgKzQwMyw3IEBACiAgKiBoYW5kbGUgYnVpbGQgUkVQTFlfVFggY29tbWFuZCBub3RpZmljYXRpb24uCiAgKi8KIHN0YXRpYyB2b2lkIGl3bDM5NDVfYnVpbGRfdHhfY21kX2Jhc2ljKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2xfY21kICpjbWQsCisJCQkJICBzdHJ1Y3QgaXdsX2RldmljZV9jbWQgKmNtZCwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHU4IHN0ZF9pZCkKIHsKQEAgLTU0Niw3ICs0NzYsOCBAQAogCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHg7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gTlVMTDsKIAlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gTlVMTDsKLQlzdHJ1Y3QgaXdsX2NtZCAqb3V0X2NtZCA9IE5VTEw7CisJc3RydWN0IGl3bF9kZXZpY2VfY21kICpvdXRfY21kOworCXN0cnVjdCBpd2xfY21kX21ldGEgKm91dF9tZXRhOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwogCWRtYV9hZGRyX3QgdHhjbWRfcGh5czsKIAlpbnQgdHhxX2lkID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CkBAIC01ODcsOSArNTE4LDkgQEAKIAkJSVdMX0RFQlVHX1RYKHByaXYsICJTZW5kaW5nIFJFQVNTT0MgZnJhbWVcbiIpOwogI2VuZGlmCiAKLQkvKiBkcm9wIGFsbCBkYXRhIGZyYW1lIGlmIHdlIGFyZSBub3QgYXNzb2NpYXRlZCAqLworCS8qIGRyb3AgYWxsIG5vbi1pbmplY3RlZCBkYXRhIGZyYW1lIGlmIHdlIGFyZSBub3QgYXNzb2NpYXRlZCAqLwogCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgJiYKLQkgICAgKCFpd2xfaXNfbW9uaXRvcl9tb2RlKHByaXYpKSAmJiAvKiBwYWNrZXQgaW5qZWN0aW9uICovCisJICAgICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSAmJgogCSAgICAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpIHx8CiAJICAgICAoKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYgIXByaXYtPmFzc29jX2lkKSkpIHsKIAkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gIWl3bF9pc19hc3NvY2lhdGVkXG4iKTsKQEAgLTYwMSw3ICs1MzIsMTAgQEAKIAloZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihmYyk7CiAKIAkvKiBGaW5kIChvciBjcmVhdGUpIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwotCXN0YV9pZCA9IGl3bF9nZXRfc3RhX2lkKHByaXYsIGhkcik7CisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkKKwkJc3RhX2lkID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKKwllbHNlCisJCXN0YV9pZCA9IGl3bF9nZXRfc3RhX2lkKHByaXYsIGhkcik7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CiAJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAogCQkJICAgICAgIGhkci0+YWRkcjEpOwpAQCAtNjEzLDYgKzU0Nyw4IEBACiAJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKIAkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAkJdGlkID0gcWNbMF0gJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKKwkJaWYgKHVubGlrZWx5KHRpZCA+PSBNQVhfVElEX0NPVU5UKSkKKwkJCWdvdG8gZHJvcDsKIAkJc2VxX251bWJlciA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlciAmCiAJCQkJSUVFRTgwMjExX1NDVExfU0VROwogCQloZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoc2VxX251bWJlcikgfApAQCAtNjM1LDYgKzU3MSw3IEBACiAKIAkvKiBJbml0IGZpcnN0IGVtcHR5IGVudHJ5IGluIHF1ZXVlJ3MgYXJyYXkgb2YgVHgvY21kIGJ1ZmZlcnMgKi8KIAlvdXRfY21kID0gdHhxLT5jbWRbaWR4XTsKKwlvdXRfbWV0YSA9ICZ0eHEtPm1ldGFbaWR4XTsKIAl0eCA9IChzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgKilvdXRfY21kLT5jbWQucGF5bG9hZDsKIAltZW1zZXQoJm91dF9jbWQtPmhkciwgMCwgc2l6ZW9mKG91dF9jbWQtPmhkcikpOwogCW1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpOwpAQCAtNjY2LDcgKzYwMyw4IEBACiAJbGVuID0gKHUxNilza2ItPmxlbjsKIAl0eC0+bGVuID0gY3B1X3RvX2xlMTYobGVuKTsKIAotCisJaXdsX2RiZ19sb2dfdHhfZGF0YV9mcmFtZShwcml2LCBsZW4sIGhkcik7CisJaXdsX3VwZGF0ZV9zdGF0cyhwcml2LCB0cnVlLCBmYywgbGVuKTsKIAl0eC0+dHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfQU5UX0FfTVNLOwogCXR4LT50eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19BTlRfQl9NU0s7CiAKQEAgLTcxMiw4ICs2NTAsOCBAQAogCQkJCSAgICBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCS8qIHdlIGRvIG5vdCBtYXAgbWV0YSBkYXRhIC4uLiBzbyB3ZSBjYW4gc2FmZWx5IGFjY2VzcyBhZGRyZXNzIHRvCiAJICogcHJvdmlkZSB0byB1bm1hcCBjb21tYW5kKi8KLQlwY2lfdW5tYXBfYWRkcl9zZXQoJm91dF9jbWQtPm1ldGEsIG1hcHBpbmcsIHR4Y21kX3BoeXMpOwotCXBjaV91bm1hcF9sZW5fc2V0KCZvdXRfY21kLT5tZXRhLCBsZW4sIGxlbik7CisJcGNpX3VubWFwX2FkZHJfc2V0KG91dF9tZXRhLCBtYXBwaW5nLCB0eGNtZF9waHlzKTsKKwlwY2lfdW5tYXBfbGVuX3NldChvdXRfbWV0YSwgbGVuLCBsZW4pOwogCiAJLyogQWRkIGJ1ZmZlciBjb250YWluaW5nIFR4IGNvbW1hbmQgYW5kIE1BQyghKSBoZWFkZXIgdG8gVEZEJ3MKIAkgKiBmaXJzdCBlbnRyeSAqLwpAQCAtODIzLDcgKzc2MSw3IEBACiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1NQRUNUUlVNX01FQVNVUkVNRU5UX0NNRCwKIAkJLmRhdGEgPSAodm9pZCAqKSZzcGVjdHJ1bSwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfV0FOVF9TS0IsCisJCS5mbGFncyA9IENNRF9XQU5UX1NLQiwKIAl9OwogCXUzMiBhZGRfdGltZSA9IGxlNjRfdG9fY3B1KHBhcmFtcy0+c3RhcnRfdGltZSk7CiAJaW50IHJjOwpAQCAtODY0LDcgKzgwMiw3IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKKwlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQucmVwbHlfc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewogCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhfT05fQVNTT0MgY29tbWFuZFxuIik7CiAJCXJjID0gLUVJTzsKQEAgLTg4Nyw3ICs4MjUsNyBAQAogCQlicmVhazsKIAl9CiAKLQlkZXZfa2ZyZWVfc2tiX2FueShjbWQubWV0YS51LnNrYik7CisJZGV2X2tmcmVlX3NrYl9hbnkoY21kLnJlcGx5X3NrYik7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC05OTYsNyArOTM0LDcgQEAKIAl1MzIgZmxhZ3MgPSBsZTMyX3RvX2NwdShwa3QtPnUuY2FyZF9zdGF0ZV9ub3RpZi5mbGFncyk7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBwcml2LT5zdGF0dXM7CiAKLQlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiQ2FyZCBzdGF0ZSByZWNlaXZlZDogSFc6JXMgU1c6JXNcbiIsCisJSVdMX1dBUk4ocHJpdiwgIkNhcmQgc3RhdGUgcmVjZWl2ZWQ6IEhXOiVzIFNXOiVzXG4iLAogCQkJICAoZmxhZ3MgJiBIV19DQVJEX0RJU0FCTEVEKSA/ICJLaWxsIiA6ICJPbiIsCiAJCQkgIChmbGFncyAmIFNXX0NBUkRfRElTQUJMRUQpID8gIktpbGwiIDogIk9uIik7CiAKQEAgLTE0MzUsNyArMTM3Myw3IEBACiAJCWZpbGxfcnggPSAxOwogCS8qIFJ4IGludGVycnVwdCwgYnV0IG5vdGhpbmcgc2VudCBmcm9tIHVDb2RlICovCiAJaWYgKGkgPT0gcikKLQkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9SWCB8IElXTF9ETF9JU1IsICJyID0gJWQsIGkgPSAlZFxuIiwgciwgaSk7CisJCUlXTF9ERUJVR19SWChwcml2LCAiciA9ICVkLCBpID0gJWRcbiIsIHIsIGkpOwogCiAJd2hpbGUgKGkgIT0gcikgewogCQlyeGIgPSByeHEtPnF1ZXVlW2ldOwpAQCAtMTQ2NiwxNSArMTQwNCwxMyBAQAogCQkgKiAgIGhhbmRsZSB0aG9zZSB0aGF0IG5lZWQgaGFuZGxpbmcgdmlhIGZ1bmN0aW9uIGluCiAJCSAqICAgcnhfaGFuZGxlcnMgdGFibGUuICBTZWUgaXdsMzk0NV9zZXR1cF9yeF9oYW5kbGVycygpICovCiAJCWlmIChwcml2LT5yeF9oYW5kbGVyc1twa3QtPmhkci5jbWRdKSB7Ci0JCQlJV0xfREVCVUcocHJpdiwgSVdMX0RMX0hDTUQgfCBJV0xfRExfUlggfCBJV0xfRExfSVNSLAotCQkJCSJyID0gJWQsIGkgPSAlZCwgJXMsIDB4JTAyeFxuIiwgciwgaSwKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiciA9ICVkLCBpID0gJWQsICVzLCAweCUwMnhcbiIsIHIsIGksCiAJCQkJZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSwgcGt0LT5oZHIuY21kKTsKIAkJCXByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0gKHByaXYsIHJ4Yik7CiAJCQlwcml2LT5pc3Jfc3RhdHMucnhfaGFuZGxlcnNbcGt0LT5oZHIuY21kXSsrOwogCQl9IGVsc2UgewogCQkJLyogTm8gaGFuZGxpbmcgbmVlZGVkICovCi0JCQlJV0xfREVCVUcocHJpdiwgSVdMX0RMX0hDTUQgfCBJV0xfRExfUlggfCBJV0xfRExfSVNSLAotCQkJCSJyICVkIGkgJWQgTm8gaGFuZGxlciBuZWVkZWQgZm9yICVzLCAweCUwMnhcbiIsCisJCQlJV0xfREVCVUdfUlgocHJpdiwgInIgJWQgaSAlZCBObyBoYW5kbGVyIG5lZWRlZCBmb3IgJXMsIDB4JTAyeFxuIiwKIAkJCQlyLCBpLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpLAogCQkJCXBrdC0+aGRyLmNtZCk7CiAJCX0KQEAgLTE3MTQsNyArMTY1MCw3IEBACiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIGludGFfZmgpOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfSVNSKSB7CisJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiBJV0xfRExfSVNSKSB7CiAJCS8qIGp1c3QgZm9yIGRlYnVnICovCiAJCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKIAkJSVdMX0RFQlVHX0lTUihwcml2LCAiaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCkBAIC0xNzMzLDcgKzE2NjksNyBAQAogCiAJLyogTm93IHNlcnZpY2UgYWxsIGludGVycnVwdCBiaXRzIGRpc2NvdmVyZWQgYWJvdmUuICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9IV19FUlIpIHsKLQkJSVdMX0VSUihwcml2LCAiTWljcm9jb2RlIEhXIGVycm9yIGRldGVjdGVkLiAgUmVzdGFydGluZy5cbiIpOworCQlJV0xfRVJSKHByaXYsICJIYXJkd2FyZSBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKIAogCQkvKiBUZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KIAkJaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKQEAgLTE3NDksNyArMTY4NSw3IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKKwlpZiAoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIChJV0xfRExfSVNSKSkgewogCQkvKiBOSUMgZmlyZXMgdGhpcywgYnV0IHdlIGRvbid0IHVzZSBpdCwgcmVkdW5kYW50IHdpdGggV0FLRVVQICovCiAJCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfU0NEKSB7CiAJCQlJV0xfREVCVUdfSVNSKHByaXYsICJTY2hlZHVsZXIgZmluaXNoZWQgdG8gdHJhbnNtaXQgIgpAQCAtMTgyOCw3ICsxNzY0LDcgQEAKIAkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKKwlpZiAoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIChJV0xfRExfSVNSKSkgewogCQlpbnRhID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UKTsKIAkJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOwogCQlpbnRhX2ZoID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7CkBAIC0xODQ0LDcgKzE3ODAsNyBAQAogCQkJCSAgICAgdTggaXNfYWN0aXZlLCB1OCBuX3Byb2JlcywKIAkJCQkgICAgIHN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCAqc2Nhbl9jaCkKIHsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJdTE2IHBhc3NpdmVfZHdlbGwgPSAwOwpAQCAtMTg1NSwxOSArMTc5MSwxOSBAQAogCWlmICghc2JhbmQpCiAJCXJldHVybiAwOwogCi0JY2hhbm5lbHMgPSBzYmFuZC0+Y2hhbm5lbHM7Ci0KIAlhY3RpdmVfZHdlbGwgPSBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQsIG5fcHJvYmVzKTsKIAlwYXNzaXZlX2R3ZWxsID0gaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUocHJpdiwgYmFuZCk7CiAKIAlpZiAocGFzc2l2ZV9kd2VsbCA8PSBhY3RpdmVfZHdlbGwpCiAJCXBhc3NpdmVfZHdlbGwgPSBhY3RpdmVfZHdlbGwgKyAxOwogCi0JZm9yIChpID0gMCwgYWRkZWQgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgewotCQlpZiAoY2hhbm5lbHNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwlmb3IgKGkgPSAwLCBhZGRlZCA9IDA7IGkgPCBwcml2LT5zY2FuX3JlcXVlc3QtPm5fY2hhbm5lbHM7IGkrKykgeworCQljaGFuID0gcHJpdi0+c2Nhbl9yZXF1ZXN0LT5jaGFubmVsc1tpXTsKKworCQlpZiAoY2hhbi0+YmFuZCAhPSBiYW5kKQogCQkJY29udGludWU7CiAKLQkJc2Nhbl9jaC0+Y2hhbm5lbCA9IGNoYW5uZWxzW2ldLmh3X3ZhbHVlOworCQlzY2FuX2NoLT5jaGFubmVsID0gY2hhbi0+aHdfdmFsdWU7CiAKIAkJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGJhbmQsIHNjYW5fY2gtPmNoYW5uZWwpOwogCQlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpIHsKQEAgLTE4ODIsNyArMTgxOCw3IEBACiAJCSAqICBhbmQgdXNlIGxvbmcgYWN0aXZlX2R3ZWxsIHRpbWUuCiAJCSAqLwogCQlpZiAoIWlzX2FjdGl2ZSB8fCBpc19jaGFubmVsX3Bhc3NpdmUoY2hfaW5mbykgfHwKLQkJICAgIChjaGFubmVsc1tpXS5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikpIHsKKwkJICAgIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikpIHsKIAkJCXNjYW5fY2gtPnR5cGUgPSAwOwkvKiBwYXNzaXZlICovCiAJCQlpZiAoSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpID09IDEpCiAJCQkJc2Nhbl9jaC0+YWN0aXZlX2R3ZWxsID0gY3B1X3RvX2xlMTYocGFzc2l2ZV9kd2VsbCAtIDEpOwpAQCAtMjExMSw3ICsyMDQ3LDcgQEAKICAqLwogc3RhdGljIGludCBpd2wzOTQ1X3JlYWRfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXN0cnVjdCBpd2xfdWNvZGUgKnVjb2RlOworCWNvbnN0IHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICp1Y29kZTsKIAlpbnQgcmV0ID0gLUVJTlZBTCwgaW5kZXg7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICp1Y29kZV9yYXc7CiAJLyogZmlybXdhcmUgZmlsZSBuYW1lIGNvbnRhaW5zIHVDb2RlL2RyaXZlciBjb21wYXRpYmlsaXR5IHZlcnNpb24gKi8KQEAgLTIxNTIsMjIgKzIwODgsMjQgQEAKIAkJZ290byBlcnJvcjsKIAogCS8qIE1ha2Ugc3VyZSB0aGF0IHdlIGdvdCBhdCBsZWFzdCBvdXIgaGVhZGVyISAqLwotCWlmICh1Y29kZV9yYXctPnNpemUgPCBzaXplb2YoKnVjb2RlKSkgeworCWlmICh1Y29kZV9yYXctPnNpemUgPCAgcHJpdi0+Y2ZnLT5vcHMtPnVjb2RlLT5nZXRfaGVhZGVyX3NpemUoMSkpIHsKIAkJSVdMX0VSUihwcml2LCAiRmlsZSBzaXplIHdheSB0b28gc21hbGwhXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAKIAkvKiBEYXRhIGZyb20gdWNvZGUgZmlsZTogIGhlYWRlciBmb2xsb3dlZCBieSB1Q29kZSBpbWFnZXMgKi8KLQl1Y29kZSA9ICh2b2lkICopdWNvZGVfcmF3LT5kYXRhOworCXVjb2RlID0gKHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICopdWNvZGVfcmF3LT5kYXRhOwogCiAJcHJpdi0+dWNvZGVfdmVyID0gbGUzMl90b19jcHUodWNvZGUtPnZlcik7CiAJYXBpX3ZlciA9IElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKTsKLQlpbnN0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+aW5zdF9zaXplKTsKLQlkYXRhX3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+ZGF0YV9zaXplKTsKLQlpbml0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+aW5pdF9zaXplKTsKLQlpbml0X2RhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT5pbml0X2RhdGFfc2l6ZSk7Ci0JYm9vdF9zaXplID0gbGUzMl90b19jcHUodWNvZGUtPmJvb3Rfc2l6ZSk7CisJaW5zdF9zaXplID0gcHJpdi0+Y2ZnLT5vcHMtPnVjb2RlLT5nZXRfaW5zdF9zaXplKHVjb2RlLCBhcGlfdmVyKTsKKwlkYXRhX3NpemUgPSBwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9kYXRhX3NpemUodWNvZGUsIGFwaV92ZXIpOworCWluaXRfc2l6ZSA9IHByaXYtPmNmZy0+b3BzLT51Y29kZS0+Z2V0X2luaXRfc2l6ZSh1Y29kZSwgYXBpX3Zlcik7CisJaW5pdF9kYXRhX3NpemUgPQorCQlwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9pbml0X2RhdGFfc2l6ZSh1Y29kZSwgYXBpX3Zlcik7CisJYm9vdF9zaXplID0gcHJpdi0+Y2ZnLT5vcHMtPnVjb2RlLT5nZXRfYm9vdF9zaXplKHVjb2RlLCBhcGlfdmVyKTsKKwlzcmMgPSBwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9kYXRhKHVjb2RlLCBhcGlfdmVyKTsKIAogCS8qIGFwaV92ZXIgc2hvdWxkIG1hdGNoIHRoZSBhcGkgdmVyc2lvbiBmb3JtaW5nIHBhcnQgb2YgdGhlCiAJICogZmlybXdhcmUgZmlsZW5hbWUgLi4uIGJ1dCB3ZSBkb24ndCBjaGVjayBmb3IgdGhhdCBhbmQgb25seSByZWx5CkBAIC0yMjA4LDEyICsyMTQ2LDEzIEBACiAKIAogCS8qIFZlcmlmeSBzaXplIG9mIGZpbGUgdnMuIGltYWdlIHNpemUgaW5mbyBpbiBmaWxlJ3MgaGVhZGVyICovCi0JaWYgKHVjb2RlX3Jhdy0+c2l6ZSA8IHNpemVvZigqdWNvZGUpICsKKwlpZiAodWNvZGVfcmF3LT5zaXplICE9IHByaXYtPmNmZy0+b3BzLT51Y29kZS0+Z2V0X2hlYWRlcl9zaXplKGFwaV92ZXIpICsKIAkJaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplICsKIAkJaW5pdF9kYXRhX3NpemUgKyBib290X3NpemUpIHsKIAotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgZmlsZSBzaXplICV6ZCB0b28gc21hbGxcbiIsCi0JCQkgICAgICAgdWNvZGVfcmF3LT5zaXplKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCSJ1Q29kZSBmaWxlIHNpemUgJXpkIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHNpemVcbiIsCisJCQl1Y29kZV9yYXctPnNpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KQEAgLTIyOTYsNDQgKzIyMzUsNDQgQEAKIAkvKiBDb3B5IGltYWdlcyBpbnRvIGJ1ZmZlcnMgZm9yIGNhcmQncyBidXMtbWFzdGVyIHJlYWRzIC4uLiAqLwogCiAJLyogUnVudGltZSBpbnN0cnVjdGlvbnMgKGZpcnN0IGJsb2NrIG9mIGRhdGEgaW4gZmlsZSkgKi8KLQlzcmMgPSAmdWNvZGUtPmRhdGFbMF07Ci0JbGVuID0gcHJpdi0+dWNvZGVfY29kZS5sZW47CisJbGVuID0gaW5zdF9zaXplOwogCUlXTF9ERUJVR19JTkZPKHByaXYsCiAJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGluc3RyIGxlbiAlemRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2NvZGUudl9hZGRyLCBzcmMsIGxlbik7CisJc3JjICs9IGxlbjsKKwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBpbnN0ciBidWYgdmFkZHIgPSAweCVwLCBwYWRkciA9IDB4JTA4eFxuIiwKIAkJcHJpdi0+dWNvZGVfY29kZS52X2FkZHIsICh1MzIpcHJpdi0+dWNvZGVfY29kZS5wX2FkZHIpOwogCiAJLyogUnVudGltZSBkYXRhICgybmQgYmxvY2spCiAJICogTk9URTogIENvcHkgaW50byBiYWNrdXAgYnVmZmVyIHdpbGwgYmUgZG9uZSBpbiBpd2wzOTQ1X3VwKCkgICovCi0Jc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZV07Ci0JbGVuID0gcHJpdi0+dWNvZGVfZGF0YS5sZW47CisJbGVuID0gZGF0YV9zaXplOwogCUlXTF9ERUJVR19JTkZPKHByaXYsCiAJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGRhdGEgbGVuICV6ZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfZGF0YS52X2FkZHIsIHNyYywgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfZGF0YV9iYWNrdXAudl9hZGRyLCBzcmMsIGxlbik7CisJc3JjICs9IGxlbjsKIAogCS8qIEluaXRpYWxpemF0aW9uIGluc3RydWN0aW9ucyAoM3JkIGJsb2NrKSAqLwogCWlmIChpbml0X3NpemUpIHsKLQkJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZV07Ci0JCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOworCQlsZW4gPSBpbml0X3NpemU7CiAJCUlXTF9ERUJVR19JTkZPKHByaXYsCiAJCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGluc3RyIGxlbiAlemRcbiIsIGxlbik7CiAJCW1lbWNweShwcml2LT51Y29kZV9pbml0LnZfYWRkciwgc3JjLCBsZW4pOworCQlzcmMgKz0gbGVuOwogCX0KIAogCS8qIEluaXRpYWxpemF0aW9uIGRhdGEgKDR0aCBibG9jaykgKi8KIAlpZiAoaW5pdF9kYXRhX3NpemUpIHsKLQkJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZV07Ci0JCWxlbiA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5sZW47CisJCWxlbiA9IGluaXRfZGF0YV9zaXplOwogCQlJV0xfREVCVUdfSU5GTyhwcml2LAogCQkJIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBkYXRhIGxlbiAlemRcbiIsIGxlbik7CiAJCW1lbWNweShwcml2LT51Y29kZV9pbml0X2RhdGEudl9hZGRyLCBzcmMsIGxlbik7CisJCXNyYyArPSBsZW47CiAJfQogCiAJLyogQm9vdHN0cmFwIGluc3RydWN0aW9ucyAoNXRoIGJsb2NrKSAqLwotCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemUgKyBkYXRhX3NpemUgKyBpbml0X3NpemUgKyBpbml0X2RhdGFfc2l6ZV07Ci0JbGVuID0gcHJpdi0+dWNvZGVfYm9vdC5sZW47CisJbGVuID0gYm9vdF9zaXplOwogCUlXTF9ERUJVR19JTkZPKHByaXYsCiAJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGJvb3QgaW5zdHIgbGVuICV6ZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfYm9vdC52X2FkZHIsIHNyYywgbGVuKTsKQEAgLTI3ODQsNyArMjcyMyw3IEBACiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1NDQU5fQ01ELAogCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3NjYW5fY21kKSwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfU0laRV9IVUdFLAorCQkuZmxhZ3MgPSBDTURfU0laRV9IVUdFLAogCX07CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCAqc2NhbjsKQEAgLTMwNjYsNyArMzAwNSw3IEBACiAJaXdsY29yZV9jb21taXRfcnhvbihwcml2KTsKIAogCW1lbXNldCgmcHJpdi0+cnhvbl90aW1pbmcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3J4b25fdGltZV9jbWQpKTsKLQlpd2wzOTQ1X3NldHVwX3J4b25fdGltaW5nKHByaXYpOworCWl3bF9zZXR1cF9yeG9uX3RpbWluZyhwcml2KTsKIAlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTl9USU1JTkcsCiAJCQkgICAgICBzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLCAmcHJpdi0+cnhvbl90aW1pbmcpOwogCWlmIChyYykKQEAgLTMyNjEsNyArMzIwMCw3IEBACiAKIAkJLyogUlhPTiBUaW1pbmcgKi8KIAkJbWVtc2V0KCZwcml2LT5yeG9uX3RpbWluZywgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfcnhvbl90aW1lX2NtZCkpOwotCQlpd2wzOTQ1X3NldHVwX3J4b25fdGltaW5nKHByaXYpOworCQlpd2xfc2V0dXBfcnhvbl90aW1pbmcocHJpdik7CiAJCXJjID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKIAkJCQkgICAgICBzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLAogCQkJCSAgICAgICZwcml2LT5yeG9uX3RpbWluZyk7CkBAIC0zMzc1LDEzICszMzE0LDE2IEBACiAgKiB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgZGVidWcgbGV2ZWwuCiAgKgogICogU2VlIHRoZSBsZXZlbCBkZWZpbml0aW9ucyBpbiBpd2wgZm9yIGRldGFpbHMuCisgKgorICogVGhlIGRlYnVnX2xldmVsIGJlaW5nIG1hbmFnZWQgdXNpbmcgc3lzZnMgYmVsb3cgaXMgYSBwZXIgZGV2aWNlIGRlYnVnCisgKiBsZXZlbCB0aGF0IGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgZ2xvYmFsIGRlYnVnIGxldmVsIGlmIGl0ICh0aGUgcGVyCisgKiBkZXZpY2UgZGVidWcgbGV2ZWwpIGlzIHNldC4KICAqLwogc3RhdGljIHNzaXplX3Qgc2hvd19kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDhYXG4iLCBwcml2LT5kZWJ1Z19sZXZlbCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDhYXG4iLCBpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpKTsKIH0KIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0zMzk0LDkgKzMzMzYsMTIgQEAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpOwogCWlmIChyZXQpCiAJCUlXTF9JTkZPKHByaXYsICIlcyBpcyBub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7Ci0JZWxzZQorCWVsc2UgewogCQlwcml2LT5kZWJ1Z19sZXZlbCA9IHZhbDsKLQorCQlpZiAoaXdsX2FsbG9jX3RyYWZmaWNfbWVtKHByaXYpKQorCQkJSVdMX0VSUihwcml2LAorCQkJCSJOb3QgZW5vdWdoIG1lbW9yeSB0byBnZW5lcmF0ZSB0cmFmZmljIGxvZ1xuIik7CisJfQogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCkBAIC0zNjEyLDY1ICszNTU3LDYgQEAKIAkJICAgc3RvcmVfcmV0cnlfcmF0ZSk7CiAKIAotc3RhdGljIHNzaXplX3Qgc3RvcmVfcG93ZXJfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKLQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgbW9kZTsKLQotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJm1vZGUpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gaXdsX3Bvd2VyX3NldF91c2VyX21vZGUocHJpdiwgbW9kZSk7Ci0JaWYgKHJldCkgewotCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImZhaWxlZCBzZXR0aW5nIHBvd2VyIG1vZGUuXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCXJldCA9IGNvdW50OwotCi0gb3V0OgotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfcG93ZXJfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlpbnQgbGV2ZWwgPSBwcml2LT5wb3dlcl9kYXRhLnBvd2VyX21vZGU7Ci0JY2hhciAqcCA9IGJ1ZjsKLQotCXAgKz0gc3ByaW50ZihwLCAiJWRcbiIsIGxldmVsKTsKLQlyZXR1cm4gcCAtIGJ1ZiArIDE7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihwb3dlcl9sZXZlbCwgU19JV1VTUiB8IFNfSVJVU1IsCi0JCSAgIHNob3dfcG93ZXJfbGV2ZWwsIHN0b3JlX3Bvd2VyX2xldmVsKTsKLQotI2RlZmluZSBNQVhfV1hfU1RSSU5HIDgwCi0KLS8qIFZhbHVlcyBhcmUgaW4gbWljcm9zZWNvbmQgKi8KLXN0YXRpYyBjb25zdCBzMzIgdGltZW91dF9kdXJhdGlvbltdID0gewotCTM1MDAwMCwKLQkyNTAwMDAsCi0JNzUwMDAsCi0JMzcwMDAsCi0JMjUwMDAsCi19Owotc3RhdGljIGNvbnN0IHMzMiBwZXJpb2RfZHVyYXRpb25bXSA9IHsKLQk0MDAwMDAsCi0JNzAwMDAwLAotCTEwMDAwMDAsCi0JMTAwMDAwMCwKLQkxMDAwMDAwCi19OwotCiBzdGF0aWMgc3NpemVfdCBzaG93X2NoYW5uZWxzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0zODQ3LDcgKzM3MzMsNiBAQAogI2lmZGVmIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCiAJJmRldl9hdHRyX21lYXN1cmVtZW50LmF0dHIsCiAjZW5kaWYKLQkmZGV2X2F0dHJfcG93ZXJfbGV2ZWwuYXR0ciwKIAkmZGV2X2F0dHJfcmV0cnlfcmF0ZS5hdHRyLAogCSZkZXZfYXR0cl9zdGF0aXN0aWNzLmF0dHIsCiAJJmRldl9hdHRyX3N0YXR1cy5hdHRyLApAQCAtMzkxMiw4ICszNzk3LDYgQEAKIAlwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnZhbCA9IDA7CiAKIAlwcml2LT5yYXRlc19tYXNrID0gSVdMX1JBVEVTX01BU0s7Ci0JLyogSWYgcG93ZXIgbWFuYWdlbWVudCBpcyB0dXJuZWQgb24sIGRlZmF1bHQgdG8gQ0FNIG1vZGUgKi8KLQlwcml2LT5wb3dlcl9tb2RlID0gSVdMX1BPV0VSX01PREVfQ0FNOwogCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gSVdMX0RFRkFVTFRfVFhfUE9XRVI7CiAKIAlpZiAoZWVwcm9tLT52ZXJzaW9uIDwgRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04pIHsKQEAgLTM5NjAsNyArMzg0Myw5IEBACiAJLyogVGVsbCBtYWM4MDIxMSBvdXIgY2hhcmFjdGVyaXN0aWNzICovCiAJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAogCQkgICAgSUVFRTgwMjExX0hXX05PSVNFX0RCTSB8Ci0JCSAgICBJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVDsKKwkJICAgIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UIHwKKwkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJCSAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUzsKIAogCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KIAkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKQEAgLTQwMjAsMTUgKzM5MDUsNiBAQAogCXByaXYgPSBody0+cHJpdjsKIAlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CiAKLQlpZiAoKGl3bDM5NDVfbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzID4gSVdMMzlfTUFYX05VTV9RVUVVRVMpIHx8Ci0JICAgICAoaXdsMzk0NV9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMgPCBJV0wzOV9NSU5fTlVNX1FVRVVFUykpIHsKLQkJSVdMX0VSUihwcml2LAotCQkJImludmFsaWQgcXVldWVzX251bSwgc2hvdWxkIGJlIGJldHdlZW4gJWQgYW5kICVkXG4iLAotCQkJSVdMMzlfTUlOX05VTV9RVUVVRVMsIElXTDM5X01BWF9OVU1fUVVFVUVTKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXRfaWVlZTgwMjExX2ZyZWVfaHc7Ci0JfQotCiAJLyoKIAkgKiBEaXNhYmxpbmcgaGFyZHdhcmUgc2NhbiBtZWFucyB0aGF0IG1hYzgwMjExIHdpbGwgcGVyZm9ybSBzY2FucwogCSAqICJ0aGUgaGFyZCB3YXkiLCByYXRoZXIgdGhhbiB1c2luZyBkZXZpY2UncyBzY2FuLgpAQCAtNDA0NSw5ICszOTIxLDEwIEBACiAJcHJpdi0+aW50YV9tYXNrID0gQ1NSX0lOSV9TRVRfTUFTSzsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JcHJpdi0+ZGVidWdfbGV2ZWwgPSBpd2wzOTQ1X21vZF9wYXJhbXMuZGVidWc7CiAJYXRvbWljX3NldCgmcHJpdi0+cmVzdHJpY3RfcmVmY250LCAwKTsKICNlbmRpZgorCWlmIChpd2xfYWxsb2NfdHJhZmZpY19tZW0ocHJpdikpCisJCUlXTF9FUlIocHJpdiwgIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGdlbmVyYXRlIHRyYWZmaWMgbG9nXG4iKTsKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiAyLiBJbml0aWFsaXppbmcgUENJIGJ1cwpAQCAtNDIxMCw2ICs0MDg3LDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAgb3V0X2llZWU4MDIxMV9mcmVlX2h3OgogCWllZWU4MDIxMV9mcmVlX2h3KHByaXYtPmh3KTsKKwlpd2xfZnJlZV90cmFmZmljX21lbShwcml2KTsKICBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQyNjUsNiArNDE0Myw3IEBACiAJICogdW50aWwgbm93Li4uICovCiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAlwcml2LT53b3JrcXVldWUgPSBOVUxMOworCWl3bF9mcmVlX3RyYWZmaWNfbWVtKHByaXYpOwogCiAJZnJlZV9pcnEocGRldi0+aXJxLCBwcml2KTsKIAlwY2lfZGlzYWJsZV9tc2kocGRldik7CkBAIC00MzQxLDE0ICs0MjIwLDEyIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoc3djcnlwdG8sIGl3bDM5NDVfbW9kX3BhcmFtcy5zd19jcnlwdG8sIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHN3Y3J5cHRvLAogCQkgInVzaW5nIHNvZnR3YXJlIGNyeXB0byAoZGVmYXVsdCAxIFtzb2Z0d2FyZV0pXG4iKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgaXdsMzk0NV9tb2RfcGFyYW1zLmRlYnVnLCB1aW50LCAwNDQ0KTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpd2xfZGVidWdfbGV2ZWwsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIG91dHB1dCBtYXNrIik7CisjZW5kaWYKIG1vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlX2h3X3NjYW4sIGl3bDM5NDVfbW9kX3BhcmFtcy5kaXNhYmxlX2h3X3NjYW4sIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfaHdfc2NhbiwgImRpc2FibGUgaGFyZHdhcmUgc2Nhbm5pbmcgKGRlZmF1bHQgMCkiKTsKLQotbW9kdWxlX3BhcmFtX25hbWVkKHF1ZXVlc19udW0sIGl3bDM5NDVfbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhxdWV1ZXNfbnVtLCAibnVtYmVyIG9mIGh3IHF1ZXVlcy4iKTsKLQogbW9kdWxlX3BhcmFtX25hbWVkKGZ3X3Jlc3RhcnQzOTQ1LCBpd2wzOTQ1X21vZF9wYXJhbXMucmVzdGFydF9mdywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZndfcmVzdGFydDM5NDUsICJyZXN0YXJ0IGZpcm13YXJlIGluIGNhc2Ugb2YgZXJyb3IiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvS2NvbmZpZwppbmRleCAwMzA0MDFkLi5jNjJkYTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvS2NvbmZpZwpAQCAtMiw3ICsyLDYgQEAKIAl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgTXVsdGljb21tIDMyMDAgV2lGaSBkcml2ZXIiCiAJZGVwZW5kcyBvbiBNTUMgJiYgV0xBTl84MDIxMSAmJiBFWFBFUklNRU5UQUwKIAlkZXBlbmRzIG9uIENGRzgwMjExCi0Jc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCiAJICBUaGUgSW50ZWwgV2lyZWxlc3MgTXVsdGljb21tIDMyMDAgaGFyZHdhcmUgaXMgYSBjb21ibwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL01ha2VmaWxlCmluZGV4IDkyN2YwMjIuLmQzNDI5MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiBvYmotJChDT05GSUdfSVdNKSA6PSBpd21jMzIwMHdpZmkubwogaXdtYzMyMDB3aWZpLW9ianMgKz0gbWFpbi5vIG5ldGRldi5vIHJ4Lm8gdHgubyBzZGlvLm8gaGFsLm8gZncubwotaXdtYzMyMDB3aWZpLW9ianMgKz0gY29tbWFuZHMubyB3ZXh0Lm8gY2ZnODAyMTEubyBlZXByb20ubworaXdtYzMyMDB3aWZpLW9ianMgKz0gY29tbWFuZHMubyBjZmc4MDIxMS5vIGVlcHJvbS5vCiAKIGl3bWMzMjAwd2lmaS0kKENPTkZJR19JV01fREVCVUcpICs9IGRlYnVnZnMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYwppbmRleCA5NmY3MTRlLi5hNTZhMmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYwpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgpAQCAtMTMwLDYgKzEzMSwxMzQgQEAKIAkubl9iaXRyYXRlcyA9IGl3bV9hX3JhdGVzX3NpemUsCiB9OwogCitzdGF0aWMgaW50IGl3bV9rZXlfaW5pdChzdHJ1Y3QgaXdtX2tleSAqa2V5LCB1OCBrZXlfaW5kZXgsCisJCQljb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCit7CisJa2V5LT5oZHIua2V5X2lkeCA9IGtleV9pbmRleDsKKwlpZiAoIW1hY19hZGRyIHx8IGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKG1hY19hZGRyKSkgeworCQlrZXktPmhkci5tdWx0aWNhc3QgPSAxOworCQltZW1zZXQoa2V5LT5oZHIubWFjLCAweGZmLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJa2V5LT5oZHIubXVsdGljYXN0ID0gMDsKKwkJbWVtY3B5KGtleS0+aGRyLm1hYywgbWFjX2FkZHIsIEVUSF9BTEVOKTsKKwl9CisKKwlpZiAocGFyYW1zKSB7CisJCWlmIChwYXJhbXMtPmtleV9sZW4gPiBXTEFOX01BWF9LRVlfTEVOIHx8CisJCSAgICBwYXJhbXMtPnNlcV9sZW4gPiBJV19FTkNPREVfU0VRX01BWF9TSVpFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJa2V5LT5jaXBoZXIgPSBwYXJhbXMtPmNpcGhlcjsKKwkJa2V5LT5rZXlfbGVuID0gcGFyYW1zLT5rZXlfbGVuOworCQlrZXktPnNlcV9sZW4gPSBwYXJhbXMtPnNlcV9sZW47CisJCW1lbWNweShrZXktPmtleSwgcGFyYW1zLT5rZXksIGtleS0+a2V5X2xlbik7CisJCW1lbWNweShrZXktPnNlcSwgcGFyYW1zLT5zZXEsIGtleS0+c2VxX2xlbik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXdtX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCisJCQkJdTgga2V5X2luZGV4LCBjb25zdCB1OCAqbWFjX2FkZHIsCisJCQkJc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKG5kZXYpOworCXN0cnVjdCBpd21fa2V5ICprZXkgPSAmaXdtLT5rZXlzW2tleV9pbmRleF07CisJaW50IHJldDsKKworCUlXTV9EQkdfV0VYVChpd20sIERCRywgIkFkZGluZyBrZXkgZm9yICVwTVxuIiwgbWFjX2FkZHIpOworCisJbWVtc2V0KGtleSwgMCwgc2l6ZW9mKHN0cnVjdCBpd21fa2V5KSk7CisJcmV0ID0gaXdtX2tleV9pbml0KGtleSwga2V5X2luZGV4LCBtYWNfYWRkciwgcGFyYW1zKTsKKwlpZiAocmV0IDwgMCkgeworCQlJV01fRVJSKGl3bSwgIkludmFsaWQga2V5X3BhcmFtc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIGl3bV9zZXRfa2V5KGl3bSwgMCwga2V5KTsKK30KKworc3RhdGljIGludCBpd21fY2ZnODAyMTFfZ2V0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKKwkJCQl1OCBrZXlfaW5kZXgsIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLAorCQkJCXZvaWQgKCpjYWxsYmFjaykodm9pZCAqY29va2llLAorCQkJCQkJIHN0cnVjdCBrZXlfcGFyYW1zKikpCit7CisJc3RydWN0IGl3bV9wcml2ICppd20gPSBuZGV2X3RvX2l3bShuZGV2KTsKKwlzdHJ1Y3QgaXdtX2tleSAqa2V5ID0gJml3bS0+a2V5c1trZXlfaW5kZXhdOworCXN0cnVjdCBrZXlfcGFyYW1zIHBhcmFtczsKKworCUlXTV9EQkdfV0VYVChpd20sIERCRywgIkdldHRpbmcga2V5ICVkXG4iLCBrZXlfaW5kZXgpOworCisJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKKworCXBhcmFtcy5jaXBoZXIgPSBrZXktPmNpcGhlcjsKKwlwYXJhbXMua2V5X2xlbiA9IGtleS0+a2V5X2xlbjsKKwlwYXJhbXMuc2VxX2xlbiA9IGtleS0+c2VxX2xlbjsKKwlwYXJhbXMuc2VxID0ga2V5LT5zZXE7CisJcGFyYW1zLmtleSA9IGtleS0+a2V5OworCisJY2FsbGJhY2soY29va2llLCAmcGFyYW1zKTsKKworCXJldHVybiBrZXktPmtleV9sZW4gPyAwIDogLUVOT0VOVDsKK30KKworCitzdGF0aWMgaW50IGl3bV9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAorCQkJCXU4IGtleV9pbmRleCwgY29uc3QgdTggKm1hY19hZGRyKQoreworCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20obmRldik7CisJc3RydWN0IGl3bV9rZXkgKmtleSA9ICZpd20tPmtleXNba2V5X2luZGV4XTsKKworCWlmICghaXdtLT5rZXlzW2tleV9pbmRleF0ua2V5X2xlbikgeworCQlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJLZXkgJWQgbm90IHVzZWRcbiIsIGtleV9pbmRleCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChrZXlfaW5kZXggPT0gaXdtLT5kZWZhdWx0X2tleSkKKwkJaXdtLT5kZWZhdWx0X2tleSA9IC0xOworCisJcmV0dXJuIGl3bV9zZXRfa2V5KGl3bSwgMSwga2V5KTsKK30KKworc3RhdGljIGludCBpd21fY2ZnODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAorCQkJCQl1OCBrZXlfaW5kZXgpCit7CisJc3RydWN0IGl3bV9wcml2ICppd20gPSBuZGV2X3RvX2l3bShuZGV2KTsKKworCUlXTV9EQkdfV0VYVChpd20sIERCRywgIkRlZmF1bHQga2V5IGluZGV4IGlzOiAlZFxuIiwga2V5X2luZGV4KTsKKworCWlmICghaXdtLT5rZXlzW2tleV9pbmRleF0ua2V5X2xlbikgeworCQlJV01fRVJSKGl3bSwgIktleSAlZCBub3QgdXNlZFxuIiwga2V5X2luZGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaXdtLT5kZWZhdWx0X2tleSA9IGtleV9pbmRleDsKKworCXJldHVybiBpd21fc2V0X3R4X2tleShpd20sIGtleV9pbmRleCk7Cit9CisKK3N0YXRpYyBpbnQgaXdtX2NmZzgwMjExX2dldF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAorCQkJCSAgICB1OCAqbWFjLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKK3sKKwlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKG5kZXYpOworCisJaWYgKG1lbWNtcChtYWMsIGl3bS0+YnNzaWQsIEVUSF9BTEVOKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19UWF9CSVRSQVRFOworCXNpbmZvLT50eHJhdGUubGVnYWN5ID0gaXdtLT5yYXRlICogMTA7CisKKwlpZiAodGVzdF9iaXQoSVdNX1NUQVRVU19BU1NPQ0lBVEVELCAmaXdtLT5zdGF0dXMpKSB7CisJCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1NJR05BTDsKKwkJc2luZm8tPnNpZ25hbCA9IGl3bS0+d3N0YXRzLnF1YWwubGV2ZWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKwogaW50IGl3bV9jZmc4MDIxMV9pbmZvcm1fYnNzKHN0cnVjdCBpd21fcHJpdiAqaXdtKQogewogCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBpd21fdG9fd2lwaHkoaXdtKTsKQEAgLTE2NywyMCArMjk2LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXdtX2NmZzgwMjExX2NoYW5nZV9pZmFjZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBpbnQgaWZpbmRleCwKK3N0YXRpYyBpbnQgaXdtX2NmZzgwMjExX2NoYW5nZV9pZmFjZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJCQkJICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCiAJCQkJICAgICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CiAJc3RydWN0IGl3bV9wcml2ICppd207CiAJdTMyIG9sZF9tb2RlOwogCi0JLyogd2UncmUgdW5kZXIgUlROTCAqLwotCW5kZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmluZGV4KTsKLQlpZiAoIW5kZXYpCi0JCXJldHVybiAtRU5PREVWOwotCiAJd2RldiA9IG5kZXYtPmllZWU4MDIxMV9wdHI7CiAJaXdtID0gbmRldl90b19pd20obmRldik7CiAJb2xkX21vZGUgPSBpd20tPmNvbmYubW9kZTsKQEAgLTIwMywxMSArMzI3LDggQEAKIAogCWl3bS0+dW1hY19wcm9maWxlLT5tb2RlID0gY3B1X3RvX2xlMzIoaXdtLT5jb25mLm1vZGUpOwogCi0JaWYgKGl3bS0+dW1hY19wcm9maWxlX2FjdGl2ZSkgewotCQlpbnQgcmV0ID0gaXdtX2ludmFsaWRhdGVfbWxtZV9wcm9maWxlKGl3bSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJSVdNX0VSUihpd20sICJDb3VsZG4ndCBpbnZhbGlkYXRlIHByb2ZpbGVcbiIpOwotCX0KKwlpZiAoaXdtLT51bWFjX3Byb2ZpbGVfYWN0aXZlKQorCQlpd21faW52YWxpZGF0ZV9tbG1lX3Byb2ZpbGUoaXdtKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzI5LDEyICs0NTAsMzAwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaXdtX3NldF9hdXRoX3R5cGUoc3RydWN0IGl3bV9wcml2ICppd20sCisJCQkgICAgIGVudW0gbmw4MDIxMV9hdXRoX3R5cGUgc21lX2F1dGhfdHlwZSkKK3sKKwl1OCAqYXV0aF90eXBlID0gJml3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlOworCisJc3dpdGNoIChzbWVfYXV0aF90eXBlKSB7CisJY2FzZSBOTDgwMjExX0FVVEhUWVBFX0FVVE9NQVRJQzoKKwljYXNlIE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU06CisJCUlXTV9EQkdfV0VYVChpd20sIERCRywgIk9QRU4gYXV0aFxuIik7CisJCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9PUEVOOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWToKKwkJaWYgKGl3bS0+dW1hY19wcm9maWxlLT5zZWMuZmxhZ3MgJgorCQkgICAgKFVNQUNfU0VDX0ZMR19XUEFfT05fTVNLIHwgVU1BQ19TRUNfRkxHX1JTTkFfT05fTVNLKSkgeworCQkJSVdNX0RCR19XRVhUKGl3bSwgREJHLCAiV1BBIGF1dGggYWxnXG4iKTsKKwkJCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9SU05BX1BTSzsKKwkJfSBlbHNlIHsKKwkJCUlXTV9EQkdfV0VYVChpd20sIERCRywgIldFUCBzaGFyZWQga2V5IGF1dGggYWxnXG4iKTsKKwkJCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9MRUdBQ1lfUFNLOworCQl9CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdNX0VSUihpd20sICJVbnN1cHBvcnRlZCBhdXRoIGFsZzogMHgleFxuIiwgc21lX2F1dGhfdHlwZSk7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXdtX3NldF93cGFfdmVyc2lvbihzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTMyIHdwYV92ZXJzaW9uKQoreworCUlXTV9EQkdfV0VYVChpd20sIERCRywgIndwYV92ZXJzaW9uOiAlZFxuIiwgd3BhX3ZlcnNpb24pOworCisJaWYgKCF3cGFfdmVyc2lvbikgeworCQlpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzID0gVU1BQ19TRUNfRkxHX0xFR0FDWV9QUk9GSUxFOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAod3BhX3ZlcnNpb24gJiBOTDgwMjExX1dQQV9WRVJTSU9OXzIpCisJCWl3bS0+dW1hY19wcm9maWxlLT5zZWMuZmxhZ3MgPSBVTUFDX1NFQ19GTEdfUlNOQV9PTl9NU0s7CisKKwlpZiAod3BhX3ZlcnNpb24gJiBOTDgwMjExX1dQQV9WRVJTSU9OXzEpCisJCWl3bS0+dW1hY19wcm9maWxlLT5zZWMuZmxhZ3MgfD0gVU1BQ19TRUNfRkxHX1dQQV9PTl9NU0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpd21fc2V0X2NpcGhlcihzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTMyIGNpcGhlciwgYm9vbCB1Y2FzdCkKK3sKKwl1OCAqcHJvZmlsZV9jaXBoZXIgPSB1Y2FzdCA/ICZpd20tPnVtYWNfcHJvZmlsZS0+c2VjLnVjYXN0X2NpcGhlciA6CisJCSZpd20tPnVtYWNfcHJvZmlsZS0+c2VjLm1jYXN0X2NpcGhlcjsKKworCWlmICghY2lwaGVyKSB7CisJCSpwcm9maWxlX2NpcGhlciA9IFVNQUNfQ0lQSEVSX1RZUEVfTk9ORTsKKwkJcmV0dXJuIDA7CisJfQorCisJSVdNX0RCR19XRVhUKGl3bSwgREJHLCAiJWNjYXN0IGNpcGhlciBpcyAweCV4XG4iLCB1Y2FzdCA/ICd1JyA6ICdtJywKKwkJICAgICBjaXBoZXIpOworCisJc3dpdGNoIChjaXBoZXIpIHsKKwljYXNlIElXX0FVVEhfQ0lQSEVSX05PTkU6CisJCSpwcm9maWxlX2NpcGhlciA9IFVNQUNfQ0lQSEVSX1RZUEVfTk9ORTsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKKwkJKnByb2ZpbGVfY2lwaGVyID0gVU1BQ19DSVBIRVJfVFlQRV9XRVBfNDA7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgorCQkqcHJvZmlsZV9jaXBoZXIgPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF8xMDQ7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKKwkJKnByb2ZpbGVfY2lwaGVyID0gVU1BQ19DSVBIRVJfVFlQRV9US0lQOworCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJCSpwcm9maWxlX2NpcGhlciA9IFVNQUNfQ0lQSEVSX1RZUEVfQ0NNUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdNX0VSUihpd20sICJVbnN1cHBvcnRlZCBjaXBoZXI6IDB4JXhcbiIsIGNpcGhlcik7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXdtX3NldF9rZXlfbWd0KHN0cnVjdCBpd21fcHJpdiAqaXdtLCB1MzIga2V5X21ndCkKK3sKKwl1OCAqYXV0aF90eXBlID0gJml3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlOworCisJSVdNX0RCR19XRVhUKGl3bSwgREJHLCAia2V5X21ndDogMHgleFxuIiwga2V5X21ndCk7CisKKwlpZiAoa2V5X21ndCA9PSBXTEFOX0FLTV9TVUlURV84MDIxWCkKKwkJKmF1dGhfdHlwZSA9IFVNQUNfQVVUSF9UWVBFXzgwMjFYOworCWVsc2UgaWYgKGtleV9tZ3QgPT0gV0xBTl9BS01fU1VJVEVfUFNLKSB7CisJCWlmIChpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzICYKKwkJICAgIChVTUFDX1NFQ19GTEdfV1BBX09OX01TSyB8IFVNQUNfU0VDX0ZMR19SU05BX09OX01TSykpCisJCQkqYXV0aF90eXBlID0gVU1BQ19BVVRIX1RZUEVfUlNOQV9QU0s7CisJCWVsc2UKKwkJCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9MRUdBQ1lfUFNLOworCX0gZWxzZSB7CisJCUlXTV9FUlIoaXdtLCAiSW52YWxpZCBrZXkgbWd0OiAweCV4XG4iLCBrZXlfbWd0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBpd21fY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSkKK3sKKwlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IHdpcGh5X3RvX2l3bSh3aXBoeSk7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gc21lLT5jaGFubmVsOworCXN0cnVjdCBrZXlfcGFyYW1zIGtleV9wYXJhbTsKKwlpbnQgcmV0OworCisJaWYgKCF0ZXN0X2JpdChJV01fU1RBVFVTX1JFQURZLCAmaXdtLT5zdGF0dXMpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICghc21lLT5zc2lkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUpIHsKKwkJcmV0ID0gaXdtX2ludmFsaWRhdGVfbWxtZV9wcm9maWxlKGl3bSk7CisJCWlmIChyZXQpIHsKKwkJCUlXTV9FUlIoaXdtLCAiQ291bGRuJ3QgaW52YWxpZGF0ZSBwcm9maWxlXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlpZiAoY2hhbikKKwkJaXdtLT5jaGFubmVsID0KKwkJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaGFuLT5jZW50ZXJfZnJlcSk7CisKKwlpd20tPnVtYWNfcHJvZmlsZS0+c3NpZC5zc2lkX2xlbiA9IHNtZS0+c3NpZF9sZW47CisJbWVtY3B5KGl3bS0+dW1hY19wcm9maWxlLT5zc2lkLnNzaWQsIHNtZS0+c3NpZCwgc21lLT5zc2lkX2xlbik7CisKKwlpZiAoc21lLT5ic3NpZCkgeworCQlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJCU1NJRDogJXBNXG4iLCBzbWUtPmJzc2lkKTsKKwkJbWVtY3B5KCZpd20tPnVtYWNfcHJvZmlsZS0+YnNzaWRbMF0sIHNtZS0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJaXdtLT51bWFjX3Byb2ZpbGUtPmJzc19udW0gPSAxOworCX0gZWxzZSB7CisJCW1lbXNldCgmaXdtLT51bWFjX3Byb2ZpbGUtPmJzc2lkWzBdLCAwLCBFVEhfQUxFTik7CisJCWl3bS0+dW1hY19wcm9maWxlLT5ic3NfbnVtID0gMDsKKwl9CisKKwlyZXQgPSBpd21fc2V0X3dwYV92ZXJzaW9uKGl3bSwgc21lLT5jcnlwdG8ud3BhX3ZlcnNpb25zKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGl3bV9zZXRfYXV0aF90eXBlKGl3bSwgc21lLT5hdXRoX3R5cGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHNtZS0+Y3J5cHRvLm5fY2lwaGVyc19wYWlyd2lzZSkgeworCQlyZXQgPSBpd21fc2V0X2NpcGhlcihpd20sIHNtZS0+Y3J5cHRvLmNpcGhlcnNfcGFpcndpc2VbMF0sCisJCQkJICAgICB0cnVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGl3bV9zZXRfY2lwaGVyKGl3bSwgc21lLT5jcnlwdG8uY2lwaGVyX2dyb3VwLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoc21lLT5jcnlwdG8ubl9ha21fc3VpdGVzKSB7CisJCXJldCA9IGl3bV9zZXRfa2V5X21ndChpd20sIHNtZS0+Y3J5cHRvLmFrbV9zdWl0ZXNbMF0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBXZSBzYXZlIHRoZSBXRVAga2V5IGluIGNhc2Ugd2Ugd2FudCB0byBkbyBzaGFyZWQgYXV0aGVudGljYXRpb24uCisJICogV2UgaGF2ZSB0byBkbyBpdCBzbyBiZWNhdXNlIFVNQUMgd2lsbCBhc3NlcnQgd2hlbmV2ZXIgaXQgZ2V0cyBhCisJICoga2V5IGJlZm9yZSBhIHByb2ZpbGUuCisJICovCisJaWYgKHNtZS0+a2V5KSB7CisJCWtleV9wYXJhbS5rZXkgPSBrbWVtZHVwKHNtZS0+a2V5LCBzbWUtPmtleV9sZW4sIEdGUF9LRVJORUwpOworCQlpZiAoa2V5X3BhcmFtLmtleSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWtleV9wYXJhbS5rZXlfbGVuID0gc21lLT5rZXlfbGVuOworCQlrZXlfcGFyYW0uc2VxX2xlbiA9IDA7CisJCWtleV9wYXJhbS5jaXBoZXIgPSBzbWUtPmNyeXB0by5jaXBoZXJzX3BhaXJ3aXNlWzBdOworCisJCXJldCA9IGl3bV9rZXlfaW5pdCgmaXdtLT5rZXlzW3NtZS0+a2V5X2lkeF0sIHNtZS0+a2V5X2lkeCwKKwkJCQkgICBOVUxMLCAma2V5X3BhcmFtKTsKKwkJa2ZyZWUoa2V5X3BhcmFtLmtleSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlJV01fRVJSKGl3bSwgIkludmFsaWQga2V5X3BhcmFtc1xuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJaXdtLT5kZWZhdWx0X2tleSA9IHNtZS0+a2V5X2lkeDsKKwl9CisKKwlyZXQgPSBpd21fc2VuZF9tbG1lX3Byb2ZpbGUoaXdtKTsKKworCWlmIChpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmF1dGhfdHlwZSAhPSBVTUFDX0FVVEhfVFlQRV9MRUdBQ1lfUFNLIHx8CisJICAgIHNtZS0+a2V5ID09IE5VTEwpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIFdlIHdhbnQgdG8gZG8gc2hhcmVkIGF1dGguCisJICogV2UgbmVlZCB0byBhY3R1YWxseSBzZXQgdGhlIGtleSB3ZSBwcmV2aW91c2x5IGNhY2hlZCwKKwkgKiBhbmQgdGhlbiB0ZWxsIHRoZSBVTUFDIGl0J3MgdGhlIGRlZmF1bHQgb25lLgorCSAqIFRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBhdXRoK2Fzc29jIFVNQUMgbWFjaGluZXJ5LCBhbmQgYWdhaW4sCisJICogdGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgc2V0dGluZyB0aGUgcHJvZmlsZS4KKwkgKi8KKwlyZXQgPSBpd21fc2V0X2tleShpd20sIDAsICZpd20tPmtleXNbc21lLT5rZXlfaWR4XSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gaXdtX3NldF90eF9rZXkoaXdtLCBpd20tPmRlZmF1bHRfa2V5KTsKK30KKworc3RhdGljIGludCBpd21fY2ZnODAyMTFfZGlzY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHUxNiByZWFzb25fY29kZSkKK3sKKwlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IHdpcGh5X3RvX2l3bSh3aXBoeSk7CisKKwlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJBY3RpdmU6ICVkXG4iLCBpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUpOworCisJaWYgKGl3bS0+dW1hY19wcm9maWxlX2FjdGl2ZSkKKwkJaXdtX2ludmFsaWRhdGVfbWxtZV9wcm9maWxlKGl3bSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpd21fY2ZnODAyMTFfc2V0X3R4cG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgZW51bSB0eF9wb3dlcl9zZXR0aW5nIHR5cGUsIGludCBkYm0pCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBUWF9QT1dFUl9BVVRPTUFUSUM6CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpd21fY2ZnODAyMTFfZ2V0X3R4cG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwgaW50ICpkYm0pCit7CisJc3RydWN0IGl3bV9wcml2ICppd20gPSB3aXBoeV90b19pd20od2lwaHkpOworCisJKmRibSA9IGl3bS0+dHhwb3dlcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl3bV9jZmc4MDIxMV9zZXRfcG93ZXJfbWdtdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgICBib29sIGVuYWJsZWQsIGludCB0aW1lb3V0KQoreworCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gd2lwaHlfdG9faXdtKHdpcGh5KTsKKwl1MzIgcG93ZXJfaW5kZXg7CisKKwlpZiAoZW5hYmxlZCkKKwkJcG93ZXJfaW5kZXggPSBJV01fUE9XRVJfSU5ERVhfREVGQVVMVDsKKwllbHNlCisJCXBvd2VyX2luZGV4ID0gSVdNX1BPV0VSX0lOREVYX01JTjsKKworCWlmIChwb3dlcl9pbmRleCA9PSBpd20tPmNvbmYucG93ZXJfaW5kZXgpCisJCXJldHVybiAwOworCisJaXdtLT5jb25mLnBvd2VyX2luZGV4ID0gcG93ZXJfaW5kZXg7CisKKwlyZXR1cm4gaXdtX3VtYWNfc2V0X2NvbmZpZ19maXgoaXdtLCBVTUFDX1BBUkFNX1RCTF9DRkdfRklYLAorCQkJCSAgICAgICBDRkdfUE9XRVJfSU5ERVgsIGl3bS0+Y29uZi5wb3dlcl9pbmRleCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIGl3bV9jZmc4MDIxMV9vcHMgPSB7CiAJLmNoYW5nZV92aXJ0dWFsX2ludGYgPSBpd21fY2ZnODAyMTFfY2hhbmdlX2lmYWNlLAorCS5hZGRfa2V5ID0gaXdtX2NmZzgwMjExX2FkZF9rZXksCisJLmdldF9rZXkgPSBpd21fY2ZnODAyMTFfZ2V0X2tleSwKKwkuZGVsX2tleSA9IGl3bV9jZmc4MDIxMV9kZWxfa2V5LAorCS5zZXRfZGVmYXVsdF9rZXkgPSBpd21fY2ZnODAyMTFfc2V0X2RlZmF1bHRfa2V5LAorCS5nZXRfc3RhdGlvbiA9IGl3bV9jZmc4MDIxMV9nZXRfc3RhdGlvbiwKIAkuc2NhbiA9IGl3bV9jZmc4MDIxMV9zY2FuLAogCS5zZXRfd2lwaHlfcGFyYW1zID0gaXdtX2NmZzgwMjExX3NldF93aXBoeV9wYXJhbXMsCisJLmNvbm5lY3QgPSBpd21fY2ZnODAyMTFfY29ubmVjdCwKKwkuZGlzY29ubmVjdCA9IGl3bV9jZmc4MDIxMV9kaXNjb25uZWN0LAogCS5qb2luX2lic3MgPSBpd21fY2ZnODAyMTFfam9pbl9pYnNzLAogCS5sZWF2ZV9pYnNzID0gaXdtX2NmZzgwMjExX2xlYXZlX2lic3MsCisJLnNldF90eF9wb3dlciA9IGl3bV9jZmc4MDIxMV9zZXRfdHhwb3dlciwKKwkuZ2V0X3R4X3Bvd2VyID0gaXdtX2NmZzgwMjExX2dldF90eHBvd2VyLAorCS5zZXRfcG93ZXJfbWdtdCA9IGl3bV9jZmc4MDIxMV9zZXRfcG93ZXJfbWdtdCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgY2lwaGVyX3N1aXRlc1tdID0geworCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwLAorCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCwKKwlXTEFOX0NJUEhFUl9TVUlURV9US0lQLAorCVdMQU5fQ0lQSEVSX1NVSVRFX0NDTVAsCiB9OwogCiBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICppd21fd2Rldl9hbGxvYyhpbnQgc2l6ZW9mX2J1cywgc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMzc5LDYgKzc4OCw5IEBACiAJd2Rldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gJml3bV9iYW5kXzVnaHo7CiAJd2Rldi0+d2lwaHktPnNpZ25hbF90eXBlID0gQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOwogCisJd2Rldi0+d2lwaHktPmNpcGhlcl9zdWl0ZXMgPSBjaXBoZXJfc3VpdGVzOworCXdkZXYtPndpcGh5LT5uX2NpcGhlcl9zdWl0ZXMgPSBBUlJBWV9TSVpFKGNpcGhlcl9zdWl0ZXMpOworCiAJcmV0ID0gd2lwaHlfcmVnaXN0ZXIod2Rldi0+d2lwaHkpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgcmVnaXN0ZXIgd2lwaHkgZGV2aWNlXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NvbW1hbmRzLmMKaW5kZXggZTIzMzRkMS4uMjNiNTJmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NvbW1hbmRzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NvbW1hbmRzLmMKQEAgLTcwLDE0ICs3MCwyNyBAQAogaW50IGl3bV9zZW5kX3dpZmlfaWZfY21kKHN0cnVjdCBpd21fcHJpdiAqaXdtLCB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9zaXplLAogCQkJIGJvb2wgcmVzcCkKIHsKKwlzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pZiAqaGRyID0gKHN0cnVjdCBpd21fdW1hY193aWZpX2lmICopcGF5bG9hZDsKIAlzdHJ1Y3QgaXdtX3VkbWFfd2lmaV9jbWQgdWRtYV9jbWQgPSBVRE1BX1VNQUNfSU5JVDsKIAlzdHJ1Y3QgaXdtX3VtYWNfY21kIHVtYWNfY21kOworCWludCByZXQ7CisJdTggb2lkID0gaGRyLT5vaWQ7CiAKIAl1bWFjX2NtZC5pZCA9IFVNQUNfQ01EX09QQ09ERV9XSUZJX0lGX1dSQVBQRVI7CiAJdW1hY19jbWQucmVzcCA9IHJlc3A7CiAKLQlyZXR1cm4gaXdtX2hhbF9zZW5kX3VtYWNfY21kKGl3bSwgJnVkbWFfY21kLCAmdW1hY19jbWQsCi0JCQkJICAgICBwYXlsb2FkLCBwYXlsb2FkX3NpemUpOworCXJldCA9IGl3bV9oYWxfc2VuZF91bWFjX2NtZChpd20sICZ1ZG1hX2NtZCwgJnVtYWNfY21kLAorCQkJCSAgICBwYXlsb2FkLCBwYXlsb2FkX3NpemUpOworCisJaWYgKHJlc3ApIHsKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaXdtLT53aWZpX250ZnlfcXVldWUsCisJCQkJICAgdGVzdF9hbmRfY2xlYXJfYml0KG9pZCwgJml3bS0+d2lmaV9udGZ5WzBdKSwKKwkJCQkgICAzICogSFopOworCisJCXJldHVybiByZXQgPyAwIDogLUVCVVNZOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29leF9ldmVudCBpd21fc3RhX3hvcl9wcmlvX3RibFtDT0VYX0VWRU5UU19OVU1dID0KQEAgLTEwNiw3ICsxMTksNyBAQAogCXs0LCAzLCAwLCBDT0VYX1VOQVNTT0NfTUFOVUFMX1NDQU5fRkxBR1N9LAogCXszLCAzLCAwLCBDT0VYX1VOQVNTT0NfQVVUT19TQ0FOX0ZMQUdTfSwKIAl7NSwgNSwgMCwgQ09FWF9DQUxJQlJBVElPTl9GTEFHU30sCi0JezQsIDQsIDAsIENPRVhfUEVSSU9ESUNfQ0FMSUJSQVRJT05fRkxBR1N9LAorCXszLCAzLCAwLCBDT0VYX1BFUklPRElDX0NBTElCUkFUSU9OX0ZMQUdTfSwKIAl7NSwgNCwgMCwgQ09FWF9DT05ORUNUSU9OX0VTVEFCX0ZMQUdTfSwKIAl7NCwgNCwgMCwgQ09FWF9BU1NPQ0lBVEVEX0lETEVfRkxBR1N9LAogCXs0LCA0LCAwLCBDT0VYX0FTU09DX01BTlVBTF9TQ0FOX0ZMQUdTfSwKQEAgLTMzMiw4ICszNDUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBpd21fc2VuZF91bWFjX2NvbmZpZyhzdHJ1Y3QgaXdtX3ByaXYgKml3bSwKLQkJCSBfX2xlMzIgcmVzZXRfZmxhZ3MpCitpbnQgaXdtX3NlbmRfdW1hY19jb25maWcoc3RydWN0IGl3bV9wcml2ICppd20sIF9fbGUzMiByZXNldF9mbGFncykKIHsKIAlpbnQgcmV0OwogCkBAIC0zNjEsNiArMzczLDEyIEBACiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBpd21fdW1hY19zZXRfY29uZmlnX2ZpeChpd20sIFVNQUNfUEFSQU1fVEJMX0NGR19GSVgsCisJCQkJICAgICAgQ0ZHX1dJUkVMRVNTX01PREUsCisJCQkJICAgICAgaXdtLT5jb25mLndpcmVsZXNzX21vZGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaXdtX3VtYWNfc2V0X2NvbmZpZ19maXgoaXdtLCBVTUFDX1BBUkFNX1RCTF9DRkdfRklYLAogCQkJCSAgICAgIENGR19DT0VYX01PREUsIGl3bS0+Y29uZi5jb2V4aXN0X21vZGUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtNDAyLDcgKzQyMCw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBpd21fdW1hY19zZXRfY29uZmlnX2ZpeChpd20sIFVNQUNfUEFSQU1fVEJMX0NGR19GSVgsCi0JCQkJICAgICAgQ0ZHX1BNX0NUUkxfRkxBR1MsIDB4MzAwMDEpOworCQkJCSAgICAgIENGR19QTV9DVFJMX0ZMQUdTLCAweDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC00NjIsOCArNDgwLDEwIEBACiAJdGFyZ2V0X2NtZC5lb3AgPSAxOwogCiAJcmV0ID0gaXdtX2hhbF9zZW5kX3RhcmdldF9jbWQoaXdtLCAmdGFyZ2V0X2NtZCwgTlVMTCk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKIAkJSVdNX0VSUihpd20sICJDb3VsZG4ndCBzZW5kIFJFQUQgY29tbWFuZFxuIik7CisJCXJldHVybiByZXQ7CisJfQogCiAJLyogV2hlbiBzdWNjZWRpbmcsIHRoZSBzZW5kX3RhcmdldCByb3V0aW5lIHJldHVybnMgdGhlIHNlcSBudW1iZXIgKi8KIAlzZXFfbnVtID0gcmV0OwpAQCAtNDgzLDcgKzUwMyw3IEBACiAKIAlrZnJlZShjbWQpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGl3bV9yZWFkX21hYyhzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTggKm1hYykKQEAgLTQ5Myw3ICs1MTMsNyBAQAogCiAJcmV0ID0gaXdtX3RhcmdldF9yZWFkKGl3bSwgY3B1X3RvX2xlMzIoV0lDT19NQUNfQUREUkVTU19BRERSKSwKIAkJCSAgICAgIG1hY19hbGlnbiwgc2l6ZW9mKG1hY19hbGlnbikpOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNfYWxpZ24pKQpAQCAtNTA3LDIyICs1MjcsNiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaXdtX3NldF90eF9rZXkoc3RydWN0IGl3bV9wcml2ICppd20sIHU4IGtleV9pZHgpCi17Ci0Jc3RydWN0IGl3bV91bWFjX3R4X2tleV9pZCB0eF9rZXlfaWQ7Ci0KLQlpZiAoIWl3bS0+ZGVmYXVsdF9rZXkgfHwgIWl3bS0+ZGVmYXVsdF9rZXktPmluX3VzZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0eF9rZXlfaWQuaGRyLm9pZCA9IFVNQUNfV0lGSV9JRl9DTURfR0xPQkFMX1RYX0tFWV9JRDsKLQl0eF9rZXlfaWQuaGRyLmJ1Zl9zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBpd21fdW1hY190eF9rZXlfaWQpIC0KLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IGl3bV91bWFjX3dpZmlfaWYpKTsKLQotCXR4X2tleV9pZC5rZXlfaWR4ID0ga2V5X2lkeDsKLQotCXJldHVybiBpd21fc2VuZF93aWZpX2lmX2NtZChpd20sICZ0eF9rZXlfaWQsIHNpemVvZih0eF9rZXlfaWQpLCAxKTsKLX0KLQogc3RhdGljIGludCBpd21fY2hlY2tfcHJvZmlsZShzdHJ1Y3QgaXdtX3ByaXYgKml3bSkKIHsKIAlpZiAoIWl3bS0+dW1hY19wcm9maWxlX2FjdGl2ZSkKQEAgLTU1NiwxMCArNTYwLDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpd21fc2V0X2tleShzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgYm9vbCByZW1vdmUsIGJvb2wgc2V0X3R4X2tleSwKLQkJc3RydWN0IGl3bV9rZXkgKmtleSkKK2ludCBpd21fc2V0X3R4X2tleShzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTgga2V5X2lkeCkKIHsKKwlzdHJ1Y3QgaXdtX3VtYWNfdHhfa2V5X2lkIHR4X2tleV9pZDsKIAlpbnQgcmV0OworCisJcmV0ID0gaXdtX2NoZWNrX3Byb2ZpbGUoaXdtKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFVNQUMgb25seSBhbGxvd3MgdG8gc2V0IGRlZmF1bHQga2V5IGZvciBXRVAgYW5kIGF1dGggdHlwZSBpcworCSAqIE5PVCA4MDIuMVggb3IgUlNOQS4gKi8KKwlpZiAoKGl3bS0+dW1hY19wcm9maWxlLT5zZWMudWNhc3RfY2lwaGVyICE9IFVNQUNfQ0lQSEVSX1RZUEVfV0VQXzQwICYmCisJICAgICBpd20tPnVtYWNfcHJvZmlsZS0+c2VjLnVjYXN0X2NpcGhlciAhPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF8xMDQpIHx8CisJICAgIGl3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlID09IFVNQUNfQVVUSF9UWVBFXzgwMjFYIHx8CisJICAgIGl3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlID09IFVNQUNfQVVUSF9UWVBFX1JTTkFfUFNLKQorCQlyZXR1cm4gMDsKKworCXR4X2tleV9pZC5oZHIub2lkID0gVU1BQ19XSUZJX0lGX0NNRF9HTE9CQUxfVFhfS0VZX0lEOworCXR4X2tleV9pZC5oZHIuYnVmX3NpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGl3bV91bWFjX3R4X2tleV9pZCkgLQorCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pZikpOworCisJdHhfa2V5X2lkLmtleV9pZHggPSBrZXlfaWR4OworCisJcmV0dXJuIGl3bV9zZW5kX3dpZmlfaWZfY21kKGl3bSwgJnR4X2tleV9pZCwgc2l6ZW9mKHR4X2tleV9pZCksIDEpOworfQorCitpbnQgaXdtX3NldF9rZXkoc3RydWN0IGl3bV9wcml2ICppd20sIGJvb2wgcmVtb3ZlLCBzdHJ1Y3QgaXdtX2tleSAqa2V5KQoreworCWludCByZXQgPSAwOwogCXU4IGNtZFs2NF0sICpzdGFfYWRkciwgKmtleV9kYXRhLCBrZXlfbGVuOwogCXM4IGtleV9pZHg7CiAJdTE2IGNtZF9zaXplID0gMDsKQEAgLTU2OSwxNSArNTk4LDYgQEAKIAlzdHJ1Y3QgaXdtX3VtYWNfa2V5X3RraXAgKnRraXAgPSAoc3RydWN0IGl3bV91bWFjX2tleV90a2lwICopY21kOwogCXN0cnVjdCBpd21fdW1hY19rZXlfY2NtcCAqY2NtcCA9IChzdHJ1Y3QgaXdtX3VtYWNfa2V5X2NjbXAgKiljbWQ7CiAKLQlpZiAoc2V0X3R4X2tleSkKLQkJaXdtLT5kZWZhdWx0X2tleSA9IGtleTsKLQotCS8qCi0JICogV2UgY2hlY2sgaWYgb3VyIGN1cnJlbnQgcHJvZmlsZSBpcyB2YWxpZC4KLQkgKiBJZiBub3QsIHdlIGRvbnQgcHVzaCB0aGUga2V5LCB3ZSBqdXN0IGNhY2hlIHRoZW0sCi0JICogc28gdGhhdCB3aXRoIHRoZSBuZXh0IHNpd3Nlc3NpZCBjYWxsLCB0aGUga2V5cwotCSAqIHdpbGwgYmUgYWN0dWFsbHkgcHVzaGVkLgotCSAqLwogCWlmICghcmVtb3ZlKSB7CiAJCXJldCA9IGl3bV9jaGVja19wcm9maWxlKGl3bSk7CiAJCWlmIChyZXQgPCAwKQpAQCAtNTkwLDggKzYxMCw5IEBACiAJa2V5X2lkeCA9IGtleS0+aGRyLmtleV9pZHg7CiAKIAlpZiAoIXJlbW92ZSkgewotCQlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJrZXlfaWR4OiVkIHNldCB0eCBrZXk6JWRcbiIsCi0JCQkgICAgIGtleV9pZHgsIHNldF90eF9rZXkpOworCQl1OCBhdXRoX3R5cGUgPSBpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmF1dGhfdHlwZTsKKworCQlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJrZXlfaWR4OiVkXG4iLCBrZXlfaWR4KTsKIAkJSVdNX0RCR19XRVhUKGl3bSwgREJHLCAia2V5X2xlbjolZFxuIiwga2V5X2xlbik7CiAJCUlXTV9EQkdfV0VYVChpd20sIERCRywgIk1BQzolcE0sIGlkeDolZCwgbXVsdGljYXN0OiVkXG4iLAogCQkgICAgICAga2V5X2hkci0+bWFjLCBrZXlfaGRyLT5rZXlfaWR4LCBrZXlfaGRyLT5tdWx0aWNhc3QpOwpAQCAtNjAzLDggKzYyNCw4IEBACiAJCQkgICAgIGl3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlLAogCQkJICAgICBpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzKTsKIAotCQlzd2l0Y2ggKGtleS0+YWxnKSB7Ci0JCWNhc2UgVU1BQ19DSVBIRVJfVFlQRV9XRVBfNDA6CisJCXN3aXRjaCAoa2V5LT5jaXBoZXIpIHsKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKIAkJCXdlcDQwLT5oZHIub2lkID0gVU1BQ19XSUZJX0lGX0NNRF9BRERfV0VQNDBfS0VZOwogCQkJd2VwNDAtPmhkci5idWZfc2l6ZSA9CiAJCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBpd21fdW1hY19rZXlfd2VwNDApIC0KQEAgLTYxMywxMiArNjM0LDE0IEBACiAJCQltZW1jcHkoJndlcDQwLT5rZXlfaGRyLCBrZXlfaGRyLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdtX3VtYWNfa2V5X2hkcikpOwogCQkJbWVtY3B5KHdlcDQwLT5rZXksIGtleV9kYXRhLCBrZXlfbGVuKTsKLQkJCXdlcDQwLT5zdGF0aWNfa2V5ID0gMTsKKwkJCXdlcDQwLT5zdGF0aWNfa2V5ID0KKwkJCQkhISgoYXV0aF90eXBlICE9IFVNQUNfQVVUSF9UWVBFXzgwMjFYKSAmJgorCQkJCSAgIChhdXRoX3R5cGUgIT0gVU1BQ19BVVRIX1RZUEVfUlNOQV9QU0spKTsKIAogCQkJY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bV91bWFjX2tleV93ZXA0MCk7CiAJCQlicmVhazsKIAotCQljYXNlIFVNQUNfQ0lQSEVSX1RZUEVfV0VQXzEwNDoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CiAJCQl3ZXAxMDQtPmhkci5vaWQgPSBVTUFDX1dJRklfSUZfQ01EX0FERF9XRVAxMDRfS0VZOwogCQkJd2VwMTA0LT5oZHIuYnVmX3NpemUgPQogCQkJCWNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaXdtX3VtYWNfa2V5X3dlcDEwNCkgLQpAQCAtNjI3LDEyICs2NTAsMTQgQEAKIAkJCW1lbWNweSgmd2VwMTA0LT5rZXlfaGRyLCBrZXlfaGRyLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdtX3VtYWNfa2V5X2hkcikpOwogCQkJbWVtY3B5KHdlcDEwNC0+a2V5LCBrZXlfZGF0YSwga2V5X2xlbik7Ci0JCQl3ZXAxMDQtPnN0YXRpY19rZXkgPSAxOworCQkJd2VwMTA0LT5zdGF0aWNfa2V5ID0KKwkJCQkhISgoYXV0aF90eXBlICE9IFVNQUNfQVVUSF9UWVBFXzgwMjFYKSAmJgorCQkJCSAgIChhdXRoX3R5cGUgIT0gVU1BQ19BVVRIX1RZUEVfUlNOQV9QU0spKTsKIAogCQkJY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bV91bWFjX2tleV93ZXAxMDQpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBVTUFDX0NJUEhFUl9UWVBFX0NDTVA6CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKIAkJCWtleV9oZHItPmtleV9pZHgrKzsKIAkJCWNjbXAtPmhkci5vaWQgPSBVTUFDX1dJRklfSUZfQ01EX0FERF9DQ01QX0tFWTsKIAkJCWNjbXAtPmhkci5idWZfc2l6ZSA9CkBAIC02NDQsMTMgKzY2OSwxMyBAQAogCiAJCQltZW1jcHkoY2NtcC0+a2V5LCBrZXlfZGF0YSwga2V5X2xlbik7CiAKLQkJCWlmIChrZXktPmZsYWdzICYgSVdfRU5DT0RFX0VYVF9SWF9TRVFfVkFMSUQpCi0JCQkJbWVtY3B5KGNjbXAtPml2X2NvdW50LCBrZXktPnJ4X3NlcSwgNik7CisJCQlpZiAoa2V5LT5zZXFfbGVuKQorCQkJCW1lbWNweShjY21wLT5pdl9jb3VudCwga2V5LT5zZXEsIGtleS0+c2VxX2xlbik7CiAKIAkJCWNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd21fdW1hY19rZXlfY2NtcCk7CiAJCQlicmVhazsKIAotCQljYXNlIFVNQUNfQ0lQSEVSX1RZUEVfVEtJUDoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgogCQkJa2V5X2hkci0+a2V5X2lkeCsrOwogCQkJdGtpcC0+aGRyLm9pZCA9IFVNQUNfV0lGSV9JRl9DTURfQUREX1RLSVBfS0VZOwogCQkJdGtpcC0+aGRyLmJ1Zl9zaXplID0KQEAgLTY2Nyw4ICs2OTIsOCBAQAogCQkJICAgICAgIGtleV9kYXRhICsgSVdNX1RLSVBfS0VZX1NJWkUgKyBJV01fVEtJUF9NSUNfU0laRSwKIAkJCSAgICAgICBJV01fVEtJUF9NSUNfU0laRSk7CiAKLQkJCWlmIChrZXktPmZsYWdzICYgSVdfRU5DT0RFX0VYVF9SWF9TRVFfVkFMSUQpCi0JCQkJbWVtY3B5KGNjbXAtPml2X2NvdW50LCBrZXktPnJ4X3NlcSwgNik7CisJCQlpZiAoa2V5LT5zZXFfbGVuKQorCQkJCW1lbWNweShjY21wLT5pdl9jb3VudCwga2V5LT5zZXEsIGtleS0+c2VxX2xlbik7CiAKIAkJCWNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd21fdW1hY19rZXlfdGtpcCk7CiAJCQlicmVhazsKQEAgLTY3Nyw4ICs3MDIsOCBAQAogCQkJcmV0dXJuIC1FTk9UU1VQUDsKIAkJfQogCi0JCWlmICgoa2V5LT5hbGcgPT0gVU1BQ19DSVBIRVJfVFlQRV9DQ01QKSB8fAotCQkgICAgKGtleS0+YWxnID09IFVNQUNfQ0lQSEVSX1RZUEVfVEtJUCkpCisJCWlmICgoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkgfHwKKwkJICAgIChrZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QKSkKIAkJCS8qCiAJCQkgKiBVR0xZX1VHTFlfVUdMWQogCQkJICogQ29waWVkIEhBQ0sgZnJvbSB0aGUgTVdHIGRyaXZlci4KQEAgLTY4OSwyMyArNzE0LDExIEBACiAJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodXNlY3NfdG9famlmZmllcygzMDApKTsKIAogCQlyZXQgPSAgaXdtX3NlbmRfd2lmaV9pZl9jbWQoaXdtLCBjbWQsIGNtZF9zaXplLCAxKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycjsKLQotCQkvKgotCQkgKiBXZSBuZWVkIGEgZGVmYXVsdCBrZXkgb25seSBpZiBpdCBpcyBzZXQgYW5kCi0JCSAqIGlmIHdlJ3JlIGRvaW5nIFdFUC4KLQkJICovCi0JCWlmIChpd20tPmRlZmF1bHRfa2V5ID09IGtleSAmJgotCQkJKChrZXktPmFsZyA9PSBVTUFDX0NJUEhFUl9UWVBFX1dFUF80MCkgfHwKLQkJCSAoa2V5LT5hbGcgPT0gVU1BQ19DSVBIRVJfVFlQRV9XRVBfMTA0KSkpIHsKLQkJCXJldCA9IGl3bV9zZXRfdHhfa2V5KGl3bSwga2V5X2lkeCk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlnb3RvIGVycjsKLQkJfQogCX0gZWxzZSB7CiAJCXN0cnVjdCBpd21fdW1hY19rZXlfcmVtb3ZlIGtleV9yZW1vdmU7CiAKKwkJSVdNX0RCR19XRVhUKGl3bSwgRVJSLCAiUmVtb3Zpbmcga2V5X2lkeDolZFxuIiwga2V5X2lkeCk7CisKIAkJa2V5X3JlbW92ZS5oZHIub2lkID0gVU1BQ19XSUZJX0lGX0NNRF9SRU1PVkVfS0VZOwogCQlrZXlfcmVtb3ZlLmhkci5idWZfc2l6ZSA9CiAJCQljcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGl3bV91bWFjX2tleV9yZW1vdmUpIC0KQEAgLTcxNiwyMyArNzI5LDE5IEBACiAJCXJldCA9ICBpd21fc2VuZF93aWZpX2lmX2NtZChpd20sICZrZXlfcmVtb3ZlLAogCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpd21fdW1hY19rZXlfcmVtb3ZlKSwKIAkJCQkJICAgIDEpOwotCQlpZiAocmV0IDwgMCkKKwkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJaXdtLT5rZXlzW2tleV9pZHhdLmluX3VzZSA9IDA7CisJCWl3bS0+a2V5c1trZXlfaWR4XS5rZXlfbGVuID0gMDsKIAl9CiAKLQlyZXR1cm4gMDsKLQotIGVycjoKLQlrZnJlZShrZXkpOwogCXJldHVybiByZXQ7CiB9CiAKIAogaW50IGl3bV9zZW5kX21sbWVfcHJvZmlsZShzdHJ1Y3QgaXdtX3ByaXYgKml3bSkKIHsKLQlpbnQgcmV0LCBpOworCWludCByZXQ7CiAJc3RydWN0IGl3bV91bWFjX3Byb2ZpbGUgcHJvZmlsZTsKIAogCW1lbWNweSgmcHJvZmlsZSwgaXdtLT51bWFjX3Byb2ZpbGUsIHNpemVvZihwcm9maWxlKSk7CkBAIC03NDIsNDUgKzc1MSwxOSBAQAogCQkJCQkgICBzaXplb2Yoc3RydWN0IGl3bV91bWFjX3dpZmlfaWYpKTsKIAogCXJldCA9IGl3bV9zZW5kX3dpZmlfaWZfY21kKGl3bSwgJnByb2ZpbGUsIHNpemVvZihwcm9maWxlKSwgMSk7Ci0JaWYgKHJldCA8IDApIHsKKwlpZiAocmV0KSB7CiAJCUlXTV9FUlIoaXdtLCAiU2VuZCBwcm9maWxlIGNvbW1hbmQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBXYWl0IGZvciB0aGUgcHJvZmlsZSB0byBiZSBhY3RpdmUgKi8KLQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChpd20tPm1sbWVfcXVldWUsCi0JCQkJCSAgICAgICBpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUgPT0gMSwKLQkJCQkJICAgICAgIDMgKiBIWik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQotCWZvciAoaSA9IDA7IGkgPCBJV01fTlVNX0tFWVM7IGkrKykKLQkJaWYgKGl3bS0+a2V5c1tpXS5pbl91c2UpIHsKLQkJCWludCBkZWZhdWx0X2tleSA9IDA7Ci0JCQlzdHJ1Y3QgaXdtX2tleSAqa2V5ID0gJml3bS0+a2V5c1tpXTsKLQotCQkJaWYgKGtleSA9PSBpd20tPmRlZmF1bHRfa2V5KQotCQkJCWRlZmF1bHRfa2V5ID0gMTsKLQotCQkJLyogV2FpdCBmb3IgdGhlIHByb2ZpbGUgYmVmb3JlIHNlbmRpbmcgdGhlIGtleXMgKi8KLQkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGl3bS0+bWxtZV9xdWV1ZSwKLQkJCSAgICAgKHRlc3RfYml0KElXTV9TVEFUVVNfQVNTT0NJQVRJTkcsICZpd20tPnN0YXR1cykgfHwKLQkJCSAgICAgIHRlc3RfYml0KElXTV9TVEFUVVNfQVNTT0NJQVRFRCwgJml3bS0+c3RhdHVzKSksCi0JCQkJCQkJIDMgKiBIWik7Ci0KLQkJCXJldCA9IGl3bV9zZXRfa2V5KGl3bSwgMCwgZGVmYXVsdF9rZXksIGtleSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gcmV0OwotCQl9Ci0KKwlzZXRfYml0KElXTV9TVEFUVVNfU01FX0NPTk5FQ1RJTkcsICZpd20tPnN0YXR1cyk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBpd21faW52YWxpZGF0ZV9tbG1lX3Byb2ZpbGUoc3RydWN0IGl3bV9wcml2ICppd20pCiB7Ci0JaW50IHJldDsKIAlzdHJ1Y3QgaXdtX3VtYWNfaW52YWxpZGF0ZV9wcm9maWxlIGludmFsaWQ7CisJaW50IHJldDsKIAogCWludmFsaWQuaGRyLm9pZCA9IFVNQUNfV0lGSV9JRl9DTURfSU5WQUxJREFURV9QUk9GSUxFOwogCWludmFsaWQuaGRyLmJ1Zl9zaXplID0KQEAgLTc5MCwxNiArNzczLDEzIEBACiAJaW52YWxpZC5yZWFzb24gPSBXTEFOX1JFQVNPTl9VTlNQRUNJRklFRDsKIAogCXJldCA9IGl3bV9zZW5kX3dpZmlfaWZfY21kKGl3bSwgJmludmFsaWQsIHNpemVvZihpbnZhbGlkKSwgMSk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGl3bS0+bWxtZV9xdWV1ZSwKLQkJCQkgKGl3bS0+dW1hY19wcm9maWxlX2FjdGl2ZSA9PSAwKSwKLQkJCQkJICAgICAgIDIgKiBIWik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiAtRUJVU1k7CisJCQkJKGl3bS0+dW1hY19wcm9maWxlX2FjdGl2ZSA9PSAwKSwgMiAqIEhaKTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQgPyAwIDogLUVCVVNZOwogfQogCiBpbnQgaXdtX3NlbmRfdW1hY19zdGF0c19yZXEoc3RydWN0IGl3bV9wcml2ICppd20sIHUzMiBmbGFncykKQEAgLTg4Miw3ICs4NjIsNyBAQAogCX0KIAogCXJldCA9IGl3bV9zZW5kX3dpZmlfaWZfY21kKGl3bSwgJnJlcSwgc2l6ZW9mKHJlcSksIDApOwotCWlmIChyZXQgPCAwKSB7CisJaWYgKHJldCkgewogCQlJV01fRVJSKGl3bSwgIkNvdWxkbid0IHNlbmQgc2NhbiByZXF1ZXN0XG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5oCmluZGV4IDM2YjEzYTEuLmUyNGQ1YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5oCkBAIC0xMDYsOCArMTA2LDcgQEAKIAlDRkdfVExDX1NQQVRJQUxfU1RSRUFNX1NVUFBPUlRFRCwKIAlDRkdfVExDX1JFVFJZX1BFUl9SQVRFLAogCUNGR19UTENfUkVUUllfUEVSX0hUX1JBVEUsCi0JQ0ZHX1RMQ19GSVhFRF9SQVRFLAotCUNGR19UTENfRklYRURfUkFURV9GTEFHUywKKwlDRkdfVExDX0ZJWEVEX01DUywKIAlDRkdfVExDX0NPTlRST0xfRkxBR1MsCiAJQ0ZHX1RMQ19TUl9NSU5fRkFJTCwKIAlDRkdfVExDX1NSX01JTl9QQVNTLApAQCAtMjMyLDYgKzIzMSw3IEBACiAvKiBXaXJlbGVzcyBtb2RlICovCiAjZGVmaW5lIFdJUkVMRVNTX01PREVfMTFBICAweDEKICNkZWZpbmUgV0lSRUxFU1NfTU9ERV8xMUcgIDB4MgorI2RlZmluZSBXSVJFTEVTU19NT0RFXzExTiAgMHg0CiAKICNkZWZpbmUgVU1BQ19QUk9GSUxFX0VYX0lFX1JFUVVJUkVECTB4MQogI2RlZmluZSBVTUFDX1BST0ZJTEVfUU9TX0FMTE9XRUQJMHgyCkBAIC00MDYsOCArNDA2LDcgQEAKIGludCBpd21faW52YWxpZGF0ZV9tbG1lX3Byb2ZpbGUoc3RydWN0IGl3bV9wcml2ICppd20pOwogaW50IGl3bV9zZW5kX3BhY2tldChzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBvb2xfaWQpOwogaW50IGl3bV9zZXRfdHhfa2V5KHN0cnVjdCBpd21fcHJpdiAqaXdtLCB1OCBrZXlfaWR4KTsKLWludCBpd21fc2V0X2tleShzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgYm9vbCByZW1vdmUsIGJvb2wgc2V0X3R4X2tleSwKLQkJc3RydWN0IGl3bV9rZXkgKmtleSk7CitpbnQgaXdtX3NldF9rZXkoc3RydWN0IGl3bV9wcml2ICppd20sIGJvb2wgcmVtb3ZlLCBzdHJ1Y3QgaXdtX2tleSAqa2V5KTsKIGludCBpd21fc2VuZF91bWFjX3N0YXRzX3JlcShzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTMyIGZsYWdzKTsKIGludCBpd21fc2VuZF91bWFjX2NoYW5uZWxfbGlzdChzdHJ1Y3QgaXdtX3ByaXYgKml3bSk7CiBpbnQgaXdtX3NjYW5fc3NpZHMoc3RydWN0IGl3bV9wcml2ICppd20sIHN0cnVjdCBjZmc4MDIxMV9zc2lkICpzc2lkcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2RlYnVnLmgKaW5kZXggOGZiYjQyZC4uZTM1YzliNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2RlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2RlYnVnLmgKQEAgLTEwOCw2ICsxMDgsOCBAQAogCXN0cnVjdCBkZW50cnkgKnR4cV9kZW50cnk7CiAJc3RydWN0IGRlbnRyeSAqdHhfY3JlZGl0X2RlbnRyeTsKIAlzdHJ1Y3QgZGVudHJ5ICpyeF90aWNrZXRfZGVudHJ5OworCisJc3RydWN0IGRlbnRyeSAqZndfZXJyX2RlbnRyeTsKIH07CiAKICNpZmRlZiBDT05GSUdfSVdNX0RFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2RlYnVnZnMuYwppbmRleCAwZmE3YjkxLi4xNDY1Mzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9kZWJ1Z2ZzLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAkJCWl3bV9kZWJ1Z2ZzX3UzMl9yZWFkLCBpd21fZGVidWdmc19kYmdfbW9kdWxlc193cml0ZSwKIAkJCSIlbGx1XG4iKTsKIAotc3RhdGljIGludCBpd21fdHhyeF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBpd21fZ2VuZXJpY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CiAJcmV0dXJuIDA7CkBAIC0yODksMjUgKzI4OSwxMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBpd21fZGVidWdmc19md19lcnJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkgICAgICAgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisKKwlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls1MTJdOworCWludCBidWZfbGVuID0gNTEyOworCXNpemVfdCBsZW4gPSAwOworCisJaWYgKCpwcG9zICE9IDApCisJCXJldHVybiAwOworCWlmIChjb3VudCA8IHNpemVvZihidWYpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmICghaXdtLT5sYXN0X2Z3X2VycikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoaXdtLT5sYXN0X2Z3X2Vyci0+bGluZV9udW0gPT0gMCkKKwkJZ290byBvdXQ7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLCAiJWNNQUMgRlcgRVJST1I6XG4iLAorCSAgICAgKGxlMzJfdG9fY3B1KGl3bS0+bGFzdF9md19lcnItPmNhdGVnb3J5KSA9PSBVTUFDX1NZU19FUlJfQ0FUX0xNQUMpCisJCQk/ICdMJyA6ICdVJyk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwKKwkJCSJcdENhdGVnb3J5OiAgICAlZFxuIiwKKwkJCWxlMzJfdG9fY3B1KGl3bS0+bGFzdF9md19lcnItPmNhdGVnb3J5KSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0U3RhdHVzOiAgICAgIDB4JXhcbiIsCisJCQlsZTMyX3RvX2NwdShpd20tPmxhc3RfZndfZXJyLT5zdGF0dXMpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sCisJCQkiXHRQQzogICAgICAgICAgMHgleFxuIiwKKwkJCWxlMzJfdG9fY3B1KGl3bS0+bGFzdF9md19lcnItPnBjKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0YmxpbmsxOiAgICAgICVkXG4iLAorCQkJbGUzMl90b19jcHUoaXdtLT5sYXN0X2Z3X2Vyci0+YmxpbmsxKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0YmxpbmsyOiAgICAgICVkXG4iLAorCQkJbGUzMl90b19jcHUoaXdtLT5sYXN0X2Z3X2Vyci0+YmxpbmsyKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0aWxpbmsxOiAgICAgICVkXG4iLAorCQkJbGUzMl90b19jcHUoaXdtLT5sYXN0X2Z3X2Vyci0+aWxpbmsxKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0aWxpbmsyOiAgICAgICVkXG4iLAorCQkJbGUzMl90b19jcHUoaXdtLT5sYXN0X2Z3X2Vyci0+aWxpbmsyKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0RGF0YTE6ICAgICAgIDB4JXhcbiIsCisJCQlsZTMyX3RvX2NwdShpd20tPmxhc3RfZndfZXJyLT5kYXRhMSkpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwKKwkJCSJcdERhdGEyOiAgICAgICAweCV4XG4iLAorCQkJbGUzMl90b19jcHUoaXdtLT5sYXN0X2Z3X2Vyci0+ZGF0YTIpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sCisJCQkiXHRMaW5lIG51bWJlcjogJWRcbiIsCisJCQlsZTMyX3RvX2NwdShpd20tPmxhc3RfZndfZXJyLT5saW5lX251bSkpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwKKwkJCSJcdFVNQUMgc3RhdHVzOiAweCV4XG4iLAorCQkJbGUzMl90b19jcHUoaXdtLT5sYXN0X2Z3X2Vyci0+dW1hY19zdGF0dXMpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sCisJCQkiXHRMTUFDIHN0YXR1czogMHgleFxuIiwKKwkJCWxlMzJfdG9fY3B1KGl3bS0+bGFzdF9md19lcnItPmxtYWNfc3RhdHVzKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0U0RJTyBzdGF0dXM6IDB4JXhcbiIsCisJCQlsZTMyX3RvX2NwdShpd20tPmxhc3RfZndfZXJyLT5zZGlvX3N0YXR1cykpOworCitvdXQ6CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmZmVyLCBsZW4sIHBwb3MsIGJ1ZiwgYnVmX2xlbik7Cit9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGl3bV9kZWJ1Z2ZzX3R4cV9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5vcGVuID0JCWl3bV90eHJ4X29wZW4sCisJLm9wZW4gPQkJaXdtX2dlbmVyaWNfb3BlbiwKIAkucmVhZCA9CQlpd21fZGVidWdmc190eHFfcmVhZCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGl3bV9kZWJ1Z2ZzX3R4X2NyZWRpdF9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5vcGVuID0JCWl3bV90eHJ4X29wZW4sCisJLm9wZW4gPQkJaXdtX2dlbmVyaWNfb3BlbiwKIAkucmVhZCA9CQlpd21fZGVidWdmc190eF9jcmVkaXRfcmVhZCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGl3bV9kZWJ1Z2ZzX3J4X3RpY2tldF9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5vcGVuID0JCWl3bV90eHJ4X29wZW4sCisJLm9wZW4gPQkJaXdtX2dlbmVyaWNfb3BlbiwKIAkucmVhZCA9CQlpd21fZGVidWdmc19yeF90aWNrZXRfcmVhZCwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGl3bV9kZWJ1Z2ZzX2Z3X2Vycl9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5vcGVuID0JCWl3bV9nZW5lcmljX29wZW4sCisJLnJlYWQgPQkJaXdtX2RlYnVnZnNfZndfZXJyX3JlYWQsCit9OworCiBpbnQgaXdtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgaXdtX3ByaXYgKml3bSkKIHsKIAlpbnQgaSwgcmVzdWx0OwpAQCAtNDIzLDYgKzUwOSwxNiBAQAogCQlnb3RvIGVycm9yOwogCX0KIAorCWl3bS0+ZGJnLmZ3X2Vycl9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJsYXN0X2Z3X2VyciIsIDAyMDAsCisJCQkJCQkgICAgIGl3bS0+ZGJnLmRiZ2RpciwgaXdtLAorCQkJCQkJICAgICAmaXdtX2RlYnVnZnNfZndfZXJyX2ZvcHMpOworCXJlc3VsdCA9IFBUUl9FUlIoaXdtLT5kYmcuZndfZXJyX2RlbnRyeSk7CisJaWYgKElTX0VSUihpd20tPmRiZy5md19lcnJfZGVudHJ5KSAmJiAocmVzdWx0ICE9IC1FTk9ERVYpKSB7CisJCUlXTV9FUlIoaXdtLCAiQ291bGRuJ3QgY3JlYXRlIGxhc3QgRlcgZXJyOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwogCXJldHVybiAwOwogCiAgZXJyb3I6CkBAIC00NDEsNiArNTM3LDcgQEAKIAlkZWJ1Z2ZzX3JlbW92ZShpd20tPmRiZy50eHFfZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShpd20tPmRiZy50eF9jcmVkaXRfZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShpd20tPmRiZy5yeF90aWNrZXRfZGVudHJ5KTsKKwlkZWJ1Z2ZzX3JlbW92ZShpd20tPmRiZy5md19lcnJfZGVudHJ5KTsKIAlpZiAoaXdtLT5idXNfb3BzLT5kZWJ1Z2ZzX2V4aXQpCiAJCWl3bS0+YnVzX29wcy0+ZGVidWdmc19leGl0KGl3bSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9lZXByb20uYwppbmRleCAwZjM0Yjg0Li4zNjU5MTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2VlcHJvbS5jCkBAIC0xNTYsMTAgKzE1Niw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yIChpID0gSVdNX0VFUFJPTV9GSVJTVDsgaSA8IElXTV9FRVBST01fTEFTVDsgaSsrKSB7Ci0jaWZkZWYgQ09ORklHX0lXTV9CMF9IV19TVVBQT1JUCi0JCWlmIChpd20tPmNvbmYuaHdfYjAgJiYgKGkgPj0gSVdNX0VFUFJPTV9JTkRJUkVDVF9PRkZTRVQpKQotCQkJYnJlYWs7Ci0jZW5kaWYKIAkJcmV0ID0gaXdtX2VlcHJvbV9yZWFkKGl3bSwgaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlJV01fRVJSKGl3bSwgIkNvdWxkbid0IHJlYWQgZWVwcm9tIGVudHJ5ICMlZDogJXNcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9mdy5jCmluZGV4IGVjMWExNWEuLjZiMGJjYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9mdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9mdy5jCkBAIC0yNjEsNiArMjYxLDMzIEBACiAJCQljcHVfdG9fbGUzMihVTUFDX1JTVF9DVFJMX0ZMR19MQVJDX0NMS19FTiksIDApOwogfQogCitzdGF0aWMgaW50IGl3bV9pbml0X2NhbGliKHN0cnVjdCBpd21fcHJpdiAqaXdtLCB1bnNpZ25lZCBsb25nIGNmZ19iaXRtYXAsCisJCQkgIHVuc2lnbmVkIGxvbmcgZXhwZWN0ZWRfYml0bWFwLCB1OCByeF9pcV9jbWQpCit7CisJLyogUmVhZCBSWCBJUSBjYWxpYnJhdGlvbiByZXN1bHQgZnJvbSBFRVBST00gKi8KKwlpZiAodGVzdF9iaXQocnhfaXFfY21kLCAmY2ZnX2JpdG1hcCkpIHsKKwkJaXdtX3N0b3JlX3J4aXFfY2FsaWJfcmVzdWx0KGl3bSk7CisJCXNldF9iaXQoUEhZX0NBTElCUkFURV9SWF9JUV9DTUQsICZpd20tPmNhbGliX2RvbmVfbWFwKTsKKwl9CisKKwlpd21fc2VuZF9wcmlvX3RhYmxlKGl3bSk7CisJaXdtX3NlbmRfaW5pdF9jYWxpYl9jZmcoaXdtLCBjZmdfYml0bWFwKTsKKworCXdoaWxlIChpd20tPmNhbGliX2RvbmVfbWFwICE9IGV4cGVjdGVkX2JpdG1hcCkgeworCQlpZiAoaXdtX25vdGlmX2hhbmRsZShpd20sIENBTElCUkFUSU9OX1JFU19OT1RJRklDQVRJT04sCisJCQkJICAgICBJV01fU1JDX0xNQUMsIFdBSVRfTk9USUZfVElNRU9VVCkpIHsKKwkJCUlXTV9EQkdfRlcoaXdtLCBEQkcsICJJbml0aWFsIGNhbGlicmF0aW9uIHRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKworCQlJV01fREJHX0ZXKGl3bSwgREJHLCAiR290IGNhbGlicmF0aW9uIHJlc3VsdC4gY2FsaWJfZG9uZV9tYXA6ICIKKwkJCSAgICIweCVseCwgZXhwZWN0ZWQgY2FsaWJyYXRpb25zOiAweCVseFxuIiwKKwkJCSAgIGl3bS0+Y2FsaWJfZG9uZV9tYXAsIGV4cGVjdGVkX2JpdG1hcCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBXZSBjdXJyZW50bHkgaGF2ZSB0byBsb2FkIDMgRldzOgogICogMSkgVGhlIFVNQUMgKFVwcGVyIE1BQykuCkBAIC0yNzUsNiArMzAyLDggQEAKICAqLwogaW50IGl3bV9sb2FkX2Z3KHN0cnVjdCBpd21fcHJpdiAqaXdtKQogeworCXVuc2lnbmVkIGxvbmcgaW5pdF9jYWxpYl9tYXAsIHBlcmlvZGljX2NhbGliX21hcDsKKwl1bnNpZ25lZCBsb25nIGV4cGVjdGVkX2NhbGliX21hcDsKIAlpbnQgcmV0OwogCiAJLyogV2UgZmlyc3Qgc3RhcnQgZG93bmxvYWRpbmcgdGhlIFVNQUMgKi8KQEAgLTMxNSwzMiArMzQ0LDIyIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0jaWZkZWYgQ09ORklHX0lXTV9CMF9IV19TVVBQT1JUCi0JaWYgKGl3bS0+Y29uZi5od19iMCkgewotCQljbGVhcl9iaXQoUEhZX0NBTElCUkFURV9SWF9JUV9DTUQsICZpd20tPmNvbmYuaW5pdF9jYWxpYl9tYXApOwotCQljbGVhcl9iaXQoUEhZX0NBTElCUkFURV9SWF9JUV9DTUQsCi0JCQkgICZpd20tPmNvbmYucGVyaW9kaWNfY2FsaWJfbWFwKTsKLQl9Ci0jZW5kaWYKLQkvKiBSZWFkIFJYIElRIGNhbGlicmF0aW9uIHJlc3VsdCBmcm9tIEVFUFJPTSAqLwotCWlmICh0ZXN0X2JpdChQSFlfQ0FMSUJSQVRFX1JYX0lRX0NNRCwgJml3bS0+Y29uZi5pbml0X2NhbGliX21hcCkpIHsKLQkJaXdtX3N0b3JlX3J4aXFfY2FsaWJfcmVzdWx0KGl3bSk7Ci0JCXNldF9iaXQoUEhZX0NBTElCUkFURV9SWF9JUV9DTUQsICZpd20tPmNhbGliX2RvbmVfbWFwKTsKLQl9CisJaW5pdF9jYWxpYl9tYXAgPSBpd20tPmNvbmYuY2FsaWJfbWFwICYgSVdNX0NBTElCX01BUF9JTklUX01TSzsKKwlleHBlY3RlZF9jYWxpYl9tYXAgPSBpd20tPmNvbmYuZXhwZWN0ZWRfY2FsaWJfbWFwICYKKwkJSVdNX0NBTElCX01BUF9JTklUX01TSzsKKwlwZXJpb2RpY19jYWxpYl9tYXAgPSBJV01fQ0FMSUJfTUFQX1BFUl9MTUFDKGl3bS0+Y29uZi5jYWxpYl9tYXApOwogCi0JaXdtX3NlbmRfcHJpb190YWJsZShpd20pOwotCWl3bV9zZW5kX2luaXRfY2FsaWJfY2ZnKGl3bSwgaXdtLT5jb25mLmluaXRfY2FsaWJfbWFwKTsKLQotCXdoaWxlIChpd20tPmNhbGliX2RvbmVfbWFwICE9IGl3bS0+Y29uZi5pbml0X2NhbGliX21hcCkgewotCQlyZXQgPSBpd21fbm90aWZfaGFuZGxlKGl3bSwgQ0FMSUJSQVRJT05fUkVTX05PVElGSUNBVElPTiwKLQkJCQkgICAgICAgSVdNX1NSQ19MTUFDLCBXQUlUX05PVElGX1RJTUVPVVQpOwotCQlpZiAocmV0KSB7Ci0JCQlJV01fRVJSKGl3bSwgIldhaXQgZm9yIGNhbGlicmF0aW9uIHJlc3VsdCB0aW1lb3V0XG4iKTsKKwlyZXQgPSBpd21faW5pdF9jYWxpYihpd20sIGluaXRfY2FsaWJfbWFwLCBleHBlY3RlZF9jYWxpYl9tYXAsCisJCQkgICAgIENBTElCX0NGR19SWF9JUV9JRFgpOworCWlmIChyZXQgPCAwKSB7CisJCS8qIExldCdzIHRyeSB0aGUgb2xkIHdheSAqLworCQlyZXQgPSBpd21faW5pdF9jYWxpYihpd20sIGV4cGVjdGVkX2NhbGliX21hcCwKKwkJCQkgICAgIGV4cGVjdGVkX2NhbGliX21hcCwKKwkJCQkgICAgIFBIWV9DQUxJQlJBVEVfUlhfSVFfQ01EKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCUlXTV9FUlIoaXdtLCAiQ2FsaWJyYXRpb24gcmVzdWx0IHRpbWVvdXRcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJSVdNX0RCR19GVyhpd20sIERCRywgIkdvdCBjYWxpYnJhdGlvbiByZXN1bHQuIGNhbGliX2RvbmVfbWFwOiAiCi0JCQkgICAiMHglbHgsIHJlcXVlc3RlZCBjYWxpYnJhdGlvbnM6IDB4JWx4XG4iLAotCQkJICAgaXdtLT5jYWxpYl9kb25lX21hcCwgaXdtLT5jb25mLmluaXRfY2FsaWJfbWFwKTsKIAl9CiAKIAkvKiBIYW5kbGUgTE1BQyBDQUxJQlJBVElPTl9DT01QTEVURSBub3RpZmljYXRpb24gKi8KQEAgLTM3OCw3ICszOTcsNyBAQAogCiAJaXdtX3NlbmRfcHJpb190YWJsZShpd20pOwogCWl3bV9zZW5kX2NhbGliX3Jlc3VsdHMoaXdtKTsKLQlpd21fc2VuZF9wZXJpb2RpY19jYWxpYl9jZmcoaXdtLCBpd20tPmNvbmYucGVyaW9kaWNfY2FsaWJfbWFwKTsKKwlpd21fc2VuZF9wZXJpb2RpY19jYWxpYl9jZmcoaXdtLCBwZXJpb2RpY19jYWxpYl9tYXApOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9oYWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9oYWwuYwppbmRleCBlZTEyN2ZlNC4uYzQzMDQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2hhbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9oYWwuYwpAQCAtMTA1LDkgKzEwNSw5IEBACiAjaW5jbHVkZSAidW1hYy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKLXN0YXRpYyB2b2lkIGl3bV9ub253aWZpX2NtZF9pbml0KHN0cnVjdCBpd21fcHJpdiAqaXdtLAotCQkJCSBzdHJ1Y3QgaXdtX25vbndpZmlfY21kICpjbWQsCi0JCQkJIHN0cnVjdCBpd21fdWRtYV9ub253aWZpX2NtZCAqdWRtYV9jbWQpCitzdGF0aWMgaW50IGl3bV9ub253aWZpX2NtZF9pbml0KHN0cnVjdCBpd21fcHJpdiAqaXdtLAorCQkJCXN0cnVjdCBpd21fbm9ud2lmaV9jbWQgKmNtZCwKKwkJCQlzdHJ1Y3QgaXdtX3VkbWFfbm9ud2lmaV9jbWQgKnVkbWFfY21kKQogewogCUlOSVRfTElTVF9IRUFEKCZjbWQtPnBlbmRpbmcpOwogCkBAIC0xMTgsNyArMTE4LDcgQEAKIAljbWQtPnNlcV9udW0gPSBpd20tPm5vbndpZmlfc2VxX251bTsKIAl1ZG1hX2NtZC0+c2VxX251bSA9IGNwdV90b19sZTE2KGNtZC0+c2VxX251bSk7CiAKLQljbWQtPnNlcV9udW0gPSBpd20tPm5vbndpZmlfc2VxX251bSsrOworCWl3bS0+bm9ud2lmaV9zZXFfbnVtKys7CiAJaXdtLT5ub253aWZpX3NlcV9udW0gJT0gVU1BQ19OT05XSUZJX1NFUV9OVU1fTUFYOwogCiAJaWYgKHVkbWFfY21kLT5yZXNwKQpAQCAtMTMwLDYgKzEzMCw4IEBACiAJY21kLT5idWYubGVuID0gMDsKIAogCW1lbWNweSgmY21kLT51ZG1hX2NtZCwgdWRtYV9jbWQsIHNpemVvZigqdWRtYV9jbWQpKTsKKworCXJldHVybiBjbWQtPnNlcV9udW07CiB9CiAKIHUxNiBpd21fYWxsb2Nfd2lmaV9jbWRfc2VxKHN0cnVjdCBpd21fcHJpdiAqaXdtKQpAQCAtMzY5LDcgKzM3MSw3IEBACiAJCQkgICAgY29uc3Qgdm9pZCAqcGF5bG9hZCkKIHsKIAlzdHJ1Y3QgaXdtX25vbndpZmlfY21kICpjbWQ7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBzZXFfbnVtOwogCiAJY21kID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bV9ub253aWZpX2NtZCksIEdGUF9LRVJORUwpOwogCWlmICghY21kKSB7CkBAIC0zNzcsNyArMzc5LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaXdtX25vbndpZmlfY21kX2luaXQoaXdtLCBjbWQsIHVkbWFfY21kKTsKKwlzZXFfbnVtID0gaXdtX25vbndpZmlfY21kX2luaXQoaXdtLCBjbWQsIHVkbWFfY21kKTsKIAogCWlmIChjbWQtPnVkbWFfY21kLm9wY29kZSA9PSBVTUFDX0hESV9PVVRfT1BDT0RFX1dSSVRFIHx8CiAJICAgIGNtZC0+dWRtYV9jbWQub3Bjb2RlID09IFVNQUNfSERJX09VVF9PUENPREVfV1JJVEVfUEVSU0lTVEVOVCkgewpAQCAtMzkzLDcgKzM5NSw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gY21kLT5zZXFfbnVtOworCXJldHVybiBzZXFfbnVtOwogfQogCiBzdGF0aWMgdm9pZCBpd21fYnVpbGRfbG1hY19oZHIoc3RydWN0IGl3bV9wcml2ICppd20sIHN0cnVjdCBpd21fbG1hY19oZHIgKmhkciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9pd20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9pd20uaAppbmRleCA3N2MzMzlmLi4xYjAyYTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvaXdtLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2l3bS5oCkBAIC01Miw4ICs1Miw2IEBACiAjZGVmaW5lIElXTV9DT1BZUklHSFQgIkNvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uIgogI2RlZmluZSBJV01fQVVUSE9SICI8aWx3QGxpbnV4LmludGVsLmNvbT4iCiAKLSNkZWZpbmUgQ09ORklHX0lXTV9CMF9IV19TVVBQT1JUCTEKLQogI2RlZmluZSBJV01fU1JDX0xNQUMJVU1BQ19IRElfSU5fU09VUkNFX0ZIUlgKICNkZWZpbmUgSVdNX1NSQ19VRE1BCVVNQUNfSERJX0lOX1NPVVJDRV9VRE1BCiAjZGVmaW5lIElXTV9TUkNfVU1BQwlVTUFDX0hESV9JTl9TT1VSQ0VfRlcKQEAgLTY1LDggKzYzLDggQEAKIAogc3RydWN0IGl3bV9jb25mIHsKIAl1MzIgc2Rpb19pb3JfdGltZW91dDsKLQl1bnNpZ25lZCBsb25nIGluaXRfY2FsaWJfbWFwOwotCXVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfY2FsaWJfbWFwOworCXVuc2lnbmVkIGxvbmcgY2FsaWJfbWFwOworCXVuc2lnbmVkIGxvbmcgZXhwZWN0ZWRfY2FsaWJfbWFwOwogCWJvb2wgcmVzZXRfb25fZmF0YWxfZXJyOwogCWJvb2wgYXV0b19jb25uZWN0OwogCWJvb2wgd2ltYXhfbm90X3ByZXNlbnQ7CkBAIC04Nyw5ICs4NSw2IEBACiAJdTggaWJzc19jaGFubmVsOwogCiAJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwotI2lmZGVmIENPTkZJR19JV01fQjBfSFdfU1VQUE9SVAotCWJvb2wgaHdfYjA7Ci0jZW5kaWYKIH07CiAKIGVudW0gewpAQCAtMTYyLDEzICsxNTcsMTEgQEAKIAogc3RydWN0IGl3bV9rZXkgewogCXN0cnVjdCBpd21fdW1hY19rZXlfaGRyIGhkcjsKLQl1OCBpbl91c2U7Ci0JdTggYWxnOwotCXUzMiBmbGFnczsKLQl1OCB0eF9zZXFbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07Ci0JdTggcnhfc2VxW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOwotCXU4IGtleV9sZW47Ci0JdTgga2V5WzMyXTsKKwl1MzIgY2lwaGVyOworCXU4IGtleVtXTEFOX01BWF9LRVlfTEVOXTsKKwl1OCBzZXFbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07CisJaW50IGtleV9sZW47CisJaW50IHNlcV9sZW47CiB9OwogCiAjZGVmaW5lIElXTV9SWF9JRF9IQVNIICAweGZmCkBAIC0xODMsMTIgKzE3Niw5IEBACiAjZGVmaW5lIElXTV9TVEFUVVNfUkVBRFkJCTAKICNkZWZpbmUgSVdNX1NUQVRVU19TQ0FOTklORwkJMQogI2RlZmluZSBJV01fU1RBVFVTX1NDQU5fQUJPUlRJTkcJMgotI2RlZmluZSBJV01fU1RBVFVTX0FTU09DSUFUSU5HCQkzCisjZGVmaW5lIElXTV9TVEFUVVNfU01FX0NPTk5FQ1RJTkcJMwogI2RlZmluZSBJV01fU1RBVFVTX0FTU09DSUFURUQJCTQKLQotI2RlZmluZSBJV01fUkFESU9fUkZLSUxMX09GRgkJMAotI2RlZmluZSBJV01fUkFESU9fUkZLSUxMX0hXCQkxCi0jZGVmaW5lIElXTV9SQURJT19SRktJTExfU1cJCTIKKyNkZWZpbmUgSVdNX1NUQVRVU19SRVNFVFRJTkcJCTUKIAogc3RydWN0IGl3bV90eF9xdWV1ZSB7CiAJaW50IGlkOwpAQCAtMjIzLDcgKzIxMyw2IEBACiAJc3RydWN0IGl3bV9jb25mIGNvbmY7CiAKIAl1bnNpZ25lZCBsb25nIHN0YXR1czsKLQl1bnNpZ25lZCBsb25nIHJhZGlvOwogCiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX25vdGlmOwogCXdhaXRfcXVldWVfaGVhZF90IG5vdGlmX3F1ZXVlOwpAQCAtMjQyLDYgKzIzMSw3IEBACiAJdTggYnNzaWRbRVRIX0FMRU5dOwogCXU4IGNoYW5uZWw7CiAJdTE2IHJhdGU7CisJdTMyIHR4cG93ZXI7CiAKIAlzdHJ1Y3QgaXdtX3N0YV9pbmZvIHN0YV90YWJsZVtJV01fU1RBX1RBQkxFX05VTV07CiAJc3RydWN0IGxpc3RfaGVhZCBic3NfbGlzdDsKQEAgLTI3NiwxMiArMjY2LDE2IEBACiAJc3RydWN0IGl3bV90eF9xdWV1ZSB0eHFbSVdNX1RYX1FVRVVFU107CiAKIAlzdHJ1Y3QgaXdtX2tleSBrZXlzW0lXTV9OVU1fS0VZU107Ci0Jc3RydWN0IGl3bV9rZXkgKmRlZmF1bHRfa2V5OworCXM4IGRlZmF1bHRfa2V5OworCisJREVDTEFSRV9CSVRNQVAod2lmaV9udGZ5LCBXSUZJX0lGX05URllfTUFYKTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3aWZpX250ZnlfcXVldWU7CiAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBtbG1lX3F1ZXVlOwogCiAJc3RydWN0IGl3X3N0YXRpc3RpY3Mgd3N0YXRzOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfcmVxdWVzdDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGRpc2Nvbm5lY3Q7CiAKIAlzdHJ1Y3QgaXdtX2RlYnVnZnMgZGJnOwogCkBAIC0yODksNyArMjgzLDEzIEBACiAJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2c7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcmtlcjsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0Jc3RydWN0IHJma2lsbCAqcmZraWxsOworCisJdTggKnJlcV9pZTsKKwlpbnQgcmVxX2llX2xlbjsKKwl1OCAqcmVzcF9pZTsKKwlpbnQgcmVzcF9pZV9sZW47CisKKwlzdHJ1Y3QgaXdtX2Z3X2Vycm9yX2hkciAqbGFzdF9md19lcnI7CiAKIAljaGFyIHByaXZhdGVbMF0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oTkVUREVWX0FMSUdOKSkpOwogfTsKQEAgLTMxMSw4ICszMTEsNiBAQAogI2RlZmluZSBza2JfdG9fcnhfaW5mbyhzKSAoKHN0cnVjdCBpd21fcnhfaW5mbyAqKShzLT5jYikpCiAjZGVmaW5lIHNrYl90b190eF9pbmZvKHMpICgoc3RydWN0IGl3bV90eF9pbmZvICopcy0+Y2IpCiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgaXdtX2l3X2hhbmRsZXJfZGVmOwotCiB2b2lkICppd21faWZfYWxsb2MoaW50IHNpemVvZl9idXMsIHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJICAgc3RydWN0IGl3bV9pZl9vcHMgKmlmX29wcyk7CiB2b2lkIGl3bV9pZl9mcmVlKHN0cnVjdCBpd21fcHJpdiAqaXdtKTsKQEAgLTMyMiw2ICszMjAsNyBAQAogaW50IGl3bV9wcml2X2luaXQoc3RydWN0IGl3bV9wcml2ICppd20pOwogdm9pZCBpd21fcHJpdl9kZWluaXQoc3RydWN0IGl3bV9wcml2ICppd20pOwogdm9pZCBpd21fcmVzZXQoc3RydWN0IGl3bV9wcml2ICppd20pOwordm9pZCBpd21fcmVzZXR0aW5nKHN0cnVjdCBpd21fcHJpdiAqaXdtKTsKIHZvaWQgaXdtX3R4X2NyZWRpdF9pbml0X3Bvb2xzKHN0cnVjdCBpd21fcHJpdiAqaXdtLAogCQkJICAgICAgc3RydWN0IGl3bV91bWFjX25vdGlmX2FsaXZlICphbGl2ZSk7CiBpbnQgaXdtX3R4X2NyZWRpdF9hbGxvYyhzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgaW50IGlkLCBpbnQgbmIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2xtYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9sbWFjLmgKaW5kZXggZGIyZTVlZS4uNmMxYTE0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2xtYWMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbG1hYy5oCkBAIC0zOTYsNiArMzk2LDI1IEBACiAJQ0FMSUJSQVRJT05fQ01EX05VTSwKIH07CiAKK2VudW0geworCUNBTElCX0NGR19SWF9CQl9JRFggICAgICAgPSAwLAorCUNBTElCX0NGR19EQ19JRFggICAgICAgICAgPSAxLAorCUNBTElCX0NGR19MT19JRFggICAgICAgICAgPSAyLAorCUNBTElCX0NGR19UWF9JUV9JRFggICAgICAgPSAzLAorCUNBTElCX0NGR19SWF9JUV9JRFggICAgICAgPSA0LAorCUNBTElCX0NGR19OT0lTRV9JRFggICAgICAgPSA1LAorCUNBTElCX0NGR19DUllTVEFMX0lEWCAgICAgPSA2LAorCUNBTElCX0NGR19URU1QRVJBVFVSRV9JRFggPSA3LAorCUNBTElCX0NGR19QQVBEX0lEWCAgICAgICAgPSA4LAorCUNBTElCX0NGR19MQVNUX0lEWCAgICAgICAgPSBDQUxJQl9DRkdfUEFQRF9JRFgsCisJQ0FMSUJfQ0ZHX01PRFVMRV9OVU0sCit9OworCisjZGVmaW5lIElXTV9DQUxJQl9NQVBfSU5JVF9NU0sJCTB4RkZGRgorI2RlZmluZSBJV01fQ0FMSUJfTUFQX1BFUl9MTUFDKG0pCSgobSAmIDB4RkYwMDAwKSA+PiAxNikKKyNkZWZpbmUgSVdNX0NBTElCX01BUF9QRVJfVU1BQyhtKQkoKG0gJiAweEZGMDAwMDAwKSA+PiAyNCkKKyNkZWZpbmUgSVdNX0NBTElCX09QQ09ERV9UT19JTkRFWChvcCkgICAob3AgLSBQSFlfQ0FMSUJSQVRFX09QQ09ERVNfTlVNKQorCiBzdHJ1Y3QgaXdtX2xtYWNfY2FsaWJfaGRyIHsKIAl1OCBvcGNvZGU7CiAJdTggZmlyc3RfZ3JwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9tYWluLmMKaW5kZXggOGJlMjA2ZC4uZDY2OGU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbWFpbi5jCkBAIC01MywxMSArNTMsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaXdtX2NvbmYgZGVmX2l3bV9jb25mID0gewogCiAJLnNkaW9faW9yX3RpbWVvdXQJPSA1MDAwLAotCS5pbml0X2NhbGliX21hcAkJPSBCSVQoUEhZX0NBTElCUkFURV9EQ19DTUQpCXwKLQkJCQkgIEJJVChQSFlfQ0FMSUJSQVRFX0xPX0NNRCkJfAotCQkJCSAgQklUKFBIWV9DQUxJQlJBVEVfVFhfSVFfQ01EKQl8Ci0JCQkJICBCSVQoUEhZX0NBTElCUkFURV9SWF9JUV9DTUQpLAotCS5wZXJpb2RpY19jYWxpYl9tYXAJPSBCSVQoUEhZX0NBTElCUkFURV9EQ19DTUQpCXwKKwkuY2FsaWJfbWFwCQk9IEJJVChDQUxJQl9DRkdfRENfSURYKQl8CisJCQkJICBCSVQoQ0FMSUJfQ0ZHX0xPX0lEWCkJfAorCQkJCSAgQklUKENBTElCX0NGR19UWF9JUV9JRFgpCXwKKwkJCQkgIEJJVChDQUxJQl9DRkdfUlhfSVFfSURYKQl8CisJCQkJICBCSVQoU0hJTE9IX1BIWV9DQUxJQlJBVEVfQkFTRV9CQU5EX0NNRCksCisJLmV4cGVjdGVkX2NhbGliX21hcAk9IEJJVChQSFlfQ0FMSUJSQVRFX0RDX0NNRCkJfAogCQkJCSAgQklUKFBIWV9DQUxJQlJBVEVfTE9fQ01EKQl8CiAJCQkJICBCSVQoUEhZX0NBTElCUkFURV9UWF9JUV9DTUQpCXwKIAkJCQkgIEJJVChQSFlfQ0FMSUJSQVRFX1JYX0lRX0NNRCkJfApAQCAtMTEyLDggKzExMywyOCBAQAogCWl3bV9zZW5kX3VtYWNfc3RhdHNfcmVxKGl3bSwgMCk7CiB9CiAKLWludCBfX2l3bV91cChzdHJ1Y3QgaXdtX3ByaXYgKml3bSk7Ci1pbnQgX19pd21fZG93bihzdHJ1Y3QgaXdtX3ByaXYgKml3bSk7CitzdGF0aWMgdm9pZCBpd21fZGlzY29ubmVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdtX3ByaXYsIGRpc2Nvbm5lY3Qud29yayk7CisKKwlpZiAoaXdtLT51bWFjX3Byb2ZpbGVfYWN0aXZlKQorCQlpd21faW52YWxpZGF0ZV9tbG1lX3Byb2ZpbGUoaXdtKTsKKworCWNsZWFyX2JpdChJV01fU1RBVFVTX0FTU09DSUFURUQsICZpd20tPnN0YXR1cyk7CisJaXdtLT51bWFjX3Byb2ZpbGVfYWN0aXZlID0gMDsKKwltZW1zZXQoaXdtLT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCWl3bS0+Y2hhbm5lbCA9IDA7CisKKwlpd21fbGlua19vZmYoaXdtKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaXdtLT5tbG1lX3F1ZXVlKTsKKworCWNmZzgwMjExX2Rpc2Nvbm5lY3RlZChpd21fdG9fbmRldihpd20pLCAwLCBOVUxMLCAwLCBHRlBfS0VSTkVMKTsKK30KKworc3RhdGljIGludCBfX2l3bV91cChzdHJ1Y3QgaXdtX3ByaXYgKml3bSk7CitzdGF0aWMgaW50IF9faXdtX2Rvd24oc3RydWN0IGl3bV9wcml2ICppd20pOwogCiBzdGF0aWMgdm9pZCBpd21fcmVzZXRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKQEAgLTE2Niw3ICsxODcsOCBAQAogCQltZW1jcHkoaXdtLT51bWFjX3Byb2ZpbGUsIHByb2ZpbGUsIHNpemVvZigqcHJvZmlsZSkpOwogCQlpd21fc2VuZF9tbG1lX3Byb2ZpbGUoaXdtKTsKIAkJa2ZyZWUocHJvZmlsZSk7Ci0JfQorCX0gZWxzZQorCQljbGVhcl9iaXQoSVdNX1NUQVRVU19SRVNFVFRJTkcsICZpd20tPnN0YXR1cyk7CiAKICBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZpd20tPm11dGV4KTsKQEAgLTE3OSw3ICsyMDEsNyBAQAogCUlXTV9XQVJOKGl3bSwgIldhdGNoZG9nIGV4cGlyZWQ6IFVNQUMgc3RhbGxzIVxuIik7CiAKIAlpZiAobW9kcGFyYW1fcmVzZXQpCi0JCXNjaGVkdWxlX3dvcmsoJml3bS0+cmVzZXRfd29ya2VyKTsKKwkJaXdtX3Jlc2V0dGluZyhpd20pOwogfQogCiBpbnQgaXdtX3ByaXZfaW5pdChzdHJ1Y3QgaXdtX3ByaXYgKml3bSkKQEAgLTE5MSw2ICsyMTMsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZpd20tPnBlbmRpbmdfbm90aWYpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJml3bS0+bm90aWZfcXVldWUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJml3bS0+bm9ud2lmaV9xdWV1ZSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaXdtLT53aWZpX250ZnlfcXVldWUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJml3bS0+bWxtZV9xdWV1ZSk7CiAJbWVtY3B5KCZpd20tPmNvbmYsICZkZWZfaXdtX2NvbmYsIHNpemVvZihzdHJ1Y3QgaXdtX2NvbmYpKTsKIAlzcGluX2xvY2tfaW5pdCgmaXdtLT50eF9jcmVkaXQubG9jayk7CkBAIC0yMDEsNiArMjI0LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmaXdtLT5jbWRfbG9jayk7CiAJaXdtLT5zY2FuX2lkID0gMTsKIAlJTklUX0RFTEFZRURfV09SSygmaXdtLT5zdGF0c19yZXF1ZXN0LCBpd21fc3RhdGlzdGljc19yZXF1ZXN0KTsKKwlJTklUX0RFTEFZRURfV09SSygmaXdtLT5kaXNjb25uZWN0LCBpd21fZGlzY29ubmVjdF93b3JrKTsKIAlJTklUX1dPUksoJml3bS0+cmVzZXRfd29ya2VyLCBpd21fcmVzZXRfd29ya2VyKTsKIAlJTklUX0xJU1RfSEVBRCgmaXdtLT5ic3NfbGlzdCk7CiAKQEAgLTIyOSwxMyArMjUzLDE4IEBACiAJZm9yIChpID0gMDsgaSA8IElXTV9OVU1fS0VZUzsgaSsrKQogCQltZW1zZXQoJml3bS0+a2V5c1tpXSwgMCwgc2l6ZW9mKHN0cnVjdCBpd21fa2V5KSk7CiAKLQlpd20tPmRlZmF1bHRfa2V5ID0gTlVMTDsKKwlpd20tPmRlZmF1bHRfa2V5ID0gLTE7CiAKIAlpbml0X3RpbWVyKCZpd20tPndhdGNoZG9nKTsKIAlpd20tPndhdGNoZG9nLmZ1bmN0aW9uID0gaXdtX3dhdGNoZG9nOwogCWl3bS0+d2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWl3bTsKIAltdXRleF9pbml0KCZpd20tPm11dGV4KTsKIAorCWl3bS0+bGFzdF9md19lcnIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXdtX2Z3X2Vycm9yX2hkciksCisJCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKGl3bS0+bGFzdF9md19lcnIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ3LDYgKzI3Niw3IEBACiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGl3bS0+dHhxW2ldLndxKTsKIAogCWRlc3Ryb3lfd29ya3F1ZXVlKGl3bS0+cnhfd3EpOworCWtmcmVlKGl3bS0+bGFzdF9md19lcnIpOwogfQogCiAvKgpAQCAtMjYxLDcgKzI5MSwxMSBAQAogCWlmICh0ZXN0X2JpdChJV01fU1RBVFVTX1JFQURZLCAmaXdtLT5zdGF0dXMpKQogCQlpd21fdGFyZ2V0X3Jlc2V0KGl3bSk7CiAKLQlpd20tPnN0YXR1cyA9IDA7CisJaWYgKHRlc3RfYml0KElXTV9TVEFUVVNfUkVTRVRUSU5HLCAmaXdtLT5zdGF0dXMpKSB7CisJCWl3bS0+c3RhdHVzID0gMDsKKwkJc2V0X2JpdChJV01fU1RBVFVTX1JFU0VUVElORywgJml3bS0+c3RhdHVzKTsKKwl9IGVsc2UKKwkJaXdtLT5zdGF0dXMgPSAwOwogCWl3bS0+c2Nhbl9pZCA9IDE7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm90aWYsIG5leHQsICZpd20tPnBlbmRpbmdfbm90aWYsIHBlbmRpbmcpIHsKQEAgLTI3Nyw2ICszMTEsMTMgQEAKIAlpd21fbGlua19vZmYoaXdtKTsKIH0KIAordm9pZCBpd21fcmVzZXR0aW5nKHN0cnVjdCBpd21fcHJpdiAqaXdtKQoreworCXNldF9iaXQoSVdNX1NUQVRVU19SRVNFVFRJTkcsICZpd20tPnN0YXR1cyk7CisKKwlzY2hlZHVsZV93b3JrKCZpd20tPnJlc2V0X3dvcmtlcik7Cit9CisKIC8qCiAgKiBOb3RpZmljYXRpb24gY29kZToKICAqCkBAIC01MDAsNiArNTQxLDEzIEBACiAJbWVtc2V0KHdzdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBpd19zdGF0aXN0aWNzKSk7CiAJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9JTlZBTElEOwogCisJa2ZyZWUoaXdtLT5yZXFfaWUpOworCWl3bS0+cmVxX2llID0gTlVMTDsKKwlpd20tPnJlcV9pZV9sZW4gPSAwOworCWtmcmVlKGl3bS0+cmVzcF9pZSk7CisJaXdtLT5yZXNwX2llID0gTlVMTDsKKwlpd20tPnJlc3BfaWVfbGVuID0gMDsKKwogCWRlbF90aW1lcl9zeW5jKCZpd20tPndhdGNoZG9nKTsKIH0KIApAQCAtNTE4LDEzICs1NjYsNiBAQAogewogCWludCByZXQ7CiAKLSNpZmRlZiBDT05GSUdfSVdNX0IwX0hXX1NVUFBPUlQKLQlpZiAoaXdtLT5jb25mLmh3X2IwKSB7Ci0JCUlXTV9JTkZPKGl3bSwgIldvcmthcm91bmQgRUVQUk9NIGNoYW5uZWxzIGZvciBCMCBoYXJkd2FyZVxuIik7Ci0JCXJldHVybiAwOwotCX0KLSNlbmRpZgotCiAJcmV0ID0gaXdtX3NlbmRfdW1hY19jaGFubmVsX2xpc3QoaXdtKTsKIAlpZiAocmV0KSB7CiAJCUlXTV9FUlIoaXdtLCAiU2VuZCBjaGFubmVsIGxpc3QgZmFpbGVkXG4iKTsKQEAgLTU0MSw3ICs1ODIsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgX19pd21fdXAoc3RydWN0IGl3bV9wcml2ICppd20pCitzdGF0aWMgaW50IF9faXdtX3VwKHN0cnVjdCBpd21fcHJpdiAqaXdtKQogewogCWludCByZXQ7CiAJc3RydWN0IGl3bV9ub3RpZiAqbm90aWZfcmVib290LCAqbm90aWZfYWNrID0gTlVMTDsKQEAgLTY0MiwxOSArNjgzLDEwIEBACiAJCX0KIAl9CiAKLQlpd20tPnVtYWNfcHJvZmlsZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpd21fdW1hY19wcm9maWxlKSwKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpd20tPnVtYWNfcHJvZmlsZSkgewotCQlJV01fRVJSKGl3bSwgIkNvdWxkbid0IGFsbG9jIG1lbW9yeSBmb3IgcHJvZmlsZVxuIik7Ci0JCWdvdG8gZXJyX2Z3OwotCX0KLQotCWl3bV9pbml0X2RlZmF1bHRfcHJvZmlsZShpd20sIGl3bS0+dW1hY19wcm9maWxlKTsKLQogCXJldCA9IGl3bV9jaGFubmVsc19pbml0KGl3bSk7CiAJaWYgKHJldCA8IDApIHsKIAkJSVdNX0VSUihpd20sICJDb3VsZG4ndCBpbml0IGNoYW5uZWxzXG4iKTsKLQkJZ290byBlcnJfcHJvZmlsZTsKKwkJZ290byBlcnJfZnc7CiAJfQogCiAJLyogU2V0IHRoZSBSRUFEWSBiaXQgdG8gaW5kaWNhdGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAgc3VjY2Vzc2Z1bGx5ICovCkBAIC02NjIsMTAgKzY5NCw2IEBACiAKIAlyZXR1cm4gMDsKIAotIGVycl9wcm9maWxlOgotCWtmcmVlKGl3bS0+dW1hY19wcm9maWxlKTsKLQlpd20tPnVtYWNfcHJvZmlsZSA9IE5VTEw7Ci0KICBlcnJfZnc6CiAJaXdtX2VlcHJvbV9leGl0KGl3bSk7CiAKQEAgLTY4OCw3ICs3MTYsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBfX2l3bV9kb3duKHN0cnVjdCBpd21fcHJpdiAqaXdtKQorc3RhdGljIGludCBfX2l3bV9kb3duKHN0cnVjdCBpd21fcHJpdiAqaXdtKQogewogCWludCByZXQ7CiAKQEAgLTcwNCwxMSArNzMyLDEwIEBACiAJY2xlYXJfYml0KElXTV9TVEFUVVNfUkVBRFksICZpd20tPnN0YXR1cyk7CiAKIAlpd21fZWVwcm9tX2V4aXQoaXdtKTsKLQlrZnJlZShpd20tPnVtYWNfcHJvZmlsZSk7Ci0JaXdtLT51bWFjX3Byb2ZpbGUgPSBOVUxMOwogCWl3bV9ic3NfbGlzdF9jbGVhbihpd20pOwotCi0JaXdtLT5kZWZhdWx0X2tleSA9IE5VTEw7CisJaXdtX2luaXRfZGVmYXVsdF9wcm9maWxlKGl3bSwgaXdtLT51bWFjX3Byb2ZpbGUpOworCWl3bS0+dW1hY19wcm9maWxlX2FjdGl2ZSA9IGZhbHNlOworCWl3bS0+ZGVmYXVsdF9rZXkgPSAtMTsKIAlpd20tPmNvcmVfZW5hYmxlZCA9IDA7CiAKIAlyZXQgPSBpd21fYnVzX2Rpc2FibGUoaXdtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9uZXRkZXYuYwppbmRleCBiZjI5NGU0Li4zNWVjMDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL25ldGRldi5jCkBAIC00OCwyOSArNDgsMjIgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAogI2luY2x1ZGUgIml3bS5oIgorI2luY2x1ZGUgImNvbW1hbmRzLmgiCiAjaW5jbHVkZSAiY2ZnODAyMTEuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCiBzdGF0aWMgaW50IGl3bV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20obmRldik7Ci0JaW50IHJldCA9IDA7CiAKLQlpZiAoIXRlc3RfYml0KElXTV9SQURJT19SRktJTExfU1csICZpd20tPnJhZGlvKSkKLQkJcmV0ID0gaXdtX3VwKGl3bSk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBpd21fdXAoaXdtKTsKIH0KIAogc3RhdGljIGludCBpd21fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKG5kZXYpOwotCWludCByZXQgPSAwOwogCi0JaWYgKCF0ZXN0X2JpdChJV01fUkFESU9fUkZLSUxMX1NXLCAmaXdtLT5yYWRpbykpCi0JCXJldCA9IGl3bV9kb3duKGl3bSk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBpd21fZG93bihpd20pOwogfQogCiAvKgpAQCAtMTI4LDEzICsxMjEsMjQgQEAKIAl9CiAKIAluZGV2LT5uZXRkZXZfb3BzID0gJml3bV9uZXRkZXZfb3BzOwotCW5kZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJml3bV9pd19oYW5kbGVyX2RlZjsKIAluZGV2LT5pZWVlODAyMTFfcHRyID0gd2RldjsKIAlTRVRfTkVUREVWX0RFVihuZGV2LCB3aXBoeV9kZXYod2Rldi0+d2lwaHkpKTsKIAl3ZGV2LT5uZXRkZXYgPSBuZGV2OwogCisJaXdtLT51bWFjX3Byb2ZpbGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXdtX3VtYWNfcHJvZmlsZSksCisJCQkJICAgIEdGUF9LRVJORUwpOworCWlmICghaXdtLT51bWFjX3Byb2ZpbGUpIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBhbGxvYyBtZW1vcnkgZm9yIHByb2ZpbGVcbiIpOworCQlnb3RvIG91dF9wcm9maWxlOworCX0KKworCWl3bV9pbml0X2RlZmF1bHRfcHJvZmlsZShpd20sIGl3bS0+dW1hY19wcm9maWxlKTsKKwogCXJldHVybiBpd207CiAKKyBvdXRfcHJvZmlsZToKKwlmcmVlX25ldGRldihuZGV2KTsKKwogIG91dF9wcml2OgogCWl3bV9wcml2X2RlaW5pdChpd20pOwogCkBAIC0xNTAsNiArMTU0LDggQEAKIAogCWZyZWVfbmV0ZGV2KGl3bV90b19uZGV2KGl3bSkpOwogCWl3bV9wcml2X2RlaW5pdChpd20pOworCWtmcmVlKGl3bS0+dW1hY19wcm9maWxlKTsKKwlpd20tPnVtYWNfcHJvZmlsZSA9IE5VTEw7CiAJaXdtX3dkZXZfZnJlZShpd20pOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCmluZGV4IGQ3M2NmOTYuLjQwZGJjYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCkBAIC0xMDIsNiArMTAyLDcgQEAKIAllcnJvciA9IChzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfZXJyb3IgKilidWY7CiAJZndfZXJyID0gJmVycm9yLT5lcnI7CiAKKwltZW1jcHkoaXdtLT5sYXN0X2Z3X2VyciwgZndfZXJyLCBzaXplb2Yoc3RydWN0IGl3bV9md19lcnJvcl9oZHIpKTsKIAogCUlXTV9FUlIoaXdtLCAiJWNNQUMgRlcgRVJST1I6XG4iLAogCSAobGUzMl90b19jcHUoZndfZXJyLT5jYXRlZ29yeSkgPT0gVU1BQ19TWVNfRVJSX0NBVF9MTUFDKSA/ICdMJyA6ICdVJyk7CkBAIC0xMTksNiArMTIwLDggQEAKIAlJV01fRVJSKGl3bSwgIlx0TE1BQyBzdGF0dXM6IDB4JXhcbiIsIGxlMzJfdG9fY3B1KGZ3X2Vyci0+bG1hY19zdGF0dXMpKTsKIAlJV01fRVJSKGl3bSwgIlx0U0RJTyBzdGF0dXM6IDB4JXhcbiIsIGxlMzJfdG9fY3B1KGZ3X2Vyci0+c2Rpb19zdGF0dXMpKTsKIAorCWl3bV9yZXNldHRpbmcoaXdtKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNDMsMTcgKzE0NiwxOCBAQAogCQkJCSB1bnNpZ25lZCBsb25nIGJ1Zl9zaXplLAogCQkJCSBzdHJ1Y3QgaXdtX3dpZmlfY21kICpjbWQpCiB7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IGl3bV90b193aXBoeShpd20pOwogCXN0cnVjdCBpd21fdW1hY19ub3RpZl9pbml0X2NvbXBsZXRlICppbml0X2NvbXBsZXRlID0KIAkJCShzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfaW5pdF9jb21wbGV0ZSAqKShidWYpOwogCXUxNiBzdGF0dXMgPSBsZTE2X3RvX2NwdShpbml0X2NvbXBsZXRlLT5zdGF0dXMpOworCWJvb2wgYmxvY2tlZCA9IChzdGF0dXMgPT0gVU1BQ19OVEZZX0lOSVRfQ09NUExFVEVfU1RBVFVTX0VSUik7CiAKLQlpZiAoc3RhdHVzID09IFVNQUNfTlRGWV9JTklUX0NPTVBMRVRFX1NUQVRVU19FUlIpIHsKKwlpZiAoYmxvY2tlZCkKIAkJSVdNX0RCR19OVEYoaXdtLCBEQkcsICJIYXJkd2FyZSByZiBraWxsIGlzIG9uIChyYWRpbyBvZmYpXG4iKTsKLQkJc2V0X2JpdChJV01fUkFESU9fUkZLSUxMX0hXLCAmaXdtLT5yYWRpbyk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCUlXTV9EQkdfTlRGKGl3bSwgREJHLCAiSGFyZHdhcmUgcmYga2lsbCBpcyBvZmYgKHJhZGlvIG9uKVxuIik7Ci0JCWNsZWFyX2JpdChJV01fUkFESU9fUkZLSUxMX0hXLCAmaXdtLT5yYWRpbyk7Ci0JfQorCisJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZSh3aXBoeSwgYmxvY2tlZCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxOCwxNyArMjIyLDE3IEBACiAJCShidWYgKyBzaXplb2Yoc3RydWN0IGl3bV91bWFjX3dpZmlfaW5faGRyKSk7CiAJaGRyID0gKHN0cnVjdCBpd21fdW1hY193aWZpX2luX2hkciAqKWJ1ZjsKIAotCUlXTV9EQkdfTlRGKGl3bSwgREJHLCAiUkVQTFlfVFgsIGJ1ZiBzaXplOiAlbHVcbiIsIGJ1Zl9zaXplKTsKKwlJV01fREJHX1RYKGl3bSwgREJHLCAiUkVQTFlfVFgsIGJ1ZiBzaXplOiAlbHVcbiIsIGJ1Zl9zaXplKTsKIAotCUlXTV9EQkdfTlRGKGl3bSwgREJHLCAiU2VxbnVtOiAlZFxuIiwKLQkJICAgIGxlMTZfdG9fY3B1KGhkci0+c3dfaGRyLmNtZC5zZXFfbnVtKSk7Ci0JSVdNX0RCR19OVEYoaXdtLCBEQkcsICJcdEZyYW1lIGNudDogJWRcbiIsIHR4X3Jlc3AtPmZyYW1lX2NudCk7Ci0JSVdNX0RCR19OVEYoaXdtLCBEQkcsICJcdFJldHJ5IGNudDogJWRcbiIsCi0JCSAgICBsZTE2X3RvX2NwdSh0eF9yZXNwLT5yZXRyeV9jbnQpKTsKLQlJV01fREJHX05URihpd20sIERCRywgIlx0U2VxIGN0bDogJWRcbiIsIGxlMTZfdG9fY3B1KHR4X3Jlc3AtPnNlcV9jdGwpKTsKLQlJV01fREJHX05URihpd20sIERCRywgIlx0Qnl0ZSBjbnQ6ICVkXG4iLAotCQkgICAgbGUxNl90b19jcHUodHhfcmVzcC0+Ynl0ZV9jbnQpKTsKLQlJV01fREJHX05URihpd20sIERCRywgIlx0U3RhdHVzOiAweCV4XG4iLCBsZTMyX3RvX2NwdSh0eF9yZXNwLT5zdGF0dXMpKTsKKwlJV01fREJHX1RYKGl3bSwgREJHLCAiU2VxbnVtOiAlZFxuIiwKKwkJICAgbGUxNl90b19jcHUoaGRyLT5zd19oZHIuY21kLnNlcV9udW0pKTsKKwlJV01fREJHX1RYKGl3bSwgREJHLCAiXHRGcmFtZSBjbnQ6ICVkXG4iLCB0eF9yZXNwLT5mcmFtZV9jbnQpOworCUlXTV9EQkdfVFgoaXdtLCBEQkcsICJcdFJldHJ5IGNudDogJWRcbiIsCisJCSAgIGxlMTZfdG9fY3B1KHR4X3Jlc3AtPnJldHJ5X2NudCkpOworCUlXTV9EQkdfVFgoaXdtLCBEQkcsICJcdFNlcSBjdGw6ICVkXG4iLCBsZTE2X3RvX2NwdSh0eF9yZXNwLT5zZXFfY3RsKSk7CisJSVdNX0RCR19UWChpd20sIERCRywgIlx0Qnl0ZSBjbnQ6ICVkXG4iLAorCQkgICBsZTE2X3RvX2NwdSh0eF9yZXNwLT5ieXRlX2NudCkpOworCUlXTV9EQkdfVFgoaXdtLCBEQkcsICJcdFN0YXR1czogMHgleFxuIiwgbGUzMl90b19jcHUodHhfcmVzcC0+c3RhdHVzKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQxOCw4ICs0MjIsOCBAQAogCQkJaWYgKElTX0VSUih0aWNrZXRfbm9kZSkpCiAJCQkJcmV0dXJuIFBUUl9FUlIodGlja2V0X25vZGUpOwogCi0JCQlJV01fREJHX05URihpd20sIERCRywgIlRJQ0tFVCBSRUxFQVNFKCVkKVxuIiwKLQkJCQkgICAgdGlja2V0LT5pZCk7CisJCQlJV01fREJHX1JYKGl3bSwgREJHLCAiVElDS0VUIFJFTEVBU0UoJWQpXG4iLAorCQkJCSAgIHRpY2tldC0+aWQpOwogCQkJbGlzdF9hZGRfdGFpbCgmdGlja2V0X25vZGUtPm5vZGUsICZpd20tPnJ4X3RpY2tldHMpOwogCiAJCQkvKgpAQCAtNDU0LDE1ICs0NTgsMTUgQEAKIAl1MTYgaWQsIGJ1Zl9vZmZzZXQ7CiAJdTMyIHBhY2tldF9zaXplOwogCi0JSVdNX0RCR19OVEYoaXdtLCBEQkcsICJcbiIpOworCUlXTV9EQkdfUlgoaXdtLCBEQkcsICJcbiIpOwogCiAJd2lmaV9oZHIgPSAoc3RydWN0IGl3bV91bWFjX3dpZmlfaW5faGRyICopYnVmOwogCWlkID0gbGUxNl90b19jcHUod2lmaV9oZHItPnN3X2hkci5jbWQuc2VxX251bSk7CiAJYnVmX29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pbl9oZHIpOwogCXBhY2tldF9zaXplID0gYnVmX3NpemUgLSBzaXplb2Yoc3RydWN0IGl3bV91bWFjX3dpZmlfaW5faGRyKTsKIAotCUlXTV9EQkdfTlRGKGl3bSwgREJHLCAiQ01EOjB4JXgsIHNlcW51bTogJWQsIHBhY2tldCBzaXplOiAlZFxuIiwKLQkJICAgIHdpZmlfaGRyLT5zd19oZHIuY21kLmNtZCwgaWQsIHBhY2tldF9zaXplKTsKKwlJV01fREJHX1JYKGl3bSwgREJHLCAiQ01EOjB4JXgsIHNlcW51bTogJWQsIHBhY2tldCBzaXplOiAlZFxuIiwKKwkJICAgd2lmaV9oZHItPnN3X2hkci5jbWQuY21kLCBpZCwgcGFja2V0X3NpemUpOwogCUlXTV9EQkdfUlgoaXdtLCBEQkcsICJQYWNrZXQgaWQ6ICVkXG4iLCBpZCk7CiAJSVdNX0hFWERVTVAoaXdtLCBEQkcsIFJYLCAiUEFDS0VUOiAiLCBidWYgKyBidWZfb2Zmc2V0LCBwYWNrZXRfc2l6ZSk7CiAKQEAgLTQ4Nyw4ICs0OTEsNiBAQAogCiAJc3RhcnQgPSAoc3RydWN0IGl3bV91bWFjX25vdGlmX2Fzc29jX3N0YXJ0ICopYnVmOwogCi0Jc2V0X2JpdChJV01fU1RBVFVTX0FTU09DSUFUSU5HLCAmaXdtLT5zdGF0dXMpOwotCiAJSVdNX0RCR19NTE1FKGl3bSwgSU5GTywgIkFzc29jaWF0aW9uIHdpdGggJXBNIFN0YXJ0ZWQsIHJlYXNvbjogJWRcbiIsCiAJCSAgICAgc3RhcnQtPmJzc2lkLCBsZTMyX3RvX2NwdShzdGFydC0+cm9hbV9yZWFzb24pKTsKIApAQCAtNTAzLDQzICs1MDUsODQgQEAKIHsKIAlzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfYXNzb2NfY29tcGxldGUgKmNvbXBsZXRlID0KIAkJKHN0cnVjdCBpd21fdW1hY19ub3RpZl9hc3NvY19jb21wbGV0ZSAqKWJ1ZjsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CiAKIAlJV01fREJHX01MTUUoaXdtLCBJTkZPLCAiQXNzb2NpYXRpb24gd2l0aCAlcE0gY29tcGxldGVkLCBzdGF0dXM6ICVkXG4iLAogCQkgICAgIGNvbXBsZXRlLT5ic3NpZCwgY29tcGxldGUtPnN0YXR1cyk7CiAKLQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7Ci0KLQljbGVhcl9iaXQoSVdNX1NUQVRVU19BU1NPQ0lBVElORywgJml3bS0+c3RhdHVzKTsKLQogCXN3aXRjaCAobGUzMl90b19jcHUoY29tcGxldGUtPnN0YXR1cykpIHsKIAljYXNlIFVNQUNfQVNTT0NfQ09NUExFVEVfU1VDQ0VTUzoKIAkJc2V0X2JpdChJV01fU1RBVFVTX0FTU09DSUFURUQsICZpd20tPnN0YXR1cyk7CiAJCW1lbWNweShpd20tPmJzc2lkLCBjb21wbGV0ZS0+YnNzaWQsIEVUSF9BTEVOKTsKIAkJaXdtLT5jaGFubmVsID0gY29tcGxldGUtPmNoYW5uZWw7CiAKKwkJLyogSW50ZXJuYWwgcm9hbWluZyBzdGF0ZSwgYXZvaWQgbm90aWZ5aW5nIFNNRS4gKi8KKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSVdNX1NUQVRVU19TTUVfQ09OTkVDVElORywgJml3bS0+c3RhdHVzKQorCQkgICAgJiYgaXdtLT5jb25mLm1vZGUgPT0gVU1BQ19NT0RFX0JTUykgeworCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXdtLT5kaXNjb25uZWN0KTsKKwkJCWNmZzgwMjExX3JvYW1lZChpd21fdG9fbmRldihpd20pLAorCQkJCQljb21wbGV0ZS0+YnNzaWQsCisJCQkJCWl3bS0+cmVxX2llLCBpd20tPnJlcV9pZV9sZW4sCisJCQkJCWl3bS0+cmVzcF9pZSwgaXdtLT5yZXNwX2llX2xlbiwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCQlicmVhazsKKwkJfQorCiAJCWl3bV9saW5rX29uKGl3bSk7CiAKLQkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBjb21wbGV0ZS0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJaWYgKGl3bS0+Y29uZi5tb2RlID09IFVNQUNfTU9ERV9JQlNTKQorCQkJZ290byBpYnNzOworCisJCWlmICghdGVzdF9iaXQoSVdNX1NUQVRVU19SRVNFVFRJTkcsICZpd20tPnN0YXR1cykpCisJCQljZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChpd21fdG9fbmRldihpd20pLAorCQkJCQkJY29tcGxldGUtPmJzc2lkLAorCQkJCQkJaXdtLT5yZXFfaWUsIGl3bS0+cmVxX2llX2xlbiwKKwkJCQkJCWl3bS0+cmVzcF9pZSwgaXdtLT5yZXNwX2llX2xlbiwKKwkJCQkJCVdMQU5fU1RBVFVTX1NVQ0NFU1MsCisJCQkJCQlHRlBfS0VSTkVMKTsKKwkJZWxzZQorCQkJY2ZnODAyMTFfcm9hbWVkKGl3bV90b19uZGV2KGl3bSksCisJCQkJCWNvbXBsZXRlLT5ic3NpZCwKKwkJCQkJaXdtLT5yZXFfaWUsIGl3bS0+cmVxX2llX2xlbiwKKwkJCQkJaXdtLT5yZXNwX2llLCBpd20tPnJlc3BfaWVfbGVuLAorCQkJCQlHRlBfS0VSTkVMKTsKIAkJYnJlYWs7CiAJY2FzZSBVTUFDX0FTU09DX0NPTVBMRVRFX0ZBSUxVUkU6CiAJCWNsZWFyX2JpdChJV01fU1RBVFVTX0FTU09DSUFURUQsICZpd20tPnN0YXR1cyk7CiAJCW1lbXNldChpd20tPmJzc2lkLCAwLCBFVEhfQUxFTik7CiAJCWl3bS0+Y2hhbm5lbCA9IDA7CiAKKwkJLyogSW50ZXJuYWwgcm9hbWluZyBzdGF0ZSwgYXZvaWQgbm90aWZ5aW5nIFNNRS4gKi8KKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSVdNX1NUQVRVU19TTUVfQ09OTkVDVElORywgJml3bS0+c3RhdHVzKQorCQkgICAgJiYgaXdtLT5jb25mLm1vZGUgPT0gVU1BQ19NT0RFX0JTUykgeworCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXdtLT5kaXNjb25uZWN0KTsKKwkJCWJyZWFrOworCQl9CisKIAkJaXdtX2xpbmtfb2ZmKGl3bSk7CisKKwkJaWYgKGl3bS0+Y29uZi5tb2RlID09IFVNQUNfTU9ERV9JQlNTKQorCQkJZ290byBpYnNzOworCisJCWlmICghdGVzdF9iaXQoSVdNX1NUQVRVU19SRVNFVFRJTkcsICZpd20tPnN0YXR1cykpCisJCQljZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChpd21fdG9fbmRldihpd20pLAorCQkJCQkJY29tcGxldGUtPmJzc2lkLAorCQkJCQkJTlVMTCwgMCwgTlVMTCwgMCwKKwkJCQkJCVdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkUsCisJCQkJCQlHRlBfS0VSTkVMKTsKKwkJZWxzZQorCQkJY2ZnODAyMTFfZGlzY29ubmVjdGVkKGl3bV90b19uZGV2KGl3bSksIDAsIE5VTEwsIDAsCisJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAKLQlpZiAoaXdtLT5jb25mLm1vZGUgPT0gVU1BQ19NT0RFX0lCU1MpIHsKLQkJY2ZnODAyMTFfaWJzc19qb2luZWQoaXdtX3RvX25kZXYoaXdtKSwgaXdtLT5ic3NpZCwgR0ZQX0tFUk5FTCk7Ci0JCXJldHVybiAwOwotCX0KKwljbGVhcl9iaXQoSVdNX1NUQVRVU19SRVNFVFRJTkcsICZpd20tPnN0YXR1cyk7CisJcmV0dXJuIDA7CiAKLQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCXdpcmVsZXNzX3NlbmRfZXZlbnQoaXdtX3RvX25kZXYoaXdtKSwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7Ci0KKyBpYnNzOgorCWNmZzgwMjExX2lic3Nfam9pbmVkKGl3bV90b19uZGV2KGl3bSksIGl3bS0+YnNzaWQsIEdGUF9LRVJORUwpOworCWNsZWFyX2JpdChJV01fU1RBVFVTX1JFU0VUVElORywgJml3bS0+c3RhdHVzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTQ4LDEzICs1OTEsMjAgQEAKIAkJCQkgICAgICAgc3RydWN0IGl3bV93aWZpX2NtZCAqY21kKQogewogCXN0cnVjdCBpd21fdW1hY19ub3RpZl9wcm9maWxlX2ludmFsaWRhdGUgKmludmFsaWQ7CisJdTMyIHJlYXNvbjsKIAogCWludmFsaWQgPSAoc3RydWN0IGl3bV91bWFjX25vdGlmX3Byb2ZpbGVfaW52YWxpZGF0ZSAqKWJ1ZjsKKwlyZWFzb24gPSBsZTMyX3RvX2NwdShpbnZhbGlkLT5yZWFzb24pOwogCi0JSVdNX0RCR19NTE1FKGl3bSwgSU5GTywgIlByb2ZpbGUgSW52YWxpZGF0ZWQuIFJlYXNvbjogJWRcbiIsCi0JCSAgICAgbGUzMl90b19jcHUoaW52YWxpZC0+cmVhc29uKSk7CisJSVdNX0RCR19NTE1FKGl3bSwgSU5GTywgIlByb2ZpbGUgSW52YWxpZGF0ZWQuIFJlYXNvbjogJWRcbiIsIHJlYXNvbik7CiAKLQljbGVhcl9iaXQoSVdNX1NUQVRVU19BU1NPQ0lBVElORywgJml3bS0+c3RhdHVzKTsKKwlpZiAocmVhc29uICE9IFVNQUNfUFJPRklMRV9JTlZBTElEX1JFUVVFU1QgJiYKKwkgICAgdGVzdF9iaXQoSVdNX1NUQVRVU19TTUVfQ09OTkVDVElORywgJml3bS0+c3RhdHVzKSkKKwkJY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoaXdtX3RvX25kZXYoaXdtKSwgTlVMTCwgTlVMTCwgMCwgTlVMTCwKKwkJCQkJMCwgV0xBTl9TVEFUVVNfVU5TUEVDSUZJRURfRkFJTFVSRSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisKKwljbGVhcl9iaXQoSVdNX1NUQVRVU19TTUVfQ09OTkVDVElORywgJml3bS0+c3RhdHVzKTsKIAljbGVhcl9iaXQoSVdNX1NUQVRVU19BU1NPQ0lBVEVELCAmaXdtLT5zdGF0dXMpOwogCiAJaXdtLT51bWFjX3Byb2ZpbGVfYWN0aXZlID0gMDsKQEAgLTU2OCw2ICs2MTgsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBJV01fRElTQ09OTkVDVF9JTlRFUlZBTAkoNSAqIEhaKQorCitzdGF0aWMgaW50IGl3bV9tbG1lX2Nvbm5lY3Rpb25fdGVybWluYXRlZChzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTggKmJ1ZiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGJ1Zl9zaXplLAorCQkJCQkgIHN0cnVjdCBpd21fd2lmaV9jbWQgKmNtZCkKK3sKKwlJV01fREJHX01MTUUoaXdtLCBEQkcsICJDb25uZWN0aW9uIHRlcm1pbmF0ZWRcbiIpOworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpd20tPmRpc2Nvbm5lY3QsIElXTV9ESVNDT05ORUNUX0lOVEVSVkFMKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGl3bV9tbG1lX3NjYW5fY29tcGxldGUoc3RydWN0IGl3bV9wcml2ICppd20sIHU4ICpidWYsCiAJCQkJICB1bnNpZ25lZCBsb25nIGJ1Zl9zaXplLAogCQkJCSAgc3RydWN0IGl3bV93aWZpX2NtZCAqY21kKQpAQCAtNzY5LDM3ICs4MzIsNDcgQEAKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYnVmX3NpemUsIHN0cnVjdCBpd21fd2lmaV9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfbWd0X2ZyYW1lICptZ3RfZnJhbWUgPQotCShzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfbWd0X2ZyYW1lICopYnVmOworCQkJKHN0cnVjdCBpd21fdW1hY19ub3RpZl9tZ3RfZnJhbWUgKilidWY7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ3QgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopbWd0X2ZyYW1lLT5mcmFtZTsKIAl1OCAqaWU7Ci0JdW5zaWduZWQgaW50IGV2ZW50OwotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAogCUlXTV9IRVhEVU1QKGl3bSwgREJHLCBNTE1FLCAiTUdUOiAiLCBtZ3RfZnJhbWUtPmZyYW1lLAogCQkgICAgbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pKTsKIAogCWlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKG1ndC0+ZnJhbWVfY29udHJvbCkpIHsKIAkJaWUgPSBtZ3QtPnUuYXNzb2NfcmVxLnZhcmlhYmxlOzsKLQkJZXZlbnQgPSBJV0VWQVNTT0NSRVFJRTsKKwkJaXdtLT5yZXFfaWVfbGVuID0KKwkJCQlsZTE2X3RvX2NwdShtZ3RfZnJhbWUtPmxlbikgLSAoaWUgLSAodTggKiltZ3QpOworCQlrZnJlZShpd20tPnJlcV9pZSk7CisJCWl3bS0+cmVxX2llID0ga21lbWR1cChtZ3QtPnUuYXNzb2NfcmVxLnZhcmlhYmxlLAorCQkJCSAgICAgIGl3bS0+cmVxX2llX2xlbiwgR0ZQX0tFUk5FTCk7CiAJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXEobWd0LT5mcmFtZV9jb250cm9sKSkgewogCQlpZSA9IG1ndC0+dS5yZWFzc29jX3JlcS52YXJpYWJsZTs7Ci0JCWV2ZW50ID0gSVdFVkFTU09DUkVRSUU7CisJCWl3bS0+cmVxX2llX2xlbiA9CisJCQkJbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pIC0gKGllIC0gKHU4ICopbWd0KTsKKwkJa2ZyZWUoaXdtLT5yZXFfaWUpOworCQlpd20tPnJlcV9pZSA9IGttZW1kdXAobWd0LT51LnJlYXNzb2NfcmVxLnZhcmlhYmxlLAorCQkJCSAgICAgIGl3bS0+cmVxX2llX2xlbiwgR0ZQX0tFUk5FTCk7CiAJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVzcChtZ3QtPmZyYW1lX2NvbnRyb2wpKSB7CiAJCWllID0gbWd0LT51LmFzc29jX3Jlc3AudmFyaWFibGU7OwotCQlldmVudCA9IElXRVZBU1NPQ1JFU1BJRTsKKwkJaXdtLT5yZXNwX2llX2xlbiA9CisJCQkJbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pIC0gKGllIC0gKHU4ICopbWd0KTsKKwkJa2ZyZWUoaXdtLT5yZXNwX2llKTsKKwkJaXdtLT5yZXNwX2llID0ga21lbWR1cChtZ3QtPnUuYXNzb2NfcmVzcC52YXJpYWJsZSwKKwkJCQkgICAgICAgaXdtLT5yZXNwX2llX2xlbiwgR0ZQX0tFUk5FTCk7CiAJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXNwKG1ndC0+ZnJhbWVfY29udHJvbCkpIHsKIAkJaWUgPSBtZ3QtPnUucmVhc3NvY19yZXNwLnZhcmlhYmxlOzsKLQkJZXZlbnQgPSBJV0VWQVNTT0NSRVNQSUU7CisJCWl3bS0+cmVzcF9pZV9sZW4gPQorCQkJCWxlMTZfdG9fY3B1KG1ndF9mcmFtZS0+bGVuKSAtIChpZSAtICh1OCAqKW1ndCk7CisJCWtmcmVlKGl3bS0+cmVzcF9pZSk7CisJCWl3bS0+cmVzcF9pZSA9IGttZW1kdXAobWd0LT51LnJlYXNzb2NfcmVzcC52YXJpYWJsZSwKKwkJCQkgICAgICAgaXdtLT5yZXNwX2llX2xlbiwgR0ZQX0tFUk5FTCk7CiAJfSBlbHNlIHsKLQkJSVdNX0VSUihpd20sICJVbnN1cHBvcnRlZCBtYW5hZ2VtZW50IGZyYW1lIik7CisJCUlXTV9FUlIoaXdtLCAiVW5zdXBwb3J0ZWQgbWFuYWdlbWVudCBmcmFtZTogMHgleCIsCisJCQlsZTE2X3RvX2NwdShtZ3QtPmZyYW1lX2NvbnRyb2wpKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0Jd3JxdS5kYXRhLmxlbmd0aCA9IGxlMTZfdG9fY3B1KG1ndF9mcmFtZS0+bGVuKSAtIChpZSAtICh1OCAqKW1ndCk7Ci0KLQlJV01fSEVYRFVNUChpd20sIERCRywgTUxNRSwgIkVWVDogIiwgaWUsIHdycXUuZGF0YS5sZW5ndGgpOwotCXdpcmVsZXNzX3NlbmRfZXZlbnQoaXdtX3RvX25kZXYoaXdtKSwgZXZlbnQsICZ3cnF1LCBpZSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODE3LDggKzg5MCw3IEBACiAJY2FzZSBXSUZJX0lGX05URllfUFJPRklMRV9JTlZBTElEQVRFX0NPTVBMRVRFOgogCQlyZXR1cm4gaXdtX21sbWVfcHJvZmlsZV9pbnZhbGlkYXRlKGl3bSwgYnVmLCBidWZfc2l6ZSwgY21kKTsKIAljYXNlIFdJRklfSUZfTlRGWV9DT05ORUNUSU9OX1RFUk1JTkFURUQ6Ci0JCUlXTV9EQkdfTUxNRShpd20sIERCRywgIkNvbm5lY3Rpb24gdGVybWluYXRlZFxuIik7Ci0JCWJyZWFrOworCQlyZXR1cm4gaXdtX21sbWVfY29ubmVjdGlvbl90ZXJtaW5hdGVkKGl3bSwgYnVmLCBidWZfc2l6ZSwgY21kKTsKIAljYXNlIFdJRklfSUZfTlRGWV9TQ0FOX0NPTVBMRVRFOgogCQlyZXR1cm4gaXdtX21sbWVfc2Nhbl9jb21wbGV0ZShpd20sIGJ1ZiwgYnVmX3NpemUsIGNtZCk7CiAJY2FzZSBXSUZJX0lGX05URllfU1RBX1RBQkxFX0NIQU5HRToKQEAgLTg3NSw2ICs5NDcsNyBAQAogCQkvKiBVTUFDIHBhc3NlcyByYXRlIGluZm8gbXVsdGlwbGllcyBieSAyICovCiAJCWl3bS0+cmF0ZSA9IG1heF9yYXRlID4+IDE7CiAJfQorCWl3bS0+dHhwb3dlciA9IGxlMzJfdG9fY3B1KHN0YXRzLT50eF9wb3dlcik7CiAKIAl3c3RhdHMtPnN0YXR1cyA9IDA7CiAKQEAgLTkyMiwxMyArOTk1LDYgQEAKIAlpZiAoKGhkcl9vZmZzZXQgKyBoZHJfbGVuKSA+IElXTV9FRVBST01fTEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotI2lmZGVmIENPTkZJR19JV01fQjBfSFdfU1VQUE9SVAotCWlmIChoZHJfb2Zmc2V0ID09IElXTV9FRVBST01fU0tVX0NBUF9PRkYpIHsKLQkJaWYgKGVlcHJvbV9wcm94eS0+YnVmWzBdID09IDB4ZmYpCi0JCQlpd20tPmNvbmYuaHdfYjAgPSAxOwotCX0KLSNlbmRpZgotCiAJc3dpdGNoIChoZHJfdHlwZSkgewogCWNhc2UgSVdNX1VNQUNfQ01EX0VFUFJPTV9UWVBFX1JFQUQ6CiAJCW1lbWNweShpd20tPmVlcHJvbSArIGhkcl9vZmZzZXQsIGVlcHJvbV9wcm94eS0+YnVmLCBoZHJfbGVuKTsKQEAgLTk5MywxMiArMTA1OSwxNyBAQAogCQkJKHN0cnVjdCBpd21fdW1hY193aWZpX2lmICopY21kLT5idWYucGF5bG9hZDsKIAogCUlXTV9EQkdfTlRGKGl3bSwgREJHLCAiV0lGSV9JRl9XUkFQUEVSIGNtZCBpcyBkZWxpdmVyZWQgdG8gVU1BQzogIgotCQkgICAgIm9pZCBpcyAlZFxuIiwgaGRyLT5vaWQpOworCQkgICAgIm9pZCBpcyAweCV4XG4iLCBoZHItPm9pZCk7CisKKwlpZiAoaGRyLT5vaWQgPD0gV0lGSV9JRl9OVEZZX01BWCkgeworCQlzZXRfYml0KGhkci0+b2lkLCAmaXdtLT53aWZpX250ZnlbMF0pOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJml3bS0+d2lmaV9udGZ5X3F1ZXVlKTsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKGhkci0+b2lkKSB7CiAJY2FzZSBVTUFDX1dJRklfSUZfQ01EX1NFVF9QUk9GSUxFOgogCQlpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUgPSAxOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJml3bS0+bWxtZV9xdWV1ZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTAxMCw2ICsxMDgxLDcgQEAKIHN0YXRpYyBpbnQgaXdtX250Zl9jYXJkX3N0YXRlKHN0cnVjdCBpd21fcHJpdiAqaXdtLCB1OCAqYnVmLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBidWZfc2l6ZSwgc3RydWN0IGl3bV93aWZpX2NtZCAqY21kKQogeworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBpd21fdG9fd2lwaHkoaXdtKTsKIAlzdHJ1Y3QgaXdtX2xtYWNfY2FyZF9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGl3bV9sbWFjX2NhcmRfc3RhdGUgKikKIAkJCQkoYnVmICsgc2l6ZW9mKHN0cnVjdCBpd21fdW1hY193aWZpX2luX2hkcikpOwogCXUzMiBmbGFncyA9IGxlMzJfdG9fY3B1KHN0YXRlLT5mbGFncyk7CkBAIC0xMDE4LDEwICsxMDkwLDcgQEAKIAkJIGZsYWdzICYgSVdNX0NBUkRfU1RBVEVfSFdfRElTQUJMRUQgPyAiT04iIDogIk9GRiIsCiAJCSBmbGFncyAmIElXTV9DQVJEX1NUQVRFX0NUS0lMTF9ESVNBQkxFRCA/ICJPTiIgOiAiT0ZGIik7CiAKLQlpZiAoZmxhZ3MgJiBJV01fQ0FSRF9TVEFURV9IV19ESVNBQkxFRCkKLQkJc2V0X2JpdChJV01fUkFESU9fUkZLSUxMX0hXLCAmaXdtLT5yYWRpbyk7Ci0JZWxzZQotCQljbGVhcl9iaXQoSVdNX1JBRElPX1JGS0lMTF9IVywgJml3bS0+cmFkaW8pOworCXdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUod2lwaHksIGZsYWdzICYgSVdNX0NBUkRfU1RBVEVfSFdfRElTQUJMRUQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzYyLDEzICsxNDMxLDEzIEBACiAKIAkJc2tiLT5kZXYgPSBpd21fdG9fbmRldihpd20pOwogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCQltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKIAogCQluZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCW5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCi0JCWlmIChuZXRpZl9yeChza2IpID09IE5FVF9SWF9EUk9QKSB7CisJCWlmIChuZXRpZl9yeF9uaShza2IpID09IE5FVF9SWF9EUk9QKSB7CiAJCQlJV01fRVJSKGl3bSwgIlBhY2tldCBkcm9wcGVkXG4iKTsKIAkJCW5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9zZGlvLmMKaW5kZXggOTE2NjgxODMuLjhiMWRlODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9zZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3NkaW8uYwpAQCAtNjUsNiArNjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpby5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2Z1bmMuaD4KIApAQCAtNDkyLDcgKzQ5Myw4IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgaXdtX3NkaW9faWRzW10gPSB7Ci0JeyBTRElPX0RFVklDRShTRElPX1ZFTkRPUl9JRF9JTlRFTCwgU0RJT19ERVZJQ0VfSURfSVdNKSB9LAorCXsgU0RJT19ERVZJQ0UoU0RJT19WRU5ET1JfSURfSU5URUwsCisJCSAgICAgIFNESU9fREVWSUNFX0lEX0lOVEVMX0lXTUMzMjAwV0lGSSkgfSwKIAl7IC8qIGVuZDogYWxsIHplcm9lcyAqLwl9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoc2RpbywgaXdtX3NkaW9faWRzKTsKQEAgLTUwNiwxMSArNTA4LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaXdtX3NkaW9faW5pdF9tb2R1bGUodm9pZCkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoJml3bV9zZGlvX2RyaXZlcik7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBzZGlvX3JlZ2lzdGVyX2RyaXZlcigmaXdtX3NkaW9fZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGl3bV9zZGlvX2V4aXRfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3NkaW8uaAppbmRleCBiM2MxNTZiLi5hYWI2YjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvc2Rpby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9zZGlvLmgKQEAgLTM5LDkgKzM5LDYgQEAKICNpZm5kZWYgX19JV01fU0RJT19IX18KICNkZWZpbmUgX19JV01fU0RJT19IX18KIAotI2RlZmluZSBTRElPX1ZFTkRPUl9JRF9JTlRFTCAweDg5Ci0jZGVmaW5lIFNESU9fREVWSUNFX0lEX0lXTSAgIDB4MTQwMwotCiAjZGVmaW5lIElXTV9TRElPX0RBVEFfQUREUiAgICAgICAgICAgMHgwCiAjZGVmaW5lIElXTV9TRElPX0lOVFJfRU5BQkxFX0FERFIgICAgMHgxNAogI2RlZmluZSBJV01fU0RJT19JTlRSX1NUQVRVU19BRERSICAgIDB4MTMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS91bWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvdW1hYy5oCmluZGV4IDRhOTVjY2UuLmM1YTE0YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS91bWFjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3VtYWMuaApAQCAtNDk1LDYgKzQ5NSw4IEBACiAjZGVmaW5lIFdJRklfREJHX0lGX05URllfQ09FWF9IQU5ETEVfRU5WRUxPUAkJMHhFOAogI2RlZmluZSBXSUZJX0RCR19JRl9OVEZZX0NPRVhfSEFORExFX1JFTEVBU0VfRU5WRUxPUAkweEU5CiAKKyNkZWZpbmUgV0lGSV9JRl9OVEZZX01BWCAweGZmCisKIC8qIE5vdGlmaWNhdGlvbiBzdHJ1Y3R1cmVzICovCiBzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfd2lmaV9pZiB7CiAJc3RydWN0IGl3bV91bWFjX3dpZmlfaW5faGRyIGhkcjsKQEAgLTYxMyw2ICs2MTUsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBpd21fdW1hY19ub3RpZl9pbml0X2NvbXBsZXRlIHsKKwlzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pbl9oZHIgaGRyOwogCV9fbGUxNiBzdGF0dXM7CiAJX19sZTE2IHJlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC02NDEsNiArNjQ0LDExIEBACiAJX19sZTMyIHVtYWNfc3RhdHVzOwogCV9fbGUzMiBsbWFjX3N0YXR1czsKIAlfX2xlMzIgc2Rpb19zdGF0dXM7CisJX19sZTMyIGRibV9zYW1wbGVfY3RybDsKKwlfX2xlMzIgZGJtX2J1Zl9iYXNlOworCV9fbGUzMiBkYm1fYnVmX2VuZDsKKwlfX2xlMzIgZGJtX2J1Zl93cml0ZV9wdHI7CisJX19sZTMyIGRibV9idWZfY3ljbGVfY250OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBpd21fdW1hY19ub3RpZl9lcnJvciB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvd2V4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3dleHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg0Yzk0ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvd2V4dC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzIzICswLDAgQEAKLS8qCi0gKiBJbnRlbCBXaXJlbGVzcyBNdWx0aWNvbW0gMzIwMCBXaUZpIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbiA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIFNhbXVlbCBPcnRpeiA8c2FtdWVsLm9ydGl6QGludGVsLmNvbT4KLSAqIFpodSBZaSA8eWkuemh1QGludGVsLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCi0gKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLQotI2luY2x1ZGUgIml3bS5oIgotI2luY2x1ZGUgInVtYWMuaCIKLSNpbmNsdWRlICJjb21tYW5kcy5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqaXdtX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20oZGV2KTsKLQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJml3bS0+d3N0YXRzOwotCi0JaWYgKCF0ZXN0X2JpdChJV01fU1RBVFVTX0FTU09DSUFURUQsICZpd20tPnN0YXR1cykpIHsKLQkJbWVtc2V0KHdzdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBpd19zdGF0aXN0aWNzKSk7Ci0JCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfSU5WQUxJRDsKLQl9Ci0KLQlyZXR1cm4gd3N0YXRzOwotfQotCi1zdGF0aWMgaW50IGl3bV93ZXh0X3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKGRldik7Ci0KLQlpZiAoZnJlcS0+ZmxhZ3MgPT0gSVdfRlJFUV9BVVRPKQotCQlyZXR1cm4gMDsKLQotCS8qIGZyZXF1ZW5jeS9jaGFubmVsIGNhbiBvbmx5IGJlIHNldCBpbiBJQlNTIG1vZGUgKi8KLQlpZiAoaXdtLT5jb25mLm1vZGUgIT0gVU1BQ19NT0RFX0lCU1MpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfc2l3ZnJlcShkZXYsIGluZm8sIGZyZXEsIGV4dHJhKTsKLX0KLQotc3RhdGljIGludCBpd21fd2V4dF9naXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGl3bV9wcml2ICppd20gPSBuZGV2X3RvX2l3bShkZXYpOwotCi0JaWYgKGl3bS0+Y29uZi5tb2RlID09IFVNQUNfTU9ERV9JQlNTKQotCQlyZXR1cm4gY2ZnODAyMTFfaWJzc193ZXh0X2dpd2ZyZXEoZGV2LCBpbmZvLCBmcmVxLCBleHRyYSk7Ci0KLQlmcmVxLT5lID0gMDsKLQlmcmVxLT5tID0gaXdtLT5jaGFubmVsOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXdtX3dleHRfc2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgc3RydWN0IHNvY2thZGRyICphcF9hZGRyLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKGRldik7Ci0KLQlpZiAoaXdtLT5jb25mLm1vZGUgPT0gVU1BQ19NT0RFX0lCU1MpCi0JCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfc2l3YXAoZGV2LCBpbmZvLCBhcF9hZGRyLCBleHRyYSk7Ci0KLQlpZiAoIXRlc3RfYml0KElXTV9TVEFUVVNfUkVBRFksICZpd20tPnN0YXR1cykpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKGlzX3plcm9fZXRoZXJfYWRkcihhcF9hZGRyLT5zYV9kYXRhKSB8fAotCSAgICBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhcF9hZGRyLT5zYV9kYXRhKSkgewotCQlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJjbGVhciBtYW5kYXRvcnkgYnNzaWQgJXBNXG4iLAotCQkJICAgICBpd20tPnVtYWNfcHJvZmlsZS0+YnNzaWRbMF0pOwotCQltZW1zZXQoJml3bS0+dW1hY19wcm9maWxlLT5ic3NpZFswXSwgMCwgRVRIX0FMRU4pOwotCQlpd20tPnVtYWNfcHJvZmlsZS0+YnNzX251bSA9IDA7Ci0JfSBlbHNlIHsKLQkJSVdNX0RCR19XRVhUKGl3bSwgREJHLCAiYWRkIG1hbmRhdG9yeSBic3NpZCAlcE1cbiIsCi0JCQkgICAgIGFwX2FkZHItPnNhX2RhdGEpOwotCQltZW1jcHkoJml3bS0+dW1hY19wcm9maWxlLT5ic3NpZFswXSwgYXBfYWRkci0+c2FfZGF0YSwKLQkJICAgICAgIEVUSF9BTEVOKTsKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPmJzc19udW0gPSAxOwotCX0KLQotCWlmIChpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUpIHsKLQkJaWYgKCFtZW1jbXAoJml3bS0+dW1hY19wcm9maWxlLT5ic3NpZFswXSwgaXdtLT5ic3NpZCwgRVRIX0FMRU4pKQotCQkJcmV0dXJuIDA7Ci0KLQkJaXdtX2ludmFsaWRhdGVfbWxtZV9wcm9maWxlKGl3bSk7Ci0JfQotCi0JaWYgKGl3bS0+dW1hY19wcm9maWxlLT5zc2lkLnNzaWRfbGVuKQotCQlyZXR1cm4gaXdtX3NlbmRfbWxtZV9wcm9maWxlKGl3bSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd21fd2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20oZGV2KTsKLQotCXN3aXRjaCAoaXdtLT5jb25mLm1vZGUpIHsKLQljYXNlIFVNQUNfTU9ERV9JQlNTOgotCQlyZXR1cm4gY2ZnODAyMTFfaWJzc193ZXh0X2dpd2FwKGRldiwgaW5mbywgYXBfYWRkciwgZXh0cmEpOwotCWNhc2UgVU1BQ19NT0RFX0JTUzoKLQkJaWYgKHRlc3RfYml0KElXTV9TVEFUVVNfQVNTT0NJQVRFRCwgJml3bS0+c3RhdHVzKSkgewotCQkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQkJbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBpd20tPmJzc2lkLCBFVEhfQUxFTik7Ci0JCX0gZWxzZQotCQkJbWVtc2V0KCZhcF9hZGRyLT5zYV9kYXRhLCAwLCBFVEhfQUxFTik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd21fd2V4dF9zaXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKnNzaWQpCi17Ci0Jc3RydWN0IGl3bV9wcml2ICppd20gPSBuZGV2X3RvX2l3bShkZXYpOwotCXNpemVfdCBsZW4gPSBkYXRhLT5sZW5ndGg7Ci0JaW50IHJldDsKLQotCWlmIChpd20tPmNvbmYubW9kZSA9PSBVTUFDX01PREVfSUJTUykKLQkJcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9zaXdlc3NpZChkZXYsIGluZm8sIGRhdGEsIHNzaWQpOwotCi0JaWYgKCF0ZXN0X2JpdChJV01fU1RBVFVTX1JFQURZLCAmaXdtLT5zdGF0dXMpKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmIChsZW4gPiAwICYmIHNzaWRbbGVuIC0gMV0gPT0gJ1wwJykKLQkJbGVuLS07Ci0KLQlpZiAoaXdtLT51bWFjX3Byb2ZpbGVfYWN0aXZlKSB7Ci0JCWlmIChpd20tPnVtYWNfcHJvZmlsZS0+c3NpZC5zc2lkX2xlbiA9PSBsZW4gJiYKLQkJICAgICFtZW1jbXAoaXdtLT51bWFjX3Byb2ZpbGUtPnNzaWQuc3NpZCwgc3NpZCwgbGVuKSkKLQkJCXJldHVybiAwOwotCi0JCXJldCA9IGl3bV9pbnZhbGlkYXRlX21sbWVfcHJvZmlsZShpd20pOwotCQlpZiAocmV0IDwgMCkgewotCQkJSVdNX0VSUihpd20sICJDb3VsZG4ndCBpbnZhbGlkYXRlIHByb2ZpbGVcbiIpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCWl3bS0+dW1hY19wcm9maWxlLT5zc2lkLnNzaWRfbGVuID0gbGVuOwotCW1lbWNweShpd20tPnVtYWNfcHJvZmlsZS0+c3NpZC5zc2lkLCBzc2lkLCBsZW4pOwotCi0JcmV0dXJuIGl3bV9zZW5kX21sbWVfcHJvZmlsZShpd20pOwotfQotCi1zdGF0aWMgaW50IGl3bV93ZXh0X2dpd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCkKLXsKLQlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKGRldik7Ci0KLQlpZiAoaXdtLT5jb25mLm1vZGUgPT0gVU1BQ19NT0RFX0lCU1MpCi0JCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfZ2l3ZXNzaWQoZGV2LCBpbmZvLCBkYXRhLCBzc2lkKTsKLQotCWlmICghdGVzdF9iaXQoSVdNX1NUQVRVU19SRUFEWSwgJml3bS0+c3RhdHVzKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlkYXRhLT5sZW5ndGggPSBpd20tPnVtYWNfcHJvZmlsZS0+c3NpZC5zc2lkX2xlbjsKLQlpZiAoZGF0YS0+bGVuZ3RoKSB7Ci0JCW1lbWNweShzc2lkLCBpd20tPnVtYWNfcHJvZmlsZS0+c3NpZC5zc2lkLCBkYXRhLT5sZW5ndGgpOwotCQlkYXRhLT5mbGFncyA9IDE7Ci0JfSBlbHNlCi0JCWRhdGEtPmZsYWdzID0gMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGl3bV9rZXkgKgotaXdtX2tleV9pbml0KHN0cnVjdCBpd21fcHJpdiAqaXdtLCB1OCBrZXlfaWR4LCBib29sIGluX3VzZSwKLQkgICAgIHN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQsIHU4IGFsZykKLXsKLQlzdHJ1Y3QgaXdtX2tleSAqa2V5ID0gJml3bS0+a2V5c1trZXlfaWR4XTsKLQotCW1lbXNldChrZXksIDAsIHNpemVvZihzdHJ1Y3QgaXdtX2tleSkpOwotCW1lbWNweShrZXktPmhkci5tYWMsIGV4dC0+YWRkci5zYV9kYXRhLCBFVEhfQUxFTik7Ci0Ja2V5LT5oZHIua2V5X2lkeCA9IGtleV9pZHg7Ci0JaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV4dC0+YWRkci5zYV9kYXRhKSkKLQkJa2V5LT5oZHIubXVsdGljYXN0ID0gMTsKLQotCWtleS0+aW5fdXNlID0gaW5fdXNlOwotCWtleS0+ZmxhZ3MgPSBleHQtPmV4dF9mbGFnczsKLQlrZXktPmFsZyA9IGFsZzsKLQlrZXktPmtleV9sZW4gPSBleHQtPmtleV9sZW47Ci0JbWVtY3B5KGtleS0+a2V5LCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKLQotCXJldHVybiBrZXk7Ci19Ci0KLXN0YXRpYyBpbnQgaXdtX3dleHRfZ2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgc3RydWN0IGl3X3BhcmFtICpyYXRlLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKGRldik7Ci0KLQlyYXRlLT52YWx1ZSA9IGl3bS0+cmF0ZSAqIDEwMDAwMDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd21fd2V4dF9zaXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5X2J1ZikKLXsKLQlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKGRldik7Ci0Jc3RydWN0IGl3bV9rZXkgKnVuaW5pdGlhbGl6ZWRfdmFyKGtleSk7Ci0JaW50IGlkeCwgaSwgdW5pbml0aWFsaXplZF92YXIoYWxnKSwgcmVtb3ZlID0gMCwgcmV0OwotCi0JSVdNX0RCR19XRVhUKGl3bSwgREJHLCAia2V5IGxlbjogJWRcbiIsIGVycS0+bGVuZ3RoKTsKLQlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJmbGFnczogMHgleFxuIiwgZXJxLT5mbGFncyk7Ci0KLQlpZiAoIWl3bS0+dW1hY19wcm9maWxlKSB7Ci0JCUlXTV9FUlIoaXdtLCAiVU1BQyBwcm9maWxlIG5vdCBhbGxvY2F0ZWQgeWV0XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKGVycS0+bGVuZ3RoID09IFdMQU5fS0VZX0xFTl9XRVA0MCkgewotCQlhbGcgPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF80MDsKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy51Y2FzdF9jaXBoZXIgPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF80MDsKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5tY2FzdF9jaXBoZXIgPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF80MDsKLQl9IGVsc2UgaWYgKGVycS0+bGVuZ3RoID09IFdMQU5fS0VZX0xFTl9XRVAxMDQpIHsKLQkJYWxnID0gVU1BQ19DSVBIRVJfVFlQRV9XRVBfMTA0OwotCQlpd20tPnVtYWNfcHJvZmlsZS0+c2VjLnVjYXN0X2NpcGhlciA9IFVNQUNfQ0lQSEVSX1RZUEVfV0VQXzEwNDsKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5tY2FzdF9jaXBoZXIgPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF8xMDQ7Ci0JfQotCi0JaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5hdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9MRUdBQ1lfUFNLOwotCWVsc2UKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5hdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9PUEVOOwotCi0JaWR4ID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLQlpZiAoaWR4ID09IDApIHsKLQkJaWYgKGl3bS0+ZGVmYXVsdF9rZXkpCi0JCQlmb3IgKGkgPSAwOyBpIDwgSVdNX05VTV9LRVlTOyBpKyspIHsKLQkJCQlpZiAoaXdtLT5kZWZhdWx0X2tleSA9PSAmaXdtLT5rZXlzW2ldKSB7Ci0JCQkJCWlkeCA9IGk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJZWxzZQotCQkJaXdtLT5kZWZhdWx0X2tleSA9ICZpd20tPmtleXNbaWR4XTsKLQl9IGVsc2UgaWYgKGlkeCA8IDEgfHwgaWR4ID4gNCkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UKLQkJaWR4LS07Ci0KLQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkKLQkJcmVtb3ZlID0gMTsKLQllbHNlIGlmIChlcnEtPmxlbmd0aCA9PSAwKSB7Ci0JCWlmICghaXdtLT5rZXlzW2lkeF0uaW5fdXNlKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWl3bS0+ZGVmYXVsdF9rZXkgPSAmaXdtLT5rZXlzW2lkeF07Ci0JfQotCi0JaWYgKGVycS0+bGVuZ3RoKSB7Ci0JCWtleSA9ICZpd20tPmtleXNbaWR4XTsKLQkJbWVtc2V0KGtleSwgMCwgc2l6ZW9mKHN0cnVjdCBpd21fa2V5KSk7Ci0JCW1lbXNldChrZXktPmhkci5tYWMsIDB4ZmYsIEVUSF9BTEVOKTsKLQkJa2V5LT5oZHIua2V5X2lkeCA9IGlkeDsKLQkJa2V5LT5oZHIubXVsdGljYXN0ID0gMTsKLQkJa2V5LT5pbl91c2UgPSAhcmVtb3ZlOwotCQlrZXktPmFsZyA9IGFsZzsKLQkJa2V5LT5rZXlfbGVuID0gZXJxLT5sZW5ndGg7Ci0JCW1lbWNweShrZXktPmtleSwga2V5X2J1ZiwgZXJxLT5sZW5ndGgpOwotCi0JCUlXTV9EQkdfV0VYVChpd20sIERCRywgIlNldHRpbmcga2V5ICVkLCBkZWZhdWx0OiAlZFxuIiwKLQkJCSAgICAgaWR4LCAhIWl3bS0+ZGVmYXVsdF9rZXkpOwotCX0KLQotCWlmIChyZW1vdmUpIHsKLQkJaWYgKChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX05PS0VZKSB8fCAoZXJxLT5sZW5ndGggPT0gMCkpIHsKLQkJCWludCBqOwotCQkJZm9yIChqID0gMDsgaiA8IElXTV9OVU1fS0VZUzsgaisrKQotCQkJCWlmIChpd20tPmtleXNbal0uaW5fdXNlKSB7Ci0JCQkJCXN0cnVjdCBpd21fa2V5ICprID0gJml3bS0+a2V5c1tqXTsKLQotCQkJCQlrLT5pbl91c2UgPSAwOwotCQkJCQlyZXQgPSBpd21fc2V0X2tleShpd20sIHJlbW92ZSwgMCwgayk7Ci0JCQkJCWlmIChyZXQgPCAwKQotCQkJCQkJcmV0dXJuIHJldDsKLQkJCQl9Ci0KLQkJCWl3bS0+dW1hY19wcm9maWxlLT5zZWMudWNhc3RfY2lwaGVyID0KLQkJCQkJCQlVTUFDX0NJUEhFUl9UWVBFX05PTkU7Ci0JCQlpd20tPnVtYWNfcHJvZmlsZS0+c2VjLm1jYXN0X2NpcGhlciA9Ci0JCQkJCQkJVU1BQ19DSVBIRVJfVFlQRV9OT05FOwotCQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5hdXRoX3R5cGUgPQotCQkJCQkJCVVNQUNfQVVUSF9UWVBFX09QRU47Ci0KLQkJCXJldHVybiAwOwotCQl9IGVsc2UgewotCQkJa2V5LT5pbl91c2UgPSAwOwotCQkJcmV0dXJuIGl3bV9zZXRfa2V5KGl3bSwgcmVtb3ZlLCAwLCBrZXkpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBJZiB3ZSBoYXZlbnQgc2V0IGEgcHJvZmlsZSB5ZXQsIHdlIGNhbnQgc2V0IGtleXMuCi0JICogS2V5cyB3aWxsIGJlIHB1c2hlZCBhZnRlciB3ZSdyZSBhc3NvY2lhdGVkLgotCSAqLwotCWlmICghaXdtLT51bWFjX3Byb2ZpbGVfYWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogSWYgdGhlcmUgaXMgYSBjdXJyZW50IGFjdGl2ZSBwcm9maWxlLCBidXQgbm8KLQkgKiBkZWZhdWx0IGtleSwgaXQncyBub3Qgd29ydGggdHJ5aW5nIHRvIGFzc29jaWF0ZSBhZ2Fpbi4KLQkgKi8KLQlpZiAoIWl3bS0+ZGVmYXVsdF9rZXkpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBIZXJlIHdlIGhhdmUgYW4gYWN0aXZlIHByb2ZpbGUsIGJ1dCBhIGtleSBzZXR0aW5nIGNoYW5nZWQuCi0JICogV2UgdGh1cyBoYXZlIHRvIGludmFsaWRhdGUgdGhlIGN1cnJlbnQgcHJvZmlsZSwgYW5kIHB1c2ggdGhlCi0JICogbmV3IG9uZS4gS2V5cyB3aWxsIGJlIHB1c2hlZCB3aGVuIGFzc29jaWF0aW9uIHRha2VzIHBsYWNlLgotCSAqLwotCXJldCA9IGl3bV9pbnZhbGlkYXRlX21sbWVfcHJvZmlsZShpd20pOwotCWlmIChyZXQgPCAwKSB7Ci0JCUlXTV9FUlIoaXdtLCAiQ291bGRuJ3QgaW52YWxpZGF0ZSBwcm9maWxlXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gaXdtX3NlbmRfbWxtZV9wcm9maWxlKGl3bSk7Ci19Ci0KLXN0YXRpYyBpbnQgaXdtX3dleHRfZ2l3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKLXsKLQlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKGRldik7Ci0JaW50IGlkeCwgaTsKLQotCWlkeCA9IGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7Ci0JaWYgKGlkeCA8IDEgfHwgaWR4ID4gNCkgewotCQlpZHggPSAtMTsKLQkJaWYgKCFpd20tPmRlZmF1bHRfa2V5KSB7Ci0JCQllcnEtPmxlbmd0aCA9IDA7Ci0JCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9OT0tFWTsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UKLQkJCWZvciAoaSA9IDA7IGkgPCBJV01fTlVNX0tFWVM7IGkrKykgewotCQkJCWlmIChpd20tPmRlZmF1bHRfa2V5ID09ICZpd20tPmtleXNbaV0pIHsKLQkJCQkJaWR4ID0gaTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQlpZiAoaWR4IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZQotCQlpZHgtLTsKLQotCWVycS0+ZmxhZ3MgPSBpZHggKyAxOwotCi0JaWYgKCFpd20tPmtleXNbaWR4XS5pbl91c2UpIHsKLQkJZXJxLT5sZW5ndGggPSAwOwotCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbWVtY3B5KGtleSwgaXdtLT5rZXlzW2lkeF0ua2V5LAotCSAgICAgICBtaW5fdChpbnQsIGVycS0+bGVuZ3RoLCBpd20tPmtleXNbaWR4XS5rZXlfbGVuKSk7Ci0JZXJxLT5sZW5ndGggPSBpd20tPmtleXNbaWR4XS5rZXlfbGVuOwotCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7Ci0KLQlpZiAoaXdtLT51bWFjX3Byb2ZpbGUtPm1vZGUgPT0gVU1BQ19NT0RFX0JTUykgewotCQlzd2l0Y2ggKGl3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlKSB7Ci0JCWNhc2UgVU1BQ19BVVRIX1RZUEVfT1BFTjoKLQkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bV9zZXRfd3BhX3ZlcnNpb24oc3RydWN0IGl3bV9wcml2ICppd20sIHU4IHdwYV92ZXJzaW9uKQotewotCWlmICh3cGFfdmVyc2lvbiAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMikKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5mbGFncyA9IFVNQUNfU0VDX0ZMR19SU05BX09OX01TSzsKLQllbHNlIGlmICh3cGFfdmVyc2lvbiAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBKQotCQlpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzID0gVU1BQ19TRUNfRkxHX1dQQV9PTl9NU0s7Ci0JZWxzZQotCQlpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzID0gVU1BQ19TRUNfRkxHX0xFR0FDWV9QUk9GSUxFOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXdtX3dleHRfc2l3cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgc3RydWN0IGl3X3BhcmFtICp3cnEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20oZGV2KTsKLQl1MzIgcG93ZXJfaW5kZXg7Ci0KLQlpZiAod3JxLT5kaXNhYmxlZCkgewotCQlwb3dlcl9pbmRleCA9IElXTV9QT1dFUl9JTkRFWF9NSU47Ci0JCWdvdG8gc2V0OwotCX0gZWxzZQotCQlwb3dlcl9pbmRleCA9IElXTV9QT1dFUl9JTkRFWF9ERUZBVUxUOwotCi0Jc3dpdGNoICh3cnEtPmZsYWdzICYgSVdfUE9XRVJfTU9ERSkgewotCWNhc2UgSVdfUE9XRVJfT046Ci0JY2FzZSBJV19QT1dFUl9NT0RFOgotCWNhc2UgSVdfUE9XRVJfQUxMX1I6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotIHNldDoKLQlpZiAocG93ZXJfaW5kZXggPT0gaXdtLT5jb25mLnBvd2VyX2luZGV4KQotCQlyZXR1cm4gMDsKLQotCWl3bS0+Y29uZi5wb3dlcl9pbmRleCA9IHBvd2VyX2luZGV4OwotCi0JcmV0dXJuIGl3bV91bWFjX3NldF9jb25maWdfZml4KGl3bSwgVU1BQ19QQVJBTV9UQkxfQ0ZHX0ZJWCwKLQkJCQkgICAgICAgQ0ZHX1BPV0VSX0lOREVYLCBpd20tPmNvbmYucG93ZXJfaW5kZXgpOwotfQotCi1zdGF0aWMgaW50IGl3bV93ZXh0X2dpd3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20oZGV2KTsKLQotCXdycXUtPnBvd2VyLmRpc2FibGVkID0gKGl3bS0+Y29uZi5wb3dlcl9pbmRleCA9PSBJV01fUE9XRVJfSU5ERVhfTUlOKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bV9zZXRfa2V5X21ndChzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTgga2V5X21ndCkKLXsKLQl1OCAqYXV0aF90eXBlID0gJml3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlOwotCi0JaWYgKGtleV9tZ3QgPT0gSVdfQVVUSF9LRVlfTUdNVF84MDJfMVgpCi0JCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV84MDIxWDsKLQllbHNlIGlmIChrZXlfbWd0ID09IElXX0FVVEhfS0VZX01HTVRfUFNLKSB7Ci0JCWlmIChpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzICYKLQkJICAgIChVTUFDX1NFQ19GTEdfV1BBX09OX01TSyB8IFVNQUNfU0VDX0ZMR19SU05BX09OX01TSykpCi0JCQkqYXV0aF90eXBlID0gVU1BQ19BVVRIX1RZUEVfUlNOQV9QU0s7Ci0JCWVsc2UKLQkJCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9MRUdBQ1lfUFNLOwotCX0gZWxzZSB7Ci0JCUlXTV9FUlIoaXdtLCAiSW52YWxpZCBrZXkgbWd0OiAweCV4XG4iLCBrZXlfbWd0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXdtX3NldF9jaXBoZXIoc3RydWN0IGl3bV9wcml2ICppd20sIHU4IGNpcGhlciwgdTggdWNhc3QpCi17Ci0JdTggKnByb2ZpbGVfY2lwaGVyID0gdWNhc3QgPyAmaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy51Y2FzdF9jaXBoZXIgOgotCQkmaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5tY2FzdF9jaXBoZXI7Ci0KLQlzd2l0Y2ggKGNpcGhlcikgewotCWNhc2UgSVdfQVVUSF9DSVBIRVJfTk9ORToKLQkJKnByb2ZpbGVfY2lwaGVyID0gVU1BQ19DSVBIRVJfVFlQRV9OT05FOwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfQ0lQSEVSX1dFUDQwOgotCQkqcHJvZmlsZV9jaXBoZXIgPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF80MDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9US0lQOgotCQkqcHJvZmlsZV9jaXBoZXIgPSBVTUFDX0NJUEhFUl9UWVBFX1RLSVA7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9DSVBIRVJfQ0NNUDoKLQkJKnByb2ZpbGVfY2lwaGVyID0gVU1BQ19DSVBIRVJfVFlQRV9DQ01QOwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfQ0lQSEVSX1dFUDEwNDoKLQkJKnByb2ZpbGVfY2lwaGVyID0gVU1BQ19DSVBIRVJfVFlQRV9XRVBfMTA0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlJV01fRVJSKGl3bSwgIlVuc3VwcG9ydGVkIGNpcGhlcjogMHgleFxuIiwgY2lwaGVyKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd21fc2V0X2F1dGhfYWxnKHN0cnVjdCBpd21fcHJpdiAqaXdtLCB1OCBhdXRoX2FsZykKLXsKLQl1OCAqYXV0aF90eXBlID0gJml3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlOwotCi0Jc3dpdGNoIChhdXRoX2FsZykgewotCWNhc2UgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU06Ci0JCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9PUEVOOwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfQUxHX1NIQVJFRF9LRVk6Ci0JCWlmIChpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzICYKLQkJICAgIChVTUFDX1NFQ19GTEdfV1BBX09OX01TSyB8IFVNQUNfU0VDX0ZMR19SU05BX09OX01TSykpIHsKLQkJCWlmICgqYXV0aF90eXBlID09IFVNQUNfQVVUSF9UWVBFXzgwMjFYKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJKmF1dGhfdHlwZSA9IFVNQUNfQVVUSF9UWVBFX1JTTkFfUFNLOwotCQl9IGVsc2UgewotCQkJKmF1dGhfdHlwZSA9IFVNQUNfQVVUSF9UWVBFX0xFR0FDWV9QU0s7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX0FMR19MRUFQOgotCWRlZmF1bHQ6Ci0JCUlXTV9FUlIoaXdtLCAiVW5zdXBwb3J0ZWQgYXV0aCBhbGc6IDB4JXhcbiIsIGF1dGhfYWxnKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd21fd2V4dF9zaXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20oZGV2KTsKLQlpbnQgcmV0OwotCi0JaWYgKChkYXRhLT5mbGFncykgJgotCSAgICAoSVdfQVVUSF9XUEFfVkVSU0lPTiB8IElXX0FVVEhfS0VZX01HTVQgfAotCSAgICAgSVdfQVVUSF9XUEFfRU5BQkxFRCB8IElXX0FVVEhfODAyMTFfQVVUSF9BTEcpKSB7Ci0JCS8qIFdlIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgY3VycmVudCBwcm9maWxlICovCi0JCWlmIChpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUpIHsKLQkJCXJldCA9IGl3bV9pbnZhbGlkYXRlX21sbWVfcHJvZmlsZShpd20pOwotCQkJaWYgKHJldCA8IDApIHsKLQkJCQlJV01fRVJSKGl3bSwgIkNvdWxkbid0IGludmFsaWRhdGUgcHJvZmlsZVxuIik7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJfQotCX0KLQotCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0JY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgotCQlyZXR1cm4gaXdtX3NldF93cGFfdmVyc2lvbihpd20sIGRhdGEtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKLQkJcmV0dXJuIGl3bV9zZXRfY2lwaGVyKGl3bSwgZGF0YS0+dmFsdWUsIDEpOwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgotCQlyZXR1cm4gaXdtX3NldF9jaXBoZXIoaXdtLCBkYXRhLT52YWx1ZSwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKLQkJcmV0dXJuIGl3bV9zZXRfa2V5X21ndChpd20sIGRhdGEtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlyZXR1cm4gaXdtX3NldF9hdXRoX2FsZyhpd20sIGRhdGEtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd21fd2V4dF9naXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bV93ZXh0X3Npd2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGl3bV9wcml2ICppd20gPSBuZGV2X3RvX2l3bShkZXYpOwotCXN0cnVjdCBpd21fa2V5ICprZXk7Ci0Jc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKSBleHRyYTsKLQlpbnQgdW5pbml0aWFsaXplZF92YXIoYWxnKSwgaWR4LCBpLCByZW1vdmUgPSAwOwotCi0JSVdNX0RCR19XRVhUKGl3bSwgREJHLCAiYWxnOiAweCV4XG4iLCBleHQtPmFsZyk7Ci0JSVdNX0RCR19XRVhUKGl3bSwgREJHLCAia2V5IGxlbjogJWRcbiIsIGV4dC0+a2V5X2xlbik7Ci0JSVdNX0RCR19XRVhUKGl3bSwgREJHLCAiZXh0X2ZsYWdzOiAweCV4XG4iLCBleHQtPmV4dF9mbGFncyk7Ci0JSVdNX0RCR19XRVhUKGl3bSwgREJHLCAiZmxhZ3M6IDB4JXhcbiIsIGVycS0+ZmxhZ3MpOwotCUlXTV9EQkdfV0VYVChpd20sIERCRywgImxlbmd0aDogMHgleFxuIiwgZXJxLT5sZW5ndGgpOwotCi0Jc3dpdGNoIChleHQtPmFsZykgewotCWNhc2UgSVdfRU5DT0RFX0FMR19OT05FOgotCQlyZW1vdmUgPSAxOwotCQlicmVhazsKLQljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgotCQlpZiAoZXh0LT5rZXlfbGVuID09IFdMQU5fS0VZX0xFTl9XRVA0MCkKLQkJCWFsZyA9IFVNQUNfQ0lQSEVSX1RZUEVfV0VQXzQwOwotCQllbHNlIGlmIChleHQtPmtleV9sZW4gPT0gV0xBTl9LRVlfTEVOX1dFUDEwNCkKLQkJCWFsZyA9IFVNQUNfQ0lQSEVSX1RZUEVfV0VQXzEwNDsKLQkJZWxzZSB7Ci0JCQlJV01fRVJSKGl3bSwgIkludmFsaWQga2V5IGxlbmd0aDogJWRcbiIsIGV4dC0+a2V5X2xlbik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWJyZWFrOwotCWNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgotCQlhbGcgPSBVTUFDX0NJUEhFUl9UWVBFX1RLSVA7Ci0JCWJyZWFrOwotCWNhc2UgSVdfRU5DT0RFX0FMR19DQ01QOgotCQlhbGcgPSBVTUFDX0NJUEhFUl9UWVBFX0NDTVA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlpZHggPSBlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwotCi0JaWYgKGlkeCA9PSAwKSB7Ci0JCWlmIChpd20tPmRlZmF1bHRfa2V5KQotCQkJZm9yIChpID0gMDsgaSA8IElXTV9OVU1fS0VZUzsgaSsrKSB7Ci0JCQkJaWYgKGl3bS0+ZGVmYXVsdF9rZXkgPT0gJml3bS0+a2V5c1tpXSkgewotCQkJCQlpZHggPSBpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JfSBlbHNlIGlmIChpZHggPCAxIHx8IGlkeCA+IDQpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlCi0JCWlkeC0tOwotCi0JaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCi0JCXJlbW92ZSA9IDE7Ci0JZWxzZSBpZiAoKGVycS0+bGVuZ3RoID09IDApIHx8Ci0JCSAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkpKSB7Ci0JCWl3bS0+ZGVmYXVsdF9rZXkgPSAmaXdtLT5rZXlzW2lkeF07Ci0JCWlmIChpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUgJiYgZXh0LT5hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApCi0JCQlyZXR1cm4gaXdtX3NldF90eF9rZXkoaXdtLCBpZHgpOwotCX0KLQotCWtleSA9IGl3bV9rZXlfaW5pdChpd20sIGlkeCwgIXJlbW92ZSwgZXh0LCBhbGcpOwotCi0JcmV0dXJuIGl3bV9zZXRfa2V5KGl3bSwgcmVtb3ZlLCAhaXdtLT5kZWZhdWx0X2tleSwga2V5KTsKLX0KLQotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgaXdtX2hhbmRsZXJzW10gPQotewotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXQ09NTUlUICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3bmFtZSwJCS8qIFNJT0NHSVdOQU1FICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdOV0lEICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdOV0lEICovCi0JKGl3X2hhbmRsZXIpIGl3bV93ZXh0X3Npd2ZyZXEsCQkJLyogU0lPQ1NJV0ZSRVEgKi8KLQkoaXdfaGFuZGxlcikgaXdtX3dleHRfZ2l3ZnJlcSwJCQkvKiBTSU9DR0lXRlJFUSAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd21vZGUsCQkvKiBTSU9DU0lXTU9ERSAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd21vZGUsCQkvKiBTSU9DR0lXTU9ERSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXU0VOUyAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXU0VOUyAqLwotCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1JBTkdFICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3cmFuZ2UsCQkvKiBTSU9DR0lXUkFOR0UgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdQUklWICovCi0JKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sCQkvKiBTSU9DR0lXUFJJViAqLwotCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1NUQVRTICovCi0JKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sCQkvKiBTSU9DR0lXU1RBVFMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1NQWSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXU1BZICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdUSFJTUFkgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV1RIUlNQWSAqLwotCShpd19oYW5kbGVyKSBpd21fd2V4dF9zaXdhcCwJICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdBUCAqLwotCShpd19oYW5kbGVyKSBpd21fd2V4dF9naXdhcCwJCQkvKiBTSU9DR0lXQVAgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkgICAgICAgIC8qIFNJT0NTSVdNTE1FICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdBUExJU1QgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdzY2FuLAkJLyogU0lPQ1NJV1NDQU4gKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdzY2FuLAkJLyogU0lPQ0dJV1NDQU4gKi8KLQkoaXdfaGFuZGxlcikgaXdtX3dleHRfc2l3ZXNzaWQsCQkJLyogU0lPQ1NJV0VTU0lEICovCi0JKGl3X2hhbmRsZXIpIGl3bV93ZXh0X2dpd2Vzc2lkLAkJCS8qIFNJT0NHSVdFU1NJRCAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXTklDS04gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV05JQ0tOICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXUkFURSAqLwotCShpd19oYW5kbGVyKSBpd21fd2V4dF9naXdyYXRlLAkJCS8qIFNJT0NHSVdSQVRFICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3cnRzLAkJLyogU0lPQ1NJV1JUUyAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3J0cywJCS8qIFNJT0NHSVdSVFMgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdmcmFnLAkgICAgICAgIC8qIFNJT0NTSVdGUkFHICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3ZnJhZywJCS8qIFNJT0NHSVdGUkFHICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdUWFBPVyAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXVFhQT1cgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1JFVFJZICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdSRVRSWSAqLwotCShpd19oYW5kbGVyKSBpd21fd2V4dF9zaXdlbmNvZGUsCQkvKiBTSU9DU0lXRU5DT0RFICovCi0JKGl3X2hhbmRsZXIpIGl3bV93ZXh0X2dpd2VuY29kZSwJCS8qIFNJT0NHSVdFTkNPREUgKi8KLQkoaXdfaGFuZGxlcikgaXdtX3dleHRfc2l3cG93ZXIsCQkJLyogU0lPQ1NJV1BPV0VSICovCi0JKGl3X2hhbmRsZXIpIGl3bV93ZXh0X2dpd3Bvd2VyLAkJCS8qIFNJT0NHSVdQT1dFUiAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DU0lXR0VOSUUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV0dFTklFICovCi0JKGl3X2hhbmRsZXIpIGl3bV93ZXh0X3Npd2F1dGgsCQkJLyogU0lPQ1NJV0FVVEggKi8KLQkoaXdfaGFuZGxlcikgaXdtX3dleHRfZ2l3YXV0aCwJCQkvKiBTSU9DR0lXQVVUSCAqLwotCShpd19oYW5kbGVyKSBpd21fd2V4dF9zaXdlbmNvZGVleHQsCSAgICAgICAgLyogU0lPQ1NJV0VOQ09ERUVYVCAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXRU5DT0RFRVhUICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdQTUtTQSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCi19OwotCi1jb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgaXdtX2l3X2hhbmRsZXJfZGVmID0gewotCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKGl3bV9oYW5kbGVycyksCi0JLnN0YW5kYXJkCT0gKGl3X2hhbmRsZXIgKikgaXdtX2hhbmRsZXJzLAotCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBpd21fZ2V0X3dpcmVsZXNzX3N0YXRzLAotfTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Fzc29jLmMKaW5kZXggYjliMzc0MS4uZGQ4NzMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9hc3NvYy5jCkBAIC0zNCw3ICszNCw4IEBACiAgKgogICogIEBwYXJhbSBwcml2ICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQogICogIEBwYXJhbSByYXRlcyAgICAgICB0aGUgYnVmZmVyIHdoaWNoIGtlZXBzIGlucHV0IGFuZCBvdXRwdXQKLSAqICBAcGFyYW0gcmF0ZXNfc2l6ZSAgdGhlIHNpemUgb2YgcmF0ZTEgYnVmZmVyOyBuZXcgc2l6ZSBvZiBidWZmZXIgb24gcmV0dXJuCisgKiAgQHBhcmFtIHJhdGVzX3NpemUgIHRoZSBzaXplIG9mIHJhdGVzIGJ1ZmZlcjsgbmV3IHNpemUgb2YgYnVmZmVyIG9uIHJldHVybiwKKyAqICAgICAgICAgICAgICAgICAgICAgd2hpY2ggd2lsbCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gb3JpZ2luYWwgcmF0ZXNfc2l6ZQogICoKICAqICBAcmV0dXJuICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciAtMSBvbiBlcnJvcgogICovCkBAIC00Miw0MiArNDMsNDIgQEAKIAl1OCAqcmF0ZXMsCiAJdTE2ICpyYXRlc19zaXplKQogewotCXU4ICpjYXJkX3JhdGVzID0gbGJzX2JnX3JhdGVzOwotCXNpemVfdCBudW1fY2FyZF9yYXRlcyA9IHNpemVvZihsYnNfYmdfcmF0ZXMpOwotCWludCByZXQgPSAwLCBpLCBqOwotCXU4IHRtcFszMF07Ci0Jc2l6ZV90IHRtcF9zaXplID0gMDsKKwlpbnQgaSwgajsKKwl1OCBpbnRlcnNlY3Rpb25bTUFYX1JBVEVTXTsKKwl1MTYgaW50ZXJzZWN0aW9uX3NpemU7CisJdTE2IG51bV9yYXRlcyA9IDA7CiAKLQkvKiBGb3IgZWFjaCByYXRlIGluIGNhcmRfcmF0ZXMgdGhhdCBleGlzdHMgaW4gcmF0ZTEsIGNvcHkgdG8gdG1wICovCi0JZm9yIChpID0gMDsgY2FyZF9yYXRlc1tpXSAmJiAoaSA8IG51bV9jYXJkX3JhdGVzKTsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IHJhdGVzW2pdICYmIChqIDwgKnJhdGVzX3NpemUpOyBqKyspIHsKLQkJCWlmIChyYXRlc1tqXSA9PSBjYXJkX3JhdGVzW2ldKQotCQkJCXRtcFt0bXBfc2l6ZSsrXSA9IGNhcmRfcmF0ZXNbaV07CisJaW50ZXJzZWN0aW9uX3NpemUgPSBtaW5fdCh1MTYsICpyYXRlc19zaXplLCBBUlJBWV9TSVpFKGludGVyc2VjdGlvbikpOworCisJLyogQWxsb3cgZWFjaCByYXRlIGZyb20gJ3JhdGVzJyB0aGF0IGlzIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsYnNfYmdfcmF0ZXMpICYmIGxic19iZ19yYXRlc1tpXTsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBpbnRlcnNlY3Rpb25fc2l6ZSAmJiByYXRlc1tqXTsgaisrKSB7CisJCQlpZiAocmF0ZXNbal0gPT0gbGJzX2JnX3JhdGVzW2ldKQorCQkJCWludGVyc2VjdGlvbltudW1fcmF0ZXMrK10gPSByYXRlc1tqXTsKIAkJfQogCX0KIAogCWxic19kZWJfaGV4KExCU19ERUJfSk9JTiwgIkFQIHJhdGVzICAgICIsIHJhdGVzLCAqcmF0ZXNfc2l6ZSk7Ci0JbGJzX2RlYl9oZXgoTEJTX0RFQl9KT0lOLCAiY2FyZCByYXRlcyAgIiwgY2FyZF9yYXRlcywgbnVtX2NhcmRfcmF0ZXMpOwotCWxic19kZWJfaGV4KExCU19ERUJfSk9JTiwgImNvbW1vbiByYXRlcyIsIHRtcCwgdG1wX3NpemUpOworCWxic19kZWJfaGV4KExCU19ERUJfSk9JTiwgImNhcmQgcmF0ZXMgICIsIGxic19iZ19yYXRlcywKKwkJCUFSUkFZX1NJWkUobGJzX2JnX3JhdGVzKSk7CisJbGJzX2RlYl9oZXgoTEJTX0RFQl9KT0lOLCAiY29tbW9uIHJhdGVzIiwgaW50ZXJzZWN0aW9uLCBudW1fcmF0ZXMpOwogCWxic19kZWJfam9pbigiVFggZGF0YSByYXRlIDB4JTAyeFxuIiwgcHJpdi0+Y3VyX3JhdGUpOwogCiAJaWYgKCFwcml2LT5lbmFibGVod2F1dG8pIHsKLQkJZm9yIChpID0gMDsgaSA8IHRtcF9zaXplOyBpKyspIHsKLQkJCWlmICh0bXBbaV0gPT0gcHJpdi0+Y3VyX3JhdGUpCisJCWZvciAoaSA9IDA7IGkgPCBudW1fcmF0ZXM7IGkrKykgeworCQkJaWYgKGludGVyc2VjdGlvbltpXSA9PSBwcml2LT5jdXJfcmF0ZSkKIAkJCQlnb3RvIGRvbmU7CiAJCX0KIAkJbGJzX3ByX2FsZXJ0KCJQcmV2aW91c2x5IHNldCBmaXhlZCBkYXRhIHJhdGUgJSN4IGlzbid0ICIKIAkJICAgICAgICJjb21wYXRpYmxlIHdpdGggdGhlIG5ldHdvcmsuXG4iLCBwcml2LT5jdXJfcmF0ZSk7Ci0JCXJldCA9IC0xOwotCQlnb3RvIGRvbmU7CisJCXJldHVybiAtMTsKIAl9Ci0JcmV0ID0gMDsKIAogZG9uZToKIAltZW1zZXQocmF0ZXMsIDAsICpyYXRlc19zaXplKTsKLQkqcmF0ZXNfc2l6ZSA9IG1pbl90KGludCwgdG1wX3NpemUsICpyYXRlc19zaXplKTsKLQltZW1jcHkocmF0ZXMsIHRtcCwgKnJhdGVzX3NpemUpOwotCXJldHVybiByZXQ7CisJKnJhdGVzX3NpemUgPSBudW1fcmF0ZXM7CisJbWVtY3B5KHJhdGVzLCBpbnRlcnNlY3Rpb24sIG51bV9yYXRlcyk7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTI5LDcgKzEzMCw2IEBACiB7CiAJc3RydWN0IGNtZF9kc184MDJfMTFfYXV0aGVudGljYXRlIGNtZDsKIAlpbnQgcmV0ID0gLTE7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfSk9JTik7CiAKQEAgLTEzOCw4ICsxMzgsNyBAQAogCiAJY21kLmF1dGh0eXBlID0gaXdfYXV0aF90b19pZWVlX2F1dGgoYXV0aCk7CiAKLQlsYnNfZGViX2pvaW4oIkFVVEhfQ01EOiBCU1NJRCAlcywgYXV0aCAweCV4XG4iLAotCQlwcmludF9tYWMobWFjLCBic3NpZCksIGNtZC5hdXRodHlwZSk7CisJbGJzX2RlYl9qb2luKCJBVVRIX0NNRDogQlNTSUQgJXBNLCBhdXRoIDB4JXhcbiIsIGJzc2lkLCBjbWQuYXV0aHR5cGUpOwogCiAJcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF84MDJfMTFfQVVUSEVOVElDQVRFLCAmY21kKTsKIApAQCAtMzIxLDggKzMyMCw4IEBACiAKIAlyYXRlcyA9IChzdHJ1Y3QgbXJ2bF9pZV9yYXRlc19wYXJhbV9zZXQgKikgcG9zOwogCXJhdGVzLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1JBVEVTKTsKLQltZW1jcHkoJnJhdGVzLT5yYXRlcywgJmJzcy0+cmF0ZXMsIE1BWF9SQVRFUyk7Ci0JdG1wbGVuID0gTUFYX1JBVEVTOworCXRtcGxlbiA9IG1pbl90KHUxNiwgQVJSQVlfU0laRShic3MtPnJhdGVzKSwgTUFYX1JBVEVTKTsKKwltZW1jcHkoJnJhdGVzLT5yYXRlcywgJmJzcy0+cmF0ZXMsIHRtcGxlbik7CiAJaWYgKGdldF9jb21tb25fcmF0ZXMocHJpdiwgcmF0ZXMtPnJhdGVzLCAmdG1wbGVuKSkgewogCQlyZXQgPSAtMTsKIAkJZ290byBkb25lOwpAQCAtMzQyLDggKzM0MSw2IEBACiAKIAkvKiBGaXJtd2FyZSB2OSsgaW5kaWNhdGUgYXV0aGVudGljYXRpb24gc3VpdGVzIGFzIGEgVExWICovCiAJaWYgKHByaXYtPmZ3cmVsZWFzZSA+PSAweDA5MDAwMDAwKSB7Ci0JCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCiAJCWF1dGggPSAoc3RydWN0IG1ydmxfaWVfYXV0aF90eXBlICopIHBvczsKIAkJYXV0aC0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9BVVRIX1RZUEUpOwogCQlhdXRoLT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYoMik7CkBAIC0zNTEsOCArMzQ4LDggQEAKIAkJYXV0aC0+YXV0aCA9IGNwdV90b19sZTE2KHRtcGF1dGgpOwogCQlwb3MgKz0gc2l6ZW9mKGF1dGgtPmhlYWRlcikgKyAyOwogCi0JCWxic19kZWJfam9pbigiQVVUSF9DTUQ6IEJTU0lEICVzLCBhdXRoIDB4JXhcbiIsCi0JCQlwcmludF9tYWMobWFjLCBic3MtPmJzc2lkKSwgcHJpdi0+c2VjaW5mby5hdXRoX21vZGUpOworCQlsYnNfZGViX2pvaW4oIkFVVEhfQ01EOiBCU1NJRCAlcE0sIGF1dGggMHgleFxuIiwKKwkJCWJzcy0+YnNzaWQsIHByaXYtPnNlY2luZm8uYXV0aF9tb2RlKTsKIAl9CiAKIAkvKiBXUEEvV1BBMiBJRXMgKi8KQEAgLTU5OCw3ICs1OTUsNyBAQAogCiAJLyogQ29weSBEYXRhIHJhdGVzIGZyb20gdGhlIHJhdGVzIHJlY29yZGVkIGluIHNjYW4gcmVzcG9uc2UgKi8KIAltZW1zZXQoY21kLmJzcy5yYXRlcywgMCwgc2l6ZW9mKGNtZC5ic3MucmF0ZXMpKTsKLQlyYXRlc2l6ZSA9IG1pbl90KHUxNiwgc2l6ZW9mKGNtZC5ic3MucmF0ZXMpLCBNQVhfUkFURVMpOworCXJhdGVzaXplID0gbWluX3QodTE2LCBBUlJBWV9TSVpFKGNtZC5ic3MucmF0ZXMpLCBBUlJBWV9TSVpFIChic3MtPnJhdGVzKSk7CiAJbWVtY3B5KGNtZC5ic3MucmF0ZXMsIGJzcy0+cmF0ZXMsIHJhdGVzaXplKTsKIAlpZiAoZ2V0X2NvbW1vbl9yYXRlcyhwcml2LCBjbWQuYnNzLnJhdGVzLCAmcmF0ZXNpemUpKSB7CiAJCWxic19kZWJfam9pbigiQURIT0NfSk9JTjogZ2V0X2NvbW1vbl9yYXRlcyByZXR1cm5lZCBlcnJvci5cbiIpOwpAQCAtMTM2OCwxMSArMTM2NSwxNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCisJbWVtY3B5KCZwcml2LT53cGFfdW5pY2FzdF9rZXksICZhc3NvY19yZXEtPndwYV91bmljYXN0X2tleSwKKwkJCXNpemVvZihzdHJ1Y3QgZW5jX2tleSkpOworCiAJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfV1BBX01DQVNUX0tFWSwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7CiAJCWNsZWFyX2JpdChBU1NPQ19GTEFHX1dQQV9VQ0FTVF9LRVksICZhc3NvY19yZXEtPmZsYWdzKTsKIAogCQlyZXQgPSBsYnNfY21kXzgwMl8xMV9rZXlfbWF0ZXJpYWwocHJpdiwgQ01EX0FDVF9TRVQsIGFzc29jX3JlcSk7CiAJCWFzc29jX3JlcS0+ZmxhZ3MgPSBmbGFnczsKKworCQltZW1jcHkoJnByaXYtPndwYV9tY2FzdF9rZXksICZhc3NvY19yZXEtPndwYV9tY2FzdF9rZXksCisJCQkJc2l6ZW9mKHN0cnVjdCBlbmNfa2V5KSk7CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMKaW5kZXggODExZmZjMy4uODkzYTU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYwpAQCAtNDUsNiArNDUsOCBAQAogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAljaGFyICpidWYgPSAoY2hhciAqKWFkZHI7CiAJc3NpemVfdCByZXM7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJcG9zICs9IHNucHJpbnRmKGJ1Zitwb3MsIGxlbi1wb3MsICJzdGF0ZSA9ICVzXG4iLAogCQkJCXN6U3RhdGVzW3ByaXYtPmNvbm5lY3Rfc3RhdHVzXSk7CkBAIC02OCw2ICs3MCw4IEBACiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOwogCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7CiAJc3RydWN0IGJzc19kZXNjcmlwdG9yICogaXRlcl9ic3M7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJcG9zICs9IHNucHJpbnRmKGJ1Zitwb3MsIGxlbi1wb3MsCiAJCSIjIHwgY2ggIHwgcnNzaSB8ICAgICAgIGJzc2lkICAgICAgIHwgICBjYXAgICAgfCBRdWFsIHwgU1NJRCBcbiIpOwpAQCAtMTEwLDYgKzExNCw4IEBACiAJaW50IHAxLCBwMiwgcDMsIHA0LCBwNSwgcDY7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWNoYXIgKmJ1ZiA9IChjaGFyICopYWRkcjsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlidWZfc2l6ZSA9IG1pbihjb3VudCwgbGVuIC0gMSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkgewpAQCAtMTQ4LDYgKzE1NCw4IEBACiAJc3RydWN0IHNsZWVwX3BhcmFtcyBzcDsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXJldCA9IGxic19jbWRfODAyXzExX3NsZWVwX3BhcmFtcyhwcml2LCBDTURfQUNUX0dFVCwgJnNwKTsKIAlpZiAocmV0KQpAQCAtNDMzLDYgKzQ0MSw4IEBACiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCW9mZnZhbC5vZmZzZXQgPSBwcml2LT5tYWNfb2Zmc2V0OwogCW9mZnZhbC52YWx1ZSA9IDA7CkBAIC00NTcsNiArNDY3LDggQEAKIAlzc2l6ZV90IHJlcywgYnVmX3NpemU7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWNoYXIgKmJ1ZiA9IChjaGFyICopYWRkcjsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlidWZfc2l6ZSA9IG1pbihjb3VudCwgbGVuIC0gMSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgYnVmX3NpemUpKSB7CkBAIC00ODEsNiArNDkzLDggQEAKIAlzdHJ1Y3QgbGJzX29mZnNldF92YWx1ZSBvZmZ2YWw7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWNoYXIgKmJ1ZiA9IChjaGFyICopYWRkcjsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlidWZfc2l6ZSA9IG1pbihjb3VudCwgbGVuIC0gMSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgYnVmX3NpemUpKSB7CkBAIC01MTUsNiArNTI5LDggQEAKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAljaGFyICpidWYgPSAoY2hhciAqKWFkZHI7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJb2ZmdmFsLm9mZnNldCA9IHByaXYtPmJicF9vZmZzZXQ7CiAJb2ZmdmFsLnZhbHVlID0gMDsKQEAgLTU0MCw2ICs1NTYsOCBAQAogCXNzaXplX3QgcmVzLCBidWZfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWJ1Zl9zaXplID0gbWluKGNvdW50LCBsZW4gLSAxKTsKIAlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBidWZfc2l6ZSkpIHsKQEAgLTU2NCw2ICs1ODIsOCBAQAogCXN0cnVjdCBsYnNfb2Zmc2V0X3ZhbHVlIG9mZnZhbDsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWJ1Zl9zaXplID0gbWluKGNvdW50LCBsZW4gLSAxKTsKIAlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBidWZfc2l6ZSkpIHsKQEAgLTU5OCw2ICs2MTgsOCBAQAogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWNoYXIgKmJ1ZiA9IChjaGFyICopYWRkcjsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlvZmZ2YWwub2Zmc2V0ID0gcHJpdi0+cmZfb2Zmc2V0OwogCW9mZnZhbC52YWx1ZSA9IDA7CkBAIC02MjMsNiArNjQ1LDggQEAKIAlzc2l6ZV90IHJlcywgYnVmX3NpemU7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWNoYXIgKmJ1ZiA9IChjaGFyICopYWRkcjsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlidWZfc2l6ZSA9IG1pbihjb3VudCwgbGVuIC0gMSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgYnVmX3NpemUpKSB7CkBAIC02NDcsNiArNjcxLDggQEAKIAlzdHJ1Y3QgbGJzX29mZnNldF92YWx1ZSBvZmZ2YWw7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWNoYXIgKmJ1ZiA9IChjaGFyICopYWRkcjsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlidWZfc2l6ZSA9IG1pbihjb3VudCwgbGVuIC0gMSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgYnVmX3NpemUpKSB7CkBAIC04NTMsNiArODc5LDggQEAKIAlzdHJ1Y3QgZGVidWdfZGF0YSAqZDsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXAgPSBidWY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlY2wuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlY2wuaAppbmRleCAwYjg0YmRjLi44YjE1MzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWNsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVjbC5oCkBAIC02LDcgKzYsNyBAQAogI2lmbmRlZiBfTEJTX0RFQ0xfSF8KICNkZWZpbmUgX0xCU19ERUNMX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAogI2luY2x1ZGUgImRlZnMuaCIKIApAQCAtNDEsNyArNDEsOCBAQAogaW50IGxic19wcm9jZXNzX2NvbW1hbmRfcmVzcG9uc2Uoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1OCAqZGF0YSwgdTMyIGxlbik7CiB2b2lkIGxic19jb21wbGV0ZV9jb21tYW5kKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZCwKIAkJCSAgaW50IHJlc3VsdCk7Ci1pbnQgbGJzX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK25ldGRldl90eF90IGxic19oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBsYnNfc2V0X3JlZ2lvbnRhYmxlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggcmVnaW9uLCB1OCBiYW5kKTsKIAogaW50IGxic19wcm9jZXNzX3J4ZWRfcGFja2V0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IGY5ZWM2OWUuLmQzYjY5YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSAiZGVmcy5oIgogI2luY2x1ZGUgImhvc3RjbWQuaCIKIAotZXh0ZXJuIHN0cnVjdCBldGh0b29sX29wcyBsYnNfZXRodG9vbF9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGxic19ldGh0b29sX29wczsKIAogI2RlZmluZQlNQVhfQlNTSURfUEVSX0NIQU5ORUwJCTE2CiAKQEAgLTI2MCw3ICsyNjAsNiBAQAogCXUxNiBwc21vZGU7CQkvKiBXbGFuODAyXzExUG93ZXJtb2RlQ0FNPWRpc2FibGUKIAkJCQkgICBXbGFuODAyXzExUG93ZXJtb2RlTUFYX1BTUD1lbmFibGUgKi8KIAl1MzIgcHNzdGF0ZTsKLQljaGFyIHBzX3N1cHBvcnRlZDsKIAl1OCBuZWVkdG93YWtldXA7CiAKIAlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIHBlbmRpbmdfYXNzb2NfcmVxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jCmluZGV4IGIxMThhMzUuLjAzOWI1NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ldGh0b29sLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCXJldHVybiBsYnNfaG9zdF9zbGVlcF9jZmcocHJpdiwgY3JpdGVyaWEsIChzdHJ1Y3Qgd29sX2NvbmZpZyAqKU5VTEwpOwogfQogCi1zdHJ1Y3QgZXRodG9vbF9vcHMgbGJzX2V0aHRvb2xfb3BzID0geworY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGxic19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBsYnNfZXRodG9vbF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2VlcHJvbSA9ICBsYnNfZXRodG9vbF9nZXRfZWVwcm9tLAogCS5nZXRfZWVwcm9tX2xlbiA9IGxic19ldGh0b29sX2dldF9lZXByb21fbGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKaW5kZXggMmE1YjA4My4uNjIzODE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCkBAIC01OSw2ICs1OSw3IEBACiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OwogCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdjsKIAl2b2lkIF9faW9tZW0gKmlvYmFzZTsKKwlib29sIGFsaWduX3JlZ3M7CiB9OwogCiAKQEAgLTI3NCwxNiArMjc1LDI1IEBACiAjZGVmaW5lIElGX0NTX1BST0RVQ1RfSUQJCTB4MDAwMDAwMUMKICNkZWZpbmUgSUZfQ1NfQ0Y4Mzg1X0IxX1JFVgkJMHgxMgogI2RlZmluZSBJRl9DU19DRjgzODFfQjNfUkVWCQkweDA0CisjZGVmaW5lIElGX0NTX0NGODMwNV9CMV9SRVYJCTB4MDMKIAogLyoKICAqIFVzZWQgdG8gZGV0ZWN0IG90aGVyIGNhcmRzIHRoYW4gQ0Y4Mzg1IHNpbmNlIHRoZWlyIHJldmlzaW9ucyBvZiBzaWxpY29uCiAgKiBkb2Vzbid0IG1hdGNoIHRob3NlIGZyb20gQ0Y4Mzg1LCBlZy4gQ0Y4MzgxIEIzIHdvcmtzIHdpdGggdGhpcyBkcml2ZXIuCiAgKi8KKyNkZWZpbmUgQ0Y4MzA1X01BTkZJRAkJMHgwMmRiCisjZGVmaW5lIENGODMwNV9DQVJESUQJCTB4ODEwMwogI2RlZmluZSBDRjgzODFfTUFORklECQkweDAyZGIKICNkZWZpbmUgQ0Y4MzgxX0NBUkRJRAkJMHg2MDY0CiAjZGVmaW5lIENGODM4NV9NQU5GSUQJCTB4MDJkZgogI2RlZmluZSBDRjgzODVfQ0FSRElECQkweDgxMDMKIAorc3RhdGljIGlubGluZSBpbnQgaWZfY3NfaHdfaXNfY2Y4MzA1KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3sKKwlyZXR1cm4gKHBfZGV2LT5tYW5mX2lkID09IENGODMwNV9NQU5GSUQgJiYKKwkJcF9kZXYtPmNhcmRfaWQgPT0gQ0Y4MzA1X0NBUkRJRCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGlmX2NzX2h3X2lzX2NmODM4MShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7CiAJcmV0dXJuIChwX2Rldi0+bWFuZl9pZCA9PSBDRjgzODFfTUFORklEICYmCkBAIC01NTYsNyArNTY2LDE1IEBACiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfQ1MpOwogCi0Jc2NyYXRjaCA9IGlmX2NzX3JlYWQ4KGNhcmQsIElGX0NTX1NDUkFUQ0gpOworCS8qCisJICogVGhpcyBpcyB0aGUgb25seSBwbGFjZSB3aGVyZSBhbiB1bmFsaWduZWQgcmVnaXN0ZXIgYWNjZXNzIGhhcHBlbnMgb24KKwkgKiB0aGUgQ0Y4MzA1IGNhcmQsIHRoZXJlZm9yZSBmb3IgdGhlIHNha2Ugb2Ygc3BlZWQgb2YgdGhlIGRyaXZlciwgd2UgZG8KKwkgKiB0aGUgYWxpZ25tZW50IGNvcnJlY3Rpb24gaGVyZS4KKwkgKi8KKwlpZiAoY2FyZC0+YWxpZ25fcmVncykKKwkJc2NyYXRjaCA9IGlmX2NzX3JlYWQxNihjYXJkLCBJRl9DU19TQ1JBVENIKSA+PiA4OworCWVsc2UKKwkJc2NyYXRjaCA9IGlmX2NzX3JlYWQ4KGNhcmQsIElGX0NTX1NDUkFUQ0gpOwogCiAJLyogIklmIHRoZSB2YWx1ZSBpcyAweDVhLCB0aGUgZmlybXdhcmUgaXMgYWxyZWFkeQogCSAqIGRvd25sb2FkZWQgc3VjY2Vzc2Z1bGx5IgpAQCAtODgwLDggKzg5OCwyNCBAQAogCSAgICAgICBwX2Rldi0+aXJxLkFzc2lnbmVkSVJRLCBwX2Rldi0+aW8uQmFzZVBvcnQxLAogCSAgICAgICBwX2Rldi0+aW8uQmFzZVBvcnQxICsgcF9kZXYtPmlvLk51bVBvcnRzMSAtIDEpOwogCisJLyoKKwkgKiBNb3N0IG9mIHRoZSBsaWJlcnRhcyBjYXJkcyBjYW4gZG8gdW5hbGlnbmVkIHJlZ2lzdGVyIGFjY2VzcywgYnV0IHNvbWUKKwkgKiB3ZWlyZCBvbmVzIGNhbiBub3QuIFRoYXQncyBlc3BlY2lhbGx5IHRydWUgZm9yIHRoZSBDRjgzMDUgY2FyZC4KKwkgKi8KKwljYXJkLT5hbGlnbl9yZWdzID0gMDsKKwogCS8qIENoZWNrIGlmIHdlIGhhdmUgYSBjdXJyZW50IHNpbGljb24gKi8KIAlwcm9kX2lkID0gaWZfY3NfcmVhZDgoY2FyZCwgSUZfQ1NfUFJPRFVDVF9JRCk7CisJaWYgKGlmX2NzX2h3X2lzX2NmODMwNShwX2RldikpIHsKKwkJY2FyZC0+YWxpZ25fcmVncyA9IDE7CisJCWlmIChwcm9kX2lkIDwgSUZfQ1NfQ0Y4MzA1X0IxX1JFVikgeworCQkJbGJzX3ByX2Vycigib2xkIGNoaXBzIGxpa2UgODMwNSByZXYgQjMgIgorCQkJCSJhcmVuJ3Qgc3VwcG9ydGVkXG4iKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIG91dDI7CisJCX0KKwl9CisKIAlpZiAoaWZfY3NfaHdfaXNfY2Y4MzgxKHBfZGV2KSAmJiBwcm9kX2lkIDwgSUZfQ1NfQ0Y4MzgxX0IzX1JFVikgewogCQlsYnNfcHJfZXJyKCJvbGQgY2hpcHMgbGlrZSA4MzgxIHJldiBCMyBhcmVuJ3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKQEAgLTg5Niw3ICs5MzAsNyBAQAogCiAJLyogTG9hZCB0aGUgZmlybXdhcmUgZWFybHksIGJlZm9yZSBjYWxsaW5nIGludG8gbGliZXJ0YXMua28gKi8KIAlyZXQgPSBpZl9jc19wcm9nX2hlbHBlcihjYXJkKTsKLQlpZiAocmV0ID09IDApCisJaWYgKHJldCA9PSAwICYmICFpZl9jc19od19pc19jZjgzMDUocF9kZXYpKQogCQlyZXQgPSBpZl9jc19wcm9nX3JlYWwoY2FyZCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQyOwpAQCAtOTMzLDkgKzk2Nyw2IEBACiAJCWdvdG8gb3V0MzsKIAl9CiAKLQkvKiBUaGUgZmlybXdhcmUgZm9yIHRoZSBDRiBjYXJkIHN1cHBvcnRzIHBvd2Vyc2F2ZSAqLwotCXByaXYtPnBzX3N1cHBvcnRlZCA9IDE7Ci0KIAlyZXQgPSAwOwogCWdvdG8gb3V0OwogCkBAIC05NzksNiArMTAxMCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBpZl9jc19pZHNbXSA9IHsKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRChDRjgzMDVfTUFORklELCBDRjgzMDVfQ0FSRElEKSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRChDRjgzODFfTUFORklELCBDRjgzODFfQ0FSRElEKSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRChDRjgzODVfTUFORklELCBDRjgzODVfQ0FSRElEKSwKIAlQQ01DSUFfREVWSUNFX05VTEwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKaW5kZXggOGNkYjg4Yy4uNDg1YThkNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKQEAgLTEwMzksOSArMTAzOSw2IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfYWN0aXZhdGVfY2FyZDsKIAotCWlmIChwcml2LT5md2NhcGluZm8gJiBGV19DQVBJTkZPX1BTKQotCQlwcml2LT5wc19zdXBwb3J0ZWQgPSAxOwotCiBvdXQ6CiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU0RJTywgInJldCAlZCIsIHJldCk7CiAKQEAgLTEwOTYsMTEgKzEwOTMsMTEgQEAKIAkJCWxic19wcl9hbGVydCgiQ01EX0ZVTkNfU0hVVERPV04gY21kIGZhaWxlZFxuIik7CiAJfQogCi0JY2FyZC0+cHJpdi0+c3VycHJpc2VyZW1vdmVkID0gMTsKIAogCWxic19kZWJfc2RpbygiY2FsbCByZW1vdmUgY2FyZFxuIik7CiAJbGJzX3N0b3BfY2FyZChjYXJkLT5wcml2KTsKIAlsYnNfcmVtb3ZlX2NhcmQoY2FyZC0+cHJpdik7CisJY2FyZC0+cHJpdi0+c3VycHJpc2VyZW1vdmVkID0gMTsKIAogCWZsdXNoX3dvcmtxdWV1ZShjYXJkLT53b3JrcXVldWUpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGNhcmQtPndvcmtxdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCmluZGV4IDY1NjQyODIuLjQ0NmUzMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX1NQVV9CVVNfTU9ERV9SRUcsICZydmFsKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCWlmIChydmFsICE9IG1vZGUpIHsKKwlpZiAoKHJ2YWwgJiAweEYpICE9IG1vZGUpIHsKIAkJbGJzX3ByX2VycigiQ2FuJ3QgcmVhZCBidXMgbW9kZSByZWdpc3Rlci5cbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC03MzcsNyArNzM3LDcgQEAKIAkJZ290byBvdXQ7CiAJfSBlbHNlIGlmIChsZW4gPiBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSkgewogCQlsYnNfcHJfZXJyKCIlczogZXJyb3I6IGNhcmQgaGFzICVkIGJ5dGVzIG9mIGRhdGEsIGJ1dCAiCi0JCQkgICAib3VyIG1heGltdW0gc2tiIHNpemUgaXMgJWx1XG4iLAorCQkJICAgIm91ciBtYXhpbXVtIHNrYiBzaXplIGlzICV6dVxuIiwKIAkJCSAgIF9fZnVuY19fLCBsZW4sIE1SVkRSVl9FVEhfUlhfUEFDS0VUX0JVRkZFUl9TSVpFKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CkBAIC0xMTE4LDcgKzExMTgsNiBAQAogCXByaXYtPmNhcmQgPSBjYXJkOwogCXByaXYtPmh3X2hvc3RfdG9fY2FyZCA9IGlmX3NwaV9ob3N0X3RvX2NhcmQ7CiAJcHJpdi0+ZndfcmVhZHkgPSAxOwotCXByaXYtPnBzX3N1cHBvcnRlZCA9IDE7CiAKIAkvKiBJbml0aWFsaXplIGludGVycnVwdCBoYW5kbGluZyBzdHVmZi4gKi8KIAljYXJkLT5ydW5fdGhyZWFkID0gMTsKQEAgLTExNzEsMTIgKzExNzAsMTMgQEAKIAogCWxic19kZWJfc3BpKCJsaWJlcnRhc19zcGlfcmVtb3ZlXG4iKTsKIAlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKLQlwcml2LT5zdXJwcmlzZXJlbW92ZWQgPSAxOwogCiAJbGJzX3N0b3BfY2FyZChwcml2KTsKKwlsYnNfcmVtb3ZlX2NhcmQocHJpdik7IC8qIHdpbGwgY2FsbCBmcmVlX25ldGRldiAqLworCisJcHJpdi0+c3VycHJpc2VyZW1vdmVkID0gMTsKIAlmcmVlX2lycShzcGktPmlycSwgY2FyZCk7CiAJaWZfc3BpX3Rlcm1pbmF0ZV9zcGlfdGhyZWFkKGNhcmQpOwotCWxic19yZW1vdmVfY2FyZChwcml2KTsgLyogd2lsbCBjYWxsIGZyZWVfbmV0ZGV2ICovCiAJaWYgKGNhcmQtPnBkYXRhLT50ZWFyZG93bikKIAkJY2FyZC0+cGRhdGEtPnRlYXJkb3duKHNwaSk7CiAJZnJlZV9pZl9zcGlfY2FyZChjYXJkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKaW5kZXggMTg0NGM1YS4uOTJiYzhjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKQEAgLTE4MSwxMyArMTgxLDE0IEBACiAJd2FrZV9tZXRob2QuYWN0aW9uID0gY3B1X3RvX2xlMTYoQ01EX0FDVF9HRVQpOwogCWlmIChsYnNfY21kX3dpdGhfcmVzcG9uc2UocHJpdiwgQ01EXzgwMl8xMV9GV19XQUtFX01FVEhPRCwgJndha2VfbWV0aG9kKSkgewogCQlsYnNfcHJfaW5mbygiRmlybXdhcmUgZG9lcyBub3Qgc2VlbSB0byBzdXBwb3J0IFBTIG1vZGVcbiIpOworCQlwcml2LT5md2NhcGluZm8gJj0gfkZXX0NBUElORk9fUFM7CiAJfSBlbHNlIHsKIAkJaWYgKGxlMTZfdG9fY3B1KHdha2VfbWV0aG9kLm1ldGhvZCkgPT0gQ01EX1dBS0VfTUVUSE9EX0NPTU1BTkRfSU5UKSB7CiAJCQlsYnNfZGViX3VzYigiRmlybXdhcmUgc2VlbXMgdG8gc3VwcG9ydCBQUyB3aXRoIHdha2UtdmlhLWNvbW1hbmRcbiIpOwotCQkJcHJpdi0+cHNfc3VwcG9ydGVkID0gMTsKIAkJfSBlbHNlIHsKIAkJCS8qIFRoZSB2ZXJzaW9ucyB3aGljaCBib290IHVwIHRoaXMgd2F5IGRvbid0IHNlZW0gdG8KIAkJCSAgIHdvcmsgZXZlbiBpZiB3ZSBzZXQgaXQgdG8gdGhlIGNvbW1hbmQgaW50ZXJydXB0ICovCisJCQlwcml2LT5md2NhcGluZm8gJj0gfkZXX0NBUElORk9fUFM7CiAJCQlsYnNfcHJfaW5mbygiRmlybXdhcmUgZG9lc24ndCB3YWtlIHZpYSBjb21tYW5kIGludGVycnVwdDsgZGlzYWJsaW5nIFBTIG1vZGVcbiIpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCmluZGV4IDg5NTc1ZTQuLjg3YjRlNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKQEAgLTExNzYsNyArMTE3Niw3IEBACiAJLyogQWxsb2NhdGUgYW4gRXRoZXJuZXQgZGV2aWNlIGFuZCByZWdpc3RlciBpdCAqLwogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgbGJzX3ByaXZhdGUpKTsKIAlpZiAoIWRldikgewotCQlsYnNfcHJfZXJyKCJpbml0IGV0aFggZGV2aWNlIGZhaWxlZFxuIik7CisJCWxic19wcl9lcnIoImluaXQgd2xhblggZGV2aWNlIGZhaWxlZFxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMjA0LDYgKzEyMDQsNyBAQAogCVNFVF9ORVRERVZfREVWKGRldiwgZG1kZXYpOwogCiAJcHJpdi0+cnRhcF9uZXRfZGV2ID0gTlVMTDsKKwlzdHJjcHkoZGV2LT5uYW1lLCAid2xhbiVkIik7CiAKIAlsYnNfZGViX3RocmVhZCgiU3RhcnRpbmcgbWFpbiB0aHJlYWQuLi5cbiIpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPndhaXRxKTsKQEAgLTE2NDYsNyArMTY0Nyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbGJzX3J0YXBfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbGJzX3J0YXBfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwppbmRleCAxNjBjZmQ4Li40YzAxOGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKQEAgLTU3LDE5ICs1NywxNyBAQAogICogIEBwYXJhbSBza2IgICAgIEEgcG9pbnRlciB0byBza2Igd2hpY2ggaW5jbHVkZXMgVFggcGFja2V0CiAgKiAgQHJldHVybiAJICAgMCBvciAtMQogICovCi1pbnQgbGJzX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorbmV0ZGV2X3R4X3QgbGJzX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCB0eHBkICp0eHBkOwogCWNoYXIgKnA4MDJ4X2hkcjsKIAl1aW50MTZfdCBwa3RfbGVuOwotCWludCByZXQ7CisJbmV0ZGV2X3R4X3QgcmV0ID0gTkVUREVWX1RYX09LOwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX1RYKTsKIAotCXJldCA9IE5FVERFVl9UWF9PSzsKLQogCS8qIFdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHRoZSBxdWV1ZXMgYmVpbmcgcmVzdGFydGVkIGJlZm9yZQogCSAgIHdlIGdldCByb3VuZCB0byBzdG9wcGluZyB0aGVtICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKaW5kZXggOGJjMTkwNzQuLmJlODM3YTBkMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKQEAgLTcxMiw3ICs3MTIsNyBAQAogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOwogCi0JaWYgKCFwcml2LT5wc19zdXBwb3J0ZWQpIHsKKwlpZiAoIShwcml2LT5md2NhcGluZm8gJiBGV19DQVBJTkZPX1BTKSkgewogCQlpZiAodndycS0+ZGlzYWJsZWQpCiAJCQlyZXR1cm4gMDsKIAkJZWxzZQpAQCAtMTcyOCw2ICsxNzI4LDggQEAKIAl9CiAKIAlzd2l0Y2ggKGR3cnEtPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6CisJY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgogCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoKIAljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgogCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9tYWluLmMKaW5kZXggMTBhOTllMi4uMDE5NDMxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4uYwpAQCAtMzY2LDE1ICszNjYsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU2NCBsYnRmX29wX3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQoreworCXN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgaTsKKworCWlmICghbWNfY291bnQgfHwgbWNfY291bnQgPiBNUlZEUlZfTUFYX01VTFRJQ0FTVF9MSVNUX1NJWkUpCisJCXJldHVybiBtY19jb3VudDsKKworCXByaXYtPm5yX29mX211bHRpY2FzdG1hY2FkZHIgPSBtY19jb3VudDsKKwlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgeworCQlpZiAoIW1jbGlzdCkKKwkJCWJyZWFrOworCQltZW1jcHkoJnByaXYtPm11bHRpY2FzdGxpc3RbaV0sIG1jbGlzdC0+ZGFfYWRkciwKKwkJCQlFVEhfQUxFTik7CisJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKKwl9CisKKwlyZXR1cm4gbWNfY291bnQ7Cit9CisKICNkZWZpbmUgU1VQUE9SVEVEX0ZJRl9GTEFHUyAgKEZJRl9QUk9NSVNDX0lOX0JTUyB8IEZJRl9BTExNVUxUSSkKIHN0YXRpYyB2b2lkIGxidGZfb3BfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAogCQkJdW5zaWduZWQgaW50ICpuZXdfZmxhZ3MsCi0JCQlpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQorCQkJdTY0IG11bHRpY2FzdCkKIHsKIAlzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2ID0gaHctPnByaXY7CiAJaW50IG9sZF9tYWNfY29udHJvbCA9IHByaXYtPm1hY19jb250cm9sOwotCWludCBpOwogCWNoYW5nZWRfZmxhZ3MgJj0gU1VQUE9SVEVEX0ZJRl9GTEFHUzsKIAkqbmV3X2ZsYWdzICY9IFNVUFBPUlRFRF9GSUZfRkxBR1M7CiAKQEAgLTM4NiwyMCArNDA2LDEyIEBACiAJZWxzZQogCQlwcml2LT5tYWNfY29udHJvbCAmPSB+Q01EX0FDVF9NQUNfUFJPTUlTQ1VPVVNfRU5BQkxFOwogCWlmICgqbmV3X2ZsYWdzICYgKEZJRl9BTExNVUxUSSkgfHwKLQkgICAgbWNfY291bnQgPiBNUlZEUlZfTUFYX01VTFRJQ0FTVF9MSVNUX1NJWkUpIHsKKwkgICAgbXVsdGljYXN0ID4gTVJWRFJWX01BWF9NVUxUSUNBU1RfTElTVF9TSVpFKSB7CiAJCXByaXYtPm1hY19jb250cm9sIHw9IENNRF9BQ1RfTUFDX0FMTF9NVUxUSUNBU1RfRU5BQkxFOwogCQlwcml2LT5tYWNfY29udHJvbCAmPSB+Q01EX0FDVF9NQUNfTVVMVElDQVNUX0VOQUJMRTsKLQl9IGVsc2UgaWYgKG1jX2NvdW50KSB7CisJfSBlbHNlIGlmIChtdWx0aWNhc3QpIHsKIAkJcHJpdi0+bWFjX2NvbnRyb2wgfD0gQ01EX0FDVF9NQUNfTVVMVElDQVNUX0VOQUJMRTsKIAkJcHJpdi0+bWFjX2NvbnRyb2wgJj0gfkNNRF9BQ1RfTUFDX0FMTF9NVUxUSUNBU1RfRU5BQkxFOwotCQlwcml2LT5ucl9vZl9tdWx0aWNhc3RtYWNhZGRyID0gbWNfY291bnQ7Ci0JCWZvciAoaSA9IDA7IGkgPCBtY19jb3VudDsgaSsrKSB7Ci0JCQlpZiAoIW1jbGlzdCkKLQkJCQlicmVhazsKLQkJCW1lbWNweSgmcHJpdi0+bXVsdGljYXN0bGlzdFtpXSwgbWNsaXN0LT5kYV9hZGRyLAotCQkJCQlFVEhfQUxFTik7Ci0JCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7Ci0JCX0KIAkJbGJ0Zl9jbWRfc2V0X21hY19tdWx0aWNhc3RfYWRkcihwcml2KTsKIAl9IGVsc2UgewogCQlwcml2LT5tYWNfY29udHJvbCAmPSB+KENNRF9BQ1RfTUFDX01VTFRJQ0FTVF9FTkFCTEUgfApAQCAtNDYxLDYgKzQ3Myw3IEBACiAJLmFkZF9pbnRlcmZhY2UJCT0gbGJ0Zl9vcF9hZGRfaW50ZXJmYWNlLAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gbGJ0Zl9vcF9yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IGxidGZfb3BfY29uZmlnLAorCS5wcmVwYXJlX211bHRpY2FzdAk9IGxidGZfb3BfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBsYnRmX29wX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSBsYnRmX29wX2Jzc19pbmZvX2NoYW5nZWQsCiB9OwpAQCAtNTAzLDcgKzUxNiw4IEBACiAJCXNrYl9yZXNlcnZlKHNrYiwgMik7CiAJfQogCi0JaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHNrYiwgJnN0YXRzKTsKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0cywgc2l6ZW9mKHN0YXRzKSk7CisJaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHNrYik7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsYnRmX3J4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCmluZGV4IDc5MTZjYTMuLjg5NmY1MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwpAQCAtMTUsNiArMTUsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bmV0L2RzdC5oPgorI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgpAQCAtMzEwLDExICszMTIsMTIgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAKLXN0YXRpYyBpbnQgaHdzaW1fbW9uX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBod3NpbV9tb25feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCS8qIFRPRE86IGFsbG93IHBhY2tldCBpbmplY3Rpb24gKi8KIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCkBAIC00MDQsMTEgKzQwNywxOSBAQAogCXJ4X3N0YXR1cy5mcmVxID0gZGF0YS0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXE7CiAJcnhfc3RhdHVzLmJhbmQgPSBkYXRhLT5jaGFubmVsLT5iYW5kOwogCXJ4X3N0YXR1cy5yYXRlX2lkeCA9IGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4OwotCS8qIFRPRE86IHNpbXVsYXRlIHNpZ25hbCBzdHJlbmd0aCAoYW5kIG9wdGlvbmFsIHBhY2tldCBkcm9wKSAqLworCS8qIFRPRE86IHNpbXVsYXRlIHJlYWwgc2lnbmFsIHN0cmVuZ3RoIChhbmQgb3B0aW9uYWwgcGFja2V0IGxvc3MpICovCisJcnhfc3RhdHVzLnNpZ25hbCA9IC01MDsKIAogCWlmIChkYXRhLT5wcyAhPSBQU19ESVNBQkxFRCkKIAkJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKTsKIAorCS8qIHJlbGVhc2UgdGhlIHNrYidzIHNvdXJjZSBpbmZvICovCisJc2tiX29ycGhhbihza2IpOworCXNrYl9kc3RfZHJvcChza2IpOworCXNrYi0+bWFyayA9IDA7CisJc2VjcGF0aF9yZXNldChza2IpOworCW5mX3Jlc2V0KHNrYik7CisKIAkvKiBDb3B5IHNrYiB0byBhbGwgZW5hYmxlZCByYWRpb3MgdGhhdCBhcmUgb24gdGhlIGN1cnJlbnQgZnJlcXVlbmN5ICovCiAJc3Bpbl9sb2NrKCZod3NpbV9yYWRpb19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRhdGEyLCAmaHdzaW1fcmFkaW9zLCBsaXN0KSB7CkBAIC00MzAsNyArNDQxLDggQEAKIAkJaWYgKG1lbWNtcChoZHItPmFkZHIxLCBkYXRhMi0+aHctPndpcGh5LT5wZXJtX2FkZHIsCiAJCQkgICBFVEhfQUxFTikgPT0gMCkKIAkJCWFjayA9IHRydWU7Ci0JCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRhdGEyLT5odywgbnNrYiwgJnJ4X3N0YXR1cyk7CisJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IobnNrYiksICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKKwkJaWVlZTgwMjExX3J4X2lycXNhZmUoZGF0YTItPmh3LCBuc2tiKTsKIAl9CiAJc3Bpbl91bmxvY2soJmh3c2ltX3JhZGlvX2xvY2spOwogCkBAIC01NzEsOSArNTgzLDcgQEAKIAogc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJCQkgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkJICAgIGludCBtY19jb3VudCwKLQkJCQkJICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQorCQkJCQkgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncyx1NjQgbXVsdGljYXN0KQogewogCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhID0gaHctPnByaXY7CiAKQEAgLTY5MCw2ICs3MDAsNzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19OTDgwMjExX1RFU1RNT0RFCisvKgorICogVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGV4YW1wbGUgY29kZSBmb3IgdXNpbmcgbmV0bGluaworICogYXR0cmlidXRlcyB3aXRoIHRoZSB0ZXN0bW9kZSBjb21tYW5kIGluIG5sODAyMTEuCisgKi8KKworLyogVGhlc2UgZW51bXMgbmVlZCB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCB1c2Vyc3BhY2UgKi8KK2VudW0gaHdzaW1fdGVzdG1vZGVfYXR0ciB7CisJX19IV1NJTV9UTV9BVFRSX0lOVkFMSUQJPSAwLAorCUhXU0lNX1RNX0FUVFJfQ01ECT0gMSwKKwlIV1NJTV9UTV9BVFRSX1BTCT0gMiwKKworCS8qIGtlZXAgbGFzdCAqLworCV9fSFdTSU1fVE1fQVRUUl9BRlRFUl9MQVNULAorCUhXU0lNX1RNX0FUVFJfTUFYCT0gX19IV1NJTV9UTV9BVFRSX0FGVEVSX0xBU1QgLSAxCit9OworCitlbnVtIGh3c2ltX3Rlc3Rtb2RlX2NtZCB7CisJSFdTSU1fVE1fQ01EX1NFVF9QUwkJPSAwLAorCUhXU0lNX1RNX0NNRF9HRVRfUFMJCT0gMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBod3NpbV90ZXN0bW9kZV9wb2xpY3lbSFdTSU1fVE1fQVRUUl9NQVggKyAxXSA9IHsKKwlbSFdTSU1fVE1fQVRUUl9DTURdID0geyAudHlwZSA9IE5MQV9VMzIgfSwKKwlbSFdTSU1fVE1fQVRUUl9QU10gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorfTsKKworc3RhdGljIGludCBod3NpbV9mb3BzX3BzX3dyaXRlKHZvaWQgKmRhdCwgdTY0IHZhbCk7CisKK3N0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fdGVzdG1vZGVfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpod3NpbSA9IGh3LT5wcml2OworCXN0cnVjdCBubGF0dHIgKnRiW0hXU0lNX1RNX0FUVFJfTUFYICsgMV07CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgZXJyLCBwczsKKworCWVyciA9IG5sYV9wYXJzZSh0YiwgSFdTSU1fVE1fQVRUUl9NQVgsIGRhdGEsIGxlbiwKKwkJCWh3c2ltX3Rlc3Rtb2RlX3BvbGljeSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICghdGJbSFdTSU1fVE1fQVRUUl9DTURdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAobmxhX2dldF91MzIodGJbSFdTSU1fVE1fQVRUUl9DTURdKSkgeworCWNhc2UgSFdTSU1fVE1fQ01EX1NFVF9QUzoKKwkJaWYgKCF0YltIV1NJTV9UTV9BVFRSX1BTXSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlwcyA9IG5sYV9nZXRfdTMyKHRiW0hXU0lNX1RNX0FUVFJfUFNdKTsKKwkJcmV0dXJuIGh3c2ltX2ZvcHNfcHNfd3JpdGUoaHdzaW0sIHBzKTsKKwljYXNlIEhXU0lNX1RNX0NNRF9HRVRfUFM6CisJCXNrYiA9IGNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX3JlcGx5X3NrYihody0+d2lwaHksCisJCQkJCQlubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkpOworCQlpZiAoIXNrYikKKwkJCXJldHVybiAtRU5PTUVNOworCQlOTEFfUFVUX1UzMihza2IsIEhXU0lNX1RNX0FUVFJfUFMsIGh3c2ltLT5wcyk7CisJCXJldHVybiBjZmc4MDIxMV90ZXN0bW9kZV9yZXBseShza2IpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIC1FTk9CVUZTOworfQorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtYWM4MDIxMV9od3NpbV9vcHMgPQogewogCS50eCA9IG1hYzgwMjExX2h3c2ltX3R4LApAQCAtNzAzLDYgKzc4MSw3IEBACiAJLnN0YV9ub3RpZnkgPSBtYWM4MDIxMV9od3NpbV9zdGFfbm90aWZ5LAogCS5zZXRfdGltID0gbWFjODAyMTFfaHdzaW1fc2V0X3RpbSwKIAkuY29uZl90eCA9IG1hYzgwMjExX2h3c2ltX2NvbmZfdHgsCisJQ0ZHODAyMTFfVEVTVE1PREVfQ01EKG1hYzgwMjExX2h3c2ltX3Rlc3Rtb2RlX2NtZCkKIH07CiAKIApAQCAtNzU3LDcgKzgzNiw2IEBACiB7CiAJc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEgPSBkYXQ7CiAJc3RydWN0IGh3c2ltX3ZpZl9wcml2ICp2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKLQlERUNMQVJFX01BQ19CVUYoYnVmKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfcHNwb2xsICpwc3BvbGw7CiAKQEAgLTc4Nyw3ICs4NjUsNiBAQAogCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIGludCBwcykKIHsKIAlzdHJ1Y3QgaHdzaW1fdmlmX3ByaXYgKnZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwotCURFQ0xBUkVfTUFDX0JVRihidWYpOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIApAQCAtOTQ1LDcgKzEwMjIsOCBAQAogCQkJQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8CiAJCQlCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCk7CiAKLQkJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOworCQlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEUgfAorCQkJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOwogCiAJCS8qIGFzayBtYWM4MDIxMSB0byByZXNlcnZlIHNwYWNlIGZvciBtYWdpYyAqLwogCQlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHdzaW1fdmlmX3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKaW5kZXggODM5NjdhZi4uNzQ2NTMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCkBAIC0xLDcgKzEsOCBAQAogLyoKLSAqIGRyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMgZHJpdmVyIGZvciBNYXJ2ZWxsIFRPUERPRyA4MDIuMTEgV2lyZWxlc3MgY2FyZHMKKyAqIGRyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKKyAqIERyaXZlciBmb3IgTWFydmVsbCBUT1BET0cgODAyLjExIFdpcmVsZXNzIGNhcmRzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvciBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IgSW5jLgogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQpAQCAtMjQsNyArMjUsNyBAQAogCiAjZGVmaW5lIE1XTDhLX0RFU0MJIk1hcnZlbGwgVE9QRE9HKFIpIDgwMi4xMSBXaXJlbGVzcyBOZXR3b3JrIERyaXZlciIKICNkZWZpbmUgTVdMOEtfTkFNRQlLQlVJTERfTU9ETkFNRQotI2RlZmluZSBNV0w4S19WRVJTSU9OCSIwLjkuMSIKKyNkZWZpbmUgTVdMOEtfVkVSU0lPTgkiMC4xMCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKE1XTDhLX0RFU0MpOwogTU9EVUxFX1ZFUlNJT04oTVdMOEtfVkVSU0lPTik7CkBAIC0zOCwxNiArMzksMTQgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbXdsOGtfdGFibGUpOwogCi0jZGVmaW5lIElFRUU4MDIxMV9BRERSX0xFTgkJCUVUSF9BTEVOCi0KIC8qIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCiAjZGVmaW5lIE1XTDhLX0hJVV9HRU5fUFRSCQkJMHgwMDAwMGMxMAotI2RlZmluZSAgTVdMOEtfTU9ERV9TVEEJCQkJMHgwMDAwMDA1YQotI2RlZmluZSAgTVdMOEtfTU9ERV9BUAkJCQkweDAwMDAwMGE1CisjZGVmaW5lICBNV0w4S19NT0RFX1NUQQkJCQkgMHgwMDAwMDA1YQorI2RlZmluZSAgTVdMOEtfTU9ERV9BUAkJCQkgMHgwMDAwMDBhNQogI2RlZmluZSBNV0w4S19ISVVfSU5UX0NPREUJCQkweDAwMDAwYzE0Ci0jZGVmaW5lICBNV0w4S19GV1NUQV9SRUFEWQkJCTB4ZjBmMWYyZjQKLSNkZWZpbmUgIE1XTDhLX0ZXQVBfUkVBRFkJCQkweGYxZjJmNGE1Ci0jZGVmaW5lICBNV0w4S19JTlRfQ09ERV9DTURfRklOSVNIRUQJCTB4MDAwMDAwMDUKKyNkZWZpbmUgIE1XTDhLX0ZXU1RBX1JFQURZCQkJIDB4ZjBmMWYyZjQKKyNkZWZpbmUgIE1XTDhLX0ZXQVBfUkVBRFkJCQkgMHhmMWYyZjRhNQorI2RlZmluZSAgTVdMOEtfSU5UX0NPREVfQ01EX0ZJTklTSEVECQkgMHgwMDAwMDAwNQogI2RlZmluZSBNV0w4S19ISVVfU0NSQVRDSAkJCTB4MDAwMDBjNDAKIAogLyogSG9zdC0+ZGV2aWNlIGNvbW11bmljYXRpb25zICovCkBAIC01NiwxMSArNTUsMTAgQEAKICNkZWZpbmUgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfTUFTSwkJMHgwMDAwMGMyMAogI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9DTEVBUl9TRUwJMHgwMDAwMGMyNAogI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9TVEFUVVNfTUFTSwkweDAwMDAwYzI4Ci0jZGVmaW5lICBNV0w4S19IMkFfSU5UX0RVTU1ZCQkJKDEgPDwgMjApCi0jZGVmaW5lICBNV0w4S19IMkFfSU5UX1JFU0VUCQkJKDEgPDwgMTUpCi0jZGVmaW5lICBNV0w4S19IMkFfSU5UX1BTCQkJKDEgPDwgMikKLSNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfRE9PUkJFTEwJCQkoMSA8PCAxKQotI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9QUEFfUkVBRFkJCSgxIDw8IDApCisjZGVmaW5lICBNV0w4S19IMkFfSU5UX0RVTU1ZCQkJICgxIDw8IDIwKQorI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9SRVNFVAkJCSAoMSA8PCAxNSkKKyNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfRE9PUkJFTEwJCQkgKDEgPDwgMSkKKyNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfUFBBX1JFQURZCQkgKDEgPDwgMCkKIAogLyogRGV2aWNlLT5ob3N0IGNvbW11bmljYXRpb25zICovCiAjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX0VWRU5UUwkJMHgwMDAwMGMyYwpAQCAtNjgsMTYgKzY2LDE2IEBACiAjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0sJCTB4MDAwMDBjMzQKICNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMCTB4MDAwMDBjMzgKICNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0sJMHgwMDAwMGMzYwotI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9EVU1NWQkJCSgxIDw8IDIwKQotI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9DSE5MX1NXSVRDSEVECQkoMSA8PCAxMSkKLSNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUVVFVUVfRU1QVFkJCSgxIDw8IDEwKQotI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SQURBUl9ERVRFQ1QJCSgxIDw8IDcpCi0jZGVmaW5lICBNV0w4S19BMkhfSU5UX1JBRElPX09OCQkJKDEgPDwgNikKLSNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUkFESU9fT0ZGCQkoMSA8PCA1KQotI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9NQUNfRVZFTlQJCSgxIDw8IDMpCi0jZGVmaW5lICBNV0w4S19BMkhfSU5UX09QQ19ET05FCQkJKDEgPDwgMikKLSNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUlhfUkVBRFkJCQkoMSA8PCAxKQotI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9UWF9ET05FCQkJKDEgPDwgMCkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfRFVNTVkJCQkgKDEgPDwgMjApCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX0NITkxfU1dJVENIRUQJCSAoMSA8PCAxMSkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUVVFVUVfRU1QVFkJCSAoMSA8PCAxMCkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUkFEQVJfREVURUNUCQkgKDEgPDwgNykKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUkFESU9fT04JCQkgKDEgPDwgNikKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUkFESU9fT0ZGCQkgKDEgPDwgNSkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfTUFDX0VWRU5UCQkgKDEgPDwgMykKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUJCQkgKDEgPDwgMikKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUlhfUkVBRFkJCQkgKDEgPDwgMSkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfVFhfRE9ORQkJCSAoMSA8PCAwKQogCiAjZGVmaW5lIE1XTDhLX0EySF9FVkVOVFMJKE1XTDhLX0EySF9JTlRfRFVNTVkgfCBcCiAJCQkJIE1XTDhLX0EySF9JTlRfQ0hOTF9TV0lUQ0hFRCB8IFwKQEAgLTExMywxNyArMTExLDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYjsKIH07CiAKLXN0cnVjdCBtd2w4a19za2IgewotCS8qCi0JICogVGhlIERNQSBlbmdpbmUgcmVxdWlyZXMgYSBtb2RpZmljYXRpb24gdG8gdGhlIHBheWxvYWQuCi0JICogSWYgdGhlIHNrYnVmZiBpcyBzaGFyZWQvY2xvbmVkLCBpdCBuZWVkcyB0byBiZSB1bnNoYXJlZC4KLQkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB0aGUgc3RhY2sgYWx3YXlzIGdldHMgYmFjawotCSAqIHRoZSBza2J1ZmYgaXQgc2VudCBmb3IgdHJhbnNtaXNzaW9uLgotCSAqLwotCXN0cnVjdCBza19idWZmICpjbG9uZTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotfTsKLQogc3RydWN0IG13bDhrX3R4X3F1ZXVlIHsKIAkvKiBodyB0cmFuc21pdHMgaGVyZSAqLwogCWludCB0eF9oZWFkOwpAQCAtMTM0LDcgKzEyMSw3IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0czsKIAlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHhfZGVzY19hcmVhOwogCWRtYV9hZGRyX3QgdHhfZGVzY19kbWE7Ci0Jc3RydWN0IG13bDhrX3NrYiAqdHhfc2tiOworCXN0cnVjdCBza19idWZmICoqdHhfc2tiOwogfTsKIAogLyogUG9pbnRlcnMgdG8gdGhlIGZpcm13YXJlIGRhdGEgYW5kIG1ldGEgaW5mb3JtYXRpb24gYWJvdXQgaXQuICAqLwpAQCAtMTUyLDE5ICsxMzksMjIgQEAKIAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXU4IG5hbWVbMTZdOwotCS8qIGZpcm13YXJlIGFjY2VzcyBsb2NrICovCi0Jc3BpbmxvY2tfdCBmd19sb2NrOwogCiAJLyogZmlybXdhcmUgZmlsZXMgYW5kIG1ldGEgZGF0YSAqLwogCXN0cnVjdCBtd2w4a19maXJtd2FyZSBmdzsKIAl1MzIgcGFydF9udW07CiAKKwkvKiBmaXJtd2FyZSBhY2Nlc3MgKi8KKwlzdHJ1Y3QgbXV0ZXggZndfbXV0ZXg7CisJc3RydWN0IHRhc2tfc3RydWN0ICpmd19tdXRleF9vd25lcjsKKwlpbnQgZndfbXV0ZXhfZGVwdGg7CisJc3RydWN0IGNvbXBsZXRpb24gKnR4X3dhaXQ7CisJc3RydWN0IGNvbXBsZXRpb24gKmhvc3RjbWRfd2FpdDsKKwogCS8qIGxvY2sgaGVsZCBvdmVyIFRYIGFuZCBUWCByZWFwICovCiAJc3BpbmxvY2tfdCB0eF9sb2NrOwotCXUzMiBpbnRfbWFzazsKIAogCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0Jc3RydWN0IGxpc3RfaGVhZCB2aWZfbGlzdDsKIAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY3VycmVudF9jaGFubmVsOwogCkBAIC0xNzMsMTAgKzE2Myw4IEBACiAJZG1hX2FkZHJfdCBjb29raWVfZG1hOwogCiAJdTE2IG51bV9tY2FkZHJzOwotCXUxNiByZWdpb25fY29kZTsKIAl1OCBod19yZXY7Ci0JX19sZTMyIGZ3X3JldjsKLQl1MzIgd2VwX2VuYWJsZWQ7CisJdTMyIGZ3X3JldjsKIAogCS8qCiAJICogUnVubmluZyBjb3VudCBvZiBUWCBwYWNrZXRzIGluIGZsaWdodCwgdG8gYXZvaWQKQEAgLTE5MiwxOSArMTgwLDEzIEBACiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzWzE0XTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbMTJdOwogCi0JLyogUkYgcHJlYW1ibGU6IFNob3J0LCBMb25nIG9yIEF1dG8gKi8KLQl1OAlyYWRpb19wcmVhbWJsZTsKLQl1OAlyYWRpb19zdGF0ZTsKLQotCS8qIFdNTSBNT0RFIDEgZm9yIGVuYWJsZWQ7IDAgZm9yIGRpc2FibGVkICovCi0JYm9vbCB3bW1fbW9kZTsKLQotCS8qIFNldCBpZiBQSFkgY29uZmlnIGlzIGluIHByb2dyZXNzICovCi0JYm9vbCBpbmNvbmZpZzsKKwlib29sIHJhZGlvX29uOworCWJvb2wgcmFkaW9fc2hvcnRfcHJlYW1ibGU7CisJYm9vbCB3bW1fZW5hYmxlZDsKIAogCS8qIFhYWCBuZWVkIHRvIGNvbnZlcnQgdGhpcyB0byBoYW5kbGUgbXVsdGlwbGUgaW50ZXJmYWNlcyAqLwogCWJvb2wgY2FwdHVyZV9iZWFjb247Ci0JdTggY2FwdHVyZV9ic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOworCXU4IGNhcHR1cmVfYnNzaWRbRVRIX0FMRU5dOwogCXN0cnVjdCBza19idWZmICpiZWFjb25fc2tiOwogCiAJLyoKQEAgLTIyMCwxNCArMjAyLDEwIEBACiAKIAkvKiBXb3JrIHRocmVhZCB0byBzZXJpYWxpemUgY29uZmlndXJhdGlvbiByZXF1ZXN0cyAqLwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjb25maWdfd3E7Ci0Jc3RydWN0IGNvbXBsZXRpb24gKmhvc3RjbWRfd2FpdDsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqdHhfd2FpdDsKIH07CiAKIC8qIFBlciBpbnRlcmZhY2Ugc3BlY2lmaWMgcHJpdmF0ZSBkYXRhICovCiBzdHJ1Y3QgbXdsOGtfdmlmIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0KIAkvKiBiYWNrcG9pbnRlciB0byBwYXJlbnQgY29uZmlnIGJsb2NrICovCiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXY7CiAKQEAgLTIzNSw4ICsyMTMsOCBAQAogCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgYnNzX2luZm87CiAKIAkvKiBCU1NJRCBvZiBBUCBvciBJQlNTICovCi0JdTgJYnNzaWRbSUVFRTgwMjExX0FERFJfTEVOXTsKLQl1OAltYWNfYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOworCXU4CWJzc2lkW0VUSF9BTEVOXTsKKwl1OAltYWNfYWRkcltFVEhfQUxFTl07CiAKIAkvKgogCSAqIFN1YnNldCBvZiBzdXBwb3J0ZWQgbGVnYWN5IHJhdGVzLgpAQCAtMjQ3LDE4ICsyMjUsMTEgQEAKIAkvKiBudW1iZXIgb2Ygc3VwcG9ydGVkIGxlZ2FjeSByYXRlcyAqLwogCXU4CWxlZ2FjeV9ucmF0ZXM7CiAKLQkvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIE1DUyByYXRlcy4gV29yayBpbiBwcm9ncmVzcyAqLwotCXU4CW1jc19ucmF0ZXM7Ci0KIAkgLyogSW5kZXggaW50byBzdGF0aW9uIGRhdGFiYXNlLlJldHVybmVkIGJ5IHVwZGF0ZV9zdGFfZGIgY2FsbCAqLwogCXU4CXBlZXJfaWQ7CiAKIAkvKiBOb24gQU1QRFUgc2VxdWVuY2UgbnVtYmVyIGFzc2lnbmVkIGJ5IGRyaXZlciAqLwogCXUxNglzZXFubzsKLQotCS8qIE5vdGU6VGhlcmUgaXMgbm8gY2hhbm5lbCBpbmZvLAotCSAqIHJlZmVyIHRvIHRoZSBtYXN0ZXIgY2hhbm5lbCBpbmZvIGluIHByaXYKLQkgKi8KIH07CiAKICNkZWZpbmUgTVdMOEtfVklGKF92aWYpICgoc3RydWN0IG13bDhrX3ZpZiAqKSYoKF92aWYpLT5kcnZfcHJpdikpCkBAIC0yOTIsMjggKzI2Myw2IEBACiAJeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTA4LCB9LAogfTsKIAotLyogUmFkaW8gc2V0dGluZ3MgKi8KLSNkZWZpbmUgTVdMOEtfUkFESU9fRk9SQ0UJCTB4MgotI2RlZmluZSBNV0w4S19SQURJT19FTkFCTEUJCTB4MQotI2RlZmluZSBNV0w4S19SQURJT19ESVNBQkxFCQkweDAKLSNkZWZpbmUgTVdMOEtfUkFESU9fQVVUT19QUkVBTUJMRQkweDAwMDUKLSNkZWZpbmUgTVdMOEtfUkFESU9fU0hPUlRfUFJFQU1CTEUJMHgwMDAzCi0jZGVmaW5lIE1XTDhLX1JBRElPX0xPTkdfUFJFQU1CTEUJMHgwMDAxCi0KLS8qIFdNTSAqLwotI2RlZmluZSBNV0w4S19XTU1fRU5BQkxFCQkxCi0jZGVmaW5lIE1XTDhLX1dNTV9ESVNBQkxFCQkwCi0KLSNkZWZpbmUgTVdMOEtfUkFESU9fREVGQVVMVF9QUkVBTUJMRQlNV0w4S19SQURJT19MT05HX1BSRUFNQkxFCi0KLS8qIFNsb3QgdGltZSAqLwotCi0vKiBTaG9ydCBTbG90OiA5dXMgc2xvdCB0aW1lICovCi0jZGVmaW5lIE1XTDhLX1NIT1JUX1NMT1RUSU1FCQkxCi0KLS8qIExvbmcgc2xvdDogMjB1cyBzbG90IHRpbWUgKi8KLSNkZWZpbmUgTVdMOEtfTE9OR19TTE9UVElNRQkJMAotCiAvKiBTZXQgb3IgZ2V0IGluZm8gZnJvbSBGaXJtd2FyZSAqLwogI2RlZmluZSBNV0w4S19DTURfU0VUCQkJMHgwMDAxCiAjZGVmaW5lIE1XTDhLX0NNRF9HRVQJCQkweDAwMDAKQEAgLTMyMywyNSArMjcyLDIzIEBACiAjZGVmaW5lIE1XTDhLX0NNRF9HRVRfSFdfU1BFQwkJMHgwMDAzCiAjZGVmaW5lIE1XTDhLX0NNRF9NQUNfTVVMVElDQVNUX0FEUgkweDAwMTAKICNkZWZpbmUgTVdMOEtfQ01EX0dFVF9TVEFUCQkweDAwMTQKLSNkZWZpbmUgTVdMOEtfQ01EX1JBRElPX0NPTlRST0wJCTB4MDAxQwotI2RlZmluZSBNV0w4S19DTURfUkZfVFhfUE9XRVIJCTB4MDAxRQorI2RlZmluZSBNV0w4S19DTURfUkFESU9fQ09OVFJPTAkJMHgwMDFjCisjZGVmaW5lIE1XTDhLX0NNRF9SRl9UWF9QT1dFUgkJMHgwMDFlCiAjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUFJFX1NDQU4JCTB4MDEwNwogI2RlZmluZSBNV0w4S19DTURfU0VUX1BPU1RfU0NBTgkJMHgwMTA4Ci0jZGVmaW5lIE1XTDhLX0NNRF9TRVRfUkZfQ0hBTk5FTAkweDAxMEEKLSNkZWZpbmUgTVdMOEtfQ01EX1NFVF9TTE9UCQkweDAxMTQKLSNkZWZpbmUgTVdMOEtfQ01EX01JTU9fQ09ORklHCQkweDAxMjUKLSNkZWZpbmUgTVdMOEtfQ01EX0VOQUJMRV9TTklGRkVSCTB4MDE1MAotI2RlZmluZSBNV0w4S19DTURfU0VUX1dNTV9NT0RFCQkweDAxMjMKLSNkZWZpbmUgTVdMOEtfQ01EX1NFVF9FRENBX1BBUkFNUwkweDAxMTUKLSNkZWZpbmUgTVdMOEtfQ01EX1NFVF9GSU5BTElaRV9KT0lOCTB4MDExMQotI2RlZmluZSBNV0w4S19DTURfVVBEQVRFX1NUQURCCQkweDExMjMKLSNkZWZpbmUgTVdMOEtfQ01EX1NFVF9SQVRFQURBUFRfTU9ERQkweDAyMDMKLSNkZWZpbmUgTVdMOEtfQ01EX1NFVF9MSU5LQURBUFRfTU9ERQkweDAxMjkKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9SRl9DSEFOTkVMCTB4MDEwYQogI2RlZmluZSBNV0w4S19DTURfU0VUX0FJRAkJMHgwMTBkCiAjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUkFURQkJMHgwMTEwCi0jZGVmaW5lIE1XTDhLX0NNRF9VU0VfRklYRURfUkFURQkweDAxMjYKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9GSU5BTElaRV9KT0lOCTB4MDExMQogI2RlZmluZSBNV0w4S19DTURfUlRTX1RIUkVTSE9MRAkJMHgwMTEzCi0jZGVmaW5lIE1XTDhLX0NNRF9FTkNSWVBUSU9OCQkweDExMjIKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9TTE9UCQkweDAxMTQKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9FRENBX1BBUkFNUwkweDAxMTUKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9XTU1fTU9ERQkJMHgwMTIzCisjZGVmaW5lIE1XTDhLX0NNRF9NSU1PX0NPTkZJRwkJMHgwMTI1CisjZGVmaW5lIE1XTDhLX0NNRF9VU0VfRklYRURfUkFURQkweDAxMjYKKyNkZWZpbmUgTVdMOEtfQ01EX0VOQUJMRV9TTklGRkVSCTB4MDE1MAorI2RlZmluZSBNV0w4S19DTURfU0VUX1JBVEVBREFQVF9NT0RFCTB4MDIwMworI2RlZmluZSBNV0w4S19DTURfVVBEQVRFX1NUQURCCQkweDExMjMKIAogc3RhdGljIGNvbnN0IGNoYXIgKm13bDhrX2NtZF9uYW1lKHUxNiBjbWQsIGNoYXIgKmJ1ZiwgaW50IGJ1ZnNpemUpCiB7CkBAIC0zNDksNyArMjk2LDcgQEAKIAkJCQkJc25wcmludGYoYnVmLCBidWZzaXplLCAiJXMiLCAjeCk7XAogCQkJCQlyZXR1cm4gYnVmO1wKIAkJCQkJfSB3aGlsZSAoMCkKLQlzd2l0Y2ggKGNtZCAmICh+MHg4MDAwKSkgeworCXN3aXRjaCAoY21kICYgfjB4ODAwMCkgewogCQlNV0w4S19DTUROQU1FKENPREVfRE5MRCk7CiAJCU1XTDhLX0NNRE5BTUUoR0VUX0hXX1NQRUMpOwogCQlNV0w4S19DTUROQU1FKE1BQ19NVUxUSUNBU1RfQURSKTsKQEAgLTM1OSwyMCArMzA2LDE4IEBACiAJCU1XTDhLX0NNRE5BTUUoU0VUX1BSRV9TQ0FOKTsKIAkJTVdMOEtfQ01ETkFNRShTRVRfUE9TVF9TQ0FOKTsKIAkJTVdMOEtfQ01ETkFNRShTRVRfUkZfQ0hBTk5FTCk7Ci0JCU1XTDhLX0NNRE5BTUUoU0VUX1NMT1QpOwotCQlNV0w4S19DTUROQU1FKE1JTU9fQ09ORklHKTsKLQkJTVdMOEtfQ01ETkFNRShFTkFCTEVfU05JRkZFUik7Ci0JCU1XTDhLX0NNRE5BTUUoU0VUX1dNTV9NT0RFKTsKLQkJTVdMOEtfQ01ETkFNRShTRVRfRURDQV9QQVJBTVMpOwotCQlNV0w4S19DTUROQU1FKFNFVF9GSU5BTElaRV9KT0lOKTsKLQkJTVdMOEtfQ01ETkFNRShVUERBVEVfU1RBREIpOwotCQlNV0w4S19DTUROQU1FKFNFVF9SQVRFQURBUFRfTU9ERSk7Ci0JCU1XTDhLX0NNRE5BTUUoU0VUX0xJTktBREFQVF9NT0RFKTsKIAkJTVdMOEtfQ01ETkFNRShTRVRfQUlEKTsKIAkJTVdMOEtfQ01ETkFNRShTRVRfUkFURSk7Ci0JCU1XTDhLX0NNRE5BTUUoVVNFX0ZJWEVEX1JBVEUpOworCQlNV0w4S19DTUROQU1FKFNFVF9GSU5BTElaRV9KT0lOKTsKIAkJTVdMOEtfQ01ETkFNRShSVFNfVEhSRVNIT0xEKTsKLQkJTVdMOEtfQ01ETkFNRShFTkNSWVBUSU9OKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfU0xPVCk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX0VEQ0FfUEFSQU1TKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfV01NX01PREUpOworCQlNV0w4S19DTUROQU1FKE1JTU9fQ09ORklHKTsKKwkJTVdMOEtfQ01ETkFNRShVU0VfRklYRURfUkFURSk7CisJCU1XTDhLX0NNRE5BTUUoRU5BQkxFX1NOSUZGRVIpOworCQlNV0w4S19DTUROQU1FKFNFVF9SQVRFQURBUFRfTU9ERSk7CisJCU1XTDhLX0NNRE5BTUUoVVBEQVRFX1NUQURCKTsKIAlkZWZhdWx0OgogCQlzbnByaW50ZihidWYsIGJ1ZnNpemUsICIweCV4IiwgY21kKTsKIAl9CkBAIC00NjYsNyArNDExLDYgQEAKIHsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBwcml2LT5yZWdzOwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7Ci0JaW50IHJjOwogCWludCBsb29wczsKIAogCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgZGF0YSwgbGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTQ4MCw3ICs0MjQsNiBAQAogCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RVTU1ZLAogCQlyZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKIAotCXJjID0gLUVUSU1FRE9VVDsKIAlsb29wcyA9IDEwMDA7CiAJZG8gewogCQl1MzIgaW50X2NvZGU7CkBAIC00ODgsNyArNDMxLDYgQEAKIAkJaW50X2NvZGUgPSBpb3JlYWQzMihyZWdzICsgTVdMOEtfSElVX0lOVF9DT0RFKTsKIAkJaWYgKGludF9jb2RlID09IE1XTDhLX0lOVF9DT0RFX0NNRF9GSU5JU0hFRCkgewogCQkJaW93cml0ZTMyKDAsIHJlZ3MgKyBNV0w4S19ISVVfSU5UX0NPREUpOwotCQkJcmMgPSAwOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNDk3LDI2ICs0MzksNyBAQAogCiAJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBkbWFfYWRkciwgbGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAotCS8qCi0JICogQ2xlYXIgJ2NvbW1hbmQgZG9uZScgaW50ZXJydXB0IGJpdC4KLQkgKi8KLQlsb29wcyA9IDEwMDA7Ci0JZG8gewotCQl1MzIgc3RhdHVzOwotCi0JCXN0YXR1cyA9IGlvcmVhZDMyKHByaXYtPnJlZ3MgKwotCQkJCU1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7Ci0JCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX09QQ19ET05FKSB7Ci0JCQlpb3dyaXRlMzIofk1XTDhLX0EySF9JTlRfT1BDX0RPTkUsCi0JCQkJcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7Ci0JCQlpb3JlYWQzMihwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJdWRlbGF5KDEpOwotCX0gd2hpbGUgKC0tbG9vcHMpOwotCi0JcmV0dXJuIHJjOworCXJldHVybiBsb29wcyA/IDAgOiAtRVRJTUVET1VUOwogfQogCiBzdGF0aWMgaW50IG13bDhrX2xvYWRfZndfaW1hZ2Uoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCkBAIC02ODEsMTEgKzYwNCw5IEBACiAKIC8qIFBlZXIgRW50cnkgZmxhZ3MgLSB1c2VkIHRvIGRlZmluZSB0aGUgdHlwZSBvZiB0aGUgcGVlciBub2RlICovCiAjZGVmaW5lIE1XTDhLX1BFRVJfVFlQRV9BQ0NFU1NQT0lOVAkyCi0jZGVmaW5lIE1XTDhLX1BFRVJfVFlQRV9BREhPQ19TVEFUSU9OCTQKIAogI2RlZmluZSBNV0w4S19JRUVFX0xFR0FDWV9EQVRBX1JBVEVTCTEyCiAjZGVmaW5lIE1XTDhLX01DU19CSVRNQVBfU0laRQkJMTYKLSNkZWZpbmUgcGFkX3NpemUJCQkxNgogCiBzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8gewogCS8qIFBlZXIgdHlwZSAtIEFQIHZzLiBTVEEuICAqLwpAQCAtNzA3LDcgKzYyOCw3IEBACiAKIAkvKiBIVCByYXRlIHRhYmxlLiBJbnRlcnNlY3Rpb24gb2Ygb3VyIHJhdGVzIGFuZCBwZWVyIHJhdGVzLiAgKi8KIAlfX3U4CWh0X3JhdGVzW01XTDhLX01DU19CSVRNQVBfU0laRV07Ci0JX191OAlwYWRbcGFkX3NpemVdOworCV9fdTgJcGFkWzE2XTsKIAogCS8qIElmIHNldCwgaW50ZXJvcGVyYWJpbGl0eSBtb2RlLCBubyBwcm9wcmlldGFyeSBleHRlbnNpb25zLiAgKi8KIAlfX3U4CWludGVyb3A7CkBAIC03MTcsMTUgKzYzOCw2IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKiBJbmxpbmUgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgUW9TIGZpZWxkIGluIGRhdGEgZGVzY3JpcHRvci4gICovCi1zdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X3RpZCh1MTYgcW9zLCB1OCB0aWQpCi17Ci0JdTE2IHZhbF9tYXNrID0gMHgwMDBmOwotCXUxNiBxb3NfbWFzayA9IH52YWxfbWFzazsKLQotCS8qIFRJRCBiaXRzIDAtMyAqLwotCXJldHVybiAocW9zICYgcW9zX21hc2spIHwgKHRpZCAmIHZhbF9tYXNrKTsKLX0KLQogc3RhdGljIGlubGluZSB1MTYgbXdsOGtfcW9zX3NldGJpdF9lb3NwKHUxNiBxb3MpCiB7CiAJdTE2IHZhbF9tYXNrID0gMSA8PCA0OwpAQCAtNzY5LDEyICs2ODEsMTEgQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qIFJvdXRpbmVzIHRvIGFkZC9yZW1vdmUgRE1BIGhlYWRlciBmcm9tIHNrYi4gICovCi1zdGF0aWMgaW5saW5lIGludCBtd2w4a19yZW1vdmVfZG1hX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSB2b2lkIG13bDhrX3JlbW92ZV9kbWFfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IG13bDhrX2RtYV9kYXRhICp0ciA9IChzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKikoc2tiLT5kYXRhKTsKKwlzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKnRyID0gKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKXNrYi0+ZGF0YTsKIAl2b2lkICpkc3QsICpzcmMgPSAmdHItPndoOwotCV9fbGUxNiBmYyA9IHRyLT53aC5mcmFtZV9jb250cm9sOwotCWludCBoZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjKTsKKwlpbnQgaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbih0ci0+d2guZnJhbWVfY29udHJvbCk7CiAJdTE2IHNwYWNlID0gc2l6ZW9mKHN0cnVjdCBtd2w4a19kbWFfZGF0YSkgLSBoZHJsZW47CiAKIAlkc3QgPSAodm9pZCAqKXRyICsgc3BhY2U7CkBAIC03ODIsMTEgKzY5Myw5IEBACiAJCW1lbW1vdmUoZHN0LCBzcmMsIGhkcmxlbik7CiAJCXNrYl9wdWxsKHNrYiwgc3BhY2UpOwogCX0KLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICptd2w4a19hZGRfZG1hX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSB2b2lkIG13bDhrX2FkZF9kbWFfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKndoOwogCXUzMiBoZHJsZW4sIHBrdGxlbjsKQEAgLTgxMCw3ICs3MTksNyBAQAogCQltZW1tb3ZlKCZ0ci0+d2gsIHdoLCBoZHJsZW4pOwogCiAJLyogQ2xlYXIgYWRkcjQgKi8KLQltZW1zZXQodHItPndoLmFkZHI0LCAwLCBJRUVFODAyMTFfQUREUl9MRU4pOworCW1lbXNldCh0ci0+d2guYWRkcjQsIDAsIEVUSF9BTEVOKTsKIAogCS8qCiAJICogRmlybXdhcmUgbGVuZ3RoIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGx5IGZvcm1lZCAiODAyLjExCkBAIC04MTgsMTcgKzcyNywxMyBAQAogCSAqIFRoaXMgaW5jbHVkZXMgYWxsIGNyeXB0byBtYXRlcmlhbCBpbmNsdWRpbmcgdGhlIE1JQy4KIAkgKi8KIAl0ci0+ZndsZW4gPSBjcHVfdG9fbGUxNihwa3RsZW4gLSBoZHJsZW4pOwotCi0JcmV0dXJuIHNrYjsKIH0KIAogCiAvKgogICogUGFja2V0IHJlY2VwdGlvbi4KICAqLwotI2RlZmluZSBNV0w4S19SWF9DVFJMX0tFWV9JTkRFWF9NQVNLCTB4MzAKICNkZWZpbmUgTVdMOEtfUlhfQ1RSTF9PV05FRF9CWV9IT1NUCTB4MDIKLSNkZWZpbmUgTVdMOEtfUlhfQ1RSTF9BTVBEVQkJMHgwMQogCiBzdHJ1Y3QgbXdsOGtfcnhfZGVzYyB7CiAJX19sZTE2IHBrdF9sZW47CkBAIC05NzksNyArODg0LDcgQEAKIAkJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXByaXYtPmNhcHR1cmVfYmVhY29uID0gZmFsc2U7Ci0JbWVtc2V0KHByaXYtPmNhcHR1cmVfYnNzaWQsIDAsIElFRUU4MDIxMV9BRERSX0xFTik7CisJbWVtc2V0KHByaXYtPmNhcHR1cmVfYnNzaWQsIDAsIEVUSF9BTEVOKTsKIAogCS8qCiAJICogVXNlIEdGUF9BVE9NSUMgYXMgcnhxX3Byb2Nlc3MgaXMgY2FsbGVkIGZyb20KQEAgLTEwMjQsMTAgKzkyOSw3IEBACiAJCQkJCU1XTDhLX1JYX01BWFNaLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJCXNrYl9wdXQoc2tiLCBsZTE2X3RvX2NwdShyeF9kZXNjLT5wa3RfbGVuKSk7Ci0JCWlmIChtd2w4a19yZW1vdmVfZG1hX2hlYWRlcihza2IpKSB7Ci0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQljb250aW51ZTsKLQkJfQorCQltd2w4a19yZW1vdmVfZG1hX2hlYWRlcihza2IpOwogCiAJCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCkBAIC0xMDQ5LDcgKzk1MSw4IEBACiAJCXN0YXR1cy5mbGFnID0gMDsKIAkJc3RhdHVzLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCQlzdGF0dXMuZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShyeF9kZXNjLT5jaGFubmVsKTsKLQkJaWVlZTgwMjExX3J4X2lycXNhZmUoaHcsIHNrYiwgJnN0YXR1cyk7CisJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCQlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiKTsKIAogCQlwcm9jZXNzZWQrKzsKIAl9CkBAIC0xMDcyLDggKzk3NSw2IEBACiAKIC8qIFRyYW5zbWl0IHBhY2tldCBBQ0sgcG9saWN5ICovCiAjZGVmaW5lIE1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PUk1BTAkJMAotI2RlZmluZSBNV0w4S19UWERfQUNLX1BPTElDWV9OT05FCQkxCi0jZGVmaW5lIE1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PX0VYUExJQ0lUCTIKICNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfQkxPQ0tBQ0sJCTMKIAogI2RlZmluZSBHRVRfVFhRKF9hYykgKFwKQEAgLTEwODIsMjAgKzk4MywxMSBAQAogCQkoKF9hYykgPT0gV01FX0FDX0JLKSA/IE1XTDhLX1dNRV9BQ19CSyA6IFwKIAkJTVdMOEtfV01FX0FDX0JFKQogCi0jZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfSURMRQkJCTB4MDAwMDAwMDAKLSNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19VU0VECQkJMHgwMDAwMDAwMQogI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX09LCQkJMHgwMDAwMDAwMQogI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX09LX1JFVFJZCQkweDAwMDAwMDAyCiAjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0tfTU9SRV9SRVRSWQkJMHgwMDAwMDAwNAogI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX01VTFRJQ0FTVF9UWAkJMHgwMDAwMDAwOAotI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0JST0FEQ0FTVF9UWAkJMHgwMDAwMDAxMAotI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9MSU5LX0VSUk9SCTB4MDAwMDAwMjAKLSNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19GQUlMRURfRVhDRUVEX0xJTUlUCTB4MDAwMDAwNDAKLSNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19GQUlMRURfQUdJTkcJCTB4MDAwMDAwODAKLSNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19IT1NUX0NNRAkJMHg0MDAwMDAwMAogI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVECQkweDgwMDAwMDAwCi0jZGVmaW5lICBNV0w4S19UWERfU09GVFNUQUxFCQkJCTB4ODAKLSNkZWZpbmUgIE1XTDhLX1RYRF9TT0ZUU1RBTEVfTUdNVF9SRVRSWQkJCTB4MDEKIAogc3RydWN0IG13bDhrX3R4X2Rlc2MgewogCV9fbGUzMiBzdGF0dXM7CkBAIC0xMTA0LDcgKzk5Niw3IEBACiAJX19sZTE2IHFvc19jb250cm9sOwogCV9fbGUzMiBwa3RfcGh5c19hZGRyOwogCV9fbGUxNiBwa3RfbGVuOwotCV9fdTggZGVzdF9NQUNfYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOworCV9fdTggZGVzdF9NQUNfYWRkcltFVEhfQUxFTl07CiAJX19sZTMyIG5leHRfdHhfZGVzY19waHlzX2FkZHI7CiAJX19sZTMyIHJlc2VydmVkOwogCV9fbGUxNiByYXRlX2luZm87CkBAIC0xMTIxLDggKzEwMTMsNyBAQAogCWludCBzaXplOwogCWludCBpOwogCi0JbWVtc2V0KCZ0eHEtPnR4X3N0YXRzLCAwLAotCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cykpOworCW1lbXNldCgmdHhxLT50eF9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMpKTsKIAl0eHEtPnR4X3N0YXRzLmxpbWl0ID0gTVdMOEtfVFhfREVTQ1M7CiAJdHhxLT50eF9oZWFkID0gMDsKIAl0eHEtPnR4X3RhaWwgPSAwOwpAQCAtMTE4OSwxNyArMTA4MCwxNyBAQAogfTsKIAogc3RhdGljIGludCBtd2w4a19zY2FuX3R4X3Jpbmcoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IG13bDhrX3R4cV9pbmZvIHR4aW5mb1tdLAotCQkJCXUzMiBudW1fcXVldWVzKQorCQkJCXN0cnVjdCBtd2w4a190eHFfaW5mbyAqdHhpbmZvKQogewogCWludCBjb3VudCwgZGVzYywgc3RhdHVzOwogCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxOwogCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjOwogCWludCBuZGVzY3MgPSAwOwogCi0JbWVtc2V0KHR4aW5mbywgMCwgbnVtX3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgbXdsOGtfdHhxX2luZm8pKTsKKwltZW1zZXQodHhpbmZvLCAwLCBNV0w4S19UWF9RVUVVRVMgKiBzaXplb2Yoc3RydWN0IG13bDhrX3R4cV9pbmZvKSk7CisKIAlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOwotCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG51bV9xdWV1ZXM7IGNvdW50KyspIHsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBNV0w4S19UWF9RVUVVRVM7IGNvdW50KyspIHsKIAkJdHhxID0gcHJpdi0+dHhxICsgY291bnQ7CiAJCXR4aW5mb1tjb3VudF0ubGVuID0gdHhxLT50eF9zdGF0cy5sZW47CiAJCXR4aW5mb1tjb3VudF0uaGVhZCA9IHR4cS0+dHhfaGVhZDsKQEAgLTEyMjIsMzQgKzExMTMsMzQgQEAKIAlyZXR1cm4gbmRlc2NzOwogfQogCi1zdGF0aWMgaW50IG13bDhrX3R4X3dhaXRfZW1wdHkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBkZWxheV9tcykKKy8qCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGh3LT5md19tdXRleCBoZWxkIGFuZCB0eCBxdWV1ZXMgc3RvcHBlZC4KKyAqLworc3RhdGljIGludCBtd2w4a190eF93YWl0X2VtcHR5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXUzMiBjb3VudCA9IDA7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNtZF93YWl0KTsKKwl1MzIgY291bnQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCiAJbWlnaHRfc2xlZXAoKTsKIAotCWlmIChwcml2LT50eF93YWl0ICE9IE5VTEwpCi0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyBQcmV2aW91cyBUWFdhaXRFbXB0eSBpbnN0YW5jZVxuIik7Ci0KIAlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOwogCWNvdW50ID0gbXdsOGtfdHhxX2J1c3kocHJpdik7CiAJaWYgKGNvdW50KSB7CiAJCXByaXYtPnR4X3dhaXQgPSAmY21kX3dhaXQ7Ci0JCWlmIChwcml2LT5yYWRpb19zdGF0ZSkKKwkJaWYgKHByaXYtPnJhZGlvX29uKQogCQkJbXdsOGtfdHhfc3RhcnQocHJpdik7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKIAogCWlmIChjb3VudCkgewotCQlzdHJ1Y3QgbXdsOGtfdHhxX2luZm8gdHhpbmZvWzRdOworCQlzdHJ1Y3QgbXdsOGtfdHhxX2luZm8gdHhpbmZvW01XTDhLX1RYX1FVRVVFU107CiAJCWludCBpbmRleDsKIAkJaW50IG5ld2NvdW50OwogCiAJCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNtZF93YWl0LAotCQkJCQltc2Vjc190b19qaWZmaWVzKGRlbGF5X21zKSk7CisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoNTAwMCkpOwogCQlpZiAodGltZW91dCkKIAkJCXJldHVybiAwOwogCkBAIC0xMjU4LDExICsxMTQ5LDExIEBACiAJCW5ld2NvdW50ID0gbXdsOGtfdHhxX2J1c3kocHJpdik7CiAJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKIAotCQlwcmludGsoS0VSTl9FUlIgIiVzKCV1KSBUSU1FRE9VVDoldW1zIFBlbmQ6JXUtLT4ldVxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgZGVsYXlfbXMsIGNvdW50LCBuZXdjb3VudCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoJXUpIFRJTUVET1VUOjUwMDBtcyBQZW5kOiV1LS0+JXVcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sIGNvdW50LCBuZXdjb3VudCk7CiAKLQkJbXdsOGtfc2Nhbl90eF9yaW5nKHByaXYsIHR4aW5mbywgNCk7Ci0JCWZvciAoaW5kZXggPSAwIDsgaW5kZXggPCA0OyBpbmRleCsrKQorCQltd2w4a19zY2FuX3R4X3JpbmcocHJpdiwgdHhpbmZvKTsKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTVdMOEtfVFhfUVVFVUVTOyBpbmRleCsrKQogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJIlRYUToldSBMOiV1IEg6JXUgVDoldSBGVzoldSBEUlY6JXUgVToldVxuIiwKIAkJCQkJaW5kZXgsCkBAIC0xMjcyLDE4ICsxMTYzLDE3IEBACiAJCQkJCXR4aW5mb1tpbmRleF0uZndfb3duZWQsCiAJCQkJCXR4aW5mb1tpbmRleF0uZHJ2X293bmVkLAogCQkJCQl0eGluZm9baW5kZXhdLnVudXNlZCk7CisKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgTVdMOEtfVFhEX09LCShNV0w4S19UWERfU1RBVFVTX09LIHwgXAotCQkJIE1XTDhLX1RYRF9TVEFUVVNfT0tfUkVUUlkgfCBcCi0JCQkgTVdMOEtfVFhEX1NUQVRVU19PS19NT1JFX1JFVFJZKQotI2RlZmluZSBNV0w4S19UWERfU1VDQ0VTUyhzdGF0KQkJKChzdGF0KSAmIE1XTDhLX1RYRF9PSykKLSNkZWZpbmUgTVdMOEtfVFhEX0ZBSUxfUkVUUlkoc3RhdCkJXAotCSgoc3RhdCkgJiAoTVdMOEtfVFhEX1NUQVRVU19GQUlMRURfRVhDRUVEX0xJTUlUKSkKKyNkZWZpbmUgTVdMOEtfVFhEX1NVQ0NFU1Moc3RhdHVzKQkJCQlcCisJKChzdGF0dXMpICYgKE1XTDhLX1RYRF9TVEFUVVNfT0sgfAkJCVwKKwkJICAgICBNV0w4S19UWERfU1RBVFVTX09LX1JFVFJZIHwJCVwKKwkJICAgICBNV0w4S19UWERfU1RBVFVTX09LX01PUkVfUkVUUlkpKQogCiBzdGF0aWMgdm9pZCBtd2w4a190eHFfcmVjbGFpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4LCBpbnQgZm9yY2UpCiB7CkBAIC0xMjkzLDE1ICsxMTgzLDEzIEBACiAKIAl3aGlsZSAodHhxLT50eF9zdGF0cy5sZW4gPiAwKSB7CiAJCWludCB0eDsKLQkJaW50IHJjOwogCQlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHhfZGVzYzsKIAkJdW5zaWduZWQgbG9uZyBhZGRyOwotCQlzaXplX3Qgc2l6ZTsKKwkJaW50IHNpemU7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAkJdTMyIHN0YXR1czsKIAotCQlyYyA9IDA7CiAJCXR4ID0gdHhxLT50eF9oZWFkOwogCQl0eF9kZXNjID0gdHhxLT50eF9kZXNjX2FyZWEgKyB0eDsKIApAQCAtMTMyMCw1NiArMTIwOCwzMCBAQAogCQlwcml2LT5wZW5kaW5nX3R4X3BrdHMtLTsKIAogCQlhZGRyID0gbGUzMl90b19jcHUodHhfZGVzYy0+cGt0X3BoeXNfYWRkcik7Ci0JCXNpemUgPSAodTMyKShsZTE2X3RvX2NwdSh0eF9kZXNjLT5wa3RfbGVuKSk7Ci0JCXNrYiA9IHR4cS0+dHhfc2tiW3R4XS5za2I7Ci0JCXR4cS0+dHhfc2tiW3R4XS5za2IgPSBOVUxMOworCQlzaXplID0gbGUxNl90b19jcHUodHhfZGVzYy0+cGt0X2xlbik7CisJCXNrYiA9IHR4cS0+dHhfc2tiW3R4XTsKKwkJdHhxLT50eF9za2JbdHhdID0gTlVMTDsKIAogCQlCVUdfT04oc2tiID09IE5VTEwpOwogCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGFkZHIsIHNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCi0JCXJjID0gbXdsOGtfcmVtb3ZlX2RtYV9oZWFkZXIoc2tiKTsKKwkJbXdsOGtfcmVtb3ZlX2RtYV9oZWFkZXIoc2tiKTsKIAogCQkvKiBNYXJrIGRlc2NyaXB0b3IgYXMgdW51c2VkICovCiAJCXR4X2Rlc2MtPnBrdF9waHlzX2FkZHIgPSAwOwogCQl0eF9kZXNjLT5wa3RfbGVuID0gMDsKIAotCQlpZiAodHhxLT50eF9za2JbdHhdLmNsb25lKSB7Ci0JCQkvKiBSZXBsYWNlIHdpdGggb3JpZ2luYWwgc2tiCi0JCQkgKiBiZWZvcmUgcmV0dXJuaW5nIHRvIHN0YWNrCi0JCQkgKiBhcyBidWZmZXIgaGFzIGJlZW4gY2xvbmVkCi0JCQkgKi8KLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXNrYiA9IHR4cS0+dHhfc2tiW3R4XS5jbG9uZTsKLQkJCXR4cS0+dHhfc2tiW3R4XS5jbG9uZSA9IE5VTEw7Ci0JCX0KLQotCQlpZiAocmMpIHsKLQkJCS8qIFNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZyBoZXJlLgotCQkJICogRmFpbGVkIHRvIHJlbW92ZSBETUEgaGVhZGVyLgotCQkJICogUHJpbnQgZXJyb3IgbWVzc2FnZSBhbmQgZHJvcCBwYWNrZXQuCi0JCQkgKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHJlbW92aW5nIERNQSBoZWFkZXIgZnJvbSAiCi0JCQkJCSJ0eCBza2IgMHglcC5cbiIsIHByaXYtPm5hbWUsIHNrYik7Ci0KLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KIAkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAkJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKGluZm8pOwotCi0JCS8qIENvbnZlcnQgZmlybXdhcmUgc3RhdHVzIHN0dWZmIGludG8gdHhfc3RhdHVzICovCi0JCWlmIChNV0w4S19UWERfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCQkvKiBUcmFuc21pdCBPSyAqLworCQlpZiAoTVdMOEtfVFhEX1NVQ0NFU1Moc3RhdHVzKSkKIAkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKLQkJfQogCiAJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKIAotCQl3YWtlID0gIXByaXYtPmluY29uZmlnICYmIHByaXYtPnJhZGlvX3N0YXRlOworCQl3YWtlID0gMTsKIAl9CiAKLQlpZiAod2FrZSkKKwlpZiAod2FrZSAmJiBwcml2LT5yYWRpb19vbiAmJiAhbXV0ZXhfaXNfbG9ja2VkKCZwcml2LT5md19tdXRleCkpCiAJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBpbmRleCk7CiB9CiAKQEAgLTEzOTUsNTYgKzEyNTcsNjAgQEAKIHsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsKKwlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWY7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKndoOwogCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxOwogCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eDsKLQlzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKnRyOwotCXN0cnVjdCBtd2w4a192aWYgKm13bDhrX3ZpZjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqb3JnX3NrYiA9IHNrYjsKIAlkbWFfYWRkcl90IGRtYTsKLQl1MTYgcW9zID0gMDsKLQlib29sIHFvc2ZyYW1lID0gZmFsc2UsIGFtcGR1ZnJhbWUgPSBmYWxzZTsKLQlib29sIG1jZnJhbWUgPSBmYWxzZSwgZWFwb2xmcmFtZSA9IGZhbHNlOwotCWJvb2wgYW1zZHVmcmFtZSA9IGZhbHNlOwotCV9fbGUxNiBmYzsKKwl1MzIgdHhzdGF0dXM7CisJdTggdHhkYXRhcmF0ZTsKKwl1MTYgcW9zOwogCi0JdHhxID0gcHJpdi0+dHhxICsgaW5kZXg7Ci0JdHggPSB0eHEtPnR4X2Rlc2NfYXJlYSArIHR4cS0+dHhfdGFpbDsKKwl3aCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKHdoLT5mcmFtZV9jb250cm9sKSkKKwkJcW9zID0gbGUxNl90b19jcHUoKigoX19sZTE2ICopaWVlZTgwMjExX2dldF9xb3NfY3RsKHdoKSkpOworCWVsc2UKKwkJcW9zID0gMDsKIAotCUJVR19PTih0eHEtPnR4X3NrYlt0eHEtPnR4X3RhaWxdLnNrYiAhPSBOVUxMKTsKLQotCS8qCi0JICogQXBwZW5kIEhXIERNQSBoZWFkZXIgdG8gc3RhcnQgb2YgcGFja2V0LiAgRHJvcCBwYWNrZXQgaWYKLQkgKiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIG9yIGEgZmFpbHVyZSB0byB1bnNoYXJlL3VuY2xvbmUKLQkgKiB0aGUgc2tiLgotCSAqLwotCXNrYiA9IG13bDhrX2FkZF9kbWFfaGVhZGVyKHNrYik7Ci0KLQlpZiAoc2tiID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gcHJlcGVuZCBIVyBETUEgIgotCQkJImhlYWRlciwgZHJvcHBpbmcgVFggZnJhbWUuXG4iLCBwcml2LT5uYW1lKTsKLQkJZGV2X2tmcmVlX3NrYihvcmdfc2tiKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQl9CisJbXdsOGtfYWRkX2RtYV9oZWFkZXIoc2tiKTsKKwl3aCA9ICYoKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKXNrYi0+ZGF0YSktPndoOwogCiAJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAltd2w4a192aWYgPSBNV0w4S19WSUYodHhfaW5mby0+Y29udHJvbC52aWYpOwotCXRyID0gKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKXNrYi0+ZGF0YTsKLQl3aCA9ICZ0ci0+d2g7Ci0JZmMgPSB3aC0+ZnJhbWVfY29udHJvbDsKLQlxb3NmcmFtZSA9IGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYyk7Ci0JbWNmcmFtZSA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHdoLT5hZGRyMSk7Ci0JYW1wZHVmcmFtZSA9ICEhKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSk7CiAKIAlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKIAkJdTE2IHNlcW5vID0gbXdsOGtfdmlmLT5zZXFubzsKKwogCQl3aC0+c2VxX2N0cmwgJj0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRyk7CiAJCXdoLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihzZXFubyA8PCA0KTsKIAkJbXdsOGtfdmlmLT5zZXFubyA9IHNlcW5vKysgJSA0MDk2OwogCX0KIAotCWlmIChxb3NmcmFtZSkKLQkJcW9zID0gbGUxNl90b19jcHUoKigoX19sZTE2ICopaWVlZTgwMjExX2dldF9xb3NfY3RsKHdoKSkpOworCS8qIFNldHVwIGZpcm13YXJlIGNvbnRyb2wgYml0IGZpZWxkcyBmb3IgZWFjaCBmcmFtZSB0eXBlLiAgKi8KKwl0eHN0YXR1cyA9IDA7CisJdHhkYXRhcmF0ZSA9IDA7CisJaWYgKGllZWU4MDIxMV9pc19tZ210KHdoLT5mcmFtZV9jb250cm9sKSB8fAorCSAgICBpZWVlODAyMTFfaXNfY3RsKHdoLT5mcmFtZV9jb250cm9sKSkgeworCQl0eGRhdGFyYXRlID0gMDsKKwkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9lb3NwKHFvcyk7CisJCS8qIFNldCBRdWV1ZSBzaXplIHRvIHVuc3BlY2lmaWVkICovCisJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfcWxlbihxb3MsIDB4ZmYpOworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RhdGEod2gtPmZyYW1lX2NvbnRyb2wpKSB7CisJCXR4ZGF0YXJhdGUgPSAxOworCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIod2gtPmFkZHIxKSkKKwkJCXR4c3RhdHVzIHw9IE1XTDhLX1RYRF9TVEFUVVNfTVVMVElDQVNUX1RYOworCisJCS8qIFNlbmQgcGt0IGluIGFuIGFnZ3JlZ2F0ZSBpZiBBTVBEVSBmcmFtZS4gICovCisJCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCisJCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Fjayhxb3MsCisJCQkJTVdMOEtfVFhEX0FDS19QT0xJQ1lfQkxPQ0tBQ0spOworCQllbHNlCisJCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Fjayhxb3MsCisJCQkJTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9STUFMKTsKKworCQlpZiAocW9zICYgSUVFRTgwMjExX1FPU19DT05UUk9MX0FfTVNEVV9QUkVTRU5UKQorCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hbXNkdShxb3MpOworCX0KIAogCWRtYSA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYi0+ZGF0YSwKIAkJCQlza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CkBAIC0xNDUyLDk5ICsxMzE4LDQwIEBACiAJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5wZGV2LCBkbWEpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGRtYSBtYXAgc2tiLCAiCiAJCQkiZHJvcHBpbmcgVFggZnJhbWUuXG4iLCBwcml2LT5uYW1lKTsKLQotCQlpZiAob3JnX3NrYiAhPSBOVUxMKQotCQkJZGV2X2tmcmVlX3NrYihvcmdfc2tiKTsKLQkJaWYgKHNrYiAhPSBOVUxMKQotCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCi0JLyogU2V0IGRlc2MgaGVhZGVyLCBjcHUgYml0IG9yZGVyLiAgKi8KLQl0eC0+c3RhdHVzID0gMDsKLQl0eC0+ZGF0YV9yYXRlID0gMDsKLQl0eC0+dHhfcHJpb3JpdHkgPSBpbmRleDsKLQl0eC0+cW9zX2NvbnRyb2wgPSAwOwotCXR4LT5yYXRlX2luZm8gPSAwOwotCXR4LT5wZWVyX2lkID0gbXdsOGtfdmlmLT5wZWVyX2lkOwotCi0JYW1zZHVmcmFtZSA9ICEhKHFvcyAmIElFRUU4MDIxMV9RT1NfQ09OVFJPTF9BX01TRFVfUFJFU0VOVCk7Ci0KLQkvKiBTZXR1cCBmaXJtd2FyZSBjb250cm9sIGJpdCBmaWVsZHMgZm9yIGVhY2ggZnJhbWUgdHlwZS4gICovCi0JaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSB8fCBpZWVlODAyMTFfaXNfY3RsKGZjKSkgewotCQl0eC0+ZGF0YV9yYXRlID0gMDsKLQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9lb3NwKHFvcyk7Ci0JCS8qIFNldCBRdWV1ZSBzaXplIHRvIHVuc3BlY2lmaWVkICovCi0JCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfcWxlbihxb3MsIDB4ZmYpOwotCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7Ci0JCXR4LT5kYXRhX3JhdGUgPSAxOwotCQlpZiAobWNmcmFtZSkKLQkJCXR4LT5zdGF0dXMgfD0gTVdMOEtfVFhEX1NUQVRVU19NVUxUSUNBU1RfVFg7Ci0KLQkJLyoKLQkJICogVGVsbCBmaXJtd2FyZSB0byBub3Qgc2VuZCBFQVBPTCBwa3RzIGluIGFuCi0JCSAqIGFnZ3JlZ2F0ZS4gIFZlcmlmeSBhZ2FpbnN0IG1hYzgwMjExIHR4IHBhdGguICBJZgotCQkgKiBzdGFjayB0dXJucyBvZmYgQU1QRFUgZm9yIGFuIEVBUE9MIGZyYW1lIHRoaXMKLQkJICogY2hlY2sgd2lsbCBiZSByZW1vdmVkLgotCQkgKi8KLQkJaWYgKGVhcG9sZnJhbWUpIHsKLQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKLQkJCQlNV0w4S19UWERfQUNLX1BPTElDWV9OT1JNQUwpOwotCQl9IGVsc2UgewotCQkJLyogU2VuZCBwa3QgaW4gYW4gYWdncmVnYXRlIGlmIEFNUERVIGZyYW1lLiAgKi8KLQkJCWlmIChhbXBkdWZyYW1lKQotCQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKLQkJCQkJTVdMOEtfVFhEX0FDS19QT0xJQ1lfQkxPQ0tBQ0spOwotCQkJZWxzZQotCQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKLQkJCQkJTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9STUFMKTsKLQotCQkJaWYgKGFtc2R1ZnJhbWUpCi0JCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hbXNkdShxb3MpOwotCQl9Ci0JfQotCi0JLyogQ29udmVydCB0byBsaXR0bGUgZW5kaWFuICovCi0JdHgtPnFvc19jb250cm9sID0gY3B1X3RvX2xlMTYocW9zKTsKLQl0eC0+c3RhdHVzID0gY3B1X3RvX2xlMzIodHgtPnN0YXR1cyk7Ci0JdHgtPnBrdF9waHlzX2FkZHIgPSBjcHVfdG9fbGUzMihkbWEpOwotCXR4LT5wa3RfbGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOwotCi0JdHhxLT50eF9za2JbdHhxLT50eF90YWlsXS5za2IgPSBza2I7Ci0JdHhxLT50eF9za2JbdHhxLT50eF90YWlsXS5jbG9uZSA9Ci0JCXNrYiA9PSBvcmdfc2tiID8gTlVMTCA6IG9yZ19za2I7Ci0KIAlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOwogCi0JdHgtPnN0YXR1cyA9IGNwdV90b19sZTMyKE1XTDhLX1RYRF9TVEFUVVNfT0sgfAotCQkJCQlNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVEKTsKKwl0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKKworCUJVR19PTih0eHEtPnR4X3NrYlt0eHEtPnR4X3RhaWxdICE9IE5VTEwpOworCXR4cS0+dHhfc2tiW3R4cS0+dHhfdGFpbF0gPSBza2I7CisKKwl0eCA9IHR4cS0+dHhfZGVzY19hcmVhICsgdHhxLT50eF90YWlsOworCXR4LT5kYXRhX3JhdGUgPSB0eGRhdGFyYXRlOworCXR4LT50eF9wcmlvcml0eSA9IGluZGV4OworCXR4LT5xb3NfY29udHJvbCA9IGNwdV90b19sZTE2KHFvcyk7CisJdHgtPnBrdF9waHlzX2FkZHIgPSBjcHVfdG9fbGUzMihkbWEpOworCXR4LT5wa3RfbGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCXR4LT5yYXRlX2luZm8gPSAwOworCXR4LT5wZWVyX2lkID0gbXdsOGtfdmlmLT5wZWVyX2lkOwogCXdtYigpOworCXR4LT5zdGF0dXMgPSBjcHVfdG9fbGUzMihNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVEIHwgdHhzdGF0dXMpOworCisJdHhxLT50eF9zdGF0cy5jb3VudCsrOwogCXR4cS0+dHhfc3RhdHMubGVuKys7CiAJcHJpdi0+cGVuZGluZ190eF9wa3RzKys7Ci0JdHhxLT50eF9zdGF0cy5jb3VudCsrOwotCXR4cS0+dHhfdGFpbCsrOwogCisJdHhxLT50eF90YWlsKys7CiAJaWYgKHR4cS0+dHhfdGFpbCA9PSBNV0w4S19UWF9ERVNDUykKIAkJdHhxLT50eF90YWlsID0gMDsKKwogCWlmICh0eHEtPnR4X2hlYWQgPT0gdHhxLT50eF90YWlsKQogCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShodywgaW5kZXgpOwogCi0JaWYgKHByaXYtPmluY29uZmlnKSB7Ci0JCS8qCi0JCSAqIFNpbGVudGx5IHF1ZXVlIHBhY2tldCB3aGVuIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mCi0JCSAqIGEgY29uZmlnIGN5Y2xlLiAgTm90aWZ5IGZpcm13YXJlIG9ubHkgaWYgd2UgYXJlCi0JCSAqIHdhaXRpbmcgZm9yIFRYUXMgdG8gZW1wdHkuICBJZiBhIHBhY2tldCBpcyBzZW50Ci0JCSAqIGJlZm9yZSAuY29uZmlnKCkgaXMgY29tcGxldGUsIHBlcmhhcHMgaXQgaXMgYmV0dGVyCi0JCSAqIHRvIGRyb3AgdGhlIHBhY2tldCwgYXMgdGhlIGNoYW5uZWwgaXMgYmVpbmcgY2hhbmdlZAotCQkgKiBhbmQgdGhlIHBhY2tldCB3aWxsIGVuZCB1cCBvbiB0aGUgd3JvbmcgY2hhbm5lbC4KLQkJICovCi0JCXByaW50ayhLRVJOX0VSUiAiJXMoKTogV0FSTklORyBUWCBhY3Rpdml0eSB3aGlsZSAiCi0JCQkiaW4gY29uZmlnXG4iLCBfX2Z1bmNfXyk7Ci0KLQkJaWYgKHByaXYtPnR4X3dhaXQgIT0gTlVMTCkKLQkJCW13bDhrX3R4X3N0YXJ0KHByaXYpOwotCX0gZWxzZQotCQltd2w4a190eF9zdGFydChwcml2KTsKKwltd2w4a190eF9zdGFydChwcml2KTsKIAogCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKIApAQCAtMTU1Myw2ICsxMzYwLDYwIEBACiAKIAogLyoKKyAqIEZpcm13YXJlIGFjY2Vzcy4KKyAqCisgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzIGZvciBpc3N1aW5nIGZpcm13YXJlIGNvbW1hbmRzOgorICogLSBTb21lIGNvbW1hbmRzIHJlcXVpcmUgdGhhdCB0aGUgcGFja2V0IHRyYW5zbWl0IHBhdGggaXMgaWRsZSB3aGVuCisgKiAgIHRoZSBjb21tYW5kIGlzIGlzc3VlZC4gIChGb3Igc2ltcGxpY2l0eSwgd2UnbGwganVzdCBxdWllc2NlIHRoZQorICogICB0cmFuc21pdCBwYXRoIGZvciBldmVyeSBjb21tYW5kLikKKyAqIC0gVGhlcmUgYXJlIGNlcnRhaW4gc2VxdWVuY2VzIG9mIGNvbW1hbmRzIHRoYXQgbmVlZCB0byBiZSBpc3N1ZWQgdG8KKyAqICAgdGhlIGhhcmR3YXJlIHNlcXVlbnRpYWxseSwgd2l0aCBubyBvdGhlciBpbnRlcnZlbmluZyBjb21tYW5kcy4KKyAqCisgKiBUaGlzIGxlYWRzIHRvIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgImZpcm13YXJlIGxvY2siIGFzIGEgbXV0ZXggdGhhdAorICogY2FuIGJlIHRha2VuIHJlY3Vyc2l2ZWx5LCBhbmQgd2hpY2ggaXMgdGFrZW4gYnkgYm90aCB0aGUgbG93LWxldmVsCisgKiBjb21tYW5kIHN1Ym1pc3Npb24gZnVuY3Rpb24gKG13bDhrX3Bvc3RfY21kKSBhcyB3ZWxsIGFzIGFueSB1c2VycyBvZgorICogdGhhdCBmdW5jdGlvbiB0aGF0IHJlcXVpcmUgaXNzdWluZyBvZiBhbiBhdG9taWMgc2VxdWVuY2Ugb2YgY29tbWFuZHMsCisgKiBhbmQgcXVpZXNjZXMgdGhlIHRyYW5zbWl0IHBhdGggd2hlbmV2ZXIgaXQncyB0YWtlbi4KKyAqLworc3RhdGljIGludCBtd2w4a19md19sb2NrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlpZiAocHJpdi0+ZndfbXV0ZXhfb3duZXIgIT0gY3VycmVudCkgeworCQlpbnQgcmM7CisKKwkJbXV0ZXhfbG9jaygmcHJpdi0+ZndfbXV0ZXgpOworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJCXJjID0gbXdsOGtfdHhfd2FpdF9lbXB0eShodyk7CisJCWlmIChyYykgeworCQkJaWVlZTgwMjExX3dha2VfcXVldWVzKGh3KTsKKwkJCW11dGV4X3VubG9jaygmcHJpdi0+ZndfbXV0ZXgpOworCisJCQlyZXR1cm4gcmM7CisJCX0KKworCQlwcml2LT5md19tdXRleF9vd25lciA9IGN1cnJlbnQ7CisJfQorCisJcHJpdi0+ZndfbXV0ZXhfZGVwdGgrKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19md191bmxvY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCWlmICghLS1wcml2LT5md19tdXRleF9kZXB0aCkgeworCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOworCQlwcml2LT5md19tdXRleF9vd25lciA9IE5VTEw7CisJCW11dGV4X3VubG9jaygmcHJpdi0+ZndfbXV0ZXgpOworCX0KK30KKworCisvKgogICogQ29tbWFuZCBwcm9jZXNzaW5nLgogICovCiAKQEAgLTE1NjcsNyArMTQyOCw2IEBACiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAl1bnNpZ25lZCBpbnQgZG1hX3NpemU7CiAJaW50IHJjOwotCXUxNiBfX2lvbWVtICpyZXN1bHQ7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKIAl1OCBidWZbMzJdOwogCkBAIC0xNTc4LDQxICsxNDM4LDQzIEBACiAJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5wZGV2LCBkbWFfYWRkcikpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKHByaXYtPmhvc3RjbWRfd2FpdCAhPSBOVUxMKQotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkcgaG9zdCBjb21tYW5kIGluIHByb2dyZXNzXG4iKTsKKwlyYyA9IG13bDhrX2Z3X2xvY2soaHcpOworCWlmIChyYykgeworCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRtYV9hZGRyLCBkbWFfc2l6ZSwKKwkJCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJCXJldHVybiByYzsKKwl9CiAKLQlzcGluX2xvY2tfaXJxKCZwcml2LT5md19sb2NrKTsKIAlwcml2LT5ob3N0Y21kX3dhaXQgPSAmY21kX3dhaXQ7CiAJaW93cml0ZTMyKGRtYV9hZGRyLCByZWdzICsgTVdMOEtfSElVX0dFTl9QVFIpOwogCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RPT1JCRUxMLAogCQlyZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKIAlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9EVU1NWSwKIAkJcmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5md19sb2NrKTsKIAogCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNtZF93YWl0LAogCQkJCW1zZWNzX3RvX2ppZmZpZXMoTVdMOEtfQ01EX1RJTUVPVVRfTVMpKTsKIAorCXByaXYtPmhvc3RjbWRfd2FpdCA9IE5VTEw7CisKKwltd2w4a19md191bmxvY2soaHcpOworCiAJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBkbWFfYWRkciwgZG1hX3NpemUsCiAJCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAKLQlyZXN1bHQgPSAmY21kLT5yZXN1bHQ7CiAJaWYgKCF0aW1lb3V0KSB7Ci0JCXNwaW5fbG9ja19pcnEoJnByaXYtPmZ3X2xvY2spOwotCQlwcml2LT5ob3N0Y21kX3dhaXQgPSBOVUxMOwotCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmZ3X2xvY2spOwogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb21tYW5kICVzIHRpbWVvdXQgYWZ0ZXIgJXUgbXNcbiIsCiAJCSAgICAgICBwcml2LT5uYW1lLAogCQkgICAgICAgbXdsOGtfY21kX25hbWUoY21kLT5jb2RlLCBidWYsIHNpemVvZihidWYpKSwKIAkJICAgICAgIE1XTDhLX0NNRF9USU1FT1VUX01TKTsKIAkJcmMgPSAtRVRJTUVET1VUOwogCX0gZWxzZSB7Ci0JCXJjID0gKnJlc3VsdCA/IC1FSU5WQUwgOiAwOworCQlyYyA9IGNtZC0+cmVzdWx0ID8gLUVJTlZBTCA6IDA7CiAJCWlmIChyYykKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvbW1hbmQgJXMgZXJyb3IgMHgleFxuIiwKIAkJCSAgICAgICBwcml2LT5uYW1lLAogCQkJICAgICAgIG13bDhrX2NtZF9uYW1lKGNtZC0+Y29kZSwgYnVmLCBzaXplb2YoYnVmKSksCi0JCQkgICAgICAgKnJlc3VsdCk7CisJCQkgICAgICAgbGUxNl90b19jcHUoY21kLT5yZXN1bHQpKTsKIAl9CiAKIAlyZXR1cm4gcmM7CkBAIC0xNjI2LDcgKzE0ODgsNyBAQAogCV9fdTggaHdfcmV2OwogCV9fdTggaG9zdF9pbnRlcmZhY2U7CiAJX19sZTE2IG51bV9tY2FkZHJzOwotCV9fdTggcGVybV9hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CisJX191OCBwZXJtX2FkZHJbRVRIX0FMRU5dOwogCV9fbGUxNiByZWdpb25fY29kZTsKIAlfX2xlMzIgZndfcmV2OwogCV9fbGUzMiBwc19jb29raWU7CkBAIC0xNjcwLDcgKzE1MzIsNiBAQAogCQlwcml2LT5udW1fbWNhZGRycyA9IGxlMTZfdG9fY3B1KGNtZC0+bnVtX21jYWRkcnMpOwogCQlwcml2LT5md19yZXYgPSBsZTMyX3RvX2NwdShjbWQtPmZ3X3Jldik7CiAJCXByaXYtPmh3X3JldiA9IGNtZC0+aHdfcmV2OwotCQlwcml2LT5yZWdpb25fY29kZSA9IGxlMTZfdG9fY3B1KGNtZC0+cmVnaW9uX2NvZGUpOwogCX0KIAogCWtmcmVlKGNtZCk7CkBAIC0xNjg0LDQxICsxNTQ1LDQ0IEBACiAJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwogCV9fbGUxNiBhY3Rpb247CiAJX19sZTE2IG51bWFkZHI7Ci0JX191OCBhZGRyWzFdW0lFRUU4MDIxMV9BRERSX0xFTl07CisJX191OCBhZGRyWzBdW0VUSF9BTEVOXTsKIH07CiAKICNkZWZpbmUgTVdMOEtfRU5BQkxFX1JYX01VTFRJQ0FTVCAweDAwMEYKLXN0YXRpYyBpbnQgbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQlpbnQgbWNfY291bnQsCi0JCQkJCXN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCisKK3N0YXRpYyBzdHJ1Y3QgbXdsOGtfY21kX3BrdCAqCitfX213bDhrX2NtZF9tYWNfbXVsdGljYXN0X2FkcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdCkKIHsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBtd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHIgKmNtZDsKLQlpbnQgaW5kZXggPSAwOwotCWludCByYzsKLQlpbnQgc2l6ZSA9IHNpemVvZigqY21kKSArICgobWNfY291bnQgLSAxKSAqIElFRUU4MDIxMV9BRERSX0xFTik7Ci0JY21kID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpbnQgc2l6ZTsKKwlpbnQgaTsKKworCWlmIChtY19jb3VudCA+IHByaXYtPm51bV9tY2FkZHJzKQorCQltY19jb3VudCA9IHByaXYtPm51bV9tY2FkZHJzOworCisJc2l6ZSA9IHNpemVvZigqY21kKSArIG1jX2NvdW50ICogRVRIX0FMRU47CisKKwljbWQgPSBremFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOwogCWlmIChjbWQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCiAJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9NQUNfTVVMVElDQVNUX0FEUik7CiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZSk7CiAJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19FTkFCTEVfUlhfTVVMVElDQVNUKTsKIAljbWQtPm51bWFkZHIgPSBjcHVfdG9fbGUxNihtY19jb3VudCk7Ci0Jd2hpbGUgKChpbmRleCA8IG1jX2NvdW50KSAmJiBtY2xpc3QpIHsKLQkJaWYgKG1jbGlzdC0+ZGFfYWRkcmxlbiAhPSBJRUVFODAyMTFfQUREUl9MRU4pIHsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyX2V4aXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQgJiYgbWNsaXN0OyBpKyspIHsKKwkJaWYgKG1jbGlzdC0+ZGFfYWRkcmxlbiAhPSBFVEhfQUxFTikgeworCQkJa2ZyZWUoY21kKTsKKwkJCXJldHVybiBOVUxMOwogCQl9Ci0JCW1lbWNweShjbWQtPmFkZHJbaW5kZXhdLCBtY2xpc3QtPmRhX2FkZHIsIElFRUU4MDIxMV9BRERSX0xFTik7Ci0JCWluZGV4Kys7CisJCW1lbWNweShjbWQtPmFkZHJbaV0sIG1jbGlzdC0+ZGFfYWRkciwgRVRIX0FMRU4pOwogCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7CiAJfQogCi0JcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKLQotbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyX2V4aXQ6Ci0Ja2ZyZWUoY21kKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuICZjbWQtPmhlYWRlcjsKIH0KIAogLyoKQEAgLTE3NzUsMTggKzE2MzksMTYgQEAKIAlfX2xlMTYgcmFkaW9fb247CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1zdGF0aWMgaW50IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQKK213bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUsIGJvb2wgZm9yY2UpCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sICpjbWQ7CiAJaW50IHJjOwogCi0JaWYgKCgoZW5hYmxlICYgTVdMOEtfUkFESU9fRU5BQkxFKSA9PSBwcml2LT5yYWRpb19zdGF0ZSkgJiYKLQkgICAgIShlbmFibGUgJiBNV0w4S19SQURJT19GT1JDRSkpCisJaWYgKGVuYWJsZSA9PSBwcml2LT5yYWRpb19vbiAmJiAhZm9yY2UpCiAJCXJldHVybiAwOwogCi0JZW5hYmxlICY9IE1XTDhLX1JBRElPX0VOQUJMRTsKLQogCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY21kID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTc5NCwxOCArMTY1NiwyOCBAQAogCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfUkFESU9fQ09OVFJPTCk7CiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKIAljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOwotCWNtZC0+Y29udHJvbCA9IGNwdV90b19sZTE2KHByaXYtPnJhZGlvX3ByZWFtYmxlKTsKKwljbWQtPmNvbnRyb2wgPSBjcHVfdG9fbGUxNihwcml2LT5yYWRpb19zaG9ydF9wcmVhbWJsZSA/IDMgOiAxKTsKIAljbWQtPnJhZGlvX29uID0gY3B1X3RvX2xlMTYoZW5hYmxlID8gMHgwMDAxIDogMHgwMDAwKTsKIAogCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CiAJa2ZyZWUoY21kKTsKIAogCWlmICghcmMpCi0JCXByaXYtPnJhZGlvX3N0YXRlID0gZW5hYmxlOworCQlwcml2LT5yYWRpb19vbiA9IGVuYWJsZTsKIAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBtd2w4a19jbWRfODAyXzExX3JhZGlvX2Rpc2FibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19lbmFibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgMSwgMCk7Cit9CisKIHN0YXRpYyBpbnQKIG13bDhrX3NldF9yYWRpb19wcmVhbWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBzaG9ydF9wcmVhbWJsZSkKIHsKQEAgLTE4MTUsMTIgKzE2ODcsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlwcml2ID0gaHctPnByaXY7CiAKLQlwcml2LT5yYWRpb19wcmVhbWJsZSA9IChzaG9ydF9wcmVhbWJsZSA/Ci0JCU1XTDhLX1JBRElPX1NIT1JUX1BSRUFNQkxFIDoKLQkJTVdMOEtfUkFESU9fTE9OR19QUkVBTUJMRSk7CisJcHJpdi0+cmFkaW9fc2hvcnRfcHJlYW1ibGUgPSBzaG9ydF9wcmVhbWJsZTsKIAotCXJldHVybiBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsCi0JCQlNV0w4S19SQURJT19FTkFCTEUgfCBNV0w4S19SQURJT19GT1JDRSk7CisJcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgMSwgMSk7CiB9CiAKIC8qCkBAIC0xODg4LDExICsxNzU3LDExIEBACiBzdHJ1Y3QgbXdsOGtfY21kX3NldF9wb3N0X3NjYW4gewogCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKIAlfX2xlMzIgaXNpYnNzOwotCV9fdTggYnNzaWRbSUVFRTgwMjExX0FERFJfTEVOXTsKKwlfX3U4IGJzc2lkW0VUSF9BTEVOXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0YXRpYyBpbnQKLW13bDhrX2NtZF9zZXRfcG9zdF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IG1hY1tJRUVFODAyMTFfQUREUl9MRU5dKQorbXdsOGtfY21kX3NldF9wb3N0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTggKm1hYykKIHsKIAlzdHJ1Y3QgbXdsOGtfY21kX3NldF9wb3N0X3NjYW4gKmNtZDsKIAlpbnQgcmM7CkBAIC0xOTA0LDcgKzE3NzMsNyBAQAogCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1BPU1RfU0NBTik7CiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKIAljbWQtPmlzaWJzcyA9IDA7Ci0JbWVtY3B5KGNtZC0+YnNzaWQsIG1hYywgSUVFRTgwMjExX0FERFJfTEVOKTsKKwltZW1jcHkoY21kLT5ic3NpZCwgbWFjLCBFVEhfQUxFTik7CiAKIAlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwogCWtmcmVlKGNtZCk7CkBAIC0xOTU2LDcgKzE4MjUsNyBAQAogCV9fdTggc2hvcnRfc2xvdDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLXN0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9zbG90KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgc2xvdF90aW1lKQorc3RhdGljIGludCBtd2w4a19jbWRfc2V0X3Nsb3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgc2hvcnRfc2xvdF90aW1lKQogewogCXN0cnVjdCBtd2w4a19jbWRfc2V0X3Nsb3QgKmNtZDsKIAlpbnQgcmM7CkBAIC0xOTY4LDcgKzE4MzcsNyBAQAogCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1NMT1QpOwogCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CiAJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKTsKLQljbWQtPnNob3J0X3Nsb3QgPSBzbG90X3RpbWUgPT0gTVdMOEtfU0hPUlRfU0xPVFRJTUUgPyAxIDogMDsKKwljbWQtPnNob3J0X3Nsb3QgPSBzaG9ydF9zbG90X3RpbWU7CiAKIAlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwogCWtmcmVlKGNtZCk7CkBAIC0yMDI2LDcgKzE4OTUsNyBAQAogCiAJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9FTkFCTEVfU05JRkZFUik7CiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKLQljbWQtPmFjdGlvbiA9IGVuYWJsZSA/IGNwdV90b19sZTMyKCh1MzIpTVdMOEtfQ01EX1NFVCkgOiAwOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoISFlbmFibGUpOwogCiAJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKIAlrZnJlZShjbWQpOwpAQCAtMjAzNSw3ICsxOTA0LDcgQEAKIH0KIAogLyoKLSAqIENNRF9TRVRfUkFURV9BREFQVF9NT0RFLgorICogQ01EX1NFVF9SQVRFQURBUFRfTU9ERS4KICAqLwogc3RydWN0IG13bDhrX2NtZF9zZXRfcmF0ZV9hZGFwdF9tb2RlIHsKIAlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CkBAIC0yMDgzLDEzICsxOTUyLDEzIEBACiAKIAljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9XTU1fTU9ERSk7CiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKLQljbWQtPmFjdGlvbiA9IGVuYWJsZSA/IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpIDogMDsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KCEhZW5hYmxlKTsKIAogCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CiAJa2ZyZWUoY21kKTsKIAogCWlmICghcmMpCi0JCXByaXYtPndtbV9tb2RlID0gZW5hYmxlOworCQlwcml2LT53bW1fZW5hYmxlZCA9IGVuYWJsZTsKIAogCXJldHVybiByYzsKIH0KQEAgLTIxMDQsNyArMTk3Myw3IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdGF0aWMgaW50IG13bDhrX3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgICAgdTE2IGFjdGlvbiwgdTE2ICp0aHJlc2hvbGQpCisJCQkgICAgICAgdTE2IGFjdGlvbiwgdTE2IHRocmVzaG9sZCkKIHsKIAlzdHJ1Y3QgbXdsOGtfY21kX3J0c190aHJlc2hvbGQgKmNtZDsKIAlpbnQgcmM7CkBAIC0yMTE2LDcgKzE5ODUsNyBAQAogCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfUlRTX1RIUkVTSE9MRCk7CiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKIAljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KGFjdGlvbik7Ci0JY21kLT50aHJlc2hvbGQgPSBjcHVfdG9fbGUxNigqdGhyZXNob2xkKTsKKwljbWQtPnRocmVzaG9sZCA9IGNwdV90b19sZTE2KHRocmVzaG9sZCk7CiAKIAlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwogCWtmcmVlKGNtZCk7CkBAIC0yMTQ5LDcgKzIwMTgsNiBAQAogCV9fdTggdHhxOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotI2RlZmluZSBNV0w4S19HRVRfRURDQV9BTEwJMAogI2RlZmluZSBNV0w4S19TRVRfRURDQV9DVwkweDAxCiAjZGVmaW5lIE1XTDhLX1NFVF9FRENBX1RYT1AJMHgwMgogI2RlZmluZSBNV0w4S19TRVRfRURDQV9BSUZTCTB4MDQKQEAgLTIxNjQsMjIgKzIwMzIsMTggQEAKIAkJX191OCBhaWZzLCBfX3UxNiB0eG9wKQogewogCXN0cnVjdCBtd2w4a19jbWRfc2V0X2VkY2FfcGFyYW1zICpjbWQ7Ci0JdTMyIGxvZ19jd19taW4sIGxvZ19jd19tYXg7CiAJaW50IHJjOwogCiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwogCWlmIChjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlsb2dfY3dfbWluID0gaWxvZzIoY3dfbWluKzEpOwotCWxvZ19jd19tYXggPSBpbG9nMihjd19tYXgrMSk7CiAJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfRURDQV9QQVJBTVMpOwogCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7Ci0KIAljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX1NFVF9FRENBX0FMTCk7CiAJY21kLT50eG9wID0gY3B1X3RvX2xlMTYodHhvcCk7Ci0JY21kLT5sb2dfY3dfbWF4ID0gKHU4KWxvZ19jd19tYXg7Ci0JY21kLT5sb2dfY3dfbWluID0gKHU4KWxvZ19jd19taW47CisJY21kLT5sb2dfY3dfbWF4ID0gKHU4KWlsb2cyKGN3X21heCArIDEpOworCWNtZC0+bG9nX2N3X21pbiA9ICh1OClpbG9nMihjd19taW4gKyAxKTsKIAljbWQtPmFpZnMgPSBhaWZzOwogCWNtZC0+dHhxID0gcW51bTsKIApAQCAtMjIyMCwxMSArMjA4NCw3IEBACiAKIAljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9GSU5BTElaRV9KT0lOKTsKIAljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwotCi0JaWYgKGR0aW0pCi0JCWNtZC0+c2xlZXBfaW50ZXJ2YWwgPSBjcHVfdG9fbGUzMihkdGltKTsKLQllbHNlCi0JCWNtZC0+c2xlZXBfaW50ZXJ2YWwgPSBjcHVfdG9fbGUzMigxKTsKKwljbWQtPnNsZWVwX2ludGVydmFsID0gY3B1X3RvX2xlMzIoZHRpbSA/IGR0aW0gOiAxKTsKIAogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4ocGF5bG9hZC0+ZnJhbWVfY29udHJvbCk7CiAKQEAgLTIyMzYsOCArMjA5Niw4IEBACiAJCQkic2VudCB0byBmaXJtd2FyZS4gU3o9JXUgTUFYPSV1XG4iLCBfX2Z1bmNfXywKIAkJCXBheWxvYWRfbGVuLCBNV0w4S19GSl9CRUFDT05fTUFYTEVOKTsKIAotCXBheWxvYWRfbGVuID0gcGF5bG9hZF9sZW4gPiBNV0w4S19GSl9CRUFDT05fTUFYTEVOID8KLQkJCQlNV0w4S19GSl9CRUFDT05fTUFYTEVOIDogcGF5bG9hZF9sZW47CisJaWYgKHBheWxvYWRfbGVuID4gTVdMOEtfRkpfQkVBQ09OX01BWExFTikKKwkJcGF5bG9hZF9sZW4gPSBNV0w4S19GSl9CRUFDT05fTUFYTEVOOwogCiAJaWYgKHBheWxvYWQgJiYgcGF5bG9hZF9sZW4pCiAJCW1lbWNweShjbWQtPmJlYWNvbl9kYXRhLCAmcGF5bG9hZC0+dS5iZWFjb24sIHBheWxvYWRfbGVuKTsKQEAgLTIyNTcsNyArMjExNyw3IEBACiAJX19sZTMyCWFjdGlvbjsKIAogCS8qIFBlZXIgTUFDIGFkZHJlc3MgKi8KLQlfX3U4CXBlZXJfYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOworCV9fdTgJcGVlcl9hZGRyW0VUSF9BTEVOXTsKIAogCV9fbGUzMglyZXNlcnZlZDsKIApAQCAtMjI3Myw3ICsyMTMzLDYgQEAKIAlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIgKmNtZDsKIAlzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8gKnBlZXJfaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzID0gbXZfdmlmLT5sZWdhY3lfcmF0ZXM7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAJaW50IHJjOwogCV9fdTggY291bnQsICpyYXRlczsKIApAQCAtMjI4Niw3ICsyMTQ1LDcgQEAKIAogCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoYWN0aW9uKTsKIAlwZWVyX2luZm8gPSAmY21kLT5wZWVyX2luZm87Ci0JbWVtY3B5KGNtZC0+cGVlcl9hZGRyLCBtdl92aWYtPmJzc2lkLCBJRUVFODAyMTFfQUREUl9MRU4pOworCW1lbWNweShjbWQtPnBlZXJfYWRkciwgbXZfdmlmLT5ic3NpZCwgRVRIX0FMRU4pOwogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIE1XTDhLX1NUQV9EQl9BRERfRU5UUlk6CkBAIC0yMjk4LDcgKzIxNTcsNyBAQAogCQlwZWVyX2luZm8tPmFtc2R1X2VuYWJsZWQgPSAwOwogCiAJCXJhdGVzID0gcGVlcl9pbmZvLT5sZWdhY3lfcmF0ZXM7Ci0JCWZvciAoY291bnQgPSAwIDsgY291bnQgPCBtdl92aWYtPmxlZ2FjeV9ucmF0ZXM7IGNvdW50KyspCisJCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG12X3ZpZi0+bGVnYWN5X25yYXRlczsgY291bnQrKykKIAkJCXJhdGVzW2NvdW50XSA9IGJpdHJhdGVzW2NvdW50XS5od192YWx1ZTsKIAogCQlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwpAQCAtMjMyMywyNSArMjE4MiwxOSBAQAogLyoKICAqIENNRF9TRVRfQUlELgogICovCi0jZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfRElTQUJMRUQJCQkweDAwCi0jZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfTk9OX01FTUJFUl9QUk9UX01PREUJCTB4MDEKLSNkZWZpbmUgSUVFRTgwMjExX09QTU9ERV9PTkVfMjBNSFpfU1RBX1BST1RfTU9ERQkweDAyCi0jZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfSFRNSVhFRF9QUk9UX01PREUJCTB4MDMKLQogI2RlZmluZSBNV0w4S19SQVRFX0lOREVYX01BWF9BUlJBWQkJCTE0CiAKICNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF9ESVNBQkxFRAkJCTB4MDAKICNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMUcJCQkJMHgwNwogI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF80ME1IWl9PTkxZCQkweDAyCiAjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUX0FMTAkJCTB4MDYKLSNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF9NQVNLCQkJCTB4MDcKIAogc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc2V0X2FpZCB7CiAJc3RydWN0CW13bDhrX2NtZF9wa3QgaGVhZGVyOwogCV9fbGUxNglhaWQ7CiAKIAkgLyogQVAncyBNQUMgYWRkcmVzcyAoQlNTSUQpICovCi0JX191OAlic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOworCV9fdTgJYnNzaWRbRVRIX0FMRU5dOwogCV9fbGUxNglwcm90ZWN0aW9uX21vZGU7CiAJX191OAlzdXBwX3JhdGVzW01XTDhLX1JBVEVfSU5ERVhfTUFYX0FSUkFZXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CkBAIC0yMzY1LDkgKzIyMTgsNyBAQAogCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CiAJY21kLT5haWQgPSBjcHVfdG9fbGUxNihpbmZvLT5haWQpOwogCi0JbWVtY3B5KGNtZC0+YnNzaWQsIG12X3ZpZi0+YnNzaWQsIElFRUU4MDIxMV9BRERSX0xFTik7Ci0KLQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UX0RJU0FCTEVEOworCW1lbWNweShjbWQtPmJzc2lkLCBtdl92aWYtPmJzc2lkLCBFVEhfQUxFTik7CiAKIAlpZiAoaW5mby0+dXNlX2N0c19wcm90KSB7CiAJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfMTFHOwpAQCAtMjM4NSw3ICsyMjM2LDYgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCiAJY21kLT5wcm90ZWN0aW9uX21vZGUgPSBjcHVfdG9fbGUxNihwcm90X21vZGUpOwogCiAJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbXZfdmlmLT5sZWdhY3lfbnJhdGVzOyBjb3VudCsrKQpAQCAtMjQzOSwxMCArMjI4OSw2IEBACiAgKi8KICNkZWZpbmUgTVdMOEtfUkFURV9UQUJMRV9TSVpFCTgKICNkZWZpbmUgTVdMOEtfVUNBU1RfUkFURQkwCi0jZGVmaW5lIE1XTDhLX01DQVNUX1JBVEUJMQotI2RlZmluZSBNV0w4S19CQ0FTVF9SQVRFCTIKLQotI2RlZmluZSBNV0w4S19VU0VfRklYRURfUkFURQkweDAwMDEKICNkZWZpbmUgTVdMOEtfVVNFX0FVVE9fUkFURQkweDAwMDIKIAogc3RydWN0IG13bDhrX3JhdGVfZW50cnkgewpAQCAtMjUzNSw3ICsyMzgxLDYgQEAKIAlzdGF0dXMgPSBpb3JlYWQzMihwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKIAlpb3dyaXRlMzIofnN0YXR1cywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CiAKLQlzdGF0dXMgJj0gcHJpdi0+aW50X21hc2s7CiAJaWYgKCFzdGF0dXMpCiAJCXJldHVybiBJUlFfTk9ORTsKIApAQCAtMjU0OCwxNyArMjM5MywxNCBAQAogCX0KIAogCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX09QQ19ET05FKSB7Ci0JCWlmIChwcml2LT5ob3N0Y21kX3dhaXQgIT0gTlVMTCkgeworCQlpZiAocHJpdi0+aG9zdGNtZF93YWl0ICE9IE5VTEwpCiAJCQljb21wbGV0ZShwcml2LT5ob3N0Y21kX3dhaXQpOwotCQkJcHJpdi0+aG9zdGNtZF93YWl0ID0gTlVMTDsKLQkJfQogCX0KIAogCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX1FVRVVFX0VNUFRZKSB7Ci0JCWlmICghcHJpdi0+aW5jb25maWcgJiYKLQkJCXByaXYtPnJhZGlvX3N0YXRlICYmCi0JCQltd2w4a190eHFfYnVzeShwcml2KSkKLQkJCQltd2w4a190eF9zdGFydChwcml2KTsKKwkJaWYgKCFtdXRleF9pc19sb2NrZWQoJnByaXYtPmZ3X211dGV4KSAmJgorCQkgICAgcHJpdi0+cmFkaW9fb24gJiYgbXdsOGtfdHhxX2J1c3kocHJpdikpCisJCQltd2w4a190eF9zdGFydChwcml2KTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0yNTg2LDM2NSArMjQyOCw2OCBAQAogCXJldHVybiByYzsKIH0KIAotc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IHsKLQkvKiBJbml0aWFsaXplZCBieSBtd2w4a19xdWV1ZV93b3JrKCkuICAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3dDsKLQotCS8qIFJlcXVpcmVkIGZpZWxkIHBhc3NlZCBpbiB0byBtd2w4a19xdWV1ZV93b3JrKCkuICAqLwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCi0JLyogUmVxdWlyZWQgZmllbGQgcGFzc2VkIGluIHRvIG13bDhrX3F1ZXVlX3dvcmsoKS4gICovCi0JaW50ICgqd2Z1bmMpKHN0cnVjdCB3b3JrX3N0cnVjdCAqdyk7Ci0KLQkvKiBJbml0aWFsaXplZCBieSBtd2w4a19xdWV1ZV93b3JrKCkuICAqLwotCXN0cnVjdCBjb21wbGV0aW9uICpjbWRfd2FpdDsKLQotCS8qIFJlc3VsdCBjb2RlLiAgKi8KLQlpbnQgcmM7Ci0KLQkvKgotCSAqIE9wdGlvbmFsIGZpZWxkLiBSZWZlciB0byBleHBsYW5hdGlvbiBvZiBNV0w4S19XUV9YWFhfWFhYCi0JICogZmxhZ3MgZm9yIGV4cGxhbmF0aW9uLiAgRGVmYXVsdHMgdG8gTVdMOEtfV1FfREVGQVVMVF9PUFRJT05TLgotCSAqLwotCXUzMiBvcHRpb25zOwotCi0JLyogT3B0aW9uYWwgZmllbGQuICBEZWZhdWx0cyB0byBNV0w4S19DT05GSUdfVElNRU9VVF9NUy4gICovCi0JdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zOwotCi0JLyogT3B0aW9uYWwgZmllbGQuICBEZWZhdWx0cyB0byBNV0w4S19XUV9UWFdBSVRfQVRURU1QVFMuICAqLwotCXUzMiB0eHdhaXRfYXR0ZW1wdHM7Ci0KLQkvKiBPcHRpb25hbCBmaWVsZC4gIERlZmF1bHRzIHRvIE1XTDhLX1RYV0FJVF9NUy4gICovCi0JdTMyIHR4X3RpbWVvdXRfbXM7Ci0JdTMyIHN0ZXA7Ci19OwotCi0vKiBGbGFncyBjb250cm9sbGluZyBiZWhhdmlvciBvZiBjb25maWcgcXVldWUgcmVxdWVzdHMgKi8KLQotLyogQ2FsbGVyIHNwaW5zIHdoaWxlIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uICAqLwotI2RlZmluZSBNV0w4S19XUV9TUElOCQkJMHgwMDAwMDAwMQotCi0vKiBXYWl0IGZvciBUWCBxdWV1ZXMgdG8gZW1wdHkgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBjb25maWd1cmF0aW9uLiAgKi8KLSNkZWZpbmUgTVdMOEtfV1FfVFhfV0FJVF9FTVBUWQkJMHgwMDAwMDAwMgotCi0vKiBRdWV1ZSByZXF1ZXN0IGFuZCByZXR1cm4gaW1tZWRpYXRlbHkuICAqLwotI2RlZmluZSBNV0w4S19XUV9QT1NUX1JFUVVFU1QJCTB4MDAwMDAwMDQKLQotLyoKLSAqIENhbGxlciBzbGVlcHMgYW5kIHdhaXRzIGZvciB0YXNrIGNvbXBsZXRlIG5vdGlmaWNhdGlvbi4KLSAqIERvIG5vdCB1c2UgaW4gYXRvbWljIGNvbnRleHQuCi0gKi8KLSNkZWZpbmUgTVdMOEtfV1FfU0xFRVAJCQkweDAwMDAwMDA4Ci0KLS8qIEZyZWUgd29yayBzdHJ1Y3Qgd2hlbiB0YXNrIGlzIGRvbmUuICAqLwotI2RlZmluZSBNV0w4S19XUV9GUkVFX1dPUktTVFJVQ1QJMHgwMDAwMDAxMAotCi0vKgotICogQ29uZmlnIHJlcXVlc3QgaXMgcXVldWVkIGFuZCByZXR1cm5zIHRvIGNhbGxlciBpbWVkaWF0ZWx5LiAgVXNlCi0gKiB0aGlzIGluIGF0b21pYyBjb250ZXh0LiBXb3JrIHN0cnVjdCBpcyBmcmVlZCBieSBtd2w4a19xdWV1ZV93b3JrKCkKLSAqIHdoZW4gdGhpcyBmbGFnIGlzIHNldC4KLSAqLwotI2RlZmluZSBNV0w4S19XUV9RVUVVRV9PTkxZCShNV0w4S19XUV9QT1NUX1JFUVVFU1QgfCBcCi0JCQkJIE1XTDhLX1dRX0ZSRUVfV09SS1NUUlVDVCkKLQotLyogRGVmYXVsdCB3b3JrIHF1ZXVlIGJlaGF2aW9yIGlzIHRvIHNsZWVwIGFuZCB3YWl0IGZvciB0eCBjb21wbGV0aW9uLiAgKi8KLSNkZWZpbmUgTVdMOEtfV1FfREVGQVVMVF9PUFRJT05TIChNV0w4S19XUV9TTEVFUCB8IE1XTDhLX1dRX1RYX1dBSVRfRU1QVFkpCi0KLS8qCi0gKiBEZWZhdWx0IGNvbmZpZyByZXF1ZXN0IHRpbWVvdXQuICBBZGQgYWRqdXN0bWVudHMgdG8gbWFrZSBzdXJlIHRoZQotICogY29uZmlnIHRocmVhZCB3YWl0cyBsb25nIGVub3VnaCBmb3IgYm90aCB0eCB3YWl0IGFuZCBjbWQgd2FpdCBiZWZvcmUKLSAqIHRpbWluZyBvdXQuCi0gKi8KLQotLyogVGltZSB0byB3YWl0IGZvciBhbGwgVFhRcyB0byBkcmFpbi4gIFRYIERvb3JiZWxsIGlzIHByZXNzZWQgZWFjaCB0aW1lLiAgKi8KLSNkZWZpbmUgTVdMOEtfVFhXQUlUX1RJTUVPVVRfTVMJCTEwMDAKLQotLyogRGVmYXVsdCBudW1iZXIgb2YgVFggd2FpdCBhdHRlbXB0cy4gICovCi0jZGVmaW5lIE1XTDhLX1dRX1RYV0FJVF9BVFRFTVBUUwk0Ci0KLS8qIFRvdGFsIHRpbWUgdG8gd2FpdCBmb3IgVFhRIHRvIGRyYWluLiAgKi8KLSNkZWZpbmUgTVdMOEtfVFhXQUlUX01TCQkJKE1XTDhLX1RYV0FJVF9USU1FT1VUX01TICogXAotCQkJCQkJTVdMOEtfV1FfVFhXQUlUX0FUVEVNUFRTKQotCi0vKiBTY2hlZHVsaW5nIHNsb3AuICAqLwotI2RlZmluZSBNV0w4S19PU19TQ0hFRFVMRV9PVkVSSEVBRF9NUwkyMDAKLQotI2RlZmluZSBNV0w4S19DT05GSUdfVElNRU9VVF9NUwkoTVdMOEtfQ01EX1RJTUVPVVRfTVMgKyBcCi0JCQkJIE1XTDhLX1RYV0FJVF9NUyArIFwKLQkJCQkgTVdMOEtfT1NfU0NIRURVTEVfT1ZFUkhFQURfTVMpCi0KLXN0YXRpYyB2b2lkIG13bDhrX2NvbmZpZ190aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKLXsKLQlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgKndvcmtlciA9IChzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgKil3dDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aHc7Ci0Jc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlpbnQgcmMgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7Ci0JcHJpdi0+aW5jb25maWcgPSB0cnVlOwotCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7Ci0KLQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOwotCi0JLyoKLQkgKiBXYWl0IGZvciBob3N0IHF1ZXVlcyB0byBkcmFpbiBiZWZvcmUgZG9pbmcgUEhZCi0JICogcmVjb25maWd1cmF0aW9uLiBUaGlzIGF2b2lkcyBpbnRlcnJ1cHRpbmcgYW55IGluLWZsaWdodAotCSAqIERNQSB0cmFuc2ZlcnMgdG8gdGhlIGhhcmR3YXJlLgotCSAqLwotCWlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9UWF9XQUlUX0VNUFRZKSB7Ci0JCXUzMiB0aW1lb3V0OwotCQl1MzIgdGltZV9yZW1haW5pbmc7Ci0JCXUzMiBpdGVyOwotCQl1MzIgdHhfd2FpdF9hdHRlbXB0cyA9IHdvcmtlci0+dHh3YWl0X2F0dGVtcHRzOwotCi0JCXRpbWVfcmVtYWluaW5nID0gd29ya2VyLT50eF90aW1lb3V0X21zOwotCQlpZiAoIXR4X3dhaXRfYXR0ZW1wdHMpCi0JCQl0eF93YWl0X2F0dGVtcHRzID0gMTsKLQotCQl0aW1lb3V0ID0gd29ya2VyLT50eF90aW1lb3V0X21zL3R4X3dhaXRfYXR0ZW1wdHM7Ci0JCWlmICghdGltZW91dCkKLQkJCXRpbWVvdXQgPSAxOwotCi0JCWl0ZXIgPSB0eF93YWl0X2F0dGVtcHRzOwotCQlkbyB7Ci0JCQlpbnQgd2FpdF90aW1lOwotCi0JCQlpZiAodGltZV9yZW1haW5pbmcgPiB0aW1lb3V0KSB7Ci0JCQkJdGltZV9yZW1haW5pbmcgLT0gdGltZW91dDsKLQkJCQl3YWl0X3RpbWUgPSB0aW1lb3V0OwotCQkJfSBlbHNlCi0JCQkJd2FpdF90aW1lID0gdGltZV9yZW1haW5pbmc7Ci0KLQkJCWlmICghd2FpdF90aW1lKQotCQkJCXdhaXRfdGltZSA9IDE7Ci0KLQkJCXJjID0gbXdsOGtfdHhfd2FpdF9lbXB0eShodywgd2FpdF90aW1lKTsKLQkJCWlmIChyYykKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdHh3YWl0IHRpbWVvdXQ9JXVtcyAiCi0JCQkJCSJSZXRyeToldS8ldVxuIiwgX19mdW5jX18sIHRpbWVvdXQsCi0JCQkJCXR4X3dhaXRfYXR0ZW1wdHMgLSBpdGVyICsgMSwKLQkJCQkJdHhfd2FpdF9hdHRlbXB0cyk7Ci0KLQkJfSB3aGlsZSAocmMgJiYgLS1pdGVyKTsKLQotCQlyYyA9IGl0ZXIgPyAwIDogLUVUSU1FRE9VVDsKLQl9Ci0JaWYgKCFyYykKLQkJcmMgPSB3b3JrZXItPndmdW5jKHd0KTsKLQotCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOwotCXByaXYtPmluY29uZmlnID0gZmFsc2U7Ci0JaWYgKHByaXYtPnBlbmRpbmdfdHhfcGt0cyAmJiBwcml2LT5yYWRpb19zdGF0ZSkKLQkJbXdsOGtfdHhfc3RhcnQocHJpdik7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOwotCi0Jd29ya2VyLT5yYyA9IHJjOwotCWlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9TTEVFUCkKLQkJY29tcGxldGUod29ya2VyLT5jbWRfd2FpdCk7Ci0KLQlpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfRlJFRV9XT1JLU1RSVUNUKQotCQlrZnJlZSh3dCk7Ci19Ci0KLXN0YXRpYyBpbnQgbXdsOGtfcXVldWVfd29yayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgKndvcmtlciwKLQkJCQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3F1ZXVlLAotCQkJCWludCAoKndmdW5jKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpKQotewotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7Ci0JaW50IHJjID0gMDsKLQotCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNtZF93YWl0KTsKLQotCWlmICghd29ya2VyLT50aW1lb3V0X21zKQotCQl3b3JrZXItPnRpbWVvdXRfbXMgPSBNV0w4S19DT05GSUdfVElNRU9VVF9NUzsKLQotCWlmICghd29ya2VyLT5vcHRpb25zKQotCQl3b3JrZXItPm9wdGlvbnMgPSBNV0w4S19XUV9ERUZBVUxUX09QVElPTlM7Ci0KLQlpZiAoIXdvcmtlci0+dHh3YWl0X2F0dGVtcHRzKQotCQl3b3JrZXItPnR4d2FpdF9hdHRlbXB0cyA9IE1XTDhLX1dRX1RYV0FJVF9BVFRFTVBUUzsKLQotCWlmICghd29ya2VyLT50eF90aW1lb3V0X21zKQotCQl3b3JrZXItPnR4X3RpbWVvdXRfbXMgPSBNV0w4S19UWFdBSVRfTVM7Ci0KLQl3b3JrZXItPmh3ID0gaHc7Ci0Jd29ya2VyLT5jbWRfd2FpdCA9ICZjbWRfd2FpdDsKLQl3b3JrZXItPnJjID0gMTsKLQl3b3JrZXItPndmdW5jID0gd2Z1bmM7Ci0KLQlJTklUX1dPUksoJndvcmtlci0+d3QsIG13bDhrX2NvbmZpZ190aHJlYWQpOwotCXF1ZXVlX3dvcmsod3F1ZXVlLCAmd29ya2VyLT53dCk7Ci0KLQlpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfUE9TVF9SRVFVRVNUKSB7Ci0JCXJjID0gMDsKLQl9IGVsc2UgewotCQlpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfU1BJTikgewotCQkJdGltZW91dCA9IHdvcmtlci0+dGltZW91dF9tczsKLQkJCXdoaWxlICh0aW1lb3V0ICYmICh3b3JrZXItPnJjID4gMCkpIHsKLQkJCQltZGVsYXkoMSk7Ci0JCQkJdGltZW91dC0tOwotCQkJfQotCQl9IGVsc2UgaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1NMRUVQKQotCQkJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY21kX3dhaXQsCi0JCQkJbXNlY3NfdG9famlmZmllcyh3b3JrZXItPnRpbWVvdXRfbXMpKTsKLQotCQlpZiAodGltZW91dCkKLQkJCXJjID0gd29ya2VyLT5yYzsKLQkJZWxzZSB7Ci0JCQljYW5jZWxfd29ya19zeW5jKCZ3b3JrZXItPnd0KTsKLQkJCXJjID0gLUVUSU1FRE9VVDsKLQkJfQotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RydWN0IG13bDhrX3N0YXJ0X3dvcmtlciB7Ci0Jc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKLX07Ci0KLXN0YXRpYyBpbnQgbXdsOGtfc3RhcnRfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKLXsKLQlzdHJ1Y3QgbXdsOGtfc3RhcnRfd29ya2VyICp3b3JrZXIgPSAoc3RydWN0IG13bDhrX3N0YXJ0X3dvcmtlciAqKXd0OwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7Ci0Jc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKHByaXYtPnZpZiAhPSBOVUxMKSB7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBtd2w4a19zdGFydF9leGl0OwotCX0KLQotCS8qIFR1cm4gb24gcmFkaW8gKi8KLQlpZiAobXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19FTkFCTEUpKSB7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBtd2w4a19zdGFydF9leGl0OwotCX0KLQotCS8qIFB1cmdlIFRYL1JYIEhXIHF1ZXVlcyAqLwotCWlmIChtd2w4a19jbWRfc2V0X3ByZV9zY2FuKGh3KSkgewotCQlyYyA9IC1FSU87Ci0JCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKLQl9Ci0KLQlpZiAobXdsOGtfY21kX3NldF9wb3N0X3NjYW4oaHcsICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiKSkgewotCQlyYyA9IC1FSU87Ci0JCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKLQl9Ci0KLQkvKiBFbmFibGUgZmlybXdhcmUgcmF0ZSBhZGFwdGF0aW9uICovCi0JaWYgKG13bDhrX2NtZF9zZXRyYXRlYWRhcHRtb2RlKGh3LCAwKSkgewotCQlyYyA9IC1FSU87Ci0JCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKLQl9Ci0KLQkvKiBEaXNhYmxlIFdNTS4gV01NIGdldHMgZW5hYmxlZCB3aGVuIHN0YWNrIHNlbmRzIFdNTSBwYXJtcyAqLwotCWlmIChtd2w4a19zZXRfd21tKGh3LCBNV0w4S19XTU1fRElTQUJMRSkpIHsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7Ci0JfQotCi0JLyogRGlzYWJsZSBzbmlmZmVyIG1vZGUgKi8KLQlpZiAobXdsOGtfZW5hYmxlX3NuaWZmZXIoaHcsIDApKQotCQlyYyA9IC1FSU87Ci0KLW13bDhrX3N0YXJ0X2V4aXQ6Ci0JcmV0dXJuIHJjOwotfQotCiBzdGF0aWMgaW50IG13bDhrX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBtd2w4a19zdGFydF93b3JrZXIgKndvcmtlcjsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCByYzsKIAotCS8qIEVuYWJsZSB0eCByZWNsYWltIHRhc2tsZXQgKi8KLQl0YXNrbGV0X2VuYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKLQogCXJjID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCAmbXdsOGtfaW50ZXJydXB0LAogCQkJIElSUUZfU0hBUkVELCBNV0w4S19OQU1FLCBodyk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIiwKIAkJICAgICAgIHByaXYtPm5hbWUpOwotCQlyYyA9IC1FSU87Ci0JCWdvdG8gbXdsOGtfc3RhcnRfZGlzYWJsZV90YXNrbGV0OworCQlyZXR1cm4gLUVJTzsKIAl9CiAKKwkvKiBFbmFibGUgdHggcmVjbGFpbSB0YXNrbGV0ICovCisJdGFza2xldF9lbmFibGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisKIAkvKiBFbmFibGUgaW50ZXJydXB0cyAqLwotCWlvd3JpdGUzMihwcml2LT5pbnRfbWFzaywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCWlvd3JpdGUzMihNV0w4S19BMkhfRVZFTlRTLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CiAKLQl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdvcmtlciA9PSBOVUxMKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBtd2w4a19zdGFydF9kaXNhYmxlX2lycTsKKwlyYyA9IG13bDhrX2Z3X2xvY2soaHcpOworCWlmICghcmMpIHsKKwkJcmMgPSBtd2w4a19jbWRfODAyXzExX3JhZGlvX2VuYWJsZShodyk7CisKKwkJaWYgKCFyYykKKwkJCXJjID0gbXdsOGtfY21kX3NldF9wcmVfc2Nhbihodyk7CisKKwkJaWYgKCFyYykKKwkJCXJjID0gbXdsOGtfY21kX3NldF9wb3N0X3NjYW4oaHcsCisJCQkJCSJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiKTsKKworCQlpZiAoIXJjKQorCQkJcmMgPSBtd2w4a19jbWRfc2V0cmF0ZWFkYXB0bW9kZShodywgMCk7CisKKwkJaWYgKCFyYykKKwkJCXJjID0gbXdsOGtfc2V0X3dtbShodywgMCk7CisKKwkJaWYgKCFyYykKKwkJCXJjID0gbXdsOGtfZW5hYmxlX3NuaWZmZXIoaHcsIDApOworCisJCW13bDhrX2Z3X3VubG9jayhodyk7CiAJfQogCi0JcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCi0JCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX3N0YXJ0X3d0KTsKLQlrZnJlZSh3b3JrZXIpOwotCWlmICghcmMpCi0JCXJldHVybiByYzsKLQotCWlmIChyYyA9PSAtRVRJTUVET1VUKQotCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7Ci0KLQlyYyA9IC1FSU87Ci0KLW13bDhrX3N0YXJ0X2Rpc2FibGVfaXJxOgotCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOwotCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKLQlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKLQotbXdsOGtfc3RhcnRfZGlzYWJsZV90YXNrbGV0OgotCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RydWN0IG13bDhrX3N0b3Bfd29ya2VyIHsKLQlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOwotfTsKLQotc3RhdGljIGludCBtd2w4a19zdG9wX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCi17Ci0Jc3RydWN0IG13bDhrX3N0b3Bfd29ya2VyICp3b3JrZXIgPSAoc3RydWN0IG13bDhrX3N0b3Bfd29ya2VyICopd3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKLQlpbnQgcmM7Ci0KLQlyYyA9IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRElTQUJMRSk7CisJaWYgKHJjKSB7CisJCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOworCQl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisJfQogCiAJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBtd2w4a19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCWludCByYzsKLQlzdHJ1Y3QgbXdsOGtfc3RvcF93b3JrZXIgKndvcmtlcjsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCBpOwogCi0JaWYgKHByaXYtPnZpZiAhPSBOVUxMKQotCQlyZXR1cm47CisJbXdsOGtfY21kXzgwMl8xMV9yYWRpb19kaXNhYmxlKGh3KTsKIAogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CiAKLQl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdvcmtlciA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKLQkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfc3RvcF93dCk7Ci0Ja2ZyZWUod29ya2VyKTsKLQlpZiAocmMgPT0gLUVUSU1FRE9VVCkKLQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOwotCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCi0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CiAJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKLQlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOwogCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOwogCiAJLyogU3RvcCBmaW5hbGl6ZSBqb2luIHdvcmtlciAqLwpAQCAtMjk3OCw4ICsyNTIzLDcgQEAKIAkvKgogCSAqIFdlIG9ubHkgc3VwcG9ydCBtYW5hZ2VkIGludGVyZmFjZXMgZm9yIG5vdy4KIAkgKi8KLQlpZiAoY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKKwlpZiAoY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIENsZWFuIG91dCBkcml2ZXIgcHJpdmF0ZSBhcmVhICovCkBAIC0yOTg3LDEzICsyNTMxLDEzIEBACiAJbWVtc2V0KG13bDhrX3ZpZiwgMCwgc2l6ZW9mKCptd2w4a192aWYpKTsKIAogCS8qIFNhdmUgdGhlIG1hYyBhZGRyZXNzICovCi0JbWVtY3B5KG13bDhrX3ZpZi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBJRUVFODAyMTFfQUREUl9MRU4pOworCW1lbWNweShtd2w4a192aWYtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCiAJLyogQmFjayBwb2ludGVyIHRvIHBhcmVudCBjb25maWcgYmxvY2sgKi8KIAltd2w4a192aWYtPnByaXYgPSBwcml2OwogCiAJLyogU2V0dXAgaW5pdGlhbCBQSFkgcGFyYW1ldGVycyAqLwotCW1lbWNweShtd2w4a192aWYtPmxlZ2FjeV9yYXRlcyAsCisJbWVtY3B5KG13bDhrX3ZpZi0+bGVnYWN5X3JhdGVzLAogCQlwcml2LT5yYXRlcywgc2l6ZW9mKG13bDhrX3ZpZi0+bGVnYWN5X3JhdGVzKSk7CiAJbXdsOGtfdmlmLT5sZWdhY3lfbnJhdGVzID0gQVJSQVlfU0laRShwcml2LT5yYXRlcyk7CiAKQEAgLTMwMTcsMTUyICsyNTYxLDQ0IEBACiAJcHJpdi0+dmlmID0gTlVMTDsKIH0KIAotc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgewotCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7Ci0JdTMyIGNoYW5nZWQ7Ci19OwotCi1zdGF0aWMgaW50IG13bDhrX2NvbmZpZ193dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQorc3RhdGljIGludCBtd2w4a19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQogewotCXN0cnVjdCBtd2w4a19jb25maWdfd29ya2VyICp3b3JrZXIgPQotCQkoc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgKil3dDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWludCByYyA9IDA7CisJaW50IHJjOwogCi0JaWYgKCFjb25mLT5yYWRpb19lbmFibGVkKSB7Ci0JCW13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRElTQUJMRSk7CisJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSkgeworCQltd2w4a19jbWRfODAyXzExX3JhZGlvX2Rpc2FibGUoaHcpOwogCQlwcml2LT5jdXJyZW50X2NoYW5uZWwgPSBOVUxMOwotCQlyYyA9IDA7Ci0JCWdvdG8gbXdsOGtfY29uZmlnX2V4aXQ7CisJCXJldHVybiAwOwogCX0KIAotCWlmIChtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsIE1XTDhLX1JBRElPX0VOQUJMRSkpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIG13bDhrX2NvbmZpZ19leGl0OwotCX0KKwlyYyA9IG13bDhrX2Z3X2xvY2soaHcpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmMgPSBtd2w4a19jbWRfODAyXzExX3JhZGlvX2VuYWJsZShodyk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKworCXJjID0gbXdsOGtfY21kX3NldF9yZl9jaGFubmVsKGh3LCBjb25mLT5jaGFubmVsKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OwogCiAJcHJpdi0+Y3VycmVudF9jaGFubmVsID0gY29uZi0+Y2hhbm5lbDsKIAotCWlmIChtd2w4a19jbWRfc2V0X3JmX2NoYW5uZWwoaHcsIGNvbmYtPmNoYW5uZWwpKSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBtd2w4a19jb25maWdfZXhpdDsKLQl9Ci0KIAlpZiAoY29uZi0+cG93ZXJfbGV2ZWwgPiAxOCkKIAkJY29uZi0+cG93ZXJfbGV2ZWwgPSAxODsKLQlpZiAobXdsOGtfY21kXzgwMl8xMV9yZl90eF9wb3dlcihodywgY29uZi0+cG93ZXJfbGV2ZWwpKSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBtd2w4a19jb25maWdfZXhpdDsKLQl9CisJcmMgPSBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyKGh3LCBjb25mLT5wb3dlcl9sZXZlbCk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKIAogCWlmIChtd2w4a19jbWRfbWltb19jb25maWcoaHcsIDB4NywgMHg3KSkKIAkJcmMgPSAtRUlOVkFMOwogCi1td2w4a19jb25maWdfZXhpdDoKLQlyZXR1cm4gcmM7Ci19CitvdXQ6CisJbXdsOGtfZndfdW5sb2NrKGh3KTsKIAotc3RhdGljIGludCBtd2w4a19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgKndvcmtlcjsKLQlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCi0Jd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOwotCWlmICh3b3JrZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl3b3JrZXItPmNoYW5nZWQgPSBjaGFuZ2VkOwotCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAotCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLCBtd2w4a19jb25maWdfd3QpOwotCWlmIChyYyA9PSAtRVRJTUVET1VUKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXQuXG4iLCBfX2Z1bmNfXyk7Ci0JCXJjID0gLUVJTlZBTDsKLQl9Ci0KLQlrZnJlZSh3b3JrZXIpOwotCi0JLyoKLQkgKiBtYWM4MDIxMSB3aWxsIGNyYXNoIG9uIGFueXRoaW5nIG90aGVyIHRoYW4gLUVJTlZBTCBvbgotCSAqIGVycm9yLiBMb29rcyBsaWtlIHdpcmVsZXNzIGV4dGVuc2lvbnMgd2hpY2ggY2FsbHMgbWFjODAyMTEKLQkgKiBtYXkgYmUgdGhlIGFjdHVhbCBjdWxwcml0Li4uCi0JICovCi0JcmV0dXJuIHJjID8gLUVJTlZBTCA6IDA7Ci19Ci0KLXN0cnVjdCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3dvcmtlciB7Ci0Jc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm87Ci0JdTMyIGNoYW5nZWQ7Ci19OwotCi1zdGF0aWMgaW50IG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKLXsKLQlzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgKndvcmtlciA9Ci0JCShzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgKil3dDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSB3b3JrZXItPnZpZjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvID0gd29ya2VyLT5pbmZvOwotCXUzMiBjaGFuZ2VkOwotCWludCByYzsKLQotCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0Jc3RydWN0IG13bDhrX3ZpZiAqbXdsOGtfdmlmID0gTVdMOEtfVklGKHZpZik7Ci0KLQljaGFuZ2VkID0gd29ya2VyLT5jaGFuZ2VkOwotCXByaXYtPmNhcHR1cmVfYmVhY29uID0gZmFsc2U7Ci0KLQlpZiAoaW5mby0+YXNzb2MpIHsKLQkJbWVtY3B5KCZtd2w4a192aWYtPmJzc19pbmZvLCBpbmZvLAotCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYpKTsKLQotCQkvKiBJbnN0YWxsIHJhdGVzICovCi0JCWlmIChtd2w4a191cGRhdGVfcmF0ZXNldChodywgdmlmKSkKLQkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OwotCi0JCS8qIFR1cm4gb24gcmF0ZSBhZGFwdGF0aW9uICovCi0JCWlmIChtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGUoaHcsIE1XTDhLX1VTRV9BVVRPX1JBVEUsCi0JCQlNV0w4S19VQ0FTVF9SQVRFLCBOVUxMKSkKLQkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OwotCi0JCS8qIFNldCByYWRpbyBwcmVhbWJsZSAqLwotCQlpZiAobXdsOGtfc2V0X3JhZGlvX3ByZWFtYmxlKGh3LAotCQkJCWluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSkpCi0JCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKLQotCQkvKiBTZXQgc2xvdCB0aW1lICovCi0JCWlmIChtd2w4a19jbWRfc2V0X3Nsb3QoaHcsIGluZm8tPnVzZV9zaG9ydF9zbG90ID8KLQkJCQlNV0w4S19TSE9SVF9TTE9UVElNRSA6IE1XTDhLX0xPTkdfU0xPVFRJTUUpKQotCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7Ci0KLQkJLyogVXBkYXRlIHBlZXIgcmF0ZSBpbmZvICovCi0JCWlmIChtd2w4a19jbWRfdXBkYXRlX3N0YV9kYihodywgdmlmLAotCQkJCU1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlkpKQotCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7Ci0KLQkJLyogU2V0IEFJRCAqLwotCQlpZiAobXdsOGtfY21kX3NldF9haWQoaHcsIHZpZikpCi0JCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKLQotCQkvKgotCQkgKiBGaW5hbGl6ZSB0aGUgam9pbi4gIFRlbGwgcnggaGFuZGxlciB0byBwcm9jZXNzCi0JCSAqIG5leHQgYmVhY29uIGZyb20gb3VyIEJTU0lELgotCQkgKi8KLQkJbWVtY3B5KHByaXYtPmNhcHR1cmVfYnNzaWQsCi0JCQkJbXdsOGtfdmlmLT5ic3NpZCwgSUVFRTgwMjExX0FERFJfTEVOKTsKLQkJcHJpdi0+Y2FwdHVyZV9iZWFjb24gPSB0cnVlOwotCX0gZWxzZSB7Ci0JCW13bDhrX2NtZF91cGRhdGVfc3RhX2RiKGh3LCB2aWYsIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlkpOwotCQltZW1zZXQoJm13bDhrX3ZpZi0+YnNzX2luZm8sIDAsCi0JCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZikpOwotCQltZW1zZXQobXdsOGtfdmlmLT5ic3NpZCwgMCwgSUVFRTgwMjExX0FERFJfTEVOKTsKLQl9Ci0KLW13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDoKLQlyYyA9IDA7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zMTcxLDU5ICsyNjA3LDEwMiBAQAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCiAJCQkJICAgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd29ya2VyICp3b3JrZXI7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgbXdsOGtfdmlmICptdl92aWYgPSBNV0w4S19WSUYodmlmKTsKKwlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWYgPSBNV0w4S19WSUYodmlmKTsKIAlpbnQgcmM7CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKQotCQltZW1jcHkobXZfdmlmLT5ic3NpZCwgaW5mby0+YnNzaWQsIElFRUU4MDIxMV9BRERSX0xFTik7CisJCW1lbWNweShtd2w4a192aWYtPmJzc2lkLCBpbmZvLT5ic3NpZCwgRVRIX0FMRU4pOwogCiAJaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpID09IDApCiAJCXJldHVybjsKIAotCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAod29ya2VyID09IE5VTEwpCisJcHJpdi0+Y2FwdHVyZV9iZWFjb24gPSBmYWxzZTsKKworCXJjID0gbXdsOGtfZndfbG9jayhodyk7CisJaWYgKHJjKQogCQlyZXR1cm47CiAKLQl3b3JrZXItPnZpZiA9IHZpZjsKLQl3b3JrZXItPmluZm8gPSBpbmZvOwotCXdvcmtlci0+Y2hhbmdlZCA9IGNoYW5nZWQ7Ci0JcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCi0JCQkgICAgICBwcml2LT5jb25maWdfd3EsCi0JCQkgICAgICBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3d0KTsKLQlrZnJlZSh3b3JrZXIpOwotCWlmIChyYyA9PSAtRVRJTUVET1VUKQotCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7CisJaWYgKGluZm8tPmFzc29jKSB7CisJCW1lbWNweSgmbXdsOGtfdmlmLT5ic3NfaW5mbywgaW5mbywKKwkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mKSk7CisKKwkJLyogSW5zdGFsbCByYXRlcyAqLworCQlyYyA9IG13bDhrX3VwZGF0ZV9yYXRlc2V0KGh3LCB2aWYpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKworCQkvKiBUdXJuIG9uIHJhdGUgYWRhcHRhdGlvbiAqLworCQlyYyA9IG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZShodywgTVdMOEtfVVNFX0FVVE9fUkFURSwKKwkJCU1XTDhLX1VDQVNUX1JBVEUsIE5VTEwpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKworCQkvKiBTZXQgcmFkaW8gcHJlYW1ibGUgKi8KKwkJcmMgPSBtd2w4a19zZXRfcmFkaW9fcHJlYW1ibGUoaHcsIGluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCisJCS8qIFNldCBzbG90IHRpbWUgKi8KKwkJcmMgPSBtd2w4a19jbWRfc2V0X3Nsb3QoaHcsIGluZm8tPnVzZV9zaG9ydF9zbG90KTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisKKwkJLyogVXBkYXRlIHBlZXIgcmF0ZSBpbmZvICovCisJCXJjID0gbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIoaHcsIHZpZiwKKwkJCQlNV0w4S19TVEFfREJfTU9ESUZZX0VOVFJZKTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisKKwkJLyogU2V0IEFJRCAqLworCQlyYyA9IG13bDhrX2NtZF9zZXRfYWlkKGh3LCB2aWYpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKworCQkvKgorCQkgKiBGaW5hbGl6ZSB0aGUgam9pbi4gIFRlbGwgcnggaGFuZGxlciB0byBwcm9jZXNzCisJCSAqIG5leHQgYmVhY29uIGZyb20gb3VyIEJTU0lELgorCQkgKi8KKwkJbWVtY3B5KHByaXYtPmNhcHR1cmVfYnNzaWQsIG13bDhrX3ZpZi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJcHJpdi0+Y2FwdHVyZV9iZWFjb24gPSB0cnVlOworCX0gZWxzZSB7CisJCXJjID0gbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIoaHcsIHZpZiwgTVdMOEtfU1RBX0RCX0RFTF9FTlRSWSk7CisJCW1lbXNldCgmbXdsOGtfdmlmLT5ic3NfaW5mbywgMCwKKwkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mKSk7CisJCW1lbXNldChtd2w4a192aWYtPmJzc2lkLCAwLCBFVEhfQUxFTik7CisJfQorCitvdXQ6CisJbXdsOGtfZndfdW5sb2NrKGh3KTsKIH0KIAotc3RydWN0IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd29ya2VyIHsKLQlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOwotCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzOwotCXVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3M7Ci0JaW50IG1jX2NvdW50OwotCXN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3Q7Ci19OwotCi0jZGVmaW5lIE1XTDhLX1NVUFBPUlRFRF9JRl9GTEFHUwlGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQwotCi1zdGF0aWMgaW50IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3N0YXRpYyB1NjQgbXdsOGtfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQogewotCXN0cnVjdCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3dvcmtlciAqd29ya2VyID0KLQkJKHN0cnVjdCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3dvcmtlciAqKXd0OworCXN0cnVjdCBtd2w4a19jbWRfcGt0ICpjbWQ7CiAKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OwotCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzID0gd29ya2VyLT5jaGFuZ2VkX2ZsYWdzOwotCXVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MgPSB3b3JrZXItPnRvdGFsX2ZsYWdzOwotCWludCBtY19jb3VudCA9IHdvcmtlci0+bWNfY291bnQ7Ci0Jc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdCA9IHdvcmtlci0+bWNsaXN0OworCWNtZCA9IF9fbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyKGh3LCBtY19jb3VudCwgbWNsaXN0KTsKIAorCXJldHVybiAodW5zaWduZWQgbG9uZyljbWQ7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCisJCQkJICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKKwkJCQkgICB1NjQgbXVsdGljYXN0KQorewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHJjID0gMDsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCAqbXVsdGljYXN0X2Fkcl9jbWQ7CisKKwkvKiBDbGVhciB1bnN1cHBvcnRlZCBmZWF0dXJlIGZsYWdzICovCisJKnRvdGFsX2ZsYWdzICY9IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDOworCisJaWYgKG13bDhrX2Z3X2xvY2soaHcpKQorCQlyZXR1cm47CiAKIAlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7CiAJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKLQkJCXJjID0gbXdsOGtfY21kX3NldF9wcmVfc2Nhbihodyk7CisJCQltd2w4a19jbWRfc2V0X3ByZV9zY2FuKGh3KTsKIAkJZWxzZSB7CiAJCQl1OCAqYnNzaWQ7CiAKQEAgLTMyMzEsMTUxICsyNzEwLDQ1IEBACiAJCQlpZiAocHJpdi0+dmlmICE9IE5VTEwpCiAJCQkJYnNzaWQgPSBNV0w4S19WSUYocHJpdi0+dmlmKS0+YnNzaWQ7CiAKLQkJCXJjID0gbXdsOGtfY21kX3NldF9wb3N0X3NjYW4oaHcsIGJzc2lkKTsKKwkJCW13bDhrX2NtZF9zZXRfcG9zdF9zY2FuKGh3LCBic3NpZCk7CiAJCX0KIAl9CiAKLQlpZiAocmMpCi0JCWdvdG8gbXdsOGtfY29uZmlndXJlX2ZpbHRlcl9leGl0OwotCWlmIChtY19jb3VudCkgewotCQltY19jb3VudCA9IG1jX2NvdW50IDwgcHJpdi0+bnVtX21jYWRkcnMgPwotCQkJCW1jX2NvdW50IDogcHJpdi0+bnVtX21jYWRkcnM7Ci0JCXJjID0gbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyKGh3LCBtY19jb3VudCwgbWNsaXN0KTsKLQkJaWYgKHJjKQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiJXMoKUVycm9yIHNldHRpbmcgbXVsdGljYXN0IGFkZHJlc3Nlc1xuIiwKLQkJCV9fZnVuY19fKTsKKwltdWx0aWNhc3RfYWRyX2NtZCA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpbXVsdGljYXN0OworCWlmIChtdWx0aWNhc3RfYWRyX2NtZCAhPSBOVUxMKSB7CisJCW13bDhrX3Bvc3RfY21kKGh3LCBtdWx0aWNhc3RfYWRyX2NtZCk7CisJCWtmcmVlKG11bHRpY2FzdF9hZHJfY21kKTsKIAl9CiAKLW13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfZXhpdDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIG13bDhrX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCi0JCQkJICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkgICBpbnQgbWNfY291bnQsCi0JCQkJICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdCkKLXsKLQotCXN0cnVjdCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3dvcmtlciAqd29ya2VyOwotCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0KLQkvKiBDbGVhciB1bnN1cHBvcnRlZCBmZWF0dXJlIGZsYWdzICovCi0JKnRvdGFsX2ZsYWdzICY9IE1XTDhLX1NVUFBPUlRFRF9JRl9GTEFHUzsKLQotCWlmICghKGNoYW5nZWRfZmxhZ3MgJiBNV0w4S19TVVBQT1JURURfSUZfRkxBR1MpICYmICFtY19jb3VudCkKLQkJcmV0dXJuOwotCi0Jd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9BVE9NSUMpOwotCWlmICh3b3JrZXIgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0Jd29ya2VyLT5oZWFkZXIub3B0aW9ucyA9IE1XTDhLX1dRX1FVRVVFX09OTFkgfCBNV0w4S19XUV9UWF9XQUlUX0VNUFRZOwotCXdvcmtlci0+Y2hhbmdlZF9mbGFncyA9IGNoYW5nZWRfZmxhZ3M7Ci0Jd29ya2VyLT50b3RhbF9mbGFncyA9IHRvdGFsX2ZsYWdzOwotCXdvcmtlci0+bWNfY291bnQgPSBtY19jb3VudDsKLQl3b3JrZXItPm1jbGlzdCA9IG1jbGlzdDsKLQotCW13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwgcHJpdi0+Y29uZmlnX3dxLAotCQkJIG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd3QpOwotfQotCi1zdHJ1Y3QgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd29ya2VyIHsKLQlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOwotCXUzMiB2YWx1ZTsKLX07Ci0KLXN0YXRpYyBpbnQgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKLXsKLQlzdHJ1Y3QgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd29ya2VyICp3b3JrZXIgPQotCQkoc3RydWN0IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3dvcmtlciAqKXd0OwotCi0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKLQl1MTYgdGhyZXNob2xkID0gKHUxNikod29ya2VyLT52YWx1ZSk7Ci0JaW50IHJjOwotCi0JcmMgPSBtd2w4a19ydHNfdGhyZXNob2xkKGh3LCBNV0w4S19DTURfU0VULCAmdGhyZXNob2xkKTsKLQotCXJldHVybiByYzsKKwltd2w4a19md191bmxvY2soaHcpOwogfQogCiBzdGF0aWMgaW50IG13bDhrX3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpCiB7Ci0JaW50IHJjOwotCXN0cnVjdCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93b3JrZXIgKndvcmtlcjsKLQlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCi0Jd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOwotCWlmICh3b3JrZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl3b3JrZXItPnZhbHVlID0gdmFsdWU7Ci0KLQlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKLQkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwKLQkJCSAgICAgIG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3d0KTsKLQlrZnJlZSh3b3JrZXIpOwotCi0JaWYgKHJjID09IC1FVElNRURPVVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOwotCQlyYyA9IC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdHJ1Y3QgbXdsOGtfY29uZl90eF93b3JrZXIgewotCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7Ci0JdTE2IHF1ZXVlOwotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXM7Ci19OwotCi1zdGF0aWMgaW50IG13bDhrX2NvbmZfdHhfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKLXsKLQlzdHJ1Y3QgbXdsOGtfY29uZl90eF93b3JrZXIgKndvcmtlciA9Ci0JKHN0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciAqKXd0OwotCi0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKLQl1MTYgcXVldWUgPSB3b3JrZXItPnF1ZXVlOwotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMgPSB3b3JrZXItPnBhcmFtczsKLQotCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHJjID0gMDsKLQotCWlmIChwcml2LT53bW1fbW9kZSA9PSBNV0w4S19XTU1fRElTQUJMRSkKLQkJaWYgKG13bDhrX3NldF93bW0oaHcsIE1XTDhLX1dNTV9FTkFCTEUpKSB7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIG13bDhrX2NvbmZfdHhfZXhpdDsKLQl9Ci0KLQlpZiAobXdsOGtfc2V0X2VkY2FfcGFyYW1zKGh3LCBHRVRfVFhRKHF1ZXVlKSwgcGFyYW1zLT5jd19taW4sCi0JCXBhcmFtcy0+Y3dfbWF4LCBwYXJhbXMtPmFpZnMsIHBhcmFtcy0+dHhvcCkpCi0JCQlyYyA9IC1FSU5WQUw7Ci1td2w4a19jb25mX3R4X2V4aXQ6Ci0JcmV0dXJuIHJjOworCXJldHVybiBtd2w4a19ydHNfdGhyZXNob2xkKGh3LCBNV0w4S19DTURfU0VULCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgbXdsOGtfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCiB7Ci0JaW50IHJjOwotCXN0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciAqd29ya2VyOwogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJjOwogCi0Jd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOwotCWlmICh3b3JrZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmMgPSBtd2w4a19md19sb2NrKGh3KTsKKwlpZiAoIXJjKSB7CisJCWlmICghcHJpdi0+d21tX2VuYWJsZWQpCisJCQlyYyA9IG13bDhrX3NldF93bW0oaHcsIDEpOwogCi0Jd29ya2VyLT5xdWV1ZSA9IHF1ZXVlOwotCXdvcmtlci0+cGFyYW1zID0gcGFyYW1zOwotCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAotCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLCBtd2w4a19jb25mX3R4X3d0KTsKLQlrZnJlZSh3b3JrZXIpOwotCWlmIChyYyA9PSAtRVRJTUVET1VUKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsKLQkJcmMgPSAtRUlOVkFMOworCQlpZiAoIXJjKQorCQkJcmMgPSBtd2w4a19zZXRfZWRjYV9wYXJhbXMoaHcsIHF1ZXVlLAorCQkJCQkJICAgcGFyYW1zLT5jd19taW4sCisJCQkJCQkgICBwYXJhbXMtPmN3X21heCwKKwkJCQkJCSAgIHBhcmFtcy0+YWlmcywKKwkJCQkJCSAgIHBhcmFtcy0+dHhvcCk7CisKKwkJbXdsOGtfZndfdW5sb2NrKGh3KTsKIAl9CisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTMzOTMsNDQgKzI3NjYsMTQgQEAKIAkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzKSk7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgbXdsOGtfZ2V0X3N0YXRzX3dvcmtlciB7Ci0Jc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHM7Ci19OwotCi1zdGF0aWMgaW50IG13bDhrX2dldF9zdGF0c193dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQotewotCXN0cnVjdCBtd2w4a19nZXRfc3RhdHNfd29ya2VyICp3b3JrZXIgPQotCQkoc3RydWN0IG13bDhrX2dldF9zdGF0c193b3JrZXIgKil3dDsKLQotCXJldHVybiBtd2w4a19jbWRfODAyXzExX2dldF9zdGF0KHdvcmtlci0+aGVhZGVyLmh3LCB3b3JrZXItPnN0YXRzKTsKLX0KLQogc3RhdGljIGludCBtd2w4a19nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCiB7Ci0JaW50IHJjOwotCXN0cnVjdCBtd2w4a19nZXRfc3RhdHNfd29ya2VyICp3b3JrZXI7Ci0Jc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQotCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAod29ya2VyID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jd29ya2VyLT5zdGF0cyA9IHN0YXRzOwotCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAotCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLCBtd2w4a19nZXRfc3RhdHNfd3QpOwotCi0Ja2ZyZWUod29ya2VyKTsKLQlpZiAocmMgPT0gLUVUSU1FRE9VVCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7Ci0JCXJjID0gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gcmM7CisJcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQoaHcsIHN0YXRzKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG13bDhrX29wcyA9IHsKQEAgLTM0NDEsNiArMjc4NCw3IEBACiAJLnJlbW92ZV9pbnRlcmZhY2UJPSBtd2w4a19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IG13bDhrX2NvbmZpZywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IG13bDhrX2Jzc19pbmZvX2NoYW5nZWQsCisJLnByZXBhcmVfbXVsdGljYXN0CT0gbXdsOGtfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBtd2w4a19jb25maWd1cmVfZmlsdGVyLAogCS5zZXRfcnRzX3RocmVzaG9sZAk9IG13bDhrX3NldF9ydHNfdGhyZXNob2xkLAogCS5jb25mX3R4CQk9IG13bDhrX2NvbmZfdHgsCkBAIC0zNDU4LDEyICsyODAyLDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCiAJCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpLCAwKTsKIAotCWlmIChwcml2LT50eF93YWl0ICE9IE5VTEwpIHsKLQkJaW50IGNvdW50ID0gbXdsOGtfdHhxX2J1c3kocHJpdik7Ci0JCWlmIChjb3VudCA9PSAwKSB7Ci0JCQljb21wbGV0ZShwcml2LT50eF93YWl0KTsKLQkJCXByaXYtPnR4X3dhaXQgPSBOVUxMOwotCQl9CisJaWYgKHByaXYtPnR4X3dhaXQgIT0gTlVMTCAmJiBtd2w4a190eHFfYnVzeShwcml2KSA9PSAwKSB7CisJCWNvbXBsZXRlKHByaXYtPnR4X3dhaXQpOworCQlwcml2LT50eF93YWl0ID0gTlVMTDsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOwogfQpAQCAtMzQ3Myw3ICsyODE0LDcgQEAKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXdsOGtfcHJpdiwgZmluYWxpemVfam9pbl93b3JrZXIpOwogCXN0cnVjdCBza19idWZmICpza2IgPSBwcml2LT5iZWFjb25fc2tiOwotCXU4IGR0aW0gPSAoTVdMOEtfVklGKHByaXYtPnZpZikpLT5ic3NfaW5mby5kdGltX3BlcmlvZDsKKwl1OCBkdGltID0gTVdMOEtfVklGKHByaXYtPnZpZiktPmJzc19pbmZvLmR0aW1fcGVyaW9kOwogCiAJbXdsOGtfZmluYWxpemVfam9pbihwcml2LT5odywgc2tiLT5kYXRhLCBza2ItPmxlbiwgZHRpbSk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMzQ4NCwxMiArMjgyNSwxNiBAQAogc3RhdGljIGludCBfX2RldmluaXQgbXdsOGtfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKKwlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbiA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXY7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAJaW50IHJjOwogCWludCBpOwotCXU4ICpmdzsKKworCWlmICghcHJpbnRlZF92ZXJzaW9uKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIHZlcnNpb24gJXNcbiIsIE1XTDhLX0RFU0MsIE1XTDhLX1ZFUlNJT04pOworCQlwcmludGVkX3ZlcnNpb24gPSAxOworCX0KIAogCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJjKSB7CkBAIC0zNTE3LDE2ICsyODYyLDEwIEBACiAJcHJpdiA9IGh3LT5wcml2OwogCXByaXYtPmh3ID0gaHc7CiAJcHJpdi0+cGRldiA9IHBkZXY7Ci0JcHJpdi0+aG9zdGNtZF93YWl0ID0gTlVMTDsKLQlwcml2LT50eF93YWl0ID0gTlVMTDsKLQlwcml2LT5pbmNvbmZpZyA9IGZhbHNlOwotCXByaXYtPndlcF9lbmFibGVkID0gMDsKLQlwcml2LT53bW1fbW9kZSA9IGZhbHNlOworCXByaXYtPndtbV9lbmFibGVkID0gZmFsc2U7CiAJcHJpdi0+cGVuZGluZ190eF9wa3RzID0gMDsKIAlzdHJuY3B5KHByaXYtPm5hbWUsIE1XTDhLX05BTUUsIHNpemVvZihwcml2LT5uYW1lKSk7CiAKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+ZndfbG9jayk7Ci0KIAlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKIApAQCAtMzU1OCwxNyArMjg5NywxNiBAQAogCiAJaHctPnF1ZXVlcyA9IE1XTDhLX1RYX1FVRVVFUzsKIAotCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KLQkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwgQklUKE5MODAyMTFfSUZUWVBFX01PTklUT1IpOworCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOwogCiAJLyogU2V0IHJzc2kgYW5kIG5vaXNlIHZhbHVlcyB0byBkQm0gKi8KLQlody0+ZmxhZ3MgfD0gKElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwgSUVFRTgwMjExX0hXX05PSVNFX0RCTSk7CisJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKIAlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXdsOGtfdmlmKTsKIAlwcml2LT52aWYgPSBOVUxMOwogCiAJLyogU2V0IGRlZmF1bHQgcmFkaW8gc3RhdGUgYW5kIHByZWFtYmxlICovCi0JcHJpdi0+cmFkaW9fcHJlYW1ibGUgPSBNV0w4S19SQURJT19ERUZBVUxUX1BSRUFNQkxFOwotCXByaXYtPnJhZGlvX3N0YXRlID0gTVdMOEtfUkFESU9fRElTQUJMRTsKKwlwcml2LT5yYWRpb19vbiA9IDA7CisJcHJpdi0+cmFkaW9fc2hvcnRfcHJlYW1ibGUgPSAwOwogCiAJLyogRmluYWxpemUgam9pbiB3b3JrZXIgKi8KIAlJTklUX1dPUksoJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyLCBtd2w4a19maW5hbGl6ZV9qb2luX3dvcmtlcik7CkBAIC0zNTkzLDYgKzI5MzEsMTIgQEAKIAkJZ290byBlcnJfaW91bm1hcDsKIAlyeHFfcmVmaWxsKGh3LCAwLCBJTlRfTUFYKTsKIAorCW11dGV4X2luaXQoJnByaXYtPmZ3X211dGV4KTsKKwlwcml2LT5md19tdXRleF9vd25lciA9IE5VTEw7CisJcHJpdi0+ZndfbXV0ZXhfZGVwdGggPSAwOworCXByaXYtPnR4X3dhaXQgPSBOVUxMOworCXByaXYtPmhvc3RjbWRfd2FpdCA9IE5VTEw7CisKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dHhfbG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspIHsKQEAgLTM2MDIsOCArMjk0Niw3IEBACiAJfQogCiAJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOwotCXByaXYtPmludF9tYXNrID0gMDsKLQlpb3dyaXRlMzIocHJpdi0+aW50X21hc2ssIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOwogCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMKTsKIAlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLKTsKIApAQCAtMzY0MCw5ICsyOTgzLDcgQEAKIAkgKiBjb21tYW5kcyB1c2UgaW50ZXJydXB0cyBhbmQgYXZvaWRzIHBvbGxpbmcuICBEaXNhYmxlCiAJICogaW50ZXJydXB0cyB3aGVuIGRvbmUuCiAJICovCi0JcHJpdi0+aW50X21hc2sgfD0gTVdMOEtfQTJIX0VWRU5UUzsKLQotCWlvd3JpdGUzMihwcml2LT5pbnRfbWFzaywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCWlvd3JpdGUzMihNV0w4S19BMkhfRVZFTlRTLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CiAKIAkvKiBHZXQgY29uZmlnIGRhdGEsIG1hYyBhZGRycyBldGMgKi8KIAlyYyA9IG13bDhrX2NtZF9nZXRfaHdfc3BlYyhodyk7CkBAIC0zNjUyLDE2ICsyOTkzLDE0IEBACiAJfQogCiAJLyogVHVybiByYWRpbyBvZmYgKi8KLQlyYyA9IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRElTQUJMRSk7CisJcmMgPSBtd2w4a19jbWRfODAyXzExX3JhZGlvX2Rpc2FibGUoaHcpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZGlzYWJsZVxuIiwgcHJpdi0+bmFtZSk7CiAJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CiAJfQogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCi0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CiAJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKLQlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOwogCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOwogCiAJcmMgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOwpAQCAtMzY3MCwxMyArMzAwOSwxMSBAQAogCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOwogCX0KIAotCWZ3ID0gKHU4ICopJnByaXYtPmZ3X3JldjsKLQlwcmludGsoS0VSTl9JTkZPICIlczogODhXJXUgJXNcbiIsIHByaXYtPm5hbWUsIHByaXYtPnBhcnRfbnVtLAotCQlNV0w4S19ERVNDKTsKLQlwcmludGsoS0VSTl9JTkZPICIlczogRHJpdmVyIFZlcjolcyAgRmlybXdhcmUgVmVyOiV1LiV1LiV1LiV1XG4iLAotCQlwcml2LT5uYW1lLCBNV0w4S19WRVJTSU9OLCBmd1szXSwgZndbMl0sIGZ3WzFdLCBmd1swXSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1BQyBBZGRyZXNzOiAlc1xuIiwgcHJpdi0+bmFtZSwKLQkgICAgICAgcHJpbnRfbWFjKG1hYywgaHctPndpcGh5LT5wZXJtX2FkZHIpKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogODh3JXUgdiVkLCAlcE0sIGZpcm13YXJlIHZlcnNpb24gJXUuJXUuJXUuJXVcbiIsCisJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgcHJpdi0+cGFydF9udW0sIHByaXYtPmh3X3JldiwKKwkgICAgICAgaHctPndpcGh5LT5wZXJtX2FkZHIsCisJICAgICAgIChwcml2LT5md19yZXYgPj4gMjQpICYgMHhmZiwgKHByaXYtPmZ3X3JldiA+PiAxNikgJiAweGZmLAorCSAgICAgICAocHJpdi0+ZndfcmV2ID4+IDgpICYgMHhmZiwgcHJpdi0+ZndfcmV2ICYgMHhmZik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMzY4NSw5ICszMDIyLDcgQEAKIAltd2w4a19yZWxlYXNlX2Zpcm13YXJlKHByaXYpOwogCiBlcnJfZnJlZV9pcnE6Ci0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CiAJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKLQlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOwogCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOwogCiBlcnJfZnJlZV9xdWV1ZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKaW5kZXggZDYzYzg5OS4uOTQ5OGI0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYwpAQCAtMjAzLDcgKzIwMyw4IEBACiBzdGF0aWMgaW50IG5ldHdhdmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7IC8qIENsb3NlIHRoZSBkZXZpY2UgKi8KIAogLyogUGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgUGFja2V0IHJlY2VwdGlvbiAqLwotc3RhdGljIGludCBuZXR3YXZlX3N0YXJ0X3htaXQoIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IG5ldHdhdmVfc3RhcnRfeG1pdCggc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbmV0d2F2ZV9yeCggc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qIEludGVycnVwdCByb3V0aW5lcyAqLwpAQCAtMTAyNiw3ICsxMDI3LDggQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBuZXR3YXZlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeworc3RhdGljIG5ldGRldl90eF90IG5ldHdhdmVfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewogCS8qIFRoaXMgZmxhZyBpbmRpY2F0ZSB0aGF0IHRoZSBoYXJkd2FyZSBjYW4ndCBwZXJmb3JtIGEgdHJhbnNtaXNzaW9uLgogCSAqIFRoZW9yaXRpY2FsbHksIE5FVDMgY2hlY2sgaXQgYmVmb3JlIHNlbmRpbmcgYSBwYWNrZXQgdG8gdGhlIGRyaXZlciwKIAkgKiBidXQgaW4gZmFjdCBpdCBuZXZlciBkbyB0aGF0IGFuZCBwb29sIGNvbnRpbnVvdXNseS4KQEAgLTEwNDcsNyArMTA0OSw3IEBACiAgICAgfQogICAgIGRldl9rZnJlZV9za2Ioc2tiKTsKICAgICAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gTkVUREVWX1RYX09LOwogfSAvKiBuZXR3YXZlX3N0YXJ0X3htaXQgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vS2NvbmZpZwppbmRleCA0NDQxMWViLi44M2I2MzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9LY29uZmlnCkBAIC0xLDYgKzEsNyBAQAogY29uZmlnIEhFUk1FUwogCXRyaXN0YXRlICJIZXJtZXMgY2hpcHNldCA4MDIuMTFiIHN1cHBvcnQgKE9yaW5vY28vUHJpc20yL1N5bWJvbCkiCiAJZGVwZW5kcyBvbiAoUFBDX1BNQUMgfHwgUENJIHx8IFBDTUNJQSkgJiYgV0xBTl84MDIxMQorCWRlcGVuZHMgb24gQ0ZHODAyMTEKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IEZXX0xPQURFUgogCXNlbGVjdCBDUllQVE8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL01ha2VmaWxlCmluZGV4IDFmYzc0MDkuLjlhYmQ2MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBvcmlub2NvIHdpcmVsZXNzIGRldmljZSBkcml2ZXJzLgogIwotb3Jpbm9jby1vYmpzIDo9IG1haW4ubyBmdy5vIGh3Lm8gbWljLm8gc2Nhbi5vIHdleHQubyBoZXJtZXNfZGxkLm8gaGVybWVzLm8KK29yaW5vY28tb2JqcyA6PSBtYWluLm8gZncubyBody5vIG1pYy5vIHNjYW4ubyB3ZXh0Lm8gaGVybWVzX2RsZC5vIGhlcm1lcy5vIGNmZy5vCiAKIG9iai0kKENPTkZJR19IRVJNRVMpCQkrPSBvcmlub2NvLm8KIG9iai0kKENPTkZJR19QQ01DSUFfSEVSTUVTKQkrPSBvcmlub2NvX2NzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vYWlycG9ydC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9haXJwb3J0LmMKaW5kZXggOGM0MDY1Zi4uYzYwZGYyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9haXJwb3J0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9haXJwb3J0LmMKQEAgLTI3LDYgKzI3LDcgQEAKIHN0cnVjdCBhaXJwb3J0IHsKIAlzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2OwogCXZvaWQgX19pb21lbSAqdmFkZHI7CisJdW5zaWduZWQgaW50IGlycTsKIAlpbnQgaXJxX3JlcXVlc3RlZDsKIAlpbnQgbmRldl9yZWdpc3RlcmVkOwogfTsKQEAgLTM0LDggKzM1LDkgQEAKIHN0YXRpYyBpbnQKIGFpcnBvcnRfc3VzcGVuZChzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmbWRldi0+b2ZkZXYuZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZtZGV2LT5vZmRldi5kZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCXN0cnVjdCBhaXJwb3J0ICpjYXJkID0gcHJpdi0+Y2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAKQEAgLTQ4LDE4ICs1MCwxMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQllcnIgPSBfX29yaW5vY29fZG93bihkZXYpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBQQk9PS19TTEVFUF9OT1c6IEVycm9yICVkIGRvd25pbmcgaW50ZXJmYWNlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCi0JbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCi0JcHJpdi0+aHdfdW5hdmFpbGFibGUrKzsKLQorCW9yaW5vY29fZG93bihwcml2KTsKIAlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwogCi0JZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCWRpc2FibGVfaXJxKGNhcmQtPmlycSk7CiAJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsCiAJCQkgIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAwKTsKIApAQCAtNjksOCArNjMsOSBAQAogc3RhdGljIGludAogYWlycG9ydF9yZXN1bWUoc3RydWN0IG1hY2lvX2RldiAqbWRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZtZGV2LT5vZmRldi5kZXYpOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJm1kZXYtPm9mZGV2LmRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJc3RydWN0IGFpcnBvcnQgKmNhcmQgPSBwcml2LT5jYXJkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIApAQCAtODAsNDcgKzc1LDI3IEBACiAJCQkgIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAxKTsKIAltc2xlZXAoMjAwKTsKIAotCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwotCi0JZXJyID0gb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlLWluaXRpYWxpemluZyBmaXJtd2FyZSBvbiBQQk9PS19XQUtFXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gMDsKLQl9CisJZW5hYmxlX2lycShjYXJkLT5pcnEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQotCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07Ci0KLQlpZiAocHJpdi0+b3BlbiAmJiAoIXByaXYtPmh3X3VuYXZhaWxhYmxlKSkgewotCQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKLQkJaWYgKGVycikKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlc3RhcnRpbmcgY2FyZCBvbiBQQk9PS19XQUtFXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQl9Ci0KLQorCWVyciA9IG9yaW5vY29fdXAocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludAogYWlycG9ydF9kZXRhY2goc3RydWN0IG1hY2lvX2RldiAqbWRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZtZGV2LT5vZmRldi5kZXYpOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJm1kZXYtPm9mZGV2LmRldik7CiAJc3RydWN0IGFpcnBvcnQgKmNhcmQgPSBwcml2LT5jYXJkOwogCiAJaWYgKGNhcmQtPm5kZXZfcmVnaXN0ZXJlZCkKLQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwkJb3Jpbm9jb19pZl9kZWwocHJpdik7CiAJY2FyZC0+bmRldl9yZWdpc3RlcmVkID0gMDsKIAogCWlmIChjYXJkLT5pcnFfcmVxdWVzdGVkKQotCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwkJZnJlZV9pcnEoY2FyZC0+aXJxLCBwcml2KTsKIAljYXJkLT5pcnFfcmVxdWVzdGVkID0gMDsKIAogCWlmIChjYXJkLT52YWRkcikKQEAgLTEzNCw3ICsxMDksNyBAQAogCXNzbGVlcCgxKTsKIAogCW1hY2lvX3NldF9kcnZkYXRhKG1kZXYsIE5VTEwpOwotCWZyZWVfb3Jpbm9jb2RldihkZXYpOworCWZyZWVfb3Jpbm9jb2Rldihwcml2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ2LDcgKzEyMSw2IEBACiAJICogcmUtaW5pdGlhbGl6ZSBwcm9wZXJseSwgaXQgZmFsbHMgaW4gYSBzY3JlYW1pbmcgaGVhcAogCSAqIHNob3J0bHkgYWZ0ZXJ3YXJkcy4gKi8KICNpZiAwCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAJc3RydWN0IGFpcnBvcnQgKmNhcmQgPSBwcml2LT5jYXJkOwogCiAJLyogVml0YWxseSBpbXBvcnRhbnQuICBJZiB3ZSBkb24ndCBkbyB0aGlzIGl0IHNlZW1zIHdlIGdldCBhbgpAQCAtMTU0LDcgKzEyOCw3IEBACiAJICogaHdfdW5hdmFpbGFibGUgaXMgYWxyZWFkeSBzZXQgaXQgZG9lc24ndCBnZXQgQUNLZWQsIHdlIGdldAogCSAqIGludG8gYW4gaW50ZXJydXB0IGxvb3AgYW5kIHRoZSBQTVUgZGVjaWRlcyB0byB0dXJuIHVzCiAJICogb2ZmLiAqLwotCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwlkaXNhYmxlX2lycShjYXJkLT5pcnEpOwogCiAJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsCiAJCQkgIG1hY2lvX2dldF9vZl9ub2RlKGNhcmQtPm1kZXYpLCAwLCAwKTsKQEAgLTE2Myw3ICsxMzcsNyBAQAogCQkJICBtYWNpb19nZXRfb2Zfbm9kZShjYXJkLT5tZGV2KSwgMCwgMSk7CiAJc3NsZWVwKDEpOwogCi0JZW5hYmxlX2lycShkZXYtPmlycSk7CisJZW5hYmxlX2lycShjYXJkLT5pcnEpOwogCXNzbGVlcCgxKTsKICNlbmRpZgogCkBAIC0xNzQsNyArMTQ4LDYgQEAKIGFpcnBvcnRfYXR0YWNoKHN0cnVjdCBtYWNpb19kZXYgKm1kZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgYWlycG9ydCAqY2FyZDsKIAl1bnNpZ25lZCBsb25nIHBoeXNfYWRkcjsKIAloZXJtZXNfdCAqaHc7CkBAIC0xODUsMzMgKzE1OCwyOSBAQAogCX0KIAogCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBwcml2YXRlIGRldmljZS1zcGVjaWZpYyBkYXRhICovCi0JZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmbWRldi0+b2ZkZXYuZGV2LAotCQkJICAgICAgIGFpcnBvcnRfaGFyZF9yZXNldCwgTlVMTCk7Ci0JaWYgKCFkZXYpIHsKKwlwcml2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmbWRldi0+b2ZkZXYuZGV2LAorCQkJCWFpcnBvcnRfaGFyZF9yZXNldCwgTlVMTCk7CisJaWYgKCFwcml2KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljYXJkID0gcHJpdi0+Y2FyZDsKIAogCWh3ID0gJnByaXYtPmh3OwogCWNhcmQtPm1kZXYgPSBtZGV2OwogCi0JaWYgKG1hY2lvX3JlcXVlc3RfcmVzb3VyY2UobWRldiwgMCwgImFpcnBvcnQiKSkgeworCWlmIChtYWNpb19yZXF1ZXN0X3Jlc291cmNlKG1kZXYsIDAsIERSSVZFUl9OQU1FKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW4ndCByZXF1ZXN0IElPIHJlc291cmNlICFcbiIpOwotCQlmcmVlX29yaW5vY29kZXYoZGV2KTsKKwkJZnJlZV9vcmlub2NvZGV2KHByaXYpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCVNFVF9ORVRERVZfREVWKGRldiwgJm1kZXYtPm9mZGV2LmRldik7Ci0KLQltYWNpb19zZXRfZHJ2ZGF0YShtZGV2LCBkZXYpOworCW1hY2lvX3NldF9kcnZkYXRhKG1kZXYsIHByaXYpOwogCiAJLyogU2V0dXAgaW50ZXJydXB0cyAmIGJhc2UgYWRkcmVzcyAqLwotCWRldi0+aXJxID0gbWFjaW9faXJxKG1kZXYsIDApOworCWNhcmQtPmlycSA9IG1hY2lvX2lycShtZGV2LCAwKTsKIAlwaHlzX2FkZHIgPSBtYWNpb19yZXNvdXJjZV9zdGFydChtZGV2LCAwKTsgIC8qIFBoeXNpY2FsIGFkZHJlc3MgKi8KIAlwcmludGsoS0VSTl9ERUJVRyBQRlggIlBoeXNpY2FsIGFkZHJlc3MgJWx4XG4iLCBwaHlzX2FkZHIpOwotCWRldi0+YmFzZV9hZGRyID0gcGh5c19hZGRyOwogCWNhcmQtPnZhZGRyID0gaW9yZW1hcChwaHlzX2FkZHIsIEFJUlBPUlRfSU9fTEVOKTsKIAlpZiAoIWNhcmQtPnZhZGRyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImlvcmVtYXAoKSBmYWlsZWRcbiIpOwpAQCAtMjI4LDE4ICsxOTcsMjMgQEAKIAkvKiBSZXNldCBpdCBiZWZvcmUgd2UgZ2V0IHRoZSBpbnRlcnJ1cHQgKi8KIAloZXJtZXNfaW5pdChodyk7CiAKLQlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIG9yaW5vY29faW50ZXJydXB0LCAwLCBkZXYtPm5hbWUsIGRldikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ291bGRuJ3QgZ2V0IElSUSAlZFxuIiwgZGV2LT5pcnEpOworCWlmIChyZXF1ZXN0X2lycShjYXJkLT5pcnEsIG9yaW5vY29faW50ZXJydXB0LCAwLCBEUklWRVJfTkFNRSwgcHJpdikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ291bGRuJ3QgZ2V0IElSUSAlZFxuIiwgY2FyZC0+aXJxKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCWNhcmQtPmlycV9yZXF1ZXN0ZWQgPSAxOwogCi0JLyogVGVsbCB0aGUgc3RhY2sgd2UgZXhpc3QgKi8KLQlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJyZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOworCS8qIEluaXRpYWxpc2UgdGhlIG1haW4gZHJpdmVyICovCisJaWYgKG9yaW5vY29faW5pdChwcml2KSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIm9yaW5vY29faW5pdCgpIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkNhcmQgcmVnaXN0ZXJlZCBmb3IgaW50ZXJmYWNlICVzXG4iLCBkZXYtPm5hbWUpOworCisJLyogUmVnaXN0ZXIgYW4gaW50ZXJmYWNlIHdpdGggdGhlIHN0YWNrICovCisJaWYgKG9yaW5vY29faWZfYWRkKHByaXYsIHBoeXNfYWRkciwgY2FyZC0+aXJxKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIm9yaW5vY29faWZfYWRkKCkgZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQogCWNhcmQtPm5kZXZfcmVnaXN0ZXJlZCA9IDE7CiAJcmV0dXJuIDA7CiAgZmFpbGVkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9jZmcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vY2ZnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmMmQzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vY2ZnLmMKQEAgLTAsMCArMSwyMDMgQEAKKy8qIGNmZzgwMjExIHN1cHBvcnQKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIm9yaW5vY28uaCIKKworI2luY2x1ZGUgImNmZy5oIgorCisvKiBTdXBwb3J0ZWQgYml0cmF0ZXMuIE11c3QgYWdyZWUgd2l0aCBody5jICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIG9yaW5vY29fcmF0ZXNbXSA9IHsKKwl7IC5iaXRyYXRlID0gMTAgfSwKKwl7IC5iaXRyYXRlID0gMjAgfSwKKwl7IC5iaXRyYXRlID0gNTUgfSwKKwl7IC5iaXRyYXRlID0gMTEwIH0sCit9OworCitzdGF0aWMgY29uc3Qgdm9pZCAqIGNvbnN0IG9yaW5vY29fd2lwaHlfcHJpdmlkID0gJm9yaW5vY29fd2lwaHlfcHJpdmlkOworCisvKiBDYWxsZWQgYWZ0ZXIgb3Jpbm9jb19wcml2YXRlIGlzIGFsbG9jYXRlZC4gKi8KK3ZvaWQgb3Jpbm9jb193aXBoeV9pbml0KHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCisJd2lwaHktPnByaXZpZCA9IG9yaW5vY29fd2lwaHlfcHJpdmlkOworCisJc2V0X3dpcGh5X2Rldih3aXBoeSwgcHJpdi0+ZGV2KTsKK30KKworLyogQ2FsbGVkIGFmdGVyIGZpcm13YXJlIGlzIGluaXRpYWxpc2VkICovCitpbnQgb3Jpbm9jb193aXBoeV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlpbnQgaSwgY2hhbm5lbHMgPSAwOworCisJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSkKKwkJd2lwaHktPm1heF9zY2FuX3NzaWRzID0gMTsKKwllbHNlCisJCXdpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDA7CisKKwl3aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOworCisJLyogVE9ETzogc2hvdWxkIHdlIHNldCBpZiB3ZSBvbmx5IGhhdmUgZGVtbyBhZC1ob2M/CisJICogICAgICAgKHByaXYtPmhhc19wb3J0MykKKwkgKi8KKwlpZiAocHJpdi0+aGFzX2lic3MpCisJCXdpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKKworCWlmICghcHJpdi0+YnJva2VuX21vbml0b3IgfHwgZm9yY2VfbW9uaXRvcikKKwkJd2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfTU9OSVRPUik7CisKKwlwcml2LT5iYW5kLmJpdHJhdGVzID0gb3Jpbm9jb19yYXRlczsKKwlwcml2LT5iYW5kLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKG9yaW5vY29fcmF0ZXMpOworCisJLyogT25seSBzdXBwb3J0IGNoYW5uZWxzIGFsbG93ZWQgYnkgdGhlIGNhcmQgRUVQUk9NICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9DSEFOTkVMUzsgaSsrKSB7CisJCWlmIChwcml2LT5jaGFubmVsX21hc2sgJiAoMSA8PCBpKSkgeworCQkJcHJpdi0+Y2hhbm5lbHNbaV0uY2VudGVyX2ZyZXEgPQorCQkJCWllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShpKzEpOworCQkJY2hhbm5lbHMrKzsKKwkJfQorCX0KKwlwcml2LT5iYW5kLmNoYW5uZWxzID0gcHJpdi0+Y2hhbm5lbHM7CisJcHJpdi0+YmFuZC5uX2NoYW5uZWxzID0gY2hhbm5lbHM7CisKKwl3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmcHJpdi0+YmFuZDsKKwl3aXBoeS0+c2lnbmFsX3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk07CisKKwlpID0gMDsKKwlpZiAocHJpdi0+aGFzX3dlcCkgeworCQlwcml2LT5jaXBoZXJfc3VpdGVzW2ldID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA7CisJCWkrKzsKKworCQlpZiAocHJpdi0+aGFzX2JpZ193ZXApIHsKKwkJCXByaXYtPmNpcGhlcl9zdWl0ZXNbaV0gPSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CisJCQlpKys7CisJCX0KKwl9CisJaWYgKHByaXYtPmhhc193cGEpIHsKKwkJcHJpdi0+Y2lwaGVyX3N1aXRlc1tpXSA9IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA7CisJCWkrKzsKKwl9CisJd2lwaHktPmNpcGhlcl9zdWl0ZXMgPSBwcml2LT5jaXBoZXJfc3VpdGVzOworCXdpcGh5LT5uX2NpcGhlcl9zdWl0ZXMgPSBpOworCisJd2lwaHktPnJ0c190aHJlc2hvbGQgPSBwcml2LT5ydHNfdGhyZXNoOworCWlmICghcHJpdi0+aGFzX213bykKKwkJd2lwaHktPmZyYWdfdGhyZXNob2xkID0gcHJpdi0+ZnJhZ190aHJlc2g7CisKKwlyZXR1cm4gd2lwaHlfcmVnaXN0ZXIod2lwaHkpOworfQorCitzdGF0aWMgaW50IG9yaW5vY29fY2hhbmdlX3ZpZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCB1MzIgKmZsYWdzLAorCQkJICAgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBsb2NrOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmbG9jaykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWlmICghcHJpdi0+aGFzX2lic3MgJiYgIXByaXYtPmhhc19wb3J0MykKKwkJCWVyciA9IC1FSU5WQUw7CisJCWJyZWFrOworCisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlicmVhazsKKworCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKKwkJaWYgKHByaXYtPmJyb2tlbl9tb25pdG9yICYmICFmb3JjZV9tb25pdG9yKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTW9uaXRvciBtb2RlIHN1cHBvcnQgaXMgIgorCQkJICAgICAgICJidWdneSBpbiB0aGlzIGZpcm13YXJlLCBub3QgZW5hYmxpbmdcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZSh3aXBoeSkpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJaWYgKCFlcnIpIHsKKwkJcHJpdi0+aXdfbW9kZSA9IHR5cGU7CisJCXNldF9wb3J0X3R5cGUocHJpdik7CisJCWVyciA9IG9yaW5vY29fY29tbWl0KHByaXYpOworCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZsb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19zY2FuKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlpbnQgZXJyOworCisJaWYgKCFyZXF1ZXN0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwcml2LT5zY2FuX3JlcXVlc3QgJiYgcHJpdi0+c2Nhbl9yZXF1ZXN0ICE9IHJlcXVlc3QpCisJCXJldHVybiAtRUJVU1k7CisKKwlwcml2LT5zY2FuX3JlcXVlc3QgPSByZXF1ZXN0OworCisJZXJyID0gb3Jpbm9jb19od190cmlnZ2VyX3NjYW4ocHJpdiwgcmVxdWVzdC0+c3NpZHMpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX3NldF9jaGFubmVsKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY2hhbm5lbDsKKworCWlmICghY2hhbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9OT19IVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY2hhbi0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF8yR0haKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4oY2hhbi0+Y2VudGVyX2ZyZXEpOworCisJaWYgKChjaGFubmVsIDwgMSkgfHwgKGNoYW5uZWwgPiBOVU1fQ0hBTk5FTFMpIHx8CisJICAgICAhKHByaXYtPmNoYW5uZWxfbWFzayAmICgxIDw8IChjaGFubmVsLTEpKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlwcml2LT5jaGFubmVsID0gY2hhbm5lbDsKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CisJCS8qIEZhc3QgY2hhbm5lbCBjaGFuZ2UgLSBubyBjb21taXQgaWYgc3VjY2Vzc2Z1bCAqLworCQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RFU1QgfAorCQkJCQkgICAgSEVSTUVTX1RFU1RfU0VUX0NIQU5ORUwsCisJCQkJCWNoYW5uZWwsIE5VTEwpOworCX0KKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBvcmlub2NvX2NmZ19vcHMgPSB7CisJLmNoYW5nZV92aXJ0dWFsX2ludGYgPSBvcmlub2NvX2NoYW5nZV92aWYsCisJLnNldF9jaGFubmVsID0gb3Jpbm9jb19zZXRfY2hhbm5lbCwKKwkuc2NhbiA9IG9yaW5vY29fc2NhbiwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2NmZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9jZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGRjOTZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9jZmcuaApAQCAtMCwwICsxLDE1IEBACisvKiBjZmc4MDIxMSBzdXBwb3J0LgorICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIE9SSU5PQ09fQ0ZHX0gKKyNkZWZpbmUgT1JJTk9DT19DRkdfSAorCisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG9yaW5vY29fY2ZnX29wczsKKwordm9pZCBvcmlub2NvX3dpcGh5X2luaXQoc3RydWN0IHdpcGh5ICp3aXBoeSk7CitpbnQgb3Jpbm9jb193aXBoeV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKKworI2VuZGlmIC8qIE9SSU5PQ09fQ0ZHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuYwppbmRleCAxMDg0YjQzLi4xMjU3MjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5jCkBAIC00LDYgKzQsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAogI2luY2x1ZGUgImhlcm1lcy5oIgogI2luY2x1ZGUgImhlcm1lc19kbGQuaCIKQEAgLTk5LDcgKzEwMCw3IEBACiAJY29uc3Qgdm9pZCAqZW5kOwogCWNvbnN0IGNoYXIgKmZpcm13YXJlOwogCWNvbnN0IGNoYXIgKmZ3X2VycjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CiAJaW50IGVyciA9IDA7CiAKIAlwZGEgPSBremFsbG9jKGZ3LT5wZGFfc2l6ZSwgR0ZQX0tFUk5FTCk7CkBAIC0xMTEsMTIgKzExMiwxMSBAQAogCWVsc2UKIAkJZmlybXdhcmUgPSBmdy0+c3RhX2Z3OwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBdHRlbXB0aW5nIHRvIGRvd25sb2FkIGZpcm13YXJlICVzXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGZpcm13YXJlKTsKKwlkZXZfZGJnKGRldiwgIkF0dGVtcHRpbmcgdG8gZG93bmxvYWQgZmlybXdhcmUgJXNcbiIsIGZpcm13YXJlKTsKIAogCS8qIFJlYWQgY3VycmVudCBwbHVnIGRhdGEgKi8KIAllcnIgPSBoZXJtZXNfcmVhZF9wZGEoaHcsIHBkYSwgZnctPnBkYV9hZGRyLCBmdy0+cGRhX3NpemUsIDApOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVhZCBQREEgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwlkZXZfZGJnKGRldiwgIlJlYWQgUERBIHJldHVybmVkICVkXG4iLCBlcnIpOwogCWlmIChlcnIpCiAJCWdvdG8gZnJlZTsKIApAQCAtMTI0LDggKzEyNCw3IEBACiAJCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmaXJtd2FyZSwgcHJpdi0+ZGV2KTsKIAogCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZmluZCBmaXJtd2FyZSAlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGZpcm13YXJlKTsKKwkJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGZpbmQgZmlybXdhcmUgJXNcbiIsIGZpcm13YXJlKTsKIAkJCWVyciA9IC1FTk9FTlQ7CiAJCQlnb3RvIGZyZWU7CiAJCX0KQEAgLTEzNiwxNiArMTM1LDE1IEBACiAKIAlmd19lcnIgPSB2YWxpZGF0ZV9mdyhoZHIsIGZ3X2VudHJ5LT5zaXplKTsKIAlpZiAoZndfZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnZhbGlkIGZpcm13YXJlIGltYWdlIGRldGVjdGVkICglcykuICIKLQkJICAgICAgICJBYm9ydGluZyBkb3dubG9hZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZndfZXJyKTsKKwkJZGV2X3dhcm4oZGV2LCAiSW52YWxpZCBmaXJtd2FyZSBpbWFnZSBkZXRlY3RlZCAoJXMpLiAiCisJCQkgIkFib3J0aW5nIGRvd25sb2FkXG4iLCBmd19lcnIpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGFib3J0OwogCX0KIAogCS8qIEVuYWJsZSBhdXggcG9ydCB0byBhbGxvdyBwcm9ncmFtbWluZyAqLwogCWVyciA9IGhlcm1lc2lfcHJvZ3JhbV9pbml0KGh3LCBsZTMyX3RvX2NwdShoZHItPmVudHJ5X3BvaW50KSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQcm9ncmFtIGluaXQgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwlkZXZfZGJnKGRldiwgIlByb2dyYW0gaW5pdCByZXR1cm5lZCAlZFxuIiwgZXJyKTsKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8gYWJvcnQ7CiAKQEAgLTE1Niw3ICsxNTQsNyBAQAogCWVuZCA9IGZ3X2VudHJ5LT5kYXRhICsgZndfZW50cnktPnNpemU7CiAKIAllcnIgPSBoZXJtZXNfcHJvZ3JhbShodywgZmlyc3RfYmxvY2ssIGVuZCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQcm9ncmFtIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7CisJZGV2X2RiZyhkZXYsICJQcm9ncmFtIHJldHVybmVkICVkXG4iLCBlcnIpOwogCWlmIChlcnIgIT0gMCkKIAkJZ290byBhYm9ydDsKIApAQCAtMTY3LDE5ICsxNjUsMTggQEAKIAogCWVyciA9IGhlcm1lc19hcHBseV9wZGFfd2l0aF9kZWZhdWx0cyhodywgZmlyc3RfYmxvY2ssIGVuZCwgcGRhLAogCQkJCQkgICAgICZwZGFbZnctPnBkYV9zaXplIC8gc2l6ZW9mKCpwZGEpXSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBcHBseSBQREEgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwlkZXZfZGJnKGRldiwgIkFwcGx5IFBEQSByZXR1cm5lZCAlZFxuIiwgZXJyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGFib3J0OwogCiAJLyogVGVsbCBjYXJkIHdlJ3ZlIGZpbmlzaGVkICovCiAJZXJyID0gaGVybWVzaV9wcm9ncmFtX2VuZChodyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQcm9ncmFtIGVuZCByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCWRldl9kYmcoZGV2LCAiUHJvZ3JhbSBlbmQgcmV0dXJuZWQgJWRcbiIsIGVycik7CiAJaWYgKGVyciAhPSAwKQogCQlnb3RvIGFib3J0OwogCiAJLyogQ2hlY2sgaWYgd2UncmUgcnVubmluZyAqLwotCXByaW50ayhLRVJOX0RFQlVHICIlczogaGVybWVzX3ByZXNlbnQgcmV0dXJuZWQgJWRcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgaGVybWVzX3ByZXNlbnQoaHcpKTsKKwlkZXZfZGJnKGRldiwgImhlcm1lc19wcmVzZW50IHJldHVybmVkICVkXG4iLCBoZXJtZXNfcHJlc2VudChodykpOwogCiBhYm9ydDoKIAkvKiBJZiB3ZSByZXF1ZXN0ZWQgdGhlIGZpcm13YXJlLCByZWxlYXNlIGl0LiAqLwpAQCAtMjgyLDE0ICsyNzksMTMgQEAKIHN5bWJvbF9kbF9maXJtd2FyZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAogCQkgICBjb25zdCBzdHJ1Y3QgZndfaW5mbyAqZncpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcHJpdi0+ZGV2OwogCWludCByZXQ7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKIAogCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIHRydWUpKSB7CiAJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZnctPnByaV9mdywgcHJpdi0+ZGV2KSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZmluZCBmaXJtd2FyZTogJXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBmdy0+cHJpX2Z3KTsKKwkJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGZpbmQgZmlybXdhcmU6ICVzXG4iLCBmdy0+cHJpX2Z3KTsKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAJfSBlbHNlCkBAIC0zMDIsMTUgKzI5OCwxMyBAQAogCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIHRydWUpKQogCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFByaW1hcnkgZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZGV2X2VycihkZXYsICJQcmltYXJ5IGZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJaWYgKCFvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgZmFsc2UpKSB7CiAJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZnctPnN0YV9mdywgcHJpdi0+ZGV2KSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZmluZCBmaXJtd2FyZTogJXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBmdy0+c3RhX2Z3KTsKKwkJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGZpbmQgZmlybXdhcmU6ICVzXG4iLCBmdy0+c3RhX2Z3KTsKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAJfSBlbHNlCkBAIC0zMjIsOCArMzE2LDcgQEAKIAlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSkpCiAJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogU2Vjb25kYXJ5IGZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCWRldl9lcnIoZGV2LCAiU2Vjb25kYXJ5IGZpcm13YXJlIGRvd25sb2FkIGZhaWxlZFxuIik7CiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5jCmluZGV4IGYyYzkxOGMuLjFhMmZjYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuYwpAQCAtNDY5LDcgKzQ2OSw3IEBACiAJdTE2IHJsZW5ndGgsIHJ0eXBlOwogCXVuc2lnbmVkIG53b3JkczsKIAotCWlmICgoYnVmc2l6ZSA8IDApIHx8IChidWZzaXplICUgMikpCisJaWYgKGJ1ZnNpemUgJSAyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX0FDQ0VTUywgcmlkLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5oCmluZGV4IGM3OGM0NDIuLjJkZGRiYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuaApAQCAtMzQyLDcgKzM0Miw3IEBACiAJX19sZTY0CXRpbWVzdGFtcDsKIAlfX2xlMTYJYmVhY29uX2ludGVydmFsOwogCV9fbGUxNgljYXBhYmlsaXRpZXM7Ci0JdTgJZGF0YVszMTZdOworCXU4CWRhdGFbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19OT1RfQ09OTkVDVEVEICAgKDB4MDAwMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMKaW5kZXggYTliYTE5NS4uYTNlZWZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMKQEAgLTMwOSw3ICszMDksNyBAQAogCiAJLyogT3BlbiBhdXhpbGlhcnkgcG9ydCAqLwogCXJldCA9IGhlcm1lc19hdXhfY29udHJvbChodywgMSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgUEZYICJBVVggZW5hYmxlIHJldHVybmVkICVkXG4iLCByZXQpOworCXByX2RlYnVnKFBGWCAiQVVYIGVuYWJsZSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0zMTksMTIgKzMxOSwxMiBAQAogCiAJLyogQ2xvc2UgYXV4IHBvcnQgKi8KIAlyZXQgPSBoZXJtZXNfYXV4X2NvbnRyb2woaHcsIDApOwotCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiQVVYIGRpc2FibGUgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJcHJfZGVidWcoUEZYICJBVVggZGlzYWJsZSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKIAogCS8qIENoZWNrIFBEQSBsZW5ndGggKi8KIAlwZGFfc2l6ZSA9IGxlMTZfdG9fY3B1KHBkYVswXSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgUEZYICJBY3R1YWwgUERBIGxlbmd0aCAlZCwgTWF4IGFsbG93ZWQgJWRcbiIsCi0JICAgICAgIHBkYV9zaXplLCBwZGFfbGVuKTsKKwlwcl9kZWJ1ZyhQRlggIkFjdHVhbCBQREEgbGVuZ3RoICVkLCBNYXggYWxsb3dlZCAlZFxuIiwKKwkJIHBkYV9zaXplLCBwZGFfbGVuKTsKIAlpZiAocGRhX3NpemUgPiBwZGFfbGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNDIyLDIwICs0MjIsMTkgQEAKIAkJcmV0dXJuIGVycjsKIAogCWVyciA9IGhlcm1lc19hdXhfY29udHJvbChodywgMSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgUEZYICJBVVggZW5hYmxlIHJldHVybmVkICVkXG4iLCBlcnIpOworCXByX2RlYnVnKFBGWCAiQVVYIGVuYWJsZSByZXR1cm5lZCAlZFxuIiwgZXJyKTsKIAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkVuYWJsaW5nIHZvbGF0aWxlLCBFUCAweCUwOHhcbiIsIG9mZnNldCk7CisJcHJfZGVidWcoS0VSTl9ERUJVRyBQRlggIkVuYWJsaW5nIHZvbGF0aWxlLCBFUCAweCUwOHhcbiIsIG9mZnNldCk7CiAJZXJyID0gaGVybWVzX2RvaWNtZF93YWl0KGh3LAogCQkJCSBIRVJNRVNfUFJPR1JBTV9FTkFCTEVfVk9MQVRJTEUsCiAJCQkJIG9mZnNldCAmIDB4RkZGRnUsCiAJCQkJIG9mZnNldCA+PiAxNiwKIAkJCQkgMCwKIAkJCQkgTlVMTCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgUEZYICJQUk9HUkFNX0VOQUJMRSByZXR1cm5lZCAlZFxuIiwKLQkgICAgICAgZXJyKTsKKwlwcl9kZWJ1ZyhQRlggIlBST0dSQU1fRU5BQkxFIHJldHVybmVkICVkXG4iLCBlcnIpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ1NCwxNiArNDUzLDE2IEBACiAKIAlyYyA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfUFJPR1JBTV9ESVNBQkxFLCAwLCAmcmVzcCk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIlBST0dSQU1fRElTQUJMRSByZXR1cm5lZCAlZCwgIgotCSAgICAgICAicjAgMHglMDR4LCByMSAweCUwNHgsIHIyIDB4JTA0eFxuIiwKLQkgICAgICAgcmMsIHJlc3AucmVzcDAsIHJlc3AucmVzcDEsIHJlc3AucmVzcDIpOworCXByX2RlYnVnKFBGWCAiUFJPR1JBTV9ESVNBQkxFIHJldHVybmVkICVkLCAiCisJCSAicjAgMHglMDR4LCByMSAweCUwNHgsIHIyIDB4JTA0eFxuIiwKKwkJIHJjLCByZXNwLnJlc3AwLCByZXNwLnJlc3AxLCByZXNwLnJlc3AyKTsKIAogCWlmICgocmMgPT0gMCkgJiYKIAkgICAgKChyZXNwLnN0YXR1cyAmIEhFUk1FU19TVEFUVVNfQ01EQ09ERSkgIT0gSEVSTUVTX0NNRF9ET1dOTEQpKQogCQlyYyA9IC1FSU87CiAKIAllcnIgPSBoZXJtZXNfYXV4X2NvbnRyb2woaHcsIDApOwotCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiQVVYIGRpc2FibGUgcmV0dXJuZWQgJWRcbiIsIGVycik7CisJcHJfZGVidWcoUEZYICJBVVggZGlzYWJsZSByZXR1cm5lZCAlZFxuIiwgZXJyKTsKIAogCS8qIEFja25vd2xlZGdlIGFueSBvdXRzdGFuZGluZyBjb21tYW5kICovCiAJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEVWQUNLLCAweEZGRkYpOwpAQCAtNDk2LDkgKzQ5NSw4IEBACiAKIAl3aGlsZSAoKGJsa2FkZHIgIT0gQkxPQ0tfRU5EKSAmJgogCSAgICAgICAoKCh2b2lkICopIGJsayArIGJsa2xlbikgPD0gZW5kKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKLQkJICAgICAgICJQcm9ncmFtbWluZyBibG9jayBvZiBsZW5ndGggJWQgdG8gYWRkcmVzcyAweCUwOHhcbiIsCi0JCSAgICAgICBibGtsZW4sIGJsa2FkZHIpOworCQlwcl9kZWJ1ZyhQRlggIlByb2dyYW1taW5nIGJsb2NrIG9mIGxlbmd0aCAlZCAiCisJCQkgInRvIGFkZHJlc3MgMHglMDh4XG4iLCBibGtsZW4sIGJsa2FkZHIpOwogCiAjaWYgIUxJTUlUX1BST0dSQU1fU0laRQogCQkvKiB3bF9sa20gZHJpdmVyIHNwbGl0cyB0aGlzIGludG8gd3JpdGVzIG9mIDIwMDAgYnl0ZXMgKi8KQEAgLTUxMCwxMCArNTA4LDkgQEAKIAkJYWRkciA9IGJsa2FkZHI7CiAKIAkJd2hpbGUgKGFkZHIgPCAoYmxrYWRkciArIGJsa2xlbikpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWAotCQkJICAgICAgICJQcm9ncmFtbWluZyBzdWJibG9jayBvZiBsZW5ndGggJWQgIgotCQkJICAgICAgICJ0byBhZGRyZXNzIDB4JTA4eC4gRGF0YSBAICVwXG4iLAotCQkJICAgICAgIGxlbiwgYWRkciwgJmJsay0+ZGF0YVthZGRyIC0gYmxrYWRkcl0pOworCQkJcHJfZGVidWcoUEZYICJQcm9ncmFtbWluZyBzdWJibG9jayBvZiBsZW5ndGggJWQgIgorCQkJCSAidG8gYWRkcmVzcyAweCUwOHguIERhdGEgQCAlcFxuIiwKKwkJCQkgbGVuLCBhZGRyLCAmYmxrLT5kYXRhW2FkZHIgLSBibGthZGRyXSk7CiAKIAkJCWhlcm1lc19hdXhfc2V0YWRkcihodywgYWRkcik7CiAJCQloZXJtZXNfd3JpdGVfYnl0ZXMoaHcsIEhFUk1FU19BVVhEQVRBLApAQCAtNjQzLDggKzY0MCw4IEBACiAKIAkJcGRpID0gaGVybWVzX2ZpbmRfcGRpKGZpcnN0X3BkaSwgcmVjb3JkX2lkLCBwZGFfZW5kKTsKIAkJaWYgKHBkaSkKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiRm91bmQgcmVjb3JkIDB4JTA0eCBhdCAlcFxuIiwKLQkJCSAgICAgICByZWNvcmRfaWQsIHBkaSk7CisJCQlwcl9kZWJ1ZyhQRlggIkZvdW5kIHJlY29yZCAweCUwNHggYXQgJXBcbiIsCisJCQkJIHJlY29yZF9pZCwgcGRpKTsKIAogCQlzd2l0Y2ggKHJlY29yZF9pZCkgewogCQljYXNlIDB4MTEwOiAvKiBNb2RlbSBSRUZEQUMgdmFsdWVzICovCkBAIC02NTQsOSArNjUxLDkgQEAKIAkJCWRlZmF1bHRfcGRpID0gTlVMTDsKIAkJCWlmIChvdXRkb29yX3BkaSkgewogCQkJCXBkaSA9IG91dGRvb3JfcGRpOwotCQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWAotCQkJCSAgICAgICAiVXNpbmcgb3V0ZG9vciByZWNvcmQgMHglMDR4IGF0ICVwXG4iLAotCQkJCSAgICAgICByZWNvcmRfaWQgKyAxLCBwZGkpOworCQkJCXByX2RlYnVnKFBGWAorCQkJCQkgIlVzaW5nIG91dGRvb3IgcmVjb3JkIDB4JTA0eCBhdCAlcFxuIiwKKwkJCQkJIHJlY29yZF9pZCArIDEsIHBkaSk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAweDU6IC8qICBIV0lGIENvbXBhdGlibGl0eSAqLwpAQCAtNjg0LDkgKzY4MSw4IEBACiAJCWlmICghcGRpICYmIGRlZmF1bHRfcGRpKSB7CiAJCQkvKiBVc2UgZGVmYXVsdCAqLwogCQkJcGRpID0gZGVmYXVsdF9wZGk7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKLQkJCSAgICAgICAiVXNpbmcgZGVmYXVsdCByZWNvcmQgMHglMDR4IGF0ICVwXG4iLAotCQkJICAgICAgIHJlY29yZF9pZCwgcGRpKTsKKwkJCXByX2RlYnVnKFBGWCAiVXNpbmcgZGVmYXVsdCByZWNvcmQgMHglMDR4IGF0ICVwXG4iLAorCQkJCSByZWNvcmRfaWQsIHBkaSk7CiAJCX0KIAogCQlpZiAocGRpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmMKaW5kZXggYjM5NDYyNy4uMzU5NjUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYwpAQCAtMywxNiArMywyMiBAQAogICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotCisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAjaW5jbHVkZSAiaGVybWVzLmgiCiAjaW5jbHVkZSAiaGVybWVzX3JpZC5oIgogI2luY2x1ZGUgIm9yaW5vY28uaCIKIAogI2luY2x1ZGUgImh3LmgiCiAKKyNkZWZpbmUgU1lNQk9MX01BWF9WRVJfTEVOCSgxNCkKKworLyogU3ltYm9sIGZpcm13YXJlIGhhcyBhIGJ1ZyBhbGxvY2F0aW5nIGJ1ZmZlcnMgbGFyZ2VyIHRoYW4gdGhpcyAqLworI2RlZmluZSBUWF9OSUNCVUZfU0laRV9CVUcJMTU4NQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEYXRhIHRhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zNiw2ICs0MiwzNDMgQEAKIH07CiAjZGVmaW5lIEJJVFJBVEVfVEFCTEVfU0laRSBBUlJBWV9TSVpFKGJpdHJhdGVfdGFibGUpCiAKKy8qIEZpcm13YXJlIHZlcnNpb24gZW5jb2RpbmcgKi8KK3N0cnVjdCBjb21wX2lkIHsKKwl1MTYgaWQsIHZhcmlhbnQsIG1ham9yLCBtaW5vcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdGF0aWMgaW5saW5lIGZ3dHlwZV90IGRldGVybWluZV9maXJtd2FyZV90eXBlKHN0cnVjdCBjb21wX2lkICpuaWNfaWQpCit7CisJaWYgKG5pY19pZC0+aWQgPCAweDgwMDApCisJCXJldHVybiBGSVJNV0FSRV9UWVBFX0FHRVJFOworCWVsc2UgaWYgKG5pY19pZC0+aWQgPT0gMHg4MDAwICYmIG5pY19pZC0+bWFqb3IgPT0gMCkKKwkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfU1lNQk9MOworCWVsc2UKKwkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw7Cit9CisKKy8qIFNldCBwcml2LT5maXJtd2FyZSB0eXBlLCBkZXRlcm1pbmUgZmlybXdhcmUgcHJvcGVydGllcworICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGJlZm9yZSB3ZSBoYXZlIHJlZ2lzdGVycmVkIHdpdGggbmV0ZGV2LAorICogc28gYWxsIGVycm9ycyBnbyBvdXQgd2l0aCBkZXZfKiByYXRoZXIgdGhhbiBwcmludGsKKyAqLworaW50IGRldGVybWluZV9md19jYXBhYmlsaXRpZXMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisJc3RydWN0IGNvbXBfaWQgbmljX2lkLCBzdGFfaWQ7CisJdW5zaWduZWQgaW50IGZpcm12ZXI7CisJY2hhciB0bXBbU1lNQk9MX01BWF9WRVJfTEVOKzFdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMikpKTsKKworCS8qIEdldCB0aGUgaGFyZHdhcmUgdmVyc2lvbiAqLworCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsIEhFUk1FU19SSURfTklDSUQsICZuaWNfaWQpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICJDYW5ub3QgcmVhZCBoYXJkd2FyZSBpZGVudGl0eTogZXJyb3IgJWRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWxlMTZfdG9fY3B1cygmbmljX2lkLmlkKTsKKwlsZTE2X3RvX2NwdXMoJm5pY19pZC52YXJpYW50KTsKKwlsZTE2X3RvX2NwdXMoJm5pY19pZC5tYWpvcik7CisJbGUxNl90b19jcHVzKCZuaWNfaWQubWlub3IpOworCWRldl9pbmZvKGRldiwgIkhhcmR3YXJlIGlkZW50aXR5ICUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCisJCSBuaWNfaWQuaWQsIG5pY19pZC52YXJpYW50LCBuaWNfaWQubWFqb3IsIG5pY19pZC5taW5vcik7CisKKwlwcml2LT5maXJtd2FyZV90eXBlID0gZGV0ZXJtaW5lX2Zpcm13YXJlX3R5cGUoJm5pY19pZCk7CisKKwkvKiBHZXQgdGhlIGZpcm13YXJlIHZlcnNpb24gKi8KKwllcnIgPSBIRVJNRVNfUkVBRF9SRUNPUkQoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1NUQUlELCAmc3RhX2lkKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHJlYWQgc3RhdGlvbiBpZGVudGl0eTogZXJyb3IgJWRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWxlMTZfdG9fY3B1cygmc3RhX2lkLmlkKTsKKwlsZTE2X3RvX2NwdXMoJnN0YV9pZC52YXJpYW50KTsKKwlsZTE2X3RvX2NwdXMoJnN0YV9pZC5tYWpvcik7CisJbGUxNl90b19jcHVzKCZzdGFfaWQubWlub3IpOworCWRldl9pbmZvKGRldiwgIlN0YXRpb24gaWRlbnRpdHkgICUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCisJCSBzdGFfaWQuaWQsIHN0YV9pZC52YXJpYW50LCBzdGFfaWQubWFqb3IsIHN0YV9pZC5taW5vcik7CisKKwlzd2l0Y2ggKHN0YV9pZC5pZCkgeworCWNhc2UgMHgxNToKKwkJZGV2X2VycihkZXYsICJQcmltYXJ5IGZpcm13YXJlIGlzIGFjdGl2ZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCWNhc2UgMHgxNGI6CisJCWRldl9lcnIoZGV2LCAiVGVydGlhcnkgZmlybXdhcmUgaXMgYWN0aXZlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2FzZSAweDFmOgkvKiBJbnRlcnNpbCwgQWdlcmUsIFN5bWJvbCBTcGVjdHJ1bTI0ICovCisJY2FzZSAweDIxOgkvKiBTeW1ib2wgU3BlY3RydW0yNCBUcmlsb2d5ICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9ub3RpY2UoZGV2LCAiVW5rbm93biBzdGF0aW9uIElELCBwbGVhc2UgcmVwb3J0XG4iKTsKKwkJYnJlYWs7CisJfQorCisJLyogRGVmYXVsdCBjYXBhYmlsaXRpZXMgKi8KKwlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAxOworCXByaXYtPmhhc19td28gPSAwOworCXByaXYtPmhhc19wcmVhbWJsZSA9IDA7CisJcHJpdi0+aGFzX3BvcnQzID0gMTsKKwlwcml2LT5oYXNfaWJzcyA9IDE7CisJcHJpdi0+aGFzX3dlcCA9IDA7CisJcHJpdi0+aGFzX2JpZ193ZXAgPSAwOworCXByaXYtPmhhc19hbHRfdHhjbnRsID0gMDsKKwlwcml2LT5oYXNfZXh0X3NjYW4gPSAwOworCXByaXYtPmhhc193cGEgPSAwOworCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMDsKKworCS8qIERldGVybWluZSBjYXBhYmlsaXRpZXMgZnJvbSB0aGUgZmlybXdhcmUgdmVyc2lvbiAqLworCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwkJLyogTHVjZW50IFdhdmVsYW4gSUVFRSwgTHVjZW50IE9yaW5vY28sIENhYmxldHJvbiBSb2FtQWJvdXQsCisJCSAgIEVMU0EsIE1lbGNvLCBIUCwgSUJNLCBEZWxsIDExNTAsIENvbXBhcSAxMTAvMjEwICovCisJCXNucHJpbnRmKHByaXYtPmZ3X25hbWUsIHNpemVvZihwcml2LT5md19uYW1lKSAtIDEsCisJCQkgIkx1Y2VudC9BZ2VyZSAlZC4lMDJkIiwgc3RhX2lkLm1ham9yLCBzdGFfaWQubWlub3IpOworCisJCWZpcm12ZXIgPSAoKHVuc2lnbmVkIGxvbmcpc3RhX2lkLm1ham9yIDw8IDE2KSB8IHN0YV9pZC5taW5vcjsKKworCQlwcml2LT5oYXNfaWJzcyA9IChmaXJtdmVyID49IDB4NjAwMDYpOworCQlwcml2LT5oYXNfd2VwID0gKGZpcm12ZXIgPj0gMHg0MDAyMCk7CisJCXByaXYtPmhhc19iaWdfd2VwID0gMTsgLyogRklYTUU6IHRoaXMgaXMgd3JvbmcgLSBob3cgZG8gd2UgdGVsbAorCQkJCQkgIEdvbGQgY2FyZHMgZnJvbSB0aGUgb3RoZXJzPyAqLworCQlwcml2LT5oYXNfbXdvID0gKGZpcm12ZXIgPj0gMHg2MDAwMCk7CisJCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4NDAwMjApOyAvKiBEb24ndCB3b3JrIGluIDcuNTIgPyAqLworCQlwcml2LT5pYnNzX3BvcnQgPSAxOworCQlwcml2LT5oYXNfaG9zdHNjYW4gPSAoZmlybXZlciA+PSAweDgwMDBhKTsKKwkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAxOworCQlwcml2LT5icm9rZW5fbW9uaXRvciA9IChmaXJtdmVyID49IDB4ODAwMDApOworCQlwcml2LT5oYXNfYWx0X3R4Y250bCA9IChmaXJtdmVyID49IDB4OTAwMDApOyAvKiBBbGwgOS54ID8gKi8KKwkJcHJpdi0+aGFzX2V4dF9zY2FuID0gKGZpcm12ZXIgPj0gMHg5MDAwMCk7IC8qIEFsbCA5LnggPyAqLworCQlwcml2LT5oYXNfd3BhID0gKGZpcm12ZXIgPj0gMHg5MDAyYSk7CisJCS8qIFRlc3RlZCB3aXRoIEFnZXJlIGZpcm13YXJlIDoKKwkJICoJMS4xNiA7IDQuMDggOyA0LjUyIDsgNi4wNCA7IDYuMTYgOyA3LjI4ID0+IEplYW4gSUkKKwkJICogVGVzdGVkIENhYmxlVHJvbiBmaXJtd2FyZSA6IDQuMzIgPT4gQW50b24gKi8KKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJLyogU3ltYm9sICwgM0NvbSBBaXJDb25uZWN0LCBJbnRlbCwgRXJpY3Nzb24gV0xBTiAqLworCQkvKiBJbnRlbCBNQUMgOiAwMDowMjpCMzoqICovCisJCS8qIDNDb20gTUFDIDogMDA6NTA6REE6KiAqLworCQltZW1zZXQodG1wLCAwLCBzaXplb2YodG1wKSk7CisJCS8qIEdldCB0aGUgU3ltYm9sIGZpcm13YXJlIHZlcnNpb24gKi8KKwkJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwKKwkJCQkgICAgICBIRVJNRVNfUklEX1NFQ09OREFSWVZFUlNJT05fU1lNQk9MLAorCQkJCSAgICAgIFNZTUJPTF9NQVhfVkVSX0xFTiwgTlVMTCwgJnRtcCk7CisJCWlmIChlcnIpIHsKKwkJCWRldl93YXJuKGRldiwgIkVycm9yICVkIHJlYWRpbmcgU3ltYm9sIGZpcm13YXJlIGluZm8uICIKKwkJCQkgIldpbGRseSBndWVzc2luZyBjYXBhYmlsaXRpZXMuLi5cbiIsIGVycik7CisJCQlmaXJtdmVyID0gMDsKKwkJCXRtcFswXSA9ICdcMCc7CisJCX0gZWxzZSB7CisJCQkvKiBUaGUgZmlybXdhcmUgcmV2aXNpb24gaXMgYSBzdHJpbmcsIHRoZSBmb3JtYXQgaXMKKwkJCSAqIHNvbWV0aGluZyBsaWtlIDogIlYyLjIwLTAxIi4KKwkJCSAqIFF1aWNrIGFuZCBkaXJ0eSBwYXJzaW5nLi4uIC0gSmVhbiBJSQorCQkJICovCisJCQlmaXJtdmVyID0gKCh0bXBbMV0gLSAnMCcpIDw8IDE2KQorCQkJCXwgKCh0bXBbM10gLSAnMCcpIDw8IDEyKQorCQkJCXwgKCh0bXBbNF0gLSAnMCcpIDw8IDgpCisJCQkJfCAoKHRtcFs2XSAtICcwJykgPDwgNCkKKwkJCQl8ICh0bXBbN10gLSAnMCcpOworCisJCQl0bXBbU1lNQk9MX01BWF9WRVJfTEVOXSA9ICdcMCc7CisJCX0KKworCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAorCQkJICJTeW1ib2wgJXMiLCB0bXApOworCisJCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHgyMDAwMCk7CisJCXByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDE1MDEyKTsKKwkJcHJpdi0+aGFzX2JpZ193ZXAgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKKwkJcHJpdi0+aGFzX3BtID0gKGZpcm12ZXIgPj0gMHgyMDAwMCAmJiBmaXJtdmVyIDwgMHgyMjAwMCkgfHwKKwkJCSAgICAgICAoZmlybXZlciA+PSAweDI5MDAwICYmIGZpcm12ZXIgPCAweDMwMDAwKSB8fAorCQkJICAgICAgIGZpcm12ZXIgPj0gMHgzMTAwMDsKKwkJcHJpdi0+aGFzX3ByZWFtYmxlID0gKGZpcm12ZXIgPj0gMHgyMDAwMCk7CisJCXByaXYtPmlic3NfcG9ydCA9IDQ7CisKKwkJLyogU3ltYm9sIGZpcm13YXJlIGlzIGZvdW5kIG9uIHZhcmlvdXMgY2FyZHMsIGJ1dAorCQkgKiB0aGVyZSBoYXMgYmVlbiBubyBhdHRlbXB0IHRvIGNoZWNrIGZpcm13YXJlCisJCSAqIGRvd25sb2FkIG9uIG5vbi1zcGVjdHJ1bV9jcyBiYXNlZCBjYXJkcy4KKwkJICoKKwkJICogR2l2ZW4gdGhhdCB0aGUgQWdlcmUgZmlybXdhcmUgZG93bmxvYWQgd29ya3MKKwkJICogZGlmZmVyZW50bHksIHdlIHNob3VsZCBhdm9pZCBkb2luZyBhIGZpcm13YXJlCisJCSAqIGRvd25sb2FkIHdpdGggdGhlIFN5bWJvbCBhbGdvcml0aG0gb24gbm9uLXNwZWN0cnVtCisJCSAqIGNhcmRzLgorCQkgKgorCQkgKiBGb3Igbm93IHdlIGNhbiBpZGVudGlmeSBhIHNwZWN0cnVtX2NzIGJhc2VkIGNhcmQKKwkJICogYmVjYXVzZSBpdCBoYXMgYSBmaXJtd2FyZSByZXNldCBmdW5jdGlvbi4KKwkJICovCisJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gKHByaXYtPnN0b3BfZncgIT0gTlVMTCk7CisKKwkJcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0ID0gKGZpcm12ZXIgPT0gMHgyNTAxMykgfHwKKwkJCQkoZmlybXZlciA+PSAweDMwMDAwICYmIGZpcm12ZXIgPD0gMHgzMTAwMCk7CisJCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4MzEwMDEpIHx8CisJCQkJICAgICAoZmlybXZlciA+PSAweDI5MDU3ICYmIGZpcm12ZXIgPCAweDMwMDAwKTsKKwkJLyogVGVzdGVkIHdpdGggSW50ZWwgZmlybXdhcmUgOiAweDIwMDE1ID0+IEplYW4gSUkgKi8KKwkJLyogVGVzdGVkIHdpdGggM0NvbSBmaXJtd2FyZSA6IDB4MTUwMTIgJiAweDIyMDAxID0+IEplYW4gSUkgKi8KKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgorCQkvKiBELUxpbmssIExpbmtzeXMsIEFkdHJvbiwgWm9vbUFpciwgYW5kIG1hbnkgb3RoZXJzLi4uCisJCSAqIFNhbXN1bmcsIENvbXBhcSAxMDAvMjAwIGFuZCBQcm94aW0gYXJlIHNsaWdodGx5CisJCSAqIGRpZmZlcmVudCBhbmQgbGVzcyB3ZWxsIHRlc3RlZCAqLworCQkvKiBELUxpbmsgTUFDIDogMDA6NDA6MDU6KiAqLworCQkvKiBBZGR0cm9uIE1BQyA6IDAwOjkwOkQxOiogKi8KKwkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKKwkJCSAiSW50ZXJzaWwgJWQuJWQuJWQiLCBzdGFfaWQubWFqb3IsIHN0YV9pZC5taW5vciwKKwkJCSBzdGFfaWQudmFyaWFudCk7CisKKwkJZmlybXZlciA9ICgodW5zaWduZWQgbG9uZylzdGFfaWQubWFqb3IgPDwgMTYpIHwKKwkJCSgodW5zaWduZWQgbG9uZylzdGFfaWQubWlub3IgPDwgOCkgfCBzdGFfaWQudmFyaWFudDsKKworCQlwcml2LT5oYXNfaWJzcyA9IChmaXJtdmVyID49IDB4MDAwNzAwKTsgLyogRklYTUUgKi8KKwkJcHJpdi0+aGFzX2JpZ193ZXAgPSBwcml2LT5oYXNfd2VwID0gKGZpcm12ZXIgPj0gMHgwMDA4MDApOworCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDAwMDcwMCk7CisJCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4MDEwMzAxKTsKKworCQlpZiAoZmlybXZlciA+PSAweDAwMDgwMCkKKwkJCXByaXYtPmlic3NfcG9ydCA9IDA7CisJCWVsc2UgeworCQkJZGV2X25vdGljZShkZXYsICJJbnRlcnNpbCBmaXJtd2FyZSBlYXJsaWVyIHRoYW4gdjAuOC54IgorCQkJCSAgICIgLSBzZXZlcmFsIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJcHJpdi0+aWJzc19wb3J0ID0gMTsKKwkJfQorCQlicmVhazsKKwl9CisJZGV2X2luZm8oZGV2LCAiRmlybXdhcmUgZGV0ZXJtaW5lZCBhcyAlc1xuIiwgcHJpdi0+ZndfbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogUmVhZCBzZXR0aW5ncyBmcm9tIEVFUFJPTSBpbnRvIG91ciBwcml2YXRlIHN0cnVjdHVyZS4KKyAqIE1BQyBhZGRyZXNzIGdldHMgZHJvcHBlZCBpbnRvIGNhbGxlcnMgYnVmZmVyCisgKiBDYW4gYmUgY2FsbGVkIGJlZm9yZSBuZXRkZXYgcmVnaXN0cmF0aW9uLgorICovCitpbnQgb3Jpbm9jb19od19yZWFkX2NhcmRfc2V0dGluZ3Moc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgdTggKmRldl9hZGRyKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIG5pY2tidWY7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBsZW47CisJaW50IGVycjsKKwl1MTYgcmVjbGVuOworCisJLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTUFDQUREUiwKKwkJCSAgICAgIEVUSF9BTEVOLCBOVUxMLCBkZXZfYWRkcik7CisJaWYgKGVycikgeworCQlkZXZfd2FybihkZXYsICJGYWlsZWQgdG8gcmVhZCBNQUMgYWRkcmVzcyFcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXZfZGJnKGRldiwgIk1BQyBhZGRyZXNzICVwTVxuIiwgZGV2X2FkZHIpOworCisJLyogR2V0IHRoZSBzdGF0aW9uIG5hbWUgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk5BTUUsCisJCQkgICAgICBzaXplb2Yobmlja2J1ZiksICZyZWNsZW4sICZuaWNrYnVmKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlYWQgc3RhdGlvbiBuYW1lXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChuaWNrYnVmLmxlbikKKwkJbGVuID0gbWluKElXX0VTU0lEX01BWF9TSVpFLCAoaW50KWxlMTZfdG9fY3B1KG5pY2tidWYubGVuKSk7CisJZWxzZQorCQlsZW4gPSBtaW4oSVdfRVNTSURfTUFYX1NJWkUsIDIgKiByZWNsZW4pOworCW1lbWNweShwcml2LT5uaWNrLCAmbmlja2J1Zi52YWwsIGxlbik7CisJcHJpdi0+bmlja1tsZW5dID0gJ1wwJzsKKworCWRldl9kYmcoZGV2LCAiU3RhdGlvbiBuYW1lIFwiJXNcIlxuIiwgcHJpdi0+bmljayk7CisKKwkvKiBHZXQgYWxsb3dlZCBjaGFubmVscyAqLworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NIQU5ORUxMSVNULAorCQkJCSAgJnByaXYtPmNoYW5uZWxfbWFzayk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIGNoYW5uZWwgbGlzdCFcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBHZXQgaW5pdGlhbCBBUCBkZW5zaXR5ICovCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GU1lTVEVNU0NBTEUsCisJCQkJICAmcHJpdi0+YXBfZGVuc2l0eSk7CisJaWYgKGVyciB8fCBwcml2LT5hcF9kZW5zaXR5IDwgMSB8fCBwcml2LT5hcF9kZW5zaXR5ID4gMykKKwkJcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMDsKKworCS8qIEdldCBpbml0aWFsIFJUUyB0aHJlc2hvbGQgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZSVFNUSFJFU0hPTEQsCisJCQkJICAmcHJpdi0+cnRzX3RocmVzaCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIFJUUyB0aHJlc2hvbGQhXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IGluaXRpYWwgZnJhZ21lbnRhdGlvbiBzZXR0aW5ncyAqLworCWlmIChwcml2LT5oYXNfbXdvKQorCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKKwkJCQkJICAmcHJpdi0+bXdvX3JvYnVzdCk7CisJZWxzZQorCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORkZSQUdNRU5UQVRJT05USFJFU0hPTEQsCisJCQkJCSAgJnByaXYtPmZyYWdfdGhyZXNoKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgZnJhZ21lbnRhdGlvbiBzZXR0aW5ncyFcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBQb3dlciBtYW5hZ2VtZW50IHNldHVwICovCisJaWYgKHByaXYtPmhhc19wbSkgeworCQlwcml2LT5wbV9vbiA9IDA7CisJCXByaXYtPnBtX21jYXN0ID0gMTsKKwkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLAorCQkJCQkgICZwcml2LT5wbV9wZXJpb2QpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIHBvd2VyIG1hbmFnZW1lbnQgIgorCQkJCSJwZXJpb2QhXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GUE1IT0xET1ZFUkRVUkFUSU9OLAorCQkJCQkgICZwcml2LT5wbV90aW1lb3V0KTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBwb3dlciBtYW5hZ2VtZW50ICIKKwkJCQkidGltZW91dCFcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBQcmVhbWJsZSBzZXR1cCAqLworCWlmIChwcml2LT5oYXNfcHJlYW1ibGUpIHsKKwkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZQUkVBTUJMRV9TWU1CT0wsCisJCQkJCSAgJnByaXYtPnByZWFtYmxlKTsKKwl9CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKiBDYW4gYmUgY2FsbGVkIGJlZm9yZSBuZXRkZXYgcmVnaXN0cmF0aW9uICovCitpbnQgb3Jpbm9jb19od19hbGxvY2F0ZV9maWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKworCWVyciA9IGhlcm1lc19hbGxvY2F0ZShodywgcHJpdi0+bmljYnVmX3NpemUsICZwcml2LT50eGZpZCk7CisJaWYgKGVyciA9PSAtRUlPICYmIHByaXYtPm5pY2J1Zl9zaXplID4gVFhfTklDQlVGX1NJWkVfQlVHKSB7CisJCS8qIFRyeSB3b3JrYXJvdW5kIGZvciBvbGQgU3ltYm9sIGZpcm13YXJlIGJ1ZyAqLworCQlwcml2LT5uaWNidWZfc2l6ZSA9IFRYX05JQ0JVRl9TSVpFX0JVRzsKKwkJZXJyID0gaGVybWVzX2FsbG9jYXRlKGh3LCBwcml2LT5uaWNidWZfc2l6ZSwgJnByaXYtPnR4ZmlkKTsKKworCQlkZXZfd2FybihkZXYsICJGaXJtd2FyZSBBTExPQyBidWcgZGV0ZWN0ZWQgIgorCQkJICIob2xkIFN5bWJvbCBmaXJtd2FyZT8pLiBXb3JrIGFyb3VuZCAlc1xuIiwKKwkJCSBlcnIgPyAiZmFpbGVkISIgOiAib2suIik7CisJfQorCisJcmV0dXJuIGVycjsKK30KKwogaW50IG9yaW5vY29fZ2V0X2JpdHJhdGVtb2RlKGludCBiaXRyYXRlLCBpbnQgYXV0b21hdGljKQogewogCWludCByYXRlbW9kZSA9IC0xOwpAQCAtNjMsMTIgKzQwNiwyNDMgQEAKIAkqYXV0b21hdGljID0gYml0cmF0ZV90YWJsZVtyYXRlbW9kZV0uYXV0b21hdGljOwogfQogCitpbnQgb3Jpbm9jb19od19wcm9ncmFtX3JpZHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKwlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGlkYnVmOworCisJLyogU2V0IHRoZSBNQUMgYWRkcmVzcyAqLworCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk1BQ0FERFIsCisJCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihFVEhfQUxFTiksIGRldi0+ZGV2X2FkZHIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBNQUMgYWRkcmVzc1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTZXQgdXAgdGhlIGxpbmsgbW9kZSAqLworCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZQT1JUVFlQRSwKKwkJCQkgICBwcml2LT5wb3J0X3R5cGUpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBwb3J0IHR5cGVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCS8qIFNldCB0aGUgY2hhbm5lbC9mcmVxdWVuY3kgKi8KKwlpZiAocHJpdi0+Y2hhbm5lbCAhPSAwICYmIHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GT1dOQ0hBTk5FTCwKKwkJCQkJICAgcHJpdi0+Y2hhbm5lbCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgY2hhbm5lbCAlZFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVyciwgcHJpdi0+Y2hhbm5lbCk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJaWYgKHByaXYtPmhhc19pYnNzKSB7CisJCXUxNiBjcmVhdGVpYnNzOworCisJCWlmICgoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID09IDApICYmIChwcml2LT5jcmVhdGVpYnNzKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRoaXMgZmlybXdhcmUgcmVxdWlyZXMgYW4gIgorCQkJICAgICAgICJFU1NJRCBpbiBJQlNTLUFkLUhvYyBtb2RlLlxuIiwgZGV2LT5uYW1lKTsKKwkJCS8qIFdpdGggd3ZsYW5fY3MsIGluIHRoaXMgY2FzZSwgd2Ugd291bGQgY3Jhc2guCisJCQkgKiBob3BlZnVsbHksIHRoaXMgZHJpdmVyIHdpbGwgYmVoYXZlIGJldHRlci4uLgorCQkJICogSmVhbiBJSSAqLworCQkJY3JlYXRlaWJzcyA9IDA7CisJCX0gZWxzZSB7CisJCQljcmVhdGVpYnNzID0gcHJpdi0+Y3JlYXRlaWJzczsKKwkJfQorCisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZDUkVBVEVJQlNTLAorCQkJCQkgICBjcmVhdGVpYnNzKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBDUkVBVEVJQlNTXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwkvKiBTZXQgdGhlIGRlc2lyZWQgQlNTSUQgKi8KKwllcnIgPSBfX29yaW5vY29faHdfc2V0X3dhcChwcml2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgQVAgYWRkcmVzc1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTZXQgdGhlIGRlc2lyZWQgRVNTSUQgKi8KKwlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkpOworCW1lbWNweSgmaWRidWYudmFsLCBwcml2LT5kZXNpcmVkX2Vzc2lkLCBzaXplb2YoaWRidWYudmFsKSk7CisJLyogV2luWFAgd2FudHMgcGFydG5lciB0byBjb25maWd1cmUgT1dOU1NJRCBldmVuIGluIElCU1MgbW9kZS4gKGppbWMpICovCisJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOU1NJRCwKKwkJCUhFUk1FU19CWVRFU19UT19SRUNMRU4oc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpKzIpLAorCQkJJmlkYnVmKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgT1dOU1NJRFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GREVTSVJFRFNTSUQsCisJCQlIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSsyKSwKKwkJCSZpZGJ1Zik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIERFU0lSRURTU0lEXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCB0aGUgc3RhdGlvbiBuYW1lICovCisJaWRidWYubGVuID0gY3B1X3RvX2xlMTYoc3RybGVuKHByaXYtPm5pY2spKTsKKwltZW1jcHkoJmlkYnVmLnZhbCwgcHJpdi0+bmljaywgc2l6ZW9mKGlkYnVmLnZhbCkpOworCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk5BTUUsCisJCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+bmljaykrMiksCisJCQkgICAgICAgJmlkYnVmKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgbmlja25hbWVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IEFQIGRlbnNpdHkgKi8KKwlpZiAocHJpdi0+aGFzX3NlbnNpdGl2aXR5KSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZTWVNURU1TQ0FMRSwKKwkJCQkJICAgcHJpdi0+YXBfZGVuc2l0eSk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFNZU1RFTVNDQUxFLiAiCisJCQkgICAgICAgIkRpc2FibGluZyBzZW5zaXRpdml0eSBjb250cm9sXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKworCQkJcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMDsKKwkJfQorCX0KKworCS8qIFNldCBSVFMgdGhyZXNob2xkICovCisJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlJUU1RIUkVTSE9MRCwKKwkJCQkgICBwcml2LT5ydHNfdGhyZXNoKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgUlRTIHRocmVzaG9sZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTZXQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgb3IgTVdPIHJvYnVzdG5lc3MgKi8KKwlpZiAocHJpdi0+aGFzX213bykKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKKwkJCQkJICAgcHJpdi0+bXdvX3JvYnVzdCk7CisJZWxzZQorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKKwkJCQkJICAgcHJpdi0+ZnJhZ190aHJlc2gpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBmcmFnbWVudGF0aW9uXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCBiaXRyYXRlICovCisJZXJyID0gX19vcmlub2NvX2h3X3NldF9iaXRyYXRlKHByaXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBiaXRyYXRlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCBwb3dlciBtYW5hZ2VtZW50ICovCisJaWYgKHByaXYtPmhhc19wbSkgeworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GUE1FTkFCTEVELAorCQkJCQkgICBwcml2LT5wbV9vbik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZNVUxUSUNBU1RSRUNFSVZFLAorCQkJCQkgICBwcml2LT5wbV9tY2FzdCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwKKwkJCQkJICAgcHJpdi0+cG1fcGVyaW9kKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZQTUhPTERPVkVSRFVSQVRJT04sCisJCQkJCSAgIHByaXYtPnBtX3RpbWVvdXQpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwkvKiBTZXQgcHJlYW1ibGUgLSBvbmx5IGZvciBTeW1ib2wgc28gZmFyLi4uICovCisJaWYgKHByaXYtPmhhc19wcmVhbWJsZSkgeworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GUFJFQU1CTEVfU1lNQk9MLAorCQkJCQkgICBwcml2LT5wcmVhbWJsZSk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgcHJlYW1ibGVcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCS8qIFNldCB1cCBlbmNyeXB0aW9uICovCisJaWYgKHByaXYtPmhhc193ZXAgfHwgcHJpdi0+aGFzX3dwYSkgeworCQllcnIgPSBfX29yaW5vY29faHdfc2V0dXBfZW5jKHByaXYpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBhY3RpdmF0aW5nIGVuY3J5cHRpb25cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHsKKwkJLyogRW5hYmxlIG1vbml0b3IgbW9kZSAqLworCQlkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOworCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwKKwkJCQkJICAgIEhFUk1FU19URVNUX01PTklUT1IsIDAsIE5VTEwpOworCX0gZWxzZSB7CisJCS8qIERpc2FibGUgbW9uaXRvciBtb2RlICovCisJCWRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKKwkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8CisJCQkJCSAgICBIRVJNRVNfVEVTVF9TVE9QLCAwLCBOVUxMKTsKKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIFJlc2V0IHByb21pc2N1aXR5IC8gbXVsdGljYXN0Ki8KKwlwcml2LT5wcm9taXNjdW91cyA9IDA7CisJcHJpdi0+bWNfY291bnQgPSAwOworCisJLyogUmVjb3JkIG1vZGUgY2hhbmdlICovCisJd2Rldi0+aWZ0eXBlID0gcHJpdi0+aXdfbW9kZTsKKworCXJldHVybiAwOworfQorCiAvKiBHZXQgdHNjIGZyb20gdGhlIGZpcm13YXJlICovCiBpbnQgb3Jpbm9jb19od19nZXRfdGtpcF9pdihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQga2V5LCB1OCAqdHNjKQogewogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAlpbnQgZXJyID0gMDsKLQl1OCB0c2NfYXJyWzRdW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOworCXU4IHRzY19hcnJbNF1bT1JJTk9DT19TRVFfTEVOXTsKIAogCWlmICgoa2V5IDwgMCkgfHwgKGtleSA+PSA0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTQsMTIgKzc2OCwyOSBAQAogewogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAlpbnQgZXJyID0gMDsKKwlpbnQgaTsKIAogCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewogCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwl7CisJCXN0cnVjdCBvcmlub2NvX2tleSBrZXlzW09SSU5PQ09fTUFYX0tFWVNdOworCisJCW1lbXNldCgma2V5cywgMCwgc2l6ZW9mKGtleXMpKTsKKwkJZm9yIChpID0gMDsgaSA8IE9SSU5PQ09fTUFYX0tFWVM7IGkrKykgeworCQkJaW50IGxlbiA9IG1pbihwcml2LT5rZXlzW2ldLmtleV9sZW4sCisJCQkJICAgICAgT1JJTk9DT19NQVhfS0VZX1NJWkUpOworCQkJbWVtY3B5KCZrZXlzW2ldLmRhdGEsIHByaXYtPmtleXNbaV0ua2V5LCBsZW4pOworCQkJaWYgKGxlbiA+IFNNQUxMX0tFWV9TSVpFKQorCQkJCWtleXNbaV0ubGVuID0gY3B1X3RvX2xlMTYoTEFSR0VfS0VZX1NJWkUpOworCQkJZWxzZSBpZiAobGVuID4gMCkKKwkJCQlrZXlzW2ldLmxlbiA9IGNwdV90b19sZTE2KFNNQUxMX0tFWV9TSVpFKTsKKwkJCWVsc2UKKwkJCQlrZXlzW2ldLmxlbiA9IGNwdV90b19sZTE2KDApOworCQl9CisKIAkJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCiAJCQkJCSAgSEVSTUVTX1JJRF9DTkZXRVBLRVlTX0FHRVJFLAotCQkJCQkgICZwcml2LT5rZXlzKTsKKwkJCQkJICAma2V5cyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCkBAIC0yMDgsMjggKzc5OSwzOCBAQAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAkJYnJlYWs7CisJfQogCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKIAljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgogCQl7CiAJCQlpbnQga2V5bGVuOwotCQkJaW50IGk7CiAKIAkJCS8qIEZvcmNlIHVuaWZvcm0ga2V5IGxlbmd0aCB0byB3b3JrIGFyb3VuZAogCQkJICogZmlybXdhcmUgYnVncyAqLwotCQkJa2V5bGVuID0gbGUxNl90b19jcHUocHJpdi0+a2V5c1twcml2LT50eF9rZXldLmxlbik7CisJCQlrZXlsZW4gPSBwcml2LT5rZXlzW3ByaXYtPnR4X2tleV0ua2V5X2xlbjsKIAogCQkJaWYgKGtleWxlbiA+IExBUkdFX0tFWV9TSVpFKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQlVHOiBLZXkgJWQgaGFzIG92ZXJzaXplIGxlbmd0aCAlZC5cbiIsCiAJCQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIHByaXYtPnR4X2tleSwga2V5bGVuKTsKIAkJCQlyZXR1cm4gLUUyQklHOwotCQkJfQorCQkJfSBlbHNlIGlmIChrZXlsZW4gPiBTTUFMTF9LRVlfU0laRSkKKwkJCQlrZXlsZW4gPSBMQVJHRV9LRVlfU0laRTsKKwkJCWVsc2UgaWYgKGtleWxlbiA+IDApCisJCQkJa2V5bGVuID0gU01BTExfS0VZX1NJWkU7CisJCQllbHNlCisJCQkJa2V5bGVuID0gMDsKIAogCQkJLyogV3JpdGUgYWxsIDQga2V5cyAqLwogCQkJZm9yIChpID0gMDsgaSA8IE9SSU5PQ09fTUFYX0tFWVM7IGkrKykgeworCQkJCXU4IGtleVtMQVJHRV9LRVlfU0laRV0gPSB7IDAgfTsKKworCQkJCW1lbWNweShrZXksIHByaXYtPmtleXNbaV0ua2V5LAorCQkJCSAgICAgICBwcml2LT5rZXlzW2ldLmtleV9sZW4pOworCiAJCQkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCiAJCQkJCQlIRVJNRVNfUklEX0NORkRFRkFVTFRLRVkwICsgaSwKIAkJCQkJCUhFUk1FU19CWVRFU19UT19SRUNMRU4oa2V5bGVuKSwKLQkJCQkJCXByaXYtPmtleXNbaV0uZGF0YSk7CisJCQkJCQlrZXkpOwogCQkJCWlmIChlcnIpCiAJCQkJCXJldHVybiBlcnI7CiAJCQl9CkBAIC0yNTUsOCArODU2LDggQEAKIAlpbnQgYXV0aF9mbGFnOwogCWludCBlbmNfZmxhZzsKIAotCS8qIFNldHVwIFdFUCBrZXlzIGZvciBXRVAgYW5kIFdQQSAqLwotCWlmIChwcml2LT5lbmNvZGVfYWxnKQorCS8qIFNldHVwIFdFUCBrZXlzICovCisJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gT1JJTk9DT19BTEdfV0VQKQogCQlfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhwcml2KTsKIAogCWlmIChwcml2LT53ZXBfcmVzdHJpY3QpCkBAIC0yNjYsMTQgKzg2NywxNCBAQAogCiAJaWYgKHByaXYtPndwYV9lbmFibGVkKQogCQllbmNfZmxhZyA9IDI7Ci0JZWxzZSBpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkKKwllbHNlIGlmIChwcml2LT5lbmNvZGVfYWxnID09IE9SSU5PQ09fQUxHX1dFUCkKIAkJZW5jX2ZsYWcgPSAxOwogCWVsc2UKIAkJZW5jX2ZsYWcgPSAwOwogCiAJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CiAJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOiAvKiBBZ2VyZSBzdHlsZSBXRVAgKi8KLQkJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApIHsKKwkJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gT1JJTk9DT19BTEdfV0VQKSB7CiAJCQkvKiBFbmFibGUgdGhlIHNoYXJlZC1rZXkgYXV0aGVudGljYXRpb24uICovCiAJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCiAJCQkJCUhFUk1FU19SSURfQ05GQVVUSEVOVElDQVRJT05fQUdFUkUsCkBAIC0yOTgsNyArODk5LDcgQEAKIAogCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogLyogSW50ZXJzaWwgc3R5bGUgV0VQICovCiAJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDogLyogU3ltYm9sIHN0eWxlIFdFUCAqLwotCQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkgeworCQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBPUklOT0NPX0FMR19XRVApIHsKIAkJCWlmIChwcml2LT53ZXBfcmVzdHJpY3QgfHwKIAkJCSAgICAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCkpCiAJCQkJbWFzdGVyX3dlcF9mbGFnID0gSEVSTUVTX1dFUF9QUklWQUNZX0lOVk9LRUQgfApAQCAtMzE0LDcgKzkxNSw3IEBACiAJCX0gZWxzZQogCQkJbWFzdGVyX3dlcF9mbGFnID0gMDsKIAotCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpCisJCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCiAJCQltYXN0ZXJfd2VwX2ZsYWcgfD0gSEVSTUVTX1dFUF9IT1NUX0RFQ1JZUFQ7CiAKIAkJLyogTWFzdGVyIFdFUCBzZXR0aW5nIDogb24vb2ZmICovCkBAIC0zMzEsMjAgKzkzMiwyMiBAQAogfQogCiAvKiBrZXkgbXVzdCBiZSAzMiBieXRlcywgaW5jbHVkaW5nIHRoZSB0eCBhbmQgcnggTUlDIGtleXMuCi0gKiByc2MgbXVzdCBiZSA4IGJ5dGVzCi0gKiB0c2MgbXVzdCBiZSA4IGJ5dGVzIG9yIE5VTEwKKyAqIHJzYyBtdXN0IGJlIE5VTEwgb3IgdXAgdG8gOCBieXRlcworICogdHNjIG11c3QgYmUgTlVMTCBvciB1cCB0byA4IGJ5dGVzCiAgKi8KLWludCBfX29yaW5vY29faHdfc2V0X3RraXBfa2V5KGhlcm1lc190ICpodywgaW50IGtleV9pZHgsIGludCBzZXRfdHgsCi0JCQkgICAgICB1OCAqa2V5LCB1OCAqcnNjLCB1OCAqdHNjKQoraW50IF9fb3Jpbm9jb19od19zZXRfdGtpcF9rZXkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGtleV9pZHgsCisJCQkgICAgICBpbnQgc2V0X3R4LCB1OCAqa2V5LCB1OCAqcnNjLCBzaXplX3QgcnNjX2xlbiwKKwkJCSAgICAgIHU4ICp0c2MsIHNpemVfdCB0c2NfbGVuKQogewogCXN0cnVjdCB7CiAJCV9fbGUxNiBpZHg7Ci0JCXU4IHJzY1tJV19FTkNPREVfU0VRX01BWF9TSVpFXTsKKwkJdTggcnNjW09SSU5PQ09fU0VRX0xFTl07CiAJCXU4IGtleVtUS0lQX0tFWUxFTl07CiAJCXU4IHR4X21pY1tNSUNfS0VZTEVOXTsKIAkJdTggcnhfbWljW01JQ19LRVlMRU5dOwotCQl1OCB0c2NbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07CisJCXU4IHRzY1tPUklOT0NPX1NFUV9MRU5dOwogCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJ1ZjsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IHJldDsKIAlpbnQgZXJyOwogCWludCBrOwpAQCAtMzU5LDE3ICs5NjIsMjIgQEAKIAltZW1jcHkoYnVmLmtleSwga2V5LAogCSAgICAgICBzaXplb2YoYnVmLmtleSkgKyBzaXplb2YoYnVmLnR4X21pYykgKyBzaXplb2YoYnVmLnJ4X21pYykpOwogCi0JaWYgKHJzYyA9PSBOVUxMKQotCQltZW1zZXQoYnVmLnJzYywgMCwgc2l6ZW9mKGJ1Zi5yc2MpKTsKLQllbHNlCi0JCW1lbWNweShidWYucnNjLCByc2MsIHNpemVvZihidWYucnNjKSk7CisJaWYgKHJzY19sZW4gPiBzaXplb2YoYnVmLnJzYykpCisJCXJzY19sZW4gPSBzaXplb2YoYnVmLnJzYyk7CiAKLQlpZiAodHNjID09IE5VTEwpIHsKLQkJbWVtc2V0KGJ1Zi50c2MsIDAsIHNpemVvZihidWYudHNjKSk7CisJaWYgKHRzY19sZW4gPiBzaXplb2YoYnVmLnRzYykpCisJCXRzY19sZW4gPSBzaXplb2YoYnVmLnRzYyk7CisKKwltZW1zZXQoYnVmLnJzYywgMCwgc2l6ZW9mKGJ1Zi5yc2MpKTsKKwltZW1zZXQoYnVmLnRzYywgMCwgc2l6ZW9mKGJ1Zi50c2MpKTsKKworCWlmIChyc2MgIT0gTlVMTCkKKwkJbWVtY3B5KGJ1Zi5yc2MsIHJzYywgcnNjX2xlbik7CisKKwlpZiAodHNjICE9IE5VTEwpCisJCW1lbWNweShidWYudHNjLCB0c2MsIHRzY19sZW4pOworCWVsc2UKIAkJYnVmLnRzY1s0XSA9IDB4MTA7Ci0JfSBlbHNlIHsKLQkJbWVtY3B5KGJ1Zi50c2MsIHRzYywgc2l6ZW9mKGJ1Zi50c2MpKTsKLQl9CiAKIAkvKiBXYWl0IHVwdG8gMTAwbXMgZm9yIHR4IHF1ZXVlIHRvIGVtcHR5ICovCiAJZm9yIChrID0gMTAwOyBrID4gMDsgay0tKSB7CkBAIC0zOTUsNyArMTAwMyw2IEBACiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCWludCBlcnI7CiAKLQltZW1zZXQoJnByaXYtPnRraXBfa2V5W2tleV9pZHhdLCAwLCBzaXplb2YocHJpdi0+dGtpcF9rZXlba2V5X2lkeF0pKTsKIAllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCiAJCQkJICAgSEVSTUVTX1JJRF9DTkZSRU1ERUZBVUxUVEtJUEtFWV9BR0VSRSwKIAkJCQkgICBrZXlfaWR4KTsKQEAgLTU4MiwzICsxMTg5LDEyNCBAQAogCiAJcmV0dXJuIDA7CiB9CisKK2ludCBvcmlub2NvX2h3X3RyaWdnZXJfc2NhbihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJICAgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9zc2lkICpzc2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAwOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBTY2FubmluZyB3aXRoIHBvcnQgMCBkaXNhYmxlZCB3b3VsZCBmYWlsICovCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZXJyID0gLUVORVRET1dOOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJbiBtb25pdG9yIG1vZGUsIHRoZSBzY2FuIHJlc3VsdHMgYXJlIGFsd2F5cyBlbXB0eS4KKwkgKiBQcm9iZSByZXNwb25zZXMgYXJlIHBhc3NlZCB0byB0aGUgZHJpdmVyIGFzIHJlY2VpdmVkCisJICogZnJhbWVzIGFuZCBjb3VsZCBiZSBwcm9jZXNzZWQgaW4gc29mdHdhcmUuICovCisJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHByaXYtPmhhc19ob3N0c2NhbikgeworCQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwkJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJCUhFUk1FU19SSURfQ05GSE9TVFNDQU5fU1lNQk9MLAorCQkJCQkJSEVSTUVTX0hPU1RTQ0FOX1NZTUJPTF9PTkNFIHwKKwkJCQkJCUhFUk1FU19IT1NUU0NBTl9TWU1CT0xfQkNBU1QpOworCQkJYnJlYWs7CisJCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogeworCQkJX19sZTE2IHJlcVszXTsKKworCQkJcmVxWzBdID0gY3B1X3RvX2xlMTYoMHgzZmZmKTsJLyogQWxsIGNoYW5uZWxzICovCisJCQlyZXFbMV0gPSBjcHVfdG9fbGUxNigweDAwMDEpOwkvKiByYXRlIDEgTWJwcyAqLworCQkJcmVxWzJdID0gMDsJCQkvKiBBbnkgRVNTSUQgKi8KKwkJCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAorCQkJCQkJICBIRVJNRVNfUklEX0NORkhPU1RTQ0FOLCAmcmVxKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwkJCWlmIChzc2lkLT5zc2lkX2xlbiA+IDApIHsKKwkJCQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGlkYnVmOworCQkJCXNpemVfdCBsZW4gPSBzc2lkLT5zc2lkX2xlbjsKKworCQkJCWlkYnVmLmxlbiA9IGNwdV90b19sZTE2KGxlbik7CisJCQkJbWVtY3B5KGlkYnVmLnZhbCwgc3NpZC0+c3NpZCwgbGVuKTsKKworCQkJCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLAorCQkJCQkgICAgICAgSEVSTUVTX1JJRF9DTkZTQ0FOU1NJRF9BR0VSRSwKKwkJCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4obGVuICsgMiksCisJCQkJCSAgICAgICAmaWRidWYpOworCQkJfSBlbHNlCisJCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkJICAgSEVSTUVTX1JJRF9DTkZTQ0FOU1NJRF9BR0VSRSwKKwkJCQkJCSAgIDApOwkvKiBBbnkgRVNTSUQgKi8KKwkJCWlmIChlcnIpCisJCQkJYnJlYWs7CisKKwkJCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pIHsKKwkJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCQlIRVJNRVNfUklEX0NORlNDQU5DSEFOTkVMUzJHSFosCisJCQkJCQkweDdGRkYpOworCQkJCWlmIChlcnIpCisJCQkJCWdvdG8gb3V0OworCisJCQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsCisJCQkJCQkgICAgIEhFUk1FU19JTlFfQ0hBTk5FTElORk8pOworCQkJfSBlbHNlCisJCQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfU0NBTik7CisKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlCisJCWVyciA9IGhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX1NDQU4pOworCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBEaXNhc3NvY2lhdGUgZnJvbSBub2RlIHdpdGggQlNTSUQgYWRkciAqLworaW50IG9yaW5vY29faHdfZGlzYXNzb2NpYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkgICAgdTggKmFkZHIsIHUxNiByZWFzb25fY29kZSkKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKworCXN0cnVjdCB7CisJCXU4IGFkZHJbRVRIX0FMRU5dOworCQlfX2xlMTYgcmVhc29uX2NvZGU7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYnVmOworCisJLyogQ3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGJ5IFdQQSBlbmFibGVkIEFnZXJlIGZ3ICovCisJaWYgKCFwcml2LT5oYXNfd3BhKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwltZW1jcHkoYnVmLmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKKwlidWYucmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihyZWFzb25fY29kZSk7CisJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NORkRJU0FTU09DSUFURSwKKwkJCQkgICZidWYpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBvcmlub2NvX2h3X2dldF9jdXJyZW50X2Jzc2lkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJIHU4ICphZGRyKQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UQlNTSUQsCisJCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgYWRkcik7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5oCmluZGV4IGRjM2YyM2EuLjhkZjZlODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmgKQEAgLTcsNiArNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAKIC8qIEhhcmR3YXJlIEJBUHMgKi8KICNkZWZpbmUgVVNFUl9CQVAgMApAQCAtMjMsMTcgKzI0LDIyIEBACiBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlOwogc3RydWN0IGRldl9hZGRyX2xpc3Q7CiAKK2ludCBkZXRlcm1pbmVfZndfY2FwYWJpbGl0aWVzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworaW50IG9yaW5vY29faHdfcmVhZF9jYXJkX3NldHRpbmdzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIHU4ICpkZXZfYWRkcik7CitpbnQgb3Jpbm9jb19od19hbGxvY2F0ZV9maWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CiBpbnQgb3Jpbm9jb19nZXRfYml0cmF0ZW1vZGUoaW50IGJpdHJhdGUsIGludCBhdXRvbWF0aWMpOwogdm9pZCBvcmlub2NvX2dldF9yYXRlbW9kZV9jZmcoaW50IHJhdGVtb2RlLCBpbnQgKmJpdHJhdGUsIGludCAqYXV0b21hdGljKTsKIAoraW50IG9yaW5vY29faHdfcHJvZ3JhbV9yaWRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwogaW50IG9yaW5vY29faHdfZ2V0X3RraXBfaXYoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGtleSwgdTggKnRzYyk7CiBpbnQgX19vcmlub2NvX2h3X3NldF9iaXRyYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwogaW50IG9yaW5vY29faHdfZ2V0X2FjdF9iaXRyYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCAqYml0cmF0ZSk7CiBpbnQgX19vcmlub2NvX2h3X3NldF93YXAoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CiBpbnQgX19vcmlub2NvX2h3X3NldHVwX3dlcGtleXMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CiBpbnQgX19vcmlub2NvX2h3X3NldHVwX2VuYyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKLWludCBfX29yaW5vY29faHdfc2V0X3RraXBfa2V5KGhlcm1lc190ICpodywgaW50IGtleV9pZHgsIGludCBzZXRfdHgsCi0JCQkgICAgICB1OCAqa2V5LCB1OCAqcnNjLCB1OCAqdHNjKTsKK2ludCBfX29yaW5vY29faHdfc2V0X3RraXBfa2V5KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXlfaWR4LAorCQkJICAgICAgaW50IHNldF90eCwgdTggKmtleSwgdTggKnJzYywgc2l6ZV90IHJzY19sZW4sCisJCQkgICAgICB1OCAqdHNjLCBzaXplX3QgdHNjX2xlbik7CiBpbnQgb3Jpbm9jb19jbGVhcl90a2lwX2tleShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQga2V5X2lkeCk7CiBpbnQgX19vcmlub2NvX2h3X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAogCQkJCSAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCwKQEAgLTQzLDUgKzQ5LDExIEBACiBpbnQgb3Jpbm9jb19od19nZXRfZnJlcShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKIGludCBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAogCQkJICAgICAgIGludCAqbnVtcmF0ZXMsIHMzMiAqcmF0ZXMsIGludCBtYXgpOworaW50IG9yaW5vY29faHdfdHJpZ2dlcl9zY2FuKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkgICAgY29uc3Qgc3RydWN0IGNmZzgwMjExX3NzaWQgKnNzaWQpOworaW50IG9yaW5vY29faHdfZGlzYXNzb2NpYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkgICAgdTggKmFkZHIsIHUxNiByZWFzb25fY29kZSk7CitpbnQgb3Jpbm9jb19od19nZXRfY3VycmVudF9ic3NpZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCSB1OCAqYWRkcik7CiAKICNlbmRpZiAvKiBfT1JJTk9DT19IV19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uYwppbmRleCBhMzcwZTUxLi43YTMyYmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uYwpAQCAtODAsNiArODAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgpAQCAtODgsNiArODksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KIAogI2luY2x1ZGUgImhlcm1lc19yaWQuaCIKICNpbmNsdWRlICJoZXJtZXNfZGxkLmgiCkBAIC05Niw2ICs5OCw3IEBACiAjaW5jbHVkZSAibWljLmgiCiAjaW5jbHVkZSAiZncuaCIKICNpbmNsdWRlICJ3ZXh0LmgiCisjaW5jbHVkZSAiY2ZnLmgiCiAjaW5jbHVkZSAibWFpbi5oIgogCiAjaW5jbHVkZSAib3Jpbm9jby5oIgpAQCAtMTQyLDEzICsxNDUsMTEgQEAKICNkZWZpbmUgT1JJTk9DT19NSU5fTVRVCQkyNTYKICNkZWZpbmUgT1JJTk9DT19NQVhfTVRVCQkoSUVFRTgwMjExX01BWF9EQVRBX0xFTiAtIEVOQ0FQU19PVkVSSEVBRCkKIAotI2RlZmluZSBTWU1CT0xfTUFYX1ZFUl9MRU4JKDE0KQogI2RlZmluZSBNQVhfSVJRTE9PUFNfUEVSX0lSUQkxMAogI2RlZmluZSBNQVhfSVJRTE9PUFNfUEVSX0pJRkZZCSgyMDAwMC9IWikgLyogQmFzZWQgb24gYSBndWVzdGltYXRlIG9mCiAJCQkJCSAgICAqIGhvdyBtYW55IGV2ZW50cyB0aGUKIAkJCQkJICAgICogZGV2aWNlIGNvdWxkCiAJCQkJCSAgICAqIGxlZ2l0aW1hdGVseSBnZW5lcmF0ZSAqLwotI2RlZmluZSBUWF9OSUNCVUZfU0laRV9CVUcJMTU4NQkJLyogQnVnIGluIFN5bWJvbCBmaXJtd2FyZSAqLwogCiAjZGVmaW5lIERVTU1ZX0ZJRAkJMHhGRkZGCiAKQEAgLTIwNSwxMSArMjA2LDIxIEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAorc3RydWN0IG9yaW5vY29fc2Nhbl9kYXRhIHsKKwl2b2lkICpidWY7CisJc2l6ZV90IGxlbjsKKwlpbnQgdHlwZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IF9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IF9fb3Jpbm9jb191cChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK3N0YXRpYyBpbnQgX19vcmlub2NvX2Rvd24oc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitzdGF0aWMgaW50IF9fb3Jpbm9jb19jb21taXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTIxOCwxMSArMjI5LDExIEBACiB2b2lkIHNldF9wb3J0X3R5cGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKIHsKIAlzd2l0Y2ggKHByaXYtPml3X21vZGUpIHsKLQljYXNlIElXX01PREVfSU5GUkE6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQlwcml2LT5wb3J0X3R5cGUgPSAxOwogCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKIAkJYnJlYWs7Ci0JY2FzZSBJV19NT0RFX0FESE9DOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCWlmIChwcml2LT5wcmVmZXJfcG9ydDMpIHsKIAkJCXByaXYtPnBvcnRfdHlwZSA9IDM7CiAJCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKQEAgLTIzMSw3ICsyNDIsNyBAQAogCQkJcHJpdi0+Y3JlYXRlaWJzcyA9IDE7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBJV19NT0RFX01PTklUT1I6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgogCQlwcml2LT5wb3J0X3R5cGUgPSAzOwogCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKIAkJYnJlYWs7CkBAIC0yNDcsMTQgKzI1OCwxNCBAQAogCiBzdGF0aWMgaW50IG9yaW5vY29fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAKIAlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOworCWVyciA9IF9fb3Jpbm9jb191cChwcml2KTsKIAogCWlmICghZXJyKQogCQlwcml2LT5vcGVuID0gMTsKQEAgLTI2Niw3ICsyNzcsNyBAQAogCiBzdGF0aWMgaW50IG9yaW5vY29fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlpbnQgZXJyID0gMDsKIAogCS8qIFdlIG11c3RuJ3QgdXNlIG9yaW5vY29fbG9jaygpIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCB0byBiZQpAQCAtMjc2LDcgKzI4Nyw3IEBACiAKIAlwcml2LT5vcGVuID0gMDsKIAotCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7CisJZXJyID0gX19vcmlub2NvX2Rvd24ocHJpdik7CiAKIAlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCkBAIC0yODUsMTQgKzI5NiwxNCBAQAogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm9yaW5vY29fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCiAJcmV0dXJuICZwcml2LT5zdGF0czsKIH0KIAogc3RhdGljIHZvaWQgb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKSB7CkBAIC0zMDcsNyArMzE4LDcgQEAKIAogc3RhdGljIGludCBvcmlub2NvX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCiAJaWYgKChuZXdfbXR1IDwgT1JJTk9DT19NSU5fTVRVKSB8fCAobmV3X210dSA+IE9SSU5PQ09fTUFYX01UVSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzI2LDE2ICszMzcsMTggQEAKIC8qIFR4IHBhdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBvcmlub2NvX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBvcmlub2NvX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCXN0cnVjdCBvcmlub2NvX3RraXBfa2V5ICprZXk7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCWludCBlcnIgPSAwOwogCXUxNiB0eGZpZCA9IHByaXYtPnR4ZmlkOwogCXN0cnVjdCBldGhoZHIgKmVoOwogCWludCB0eF9jb250cm9sOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGRvX21pYzsKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IFR4IG9uIHN0b3BwZWQgZGV2aWNlIVxuIiwKQEAgLTM1NSw3ICszNjgsOCBAQAogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCi0JaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikgfHwgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSkgeworCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpIHx8CisJICAgIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpKSB7CiAJCS8qIE9vcHMsIHRoZSBmaXJtd2FyZSBoYXNuJ3QgZXN0YWJsaXNoZWQgYSBjb25uZWN0aW9uLAogCQkgICBzaWxlbnRseSBkcm9wIHRoZSBwYWNrZXQgKHRoaXMgc2VlbXMgdG8gYmUgdGhlCiAJCSAgIHNhZmVzdCBhcHByb2FjaCkuICovCkBAIC0zNjYsOSArMzgwLDE0IEBACiAJaWYgKHNrYi0+bGVuIDwgRVRIX0hMRU4pCiAJCWdvdG8gZHJvcDsKIAorCWtleSA9IChzdHJ1Y3Qgb3Jpbm9jb190a2lwX2tleSAqKSBwcml2LT5rZXlzW3ByaXYtPnR4X2tleV0ua2V5OworCisJZG9fbWljID0gKChwcml2LT5lbmNvZGVfYWxnID09IE9SSU5PQ09fQUxHX1RLSVApICYmCisJCSAgKGtleSAhPSBOVUxMKSk7CisKIAl0eF9jb250cm9sID0gSEVSTUVTX1RYQ1RSTF9UWF9PSyB8IEhFUk1FU19UWENUUkxfVFhfRVg7CiAKLQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApCisJaWYgKGRvX21pYykKIAkJdHhfY29udHJvbCB8PSAocHJpdi0+dHhfa2V5IDw8IEhFUk1FU19NSUNfS0VZX0lEX1NISUZUKSB8CiAJCQlIRVJNRVNfVFhDVFJMX01JQzsKIApAQCAtNDUwLDcgKzQ2OSw3IEBACiAJfQogCiAJLyogQ2FsY3VsYXRlIE1pY2hhZWwgTUlDICovCi0JaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKSB7CisJaWYgKGRvX21pYykgewogCQl1OCBtaWNfYnVmW01JQ0hBRUxfTUlDX0xFTiArIDFdOwogCQl1OCAqbWljOwogCQlzaXplX3Qgb2Zmc2V0OwpAQCAtNDY4LDggKzQ4Nyw3IEBACiAJCQlsZW4gPSBNSUNIQUVMX01JQ19MRU47CiAJCX0KIAotCQlvcmlub2NvX21pYyhwcml2LT50eF90Zm1fbWljLAotCQkJICAgIHByaXYtPnRraXBfa2V5W3ByaXYtPnR4X2tleV0udHhfbWljLAorCQlvcmlub2NvX21pYyhwcml2LT50eF90Zm1fbWljLCBrZXktPnR4X21pYywKIAkJCSAgICBlaC0+aF9kZXN0LCBlaC0+aF9zb3VyY2UsIDAgLyogcHJpb3JpdHkgKi8sCiAJCQkgICAgc2tiLT5kYXRhICsgRVRIX0hMRU4sIHNrYi0+bGVuIC0gRVRIX0hMRU4sIG1pYyk7CiAKQEAgLTUxOCw3ICs1MzYsNyBAQAogCiBzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAl1MTYgZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgQUxMT0NGSUQpOwogCiAJaWYgKGZpZCAhPSBwcml2LT50eGZpZCkgewpAQCAtNTMzLDcgKzU1MSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKIAogCXN0YXRzLT50eF9wYWNrZXRzKys7CkBAIC01NDUsNyArNTYzLDcgQEAKIAogc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3R4ZXhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwogCXUxNiBmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBUWENPTVBMRklEKTsKIAl1MTYgc3RhdHVzOwpAQCAtNjAxLDcgKzYxOSw3IEBACiAKIHN0YXRpYyB2b2lkIG9yaW5vY29fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CiAJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CiAKQEAgLTY1MCw3ICs2NjgsNyBAQAogCQkJCXN0cnVjdCBza19idWZmICpza2IsCiAJCQkJc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAogCS8qIFVzaW5nIHNweSBzdXBwb3J0IHdpdGggbG90cyBvZiBSeCBwYWNrZXRzLCBsaWtlIGluIGFuCiAJICogaW5mcmFzdHJ1Y3R1cmUgKEFQKSwgd2lsbCByZWFsbHkgc2xvdyBkb3duIGV2ZXJ5dGhpbmcsIGJlY2F1c2UKQEAgLTY4Nyw3ICs3MDUsNyBAQAogCWludCBlcnI7CiAJaW50IGxlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCkBAIC03NzgsNyArNzk2LDcgQEAKIAogc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwogCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwpAQCAtODE2LDcgKzgzNCw3IEBACiAJfQogCiAJLyogSGFuZGxlIGZyYW1lcyBpbiBtb25pdG9yIG1vZGUgKi8KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CiAJCW9yaW5vY29fcnhfbW9uaXRvcihkZXYsIHJ4ZmlkLCBkZXNjKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTAyLDcgKzkyMCw3IEBACiAJCSAgICAgICBzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2MsCiAJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CiAJdTE2IHN0YXR1cywgZmM7CiAJaW50IGxlbmd0aDsKQEAgLTkxNCw2ICs5MzIsNyBAQAogCiAJLyogQ2FsY3VsYXRlIGFuZCBjaGVjayBNSUMgKi8KIAlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUMpIHsKKwkJc3RydWN0IG9yaW5vY29fdGtpcF9rZXkgKmtleTsKIAkJaW50IGtleV9pZCA9ICgoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUNfS0VZX0lEKSA+PgogCQkJICAgICAgSEVSTUVTX01JQ19LRVlfSURfU0hJRlQpOwogCQl1OCBtaWNbTUlDSEFFTF9NSUNfTEVOXTsKQEAgLTkyNywxNCArOTQ2LDE4IEBACiAJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBNSUNIQUVMX01JQ19MRU4pOwogCQlsZW5ndGggLT0gTUlDSEFFTF9NSUNfTEVOOwogCi0JCW9yaW5vY29fbWljKHByaXYtPnJ4X3RmbV9taWMsCi0JCQkgICAgcHJpdi0+dGtpcF9rZXlba2V5X2lkXS5yeF9taWMsCi0JCQkgICAgZGVzYy0+YWRkcjEsCi0JCQkgICAgc3JjLAorCQlrZXkgPSAoc3RydWN0IG9yaW5vY29fdGtpcF9rZXkgKikgcHJpdi0+a2V5c1trZXlfaWRdLmtleTsKKworCQlpZiAoIWtleSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJlY2VpdmVkIGVuY3J5cHRlZCBmcmFtZSBmcm9tICIKKwkJCSAgICAgICAiJXBNIHVzaW5nIGtleSAlaSwgYnV0IGtleSBpcyBub3QgaW5zdGFsbGVkXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgc3JjLCBrZXlfaWQpOworCQkJZ290byBkcm9wOworCQl9CisKKwkJb3Jpbm9jb19taWMocHJpdi0+cnhfdGZtX21pYywga2V5LT5yeF9taWMsIGRlc2MtPmFkZHIxLCBzcmMsCiAJCQkgICAgMCwgLyogcHJpb3JpdHkgb3IgUW9TPyAqLwotCQkJICAgIHNrYi0+ZGF0YSwKLQkJCSAgICBza2ItPmxlbiwKLQkJCSAgICAmbWljWzBdKTsKKwkJCSAgICBza2ItPmRhdGEsIHNrYi0+bGVuLCAmbWljWzBdKTsKIAogCQlpZiAobWVtY21wKG1pYywgcnhtaWMsCiAJCQkgICBNSUNIQUVMX01JQ19MRU4pKSB7CkBAIC0xMDE2LDggKzEwMzksOCBAQAogCiBzdGF0aWMgdm9pZCBvcmlub2NvX3J4X2lzcl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICopIGRhdGE7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAJc3RydWN0IG9yaW5vY29fcnhfZGF0YSAqcnhfZGF0YSwgKnRlbXA7CiAJc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMjYwLDkgKzEyODMsODEgQEAKIAlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCBxYnVmX3NjYW4oc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgdm9pZCAqYnVmLAorCQkgICAgICBpbnQgbGVuLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19zY2FuX2RhdGEgKnNkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzZCA9IGttYWxsb2Moc2l6ZW9mKCpzZCksIEdGUF9BVE9NSUMpOworCXNkLT5idWYgPSBidWY7CisJc2QtPmxlbiA9IGxlbjsKKwlzZC0+dHlwZSA9IHR5cGU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c2Nhbl9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmc2QtPmxpc3QsICZwcml2LT5zY2FuX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnNjYW5fbG9jaywgZmxhZ3MpOworCisJc2NoZWR1bGVfd29yaygmcHJpdi0+cHJvY2Vzc19zY2FuKTsKK30KKworc3RhdGljIHZvaWQgcWFib3J0X3NjYW4oc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19zY2FuX2RhdGEgKnNkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzZCA9IGttYWxsb2Moc2l6ZW9mKCpzZCksIEdGUF9BVE9NSUMpOworCXNkLT5sZW4gPSAtMTsgLyogQWJvcnQgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zY2FuX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZzZC0+bGlzdCwgJnByaXYtPnNjYW5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c2Nhbl9sb2NrLCBmbGFncyk7CisKKwlzY2hlZHVsZV93b3JrKCZwcml2LT5wcm9jZXNzX3NjYW4pOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUsIHByb2Nlc3Nfc2Nhbik7CisJc3RydWN0IG9yaW5vY29fc2Nhbl9kYXRhICpzZCwgKnRlbXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICpidWY7CisJaW50IGxlbjsKKwlpbnQgdHlwZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zY2FuX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2QsIHRlbXAsICZwcml2LT5zY2FuX2xpc3QsIGxpc3QpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c2Nhbl9sb2NrLCBmbGFncyk7CisKKwkJYnVmID0gc2QtPmJ1ZjsKKwkJbGVuID0gc2QtPmxlbjsKKwkJdHlwZSA9IHNkLT50eXBlOworCisJCWxpc3RfZGVsKCZzZC0+bGlzdCk7CisJCWtmcmVlKHNkKTsKKworCQlpZiAobGVuID4gMCkgeworCQkJaWYgKHR5cGUgPT0gSEVSTUVTX0lOUV9DSEFOTkVMSU5GTykKKwkJCQlvcmlub2NvX2FkZF9leHRzY2FuX3Jlc3VsdChwcml2LCBidWYsIGxlbik7CisJCQllbHNlCisJCQkJb3Jpbm9jb19hZGRfaG9zdHNjYW5fcmVzdWx0cyhwcml2LCBidWYsIGxlbik7CisKKwkJCWtmcmVlKGJ1Zik7CisJCX0gZWxzZSBpZiAocHJpdi0+c2Nhbl9yZXF1ZXN0KSB7CisJCQkvKiBFaXRoZXIgYWJvcnQgb3IgY29tcGxldGUgdGhlIHNjYW4gKi8KKwkJCWNmZzgwMjExX3NjYW5fZG9uZShwcml2LT5zY2FuX3JlcXVlc3QsIChsZW4gPCAwKSk7CisJCQlwcml2LT5zY2FuX3JlcXVlc3QgPSBOVUxMOworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnNjYW5fbG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zY2FuX2xvY2ssIGZsYWdzKTsKK30KKwogc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAl1MTYgaW5mb2ZpZDsKIAlzdHJ1Y3QgewogCQlfX2xlMTYgbGVuOwpAQCAtMTMyNyw3ICsxNDIyLDcgQEAKIAkJdTE2IG5ld3N0YXR1czsKIAkJaW50IGNvbm5lY3RlZDsKIAotCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpCisJCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCiAJCQlicmVhazsKIAogCQlpZiAobGVuICE9IHNpemVvZihsaW5rc3RhdHVzKSkgewpAQCAtMTM0Niw3ICsxNDQxLDcgQEAKIAkJICogdGhlIGhvc3RzY2FuIGZyYW1lIGNhbiBiZSByZXF1ZXN0ZWQuICAqLwogCQlpZiAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0FQX09VVF9PRl9SQU5HRSAmJgogCQkgICAgcHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCAmJgotCQkgICAgcHJpdi0+aGFzX2hvc3RzY2FuICYmIHByaXYtPnNjYW5faW5wcm9ncmVzcykgeworCQkgICAgcHJpdi0+aGFzX2hvc3RzY2FuICYmIHByaXYtPnNjYW5fcmVxdWVzdCkgewogCQkJaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfSE9TVFNDQU5fU1lNQk9MKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMzcyLDcgKzE0NjcsNyBAQAogCX0KIAlicmVhazsKIAljYXNlIEhFUk1FU19JTlFfU0NBTjoKLQkJaWYgKCFwcml2LT5zY2FuX2lucHJvZ3Jlc3MgJiYgcHJpdi0+YnNzaWRfZml4ZWQgJiYKKwkJaWYgKCFwcml2LT5zY2FuX3JlcXVlc3QgJiYgcHJpdi0+YnNzaWRfZml4ZWQgJiYKIAkJICAgIHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9JTlRFUlNJTCkgewogCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+am9pbl93b3JrKTsKIAkJCWJyZWFrOwpAQCAtMTM4MiwzMCArMTQ3NywzMCBAQAogCWNhc2UgSEVSTUVTX0lOUV9IT1NUU0NBTl9TWU1CT0w6IHsKIAkJLyogUmVzdWx0IG9mIGEgc2Nhbm5pbmcuIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0CiAJCSAqIGNlbGxzIGluIHRoZSB2aWNpbml0eSAtIEplYW4gSUkgKi8KLQkJdW5pb24gaXdyZXFfZGF0YQl3cnF1OwogCQl1bnNpZ25lZCBjaGFyICpidWY7CiAKLQkJLyogU2NhbiBpcyBubyBsb25nZXIgaW4gcHJvZ3Jlc3MgKi8KLQkJcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMDsKLQogCQkvKiBTYW5pdHkgY2hlY2sgKi8KIAkJaWYgKGxlbiA+IDQwOTYpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBTY2FuIHJlc3VsdHMgdG9vIGxhcmdlICglZCBieXRlcylcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOworCQkJcWFib3J0X3NjYW4ocHJpdik7CiAJCQlicmVhazsKIAkJfQogCiAJCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3IgcmVzdWx0cyAqLwogCQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChidWYgPT0gTlVMTCkKKwkJaWYgKGJ1ZiA9PSBOVUxMKSB7CiAJCQkvKiBObyBtZW1vcnksIHNvIGNhbid0IHByaW50aygpLi4uICovCisJCQlxYWJvcnRfc2Nhbihwcml2KTsKIAkJCWJyZWFrOworCQl9CiAKIAkJLyogUmVhZCBzY2FuIGRhdGEgKi8KIAkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgKHZvaWQgKikgYnVmLCBsZW4sCiAJCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7CiAJCWlmIChlcnIpIHsKIAkJCWtmcmVlKGJ1Zik7CisJCQlxYWJvcnRfc2Nhbihwcml2KTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE0MTksMjQgKzE1MTQsMTQgQEAKIAkJfQogI2VuZGlmCS8qIE9SSU5PQ09fREVCVUcgKi8KIAotCQlpZiAob3Jpbm9jb19wcm9jZXNzX3NjYW5fcmVzdWx0cyhwcml2LCBidWYsIGxlbikgPT0gMCkgewotCQkJLyogU2VuZCBhbiBlbXB0eSBldmVudCB0byB1c2VyIHNwYWNlLgotCQkJICogV2UgZG9uJ3Qgc2VuZCB0aGUgcmVjZWl2ZWQgZGF0YSBvbiB0aGUgZXZlbnQgYmVjYXVzZQotCQkJICogaXQgd291bGQgcmVxdWlyZSB1cyB0byBkbyBjb21wbGV4IHRyYW5zY29kaW5nLCBhbmQKLQkJCSAqIHdlIHdhbnQgdG8gbWluaW1pc2UgdGhlIHdvcmsgZG9uZSBpbiB0aGUgaXJxIGhhbmRsZXIKLQkJCSAqIFVzZSBhIHJlcXVlc3QgdG8gZXh0cmFjdCB0aGUgZGF0YSAtIEplYW4gSUkgKi8KLQkJCXdycXUuZGF0YS5sZW5ndGggPSAwOwotCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKLQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOwotCQl9Ci0JCWtmcmVlKGJ1Zik7CisJCXFidWZfc2Nhbihwcml2LCBidWYsIGxlbiwgdHlwZSk7CiAJfQogCWJyZWFrOwogCWNhc2UgSEVSTUVTX0lOUV9DSEFOTkVMSU5GTzoKIAl7CiAJCXN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICpic3M7CiAKLQkJaWYgKCFwcml2LT5zY2FuX2lucHJvZ3Jlc3MpIHsKKwkJaWYgKCFwcml2LT5zY2FuX3JlcXVlc3QpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogR290IGNoYW5pbmZvIHdpdGhvdXQgc2NhbiwgIgogCQkJICAgICAgICJsZW49JWRcbiIsIGRldi0+bmFtZSwgbGVuKTsKIAkJCWJyZWFrOwpAQCAtMTQ0NCwyNSArMTUyOSwxMiBAQAogCiAJCS8qIEFuIGVtcHR5IHJlc3VsdCBpbmRpY2F0ZXMgdGhhdCB0aGUgc2NhbiBpcyBjb21wbGV0ZSAqLwogCQlpZiAobGVuID09IDApIHsKLQkJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKLQotCQkJLyogU2NhbiBpcyBubyBsb25nZXIgaW4gcHJvZ3Jlc3MgKi8KLQkJCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDA7Ci0KLQkJCXdycXUuZGF0YS5sZW5ndGggPSAwOwotCQkJd3JxdS5kYXRhLmZsYWdzID0gMDsKLQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOworCQkJcWJ1Zl9zY2FuKHByaXYsIE5VTEwsIGxlbiwgdHlwZSk7CiAJCQlicmVhazsKIAkJfQogCiAJCS8qIFNhbml0eSBjaGVjayAqLwotCQllbHNlIGlmIChsZW4gPiBzaXplb2YoKmJzcykpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiJXM6IEV4dCBzY2FuIHJlc3VsdHMgdG9vIGxhcmdlICglZCBieXRlcykuICIKLQkJCSAgICAgICAiVHJ1bmNhdGluZyByZXN1bHRzIHRvICV6ZCBieXRlcy5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBsZW4sIHNpemVvZigqYnNzKSk7Ci0JCQlsZW4gPSBzaXplb2YoKmJzcyk7Ci0JCX0gZWxzZSBpZiAobGVuIDwgKG9mZnNldG9mKHN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvLAorCQllbHNlIGlmIChsZW4gPCAob2Zmc2V0b2Yoc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8sCiAJCQkJCSAgIGRhdGEpICsgMikpIHsKIAkJCS8qIERyb3AgdGhpcyByZXN1bHQgbm93IHNvIHdlIGRvbid0IGhhdmUgdG8KIAkJCSAqIGtlZXAgY2hlY2tpbmcgbGF0ZXIgKi8KQEAgLTE0NzIsMjEgKzE1NDQsMTggQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJYnNzID0ga21hbGxvYyhzaXplb2YoKmJzcyksIEdGUF9BVE9NSUMpOworCQlic3MgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CiAJCWlmIChic3MgPT0gTlVMTCkKIAkJCWJyZWFrOwogCiAJCS8qIFJlYWQgc2NhbiBkYXRhICovCiAJCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICh2b2lkICopIGJzcywgbGVuLAogCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOwotCQlpZiAoZXJyKSB7CisJCWlmIChlcnIpCiAJCQlrZnJlZShic3MpOwotCQkJYnJlYWs7Ci0JCX0KKwkJZWxzZQorCQkJcWJ1Zl9zY2FuKHByaXYsIGJzcywgbGVuLCB0eXBlKTsKIAotCQlvcmlub2NvX2FkZF9leHRfc2Nhbl9yZXN1bHQocHJpdiwgYnNzKTsKLQotCQlrZnJlZShic3MpOwogCQlicmVhazsKIAl9CiAJY2FzZSBIRVJNRVNfSU5RX1NFQ19TVEFUX0FHRVJFOgpAQCAtMTUwMSw2ICsxNTcwLDggQEAKIAkJLyogV2UgZG9uJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgYWJvdXQgaXQgKi8KIAkJYnJlYWs7CiAJfQorCisJcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfaW5mZHJvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCkBAIC0xNTEzLDE1ICsxNTg0LDE1IEBACiAvKiBJbnRlcm5hbCBoYXJkd2FyZSBjb250cm9sIHJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWludCBfX29yaW5vY29fdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19vcmlub2NvX3VwKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGVycjsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7IC8qIGp1c3QgdG8gbWFrZSBzdXJlICovCiAKLQllcnIgPSBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKGRldik7CisJZXJyID0gX19vcmlub2NvX2NvbW1pdChwcml2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGNvbmZpZ3VyaW5nIGNhcmRcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CkBAIC0xNTQxLDExICsxNjEyLDEwIEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woX19vcmlub2NvX3VwKTsKIAotaW50IF9fb3Jpbm9jb19kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fb3Jpbm9jb19kb3duKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGVycjsKIApAQCAtMTU3MywzMSArMTY0Myw5IEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woX19vcmlub2NvX2Rvd24pOwogCi1zdGF0aWMgaW50IG9yaW5vY29fYWxsb2NhdGVfZmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQotCWVyciA9IGhlcm1lc19hbGxvY2F0ZShodywgcHJpdi0+bmljYnVmX3NpemUsICZwcml2LT50eGZpZCk7Ci0JaWYgKGVyciA9PSAtRUlPICYmIHByaXYtPm5pY2J1Zl9zaXplID4gVFhfTklDQlVGX1NJWkVfQlVHKSB7Ci0JCS8qIFRyeSB3b3JrYXJvdW5kIGZvciBvbGQgU3ltYm9sIGZpcm13YXJlIGJ1ZyAqLwotCQlwcml2LT5uaWNidWZfc2l6ZSA9IFRYX05JQ0JVRl9TSVpFX0JVRzsKLQkJZXJyID0gaGVybWVzX2FsbG9jYXRlKGh3LCBwcml2LT5uaWNidWZfc2l6ZSwgJnByaXYtPnR4ZmlkKTsKLQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmlybXdhcmUgQUxMT0MgYnVnIGRldGVjdGVkICIKLQkJICAgICAgICIob2xkIFN5bWJvbCBmaXJtd2FyZT8pLiBXb3JrIGFyb3VuZCAlc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyID8gImZhaWxlZCEiIDogIm9rLiIpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLWludCBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwogCWludCBlcnI7CiAKQEAgLTE2MDgsMjQ2ICsxNjU2LDE1IEBACiAJCQlwcml2LT5kb19md19kb3dubG9hZCA9IDA7CiAJfQogCWlmICghZXJyKQotCQllcnIgPSBvcmlub2NvX2FsbG9jYXRlX2ZpZChkZXYpOworCQllcnIgPSBvcmlub2NvX2h3X2FsbG9jYXRlX2ZpZChwcml2KTsKIAogCXJldHVybiBlcnI7CiB9Ci1FWFBPUlRfU1lNQk9MKG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKTsKIAotaW50IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGlkYnVmOwotCi0JLyogU2V0IHRoZSBNQUMgYWRkcmVzcyAqLwotCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk1BQ0FERFIsCi0JCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihFVEhfQUxFTiksIGRldi0+ZGV2X2FkZHIpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBNQUMgYWRkcmVzc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgdXAgdGhlIGxpbmsgbW9kZSAqLwotCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZQT1JUVFlQRSwKLQkJCQkgICBwcml2LT5wb3J0X3R5cGUpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBwb3J0IHR5cGVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCS8qIFNldCB0aGUgY2hhbm5lbC9mcmVxdWVuY3kgKi8KLQlpZiAocHJpdi0+Y2hhbm5lbCAhPSAwICYmIHByaXYtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSkgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GT1dOQ0hBTk5FTCwKLQkJCQkJICAgcHJpdi0+Y2hhbm5lbCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgY2hhbm5lbCAlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVyciwgcHJpdi0+Y2hhbm5lbCk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JaWYgKHByaXYtPmhhc19pYnNzKSB7Ci0JCXUxNiBjcmVhdGVpYnNzOwotCi0JCWlmICgoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpID09IDApICYmIChwcml2LT5jcmVhdGVpYnNzKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRoaXMgZmlybXdhcmUgcmVxdWlyZXMgYW4gIgotCQkJICAgICAgICJFU1NJRCBpbiBJQlNTLUFkLUhvYyBtb2RlLlxuIiwgZGV2LT5uYW1lKTsKLQkJCS8qIFdpdGggd3ZsYW5fY3MsIGluIHRoaXMgY2FzZSwgd2Ugd291bGQgY3Jhc2guCi0JCQkgKiBob3BlZnVsbHksIHRoaXMgZHJpdmVyIHdpbGwgYmVoYXZlIGJldHRlci4uLgotCQkJICogSmVhbiBJSSAqLwotCQkJY3JlYXRlaWJzcyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQljcmVhdGVpYnNzID0gcHJpdi0+Y3JlYXRlaWJzczsKLQkJfQotCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZDUkVBVEVJQlNTLAotCQkJCQkgICBjcmVhdGVpYnNzKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBDUkVBVEVJQlNTXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgdGhlIGRlc2lyZWQgQlNTSUQgKi8KLQllcnIgPSBfX29yaW5vY29faHdfc2V0X3dhcChwcml2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgQVAgYWRkcmVzc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JLyogU2V0IHRoZSBkZXNpcmVkIEVTU0lEICovCi0JaWRidWYubGVuID0gY3B1X3RvX2xlMTYoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpKTsKLQltZW1jcHkoJmlkYnVmLnZhbCwgcHJpdi0+ZGVzaXJlZF9lc3NpZCwgc2l6ZW9mKGlkYnVmLnZhbCkpOwotCS8qIFdpblhQIHdhbnRzIHBhcnRuZXIgdG8gY29uZmlndXJlIE9XTlNTSUQgZXZlbiBpbiBJQlNTIG1vZGUuIChqaW1jKSAqLwotCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTlNTSUQsCi0JCQlIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSsyKSwKLQkJCSZpZGJ1Zik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIE9XTlNTSURcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORkRFU0lSRURTU0lELAotCQkJSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkrMiksCi0JCQkmaWRidWYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBERVNJUkVEU1NJRFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgdGhlIHN0YXRpb24gbmFtZSAqLwotCWlkYnVmLmxlbiA9IGNwdV90b19sZTE2KHN0cmxlbihwcml2LT5uaWNrKSk7Ci0JbWVtY3B5KCZpZGJ1Zi52YWwsIHByaXYtPm5pY2ssIHNpemVvZihpZGJ1Zi52YWwpKTsKLQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05OQU1FLAotCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4oc3RybGVuKHByaXYtPm5pY2spKzIpLAotCQkJICAgICAgICZpZGJ1Zik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIG5pY2tuYW1lXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCBBUCBkZW5zaXR5ICovCi0JaWYgKHByaXYtPmhhc19zZW5zaXRpdml0eSkgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GU1lTVEVNU0NBTEUsCi0JCQkJCSAgIHByaXYtPmFwX2RlbnNpdHkpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgc2V0dGluZyBTWVNURU1TQ0FMRS4gIgotCQkJICAgICAgICJEaXNhYmxpbmcgc2Vuc2l0aXZpdHkgY29udHJvbFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0KLQkJCXByaXYtPmhhc19zZW5zaXRpdml0eSA9IDA7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgUlRTIHRocmVzaG9sZCAqLwotCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZSVFNUSFJFU0hPTEQsCi0JCQkJICAgcHJpdi0+cnRzX3RocmVzaCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFJUUyB0aHJlc2hvbGRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogU2V0IGZyYWdtZW50YXRpb24gdGhyZXNob2xkIG9yIE1XTyByb2J1c3RuZXNzICovCi0JaWYgKHByaXYtPmhhc19td28pCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZNV09ST0JVU1RfQUdFUkUsCi0JCQkJCSAgIHByaXYtPm13b19yb2J1c3QpOwotCWVsc2UKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORkZSQUdNRU5UQVRJT05USFJFU0hPTEQsCi0JCQkJCSAgIHByaXYtPmZyYWdfdGhyZXNoKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgZnJhZ21lbnRhdGlvblxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgYml0cmF0ZSAqLwotCWVyciA9IF9fb3Jpbm9jb19od19zZXRfYml0cmF0ZShwcml2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgYml0cmF0ZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgcG93ZXIgbWFuYWdlbWVudCAqLwotCWlmIChwcml2LT5oYXNfcG0pIHsKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlBNRU5BQkxFRCwKLQkJCQkJICAgcHJpdi0+cG1fb24pOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GTVVMVElDQVNUUkVDRUlWRSwKLQkJCQkJICAgcHJpdi0+cG1fbWNhc3QpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORk1BWFNMRUVQRFVSQVRJT04sCi0JCQkJCSAgIHByaXYtPnBtX3BlcmlvZCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GUE1IT0xET1ZFUkRVUkFUSU9OLAotCQkJCQkgICBwcml2LT5wbV90aW1lb3V0KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JLyogU2V0IHByZWFtYmxlIC0gb25seSBmb3IgU3ltYm9sIHNvIGZhci4uLiAqLwotCWlmIChwcml2LT5oYXNfcHJlYW1ibGUpIHsKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlBSRUFNQkxFX1NZTUJPTCwKLQkJCQkJICAgcHJpdi0+cHJlYW1ibGUpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHByZWFtYmxlXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgdXAgZW5jcnlwdGlvbiAqLwotCWlmIChwcml2LT5oYXNfd2VwIHx8IHByaXYtPmhhc193cGEpIHsKLQkJZXJyID0gX19vcmlub2NvX2h3X3NldHVwX2VuYyhwcml2KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgYWN0aXZhdGluZyBlbmNyeXB0aW9uXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKLQkJLyogRW5hYmxlIG1vbml0b3IgbW9kZSAqLwotCQlkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOwotCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwKLQkJCQkJICAgIEhFUk1FU19URVNUX01PTklUT1IsIDAsIE5VTEwpOwotCX0gZWxzZSB7Ci0JCS8qIERpc2FibGUgbW9uaXRvciBtb2RlICovCi0JCWRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKLQkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8Ci0JCQkJCSAgICBIRVJNRVNfVEVTVF9TVE9QLCAwLCBOVUxMKTsKLQl9Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCS8qIFNldCBwcm9taXNjdWl0eSAvIG11bHRpY2FzdCovCi0JcHJpdi0+cHJvbWlzY3VvdXMgPSAwOwotCXByaXYtPm1jX2NvdW50ID0gMDsKLQotCS8qIEZJWE1FOiB3aGF0IGFib3V0IG5ldGlmX3R4X2xvY2sgKi8KLQlfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogRklYTUU6IHJldHVybiBpbnQ/ICovCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlpbnQgZXJyID0gMDsKIAlpbnQgcHJvbWlzYywgbWNfY291bnQ7CiAKQEAgLTE4NjQsNiArMTY4MSw4IEBACiAKIAllcnIgPSBfX29yaW5vY29faHdfc2V0X211bHRpY2FzdF9saXN0KHByaXYsIGRldi0+bWNfbGlzdCwgbWNfY291bnQsCiAJCQkJCSAgICAgIHByb21pc2MpOworCisJcmV0dXJuIGVycjsKIH0KIAogLyogVGhpcyBtdXN0IGJlIGNhbGxlZCBmcm9tIHVzZXIgY29udGV4dCwgd2l0aG91dCBsb2NrcyBoZWxkIC0gdXNlCkBAIC0xODk2LDkgKzE3MTUsMTEgQEAKIAogCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CiAKLQkvKiBTY2FubmluZyBzdXBwb3J0OiBDbGVhbnVwIG9mIGRyaXZlciBzdHJ1Y3QgKi8KLQlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LCAwKTsKLQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAwOworCS8qIFNjYW5uaW5nIHN1cHBvcnQ6IE5vdGlmeSBzY2FuIGNhbmNlbGxhdGlvbiAqLworCWlmIChwcml2LT5zY2FuX3JlcXVlc3QpIHsKKwkJY2ZnODAyMTFfc2Nhbl9kb25lKHByaXYtPnNjYW5fcmVxdWVzdCwgMSk7CisJCXByaXYtPnNjYW5fcmVxdWVzdCA9IE5VTEw7CisJfQogCiAJaWYgKHByaXYtPmhhcmRfcmVzZXQpIHsKIAkJZXJyID0gKCpwcml2LT5oYXJkX3Jlc2V0KShwcml2KTsKQEAgLTE5MDksNyArMTczMCw3IEBACiAJCX0KIAl9CiAKLQllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOworCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKHByaXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb19yZXNldDogRXJyb3IgJWQgcmUtaW5pdGlhbGl6aW5nIGZpcm13YXJlXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwpAQCAtMTkyNCw3ICsxNzQ1LDcgQEAKIAkvKiBwcml2LT5vcGVuIG9yIHByaXYtPmh3X3VuYXZhaWxhYmxlIG1pZ2h0IGhhdmUgY2hhbmdlZCB3aGlsZQogCSAqIHdlIGRyb3BwZWQgdGhlIGxvY2sgKi8KIAlpZiAocHJpdi0+b3BlbiAmJiAoIXByaXYtPmh3X3VuYXZhaWxhYmxlKSkgewotCQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKKwkJZXJyID0gX19vcmlub2NvX3VwKHByaXYpOwogCQlpZiAoZXJyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3Jlc2V0OiBFcnJvciAlZCByZWVuYWJsaW5nIGNhcmRcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwpAQCAtMTk0MSw2ICsxNzYyLDY0IEBACiAJcHJpbnRrKEtFUk5fRVJSICIlczogRGV2aWNlIGhhcyBiZWVuIGRpc2FibGVkIVxuIiwgZGV2LT5uYW1lKTsKIH0KIAorc3RhdGljIGludCBfX29yaW5vY29fY29tbWl0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBvcmlub2NvX2h3X3Byb2dyYW1fcmlkcyhwcml2KTsKKworCS8qIEZJWE1FOiB3aGF0IGFib3V0IG5ldGlmX3R4X2xvY2sgKi8KKwkodm9pZCkgX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworLyogRW5zdXJlcyBjb25maWd1cmF0aW9uIGNoYW5nZXMgYXJlIGFwcGxpZWQuIE1heSByZXN1bHQgaW4gYSByZXNldC4KKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGhvbGQgcHJpdi0+bG9jaworICovCitpbnQgb3Jpbm9jb19jb21taXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKworCWlmIChwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQpIHsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7CisJCXJldHVybiAwOworCX0KKworCWVyciA9IGhlcm1lc19kaXNhYmxlX3BvcnQoaHcsIDApOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byBkaXNhYmxlIHBvcnQgIgorCQkgICAgICAgIndoaWxlIHJlY29uZmlndXJpbmcgY2FyZFxuIiwgZGV2LT5uYW1lKTsKKwkJcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0ID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gX19vcmlub2NvX2NvbW1pdChwcml2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gcmVjb25maWd1cmUgY2FyZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGhlcm1lc19lbmFibGVfcG9ydChodywgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIGVuYWJsZSBwb3J0IHdoaWxlIHJlY29uZmlndXJpbmcgY2FyZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworIG91dDoKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSZXNldHRpbmcgaW5zdGVhZC4uLlxuIiwgZGV2LT5uYW1lKTsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7CisJCWVyciA9IDA7CisJfQorCXJldHVybiBlcnI7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEludGVycnVwdCBoYW5kbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE5NjAsOCArMTgzOSw4IEBACiAKIGlycXJldHVybl90IG9yaW5vY29faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBkZXZfaWQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCWludCBjb3VudCA9IE1BWF9JUlFMT09QU19QRVJfSVJROwogCXUxNiBldnN0YXQsIGV2ZW50czsKQEAgLTIwOTYsMjI3ICsxOTc1LDEyIEBACiAvKiBJbml0aWFsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0cnVjdCBjb21wX2lkIHsKLQl1MTYgaWQsIHZhcmlhbnQsIG1ham9yLCBtaW5vcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdGF0aWMgaW5saW5lIGZ3dHlwZV90IGRldGVybWluZV9maXJtd2FyZV90eXBlKHN0cnVjdCBjb21wX2lkICpuaWNfaWQpCitpbnQgb3Jpbm9jb19pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCiB7Ci0JaWYgKG5pY19pZC0+aWQgPCAweDgwMDApCi0JCXJldHVybiBGSVJNV0FSRV9UWVBFX0FHRVJFOwotCWVsc2UgaWYgKG5pY19pZC0+aWQgPT0gMHg4MDAwICYmIG5pY19pZC0+bWFqb3IgPT0gMCkKLQkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfU1lNQk9MOwotCWVsc2UKLQkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw7Ci19Ci0KLS8qIFNldCBwcml2LT5maXJtd2FyZSB0eXBlLCBkZXRlcm1pbmUgZmlybXdhcmUgcHJvcGVydGllcyAqLwotc3RhdGljIGludCBkZXRlcm1pbmVfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgY29tcF9pZCBuaWNfaWQsIHN0YV9pZDsKLQl1bnNpZ25lZCBpbnQgZmlybXZlcjsKLQljaGFyIHRtcFtTWU1CT0xfTUFYX1ZFUl9MRU4rMV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyKSkpOwotCi0JLyogR2V0IHRoZSBoYXJkd2FyZSB2ZXJzaW9uICovCi0JZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9OSUNJRCwgJm5pY19pZCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVhZCBoYXJkd2FyZSBpZGVudGl0eTogZXJyb3IgJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbGUxNl90b19jcHVzKCZuaWNfaWQuaWQpOwotCWxlMTZfdG9fY3B1cygmbmljX2lkLnZhcmlhbnQpOwotCWxlMTZfdG9fY3B1cygmbmljX2lkLm1ham9yKTsKLQlsZTE2X3RvX2NwdXMoJm5pY19pZC5taW5vcik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBIYXJkd2FyZSBpZGVudGl0eSAlMDR4OiUwNHg6JTA0eDolMDR4XG4iLAotCSAgICAgICBkZXYtPm5hbWUsIG5pY19pZC5pZCwgbmljX2lkLnZhcmlhbnQsCi0JICAgICAgIG5pY19pZC5tYWpvciwgbmljX2lkLm1pbm9yKTsKLQotCXByaXYtPmZpcm13YXJlX3R5cGUgPSBkZXRlcm1pbmVfZmlybXdhcmVfdHlwZSgmbmljX2lkKTsKLQotCS8qIEdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiAqLwotCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsIEhFUk1FU19SSURfU1RBSUQsICZzdGFfaWQpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlYWQgc3RhdGlvbiBpZGVudGl0eTogZXJyb3IgJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbGUxNl90b19jcHVzKCZzdGFfaWQuaWQpOwotCWxlMTZfdG9fY3B1cygmc3RhX2lkLnZhcmlhbnQpOwotCWxlMTZfdG9fY3B1cygmc3RhX2lkLm1ham9yKTsKLQlsZTE2X3RvX2NwdXMoJnN0YV9pZC5taW5vcik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTdGF0aW9uIGlkZW50aXR5ICAlMDR4OiUwNHg6JTA0eDolMDR4XG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHN0YV9pZC5pZCwgc3RhX2lkLnZhcmlhbnQsCi0JICAgICAgIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yKTsKLQotCXN3aXRjaCAoc3RhX2lkLmlkKSB7Ci0JY2FzZSAweDE1OgotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQcmltYXJ5IGZpcm13YXJlIGlzIGFjdGl2ZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCWNhc2UgMHgxNGI6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFRlcnRpYXJ5IGZpcm13YXJlIGlzIGFjdGl2ZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCWNhc2UgMHgxZjoJLyogSW50ZXJzaWwsIEFnZXJlLCBTeW1ib2wgU3BlY3RydW0yNCAqLwotCWNhc2UgMHgyMToJLyogU3ltYm9sIFNwZWN0cnVtMjQgVHJpbG9neSAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBVbmtub3duIHN0YXRpb24gSUQsIHBsZWFzZSByZXBvcnRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBEZWZhdWx0IGNhcGFiaWxpdGllcyAqLwotCXByaXYtPmhhc19zZW5zaXRpdml0eSA9IDE7Ci0JcHJpdi0+aGFzX213byA9IDA7Ci0JcHJpdi0+aGFzX3ByZWFtYmxlID0gMDsKLQlwcml2LT5oYXNfcG9ydDMgPSAxOwotCXByaXYtPmhhc19pYnNzID0gMTsKLQlwcml2LT5oYXNfd2VwID0gMDsKLQlwcml2LT5oYXNfYmlnX3dlcCA9IDA7Ci0JcHJpdi0+aGFzX2FsdF90eGNudGwgPSAwOwotCXByaXYtPmhhc19leHRfc2NhbiA9IDA7Ci0JcHJpdi0+aGFzX3dwYSA9IDA7Ci0JcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAwOwotCi0JLyogRGV0ZXJtaW5lIGNhcGFiaWxpdGllcyBmcm9tIHRoZSBmaXJtd2FyZSB2ZXJzaW9uICovCi0Jc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgotCQkvKiBMdWNlbnQgV2F2ZWxhbiBJRUVFLCBMdWNlbnQgT3Jpbm9jbywgQ2FibGV0cm9uIFJvYW1BYm91dCwKLQkJICAgRUxTQSwgTWVsY28sIEhQLCBJQk0sIERlbGwgMTE1MCwgQ29tcGFxIDExMC8yMTAgKi8KLQkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKLQkJCSAiTHVjZW50L0FnZXJlICVkLiUwMmQiLCBzdGFfaWQubWFqb3IsIHN0YV9pZC5taW5vcik7Ci0KLQkJZmlybXZlciA9ICgodW5zaWduZWQgbG9uZylzdGFfaWQubWFqb3IgPDwgMTYpIHwgc3RhX2lkLm1pbm9yOwotCi0JCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHg2MDAwNik7Ci0JCXByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDQwMDIwKTsKLQkJcHJpdi0+aGFzX2JpZ193ZXAgPSAxOyAvKiBGSVhNRTogdGhpcyBpcyB3cm9uZyAtIGhvdyBkbyB3ZSB0ZWxsCi0JCQkJCSAgR29sZCBjYXJkcyBmcm9tIHRoZSBvdGhlcnM/ICovCi0JCXByaXYtPmhhc19td28gPSAoZmlybXZlciA+PSAweDYwMDAwKTsKLQkJcHJpdi0+aGFzX3BtID0gKGZpcm12ZXIgPj0gMHg0MDAyMCk7IC8qIERvbid0IHdvcmsgaW4gNy41MiA/ICovCi0JCXByaXYtPmlic3NfcG9ydCA9IDE7Ci0JCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4ODAwMGEpOwotCQlwcml2LT5kb19md19kb3dubG9hZCA9IDE7Ci0JCXByaXYtPmJyb2tlbl9tb25pdG9yID0gKGZpcm12ZXIgPj0gMHg4MDAwMCk7Ci0JCXByaXYtPmhhc19hbHRfdHhjbnRsID0gKGZpcm12ZXIgPj0gMHg5MDAwMCk7IC8qIEFsbCA5LnggPyAqLwotCQlwcml2LT5oYXNfZXh0X3NjYW4gPSAoZmlybXZlciA+PSAweDkwMDAwKTsgLyogQWxsIDkueCA/ICovCi0JCXByaXYtPmhhc193cGEgPSAoZmlybXZlciA+PSAweDkwMDJhKTsKLQkJLyogVGVzdGVkIHdpdGggQWdlcmUgZmlybXdhcmUgOgotCQkgKgkxLjE2IDsgNC4wOCA7IDQuNTIgOyA2LjA0IDsgNi4xNiA7IDcuMjggPT4gSmVhbiBJSQotCQkgKiBUZXN0ZWQgQ2FibGVUcm9uIGZpcm13YXJlIDogNC4zMiA9PiBBbnRvbiAqLwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQkvKiBTeW1ib2wgLCAzQ29tIEFpckNvbm5lY3QsIEludGVsLCBFcmljc3NvbiBXTEFOICovCi0JCS8qIEludGVsIE1BQyA6IDAwOjAyOkIzOiogKi8KLQkJLyogM0NvbSBNQUMgOiAwMDo1MDpEQToqICovCi0JCW1lbXNldCh0bXAsIDAsIHNpemVvZih0bXApKTsKLQkJLyogR2V0IHRoZSBTeW1ib2wgZmlybXdhcmUgdmVyc2lvbiAqLwotCQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLAotCQkJCSAgICAgIEhFUk1FU19SSURfU0VDT05EQVJZVkVSU0lPTl9TWU1CT0wsCi0JCQkJICAgICAgU1lNQk9MX01BWF9WRVJfTEVOLCBOVUxMLCAmdG1wKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICIlczogRXJyb3IgJWQgcmVhZGluZyBTeW1ib2wgZmlybXdhcmUgaW5mby4gIgotCQkJICAgICAgICJXaWxkbHkgZ3Vlc3NpbmcgY2FwYWJpbGl0aWVzLi4uXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCWZpcm12ZXIgPSAwOwotCQkJdG1wWzBdID0gJ1wwJzsKLQkJfSBlbHNlIHsKLQkJCS8qIFRoZSBmaXJtd2FyZSByZXZpc2lvbiBpcyBhIHN0cmluZywgdGhlIGZvcm1hdCBpcwotCQkJICogc29tZXRoaW5nIGxpa2UgOiAiVjIuMjAtMDEiLgotCQkJICogUXVpY2sgYW5kIGRpcnR5IHBhcnNpbmcuLi4gLSBKZWFuIElJCi0JCQkgKi8KLQkJCWZpcm12ZXIgPSAoKHRtcFsxXSAtICcwJykgPDwgMTYpCi0JCQkJfCAoKHRtcFszXSAtICcwJykgPDwgMTIpCi0JCQkJfCAoKHRtcFs0XSAtICcwJykgPDwgOCkKLQkJCQl8ICgodG1wWzZdIC0gJzAnKSA8PCA0KQotCQkJCXwgKHRtcFs3XSAtICcwJyk7Ci0KLQkJCXRtcFtTWU1CT0xfTUFYX1ZFUl9MRU5dID0gJ1wwJzsKLQkJfQotCi0JCXNucHJpbnRmKHByaXYtPmZ3X25hbWUsIHNpemVvZihwcml2LT5md19uYW1lKSAtIDEsCi0JCQkgIlN5bWJvbCAlcyIsIHRtcCk7Ci0KLQkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKLQkJcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4MTUwMTIpOwotCQlwcml2LT5oYXNfYmlnX3dlcCA9IChmaXJtdmVyID49IDB4MjAwMDApOwotCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDIwMDAwICYmIGZpcm12ZXIgPCAweDIyMDAwKSB8fAotCQkJICAgICAgIChmaXJtdmVyID49IDB4MjkwMDAgJiYgZmlybXZlciA8IDB4MzAwMDApIHx8Ci0JCQkgICAgICAgZmlybXZlciA+PSAweDMxMDAwOwotCQlwcml2LT5oYXNfcHJlYW1ibGUgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKLQkJcHJpdi0+aWJzc19wb3J0ID0gNDsKLQotCQkvKiBTeW1ib2wgZmlybXdhcmUgaXMgZm91bmQgb24gdmFyaW91cyBjYXJkcywgYnV0Ci0JCSAqIHRoZXJlIGhhcyBiZWVuIG5vIGF0dGVtcHQgdG8gY2hlY2sgZmlybXdhcmUKLQkJICogZG93bmxvYWQgb24gbm9uLXNwZWN0cnVtX2NzIGJhc2VkIGNhcmRzLgotCQkgKgotCQkgKiBHaXZlbiB0aGF0IHRoZSBBZ2VyZSBmaXJtd2FyZSBkb3dubG9hZCB3b3JrcwotCQkgKiBkaWZmZXJlbnRseSwgd2Ugc2hvdWxkIGF2b2lkIGRvaW5nIGEgZmlybXdhcmUKLQkJICogZG93bmxvYWQgd2l0aCB0aGUgU3ltYm9sIGFsZ29yaXRobSBvbiBub24tc3BlY3RydW0KLQkJICogY2FyZHMuCi0JCSAqCi0JCSAqIEZvciBub3cgd2UgY2FuIGlkZW50aWZ5IGEgc3BlY3RydW1fY3MgYmFzZWQgY2FyZAotCQkgKiBiZWNhdXNlIGl0IGhhcyBhIGZpcm13YXJlIHJlc2V0IGZ1bmN0aW9uLgotCQkgKi8KLQkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAocHJpdi0+c3RvcF9mdyAhPSBOVUxMKTsKLQotCQlwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQgPSAoZmlybXZlciA9PSAweDI1MDEzKSB8fAotCQkJCShmaXJtdmVyID49IDB4MzAwMDAgJiYgZmlybXZlciA8PSAweDMxMDAwKTsKLQkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHgzMTAwMSkgfHwKLQkJCQkgICAgIChmaXJtdmVyID49IDB4MjkwNTcgJiYgZmlybXZlciA8IDB4MzAwMDApOwotCQkvKiBUZXN0ZWQgd2l0aCBJbnRlbCBmaXJtd2FyZSA6IDB4MjAwMTUgPT4gSmVhbiBJSSAqLwotCQkvKiBUZXN0ZWQgd2l0aCAzQ29tIGZpcm13YXJlIDogMHgxNTAxMiAmIDB4MjIwMDEgPT4gSmVhbiBJSSAqLwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6Ci0JCS8qIEQtTGluaywgTGlua3N5cywgQWR0cm9uLCBab29tQWlyLCBhbmQgbWFueSBvdGhlcnMuLi4KLQkJICogU2Ftc3VuZywgQ29tcGFxIDEwMC8yMDAgYW5kIFByb3hpbSBhcmUgc2xpZ2h0bHkKLQkJICogZGlmZmVyZW50IGFuZCBsZXNzIHdlbGwgdGVzdGVkICovCi0JCS8qIEQtTGluayBNQUMgOiAwMDo0MDowNToqICovCi0JCS8qIEFkZHRyb24gTUFDIDogMDA6OTA6RDE6KiAqLwotCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAotCQkJICJJbnRlcnNpbCAlZC4lZC4lZCIsIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yLAotCQkJIHN0YV9pZC52YXJpYW50KTsKLQotCQlmaXJtdmVyID0gKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5tYWpvciA8PCAxNikgfAotCQkJKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5taW5vciA8PCA4KSB8IHN0YV9pZC52YXJpYW50OwotCi0JCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHgwMDA3MDApOyAvKiBGSVhNRSAqLwotCQlwcml2LT5oYXNfYmlnX3dlcCA9IHByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDAwMDgwMCk7Ci0JCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4MDAwNzAwKTsKLQkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHgwMTAzMDEpOwotCi0JCWlmIChmaXJtdmVyID49IDB4MDAwODAwKQotCQkJcHJpdi0+aWJzc19wb3J0ID0gMDsKLQkJZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBJbnRlcnNpbCBmaXJtd2FyZSBlYXJsaWVyICIKLQkJCSAgICAgICAidGhhbiB2MC44LnggLSBzZXZlcmFsIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCXByaXYtPmlic3NfcG9ydCA9IDE7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCXByaW50ayhLRVJOX0RFQlVHICIlczogRmlybXdhcmUgZGV0ZXJtaW5lZCBhcyAlc1xuIiwgZGV2LT5uYW1lLAotCSAgICAgICBwcml2LT5md19uYW1lKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gcHJpdl90b193aXBoeShwcml2KTsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGVyciA9IDA7Ci0Jc3RydWN0IGhlcm1lc19pZHN0cmluZyBuaWNrYnVmOwotCXUxNiByZWNsZW47Ci0JaW50IGxlbjsKIAogCS8qIE5vIG5lZWQgdG8gbG9jaywgdGhlIGh3X3VuYXZhaWxhYmxlIGZsYWcgaXMgYWxyZWFkeSBzZXQgaW4KIAkgKiBhbGxvY19vcmlub2NvZGV2KCkgKi8KQEAgLTIzMjUsMTUgKzE5ODksMTQgQEAKIAkvKiBJbml0aWFsaXplIHRoZSBmaXJtd2FyZSAqLwogCWVyciA9IGhlcm1lc19pbml0KGh3KTsKIAlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGluaXRpYWxpemUgZmlybXdhcmUgKGVyciA9ICVkKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZSAoZXJyID0gJWQpXG4iLAorCQkJZXJyKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gZGV0ZXJtaW5lX2Zpcm13YXJlKGRldik7CisJZXJyID0gZGV0ZXJtaW5lX2Z3X2NhcGFiaWxpdGllcyhwcml2KTsKIAlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW5jb21wYXRpYmxlIGZpcm13YXJlLCBhYm9ydGluZ1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCWRldl9lcnIoZGV2LCAiSW5jb21wYXRpYmxlIGZpcm13YXJlLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjM0NywxNTQgKzIwMTAsNDggQEAKIAkJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMDsKIAogCQkvKiBDaGVjayBmaXJtd2FyZSB2ZXJzaW9uIGFnYWluICovCi0JCWVyciA9IGRldGVybWluZV9maXJtd2FyZShkZXYpOworCQllcnIgPSBkZXRlcm1pbmVfZndfY2FwYWJpbGl0aWVzKHByaXYpOwogCQlpZiAoZXJyICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEluY29tcGF0aWJsZSBmaXJtd2FyZSwgYWJvcnRpbmdcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWRldl9lcnIoZGV2LCAiSW5jb21wYXRpYmxlIGZpcm13YXJlLCBhYm9ydGluZ1xuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAogCWlmIChwcml2LT5oYXNfcG9ydDMpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogQWQtaG9jIGRlbW8gbW9kZSBzdXBwb3J0ZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQlkZXZfaW5mbyhkZXYsICJBZC1ob2MgZGVtbyBtb2RlIHN1cHBvcnRlZFxuIik7CiAJaWYgKHByaXYtPmhhc19pYnNzKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElFRUUgc3RhbmRhcmQgSUJTUyBhZC1ob2MgbW9kZSBzdXBwb3J0ZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCWlmIChwcml2LT5oYXNfd2VwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogV0VQIHN1cHBvcnRlZCwgJXMtYml0IGtleVxuIiwgZGV2LT5uYW1lLAotCQkgICAgICAgcHJpdi0+aGFzX2JpZ193ZXAgPyAiMTA0IiA6ICI0MCIpOwotCX0KKwkJZGV2X2luZm8oZGV2LCAiSUVFRSBzdGFuZGFyZCBJQlNTIGFkLWhvYyBtb2RlIHN1cHBvcnRlZFxuIik7CisJaWYgKHByaXYtPmhhc193ZXApCisJCWRldl9pbmZvKGRldiwgIldFUCBzdXBwb3J0ZWQsICVzLWJpdCBrZXlcbiIsCisJCQkgcHJpdi0+aGFzX2JpZ193ZXAgPyAiMTA0IiA6ICI0MCIpOwogCWlmIChwcml2LT5oYXNfd3BhKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogV1BBLVBTSyBzdXBwb3J0ZWRcbiIsIGRldi0+bmFtZSk7CisJCWRldl9pbmZvKGRldiwgIldQQS1QU0sgc3VwcG9ydGVkXG4iKTsKIAkJaWYgKG9yaW5vY29fbWljX2luaXQocHJpdikpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBzZXR1cCBNSUMgY3J5cHRvICIKLQkJCSAgICAgICAiYWxnb3JpdGhtLiBEaXNhYmxpbmcgV1BBIHN1cHBvcnRcbiIsIGRldi0+bmFtZSk7CisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzZXR1cCBNSUMgY3J5cHRvIGFsZ29yaXRobS4gIgorCQkJCSJEaXNhYmxpbmcgV1BBIHN1cHBvcnRcbiIpOwogCQkJcHJpdi0+aGFzX3dwYSA9IDA7CiAJCX0KIAl9CiAKLQkvKiBOb3cgd2UgaGF2ZSB0aGUgZmlybXdhcmUgY2FwYWJpbGl0aWVzLCBhbGxvY2F0ZSBhcHByb3BpYXRlCi0JICogc2l6ZWQgc2NhbiBidWZmZXJzICovCi0JaWYgKG9yaW5vY29fYnNzX2RhdGFfYWxsb2NhdGUocHJpdikpCisJZXJyID0gb3Jpbm9jb19od19yZWFkX2NhcmRfc2V0dGluZ3MocHJpdiwgd2lwaHktPnBlcm1fYWRkcik7CisJaWYgKGVycikKIAkJZ290byBvdXQ7Ci0Jb3Jpbm9jb19ic3NfZGF0YV9pbml0KHByaXYpOwogCi0JLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLwotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTUFDQUREUiwKLQkJCSAgICAgIEVUSF9BTEVOLCBOVUxMLCBkZXYtPmRldl9hZGRyKTsKKwllcnIgPSBvcmlub2NvX2h3X2FsbG9jYXRlX2ZpZChwcml2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gcmVhZCBNQUMgYWRkcmVzcyFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBOSUMgYnVmZmVyIVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCXByaW50ayhLRVJOX0RFQlVHICIlczogTUFDIGFkZHJlc3MgJXBNXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGRldi0+ZGV2X2FkZHIpOwotCi0JLyogR2V0IHRoZSBzdGF0aW9uIG5hbWUgKi8KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk5BTUUsCi0JCQkgICAgICBzaXplb2Yobmlja2J1ZiksICZyZWNsZW4sICZuaWNrYnVmKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIHN0YXRpb24gbmFtZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAobmlja2J1Zi5sZW4pCi0JCWxlbiA9IG1pbihJV19FU1NJRF9NQVhfU0laRSwgKGludClsZTE2X3RvX2NwdShuaWNrYnVmLmxlbikpOwotCWVsc2UKLQkJbGVuID0gbWluKElXX0VTU0lEX01BWF9TSVpFLCAyICogcmVjbGVuKTsKLQltZW1jcHkocHJpdi0+bmljaywgJm5pY2tidWYudmFsLCBsZW4pOwotCXByaXYtPm5pY2tbbGVuXSA9ICdcMCc7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFN0YXRpb24gbmFtZSBcIiVzXCJcbiIsIGRldi0+bmFtZSwgcHJpdi0+bmljayk7Ci0KLQllcnIgPSBvcmlub2NvX2FsbG9jYXRlX2ZpZChkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIE5JQyBidWZmZXIhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogR2V0IGFsbG93ZWQgY2hhbm5lbHMgKi8KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DSEFOTkVMTElTVCwKLQkJCQkgICZwcml2LT5jaGFubmVsX21hc2spOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgY2hhbm5lbCBsaXN0IVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEdldCBpbml0aWFsIEFQIGRlbnNpdHkgKi8KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZTWVNURU1TQ0FMRSwKLQkJCQkgICZwcml2LT5hcF9kZW5zaXR5KTsKLQlpZiAoZXJyIHx8IHByaXYtPmFwX2RlbnNpdHkgPCAxIHx8IHByaXYtPmFwX2RlbnNpdHkgPiAzKQotCQlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAwOwotCi0JLyogR2V0IGluaXRpYWwgUlRTIHRocmVzaG9sZCAqLwotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlJUU1RIUkVTSE9MRCwKLQkJCQkgICZwcml2LT5ydHNfdGhyZXNoKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIFJUUyB0aHJlc2hvbGQhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogR2V0IGluaXRpYWwgZnJhZ21lbnRhdGlvbiBzZXR0aW5ncyAqLwotCWlmIChwcml2LT5oYXNfbXdvKQotCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKLQkJCQkJICAmcHJpdi0+bXdvX3JvYnVzdCk7Ci0JZWxzZQotCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORkZSQUdNRU5UQVRJT05USFJFU0hPTEQsCi0JCQkJCSAgJnByaXYtPmZyYWdfdGhyZXNoKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIGZyYWdtZW50YXRpb24gc2V0dGluZ3MhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogUG93ZXIgbWFuYWdlbWVudCBzZXR1cCAqLwotCWlmIChwcml2LT5oYXNfcG0pIHsKLQkJcHJpdi0+cG1fb24gPSAwOwotCQlwcml2LT5wbV9tY2FzdCA9IDE7Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwKLQkJCQkJICAmcHJpdi0+cG1fcGVyaW9kKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgcG93ZXIgbWFuYWdlbWVudCBwZXJpb2QhXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwKLQkJCQkJICAmcHJpdi0+cG1fdGltZW91dCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIHBvd2VyIG1hbmFnZW1lbnQgdGltZW91dCFcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JLyogUHJlYW1ibGUgc2V0dXAgKi8KLQlpZiAocHJpdi0+aGFzX3ByZWFtYmxlKSB7Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GUFJFQU1CTEVfU1lNQk9MLAotCQkJCQkgICZwcml2LT5wcmVhbWJsZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9Ci0KIAkvKiBTZXQgdXAgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLwotCXByaXYtPml3X21vZGUgPSBJV19NT0RFX0lORlJBOworCXByaXYtPml3X21vZGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOwogCS8qIEJ5IGRlZmF1bHQgdXNlIElFRUUvSUJTUyBhZC1ob2MgbW9kZSBpZiB3ZSBoYXZlIGl0ICovCiAJcHJpdi0+cHJlZmVyX3BvcnQzID0gcHJpdi0+aGFzX3BvcnQzICYmICghcHJpdi0+aGFzX2lic3MpOwogCXNldF9wb3J0X3R5cGUocHJpdik7CiAJcHJpdi0+Y2hhbm5lbCA9IDA7IC8qIHVzZSBmaXJtd2FyZSBkZWZhdWx0ICovCiAKIAlwcml2LT5wcm9taXNjdW91cyA9IDA7Ci0JcHJpdi0+ZW5jb2RlX2FsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKKwlwcml2LT5lbmNvZGVfYWxnID0gT1JJTk9DT19BTEdfTk9ORTsKIAlwcml2LT50eF9rZXkgPSAwOwogCXByaXYtPndwYV9lbmFibGVkID0gMDsKIAlwcml2LT50a2lwX2NtX2FjdGl2ZSA9IDA7CkBAIC0yNTAyLDIwICsyMDU5LDI1IEBACiAJcHJpdi0+d3BhX2llX2xlbiA9IDA7CiAJcHJpdi0+d3BhX2llID0gTlVMTDsKIAorCWlmIChvcmlub2NvX3dpcGh5X3JlZ2lzdGVyKHdpcGh5KSkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKIAkvKiBNYWtlIHRoZSBoYXJkd2FyZSBhdmFpbGFibGUsIGFzIGxvbmcgYXMgaXQgaGFzbid0IGJlZW4KIAkgKiByZW1vdmVkIGVsc2V3aGVyZSAoZS5nLiBieSBQQ01DSUEgaG90IHVucGx1ZykgKi8KIAlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlwcml2LT5od191bmF2YWlsYWJsZS0tOwogCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlYWR5XG4iLCBkZXYtPm5hbWUpOworCWRldl9kYmcoZGV2LCAiUmVhZHlcbiIpOwogCiAgb3V0OgogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKG9yaW5vY29faW5pdCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgb3Jpbm9jb19uZXRkZXZfb3BzID0gewotCS5uZG9faW5pdAkJPSBvcmlub2NvX2luaXQsCiAJLm5kb19vcGVuCQk9IG9yaW5vY29fb3BlbiwKIAkubmRvX3N0b3AJCT0gb3Jpbm9jb19zdG9wLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBvcmlub2NvX3htaXQsCkBAIC0yNTI3LDQwICsyMDg5LDY0IEBACiAJLm5kb19nZXRfc3RhdHMJCT0gb3Jpbm9jb19nZXRfc3RhdHMsCiB9OwogCi1zdHJ1Y3QgbmV0X2RldmljZQorLyogQWxsb2NhdGUgcHJpdmF0ZSBkYXRhLgorICoKKyAqIFRoaXMgZHJpdmVyIGhhcyBhIG51bWJlciBvZiBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCBpdAorICogIG5ldGRldiAtIE5ldCBkZXZpY2Ugc3RydWN0dXJlIGZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlCisgKiAgd2lwaHkgLSBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIHdpcmVsZXNzIHBoeQorICogIHdpcmVsZXNzX2RldiAod2RldikgLSBzdHJ1Y3R1cmUgZm9yIGVhY2ggd2lyZWxlc3MgaW50ZXJmYWNlCisgKiAgaHcgLSBzdHJ1Y3R1cmUgZm9yIGhlcm1lcyBjaGlwIGluZm8KKyAqICBjYXJkIC0gY2FyZCBzcGVjaWZpYyBzdHJ1Y3R1cmUgZm9yIHVzZSBieSB0aGUgY2FyZCBkcml2ZXIKKyAqICAgICAgICAgKGFpcnBvcnQsIG9yaW5vY29fY3MpCisgKiAgcHJpdiAtIG9yaW5vY28gcHJpdmF0ZSBkYXRhCisgKiAgZGV2aWNlIC0gZ2VuZXJpYyBsaW51eCBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogICstLS0tLS0tLS0rICAgICstLS0tLS0tLS0rCisgKiAgfCAgd2lwaHkgIHwgICAgfCBuZXRkZXYgIHwKKyAqICB8ICstLS0tLS0tKyAgICB8ICstLS0tLS0tKworICogIHwgfCBwcml2ICB8ICAgIHwgfCB3ZGV2ICB8CisgKiAgfCB8ICstLS0tLSsgICAgKy0rLS0tLS0tLSsKKyAqICB8IHwgfCBodyAgfAorICogIHwgKy0rLS0tLS0rCisgKiAgfCB8IGNhcmQgIHwKKyAqICArLSstLS0tLS0tKworICoKKyAqIHByaXYgaGFzIGEgbGluayB0byBuZXRkZXYgYW5kIGRldmljZQorICogd2RldiBoYXMgYSBsaW5rIHRvIHdpcGh5CisgKi8KK3N0cnVjdCBvcmlub2NvX3ByaXZhdGUKICphbGxvY19vcmlub2NvZGV2KGludCBzaXplb2ZfY2FyZCwKIAkJICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCiAJCSAgaW50ICgqaGFyZF9yZXNldCkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqKSwKIAkJICBpbnQgKCpzdG9wX2Z3KShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICosIGludCkpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CiAKLQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSkgKyBzaXplb2ZfY2FyZCk7Ci0JaWYgKCFkZXYpCisJLyogYWxsb2NhdGUgd2lwaHkKKwkgKiBOT1RFOiBXZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgdmlydHVhbCBpbnRlcmZhY2UKKwkgKiAgICAgICBidXQgdGhpcyBtYXkgY2hhbmdlIHdoZW4gbW9uaXRvciBtb2RlIGlzIGFkZGVkCisJICovCisJd2lwaHkgPSB3aXBoeV9uZXcoJm9yaW5vY29fY2ZnX29wcywKKwkJCSAgc2l6ZW9mKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUpICsgc2l6ZW9mX2NhcmQpOworCWlmICghd2lwaHkpCiAJCXJldHVybiBOVUxMOwotCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXByaXYtPm5kZXYgPSBkZXY7CisKKwlwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJcHJpdi0+ZGV2ID0gZGV2aWNlOworCiAJaWYgKHNpemVvZl9jYXJkKQogCQlwcml2LT5jYXJkID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcHJpdgogCQkJCSAgICAgICsgc2l6ZW9mKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUpKTsKIAllbHNlCiAJCXByaXYtPmNhcmQgPSBOVUxMOwotCXByaXYtPmRldiA9IGRldmljZTsKIAotCS8qIFNldHVwIC8gb3ZlcnJpZGUgbmV0X2RldmljZSBmaWVsZHMgKi8KLQlkZXYtPm5ldGRldl9vcHMgPSAmb3Jpbm9jb19uZXRkZXZfb3BzOwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBIWjsgLyogMSBzZWNvbmQgdGltZW91dCAqLwotCWRldi0+ZXRodG9vbF9vcHMgPSAmb3Jpbm9jb19ldGh0b29sX29wczsKLQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJm9yaW5vY29faGFuZGxlcl9kZWY7CisJb3Jpbm9jb193aXBoeV9pbml0KHdpcGh5KTsKKwogI2lmZGVmIFdJUkVMRVNTX1NQWQogCXByaXYtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmcHJpdi0+c3B5X2RhdGE7Ci0JZGV2LT53aXJlbGVzc19kYXRhID0gJnByaXYtPndpcmVsZXNzX2RhdGE7CiAjZW5kaWYKIAotCS8qIFJlc2VydmUgc3BhY2UgaW4gc2tiIGZvciB0aGUgU05BUCBoZWFkZXIgKi8KLQlkZXYtPmhhcmRfaGVhZGVyX2xlbiArPSBFTkNBUFNfT1ZFUkhFQUQ7Ci0KIAkvKiBTZXQgdXAgZGVmYXVsdCBjYWxsYmFja3MgKi8KIAlwcml2LT5oYXJkX3Jlc2V0ID0gaGFyZF9yZXNldDsKIAlwcml2LT5zdG9wX2Z3ID0gc3RvcF9mdzsKQEAgLTI1NzYsOSArMjE2MiwxMiBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnJ4X2xpc3QpOwogCXRhc2tsZXRfaW5pdCgmcHJpdi0+cnhfdGFza2xldCwgb3Jpbm9jb19yeF9pc3JfdGFza2xldCwKLQkJICAgICAodW5zaWduZWQgbG9uZykgZGV2KTsKKwkJICAgICAodW5zaWduZWQgbG9uZykgcHJpdik7CiAKLQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5zY2FuX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5zY2FuX2xpc3QpOworCUlOSVRfV09SSygmcHJpdi0+cHJvY2Vzc19zY2FuLCBvcmlub2NvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKTsKKwogCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IDB4ZmZmZjsKIAogI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKQEAgLTI1ODksMTQgKzIxNzgsOTEgQEAKIAkvKiBSZWdpc3RlciBQTSBub3RpZmllcnMgKi8KIAlvcmlub2NvX3JlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpOwogCi0JcmV0dXJuIGRldjsKKwlyZXR1cm4gcHJpdjsKIH0KIEVYUE9SVF9TWU1CT0woYWxsb2Nfb3Jpbm9jb2Rldik7CiAKLXZvaWQgZnJlZV9vcmlub2NvZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisvKiBXZSBjYW4gb25seSBzdXBwb3J0IGEgc2luZ2xlIGludGVyZmFjZS4gV2UgcHJvdmlkZSBhIHNlcGFyYXRlCisgKiBmdW5jdGlvbiB0byBzZXQgaXQgdXAgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBoYXJkd2FyZQorICogaW5pdGlhbGlzYXRpb24gYW5kIGludGVyZmFjZSBzZXR1cC4KKyAqCisgKiBUaGUgYmFzZV9hZGRyIGFuZCBpcnEgcGFyYW1ldGVycyBhcmUgcGFzc2VkIG9uIHRvIG5ldGRldiBmb3IgdXNlCisgKiB3aXRoIFNJT0NHSUZNQVAuCisgKi8KK2ludCBvcmlub2NvX2lmX2FkZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkgICB1bnNpZ25lZCBsb25nIGJhc2VfYWRkciwKKwkJICAgdW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gcHJpdl90b193aXBoeShwcml2KTsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IHJldDsKKworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgd2lyZWxlc3NfZGV2KSk7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBJbml0aWFsaXNlIHdpcmVsZXNzX2RldiAqLworCXdkZXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXdkZXYtPndpcGh5ID0gd2lwaHk7CisJd2Rldi0+aWZ0eXBlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKworCS8qIFNldHVwIC8gb3ZlcnJpZGUgbmV0X2RldmljZSBmaWVsZHMgKi8KKwlkZXYtPmllZWU4MDIxMV9wdHIgPSB3ZGV2OworCWRldi0+bmV0ZGV2X29wcyA9ICZvcmlub2NvX25ldGRldl9vcHM7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOyAvKiAxIHNlY29uZCB0aW1lb3V0ICovCisJZGV2LT5ldGh0b29sX29wcyA9ICZvcmlub2NvX2V0aHRvb2xfb3BzOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmb3Jpbm9jb19oYW5kbGVyX2RlZjsKKyNpZmRlZiBXSVJFTEVTU19TUFkKKwlkZXYtPndpcmVsZXNzX2RhdGEgPSAmcHJpdi0+d2lyZWxlc3NfZGF0YTsKKyNlbmRpZgorCS8qIHdlIHVzZSB0aGUgZGVmYXVsdCBldGhfbWFjX2FkZHIgZm9yIHNldHRpbmcgdGhlIE1BQyBhZGRyICovCisKKwkvKiBSZXNlcnZlIHNwYWNlIGluIHNrYiBmb3IgdGhlIFNOQVAgaGVhZGVyICovCisJZGV2LT5oYXJkX2hlYWRlcl9sZW4gKz0gRU5DQVBTX09WRVJIRUFEOworCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCB3aXBoeS0+cGVybV9hZGRyLCBFVEhfQUxFTik7CisKKwlkZXYtPmJhc2VfYWRkciA9IGJhc2VfYWRkcjsKKwlkZXYtPmlycSA9IGlycTsKKworCVNFVF9ORVRERVZfREVWKGRldiwgcHJpdi0+ZGV2KTsKKwlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlwcml2LT5uZGV2ID0gZGV2OworCisJLyogUmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLworCWRldl9kYmcocHJpdi0+ZGV2LCAiUmVnaXN0ZXJyZWQgaW50ZXJmYWNlICVzLlxuIiwgZGV2LT5uYW1lKTsKKworCXJldHVybiAwOworCisgZmFpbDoKKwlmcmVlX25ldGRldihkZXYpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG9yaW5vY29faWZfYWRkKTsKKwordm9pZCBvcmlub2NvX2lmX2RlbChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCisJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlmcmVlX25ldGRldihkZXYpOworfQorRVhQT1JUX1NZTUJPTChvcmlub2NvX2lmX2RlbCk7CisKK3ZvaWQgZnJlZV9vcmlub2NvZGV2KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHByaXZfdG9fd2lwaHkocHJpdik7CiAJc3RydWN0IG9yaW5vY29fcnhfZGF0YSAqcnhfZGF0YSwgKnRlbXA7CisJc3RydWN0IG9yaW5vY29fc2Nhbl9kYXRhICpzZCwgKnNkdGVtcDsKKworCXdpcGh5X3VucmVnaXN0ZXIod2lwaHkpOwogCiAJLyogSWYgdGhlIHRhc2tsZXQgaXMgc2NoZWR1bGVkIHdoZW4gd2UgY2FsbCB0YXNrbGV0X2tpbGwgaXQKIAkgKiB3aWxsIHJ1biBvbmUgZmluYWwgdGltZS4gSG93ZXZlciB0aGUgdGFza2xldCB3aWxsIG9ubHkKQEAgLTI2MTIsMjEgKzIyNzgsODAgQEAKIAkJa2ZyZWUocnhfZGF0YSk7CiAJfQogCisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+cHJvY2Vzc19zY2FuKTsKKwkvKiBFeHBsaWNpdGx5IGRyYWluIHByaXYtPnNjYW5fbGlzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZCwgc2R0ZW1wLCAmcHJpdi0+c2Nhbl9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZzZC0+bGlzdCk7CisKKwkJaWYgKChzZC0+bGVuID4gMCkgJiYgc2QtPmJ1ZikKKwkJCWtmcmVlKHNkLT5idWYpOworCQlrZnJlZShzZCk7CisJfQorCiAJb3Jpbm9jb191bnJlZ2lzdGVyX3BtX25vdGlmaWVyKHByaXYpOwogCW9yaW5vY29fdW5jYWNoZV9mdyhwcml2KTsKIAogCXByaXYtPndwYV9pZV9sZW4gPSAwOwogCWtmcmVlKHByaXYtPndwYV9pZSk7CiAJb3Jpbm9jb19taWNfZnJlZShwcml2KTsKLQlvcmlub2NvX2Jzc19kYXRhX2ZyZWUocHJpdik7Ci0JZnJlZV9uZXRkZXYoZGV2KTsKKwl3aXBoeV9mcmVlKHdpcGh5KTsKIH0KIEVYUE9SVF9TWU1CT0woZnJlZV9vcmlub2NvZGV2KTsKIAoraW50IG9yaW5vY29fdXAoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJZXJyID0gb3Jpbm9jb19yZWluaXRfZmlybXdhcmUocHJpdik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZS1pbml0aWFsaXppbmcgZmlybXdhcmVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKKworCWlmIChwcml2LT5vcGVuICYmICFwcml2LT5od191bmF2YWlsYWJsZSkgeworCQllcnIgPSBfX29yaW5vY29fdXAocHJpdik7CisJCWlmIChlcnIpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZXN0YXJ0aW5nIGNhcmRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCX0KKworZXhpdDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wob3Jpbm9jb191cCk7CisKK3ZvaWQgb3Jpbm9jb19kb3duKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwllcnIgPSBfX29yaW5vY29fZG93bihwcml2KTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgZG93bmluZyBpbnRlcmZhY2VcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisJcHJpdi0+aHdfdW5hdmFpbGFibGUrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKG9yaW5vY29fZG93bik7CisKIHN0YXRpYyB2b2lkIG9yaW5vY29fZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAogCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBEUklWRVJfTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikgLSAxKTsKIAlzdHJuY3B5KGluZm8tPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikgLSAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmgKaW5kZXggYWYyYmFlNC4uMjFhYjM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmgKQEAgLTI5LDEwICsyOSw5IEBACiBzdHJ1Y3Qgd29ya19zdHJ1Y3Q7CiAKIHZvaWQgc2V0X3BvcnRfdHlwZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKLWludCBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IG9yaW5vY29fY29tbWl0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwogdm9pZCBvcmlub2NvX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKLQogLyogSW5mb3JtYXRpb24gZWxlbWVudCBoZWxwZXJzIC0gZmluZCBhIGhvbWUgZm9yIHRoZXNlLi4uICovCiBzdGF0aWMgaW5saW5lIHU4ICpvcmlub2NvX2dldF9pZSh1OCAqZGF0YSwgc2l6ZV90IGxlbiwKIAkJCQkgZW51bSBpZWVlODAyMTFfZWlkIGVpZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmgKaW5kZXggOGU1YTcyYy4uOWFjNmYxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAKICNpbmNsdWRlICJoZXJtZXMuaCIKIApAQCAtMjQsNiArMjUsNyBAQAogCiAjZGVmaW5lIE1BWF9TQ0FOX0xFTgkJNDA5NgogCisjZGVmaW5lIE9SSU5PQ09fU0VRX0xFTgkJOAogI2RlZmluZSBPUklOT0NPX01BWF9LRVlfU0laRQkxNAogI2RlZmluZSBPUklOT0NPX01BWF9LRVlTCTQKIApAQCAtNDEsMjQgKzQzLDE4IEBACiAJdTggcnhfbWljW01JQ19LRVlMRU5dOwogfTsKIAorZW51bSBvcmlub2NvX2FsZyB7CisJT1JJTk9DT19BTEdfTk9ORSwKKwlPUklOT0NPX0FMR19XRVAsCisJT1JJTk9DT19BTEdfVEtJUAorfTsKKwogdHlwZWRlZiBlbnVtIHsKIAlGSVJNV0FSRV9UWVBFX0FHRVJFLAogCUZJUk1XQVJFX1RZUEVfSU5URVJTSUwsCiAJRklSTVdBUkVfVFlQRV9TWU1CT0wKIH0gZnd0eXBlX3Q7CiAKLXN0cnVjdCBic3NfZWxlbWVudCB7Ci0JdW5pb24gaGVybWVzX3NjYW5faW5mbyBic3M7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQotc3RydWN0IHhic3NfZWxlbWVudCB7Ci0Jc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gYnNzOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KIHN0cnVjdCBmaXJtd2FyZTsKIAogc3RydWN0IG9yaW5vY29fcHJpdmF0ZSB7CkBAIC02Nyw2ICs2MywxMCBAQAogCWludCAoKmhhcmRfcmVzZXQpKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKik7CiAJaW50ICgqc3RvcF9mdykoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqLCBpbnQpOwogCisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1sxNF07CisJdTMyIGNpcGhlcl9zdWl0ZXNbM107CisKIAkvKiBTeW5jaHJvbmlzYXRpb24gc3R1ZmYgKi8KIAlzcGlubG9ja190IGxvY2s7CiAJaW50IGh3X3VuYXZhaWxhYmxlOwpAQCAtMTE0LDEyICsxMTQsMTQgQEAKIAl1bnNpZ25lZCBpbnQgZG9fZndfZG93bmxvYWQ6MTsKIAl1bnNpZ25lZCBpbnQgYnJva2VuX2Rpc2FibGVwb3J0OjE7CiAJdW5zaWduZWQgaW50IGJyb2tlbl9tb25pdG9yOjE7CisJdW5zaWduZWQgaW50IHByZWZlcl9wb3J0MzoxOwogCiAJLyogQ29uZmlndXJhdGlvbiBwYXJhbWF0ZXJzICovCi0JdTMyIGl3X21vZGU7Ci0JaW50IHByZWZlcl9wb3J0MzsKLQl1MTYgZW5jb2RlX2FsZywgd2VwX3Jlc3RyaWN0LCB0eF9rZXk7Ci0Jc3RydWN0IG9yaW5vY29fa2V5IGtleXNbT1JJTk9DT19NQVhfS0VZU107CisJZW51bSBubDgwMjExX2lmdHlwZSBpd19tb2RlOworCWVudW0gb3Jpbm9jb19hbGcgZW5jb2RlX2FsZzsKKwl1MTYgd2VwX3Jlc3RyaWN0LCB0eF9rZXk7CisJc3RydWN0IGtleV9wYXJhbXMga2V5c1tPUklOT0NPX01BWF9LRVlTXTsKKwogCWludCBiaXRyYXRlbW9kZTsKIAljaGFyIG5pY2tbSVdfRVNTSURfTUFYX1NJWkUrMV07CiAJY2hhciBkZXNpcmVkX2Vzc2lkW0lXX0VTU0lEX01BWF9TSVpFKzFdOwpAQCAtMTQwLDE4ICsxNDIsMTUgQEAKIAlpbnQgcHJvbWlzY3VvdXMsIG1jX2NvdW50OwogCiAJLyogU2Nhbm5pbmcgc3VwcG9ydCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgYnNzX2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCBic3NfZnJlZV9saXN0OwotCXZvaWQgKmJzc194YnNzX2RhdGE7Ci0KLQlpbnQJc2Nhbl9pbnByb2dyZXNzOwkvKiBTY2FuIHBlbmRpbmcuLi4gKi8KLQl1MzIJc2Nhbl9tb2RlOwkJLyogVHlwZSBvZiBzY2FuIGRvbmUgKi8KKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcXVlc3Q7CisJc3RydWN0IHdvcmtfc3RydWN0IHByb2Nlc3Nfc2NhbjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNjYW5fbGlzdDsKKwlzcGlubG9ja190IHNjYW5fbG9jazsgLyogcHJvdGVjdHMgdGhlIHNjYW4gbGlzdCAqLwogCiAJLyogV1BBIHN1cHBvcnQgKi8KIAl1OCAqd3BhX2llOwogCWludCB3cGFfaWVfbGVuOwogCi0Jc3RydWN0IG9yaW5vY29fdGtpcF9rZXkgdGtpcF9rZXlbT1JJTk9DT19NQVhfS0VZU107CiAJc3RydWN0IGNyeXB0b19oYXNoICpyeF90Zm1fbWljOwogCXN0cnVjdCBjcnlwdG9faGFzaCAqdHhfdGZtX21pYzsKIApAQCAtMTgyLDE0ICsxODEsMTggQEAKIC8qIEV4cG9ydGVkIHByb3RvdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19vcmlub2NvZGV2KAorZXh0ZXJuIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKmFsbG9jX29yaW5vY29kZXYoCiAJaW50IHNpemVvZl9jYXJkLCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCiAJaW50ICgqaGFyZF9yZXNldCkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqKSwKIAlpbnQgKCpzdG9wX2Z3KShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICosIGludCkpOwotZXh0ZXJuIHZvaWQgZnJlZV9vcmlub2NvZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCBfX29yaW5vY29fdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IF9fb3Jpbm9jb19kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGZyZWVfb3Jpbm9jb2RldihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK2V4dGVybiBpbnQgb3Jpbm9jb19pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworZXh0ZXJuIGludCBvcmlub2NvX2lmX2FkZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJICB1bnNpZ25lZCBsb25nIGJhc2VfYWRkciwKKwkJCSAgdW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCBvcmlub2NvX2lmX2RlbChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK2V4dGVybiBpbnQgb3Jpbm9jb191cChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK2V4dGVybiB2b2lkIG9yaW5vY29fZG93bihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKIGV4dGVybiBpcnFyZXR1cm5fdCBvcmlub2NvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMTUsNCArMjE4LDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgKmZsYWdzKTsKIH0KIAorLyoqKiBOYXZpZ2F0ZSBmcm9tIG5ldF9kZXZpY2UgdG8gb3Jpbm9jb19wcml2YXRlICoqKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqbmRldl9wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIHdkZXZfcHJpdih3ZGV2KTsKK30KICNlbmRpZiAvKiBfT1JJTk9DT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCmluZGV4IGIzODFhZWQuLjM4YzFjOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCkBAIC0xMDYsMjYgKzEwNiwyNCBAQAogc3RhdGljIGludAogb3Jpbm9jb19jc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkOwogCi0JZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmaGFuZGxlX3RvX2RldihsaW5rKSwKLQkJCSAgICAgICBvcmlub2NvX2NzX2hhcmRfcmVzZXQsIE5VTEwpOwotCWlmICghZGV2KQorCXByaXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZoYW5kbGVfdG9fZGV2KGxpbmspLAorCQkJCW9yaW5vY29fY3NfaGFyZF9yZXNldCwgTlVMTCk7CisJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKLQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljYXJkID0gcHJpdi0+Y2FyZDsKIAogCS8qIExpbmsgYm90aCBzdHJ1Y3R1cmVzIHRvZ2V0aGVyICovCiAJY2FyZC0+cF9kZXYgPSBsaW5rOwotCWxpbmstPnByaXYgPSBkZXY7CisJbGluay0+cHJpdiA9IHByaXY7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KIAlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBvcmlub2NvX2ludGVycnVwdDsKLQlsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CisJbGluay0+aXJxLkluc3RhbmNlID0gcHJpdjsKIAogCS8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgY2FuIGdvIGhlcmUuICBJbiB0aGlzCiAJICogY2xpZW50LCB3ZSBhc3N1bWUgdmVyeSBsaXR0bGUsIGFuZCByZWx5IG9uIHRoZSBDSVMgZm9yCkBAIC0xNDYsMTQgKzE0NCwxNCBAQAogICovCiBzdGF0aWMgdm9pZCBvcmlub2NvX2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbGluay0+cHJpdjsKIAogCWlmIChsaW5rLT5kZXZfbm9kZSkKLQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwkJb3Jpbm9jb19pZl9kZWwocHJpdik7CiAKIAlvcmlub2NvX2NzX3JlbGVhc2UobGluayk7CiAKLQlmcmVlX29yaW5vY29kZXYoZGV2KTsKKwlmcmVlX29yaW5vY29kZXYocHJpdik7CiB9CQkJCS8qIG9yaW5vY29fY3NfZGV0YWNoICovCiAKIC8qCkBAIC0yMzksOCArMjM3LDcgQEAKIHN0YXRpYyBpbnQKIG9yaW5vY29fY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBsaW5rLT5wcml2OwogCXN0cnVjdCBvcmlub2NvX3BjY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKQEAgLTI5NSwyOSArMjkyLDI3IEBACiAJCSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKIAkvKiBPaywgd2UgaGF2ZSB0aGUgY29uZmlndXJhdGlvbiwgcHJlcGFyZSB0byByZWdpc3RlciB0aGUgbmV0ZGV2ICovCi0JZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7Ci0JZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CiAJY2FyZC0+bm9kZS5tYWpvciA9IGNhcmQtPm5vZGUubWlub3IgPSAwOwogCi0JU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7Ci0JLyogVGVsbCB0aGUgc3RhY2sgd2UgZXhpc3QgKi8KLQlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJyZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOworCS8qIEluaXRpYWxpc2UgdGhlIG1haW4gZHJpdmVyICovCisJaWYgKG9yaW5vY29faW5pdChwcml2KSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIm9yaW5vY29faW5pdCgpIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIFJlZ2lzdGVyIGFuIGludGVyZmFjZSB3aXRoIHRoZSBzdGFjayAqLworCWlmIChvcmlub2NvX2lmX2FkZChwcml2LCBsaW5rLT5pby5CYXNlUG9ydDEsCisJCQkgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAib3Jpbm9jb19pZl9hZGQoKSBmYWlsZWRcbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZHMgdG8gYmUKIAkgKiBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4gKi8KLQlzdHJjcHkoY2FyZC0+bm9kZS5kZXZfbmFtZSwgZGV2LT5uYW1lKTsKKwlzdHJjcHkoY2FyZC0+bm9kZS5kZXZfbmFtZSwgcHJpdi0+bmRldi0+bmFtZSk7CiAJbGluay0+ZGV2X25vZGUgPSAmY2FyZC0+bm9kZTsgLyogbGluay0+ZGV2X25vZGUgYmVpbmcgbm9uLU5VTEwgaXMgYWxzbwogCQkJCSAgICAgICAqIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUKIAkJCQkgICAgICAgKiBuZXRfZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgKi8KLQotCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX05BTUUgIiBhdCAlcywgaXJxICVkLCBpbyAiCi0JICAgICAgICIweCUwNHgtMHglMDR4XG4iLCBkZXYtPm5hbWUsIGRldl9uYW1lKGRldi0+ZGV2LnBhcmVudCksCi0JICAgICAgIGxpbmstPmlycS5Bc3NpZ25lZElSUSwgbGluay0+aW8uQmFzZVBvcnQxLAotCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEgKyBsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKIAlyZXR1cm4gMDsKIAogIGNzX2ZhaWxlZDoKQEAgLTMzNiw4ICszMzEsNyBAQAogc3RhdGljIHZvaWQKIG9yaW5vY29fY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbGluay0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogV2UncmUgY29tbWl0dGVkIHRvIHRha2luZyB0aGUgZGV2aWNlIGF3YXkgbm93LCBzbyBtYXJrIHRoZQpAQCAtMzUzLDYyICszNDcsMjYgQEAKIAogc3RhdGljIGludCBvcmlub2NvX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogVGhpcyBpcyBwcm9iYWJseSByYWN5LCBidXQgSSBjYW4ndCB0aGluayBvZgogCSAgIGEgYmV0dGVyIHdheSwgc2hvcnQgb2YgcmV3cml0aW5nIHRoZSBQQ01DSUEKIAkgICBsYXllciB0byBub3Qgc3VjayA6LSggKi8KLQlpZiAoIXRlc3RfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7Ci0JCWlmIChlcnIpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgZG93bmluZyBpbnRlcmZhY2VcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCi0JCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKLQkJcHJpdi0+aHdfdW5hdmFpbGFibGUrKzsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JfQorCWlmICghdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKQorCQlvcmlub2NvX2Rvd24ocHJpdik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBvcmlub2NvX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbGluay0+cHJpdjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwogCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIXRlc3RfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKSkgewotCQllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZS1pbml0aWFsaXppbmcgZmlybXdhcmVcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKLQotCQlpZiAocHJpdi0+b3BlbiAmJiAhcHJpdi0+aHdfdW5hdmFpbGFibGUpIHsKLQkJCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwotCQkJaWYgKGVycikKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZXN0YXJ0aW5nIGNhcmRcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJfQotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQl9CisJaWYgKCF0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpCisJCWVyciA9IG9yaW5vY29fdXAocHJpdik7CiAKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jCmluZGV4IGIwMTcyNjIuLmMxM2E0YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19ub3J0ZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMKQEAgLTE0NCw3ICsxNDQsNiBAQAogCWludCBlcnI7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2lfY2FyZCAqY2FyZDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXZvaWQgX19pb21lbSAqaGVybWVzX2lvLCAqYnJpZGdlX2lvLCAqYXR0cl9pbzsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtMTgxLDI0ICsxODAsMjIgQEAKIAl9CiAKIAkvKiBBbGxvY2F0ZSBuZXR3b3JrIGRldmljZSAqLwotCWRldiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJnBkZXYtPmRldiwKLQkJCSAgICAgICBvcmlub2NvX25vcnRlbF9jb3JfcmVzZXQsIE5VTEwpOwotCWlmICghZGV2KSB7CisJcHJpdiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJnBkZXYtPmRldiwKKwkJCQlvcmlub2NvX25vcnRlbF9jb3JfcmVzZXQsIE5VTEwpOworCWlmICghcHJpdikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfYWxsb2M7CiAJfQogCi0JcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJY2FyZCA9IHByaXYtPmNhcmQ7CiAJY2FyZC0+YnJpZGdlX2lvID0gYnJpZGdlX2lvOwogCWNhcmQtPmF0dHJfaW8gPSBhdHRyX2lvOwotCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKIAloZXJtZXNfc3RydWN0X2luaXQoJnByaXYtPmh3LCBoZXJtZXNfaW8sIEhFUk1FU18xNkJJVF9SRUdTUEFDSU5HKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAotCQkJICBkZXYtPm5hbWUsIGRldik7CisJCQkgIERSSVZFUl9OQU1FLCBwcml2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBJUlEgJWRcbiIsIHBkZXYtPmlycSk7CiAJCWVyciA9IC1FQlVTWTsKQEAgLTIxNywyNCArMjE0LDI4IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwllcnIgPSBvcmlub2NvX2luaXQocHJpdik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVnaXN0ZXIgbmV0d29yayBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJvcmlub2NvX2luaXQoKSBmYWlsZWRcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQogCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIERSSVZFUl9OQU1FICIgYXQgJXNcbiIsIGRldi0+bmFtZSwKLQkgICAgICAgcGNpX25hbWUocGRldikpOworCWVyciA9IG9yaW5vY29faWZfYWRkKHByaXYsIDAsIDApOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAib3Jpbm9jb19pZl9hZGQoKSBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwogCiAJcmV0dXJuIDA7CiAKICBmYWlsOgotCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKKwlmcmVlX2lycShwZGV2LT5pcnEsIHByaXYpOwogCiAgZmFpbF9pcnE6CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWZyZWVfb3Jpbm9jb2RldihkZXYpOworCWZyZWVfb3Jpbm9jb2Rldihwcml2KTsKIAogIGZhaWxfYWxsb2M6CiAJcGNpX2lvdW5tYXAocGRldiwgaGVybWVzX2lvKTsKQEAgLTI1NiwxNyArMjU3LDE2IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBvcmlub2NvX25vcnRlbF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2lfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAKIAkvKiBDbGVhciBMRURzICovCiAJaW93cml0ZTE2KDAsIGNhcmQtPmJyaWRnZV9pbyArIDEwKTsKIAotCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCW9yaW5vY29faWZfZGVsKHByaXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgcHJpdik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWZyZWVfb3Jpbm9jb2RldihkZXYpOworCWZyZWVfb3Jpbm9jb2Rldihwcml2KTsKIAlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5ody5pb2Jhc2UpOwogCXBjaV9pb3VubWFwKHBkZXYsIGNhcmQtPmF0dHJfaW8pOwogCXBjaV9pb3VubWFwKHBkZXYsIGNhcmQtPmJyaWRnZV9pbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMKaW5kZXggNzhjYWZmZi4uZmVhNzc4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYwpAQCAtMTE2LDcgKzExNiw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OwogCXN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdm9pZCBfX2lvbWVtICpoZXJtZXNfaW87CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKQEAgLTEzOSwyMiArMTM4LDIwIEBACiAJfQogCiAJLyogQWxsb2NhdGUgbmV0d29yayBkZXZpY2UgKi8KLQlkZXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZwZGV2LT5kZXYsCi0JCQkgICAgICAgb3Jpbm9jb19wY2lfY29yX3Jlc2V0LCBOVUxMKTsKLQlpZiAoIWRldikgeworCXByaXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZwZGV2LT5kZXYsCisJCQkJb3Jpbm9jb19wY2lfY29yX3Jlc2V0LCBOVUxMKTsKKwlpZiAoIXByaXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmYWlsX2FsbG9jOwogCX0KIAotCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNhcmQgPSBwcml2LT5jYXJkOwotCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKIAloZXJtZXNfc3RydWN0X2luaXQoJnByaXYtPmh3LCBoZXJtZXNfaW8sIEhFUk1FU18zMkJJVF9SRUdTUEFDSU5HKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAotCQkJICBkZXYtPm5hbWUsIGRldik7CisJCQkgIERSSVZFUl9OQU1FLCBwcml2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBJUlEgJWRcbiIsIHBkZXYtPmlycSk7CiAJCWVyciA9IC1FQlVTWTsKQEAgLTE2NywyNCArMTY0LDI4IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwllcnIgPSBvcmlub2NvX2luaXQocHJpdik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVnaXN0ZXIgbmV0d29yayBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJvcmlub2NvX2luaXQoKSBmYWlsZWRcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQogCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIERSSVZFUl9OQU1FICIgYXQgJXNcbiIsIGRldi0+bmFtZSwKLQkgICAgICAgcGNpX25hbWUocGRldikpOworCWVyciA9IG9yaW5vY29faWZfYWRkKHByaXYsIDAsIDApOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAib3Jpbm9jb19pZl9hZGQoKSBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwogCiAJcmV0dXJuIDA7CiAKICBmYWlsOgotCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKKwlmcmVlX2lycShwZGV2LT5pcnEsIHByaXYpOwogCiAgZmFpbF9pcnE6CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWZyZWVfb3Jpbm9jb2RldihkZXYpOworCWZyZWVfb3Jpbm9jb2Rldihwcml2KTsKIAogIGZhaWxfYWxsb2M6CiAJcGNpX2lvdW5tYXAocGRldiwgaGVybWVzX2lvKTsKQEAgLTIwMCwxMyArMjAxLDEyIEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBvcmlub2NvX3BjaV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCW9yaW5vY29faWZfZGVsKHByaXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgcHJpdik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWZyZWVfb3Jpbm9jb2RldihkZXYpOworCWZyZWVfb3Jpbm9jb2Rldihwcml2KTsKIAlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5ody5pb2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5oCmluZGV4IGM2NTViNGEuLmVhNzIzMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmgKQEAgLTIxLDMwICsyMSwxMCBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBvcmlub2NvX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnI7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWVyciA9IG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGxvY2sgaGFyZHdhcmUgZm9yIHN1c3BlbmRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGVycm9yICVkIGJyaW5naW5nIGludGVyZmFjZSBkb3duICIKLQkJICAgICAgICJmb3Igc3VzcGVuZFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCi0JbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCi0JcHJpdi0+aHdfdW5hdmFpbGFibGUrKzsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CisJb3Jpbm9jb19kb3duKHByaXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgcHJpdik7CiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKQEAgLTU0LDkgKzM0LDggQEAKIAogc3RhdGljIGludCBvcmlub2NvX3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAJaW50IGVycjsKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgMCk7CkBAIC02OSw3ICs0OCw3IEBACiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKIAllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIG9yaW5vY29faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKLQkJCSAgZGV2LT5uYW1lLCBkZXYpOworCQkJICBkZXYtPm5hbWUsIHByaXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHJlLWFsbG9jYXRlIElSUSBvbiByZXN1bWVcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwpAQCAtNzcsMjkgKzU2LDkgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmUtaW5pdGlhbGl6aW5nIGZpcm13YXJlICIKLQkJICAgICAgICJvbiByZXN1bWVcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9CisJZXJyID0gb3Jpbm9jb191cChwcml2KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7Ci0KLQlwcml2LT5od191bmF2YWlsYWJsZS0tOwotCi0JaWYgKHByaXYtPm9wZW4gJiYgKCFwcml2LT5od191bmF2YWlsYWJsZSkpIHsKLQkJZXJyID0gX19vcmlub2NvX3VwKGRldik7Ci0JCWlmIChlcnIpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZXN0YXJ0aW5nIGNhcmQgb24gcmVzdW1lXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogI2Vsc2UKICNkZWZpbmUgb3Jpbm9jb19wY2lfc3VzcGVuZCBOVUxMCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMKaW5kZXggYTJhNDQ3MS4uM2YyOTQyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BseC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYwpAQCAtMTgzLDcgKzE4Myw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OwogCXN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdm9pZCBfX2lvbWVtICpoZXJtZXNfaW8sICphdHRyX2lvLCAqYnJpZGdlX2lvOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC0yMjAsMjQgKzIxOSwyMiBAQAogCX0KIAogCS8qIEFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlICovCi0JZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmcGRldi0+ZGV2LAotCQkJICAgICAgIG9yaW5vY29fcGx4X2Nvcl9yZXNldCwgTlVMTCk7Ci0JaWYgKCFkZXYpIHsKKwlwcml2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmcGRldi0+ZGV2LAorCQkJCW9yaW5vY29fcGx4X2Nvcl9yZXNldCwgTlVMTCk7CisJaWYgKCFwcml2KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbF9hbGxvYzsKIAl9CiAKLQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljYXJkID0gcHJpdi0+Y2FyZDsKIAljYXJkLT5icmlkZ2VfaW8gPSBicmlkZ2VfaW87CiAJY2FyZC0+YXR0cl9pbyA9IGF0dHJfaW87Ci0JU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCWhlcm1lc19zdHJ1Y3RfaW5pdCgmcHJpdi0+aHcsIGhlcm1lc19pbywgSEVSTUVTXzE2QklUX1JFR1NQQUNJTkcpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBvcmlub2NvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQkgIGRldi0+bmFtZSwgZGV2KTsKKwkJCSAgRFJJVkVSX05BTUUsIHByaXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIElSUSAlZFxuIiwgcGRldi0+aXJxKTsKIAkJZXJyID0gLUVCVVNZOwpAQCAtMjU2LDI0ICsyNTMsMjggQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWVyciA9IG9yaW5vY29faW5pdChwcml2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZWdpc3RlciBuZXR3b3JrIGRldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIm9yaW5vY29faW5pdCgpIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX05BTUUgIiBhdCAlc1xuIiwgZGV2LT5uYW1lLAotCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJZXJyID0gb3Jpbm9jb19pZl9hZGQocHJpdiwgMCwgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJvcmlub2NvX2lmX2FkZCgpIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAKIAlyZXR1cm4gMDsKIAogIGZhaWw6Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgcHJpdik7CiAKICBmYWlsX2lycToKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JZnJlZV9vcmlub2NvZGV2KGRldik7CisJZnJlZV9vcmlub2NvZGV2KHByaXYpOwogCiAgZmFpbF9hbGxvYzoKIAlwY2lfaW91bm1hcChwZGV2LCBoZXJtZXNfaW8pOwpAQCAtMjk1LDE0ICsyOTYsMTMgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IG9yaW5vY29fcGx4X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAotCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCW9yaW5vY29faWZfZGVsKHByaXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgcHJpdik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWZyZWVfb3Jpbm9jb2RldihkZXYpOworCWZyZWVfb3Jpbm9jb2Rldihwcml2KTsKIAlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5ody5pb2Jhc2UpOwogCXBjaV9pb3VubWFwKHBkZXYsIGNhcmQtPmF0dHJfaW8pOwogCXBjaV9pb3VubWFwKHBkZXYsIGNhcmQtPmJyaWRnZV9pbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMKaW5kZXggY2RhMGU2ZS4uZDM0NTI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3RtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYwpAQCAtOTQsNyArOTQsNiBAQAogCWludCBlcnI7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2lfY2FyZCAqY2FyZDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXZvaWQgX19pb21lbSAqaGVybWVzX2lvLCAqYnJpZGdlX2lvOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC0xMjQsMjMgKzEyMywyMSBAQAogCX0KIAogCS8qIEFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlICovCi0JZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmcGRldi0+ZGV2LAotCQkJICAgICAgIG9yaW5vY29fdG1kX2Nvcl9yZXNldCwgTlVMTCk7Ci0JaWYgKCFkZXYpIHsKKwlwcml2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmcGRldi0+ZGV2LAorCQkJCW9yaW5vY29fdG1kX2Nvcl9yZXNldCwgTlVMTCk7CisJaWYgKCFwcml2KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbF9hbGxvYzsKIAl9CiAKLQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljYXJkID0gcHJpdi0+Y2FyZDsKIAljYXJkLT5icmlkZ2VfaW8gPSBicmlkZ2VfaW87Ci0JU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCWhlcm1lc19zdHJ1Y3RfaW5pdCgmcHJpdi0+aHcsIGhlcm1lc19pbywgSEVSTUVTXzE2QklUX1JFR1NQQUNJTkcpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBvcmlub2NvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQkgIGRldi0+bmFtZSwgZGV2KTsKKwkJCSAgRFJJVkVSX05BTUUsIHByaXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIElSUSAlZFxuIiwgcGRldi0+aXJxKTsKIAkJZXJyID0gLUVCVVNZOwpAQCAtMTUzLDI0ICsxNTAsMjggQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWVyciA9IG9yaW5vY29faW5pdChwcml2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZWdpc3RlciBuZXR3b3JrIGRldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIm9yaW5vY29faW5pdCgpIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX05BTUUgIiBhdCAlc1xuIiwgZGV2LT5uYW1lLAotCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJZXJyID0gb3Jpbm9jb19pZl9hZGQocHJpdiwgMCwgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJvcmlub2NvX2lmX2FkZCgpIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAKIAlyZXR1cm4gMDsKIAogIGZhaWw6Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgcHJpdik7CiAKICBmYWlsX2lycToKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JZnJlZV9vcmlub2NvZGV2KGRldik7CisJZnJlZV9vcmlub2NvZGV2KHByaXYpOwogCiAgZmFpbF9hbGxvYzoKIAlwY2lfaW91bm1hcChwZGV2LCBoZXJtZXNfaW8pOwpAQCAtMTg5LDE0ICsxOTAsMTMgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IG9yaW5vY29fdG1kX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAotCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCW9yaW5vY29faWZfZGVsKHByaXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgcHJpdik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWZyZWVfb3Jpbm9jb2RldihkZXYpOworCWZyZWVfb3Jpbm9jb2Rldihwcml2KTsKIAlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5ody5pb2Jhc2UpOwogCXBjaV9pb3VubWFwKHBkZXYsIGNhcmQtPmJyaWRnZV9pbyk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmMKaW5kZXggODlkNjk5ZC4uZDJmMTBlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmMKQEAgLTUsMTQ3ICs1LDE2NiBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KIAogI2luY2x1ZGUgImhlcm1lcy5oIgogI2luY2x1ZGUgIm9yaW5vY28uaCIKKyNpbmNsdWRlICJtYWluLmgiCiAKICNpbmNsdWRlICJzY2FuLmgiCiAKLSNkZWZpbmUgT1JJTk9DT19NQVhfQlNTX0NPVU5UCTY0CisjZGVmaW5lIFpFUk9fREJNX09GRlNFVCAweDk1CisjZGVmaW5lIE1BWF9TSUdOQUxfTEVWRUwgMHg4QQorI2RlZmluZSBNSU5fU0lHTkFMX0xFVkVMIDB4MkYKIAotI2RlZmluZSBQUklWX0JTUwkoKHN0cnVjdCBic3NfZWxlbWVudCAqKXByaXYtPmJzc194YnNzX2RhdGEpCi0jZGVmaW5lIFBSSVZfWEJTUwkoKHN0cnVjdCB4YnNzX2VsZW1lbnQgKilwcml2LT5ic3NfeGJzc19kYXRhKQorI2RlZmluZSBTSUdOQUxfVE9fREJNKHgpCQkJCQlcCisJKGNsYW1wX3QoczMyLCAoeCksIE1JTl9TSUdOQUxfTEVWRUwsIE1BWF9TSUdOQUxfTEVWRUwpCVwKKwkgLSBaRVJPX0RCTV9PRkZTRVQpCisjZGVmaW5lIFNJR05BTF9UT19NQk0oeCkgKFNJR05BTF9UT19EQk0oeCkgKiAxMDApCiAKLWludCBvcmlub2NvX2Jzc19kYXRhX2FsbG9jYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCitzdGF0aWMgaW50IHN5bWJvbF9idWlsZF9zdXBwX3JhdGVzKHU4ICpidWYsIGNvbnN0IF9fbGUxNiAqcmF0ZXMpCiB7Ci0JaWYgKHByaXYtPmJzc194YnNzX2RhdGEpCi0JCXJldHVybiAwOworCWludCBpOworCXU4IHJhdGU7CiAKLQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKQotCQlwcml2LT5ic3NfeGJzc19kYXRhID0ga3phbGxvYyhPUklOT0NPX01BWF9CU1NfQ09VTlQgKgotCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHhic3NfZWxlbWVudCksCi0JCQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWVsc2UKLQkJcHJpdi0+YnNzX3hic3NfZGF0YSA9IGt6YWxsb2MoT1JJTk9DT19NQVhfQlNTX0NPVU5UICoKLQkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBic3NfZWxlbWVudCksCi0JCQkJCSAgICAgIEdGUF9LRVJORUwpOwotCi0JaWYgKCFwcml2LT5ic3NfeGJzc19kYXRhKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBiZWFjb25zIik7Ci0JCXJldHVybiAtRU5PTUVNOworCWJ1ZlswXSA9IFdMQU5fRUlEX1NVUFBfUkFURVM7CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlyYXRlID0gbGUxNl90b19jcHUocmF0ZXNbaV0pOworCQkvKiBOVUxMIHRlcm1pbmF0ZWQgKi8KKwkJaWYgKHJhdGUgPT0gMHgwKQorCQkJYnJlYWs7CisJCWJ1ZltpICsgMl0gPSByYXRlOwogCX0KLQlyZXR1cm4gMDsKKwlidWZbMV0gPSBpOworCisJcmV0dXJuIGkgKyAyOwogfQogCi12b2lkIG9yaW5vY29fYnNzX2RhdGFfZnJlZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWtmcmVlKHByaXYtPmJzc194YnNzX2RhdGEpOwotCXByaXYtPmJzc194YnNzX2RhdGEgPSBOVUxMOwotfQotCi12b2lkIG9yaW5vY29fYnNzX2RhdGFfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQorc3RhdGljIGludCBwcmlzbV9idWlsZF9zdXBwX3JhdGVzKHU4ICpidWYsIGNvbnN0IHU4ICpyYXRlcykKIHsKIAlpbnQgaTsKIAotCUlOSVRfTElTVF9IRUFEKCZwcml2LT5ic3NfZnJlZV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+YnNzX2xpc3QpOwotCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pCi0JCWZvciAoaSA9IDA7IGkgPCBPUklOT0NPX01BWF9CU1NfQ09VTlQ7IGkrKykKLQkJCWxpc3RfYWRkX3RhaWwoJihQUklWX1hCU1NbaV0ubGlzdCksCi0JCQkJICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOwotCWVsc2UKLQkJZm9yIChpID0gMDsgaSA8IE9SSU5PQ09fTUFYX0JTU19DT1VOVDsgaSsrKQotCQkJbGlzdF9hZGRfdGFpbCgmKFBSSVZfQlNTW2ldLmxpc3QpLAotCQkJCSAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKLQotfQotCi12b2lkIG9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCQkJdW5zaWduZWQgbG9uZyBzY2FuX2FnZSkKLXsKLQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKSB7Ci0JCXN0cnVjdCB4YnNzX2VsZW1lbnQgKmJzczsKLQkJc3RydWN0IHhic3NfZWxlbWVudCAqdG1wX2JzczsKLQotCQkvKiBCbG93IGF3YXkgY3VycmVudCBsaXN0IG9mIHNjYW4gcmVzdWx0cyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXBfYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJCWlmICghc2Nhbl9hZ2UgfHwKLQkJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+bGFzdF9zY2FubmVkICsgc2Nhbl9hZ2UpKSB7Ci0JCQkJbGlzdF9tb3ZlX3RhaWwoJmJzcy0+bGlzdCwKLQkJCQkJICAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKLQkJCQkvKiBEb24ndCBibG93IGF3YXkgLT5saXN0LCBqdXN0IEJTUyBkYXRhICovCi0JCQkJbWVtc2V0KCZic3MtPmJzcywgMCwgc2l6ZW9mKGJzcy0+YnNzKSk7Ci0JCQkJYnNzLT5sYXN0X3NjYW5uZWQgPSAwOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGJzc19lbGVtZW50ICpic3M7Ci0JCXN0cnVjdCBic3NfZWxlbWVudCAqdG1wX2JzczsKLQotCQkvKiBCbG93IGF3YXkgY3VycmVudCBsaXN0IG9mIHNjYW4gcmVzdWx0cyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXBfYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJCWlmICghc2Nhbl9hZ2UgfHwKLQkJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+bGFzdF9zY2FubmVkICsgc2Nhbl9hZ2UpKSB7Ci0JCQkJbGlzdF9tb3ZlX3RhaWwoJmJzcy0+bGlzdCwKLQkJCQkJICAgICAgICZwcml2LT5ic3NfZnJlZV9saXN0KTsKLQkJCQkvKiBEb24ndCBibG93IGF3YXkgLT5saXN0LCBqdXN0IEJTUyBkYXRhICovCi0JCQkJbWVtc2V0KCZic3MtPmJzcywgMCwgc2l6ZW9mKGJzcy0+YnNzKSk7Ci0JCQkJYnNzLT5sYXN0X3NjYW5uZWQgPSAwOwotCQkJfQotCQl9CisJYnVmWzBdID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCS8qIE5VTEwgdGVybWluYXRlZCAqLworCQlpZiAocmF0ZXNbaV0gPT0gMHgwKQorCQkJYnJlYWs7CisJCWJ1ZltpICsgMl0gPSByYXRlc1tpXTsKIAl9CisJYnVmWzFdID0gaTsKKworCS8qIFdlIG1pZ2h0IHN0aWxsIGhhdmUgYW5vdGhlciAyIHJhdGVzLCB3aGljaCBuZWVkIHRvIGdvIGluCisJICogZXh0ZW5kZWQgc3VwcG9ydGVkIHJhdGVzICovCisJaWYgKGkgPT0gOCAmJiByYXRlc1tpXSA+IDApIHsKKwkJYnVmWzEwXSA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCQlmb3IgKDsgaSA8IDEwOyBpKyspIHsKKwkJCS8qIE5VTEwgdGVybWluYXRlZCAqLworCQkJaWYgKHJhdGVzW2ldID09IDB4MCkKKwkJCQlicmVhazsKKwkJCWJ1ZltpICsgMl0gPSByYXRlc1tpXTsKKwkJfQorCQlidWZbMTFdID0gaSAtIDg7CisJfQorCisJcmV0dXJuIChpIDwgOCkgPyBpICsgMiA6IGkgKyA0OwogfQogCi12b2lkIG9yaW5vY29fYWRkX2V4dF9zY2FuX3Jlc3VsdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAotCQkJCSBzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYXRvbSkKK3N0YXRpYyB2b2lkIG9yaW5vY29fYWRkX2hvc3RzY2FuX3Jlc3VsdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCQljb25zdCB1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICpic3MpCiB7Ci0Jc3RydWN0IHhic3NfZWxlbWVudCAqYnNzID0gTlVMTDsKLQlpbnQgZm91bmQgPSAwOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBwcml2X3RvX3dpcGh5KHByaXYpOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKKwl1OCAqaWU7CisJdTggaWVfYnVmWzQ2XTsKKwl1NjQgdGltZXN0YW1wOworCXMzMiBzaWduYWw7CisJdTE2IGNhcGFiaWxpdHk7CisJdTE2IGJlYWNvbl9pbnRlcnZhbDsKKwlpbnQgaWVfbGVuOworCWludCBmcmVxOworCWludCBsZW47CiAKLQkvKiBUcnkgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIGJzcyBmaXJzdCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3MtPmJzcy5ic3NpZCwgYXRvbS0+YnNzaWQpKQotCQkJY29udGludWU7Ci0JCS8qIEVTU0lEIGxlbmd0aHMgKi8KLQkJaWYgKGJzcy0+YnNzLmRhdGFbMV0gIT0gYXRvbS0+ZGF0YVsxXSkKLQkJCWNvbnRpbnVlOwotCQlpZiAobWVtY21wKCZic3MtPmJzcy5kYXRhWzJdLCAmYXRvbS0+ZGF0YVsyXSwKLQkJCSAgIGF0b20tPmRhdGFbMV0pKQotCQkJY29udGludWU7Ci0JCWZvdW5kID0gMTsKKwlsZW4gPSBsZTE2X3RvX2NwdShic3MtPmEuZXNzaWRfbGVuKTsKKworCS8qIFJlY29uc3RydWN0IFNTSUQgYW5kIGJpdHJhdGUgSUVzIHRvIHBhc3MgdXAgKi8KKwlpZV9idWZbMF0gPSBXTEFOX0VJRF9TU0lEOworCWllX2J1ZlsxXSA9IGxlbjsKKwltZW1jcHkoJmllX2J1ZlsyXSwgYnNzLT5hLmVzc2lkLCBsZW4pOworCisJaWUgPSBpZV9idWYgKyBsZW4gKyAyOworCWllX2xlbiA9IGllX2J1ZlsxXSArIDI7CisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJaWVfbGVuICs9IHN5bWJvbF9idWlsZF9zdXBwX3JhdGVzKGllLCBic3MtPnMucmF0ZXMpOworCQlicmVhazsKKworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKKwkJaWVfbGVuICs9IHByaXNtX2J1aWxkX3N1cHBfcmF0ZXMoaWUsIGJzcy0+cC5yYXRlcyk7CisJCWJyZWFrOworCisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KIAotCS8qIEdyYWIgYSBic3Mgb2ZmIHRoZSBmcmVlIGxpc3QgKi8KLQlpZiAoIWZvdW5kICYmICFsaXN0X2VtcHR5KCZwcml2LT5ic3NfZnJlZV9saXN0KSkgewotCQlic3MgPSBsaXN0X2VudHJ5KHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCwKLQkJCQkgc3RydWN0IHhic3NfZWxlbWVudCwgbGlzdCk7Ci0JCWxpc3RfZGVsKHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCk7CisJZnJlcSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShsZTE2X3RvX2NwdShic3MtPmEuY2hhbm5lbCkpOworCWNoYW5uZWwgPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwod2lwaHksIGZyZXEpOworCXRpbWVzdGFtcCA9IDA7CisJY2FwYWJpbGl0eSA9IGxlMTZfdG9fY3B1KGJzcy0+YS5jYXBhYmlsaXRpZXMpOworCWJlYWNvbl9pbnRlcnZhbCA9IGxlMTZfdG9fY3B1KGJzcy0+YS5iZWFjb25faW50ZXJ2KTsKKwlzaWduYWwgPSBTSUdOQUxfVE9fTUJNKGxlMTZfdG9fY3B1KGJzcy0+YS5sZXZlbCkpOwogCi0JCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJnByaXYtPmJzc19saXN0KTsKLQl9Ci0KLQlpZiAoYnNzKSB7Ci0JCS8qIEFsd2F5cyB1cGRhdGUgdGhlIEJTUyB0byBnZXQgbGF0ZXN0IGJlYWNvbiBpbmZvICovCi0JCW1lbWNweSgmYnNzLT5ic3MsIGF0b20sIHNpemVvZihic3MtPmJzcykpOwotCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IGppZmZpZXM7Ci0JfQorCWNmZzgwMjExX2luZm9ybV9ic3Mod2lwaHksIGNoYW5uZWwsIGJzcy0+YS5ic3NpZCwgdGltZXN0YW1wLAorCQkJICAgIGNhcGFiaWxpdHksIGJlYWNvbl9pbnRlcnZhbCwgaWVfYnVmLCBpZV9sZW4sCisJCQkgICAgc2lnbmFsLCBHRlBfS0VSTkVMKTsKIH0KIAotaW50IG9yaW5vY29fcHJvY2Vzc19zY2FuX3Jlc3VsdHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQkgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJCSBpbnQgbGVuKQordm9pZCBvcmlub2NvX2FkZF9leHRzY2FuX3Jlc3VsdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCXN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICpic3MsCisJCQkJc2l6ZV90IGxlbikKIHsKLQlpbnQJCQlvZmZzZXQ7CQkvKiBJbiB0aGUgc2NhbiBkYXRhICovCi0JdW5pb24gaGVybWVzX3NjYW5faW5mbyAqYXRvbTsKLQlpbnQJCQlhdG9tX2xlbjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gcHJpdl90b193aXBoeShwcml2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CisJdTggKmllOworCXU2NCB0aW1lc3RhbXA7CisJczMyIHNpZ25hbDsKKwl1MTYgY2FwYWJpbGl0eTsKKwl1MTYgYmVhY29uX2ludGVydmFsOworCXNpemVfdCBpZV9sZW47CisJaW50IGNoYW4sIGZyZXE7CisKKwlpZV9sZW4gPSBsZW4gLSBzaXplb2YoKmJzcyk7CisJaWUgPSBvcmlub2NvX2dldF9pZShic3MtPmRhdGEsIGllX2xlbiwgV0xBTl9FSURfRFNfUEFSQU1TKTsKKwljaGFuID0gaWUgPyBpZVsyXSA6IDA7CisJZnJlcSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaGFuKTsKKwljaGFubmVsID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHdpcGh5LCBmcmVxKTsKKworCXRpbWVzdGFtcCA9IGxlNjRfdG9fY3B1KGJzcy0+dGltZXN0YW1wKTsKKwljYXBhYmlsaXR5ID0gbGUxNl90b19jcHUoYnNzLT5jYXBhYmlsaXRpZXMpOworCWJlYWNvbl9pbnRlcnZhbCA9IGxlMTZfdG9fY3B1KGJzcy0+YmVhY29uX2ludGVydmFsKTsKKwlpZSA9IGJzcy0+ZGF0YTsKKwlzaWduYWwgPSBTSUdOQUxfVE9fTUJNKGJzcy0+bGV2ZWwpOworCisJY2ZnODAyMTFfaW5mb3JtX2Jzcyh3aXBoeSwgY2hhbm5lbCwgYnNzLT5ic3NpZCwgdGltZXN0YW1wLAorCQkJICAgIGNhcGFiaWxpdHksIGJlYWNvbl9pbnRlcnZhbCwgaWUsIGllX2xlbiwKKwkJCSAgICBzaWduYWwsIEdGUF9LRVJORUwpOworfQorCit2b2lkIG9yaW5vY29fYWRkX2hvc3RzY2FuX3Jlc3VsdHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQkgIHNpemVfdCBsZW4pCit7CisJaW50IG9mZnNldDsJCS8qIEluIHRoZSBzY2FuIGRhdGEgKi8KKwlzaXplX3QgYXRvbV9sZW47CisJYm9vbCBhYm9ydCA9IGZhbHNlOwogCiAJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CiAJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgogCQlhdG9tX2xlbiA9IHNpemVvZihzdHJ1Y3QgYWdlcmVfc2Nhbl9hcGluZm8pOwogCQlvZmZzZXQgPSAwOwogCQlicmVhazsKKwogCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CiAJCS8qIExhY2sgb2YgZG9jdW1lbnRhdGlvbiBuZWNlc3NpdGF0ZXMgdGhpcyBoYWNrLgogCQkgKiBEaWZmZXJlbnQgZmlybXdhcmVzIGhhdmUgNjggb3IgNzYgYnl0ZSBsb25nIGF0b21zLgpAQCAtMTYzLDYgKzE4Miw3IEBACiAJCQlhdG9tX2xlbiA9IDY4OwogCQlvZmZzZXQgPSAwOwogCQlicmVhazsKKwogCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKIAkJb2Zmc2V0ID0gNDsKIAkJaWYgKHByaXYtPmhhc19ob3N0c2NhbikgewpAQCAtMTcwLDY0ICsxOTAsNDEgQEAKIAkJCS8qIFNhbml0eSBjaGVjayBmb3IgYXRvbV9sZW4gKi8KIAkJCWlmIChhdG9tX2xlbiA8IHNpemVvZihzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvKSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgYXRvbV9sZW4gaW4gc2NhbiAiCi0JCQkJICAgICAgICJkYXRhOiAlZFxuIiwgcHJpdi0+bmRldi0+bmFtZSwKKwkJCQkgICAgICAgImRhdGE6ICV6dVxuIiwgcHJpdi0+bmRldi0+bmFtZSwKIAkJCQkgICAgICAgYXRvbV9sZW4pOwotCQkJCXJldHVybiAtRUlPOworCQkJCWFib3J0ID0gdHJ1ZTsKKwkJCQlnb3RvIHNjYW5fYWJvcnQ7CiAJCQl9CiAJCX0gZWxzZQogCQkJYXRvbV9sZW4gPSBvZmZzZXRvZihzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvLCBhdGltKTsKIAkJYnJlYWs7CisKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCWFib3J0ID0gdHJ1ZTsKKwkJZ290byBzY2FuX2Fib3J0OwogCX0KIAogCS8qIENoZWNrIHRoYXQgd2UgZ290IGFuIHdob2xlIG51bWJlciBvZiBhdG9tcyAqLwogCWlmICgobGVuIC0gb2Zmc2V0KSAlIGF0b21fbGVuKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuZXhwZWN0ZWQgc2NhbiBkYXRhIGxlbmd0aCAlZCwgIgotCQkgICAgICAgImF0b21fbGVuICVkLCBvZmZzZXQgJWRcbiIsIHByaXYtPm5kZXYtPm5hbWUsIGxlbiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5leHBlY3RlZCBzY2FuIGRhdGEgbGVuZ3RoICV6dSwgIgorCQkgICAgICAgImF0b21fbGVuICV6dSwgb2Zmc2V0ICVkXG4iLCBwcml2LT5uZGV2LT5uYW1lLCBsZW4sCiAJCSAgICAgICBhdG9tX2xlbiwgb2Zmc2V0KTsKLQkJcmV0dXJuIC1FSU87CisJCWFib3J0ID0gdHJ1ZTsKKwkJZ290byBzY2FuX2Fib3J0OwogCX0KIAotCW9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHByaXYsIG1zZWNzX3RvX2ppZmZpZXMoMTUwMDApKTsKLQotCS8qIFJlYWQgdGhlIGVudHJpZXMgb25lIGJ5IG9uZSAqLworCS8qIFByb2Nlc3MgdGhlIGVudHJpZXMgb25lIGJ5IG9uZSAqLwogCWZvciAoOyBvZmZzZXQgKyBhdG9tX2xlbiA8PSBsZW47IG9mZnNldCArPSBhdG9tX2xlbikgewotCQlpbnQgZm91bmQgPSAwOwotCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKmJzcyA9IE5VTEw7CisJCXVuaW9uIGhlcm1lc19zY2FuX2luZm8gKmF0b207CiAKLQkJLyogR2V0IG5leHQgYXRvbSAqLwogCQlhdG9tID0gKHVuaW9uIGhlcm1lc19zY2FuX2luZm8gKikgKGJ1ZiArIG9mZnNldCk7CiAKLQkJLyogVHJ5IHRvIHVwZGF0ZSBhbiBleGlzdGluZyBic3MgZmlyc3QgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3MtPmJzcy5hLmJzc2lkLCBhdG9tLT5hLmJzc2lkKSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChsZTE2X3RvX2NwdShic3MtPmJzcy5hLmVzc2lkX2xlbikgIT0KLQkJCSAgICAgIGxlMTZfdG9fY3B1KGF0b20tPmEuZXNzaWRfbGVuKSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChtZW1jbXAoYnNzLT5ic3MuYS5lc3NpZCwgYXRvbS0+YS5lc3NpZCwKLQkJCSAgICAgIGxlMTZfdG9fY3B1KGF0b20tPmEuZXNzaWRfbGVuKSkpCi0JCQkJY29udGludWU7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIEdyYWIgYSBic3Mgb2ZmIHRoZSBmcmVlIGxpc3QgKi8KLQkJaWYgKCFmb3VuZCAmJiAhbGlzdF9lbXB0eSgmcHJpdi0+YnNzX2ZyZWVfbGlzdCkpIHsKLQkJCWJzcyA9IGxpc3RfZW50cnkocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0LAotCQkJCQkgc3RydWN0IGJzc19lbGVtZW50LCBsaXN0KTsKLQkJCWxpc3RfZGVsKHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCk7Ci0KLQkJCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJnByaXYtPmJzc19saXN0KTsKLQkJfQotCi0JCWlmIChic3MpIHsKLQkJCS8qIEFsd2F5cyB1cGRhdGUgdGhlIEJTUyB0byBnZXQgbGF0ZXN0IGJlYWNvbiBpbmZvICovCi0JCQltZW1jcHkoJmJzcy0+YnNzLCBhdG9tLCBzaXplb2YoYnNzLT5ic3MpKTsKLQkJCWJzcy0+bGFzdF9zY2FubmVkID0gamlmZmllczsKLQkJfQorCQlvcmlub2NvX2FkZF9ob3N0c2Nhbl9yZXN1bHQocHJpdiwgYXRvbSk7CiAJfQogCi0JcmV0dXJuIDA7Cisgc2Nhbl9hYm9ydDoKKwlpZiAocHJpdi0+c2Nhbl9yZXF1ZXN0KSB7CisJCWNmZzgwMjExX3NjYW5fZG9uZShwcml2LT5zY2FuX3JlcXVlc3QsIGFib3J0KTsKKwkJcHJpdi0+c2Nhbl9yZXF1ZXN0ID0gTlVMTDsKKwl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5oCmluZGV4IGYzMTlmNzQuLjJkYzRlMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5oCkBAIC05LDIxICs5LDEyIEBACiBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlOwogc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm87CiAKLS8qIFNldHVwIGFuZCBmcmVlIG1lbW9yeSBmb3Igc2NhbiByZXN1bHRzICovCi1pbnQgb3Jpbm9jb19ic3NfZGF0YV9hbGxvY2F0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKLXZvaWQgb3Jpbm9jb19ic3NfZGF0YV9mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwotdm9pZCBvcmlub2NvX2Jzc19kYXRhX2luaXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7Ci0KIC8qIEFkZCBzY2FuIHJlc3VsdHMgKi8KLXZvaWQgb3Jpbm9jb19hZGRfZXh0X3NjYW5fcmVzdWx0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCQkJIHN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICphdG9tKTsKLWludCBvcmlub2NvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKmRldiwKLQkJCQkgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJCSBpbnQgbGVuKTsKLQotLyogQ2xlYXIgc2NhbiByZXN1bHRzICovCi12b2lkIG9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCQkJdW5zaWduZWQgbG9uZyBzY2FuX2FnZSk7Ci0KK3ZvaWQgb3Jpbm9jb19hZGRfZXh0c2Nhbl9yZXN1bHQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCQlzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYXRvbSwKKwkJCQlzaXplX3QgbGVuKTsKK3ZvaWQgb3Jpbm9jb19hZGRfaG9zdHNjYW5fcmVzdWx0cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpkZXYsCisJCQkJICB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkJICBzaXplX3QgbGVuKTsKIAogI2VuZGlmIC8qIF9PUklOT0NPX1NDQU5fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYwppbmRleCAzOGU1MTk4Li5jMzYxMzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zcGVjdHJ1bV9jcy5jCkBAIC0xNzgsMjcgKzE3OCwyNSBAQAogc3RhdGljIGludAogc3BlY3RydW1fY3NfcHJvYmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OwogCXN0cnVjdCBvcmlub2NvX3BjY2FyZCAqY2FyZDsKIAotCWRldiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJmhhbmRsZV90b19kZXYobGluayksCi0JCQkgICAgICAgc3BlY3RydW1fY3NfaGFyZF9yZXNldCwKLQkJCSAgICAgICBzcGVjdHJ1bV9jc19zdG9wX2Zpcm13YXJlKTsKLQlpZiAoIWRldikKKwlwcml2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmaGFuZGxlX3RvX2RldihsaW5rKSwKKwkJCQlzcGVjdHJ1bV9jc19oYXJkX3Jlc2V0LAorCQkJCXNwZWN0cnVtX2NzX3N0b3BfZmlybXdhcmUpOworCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJY2FyZCA9IHByaXYtPmNhcmQ7CiAKIAkvKiBMaW5rIGJvdGggc3RydWN0dXJlcyB0b2dldGhlciAqLwogCWNhcmQtPnBfZGV2ID0gbGluazsKLQlsaW5rLT5wcml2ID0gZGV2OworCWxpbmstPnByaXYgPSBwcml2OwogCiAJLyogSW50ZXJydXB0IHNldHVwICovCiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfSEFORExFX1BSRVNFTlQ7CiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gb3Jpbm9jb19pbnRlcnJ1cHQ7Ci0JbGluay0+aXJxLkluc3RhbmNlID0gZGV2OworCWxpbmstPmlycS5JbnN0YW5jZSA9IHByaXY7CiAKIAkvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcwogCSAqIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvcgpAQCAtMjE5LDE0ICsyMTcsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgc3BlY3RydW1fY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBsaW5rLT5wcml2OwogCiAJaWYgKGxpbmstPmRldl9ub2RlKQotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCQlvcmlub2NvX2lmX2RlbChwcml2KTsKIAogCXNwZWN0cnVtX2NzX3JlbGVhc2UobGluayk7CiAKLQlmcmVlX29yaW5vY29kZXYoZGV2KTsKKwlmcmVlX29yaW5vY29kZXYocHJpdik7CiB9CQkJCS8qIHNwZWN0cnVtX2NzX2RldGFjaCAqLwogCiAvKgpAQCAtMzA2LDggKzMwNCw3IEBACiBzdGF0aWMgaW50CiBzcGVjdHJ1bV9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGxhc3RfZm4sIGxhc3RfcmV0OwpAQCAtMzYyLDM0ICszNTksMzEgQEAKIAkJIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogCS8qIE9rLCB3ZSBoYXZlIHRoZSBjb25maWd1cmF0aW9uLCBwcmVwYXJlIHRvIHJlZ2lzdGVyIHRoZSBuZXRkZXYgKi8KLQlkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKLQlkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKIAljYXJkLT5ub2RlLm1ham9yID0gY2FyZC0+bm9kZS5taW5vciA9IDA7CiAKIAkvKiBSZXNldCBjYXJkICovCiAJaWYgKHNwZWN0cnVtX2NzX2hhcmRfcmVzZXQocHJpdikgIT0gMCkKIAkJZ290byBmYWlsZWQ7CiAKLQlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKLQkvKiBUZWxsIHRoZSBzdGFjayB3ZSBleGlzdCAqLwotCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CisJLyogSW5pdGlhbGlzZSB0aGUgbWFpbiBkcml2ZXIgKi8KKwlpZiAob3Jpbm9jb19pbml0KHByaXYpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAib3Jpbm9jb19pbml0KCkgZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogUmVnaXN0ZXIgYW4gaW50ZXJmYWNlIHdpdGggdGhlIHN0YWNrICovCisJaWYgKG9yaW5vY29faWZfYWRkKHByaXYsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkJCSAgIGxpbmstPmlycS5Bc3NpZ25lZElSUSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJvcmlub2NvX2lmX2FkZCgpIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkcyB0byBiZQogCSAqIGluaXRpYWxpemVkIGFuZCBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldl9ub2RlLiAqLwotCXN0cmNweShjYXJkLT5ub2RlLmRldl9uYW1lLCBkZXYtPm5hbWUpOworCXN0cmNweShjYXJkLT5ub2RlLmRldl9uYW1lLCBwcml2LT5uZGV2LT5uYW1lKTsKIAlsaW5rLT5kZXZfbm9kZSA9ICZjYXJkLT5ub2RlOyAvKiBsaW5rLT5kZXZfbm9kZSBiZWluZyBub24tTlVMTCBpcyBhbHNvCiAJCQkJICAgICAgICogdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQogCQkJCSAgICAgICAqIG5ldF9kZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLwotCi0JLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBEUklWRVJfTkFNRSAiIGF0ICVzLCBpcnEgJWQsIGlvICIKLQkgICAgICAgIjB4JTA0eC0weCUwNHhcbiIsIGRldi0+bmFtZSwgZGV2X25hbWUoZGV2LT5kZXYucGFyZW50KSwKLQkgICAgICAgbGluay0+aXJxLkFzc2lnbmVkSVJRLCBsaW5rLT5pby5CYXNlUG9ydDEsCi0JICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOwotCiAJcmV0dXJuIDA7CiAKICBjc19mYWlsZWQ6CkBAIC00MDgsOCArNDAyLDcgQEAKIHN0YXRpYyB2b2lkCiBzcGVjdHJ1bV9jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBsaW5rLT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBXZSdyZSBjb21taXR0ZWQgdG8gdGFraW5nIHRoZSBkZXZpY2UgYXdheSBub3csIHNvIG1hcmsgdGhlCkBAIC00MjcsMjMgKzQyMCwxMSBAQAogc3RhdGljIGludAogc3BlY3RydW1fY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBsaW5rLT5wcml2OwogCWludCBlcnIgPSAwOwogCiAJLyogTWFyayB0aGUgZGV2aWNlIGFzIHN0b3BwZWQsIHRvIGJsb2NrIElPIHVudGlsIGxhdGVyICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIGRvd25pbmcgaW50ZXJmYWNlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCi0JbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCXByaXYtPmh3X3VuYXZhaWxhYmxlKys7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJb3Jpbm9jb19kb3duKHByaXYpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ1MSwzMyArNDMyLDEwIEBACiBzdGF0aWMgaW50CiBzcGVjdHJ1bV9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBsaW5rLT5wcml2OworCWludCBlcnIgPSBvcmlub2NvX3VwKHByaXYpOwogCi0JZXJyID0gb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlLWluaXRpYWxpemluZyBmaXJtd2FyZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQlwcml2LT5od191bmF2YWlsYWJsZS0tOwotCi0JaWYgKHByaXYtPm9wZW4gJiYgIXByaXYtPmh3X3VuYXZhaWxhYmxlKSB7Ci0JCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwotCQlpZiAoZXJyKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmVzdGFydGluZyBjYXJkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmMKaW5kZXggM2YwODE0Mi4uNzY5OGZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogCiAjaW5jbHVkZSAiaGVybWVzLmgiCiAjaW5jbHVkZSAiaGVybWVzX3JpZC5oIgpAQCAtMjEsOSArMjIsNzAgQEAKIAogI2RlZmluZSBNQVhfUklEX0xFTiAxMDI0CiAKKy8qIEhlbHBlciByb3V0aW5lIHRvIHJlY29yZCBrZXlzCisgKiBEbyBub3QgY2FsbCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCitzdGF0aWMgaW50IG9yaW5vY29fc2V0X2tleShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgaW5kZXgsCisJCQkgICBlbnVtIG9yaW5vY29fYWxnIGFsZywgY29uc3QgdTggKmtleSwgaW50IGtleV9sZW4sCisJCQkgICBjb25zdCB1OCAqc2VxLCBpbnQgc2VxX2xlbikKK3sKKwlremZyZWUocHJpdi0+a2V5c1tpbmRleF0ua2V5KTsKKwlremZyZWUocHJpdi0+a2V5c1tpbmRleF0uc2VxKTsKKworCWlmIChrZXlfbGVuKSB7CisJCXByaXYtPmtleXNbaW5kZXhdLmtleSA9IGt6YWxsb2Moa2V5X2xlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdi0+a2V5c1tpbmRleF0ua2V5KQorCQkJZ290byBub21lbTsKKwl9IGVsc2UKKwkJcHJpdi0+a2V5c1tpbmRleF0ua2V5ID0gTlVMTDsKKworCWlmIChzZXFfbGVuKSB7CisJCXByaXYtPmtleXNbaW5kZXhdLnNlcSA9IGt6YWxsb2Moc2VxX2xlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdi0+a2V5c1tpbmRleF0uc2VxKQorCQkJZ290byBmcmVlX2tleTsKKwl9IGVsc2UKKwkJcHJpdi0+a2V5c1tpbmRleF0uc2VxID0gTlVMTDsKKworCXByaXYtPmtleXNbaW5kZXhdLmtleV9sZW4gPSBrZXlfbGVuOworCXByaXYtPmtleXNbaW5kZXhdLnNlcV9sZW4gPSBzZXFfbGVuOworCisJaWYgKGtleV9sZW4pCisJCW1lbWNweShwcml2LT5rZXlzW2luZGV4XS5rZXksIGtleSwga2V5X2xlbik7CisJaWYgKHNlcV9sZW4pCisJCW1lbWNweShwcml2LT5rZXlzW2luZGV4XS5zZXEsIHNlcSwgc2VxX2xlbik7CisKKwlzd2l0Y2ggKGFsZykgeworCWNhc2UgT1JJTk9DT19BTEdfVEtJUDoKKwkJcHJpdi0+a2V5c1tpbmRleF0uY2lwaGVyID0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDsKKwkJYnJlYWs7CisKKwljYXNlIE9SSU5PQ09fQUxHX1dFUDoKKwkJcHJpdi0+a2V5c1tpbmRleF0uY2lwaGVyID0gKGtleV9sZW4gPiBTTUFMTF9LRVlfU0laRSkgPworCQkJV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0IDogV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA7CisJCWJyZWFrOworCisJY2FzZSBPUklOT0NPX0FMR19OT05FOgorCWRlZmF1bHQ6CisJCXByaXYtPmtleXNbaW5kZXhdLmNpcGhlciA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworCitmcmVlX2tleToKKwlrZnJlZShwcml2LT5rZXlzW2luZGV4XS5rZXkpOworCXByaXYtPmtleXNbaW5kZXhdLmtleSA9IE5VTEw7CisKK25vbWVtOgorCXByaXYtPmtleXNbaW5kZXhdLmtleV9sZW4gPSAwOworCXByaXYtPmtleXNbaW5kZXhdLnNlcV9sZW4gPSAwOworCXByaXYtPmtleXNbaW5kZXhdLmNpcGhlciA9IDA7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKwogc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICpvcmlub2NvX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZwcml2LT53c3RhdHM7CiAJaW50IGVycjsKQEAgLTUxLDcgKzExMyw3IEBACiAJICogaGVyZSBzbyB3ZSdyZSBub3Qgc2FmZSB0byBzbGVlcCBoZXJlLiAqLwogCWhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX1RBTExJRVMpOwogCi0JaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgeworCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CiAJCW1lbXNldCgmd3N0YXRzLT5xdWFsLCAwLCBzaXplb2Yod3N0YXRzLT5xdWFsKSk7CiAJCS8qIElmIGEgc3B5IGFkZHJlc3MgaXMgZGVmaW5lZCwgd2UgcmVwb3J0IHN0YXRzIG9mIHRoZQogCQkgKiBmaXJzdCBzcHkgYWRkcmVzcyAtIEplYW4gSUkgKi8KQEAgLTg3LDMxICsxNDksMTIgQEAKIC8qIFdpcmVsZXNzIGV4dGVuc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldG5hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgY2hhciAqbmFtZSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IG51bXJhdGVzOwotCWludCBlcnI7Ci0KLQllcnIgPSBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChwcml2LCAmbnVtcmF0ZXMsIE5VTEwsIDApOwotCi0JaWYgKCFlcnIgJiYgKG51bXJhdGVzID4gMikpCi0JCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTFiIik7Ci0JZWxzZQotCQlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExLURTIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJc3RydWN0IHNvY2thZGRyICphcF9hZGRyLAogCQkJCWNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RhdGljIGNvbnN0IHU4IG9mZl9hZGRyW10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKQEAgLTE0Miw3ICsxODUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAocHJpdi0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBKSB7CisJaWYgKHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTWFudWFsIHJvYW1pbmcgc3VwcG9ydGVkIG9ubHkgaW4gIgogCQkgICAgICAgIm1hbmFnZWQgbW9kZVxuIiwgZGV2LT5uYW1lKTsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CkBAIC0xNzIsOSArMjE1LDggQEAKIAkJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsCiAJCQkJY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCi0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTE4MiwxOTcgKzIyNCwyMyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVEJTU0lELAotCQkJICAgICAgRVRIX0FMRU4sIE5VTEwsIGFwX2FkZHItPnNhX2RhdGEpOworCWVyciA9IG9yaW5vY29faHdfZ2V0X2N1cnJlbnRfYnNzaWQocHJpdiwgYXBfYWRkci0+c2FfZGF0YSk7CiAKIAlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgdTMyICptb2RlLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSAqbW9kZSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXN3aXRjaCAoKm1vZGUpIHsKLQljYXNlIElXX01PREVfQURIT0M6Ci0JCWlmICghcHJpdi0+aGFzX2lic3MgJiYgIXByaXYtPmhhc19wb3J0MykKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQlicmVhazsKLQotCWNhc2UgSVdfTU9ERV9JTkZSQToKLQkJYnJlYWs7Ci0KLQljYXNlIElXX01PREVfTU9OSVRPUjoKLQkJaWYgKHByaXYtPmJyb2tlbl9tb25pdG9yICYmICFmb3JjZV9tb25pdG9yKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTW9uaXRvciBtb2RlIHN1cHBvcnQgaXMgIgotCQkJICAgICAgICJidWdneSBpbiB0aGlzIGZpcm13YXJlLCBub3QgZW5hYmxpbmdcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7Ci0JCXByaXYtPml3X21vZGUgPSAqbW9kZTsKLQkJc2V0X3BvcnRfdHlwZShwcml2KTsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgdTMyICptb2RlLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCSptb2RlID0gcHJpdi0+aXdfbW9kZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGl3cmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgc3RydWN0IGl3X3BvaW50ICpycnEsCi0JCQkJICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAwOwotCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOwotCWludCBudW1yYXRlczsKLQlpbnQgaSwgazsKLQotCXJycS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7Ci0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7Ci0KLQlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKLQlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAyMjsKLQotCS8qIFNldCBhdmFpbGFibGUgY2hhbm5lbHMvZnJlcXVlbmNpZXMgKi8KLQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gTlVNX0NIQU5ORUxTOwotCWsgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykgewotCQlpZiAocHJpdi0+Y2hhbm5lbF9tYXNrICYgKDEgPDwgaSkpIHsKLQkJCXJhbmdlLT5mcmVxW2tdLmkgPSBpICsgMTsKLQkJCXJhbmdlLT5mcmVxW2tdLm0gPSAoaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGkgKyAxKSAqCi0JCQkJCSAgICAxMDAwMDApOwotCQkJcmFuZ2UtPmZyZXFba10uZSA9IDE7Ci0JCQlrKys7Ci0JCX0KLQotCQlpZiAoayA+PSBJV19NQVhfRlJFUVVFTkNJRVMpCi0JCQlicmVhazsKLQl9Ci0JcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBrOwotCXJhbmdlLT5zZW5zaXRpdml0eSA9IDM7Ci0KLQlpZiAocHJpdi0+aGFzX3dlcCkgewotCQlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE9SSU5PQ09fTUFYX0tFWVM7Ci0JCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gU01BTExfS0VZX1NJWkU7Ci0JCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAxOwotCi0JCWlmIChwcml2LT5oYXNfYmlnX3dlcCkgewotCQkJcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSBMQVJHRV9LRVlfU0laRTsKLQkJCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOwotCQl9Ci0JfQotCi0JaWYgKHByaXYtPmhhc193cGEpCi0JCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8IElXX0VOQ19DQVBBX0NJUEhFUl9US0lQOwotCi0JaWYgKChwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MpICYmICghU1BZX05VTUJFUihwcml2KSkpIHsKLQkJLyogUXVhbGl0eSBzdGF0cyBtZWFuaW5nbGVzcyBpbiBhZC1ob2MgbW9kZSAqLwotCX0gZWxzZSB7Ci0JCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMHg4YiAtIDB4MmY7Ci0JCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDB4MmYgLSAweDk1IC0gMTsKLQkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMHgyZiAtIDB4OTUgLSAxOwotCQkvKiBOZWVkIHRvIGdldCBiZXR0ZXIgdmFsdWVzICovCi0JCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gMHgyNDsKLQkJcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gMHhDMjsKLQkJcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gMHg5RTsKLQl9Ci0KLQllcnIgPSBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChwcml2LCAmbnVtcmF0ZXMsCi0JCQkJCSByYW5nZS0+Yml0cmF0ZSwgSVdfTUFYX0JJVFJBVEVTKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCXJhbmdlLT5udW1fYml0cmF0ZXMgPSBudW1yYXRlczsKLQotCS8qIFNldCBhbiBpbmRpY2F0aW9uIG9mIHRoZSBtYXggVENQIHRocm91Z2hwdXQgaW4gYml0L3MgdGhhdCB3ZSBjYW4KLQkgKiBleHBlY3QgdXNpbmcgdGhpcyBpbnRlcmZhY2UuIE1heSBiZSB1c2UgZm9yIFFvUyBzdHVmZi4uLgotCSAqIEplYW4gSUkgKi8KLQlpZiAobnVtcmF0ZXMgPiAyKQotCQlyYW5nZS0+dGhyb3VnaHB1dCA9IDUgKiAxMDAwICogMTAwMDsJLyogfjUgTWIvcyAqLwotCWVsc2UKLQkJcmFuZ2UtPnRocm91Z2hwdXQgPSAxLjUgKiAxMDAwICogMTAwMDsJLyogfjEuNSBNYi9zICovCi0KLQlyYW5nZS0+bWluX3J0cyA9IDA7Ci0JcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OwotCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKLQlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OwotCi0JcmFuZ2UtPm1pbl9wbXAgPSAwOwotCXJhbmdlLT5tYXhfcG1wID0gNjU1MzUwMDA7Ci0JcmFuZ2UtPm1pbl9wbXQgPSAwOwotCXJhbmdlLT5tYXhfcG10ID0gNjU1MzUgKiAxMDAwOwkvKiA/Pz8gKi8KLQlyYW5nZS0+cG1wX2ZsYWdzID0gSVdfUE9XRVJfUEVSSU9EOwotCXJhbmdlLT5wbXRfZmxhZ3MgPSBJV19QT1dFUl9USU1FT1VUOwotCXJhbmdlLT5wbV9jYXBhID0gKElXX1BPV0VSX1BFUklPRCB8IElXX1BPV0VSX1RJTUVPVVQgfAotCQkJICBJV19QT1dFUl9VTklDQVNUX1IpOwotCi0JcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX0xJRkVUSU1FOwotCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOwotCXJhbmdlLT5yX3RpbWVfZmxhZ3MgPSBJV19SRVRSWV9MSUZFVElNRTsKLQlyYW5nZS0+bWluX3JldHJ5ID0gMDsKLQlyYW5nZS0+bWF4X3JldHJ5ID0gNjU1MzU7CS8qID8/PyAqLwotCXJhbmdlLT5taW5fcl90aW1lID0gMDsKLQlyYW5nZS0+bWF4X3JfdGltZSA9IDY1NTM1ICogMTAwMDsJLyogPz8/ICovCi0KLQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFKQotCQlyYW5nZS0+c2Nhbl9jYXBhID0gSVdfU0NBTl9DQVBBX0VTU0lEOwotCWVsc2UKLQkJcmFuZ2UtPnNjYW5fY2FwYSA9IElXX1NDQU5fQ0FQQV9OT05FOwotCi0JLyogRXZlbnQgY2FwYWJpbGl0eSAoa2VybmVsKSAqLwotCUlXX0VWRU5UX0NBUEFfU0VUX0tFUk5FTChyYW5nZS0+ZXZlbnRfY2FwYSk7Ci0JLyogRXZlbnQgY2FwYWJpbGl0eSAoZHJpdmVyKSAqLwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXVEhSU1BZKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV0FQKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1NDQU4pOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBJV0VWVFhEUk9QKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKIAkJCQkgICAgIGNoYXIgKmtleWJ1ZikKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaW50IGluZGV4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKIAlpbnQgc2V0aW5kZXggPSBwcml2LT50eF9rZXk7Ci0JaW50IGVuY29kZV9hbGcgPSBwcml2LT5lbmNvZGVfYWxnOworCWVudW0gb3Jpbm9jb19hbGcgZW5jb2RlX2FsZyA9IHByaXYtPmVuY29kZV9hbGc7CiAJaW50IHJlc3RyaWN0ZWQgPSBwcml2LT53ZXBfcmVzdHJpY3Q7Ci0JdTE2IHhsZW4gPSAwOwogCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMzkyLDI1ICsyNjAsMTcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIENsZWFyIGFueSBUS0lQIGtleSB3ZSBoYXZlICovCi0JaWYgKChwcml2LT5oYXNfd3BhKSAmJiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApKQorCWlmICgocHJpdi0+aGFzX3dwYSkgJiYgKHByaXYtPmVuY29kZV9hbGcgPT0gT1JJTk9DT19BTEdfVEtJUCkpCiAJCSh2b2lkKSBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHByaXYsIHNldGluZGV4KTsKIAogCWlmIChlcnEtPmxlbmd0aCA+IDApIHsKIAkJaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBPUklOT0NPX01BWF9LRVlTKSkKIAkJCWluZGV4ID0gcHJpdi0+dHhfa2V5OwogCi0JCS8qIEFkanVzdCBrZXkgbGVuZ3RoIHRvIGEgc3VwcG9ydGVkIHZhbHVlICovCi0JCWlmIChlcnEtPmxlbmd0aCA+IFNNQUxMX0tFWV9TSVpFKQotCQkJeGxlbiA9IExBUkdFX0tFWV9TSVpFOwotCQllbHNlIGlmIChlcnEtPmxlbmd0aCA+IDApCi0JCQl4bGVuID0gU01BTExfS0VZX1NJWkU7Ci0JCWVsc2UKLQkJCXhsZW4gPSAwOwotCiAJCS8qIFN3aXRjaCBvbiBXRVAgaWYgb2ZmICovCi0JCWlmICgoZW5jb2RlX2FsZyAhPSBJV19FTkNPREVfQUxHX1dFUCkgJiYgKHhsZW4gPiAwKSkgeworCQlpZiAoZW5jb2RlX2FsZyAhPSBPUklOT0NPX0FMR19XRVApIHsKIAkJCXNldGluZGV4ID0gaW5kZXg7Ci0JCQllbmNvZGVfYWxnID0gSVdfRU5DT0RFX0FMR19XRVA7CisJCQllbmNvZGVfYWxnID0gT1JJTk9DT19BTEdfV0VQOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogSW1wb3J0YW50IG5vdGUgOiBpZiB0aGUgdXNlciBkbyAiaXdjb25maWcgZXRoMCBlbmMgb2ZmIiwKQEAgLTQyMyw3ICsyODMsNyBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJLyogU2V0IHRoZSBpbmRleCA6IENoZWNrIHRoYXQgdGhlIGtleSBpcyB2YWxpZCAqLwotCQkJaWYgKHByaXYtPmtleXNbaW5kZXhdLmxlbiA9PSAwKSB7CisJCQlpZiAocHJpdi0+a2V5c1tpbmRleF0ua2V5X2xlbiA9PSAwKSB7CiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQlnb3RvIG91dDsKIAkJCX0KQEAgLTQzMiwxNyArMjkyLDE1IEBACiAJfQogCiAJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCi0JCWVuY29kZV9hbGcgPSBJV19FTkNPREVfQUxHX05PTkU7CisJCWVuY29kZV9hbGcgPSBPUklOT0NPX0FMR19OT05FOwogCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pCiAJCXJlc3RyaWN0ZWQgPSAwOwogCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpCiAJCXJlc3RyaWN0ZWQgPSAxOwogCiAJaWYgKGVycS0+cG9pbnRlciAmJiBlcnEtPmxlbmd0aCA+IDApIHsKLQkJcHJpdi0+a2V5c1tpbmRleF0ubGVuID0gY3B1X3RvX2xlMTYoeGxlbik7Ci0JCW1lbXNldChwcml2LT5rZXlzW2luZGV4XS5kYXRhLCAwLAotCQkgICAgICAgc2l6ZW9mKHByaXYtPmtleXNbaW5kZXhdLmRhdGEpKTsKLQkJbWVtY3B5KHByaXYtPmtleXNbaW5kZXhdLmRhdGEsIGtleWJ1ZiwgZXJxLT5sZW5ndGgpOworCQllcnIgPSBvcmlub2NvX3NldF9rZXkocHJpdiwgaW5kZXgsIE9SSU5PQ09fQUxHX1dFUCwga2V5YnVmLAorCQkJCSAgICAgIGVycS0+bGVuZ3RoLCBOVUxMLCAwKTsKIAl9CiAJcHJpdi0+dHhfa2V5ID0gc2V0aW5kZXg7CiAKQEAgLTQ2OSw5ICszMjcsOCBAQAogCQkJCSAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsCiAJCQkJICAgICBjaGFyICprZXlidWYpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCBpbmRleCA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JdTE2IHhsZW4gPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIXByaXYtPmhhc193ZXApCkBAIC00OTMsMTEgKzM1MCw5IEBACiAJZWxzZQogCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOwogCi0JeGxlbiA9IGxlMTZfdG9fY3B1KHByaXYtPmtleXNbaW5kZXhdLmxlbik7CisJZXJxLT5sZW5ndGggPSBwcml2LT5rZXlzW2luZGV4XS5rZXlfbGVuOwogCi0JZXJxLT5sZW5ndGggPSB4bGVuOwotCi0JbWVtY3B5KGtleWJ1ZiwgcHJpdi0+a2V5c1tpbmRleF0uZGF0YSwgT1JJTk9DT19NQVhfS0VZX1NJWkUpOworCW1lbWNweShrZXlidWYsIHByaXYtPmtleXNbaW5kZXhdLmtleSwgZXJxLT5sZW5ndGgpOwogCiAJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTUwOCw3ICszNjMsNyBAQAogCQkJCSAgc3RydWN0IGl3X3BvaW50ICplcnEsCiAJCQkJICBjaGFyICplc3NpZGJ1ZikKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIE5vdGUgOiBFU1NJRCBpcyBpZ25vcmVkIGluIEFkLUhvYyBkZW1vIG1vZGUsIGJ1dCB3ZSBjYW4gc2V0IGl0CkBAIC01MzksNyArMzk0LDcgQEAKIAkJCQkgIHN0cnVjdCBpd19wb2ludCAqZXJxLAogCQkJCSAgY2hhciAqZXNzaWRidWYpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCBhY3RpdmU7CiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTU2Miw1OSArNDE3LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRuaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wb2ludCAqbnJxLAotCQkJCSBjaGFyICpuaWNrYnVmKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAobnJxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKLQkJcmV0dXJuIC1FMkJJRzsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JbWVtc2V0KHByaXYtPm5pY2ssIDAsIHNpemVvZihwcml2LT5uaWNrKSk7Ci0JbWVtY3B5KHByaXYtPm5pY2ssIG5pY2tidWYsIG5ycS0+bGVuZ3RoKTsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0bmljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKm5ycSwKLQkJCQkgY2hhciAqbmlja2J1ZikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQltZW1jcHkobmlja2J1ZiwgcHJpdi0+bmljaywgSVdfRVNTSURfTUFYX1NJWkUpOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlucnEtPmxlbmd0aCA9IHN0cmxlbihwcml2LT5uaWNrKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSBzdHJ1Y3QgaXdfZnJlcSAqZnJxLAogCQkJCSBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaW50IGNoYW4gPSAtMTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiAKIAkvKiBJbiBpbmZyYXN0cnVjdHVyZSBtb2RlIHRoZSBBUCBzZXRzIHRoZSBjaGFubmVsICovCi0JaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSkKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKChmcnEtPmUgPT0gMCkgJiYgKGZycS0+bSA8PSAxMDAwKSkgewpAQCAtNjQwLDcgKzQ1NCw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAlwcml2LT5jaGFubmVsID0gY2hhbjsKLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CiAJCS8qIEZhc3QgY2hhbm5lbCBjaGFuZ2UgLSBubyBjb21taXQgaWYgc3VjY2Vzc2Z1bCAqLwogCQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RFU1QgfApAQCAtNjU3LDcgKzQ3MSw3IEBACiAJCQkJIHN0cnVjdCBpd19mcmVxICpmcnEsCiAJCQkJIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlpbnQgdG1wOwogCiAJLyogTG9ja2luZyBkb25lIGluIHRoZXJlICovCkBAIC02NzYsNyArNDkwLDcgQEAKIAkJCQkgc3RydWN0IGl3X3BhcmFtICpzcnEsCiAJCQkJIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJdTE2IHZhbDsKIAlpbnQgZXJyOwpAQCAtNzA1LDcgKzUxOSw3IEBACiAJCQkJIHN0cnVjdCBpd19wYXJhbSAqc3JxLAogCQkJCSBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaW50IHZhbCA9IHNycS0+dmFsdWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNzI4LDcgKzU0Miw3IEBACiAJCQkJc3RydWN0IGl3X3BhcmFtICpycnEsCiAJCQkJY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCB2YWwgPSBycnEtPnZhbHVlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTc1Miw3ICs1NjYsNyBAQAogCQkJCXN0cnVjdCBpd19wYXJhbSAqcnJxLAogCQkJCWNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAogCXJycS0+dmFsdWUgPSBwcml2LT5ydHNfdGhyZXNoOwogCXJycS0+ZGlzYWJsZWQgPSAocnJxLT52YWx1ZSA9PSAyMzQ3KTsKQEAgLTc2Niw3ICs1ODAsNyBAQAogCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKmZycSwKIAkJCQkgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtODA2LDcgKzYyMCw3IEBACiAJCQkJIHN0cnVjdCBpd19wYXJhbSAqZnJxLAogCQkJCSBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCWludCBlcnI7CiAJdTE2IHZhbDsKQEAgLTg0Nyw3ICs2NjEsNyBAQAogCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKIAkJCQkgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCByYXRlbW9kZTsKIAlpbnQgYml0cmF0ZTsgLyogMTAwcyBvZiBraWxvYml0cyAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04ODEsNyArNjk1LDcgQEAKIAkJCQkgc3RydWN0IGl3X3BhcmFtICpycnEsCiAJCQkJIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlpbnQgZXJyID0gMDsKIAlpbnQgYml0cmF0ZSwgYXV0b21hdGljOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC05MTAsNyArNzI0LDcgQEAKIAkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcHJxLAogCQkJCSAgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtOTY0LDcgKzc3OCw3IEBACiAJCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnBycSwKIAkJCQkgIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGVyciA9IDA7CiAJdTE2IGVuYWJsZSwgcGVyaW9kLCB0aW1lb3V0LCBtY2FzdDsKQEAgLTEwMTgsMTMgKzgzMiwxMiBAQAogCQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAogCQkJCSAgICAgICBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CiAJaW50IGlkeCwgYWxnID0gZXh0LT5hbGcsIHNldF9rZXkgPSAxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IC1FSU5WQUw7Ci0JdTE2IGtleV9sZW47CiAKIAlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTEwNTYsNDggKzg2OSw0MSBAQAogCQkvKiBTZXQgdGhlIHJlcXVlc3RlZCBrZXkgZmlyc3QgKi8KIAkJc3dpdGNoIChhbGcpIHsKIAkJY2FzZSBJV19FTkNPREVfQUxHX05PTkU6Ci0JCQlwcml2LT5lbmNvZGVfYWxnID0gYWxnOwotCQkJcHJpdi0+a2V5c1tpZHhdLmxlbiA9IDA7CisJCQlwcml2LT5lbmNvZGVfYWxnID0gT1JJTk9DT19BTEdfTk9ORTsKKwkJCWVyciA9IG9yaW5vY29fc2V0X2tleShwcml2LCBpZHgsIE9SSU5PQ09fQUxHX05PTkUsCisJCQkJCSAgICAgIE5VTEwsIDAsIE5VTEwsIDApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKLQkJCWlmIChleHQtPmtleV9sZW4gPiBTTUFMTF9LRVlfU0laRSkKLQkJCQlrZXlfbGVuID0gTEFSR0VfS0VZX1NJWkU7Ci0JCQllbHNlIGlmIChleHQtPmtleV9sZW4gPiAwKQotCQkJCWtleV9sZW4gPSBTTUFMTF9LRVlfU0laRTsKLQkJCWVsc2UKKwkJCWlmIChleHQtPmtleV9sZW4gPD0gMCkKIAkJCQlnb3RvIG91dDsKIAotCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IGFsZzsKLQkJCXByaXYtPmtleXNbaWR4XS5sZW4gPSBjcHVfdG9fbGUxNihrZXlfbGVuKTsKLQotCQkJa2V5X2xlbiA9IG1pbihleHQtPmtleV9sZW4sIGtleV9sZW4pOwotCi0JCQltZW1zZXQocHJpdi0+a2V5c1tpZHhdLmRhdGEsIDAsIE9SSU5PQ09fTUFYX0tFWV9TSVpFKTsKLQkJCW1lbWNweShwcml2LT5rZXlzW2lkeF0uZGF0YSwgZXh0LT5rZXksIGtleV9sZW4pOworCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IE9SSU5PQ09fQUxHX1dFUDsKKwkJCWVyciA9IG9yaW5vY29fc2V0X2tleShwcml2LCBpZHgsIE9SSU5PQ09fQUxHX1dFUCwKKwkJCQkJICAgICAgZXh0LT5rZXksIGV4dC0+a2V5X2xlbiwgTlVMTCwgMCk7CiAJCQlicmVhazsKIAogCQljYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKIAkJewotCQkJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCQkJdTggKnRraXBfaXYgPSBOVUxMOwogCiAJCQlpZiAoIXByaXYtPmhhc193cGEgfHwKLQkJCSAgICAoZXh0LT5rZXlfbGVuID4gc2l6ZW9mKHByaXYtPnRraXBfa2V5WzBdKSkpCisJCQkgICAgKGV4dC0+a2V5X2xlbiA+IHNpemVvZihzdHJ1Y3Qgb3Jpbm9jb190a2lwX2tleSkpKQogCQkJCWdvdG8gb3V0OwogCi0JCQlwcml2LT5lbmNvZGVfYWxnID0gYWxnOwotCQkJbWVtc2V0KCZwcml2LT50a2lwX2tleVtpZHhdLCAwLAotCQkJICAgICAgIHNpemVvZihwcml2LT50a2lwX2tleVtpZHhdKSk7Ci0JCQltZW1jcHkoJnByaXYtPnRraXBfa2V5W2lkeF0sIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOworCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IE9SSU5PQ09fQUxHX1RLSVA7CiAKIAkJCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfUlhfU0VRX1ZBTElEKQogCQkJCXRraXBfaXYgPSAmZXh0LT5yeF9zZXFbMF07CiAKLQkJCWVyciA9IF9fb3Jpbm9jb19od19zZXRfdGtpcF9rZXkoaHcsIGlkeCwKKwkJCWVyciA9IG9yaW5vY29fc2V0X2tleShwcml2LCBpZHgsIE9SSU5PQ09fQUxHX1RLSVAsCisJCQkJCSAgICAgIGV4dC0+a2V5LCBleHQtPmtleV9sZW4sIHRraXBfaXYsCisJCQkJCSAgICAgIE9SSU5PQ09fU0VRX0xFTik7CisKKwkJCWVyciA9IF9fb3Jpbm9jb19od19zZXRfdGtpcF9rZXkocHJpdiwgaWR4LAogCQkJCSBleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSwKLQkJCQkgKHU4ICopICZwcml2LT50a2lwX2tleVtpZHhdLAotCQkJCSB0a2lwX2l2LCBOVUxMKTsKKwkJCQkgcHJpdi0+a2V5c1tpZHhdLmtleSwKKwkJCQkgdGtpcF9pdiwgT1JJTk9DT19TRVFfTEVOLCBOVUxMLCAwKTsKIAkJCWlmIChlcnIpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBUS0lQIGtleSIKIAkJCQkgICAgICAgIlxuIiwgZGV2LT5uYW1lLCBlcnIpOwpAQCAtMTEyMCw3ICs5MjYsNyBAQAogCQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAogCQkJCSAgICAgICBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CiAJaW50IGlkeCwgbWF4X2tleV9sZW47CkBAIC0xMTQ2LDIyICs5NTIsMjIgQEAKIAllbmNvZGluZy0+ZmxhZ3MgPSBpZHggKyAxOwogCW1lbXNldChleHQsIDAsIHNpemVvZigqZXh0KSk7CiAKLQlleHQtPmFsZyA9IHByaXYtPmVuY29kZV9hbGc7CiAJc3dpdGNoIChwcml2LT5lbmNvZGVfYWxnKSB7Ci0JY2FzZSBJV19FTkNPREVfQUxHX05PTkU6CisJY2FzZSBPUklOT0NPX0FMR19OT05FOgorCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKIAkJZXh0LT5rZXlfbGVuID0gMDsKIAkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKIAkJYnJlYWs7Ci0JY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKLQkJZXh0LT5rZXlfbGVuID0gbWluX3QodTE2LCBsZTE2X3RvX2NwdShwcml2LT5rZXlzW2lkeF0ubGVuKSwKLQkJCQkgICAgIG1heF9rZXlfbGVuKTsKLQkJbWVtY3B5KGV4dC0+a2V5LCBwcml2LT5rZXlzW2lkeF0uZGF0YSwgZXh0LT5rZXlfbGVuKTsKKwljYXNlIE9SSU5PQ09fQUxHX1dFUDoKKwkJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX1dFUDsKKwkJZXh0LT5rZXlfbGVuID0gbWluKHByaXYtPmtleXNbaWR4XS5rZXlfbGVuLCBtYXhfa2V5X2xlbik7CisJCW1lbWNweShleHQtPmtleSwgcHJpdi0+a2V5c1tpZHhdLmtleSwgZXh0LT5rZXlfbGVuKTsKIAkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOwogCQlicmVhazsKLQljYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKLQkJZXh0LT5rZXlfbGVuID0gbWluX3QodTE2LCBzaXplb2Yoc3RydWN0IG9yaW5vY29fdGtpcF9rZXkpLAotCQkJCSAgICAgbWF4X2tleV9sZW4pOwotCQltZW1jcHkoZXh0LT5rZXksICZwcml2LT50a2lwX2tleVtpZHhdLCBleHQtPmtleV9sZW4pOworCWNhc2UgT1JJTk9DT19BTEdfVEtJUDoKKwkJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX1RLSVA7CisJCWV4dC0+a2V5X2xlbiA9IG1pbihwcml2LT5rZXlzW2lkeF0ua2V5X2xlbiwgbWF4X2tleV9sZW4pOworCQltZW1jcHkoZXh0LT5rZXksIHByaXYtPmtleXNbaWR4XS5rZXksIGV4dC0+a2V5X2xlbik7CiAJCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKIAkJYnJlYWs7CiAJfQpAQCAtMTE3Nyw3ICs5ODMsNyBAQAogCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTI1NSw3ICsxMDYxLDcgQEAKIAkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwpAQCAtMTI5NSw3ICsxMTAxLDcgQEAKIAkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAl1OCAqYnVmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTEzMzgsNyArMTE0NCw3IEBACiAJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gMDsKIApAQCAtMTM2Nyw4ICsxMTczLDcgQEAKIAkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpd19tbG1lICptbG1lID0gKHN0cnVjdCBpd19tbG1lICopZXh0cmE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKQEAgLTEzODIsMTkgKzExODcsMTEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIElXX01MTUVfRElTQVNTT0M6Ci0JewotCQlzdHJ1Y3QgewotCQkJdTggYWRkcltFVEhfQUxFTl07Ci0JCQlfX2xlMTYgcmVhc29uX2NvZGU7Ci0JCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJ1ZjsKIAotCQltZW1jcHkoYnVmLmFkZHIsIG1sbWUtPmFkZHIuc2FfZGF0YSwgRVRIX0FMRU4pOwotCQlidWYucmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihtbG1lLT5yZWFzb25fY29kZSk7Ci0JCXJldCA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GRElTQVNTT0NJQVRFLAotCQkJCQkgICZidWYpOworCQlyZXQgPSBvcmlub2NvX2h3X2Rpc2Fzc29jaWF0ZShwcml2LCBtbG1lLT5hZGRyLnNhX2RhdGEsCisJCQkJCSAgICAgIG1sbWUtPnJlYXNvbl9jb2RlKTsKIAkJYnJlYWs7Ci0JfQorCiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJfQpAQCAtMTQwOCw3ICsxMjA1LDcgQEAKIAkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcnJxLAogCQkJCSAgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAlpbnQgZXJyID0gMDsKIAl1MTYgc2hvcnRfbGltaXQsIGxvbmdfbGltaXQsIGxpZmV0aW1lOwpAQCAtMTQ2Miw3ICsxMjU5LDcgQEAKIAkJCSAgICAgICB2b2lkICp3cnF1LAogCQkJICAgICAgIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAogCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKQEAgLTE0ODcsMTQgKzEyODQsMTQgQEAKIAkJCQkgICAgIGNoYXIgKmV4dHJhKQogCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCB2YWwgPSAqKChpbnQgKikgZXh0cmEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXByaXYtPmlic3NfcG9ydCA9IHZhbCA7CisJcHJpdi0+aWJzc19wb3J0ID0gdmFsOwogCiAJLyogQWN0dWFsbHkgdXBkYXRlIHRoZSBtb2RlIHdlIGFyZSB1c2luZyAqLwogCXNldF9wb3J0X3R5cGUocHJpdik7CkBAIC0xNTA4LDcgKzEzMDUsNyBAQAogCQkJCSAgICAgdm9pZCAqd3JxdSwKIAkJCQkgICAgIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlpbnQgKnZhbCA9IChpbnQgKikgZXh0cmE7CiAKIAkqdmFsID0gcHJpdi0+aWJzc19wb3J0OwpAQCAtMTUyMCw3ICsxMzE3LDcgQEAKIAkJCQkgIHZvaWQgKndycXUsCiAJCQkJICBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaW50IHZhbCA9ICooKGludCAqKSBleHRyYSk7CiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE1NjYsNyArMTM2Myw3IEBACiAJCQkJICB2b2lkICp3cnF1LAogCQkJCSAgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCAqdmFsID0gKGludCAqKSBleHRyYTsKIAogCSp2YWwgPSBwcml2LT5wcmVmZXJfcG9ydDM7CkBAIC0xNTc4LDcgKzEzNzUsNyBAQAogCQkJCSAgICAgdm9pZCAqd3JxdSwKIAkJCQkgICAgIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB2YWw7CiAKQEAgLTE2MTAsNyArMTQwNyw3IEBACiAJCQkJICAgICB2b2lkICp3cnF1LAogCQkJCSAgICAgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCAqdmFsID0gKGludCAqKSBleHRyYTsKIAogCWlmICghcHJpdi0+aGFzX3ByZWFtYmxlKQpAQCAtMTYzMCw3ICsxNDI3LDcgQEAKIAkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsCiAJCQkJY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAlpbnQgcmlkID0gZGF0YS0+ZmxhZ3M7CiAJdTE2IGxlbmd0aDsKQEAgLTE2NjEsNTE5ICsxNDU4LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBUcmlnZ2VyIGEgc2NhbiAobG9vayBmb3Igb3RoZXIgY2VsbHMgaW4gdGhlIHZpY2luaXR5KSAqLwotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHNjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BvaW50ICpzcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKnNpID0gKHN0cnVjdCBpd19zY2FuX3JlcSAqKSBleHRyYTsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogTm90ZSA6IHlvdSBtYXkgaGF2ZSByZWFsaXNlZCB0aGF0LCBhcyB0aGlzIGlzIGEgU0VUIG9wZXJhdGlvbiwKLQkgKiB0aGlzIGlzIHByaXZpbGVnZWQgYW5kIHRoZXJlZm9yZSBhIG5vcm1hbCB1c2VyIGNhbid0Ci0JICogcGVyZm9ybSBzY2FubmluZy4KLQkgKiBUaGlzIGlzIG5vdCBhbiBlcnJvciwgd2hpbGUgdGhlIGRldmljZSBwZXJmb3JtIHNjYW5uaW5nLAotCSAqIHRyYWZmaWMgZG9lc24ndCBmbG93LCBzbyBpdCdzIGEgcGVyZmVjdCBEb1MuLi4KLQkgKiBKZWFuIElJICovCi0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIFNjYW5uaW5nIHdpdGggcG9ydCAwIGRpc2FibGVkIHdvdWxkIGZhaWwgKi8KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQllcnIgPSAtRU5FVERPV047Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEluIG1vbml0b3IgbW9kZSwgdGhlIHNjYW4gcmVzdWx0cyBhcmUgYWx3YXlzIGVtcHR5LgotCSAqIFByb2JlIHJlc3BvbnNlcyBhcmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIgYXMgcmVjZWl2ZWQKLQkgKiBmcmFtZXMgYW5kIGNvdWxkIGJlIHByb2Nlc3NlZCBpbiBzb2Z0d2FyZS4gKi8KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIE5vdGUgOiBiZWNhdXNlIHdlIGRvbid0IGxvY2sgb3V0IHRoZSBpcnEgaGFuZGxlciwgdGhlIHdheQotCSAqIHdlIGFjY2VzcyBzY2FuIHZhcmlhYmxlcyBpbiBwcml2IGlzIGNyaXRpY2FsLgotCSAqCW8gc2Nhbl9pbnByb2dyZXNzIDogbm90IHRvdWNoZWQgYnkgaXJxIGhhbmRsZXIKLQkgKglvIHNjYW5fbW9kZSA6IG5vdCB0b3VjaGVkIGJ5IGlycSBoYW5kbGVyCi0JICogQmVmb3JlIG1vZGlmeWluZyBhbnl0aGluZyBvbiB0aG9zZSB2YXJpYWJsZXMsIHBsZWFzZSB0aGluayBoYXJkICEKLQkgKiBKZWFuIElJICovCi0KLQkvKiBTYXZlIGZsYWdzICovCi0JcHJpdi0+c2Nhbl9tb2RlID0gc3JxLT5mbGFnczsKLQotCS8qIEFsd2F5cyB0cmlnZ2VyIHNjYW5uaW5nLCBldmVuIGlmIGl0J3MgaW4gcHJvZ3Jlc3MuCi0JICogVGhpcyB3YXksIGlmIHRoZSBpbmZvIGZyYW1lIGdldCBsb3N0LCB3ZSB3aWxsIHJlY292ZXIgc29tZXdoYXQKLQkgKiBncmFjZWZ1bGx5ICAtIEplYW4gSUkgKi8KLQotCWlmIChwcml2LT5oYXNfaG9zdHNjYW4pIHsKLQkJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCQlIRVJNRVNfUklEX0NORkhPU1RTQ0FOX1NZTUJPTCwKLQkJCQkJCUhFUk1FU19IT1NUU0NBTl9TWU1CT0xfT05DRSB8Ci0JCQkJCQlIRVJNRVNfSE9TVFNDQU5fU1lNQk9MX0JDQVNUKTsKLQkJCWJyZWFrOwotCQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6IHsKLQkJCV9fbGUxNiByZXFbM107Ci0KLQkJCXJlcVswXSA9IGNwdV90b19sZTE2KDB4M2ZmZik7CS8qIEFsbCBjaGFubmVscyAqLwotCQkJcmVxWzFdID0gY3B1X3RvX2xlMTYoMHgwMDAxKTsJLyogcmF0ZSAxIE1icHMgKi8KLQkJCXJlcVsyXSA9IDA7CQkJLyogQW55IEVTU0lEICovCi0JCQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgSEVSTUVTX1JJRF9DTkZIT1NUU0NBTiwgJnJlcSk7Ci0JCX0KLQkJYnJlYWs7Ci0JCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKLQkJCWlmIChwcml2LT5zY2FuX21vZGUgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKLQkJCQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGlkYnVmOwotCQkJCXNpemVfdCBsZW4gPSBtaW4oc2l6ZW9mKGlkYnVmLnZhbCksCi0JCQkJCQkgKHNpemVfdCkgc2ktPmVzc2lkX2xlbik7Ci0JCQkJaWRidWYubGVuID0gY3B1X3RvX2xlMTYobGVuKTsKLQkJCQltZW1jcHkoaWRidWYudmFsLCBzaS0+ZXNzaWQsIGxlbik7Ci0KLQkJCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgICAgIEhFUk1FU19SSURfQ05GU0NBTlNTSURfQUdFUkUsCi0JCQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKGxlbiArIDIpLAotCQkJCQkgICAgICAgJmlkYnVmKTsKLQkJCX0gZWxzZQotCQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgIEhFUk1FU19SSURfQ05GU0NBTlNTSURfQUdFUkUsCi0JCQkJCQkgICAwKTsJLyogQW55IEVTU0lEICovCi0JCQlpZiAoZXJyKQotCQkJCWJyZWFrOwotCi0JCQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKSB7Ci0JCQkJLyogQ2xlYXIgc2NhbiByZXN1bHRzIGF0IHRoZSBzdGFydCBvZgotCQkJCSAqIGFuIGV4dGVuZGVkIHNjYW4gKi8KLQkJCQlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LAotCQkJCQkJbXNlY3NfdG9famlmZmllcygxNTAwMCkpOwotCi0JCQkJLyogVE9ETzogSXMgdGhpcyBhdmFpbGFibGUgb24gb2xkZXIgZmlybXdhcmU/Ci0JCQkJICogICBDYW4gd2UgdXNlIGl0IHRvIHNjYW4gc3BlY2lmaWMgY2hhbm5lbHMKLQkJCQkgKiAgIGZvciBJV19TQ0FOX1RISVNfRlJFUT8gKi8KLQkJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCQlIRVJNRVNfUklEX0NORlNDQU5DSEFOTkVMUzJHSFosCi0JCQkJCQkweDdGRkYpOwotCQkJCWlmIChlcnIpCi0JCQkJCWdvdG8gb3V0OwotCi0JCQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsCi0JCQkJCQkgICAgIEhFUk1FU19JTlFfQ0hBTk5FTElORk8pOwotCQkJfSBlbHNlCi0JCQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfU0NBTik7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZQotCQllcnIgPSBoZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9TQ0FOKTsKLQotCS8qIE9uZSBtb3JlIGNsaWVudCAqLwotCWlmICghZXJyKQotCQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAxOwotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotI2RlZmluZSBNQVhfQ1VTVE9NX0xFTiA2NAotCi0vKiBUcmFuc2xhdGUgc2NhbiBkYXRhIHJldHVybmVkIGZyb20gdGhlIGNhcmQgdG8gYSBjYXJkIGluZGVwZW5kYW50Ci0gKiBmb3JtYXQgdGhhdCB0aGUgV2lyZWxlc3MgVG9vbHMgd2lsbCB1bmRlcnN0YW5kIC0gSmVhbiBJSSAqLwotc3RhdGljIGlubGluZSBjaGFyICpvcmlub2NvX3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJCSAgIGNoYXIgKmN1cnJlbnRfZXYsCi0JCQkJCSAgIGNoYXIgKmVuZF9idWYsCi0JCQkJCSAgIHVuaW9uIGhlcm1lc19zY2FuX2luZm8gKmJzcywKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdTE2CQkJY2FwYWJpbGl0aWVzOwotCXUxNgkJCWNoYW5uZWw7Ci0Jc3RydWN0IGl3X2V2ZW50CQlpd2U7CQkvKiBUZW1wb3JhcnkgYnVmZmVyICovCi0JY2hhciBjdXN0b21bTUFYX0NVU1RPTV9MRU5dOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQotCS8qIEZpcnN0IGVudHJ5ICpNVVNUKiBiZSB0aGUgQVAgTUFDIGFkZHJlc3MgKi8KLQlpd2UuY21kID0gU0lPQ0dJV0FQOwotCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YS5ic3NpZCwgRVRIX0FMRU4pOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIElXX0VWX0FERFJfTEVOKTsKLQotCS8qIE90aGVyIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHdlIGdpdmUgdGhlbSAqLwotCi0JLyogQWRkIHRoZSBFU1NJRCAqLwotCWl3ZS51LmRhdGEubGVuZ3RoID0gbGUxNl90b19jcHUoYnNzLT5hLmVzc2lkX2xlbik7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoID4gMzIpCi0JCWl3ZS51LmRhdGEubGVuZ3RoID0gMzI7Ci0JaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKLQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJICAmaXdlLCBic3MtPmEuZXNzaWQpOwotCi0JLyogQWRkIG1vZGUgKi8KLQlpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0JY2FwYWJpbGl0aWVzID0gbGUxNl90b19jcHUoYnNzLT5hLmNhcGFiaWxpdGllcyk7Ci0JaWYgKGNhcGFiaWxpdGllcyAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpKSB7Ci0JCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQotCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOwotCQllbHNlCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKLQl9Ci0KLQljaGFubmVsID0gYnNzLT5zLmNoYW5uZWw7Ci0JaWYgKChjaGFubmVsID49IDEpICYmIChjaGFubmVsIDw9IE5VTV9DSEFOTkVMUykpIHsKLQkJLyogQWRkIGNoYW5uZWwgYW5kIGZyZXF1ZW5jeSAqLwotCQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7Ci0JCWl3ZS51LmZyZXEubSA9IGNoYW5uZWw7Ci0JCWl3ZS51LmZyZXEuZSA9IDA7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7Ci0KLQkJaXdlLnUuZnJlcS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGNoYW5uZWwpICogMTAwMDAwOwotCQlpd2UudS5mcmVxLmUgPSAxOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotCX0KLQotCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MuIGxldmVsIGFuZCBub2lzZSBpbiBkQi4gTm8gbGluayBxdWFsaXR5ICovCi0JaXdlLmNtZCA9IElXRVZRVUFMOwotCWl3ZS51LnF1YWwudXBkYXRlZCA9IElXX1FVQUxfREJNIHwgSVdfUVVBTF9RVUFMX0lOVkFMSUQ7Ci0JaXdlLnUucXVhbC5sZXZlbCA9IChfX3U4KSBsZTE2X3RvX2NwdShic3MtPmEubGV2ZWwpIC0gMHg5NTsKLQlpd2UudS5xdWFsLm5vaXNlID0gKF9fdTgpIGxlMTZfdG9fY3B1KGJzcy0+YS5ub2lzZSkgLSAweDk1OwotCS8qIFdpcmVsZXNzIHRvb2xzIHByaW9yIHRvIDI3LnByZTIyIHdpbGwgc2hvdyBsaW5rIHF1YWxpdHkKLQkgKiBhbnl3YXksIHNvIHdlIHByb3ZpZGUgYSByZWFzb25hYmxlIHZhbHVlLiAqLwotCWlmIChpd2UudS5xdWFsLmxldmVsID4gaXdlLnUucXVhbC5ub2lzZSkKLQkJaXdlLnUucXVhbC5xdWFsID0gaXdlLnUucXVhbC5sZXZlbCAtIGl3ZS51LnF1YWwubm9pc2U7Ci0JZWxzZQotCQlpd2UudS5xdWFsLnF1YWwgPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKLQotCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KLQlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKLQlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLQllbHNlCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIE5VTEwpOwotCi0JLyogQml0IHJhdGUgaXMgbm90IGF2YWlsYWJsZSBpbiBMdWNlbnQvQWdlcmUgZmlybXdhcmVzICovCi0JaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgIT0gRklSTVdBUkVfVFlQRV9BR0VSRSkgewotCQljaGFyICpjdXJyZW50X3ZhbCA9IGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7Ci0JCWludCBpOwotCQlpbnQgc3RlcDsKLQotCQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCkKLQkJCXN0ZXAgPSAyOwotCQllbHNlCi0JCQlzdGVwID0gMTsKLQotCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7Ci0JCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLwotCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7Ci0JCS8qIE1heCAxMCB2YWx1ZXMgKi8KLQkJZm9yIChpID0gMDsgaSA8IDEwOyBpICs9IHN0ZXApIHsKLQkJCS8qIE5VTEwgdGVybWluYXRlZCAqLwotCQkJaWYgKGJzcy0+cC5yYXRlc1tpXSA9PSAweDApCi0JCQkJYnJlYWs7Ci0JCQkvKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLwotCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9Ci0JCQkJKChic3MtPnAucmF0ZXNbaV0gJiAweDdmKSAqIDUwMDAwMCk7Ci0JCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICAgY3VycmVudF92YWwsCi0JCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJCQkgICBJV19FVl9QQVJBTV9MRU4pOwotCQl9Ci0JCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLwotCQlpZiAoKGN1cnJlbnRfdmFsIC0gY3VycmVudF9ldikgPiBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbykpCi0JCQljdXJyZW50X2V2ID0gY3VycmVudF92YWw7Ci0JfQotCi0JLyogQmVhY29uIGludGVydmFsICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgImJjbl9pbnQ9JWQiLAotCQkJCSAgICAgbGUxNl90b19jcHUoYnNzLT5hLmJlYWNvbl9pbnRlcnYpKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JLyogQ2FwYWJpbGl0ZXMgKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiY2FwYWI9MHglMDR4IiwKLQkJCQkgICAgIGNhcGFiaWxpdGllcyk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCS8qIEFkZCBFWFRSQTogQWdlIHRvIGRpc3BsYXkgc2Vjb25kcyBzaW5jZSBsYXN0IGJlYWNvbi9wcm9iZSByZXNwb25zZQotCSAqIGZvciBnaXZlbiBuZXR3b3JrLiAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKLQkJCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGxhc3Rfc2Nhbm5lZCkpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQlyZXR1cm4gY3VycmVudF9ldjsKLX0KLQotc3RhdGljIGlubGluZSBjaGFyICpvcmlub2NvX3RyYW5zbGF0ZV9leHRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkJICAgICAgIGNoYXIgKmN1cnJlbnRfZXYsCi0JCQkJCSAgICAgICBjaGFyICplbmRfYnVmLAotCQkJCQkgICAgICAgc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmJzcywKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkKQotewotCXUxNgkJCWNhcGFiaWxpdGllczsKLQl1MTYJCQljaGFubmVsOwotCXN0cnVjdCBpd19ldmVudAkJaXdlOwkJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLwotCWNoYXIgY3VzdG9tW01BWF9DVVNUT01fTEVOXTsKLQl1OCAqaWU7Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCi0JLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBBUCBNQUMgYWRkcmVzcyAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0JaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIElXX0VWX0FERFJfTEVOKTsKLQotCS8qIE90aGVyIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHdlIGdpdmUgdGhlbSAqLwotCi0JLyogQWRkIHRoZSBFU1NJRCAqLwotCWllID0gYnNzLT5kYXRhOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV07Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKSB7Ci0JCWlmIChpd2UudS5kYXRhLmxlbmd0aCA+IDMyKQotCQkJaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKLQkJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKLQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCAmaWVbMl0pOwotCX0KLQotCS8qIEFkZCBtb2RlICovCi0JY2FwYWJpbGl0aWVzID0gbGUxNl90b19jcHUoYnNzLT5jYXBhYmlsaXRpZXMpOwotCWlmIChjYXBhYmlsaXRpZXMgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkgewotCQlpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0JCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQotCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOwotCQllbHNlCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKLQl9Ci0KLQlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSksIFdMQU5fRUlEX0RTX1BBUkFNUyk7Ci0JY2hhbm5lbCA9IGllID8gaWVbMl0gOiAwOwotCWlmICgoY2hhbm5lbCA+PSAxKSAmJiAoY2hhbm5lbCA8PSBOVU1fQ0hBTk5FTFMpKSB7Ci0JCS8qIEFkZCBjaGFubmVsIGFuZCBmcmVxdWVuY3kgKi8KLQkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCQlpd2UudS5mcmVxLm0gPSBjaGFubmVsOwotCQlpd2UudS5mcmVxLmUgPSAwOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotCi0JCWl3ZS51LmZyZXEubSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaGFubmVsKSAqIDEwMDAwMDsKLQkJaXdlLnUuZnJlcS5lID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKLQl9Ci0KLQkvKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzLiBsZXZlbCBhbmQgbm9pc2UgaW4gZEIuIE5vIGxpbmsgcXVhbGl0eSAqLwotCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0RCTSB8IElXX1FVQUxfUVVBTF9JTlZBTElEOwotCWl3ZS51LnF1YWwubGV2ZWwgPSBic3MtPmxldmVsIC0gMHg5NTsKLQlpd2UudS5xdWFsLm5vaXNlID0gYnNzLT5ub2lzZSAtIDB4OTU7Ci0JLyogV2lyZWxlc3MgdG9vbHMgcHJpb3IgdG8gMjcucHJlMjIgd2lsbCBzaG93IGxpbmsgcXVhbGl0eQotCSAqIGFueXdheSwgc28gd2UgcHJvdmlkZSBhIHJlYXNvbmFibGUgdmFsdWUuICovCi0JaWYgKGl3ZS51LnF1YWwubGV2ZWwgPiBpd2UudS5xdWFsLm5vaXNlKQotCQlpd2UudS5xdWFsLnF1YWwgPSBpd2UudS5xdWFsLmxldmVsIC0gaXdlLnUucXVhbC5ub2lzZTsKLQllbHNlCi0JCWl3ZS51LnF1YWwucXVhbCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwotCi0JLyogQWRkIGVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwotCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwotCWVsc2UKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgTlVMTCk7Ci0KLQkvKiBXUEEgSUUgKi8KLQlpZSA9IG9yaW5vY29fZ2V0X3dwYV9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpKTsKLQlpZiAoaWUpIHsKLQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBpZSk7Ci0JfQotCi0JLyogUlNOIElFICovCi0JaWUgPSBvcmlub2NvX2dldF9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpLCBXTEFOX0VJRF9SU04pOwotCWlmIChpZSkgewotCQlpd2UuY21kID0gSVdFVkdFTklFOwotCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGllKTsKLQl9Ci0KLQlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSksIFdMQU5fRUlEX1NVUFBfUkFURVMpOwotCWlmIChpZSkgewotCQljaGFyICpwID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKLQkJaW50IGk7Ci0KLQkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwotCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KLQkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOwotCi0JCWZvciAoaSA9IDI7IGkgPCAoaWVbMV0gKyAyKTsgaSsrKSB7Ci0JCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKChpZVtpXSAmIDB4N0YpICogNTAwMDAwKTsKLQkJCXAgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyZW50X2V2LCBwLCBlbmRfYnVmLAotCQkJCQkJICZpd2UsIElXX0VWX1BBUkFNX0xFTik7Ci0JCX0KLQkJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCi0JCWlmIChwID4gKGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbykpKQotCQkJY3VycmVudF9ldiA9IHA7Ci0JfQotCi0JLyogVGltZXN0YW1wICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPQotCQlzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLCAidHNmPSUwMTZsbHgiLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlNjRfdG9fY3B1KGJzcy0+dGltZXN0YW1wKSk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCS8qIEJlYWNvbiBpbnRlcnZhbCAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICJiY25faW50PSVkIiwKLQkJCQkgICAgIGxlMTZfdG9fY3B1KGJzcy0+YmVhY29uX2ludGVydmFsKSk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCS8qIENhcGFiaWxpdGVzICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgImNhcGFiPTB4JTA0eCIsCi0JCQkJICAgICBjYXBhYmlsaXRpZXMpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQkvKiBBZGQgRVhUUkE6IEFnZSB0byBkaXNwbGF5IHNlY29uZHMgc2luY2UgbGFzdCBiZWFjb24vcHJvYmUgcmVzcG9uc2UKLQkgKiBmb3IgZ2l2ZW4gbmV0d29yay4gKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiIExhc3QgYmVhY29uOiAlZG1zIGFnbyIsCi0JCQkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBsYXN0X3NjYW5uZWQpKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JcmV0dXJuIGN1cnJlbnRfZXY7Ci19Ci0KLS8qIFJldHVybiByZXN1bHRzIG9mIGEgc2NhbiAqLwotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHNjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BvaW50ICpzcnEsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY2hhciAqY3VycmVudF9ldiA9IGV4dHJhOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAocHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7Ci0JCS8qIEltcG9ydGFudCBub3RlIDogd2UgZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgY2FsbGVyCi0JCSAqIHVudGlsIHJlc3VsdHMgYXJlIHJlYWR5IGZvciB2YXJpb3VzIHJlYXNvbnMuCi0JCSAqIEZpcnN0LCBtYW5hZ2luZyB3YWl0IHF1ZXVlcyBpcyBjb21wbGV4IGFuZCByYWN5LgotCQkgKiBTZWNvbmQsIHdlIGdyYWIgc29tZSBydG5ldGxpbmsgbG9jayBiZWZvcmUgY29tbWluZwotCQkgKiBoZXJlIChpbiBkZXZfaW9jdGwoKSkuCi0JCSAqIFRoaXJkLCB3ZSBnZW5lcmF0ZSBhbiBXaXJlbGVzcyBFdmVudCwgc28gdGhlCi0JCSAqIGNhbGxlciBjYW4gd2FpdCBpdHNlbGYgb24gdGhhdCAtIEplYW4gSUkgKi8KLQkJZXJyID0gLUVBR0FJTjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHByaXYtPmhhc19leHRfc2NhbikgewotCQlzdHJ1Y3QgeGJzc19lbGVtZW50ICpic3M7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQkJLyogVHJhbnNsYXRlIHRoaXMgZW50cnkgdG8gV0UgZm9ybWF0ICovCi0JCQljdXJyZW50X2V2ID0KLQkJCQlvcmlub2NvX3RyYW5zbGF0ZV9leHRfc2NhbihkZXYsIGluZm8sCi0JCQkJCQkJICAgY3VycmVudF9ldiwKLQkJCQkJCQkgICBleHRyYSArIHNycS0+bGVuZ3RoLAotCQkJCQkJCSAgICZic3MtPmJzcywKLQkJCQkJCQkgICBic3MtPmxhc3Rfc2Nhbm5lZCk7Ci0KLQkJCS8qIENoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBvbmUgbW9yZSBlbnRyeSAqLwotCQkJaWYgKChleHRyYSArIHNycS0+bGVuZ3RoIC0gY3VycmVudF9ldikKLQkJCSAgICA8PSBJV19FVl9BRERSX0xFTikgewotCQkJCS8qIEFzayB1c2VyIHNwYWNlIHRvIHRyeSBhZ2FpbiB3aXRoIGEKLQkJCQkgKiBiaWdnZXIgYnVmZmVyICovCi0JCQkJZXJyID0gLUUyQklHOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKmJzczsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCQkvKiBUcmFuc2xhdGUgdGhpcyBlbnRyeSB0byBXRSBmb3JtYXQgKi8KLQkJCWN1cnJlbnRfZXYgPSBvcmlub2NvX3RyYW5zbGF0ZV9zY2FuKGRldiwgaW5mbywKLQkJCQkJCQkgICAgY3VycmVudF9ldiwKLQkJCQkJCQkgICAgZXh0cmEgKyBzcnEtPmxlbmd0aCwKLQkJCQkJCQkgICAgJmJzcy0+YnNzLAotCQkJCQkJCSAgICBic3MtPmxhc3Rfc2Nhbm5lZCk7Ci0KLQkJCS8qIENoZWNrIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBvbmUgbW9yZSBlbnRyeSAqLwotCQkJaWYgKChleHRyYSArIHNycS0+bGVuZ3RoIC0gY3VycmVudF9ldikKLQkJCSAgICA8PSBJV19FVl9BRERSX0xFTikgewotCQkJCS8qIEFzayB1c2VyIHNwYWNlIHRvIHRyeSBhZ2FpbiB3aXRoIGEKLQkJCQkgKiBiaWdnZXIgYnVmZmVyICovCi0JCQkJZXJyID0gLUUyQklHOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0JfQotCi0Jc3JxLT5sZW5ndGggPSAoY3VycmVudF9ldiAtIGV4dHJhKTsKLQlzcnEtPmZsYWdzID0gKF9fdTE2KSBwcml2LT5zY2FuX21vZGU7Ci0KLW91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBlcnI7Ci19CiAKIC8qIENvbW1pdCBoYW5kbGVyLCBjYWxsZWQgYWZ0ZXIgc2V0IG9wZXJhdGlvbnMgKi8KIHN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9jb21taXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTIxODEsNTAgKzE0NjUsMTcgQEAKIAkJCQl2b2lkICp3cnF1LAogCQkJCWNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAwOwogCiAJaWYgKCFwcml2LT5vcGVuKQogCQlyZXR1cm4gMDsKIAotCWlmIChwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQpIHsKLQkJb3Jpbm9jb19yZXNldCgmcHJpdi0+cmVzZXRfd29yayk7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gaGVybWVzX2Rpc2FibGVfcG9ydChodywgMCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIGRpc2FibGUgcG9ydCAiCi0JCSAgICAgICAid2hpbGUgcmVjb25maWd1cmluZyBjYXJkXG4iLCBkZXYtPm5hbWUpOwotCQlwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQgPSAxOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPSBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIHJlY29uZmlndXJlIGNhcmRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPSBoZXJtZXNfZW5hYmxlX3BvcnQoaHcsIDApOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byBlbmFibGUgcG9ydCB3aGlsZSByZWNvbmZpZ3VyaW5nIGNhcmRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLSBvdXQ6Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUmVzZXR0aW5nIGluc3RlYWQuLi5cbiIsIGRldi0+bmFtZSk7Ci0JCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOwotCQllcnIgPSAwOwotCX0KKwllcnIgPSBvcmlub2NvX2NvbW1pdChwcml2KTsKIAogCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CiAJcmV0dXJuIGVycjsKQEAgLTIyNTgsMjYgKzE1MDksMjQgQEAKIAlbSVdfSU9DVExfSURYKGlkKV0gPSAoaXdfaGFuZGxlcikgZnVuYwogc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIJb3Jpbm9jb19oYW5kbGVyW10gPSB7CiAJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0NPTU1JVCwJb3Jpbm9jb19pb2N0bF9jb21taXQpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdOQU1FLAlvcmlub2NvX2lvY3RsX2dldG5hbWUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdOQU1FLAljZmc4MDIxMV93ZXh0X2dpd25hbWUpLAogCVNURF9JV19IQU5ETEVSKFNJT0NTSVdGUkVRLAlvcmlub2NvX2lvY3RsX3NldGZyZXEpLAogCVNURF9JV19IQU5ETEVSKFNJT0NHSVdGUkVRLAlvcmlub2NvX2lvY3RsX2dldGZyZXEpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdNT0RFLAlvcmlub2NvX2lvY3RsX3NldG1vZGUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdNT0RFLAlvcmlub2NvX2lvY3RsX2dldG1vZGUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdNT0RFLAljZmc4MDIxMV93ZXh0X3Npd21vZGUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdNT0RFLAljZmc4MDIxMV93ZXh0X2dpd21vZGUpLAogCVNURF9JV19IQU5ETEVSKFNJT0NTSVdTRU5TLAlvcmlub2NvX2lvY3RsX3NldHNlbnMpLAogCVNURF9JV19IQU5ETEVSKFNJT0NHSVdTRU5TLAlvcmlub2NvX2lvY3RsX2dldHNlbnMpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSQU5HRSwJb3Jpbm9jb19pb2N0bF9nZXRpd3JhbmdlKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXUkFOR0UsCWNmZzgwMjExX3dleHRfZ2l3cmFuZ2UpLAogCVNURF9JV19IQU5ETEVSKFNJT0NTSVdTUFksCWl3X2hhbmRsZXJfc2V0X3NweSksCiAJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NQWSwJaXdfaGFuZGxlcl9nZXRfc3B5KSwKIAlTVERfSVdfSEFORExFUihTSU9DU0lXVEhSU1BZLAlpd19oYW5kbGVyX3NldF90aHJzcHkpLAogCVNURF9JV19IQU5ETEVSKFNJT0NHSVdUSFJTUFksCWl3X2hhbmRsZXJfZ2V0X3RocnNweSksCiAJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0FQLAlvcmlub2NvX2lvY3RsX3NldHdhcCksCiAJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0FQLAlvcmlub2NvX2lvY3RsX2dldHdhcCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NDQU4sCW9yaW5vY29faW9jdGxfc2V0c2NhbiksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NDQU4sCW9yaW5vY29faW9jdGxfZ2V0c2NhbiksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NDQU4sCWNmZzgwMjExX3dleHRfc2l3c2NhbiksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NDQU4sCWNmZzgwMjExX3dleHRfZ2l3c2NhbiksCiAJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0VTU0lELAlvcmlub2NvX2lvY3RsX3NldGVzc2lkKSwKIAlTVERfSVdfSEFORExFUihTSU9DR0lXRVNTSUQsCW9yaW5vY29faW9jdGxfZ2V0ZXNzaWQpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdOSUNLTiwJb3Jpbm9jb19pb2N0bF9zZXRuaWNrKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXTklDS04sCW9yaW5vY29faW9jdGxfZ2V0bmljayksCiAJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1JBVEUsCW9yaW5vY29faW9jdGxfc2V0cmF0ZSksCiAJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JBVEUsCW9yaW5vY29faW9jdGxfZ2V0cmF0ZSksCiAJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1JUUywJb3Jpbm9jb19pb2N0bF9zZXRydHMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlCmluZGV4IGMyMDUwZGVlLi5iNTQyZTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlCkBAIC0xLDMgKzEsNiBAQAorcDU0Y29tbW9uLW9ianMJCQk6PSBlZXByb20ubyBmd2lvLm8gdHhyeC5vIG1haW4ubworcDU0Y29tbW9uLSQoQ09ORklHX1A1NF9MRURTKQkrPSBsZWQubworCiBvYmotJChDT05GSUdfUDU0X0NPTU1PTikJKz0gcDU0Y29tbW9uLm8KIG9iai0kKENPTkZJR19QNTRfVVNCKQkJKz0gcDU0dXNiLm8KIG9iai0kKENPTkZJR19QNTRfUENJKQkJKz0gcDU0cGNpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9lZXByb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWZlNjdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2VlcHJvbS5jCkBAIC0wLDAgKzEsNzUzIEBACisvKgorICogRUVQUk9NIHBhcnNlciBjb2RlIGZvciBtYWM4MDIxMSBQcmlzbTU0IGRyaXZlcnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDksIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIEJhc2VkIG9uOgorICogLSB0aGUgaXNsc20gKHNvZnRtYWMgcHJpc201NCkgZHJpdmVyLCB3aGljaCBpczoKKyAqICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4KKyAqIC0gc3RsYzQ1eHggZHJpdmVyCisgKiAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CisKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgInA1NC5oIgorI2luY2x1ZGUgImVlcHJvbS5oIgorI2luY2x1ZGUgImxtYWMuaCIKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBwNTRfYmdyYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMCwgfSwKKwl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDEsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAyLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDMsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSA0LCB9LAorCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gNSwgfSwKKwl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSA2LCB9LAorCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDcsIH0sCisJeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gOCwgfSwKKwl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA5LCB9LAorCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDEwLCB9LAorCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDExLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBwNTRfYXJhdGVzW10gPSB7CisJeyAuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSA0LCB9LAorCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gNSwgfSwKKwl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSA2LCB9LAorCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDcsIH0sCisJeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gOCwgfSwKKwl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA5LCB9LAorCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDEwLCB9LAorCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDExLCB9LAorfTsKKworI2RlZmluZSBDSEFOX0hBU19DQUwJCUJJVCgwKQorI2RlZmluZSBDSEFOX0hBU19MSU1JVAkJQklUKDEpCisjZGVmaW5lIENIQU5fSEFTX0NVUlZFCQlCSVQoMikKKyNkZWZpbmUgQ0hBTl9IQVNfQUxMCQkoQ0hBTl9IQVNfQ0FMIHwgQ0hBTl9IQVNfTElNSVQgfCBDSEFOX0hBU19DVVJWRSkKKworc3RydWN0IHA1NF9jaGFubmVsX2VudHJ5IHsKKwl1MTYgZnJlcTsKKwl1MTYgZGF0YTsKKwlpbnQgaW5kZXg7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworfTsKKworc3RydWN0IHA1NF9jaGFubmVsX2xpc3QgeworCXN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSAqY2hhbm5lbHM7CisJc2l6ZV90IGVudHJpZXM7CisJc2l6ZV90IG1heF9lbnRyaWVzOworCXNpemVfdCBiYW5kX2NoYW5uZWxfbnVtW0lFRUU4MDIxMV9OVU1fQkFORFNdOworfTsKKworc3RhdGljIGludCBwNTRfZ2V0X2JhbmRfZnJvbV9mcmVxKHUxNiBmcmVxKQoreworCS8qIEZJWE1FOiBzeW5jIHRoZXNlIHZhbHVlcyB3aXRoIHRoZSA4MDIuMTEgc3BlYyAqLworCisJaWYgKChmcmVxID49IDI0MTIpICYmIChmcmVxIDw9IDI0ODQpKQorCQlyZXR1cm4gSUVFRTgwMjExX0JBTkRfMkdIWjsKKworCWlmICgoZnJlcSA+PSA0OTIwKSAmJiAoZnJlcSA8PSA1ODI1KSkKKwkJcmV0dXJuIElFRUU4MDIxMV9CQU5EXzVHSFo7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcDU0X2NvbXBhcmVfY2hhbm5lbHMoY29uc3Qgdm9pZCAqX2EsCisJCQkJY29uc3Qgdm9pZCAqX2IpCit7CisJY29uc3Qgc3RydWN0IHA1NF9jaGFubmVsX2VudHJ5ICphID0gX2E7CisJY29uc3Qgc3RydWN0IHA1NF9jaGFubmVsX2VudHJ5ICpiID0gX2I7CisKKwlyZXR1cm4gYS0+aW5kZXggLSBiLT5pbmRleDsKK30KKworc3RhdGljIGludCBwNTRfZmlsbF9iYW5kX2JpdHJhdGVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmRfZW50cnksCisJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCit7CisJLyogVE9ETzogZ2VuZXJhdGUgcmF0ZSBhcnJheSBkeW5hbWljYWxseSAqLworCisJc3dpdGNoIChiYW5kKSB7CisJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgorCQliYW5kX2VudHJ5LT5iaXRyYXRlcyA9IHA1NF9iZ3JhdGVzOworCQliYW5kX2VudHJ5LT5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShwNTRfYmdyYXRlcyk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKKwkJYmFuZF9lbnRyeS0+Yml0cmF0ZXMgPSBwNTRfYXJhdGVzOworCQliYW5kX2VudHJ5LT5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShwNTRfYXJhdGVzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDU0X2dlbmVyYXRlX2JhbmQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJICAgICBzdHJ1Y3QgcDU0X2NoYW5uZWxfbGlzdCAqbGlzdCwKKwkJCSAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnRtcCwgKm9sZDsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWlmICgoIWxpc3QtPmVudHJpZXMpIHx8ICghbGlzdC0+YmFuZF9jaGFubmVsX251bVtiYW5kXSkpCisJCXJldHVybiAwOworCisJdG1wID0ga3phbGxvYyhzaXplb2YoKnRtcCksIEdGUF9LRVJORUwpOworCWlmICghdG1wKQorCQlnb3RvIGVycl9vdXQ7CisKKwl0bXAtPmNoYW5uZWxzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsKSAqCisJCQkJbGlzdC0+YmFuZF9jaGFubmVsX251bVtiYW5kXSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXAtPmNoYW5uZWxzKQorCQlnb3RvIGVycl9vdXQ7CisKKwlyZXQgPSBwNTRfZmlsbF9iYW5kX2JpdHJhdGVzKGRldiwgdG1wLCBiYW5kKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9vdXQ7CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgKGogPCBsaXN0LT5iYW5kX2NoYW5uZWxfbnVtW2JhbmRdKSAmJgorCQkJICAgKGkgPCBsaXN0LT5lbnRyaWVzKTsgaSsrKSB7CisKKwkJaWYgKGxpc3QtPmNoYW5uZWxzW2ldLmJhbmQgIT0gYmFuZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChsaXN0LT5jaGFubmVsc1tpXS5kYXRhICE9IENIQU5fSEFTX0FMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczolcyVzJXMgaXMvYXJlIG1pc3NpbmcgZm9yICIKKwkJCQkJImNoYW5uZWw6JWQgWyVkIE1Iel0uXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksCisJCQkgICAgICAgKGxpc3QtPmNoYW5uZWxzW2ldLmRhdGEgJiBDSEFOX0hBU19DQUwgPyAiIiA6CisJCQkJIiBbaXFhdXRvIGNhbGlicmF0aW9uIGRhdGFdIiksCisJCQkgICAgICAgKGxpc3QtPmNoYW5uZWxzW2ldLmRhdGEgJiBDSEFOX0hBU19MSU1JVCA/ICIiIDoKKwkJCQkiIFtvdXRwdXQgcG93ZXIgbGltaXRzXSIpLAorCQkJICAgICAgIChsaXN0LT5jaGFubmVsc1tpXS5kYXRhICYgQ0hBTl9IQVNfQ1VSVkUgPyAiIiA6CisJCQkJIiBbY3VydmUgZGF0YV0iKSwKKwkJCSAgICAgICBsaXN0LT5jaGFubmVsc1tpXS5pbmRleCwgbGlzdC0+Y2hhbm5lbHNbaV0uZnJlcSk7CisJCX0KKworCQl0bXAtPmNoYW5uZWxzW2pdLmJhbmQgPSBsaXN0LT5jaGFubmVsc1tpXS5iYW5kOworCQl0bXAtPmNoYW5uZWxzW2pdLmNlbnRlcl9mcmVxID0gbGlzdC0+Y2hhbm5lbHNbaV0uZnJlcTsKKwkJaisrOworCX0KKworCXRtcC0+bl9jaGFubmVscyA9IGxpc3QtPmJhbmRfY2hhbm5lbF9udW1bYmFuZF07CisJb2xkID0gcHJpdi0+YmFuZF90YWJsZVtiYW5kXTsKKwlwcml2LT5iYW5kX3RhYmxlW2JhbmRdID0gdG1wOworCWlmIChvbGQpIHsKKwkJa2ZyZWUob2xkLT5jaGFubmVscyk7CisJCWtmcmVlKG9sZCk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJaWYgKHRtcCkgeworCQlrZnJlZSh0bXAtPmNoYW5uZWxzKTsKKwkJa2ZyZWUodG1wKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwNTRfdXBkYXRlX2NoYW5uZWxfcGFyYW0oc3RydWN0IHA1NF9jaGFubmVsX2xpc3QgKmxpc3QsCisJCQkJICAgICB1MTYgZnJlcSwgdTE2IGRhdGEpCit7CisJaW50IGJhbmQsIGk7CisKKwkvKgorCSAqIHVzdWFsbHkgYWxsIGxpc3RzIGluIHRoZSBlZXByb20gYXJlIG1vc3RseSBzb3J0ZWQuCisJICogc28gaXQncyB2ZXJ5IGxpa2VseSB0aGF0IHRoZSBlbnRyeSB3ZSBhcmUgbG9va2luZyBmb3IKKwkgKiBpcyByaWdodCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0CisJICovCisJZm9yIChpID0gbGlzdC0+ZW50cmllczsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKGZyZXEgPT0gbGlzdC0+Y2hhbm5lbHNbaV0uZnJlcSkgeworCQkJbGlzdC0+Y2hhbm5lbHNbaV0uZGF0YSB8PSBkYXRhOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoKGkgPCAwKSAmJiAobGlzdC0+ZW50cmllcyA8IGxpc3QtPm1heF9lbnRyaWVzKSkgeworCQkvKiBlbnRyeSBkb2VzIG5vdCBleGlzdCB5ZXQuIEluaXRpYWxpemUgYSBuZXcgb25lLiAqLworCQliYW5kID0gcDU0X2dldF9iYW5kX2Zyb21fZnJlcShmcmVxKTsKKworCQkvKgorCQkgKiBmaWx0ZXIgb3V0IGZyZXF1ZW5jaWVzIHdoaWNoIGRvbid0IGJlbG9uZyBpbnRvCisJCSAqIGFueSBzdXBwb3J0ZWQgYmFuZC4KKwkJICovCisJCWlmIChiYW5kIDwgMCkKKwkJCXJldHVybiA7CisKKwkJaSA9IGxpc3QtPmVudHJpZXMrKzsKKwkJbGlzdC0+YmFuZF9jaGFubmVsX251bVtiYW5kXSsrOworCisJCWxpc3QtPmNoYW5uZWxzW2ldLmZyZXEgPSBmcmVxOworCQlsaXN0LT5jaGFubmVsc1tpXS5kYXRhID0gZGF0YTsKKwkJbGlzdC0+Y2hhbm5lbHNbaV0uYmFuZCA9IGJhbmQ7CisJCWxpc3QtPmNoYW5uZWxzW2ldLmluZGV4ID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGZyZXEpOworCQkvKiBUT0RPOiBwYXJzZSBvdXRwdXRfbGltaXQgYW5kIGZpbGwgbWF4X3Bvd2VyICovCisJfQorfQorCitzdGF0aWMgaW50IHA1NF9nZW5lcmF0ZV9jaGFubmVsX2xpc3RzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcDU0X2NoYW5uZWxfbGlzdCAqbGlzdDsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgbWF4X2NoYW5uZWxfbnVtOworCWludCByZXQgPSAtRU5PTUVNOworCXUxNiBmcmVxOworCisJaWYgKChwcml2LT5pcV9hdXRvY2FsX2xlbiAhPSBwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzKSB8fAorCSAgICAocHJpdi0+aXFfYXV0b2NhbF9sZW4gIT0gcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzKSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRUVQUk9NIGlzIGRhbWFnZWQuLi4geW91IG1heSBub3QgYmUgYWJsZSIKKwkJCQkidG8gdXNlIGFsbCBjaGFubmVscyB3aXRoIHRoaXMgZGV2aWNlLlxuIiwKKwkJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKworCW1heF9jaGFubmVsX251bSA9IG1heF90KHVuc2lnbmVkIGludCwgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzLAorCQkJCXByaXYtPmlxX2F1dG9jYWxfbGVuKTsKKwltYXhfY2hhbm5lbF9udW0gPSBtYXhfdCh1bnNpZ25lZCBpbnQsIG1heF9jaGFubmVsX251bSwKKwkJCQlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzKTsKKworCWxpc3QgPSBremFsbG9jKHNpemVvZigqbGlzdCksIEdGUF9LRVJORUwpOworCWlmICghbGlzdCkKKwkJZ290byBmcmVlOworCisJbGlzdC0+bWF4X2VudHJpZXMgPSBtYXhfY2hhbm5lbF9udW07CisJbGlzdC0+Y2hhbm5lbHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkpICoKKwkJCQkgbWF4X2NoYW5uZWxfbnVtLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxpc3QtPmNoYW5uZWxzKQorCQlnb3RvIGZyZWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2NoYW5uZWxfbnVtOyBpKyspIHsKKwkJaWYgKGkgPCBwcml2LT5pcV9hdXRvY2FsX2xlbikgeworCQkJZnJlcSA9IGxlMTZfdG9fY3B1KHByaXYtPmlxX2F1dG9jYWxbaV0uZnJlcSk7CisJCQlwNTRfdXBkYXRlX2NoYW5uZWxfcGFyYW0obGlzdCwgZnJlcSwgQ0hBTl9IQVNfQ0FMKTsKKwkJfQorCisJCWlmIChpIDwgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzKSB7CisJCQlmcmVxID0gbGUxNl90b19jcHVwKChfX2xlMTYgKikgKGkgKgorCQkJCQkgICAgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplICsKKwkJCQkJICAgIHByaXYtPm91dHB1dF9saW1pdC0+b2Zmc2V0ICsKKwkJCQkJICAgIHByaXYtPm91dHB1dF9saW1pdC0+ZGF0YSkpOworCisJCQlwNTRfdXBkYXRlX2NoYW5uZWxfcGFyYW0obGlzdCwgZnJlcSwgQ0hBTl9IQVNfTElNSVQpOworCQl9CisKKwkJaWYgKGkgPCBwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzKSB7CisJCQlmcmVxID0gbGUxNl90b19jcHVwKChfX2xlMTYgKikgKGkgKgorCQkJCQkgICAgcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZSArCisJCQkJCSAgICBwcml2LT5jdXJ2ZV9kYXRhLT5vZmZzZXQgKworCQkJCQkgICAgcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSkpOworCisJCQlwNTRfdXBkYXRlX2NoYW5uZWxfcGFyYW0obGlzdCwgZnJlcSwgQ0hBTl9IQVNfQ1VSVkUpOworCQl9CisJfQorCisJLyogc29ydCB0aGUgbGlzdCBieSB0aGUgY2hhbm5lbCBpbmRleCAqLworCXNvcnQobGlzdC0+Y2hhbm5lbHMsIGxpc3QtPmVudHJpZXMsIHNpemVvZihzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkpLAorCSAgICAgcDU0X2NvbXBhcmVfY2hhbm5lbHMsIE5VTEwpOworCisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBpKyspIHsKKwkJaWYgKGxpc3QtPmJhbmRfY2hhbm5lbF9udW1baV0pIHsKKwkJCXJldCA9IHA1NF9nZW5lcmF0ZV9iYW5kKGRldiwgbGlzdCwgaSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZnJlZTsKKworCQkJaisrOworCQl9CisJfQorCWlmIChqID09IDApIHsKKwkJLyogbm8gdXNlYWJsZSBiYW5kIGF2YWlsYWJsZS4gKi8KKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKK2ZyZWU6CisJaWYgKGxpc3QpIHsKKwkJa2ZyZWUobGlzdC0+Y2hhbm5lbHMpOworCQlrZnJlZShsaXN0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHA1NF9jb252ZXJ0X3JldjAoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJICAgIHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSkKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlICpkc3Q7CisJc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYwICpzcmM7CisJc2l6ZV90IGNkX2xlbiA9IHNpemVvZigqY3VydmVfZGF0YSkgKworCQkoY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsKnNpemVvZigqZHN0KSArIDIpICoKKwkJIGN1cnZlX2RhdGEtPmNoYW5uZWxzOworCXVuc2lnbmVkIGludCBpLCBqOworCXZvaWQgKnNvdXJjZSwgKnRhcmdldDsKKworCXByaXYtPmN1cnZlX2RhdGEgPSBrbWFsbG9jKHNpemVvZigqcHJpdi0+Y3VydmVfZGF0YSkgKyBjZF9sZW4sCisJCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5jdXJ2ZV9kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPmN1cnZlX2RhdGEtPmVudHJpZXMgPSBjdXJ2ZV9kYXRhLT5jaGFubmVsczsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyeV9zaXplID0gc2l6ZW9mKF9fbGUxNikgKworCQlzaXplb2YoKmRzdCkgKiBjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWw7CisJcHJpdi0+Y3VydmVfZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhLCBkYXRhKTsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5sZW4gPSBjZF9sZW47CisJbWVtY3B5KHByaXYtPmN1cnZlX2RhdGEtPmRhdGEsIGN1cnZlX2RhdGEsIHNpemVvZigqY3VydmVfZGF0YSkpOworCXNvdXJjZSA9IGN1cnZlX2RhdGEtPmRhdGE7CisJdGFyZ2V0ID0gKChzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKikgcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSktPmRhdGE7CisJZm9yIChpID0gMDsgaSA8IGN1cnZlX2RhdGEtPmNoYW5uZWxzOyBpKyspIHsKKwkJX19sZTE2ICpmcmVxID0gc291cmNlOworCQlzb3VyY2UgKz0gc2l6ZW9mKF9fbGUxNik7CisJCSooKF9fbGUxNiAqKXRhcmdldCkgPSAqZnJlcTsKKwkJdGFyZ2V0ICs9IHNpemVvZihfX2xlMTYpOworCQlmb3IgKGogPSAwOyBqIDwgY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsOyBqKyspIHsKKwkJCWRzdCA9IHRhcmdldDsKKwkJCXNyYyA9IHNvdXJjZTsKKworCQkJZHN0LT5yZl9wb3dlciA9IHNyYy0+cmZfcG93ZXI7CisJCQlkc3QtPnBhX2RldGVjdG9yID0gc3JjLT5wYV9kZXRlY3RvcjsKKwkJCWRzdC0+ZGF0YV82NHFhbSA9IHNyYy0+cGN2OworCQkJLyogImludmVudCIgdGhlIHBvaW50cyBmb3IgdGhlIG90aGVyIG1vZHVsYXRpb25zICovCisjZGVmaW5lIFNVQih4LCB5KSAodTgpKCgoeCkgLSAoeSkpID4gKHgpID8gMCA6ICh4KSAtICh5KSkKKwkJCWRzdC0+ZGF0YV8xNnFhbSA9IFNVQihzcmMtPnBjdiwgMTIpOworCQkJZHN0LT5kYXRhX3Fwc2sgPSBTVUIoZHN0LT5kYXRhXzE2cWFtLCAxMik7CisJCQlkc3QtPmRhdGFfYnBzayA9IFNVQihkc3QtPmRhdGFfcXBzaywgMTIpOworCQkJZHN0LT5kYXRhX2JhcmtlciA9IFNVQihkc3QtPmRhdGFfYnBzaywgMTQpOworI3VuZGVmIFNVQgorCQkJdGFyZ2V0ICs9IHNpemVvZigqZHN0KTsKKwkJCXNvdXJjZSArPSBzaXplb2YoKnNyYyk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwNTRfY29udmVydF9yZXYxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCSAgICBzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSAqZHN0OworCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MSAqc3JjOworCXNpemVfdCBjZF9sZW4gPSBzaXplb2YoKmN1cnZlX2RhdGEpICsKKwkJKGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbCpzaXplb2YoKmRzdCkgKyAyKSAqCisJCSBjdXJ2ZV9kYXRhLT5jaGFubmVsczsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwl2b2lkICpzb3VyY2UsICp0YXJnZXQ7CisKKwlwcml2LT5jdXJ2ZV9kYXRhID0ga3phbGxvYyhjZF9sZW4gKyBzaXplb2YoKnByaXYtPmN1cnZlX2RhdGEpLAorCQkJCSAgIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+Y3VydmVfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzID0gY3VydmVfZGF0YS0+Y2hhbm5lbHM7CisJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZSA9IHNpemVvZihfX2xlMTYpICsKKwkJc2l6ZW9mKCpkc3QpICogY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsOworCXByaXYtPmN1cnZlX2RhdGEtPm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSwgZGF0YSk7CisJcHJpdi0+Y3VydmVfZGF0YS0+bGVuID0gY2RfbGVuOworCW1lbWNweShwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhLCBjdXJ2ZV9kYXRhLCBzaXplb2YoKmN1cnZlX2RhdGEpKTsKKwlzb3VyY2UgPSBjdXJ2ZV9kYXRhLT5kYXRhOworCXRhcmdldCA9ICgoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICopIHByaXYtPmN1cnZlX2RhdGEtPmRhdGEpLT5kYXRhOworCWZvciAoaSA9IDA7IGkgPCBjdXJ2ZV9kYXRhLT5jaGFubmVsczsgaSsrKSB7CisJCV9fbGUxNiAqZnJlcSA9IHNvdXJjZTsKKwkJc291cmNlICs9IHNpemVvZihfX2xlMTYpOworCQkqKChfX2xlMTYgKil0YXJnZXQpID0gKmZyZXE7CisJCXRhcmdldCArPSBzaXplb2YoX19sZTE2KTsKKwkJZm9yIChqID0gMDsgaiA8IGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsgaisrKSB7CisJCQltZW1jcHkodGFyZ2V0LCBzb3VyY2UsIHNpemVvZigqc3JjKSk7CisKKwkJCXRhcmdldCArPSBzaXplb2YoKmRzdCk7CisJCQlzb3VyY2UgKz0gc2l6ZW9mKCpzcmMpOworCQl9CisJCXNvdXJjZSsrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcDU0X3JmX2NoaXBzW10gPSB7ICJJTlZBTElELTAiLCAiRHVldHRlMyIsICJEdWV0dGUyIiwKKwkiRnJpc2JlZSIsICJYYm93IiwgIkxvbmdib3ciLCAiSU5WQUxJRC02IiwgIklOVkFMSUQtNyIgfTsKKworc3RhdGljIHZvaWQgcDU0X3BhcnNlX3Jzc2ljYWwoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICpkYXRhLCBpbnQgbGVuLAorCQkJICAgICB1MTYgdHlwZSkKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgb2Zmc2V0ID0gKHR5cGUgPT0gUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fRVhURU5ERUQpID8gMiA6IDA7CisJaW50IGVudHJ5X3NpemUgPSBzaXplb2Yoc3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSkgKyBvZmZzZXQ7CisJaW50IG51bV9lbnRyaWVzID0gKHR5cGUgPT0gUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT04pID8gMSA6IDI7CisJaW50IGk7CisKKwlpZiAobGVuICE9IChlbnRyeV9zaXplICogbnVtX2VudHJpZXMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVua25vd24gcnNzaSBjYWxpYnJhdGlvbiBkYXRhIHBhY2tpbmcgIgorCQkJCSAiIHR5cGU6KCV4KSBsZW46JWQuXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgdHlwZSwgbGVuKTsKKworCQlwcmludF9oZXhfZHVtcF9ieXRlcygicnNzaWNhbDoiLCBEVU1QX1BSRUZJWF9OT05FLAorCQkJCSAgICAgZGF0YSwgbGVuKTsKKworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwbGVhc2UgcmVwb3J0IHRoaXMgaXNzdWUuXG4iLAorCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7IGkrKykgeworCQlzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5ICpjYWwgPSBkYXRhICsKKwkJCQkJCSAob2Zmc2V0ICsgaSAqIGVudHJ5X3NpemUpOworCQlwcml2LT5yc3NpY2FsX2RiW2ldLm11bCA9IChzMTYpIGxlMTZfdG9fY3B1KGNhbC0+bXVsKTsKKwkJcHJpdi0+cnNzaWNhbF9kYltpXS5hZGQgPSAoczE2KSBsZTE2X3RvX2NwdShjYWwtPmFkZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwNTRfcGFyc2VfZGVmYXVsdF9jb3VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICAgICB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBwZGFfY291bnRyeSAqY291bnRyeTsKKworCWlmIChsZW4gIT0gc2l6ZW9mKCpjb3VudHJ5KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmb3VuZCBwb3NzaWJsZSBpbnZhbGlkIGRlZmF1bHQgY291bnRyeSAiCisJCQkJImVlcHJvbSBlbnRyeS4gKGVudHJ5IHNpemU6ICVkKVxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIGxlbik7CisKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImNvdW50cnk6IiwgRFVNUF9QUkVGSVhfTk9ORSwKKwkJCQkgICAgIGRhdGEsIGxlbik7CisKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcGxlYXNlIHJlcG9ydCB0aGlzIGlzc3VlLlxuIiwKKwkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCQlyZXR1cm47CisJfQorCisJY291bnRyeSA9IChzdHJ1Y3QgcGRhX2NvdW50cnkgKikgZGF0YTsKKwlpZiAoY291bnRyeS0+ZmxhZ3MgPT0gUERSX0NPVU5UUllfQ0VSVF9DT0RFX1BTRVVETykKKwkJcmVndWxhdG9yeV9oaW50KGRldi0+d2lwaHksIGNvdW50cnktPmFscGhhMik7CisJZWxzZSB7CisJCS8qIFRPRE86CisJCSAqIHdyaXRlIGEgc2hhcmVkL2NvbW1vbiBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzCisJCSAqICJSZWd1bGF0b3J5IGRvbWFpbiBjb2RlcyIgKDgwMi4xMS0yMDA3IDE0LjguMi4yKQorCQkgKiBpbnRvIElTTy9JRUMgMzE2Ni0xIGFscGhhMiBmb3IgcmVndWxhdG9yeV9oaW50LgorCQkgKi8KKwl9Cit9CisKK3N0YXRpYyBpbnQgcDU0X2NvbnZlcnRfb3V0cHV0X2xpbWl0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICAgICB1OCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKworCWlmIChsZW4gPCAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biBvdXRwdXQgcG93ZXIgZGIgcmV2aXNpb246JXhcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBkYXRhWzBdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKDIgKyBkYXRhWzFdICogc2l6ZW9mKHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQpID4gbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaXYtPm91dHB1dF9saW1pdCA9IGttYWxsb2MoZGF0YVsxXSAqCisJCXNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KSArCisJCXNpemVvZigqcHJpdi0+b3V0cHV0X2xpbWl0KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXByaXYtPm91dHB1dF9saW1pdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5vdXRwdXRfbGltaXQtPm9mZnNldCA9IDA7CisJcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzID0gZGF0YVsxXTsKKwlwcml2LT5vdXRwdXRfbGltaXQtPmVudHJ5X3NpemUgPQorCQlzaXplb2Yoc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCk7CisJcHJpdi0+b3V0cHV0X2xpbWl0LT5sZW4gPSBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJ5X3NpemUgKgorCQkJCSAgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzICsKKwkJCQkgIHByaXYtPm91dHB1dF9saW1pdC0+b2Zmc2V0OworCisJbWVtY3B5KHByaXYtPm91dHB1dF9saW1pdC0+ZGF0YSwgJmRhdGFbMl0sCisJICAgICAgIGRhdGFbMV0gKiBzaXplb2Yoc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqcDU0X2NvbnZlcnRfZGIoc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqc3JjLAorCQkJCQkgICAgICAgc2l6ZV90IHRvdGFsX2xlbikKK3sKKwlzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqZHN0OworCXNpemVfdCBwYXlsb2FkX2xlbiwgZW50cmllcywgZW50cnlfc2l6ZSwgb2Zmc2V0OworCisJcGF5bG9hZF9sZW4gPSBsZTE2X3RvX2NwdShzcmMtPmxlbik7CisJZW50cmllcyA9IGxlMTZfdG9fY3B1KHNyYy0+ZW50cmllcyk7CisJZW50cnlfc2l6ZSA9IGxlMTZfdG9fY3B1KHNyYy0+ZW50cnlfc2l6ZSk7CisJb2Zmc2V0ID0gbGUxNl90b19jcHUoc3JjLT5vZmZzZXQpOworCWlmICgoKGVudHJpZXMgKiBlbnRyeV9zaXplICsgb2Zmc2V0KSAhPSBwYXlsb2FkX2xlbikgfHwKKwkgICAgIChwYXlsb2FkX2xlbiArIHNpemVvZigqc3JjKSAhPSB0b3RhbF9sZW4pKQorCQlyZXR1cm4gTlVMTDsKKworCWRzdCA9IGttYWxsb2Moc2l6ZW9mKCpkc3QpICsgcGF5bG9hZF9sZW4sIEdGUF9LRVJORUwpOworCWlmICghZHN0KQorCQlyZXR1cm4gTlVMTDsKKworCWRzdC0+ZW50cmllcyA9IGVudHJpZXM7CisJZHN0LT5lbnRyeV9zaXplID0gZW50cnlfc2l6ZTsKKwlkc3QtPm9mZnNldCA9IG9mZnNldDsKKwlkc3QtPmxlbiA9IHBheWxvYWRfbGVuOworCisJbWVtY3B5KGRzdC0+ZGF0YSwgc3JjLT5kYXRhLCBwYXlsb2FkX2xlbik7CisJcmV0dXJuIGRzdDsKK30KKworaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IGVlcHJvbV9wZGFfd3JhcCAqd3JhcDsKKwlzdHJ1Y3QgcGRhX2VudHJ5ICplbnRyeTsKKwl1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIGVudHJ5X2xlbjsKKwl2b2lkICp0bXA7CisJaW50IGVycjsKKwl1OCAqZW5kID0gKHU4ICopZWVwcm9tICsgbGVuOworCXUxNiBzeW50aCA9IDA7CisKKwl3cmFwID0gKHN0cnVjdCBlZXByb21fcGRhX3dyYXAgKikgZWVwcm9tOworCWVudHJ5ID0gKHZvaWQgKil3cmFwLT5kYXRhICsgbGUxNl90b19jcHUod3JhcC0+bGVuKTsKKworCS8qIHZlcmlmeSB0aGF0IGF0IGxlYXN0IHRoZSBlbnRyeSBsZW5ndGgvY29kZSBmaXRzICovCisJd2hpbGUgKCh1OCAqKWVudHJ5IDw9IGVuZCAtIHNpemVvZigqZW50cnkpKSB7CisJCWVudHJ5X2xlbiA9IGxlMTZfdG9fY3B1KGVudHJ5LT5sZW4pOworCQlkYXRhX2xlbiA9ICgoZW50cnlfbGVuIC0gMSkgPDwgMSk7CisKKwkJLyogYWJvcnQgaWYgZW50cnkgZXhjZWVkcyB3aG9sZSBzdHJ1Y3R1cmUgKi8KKwkJaWYgKCh1OCAqKWVudHJ5ICsgc2l6ZW9mKCplbnRyeSkgKyBkYXRhX2xlbiA+IGVuZCkKKwkJCWJyZWFrOworCisJCXN3aXRjaCAobGUxNl90b19jcHUoZW50cnktPmNvZGUpKSB7CisJCWNhc2UgUERSX01BQ19BRERSRVNTOgorCQkJaWYgKGRhdGFfbGVuICE9IEVUSF9BTEVOKQorCQkJCWJyZWFrOworCQkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoZGV2LCBlbnRyeS0+ZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX09VVFBVVF9QT1dFUl9MSU1JVFM6CisJCQlpZiAocHJpdi0+b3V0cHV0X2xpbWl0KQorCQkJCWJyZWFrOworCQkJZXJyID0gcDU0X2NvbnZlcnRfb3V0cHV0X2xpbWl0cyhkZXYsIGVudHJ5LT5kYXRhLAorCQkJCQkJCWRhdGFfbGVuKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnI7CisJCQlicmVhazsKKwkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEE6IHsKKwkJCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSA9CisJCQkJKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKWVudHJ5LT5kYXRhOworCQkJaWYgKGRhdGFfbGVuIDwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBlcnI7CisJCQl9CisKKwkJCXN3aXRjaCAoY3VydmVfZGF0YS0+Y2FsX21ldGhvZF9yZXYpIHsKKwkJCWNhc2UgMDoKKwkJCQllcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJZXJyID0gcDU0X2NvbnZlcnRfcmV2MShkZXYsIGN1cnZlX2RhdGEpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIGN1cnZlIGRhdGEgIgorCQkJCQkJInJldmlzaW9uICVkXG4iLAorCQkJCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwKKwkJCQkJCWN1cnZlX2RhdGEtPmNhbF9tZXRob2RfcmV2KTsKKwkJCQllcnIgPSAtRU5PREVWOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBEUl9QUklTTV9aSUZfVFhfSVFfQ0FMSUJSQVRJT046CisJCQlwcml2LT5pcV9hdXRvY2FsID0ga21hbGxvYyhkYXRhX2xlbiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXByaXYtPmlxX2F1dG9jYWwpIHsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyOworCQkJfQorCisJCQltZW1jcHkocHJpdi0+aXFfYXV0b2NhbCwgZW50cnktPmRhdGEsIGRhdGFfbGVuKTsKKwkJCXByaXYtPmlxX2F1dG9jYWxfbGVuID0gZGF0YV9sZW4gLyBzaXplb2Yoc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5KTsKKwkJCWJyZWFrOworCQljYXNlIFBEUl9ERUZBVUxUX0NPVU5UUlk6CisJCQlwNTRfcGFyc2VfZGVmYXVsdF9jb3VudHJ5KGRldiwgZW50cnktPmRhdGEsIGRhdGFfbGVuKTsKKwkJCWJyZWFrOworCQljYXNlIFBEUl9JTlRFUkZBQ0VfTElTVDoKKwkJCXRtcCA9IGVudHJ5LT5kYXRhOworCQkJd2hpbGUgKCh1OCAqKXRtcCA8IGVudHJ5LT5kYXRhICsgZGF0YV9sZW4pIHsKKwkJCQlzdHJ1Y3QgZXhwX2lmICpleHBfaWYgPSB0bXA7CisJCQkJaWYgKGV4cF9pZi0+aWZfaWQgPT0gY3B1X3RvX2xlMTYoSUZfSURfSVNMMzkwMDApKQorCQkJCQlzeW50aCA9IGxlMTZfdG9fY3B1KGV4cF9pZi0+dmFyaWFudCk7CisJCQkJdG1wICs9IHNpemVvZigqZXhwX2lmKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBEUl9IQVJEV0FSRV9QTEFURk9STV9DT01QT05FTlRfSUQ6CisJCQlpZiAoZGF0YV9sZW4gPCAyKQorCQkJCWJyZWFrOworCQkJcHJpdi0+dmVyc2lvbiA9ICoodTggKikoZW50cnktPmRhdGEgKyAxKTsKKwkJCWJyZWFrOworCQljYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OOgorCQljYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0RVQUxfQkFORDoKKwkJY2FzZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9FWFRFTkRFRDoKKwkJCXA1NF9wYXJzZV9yc3NpY2FsKGRldiwgZW50cnktPmRhdGEsIGRhdGFfbGVuLAorCQkJCQkgIGxlMTZfdG9fY3B1KGVudHJ5LT5jb2RlKSk7CisJCQlicmVhazsKKwkJY2FzZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9DVVNUT006IHsKKwkJCV9fbGUxNiAqc3JjID0gKHZvaWQgKikgZW50cnktPmRhdGE7CisJCQlzMTYgKmRzdCA9ICh2b2lkICopICZwcml2LT5yc3NpY2FsX2RiOworCQkJaW50IGk7CisKKwkJCWlmIChkYXRhX2xlbiAhPSBzaXplb2YocHJpdi0+cnNzaWNhbF9kYikpIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gZXJyOworCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihwcml2LT5yc3NpY2FsX2RiKSAvCisJCQkJCXNpemVvZigqc3JjKTsgaSsrKQorCQkJCSooZHN0KyspID0gKHMxNikgbGUxNl90b19jcHUoKihzcmMrKykpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTX0NVU1RPTTogeworCQkJc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqcGRhID0gKHZvaWQgKikgZW50cnktPmRhdGE7CisJCQlpZiAocHJpdi0+b3V0cHV0X2xpbWl0IHx8IGRhdGFfbGVuIDwgc2l6ZW9mKCpwZGEpKQorCQkJCWJyZWFrOworCQkJcHJpdi0+b3V0cHV0X2xpbWl0ID0gcDU0X2NvbnZlcnRfZGIocGRhLCBkYXRhX2xlbik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEFfQ1VTVE9NOiB7CisJCQlzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICpwZGEgPSAodm9pZCAqKSBlbnRyeS0+ZGF0YTsKKwkJCWlmIChwcml2LT5jdXJ2ZV9kYXRhIHx8IGRhdGFfbGVuIDwgc2l6ZW9mKCpwZGEpKQorCQkJCWJyZWFrOworCQkJcHJpdi0+Y3VydmVfZGF0YSA9IHA1NF9jb252ZXJ0X2RiKHBkYSwgZGF0YV9sZW4pOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUERSX0VORDoKKwkJCS8qIG1ha2UgaXQgb3ZlcnJ1biAqLworCQkJZW50cnlfbGVuID0gbGVuOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWVudHJ5ID0gKHZvaWQgKillbnRyeSArIChlbnRyeV9sZW4gKyAxKSoyOworCX0KKworCWlmICghc3ludGggfHwgIXByaXYtPmlxX2F1dG9jYWwgfHwgIXByaXYtPm91dHB1dF9saW1pdCB8fAorCSAgICAhcHJpdi0+Y3VydmVfZGF0YSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBub3QgYWxsIHJlcXVpcmVkIGVudHJpZXMgZm91bmQgaW4gZWVwcm9tIVxuIiwKKwkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwllcnIgPSBwNTRfZ2VuZXJhdGVfY2hhbm5lbF9saXN0cyhkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCisJcHJpdi0+cnhodyA9IHN5bnRoICYgUERSX1NZTlRIX0ZST05URU5EX01BU0s7CisJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX1hCT1cpCisJCXA1NF9pbml0X3hib3dfc3ludGgocHJpdik7CisJaWYgKCEoc3ludGggJiBQRFJfU1lOVEhfMjRfR0haX0RJU0FCTEVEKSkKKwkJZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPQorCQkJcHJpdi0+YmFuZF90YWJsZVtJRUVFODAyMTFfQkFORF8yR0haXTsKKwlpZiAoIShzeW50aCAmIFBEUl9TWU5USF81X0dIWl9ESVNBQkxFRCkpCisJCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KKwkJCXByaXYtPmJhbmRfdGFibGVbSUVFRTgwMjExX0JBTkRfNUdIWl07CisJaWYgKChzeW50aCAmIFBEUl9TWU5USF9SWF9ESVZfTUFTSykgPT0gUERSX1NZTlRIX1JYX0RJVl9TVVBQT1JURUQpCisJCXByaXYtPnJ4X2RpdmVyc2l0eV9tYXNrID0gMzsKKwlpZiAoKHN5bnRoICYgUERSX1NZTlRIX1RYX0RJVl9NQVNLKSA9PSBQRFJfU1lOVEhfVFhfRElWX1NVUFBPUlRFRCkKKwkJcHJpdi0+dHhfZGl2ZXJzaXR5X21hc2sgPSAzOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+d2lwaHktPnBlcm1fYWRkcikpIHsKKwkJdTggcGVybV9hZGRyW0VUSF9BTEVOXTsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSW52YWxpZCBod2FkZHIhIFVzaW5nIHJhbmRvbWx5IGdlbmVyYXRlZCBNQUMgYWRkclxuIiwKKwkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCQlyYW5kb21fZXRoZXJfYWRkcihwZXJtX2FkZHIpOworCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihkZXYsIHBlcm1fYWRkcik7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGh3YWRkciAlcE0sIE1BQzppc2wzOCUwMnggUkY6JXNcbiIsCisJCXdpcGh5X25hbWUoZGV2LT53aXBoeSksCWRldi0+d2lwaHktPnBlcm1fYWRkciwgcHJpdi0+dmVyc2lvbiwKKwkJcDU0X3JmX2NoaXBzW3ByaXYtPnJ4aHddKTsKKworCXJldHVybiAwOworCitlcnI6CisJa2ZyZWUocHJpdi0+aXFfYXV0b2NhbCk7CisJa2ZyZWUocHJpdi0+b3V0cHV0X2xpbWl0KTsKKwlrZnJlZShwcml2LT5jdXJ2ZV9kYXRhKTsKKwlwcml2LT5pcV9hdXRvY2FsID0gTlVMTDsKKwlwcml2LT5vdXRwdXRfbGltaXQgPSBOVUxMOworCXByaXYtPmN1cnZlX2RhdGEgPSBOVUxMOworCisJcHJpbnRrKEtFUk5fRVJSICIlczogZWVwcm9tIHBhcnNlIGZhaWxlZCFcbiIsCisJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwNTRfcGFyc2VfZWVwcm9tKTsKKworaW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc2l6ZV90IGVlcHJvbV9zaXplID0gMHgyMDIwLCBvZmZzZXQgPSAwLCBibG9ja3NpemUsIG1heGJsb2Nrc2l6ZTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwl2b2lkICplZXByb207CisKKwltYXhibG9ja3NpemUgPSBFRVBST01fUkVBREJBQ0tfTEVOOworCWlmIChwcml2LT5md192YXIgPj0gMHg1MDkpCisJCW1heGJsb2Nrc2l6ZSAtPSAweGM7CisJZWxzZQorCQltYXhibG9ja3NpemUgLT0gMHg0OworCisJZWVwcm9tID0ga3phbGxvYyhlZXByb21fc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFlZXByb20pKQorCQlnb3RvIGZyZWU7CisKKwl3aGlsZSAoZWVwcm9tX3NpemUpIHsKKwkJYmxvY2tzaXplID0gbWluKGVlcHJvbV9zaXplLCBtYXhibG9ja3NpemUpOworCQlyZXQgPSBwNTRfZG93bmxvYWRfZWVwcm9tKHByaXYsICh2b2lkICopIChlZXByb20gKyBvZmZzZXQpLAorCQkJCQkgIG9mZnNldCwgYmxvY2tzaXplKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlnb3RvIGZyZWU7CisKKwkJb2Zmc2V0ICs9IGJsb2Nrc2l6ZTsKKwkJZWVwcm9tX3NpemUgLT0gYmxvY2tzaXplOworCX0KKworCXJldCA9IHA1NF9wYXJzZV9lZXByb20oZGV2LCBlZXByb20sIG9mZnNldCk7CitmcmVlOgorCWtmcmVlKGVlcHJvbSk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHA1NF9yZWFkX2VlcHJvbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1MWFlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9lZXByb20uaApAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIGVlcHJvbSBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgbWFjODAyMTEgUHJpc201NCBkcml2ZXJzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKgorICogQmFzZWQgb246CisgKiAtIHRoZSBpc2xzbSAoc29mdG1hYyBwcmlzbTU0KSBkcml2ZXIsIHdoaWNoIGlzOgorICogICBDb3B5cmlnaHQgMjAwNC0yMDA2IEplYW4tQmFwdGlzdGUgTm90ZSA8amJub3RlQGdtYWlsLmNvbT4sIGV0IGFsLgorICoKKyAqIC0gTE1BQyBBUEkgaW50ZXJmYWNlIGhlYWRlciBmaWxlIGZvciBTVExDNDU2MCAobG1hY19sb25nYm93LmgpCisgKiAgIENvcHlyaWdodCAoQykgMjAwNyBDb25leGFudCBTeXN0ZW1zLCBJbmMuCisgKgorICogLSBpc2xtdmMgZHJpdmVyCisgKiAgIENvcHlyaWdodCAoQykgMjAwMSBJbnRlcnNpbCBBbWVyaWNhcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIEVFUFJPTV9ICisjZGVmaW5lIEVFUFJPTV9ICisKKy8qIFBEQSBkZWZpbmVzIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24gKHRha2VuIGZyb20gaXNsc21fcGRhLmgpICovCisKK3N0cnVjdCBwZGFfZW50cnkgeworCV9fbGUxNiBsZW47CS8qIGluY2x1ZGVzIGJvdGggY29kZSBhbmQgZGF0YSAqLworCV9fbGUxNiBjb2RlOworCXU4IGRhdGFbMF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgZWVwcm9tX3BkYV93cmFwIHsKKwlfX2xlMzIgbWFnaWM7CisJX19sZTE2IHBhZDsKKwlfX2xlMTYgbGVuOworCV9fbGUzMiBhcm1fb3Bjb2RlOworCXU4IGRhdGFbMF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgeworCV9fbGUxNiBpcV9wYXJhbVs0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSB7CisJX19sZTE2IGZyZXE7CisJc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5IHBhcmFtczsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQgeworCV9fbGUxNiBmcmVxOworCXU4IHZhbF9icHNrOworCXU4IHZhbF9xcHNrOworCXU4IHZhbF8xNnFhbTsKKwl1OCB2YWxfNjRxYW07CisJdTggcmF0ZV9zZXRfbWFzazsKKwl1OCByYXRlX3NldF9zaXplOworfSBfX3BhY2tlZDsKKworc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYwIHsKKwl1OCByZl9wb3dlcjsKKwl1OCBwYV9kZXRlY3RvcjsKKwl1OCBwY3Y7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjEgeworCXU4IHJmX3Bvd2VyOworCXU4IHBhX2RldGVjdG9yOworCXU4IGRhdGFfYmFya2VyOworCXU4IGRhdGFfYnBzazsKKwl1OCBkYXRhX3Fwc2s7CisJdTggZGF0YV8xNnFhbTsKKwl1OCBkYXRhXzY0cWFtOworfSBfX3BhY2tlZDsKKworc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhIHsKKwl1OCBjYWxfbWV0aG9kX3JldjsKKwl1OCBjaGFubmVsczsKKwl1OCBwb2ludHNfcGVyX2NoYW5uZWw7CisJdTggcGFkZGluZzsKKwl1OCBkYXRhWzBdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSB7CisJX19sZTE2IG11bDsKKwlfX2xlMTYgYWRkOworfSBfX3BhY2tlZDsKKworc3RydWN0IHBkYV9jb3VudHJ5IHsKKwl1OCByZWdkb21haW47CisJdTggYWxwaGEyWzJdOworCXU4IGZsYWdzOworfSBfX3BhY2tlZDsKKworc3RydWN0IHBkYV9hbnRlbm5hX2dhaW4geworCXN0cnVjdCB7CisJCXU4IGdhaW5fNUdIejsJLyogMC4yNSBkQmkgdW5pdHMgKi8KKwkJdTggZ2Fpbl8yR0h6OwkvKiAwLjI1IGRCaSB1bml0cyAqLworCX0gX19wYWNrZWQgYW50ZW5uYVswXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgeworCV9fbGUxNiBlbnRyaWVzOworCV9fbGUxNiBlbnRyeV9zaXplOworCV9fbGUxNiBvZmZzZXQ7CisJX19sZTE2IGxlbjsKKwl1OCBkYXRhWzBdOworfSBfX3BhY2tlZDsKKworLyoKKyAqIHRoaXMgZGVmaW5lcyB0aGUgUERSIGNvZGVzIHVzZWQgdG8gYnVpbGQgUERBcyBhcyBkZWZpbmVkIGluIGRvY3VtZW50CisgKiBudW1iZXIgNTUzMTU1LiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBtaXJyb3JzIHZlcnNpb24gMS4xIG9mIHRoZQorICogZG9jdW1lbnQgYW5kIGxpc3RzIG9ubHkgUERScyBzdXBwb3J0ZWQgYnkgdGhlIEFSTSBwbGF0Zm9ybS4KKyAqLworCisvKiBjb21tb24gYW5kIGNob2ljZSByYW5nZSAoMHgwMDAwIC0gMHgwZmZmKSAqLworI2RlZmluZSBQRFJfRU5ECQkJCQkweDAwMDAKKyNkZWZpbmUgUERSX01BTlVGQUNUVVJJTkdfUEFSVF9OVU1CRVIJCTB4MDAwMQorI2RlZmluZSBQRFJfUERBX1ZFUlNJT04JCQkJMHgwMDAyCisjZGVmaW5lIFBEUl9OSUNfU0VSSUFMX05VTUJFUgkJCTB4MDAwMworI2RlZmluZSBQRFJfTklDX1JBTV9TSVpFCQkJMHgwMDA1CisjZGVmaW5lIFBEUl9SRk1PREVNX1NVUF9SQU5HRQkJCTB4MDAwNgorI2RlZmluZSBQRFJfUFJJU01fTUFDX1NVUF9SQU5HRQkJCTB4MDAwNworI2RlZmluZSBQRFJfTklDX0lECQkJCTB4MDAwOAorCisjZGVmaW5lIFBEUl9NQUNfQUREUkVTUwkJCQkweDAxMDEKKyNkZWZpbmUgUERSX1JFR1VMQVRPUllfRE9NQUlOX0xJU1QJCTB4MDEwMyAvKiBvYnNvbGV0ZSAqLworI2RlZmluZSBQRFJfQUxMT1dFRF9DSEFOX1NFVAkJCTB4MDEwNAorI2RlZmluZSBQRFJfREVGQVVMVF9DSEFOCQkJMHgwMTA1CisjZGVmaW5lIFBEUl9URU1QRVJBVFVSRV9UWVBFCQkJMHgwMTA3CisKKyNkZWZpbmUgUERSX0lGUl9TRVRUSU5HCQkJCTB4MDIwMAorI2RlZmluZSBQRFJfUkZSX1NFVFRJTkcJCQkJMHgwMjAxCisjZGVmaW5lIFBEUl8zODYxX0JBU0VMSU5FX1JFR19TRVRUSU5HUwkJMHgwMjAyCisjZGVmaW5lIFBEUl8zODYxX1NIQURPV19SRUdfU0VUVElOR1MJCTB4MDIwMworI2RlZmluZSBQRFJfMzg2MV9JRlJGX1JFR19TRVRUSU5HUwkJMHgwMjA0CisKKyNkZWZpbmUgUERSXzM4NjFfQ0hBTl9DQUxJQl9TRVRfUE9JTlRTCQkweDAzMDAKKyNkZWZpbmUgUERSXzM4NjFfQ0hBTl9DQUxJQl9JTlRFR1JBVE9SCQkweDAzMDEKKworI2RlZmluZSBQRFJfMzg0Ml9QUklTTV9JSV9OSUNfQ09ORklHCQkweDA0MDAKKyNkZWZpbmUgUERSX1BSSVNNX1VTQl9JRAkJCTB4MDQwMQorI2RlZmluZSBQRFJfUFJJU01fUENJX0lECQkJMHgwNDAyCisjZGVmaW5lIFBEUl9QUklTTV9QQ0lfSUZfQ09ORklHCQkJMHgwNDAzCisjZGVmaW5lIFBEUl9QUklTTV9QQ0lfUE1fQ09ORklHCQkJMHgwNDA0CisKKyNkZWZpbmUgUERSXzM4NjFfTUZfVEVTVF9DSEFOX1NFVF9QT0lOVFMJMHgwOTAwCisjZGVmaW5lIFBEUl8zODYxX01GX1RFU1RfQ0hBTl9JTlRFR1JBVE9SUwkweDA5MDEKKworLyogQVJNIHJhbmdlICgweDEwMDAgLSAweDFmZmYpICovCisjZGVmaW5lIFBEUl9DT1VOVFJZX0lORk9STUFUSU9OCQkJMHgxMDAwIC8qIG9ic29sZXRlICovCisjZGVmaW5lIFBEUl9JTlRFUkZBQ0VfTElTVAkJCTB4MTAwMQorI2RlZmluZSBQRFJfSEFSRFdBUkVfUExBVEZPUk1fQ09NUE9ORU5UX0lECTB4MTAwMgorI2RlZmluZSBQRFJfT0VNX05BTUUJCQkJMHgxMDAzCisjZGVmaW5lIFBEUl9QUk9EVUNUX05BTUUJCQkweDEwMDQKKyNkZWZpbmUgUERSX1VURjhfT0VNX05BTUUJCQkweDEwMDUKKyNkZWZpbmUgUERSX1VURjhfUFJPRFVDVF9OQU1FCQkJMHgxMDA2CisjZGVmaW5lIFBEUl9DT1VOVFJZX0xJU1QJCQkweDEwMDcKKyNkZWZpbmUgUERSX0RFRkFVTFRfQ09VTlRSWQkJCTB4MTAwOAorCisjZGVmaW5lIFBEUl9BTlRFTk5BX0dBSU4JCQkweDExMDAKKworI2RlZmluZSBQRFJfUFJJU01fSU5ESUdPX1BBX0NBTElCUkFUSU9OX0RBVEEJMHgxOTAxCisjZGVmaW5lIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OCQkweDE5MDIKKyNkZWZpbmUgUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTCTB4MTkwMworI2RlZmluZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEEJCTB4MTkwNAorI2RlZmluZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9EVUFMX0JBTkQJMHgxOTA1CisjZGVmaW5lIFBEUl9QUklTTV9aSUZfVFhfSVFfQ0FMSUJSQVRJT04JCTB4MTkwNgorI2RlZmluZSBQRFJfUkVHVUxBVE9SWV9QT1dFUl9MSU1JVFMJCTB4MTkwNworI2RlZmluZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9FWFRFTkRFRAkweDE5MDgKKyNkZWZpbmUgUERSX1JBRElBVEVEX1RSQU5TTUlTU0lPTl9DT1JSRUNUSU9OCTB4MTkwOQorI2RlZmluZSBQRFJfUFJJU01fVFhfSVFfQ0FMSUJSQVRJT04JCTB4MTkwYQorCisvKiByZXNlcnZlZCByYW5nZSAoMHgyMDAwIC0gMHg3ZmZmKSAqLworCisvKiBjdXN0b21lciByYW5nZSAoMHg4MDAwIC0gMHhmZmZmKSAqLworI2RlZmluZSBQRFJfQkFTRUJBTkRfUkVHSVNURVJTCQkJCTB4ODAwMAorI2RlZmluZSBQRFJfUEVSX0NIQU5ORUxfQkFTRUJBTkRfUkVHSVNURVJTCQkweDgwMDEKKworLyogdXNlZCBieSBvdXIgbW9kaWZpY2F0ZWQgZWVwcm9tIGltYWdlICovCisjZGVmaW5lIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0NVU1RPTQkJMHhERUFECisjZGVmaW5lIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUU19DVVNUT00JMHhCRUVGCisjZGVmaW5lIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQV9DVVNUT00JCTB4QjA1RAorCisvKiBJbnRlcmZhY2UgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgUERSX0lOVEVSRkFDRV9ST0xFX1NFUlZFUgkweDAwMDAKKyNkZWZpbmUgUERSX0lOVEVSRkFDRV9ST0xFX0NMSUVOVAkweDAwMDEKKworLyogUERSIGRlZmluaXRpb25zIGZvciBkZWZhdWx0IGNvdW50cnkgJiBjb3VudHJ5IGxpc3QgKi8KKyNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9DT0RFCQkweDgwCisjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfQ09ERV9SRUFMCTB4MDAKKyNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9DT0RFX1BTRVVETwkweDgwCisjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfQkFORAkJMHg0MAorI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0JBTkRfMkdIWgkweDAwCisjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfQkFORF81R0haCTB4NDAKKyNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9JT0RPT1IJCTB4MzAKKyNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9JT0RPT1JfQk9USAkweDAwCisjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfSU9ET09SX0lORE9PUgkweDIwCisjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfSU9ET09SX09VVERPT1IJMHgzMAorI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0lOREVYCQkweDBmCisKKy8qIFNwZWNpZmljIExNQUMgRlcvSFcgdmFyaWFudCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfTUFTSwkJMHgwMDA3CisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9EVUVUVEUzCTB4MDAwMQorI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfRFVFVFRFMgkweDAwMDIKKyNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0ZSSVNCRUUJMHgwMDAzCisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9YQk9XCQkweDAwMDQKKyNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cJMHgwMDA1CisjZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfTUFTSwkJMHgwMDE4CisjZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfUEFfREVURUNUT1IJMHgwMDAwCisjZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfRElTQUJMRUQJMHgwMDA4CisjZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfWklGCQkweDAwMTAKKyNkZWZpbmUgUERSX1NZTlRIX0ZBQV9TV0lUQ0hfTUFTSwkweDAwMjAKKyNkZWZpbmUgUERSX1NZTlRIX0ZBQV9TV0lUQ0hfRU5BQkxFRAkweDAwMjAKKyNkZWZpbmUgUERSX1NZTlRIXzI0X0dIWl9NQVNLCQkweDAwNDAKKyNkZWZpbmUgUERSX1NZTlRIXzI0X0dIWl9ESVNBQkxFRAkweDAwNDAKKyNkZWZpbmUgUERSX1NZTlRIXzVfR0haX01BU0sJCTB4MDA4MAorI2RlZmluZSBQRFJfU1lOVEhfNV9HSFpfRElTQUJMRUQJMHgwMDgwCisjZGVmaW5lIFBEUl9TWU5USF9SWF9ESVZfTUFTSwkJMHgwMTAwCisjZGVmaW5lIFBEUl9TWU5USF9SWF9ESVZfU1VQUE9SVEVECTB4MDEwMAorI2RlZmluZSBQRFJfU1lOVEhfVFhfRElWX01BU0sJCTB4MDIwMAorI2RlZmluZSBQRFJfU1lOVEhfVFhfRElWX1NVUFBPUlRFRAkweDAyMDAKKyNkZWZpbmUgUERSX1NZTlRIX0FTTV9NQVNLCQkweDA0MDAKKyNkZWZpbmUgUERSX1NZTlRIX0FTTV9YU1dPTgkJMHgwNDAwCisKKyNlbmRpZiAvKiBFRVBST01fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2Z3aW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9md2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiOWU5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9md2lvLmMKQEAgLTAsMCArMSw3MTYgQEAKKy8qCisgKiBGaXJtd2FyZSBJL08gY29kZSBmb3IgbWFjODAyMTEgUHJpc201NCBkcml2ZXJzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBCYXNlZCBvbjoKKyAqIC0gdGhlIGlzbHNtIChzb2Z0bWFjIHByaXNtNTQpIGRyaXZlciwgd2hpY2ggaXM6CisgKiAgIENvcHlyaWdodCAyMDA0LTIwMDYgSmVhbi1CYXB0aXN0ZSBOb3RlIDxqYm5vdGVAZ21haWwuY29tPiwgZXQgYWwuCisgKiAtIHN0bGM0NXh4IGRyaXZlcgorICogICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgInA1NC5oIgorI2luY2x1ZGUgImVlcHJvbS5oIgorI2luY2x1ZGUgImxtYWMuaCIKKworaW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IGV4cF9pZiAqZXhwX2lmOworCXN0cnVjdCBib290cmVjICpib290cmVjOworCXUzMiAqZGF0YSA9ICh1MzIgKilmdy0+ZGF0YTsKKwl1MzIgKmVuZF9kYXRhID0gKHUzMiAqKWZ3LT5kYXRhICsgKGZ3LT5zaXplID4+IDIpOworCXU4ICpmd192ZXJzaW9uID0gTlVMTDsKKwlzaXplX3QgbGVuOworCWludCBpOworCWludCBtYXhsZW47CisKKwlpZiAocHJpdi0+cnhfc3RhcnQpCisJCXJldHVybiAwOworCisJd2hpbGUgKGRhdGEgPCBlbmRfZGF0YSAmJiAqZGF0YSkKKwkJZGF0YSsrOworCisJd2hpbGUgKGRhdGEgPCBlbmRfZGF0YSAmJiAhKmRhdGEpCisJCWRhdGErKzsKKworCWJvb3RyZWMgPSAoc3RydWN0IGJvb3RyZWMgKikgZGF0YTsKKworCXdoaWxlIChib290cmVjLT5kYXRhIDw9IGVuZF9kYXRhICYmIChib290cmVjLT5kYXRhICsKKwkgICAgICAgKGxlbiA9IGxlMzJfdG9fY3B1KGJvb3RyZWMtPmxlbikpKSA8PSBlbmRfZGF0YSkgeworCQl1MzIgY29kZSA9IGxlMzJfdG9fY3B1KGJvb3RyZWMtPmNvZGUpOworCQlzd2l0Y2ggKGNvZGUpIHsKKwkJY2FzZSBCUl9DT0RFX0NPTVBPTkVOVF9JRDoKKwkJCXByaXYtPmZ3X2ludGVyZmFjZSA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopCisJCQkJCSAgICAgYm9vdHJlYy0+ZGF0YSk7CisJCQlzd2l0Y2ggKHByaXYtPmZ3X2ludGVyZmFjZSkgeworCQkJY2FzZSBGV19MTTg2OgorCQkJY2FzZSBGV19MTTIwOgorCQkJY2FzZSBGV19MTTg3OiB7CisJCQkJY2hhciAqaWZ0eXBlID0gKGNoYXIgKilib290cmVjLT5kYXRhOworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwNTQgZGV0ZWN0ZWQgYSBMTSVjJWMgIgorCQkJCQkJICJmaXJtd2FyZVxuIiwKKwkJCQkJd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCQkJCQlpZnR5cGVbMl0sIGlmdHlwZVszXSk7CisJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBGV19GTUFDOgorCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bnN1cHBvcnRlZCBmaXJtd2FyZVxuIiwKKwkJCQkJd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEJSX0NPREVfQ09NUE9ORU5UX1ZFUlNJT046CisJCQkvKiAyNCBieXRlcyBzaG91bGQgYmUgZW5vdWdoIGZvciBhbGwgZmlybXdhcmVzICovCisJCQlpZiAoc3RybmxlbigodW5zaWduZWQgY2hhciAqKSBib290cmVjLT5kYXRhLCAyNCkgPCAyNCkKKwkJCQlmd192ZXJzaW9uID0gKHVuc2lnbmVkIGNoYXIgKikgYm9vdHJlYy0+ZGF0YTsKKwkJCWJyZWFrOworCQljYXNlIEJSX0NPREVfREVTQ1I6IHsKKwkJCXN0cnVjdCBib290cmVjX2Rlc2MgKmRlc2MgPQorCQkJCShzdHJ1Y3QgYm9vdHJlY19kZXNjICopYm9vdHJlYy0+ZGF0YTsKKwkJCXByaXYtPnJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy0+cnhfc3RhcnQpOworCQkJLyogRklYTUUgYWRkIHNhbml0eSBjaGVja2luZyAqLworCQkJcHJpdi0+cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy0+cnhfZW5kKSAtIDB4MzUwMDsKKwkJCXByaXYtPmhlYWRyb29tID0gZGVzYy0+aGVhZHJvb207CisJCQlwcml2LT50YWlscm9vbSA9IGRlc2MtPnRhaWxyb29tOworCQkJcHJpdi0+cHJpdmFjeV9jYXBzID0gZGVzYy0+cHJpdmFjeV9jYXBzOworCQkJcHJpdi0+cnhfa2V5Y2FjaGVfc2l6ZSA9IGRlc2MtPnJ4X2tleWNhY2hlX3NpemU7CisJCQlpZiAobGUzMl90b19jcHUoYm9vdHJlYy0+bGVuKSA9PSAxMSkKKwkJCQlwcml2LT5yeF9tdHUgPSBsZTE2X3RvX2NwdShkZXNjLT5yeF9tdHUpOworCQkJZWxzZQorCQkJCXByaXYtPnJ4X210dSA9IChzaXplX3QpCisJCQkJCTB4NjIwIC0gcHJpdi0+dHhfaGRyX2xlbjsKKwkJCW1heGxlbiA9IHByaXYtPnR4X2hkcl9sZW4gKyAvKiBVU0IgZGV2aWNlcyAqLworCQkJCSBzaXplb2Yoc3RydWN0IHA1NF9yeF9kYXRhKSArCisJCQkJIDQgKyAvKiByeCBhbGlnbm1lbnQgKi8KKwkJCQkgSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRDsKKwkJCWlmIChwcml2LT5yeF9tdHUgPiBtYXhsZW4gJiYgUEFHRV9TSVpFID09IDQwOTYpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJwNTQ6IHJ4X210dSByZWR1Y2VkIGZyb20gJWQgIgorCQkJCSAgICAgICAidG8gJWRcbiIsIHByaXYtPnJ4X210dSwgbWF4bGVuKTsKKwkJCQlwcml2LT5yeF9tdHUgPSBtYXhsZW47CisJCQl9CisJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBCUl9DT0RFX0VYUE9TRURfSUY6CisJCQlleHBfaWYgPSAoc3RydWN0IGV4cF9pZiAqKSBib290cmVjLT5kYXRhOworCQkJZm9yIChpID0gMDsgaSA8IChsZW4gKiBzaXplb2YoKmV4cF9pZikgLyA0KTsgaSsrKQorCQkJCWlmIChleHBfaWZbaV0uaWZfaWQgPT0gY3B1X3RvX2xlMTYoSUZfSURfTE1BQykpCisJCQkJCXByaXYtPmZ3X3ZhciA9IGxlMTZfdG9fY3B1KGV4cF9pZltpXS52YXJpYW50KTsKKwkJCWJyZWFrOworCQljYXNlIEJSX0NPREVfREVQRU5ERU5UX0lGOgorCQkJYnJlYWs7CisJCWNhc2UgQlJfQ09ERV9FTkRfT0ZfQlJBOgorCQljYXNlIExFR0FDWV9CUl9DT0RFX0VORF9PRl9CUkE6CisJCQllbmRfZGF0YSA9IE5VTEw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJvb3RyZWMgPSAoc3RydWN0IGJvb3RyZWMgKikmYm9vdHJlYy0+ZGF0YVtsZW5dOworCX0KKworCWlmIChmd192ZXJzaW9uKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogRlcgcmV2ICVzIC0gU29mdG1hYyBwcm90b2NvbCAleC4leFxuIiwKKwkJCXdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgZndfdmVyc2lvbiwKKwkJCXByaXYtPmZ3X3ZhciA+PiA4LCBwcml2LT5md192YXIgJiAweGZmKTsKKworCWlmIChwcml2LT5md192YXIgPCAweDUwMCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHlvdSBhcmUgdXNpbmcgYW4gb2Jzb2xldGUgZmlybXdhcmUuICIKKwkJICAgICAgICJ2aXNpdCBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL3A1NCAiCisJCSAgICAgICAiYW5kIGdyYWIgb25lIGZvciBcImtlcm5lbCA+PSAyLjYuMjhcIiFcbiIsCisJCQl3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOworCisJaWYgKHByaXYtPmZ3X3ZhciA+PSAweDMwMCkgeworCQkvKiBGaXJtd2FyZSBzdXBwb3J0cyBRb1MsIHVzZSBpdCEgKi8KKworCQlpZiAocHJpdi0+ZndfdmFyID49IDB4NTAwKSB7CisJCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfVk9dLmxpbWl0ID0gMTY7CisJCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfVkldLmxpbWl0ID0gMTY7CisJCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfQkVdLmxpbWl0ID0gMTY7CisJCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfQktdLmxpbWl0ID0gMTY7CisJCX0gZWxzZSB7CisJCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfVk9dLmxpbWl0ID0gMzsKKwkJCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19WSV0ubGltaXQgPSA0OworCQkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX0JFXS5saW1pdCA9IDM7CisJCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfQktdLmxpbWl0ID0gMjsKKwkJfQorCQlwcml2LT5ody0+cXVldWVzID0gUDU0X1FVRVVFX0FDX05VTTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogY3J5cHRvZ3JhcGhpYyBhY2NlbGVyYXRvciAiCisJICAgICAgICJXRVA6JXMsIFRLSVA6JXMsIENDTVA6JXNcbiIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJKHByaXYtPnByaXZhY3lfY2FwcyAmIEJSX0RFU0NfUFJJVl9DQVBfV0VQKSA/ICJZRVMiIDoKKwkJIm5vIiwgKHByaXYtPnByaXZhY3lfY2FwcyAmIChCUl9ERVNDX1BSSVZfQ0FQX1RLSVAgfAorCQlCUl9ERVNDX1BSSVZfQ0FQX01JQ0hBRUwpKSA/ICJZRVMiIDogIm5vIiwKKwkJKHByaXYtPnByaXZhY3lfY2FwcyAmIEJSX0RFU0NfUFJJVl9DQVBfQUVTQ0NNUCkgPworCQkiWUVTIiA6ICJubyIpOworCisJaWYgKHByaXYtPnJ4X2tleWNhY2hlX3NpemUpIHsKKwkJLyoKKwkJICogTk9URToKKwkJICoKKwkJICogVGhlIGZpcm13YXJlIHByb3ZpZGVzIGF0IG1vc3QgMjU1ICgwIC0gMjU0KSBzbG90cworCQkgKiBmb3Iga2V5cyB3aGljaCBhcmUgdGhlbiB1c2VkIHRvIG9mZmxvYWQgZGVjcnlwdGlvbi4KKwkJICogQXMgYSByZXN1bHQgdGhlIDI1NSBlbnRyeSAoYWthIDB4ZmYpIGNhbiBiZSB1c2VkCisJCSAqIHNhZmVseSBieSB0aGUgZHJpdmVyIHRvIG1hcmsga2V5cyB0aGF0IGRpZG4ndCBmaXQKKwkJICogaW50byB0aGUgZnVsbCBjYWNoZS4gVGhpcyB0cmljayBzYXZlcyB1cyBmcm9tCisJCSAqIGtlZXBpbmcgYSBleHRyYSBsaXN0IGZvciB1cGxvYWRlZCBrZXlzLgorCQkgKi8KKworCQlwcml2LT51c2VkX3J4a2V5cyA9IGt6YWxsb2MoQklUU19UT19MT05HUygKKwkJCXByaXYtPnJ4X2tleWNhY2hlX3NpemUpLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIXByaXYtPnVzZWRfcnhrZXlzKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwNTRfcGFyc2VfZmlybXdhcmUpOworCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnA1NF9hbGxvY19za2Ioc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHUxNiBoZHJfZmxhZ3MsCisJCQkJICAgICB1MTYgcGF5bG9hZF9sZW4sIHUxNiB0eXBlLCBnZnBfdCBtZW1mbGFncykKK3sKKwlzdHJ1Y3QgcDU0X2hkciAqaGRyOworCXN0cnVjdCBza19idWZmICpza2I7CisJc2l6ZV90IGZyYW1lX2xlbiA9IHNpemVvZigqaGRyKSArIHBheWxvYWRfbGVuOworCisJaWYgKGZyYW1lX2xlbiA+IFA1NF9NQVhfQ1RSTF9GUkFNRV9MRU4pCisJCXJldHVybiBOVUxMOworCisJaWYgKHVubGlrZWx5KHNrYl9xdWV1ZV9sZW4oJnByaXYtPnR4X3BlbmRpbmcpID4gNjQpKQorCQlyZXR1cm4gTlVMTDsKKworCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihwcml2LT50eF9oZHJfbGVuICsgZnJhbWVfbGVuLCBtZW1mbGFncyk7CisJaWYgKCFza2IpCisJCXJldHVybiBOVUxMOworCXNrYl9yZXNlcnZlKHNrYiwgcHJpdi0+dHhfaGRyX2xlbik7CisKKwloZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiX3B1dChza2IsIHNpemVvZigqaGRyKSk7CisJaGRyLT5mbGFncyA9IGNwdV90b19sZTE2KGhkcl9mbGFncyk7CisJaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihwYXlsb2FkX2xlbik7CisJaGRyLT50eXBlID0gY3B1X3RvX2xlMTYodHlwZSk7CisJaGRyLT50cmllcyA9IGhkci0+cnRzX3RyaWVzID0gMDsKKwlyZXR1cm4gc2tiOworfQorCitpbnQgcDU0X2Rvd25sb2FkX2VlcHJvbShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdm9pZCAqYnVmLAorCQkJdTE2IG9mZnNldCwgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgcDU0X2VlcHJvbV9sbTg2ICplZXByb21faGRyOworCXN0cnVjdCBza19idWZmICpza2I7CisJc2l6ZV90IGVlcHJvbV9oZHJfc2l6ZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwcml2LT5md192YXIgPj0gMHg1MDkpCisJCWVlcHJvbV9oZHJfc2l6ZSA9IHNpemVvZigqZWVwcm9tX2hkcik7CisJZWxzZQorCQllZXByb21faGRyX3NpemUgPSAweDQ7CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MLCBlZXByb21faGRyX3NpemUgKworCQkJICAgIGxlbiwgUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0ssCisJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFza2IpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2xvY2soJnByaXYtPmVlcHJvbV9tdXRleCk7CisJcHJpdi0+ZWVwcm9tID0gYnVmOworCWVlcHJvbV9oZHIgPSAoc3RydWN0IHA1NF9lZXByb21fbG04NiAqKSBza2JfcHV0KHNrYiwKKwkJZWVwcm9tX2hkcl9zaXplICsgbGVuKTsKKworCWlmIChwcml2LT5md192YXIgPCAweDUwOSkgeworCQllZXByb21faGRyLT52MS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpOworCQllZXByb21faGRyLT52MS5sZW4gPSBjcHVfdG9fbGUxNihsZW4pOworCX0gZWxzZSB7CisJCWVlcHJvbV9oZHItPnYyLm9mZnNldCA9IGNwdV90b19sZTMyKG9mZnNldCk7CisJCWVlcHJvbV9oZHItPnYyLmxlbiA9IGNwdV90b19sZTE2KGxlbik7CisJCWVlcHJvbV9oZHItPnYyLm1hZ2ljMiA9IDB4ZjsKKwkJbWVtY3B5KGVlcHJvbV9oZHItPnYyLm1hZ2ljLCAoY29uc3QgY2hhciAqKSJMT0NLIiwgNCk7CisJfQorCisJcDU0X3R4KHByaXYsIHNrYik7CisKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAorCSAgICAgJnByaXYtPmVlcHJvbV9jb21wLCBIWikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2aWNlIGRvZXMgbm90IHJlc3BvbmQhXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKwkJcmV0ID0gLUVCVVNZOworCX0KKwlwcml2LT5lZXByb20gPSBOVUxMOworCW11dGV4X3VubG9jaygmcHJpdi0+ZWVwcm9tX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcDU0X3VwZGF0ZV9iZWFjb25fdGltKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB1MTYgYWlkLCBib29sIHNldCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwNTRfdGltICp0aW07CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnRpbSksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9USU0sIEdGUF9BVE9NSUMpOworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0aW0gPSAoc3RydWN0IHA1NF90aW0gKikgc2tiX3B1dChza2IsIHNpemVvZigqdGltKSk7CisJdGltLT5jb3VudCA9IDE7CisJdGltLT5lbnRyeVswXSA9IGNwdV90b19sZTE2KHNldCA/IChhaWQgfCAweDgwMDApIDogYWlkKTsKKwlwNTRfdHgocHJpdiwgc2tiKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHA1NF9zdGFfdW5sb2NrKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB1OCAqYWRkcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwNTRfc3RhX3VubG9jayAqc3RhOworCisJc2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpzdGEpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfUFNNX1NUQV9VTkxPQ0ssIEdGUF9BVE9NSUMpOworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdGEgPSAoc3RydWN0IHA1NF9zdGFfdW5sb2NrICopc2tiX3B1dChza2IsIHNpemVvZigqc3RhKSk7CisJbWVtY3B5KHN0YS0+YWRkciwgYWRkciwgRVRIX0FMRU4pOworCXA1NF90eChwcml2LCBza2IpOworCXJldHVybiAwOworfQorCitpbnQgcDU0X3R4X2NhbmNlbChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgX19sZTMyIHJlcV9pZCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwNTRfdHhjYW5jZWwgKmNhbmNlbDsKKwl1MzIgX3JlcV9pZCA9IGxlMzJfdG9fY3B1KHJlcV9pZCk7CisKKwlpZiAodW5saWtlbHkoX3JlcV9pZCA8IHByaXYtPnJ4X3N0YXJ0IHx8IF9yZXFfaWQgPiBwcml2LT5yeF9lbmQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqY2FuY2VsKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1RYQ0FOQ0VMLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybiAtRU5PTUVNOworCisJY2FuY2VsID0gKHN0cnVjdCBwNTRfdHhjYW5jZWwgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpjYW5jZWwpKTsKKwljYW5jZWwtPnJlcV9pZCA9IHJlcV9pZDsKKwlwNTRfdHgocHJpdiwgc2tiKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHA1NF9zZXR1cF9tYWMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0X3NldHVwX21hYyAqc2V0dXA7CisJdTE2IG1vZGU7CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnNldHVwKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1NFVFVQLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzZXR1cCA9IChzdHJ1Y3QgcDU0X3NldHVwX21hYyAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpzZXR1cCkpOworCWlmICghKHByaXYtPmh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSkpIHsKKwkJc3dpdGNoIChwcml2LT5tb2RlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfU1RBVElPTjsKKwkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9BUDsKKwkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX0lCU1M7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgorCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9QUk9NSVNDVU9VUzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9ISUJFUk5BVEU7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqICJUUkFOU1BBUkVOVCBhbmQgUFJPTUlTQ1VPVVMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKKwkJICogU1RTVzQ1WDBDIExNQUMgQVBJIC0gcGFnZSAxMgorCQkgKi8KKwkJaWYgKCgocHJpdi0+ZmlsdGVyX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSB8fAorCQkgICAgIChwcml2LT5maWx0ZXJfZmxhZ3MgJiBGSUZfT1RIRVJfQlNTKSkgJiYKKwkJICAgIChtb2RlICE9IFA1NF9GSUxURVJfVFlQRV9QUk9NSVNDVU9VUykpCisJCQltb2RlIHw9IFA1NF9GSUxURVJfVFlQRV9UUkFOU1BBUkVOVDsKKwl9IGVsc2UgeworCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX0hJQkVSTkFURTsKKwl9CisKKwlzZXR1cC0+bWFjX21vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKKwltZW1jcHkoc2V0dXAtPm1hY19hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShzZXR1cC0+YnNzaWQsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CisJc2V0dXAtPnJ4X2FudGVubmEgPSAyICYgcHJpdi0+cnhfZGl2ZXJzaXR5X21hc2s7IC8qIGF1dG9tYXRpYyAqLworCXNldHVwLT5yeF9hbGlnbiA9IDA7CisJaWYgKHByaXYtPmZ3X3ZhciA8IDB4NTAwKSB7CisJCXNldHVwLT52MS5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOworCQltZW1zZXQoc2V0dXAtPnYxLnJ0c19yYXRlcywgMCwgOCk7CisJCXNldHVwLT52MS5yeF9hZGRyID0gY3B1X3RvX2xlMzIocHJpdi0+cnhfZW5kKTsKKwkJc2V0dXAtPnYxLm1heF9yeCA9IGNwdV90b19sZTE2KHByaXYtPnJ4X210dSk7CisJCXNldHVwLT52MS5yeGh3ID0gY3B1X3RvX2xlMTYocHJpdi0+cnhodyk7CisJCXNldHVwLT52MS53YWtldXBfdGltZXIgPSBjcHVfdG9fbGUxNihwcml2LT53YWtldXBfdGltZXIpOworCQlzZXR1cC0+djEudW5hbGxvYzAgPSBjcHVfdG9fbGUxNigwKTsKKwl9IGVsc2UgeworCQlzZXR1cC0+djIucnhfYWRkciA9IGNwdV90b19sZTMyKHByaXYtPnJ4X2VuZCk7CisJCXNldHVwLT52Mi5tYXhfcnggPSBjcHVfdG9fbGUxNihwcml2LT5yeF9tdHUpOworCQlzZXR1cC0+djIucnhodyA9IGNwdV90b19sZTE2KHByaXYtPnJ4aHcpOworCQlzZXR1cC0+djIudGltZXIgPSBjcHVfdG9fbGUxNihwcml2LT53YWtldXBfdGltZXIpOworCQlzZXR1cC0+djIudHJ1bmNhdGUgPSBjcHVfdG9fbGUxNig0ODg5Nik7CisJCXNldHVwLT52Mi5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOworCQlzZXR1cC0+djIuc2Jzc19vZmZzZXQgPSAwOworCQlzZXR1cC0+djIubWNhc3Rfd2luZG93ID0gMDsKKwkJc2V0dXAtPnYyLnJ4X3Jzc2lfdGhyZXNob2xkID0gMDsKKwkJc2V0dXAtPnYyLnJ4X2VkX3RocmVzaG9sZCA9IDA7CisJCXNldHVwLT52Mi5yZWZfY2xvY2sgPSBjcHVfdG9fbGUzMig2NDQyNDUwOTQpOworCQlzZXR1cC0+djIubHBmX2JhbmR3aWR0aCA9IGNwdV90b19sZTE2KDY1NTM1KTsKKwkJc2V0dXAtPnYyLm9zY19zdGFydF9kZWxheSA9IGNwdV90b19sZTE2KDY1NTM1KTsKKwl9CisJcDU0X3R4KHByaXYsIHNrYik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwNTRfc2NhbihzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTE2IG1vZGUsIHUxNiBkd2VsbCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwNTRfaGRyICpoZHI7CisJc3RydWN0IHA1NF9zY2FuX2hlYWQgKmhlYWQ7CisJc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5ICppcV9hdXRvY2FsOworCXVuaW9uIHA1NF9zY2FuX2JvZHlfdW5pb24gKmJvZHk7CisJc3RydWN0IHA1NF9zY2FuX3RhaWxfcmF0ZSAqcmF0ZTsKKwlzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5ICpyc3NpOworCXVuc2lnbmVkIGludCBpOworCXZvaWQgKmVudHJ5OworCWludCBiYW5kID0gcHJpdi0+aHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKKwlfX2xlMTYgZnJlcSA9IGNwdV90b19sZTE2KHByaXYtPmh3LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKworCXNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqaGVhZCkgKworCQkJICAgIDIgKyBzaXplb2YoKmlxX2F1dG9jYWwpICsgc2l6ZW9mKCpib2R5KSArCisJCQkgICAgc2l6ZW9mKCpyYXRlKSArIDIgKiBzaXplb2YoKnJzc2kpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfU0NBTiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJaGVhZCA9IChzdHJ1Y3QgcDU0X3NjYW5faGVhZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZWFkKSk7CisJbWVtc2V0KGhlYWQtPnNjYW5fcGFyYW1zLCAwLCBzaXplb2YoaGVhZC0+c2Nhbl9wYXJhbXMpKTsKKwloZWFkLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7CisJaGVhZC0+ZHdlbGwgPSBjcHVfdG9fbGUxNihkd2VsbCk7CisJaGVhZC0+ZnJlcSA9IGZyZXE7CisKKwlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQlfX2xlMTYgKnBhX3Bvd2VyX3BvaW50cyA9IChfX2xlMTYgKikgc2tiX3B1dChza2IsIDIpOworCQkqcGFfcG93ZXJfcG9pbnRzID0gY3B1X3RvX2xlMTYoMHgwYyk7CisJfQorCisJaXFfYXV0b2NhbCA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmlxX2F1dG9jYWwpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+aXFfYXV0b2NhbF9sZW47IGkrKykgeworCQlpZiAocHJpdi0+aXFfYXV0b2NhbFtpXS5mcmVxICE9IGZyZXEpCisJCQljb250aW51ZTsKKworCQltZW1jcHkoaXFfYXV0b2NhbCwgJnByaXYtPmlxX2F1dG9jYWxbaV0ucGFyYW1zLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSkpOworCQlicmVhazsKKwl9CisJaWYgKGkgPT0gcHJpdi0+aXFfYXV0b2NhbF9sZW4pCisJCWdvdG8gZXJyOworCisJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpCisJCWJvZHkgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKGJvZHktPmxvbmdib3cpKTsKKwllbHNlCisJCWJvZHkgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKGJvZHktPm5vcm1hbCkpOworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllczsgaSsrKSB7CisJCV9fbGUxNiAqZW50cnlfZnJlcSA9ICh2b2lkICopIChwcml2LT5vdXRwdXRfbGltaXQtPmRhdGEgKworCQkJCSAgICAgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplICogaSk7CisKKwkJaWYgKCplbnRyeV9mcmVxICE9IGZyZXEpCisJCQljb250aW51ZTsKKworCQlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQkJbWVtY3B5KCZib2R5LT5sb25nYm93LnBvd2VyX2xpbWl0cywKKwkJCSAgICAgICAodm9pZCAqKSBlbnRyeV9mcmVxICsgc2l6ZW9mKF9fbGUxNiksCisJCQkgICAgICAgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQgKmxpbWl0cyA9CisJCQkgICAgICAgKHZvaWQgKikgZW50cnlfZnJlcTsKKworCQkJYm9keS0+bm9ybWFsLnZhbF9iYXJrZXIgPSAweDM4OworCQkJYm9keS0+bm9ybWFsLnZhbF9icHNrID0gYm9keS0+bm9ybWFsLmR1cF9icHNrID0KKwkJCQlsaW1pdHMtPnZhbF9icHNrOworCQkJYm9keS0+bm9ybWFsLnZhbF9xcHNrID0gYm9keS0+bm9ybWFsLmR1cF9xcHNrID0KKwkJCQlsaW1pdHMtPnZhbF9xcHNrOworCQkJYm9keS0+bm9ybWFsLnZhbF8xNnFhbSA9IGJvZHktPm5vcm1hbC5kdXBfMTZxYW0gPQorCQkJCWxpbWl0cy0+dmFsXzE2cWFtOworCQkJYm9keS0+bm9ybWFsLnZhbF82NHFhbSA9IGJvZHktPm5vcm1hbC5kdXBfNjRxYW0gPQorCQkJCWxpbWl0cy0+dmFsXzY0cWFtOworCQl9CisJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXMpCisJCWdvdG8gZXJyOworCisJZW50cnkgPSAodm9pZCAqKShwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhICsgcHJpdi0+Y3VydmVfZGF0YS0+b2Zmc2V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllczsgaSsrKSB7CisJCWlmICgqKChfX2xlMTYgKillbnRyeSkgIT0gZnJlcSkgeworCQkJZW50cnkgKz0gcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKKwkJCW1lbWNweSgmYm9keS0+bG9uZ2Jvdy5jdXJ2ZV9kYXRhLAorCQkJCSh2b2lkICopIGVudHJ5ICsgc2l6ZW9mKF9fbGUxNiksCisJCQkJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgcDU0X3NjYW5fYm9keSAqY2hhbiA9ICZib2R5LT5ub3JtYWw7CisJCQlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEgPQorCQkJCSh2b2lkICopIHByaXYtPmN1cnZlX2RhdGEtPmRhdGE7CisKKwkJCWVudHJ5ICs9IHNpemVvZihfX2xlMTYpOworCQkJY2hhbi0+cGFfcG9pbnRzX3Blcl9jdXJ2ZSA9IDg7CisJCQltZW1zZXQoY2hhbi0+Y3VydmVfZGF0YSwgMCwgc2l6ZW9mKCpjaGFuLT5jdXJ2ZV9kYXRhKSk7CisJCQltZW1jcHkoY2hhbi0+Y3VydmVfZGF0YSwgZW50cnksCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUpICoKKwkJCSAgICAgICBtaW4oKHU4KTgsIGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbCkpOworCQl9CisJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzKQorCQlnb3RvIGVycjsKKworCWlmICgocHJpdi0+ZndfdmFyID49IDB4NTAwKSAmJiAocHJpdi0+ZndfdmFyIDwgMHg1MDkpKSB7CisJCXJhdGUgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyYXRlKSk7CisJCXJhdGUtPmJhc2ljX3JhdGVfbWFzayA9IGNwdV90b19sZTMyKHByaXYtPmJhc2ljX3JhdGVfbWFzayk7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocmF0ZS0+cnRzX3JhdGVzKTsgaSsrKQorCQkJcmF0ZS0+cnRzX3JhdGVzW2ldID0gaTsKKwl9CisKKwlyc3NpID0gKHN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgKikgc2tiX3B1dChza2IsIHNpemVvZigqcnNzaSkpOworCXJzc2ktPm11bCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKTsKKwlyc3NpLT5hZGQgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmFkZCk7CisJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKKwkJLyogTG9uZ2JvdyBmcm9udGVuZCBuZWVkcyBldmVyIG1vcmUgKi8KKwkJcnNzaSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJzc2kpKTsKKwkJcnNzaS0+bXVsID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5sb25nYm93X3Vua24pOworCQlyc3NpLT5hZGQgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmxvbmdib3dfdW5rMik7CisJfQorCisJaWYgKHByaXYtPmZ3X3ZhciA+PSAweDUwOSkgeworCQlyYXRlID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqcmF0ZSkpOworCQlyYXRlLT5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJhdGUtPnJ0c19yYXRlcyk7IGkrKykKKwkJCXJhdGUtPnJ0c19yYXRlc1tpXSA9IGk7CisJfQorCisJaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi0+ZGF0YTsKKwloZHItPmxlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuIC0gc2l6ZW9mKCpoZHIpKTsKKworCXA1NF90eChwcml2LCBza2IpOworCXJldHVybiAwOworCitlcnI6CisJcHJpbnRrKEtFUk5fRVJSICIlczogZnJlcXVlbmN5IGNoYW5nZSB0byBjaGFubmVsICVkIGZhaWxlZC5cbiIsCisJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKAorCSAgICAgICBwcml2LT5ody0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSkpOworCisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IHA1NF9zZXRfbGVkcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwNTRfbGVkICpsZWQ7CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmxlZCksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9MRUQsIEdGUF9BVE9NSUMpOworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsZWQgPSAoc3RydWN0IHA1NF9sZWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqbGVkKSk7CisJbGVkLT5mbGFncyA9IGNwdV90b19sZTE2KDB4MDAwMyk7CisJbGVkLT5tYXNrWzBdID0gbGVkLT5tYXNrWzFdID0gY3B1X3RvX2xlMTYocHJpdi0+c29mdGxlZF9zdGF0ZSk7CisJbGVkLT5kZWxheVswXSA9IGNwdV90b19sZTE2KDEpOworCWxlZC0+ZGVsYXlbMV0gPSBjcHVfdG9fbGUxNigwKTsKKwlwNTRfdHgocHJpdiwgc2tiKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHA1NF9zZXRfZWRjZihzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwNTRfZWRjZiAqZWRjZjsKKworCXNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqZWRjZiksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9EQ0ZJTklULCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybiAtRU5PTUVNOworCisJZWRjZiA9IChzdHJ1Y3QgcDU0X2VkY2YgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCplZGNmKSk7CisJaWYgKHByaXYtPnVzZV9zaG9ydF9zbG90KSB7CisJCWVkY2YtPnNsb3R0aW1lID0gOTsKKwkJZWRjZi0+c2lmcyA9IDB4MTA7CisJCWVkY2YtPmVvZnBhZCA9IDB4MDA7CisJfSBlbHNlIHsKKwkJZWRjZi0+c2xvdHRpbWUgPSAyMDsKKwkJZWRjZi0+c2lmcyA9IDB4MGE7CisJCWVkY2YtPmVvZnBhZCA9IDB4MDY7CisJfQorCS8qIChzZWUgcHJpc201NC9pc2xfb2lkLmggZm9yIGZ1cnRoZXIgZGV0YWlscykgKi8KKwllZGNmLT5mcmFtZWJ1cnN0ID0gY3B1X3RvX2xlMTYoMCk7CisJZWRjZi0+cm91bmRfdHJpcF9kZWxheSA9IGNwdV90b19sZTE2KDApOworCWVkY2YtPmZsYWdzID0gMDsKKwltZW1zZXQoZWRjZi0+bWFwcGluZywgMCwgc2l6ZW9mKGVkY2YtPm1hcHBpbmcpKTsKKwltZW1jcHkoZWRjZi0+cXVldWUsIHByaXYtPnFvc19wYXJhbXMsIHNpemVvZihlZGNmLT5xdWV1ZSkpOworCXA1NF90eChwcml2LCBza2IpOworCXJldHVybiAwOworfQorCitpbnQgcDU0X3NldF9wcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwNTRfcHNtICpwc207CisJdW5zaWduZWQgaW50IGk7CisJdTE2IG1vZGU7CisKKwlpZiAocHJpdi0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUyAmJgorCSAgICAhcHJpdi0+cG93ZXJzYXZlX292ZXJyaWRlKQorCQltb2RlID0gUDU0X1BTTSB8IFA1NF9QU01fQkVBQ09OX1RJTUVPVVQgfCBQNTRfUFNNX0RUSU0gfAorCQkgICAgICAgUDU0X1BTTV9DSEVDS1NVTSB8IFA1NF9QU01fTUNCQzsKKwllbHNlCisJCW1vZGUgPSBQNTRfUFNNX0NBTTsKKworCXNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqcHNtKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1BTTSwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJcHNtID0gKHN0cnVjdCBwNTRfcHNtICopc2tiX3B1dChza2IsIHNpemVvZigqcHNtKSk7CisJcHNtLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7CisJcHNtLT5haWQgPSBjcHVfdG9fbGUxNihwcml2LT5haWQpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBzbS0+aW50ZXJ2YWxzKTsgaSsrKSB7CisJCXBzbS0+aW50ZXJ2YWxzW2ldLmludGVydmFsID0KKwkJCWNwdV90b19sZTE2KHByaXYtPmh3LT5jb25mLmxpc3Rlbl9pbnRlcnZhbCk7CisJCXBzbS0+aW50ZXJ2YWxzW2ldLnBlcmlvZHMgPSBjcHVfdG9fbGUxNigxKTsKKwl9CisKKwlwc20tPmJlYWNvbl9yc3NpX3NraXBfbWF4ID0gMjAwOworCXBzbS0+cnNzaV9kZWx0YV90aHJlc2hvbGQgPSAwOworCXBzbS0+bnIgPSAxOworCXBzbS0+ZXhjbHVkZVswXSA9IFdMQU5fRUlEX1RJTTsKKworCXA1NF90eChwcml2LCBza2IpOworCXJldHVybiAwOworfQorCitpbnQgcDU0X2luaXRfeGJvd19zeW50aChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwNTRfeGJvd19zeW50aCAqeGJvdzsKKworCXNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqeGJvdyksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9YQk9XX1NZTlRIX0NGRywgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFza2IpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXhib3cgPSAoc3RydWN0IHA1NF94Ym93X3N5bnRoICopc2tiX3B1dChza2IsIHNpemVvZigqeGJvdykpOworCXhib3ctPm1hZ2ljMSA9IGNwdV90b19sZTE2KDB4MSk7CisJeGJvdy0+bWFnaWMyID0gY3B1X3RvX2xlMTYoMHgyKTsKKwl4Ym93LT5mcmVxID0gY3B1X3RvX2xlMTYoNTM5MCk7CisJbWVtc2V0KHhib3ctPnBhZGRpbmcsIDAsIHNpemVvZih4Ym93LT5wYWRkaW5nKSk7CisJcDU0X3R4KHByaXYsIHNrYik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwNTRfdXBsb2FkX2tleShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTggYWxnbywgaW50IHNsb3QsIHU4IGlkeCwgdTggbGVuLAorCQkgICB1OCAqYWRkciwgdTgqIGtleSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwNTRfa2V5Y2FjaGUgKnJ4a2V5OworCisJc2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpyeGtleSksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9SWF9LRVlDQUNIRSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFza2IpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ4a2V5ID0gKHN0cnVjdCBwNTRfa2V5Y2FjaGUgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpyeGtleSkpOworCXJ4a2V5LT5lbnRyeSA9IHNsb3Q7CisJcnhrZXktPmtleV9pZCA9IGlkeDsKKwlyeGtleS0+a2V5X3R5cGUgPSBhbGdvOworCWlmIChhZGRyKQorCQltZW1jcHkocnhrZXktPm1hYywgYWRkciwgRVRIX0FMRU4pOworCWVsc2UKKwkJbWVtc2V0KHJ4a2V5LT5tYWMsIH4wLCBFVEhfQUxFTik7CisKKwlzd2l0Y2ggKGFsZ28pIHsKKwljYXNlIFA1NF9DUllQVE9fV0VQOgorCWNhc2UgUDU0X0NSWVBUT19BRVNDQ01QOgorCQlyeGtleS0+a2V5X2xlbiA9IG1pbl90KHU4LCAxNiwgbGVuKTsKKwkJbWVtY3B5KHJ4a2V5LT5rZXksIGtleSwgcnhrZXktPmtleV9sZW4pOworCQlicmVhazsKKworCWNhc2UgUDU0X0NSWVBUT19US0lQTUlDSEFFTDoKKwkJcnhrZXktPmtleV9sZW4gPSAyNDsKKwkJbWVtY3B5KHJ4a2V5LT5rZXksIGtleSwgMTYpOworCQltZW1jcHkoJihyeGtleS0+a2V5WzE2XSksICYoa2V5CisJCQlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVldKSwgOCk7CisJCWJyZWFrOworCisJY2FzZSBQNTRfQ1JZUFRPX05PTkU6CisJCXJ4a2V5LT5rZXlfbGVuID0gMDsKKwkJbWVtc2V0KHJ4a2V5LT5rZXksIDAsIHNpemVvZihyeGtleS0+a2V5KSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBjcnlwdG9ncmFwaGljIGFsZ29yaXRobTogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGFsZ28pOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXA1NF90eChwcml2LCBza2IpOworCXJldHVybiAwOworfQorCitpbnQgcDU0X2ZldGNoX3N0YXRpc3RpY3Moc3RydWN0IHA1NF9jb21tb24gKnByaXYpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm87CisJc3RydWN0IHA1NF90eF9pbmZvICpwNTRpbmZvOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgcDU0X3N0YXRpc3RpY3MpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfU1RBVF9SRUFEQkFDSywgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBUaGUgc3RhdGlzdGljIGZlZWRiYWNrIGNhdXNlcyBzb21lIGV4dHJhIGhlYWRhY2hlcyBoZXJlLCBpZiBpdAorCSAqIGlzIG5vdCB0byBjcmFzaC9jb3JydXB0IHRoZSBmaXJtd2FyZSBkYXRhIHN0cnVjdHVyZXMuCisJICoKKwkgKiBVbmxpa2UgYWxsIG90aGVyIENvbnRyb2wgR2V0IE9JRHMgd2UgY2FuIG5vdCB1c2UgaGVscGVycyBsaWtlCisJICogc2tiX3B1dCB0byByZXNlcnZlIHRoZSBzcGFjZSBmb3IgdGhlIGRhdGEgd2UncmUgcmVxdWVzdGluZy4KKwkgKiBJbnN0ZWFkIHRoZSBleHRyYSBmcmFtZSBsZW5ndGggLXdoaWNoIHdpbGwgaG9sZCB0aGUgcmVzdWx0cyBsYXRlci0KKwkgKiB3aWxsIG9ubHkgYmUgdG9sZCB0byB0aGUgcDU0X2Fzc2lnbl9hZGRyZXNzLCBzbyB0aGF0IGZvbGxvd2luZworCSAqIGZyYW1lcyB3b24ndCBiZSBwbGFjZWQgaW50byB0aGUgIGFsbGVnZWRseSBlbXB0eSBhcmVhLgorCSAqLworCXR4aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlwNTRpbmZvID0gKHZvaWQgKikgdHhpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOworCXA1NGluZm8tPmV4dHJhX2xlbiA9IHNpemVvZihzdHJ1Y3QgcDU0X3N0YXRpc3RpY3MpOworCisJcDU0X3R4KHByaXYsIHNrYik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3NWFjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9sZWQuYwpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvbW1vbiBjb2RlIGZvciBtYWM4MDIxMSBQcmlzbTU0IGRyaXZlcnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDksIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIEJhc2VkIG9uOgorICogLSB0aGUgaXNsc20gKHNvZnRtYWMgcHJpc201NCkgZHJpdmVyLCB3aGljaCBpczoKKyAqICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4KKyAqIC0gc3RsYzQ1eHggZHJpdmVyCisgKiAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2lmZGVmIENPTkZJR19QNTRfTEVEUworI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNlbmRpZiAvKiBDT05GSUdfUDU0X0xFRFMgKi8KKworI2luY2x1ZGUgInA1NC5oIgorI2luY2x1ZGUgImxtYWMuaCIKKworc3RhdGljIHZvaWQgcDU0X3VwZGF0ZV9sZWRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcDU0X2NvbW1vbiwKKwkJCQkJICAgICAgIGxlZF93b3JrLndvcmspOworCWludCBlcnIsIGksIHRtcCwgYmxpbmtfZGVsYXkgPSA0MDA7CisJYm9vbCByZXJ1biA9IGZhbHNlOworCisJLyogRG9uJ3QgdG9nZ2xlIHRoZSBMRUQsIHdoZW4gdGhlIGRldmljZSBpcyBkb3duLiAqLworCWlmIChwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQorCQlyZXR1cm4gOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJpdi0+bGVkcyk7IGkrKykKKwkJaWYgKHByaXYtPmxlZHNbaV0udG9nZ2xlZCkgeworCQkJcHJpdi0+c29mdGxlZF9zdGF0ZSB8PSBCSVQoaSk7CisKKwkJCXRtcCA9IDcwICsgMjAwIC8gKHByaXYtPmxlZHNbaV0udG9nZ2xlZCk7CisJCQlpZiAodG1wIDwgYmxpbmtfZGVsYXkpCisJCQkJYmxpbmtfZGVsYXkgPSB0bXA7CisKKwkJCWlmIChwcml2LT5sZWRzW2ldLmxlZF9kZXYuYnJpZ2h0bmVzcyA9PSBMRURfT0ZGKQorCQkJCXJlcnVuID0gdHJ1ZTsKKworCQkJcHJpdi0+bGVkc1tpXS50b2dnbGVkID0KKwkJCQkhIXByaXYtPmxlZHNbaV0ubGVkX2Rldi5icmlnaHRuZXNzOworCQl9IGVsc2UKKwkJCXByaXYtPnNvZnRsZWRfc3RhdGUgJj0gfkJJVChpKTsKKworCWVyciA9IHA1NF9zZXRfbGVkcyhwcml2KTsKKwlpZiAoZXJyICYmIG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHVwZGF0ZSBMRURzICglZCkuXG4iLAorCQkJd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBlcnIpOworCisJaWYgKHJlcnVuKQorCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LCAmcHJpdi0+bGVkX3dvcmssCisJCQltc2Vjc190b19qaWZmaWVzKGJsaW5rX2RlbGF5KSk7Cit9CisKK3N0YXRpYyB2b2lkIHA1NF9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2RldiwKKwkJCQkgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJc3RydWN0IHA1NF9sZWRfZGV2ICpsZWQgPSBjb250YWluZXJfb2YobGVkX2Rldiwgc3RydWN0IHA1NF9sZWRfZGV2LAorCQkJCQkgICAgICAgbGVkX2Rldik7CisJc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gbGVkLT5od19kZXY7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAocHJpdi0+bW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKKwkJcmV0dXJuIDsKKworCWlmICgoYnJpZ2h0bmVzcykgJiYgKGxlZC0+cmVnaXN0ZXJlZCkpIHsKKwkJbGVkLT50b2dnbGVkKys7CisJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHcsICZwcml2LT5sZWRfd29yaywgSFovMTApOworCX0KK30KKworc3RhdGljIGludCBwNTRfcmVnaXN0ZXJfbGVkKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LAorCQkJICAgIHVuc2lnbmVkIGludCBsZWRfaW5kZXgsCisJCQkgICAgY2hhciAqbmFtZSwgY2hhciAqdHJpZ2dlcikKK3sKKwlzdHJ1Y3QgcDU0X2xlZF9kZXYgKmxlZCA9ICZwcml2LT5sZWRzW2xlZF9pbmRleF07CisJaW50IGVycjsKKworCWlmIChsZWQtPnJlZ2lzdGVyZWQpCisJCXJldHVybiAtRUVYSVNUOworCisJc25wcmludGYobGVkLT5uYW1lLCBzaXplb2YobGVkLT5uYW1lKSwgInA1NC0lczo6JXMiLAorCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBuYW1lKTsKKwlsZWQtPmh3X2RldiA9IHByaXYtPmh3OworCWxlZC0+aW5kZXggPSBsZWRfaW5kZXg7CisJbGVkLT5sZWRfZGV2Lm5hbWUgPSBsZWQtPm5hbWU7CisJbGVkLT5sZWRfZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHRyaWdnZXI7CisJbGVkLT5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0gcDU0X2xlZF9icmlnaHRuZXNzX3NldDsKKworCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3aXBoeV9kZXYocHJpdi0+aHctPndpcGh5KSwgJmxlZC0+bGVkX2Rldik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIHJlZ2lzdGVyICVzIExFRC5cbiIsCisJCQl3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIG5hbWUpOworCWVsc2UKKwkJbGVkLT5yZWdpc3RlcmVkID0gMTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBwNTRfaW5pdF9sZWRzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KQoreworCWludCBlcnI7CisKKwkvKgorCSAqIFRPRE86CisJICogRmlndXJlIG91dCBpZiB0aGUgRUVQUk9NIGNvbnRhaW5zIHNvbWUgaGludHMgYWJvdXQgdGhlIG51bWJlcgorCSAqIG9mIGF2YWlsYWJsZS9wcm9ncmFtbWFibGUgTEVEcyBvZiB0aGUgZGV2aWNlLgorCSAqLworCisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmxlZF93b3JrLCBwNTRfdXBkYXRlX2xlZHMpOworCisJZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChwcml2LCAwLCAiYXNzb2MiLAorCQkJICAgICAgIGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUocHJpdi0+aHcpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChwcml2LCAxLCAidHgiLAorCQkJICAgICAgIGllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUocHJpdi0+aHcpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChwcml2LCAyLCAicngiLAorCQkJICAgICAgIGllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUocHJpdi0+aHcpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChwcml2LCAzLCAicmFkaW8iLAorCQkJICAgICAgIGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUocHJpdi0+aHcpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcDU0X3NldF9sZWRzKHByaXYpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgcDU0X3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaXYtPmxlZHMpOyBpKyspIHsKKwkJaWYgKHByaXYtPmxlZHNbaV0ucmVnaXN0ZXJlZCkgeworCQkJcHJpdi0+bGVkc1tpXS5yZWdpc3RlcmVkID0gZmFsc2U7CisJCQlwcml2LT5sZWRzW2ldLnRvZ2dsZWQgPSAwOworCQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJnByaXYtPmxlZHNbaV0ubGVkX2Rldik7CisJCX0KKwl9CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmxlZF93b3JrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9sbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbG1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjYzZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbG1hYy5oCkBAIC0wLDAgKzEsNTU4IEBACisvKgorICogTE1BQyBJbnRlcmZhY2Ugc3BlY2lmaWMgZGVmaW5pdGlvbnMgZm9yIG1hYzgwMjExIFByaXNtNTQgZHJpdmVycworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgLSAyMDA5LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKgorICogQmFzZWQgb246CisgKiAtIHRoZSBpc2xzbSAoc29mdG1hYyBwcmlzbTU0KSBkcml2ZXIsIHdoaWNoIGlzOgorICogICBDb3B5cmlnaHQgMjAwNC0yMDA2IEplYW4tQmFwdGlzdGUgTm90ZSA8amJub3RlQGdtYWlsLmNvbT4sIGV0IGFsLgorICoKKyAqIC0gTE1BQyBBUEkgaW50ZXJmYWNlIGhlYWRlciBmaWxlIGZvciBTVExDNDU2MCAobG1hY19sb25nYm93LmgpCisgKiAgIENvcHlyaWdodCAoQykgMjAwNyBDb25leGFudCBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIExNQUNfSAorI2RlZmluZSBMTUFDX0gKKworZW51bSBwNTRfY29udHJvbF9mcmFtZV90eXBlcyB7CisJUDU0X0NPTlRST0xfVFlQRV9TRVRVUCA9IDAsCisJUDU0X0NPTlRST0xfVFlQRV9TQ0FOLAorCVA1NF9DT05UUk9MX1RZUEVfVFJBUCwKKwlQNTRfQ09OVFJPTF9UWVBFX0RDRklOSVQsCisJUDU0X0NPTlRST0xfVFlQRV9SWF9LRVlDQUNIRSwKKwlQNTRfQ09OVFJPTF9UWVBFX1RJTSwKKwlQNTRfQ09OVFJPTF9UWVBFX1BTTSwKKwlQNTRfQ09OVFJPTF9UWVBFX1RYQ0FOQ0VMLAorCVA1NF9DT05UUk9MX1RZUEVfVFhET05FLAorCVA1NF9DT05UUk9MX1RZUEVfQlVSU1QsCisJUDU0X0NPTlRST0xfVFlQRV9TVEFUX1JFQURCQUNLLAorCVA1NF9DT05UUk9MX1RZUEVfQkJQLAorCVA1NF9DT05UUk9MX1RZUEVfRUVQUk9NX1JFQURCQUNLLAorCVA1NF9DT05UUk9MX1RZUEVfTEVELAorCVA1NF9DT05UUk9MX1RZUEVfR1BJTywKKwlQNTRfQ09OVFJPTF9UWVBFX1RJTUVSLAorCVA1NF9DT05UUk9MX1RZUEVfTU9EVUxBVElPTiwKKwlQNTRfQ09OVFJPTF9UWVBFX1NZTlRIX0NPTkZJRywKKwlQNTRfQ09OVFJPTF9UWVBFX0RFVEVDVE9SX1ZBTFVFLAorCVA1NF9DT05UUk9MX1RZUEVfWEJPV19TWU5USF9DRkcsCisJUDU0X0NPTlRST0xfVFlQRV9DQ0VfUVVJRVQsCisJUDU0X0NPTlRST0xfVFlQRV9QU01fU1RBX1VOTE9DSywKKwlQNTRfQ09OVFJPTF9UWVBFX1BDUywKKwlQNTRfQ09OVFJPTF9UWVBFX0JUX0JBTEFOQ0VSID0gMjgsCisJUDU0X0NPTlRST0xfVFlQRV9HUk9VUF9BRERSRVNTX1RBQkxFID0gMzAsCisJUDU0X0NPTlRST0xfVFlQRV9BUlBUQUJMRSA9IDMxLAorCVA1NF9DT05UUk9MX1RZUEVfQlRfT1BUSU9OUyA9IDM1LAorfTsKKworI2RlZmluZSBQNTRfSERSX0ZMQUdfQ09OVFJPTAkJQklUKDE1KQorI2RlZmluZSBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVAkoQklUKDE1KSArIEJJVCgwKSkKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfQUxJR04JCUJJVCgxNCkKKworI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfUFJPTUlTQwkJQklUKDApCisjZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX09VVF9USU1FU1RBTVAJCUJJVCgxKQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfU0VRTlIJCUJJVCgyKQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfQklUMwkJQklUKDMpCisjZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX09VVF9CVVJTVAkJQklUKDQpCisjZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX09VVF9OT0NBTkNFTAkJQklUKDUpCisjZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX09VVF9DTEVBUlRJTQkJQklUKDYpCisjZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX09VVF9ISVRDSEhJS0UJCUJJVCg3KQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfQ09NUFJFU1MJCUJJVCg4KQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfQ09OQ0FUCQlCSVQoOSkKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1BDU19BQ0NFUFQJQklUKDEwKQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfV0FJVEVPU1AJCUJJVCgxMSkKKworI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9GQ1NfR09PRAkJQklUKDApCisjZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX0lOX01BVENIX01BQwkJQklUKDEpCisjZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX0lOX01DQkMJCUJJVCgyKQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9CRUFDT04JCUJJVCgzKQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9NQVRDSF9CU1MJCUJJVCg0KQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9CQ0FTVF9CU1MJCUJJVCg1KQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9EQVRBCQlCSVQoNikKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fVFJVTkNBVEVECQlCSVQoNykKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fQklUOAkJQklUKDgpCisjZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX0lOX1RSQU5TUEFSRU5UCUJJVCg5KQorCitzdHJ1Y3QgcDU0X2hkciB7CisJX19sZTE2IGZsYWdzOworCV9fbGUxNiBsZW47CisJX19sZTMyIHJlcV9pZDsKKwlfX2xlMTYgdHlwZTsJLyogZW51bSBwNTRfY29udHJvbF9mcmFtZV90eXBlcyAqLworCXU4IHJ0c190cmllczsKKwl1OCB0cmllczsKKwl1OCBkYXRhWzBdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBHRVRfUkVRX0lEKHNrYikJCQkJCQkJXAorCSgoKHN0cnVjdCBwNTRfaGRyICopICgoc3RydWN0IHNrX2J1ZmYgKikgc2tiKS0+ZGF0YSktPnJlcV9pZCkJXAorCisjZGVmaW5lIEZSRUVfQUZURVJfVFgoc2tiKQkJCQkJCVwKKwkoKCgoc3RydWN0IHA1NF9oZHIgKikgKChzdHJ1Y3Qgc2tfYnVmZiAqKSBza2IpLT5kYXRhKS0+CQlcCisJZmxhZ3MpID09IGNwdV90b19sZTE2KFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VUKSkKKworI2RlZmluZSBJU19EQVRBX0ZSQU1FKHNrYikJCQkJCQlcCisJKCEoKCgoc3RydWN0IHA1NF9oZHIgKikgKChzdHJ1Y3Qgc2tfYnVmZiAqKSBza2IpLT5kYXRhKS0+CVwKKwlmbGFncykgJiBjcHVfdG9fbGUxNihQNTRfSERSX0ZMQUdfQ09OVFJPTCkpKQorCisjZGVmaW5lIEdFVF9IV19RVUVVRShza2IpCQkJCQkJXAorCSgoKHN0cnVjdCBwNTRfdHhfZGF0YSAqKSgoc3RydWN0IHA1NF9oZHIgKikJCQlcCisJc2tiLT5kYXRhKS0+ZGF0YSktPmh3X3F1ZXVlKQorCisvKgorICogc2hhcmVkIGludGVyZmFjZSBJRCBkZWZpbml0aW9ucworICogVGhlIGludGVyZmFjZSBJRCBpcyBhIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiBvZiBhIHNwZWNpZmljIGludGVyZmFjZS4KKyAqIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSByZXNlcnZlZDogMHgwMDAwLCAweDAwMDIsIDB4MDAxMiwgMHgwMDE0LCAweDAwMTUKKyAqLworI2RlZmluZSBJRl9JRF9JU0wzNjM1NkEJCQkweDAwMDEJLyogSVNMMzYzNTZBIDwtPiBGaXJtd2FyZSAqLworI2RlZmluZSBJRl9JRF9NVkMJCQkweDAwMDMJLyogTUFDIFZpcnR1YWwgQ29wcm9jZXNzb3IgKi8KKyNkZWZpbmUgSUZfSURfREVCVUcJCQkweDAwMDgJLyogUG9sRGVidWcgSW50ZXJmYWNlICovCisjZGVmaW5lIElGX0lEX1BST0RVQ1QJCQkweDAwMDkKKyNkZWZpbmUgSUZfSURfT0VNCQkJMHgwMDBhCisjZGVmaW5lIElGX0lEX1BDSTM4NzcJCQkweDAwMGIJLyogMzg3NyA8LT4gSG9zdCBQQ0kgKi8KKyNkZWZpbmUgSUZfSURfSVNMMzc3MDRDCQkJMHgwMDBjCS8qIElTTDM3NzA0QyA8LT4gRncgKi8KKyNkZWZpbmUgSUZfSURfSVNMMzkwMDAJCQkweDAwMGYJLyogSVNMMzkwMDAgPC0+IEZ3ICovCisjZGVmaW5lIElGX0lEX0lTTDM5MzAwQQkJCTB4MDAxMAkvKiBJU0wzOTMwMEEgPC0+IEZ3ICovCisjZGVmaW5lIElGX0lEX0lTTDM3NzAwX1VBUAkJMHgwMDE2CS8qIElTTDM3NzAwIHVBUCBGdyA8LT4gRncgKi8KKyNkZWZpbmUgSUZfSURfSVNMMzkwMDBfVUFQCQkweDAwMTcJLyogSVNMMzkwMDAgdUFQIEZ3IDwtPiBGdyAqLworI2RlZmluZSBJRl9JRF9MTUFDCQkJMHgwMDFhCS8qIEludGVyZmFjZSBleHBvc2VkIGJ5IExNQUMgKi8KKworc3RydWN0IGV4cF9pZiB7CisJX19sZTE2IHJvbGU7CisJX19sZTE2IGlmX2lkOworCV9fbGUxNiB2YXJpYW50OworCV9fbGUxNiBidG1fY29tcGF0OworCV9fbGUxNiB0b3BfY29tcGF0OworfSBfX3BhY2tlZDsKKworc3RydWN0IGRlcF9pZiB7CisJX19sZTE2IHJvbGU7CisJX19sZTE2IGlmX2lkOworCV9fbGUxNiB2YXJpYW50OworfSBfX3BhY2tlZDsKKworLyogZHJpdmVyIDwtPiBsbWFjIGRlZmluaXRpb25zICovCitzdHJ1Y3QgcDU0X2VlcHJvbV9sbTg2IHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX2xlMTYgb2Zmc2V0OworCQkJX19sZTE2IGxlbjsKKwkJCXU4IGRhdGFbMF07CisJCX0gX19wYWNrZWQgdjE7CisJCXN0cnVjdCB7CisJCQlfX2xlMzIgb2Zmc2V0OworCQkJX19sZTE2IGxlbjsKKwkJCXU4IG1hZ2ljMjsKKwkJCXU4IHBhZDsKKwkJCXU4IG1hZ2ljWzRdOworCQkJdTggZGF0YVswXTsKKwkJfSBfX3BhY2tlZCB2MjsKKwl9ICBfX3BhY2tlZDsKK30gX19wYWNrZWQ7CisKK2VudW0gcDU0X3J4X2RlY3J5cHRfc3RhdHVzIHsKKwlQNTRfREVDUllQVF9OT05FID0gMCwKKwlQNTRfREVDUllQVF9PSywKKwlQNTRfREVDUllQVF9OT0tFWSwKKwlQNTRfREVDUllQVF9OT01JQ0hBRUwsCisJUDU0X0RFQ1JZUFRfTk9DS0lQTUlDLAorCVA1NF9ERUNSWVBUX0ZBSUxfV0VQLAorCVA1NF9ERUNSWVBUX0ZBSUxfVEtJUCwKKwlQNTRfREVDUllQVF9GQUlMX01JQ0hBRUwsCisJUDU0X0RFQ1JZUFRfRkFJTF9DS0lQS1AsCisJUDU0X0RFQ1JZUFRfRkFJTF9DS0lQTUlDLAorCVA1NF9ERUNSWVBUX0ZBSUxfQUVTQ0NNUAorfTsKKworc3RydWN0IHA1NF9yeF9kYXRhIHsKKwlfX2xlMTYgZmxhZ3M7CisJX19sZTE2IGxlbjsKKwlfX2xlMTYgZnJlcTsKKwl1OCBhbnRlbm5hOworCXU4IHJhdGU7CisJdTggcnNzaTsKKwl1OCBxdWFsaXR5OworCXU4IGRlY3J5cHRfc3RhdHVzOworCXU4IHJzc2lfcmF3OworCV9fbGUzMiB0c2YzMjsKKwlfX2xlMzIgdW5hbGxvYzA7CisJdTggYWxpZ25bMF07Cit9IF9fcGFja2VkOworCitlbnVtIHA1NF90cmFwX3R5cGUgeworCVA1NF9UUkFQX1NDQU4gPSAwLAorCVA1NF9UUkFQX1RJTUVSLAorCVA1NF9UUkFQX0JFQUNPTl9UWCwKKwlQNTRfVFJBUF9GQUFfUkFESU9fT04sCisJUDU0X1RSQVBfRkFBX1JBRElPX09GRiwKKwlQNTRfVFJBUF9SQURBUiwKKwlQNTRfVFJBUF9OT19CRUFDT04sCisJUDU0X1RSQVBfVEJUVCwKKwlQNTRfVFJBUF9TQ09fRU5URVIsCisJUDU0X1RSQVBfU0NPX0VYSVQKK307CisKK3N0cnVjdCBwNTRfdHJhcCB7CisJX19sZTE2IGV2ZW50OworCV9fbGUxNiBmcmVxdWVuY3k7Cit9IF9fcGFja2VkOworCitlbnVtIHA1NF9mcmFtZV9zZW50X3N0YXR1cyB7CisJUDU0X1RYX09LID0gMCwKKwlQNTRfVFhfRkFJTEVELAorCVA1NF9UWF9QU00sCisJUDU0X1RYX1BTTV9DQU5DRUxMRUQgPSA0Cit9OworCitzdHJ1Y3QgcDU0X2ZyYW1lX3NlbnQgeworCXU4IHN0YXR1czsKKwl1OCB0cmllczsKKwl1OCBhY2tfcnNzaTsKKwl1OCBxdWFsaXR5OworCV9fbGUxNiBzZXE7CisJdTggYW50ZW5uYTsKKwl1OCBwYWRkaW5nOworfSBfX3BhY2tlZDsKKworZW51bSBwNTRfdHhfZGF0YV9jcnlwdCB7CisJUDU0X0NSWVBUT19OT05FID0gMCwKKwlQNTRfQ1JZUFRPX1dFUCwKKwlQNTRfQ1JZUFRPX1RLSVAsCisJUDU0X0NSWVBUT19US0lQTUlDSEFFTCwKKwlQNTRfQ1JZUFRPX0NDWF9XRVBNSUMsCisJUDU0X0NSWVBUT19DQ1hfS1BNSUMsCisJUDU0X0NSWVBUT19DQ1hfS1AsCisJUDU0X0NSWVBUT19BRVNDQ01QCit9OworCitlbnVtIHA1NF90eF9kYXRhX3F1ZXVlIHsKKwlQNTRfUVVFVUVfQkVBQ09OCT0gMCwKKwlQNTRfUVVFVUVfRldTQ0FOCT0gMSwKKwlQNTRfUVVFVUVfTUdNVAkJPSAyLAorCVA1NF9RVUVVRV9DQUIJCT0gMywKKwlQNTRfUVVFVUVfREFUQQkJPSA0LAorCisJUDU0X1FVRVVFX0FDX05VTQk9IDQsCisJUDU0X1FVRVVFX0FDX1ZPCQk9IDQsCisJUDU0X1FVRVVFX0FDX1ZJCQk9IDUsCisJUDU0X1FVRVVFX0FDX0JFCQk9IDYsCisJUDU0X1FVRVVFX0FDX0JLCQk9IDcsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlQNTRfUVVFVUVfTlVNCQk9IDgsCit9OworCisjZGVmaW5lIElTX1FPU19RVUVVRShuKQkobiA+PSBQNTRfUVVFVUVfREFUQSkKKworc3RydWN0IHA1NF90eF9kYXRhIHsKKwl1OCByYXRlc2V0WzhdOworCXU4IHJ0c19yYXRlX2lkeDsKKwl1OCBjcnlwdF9vZmZzZXQ7CisJdTgga2V5X3R5cGU7CisJdTgga2V5X2xlbjsKKwl1OCBrZXlbMTZdOworCXU4IGh3X3F1ZXVlOworCXU4IGJhY2tsb2c7CisJX19sZTE2IGR1cmF0aW9uc1s0XTsKKwl1OCB0eF9hbnRlbm5hOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4IGN0c19yYXRlOworCQkJX19sZTE2IG91dHB1dF9wb3dlcjsKKwkJfSBfX3BhY2tlZCBsb25nYm93OworCQlzdHJ1Y3QgeworCQkJdTggb3V0cHV0X3Bvd2VyOworCQkJdTggY3RzX3JhdGU7CisJCQl1OCB1bmFsbG9jOworCQl9IF9fcGFja2VkIG5vcm1hbDsKKwl9IF9fcGFja2VkOworCXU4IHVuYWxsb2MyWzJdOworCXU4IGFsaWduWzBdOworfSBfX3BhY2tlZDsKKworLyogdW5pdCBpcyBtcyAqLworI2RlZmluZSBQNTRfVFhfRlJBTUVfTElGRVRJTUUgMjAwMAorI2RlZmluZSBQNTRfVFhfVElNRU9VVCA0MDAwCisjZGVmaW5lIFA1NF9TVEFUSVNUSUNTX1VQREFURSA1MDAwCisKKyNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX05PTkUJCTAKKyNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX1NUQVRJT04JCUJJVCgwKQorI2RlZmluZSBQNTRfRklMVEVSX1RZUEVfSUJTUwkJQklUKDEpCisjZGVmaW5lIFA1NF9GSUxURVJfVFlQRV9BUAkJQklUKDIpCisjZGVmaW5lIFA1NF9GSUxURVJfVFlQRV9UUkFOU1BBUkVOVAlCSVQoMykKKyNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX1BST01JU0NVT1VTCUJJVCg0KQorI2RlZmluZSBQNTRfRklMVEVSX1RZUEVfSElCRVJOQVRFCUJJVCg1KQorI2RlZmluZSBQNTRfRklMVEVSX1RZUEVfTk9BQ0sJCUJJVCg2KQorI2RlZmluZSBQNTRfRklMVEVSX1RZUEVfUlhfRElTQUJMRUQJQklUKDcpCisKK3N0cnVjdCBwNTRfc2V0dXBfbWFjIHsKKwlfX2xlMTYgbWFjX21vZGU7CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCByeF9hbnRlbm5hOworCXU4IHJ4X2FsaWduOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fbGUzMiBiYXNpY19yYXRlX21hc2s7CisJCQl1OCBydHNfcmF0ZXNbOF07CisJCQlfX2xlMzIgcnhfYWRkcjsKKwkJCV9fbGUxNiBtYXhfcng7CisJCQlfX2xlMTYgcnhodzsKKwkJCV9fbGUxNiB3YWtldXBfdGltZXI7CisJCQlfX2xlMTYgdW5hbGxvYzA7CisJCX0gX19wYWNrZWQgdjE7CisJCXN0cnVjdCB7CisJCQlfX2xlMzIgcnhfYWRkcjsKKwkJCV9fbGUxNiBtYXhfcng7CisJCQlfX2xlMTYgcnhodzsKKwkJCV9fbGUxNiB0aW1lcjsKKwkJCV9fbGUxNiB0cnVuY2F0ZTsKKwkJCV9fbGUzMiBiYXNpY19yYXRlX21hc2s7CisJCQl1OCBzYnNzX29mZnNldDsKKwkJCXU4IG1jYXN0X3dpbmRvdzsKKwkJCXU4IHJ4X3Jzc2lfdGhyZXNob2xkOworCQkJdTggcnhfZWRfdGhyZXNob2xkOworCQkJX19sZTMyIHJlZl9jbG9jazsKKwkJCV9fbGUxNiBscGZfYmFuZHdpZHRoOworCQkJX19sZTE2IG9zY19zdGFydF9kZWxheTsKKwkJfSBfX3BhY2tlZCB2MjsKKwl9IF9fcGFja2VkOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBQNTRfU0VUVVBfVjFfTEVOIDQwCisjZGVmaW5lIFA1NF9TRVRVUF9WMl9MRU4gKHNpemVvZihzdHJ1Y3QgcDU0X3NldHVwX21hYykpCisKKyNkZWZpbmUgUDU0X1NDQU5fRVhJVAlCSVQoMCkKKyNkZWZpbmUgUDU0X1NDQU5fVFJBUAlCSVQoMSkKKyNkZWZpbmUgUDU0X1NDQU5fQUNUSVZFIEJJVCgyKQorI2RlZmluZSBQNTRfU0NBTl9GSUxURVIgQklUKDMpCisKK3N0cnVjdCBwNTRfc2Nhbl9oZWFkIHsKKwlfX2xlMTYgbW9kZTsKKwlfX2xlMTYgZHdlbGw7CisJdTggc2Nhbl9wYXJhbXNbMjBdOworCV9fbGUxNiBmcmVxOworfSBfX3BhY2tlZDsKKworc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSB7CisJdTggcmZfcG93ZXI7CisJdTggcGFfZGV0ZWN0b3I7CisJdTggZGF0YV9iYXJrZXI7CisJdTggZGF0YV9icHNrOworCXU4IGRhdGFfcXBzazsKKwl1OCBkYXRhXzE2cWFtOworCXU4IGRhdGFfNjRxYW07CisJdTggcGFkZGluZzsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwNTRfc2Nhbl9ib2R5IHsKKwl1OCBwYV9wb2ludHNfcGVyX2N1cnZlOworCXU4IHZhbF9iYXJrZXI7CisJdTggdmFsX2Jwc2s7CisJdTggdmFsX3Fwc2s7CisJdTggdmFsXzE2cWFtOworCXU4IHZhbF82NHFhbTsKKwlzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlIGN1cnZlX2RhdGFbOF07CisJdTggZHVwX2Jwc2s7CisJdTggZHVwX3Fwc2s7CisJdTggZHVwXzE2cWFtOworCXU4IGR1cF82NHFhbTsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBXYXJuaW5nOiBMb25nYm93J3Mgc3RydWN0dXJlcyBhcmUgYm9ndXMuCisgKi8KK3N0cnVjdCBwNTRfY2hhbm5lbF9vdXRwdXRfbGltaXRfbG9uZ2JvdyB7CisJX19sZTE2IHJmX3Bvd2VyX3BvaW50c1sxMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlX2xvbmdib3cgeworCV9fbGUxNiByZl9wb3dlcjsKKwlfX2xlMTYgcGFfZGV0ZWN0b3I7CisJc3RydWN0IHsKKwkJX19sZTE2IGRhdGFbNF07CisJfSBwb2ludHNbM10gX19wYWNrZWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X3NjYW5fYm9keV9sb25nYm93IHsKKwlzdHJ1Y3QgcDU0X2NoYW5uZWxfb3V0cHV0X2xpbWl0X2xvbmdib3cgcG93ZXJfbGltaXRzOworCXN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGVfbG9uZ2JvdyBjdXJ2ZV9kYXRhWzhdOworCV9fbGUxNiB1bmtuWzZdOwkJLyogbWF5YmUgbW9yZSBwb3dlcl9saW1pdHMgb3IgcmF0ZV9tYXNrICovCit9IF9fcGFja2VkOworCit1bmlvbiBwNTRfc2Nhbl9ib2R5X3VuaW9uIHsKKwlzdHJ1Y3QgcDU0X3NjYW5fYm9keSBub3JtYWw7CisJc3RydWN0IHA1NF9zY2FuX2JvZHlfbG9uZ2JvdyBsb25nYm93OworfSBfX3BhY2tlZDsKKworc3RydWN0IHA1NF9zY2FuX3RhaWxfcmF0ZSB7CisJX19sZTMyIGJhc2ljX3JhdGVfbWFzazsKKwl1OCBydHNfcmF0ZXNbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X2xlZCB7CisJX19sZTE2IGZsYWdzOworCV9fbGUxNiBtYXNrWzJdOworCV9fbGUxNiBkZWxheVsyXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwNTRfZWRjZiB7CisJdTggZmxhZ3M7CisJdTggc2xvdHRpbWU7CisJdTggc2lmczsKKwl1OCBlb2ZwYWQ7CisJc3RydWN0IHA1NF9lZGNmX3F1ZXVlX3BhcmFtIHF1ZXVlWzhdOworCXU4IG1hcHBpbmdbNF07CisJX19sZTE2IGZyYW1lYnVyc3Q7CisJX19sZTE2IHJvdW5kX3RyaXBfZGVsYXk7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X3N0YXRpc3RpY3MgeworCV9fbGUzMiByeF9zdWNjZXNzOworCV9fbGUzMiByeF9iYWRfZmNzOworCV9fbGUzMiByeF9hYm9ydDsKKwlfX2xlMzIgcnhfYWJvcnRfcGh5OworCV9fbGUzMiBydHNfc3VjY2VzczsKKwlfX2xlMzIgcnRzX2ZhaWw7CisJX19sZTMyIHRzZjMyOworCV9fbGUzMiBhaXJ0aW1lOworCV9fbGUzMiBub2lzZTsKKwlfX2xlMzIgc2FtcGxlX25vaXNlWzhdOworCV9fbGUzMiBzYW1wbGVfY2NhOworCV9fbGUzMiBzYW1wbGVfdHg7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X3hib3dfc3ludGggeworCV9fbGUxNiBtYWdpYzE7CisJX19sZTE2IG1hZ2ljMjsKKwlfX2xlMTYgZnJlcTsKKwl1MzIgcGFkZGluZ1s1XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwNTRfdGltZXIgeworCV9fbGUzMiBpbnRlcnZhbDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwNTRfa2V5Y2FjaGUgeworCXU4IGVudHJ5OworCXU4IGtleV9pZDsKKwl1OCBtYWNbRVRIX0FMRU5dOworCXU4IHBhZGRpbmdbMl07CisJdTgga2V5X3R5cGU7CisJdTgga2V5X2xlbjsKKwl1OCBrZXlbMjRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHA1NF9idXJzdCB7CisJdTggZmxhZ3M7CisJdTggcXVldWU7CisJdTggYmFja2xvZzsKKwl1OCBwYWQ7CisJX19sZTE2IGR1cmF0aW9uc1szMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X3BzbV9pbnRlcnZhbCB7CisJX19sZTE2IGludGVydmFsOworCV9fbGUxNiBwZXJpb2RzOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBQNTRfUFNNX0NBTQkJCTAKKyNkZWZpbmUgUDU0X1BTTQkJCQlCSVQoMCkKKyNkZWZpbmUgUDU0X1BTTV9EVElNCQkJQklUKDEpCisjZGVmaW5lIFA1NF9QU01fTUNCQwkJCUJJVCgyKQorI2RlZmluZSBQNTRfUFNNX0NIRUNLU1VNCQlCSVQoMykKKyNkZWZpbmUgUDU0X1BTTV9TS0lQX01PUkVfREFUQQkJQklUKDQpCisjZGVmaW5lIFA1NF9QU01fQkVBQ09OX1RJTUVPVVQJCUJJVCg1KQorI2RlZmluZSBQNTRfUFNNX0hGT1NMRUVQCQlCSVQoNikKKyNkZWZpbmUgUDU0X1BTTV9BVVRPU1dJVENIX1NMRUVQCUJJVCg3KQorI2RlZmluZSBQNTRfUFNNX0xQSVQJCQlCSVQoOCkKKyNkZWZpbmUgUDU0X1BTTV9CRl9VQ0FTVF9TS0lQCQlCSVQoOSkKKyNkZWZpbmUgUDU0X1BTTV9CRl9NQ0FTVF9TS0lQCQlCSVQoMTApCisKK3N0cnVjdCBwNTRfcHNtIHsKKwlfX2xlMTYgbW9kZTsKKwlfX2xlMTYgYWlkOworCXN0cnVjdCBwNTRfcHNtX2ludGVydmFsIGludGVydmFsc1s0XTsKKwl1OCBiZWFjb25fcnNzaV9za2lwX21heDsKKwl1OCByc3NpX2RlbHRhX3RocmVzaG9sZDsKKwl1OCBucjsKKwl1OCBleGNsdWRlWzFdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBNQ19GSUxURVJfQUREUkVTU19OVU0gNAorCitzdHJ1Y3QgcDU0X2dyb3VwX2FkZHJlc3NfdGFibGUgeworCV9fbGUxNiBmaWx0ZXJfZW5hYmxlOworCV9fbGUxNiBudW1fYWRkcmVzczsKKwl1OCBtYWNfbGlzdFtNQ19GSUxURVJfQUREUkVTU19OVU1dW0VUSF9BTEVOXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwNTRfdHhjYW5jZWwgeworCV9fbGUzMiByZXFfaWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X3N0YV91bmxvY2sgeworCXU4IGFkZHJbRVRIX0FMRU5dOworCXUxNiBwYWRkaW5nOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBQNTRfVElNX0NMRUFSIEJJVCgxNSkKK3N0cnVjdCBwNTRfdGltIHsKKwl1OCBjb3VudDsKKwl1OCBwYWRkaW5nWzNdOworCV9fbGUxNiBlbnRyeVs4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwNTRfY2NlX3F1aWV0IHsKKwlfX2xlMzIgcGVyaW9kOworfSBfX3BhY2tlZDsKKworc3RydWN0IHA1NF9idF9iYWxhbmNlciB7CisJX19sZTE2IHByaW9fdGhyZXNoOworCV9fbGUxNiBhY2xfdGhyZXNoOworfSBfX3BhY2tlZDsKKworc3RydWN0IHA1NF9hcnBfdGFibGUgeworCV9fbGUxNiBmaWx0ZXJfZW5hYmxlOworCXU4IGlwdjRfYWRkcls0XTsKK30gX19wYWNrZWQ7CisKKy8qIExFRCBjb250cm9sICovCitpbnQgcDU0X3NldF9sZWRzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KTsKK2ludCBwNTRfaW5pdF9sZWRzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KTsKK3ZvaWQgcDU0X3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdik7CisKKy8qIHhtaXQgZnVuY3Rpb25zICovCitpbnQgcDU0X3R4XzgwMjExKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgcDU0X3R4X2NhbmNlbChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgX19sZTMyIHJlcV9pZCk7Cit2b2lkIHA1NF90eChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKy8qIHN5bnRoL3BoeSBjb25maWd1cmF0aW9uICovCitpbnQgcDU0X2luaXRfeGJvd19zeW50aChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdik7CitpbnQgcDU0X3NjYW4oc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHUxNiBtb2RlLCB1MTYgZHdlbGwpOworCisvKiBNQUMgKi8KK2ludCBwNTRfc3RhX3VubG9jayhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTggKmFkZHIpOworaW50IHA1NF91cGRhdGVfYmVhY29uX3RpbShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTE2IGFpZCwgYm9vbCBzZXQpOworaW50IHA1NF9zZXR1cF9tYWMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpOworaW50IHA1NF9zZXRfcHMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpOworaW50IHA1NF9mZXRjaF9zdGF0aXN0aWNzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KTsKKworLyogZS92IERDRiBzZXR1cCAqLworaW50IHA1NF9zZXRfZWRjZihzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdik7CisKKy8qIGNyeXB0b2dyYXBoaWMgZW5naW5lICovCitpbnQgcDU0X3VwbG9hZF9rZXkoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHU4IGFsZ28sIGludCBzbG90LAorCQkgICB1OCBpZHgsIHU4IGxlbiwgdTggKmFkZHIsIHU4KiBrZXkpOworCisvKiBlZXByb20gKi8KK2ludCBwNTRfZG93bmxvYWRfZWVwcm9tKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB2b2lkICpidWYsCisJCQl1MTYgb2Zmc2V0LCB1MTYgbGVuKTsKKworLyogdXRpbGl0eSAqLwordTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKTsKKworI2VuZGlmIC8qIExNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0ODZiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMKQEAgLTAsMCArMSw2NDggQEAKKy8qCisgKiBtYWM4MDIxMSBnbHVlIGNvZGUgZm9yIG1hYzgwMjExIFByaXNtNTQgZHJpdmVycworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSwgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgorICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogQmFzZWQgb246CisgKiAtIHRoZSBpc2xzbSAoc29mdG1hYyBwcmlzbTU0KSBkcml2ZXIsIHdoaWNoIGlzOgorICogICBDb3B5cmlnaHQgMjAwNC0yMDA2IEplYW4tQmFwdGlzdGUgTm90ZSA8amJub3RlQGdtYWlsLmNvbT4sIGV0IGFsLgorICogLSBzdGxjNDV4eCBkcml2ZXIKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJwNTQuaCIKKyNpbmNsdWRlICJsbWFjLmgiCisKK3N0YXRpYyBpbnQgbW9kcGFyYW1fbm9od2NyeXB0OworbW9kdWxlX3BhcmFtX25hbWVkKG5vaHdjcnlwdCwgbW9kcGFyYW1fbm9od2NyeXB0LCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Mobm9od2NyeXB0LCAiRGlzYWJsZSBoYXJkd2FyZSBlbmNyeXB0aW9uLiIpOworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNvZnRtYWMgUHJpc201NCBjb21tb24gY29kZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwcmlzbTU0Y29tbW9uIik7CisKK3N0YXRpYyB2b2lkIHA1NF9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIGVudW0gc3RhX25vdGlmeV9jbWQgbm90aWZ5X2NtZCwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3dpdGNoIChub3RpZnlfY21kKSB7CisJY2FzZSBTVEFfTk9USUZZX0FERDoKKwljYXNlIFNUQV9OT1RJRllfUkVNT1ZFOgorCQkvKgorCQkgKiBOb3RpZnkgdGhlIGZpcm13YXJlIHRoYXQgd2UgZG9uJ3Qgd2FudCBvciB3ZSBkb24ndAorCQkgKiBuZWVkIHRvIGJ1ZmZlciBmcmFtZXMgZm9yIHRoaXMgc3RhdGlvbiBhbnltb3JlLgorCQkgKi8KKworCQlwNTRfc3RhX3VubG9jayhwcml2LCBzdGEtPmFkZHIpOworCQlicmVhazsKKwljYXNlIFNUQV9OT1RJRllfQVdBS0U6CisJCS8qIHVwZGF0ZSB0aGUgZmlybXdhcmUncyBmaWx0ZXIgdGFibGUgKi8KKwkJcDU0X3N0YV91bmxvY2socHJpdiwgc3RhLT5hZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHA1NF9zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCWJvb2wgc2V0KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCisJcmV0dXJuIHA1NF91cGRhdGVfYmVhY29uX3RpbShwcml2LCBzdGEtPmFpZCwgc2V0KTsKK30KKwordTggKnA1NF9maW5kX2llKHN0cnVjdCBza19idWZmICpza2IsIHU4IGllKQoreworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLT5kYXRhOworCXU4ICpwb3MsICplbmQ7CisKKwlpZiAoc2tiLT5sZW4gPD0gc2l6ZW9mKG1nbXQpKQorCQlyZXR1cm4gTlVMTDsKKworCXBvcyA9ICh1OCAqKW1nbXQtPnUuYmVhY29uLnZhcmlhYmxlOworCWVuZCA9IHNrYi0+ZGF0YSArIHNrYi0+bGVuOworCXdoaWxlIChwb3MgPCBlbmQpIHsKKwkJaWYgKHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpCisJCQlyZXR1cm4gTlVMTDsKKworCQlpZiAocG9zWzBdID09IGllKQorCQkJcmV0dXJuIHBvczsKKworCQlwb3MgKz0gMiArIHBvc1sxXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcDU0X2JlYWNvbl9mb3JtYXRfaWVfdGltKHN0cnVjdCBza19idWZmICpza2IpCit7CisJLyoKKwkgKiB0aGUgZ29vZCBleGN1c2UgZm9yIHRoaXMgbWVzcyBpcyAuLi4gdGhlIGZpcm13YXJlLgorCSAqIFRoZSBkdW1teSBUSU0gTVVTVCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBiZWFjb24gZnJhbWUsCisJICogYmVjYXVzZSBpdCdsbCBiZSBvdmVyd3JpdHRlbiEKKwkgKi8KKwl1OCAqdGltOworCXU4IGR0aW1fbGVuOworCXU4IGR0aW1fcGVyaW9kOworCXU4ICpuZXh0OworCisJdGltID0gcDU0X2ZpbmRfaWUoc2tiLCBXTEFOX0VJRF9USU0pOworCWlmICghdGltKQorCQlyZXR1cm4gMDsKKworCWR0aW1fbGVuID0gdGltWzFdOworCWR0aW1fcGVyaW9kID0gdGltWzNdOworCW5leHQgPSB0aW0gKyAyICsgZHRpbV9sZW47CisKKwlpZiAoZHRpbV9sZW4gPCAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbW1vdmUodGltLCBuZXh0LCBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBuZXh0KTsKKwl0aW0gPSBza2JfdGFpbF9wb2ludGVyKHNrYikgLSAoZHRpbV9sZW4gKyAyKTsKKworCS8qIGFkZCB0aGUgZHVtbXkgYXQgdGhlIGVuZCAqLworCXRpbVswXSA9IFdMQU5fRUlEX1RJTTsKKwl0aW1bMV0gPSAzOworCXRpbVsyXSA9IDA7CisJdGltWzNdID0gZHRpbV9wZXJpb2Q7CisJdGltWzRdID0gMDsKKworCWlmIChkdGltX2xlbiA+IDMpCisJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSAoZHRpbV9sZW4gLSAzKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwNTRfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwKKwkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKKwlpbnQgcmV0OworCisJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocHJpdi0+aHcsIHZpZik7CisJaWYgKCFiZWFjb24pCisJCXJldHVybiAtRU5PTUVNOworCXJldCA9IHA1NF9iZWFjb25fZm9ybWF0X2llX3RpbShiZWFjb24pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIER1cmluZyBvcGVyYXRpb24sIHRoZSBmaXJtd2FyZSB0YWtlcyBjYXJlIG9mIGJlYWNvbmluZy4KKwkgKiBUaGUgZHJpdmVyIG9ubHkgbmVlZHMgdG8gdXBsb2FkIGEgbmV3IGJlYWNvbiB0ZW1wbGF0ZSwgb25jZQorCSAqIHRoZSB0ZW1wbGF0ZSB3YXMgY2hhbmdlZCBieSB0aGUgc3RhY2sgb3IgdXNlcnNwYWNlLgorCSAqCisJICogTE1BQyBBUEkgMy4yLjIgYWxzbyBzcGVjaWZpZXMgdGhhdCB0aGUgZHJpdmVyIGRvZXMgbm90IG5lZWQKKwkgKiB0byBjYW5jZWwgdGhlIG9sZCBiZWFjb24gdGVtcGxhdGUgYnkgaGFuZCwgaW5zdGVhZCB0aGUgZmlybXdhcmUKKwkgKiB3aWxsIHJlbGVhc2UgdGhlIHByZXZpb3VzIG9uZSB0aHJvdWdoIHRoZSBmZWVkYmFjayBtZWNoYW5pc20uCisJICovCisJV0FSTl9PTihwNTRfdHhfODAyMTEocHJpdi0+aHcsIGJlYWNvbikpOworCXByaXYtPnRzZl9oaWdoMzIgPSAwOworCXByaXYtPnRzZl9sb3czMiA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwNTRfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwllcnIgPSBwcml2LT5vcGVuKGRldik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisJUDU0X1NFVF9RVUVVRShwcml2LT5xb3NfcGFyYW1zWzBdLCAweDAwMDIsIDB4MDAwMywgMHgwMDA3LCA0Nyk7CisJUDU0X1NFVF9RVUVVRShwcml2LT5xb3NfcGFyYW1zWzFdLCAweDAwMDIsIDB4MDAwNywgMHgwMDBmLCA5NCk7CisJUDU0X1NFVF9RVUVVRShwcml2LT5xb3NfcGFyYW1zWzJdLCAweDAwMDMsIDB4MDAwZiwgMHgwM2ZmLCAwKTsKKwlQNTRfU0VUX1FVRVVFKHByaXYtPnFvc19wYXJhbXNbM10sIDB4MDAwNywgMHgwMDBmLCAweDAzZmYsIDApOworCWVyciA9IHA1NF9zZXRfZWRjZihwcml2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCW1lbXNldChwcml2LT5ic3NpZCwgfjAsIEVUSF9BTEVOKTsKKwlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKKwllcnIgPSBwNTRfc2V0dXBfbWFjKHByaXYpOworCWlmIChlcnIpIHsKKwkJcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCQlnb3RvIG91dDsKKwl9CisKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGRldiwgJnByaXYtPndvcmssIDApOworCisJcHJpdi0+c29mdGxlZF9zdGF0ZSA9IDA7CisJZXJyID0gcDU0X3NldF9sZWRzKHByaXYpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwNTRfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CisJcHJpdi0+c29mdGxlZF9zdGF0ZSA9IDA7CisJcDU0X3NldF9sZWRzKHByaXYpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT53b3JrKTsKKworCXByaXYtPnN0b3AoZGV2KTsKKwlza2JfcXVldWVfcHVyZ2UoJnByaXYtPnR4X3BlbmRpbmcpOworCXNrYl9xdWV1ZV9wdXJnZSgmcHJpdi0+dHhfcXVldWUpOworCWZvciAoaSA9IDA7IGkgPCBQNTRfUVVFVUVfTlVNOyBpKyspIHsKKwkJcHJpdi0+dHhfc3RhdHNbaV0uY291bnQgPSAwOworCQlwcml2LT50eF9zdGF0c1tpXS5sZW4gPSAwOworCX0KKworCXByaXYtPmJlYWNvbl9yZXFfaWQgPSBjcHVfdG9fbGUzMigwKTsKKwlwcml2LT50c2ZfaGlnaDMyID0gcHJpdi0+dHNmX2xvdzMyID0gMDsKKwltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IHA1NF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlpZiAocHJpdi0+bW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CisJCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlwcml2LT52aWYgPSBjb25mLT52aWY7CisKKwlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJcHJpdi0+bW9kZSA9IGNvbmYtPnR5cGU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJcDU0X3NldHVwX21hYyhwcml2KTsKKwltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwNTRfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJcHJpdi0+dmlmID0gTlVMTDsKKworCS8qCisJICogTE1BQyBBUEkgMy4yLjIgc3RhdGVzIHRoYXQgYW55IGFjdGl2ZSBiZWFjb24gdGVtcGxhdGUgbXVzdCBiZQorCSAqIGNhbmNlbGVkIGJ5IHRoZSBkcml2ZXIgYmVmb3JlIGF0dGVtcHRpbmcgYSBtb2RlIHRyYW5zaXRpb24uCisJICovCisJaWYgKGxlMzJfdG9fY3B1KHByaXYtPmJlYWNvbl9yZXFfaWQpICE9IDApIHsKKwkJcDU0X3R4X2NhbmNlbChwcml2LCBwcml2LT5iZWFjb25fcmVxX2lkKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJnByaXYtPmJlYWNvbl9jb21wLCBIWik7CisJfQorCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOworCW1lbXNldChwcml2LT5tYWNfYWRkciwgMCwgRVRIX0FMRU4pOworCW1lbXNldChwcml2LT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCXA1NF9zZXR1cF9tYWMocHJpdik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKK30KKworc3RhdGljIGludCBwNTRfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTMyIGNoYW5nZWQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmRldi0+Y29uZjsKKworCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKQorCQlwcml2LT5vdXRwdXRfcG93ZXIgPSBjb25mLT5wb3dlcl9sZXZlbCA8PCAyOworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpIHsKKwkJcmV0ID0gcDU0X3NjYW4ocHJpdiwgUDU0X1NDQU5fRVhJVCwgMCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9CisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpIHsKKwkJcmV0ID0gcDU0X3NldF9wcyhwcml2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9JRExFKSB7CisJCXJldCA9IHA1NF9zZXR1cF9tYWMocHJpdik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHA1NF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCisJCQkJIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCisJCQkJIHU2NCBtdWx0aWNhc3QpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisKKwkqdG90YWxfZmxhZ3MgJj0gRklGX1BST01JU0NfSU5fQlNTIHwKKwkJCUZJRl9PVEhFUl9CU1M7CisKKwlwcml2LT5maWx0ZXJfZmxhZ3MgPSAqdG90YWxfZmxhZ3M7CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIChGSUZfUFJPTUlTQ19JTl9CU1MgfCBGSUZfT1RIRVJfQlNTKSkKKwkJcDU0X3NldHVwX21hYyhwcml2KTsKK30KKworc3RhdGljIGludCBwNTRfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUxNiBxdWV1ZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCWlmIChxdWV1ZSA8IGRldi0+cXVldWVzKSB7CisJCVA1NF9TRVRfUVVFVUUocHJpdi0+cW9zX3BhcmFtc1txdWV1ZV0sIHBhcmFtcy0+YWlmcywKKwkJCXBhcmFtcy0+Y3dfbWluLCBwYXJhbXMtPmN3X21heCwgcGFyYW1zLT50eG9wKTsKKwkJcmV0ID0gcDU0X3NldF9lZGNmKHByaXYpOworCX0gZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcDU0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwNTRfY29tbW9uLAorCQkJCQkgICAgICAgd29yay53b3JrKTsKKworCWlmICh1bmxpa2VseShwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSkKKwkJcmV0dXJuIDsKKworCS8qCisJICogVE9ETzogd2FsayB0aHJvdWdoIHR4X3F1ZXVlIGFuZCBkbyB0aGUgZm9sbG93aW5nIHRhc2tzCisJICogCTEuIGluaXRpYXRlIGJ1cnN0cy4KKwkgKiAgICAgIDIuIGNhbmNlbCBzdHVjayBmcmFtZXMgLyByZXNldCB0aGUgZGV2aWNlIGlmIG5lY2Vzc2FyeS4KKwkgKi8KKworCXA1NF9mZXRjaF9zdGF0aXN0aWNzKHByaXYpOworfQorCitzdGF0aWMgaW50IHA1NF9nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKworCW1lbWNweShzdGF0cywgJnByaXYtPnN0YXRzLCBzaXplb2YoKnN0YXRzKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDU0X2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisKKwltZW1jcHkoc3RhdHMsICZwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfREFUQV0sCisJICAgICAgIHNpemVvZihzdGF0c1swXSkgKiBkZXYtPnF1ZXVlcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHA1NF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKKwkJCQkgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSB7CisJCW1lbWNweShwcml2LT5ic3NpZCwgaW5mby0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJcDU0X3NldHVwX21hYyhwcml2KTsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTikgeworCQlwNTRfc2Nhbihwcml2LCBQNTRfU0NBTl9FWElULCAwKTsKKwkJcDU0X3NldHVwX21hYyhwcml2KTsKKwkJcDU0X2JlYWNvbl91cGRhdGUocHJpdiwgdmlmKTsKKwkJcDU0X3NldF9lZGNmKHByaXYpOworCX0KKworCWlmIChjaGFuZ2VkICYgKEJTU19DSEFOR0VEX0VSUF9TTE9UIHwgQlNTX0NIQU5HRURfQkVBQ09OKSkgeworCQlwcml2LT51c2Vfc2hvcnRfc2xvdCA9IGluZm8tPnVzZV9zaG9ydF9zbG90OworCQlwNTRfc2V0X2VkY2YocHJpdik7CisJfQorCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHsKKwkJaWYgKGRldi0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQlwcml2LT5iYXNpY19yYXRlX21hc2sgPSAoaW5mby0+YmFzaWNfcmF0ZXMgPDwgNCk7CisJCWVsc2UKKwkJCXByaXYtPmJhc2ljX3JhdGVfbWFzayA9IGluZm8tPmJhc2ljX3JhdGVzOworCQlwNTRfc2V0dXBfbWFjKHByaXYpOworCQlpZiAocHJpdi0+ZndfdmFyID49IDB4NTAwKQorCQkJcDU0X3NjYW4ocHJpdiwgUDU0X1NDQU5fRVhJVCwgMCk7CisJfQorCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKKwkJaWYgKGluZm8tPmFzc29jKSB7CisJCQlwcml2LT5haWQgPSBpbmZvLT5haWQ7CisJCQlwcml2LT53YWtldXBfdGltZXIgPSBpbmZvLT5iZWFjb25faW50ICoKKwkJCQkJICAgICBpbmZvLT5kdGltX3BlcmlvZCAqIDU7CisJCQlwNTRfc2V0dXBfbWFjKHByaXYpOworCQl9IGVsc2UgeworCQkJcHJpdi0+d2FrZXVwX3RpbWVyID0gNTAwOworCQkJcHJpdi0+YWlkID0gMDsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgcDU0X3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJaW50IHNsb3QsIHJldCA9IDA7CisJdTggYWxnbyA9IDA7CisJdTggKmFkZHIgPSBOVUxMOworCisJaWYgKG1vZHBhcmFtX25vaHdjcnlwdCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJaWYgKGNtZCA9PSBTRVRfS0VZKSB7CisJCXN3aXRjaCAoa2V5LT5hbGcpIHsKKwkJY2FzZSBBTEdfVEtJUDoKKwkJCWlmICghKHByaXYtPnByaXZhY3lfY2FwcyAmIChCUl9ERVNDX1BSSVZfQ0FQX01JQ0hBRUwgfAorCQkJICAgICAgQlJfREVTQ19QUklWX0NBUF9US0lQKSkpIHsKKwkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisJCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKKwkJCWFsZ28gPSBQNTRfQ1JZUFRPX1RLSVBNSUNIQUVMOworCQkJYnJlYWs7CisJCWNhc2UgQUxHX1dFUDoKKwkJCWlmICghKHByaXYtPnByaXZhY3lfY2FwcyAmIEJSX0RFU0NfUFJJVl9DQVBfV0VQKSkgeworCQkJCXJldCA9IC1FT1BOT1RTVVBQOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKwkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOworCQkJYWxnbyA9IFA1NF9DUllQVE9fV0VQOworCQkJYnJlYWs7CisJCWNhc2UgQUxHX0NDTVA6CisJCQlpZiAoIShwcml2LT5wcml2YWN5X2NhcHMgJiBCUl9ERVNDX1BSSVZfQ0FQX0FFU0NDTVApKSB7CisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CisJCQlhbGdvID0gUDU0X0NSWVBUT19BRVNDQ01QOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCQlzbG90ID0gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24ocHJpdi0+dXNlZF9yeGtleXMsCisJCQkJCSAgICAgICBwcml2LT5yeF9rZXljYWNoZV9zaXplLCAwKTsKKworCQlpZiAoc2xvdCA8IDApIHsKKwkJCS8qCisJCQkgKiBUaGUgZGV2aWNlIHN1cHBvcnRzIHRoZSBjaG9vc2VuIGFsZ29yaXRobSwgYnV0IHRoZQorCQkJICogZmlybXdhcmUgZG9lcyBub3QgcHJvdmlkZSBlbm91Z2gga2V5IHNsb3RzIHRvIHN0b3JlCisJCQkgKiBhbGwgb2YgdGhlbS4KKwkJCSAqIEJ1dCBlbmNyeXB0aW9uIG9mZmxvYWQgZm9yIG91dGdvaW5nIGZyYW1lcyBpcyBhbHdheXMKKwkJCSAqIHBvc3NpYmxlLCBzbyB3ZSBqdXN0IHByZXRlbmQgdGhhdCB0aGUgdXBsb2FkIHdhcworCQkJICogc3VjY2Vzc2Z1bCBhbmQgZG8gdGhlIGRlY3J5cHRpb24gaW4gc29mdHdhcmUuCisJCQkgKi8KKworCQkJLyogbWFyayB0aGUga2V5IGFzIGludmFsaWQuICovCisJCQlrZXktPmh3X2tleV9pZHggPSAweGZmOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJfSBlbHNlIHsKKwkJc2xvdCA9IGtleS0+aHdfa2V5X2lkeDsKKworCQlpZiAoc2xvdCA9PSAweGZmKSB7CisJCQkvKiBUaGlzIGtleSB3YXMgbm90IHVwbG9hZGVkIGludG8gdGhlIHJ4IGtleSBjYWNoZS4gKi8KKworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisKKwkJYml0bWFwX3JlbGVhc2VfcmVnaW9uKHByaXYtPnVzZWRfcnhrZXlzLCBzbG90LCAwKTsKKwkJYWxnbyA9IDA7CisJfQorCisJaWYgKHN0YSkKKwkJYWRkciA9IHN0YS0+YWRkcjsKKworCXJldCA9IHA1NF91cGxvYWRfa2V5KHByaXYsIGFsZ28sIHNsb3QsIGtleS0+a2V5aWR4LAorCQkJICAgICBrZXktPmtleWxlbiwgYWRkciwga2V5LT5rZXkpOworCWlmIChyZXQpIHsKKwkJYml0bWFwX3JlbGVhc2VfcmVnaW9uKHByaXYtPnVzZWRfcnhrZXlzLCBzbG90LCAwKTsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlrZXktPmh3X2tleV9pZHggPSBzbG90OworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHA1NF9vcHMgPSB7CisJLnR4CQkJPSBwNTRfdHhfODAyMTEsCisJLnN0YXJ0CQkJPSBwNTRfc3RhcnQsCisJLnN0b3AJCQk9IHA1NF9zdG9wLAorCS5hZGRfaW50ZXJmYWNlCQk9IHA1NF9hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlCT0gcDU0X3JlbW92ZV9pbnRlcmZhY2UsCisJLnNldF90aW0JCT0gcDU0X3NldF90aW0sCisJLnN0YV9ub3RpZnkJCT0gcDU0X3N0YV9ub3RpZnksCisJLnNldF9rZXkJCT0gcDU0X3NldF9rZXksCisJLmNvbmZpZwkJCT0gcDU0X2NvbmZpZywKKwkuYnNzX2luZm9fY2hhbmdlZAk9IHA1NF9ic3NfaW5mb19jaGFuZ2VkLAorCS5jb25maWd1cmVfZmlsdGVyCT0gcDU0X2NvbmZpZ3VyZV9maWx0ZXIsCisJLmNvbmZfdHgJCT0gcDU0X2NvbmZfdHgsCisJLmdldF9zdGF0cwkJPSBwNTRfZ2V0X3N0YXRzLAorCS5nZXRfdHhfc3RhdHMJCT0gcDU0X2dldF90eF9zdGF0cworfTsKKworc3RydWN0IGllZWU4MDIxMV9odyAqcDU0X2luaXRfY29tbW9uKHNpemVfdCBwcml2X2RhdGFfbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldjsKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdjsKKworCWRldiA9IGllZWU4MDIxMV9hbGxvY19odyhwcml2X2RhdGFfbGVuLCAmcDU0X29wcyk7CisJaWYgKCFkZXYpCisJCXJldHVybiBOVUxMOworCisJcHJpdiA9IGRldi0+cHJpdjsKKwlwcml2LT5odyA9IGRldjsKKwlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CisJcHJpdi0+YmFzaWNfcmF0ZV9tYXNrID0gMHgxNWY7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnR4X3N0YXRzX2xvY2spOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4X3F1ZXVlKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT50eF9wZW5kaW5nKTsKKwlkZXYtPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8CisJCSAgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCQkgICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJCSAgICAgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKKwkJICAgICBJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUiB8CisJCSAgICAgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKKworCWRldi0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CisJCQkJICAgICAgQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB8CisJCQkJICAgICAgQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8CisJCQkJICAgICAgQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpOworCisJZGV2LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTAwMDsJLyogVE9ETzogZmluZCBhY3R1YWwgdmFsdWUgKi8KKwlwcml2LT5iZWFjb25fcmVxX2lkID0gY3B1X3RvX2xlMzIoMCk7CisJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0JFQUNPTl0ubGltaXQgPSAxOworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9GV1NDQU5dLmxpbWl0ID0gMTsKKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfTUdNVF0ubGltaXQgPSAzOworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9DQUJdLmxpbWl0ID0gMzsKKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfREFUQV0ubGltaXQgPSA1OworCWRldi0+cXVldWVzID0gMTsKKwlwcml2LT5ub2lzZSA9IC05NDsKKwkvKgorCSAqIFdlIHN1cHBvcnQgYXQgbW9zdCA4IHRyaWVzIG5vIG1hdHRlciB3aGljaCByYXRlIHRoZXkncmUgYXQsCisJICogd2UgY2Fubm90IHN1cHBvcnQgbWF4X3JhdGVzICogbWF4X3JhdGVfdHJpZXMgYXMgd2Ugc2V0IGl0CisJICogaGVyZSwgYnV0IHNldHRpbmcgaXQgY29ycmVjdGx5IHRvIDQvMiBvciBzbyB3b3VsZCBsaW1pdCB1cworCSAqIGFydGlmaWNpYWxseSBpZiB0aGUgUkMgYWxnb3JpdGhtIHdhbnRzIGp1c3QgdHdvIHJhdGVzLCBzbworCSAqIGxldCdzIHNheSA0LzcsIHdlJ2xsIHJlZGlzdHJpYnV0ZSBpdCBhdCBUWCB0aW1lLCBzZWUgdGhlCisJICogY29tbWVudHMgdGhlcmUuCisJICovCisJZGV2LT5tYXhfcmF0ZXMgPSA0OworCWRldi0+bWF4X3JhdGVfdHJpZXMgPSA3OworCWRldi0+ZXh0cmFfdHhfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IHA1NF9oZHIpICsgNCArCisJCQkJIHNpemVvZihzdHJ1Y3QgcDU0X3R4X2RhdGEpOworCisJLyoKKwkgKiBGb3Igbm93LCBkaXNhYmxlIFBTIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBhZmZlY3RzCisJICogbGluayBzdGFiaWxpdHkgc2lnbmlmaWNhbnRseS4KKwkgKi8KKwlkZXYtPndpcGh5LT5wc19kZWZhdWx0ID0gZmFsc2U7CisKKwltdXRleF9pbml0KCZwcml2LT5jb25mX211dGV4KTsKKwltdXRleF9pbml0KCZwcml2LT5lZXByb21fbXV0ZXgpOworCWluaXRfY29tcGxldGlvbigmcHJpdi0+ZWVwcm9tX2NvbXApOworCWluaXRfY29tcGxldGlvbigmcHJpdi0+YmVhY29uX2NvbXApOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT53b3JrLCBwNTRfd29yayk7CisKKwlyZXR1cm4gZGV2OworfQorRVhQT1JUX1NZTUJPTF9HUEwocDU0X2luaXRfY29tbW9uKTsKKworaW50IHA1NF9yZWdpc3Rlcl9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCWludCBlcnI7CisKKwllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIocGRldiwgIkNhbm5vdCByZWdpc3RlciBkZXZpY2UgKCVkKS5cbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisjaWZkZWYgQ09ORklHX1A1NF9MRURTCisJZXJyID0gcDU0X2luaXRfbGVkcyhwcml2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworI2VuZGlmIC8qIENPTkZJR19QNTRfTEVEUyAqLworCisJZGV2X2luZm8ocGRldiwgImlzIHJlZ2lzdGVyZWQgYXMgJyVzJ1xuIiwgd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwNTRfcmVnaXN0ZXJfY29tbW9uKTsKKwordm9pZCBwNTRfZnJlZV9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGkrKykKKwkJa2ZyZWUocHJpdi0+YmFuZF90YWJsZVtpXSk7CisKKwlrZnJlZShwcml2LT5pcV9hdXRvY2FsKTsKKwlrZnJlZShwcml2LT5vdXRwdXRfbGltaXQpOworCWtmcmVlKHByaXYtPmN1cnZlX2RhdGEpOworCWtmcmVlKHByaXYtPnVzZWRfcnhrZXlzKTsKKwlwcml2LT5pcV9hdXRvY2FsID0gTlVMTDsKKwlwcml2LT5vdXRwdXRfbGltaXQgPSBOVUxMOworCXByaXYtPmN1cnZlX2RhdGEgPSBOVUxMOworCXByaXYtPnVzZWRfcnhrZXlzID0gTlVMTDsKKwlpZWVlODAyMTFfZnJlZV9odyhkZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocDU0X2ZyZWVfY29tbW9uKTsKKwordm9pZCBwNTRfdW5yZWdpc3Rlcl9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCisjaWZkZWYgQ09ORklHX1A1NF9MRURTCisJcDU0X3VucmVnaXN0ZXJfbGVkcyhwcml2KTsKKyNlbmRpZiAvKiBDT05GSUdfUDU0X0xFRFMgKi8KKworCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRldik7CisJbXV0ZXhfZGVzdHJveSgmcHJpdi0+Y29uZl9tdXRleCk7CisJbXV0ZXhfZGVzdHJveSgmcHJpdi0+ZWVwcm9tX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHA1NF91bnJlZ2lzdGVyX2NvbW1vbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKaW5kZXggZGIzZGY5NC4uMWFmYzM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaApAQCAtMSw2ICsxLDMgQEAKLSNpZm5kZWYgUDU0X0gKLSNkZWZpbmUgUDU0X0gKLQogLyoKICAqIFNoYXJlZCBkZWZpbmVzIGZvciBhbGwgbWFjODAyMTEgUHJpc201NCBjb2RlCiAgKgpAQCAtMTQsMzkgKzExLDc4IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaWZuZGVmIFA1NF9ICisjZGVmaW5lIFA1NF9ICisKICNpZmRlZiBDT05GSUdfUDU0X0xFRFMKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCiAKLWVudW0gcDU0X2NvbnRyb2xfZnJhbWVfdHlwZXMgewotCVA1NF9DT05UUk9MX1RZUEVfU0VUVVAgPSAwLAotCVA1NF9DT05UUk9MX1RZUEVfU0NBTiwKLQlQNTRfQ09OVFJPTF9UWVBFX1RSQVAsCi0JUDU0X0NPTlRST0xfVFlQRV9EQ0ZJTklULAotCVA1NF9DT05UUk9MX1RZUEVfUlhfS0VZQ0FDSEUsCi0JUDU0X0NPTlRST0xfVFlQRV9USU0sCi0JUDU0X0NPTlRST0xfVFlQRV9QU00sCi0JUDU0X0NPTlRST0xfVFlQRV9UWENBTkNFTCwKLQlQNTRfQ09OVFJPTF9UWVBFX1RYRE9ORSwKLQlQNTRfQ09OVFJPTF9UWVBFX0JVUlNULAotCVA1NF9DT05UUk9MX1RZUEVfU1RBVF9SRUFEQkFDSywKLQlQNTRfQ09OVFJPTF9UWVBFX0JCUCwKLQlQNTRfQ09OVFJPTF9UWVBFX0VFUFJPTV9SRUFEQkFDSywKLQlQNTRfQ09OVFJPTF9UWVBFX0xFRCwKLQlQNTRfQ09OVFJPTF9UWVBFX0dQSU8sCi0JUDU0X0NPTlRST0xfVFlQRV9USU1FUiwKLQlQNTRfQ09OVFJPTF9UWVBFX01PRFVMQVRJT04sCi0JUDU0X0NPTlRST0xfVFlQRV9TWU5USF9DT05GSUcsCi0JUDU0X0NPTlRST0xfVFlQRV9ERVRFQ1RPUl9WQUxVRSwKLQlQNTRfQ09OVFJPTF9UWVBFX1hCT1dfU1lOVEhfQ0ZHLAotCVA1NF9DT05UUk9MX1RZUEVfQ0NFX1FVSUVULAotCVA1NF9DT05UUk9MX1RZUEVfUFNNX1NUQV9VTkxPQ0ssCi0JUDU0X0NPTlRST0xfVFlQRV9QQ1MsCi0JUDU0X0NPTlRST0xfVFlQRV9CVF9CQUxBTkNFUiA9IDI4LAotCVA1NF9DT05UUk9MX1RZUEVfR1JPVVBfQUREUkVTU19UQUJMRSA9IDMwLAotCVA1NF9DT05UUk9MX1RZUEVfQVJQVEFCTEUgPSAzMSwKLQlQNTRfQ09OVFJPTF9UWVBFX0JUX09QVElPTlMgPSAzNQotfTsKKyNkZWZpbmUgSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUiAweDIwMDAwCisKKyNkZWZpbmUgQlJfQ09ERV9NSU4JCQkweDgwMDAwMDAwCisjZGVmaW5lIEJSX0NPREVfQ09NUE9ORU5UX0lECQkweDgwMDAwMDAxCisjZGVmaW5lIEJSX0NPREVfQ09NUE9ORU5UX1ZFUlNJT04JMHg4MDAwMDAwMgorI2RlZmluZSBCUl9DT0RFX0RFUEVOREVOVF9JRgkJMHg4MDAwMDAwMworI2RlZmluZSBCUl9DT0RFX0VYUE9TRURfSUYJCTB4ODAwMDAwMDQKKyNkZWZpbmUgQlJfQ09ERV9ERVNDUgkJCTB4ODAwMDAxMDEKKyNkZWZpbmUgQlJfQ09ERV9NQVgJCQkweDhGRkZGRkZGCisjZGVmaW5lIEJSX0NPREVfRU5EX09GX0JSQQkJMHhGRjAwMDBGRgorI2RlZmluZSBMRUdBQ1lfQlJfQ09ERV9FTkRfT0ZfQlJBCTB4RkZGRkZGRkYKKworc3RydWN0IGJvb3RyZWMgeworCV9fbGUzMiBjb2RlOworCV9fbGUzMiBsZW47CisJdTMyIGRhdGFbMTBdOworfSBfX3BhY2tlZDsKKworLyogSW50ZXJmYWNlIHJvbGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQlJfSU5URVJGQUNFX1JPTEVfU0VSVkVSCTB4MDAwMAorI2RlZmluZSBCUl9JTlRFUkZBQ0VfUk9MRV9DTElFTlQJMHg4MDAwCisKKyNkZWZpbmUgQlJfREVTQ19QUklWX0NBUF9XRVAJCUJJVCgwKQorI2RlZmluZSBCUl9ERVNDX1BSSVZfQ0FQX1RLSVAJCUJJVCgxKQorI2RlZmluZSBCUl9ERVNDX1BSSVZfQ0FQX01JQ0hBRUwJQklUKDIpCisjZGVmaW5lIEJSX0RFU0NfUFJJVl9DQVBfQ0NYX0NQCQlCSVQoMykKKyNkZWZpbmUgQlJfREVTQ19QUklWX0NBUF9DQ1hfTUlDCUJJVCg0KQorI2RlZmluZSBCUl9ERVNDX1BSSVZfQ0FQX0FFU0NDTVAJQklUKDUpCisKK3N0cnVjdCBib290cmVjX2Rlc2MgeworCV9fbGUxNiBtb2RlczsKKwlfX2xlMTYgZmxhZ3M7CisJX19sZTMyIHJ4X3N0YXJ0OworCV9fbGUzMiByeF9lbmQ7CisJdTggaGVhZHJvb207CisJdTggdGFpbHJvb207CisJdTggdHhfcXVldWVzOworCXU4IHR4X2RlcHRoOworCXU4IHByaXZhY3lfY2FwczsKKwl1OCByeF9rZXljYWNoZV9zaXplOworCXU4IHRpbWVfc2l6ZTsKKwl1OCBwYWRkaW5nOworCXU4IHJhdGVzWzE2XTsKKwl1OCBwYWRkaW5nMls0XTsKKwlfX2xlMTYgcnhfbXR1OworfSBfX3BhY2tlZDsKKworI2RlZmluZSBGV19GTUFDIDB4NDY0ZDQxNDMKKyNkZWZpbmUgRldfTE04NiAweDRjNGQzODM2CisjZGVmaW5lIEZXX0xNODcgMHg0YzRkMzgzNworI2RlZmluZSBGV19MTTIwIDB4NGM0ZDMyMzAKKworc3RydWN0IGJvb3RyZWNfY29tcF9pZCB7CisJX19sZTMyIGZ3X3ZhcmlhbnQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYm9vdHJlY19jb21wX3ZlciB7CisJY2hhciBmd192ZXJzaW9uWzI0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBib290cmVjX2VuZCB7CisJX19sZTE2IGNyYzsKKwl1OCBwYWRkaW5nWzJdOworCXU4IG1kNVsxNl07Cit9IF9fcGFja2VkOwogCiAvKiBwcm92aWRlIDE2IGJ5dGVzIGZvciB0aGUgdHJhbnNwb3J0IGJhY2stZW5kICovCiAjZGVmaW5lIFA1NF9UWF9JTkZPX0RBVEFfU0laRQkJMTYKQEAgLTU1LDM0ICs5MSwzMCBAQAogc3RydWN0IHA1NF90eF9pbmZvIHsKIAl1MzIgc3RhcnRfYWRkcjsKIAl1MzIgZW5kX2FkZHI7Ci0Jdm9pZCAqZGF0YVtQNTRfVFhfSU5GT19EQVRBX1NJWkUgLyBzaXplb2Yodm9pZCAqKV07CisJdW5pb24geworCQl2b2lkICpkYXRhW1A1NF9UWF9JTkZPX0RBVEFfU0laRSAvIHNpemVvZih2b2lkICopXTsKKwkJc3RydWN0IHsKKwkJCXUzMiBleHRyYV9sZW47CisJCX07CisJfTsKIH07CiAKICNkZWZpbmUgUDU0X01BWF9DVFJMX0ZSQU1FX0xFTgkJMHgxMDAwCiAKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0NPTlRST0wJCUJJVCgxNSkKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQJKEJJVCgxNSkgKyBCSVQoMCkpCi0KLXN0cnVjdCBwNTRfaGRyIHsKLQlfX2xlMTYgZmxhZ3M7Ci0JX19sZTE2IGxlbjsKLQlfX2xlMzIgcmVxX2lkOwotCV9fbGUxNiB0eXBlOwkvKiBlbnVtIHA1NF9jb250cm9sX2ZyYW1lX3R5cGVzICovCi0JdTggcnRzX3RyaWVzOwotCXU4IHRyaWVzOwotCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBGUkVFX0FGVEVSX1RYKHNrYikJCQkJCQlcCi0JKCgoKHN0cnVjdCBwNTRfaGRyICopICgoc3RydWN0IHNrX2J1ZmYgKikgc2tiKS0+ZGF0YSktPgkJXAotCWZsYWdzKSA9PSBjcHVfdG9fbGUxNihQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCkpCisjZGVmaW5lIFA1NF9TRVRfUVVFVUUocXVldWUsIGFpX2ZzLCBjd19taW4sIGN3X21heCwgX3R4b3ApCVwKK2RvIHsJCQkJCQkJCVwKKwlxdWV1ZS5haWZzID0gY3B1X3RvX2xlMTYoYWlfZnMpOwkJCVwKKwlxdWV1ZS5jd21pbiA9IGNwdV90b19sZTE2KGN3X21pbik7CQkJXAorCXF1ZXVlLmN3bWF4ID0gY3B1X3RvX2xlMTYoY3dfbWF4KTsJCQlcCisJcXVldWUudHhvcCA9IGNwdV90b19sZTE2KF90eG9wKTsJCQlcCit9IHdoaWxlICgwKQogCiBzdHJ1Y3QgcDU0X2VkY2ZfcXVldWVfcGFyYW0gewogCV9fbGUxNiBhaWZzOwogCV9fbGUxNiBjd21pbjsKIAlfX2xlMTYgY3dtYXg7CiAJX19sZTE2IHR4b3A7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBwNTRfcnNzaV9saW5lYXJfYXBwcm94aW1hdGlvbiB7CiAJczE2IG11bDsKQEAgLTEwMSwxMyArMTMzLDYgQEAKIAogI2RlZmluZSBFRVBST01fUkVBREJBQ0tfTEVOIDB4M2ZjCiAKLSNkZWZpbmUgSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUiAweDIwMDAwCi0KLSNkZWZpbmUgRldfRk1BQyAweDQ2NGQ0MTQzCi0jZGVmaW5lIEZXX0xNODYgMHg0YzRkMzgzNgotI2RlZmluZSBGV19MTTg3IDB4NGM0ZDM4MzcKLSNkZWZpbmUgRldfTE0yMCAweDRjNGQzMjMwCi0KIGVudW0gZndfc3RhdGUgewogCUZXX1NUQVRFX09GRiwKIAlGV19TVEFURV9CT09USU5HLApAQCAtMTM4LDYgKzE2Myw3IEBACiAJdm9pZCAoKnR4KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogCWludCAoKm9wZW4pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldik7CiAJdm9pZCAoKnN0b3ApKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldik7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9wZW5kaW5nOwogCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWU7CiAJc3RydWN0IG11dGV4IGNvbmZfbXV0ZXg7CiAKQEAgLTE1Niw2ICsxODIsNyBAQAogCiAJLyogKGUpRENGIC8gUU9TIHN0YXRlICovCiAJYm9vbCB1c2Vfc2hvcnRfc2xvdDsKKwlzcGlubG9ja190IHR4X3N0YXRzX2xvY2s7CiAJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0c1s4XTsKIAlzdHJ1Y3QgcDU0X2VkY2ZfcXVldWVfcGFyYW0gcW9zX3BhcmFtc1s4XTsKIApAQCAtMTcxLDYgKzE5OCw3IEBACiAJc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgKmN1cnZlX2RhdGE7CiAJc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgKm91dHB1dF9saW1pdDsKIAlzdHJ1Y3QgcDU0X3Jzc2lfbGluZWFyX2FwcHJveGltYXRpb24gcnNzaWNhbF9kYltJRUVFODAyMTFfTlVNX0JBTkRTXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kX3RhYmxlW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCiAJLyogQkJQL01BQyBzdGF0ZSAqLwogCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKQEAgLTE4MSw3ICsyMDksOSBAQAogCXUzMiB0c2ZfbG93MzIsIHRzZl9oaWdoMzI7CiAJdTMyIGJhc2ljX3JhdGVfbWFzazsKIAl1MTYgYWlkOwotCXN0cnVjdCBza19idWZmICpjYWNoZWRfYmVhY29uOworCWJvb2wgcG93ZXJzYXZlX292ZXJyaWRlOworCV9fbGUzMiBiZWFjb25fcmVxX2lkOworCXN0cnVjdCBjb21wbGV0aW9uIGJlYWNvbl9jb21wOwogCiAJLyogY3J5cHRvZ3JhcGhpYyBlbmdpbmUgaW5mb3JtYXRpb24gKi8KIAl1OCBwcml2YWN5X2NhcHM7CkBAIC0yMDIsMTUgKzIzMiwyMCBAQAogCS8qIGVlcHJvbSBoYW5kbGluZyAqLwogCXZvaWQgKmVlcHJvbTsKIAlzdHJ1Y3QgY29tcGxldGlvbiBlZXByb21fY29tcDsKKwlzdHJ1Y3QgbXV0ZXggZWVwcm9tX211dGV4OwogfTsKIAorLyogaW50ZXJmYWNlcyBmb3IgdGhlIGRyaXZlcnMgKi8KIGludCBwNTRfcngoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgcDU0X2ZyZWVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgcDU0X3BhcnNlX2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyk7CiBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbik7CiBpbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldik7CisKIHN0cnVjdCBpZWVlODAyMTFfaHcgKnA1NF9pbml0X2NvbW1vbihzaXplX3QgcHJpdl9kYXRhX2xlbik7CiBpbnQgcDU0X3JlZ2lzdGVyX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBkZXYpOwogdm9pZCBwNTRfZnJlZV9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTsKIAordm9pZCBwNTRfdW5yZWdpc3Rlcl9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTsKKwogI2VuZGlmIC8qIFA1NF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyY2ExMjIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY4OCArMCwwIEBACi0vKgotICogQ29tbW9uIGNvZGUgZm9yIG1hYzgwMjExIFByaXNtNTQgZHJpdmVycwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KLSAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgotICoKLSAqIEJhc2VkIG9uOgotICogLSB0aGUgaXNsc20gKHNvZnRtYWMgcHJpc201NCkgZHJpdmVyLCB3aGljaCBpczoKLSAqICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4KLSAqIC0gc3RsYzQ1eHggZHJpdmVyCi0gKiAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLQotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2lmZGVmIENPTkZJR19QNTRfTEVEUwotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNlbmRpZiAvKiBDT05GSUdfUDU0X0xFRFMgKi8KLQotI2luY2x1ZGUgInA1NC5oIgotI2luY2x1ZGUgInA1NGNvbW1vbi5oIgotCi1zdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdDsKLW1vZHVsZV9wYXJhbV9uYW1lZChub2h3Y3J5cHQsIG1vZHBhcmFtX25vaHdjcnlwdCwgYm9vbCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbi4iKTsKLU1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2Z0bWFjIFByaXNtNTQgY29tbW9uIGNvZGUiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BTElBUygicHJpc201NGNvbW1vbiIpOwotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHA1NF9iZ3JhdGVzW10gPSB7Ci0JeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAwLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAotCXsgLmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gMSwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKLQl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDIsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCi0JeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gMywgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKLQl7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDQsIH0sCi0JeyAuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSA1LCB9LAotCXsgLmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDYsIH0sCi0JeyAuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gNywgfSwKLQl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSA4LCB9LAotCXsgLmJpdHJhdGUgPSAzNjAsIC5od192YWx1ZSA9IDksIH0sCi0JeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gMTAsIH0sCi0JeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTEsIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHA1NF9iZ2NoYW5uZWxzW10gPSB7Ci0JeyAuY2VudGVyX2ZyZXEgPSAyNDEyLCAuaHdfdmFsdWUgPSAxLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQxNywgLmh3X3ZhbHVlID0gMiwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MjIsIC5od192YWx1ZSA9IDMsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDI3LCAuaHdfdmFsdWUgPSA0LCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQzMiwgLmh3X3ZhbHVlID0gNSwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MzcsIC5od192YWx1ZSA9IDYsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDQyLCAuaHdfdmFsdWUgPSA3LCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ0NywgLmh3X3ZhbHVlID0gOCwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NTIsIC5od192YWx1ZSA9IDksIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDU3LCAuaHdfdmFsdWUgPSAxMCwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NjIsIC5od192YWx1ZSA9IDExLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ2NywgLmh3X3ZhbHVlID0gMTIsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDcyLCAuaHdfdmFsdWUgPSAxMywgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0ODQsIC5od192YWx1ZSA9IDE0LCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZF8yR0h6ID0gewotCS5jaGFubmVscyA9IHA1NF9iZ2NoYW5uZWxzLAotCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShwNTRfYmdjaGFubmVscyksCi0JLmJpdHJhdGVzID0gcDU0X2JncmF0ZXMsCi0JLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHA1NF9iZ3JhdGVzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcDU0X2FyYXRlc1tdID0gewotCXsgLmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gNCwgfSwKLQl7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDUsIH0sCi0JeyAuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlID0gNiwgfSwKLQl7IC5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSA3LCB9LAotCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDgsIH0sCi0JeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gOSwgfSwKLQl7IC5iaXRyYXRlID0gNDgwLCAuaHdfdmFsdWUgPSAxMCwgfSwKLQl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAxMSwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgcDU0X2FjaGFubmVsc1tdID0gewotCXsgLmNlbnRlcl9mcmVxID0gNDkyMCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNDk0MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNDk2MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNDk4MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTA0MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTA2MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTA4MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTE3MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTE4MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTE5MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTIwMCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTIxMCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTIyMCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTIzMCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTI0MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTI2MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTI4MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTMwMCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTMyMCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTUwMCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTUyMCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTU0MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTU2MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTU4MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTYwMCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTYyMCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTY0MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTY2MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTY4MCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTcwMCB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTc0NSB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTc2NSB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTc4NSB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTgwNSB9LAotCXsgLmNlbnRlcl9mcmVxID0gNTgyNSB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZF81R0h6ID0gewotCS5jaGFubmVscyA9IHA1NF9hY2hhbm5lbHMsCi0JLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHA1NF9hY2hhbm5lbHMpLAotCS5iaXRyYXRlcyA9IHA1NF9hcmF0ZXMsCi0JLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHA1NF9hcmF0ZXMpLAotfTsKLQotaW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IGJvb3RyZWNfZXhwX2lmICpleHBfaWY7Ci0Jc3RydWN0IGJvb3RyZWMgKmJvb3RyZWM7Ci0JdTMyICpkYXRhID0gKHUzMiAqKWZ3LT5kYXRhOwotCXUzMiAqZW5kX2RhdGEgPSAodTMyICopZnctPmRhdGEgKyAoZnctPnNpemUgPj4gMik7Ci0JdTggKmZ3X3ZlcnNpb24gPSBOVUxMOwotCXNpemVfdCBsZW47Ci0JaW50IGk7Ci0JaW50IG1heGxlbjsKLQotCWlmIChwcml2LT5yeF9zdGFydCkKLQkJcmV0dXJuIDA7Ci0KLQl3aGlsZSAoZGF0YSA8IGVuZF9kYXRhICYmICpkYXRhKQotCQlkYXRhKys7Ci0KLQl3aGlsZSAoZGF0YSA8IGVuZF9kYXRhICYmICEqZGF0YSkKLQkJZGF0YSsrOwotCi0JYm9vdHJlYyA9IChzdHJ1Y3QgYm9vdHJlYyAqKSBkYXRhOwotCi0Jd2hpbGUgKGJvb3RyZWMtPmRhdGEgPD0gZW5kX2RhdGEgJiYKLQkgICAgICAgKGJvb3RyZWMtPmRhdGEgKyAobGVuID0gbGUzMl90b19jcHUoYm9vdHJlYy0+bGVuKSkpIDw9IGVuZF9kYXRhKSB7Ci0JCXUzMiBjb2RlID0gbGUzMl90b19jcHUoYm9vdHJlYy0+Y29kZSk7Ci0JCXN3aXRjaCAoY29kZSkgewotCQljYXNlIEJSX0NPREVfQ09NUE9ORU5UX0lEOgotCQkJcHJpdi0+ZndfaW50ZXJmYWNlID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikKLQkJCQkJICAgICBib290cmVjLT5kYXRhKTsKLQkJCXN3aXRjaCAocHJpdi0+ZndfaW50ZXJmYWNlKSB7Ci0JCQljYXNlIEZXX0xNODY6Ci0JCQljYXNlIEZXX0xNMjA6Ci0JCQljYXNlIEZXX0xNODc6IHsKLQkJCQljaGFyICppZnR5cGUgPSAoY2hhciAqKWJvb3RyZWMtPmRhdGE7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHA1NCBkZXRlY3RlZCBhIExNJWMlYyAiCi0JCQkJCQkgImZpcm13YXJlXG4iLAotCQkJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLAotCQkJCQlpZnR5cGVbMl0sIGlmdHlwZVszXSk7Ci0JCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSBGV19GTUFDOgotCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bnN1cHBvcnRlZCBmaXJtd2FyZVxuIiwKLQkJCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7Ci0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBCUl9DT0RFX0NPTVBPTkVOVF9WRVJTSU9OOgotCQkJLyogMjQgYnl0ZXMgc2hvdWxkIGJlIGVub3VnaCBmb3IgYWxsIGZpcm13YXJlcyAqLwotCQkJaWYgKHN0cm5sZW4oKHVuc2lnbmVkIGNoYXIqKWJvb3RyZWMtPmRhdGEsIDI0KSA8IDI0KQotCQkJCWZ3X3ZlcnNpb24gPSAodW5zaWduZWQgY2hhciopYm9vdHJlYy0+ZGF0YTsKLQkJCWJyZWFrOwotCQljYXNlIEJSX0NPREVfREVTQ1I6IHsKLQkJCXN0cnVjdCBib290cmVjX2Rlc2MgKmRlc2MgPQotCQkJCShzdHJ1Y3QgYm9vdHJlY19kZXNjICopYm9vdHJlYy0+ZGF0YTsKLQkJCXByaXYtPnJ4X3N0YXJ0ID0gbGUzMl90b19jcHUoZGVzYy0+cnhfc3RhcnQpOwotCQkJLyogRklYTUUgYWRkIHNhbml0eSBjaGVja2luZyAqLwotCQkJcHJpdi0+cnhfZW5kID0gbGUzMl90b19jcHUoZGVzYy0+cnhfZW5kKSAtIDB4MzUwMDsKLQkJCXByaXYtPmhlYWRyb29tID0gZGVzYy0+aGVhZHJvb207Ci0JCQlwcml2LT50YWlscm9vbSA9IGRlc2MtPnRhaWxyb29tOwotCQkJcHJpdi0+cHJpdmFjeV9jYXBzID0gZGVzYy0+cHJpdmFjeV9jYXBzOwotCQkJcHJpdi0+cnhfa2V5Y2FjaGVfc2l6ZSA9IGRlc2MtPnJ4X2tleWNhY2hlX3NpemU7Ci0JCQlpZiAobGUzMl90b19jcHUoYm9vdHJlYy0+bGVuKSA9PSAxMSkKLQkJCQlwcml2LT5yeF9tdHUgPSBsZTE2X3RvX2NwdShkZXNjLT5yeF9tdHUpOwotCQkJZWxzZQotCQkJCXByaXYtPnJ4X210dSA9IChzaXplX3QpCi0JCQkJCTB4NjIwIC0gcHJpdi0+dHhfaGRyX2xlbjsKLQkJCW1heGxlbiA9IHByaXYtPnR4X2hkcl9sZW4gKyAvKiBVU0IgZGV2aWNlcyAqLwotCQkJCSBzaXplb2Yoc3RydWN0IHA1NF9yeF9kYXRhKSArCi0JCQkJIDQgKyAvKiByeCBhbGlnbm1lbnQgKi8KLQkJCQkgSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRDsKLQkJCWlmIChwcml2LT5yeF9tdHUgPiBtYXhsZW4gJiYgUEFHRV9TSVpFID09IDQwOTYpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJwNTQ6IHJ4X210dSByZWR1Y2VkIGZyb20gJWQgIgotCQkJCQkgICAgICAgICAidG8gJWRcbiIsIHByaXYtPnJ4X210dSwKLQkJCQkJCSBtYXhsZW4pOwotCQkJCXByaXYtPnJ4X210dSA9IG1heGxlbjsKLQkJCX0KLQkJCWJyZWFrOwotCQkJfQotCQljYXNlIEJSX0NPREVfRVhQT1NFRF9JRjoKLQkJCWV4cF9pZiA9IChzdHJ1Y3QgYm9vdHJlY19leHBfaWYgKikgYm9vdHJlYy0+ZGF0YTsKLQkJCWZvciAoaSA9IDA7IGkgPCAobGVuICogc2l6ZW9mKCpleHBfaWYpIC8gNCk7IGkrKykKLQkJCQlpZiAoZXhwX2lmW2ldLmlmX2lkID09IGNwdV90b19sZTE2KDB4MWEpKQotCQkJCQlwcml2LT5md192YXIgPSBsZTE2X3RvX2NwdShleHBfaWZbaV0udmFyaWFudCk7Ci0JCQlicmVhazsKLQkJY2FzZSBCUl9DT0RFX0RFUEVOREVOVF9JRjoKLQkJCWJyZWFrOwotCQljYXNlIEJSX0NPREVfRU5EX09GX0JSQToKLQkJY2FzZSBMRUdBQ1lfQlJfQ09ERV9FTkRfT0ZfQlJBOgotCQkJZW5kX2RhdGEgPSBOVUxMOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlib290cmVjID0gKHN0cnVjdCBib290cmVjICopJmJvb3RyZWMtPmRhdGFbbGVuXTsKLQl9Ci0KLQlpZiAoZndfdmVyc2lvbikKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZXIHJldiAlcyAtIFNvZnRtYWMgcHJvdG9jb2wgJXguJXhcbiIsCi0JCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBmd192ZXJzaW9uLAotCQkJcHJpdi0+ZndfdmFyID4+IDgsIHByaXYtPmZ3X3ZhciAmIDB4ZmYpOwotCi0JaWYgKHByaXYtPmZ3X3ZhciA8IDB4NTAwKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogeW91IGFyZSB1c2luZyBhbiBvYnNvbGV0ZSBmaXJtd2FyZS4gIgotCQkgICAgICAgInZpc2l0IGh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvcDU0ICIKLQkJICAgICAgICJhbmQgZ3JhYiBvbmUgZm9yIFwia2VybmVsID49IDIuNi4yOFwiIVxuIiwKLQkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOwotCi0JaWYgKHByaXYtPmZ3X3ZhciA+PSAweDMwMCkgewotCQkvKiBGaXJtd2FyZSBzdXBwb3J0cyBRb1MsIHVzZSBpdCEgKi8KLQkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX1ZPXS5saW1pdCA9IDM7Ci0JCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19WSV0ubGltaXQgPSA0OwotCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfQkVdLmxpbWl0ID0gMzsKLQkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX0JLXS5saW1pdCA9IDI7Ci0JCWRldi0+cXVldWVzID0gUDU0X1FVRVVFX0FDX05VTTsKLQl9Ci0KLQlpZiAoIW1vZHBhcmFtX25vaHdjcnlwdCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogY3J5cHRvZ3JhcGhpYyBhY2NlbGVyYXRvciAiCi0JCQkJICJXRVA6JXMsIFRLSVA6JXMsIENDTVA6JXNcbiIsCi0JCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLAotCQkJKHByaXYtPnByaXZhY3lfY2FwcyAmIEJSX0RFU0NfUFJJVl9DQVBfV0VQKSA/ICJZRVMiIDoKLQkJCSJubyIsIChwcml2LT5wcml2YWN5X2NhcHMgJiAoQlJfREVTQ19QUklWX0NBUF9US0lQIHwKLQkJCSBCUl9ERVNDX1BSSVZfQ0FQX01JQ0hBRUwpKSA/ICJZRVMiIDogIm5vIiwKLQkJCShwcml2LT5wcml2YWN5X2NhcHMgJiBCUl9ERVNDX1BSSVZfQ0FQX0FFU0NDTVApID8KLQkJCSJZRVMiIDogIm5vIik7Ci0KLQkJaWYgKHByaXYtPnJ4X2tleWNhY2hlX3NpemUpIHsKLQkJCS8qCi0JCQkgKiBOT1RFOgotCQkJICoKLQkJCSAqIFRoZSBmaXJtd2FyZSBwcm92aWRlcyBhdCBtb3N0IDI1NSAoMCAtIDI1NCkgc2xvdHMKLQkJCSAqIGZvciBrZXlzIHdoaWNoIGFyZSB0aGVuIHVzZWQgdG8gb2ZmbG9hZCBkZWNyeXB0aW9uLgotCQkJICogQXMgYSByZXN1bHQgdGhlIDI1NSBlbnRyeSAoYWthIDB4ZmYpIGNhbiBiZSB1c2VkCi0JCQkgKiBzYWZlbHkgYnkgdGhlIGRyaXZlciB0byBtYXJrIGtleXMgdGhhdCBkaWRuJ3QgZml0Ci0JCQkgKiBpbnRvIHRoZSBmdWxsIGNhY2hlLiBUaGlzIHRyaWNrIHNhdmVzIHVzIGZyb20KLQkJCSAqIGtlZXBpbmcgYSBleHRyYSBsaXN0IGZvciB1cGxvYWRlZCBrZXlzLgotCQkJICovCi0KLQkJCXByaXYtPnVzZWRfcnhrZXlzID0ga3phbGxvYyhCSVRTX1RPX0xPTkdTKAotCQkJCXByaXYtPnJ4X2tleWNhY2hlX3NpemUpLCBHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFwcml2LT51c2VkX3J4a2V5cykKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2Zpcm13YXJlKTsKLQotc3RhdGljIGludCBwNTRfY29udmVydF9yZXYwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCSAgICBzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSAqZHN0OwotCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MCAqc3JjOwotCXNpemVfdCBjZF9sZW4gPSBzaXplb2YoKmN1cnZlX2RhdGEpICsKLQkJKGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbCpzaXplb2YoKmRzdCkgKyAyKSAqCi0JCSBjdXJ2ZV9kYXRhLT5jaGFubmVsczsKLQl1bnNpZ25lZCBpbnQgaSwgajsKLQl2b2lkICpzb3VyY2UsICp0YXJnZXQ7Ci0KLQlwcml2LT5jdXJ2ZV9kYXRhID0ga21hbGxvYyhzaXplb2YoKnByaXYtPmN1cnZlX2RhdGEpICsgY2RfbGVuLAotCQkJCSAgIEdGUF9LRVJORUwpOwotCWlmICghcHJpdi0+Y3VydmVfZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzID0gY3VydmVfZGF0YS0+Y2hhbm5lbHM7Ci0JcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZSA9IHNpemVvZihfX2xlMTYpICsKLQkJc2l6ZW9mKCpkc3QpICogY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsOwotCXByaXYtPmN1cnZlX2RhdGEtPm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSwgZGF0YSk7Ci0JcHJpdi0+Y3VydmVfZGF0YS0+bGVuID0gY2RfbGVuOwotCW1lbWNweShwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhLCBjdXJ2ZV9kYXRhLCBzaXplb2YoKmN1cnZlX2RhdGEpKTsKLQlzb3VyY2UgPSBjdXJ2ZV9kYXRhLT5kYXRhOwotCXRhcmdldCA9ICgoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICopIHByaXYtPmN1cnZlX2RhdGEtPmRhdGEpLT5kYXRhOwotCWZvciAoaSA9IDA7IGkgPCBjdXJ2ZV9kYXRhLT5jaGFubmVsczsgaSsrKSB7Ci0JCV9fbGUxNiAqZnJlcSA9IHNvdXJjZTsKLQkJc291cmNlICs9IHNpemVvZihfX2xlMTYpOwotCQkqKChfX2xlMTYgKil0YXJnZXQpID0gKmZyZXE7Ci0JCXRhcmdldCArPSBzaXplb2YoX19sZTE2KTsKLQkJZm9yIChqID0gMDsgaiA8IGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsgaisrKSB7Ci0JCQlkc3QgPSB0YXJnZXQ7Ci0JCQlzcmMgPSBzb3VyY2U7Ci0KLQkJCWRzdC0+cmZfcG93ZXIgPSBzcmMtPnJmX3Bvd2VyOwotCQkJZHN0LT5wYV9kZXRlY3RvciA9IHNyYy0+cGFfZGV0ZWN0b3I7Ci0JCQlkc3QtPmRhdGFfNjRxYW0gPSBzcmMtPnBjdjsKLQkJCS8qICJpbnZlbnQiIHRoZSBwb2ludHMgZm9yIHRoZSBvdGhlciBtb2R1bGF0aW9ucyAqLwotI2RlZmluZSBTVUIoeCx5KSAodTgpKCh4KSAtICh5KSkgPiAoeCkgPyAwIDogKHgpIC0gKHkpCi0JCQlkc3QtPmRhdGFfMTZxYW0gPSBTVUIoc3JjLT5wY3YsIDEyKTsKLQkJCWRzdC0+ZGF0YV9xcHNrID0gU1VCKGRzdC0+ZGF0YV8xNnFhbSwgMTIpOwotCQkJZHN0LT5kYXRhX2Jwc2sgPSBTVUIoZHN0LT5kYXRhX3Fwc2ssIDEyKTsKLQkJCWRzdC0+ZGF0YV9iYXJrZXIgPSBTVUIoZHN0LT5kYXRhX2Jwc2ssIDE0KTsKLSN1bmRlZiBTVUIKLQkJCXRhcmdldCArPSBzaXplb2YoKmRzdCk7Ci0JCQlzb3VyY2UgKz0gc2l6ZW9mKCpzcmMpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X2NvbnZlcnRfcmV2MShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkgICAgc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUgKmRzdDsKLQlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjEgKnNyYzsKLQlzaXplX3QgY2RfbGVuID0gc2l6ZW9mKCpjdXJ2ZV9kYXRhKSArCi0JCShjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWwqc2l6ZW9mKCpkc3QpICsgMikgKgotCQkgY3VydmVfZGF0YS0+Y2hhbm5lbHM7Ci0JdW5zaWduZWQgaW50IGksIGo7Ci0Jdm9pZCAqc291cmNlLCAqdGFyZ2V0OwotCi0JcHJpdi0+Y3VydmVfZGF0YSA9IGt6YWxsb2MoY2RfbGVuICsgc2l6ZW9mKCpwcml2LT5jdXJ2ZV9kYXRhKSwKLQkJCQkgICBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYtPmN1cnZlX2RhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcyA9IGN1cnZlX2RhdGEtPmNoYW5uZWxzOwotCXByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemUgPSBzaXplb2YoX19sZTE2KSArCi0JCXNpemVvZigqZHN0KSAqIGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsKLQlwcml2LT5jdXJ2ZV9kYXRhLT5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEsIGRhdGEpOwotCXByaXYtPmN1cnZlX2RhdGEtPmxlbiA9IGNkX2xlbjsKLQltZW1jcHkocHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7Ci0Jc291cmNlID0gY3VydmVfZGF0YS0+ZGF0YTsKLQl0YXJnZXQgPSAoKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhKS0+ZGF0YTsKLQlmb3IgKGkgPSAwOyBpIDwgY3VydmVfZGF0YS0+Y2hhbm5lbHM7IGkrKykgewotCQlfX2xlMTYgKmZyZXEgPSBzb3VyY2U7Ci0JCXNvdXJjZSArPSBzaXplb2YoX19sZTE2KTsKLQkJKigoX19sZTE2ICopdGFyZ2V0KSA9ICpmcmVxOwotCQl0YXJnZXQgKz0gc2l6ZW9mKF9fbGUxNik7Ci0JCWZvciAoaiA9IDA7IGogPCBjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWw7IGorKykgewotCQkJbWVtY3B5KHRhcmdldCwgc291cmNlLCBzaXplb2YoKnNyYykpOwotCi0JCQl0YXJnZXQgKz0gc2l6ZW9mKCpkc3QpOwotCQkJc291cmNlICs9IHNpemVvZigqc3JjKTsKLQkJfQotCQlzb3VyY2UrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKnA1NF9yZl9jaGlwc1tdID0geyAiTlVMTCIsICJEdWV0dGUzIiwgIkR1ZXR0ZTIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZyaXNiZWUiLCAiWGJvdyIsICJMb25nYm93IiwgIk5VTEwiLCAiTlVMTCIgfTsKLXN0YXRpYyBpbnQgcDU0X2luaXRfeGJvd19zeW50aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpOwotCi1zdGF0aWMgdm9pZCBwNTRfcGFyc2VfcnNzaWNhbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmRhdGEsIGludCBsZW4sCi0JCQkgICAgIHUxNiB0eXBlKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCWludCBvZmZzZXQgPSAodHlwZSA9PSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9FWFRFTkRFRCkgPyAyIDogMDsKLQlpbnQgZW50cnlfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5KSArIG9mZnNldDsKLQlpbnQgbnVtX2VudHJpZXMgPSAodHlwZSA9PSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTikgPyAxIDogMjsKLQlpbnQgaTsKLQotCWlmIChsZW4gIT0gKGVudHJ5X3NpemUgKiBudW1fZW50cmllcykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biByc3NpIGNhbGlicmF0aW9uIGRhdGEgcGFja2luZyAiCi0JCQkJICIgdHlwZTooJXgpIGxlbjolZC5cbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCB0eXBlLCBsZW4pOwotCi0JCXByaW50X2hleF9kdW1wX2J5dGVzKCJyc3NpY2FsOiIsIERVTVBfUFJFRklYX05PTkUsCi0JCQkJICAgICBkYXRhLCBsZW4pOwotCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSByZXBvcnQgdGhpcyBpc3N1ZS5cbiIsCi0JCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7Ci0JCXN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgKmNhbCA9IGRhdGEgKwotCQkJCQkJIChvZmZzZXQgKyBpICogZW50cnlfc2l6ZSk7Ci0JCXByaXYtPnJzc2ljYWxfZGJbaV0ubXVsID0gKHMxNikgbGUxNl90b19jcHUoY2FsLT5tdWwpOwotCQlwcml2LT5yc3NpY2FsX2RiW2ldLmFkZCA9IChzMTYpIGxlMTZfdG9fY3B1KGNhbC0+YWRkKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHA1NF9wYXJzZV9kZWZhdWx0X2NvdW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pCi17Ci0Jc3RydWN0IHBkYV9jb3VudHJ5ICpjb3VudHJ5OwotCi0JaWYgKGxlbiAhPSBzaXplb2YoKmNvdW50cnkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZvdW5kIHBvc3NpYmxlIGludmFsaWQgZGVmYXVsdCBjb3VudHJ5ICIKLQkJCQkiZWVwcm9tIGVudHJ5LiAoZW50cnkgc2l6ZTogJWQpXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbGVuKTsKLQotCQlwcmludF9oZXhfZHVtcF9ieXRlcygiY291bnRyeToiLCBEVU1QX1BSRUZJWF9OT05FLAotCQkJCSAgICAgZGF0YSwgbGVuKTsKLQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwbGVhc2UgcmVwb3J0IHRoaXMgaXNzdWUuXG4iLAotCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7Ci0JCXJldHVybjsKLQl9Ci0KLQljb3VudHJ5ID0gKHN0cnVjdCBwZGFfY291bnRyeSAqKSBkYXRhOwotCWlmIChjb3VudHJ5LT5mbGFncyA9PSBQRFJfQ09VTlRSWV9DRVJUX0NPREVfUFNFVURPKQotCQlyZWd1bGF0b3J5X2hpbnQoZGV2LT53aXBoeSwgY291bnRyeS0+YWxwaGEyKTsKLQllbHNlIHsKLQkJLyogVE9ETzoKLQkJICogd3JpdGUgYSBzaGFyZWQvY29tbW9uIGZ1bmN0aW9uIHRoYXQgY29udmVydHMKLQkJICogIlJlZ3VsYXRvcnkgZG9tYWluIGNvZGVzIiAoODAyLjExLTIwMDcgMTQuOC4yLjIpCi0JCSAqIGludG8gSVNPL0lFQyAzMTY2LTEgYWxwaGEyIGZvciByZWd1bGF0b3J5X2hpbnQuCi0JCSAqLwotCX0KLX0KLQotc3RhdGljIGludCBwNTRfY29udmVydF9vdXRwdXRfbGltaXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgICAgIHU4ICpkYXRhLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCi0JaWYgKGxlbiA8IDIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGRhdGFbMF0gIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIG91dHB1dCBwb3dlciBkYiByZXZpc2lvbjoleFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIGRhdGFbMF0pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoMiArIGRhdGFbMV0gKiBzaXplb2Yoc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCkgPiBsZW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcHJpdi0+b3V0cHV0X2xpbWl0ID0ga21hbGxvYyhkYXRhWzFdICoKLQkJc2l6ZW9mKHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQpICsKLQkJc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghcHJpdi0+b3V0cHV0X2xpbWl0KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXByaXYtPm91dHB1dF9saW1pdC0+b2Zmc2V0ID0gMDsKLQlwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXMgPSBkYXRhWzFdOwotCXByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSA9Ci0JCXNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KTsKLQlwcml2LT5vdXRwdXRfbGltaXQtPmxlbiA9IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSAqCi0JCQkJICBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXMgKwotCQkJCSAgcHJpdi0+b3V0cHV0X2xpbWl0LT5vZmZzZXQ7Ci0KLQltZW1jcHkocHJpdi0+b3V0cHV0X2xpbWl0LT5kYXRhLCAmZGF0YVsyXSwKLQkgICAgICAgZGF0YVsxXSAqIHNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpwNTRfY29udmVydF9kYihzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICpzcmMsCi0JCQkJCSAgICAgICBzaXplX3QgdG90YWxfbGVuKQotewotCXN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpkc3Q7Ci0Jc2l6ZV90IHBheWxvYWRfbGVuLCBlbnRyaWVzLCBlbnRyeV9zaXplLCBvZmZzZXQ7Ci0KLQlwYXlsb2FkX2xlbiA9IGxlMTZfdG9fY3B1KHNyYy0+bGVuKTsKLQllbnRyaWVzID0gbGUxNl90b19jcHUoc3JjLT5lbnRyaWVzKTsKLQllbnRyeV9zaXplID0gbGUxNl90b19jcHUoc3JjLT5lbnRyeV9zaXplKTsKLQlvZmZzZXQgPSBsZTE2X3RvX2NwdShzcmMtPm9mZnNldCk7Ci0JaWYgKCgoZW50cmllcyAqIGVudHJ5X3NpemUgKyBvZmZzZXQpICE9IHBheWxvYWRfbGVuKSB8fAotCSAgICAgKHBheWxvYWRfbGVuICsgc2l6ZW9mKCpzcmMpICE9IHRvdGFsX2xlbikpCi0JCXJldHVybiBOVUxMOwotCi0JZHN0ID0ga21hbGxvYyhzaXplb2YoKmRzdCkgKyBwYXlsb2FkX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkc3QpCi0JCXJldHVybiBOVUxMOwotCi0JZHN0LT5lbnRyaWVzID0gZW50cmllczsKLQlkc3QtPmVudHJ5X3NpemUgPSBlbnRyeV9zaXplOwotCWRzdC0+b2Zmc2V0ID0gb2Zmc2V0OwotCWRzdC0+bGVuID0gcGF5bG9hZF9sZW47Ci0KLQltZW1jcHkoZHN0LT5kYXRhLCBzcmMtPmRhdGEsIHBheWxvYWRfbGVuKTsKLQlyZXR1cm4gZHN0OwotfQotCi1pbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgZWVwcm9tX3BkYV93cmFwICp3cmFwID0gTlVMTDsKLQlzdHJ1Y3QgcGRhX2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIGVudHJ5X2xlbjsKLQl2b2lkICp0bXA7Ci0JaW50IGVycjsKLQl1OCAqZW5kID0gKHU4ICopZWVwcm9tICsgbGVuOwotCXUxNiBzeW50aCA9IDA7Ci0KLQl3cmFwID0gKHN0cnVjdCBlZXByb21fcGRhX3dyYXAgKikgZWVwcm9tOwotCWVudHJ5ID0gKHZvaWQgKil3cmFwLT5kYXRhICsgbGUxNl90b19jcHUod3JhcC0+bGVuKTsKLQotCS8qIHZlcmlmeSB0aGF0IGF0IGxlYXN0IHRoZSBlbnRyeSBsZW5ndGgvY29kZSBmaXRzICovCi0Jd2hpbGUgKCh1OCAqKWVudHJ5IDw9IGVuZCAtIHNpemVvZigqZW50cnkpKSB7Ci0JCWVudHJ5X2xlbiA9IGxlMTZfdG9fY3B1KGVudHJ5LT5sZW4pOwotCQlkYXRhX2xlbiA9ICgoZW50cnlfbGVuIC0gMSkgPDwgMSk7Ci0KLQkJLyogYWJvcnQgaWYgZW50cnkgZXhjZWVkcyB3aG9sZSBzdHJ1Y3R1cmUgKi8KLQkJaWYgKCh1OCAqKWVudHJ5ICsgc2l6ZW9mKCplbnRyeSkgKyBkYXRhX2xlbiA+IGVuZCkKLQkJCWJyZWFrOwotCi0JCXN3aXRjaCAobGUxNl90b19jcHUoZW50cnktPmNvZGUpKSB7Ci0JCWNhc2UgUERSX01BQ19BRERSRVNTOgotCQkJaWYgKGRhdGFfbGVuICE9IEVUSF9BTEVOKQotCQkJCWJyZWFrOwotCQkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoZGV2LCBlbnRyeS0+ZGF0YSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX09VVFBVVF9QT1dFUl9MSU1JVFM6Ci0JCQlpZiAocHJpdi0+b3V0cHV0X2xpbWl0KQotCQkJCWJyZWFrOwotCQkJZXJyID0gcDU0X2NvbnZlcnRfb3V0cHV0X2xpbWl0cyhkZXYsIGVudHJ5LT5kYXRhLAotCQkJCQkJCWRhdGFfbGVuKTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBlcnI7Ci0JCQlicmVhazsKLQkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEE6IHsKLQkJCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSA9Ci0JCQkJKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKWVudHJ5LT5kYXRhOwotCQkJaWYgKGRhdGFfbGVuIDwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSkgewotCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJCXN3aXRjaCAoY3VydmVfZGF0YS0+Y2FsX21ldGhvZF9yZXYpIHsKLQkJCWNhc2UgMDoKLQkJCQllcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0JCQkJZXJyID0gcDU0X2NvbnZlcnRfcmV2MShkZXYsIGN1cnZlX2RhdGEpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIGN1cnZlIGRhdGEgIgotCQkJCQkJInJldmlzaW9uICVkXG4iLAotCQkJCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwKLQkJCQkJCWN1cnZlX2RhdGEtPmNhbF9tZXRob2RfcmV2KTsKLQkJCQllcnIgPSAtRU5PREVWOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKGVycikKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFBEUl9QUklTTV9aSUZfVFhfSVFfQ0FMSUJSQVRJT046Ci0JCQlwcml2LT5pcV9hdXRvY2FsID0ga21hbGxvYyhkYXRhX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIXByaXYtPmlxX2F1dG9jYWwpIHsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQltZW1jcHkocHJpdi0+aXFfYXV0b2NhbCwgZW50cnktPmRhdGEsIGRhdGFfbGVuKTsKLQkJCXByaXYtPmlxX2F1dG9jYWxfbGVuID0gZGF0YV9sZW4gLyBzaXplb2Yoc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5KTsKLQkJCWJyZWFrOwotCQljYXNlIFBEUl9ERUZBVUxUX0NPVU5UUlk6Ci0JCQlwNTRfcGFyc2VfZGVmYXVsdF9jb3VudHJ5KGRldiwgZW50cnktPmRhdGEsIGRhdGFfbGVuKTsKLQkJCWJyZWFrOwotCQljYXNlIFBEUl9JTlRFUkZBQ0VfTElTVDoKLQkJCXRtcCA9IGVudHJ5LT5kYXRhOwotCQkJd2hpbGUgKCh1OCAqKXRtcCA8IGVudHJ5LT5kYXRhICsgZGF0YV9sZW4pIHsKLQkJCQlzdHJ1Y3QgYm9vdHJlY19leHBfaWYgKmV4cF9pZiA9IHRtcDsKLQkJCQlpZiAobGUxNl90b19jcHUoZXhwX2lmLT5pZl9pZCkgPT0gMHhmKQotCQkJCQlzeW50aCA9IGxlMTZfdG9fY3B1KGV4cF9pZi0+dmFyaWFudCk7Ci0JCQkJdG1wICs9IHNpemVvZihzdHJ1Y3QgYm9vdHJlY19leHBfaWYpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUERSX0hBUkRXQVJFX1BMQVRGT1JNX0NPTVBPTkVOVF9JRDoKLQkJCWlmIChkYXRhX2xlbiA8IDIpCi0JCQkJYnJlYWs7Ci0JCQlwcml2LT52ZXJzaW9uID0gKih1OCAqKShlbnRyeS0+ZGF0YSArIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT046Ci0JCWNhc2UgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fRFVBTF9CQU5EOgotCQljYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0VYVEVOREVEOgotCQkJcDU0X3BhcnNlX3Jzc2ljYWwoZGV2LCBlbnRyeS0+ZGF0YSwgZGF0YV9sZW4sCi0JCQkJCSAgbGUxNl90b19jcHUoZW50cnktPmNvZGUpKTsKLQkJCWJyZWFrOwotCQljYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0NVU1RPTTogewotCQkJX19sZTE2ICpzcmMgPSAodm9pZCAqKSBlbnRyeS0+ZGF0YTsKLQkJCXMxNiAqZHN0ID0gKHZvaWQgKikgJnByaXYtPnJzc2ljYWxfZGI7Ci0JCQlpbnQgaTsKLQotCQkJaWYgKGRhdGFfbGVuICE9IHNpemVvZihwcml2LT5yc3NpY2FsX2RiKSkgewotCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQkJZ290byBlcnI7Ci0JCQl9Ci0JCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHByaXYtPnJzc2ljYWxfZGIpIC8KLQkJCQkJc2l6ZW9mKCpzcmMpOyBpKyspCi0JCQkJKihkc3QrKykgPSAoczE2KSBsZTE2X3RvX2NwdSgqKHNyYysrKSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX09VVFBVVF9QT1dFUl9MSU1JVFNfQ1VTVE9NOiB7Ci0JCQlzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICpwZGEgPSAodm9pZCAqKSBlbnRyeS0+ZGF0YTsKLQkJCWlmIChwcml2LT5vdXRwdXRfbGltaXQgfHwgZGF0YV9sZW4gPCBzaXplb2YoKnBkYSkpCi0JCQkJYnJlYWs7Ci0JCQlwcml2LT5vdXRwdXRfbGltaXQgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQV9DVVNUT006IHsKLQkJCXN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKnBkYSA9ICh2b2lkICopIGVudHJ5LT5kYXRhOwotCQkJaWYgKHByaXYtPmN1cnZlX2RhdGEgfHwgZGF0YV9sZW4gPCBzaXplb2YoKnBkYSkpCi0JCQkJYnJlYWs7Ci0JCQlwcml2LT5jdXJ2ZV9kYXRhID0gcDU0X2NvbnZlcnRfZGIocGRhLCBkYXRhX2xlbik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBQRFJfRU5EOgotCQkJLyogbWFrZSBpdCBvdmVycnVuICovCi0JCQllbnRyeV9sZW4gPSBsZW47Ci0JCQlicmVhazsKLQkJY2FzZSBQRFJfTUFOVUZBQ1RVUklOR19QQVJUX05VTUJFUjoKLQkJY2FzZSBQRFJfUERBX1ZFUlNJT046Ci0JCWNhc2UgUERSX05JQ19TRVJJQUxfTlVNQkVSOgotCQljYXNlIFBEUl9SRUdVTEFUT1JZX0RPTUFJTl9MSVNUOgotCQljYXNlIFBEUl9URU1QRVJBVFVSRV9UWVBFOgotCQljYXNlIFBEUl9QUklTTV9QQ0lfSURFTlRJRklFUjoKLQkJY2FzZSBQRFJfQ09VTlRSWV9JTkZPUk1BVElPTjoKLQkJY2FzZSBQRFJfT0VNX05BTUU6Ci0JCWNhc2UgUERSX1BST0RVQ1RfTkFNRToKLQkJY2FzZSBQRFJfVVRGOF9PRU1fTkFNRToKLQkJY2FzZSBQRFJfVVRGOF9QUk9EVUNUX05BTUU6Ci0JCWNhc2UgUERSX0NPVU5UUllfTElTVDoKLQkJY2FzZSBQRFJfQU5URU5OQV9HQUlOOgotCQljYXNlIFBEUl9QUklTTV9JTkRJR09fUEFfQ0FMSUJSQVRJT05fREFUQToKLQkJY2FzZSBQRFJfUkVHVUxBVE9SWV9QT1dFUl9MSU1JVFM6Ci0JCWNhc2UgUERSX1JBRElBVEVEX1RSQU5TTUlTU0lPTl9DT1JSRUNUSU9OOgotCQljYXNlIFBEUl9QUklTTV9UWF9JUV9DQUxJQlJBVElPTjoKLQkJY2FzZSBQRFJfQkFTRUJBTkRfUkVHSVNURVJTOgotCQljYXNlIFBEUl9QRVJfQ0hBTk5FTF9CQVNFQkFORF9SRUdJU1RFUlM6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB1bmtub3duIGVlcHJvbSBjb2RlIDogMHgleFxuIiwKLQkJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLAotCQkJCWxlMTZfdG9fY3B1KGVudHJ5LT5jb2RlKSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWVudHJ5ID0gKHZvaWQgKillbnRyeSArIChlbnRyeV9sZW4gKyAxKSoyOwotCX0KLQotCWlmICghc3ludGggfHwgIXByaXYtPmlxX2F1dG9jYWwgfHwgIXByaXYtPm91dHB1dF9saW1pdCB8fAotCSAgICAhcHJpdi0+Y3VydmVfZGF0YSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBub3QgYWxsIHJlcXVpcmVkIGVudHJpZXMgZm91bmQgaW4gZWVwcm9tIVxuIiwKLQkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlwcml2LT5yeGh3ID0gc3ludGggJiBQRFJfU1lOVEhfRlJPTlRFTkRfTUFTSzsKLQlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfWEJPVykKLQkJcDU0X2luaXRfeGJvd19zeW50aChkZXYpOwotCWlmICghKHN5bnRoICYgUERSX1NZTlRIXzI0X0dIWl9ESVNBQkxFRCkpCi0JCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmJhbmRfMkdIejsKLQlpZiAoIShzeW50aCAmIFBEUl9TWU5USF81X0dIWl9ESVNBQkxFRCkpCi0JCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gJmJhbmRfNUdIejsKLQlpZiAoKHN5bnRoICYgUERSX1NZTlRIX1JYX0RJVl9NQVNLKSA9PSBQRFJfU1lOVEhfUlhfRElWX1NVUFBPUlRFRCkKLQkJcHJpdi0+cnhfZGl2ZXJzaXR5X21hc2sgPSAzOwotCWlmICgoc3ludGggJiBQRFJfU1lOVEhfVFhfRElWX01BU0spID09IFBEUl9TWU5USF9UWF9ESVZfU1VQUE9SVEVEKQotCQlwcml2LT50eF9kaXZlcnNpdHlfbWFzayA9IDM7Ci0KLQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT53aXBoeS0+cGVybV9hZGRyKSkgewotCQl1OCBwZXJtX2FkZHJbRVRIX0FMRU5dOwotCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnZhbGlkIGh3YWRkciEgVXNpbmcgcmFuZG9tbHkgZ2VuZXJhdGVkIE1BQyBhZGRyXG4iLAotCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7Ci0JCXJhbmRvbV9ldGhlcl9hZGRyKHBlcm1fYWRkcik7Ci0JCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGRldiwgcGVybV9hZGRyKTsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogaHdhZGRyICVwTSwgTUFDOmlzbDM4JTAyeCBSRjolc1xuIiwKLQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwKLQkJZGV2LT53aXBoeS0+cGVybV9hZGRyLAotCQlwcml2LT52ZXJzaW9uLCBwNTRfcmZfY2hpcHNbcHJpdi0+cnhod10pOwotCi0JcmV0dXJuIDA7Ci0KLSAgZXJyOgotCWlmIChwcml2LT5pcV9hdXRvY2FsKSB7Ci0JCWtmcmVlKHByaXYtPmlxX2F1dG9jYWwpOwotCQlwcml2LT5pcV9hdXRvY2FsID0gTlVMTDsKLQl9Ci0KLQlpZiAocHJpdi0+b3V0cHV0X2xpbWl0KSB7Ci0JCWtmcmVlKHByaXYtPm91dHB1dF9saW1pdCk7Ci0JCXByaXYtPm91dHB1dF9saW1pdCA9IE5VTEw7Ci0JfQotCi0JaWYgKHByaXYtPmN1cnZlX2RhdGEpIHsKLQkJa2ZyZWUocHJpdi0+Y3VydmVfZGF0YSk7Ci0JCXByaXYtPmN1cnZlX2RhdGEgPSBOVUxMOwotCX0KLQotCXByaW50ayhLRVJOX0VSUiAiJXM6IGVlcHJvbSBwYXJzZSBmYWlsZWQhXG4iLAotCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2VlcHJvbSk7Ci0KLXN0YXRpYyBpbnQgcDU0X3Jzc2lfdG9fZGJtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IHJzc2kpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IGJhbmQgPSBkZXYtPmNvbmYuY2hhbm5lbC0+YmFuZDsKLQotCWlmIChwcml2LT5yeGh3ICE9IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKQotCQlyZXR1cm4gKChyc3NpICogcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpIC8gNjQgKwotCQkJIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0uYWRkKSAvIDQ7Ci0JZWxzZQotCQkvKgotCQkgKiBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IGZvcm11bGEKLQkJICovCi0JCXJldHVybiAoKHJzc2kgKiBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCkgLyA2NCArCi0JCQkgcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpIC8gNDsKLX0KLQotc3RhdGljIGludCBwNTRfcnhfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF9yeF9kYXRhICpoZHIgPSAoc3RydWN0IHA1NF9yeF9kYXRhICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXMgPSB7MH07Ci0JdTE2IGZyZXEgPSBsZTE2X3RvX2NwdShoZHItPmZyZXEpOwotCXNpemVfdCBoZWFkZXJfbGVuID0gc2l6ZW9mKCpoZHIpOwotCXUzMiB0c2YzMjsKLQl1OCByYXRlID0gaGRyLT5yYXRlICYgMHhmOwotCi0JLyoKLQkgKiBJZiB0aGUgZGV2aWNlIGlzIGluIGEgdW5zcGVjaWZpZWQgc3RhdGUgd2UgaGF2ZSB0bwotCSAqIGlnbm9yZSBhbGwgZGF0YSBmcmFtZXMuIEVsc2Ugd2UgY291bGQgZW5kIHVwIHdpdGggYQotCSAqIG5hc3R5IGNyYXNoLgotCSAqLwotCWlmICh1bmxpa2VseShwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIShoZHItPmZsYWdzICYgY3B1X3RvX2xlMTYoUDU0X0hEUl9GTEFHX0RBVEFfSU5fRkNTX0dPT0QpKSkgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoaGRyLT5kZWNyeXB0X3N0YXR1cyA9PSBQNTRfREVDUllQVF9PSykKLQkJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19ERUNSWVBURUQ7Ci0JaWYgKChoZHItPmRlY3J5cHRfc3RhdHVzID09IFA1NF9ERUNSWVBUX0ZBSUxfTUlDSEFFTCkgfHwKLQkgICAgKGhkci0+ZGVjcnlwdF9zdGF0dXMgPT0gUDU0X0RFQ1JZUFRfRkFJTF9US0lQKSkKLQkJcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19NTUlDX0VSUk9SOwotCi0Jcnhfc3RhdHVzLnNpZ25hbCA9IHA1NF9yc3NpX3RvX2RibShkZXYsIGhkci0+cnNzaSk7Ci0Jcnhfc3RhdHVzLm5vaXNlID0gcHJpdi0+bm9pc2U7Ci0JaWYgKGhkci0+cmF0ZSAmIDB4MTApCi0JCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7Ci0JaWYgKGRldi0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCXJ4X3N0YXR1cy5yYXRlX2lkeCA9IChyYXRlIDwgNCkgPyAwIDogcmF0ZSAtIDQ7Ci0JZWxzZQotCQlyeF9zdGF0dXMucmF0ZV9pZHggPSByYXRlOwotCi0Jcnhfc3RhdHVzLmZyZXEgPSBmcmVxOwotCXJ4X3N0YXR1cy5iYW5kID0gIGRldi0+Y29uZi5jaGFubmVsLT5iYW5kOwotCXJ4X3N0YXR1cy5hbnRlbm5hID0gaGRyLT5hbnRlbm5hOwotCi0JdHNmMzIgPSBsZTMyX3RvX2NwdShoZHItPnRzZjMyKTsKLQlpZiAodHNmMzIgPCBwcml2LT50c2ZfbG93MzIpCi0JCXByaXYtPnRzZl9oaWdoMzIrKzsKLQlyeF9zdGF0dXMubWFjdGltZSA9ICgodTY0KXByaXYtPnRzZl9oaWdoMzIpIDw8IDMyIHwgdHNmMzI7Ci0JcHJpdi0+dHNmX2xvdzMyID0gdHNmMzI7Ci0KLQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1RTRlQ7Ci0KLQlpZiAoaGRyLT5mbGFncyAmIGNwdV90b19sZTE2KFA1NF9IRFJfRkxBR19EQVRBX0FMSUdOKSkKLQkJaGVhZGVyX2xlbiArPSBoZHItPmFsaWduWzBdOwotCi0Jc2tiX3B1bGwoc2tiLCBoZWFkZXJfbGVuKTsKLQlza2JfdHJpbShza2IsIGxlMTZfdG9fY3B1KGhkci0+bGVuKSk7Ci0KLQlpZWVlODAyMTFfcnhfaXJxc2FmZShkZXYsIHNrYiwgJnJ4X3N0YXR1cyk7Ci0KLQlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2LT53b3JrcXVldWUsICZwcml2LT53b3JrLAotCQkJICAgbXNlY3NfdG9famlmZmllcyhQNTRfU1RBVElTVElDU19VUERBVEUpKTsKLQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIHZvaWQgaW5saW5lIHA1NF93YWtlX2ZyZWVfcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlpbnQgaTsKLQotCWlmIChwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQotCQlyZXR1cm4gOwotCi0JZm9yIChpID0gMDsgaSA8IGRldi0+cXVldWVzOyBpKyspCi0JCWlmIChwcml2LT50eF9zdGF0c1tpICsgUDU0X1FVRVVFX0RBVEFdLmxlbiA8Ci0JCSAgICBwcml2LT50eF9zdGF0c1tpICsgUDU0X1FVRVVFX0RBVEFdLmxpbWl0KQotCQkJaWVlZTgwMjExX3dha2VfcXVldWUoZGV2LCBpKTsKLX0KLQotdm9pZCBwNTRfZnJlZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgcDU0X3R4X2luZm8gKnJhbmdlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAodW5saWtlbHkoIXNrYiB8fCAhZGV2IHx8ICFza2JfcXVldWVfbGVuKCZwcml2LT50eF9xdWV1ZSkpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIGRvbid0IHRyeSB0byBmcmVlIGFuIGFscmVhZHkgdW5saW5rZWQgc2tiCi0JICovCi0JaWYgKHVubGlrZWx5KCghc2tiLT5uZXh0KSB8fCAoIXNrYi0+cHJldikpKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOwotCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JcmFuZ2UgPSAodm9pZCAqKWluZm8tPnJhdGVfZHJpdmVyX2RhdGE7Ci0JaWYgKHNrYi0+cHJldiAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKLQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpuaTsKLQkJc3RydWN0IHA1NF90eF9pbmZvICptcjsKLQotCQluaSA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiLT5wcmV2KTsKLQkJbXIgPSAoc3RydWN0IHA1NF90eF9pbmZvICopbmktPnJhdGVfZHJpdmVyX2RhdGE7Ci0JfQotCWlmIChza2ItPm5leHQgIT0gKHN0cnVjdCBza19idWZmICopJnByaXYtPnR4X3F1ZXVlKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqbmk7Ci0JCXN0cnVjdCBwNTRfdHhfaW5mbyAqbXI7Ci0KLQkJbmkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYi0+bmV4dCk7Ci0JCW1yID0gKHN0cnVjdCBwNTRfdHhfaW5mbyAqKW5pLT5yYXRlX2RyaXZlcl9kYXRhOwotCX0KLQlfX3NrYl91bmxpbmsoc2tiLCAmcHJpdi0+dHhfcXVldWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKLQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCXA1NF93YWtlX2ZyZWVfcXVldWVzKGRldik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwNTRfZnJlZV9za2IpOwotCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnA1NF9maW5kX3R4X2VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkJICAgX19sZTMyIHJlcV9pZCkKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0JZW50cnkgPSBwcml2LT50eF9xdWV1ZS5uZXh0OwotCXdoaWxlIChlbnRyeSAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKLQkJc3RydWN0IHA1NF9oZHIgKmhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBlbnRyeS0+ZGF0YTsKLQotCQlpZiAoaGRyLT5yZXFfaWQgPT0gcmVxX2lkKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gZW50cnk7Ci0JCX0KLQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBwNTRfcnhfZnJhbWVfc2VudChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF9oZHIgKmhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2ItPmRhdGE7Ci0Jc3RydWN0IHA1NF9mcmFtZV9zZW50ICpwYXlsb2FkID0gKHN0cnVjdCBwNTRfZnJhbWVfc2VudCAqKSBoZHItPmRhdGE7Ci0Jc3RydWN0IHNrX2J1ZmYgKmVudHJ5OwotCXUzMiBhZGRyID0gbGUzMl90b19jcHUoaGRyLT5yZXFfaWQpIC0gcHJpdi0+aGVhZHJvb207Ci0Jc3RydWN0IHA1NF90eF9pbmZvICpyYW5nZSA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgY291bnQsIGlkeDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0JZW50cnkgPSAoc3RydWN0IHNrX2J1ZmYgKikgcHJpdi0+dHhfcXVldWUubmV4dDsKLQl3aGlsZSAoZW50cnkgIT0gKHN0cnVjdCBza19idWZmICopJnByaXYtPnR4X3F1ZXVlKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnkpOwotCQlzdHJ1Y3QgcDU0X2hkciAqZW50cnlfaGRyOwotCQlzdHJ1Y3QgcDU0X3R4X2RhdGEgKmVudHJ5X2RhdGE7Ci0JCXVuc2lnbmVkIGludCBwYWQgPSAwLCBmcmFtZV9sZW47Ci0KLQkJcmFuZ2UgPSAodm9pZCAqKWluZm8tPnJhdGVfZHJpdmVyX2RhdGE7Ci0JCWlmIChyYW5nZS0+c3RhcnRfYWRkciAhPSBhZGRyKSB7Ci0JCQllbnRyeSA9IGVudHJ5LT5uZXh0OwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoZW50cnktPm5leHQgIT0gKHN0cnVjdCBza19idWZmICopJnByaXYtPnR4X3F1ZXVlKSB7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKm5pOwotCQkJc3RydWN0IHA1NF90eF9pbmZvICptcjsKLQotCQkJbmkgPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5uZXh0KTsKLQkJCW1yID0gKHN0cnVjdCBwNTRfdHhfaW5mbyAqKW5pLT5yYXRlX2RyaXZlcl9kYXRhOwotCQl9Ci0KLQkJX19za2JfdW5saW5rKGVudHJ5LCAmcHJpdi0+dHhfcXVldWUpOwotCi0JCWZyYW1lX2xlbiA9IGVudHJ5LT5sZW47Ci0JCWVudHJ5X2hkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBlbnRyeS0+ZGF0YTsKLQkJZW50cnlfZGF0YSA9IChzdHJ1Y3QgcDU0X3R4X2RhdGEgKikgZW50cnlfaGRyLT5kYXRhOwotCQlpZiAocHJpdi0+dHhfc3RhdHNbZW50cnlfZGF0YS0+aHdfcXVldWVdLmxlbikKLQkJCXByaXYtPnR4X3N0YXRzW2VudHJ5X2RhdGEtPmh3X3F1ZXVlXS5sZW4tLTsKLQkJcHJpdi0+c3RhdHMuZG90MTFBQ0tGYWlsdXJlQ291bnQgKz0gcGF5bG9hZC0+dHJpZXMgLSAxOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0KLQkJLyoKLQkJICogRnJhbWVzIGluIFA1NF9RVUVVRV9GV1NDQU4gYW5kIFA1NF9RVUVVRV9CRUFDT04gYXJlCi0JCSAqIGdlbmVyYXRlZCBieSB0aGUgZHJpdmVyLiBUaGVyZWZvcmUgdHhfc3RhdHVzIGlzIGJvZ3VzCi0JCSAqIGFuZCB3ZSBkb24ndCB3YW50IHRvIGNvbmZ1c2UgdGhlIG1hYzgwMjExIHN0YWNrLgotCQkgKi8KLQkJaWYgKHVubGlrZWx5KGVudHJ5X2RhdGEtPmh3X3F1ZXVlIDwgUDU0X1FVRVVFX0ZXU0NBTikpIHsKLQkJCWlmIChlbnRyeV9kYXRhLT5od19xdWV1ZSA9PSBQNTRfUVVFVUVfQkVBQ09OKQotCQkJCXByaXYtPmNhY2hlZF9iZWFjb24gPSBOVUxMOwotCi0JCQlrZnJlZV9za2IoZW50cnkpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKgotCQkgKiBDbGVhciBtYW51YWxseSwgaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzIHdvdWxkCi0JCSAqIGNsZWFyIHRoZSBjb3VudHMgdG9vIGFuZCB3ZSBuZWVkIHRoZW0uCi0JCSAqLwotCQltZW1zZXQoJmluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbGVuLCAwLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbykgLQotCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvLCBzdGF0dXMuYW1wZHVfYWNrX2xlbikpOwotCQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvLAotCQkJCSAgICAgIHN0YXR1cy5hbXBkdV9hY2tfbGVuKSAhPSAyMyk7Ci0KLQkJaWYgKGVudHJ5X2hkci0+ZmxhZ3MgJiBjcHVfdG9fbGUxNihQNTRfSERSX0ZMQUdfREFUQV9BTElHTikpCi0JCQlwYWQgPSBlbnRyeV9kYXRhLT5hbGlnblswXTsKLQotCQkvKiB3YWxrIHRocm91Z2ggdGhlIHJhdGVzIGFycmF5IGFuZCBhZGp1c3QgdGhlIGNvdW50cyAqLwotCQljb3VudCA9IHBheWxvYWQtPnRyaWVzOwotCQlmb3IgKGlkeCA9IDA7IGlkeCA8IDQ7IGlkeCsrKSB7Ci0JCQlpZiAoY291bnQgPj0gaW5mby0+c3RhdHVzLnJhdGVzW2lkeF0uY291bnQpIHsKLQkJCQljb3VudCAtPSBpbmZvLT5zdGF0dXMucmF0ZXNbaWR4XS5jb3VudDsKLQkJCX0gZWxzZSBpZiAoY291bnQgPiAwKSB7Ci0JCQkJaW5mby0+c3RhdHVzLnJhdGVzW2lkeF0uY291bnQgPSBjb3VudDsKLQkJCQljb3VudCA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCWluZm8tPnN0YXR1cy5yYXRlc1tpZHhdLmlkeCA9IC0xOwotCQkJCWluZm8tPnN0YXR1cy5yYXRlc1tpZHhdLmNvdW50ID0gMDsKLQkJCX0KLQkJfQotCi0JCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICYmCi0JCSAgICAgKCFwYXlsb2FkLT5zdGF0dXMpKQotCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwotCQlpZiAocGF5bG9hZC0+c3RhdHVzICYgUDU0X1RYX1BTTV9DQU5DRUxMRUQpCi0JCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDsKLQkJaW5mby0+c3RhdHVzLmFja19zaWduYWwgPSBwNTRfcnNzaV90b19kYm0oZGV2LAotCQkJCShpbnQpcGF5bG9hZC0+YWNrX3Jzc2kpOwotCi0JCS8qIFVuZG8gYWxsIGNoYW5nZXMgdG8gdGhlIGZyYW1lLiAqLwotCQlzd2l0Y2ggKGVudHJ5X2RhdGEtPmtleV90eXBlKSB7Ci0JCWNhc2UgUDU0X0NSWVBUT19US0lQTUlDSEFFTDogewotCQkJdTggKml2ID0gKHU4ICopKGVudHJ5X2RhdGEtPmFsaWduICsgcGFkICsKLQkJCQkJZW50cnlfZGF0YS0+Y3J5cHRfb2Zmc2V0KTsKLQotCQkJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgVEtJUCBJVi4gKi8KLQkJCWl2WzJdID0gaXZbMF07Ci0JCQlpdlswXSA9IGl2WzFdOwotCQkJaXZbMV0gPSAoaXZbMF0gfCAweDIwKSAmIDB4N2Y7CS8qIFdFUFNlZWQgLSA4LjMuMi4yICovCi0KLQkJCWZyYW1lX2xlbiAtPSAxMjsgLyogcmVtb3ZlIFRLSVBfTU1JQyArIFRLSVBfSUNWICovCi0JCQlicmVhazsKLQkJCX0KLQkJY2FzZSBQNTRfQ1JZUFRPX0FFU0NDTVA6Ci0JCQlmcmFtZV9sZW4gLT0gODsgLyogcmVtb3ZlIENDTVBfTUlDICovCi0JCQlicmVhazsKLQkJY2FzZSBQNTRfQ1JZUFRPX1dFUDoKLQkJCWZyYW1lX2xlbiAtPSA0OyAvKiByZW1vdmUgV0VQX0lDViAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJc2tiX3RyaW0oZW50cnksIGZyYW1lX2xlbik7Ci0JCXNrYl9wdWxsKGVudHJ5LCBzaXplb2YoKmhkcikgKyBwYWQgKyBzaXplb2YoKmVudHJ5X2RhdGEpKTsKLQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGRldiwgZW50cnkpOwotCQlnb3RvIG91dDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOwotCi1vdXQ6Ci0JcDU0X3dha2VfZnJlZV9xdWV1ZXMoZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgcDU0X3J4X2VlcHJvbV9yZWFkYmFjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcDU0X2hkciAqaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgcDU0X2VlcHJvbV9sbTg2ICplZXByb20gPSAoc3RydWN0IHA1NF9lZXByb21fbG04NiAqKSBoZHItPmRhdGE7Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0KLQlpZiAoIXByaXYtPmVlcHJvbSkKLQkJcmV0dXJuIDsKLQotCWlmIChwcml2LT5md192YXIgPj0gMHg1MDkpIHsKLQkJbWVtY3B5KHByaXYtPmVlcHJvbSwgZWVwcm9tLT52Mi5kYXRhLAotCQkgICAgICAgbGUxNl90b19jcHUoZWVwcm9tLT52Mi5sZW4pKTsKLQl9IGVsc2UgewotCQltZW1jcHkocHJpdi0+ZWVwcm9tLCBlZXByb20tPnYxLmRhdGEsCi0JCSAgICAgICBsZTE2X3RvX2NwdShlZXByb20tPnYxLmxlbikpOwotCX0KLQotCWNvbXBsZXRlKCZwcml2LT5lZXByb21fY29tcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHA1NF9yeF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF9oZHIgKmhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2ItPmRhdGE7Ci0Jc3RydWN0IHA1NF9zdGF0aXN0aWNzICpzdGF0cyA9IChzdHJ1Y3QgcDU0X3N0YXRpc3RpY3MgKikgaGRyLT5kYXRhOwotCXUzMiB0c2YzMjsKLQotCWlmICh1bmxpa2VseShwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSkKLQkJcmV0dXJuIDsKLQotCXRzZjMyID0gbGUzMl90b19jcHUoc3RhdHMtPnRzZjMyKTsKLQlpZiAodHNmMzIgPCBwcml2LT50c2ZfbG93MzIpCi0JCXByaXYtPnRzZl9oaWdoMzIrKzsKLQlwcml2LT50c2ZfbG93MzIgPSB0c2YzMjsKLQotCXByaXYtPnN0YXRzLmRvdDExUlRTRmFpbHVyZUNvdW50ID0gbGUzMl90b19jcHUoc3RhdHMtPnJ0c19mYWlsKTsKLQlwcml2LT5zdGF0cy5kb3QxMVJUU1N1Y2Nlc3NDb3VudCA9IGxlMzJfdG9fY3B1KHN0YXRzLT5ydHNfc3VjY2Vzcyk7Ci0JcHJpdi0+c3RhdHMuZG90MTFGQ1NFcnJvckNvdW50ID0gbGUzMl90b19jcHUoc3RhdHMtPnJ4X2JhZF9mY3MpOwotCi0JcHJpdi0+bm9pc2UgPSBwNTRfcnNzaV90b19kYm0oZGV2LCBsZTMyX3RvX2NwdShzdGF0cy0+bm9pc2UpKTsKLQotCXA1NF9mcmVlX3NrYihkZXYsIHA1NF9maW5kX3R4X2VudHJ5KGRldiwgaGRyLT5yZXFfaWQpKTsKLX0KLQotc3RhdGljIHZvaWQgcDU0X3J4X3RyYXAoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwNTRfaGRyICpoZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiLT5kYXRhOwotCXN0cnVjdCBwNTRfdHJhcCAqdHJhcCA9IChzdHJ1Y3QgcDU0X3RyYXAgKikgaGRyLT5kYXRhOwotCXUxNiBldmVudCA9IGxlMTZfdG9fY3B1KHRyYXAtPmV2ZW50KTsKLQl1MTYgZnJlcSA9IGxlMTZfdG9fY3B1KHRyYXAtPmZyZXF1ZW5jeSk7Ci0KLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBQNTRfVFJBUF9CRUFDT05fVFg6Ci0JCWJyZWFrOwotCWNhc2UgUDU0X1RSQVBfUkFEQVI6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiByYWRhciAoZnJlcTolZCBNSHopXG4iLAotCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgZnJlcSk7Ci0JCWJyZWFrOwotCWNhc2UgUDU0X1RSQVBfTk9fQkVBQ09OOgotCQlpZiAocHJpdi0+dmlmKQotCQkJaWVlZTgwMjExX2JlYWNvbl9sb3NzKHByaXYtPnZpZik7Ci0JCWJyZWFrOwotCWNhc2UgUDU0X1RSQVBfU0NBTjoKLQkJYnJlYWs7Ci0JY2FzZSBQNTRfVFJBUF9UQlRUOgotCQlicmVhazsKLQljYXNlIFA1NF9UUkFQX1RJTUVSOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgZXZlbnQ6JXggZnJlcTolZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIGV2ZW50LCBmcmVxKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW50IHA1NF9yeF9jb250cm9sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcDU0X2hkciAqaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi0+ZGF0YTsKLQotCXN3aXRjaCAobGUxNl90b19jcHUoaGRyLT50eXBlKSkgewotCWNhc2UgUDU0X0NPTlRST0xfVFlQRV9UWERPTkU6Ci0JCXA1NF9yeF9mcmFtZV9zZW50KGRldiwgc2tiKTsKLQkJYnJlYWs7Ci0JY2FzZSBQNTRfQ09OVFJPTF9UWVBFX1RSQVA6Ci0JCXA1NF9yeF90cmFwKGRldiwgc2tiKTsKLQkJYnJlYWs7Ci0JY2FzZSBQNTRfQ09OVFJPTF9UWVBFX0JCUDoKLQkJYnJlYWs7Ci0JY2FzZSBQNTRfQ09OVFJPTF9UWVBFX1NUQVRfUkVBREJBQ0s6Ci0JCXA1NF9yeF9zdGF0cyhkZXYsIHNrYik7Ci0JCWJyZWFrOwotCWNhc2UgUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0s6Ci0JCXA1NF9yeF9lZXByb21fcmVhZGJhY2soZGV2LCBza2IpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG5vdCBoYW5kbGluZyAweCUwMnggdHlwZSBjb250cm9sIGZyYW1lXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbGUxNl90b19jcHUoaGRyLT50eXBlKSk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiByZXR1cm5zIHplcm8gaWYgc2tiIGNhbiBiZSByZXVzZWQgKi8KLWludCBwNTRfcngoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXUxNiB0eXBlID0gbGUxNl90b19jcHUoKigoX19sZTE2ICopc2tiLT5kYXRhKSk7Ci0KLQlpZiAodHlwZSAmIFA1NF9IRFJfRkxBR19DT05UUk9MKQotCQlyZXR1cm4gcDU0X3J4X2NvbnRyb2woZGV2LCBza2IpOwotCWVsc2UKLQkJcmV0dXJuIHA1NF9yeF9kYXRhKGRldiwgc2tiKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHA1NF9yeCk7Ci0KLS8qCi0gKiBTbywgdGhlIGZpcm13YXJlIGlzIHNvbWV3aGF0IHN0dXBpZCBhbmQgZG9lc24ndCBrbm93IHdoYXQgcGxhY2VzIGluIGl0cwotICogbWVtb3J5IGluY29taW5nIGRhdGEgc2hvdWxkIGdvIHRvLiBCeSBwb2tpbmcgYXJvdW5kIGluIHRoZSBmaXJtd2FyZSwgd2UKLSAqIGNhbiBmaW5kIHNvbWUgdW51c2VkIG1lbW9yeSB0byB1cGxvYWQgb3VyIHBhY2tldHMgdG8uIEhvd2V2ZXIsIGRhdGEgdGhhdCB3ZQotICogd2FudCB0aGUgY2FyZCB0byBUWCBuZWVkcyB0byBzdGF5IGludGFjdCB1bnRpbCB0aGUgY2FyZCBoYXMgdG9sZCB1cyB0aGF0Ci0gKiBpdCBpcyBkb25lIHdpdGggaXQuIFRoaXMgZnVuY3Rpb24gZmluZHMgZW1wdHkgcGxhY2VzIHdlIGNhbiB1cGxvYWQgdG8gYW5kCi0gKiBtYXJrcyBhbGxvY2F0ZWQgYXJlYXMgYXMgcmVzZXJ2ZWQgaWYgbmVjZXNzYXJ5LiBwNTRfcnhfZnJhbWVfc2VudCBvcgotICogcDU0X2ZyZWVfc2tiIGZyZWVzIGFsbG9jYXRlZCBhcmVhcy4KLSAqLwotc3RhdGljIGludCBwNTRfYXNzaWduX2FkZHJlc3Moc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIHN0cnVjdCBwNTRfaGRyICpkYXRhLCB1MzIgbGVuKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBza19idWZmICplbnRyeTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqdGFyZ2V0X3NrYiA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXN0cnVjdCBwNTRfdHhfaW5mbyAqcmFuZ2U7Ci0JdTMyIGxhc3RfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OwotCXUzMiBsYXJnZXN0X2hvbGUgPSAwOwotCXUzMiB0YXJnZXRfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGxlZnQ7Ci0JbGVuID0gKGxlbiArIHByaXYtPmhlYWRyb29tICsgcHJpdi0+dGFpbHJvb20gKyAzKSAmIH4weDM7Ci0KLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOwotCi0JbGVmdCA9IHNrYl9xdWV1ZV9sZW4oJnByaXYtPnR4X3F1ZXVlKTsKLQlpZiAodW5saWtlbHkobGVmdCA+PSAyOCkpIHsKLQkJLyoKLQkJICogVGhlIHR4X3F1ZXVlIGlzIG5lYXJseSBmdWxsIQotCQkgKiBXZSBoYXZlIHRocm90dGxlIG5vcm1hbCBkYXRhIHRyYWZmaWMsIGJlY2F1c2Ugd2UgbXVzdAotCQkgKiBoYXZlIGEgZmV3IHNwYXJlIHNsb3RzIGZvciBjb250cm9sIGZyYW1lcyBsZWZ0LgotCQkgKi8KLQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKGRldik7Ci0JCXF1ZXVlX2RlbGF5ZWRfd29yayhkZXYtPndvcmtxdWV1ZSwgJnByaXYtPndvcmssCi0JCQkJICAgbXNlY3NfdG9famlmZmllcyhQNTRfVFhfVElNRU9VVCkpOwotCi0JCWlmICh1bmxpa2VseShsZWZ0ID09IDMyKSkgewotCQkJLyoKLQkJCSAqIFRoZSB0eF9xdWV1ZSBpcyBub3cgcmVhbGx5IGZ1bGwuCi0JCQkgKgotCQkJICogVE9ETzogY2hlY2sgaWYgdGhlIGRldmljZSBoYXMgY3Jhc2hlZCBhbmQgcmVzZXQgaXQuCi0JCQkgKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKLQkJCXJldHVybiAtRU5PU1BDOwotCQl9Ci0JfQotCi0JZW50cnkgPSBwcml2LT50eF9xdWV1ZS5uZXh0OwotCXdoaWxlIChsZWZ0LS0pIHsKLQkJdTMyIGhvbGVfc2l6ZTsKLQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnkpOwotCQlyYW5nZSA9ICh2b2lkICopaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKLQkJaG9sZV9zaXplID0gcmFuZ2UtPnN0YXJ0X2FkZHIgLSBsYXN0X2FkZHI7Ci0JCWlmICghdGFyZ2V0X3NrYiAmJiBob2xlX3NpemUgPj0gbGVuKSB7Ci0JCQl0YXJnZXRfc2tiID0gZW50cnktPnByZXY7Ci0JCQlob2xlX3NpemUgLT0gbGVuOwotCQkJdGFyZ2V0X2FkZHIgPSBsYXN0X2FkZHI7Ci0JCX0KLQkJbGFyZ2VzdF9ob2xlID0gbWF4KGxhcmdlc3RfaG9sZSwgaG9sZV9zaXplKTsKLQkJbGFzdF9hZGRyID0gcmFuZ2UtPmVuZF9hZGRyOwotCQllbnRyeSA9IGVudHJ5LT5uZXh0OwotCX0KLQlpZiAoIXRhcmdldF9za2IgJiYgcHJpdi0+cnhfZW5kIC0gbGFzdF9hZGRyID49IGxlbikgewotCQl0YXJnZXRfc2tiID0gcHJpdi0+dHhfcXVldWUucHJldjsKLQkJbGFyZ2VzdF9ob2xlID0gbWF4KGxhcmdlc3RfaG9sZSwgcHJpdi0+cnhfZW5kIC0gbGFzdF9hZGRyIC0gbGVuKTsKLQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJnByaXYtPnR4X3F1ZXVlKSkgewotCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodGFyZ2V0X3NrYik7Ci0JCQlyYW5nZSA9ICh2b2lkICopaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKLQkJCXRhcmdldF9hZGRyID0gcmFuZ2UtPmVuZF9hZGRyOwotCQl9Ci0JfSBlbHNlCi0JCWxhcmdlc3RfaG9sZSA9IG1heChsYXJnZXN0X2hvbGUsIHByaXYtPnJ4X2VuZCAtIGxhc3RfYWRkcik7Ci0KLQlpZiAoIXRhcmdldF9za2IpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOwotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoZGV2KTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCi0JaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlyYW5nZSA9ICh2b2lkICopaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKLQlyYW5nZS0+c3RhcnRfYWRkciA9IHRhcmdldF9hZGRyOwotCXJhbmdlLT5lbmRfYWRkciA9IHRhcmdldF9hZGRyICsgbGVuOwotCV9fc2tiX3F1ZXVlX2FmdGVyKCZwcml2LT50eF9xdWV1ZSwgdGFyZ2V0X3NrYiwgc2tiKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0KLQlpZiAobGFyZ2VzdF9ob2xlIDwgcHJpdi0+aGVhZHJvb20gKyBzaXplb2Yoc3RydWN0IHA1NF9oZHIpICsKLQkJCSAgIDQ4ICsgSUVFRTgwMjExX01BWF9SVFNfVEhSRVNIT0xEICsgcHJpdi0+dGFpbHJvb20pCi0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhkZXYpOwotCi0JZGF0YS0+cmVxX2lkID0gY3B1X3RvX2xlMzIodGFyZ2V0X2FkZHIgKyBwcml2LT5oZWFkcm9vbSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcDU0X2FsbG9jX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUxNiBoZHJfZmxhZ3MsCi0JCQkJICAgICB1MTYgcGF5bG9hZF9sZW4sIHUxNiB0eXBlLCBnZnBfdCBtZW1mbGFncykKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgcDU0X2hkciAqaGRyOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc2l6ZV90IGZyYW1lX2xlbiA9IHNpemVvZigqaGRyKSArIHBheWxvYWRfbGVuOwotCi0JaWYgKGZyYW1lX2xlbiA+IFA1NF9NQVhfQ1RSTF9GUkFNRV9MRU4pCi0JCXJldHVybiBOVUxMOwotCi0Jc2tiID0gX19kZXZfYWxsb2Nfc2tiKHByaXYtPnR4X2hkcl9sZW4gKyBmcmFtZV9sZW4sIG1lbWZsYWdzKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIE5VTEw7Ci0Jc2tiX3Jlc2VydmUoc2tiLCBwcml2LT50eF9oZHJfbGVuKTsKLQotCWhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZHIpKTsKLQloZHItPmZsYWdzID0gY3B1X3RvX2xlMTYoaGRyX2ZsYWdzKTsKLQloZHItPmxlbiA9IGNwdV90b19sZTE2KHBheWxvYWRfbGVuKTsKLQloZHItPnR5cGUgPSBjcHVfdG9fbGUxNih0eXBlKTsKLQloZHItPnRyaWVzID0gaGRyLT5ydHNfdHJpZXMgPSAwOwotCi0JaWYgKHA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIHNrYiwgaGRyLCBmcmFtZV9sZW4pKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIHNrYjsKLX0KLQotaW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF9lZXByb21fbG04NiAqZWVwcm9tX2hkcjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXNpemVfdCBlZXByb21fc2l6ZSA9IDB4MjAyMCwgb2Zmc2V0ID0gMCwgYmxvY2tzaXplLCBtYXhibG9ja3NpemU7Ci0JaW50IHJldCA9IC1FTk9NRU07Ci0Jdm9pZCAqZWVwcm9tID0gTlVMTDsKLQotCW1heGJsb2Nrc2l6ZSA9IEVFUFJPTV9SRUFEQkFDS19MRU47Ci0JaWYgKHByaXYtPmZ3X3ZhciA+PSAweDUwOSkKLQkJbWF4YmxvY2tzaXplIC09IDB4YzsKLQllbHNlCi0JCW1heGJsb2Nrc2l6ZSAtPSAweDQ7Ci0KLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsIHNpemVvZigqZWVwcm9tX2hkcikgKwotCQkJICAgIG1heGJsb2Nrc2l6ZSwgUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0ssCi0JCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFza2IpCi0JCWdvdG8gZnJlZTsKLQlwcml2LT5lZXByb20gPSBremFsbG9jKEVFUFJPTV9SRUFEQkFDS19MRU4sIEdGUF9LRVJORUwpOwotCWlmICghcHJpdi0+ZWVwcm9tKQotCQlnb3RvIGZyZWU7Ci0JZWVwcm9tID0ga3phbGxvYyhlZXByb21fc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlZXByb20pCi0JCWdvdG8gZnJlZTsKLQotCWVlcHJvbV9oZHIgPSAoc3RydWN0IHA1NF9lZXByb21fbG04NiAqKSBza2JfcHV0KHNrYiwKLQkJICAgICBzaXplb2YoKmVlcHJvbV9oZHIpICsgbWF4YmxvY2tzaXplKTsKLQotCXdoaWxlIChlZXByb21fc2l6ZSkgewotCQlibG9ja3NpemUgPSBtaW4oZWVwcm9tX3NpemUsIG1heGJsb2Nrc2l6ZSk7Ci0JCWlmIChwcml2LT5md192YXIgPCAweDUwOSkgewotCQkJZWVwcm9tX2hkci0+djEub2Zmc2V0ID0gY3B1X3RvX2xlMTYob2Zmc2V0KTsKLQkJCWVlcHJvbV9oZHItPnYxLmxlbiA9IGNwdV90b19sZTE2KGJsb2Nrc2l6ZSk7Ci0JCX0gZWxzZSB7Ci0JCQllZXByb21faGRyLT52Mi5vZmZzZXQgPSBjcHVfdG9fbGUzMihvZmZzZXQpOwotCQkJZWVwcm9tX2hkci0+djIubGVuID0gY3B1X3RvX2xlMTYoYmxvY2tzaXplKTsKLQkJCWVlcHJvbV9oZHItPnYyLm1hZ2ljMiA9IDB4ZjsKLQkJCW1lbWNweShlZXByb21faGRyLT52Mi5tYWdpYywgKGNvbnN0IGNoYXIgKikiTE9DSyIsIDQpOwotCQl9Ci0JCXByaXYtPnR4KGRldiwgc2tiKTsKLQotCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZwcml2LT5lZXByb21fY29tcCwgSFopKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkZXZpY2UgZG9lcyBub3QgcmVzcG9uZCFcbiIsCi0JCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlnb3RvIGZyZWU7Ci0JICAgICAgICB9Ci0KLQkJbWVtY3B5KGVlcHJvbSArIG9mZnNldCwgcHJpdi0+ZWVwcm9tLCBibG9ja3NpemUpOwotCQlvZmZzZXQgKz0gYmxvY2tzaXplOwotCQllZXByb21fc2l6ZSAtPSBibG9ja3NpemU7Ci0JfQotCi0JcmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsIGVlcHJvbSwgb2Zmc2V0KTsKLWZyZWU6Ci0Ja2ZyZWUocHJpdi0+ZWVwcm9tKTsKLQlwcml2LT5lZXByb20gPSBOVUxMOwotCXA1NF9mcmVlX3NrYihkZXYsIHNrYik7Ci0Ja2ZyZWUoZWVwcm9tKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwNTRfcmVhZF9lZXByb20pOwotCi1zdGF0aWMgaW50IHA1NF9zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJYm9vbCBzZXQpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgcDU0X3RpbSAqdGltOwotCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnRpbSksCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9USU0sIEdGUF9BVE9NSUMpOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXRpbSA9IChzdHJ1Y3QgcDU0X3RpbSAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCp0aW0pKTsKLQl0aW0tPmNvdW50ID0gMTsKLQl0aW0tPmVudHJ5WzBdID0gY3B1X3RvX2xlMTYoc2V0ID8gKHN0YS0+YWlkIHwgMHg4MDAwKSA6IHN0YS0+YWlkKTsKLQlwcml2LT50eChkZXYsIHNrYik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X3N0YV91bmxvY2soc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCAqYWRkcikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBwNTRfc3RhX3VubG9jayAqc3RhOwotCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnN0YSksCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9QU01fU1RBX1VOTE9DSywgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3RhID0gKHN0cnVjdCBwNTRfc3RhX3VubG9jayAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKnN0YSkpOwotCW1lbWNweShzdGEtPmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKLQlwcml2LT50eChkZXYsIHNrYik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHA1NF9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgICAgIGVudW0gc3RhX25vdGlmeV9jbWQgbm90aWZ5X2NtZCwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCi17Ci0Jc3dpdGNoIChub3RpZnlfY21kKSB7Ci0JY2FzZSBTVEFfTk9USUZZX0FERDoKLQljYXNlIFNUQV9OT1RJRllfUkVNT1ZFOgotCQkvKgotCQkgKiBOb3RpZnkgdGhlIGZpcm13YXJlIHRoYXQgd2UgZG9uJ3Qgd2FudCBvciB3ZSBkb24ndAotCQkgKiBuZWVkIHRvIGJ1ZmZlciBmcmFtZXMgZm9yIHRoaXMgc3RhdGlvbiBhbnltb3JlLgotCQkgKi8KLQotCQlwNTRfc3RhX3VubG9jayhkZXYsIHN0YS0+YWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgU1RBX05PVElGWV9BV0FLRToKLQkJLyogdXBkYXRlIHRoZSBmaXJtd2FyZSdzIGZpbHRlciB0YWJsZSAqLwotCQlwNTRfc3RhX3VubG9jayhkZXYsIHN0YS0+YWRkcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludCBwNTRfdHhfY2FuY2VsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKmVudHJ5KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHA1NF9oZHIgKmhkcjsKLQlzdHJ1Y3QgcDU0X3R4Y2FuY2VsICpjYW5jZWw7Ci0KLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqY2FuY2VsKSwKLQkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1RYQ0FOQ0VMLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQloZHIgPSAodm9pZCAqKWVudHJ5LT5kYXRhOwotCWNhbmNlbCA9IChzdHJ1Y3QgcDU0X3R4Y2FuY2VsICopc2tiX3B1dChza2IsIHNpemVvZigqY2FuY2VsKSk7Ci0JY2FuY2VsLT5yZXFfaWQgPSBoZHItPnJlcV9pZDsKLQlwcml2LT50eChkZXYsIHNrYik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X3R4X2ZpbGwoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sIHU4ICpxdWV1ZSwgc2l6ZV90ICpleHRyYV9sZW4sCi0JCXUxNiAqZmxhZ3MsIHUxNiAqYWlkKQotewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IHJldCA9IDE7Ci0KLQlzd2l0Y2ggKHByaXYtPm1vZGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6Ci0JCS8qCi0JCSAqIFdlIGhhdmUgdG8gc2V0IFA1NF9IRFJfRkxBR19EQVRBX09VVF9QUk9NSVNDIGZvcgotCQkgKiBldmVyeSBmcmFtZSBpbiBwcm9taXNjdW91cy9tb25pdG9yIG1vZGUuCi0JCSAqIHNlZSBTVFNXNDV4MEMgTE1BQyBBUEkgLSBwYWdlIDEyLgotCQkgKi8KLQkJKmFpZCA9IDA7Ci0JCSpmbGFncyA9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9QUk9NSVNDOwotCQkqcXVldWUgKz0gUDU0X1FVRVVFX0RBVEE7Ci0JCWJyZWFrOwotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJKmFpZCA9IDE7Ci0JCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKSkgewotCQkJKnF1ZXVlID0gUDU0X1FVRVVFX01HTVQ7Ci0JCQlyZXQgPSAwOwotCQl9IGVsc2UKLQkJCSpxdWV1ZSArPSBQNTRfUVVFVUVfREFUQTsKLQkJYnJlYWs7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pIHsKLQkJCSphaWQgPSAwOwotCQkJKnF1ZXVlID0gUDU0X1FVRVVFX0NBQjsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7Ci0JCQlpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSkgewotCQkJCSphaWQgPSAwOwotCQkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9NR01UOwotCQkJCSpmbGFncyA9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9USU1FU1RBTVAgfAotCQkJCQkgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX05PQ0FOQ0VMOwotCQkJCXJldHVybiAwOwotCQkJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJCQkqYWlkID0gMDsKLQotCQkJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpIHsKLQkJCQkJLyoKLQkJCQkJICogSW5qZWN0aW5nIGJlYWNvbnMgb24gdG9wIG9mIGEgQVAgaXMKLQkJCQkJICogbm90IGEgZ29vZCBpZGVhLi4uIG5ldmVydGhlbGVzcywKLQkJCQkJICogaXQgc2hvdWxkIGJlIGRvYWJsZS4KLQkJCQkJICovCi0KLQkJCQkJKnF1ZXVlICs9IFA1NF9RVUVVRV9EQVRBOwotCQkJCQlyZXR1cm4gMTsKLQkJCQl9Ci0KLQkJCQkqZmxhZ3MgPSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfVElNRVNUQU1QOwotCQkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9CRUFDT047Ci0JCQkJKmV4dHJhX2xlbiA9IElFRUU4MDIxMV9NQVhfVElNX0xFTjsKLQkJCQlyZXR1cm4gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJKnF1ZXVlID0gUDU0X1FVRVVFX01HTVQ7Ci0JCQkJcmV0ID0gMDsKLQkJCX0KLQkJfSBlbHNlCi0JCQkqcXVldWUgKz0gUDU0X1FVRVVFX0RBVEE7Ci0KLQkJaWYgKGluZm8tPmNvbnRyb2wuc3RhKQotCQkJKmFpZCA9IGluZm8tPmNvbnRyb2wuc3RhLT5haWQ7Ci0KLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9DTEVBUl9QU19GSUxUKQotCQkJKmZsYWdzIHw9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9OT0NBTkNFTDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB1OCBwNTRfY29udmVydF9hbGdvKGVudW0gaWVlZTgwMjExX2tleV9hbGcgYWxnKQotewotCXN3aXRjaCAoYWxnKSB7Ci0JY2FzZSBBTEdfV0VQOgotCQlyZXR1cm4gUDU0X0NSWVBUT19XRVA7Ci0JY2FzZSBBTEdfVEtJUDoKLQkJcmV0dXJuIFA1NF9DUllQVE9fVEtJUE1JQ0hBRUw7Ci0JY2FzZSBBTEdfQ0NNUDoKLQkJcmV0dXJuIFA1NF9DUllQVE9fQUVTQ0NNUDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqY3VycmVudF9xdWV1ZTsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgcDU0X2hkciAqaGRyOwotCXN0cnVjdCBwNTRfdHhfZGF0YSAqdHhoZHI7Ci0Jc2l6ZV90IHBhZGRpbmcsIGxlbiwgdGltX2xlbiA9IDA7Ci0JaW50IGksIGosIHJpZHgsIHJldDsKLQl1MTYgaGRyX2ZsYWdzID0gMCwgYWlkID0gMDsKLQl1OCByYXRlLCBxdWV1ZSwgY3J5cHRfb2Zmc2V0ID0gMDsKLQl1OCBjdHNfcmF0ZSA9IDB4MjA7Ci0JdTggcmNfZmxhZ3M7Ci0JdTggY2FsY3VsYXRlZF90cmllc1s0XTsKLQl1OCBucmF0ZXMgPSAwLCBucmVtYWluaW5nID0gODsKLQotCXF1ZXVlID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7Ci0KLQlyZXQgPSBwNTRfdHhfZmlsbChkZXYsIHNrYiwgaW5mbywgJnF1ZXVlLCAmdGltX2xlbiwgJmhkcl9mbGFncywgJmFpZCk7Ci0JY3VycmVudF9xdWV1ZSA9ICZwcml2LT50eF9zdGF0c1txdWV1ZV07Ci0JaWYgKHVubGlrZWx5KChjdXJyZW50X3F1ZXVlLT5sZW4gPiBjdXJyZW50X3F1ZXVlLT5saW1pdCkgJiYgcmV0KSkKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCWN1cnJlbnRfcXVldWUtPmxlbisrOwotCWN1cnJlbnRfcXVldWUtPmNvdW50Kys7Ci0JaWYgKChjdXJyZW50X3F1ZXVlLT5sZW4gPT0gY3VycmVudF9xdWV1ZS0+bGltaXQpICYmIHJldCkKLQkJaWVlZTgwMjExX3N0b3BfcXVldWUoZGV2LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7Ci0KLQlwYWRkaW5nID0gKHVuc2lnbmVkIGxvbmcpKHNrYi0+ZGF0YSAtIChzaXplb2YoKmhkcikgKyBzaXplb2YoKnR4aGRyKSkpICYgMzsKLQlsZW4gPSBza2ItPmxlbjsKLQotCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkgewotCQljcnlwdF9vZmZzZXQgPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwotCQlpZiAoaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfVEtJUCkgewotCQkJdTggKml2ID0gKHU4ICopKHNrYi0+ZGF0YSArIGNyeXB0X29mZnNldCk7Ci0JCQkvKgotCQkJICogVGhlIGZpcm13YXJlIGV4Y2VwdHMgdGhhdCB0aGUgSVYgaGFzIHRvIGhhdmUKLQkJCSAqIHRoaXMgc3BlY2lhbCBmb3JtYXQKLQkJCSAqLwotCQkJaXZbMV0gPSBpdlswXTsKLQkJCWl2WzBdID0gaXZbMl07Ci0JCQlpdlsyXSA9IDA7Ci0JCX0KLQl9Ci0KLQl0eGhkciA9IChzdHJ1Y3QgcDU0X3R4X2RhdGEgKikgc2tiX3B1c2goc2tiLCBzaXplb2YoKnR4aGRyKSArIHBhZGRpbmcpOwotCWhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7Ci0KLQlpZiAocGFkZGluZykKLQkJaGRyX2ZsYWdzIHw9IFA1NF9IRFJfRkxBR19EQVRBX0FMSUdOOwotCWhkci0+dHlwZSA9IGNwdV90b19sZTE2KGFpZCk7Ci0JaGRyLT5ydHNfdHJpZXMgPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50OwotCi0JLyoKLQkgKiB3ZSByZWdpc3RlciB0aGUgcmF0ZXMgaW4gcGVyZmVjdCBvcmRlciwgYW5kCi0JICogUlRTL0NUUyB3b24ndCBoYXBwZW4gb24gNSBHSHoKLQkgKi8KLQljdHNfcmF0ZSA9IGluZm8tPmNvbnRyb2wucnRzX2N0c19yYXRlX2lkeDsKLQotCW1lbXNldCgmdHhoZHItPnJhdGVzZXQsIDAsIHNpemVvZih0eGhkci0+cmF0ZXNldCkpOwotCi0JLyogc2VlIGhvdyBtYW55IHJhdGVzIGdvdCB1c2VkICovCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlpZiAoaW5mby0+Y29udHJvbC5yYXRlc1tpXS5pZHggPCAwKQotCQkJYnJlYWs7Ci0JCW5yYXRlcysrOwotCX0KLQotCS8qIGxpbWl0IHRyaWVzIHRvIDgvbnJhdGVzIHBlciByYXRlICovCi0JZm9yIChpID0gMDsgaSA8IG5yYXRlczsgaSsrKSB7Ci0JCS8qCi0JCSAqIFRoZSBtYWdpYyBleHByZXNzaW9uIGhlcmUgaXMgZXF1aXZhbGVudCB0byA4L25yYXRlcyBmb3IKLQkJICogYWxsIHZhbHVlcyB0aGF0IG1hdHRlciwgYnV0IGF2b2lkcyBkaXZpc2lvbiBhbmQganVtcHMuCi0JCSAqIE5vdGUgdGhhdCBucmF0ZXMgY2FuIG9ubHkgdGFrZSB0aGUgdmFsdWVzIDEgdGhyb3VnaCA0LgotCQkgKi8KLQkJY2FsY3VsYXRlZF90cmllc1tpXSA9IG1pbl90KGludCwgKCgxNSA+PiBucmF0ZXMpIHwgMSkgKyAxLAotCQkJCQkJIGluZm8tPmNvbnRyb2wucmF0ZXNbaV0uY291bnQpOwotCQlucmVtYWluaW5nIC09IGNhbGN1bGF0ZWRfdHJpZXNbaV07Ci0JfQotCi0JLyogaWYgdGhlcmUgYXJlIHRyaWVzIGxlZnQsIGRpc3RyaWJ1dGUgZnJvbSBiYWNrIHRvIGZyb250ICovCi0JZm9yIChpID0gbnJhdGVzIC0gMTsgbnJlbWFpbmluZyA+IDAgJiYgaSA+PSAwOyBpLS0pIHsKLQkJaW50IHRtcCA9IGluZm8tPmNvbnRyb2wucmF0ZXNbaV0uY291bnQgLSBjYWxjdWxhdGVkX3RyaWVzW2ldOwotCi0JCWlmICh0bXAgPD0gMCkKLQkJCWNvbnRpbnVlOwotCQkvKiBSQyByZXF1ZXN0ZWQgbW9yZSB0cmllcyBhdCB0aGlzIHJhdGUgKi8KLQotCQl0bXAgPSBtaW5fdChpbnQsIHRtcCwgbnJlbWFpbmluZyk7Ci0JCWNhbGN1bGF0ZWRfdHJpZXNbaV0gKz0gdG1wOwotCQlucmVtYWluaW5nIC09IHRtcDsKLQl9Ci0KLQlyaWR4ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgbnJhdGVzICYmIHJpZHggPCA4OyBpKyspIHsKLQkJLyogd2UgcmVnaXN0ZXIgdGhlIHJhdGVzIGluIHBlcmZlY3Qgb3JkZXIgKi8KLQkJcmF0ZSA9IGluZm8tPmNvbnRyb2wucmF0ZXNbaV0uaWR4OwotCQlpZiAoaW5mby0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQotCQkJcmF0ZSArPSA0OwotCi0JCS8qIHN0b3JlIHRoZSBjb3VudCB3ZSBhY3R1YWxseSBjYWxjdWxhdGVkIGZvciBUWCBzdGF0dXMgKi8KLQkJaW5mby0+Y29udHJvbC5yYXRlc1tpXS5jb3VudCA9IGNhbGN1bGF0ZWRfdHJpZXNbaV07Ci0KLQkJcmNfZmxhZ3MgPSBpbmZvLT5jb250cm9sLnJhdGVzW2ldLmZsYWdzOwotCQlpZiAocmNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKSB7Ci0JCQlyYXRlIHw9IDB4MTA7Ci0JCQljdHNfcmF0ZSB8PSAweDEwOwotCQl9Ci0JCWlmIChyY19mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykKLQkJCXJhdGUgfD0gMHg0MDsKLQkJZWxzZSBpZiAocmNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKQotCQkJcmF0ZSB8PSAweDIwOwotCQlmb3IgKGogPSAwOyBqIDwgY2FsY3VsYXRlZF90cmllc1tpXSAmJiByaWR4IDwgODsgaisrKSB7Ci0JCQl0eGhkci0+cmF0ZXNldFtyaWR4XSA9IHJhdGU7Ci0JCQlyaWR4Kys7Ci0JCX0KLQl9Ci0KLQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpCi0JCWhkcl9mbGFncyB8PSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfU0VRTlI7Ci0KLQkvKiBUT0RPOiBlbmFibGUgYnVyc3RpbmcgKi8KLQloZHItPmZsYWdzID0gY3B1X3RvX2xlMTYoaGRyX2ZsYWdzKTsKLQloZHItPnRyaWVzID0gcmlkeDsKLQl0eGhkci0+cnRzX3JhdGVfaWR4ID0gMDsKLQlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpIHsKLQkJdHhoZHItPmtleV90eXBlID0gcDU0X2NvbnZlcnRfYWxnbyhpbmZvLT5jb250cm9sLmh3X2tleS0+YWxnKTsKLQkJdHhoZHItPmtleV9sZW4gPSBtaW4oKHU4KTE2LCBpbmZvLT5jb250cm9sLmh3X2tleS0+a2V5bGVuKTsKLQkJbWVtY3B5KHR4aGRyLT5rZXksIGluZm8tPmNvbnRyb2wuaHdfa2V5LT5rZXksIHR4aGRyLT5rZXlfbGVuKTsKLQkJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1RLSVApIHsKLQkJCWlmICh1bmxpa2VseShza2JfdGFpbHJvb20oc2tiKSA8IDEyKSkKLQkJCQlnb3RvIGVycjsKLQkJCS8qIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBNSUMga2V5ICovCi0JCQlsZW4gKz0gODsKLQkJCW1lbWNweShza2JfcHV0KHNrYiwgOCksICYoaW5mby0+Y29udHJvbC5od19rZXktPmtleQotCQkJCVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfVFhfTUlDX0tFWV0pLCA4KTsKLQkJfQotCQkvKiByZXNlcnZlIHNvbWUgc3BhY2UgZm9yIElDViAqLwotCQlsZW4gKz0gaW5mby0+Y29udHJvbC5od19rZXktPmljdl9sZW47Ci0JCW1lbXNldChza2JfcHV0KHNrYiwgaW5mby0+Y29udHJvbC5od19rZXktPmljdl9sZW4pLCAwLAotCQkgICAgICAgaW5mby0+Y29udHJvbC5od19rZXktPmljdl9sZW4pOwotCX0gZWxzZSB7Ci0JCXR4aGRyLT5rZXlfdHlwZSA9IDA7Ci0JCXR4aGRyLT5rZXlfbGVuID0gMDsKLQl9Ci0JdHhoZHItPmNyeXB0X29mZnNldCA9IGNyeXB0X29mZnNldDsKLQl0eGhkci0+aHdfcXVldWUgPSBxdWV1ZTsKLQl0eGhkci0+YmFja2xvZyA9IGN1cnJlbnRfcXVldWUtPmxlbjsKLQltZW1zZXQodHhoZHItPmR1cmF0aW9ucywgMCwgc2l6ZW9mKHR4aGRyLT5kdXJhdGlvbnMpKTsKLQl0eGhkci0+dHhfYW50ZW5uYSA9ICgoaW5mby0+YW50ZW5uYV9zZWxfdHggPT0gMCkgPwotCQkyIDogaW5mby0+YW50ZW5uYV9zZWxfdHggLSAxKSAmIHByaXYtPnR4X2RpdmVyc2l0eV9tYXNrOwotCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7Ci0JCXR4aGRyLT5sb25nYm93LmN0c19yYXRlID0gY3RzX3JhdGU7Ci0JCXR4aGRyLT5sb25nYm93Lm91dHB1dF9wb3dlciA9IGNwdV90b19sZTE2KHByaXYtPm91dHB1dF9wb3dlcik7Ci0JfSBlbHNlIHsKLQkJdHhoZHItPm5vcm1hbC5vdXRwdXRfcG93ZXIgPSBwcml2LT5vdXRwdXRfcG93ZXI7Ci0JCXR4aGRyLT5ub3JtYWwuY3RzX3JhdGUgPSBjdHNfcmF0ZTsKLQl9Ci0JaWYgKHBhZGRpbmcpCi0JCXR4aGRyLT5hbGlnblswXSA9IHBhZGRpbmc7Ci0KLQloZHItPmxlbiA9IGNwdV90b19sZTE2KGxlbik7Ci0JLyogbW9kaWZpZXMgc2tiLT5jYiBhbmQgd2l0aCBpdCBpbmZvLCBzbyBtdXN0IGJlIGxhc3QhICovCi0JaWYgKHVubGlrZWx5KHA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIHNrYiwgaGRyLCBza2ItPmxlbiArIHRpbV9sZW4pKSkKLQkJZ290byBlcnI7Ci0JcHJpdi0+dHgoZGV2LCBza2IpOwotCi0JcXVldWVfZGVsYXllZF93b3JrKGRldi0+d29ya3F1ZXVlLCAmcHJpdi0+d29yaywKLQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoUDU0X1RYX0ZSQU1FX0xJRkVUSU1FKSk7Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwotCi0gZXJyOgotCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCp0eGhkcikgKyBwYWRkaW5nKTsKLQljdXJyZW50X3F1ZXVlLT5sZW4tLTsKLQljdXJyZW50X3F1ZXVlLT5jb3VudC0tOwotCXJldHVybiBORVRERVZfVFhfQlVTWTsKLX0KLQotc3RhdGljIGludCBwNTRfc2V0dXBfbWFjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBwNTRfc2V0dXBfbWFjICpzZXR1cDsKLQl1MTYgbW9kZTsKLQotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpzZXR1cCksCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9TRVRVUCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc2V0dXAgPSAoc3RydWN0IHA1NF9zZXR1cF9tYWMgKikgc2tiX3B1dChza2IsIHNpemVvZigqc2V0dXApKTsKLQlpZiAoZGV2LT5jb25mLnJhZGlvX2VuYWJsZWQpIHsKLQkJc3dpdGNoIChwcml2LT5tb2RlKSB7Ci0JCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfU1RBVElPTjsKLQkJCWJyZWFrOwotCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9BUDsKLQkJCWJyZWFrOwotCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6Ci0JCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX0lCU1M7Ci0JCQlicmVhazsKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgotCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9QUk9NSVNDVU9VUzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9ISUJFUk5BVEU7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqICJUUkFOU1BBUkVOVCBhbmQgUFJPTUlTQ1VPVVMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKLQkJICogU1RTVzQ1WDBDIExNQUMgQVBJIC0gcGFnZSAxMgotCQkgKi8KLQkJaWYgKCgocHJpdi0+ZmlsdGVyX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSB8fAotCQkgICAgIChwcml2LT5maWx0ZXJfZmxhZ3MgJiBGSUZfT1RIRVJfQlNTKSkgJiYKLQkJICAgIChtb2RlICE9IFA1NF9GSUxURVJfVFlQRV9QUk9NSVNDVU9VUykpCi0JCQltb2RlIHw9IFA1NF9GSUxURVJfVFlQRV9UUkFOU1BBUkVOVDsKLQl9IGVsc2UKLQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9ISUJFUk5BVEU7Ci0KLQlzZXR1cC0+bWFjX21vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKLQltZW1jcHkoc2V0dXAtPm1hY19hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShzZXR1cC0+YnNzaWQsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7Ci0Jc2V0dXAtPnJ4X2FudGVubmEgPSAyICYgcHJpdi0+cnhfZGl2ZXJzaXR5X21hc2s7IC8qIGF1dG9tYXRpYyAqLwotCXNldHVwLT5yeF9hbGlnbiA9IDA7Ci0JaWYgKHByaXYtPmZ3X3ZhciA8IDB4NTAwKSB7Ci0JCXNldHVwLT52MS5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOwotCQltZW1zZXQoc2V0dXAtPnYxLnJ0c19yYXRlcywgMCwgOCk7Ci0JCXNldHVwLT52MS5yeF9hZGRyID0gY3B1X3RvX2xlMzIocHJpdi0+cnhfZW5kKTsKLQkJc2V0dXAtPnYxLm1heF9yeCA9IGNwdV90b19sZTE2KHByaXYtPnJ4X210dSk7Ci0JCXNldHVwLT52MS5yeGh3ID0gY3B1X3RvX2xlMTYocHJpdi0+cnhodyk7Ci0JCXNldHVwLT52MS53YWtldXBfdGltZXIgPSBjcHVfdG9fbGUxNihwcml2LT53YWtldXBfdGltZXIpOwotCQlzZXR1cC0+djEudW5hbGxvYzAgPSBjcHVfdG9fbGUxNigwKTsKLQl9IGVsc2UgewotCQlzZXR1cC0+djIucnhfYWRkciA9IGNwdV90b19sZTMyKHByaXYtPnJ4X2VuZCk7Ci0JCXNldHVwLT52Mi5tYXhfcnggPSBjcHVfdG9fbGUxNihwcml2LT5yeF9tdHUpOwotCQlzZXR1cC0+djIucnhodyA9IGNwdV90b19sZTE2KHByaXYtPnJ4aHcpOwotCQlzZXR1cC0+djIudGltZXIgPSBjcHVfdG9fbGUxNihwcml2LT53YWtldXBfdGltZXIpOwotCQlzZXR1cC0+djIudHJ1bmNhdGUgPSBjcHVfdG9fbGUxNig0ODg5Nik7Ci0JCXNldHVwLT52Mi5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOwotCQlzZXR1cC0+djIuc2Jzc19vZmZzZXQgPSAwOwotCQlzZXR1cC0+djIubWNhc3Rfd2luZG93ID0gMDsKLQkJc2V0dXAtPnYyLnJ4X3Jzc2lfdGhyZXNob2xkID0gMDsKLQkJc2V0dXAtPnYyLnJ4X2VkX3RocmVzaG9sZCA9IDA7Ci0JCXNldHVwLT52Mi5yZWZfY2xvY2sgPSBjcHVfdG9fbGUzMig2NDQyNDUwOTQpOwotCQlzZXR1cC0+djIubHBmX2JhbmR3aWR0aCA9IGNwdV90b19sZTE2KDY1NTM1KTsKLQkJc2V0dXAtPnYyLm9zY19zdGFydF9kZWxheSA9IGNwdV90b19sZTE2KDY1NTM1KTsKLQl9Ci0JcHJpdi0+dHgoZGV2LCBza2IpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHA1NF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTE2IG1vZGUsIHUxNiBkd2VsbCkKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBwNTRfaGRyICpoZHI7Ci0Jc3RydWN0IHA1NF9zY2FuX2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5ICppcV9hdXRvY2FsOwotCXVuaW9uIHA1NF9zY2FuX2JvZHlfdW5pb24gKmJvZHk7Ci0Jc3RydWN0IHA1NF9zY2FuX3RhaWxfcmF0ZSAqcmF0ZTsKLQlzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5ICpyc3NpOwotCXVuc2lnbmVkIGludCBpOwotCXZvaWQgKmVudHJ5OwotCWludCBiYW5kID0gZGV2LT5jb25mLmNoYW5uZWwtPmJhbmQ7Ci0JX19sZTE2IGZyZXEgPSBjcHVfdG9fbGUxNihkZXYtPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwotCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmhlYWQpICsKLQkJCSAgICAyICsgc2l6ZW9mKCppcV9hdXRvY2FsKSArIHNpemVvZigqYm9keSkgKwotCQkJICAgIHNpemVvZigqcmF0ZSkgKyAyICogc2l6ZW9mKCpyc3NpKSwKLQkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1NDQU4sIEdGUF9BVE9NSUMpOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWhlYWQgPSAoc3RydWN0IHA1NF9zY2FuX2hlYWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqaGVhZCkpOwotCW1lbXNldChoZWFkLT5zY2FuX3BhcmFtcywgMCwgc2l6ZW9mKGhlYWQtPnNjYW5fcGFyYW1zKSk7Ci0JaGVhZC0+bW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOwotCWhlYWQtPmR3ZWxsID0gY3B1X3RvX2xlMTYoZHdlbGwpOwotCWhlYWQtPmZyZXEgPSBmcmVxOwotCi0JaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKLQkJX19sZTE2ICpwYV9wb3dlcl9wb2ludHMgPSAoX19sZTE2ICopIHNrYl9wdXQoc2tiLCAyKTsKLQkJKnBhX3Bvd2VyX3BvaW50cyA9IGNwdV90b19sZTE2KDB4MGMpOwotCX0KLQotCWlxX2F1dG9jYWwgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCppcV9hdXRvY2FsKSk7Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPmlxX2F1dG9jYWxfbGVuOyBpKyspIHsKLQkJaWYgKHByaXYtPmlxX2F1dG9jYWxbaV0uZnJlcSAhPSBmcmVxKQotCQkJY29udGludWU7Ci0KLQkJbWVtY3B5KGlxX2F1dG9jYWwsICZwcml2LT5pcV9hdXRvY2FsW2ldLnBhcmFtcywKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkpKTsKLQkJYnJlYWs7Ci0JfQotCWlmIChpID09IHByaXYtPmlxX2F1dG9jYWxfbGVuKQotCQlnb3RvIGVycjsKLQotCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKQotCQlib2R5ID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZihib2R5LT5sb25nYm93KSk7Ci0JZWxzZQotCQlib2R5ID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZihib2R5LT5ub3JtYWwpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXM7IGkrKykgewotCQlfX2xlMTYgKmVudHJ5X2ZyZXEgPSAodm9pZCAqKSAocHJpdi0+b3V0cHV0X2xpbWl0LT5kYXRhICsKLQkJCQkgICAgIHByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSAqIGkpOwotCi0JCWlmICgqZW50cnlfZnJlcSAhPSBmcmVxKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKLQkJCW1lbWNweSgmYm9keS0+bG9uZ2Jvdy5wb3dlcl9saW1pdHMsCi0JCQkgICAgICAgKHZvaWQgKikgZW50cnlfZnJlcSArIHNpemVvZihfX2xlMTYpLAotCQkJICAgICAgIHByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0ICpsaW1pdHMgPQotCQkJICAgICAgICh2b2lkICopIGVudHJ5X2ZyZXE7Ci0KLQkJCWJvZHktPm5vcm1hbC52YWxfYmFya2VyID0gMHgzODsKLQkJCWJvZHktPm5vcm1hbC52YWxfYnBzayA9IGJvZHktPm5vcm1hbC5kdXBfYnBzayA9Ci0JCQkJbGltaXRzLT52YWxfYnBzazsKLQkJCWJvZHktPm5vcm1hbC52YWxfcXBzayA9IGJvZHktPm5vcm1hbC5kdXBfcXBzayA9Ci0JCQkJbGltaXRzLT52YWxfcXBzazsKLQkJCWJvZHktPm5vcm1hbC52YWxfMTZxYW0gPSBib2R5LT5ub3JtYWwuZHVwXzE2cWFtID0KLQkJCQlsaW1pdHMtPnZhbF8xNnFhbTsKLQkJCWJvZHktPm5vcm1hbC52YWxfNjRxYW0gPSBib2R5LT5ub3JtYWwuZHVwXzY0cWFtID0KLQkJCQlsaW1pdHMtPnZhbF82NHFhbTsKLQkJfQotCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzKQotCQlnb3RvIGVycjsKLQotCWVudHJ5ID0gKHZvaWQgKikocHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSArIHByaXYtPmN1cnZlX2RhdGEtPm9mZnNldCk7Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPmN1cnZlX2RhdGEtPmVudHJpZXM7IGkrKykgewotCQlpZiAoKigoX19sZTE2ICopZW50cnkpICE9IGZyZXEpIHsKLQkJCWVudHJ5ICs9IHByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemU7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7Ci0JCQltZW1jcHkoJmJvZHktPmxvbmdib3cuY3VydmVfZGF0YSwKLQkJCQkodm9pZCAqKSBlbnRyeSArIHNpemVvZihfX2xlMTYpLAotCQkJCXByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemUpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IHA1NF9zY2FuX2JvZHkgKmNoYW4gPSAmYm9keS0+bm9ybWFsOwotCQkJc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID0KLQkJCQkodm9pZCAqKSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhOwotCi0JCQllbnRyeSArPSBzaXplb2YoX19sZTE2KTsKLQkJCWNoYW4tPnBhX3BvaW50c19wZXJfY3VydmUgPSA4OwotCQkJbWVtc2V0KGNoYW4tPmN1cnZlX2RhdGEsIDAsIHNpemVvZigqY2hhbi0+Y3VydmVfZGF0YSkpOwotCQkJbWVtY3B5KGNoYW4tPmN1cnZlX2RhdGEsIGVudHJ5LAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlKSAqCi0JCQkgICAgICAgbWluKCh1OCk4LCBjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWwpKTsKLQkJfQotCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcykKLQkJZ290byBlcnI7Ci0KLQlpZiAoKHByaXYtPmZ3X3ZhciA+PSAweDUwMCkgJiYgKHByaXYtPmZ3X3ZhciA8IDB4NTA5KSkgewotCQlyYXRlID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqcmF0ZSkpOwotCQlyYXRlLT5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOwotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJhdGUtPnJ0c19yYXRlcyk7IGkrKykKLQkJCXJhdGUtPnJ0c19yYXRlc1tpXSA9IGk7Ci0JfQotCi0JcnNzaSA9IChzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5ICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJzc2kpKTsKLQlyc3NpLT5tdWwgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCk7Ci0JcnNzaS0+YWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpOwotCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7Ci0JCS8qIExvbmdib3cgZnJvbnRlbmQgbmVlZHMgZXZlciBtb3JlICovCi0JCXJzc2kgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyc3NpKSk7Ci0JCXJzc2ktPm11bCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubG9uZ2Jvd191bmtuKTsKLQkJcnNzaS0+YWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5sb25nYm93X3VuazIpOwotCX0KLQotCWlmIChwcml2LT5md192YXIgPj0gMHg1MDkpIHsKLQkJcmF0ZSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJhdGUpKTsKLQkJcmF0ZS0+YmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihyYXRlLT5ydHNfcmF0ZXMpOyBpKyspCi0JCQlyYXRlLT5ydHNfcmF0ZXNbaV0gPSBpOwotCX0KLQotCWhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2ItPmRhdGE7Ci0JaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbiAtIHNpemVvZigqaGRyKSk7Ci0KLQlwcml2LT50eChkZXYsIHNrYik7Ci0JcmV0dXJuIDA7Ci0KLSBlcnI6Ci0JcHJpbnRrKEtFUk5fRVJSICIlczogZnJlcXVlbmN5IGNoYW5nZSBmYWlsZWRcbiIsIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOwotCXA1NF9mcmVlX3NrYihkZXYsIHNrYik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X3NldF9sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBwNTRfbGVkICpsZWQ7Ci0KLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqbGVkKSwKLQkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX0xFRCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbGVkID0gKHN0cnVjdCBwNTRfbGVkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmxlZCkpOwotCWxlZC0+ZmxhZ3MgPSBjcHVfdG9fbGUxNigweDAwMDMpOwotCWxlZC0+bWFza1swXSA9IGxlZC0+bWFza1sxXSA9IGNwdV90b19sZTE2KHByaXYtPnNvZnRsZWRfc3RhdGUpOwotCWxlZC0+ZGVsYXlbMF0gPSBjcHVfdG9fbGUxNigxKTsKLQlsZWQtPmRlbGF5WzFdID0gY3B1X3RvX2xlMTYoMCk7Ci0JcHJpdi0+dHgoZGV2LCBza2IpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFA1NF9TRVRfUVVFVUUocXVldWUsIGFpX2ZzLCBjd19taW4sIGN3X21heCwgX3R4b3ApCVwKLWRvIHsJIAkJCQkJCQlcCi0JcXVldWUuYWlmcyA9IGNwdV90b19sZTE2KGFpX2ZzKTsJCQlcCi0JcXVldWUuY3dtaW4gPSBjcHVfdG9fbGUxNihjd19taW4pOwkJCVwKLQlxdWV1ZS5jd21heCA9IGNwdV90b19sZTE2KGN3X21heCk7CQkJXAotCXF1ZXVlLnR4b3AgPSBjcHVfdG9fbGUxNihfdHhvcCk7CQkJXAotfSB3aGlsZSgwKQotCi1zdGF0aWMgaW50IHA1NF9zZXRfZWRjZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgcDU0X2VkY2YgKmVkY2Y7Ci0KLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqZWRjZiksCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9EQ0ZJTklULCBHRlBfQVRPTUlDKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQllZGNmID0gKHN0cnVjdCBwNTRfZWRjZiAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmVkY2YpKTsKLQlpZiAocHJpdi0+dXNlX3Nob3J0X3Nsb3QpIHsKLQkJZWRjZi0+c2xvdHRpbWUgPSA5OwotCQllZGNmLT5zaWZzID0gMHgxMDsKLQkJZWRjZi0+ZW9mcGFkID0gMHgwMDsKLQl9IGVsc2UgewotCQllZGNmLT5zbG90dGltZSA9IDIwOwotCQllZGNmLT5zaWZzID0gMHgwYTsKLQkJZWRjZi0+ZW9mcGFkID0gMHgwNjsKLQl9Ci0JLyogKHNlZSBwcmlzbTU0L2lzbF9vaWQuaCBmb3IgZnVydGhlciBkZXRhaWxzKSAqLwotCWVkY2YtPmZyYW1lYnVyc3QgPSBjcHVfdG9fbGUxNigwKTsKLQllZGNmLT5yb3VuZF90cmlwX2RlbGF5ID0gY3B1X3RvX2xlMTYoMCk7Ci0JZWRjZi0+ZmxhZ3MgPSAwOwotCW1lbXNldChlZGNmLT5tYXBwaW5nLCAwLCBzaXplb2YoZWRjZi0+bWFwcGluZykpOwotCW1lbWNweShlZGNmLT5xdWV1ZSwgcHJpdi0+cW9zX3BhcmFtcywgc2l6ZW9mKGVkY2YtPnF1ZXVlKSk7Ci0JcHJpdi0+dHgoZGV2LCBza2IpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHA1NF9zZXRfcHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHA1NF9wc20gKnBzbTsKLQl1MTYgbW9kZTsKLQlpbnQgaTsKLQotCWlmIChkZXYtPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKLQkJbW9kZSA9IFA1NF9QU00gfCBQNTRfUFNNX0JFQUNPTl9USU1FT1VUIHwgUDU0X1BTTV9EVElNIHwKLQkJICAgICAgIFA1NF9QU01fQ0hFQ0tTVU0gfCBQNTRfUFNNX01DQkM7Ci0JZWxzZQotCQltb2RlID0gUDU0X1BTTV9DQU07Ci0KLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqcHNtKSwKLQkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1BTTSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcHNtID0gKHN0cnVjdCBwNTRfcHNtICopc2tiX3B1dChza2IsIHNpemVvZigqcHNtKSk7Ci0JcHNtLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7Ci0JcHNtLT5haWQgPSBjcHVfdG9fbGUxNihwcml2LT5haWQpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBzbS0+aW50ZXJ2YWxzKTsgaSsrKSB7Ci0JCXBzbS0+aW50ZXJ2YWxzW2ldLmludGVydmFsID0KLQkJCWNwdV90b19sZTE2KGRldi0+Y29uZi5saXN0ZW5faW50ZXJ2YWwpOwotCQlwc20tPmludGVydmFsc1tpXS5wZXJpb2RzID0gY3B1X3RvX2xlMTYoMSk7Ci0JfQotCi0JcHNtLT5iZWFjb25fcnNzaV9za2lwX21heCA9IDIwMDsKLQlwc20tPnJzc2lfZGVsdGFfdGhyZXNob2xkID0gMDsKLQlwc20tPm5yID0gMTA7Ci0JcHNtLT5leGNsdWRlWzBdID0gMDsKLQotCXByaXYtPnR4KGRldiwgc2tiKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHA1NF9iZWFjb25fdGltKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JLyoKLQkgKiB0aGUgZ29vZCBleGN1c2UgZm9yIHRoaXMgbWVzcyBpcyAuLi4gdGhlIGZpcm13YXJlLgotCSAqIFRoZSBkdW1teSBUSU0gTVVTVCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBiZWFjb24gZnJhbWUsCi0JICogYmVjYXVzZSBpdCdsbCBiZSBvdmVyd3JpdHRlbiEKLQkgKi8KLQotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLT5kYXRhOwotCXU4ICpwb3MsICplbmQ7Ci0KLQlpZiAoc2tiLT5sZW4gPD0gc2l6ZW9mKG1nbXQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBvcyA9ICh1OCAqKW1nbXQtPnUuYmVhY29uLnZhcmlhYmxlOwotCWVuZCA9IHNrYi0+ZGF0YSArIHNrYi0+bGVuOwotCXdoaWxlIChwb3MgPCBlbmQpIHsKLQkJaWYgKHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAocG9zWzBdID09IFdMQU5fRUlEX1RJTSkgewotCQkJdTggZHRpbV9sZW4gPSBwb3NbMV07Ci0JCQl1OCBkdGltX3BlcmlvZCA9IHBvc1szXTsKLQkJCXU4ICpuZXh0ID0gcG9zICsgMiArIGR0aW1fbGVuOwotCi0JCQlpZiAoZHRpbV9sZW4gPCAzKQotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQltZW1tb3ZlKHBvcywgbmV4dCwgZW5kIC0gbmV4dCk7Ci0KLQkJCWlmIChkdGltX2xlbiA+IDMpCi0JCQkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIChkdGltX2xlbiAtIDMpKTsKLQotCQkJcG9zID0gZW5kIC0gKGR0aW1fbGVuICsgMik7Ci0KLQkJCS8qIGFkZCB0aGUgZHVtbXkgYXQgdGhlIGVuZCAqLwotCQkJcG9zWzBdID0gV0xBTl9FSURfVElNOwotCQkJcG9zWzFdID0gMzsKLQkJCXBvc1syXSA9IDA7Ci0JCQlwb3NbM10gPSBkdGltX3BlcmlvZDsKLQkJCXBvc1s0XSA9IDA7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlwb3MgKz0gMiArIHBvc1sxXTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X2JlYWNvbl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uOwotCWludCByZXQ7Ci0KLQlpZiAocHJpdi0+Y2FjaGVkX2JlYWNvbikgewotCQlwNTRfdHhfY2FuY2VsKGRldiwgcHJpdi0+Y2FjaGVkX2JlYWNvbik7Ci0JCS8qIHdhaXQgZm9yIHRoZSBsYXN0IGJlYWNvbiB0aGUgYmUgZnJlZWQgKi8KLQkJbXNsZWVwKDEwKTsKLQl9Ci0KLQliZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChkZXYsIHZpZik7Ci0JaWYgKCFiZWFjb24pCi0JCXJldHVybiAtRU5PTUVNOwotCXJldCA9IHA1NF9iZWFjb25fdGltKGJlYWNvbik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlyZXQgPSBwNTRfdHgoZGV2LCBiZWFjb24pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JcHJpdi0+Y2FjaGVkX2JlYWNvbiA9IGJlYWNvbjsKLQlwcml2LT50c2ZfaGlnaDMyID0gMDsKLQlwcml2LT50c2ZfbG93MzIgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlpbnQgZXJyOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JZXJyID0gcHJpdi0+b3BlbihkZXYpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCVA1NF9TRVRfUVVFVUUocHJpdi0+cW9zX3BhcmFtc1swXSwgMHgwMDAyLCAweDAwMDMsIDB4MDAwNywgNDcpOwotCVA1NF9TRVRfUVVFVUUocHJpdi0+cW9zX3BhcmFtc1sxXSwgMHgwMDAyLCAweDAwMDcsIDB4MDAwZiwgOTQpOwotCVA1NF9TRVRfUVVFVUUocHJpdi0+cW9zX3BhcmFtc1syXSwgMHgwMDAzLCAweDAwMGYsIDB4MDNmZiwgMCk7Ci0JUDU0X1NFVF9RVUVVRShwcml2LT5xb3NfcGFyYW1zWzNdLCAweDAwMDcsIDB4MDAwZiwgMHgwM2ZmLCAwKTsKLQllcnIgPSBwNTRfc2V0X2VkY2YoZGV2KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCW1lbXNldChwcml2LT5ic3NpZCwgfjAsIEVUSF9BTEVOKTsKLQlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKLQllcnIgPSBwNTRfc2V0dXBfbWFjKGRldik7Ci0JaWYgKGVycikgewotCQlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXF1ZXVlX2RlbGF5ZWRfd29yayhkZXYtPndvcmtxdWV1ZSwgJnByaXYtPndvcmssIDApOwotCi0JcHJpdi0+c29mdGxlZF9zdGF0ZSA9IDA7Ci0JZXJyID0gcDU0X3NldF9sZWRzKGRldik7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHA1NF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOwotCXByaXYtPnNvZnRsZWRfc3RhdGUgPSAwOwotCXA1NF9zZXRfbGVkcyhkZXYpOwotCi0jaWZkZWYgQ09ORklHX1A1NF9MRURTCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5sZWRfd29yayk7Ci0jZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT53b3JrKTsKLQlpZiAocHJpdi0+Y2FjaGVkX2JlYWNvbikKLQkJcDU0X3R4X2NhbmNlbChkZXYsIHByaXYtPmNhY2hlZF9iZWFjb24pOwotCi0JcHJpdi0+c3RvcChkZXYpOwotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnByaXYtPnR4X3F1ZXVlKSkpCi0JCWtmcmVlX3NrYihza2IpOwotCXByaXYtPmNhY2hlZF9iZWFjb24gPSBOVUxMOwotCXByaXYtPnRzZl9oaWdoMzIgPSBwcml2LT50c2ZfbG93MzIgPSAwOwotCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCWlmIChwcml2LT5tb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHsKLQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKLQotCXN3aXRjaCAoY29uZi0+dHlwZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgotCQlwcml2LT5tb2RlID0gY29uZi0+dHlwZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCW1lbWNweShwcml2LT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQlwNTRfc2V0dXBfbWFjKGRldik7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcDU0X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCXByaXYtPnZpZiA9IE5VTEw7Ci0JaWYgKHByaXYtPmNhY2hlZF9iZWFjb24pCi0JCXA1NF90eF9jYW5jZWwoZGV2LCBwcml2LT5jYWNoZWRfYmVhY29uKTsKLQlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKLQltZW1zZXQocHJpdi0+bWFjX2FkZHIsIDAsIEVUSF9BTEVOKTsKLQltZW1zZXQocHJpdi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKLQlwNTRfc2V0dXBfbWFjKGRldik7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLX0KLQotc3RhdGljIGludCBwNTRfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTMyIGNoYW5nZWQpCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmRldi0+Y29uZjsKLQotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKQotCQlwcml2LT5vdXRwdXRfcG93ZXIgPSBjb25mLT5wb3dlcl9sZXZlbCA8PCAyOwotCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQpIHsKLQkJcmV0ID0gcDU0X3NldHVwX21hYyhkZXYpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfQotCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpIHsKLQkJcmV0ID0gcDU0X3NjYW4oZGV2LCBQNTRfU0NBTl9FWElULCAwKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgewotCQlyZXQgPSBwNTRfc2V0X3BzKGRldik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHA1NF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCi0JCQkJIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJIGludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0KLQkqdG90YWxfZmxhZ3MgJj0gRklGX1BST01JU0NfSU5fQlNTIHwKLQkJCUZJRl9PVEhFUl9CU1M7Ci0KLQlwcml2LT5maWx0ZXJfZmxhZ3MgPSAqdG90YWxfZmxhZ3M7Ci0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIChGSUZfUFJPTUlTQ19JTl9CU1MgfCBGSUZfT1RIRVJfQlNTKSkKLQkJcDU0X3NldHVwX21hYyhkZXYpOwotfQotCi1zdGF0aWMgaW50IHA1NF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTE2IHF1ZXVlLAotCQkgICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JaWYgKChwYXJhbXMpICYmICEocXVldWUgPiA0KSkgewotCQlQNTRfU0VUX1FVRVVFKHByaXYtPnFvc19wYXJhbXNbcXVldWVdLCBwYXJhbXMtPmFpZnMsCi0JCQlwYXJhbXMtPmN3X21pbiwgcGFyYW1zLT5jd19tYXgsIHBhcmFtcy0+dHhvcCk7Ci0JCXJldCA9IHA1NF9zZXRfZWRjZihkZXYpOwotCX0gZWxzZQotCQlyZXQgPSAtRUlOVkFMOwotCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBwNTRfaW5pdF94Ym93X3N5bnRoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBwNTRfeGJvd19zeW50aCAqeGJvdzsKLQotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCp4Ym93KSwKLQkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1hCT1dfU1lOVEhfQ0ZHLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl4Ym93ID0gKHN0cnVjdCBwNTRfeGJvd19zeW50aCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKnhib3cpKTsKLQl4Ym93LT5tYWdpYzEgPSBjcHVfdG9fbGUxNigweDEpOwotCXhib3ctPm1hZ2ljMiA9IGNwdV90b19sZTE2KDB4Mik7Ci0JeGJvdy0+ZnJlcSA9IGNwdV90b19sZTE2KDUzOTApOwotCW1lbXNldCh4Ym93LT5wYWRkaW5nLCAwLCBzaXplb2YoeGJvdy0+cGFkZGluZykpOwotCXByaXYtPnR4KGRldiwgc2tiKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcDU0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwNTRfY29tbW9uLAotCQkJCQkgICAgICAgd29yay53b3JrKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBwcml2LT5odzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JaWYgKHVubGlrZWx5KHByaXYtPm1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpKQotCQlyZXR1cm4gOwotCi0JLyoKLQkgKiBUT0RPOiB3YWxrIHRocm91Z2ggdHhfcXVldWUgYW5kIGRvIHRoZSBmb2xsb3dpbmcgdGFza3MKLQkgKiAJMS4gaW5pdGlhdGUgYnVyc3RzLgotCSAqICAgICAgMi4gY2FuY2VsIHN0dWNrIGZyYW1lcyAvIHJlc2V0IHRoZSBkZXZpY2UgaWYgbmVjZXNzYXJ5LgotCSAqLwotCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MLAotCQkJICAgIHNpemVvZihzdHJ1Y3QgcDU0X3N0YXRpc3RpY3MpLAotCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfU1RBVF9SRUFEQkFDSywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiA7Ci0KLQlwcml2LT50eChkZXYsIHNrYik7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkgc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCi0JbWVtY3B5KHN0YXRzLCAmcHJpdi0+c3RhdHMsIHNpemVvZigqc3RhdHMpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwNTRfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCW1lbWNweShzdGF0cywgJnByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9EQVRBXSwKLQkgICAgICAgc2l6ZW9mKHN0YXRzWzBdKSAqIGRldi0+cXVldWVzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcDU0X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLAotCQkJCSB1MzIgY2hhbmdlZCkKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCkgewotCQltZW1jcHkocHJpdi0+YnNzaWQsIGluZm8tPmJzc2lkLCBFVEhfQUxFTik7Ci0JCXJldCA9IHA1NF9zZXR1cF9tYWMoZGV2KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OKSB7Ci0JCXJldCA9IHA1NF9zY2FuKGRldiwgUDU0X1NDQU5fRVhJVCwgMCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQkJcmV0ID0gcDU0X3NldHVwX21hYyhkZXYpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JCXJldCA9IHA1NF9iZWFjb25fdXBkYXRlKGRldiwgdmlmKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQkvKiBYWFg6IHRoaXMgbWltaWNzIGhhdmluZyB0d28gY2FsbGJhY2tzLi4uIGNsZWFuIHVwICovCi0gb3V0OgotCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0KLQlpZiAoY2hhbmdlZCAmIChCU1NfQ0hBTkdFRF9FUlBfU0xPVCB8IEJTU19DSEFOR0VEX0JFQUNPTikpIHsKLQkJcHJpdi0+dXNlX3Nob3J0X3Nsb3QgPSBpbmZvLT51c2Vfc2hvcnRfc2xvdDsKLQkJcDU0X3NldF9lZGNmKGRldik7Ci0JfQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHsKLQkJaWYgKGRldi0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCQlwcml2LT5iYXNpY19yYXRlX21hc2sgPSAoaW5mby0+YmFzaWNfcmF0ZXMgPDwgNCk7Ci0JCWVsc2UKLQkJCXByaXYtPmJhc2ljX3JhdGVfbWFzayA9IGluZm8tPmJhc2ljX3JhdGVzOwotCQlwNTRfc2V0dXBfbWFjKGRldik7Ci0JCWlmIChwcml2LT5md192YXIgPj0gMHg1MDApCi0JCQlwNTRfc2NhbihkZXYsIFA1NF9TQ0FOX0VYSVQsIDApOwotCX0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7Ci0JCWlmIChpbmZvLT5hc3NvYykgewotCQkJcHJpdi0+YWlkID0gaW5mby0+YWlkOwotCQkJcHJpdi0+d2FrZXVwX3RpbWVyID0gaW5mby0+YmVhY29uX2ludCAqCi0JCQkJCSAgICAgaW5mby0+ZHRpbV9wZXJpb2QgKiA1OwotCQkJcDU0X3NldHVwX21hYyhkZXYpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IHA1NF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHA1NF9rZXljYWNoZSAqcnhrZXk7Ci0JaW50IHNsb3QsIHJldCA9IDA7Ci0JdTggYWxnbyA9IDA7Ci0KLQlpZiAobW9kcGFyYW1fbm9od2NyeXB0KQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlpZiAoY21kID09IFNFVF9LRVkpIHsKLQkJc3dpdGNoIChrZXktPmFsZykgewotCQljYXNlIEFMR19US0lQOgotCQkJaWYgKCEocHJpdi0+cHJpdmFjeV9jYXBzICYgKEJSX0RFU0NfUFJJVl9DQVBfTUlDSEFFTCB8Ci0JCQkgICAgICBCUl9ERVNDX1BSSVZfQ0FQX1RLSVApKSkgewotCQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCQkJCWdvdG8gb3V0X3VubG9jazsKLQkJCX0KLQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOwotCQkJYWxnbyA9IFA1NF9DUllQVE9fVEtJUE1JQ0hBRUw7Ci0JCQlicmVhazsKLQkJY2FzZSBBTEdfV0VQOgotCQkJaWYgKCEocHJpdi0+cHJpdmFjeV9jYXBzICYgQlJfREVTQ19QUklWX0NBUF9XRVApKSB7Ci0JCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCQkJZ290byBvdXRfdW5sb2NrOwotCQkJfQotCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7Ci0JCQlhbGdvID0gUDU0X0NSWVBUT19XRVA7Ci0JCQlicmVhazsKLQkJY2FzZSBBTEdfQ0NNUDoKLQkJCWlmICghKHByaXYtPnByaXZhY3lfY2FwcyAmIEJSX0RFU0NfUFJJVl9DQVBfQUVTQ0NNUCkpIHsKLQkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJCQlnb3RvIG91dF91bmxvY2s7Ci0JCQl9Ci0JCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKLQkJCWFsZ28gPSBQNTRfQ1JZUFRPX0FFU0NDTVA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0JCXNsb3QgPSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihwcml2LT51c2VkX3J4a2V5cywKLQkJCQkJICAgICAgIHByaXYtPnJ4X2tleWNhY2hlX3NpemUsIDApOwotCi0JCWlmIChzbG90IDwgMCkgewotCQkJLyoKLQkJCSAqIFRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIGNob29zZW4gYWxnb3JpdGhtLCBidXQgdGhlCi0JCQkgKiBmaXJtd2FyZSBkb2VzIG5vdCBwcm92aWRlIGVub3VnaCBrZXkgc2xvdHMgdG8gc3RvcmUKLQkJCSAqIGFsbCBvZiB0aGVtLgotCQkJICogQnV0IGVuY3J5cHRpb24gb2ZmbG9hZCBmb3Igb3V0Z29pbmcgZnJhbWVzIGlzIGFsd2F5cwotCQkJICogcG9zc2libGUsIHNvIHdlIGp1c3QgcHJldGVuZCB0aGF0IHRoZSB1cGxvYWQgd2FzCi0JCQkgKiBzdWNjZXNzZnVsIGFuZCBkbyB0aGUgZGVjcnlwdGlvbiBpbiBzb2Z0d2FyZS4KLQkJCSAqLwotCi0JCQkvKiBtYXJrIHRoZSBrZXkgYXMgaW52YWxpZC4gKi8KLQkJCWtleS0+aHdfa2V5X2lkeCA9IDB4ZmY7Ci0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQl9IGVsc2UgewotCQlzbG90ID0ga2V5LT5od19rZXlfaWR4OwotCi0JCWlmIChzbG90ID09IDB4ZmYpIHsKLQkJCS8qIFRoaXMga2V5IHdhcyBub3QgdXBsb2FkZWQgaW50byB0aGUgcngga2V5IGNhY2hlLiAqLwotCi0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQotCQliaXRtYXBfcmVsZWFzZV9yZWdpb24ocHJpdi0+dXNlZF9yeGtleXMsIHNsb3QsIDApOwotCQlhbGdvID0gMDsKLQl9Ci0KLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqcnhrZXkpLAotCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfUlhfS0VZQ0FDSEUsIEdGUF9LRVJORUwpOwotCWlmICghc2tiKSB7Ci0JCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihwcml2LT51c2VkX3J4a2V5cywgc2xvdCwgMCk7Ci0JCXJldCA9IC1FTk9TUEM7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlyeGtleSA9IChzdHJ1Y3QgcDU0X2tleWNhY2hlICopc2tiX3B1dChza2IsIHNpemVvZigqcnhrZXkpKTsKLQlyeGtleS0+ZW50cnkgPSBzbG90OwotCXJ4a2V5LT5rZXlfaWQgPSBrZXktPmtleWlkeDsKLQlyeGtleS0+a2V5X3R5cGUgPSBhbGdvOwotCWlmIChzdGEpCi0JCW1lbWNweShyeGtleS0+bWFjLCBzdGEtPmFkZHIsIEVUSF9BTEVOKTsKLQllbHNlCi0JCW1lbXNldChyeGtleS0+bWFjLCB+MCwgRVRIX0FMRU4pOwotCWlmIChrZXktPmFsZyAhPSBBTEdfVEtJUCkgewotCQlyeGtleS0+a2V5X2xlbiA9IG1pbigodTgpMTYsIGtleS0+a2V5bGVuKTsKLQkJbWVtY3B5KHJ4a2V5LT5rZXksIGtleS0+a2V5LCByeGtleS0+a2V5X2xlbik7Ci0JfSBlbHNlIHsKLQkJcnhrZXktPmtleV9sZW4gPSAyNDsKLQkJbWVtY3B5KHJ4a2V5LT5rZXksIGtleS0+a2V5LCAxNik7Ci0JCW1lbWNweSgmKHJ4a2V5LT5rZXlbMTZdKSwgJihrZXktPmtleQotCQkJW05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9SWF9NSUNfS0VZXSksIDgpOwotCX0KLQotCXByaXYtPnR4KGRldiwgc2tiKTsKLQlrZXktPmh3X2tleV9pZHggPSBzbG90OwotCi1vdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotI2lmZGVmIENPTkZJR19QNTRfTEVEUwotc3RhdGljIHZvaWQgcDU0X3VwZGF0ZV9sZWRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcDU0X2NvbW1vbiwKLQkJCQkJICAgICAgIGxlZF93b3JrLndvcmspOwotCWludCBlcnIsIGksIHRtcCwgYmxpbmtfZGVsYXkgPSA0MDA7Ci0JYm9vbCByZXJ1biA9IGZhbHNlOwotCi0JLyogRG9uJ3QgdG9nZ2xlIHRoZSBMRUQsIHdoZW4gdGhlIGRldmljZSBpcyBkb3duLiAqLwotCWlmIChwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQotCQlyZXR1cm4gOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJpdi0+bGVkcyk7IGkrKykKLQkJaWYgKHByaXYtPmxlZHNbaV0udG9nZ2xlZCkgewotCQkJcHJpdi0+c29mdGxlZF9zdGF0ZSB8PSBCSVQoaSk7Ci0KLQkJCXRtcCA9IDcwICsgMjAwIC8gKHByaXYtPmxlZHNbaV0udG9nZ2xlZCk7Ci0JCQlpZiAodG1wIDwgYmxpbmtfZGVsYXkpCi0JCQkJYmxpbmtfZGVsYXkgPSB0bXA7Ci0KLQkJCWlmIChwcml2LT5sZWRzW2ldLmxlZF9kZXYuYnJpZ2h0bmVzcyA9PSBMRURfT0ZGKQotCQkJCXJlcnVuID0gdHJ1ZTsKLQotCQkJcHJpdi0+bGVkc1tpXS50b2dnbGVkID0KLQkJCQkhIXByaXYtPmxlZHNbaV0ubGVkX2Rldi5icmlnaHRuZXNzOwotCQl9IGVsc2UKLQkJCXByaXYtPnNvZnRsZWRfc3RhdGUgJj0gfkJJVChpKTsKLQotCWVyciA9IHA1NF9zZXRfbGVkcyhwcml2LT5odyk7Ci0JaWYgKGVyciAmJiBuZXRfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byB1cGRhdGUgTEVEcy5cbiIsCi0JCQl3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwotCi0JaWYgKHJlcnVuKQotCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHctPndvcmtxdWV1ZSwgJnByaXYtPmxlZF93b3JrLAotCQkJbXNlY3NfdG9famlmZmllcyhibGlua19kZWxheSkpOwotfQotCi1zdGF0aWMgdm9pZCBwNTRfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9kZXYsCi0JCQkJICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQotewotCXN0cnVjdCBwNTRfbGVkX2RldiAqbGVkID0gY29udGFpbmVyX29mKGxlZF9kZXYsIHN0cnVjdCBwNTRfbGVkX2RldiwKLQkJCQkJICAgICAgIGxlZF9kZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGxlZC0+aHdfZGV2OwotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCi0JaWYgKHByaXYtPm1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpCi0JCXJldHVybiA7Ci0KLQlpZiAoYnJpZ2h0bmVzcykgewotCQlsZWQtPnRvZ2dsZWQrKzsKLQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT5sZWRfd29yaywKLQkJCQkgICBIWi8xMCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHA1NF9yZWdpc3Rlcl9sZWQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJICAgIHVuc2lnbmVkIGludCBsZWRfaW5kZXgsCi0JCQkgICAgY2hhciAqbmFtZSwgY2hhciAqdHJpZ2dlcikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgcDU0X2xlZF9kZXYgKmxlZCA9ICZwcml2LT5sZWRzW2xlZF9pbmRleF07Ci0JaW50IGVycjsKLQotCWlmIChsZWQtPnJlZ2lzdGVyZWQpCi0JCXJldHVybiAtRUVYSVNUOwotCi0Jc25wcmludGYobGVkLT5uYW1lLCBzaXplb2YobGVkLT5uYW1lKSwgInA1NC0lczo6JXMiLAotCQkgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbmFtZSk7Ci0JbGVkLT5od19kZXYgPSBkZXY7Ci0JbGVkLT5pbmRleCA9IGxlZF9pbmRleDsKLQlsZWQtPmxlZF9kZXYubmFtZSA9IGxlZC0+bmFtZTsKLQlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKLQlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBwNTRfbGVkX2JyaWdodG5lc3Nfc2V0OwotCi0JZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHdpcGh5X2RldihkZXYtPndpcGh5KSwgJmxlZC0+bGVkX2Rldik7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIHJlZ2lzdGVyICVzIExFRC5cbiIsCi0JCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBuYW1lKTsKLQllbHNlCi0JCWxlZC0+cmVnaXN0ZXJlZCA9IDE7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHA1NF9pbml0X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCWludCBlcnI7Ci0KLQkvKgotCSAqIFRPRE86Ci0JICogRmlndXJlIG91dCBpZiB0aGUgRUVQUk9NIGNvbnRhaW5zIHNvbWUgaGludHMgYWJvdXQgdGhlIG51bWJlcgotCSAqIG9mIGF2YWlsYWJsZS9wcm9ncmFtbWFibGUgTEVEcyBvZiB0aGUgZGV2aWNlLgotCSAqLwotCi0JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmxlZF93b3JrLCBwNTRfdXBkYXRlX2xlZHMpOwotCi0JZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChkZXYsIDAsICJhc3NvYyIsCi0JCQkgICAgICAgaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShkZXYpKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChkZXYsIDEsICJ0eCIsCi0JCQkgICAgICAgaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShkZXYpKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChkZXYsIDIsICJyeCIsCi0JCQkgICAgICAgaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShkZXYpKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChkZXYsIDMsICJyYWRpbyIsCi0JCQkgICAgICAgaWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShkZXYpKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gcDU0X3NldF9sZWRzKGRldik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcDU0X3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcml2LT5sZWRzKTsgaSsrKQotCQlpZiAocHJpdi0+bGVkc1tpXS5yZWdpc3RlcmVkKQotCQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJnByaXYtPmxlZHNbaV0ubGVkX2Rldik7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBwNTRfb3BzID0gewotCS50eAkJCT0gcDU0X3R4LAotCS5zdGFydAkJCT0gcDU0X3N0YXJ0LAotCS5zdG9wCQkJPSBwNTRfc3RvcCwKLQkuYWRkX2ludGVyZmFjZQkJPSBwNTRfYWRkX2ludGVyZmFjZSwKLQkucmVtb3ZlX2ludGVyZmFjZQk9IHA1NF9yZW1vdmVfaW50ZXJmYWNlLAotCS5zZXRfdGltCQk9IHA1NF9zZXRfdGltLAotCS5zdGFfbm90aWZ5CQk9IHA1NF9zdGFfbm90aWZ5LAotCS5zZXRfa2V5CQk9IHA1NF9zZXRfa2V5LAotCS5jb25maWcJCQk9IHA1NF9jb25maWcsCi0JLmJzc19pbmZvX2NoYW5nZWQJPSBwNTRfYnNzX2luZm9fY2hhbmdlZCwKLQkuY29uZmlndXJlX2ZpbHRlcgk9IHA1NF9jb25maWd1cmVfZmlsdGVyLAotCS5jb25mX3R4CQk9IHA1NF9jb25mX3R4LAotCS5nZXRfc3RhdHMJCT0gcDU0X2dldF9zdGF0cywKLQkuZ2V0X3R4X3N0YXRzCQk9IHA1NF9nZXRfdHhfc3RhdHMKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfaHcgKnA1NF9pbml0X2NvbW1vbihzaXplX3QgcHJpdl9kYXRhX2xlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXY7Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXY7Ci0KLQlkZXYgPSBpZWVlODAyMTFfYWxsb2NfaHcocHJpdl9kYXRhX2xlbiwgJnA1NF9vcHMpOwotCWlmICghZGV2KQotCQlyZXR1cm4gTlVMTDsKLQotCXByaXYgPSBkZXYtPnByaXY7Ci0JcHJpdi0+aHcgPSBkZXY7Ci0JcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOwotCXByaXYtPmJhc2ljX3JhdGVfbWFzayA9IDB4MTVmOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4X3F1ZXVlKTsKLQlkZXYtPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8Ci0JCSAgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAotCQkgICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk07Ci0KLQlkZXYtPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAotCQkJCSAgICAgIEJJVChOTDgwMjExX0lGVFlQRV9BREhPQykgfAotCQkJCSAgICAgIEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAotCQkJCSAgICAgIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKLQotCWRldi0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDA7CS8qIFRPRE86IGZpbmQgYWN0dWFsIHZhbHVlICovCi0JcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0JFQUNPTl0ubGltaXQgPSAxOwotCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9GV1NDQU5dLmxpbWl0ID0gMTsKLQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfTUdNVF0ubGltaXQgPSAzOwotCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9DQUJdLmxpbWl0ID0gMzsKLQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfREFUQV0ubGltaXQgPSA1OwotCWRldi0+cXVldWVzID0gMTsKLQlwcml2LT5ub2lzZSA9IC05NDsKLQkvKgotCSAqIFdlIHN1cHBvcnQgYXQgbW9zdCA4IHRyaWVzIG5vIG1hdHRlciB3aGljaCByYXRlIHRoZXkncmUgYXQsCi0JICogd2UgY2Fubm90IHN1cHBvcnQgbWF4X3JhdGVzICogbWF4X3JhdGVfdHJpZXMgYXMgd2Ugc2V0IGl0Ci0JICogaGVyZSwgYnV0IHNldHRpbmcgaXQgY29ycmVjdGx5IHRvIDQvMiBvciBzbyB3b3VsZCBsaW1pdCB1cwotCSAqIGFydGlmaWNpYWxseSBpZiB0aGUgUkMgYWxnb3JpdGhtIHdhbnRzIGp1c3QgdHdvIHJhdGVzLCBzbwotCSAqIGxldCdzIHNheSA0LzcsIHdlJ2xsIHJlZGlzdHJpYnV0ZSBpdCBhdCBUWCB0aW1lLCBzZWUgdGhlCi0JICogY29tbWVudHMgdGhlcmUuCi0JICovCi0JZGV2LT5tYXhfcmF0ZXMgPSA0OwotCWRldi0+bWF4X3JhdGVfdHJpZXMgPSA3OwotCWRldi0+ZXh0cmFfdHhfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IHA1NF9oZHIpICsgNCArCi0JCQkJIHNpemVvZihzdHJ1Y3QgcDU0X3R4X2RhdGEpOwotCi0JbXV0ZXhfaW5pdCgmcHJpdi0+Y29uZl9tdXRleCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZwcml2LT5lZXByb21fY29tcCk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPndvcmssIHA1NF93b3JrKTsKLQotCXJldHVybiBkZXY7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwNTRfaW5pdF9jb21tb24pOwotCi1pbnQgcDU0X3JlZ2lzdGVyX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBkZXYpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycihwZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIGRldmljZSAoJWQpLlxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfUDU0X0xFRFMKLQllcnIgPSBwNTRfaW5pdF9sZWRzKGRldik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLSNlbmRpZiAvKiBDT05GSUdfUDU0X0xFRFMgKi8KLQotCWRldl9pbmZvKHBkZXYsICJpcyByZWdpc3RlcmVkIGFzICclcydcbiIsIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocDU0X3JlZ2lzdGVyX2NvbW1vbik7Ci0KLXZvaWQgcDU0X2ZyZWVfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlrZnJlZShwcml2LT5pcV9hdXRvY2FsKTsKLQlrZnJlZShwcml2LT5vdXRwdXRfbGltaXQpOwotCWtmcmVlKHByaXYtPmN1cnZlX2RhdGEpOwotCWtmcmVlKHByaXYtPnVzZWRfcnhrZXlzKTsKLQotI2lmZGVmIENPTkZJR19QNTRfTEVEUwotCXA1NF91bnJlZ2lzdGVyX2xlZHMoZGV2KTsKLSNlbmRpZiAvKiBDT05GSUdfUDU0X0xFRFMgKi8KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHA1NF9mcmVlX2NvbW1vbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZWFkN2EuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQ0ICswLDAgQEAKLSNpZm5kZWYgUDU0Q09NTU9OX0gKLSNkZWZpbmUgUDU0Q09NTU9OX0gKLQotLyoKLSAqIENvbW1vbiBjb2RlIHNwZWNpZmljIGRlZmluaXRpb25zIGZvciBtYWM4MDIxMSBQcmlzbTU0IGRyaXZlcnMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgotICogQ29weXJpZ2h0IChjKSAyMDA3LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+Ci0gKgotICogQmFzZWQgb246Ci0gKiAtIHRoZSBpc2xzbSAoc29mdG1hYyBwcmlzbTU0KSBkcml2ZXIsIHdoaWNoIGlzOgotICogICBDb3B5cmlnaHQgMjAwNC0yMDA2IEplYW4tQmFwdGlzdGUgTm90ZSA8amJub3RlQGdtYWlsLmNvbT4sIGV0IGFsLgotICoKLSAqIC0gTE1BQyBBUEkgaW50ZXJmYWNlIGhlYWRlciBmaWxlIGZvciBTVExDNDU2MCAobG1hY19sb25nYm93LmgpCi0gKiAgIENvcHlyaWdodCAoQykgMjAwNyBDb25leGFudCBTeXN0ZW1zLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi1zdHJ1Y3QgYm9vdHJlYyB7Ci0JX19sZTMyIGNvZGU7Ci0JX19sZTMyIGxlbjsKLQl1MzIgZGF0YVsxMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi0jZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9NQVNLCQkweDAwMDcKLSNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0RVRVRURTMJMHgwMDAxCi0jZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9EVUVUVEUyCTB4MDAwMgotI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfRlJJU0JFRQkweDAwMDMKLSNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX1hCT1cJCTB4MDAwNAotI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVwkweDAwMDUKLSNkZWZpbmUgUERSX1NZTlRIX0lRX0NBTF9NQVNLCQkweDAwMTgKLSNkZWZpbmUgUERSX1NZTlRIX0lRX0NBTF9QQV9ERVRFQ1RPUgkweDAwMDAKLSNkZWZpbmUgUERSX1NZTlRIX0lRX0NBTF9ESVNBQkxFRAkweDAwMDgKLSNkZWZpbmUgUERSX1NZTlRIX0lRX0NBTF9aSUYJCTB4MDAxMAotI2RlZmluZSBQRFJfU1lOVEhfRkFBX1NXSVRDSF9NQVNLCTB4MDAyMAotI2RlZmluZSBQRFJfU1lOVEhfRkFBX1NXSVRDSF9FTkFCTEVECTB4MDAyMAotI2RlZmluZSBQRFJfU1lOVEhfMjRfR0haX01BU0sJCTB4MDA0MAotI2RlZmluZSBQRFJfU1lOVEhfMjRfR0haX0RJU0FCTEVECTB4MDA0MAotI2RlZmluZSBQRFJfU1lOVEhfNV9HSFpfTUFTSwkJMHgwMDgwCi0jZGVmaW5lIFBEUl9TWU5USF81X0dIWl9ESVNBQkxFRAkweDAwODAKLSNkZWZpbmUgUERSX1NZTlRIX1JYX0RJVl9NQVNLCQkweDAxMDAKLSNkZWZpbmUgUERSX1NZTlRIX1JYX0RJVl9TVVBQT1JURUQJMHgwMTAwCi0jZGVmaW5lIFBEUl9TWU5USF9UWF9ESVZfTUFTSwkJMHgwMjAwCi0jZGVmaW5lIFBEUl9TWU5USF9UWF9ESVZfU1VQUE9SVEVECTB4MDIwMAotCi1zdHJ1Y3QgYm9vdHJlY19leHBfaWYgewotCV9fbGUxNiByb2xlOwotCV9fbGUxNiBpZl9pZDsKLQlfX2xlMTYgdmFyaWFudDsKLQlfX2xlMTYgYnRtX2NvbXBhdDsKLQlfX2xlMTYgdG9wX2NvbXBhdDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLSNkZWZpbmUgQlJfREVTQ19QUklWX0NBUF9XRVAJCUJJVCgwKQotI2RlZmluZSBCUl9ERVNDX1BSSVZfQ0FQX1RLSVAJCUJJVCgxKQotI2RlZmluZSBCUl9ERVNDX1BSSVZfQ0FQX01JQ0hBRUwJQklUKDIpCi0jZGVmaW5lIEJSX0RFU0NfUFJJVl9DQVBfQ0NYX0NQCQlCSVQoMykKLSNkZWZpbmUgQlJfREVTQ19QUklWX0NBUF9DQ1hfTUlDCUJJVCg0KQotI2RlZmluZSBCUl9ERVNDX1BSSVZfQ0FQX0FFU0NDTVAJQklUKDUpCi0KLXN0cnVjdCBib290cmVjX2Rlc2MgewotCV9fbGUxNiBtb2RlczsKLQlfX2xlMTYgZmxhZ3M7Ci0JX19sZTMyIHJ4X3N0YXJ0OwotCV9fbGUzMiByeF9lbmQ7Ci0JdTggaGVhZHJvb207Ci0JdTggdGFpbHJvb207Ci0JdTggdHhfcXVldWVzOwotCXU4IHR4X2RlcHRoOwotCXU4IHByaXZhY3lfY2FwczsKLQl1OCByeF9rZXljYWNoZV9zaXplOwotCXU4IHRpbWVfc2l6ZTsKLQl1OCBwYWRkaW5nOwotCXU4IHJhdGVzWzE2XTsKLQl1OCBwYWRkaW5nMls0XTsKLQlfX2xlMTYgcnhfbXR1OwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotI2RlZmluZSBCUl9DT0RFX01JTgkJCTB4ODAwMDAwMDAKLSNkZWZpbmUgQlJfQ09ERV9DT01QT05FTlRfSUQJCTB4ODAwMDAwMDEKLSNkZWZpbmUgQlJfQ09ERV9DT01QT05FTlRfVkVSU0lPTgkweDgwMDAwMDAyCi0jZGVmaW5lIEJSX0NPREVfREVQRU5ERU5UX0lGCQkweDgwMDAwMDAzCi0jZGVmaW5lIEJSX0NPREVfRVhQT1NFRF9JRgkJMHg4MDAwMDAwNAotI2RlZmluZSBCUl9DT0RFX0RFU0NSCQkJMHg4MDAwMDEwMQotI2RlZmluZSBCUl9DT0RFX01BWAkJCTB4OEZGRkZGRkYKLSNkZWZpbmUgQlJfQ09ERV9FTkRfT0ZfQlJBCQkweEZGMDAwMEZGCi0jZGVmaW5lIExFR0FDWV9CUl9DT0RFX0VORF9PRl9CUkEJMHhGRkZGRkZGRgotCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX0FMSUdOCQlCSVQoMTQpCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX09VVF9QUk9NSVNDCUJJVCgwKQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfVElNRVNUQU1QIEJJVCgxKQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfU0VRTlIJQklUKDIpCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX09VVF9CSVQzCUJJVCgzKQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfQlVSU1QJQklUKDQpCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX09VVF9OT0NBTkNFTAlCSVQoNSkKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX0NMRUFSVElNCUJJVCg2KQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfSElUQ0hISUtFCUJJVCg3KQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfQ09NUFJFU1MJQklUKDgpCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX09VVF9DT05DQVQJQklUKDkpCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX09VVF9QQ1NfQUNDRVBUIEJJVCgxMCkKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1dBSVRFT1NQCUJJVCgxMSkKLQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9GQ1NfR09PRAlCSVQoMCkKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fTUFUQ0hfTUFDCUJJVCgxKQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9NQ0JDCUJJVCgyKQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9CRUFDT04JQklUKDMpCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX0lOX01BVENIX0JTUwlCSVQoNCkKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fQkNBU1RfQlNTCUJJVCg1KQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9EQVRBCUJJVCg2KQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9UUlVOQ0FURUQJQklUKDcpCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX0lOX0JJVDgJQklUKDgpCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX0lOX1RSQU5TUEFSRU5UIEJJVCg5KQotCi0vKiBQREEgZGVmaW5lcyBhcmUgQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uICh0YWtlbiBmcm9tIGlzbHNtX3BkYS5oKSAqLwotCi1zdHJ1Y3QgcGRhX2VudHJ5IHsKLQlfX2xlMTYgbGVuOwkvKiBpbmNsdWRlcyBib3RoIGNvZGUgYW5kIGRhdGEgKi8KLQlfX2xlMTYgY29kZTsKLQl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBlZXByb21fcGRhX3dyYXAgewotCV9fbGUzMiBtYWdpYzsKLQlfX2xlMTYgcGFkOwotCV9fbGUxNiBsZW47Ci0JX19sZTMyIGFybV9vcGNvZGU7Ci0JdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgewotCV9fbGUxNiBpcV9wYXJhbVs0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnkgewotICAgICAgICBfX2xlMTYgZnJlcTsKLQlzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkgcGFyYW1zOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQgewotCV9fbGUxNiBmcmVxOwotCXU4IHZhbF9icHNrOwotCXU4IHZhbF9xcHNrOwotCXU4IHZhbF8xNnFhbTsKLQl1OCB2YWxfNjRxYW07Ci0JdTggcmF0ZV9zZXRfbWFzazsKLQl1OCByYXRlX3NldF9zaXplOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MCB7Ci0JdTggcmZfcG93ZXI7Ci0JdTggcGFfZGV0ZWN0b3I7Ci0JdTggcGN2OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MSB7Ci0JdTggcmZfcG93ZXI7Ci0JdTggcGFfZGV0ZWN0b3I7Ci0JdTggZGF0YV9iYXJrZXI7Ci0JdTggZGF0YV9icHNrOwotCXU4IGRhdGFfcXBzazsKLQl1OCBkYXRhXzE2cWFtOwotCXU4IGRhdGFfNjRxYW07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSB7Ci0JdTggcmZfcG93ZXI7Ci0JdTggcGFfZGV0ZWN0b3I7Ci0JdTggZGF0YV9iYXJrZXI7Ci0JdTggZGF0YV9icHNrOwotCXU4IGRhdGFfcXBzazsKLQl1OCBkYXRhXzE2cWFtOwotCXU4IGRhdGFfNjRxYW07Ci0JdTggcGFkZGluZzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgewotCXU4IGNhbF9tZXRob2RfcmV2OwotCXU4IGNoYW5uZWxzOwotCXU4IHBvaW50c19wZXJfY2hhbm5lbDsKLQl1OCBwYWRkaW5nOwotCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSB7Ci0JX19sZTE2IG11bDsKLQlfX2xlMTYgYWRkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwZGFfY291bnRyeSB7Ci0JdTggcmVnZG9tYWluOwotCXU4IGFscGhhMlsyXTsKLQl1OCBmbGFnczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogV2FybmluZzogTG9uZ2JvdydzIHN0cnVjdHVyZXMgYXJlIGJvZ3VzLgotICovCi1zdHJ1Y3QgcDU0X2NoYW5uZWxfb3V0cHV0X2xpbWl0X2xvbmdib3cgewotCV9fbGUxNiByZl9wb3dlcl9wb2ludHNbMTJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGVfbG9uZ2JvdyB7Ci0JX19sZTE2IHJmX3Bvd2VyOwotCV9fbGUxNiBwYV9kZXRlY3RvcjsKLQlzdHJ1Y3QgewotCQlfX2xlMTYgZGF0YVs0XTsKLQl9IHBvaW50c1szXSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciB7Ci0JX19sZTE2IGVudHJpZXM7Ci0JX19sZTE2IGVudHJ5X3NpemU7Ci0JX19sZTE2IG9mZnNldDsKLQlfX2xlMTYgbGVuOwotCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIHRoaXMgZGVmaW5lcyB0aGUgUERSIGNvZGVzIHVzZWQgdG8gYnVpbGQgUERBcyBhcyBkZWZpbmVkIGluIGRvY3VtZW50Ci0gKiBudW1iZXIgNTUzMTU1LiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBtaXJyb3JzIHZlcnNpb24gMS4xIG9mIHRoZQotICogZG9jdW1lbnQgYW5kIGxpc3RzIG9ubHkgUERScyBzdXBwb3J0ZWQgYnkgdGhlIEFSTSBwbGF0Zm9ybS4KLSAqLwotCi0vKiBjb21tb24gYW5kIGNob2ljZSByYW5nZSAoMHgwMDAwIC0gMHgwZmZmKSAqLwotI2RlZmluZSBQRFJfRU5ECQkJCQkweDAwMDAKLSNkZWZpbmUgUERSX01BTlVGQUNUVVJJTkdfUEFSVF9OVU1CRVIJCTB4MDAwMQotI2RlZmluZSBQRFJfUERBX1ZFUlNJT04JCQkJMHgwMDAyCi0jZGVmaW5lIFBEUl9OSUNfU0VSSUFMX05VTUJFUgkJCTB4MDAwMwotCi0jZGVmaW5lIFBEUl9NQUNfQUREUkVTUwkJCQkweDAxMDEKLSNkZWZpbmUgUERSX1JFR1VMQVRPUllfRE9NQUlOX0xJU1QJCTB4MDEwMwotI2RlZmluZSBQRFJfVEVNUEVSQVRVUkVfVFlQRQkJCTB4MDEwNwotCi0jZGVmaW5lIFBEUl9QUklTTV9QQ0lfSURFTlRJRklFUgkJMHgwNDAyCi0KLS8qIEFSTSByYW5nZSAoMHgxMDAwIC0gMHgxZmZmKSAqLwotI2RlZmluZSBQRFJfQ09VTlRSWV9JTkZPUk1BVElPTgkJCTB4MTAwMAotI2RlZmluZSBQRFJfSU5URVJGQUNFX0xJU1QJCQkweDEwMDEKLSNkZWZpbmUgUERSX0hBUkRXQVJFX1BMQVRGT1JNX0NPTVBPTkVOVF9JRAkweDEwMDIKLSNkZWZpbmUgUERSX09FTV9OQU1FCQkJCTB4MTAwMwotI2RlZmluZSBQRFJfUFJPRFVDVF9OQU1FCQkJMHgxMDA0Ci0jZGVmaW5lIFBEUl9VVEY4X09FTV9OQU1FCQkJMHgxMDA1Ci0jZGVmaW5lIFBEUl9VVEY4X1BST0RVQ1RfTkFNRQkJCTB4MTAwNgotI2RlZmluZSBQRFJfQ09VTlRSWV9MSVNUCQkJMHgxMDA3Ci0jZGVmaW5lIFBEUl9ERUZBVUxUX0NPVU5UUlkJCQkweDEwMDgKLQotI2RlZmluZSBQRFJfQU5URU5OQV9HQUlOCQkJMHgxMTAwCi0KLSNkZWZpbmUgUERSX1BSSVNNX0lORElHT19QQV9DQUxJQlJBVElPTl9EQVRBCTB4MTkwMQotI2RlZmluZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTgkJMHgxOTAyCi0jZGVmaW5lIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUUwkweDE5MDMKLSNkZWZpbmUgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBCQkweDE5MDQKLSNkZWZpbmUgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fRFVBTF9CQU5ECTB4MTkwNQotI2RlZmluZSBQRFJfUFJJU01fWklGX1RYX0lRX0NBTElCUkFUSU9OCQkweDE5MDYKLSNkZWZpbmUgUERSX1JFR1VMQVRPUllfUE9XRVJfTElNSVRTCQkweDE5MDcKLSNkZWZpbmUgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fRVhURU5ERUQJMHgxOTA4Ci0jZGVmaW5lIFBEUl9SQURJQVRFRF9UUkFOU01JU1NJT05fQ09SUkVDVElPTgkweDE5MDkKLSNkZWZpbmUgUERSX1BSSVNNX1RYX0lRX0NBTElCUkFUSU9OCQkweDE5MGEKLQotLyogcmVzZXJ2ZWQgcmFuZ2UgKDB4MjAwMCAtIDB4N2ZmZikgKi8KLQotLyogY3VzdG9tZXIgcmFuZ2UgKDB4ODAwMCAtIDB4ZmZmZikgKi8KLSNkZWZpbmUgUERSX0JBU0VCQU5EX1JFR0lTVEVSUwkJCQkweDgwMDAKLSNkZWZpbmUgUERSX1BFUl9DSEFOTkVMX0JBU0VCQU5EX1JFR0lTVEVSUwkJMHg4MDAxCi0KLS8qIHVzZWQgYnkgb3VyIG1vZGlmaWNhdGVkIGVlcHJvbSBpbWFnZSAqLwotI2RlZmluZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9DVVNUT00JCTB4REVBRAotI2RlZmluZSBQRFJfUFJJU01fUEFfQ0FMX09VVFBVVF9QT1dFUl9MSU1JVFNfQ1VTVE9NCTB4QkVFRgotI2RlZmluZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEFfQ1VTVE9NCQkweEIwNUQKLQotLyogUERSIGRlZmluaXRpb25zIGZvciBkZWZhdWx0IGNvdW50cnkgJiBjb3VudHJ5IGxpc3QgKi8KLSNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9DT0RFCQkweDgwCi0jZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfQ09ERV9SRUFMCTB4MDAKLSNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9DT0RFX1BTRVVETwkweDgwCi0jZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfQkFORAkJMHg0MAotI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0JBTkRfMkdIWgkweDAwCi0jZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfQkFORF81R0haCTB4NDAKLSNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9JT0RPT1IJCTB4MzAKLSNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9JT0RPT1JfQk9USAkweDAwCi0jZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfSU9ET09SX0lORE9PUgkweDIwCi0jZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfSU9ET09SX09VVERPT1IJMHgzMAotI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0lOREVYCQkweDBGCi0KLXN0cnVjdCBwNTRfZWVwcm9tX2xtODYgewotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCV9fbGUxNiBvZmZzZXQ7Ci0JCQlfX2xlMTYgbGVuOwotCQkJdTggZGF0YVswXTsKLQkJfSB2MTsKLQkJc3RydWN0IHsKLQkJCV9fbGUzMiBvZmZzZXQ7Ci0JCQlfX2xlMTYgbGVuOwotCQkJdTggbWFnaWMyOwotCQkJdTggcGFkOwotCQkJdTggbWFnaWNbNF07Ci0JCQl1OCBkYXRhWzBdOwotCQl9IHYyOwotCX0gIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIHA1NF9yeF9kZWNyeXB0X3N0YXR1cyB7Ci0JUDU0X0RFQ1JZUFRfTk9ORSA9IDAsCi0JUDU0X0RFQ1JZUFRfT0ssCi0JUDU0X0RFQ1JZUFRfTk9LRVksCi0JUDU0X0RFQ1JZUFRfTk9NSUNIQUVMLAotCVA1NF9ERUNSWVBUX05PQ0tJUE1JQywKLQlQNTRfREVDUllQVF9GQUlMX1dFUCwKLQlQNTRfREVDUllQVF9GQUlMX1RLSVAsCi0JUDU0X0RFQ1JZUFRfRkFJTF9NSUNIQUVMLAotCVA1NF9ERUNSWVBUX0ZBSUxfQ0tJUEtQLAotCVA1NF9ERUNSWVBUX0ZBSUxfQ0tJUE1JQywKLQlQNTRfREVDUllQVF9GQUlMX0FFU0NDTVAKLX07Ci0KLXN0cnVjdCBwNTRfcnhfZGF0YSB7Ci0JX19sZTE2IGZsYWdzOwotCV9fbGUxNiBsZW47Ci0JX19sZTE2IGZyZXE7Ci0JdTggYW50ZW5uYTsKLQl1OCByYXRlOwotCXU4IHJzc2k7Ci0JdTggcXVhbGl0eTsKLQl1OCBkZWNyeXB0X3N0YXR1czsKLQl1OCByc3NpX3JhdzsKLQlfX2xlMzIgdHNmMzI7Ci0JX19sZTMyIHVuYWxsb2MwOwotCXU4IGFsaWduWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWVudW0gcDU0X3RyYXBfdHlwZSB7Ci0JUDU0X1RSQVBfU0NBTiA9IDAsCi0JUDU0X1RSQVBfVElNRVIsCi0JUDU0X1RSQVBfQkVBQ09OX1RYLAotCVA1NF9UUkFQX0ZBQV9SQURJT19PTiwKLQlQNTRfVFJBUF9GQUFfUkFESU9fT0ZGLAotCVA1NF9UUkFQX1JBREFSLAotCVA1NF9UUkFQX05PX0JFQUNPTiwKLQlQNTRfVFJBUF9UQlRULAotCVA1NF9UUkFQX1NDT19FTlRFUiwKLQlQNTRfVFJBUF9TQ09fRVhJVAotfTsKLQotc3RydWN0IHA1NF90cmFwIHsKLQlfX2xlMTYgZXZlbnQ7Ci0JX19sZTE2IGZyZXF1ZW5jeTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIHA1NF9mcmFtZV9zZW50X3N0YXR1cyB7Ci0JUDU0X1RYX09LID0gMCwKLQlQNTRfVFhfRkFJTEVELAotCVA1NF9UWF9QU00sCi0JUDU0X1RYX1BTTV9DQU5DRUxMRUQgPSA0Ci19OwotCi1zdHJ1Y3QgcDU0X2ZyYW1lX3NlbnQgewotCXU4IHN0YXR1czsKLQl1OCB0cmllczsKLQl1OCBhY2tfcnNzaTsKLQl1OCBxdWFsaXR5OwotCV9fbGUxNiBzZXE7Ci0JdTggYW50ZW5uYTsKLQl1OCBwYWRkaW5nOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWVudW0gcDU0X3R4X2RhdGFfY3J5cHQgewotCVA1NF9DUllQVE9fTk9ORSA9IDAsCi0JUDU0X0NSWVBUT19XRVAsCi0JUDU0X0NSWVBUT19US0lQLAotCVA1NF9DUllQVE9fVEtJUE1JQ0hBRUwsCi0JUDU0X0NSWVBUT19DQ1hfV0VQTUlDLAotCVA1NF9DUllQVE9fQ0NYX0tQTUlDLAotCVA1NF9DUllQVE9fQ0NYX0tQLAotCVA1NF9DUllQVE9fQUVTQ0NNUAotfTsKLQotZW51bSBwNTRfdHhfZGF0YV9xdWV1ZSB7Ci0JUDU0X1FVRVVFX0JFQUNPTgk9IDAsCi0JUDU0X1FVRVVFX0ZXU0NBTgk9IDEsCi0JUDU0X1FVRVVFX01HTVQJCT0gMiwKLQlQNTRfUVVFVUVfQ0FCCQk9IDMsCi0JUDU0X1FVRVVFX0RBVEEJCT0gNCwKLQotCVA1NF9RVUVVRV9BQ19OVU0JPSA0LAotCVA1NF9RVUVVRV9BQ19WTwkJPSA0LAotCVA1NF9RVUVVRV9BQ19WSQkJPSA1LAotCVA1NF9RVUVVRV9BQ19CRQkJPSA2LAotCVA1NF9RVUVVRV9BQ19CSwkJPSA3LAotCi0JLyoga2VlcCBsYXN0ICovCi0JUDU0X1FVRVVFX05VTQkJPSA4LAotfTsKLQotc3RydWN0IHA1NF90eF9kYXRhIHsKLQl1OCByYXRlc2V0WzhdOwotCXU4IHJ0c19yYXRlX2lkeDsKLQl1OCBjcnlwdF9vZmZzZXQ7Ci0JdTgga2V5X3R5cGU7Ci0JdTgga2V5X2xlbjsKLQl1OCBrZXlbMTZdOwotCXU4IGh3X3F1ZXVlOwotCXU4IGJhY2tsb2c7Ci0JX19sZTE2IGR1cmF0aW9uc1s0XTsKLQl1OCB0eF9hbnRlbm5hOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXU4IGN0c19yYXRlOwotCQkJX19sZTE2IG91dHB1dF9wb3dlcjsKLQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBsb25nYm93OwotCQlzdHJ1Y3QgewotCQkJdTggb3V0cHV0X3Bvd2VyOwotCQkJdTggY3RzX3JhdGU7Ci0JCQl1OCB1bmFsbG9jOwotCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBub3JtYWw7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0JdTggdW5hbGxvYzJbMl07Ci0JdTggYWxpZ25bMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogdW5pdCBpcyBtcyAqLwotI2RlZmluZSBQNTRfVFhfRlJBTUVfTElGRVRJTUUgMjAwMAotI2RlZmluZSBQNTRfVFhfVElNRU9VVCA0MDAwCi0jZGVmaW5lIFA1NF9TVEFUSVNUSUNTX1VQREFURSA1MDAwCi0KLSNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX05PTkUJCTAKLSNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX1NUQVRJT04JCUJJVCgwKQotI2RlZmluZSBQNTRfRklMVEVSX1RZUEVfSUJTUwkJQklUKDEpCi0jZGVmaW5lIFA1NF9GSUxURVJfVFlQRV9BUAkJQklUKDIpCi0jZGVmaW5lIFA1NF9GSUxURVJfVFlQRV9UUkFOU1BBUkVOVAlCSVQoMykKLSNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX1BST01JU0NVT1VTCUJJVCg0KQotI2RlZmluZSBQNTRfRklMVEVSX1RZUEVfSElCRVJOQVRFCUJJVCg1KQotI2RlZmluZSBQNTRfRklMVEVSX1RZUEVfTk9BQ0sJCUJJVCg2KQotI2RlZmluZSBQNTRfRklMVEVSX1RZUEVfUlhfRElTQUJMRUQJQklUKDcpCi0KLXN0cnVjdCBwNTRfc2V0dXBfbWFjIHsKLQlfX2xlMTYgbWFjX21vZGU7Ci0JdTggbWFjX2FkZHJbRVRIX0FMRU5dOwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQl1OCByeF9hbnRlbm5hOwotCXU4IHJ4X2FsaWduOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCV9fbGUzMiBiYXNpY19yYXRlX21hc2s7Ci0JCQl1OCBydHNfcmF0ZXNbOF07Ci0JCQlfX2xlMzIgcnhfYWRkcjsKLQkJCV9fbGUxNiBtYXhfcng7Ci0JCQlfX2xlMTYgcnhodzsKLQkJCV9fbGUxNiB3YWtldXBfdGltZXI7Ci0JCQlfX2xlMTYgdW5hbGxvYzA7Ci0JCX0gdjEgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCQlzdHJ1Y3QgewotCQkJX19sZTMyIHJ4X2FkZHI7Ci0JCQlfX2xlMTYgbWF4X3J4OwotCQkJX19sZTE2IHJ4aHc7Ci0JCQlfX2xlMTYgdGltZXI7Ci0JCQlfX2xlMTYgdHJ1bmNhdGU7Ci0JCQlfX2xlMzIgYmFzaWNfcmF0ZV9tYXNrOwotCQkJdTggc2Jzc19vZmZzZXQ7Ci0JCQl1OCBtY2FzdF93aW5kb3c7Ci0JCQl1OCByeF9yc3NpX3RocmVzaG9sZDsKLQkJCXU4IHJ4X2VkX3RocmVzaG9sZDsKLQkJCV9fbGUzMiByZWZfY2xvY2s7Ci0JCQlfX2xlMTYgbHBmX2JhbmR3aWR0aDsKLQkJCV9fbGUxNiBvc2Nfc3RhcnRfZGVsYXk7Ci0JCX0gdjIgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgUDU0X1NFVFVQX1YxX0xFTiA0MAotI2RlZmluZSBQNTRfU0VUVVBfVjJfTEVOIChzaXplb2Yoc3RydWN0IHA1NF9zZXR1cF9tYWMpKQotCi0jZGVmaW5lIFA1NF9TQ0FOX0VYSVQJQklUKDApCi0jZGVmaW5lIFA1NF9TQ0FOX1RSQVAJQklUKDEpCi0jZGVmaW5lIFA1NF9TQ0FOX0FDVElWRSBCSVQoMikKLSNkZWZpbmUgUDU0X1NDQU5fRklMVEVSIEJJVCgzKQotCi1zdHJ1Y3QgcDU0X3NjYW5faGVhZCB7Ci0JX19sZTE2IG1vZGU7Ci0JX19sZTE2IGR3ZWxsOwotCXU4IHNjYW5fcGFyYW1zWzIwXTsKLQlfX2xlMTYgZnJlcTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcDU0X3NjYW5fYm9keSB7Ci0JdTggcGFfcG9pbnRzX3Blcl9jdXJ2ZTsKLQl1OCB2YWxfYmFya2VyOwotCXU4IHZhbF9icHNrOwotCXU4IHZhbF9xcHNrOwotCXU4IHZhbF8xNnFhbTsKLQl1OCB2YWxfNjRxYW07Ci0Jc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSBjdXJ2ZV9kYXRhWzhdOwotCXU4IGR1cF9icHNrOwotCXU4IGR1cF9xcHNrOwotCXU4IGR1cF8xNnFhbTsKLQl1OCBkdXBfNjRxYW07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF9zY2FuX2JvZHlfbG9uZ2JvdyB7Ci0Jc3RydWN0IHA1NF9jaGFubmVsX291dHB1dF9saW1pdF9sb25nYm93IHBvd2VyX2xpbWl0czsKLQlzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlX2xvbmdib3cgY3VydmVfZGF0YVs4XTsKLQlfX2xlMTYgdW5rbls2XTsJCS8qIG1heWJlIG1vcmUgcG93ZXJfbGltaXRzIG9yIHJhdGVfbWFzayAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXVuaW9uIHA1NF9zY2FuX2JvZHlfdW5pb24gewotCXN0cnVjdCBwNTRfc2Nhbl9ib2R5IG5vcm1hbDsKLQlzdHJ1Y3QgcDU0X3NjYW5fYm9keV9sb25nYm93IGxvbmdib3c7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF9zY2FuX3RhaWxfcmF0ZSB7Ci0JX19sZTMyIGJhc2ljX3JhdGVfbWFzazsKLQl1OCBydHNfcmF0ZXNbOF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF9sZWQgewotCV9fbGUxNiBmbGFnczsKLQlfX2xlMTYgbWFza1syXTsKLQlfX2xlMTYgZGVsYXlbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF9lZGNmIHsKLQl1OCBmbGFnczsKLQl1OCBzbG90dGltZTsKLQl1OCBzaWZzOwotCXU4IGVvZnBhZDsKLQlzdHJ1Y3QgcDU0X2VkY2ZfcXVldWVfcGFyYW0gcXVldWVbOF07Ci0JdTggbWFwcGluZ1s0XTsKLQlfX2xlMTYgZnJhbWVidXJzdDsKLQlfX2xlMTYgcm91bmRfdHJpcF9kZWxheTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcDU0X3N0YXRpc3RpY3MgewotCV9fbGUzMiByeF9zdWNjZXNzOwotCV9fbGUzMiByeF9iYWRfZmNzOwotCV9fbGUzMiByeF9hYm9ydDsKLQlfX2xlMzIgcnhfYWJvcnRfcGh5OwotCV9fbGUzMiBydHNfc3VjY2VzczsKLQlfX2xlMzIgcnRzX2ZhaWw7Ci0JX19sZTMyIHRzZjMyOwotCV9fbGUzMiBhaXJ0aW1lOwotCV9fbGUzMiBub2lzZTsKLQlfX2xlMzIgc2FtcGxlX25vaXNlWzhdOwotCV9fbGUzMiBzYW1wbGVfY2NhOwotCV9fbGUzMiBzYW1wbGVfdHg7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF94Ym93X3N5bnRoIHsKLQlfX2xlMTYgbWFnaWMxOwotCV9fbGUxNiBtYWdpYzI7Ci0JX19sZTE2IGZyZXE7Ci0JdTMyIHBhZGRpbmdbNV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF90aW1lciB7Ci0JX19sZTMyIGludGVydmFsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfa2V5Y2FjaGUgewotCXU4IGVudHJ5OwotCXU4IGtleV9pZDsKLQl1OCBtYWNbRVRIX0FMRU5dOwotCXU4IHBhZGRpbmdbMl07Ci0JdTgga2V5X3R5cGU7Ci0JdTgga2V5X2xlbjsKLQl1OCBrZXlbMjRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfYnVyc3QgewotCXU4IGZsYWdzOwotCXU4IHF1ZXVlOwotCXU4IGJhY2tsb2c7Ci0JdTggcGFkOwotCV9fbGUxNiBkdXJhdGlvbnNbMzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfcHNtX2ludGVydmFsIHsKLQlfX2xlMTYgaW50ZXJ2YWw7Ci0JX19sZTE2IHBlcmlvZHM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBQNTRfUFNNX0NBTQkJCTAKLSNkZWZpbmUgUDU0X1BTTQkJCQlCSVQoMCkKLSNkZWZpbmUgUDU0X1BTTV9EVElNCQkJQklUKDEpCi0jZGVmaW5lIFA1NF9QU01fTUNCQwkJCUJJVCgyKQotI2RlZmluZSBQNTRfUFNNX0NIRUNLU1VNCQlCSVQoMykKLSNkZWZpbmUgUDU0X1BTTV9TS0lQX01PUkVfREFUQQkJQklUKDQpCi0jZGVmaW5lIFA1NF9QU01fQkVBQ09OX1RJTUVPVVQJCUJJVCg1KQotI2RlZmluZSBQNTRfUFNNX0hGT1NMRUVQCQlCSVQoNikKLSNkZWZpbmUgUDU0X1BTTV9BVVRPU1dJVENIX1NMRUVQCUJJVCg3KQotI2RlZmluZSBQNTRfUFNNX0xQSVQJCQlCSVQoOCkKLSNkZWZpbmUgUDU0X1BTTV9CRl9VQ0FTVF9TS0lQCQlCSVQoOSkKLSNkZWZpbmUgUDU0X1BTTV9CRl9NQ0FTVF9TS0lQCQlCSVQoMTApCi0KLXN0cnVjdCBwNTRfcHNtIHsKLQlfX2xlMTYgbW9kZTsKLQlfX2xlMTYgYWlkOwotCXN0cnVjdCBwNTRfcHNtX2ludGVydmFsIGludGVydmFsc1s0XTsKLQl1OCBiZWFjb25fcnNzaV9za2lwX21heDsKLQl1OCByc3NpX2RlbHRhX3RocmVzaG9sZDsKLQl1OCBucjsKLQl1OCBleGNsdWRlWzFdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgTUNfRklMVEVSX0FERFJFU1NfTlVNIDQKLQotc3RydWN0IHA1NF9ncm91cF9hZGRyZXNzX3RhYmxlIHsKLQlfX2xlMTYgZmlsdGVyX2VuYWJsZTsKLQlfX2xlMTYgbnVtX2FkZHJlc3M7Ci0JdTggbWFjX2xpc3RbTUNfRklMVEVSX0FERFJFU1NfTlVNXVtFVEhfQUxFTl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF90eGNhbmNlbCB7Ci0JX19sZTMyIHJlcV9pZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcDU0X3N0YV91bmxvY2sgewotCXU4IGFkZHJbRVRIX0FMRU5dOwotCXUxNiBwYWRkaW5nOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgUDU0X1RJTV9DTEVBUiBCSVQoMTUpCi1zdHJ1Y3QgcDU0X3RpbSB7Ci0JdTggY291bnQ7Ci0JdTggcGFkZGluZ1szXTsKLQlfX2xlMTYgZW50cnlbOF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF9jY2VfcXVpZXQgewotCV9fbGUzMiBwZXJpb2Q7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF9idF9iYWxhbmNlciB7Ci0JX19sZTE2IHByaW9fdGhyZXNoOwotCV9fbGUxNiBhY2xfdGhyZXNoOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfYXJwX3RhYmxlIHsKLQlfX2xlMTYgZmlsdGVyX2VuYWJsZTsKLQl1OCBpcHY0X2FkZHJbNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2VuZGlmIC8qIFA1NENPTU1PTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKaW5kZXggYjE2MTBlYS4uZDM0OGMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCiAjaW5jbHVkZSAicDU0LmgiCisjaW5jbHVkZSAibG1hYy5oIgogI2luY2x1ZGUgInA1NHBjaS5oIgogCiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4iKTsKQEAgLTU2NCw3ICs1NjUsNiBAQAogCiAgZXJyX2ZyZWVfY29tbW9uOgogCXJlbGVhc2VfZmlybXdhcmUocHJpdi0+ZmlybXdhcmUpOwotCXA1NF9mcmVlX2NvbW1vbihkZXYpOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKCpwcml2LT5yaW5nX2NvbnRyb2wpLAogCQkJICAgIHByaXYtPnJpbmdfY29udHJvbCwgcHJpdi0+cmluZ19jb250cm9sX2RtYSk7CiAKQEAgLTU3Myw3ICs1NzMsNyBAQAogCiAgZXJyX2ZyZWVfZGV2OgogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlpZWVlODAyMTFfZnJlZV9odyhkZXYpOworCXA1NF9mcmVlX2NvbW1vbihkZXYpOwogCiAgZXJyX2ZyZWVfcmVnOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CkBAIC01OTAsMTYgKzU5MCwxNSBAQAogCWlmICghZGV2KQogCQlyZXR1cm47CiAKLQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkZXYpOworCXA1NF91bnJlZ2lzdGVyX2NvbW1vbihkZXYpOwogCXByaXYgPSBkZXYtPnByaXY7CiAJcmVsZWFzZV9maXJtd2FyZShwcml2LT5maXJtd2FyZSk7CiAJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBzaXplb2YoKnByaXYtPnJpbmdfY29udHJvbCksCiAJCQkgICAgcHJpdi0+cmluZ19jb250cm9sLCBwcml2LT5yaW5nX2NvbnRyb2xfZG1hKTsKLQlwNTRfZnJlZV9jb21tb24oZGV2KTsKIAlpb3VubWFwKHByaXYtPm1hcCk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JaWVlZTgwMjExX2ZyZWVfaHcoZGV2KTsKKwlwNTRfZnJlZV9jb21tb24oZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCmluZGV4IDcyYzdkYmQuLjA1NDU4ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJwNTRzcGlfZWVwcm9tLmgiCiAjaW5jbHVkZSAicDU0LmgiCiAKLSNpbmNsdWRlICJwNTRjb21tb24uaCIKKyNpbmNsdWRlICJsbWFjLmgiCiAKIE1PRFVMRV9GSVJNV0FSRSgiMzgyNi5hcm0iKTsKIE1PRFVMRV9BTElBUygic3RsYzQ1eHgiKTsKQEAgLTExMSwxNSArMTExLDYgQEAKIAlzcGlfc3luYyhwcml2LT5zcGksICZtKTsKIH0KIAotc3RhdGljIHUxNiBwNTRzcGlfcmVhZDE2KHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHIpCi17Ci0JX19sZTE2IHZhbDsKLQotCXA1NHNwaV9zcGlfcmVhZChwcml2LCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7Ci0KLQlyZXR1cm4gbGUxNl90b19jcHUodmFsKTsKLX0KLQogc3RhdGljIHUzMiBwNTRzcGlfcmVhZDMyKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHIpCiB7CiAJX19sZTMyIHZhbDsKQEAgLTEzOSwzNyArMTMwLDEyIEBACiAJcDU0c3BpX3NwaV93cml0ZShwcml2LCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7CiB9CiAKLXN0cnVjdCBwNTRzcGlfc3BpX3JlZyB7Ci0JdTE2IGFkZHJlc3M7CQkvKiBfX2xlMTYgPyAqLwotCXUxNiBsZW5ndGg7Ci0JY2hhciAqbmFtZTsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcDU0c3BpX3NwaV9yZWcgcDU0c3BpX3JlZ2lzdGVyc19hcnJheVtdID0KLXsKLQl7IFNQSV9BRFJTX0FSTV9JTlRFUlJVUFRTLAkzMiwgIkFSTV9JTlQgICAgICIgfSwKLQl7IFNQSV9BRFJTX0FSTV9JTlRfRU4sCQkzMiwgIkFSTV9JTlRfRU5BICIgfSwKLQl7IFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUywJMzIsICJIT1NUX0lOVCAgICAiIH0sCi0JeyBTUElfQURSU19IT1NUX0lOVF9FTiwJCTMyLCAiSE9TVF9JTlRfRU5BIiB9LAotCXsgU1BJX0FEUlNfSE9TVF9JTlRfQUNLLAkzMiwgIkhPU1RfSU5UX0FDSyIgfSwKLQl7IFNQSV9BRFJTX0dFTl9QVVJQXzEsCQkzMiwgIkdQMV9DT01NICAgICIgfSwKLQl7IFNQSV9BRFJTX0dFTl9QVVJQXzIsCQkzMiwgIkdQMl9DT01NICAgICIgfSwKLQl7IFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsCTMyLCAiREVWX0NUUkxfU1RBIiB9LAotCXsgU1BJX0FEUlNfRE1BX0RBVEEsCQkxNiwgIkRNQV9EQVRBICAgICIgfSwKLQl7IFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLAkxNiwgIkRNQV9XUl9DVFJMICIgfSwKLQl7IFNQSV9BRFJTX0RNQV9XUklURV9MRU4sCTE2LCAiRE1BX1dSX0xFTiAgIiB9LAotCXsgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UsCTMyLCAiRE1BX1dSX0JBU0UgIiB9LAotCXsgU1BJX0FEUlNfRE1BX1JFQURfQ1RSTCwJMTYsICJETUFfUkRfQ1RSTCAiIH0sCi0JeyBTUElfQURSU19ETUFfUkVBRF9MRU4sCTE2LCAiRE1BX1JEX0xFTiAgIiB9LAotCXsgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UsCTMyLCAiRE1BX1JEX0JBU0UgIiB9Ci19OwotCi1zdGF0aWMgaW50IHA1NHNwaV93YWl0X2JpdChzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1MTYgcmVnLCBfX2xlMzIgYml0cykKK3N0YXRpYyBpbnQgcDU0c3BpX3dhaXRfYml0KHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHUxNiByZWcsIHUzMiBiaXRzKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IDIwMDA7IGkrKykgewotCQlfX2xlMzIgYnVmZmVyID0gcDU0c3BpX3JlYWQzMihwcml2LCByZWcpOworCQl1MzIgYnVmZmVyID0gcDU0c3BpX3JlYWQzMihwcml2LCByZWcpOwogCQlpZiAoKGJ1ZmZlciAmIGJpdHMpID09IGJpdHMpCiAJCQlyZXR1cm4gMTsKIAl9CkBAIC0xNzksOCArMTQ1LDcgQEAKIHN0YXRpYyBpbnQgcDU0c3BpX3NwaV93cml0ZV9kbWEoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgX19sZTMyIGJhc2UsCiAJCQkJY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQogewotCWlmICghcDU0c3BpX3dhaXRfYml0KHByaXYsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLAotCQkJICAgICBjcHVfdG9fbGUzMihIT1NUX0FMTE9XRUQpKSkgeworCWlmICghcDU0c3BpX3dhaXRfYml0KHByaXYsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLCBIT1NUX0FMTE9XRUQpKSB7CiAJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAic3BpX3dyaXRlX2RtYSBub3QgYWxsb3dlZCAiCiAJCQkidG8gRE1BIHdyaXRlLlxuIik7CiAJCXJldHVybiAtRUFHQUlOOwpAQCAtMzMzLDcgKzI5OCw3IEBACiAKIAkvKiBBbmQgd2FpdCBmb3IgdGhlIFJFQURZIGludGVycnVwdCAqLwogCWlmICghcDU0c3BpX3dhaXRfYml0KHByaXYsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUywKLQkJCSAgICAgY3B1X3RvX2xlMzIoU1BJX0hPU1RfSU5UX1JFQURZKSkpIHsKKwkJCSAgICAgU1BJX0hPU1RfSU5UX1JFQURZKSkgewogCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgIklOVF9SRUFEWSB0aW1lb3V0XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC00MjYsNyArMzkxLDcgQEAKIAlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29uZmlnOwogCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKIAotCXF1ZXVlX3dvcmsocHJpdi0+aHctPndvcmtxdWV1ZSwgJnByaXYtPndvcmspOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKHByaXYtPmh3LCAmcHJpdi0+d29yayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC00NDQsNyArNDA5LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlpZiAoIXA1NHNwaV93YWl0X2JpdChwcml2LCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMsCi0JCQkgICAgIGNwdV90b19sZTMyKFNQSV9IT1NUX0lOVF9XUl9SRUFEWSkpKSB7CisJCQkgICAgIFNQSV9IT1NUX0lOVF9XUl9SRUFEWSkpIHsKIAkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJXUl9SRUFEWSB0aW1lb3V0XG4iKTsKIAkJcmV0ID0gLUVBR0FJTjsKIAkJZ290byBvdXQ7CkBAIC01MTQsNyArNDc5LDcgQEAKIAlsaXN0X2FkZF90YWlsKCZkaS0+dHhfbGlzdCwgJnByaXYtPnR4X3BlbmRpbmcpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2xvY2ssIGZsYWdzKTsKIAotCXF1ZXVlX3dvcmsocHJpdi0+aHctPndvcmtxdWV1ZSwgJnByaXYtPndvcmspOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKHByaXYtPmh3LCAmcHJpdi0+d29yayk7CiB9CiAKIHN0YXRpYyB2b2lkIHA1NHNwaV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTcxMyw3ICs2NzgsNyBAQAogewogCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKIAotCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHByaXYtPmh3KTsKKwlwNTRfdW5yZWdpc3Rlcl9jb21tb24ocHJpdi0+aHcpOwogCiAJZnJlZV9pcnEoZ3Bpb190b19pcnEocDU0c3BpX2dwaW9faXJxKSwgc3BpKTsKIApAQCAtNzI0LDcgKzY4OSw2IEBACiAJbXV0ZXhfZGVzdHJveSgmcHJpdi0+bXV0ZXgpOwogCiAJcDU0X2ZyZWVfY29tbW9uKHByaXYtPmh3KTsKLQlpZWVlODAyMTFfZnJlZV9odyhwcml2LT5odyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYwppbmRleCAwZTg3N2ExLi5lNDQ0NjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKICNpbmNsdWRlICJwNTQuaCIKKyNpbmNsdWRlICJsbWFjLmgiCiAjaW5jbHVkZSAicDU0dXNiLmgiCiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PiIpOwpAQCAtMjQ1LDggKzI0NiwxMCBAQAogCXN0cnVjdCBsbTg3X3R4X2hkciAqaGRyID0gKHZvaWQgKilza2ItPmRhdGEgLSBzaXplb2YoKmhkcik7CiAKIAlkYXRhX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFkYXRhX3VyYikKKwlpZiAoIWRhdGFfdXJiKSB7CisJCXA1NF9mcmVlX3NrYihkZXYsIHNrYik7CiAJCXJldHVybjsKKwl9CiAKIAloZHItPmNoa3N1bSA9IHA1NHVfbG04N19jaGtzdW0oKF9fbGUzMiAqKXNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCWhkci0+ZGV2aWNlX2FkZHIgPSAoKHN0cnVjdCBwNTRfaGRyICopc2tiLT5kYXRhKS0+cmVxX2lkOwpAQCAtMjY4LDI3ICsyNzEsMjIgQEAKIHN0YXRpYyB2b2lkIHA1NHVfdHhfbmV0MjI4MChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHA1NHVfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgdXJiICppbnRfdXJiLCAqZGF0YV91cmI7CisJc3RydWN0IHVyYiAqaW50X3VyYiA9IE5VTEwsICpkYXRhX3VyYiA9IE5VTEw7CiAJc3RydWN0IG5ldDIyODBfdHhfaGRyICpoZHIgPSAodm9pZCAqKXNrYi0+ZGF0YSAtIHNpemVvZigqaGRyKTsKLQlzdHJ1Y3QgbmV0MjI4MF9yZWdfd3JpdGUgKnJlZzsKLQlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgbmV0MjI4MF9yZWdfd3JpdGUgKnJlZyA9IE5VTEw7CisJaW50IGVyciA9IC1FTk9NRU07CiAKIAlyZWcgPSBrbWFsbG9jKHNpemVvZigqcmVnKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFyZWcpCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAlpbnRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWludF91cmIpIHsKLQkJa2ZyZWUocmVnKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoIWludF91cmIpCisJCWdvdG8gb3V0OwogCiAJZGF0YV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwotCWlmICghZGF0YV91cmIpIHsKLQkJa2ZyZWUocmVnKTsKLQkJdXNiX2ZyZWVfdXJiKGludF91cmIpOwotCQlyZXR1cm47Ci0JfQorCWlmICghZGF0YV91cmIpCisJCWdvdG8gb3V0OwogCiAJcmVnLT5wb3J0ID0gY3B1X3RvX2xlMTYoTkVUMjI4MF9ERVZfVTMyKTsKIAlyZWctPmFkZHIgPSBjcHVfdG9fbGUzMihQNTRVX0RFVl9CQVNFKTsKQEAgLTMwMywxMSArMzAxLDEyIEBACiAJCXA1NHVfdHhfZHVtbXlfY2IsIGRldik7CiAKIAkvKgotCSAqIFRoaXMgZmxhZyB0cmlnZ2VycyBhIGNvZGUgcGF0aCBpbiB0aGUgVVNCIHN1YnN5c3RlbSB0aGF0IHdpbGwKLQkgKiBmcmVlIHdoYXQncyBpbnNpZGUgdGhlIHRyYW5zZmVyX2J1ZmZlciBhZnRlciB0aGUgY2FsbGJhY2sgcm91dGluZQotCSAqIGhhcyBjb21wbGV0ZWQuCisJICogVVJCX0ZSRUVfQlVGRkVSIHRyaWdnZXJzIGEgY29kZSBwYXRoIGluIHRoZSBVU0Igc3Vic3lzdGVtIHRoYXQgd2lsbAorCSAqIGZyZWUgd2hhdCBpcyBpbnNpZGUgdGhlIHRyYW5zZmVyX2J1ZmZlciBhZnRlciB0aGUgbGFzdCByZWZlcmVuY2UgdG8KKwkgKiB0aGUgaW50X3VyYiBpcyBkcm9wcGVkLgogCSAqLwogCWludF91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9GUkVFX0JVRkZFUiB8IFVSQl9aRVJPX1BBQ0tFVDsKKwlyZWcgPSBOVUxMOwogCiAJdXNiX2ZpbGxfYnVsa191cmIoZGF0YV91cmIsIHByaXYtPnVkZXYsCiAJCQkgIHVzYl9zbmRidWxrcGlwZShwcml2LT51ZGV2LCBQNTRVX1BJUEVfREFUQSksCkBAIC0zMjgsMTIgKzMyNywxMiBAQAogCQl1c2JfdW5hbmNob3JfdXJiKGRhdGFfdXJiKTsKIAkJZ290byBvdXQ7CiAJfQotIG91dDoKK291dDoKIAl1c2JfZnJlZV91cmIoaW50X3VyYik7CiAJdXNiX2ZyZWVfdXJiKGRhdGFfdXJiKTsKIAogCWlmIChlcnIpIHsKLQkJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmhkcikpOworCQlrZnJlZShyZWcpOwogCQlwNTRfZnJlZV9za2IoZGV2LCBza2IpOwogCX0KIH0KQEAgLTk2MSw3ICs5NjAsNyBAQAogCXJlbGVhc2VfZmlybXdhcmUocHJpdi0+ZncpOwogCiBlcnJfZnJlZV9kZXY6Ci0JaWVlZTgwMjExX2ZyZWVfaHcoZGV2KTsKKwlwNTRfZnJlZV9jb21tb24oZGV2KTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCXVzYl9wdXRfZGV2KHVkZXYpOwogCXJldHVybiBlcnI7CkBAIC05NzUsMTMgKzk3NCwxMiBAQAogCWlmICghZGV2KQogCQlyZXR1cm47CiAKLQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkZXYpOworCXA1NF91bnJlZ2lzdGVyX2NvbW1vbihkZXYpOwogCiAJcHJpdiA9IGRldi0+cHJpdjsKIAl1c2JfcHV0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTsKIAlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmZ3KTsKIAlwNTRfZnJlZV9jb21tb24oZGV2KTsKLQlpZWVlODAyMTFfZnJlZV9odyhkZXYpOwogfQogCiBzdGF0aWMgaW50IHA1NHVfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZkZGEyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMKQEAgLTAsMCArMSw4NjkgQEAKKy8qCisgKiBDb21tb24gY29kZSBmb3IgbWFjODAyMTEgUHJpc201NCBkcml2ZXJzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBCYXNlZCBvbjoKKyAqIC0gdGhlIGlzbHNtIChzb2Z0bWFjIHByaXNtNTQpIGRyaXZlciwgd2hpY2ggaXM6CisgKiAgIENvcHlyaWdodCAyMDA0LTIwMDYgSmVhbi1CYXB0aXN0ZSBOb3RlIDxqYm5vdGVAZ21haWwuY29tPiwgZXQgYWwuCisgKiAtIHN0bGM0NXh4IGRyaXZlcgorICogICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgInA1NC5oIgorI2luY2x1ZGUgImxtYWMuaCIKKworI2lmZGVmIFA1NF9NTV9ERUJVRworc3RhdGljIHZvaWQgcDU0X2R1bXBfdHhfcXVldWUoc3RydWN0IHA1NF9jb21tb24gKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJc3RydWN0IHA1NF90eF9pbmZvICpyYW5nZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwNTRfaGRyICpoZHI7CisJdW5zaWduZWQgaW50IGkgPSAwOworCXUzMiBwcmV2X2FkZHI7CisJdTMyIGxhcmdlc3RfaG9sZSA9IDAsIGZyZWU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogLyAtLS0gdHggcXVldWUgZHVtcCAoJWQgZW50cmllcykgLS0tIFxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBza2JfcXVldWVfbGVuKCZwcml2LT50eF9xdWV1ZSkpOworCisJcHJldl9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7CisJc2tiX3F1ZXVlX3dhbGsoJnByaXYtPnR4X3F1ZXVlLCBza2IpIHsKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJcmFuZ2UgPSAodm9pZCAqKSBpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOworCQloZHIgPSAodm9pZCAqKSBza2ItPmRhdGE7CisKKwkJZnJlZSA9IHJhbmdlLT5zdGFydF9hZGRyIC0gcHJldl9hZGRyOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHwgWyUwMmRdID0+IFtza2I6JXAgc2tiX2xlbjoweCUwNHggIgorCQkgICAgICAgImhkcjp7ZmxhZ3M6JTAyeCBsZW46JTA0eCByZXFfaWQ6JTA0eCB0eXBlOiUwMnh9ICIKKwkJICAgICAgICJtZW06e3N0YXJ0OiUwNHggZW5kOiUwNHgsIGZyZWU6JWR9XVxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgaSsrLCBza2IsIHNrYi0+bGVuLAorCQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5mbGFncyksIGxlMTZfdG9fY3B1KGhkci0+bGVuKSwKKwkJICAgICAgIGxlMzJfdG9fY3B1KGhkci0+cmVxX2lkKSwgbGUxNl90b19jcHUoaGRyLT50eXBlKSwKKwkJICAgICAgIHJhbmdlLT5zdGFydF9hZGRyLCByYW5nZS0+ZW5kX2FkZHIsIGZyZWUpOworCisJCXByZXZfYWRkciA9IHJhbmdlLT5lbmRfYWRkcjsKKwkJbGFyZ2VzdF9ob2xlID0gbWF4KGxhcmdlc3RfaG9sZSwgZnJlZSk7CisJfQorCWZyZWUgPSBwcml2LT5yeF9lbmQgLSBwcmV2X2FkZHI7CisJbGFyZ2VzdF9ob2xlID0gbWF4KGxhcmdlc3RfaG9sZSwgZnJlZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBcXCAtLS0gW2ZyZWU6ICVkXSwgbGFyZ2VzdCBmcmVlIGJsb2NrOiAlZCAtLS1cbiIsCisJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgZnJlZSwgbGFyZ2VzdF9ob2xlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7Cit9CisjZW5kaWYgLyogUDU0X01NX0RFQlVHICovCisKKy8qCisgKiBTbywgdGhlIGZpcm13YXJlIGlzIHNvbWV3aGF0IHN0dXBpZCBhbmQgZG9lc24ndCBrbm93IHdoYXQgcGxhY2VzIGluIGl0cworICogbWVtb3J5IGluY29taW5nIGRhdGEgc2hvdWxkIGdvIHRvLiBCeSBwb2tpbmcgYXJvdW5kIGluIHRoZSBmaXJtd2FyZSwgd2UKKyAqIGNhbiBmaW5kIHNvbWUgdW51c2VkIG1lbW9yeSB0byB1cGxvYWQgb3VyIHBhY2tldHMgdG8uIEhvd2V2ZXIsIGRhdGEgdGhhdCB3ZQorICogd2FudCB0aGUgY2FyZCB0byBUWCBuZWVkcyB0byBzdGF5IGludGFjdCB1bnRpbCB0aGUgY2FyZCBoYXMgdG9sZCB1cyB0aGF0CisgKiBpdCBpcyBkb25lIHdpdGggaXQuIFRoaXMgZnVuY3Rpb24gZmluZHMgZW1wdHkgcGxhY2VzIHdlIGNhbiB1cGxvYWQgdG8gYW5kCisgKiBtYXJrcyBhbGxvY2F0ZWQgYXJlYXMgYXMgcmVzZXJ2ZWQgaWYgbmVjZXNzYXJ5LiBwNTRfZmluZF9hbmRfdW5saW5rX3NrYiBvcgorICogcDU0X2ZyZWVfc2tiIGZyZWVzIGFsbG9jYXRlZCBhcmVhcy4KKyAqLworc3RhdGljIGludCBwNTRfYXNzaWduX2FkZHJlc3Moc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNrX2J1ZmYgKmVudHJ5LCAqdGFyZ2V0X3NrYiA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqcmFuZ2U7CisJc3RydWN0IHA1NF9oZHIgKmRhdGEgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgbGFzdF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7CisJdTMyIHRhcmdldF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7CisJdTE2IGxlbiA9IHByaXYtPmhlYWRyb29tICsgc2tiLT5sZW4gKyBwcml2LT50YWlscm9vbSArIDM7CisKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXJhbmdlID0gKHZvaWQgKikgaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKKwlsZW4gPSAocmFuZ2UtPmV4dHJhX2xlbiArIGxlbikgJiB+MHgzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfcXVldWUpID09IDMyKSkgeworCQkvKgorCQkgKiBUaGUgdHhfcXVldWUgaXMgbm93IHJlYWxseSBmdWxsLgorCQkgKgorCQkgKiBUT0RPOiBjaGVjayBpZiB0aGUgZGV2aWNlIGhhcyBjcmFzaGVkIGFuZCByZXNldCBpdC4KKwkJICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlza2JfcXVldWVfd2FsaygmcHJpdi0+dHhfcXVldWUsIGVudHJ5KSB7CisJCXUzMiBob2xlX3NpemU7CisJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5KTsKKwkJcmFuZ2UgPSAodm9pZCAqKSBpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOworCQlob2xlX3NpemUgPSByYW5nZS0+c3RhcnRfYWRkciAtIGxhc3RfYWRkcjsKKworCQlpZiAoIXRhcmdldF9za2IgJiYgaG9sZV9zaXplID49IGxlbikgeworCQkJdGFyZ2V0X3NrYiA9IGVudHJ5LT5wcmV2OworCQkJaG9sZV9zaXplIC09IGxlbjsKKwkJCXRhcmdldF9hZGRyID0gbGFzdF9hZGRyOworCQkJYnJlYWs7CisJCX0KKwkJbGFzdF9hZGRyID0gcmFuZ2UtPmVuZF9hZGRyOworCX0KKwlpZiAodW5saWtlbHkoIXRhcmdldF9za2IpKSB7CisJCWlmIChwcml2LT5yeF9lbmQgLSBsYXN0X2FkZHIgPj0gbGVuKSB7CisJCQl0YXJnZXRfc2tiID0gcHJpdi0+dHhfcXVldWUucHJldjsKKwkJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwcml2LT50eF9xdWV1ZSkpIHsKKwkJCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQih0YXJnZXRfc2tiKTsKKwkJCQlyYW5nZSA9ICh2b2lkICopaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKKwkJCQl0YXJnZXRfYWRkciA9IHJhbmdlLT5lbmRfYWRkcjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRU5PU1BDOworCQl9CisJfQorCisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlyYW5nZSA9ICh2b2lkICopIGluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CisJcmFuZ2UtPnN0YXJ0X2FkZHIgPSB0YXJnZXRfYWRkcjsKKwlyYW5nZS0+ZW5kX2FkZHIgPSB0YXJnZXRfYWRkciArIGxlbjsKKwlkYXRhLT5yZXFfaWQgPSBjcHVfdG9fbGUzMih0YXJnZXRfYWRkciArIHByaXYtPmhlYWRyb29tKTsKKwlpZiAoSVNfREFUQV9GUkFNRShza2IpICYmCisJICAgIHVubGlrZWx5KEdFVF9IV19RVUVVRShza2IpID09IFA1NF9RVUVVRV9CRUFDT04pKQorCQlwcml2LT5iZWFjb25fcmVxX2lkID0gZGF0YS0+cmVxX2lkOworCisJX19za2JfcXVldWVfYWZ0ZXIoJnByaXYtPnR4X3F1ZXVlLCB0YXJnZXRfc2tiLCBza2IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcDU0X3R4X3BlbmRpbmcoc3RydWN0IHA1NF9jb21tb24gKnByaXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgcmV0OworCisJc2tiID0gc2tiX2RlcXVldWUoJnByaXYtPnR4X3BlbmRpbmcpOworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuIDsKKworCXJldCA9IHA1NF9hc3NpZ25fYWRkcmVzcyhwcml2LCBza2IpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlza2JfcXVldWVfaGVhZCgmcHJpdi0+dHhfcGVuZGluZywgc2tiKTsKKwllbHNlCisJCXByaXYtPnR4KHByaXYtPmh3LCBza2IpOworfQorCitzdGF0aWMgdm9pZCBwNTRfd2FrZV9xdWV1ZXMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICh1bmxpa2VseShwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSkKKwkJcmV0dXJuIDsKKworCXA1NF90eF9wZW5kaW5nKHByaXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+aHctPnF1ZXVlczsgaSsrKSB7CisJCWlmIChwcml2LT50eF9zdGF0c1tpICsgUDU0X1FVRVVFX0RBVEFdLmxlbiA8CisJCSAgICBwcml2LT50eF9zdGF0c1tpICsgUDU0X1FVRVVFX0RBVEFdLmxpbWl0KQorCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIGkpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9zdGF0c19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcDU0X3R4X3Fvc19hY2NvdW50aW5nX2FsbG9jKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgICBjb25zdCB1MTYgcDU0X3F1ZXVlKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnF1ZXVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoV0FSTl9PTihwNTRfcXVldWUgPiBQNTRfUVVFVUVfTlVNKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlxdWV1ZSA9ICZwcml2LT50eF9zdGF0c1twNTRfcXVldWVdOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkocXVldWUtPmxlbiA+PSBxdWV1ZS0+bGltaXQgJiYgSVNfUU9TX1FVRVVFKHA1NF9xdWV1ZSkpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJcXVldWUtPmxlbisrOworCXF1ZXVlLT5jb3VudCsrOworCisJaWYgKHVubGlrZWx5KHF1ZXVlLT5sZW4gPT0gcXVldWUtPmxpbWl0ICYmIElTX1FPU19RVUVVRShwNTRfcXVldWUpKSkgeworCQl1MTYgYWNfcXVldWUgPSBwNTRfcXVldWUgLSBQNTRfUVVFVUVfREFUQTsKKwkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aHcsIGFjX3F1ZXVlKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHA1NF90eF9xb3NfYWNjb3VudGluZ19mcmVlKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChJU19EQVRBX0ZSQU1FKHNrYikpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOworCQlwcml2LT50eF9zdGF0c1tHRVRfSFdfUVVFVUUoc2tiKV0ubGVuLS07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKKworCQlpZiAodW5saWtlbHkoR0VUX0hXX1FVRVVFKHNrYikgPT0gUDU0X1FVRVVFX0JFQUNPTikpIHsKKwkJCWlmIChwcml2LT5iZWFjb25fcmVxX2lkID09IEdFVF9SRVFfSUQoc2tiKSkgeworCQkJCS8qIHRoaXMgaXMgdGhlICBhY3RpdmUgYmVhY29uIHNldCBhbnltb3JlICovCisJCQkJcHJpdi0+YmVhY29uX3JlcV9pZCA9IDA7CisJCQl9CisJCQljb21wbGV0ZSgmcHJpdi0+YmVhY29uX2NvbXApOworCQl9CisJfQorCXA1NF93YWtlX3F1ZXVlcyhwcml2KTsKK30KKwordm9pZCBwNTRfZnJlZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuIDsKKworCXNrYl91bmxpbmsoc2tiLCAmcHJpdi0+dHhfcXVldWUpOworCXA1NF90eF9xb3NfYWNjb3VudGluZ19mcmVlKHByaXYsIHNrYik7CisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHA1NF9mcmVlX3NrYik7CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcDU0X2ZpbmRfYW5kX3VubGlua19za2Ioc3RydWN0IHA1NF9jb21tb24gKnByaXYsCisJCQkJCSAgICAgICBjb25zdCBfX2xlMzIgcmVxX2lkKQoreworCXN0cnVjdCBza19idWZmICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKKwlza2JfcXVldWVfd2FsaygmcHJpdi0+dHhfcXVldWUsIGVudHJ5KSB7CisJCXN0cnVjdCBwNTRfaGRyICpoZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgZW50cnktPmRhdGE7CisKKwkJaWYgKGhkci0+cmVxX2lkID09IHJlcV9pZCkgeworCQkJX19za2JfdW5saW5rKGVudHJ5LCAmcHJpdi0+dHhfcXVldWUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOworCQkJcDU0X3R4X3Fvc19hY2NvdW50aW5nX2ZyZWUocHJpdiwgZW50cnkpOworCQkJcmV0dXJuIGVudHJ5OworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBwNTRfdHgoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2tiX3F1ZXVlX3RhaWwoJnByaXYtPnR4X3BlbmRpbmcsIHNrYik7CisJcDU0X3R4X3BlbmRpbmcocHJpdik7Cit9CisKK3N0YXRpYyBpbnQgcDU0X3Jzc2lfdG9fZGJtKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBpbnQgcnNzaSkKK3sKKwlpbnQgYmFuZCA9IHByaXYtPmh3LT5jb25mLmNoYW5uZWwtPmJhbmQ7CisKKwlpZiAocHJpdi0+cnhodyAhPSA1KQorCQlyZXR1cm4gKChyc3NpICogcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpIC8gNjQgKworCQkJIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0uYWRkKSAvIDQ7CisJZWxzZQorCQkvKgorCQkgKiBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IGZvcm11bGEKKwkJICovCisJCXJldHVybiAoKHJzc2kgKiBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCkgLyA2NCArCisJCQkgcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpIC8gNDsKK30KKworLyoKKyAqIEV2ZW4gaWYgdGhlIGZpcm13YXJlIGlzIGNhcGFibGUgb2YgZGVhbGluZyB3aXRoIGluY29taW5nIHRyYWZmaWMsCisgKiB3aGlsZSBkb3ppbmcsIHdlIGhhdmUgdG8gcHJlcGFyZWQgaW4gY2FzZSBtYWM4MDIxMSB1c2VzIFBTLVBPTEwKKyAqIHRvIHJldHJpZXZlIG91dHN0YW5kaW5nIGZyYW1lcyBmcm9tIG91ciBBUC4KKyAqIChzZWUgY29tbWVudCBpbiBuZXQvbWFjODAyMTEvbWxtZS5jIEAgbGluZSAxOTkzKQorICovCitzdGF0aWMgdm9pZCBwNTRfcHNwb2xsX3dvcmthcm91bmQoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqdGltX2llOworCXU4ICp0aW07CisJdTggdGltX2xlbjsKKwlib29sIG5ld19wc207CisKKwkvKiBvbmx5IGJlYWNvbnMgaGF2ZSBhIFRJTSBJRSAqLworCWlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm47CisKKwlpZiAoIXByaXYtPmFpZCkKKwkJcmV0dXJuOworCisJLyogb25seSBjb25zaWRlciBiZWFjb25zIGZyb20gdGhlIGFzc29jaWF0ZWQgQlNTSUQgKi8KKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGhkci0+YWRkcjMsIHByaXYtPmJzc2lkKSkKKwkJcmV0dXJuOworCisJdGltID0gcDU0X2ZpbmRfaWUoc2tiLCBXTEFOX0VJRF9USU0pOworCWlmICghdGltKQorCQlyZXR1cm47CisKKwl0aW1fbGVuID0gdGltWzFdOworCXRpbV9pZSA9IChzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqKSAmdGltWzJdOworCisJbmV3X3BzbSA9IGllZWU4MDIxMV9jaGVja190aW0odGltX2llLCB0aW1fbGVuLCBwcml2LT5haWQpOworCWlmIChuZXdfcHNtICE9IHByaXYtPnBvd2Vyc2F2ZV9vdmVycmlkZSkgeworCQlwcml2LT5wb3dlcnNhdmVfb3ZlcnJpZGUgPSBuZXdfcHNtOworCQlwNTRfc2V0X3BzKHByaXYpOworCX0KK30KKworc3RhdGljIGludCBwNTRfcnhfZGF0YShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcDU0X3J4X2RhdGEgKmhkciA9IChzdHJ1Y3QgcDU0X3J4X2RhdGEgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKKwl1MTYgZnJlcSA9IGxlMTZfdG9fY3B1KGhkci0+ZnJlcSk7CisJc2l6ZV90IGhlYWRlcl9sZW4gPSBzaXplb2YoKmhkcik7CisJdTMyIHRzZjMyOworCXU4IHJhdGUgPSBoZHItPnJhdGUgJiAweGY7CisKKwkvKgorCSAqIElmIHRoZSBkZXZpY2UgaXMgaW4gYSB1bnNwZWNpZmllZCBzdGF0ZSB3ZSBoYXZlIHRvCisJICogaWdub3JlIGFsbCBkYXRhIGZyYW1lcy4gRWxzZSB3ZSBjb3VsZCBlbmQgdXAgd2l0aCBhCisJICogbmFzdHkgY3Jhc2guCisJICovCisJaWYgKHVubGlrZWx5KHByaXYtPm1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpKQorCQlyZXR1cm4gMDsKKworCWlmICghKGhkci0+ZmxhZ3MgJiBjcHVfdG9fbGUxNihQNTRfSERSX0ZMQUdfREFUQV9JTl9GQ1NfR09PRCkpKQorCQlyZXR1cm4gMDsKKworCWlmIChoZHItPmRlY3J5cHRfc3RhdHVzID09IFA1NF9ERUNSWVBUX09LKQorCQlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19ERUNSWVBURUQ7CisJaWYgKChoZHItPmRlY3J5cHRfc3RhdHVzID09IFA1NF9ERUNSWVBUX0ZBSUxfTUlDSEFFTCkgfHwKKwkgICAgKGhkci0+ZGVjcnlwdF9zdGF0dXMgPT0gUDU0X0RFQ1JZUFRfRkFJTF9US0lQKSkKKwkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKKworCXJ4X3N0YXR1cy0+c2lnbmFsID0gcDU0X3Jzc2lfdG9fZGJtKHByaXYsIGhkci0+cnNzaSk7CisJcnhfc3RhdHVzLT5ub2lzZSA9IHByaXYtPm5vaXNlOworCWlmIChoZHItPnJhdGUgJiAweDEwKQorCQlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKKwlpZiAocHJpdi0+aHctPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gKHJhdGUgPCA0KSA/IDAgOiByYXRlIC0gNDsKKwllbHNlCisJCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSByYXRlOworCisJcnhfc3RhdHVzLT5mcmVxID0gZnJlcTsKKwlyeF9zdGF0dXMtPmJhbmQgPSAgcHJpdi0+aHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKKwlyeF9zdGF0dXMtPmFudGVubmEgPSBoZHItPmFudGVubmE7CisKKwl0c2YzMiA9IGxlMzJfdG9fY3B1KGhkci0+dHNmMzIpOworCWlmICh0c2YzMiA8IHByaXYtPnRzZl9sb3czMikKKwkJcHJpdi0+dHNmX2hpZ2gzMisrOworCXJ4X3N0YXR1cy0+bWFjdGltZSA9ICgodTY0KXByaXYtPnRzZl9oaWdoMzIpIDw8IDMyIHwgdHNmMzI7CisJcHJpdi0+dHNmX2xvdzMyID0gdHNmMzI7CisKKwlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19UU0ZUOworCisJaWYgKGhkci0+ZmxhZ3MgJiBjcHVfdG9fbGUxNihQNTRfSERSX0ZMQUdfREFUQV9BTElHTikpCisJCWhlYWRlcl9sZW4gKz0gaGRyLT5hbGlnblswXTsKKworCXNrYl9wdWxsKHNrYiwgaGVhZGVyX2xlbik7CisJc2tiX3RyaW0oc2tiLCBsZTE2X3RvX2NwdShoZHItPmxlbikpOworCWlmICh1bmxpa2VseShwcml2LT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSkKKwkJcDU0X3BzcG9sbF93b3JrYXJvdW5kKHByaXYsIHNrYik7CisKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShwcml2LT5odywgc2tiKTsKKworCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHcsICZwcml2LT53b3JrLAorCQkJICAgbXNlY3NfdG9famlmZmllcyhQNTRfU1RBVElTVElDU19VUERBVEUpKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgcDU0X3J4X2ZyYW1lX3NlbnQoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHA1NF9oZHIgKmhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IHA1NF9mcmFtZV9zZW50ICpwYXlsb2FkID0gKHN0cnVjdCBwNTRfZnJhbWVfc2VudCAqKSBoZHItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXN0cnVjdCBwNTRfaGRyICplbnRyeV9oZHI7CisJc3RydWN0IHA1NF90eF9kYXRhICplbnRyeV9kYXRhOworCXN0cnVjdCBza19idWZmICplbnRyeTsKKwl1bnNpZ25lZCBpbnQgcGFkID0gMCwgZnJhbWVfbGVuOworCWludCBjb3VudCwgaWR4OworCisJZW50cnkgPSBwNTRfZmluZF9hbmRfdW5saW5rX3NrYihwcml2LCBoZHItPnJlcV9pZCk7CisJaWYgKHVubGlrZWx5KCFlbnRyeSkpCisJCXJldHVybiA7CisKKwlmcmFtZV9sZW4gPSBlbnRyeS0+bGVuOworCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5KTsKKwllbnRyeV9oZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgZW50cnktPmRhdGE7CisJZW50cnlfZGF0YSA9IChzdHJ1Y3QgcDU0X3R4X2RhdGEgKikgZW50cnlfaGRyLT5kYXRhOworCXByaXYtPnN0YXRzLmRvdDExQUNLRmFpbHVyZUNvdW50ICs9IHBheWxvYWQtPnRyaWVzIC0gMTsKKworCS8qCisJICogRnJhbWVzIGluIFA1NF9RVUVVRV9GV1NDQU4gYW5kIFA1NF9RVUVVRV9CRUFDT04gYXJlCisJICogZ2VuZXJhdGVkIGJ5IHRoZSBkcml2ZXIuIFRoZXJlZm9yZSB0eF9zdGF0dXMgaXMgYm9ndXMKKwkgKiBhbmQgd2UgZG9uJ3Qgd2FudCB0byBjb25mdXNlIHRoZSBtYWM4MDIxMSBzdGFjay4KKwkgKi8KKwlpZiAodW5saWtlbHkoZW50cnlfZGF0YS0+aHdfcXVldWUgPCBQNTRfUVVFVUVfRldTQ0FOKSkgeworCQlkZXZfa2ZyZWVfc2tiX2FueShlbnRyeSk7CisJCXJldHVybiA7CisJfQorCisJLyoKKwkgKiBDbGVhciBtYW51YWxseSwgaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzIHdvdWxkCisJICogY2xlYXIgdGhlIGNvdW50cyB0b28gYW5kIHdlIG5lZWQgdGhlbS4KKwkgKi8KKwltZW1zZXQoJmluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbGVuLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvKSAtCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbywgc3RhdHVzLmFtcGR1X2Fja19sZW4pKTsKKwlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvLAorCQkJICAgICAgc3RhdHVzLmFtcGR1X2Fja19sZW4pICE9IDIzKTsKKworCWlmIChlbnRyeV9oZHItPmZsYWdzICYgY3B1X3RvX2xlMTYoUDU0X0hEUl9GTEFHX0RBVEFfQUxJR04pKQorCQlwYWQgPSBlbnRyeV9kYXRhLT5hbGlnblswXTsKKworCS8qIHdhbGsgdGhyb3VnaCB0aGUgcmF0ZXMgYXJyYXkgYW5kIGFkanVzdCB0aGUgY291bnRzICovCisJY291bnQgPSBwYXlsb2FkLT50cmllczsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IDQ7IGlkeCsrKSB7CisJCWlmIChjb3VudCA+PSBpbmZvLT5zdGF0dXMucmF0ZXNbaWR4XS5jb3VudCkgeworCQkJY291bnQgLT0gaW5mby0+c3RhdHVzLnJhdGVzW2lkeF0uY291bnQ7CisJCX0gZWxzZSBpZiAoY291bnQgPiAwKSB7CisJCQlpbmZvLT5zdGF0dXMucmF0ZXNbaWR4XS5jb3VudCA9IGNvdW50OworCQkJY291bnQgPSAwOworCQl9IGVsc2UgeworCQkJaW5mby0+c3RhdHVzLnJhdGVzW2lkeF0uaWR4ID0gLTE7CisJCQlpbmZvLT5zdGF0dXMucmF0ZXNbaWR4XS5jb3VudCA9IDA7CisJCX0KKwl9CisKKwlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSAmJgorCSAgICAgKCFwYXlsb2FkLT5zdGF0dXMpKQorCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJaWYgKHBheWxvYWQtPnN0YXR1cyAmIFA1NF9UWF9QU01fQ0FOQ0VMTEVEKQorCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDsKKwlpbmZvLT5zdGF0dXMuYWNrX3NpZ25hbCA9IHA1NF9yc3NpX3RvX2RibShwcml2LAorCQkJCQkJICAoaW50KXBheWxvYWQtPmFja19yc3NpKTsKKworCS8qIFVuZG8gYWxsIGNoYW5nZXMgdG8gdGhlIGZyYW1lLiAqLworCXN3aXRjaCAoZW50cnlfZGF0YS0+a2V5X3R5cGUpIHsKKwljYXNlIFA1NF9DUllQVE9fVEtJUE1JQ0hBRUw6IHsKKwkJdTggKml2ID0gKHU4ICopKGVudHJ5X2RhdGEtPmFsaWduICsgcGFkICsKKwkJCQllbnRyeV9kYXRhLT5jcnlwdF9vZmZzZXQpOworCisJCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIFRLSVAgSVYuICovCisJCWl2WzJdID0gaXZbMF07CisJCWl2WzBdID0gaXZbMV07CisJCWl2WzFdID0gKGl2WzBdIHwgMHgyMCkgJiAweDdmOwkvKiBXRVBTZWVkIC0gOC4zLjIuMiAqLworCisJCWZyYW1lX2xlbiAtPSAxMjsgLyogcmVtb3ZlIFRLSVBfTU1JQyArIFRLSVBfSUNWICovCisJCWJyZWFrOworCQl9CisJY2FzZSBQNTRfQ1JZUFRPX0FFU0NDTVA6CisJCWZyYW1lX2xlbiAtPSA4OyAvKiByZW1vdmUgQ0NNUF9NSUMgKi8KKwkJYnJlYWs7CisJY2FzZSBQNTRfQ1JZUFRPX1dFUDoKKwkJZnJhbWVfbGVuIC09IDQ7IC8qIHJlbW92ZSBXRVBfSUNWICovCisJCWJyZWFrOworCX0KKworCXNrYl90cmltKGVudHJ5LCBmcmFtZV9sZW4pOworCXNrYl9wdWxsKGVudHJ5LCBzaXplb2YoKmhkcikgKyBwYWQgKyBzaXplb2YoKmVudHJ5X2RhdGEpKTsKKwlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUocHJpdi0+aHcsIGVudHJ5KTsKK30KKworc3RhdGljIHZvaWQgcDU0X3J4X2VlcHJvbV9yZWFkYmFjayhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwNTRfaGRyICpoZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBwNTRfZWVwcm9tX2xtODYgKmVlcHJvbSA9IChzdHJ1Y3QgcDU0X2VlcHJvbV9sbTg2ICopIGhkci0+ZGF0YTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqdG1wOworCisJaWYgKCFwcml2LT5lZXByb20pCisJCXJldHVybiA7CisKKwlpZiAocHJpdi0+ZndfdmFyID49IDB4NTA5KSB7CisJCW1lbWNweShwcml2LT5lZXByb20sIGVlcHJvbS0+djIuZGF0YSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KGVlcHJvbS0+djIubGVuKSk7CisJfSBlbHNlIHsKKwkJbWVtY3B5KHByaXYtPmVlcHJvbSwgZWVwcm9tLT52MS5kYXRhLAorCQkgICAgICAgbGUxNl90b19jcHUoZWVwcm9tLT52MS5sZW4pKTsKKwl9CisKKwlwcml2LT5lZXByb20gPSBOVUxMOworCXRtcCA9IHA1NF9maW5kX2FuZF91bmxpbmtfc2tiKHByaXYsIGhkci0+cmVxX2lkKTsKKwlkZXZfa2ZyZWVfc2tiX2FueSh0bXApOworCWNvbXBsZXRlKCZwcml2LT5lZXByb21fY29tcCk7Cit9CisKK3N0YXRpYyB2b2lkIHA1NF9yeF9zdGF0cyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcDU0X2hkciAqaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgcDU0X3N0YXRpc3RpY3MgKnN0YXRzID0gKHN0cnVjdCBwNTRfc3RhdGlzdGljcyAqKSBoZHItPmRhdGE7CisJc3RydWN0IHNrX2J1ZmYgKnRtcDsKKwl1MzIgdHNmMzI7CisKKwlpZiAodW5saWtlbHkocHJpdi0+bW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkpCisJCXJldHVybiA7CisKKwl0c2YzMiA9IGxlMzJfdG9fY3B1KHN0YXRzLT50c2YzMik7CisJaWYgKHRzZjMyIDwgcHJpdi0+dHNmX2xvdzMyKQorCQlwcml2LT50c2ZfaGlnaDMyKys7CisJcHJpdi0+dHNmX2xvdzMyID0gdHNmMzI7CisKKwlwcml2LT5zdGF0cy5kb3QxMVJUU0ZhaWx1cmVDb3VudCA9IGxlMzJfdG9fY3B1KHN0YXRzLT5ydHNfZmFpbCk7CisJcHJpdi0+c3RhdHMuZG90MTFSVFNTdWNjZXNzQ291bnQgPSBsZTMyX3RvX2NwdShzdGF0cy0+cnRzX3N1Y2Nlc3MpOworCXByaXYtPnN0YXRzLmRvdDExRkNTRXJyb3JDb3VudCA9IGxlMzJfdG9fY3B1KHN0YXRzLT5yeF9iYWRfZmNzKTsKKworCXByaXYtPm5vaXNlID0gcDU0X3Jzc2lfdG9fZGJtKHByaXYsIGxlMzJfdG9fY3B1KHN0YXRzLT5ub2lzZSkpOworCisJdG1wID0gcDU0X2ZpbmRfYW5kX3VubGlua19za2IocHJpdiwgaGRyLT5yZXFfaWQpOworCWRldl9rZnJlZV9za2JfYW55KHRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIHA1NF9yeF90cmFwKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwNTRfaGRyICpoZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBwNTRfdHJhcCAqdHJhcCA9IChzdHJ1Y3QgcDU0X3RyYXAgKikgaGRyLT5kYXRhOworCXUxNiBldmVudCA9IGxlMTZfdG9fY3B1KHRyYXAtPmV2ZW50KTsKKwl1MTYgZnJlcSA9IGxlMTZfdG9fY3B1KHRyYXAtPmZyZXF1ZW5jeSk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBQNTRfVFJBUF9CRUFDT05fVFg6CisJCWJyZWFrOworCWNhc2UgUDU0X1RSQVBfUkFEQVI6CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiByYWRhciAoZnJlcTolZCBNSHopXG4iLAorCQkJd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBmcmVxKTsKKwkJYnJlYWs7CisJY2FzZSBQNTRfVFJBUF9OT19CRUFDT046CisJCWlmIChwcml2LT52aWYpCisJCQlpZWVlODAyMTFfYmVhY29uX2xvc3MocHJpdi0+dmlmKTsKKwkJYnJlYWs7CisJY2FzZSBQNTRfVFJBUF9TQ0FOOgorCQlicmVhazsKKwljYXNlIFA1NF9UUkFQX1RCVFQ6CisJCWJyZWFrOworCWNhc2UgUDU0X1RSQVBfVElNRVI6CisJCWJyZWFrOworCWNhc2UgUDU0X1RSQVBfRkFBX1JBRElPX09GRjoKKwkJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShwcml2LT5ody0+d2lwaHksIHRydWUpOworCQlicmVhazsKKwljYXNlIFA1NF9UUkFQX0ZBQV9SQURJT19PTjoKKwkJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShwcml2LT5ody0+d2lwaHksIGZhbHNlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlY2VpdmVkIGV2ZW50OiV4IGZyZXE6JWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGV2ZW50LCBmcmVxKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHA1NF9yeF9jb250cm9sKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwNTRfaGRyICpoZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiLT5kYXRhOworCisJc3dpdGNoIChsZTE2X3RvX2NwdShoZHItPnR5cGUpKSB7CisJY2FzZSBQNTRfQ09OVFJPTF9UWVBFX1RYRE9ORToKKwkJcDU0X3J4X2ZyYW1lX3NlbnQocHJpdiwgc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBQNTRfQ09OVFJPTF9UWVBFX1RSQVA6CisJCXA1NF9yeF90cmFwKHByaXYsIHNrYik7CisJCWJyZWFrOworCWNhc2UgUDU0X0NPTlRST0xfVFlQRV9CQlA6CisJCWJyZWFrOworCWNhc2UgUDU0X0NPTlRST0xfVFlQRV9TVEFUX1JFQURCQUNLOgorCQlwNTRfcnhfc3RhdHMocHJpdiwgc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBQNTRfQ09OVFJPTF9UWVBFX0VFUFJPTV9SRUFEQkFDSzoKKwkJcDU0X3J4X2VlcHJvbV9yZWFkYmFjayhwcml2LCBza2IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG5vdCBoYW5kbGluZyAweCUwMnggdHlwZSBjb250cm9sIGZyYW1lXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBsZTE2X3RvX2NwdShoZHItPnR5cGUpKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisvKiByZXR1cm5zIHplcm8gaWYgc2tiIGNhbiBiZSByZXVzZWQgKi8KK2ludCBwNTRfcngoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXUxNiB0eXBlID0gbGUxNl90b19jcHUoKigoX19sZTE2ICopc2tiLT5kYXRhKSk7CisKKwlpZiAodHlwZSAmIFA1NF9IRFJfRkxBR19DT05UUk9MKQorCQlyZXR1cm4gcDU0X3J4X2NvbnRyb2wocHJpdiwgc2tiKTsKKwllbHNlCisJCXJldHVybiBwNTRfcnhfZGF0YShwcml2LCBza2IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocDU0X3J4KTsKKworc3RhdGljIHZvaWQgcDU0X3R4XzgwMjExX2hlYWRlcihzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sIHU4ICpxdWV1ZSwKKwkJCQl1MzIgKmV4dHJhX2xlbiwgdTE2ICpmbGFncywgdTE2ICphaWQsCisJCQkJYm9vbCAqYnVyc3RfcG9zc2libGUpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJKmJ1cnN0X3Bvc3NpYmxlID0gdHJ1ZTsKKwllbHNlCisJCSpidXJzdF9wb3NzaWJsZSA9IGZhbHNlOworCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKQorCQkqZmxhZ3MgfD0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1NFUU5SOworCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9QU1BPTExfUkVTUE9OU0UpCisJCSpmbGFncyB8PSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfTk9DQU5DRUw7CisKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0NMRUFSX1BTX0ZJTFQpCisJCSpmbGFncyB8PSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfTk9DQU5DRUw7CisKKwkqcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSArIFA1NF9RVUVVRV9EQVRBOworCisJc3dpdGNoIChwcml2LT5tb2RlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgorCQkvKgorCQkgKiBXZSBoYXZlIHRvIHNldCBQNTRfSERSX0ZMQUdfREFUQV9PVVRfUFJPTUlTQyBmb3IKKwkJICogZXZlcnkgZnJhbWUgaW4gcHJvbWlzY3VvdXMvbW9uaXRvciBtb2RlLgorCQkgKiBzZWUgU1RTVzQ1eDBDIExNQUMgQVBJIC0gcGFnZSAxMi4KKwkJICovCisJCSphaWQgPSAwOworCQkqZmxhZ3MgfD0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1BST01JU0M7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJKmFpZCA9IDE7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNKSB7CisJCQkqYWlkID0gMDsKKwkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9DQUI7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwkJCWlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCQkJKmFpZCA9IDA7CisJCQkJKmZsYWdzIHw9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9USU1FU1RBTVAgfAorCQkJCQkgIFA1NF9IRFJfRkxBR19EQVRBX09VVF9OT0NBTkNFTDsKKwkJCQlyZXR1cm47CisJCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJCSphaWQgPSAwOworCisJCQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkgeworCQkJCQkvKgorCQkJCQkgKiBJbmplY3RpbmcgYmVhY29ucyBvbiB0b3Agb2YgYSBBUCBpcworCQkJCQkgKiBub3QgYSBnb29kIGlkZWEuLi4gbmV2ZXJ0aGVsZXNzLAorCQkJCQkgKiBpdCBzaG91bGQgYmUgZG9hYmxlLgorCQkJCQkgKi8KKworCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQkJKmZsYWdzIHw9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9USU1FU1RBTVA7CisJCQkJKnF1ZXVlID0gUDU0X1FVRVVFX0JFQUNPTjsKKwkJCQkqZXh0cmFfbGVuID0gSUVFRTgwMjExX01BWF9USU1fTEVOOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCWlmIChpbmZvLT5jb250cm9sLnN0YSkKKwkJCSphaWQgPSBpbmZvLT5jb250cm9sLnN0YS0+YWlkOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB1OCBwNTRfY29udmVydF9hbGdvKGVudW0gaWVlZTgwMjExX2tleV9hbGcgYWxnKQoreworCXN3aXRjaCAoYWxnKSB7CisJY2FzZSBBTEdfV0VQOgorCQlyZXR1cm4gUDU0X0NSWVBUT19XRVA7CisJY2FzZSBBTEdfVEtJUDoKKwkJcmV0dXJuIFA1NF9DUllQVE9fVEtJUE1JQ0hBRUw7CisJY2FzZSBBTEdfQ0NNUDoKKwkJcmV0dXJuIFA1NF9DUllQVE9fQUVTQ0NNUDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK2ludCBwNTRfdHhfODAyMTEoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgcDU0X3R4X2luZm8gKnA1NGluZm87CisJc3RydWN0IHA1NF9oZHIgKmhkcjsKKwlzdHJ1Y3QgcDU0X3R4X2RhdGEgKnR4aGRyOworCXVuc2lnbmVkIGludCBwYWRkaW5nLCBsZW4sIGV4dHJhX2xlbjsKKwlpbnQgaSwgaiwgcmlkeDsKKwl1MTYgaGRyX2ZsYWdzID0gMCwgYWlkID0gMDsKKwl1OCByYXRlLCBxdWV1ZSA9IDAsIGNyeXB0X29mZnNldCA9IDA7CisJdTggY3RzX3JhdGUgPSAweDIwOworCXU4IHJjX2ZsYWdzOworCXU4IGNhbGN1bGF0ZWRfdHJpZXNbNF07CisJdTggbnJhdGVzID0gMCwgbnJlbWFpbmluZyA9IDg7CisJYm9vbCBidXJzdF9hbGxvd2VkID0gZmFsc2U7CisKKwlwNTRfdHhfODAyMTFfaGVhZGVyKHByaXYsIHNrYiwgaW5mbywgJnF1ZXVlLCAmZXh0cmFfbGVuLAorCQkJICAgICZoZHJfZmxhZ3MsICZhaWQsICZidXJzdF9hbGxvd2VkKTsKKworCWlmIChwNTRfdHhfcW9zX2FjY291bnRpbmdfYWxsb2MocHJpdiwgc2tiLCBxdWV1ZSkpIHsKKwkJaWYgKCFJU19RT1NfUVVFVUUocXVldWUpKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJfQorCX0KKworCXBhZGRpbmcgPSAodW5zaWduZWQgbG9uZykoc2tiLT5kYXRhIC0gKHNpemVvZigqaGRyKSArIHNpemVvZigqdHhoZHIpKSkgJiAzOworCWxlbiA9IHNrYi0+bGVuOworCisJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7CisJCWNyeXB0X29mZnNldCA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7CisJCWlmIChpbmZvLT5jb250cm9sLmh3X2tleS0+YWxnID09IEFMR19US0lQKSB7CisJCQl1OCAqaXYgPSAodTggKikoc2tiLT5kYXRhICsgY3J5cHRfb2Zmc2V0KTsKKwkJCS8qCisJCQkgKiBUaGUgZmlybXdhcmUgZXhjZXB0cyB0aGF0IHRoZSBJViBoYXMgdG8gaGF2ZQorCQkJICogdGhpcyBzcGVjaWFsIGZvcm1hdAorCQkJICovCisJCQlpdlsxXSA9IGl2WzBdOworCQkJaXZbMF0gPSBpdlsyXTsKKwkJCWl2WzJdID0gMDsKKwkJfQorCX0KKworCXR4aGRyID0gKHN0cnVjdCBwNTRfdHhfZGF0YSAqKSBza2JfcHVzaChza2IsIHNpemVvZigqdHhoZHIpICsgcGFkZGluZyk7CisJaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpoZHIpKTsKKworCWlmIChwYWRkaW5nKQorCQloZHJfZmxhZ3MgfD0gUDU0X0hEUl9GTEFHX0RBVEFfQUxJR047CisJaGRyLT50eXBlID0gY3B1X3RvX2xlMTYoYWlkKTsKKwloZHItPnJ0c190cmllcyA9IGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQ7CisKKwkvKgorCSAqIHdlIHJlZ2lzdGVyIHRoZSByYXRlcyBpbiBwZXJmZWN0IG9yZGVyLCBhbmQKKwkgKiBSVFMvQ1RTIHdvbid0IGhhcHBlbiBvbiA1IEdIegorCSAqLworCWN0c19yYXRlID0gaW5mby0+Y29udHJvbC5ydHNfY3RzX3JhdGVfaWR4OworCisJbWVtc2V0KCZ0eGhkci0+cmF0ZXNldCwgMCwgc2l6ZW9mKHR4aGRyLT5yYXRlc2V0KSk7CisKKwkvKiBzZWUgaG93IG1hbnkgcmF0ZXMgZ290IHVzZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tYXhfcmF0ZXM7IGkrKykgeworCQlpZiAoaW5mby0+Y29udHJvbC5yYXRlc1tpXS5pZHggPCAwKQorCQkJYnJlYWs7CisJCW5yYXRlcysrOworCX0KKworCS8qIGxpbWl0IHRyaWVzIHRvIDgvbnJhdGVzIHBlciByYXRlICovCisJZm9yIChpID0gMDsgaSA8IG5yYXRlczsgaSsrKSB7CisJCS8qCisJCSAqIFRoZSBtYWdpYyBleHByZXNzaW9uIGhlcmUgaXMgZXF1aXZhbGVudCB0byA4L25yYXRlcyBmb3IKKwkJICogYWxsIHZhbHVlcyB0aGF0IG1hdHRlciwgYnV0IGF2b2lkcyBkaXZpc2lvbiBhbmQganVtcHMuCisJCSAqIE5vdGUgdGhhdCBucmF0ZXMgY2FuIG9ubHkgdGFrZSB0aGUgdmFsdWVzIDEgdGhyb3VnaCA0LgorCQkgKi8KKwkJY2FsY3VsYXRlZF90cmllc1tpXSA9IG1pbl90KGludCwgKCgxNSA+PiBucmF0ZXMpIHwgMSkgKyAxLAorCQkJCQkJIGluZm8tPmNvbnRyb2wucmF0ZXNbaV0uY291bnQpOworCQlucmVtYWluaW5nIC09IGNhbGN1bGF0ZWRfdHJpZXNbaV07CisJfQorCisJLyogaWYgdGhlcmUgYXJlIHRyaWVzIGxlZnQsIGRpc3RyaWJ1dGUgZnJvbSBiYWNrIHRvIGZyb250ICovCisJZm9yIChpID0gbnJhdGVzIC0gMTsgbnJlbWFpbmluZyA+IDAgJiYgaSA+PSAwOyBpLS0pIHsKKwkJaW50IHRtcCA9IGluZm8tPmNvbnRyb2wucmF0ZXNbaV0uY291bnQgLSBjYWxjdWxhdGVkX3RyaWVzW2ldOworCisJCWlmICh0bXAgPD0gMCkKKwkJCWNvbnRpbnVlOworCQkvKiBSQyByZXF1ZXN0ZWQgbW9yZSB0cmllcyBhdCB0aGlzIHJhdGUgKi8KKworCQl0bXAgPSBtaW5fdChpbnQsIHRtcCwgbnJlbWFpbmluZyk7CisJCWNhbGN1bGF0ZWRfdHJpZXNbaV0gKz0gdG1wOworCQlucmVtYWluaW5nIC09IHRtcDsKKwl9CisKKwlyaWR4ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnJhdGVzICYmIHJpZHggPCA4OyBpKyspIHsKKwkJLyogd2UgcmVnaXN0ZXIgdGhlIHJhdGVzIGluIHBlcmZlY3Qgb3JkZXIgKi8KKwkJcmF0ZSA9IGluZm8tPmNvbnRyb2wucmF0ZXNbaV0uaWR4OworCQlpZiAoaW5mby0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQkJcmF0ZSArPSA0OworCisJCS8qIHN0b3JlIHRoZSBjb3VudCB3ZSBhY3R1YWxseSBjYWxjdWxhdGVkIGZvciBUWCBzdGF0dXMgKi8KKwkJaW5mby0+Y29udHJvbC5yYXRlc1tpXS5jb3VudCA9IGNhbGN1bGF0ZWRfdHJpZXNbaV07CisKKwkJcmNfZmxhZ3MgPSBpbmZvLT5jb250cm9sLnJhdGVzW2ldLmZsYWdzOworCQlpZiAocmNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKSB7CisJCQlyYXRlIHw9IDB4MTA7CisJCQljdHNfcmF0ZSB8PSAweDEwOworCQl9CisJCWlmIChyY19mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykgeworCQkJYnVyc3RfYWxsb3dlZCA9IGZhbHNlOworCQkJcmF0ZSB8PSAweDQwOworCQl9IGVsc2UgaWYgKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVCkgeworCQkJcmF0ZSB8PSAweDIwOworCQkJYnVyc3RfYWxsb3dlZCA9IGZhbHNlOworCQl9CisJCWZvciAoaiA9IDA7IGogPCBjYWxjdWxhdGVkX3RyaWVzW2ldICYmIHJpZHggPCA4OyBqKyspIHsKKwkJCXR4aGRyLT5yYXRlc2V0W3JpZHhdID0gcmF0ZTsKKwkJCXJpZHgrKzsKKwkJfQorCX0KKworCWlmIChidXJzdF9hbGxvd2VkKQorCQloZHJfZmxhZ3MgfD0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX0JVUlNUOworCisJLyogVE9ETzogZW5hYmxlIGJ1cnN0aW5nICovCisJaGRyLT5mbGFncyA9IGNwdV90b19sZTE2KGhkcl9mbGFncyk7CisJaGRyLT50cmllcyA9IHJpZHg7CisJdHhoZHItPnJ0c19yYXRlX2lkeCA9IDA7CisJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7CisJCXR4aGRyLT5rZXlfdHlwZSA9IHA1NF9jb252ZXJ0X2FsZ28oaW5mby0+Y29udHJvbC5od19rZXktPmFsZyk7CisJCXR4aGRyLT5rZXlfbGVuID0gbWluKCh1OCkxNiwgaW5mby0+Y29udHJvbC5od19rZXktPmtleWxlbik7CisJCW1lbWNweSh0eGhkci0+a2V5LCBpbmZvLT5jb250cm9sLmh3X2tleS0+a2V5LCB0eGhkci0+a2V5X2xlbik7CisJCWlmIChpbmZvLT5jb250cm9sLmh3X2tleS0+YWxnID09IEFMR19US0lQKSB7CisJCQkvKiByZXNlcnZlIHNwYWNlIGZvciB0aGUgTUlDIGtleSAqLworCQkJbGVuICs9IDg7CisJCQltZW1jcHkoc2tiX3B1dChza2IsIDgpLCAmKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5rZXkKKwkJCQlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVldKSwgOCk7CisJCX0KKwkJLyogcmVzZXJ2ZSBzb21lIHNwYWNlIGZvciBJQ1YgKi8KKwkJbGVuICs9IGluZm8tPmNvbnRyb2wuaHdfa2V5LT5pY3ZfbGVuOworCQltZW1zZXQoc2tiX3B1dChza2IsIGluZm8tPmNvbnRyb2wuaHdfa2V5LT5pY3ZfbGVuKSwgMCwKKwkJICAgICAgIGluZm8tPmNvbnRyb2wuaHdfa2V5LT5pY3ZfbGVuKTsKKwl9IGVsc2UgeworCQl0eGhkci0+a2V5X3R5cGUgPSAwOworCQl0eGhkci0+a2V5X2xlbiA9IDA7CisJfQorCXR4aGRyLT5jcnlwdF9vZmZzZXQgPSBjcnlwdF9vZmZzZXQ7CisJdHhoZHItPmh3X3F1ZXVlID0gcXVldWU7CisJdHhoZHItPmJhY2tsb2cgPSBwcml2LT50eF9zdGF0c1txdWV1ZV0ubGVuIC0gMTsKKwltZW1zZXQodHhoZHItPmR1cmF0aW9ucywgMCwgc2l6ZW9mKHR4aGRyLT5kdXJhdGlvbnMpKTsKKwl0eGhkci0+dHhfYW50ZW5uYSA9ICgoaW5mby0+YW50ZW5uYV9zZWxfdHggPT0gMCkgPworCQkyIDogaW5mby0+YW50ZW5uYV9zZWxfdHggLSAxKSAmIHByaXYtPnR4X2RpdmVyc2l0eV9tYXNrOworCWlmIChwcml2LT5yeGh3ID09IDUpIHsKKwkJdHhoZHItPmxvbmdib3cuY3RzX3JhdGUgPSBjdHNfcmF0ZTsKKwkJdHhoZHItPmxvbmdib3cub3V0cHV0X3Bvd2VyID0gY3B1X3RvX2xlMTYocHJpdi0+b3V0cHV0X3Bvd2VyKTsKKwl9IGVsc2UgeworCQl0eGhkci0+bm9ybWFsLm91dHB1dF9wb3dlciA9IHByaXYtPm91dHB1dF9wb3dlcjsKKwkJdHhoZHItPm5vcm1hbC5jdHNfcmF0ZSA9IGN0c19yYXRlOworCX0KKwlpZiAocGFkZGluZykKKwkJdHhoZHItPmFsaWduWzBdID0gcGFkZGluZzsKKworCWhkci0+bGVuID0gY3B1X3RvX2xlMTYobGVuKTsKKwkvKiBtb2RpZmllcyBza2ItPmNiIGFuZCB3aXRoIGl0IGluZm8sIHNvIG11c3QgYmUgbGFzdCEgKi8KKwlwNTRpbmZvID0gKHZvaWQgKikgaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKKwlwNTRpbmZvLT5leHRyYV9sZW4gPSBleHRyYV9sZW47CisKKwlwNTRfdHgocHJpdiwgc2tiKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYwppbmRleCA4ZjYyMTA5Li44NzJiNjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYwpAQCAtNTAsNyArNTAsNyBAQAogCiAJCS8qIGNoZWNrIGZvciBob2xlcyBpbiB0aGUgYXJyYXlzIGNhdXNlZCBieSBtdWx0aSBmcmFnbWVudCBmcmFtZXMKIAkJICogc2VhcmNoaW5nIGZvciB0aGUgbGFzdCBmcmFnbWVudCBvZiBhIGZyYW1lICovCi0JCWlmIChwcml2LT5wY2lfbWFwX3R4X2FkZHJlc3NbaW5kZXhdICE9IChkbWFfYWRkcl90KSBOVUxMKSB7CisJCWlmIChwcml2LT5wY2lfbWFwX3R4X2FkZHJlc3NbaW5kZXhdKSB7CiAJCQkvKiBlbnRyeSBpcyB0aGUgbGFzdCBmcmFnbWVudCBvZiBhIGZyYW1lCiAJCQkgKiBmcmVlIHRoZSBza2Igc3RydWN0dXJlIGFuZCB1bm1hcCBwY2kgbWVtb3J5ICovCiAJCQlza2IgPSBwcml2LT5kYXRhX2xvd190eFtpbmRleF07CkBAIC03Miw3ICs3Miw3IEBACiAJfQogfQogCi1pbnQKK25ldGRldl90eF90CiBpc2xwY2lfZXRoX3RyYW5zbWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCWlzbHBjaV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CkBAIC0yMzQsNyArMjM0LDcgQEAKIAkvKiB1bmxvY2sgdGhlIGRyaXZlciBjb2RlICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKICAgICAgIGRyb3BfZnJlZToKIAluZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CkBAIC00NTAsNyArNDUwLDcgQEAKIAkJICAgIHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsICh2b2lkICopIHNrYi0+ZGF0YSwKIAkJCQkgICBNQVhfRlJBR01FTlRfU0laRV9SWCArIDIsCiAJCQkJICAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJaWYgKHVubGlrZWx5KHByaXYtPnBjaV9tYXBfcnhfYWRkcmVzc1tpbmRleF0gPT0gKGRtYV9hZGRyX3QpIE5VTEwpKSB7CisJCWlmICh1bmxpa2VseSghcHJpdi0+cGNpX21hcF9yeF9hZGRyZXNzW2luZGV4XSkpIHsKIAkJCS8qIGVycm9yIG1hcHBpbmcgdGhlIGJ1ZmZlciB0byBkZXZpY2UgYWNjZXNzYWJsZSBtZW1vcnkgYWRkcmVzcyAqLwogCQkJREVCVUcoU0hPV19FUlJPUl9NRVNTQUdFUywKIAkJCSAgICAgICJFcnJvciBtYXBwaW5nIERNQSBhZGRyZXNzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmgKaW5kZXggNjE0NTRkMy4uNTRmOWE0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmgKQEAgLTY0LDcgKzY0LDcgQEAKIH07CiAKIHZvaWQgaXNscGNpX2V0aF9jbGVhbnVwX3RyYW5zbWl0KGlzbHBjaV9wcml2YXRlICosIGlzbDM4eHhfY29udHJvbF9ibG9jayAqKTsKLWludCBpc2xwY2lfZXRoX3RyYW5zbWl0KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworbmV0ZGV2X3R4X3QgaXNscGNpX2V0aF90cmFuc21pdChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIGludCBpc2xwY2lfZXRoX3JlY2VpdmUoaXNscGNpX3ByaXZhdGUgKik7CiB2b2lkIGlzbHBjaV9ldGhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHZvaWQgaXNscGNpX2RvX3Jlc2V0X2FuZF93YWtlKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2hvdHBsdWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2hvdHBsdWcuYwppbmRleCAzMDg3NjcyLi44M2QzNjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfaG90cGx1Zy5jCkBAIC00OSw5ICs0OSw3IEBACiAKIAkvKiAzQ09NIDNDUldFMTU0RzcyIFdpcmVsZXNzIExBTiBhZGFwdGVyICovCiAJewotCSAweDEwYjcsIDB4NjAwMSwKLQkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKLQkgMCwgMCwgMAorCSBQQ0lfVkRFVklDRSgzQ09NLCAweDYwMDEpLCAwCiAJfSwKIAogCS8qIEludGVyc2lsIFBSSVNNIEluZGlnbyBXaXJlbGVzcyBMQU4gYWRhcHRlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCA2OThiMTFiLi44OGNkNThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtMTA0LDcgKzEwNCw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKIAogc3RhdGljIGludCByYXlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgcmF5X2Rldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHJheV9kZXZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCByYXlfdXBkYXRlX211bHRpX2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGFsbCk7CiBzdGF0aWMgaW50IHRyYW5zbGF0ZV9mcmFtZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwKQEAgLTkxNSwxNiArOTE2LDE5IEBACiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyBpbnQgcmF5X2Rldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgcmF5X2Rldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAlzaG9ydCBsZW5ndGggPSBza2ItPmxlbjsKIAotCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewogCQlERUJVRygyLCAicmF5X2Rldl9zdGFydF94bWl0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CisKIAlERUJVRygzLCAicmF5X2Rldl9zdGFydF94bWl0KHNrYj0lcCwgZGV2PSVwKVxuIiwgc2tiLCBkZXYpOwogCWlmIChsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPT0gTkVFRF9UT19BVVRIKSB7CiAJCURFQlVHKDAsICJyYXlfY3MgU2VuZGluZyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuIik7CkBAIC05MzcsNyArOTQxLDcgQEAKIAogCWlmIChsZW5ndGggPCBFVEhfWkxFTikgewogCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQlsZW5ndGggPSBFVEhfWkxFTjsKIAl9CiAJc3dpdGNoIChyYXlfaHdfeG1pdChza2ItPmRhdGEsIGxlbmd0aCwgZGV2LCBEQVRBX1RZUEUpKSB7CkBAIC05NTEsOSArOTU1LDkgQEAKIAlkZWZhdWx0OgogCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfSAvKiByYXlfZGV2X3N0YXJ0X3htaXQgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtMTUxMSw5ICsxNTE1LDYgQEAKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAJc3RydWN0IHN0YXR1cyBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBTVEFUVVNfQkFTRTsKIAotCWlmIChsb2NhbCA9PSAocmF5X2Rldl90ICopIE5VTEwpCi0JCXJldHVybiAoaXdfc3RhdHMgKikgTlVMTDsKLQogCWxvY2FsLT53c3RhdHMuc3RhdHVzID0gbG9jYWwtPmNhcmRfc3RhdHVzOwogI2lmZGVmIFdJUkVMRVNTX1NQWQogCWlmICgobG9jYWwtPnNweV9kYXRhLnNweV9udW1iZXIgPiAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCmluZGV4IDNiZWMzZGIuLjU0MTc1YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKQEAgLTEwMCw3ICsxMDAsNiBAQAogI2RlZmluZSBPSURfR0VOX1JDVl9FUlJPUgkJCWNwdV90b19sZTMyKDB4MDAwMjAxMDQpCiAjZGVmaW5lIE9JRF9HRU5fUkNWX05PX0JVRkZFUgkJCWNwdV90b19sZTMyKDB4MDAwMjAxMDUpCiAKLSNkZWZpbmUgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTCQljcHVfdG9fbGUzMigweDAxMDEwMTAxKQogI2RlZmluZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTCQljcHVfdG9fbGUzMigweDAxMDEwMTAyKQogI2RlZmluZSBPSURfODAyXzNfTVVMVElDQVNUX0xJU1QJCWNwdV90b19sZTMyKDB4MDEwMTAxMDMpCiAjZGVmaW5lIE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRQkJY3B1X3RvX2xlMzIoMHgwMTAxMDEwNCkKQEAgLTEzOSw5ICsxMzgsMTUgQEAKIC8qIEFzc3VtZSB0aGF0IEJyb2FkY29tIDQzMjAgKG9ubHkgY2hpcHNldCBhdCB0aW1lIG9mIHdyaXRpbmcga25vd24gdG8gYmUKICAqIGJhc2VkIG9uIHdpcmVsZXNzIHJuZGlzKSBoYXMgZGVmYXVsdCB0eHBvd2VyIG9mIDEzZEJtLgogICogVGhpcyB2YWx1ZSBpcyBmcm9tIExpbmtzeXMgV1VTQjU0R1NDIFVzZXIgR3VpZGUsIEFwcGVuZGl4IEY6IFNwZWNpZmljYXRpb25zLgotICogICAxM2RCbSA9PSAxOS45bVcKKyAqICAxMDAlIDogMjAgbVcgfiAxM2RCbQorICogICA3NSUgOiAxNSBtVyB+IDEyZEJtCisgKiAgIDUwJSA6IDEwIG1XIH4gMTBkQm0KKyAqICAgMjUlIDogIDUgbVcgfiAgN2RCbQogICovCi0jZGVmaW5lIEJDTTQzMjBfREVGQVVMVF9UWFBPV0VSIDIwCisjZGVmaW5lIEJDTTQzMjBfREVGQVVMVF9UWFBPV0VSX0RCTV8xMDAgMTMKKyNkZWZpbmUgQkNNNDMyMF9ERUZBVUxUX1RYUE9XRVJfREJNXzc1ICAxMgorI2RlZmluZSBCQ000MzIwX0RFRkFVTFRfVFhQT1dFUl9EQk1fNTAgIDEwCisjZGVmaW5lIEJDTTQzMjBfREVGQVVMVF9UWFBPV0VSX0RCTV8yNSAgNwogCiAKIC8qIGNvZGVzIGZvciAic3RhdHVzIiBmaWVsZCBvZiBjb21wbGV0aW9uIG1lc3NhZ2VzICovCkBAIC0xOTYsNiArMjAxLDI0IEBACiAJTkRJU184MDIxMV9QUklWXzgwMjFYX1dFUAogfTsKIAorZW51bSBuZGlzXzgwMjExX3N0YXR1c190eXBlIHsKKwlORElTXzgwMjExX1NUQVRVU1RZUEVfQVVUSEVOVElDQVRJT04sCisJTkRJU184MDIxMV9TVEFUVVNUWVBFX01FRElBU1RSRUFNTU9ERSwKKwlORElTXzgwMjExX1NUQVRVU1RZUEVfUE1LSURfQ0FORElEQVRFTElTVCwKKwlORElTXzgwMjExX1NUQVRVU1RZUEVfUkFESU9TVEFURSwKK307CisKK2VudW0gbmRpc184MDIxMV9tZWRpYV9zdHJlYW1fbW9kZSB7CisJTkRJU184MDIxMV9NRURJQV9TVFJFQU1fT0ZGLAorCU5ESVNfODAyMTFfTUVESUFfU1RSRUFNX09OCit9OworCitlbnVtIG5kaXNfODAyMTFfcmFkaW9fc3RhdHVzIHsKKwlORElTXzgwMjExX1JBRElPX1NUQVRVU19PTiwKKwlORElTXzgwMjExX1JBRElPX1NUQVRVU19IQVJEV0FSRV9PRkYsCisJTkRJU184MDIxMV9SQURJT19TVEFUVVNfU09GVFdBUkVfT0ZGLAorfTsKKwogZW51bSBuZGlzXzgwMjExX2FkZGtleV9iaXRzIHsKIAlORElTXzgwMjExX0FEREtFWV84MDIxWF9BVVRIID0gY3B1X3RvX2xlMzIoMSA8PCAyOCksCiAJTkRJU184MDIxMV9BRERLRVlfU0VUX0lOSVRfUkVDVl9TRVEgPSBjcHVfdG9fbGUzMigxIDw8IDI5KSwKQEAgLTIwOCw2ICsyMzEsMzUgQEAKIAlORElTXzgwMjExX0FERFdFUF9UUkFOU01JVF9LRVkgPSBjcHVfdG9fbGUzMigxIDw8IDMxKQogfTsKIAorc3RydWN0IG5kaXNfODAyMTFfYXV0aF9yZXF1ZXN0IHsKKwlfX2xlMzIgbGVuZ3RoOworCXU4IGJzc2lkWzZdOworCXU4IHBhZGRpbmdbMl07CisJX19sZTMyIGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG5kaXNfODAyMTFfcG1raWRfY2FuZGlkYXRlIHsKKwl1OCBic3NpZFs2XTsKKwl1OCBwYWRkaW5nWzJdOworCV9fbGUzMiBmbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBuZGlzXzgwMjExX3Bta2lkX2NhbmRfbGlzdCB7CisJX19sZTMyIHZlcnNpb247CisJX19sZTMyIG51bV9jYW5kaWRhdGVzOworCXN0cnVjdCBuZGlzXzgwMjExX3Bta2lkX2NhbmRpZGF0ZSBjYW5kaWRhdGVfbGlzdFswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBuZGlzXzgwMjExX3N0YXR1c19pbmRpY2F0aW9uIHsKKwlfX2xlMzIgc3RhdHVzX3R5cGU7CisJdW5pb24geworCQlfX2xlMzIJCQkJCW1lZGlhX3N0cmVhbV9tb2RlOworCQlfX2xlMzIJCQkJCXJhZGlvX3N0YXR1czsKKwkJc3RydWN0IG5kaXNfODAyMTFfYXV0aF9yZXF1ZXN0CQlhdXRoX3JlcXVlc3RbMF07CisJCXN0cnVjdCBuZGlzXzgwMjExX3Bta2lkX2NhbmRfbGlzdAljYW5kX2xpc3Q7CisJfSB1OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogc3RydWN0IG5kaXNfODAyMTFfc3NpZCB7CiAJX19sZTMyIGxlbmd0aDsKIAl1OCBlc3NpZFtORElTXzgwMl8xMV9MRU5HVEhfU1NJRF07CkBAIC0yNzUsNiArMzI3LDcgQEAKIAlfX2xlMzIgc2l6ZTsKIAlfX2xlMzIgaW5kZXg7CiAJdTggYnNzaWRbNl07CisJdTggcGFkZGluZ1syXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBuZGlzX2NvbmZpZ19wYXJhbSB7CkBAIC0zMDUsMTMgKzM1OCw2IEBACiAJX19sZTMyIG9mZnNldF9yZXNwX2llczsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLS8qIHRoZXNlIGhhdmUgdG8gbWF0Y2ggd2hhdCBpcyBpbiB3cGFfc3VwcGxpY2FudCAqLwotZW51bSB3cGFfYWxnIHsgV1BBX0FMR19OT05FLCBXUEFfQUxHX1dFUCwgV1BBX0FMR19US0lQLCBXUEFfQUxHX0NDTVAgfTsKLWVudW0gd3BhX2NpcGhlciB7IENJUEhFUl9OT05FLCBDSVBIRVJfV0VQNDAsIENJUEhFUl9US0lQLCBDSVBIRVJfQ0NNUCwKLQkJICBDSVBIRVJfV0VQMTA0IH07Ci1lbnVtIHdwYV9rZXlfbWdtdCB7IEtFWV9NR01UXzgwMl8xWCwgS0VZX01HTVRfUFNLLCBLRVlfTUdNVF9OT05FLAotCQkgICAgS0VZX01HTVRfODAyXzFYX05PX1dQQSwgS0VZX01HTVRfV1BBX05PTkUgfTsKLQogLyoKICAqICBwcml2YXRlIGRhdGEKICAqLwpAQCAtMzI2LDYgKzM3MiwxNSBAQAogI2RlZmluZSBXT1JLX0xJTktfRE9XTgkJKDE8PDEpCiAjZGVmaW5lIFdPUktfU0VUX01VTFRJQ0FTVF9MSVNUCSgxPDwyKQogCisjZGVmaW5lIFJORElTX1dMQU5fQUxHX05PTkUJMAorI2RlZmluZSBSTkRJU19XTEFOX0FMR19XRVAJKDE8PDApCisjZGVmaW5lIFJORElTX1dMQU5fQUxHX1RLSVAJKDE8PDEpCisjZGVmaW5lIFJORElTX1dMQU5fQUxHX0NDTVAJKDE8PDIpCisKKyNkZWZpbmUgUk5ESVNfV0xBTl9LRVlfTUdNVF9OT05FCTAKKyNkZWZpbmUgUk5ESVNfV0xBTl9LRVlfTUdNVF84MDJfMVgJKDE8PDApCisjZGVmaW5lIFJORElTX1dMQU5fS0VZX01HTVRfUFNLCQkoMTw8MSkKKwogI2RlZmluZSBDT01NQU5EX0JVRkZFUl9TSVpFCShDT05UUk9MX0JVRkZFUl9TSVpFICsgc2l6ZW9mKHN0cnVjdCBybmRpc19zZXQpKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHJuZGlzX2NoYW5uZWxzW10gPSB7CkBAIC0zNjAsNiArNDE1LDIyIEBACiAJeyAuYml0cmF0ZSA9IDU0MCB9CiB9OwogCitzdGF0aWMgY29uc3QgdTMyIHJuZGlzX2NpcGhlcl9zdWl0ZXNbXSA9IHsKKwlXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCwKKwlXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQsCisJV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCwKKwlXTEFOX0NJUEhFUl9TVUlURV9DQ01QLAorfTsKKworc3RydWN0IHJuZGlzX3dsYW5fZW5jcl9rZXkgeworCWludCBsZW47CisJdTMyIGNpcGhlcjsKKwl1OCBtYXRlcmlhbFszMl07CisJdTggYnNzaWRbRVRIX0FMRU5dOworCWJvb2wgcGFpcndpc2U7CisJYm9vbCB0eF9rZXk7Cit9OworCiAvKiBSTkRJUyBkZXZpY2UgcHJpdmF0ZSBkYXRhICovCiBzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlIHsKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXY7CkBAIC0zNjksMTkgKzQ0MCwxNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxdWVzdDsKIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBzdGF0c193b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgZGV2X3BvbGxlcl93b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXN0cnVjdCBtdXRleCBjb21tYW5kX2xvY2s7Ci0Jc3BpbmxvY2tfdCBzdGF0c19sb2NrOwogCXVuc2lnbmVkIGxvbmcgd29ya19wZW5kaW5nOworCWludCBsYXN0X3F1YWw7CiAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzW0FSUkFZX1NJWkUocm5kaXNfY2hhbm5lbHMpXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbQVJSQVlfU0laRShybmRpc19yYXRlcyldOwotCi0Jc3RydWN0IGl3X3N0YXRpc3RpY3MgaXdzdGF0czsKLQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyBwcml2c3RhdHM7CisJdTMyIGNpcGhlcl9zdWl0ZXNbQVJSQVlfU0laRShybmRpc19jaXBoZXJfc3VpdGVzKV07CiAKIAlpbnQgY2FwczsKIAlpbnQgbXVsdGljYXN0X3NpemU7CkBAIC0zOTcsMTggKzQ2NiwxOSBAQAogCXUzMiAgcGFyYW1fd29ya2Fyb3VuZF9pbnRlcnZhbDsKIAogCS8qIGhhcmR3YXJlIHN0YXRlICovCi0JaW50IHJhZGlvX29uOworCWJvb2wgcmFkaW9fb247CiAJaW50IGluZnJhX21vZGU7CisJYm9vbCBjb25uZWN0ZWQ7CisJdTggYnNzaWRbRVRIX0FMRU5dOwogCXN0cnVjdCBuZGlzXzgwMjExX3NzaWQgZXNzaWQ7CisJX19sZTMyIGN1cnJlbnRfY29tbWFuZF9vaWQ7CiAKIAkvKiBlbmNyeXB0aW9uIHN0dWZmICovCiAJaW50ICBlbmNyX3R4X2tleV9pbmRleDsKLQljaGFyIGVuY3Jfa2V5c1s0XVszMl07Ci0JaW50ICBlbmNyX2tleV9sZW5bNF07Ci0JY2hhciBlbmNyX2tleV93cGFbNF07CisJc3RydWN0IHJuZGlzX3dsYW5fZW5jcl9rZXkgZW5jcl9rZXlzWzRdOworCWVudW0gbmw4MDIxMV9hdXRoX3R5cGUgd3BhX2F1dGhfdHlwZTsKIAlpbnQgIHdwYV92ZXJzaW9uOwogCWludCAgd3BhX2tleW1nbXQ7Ci0JaW50ICB3cGFfYXV0aGFsZzsKIAlpbnQgIHdwYV9pZV9sZW47CiAJdTggICp3cGFfaWU7CiAJaW50ICB3cGFfY2lwaGVyX3BhaXI7CkBAIC00MjAsMzkgKzQ5MCwxODYgQEAKIC8qCiAgKiBjZmc4MDIxMSBvcHMKICAqLwotc3RhdGljIGludCBybmRpc19jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCB3aXBoeSAqd2lwaHksIGludCBpZmluZGV4LAorc3RhdGljIGludCBybmRpc19jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCWVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwgdTMyICpmbGFncywKIAkJCQkJc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcyk7CiAKIHN0YXRpYyBpbnQgcm5kaXNfc2NhbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCk7CiAKK3N0YXRpYyBpbnQgcm5kaXNfc2V0X3dpcGh5X3BhcmFtcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgY2hhbmdlZCk7CisKK3N0YXRpYyBpbnQgcm5kaXNfc2V0X3R4X3Bvd2VyKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gdHhfcG93ZXJfc2V0dGluZyB0eXBlLAorCQkJCWludCBkYm0pOworc3RhdGljIGludCBybmRpc19nZXRfdHhfcG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwgaW50ICpkYm0pOworCitzdGF0aWMgaW50IHJuZGlzX2Nvbm5lY3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSk7CisKK3N0YXRpYyBpbnQgcm5kaXNfZGlzY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXUxNiByZWFzb25fY29kZSk7CisKK3N0YXRpYyBpbnQgcm5kaXNfam9pbl9pYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zKTsKKworc3RhdGljIGludCBybmRpc19sZWF2ZV9pYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitzdGF0aWMgaW50IHJuZGlzX3NldF9jaGFubmVsKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLCBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSk7CisKK3N0YXRpYyBpbnQgcm5kaXNfYWRkX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCQl1OCBrZXlfaW5kZXgsIGNvbnN0IHU4ICptYWNfYWRkciwKKwkJCQkJc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcyk7CisKK3N0YXRpYyBpbnQgcm5kaXNfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCQl1OCBrZXlfaW5kZXgsIGNvbnN0IHU4ICptYWNfYWRkcik7CisKK3N0YXRpYyBpbnQgcm5kaXNfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJCQkJCXU4IGtleV9pbmRleCk7CisKK3N0YXRpYyBpbnQgcm5kaXNfZ2V0X3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJdTggKm1hYywgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pOworCitzdGF0aWMgaW50IHJuZGlzX2R1bXBfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIGludCBpZHgsIHU4ICptYWMsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKTsKKwogc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9vcHMgcm5kaXNfY29uZmlnX29wcyA9IHsKIAkuY2hhbmdlX3ZpcnR1YWxfaW50ZiA9IHJuZGlzX2NoYW5nZV92aXJ0dWFsX2ludGYsCiAJLnNjYW4gPSBybmRpc19zY2FuLAorCS5zZXRfd2lwaHlfcGFyYW1zID0gcm5kaXNfc2V0X3dpcGh5X3BhcmFtcywKKwkuc2V0X3R4X3Bvd2VyID0gcm5kaXNfc2V0X3R4X3Bvd2VyLAorCS5nZXRfdHhfcG93ZXIgPSBybmRpc19nZXRfdHhfcG93ZXIsCisJLmNvbm5lY3QgPSBybmRpc19jb25uZWN0LAorCS5kaXNjb25uZWN0ID0gcm5kaXNfZGlzY29ubmVjdCwKKwkuam9pbl9pYnNzID0gcm5kaXNfam9pbl9pYnNzLAorCS5sZWF2ZV9pYnNzID0gcm5kaXNfbGVhdmVfaWJzcywKKwkuc2V0X2NoYW5uZWwgPSBybmRpc19zZXRfY2hhbm5lbCwKKwkuYWRkX2tleSA9IHJuZGlzX2FkZF9rZXksCisJLmRlbF9rZXkgPSBybmRpc19kZWxfa2V5LAorCS5zZXRfZGVmYXVsdF9rZXkgPSBybmRpc19zZXRfZGVmYXVsdF9rZXksCisJLmdldF9zdGF0aW9uID0gcm5kaXNfZ2V0X3N0YXRpb24sCisJLmR1bXBfc3RhdGlvbiA9IHJuZGlzX2R1bXBfc3RhdGlvbiwKIH07CiAKIHN0YXRpYyB2b2lkICpybmRpc193aXBoeV9wcml2aWQgPSAmcm5kaXNfd2lwaHlfcHJpdmlkOwogCi1zdGF0aWMgY29uc3QgaW50IGJjbTQzMjBfcG93ZXJfb3V0cHV0WzRdID0geyAyNSwgNTAsIDc1LCAxMDAgfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgemVyb19ic3NpZFtFVEhfQUxFTl0gPSB7MCx9Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZmZmZl9ic3NpZFtFVEhfQUxFTl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JCQkJCQkJMHhmZiwgMHhmZiwgMHhmZiB9OwotCiAKIHN0YXRpYyBzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpnZXRfcm5kaXNfd2xhbl9wcml2KHN0cnVjdCB1c2JuZXQgKmRldikKIHsKIAlyZXR1cm4gKHN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKilkZXYtPmRyaXZlcl9wcml2OwogfQogCi0KLXN0YXRpYyB1MzIgZ2V0X2JjbTQzMjBfcG93ZXIoc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdikKK3N0YXRpYyB1MzIgZ2V0X2JjbTQzMjBfcG93ZXJfZGJtKHN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYpCiB7Ci0JcmV0dXJuIEJDTTQzMjBfREVGQVVMVF9UWFBPV0VSICoKLQkJYmNtNDMyMF9wb3dlcl9vdXRwdXRbcHJpdi0+cGFyYW1fcG93ZXJfb3V0cHV0XSAvIDEwMDsKKwlzd2l0Y2ggKHByaXYtPnBhcmFtX3Bvd2VyX291dHB1dCkgeworCWRlZmF1bHQ6CisJY2FzZSAzOgorCQlyZXR1cm4gQkNNNDMyMF9ERUZBVUxUX1RYUE9XRVJfREJNXzEwMDsKKwljYXNlIDI6CisJCXJldHVybiBCQ000MzIwX0RFRkFVTFRfVFhQT1dFUl9EQk1fNzU7CisJY2FzZSAxOgorCQlyZXR1cm4gQkNNNDMyMF9ERUZBVUxUX1RYUE9XRVJfREJNXzUwOworCWNhc2UgMDoKKwkJcmV0dXJuIEJDTTQzMjBfREVGQVVMVF9UWFBPV0VSX0RCTV8yNTsKKwl9CiB9CiAKK3N0YXRpYyBib29sIGlzX3dwYV9rZXkoc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiwgaW50IGlkeCkKK3sKKwlpbnQgY2lwaGVyID0gcHJpdi0+ZW5jcl9rZXlzW2lkeF0uY2lwaGVyOworCisJcmV0dXJuIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCB8fAorCQljaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCk7Cit9CisKK3N0YXRpYyBpbnQgcm5kaXNfY2lwaGVyX3RvX2FsZyh1MzIgY2lwaGVyKQoreworCXN3aXRjaCAoY2lwaGVyKSB7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJORElTX1dMQU5fQUxHX05PTkU7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKKwkJcmV0dXJuIFJORElTX1dMQU5fQUxHX1dFUDsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CisJCXJldHVybiBSTkRJU19XTEFOX0FMR19US0lQOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKKwkJcmV0dXJuIFJORElTX1dMQU5fQUxHX0NDTVA7CisJfQorfQorCitzdGF0aWMgaW50IHJuZGlzX2FrbV9zdWl0ZV90b19rZXlfbWdtdCh1MzIgYWttX3N1aXRlKQoreworCXN3aXRjaCAoYWttX3N1aXRlKSB7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFJORElTX1dMQU5fS0VZX01HTVRfTk9ORTsKKwljYXNlIFdMQU5fQUtNX1NVSVRFXzgwMjFYOgorCQlyZXR1cm4gUk5ESVNfV0xBTl9LRVlfTUdNVF84MDJfMVg7CisJY2FzZSBXTEFOX0FLTV9TVUlURV9QU0s6CisJCXJldHVybiBSTkRJU19XTEFOX0tFWV9NR01UX1BTSzsKKwl9Cit9CisKKyNpZmRlZiBERUJVRworc3RhdGljIGNvbnN0IGNoYXIgKm9pZF90b19zdHJpbmcoX19sZTMyIG9pZCkKK3sKKwlzd2l0Y2ggKG9pZCkgeworI2RlZmluZSBPSURfU1RSKG9pZCkgY2FzZSBvaWQ6IHJldHVybigjb2lkKQorCQkvKiBmcm9tIHJuZGlzX2hvc3QuaCAqLworCQlPSURfU1RSKE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTUyk7CisJCU9JRF9TVFIoT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkUpOworCQlPSURfU1RSKE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSKTsKKwkJT0lEX1NUUihPSURfR0VOX1BIWVNJQ0FMX01FRElVTSk7CisKKwkJLyogZnJvbSBybmRpc193bGFuLmMgKi8KKwkJT0lEX1NUUihPSURfR0VOX0xJTktfU1BFRUQpOworCQlPSURfU1RSKE9JRF9HRU5fUk5ESVNfQ09ORklHX1BBUkFNRVRFUik7CisKKwkJT0lEX1NUUihPSURfR0VOX1hNSVRfT0spOworCQlPSURfU1RSKE9JRF9HRU5fUkNWX09LKTsKKwkJT0lEX1NUUihPSURfR0VOX1hNSVRfRVJST1IpOworCQlPSURfU1RSKE9JRF9HRU5fUkNWX0VSUk9SKTsKKwkJT0lEX1NUUihPSURfR0VOX1JDVl9OT19CVUZGRVIpOworCisJCU9JRF9TVFIoT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUyk7CisJCU9JRF9TVFIoT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUKTsKKwkJT0lEX1NUUihPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkUpOworCisJCU9JRF9TVFIoT0lEXzgwMl8xMV9CU1NJRCk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9TU0lEKTsKKwkJT0lEX1NUUihPSURfODAyXzExX0lORlJBU1RSVUNUVVJFX01PREUpOworCQlPSURfU1RSKE9JRF84MDJfMTFfQUREX1dFUCk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9SRU1PVkVfV0VQKTsKKwkJT0lEX1NUUihPSURfODAyXzExX0RJU0FTU09DSUFURSk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFKTsKKwkJT0lEX1NUUihPSURfODAyXzExX1BSSVZBQ1lfRklMVEVSKTsKKwkJT0lEX1NUUihPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTik7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUyk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9BRERfS0VZKTsKKwkJT0lEX1NUUihPSURfODAyXzExX1JFTU9WRV9LRVkpOworCQlPSURfU1RSKE9JRF84MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04pOworCQlPSURfU1RSKE9JRF84MDJfMTFfUE1LSUQpOworCQlPSURfU1RSKE9JRF84MDJfMTFfTkVUV09SS19UWVBFU19TVVBQT1JURUQpOworCQlPSURfU1RSKE9JRF84MDJfMTFfTkVUV09SS19UWVBFX0lOX1VTRSk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTCk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9SU1NJKTsKKwkJT0lEX1NUUihPSURfODAyXzExX1JTU0lfVFJJR0dFUik7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRCk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xEKTsKKwkJT0lEX1NUUihPSURfODAyXzExX1NVUFBPUlRFRF9SQVRFUyk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OKTsKKwkJT0lEX1NUUihPSURfODAyXzExX0JTU0lEX0xJU1QpOworI3VuZGVmIE9JRF9TVFIKKwl9CisKKwlyZXR1cm4gIj8iOworfQorI2Vsc2UKK3N0YXRpYyBjb25zdCBjaGFyICpvaWRfdG9fc3RyaW5nKF9fbGUzMiBvaWQpCit7CisJcmV0dXJuICI/IjsKK30KKyNlbmRpZgogCiAvKiB0cmFuc2xhdGUgZXJyb3IgY29kZSAqLwogc3RhdGljIGludCBybmRpc19lcnJvcl9zdGF0dXMoX19sZTMyIHJuZGlzX3N0YXR1cykKQEAgLTQ3Nyw3ICs2OTQsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLQogc3RhdGljIGludCBybmRpc19xdWVyeV9vaWQoc3RydWN0IHVzYm5ldCAqZGV2LCBfX2xlMzIgb2lkLCB2b2lkICpkYXRhLCBpbnQgKmxlbikKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdihkZXYpOwpAQCAtNTA4LDEyICs3MjQsMjUgQEAKIAl1LmdldC0+bXNnX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZiAqdS5nZXQpOwogCXUuZ2V0LT5vaWQgPSBvaWQ7CiAKKwlwcml2LT5jdXJyZW50X2NvbW1hbmRfb2lkID0gb2lkOwogCXJldCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlciwgYnVmbGVuKTsKKwlwcml2LT5jdXJyZW50X2NvbW1hbmRfb2lkID0gMDsKKwlpZiAocmV0IDwgMCkKKwkJZGV2ZGJnKGRldiwgInJuZGlzX3F1ZXJ5X29pZCglcyk6IHJuZGlzX2NvbW1hbmQoKSBmYWlsZWQsICVkICIKKwkJCSIoJTA4eCkiLCBvaWRfdG9fc3RyaW5nKG9pZCksIHJldCwKKwkJCWxlMzJfdG9fY3B1KHUuZ2V0X2MtPnN0YXR1cykpOworCiAJaWYgKHJldCA9PSAwKSB7CiAJCXJldCA9IGxlMzJfdG9fY3B1KHUuZ2V0X2MtPmxlbik7Ci0JCSpsZW4gPSAoKmxlbiA+IHJldCkgPyByZXQgOiAqbGVuOworCQlpZiAocmV0ID4gKmxlbikKKwkJCSpsZW4gPSByZXQ7CiAJCW1lbWNweShkYXRhLCB1LmJ1ZiArIGxlMzJfdG9fY3B1KHUuZ2V0X2MtPm9mZnNldCkgKyA4LCAqbGVuKTsKIAkJcmV0ID0gcm5kaXNfZXJyb3Jfc3RhdHVzKHUuZ2V0X2MtPnN0YXR1cyk7CisKKwkJaWYgKHJldCA8IDApCisJCQlkZXZkYmcoZGV2LCAicm5kaXNfcXVlcnlfb2lkKCVzKTogZGV2aWNlIHJldHVybmVkICIKKwkJCQkiZXJyb3IsICAweCUwOHggKCVkKSIsIG9pZF90b19zdHJpbmcob2lkKSwKKwkJCQlsZTMyX3RvX2NwdSh1LmdldF9jLT5zdGF0dXMpLCByZXQpOwogCX0KIAogCW11dGV4X3VubG9jaygmcHJpdi0+Y29tbWFuZF9sb2NrKTsKQEAgLTUyMyw3ICs3NTIsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLQogc3RhdGljIGludCBybmRpc19zZXRfb2lkKHN0cnVjdCB1c2JuZXQgKmRldiwgX19sZTMyIG9pZCwgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdihkZXYpOwpAQCAtNTU4LDEwICs3ODYsMjMgQEAKIAl1LnNldC0+aGFuZGxlID0gY3B1X3RvX2xlMzIoMCk7CiAJbWVtY3B5KHUuYnVmICsgc2l6ZW9mKCp1LnNldCksIGRhdGEsIGxlbik7CiAKKwlwcml2LT5jdXJyZW50X2NvbW1hbmRfb2lkID0gb2lkOwogCXJldCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlciwgYnVmbGVuKTsKLQlpZiAocmV0ID09IDApCisJcHJpdi0+Y3VycmVudF9jb21tYW5kX29pZCA9IDA7CisJaWYgKHJldCA8IDApCisJCWRldmRiZyhkZXYsICJybmRpc19zZXRfb2lkKCVzKTogcm5kaXNfY29tbWFuZCgpIGZhaWxlZCwgJWQgIgorCQkJIiglMDh4KSIsIG9pZF90b19zdHJpbmcob2lkKSwgcmV0LAorCQkJbGUzMl90b19jcHUodS5zZXRfYy0+c3RhdHVzKSk7CisKKwlpZiAocmV0ID09IDApIHsKIAkJcmV0ID0gcm5kaXNfZXJyb3Jfc3RhdHVzKHUuc2V0X2MtPnN0YXR1cyk7CiAKKwkJaWYgKHJldCA8IDApCisJCQlkZXZkYmcoZGV2LCAicm5kaXNfc2V0X29pZCglcyk6IGRldmljZSByZXR1cm5lZCBlcnJvciwgIgorCQkJCSIweCUwOHggKCVkKSIsIG9pZF90b19zdHJpbmcob2lkKSwKKwkJCQlsZTMyX3RvX2NwdSh1LnNldF9jLT5zdGF0dXMpLCByZXQpOworCX0KKwogCW11dGV4X3VubG9jaygmcHJpdi0+Y29tbWFuZF9sb2NrKTsKIAogCWlmICh1LmJ1ZiAhPSBwcml2LT5jb21tYW5kX2J1ZmZlcikKQEAgLTU2OSw2ICs4MTAsMjcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHJuZGlzX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKnVzYmRldikKK3sKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOworCXN0cnVjdCBybmRpc19yZXNldCAqcmVzZXQ7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnByaXYtPmNvbW1hbmRfbG9jayk7CisKKwlyZXNldCA9ICh2b2lkICopcHJpdi0+Y29tbWFuZF9idWZmZXI7CisJbWVtc2V0KHJlc2V0LCAwLCBzaXplb2YoKnJlc2V0KSk7CisJcmVzZXQtPm1zZ190eXBlID0gUk5ESVNfTVNHX1JFU0VUOworCXJlc2V0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCpyZXNldCkpOworCXByaXYtPmN1cnJlbnRfY29tbWFuZF9vaWQgPSAwOworCXJldCA9IHJuZGlzX2NvbW1hbmQodXNiZGV2LCAodm9pZCAqKXJlc2V0LCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+Y29tbWFuZF9sb2NrKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQogCiAvKgogICogU3BlY3Mgc2F5IHRoYXQgd2UgY2FuIG9ubHkgc2V0IGNvbmZpZyBwYXJhbWV0ZXJzIG9ubHkgc29vbiBhZnRlciBkZXZpY2UKQEAgLTY1NiwxNiArOTE4LDkgQEAKIHN0YXRpYyBpbnQgcm5kaXNfc2V0X2NvbmZpZ19wYXJhbWV0ZXJfc3RyKHN0cnVjdCB1c2JuZXQgKmRldiwKIAkJCQkJCWNoYXIgKnBhcmFtLCBjaGFyICp2YWx1ZSkKIHsKLQlyZXR1cm4ocm5kaXNfc2V0X2NvbmZpZ19wYXJhbWV0ZXIoZGV2LCBwYXJhbSwgMiwgdmFsdWUpKTsKKwlyZXR1cm4gcm5kaXNfc2V0X2NvbmZpZ19wYXJhbWV0ZXIoZGV2LCBwYXJhbSwgMiwgdmFsdWUpOwogfQogCi0vKnN0YXRpYyBpbnQgcm5kaXNfc2V0X2NvbmZpZ19wYXJhbWV0ZXJfdTMyKHN0cnVjdCB1c2JuZXQgKmRldiwKLQkJCQkJCWNoYXIgKnBhcmFtLCB1MzIgdmFsdWUpCi17Ci0JcmV0dXJuKHJuZGlzX3NldF9jb25maWdfcGFyYW1ldGVyKGRldiwgcGFyYW0sIDAsICZ2YWx1ZSkpOwotfSovCi0KLQogLyoKICAqIGRhdGEgY29udmVyc2lvbiBmdW5jdGlvbnMKICAqLwpAQCAtNjc1LDc1ICs5MzAsMTIgQEAKIAlyZXR1cm4gcXVhbCA+PSAwID8gKHF1YWwgPD0gMTAwID8gcXVhbCA6IDEwMCkgOiAwOwogfQogCi0KLXN0YXRpYyB2b2lkIGRzY29uZmlnX3RvX2ZyZXEodW5zaWduZWQgaW50IGRzY29uZmlnLCBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSkKLXsKLQlmcmVxLT5lID0gMDsKLQlmcmVxLT5pID0gMDsKLQlmcmVxLT5mbGFncyA9IDA7Ci0KLQkvKiBzZWUgY29tbWVudCBpbiB3aXJlbGVzcy5oIGFib3ZlIHRoZSAic3RydWN0IGl3X2ZyZXEiCi0JICogZGVmaW5pdGlvbiBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhpcyBpZgotCSAqIE5PVEU6IDEwMDAwMDAgaXMgZHVlIHRvIHRoZSBrSHoKLQkgKi8KLQlpZiAoZHNjb25maWcgPiAxMDAwMDAwKSB7Ci0JCWZyZXEtPm0gPSBkc2NvbmZpZyAvIDEwOwotCQlmcmVxLT5lID0gMTsKLQl9IGVsc2UKLQkJZnJlcS0+bSA9IGRzY29uZmlnOwotCi0JLyogY29udmVydCBmcm9tIGtIeiB0byBIeiAqLwotCWZyZXEtPmUgKz0gMzsKLX0KLQotCi1zdGF0aWMgaW50IGZyZXFfdG9fZHNjb25maWcoc3RydWN0IGl3X2ZyZXEgKmZyZXEsIHVuc2lnbmVkIGludCAqZHNjb25maWcpCi17Ci0JaWYgKGZyZXEtPm0gPCAxMDAwICYmIGZyZXEtPmUgPT0gMCkgewotCQlpZiAoZnJlcS0+bSA+PSAxICYmIGZyZXEtPm0gPD0gMTQpCi0JCQkqZHNjb25maWcgPSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoZnJlcS0+bSkgKiAxMDAwOwotCQllbHNlCi0JCQlyZXR1cm4gLTE7Ci0JfSBlbHNlIHsKLQkJaW50IGk7Ci0JCSpkc2NvbmZpZyA9IGZyZXEtPm07Ci0JCWZvciAoaSA9IGZyZXEtPmU7IGkgPiAwOyBpLS0pCi0JCQkqZHNjb25maWcgKj0gMTA7Ci0JCSpkc2NvbmZpZyAvPSAxMDAwOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KIC8qCiAgKiBjb21tb24gZnVuY3Rpb25zCiAgKi8KLXN0YXRpYyBpbnQKLWFkZF93ZXBfa2V5KHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwgaW50IGluZGV4KTsKLQotc3RhdGljIGludCBnZXRfZXNzaWQoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBzdHJ1Y3QgbmRpc184MDIxMV9zc2lkICpzc2lkKQotewotCWludCByZXQsIGxlbjsKLQotCWxlbiA9IHNpemVvZigqc3NpZCk7Ci0JcmV0ID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9TU0lELCBzc2lkLCAmbGVuKTsKLQotCWlmIChyZXQgIT0gMCkKLQkJc3NpZC0+bGVuZ3RoID0gMDsKLQotI2lmZGVmIERFQlVHCi0JewotCQl1bnNpZ25lZCBjaGFyIHRtcFtORElTXzgwMl8xMV9MRU5HVEhfU1NJRCArIDFdOwotCi0JCW1lbWNweSh0bXAsIHNzaWQtPmVzc2lkLCBsZTMyX3RvX2NwdShzc2lkLT5sZW5ndGgpKTsKLQkJdG1wW2xlMzJfdG9fY3B1KHNzaWQtPmxlbmd0aCldID0gMDsKLQkJZGV2ZGJnKHVzYmRldiwgImdldF9lc3NpZDogJyVzJywgcmV0OiAlZCIsIHRtcCwgcmV0KTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gcmV0OwotfQotCitzdGF0aWMgaW50IHNldF9pbmZyYV9tb2RlKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgaW50IG1vZGUpOworc3RhdGljIHZvaWQgcmVzdG9yZV9rZXlzKHN0cnVjdCB1c2JuZXQgKnVzYmRldik7CitzdGF0aWMgaW50IHJuZGlzX2NoZWNrX2Jzc2lkX2xpc3Qoc3RydWN0IHVzYm5ldCAqdXNiZGV2KTsKIAogc3RhdGljIGludCBzZXRfZXNzaWQoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBzdHJ1Y3QgbmRpc184MDIxMV9zc2lkICpzc2lkKQogewpAQCAtNzUxLDE1ICs5NDMsMzggQEAKIAlpbnQgcmV0OwogCiAJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfU1NJRCwgc3NpZCwgc2l6ZW9mKCpzc2lkKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2d2Fybih1c2JkZXYsICJzZXR0aW5nIFNTSUQgZmFpbGVkICglMDhYKSIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQogCWlmIChyZXQgPT0gMCkgewogCQltZW1jcHkoJnByaXYtPmVzc2lkLCBzc2lkLCBzaXplb2YocHJpdi0+ZXNzaWQpKTsKLQkJcHJpdi0+cmFkaW9fb24gPSAxOwotCQlkZXZkYmcodXNiZGV2LCAic2V0X2Vzc2lkOiByYWRpb19vbiA9IDEiKTsKKwkJcHJpdi0+cmFkaW9fb24gPSB0cnVlOworCQlkZXZkYmcodXNiZGV2LCAic2V0X2Vzc2lkOiByYWRpb19vbiA9IHRydWUiKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHNldF9ic3NpZChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIHU4IGJzc2lkW0VUSF9BTEVOXSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQlNTSUQsIGJzc2lkLCBFVEhfQUxFTik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2d2Fybih1c2JkZXYsICJzZXR0aW5nIEJTU0lEWyVwTV0gZmFpbGVkICglMDhYKSIsIGJzc2lkLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2xlYXJfYnNzaWQoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQoreworCXU4IGJyb2FkY2FzdF9tYWNbRVRIX0FMRU5dID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworCisJcmV0dXJuIHNldF9ic3NpZCh1c2JkZXYsIGJyb2FkY2FzdF9tYWMpOworfQogCiBzdGF0aWMgaW50IGdldF9ic3NpZChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIHU4IGJzc2lkW0VUSF9BTEVOXSkKIHsKQEAgLTc4MSwxOCArOTk2LDIxIEBACiAJCQkJaW5mbywgJmxlbik7CiB9CiAKLXN0YXRpYyBpbnQgaXNfYXNzb2NpYXRlZChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCitzdGF0aWMgYm9vbCBpc19hc3NvY2lhdGVkKHN0cnVjdCB1c2JuZXQgKnVzYmRldikKIHsKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwogCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAlpbnQgcmV0OwogCisJaWYgKCFwcml2LT5yYWRpb19vbikKKwkJcmV0dXJuIGZhbHNlOworCiAJcmV0ID0gZ2V0X2Jzc2lkKHVzYmRldiwgYnNzaWQpOwogCi0JcmV0dXJuKHJldCA9PSAwICYmIG1lbWNtcChic3NpZCwgemVyb19ic3NpZCwgRVRIX0FMRU4pICE9IDApOworCXJldHVybiAocmV0ID09IDAgJiYgIWlzX3plcm9fZXRoZXJfYWRkcihic3NpZCkpOwogfQogCi0KLXN0YXRpYyBpbnQgZGlzYXNzb2NpYXRlKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgaW50IHJlc2V0X3NzaWQpCitzdGF0aWMgaW50IGRpc2Fzc29jaWF0ZShzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIGJvb2wgcmVzZXRfc3NpZCkKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwogCXN0cnVjdCBuZGlzXzgwMjExX3NzaWQgc3NpZDsKQEAgLTgwMSw4ICsxMDE5LDggQEAKIAlpZiAocHJpdi0+cmFkaW9fb24pIHsKIAkJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfRElTQVNTT0NJQVRFLCBOVUxMLCAwKTsKIAkJaWYgKHJldCA9PSAwKSB7Ci0JCQlwcml2LT5yYWRpb19vbiA9IDA7Ci0JCQlkZXZkYmcodXNiZGV2LCAiZGlzYXNzb2NpYXRlOiByYWRpb19vbiA9IDAiKTsKKwkJCXByaXYtPnJhZGlvX29uID0gZmFsc2U7CisJCQlkZXZkYmcodXNiZGV2LCAiZGlzYXNzb2NpYXRlOiByYWRpb19vbiA9IGZhbHNlIik7CiAKIAkJCWlmIChyZXNldF9zc2lkKQogCQkJCW1zbGVlcCgxMDApOwpAQCAtODEyLDYgKzEwMzAsMTEgQEAKIAkvKiBkaXNhc3NvY2lhdGUgY2F1c2VzIHJhZGlvIHRvIGJlIHR1cm5lZCBvZmY7IGlmIHJlc2V0X3NzaWQKIAkgKiBpcyBnaXZlbiwgc2V0IHJhbmRvbSBzc2lkIHRvIGVuYWJsZSByYWRpbyAqLwogCWlmIChyZXNldF9zc2lkKSB7CisJCS8qIFNldCBkZXZpY2UgdG8gaW5mcmFzdHJ1Y3R1cmUgbW9kZSBzbyB3ZSBkb24ndCBnZXQgYWQtaG9jCisJCSAqICdtZWRpYSBjb25uZWN0JyBpbmRpY2F0aW9ucyB3aXRoIHRoZSByYW5kb20gc3NpZC4KKwkJICovCisJCXNldF9pbmZyYV9tb2RlKHVzYmRldiwgTkRJU184MDIxMV9JTkZSQV9JTkZSQSk7CisKIAkJc3NpZC5sZW5ndGggPSBjcHVfdG9fbGUzMihzaXplb2Yoc3NpZC5lc3NpZCkpOwogCQlnZXRfcmFuZG9tX2J5dGVzKCZzc2lkLmVzc2lkWzJdLCBzaXplb2Yoc3NpZC5lc3NpZCktMik7CiAJCXNzaWQuZXNzaWRbMF0gPSAweDE7CkBAIC04MjMsMzUgKzEwNDYsMzQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KLXN0YXRpYyBpbnQgc2V0X2F1dGhfbW9kZShzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIGludCB3cGFfdmVyc2lvbiwgaW50IGF1dGhhbGcpCitzdGF0aWMgaW50IHNldF9hdXRoX21vZGUoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCB1MzIgd3BhX3ZlcnNpb24sCisJCQkJZW51bSBubDgwMjExX2F1dGhfdHlwZSBhdXRoX3R5cGUsIGludCBrZXltZ210KQogewogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7CiAJX19sZTMyIHRtcDsKIAlpbnQgYXV0aF9tb2RlLCByZXQ7CiAKIAlkZXZkYmcodXNiZGV2LCAic2V0X2F1dGhfbW9kZTogd3BhX3ZlcnNpb249MHgleCBhdXRoYWxnPTB4JXggIgotCQkia2V5bWdtdD0weCV4Iiwgd3BhX3ZlcnNpb24sIGF1dGhhbGcsIHByaXYtPndwYV9rZXltZ210KTsKKwkJImtleW1nbXQ9MHgleCIsIHdwYV92ZXJzaW9uLCBhdXRoX3R5cGUsIGtleW1nbXQpOwogCi0JaWYgKHdwYV92ZXJzaW9uICYgSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEyKSB7Ci0JCWlmIChwcml2LT53cGFfa2V5bWdtdCAmIElXX0FVVEhfS0VZX01HTVRfODAyXzFYKQorCWlmICh3cGFfdmVyc2lvbiAmIE5MODAyMTFfV1BBX1ZFUlNJT05fMikgeworCQlpZiAoa2V5bWdtdCAmIFJORElTX1dMQU5fS0VZX01HTVRfODAyXzFYKQogCQkJYXV0aF9tb2RlID0gTkRJU184MDIxMV9BVVRIX1dQQTI7CiAJCWVsc2UKIAkJCWF1dGhfbW9kZSA9IE5ESVNfODAyMTFfQVVUSF9XUEEyX1BTSzsKLQl9IGVsc2UgaWYgKHdwYV92ZXJzaW9uICYgSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEpIHsKLQkJaWYgKHByaXYtPndwYV9rZXltZ210ICYgSVdfQVVUSF9LRVlfTUdNVF84MDJfMVgpCisJfSBlbHNlIGlmICh3cGFfdmVyc2lvbiAmIE5MODAyMTFfV1BBX1ZFUlNJT05fMSkgeworCQlpZiAoa2V5bWdtdCAmIFJORElTX1dMQU5fS0VZX01HTVRfODAyXzFYKQogCQkJYXV0aF9tb2RlID0gTkRJU184MDIxMV9BVVRIX1dQQTsKLQkJZWxzZSBpZiAocHJpdi0+d3BhX2tleW1nbXQgJiBJV19BVVRIX0tFWV9NR01UX1BTSykKKwkJZWxzZSBpZiAoa2V5bWdtdCAmIFJORElTX1dMQU5fS0VZX01HTVRfUFNLKQogCQkJYXV0aF9tb2RlID0gTkRJU184MDIxMV9BVVRIX1dQQV9QU0s7CiAJCWVsc2UKIAkJCWF1dGhfbW9kZSA9IE5ESVNfODAyMTFfQVVUSF9XUEFfTk9ORTsKLQl9IGVsc2UgaWYgKGF1dGhhbGcgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKSB7Ci0JCWlmIChhdXRoYWxnICYgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pCi0JCQlhdXRoX21vZGUgPSBORElTXzgwMjExX0FVVEhfQVVUT19TV0lUQ0g7Ci0JCWVsc2UKLQkJCWF1dGhfbW9kZSA9IE5ESVNfODAyMTFfQVVUSF9TSEFSRUQ7Ci0JfSBlbHNlCisJfSBlbHNlIGlmIChhdXRoX3R5cGUgPT0gTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZKQorCQlhdXRoX21vZGUgPSBORElTXzgwMjExX0FVVEhfU0hBUkVEOworCWVsc2UgaWYgKGF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNKQogCQlhdXRoX21vZGUgPSBORElTXzgwMjExX0FVVEhfT1BFTjsKKwllbHNlCisJCXJldHVybiAtRU5PVFNVUFA7CiAKIAl0bXAgPSBjcHVfdG9fbGUzMihhdXRoX21vZGUpOwogCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUsICZ0bXAsCkBAIC04NjIsMTEgKzEwODQsMTIgQEAKIAl9CiAKIAlwcml2LT53cGFfdmVyc2lvbiA9IHdwYV92ZXJzaW9uOwotCXByaXYtPndwYV9hdXRoYWxnID0gYXV0aGFsZzsKKwlwcml2LT53cGFfYXV0aF90eXBlID0gYXV0aF90eXBlOworCXByaXYtPndwYV9rZXltZ210ID0ga2V5bWdtdDsKKwogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgc2V0X3ByaXZfZmlsdGVyKHN0cnVjdCB1c2JuZXQgKnVzYmRldikKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwpAQCAtODc0LDggKzEwOTcsOCBAQAogCiAJZGV2ZGJnKHVzYmRldiwgInNldF9wcml2X2ZpbHRlcjogd3BhX3ZlcnNpb249MHgleCIsIHByaXYtPndwYV92ZXJzaW9uKTsKIAotCWlmIChwcml2LT53cGFfdmVyc2lvbiAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMiB8fAotCSAgICBwcml2LT53cGFfdmVyc2lvbiAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBKQorCWlmIChwcml2LT53cGFfdmVyc2lvbiAmIE5MODAyMTFfV1BBX1ZFUlNJT05fMiB8fAorCSAgICBwcml2LT53cGFfdmVyc2lvbiAmIE5MODAyMTFfV1BBX1ZFUlNJT05fMSkKIAkJdG1wID0gY3B1X3RvX2xlMzIoTkRJU184MDIxMV9QUklWXzgwMjFYX1dFUCk7CiAJZWxzZQogCQl0bXAgPSBjcHVfdG9fbGUzMihORElTXzgwMjExX1BSSVZfQUNDRVBUX0FMTCk7CkBAIC04ODQsNyArMTEwNyw2IEBACiAJCQkJCQkJCXNpemVvZih0bXApKTsKIH0KIAotCiBzdGF0aWMgaW50IHNldF9lbmNyX21vZGUoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBpbnQgcGFpcndpc2UsIGludCBncm91cHdpc2UpCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKQEAgLTg5MiwxOSArMTExNCwxNyBAQAogCWludCBlbmNyX21vZGUsIHJldDsKIAogCWRldmRiZyh1c2JkZXYsICJzZXRfZW5jcl9tb2RlOiBjaXBoZXJfcGFpcj0weCV4IGNpcGhlcl9ncm91cD0weCV4IiwKLQkJcGFpcndpc2UsCi0JCWdyb3Vwd2lzZSk7CisJCXBhaXJ3aXNlLCBncm91cHdpc2UpOwogCi0JaWYgKHBhaXJ3aXNlICYgSVdfQVVUSF9DSVBIRVJfQ0NNUCkKKwlpZiAocGFpcndpc2UgJiBSTkRJU19XTEFOX0FMR19DQ01QKQogCQllbmNyX21vZGUgPSBORElTXzgwMjExX0VOQ1JfQ0NNUF9FTkFCTEVEOwotCWVsc2UgaWYgKHBhaXJ3aXNlICYgSVdfQVVUSF9DSVBIRVJfVEtJUCkKKwllbHNlIGlmIChwYWlyd2lzZSAmIFJORElTX1dMQU5fQUxHX1RLSVApCiAJCWVuY3JfbW9kZSA9IE5ESVNfODAyMTFfRU5DUl9US0lQX0VOQUJMRUQ7Ci0JZWxzZSBpZiAocGFpcndpc2UgJgotCQkgKElXX0FVVEhfQ0lQSEVSX1dFUDQwIHwgSVdfQVVUSF9DSVBIRVJfV0VQMTA0KSkKKwllbHNlIGlmIChwYWlyd2lzZSAmIFJORElTX1dMQU5fQUxHX1dFUCkKIAkJZW5jcl9tb2RlID0gTkRJU184MDIxMV9FTkNSX1dFUF9FTkFCTEVEOwotCWVsc2UgaWYgKGdyb3Vwd2lzZSAmIElXX0FVVEhfQ0lQSEVSX0NDTVApCisJZWxzZSBpZiAoZ3JvdXB3aXNlICYgUk5ESVNfV0xBTl9BTEdfQ0NNUCkKIAkJZW5jcl9tb2RlID0gTkRJU184MDIxMV9FTkNSX0NDTVBfRU5BQkxFRDsKLQllbHNlIGlmIChncm91cHdpc2UgJiBJV19BVVRIX0NJUEhFUl9US0lQKQorCWVsc2UgaWYgKGdyb3Vwd2lzZSAmIFJORElTX1dMQU5fQUxHX1RLSVApCiAJCWVuY3JfbW9kZSA9IE5ESVNfODAyMTFfRU5DUl9US0lQX0VOQUJMRUQ7CiAJZWxzZQogCQllbmNyX21vZGUgPSBORElTXzgwMjExX0VOQ1JfRElTQUJMRUQ7CkBAIC05MjIsMjQgKzExNDIsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW50IHNldF9hc3NvY19wYXJhbXMoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQotewotCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7Ci0KLQlzZXRfYXV0aF9tb2RlKHVzYmRldiwgcHJpdi0+d3BhX3ZlcnNpb24sIHByaXYtPndwYV9hdXRoYWxnKTsKLQlzZXRfcHJpdl9maWx0ZXIodXNiZGV2KTsKLQlzZXRfZW5jcl9tb2RlKHVzYmRldiwgcHJpdi0+d3BhX2NpcGhlcl9wYWlyLCBwcml2LT53cGFfY2lwaGVyX2dyb3VwKTsKLQotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyBpbnQgc2V0X2luZnJhX21vZGUoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwogCV9fbGUzMiB0bXA7Ci0JaW50IHJldCwgaTsKKwlpbnQgcmV0OwogCiAJZGV2ZGJnKHVzYmRldiwgInNldF9pbmZyYV9tb2RlOiBpbmZyYV9tb2RlPTB4JXgiLCBwcml2LT5pbmZyYV9tb2RlKTsKIApAQCAtOTU0LDU1ICsxMTYxLDEwNyBAQAogCS8qIE5ESVMgZHJpdmVycyBjbGVhciBrZXlzIHdoZW4gaW5mcmFzdHJ1Y3R1cmUgbW9kZSBpcwogCSAqIGNoYW5nZWQuIEJ1dCBMaW51eCB0b29scyBhc3N1bWUgb3RoZXJ3aXNlLiBTbyBzZXQgdGhlCiAJICoga2V5cyAqLwotCWlmIChwcml2LT53cGFfa2V5bWdtdCA9PSAwIHx8Ci0JCXByaXYtPndwYV9rZXltZ210ID09IElXX0FVVEhfS0VZX01HTVRfODAyXzFYKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCWlmIChwcml2LT5lbmNyX2tleV9sZW5baV0gPiAwICYmICFwcml2LT5lbmNyX2tleV93cGFbaV0pCi0JCQkJYWRkX3dlcF9rZXkodXNiZGV2LCBwcml2LT5lbmNyX2tleXNbaV0sCi0JCQkJCQlwcml2LT5lbmNyX2tleV9sZW5baV0sIGkpOwotCQl9Ci0JfQorCXJlc3RvcmVfa2V5cyh1c2JkZXYpOwogCiAJcHJpdi0+aW5mcmFfbW9kZSA9IG1vZGU7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCB1MzIgcnRzX3RocmVzaG9sZCkKK3sKKwlfX2xlMzIgdG1wOworCisJZGV2ZGJnKHVzYmRldiwgInNldF9ydHNfdGhyZXNob2xkICVpIiwgcnRzX3RocmVzaG9sZCk7CisKKwlpZiAocnRzX3RocmVzaG9sZCA8IDAgfHwgcnRzX3RocmVzaG9sZCA+IDIzNDcpCisJCXJ0c190aHJlc2hvbGQgPSAyMzQ3OworCisJdG1wID0gY3B1X3RvX2xlMzIocnRzX3RocmVzaG9sZCk7CisJcmV0dXJuIHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX1JUU19USFJFU0hPTEQsICZ0bXAsCisJCQkJCQkJCXNpemVvZih0bXApKTsKK30KKworc3RhdGljIGludCBzZXRfZnJhZ190aHJlc2hvbGQoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCB1MzIgZnJhZ190aHJlc2hvbGQpCit7CisJX19sZTMyIHRtcDsKKworCWRldmRiZyh1c2JkZXYsICJzZXRfZnJhZ190aHJlc2hvbGQgJWkiLCBmcmFnX3RocmVzaG9sZCk7CisKKwlpZiAoZnJhZ190aHJlc2hvbGQgPCAyNTYgfHwgZnJhZ190aHJlc2hvbGQgPiAyMzQ2KQorCQlmcmFnX3RocmVzaG9sZCA9IDIzNDY7CisKKwl0bXAgPSBjcHVfdG9fbGUzMihmcmFnX3RocmVzaG9sZCk7CisJcmV0dXJuIHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xELCAmdG1wLAorCQkJCQkJCQlzaXplb2YodG1wKSk7Cit9CiAKIHN0YXRpYyB2b2lkIHNldF9kZWZhdWx0X2l3X3BhcmFtcyhzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCiB7Ci0Jc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKLQotCXByaXYtPndwYV9rZXltZ210ID0gMDsKLQlwcml2LT53cGFfdmVyc2lvbiA9IDA7Ci0KIAlzZXRfaW5mcmFfbW9kZSh1c2JkZXYsIE5ESVNfODAyMTFfSU5GUkFfSU5GUkEpOwotCXNldF9hdXRoX21vZGUodXNiZGV2LCBJV19BVVRIX1dQQV9WRVJTSU9OX0RJU0FCTEVELAotCQkJCUlXX0FVVEhfQUxHX09QRU5fU1lTVEVNKTsKKwlzZXRfYXV0aF9tb2RlKHVzYmRldiwgMCwgTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTSwKKwkJCQkJCVJORElTX1dMQU5fS0VZX01HTVRfTk9ORSk7CiAJc2V0X3ByaXZfZmlsdGVyKHVzYmRldik7Ci0Jc2V0X2VuY3JfbW9kZSh1c2JkZXYsIElXX0FVVEhfQ0lQSEVSX05PTkUsIElXX0FVVEhfQ0lQSEVSX05PTkUpOworCXNldF9lbmNyX21vZGUodXNiZGV2LCBSTkRJU19XTEFOX0FMR19OT05FLCBSTkRJU19XTEFOX0FMR19OT05FKTsKIH0KIAotCiBzdGF0aWMgaW50IGRlYXV0aGVudGljYXRlKHN0cnVjdCB1c2JuZXQgKnVzYmRldikKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZGlzYXNzb2NpYXRlKHVzYmRldiwgMSk7CisJcmV0ID0gZGlzYXNzb2NpYXRlKHVzYmRldiwgdHJ1ZSk7CiAJc2V0X2RlZmF1bHRfaXdfcGFyYW1zKHVzYmRldik7CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBzZXRfY2hhbm5lbChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIGludCBjaGFubmVsKQoreworCXN0cnVjdCBuZGlzXzgwMjExX2NvbmYgY29uZmlnOworCXVuc2lnbmVkIGludCBkc2NvbmZpZzsKKwlpbnQgbGVuLCByZXQ7CisKKwlkZXZkYmcodXNiZGV2LCAic2V0X2NoYW5uZWwoJWQpIiwgY2hhbm5lbCk7CisKKwkvKiB0aGlzIE9JRCBpcyB2YWxpZCBvbmx5IHdoZW4gbm90IGFzc29jaWF0ZWQgKi8KKwlpZiAoaXNfYXNzb2NpYXRlZCh1c2JkZXYpKQorCQlyZXR1cm4gMDsKKworCWRzY29uZmlnID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGNoYW5uZWwpICogMTAwMDsKKworCWxlbiA9IHNpemVvZihjb25maWcpOworCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTiwgJmNvbmZpZywgJmxlbik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2ZGJnKHVzYmRldiwgInNldF9jaGFubmVsOiBxdWVyeWluZyBjb25maWd1cmF0aW9uIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWNvbmZpZy5kc19jb25maWcgPSBjcHVfdG9fbGUzMihkc2NvbmZpZyk7CisJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTiwgJmNvbmZpZywKKwkJCQkJCQkJc2l6ZW9mKGNvbmZpZykpOworCisJZGV2ZGJnKHVzYmRldiwgInNldF9jaGFubmVsOiAlZCAtPiAlZCIsIGNoYW5uZWwsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQogCiAvKiBpbmRleCBtdXN0IGJlIDAgLSBOLCBhcyBwZXIgTkRJUyAgKi8KLXN0YXRpYyBpbnQgYWRkX3dlcF9rZXkoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBjaGFyICprZXksIGludCBrZXlfbGVuLCBpbnQgaW5kZXgpCitzdGF0aWMgaW50IGFkZF93ZXBfa2V5KHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgY29uc3QgdTggKmtleSwgaW50IGtleV9sZW4sCisJCQkJCQkJCWludCBpbmRleCkKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwogCXN0cnVjdCBuZGlzXzgwMjExX3dlcF9rZXkgbmRpc19rZXk7CisJdTMyIGNpcGhlcjsKIAlpbnQgcmV0OwogCi0JaWYgKGtleV9sZW4gPD0gMCB8fCBrZXlfbGVuID4gMzIgfHwgaW5kZXggPCAwIHx8IGluZGV4ID49IDQpCisJZGV2ZGJnKHVzYmRldiwgImFkZF93ZXBfa2V5KGlkeDogJWQsIGxlbjogJWQpIiwgaW5kZXgsIGtleV9sZW4pOworCisJaWYgKChrZXlfbGVuICE9IDUgJiYga2V5X2xlbiAhPSAxMykgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gMykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoa2V5X2xlbiA9PSA1KQorCQljaXBoZXIgPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDsKKwllbHNlCisJCWNpcGhlciA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDsKKwogCW1lbXNldCgmbmRpc19rZXksIDAsIHNpemVvZihuZGlzX2tleSkpOwogCiAJbmRpc19rZXkuc2l6ZSA9IGNwdV90b19sZTMyKHNpemVvZihuZGlzX2tleSkpOwpAQCAtMTAxMiw4ICsxMjcxLDggQEAKIAogCWlmIChpbmRleCA9PSBwcml2LT5lbmNyX3R4X2tleV9pbmRleCkgewogCQluZGlzX2tleS5pbmRleCB8PSBORElTXzgwMjExX0FERFdFUF9UUkFOU01JVF9LRVk7Ci0JCXJldCA9IHNldF9lbmNyX21vZGUodXNiZGV2LCBJV19BVVRIX0NJUEhFUl9XRVAxMDQsCi0JCQkJCQlJV19BVVRIX0NJUEhFUl9OT05FKTsKKwkJcmV0ID0gc2V0X2VuY3JfbW9kZSh1c2JkZXYsIFJORElTX1dMQU5fQUxHX1dFUCwKKwkJCQkJCQlSTkRJU19XTEFOX0FMR19OT05FKTsKIAkJaWYgKHJldCkKIAkJCWRldndhcm4odXNiZGV2LCAiZW5jcnlwdGlvbiBjb3VsZG4ndCBiZSBlbmFibGVkICglMDhYKSIsCiAJCQkJCQkJCQlyZXQpOwpAQCAtMTAyNywzMCArMTI4Niw1MSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXByaXYtPmVuY3Jfa2V5X2xlbltpbmRleF0gPSBrZXlfbGVuOwotCXByaXYtPmVuY3Jfa2V5X3dwYVtpbmRleF0gPSAwOwotCW1lbWNweSgmcHJpdi0+ZW5jcl9rZXlzW2luZGV4XSwga2V5LCBrZXlfbGVuKTsKKwlwcml2LT5lbmNyX2tleXNbaW5kZXhdLmxlbiA9IGtleV9sZW47CisJcHJpdi0+ZW5jcl9rZXlzW2luZGV4XS5jaXBoZXIgPSBjaXBoZXI7CisJbWVtY3B5KCZwcml2LT5lbmNyX2tleXNbaW5kZXhdLm1hdGVyaWFsLCBrZXksIGtleV9sZW4pOworCW1lbXNldCgmcHJpdi0+ZW5jcl9rZXlzW2luZGV4XS5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOwogCiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBhZGRfd3BhX2tleShzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIGNvbnN0IHU4ICprZXksIGludCBrZXlfbGVuLAotCQkJaW50IGluZGV4LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0JCQljb25zdCB1OCAqcnhfc2VxLCBpbnQgYWxnLCBpbnQgZmxhZ3MpCisJCQlpbnQgaW5kZXgsIGNvbnN0IHU4ICphZGRyLCBjb25zdCB1OCAqcnhfc2VxLAorCQkJaW50IHNlcV9sZW4sIHUzMiBjaXBoZXIsIF9fbGUzMiBmbGFncykKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwogCXN0cnVjdCBuZGlzXzgwMjExX2tleSBuZGlzX2tleTsKKwlib29sIGlzX2FkZHJfb2s7CiAJaW50IHJldDsKIAotCWlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gNCkKKwlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IDQpIHsKKwkJZGV2ZGJnKHVzYmRldiwgImFkZF93cGFfa2V5OiBpbmRleCBvdXQgb2YgcmFuZ2UgKCVpKSIsIGluZGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGtleV9sZW4gPiBzaXplb2YobmRpc19rZXkubWF0ZXJpYWwpIHx8IGtleV9sZW4gPCAwKQorCX0KKwlpZiAoa2V5X2xlbiA+IHNpemVvZihuZGlzX2tleS5tYXRlcmlhbCkgfHwga2V5X2xlbiA8IDApIHsKKwkJZGV2ZGJnKHVzYmRldiwgImFkZF93cGFfa2V5OiBrZXkgbGVuZ3RoIG91dCBvZiByYW5nZSAoJWkpIiwKKwkJCWtleV9sZW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoKGZsYWdzICYgTkRJU184MDIxMV9BRERLRVlfU0VUX0lOSVRfUkVDVl9TRVEpICYmICFyeF9zZXEpCisJfQorCWlmIChmbGFncyAmIE5ESVNfODAyMTFfQURES0VZX1NFVF9JTklUX1JFQ1ZfU0VRKSB7CisJCWlmICghcnhfc2VxIHx8IHNlcV9sZW4gPD0gMCkgeworCQkJZGV2ZGJnKHVzYmRldiwgImFkZF93cGFfa2V5OiByZWN2IHNlcSBmbGFnIHdpdGhvdXQiCisJCQkJCSJidWZmZXIiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChyeF9zZXEgJiYgc2VxX2xlbiA+IHNpemVvZihuZGlzX2tleS5yc2MpKSB7CisJCQlkZXZkYmcodXNiZGV2LCAiYWRkX3dwYV9rZXk6IHRvbyBiaWcgcmVjdiBzZXEgYnVmZmVyIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWlzX2FkZHJfb2sgPSBhZGRyICYmICFpc196ZXJvX2V0aGVyX2FkZHIoYWRkcikgJiYKKwkJCQkJIWlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpOworCWlmICgoZmxhZ3MgJiBORElTXzgwMjExX0FEREtFWV9QQUlSV0lTRV9LRVkpICYmICFpc19hZGRyX29rKSB7CisJCWRldmRiZyh1c2JkZXYsICJhZGRfd3BhX2tleTogcGFpcndpc2UgYnV0IGJzc2lkIGludmFsaWQgKCVwTSkiLAorCQkJYWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwotCWlmICgoZmxhZ3MgJiBORElTXzgwMjExX0FEREtFWV9QQUlSV0lTRV9LRVkpICYmICFhZGRyKQotCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlkZXZkYmcodXNiZGV2LCAiYWRkX3dwYV9rZXkoJWkpOiBmbGFnczolaSVpJWkiLCBpbmRleCwKIAkJCSEhKGZsYWdzICYgTkRJU184MDIxMV9BRERLRVlfVFJBTlNNSVRfS0VZKSwKQEAgLTEwNjQsNyArMTM0NCw3IEBACiAJbmRpc19rZXkubGVuZ3RoID0gY3B1X3RvX2xlMzIoa2V5X2xlbik7CiAJbmRpc19rZXkuaW5kZXggPSBjcHVfdG9fbGUzMihpbmRleCkgfCBmbGFnczsKIAotCWlmIChhbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQICYmIGtleV9sZW4gPT0gMzIpIHsKKwlpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAgJiYga2V5X2xlbiA9PSAzMikgewogCQkvKiB3cGFfc3VwcGxpY2FudCBnaXZlcyB1cyB0aGUgTWljaGFlbCBNSUMgUlgvVFgga2V5cyBpbgogCQkgKiBkaWZmZXJlbnQgb3JkZXIgdGhhbiBORElTIHNwZWMsIHNvIHN3YXAgdGhlIG9yZGVyIGhlcmUuICovCiAJCW1lbWNweShuZGlzX2tleS5tYXRlcmlhbCwga2V5LCAxNik7CkBAIC0xMDc0LDExICsxMzU0LDExIEBACiAJCW1lbWNweShuZGlzX2tleS5tYXRlcmlhbCwga2V5LCBrZXlfbGVuKTsKIAogCWlmIChmbGFncyAmIE5ESVNfODAyMTFfQURES0VZX1NFVF9JTklUX1JFQ1ZfU0VRKQotCQltZW1jcHkobmRpc19rZXkucnNjLCByeF9zZXEsIDYpOworCQltZW1jcHkobmRpc19rZXkucnNjLCByeF9zZXEsIHNlcV9sZW4pOwogCiAJaWYgKGZsYWdzICYgTkRJU184MDIxMV9BRERLRVlfUEFJUldJU0VfS0VZKSB7CiAJCS8qIHBhaXJ3aXNlIGtleSAqLwotCQltZW1jcHkobmRpc19rZXkuYnNzaWQsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KG5kaXNfa2V5LmJzc2lkLCBhZGRyLCBFVEhfQUxFTik7CiAJfSBlbHNlIHsKIAkJLyogZ3JvdXAga2V5ICovCiAJCWlmIChwcml2LT5pbmZyYV9tb2RlID09IE5ESVNfODAyMTFfSU5GUkFfQURIT0MpCkBAIC0xMDkzLDggKzEzNzMsMTQgQEAKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKLQlwcml2LT5lbmNyX2tleV9sZW5baW5kZXhdID0ga2V5X2xlbjsKLQlwcml2LT5lbmNyX2tleV93cGFbaW5kZXhdID0gMTsKKwltZW1zZXQoJnByaXYtPmVuY3Jfa2V5c1tpbmRleF0sIDAsIHNpemVvZihwcml2LT5lbmNyX2tleXNbaW5kZXhdKSk7CisJcHJpdi0+ZW5jcl9rZXlzW2luZGV4XS5sZW4gPSBrZXlfbGVuOworCXByaXYtPmVuY3Jfa2V5c1tpbmRleF0uY2lwaGVyID0gY2lwaGVyOworCW1lbWNweSgmcHJpdi0+ZW5jcl9rZXlzW2luZGV4XS5tYXRlcmlhbCwga2V5LCBrZXlfbGVuKTsKKwlpZiAoZmxhZ3MgJiBORElTXzgwMjExX0FEREtFWV9QQUlSV0lTRV9LRVkpCisJCW1lbWNweSgmcHJpdi0+ZW5jcl9rZXlzW2luZGV4XS5ic3NpZCwgbmRpc19rZXkuYnNzaWQsIEVUSF9BTEVOKTsKKwllbHNlCisJCW1lbXNldCgmcHJpdi0+ZW5jcl9rZXlzW2luZGV4XS5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOwogCiAJaWYgKGZsYWdzICYgTkRJU184MDIxMV9BRERLRVlfVFJBTlNNSVRfS0VZKQogCQlwcml2LT5lbmNyX3R4X2tleV9pbmRleCA9IGluZGV4OwpAQCAtMTEwMiwzMSArMTM4OCw2MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJlc3RvcmVfa2V5KHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgaW50IGtleV9pZHgpCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9lbmNyX2tleSBrZXk7CisKKwlpZiAoaXNfd3BhX2tleShwcml2LCBrZXlfaWR4KSkKKwkJcmV0dXJuIDA7CisKKwlrZXkgPSBwcml2LT5lbmNyX2tleXNba2V5X2lkeF07CisKKwlkZXZkYmcodXNiZGV2LCAicmVzdG9yZV9rZXk6ICVpOiVpIiwga2V5X2lkeCwga2V5Lmxlbik7CisKKwlpZiAoa2V5LmxlbiA9PSAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBhZGRfd2VwX2tleSh1c2JkZXYsIGtleS5tYXRlcmlhbCwga2V5Lmxlbiwga2V5X2lkeCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfa2V5cyhzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlyZXN0b3JlX2tleSh1c2JkZXYsIGkpOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9rZXkoc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiwgaW50IGlkeCkKK3sKKwltZW1zZXQoJnByaXYtPmVuY3Jfa2V5c1tpZHhdLCAwLCBzaXplb2YocHJpdi0+ZW5jcl9rZXlzW2lkeF0pKTsKK30KIAogLyogcmVtb3ZlX2tleSBpcyBmb3IgYm90aCB3ZXAgYW5kIHdwYSAqLwotc3RhdGljIGludCByZW1vdmVfa2V5KHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgaW50IGluZGV4LCB1OCBic3NpZFtFVEhfQUxFTl0pCitzdGF0aWMgaW50IHJlbW92ZV9rZXkoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBpbnQgaW5kZXgsIGNvbnN0IHU4ICpic3NpZCkKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwogCXN0cnVjdCBuZGlzXzgwMjExX3JlbW92ZV9rZXkgcmVtb3ZlX2tleTsKIAlfX2xlMzIga2V5aW5kZXg7CisJYm9vbCBpc193cGE7CiAJaW50IHJldDsKIAotCWlmIChwcml2LT5lbmNyX2tleV9sZW5baW5kZXhdID09IDApCisJaWYgKHByaXYtPmVuY3Jfa2V5c1tpbmRleF0ubGVuID09IDApCiAJCXJldHVybiAwOwogCi0JcHJpdi0+ZW5jcl9rZXlfbGVuW2luZGV4XSA9IDA7Ci0JcHJpdi0+ZW5jcl9rZXlfd3BhW2luZGV4XSA9IDA7Ci0JbWVtc2V0KCZwcml2LT5lbmNyX2tleXNbaW5kZXhdLCAwLCBzaXplb2YocHJpdi0+ZW5jcl9rZXlzW2luZGV4XSkpOworCWlzX3dwYSA9IGlzX3dwYV9rZXkocHJpdiwgaW5kZXgpOwogCi0JaWYgKHByaXYtPndwYV9jaXBoZXJfcGFpciA9PSBJV19BVVRIX0NJUEhFUl9US0lQIHx8Ci0JICAgIHByaXYtPndwYV9jaXBoZXJfcGFpciA9PSBJV19BVVRIX0NJUEhFUl9DQ01QIHx8Ci0JICAgIHByaXYtPndwYV9jaXBoZXJfZ3JvdXAgPT0gSVdfQVVUSF9DSVBIRVJfVEtJUCB8fAotCSAgICBwcml2LT53cGFfY2lwaGVyX2dyb3VwID09IElXX0FVVEhfQ0lQSEVSX0NDTVApIHsKKwlkZXZkYmcodXNiZGV2LCAicmVtb3ZlX2tleTogJWk6JXM6JWkiLCBpbmRleCwgaXNfd3BhID8gIndwYSIgOiAid2VwIiwKKwkJcHJpdi0+ZW5jcl9rZXlzW2luZGV4XS5sZW4pOworCisJY2xlYXJfa2V5KHByaXYsIGluZGV4KTsKKworCWlmIChpc193cGEpIHsKIAkJcmVtb3ZlX2tleS5zaXplID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHJlbW92ZV9rZXkpKTsKIAkJcmVtb3ZlX2tleS5pbmRleCA9IGNwdV90b19sZTMyKGluZGV4KTsKIAkJaWYgKGJzc2lkKSB7CiAJCQkvKiBwYWlyd2lzZSBrZXkgKi8KLQkJCWlmIChtZW1jbXAoYnNzaWQsIGZmZmZfYnNzaWQsIEVUSF9BTEVOKSAhPSAwKQorCQkJaWYgKCFpc19icm9hZGNhc3RfZXRoZXJfYWRkcihic3NpZCkpCiAJCQkJcmVtb3ZlX2tleS5pbmRleCB8PQogCQkJCQlORElTXzgwMjExX0FEREtFWV9QQUlSV0lTRV9LRVk7CiAJCQltZW1jcHkocmVtb3ZlX2tleS5ic3NpZCwgYnNzaWQsCkBAIC0xMTUzLDEyICsxNDcwLDExIEBACiAKIAkvKiBpZiBpdCBpcyB0cmFuc21pdCBrZXksIGRpc2FibGUgZW5jcnlwdGlvbiAqLwogCWlmIChpbmRleCA9PSBwcml2LT5lbmNyX3R4X2tleV9pbmRleCkKLQkJc2V0X2VuY3JfbW9kZSh1c2JkZXYsIElXX0FVVEhfQ0lQSEVSX05PTkUsIElXX0FVVEhfQ0lQSEVSX05PTkUpOworCQlzZXRfZW5jcl9tb2RlKHVzYmRldiwgUk5ESVNfV0xBTl9BTEdfTk9ORSwgUk5ESVNfV0xBTl9BTEdfTk9ORSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQogewogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7CkBAIC0xMjE4LDI0ICsxNTM0LDE4IEBACiAJCQkJCQlsZTMyX3RvX2NwdShmaWx0ZXIpLCByZXQpOwogfQogCi0KIC8qCiAgKiBjZmc4MDIxMSBvcHMKICAqLwotc3RhdGljIGludCBybmRpc19jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCB3aXBoeSAqd2lwaHksIGludCBpZmluZGV4LAorc3RhdGljIGludCBybmRpc19jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCWVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwgdTMyICpmbGFncywKIAkJCQkJc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCB1c2JuZXQgKnVzYmRldjsKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OwogCWludCBtb2RlOwogCi0JLyogd2UncmUgdW5kZXIgUlROTCAqLwotCWRldiA9IF9fZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpOwotCWlmICghZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQl1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJbW9kZSA9IE5ESVNfODAyMTFfSU5GUkFfQURIT0M7CkBAIC0xMjQ3LDExICsxNTU3LDY3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXByaXYtPndkZXYuaWZ0eXBlID0gdHlwZTsKKwogCXJldHVybiBzZXRfaW5mcmFfbW9kZSh1c2JkZXYsIG1vZGUpOwogfQogCitzdGF0aWMgaW50IHJuZGlzX3NldF93aXBoeV9wYXJhbXMoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKwlpbnQgZXJyOwogCi0jZGVmaW5lIFNDQU5fREVMQVlfSklGRklFUyAoSFopCisJaWYgKGNoYW5nZWQgJiBXSVBIWV9QQVJBTV9GUkFHX1RIUkVTSE9MRCkgeworCQllcnIgPSBzZXRfZnJhZ190aHJlc2hvbGQodXNiZGV2LCB3aXBoeS0+ZnJhZ190aHJlc2hvbGQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKGNoYW5nZWQgJiBXSVBIWV9QQVJBTV9SVFNfVEhSRVNIT0xEKSB7CisJCWVyciA9IHNldF9ydHNfdGhyZXNob2xkKHVzYmRldiwgd2lwaHktPnJ0c190aHJlc2hvbGQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm5kaXNfc2V0X3R4X3Bvd2VyKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gdHhfcG93ZXJfc2V0dGluZyB0eXBlLAorCQkJCWludCBkYm0pCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKworCWRldmRiZyh1c2JkZXYsICJybmRpc19zZXRfdHhfcG93ZXIgdHlwZToweCV4IGRibTolaSIsIHR5cGUsIGRibSk7CisKKwkvKiBEZXZpY2UgZG9lc24ndCBzdXBwb3J0IGNoYW5naW5nIHR4cG93ZXIgYWZ0ZXIgaW5pdGlhbGl6YXRpb24sIG9ubHkKKwkgKiB0dXJuIG9mZi9vbiByYWRpby4gU3VwcG9ydCAnYXV0bycgbW9kZSBhbmQgc2V0dGluZyBzYW1lIGRCbSB0aGF0IGlzCisJICogY3VycmVudGx5IHVzZWQuCisJICovCisJaWYgKHR5cGUgPT0gVFhfUE9XRVJfQVVUT01BVElDIHx8IGRibSA9PSBnZXRfYmNtNDMyMF9wb3dlcl9kYm0ocHJpdikpIHsKKwkJaWYgKCFwcml2LT5yYWRpb19vbikKKwkJCWRpc2Fzc29jaWF0ZSh1c2JkZXYsIHRydWUpOyAvKiB0dXJuIG9uIHJhZGlvICovCisKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworc3RhdGljIGludCBybmRpc19nZXRfdHhfcG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwgaW50ICpkYm0pCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKworCSpkYm0gPSBnZXRfYmNtNDMyMF9wb3dlcl9kYm0ocHJpdik7CisKKwlkZXZkYmcodXNiZGV2LCAicm5kaXNfZ2V0X3R4X3Bvd2VyIGRibTolaSIsICpkYm0pOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgU0NBTl9ERUxBWV9KSUZGSUVTICg2ICogSFopCiBzdGF0aWMgaW50IHJuZGlzX3NjYW4oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QpCiB7CkBAIC0xMjYyLDYgKzE2MjgsMTEgQEAKIAogCWRldmRiZyh1c2JkZXYsICJjZmc4MDIxMS5zY2FuIik7CiAKKwkvKiBHZXQgY3VycmVudCBic3NpZCBsaXN0IGZyb20gZGV2aWNlIGJlZm9yZSBuZXcgc2NhbiwgYXMgbmV3IHNjYW4KKwkgKiBjbGVhcnMgaW50ZXJuYWwgYnNzaWQgbGlzdC4KKwkgKi8KKwlybmRpc19jaGVja19ic3NpZF9saXN0KHVzYmRldik7CisKIAlpZiAoIXJlcXVlc3QpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMjgyLDcgKzE2NTMsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9ic3MgKnJuZGlzX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsCiAJCQkJCXN0cnVjdCBuZGlzXzgwMjExX2Jzc2lkX2V4ICpic3NpZCkKIHsKQEAgLTEyOTYsNiArMTY2Niw5IEBACiAJaW50IGllX2xlbiwgYnNzaWRfbGVuOwogCXU4ICppZTsKIAorCWRldmRiZyh1c2JkZXYsICIgZm91bmQgYnNzaWQ6ICclLjMycycgWyVwTV0iLCBic3NpZC0+c3NpZC5lc3NpZCwKKwkJCQkJCQlic3NpZC0+bWFjKTsKKwogCS8qIHBhcnNlIGJzc2lkIHN0cnVjdHVyZSAqLwogCWJzc2lkX2xlbiA9IGxlMzJfdG9fY3B1KGJzc2lkLT5sZW5ndGgpOwogCkBAIC0xMzI4LDE3ICsxNzAxLDE4IEBACiAJCUdGUF9LRVJORUwpOwogfQogCi0KIHN0YXRpYyBpbnQgcm5kaXNfY2hlY2tfYnNzaWRfbGlzdChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCiB7CiAJdm9pZCAqYnVmID0gTlVMTDsKIAlzdHJ1Y3QgbmRpc184MDIxMV9ic3NpZF9saXN0X2V4ICpic3NpZF9saXN0OwogCXN0cnVjdCBuZGlzXzgwMjExX2Jzc2lkX2V4ICpic3NpZDsKIAlpbnQgcmV0ID0gLUVJTlZBTCwgbGVuLCBjb3VudCwgYnNzaWRfbGVuOworCWJvb2wgcmVzaXplZCA9IGZhbHNlOwogCiAJZGV2ZGJnKHVzYmRldiwgImNoZWNrX2Jzc2lkX2xpc3QiKTsKIAogCWxlbiA9IENPTlRST0xfQlVGRkVSX1NJWkU7CityZXNpemVfYnVmOgogCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTM0OSwxMSArMTcyMywxOCBAQAogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXQ7CiAKKwlpZiAoIXJlc2l6ZWQgJiYgbGVuID4gQ09OVFJPTF9CVUZGRVJfU0laRSkgeworCQlyZXNpemVkID0gdHJ1ZTsKKwkJa2ZyZWUoYnVmKTsKKwkJZ290byByZXNpemVfYnVmOworCX0KKwogCWJzc2lkX2xpc3QgPSBidWY7CiAJYnNzaWQgPSBic3NpZF9saXN0LT5ic3NpZDsKIAlic3NpZF9sZW4gPSBsZTMyX3RvX2NwdShic3NpZC0+bGVuZ3RoKTsKIAljb3VudCA9IGxlMzJfdG9fY3B1KGJzc2lkX2xpc3QtPm51bV9pdGVtcyk7Ci0JZGV2ZGJnKHVzYmRldiwgImNoZWNrX2Jzc2lkX2xpc3Q6ICVkIEJTU0lEcyBmb3VuZCIsIGNvdW50KTsKKwlkZXZkYmcodXNiZGV2LCAiY2hlY2tfYnNzaWRfbGlzdDogJWQgQlNTSURzIGZvdW5kIChidWZsZW46ICVkKSIsIGNvdW50LAorCQkJCQkJCQkJbGVuKTsKIAogCXdoaWxlIChjb3VudCAmJiAoKHZvaWQgKilic3NpZCArIGJzc2lkX2xlbikgPD0gKGJ1ZiArIGxlbikpIHsKIAkJcm5kaXNfYnNzX2luZm9fdXBkYXRlKHVzYmRldiwgYnNzaWQpOwpAQCAtMTM2OCw3ICsxNzQ5LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KIHN0YXRpYyB2b2lkIHJuZGlzX2dldF9zY2FuX3Jlc3VsdHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPQpAQCAtMTM3OCw2ICsxNzU4LDkgQEAKIAogCWRldmRiZyh1c2JkZXYsICJnZXRfc2Nhbl9yZXN1bHRzIik7CiAKKwlpZiAoIXByaXYtPnNjYW5fcmVxdWVzdCkKKwkJcmV0dXJuOworCiAJcmV0ID0gcm5kaXNfY2hlY2tfYnNzaWRfbGlzdCh1c2JkZXYpOwogCiAJY2ZnODAyMTFfc2Nhbl9kb25lKHByaXYtPnNjYW5fcmVxdWVzdCwgcmV0IDwgMCk7CkBAIC0xMzg1LDczNSArMTc2OCw0NzQgQEAKIAlwcml2LT5zY2FuX3JlcXVlc3QgPSBOVUxMOwogfQogCi0KLS8qCi0gKiB3aXJlbGVzcyBleHRlbnNpb24gaGFuZGxlcnMKLSAqLwotCi1zdGF0aWMgaW50IHJuZGlzX2l3X2NvbW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQorc3RhdGljIGludCBybmRpc19jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQogewotCS8qIGR1bW15IG9wICovCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19zZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICplc3NpZCkKLXsKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IHNtZS0+Y2hhbm5lbDsKIAlzdHJ1Y3QgbmRpc184MDIxMV9zc2lkIHNzaWQ7Ci0JaW50IGxlbmd0aCA9IHdycXUtPmVzc2lkLmxlbmd0aDsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBwYWlyd2lzZSA9IFJORElTX1dMQU5fQUxHX05PTkU7CisJaW50IGdyb3Vwd2lzZSA9IFJORElTX1dMQU5fQUxHX05PTkU7CisJaW50IGtleW1nbXQgPSBSTkRJU19XTEFOX0tFWV9NR01UX05PTkU7CisJaW50IGxlbmd0aCwgaSwgcmV0LCBjaGFuID0gLTE7CiAKLQlkZXZkYmcodXNiZGV2LCAiU0lPQ1NJV0VTU0lEOiBbZmxhZ3M6JWQsbGVuOiVkXSAnJS4zMnMnIiwKLQkJd3JxdS0+ZXNzaWQuZmxhZ3MsIHdycXUtPmVzc2lkLmxlbmd0aCwgZXNzaWQpOworCWlmIChjaGFubmVsKQorCQljaGFuID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAotCWlmIChsZW5ndGggPiBORElTXzgwMl8xMV9MRU5HVEhfU1NJRCkKLQkJbGVuZ3RoID0gTkRJU184MDJfMTFfTEVOR1RIX1NTSUQ7CisJZ3JvdXB3aXNlID0gcm5kaXNfY2lwaGVyX3RvX2FsZyhzbWUtPmNyeXB0by5jaXBoZXJfZ3JvdXApOworCWZvciAoaSA9IDA7IGkgPCBzbWUtPmNyeXB0by5uX2NpcGhlcnNfcGFpcndpc2U7IGkrKykKKwkJcGFpcndpc2UgfD0KKwkJCXJuZGlzX2NpcGhlcl90b19hbGcoc21lLT5jcnlwdG8uY2lwaGVyc19wYWlyd2lzZVtpXSk7CiAKLQlzc2lkLmxlbmd0aCA9IGNwdV90b19sZTMyKGxlbmd0aCk7Ci0JaWYgKGxlbmd0aCA+IDApCi0JCW1lbWNweShzc2lkLmVzc2lkLCBlc3NpZCwgbGVuZ3RoKTsKLQllbHNlCi0JCW1lbXNldChzc2lkLmVzc2lkLCAwLCBORElTXzgwMl8xMV9MRU5HVEhfU1NJRCk7Ci0KLQlzZXRfYXNzb2NfcGFyYW1zKHVzYmRldik7Ci0KLQlpZiAoIXdycXUtPmVzc2lkLmZsYWdzIHx8IGxlbmd0aCA9PSAwKQotCQlyZXR1cm4gZGlzYXNzb2NpYXRlKHVzYmRldiwgMSk7Ci0JZWxzZQotCQlyZXR1cm4gc2V0X2Vzc2lkKHVzYmRldiwgJnNzaWQpOwotfQotCi0KLXN0YXRpYyBpbnQgcm5kaXNfaXdfZ2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXNzaWQpCi17Ci0Jc3RydWN0IG5kaXNfODAyMTFfc3NpZCBzc2lkOwotCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHJldDsKLQotCXJldCA9IGdldF9lc3NpZCh1c2JkZXYsICZzc2lkKTsKLQotCWlmIChyZXQgPT0gMCAmJiBsZTMyX3RvX2NwdShzc2lkLmxlbmd0aCkgPiAwKSB7Ci0JCXdycXUtPmVzc2lkLmZsYWdzID0gMTsKLQkJd3JxdS0+ZXNzaWQubGVuZ3RoID0gbGUzMl90b19jcHUoc3NpZC5sZW5ndGgpOwotCQltZW1jcHkoZXNzaWQsIHNzaWQuZXNzaWQsIHdycXUtPmVzc2lkLmxlbmd0aCk7Ci0JCWVzc2lkW3dycXUtPmVzc2lkLmxlbmd0aF0gPSAwOwotCX0gZWxzZSB7Ci0JCW1lbXNldChlc3NpZCwgMCwgc2l6ZW9mKE5ESVNfODAyXzExX0xFTkdUSF9TU0lEKSk7Ci0JCXdycXUtPmVzc2lkLmZsYWdzID0gMDsKLQkJd3JxdS0+ZXNzaWQubGVuZ3RoID0gMDsKLQl9Ci0JZGV2ZGJnKHVzYmRldiwgIlNJT0NHSVdFU1NJRDogJXMiLCBlc3NpZCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaW50IHJuZGlzX2l3X2dldF9ic3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgY2hhciBic3NpZFtFVEhfQUxFTl07Ci0JaW50IHJldDsKLQotCXJldCA9IGdldF9ic3NpZCh1c2JkZXYsIGJzc2lkKTsKLQotCWlmIChyZXQgPT0gMCkKLQkJZGV2ZGJnKHVzYmRldiwgIlNJT0NHSVdBUDogJXBNIiwgYnNzaWQpOwotCWVsc2UKLQkJZGV2ZGJnKHVzYmRldiwgIlNJT0NHSVdBUDogPG5vdCBhc3NvY2lhdGVkPiIpOwotCi0Jd3JxdS0+YXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JbWVtY3B5KHdycXUtPmFwX2FkZHIuc2FfZGF0YSwgYnNzaWQsIEVUSF9BTEVOKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19zZXRfYnNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXU4ICpic3NpZCA9ICh1OCAqKXdycXUtPmFwX2FkZHIuc2FfZGF0YTsKLQlpbnQgcmV0OwotCi0JZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdBUDogJXBNIiwgYnNzaWQpOwotCi0JcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQlNTSUQsIGJzc2lkLCBFVEhfQUxFTik7Ci0KLQkvKiB1c2VyIGFwcHMgbWF5IHNldCBhcCdzIG1hYyBhZGRyZXNzLCB3aGljaCBpcyBub3QgcmVxdWlyZWQ7Ci0JICogdGhleSBtYXkgZmFpbCB0byB3b3JrIGlmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIHNvIHJldHVybgotCSAqIHN1Y2Nlc3MgKi8KLQlpZiAocmV0KQotCQlkZXZ3YXJuKHVzYmRldiwgInNldHRpbmcgQVAgbWFjIGFkZHJlc3MgZmFpbGVkICglMDhYKSIsIHJldCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHJuZGlzX2l3X3NldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGl3X3BhcmFtICpwID0gJndycXUtPnBhcmFtOwotCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKLQlpbnQgcmV0ID0gLUVOT1RTVVBQOwotCi0Jc3dpdGNoIChwLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKLQljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046Ci0JCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXQVVUSDogV1BBX1ZFUlNJT04sICUwOHgiLCBwLT52YWx1ZSk7Ci0JCXByaXYtPndwYV92ZXJzaW9uID0gcC0+dmFsdWU7Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKLQkJZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdBVVRIOiBDSVBIRVJfUEFJUldJU0UsICUwOHgiLCBwLT52YWx1ZSk7Ci0JCXByaXYtPndwYV9jaXBoZXJfcGFpciA9IHAtPnZhbHVlOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6Ci0JCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXQVVUSDogQ0lQSEVSX0dST1VQLCAlMDh4IiwgcC0+dmFsdWUpOwotCQlwcml2LT53cGFfY2lwaGVyX2dyb3VwID0gcC0+dmFsdWU7Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX0tFWV9NR01UOgotCQlkZXZkYmcodXNiZGV2LCAiU0lPQ1NJV0FVVEg6IEtFWV9NR01ULCAlMDh4IiwgcC0+dmFsdWUpOwotCQlwcml2LT53cGFfa2V5bWdtdCA9IHAtPnZhbHVlOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoKLQkJZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdBVVRIOiBUS0lQX0NPVU5URVJNRUFTVVJFUywgJTA4eCIsCi0JCQkJCQkJCXAtPnZhbHVlKTsKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKLQkJZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdBVVRIOiBEUk9QX1VORU5DUllQVEVELCAlMDh4IiwgcC0+dmFsdWUpOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdBVVRIOiA4MDIxMV9BVVRIX0FMRywgJTA4eCIsIHAtPnZhbHVlKTsKLQkJcHJpdi0+d3BhX2F1dGhhbGcgPSBwLT52YWx1ZTsKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6Ci0JCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXQVVUSDogV1BBX0VOQUJMRUQsICUwOHgiLCBwLT52YWx1ZSk7Ci0JCWlmICh3cnF1LT5wYXJhbS52YWx1ZSkKLQkJCWRlYXV0aGVudGljYXRlKHVzYmRldik7Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgotCQlkZXZkYmcodXNiZGV2LCAiU0lPQ1NJV0FVVEg6IFJYX1VORU5DUllQVEVEX0VBUE9MLCAlMDh4IiwKLQkJCQkJCQkJcC0+dmFsdWUpOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9ST0FNSU5HX0NPTlRST0w6Ci0JCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXQVVUSDogUk9BTUlOR19DT05UUk9MLCAlMDh4IiwgcC0+dmFsdWUpOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6Ci0JCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXQVVUSDogaW52YWxpZCBjbWQgJWQiLAotCQkJCXdycXUtPnBhcmFtLmZsYWdzICYgSVdfQVVUSF9JTkRFWCk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWRlZmF1bHQ6Ci0JCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXQVVUSDogVU5LTk9XTiAgJTA4eCwgJTA4eCIsCi0JCQlwLT5mbGFncyAmIElXX0FVVEhfSU5ERVgsIHAtPnZhbHVlKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaW50IHJuZGlzX2l3X2dldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGl3X3BhcmFtICpwID0gJndycXUtPnBhcmFtOwotCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKLQotCXN3aXRjaCAocC0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0JY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgotCQlwLT52YWx1ZSA9IHByaXYtPndwYV92ZXJzaW9uOwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgotCQlwLT52YWx1ZSA9IHByaXYtPndwYV9jaXBoZXJfcGFpcjsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKLQkJcC0+dmFsdWUgPSBwcml2LT53cGFfY2lwaGVyX2dyb3VwOwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfS0VZX01HTVQ6Ci0JCXAtPnZhbHVlID0gcHJpdi0+d3BhX2tleW1nbXQ7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJcC0+dmFsdWUgPSBwcml2LT53cGFfYXV0aGFsZzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2ZGJnKHVzYmRldiwgIlNJT0NHSVdBVVRIOiBpbnZhbGlkIGNtZCAlZCIsCi0JCQkJd3JxdS0+cGFyYW0uZmxhZ3MgJiBJV19BVVRIX0lOREVYKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHJuZGlzX2l3X3NldF9lbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7Ci0JaW50IHJldCwgaW5kZXgsIGtleV9sZW47Ci0JdTggKmtleTsKLQotCWluZGV4ID0gKHdycXUtPmVuY29kaW5nLmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKTsKLQotCS8qIGl3Y29uZmlnIGdpdmVzIGluZGV4IGFzIDEgLSBOICovCi0JaWYgKGluZGV4ID4gMCkKLQkJaW5kZXgtLTsKLQllbHNlCi0JCWluZGV4ID0gcHJpdi0+ZW5jcl90eF9rZXlfaW5kZXg7Ci0KLQlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IDQpIHsKLQkJZGV2d2Fybih1c2JkZXYsICJlbmNyeXB0aW9uIGluZGV4IG91dCBvZiByYW5nZSAoJXUpIiwgaW5kZXgpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc21lLT5jcnlwdG8ubl9jaXBoZXJzX3BhaXJ3aXNlID4gMCAmJgorCQkJcGFpcndpc2UgPT0gUk5ESVNfV0xBTl9BTEdfTk9ORSkgeworCQlkZXZlcnIodXNiZGV2LCAiVW5zdXBwb3J0ZWQgcGFpcndpc2UgY2lwaGVyIik7CisJCXJldHVybiAtRU5PVFNVUFA7CiAJfQogCi0JLyogcmVtb3ZlIGtleSBpZiBkaXNhYmxlZCAqLwotCWlmICh3cnF1LT5kYXRhLmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSB7Ci0JCWlmIChyZW1vdmVfa2V5KHVzYmRldiwgaW5kZXgsIE5VTEwpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWVsc2UKLQkJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBzbWUtPmNyeXB0by5uX2FrbV9zdWl0ZXM7IGkrKykKKwkJa2V5bWdtdCB8PQorCQkJcm5kaXNfYWttX3N1aXRlX3RvX2tleV9tZ210KHNtZS0+Y3J5cHRvLmFrbV9zdWl0ZXNbaV0pOworCisJaWYgKHNtZS0+Y3J5cHRvLm5fYWttX3N1aXRlcyA+IDAgJiYKKwkJCWtleW1nbXQgPT0gUk5ESVNfV0xBTl9LRVlfTUdNVF9OT05FKSB7CisJCWRldmVycih1c2JkZXYsICJJbnZhbGlkIGtleW1nbXQiKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKIAl9CiAKLQkvKiBnbG9iYWwgZW5jcnlwdGlvbiBzdGF0ZSAoZm9yIGFsbCBrZXlzKSAqLwotCWlmICh3cnF1LT5kYXRhLmZsYWdzICYgSVdfRU5DT0RFX09QRU4pCi0JCXJldCA9IHNldF9hdXRoX21vZGUodXNiZGV2LCBJV19BVVRIX1dQQV9WRVJTSU9OX0RJU0FCTEVELAotCQkJCQkJSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pOwotCWVsc2UgLyppZiAod3JxdS0+ZGF0YS5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKSovCi0JCXJldCA9IHNldF9hdXRoX21vZGUodXNiZGV2LCBJV19BVVRIX1dQQV9WRVJTSU9OX0RJU0FCTEVELAotCQkJCQkJSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSk7Ci0JaWYgKHJldCAhPSAwKQotCQlyZXR1cm4gcmV0OworCWRldmRiZyh1c2JkZXYsICJjZmc4MDIxMS5jb25uZWN0KCclLjMycyc6WyVwTV06JWQ6WyVkLDB4JXg6MHgleF06WzB4JXg6IgorCQkJIjB4JXhdOjB4JXgpIiwgc21lLT5zc2lkLCBzbWUtPmJzc2lkLCBjaGFuLAorCQkJc21lLT5wcml2YWN5LCBzbWUtPmNyeXB0by53cGFfdmVyc2lvbnMsIHNtZS0+YXV0aF90eXBlLAorCQkJZ3JvdXB3aXNlLCBwYWlyd2lzZSwga2V5bWdtdCk7CiAKLQlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPiAwKSB7Ci0JCWtleV9sZW4gPSB3cnF1LT5kYXRhLmxlbmd0aDsKLQkJa2V5ID0gZXh0cmE7Ci0JfSBlbHNlIHsKLQkJLyogbXVzdCBiZSBzZXQgYXMgdHgga2V5ICovCi0JCWlmIChwcml2LT5lbmNyX2tleV9sZW5baW5kZXhdID09IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJa2V5X2xlbiA9IHByaXYtPmVuY3Jfa2V5X2xlbltpbmRleF07Ci0JCWtleSA9IHByaXYtPmVuY3Jfa2V5c1tpbmRleF07Ci0JCXByaXYtPmVuY3JfdHhfa2V5X2luZGV4ID0gaW5kZXg7Ci0JfQotCi0JaWYgKGFkZF93ZXBfa2V5KHVzYmRldiwga2V5LCBrZXlfbGVuLCBpbmRleCkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoaW5kZXggPT0gcHJpdi0+ZW5jcl90eF9rZXlfaW5kZXgpCi0JCS8qIG5kaXMgZHJpdmVycyB3YW50IGVzc2lkIHRvIGJlIHNldCBhZnRlciBzZXR0aW5nIGVuY3IgKi8KLQkJc2V0X2Vzc2lkKHVzYmRldiwgJnByaXYtPmVzc2lkKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgcm5kaXNfaXdfc2V0X2VuY29kZV9leHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0Jc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwotCWludCBrZXlpZHgsIGZsYWdzOwotCi0Ja2V5aWR4ID0gd3JxdS0+ZW5jb2RpbmcuZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7Ci0KLQkvKiBpd2NvbmZpZyBnaXZlcyBpbmRleCBhcyAxIC0gTiAqLwotCWlmIChrZXlpZHgpCi0JCWtleWlkeC0tOwotCWVsc2UKLQkJa2V5aWR4ID0gcHJpdi0+ZW5jcl90eF9rZXlfaW5kZXg7Ci0KLQlpZiAoa2V5aWR4IDwgMCB8fCBrZXlpZHggPj0gNCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZXh0LT5hbGcgPT0gV1BBX0FMR19XRVApIHsKLQkJaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKQotCQkJcHJpdi0+ZW5jcl90eF9rZXlfaW5kZXggPSBrZXlpZHg7Ci0JCXJldHVybiBhZGRfd2VwX2tleSh1c2JkZXYsIGV4dC0+a2V5LCBleHQtPmtleV9sZW4sIGtleWlkeCk7Ci0JfQotCi0JaWYgKCh3cnF1LT5lbmNvZGluZy5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkgfHwKLQkgICAgZXh0LT5hbGcgPT0gSVdfRU5DT0RFX0FMR19OT05FIHx8IGV4dC0+a2V5X2xlbiA9PSAwKQotCQlyZXR1cm4gcmVtb3ZlX2tleSh1c2JkZXYsIGtleWlkeCwgTlVMTCk7Ci0KLQlmbGFncyA9IDA7Ci0JaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9SWF9TRVFfVkFMSUQpCi0JCWZsYWdzIHw9IE5ESVNfODAyMTFfQURES0VZX1NFVF9JTklUX1JFQ1ZfU0VROwotCWlmICghKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkpKQotCQlmbGFncyB8PSBORElTXzgwMjExX0FEREtFWV9QQUlSV0lTRV9LRVk7Ci0JaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKQotCQlmbGFncyB8PSBORElTXzgwMjExX0FEREtFWV9UUkFOU01JVF9LRVk7Ci0KLQlyZXR1cm4gYWRkX3dwYV9rZXkodXNiZGV2LCBleHQtPmtleSwgZXh0LT5rZXlfbGVuLCBrZXlpZHgsICZleHQtPmFkZHIsCi0JCQkJZXh0LT5yeF9zZXEsIGV4dC0+YWxnLCBmbGFncyk7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19zZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7Ci0JaW50IHJldCA9IDA7Ci0KLSNpZmRlZiBERUJVRwotCWludCBqOwotCXU4ICpnaWUgPSBleHRyYTsKLQlmb3IgKGogPSAwOyBqIDwgd3JxdS0+ZGF0YS5sZW5ndGg7IGogKz0gOCkKLQkJZGV2ZGJnKHVzYmRldiwKLQkJCSJTSU9DU0lXR0VOSUUgJTA0eCAtICIKLQkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiLCBqLAotCQkJZ2llW2ogKyAwXSwgZ2llW2ogKyAxXSwgZ2llW2ogKyAyXSwgZ2llW2ogKyAzXSwKLQkJCWdpZVtqICsgNF0sIGdpZVtqICsgNV0sIGdpZVtqICsgNl0sIGdpZVtqICsgN10pOwotI2VuZGlmCi0JLyogY2xlYXIgZXhpc3RpbmcgSUVzICovCi0JaWYgKHByaXYtPndwYV9pZV9sZW4pIHsKLQkJa2ZyZWUocHJpdi0+d3BhX2llKTsKLQkJcHJpdi0+d3BhX2llX2xlbiA9IDA7Ci0JfQotCi0JLyogc2V0IG5ldyBJRXMgKi8KLQlwcml2LT53cGFfaWUgPSBrbWFsbG9jKHdycXUtPmRhdGEubGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQlpZiAocHJpdi0+d3BhX2llKSB7Ci0JCXByaXYtPndwYV9pZV9sZW4gPSB3cnF1LT5kYXRhLmxlbmd0aDsKLQkJbWVtY3B5KHByaXYtPndwYV9pZSwgZXh0cmEsIHByaXYtPndwYV9pZV9sZW4pOwotCX0gZWxzZQotCQlyZXQgPSAtRU5PTUVNOwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19nZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7Ci0KLQlkZXZkYmcodXNiZGV2LCAiU0lPQ0dJV0dFTklFIik7Ci0KLQlpZiAocHJpdi0+d3BhX2llX2xlbiA9PSAwIHx8IHByaXYtPndwYV9pZSA9PSBOVUxMKSB7Ci0JCXdycXUtPmRhdGEubGVuZ3RoID0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHdycXUtPmRhdGEubGVuZ3RoIDwgcHJpdi0+d3BhX2llX2xlbikKLQkJcmV0dXJuIC1FMkJJRzsKLQotCXdycXUtPmRhdGEubGVuZ3RoID0gcHJpdi0+d3BhX2llX2xlbjsKLQltZW1jcHkoZXh0cmEsIHByaXYtPndwYV9pZSwgcHJpdi0+d3BhX2llX2xlbik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHJuZGlzX2l3X3NldF9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCV9fbGUzMiB0bXA7Ci0JZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdSVFMiKTsKLQotCXRtcCA9IGNwdV90b19sZTMyKHdycXUtPnJ0cy52YWx1ZSk7Ci0JcmV0dXJuIHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX1JUU19USFJFU0hPTEQsICZ0bXAsCi0JCQkJCQkJCXNpemVvZih0bXApKTsKLX0KLQotCi1zdGF0aWMgaW50IHJuZGlzX2l3X2dldF9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCV9fbGUzMiB0bXA7Ci0JaW50IGxlbiwgcmV0OwotCi0JbGVuID0gc2l6ZW9mKHRtcCk7Ci0JcmV0ID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xELCAmdG1wLCAmbGVuKTsKLQlpZiAocmV0ID09IDApIHsKLQkJd3JxdS0+cnRzLnZhbHVlID0gbGUzMl90b19jcHUodG1wKTsKLQkJd3JxdS0+cnRzLmZsYWdzID0gMTsKLQkJd3JxdS0+cnRzLmRpc2FibGVkID0gMDsKLQl9Ci0KLQlkZXZkYmcodXNiZGV2LCAiU0lPQ0dJV1JUUzogJWQiLCB3cnF1LT5ydHMudmFsdWUpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaW50IHJuZGlzX2l3X3NldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlfX2xlMzIgdG1wOwotCi0JZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdGUkFHIik7Ci0KLQl0bXAgPSBjcHVfdG9fbGUzMih3cnF1LT5mcmFnLnZhbHVlKTsKLQlyZXR1cm4gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQsICZ0bXAsCi0JCQkJCQkJCXNpemVvZih0bXApKTsKLX0KLQotCi1zdGF0aWMgaW50IHJuZGlzX2l3X2dldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlfX2xlMzIgdG1wOwotCWludCBsZW4sIHJldDsKLQotCWxlbiA9IHNpemVvZih0bXApOwotCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQsICZ0bXAsCi0JCQkJCQkJCQkmbGVuKTsKLQlpZiAocmV0ID09IDApIHsKLQkJd3JxdS0+ZnJhZy52YWx1ZSA9IGxlMzJfdG9fY3B1KHRtcCk7Ci0JCXdycXUtPmZyYWcuZmxhZ3MgPSAxOwotCQl3cnF1LT5mcmFnLmRpc2FibGVkID0gMDsKLQl9Ci0JZGV2ZGJnKHVzYmRldiwgIlNJT0NHSVdGUkFHOiAlZCIsIHdycXUtPmZyYWcudmFsdWUpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19zZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5kaXNfODAyMTFfY29uZiBjb25maWc7Ci0JdW5zaWduZWQgaW50IGRzY29uZmlnOwotCWludCBsZW4sIHJldDsKLQotCS8qIHRoaXMgT0lEIGlzIHZhbGlkIG9ubHkgd2hlbiBub3QgYXNzb2NpYXRlZCAqLwogCWlmIChpc19hc3NvY2lhdGVkKHVzYmRldikpCi0JCXJldHVybiAwOworCQlkaXNhc3NvY2lhdGUodXNiZGV2LCBmYWxzZSk7CiAKLQlkc2NvbmZpZyA9IDA7Ci0JaWYgKGZyZXFfdG9fZHNjb25maWcoJndycXUtPmZyZXEsICZkc2NvbmZpZykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbGVuID0gc2l6ZW9mKGNvbmZpZyk7Ci0JcmV0ID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OLCAmY29uZmlnLCAmbGVuKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdGUkVROiBxdWVyeWluZyBjb25maWd1cmF0aW9uIGZhaWxlZCIpOwotCQlyZXR1cm4gMDsKKwlyZXQgPSBzZXRfaW5mcmFfbW9kZSh1c2JkZXYsIE5ESVNfODAyMTFfSU5GUkFfSU5GUkEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldmRiZyh1c2JkZXYsICJjb25uZWN0OiBzZXRfaW5mcmFfbW9kZSBmYWlsZWQsICVkIiwgcmV0KTsKKwkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKIAl9CiAKLQljb25maWcuZHNfY29uZmlnID0gY3B1X3RvX2xlMzIoZHNjb25maWcpOwotCi0JZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdGUkVROiAlZCAqIDEwXiVkIiwgd3JxdS0+ZnJlcS5tLCB3cnF1LT5mcmVxLmUpOwotCXJldHVybiBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OLCAmY29uZmlnLAotCQkJCQkJCQlzaXplb2YoY29uZmlnKSk7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19nZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5kaXNfODAyMTFfY29uZiBjb25maWc7Ci0JaW50IGxlbiwgcmV0OwotCi0JbGVuID0gc2l6ZW9mKGNvbmZpZyk7Ci0JcmV0ID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OLCAmY29uZmlnLCAmbGVuKTsKLQlpZiAocmV0ID09IDApCi0JCWRzY29uZmlnX3RvX2ZyZXEobGUzMl90b19jcHUoY29uZmlnLmRzX2NvbmZpZyksICZ3cnF1LT5mcmVxKTsKLQotCWRldmRiZyh1c2JkZXYsICJTSU9DR0lXRlJFUTogJWQiLCB3cnF1LT5mcmVxLm0pOwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19nZXRfdHhwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKLQlfX2xlMzIgdHhfcG93ZXI7Ci0KLQlpZiAocHJpdi0+cmFkaW9fb24pIHsKLQkJLyogZmFrZSBzaW5jZSBjaGFuZ2luZyB0eF9wb3dlciAoYnkgdXNlcmxldmVsKSBub3Qgc3VwcG9ydGVkICovCi0JCXR4X3Bvd2VyID0gY3B1X3RvX2xlMzIoZ2V0X2JjbTQzMjBfcG93ZXIocHJpdikpOwotCi0JCXdycXUtPnR4cG93ZXIuZmxhZ3MgPSBJV19UWFBPV19NV0FUVDsKLQkJd3JxdS0+dHhwb3dlci52YWx1ZSA9IGxlMzJfdG9fY3B1KHR4X3Bvd2VyKTsKLQkJd3JxdS0+dHhwb3dlci5kaXNhYmxlZCA9IDA7Ci0JfSBlbHNlIHsKLQkJd3JxdS0+dHhwb3dlci5mbGFncyA9IElXX1RYUE9XX01XQVRUOwotCQl3cnF1LT50eHBvd2VyLnZhbHVlID0gMDsKLQkJd3JxdS0+dHhwb3dlci5kaXNhYmxlZCA9IDE7CisJcmV0ID0gc2V0X2F1dGhfbW9kZSh1c2JkZXYsIHNtZS0+Y3J5cHRvLndwYV92ZXJzaW9ucywgc21lLT5hdXRoX3R5cGUsCisJCQkJCQkJCWtleW1nbXQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldmRiZyh1c2JkZXYsICJjb25uZWN0OiBzZXRfYXV0aF9tb2RlIGZhaWxlZCwgJWQiLCByZXQpOworCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOwogCX0KIAotCWRldmRiZyh1c2JkZXYsICJTSU9DR0lXVFhQT1c6ICVkIiwgd3JxdS0+dHhwb3dlci52YWx1ZSk7CisJc2V0X3ByaXZfZmlsdGVyKHVzYmRldik7CiAKLQlyZXR1cm4gMDsKLX0KKwlyZXQgPSBzZXRfZW5jcl9tb2RlKHVzYmRldiwgcGFpcndpc2UsIGdyb3Vwd2lzZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2ZGJnKHVzYmRldiwgImNvbm5lY3Q6IHNldF9lbmNyX21vZGUgZmFpbGVkLCAlZCIsIHJldCk7CisJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CisJfQogCi0KLXN0YXRpYyBpbnQgcm5kaXNfaXdfc2V0X3R4cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7Ci0JX19sZTMyIHR4X3Bvd2VyID0gMDsKLQotCWlmICghd3JxdS0+dHhwb3dlci5kaXNhYmxlZCkgewotCQlpZiAod3JxdS0+dHhwb3dlci5mbGFncyA9PSBJV19UWFBPV19NV0FUVCkKLQkJCXR4X3Bvd2VyID0gY3B1X3RvX2xlMzIod3JxdS0+dHhwb3dlci52YWx1ZSk7Ci0JCWVsc2UgeyAvKiB3cnF1LT50eHBvd2VyLmZsYWdzID09IElXX1RYUE9XX0RCTSAqLwotCQkJaWYgKHdycXUtPnR4cG93ZXIudmFsdWUgPiAyMCkKLQkJCQl0eF9wb3dlciA9IGNwdV90b19sZTMyKDEyOCk7Ci0JCQllbHNlIGlmICh3cnF1LT50eHBvd2VyLnZhbHVlIDwgLTQzKQotCQkJCXR4X3Bvd2VyID0gY3B1X3RvX2xlMzIoMTI3KTsKLQkJCWVsc2UgewotCQkJCXNpZ25lZCBjaGFyIHRtcDsKLQkJCQl0bXAgPSB3cnF1LT50eHBvd2VyLnZhbHVlOwotCQkJCXRtcCA9IC0xMiAtIHRtcDsKLQkJCQl0bXAgPDw9IDI7Ci0JCQkJdHhfcG93ZXIgPSBjcHVfdG9fbGUzMigodW5zaWduZWQgY2hhcil0bXApOwotCQkJfQorCWlmIChjaGFubmVsKSB7CisJCXJldCA9IHNldF9jaGFubmVsKHVzYmRldiwgY2hhbik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZkYmcodXNiZGV2LCAiY29ubmVjdDogc2V0X2NoYW5uZWwgZmFpbGVkLCAlZCIsIHJldCk7CisJCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOwogCQl9CiAJfQogCi0JZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdUWFBPVzogJWQiLCBsZTMyX3RvX2NwdSh0eF9wb3dlcikpOwotCi0JaWYgKGxlMzJfdG9fY3B1KHR4X3Bvd2VyKSAhPSAwKSB7Ci0JCS8qIHR4cG93ZXIgdW5zdXBwb3J0ZWQsIGp1c3QgdHVybiByYWRpbyBvbiAqLwotCQlpZiAoIXByaXYtPnJhZGlvX29uKQotCQkJcmV0dXJuIGRpc2Fzc29jaWF0ZSh1c2JkZXYsIDEpOwotCQlyZXR1cm4gMDsgLyogYWxsIHJlYWR5IG9uICovCisJaWYgKHNtZS0+a2V5ICYmICgoZ3JvdXB3aXNlIHwgcGFpcndpc2UpICYgUk5ESVNfV0xBTl9BTEdfV0VQKSkgeworCQlwcml2LT5lbmNyX3R4X2tleV9pbmRleCA9IHNtZS0+a2V5X2lkeDsKKwkJcmV0ID0gYWRkX3dlcF9rZXkodXNiZGV2LCBzbWUtPmtleSwgc21lLT5rZXlfbGVuLCBzbWUtPmtleV9pZHgpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2ZGJnKHVzYmRldiwgImNvbm5lY3Q6IGFkZF93ZXBfa2V5IGZhaWxlZCwgJWQgIgorCQkJCSIoJWQsICVkKSIsIHJldCwgc21lLT5rZXlfbGVuLCBzbWUtPmtleV9pZHgpOworCQkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKKwkJfQogCX0KIAotCS8qIHR4X3Bvd2VyID09IDAsIHR1cm4gb2ZmIHJhZGlvICovCi0JcmV0dXJuIGRpc2Fzc29jaWF0ZSh1c2JkZXYsIDApOwotfQorCWlmIChzbWUtPmJzc2lkICYmICFpc196ZXJvX2V0aGVyX2FkZHIoc21lLT5ic3NpZCkgJiYKKwkJCQkhaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoc21lLT5ic3NpZCkpIHsKKwkJcmV0ID0gc2V0X2Jzc2lkKHVzYmRldiwgc21lLT5ic3NpZCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZkYmcodXNiZGV2LCAiY29ubmVjdDogc2V0X2Jzc2lkIGZhaWxlZCwgJWQiLCByZXQpOworCQkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKKwkJfQorCX0gZWxzZQorCQljbGVhcl9ic3NpZCh1c2JkZXYpOwogCisJbGVuZ3RoID0gc21lLT5zc2lkX2xlbjsKKwlpZiAobGVuZ3RoID4gTkRJU184MDJfMTFfTEVOR1RIX1NTSUQpCisJCWxlbmd0aCA9IE5ESVNfODAyXzExX0xFTkdUSF9TU0lEOwogCi1zdGF0aWMgaW50IHJuZGlzX2l3X2dldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlfX2xlMzIgdG1wOwotCWludCByZXQsIGxlbjsKKwltZW1zZXQoJnNzaWQsIDAsIHNpemVvZihzc2lkKSk7CisJc3NpZC5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpOworCW1lbWNweShzc2lkLmVzc2lkLCBzbWUtPnNzaWQsIGxlbmd0aCk7CiAKLQlsZW4gPSBzaXplb2YodG1wKTsKLQlyZXQgPSBybmRpc19xdWVyeV9vaWQodXNiZGV2LCBPSURfR0VOX0xJTktfU1BFRUQsICZ0bXAsICZsZW4pOwotCWlmIChyZXQgPT0gMCkgewotCQl3cnF1LT5iaXRyYXRlLnZhbHVlID0gbGUzMl90b19jcHUodG1wKSAqIDEwMDsKLQkJd3JxdS0+Yml0cmF0ZS5kaXNhYmxlZCA9IDA7Ci0JCXdycXUtPmJpdHJhdGUuZmxhZ3MgPSAxOwotCX0KKwkvKiBQYXVzZSBhbmQgcHVyZ2UgcnggcXVldWUsIHNvIHdlIGRvbid0IHBhc3MgcGFja2V0cyBiZWZvcmUKKwkgKiAnbWVkaWEgY29ubmVjdCctaW5kaWNhdGlvbi4KKwkgKi8KKwl1c2JuZXRfcGF1c2VfcngodXNiZGV2KTsKKwl1c2JuZXRfcHVyZ2VfcGF1c2VkX3J4cSh1c2JkZXYpOworCisJcmV0ID0gc2V0X2Vzc2lkKHVzYmRldiwgJnNzaWQpOworCWlmIChyZXQgPCAwKQorCQlkZXZkYmcodXNiZGV2LCAiY29ubmVjdDogc2V0X2Vzc2lkIGZhaWxlZCwgJWQiLCByZXQpOworCXJldHVybiByZXQ7CisKK2Vycl90dXJuX3JhZGlvX29uOgorCWRpc2Fzc29jaWF0ZSh1c2JkZXYsIHRydWUpOworCiAJcmV0dXJuIHJldDsKIH0KIAotCi1zdGF0aWMgaW50IHJuZGlzX2l3X3NldF9tbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCitzdGF0aWMgaW50IHJuZGlzX2Rpc2Nvbm5lY3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCQkJdTE2IHJlYXNvbl9jb2RlKQogewotCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKLQlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKWV4dHJhOwotCXVuc2lnbmVkIGNoYXIgYnNzaWRbRVRIX0FMRU5dOworCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CiAKLQlnZXRfYnNzaWQodXNiZGV2LCBic3NpZCk7CisJZGV2ZGJnKHVzYmRldiwgImNmZzgwMjExLmRpc2Nvbm5lY3QoJWQpIiwgcmVhc29uX2NvZGUpOwogCi0JaWYgKG1lbWNtcChic3NpZCwgbWxtZS0+YWRkci5zYV9kYXRhLCBFVEhfQUxFTikpCi0JCXJldHVybiAtRUlOVkFMOworCXByaXYtPmNvbm5lY3RlZCA9IGZhbHNlOworCW1lbXNldChwcml2LT5ic3NpZCwgMCwgRVRIX0FMRU4pOwogCi0Jc3dpdGNoIChtbG1lLT5jbWQpIHsKLQljYXNlIElXX01MTUVfREVBVVRIOgotCQlyZXR1cm4gZGVhdXRoZW50aWNhdGUodXNiZGV2KTsKLQljYXNlIElXX01MTUVfRElTQVNTT0M6Ci0JCXJldHVybiBkaXNhc3NvY2lhdGUodXNiZGV2LCBwcml2LT5yYWRpb19vbik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCXJldHVybiBkZWF1dGhlbnRpY2F0ZSh1c2JkZXYpOworfQorCitzdGF0aWMgaW50IHJuZGlzX2pvaW5faWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IHBhcmFtcy0+Y2hhbm5lbDsKKwlzdHJ1Y3QgbmRpc184MDIxMV9zc2lkIHNzaWQ7CisJZW51bSBubDgwMjExX2F1dGhfdHlwZSBhdXRoX3R5cGU7CisJaW50IHJldCwgYWxnLCBsZW5ndGgsIGNoYW4gPSAtMTsKKworCWlmIChjaGFubmVsKQorCQljaGFuID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKworCS8qIFRPRE86IEhvdyB0byBoYW5kbGUgYWQtaG9jIGVuY3J5cHRpb24/CisJICogY29ubmVjdCgpIGhhcyAqa2V5LCBqb2luX2lic3MoKSBkb2Vzbid0LiBSTkRJUyByZXF1aXJlcyBrZXkgdG8gYmUKKwkgKiBwcmUtc2hhcmVkIGZvciBlbmNyeXB0aW9uIChvcGVuL3NoYXJlZC93cGEpLCBpcyBrZXkgc2V0IGJlZm9yZQorCSAqIGpvaW5faWJzcz8gV2hpY2ggYXV0aF90eXBlIHRvIHVzZSAobm90IGluIHBhcmFtcyk/IFdoYXQgYWJvdXQgV1BBPworCSAqLworCWlmIChwYXJhbXMtPnByaXZhY3kpIHsKKwkJYXV0aF90eXBlID0gTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZOworCQlhbGcgPSBSTkRJU19XTEFOX0FMR19XRVA7CisJfSBlbHNlIHsKKwkJYXV0aF90eXBlID0gTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTTsKKwkJYWxnID0gUk5ESVNfV0xBTl9BTEdfTk9ORTsKIAl9CiAKKwlkZXZkYmcodXNiZGV2LCAiY2ZnODAyMTEuam9pbl9pYnNzKCclLjMycyc6WyVwTV06JWQ6JWQpIiwgcGFyYW1zLT5zc2lkLAorCQkJCQlwYXJhbXMtPmJzc2lkLCBjaGFuLCBwYXJhbXMtPnByaXZhY3kpOworCisJaWYgKGlzX2Fzc29jaWF0ZWQodXNiZGV2KSkKKwkJZGlzYXNzb2NpYXRlKHVzYmRldiwgZmFsc2UpOworCisJcmV0ID0gc2V0X2luZnJhX21vZGUodXNiZGV2LCBORElTXzgwMjExX0lORlJBX0FESE9DKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZkYmcodXNiZGV2LCAiam9pbl9pYnNzOiBzZXRfaW5mcmFfbW9kZSBmYWlsZWQsICVkIiwgcmV0KTsKKwkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKKwl9CisKKwlyZXQgPSBzZXRfYXV0aF9tb2RlKHVzYmRldiwgMCwgYXV0aF90eXBlLCBSTkRJU19XTEFOX0tFWV9NR01UX05PTkUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldmRiZyh1c2JkZXYsICJqb2luX2lic3M6IHNldF9hdXRoX21vZGUgZmFpbGVkLCAlZCIsIHJldCk7CisJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CisJfQorCisJc2V0X3ByaXZfZmlsdGVyKHVzYmRldik7CisKKwlyZXQgPSBzZXRfZW5jcl9tb2RlKHVzYmRldiwgYWxnLCBSTkRJU19XTEFOX0FMR19OT05FKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZkYmcodXNiZGV2LCAiam9pbl9pYnNzOiBzZXRfZW5jcl9tb2RlIGZhaWxlZCwgJWQiLCByZXQpOworCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOworCX0KKworCWlmIChjaGFubmVsKSB7CisJCXJldCA9IHNldF9jaGFubmVsKHVzYmRldiwgY2hhbik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZkYmcodXNiZGV2LCAiam9pbl9pYnNzOiBzZXRfY2hhbm5lbCBmYWlsZWQsICVkIiwKKwkJCQlyZXQpOworCQkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKKwkJfQorCX0KKworCWlmIChwYXJhbXMtPmJzc2lkICYmICFpc196ZXJvX2V0aGVyX2FkZHIocGFyYW1zLT5ic3NpZCkgJiYKKwkJCQkhaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIocGFyYW1zLT5ic3NpZCkpIHsKKwkJcmV0ID0gc2V0X2Jzc2lkKHVzYmRldiwgcGFyYW1zLT5ic3NpZCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZkYmcodXNiZGV2LCAiam9pbl9pYnNzOiBzZXRfYnNzaWQgZmFpbGVkLCAlZCIsIHJldCk7CisJCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOworCQl9CisJfSBlbHNlCisJCWNsZWFyX2Jzc2lkKHVzYmRldik7CisKKwlsZW5ndGggPSBwYXJhbXMtPnNzaWRfbGVuOworCWlmIChsZW5ndGggPiBORElTXzgwMl8xMV9MRU5HVEhfU1NJRCkKKwkJbGVuZ3RoID0gTkRJU184MDJfMTFfTEVOR1RIX1NTSUQ7CisKKwltZW1zZXQoJnNzaWQsIDAsIHNpemVvZihzc2lkKSk7CisJc3NpZC5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpOworCW1lbWNweShzc2lkLmVzc2lkLCBwYXJhbXMtPnNzaWQsIGxlbmd0aCk7CisKKwkvKiBEb24ndCBuZWVkIHRvIHBhdXNlIHJ4IHF1ZXVlIGZvciBhZC1ob2MuICovCisJdXNibmV0X3B1cmdlX3BhdXNlZF9yeHEodXNiZGV2KTsKKwl1c2JuZXRfcmVzdW1lX3J4KHVzYmRldik7CisKKwlyZXQgPSBzZXRfZXNzaWQodXNiZGV2LCAmc3NpZCk7CisJaWYgKHJldCA8IDApCisJCWRldmRiZyh1c2JkZXYsICJqb2luX2lic3M6IHNldF9lc3NpZCBmYWlsZWQsICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitlcnJfdHVybl9yYWRpb19vbjoKKwlkaXNhc3NvY2lhdGUodXNiZGV2LCB0cnVlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcm5kaXNfbGVhdmVfaWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CisKKwlkZXZkYmcodXNiZGV2LCAiY2ZnODAyMTEubGVhdmVfaWJzcygpIik7CisKKwlwcml2LT5jb25uZWN0ZWQgPSBmYWxzZTsKKwltZW1zZXQocHJpdi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKworCXJldHVybiBkZWF1dGhlbnRpY2F0ZSh1c2JkZXYpOworfQorCitzdGF0aWMgaW50IHJuZGlzX3NldF9jaGFubmVsKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLCBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSkKK3sKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCisJcmV0dXJuIHNldF9jaGFubmVsKHVzYmRldiwKKwkJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaGFuLT5jZW50ZXJfZnJlcSkpOworfQorCitzdGF0aWMgaW50IHJuZGlzX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkJdTgga2V5X2luZGV4LCBjb25zdCB1OCAqbWFjX2FkZHIsCisJCQkJCXN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKwlfX2xlMzIgZmxhZ3M7CisKKwlkZXZkYmcodXNiZGV2LCAicm5kaXNfYWRkX2tleSglaSwgJXBNLCAlMDh4KSIsIGtleV9pbmRleCwgbWFjX2FkZHIsCisJCQkJCQkJcGFyYW1zLT5jaXBoZXIpOworCisJc3dpdGNoIChwYXJhbXMtPmNpcGhlcikgeworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CisJCXJldHVybiBhZGRfd2VwX2tleSh1c2JkZXYsIHBhcmFtcy0+a2V5LCBwYXJhbXMtPmtleV9sZW4sCisJCQkJCQkJCWtleV9pbmRleCk7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKKwkJZmxhZ3MgPSAwOworCisJCWlmIChwYXJhbXMtPnNlcSAmJiBwYXJhbXMtPnNlcV9sZW4gPiAwKQorCQkJZmxhZ3MgfD0gTkRJU184MDIxMV9BRERLRVlfU0VUX0lOSVRfUkVDVl9TRVE7CisJCWlmIChtYWNfYWRkcikKKwkJCWZsYWdzIHw9IE5ESVNfODAyMTFfQURES0VZX1BBSVJXSVNFX0tFWSB8CisJCQkJCU5ESVNfODAyMTFfQURES0VZX1RSQU5TTUlUX0tFWTsKKworCQlyZXR1cm4gYWRkX3dwYV9rZXkodXNiZGV2LCBwYXJhbXMtPmtleSwgcGFyYW1zLT5rZXlfbGVuLAorCQkJCWtleV9pbmRleCwgbWFjX2FkZHIsIHBhcmFtcy0+c2VxLAorCQkJCXBhcmFtcy0+c2VxX2xlbiwgcGFyYW1zLT5jaXBoZXIsIGZsYWdzKTsKKwlkZWZhdWx0OgorCQlkZXZkYmcodXNiZGV2LCAicm5kaXNfYWRkX2tleTogdW5zdXBwb3J0ZWQgY2lwaGVyICUwOHgiLAorCQkJCQkJCXBhcmFtcy0+Y2lwaGVyKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcm5kaXNfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCQl1OCBrZXlfaW5kZXgsIGNvbnN0IHU4ICptYWNfYWRkcikKK3sKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCisJZGV2ZGJnKHVzYmRldiwgInJuZGlzX2RlbF9rZXkoJWksICVwTSkiLCBrZXlfaW5kZXgsIG1hY19hZGRyKTsKKworCXJldHVybiByZW1vdmVfa2V5KHVzYmRldiwga2V5X2luZGV4LCBtYWNfYWRkcik7Cit9CisKK3N0YXRpYyBpbnQgcm5kaXNfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJCQkJCXU4IGtleV9pbmRleCkKK3sKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCXN0cnVjdCBybmRpc193bGFuX2VuY3Jfa2V5IGtleTsKKworCWRldmRiZyh1c2JkZXYsICJybmRpc19zZXRfZGVmYXVsdF9rZXkoJWkpIiwga2V5X2luZGV4KTsKKworCXByaXYtPmVuY3JfdHhfa2V5X2luZGV4ID0ga2V5X2luZGV4OworCisJa2V5ID0gcHJpdi0+ZW5jcl9rZXlzW2tleV9pbmRleF07CisKKwlyZXR1cm4gYWRkX3dlcF9rZXkodXNiZGV2LCBrZXkubWF0ZXJpYWwsIGtleS5sZW4sIGtleV9pbmRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHJuZGlzX2ZpbGxfc3RhdGlvbl9pbmZvKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwKKwkJCQkJCXN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQoreworCV9fbGUzMiBsaW5rc3BlZWQsIHJzc2k7CisJaW50IHJldCwgbGVuOworCisJbWVtc2V0KHNpbmZvLCAwLCBzaXplb2YoKnNpbmZvKSk7CisKKwlsZW4gPSBzaXplb2YobGlua3NwZWVkKTsKKwlyZXQgPSBybmRpc19xdWVyeV9vaWQodXNiZGV2LCBPSURfR0VOX0xJTktfU1BFRUQsICZsaW5rc3BlZWQsICZsZW4pOworCWlmIChyZXQgPT0gMCkgeworCQlzaW5mby0+dHhyYXRlLmxlZ2FjeSA9IGxlMzJfdG9fY3B1KGxpbmtzcGVlZCkgLyAxMDAwOworCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19UWF9CSVRSQVRFOworCX0KKworCWxlbiA9IHNpemVvZihyc3NpKTsKKwlyZXQgPSBybmRpc19xdWVyeV9vaWQodXNiZGV2LCBPSURfODAyXzExX1JTU0ksICZyc3NpLCAmbGVuKTsKKwlpZiAocmV0ID09IDApIHsKKwkJc2luZm8tPnNpZ25hbCA9IGxldmVsX3RvX3F1YWwobGUzMl90b19jcHUocnNzaSkpOworCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19TSUdOQUw7CisJfQorfQorCitzdGF0aWMgaW50IHJuZGlzX2dldF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXU4ICptYWMsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQoreworCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CisKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPmJzc2lkLCBtYWMpKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJuZGlzX2ZpbGxfc3RhdGlvbl9pbmZvKHVzYmRldiwgc2luZm8pOworCiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICpybmRpc19nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcm5kaXNfZHVtcF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgaW50IGlkeCwgdTggKm1hYywgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pCiB7Ci0Jc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGF0c19sb2NrLCBmbGFncyk7Ci0JbWVtY3B5KCZwcml2LT5pd3N0YXRzLCAmcHJpdi0+cHJpdnN0YXRzLCBzaXplb2YocHJpdi0+aXdzdGF0cykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YXRzX2xvY2ssIGZsYWdzKTsKKwlpZiAoaWR4ICE9IDApCisJCXJldHVybiAtRU5PRU5UOwogCi0JcmV0dXJuICZwcml2LT5pd3N0YXRzOworCW1lbWNweShtYWMsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CisKKwlybmRpc19maWxsX3N0YXRpb25faW5mbyh1c2JkZXYsIHNpbmZvKTsKKworCXJldHVybiAwOwogfQogCi0KLSNkZWZpbmUgSVdfSU9DVEwoeCkgWyh4KSAtIFNJT0NTSVdDT01NSVRdCi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlciBybmRpc19pd19oYW5kbGVyW10gPQorLyoKKyAqIHdvcmtlcnMsIGluZGljYXRpb24gaGFuZGxlcnMsIGRldmljZSBwb2xsZXIKKyAqLworc3RhdGljIHZvaWQgcm5kaXNfd2xhbl9kb19saW5rX3VwX3dvcmsoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQogewotCUlXX0lPQ1RMKFNJT0NTSVdDT01NSVQpICAgID0gcm5kaXNfaXdfY29tbWl0LAotCUlXX0lPQ1RMKFNJT0NHSVdOQU1FKSAgICAgID0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3bmFtZSwKLQlJV19JT0NUTChTSU9DU0lXRlJFUSkgICAgICA9IHJuZGlzX2l3X3NldF9mcmVxLAotCUlXX0lPQ1RMKFNJT0NHSVdGUkVRKSAgICAgID0gcm5kaXNfaXdfZ2V0X2ZyZXEsCi0JSVdfSU9DVEwoU0lPQ1NJV01PREUpICAgICAgPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdtb2RlLAotCUlXX0lPQ1RMKFNJT0NHSVdNT0RFKSAgICAgID0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3bW9kZSwKLQlJV19JT0NUTChTSU9DR0lXUkFOR0UpICAgICA9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3JhbmdlLAotCUlXX0lPQ1RMKFNJT0NTSVdBUCkgICAgICAgID0gcm5kaXNfaXdfc2V0X2Jzc2lkLAotCUlXX0lPQ1RMKFNJT0NHSVdBUCkgICAgICAgID0gcm5kaXNfaXdfZ2V0X2Jzc2lkLAotCUlXX0lPQ1RMKFNJT0NTSVdTQ0FOKSAgICAgID0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3c2NhbiwKLQlJV19JT0NUTChTSU9DR0lXU0NBTikgICAgICA9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3NjYW4sCi0JSVdfSU9DVEwoU0lPQ1NJV0VTU0lEKSAgICAgPSBybmRpc19pd19zZXRfZXNzaWQsCi0JSVdfSU9DVEwoU0lPQ0dJV0VTU0lEKSAgICAgPSBybmRpc19pd19nZXRfZXNzaWQsCi0JSVdfSU9DVEwoU0lPQ0dJV1JBVEUpICAgICAgPSBybmRpc19pd19nZXRfcmF0ZSwKLQlJV19JT0NUTChTSU9DU0lXUlRTKSAgICAgICA9IHJuZGlzX2l3X3NldF9ydHMsCi0JSVdfSU9DVEwoU0lPQ0dJV1JUUykgICAgICAgPSBybmRpc19pd19nZXRfcnRzLAotCUlXX0lPQ1RMKFNJT0NTSVdGUkFHKSAgICAgID0gcm5kaXNfaXdfc2V0X2ZyYWcsCi0JSVdfSU9DVEwoU0lPQ0dJV0ZSQUcpICAgICAgPSBybmRpc19pd19nZXRfZnJhZywKLQlJV19JT0NUTChTSU9DU0lXVFhQT1cpICAgICA9IHJuZGlzX2l3X3NldF90eHBvd2VyLAotCUlXX0lPQ1RMKFNJT0NHSVdUWFBPVykgICAgID0gcm5kaXNfaXdfZ2V0X3R4cG93ZXIsCi0JSVdfSU9DVEwoU0lPQ1NJV0VOQ09ERSkgICAgPSBybmRpc19pd19zZXRfZW5jb2RlLAotCUlXX0lPQ1RMKFNJT0NTSVdFTkNPREVFWFQpID0gcm5kaXNfaXdfc2V0X2VuY29kZV9leHQsCi0JSVdfSU9DVEwoU0lPQ1NJV0FVVEgpICAgICAgPSBybmRpc19pd19zZXRfYXV0aCwKLQlJV19JT0NUTChTSU9DR0lXQVVUSCkgICAgICA9IHJuZGlzX2l3X2dldF9hdXRoLAotCUlXX0lPQ1RMKFNJT0NTSVdHRU5JRSkgICAgID0gcm5kaXNfaXdfc2V0X2dlbmllLAotCUlXX0lPQ1RMKFNJT0NHSVdHRU5JRSkgICAgID0gcm5kaXNfaXdfZ2V0X2dlbmllLAotCUlXX0lPQ1RMKFNJT0NTSVdNTE1FKSAgICAgID0gcm5kaXNfaXdfc2V0X21sbWUsCi19OworCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7CisJc3RydWN0IG5kaXNfODAyMTFfYXNzb2NfaW5mbyAqaW5mbzsKKwl1OCBhc3NvY19idWZbc2l6ZW9mKCppbmZvKSArIElXX0NVU1RPTV9NQVggKyAzMl07CisJdTggYnNzaWRbRVRIX0FMRU5dOworCWludCByZXNwX2llX2xlbiwgcmVxX2llX2xlbjsKKwl1OCAqcmVxX2llLCAqcmVzcF9pZTsKKwlpbnQgcmV0LCBvZmZzZXQ7CisJYm9vbCByb2FtZWQgPSBmYWxzZTsKIAotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgcm5kaXNfd2xhbl9wcml2YXRlX2hhbmRsZXJbXSA9IHsKLX07CisJaWYgKHByaXYtPmluZnJhX21vZGUgPT0gTkRJU184MDIxMV9JTkZSQV9JTkZSQSAmJiBwcml2LT5jb25uZWN0ZWQpIHsKKwkJLyogcmVjZWl2ZWQgbWVkaWEgY29ubmVjdCBpbmRpY2F0aW9uIHdoaWxlIGNvbm5lY3RlZCwgZWl0aGVyCisJCSAqIGRldmljZSByZWFzc29jaWF0ZWQgd2l0aCBzYW1lIEFQIG9yIHJvYW1lZCB0byBuZXcuICovCisJCXJvYW1lZCA9IHRydWU7CisJfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyBybmRpc193bGFuX3ByaXZhdGVfYXJnc1tdID0gewotfTsKKwlyZXFfaWVfbGVuID0gMDsKKwlyZXNwX2llX2xlbiA9IDA7CisJcmVxX2llID0gTlVMTDsKKwlyZXNwX2llID0gTlVMTDsKIAorCWlmIChwcml2LT5pbmZyYV9tb2RlID09IE5ESVNfODAyMTFfSU5GUkFfSU5GUkEpIHsKKwkJbWVtc2V0KGFzc29jX2J1ZiwgMCwgc2l6ZW9mKGFzc29jX2J1ZikpOworCQlpbmZvID0gKHZvaWQgKilhc3NvY19idWY7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcm5kaXNfaXdfaGFuZGxlcnMgPSB7Ci0JLm51bV9zdGFuZGFyZCA9IEFSUkFZX1NJWkUocm5kaXNfaXdfaGFuZGxlciksCi0JLm51bV9wcml2YXRlICA9IEFSUkFZX1NJWkUocm5kaXNfd2xhbl9wcml2YXRlX2hhbmRsZXIpLAotCS5udW1fcHJpdmF0ZV9hcmdzID0gQVJSQVlfU0laRShybmRpc193bGFuX3ByaXZhdGVfYXJncyksCi0JLnN0YW5kYXJkID0gKGl3X2hhbmRsZXIgKilybmRpc19pd19oYW5kbGVyLAotCS5wcml2YXRlICA9IChpd19oYW5kbGVyICopcm5kaXNfd2xhbl9wcml2YXRlX2hhbmRsZXIsCi0JLnByaXZhdGVfYXJncyA9IChzdHJ1Y3QgaXdfcHJpdl9hcmdzICopcm5kaXNfd2xhbl9wcml2YXRlX2FyZ3MsCi0JLmdldF93aXJlbGVzc19zdGF0cyA9IHJuZGlzX2dldF93aXJlbGVzc19zdGF0cywKLX07CisJCS8qIEdldCBhc3NvY2lhdGlvbiBpbmZvIElFcyBmcm9tIGRldmljZSBhbmQgc2VuZCB0aGVtIGJhY2sgdG8KKwkJICogdXNlcnNwYWNlLiAqLworCQlyZXQgPSBnZXRfYXNzb2NpYXRpb25faW5mbyh1c2JkZXYsIGluZm8sIHNpemVvZihhc3NvY19idWYpKTsKKwkJaWYgKCFyZXQpIHsKKwkJCXJlcV9pZV9sZW4gPSBsZTMyX3RvX2NwdShpbmZvLT5yZXFfaWVfbGVuZ3RoKTsKKwkJCWlmIChyZXFfaWVfbGVuID4gMCkgeworCQkJCW9mZnNldCA9IGxlMzJfdG9fY3B1KGluZm8tPm9mZnNldF9yZXFfaWVzKTsKKwkJCQlyZXFfaWUgPSAodTggKilpbmZvICsgb2Zmc2V0OworCQkJfQogCisJCQlyZXNwX2llX2xlbiA9IGxlMzJfdG9fY3B1KGluZm8tPnJlc3BfaWVfbGVuZ3RoKTsKKwkJCWlmIChyZXNwX2llX2xlbiA+IDApIHsKKwkJCQlvZmZzZXQgPSBsZTMyX3RvX2NwdShpbmZvLT5vZmZzZXRfcmVzcF9pZXMpOworCQkJCXJlc3BfaWUgPSAodTggKilpbmZvICsgb2Zmc2V0OworCQkJfQorCQl9CisJfSBlbHNlIGlmIChXQVJOX09OKHByaXYtPmluZnJhX21vZGUgIT0gTkRJU184MDIxMV9JTkZSQV9BREhPQykpCisJCXJldHVybjsKKworCXJldCA9IGdldF9ic3NpZCh1c2JkZXYsIGJzc2lkKTsKKwlpZiAocmV0IDwgMCkKKwkJbWVtc2V0KGJzc2lkLCAwLCBzaXplb2YoYnNzaWQpKTsKKworCWRldmRiZyh1c2JkZXYsICJsaW5rIHVwIHdvcms6IFslcE1dICVzIiwgYnNzaWQsIHJvYW1lZCA/ICJyb2FtZWQiIDogIiIpOworCisJLyogSW50ZXJuYWwgYnNzIGxpc3QgaW4gZGV2aWNlIGFsd2F5cyBjb250YWlucyBhdCBsZWFzdCB0aGUgY3VycmVudGx5CisJICogY29ubmVjdGVkIGJzcyBhbmQgd2UgY2FuIGdldCBpdCB0byBjZmc4MDIxMSB3aXRoCisJICogcm5kaXNfY2hlY2tfYnNzaWRfbGlzdCgpLgorCSAqIE5PVEU6IFRoaXMgaXMgdHJ1ZSBmb3IgQnJvYWRjb20gY2hpcCwgYnV0IG5vdCBtZW50aW9uZWQgaW4gUk5ESVMKKwkgKiBzcGVjLgorCSAqLworCXJuZGlzX2NoZWNrX2Jzc2lkX2xpc3QodXNiZGV2KTsKKworCWlmIChwcml2LT5pbmZyYV9tb2RlID09IE5ESVNfODAyMTFfSU5GUkFfSU5GUkEpIHsKKwkJaWYgKCFyb2FtZWQpCisJCQljZmc4MDIxMV9jb25uZWN0X3Jlc3VsdCh1c2JkZXYtPm5ldCwgYnNzaWQsIHJlcV9pZSwKKwkJCQkJCXJlcV9pZV9sZW4sIHJlc3BfaWUsCisJCQkJCQlyZXNwX2llX2xlbiwgMCwgR0ZQX0tFUk5FTCk7CisJCWVsc2UKKwkJCWNmZzgwMjExX3JvYW1lZCh1c2JkZXYtPm5ldCwgYnNzaWQsIHJlcV9pZSwgcmVxX2llX2xlbiwKKwkJCQkJcmVzcF9pZSwgcmVzcF9pZV9sZW4sIEdGUF9LRVJORUwpOworCX0gZWxzZSBpZiAocHJpdi0+aW5mcmFfbW9kZSA9PSBORElTXzgwMjExX0lORlJBX0FESE9DKQorCQljZmc4MDIxMV9pYnNzX2pvaW5lZCh1c2JkZXYtPm5ldCwgYnNzaWQsIEdGUF9LRVJORUwpOworCisJcHJpdi0+Y29ubmVjdGVkID0gdHJ1ZTsKKwltZW1jcHkocHJpdi0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisKKwl1c2JuZXRfcmVzdW1lX3J4KHVzYmRldik7CisJbmV0aWZfY2Fycmllcl9vbih1c2JkZXYtPm5ldCk7Cit9CisKK3N0YXRpYyB2b2lkIHJuZGlzX3dsYW5fZG9fbGlua19kb3duX3dvcmsoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQoreworCXVuaW9uIGl3cmVxX2RhdGEgZXZ0OworCisJbmV0aWZfY2Fycmllcl9vZmYodXNiZGV2LT5uZXQpOworCisJZXZ0LmRhdGEuZmxhZ3MgPSAwOworCWV2dC5kYXRhLmxlbmd0aCA9IDA7CisJbWVtc2V0KGV2dC5hcF9hZGRyLnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKKwl3aXJlbGVzc19zZW5kX2V2ZW50KHVzYmRldi0+bmV0LCBTSU9DR0lXQVAsICZldnQsIE5VTEwpOworfQogCiBzdGF0aWMgdm9pZCBybmRpc193bGFuX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlLCB3b3JrKTsKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7Ci0JdW5pb24gaXdyZXFfZGF0YSBldnQ7Ci0JdW5zaWduZWQgY2hhciBic3NpZFtFVEhfQUxFTl07Ci0Jc3RydWN0IG5kaXNfODAyMTFfYXNzb2NfaW5mbyAqaW5mbzsKLQlpbnQgYXNzb2Nfc2l6ZSA9IHNpemVvZigqaW5mbykgKyBJV19DVVNUT01fTUFYICsgMzI7Ci0JaW50IHJldCwgb2Zmc2V0OwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXT1JLX0xJTktfVVAsICZwcml2LT53b3JrX3BlbmRpbmcpKSB7Ci0JCW5ldGlmX2NhcnJpZXJfb24odXNiZGV2LT5uZXQpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV09SS19MSU5LX1VQLCAmcHJpdi0+d29ya19wZW5kaW5nKSkKKwkJcm5kaXNfd2xhbl9kb19saW5rX3VwX3dvcmsodXNiZGV2KTsKIAotCQlpbmZvID0ga3phbGxvYyhhc3NvY19zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFpbmZvKQotCQkJZ290byBnZXRfYnNzaWQ7Ci0KLQkJLyogR2V0IGFzc29jaWF0aW9uIGluZm8gSUVzIGZyb20gZGV2aWNlIGFuZCBzZW5kIHRoZW0gYmFjayB0bwotCQkgKiB1c2Vyc3BhY2UuICovCi0JCXJldCA9IGdldF9hc3NvY2lhdGlvbl9pbmZvKHVzYmRldiwgaW5mbywgYXNzb2Nfc2l6ZSk7Ci0JCWlmICghcmV0KSB7Ci0JCQlldnQuZGF0YS5sZW5ndGggPSBsZTMyX3RvX2NwdShpbmZvLT5yZXFfaWVfbGVuZ3RoKTsKLQkJCWlmIChldnQuZGF0YS5sZW5ndGggPiAwKSB7Ci0JCQkJb2Zmc2V0ID0gbGUzMl90b19jcHUoaW5mby0+b2Zmc2V0X3JlcV9pZXMpOwotCQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQodXNiZGV2LT5uZXQsCi0JCQkJCUlXRVZBU1NPQ1JFUUlFLCAmZXZ0LAotCQkJCQkoY2hhciAqKWluZm8gKyBvZmZzZXQpOwotCQkJfQotCi0JCQlldnQuZGF0YS5sZW5ndGggPSBsZTMyX3RvX2NwdShpbmZvLT5yZXNwX2llX2xlbmd0aCk7Ci0JCQlpZiAoZXZ0LmRhdGEubGVuZ3RoID4gMCkgewotCQkJCW9mZnNldCA9IGxlMzJfdG9fY3B1KGluZm8tPm9mZnNldF9yZXNwX2llcyk7Ci0JCQkJd2lyZWxlc3Nfc2VuZF9ldmVudCh1c2JkZXYtPm5ldCwKLQkJCQkJSVdFVkFTU09DUkVTUElFLCAmZXZ0LAotCQkJCQkoY2hhciAqKWluZm8gKyBvZmZzZXQpOwotCQkJfQotCQl9Ci0KLQkJa2ZyZWUoaW5mbyk7Ci0KLWdldF9ic3NpZDoKLQkJcmV0ID0gZ2V0X2Jzc2lkKHVzYmRldiwgYnNzaWQpOwotCQlpZiAoIXJldCkgewotCQkJZXZ0LmRhdGEuZmxhZ3MgPSAwOwotCQkJZXZ0LmRhdGEubGVuZ3RoID0gMDsKLQkJCW1lbWNweShldnQuYXBfYWRkci5zYV9kYXRhLCBic3NpZCwgRVRIX0FMRU4pOwotCQkJd2lyZWxlc3Nfc2VuZF9ldmVudCh1c2JkZXYtPm5ldCwgU0lPQ0dJV0FQLCAmZXZ0LCBOVUxMKTsKLQkJfQotCX0KLQotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV09SS19MSU5LX0RPV04sICZwcml2LT53b3JrX3BlbmRpbmcpKSB7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKHVzYmRldi0+bmV0KTsKLQotCQlldnQuZGF0YS5mbGFncyA9IDA7Ci0JCWV2dC5kYXRhLmxlbmd0aCA9IDA7Ci0JCW1lbXNldChldnQuYXBfYWRkci5zYV9kYXRhLCAwLCBFVEhfQUxFTik7Ci0JCXdpcmVsZXNzX3NlbmRfZXZlbnQodXNiZGV2LT5uZXQsIFNJT0NHSVdBUCwgJmV2dCwgTlVMTCk7Ci0JfQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV09SS19MSU5LX0RPV04sICZwcml2LT53b3JrX3BlbmRpbmcpKQorCQlybmRpc193bGFuX2RvX2xpbmtfZG93bl93b3JrKHVzYmRldik7CiAKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdPUktfU0VUX01VTFRJQ0FTVF9MSVNULCAmcHJpdi0+d29ya19wZW5kaW5nKSkKIAkJc2V0X211bHRpY2FzdF9saXN0KHVzYmRldik7CkBAIC0yMTMxLDE1ICsyMjUzLDIzMyBAQAogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+d29yayk7CiB9CiAKLXN0YXRpYyB2b2lkIHJuZGlzX3dsYW5fbGlua19jaGFuZ2Uoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBpbnQgc3RhdGUpCitzdGF0aWMgdm9pZCBybmRpc193bGFuX2F1dGhfaW5kaWNhdGlvbihzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsCisJCQkJc3RydWN0IG5kaXNfODAyMTFfc3RhdHVzX2luZGljYXRpb24gKmluZGljYXRpb24sCisJCQkJaW50IGxlbikKIHsKLQlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOworCXU4ICpidWY7CisJY29uc3QgY2hhciAqdHlwZTsKKwlpbnQgZmxhZ3MsIGJ1Zmxlbiwga2V5X2lkOworCWJvb2wgcGFpcndpc2VfZXJyb3IsIGdyb3VwX2Vycm9yOworCXN0cnVjdCBuZGlzXzgwMjExX2F1dGhfcmVxdWVzdCAqYXV0aF9yZXE7CisJZW51bSBubDgwMjExX2tleV90eXBlIGtleV90eXBlOwogCi0JLyogcXVldWUgd29yayB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMgaW50byBybmRpc19jb21tYW5kICovCi0Jc2V0X2JpdChzdGF0ZSA/IFdPUktfTElOS19VUCA6IFdPUktfTElOS19ET1dOLCAmcHJpdi0+d29ya19wZW5kaW5nKTsKLQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPndvcmspOworCS8qIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYXJyYXkgZW50cnkgKi8KKwlpZiAobGVuIDwgb2Zmc2V0b2Yoc3RydWN0IG5kaXNfODAyMTFfc3RhdHVzX2luZGljYXRpb24sIHUpICsKKwkJCQlzaXplb2Yoc3RydWN0IG5kaXNfODAyMTFfYXV0aF9yZXF1ZXN0KSkgeworCQlkZXZpbmZvKHVzYmRldiwgImF1dGhlbnRpY2F0aW9uIGluZGljYXRpb246ICIKKwkJCQkidG9vIHNob3J0IG1lc3NhZ2UgKCVpKSIsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwlidWYgPSAodm9pZCAqKSZpbmRpY2F0aW9uLT51LmF1dGhfcmVxdWVzdFswXTsKKwlidWZsZW4gPSBsZW4gLSBvZmZzZXRvZihzdHJ1Y3QgbmRpc184MDIxMV9zdGF0dXNfaW5kaWNhdGlvbiwgdSk7CisKKwl3aGlsZSAoYnVmbGVuID49IHNpemVvZigqYXV0aF9yZXEpKSB7CisJCWF1dGhfcmVxID0gKHZvaWQgKilidWY7CisJCXR5cGUgPSAidW5rbm93biI7CisJCWZsYWdzID0gbGUzMl90b19jcHUoYXV0aF9yZXEtPmZsYWdzKTsKKwkJcGFpcndpc2VfZXJyb3IgPSBmYWxzZTsKKwkJZ3JvdXBfZXJyb3IgPSBmYWxzZTsKKworCQlpZiAoZmxhZ3MgJiAweDEpCisJCQl0eXBlID0gInJlYXV0aCByZXF1ZXN0IjsKKwkJaWYgKGZsYWdzICYgMHgyKQorCQkJdHlwZSA9ICJrZXkgdXBkYXRlIHJlcXVlc3QiOworCQlpZiAoZmxhZ3MgJiAweDYpIHsKKwkJCXBhaXJ3aXNlX2Vycm9yID0gdHJ1ZTsKKwkJCXR5cGUgPSAicGFpcndpc2VfZXJyb3IiOworCQl9CisJCWlmIChmbGFncyAmIDB4ZSkgeworCQkJZ3JvdXBfZXJyb3IgPSB0cnVlOworCQkJdHlwZSA9ICJncm91cF9lcnJvciI7CisJCX0KKworCQlkZXZpbmZvKHVzYmRldiwgImF1dGhlbnRpY2F0aW9uIGluZGljYXRpb246ICVzICgweCUwOHgpIiwgdHlwZSwKKwkJCQlsZTMyX3RvX2NwdShhdXRoX3JlcS0+ZmxhZ3MpKTsKKworCQlpZiAocGFpcndpc2VfZXJyb3IpIHsKKwkJCWtleV90eXBlID0gTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFOworCQkJa2V5X2lkID0gLTE7CisKKwkJCWNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUodXNiZGV2LT5uZXQsCisJCQkJCQkJYXV0aF9yZXEtPmJzc2lkLAorCQkJCQkJCWtleV90eXBlLCBrZXlfaWQsIE5VTEwsCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCX0KKworCQlpZiAoZ3JvdXBfZXJyb3IpIHsKKwkJCWtleV90eXBlID0gTkw4MDIxMV9LRVlUWVBFX0dST1VQOworCQkJa2V5X2lkID0gLTE7CisKKwkJCWNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUodXNiZGV2LT5uZXQsCisJCQkJCQkJYXV0aF9yZXEtPmJzc2lkLAorCQkJCQkJCWtleV90eXBlLCBrZXlfaWQsIE5VTEwsCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCX0KKworCQlidWZsZW4gLT0gbGUzMl90b19jcHUoYXV0aF9yZXEtPmxlbmd0aCk7CisJCWJ1ZiArPSBsZTMyX3RvX2NwdShhdXRoX3JlcS0+bGVuZ3RoKTsKKwl9CiB9CiAKK3N0YXRpYyB2b2lkIHJuZGlzX3dsYW5fcG1raWRfY2FuZF9saXN0X2luZGljYXRpb24oc3RydWN0IHVzYm5ldCAqdXNiZGV2LAorCQkJCXN0cnVjdCBuZGlzXzgwMjExX3N0YXR1c19pbmRpY2F0aW9uICppbmRpY2F0aW9uLAorCQkJCWludCBsZW4pCit7CisJc3RydWN0IG5kaXNfODAyMTFfcG1raWRfY2FuZF9saXN0ICpjYW5kX2xpc3Q7CisJaW50IGxpc3RfbGVuLCBleHBlY3RlZF9sZW4sIGk7CisKKwlpZiAobGVuIDwgb2Zmc2V0b2Yoc3RydWN0IG5kaXNfODAyMTFfc3RhdHVzX2luZGljYXRpb24sIHUpICsKKwkJCQlzaXplb2Yoc3RydWN0IG5kaXNfODAyMTFfcG1raWRfY2FuZF9saXN0KSkgeworCQlkZXZpbmZvKHVzYmRldiwgInBta2lkIGNhbmRpZGF0ZSBsaXN0IGluZGljYXRpb246ICIKKwkJCQkidG9vIHNob3J0IG1lc3NhZ2UgKCVpKSIsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwlsaXN0X2xlbiA9IGxlMzJfdG9fY3B1KGluZGljYXRpb24tPnUuY2FuZF9saXN0Lm51bV9jYW5kaWRhdGVzKSAqCisJCQlzaXplb2Yoc3RydWN0IG5kaXNfODAyMTFfcG1raWRfY2FuZGlkYXRlKTsKKwlleHBlY3RlZF9sZW4gPSBzaXplb2Yoc3RydWN0IG5kaXNfODAyMTFfcG1raWRfY2FuZF9saXN0KSArIGxpc3RfbGVuICsKKwkJCW9mZnNldG9mKHN0cnVjdCBuZGlzXzgwMjExX3N0YXR1c19pbmRpY2F0aW9uLCB1KTsKKworCWlmIChsZW4gPCBleHBlY3RlZF9sZW4pIHsKKwkJZGV2aW5mbyh1c2JkZXYsICJwbWtpZCBjYW5kaWRhdGUgbGlzdCBpbmRpY2F0aW9uOiAiCisJCQkJImxpc3QgbGFyZ2VyIHRoYW4gYnVmZmVyICglaSA8ICVpKSIsCisJCQkJbGVuLCBleHBlY3RlZF9sZW4pOworCQlyZXR1cm47CisJfQorCisJY2FuZF9saXN0ID0gJmluZGljYXRpb24tPnUuY2FuZF9saXN0OworCisJZGV2aW5mbyh1c2JkZXYsICJwbWtpZCBjYW5kaWRhdGUgbGlzdCBpbmRpY2F0aW9uOiAiCisJCQkidmVyc2lvbiAlaSwgY2FuZGlkYXRlcyAlaSIsCisJCQlsZTMyX3RvX2NwdShjYW5kX2xpc3QtPnZlcnNpb24pLAorCQkJbGUzMl90b19jcHUoY2FuZF9saXN0LT5udW1fY2FuZGlkYXRlcykpOworCisJaWYgKGxlMzJfdG9fY3B1KGNhbmRfbGlzdC0+dmVyc2lvbikgIT0gMSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGxlMzJfdG9fY3B1KGNhbmRfbGlzdC0+bnVtX2NhbmRpZGF0ZXMpOyBpKyspIHsKKwkJc3RydWN0IG5kaXNfODAyMTFfcG1raWRfY2FuZGlkYXRlICpjYW5kID0KKwkJCQkJCSZjYW5kX2xpc3QtPmNhbmRpZGF0ZV9saXN0W2ldOworCisJCWRldmRiZyh1c2JkZXYsICJjYW5kWyVpXTogZmxhZ3M6IDB4JTA4eCwgYnNzaWQ6ICVwTSIsCisJCQkJaSwgbGUzMl90b19jcHUoY2FuZC0+ZmxhZ3MpLCBjYW5kLT5ic3NpZCk7CisKKyNpZiAwCisJCXN0cnVjdCBpd19wbWtpZF9jYW5kIHBjYW5kOworCQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisKKwkJbWVtc2V0KCZwY2FuZCwgMCwgc2l6ZW9mKHBjYW5kKSk7CisJCWlmIChsZTMyX3RvX2NwdShjYW5kLT5mbGFncykgJiAweDAxKQorCQkJcGNhbmQuZmxhZ3MgfD0gSVdfUE1LSURfQ0FORF9QUkVBVVRIOworCQlwY2FuZC5pbmRleCA9IGk7CisJCW1lbWNweShwY2FuZC5ic3NpZC5zYV9kYXRhLCBjYW5kLT5ic3NpZCwgRVRIX0FMRU4pOworCisJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwkJd3JxdS5kYXRhLmxlbmd0aCA9IHNpemVvZihwY2FuZCk7CisJCXdpcmVsZXNzX3NlbmRfZXZlbnQodXNiZGV2LT5uZXQsIElXRVZQTUtJRENBTkQsICZ3cnF1LAorCQkJCQkJCQkodTggKikmcGNhbmQpOworI2VuZGlmCisJfQorfQorCitzdGF0aWMgdm9pZCBybmRpc193bGFuX21lZGlhX3NwZWNpZmljX2luZGljYXRpb24oc3RydWN0IHVzYm5ldCAqdXNiZGV2LAorCQkJc3RydWN0IHJuZGlzX2luZGljYXRlICptc2csIGludCBidWZsZW4pCit7CisJc3RydWN0IG5kaXNfODAyMTFfc3RhdHVzX2luZGljYXRpb24gKmluZGljYXRpb247CisJaW50IGxlbiwgb2Zmc2V0OworCisJb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJuZGlzX2luZGljYXRlLCBzdGF0dXMpICsKKwkJCWxlMzJfdG9fY3B1KG1zZy0+b2Zmc2V0KTsKKwlsZW4gPSBsZTMyX3RvX2NwdShtc2ctPmxlbmd0aCk7CisKKwlpZiAobGVuIDwgOCkgeworCQlkZXZpbmZvKHVzYmRldiwgIm1lZGlhIHNwZWNpZmljIGluZGljYXRpb24sICIKKwkJCQkiaWdub3JlIHRvbyBzaG9ydCBtZXNzYWdlICglaSA8IDgpIiwgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChvZmZzZXQgKyBsZW4gPiBidWZsZW4pIHsKKwkJZGV2aW5mbyh1c2JkZXYsICJtZWRpYSBzcGVjaWZpYyBpbmRpY2F0aW9uLCAiCisJCQkJInRvbyBsYXJnZSB0byBmaXQgdG8gYnVmZmVyICglaSA+ICVpKSIsCisJCQkJb2Zmc2V0ICsgbGVuLCBidWZsZW4pOworCQlyZXR1cm47CisJfQorCisJaW5kaWNhdGlvbiA9ICh2b2lkICopKCh1OCAqKW1zZyArIG9mZnNldCk7CisKKwlzd2l0Y2ggKGxlMzJfdG9fY3B1KGluZGljYXRpb24tPnN0YXR1c190eXBlKSkgeworCWNhc2UgTkRJU184MDIxMV9TVEFUVVNUWVBFX1JBRElPU1RBVEU6CisJCWRldmluZm8odXNiZGV2LCAicmFkaW8gc3RhdGUgaW5kaWNhdGlvbjogJWkiLAorCQkJbGUzMl90b19jcHUoaW5kaWNhdGlvbi0+dS5yYWRpb19zdGF0dXMpKTsKKwkJcmV0dXJuOworCisJY2FzZSBORElTXzgwMjExX1NUQVRVU1RZUEVfTUVESUFTVFJFQU1NT0RFOgorCQlkZXZpbmZvKHVzYmRldiwgIm1lZGlhIHN0cmVhbSBtb2RlIGluZGljYXRpb246ICVpIiwKKwkJCWxlMzJfdG9fY3B1KGluZGljYXRpb24tPnUubWVkaWFfc3RyZWFtX21vZGUpKTsKKwkJcmV0dXJuOworCisJY2FzZSBORElTXzgwMjExX1NUQVRVU1RZUEVfQVVUSEVOVElDQVRJT046CisJCXJuZGlzX3dsYW5fYXV0aF9pbmRpY2F0aW9uKHVzYmRldiwgaW5kaWNhdGlvbiwgbGVuKTsKKwkJcmV0dXJuOworCisJY2FzZSBORElTXzgwMjExX1NUQVRVU1RZUEVfUE1LSURfQ0FORElEQVRFTElTVDoKKwkJcm5kaXNfd2xhbl9wbWtpZF9jYW5kX2xpc3RfaW5kaWNhdGlvbih1c2JkZXYsIGluZGljYXRpb24sIGxlbik7CisJCXJldHVybjsKKworCWRlZmF1bHQ6CisJCWRldmluZm8odXNiZGV2LCAibWVkaWEgc3BlY2lmaWMgaW5kaWNhdGlvbjogIgorCQkJCSJ1bmtub3duIHN0YXR1cyB0eXBlIDB4JTA4eCIsCisJCQkJbGUzMl90b19jcHUoaW5kaWNhdGlvbi0+c3RhdHVzX3R5cGUpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJuZGlzX3dsYW5faW5kaWNhdGlvbihzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIHZvaWQgKmluZCwgaW50IGJ1ZmxlbikKK3sKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOworCXN0cnVjdCBybmRpc19pbmRpY2F0ZSAqbXNnID0gaW5kOworCisJc3dpdGNoIChtc2ctPnN0YXR1cykgeworCWNhc2UgUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1Q6CisJCWlmIChwcml2LT5jdXJyZW50X2NvbW1hbmRfb2lkID09IE9JRF84MDJfMTFfQUREX0tFWSkgeworCQkJLyogT0lEXzgwMl8xMV9BRERfS0VZIGNhdXNlcyBzb21ldGltZXMgZXh0cmEKKwkJCSAqICJtZWRpYSBjb25uZWN0IiBpbmRpY2F0aW9ucyB3aGljaCBjb25mdXNlcyBkcml2ZXIKKwkJCSAqIGFuZCB1c2Vyc3BhY2UgdG8gdGhpbmsgdGhhdCBkZXZpY2UgaXMKKwkJCSAqIHJvYW1pbmcvcmVhc3NvY2lhdGluZyB3aGVuIGl0IGlzbid0LgorCQkJICovCisJCQlkZXZkYmcodXNiZGV2LCAiaWdub3JlZCBPSURfODAyXzExX0FERF9LRVkgdHJpZ2dlcmVkICIKKwkJCQkJIidtZWRpYSBjb25uZWN0JyIpOworCQkJcmV0dXJuOworCQl9CisKKwkJdXNibmV0X3BhdXNlX3J4KHVzYmRldik7CisKKwkJZGV2aW5mbyh1c2JkZXYsICJtZWRpYSBjb25uZWN0Iik7CisKKwkJLyogcXVldWUgd29yayB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMgaW50byBybmRpc19jb21tYW5kICovCisJCXNldF9iaXQoV09SS19MSU5LX1VQLCAmcHJpdi0+d29ya19wZW5kaW5nKTsKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT53b3JrKTsKKwkJYnJlYWs7CisKKwljYXNlIFJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUOgorCQlkZXZpbmZvKHVzYmRldiwgIm1lZGlhIGRpc2Nvbm5lY3QiKTsKKworCQkvKiBxdWV1ZSB3b3JrIHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxscyBpbnRvIHJuZGlzX2NvbW1hbmQgKi8KKwkJc2V0X2JpdChXT1JLX0xJTktfRE9XTiwgJnByaXYtPndvcmtfcGVuZGluZyk7CisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+d29yayk7CisJCWJyZWFrOworCisJY2FzZSBSTkRJU19TVEFUVVNfTUVESUFfU1BFQ0lGSUNfSU5ESUNBVElPTjoKKwkJcm5kaXNfd2xhbl9tZWRpYV9zcGVjaWZpY19pbmRpY2F0aW9uKHVzYmRldiwgbXNnLCBidWZsZW4pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldmluZm8odXNiZGV2LCAiaW5kaWNhdGlvbjogMHglMDh4IiwKKwkJCQlsZTMyX3RvX2NwdShtc2ctPnN0YXR1cykpOworCQlicmVhazsKKwl9Cit9CiAKIHN0YXRpYyBpbnQgcm5kaXNfd2xhbl9nZXRfY2FwcyhzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCiB7CkBAIC0yMTc3LDc4ICsyNTE3LDQ0IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotCi0jZGVmaW5lIFNUQVRTX1VQREFURV9KSUZGSUVTIChIWikKLXN0YXRpYyB2b2lkIHJuZGlzX3VwZGF0ZV93aXJlbGVzc19zdGF0cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCisjZGVmaW5lIERFVklDRV9QT0xMRVJfSklGRklFUyAoSFopCitzdGF0aWMgdm9pZCBybmRpc19kZXZpY2VfcG9sbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUsIHN0YXRzX3dvcmsud29yayk7CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlLAorCQkJCQkJCWRldl9wb2xsZXJfd29yay53b3JrKTsKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7Ci0Jc3RydWN0IGl3X3N0YXRpc3RpY3MgaXdzdGF0czsKIAlfX2xlMzIgcnNzaSwgdG1wOwogCWludCBsZW4sIHJldCwgajsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCB1cGRhdGVfamlmZmllcyA9IFNUQVRTX1VQREFURV9KSUZGSUVTOworCWludCB1cGRhdGVfamlmZmllcyA9IERFVklDRV9QT0xMRVJfSklGRklFUzsKIAl2b2lkICpidWY7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhdHNfbG9jaywgZmxhZ3MpOwotCW1lbWNweSgmaXdzdGF0cywgJnByaXYtPnByaXZzdGF0cywgc2l6ZW9mKGl3c3RhdHMpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGF0c19sb2NrLCBmbGFncyk7Ci0KLQkvKiBvbmx5IHVwZGF0ZSBzdGF0cyB3aGVuIGNvbm5lY3RlZCAqLwotCWlmICghaXNfYXNzb2NpYXRlZCh1c2JkZXYpKSB7Ci0JCWl3c3RhdHMucXVhbC5xdWFsID0gMDsKLQkJaXdzdGF0cy5xdWFsLmxldmVsID0gMDsKLQkJaXdzdGF0cy5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX1FVQUxfVVBEQVRFRAotCQkJCXwgSVdfUVVBTF9MRVZFTF9VUERBVEVECi0JCQkJfCBJV19RVUFMX05PSVNFX0lOVkFMSUQKLQkJCQl8IElXX1FVQUxfUVVBTF9JTlZBTElECi0JCQkJfCBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7CisJLyogT25seSBjaGVjay9kbyB3b3JrYXJvdW5kIHdoZW4gY29ubmVjdGVkLiBDYWxsaW5nIGlzX2Fzc29jaWF0ZWQoKQorCSAqIGFsc28gcG9sbHMgZGV2aWNlIHdpdGggcm5kaXNfY29tbWFuZCgpIGFuZCBjYXRjaGVzIGZvciBtZWRpYSBsaW5rCisJICogaW5kaWNhdGlvbnMuCisJICovCisJaWYgKCFpc19hc3NvY2lhdGVkKHVzYmRldikpCiAJCWdvdG8gZW5kOwotCX0KIAogCWxlbiA9IHNpemVvZihyc3NpKTsKIAlyZXQgPSBybmRpc19xdWVyeV9vaWQodXNiZGV2LCBPSURfODAyXzExX1JTU0ksICZyc3NpLCAmbGVuKTsKLQotCWRldmRiZyh1c2JkZXYsICJzdGF0czogT0lEXzgwMl8xMV9SU1NJIC0+ICVkLCByc3NpOiVkIiwgcmV0LAotCQkJCQkJCWxlMzJfdG9fY3B1KHJzc2kpKTsKLQlpZiAocmV0ID09IDApIHsKLQkJbWVtc2V0KCZpd3N0YXRzLnF1YWwsIDAsIHNpemVvZihpd3N0YXRzLnF1YWwpKTsKLQkJaXdzdGF0cy5xdWFsLnF1YWwgID0gbGV2ZWxfdG9fcXVhbChsZTMyX3RvX2NwdShyc3NpKSk7Ci0JCWl3c3RhdHMucXVhbC5sZXZlbCA9IGxldmVsX3RvX3F1YWwobGUzMl90b19jcHUocnNzaSkpOwotCQlpd3N0YXRzLnF1YWwudXBkYXRlZCA9IElXX1FVQUxfUVVBTF9VUERBVEVECi0JCQkJfCBJV19RVUFMX0xFVkVMX1VQREFURUQKLQkJCQl8IElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKLQl9Ci0KLQltZW1zZXQoJml3c3RhdHMuZGlzY2FyZCwgMCwgc2l6ZW9mKGl3c3RhdHMuZGlzY2FyZCkpOwotCi0JbGVuID0gc2l6ZW9mKHRtcCk7Ci0JcmV0ID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEX0dFTl9YTUlUX0VSUk9SLCAmdG1wLCAmbGVuKTsKIAlpZiAocmV0ID09IDApCi0JCWl3c3RhdHMuZGlzY2FyZC5taXNjICs9IGxlMzJfdG9fY3B1KHRtcCk7CisJCXByaXYtPmxhc3RfcXVhbCA9IGxldmVsX3RvX3F1YWwobGUzMl90b19jcHUocnNzaSkpOwogCi0JbGVuID0gc2l6ZW9mKHRtcCk7Ci0JcmV0ID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEX0dFTl9SQ1ZfRVJST1IsICZ0bXAsICZsZW4pOwotCWlmIChyZXQgPT0gMCkKLQkJaXdzdGF0cy5kaXNjYXJkLm1pc2MgKz0gbGUzMl90b19jcHUodG1wKTsKLQotCWxlbiA9IHNpemVvZih0bXApOwotCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF9HRU5fUkNWX05PX0JVRkZFUiwgJnRtcCwgJmxlbik7Ci0JaWYgKHJldCA9PSAwKQotCQlpd3N0YXRzLmRpc2NhcmQubWlzYyArPSBsZTMyX3RvX2NwdSh0bXApOworCWRldmRiZyh1c2JkZXYsICJkZXYtcG9sbGVyOiBPSURfODAyXzExX1JTU0kgLT4gJWQsIHJzc2k6JWQsIHF1YWw6ICVkIiwKKwkJcmV0LCBsZTMyX3RvX2NwdShyc3NpKSwgbGV2ZWxfdG9fcXVhbChsZTMyX3RvX2NwdShyc3NpKSkpOwogCiAJLyogV29ya2Fyb3VuZCB0cmFuc2ZlciBzdGFsbHMgb24gcG9vciBxdWFsaXR5IGxpbmtzLgogCSAqIFRPRE86IGZpbmQgcmlnaHQgd2F5IHRvIGZpeCB0aGVzZSBzdGFsbHMgKGFzIHN0YWxscyBkbyBub3QgaGFwcGVuCiAJICogd2l0aCBuZGlzd3JhcHBlci93aW5kb3dzIGRyaXZlcikuICovCi0JaWYgKGl3c3RhdHMucXVhbC5xdWFsIDw9IDI1KSB7CisJaWYgKHByaXYtPmxhc3RfcXVhbCA8PSAyNSkgewogCQkvKiBEZWNyZWFzZSBzdGF0cyB3b3JrZXIgaW50ZXJ2YWwgdG8gY2F0Y2ggc3RhbGxzLgogCQkgKiBmYXN0ZXIuIEZhc3RlciB0aGFuIDQwMC01MDBtcyBjYXVzZXMgcGFja2V0IGxvc3MsCiAJCSAqIFNsb3dlciBkb2Vzbid0IGNhdGNoIHN0YWxscyBmYXN0IGVub3VnaC4KIAkJICovCiAJCWogPSBtc2Vjc190b19qaWZmaWVzKHByaXYtPnBhcmFtX3dvcmthcm91bmRfaW50ZXJ2YWwpOwotCQlpZiAoaiA+IFNUQVRTX1VQREFURV9KSUZGSUVTKQotCQkJaiA9IFNUQVRTX1VQREFURV9KSUZGSUVTOworCQlpZiAoaiA+IERFVklDRV9QT0xMRVJfSklGRklFUykKKwkJCWogPSBERVZJQ0VfUE9MTEVSX0pJRkZJRVM7CiAJCWVsc2UgaWYgKGogPD0gMCkKIAkJCWogPSAxOwogCQl1cGRhdGVfamlmZmllcyA9IGo7CkBAIC0yMjY4LDExICsyNTc0LDggQEAKIAkJcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9CU1NJRF9MSVNULCBidWYsICZsZW4pOwogCQlrZnJlZShidWYpOwogCX0KLWVuZDoKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhdHNfbG9jaywgZmxhZ3MpOwotCW1lbWNweSgmcHJpdi0+cHJpdnN0YXRzLCAmaXdzdGF0cywgc2l6ZW9mKGl3c3RhdHMpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGF0c19sb2NrLCBmbGFncyk7CiAKK2VuZDoKIAlpZiAodXBkYXRlX2ppZmZpZXMgPj0gSFopCiAJCXVwZGF0ZV9qaWZmaWVzID0gcm91bmRfamlmZmllc19yZWxhdGl2ZSh1cGRhdGVfamlmZmllcyk7CiAJZWxzZSB7CkBAIC0yMjgxLDEwICsyNTg0LDEzIEBACiAJCQl1cGRhdGVfamlmZmllcyA9IGo7CiAJfQogCi0JcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnN0YXRzX3dvcmssIHVwZGF0ZV9qaWZmaWVzKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+ZGV2X3BvbGxlcl93b3JrLAorCQkJCQkJCQl1cGRhdGVfamlmZmllcyk7CiB9CiAKLQorLyoKKyAqIGRyaXZlci9kZXZpY2UgaW5pdGlhbGl6YXRpb24KKyAqLwogc3RhdGljIGludCBiY200MzIwYV9lYXJseV9pbml0KHN0cnVjdCB1c2JuZXQgKnVzYmRldikKIHsKIAkvKiBiY200MzIwYSBkb2Vzbid0IGhhbmRsZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgd2VsbC4gVHJ5CkBAIC0yMjk0LDcgKzI2MDAsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgYmNtNDMyMGJfZWFybHlfaW5pdChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKQEAgLTIzNzMsNyArMjY3OCw2IEBACiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBybmRpc193bGFuX3NldF9tdWx0aWNhc3RfbGlzdCwKIH07CiAKLQogc3RhdGljIGludCBybmRpc193bGFuX2JpbmQoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwpAQCAtMjM5OCwxNiArMjcwMiwxNCBAQAogCSAqIE90aGVyd2lzZSB3ZSdsbCBiZSBpbiBiaWcgdHJvdWJsZSBpbiBybmRpc193bGFuX2Vhcmx5X2luaXQoKS4KIAkgKi8KIAl1c2JkZXYtPmRyaXZlcl9wcml2ID0gcHJpdjsKLQl1c2JkZXYtPm5ldC0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcm5kaXNfaXdfaGFuZGxlcnM7CiAJcHJpdi0+dXNiZGV2ID0gdXNiZGV2OwogCiAJbXV0ZXhfaW5pdCgmcHJpdi0+Y29tbWFuZF9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+c3RhdHNfbG9jayk7CiAKIAkvKiBiZWNhdXNlIHJuZGlzX2NvbW1hbmQoKSBzbGVlcHMgd2UgbmVlZCB0byB1c2Ugd29ya3F1ZXVlICovCiAJcHJpdi0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInJuZGlzX3dsYW4iKTsKIAlJTklUX1dPUksoJnByaXYtPndvcmssIHJuZGlzX3dsYW5fd29ya2VyKTsKLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+c3RhdHNfd29yaywgcm5kaXNfdXBkYXRlX3dpcmVsZXNzX3N0YXRzKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+ZGV2X3BvbGxlcl93b3JrLCBybmRpc19kZXZpY2VfcG9sbGVyKTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+c2Nhbl93b3JrLCBybmRpc19nZXRfc2Nhbl9yZXN1bHRzKTsKIAogCS8qIHRyeSBiaW5kIHJuZGlzX2hvc3QgKi8KQEAgLTI0MzksMTQgKzI3NDEsNiBAQAogCWVsc2UKIAkJdXNiZGV2LT5uZXQtPmZsYWdzICY9IH5JRkZfTVVMVElDQVNUOwogCi0JcHJpdi0+aXdzdGF0cy5xdWFsLnF1YWwgPSAwOwotCXByaXYtPml3c3RhdHMucXVhbC5sZXZlbCA9IDA7Ci0JcHJpdi0+aXdzdGF0cy5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX1FVQUxfVVBEQVRFRAotCQkJCQl8IElXX1FVQUxfTEVWRUxfVVBEQVRFRAotCQkJCQl8IElXX1FVQUxfTk9JU0VfSU5WQUxJRAotCQkJCQl8IElXX1FVQUxfUVVBTF9JTlZBTElECi0JCQkJCXwgSVdfUVVBTF9MRVZFTF9JTlZBTElEOwotCiAJLyogZmlsbC1vdXQgd2lwaHkgc3RydWN0dXJlIGFuZCByZWdpc3RlciB3LyBjZmc4MDIxMSAqLwogCW1lbWNweSh3aXBoeS0+cGVybV9hZGRyLCB1c2JkZXYtPm5ldC0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAl3aXBoeS0+cHJpdmlkID0gcm5kaXNfd2lwaHlfcHJpdmlkOwpAQCAtMjQ1NCw3ICsyNzQ4LDcgQEAKIAkJCQkJfCBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOwogCXdpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDE7CiAKLQkvKiBUT0RPOiBmaWxsLW91dCBiYW5kIGluZm9ybWF0aW9uIGJhc2VkIG9uIHByaXYtPmNhcHMgKi8KKwkvKiBUT0RPOiBmaWxsLW91dCBiYW5kL2VuY3IgaW5mb3JtYXRpb24gYmFzZWQgb24gcHJpdi0+Y2FwcyAqLwogCXJuZGlzX3dsYW5fZ2V0X2NhcHModXNiZGV2KTsKIAogCW1lbWNweShwcml2LT5jaGFubmVscywgcm5kaXNfY2hhbm5lbHMsIHNpemVvZihybmRpc19jaGFubmVscykpOwpAQCAtMjQ2Niw2ICsyNzYwLDExIEBACiAJd2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnByaXYtPmJhbmQ7CiAJd2lwaHktPnNpZ25hbF90eXBlID0gQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDOwogCisJbWVtY3B5KHByaXYtPmNpcGhlcl9zdWl0ZXMsIHJuZGlzX2NpcGhlcl9zdWl0ZXMsCisJCQkJCQlzaXplb2Yocm5kaXNfY2lwaGVyX3N1aXRlcykpOworCXdpcGh5LT5jaXBoZXJfc3VpdGVzID0gcHJpdi0+Y2lwaGVyX3N1aXRlczsKKwl3aXBoeS0+bl9jaXBoZXJfc3VpdGVzID0gQVJSQVlfU0laRShybmRpc19jaXBoZXJfc3VpdGVzKTsKKwogCXNldF93aXBoeV9kZXYod2lwaHksICZ1c2JkZXYtPnVkZXYtPmRldik7CiAKIAlpZiAod2lwaHlfcmVnaXN0ZXIod2lwaHkpKSB7CkBAIC0yNDc1LDE4ICsyNzc0LDE5IEBACiAKIAlzZXRfZGVmYXVsdF9pd19wYXJhbXModXNiZGV2KTsKIAotCS8qIHR1cm4gcmFkaW8gb24gKi8KLQlwcml2LT5yYWRpb19vbiA9IDE7Ci0JZGlzYXNzb2NpYXRlKHVzYmRldiwgMSk7Ci0JbmV0aWZfY2Fycmllcl9vZmYodXNiZGV2LT5uZXQpOworCS8qIHNldCBkZWZhdWx0IHJ0cy9mcmFnICovCisJcm5kaXNfc2V0X3dpcGh5X3BhcmFtcyh3aXBoeSwKKwkJCVdJUEhZX1BBUkFNX0ZSQUdfVEhSRVNIT0xEIHwgV0lQSFlfUEFSQU1fUlRTX1RIUkVTSE9MRCk7CiAKLQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c3RhdHNfd29yaywKLQkJcm91bmRfamlmZmllc19yZWxhdGl2ZShTVEFUU19VUERBVEVfSklGRklFUykpOworCS8qIHR1cm4gcmFkaW8gb24gKi8KKwlwcml2LT5yYWRpb19vbiA9IHRydWU7CisJZGlzYXNzb2NpYXRlKHVzYmRldiwgdHJ1ZSk7CisJbmV0aWZfY2Fycmllcl9vZmYodXNiZGV2LT5uZXQpOwogCiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5zdGF0c193b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmRldl9wb2xsZXJfd29yayk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5zY2FuX3dvcmspOwogCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPndvcmspOwogCWZsdXNoX3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOwpAQCAtMjQ5NiwxNSArMjc5NiwxNCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLQogc3RhdGljIHZvaWQgcm5kaXNfd2xhbl91bmJpbmQoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwogCiAJLyogdHVybiByYWRpbyBvZmYgKi8KLQlkaXNhc3NvY2lhdGUodXNiZGV2LCAwKTsKKwlkaXNhc3NvY2lhdGUodXNiZGV2LCBmYWxzZSk7CiAKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPnN0YXRzX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+ZGV2X3BvbGxlcl93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPnNjYW5fd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+d29yayk7CiAJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CkBAIC0yNTE5LDUwICsyODE4LDEwMCBAQAogCXdpcGh5X2ZyZWUocHJpdi0+d2Rldi53aXBoeSk7CiB9CiAKLQogc3RhdGljIGludCBybmRpc193bGFuX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKnVzYmRldikKIHsKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOworCWludCByZXR2YWw7CisKKwlkZXZkYmcodXNiZGV2LCAicm5kaXNfd2xhbl9yZXNldCIpOworCisJcmV0dmFsID0gcm5kaXNfcmVzZXQodXNiZGV2KTsKKwlpZiAocmV0dmFsKQorCQlkZXZ3YXJuKHVzYmRldiwgInJuZGlzX3Jlc2V0KCkgZmFpbGVkOiAlZCIsIHJldHZhbCk7CisKKwkvKiBybmRpc19yZXNldCBjbGVhcmVkIG11bHRpY2FzdCBsaXN0LCBzbyByZXN0b3JlIGhlcmUuCisJICAgKHNldF9tdWx0aWNhc3RfbGlzdCgpIGFsc28gdHVybnMgb24gY3VycmVudCBwYWNrZXQgZmlsdGVyKSAqLworCXNldF9tdWx0aWNhc3RfbGlzdCh1c2JkZXYpOworCisJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmRldl9wb2xsZXJfd29yaywKKwkJcm91bmRfamlmZmllc19yZWxhdGl2ZShERVZJQ0VfUE9MTEVSX0pJRkZJRVMpKTsKKwogCXJldHVybiBkZWF1dGhlbnRpY2F0ZSh1c2JkZXYpOwogfQogCitzdGF0aWMgaW50IHJuZGlzX3dsYW5fc3RvcChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKKwlpbnQgcmV0dmFsOworCV9fbGUzMiBmaWx0ZXI7CisKKwlkZXZkYmcodXNiZGV2LCAicm5kaXNfd2xhbl9zdG9wIik7CisKKwlyZXR2YWwgPSBkaXNhc3NvY2lhdGUodXNiZGV2LCBmYWxzZSk7CisKKwlwcml2LT53b3JrX3BlbmRpbmcgPSAwOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+ZGV2X3BvbGxlcl93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPnNjYW5fd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+d29yayk7CisJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CisKKwlpZiAocHJpdi0+c2Nhbl9yZXF1ZXN0KSB7CisJCWNmZzgwMjExX3NjYW5fZG9uZShwcml2LT5zY2FuX3JlcXVlc3QsIHRydWUpOworCQlwcml2LT5zY2FuX3JlcXVlc3QgPSBOVUxMOworCX0KKworCS8qIFNldCBjdXJyZW50IHBhY2tldCBmaWx0ZXIgemVybyB0byBibG9jayByZWNlaXZpbmcgZGF0YSBwYWNrZXRzIGZyb20KKwkgICBkZXZpY2UuICovCisJZmlsdGVyID0gMDsKKwlybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIsICZmaWx0ZXIsCisJCQkJCQkJCXNpemVvZihmaWx0ZXIpKTsKKworCXJldHVybiByZXR2YWw7Cit9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JYmNtNDMyMGJfaW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPQkiV2lyZWxlc3MgUk5ESVMgZGV2aWNlLCBCQ000MzIwYiBiYXNlZCIsCi0JLmZsYWdzID0JRkxBR19XTEFOIHwgRkxBR19GUkFNSU5HX1JOIHwgRkxBR19OT19TRVRJTlQsCisJLmZsYWdzID0JRkxBR19XTEFOIHwgRkxBR19GUkFNSU5HX1JOIHwgRkxBR19OT19TRVRJTlQgfAorCQkJCUZMQUdfQVZPSURfVU5MSU5LX1VSQlMsCiAJLmJpbmQgPQkJcm5kaXNfd2xhbl9iaW5kLAogCS51bmJpbmQgPQlybmRpc193bGFuX3VuYmluZCwKIAkuc3RhdHVzID0Jcm5kaXNfc3RhdHVzLAogCS5yeF9maXh1cCA9CXJuZGlzX3J4X2ZpeHVwLAogCS50eF9maXh1cCA9CXJuZGlzX3R4X2ZpeHVwLAogCS5yZXNldCA9CXJuZGlzX3dsYW5fcmVzZXQsCisJLnN0b3AgPQkJcm5kaXNfd2xhbl9zdG9wLAogCS5lYXJseV9pbml0ID0JYmNtNDMyMGJfZWFybHlfaW5pdCwKLQkubGlua19jaGFuZ2UgPQlybmRpc193bGFuX2xpbmtfY2hhbmdlLAorCS5pbmRpY2F0aW9uID0Jcm5kaXNfd2xhbl9pbmRpY2F0aW9uLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwliY200MzIwYV9pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9CSJXaXJlbGVzcyBSTkRJUyBkZXZpY2UsIEJDTTQzMjBhIGJhc2VkIiwKLQkuZmxhZ3MgPQlGTEFHX1dMQU4gfCBGTEFHX0ZSQU1JTkdfUk4gfCBGTEFHX05PX1NFVElOVCwKKwkuZmxhZ3MgPQlGTEFHX1dMQU4gfCBGTEFHX0ZSQU1JTkdfUk4gfCBGTEFHX05PX1NFVElOVCB8CisJCQkJRkxBR19BVk9JRF9VTkxJTktfVVJCUywKIAkuYmluZCA9CQlybmRpc193bGFuX2JpbmQsCiAJLnVuYmluZCA9CXJuZGlzX3dsYW5fdW5iaW5kLAogCS5zdGF0dXMgPQlybmRpc19zdGF0dXMsCiAJLnJ4X2ZpeHVwID0Jcm5kaXNfcnhfZml4dXAsCiAJLnR4X2ZpeHVwID0Jcm5kaXNfdHhfZml4dXAsCiAJLnJlc2V0ID0Jcm5kaXNfd2xhbl9yZXNldCwKKwkuc3RvcCA9CQlybmRpc193bGFuX3N0b3AsCiAJLmVhcmx5X2luaXQgPQliY200MzIwYV9lYXJseV9pbml0LAotCS5saW5rX2NoYW5nZSA9CXJuZGlzX3dsYW5fbGlua19jaGFuZ2UsCisJLmluZGljYXRpb24gPQlybmRpc193bGFuX2luZGljYXRpb24sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIHJuZGlzX3dsYW5faW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPQkiV2lyZWxlc3MgUk5ESVMgZGV2aWNlIiwKLQkuZmxhZ3MgPQlGTEFHX1dMQU4gfCBGTEFHX0ZSQU1JTkdfUk4gfCBGTEFHX05PX1NFVElOVCwKKwkuZmxhZ3MgPQlGTEFHX1dMQU4gfCBGTEFHX0ZSQU1JTkdfUk4gfCBGTEFHX05PX1NFVElOVCB8CisJCQkJRkxBR19BVk9JRF9VTkxJTktfVVJCUywKIAkuYmluZCA9CQlybmRpc193bGFuX2JpbmQsCiAJLnVuYmluZCA9CXJuZGlzX3dsYW5fdW5iaW5kLAogCS5zdGF0dXMgPQlybmRpc19zdGF0dXMsCiAJLnJ4X2ZpeHVwID0Jcm5kaXNfcnhfZml4dXAsCiAJLnR4X2ZpeHVwID0Jcm5kaXNfdHhfZml4dXAsCiAJLnJlc2V0ID0Jcm5kaXNfd2xhbl9yZXNldCwKKwkuc3RvcCA9CQlybmRpc193bGFuX3N0b3AsCiAJLmVhcmx5X2luaXQgPQliY200MzIwYV9lYXJseV9pbml0LAotCS5saW5rX2NoYW5nZSA9CXJuZGlzX3dsYW5fbGlua19jaGFuZ2UsCisJLmluZGljYXRpb24gPQlybmRpc193bGFuX2luZGljYXRpb24sCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwppbmRleCA4YWFiM2U2Li5lZDFmOTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwpAQCAtMSw4ICsxLDggQEAKIG1lbnVjb25maWcgUlQyWDAwCiAJdHJpc3RhdGUgIlJhbGluayBkcml2ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExCiAJLS0taGVscC0tLQotCSAgVGhpcyB3aWxsIGVuYWJsZSB0aGUgZXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIHRoZSBSYWxpbmsgZHJpdmVycywKKwkgIFRoaXMgd2lsbCBlbmFibGUgdGhlIHN1cHBvcnQgZm9yIHRoZSBSYWxpbmsgZHJpdmVycywKIAkgIGRldmVsb3BlZCBpbiB0aGUgcnQyeDAwIHByb2plY3QgPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4uCiAKIAkgIFRoZXNlIGRyaXZlcnMgbWFrZSB1c2Ugb2YgdGhlIG1hYzgwMjExIHN0YWNrLgpAQCAtNzksMTQgKzc5LDE0IEBACiAKIGNvbmZpZyBSVDI4MDBVU0IKIAl0cmlzdGF0ZSAiUmFsaW5rIHJ0MjgwMCAoVVNCKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCCisJZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFJUMlgwMF9MSUJfVVNCCiAJc2VsZWN0IFJUMlgwMF9MSUJfSFQKIAlzZWxlY3QgUlQyWDAwX0xJQl9GSVJNV0FSRQogCXNlbGVjdCBSVDJYMDBfTElCX0NSWVBUTwogCXNlbGVjdCBDUkNfQ0NJVFQKIAktLS1oZWxwLS0tCi0JICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgcnQyODAwIHdpcmVsZXNzIGNoaXBzZXQgZmFtaWx5LgorCSAgVGhpcyBhZGRzIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBydDI4MDAgd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkuCiAJICBTdXBwb3J0ZWQgY2hpcHM6IFJUMjc3MCwgUlQyODcwICYgUlQzMDcwLgogCiAJICBXaGVuIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCB0aGlzIGRyaXZlciB3aWxsIGJlIGNhbGxlZCAicnQyODAwdXNiLmtvIi4KQEAgLTExMiwxNCArMTEyLDYgQEAKIGNvbmZpZyBSVDJYMDBfTElCX0NSWVBUTwogCWJvb2xlYW4KIAotY29uZmlnIFJUMlgwMF9MSUJfUkZLSUxMCi0JYm9vbGVhbgotCWRlZmF1bHQgeSBpZiAoUlQyWDAwX0xJQj15ICYmIElOUFVUPXkpIHx8IChSVDJYMDBfTElCPW0gJiYgSU5QVVQhPW4pCi0Jc2VsZWN0IElOUFVUX1BPTExERVYKLQotY29tbWVudCAicnQyeDAwIHJma2lsbCBzdXBwb3J0IGRpc2FibGVkIGR1ZSB0byBtb2R1bGFyaXplZCBJTlBVVCBhbmQgYnVpbHQtaW4gcnQyeDAwIgotCWRlcGVuZHMgb24gUlQyWDAwX0xJQj15ICYmIElOUFVUPW0KLQogY29uZmlnIFJUMlgwMF9MSUJfTEVEUwogCWJvb2xlYW4KIAlkZWZhdWx0IHkgaWYgKFJUMlgwMF9MSUI9eSAmJiBMRURTX0NMQVNTPXkpIHx8IChSVDJYMDBfTElCPW0gJiYgTEVEU19DTEFTUyE9bikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9NYWtlZmlsZQppbmRleCBiZmM3MjI2Li4xMzA0M2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL01ha2VmaWxlCkBAIC01LDcgKzUsNiBAQAogcnQyeDAwbGliLXkJCQkJKz0gcnQyeDAwbGluay5vCiBydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTKQkrPSBydDJ4MDBkZWJ1Zy5vCiBydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9DUllQVE8pCSs9IHJ0MngwMGNyeXB0by5vCi1ydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwpCSs9IHJ0MngwMHJma2lsbC5vCiBydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9GSVJNV0FSRSkJKz0gcnQyeDAwZmlybXdhcmUubwogcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfTEVEUykJKz0gcnQyeDAwbGVkcy5vCiBydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9IVCkJKz0gcnQyeDAwaHQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCmluZGV4IDQzNWY5NDUuLjc5OGY2MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKQEAgLTE5OSw3ICsxOTksNiBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCiAKLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKIHN0YXRpYyBpbnQgcnQyNDAwcGNpX3Jma2lsbF9wb2xsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJdTMyIHJlZzsKQEAgLTIwNyw5ICsyMDYsNiBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgR1BJT0NTUiwgJnJlZyk7CiAJcmV0dXJuIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIEdQSU9DU1JfQklUMCk7CiB9Ci0jZWxzZQotI2RlZmluZSBydDI0MDBwY2lfcmZraWxsX3BvbGwJTlVMTAotI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLwogCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfTEVEUwogc3RhdGljIHZvaWQgcnQyNDAwcGNpX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LApAQCAtMzM1LDkgKzMzMSw4IEBACiAJcHJlYW1ibGVfbWFzayA9IGVycC0+c2hvcnRfcHJlYW1ibGUgPDwgMzsKIAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IxLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX0FDS19USU1FT1VULCBlcnAtPmFja190aW1lb3V0KTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX0FDS19DT05TVU1FX1RJTUUsCi0JCQkgICBlcnAtPmFja19jb25zdW1lX3RpbWUpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjFfQUNLX1RJTUVPVVQsIDB4MWZmKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX0FDS19DT05TVU1FX1RJTUUsIDB4MTNhKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX1RTRl9PRkZTRVQsIElFRUU4MDIxMV9IRUFERVIpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjFfQVVUT1JFU1BPTkRFUiwgMSk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IxLCByZWcpOwpAQCAtMTA3Myw4ICsxMDY4LDYgQEAKIAkgKiBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgc2VuZGluZyBvdXQgaW52YWxpZCBkYXRhLgogCSAqLwogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ1NSMTQsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9UU0ZfQ09VTlQsIDApOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9UQkNOLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfQkVBQ09OX0dFTiwgMCk7CiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTQsIHJlZyk7CiAKQEAgLTEzOTEsMTAgKzEzODQsOCBAQAogCS8qCiAJICogRGV0ZWN0IGlmIHRoaXMgZGV2aWNlIGhhcyBhbiBoYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvLgogCSAqLwotI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9IQVJEV0FSRV9SQURJTykpCiAJCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKTsKLSNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KIAogCS8qCiAJICogQ2hlY2sgaWYgdGhlIEJCUCB0dW5pbmcgc2hvdWxkIGJlIGVuYWJsZWQuCkBAIC0xNTY3LDEyICsxNTU4LDE0IEBACiAJLnJlbW92ZV9pbnRlcmZhY2UJPSBydDJ4MDBtYWNfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnCQkJPSBydDJ4MDBtYWNfY29uZmlnLAogCS5jb25maWd1cmVfZmlsdGVyCT0gcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIsCisJLnNldF90aW0JCT0gcnQyeDAwbWFjX3NldF90aW0sCiAJLmdldF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3N0YXRzLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQyNDAwcGNpX2NvbmZfdHgsCiAJLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0MjQwMHBjaV9nZXRfdHNmLAogCS50eF9sYXN0X2JlYWNvbgkJPSBydDI0MDBwY2lfdHhfbGFzdF9iZWFjb24sCisJLnJma2lsbF9wb2xsCQk9IHJ0MngwMG1hY19yZmtpbGxfcG9sbCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyeDAwbGliX29wcyBydDI0MDBwY2lfcnQyeDAwX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaAppbmRleCBlYzNiMDA0Li5jY2Q2NDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oCkBAIC05MjgsNyArOTI4LDcgQEAKICNkZWZpbmUgUlhEX1c3X1JFU0VSVkVECQkJRklFTEQzMigweGZmZmZmZmZmKQogCiAvKgotICogTWFjcm8ncyBmb3IgY29udmVydGluZyB0eHBvd2VyIGZyb20gRUVQUk9NIHRvIG1hYzgwMjExIHZhbHVlCisgKiBNYWNyb3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBtYWM4MDIxMSB2YWx1ZQogICogYW5kIGZyb20gbWFjODAyMTEgdmFsdWUgdG8gcmVnaXN0ZXIgdmFsdWUuCiAgKiBOT1RFOiBMb2dpY3MgaW4gcnQyNDAwcGNpIGZvciB0eHBvd2VyIGFyZSByZXZlcnNlZAogICogY29tcGFyZWQgdG8gdGhlIG90aGVyIHJ0MngwMCBkcml2ZXJzLiBBIGhpZ2hlciB0eHBvd2VyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKaW5kZXggMDhiMzBkMC4uMmU4NzJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYwpAQCAtMTk5LDcgKzE5OSw2IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMgKi8KIAotI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAogc3RhdGljIGludCBydDI1MDBwY2lfcmZraWxsX3BvbGwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAl1MzIgcmVnOwpAQCAtMjA3LDkgKzIwNiw2IEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBHUElPQ1NSLCAmcmVnKTsKIAlyZXR1cm4gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgR1BJT0NTUl9CSVQwKTsKIH0KLSNlbHNlCi0jZGVmaW5lIHJ0MjUwMHBjaV9yZmtpbGxfcG9sbAlOVUxMCi0jZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCiAKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9MRURTCiBzdGF0aWMgdm9pZCBydDI1MDBwY2lfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCkBAIC0zNDEsOSArMzM3LDggQEAKIAlwcmVhbWJsZV9tYXNrID0gZXJwLT5zaG9ydF9wcmVhbWJsZSA8PCAzOwogCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjEsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjFfQUNLX1RJTUVPVVQsIGVycC0+YWNrX3RpbWVvdXQpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjFfQUNLX0NPTlNVTUVfVElNRSwKLQkJCSAgIGVycC0+YWNrX2NvbnN1bWVfdGltZSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMV9BQ0tfVElNRU9VVCwgMHgxNjIpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjFfQUNLX0NPTlNVTUVfVElNRSwgMHhhMik7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMV9UU0ZfT0ZGU0VULCBJRUVFODAyMTFfSEVBREVSKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX0FVVE9SRVNQT05ERVIsIDEpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMSwgcmVnKTsKQEAgLTEyMzEsOCArMTIyNiw2IEBACiAJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGJlIHNlbmRpbmcgb3V0IGludmFsaWQgZGF0YS4KIAkgKi8KIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjE0LCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVFNGX0NPVU5ULCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVEJDTiwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X0JFQUNPTl9HRU4sIDApOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCByZWcpOwogCkBAIC0xNTQ4LDEwICsxNTQxLDggQEAKIAkvKgogCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYW4gaGFyZHdhcmUgY29udHJvbGxlZCByYWRpby4KIAkgKi8KLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfSEFSRFdBUkVfUkFESU8pKQogCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0jZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCiAKIAkvKgogCSAqIENoZWNrIGlmIHRoZSBCQlAgdHVuaW5nIHNob3VsZCBiZSBlbmFibGVkLgpAQCAtMTg2NiwxMiArMTg1NywxNCBAQAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gcnQyeDAwbWFjX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gcnQyeDAwbWFjX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyLAorCS5zZXRfdGltCQk9IHJ0MngwMG1hY19zZXRfdGltLAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25mX3R4CQk9IHJ0MngwMG1hY19jb25mX3R4LAogCS5nZXRfdHhfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSBydDI1MDBwY2lfZ2V0X3RzZiwKIAkudHhfbGFzdF9iZWFjb24JCT0gcnQyNTAwcGNpX3R4X2xhc3RfYmVhY29uLAorCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQyNTAwcGNpX3J0MngwMF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmgKaW5kZXggY2UyZjA2NS4uNTRkMzc5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaApAQCAtMTIxOCw3ICsxMjE4LDcgQEAKICNkZWZpbmUgUlhEX1cxMF9EUk9QCQkJRklFTEQzMigweDAwMDAwMDAxKQogCiAvKgotICogTWFjcm8ncyBmb3IgY29udmVydGluZyB0eHBvd2VyIGZyb20gRUVQUk9NIHRvIG1hYzgwMjExIHZhbHVlCisgKiBNYWNyb3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBtYWM4MDIxMSB2YWx1ZQogICogYW5kIGZyb20gbWFjODAyMTEgdmFsdWUgdG8gcmVnaXN0ZXIgdmFsdWUuCiAgKi8KICNkZWZpbmUgTUlOX1RYUE9XRVIJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCmluZGV4IGNlNzU0MjYuLjIyZGQ2ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKQEAgLTI3Nyw3ICsyNzcsNiBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCiAKLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKIHN0YXRpYyBpbnQgcnQyNTAwdXNiX3Jma2lsbF9wb2xsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJdTE2IHJlZzsKQEAgLTI4NSw5ICsyODQsNiBAQAogCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjE5LCAmcmVnKTsKIAlyZXR1cm4gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjE5X0JJVDcpOwogfQotI2Vsc2UKLSNkZWZpbmUgcnQyNTAwdXNiX3Jma2lsbF9wb2xsCU5VTEwKLSNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KIAogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0xFRFMKIHN0YXRpYyB2b2lkIHJ0MjUwMHVzYl9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKQEAgLTQ5MiwxMCArNDg4LDYgQEAKIHsKIAl1MTYgcmVnOwogCi0JcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjEsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjFfQUNLX1RJTUVPVVQsIGVycC0+YWNrX3RpbWVvdXQpOwotCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMSwgcmVnKTsKLQogCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IxMCwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTBfQVVUT1JFU1BPTkRfUFJFQU1CTEUsCiAJCQkgICAhIWVycC0+c2hvcnRfcHJlYW1ibGUpOwpAQCAtMTI0Miw4ICsxMjM0LDYgQEAKIAkgKiBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgc2VuZGluZyBvdXQgaW52YWxpZCBkYXRhLgogCSAqLwogCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfVFNGX0NPVU5ULCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IxOV9UQkNOLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IxOV9CRUFDT05fR0VOLCAwKTsKIAlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjE5LCByZWcpOwogCkBAIC0xMjkxLDcgKzEyODEsNyBAQAogc3RhdGljIHZvaWQgcnQyNTAwdXNiX2tpY2tfdHhfcXVldWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxdWV1ZSkKIHsKLQl1MTYgcmVnOworCXUxNiByZWcsIHJlZzA7CiAKIAlpZiAocXVldWUgIT0gUUlEX0JFQUNPTikgewogCQlydDJ4MDB1c2Jfa2lja190eF9xdWV1ZShydDJ4MDBkZXYsIHF1ZXVlKTsKQEAgLTEzMDIsMTYgKzEyOTIsMTkgQEAKIAlpZiAoIXJ0MngwMF9nZXRfZmllbGQxNihyZWcsIFRYUlhfQ1NSMTlfQkVBQ09OX0dFTikpIHsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfVFNGX0NPVU5ULCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfVEJDTiwgMSk7CisJCXJlZzAgPSByZWc7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjE5X0JFQUNPTl9HRU4sIDEpOwogCQkvKgogCQkgKiBCZWFjb24gZ2VuZXJhdGlvbiB3aWxsIGZhaWwgaW5pdGlhbGx5LgotCQkgKiBUbyBwcmV2ZW50IHRoaXMgd2UgbmVlZCB0byByZWdpc3RlciB0aGUgVFhSWF9DU1IxOQotCQkgKiByZWdpc3RlciBzZXZlcmFsIHRpbWVzLgorCQkgKiBUbyBwcmV2ZW50IHRoaXMgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIFRYUlhfQ1NSMTkKKwkJICogcmVnaXN0ZXIgc2V2ZXJhbCB0aW1lcyAocmVnMCBpcyB0aGUgc2FtZSBhcyByZWcKKwkJICogZXhjZXB0IGZvciBUWFJYX0NTUjE5X0JFQUNPTl9HRU4sIHdoaWNoIGlzIDAgaW4gcmVnMAorCQkgKiBhbmQgMSBpbiByZWcpLgogCQkgKi8KIAkJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgcmVnKTsKLQkJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgMCk7CisJCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMTksIHJlZzApOwogCQlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjE5LCByZWcpOwotCQlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjE5LCAwKTsKKwkJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgcmVnMCk7CiAJCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMTksIHJlZyk7CiAJfQogfQpAQCAtMTYwMywxMCArMTU5Niw4IEBACiAJLyoKIAkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIGFuIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCiAJICovCi0jaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0hBUkRXQVJFX1JBRElPKSkKIAkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLwogCiAJLyoKIAkgKiBDaGVjayBpZiB0aGUgQkJQIHR1bmluZyBzaG91bGQgYmUgZGlzYWJsZWQuCkBAIC0xODc5LDcgKzE4NzAsNiBAQAogCSAqLwogCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0JFQUNPTl9HVUFSRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9TQ0hFRFVMRUQsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAlpZiAoIW1vZHBhcmFtX25vaHdjcnlwdCkgewogCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAJCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9DT1BZX0lWLCAmcnQyeDAwZGV2LT5mbGFncyk7CkBAIC0xOTAyLDExICsxODkyLDEzIEBACiAJLnJlbW92ZV9pbnRlcmZhY2UJPSBydDJ4MDBtYWNfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnCQkJPSBydDJ4MDBtYWNfY29uZmlnLAogCS5jb25maWd1cmVfZmlsdGVyCT0gcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIsCisJLnNldF90aW0JCT0gcnQyeDAwbWFjX3NldF90aW0sCiAJLnNldF9rZXkJCT0gcnQyeDAwbWFjX3NldF9rZXksCiAJLmdldF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3N0YXRzLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQyeDAwbWFjX2NvbmZfdHgsCiAJLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAorCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQyNTAwdXNiX3J0MngwMF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmgKaW5kZXggNWJjNDZmZS4uYjAxZWRjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuaApAQCAtODMxLDcgKzgzMSw3IEBACiAjZGVmaW5lIFJYRF9XM19FSVYJCQlGSUVMRDMyKDB4ZmZmZmZmZmYpCiAKIC8qCi0gKiBNYWNybydzIGZvciBjb252ZXJ0aW5nIHR4cG93ZXIgZnJvbSBFRVBST00gdG8gbWFjODAyMTEgdmFsdWUKKyAqIE1hY3JvcyBmb3IgY29udmVydGluZyB0eHBvd2VyIGZyb20gRUVQUk9NIHRvIG1hYzgwMjExIHZhbHVlCiAgKiBhbmQgZnJvbSBtYWM4MDIxMSB2YWx1ZSB0byByZWdpc3RlciB2YWx1ZS4KICAqLwogI2RlZmluZSBNSU5fVFhQT1dFUgkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKaW5kZXggMzc1NjE2Ni4uYTA4NDA3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwpAQCAtMjY0LDcgKzI2NCw2IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMgKi8KIAotI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAogc3RhdGljIGludCBydDI4MDB1c2JfcmZraWxsX3BvbGwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAl1MzIgcmVnOwpAQCAtMjcyLDkgKzI3MSw2IEBACiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBHUElPX0NUUkxfQ0ZHLCAmcmVnKTsKIAlyZXR1cm4gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgR1BJT19DVFJMX0NGR19CSVQyKTsKIH0KLSNlbHNlCi0jZGVmaW5lIHJ0MjgwMHVzYl9yZmtpbGxfcG9sbAlOVUxMCi0jZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCiAKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9MRURTCiBzdGF0aWMgdm9pZCBydDI4MDB1c2JfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCkBAIC01MjIsNyArNTE4LDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhfRklMVEVSX0NGR19EUk9QX1JUUywKIAkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX0NPTlRST0wpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhfRklMVEVSX0NGR19EUk9QX1BTUE9MTCwKLQkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX0NPTlRST0wpKTsKKwkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX1BTUE9MTCkpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWF9GSUxURVJfQ0ZHX0RST1BfQkEsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBSWF9GSUxURVJfQ0ZHX0RST1BfQkFSLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhfRklMVEVSX0NGR19EUk9QX0NOVEwsCkBAIC01ODQsOCArNTgwLDcgQEAKIAl1MzIgcmVnOwogCiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9USU1FT1VUX0NGRywgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1RJTUVPVVRfQ0ZHX1JYX0FDS19USU1FT1VULAotCQkJICAgRElWX1JPVU5EX1VQKGVycC0+YWNrX3RpbWVvdXQsIGVycC0+c2xvdF90aW1lKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1RJTUVPVVRfQ0ZHX1JYX0FDS19USU1FT1VULCAweDIwKTsKIAlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9USU1FT1VUX0NGRywgcmVnKTsKIAogCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQVVUT19SU1BfQ0ZHLCAmcmVnKTsKQEAgLTE0NjcsNiArMTQ2MiwxMCBAQAogCS8qCiAJICogQVNJQyB3aWxsIGtlZXAgZ2FyYmFnZSB2YWx1ZSBhZnRlciBib290LCBjbGVhciBlbmNyeXB0aW9uIGtleXMuCiAJICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwKKwkJCQkJIFNIQVJFRF9LRVlfTU9ERV9FTlRSWShpKSwgMCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKIAkJdTMyIHdjaWRbMl0gPSB7IDB4ZmZmZmZmZmYsIDB4MDBmZmZmZmYgfTsKIAkJcnQyeDAwdXNiX3JlZ2lzdGVyX211bHRpd3JpdGUocnQyeDAwZGV2LCBNQUNfV0NJRF9FTlRSWShpKSwKQEAgLTE0NzYsMTAgKzE0NzUsNiBAQAogCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfSVZFSVZfRU5UUlkoaSksIDApOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LAotCQkJCQkgU0hBUkVEX0tFWV9NT0RFX0VOVFJZKGkpLCAwKTsKLQogCS8qCiAJICogQ2xlYXIgYWxsIGJlYWNvbnMKIAkgKiBGb3IgdGhlIEJlYWNvbiBiYXNlIHJlZ2lzdGVycyB3ZSBvbmx5IG5lZWQgdG8gY2xlYXIKQEAgLTE1MjQsNyArMTUxOSw3IEBACiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBMR19GQktfQ0ZHMCwgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExHX0ZCS19DRkcwX09GRE1NQ1MwRkJLLCA4KTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEdfRkJLX0NGRzBfT0ZETU1DUzFGQkssIDgpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBMR19GQktfQ0ZHMF9PRkRNTUNTMkZCSywgMyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExHX0ZCS19DRkcwX09GRE1NQ1MyRkJLLCA5KTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEdfRkJLX0NGRzBfT0ZETU1DUzNGQkssIDEwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEdfRkJLX0NGRzBfT0ZETU1DUzRGQkssIDExKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEdfRkJLX0NGRzBfT0ZETU1DUzVGQkssIDEyKTsKQEAgLTE5MTQsNyArMTkwOSw3IEBACiAJCS8qCiAJCSAqIEJlZm9yZSB0aGUgcmFkaW8gY2FuIGJlIGVuYWJsZWQsIHRoZSBkZXZpY2UgZmlyc3QgaGFzCiAJCSAqIHRvIGJlIHdva2VuIHVwLiBBZnRlciB0aGF0IGl0IG5lZWRzIGEgYml0IG9mIHRpbWUKLQkJICogdG8gYmUgZnVsbHkgYXdha2UgYW5kIHRoZSByYWRpbyBjYW4gYmUgZW5hYmxlZC4KKwkJICogdG8gYmUgZnVsbHkgYXdha2UgYW5kIHRoZW4gdGhlIHJhZGlvIGNhbiBiZSBlbmFibGVkLgogCQkgKi8KIAkJcnQyODAwdXNiX3NldF9zdGF0ZShydDJ4MDBkZXYsIFNUQVRFX0FXQUtFKTsKIAkJbXNsZWVwKDEpOwpAQCAtMTkyMiw3ICsxOTE3LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBTVEFURV9SQURJT19PRkY6CiAJCS8qCi0JCSAqIEFmdGVyIHRoZSByYWRpbyBoYXMgYmVlbiBkaXNhYmxlZSwgdGhlIGRldmljZSBzaG91bGQKKwkJICogQWZ0ZXIgdGhlIHJhZGlvIGhhcyBiZWVuIGRpc2FibGVkLCB0aGUgZGV2aWNlIHNob3VsZAogCQkgKiBiZSBwdXQgdG8gc2xlZXAgZm9yIHBvd2Vyc2F2aW5nLgogCQkgKi8KIAkJcnQyODAwdXNiX2Rpc2FibGVfcmFkaW8ocnQyeDAwZGV2KTsKQEAgLTE5OTksMTEgKzE5OTQsMTEgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYV0lfVzFfQldfV0lOX1NJWkUsIHR4ZGVzYy0+YmFfc2l6ZSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWFdJX1cxX1dJUkVMRVNTX0NMSV9JRCwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBULCAmdHhkZXNjLT5mbGFncykgPwotCQkJICAgICAgIHR4ZGVzYy0+a2V5X2lkeCA6IDB4ZmYpOworCQkJICAgICAgIChza2JkZXNjLT5lbnRyeS0+ZW50cnlfaWR4ICsgMSkgOiAweGZmKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYV0lfVzFfTVBEVV9UT1RBTF9CWVRFX0NPVU5ULAogCQkJICAgc2tiLT5sZW4gLSB0eGRlc2MtPmwycGFkKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYV0lfVzFfUEFDS0VUSUQsCi0JCQkgICBza2JkZXNjLT5lbnRyeS0+ZW50cnlfaWR4KTsKKwkJCSAgIHNrYmRlc2MtPmVudHJ5LT5xdWV1ZS0+cWlkICsgMSk7CiAJcnQyeDAwX2Rlc2Nfd3JpdGUodHh3aSwgMSwgd29yZCk7CiAKIAkvKgpAQCAtMjA1NCw4ICsyMDQ5LDYgQEAKIAkgKiBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgc2VuZGluZyBvdXQgaW52YWxpZCBkYXRhLgogCSAqLwogCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RTRl9USUNLSU5HLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RCVFRfRU5BQkxFLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX0JFQUNPTl9HRU4sIDApOwogCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgcmVnKTsKIApAQCAtMjE2OSw4ICsyMTYyLDEwIEBACiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyeGQwLCBSWERfVzBfTVlfQlNTKSkKIAkJcnhkZXNjLT5kZXZfZmxhZ3MgfD0gUlhET05FX01ZX0JTUzsKIAotCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMCwgUlhEX1cwX0wyUEFEKSkKKwlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYRF9XMF9MMlBBRCkpIHsKIAkJcnhkZXNjLT5kZXZfZmxhZ3MgfD0gUlhET05FX0wyUEFEOworCQlza2JkZXNjLT5mbGFncyB8PSBTS0JERVNDX0wyX1BBRERFRDsKKwl9CiAKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4d2kxLCBSWFdJX1cxX1NIT1JUX0dJKSkKIAkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX1NIT1JUX0dJOwpAQCAtMjIyNCwxMCArMjIxOSw4IEBACiAJICovCiAJbWFjID0gcnQyeDAwX2VlcHJvbV9hZGRyKHJ0MngwMGRldiwgRUVQUk9NX01BQ19BRERSXzApOwogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihtYWMpKSB7Ci0JCURFQ0xBUkVfTUFDX0JVRihtYWNidWYpOwotCiAJCXJhbmRvbV9ldGhlcl9hZGRyKG1hYyk7Ci0JCUVFUFJPTShydDJ4MDBkZXYsICJNQUM6ICVzXG4iLCBwcmludF9tYWMobWFjYnVmLCBtYWMpKTsKKwkJRUVQUk9NKHJ0MngwMGRldiwgIk1BQzogJXBNXG4iLCBtYWMpOwogCX0KIAogCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9BTlRFTk5BLCAmd29yZCk7CkBAIC0yMzg1LDEwICsyMzc4LDggQEAKIAkvKgogCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYW4gaGFyZHdhcmUgY29udHJvbGxlZCByYWRpby4KIAkgKi8KLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19IV19SQURJTykpCiAJCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKTsKLSNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KIAogCS8qCiAJICogU3RvcmUgbGVkIHNldHRpbmdzLCBmb3IgY29ycmVjdCBsZWQgYmVoYXZpb3VyLgpAQCAtMjYzMiwxMCArMjYyMywxNiBAQAogCQlyZXR1cm4gcmV0dmFsOwogCiAJLyoKKwkgKiBUaGlzIGRldmljZSBoYXMgbXVsdGlwbGUgZmlsdGVycyBmb3IgY29udHJvbCBmcmFtZXMKKwkgKiBhbmQgaGFzIGEgc2VwYXJhdGUgZmlsdGVyIGZvciBQUyBQb2xsIGZyYW1lcy4KKwkgKi8KKwlfX3NldF9iaXQoRFJJVkVSX1NVUFBPUlRfQ09OVFJPTF9GSUxURVJTLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSX1BTUE9MTCwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCisJLyoKIAkgKiBUaGlzIGRldmljZSByZXF1aXJlcyBmaXJtd2FyZS4KIAkgKi8KIAlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfRklSTVdBUkUsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfU0NIRURVTEVELCAmcnQyeDAwZGV2LT5mbGFncyk7CiAJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0wyUEFELCAmcnQyeDAwZGV2LT5mbGFncyk7CiAJaWYgKCFtb2RwYXJhbV9ub2h3Y3J5cHQpCiAJCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKTsKQEAgLTI3OTIsNiArMjc4OSw3IEBACiAJLnJlbW92ZV9pbnRlcmZhY2UJPSBydDJ4MDBtYWNfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnCQkJPSBydDJ4MDBtYWNfY29uZmlnLAogCS5jb25maWd1cmVfZmlsdGVyCT0gcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIsCisJLnNldF90aW0JCT0gcnQyeDAwbWFjX3NldF90aW0sCiAJLnNldF9rZXkJCT0gcnQyeDAwbWFjX3NldF9rZXksCiAJLmdldF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3N0YXRzLAogCS5nZXRfdGtpcF9zZXEJCT0gcnQyODAwdXNiX2dldF90a2lwX3NlcSwKQEAgLTI4MDAsNiArMjc5OCw3IEBACiAJLmNvbmZfdHgJCT0gcnQyODAwdXNiX2NvbmZfdHgsCiAJLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0MjgwMHVzYl9nZXRfdHNmLAorCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQyODAwdXNiX3J0MngwMF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmgKaW5kZXggNjFhOGJlNi4uNGQ5OTkxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuaApAQCAtMzYsNiArMzYsOSBAQAogICogUkYyNzUwIDIuNEcvNUcgMVQyUgogICogUkYzMDIwIDIuNEcgMVQxUgogICogUkYyMDIwIDIuNEcgQi9HCisgKiBSRjMwMjEgMi40RyAxVDJSCisgKiBSRjMwMjIgMi40RyAyVDJSCisgKiBSRjMwNTIgMi40RyAyVDJSCiAgKi8KICNkZWZpbmUgUkYyODIwCQkJCTB4MDAwMQogI2RlZmluZSBSRjI4NTAJCQkJMHgwMDAyCkBAIC00Myw2ICs0Niw5IEBACiAjZGVmaW5lIFJGMjc1MAkJCQkweDAwMDQKICNkZWZpbmUgUkYzMDIwCQkJCTB4MDAwNQogI2RlZmluZSBSRjIwMjAJCQkJMHgwMDA2CisjZGVmaW5lIFJGMzAyMQkJCQkweDAwMDcKKyNkZWZpbmUgUkYzMDIyCQkJCTB4MDAwOAorI2RlZmluZSBSRjMwNTIJCQkJMHgwMDA5CiAKIC8qCiAgKiBSVDI4NzAgdmVyc2lvbgpAQCAtMTMwMCw4ICsxMzA2LDggQEAKICAqIFBBSVJXSVNFX0tFWV9UQUJMRV9CQVNFOiAzMi1ieXRlICogMjU2IGVudHJ5CiAgKiBNQUNfSVZFSVZfVEFCTEVfQkFTRTogOC1ieXRlICogMjU2LWVudHJ5CiAgKiBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRTogNC1ieXRlICogMjU2LWVudHJ5Ci0gKiBTSEFSRURfS0VZX1RBQkxFX0JBU0U6IDMyLWJ5dGUgKiAxNi1lbnRyeQotICogU0hBUkVEX0tFWV9NT0RFX0JBU0U6IDQtYnl0ZSAqIDE2LWVudHJ5CisgKiBTSEFSRURfS0VZX1RBQkxFX0JBU0U6IDMyIGJ5dGVzICogMzItZW50cnkKKyAqIFNIQVJFRF9LRVlfTU9ERV9CQVNFOiA0IGJpdHMgKiAzMi1lbnRyeQogICovCiAjZGVmaW5lIE1BQ19XQ0lEX0JBU0UJCQkweDE4MDAKICNkZWZpbmUgUEFJUldJU0VfS0VZX1RBQkxFX0JBU0UJCTB4NDAwMApAQCAtMTkyMSw3ICsxOTI3LDcgQEAKICNkZWZpbmUgUlhXSV9XM19TTlIxCQkJRklFTEQzMigweDAwMDBmZjAwKQogCiAvKgotICogTWFjcm8ncyBmb3IgY29udmVydGluZyB0eHBvd2VyIGZyb20gRUVQUk9NIHRvIG1hYzgwMjExIHZhbHVlCisgKiBNYWNyb3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBtYWM4MDIxMSB2YWx1ZQogICogYW5kIGZyb20gbWFjODAyMTEgdmFsdWUgdG8gcmVnaXN0ZXIgdmFsdWUuCiAgKi8KICNkZWZpbmUgTUlOX0dfVFhQT1dFUgkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKaW5kZXggNDljOWUyYy4uMjdiYzZiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaApAQCAtMTM0LDYgKzEzNCwxNyBAQAogCQkJCSAgR0VUX0RVUkFUSU9OKElFRUU4MDIxMV9IRUFERVIgKyBBQ0tfU0laRSwgMTApICkKIAogLyoKKyAqIFN0cnVjdHVyZSBmb3IgYXZlcmFnZSBjYWxjdWxhdGlvbgorICogVGhlIGF2ZyBmaWVsZCBjb250YWlucyB0aGUgYWN0dWFsIGF2ZXJhZ2UgdmFsdWUsCisgKiBidXQgYXZnX3dlaWdodCBpcyBpbnRlcm5hbGx5IHVzZWQgZHVyaW5nIGNhbGN1bGF0aW9ucworICogdG8gcHJldmVudCByb3VuZGluZyBlcnJvcnMuCisgKi8KK3N0cnVjdCBhdmdfdmFsIHsKKwlpbnQgYXZnOworCWludCBhdmdfd2VpZ2h0OworfTsKKworLyoKICAqIENoaXBzZXQgaWRlbnRpZmljYXRpb24KICAqIFRoZSBjaGlwc2V0IG9uIHRoZSBkZXZpY2UgaXMgY29tcG9zZWQgb2YgYSBSVCBhbmQgUkYgY2hpcC4KICAqIFRoZSBjaGlwc2V0IGNvbWJpbmF0aW9uIGlzIGltcG9ydGFudCBmb3IgZGV0ZXJtaW5pbmcgZGV2aWNlIGNhcGFiaWxpdGllcy4KQEAgLTI0NSwyMSArMjU2LDE4IEBACiAJc3RydWN0IGFudGVubmFfc2V0dXAgYWN0aXZlOwogCiAJLyoKLQkgKiBSU1NJIGluZm9ybWF0aW9uIGZvciB0aGUgZGlmZmVyZW50IGFudGVubmEncy4KLQkgKiBUaGVzZSBzdGF0aXN0aWNzIGFyZSB1c2VkIHRvIGRldGVybWluZSB3aGVuCi0JICogdG8gc3dpdGNoIGFudGVubmEgd2hlbiB1c2luZyBzb2Z0d2FyZSBkaXZlcnNpdHkuCi0JICoKLQkgKiAgICAgICAgcnNzaVswXSAtPiBBbnRlbm5hIEEgUlNTSQotCSAqICAgICAgICByc3NpWzFdIC0+IEFudGVubmEgQiBSU1NJCisJICogUlNTSSBoaXN0b3J5IGluZm9ybWF0aW9uIGZvciB0aGUgYW50ZW5uYS4KKwkgKiBVc2VkIHRvIGRldGVybWluZSB3aGVuIHRvIHN3aXRjaCBhbnRlbm5hCisJICogd2hlbiB1c2luZyBzb2Z0d2FyZSBkaXZlcnNpdHkuCiAJICovCi0JaW50IHJzc2lfaGlzdG9yeVsyXTsKKwlpbnQgcnNzaV9oaXN0b3J5OwogCiAJLyoKIAkgKiBDdXJyZW50IFJTU0kgYXZlcmFnZSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBhbnRlbm5hLgogCSAqIFNpbWlsYXIgdG8gdGhlIGF2Z19yc3NpIGluIHRoZSBsaW5rX3F1YWwgc3RydWN0dXJlCiAJICogdGhpcyB2YWx1ZSBpcyB1cGRhdGVkIGJ5IHVzaW5nIHRoZSB3YWxraW5nIGF2ZXJhZ2UuCiAJICovCi0JaW50IHJzc2lfYW50OworCXN0cnVjdCBhdmdfdmFsIHJzc2lfYW50OwogfTsKIAogLyoKQEAgLTI4OCw3ICsyOTYsNyBAQAogCS8qCiAJICogQ3VycmVudGx5IGFjdGl2ZSBhdmVyYWdlIFJTU0kgdmFsdWUKIAkgKi8KLQlpbnQgYXZnX3Jzc2k7CisJc3RydWN0IGF2Z192YWwgYXZnX3Jzc2k7CiAKIAkvKgogCSAqIEN1cnJlbnRseSBwcmVjYWxjdWxhdGVkIHBlcmNlbnRhZ2VzIG9mIHN1Y2Nlc3NmdWwKQEAgLTMyNiw2ICszMzQsMTEgQEAKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAKIAkvKgorCSAqIGJlYWNvbi0+c2tiIG11c3QgYmUgcHJvdGVjdGVkIHdpdGggdGhlIG11dGV4LgorCSAqLworCXN0cnVjdCBtdXRleCBiZWFjb25fc2tiX211dGV4OworCisJLyoKIAkgKiBFbnRyeSBpbiB0aGUgYmVhY29uIHF1ZXVlIHdoaWNoIGJlbG9uZ3MgdG8KIAkgKiB0aGlzIGludGVyZmFjZS4gRWFjaCBpbnRlcmZhY2UgaGFzIGl0cyBvd24KIAkgKiBkZWRpY2F0ZWQgYmVhY29uIGVudHJ5LgpAQCAtMzM3LDggKzM1MCw2IEBACiAJICovCiAJdW5zaWduZWQgaW50IGRlbGF5ZWRfZmxhZ3M7CiAjZGVmaW5lIERFTEFZRURfVVBEQVRFX0JFQUNPTgkJMHgwMDAwMDAwMQotI2RlZmluZSBERUxBWUVEX0NPTkZJR19FUlAJCTB4MDAwMDAwMDIKLSNkZWZpbmUgREVMQVlFRF9MRURfQVNTT0MJCTB4MDAwMDAwMDQKIAogCS8qCiAJICogU29mdHdhcmUgc2VxdWVuY2UgY291bnRlciwgdGhpcyBpcyBvbmx5IHJlcXVpcmVkCkBAIC00MDYsOSArNDE3LDYgQEAKIAlpbnQgc2hvcnRfcHJlYW1ibGU7CiAJaW50IGN0c19wcm90ZWN0aW9uOwogCi0JaW50IGFja190aW1lb3V0OwotCWludCBhY2tfY29uc3VtZV90aW1lOwotCiAJdTMyIGJhc2ljX3JhdGVzOwogCiAJaW50IHNsb3RfdGltZTsKQEAgLTU5NCw3ICs2MDIsNiBAQAogCURFVklDRV9TVEFURV9JTklUSUFMSVpFRCwKIAlERVZJQ0VfU1RBVEVfU1RBUlRFRCwKIAlERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywKLQlERVZJQ0VfU1RBVEVfRElTQUJMRURfUkFESU9fSFcsCiAKIAkvKgogCSAqIERyaXZlciByZXF1aXJlbWVudHMKQEAgLTYwMiw3ICs2MDksNiBAQAogCURSSVZFUl9SRVFVSVJFX0ZJUk1XQVJFLAogCURSSVZFUl9SRVFVSVJFX0JFQUNPTl9HVUFSRCwKIAlEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLAotCURSSVZFUl9SRVFVSVJFX1NDSEVEVUxFRCwKIAlEUklWRVJfUkVRVUlSRV9ETUEsCiAJRFJJVkVSX1JFUVVJUkVfQ09QWV9JViwKIAlEUklWRVJfUkVRVUlSRV9MMlBBRCwKQEAgLTYxMiw2ICs2MTgsOCBAQAogCSAqLwogCUNPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwKIAlDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sCisJRFJJVkVSX1NVUFBPUlRfQ09OVFJPTF9GSUxURVJTLAorCURSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSX1BTUE9MTCwKIAogCS8qCiAJICogRHJpdmVyIGNvbmZpZ3VyYXRpb24KQEAgLTYzNCw3ICs2NDIsNyBAQAogCSAqIFRoZSBzdHJ1Y3R1cmUgc3RvcmVkIGluIGhlcmUgZGVwZW5kcyBvbiB0aGUKIAkgKiBzeXN0ZW0gYnVzIChQQ0kgb3IgVVNCKS4KIAkgKiBXaGVuIGFjY2Vzc2luZyB0aGlzIHZhcmlhYmxlLCB0aGUgcnQyeDAwZGV2X3twY2ksdXNifQotCSAqIG1hY3JvJ3Mgc2hvdWxkIGJlIHVzZWQgZm9yIGNvcnJlY3QgdHlwZWNhc3RpbmcuCisJICogbWFjcm9zIHNob3VsZCBiZSB1c2VkIGZvciBjb3JyZWN0IHR5cGVjYXN0aW5nLgogCSAqLwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIApAQCAtNjUxLDE4ICs2NTksNiBAQAogCWVudW0gaWVlZTgwMjExX2JhbmQgY3Vycl9iYW5kOwogCiAJLyoKLQkgKiByZmtpbGwgc3RydWN0dXJlIGZvciBSRiBzdGF0ZSBzd2l0Y2hpbmcgc3VwcG9ydC4KLQkgKiBUaGlzIHdpbGwgb25seSBiZSBjb21waWxlZCBpbiB3aGVuIHJlcXVpcmVkLgotCSAqLwotI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAotCXVuc2lnbmVkIGxvbmcgcmZraWxsX3N0YXRlOwotI2RlZmluZSBSRktJTExfU1RBVEVfQUxMT0NBVEVECQkxCi0jZGVmaW5lIFJGS0lMTF9TVEFURV9SRUdJU1RFUkVECQkyCi0jZGVmaW5lIFJGS0lMTF9TVEFURV9CTE9DS0VECQkzCi0Jc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnJma2lsbF9wb2xsX2RldjsKLSNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KLQotCS8qCiAJICogSWYgZW5hYmxlZCwgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIHN0cnVjdHVyZXMKIAkgKiByZXF1aXJlZCBmb3IgZGVyZWdpc3RyYXRpb24gb2YgZGVidWdmcy4KIAkgKi8KQEAgLTgyNCw3ICs4MjAsNiBAQAogCSAqIGR1ZSB0byBSVE5MIGxvY2tpbmcgcmVxdWlyZW1lbnRzLgogCSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCBpbnRmX3dvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGZpbHRlcl93b3JrOwogCiAJLyoKIAkgKiBEYXRhIHF1ZXVlIGFycmF5cyBmb3IgUlgsIFRYIGFuZCBCZWFjb24uCkBAIC05NzYsNyArOTcxLDkgQEAKIHZvaWQgcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCQkJdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQlpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KTsKKwkJCQl1NjQgbXVsdGljYXN0KTsKK2ludCBydDJ4MDBtYWNfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJICAgICAgYm9vbCBzZXQpOwogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0NSWVBUTwogaW50IHJ0MngwMG1hY19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKIAkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKQEAgLTk5NCw2ICs5OTEsNyBAQAogCQkJCXUzMiBjaGFuZ2VzKTsKIGludCBydDJ4MDBtYWNfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKTsKK3ZvaWQgcnQyeDAwbWFjX3Jma2lsbF9wb2xsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAogLyoKICAqIERyaXZlciBhbGxvY2F0aW9uIGhhbmRsZXJzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCmluZGV4IDNlMDE5YTEuLjQwYTIwMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKQEAgLTk0LDE3ICs5NCw2IEBACiAJZXJwLmRpZnMgPSBic3NfY29uZi0+dXNlX3Nob3J0X3Nsb3QgPyBTSE9SVF9ESUZTIDogRElGUzsKIAllcnAuZWlmcyA9IGJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCA/IFNIT1JUX0VJRlMgOiBFSUZTOwogCi0JZXJwLmFja190aW1lb3V0ID0gUExDUCArIGVycC5kaWZzICsgR0VUX0RVUkFUSU9OKEFDS19TSVpFLCAxMCk7Ci0JZXJwLmFja19jb25zdW1lX3RpbWUgPSBTSUZTICsgUExDUCArIEdFVF9EVVJBVElPTihBQ0tfU0laRSwgMTApOwotCi0JaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpIHsKLQkJZXJwLmFja190aW1lb3V0ICs9IFNIT1JUX1BSRUFNQkxFOwotCQllcnAuYWNrX2NvbnN1bWVfdGltZSArPSBTSE9SVF9QUkVBTUJMRTsKLQl9IGVsc2UgewotCQllcnAuYWNrX3RpbWVvdXQgKz0gUFJFQU1CTEU7Ci0JCWVycC5hY2tfY29uc3VtZV90aW1lICs9IFBSRUFNQkxFOwotCX0KLQogCWVycC5iYXNpY19yYXRlcyA9IGJzc19jb25mLT5iYXNpY19yYXRlczsKIAllcnAuYmVhY29uX2ludCA9IGJzc19jb25mLT5iZWFjb25faW50OwogCkBAIC0xMjQsMjQgKzExMywzNCBAQAogfQogCiB2b2lkIHJ0MngwMGxpYl9jb25maWdfYW50ZW5uYShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICAgc3RydWN0IGFudGVubmFfc2V0dXAgKmFudCkKKwkJCSAgICAgIHN0cnVjdCBhbnRlbm5hX3NldHVwIGNvbmZpZykKIHsKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OwogCXN0cnVjdCBhbnRlbm5hX3NldHVwICpkZWYgPSAmcnQyeDAwZGV2LT5kZWZhdWx0X2FudDsKIAlzdHJ1Y3QgYW50ZW5uYV9zZXR1cCAqYWN0aXZlID0gJnJ0MngwMGRldi0+bGluay5hbnQuYWN0aXZlOwogCiAJLyoKIAkgKiBGYWlsc2FmZTogTWFrZSBzdXJlIHdlIGFyZSBub3Qgc2VuZGluZyB0aGUKIAkgKiBBTlRFTk5BX1NXX0RJVkVSU0lUWSBzdGF0ZSB0byB0aGUgZHJpdmVyLgotCSAqIElmIHRoYXQgaGFwcGVzIGZhbGxiYWNrIHRvIGhhcmR3YXJlIGRlZmF1bHQsCisJICogSWYgdGhhdCBoYXBwZW5zLCBmYWxsYmFjayB0byBoYXJkd2FyZSBkZWZhdWx0cywKIAkgKiBvciBvdXIgb3duIGRlZmF1bHQuCisJICogSWYgZGl2ZXJzaXR5IGhhbmRsaW5nIGlzIGFjdGl2ZSBmb3IgYSBwYXJ0aWN1bGFyIGFudGVubmEsCisJICogd2Ugc2hvdWxkbid0IG92ZXJ3cml0ZSB0aGF0IGFudGVubmEuCiAJICogVGhlIGNhbGxzIHRvIHJ0MngwMGxpYl9jb25maWdfYW50ZW5uYV9jaGVjaygpCiAJICogbWlnaHQgaGF2ZSBjYXVzZWQgdGhhdCB3ZSByZXN0b3JlIGJhY2sgdG8gdGhlIGFscmVhZHkKIAkgKiBhY3RpdmUgc2V0dGluZy4gSWYgdGhhdCBoYXMgaGFwcGVuZWQgd2UgY2FuIHF1aXQuCiAJICovCi0JYW50LT5yeCA9IHJ0MngwMGxpYl9jb25maWdfYW50ZW5uYV9jaGVjayhhbnQtPnJ4LCBkZWYtPnJ4KTsKLQlhbnQtPnR4ID0gcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hX2NoZWNrKGFudC0+dHgsIGRlZi0+dHgpOworCWlmICghKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkpCisJCWNvbmZpZy5yeCA9IHJ0MngwMGxpYl9jb25maWdfYW50ZW5uYV9jaGVjayhjb25maWcucngsIGRlZi0+cngpOworCWVsc2UKKwkJY29uZmlnLnJ4ID0gYWN0aXZlLT5yeDsKIAotCWlmIChhbnQtPnJ4ID09IGFjdGl2ZS0+cnggJiYgYW50LT50eCA9PSBhY3RpdmUtPnR4KQorCWlmICghKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkpCisJCWNvbmZpZy50eCA9IHJ0MngwMGxpYl9jb25maWdfYW50ZW5uYV9jaGVjayhjb25maWcudHgsIGRlZi0+dHgpOworCWVsc2UKKwkJY29uZmlnLnR4ID0gYWN0aXZlLT50eDsKKworCWlmIChjb25maWcucnggPT0gYWN0aXZlLT5yeCAmJiBjb25maWcudHggPT0gYWN0aXZlLT50eCkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTE1NiwxMSArMTU1LDExIEBACiAJICogVGhlIGxhdHRlciBpcyByZXF1aXJlZCBzaW5jZSB3ZSBuZWVkIHRvIHJlY2FsaWJyYXRlIHRoZQogCSAqIG5vaXNlLXNlbnNpdGl2aXR5IHJhdGlvIGZvciB0aGUgbmV3IHNldHVwLgogCSAqLwotCXJ0MngwMGRldi0+b3BzLT5saWItPmNvbmZpZ19hbnQocnQyeDAwZGV2LCBhbnQpOworCXJ0MngwMGRldi0+b3BzLT5saWItPmNvbmZpZ19hbnQocnQyeDAwZGV2LCAmY29uZmlnKTsKIAogCXJ0MngwMGxpbmtfcmVzZXRfdHVuZXIocnQyeDAwZGV2LCB0cnVlKTsKIAotCW1lbWNweShhY3RpdmUsIGFudCwgc2l6ZW9mKCphbnQpKTsKKwltZW1jcHkoYWN0aXZlLCAmY29uZmlnLCBzaXplb2YoY29uZmlnKSk7CiAKIAlpZiAodGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKIAkJcnQyeDAwbGliX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09OX0xJTkspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jCmluZGV4IGJjNGU4MWUuLmRlMzY4MzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY3J5cHRvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jCkBAIC01Myw4ICs1Myw3IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpod19rZXkgPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleTsKIAotCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncykgfHwKLQkgICAgIWh3X2tleSB8fCBlbnRyeS0+c2tiLT5kb19ub3RfZW5jcnlwdCkKKwlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8ICFod19rZXkpCiAJCXJldHVybjsKIAogCV9fc2V0X2JpdChFTlRSWV9UWERfRU5DUllQVCwgJnR4ZGVzYy0+ZmxhZ3MpOwpAQCAtODIsOCArODEsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5OwogCXVuc2lnbmVkIGludCBvdmVyaGVhZCA9IDA7CiAKLQlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8Ci0JICAgICFrZXkgfHwgc2tiLT5kb19ub3RfZW5jcnlwdCkKKwlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8ICFrZXkpCiAJCXJldHVybiBvdmVyaGVhZDsKIAogCS8qCkBAIC0xMzEsNyArMTI5LDcgQEAKIAkvKiBQdWxsIGJ1ZmZlciB0byBjb3JyZWN0IHNpemUgKi8KIAlza2JfcHVsbChza2IsIHR4ZGVzYy0+aXZfbGVuKTsKIAotCS8qIElWL0VJViBkYXRhIGhhcyBvZmZpY2lhbGx5IGJlIHN0cmlwcGVkICovCisJLyogSVYvRUlWIGRhdGEgaGFzIG9mZmljaWFsbHkgYmVlbiBzdHJpcHBlZCAqLwogCXNrYmRlc2MtPmZsYWdzIHw9IFNLQkRFU0NfSVZfU1RSSVBQRUQ7CiB9CiAKQEAgLTE1Niw3ICsxNTQsNyBAQAogCXNrYmRlc2MtPmZsYWdzICY9IH5TS0JERVNDX0lWX1NUUklQUEVEOwogfQogCi12b2lkIHJ0MngwMGNyeXB0b19yeF9pbnNlcnRfaXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBsMnBhZCwKK3ZvaWQgcnQyeDAwY3J5cHRvX3J4X2luc2VydF9pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3RoLAogCQkJICAgICAgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKQogewpAQCAtMjAxLDcgKzE5OSw3IEBACiAJICogbW92ZSB0aGUgaGVhZGVyIG1vcmUgdGhlbiBpdl9sZW4gc2luY2Ugd2UgbXVzdAogCSAqIG1ha2Ugcm9vbSBmb3IgdGhlIHBheWxvYWQgbW92ZSBhcyB3ZWxsLgogCSAqLwotCWlmIChsMnBhZCkgeworCWlmIChyeGRlc2MtPmRldl9mbGFncyAmIFJYRE9ORV9MMlBBRCkgewogCQlza2JfcHVzaChza2IsIGl2X2xlbiAtIGFsaWduKTsKIAkJc2tiX3B1dChza2IsIGljdl9sZW4pOwogCkBAIC0yMzIsNyArMjMwLDcgQEAKIAkgKiBNb3ZlIHBheWxvYWQgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4gTm90ZSB0aGF0CiAJICogdGhpcyBpcyBvbmx5IG5lZWRlZCB3aGVuIG5vIGwyIHBhZGRpbmcgaXMgcHJlc2VudC4KIAkgKi8KLQlpZiAoIWwycGFkKSB7CisJaWYgKCEocnhkZXNjLT5kZXZfZmxhZ3MgJiBSWERPTkVfTDJQQUQpKSB7CiAJCW1lbW1vdmUoc2tiLT5kYXRhICsgdHJhbnNmZXIsCiAJCQlza2ItPmRhdGEgKyB0cmFuc2ZlciArIGFsaWduLAogCQkJcGF5bG9hZF9sZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCmluZGV4IDU3ODEzZTcuLjcxNzYxYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKQEAgLTQwLDggKzQwLDcgQEAKIAkgKiBEb24ndCBlbmFibGUgdGhlIHJhZGlvIHR3aWNlLgogCSAqIEFuZCBjaGVjayBpZiB0aGUgaGFyZHdhcmUgYnV0dG9uIGhhcyBiZWVuIGRpc2FibGVkLgogCSAqLwotCWlmICh0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8Ci0JICAgIHRlc3RfYml0KERFVklDRV9TVEFURV9ESVNBQkxFRF9SQURJT19IVywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCWlmICh0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC0xMTksMjAgKzExOCwxMSBAQAogCQlydDJ4MDBsaW5rX3N0YXJ0X3R1bmVyKHJ0MngwMGRldik7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9wYWNrZXRmaWx0ZXJfc2NoZWR1bGVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0KLQkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydDJ4MDBfZGV2LCBmaWx0ZXJfd29yayk7Ci0KLQlydDJ4MDBkZXYtPm9wcy0+bGliLT5jb25maWdfZmlsdGVyKHJ0MngwMGRldiwgcnQyeDAwZGV2LT5wYWNrZXRfZmlsdGVyKTsKLX0KLQogc3RhdGljIHZvaWQgcnQyeDAwbGliX2ludGZfc2NoZWR1bGVkX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywKIAkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBkYXRhOwogCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiBjb25mOwogCWludCBkZWxheWVkX2ZsYWdzOwogCiAJLyoKQEAgLTE0Miw3ICsxMzIsNiBAQAogCSAqLwogCXNwaW5fbG9jaygmaW50Zi0+bG9jayk7CiAKLQltZW1jcHkoJmNvbmYsICZ2aWYtPmJzc19jb25mLCBzaXplb2YoY29uZikpOwogCWRlbGF5ZWRfZmxhZ3MgPSBpbnRmLT5kZWxheWVkX2ZsYWdzOwogCWludGYtPmRlbGF5ZWRfZmxhZ3MgPSAwOwogCkBAIC0xNTksMTIgKzE0OCw2IEBACiAKIAlpZiAoZGVsYXllZF9mbGFncyAmIERFTEFZRURfVVBEQVRFX0JFQUNPTikKIAkJcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihydDJ4MDBkZXYsIHZpZiwgdHJ1ZSk7Ci0KLQlpZiAoZGVsYXllZF9mbGFncyAmIERFTEFZRURfQ09ORklHX0VSUCkKLQkJcnQyeDAwbGliX2NvbmZpZ19lcnAocnQyeDAwZGV2LCBpbnRmLCAmY29uZik7Ci0KLQlpZiAoZGVsYXllZF9mbGFncyAmIERFTEFZRURfTEVEX0FTU09DKQotCQlydDJ4MDBsZWRzX2xlZF9hc3NvYyhydDJ4MDBkZXYsICEhcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQpOwogfQogCiBzdGF0aWMgdm9pZCBydDJ4MDBsaWJfaW50Zl9zY2hlZHVsZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMTg3LDcgKzE3MCw2IEBACiBzdGF0aWMgdm9pZCBydDJ4MDBsaWJfYmVhY29uZG9uZV9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsCiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwogCiAJaWYgKHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgpAQCAtMTk2LDEyICsxNzgsNiBAQAogCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfV0RTKQogCQlyZXR1cm47CiAKLQkvKgotCSAqIENsZWFuIHVwIHRoZSBiZWFjb24gc2tiLgotCSAqLwotCXJ0MngwMHF1ZXVlX2ZyZWVfc2tiKHJ0MngwMGRldiwgaW50Zi0+YmVhY29uLT5za2IpOwotCWludGYtPmJlYWNvbi0+c2tiID0gTlVMTDsKLQogCXNwaW5fbG9jaygmaW50Zi0+bG9jayk7CiAJaW50Zi0+ZGVsYXllZF9mbGFncyB8PSBERUxBWUVEX1VQREFURV9CRUFDT047CiAJc3Bpbl91bmxvY2soJmludGYtPmxvY2spOwpAQCAtMjE2LDcgKzE5Miw3IEBACiAJCQkJCQkgICBydDJ4MDBsaWJfYmVhY29uZG9uZV9pdGVyLAogCQkJCQkJICAgcnQyeDAwZGV2KTsKIAotCXF1ZXVlX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLCAmcnQyeDAwZGV2LT5pbnRmX3dvcmspOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKHJ0MngwMGRldi0+aHcsICZydDJ4MDBkZXYtPmludGZfd29yayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBsaWJfYmVhY29uZG9uZSk7CiAKQEAgLTIyOCw3ICsyMDQsOSBAQAogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhlbnRyeS0+c2tiKTsKIAllbnVtIGRhdGFfcXVldWVfcWlkIHFpZCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhlbnRyeS0+c2tiKTsKIAl1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKGVudHJ5LT5za2IpOwotCXU4IHJhdGVfaWR4LCByYXRlX2ZsYWdzOworCXU4IHJhdGVfaWR4LCByYXRlX2ZsYWdzLCByZXRyeV9yYXRlczsKKwl1bnNpZ25lZCBpbnQgaTsKKwlib29sIHN1Y2Nlc3M7CiAKIAkvKgogCSAqIFVubWFwIHRoZSBza2IuCkBAIC0yMzksNyArMjE3LDcgQEAKIAkgKiBSZW1vdmUgTDIgcGFkZGluZyB3aGljaCB3YXMgYWRkZWQgZHVyaW5nCiAJICovCiAJaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0wyUEFELCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJ0MngwMHF1ZXVlX3BheWxvYWRfYWxpZ24oZW50cnktPnNrYiwgdHJ1ZSwgaGVhZGVyX2xlbmd0aCk7CisJCXJ0MngwMHF1ZXVlX3JlbW92ZV9sMnBhZChlbnRyeS0+c2tiLCBoZWFkZXJfbGVuZ3RoKTsKIAogCS8qCiAJICogSWYgdGhlIElWL0VJViBkYXRhIHdhcyBzdHJpcHBlZCBmcm9tIHRoZSBmcmFtZSBiZWZvcmUgaXQgd2FzCkBAIC0yNTcsNDAgKzIzNSw1NCBAQAogCXJ0MngwMGRlYnVnX2R1bXBfZnJhbWUocnQyeDAwZGV2LCBEVU1QX0ZSQU1FX1RYRE9ORSwgZW50cnktPnNrYik7CiAKIAkvKgorCSAqIERldGVybWluZSBpZiB0aGUgZnJhbWUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkLgorCSAqLworCXN1Y2Nlc3MgPQorCSAgICB0ZXN0X2JpdChUWERPTkVfU1VDQ0VTUywgJnR4ZGVzYy0+ZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KFRYRE9ORV9VTktOT1dOLCAmdHhkZXNjLT5mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoVFhET05FX0ZBTExCQUNLLCAmdHhkZXNjLT5mbGFncyk7CisKKwkvKgogCSAqIFVwZGF0ZSBUWCBzdGF0aXN0aWNzLgogCSAqLwotCXJ0MngwMGRldi0+bGluay5xdWFsLnR4X3N1Y2Nlc3MgKz0KLQkgICAgdGVzdF9iaXQoVFhET05FX1NVQ0NFU1MsICZ0eGRlc2MtPmZsYWdzKSB8fAotCSAgICB0ZXN0X2JpdChUWERPTkVfVU5LTk9XTiwgJnR4ZGVzYy0+ZmxhZ3MpOwotCXJ0MngwMGRldi0+bGluay5xdWFsLnR4X2ZhaWxlZCArPQotCSAgICB0ZXN0X2JpdChUWERPTkVfRkFJTFVSRSwgJnR4ZGVzYy0+ZmxhZ3MpOworCXJ0MngwMGRldi0+bGluay5xdWFsLnR4X3N1Y2Nlc3MgKz0gc3VjY2VzczsKKwlydDJ4MDBkZXYtPmxpbmsucXVhbC50eF9mYWlsZWQgKz0gIXN1Y2Nlc3M7CiAKIAlyYXRlX2lkeCA9IHNrYmRlc2MtPnR4X3JhdGVfaWR4OwogCXJhdGVfZmxhZ3MgPSBza2JkZXNjLT50eF9yYXRlX2ZsYWdzOworCXJldHJ5X3JhdGVzID0gdGVzdF9iaXQoVFhET05FX0ZBTExCQUNLLCAmdHhkZXNjLT5mbGFncykgPworCSAgICAodHhkZXNjLT5yZXRyeSArIDEpIDogMTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSBUWCBzdGF0dXMKIAkgKi8KIAltZW1zZXQoJnR4X2luZm8tPnN0YXR1cywgMCwgc2l6ZW9mKHR4X2luZm8tPnN0YXR1cykpOwogCXR4X2luZm8tPnN0YXR1cy5hY2tfc2lnbmFsID0gMDsKLQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4ID0gcmF0ZV9pZHg7Ci0JdHhfaW5mby0+c3RhdHVzLnJhdGVzWzBdLmZsYWdzID0gcmF0ZV9mbGFnczsKLQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSB0eGRlc2MtPnJldHJ5ICsgMTsKLQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbMV0uaWR4ID0gLTE7IC8qIHRlcm1pbmF0ZSAqLworCisJLyoKKwkgKiBGcmFtZSB3YXMgc2VuZCB3aXRoIHJldHJpZXMsIGhhcmR3YXJlIHRyaWVkCisJICogZGlmZmVyZW50IHJhdGVzIHRvIHNlbmQgb3V0IHRoZSBmcmFtZSwgYXQgZWFjaAorCSAqIHJldHJ5IGl0IGxvd2VyZWQgdGhlIHJhdGUgMSBzdGVwLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCByZXRyeV9yYXRlcyAmJiBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKSB7CisJCXR4X2luZm8tPnN0YXR1cy5yYXRlc1tpXS5pZHggPSByYXRlX2lkeCAtIGk7CisJCXR4X2luZm8tPnN0YXR1cy5yYXRlc1tpXS5mbGFncyA9IHJhdGVfZmxhZ3M7CisJCXR4X2luZm8tPnN0YXR1cy5yYXRlc1tpXS5jb3VudCA9IDE7CisJfQorCWlmIChpIDwgKElFRUU4MDIxMV9UWF9NQVhfUkFURVMgLSAxKSkKKwkJdHhfaW5mby0+c3RhdHVzLnJhdGVzW2ldLmlkeCA9IC0xOyAvKiB0ZXJtaW5hdGUgKi8KIAogCWlmICghKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKSB7Ci0JCWlmICh0ZXN0X2JpdChUWERPTkVfU1VDQ0VTUywgJnR4ZGVzYy0+ZmxhZ3MpIHx8Ci0JCQkJdGVzdF9iaXQoVFhET05FX1VOS05PV04sICZ0eGRlc2MtPmZsYWdzKSkKKwkJaWYgKHN1Y2Nlc3MpCiAJCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7Ci0JCWVsc2UgaWYgKHRlc3RfYml0KFRYRE9ORV9GQUlMVVJFLCAmdHhkZXNjLT5mbGFncykpCisJCWVsc2UKIAkJCXJ0MngwMGRldi0+bG93X2xldmVsX3N0YXRzLmRvdDExQUNLRmFpbHVyZUNvdW50Kys7CiAJfQogCiAJaWYgKHJhdGVfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpIHsKLQkJaWYgKHRlc3RfYml0KFRYRE9ORV9TVUNDRVNTLCAmdHhkZXNjLT5mbGFncykgfHwKLQkJCQl0ZXN0X2JpdChUWERPTkVfVU5LTk9XTiwgJnR4ZGVzYy0+ZmxhZ3MpKQorCQlpZiAoc3VjY2VzcykKIAkJCXJ0MngwMGRldi0+bG93X2xldmVsX3N0YXRzLmRvdDExUlRTU3VjY2Vzc0NvdW50Kys7Ci0JCWVsc2UgaWYgKHRlc3RfYml0KFRYRE9ORV9GQUlMVVJFLCAmdHhkZXNjLT5mbGFncykpCisJCWVsc2UKIAkJCXJ0MngwMGRldi0+bG93X2xldmVsX3N0YXRzLmRvdDExUlRTRmFpbHVyZUNvdW50Kys7CiAJfQogCkBAIC0zNzIsNyArMzY0LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMgPSAmcnQyeDAwZGV2LT5yeF9zdGF0dXM7CiAJdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGg7Ci0JYm9vbCBsMnBhZDsKIAlpbnQgcmF0ZV9pZHg7CiAJLyoKIAkgKiBBbGxvY2F0ZSBhIG5ldyBza19idWZmZXIuIElmIG5vIG5ldyBidWZmZXIgYXZhaWxhYmxlLCBkcm9wIHRoZQpAQCAtNDAxLDcgKzM5Miw2IEBACiAJICogYWxpZ25lZCBvbiBhIDQgYnl0ZSBib3VuZGFyeS4KIAkgKi8KIAloZWFkZXJfbGVuZ3RoID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2IoZW50cnktPnNrYik7Ci0JbDJwYWQgPSAhIShyeGRlc2MuZGV2X2ZsYWdzICYgUlhET05FX0wyUEFEKTsKIAogCS8qCiAJICogSGFyZHdhcmUgbWlnaHQgaGF2ZSBzdHJpcHBlZCB0aGUgSVYvRUlWL0lDViBkYXRhLApAQCAtNDExLDEwICs0MDEsMTIgQEAKIAkgKi8KIAlpZiAoKHJ4ZGVzYy5kZXZfZmxhZ3MgJiBSWERPTkVfQ1JZUFRPX0lWKSAmJgogCSAgICAocnhkZXNjLmZsYWdzICYgUlhfRkxBR19JVl9TVFJJUFBFRCkpCi0JCXJ0MngwMGNyeXB0b19yeF9pbnNlcnRfaXYoZW50cnktPnNrYiwgbDJwYWQsIGhlYWRlcl9sZW5ndGgsCisJCXJ0MngwMGNyeXB0b19yeF9pbnNlcnRfaXYoZW50cnktPnNrYiwgaGVhZGVyX2xlbmd0aCwKIAkJCQkJICAmcnhkZXNjKTsKKwllbHNlIGlmIChyeGRlc2MuZGV2X2ZsYWdzICYgUlhET05FX0wyUEFEKQorCQlydDJ4MDBxdWV1ZV9yZW1vdmVfbDJwYWQoZW50cnktPnNrYiwgaGVhZGVyX2xlbmd0aCk7CiAJZWxzZQotCQlydDJ4MDBxdWV1ZV9wYXlsb2FkX2FsaWduKGVudHJ5LT5za2IsIGwycGFkLCBoZWFkZXJfbGVuZ3RoKTsKKwkJcnQyeDAwcXVldWVfYWxpZ25fcGF5bG9hZChlbnRyeS0+c2tiLCBoZWFkZXJfbGVuZ3RoKTsKIAogCS8qCiAJICogQ2hlY2sgaWYgdGhlIGZyYW1lIHdhcyByZWNlaXZlZCB1c2luZyBIVC4gSW4gdGhhdCBjYXNlLApAQCAtNDQ5LDcgKzQ0MSw4IEBACiAJICogbWFjODAyMTEgd2lsbCBjbGVhbiB1cCB0aGUgc2tiIHN0cnVjdHVyZS4KIAkgKi8KIAlydDJ4MDBkZWJ1Z19kdW1wX2ZyYW1lKHJ0MngwMGRldiwgRFVNUF9GUkFNRV9SWERPTkUsIGVudHJ5LT5za2IpOwotCWllZWU4MDIxMV9yeF9pcnFzYWZlKHJ0MngwMGRldi0+aHcsIGVudHJ5LT5za2IsIHJ4X3N0YXR1cyk7CisJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihlbnRyeS0+c2tiKSwgcnhfc3RhdHVzLCBzaXplb2YoKnJ4X3N0YXR1cykpOworCWllZWU4MDIxMV9yeF9pcnFzYWZlKHJ0MngwMGRldi0+aHcsIGVudHJ5LT5za2IpOwogCiAJLyoKIAkgKiBSZXBsYWNlIHRoZSBza2Igd2l0aCB0aGUgZnJlc2hseSBhbGxvY2F0ZWQgb25lLgpAQCAtNzg1LDYgKzc3OCwxMyBAQAogCXJ0MngwMGRldi0+aW50Zl9zdGFfY291bnQgPSAwOwogCXJ0MngwMGRldi0+aW50Zl9hc3NvY2lhdGVkID0gMDsKIAorCS8qIEVuYWJsZSB0aGUgcmFkaW8gKi8KKwlyZXR2YWwgPSBydDJ4MDBsaWJfZW5hYmxlX3JhZGlvKHJ0MngwMGRldik7CisJaWYgKHJldHZhbCkgeworCQlydDJ4MDBxdWV1ZV91bmluaXRpYWxpemUocnQyeDAwZGV2KTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKIAlzZXRfYml0KERFVklDRV9TVEFURV9TVEFSVEVELCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTg0Nyw3ICs4NDcsNiBAQAogCSAqIEluaXRpYWxpemUgY29uZmlndXJhdGlvbiB3b3JrLgogCSAqLwogCUlOSVRfV09SSygmcnQyeDAwZGV2LT5pbnRmX3dvcmssIHJ0MngwMGxpYl9pbnRmX3NjaGVkdWxlZCk7Ci0JSU5JVF9XT1JLKCZydDJ4MDBkZXYtPmZpbHRlcl93b3JrLCBydDJ4MDBsaWJfcGFja2V0ZmlsdGVyX3NjaGVkdWxlZCk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHF1ZXVlIGFycmF5LgpAQCAtODcwLDcgKzg2OSw2IEBACiAJICovCiAJcnQyeDAwbGlua19yZWdpc3RlcihydDJ4MDBkZXYpOwogCXJ0MngwMGxlZHNfcmVnaXN0ZXIocnQyeDAwZGV2KTsKLQlydDJ4MDByZmtpbGxfYWxsb2NhdGUocnQyeDAwZGV2KTsKIAlydDJ4MDBkZWJ1Z19yZWdpc3RlcihydDJ4MDBkZXYpOwogCiAJc2V0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwpAQCAtODk0LDYgKzg5MiwxMSBAQAogCXJ0MngwMGxpYl9kaXNhYmxlX3JhZGlvKHJ0MngwMGRldik7CiAKIAkvKgorCSAqIFN0b3AgYWxsIHdvcmsuCisJICovCisJY2FuY2VsX3dvcmtfc3luYygmcnQyeDAwZGV2LT5pbnRmX3dvcmspOworCisJLyoKIAkgKiBVbmluaXRpYWxpemUgZGV2aWNlLgogCSAqLwogCXJ0MngwMGxpYl91bmluaXRpYWxpemUocnQyeDAwZGV2KTsKQEAgLTkwMiw3ICs5MDUsNiBAQAogCSAqIEZyZWUgZXh0cmEgY29tcG9uZW50cwogCSAqLwogCXJ0MngwMGRlYnVnX2RlcmVnaXN0ZXIocnQyeDAwZGV2KTsKLQlydDJ4MDByZmtpbGxfZnJlZShydDJ4MDBkZXYpOwogCXJ0MngwMGxlZHNfdW5yZWdpc3RlcihydDJ4MDBkZXYpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaAppbmRleCAwYmYyNzE1Li41NDYyY2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCkBAIC0zMCwxMCArMzAsOCBAQAogCiAvKgogICogSW50ZXJ2YWwgZGVmaW5lcwotICogQm90aCB0aGUgbGluayB0dW5lciBhcyB0aGUgcmZraWxsIHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyIHNlY29uZC4KICAqLwogI2RlZmluZSBMSU5LX1RVTkVfSU5URVJWQUwJcm91bmRfamlmZmllc19yZWxhdGl2ZShIWikKLSNkZWZpbmUgUkZLSUxMX1BPTExfSU5URVJWQUwJMTAwMAogCiAvKgogICogcnQyeDAwX3JhdGU6IFBlciByYXRlIGRldmljZSBpbmZvcm1hdGlvbgpAQCAtOTAsNyArODgsNyBAQAogCQkJICBzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYpOwogdm9pZCBydDJ4MDBsaWJfY29uZmlnX2FudGVubmEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgIHN0cnVjdCBhbnRlbm5hX3NldHVwICphbnQpOworCQkJICAgICAgc3RydWN0IGFudGVubmFfc2V0dXAgYW50KTsKIHZvaWQgcnQyeDAwbGliX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYsCiAJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzKTsKQEAgLTEyMiwyMSArMTIwLDQyIEBACiB2b2lkIHJ0MngwMHF1ZXVlX2ZyZWVfc2tiKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogCiAvKioKLSAqIHJ0MngwMHF1ZXVlX3BheWxvYWRfYWxpZ24gLSBBbGlnbiA4MDIuMTEgcGF5bG9hZCB0byA0LWJ5dGUgYm91bmRhcnkKKyAqIHJ0MngwMHF1ZXVlX2FsaWduX2ZyYW1lIC0gQWxpZ24gODAyLjExIGZyYW1lIHRvIDQtYnl0ZSBib3VuZGFyeQogICogQHNrYjogVGhlIHNrYiB0byBhbGlnbgotICogQGwycGFkOiBTaG91bGQgTDIgcGFkZGluZyBiZSB1c2VkCisgKgorICogQWxpZ24gdGhlIHN0YXJ0IG9mIHRoZSA4MDIuMTEgZnJhbWUgdG8gYSA0LWJ5dGUgYm91bmRhcnksIHRoaXMgY291bGQKKyAqIG1lYW4gdGhlIHBheWxvYWQgaXMgbm90IGFsaWduZWQgcHJvcGVybHkgdGhvdWdoLgorICovCit2b2lkIHJ0MngwMHF1ZXVlX2FsaWduX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpOworCisvKioKKyAqIHJ0MngwMHF1ZXVlX2FsaWduX3BheWxvYWQgLSBBbGlnbiA4MDIuMTEgcGF5bG9hZCB0byA0LWJ5dGUgYm91bmRhcnkKKyAqIEBza2I6IFRoZSBza2IgdG8gYWxpZ24KICAqIEBoZWFkZXJfbGVuZ3RoOiBMZW5ndGggb2YgODAyLjExIGhlYWRlcgogICoKLSAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIEBza2IgdG8gYmUgc2VuZCB0byB0aGUgZGV2aWNlIG9yIG1hYzgwMjExLgotICogSWYgQGwycGFkIGlzIHNldCB0byB0cnVlIHBhZGRpbmcgd2lsbCBvY2N1ciBiZXR3ZWVuIHRoZSA4MDIuMTEgaGVhZGVyCi0gKiBhbmQgcGF5bG9hZC4gT3RoZXJ3aXNlIHRoZSBwYWRkaW5nIHdpbGwgYmUgZG9uZSBpbiBmcm9udCBvZiB0aGUgODAyLjExCi0gKiBoZWFkZXIuCi0gKiBXaGVuIEBsMnBhZCBpcyBzZXQgdGhlIGZ1bmN0aW9uIHdpbGwgY2hlY2sgZm9yIHRoZSAmU0tCREVTQ19MMl9QQURERUQKLSAqIGZsYWcgaW4gJnNrYl9mcmFtZV9kZXNjLiBJZiB0aGF0IGZsYWcgaXMgc2V0LCB0aGUgcGFkZGluZyBpcyByZW1vdmVkCi0gKiBhbmQgdGhlIGZsYWcgY2xlYXJlZC4gT3RoZXJ3aXNlIHRoZSBwYWRkaW5nIGlzIGFkZGVkIGFuZCB0aGUgZmxhZyBpcyBzZXQuCisgKiBBbGlnbiB0aGUgODAyLjExIHBheWxvYWQgdG8gYSA0LWJ5dGUgYm91bmRhcnksIHRoaXMgY291bGQKKyAqIG1lYW4gdGhlIGhlYWRlciBpcyBub3QgYWxpZ25lZCBwcm9wZXJseSB0aG91Z2guCiAgKi8KLXZvaWQgcnQyeDAwcXVldWVfcGF5bG9hZF9hbGlnbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIGJvb2wgbDJwYWQsIHVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3RoKTsKK3ZvaWQgcnQyeDAwcXVldWVfYWxpZ25fcGF5bG9hZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCk7CisKKy8qKgorICogcnQyeDAwcXVldWVfaW5zZXJ0X2wycGFkIC0gQWxpZ24gODAyLjExIGhlYWRlciAmIHBheWxvYWQgdG8gNC1ieXRlIGJvdW5kYXJ5CisgKiBAc2tiOiBUaGUgc2tiIHRvIGFsaWduCisgKiBAaGVhZGVyX2xlbmd0aDogTGVuZ3RoIG9mIDgwMi4xMSBoZWFkZXIKKyAqCisgKiBBcHBseSBMMiBwYWRkaW5nIHRvIGFsaWduIGJvdGggaGVhZGVyIGFuZCBwYXlsb2FkIHRvIDQtYnl0ZSBib3VuZGFyeQorICovCit2b2lkIHJ0MngwMHF1ZXVlX2luc2VydF9sMnBhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCk7CisKKy8qKgorICogcnQyeDAwcXVldWVfaW5zZXJ0X2wycGFkIC0gUmVtb3ZlIEwyIHBhZGRpbmcgZnJvbSA4MDIuMTEgZnJhbWUKKyAqIEBza2I6IFRoZSBza2IgdG8gYWxpZ24KKyAqIEBoZWFkZXJfbGVuZ3RoOiBMZW5ndGggb2YgODAyLjExIGhlYWRlcgorICoKKyAqIFJlbW92ZSBMMiBwYWRkaW5nIHVzZWQgdG8gYWxpZ24gYm90aCBoZWFkZXIgYW5kIHBheWxvYWQgdG8gNC1ieXRlIGJvdW5kYXJ5LAorICogYnkgcmVtb3ZpbmcgdGhlIEwyIHBhZGRpbmcgdGhlIGhlYWRlciB3aWxsIG5vIGxvbmdlciBiZSA0LWJ5dGUgYWxpZ25lZC4KKyAqLwordm9pZCBydDJ4MDBxdWV1ZV9yZW1vdmVfbDJwYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGgpOwogCiAvKioKICAqIHJ0MngwMHF1ZXVlX3dyaXRlX3R4X2ZyYW1lIC0gV3JpdGUgVFggZnJhbWUgdG8gaGFyZHdhcmUKQEAgLTMyNiw3ICszNDUsNyBAQAogdm9pZCBydDJ4MDBjcnlwdG9fdHhfcmVtb3ZlX2l2KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjKTsKIHZvaWQgcnQyeDAwY3J5cHRvX3R4X2luc2VydF9pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCk7Ci12b2lkIHJ0MngwMGNyeXB0b19yeF9pbnNlcnRfaXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBsMnBhZCwKK3ZvaWQgcnQyeDAwY3J5cHRvX3J4X2luc2VydF9pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3RoLAogCQkJICAgICAgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKTsKICNlbHNlCkBAIC0zODYsMjkgKzQwNSwxOCBAQAogLyoKICAqIFJGa2lsbCBoYW5kbGVycy4KICAqLwotI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAotdm9pZCBydDJ4MDByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Ci12b2lkIHJ0MngwMHJma2lsbF91bnJlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwotdm9pZCBydDJ4MDByZmtpbGxfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Ci12b2lkIHJ0MngwMHJma2lsbF9mcmVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwotI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKKwlpZiAodGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCXdpcGh5X3Jma2lsbF9zdGFydF9wb2xsaW5nKHJ0MngwMGRldi0+aHctPndpcGh5KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMHJma2lsbF91bnJlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CisJaWYgKHRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQl3aXBoeV9yZmtpbGxfc3RvcF9wb2xsaW5nKHJ0MngwMGRldi0+aHctPndpcGh5KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMHJma2lsbF9hbGxvY2F0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwcmZraWxsX2ZyZWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KLQogLyoKICAqIExFRCBoYW5kbGVycwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYwppbmRleCBlYjliOTgxLi5jNjRkYjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKQEAgLTQ2LDcgKzQ2LDE1IEBACiAjZGVmaW5lIERFRkFVTFRfUEVSQ0VOVEFHRQk1MAogCiAvKgotICogU21hbGwgaGVscGVyIG1hY3JvIHRvIHdvcmsgd2l0aCBtb3Zpbmcvd2Fsa2luZyBhdmVyYWdlcy4KKyAqIFNtYWxsIGhlbHBlciBtYWNybyBmb3IgcGVyY2VudGFnZSBjYWxjdWxhdGlvbgorICogVGhpcyBpcyBhIHZlcnkgc2ltcGxlIG1hY3JvIHdpdGggdGhlIG9ubHkgY2F0Y2ggdGhhdCBpdCB3aWxsCisgKiBwcm9kdWNlIGEgZGVmYXVsdCB2YWx1ZSBpbiBjYXNlIG5vIHRvdGFsIHZhbHVlIHdhcyBwcm92aWRlZC4KKyAqLworI2RlZmluZSBQRVJDRU5UQUdFKF9fdmFsdWUsIF9fdG90YWwpIFwKKwkoIChfX3RvdGFsKSA/ICgoKF9fdmFsdWUpICogMTAwKSAvIChfX3RvdGFsKSkgOiAoREVGQVVMVF9QRVJDRU5UQUdFKSApCisKKy8qCisgKiBIZWxwZXIgc3RydWN0IGFuZCBtYWNybyB0byB3b3JrIHdpdGggbW92aW5nL3dhbGtpbmcgYXZlcmFnZXMuCiAgKiBXaGVuIGFkZGluZyBhIHZhbHVlIHRvIHRoZSBhdmVyYWdlIHZhbHVlIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24KICAqIGlzIG5lZWRlZDoKICAqCkBAIC02MCwxOCArNjgsMjggQEAKICAqIGZvciBhIGZldyBtaW51dGVzIGJ1dCB3aGVuIHRoZSBkZXZpY2UgaXMgbW92ZWQgYXdheSBmcm9tIHRoZSBBUAogICogdGhlIGF2ZXJhZ2Ugd2lsbCBub3QgZGVjcmVhc2UgZmFzdCBlbm91Z2ggdG8gY29tcGVuc2F0ZS4KICAqIFRoZSB3YWxraW5nIGF2ZXJhZ2UgY29tcGVuc2F0ZXMgdGhpcyBhbmQgd2lsbCBtb3ZlIHRvd2FyZHMKLSAqIHRoZSBuZXcgdmFsdWVzIGNvcnJlY3RseSBhbGxvd2luZyBhIGVmZmVjdGl2ZSBsaW5rIHR1bmluZy4KKyAqIHRoZSBuZXcgdmFsdWVzIGNvcnJlY3RseSBhbGxvd2luZyBhIGVmZmVjdGl2ZSBsaW5rIHR1bmluZywKKyAqIHRoZSBzcGVlZCBvZiB0aGUgYXZlcmFnZSBtb3ZpbmcgdG93YXJkcyBvdGhlciB2YWx1ZXMgZGVwZW5kcworICogb24gdGhlIHZhbHVlIGZvciB0aGUgbnVtYmVyIG9mIHNhbXBsZXMuIFRoZSBoaWdoZXIgdGhlIG51bWJlcgorICogb2Ygc2FtcGxlcywgdGhlIHNsb3dlciB0aGUgYXZlcmFnZSB3aWxsIG1vdmUuCisgKiBXZSB1c2UgdHdvIHZhcmlhYmxlcyB0byBrZWVwIHRyYWNrIG9mIHRoZSBhdmVyYWdlIHZhbHVlIHRvCisgKiBjb21wZW5zYXRlIGZvciB0aGUgcm91bmRpbmcgZXJyb3JzLiBUaGlzIGNhbiBiZSBhIHNpZ25pZmljYW50CisgKiBlcnJvciAoPjVkQm0pIGlmIHRoZSBmYWN0b3IgaXMgdG9vIGxvdy4KICAqLwotI2RlZmluZSBNT1ZJTkdfQVZFUkFHRShfX2F2ZywgX192YWwsIF9fc2FtcGxlcykgXAotCSggKCgoX19hdmcpICogKChfX3NhbXBsZXMpIC0gMSkpICsgKF9fdmFsKSkgLyAoX19zYW1wbGVzKSApCi0KLS8qCi0gKiBTbWFsbCBoZWxwZXIgbWFjcm8gZm9yIHBlcmNlbnRhZ2UgY2FsY3VsYXRpb24KLSAqIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBtYWNybyB3aXRoIHRoZSBvbmx5IGNhdGNoIHRoYXQgaXQgd2lsbAotICogcHJvZHVjZSBhIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSBubyB0b3RhbCB2YWx1ZSB3YXMgcHJvdmlkZWQuCi0gKi8KLSNkZWZpbmUgUEVSQ0VOVEFHRShfX3ZhbHVlLCBfX3RvdGFsKSBcCi0JKCAoX190b3RhbCkgPyAoKChfX3ZhbHVlKSAqIDEwMCkgLyAoX190b3RhbCkpIDogKERFRkFVTFRfUEVSQ0VOVEFHRSkgKQorI2RlZmluZSBBVkdfU0FNUExFUwk4CisjZGVmaW5lIEFWR19GQUNUT1IJMTAwMAorI2RlZmluZSBNT1ZJTkdfQVZFUkFHRShfX2F2ZywgX192YWwpIFwKKyh7IFwKKwlzdHJ1Y3QgYXZnX3ZhbCBfX25ldzsgXAorCV9fbmV3LmF2Z193ZWlnaHQgPSBcCisJICAgIChfX2F2ZykuYXZnX3dlaWdodCAgPyBcCisJCSgoKChfX2F2ZykuYXZnX3dlaWdodCAqICgoQVZHX1NBTVBMRVMpIC0gMSkpICsgXAorCQkgICgoX192YWwpICogKEFWR19GQUNUT1IpKSkgLyBcCisJCSAoQVZHX1NBTVBMRVMpICkgOiBcCisJCSgoX192YWwpICogKEFWR19GQUNUT1IpKTsgXAorCV9fbmV3LmF2ZyA9IF9fbmV3LmF2Z193ZWlnaHQgLyAoQVZHX0ZBQ1RPUik7IFwKKwlfX25ldzsgXAorfSkKIAogLyoKICAqIEZvciBjYWxjdWxhdGluZyB0aGUgU2lnbmFsIHF1YWxpdHkgd2UgaGF2ZSBkZXRlcm1pbmVkCkBAIC05OCw1NiArMTE2LDQxIEBACiB7CiAJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKIAotCWlmIChhbnQtPnJzc2lfYW50ICYmIHJ0MngwMGRldi0+bGluay5xdWFsLnJ4X3N1Y2Nlc3MpCi0JCXJldHVybiBhbnQtPnJzc2lfYW50OworCWlmIChhbnQtPnJzc2lfYW50LmF2ZyAmJiBydDJ4MDBkZXYtPmxpbmsucXVhbC5yeF9zdWNjZXNzKQorCQlyZXR1cm4gYW50LT5yc3NpX2FudC5hdmc7CiAJcmV0dXJuIERFRkFVTFRfUlNTSTsKIH0KIAotc3RhdGljIGludCBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCQkgICAgICAgZW51bSBhbnRlbm5hIGFudGVubmEpCitzdGF0aWMgaW50IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKIAotCWlmIChhbnQtPnJzc2lfaGlzdG9yeVthbnRlbm5hIC0gQU5URU5OQV9BXSkKLQkJcmV0dXJuIGFudC0+cnNzaV9oaXN0b3J5W2FudGVubmEgLSBBTlRFTk5BX0FdOworCWlmIChhbnQtPnJzc2lfaGlzdG9yeSkKKwkJcmV0dXJuIGFudC0+cnNzaV9oaXN0b3J5OwogCXJldHVybiBERUZBVUxUX1JTU0k7CiB9Ci0vKiBTbWFsbCB3cmFwcGVyIGZvciBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeSgpICovCi0jZGVmaW5lIHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9yeF9oaXN0b3J5KF9fZGV2KSBcCi0JcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkoKF9fZGV2KSwgXAotCQkJCQkgICAgKF9fZGV2KS0+bGluay5hbnQuYWN0aXZlLnJ4KQotI2RlZmluZSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfdHhfaGlzdG9yeShfX2RldikgXAotCXJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KChfX2RldiksIFwKLQkJCQkJICAgIChfX2RldiktPmxpbmsuYW50LmFjdGl2ZS50eCkKIAogc3RhdGljIHZvaWQgcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX2hpc3Rvcnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkJCSAgIGVudW0gYW50ZW5uYSBhbnRlbm5hLAogCQkJCQkJICAgaW50IHJzc2kpCiB7CiAJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKLQlhbnQtPnJzc2lfaGlzdG9yeVthbnQtPmFjdGl2ZS5yeCAtIEFOVEVOTkFfQV0gPSByc3NpOworCWFudC0+cnNzaV9oaXN0b3J5ID0gcnNzaTsKIH0KLS8qIFNtYWxsIHdyYXBwZXIgZm9yIHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KCkgKi8KLSNkZWZpbmUgcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX3J4X2hpc3RvcnkoX19kZXYsIF9fcnNzaSkgXAotCXJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV9oaXN0b3J5KChfX2RldiksIFwKLQkJCQkJICAgICAgIChfX2RldiktPmxpbmsuYW50LmFjdGl2ZS5yeCwgXAotCQkJCQkgICAgICAgKF9fcnNzaSkpCi0jZGVmaW5lIHJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV90eF9oaXN0b3J5KF9fZGV2LCBfX3Jzc2kpIFwKLQlydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfaGlzdG9yeSgoX19kZXYpLCBcCi0JCQkJCSAgICAgICAoX19kZXYpLT5saW5rLmFudC5hY3RpdmUudHgsIFwKLQkJCQkJICAgICAgIChfX3Jzc2kpKQogCiBzdGF0aWMgdm9pZCBydDJ4MDBsaW5rX2FudGVubmFfcmVzZXQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlydDJ4MDBkZXYtPmxpbmsuYW50LnJzc2lfYW50ID0gMDsKKwlydDJ4MDBkZXYtPmxpbmsuYW50LnJzc2lfYW50LmF2ZyA9IDA7CisJcnQyeDAwZGV2LT5saW5rLmFudC5yc3NpX2FudC5hdmdfd2VpZ2h0ID0gMDsKIH0KIAogc3RhdGljIHZvaWQgcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5X3NhbXBsZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CiAJc3RydWN0IGFudGVubmFfc2V0dXAgbmV3X2FudDsKLQlpbnQgc2FtcGxlX2EgPSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeShydDJ4MDBkZXYsIEFOVEVOTkFfQSk7Ci0JaW50IHNhbXBsZV9iID0gcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkocnQyeDAwZGV2LCBBTlRFTk5BX0IpOworCWludCBvdGhlcl9hbnRlbm5hOworCisJaW50IHNhbXBsZV9jdXJyZW50ID0gcnQyeDAwbGlua19hbnRlbm5hX2dldF9saW5rX3Jzc2kocnQyeDAwZGV2KTsKKwlpbnQgc2FtcGxlX290aGVyID0gcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkocnQyeDAwZGV2KTsKIAogCW1lbWNweSgmbmV3X2FudCwgJmFudC0+YWN0aXZlLCBzaXplb2YobmV3X2FudCkpOwogCkBAIC0xNTgsMjIgKzE2MSwyNyBAQAogCiAJLyoKIAkgKiBEdXJpbmcgdGhlIGxhc3QgcGVyaW9kIHdlIGhhdmUgc2FtcGxlZCB0aGUgUlNTSQotCSAqIGZyb20gYm90aCBhbnRlbm5hJ3MuIEl0IG5vdyBpcyB0aW1lIHRvIGRldGVybWluZQorCSAqIGZyb20gYm90aCBhbnRlbm5hcy4gSXQgbm93IGlzIHRpbWUgdG8gZGV0ZXJtaW5lCiAJICogd2hpY2ggYW50ZW5uYSBkZW1vbnN0cmF0ZWQgdGhlIGJlc3QgcGVyZm9ybWFuY2UuCiAJICogV2hlbiB3ZSBhcmUgYWxyZWFkeSBvbiB0aGUgYW50ZW5uYSB3aXRoIHRoZSBiZXN0Ci0JICogcGVyZm9ybWFuY2UsIHRoZW4gdGhlcmUgcmVhbGx5IGlzIG5vdGhpbmcgZm9yIHVzCi0JICogbGVmdCB0byBkby4KKwkgKiBwZXJmb3JtYW5jZSwganVzdCBjcmVhdGUgYSBnb29kIHN0YXJ0aW5nIHBvaW50CisJICogZm9yIHRoZSBoaXN0b3J5IGFuZCB3ZSBhcmUgZG9uZS4KIAkgKi8KLQlpZiAoc2FtcGxlX2EgPT0gc2FtcGxlX2IpCisJaWYgKHNhbXBsZV9jdXJyZW50ID49IHNhbXBsZV9vdGhlcikgeworCQlydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfaGlzdG9yeShydDJ4MDBkZXYsCisJCQlzYW1wbGVfY3VycmVudCk7CiAJCXJldHVybjsKKwl9CisKKwlvdGhlcl9hbnRlbm5hID0gKGFudC0+YWN0aXZlLnJ4ID09IEFOVEVOTkFfQSkgPyBBTlRFTk5BX0IgOiBBTlRFTk5BX0E7CiAKIAlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKQotCQluZXdfYW50LnJ4ID0gKHNhbXBsZV9hID4gc2FtcGxlX2IpID8gQU5URU5OQV9BIDogQU5URU5OQV9COworCQluZXdfYW50LnJ4ID0gb3RoZXJfYW50ZW5uYTsKIAogCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpCi0JCW5ld19hbnQudHggPSAoc2FtcGxlX2EgPiBzYW1wbGVfYikgPyBBTlRFTk5BX0EgOiBBTlRFTk5BX0I7CisJCW5ld19hbnQudHggPSBvdGhlcl9hbnRlbm5hOwogCi0JcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgJm5ld19hbnQpOworCXJ0MngwMGxpYl9jb25maWdfYW50ZW5uYShydDJ4MDBkZXYsIG5ld19hbnQpOwogfQogCiBzdGF0aWMgdm9pZCBydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHlfZXZhbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpAQCAtMTkwLDggKzE5OCw4IEBACiAJICogYWZ0ZXIgdGhhdCB1cGRhdGUgdGhlIGhpc3Rvcnkgd2l0aCB0aGUgY3VycmVudCB2YWx1ZS4KIAkgKi8KIAlyc3NpX2N1cnIgPSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X2xpbmtfcnNzaShydDJ4MDBkZXYpOwotCXJzc2lfb2xkID0gcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX3J4X2hpc3RvcnkocnQyeDAwZGV2KTsKLQlydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfcnhfaGlzdG9yeShydDJ4MDBkZXYsIHJzc2lfY3Vycik7CisJcnNzaV9vbGQgPSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeShydDJ4MDBkZXYpOworCXJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV9oaXN0b3J5KHJ0MngwMGRldiwgcnNzaV9jdXJyKTsKIAogCS8qCiAJICogTGVnYWN5IGRyaXZlciBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgc3dhcCBhbnRlbm5hJ3MKQEAgLTIxMywxMiArMjIxLDEzIEBACiAJaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkKIAkJbmV3X2FudC50eCA9IChuZXdfYW50LnR4ID09IEFOVEVOTkFfQSkgPyBBTlRFTk5BX0IgOiBBTlRFTk5BX0E7CiAKLQlydDJ4MDBsaWJfY29uZmlnX2FudGVubmEocnQyeDAwZGV2LCAmbmV3X2FudCk7CisJcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgbmV3X2FudCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIGJvb2wgcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBhbnQtPmZsYWdzOwogCiAJLyoKIAkgKiBEZXRlcm1pbmUgaWYgc29mdHdhcmUgZGl2ZXJzaXR5IGlzIGVuYWJsZWQgZm9yCkBAIC0yMjYsMzAgKzIzNSwzOCBAQAogCSAqIEFsd2F5cyBwZXJmb3JtIHRoaXMgY2hlY2sgc2luY2Ugd2l0aGluIHRoZSBsaW5rCiAJICogdHVuZXIgaW50ZXJ2YWwgdGhlIGNvbmZpZ3VyYXRpb24gbWlnaHQgaGF2ZSBjaGFuZ2VkLgogCSAqLwotCWFudC0+ZmxhZ3MgJj0gfkFOVEVOTkFfUlhfRElWRVJTSVRZOwotCWFudC0+ZmxhZ3MgJj0gfkFOVEVOTkFfVFhfRElWRVJTSVRZOworCWZsYWdzICY9IH5BTlRFTk5BX1JYX0RJVkVSU0lUWTsKKwlmbGFncyAmPSB+QU5URU5OQV9UWF9ESVZFUlNJVFk7CiAKIAlpZiAocnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKLQkJYW50LT5mbGFncyB8PSBBTlRFTk5BX1JYX0RJVkVSU0lUWTsKKwkJZmxhZ3MgfD0gQU5URU5OQV9SWF9ESVZFUlNJVFk7CiAJaWYgKHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCi0JCWFudC0+ZmxhZ3MgfD0gQU5URU5OQV9UWF9ESVZFUlNJVFk7CisJCWZsYWdzIHw9IEFOVEVOTkFfVFhfRElWRVJTSVRZOwogCiAJaWYgKCEoYW50LT5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKSAmJgogCSAgICAhKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkpIHsKIAkJYW50LT5mbGFncyA9IDA7Ci0JCXJldHVybjsKKwkJcmV0dXJuIHRydWU7CiAJfQogCisJLyogVXBkYXRlIGZsYWdzICovCisJYW50LT5mbGFncyA9IGZsYWdzOworCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIG9ubHkgc2FtcGxlZCB0aGUgZGF0YSBvdmVyIHRoZSBsYXN0IHBlcmlvZAogCSAqIHdlIHNob3VsZCBub3cgaGFydmVzdCB0aGUgZGF0YS4gT3RoZXJ3aXNlIGp1c3QgZXZhbHVhdGUKIAkgKiB0aGUgZGF0YS4gVGhlIGxhdHRlciBzaG91bGQgb25seSBiZSBwZXJmb3JtZWQgb25jZQogCSAqIGV2ZXJ5IDIgc2Vjb25kcy4KIAkgKi8KLQlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfTU9ERV9TQU1QTEUpCisJaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX01PREVfU0FNUExFKSB7CiAJCXJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eV9zYW1wbGUocnQyeDAwZGV2KTsKLQllbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsuY291bnQgJiAxKQorCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgaWYgKHJ0MngwMGRldi0+bGluay5jb3VudCAmIDEpIHsKIAkJcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5X2V2YWwocnQyeDAwZGV2KTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIHJ0MngwMGxpbmtfdXBkYXRlX3N0YXRzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCkBAIC0yNjAsOCArMjc3LDYgQEAKIAlzdHJ1Y3QgbGlua19xdWFsICpxdWFsID0gJnJ0MngwMGRldi0+bGluay5xdWFsOwogCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlpbnQgYXZnX3Jzc2kgPSByeGRlc2MtPnJzc2k7Ci0JaW50IGFudF9yc3NpID0gcnhkZXNjLT5yc3NpOwogCiAJLyoKIAkgKiBGcmFtZSB3YXMgcmVjZWl2ZWQgc3VjY2Vzc2Z1bGx5IHNpbmNlIG5vbi1zdWNjZXNmdWxsCkBAIC0yODEsMTYgKzI5NiwxMiBAQAogCS8qCiAJICogVXBkYXRlIGdsb2JhbCBSU1NJCiAJICovCi0JaWYgKGxpbmstPmF2Z19yc3NpKQotCQlhdmdfcnNzaSA9IE1PVklOR19BVkVSQUdFKGxpbmstPmF2Z19yc3NpLCByeGRlc2MtPnJzc2ksIDgpOwotCWxpbmstPmF2Z19yc3NpID0gYXZnX3Jzc2k7CisJbGluay0+YXZnX3Jzc2kgPSBNT1ZJTkdfQVZFUkFHRShsaW5rLT5hdmdfcnNzaSwgcnhkZXNjLT5yc3NpKTsKIAogCS8qCiAJICogVXBkYXRlIGFudGVubmEgUlNTSQogCSAqLwotCWlmIChhbnQtPnJzc2lfYW50KQotCQlhbnRfcnNzaSA9IE1PVklOR19BVkVSQUdFKGFudC0+cnNzaV9hbnQsIHJ4ZGVzYy0+cnNzaSwgOCk7Ci0JYW50LT5yc3NpX2FudCA9IGFudF9yc3NpOworCWFudC0+cnNzaV9hbnQgPSBNT1ZJTkdfQVZFUkFHRShhbnQtPnJzc2lfYW50LCByeGRlc2MtPnJzc2kpOwogfQogCiBzdGF0aWMgdm9pZCBydDJ4MDBsaW5rX3ByZWNhbGN1bGF0ZV9zaWduYWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTM1MSw4ICszNjIsOCBAQAogCiAJcnQyeDAwbGlua19yZXNldF90dW5lcihydDJ4MDBkZXYsIGZhbHNlKTsKIAotCXF1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsCi0JCQkgICAmbGluay0+d29yaywgTElOS19UVU5FX0lOVEVSVkFMKTsKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHcsCisJCQkJICAgICAmbGluay0+d29yaywgTElOS19UVU5FX0lOVEVSVkFMKTsKIH0KIAogdm9pZCBydDJ4MDBsaW5rX3N0b3BfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTQyMywxMCArNDM0LDEwIEBACiAJICogY29sbGVjdCB0aGUgUlNTSSBkYXRhIHdlIGNvdWxkIHVzZSB0aGlzLiBPdGhlcndpc2Ugd2UKIAkgKiBtdXN0IGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IFJTU0kgdmFsdWUuCiAJICovCi0JaWYgKCFsaW5rLT5hdmdfcnNzaSB8fCAhcXVhbC0+cnhfc3VjY2VzcykKKwlpZiAoIWxpbmstPmF2Z19yc3NpLmF2ZyB8fCAhcXVhbC0+cnhfc3VjY2VzcykKIAkJcXVhbC0+cnNzaSA9IERFRkFVTFRfUlNTSTsKIAllbHNlCi0JCXF1YWwtPnJzc2kgPSBsaW5rLT5hdmdfcnNzaTsKKwkJcXVhbC0+cnNzaSA9IGxpbmstPmF2Z19yc3NpLmF2ZzsKIAogCS8qCiAJICogT25seSBwZXJmb3JtIHRoZSBsaW5rIHR1bmluZyB3aGVuIExpbmsgdHVuaW5nCkBAIC00NDQsMjUgKzQ1NSwyMiBAQAogCS8qCiAJICogU2VuZCBhIHNpZ25hbCB0byB0aGUgbGVkIHRvIHVwZGF0ZSB0aGUgbGVkIHNpZ25hbCBzdHJlbmd0aC4KIAkgKi8KLQlydDJ4MDBsZWRzX2xlZF9xdWFsaXR5KHJ0MngwMGRldiwgbGluay0+YXZnX3Jzc2kpOworCXJ0MngwMGxlZHNfbGVkX3F1YWxpdHkocnQyeDAwZGV2LCBxdWFsLT5yc3NpKTsKIAogCS8qCi0JICogRXZhbHVhdGUgYW50ZW5uYSBzZXR1cCwgbWFrZSB0aGlzIHRoZSBsYXN0IHN0ZXAgc2luY2UgdGhpcyBjb3VsZAotCSAqIHBvc3NpYmx5IHJlc2V0IHNvbWUgc3RhdGlzdGljcy4KKwkgKiBFdmFsdWF0ZSBhbnRlbm5hIHNldHVwLCBtYWtlIHRoaXMgdGhlIGxhc3Qgc3RlcCB3aGVuCisJICogcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5IG1hZGUgY2hhbmdlcyB0aGUgcXVhbGl0eQorCSAqIHN0YXRpc3RpY3Mgd2lsbCBiZSByZXNldC4KIAkgKi8KLQlydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHkocnQyeDAwZGV2KTsKLQotCS8qCi0JICogUmVzZXQgdGhlIHF1YWxpdHkgY291bnRlcnMgd2hpY2ggcmVjb3VudGVkIGR1cmluZyBlYWNoIHBlcmlvZC4KLQkgKi8KLQlydDJ4MDBsaW5rX3Jlc2V0X3F1YWwocnQyeDAwZGV2KTsKKwlpZiAocnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5KHJ0MngwMGRldikpCisJCXJ0MngwMGxpbmtfcmVzZXRfcXVhbChydDJ4MDBkZXYpOwogCiAJLyoKIAkgKiBJbmNyZWFzZSB0dW5lciBjb3VudGVyLCBhbmQgcmVzY2hlZHVsZSB0aGUgbmV4dCBsaW5rIHR1bmVyIHJ1bi4KIAkgKi8KIAlsaW5rLT5jb3VudCsrOwotCXF1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsCi0JCQkgICAmbGluay0+d29yaywgTElOS19UVU5FX0lOVEVSVkFMKTsKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHcsCisJCQkJICAgICAmbGluay0+d29yaywgTElOS19UVU5FX0lOVEVSVkFMKTsKIH0KIAogdm9pZCBydDJ4MDBsaW5rX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKaW5kZXggYzRjMDZiNC4uOTI5Yjg1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYwpAQCAtNzMsNyArNzMsOCBAQAogCWVsc2UKIAkJcnRzX2luZm8tPmZsYWdzICY9IH5JRUVFODAyMTFfVFhfQ1RMX05PX0FDSzsKIAotCXNrYi0+ZG9fbm90X2VuY3J5cHQgPSAxOworCS8qIERpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbiAqLworCXJ0c19pbmZvLT5jb250cm9sLmh3X2tleSA9IE5VTEw7CiAKIAkvKgogCSAqIFJUUy9DVFMgZnJhbWUgc2hvdWxkIHVzZSB0aGUgbGVuZ3RoIG9mIHRoZSBmcmFtZSBwbHVzIGFueQpAQCAtMjczLDYgKzI3NCw3IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmaW50Zi0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmludGYtPnNlcWxvY2spOworCW11dGV4X2luaXQoJmludGYtPmJlYWNvbl9za2JfbXV0ZXgpOwogCWludGYtPmJlYWNvbiA9IGVudHJ5OwogCiAJaWYgKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCkBAIC0zMzcsNTQgKzMzOSwzOCBAQAogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7Ci0JaW50IHN0YXR1czsKIAogCS8qCi0JICogTWFjODAyMTEgbWlnaHQgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdoaWxlIHdlIGFyZSB0cnlpbmcKKwkgKiBtYWM4MDIxMSBtaWdodCBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2hpbGUgd2UgYXJlIHRyeWluZwogCSAqIHRvIHJlbW92ZSB0aGUgZGV2aWNlIG9yIHBlcmhhcHMgc3VzcGVuZGluZyBpdC4KIAkgKi8KIAlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybiAwOwogCiAJLyoKLQkgKiBPbmx5IGNoYW5nZSBkZXZpY2Ugc3RhdGUgd2hlbiB0aGUgcmFkaW8gaXMgZW5hYmxlZC4gSXQgZG9lcyBub3QKLQkgKiBtYXR0ZXIgd2hhdCBwYXJhbWV0ZXJzIHdlIGhhdmUgY29uZmlndXJlZCB3aGVuIHRoZSByYWRpbyBpcyBkaXNhYmxlZAotCSAqIGJlY2F1c2Ugd2Ugd29uJ3QgYmUgYWJsZSB0byBzZW5kIG9yIHJlY2VpdmUgYW55d2F5LiBBbHNvIG5vdGUgdGhhdAotCSAqIHNvbWUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIChlLmcuIGNoYW5uZWwgYW5kIGFudGVubmEgdmFsdWVzKSBjYW4KLQkgKiBvbmx5IGJlIHNldCB3aGVuIHRoZSByYWRpbyBpcyBlbmFibGVkLgorCSAqIFNvbWUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIChlLmcuIGNoYW5uZWwgYW5kIGFudGVubmEgdmFsdWVzKSBjYW4KKwkgKiBvbmx5IGJlIHNldCB3aGVuIHRoZSByYWRpbyBpcyBlbmFibGVkLCBidXQgZG8gcmVxdWlyZSB0aGUgUlggdG8KKwkgKiBiZSBvZmYuCiAJICovCi0JaWYgKGNvbmYtPnJhZGlvX2VuYWJsZWQpIHsKLQkJLyogRm9yIHByb2dyYW1taW5nIHRoZSB2YWx1ZXMsIHdlIGhhdmUgdG8gdHVybiBSWCBvZmYgKi8KLQkJcnQyeDAwbGliX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09GRik7CisJcnQyeDAwbGliX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09GRik7CiAKLQkJLyogRW5hYmxlIHRoZSByYWRpbyAqLwotCQlzdGF0dXMgPSBydDJ4MDBsaWJfZW5hYmxlX3JhZGlvKHJ0MngwMGRldik7Ci0JCWlmICh1bmxpa2VseShzdGF0dXMpKQotCQkJcmV0dXJuIHN0YXR1czsKKwkvKgorCSAqIFdoZW4gd2UndmUganVzdCB0dXJuZWQgb24gdGhlIHJhZGlvLCB3ZSB3YW50IHRvIHJlcHJvZ3JhbQorCSAqIGV2ZXJ5dGhpbmcgdG8gZW5zdXJlIGEgY29uc2lzdGVudCBzdGF0ZQorCSAqLworCXJ0MngwMGxpYl9jb25maWcocnQyeDAwZGV2LCBjb25mLCBjaGFuZ2VkKTsKIAotCQkvKgotCQkgKiBXaGVuIHdlJ3ZlIGp1c3QgdHVybmVkIG9uIHRoZSByYWRpbywgd2Ugd2FudCB0byByZXByb2dyYW0KLQkJICogZXZlcnl0aGluZyB0byBlbnN1cmUgYSBjb25zaXN0ZW50IHN0YXRlCi0JCSAqLwotCQlydDJ4MDBsaWJfY29uZmlnKHJ0MngwMGRldiwgY29uZiwgY2hhbmdlZCk7CisJLyoKKwkgKiBBZnRlciB0aGUgcmFkaW8gaGFzIGJlZW4gZW5hYmxlZCB3ZSBuZWVkIHRvIGNvbmZpZ3VyZQorCSAqIHRoZSBhbnRlbm5hIHRvIHRoZSBkZWZhdWx0IHNldHRpbmdzLiBydDJ4MDBsaWJfY29uZmlnX2FudGVubmEoKQorCSAqIHNob3VsZCBkZXRlcm1pbmUgaWYgYW55IGFjdGlvbiBzaG91bGQgYmUgdGFrZW4gYmFzZWQgb24KKwkgKiBjaGVja2luZyBpZiBkaXZlcnNpdHkgaGFzIGJlZW4gZW5hYmxlZCBvciBubyBhbnRlbm5hIGNoYW5nZXMKKwkgKiBoYXZlIGJlZW4gbWFkZSBzaW5jZSB0aGUgbGFzdCBjb25maWd1cmF0aW9uIGNoYW5nZS4KKwkgKi8KKwlydDJ4MDBsaWJfY29uZmlnX2FudGVubmEocnQyeDAwZGV2LCBydDJ4MDBkZXYtPmRlZmF1bHRfYW50KTsKIAotCQkvKgotCQkgKiBUaGUgcmFkaW8gd2FzIGVuYWJsZWQsIGNvbmZpZ3VyZSB0aGUgYW50ZW5uYSB0byB0aGUKLQkJICogZGVmYXVsdCBzZXR0aW5ncywgdGhlIGxpbmsgdHVuZXIgd2lsbCBsYXRlciBzdGFydAotCQkgKiBjb250aW51ZSBjb25maWd1cmluZyB0aGUgYW50ZW5uYSBiYXNlZCBvbiB0aGUgc29mdHdhcmUKLQkJICogZGl2ZXJzaXR5LiBCdXQgZm9yIG5vbi1kaXZlcnNpdHkgY29uZmlndXJhdGlvbnMsIHdlIG5lZWQKLQkJICogdG8gaGF2ZSBjb25maWd1cmVkIHRoZSBjb3JyZWN0IHN0YXRlIG5vdy4KLQkJICovCi0JCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQpCi0JCQlydDJ4MDBsaWJfY29uZmlnX2FudGVubmEocnQyeDAwZGV2LAotCQkJCQkJICZydDJ4MDBkZXYtPmRlZmF1bHRfYW50KTsKLQotCQkvKiBUdXJuIFJYIGJhY2sgb24gKi8KLQkJcnQyeDAwbGliX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09OKTsKLQl9IGVsc2UgewotCQkvKiBEaXNhYmxlIHRoZSByYWRpbyAqLwotCQlydDJ4MDBsaWJfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwotCX0KKwkvKiBUdXJuIFJYIGJhY2sgb24gKi8KKwlydDJ4MDBsaWJfdG9nZ2xlX3J4KHJ0MngwMGRldiwgU1RBVEVfUkFESU9fUlhfT04pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zOTMsNyArMzc5LDcgQEAKIHZvaWQgcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCQkJdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQlpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQorCQkJCXU2NCBtdWx0aWNhc3QpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwogCkBAIC00MDYsNiArMzkyLDcgQEAKIAkgICAgRklGX0ZDU0ZBSUwgfAogCSAgICBGSUZfUExDUEZBSUwgfAogCSAgICBGSUZfQ09OVFJPTCB8CisJICAgIEZJRl9QU1BPTEwgfAogCSAgICBGSUZfT1RIRVJfQlNTIHwKIAkgICAgRklGX1BST01JU0NfSU5fQlNTOwogCkBAIC00MjEsMTkgKzQwOCw0MiBAQAogCQkqdG90YWxfZmxhZ3MgfD0gRklGX1BST01JU0NfSU5fQlNTIHwgRklGX09USEVSX0JTUzsKIAogCS8qCisJICogSWYgdGhlIGRldmljZSBoYXMgYSBzaW5nbGUgZmlsdGVyIGZvciBhbGwgY29udHJvbCBmcmFtZXMsCisJICogRklGX0NPTlRST0wgYW5kIEZJRl9QU1BPTEwgZmxhZ3MgaW1wbHkgZWFjaCBvdGhlci4KKwkgKiBBbmQgaWYgdGhlIGRldmljZSBoYXMgbW9yZSB0aGFuIG9uZSBmaWx0ZXIgZm9yIGNvbnRyb2wgZnJhbWVzCisJICogb2YgZGlmZmVyZW50IHR5cGVzLCBidXQgaGFzIG5vIGEgc2VwYXJhdGUgZmlsdGVyIGZvciBQUyBQb2xsIGZyYW1lcywKKwkgKiBGSUZfQ09OVFJPTCBmbGFnIGltcGxpZXMgRklGX1BTUE9MTC4KKwkgKi8KKwlpZiAoIXRlc3RfYml0KERSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSUywgJnJ0MngwMGRldi0+ZmxhZ3MpKSB7CisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQ09OVFJPTCB8fCAqdG90YWxfZmxhZ3MgJiBGSUZfUFNQT0xMKQorCQkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9DT05UUk9MIHwgRklGX1BTUE9MTDsKKwl9CisJaWYgKCF0ZXN0X2JpdChEUklWRVJfU1VQUE9SVF9DT05UUk9MX0ZJTFRFUl9QU1BPTEwsICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0NPTlRST0wpCisJCQkqdG90YWxfZmxhZ3MgfD0gRklGX1BTUE9MTDsKKwl9CisKKwkvKgogCSAqIENoZWNrIGlmIHRoZXJlIGlzIGFueSB3b3JrIGxlZnQgZm9yIHVzLgogCSAqLwogCWlmIChydDJ4MDBkZXYtPnBhY2tldF9maWx0ZXIgPT0gKnRvdGFsX2ZsYWdzKQogCQlyZXR1cm47CiAJcnQyeDAwZGV2LT5wYWNrZXRfZmlsdGVyID0gKnRvdGFsX2ZsYWdzOwogCi0JaWYgKCF0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9TQ0hFRFVMRUQsICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+Y29uZmlnX2ZpbHRlcihydDJ4MDBkZXYsICp0b3RhbF9mbGFncyk7Ci0JZWxzZQotCQlxdWV1ZV93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+ZmlsdGVyX3dvcmspOworCXJ0MngwMGRldi0+b3BzLT5saWItPmNvbmZpZ19maWx0ZXIocnQyeDAwZGV2LCAqdG90YWxfZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIpOwogCitpbnQgcnQyeDAwbWFjX3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCSAgICAgIGJvb2wgc2V0KQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKKworCXJ0MngwMGxpYl9iZWFjb25kb25lKHJ0MngwMGRldik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfc2V0X3RpbSk7CisKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9DUllQVE8KIHN0YXRpYyB2b2lkIG1lbWNweV90a2lwKHN0cnVjdCBydDJ4MDBsaWJfY3J5cHRvICpjcnlwdG8sIHU4ICprZXksIHU4IGtleV9sZW4pCiB7CkBAIC01NzIsMTEgKzU4MiwxMCBAQAogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwotCXVuc2lnbmVkIGludCBkZWxheWVkID0gMDsKIAlpbnQgdXBkYXRlX2Jzc2lkID0gMDsKIAogCS8qCi0JICogTWFjODAyMTEgbWlnaHQgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdoaWxlIHdlIGFyZSB0cnlpbmcKKwkgKiBtYWM4MDIxMSBtaWdodCBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2hpbGUgd2UgYXJlIHRyeWluZwogCSAqIHRvIHJlbW92ZSB0aGUgZGV2aWNlIG9yIHBlcmhhcHMgc3VzcGVuZGluZyBpdC4KIAkgKi8KIAlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykpCkBAIC02MjYsMzAgKzYzNSwxNSBAQAogCQllbHNlCiAJCQlydDJ4MDBkZXYtPmludGZfYXNzb2NpYXRlZC0tOwogCi0JCWlmICghdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfU0NIRURVTEVELCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCQlydDJ4MDBsZWRzX2xlZF9hc3NvYyhydDJ4MDBkZXYsCi0JCQkJCSAgICAgISFydDJ4MDBkZXYtPmludGZfYXNzb2NpYXRlZCk7Ci0JCWVsc2UKLQkJCWRlbGF5ZWQgfD0gREVMQVlFRF9MRURfQVNTT0M7CisJCXJ0MngwMGxlZHNfbGVkX2Fzc29jKHJ0MngwMGRldiwgISFydDJ4MDBkZXYtPmludGZfYXNzb2NpYXRlZCk7CiAJfQogCiAJLyoKIAkgKiBXaGVuIHRoZSBlcnAgaW5mb3JtYXRpb24gaGFzIGNoYW5nZWQsIHdlIHNob3VsZCBwZXJmb3JtCiAJICogYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHN0ZXBzLiBGb3IgYWxsIG90aGVyIGNoYW5nZXMgd2UgYXJlIGRvbmUuCiAJICovCi0JaWYgKGNoYW5nZXMgJiB+KEJTU19DSEFOR0VEX0FTU09DIHwgQlNTX0NIQU5HRURfSFQpKSB7Ci0JCWlmICghdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfU0NIRURVTEVELCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCQlydDJ4MDBsaWJfY29uZmlnX2VycChydDJ4MDBkZXYsIGludGYsIGJzc19jb25mKTsKLQkJZWxzZQotCQkJZGVsYXllZCB8PSBERUxBWUVEX0NPTkZJR19FUlA7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZpbnRmLT5sb2NrKTsKLQlpZiAoZGVsYXllZCkgewotCQlpbnRmLT5kZWxheWVkX2ZsYWdzIHw9IGRlbGF5ZWQ7Ci0JCXNjaGVkdWxlX3dvcmsoJnJ0MngwMGRldi0+aW50Zl93b3JrKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmludGYtPmxvY2spOworCWlmIChjaGFuZ2VzICYgfihCU1NfQ0hBTkdFRF9BU1NPQyB8IEJTU19DSEFOR0VEX0hUKSkKKwkJcnQyeDAwbGliX2NvbmZpZ19lcnAocnQyeDAwZGV2LCBpbnRmLCBic3NfY29uZik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfYnNzX2luZm9fY2hhbmdlZCk7CiAKQEAgLTY4NywzICs2ODEsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19jb25mX3R4KTsKKwordm9pZCBydDJ4MDBtYWNfcmZraWxsX3BvbGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OworCWJvb2wgYWN0aXZlID0gISFydDJ4MDBkZXYtPm9wcy0+bGliLT5yZmtpbGxfcG9sbChydDJ4MDBkZXYpOworCisJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShody0+d2lwaHksICFhY3RpdmUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX3Jma2lsbF9wb2xsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKaW5kZXggNDRlNWIzMi4uNTc3MDI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKQEAgLTE0OCwzNSArMTQ4LDg5IEBACiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIH0KIAotdm9pZCBydDJ4MDBxdWV1ZV9wYXlsb2FkX2FsaWduKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICAgYm9vbCBsMnBhZCwgdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGgpCit2b2lkIHJ0MngwMHF1ZXVlX2FsaWduX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7CiAJdW5zaWduZWQgaW50IGZyYW1lX2xlbmd0aCA9IHNrYi0+bGVuOwotCXVuc2lnbmVkIGludCBhbGlnbiA9IEFMSUdOX1NJWkUoc2tiLCBoZWFkZXJfbGVuZ3RoKTsKKwl1bnNpZ25lZCBpbnQgYWxpZ24gPSBBTElHTl9TSVpFKHNrYiwgMCk7CiAKIAlpZiAoIWFsaWduKQogCQlyZXR1cm47CiAKLQlpZiAobDJwYWQpIHsKLQkJaWYgKHNrYmRlc2MtPmZsYWdzICYgU0tCREVTQ19MMl9QQURERUQpIHsKLQkJCS8qIFJlbW92ZSBMMiBwYWRkaW5nICovCi0JCQltZW1tb3ZlKHNrYi0+ZGF0YSArIGFsaWduLCBza2ItPmRhdGEsIGhlYWRlcl9sZW5ndGgpOwotCQkJc2tiX3B1bGwoc2tiLCBhbGlnbik7Ci0JCQlza2JkZXNjLT5mbGFncyAmPSB+U0tCREVTQ19MMl9QQURERUQ7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBBZGQgTDIgcGFkZGluZyAqLwotCQkJc2tiX3B1c2goc2tiLCBhbGlnbik7Ci0JCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgYWxpZ24sIGhlYWRlcl9sZW5ndGgpOwotCQkJc2tiZGVzYy0+ZmxhZ3MgfD0gU0tCREVTQ19MMl9QQURERUQ7Ci0JCX0KKwlza2JfcHVzaChza2IsIGFsaWduKTsKKwltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgYWxpZ24sIGZyYW1lX2xlbmd0aCk7CisJc2tiX3RyaW0oc2tiLCBmcmFtZV9sZW5ndGgpOworfQorCit2b2lkIHJ0MngwMHF1ZXVlX2FsaWduX3BheWxvYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndCkKK3sKKwl1bnNpZ25lZCBpbnQgZnJhbWVfbGVuZ3RoID0gc2tiLT5sZW47CisJdW5zaWduZWQgaW50IGFsaWduID0gQUxJR05fU0laRShza2IsIGhlYWRlcl9sZW5ndCk7CisKKwlpZiAoIWFsaWduKQorCQlyZXR1cm47CisKKwlza2JfcHVzaChza2IsIGFsaWduKTsKKwltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgYWxpZ24sIGZyYW1lX2xlbmd0aCk7CisJc2tiX3RyaW0oc2tiLCBmcmFtZV9sZW5ndGgpOworfQorCit2b2lkIHJ0MngwMHF1ZXVlX2luc2VydF9sMnBhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCkKK3sKKwlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfbGVuZ3RoID0gc2tiLT5sZW47CisJdW5zaWduZWQgaW50IGhlYWRlcl9hbGlnbiA9IEFMSUdOX1NJWkUoc2tiLCAwKTsKKwl1bnNpZ25lZCBpbnQgcGF5bG9hZF9hbGlnbiA9IEFMSUdOX1NJWkUoc2tiLCBoZWFkZXJfbGVuZ3RoKTsKKwl1bnNpZ25lZCBpbnQgbDJwYWQgPSA0IC0gKHBheWxvYWRfYWxpZ24gLSBoZWFkZXJfYWxpZ24pOworCisJaWYgKGhlYWRlcl9hbGlnbiA9PSBwYXlsb2FkX2FsaWduKSB7CisJCS8qCisJCSAqIEJvdGggaGVhZGVyIGFuZCBwYXlsb2FkIG11c3QgYmUgbW92ZWQgdGhlIHNhbWUKKwkJICogYW1vdW50IG9mIGJ5dGVzIHRvIGFsaWduIHRoZW0gcHJvcGVybHkuIFRoaXMgbWVhbnMKKwkJICogd2UgZG9uJ3QgdXNlIHRoZSBMMiBwYWRkaW5nIGJ1dCBqdXN0IG1vdmUgdGhlIGVudGlyZQorCQkgKiBmcmFtZS4KKwkJICovCisJCXJ0MngwMHF1ZXVlX2FsaWduX2ZyYW1lKHNrYik7CisJfSBlbHNlIGlmICghcGF5bG9hZF9hbGlnbikgeworCQkvKgorCQkgKiBTaW1wbGUgTDIgcGFkZGluZywgb25seSB0aGUgaGVhZGVyIG5lZWRzIHRvIGJlIG1vdmVkLAorCQkgKiB0aGUgcGF5bG9hZCBpcyBhbHJlYWR5IHByb3Blcmx5IGFsaWduZWQuCisJCSAqLworCQlza2JfcHVzaChza2IsIGhlYWRlcl9hbGlnbik7CisJCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBoZWFkZXJfYWxpZ24sIGZyYW1lX2xlbmd0aCk7CisJCXNrYmRlc2MtPmZsYWdzIHw9IFNLQkRFU0NfTDJfUEFEREVEOwogCX0gZWxzZSB7Ci0JCS8qIEdlbmVyaWMgcGF5bG9hZCBhbGlnbm1lbnQgdG8gNC1ieXRlIGJvdW5kYXJ5ICovCi0JCXNrYl9wdXNoKHNrYiwgYWxpZ24pOwotCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgYWxpZ24sIGZyYW1lX2xlbmd0aCk7CisJCS8qCisJCSAqCisJCSAqIENvbXBsaWNhdGVkIEwyIHBhZGRpbmcsIGJvdGggaGVhZGVyIGFuZCBwYXlsb2FkIG5lZWQKKwkJICogdG8gYmUgbW92ZWQuIEJ5IGRlZmF1bHQgd2Ugb25seSBtb3ZlIHRvIHRoZSBzdGFydAorCQkgKiBvZiB0aGUgYnVmZmVyLCBzbyBvdXIgaGVhZGVyIGFsaWdubWVudCBuZWVkcyB0byBiZQorCQkgKiBpbmNyZWFzZWQgaWYgdGhlcmUgaXMgbm90IGVub3VnaCByb29tIGZvciB0aGUgaGVhZGVyCisJCSAqIHRvIGJlIG1vdmVkLgorCQkgKi8KKwkJaWYgKHBheWxvYWRfYWxpZ24gPiBoZWFkZXJfYWxpZ24pCisJCQloZWFkZXJfYWxpZ24gKz0gNDsKKworCQlza2JfcHVzaChza2IsIGhlYWRlcl9hbGlnbik7CisJCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBoZWFkZXJfYWxpZ24sIGhlYWRlcl9sZW5ndGgpOworCQltZW1tb3ZlKHNrYi0+ZGF0YSArIGhlYWRlcl9sZW5ndGggKyBsMnBhZCwKKwkJCXNrYi0+ZGF0YSArIGhlYWRlcl9sZW5ndGggKyBsMnBhZCArIGhlYWRlcl9hbGlnbiwKKwkJCWZyYW1lX2xlbmd0aCAtIGhlYWRlcl9sZW5ndGgpOworCQlza2JkZXNjLT5mbGFncyB8PSBTS0JERVNDX0wyX1BBRERFRDsKIAl9CiB9CiAKK3ZvaWQgcnQyeDAwcXVldWVfcmVtb3ZlX2wycGFkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3RoKQoreworCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOworCXVuc2lnbmVkIGludCBsMnBhZCA9IDQgLSAoaGVhZGVyX2xlbmd0aCAmIDMpOworCisJaWYgKCFsMnBhZCB8fCAoc2tiZGVzYy0+ZmxhZ3MgJiBTS0JERVNDX0wyX1BBRERFRCkpCisJCXJldHVybjsKKworCW1lbW1vdmUoc2tiLT5kYXRhICsgbDJwYWQsIHNrYi0+ZGF0YSwgaGVhZGVyX2xlbmd0aCk7CisJc2tiX3B1bGwoc2tiLCBsMnBhZCk7Cit9CisKIHN0YXRpYyB2b2lkIHJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yX3NlcShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAogCQkJCQkJIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKIHsKQEAgLTMyNCw3ICszNzgsOCBAQAogCS8qCiAJICogQ2hlY2sgaWYgbW9yZSBmcmFnbWVudHMgYXJlIHBlbmRpbmcKIAkgKi8KLQlpZiAoaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCWlmIChpZWVlODAyMTFfaGFzX21vcmVmcmFncyhoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJICAgICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTU9SRV9GUkFNRVMpKSB7CiAJCV9fc2V0X2JpdChFTlRSWV9UWERfQlVSU1QsICZ0eGRlc2MtPmZsYWdzKTsKIAkJX19zZXRfYml0KEVOVFJZX1RYRF9NT1JFX0ZSQUcsICZ0eGRlc2MtPmZsYWdzKTsKIAl9CkBAIC00NTIsOSArNTA3LDE4IEBACiAJCQlydDJ4MDBjcnlwdG9fdHhfcmVtb3ZlX2l2KHNrYiwgJnR4ZGVzYyk7CiAJfQogCisJLyoKKwkgKiBXaGVuIERNQSBhbGxvY2F0aW9uIGlzIHJlcXVpcmVkIHdlIHNob3VsZCBndWFyZW50ZWUgdG8gdGhlCisJICogZHJpdmVyIHRoYXQgdGhlIERNQSBpcyBhbGlnbmVkIHRvIGEgNC1ieXRlIGJvdW5kYXJ5LgorCSAqIEhvd2V2ZXIgc29tZSBkcml2ZXJzIHJlcXVpcmUgTDIgcGFkZGluZyB0byBwYWQgdGhlIHBheWxvYWQKKwkgKiByYXRoZXIgdGhlbiB0aGUgaGVhZGVyLiBUaGlzIGNvdWxkIGJlIGEgcmVxdWlyZW1lbnQgZm9yCisJICogUENJIGFuZCBVU0IgZGV2aWNlcywgd2hpbGUgaGVhZGVyIGFsaWdubWVudCBvbmx5IGlzIHZhbGlkCisJICogZm9yIFBDSSBkZXZpY2VzLgorCSAqLwogCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9MMlBBRCwgJnF1ZXVlLT5ydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcnQyeDAwcXVldWVfcGF5bG9hZF9hbGlnbihlbnRyeS0+c2tiLCB0cnVlLAotCQkJCQkgIHR4ZGVzYy5oZWFkZXJfbGVuZ3RoKTsKKwkJcnQyeDAwcXVldWVfaW5zZXJ0X2wycGFkKGVudHJ5LT5za2IsIHR4ZGVzYy5oZWFkZXJfbGVuZ3RoKTsKKwllbHNlIGlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZxdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykpCisJCXJ0MngwMHF1ZXVlX2FsaWduX2ZyYW1lKGVudHJ5LT5za2IpOwogCiAJLyoKIAkgKiBJdCBjb3VsZCBiZSBwb3NzaWJsZSB0aGF0IHRoZSBxdWV1ZSB3YXMgY29ycnVwdGVkIGFuZCB0aGlzCkBAIC00OTAsMTQgKzU1NCwyNSBAQAogCWlmICh1bmxpa2VseSghaW50Zi0+YmVhY29uKSkKIAkJcmV0dXJuIC1FTk9CVUZTOwogCisJbXV0ZXhfbG9jaygmaW50Zi0+YmVhY29uX3NrYl9tdXRleCk7CisKKwkvKgorCSAqIENsZWFuIHVwIHRoZSBiZWFjb24gc2tiLgorCSAqLworCXJ0MngwMHF1ZXVlX2ZyZWVfc2tiKHJ0MngwMGRldiwgaW50Zi0+YmVhY29uLT5za2IpOworCWludGYtPmJlYWNvbi0+c2tiID0gTlVMTDsKKwogCWlmICghZW5hYmxlX2JlYWNvbikgewogCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5raWxsX3R4X3F1ZXVlKHJ0MngwMGRldiwgUUlEX0JFQUNPTik7CisJCW11dGV4X3VubG9jaygmaW50Zi0+YmVhY29uX3NrYl9tdXRleCk7CiAJCXJldHVybiAwOwogCX0KIAogCWludGYtPmJlYWNvbi0+c2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocnQyeDAwZGV2LT5odywgdmlmKTsKLQlpZiAoIWludGYtPmJlYWNvbi0+c2tiKQorCWlmICghaW50Zi0+YmVhY29uLT5za2IpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpbnRmLT5iZWFjb25fc2tiX211dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJLyoKIAkgKiBDb3B5IGFsbCBUWCBkZXNjcmlwdG9yIGluZm9ybWF0aW9uIGludG8gdHhkZXNjLApAQCAtNTM1LDYgKzYxMCw4IEBACiAJcnQyeDAwZGV2LT5vcHMtPmxpYi0+d3JpdGVfYmVhY29uKGludGYtPmJlYWNvbik7CiAJcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lja190eF9xdWV1ZShydDJ4MDBkZXYsIFFJRF9CRUFDT04pOwogCisJbXV0ZXhfdW5sb2NrKCZpbnRmLT5iZWFjb25fc2tiX211dGV4KTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCmluZGV4IGI1ZTA2MzQuLmE1NTkxZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogLyoqCi0gKiBET0M6IEVudHJpZSBmcmFtZSBzaXplCisgKiBET0M6IEVudHJ5IGZyYW1lIHNpemUKICAqCiAgKiBSYWxpbmsgUENJIGRldmljZXMgZGVtYW5kIHRoZSBGcmFtZSBzaXplIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTI4IGJ5dGVzLAogICogZm9yIFVTQiBkZXZpY2VzIHRoaXMgcmVzdHJpY3Rpb24gZG9lcyBub3QgYXBwbHksIGJ1dCB0aGUgdmFsdWUgb2YKQEAgLTQ1LDEzICs0NSwxMyBAQAogLyoqCiAgKiBET0M6IE51bWJlciBvZiBlbnRyaWVzIHBlciBxdWV1ZQogICoKLSAqIFVuZGVyIG5vcm1hbCBsb2FkIHdpdGhvdXQgZnJhZ21lbnRhdGlvbiAxMiBlbnRyaWVzIGFyZSBzdWZmaWNpZW50CisgKiBVbmRlciBub3JtYWwgbG9hZCB3aXRob3V0IGZyYWdtZW50YXRpb24sIDEyIGVudHJpZXMgYXJlIHN1ZmZpY2llbnQKICAqIHdpdGhvdXQgdGhlIHF1ZXVlIGJlaW5nIGZpbGxlZCB1cCB0byB0aGUgbWF4aW11bS4gV2hlbiB1c2luZyBmcmFnbWVudGF0aW9uCi0gKiBhbmQgdGhlIHF1ZXVlIHRocmVzaG9sZCBjb2RlIHdlIG5lZWQgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBtYXJnaW5zIHRvCisgKiBhbmQgdGhlIHF1ZXVlIHRocmVzaG9sZCBjb2RlLCB3ZSBuZWVkIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgbWFyZ2lucyB0bwogICogbWFrZSBzdXJlIHRoZSBxdWV1ZSB3aWxsIG5ldmVyIChvciBvbmx5IHVuZGVyIGV4dHJlbWUgbG9hZCkgZmlsbCB1cAogICogY29tcGxldGVseS4KLSAqIFNpbmNlIHdlIGRvbid0IHVzZSBwcmVhbGxvY2F0ZWQgRE1BIGhhdmluZyBhIGxhcmdlIG51bWJlciBvZiBxdWV1ZSBlbnRyaWVzCi0gKiB3aWxsIGhhdmUgb25seSBtaW5pbWFsIGltcGFjdCBvbiB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgdGhlIHF1ZXVlLgorICogU2luY2Ugd2UgZG9uJ3QgdXNlIHByZWFsbG9jYXRlZCBETUEsIGhhdmluZyBhIGxhcmdlIG51bWJlciBvZiBxdWV1ZSBlbnRyaWVzCisgKiB3aWxsIGhhdmUgbWluaW1hbCBpbXBhY3Qgb24gdGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIHRoZSBxdWV1ZS4KICAqLwogI2RlZmluZSBSWF9FTlRSSUVTCTI0CiAjZGVmaW5lIFRYX0VOVFJJRVMJMjQKQEAgLTIxNCw2ICsyMTQsNyBAQAogICoKICAqIEBUWERPTkVfVU5LTk9XTjogSGFyZHdhcmUgY291bGQgbm90IGRldGVybWluZSBzdWNjZXNzIG9mIHRyYW5zbWlzc2lvbi4KICAqIEBUWERPTkVfU1VDQ0VTUzogRnJhbWUgd2FzIHN1Y2Nlc3NmdWxseSBzZW5kCisgKiBAVFhET05FX0ZBTExCQUNLOiBGcmFtZSB3YXMgc3VjY2Vzc2Z1bGx5IHNlbmQgdXNpbmcgYSBmYWxsYmFjayByYXRlLgogICogQFRYRE9ORV9GQUlMVVJFOiBGcmFtZSB3YXMgbm90IHN1Y2Nlc3NmdWxseSBzZW5kCiAgKiBAVFhET05FX0VYQ0VTU0lWRV9SRVRSWTogSW4gYWRkaXRpb24gdG8gJlRYRE9ORV9GQUlMVVJFLCB0aGUKICAqCWZyYW1lIHRyYW5zbWlzc2lvbiBmYWlsZWQgZHVlIHRvIGV4Y2Vzc2l2ZSByZXRyaWVzLgpAQCAtMjIxLDYgKzIyMiw3IEBACiBlbnVtIHR4ZG9uZV9lbnRyeV9kZXNjX2ZsYWdzIHsKIAlUWERPTkVfVU5LTk9XTiwKIAlUWERPTkVfU1VDQ0VTUywKKwlUWERPTkVfRkFMTEJBQ0ssCiAJVFhET05FX0ZBSUxVUkUsCiAJVFhET05FX0VYQ0VTU0lWRV9SRVRSWSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmgKaW5kZXggODYxMzIyZC4uOTgzZTUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaApAQCAtMTc2LDggKzE3Niw4IEBACiAjZGVmaW5lIGlzX3ZhbGlkX21hc2soeCkJaXNfcG93ZXJfb2ZfdHdvKDFMVSArICh4KSArIGxvd19iaXRfbWFzayh4KSkKIAogLyoKLSAqIE1hY3JvJ3MgdG8gZmluZCBmaXJzdCBzZXQgYml0IGluIGEgdmFyaWFibGUuCi0gKiBUaGVzZSBtYWNybydzIGJlaGF2ZXMgdGhlIHNhbWUgYXMgdGhlIF9fZmZzKCkgZnVuY3Rpb24gd2l0aAorICogTWFjcm9zIHRvIGZpbmQgZmlyc3Qgc2V0IGJpdCBpbiBhIHZhcmlhYmxlLgorICogVGhlc2UgbWFjcm9zIGJlaGF2ZSB0aGUgc2FtZSBhcyB0aGUgX19mZnMoKSBmdW5jdGlvbnMgYnV0CiAgKiB0aGUgbW9zdCBpbXBvcnRhbnQgZGlmZmVyZW5jZSB0aGF0IHRoaXMgaXMgZG9uZSBkdXJpbmcKICAqIGNvbXBpbGUtdGltZSByYXRoZXIgdGhlbiBydW4tdGltZS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmQ0YzY3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZmtpbGwuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKLQk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgotCi0JVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLQlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0JKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0JTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0JR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0JYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0JRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotCTU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotLyoKLQlNb2R1bGU6IHJ0MngwMHJma2lsbAotCUFic3RyYWN0OiBydDJ4MDAgcmZraWxsIHJvdXRpbmVzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgInJ0MngwMC5oIgotI2luY2x1ZGUgInJ0MngwMGxpYi5oIgotCi1zdGF0aWMgdm9pZCBydDJ4MDByZmtpbGxfcG9sbChzdHJ1Y3QgaW5wdXRfcG9sbGVkX2RldiAqcG9sbF9kZXYpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHBvbGxfZGV2LT5wcml2YXRlOwotCWludCBzdGF0ZSwgb2xkX3N0YXRlOwotCi0JaWYgKCF0ZXN0X2JpdChSRktJTExfU1RBVEVfUkVHSVNURVJFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSB8fAotCSAgICAhdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybjsKLQotCS8qCi0JICogUG9sbCBsYXRlc3Qgc3RhdGUsIGlmIHRoZSBzdGF0ZSBpcyBkaWZmZXJlbnQgdGhlbiB0aGUgcHJldmlvdXMgc3RhdGUsCi0JICogd2Ugc2hvdWxkIGdlbmVyYXRlIGFuIGlucHV0IGV2ZW50LgotCSAqLwotCXN0YXRlID0gISFydDJ4MDBkZXYtPm9wcy0+bGliLT5yZmtpbGxfcG9sbChydDJ4MDBkZXYpOwotCW9sZF9zdGF0ZSA9ICEhdGVzdF9iaXQoUkZLSUxMX1NUQVRFX0JMT0NLRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSk7Ci0KLQlpZiAob2xkX3N0YXRlICE9IHN0YXRlKSB7Ci0JCWlucHV0X3JlcG9ydF9zd2l0Y2gocG9sbF9kZXYtPmlucHV0LCBTV19SRktJTExfQUxMLCBzdGF0ZSk7Ci0JCWNoYW5nZV9iaXQoUkZLSUxMX1NUQVRFX0JMT0NLRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSk7Ci0JfQotfQotCi12b2lkIHJ0MngwMHJma2lsbF9yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCWlmICghdGVzdF9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSB8fAotCSAgICB0ZXN0X2JpdChSRktJTExfU1RBVEVfUkVHSVNURVJFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSkKLQkJcmV0dXJuOwotCi0JaWYgKGlucHV0X3JlZ2lzdGVyX3BvbGxlZF9kZXZpY2UocnQyeDAwZGV2LT5yZmtpbGxfcG9sbF9kZXYpKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBwb2xsZWQgZGV2aWNlLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlfX3NldF9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSk7Ci0KLQkvKgotCSAqIEZvcmNlIGluaXRpYWwgcG9sbCB3aGljaCB3aWxsIGRldGVjdCB0aGUgaW5pdGlhbCBkZXZpY2Ugc3RhdGUsCi0JICogYW5kIGNvcnJlY3RseSBzZW5kcyB0aGUgc2lnbmFsIHRvIHRoZSBpbnB1dCBsYXllciBhYm91dCB0aGlzCi0JICogc3RhdGUuCi0JICovCi0JcnQyeDAwcmZraWxsX3BvbGwocnQyeDAwZGV2LT5yZmtpbGxfcG9sbF9kZXYpOwotfQotCi12b2lkIHJ0MngwMHJma2lsbF91bnJlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0JaWYgKCF0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpIHx8Ci0JICAgICF0ZXN0X2JpdChSRktJTExfU1RBVEVfUkVHSVNURVJFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSkKLQkJcmV0dXJuOwotCi0JaW5wdXRfdW5yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2KTsKLQotCV9fY2xlYXJfYml0KFJGS0lMTF9TVEFURV9SRUdJU1RFUkVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOwotfQotCi12b2lkIHJ0MngwMHJma2lsbF9hbGxvY2F0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCXN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpwb2xsX2RldjsKLQotCWlmICh0ZXN0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpIHx8Ci0JICAgICF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuOwotCi0JcG9sbF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9wb2xsZWRfZGV2aWNlKCk7Ci0JaWYgKCFwb2xsX2RldikgewotCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgcG9sbGVkIGRldmljZS5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcG9sbF9kZXYtPnByaXZhdGUgPSBydDJ4MDBkZXY7Ci0JcG9sbF9kZXYtPnBvbGwgPSBydDJ4MDByZmtpbGxfcG9sbDsKLQlwb2xsX2Rldi0+cG9sbF9pbnRlcnZhbCA9IFJGS0lMTF9QT0xMX0lOVEVSVkFMOwotCi0JcG9sbF9kZXYtPmlucHV0LT5uYW1lID0gcnQyeDAwZGV2LT5vcHMtPm5hbWU7Ci0JcG9sbF9kZXYtPmlucHV0LT5waHlzID0gd2lwaHlfbmFtZShydDJ4MDBkZXYtPmh3LT53aXBoeSk7Ci0JcG9sbF9kZXYtPmlucHV0LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7Ci0JcG9sbF9kZXYtPmlucHV0LT5pZC52ZW5kb3IgPSAweDE4MTQ7Ci0JcG9sbF9kZXYtPmlucHV0LT5pZC5wcm9kdWN0ID0gcnQyeDAwZGV2LT5jaGlwLnJ0OwotCXBvbGxfZGV2LT5pbnB1dC0+aWQudmVyc2lvbiA9IHJ0MngwMGRldi0+Y2hpcC5yZXY7Ci0JcG9sbF9kZXYtPmlucHV0LT5kZXYucGFyZW50ID0gd2lwaHlfZGV2KHJ0MngwMGRldi0+aHctPndpcGh5KTsKLQlwb2xsX2Rldi0+aW5wdXQtPmV2Yml0WzBdID0gQklUKEVWX1NXKTsKLQlwb2xsX2Rldi0+aW5wdXQtPnN3Yml0WzBdID0gQklUKFNXX1JGS0lMTF9BTEwpOwotCi0JcnQyeDAwZGV2LT5yZmtpbGxfcG9sbF9kZXYgPSBwb2xsX2RldjsKLQotCV9fc2V0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOwotfQotCi12b2lkIHJ0MngwMHJma2lsbF9mcmVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0JaWYgKCFfX3Rlc3RfYW5kX2NsZWFyX2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELAotCQkJCSAgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSkKLQkJcmV0dXJuOwotCi0JaW5wdXRfZnJlZV9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2KTsKLQlydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2RldiA9IE5VTEw7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYwppbmRleCA0OWIyOWZmLi5iMjBlM2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKQEAgLTIzNyw3ICsyMzcsNiBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCiAKLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKIHN0YXRpYyBpbnQgcnQ2MXBjaV9yZmtpbGxfcG9sbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXUzMiByZWc7CkBAIC0yNDUsOSArMjQ0LDYgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxMywgJnJlZyk7CiAJcmV0dXJuIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IxM19CSVQ1KTsKIH0KLSNlbHNlCi0jZGVmaW5lIHJ0NjFwY2lfcmZraWxsX3BvbGwJTlVMTAotI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLwogCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfTEVEUwogc3RhdGljIHZvaWQgcnQ2MXBjaV9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKQEAgLTUzNCw3ICs1MzAsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9QSFlTSUNBTCwKIAkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX1BMQ1BGQUlMKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX0NPTlRST0wsCi0JCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9DT05UUk9MKSk7CisJCQkgICAhKGZpbHRlcl9mbGFncyAmIChGSUZfQ09OVFJPTCB8IEZJRl9QU1BPTEwpKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX05PVF9UT19NRSwKIAkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX1RPX0RTLApAQCAtNjAyLDcgKzU5OCw3IEBACiAJdTMyIHJlZzsKIAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IwLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX1JYX0FDS19USU1FT1VULCBlcnAtPmFja190aW1lb3V0KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX1JYX0FDS19USU1FT1VULCAweDMyKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX1RTRl9PRkZTRVQsIElFRUU4MDIxMV9IRUFERVIpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgcmVnKTsKIApAQCAtMTg1OSw4ICsxODU1LDYgQEAKIAkgKiBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgc2VuZGluZyBvdXQgaW52YWxpZCBkYXRhLgogCSAqLwogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1I5LCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RTRl9USUNLSU5HLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RCVFRfRU5BQkxFLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X0JFQUNPTl9HRU4sIDApOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgcmVnKTsKIApAQCAtMjMxNiw3ICsyMzEwLDcgQEAKIAl9CiAKIAkvKgotCSAqIERldGVybWluZSBudW1iZXIgb2YgYW50ZW5uYSdzLgorCSAqIERldGVybWluZSBudW1iZXIgb2YgYW50ZW5uYXMuCiAJICovCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX05VTSkgPT0gMikKIAkJX19zZXRfYml0KENPTkZJR19ET1VCTEVfQU5URU5OQSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwpAQCAtMjMzOCwxMCArMjMzMiw4IEBACiAJLyoKIAkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIGFuIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCiAJICovCi0jaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0hBUkRXQVJFX1JBRElPKSkKIAkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLwogCiAJLyoKIAkgKiBSZWFkIGZyZXF1ZW5jeSBvZmZzZXQgYW5kIFJGIHByb2dyYW1taW5nIHNlcXVlbmNlLgpAQCAtMjYwNyw2ICsyNTk5LDExIEBACiAJaW50IHJldHZhbDsKIAogCS8qCisJICogRGlzYWJsZSBwb3dlciBzYXZpbmcuCisJICovCisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgU09GVF9SRVNFVF9DU1IsIDB4MDAwMDAwMDcpOworCisJLyoKIAkgKiBBbGxvY2F0ZSBlZXByb20gZGF0YS4KIAkgKi8KIAlyZXR2YWwgPSBydDYxcGNpX3ZhbGlkYXRlX2VlcHJvbShydDJ4MDBkZXYpOwpAQCAtMjYyNSw2ICsyNjIyLDEyIEBACiAJCXJldHVybiByZXR2YWw7CiAKIAkvKgorCSAqIFRoaXMgZGV2aWNlIGhhcyBtdWx0aXBsZSBmaWx0ZXJzIGZvciBjb250cm9sIGZyYW1lcywKKwkgKiBidXQgaGFzIG5vIGEgc2VwYXJhdGUgZmlsdGVyIGZvciBQUyBQb2xsIGZyYW1lcy4KKwkgKi8KKwlfX3NldF9iaXQoRFJJVkVSX1NVUFBPUlRfQ09OVFJPTF9GSUxURVJTLCAmcnQyeDAwZGV2LT5mbGFncyk7CisKKwkvKgogCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIGZpcm13YXJlIGFuZCBETUEgbWFwcGVkIHNrYnMuCiAJICovCiAJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0ZJUk1XQVJFLCAmcnQyeDAwZGV2LT5mbGFncyk7CkBAIC0yNzIyLDEyICsyNzI1LDE0IEBACiAJLnJlbW92ZV9pbnRlcmZhY2UJPSBydDJ4MDBtYWNfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnCQkJPSBydDJ4MDBtYWNfY29uZmlnLAogCS5jb25maWd1cmVfZmlsdGVyCT0gcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIsCisJLnNldF90aW0JCT0gcnQyeDAwbWFjX3NldF90aW0sCiAJLnNldF9rZXkJCT0gcnQyeDAwbWFjX3NldF9rZXksCiAJLmdldF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3N0YXRzLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQ2MXBjaV9jb25mX3R4LAogCS5nZXRfdHhfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSBydDYxcGNpX2dldF90c2YsCisJLnJma2lsbF9wb2xsCQk9IHJ0MngwMG1hY19yZmtpbGxfcG9sbCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyeDAwbGliX29wcyBydDYxcGNpX3J0MngwMF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaAppbmRleCA2YzcxZjc3Li45M2ViNjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKQEAgLTE0NzYsNyArMTQ3Niw3IEBACiAjZGVmaW5lIFJYRF9XMTVfUkVTRVJWRUQJCUZJRUxEMzIoMHhmZmZmZmZmZikKIAogLyoKLSAqIE1hY3JvJ3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBtYWM4MDIxMSB2YWx1ZQorICogTWFjcm9zIGZvciBjb252ZXJ0aW5nIHR4cG93ZXIgZnJvbSBFRVBST00gdG8gbWFjODAyMTEgdmFsdWUKICAqIGFuZCBmcm9tIG1hYzgwMjExIHZhbHVlIHRvIHJlZ2lzdGVyIHZhbHVlLgogICovCiAjZGVmaW5lIE1JTl9UWFBPV0VSCTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCmluZGV4IGMxODg0ODguLjFjYmQ5YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwpAQCAtMTgzLDcgKzE4Myw2IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMgKi8KIAotI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAogc3RhdGljIGludCBydDczdXNiX3Jma2lsbF9wb2xsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJdTMyIHJlZzsKQEAgLTE5MSw5ICsxOTAsNiBAQAogCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjEzLCAmcmVnKTsKIAlyZXR1cm4gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjEzX0JJVDcpOwogfQotI2Vsc2UKLSNkZWZpbmUgcnQ3M3VzYl9yZmtpbGxfcG9sbAlOVUxMCi0jZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCiAKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9MRURTCiBzdGF0aWMgdm9pZCBydDczdXNiX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LApAQCAtNDk3LDcgKzQ5Myw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX1BIWVNJQ0FMLAogCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiBGSUZfUExDUEZBSUwpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX0RST1BfQ09OVFJPTCwKLQkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX0NPTlRST0wpKTsKKwkJCSAgICEoZmlsdGVyX2ZsYWdzICYgKEZJRl9DT05UUk9MIHwgRklGX1BTUE9MTCkpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX0RST1BfTk9UX1RPX01FLAogCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX0RST1BfVE9fRFMsCkBAIC01NjUsNyArNTYxLDcgQEAKIAl1MzIgcmVnOwogCiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjAsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfUlhfQUNLX1RJTUVPVVQsIGVycC0+YWNrX3RpbWVvdXQpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfUlhfQUNLX1RJTUVPVVQsIDB4MzIpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfVFNGX09GRlNFVCwgSUVFRTgwMjExX0hFQURFUik7CiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IwLCByZWcpOwogCkBAIC0xNTMxLDggKzE1MjcsNiBAQAogCSAqIG90aGVyd2lzZSB3ZSBtaWdodCBiZSBzZW5kaW5nIG91dCBpbnZhbGlkIGRhdGEuCiAJICovCiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYX0NTUjksICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfVFNGX1RJQ0tJTkcsIDApOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfVEJUVF9FTkFCTEUsIDApOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjlfQkVBQ09OX0dFTiwgMCk7CiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCByZWcpOwogCkBAIC0xODYzLDEwICsxODU3LDggQEAKIAkvKgogCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYW4gaGFyZHdhcmUgY29udHJvbGxlZCByYWRpby4KIAkgKi8KLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfSEFSRFdBUkVfUkFESU8pKQogCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0jZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCiAKIAkvKgogCSAqIFJlYWQgZnJlcXVlbmN5IG9mZnNldC4KQEAgLTIxNTAsMTAgKzIxNDIsMTUgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAogCS8qCisJICogVGhpcyBkZXZpY2UgaGFzIG11bHRpcGxlIGZpbHRlcnMgZm9yIGNvbnRyb2wgZnJhbWVzLAorCSAqIGJ1dCBoYXMgbm8gYSBzZXBhcmF0ZSBmaWx0ZXIgZm9yIFBTIFBvbGwgZnJhbWVzLgorCSAqLworCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9DT05UUk9MX0ZJTFRFUlMsICZydDJ4MDBkZXYtPmZsYWdzKTsKKworCS8qCiAJICogVGhpcyBkZXZpY2UgcmVxdWlyZXMgZmlybXdhcmUuCiAJICovCiAJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0ZJUk1XQVJFLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX1NDSEVEVUxFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCWlmICghbW9kcGFyYW1fbm9od2NyeXB0KQogCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKQEAgLTIyNDcsMTIgKzIyNDQsMTQgQEAKIAkucmVtb3ZlX2ludGVyZmFjZQk9IHJ0MngwMG1hY19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IHJ0MngwMG1hY19jb25maWcsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBydDJ4MDBtYWNfY29uZmlndXJlX2ZpbHRlciwKKwkuc2V0X3RpbQkJPSBydDJ4MDBtYWNfc2V0X3RpbSwKIAkuc2V0X2tleQkJPSBydDJ4MDBtYWNfc2V0X2tleSwKIAkuZ2V0X3N0YXRzCQk9IHJ0MngwMG1hY19nZXRfc3RhdHMsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSBydDJ4MDBtYWNfYnNzX2luZm9fY2hhbmdlZCwKIAkuY29uZl90eAkJPSBydDczdXNiX2NvbmZfdHgsCiAJLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0NzN1c2JfZ2V0X3RzZiwKKwkucmZraWxsX3BvbGwJCT0gcnQyeDAwbWFjX3Jma2lsbF9wb2xsLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0NzN1c2JfcnQyeDAwX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCmluZGV4IGM4MDE2ZjYuLjgxZmUwYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaApAQCAtODA5LDcgKzgwOSw3IEBACiAKIC8qCiAgKiBFRVBST00gYW50ZW5uYS4KLSAqIEFOVEVOTkFfTlVNOiBOdW1iZXIgb2YgYW50ZW5uYSdzLgorICogQU5URU5OQV9OVU06IE51bWJlciBvZiBhbnRlbm5hcy4KICAqIFRYX0RFRkFVTFQ6IERlZmF1bHQgYW50ZW5uYSAwOiBkaXZlcnNpdHksIDE6IEEsIDI6IEIuCiAgKiBSWF9ERUZBVUxUOiBEZWZhdWx0IGFudGVubmEgMDogZGl2ZXJzaXR5LCAxOiBBLCAyOiBCLgogICogRlJBTUVfVFlQRTogMDogRFBEVCAsIDE6IFNQRFQgLCBub3RlZCB0aGlzIGJpdCBpcyB2YWxpZCBmb3IgZyBvbmx5LgpAQCAtMTA1OCw3ICsxMDU4LDcgQEAKICNkZWZpbmUgUlhEX1c1X1JFU0VSVkVECQkJRklFTEQzMigweGZmZmZmZmZmKQogCiAvKgotICogTWFjcm8ncyBmb3IgY29udmVydGluZyB0eHBvd2VyIGZyb20gRUVQUk9NIHRvIG1hYzgwMjExIHZhbHVlCisgKiBNYWNyb3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBtYWM4MDIxMSB2YWx1ZQogICogYW5kIGZyb20gbWFjODAyMTEgdmFsdWUgdG8gcmVnaXN0ZXIgdmFsdWUuCiAgKi8KICNkZWZpbmUgTUlOX1RYUE9XRVIJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvTWFrZWZpbGUKaW5kZXggMzdlM2Q0ZC4uOTNjYmZiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogcnRsODE4MC1vYmpzCQk6PSBydGw4MTgwX2Rldi5vIHJ0bDgxODBfcnRsODIyNS5vIHJ0bDgxODBfc2EyNDAwLm8gcnRsODE4MF9tYXgyODIwLm8gcnRsODE4MF9ncmY1MTAxLm8KLXJ0bDgxODctb2JqcwkJOj0gcnRsODE4N19kZXYubyBydGw4MTg3X3J0bDgyMjUubyBydGw4MTg3X2xlZHMubworcnRsODE4Ny1vYmpzCQk6PSBydGw4MTg3X2Rldi5vIHJ0bDgxODdfcnRsODIyNS5vIHJ0bDgxODdfbGVkcy5vIHJ0bDgxODdfcmZraWxsLm8KIAogb2JqLSQoQ09ORklHX1JUTDgxODApCSs9IHJ0bDgxODAubwogb2JqLSQoQ09ORklHX1JUTDgxODcpCSs9IHJ0bDgxODcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jCmluZGV4IDdlNjVkN2MuLjE2NDI5YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMKQEAgLTE0Myw3ICsxNDMsOCBAQAogCQkJaWYgKGZsYWdzICYgUlRMODE4WF9SWF9ERVNDX0ZMQUdfQ1JDMzJfRVJSKQogCQkJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7CiAKLQkJCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRldiwgc2tiLCAmcnhfc3RhdHVzKTsKKwkJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgJnJ4X3N0YXR1cywgc2l6ZW9mKHJ4X3N0YXR1cykpOworCQkJaWVlZTgwMjExX3J4X2lycXNhZmUoZGV2LCBza2IpOwogCiAJCQlza2IgPSBuZXdfc2tiOwogCQkJcHJpdi0+cnhfYnVmW3ByaXYtPnJ4X2lkeF0gPSBza2I7CkBAIC0yODAsNyArMjgxLDcgQEAKIAkJCQkoaWVlZTgwMjExX2dldF90eF9yYXRlKGRldiwgaW5mbyktPmJpdHJhdGUgKiAyKSAvIDEwKTsKIAkJcmVtYWluZGVyID0gKDE2ICogKHNrYi0+bGVuICsgNCkpICUKIAkJCSAgICAoKGllZWU4MDIxMV9nZXRfdHhfcmF0ZShkZXYsIGluZm8pLT5iaXRyYXRlICogMikgLyAxMCk7Ci0JCWlmIChyZW1haW5kZXIgPiAwICYmIHJlbWFpbmRlciA8PSA2KQorCQlpZiAocmVtYWluZGVyIDw9IDYpCiAJCQlwbGNwX2xlbiB8PSAxIDw8IDE1OwogCX0KIApAQCAtNzI3LDEwICs3MjgsMTYgQEAKIAkgICAgICAgIHByaXYtPnJmLT5jb25mX2VycChkZXYsIGluZm8pOwogfQogCitzdGF0aWMgdTY0IHJ0bDgxODBfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBpbnQgbWNfY291bnQsCisJCQkJICAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKK3sKKwlyZXR1cm4gbWNfY291bnQ7Cit9CisKIHN0YXRpYyB2b2lkIHJ0bDgxODBfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKIAkJCQkgICAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJICAgICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCisJCQkJICAgICB1NjQgbXVsdGljYXN0KQogewogCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAKQEAgLTc0MCw3ICs3NDcsNyBAQAogCQlwcml2LT5yeF9jb25mIF49IFJUTDgxOFhfUlhfQ09ORl9DVFJMOwogCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX09USEVSX0JTUykKIAkJcHJpdi0+cnhfY29uZiBePSBSVEw4MThYX1JYX0NPTkZfTU9OSVRPUjsKLQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJIHx8IG1jX2NvdW50ID4gMCkKKwlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJIHx8IG11bHRpY2FzdCA+IDApCiAJCXByaXYtPnJ4X2NvbmYgfD0gUlRMODE4WF9SWF9DT05GX01VTFRJQ0FTVDsKIAllbHNlCiAJCXByaXYtPnJ4X2NvbmYgJj0gflJUTDgxOFhfUlhfQ09ORl9NVUxUSUNBU1Q7CkBAIC03NjcsNiArNzc0LDcgQEAKIAkucmVtb3ZlX2ludGVyZmFjZQk9IHJ0bDgxODBfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnCQkJPSBydGw4MTgwX2NvbmZpZywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0bDgxODBfYnNzX2luZm9fY2hhbmdlZCwKKwkucHJlcGFyZV9tdWx0aWNhc3QJPSBydGw4MTgwX3ByZXBhcmVfbXVsdGljYXN0LAogCS5jb25maWd1cmVfZmlsdGVyCT0gcnRsODE4MF9jb25maWd1cmVfZmlsdGVyLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaAppbmRleCBjMDliZmVmLi5iZjkxNzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaApAQCAtMTMzLDYgKzEzMyw3IEBACiAJCV9fbGUxNiBiaXRzMTY7CiAJCV9fbGUzMiBiaXRzMzI7CiAJfSAqaW9fZG1hYnVmOworCWJvb2wgcmZraWxsX29mZjsKIH07CiAKIHZvaWQgcnRsODE4N193cml0ZV9waHkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyLCB1MzIgZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKaW5kZXggODdhOTU1OC4uMjAxN2NjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYwpAQCAtMzIsNiArMzIsNyBAQAogI2lmZGVmIENPTkZJR19SVEw4MTg3X0xFRFMKICNpbmNsdWRlICJydGw4MTg3X2xlZHMuaCIKICNlbmRpZgorI2luY2x1ZGUgInJ0bDgxODdfcmZraWxsLmgiCiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PiIpOwogTU9EVUxFX0FVVEhPUigiQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PiIpOwpAQCAtMjIwLDcgKzIyMSw3IEBACiAJCSAqIHJlYWRpbmcgYSByZWdpc3RlciBpbiB0aGUgZGV2aWNlLiBXZSBhcmUgaW4gaW50ZXJydXB0IG1vZGUKIAkJICogaGVyZSwgdGh1cyBxdWV1ZSB0aGUgc2tiIGFuZCBmaW5pc2ggb24gYSB3b3JrIHF1ZXVlLiAqLwogCQlza2JfcXVldWVfdGFpbCgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUsIHNrYik7Ci0JCXF1ZXVlX2RlbGF5ZWRfd29yayhody0+d29ya3F1ZXVlLCAmcHJpdi0+d29yaywgMCk7CisJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoaHcsICZwcml2LT53b3JrLCAwKTsKIAl9CiB9CiAKQEAgLTM4MCw3ICszODEsOCBAQAogCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfVFNGVDsKIAlpZiAoZmxhZ3MgJiBSVEw4MThYX1JYX0RFU0NfRkxBR19DUkMzMl9FUlIpCiAJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7Ci0JaWVlZTgwMjExX3J4X2lycXNhZmUoZGV2LCBza2IsICZyeF9zdGF0dXMpOworCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgJnJ4X3N0YXR1cywgc2l6ZW9mKHJ4X3N0YXR1cykpOworCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRldiwgc2tiKTsKIAogCXNrYiA9IGRldl9hbGxvY19za2IoUlRMODE4N19NQVhfUlgpOwogCWlmICh1bmxpa2VseSghc2tiKSkgewpAQCAtNjQ3LDEwICs2NDksMTAgQEAKIAogCS8qIHNldHVwIGNhcmQgKi8KIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIDApOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BJTywgMCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUElPMCwgMCk7CiAKIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsICg0IDw8IDgpKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8sIDEpOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BJTzAsIDEpOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BfRU5BQkxFLCAwKTsKIAogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CkBAIC02NzMsMTEgKzY3NSwxMSBAQAogCiAJLyogaG9zdF91c2JfaW5pdCAqLwogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgMCk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUElPLCAwKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8wLCAwKTsKIAlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgKHU4ICopMHhGRTUzKTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICh1OCAqKTB4RkU1MywgcmVnIHwgKDEgPDwgNykpOwogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgKDQgPDwgOCkpOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BJTywgMHgyMCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUElPMCwgMHgyMCk7CiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUF9FTkFCTEUsIDApOwogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc091dHB1dCwgMHg4MCk7CiAJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAweDgwKTsKQEAgLTkwOSwxMiArOTExLDEyIEBACiAJdTMyIHJlZzsKIAlpbnQgcmV0OwogCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisKIAlyZXQgPSAoIXByaXYtPmlzX3J0bDgxODdiKSA/IHJ0bDgxODdfaW5pdF9odyhkZXYpIDoKIAkJCQkgICAgIHJ0bDgxODdiX2luaXRfaHcoZGV2KTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJCWdvdG8gcnRsODE4N19zdGFydF9leGl0OwogCiAJaW5pdF91c2JfYW5jaG9yKCZwcml2LT5hbmNob3JlZCk7CiAJcHJpdi0+ZGV2ID0gZGV2OwpAQCAtOTQxLDggKzk0Myw3IEBACiAJCQkJICAoNyA8PCAyMSAvKiBNQVggVFggRE1BICovKSk7CiAJCXJ0bDgxODdfaW5pdF91cmJzKGRldik7CiAJCXJ0bDgxODdiX2luaXRfc3RhdHVzX3VyYihkZXYpOwotCQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCQlyZXR1cm4gMDsKKwkJZ290byBydGw4MTg3X3N0YXJ0X2V4aXQ7CiAJfQogCiAJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+SU5UX01BU0ssIDB4RkZGRik7CkBAIC05ODYsOSArOTg3LDEwIEBACiAJcmVnIHw9IFJUTDgxOFhfQ01EX1JYX0VOQUJMRTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNNRCwgcmVnKTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+d29yaywgcnRsODE4N193b3JrKTsKLQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CitydGw4MTg3X3N0YXJ0X2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTg3X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQpAQCAtMTAxNiw5ICsxMDE4LDEwIEBACiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKIAl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZwcml2LT5hbmNob3JlZCk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwogCWlmICghcHJpdi0+aXNfcnRsODE4N2IpCiAJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+d29yayk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIH0KIAogc3RhdGljIGludCBydGw4MTg3X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LApAQCAtMTE5NywxMCArMTIwMCwxNiBAQAogCQkJCSBpbmZvLT51c2Vfc2hvcnRfcHJlYW1ibGUpOwogfQogCitzdGF0aWMgdTY0IHJ0bDgxODdfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKK3sKKwlyZXR1cm4gbWNfY291bnQ7Cit9CisKIHN0YXRpYyB2b2lkIHJ0bDgxODdfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKIAkJCQkgICAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJICAgICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCisJCQkJICAgICB1NjQgbXVsdGljYXN0KQogewogCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAKQEAgLTEyMTAsNyArMTIxOSw3IEBACiAJCXByaXYtPnJ4X2NvbmYgXj0gUlRMODE4WF9SWF9DT05GX0NUUkw7CiAJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfT1RIRVJfQlNTKQogCQlwcml2LT5yeF9jb25mIF49IFJUTDgxOFhfUlhfQ09ORl9NT05JVE9SOwotCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkgfHwgbWNfY291bnQgPiAwKQorCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkgfHwgbXVsdGljYXN0ID4gMCkKIAkJcHJpdi0+cnhfY29uZiB8PSBSVEw4MThYX1JYX0NPTkZfTVVMVElDQVNUOwogCWVsc2UKIAkJcHJpdi0+cnhfY29uZiAmPSB+UlRMODE4WF9SWF9DT05GX01VTFRJQ0FTVDsKQEAgLTEyNzMsOCArMTI4MiwxMCBAQAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gcnRsODE4N19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IHJ0bDgxODdfY29uZmlnLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnRsODE4N19ic3NfaW5mb19jaGFuZ2VkLAorCS5wcmVwYXJlX211bHRpY2FzdAk9IHJ0bDgxODdfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBydGw4MTg3X2NvbmZpZ3VyZV9maWx0ZXIsCi0JLmNvbmZfdHgJCT0gcnRsODE4N19jb25mX3R4CisJLmNvbmZfdHgJCT0gcnRsODE4N19jb25mX3R4LAorCS5yZmtpbGxfcG9sbAkJPSBydGw4MTg3X3Jma2lsbF9wb2xsCiB9OwogCiBzdGF0aWMgdm9pZCBydGw4MTg3X2VlcHJvbV9yZWdpc3Rlcl9yZWFkKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSkKQEAgLTE1MTQsNiArMTUyNSw3IEBACiAJcmVnICY9IDB4RkY7CiAJcnRsODE4N19sZWRzX2luaXQoZGV2LCByZWcpOwogI2VuZGlmCisJcnRsODE4N19yZmtpbGxfaW5pdChkZXYpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTE1MzcsNiArMTU0OSw3IEBACiAjaWZkZWYgQ09ORklHX1JUTDgxODdfTEVEUwogCXJ0bDgxODdfbGVkc19leGl0KGRldik7CiAjZW5kaWYKKwlydGw4MTg3X3Jma2lsbF9leGl0KGRldik7CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGV2KTsKIAogCXByaXYgPSBkZXYtPnByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfbGVkcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2xlZHMuYwppbmRleCBjZjlmODk5Li5hMWM2NzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfbGVkcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAlzd2l0Y2ggKGxlZC0+bGVkcGluKSB7CiAJY2FzZSBMRURfUElOX0dQSU8wOgotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8sIDB4MDEpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8wLCAweDAxKTsKIAkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUF9FTkFCTEUsIDB4MDApOwogCQlicmVhazsKIAljYXNlIExFRF9QSU5fTEVEMDoKQEAgLTgwLDcgKzgwLDcgQEAKIAltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAlzd2l0Y2ggKGxlZC0+bGVkcGluKSB7CiAJY2FzZSBMRURfUElOX0dQSU8wOgotCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8sIDB4MDEpOworCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8wLCAweDAxKTsKIAkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUF9FTkFCTEUsIDB4MDEpOwogCQlicmVhazsKIAljYXNlIExFRF9QSU5fTEVEMDoKQEAgLTEwOCwxMSArMTA4LDExIEBACiAJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCiAJaWYgKGJyaWdodG5lc3MgPT0gTEVEX09GRikgewotCQlxdWV1ZV9kZWxheWVkX3dvcmsoaHctPndvcmtxdWV1ZSwgJnByaXYtPmxlZF9vZmYsIDApOworCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGh3LCAmcHJpdi0+bGVkX29mZiwgMCk7CiAJCS8qIFRoZSBMRUQgaXMgb2ZmIGZvciAxLzIwIHNlYyBzbyB0aGF0IGl0IGp1c3QgYmxpbmtzLiAqLwotCQlxdWV1ZV9kZWxheWVkX3dvcmsoaHctPndvcmtxdWV1ZSwgJnByaXYtPmxlZF9vbiwgSFogLyAyMCk7CisJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoaHcsICZwcml2LT5sZWRfb24sIEhaIC8gMjApOwogCX0gZWxzZQotCQlxdWV1ZV9kZWxheWVkX3dvcmsoaHctPndvcmtxdWV1ZSwgJnByaXYtPmxlZF9vbiwgMCk7CisJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoaHcsICZwcml2LT5sZWRfb24sIDApOwogfQogCiBzdGF0aWMgaW50IHJ0bDgxODdfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKQEAgLTE5Myw3ICsxOTMsNyBAQAogCWVyciA9IHJ0bDgxODdfcmVnaXN0ZXJfbGVkKGRldiwgJnByaXYtPmxlZF9yeCwgbmFtZSwKIAkJCSBpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKGRldiksIGxlZHBpbik7CiAJaWYgKCFlcnIpIHsKLQkJcXVldWVfZGVsYXllZF93b3JrKGRldi0+d29ya3F1ZXVlLCAmcHJpdi0+bGVkX29uLCAwKTsKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhkZXYsICZwcml2LT5sZWRfb24sIDApOwogCQlyZXR1cm47CiAJfQogCS8qIHJlZ2lzdHJhdGlvbiBvZiBSWCBMRUQgZmFpbGVkIC0gdW5yZWdpc3RlciBUWCAqLwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAogCS8qIHR1cm4gdGhlIExFRCBvZmYgYmVmb3JlIGV4aXRpbmcgKi8KLQlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2LT53b3JrcXVldWUsICZwcml2LT5sZWRfb2ZmLCAwKTsKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGRldiwgJnByaXYtPmxlZF9vZmYsIDApOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+bGVkX29mZik7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5sZWRfb24pOwogCXJ0bDgxODdfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZF9yeCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfcmZraWxsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfcmZraWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZhYjEzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19yZmtpbGwuYwpAQCAtMCwwICsxLDYzIEBACisvKgorICogTGludXggUkZLSUxMIHN1cHBvcnQgZm9yIFJUTDgxODcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSGVydG9uIFJvbmFsZG8gS3J6ZXNpbnNraSA8aGVydG9uQG1hbmRyaXZhLmNvbS5icj4KKyAqCisgKiBCYXNlZCBvbiB0aGUgUkZLSUxMIGhhbmRsaW5nIGluIHRoZSByODE4NyBkcml2ZXIsIHdoaWNoIGlzOgorICogQ29weXJpZ2h0IChjKSBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGFua3MgdG8gUmVhbHRlayBmb3IgdGhlaXIgc3VwcG9ydCEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCisjaW5jbHVkZSAicnRsODE4Ny5oIgorCitzdGF0aWMgYm9vbCBydGw4MTg3X2lzX3JhZGlvX2VuYWJsZWQoc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdikKK3sKKwl1OCBncGlvOworCisJZ3BpbyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5HUElPMCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUElPMCwgZ3BpbyAmIH4weDAyKTsKKwlncGlvID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPkdQSU8xKTsKKworCXJldHVybiBncGlvICYgMHgwMjsKK30KKwordm9pZCBydGw4MTg3X3Jma2lsbF9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCXByaXYtPnJma2lsbF9vZmYgPSBydGw4MTg3X2lzX3JhZGlvX2VuYWJsZWQocHJpdik7CisJcHJpbnRrKEtFUk5fSU5GTyAicnRsODE4Nzogd2lyZWxlc3Mgc3dpdGNoIGlzICVzXG4iLAorCSAgICAgICBwcml2LT5yZmtpbGxfb2ZmID8gIm9uIiA6ICJvZmYiKTsKKwl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKGh3LT53aXBoeSwgIXByaXYtPnJma2lsbF9vZmYpOworCXdpcGh5X3Jma2lsbF9zdGFydF9wb2xsaW5nKGh3LT53aXBoeSk7Cit9CisKK3ZvaWQgcnRsODE4N19yZmtpbGxfcG9sbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlib29sIGVuYWJsZWQ7CisJc3RydWN0IHJ0bDgxODdfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJZW5hYmxlZCA9IHJ0bDgxODdfaXNfcmFkaW9fZW5hYmxlZChwcml2KTsKKwlpZiAodW5saWtlbHkoZW5hYmxlZCAhPSBwcml2LT5yZmtpbGxfb2ZmKSkgeworCQlwcml2LT5yZmtpbGxfb2ZmID0gZW5hYmxlZDsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicnRsODE4Nzogd2lyZWxlc3MgcmFkaW8gc3dpdGNoIHR1cm5lZCAlc1xuIiwKKwkJICAgICAgIGVuYWJsZWQgPyAib24iIDogIm9mZiIpOworCQl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKGh3LT53aXBoeSwgIWVuYWJsZWQpOworCX0KKwltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworfQorCit2b2lkIHJ0bDgxODdfcmZraWxsX2V4aXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJd2lwaHlfcmZraWxsX3N0b3BfcG9sbGluZyhody0+d2lwaHkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X3Jma2lsbC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X3Jma2lsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMjU3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfcmZraWxsLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIFJUTDgxODdfUkZLSUxMX0gKKyNkZWZpbmUgUlRMODE4N19SRktJTExfSAorCit2b2lkIHJ0bDgxODdfcmZraWxsX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw4MTg3X3Jma2lsbF9wb2xsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsODE4N19yZmtpbGxfZXhpdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisKKyNlbmRpZiAvKiBSVEw4MTg3X1JGS0lMTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxOHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4eC5oCmluZGV4IDM0YTU1NTUuLjg1MjI0OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4eC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4eC5oCkBAIC0xMzgsOCArMTM4LDkgQEAKIAlfX2xlMzIJUkZfUEFSQTsKIAlfX2xlMzIJUkZfVElNSU5HOwogCXU4CUdQX0VOQUJMRTsKLQl1OAlHUElPOwotCXU4CXJlc2VydmVkXzEyWzJdOworCXU4CUdQSU8wOworCXU4CUdQSU8xOworCXU4CXJlc2VydmVkXzEyOwogCV9fbGUzMglIU1NJX1BBUkE7CiAJdTgJcmVzZXJ2ZWRfMTNbNF07CiAJdTgJVFhfQUdDX0NUTDsKQEAgLTE5NCw4ICsxOTUsMTggQEAKIAl2b2lkICgqY29uZl9lcnApKHN0cnVjdCBpZWVlODAyMTFfaHcgKiwgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqKTsKIH07CiAKLS8qIFR4L1J4IGZsYWdzIGFyZSBjb21tb24gYmV0d2VlbiBSVEw4MThYIGNoaXBzICovCi0KKy8qKgorICogZW51bSBydGw4MTh4X3R4X2Rlc2NfZmxhZ3MgLSBUeC9SeCBmbGFncyBhcmUgY29tbW9uIGJldHdlZW4gUlRMODE4WCBjaGlwcworICoKKyAqIEBSVEw4MThYX1RYX0RFU0NfRkxBR19OT19FTkM6IERpc2FibGUgaGFyZHdhcmUgYmFzZWQgZW5jcnlwdGlvbi4KKyAqIEBSVEw4MThYX1RYX0RFU0NfRkxBR19UWF9PSzogVFggZnJhbWUgd2FzIEFDS2VkLgorICogQFJUTDgxOFhfVFhfREVTQ19GTEFHX1NQTENQOiBVc2Ugc2hvcnQgcHJlYW1ibGUuCisgKiBAUlRMODE4WF9UWF9ERVNDX0ZMQUdfTU9SRUZSQUc6IE1vcmUgZnJhZ21lbnRzIGZvbGxvdy4KKyAqIEBSVEw4MThYX1RYX0RFU0NfRkxBR19DVFM6IFVzZSBDVFMtdG8tc2VsZiBwcm90ZWN0aW9uLgorICogQFJUTDgxOFhfVFhfREVTQ19GTEFHX1JUUzogVXNlIFJUUy9DVFMgcHJvdGVjdGlvbi4KKyAqIEBSVEw4MThYX1RYX0RFU0NfRkxBR19MUzogTGFzdCBzZWdtZW50IG9mIHRoZSBmcmFtZS4KKyAqIEBSVEw4MThYX1RYX0RFU0NfRkxBR19GUzogRmlyc3Qgc2VnbWVudCBvZiB0aGUgZnJhbWUuCisgKi8KIGVudW0gcnRsODE4eF90eF9kZXNjX2ZsYWdzIHsKIAlSVEw4MThYX1RYX0RFU0NfRkxBR19OT19FTkMJPSAoMSA8PCAxNSksCiAJUlRMODE4WF9UWF9ERVNDX0ZMQUdfVFhfT0sJPSAoMSA8PCAxNSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwppbmRleCAzODM2NmE1Li5lYTZhODdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKQEAgLTE1MzMsNyArMTUzMyw3IEBACiB9CiAKIC8qIEVuY2Fwc3VsYXRlIGEgZGF0YWdyYW0gYW5kIGtpY2sgaXQgaW50byBhIFRUWSBxdWV1ZS4gKi8KLXN0YXRpYyBpbnQgc3RyaXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHN0cmlwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc3RyaXAgKnN0cmlwX2luZm8gPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC0xNTUwLDkgKzE1NTAsMTIgQEAKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHN0cmlwX2luZm8tPnBwc190aW1lciArIEhaKSkgewogCQl1bnNpZ25lZCBsb25nIHQgPSBqaWZmaWVzIC0gc3RyaXBfaW5mby0+cHBzX3RpbWVyOwotCQl1bnNpZ25lZCBsb25nIHJ4X3Bwc19jb3VudCA9IChzdHJpcF9pbmZvLT5yeF9wcHNfY291bnQgKiBIWiAqIDggKyB0IC8gMikgLyB0OwotCQl1bnNpZ25lZCBsb25nIHR4X3Bwc19jb3VudCA9IChzdHJpcF9pbmZvLT50eF9wcHNfY291bnQgKiBIWiAqIDggKyB0IC8gMikgLyB0OwotCQl1bnNpZ25lZCBsb25nIHN4X3Bwc19jb3VudCA9IChzdHJpcF9pbmZvLT5zeF9wcHNfY291bnQgKiBIWiAqIDggKyB0IC8gMikgLyB0OworCQl1bnNpZ25lZCBsb25nIHJ4X3Bwc19jb3VudCA9CisJCQlESVZfUk9VTkRfQ0xPU0VTVChzdHJpcF9pbmZvLT5yeF9wcHNfY291bnQqSFoqOCwgdCk7CisJCXVuc2lnbmVkIGxvbmcgdHhfcHBzX2NvdW50ID0KKwkJCURJVl9ST1VORF9DTE9TRVNUKHN0cmlwX2luZm8tPnR4X3Bwc19jb3VudCpIWio4LCB0KTsKKwkJdW5zaWduZWQgbG9uZyBzeF9wcHNfY291bnQgPQorCQkJRElWX1JPVU5EX0NMT1NFU1Qoc3RyaXBfaW5mby0+c3hfcHBzX2NvdW50KkhaKjgsIHQpOwogCiAJCXN0cmlwX2luZm8tPnBwc190aW1lciA9IGppZmZpZXM7CiAJCXN0cmlwX2luZm8tPnJ4X3Bwc19jb3VudCA9IDA7CkBAIC0xNTgyLDcgKzE1ODUsNyBAQAogCiAJaWYgKHNrYikKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKaW5kZXggYWI3ZmM1Yy4uZDYzNGIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYwpAQCAtMjg0MSw3ICsyODQxLDggQEAKICAqIHRoZSBwYWNrZXQuICBXZSBhbHNvIHByZXZlbnQgcmVlbnRyYW5jZS4gIFRoZW4gd2UgY2FsbCB0aGUgZnVuY3Rpb24KICAqIHRvIHNlbmQgdGhlIHBhY2tldC4KICAqLwotc3RhdGljIGludCB3YXZlbGFuX3BhY2tldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQorc3RhdGljIG5ldGRldl90eF90IHdhdmVsYW5fcGFja2V0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKIHsKIAluZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjg5MSw3ICsyODkyLDcgQEAKICNpZmRlZiBERUJVR19UWF9UUkFDRQogCXByaW50ayhLRVJOX0RFQlVHICIlczogPC13YXZlbGFuX3BhY2tldF94bWl0KClcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKiogSEFSRFdBUkUgQ09ORklHVVJBVElPTiAqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5wLmgKaW5kZXggMmRhYTAyMS4uZGJlOGRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5wLmgKQEAgLTYxMSw3ICs2MTEsNyBAQAogCXd2X3BhY2tldF93cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqLAkvKiBXcml0ZSBhIHBhY2tldCB0byB0aGUgVHggYnVmZmVyLiAqLwogCQkJdm9pZCAqLAogCQkJc2hvcnQpOwotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiAJd2F2ZWxhbl9wYWNrZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLAkvKiBTZW5kIGEgcGFja2V0LiAqLwogCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICopOwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gSEFSRFdBUkUgQ09ORklHVVJBVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCmluZGV4IGM2ZDMwMDYuLjQzMWEyMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKQEAgLTMwNzgsNyArMzA3OCw3IEBACiAgKiB0aGUgcGFja2V0LiBXZSBhbHNvIHByZXZlbnQgcmVlbnRyYW5jZS4gVGhlbiwgd2UgY2FsbCB0aGUgZnVuY3Rpb24KICAqIHRvIHNlbmQgdGhlIHBhY2tldC4uLgogICovCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIHdhdmVsYW5fcGFja2V0X3htaXQoc3RydWN0IHNrX2J1ZmYgKglza2IsCiAJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqCQlkZXYpCiB7CkBAIC0zMTEzLDcgKzMxMTMsNyBAQAogCSAqIGFibGUgdG8gZGV0ZWN0IGNvbGxpc2lvbnMsIHRoZXJlZm9yZSBpbiB0aGVvcnkgd2UgZG9uJ3QgcmVhbGx5CiAJICogbmVlZCB0byBwYWQuIEplYW4gSUkgKi8KIAlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogICB3dl9wYWNrZXRfd3JpdGUoZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIApAQCAtMzEyMiw3ICszMTIyLDcgQEAKICNpZmRlZiBERUJVR19UWF9UUkFDRQogICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IDwtd2F2ZWxhbl9wYWNrZXRfeG1pdCgpXG4iLCBkZXYtPm5hbWUpOwogI2VuZGlmCi0gIHJldHVybigwKTsKKyAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKiogSEFSRFdBUkUgQ09ORklHVVJBVElPTiAqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaAppbmRleCA3MDZmZDMwMC4uODFkOTE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKQEAgLTcwNyw3ICs3MDcsNyBAQAogCXd2X3BhY2tldF93cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqLAkvKiBXcml0ZSBhIHBhY2tldCB0byB0aGUgVHggYnVmZmVyICovCiAJCQl2b2lkICosCiAJCQlzaG9ydCk7Ci1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIAl3YXZlbGFuX3BhY2tldF94bWl0KHN0cnVjdCBza19idWZmICosCS8qIFNlbmQgYSBwYWNrZXQgKi8KIAkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEhBUkRXQVJFIENPTkZJR1VSQVRJT04gLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L0tjb25maWcKaW5kZXggYTgyYzRjZC4uN2IxNGQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L0tjb25maWcKQEAgLTEsMTEgKzEsNTIgQEAKLWNvbmZpZyBXTDEyWFgKLQl0cmlzdGF0ZSAiVEkgd2wxMjUxL3dsMTI3MSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBTUElfTUFTVEVSICYmIEdFTkVSSUNfSEFSRElSUVMgJiYgRVhQRVJJTUVOVEFMCittZW51Y29uZmlnIFdMMTJYWAorCWJvb2xlYW4gIlRJIHdsMTJ4eCBkcml2ZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgVGhpcyB3aWxsIGVuYWJsZSBUSSB3bDEyeHggZHJpdmVyIHN1cHBvcnQuIFRoZSBkcml2ZXJzIG1ha2UKKwkgIHVzZSBvZiB0aGUgbWFjODAyMTEgc3RhY2suCisKK2NvbmZpZyBXTDEyNTEKKwl0cmlzdGF0ZSAiVEkgd2wxMjUxIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBXTDEyWFggJiYgR0VORVJJQ19IQVJESVJRUwogCXNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgQ1JDNwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24KLQkgIFRJIHdsMTI1MS93bDEyNzEgY2hpcHNldHMuCisJICBUSSB3bDEyNTEgY2hpcHNldC4KIAotCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHdsMTJ4eC4gU2F5IE4gaWYKKwkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCB3bDEyNTEuIFNheQorCSAgTiBpZiB1bnN1cmUuCisKK2NvbmZpZyBXTDEyNTFfU1BJCisJdHJpc3RhdGUgIlRJIHdsMTI1MSBTUEkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFdMMTI1MSAmJiBTUElfTUFTVEVSCisJLS0taGVscC0tLQorCSAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB0aGUgU1BJIGludGVyZmFjZSBvZiBhZGFwdGVycyB1c2luZworCSAgVEkgd2wxMjUxIGNoaXBzZXQuICBTZWxlY3QgdGhpcyBpZiB5b3VyIHBsYXRmb3JtIGlzIHVzaW5nCisJICB0aGUgU1BJIGJ1cy4KKworCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHdsMTI1MV9zcGkuCisJICBTYXkgTiBpZiB1bnN1cmUuCisKK2NvbmZpZyBXTDEyNTFfU0RJTworCXRyaXN0YXRlICJUSSB3bDEyNTEgU0RJTyBzdXBwb3J0IgorCWRlcGVuZHMgb24gV0wxMjUxICYmIE1NQworCS0tLWhlbHAtLS0KKwkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFNESU8gaW50ZXJmYWNlIG9mIGFkYXB0ZXJzIHVzaW5nCisJICBUSSB3bDEyNTEgY2hpcHNldC4gIFNlbGVjdCB0aGlzIGlmIHlvdXIgcGxhdGZvcm0gaXMgdXNpbmcKKwkgIHRoZSBTRElPIGJ1cy4KKworCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkCisJICB3bDEyNTFfc2Rpby4gU2F5IE4gaWYgdW5zdXJlLgorCitjb25maWcgV0wxMjcxCisJdHJpc3RhdGUgIlRJIHdsMTI3MSBzdXBwb3J0IgorCWRlcGVuZHMgb24gV0wxMlhYICYmIFNQSV9NQVNURVIgJiYgR0VORVJJQ19IQVJESVJRUworCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgQ1JDNworCS0tLWhlbHAtLS0KKwkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gdGhlCisJICBUSSB3bDEyNzEgY2hpcHNldC4KKworCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHdsMTI3MS4gU2F5IE4gaWYKIAkgIHVuc3VyZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9NYWtlZmlsZQppbmRleCBkNDNkZTI3Li42MmUzN2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L01ha2VmaWxlCkBAIC0xLDQgKzEsMTQgQEAKLXdsMTJ4eC1vYmpzCQk9IG1haW4ubyBzcGkubyBldmVudC5vIHR4Lm8gcngubyBcCi0JCQkgIHBzLm8gY21kLm8gYWN4Lm8gYm9vdC5vIGluaXQubyB3bDEyNTEubyBcCi0JCQkgIGRlYnVnZnMubwotb2JqLSQoQ09ORklHX1dMMTJYWCkJKz0gd2wxMnh4Lm8KK3dsMTI1MS1vYmpzCQk9IHdsMTI1MV9tYWluLm8gd2wxMjUxX2V2ZW50Lm8gXAorCQkJICB3bDEyNTFfdHgubyB3bDEyNTFfcngubyB3bDEyNTFfcHMubyB3bDEyNTFfY21kLm8gXAorCQkJICB3bDEyNTFfYWN4Lm8gd2wxMjUxX2Jvb3QubyB3bDEyNTFfaW5pdC5vIFwKKwkJCSAgd2wxMjUxX2RlYnVnZnMubyB3bDEyNTFfaW8ubworCitvYmotJChDT05GSUdfV0wxMjUxKQkrPSB3bDEyNTEubworb2JqLSQoQ09ORklHX1dMMTI1MV9TUEkpCSs9IHdsMTI1MV9zcGkubworb2JqLSQoQ09ORklHX1dMMTI1MV9TRElPKQkrPSB3bDEyNTFfc2Rpby5vCisKK3dsMTI3MS1vYmpzCQk9IHdsMTI3MV9tYWluLm8gIHdsMTI3MV9zcGkubyB3bDEyNzFfY21kLm8gIFwKKwkJCSAgd2wxMjcxX2V2ZW50Lm8gd2wxMjcxX3R4Lm8gIHdsMTI3MV9yeC5vICAgXAorCQkJICB3bDEyNzFfcHMubyAgICB3bDEyNzFfYWN4Lm8gd2wxMjcxX2Jvb3QubyBcCisJCQkgIHdsMTI3MV9pbml0Lm8gIHdsMTI3MV9kZWJ1Z2ZzLm8KK29iai0kKENPTkZJR19XTDEyNzEpCSs9IHdsMTI3MS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYWN4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYWN4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZmQ0NTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjg5ICswLDAgQEAKLSNpbmNsdWRlICJhY3guaCIKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzcuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0KLSNpbmNsdWRlICJ3bDEyeHguaCIKLSNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJzcGkuaCIKLSNpbmNsdWRlICJwcy5oIgotCi1pbnQgd2wxMnh4X2FjeF9mcmFtZV9yYXRlcyhzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTggY3RybF9yYXRlLCB1OCBjdHJsX21vZCwKLQkJCSAgIHU4IG1ndF9yYXRlLCB1OCBtZ3RfbW9kKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGFjeF9md19nZW5fZnJhbWVfcmF0ZXMgcmF0ZXM7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IGZyYW1lIHJhdGVzIik7Ci0KLQlyYXRlcy5oZWFkZXIuaWQgPSBBQ1hfRldfR0VOX0ZSQU1FX1JBVEVTOwotCXJhdGVzLmhlYWRlci5sZW4gPSBzaXplb2Yoc3RydWN0IGFjeF9md19nZW5fZnJhbWVfcmF0ZXMpIC0KLQkJc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQotCXJhdGVzLnR4X2N0cmxfZnJhbWVfcmF0ZSA9IGN0cmxfcmF0ZTsKLQlyYXRlcy50eF9jdHJsX2ZyYW1lX21vZCA9IGN0cmxfbW9kOwotCXJhdGVzLnR4X21ndF9mcmFtZV9yYXRlID0gbWd0X3JhdGU7Ci0JcmF0ZXMudHhfbWd0X2ZyYW1lX21vZCA9IG1ndF9tb2Q7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJnJhdGVzLCBzaXplb2YocmF0ZXMpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoIkZhaWxlZCB0byBzZXQgRlcgcmF0ZXMgYW5kIG1vZHVsYXRpb24iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgd2wxMnh4X2FjeF9zdGF0aW9uX2lkKHN0cnVjdCB3bDEyeHggKndsKQotewotCWludCByZXQsIGk7Ci0Jc3RydWN0IGRvdDExX3N0YXRpb25faWQgbWFjOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBkb3QxMV9zdGF0aW9uX2lkIik7Ci0KLQltYWMuaGVhZGVyLmlkID0gRE9UMTFfU1RBVElPTl9JRDsKLQltYWMuaGVhZGVyLmxlbiA9IHNpemVvZihtYWMpIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQotCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQotCQltYWMubWFjW2ldID0gd2wtPm1hY19hZGRyW0VUSF9BTEVOIC0gMSAtIGldOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZtYWMsIHNpemVvZihtYWMpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTgga2V5X2lkKQotewotCXN0cnVjdCBhY3hfZG90MTFfZGVmYXVsdF9rZXkgZGVmYXVsdF9rZXk7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZG90MTFfZGVmYXVsdF9rZXkgKCVkKSIsIGtleV9pZCk7Ci0KLQlkZWZhdWx0X2tleS5oZWFkZXIuaWQgPSBET1QxMV9ERUZBVUxUX0tFWTsKLQlkZWZhdWx0X2tleS5oZWFkZXIubGVuID0gc2l6ZW9mKGRlZmF1bHRfa2V5KSAtCi0JCXNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQlkZWZhdWx0X2tleS5pZCA9IGtleV9pZDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmZGVmYXVsdF9rZXksIHNpemVvZihkZWZhdWx0X2tleSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigiQ291bGRudCBzZXQgZGVmYXVsdCBrZXkiKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQl3bC0+ZGVmYXVsdF9rZXkgPSBrZXlfaWQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfd2FrZV91cF9jb25kaXRpb25zKHN0cnVjdCB3bDEyeHggKndsLCB1OCBsaXN0ZW5faW50ZXJ2YWwpCi17Ci0Jc3RydWN0IGFjeF93YWtlX3VwX2NvbmRpdGlvbiB3YWtlX3VwOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCB3YWtlIHVwIGNvbmRpdGlvbnMiKTsKLQotCXdha2VfdXAuaGVhZGVyLmlkID0gQUNYX1dBS0VfVVBfQ09ORElUSU9OUzsKLQl3YWtlX3VwLmhlYWRlci5sZW4gPSBzaXplb2Yod2FrZV91cCkgLSBzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCi0Jd2FrZV91cC53YWtlX3VwX2V2ZW50ID0gV0FLRV9VUF9FVkVOVF9EVElNX0JJVE1BUDsKLQl3YWtlX3VwLmxpc3Rlbl9pbnRlcnZhbCA9IGxpc3Rlbl9pbnRlcnZhbDsKLQotCXJldHVybiB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJndha2VfdXAsIHNpemVvZih3YWtlX3VwKSk7Ci19Ci0KLWludCB3bDEyeHhfYWN4X3NsZWVwX2F1dGgoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IHNsZWVwX2F1dGgpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgYWN4X3NsZWVwX2F1dGggYXV0aDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2xlZXAgYXV0aCIpOwotCi0JYXV0aC5oZWFkZXIuaWQgPSBBQ1hfU0xFRVBfQVVUSDsKLQlhdXRoLmhlYWRlci5sZW4gPSBzaXplb2YoYXV0aCkgLSBzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCi0JYXV0aC5zbGVlcF9hdXRoID0gc2xlZXBfYXV0aDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmYXV0aCwgc2l6ZW9mKGF1dGgpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9md192ZXJzaW9uKHN0cnVjdCB3bDEyeHggKndsLCBjaGFyICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IHdsMTJ4eF9jb21tYW5kIGNtZDsKLQlzdHJ1Y3QgYWN4X3JldmlzaW9uICpyZXY7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZncgcmV2Iik7Ci0KLQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9pbnRlcnJvZ2F0ZSh3bCwgQUNYX0ZXX1JFViwgc2l6ZW9mKCpyZXYpLCAmY21kKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiQUNYX0ZXX1JFViBpbnRlcnJvZ2F0ZSBmYWlsZWQiKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXYgPSAoc3RydWN0IGFjeF9yZXZpc2lvbiAqKSAmY21kLnBhcmFtZXRlcnM7Ci0KLQkvKiBiZSBjYXJlZnVsIHdpdGggdGhlIGJ1ZmZlciBzaXplcyAqLwotCXN0cm5jcHkoYnVmLCByZXYtPmZ3X3ZlcnNpb24sIG1pbihsZW4sIHNpemVvZihyZXYtPmZ3X3ZlcnNpb24pKSk7Ci0KLQkvKgotCSAqIGlmIHRoZSBmaXJtd2FyZSB2ZXJzaW9uIHN0cmluZyBpcyBleGFjdGx5Ci0JICogc2l6ZW9mKHJldi0+ZndfdmVyc2lvbikgbG9uZyBvciBmd19sZW4gaXMgbGVzcyB0aGFuCi0JICogc2l6ZW9mKHJldi0+ZndfdmVyc2lvbikgaXQgd29uJ3QgYmUgbnVsbCB0ZXJtaW5hdGVkCi0JICovCi0JYnVmW21pbihsZW4sIHNpemVvZihyZXYtPmZ3X3ZlcnNpb24pKSAtIDFdID0gJ1wwJzsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF90eF9wb3dlcihzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IHBvd2VyKQotewotCXN0cnVjdCBhY3hfY3VycmVudF90eF9wb3dlciBpZTsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBkb3QxMV9jdXJfdHhfcHdyIik7Ci0KLQlpZiAocG93ZXIgPCAwIHx8IHBvd2VyID4gMjUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtc2V0KCZpZSwgMCwgc2l6ZW9mKGllKSk7Ci0KLQlpZS5oZWFkZXIuaWQgPSBET1QxMV9DVVJfVFhfUFdSOwotCWllLmhlYWRlci5sZW4gPSBzaXplb2YoaWUpIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQlpZS5jdXJyZW50X3R4X3Bvd2VyID0gcG93ZXIgKiAxMDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmaWUsIHNpemVvZihpZSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJjb25maWd1cmUgb2YgdHggcG93ZXIgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYWN4X2ZlYXR1cmVfY2ZnKHN0cnVjdCB3bDEyeHggKndsKQotewotCXN0cnVjdCBhY3hfZmVhdHVyZV9jb25maWcgZmVhdHVyZTsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBmZWF0dXJlIGNmZyIpOwotCi0JbWVtc2V0KCZmZWF0dXJlLCAwLCBzaXplb2YoZmVhdHVyZSkpOwotCi0JZmVhdHVyZS5oZWFkZXIuaWQgPSBBQ1hfRkVBVFVSRV9DRkc7Ci0JZmVhdHVyZS5oZWFkZXIubGVuID0gc2l6ZW9mKGZlYXR1cmUpIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQotCS8qIERGX0VOQ1JZUFRJT05fRElTQUJMRSBhbmQgREZfU05JRkZfTU9ERV9FTkFCTEUgYXJlIGRpc2FibGVkICovCi0JZmVhdHVyZS5kYXRhX2Zsb3dfb3B0aW9ucyA9IDA7Ci0JZmVhdHVyZS5vcHRpb25zID0gMDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmZmVhdHVyZSwgc2l6ZW9mKGZlYXR1cmUpKTsKLQlpZiAocmV0IDwgMCkKLQkJd2wxMnh4X2Vycm9yKCJDb3VsZG50IHNldCBIVyBlbmNyeXB0aW9uIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgd2wxMnh4X2FjeF9tZW1fbWFwKHN0cnVjdCB3bDEyeHggKndsLCB2b2lkICptZW1fbWFwLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCB3bDEyeHhfY29tbWFuZCBjbWQ7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggbWVtIG1hcCIpOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9pbnRlcnJvZ2F0ZSh3bCwgQUNYX01FTV9NQVAsIGxlbiwgJmNtZCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JZWxzZSBpZiAoY21kLnN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpCi0JCXJldHVybiAtRUlPOwotCi0JbWVtY3B5KG1lbV9tYXAsICZjbWQucGFyYW1ldGVycywgbGVuKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9kYXRhX3BhdGhfcGFyYW1zKHN0cnVjdCB3bDEyeHggKndsLAotCQkJCXN0cnVjdCBhY3hfZGF0YV9wYXRoX3BhcmFtc19yZXNwICpkYXRhX3BhdGgpCi17Ci0Jc3RydWN0IGFjeF9kYXRhX3BhdGhfcGFyYW1zIHBhcmFtczsKLQlzdHJ1Y3Qgd2wxMnh4X2NvbW1hbmQgY21kOwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IGRhdGEgcGF0aCBwYXJhbXMiKTsKLQotCXBhcmFtcy5yeF9wYWNrZXRfcmluZ19jaHVua19zaXplID0gRFBfUlhfUEFDS0VUX1JJTkdfQ0hVTktfU0laRTsKLQlwYXJhbXMudHhfcGFja2V0X3JpbmdfY2h1bmtfc2l6ZSA9IERQX1RYX1BBQ0tFVF9SSU5HX0NIVU5LX1NJWkU7Ci0KLQlwYXJhbXMucnhfcGFja2V0X3JpbmdfY2h1bmtfbnVtID0gRFBfUlhfUEFDS0VUX1JJTkdfQ0hVTktfTlVNOwotCXBhcmFtcy50eF9wYWNrZXRfcmluZ19jaHVua19udW0gPSBEUF9UWF9QQUNLRVRfUklOR19DSFVOS19OVU07Ci0KLQlwYXJhbXMudHhfY29tcGxldGVfdGhyZXNob2xkID0gMTsKLQotCXBhcmFtcy50eF9jb21wbGV0ZV9yaW5nX2RlcHRoID0gRldfVFhfQ01QTFRfQkxPQ0tfU0laRTsKLQotCXBhcmFtcy50eF9jb21wbGV0ZV90aW1lb3V0ID0gRFBfVFhfQ09NUExFVEVfVElNRV9PVVQ7Ci0KLQlwYXJhbXMuaGVhZGVyLmlkID0gQUNYX0RBVEFfUEFUSF9QQVJBTVM7Ci0JcGFyYW1zLmhlYWRlci5sZW4gPSBzaXplb2YocGFyYW1zKSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0KLQlyZXQgPSB3bDEyeHhfY21kX2ludGVycm9nYXRlKHdsLCBBQ1hfREFUQV9QQVRIX1BBUkFNUywKLQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXNfcmVzcCksCi0JCQkJICAgICAmY21kKTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJmYWlsZWQgdG8gcmVhZCBkYXRhIHBhdGggcGFyYW1ldGVyczogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0gZWxzZSBpZiAoY21kLnN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJd2wxMnh4X3dhcm5pbmcoImRhdGEgcGF0aCBwYXJhbWV0ZXIgYWN4IHN0YXR1cyBmYWlsZWQiKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JbWVtY3B5KGRhdGFfcGF0aCwgJmNtZC5wYXJhbWV0ZXJzLCBzaXplb2YoKmRhdGFfcGF0aCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYWN4X3J4X21zZHVfbGlmZV90aW1lKHN0cnVjdCB3bDEyeHggKndsLCB1MzIgbGlmZV90aW1lKQotewotCXN0cnVjdCByeF9tc2R1X2xpZmV0aW1lIG1zZHVfbGlmZXRpbWU7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcnggbXNkdSBsaWZlIHRpbWUiKTsKLQotCW1zZHVfbGlmZXRpbWUuaGVhZGVyLmlkID0gRE9UMTFfUlhfTVNEVV9MSUZFX1RJTUU7Ci0JbXNkdV9saWZldGltZS5oZWFkZXIubGVuID0gc2l6ZW9mKG1zZHVfbGlmZXRpbWUpIC0KLQkJc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQltc2R1X2xpZmV0aW1lLmxpZmV0aW1lID0gbGlmZV90aW1lOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZtc2R1X2xpZmV0aW1lLCBzaXplb2YobXNkdV9saWZldGltZSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHJ4IG1zZHUgbGlmZSB0aW1lOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYWN4X3J4X2NvbmZpZyhzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTMyIGNvbmZpZywgdTMyIGZpbHRlcikKLXsKLQlzdHJ1Y3QgYWN4X3J4X2NvbmZpZyByeF9jb25maWc7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcnggY29uZmlnIik7Ci0KLQlyeF9jb25maWcuaGVhZGVyLmlkID0gQUNYX1JYX0NGRzsKLQlyeF9jb25maWcuaGVhZGVyLmxlbiA9IHNpemVvZihyeF9jb25maWcpIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQlyeF9jb25maWcuY29uZmlnX29wdGlvbnMgPSBjb25maWc7Ci0JcnhfY29uZmlnLmZpbHRlcl9vcHRpb25zID0gZmlsdGVyOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZyeF9jb25maWcsIHNpemVvZihyeF9jb25maWcpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiZmFpbGVkIHRvIHNldCByeCBjb25maWc6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfcGRfdGhyZXNob2xkKHN0cnVjdCB3bDEyeHggKndsKQotewotCXN0cnVjdCBhY3hfcGFja2V0X2RldGVjdGlvbiBwYWNrZXRfZGV0ZWN0aW9uOwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IGRhdGEgcGQgdGhyZXNob2xkIik7Ci0KLQkvKiBGSVhNRTogdGhyZXNob2xkIHZhbHVlIG5vdCBzZXQgKi8KLQlwYWNrZXRfZGV0ZWN0aW9uLmhlYWRlci5pZCA9IEFDWF9QRF9USFJFU0hPTEQ7Ci0JcGFja2V0X2RldGVjdGlvbi5oZWFkZXIubGVuID0gc2l6ZW9mKHBhY2tldF9kZXRlY3Rpb24pIC0KLQkJc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmcGFja2V0X2RldGVjdGlvbiwKLQkJCQkgICBzaXplb2YocGFja2V0X2RldGVjdGlvbikpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHBkIHRocmVzaG9sZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9zbG90KHN0cnVjdCB3bDEyeHggKndsLCBlbnVtIGFjeF9zbG90X3R5cGUgc2xvdF90aW1lKQotewotCXN0cnVjdCBhY3hfc2xvdCBzbG90OwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNsb3QiKTsKLQotCXNsb3QuaGVhZGVyLmlkID0gQUNYX1NMT1Q7Ci0Jc2xvdC5oZWFkZXIubGVuID0gc2l6ZW9mKHNsb3QpIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQotCXNsb3Qud29uZV9pbmRleCA9IFNUQVRJT05fV09ORV9JTkRFWDsKLQlzbG90LnNsb3RfdGltZSA9IHNsb3RfdGltZTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmc2xvdCwgc2l6ZW9mKHNsb3QpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiZmFpbGVkIHRvIHNldCBzbG90IHRpbWU6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfZ3JvdXBfYWRkcmVzc190Ymwoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0Jc3RydWN0IG11bHRpY2FzdF9ncnBfYWRkcl9zdGFydCBtdWx0aWNhc3Q7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZ3JvdXAgYWRkcmVzcyB0YmwiKTsKLQotCS8qIE1BQyBmaWx0ZXJpbmcgKi8KLQltdWx0aWNhc3QuaGVhZGVyLmlkID0gRE9UMTFfR1JPVVBfQUREUkVTU19UQkw7Ci0JbXVsdGljYXN0LmhlYWRlci5sZW4gPSBzaXplb2YobXVsdGljYXN0KSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQltdWx0aWNhc3QuZW5hYmxlZCA9IDA7Ci0JbXVsdGljYXN0Lm51bV9ncm91cHMgPSAwOwotCW1lbXNldChtdWx0aWNhc3QubWFjX3RhYmxlLCAwLCBBRERSRVNTX0dST1VQX01BWF9MRU4pOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZtdWx0aWNhc3QsIHNpemVvZihtdWx0aWNhc3QpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiZmFpbGVkIHRvIHNldCBncm91cCBhZGRyIHRhYmxlOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0Jc3RydWN0IGFjeF9yeF90aW1lb3V0IHJ4X3RpbWVvdXQ7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2VydmljZSBwZXJpb2QgdGltZW91dCIpOwotCi0JLyogUlggdGltZW91dCAqLwotCXJ4X3RpbWVvdXQuaGVhZGVyLmlkID0gQUNYX1NFUlZJQ0VfUEVSSU9EX1RJTUVPVVQ7Ci0JcnhfdGltZW91dC5oZWFkZXIubGVuID0gc2l6ZW9mKHJ4X3RpbWVvdXQpIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQotCXJ4X3RpbWVvdXQucHNfcG9sbF90aW1lb3V0ID0gUlhfVElNRU9VVF9QU19QT0xMX0RFRjsKLQlyeF90aW1lb3V0LnVwc2RfdGltZW91dCA9IFJYX1RJTUVPVVRfVVBTRF9ERUY7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJnJ4X3RpbWVvdXQsIHNpemVvZihyeF90aW1lb3V0KSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc2VydmljZSBwZXJpb2QgdGltZW91dDogJWQiLAotCQkJICAgICAgIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYWN4X3J0c190aHJlc2hvbGQoc3RydWN0IHdsMTJ4eCAqd2wsIHUxNiBydHNfdGhyZXNob2xkKQotewotCXN0cnVjdCBhY3hfcnRzX3RocmVzaG9sZCBydHM7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcnRzIHRocmVzaG9sZCIpOwotCi0JcnRzLmhlYWRlci5pZCA9IERPVDExX1JUU19USFJFU0hPTEQ7Ci0JcnRzLmhlYWRlci5sZW4gPSBzaXplb2YocnRzKSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQlydHMudGhyZXNob2xkID0gcnRzX3RocmVzaG9sZDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmcnRzLCBzaXplb2YocnRzKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnRzIHRocmVzaG9sZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9iZWFjb25fZmlsdGVyX29wdChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlzdHJ1Y3QgYWN4X2JlYWNvbl9maWx0ZXJfb3B0aW9uIGJlYWNvbl9maWx0ZXI7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYmVhY29uIGZpbHRlciBvcHQiKTsKLQotCWJlYWNvbl9maWx0ZXIuaGVhZGVyLmlkID0gQUNYX0JFQUNPTl9GSUxURVJfT1BUOwotCWJlYWNvbl9maWx0ZXIuaGVhZGVyLmxlbiA9IHNpemVvZihiZWFjb25fZmlsdGVyKSAtCi0JCXNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQliZWFjb25fZmlsdGVyLmVuYWJsZSA9IDA7Ci0JYmVhY29uX2ZpbHRlci5tYXhfbnVtX2JlYWNvbnMgPSAwOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZiZWFjb25fZmlsdGVyLCBzaXplb2YoYmVhY29uX2ZpbHRlcikpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGJlYWNvbiBmaWx0ZXIgb3B0OiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYWN4X2JlYWNvbl9maWx0ZXJfdGFibGUoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0Jc3RydWN0IGFjeF9iZWFjb25fZmlsdGVyX2llX3RhYmxlIGllX3RhYmxlOwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IGJlYWNvbiBmaWx0ZXIgdGFibGUiKTsKLQotCWllX3RhYmxlLmhlYWRlci5pZCA9IEFDWF9CRUFDT05fRklMVEVSX1RBQkxFOwotCWllX3RhYmxlLmhlYWRlci5sZW4gPSBzaXplb2YoaWVfdGFibGUpIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQotCWllX3RhYmxlLm51bV9pZSA9IDA7Ci0JbWVtc2V0KGllX3RhYmxlLnRhYmxlLCAwLCBCRUFDT05fRklMVEVSX1RBQkxFX01BWF9TSVpFKTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmaWVfdGFibGUsIHNpemVvZihpZV90YWJsZSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGJlYWNvbiBmaWx0ZXIgdGFibGU6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfc2dfZW5hYmxlKHN0cnVjdCB3bDEyeHggKndsKQotewotCXN0cnVjdCBhY3hfYnRfd2xhbl9jb2V4IHB0YTsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBzZyBlbmFibGUiKTsKLQotCXB0YS5oZWFkZXIuaWQgPSBBQ1hfU0dfRU5BQkxFOwotCXB0YS5oZWFkZXIubGVuID0gc2l6ZW9mKHB0YSkgLSBzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCi0JcHRhLmVuYWJsZSA9IFNHX0VOQUJMRTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmcHRhLCBzaXplb2YocHRhKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc29mdGdlbWluaSBlbmFibGU6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfc2dfY2ZnKHN0cnVjdCB3bDEyeHggKndsKQotewotCXN0cnVjdCBhY3hfYnRfd2xhbl9jb2V4X3BhcmFtIHBhcmFtOwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNnIGNmZyIpOwotCi0JLyogQlQtV0xBTiBjb2V4dCBwYXJhbWV0ZXJzICovCi0JcGFyYW0uaGVhZGVyLmlkID0gQUNYX1NHX0NGRzsKLQlwYXJhbS5oZWFkZXIubGVuID0gc2l6ZW9mKHBhcmFtKSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQlwYXJhbS5taW5fcmF0ZSA9IFJBVEVfSU5ERVhfMjRNQlBTOwotCXBhcmFtLmJ0X2hwX21heF90aW1lID0gUFRBX0JUX0hQX01BWFRJTUVfREVGOwotCXBhcmFtLndsYW5faHBfbWF4X3RpbWUgPSBQVEFfV0xBTl9IUF9NQVhfVElNRV9ERUY7Ci0JcGFyYW0uc2Vuc2VfZGlzYWJsZV90aW1lciA9IFBUQV9TRU5TRV9ESVNBQkxFX1RJTUVSX0RFRjsKLQlwYXJhbS5yeF90aW1lX2J0X2hwID0gUFRBX1BST1RFQ1RJVkVfUlhfVElNRV9ERUY7Ci0JcGFyYW0udHhfdGltZV9idF9ocCA9IFBUQV9QUk9URUNUSVZFX1RYX1RJTUVfREVGOwotCXBhcmFtLnJ4X3RpbWVfYnRfaHBfZmFzdCA9IFBUQV9QUk9URUNUSVZFX1JYX1RJTUVfRkFTVF9ERUY7Ci0JcGFyYW0udHhfdGltZV9idF9ocF9mYXN0ID0gUFRBX1BST1RFQ1RJVkVfVFhfVElNRV9GQVNUX0RFRjsKLQlwYXJhbS53bGFuX2N5Y2xlX2Zhc3QgPSBQVEFfQ1lDTEVfVElNRV9GQVNUX0RFRjsKLQlwYXJhbS5idF9hbnRpX3N0YXJ2YXRpb25fcGVyaW9kID0gUFRBX0FOVElfU1RBUlZFX1BFUklPRF9ERUY7Ci0JcGFyYW0ubmV4dF9idF9scF9wYWNrZXQgPSBQVEFfVElNRU9VVF9ORVhUX0JUX0xQX1BBQ0tFVF9ERUY7Ci0JcGFyYW0ud2FrZV91cF9iZWFjb24gPSBQVEFfVElNRV9CRUZPUkVfQkVBQ09OX0RFRjsKLQlwYXJhbS5ocF9kbV9tYXhfZ3VhcmRfdGltZSA9IFBUQV9IUERNX01BWF9USU1FX0RFRjsKLQlwYXJhbS5uZXh0X3dsYW5fcGFja2V0ID0gUFRBX1RJTUVfT1VUX05FWFRfV0xBTl9ERUY7Ci0JcGFyYW0uYW50ZW5uYV90eXBlID0gUFRBX0FOVEVOTkFfVFlQRV9ERUY7Ci0JcGFyYW0uc2lnbmFsX3R5cGUgPSBQVEFfU0lHTkFMSU5HX1RZUEVfREVGOwotCXBhcmFtLmFmaF9sZXZlcmFnZV9vbiA9IFBUQV9BRkhfTEVWRVJBR0VfT05fREVGOwotCXBhcmFtLnF1aWV0X2N5Y2xlX251bSA9IFBUQV9OVU1CRVJfUVVJRVRfQ1lDTEVfREVGOwotCXBhcmFtLm1heF9jdHMgPSBQVEFfTUFYX05VTV9DVFNfREVGOwotCXBhcmFtLndsYW5fcGFja2V0c19udW0gPSBQVEFfTlVNQkVSX09GX1dMQU5fUEFDS0VUU19ERUY7Ci0JcGFyYW0uYnRfcGFja2V0c19udW0gPSBQVEFfTlVNQkVSX09GX0JUX1BBQ0tFVFNfREVGOwotCXBhcmFtLm1pc3NlZF9yeF9hdmFsYW5jaGUgPSBQVEFfUlhfRk9SX0FWQUxBTkNIRV9ERUY7Ci0JcGFyYW0ud2xhbl9lbHBfaHAgPSBQVEFfRUxQX0hQX0RFRjsKLQlwYXJhbS5idF9hbnRpX3N0YXJ2YXRpb25fY3ljbGVzID0gUFRBX0FOVElfU1RBUlZFX05VTV9DWUNMRV9ERUY7Ci0JcGFyYW0uYWNrX21vZGVfZHVhbF9hbnQgPSBQVEFfQUNLX01PREVfREVGOwotCXBhcmFtLnBhX3NkX2VuYWJsZSA9IFBUQV9BTExPV19QQV9TRF9ERUY7Ci0JcGFyYW0ucHRhX2F1dG9fbW9kZV9lbmFibGUgPSBQVEFfQVVUT19NT0RFX05PX0NUU19ERUY7Ci0JcGFyYW0uYnRfaHBfcmVzcGVjdGVkX251bSA9IFBUQV9CVF9IUF9SRVNQRUNURURfREVGOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc2cgY29uZmlnOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYWN4X2NjYV90aHJlc2hvbGQoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0Jc3RydWN0IGFjeF9lbmVyZ3lfZGV0ZWN0aW9uIGRldGVjdGlvbjsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBjY2EgdGhyZXNob2xkIik7Ci0KLQlkZXRlY3Rpb24uaGVhZGVyLmlkID0gQUNYX0NDQV9USFJFU0hPTEQ7Ci0JZGV0ZWN0aW9uLmhlYWRlci5sZW4gPSBzaXplb2YoZGV0ZWN0aW9uKSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQlkZXRlY3Rpb24ucnhfY2NhX3RocmVzaG9sZCA9IENDQV9USFJTSF9ESVNBQkxFX0VORVJHWV9EOwotCWRldGVjdGlvbi50eF9lbmVyZ3lfZGV0ZWN0aW9uID0gMDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmZGV0ZWN0aW9uLCBzaXplb2YoZGV0ZWN0aW9uKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoImZhaWxlZCB0byBzZXQgY2NhIHRocmVzaG9sZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9iY25fZHRpbV9vcHRpb25zKHN0cnVjdCB3bDEyeHggKndsKQotewotCXN0cnVjdCBhY3hfYmVhY29uX2Jyb2FkY2FzdCBiYjsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBiY24gZHRpbSBvcHRpb25zIik7Ci0KLQliYi5oZWFkZXIuaWQgPSBBQ1hfQkNOX0RUSU1fT1BUSU9OUzsKLQliYi5oZWFkZXIubGVuID0gc2l6ZW9mKGJiKSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQliYi5iZWFjb25fcnhfdGltZW91dCA9IEJDTl9SWF9USU1FT1VUX0RFRl9WQUxVRTsKLQliYi5icm9hZGNhc3RfdGltZW91dCA9IEJST0FEQ0FTVF9SWF9USU1FT1VUX0RFRl9WQUxVRTsKLQliYi5yeF9icm9hZGNhc3RfaW5fcHMgPSBSWF9CUk9BRENBU1RfSU5fUFNfREVGX1ZBTFVFOwotCWJiLnBzX3BvbGxfdGhyZXNob2xkID0gQ09OU0VDVVRJVkVfUFNfUE9MTF9GQUlMVVJFX0RFRjsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmYmIsIHNpemVvZihiYikpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHJ4IGNvbmZpZzogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9haWQoc3RydWN0IHdsMTJ4eCAqd2wsIHUxNiBhaWQpCi17Ci0Jc3RydWN0IGFjeF9haWQgYWN4X2FpZDsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBhaWQiKTsKLQotCWFjeF9haWQuaGVhZGVyLmlkID0gQUNYX0FJRDsKLQlhY3hfYWlkLmhlYWRlci5sZW4gPSBzaXplb2YoYWN4X2FpZCkgLSBzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCi0JYWN4X2FpZC5haWQgPSBhaWQ7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJmFjeF9haWQsIHNpemVvZihhY3hfYWlkKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoImZhaWxlZCB0byBzZXQgYWlkOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYWN4X2V2ZW50X21ib3hfbWFzayhzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTMyIGV2ZW50X21hc2spCi17Ci0Jc3RydWN0IGFjeF9ldmVudF9tYXNrIG1hc2s7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZXZlbnQgbWJveCBtYXNrIik7Ci0KLQltYXNrLmhlYWRlci5pZCA9IEFDWF9FVkVOVF9NQk9YX01BU0s7Ci0JbWFzay5oZWFkZXIubGVuID0gc2l6ZW9mKG1hc2spIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQotCS8qIGhpZ2ggZXZlbnQgbWFzayBpcyB1bnVzZWQgKi8KLQltYXNrLmhpZ2hfZXZlbnRfbWFzayA9IDB4ZmZmZmZmZmY7Ci0KLQltYXNrLmV2ZW50X21hc2sgPSBldmVudF9tYXNrOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZtYXNrLCBzaXplb2YobWFzaykpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGFpZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9zZXRfcHJlYW1ibGUoc3RydWN0IHdsMTJ4eCAqd2wsIGVudW0gYWN4X3ByZWFtYmxlX3R5cGUgcHJlYW1ibGUpCi17Ci0Jc3RydWN0IGFjeF9wcmVhbWJsZSBpZTsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeF9zZXRfcHJlYW1ibGUiKTsKLQotCW1lbXNldCgmaWUsIDAsIHNpemVvZihpZSkpOwotCi0JaWUuaGVhZGVyLmlkID0gQUNYX1BSRUFNQkxFX1RZUEU7Ci0JaWUuaGVhZGVyLmxlbiA9IHNpemVvZihpZSkgLSBzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCWllLnByZWFtYmxlID0gcHJlYW1ibGU7Ci0JcmV0ID0gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZpZSwgc2l6ZW9mKGllKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoIlNldHRpbmcgb2YgcHJlYW1ibGUgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9jdHNfcHJvdGVjdChzdHJ1Y3Qgd2wxMnh4ICp3bCwKLQkJCSAgIGVudW0gYWN4X2N0c3Byb3RlY3RfdHlwZSBjdHNwcm90ZWN0KQotewotCXN0cnVjdCBhY3hfY3RzcHJvdGVjdCBpZTsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeF9zZXRfY3RzcHJvdGVjdCIpOwotCi0JbWVtc2V0KCZpZSwgMCwgc2l6ZW9mKGllKSk7Ci0KLQlpZS5oZWFkZXIuaWQgPSBBQ1hfQ1RTX1BST1RFQ1RJT047Ci0JaWUuaGVhZGVyLmxlbiA9IHNpemVvZihpZSkgLSBzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCWllLmN0c3Byb3RlY3QgPSBjdHNwcm90ZWN0OwotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmaWUsIHNpemVvZihpZSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJTZXR0aW5nIG9mIGN0c3Byb3RlY3QgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9zdGF0aXN0aWNzKHN0cnVjdCB3bDEyeHggKndsLCBzdHJ1Y3QgYWN4X3N0YXRpc3RpY3MgKnN0YXRzKQotewotCXN0cnVjdCB3bDEyeHhfY29tbWFuZCAqYW5zd2VyOwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IHN0YXRpc3RpY3MiKTsKLQotCWFuc3dlciA9IGttYWxsb2Moc2l6ZW9mKCphbnN3ZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFuc3dlcikgewotCQl3bDEyeHhfd2FybmluZygiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgYWN4IHN0YXRpc3RpY3MiKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gd2wxMnh4X2NtZF9pbnRlcnJvZ2F0ZSh3bCwgQUNYX1NUQVRJU1RJQ1MsIHNpemVvZigqYW5zd2VyKSwKLQkJCQkgICAgIGFuc3dlcik7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoImFjeCBzdGF0aXN0aWNzIGZhaWxlZDogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltZW1jcHkoc3RhdHMsIGFuc3dlci0+cGFyYW1ldGVycywgc2l6ZW9mKCpzdGF0cykpOwotCi1vdXQ6Ci0Ja2ZyZWUoYW5zd2VyKTsKLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjJkMjM0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNDUgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAotICoKLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fV0wxMlhYX0FDWF9IX18KLSNkZWZpbmUgX19XTDEyWFhfQUNYX0hfXwotCi0jaW5jbHVkZSAid2wxMnh4LmgiCi0KLS8qIFRhcmdldCdzIGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KLXN0cnVjdCBhY3hfaGVhZGVyIHsKLQl1MTYgaWQ7Ci0JdTE2IGxlbjsKLX07Ci0KLXN0cnVjdCBhY3hfZXJyb3JfY291bnRlciB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JLyogVGhlIG51bWJlciBvZiBQTENQIGVycm9ycyBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMgKi8KLQkvKiBpbmZvcm1hdGlvbiBlbGVtZW50IHdhcyBpbnRlcnJvZ2F0ZWQuIFRoaXMgZmllbGQgaXMgKi8KLQkvKiBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiBpdCBpcyBpbnRlcnJvZ2F0ZWQuKi8KLQl1MzIgUExDUF9lcnJvcjsKLQotCS8qIFRoZSBudW1iZXIgb2YgRkNTIGVycm9ycyBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMgKi8KLQkvKiBpbmZvcm1hdGlvbiBlbGVtZW50IHdhcyBpbnRlcnJvZ2F0ZWQuIFRoaXMgZmllbGQgaXMgKi8KLQkvKiBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiBpdCBpcyBpbnRlcnJvZ2F0ZWQuKi8KLQl1MzIgRkNTX2Vycm9yOwotCi0JLyogVGhlIG51bWJlciBvZiBNUERVcyB3aXRob3V0IFBMQ1AgaGVhZGVyIGVycm9ycyByZWNlaXZlZCovCi0JLyogc2luY2UgdGhlIGxhc3QgdGltZSB0aGlzIGluZm9ybWF0aW9uIGVsZW1lbnQgd2FzIGludGVycm9nYXRlZC4gKi8KLQkvKiBUaGlzIGZpZWxkIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIGl0IGlzIGludGVycm9nYXRlZC4qLwotCXUzMiB2YWxpZF9mcmFtZTsKLQotCS8qIHRoZSBudW1iZXIgb2YgbWlzc2VkIHNlcXVlbmNlIG51bWJlcnMgaW4gdGhlIHNxdWVudGlhbGx5ICovCi0JLyogdmFsdWVzIG9mIGZyYW1lcyBzZXEgbnVtYmVycyAqLwotCXUzMiBzZXFfbnVtX21pc3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGFjeF9yZXZpc2lvbiB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JLyoKLQkgKiBUaGUgV2lMaW5rIGZpcm13YXJlIHZlcnNpb24sIGFuIEFTQ0lJIHN0cmluZyB4LngueC54LAotCSAqIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgY3VycmVudCBmaXJtd2FyZS4KLQkgKiBUaGUgbGVmdCBtb3N0IGRpZ2l0IGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBhCi0JICogc2lnbmlmaWNhbnQgY2hhbmdlIGlzIG1hZGUgdG8gdGhlIGZpcm13YXJlLCBzdWNoIGFzCi0JICogY29kZSByZWRlc2lnbiBvciBuZXcgcGxhdGZvcm0gc3VwcG9ydC4KLQkgKiBUaGUgc2Vjb25kIGRpZ2l0IGlzIGluY3JlbWVudGVkIHdoZW4gbWFqb3IgZW5oYW5jZW1lbnRzCi0JICogYXJlIGFkZGVkIG9yIG1ham9yIGZpeGVzIGFyZSBtYWRlLgotCSAqIFRoZSB0aGlyZCBkaWdpdCBpcyBpbmNyZW1lbnRlZCBmb3IgZWFjaCBHQSByZWxlYXNlLgotCSAqIFRoZSBmb3VydGggZGlnaXQgaXMgaW5jcmVtZW50ZWQgZm9yIGVhY2ggYnVpbGQuCi0JICogVGhlIGZpcnN0IHR3byBkaWdpdHMgaWRlbnRpZnkgYSBmaXJtd2FyZSByZWxlYXNlIHZlcnNpb24sCi0JICogaW4gb3RoZXIgd29yZHMsIGEgdW5pcXVlIHNldCBvZiBmZWF0dXJlcy4KLQkgKiBUaGUgZmlyc3QgdGhyZWUgZGlnaXRzIGlkZW50aWZ5IGEgR0EgcmVsZWFzZS4KLQkgKi8KLQljaGFyIGZ3X3ZlcnNpb25bMjBdOwotCi0JLyoKLQkgKiBUaGlzIDQgYnl0ZSBmaWVsZCBzcGVjaWZpZXMgdGhlIFdpTGluayBoYXJkd2FyZSB2ZXJzaW9uLgotCSAqIGJpdHMgMCAgLSAxNTogUmVzZXJ2ZWQuCi0JICogYml0cyAxNiAtIDIzOiBWZXJzaW9uIElEIC0gVGhlIFdpTGluayB2ZXJzaW9uIElECi0JICogICAgICAgICAgICAgICgxID0gZmlyc3Qgc3BpbiwgMiA9IHNlY29uZCBzcGluLCBhbmQgc28gb24pLgotCSAqIGJpdHMgMjQgLSAzMTogQ2hpcCBJRCAtIFRoZSBXaUxpbmsgY2hpcCBJRC4KLQkgKi8KLQl1MzIgaHdfdmVyc2lvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIHdsMTJ4eF9wc21fbW9kZSB7Ci0JLyogQWN0aXZlIG1vZGUgKi8KLQlXTDEyWFhfUFNNX0NBTSA9IDAsCi0KLQkvKiBQb3dlciBzYXZlIG1vZGUgKi8KLQlXTDEyWFhfUFNNX1BTID0gMSwKLQotCS8qIEV4dHJlbWUgbG93IHBvd2VyICovCi0JV0wxMlhYX1BTTV9FTFAgPSAyLAotfTsKLQotc3RydWN0IGFjeF9zbGVlcF9hdXRoIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQkvKiBUaGUgc2xlZXAgbGV2ZWwgYXV0aG9yaXphdGlvbiBvZiB0aGUgZGV2aWNlLiAqLwotCS8qIDAgLSBBbHdheXMgYWN0aXZlKi8KLQkvKiAxIC0gUG93ZXIgZG93biBtb2RlOiBsaWdodCAvIGZhc3Qgc2xlZXAqLwotCS8qIDIgLSBFTFAgbW9kZTogRGVlcCAvIE1heCBzbGVlcCovCi0JdTggIHNsZWVwX2F1dGg7Ci0JdTggIHBhZGRpbmdbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBUSU1fRUxFX0lEICAgIDUKLSNkZWZpbmUgUEFSVElBTF9WQk1fTUFYICAgIDI1MQotCi1zdHJ1Y3QgdGltIHsKLQl1OCBpZGVudGl0eTsKLQl1OCBsZW5ndGg7Ci0JdTggZHRpbV9jb3VudDsKLQl1OCBkdGltX3BlcmlvZDsKLQl1OCBiaXRtYXBfY3RybDsKLQl1OCBwdmJfZmllbGRbUEFSVElBTF9WQk1fTUFYXTsgLyogUGFydGlhbCBWaXJ0dWFsIEJpdG1hcCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFZpcnR1YWwgQml0IE1hcCB1cGRhdGUgKi8KLXN0cnVjdCB2Ym1fdXBkYXRlX3JlcXVlc3QgewotCV9fbGUxNiBsZW47Ci0JdTggIHBhZGRpbmdbMl07Ci0Jc3RydWN0IHRpbSB0aW07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotZW51bSB7Ci0JSE9TVElGX1BDSV9NQVNURVJfSE9TVF9JTkRJUkVDVCwKLQlIT1NUSUZfUENJX01BU1RFUl9IT1NUX0RJUkVDVCwKLQlIT1NUSUZfU0xBVkUsCi0JSE9TVElGX1BLVF9SSU5HLAotCUhPU1RJRl9ET05UQ0FSRSA9IDB4RkYKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9VQ0FTVF9QUklPUklUWSAgICAgICAgICAwCi0jZGVmaW5lIERFRkFVTFRfUlhfUV9QUklPUklUWSAgICAgICAgICAgMAotI2RlZmluZSBERUZBVUxUX05VTV9TVEFUSU9OUyAgICAgICAgICAgIDEKLSNkZWZpbmUgREVGQVVMVF9SWFFfUFJJT1JJVFkgICAgICAgICAgICAwIC8qIGxvdyAwIC4uIDE1IGhpZ2ggICovCi0jZGVmaW5lIERFRkFVTFRfUlhRX1RZUEUgICAgICAgICAgICAgICAgMHgwNyAgICAvKiBBbGwgZnJhbWVzLCBEYXRhL0N0cmwvTWdtdCAqLwotI2RlZmluZSBUUkFDRV9CVUZGRVJfTUFYX1NJWkUgICAgICAgICAgIDI1NgotCi0jZGVmaW5lICBEUF9SWF9QQUNLRVRfUklOR19DSFVOS19TSVpFIDE2MDAKLSNkZWZpbmUgIERQX1RYX1BBQ0tFVF9SSU5HX0NIVU5LX1NJWkUgMTYwMAotI2RlZmluZSAgRFBfUlhfUEFDS0VUX1JJTkdfQ0hVTktfTlVNIDIKLSNkZWZpbmUgIERQX1RYX1BBQ0tFVF9SSU5HX0NIVU5LX05VTSAyCi0jZGVmaW5lICBEUF9UWF9DT01QTEVURV9USU1FX09VVCAyMAotI2RlZmluZSAgRldfVFhfQ01QTFRfQkxPQ0tfU0laRSAxNgotCi1zdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXMgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXUxNiByeF9wYWNrZXRfcmluZ19jaHVua19zaXplOwotCXUxNiB0eF9wYWNrZXRfcmluZ19jaHVua19zaXplOwotCi0JdTggcnhfcGFja2V0X3JpbmdfY2h1bmtfbnVtOwotCXU4IHR4X3BhY2tldF9yaW5nX2NodW5rX251bTsKLQotCS8qCi0JICogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IGNhbiBiZSBnYXRoZXJlZAotCSAqIGluIHRoZSBUWCBjb21wbGV0ZSByaW5nIGJlZm9yZSBhbiBpbnRlcnJ1cHQKLQkgKiBpcyBnZW5lcmF0ZWQuCi0JICovCi0JdTggdHhfY29tcGxldGVfdGhyZXNob2xkOwotCi0JLyogTnVtYmVyIG9mIHBlbmRpbmcgVFggY29tcGxldGUgZW50cmllcyBpbiBjeWNsaWMgcmluZy4qLwotCXU4IHR4X2NvbXBsZXRlX3JpbmdfZGVwdGg7Ci0KLQkvKgotCSAqIE1heCBudW0gbWljcm9zZWNvbmRzIHNpbmNlIGEgcGFja2V0IGVudGVycyB0aGUgVFgKLQkgKiBjb21wbGV0ZSByaW5nIHVudGlsIGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuCi0JICovCi0JdTMyIHR4X2NvbXBsZXRlX3RpbWVvdXQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi1zdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXNfcmVzcCB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTE2IHJ4X3BhY2tldF9yaW5nX2NodW5rX3NpemU7Ci0JdTE2IHR4X3BhY2tldF9yaW5nX2NodW5rX3NpemU7Ci0KLQl1OCByeF9wYWNrZXRfcmluZ19jaHVua19udW07Ci0JdTggdHhfcGFja2V0X3JpbmdfY2h1bmtfbnVtOwotCi0JdTggcGFkWzJdOwotCi0JdTMyIHJ4X3BhY2tldF9yaW5nX2FkZHI7Ci0JdTMyIHR4X3BhY2tldF9yaW5nX2FkZHI7Ci0KLQl1MzIgcnhfY29udHJvbF9hZGRyOwotCXUzMiB0eF9jb250cm9sX2FkZHI7Ci0KLQl1MzIgdHhfY29tcGxldGVfYWRkcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIFRYX01TRFVfTElGRVRJTUVfTUlOICAgICAgIDAKLSNkZWZpbmUgVFhfTVNEVV9MSUZFVElNRV9NQVggICAgICAgMzAwMAotI2RlZmluZSBUWF9NU0RVX0xJRkVUSU1FX0RFRiAgICAgICA1MTIKLSNkZWZpbmUgUlhfTVNEVV9MSUZFVElNRV9NSU4gICAgICAgMAotI2RlZmluZSBSWF9NU0RVX0xJRkVUSU1FX01BWCAgICAgICAweEZGRkZGRkZGCi0jZGVmaW5lIFJYX01TRFVfTElGRVRJTUVfREVGICAgICAgIDUxMjAwMAotCi1zdHJ1Y3QgcnhfbXNkdV9saWZldGltZSB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JLyoKLQkgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSwgaW4gVFUsIGJlZm9yZSB0aGUKLQkgKiBmaXJtd2FyZSBkaXNjYXJkcyB0aGUgTVNEVS4KLQkgKi8KLQl1MzIgbGlmZXRpbWU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJYIENvbmZpZyBPcHRpb25zIFRhYmxlCi0gKiBCaXQJCURlZmluaXRpb24KLSAqID09PQkJPT09PT09PT09PQotICogMzE6MTQJCVJlc2VydmVkCi0gKiAxMwkJQ29weSBSWCBTdGF0dXMgLSB3aGVuIHNldCwgd3JpdGUgdGhyZWUgcmVjZWl2ZSBzdGF0dXMgd29yZHMKLSAqIAkgCXRvIHRvcCBvZiByeCdkIE1QRFVzLgotICogCQlXaGVuIGNsZWFyZWQsIGRvIG5vdCB3cml0ZSB0aHJlZSBzdGF0dXMgd29yZHMgKGFkZGVkIHJldiAxLjUpCi0gKiAxMgkJUmVzZXJ2ZWQKLSAqIDExCQlSWCBDb21wbGV0ZSB1cG9uIEZDUyBlcnJvciAtIHdoZW4gc2V0LCBnaXZlIHJ4IGNvbXBsZXRlCi0gKgkgCWludGVycnVwdCBmb3IgRkNTIGVycm9ycywgYWZ0ZXIgdGhlIHJ4IGZpbHRlcmluZywgZS5nLiB1bmljYXN0Ci0gKgkgCWZyYW1lcyBub3QgdG8gdXMgd2l0aCBGQ1MgZXJyb3Igd2lsbCBub3QgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LgotICogMTAJCVNTSUQgRmlsdGVyIEVuYWJsZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIGRpc2NhcmRzIGFsbCBiZWFjb24sCi0gKgkgICAgICAgIHByb2JlIHJlcXVlc3QsIGFuZCBwcm9iZSByZXNwb25zZSBmcmFtZXMgd2l0aCBhbiBTU0lEIHRoYXQgZG9lcwotICoJCW5vdCBtYXRjaCB0aGUgU1NJRCBzcGVjaWZpZWQgYnkgdGhlIGhvc3QgaW4gdGhlIFNUQVJUL0pPSU4KLSAqCQljb21tYW5kLgotICoJCVdoZW4gY2xlYXIsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgZnJhbWVzIHdpdGggYW55IFNTSUQuCi0gKiA5CQlCcm9hZGNhc3QgRmlsdGVyIEVuYWJsZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIGRpc2NhcmRzIGFsbAotICogCSAJYnJvYWRjYXN0IGZyYW1lcy4gV2hlbiBjbGVhciwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgcmVjZWl2ZWQKLSAqCQlicm9hZGNhc3QgZnJhbWVzLgotICogODo2CQlSZXNlcnZlZAotICogNQkJQlNTSUQgRmlsdGVyIEVuYWJsZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIGRpc2NhcmRzIGFueSBmcmFtZXMKLSAqIAkgCXdpdGggYSBCU1NJRCB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZSBCU1NJRCBzcGVjaWZpZWQgYnkgdGhlCi0gKgkJaG9zdC4KLSAqCQlXaGVuIGNsZWFyLCB0aGUgV2lMaW5rIHJlY2VpdmVzIGZyYW1lcyBmcm9tIGFueSBCU1NJRC4KLSAqIDQJCU1BQyBBZGRyIEZpbHRlciAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIGRpc2NhcmRzIGFueSBmcmFtZXMKLSAqIAkgCXdpdGggYSBkZXN0aW5hdGlvbiBhZGRyZXNzIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIE1BQyBhZGRyZXNzCi0gKgkJb2YgdGhlIGFkYXB0b3IuCi0gKgkJV2hlbiBjbGVhciwgdGhlIFdpTGluayByZWNlaXZlcyBmcmFtZXMgZGVzdGluZWQgdG8gYW55IE1BQwotICoJCWFkZHJlc3MuCi0gKiAzCQlQcm9taXNjdW91cyAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCB2YWxpZCBmcmFtZXMKLSAqIAkgCShpLmUuLCBhbGwgZnJhbWVzIHRoYXQgcGFzcyB0aGUgRkNTIGNoZWNrKS4KLSAqCQlXaGVuIGNsZWFyLCBvbmx5IGZyYW1lcyB0aGF0IHBhc3MgdGhlIG90aGVyIGZpbHRlcnMgc3BlY2lmaWVkCi0gKgkJYXJlIHJlY2VpdmVkLgotICogMgkJRkNTIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgaW5jbHVkZXMgdGhlIEZDUyB3aXRoIHRoZSByZWNlaXZlZAotICoJIAlmcmFtZS4KLSAqCQlXaGVuIGNsZWFyZWQsIHRoZSBGQ1MgaXMgZGlzY2FyZGVkLgotICogMQkJUExDUCBoZWFkZXIgLSBXaGVuIHNldCwgd3JpdGUgYWxsIGRhdGEgZnJvbSBiYXNlYmFuZCB0byBmcmFtZQotICogCSAJYnVmZmVyIGluY2x1ZGluZyBQSFkgaGVhZGVyLgotICogMAkJUmVzZXJ2ZWQgLSBBbHdheXMgZXF1YWwgdG8gMC4KLSAqCi0gKiBSWCBGaWx0ZXIgT3B0aW9ucyBUYWJsZQotICogQml0CQlEZWZpbml0aW9uCi0gKiA9PT0JCT09PT09PT09PT0KLSAqIDMxOjEyCQlSZXNlcnZlZCAtIEFsd2F5cyBlcXVhbCB0byAwLgotICogMTEJCUFzc29jaWF0aW9uIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIGFzc29jaWF0aW9uCi0gKiAJIAlyZWxhdGVkIGZyYW1lcyAoYXNzb2NpYXRpb24gcmVxdWVzdC9yZXNwb25zZSwgcmVhc3NvY2F0aW9uCi0gKgkJcmVxdWVzdC9yZXNwb25zZSwgYW5kIGRpc2Fzc29jaWF0aW9uKS4gV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzCi0gKgkJYXJlIGRpc2NhcmRlZC4KLSAqIDEwCQlBdXRoL0RlIGF1dGggLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgYXV0aGVudGljYXRpb24KLSAqIAkgCWFuZCBkZS1hdXRoZW50aWNhdGlvbiBmcmFtZXMuIFdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUKLSAqCQlkaXNjYXJkZWQuCi0gKiA5CQlCZWFjb24gLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgYmVhY29uIGZyYW1lcy4KLSAqIAkgCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgotICogOAkJQ29udGVudGlvbiBGcmVlIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIGNvbnRlbnRpb24KLSAqIAkgCWZyZWUgZnJhbWVzLgotICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgotICogNwkJQ29udHJvbCAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBjb250cm9sIGZyYW1lcy4KLSAqIAkgCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgotICogNgkJRGF0YSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBkYXRhIGZyYW1lcy4KLSAqIAkgCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgotICogNQkJRkNTIEVycm9yIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgZnJhbWVzIHRoYXQgaGF2ZSBGQ1MKLSAqCSAJZXJyb3JzLgotICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgotICogNAkJTWFuYWdlbWVudCAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBtYW5hZ2VtZW50Ci0gKgkJZnJhbWVzLgotICogCSAJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCi0gKiAzCQlQcm9iZSBSZXF1ZXN0IC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIHByb2JlIHJlcXVlc3QKLSAqIAkgCWZyYW1lcy4KLSAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KLSAqIDIJCVByb2JlIFJlc3BvbnNlIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIHByb2JlCi0gKiAJCXJlc3BvbnNlIGZyYW1lcy4KLSAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KLSAqIDEJCVJUUy9DVFMvQUNLIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIFJUUywgQ1RTIGFuZCBBQ0sKLSAqIAkgCWZyYW1lcy4KLSAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KLSAqIDAJCVJzdmQgVHlwZS9TdWIgVHlwZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBmcmFtZXMKLSAqIAkgCXRoYXQgaGF2ZSByZXNlcnZlZCBmcmFtZSB0eXBlcyBhbmQgc3ViIHR5cGVzIGFzIGRlZmluZWQgYnkgdGhlCi0gKgkJODAyLjExIHNwZWNpZmljYXRpb24uCi0gKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCi0gKi8KLXN0cnVjdCBhY3hfcnhfY29uZmlnIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQl1MzIgY29uZmlnX29wdGlvbnM7Ci0JdTMyIGZpbHRlcl9vcHRpb25zOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWVudW0gewotCVFPU19BQ19CRSA9IDAsCi0JUU9TX0FDX0JLLAotCVFPU19BQ19WSSwKLQlRT1NfQUNfVk8sCi0JUU9TX0hJR0hFU1RfQUNfSU5ERVggPSBRT1NfQUNfVk8sCi19OwotCi0jZGVmaW5lIE1BWF9OVU1fT0ZfQUMgICAgICAgICAgICAgKFFPU19ISUdIRVNUX0FDX0lOREVYKzEpCi0jZGVmaW5lIEZJUlNUX0FDX0lOREVYICAgICAgICAgICAgUU9TX0FDX0JFCi0jZGVmaW5lIE1BWF9OVU1fT0ZfODAyXzFkX1RBR1MgICAgOAotI2RlZmluZSBBQ19QQVJBTVNfTUFYX1RTSUQgICAgICAgIDE1Ci0jZGVmaW5lIE1BWF9BUFNEX0NPTkYgICAgICAgICAgICAgMHhmZmZmCi0KLSNkZWZpbmUgIFFPU19UWF9ISUdIX01JTiAgICAgICgwKQotI2RlZmluZSAgUU9TX1RYX0hJR0hfTUFYICAgICAgKDEwMCkKLQotI2RlZmluZSAgUU9TX1RYX0hJR0hfQktfREVGICAgKDI1KQotI2RlZmluZSAgUU9TX1RYX0hJR0hfQkVfREVGICAgKDM1KQotI2RlZmluZSAgUU9TX1RYX0hJR0hfVklfREVGICAgKDM1KQotI2RlZmluZSAgUU9TX1RYX0hJR0hfVk9fREVGICAgKDM1KQotCi0jZGVmaW5lICBRT1NfVFhfTE9XX0JLX0RFRiAgICAoMTUpCi0jZGVmaW5lICBRT1NfVFhfTE9XX0JFX0RFRiAgICAoMjUpCi0jZGVmaW5lICBRT1NfVFhfTE9XX1ZJX0RFRiAgICAoMjUpCi0jZGVmaW5lICBRT1NfVFhfTE9XX1ZPX0RFRiAgICAoMjUpCi0KLXN0cnVjdCBhY3hfdHhfcXVldWVfcW9zX2NvbmZpZyB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTggcWlkOwotCXU4IHBhZFszXTsKLQotCS8qIE1heCBudW1iZXIgb2YgYmxvY2tzIGFsbG93ZCBpbiB0aGUgcXVldWUgKi8KLQl1MTYgaGlnaF90aHJlc2hvbGQ7Ci0KLQkvKiBMb3dlc3QgbWVtb3J5IGJsb2NrcyBndWFyYW50ZWVkIGZvciB0aGlzIHF1ZXVlICovCi0JdTE2IGxvd190aHJlc2hvbGQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGFjeF9wYWNrZXRfZGV0ZWN0aW9uIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQl1MzIgdGhyZXNob2xkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLQotZW51bSBhY3hfc2xvdF90eXBlIHsKLQlTTE9UX1RJTUVfTE9ORyA9IDAsCi0JU0xPVF9USU1FX1NIT1JUID0gMSwKLQlERUZBVUxUX1NMT1RfVElNRSA9IFNMT1RfVElNRV9TSE9SVCwKLQlNQVhfU0xPVF9USU1FUyA9IDB4RkYKLX07Ci0KLSNkZWZpbmUgU1RBVElPTl9XT05FX0lOREVYIDAKLQotc3RydWN0IGFjeF9zbG90IHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQl1OCB3b25lX2luZGV4OyAvKiBSZXNlcnZlZCAqLwotCXU4IHNsb3RfdGltZTsKLQl1OCByZXNlcnZlZFs2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0KLSNkZWZpbmUgQUREUkVTU19HUk9VUF9NQVgJKDgpCi0jZGVmaW5lIEFERFJFU1NfR1JPVVBfTUFYX0xFTgkoRVRIX0FMRU4gKiBBRERSRVNTX0dST1VQX01BWCkKLQotc3RydWN0IG11bHRpY2FzdF9ncnBfYWRkcl9zdGFydCB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTggZW5hYmxlZDsKLQl1OCBudW1fZ3JvdXBzOwotCXU4IHBhZFsyXTsKLQl1OCBtYWNfdGFibGVbQUREUkVTU19HUk9VUF9NQVhfTEVOXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0KLSNkZWZpbmUgIFJYX1RJTUVPVVRfUFNfUE9MTF9NSU4gICAgMAotI2RlZmluZSAgUlhfVElNRU9VVF9QU19QT0xMX01BWCAgICAoMjAwMDAwKQotI2RlZmluZSAgUlhfVElNRU9VVF9QU19QT0xMX0RFRiAgICAoMTUpCi0jZGVmaW5lICBSWF9USU1FT1VUX1VQU0RfTUlOICAgICAgIDAKLSNkZWZpbmUgIFJYX1RJTUVPVVRfVVBTRF9NQVggICAgICAgKDIwMDAwMCkKLSNkZWZpbmUgIFJYX1RJTUVPVVRfVVBTRF9ERUYgICAgICAgKDE1KQotCi1zdHJ1Y3QgYWN4X3J4X3RpbWVvdXQgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCS8qCi0JICogVGhlIGxvbmdlc3QgdGltZSB0aGUgU1RBIHdpbGwgd2FpdCB0byByZWNlaXZlCi0JICogdHJhZmZpYyBmcm9tIHRoZSBBUCBhZnRlciBhIFBTLXBvbGwgaGFzIGJlZW4KLQkgKiB0cmFuc21pdHRlZC4KLQkgKi8KLQl1MTYgcHNfcG9sbF90aW1lb3V0OwotCi0JLyoKLQkgKiBUaGUgbG9uZ2VzdCB0aW1lIHRoZSBTVEEgd2lsbCB3YWl0IHRvIHJlY2VpdmUKLQkgKiB0cmFmZmljIGZyb20gdGhlIEFQIGFmdGVyIGEgZnJhbWUgaGFzIGJlZW4gc2VudAotCSAqIGZyb20gYW4gVVBTRCBlbmFibGVkIHF1ZXVlLgotCSAqLwotCXUxNiB1cHNkX3RpbWVvdXQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBSVFNfVEhSRVNIT0xEX01JTiAgICAgICAgICAgICAgMAotI2RlZmluZSBSVFNfVEhSRVNIT0xEX01BWCAgICAgICAgICAgICAgNDA5NgotI2RlZmluZSBSVFNfVEhSRVNIT0xEX0RFRiAgICAgICAgICAgICAgMjM0NwotCi1zdHJ1Y3QgYWN4X3J0c190aHJlc2hvbGQgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXUxNiB0aHJlc2hvbGQ7Ci0JdTggcGFkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBhY3hfYmVhY29uX2ZpbHRlcl9vcHRpb24gewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXU4IGVuYWJsZTsKLQotCS8qCi0JICogVGhlIG51bWJlciBvZiBiZWFjb25zIHdpdGhvdXQgdGhlIHVuaWNhc3QgVElNCi0JICogYml0IHNldCB0aGF0IHRoZSBmaXJtd2FyZSBidWZmZXJzIGJlZm9yZQotCSAqIHNpZ25hbGluZyB0aGUgaG9zdCBhYm91dCByZWFkeSBmcmFtZXMuCi0JICogV2hlbiBzZXQgdG8gMCBhbmQgdGhlIGZpbHRlciBpcyBlbmFibGVkLCBiZWFjb25zCi0JICogd2l0aG91dCB0aGUgdW5pY2FzdCBUSU0gYml0IHNldCBhcmUgZHJvcHBlZC4KLQkgKi8KLQl1OCBtYXhfbnVtX2JlYWNvbnM7Ci0JdTggcGFkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBBQ1hCZWFjb25GaWx0ZXJFbnRyeSAobm90IDIyMSkKLSAqIEJ5dGUgT2Zmc2V0ICAgICBTaXplIChCeXRlcykgICAgRGVmaW5pdGlvbgotICogPT09PT09PT09PT0gICAgID09PT09PT09PT09PSAgICA9PT09PT09PT09Ci0gKiAwCQkJCTEgICAgICAgICAgICAgICBJRSBpZGVudGlmaWVyCi0gKiAxICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIFRyZWF0bWVudCBiaXQgbWFzawotICoKLSAqIEFDWEJlYWNvbkZpbHRlckVudHJ5ICgyMjEpCi0gKiBCeXRlIE9mZnNldCAgICAgU2l6ZSAoQnl0ZXMpICAgIERlZmluaXRpb24KLSAqID09PT09PT09PT09ICAgICA9PT09PT09PT09PT0gICAgPT09PT09PT09PQotICogMCAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICBJRSBpZGVudGlmaWVyCi0gKiAxICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIFRyZWF0bWVudCBiaXQgbWFzawotICogMiAgICAgICAgICAgICAgIDMgICAgICAgICAgICAgICBPVUkKLSAqIDUgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgVHlwZQotICogNiAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICBWZXJzaW9uCi0gKgotICoKLSAqIFRyZWF0bWVudCBiaXQgbWFzayAtIFRoZSBpbmZvcm1hdGlvbiBlbGVtZW50IGhhbmRsaW5nOgotICogYml0IDAgLSBUaGUgaW5mb3JtYXRpb24gZWxlbWVudCBpcyBjb21wYXJlZCBhbmQgdHJhbnNmZXJyZWQKLSAqIGluIGNhc2Ugb2YgY2hhbmdlLgotICogYml0IDEgLSBUaGUgaW5mb3JtYXRpb24gZWxlbWVudCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaG9zdAotICogd2l0aCBlYWNoIGFwcGVhcmFuY2Ugb3IgZGlzYXBwZWFyYW5jZS4KLSAqIE5vdGUgdGhhdCBib3RoIGJpdHMgY2FuIGJlIHNldCBhdCB0aGUgc2FtZSB0aW1lLgotICovCi0jZGVmaW5lCUJFQUNPTl9GSUxURVJfVEFCTEVfTUFYX0lFX05VTQkJICAgICAgICgzMikKLSNkZWZpbmUgQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfVkVORE9SX1NQRUNJRklDX0lFX05VTSAoNikKLSNkZWZpbmUgQkVBQ09OX0ZJTFRFUl9UQUJMRV9JRV9FTlRSWV9TSVpFCSAgICAgICAoMikKLSNkZWZpbmUgQkVBQ09OX0ZJTFRFUl9UQUJMRV9FWFRSQV9WRU5ET1JfU1BFQ0lGSUNfSUVfU0laRSAoNikKLSNkZWZpbmUgQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfU0laRSAoKEJFQUNPTl9GSUxURVJfVEFCTEVfTUFYX0lFX05VTSAqIFwKLQkJCSAgICBCRUFDT05fRklMVEVSX1RBQkxFX0lFX0VOVFJZX1NJWkUpICsgXAotCQkJICAgKEJFQUNPTl9GSUxURVJfVEFCTEVfTUFYX1ZFTkRPUl9TUEVDSUZJQ19JRV9OVU0gKiBcCi0JCQkgICAgQkVBQ09OX0ZJTFRFUl9UQUJMRV9FWFRSQV9WRU5ET1JfU1BFQ0lGSUNfSUVfU0laRSkpCi0KLXN0cnVjdCBhY3hfYmVhY29uX2ZpbHRlcl9pZV90YWJsZSB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTggbnVtX2llOwotCXU4IHRhYmxlW0JFQUNPTl9GSUxURVJfVEFCTEVfTUFYX1NJWkVdOwotCXU4IHBhZFszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIHsKLQlTR19FTkFCTEUgPSAwLAotCVNHX0RJU0FCTEUsCi0JU0dfU0VOU0VfTk9fQUNUSVZJVFksCi0JU0dfU0VOU0VfQUNUSVZFCi19OwotCi1zdHJ1Y3QgYWN4X2J0X3dsYW5fY29leCB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JLyoKLQkgKiAwIC0+IFBUQSBlbmFibGVkCi0JICogMSAtPiBQVEEgZGlzYWJsZWQKLQkgKiAyIC0+IHNlbnNlIG5vIGFjdGl2ZSBtb2RlLCBpLmUuCi0JICogICAgICBhbiBpbnRlcnJ1cHQgaXMgc2VudCB1cG9uCi0JICogICAgICBCVCBhY3Rpdml0eS4KLQkgKiAzIC0+IFBUQSBpcyBzd2l0Y2hlZCBvbiBpbiByZXNwb25zZQotCSAqICAgICAgdG8gdGhlIGludGVycnVwdCBzZW5kaW5nLgotCSAqLwotCXU4IGVuYWJsZTsKLQl1OCBwYWRbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBQVEFfQU5URU5OQV9UWVBFX0RFRgkJICAoMCkKLSNkZWZpbmUgUFRBX0JUX0hQX01BWFRJTUVfREVGCQkgICgyMDAwKQotI2RlZmluZSBQVEFfV0xBTl9IUF9NQVhfVElNRV9ERUYJICAoNTAwMCkKLSNkZWZpbmUgUFRBX1NFTlNFX0RJU0FCTEVfVElNRVJfREVGCSAgKDEzNTApCi0jZGVmaW5lIFBUQV9QUk9URUNUSVZFX1JYX1RJTUVfREVGCSAgKDE1MDApCi0jZGVmaW5lIFBUQV9QUk9URUNUSVZFX1RYX1RJTUVfREVGCSAgKDE1MDApCi0jZGVmaW5lIFBUQV9USU1FT1VUX05FWFRfQlRfTFBfUEFDS0VUX0RFRiAoMzAwMCkKLSNkZWZpbmUgUFRBX1NJR05BTElOR19UWVBFX0RFRgkJICAoMSkKLSNkZWZpbmUgUFRBX0FGSF9MRVZFUkFHRV9PTl9ERUYJCSAgKDApCi0jZGVmaW5lIFBUQV9OVU1CRVJfUVVJRVRfQ1lDTEVfREVGCSAgKDApCi0jZGVmaW5lIFBUQV9NQVhfTlVNX0NUU19ERUYJCSAgKDMpCi0jZGVmaW5lIFBUQV9OVU1CRVJfT0ZfV0xBTl9QQUNLRVRTX0RFRgkgICgyKQotI2RlZmluZSBQVEFfTlVNQkVSX09GX0JUX1BBQ0tFVFNfREVGCSAgKDIpCi0jZGVmaW5lIFBUQV9QUk9URUNUSVZFX1JYX1RJTUVfRkFTVF9ERUYJICAoMTUwMCkKLSNkZWZpbmUgUFRBX1BST1RFQ1RJVkVfVFhfVElNRV9GQVNUX0RFRgkgICgzMDAwKQotI2RlZmluZSBQVEFfQ1lDTEVfVElNRV9GQVNUX0RFRgkJICAoODcwMCkKLSNkZWZpbmUgUFRBX1JYX0ZPUl9BVkFMQU5DSEVfREVGCSAgKDUpCi0jZGVmaW5lIFBUQV9FTFBfSFBfREVGCQkJICAoMCkKLSNkZWZpbmUgUFRBX0FOVElfU1RBUlZFX1BFUklPRF9ERUYJICAoNTAwKQotI2RlZmluZSBQVEFfQU5USV9TVEFSVkVfTlVNX0NZQ0xFX0RFRgkgICg0KQotI2RlZmluZSBQVEFfQUxMT1dfUEFfU0RfREVGCQkgICgxKQotI2RlZmluZSBQVEFfVElNRV9CRUZPUkVfQkVBQ09OX0RFRgkgICg2MzAwKQotI2RlZmluZSBQVEFfSFBETV9NQVhfVElNRV9ERUYJCSAgKDE2MDApCi0jZGVmaW5lIFBUQV9USU1FX09VVF9ORVhUX1dMQU5fREVGCSAgKDI1NTApCi0jZGVmaW5lIFBUQV9BVVRPX01PREVfTk9fQ1RTX0RFRgkgICgwKQotI2RlZmluZSBQVEFfQlRfSFBfUkVTUEVDVEVEX0RFRgkJICAoMykKLSNkZWZpbmUgUFRBX1dMQU5fUlhfTUlOX1JBVEVfREVGCSAgKDI0KQotI2RlZmluZSBQVEFfQUNLX01PREVfREVGCQkgICgxKQotCi1zdHJ1Y3QgYWN4X2J0X3dsYW5fY29leF9wYXJhbSB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JLyoKLQkgKiBUaGUgbWluaW11bSByYXRlIG9mIGEgcmVjZWl2ZWQgV0xBTiBwYWNrZXQgaW4gdGhlIFNUQSwKLQkgKiBkdXJpbmcgcHJvdGVjdGl2ZSBtb2RlLCBvZiB3aGljaCBhIG5ldyBCVC1IUCByZXF1ZXN0Ci0JICogZHVyaW5nIHRoaXMgUnggd2lsbCBhbHdheXMgYmUgcmVzcGVjdGVkIGFuZCBnYWluIHRoZSBhbnRlbm5hLgotCSAqLwotCXUzMiBtaW5fcmF0ZTsKLQotCS8qIE1heCB0aW1lIHRoZSBCVCBIUCB3aWxsIGJlIHJlc3BlY3RlZC4gKi8KLQl1MTYgYnRfaHBfbWF4X3RpbWU7Ci0KLQkvKiBNYXggdGltZSB0aGUgV0xBTiBIUCB3aWxsIGJlIHJlc3BlY3RlZC4gKi8KLQl1MTYgd2xhbl9ocF9tYXhfdGltZTsKLQotCS8qCi0JICogVGhlIHRpbWUgYmV0d2VlbiB0aGUgbGFzdCBCVCBhY3Rpdml0eQotCSAqIGFuZCB0aGUgbW9tZW50IHdoZW4gdGhlIHNlbnNlIG1vZGUgcmV0dXJucwotCSAqIHRvIFNFTlNFX0lOQUNUSVZFLgotCSAqLwotCXUxNiBzZW5zZV9kaXNhYmxlX3RpbWVyOwotCi0JLyogVGltZSBiZWZvcmUgdGhlIG5leHQgQlQgSFAgaW5zdGFuY2UgKi8KLQl1MTYgcnhfdGltZV9idF9ocDsKLQl1MTYgdHhfdGltZV9idF9ocDsKLQotCS8qIHJhbmdlOiAxMC0yMDAwMCAgICBkZWZhdWx0OiAxNTAwICovCi0JdTE2IHJ4X3RpbWVfYnRfaHBfZmFzdDsKLQl1MTYgdHhfdGltZV9idF9ocF9mYXN0OwotCi0JLyogcmFuZ2U6IDIwMDAtNjU1MzUgIGRlZmF1bHQ6IDg3MDAgKi8KLQl1MTYgd2xhbl9jeWNsZV9mYXN0OwotCi0JLyogcmFuZ2U6IDAgLSAxNTAwMCAoTXNlYykgZGVmYXVsdDogMTAwMCAqLwotCXUxNiBidF9hbnRpX3N0YXJ2YXRpb25fcGVyaW9kOwotCi0JLyogcmFuZ2UgNDAwLTEwMDAwKFVzZWMpIGRlZmF1bHQ6IDMwMDAgKi8KLQl1MTYgbmV4dF9idF9scF9wYWNrZXQ7Ci0KLQkvKiBEZWFmdWx0OiB3b3JzdCBjYXNlIGZvciBCVCBESDUgdHJhZmZpYyAqLwotCXUxNiB3YWtlX3VwX2JlYWNvbjsKLQotCS8qIHJhbmdlOiAwLTUwMDAwKFVzZWMpIGRlZmF1bHQ6IDEwNTAgKi8KLQl1MTYgaHBfZG1fbWF4X2d1YXJkX3RpbWU7Ci0KLQkvKgotCSAqIFRoaXMgaXMgdG8gcHJldmVudCBib3RoIEJUICYgV0xBTiBhbnRlbm5hCi0JICogc3RhcnZhdGlvbi4KLQkgKiBSYW5nZTogMTAwLTUwMDAwKFVzZWMpIGRlZmF1bHQ6MjU1MAotCSAqLwotCXUxNiBuZXh0X3dsYW5fcGFja2V0OwotCi0JLyogMCAtPiBzaGFyZWQgYW50ZW5uYSAqLwotCXU4IGFudGVubmFfdHlwZTsKLQotCS8qCi0JICogMCAtPiBUSSBsZWdhY3kKLQkgKiAxIC0+IFBhbGF1Ci0JICovCi0JdTggc2lnbmFsX3R5cGU7Ci0KLQkvKgotCSAqIEJUIEFGSCBzdGF0dXMKLQkgKiAwIC0+IG5vIEFGSAotCSAqIDEgLT4gZnJvbSBkZWRpY2F0ZWQgR1BJTwotCSAqIDIgLT4gQUZIIG9uIChmcm9tIGhvc3QpCi0JICovCi0JdTggYWZoX2xldmVyYWdlX29uOwotCi0JLyoKLQkgKiBUaGUgbnVtYmVyIG9mIGN5Y2xlcyBkdXJpbmcgd2hpY2ggbm8KLQkgKiBUWCB3aWxsIGJlIHNlbnQgYWZ0ZXIgMSBjeWNsZSBvZiBSWAotCSAqIHRyYW5zYWN0aW9uIGluIHByb3RlY3RpdmUgbW9kZQotCSAqLwotCXU4IHF1aWV0X2N5Y2xlX251bTsKLQotCS8qCi0JICogVGhlIG1heGltdW0gbnVtYmVyIG9mIENUU3MgdGhhdCB3aWxsCi0JICogYmUgc2VudCBmb3IgcmVjZWl2aW5nIFJYIHBhY2tldCBpbgotCSAqIHByb3RlY3RpdmUgbW9kZQotCSAqLwotCXU4IG1heF9jdHM7Ci0KLQkvKgotCSAqIFRoZSBudW1iZXIgb2YgV0xBTiBwYWNrZXRzCi0JICogdHJhbnNmZXJyZWQgaW4gY29tbW9uIG1vZGUgYmVmb3JlCi0JICogc3dpdGNoaW5nIHRvIEJULgotCSAqLwotCXU4IHdsYW5fcGFja2V0c19udW07Ci0KLQkvKgotCSAqIFRoZSBudW1iZXIgb2YgQlQgcGFja2V0cwotCSAqIHRyYW5zZmVycmVkIGluIGNvbW1vbiBtb2RlIGJlZm9yZQotCSAqIHN3aXRjaGluZyB0byBXTEFOLgotCSAqLwotCXU4IGJ0X3BhY2tldHNfbnVtOwotCi0JLyogcmFuZ2U6IDEtMjU1ICBkZWZhdWx0OiA1ICovCi0JdTggbWlzc2VkX3J4X2F2YWxhbmNoZTsKLQotCS8qIHJhbmdlOiAwLTEgICAgZGVmYXVsdDogMSAqLwotCXU4IHdsYW5fZWxwX2hwOwotCi0JLyogcmFuZ2U6IDAgLSAxNSAgZGVmYXVsdDogNCAqLwotCXU4IGJ0X2FudGlfc3RhcnZhdGlvbl9jeWNsZXM7Ci0KLQl1OCBhY2tfbW9kZV9kdWFsX2FudDsKLQotCS8qCi0JICogQWxsb3cgUEFfU0QgYXNzZXJ0aW9uL2RlLWFzc2VydGlvbgotCSAqIGR1cmluZyBlbmFibGVkIEJUIGFjdGl2aXR5LgotCSAqLwotCXU4IHBhX3NkX2VuYWJsZTsKLQotCS8qCi0JICogRW5hYmxlL0Rpc2FibGUgUFRBIGluIGF1dG8gbW9kZToKLQkgKiBTdXBwb3J0IEJvdGggQWN0aXZlICYgUC5TIG1vZGVzCi0JICovCi0JdTggcHRhX2F1dG9fbW9kZV9lbmFibGU7Ci0KLQkvKiByYW5nZTogMCAtIDIwICBkZWZhdWx0OiAxICovCi0JdTggYnRfaHBfcmVzcGVjdGVkX251bTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIENDQV9USFJTSF9FTkFCTEVfRU5FUkdZX0QgICAgICAgMHgxNDBBCi0jZGVmaW5lIENDQV9USFJTSF9ESVNBQkxFX0VORVJHWV9EICAgICAgMHhGRkVGCi0KLXN0cnVjdCBhY3hfZW5lcmd5X2RldGVjdGlvbiB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JLyogVGhlIFJYIENsZWFyIENoYW5uZWwgQXNzZXNzbWVudCB0aHJlc2hvbGQgaW4gdGhlIFBIWSAqLwotCXUxNiByeF9jY2FfdGhyZXNob2xkOwotCXU4IHR4X2VuZXJneV9kZXRlY3Rpb247Ci0JdTggcGFkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgQkNOX1JYX1RJTUVPVVRfREVGX1ZBTFVFICAgICAgICAxMDAwMAotI2RlZmluZSBCUk9BRENBU1RfUlhfVElNRU9VVF9ERUZfVkFMVUUgIDIwMDAwCi0jZGVmaW5lIFJYX0JST0FEQ0FTVF9JTl9QU19ERUZfVkFMVUUgICAgMQotI2RlZmluZSBDT05TRUNVVElWRV9QU19QT0xMX0ZBSUxVUkVfREVGIDQKLQotc3RydWN0IGFjeF9iZWFjb25fYnJvYWRjYXN0IHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQl1MTYgYmVhY29uX3J4X3RpbWVvdXQ7Ci0JdTE2IGJyb2FkY2FzdF90aW1lb3V0OwotCi0JLyogRW5hYmxlcyByZWNlaXZpbmcgb2YgYnJvYWRjYXN0IHBhY2tldHMgaW4gUFMgbW9kZSAqLwotCXU4IHJ4X2Jyb2FkY2FzdF9pbl9wczsKLQotCS8qIENvbnNlY3V0aXZlIFBTIFBvbGwgZmFpbHVyZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBob3N0ICovCi0JdTggcHNfcG9sbF90aHJlc2hvbGQ7Ci0JdTggcGFkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBhY3hfZXZlbnRfbWFzayB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTMyIGV2ZW50X21hc2s7Ci0JdTMyIGhpZ2hfZXZlbnRfbWFzazsgLyogVW51c2VkICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBDRkdfUlhfRkNTCQlCSVQoMikKLSNkZWZpbmUgQ0ZHX1JYX0FMTF9HT09ECQlCSVQoMykKLSNkZWZpbmUgQ0ZHX1VOSV9GSUxURVJfRU4JQklUKDQpCi0jZGVmaW5lIENGR19CU1NJRF9GSUxURVJfRU4JQklUKDUpCi0jZGVmaW5lIENGR19NQ19GSUxURVJfRU4JQklUKDYpCi0jZGVmaW5lIENGR19NQ19BRERSMF9FTgkJQklUKDcpCi0jZGVmaW5lIENGR19NQ19BRERSMV9FTgkJQklUKDgpCi0jZGVmaW5lIENGR19CQ19SRUpFQ1RfRU4JQklUKDkpCi0jZGVmaW5lIENGR19TU0lEX0ZJTFRFUl9FTglCSVQoMTApCi0jZGVmaW5lIENGR19SWF9JTlRfRkNTX0VSUk9SCUJJVCgxMSkKLSNkZWZpbmUgQ0ZHX1JYX0lOVF9FTkNSWVBURUQJQklUKDEyKQotI2RlZmluZSBDRkdfUlhfV1JfUlhfU1RBVFVTCUJJVCgxMykKLSNkZWZpbmUgQ0ZHX1JYX0ZJTFRFUl9OVUxUSQlCSVQoMTQpCi0jZGVmaW5lIENGR19SWF9SRVNFUlZFCQlCSVQoMTUpCi0jZGVmaW5lIENGR19SWF9USU1FU1RBTVBfVFNGCUJJVCgxNikKLQotI2RlZmluZSBDRkdfUlhfUlNWX0VOCQlCSVQoMCkKLSNkZWZpbmUgQ0ZHX1JYX1JDVFNfQUNLCQlCSVQoMSkKLSNkZWZpbmUgQ0ZHX1JYX1BSU1BfRU4JCUJJVCgyKQotI2RlZmluZSBDRkdfUlhfUFJFUV9FTgkJQklUKDMpCi0jZGVmaW5lIENGR19SWF9NR01UX0VOCQlCSVQoNCkKLSNkZWZpbmUgQ0ZHX1JYX0ZDU19FUlJPUglCSVQoNSkKLSNkZWZpbmUgQ0ZHX1JYX0RBVEFfRU4JCUJJVCg2KQotI2RlZmluZSBDRkdfUlhfQ1RMX0VOCQlCSVQoNykKLSNkZWZpbmUgQ0ZHX1JYX0NGX0VOCQlCSVQoOCkKLSNkZWZpbmUgQ0ZHX1JYX0JDTl9FTgkJQklUKDkpCi0jZGVmaW5lIENGR19SWF9BVVRIX0VOCQlCSVQoMTApCi0jZGVmaW5lIENGR19SWF9BU1NPQ19FTgkJQklUKDExKQotCi0jZGVmaW5lIFNDQU5fUEFTU0lWRQkJQklUKDApCi0jZGVmaW5lIFNDQU5fNUdIWl9CQU5ECQlCSVQoMSkKLSNkZWZpbmUgU0NBTl9UUklHR0VSRUQJCUJJVCgyKQotI2RlZmluZSBTQ0FOX1BSSU9SSVRZX0hJR0gJQklUKDMpCi0KLXN0cnVjdCBhY3hfZndfZ2VuX2ZyYW1lX3JhdGVzIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQl1OCB0eF9jdHJsX2ZyYW1lX3JhdGU7IC8qIFJBVEVfKiAqLwotCXU4IHR4X2N0cmxfZnJhbWVfbW9kOyAvKiBDQ0tfKiBvciBQQkNDXyogKi8KLQl1OCB0eF9tZ3RfZnJhbWVfcmF0ZTsKLQl1OCB0eF9tZ3RfZnJhbWVfbW9kOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFNUQSBNQUMgKi8KLXN0cnVjdCBkb3QxMV9zdGF0aW9uX2lkIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQl1OCBtYWNbRVRIX0FMRU5dOwotCXU4IHBhZFsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBIVyBlbmNyeXB0aW9uIGtleXMgKi8KLSNkZWZpbmUgTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFkgNAotI2RlZmluZSBNQVhfS0VZX1NJWkUgMzIKLQotLyogV2hlbiBzZXQsIGRpc2FibGUgSFcgZW5jcnlwdGlvbiAqLwotI2RlZmluZSBERl9FTkNSWVBUSU9OX0RJU0FCTEUgICAgICAweDAxCi0vKiBXaGVuIHNldCwgZGlzYWJsZSBIVyBkZWNyeXB0aW9uICovCi0jZGVmaW5lIERGX1NOSUZGX01PREVfRU5BQkxFICAgICAgIDB4ODAKLQotc3RydWN0IGFjeF9mZWF0dXJlX2NvbmZpZyB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTMyIG9wdGlvbnM7Ci0JdTMyIGRhdGFfZmxvd19vcHRpb25zOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWVudW0gYWN4X2tleV9hY3Rpb24gewotCUtFWV9BRERfT1JfUkVQTEFDRSA9IDEsCi0JS0VZX1JFTU9WRSAgICAgICAgID0gMiwKLQlLRVlfU0VUX0lEICAgICAgICAgPSAzLAotCU1BWF9LRVlfQUNUSU9OICAgICA9IDB4ZmZmZiwKLX07Ci0KLWVudW0gYWN4X2tleV90eXBlIHsKLQlLRVlfV0VQX0RFRkFVTFQgICAgICAgPSAwLAotCUtFWV9XRVBfQUREUiAgICAgICAgICA9IDEsCi0JS0VZX0FFU19HUk9VUCAgICAgICAgID0gNCwKLQlLRVlfQUVTX1BBSVJXSVNFICAgICAgPSA1LAotCUtFWV9XRVBfR1JPVVAgICAgICAgICA9IDYsCi0JS0VZX1RLSVBfTUlDX0dST1VQICAgID0gMTAsCi0JS0VZX1RLSVBfTUlDX1BBSVJXSVNFID0gMTEsCi19OwotCi0vKgotICoKLSAqIGtleV90eXBlX2UgICBrZXkgc2l6ZSAgICBrZXkgZm9ybWF0Ci0gKiAtLS0tLS0tLS0tICAgLS0tLS0tLS0tICAgLS0tLS0tLS0tLQotICogMHgwMCAgICAgICAgIDUsIDEzLCAyOSAgIEtleSBkYXRhCi0gKiAweDAxICAgICAgICAgNSwgMTMsIDI5ICAgS2V5IGRhdGEKLSAqIDB4MDQgICAgICAgICAxNiAgICAgICAgICAxNiBieXRlcyBvZiBrZXkgZGF0YQotICogMHgwNSAgICAgICAgIDE2ICAgICAgICAgIDE2IGJ5dGVzIG9mIGtleSBkYXRhCi0gKiAweDBhICAgICAgICAgMzIgICAgICAgICAgMTYgYnl0ZXMgb2YgVEtJUCBrZXkgZGF0YQotICogICAgICAgICAgICAgICAgICAgICAgICAgIDggYnl0ZXMgb2YgUlggTUlDIGtleSBkYXRhCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgOCBieXRlcyBvZiBUWCBNSUMga2V5IGRhdGEKLSAqIDB4MGIgICAgICAgICAzMiAgICAgICAgICAxNiBieXRlcyBvZiBUS0lQIGtleSBkYXRhCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgOCBieXRlcyBvZiBSWCBNSUMga2V5IGRhdGEKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICA4IGJ5dGVzIG9mIFRYIE1JQyBrZXkgZGF0YQotICoKLSAqLwotCi1zdHJ1Y3QgYWN4X3NldF9rZXkgewotCS8qIElnbm9yZWQgZm9yIGRlZmF1bHQgV0VQIGtleSAqLwotCXU4IGFkZHJbRVRIX0FMRU5dOwotCi0JLyoga2V5X2FjdGlvbl9lICovCi0JdTE2IGtleV9hY3Rpb247Ci0KLQl1MTYgcmVzZXJ2ZWRfMTsKLQotCS8qIGtleSBzaXplIGluIGJ5dGVzICovCi0JdTgga2V5X3NpemU7Ci0KLQkvKiBrZXlfdHlwZV9lICovCi0JdTgga2V5X3R5cGU7Ci0JdTggc3NpZF9wcm9maWxlOwotCi0JLyoKLQkgKiBUS0lQLCBBRVM6IGZyYW1lJ3Mga2V5IGlkIGZpZWxkLgotCSAqIEZvciBXRVAgZGVmYXVsdCBrZXk6IGtleSBpZDsKLQkgKi8KLQl1OCBpZDsKLQl1OCByZXNlcnZlZF8yWzZdOwotCXU4IGtleVtNQVhfS0VZX1NJWkVdOwotCXUxNiBhY19zZXFfbnVtMTZbTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFldOwotCXUzMiBhY19zZXFfbnVtMzJbTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFldOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBhY3hfY3VycmVudF90eF9wb3dlciB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTggIGN1cnJlbnRfdHhfcG93ZXI7Ci0JdTggIHBhZGRpbmdbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGFjeF9kb3QxMV9kZWZhdWx0X2tleSB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTggaWQ7Ci0JdTggcGFkWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBhY3hfdHNmX2luZm8gewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXUzMiBjdXJyZW50X3RzZl9tc2I7Ci0JdTMyIGN1cnJlbnRfdHNmX2xzYjsKLQl1MzIgbGFzdF9UQlRUX21zYjsKLQl1MzIgbGFzdF9UQlRUX2xzYjsKLQl1OCBsYXN0X2R0aW1fY291bnQ7Ci0JdTggcGFkWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIDgwMi4xMSBQUyAqLwotZW51bSBhY3hfcHNfbW9kZSB7Ci0JU1RBVElPTl9BQ1RJVkVfTU9ERSwKLQlTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERQotfTsKLQotc3RydWN0IGFjeF9wc19wYXJhbXMgewotCXU4IHBzX21vZGU7IC8qIFNUQVRJT05fKiAqLwotCXU4IHNlbmRfbnVsbF9kYXRhOyAvKiBEbyB3ZSBoYXZlIHRvIHNlbmQgTlVMTCBkYXRhIHBhY2tldCA/ICovCi0JdTggcmV0cmllczsgLyogTnVtYmVyIG9mIHJldGlyZXMgZm9yIHRoZSBpbml0aWFsIE5VTEwgZGF0YSBwYWNrZXQgKi8KLQotCSAvKgotCSAgKiBUVXMgZHVyaW5nIHdoaWNoIHRoZSB0YXJnZXQgc3RheXMgYXdha2UgYWZ0ZXIgc3dpdGNoaW5nCi0JICAqIHRvIHBvd2VyIHNhdmUgbW9kZS4KLQkgICovCi0JdTggaGFuZ19vdmVyX3BlcmlvZDsKLQl1MTYgbnVsbF9kYXRhX3JhdGU7Ci0JdTggcGFkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWVudW0gYWN4X3dha2VfdXBfZXZlbnQgewotCVdBS0VfVVBfRVZFTlRfQkVBQ09OX0JJVE1BUAk9IDB4MDEsIC8qIFdha2Ugb24gZXZlcnkgQmVhY29uKi8KLQlXQUtFX1VQX0VWRU5UX0RUSU1fQklUTUFQCT0gMHgwMiwJLyogV2FrZSBvbiBldmVyeSBEVElNKi8KLQlXQUtFX1VQX0VWRU5UX05fRFRJTV9CSVRNQVAJPSAweDA0LCAvKiBXYWtlIG9uIGV2ZXJ5IE50aCBEVElNICovCi0JV0FLRV9VUF9FVkVOVF9OX0JFQUNPTlNfQklUTUFQCT0gMHgwOCwgLyogV2FrZSBvbiBldmVyeSBOdGggQmVhY29uICovCi0JV0FLRV9VUF9FVkVOVF9CSVRTX01BU0sJCT0gMHgwRgotfTsKLQotc3RydWN0IGFjeF93YWtlX3VwX2NvbmRpdGlvbiB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTggd2FrZV91cF9ldmVudDsgLyogT25seSBvbmUgYml0IGNhbiBiZSBzZXQgKi8KLQl1OCBsaXN0ZW5faW50ZXJ2YWw7Ci0JdTggcGFkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBhY3hfYWlkIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQkvKgotCSAqIFRvIGJlIHNldCB3aGVuIGFzc29jaWF0ZWQgd2l0aCBhbiBBUC4KLQkgKi8KLQl1MTYgYWlkOwotCXU4IHBhZFsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIGFjeF9wcmVhbWJsZV90eXBlIHsKLQlBQ1hfUFJFQU1CTEVfTE9ORyA9IDAsCi0JQUNYX1BSRUFNQkxFX1NIT1JUID0gMQotfTsKLQotc3RydWN0IGFjeF9wcmVhbWJsZSB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCS8qCi0JICogV2hlbiBzZXQsIHRoZSBXaUxpbmsgdHJhbnNtaXRzIHRoZSBmcmFtZXMgd2l0aCBhIHNob3J0IHByZWFtYmxlIGFuZAotCSAqIHdoZW4gY2xlYXJlZCwgdGhlIFdpTGluayB0cmFuc21pdHMgdGhlIGZyYW1lcyB3aXRoIGEgbG9uZyBwcmVhbWJsZS4KLQkgKi8KLQl1OCBwcmVhbWJsZTsKLQl1OCBwYWRkaW5nWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWVudW0gYWN4X2N0c3Byb3RlY3RfdHlwZSB7Ci0JQ1RTUFJPVEVDVF9ESVNBQkxFID0gMCwKLQlDVFNQUk9URUNUX0VOQUJMRSA9IDEKLX07Ci0KLXN0cnVjdCBhY3hfY3RzcHJvdGVjdCB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCXU4IGN0c3Byb3RlY3Q7Ci0JdTggcGFkZGluZ1szXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgYWN4X3R4X3N0YXRpc3RpY3MgewotCXUzMiBpbnRlcm5hbF9kZXNjX292ZXJmbG93OwotfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgYWN4X3J4X3N0YXRpc3RpY3MgewotCXUzMiBvdXRfb2ZfbWVtOwotCXUzMiBoZHJfb3ZlcmZsb3c7Ci0JdTMyIGh3X3N0dWNrOwotCXUzMiBkcm9wcGVkOwotCXUzMiBmY3NfZXJyOwotCXUzMiB4ZnJfaGludF90cmlnOwotCXUzMiBwYXRoX3Jlc2V0OwotCXUzMiByZXNldF9jb3VudGVyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBhY3hfZG1hX3N0YXRpc3RpY3MgewotCXUzMiByeF9yZXF1ZXN0ZWQ7Ci0JdTMyIHJ4X2Vycm9yczsKLQl1MzIgdHhfcmVxdWVzdGVkOwotCXUzMiB0eF9lcnJvcnM7Ci19ICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBhY3hfaXNyX3N0YXRpc3RpY3MgewotCS8qIGhvc3QgY29tbWFuZCBjb21wbGV0ZSAqLwotCXUzMiBjbWRfY21wbHQ7Ci0KLQkvKiBmaXFpc3IoKSAqLwotCXUzMiBmaXFzOwotCi0JLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19SWF9IRUFERVIpICovCi0JdTMyIHJ4X2hlYWRlcnM7Ci0KLQkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX1JYX0NNUExUKSAqLwotCXUzMiByeF9jb21wbGV0ZXM7Ci0KLQkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX05PX1JYX0JVRikgKi8KLQl1MzIgcnhfbWVtX292ZXJmbG93OwotCi0JLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19TX1JYX1JEWSkgKi8KLQl1MzIgcnhfcmR5czsKLQotCS8qIGlycWlzcigpICovCi0JdTMyIGlycXM7Ci0KLQkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX1RYX1BST0MpICovCi0JdTMyIHR4X3Byb2NzOwotCi0JLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19ERUNSWVBUX0RPTkUpICovCi0JdTMyIGRlY3J5cHRfZG9uZTsKLQotCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfRE1BMCkgKi8KLQl1MzIgZG1hMF9kb25lOwotCi0JLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19ETUExKSAqLwotCXUzMiBkbWExX2RvbmU7Ci0KLQkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX1RYX0VYQ19DTVBMVCkgKi8KLQl1MzIgdHhfZXhjaF9jb21wbGV0ZTsKLQotCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfQ09NTUFORCkgKi8KLQl1MzIgY29tbWFuZHM7Ci0KLQkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX1JYX1BST0MpICovCi0JdTMyIHJ4X3Byb2NzOwotCi0JLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19QTV84MDIpICovCi0JdTMyIGh3X3BtX21vZGVfY2hhbmdlczsKLQotCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfQUNLTk9XTEVER0UpICovCi0JdTMyIGhvc3RfYWNrbm93bGVkZ2VzOwotCi0JLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19QTV9QQ0kpICovCi0JdTMyIHBjaV9wbTsKLQotCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfQUNNX1dBS0VVUCkgKi8KLQl1MzIgd2FrZXVwczsKLQotCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfTE9XX1JTU0kpICovCi0JdTMyIGxvd19yc3NpOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBhY3hfd2VwX3N0YXRpc3RpY3MgewotCS8qIFdFUCBhZGRyZXNzIGtleXMgY29uZmlndXJlZCAqLwotCXUzMiBhZGRyX2tleV9jb3VudDsKLQotCS8qIGRlZmF1bHQga2V5cyBjb25maWd1cmVkICovCi0JdTMyIGRlZmF1bHRfa2V5X2NvdW50OwotCi0JdTMyIHJlc2VydmVkOwotCi0JLyogbnVtYmVyIG9mIHRpbWVzIHRoYXQgV0VQIGtleSBub3QgZm91bmQgb24gbG9va3VwICovCi0JdTMyIGtleV9ub3RfZm91bmQ7Ci0KLQkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCBXRVAga2V5IGRlY3J5cHRpb24gZmFpbGVkICovCi0JdTMyIGRlY3J5cHRfZmFpbDsKLQotCS8qIFdFUCBwYWNrZXRzIGRlY3J5cHRlZCAqLwotCXUzMiBwYWNrZXRzOwotCi0JLyogV0VQIGRlY3J5cHQgaW50ZXJydXB0cyAqLwotCXUzMiBpbnRlcnJ1cHQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBBQ1hfTUlTU0VEX0JFQUNPTlNfU1BSRUFEIDEwCi0KLXN0cnVjdCBhY3hfcHdyX3N0YXRpc3RpY3MgewotCS8qIHRoZSBhbW91bnQgb2YgZW50ZXJzIGludG8gcG93ZXIgc2F2ZSBtb2RlIChib3RoIFBEICYgRUxQKSAqLwotCXUzMiBwc19lbnRlcjsKLQotCS8qIHRoZSBhbW91bnQgb2YgZW50ZXJzIGludG8gRUxQIG1vZGUgKi8KLQl1MzIgZWxwX2VudGVyOwotCi0JLyogdGhlIGFtb3VudCBvZiBtaXNzaW5nIGJlYWNvbiBpbnRlcnJ1cHRzIHRvIHRoZSBob3N0ICovCi0JdTMyIG1pc3NpbmdfYmNuczsKLQotCS8qIHRoZSBhbW91bnQgb2Ygd2FrZSBvbiBob3N0LWFjY2VzcyB0aW1lcyAqLwotCXUzMiB3YWtlX29uX2hvc3Q7Ci0KLQkvKiB0aGUgYW1vdW50IG9mIHdha2Ugb24gdGltZXItZXhwaXJlICovCi0JdTMyIHdha2Vfb25fdGltZXJfZXhwOwotCi0JLyogdGhlIG51bWJlciBvZiBwYWNrZXRzIHRoYXQgd2VyZSB0cmFuc21pdHRlZCB3aXRoIFBTIGJpdCBzZXQgKi8KLQl1MzIgdHhfd2l0aF9wczsKLQotCS8qIHRoZSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IHdlcmUgdHJhbnNtaXR0ZWQgd2l0aCBQUyBiaXQgY2xlYXIgKi8KLQl1MzIgdHhfd2l0aG91dF9wczsKLQotCS8qIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgYmVhY29ucyAqLwotCXUzMiByY3ZkX2JlYWNvbnM7Ci0KLQkvKiB0aGUgbnVtYmVyIG9mIGVudGVyaW5nIGludG8gUG93ZXJPbiAocG93ZXIgc2F2ZSBvZmYpICovCi0JdTMyIHBvd2VyX3NhdmVfb2ZmOwotCi0JLyogdGhlIG51bWJlciBvZiBlbnRyaWVzIGludG8gcG93ZXIgc2F2ZSBtb2RlICovCi0JdTE2IGVuYWJsZV9wczsKLQotCS8qCi0JICogdGhlIG51bWJlciBvZiBleGl0cyBmcm9tIHBvd2VyIHNhdmUsIG5vdCBpbmNsdWRpbmcgZmFpbGVkIFBTCi0JICogdHJhbnNpdGlvbnMKLQkgKi8KLQl1MTYgZGlzYWJsZV9wczsKLQotCS8qCi0JICogdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgVFNGIGNvdW50ZXIgd2FzIGFkanVzdGVkIGJlY2F1c2UKLQkgKiBvZiBkcmlmdAotCSAqLwotCXUzMiBmaXhfdHNmX3BzOwotCi0JLyogR2l2ZXMgc3RhdGlzdGljcyBhYm91dCB0aGUgc3ByZWFkIGNvbnRpbnVvdXMgbWlzc2VkIGJlYWNvbnMuCi0JICogVGhlIDE2IExTQiBhcmUgZGVkaWNhdGVkIGZvciB0aGUgUFMgbW9kZS4KLQkgKiBUaGUgMTYgTVNCIGFyZSBkZWRpY2F0ZWQgZm9yIHRoZSBQUyBtb2RlLgotCSAqIGNvbnRfbWlzc19iY25zX3NwcmVhZFswXSAtIHNpbmdsZSBtaXNzZWQgYmVhY29uLgotCSAqIGNvbnRfbWlzc19iY25zX3NwcmVhZFsxXSAtIHR3byBjb250aW51b3VzIG1pc3NlZCBiZWFjb25zLgotCSAqIGNvbnRfbWlzc19iY25zX3NwcmVhZFsyXSAtIHRocmVlIGNvbnRpbnVvdXMgbWlzc2VkIGJlYWNvbnMuCi0JICogLi4uCi0JICogY29udF9taXNzX2JjbnNfc3ByZWFkWzldIC0gdGVuIGFuZCBtb3JlIGNvbnRpbnVvdXMgbWlzc2VkIGJlYWNvbnMuCi0JKi8KLQl1MzIgY29udF9taXNzX2JjbnNfc3ByZWFkW0FDWF9NSVNTRURfQkVBQ09OU19TUFJFQURdOwotCi0JLyogdGhlIG51bWJlciBvZiBiZWFjb25zIGluIGF3YWtlIG1vZGUgKi8KLQl1MzIgcmN2ZF9hd2FrZV9iZWFjb25zOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBhY3hfbWljX3N0YXRpc3RpY3MgewotCXUzMiByeF9wa3RzOwotCXUzMiBjYWxjX2ZhaWx1cmU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGFjeF9hZXNfc3RhdGlzdGljcyB7Ci0JdTMyIGVuY3J5cHRfZmFpbDsKLQl1MzIgZGVjcnlwdF9mYWlsOwotCXUzMiBlbmNyeXB0X3BhY2tldHM7Ci0JdTMyIGRlY3J5cHRfcGFja2V0czsKLQl1MzIgZW5jcnlwdF9pbnRlcnJ1cHQ7Ci0JdTMyIGRlY3J5cHRfaW50ZXJydXB0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBhY3hfZXZlbnRfc3RhdGlzdGljcyB7Ci0JdTMyIGhlYXJ0X2JlYXQ7Ci0JdTMyIGNhbGlicmF0aW9uOwotCXUzMiByeF9taXNtYXRjaDsKLQl1MzIgcnhfbWVtX2VtcHR5OwotCXUzMiByeF9wb29sOwotCXUzMiBvb21fbGF0ZTsKLQl1MzIgcGh5X3RyYW5zbWl0X2Vycm9yOwotCXUzMiB0eF9zdHVjazsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgYWN4X3BzX3N0YXRpc3RpY3MgewotCXUzMiBwc3BvbGxfdGltZW91dHM7Ci0JdTMyIHVwc2RfdGltZW91dHM7Ci0JdTMyIHVwc2RfbWF4X3NwdGltZTsKLQl1MzIgdXBzZF9tYXhfYXB0dXJuOwotCXUzMiBwc3BvbGxfbWF4X2FwdHVybjsKLQl1MzIgcHNwb2xsX3V0aWxpemF0aW9uOwotCXUzMiB1cHNkX3V0aWxpemF0aW9uOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBhY3hfcnhwaXBlX3N0YXRpc3RpY3MgewotCXUzMiByeF9wcmVwX2JlYWNvbl9kcm9wOwotCXUzMiBkZXNjcl9ob3N0X2ludF90cmlnX3J4X2RhdGE7Ci0JdTMyIGJlYWNvbl9idWZmZXJfdGhyZXNfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOwotCXUzMiBtaXNzZWRfYmVhY29uX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKLQl1MzIgdHhfeGZyX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgYWN4X3N0YXRpc3RpY3MgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXN0cnVjdCBhY3hfdHhfc3RhdGlzdGljcyB0eDsKLQlzdHJ1Y3QgYWN4X3J4X3N0YXRpc3RpY3Mgcng7Ci0Jc3RydWN0IGFjeF9kbWFfc3RhdGlzdGljcyBkbWE7Ci0Jc3RydWN0IGFjeF9pc3Jfc3RhdGlzdGljcyBpc3I7Ci0Jc3RydWN0IGFjeF93ZXBfc3RhdGlzdGljcyB3ZXA7Ci0Jc3RydWN0IGFjeF9wd3Jfc3RhdGlzdGljcyBwd3I7Ci0Jc3RydWN0IGFjeF9hZXNfc3RhdGlzdGljcyBhZXM7Ci0Jc3RydWN0IGFjeF9taWNfc3RhdGlzdGljcyBtaWM7Ci0Jc3RydWN0IGFjeF9ldmVudF9zdGF0aXN0aWNzIGV2ZW50OwotCXN0cnVjdCBhY3hfcHNfc3RhdGlzdGljcyBwczsKLQlzdHJ1Y3QgYWN4X3J4cGlwZV9zdGF0aXN0aWNzIHJ4cGlwZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIHsKLQlBQ1hfV0FLRV9VUF9DT05ESVRJT05TICAgICAgPSAweDAwMDIsCi0JQUNYX01FTV9DRkcgICAgICAgICAgICAgICAgID0gMHgwMDAzLAotCUFDWF9TTE9UICAgICAgICAgICAgICAgICAgICA9IDB4MDAwNCwKLQlBQ1hfUVVFVUVfSEVBRCAgICAgICAgICAgICAgPSAweDAwMDUsIC8qIGZvciBNQVNURVIgbW9kZSBvbmx5ICovCi0JQUNYX0FDX0NGRyAgICAgICAgICAgICAgICAgID0gMHgwMDA3LAotCUFDWF9NRU1fTUFQICAgICAgICAgICAgICAgICA9IDB4MDAwOCwKLQlBQ1hfQUlEICAgICAgICAgICAgICAgICAgICAgPSAweDAwMEEsCi0JQUNYX1JBRElPX1BBUkFNICAgICAgICAgICAgID0gMHgwMDBCLCAvKiBOb3QgdXNlZCAqLwotCUFDWF9DRkcgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwQywgLyogTm90IHVzZWQgKi8KLQlBQ1hfRldfUkVWICAgICAgICAgICAgICAgICAgPSAweDAwMEQsCi0JQUNYX01FRElVTV9VU0FHRSAgICAgICAgICAgID0gMHgwMDBGLAotCUFDWF9SWF9DRkcgICAgICAgICAgICAgICAgICA9IDB4MDAxMCwKLQlBQ1hfVFhfUVVFVUVfQ0ZHICAgICAgICAgICAgPSAweDAwMTEsIC8qIEZJWE1FOiBvbmx5IHVzZWQgYnkgd2wxMjUxICovCi0JQUNYX0JTU19JTl9QUyAgICAgICAgICAgICAgID0gMHgwMDEyLCAvKiBmb3IgQVAgb25seSAqLwotCUFDWF9TVEFUSVNUSUNTICAgICAgICAgICAgICA9IDB4MDAxMywgLyogRGVidWcgQVBJICovCi0JQUNYX0ZFQVRVUkVfQ0ZHICAgICAgICAgICAgID0gMHgwMDE1LAotCUFDWF9NSVNDX0NGRyAgICAgICAgICAgICAgICA9IDB4MDAxNywgLyogTm90IHVzZWQgKi8KLQlBQ1hfVElEX0NGRyAgICAgICAgICAgICAgICAgPSAweDAwMUEsCi0JQUNYX0JFQUNPTl9GSUxURVJfT1BUICAgICAgID0gMHgwMDFGLAotCUFDWF9MT1dfUlNTSSAgICAgICAgICAgICAgICA9IDB4MDAyMCwKLQlBQ1hfTk9JU0VfSElTVCAgICAgICAgICAgICAgPSAweDAwMjEsCi0JQUNYX0hES19WRVJTSU9OICAgICAgICAgICAgID0gMHgwMDIyLCAvKiA/Pz8gKi8KLQlBQ1hfUERfVEhSRVNIT0xEICAgICAgICAgICAgPSAweDAwMjMsCi0JQUNYX0RBVEFfUEFUSF9QQVJBTVMgICAgICAgID0gMHgwMDI0LCAvKiBXTyAqLwotCUFDWF9EQVRBX1BBVEhfUkVTUF9QQVJBTVMgICA9IDB4MDAyNCwgLyogUk8gKi8KLQlBQ1hfQ0NBX1RIUkVTSE9MRCAgICAgICAgICAgPSAweDAwMjUsCi0JQUNYX0VWRU5UX01CT1hfTUFTSyAgICAgICAgID0gMHgwMDI2LAotI2lmZGVmIEZXX1JVTk5JTkdfQVNfQVAKLQlBQ1hfRFRJTV9QRVJJT0QgICAgICAgICAgICAgPSAweDAwMjcsIC8qIGZvciBBUCBvbmx5ICovCi0jZWxzZQotCUFDWF9XUl9UQlRUX0FORF9EVElNICAgICAgICA9IDB4MDAyNywgLyogU1RBIG9ubHkgKi8KLSNlbmRpZgotCUFDWF9BQ0lfT1BUSU9OX0NGRyAgICAgICAgICA9IDB4MDAyOSwgLyogT0JTT0xFVEUgKGZvciAxMjUxKSovCi0JQUNYX0dQSU9fQ0ZHICAgICAgICAgICAgICAgID0gMHgwMDJBLCAvKiBOb3QgdXNlZCAqLwotCUFDWF9HUElPX1NFVCAgICAgICAgICAgICAgICA9IDB4MDAyQiwgLyogTm90IHVzZWQgKi8KLQlBQ1hfUE1fQ0ZHICAgICAgICAgICAgICAgICAgPSAweDAwMkMsIC8qIFRvIEJlIERvY3VtZW50ZWQgKi8KLQlBQ1hfQ09OTl9NT05JVF9QQVJBTVMgICAgICAgPSAweDAwMkQsCi0JQUNYX0FWRVJBR0VfUlNTSSAgICAgICAgICAgID0gMHgwMDJFLCAvKiBOb3QgdXNlZCAqLwotCUFDWF9DT05TX1RYX0ZBSUxVUkUgICAgICAgICA9IDB4MDAyRiwKLQlBQ1hfQkNOX0RUSU1fT1BUSU9OUyAgICAgICAgPSAweDAwMzEsCi0JQUNYX1NHX0VOQUJMRSAgICAgICAgICAgICAgID0gMHgwMDMyLAotCUFDWF9TR19DRkcgICAgICAgICAgICAgICAgICA9IDB4MDAzMywKLQlBQ1hfQU5URU5OQV9ESVZFUlNJVFlfQ0ZHICAgPSAweDAwMzUsIC8qIFRvIEJlIERvY3VtZW50ZWQgKi8KLQlBQ1hfTE9XX1NOUgkJICAgID0gMHgwMDM3LCAvKiBUbyBCZSBEb2N1bWVudGVkICovCi0JQUNYX0JFQUNPTl9GSUxURVJfVEFCTEUgICAgID0gMHgwMDM4LAotCUFDWF9BUlBfSVBfRklMVEVSICAgICAgICAgICA9IDB4MDAzOSwKLQlBQ1hfUk9BTUlOR19TVEFUSVNUSUNTX1RCTCAgPSAweDAwM0IsCi0JQUNYX1JBVEVfUE9MSUNZICAgICAgICAgICAgID0gMHgwMDNELAotCUFDWF9DVFNfUFJPVEVDVElPTiAgICAgICAgICA9IDB4MDAzRSwKLQlBQ1hfU0xFRVBfQVVUSCAgICAgICAgICAgICAgPSAweDAwM0YsCi0JQUNYX1BSRUFNQkxFX1RZUEUJICAgID0gMHgwMDQwLAotCUFDWF9FUlJPUl9DTlQgICAgICAgICAgICAgICA9IDB4MDA0MSwKLQlBQ1hfRldfR0VOX0ZSQU1FX1JBVEVTICAgICAgPSAweDAwNDIsCi0JQUNYX0lCU1NfRklMVEVSCQkgICAgPSAweDAwNDQsCi0JQUNYX1NFUlZJQ0VfUEVSSU9EX1RJTUVPVVQgID0gMHgwMDQ1LAotCUFDWF9UU0ZfSU5GTyAgICAgICAgICAgICAgICA9IDB4MDA0NiwKLQlBQ1hfQ09ORklHX1BTX1dNTSAgICAgICAgICAgPSAweDAwNDksCi0JQUNYX0VOQUJMRV9SWF9EQVRBX0ZJTFRFUiAgID0gMHgwMDRBLAotCUFDWF9TRVRfUlhfREFUQV9GSUxURVIgICAgICA9IDB4MDA0QiwKLQlBQ1hfR0VUX0RBVEFfRklMVEVSX1NUQVRJU1RJQ1MgPSAweDAwNEMsCi0JQUNYX1BPV0VSX0xFVkVMX1RBQkxFICAgICAgID0gMHgwMDRELAotCUFDWF9CRVRfRU5BQkxFICAgICAgICAgICAgICA9IDB4MDA1MCwKLQlET1QxMV9TVEFUSU9OX0lEICAgICAgICAgICAgPSAweDEwMDEsCi0JRE9UMTFfUlhfTVNEVV9MSUZFX1RJTUUgICAgID0gMHgxMDA0LAotCURPVDExX0NVUl9UWF9QV1IgICAgICAgICAgICA9IDB4MTAwRCwKLQlET1QxMV9ERUZBVUxUX0tFWSAgICAgICAgICAgPSAweDEwMTAsCi0JRE9UMTFfUlhfRE9UMTFfTU9ERSAgICAgICAgID0gMHgxMDEyLAotCURPVDExX1JUU19USFJFU0hPTEQgICAgICAgICA9IDB4MTAxMywKLQlET1QxMV9HUk9VUF9BRERSRVNTX1RCTCAgICAgPSAweDEwMTQsCi0KLQlNQVhfRE9UMTFfSUUgPSBET1QxMV9HUk9VUF9BRERSRVNTX1RCTCwKLQotCU1BWF9JRSA9IDB4RkZGRgotfTsKLQotCi1pbnQgd2wxMnh4X2FjeF9mcmFtZV9yYXRlcyhzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTggY3RybF9yYXRlLCB1OCBjdHJsX21vZCwKLQkJCSAgIHU4IG1ndF9yYXRlLCB1OCBtZ3RfbW9kKTsKLWludCB3bDEyeHhfYWN4X3N0YXRpb25faWQoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9hY3hfZGVmYXVsdF9rZXkoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGtleV9pZCk7Ci1pbnQgd2wxMnh4X2FjeF93YWtlX3VwX2NvbmRpdGlvbnMoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGxpc3Rlbl9pbnRlcnZhbCk7Ci1pbnQgd2wxMnh4X2FjeF9zbGVlcF9hdXRoKHN0cnVjdCB3bDEyeHggKndsLCB1OCBzbGVlcF9hdXRoKTsKLWludCB3bDEyeHhfYWN4X2Z3X3ZlcnNpb24oc3RydWN0IHdsMTJ4eCAqd2wsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7Ci1pbnQgd2wxMnh4X2FjeF90eF9wb3dlcihzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IHBvd2VyKTsKLWludCB3bDEyeHhfYWN4X2ZlYXR1cmVfY2ZnKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYWN4X21lbV9tYXAoc3RydWN0IHdsMTJ4eCAqd2wsIHZvaWQgKm1lbV9tYXAsIHNpemVfdCBsZW4pOwotaW50IHdsMTJ4eF9hY3hfZGF0YV9wYXRoX3BhcmFtcyhzdHJ1Y3Qgd2wxMnh4ICp3bCwKLQkJCQlzdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXNfcmVzcCAqZGF0YV9wYXRoKTsKLWludCB3bDEyeHhfYWN4X3J4X21zZHVfbGlmZV90aW1lKHN0cnVjdCB3bDEyeHggKndsLCB1MzIgbGlmZV90aW1lKTsKLWludCB3bDEyeHhfYWN4X3J4X2NvbmZpZyhzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTMyIGNvbmZpZywgdTMyIGZpbHRlcik7Ci1pbnQgd2wxMnh4X2FjeF9wZF90aHJlc2hvbGQoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9hY3hfc2xvdChzdHJ1Y3Qgd2wxMnh4ICp3bCwgZW51bSBhY3hfc2xvdF90eXBlIHNsb3RfdGltZSk7Ci1pbnQgd2wxMnh4X2FjeF9ncm91cF9hZGRyZXNzX3RibChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2FjeF9zZXJ2aWNlX3BlcmlvZF90aW1lb3V0KHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYWN4X3J0c190aHJlc2hvbGQoc3RydWN0IHdsMTJ4eCAqd2wsIHUxNiBydHNfdGhyZXNob2xkKTsKLWludCB3bDEyeHhfYWN4X2JlYWNvbl9maWx0ZXJfb3B0KHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYWN4X2JlYWNvbl9maWx0ZXJfdGFibGUoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9hY3hfc2dfZW5hYmxlKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYWN4X3NnX2NmZyhzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2FjeF9jY2FfdGhyZXNob2xkKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYWN4X2Jjbl9kdGltX29wdGlvbnMoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9hY3hfYWlkKHN0cnVjdCB3bDEyeHggKndsLCB1MTYgYWlkKTsKLWludCB3bDEyeHhfYWN4X2V2ZW50X21ib3hfbWFzayhzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTMyIGV2ZW50X21hc2spOwotaW50IHdsMTJ4eF9hY3hfc2V0X3ByZWFtYmxlKHN0cnVjdCB3bDEyeHggKndsLCBlbnVtIGFjeF9wcmVhbWJsZV90eXBlIHByZWFtYmxlKTsKLWludCB3bDEyeHhfYWN4X2N0c19wcm90ZWN0KHN0cnVjdCB3bDEyeHggKndsLAotCQkJICAgIGVudW0gYWN4X2N0c3Byb3RlY3RfdHlwZSBjdHNwcm90ZWN0KTsKLWludCB3bDEyeHhfYWN4X3N0YXRpc3RpY3Moc3RydWN0IHdsMTJ4eCAqd2wsIHN0cnVjdCBhY3hfc3RhdGlzdGljcyAqc3RhdHMpOwotCi0jZW5kaWYgLyogX19XTDEyWFhfQUNYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2Jvb3QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ib290LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YWMwOGMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2Jvb3QuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAiYm9vdC5oIgotI2luY2x1ZGUgInNwaS5oIgotI2luY2x1ZGUgImV2ZW50LmgiCi0KLXN0YXRpYyB2b2lkIHdsMTJ4eF9ib290X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyeHggKndsKQotewotCWVuYWJsZV9pcnEod2wtPmlycSk7Ci19Ci0KLXZvaWQgd2wxMnh4X2Jvb3RfdGFyZ2V0X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyeHggKndsKQotewotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywgfih3bC0+aW50cl9tYXNrKSk7Ci0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBISV9DRkcsIEhJX0NGR19ERUZfVkFMKTsKLX0KLQotaW50IHdsMTJ4eF9ib290X3NvZnRfcmVzZXQoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCXUzMiBib290X2RhdGE7Ci0KLQkvKiBwZXJmb3JtIHNvZnQgcmVzZXQgKi8KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfU0xWX1NPRlRfUkVTRVQsIEFDWF9TTFZfU09GVF9SRVNFVF9CSVQpOwotCi0JLyogU09GVF9SRVNFVCBpcyBzZWxmIGNsZWFyaW5nICovCi0JdGltZW91dCA9IGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKFNPRlRfUkVTRVRfTUFYX1RJTUUpOwotCXdoaWxlICgxKSB7Ci0JCWJvb3RfZGF0YSA9IHdsMTJ4eF9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX1NMVl9TT0ZUX1JFU0VUKTsKLQkJd2wxMnh4X2RlYnVnKERFQlVHX0JPT1QsICJzb2Z0IHJlc2V0IGJvb3RkYXRhIDB4JXgiLCBib290X2RhdGEpOwotCQlpZiAoKGJvb3RfZGF0YSAmIEFDWF9TTFZfU09GVF9SRVNFVF9CSVQpID09IDApCi0JCQlicmVhazsKLQotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJLyogMS4yIGNoZWNrIHBXaGFsQnVzLT51U2VsZkNsZWFyVGltZSBpZiB0aGUKLQkJCSAqIHRpbWVvdXQgd2FzIHJlYWNoZWQgKi8KLQkJCXdsMTJ4eF9lcnJvcigic29mdCByZXNldCB0aW1lb3V0Iik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQl1ZGVsYXkoU09GVF9SRVNFVF9TVEFMTF9USU1FKTsKLQl9Ci0KLQkvKiBkaXNhYmxlIFJ4L1R4ICovCi0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBFTkFCTEUsIDB4MCk7Ci0KLQkvKiBkaXNhYmxlIGF1dG8gY2FsaWJyYXRpb24gb24gc3RhcnQqLwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgU1BBUkVfQTIsIDB4ZmZmZik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9ib290X2luaXRfc2VxKHN0cnVjdCB3bDEyeHggKndsKQotewotCXUzMiBzY3JfcGFkNiwgaW5pdF9kYXRhLCB0bXAsIGVscF9jbWQsIHJlZl9mcmVxOwotCi0JLyoKLQkgKiBjb2wgIzE6IElOVEVHRVJfRElWSURFUgotCSAqIGNvbCAjMjogRlJBQ1RJT05BTF9ESVZJREVSCi0JICogY29sICMzOiBBVFROX0JCCi0JICogY29sICM0OiBBTFBIQV9CQgotCSAqIGNvbCAjNTogU1RPUF9USU1FX0JCCi0JICogY29sICM2OiBCQl9QTExfTE9PUF9GSUxURVIKLQkgKi8KLQlzdGF0aWMgY29uc3QgdTMyIExVVFtSRUZfRlJFUV9OVU1dW0xVVF9QQVJBTV9OVU1dID0gewotCi0JCXsgICA4MywgODczODEsICAweEIsIDUsIDB4RjAwLCAgM30sIC8qIFJFRl9GUkVRXzE5XzIqLwotCQl7ICAgNjEsIDE0MTE1NCwgMHhCLCA1LCAweDE0NTAsIDJ9LCAvKiBSRUZfRlJFUV8yNl8wKi8KLQkJeyAgIDQxLCAxNzQ3NjMsIDB4QywgNiwgMHgyRDAwLCAxfSwgLyogUkVGX0ZSRVFfMzhfNCovCi0JCXsgICA0MCwgMCwgICAgICAweEMsIDYsIDB4MkVFMCwgMX0sIC8qIFJFRl9GUkVRXzQwXzAqLwotCQl7ICAgNDcsIDE2MjI4MCwgMHhDLCA2LCAweDI3NjAsIDF9ICAvKiBSRUZfRlJFUV8zM182ICAgICAgICAqLwotCX07Ci0KLQkvKiByZWFkIE5WUyBwYXJhbXMgKi8KLQlzY3JfcGFkNiA9IHdsMTJ4eF9yZWdfcmVhZDMyKHdsLCBTQ1JfUEFENik7Ci0Jd2wxMnh4X2RlYnVnKERFQlVHX0JPT1QsICJzY3JfcGFkNiAweCV4Iiwgc2NyX3BhZDYpOwotCi0JLyogcmVhZCBFTFBfQ01EICovCi0JZWxwX2NtZCA9IHdsMTJ4eF9yZWdfcmVhZDMyKHdsLCBFTFBfQ01EKTsKLQl3bDEyeHhfZGVidWcoREVCVUdfQk9PVCwgImVscF9jbWQgMHgleCIsIGVscF9jbWQpOwotCi0JLyogc2V0IHRoZSBCQiBjYWxpYnJhdGlvbiB0aW1lIHRvIGJlIDMwMCB1c2VjIChQTExfQ0FMX1RJTUUpICovCi0JcmVmX2ZyZXEgPSBzY3JfcGFkNiAmIDB4MDAwMDAwRkY7Ci0Jd2wxMnh4X2RlYnVnKERFQlVHX0JPT1QsICJyZWZfZnJlcSAweCV4IiwgcmVmX2ZyZXEpOwotCi0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBQTExfQ0FMX1RJTUUsIDB4OSk7Ci0KLQkvKgotCSAqIFBHIDEuMjogc2V0IHRoZSBjbG9jayBidWZmZXIgdGltZSB0byBiZSAyMTAgdXNlYyAoQ0xLX0JVRl9USU1FKQotCSAqLwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgQ0xLX0JVRl9USU1FLCAweDYpOwotCi0JLyoKLQkgKiBzZXQgdGhlIGNsb2NrIGRldGVjdCBmZWF0dXJlIHRvIHdvcmsgaW4gdGhlIHJlc3RhcnQgd3UgcHJvY2VkdXJlCi0JICogKEVMUF9DRkdfTU9ERVsxNF0pIGFuZCBTZWxlY3QgdGhlIGNsb2NrIHNvdXJjZSB0eXBlCi0JICogKEVMUF9DRkdfTU9ERVsxMzoxMl0pCi0JICovCi0JdG1wID0gKChzY3JfcGFkNiAmIDB4MDAwMEZGMDApIDw8IDQpIHwgMHgwMDAwNDAwMDsKLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIEVMUF9DRkdfTU9ERSwgdG1wKTsKLQotCS8qIFBHIDEuMjogZW5hYmxlIHRoZSBCQiBQTEwgZml4LiBFbmFibGUgdGhlIFBMTF9MSU1QX0NMS19FTl9DTUQgKi8KLQllbHBfY21kIHw9IDB4MDAwMDAwNDA7Ci0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBFTFBfQ01ELCBlbHBfY21kKTsKLQotCS8qIFBHIDEuMjogU2V0IHRoZSBCQiBQTEwgc3RhYmxlIHRpbWUgdG8gYmUgMTAwMHVzZWMKLQkgKiAoUExMX1NUQUJMRV9USU1FKSAqLwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgQ0ZHX1BMTF9TWU5DX0NOVCwgMHgyMCk7Ci0KLQkvKiBQRyAxLjI6IHJlYWQgY2xvY2sgcmVxdWVzdCB0aW1lICovCi0JaW5pdF9kYXRhID0gd2wxMnh4X3JlZ19yZWFkMzIod2wsIENMS19SRVFfVElNRSk7Ci0KLQkvKgotCSAqIFBHIDEuMjogc2V0IHRoZSBjbG9jayByZXF1ZXN0IHRpbWUgdG8gYmUgcmVmX2Nsa19zZXR0bGluZ190aW1lIC0KLQkgKiAxbXMgPSA0bXMKLQkgKi8KLQlpZiAoaW5pdF9kYXRhID4gMHgyMSkKLQkJdG1wID0gaW5pdF9kYXRhIC0gMHgyMTsKLQllbHNlCi0JCXRtcCA9IDA7Ci0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBDTEtfUkVRX1RJTUUsIHRtcCk7Ci0KLQkvKiBzZXQgQkIgUExMIGNvbmZpZ3VyYXRpb25zIGluIFJGIEFGRSAqLwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgMHgwMDMwNThjYywgMHg0QjUpOwotCi0JLyogc2V0IFJGX0FGRV9SRUdfNSAqLwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgMHgwMDMwNThkNCwgMHg1MCk7Ci0KLQkvKiBzZXQgUkZfQUZFX0NUUkxfUkVHXzIgKi8KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU5NDgsIDB4MTFjMDAxKTsKLQotCS8qCi0JICogY2hhbmdlIFJGIFBMTCBhbmQgQkIgUExMIGRpdmlkZXIgZm9yIFZDTyBjbG9jayBhbmQgYWRqdXN0IFZDTwotCSAqIGJhaXMgY3VycmVudChSRl9BRkVfUkVHXzEzKQotCSAqLwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgMHgwMDMwNThmNCwgMHgxZSk7Ci0KLQkvKiBzZXQgQkIgUExMIGNvbmZpZ3VyYXRpb25zICovCi0JdG1wID0gTFVUW3JlZl9mcmVxXVtMVVRfUEFSQU1fSU5URUdFUl9ESVZJREVSXSB8IDB4MDAwMTcwMDA7Ci0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCAweDAwMzA1ODQwLCB0bXApOwotCi0JLyogc2V0IGZyYWN0aW9uYWwgZGl2aWRlciBhY2NvcmRpbmcgdG8gQXBwZW5kaXggQy1CQiBQTEwKLQkgKiBDYWxjdWxhdGlvbnMKLQkgKi8KLQl0bXAgPSBMVVRbcmVmX2ZyZXFdW0xVVF9QQVJBTV9GUkFDVElPTkFMX0RJVklERVJdOwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgMHgwMDMwNTg0NCwgdG1wKTsKLQotCS8qIHNldCB0aGUgaW5pdGlhbCBkYXRhIGZvciB0aGUgc2lnbWEgZGVsdGEgKi8KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4NDgsIDB4MzAzOSk7Ci0KLQkvKgotCSAqIHNldCB0aGUgYWNjdW11bGF0b3IgYXR0ZW51YXRpb24gdmFsdWUsIGNhbGlicmF0aW9uIGxvb3AxCi0JICogKGFscGhhKSwgY2FsaWJyYXRpb24gbG9vcDIgKGJldGEpLCBjYWxpYnJhdGlvbiBsb29wMyAoZ2FtbWEpIGFuZAotCSAqIHRoZSBWQ08gZ2FpbgotCSAqLwotCXRtcCA9IChMVVRbcmVmX2ZyZXFdW0xVVF9QQVJBTV9BVFROX0JCXSA8PCAxNikgfAotCQkoTFVUW3JlZl9mcmVxXVtMVVRfUEFSQU1fQUxQSEFfQkJdIDw8IDEyKSB8IDB4MTsKLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4NTQsIHRtcCk7Ci0KLQkvKgotCSAqIHNldCB0aGUgY2FsaWJyYXRpb24gc3RvcCB0aW1lIGFmdGVyIGhvbGRvZmYgdGltZSBleHBpcmVzIGFuZCBzZXQKLQkgKiBzZXR0bGluZyB0aW1lIEhPTERfT0ZGX1RJTUVfQkIKLQkgKi8KLQl0bXAgPSBMVVRbcmVmX2ZyZXFdW0xVVF9QQVJBTV9TVE9QX1RJTUVfQkJdIHwgMHgwMDBBMDAwMDsKLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4NTgsIHRtcCk7Ci0KLQkvKgotCSAqIHNldCBCQiBQTEwgTG9vcCBmaWx0ZXIgY2FwYWNpdG9yMy0gQkJfQzNbMjowXSBhbmQgc2V0IEJCIFBMTAotCSAqIGNvbnN0YW50IGxlYWthZ2UgY3VycmVudCB0byBsaW5lYXJpemUgUEZEIHRvIDB1QSAtCi0JICogQkJfSUxPT1BGWzc6M10KLQkgKi8KLQl0bXAgPSBMVVRbcmVmX2ZyZXFdW0xVVF9QQVJBTV9CQl9QTExfTE9PUF9GSUxURVJdIHwgMHgwMDAwMDAzMDsKLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4ZjgsIHRtcCk7Ci0KLQkvKgotCSAqIHNldCByZWd1bGF0b3Igb3V0cHV0IHZvbHRhZ2UgZm9yIG4gZGl2aWRlciB0bwotCSAqIDEuMzUtQkJfUkVGRElWWzE6MF0sIHNldCBjaGFyZ2UgcHVtcCBjdXJyZW50LSBCQl9DUEdBSU5bNDoyXSwKLQkgKiBzZXQgQkIgUExMIExvb3AgZmlsdGVyIGNhcGFjaXRvcjItIEJCX0MyWzc6NV0sIHNldCBnYWluIG9mIEJCCi0JICogUExMIGF1dG8tY2FsbCB0byBub3JtYWwgbW9kZS0gQkJfQ0FMR0FJTl8zREJbOF0KLQkgKi8KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4ZjAsIDB4MjkpOwotCi0JLyogZW5hYmxlIHJlc3RhcnQgd2FrZXVwIHNlcXVlbmNlIChFTFBfQ01EWzBdKSAqLwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgRUxQX0NNRCwgZWxwX2NtZCB8IDB4MSk7Ci0KLQkvKiByZXN0YXJ0IHNlcXVlbmNlIGNvbXBsZXRlZCAqLwotCXVkZWxheSgyMDAwKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2Jvb3RfcnVuX2Zpcm13YXJlKHN0cnVjdCB3bDEyeHggKndsKQotewotCWludCBsb29wLCByZXQ7Ci0JdTMyIGNoaXBfaWQsIGludGVycnVwdDsKLQotCXdsLT5jaGlwLm9wX3NldF9lY3B1X2N0cmwod2wsIEVDUFVfQ09OVFJPTF9IQUxUKTsKLQotCWNoaXBfaWQgPSB3bDEyeHhfcmVnX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCBhZnRlciBmaXJtd2FyZSBib290OiAweCV4IiwgY2hpcF9pZCk7Ci0KLQlpZiAoY2hpcF9pZCAhPSB3bC0+Y2hpcC5pZCkgewotCQl3bDEyeHhfZXJyb3IoImNoaXAgaWQgZG9lc24ndCBtYXRjaCBhZnRlciBmaXJtd2FyZSBib290Iik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIHdhaXQgZm9yIGluaXQgdG8gY29tcGxldGUgKi8KLQlsb29wID0gMDsKLQl3aGlsZSAobG9vcCsrIDwgSU5JVF9MT09QKSB7Ci0JCXVkZWxheShJTklUX0xPT1BfREVMQVkpOwotCQlpbnRlcnJ1cHQgPSB3bDEyeHhfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOwotCi0JCWlmIChpbnRlcnJ1cHQgPT0gMHhmZmZmZmZmZikgewotCQkJd2wxMnh4X2Vycm9yKCJlcnJvciByZWFkaW5nIGhhcmR3YXJlIGNvbXBsZXRlICIKLQkJCQkgICAgICJpbml0IGluZGljYXRpb24iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCS8qIGNoZWNrIHRoYXQgQUNYX0lOVFJfSU5JVF9DT01QTEVURSBpcyBlbmFibGVkICovCi0JCWVsc2UgaWYgKGludGVycnVwdCAmIHdsLT5jaGlwLmludHJfaW5pdF9jb21wbGV0ZSkgewotCQkJd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9BQ0ssCi0JCQkJCSAgIHdsLT5jaGlwLmludHJfaW5pdF9jb21wbGV0ZSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChsb29wID49IElOSVRfTE9PUCkgewotCQl3bDEyeHhfZXJyb3IoInRpbWVvdXQgd2FpdGluZyBmb3IgdGhlIGhhcmR3YXJlIHRvICIKLQkJCSAgICAgImNvbXBsZXRlIGluaXRpYWxpemF0aW9uIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIGdldCBoYXJkd2FyZSBjb25maWcgY29tbWFuZCBtYWlsIGJveCAqLwotCXdsLT5jbWRfYm94X2FkZHIgPSB3bDEyeHhfcmVnX3JlYWQzMih3bCwgUkVHX0NPTU1BTkRfTUFJTEJPWF9QVFIpOwotCi0JLyogZ2V0IGhhcmR3YXJlIGNvbmZpZyBldmVudCBtYWlsIGJveCAqLwotCXdsLT5ldmVudF9ib3hfYWRkciA9IHdsMTJ4eF9yZWdfcmVhZDMyKHdsLCBSRUdfRVZFTlRfTUFJTEJPWF9QVFIpOwotCi0JLyogc2V0IHRoZSB3b3JraW5nIHBhcnRpdGlvbiB0byBpdHMgInJ1bm5pbmciIG1vZGUgb2Zmc2V0ICovCi0Jd2wxMnh4X3NldF9wYXJ0aXRpb24od2wsCi0JCQkgICAgIHdsLT5jaGlwLnBfdGFibGVbUEFSVF9XT1JLXS5tZW0uc3RhcnQsCi0JCQkgICAgIHdsLT5jaGlwLnBfdGFibGVbUEFSVF9XT1JLXS5tZW0uc2l6ZSwKLQkJCSAgICAgd2wtPmNoaXAucF90YWJsZVtQQVJUX1dPUktdLnJlZy5zdGFydCwKLQkJCSAgICAgd2wtPmNoaXAucF90YWJsZVtQQVJUX1dPUktdLnJlZy5zaXplKTsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19NQUlMQk9YLCAiY21kX2JveF9hZGRyIDB4JXggZXZlbnRfYm94X2FkZHIgMHgleCIsCi0JCSAgICAgd2wtPmNtZF9ib3hfYWRkciwgd2wtPmV2ZW50X2JveF9hZGRyKTsKLQotCS8qCi0JICogaW4gY2FzZSBvZiBmdWxsIGFzeW5jaHJvbm91cyBtb2RlIHRoZSBmaXJtd2FyZSBldmVudCBtdXN0IGJlCi0JICogcmVhZHkgdG8gcmVjZWl2ZSBldmVudCBmcm9tIHRoZSBjb21tYW5kIG1haWxib3gKLQkgKi8KLQotCS8qIGVuYWJsZSBncGlvIGludGVycnVwdHMgKi8KLQl3bDEyeHhfYm9vdF9lbmFibGVfaW50ZXJydXB0cyh3bCk7Ci0KLQl3bC0+Y2hpcC5vcF90YXJnZXRfZW5hYmxlX2ludGVycnVwdHMod2wpOwotCi0JLyogdW5tYXNrIGFsbCBtYm94IGV2ZW50cyAgKi8KLQl3bC0+ZXZlbnRfbWFzayA9IDB4ZmZmZmZmZmY7Ci0KLQlyZXQgPSB3bDEyeHhfZXZlbnRfdW5tYXNrKHdsKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoIkVWRU5UIG1hc2sgc2V0dGluZyBmYWlsZWQiKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQl3bDEyeHhfZXZlbnRfbWJveF9jb25maWcod2wpOwotCi0JLyogZmlybXdhcmUgc3RhcnR1cCBjb21wbGV0ZWQgKi8KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ib290LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYm9vdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmE3MzEzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ib290LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fQk9PVF9IX18KLSNkZWZpbmUgX19CT09UX0hfXwotCi0jaW5jbHVkZSAid2wxMnh4LmgiCi0KLWludCB3bDEyeHhfYm9vdF9zb2Z0X3Jlc2V0KHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYm9vdF9pbml0X3NlcShzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2Jvb3RfcnVuX2Zpcm13YXJlKHN0cnVjdCB3bDEyeHggKndsKTsKLXZvaWQgd2wxMnh4X2Jvb3RfdGFyZ2V0X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyeHggKndsKTsKLQotLyogbnVtYmVyIG9mIHRpbWVzIHdlIHRyeSB0byByZWFkIHRoZSBJTklUIGludGVycnVwdCAqLwotI2RlZmluZSBJTklUX0xPT1AgMjAwMDAKLQotLyogZGVsYXkgYmV0d2VlbiByZXRyaWVzICovCi0jZGVmaW5lIElOSVRfTE9PUF9ERUxBWSA1MAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jbWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczYWI2MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTMgKzAsMCBAQAotI2luY2x1ZGUgImNtZC5oIgotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjNy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQotI2luY2x1ZGUgIndsMTJ4eC5oIgotI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgotI2luY2x1ZGUgInJlZy5oIgotI2luY2x1ZGUgInNwaS5oIgotI2luY2x1ZGUgInBzLmgiCi0KLWludCB3bDEyeHhfY21kX3NlbmQoc3RydWN0IHdsMTJ4eCAqd2wsIHUxNiB0eXBlLCB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuKQotewotCXN0cnVjdCB3bDEyeHhfY29tbWFuZCBjbWQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCXNpemVfdCBjbWRfbGVuOwotCXUzMiBpbnRyOwotCWludCByZXQgPSAwOwotCi0JbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKLQljbWQuaWQgPSB0eXBlOwotCWNtZC5zdGF0dXMgPSAwOwotCW1lbWNweShjbWQucGFyYW1ldGVycywgYnVmLCBidWZfbGVuKTsKLQljbWRfbGVuID0gQUxJR04oYnVmX2xlbiwgNCkgKyBDTURNQk9YX0hFQURFUl9MRU47Ci0KLQl3bDEyeHhfcHNfZWxwX3dha2V1cCh3bCk7Ci0KLQl3bDEyeHhfc3BpX21lbV93cml0ZSh3bCwgd2wtPmNtZF9ib3hfYWRkciwgJmNtZCwgY21kX2xlbik7Ci0KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX1RSSUcsIElOVFJfVFJJR19DTUQpOwotCi0JdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFdMMTJYWF9DT01NQU5EX1RJTUVPVVQpOwotCi0JaW50ciA9IHdsMTJ4eF9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9OT19DTEVBUik7Ci0Jd2hpbGUgKCEoaW50ciAmIHdsLT5jaGlwLmludHJfY21kX2NvbXBsZXRlKSkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJd2wxMnh4X2Vycm9yKCJjb21tYW5kIGNvbXBsZXRlIHRpbWVvdXQiKTsKLQkJCXJldCA9IC1FVElNRURPVVQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCW1zbGVlcCgxKTsKLQotCQlpbnRyID0gd2wxMnh4X3JlZ19yZWFkMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSKTsKLQl9Ci0KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX0FDSywKLQkJCSAgIHdsLT5jaGlwLmludHJfY21kX2NvbXBsZXRlKTsKLQotb3V0OgotCXdsMTJ4eF9wc19lbHBfc2xlZXAod2wpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdsMTJ4eF9jbWRfdGVzdChzdHJ1Y3Qgd2wxMnh4ICp3bCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbiwgdTggYW5zd2VyKQotewotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQ01ELCAiY21kIHRlc3QiKTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfc2VuZCh3bCwgQ01EX1RFU1QsIGJ1ZiwgYnVmX2xlbik7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoIlRFU1QgY29tbWFuZCBmYWlsZWQiKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoYW5zd2VyKSB7Ci0JCXN0cnVjdCB3bDEyeHhfY29tbWFuZCAqY21kX2Fuc3dlcjsKLQotCQkvKgotCQkgKiBUaGUgdGVzdCBjb21tYW5kIGdvdCBpbiwgd2UgY2FuIHJlYWQgdGhlIGFuc3dlci4KLQkJICogVGhlIGFuc3dlciB3b3VsZCBiZSBhIHdsMTJ4eF9jb21tYW5kLCB3aGVyZSB0aGUKLQkJICogcGFyYW1ldGVyIGFycmF5IGNvbnRhaW5zIHRoZSBhY3R1YWwgYW5zd2VyLgotCQkgKi8KLQotCQl3bDEyeHhfcHNfZWxwX3dha2V1cCh3bCk7Ci0KLQkJd2wxMnh4X3NwaV9tZW1fcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwgYnVmLCBidWZfbGVuKTsKLQotCQl3bDEyeHhfcHNfZWxwX3NsZWVwKHdsKTsKLQotCQljbWRfYW5zd2VyID0gYnVmOwotCQlpZiAoY21kX2Fuc3dlci0+c3RhdHVzICE9IENNRF9TVEFUVVNfU1VDQ0VTUykKLQkJCXdsMTJ4eF9lcnJvcigiVEVTVCBjb21tYW5kIGFuc3dlciBlcnJvcjogJWQiLAotCQkJCSAgICAgY21kX2Fuc3dlci0+c3RhdHVzKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgd2wxMnh4X2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTE2IGllX2lkLCB1MTYgaWVfbGVuLAotCQkJICAgdm9pZCAqYW5zd2VyKQotewotCXN0cnVjdCB3bDEyeHhfY29tbWFuZCAqY21kOwotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0NNRCwgImNtZCBpbnRlcnJvZ2F0ZSIpOwotCi0JaGVhZGVyLmlkID0gaWVfaWQ7Ci0JaGVhZGVyLmxlbiA9IGllX2xlbiAtIHNpemVvZihoZWFkZXIpOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9zZW5kKHdsLCBDTURfSU5URVJST0dBVEUsICZoZWFkZXIsIHNpemVvZihoZWFkZXIpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoIklOVEVSUk9HQVRFIGNvbW1hbmQgZmFpbGVkIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jd2wxMnh4X3BzX2VscF93YWtldXAod2wpOwotCi0JLyogdGhlIGludGVycm9nYXRlIGNvbW1hbmQgZ290IGluLCB3ZSBjYW4gcmVhZCB0aGUgYW5zd2VyICovCi0Jd2wxMnh4X3NwaV9tZW1fcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwgYW5zd2VyLAotCQkJICAgIENNRE1CT1hfSEVBREVSX0xFTiArIGllX2xlbik7Ci0KLQl3bDEyeHhfcHNfZWxwX3NsZWVwKHdsKTsKLQotCWNtZCA9IGFuc3dlcjsKLQlpZiAoY21kLT5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKQotCQl3bDEyeHhfZXJyb3IoIklOVEVSUk9HQVRFIGNvbW1hbmQgZXJyb3I6ICVkIiwKLQkJCSAgICAgY21kLT5zdGF0dXMpOwotCi0JcmV0dXJuIDA7Ci0KLX0KLQotaW50IHdsMTJ4eF9jbWRfY29uZmlndXJlKHN0cnVjdCB3bDEyeHggKndsLCB2b2lkICppZSwgaW50IGllX2xlbikKLXsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0NNRCwgImNtZCBjb25maWd1cmUiKTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfc2VuZCh3bCwgQ01EX0NPTkZJR1VSRSwgaWUsCi0JCQkgICAgICBpZV9sZW4pOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJDT05GSUdVUkUgY29tbWFuZCBOT0siKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotfQotCi1pbnQgd2wxMnh4X2NtZF92Ym0oc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGlkZW50aXR5LAotCQkgICB2b2lkICpiaXRtYXAsIHUxNiBiaXRtYXBfbGVuLCB1OCBiaXRtYXBfY29udHJvbCkKLXsKLQlzdHJ1Y3QgdmJtX3VwZGF0ZV9yZXF1ZXN0IHZibTsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0NNRCwgImNtZCB2Ym0iKTsKLQotCS8qIENvdW50IGFuZCBwZXJpb2Qgd2lsbCBiZSBmaWxsZWQgYnkgdGhlIHRhcmdldCAqLwotCXZibS50aW0uYml0bWFwX2N0cmwgPSBiaXRtYXBfY29udHJvbDsKLQlpZiAoYml0bWFwX2xlbiA+IFBBUlRJQUxfVkJNX01BWCkgewotCQl3bDEyeHhfd2FybmluZygiY21kIHZibSBsZW4gaXMgJWQgQiwgdHJ1bmNhdGluZyB0byAlZCIsCi0JCQkgICAgICAgYml0bWFwX2xlbiwgUEFSVElBTF9WQk1fTUFYKTsKLQkJYml0bWFwX2xlbiA9IFBBUlRJQUxfVkJNX01BWDsKLQl9Ci0JbWVtY3B5KHZibS50aW0ucHZiX2ZpZWxkLCBiaXRtYXAsIGJpdG1hcF9sZW4pOwotCXZibS50aW0uaWRlbnRpdHkgPSBpZGVudGl0eTsKLQl2Ym0udGltLmxlbmd0aCA9IGJpdG1hcF9sZW4gKyAzOwotCi0JdmJtLmxlbiA9IGNwdV90b19sZTE2KGJpdG1hcF9sZW4gKyA1KTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfc2VuZCh3bCwgQ01EX1ZCTSwgJnZibSwgc2l6ZW9mKHZibSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigiVkJNIGNvbW1hbmQgZmFpbGVkIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfY21kX2RhdGFfcGF0aChzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTggY2hhbm5lbCwgdTggZW5hYmxlKQotewotCWludCByZXQ7Ci0JdTE2IGNtZF9yeCwgY21kX3R4OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0NNRCwgImNtZCBkYXRhIHBhdGgiKTsKLQotCWlmIChlbmFibGUpIHsKLQkJY21kX3J4ID0gQ01EX0VOQUJMRV9SWDsKLQkJY21kX3R4ID0gQ01EX0VOQUJMRV9UWDsKLQl9IGVsc2UgewotCQljbWRfcnggPSBDTURfRElTQUJMRV9SWDsKLQkJY21kX3R4ID0gQ01EX0RJU0FCTEVfVFg7Ci0JfQotCi0JcmV0ID0gd2wxMnh4X2NtZF9zZW5kKHdsLCBjbWRfcngsICZjaGFubmVsLCBzaXplb2YoY2hhbm5lbCkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigicnggJXMgY21kIGZvciBjaGFubmVsICVkIGZhaWxlZCIsCi0JCQkgICAgIGVuYWJsZSA/ICJzdGFydCIgOiAic3RvcCIsIGNoYW5uZWwpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19CT09ULCAicnggJXMgY21kIGNoYW5uZWwgJWQiLAotCQkgICAgIGVuYWJsZSA/ICJzdGFydCIgOiAic3RvcCIsIGNoYW5uZWwpOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9zZW5kKHdsLCBjbWRfdHgsICZjaGFubmVsLCBzaXplb2YoY2hhbm5lbCkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigidHggJXMgY21kIGZvciBjaGFubmVsICVkIGZhaWxlZCIsCi0JCQkgICAgIGVuYWJsZSA/ICJzdGFydCIgOiAic3RvcCIsIGNoYW5uZWwpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19CT09ULCAidHggJXMgY21kIGNoYW5uZWwgJWQiLAotCQkgICAgIGVuYWJsZSA/ICJzdGFydCIgOiAic3RvcCIsIGNoYW5uZWwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfY21kX2pvaW4oc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGJzc190eXBlLCB1OCBkdGltX2ludGVydmFsLAotCQkgICAgdTE2IGJlYWNvbl9pbnRlcnZhbCwgdTggd2FpdCkKLXsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0Jc3RydWN0IGNtZF9qb2luIGpvaW4gPSB7fTsKLQlpbnQgcmV0LCBpOwotCXU4ICpic3NpZDsKLQotCS8qIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBpbiBtYWluLmMgKi8KLQlyZXQgPSB3bDEyeHhfYWN4X2ZyYW1lX3JhdGVzKHdsLCBERUZBVUxUX0hXX0dFTl9UWF9SQVRFLAotCQkJCSAgICAgREVGQVVMVF9IV19HRU5fTU9EVUxBVElPTl9UWVBFLAotCQkJCSAgICAgd2wtPnR4X21nbXRfZnJtX3JhdGUsCi0JCQkJICAgICB3bC0+dHhfbWdtdF9mcm1fbW9kKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19DTUQsICJjbWQgam9pbiIpOwotCi0JLyogUmV2ZXJzZSBvcmRlciBCU1NJRCAqLwotCWJzc2lkID0gKHU4ICopJmpvaW4uYnNzaWRfbHNiOwotCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQotCQlic3NpZFtpXSA9IHdsLT5ic3NpZFtFVEhfQUxFTiAtIGkgLSAxXTsKLQotCWpvaW4ucnhfY29uZmlnX29wdGlvbnMgPSB3bC0+cnhfY29uZmlnOwotCWpvaW4ucnhfZmlsdGVyX29wdGlvbnMgPSB3bC0+cnhfZmlsdGVyOwotCi0Jam9pbi5iYXNpY19yYXRlX3NldCA9IFJBVEVfTUFTS18xTUJQUyB8IFJBVEVfTUFTS18yTUJQUyB8Ci0JCVJBVEVfTUFTS181XzVNQlBTIHwgUkFURV9NQVNLXzExTUJQUzsKLQotCWpvaW4uYmVhY29uX2ludGVydmFsID0gYmVhY29uX2ludGVydmFsOwotCWpvaW4uZHRpbV9pbnRlcnZhbCA9IGR0aW1faW50ZXJ2YWw7Ci0Jam9pbi5ic3NfdHlwZSA9IGJzc190eXBlOwotCWpvaW4uY2hhbm5lbCA9IHdsLT5jaGFubmVsOwotCWpvaW4uY3RybCA9IEpPSU5fQ01EX0NUUkxfVFhfRkxVU0g7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX3NlbmQod2wsIENNRF9TVEFSVF9KT0lOLCAmam9pbiwgc2l6ZW9mKGpvaW4pKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoImZhaWxlZCB0byBpbml0aWF0ZSBjbWQgam9pbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEpPSU5fVElNRU9VVCk7Ci0KLQkvKgotCSAqIHVnbHkgaGFjazogd2Ugc2hvdWxkIHdhaXQgZm9yIEpPSU5fRVZFTlRfQ09NUExFVEVfSUQgYnV0IHRvCi0JICogc2ltcGxpZnkgbG9ja2luZyB3ZSBqdXN0IHNsZWVwIGluc3RlYWQsIGZvciBub3cKLQkgKi8KLQlpZiAod2FpdCkKLQkJbXNsZWVwKDEwKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2NtZF9wc19tb2RlKHN0cnVjdCB3bDEyeHggKndsLCB1OCBwc19tb2RlKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGFjeF9wc19wYXJhbXMgcHNfcGFyYW1zOwotCi0JLyogRklYTUU6IHRoaXMgc2hvdWxkIGJlIGluIHBzLmMgKi8KLQlyZXQgPSB3bDEyeHhfYWN4X3dha2VfdXBfY29uZGl0aW9ucyh3bCwgd2wtPmxpc3Rlbl9pbnQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigiQ291bGRudCBzZXQgd2FrZSB1cCBjb25kaXRpb25zIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0NNRCwgImNtZCBzZXQgcHMgbW9kZSIpOwotCi0JcHNfcGFyYW1zLnBzX21vZGUgPSBwc19tb2RlOwotCXBzX3BhcmFtcy5zZW5kX251bGxfZGF0YSA9IDE7Ci0JcHNfcGFyYW1zLnJldHJpZXMgPSA1OwotCXBzX3BhcmFtcy5oYW5nX292ZXJfcGVyaW9kID0gMTI4OwotCXBzX3BhcmFtcy5udWxsX2RhdGFfcmF0ZSA9IDE7IC8qIDEgTWJwcyAqLwotCi0JcmV0ID0gd2wxMnh4X2NtZF9zZW5kKHdsLCBDTURfU0VUX1BTX01PREUsICZwc19wYXJhbXMsCi0JCQkgICAgICBzaXplb2YocHNfcGFyYW1zKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJjbWQgc2V0X3BzX21vZGUgZmFpbGVkIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfY21kX3JlYWRfbWVtb3J5KHN0cnVjdCB3bDEyeHggKndsLCB1MzIgYWRkciwgdTMyIGxlbiwgdm9pZCAqYW5zd2VyKQotewotCXN0cnVjdCBjbWRfcmVhZF93cml0ZV9tZW1vcnkgbWVtX2NtZCwgKm1lbV9hbnN3ZXI7Ci0Jc3RydWN0IHdsMTJ4eF9jb21tYW5kIGNtZDsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0NNRCwgImNtZCByZWFkIG1lbW9yeSIpOwotCi0JbWVtc2V0KCZtZW1fY21kLCAwLCBzaXplb2YobWVtX2NtZCkpOwotCW1lbV9jbWQuYWRkciA9IGFkZHI7Ci0JbWVtX2NtZC5zaXplID0gbGVuOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9zZW5kKHdsLCBDTURfUkVBRF9NRU1PUlksICZtZW1fY21kLCBzaXplb2YobWVtX2NtZCkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigicmVhZCBtZW1vcnkgY29tbWFuZCBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiB0aGUgcmVhZCBjb21tYW5kIGdvdCBpbiwgd2UgY2FuIG5vdyByZWFkIHRoZSBhbnN3ZXIgKi8KLQl3bDEyeHhfc3BpX21lbV9yZWFkKHdsLCB3bC0+Y21kX2JveF9hZGRyLCAmY21kLAotCQkJICAgIENNRE1CT1hfSEVBREVSX0xFTiArIHNpemVvZihtZW1fY21kKSk7Ci0KLQlpZiAoY21kLnN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpCi0JCXdsMTJ4eF9lcnJvcigiZXJyb3IgaW4gcmVhZCBjb21tYW5kIHJlc3VsdDogJWQiLCBjbWQuc3RhdHVzKTsKLQotCW1lbV9hbnN3ZXIgPSAoc3RydWN0IGNtZF9yZWFkX3dyaXRlX21lbW9yeSAqKSBjbWQucGFyYW1ldGVyczsKLQltZW1jcHkoYW5zd2VyLCBtZW1fYW5zd2VyLT52YWx1ZSwgbGVuKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2NtZF90ZW1wbGF0ZV9zZXQoc3RydWN0IHdsMTJ4eCAqd2wsIHUxNiBjbWRfaWQsCi0JCQkgICAgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbikKLXsKLQlzdHJ1Y3Qgd2wxMnh4X2NtZF9wYWNrZXRfdGVtcGxhdGUgdGVtcGxhdGU7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19DTUQsICJjbWQgdGVtcGxhdGUgJWQiLCBjbWRfaWQpOwotCi0JbWVtc2V0KCZ0ZW1wbGF0ZSwgMCwgc2l6ZW9mKHRlbXBsYXRlKSk7Ci0KLQlXQVJOX09OKGJ1Zl9sZW4gPiBXTDEyWFhfTUFYX1RFTVBMQVRFX1NJWkUpOwotCWJ1Zl9sZW4gPSBtaW5fdChzaXplX3QsIGJ1Zl9sZW4sIFdMMTJYWF9NQVhfVEVNUExBVEVfU0laRSk7Ci0JdGVtcGxhdGUuc2l6ZSA9IGNwdV90b19sZTE2KGJ1Zl9sZW4pOwotCi0JaWYgKGJ1ZikKLQkJbWVtY3B5KHRlbXBsYXRlLnRlbXBsYXRlLCBidWYsIGJ1Zl9sZW4pOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9zZW5kKHdsLCBjbWRfaWQsICZ0ZW1wbGF0ZSwKLQkJCSAgICAgIHNpemVvZih0ZW1wbGF0ZS5zaXplKSArIGJ1Zl9sZW4pOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJjbWQgc2V0X3RlbXBsYXRlIGZhaWxlZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTMwN2RjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jbWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4Ci0gKgotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgX19XTDEyWFhfQ01EX0hfXwotI2RlZmluZSBfX1dMMTJYWF9DTURfSF9fCi0KLSNpbmNsdWRlICJ3bDEyeHguaCIKLQotaW50IHdsMTJ4eF9jbWRfc2VuZChzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTE2IHR5cGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pOwotaW50IHdsMTJ4eF9jbWRfdGVzdChzdHJ1Y3Qgd2wxMnh4ICp3bCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbiwgdTggYW5zd2VyKTsKLWludCB3bDEyeHhfY21kX2ludGVycm9nYXRlKHN0cnVjdCB3bDEyeHggKndsLCB1MTYgaWVfaWQsIHUxNiBpZV9sZW4sCi0JCQkgICB2b2lkICphbnN3ZXIpOwotaW50IHdsMTJ4eF9jbWRfY29uZmlndXJlKHN0cnVjdCB3bDEyeHggKndsLCB2b2lkICppZSwgaW50IGllX2xlbik7Ci1pbnQgd2wxMnh4X2NtZF92Ym0oc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGlkZW50aXR5LAotCQkgICB2b2lkICpiaXRtYXAsIHUxNiBiaXRtYXBfbGVuLCB1OCBiaXRtYXBfY29udHJvbCk7Ci1pbnQgd2wxMnh4X2NtZF9kYXRhX3BhdGgoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGNoYW5uZWwsIHU4IGVuYWJsZSk7Ci1pbnQgd2wxMnh4X2NtZF9qb2luKHN0cnVjdCB3bDEyeHggKndsLCB1OCBic3NfdHlwZSwgdTggZHRpbV9pbnRlcnZhbCwKLQkJICAgIHUxNiBiZWFjb25faW50ZXJ2YWwsIHU4IHdhaXQpOwotaW50IHdsMTJ4eF9jbWRfcHNfbW9kZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTggcHNfbW9kZSk7Ci1pbnQgd2wxMnh4X2NtZF9yZWFkX21lbW9yeShzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTMyIGFkZHIsIHUzMiBsZW4sIHZvaWQgKmFuc3dlcik7Ci1pbnQgd2wxMnh4X2NtZF90ZW1wbGF0ZV9zZXQoc3RydWN0IHdsMTJ4eCAqd2wsIHUxNiBjbWRfaWQsCi0JCQkgICAgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbik7Ci0KLS8qIHVuaXQgbXMgKi8KLSNkZWZpbmUgV0wxMlhYX0NPTU1BTkRfVElNRU9VVCAyMDAwCi0KLSNkZWZpbmUgV0wxMlhYX01BWF9URU1QTEFURV9TSVpFIDMwMAotCi1zdHJ1Y3Qgd2wxMnh4X2NtZF9wYWNrZXRfdGVtcGxhdGUgewotCV9fbGUxNiBzaXplOwotCXU4IHRlbXBsYXRlW1dMMTJYWF9NQVhfVEVNUExBVEVfU0laRV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotZW51bSB3bDEyeHhfY29tbWFuZHMgewotCUNNRF9SRVNFVCAgICAgICAgICAgPSAwLAotCUNNRF9JTlRFUlJPR0FURSAgICAgPSAxLCAgICAvKnVzZSB0aGlzIHRvIHJlYWQgaW5mb3JtYXRpb24gZWxlbWVudHMqLwotCUNNRF9DT05GSUdVUkUgICAgICAgPSAyLCAgICAvKnVzZSB0aGlzIHRvIHdyaXRlIGluZm9ybWF0aW9uIGVsZW1lbnRzKi8KLQlDTURfRU5BQkxFX1JYICAgICAgID0gMywKLQlDTURfRU5BQkxFX1RYICAgICAgID0gNCwKLQlDTURfRElTQUJMRV9SWCAgICAgID0gNSwKLQlDTURfRElTQUJMRV9UWCAgICAgID0gNiwKLQlDTURfU0NBTiAgICAgICAgICAgID0gOCwKLQlDTURfU1RPUF9TQ0FOICAgICAgID0gOSwKLQlDTURfVkJNICAgICAgICAgICAgID0gMTAsCi0JQ01EX1NUQVJUX0pPSU4gICAgICA9IDExLAotCUNNRF9TRVRfS0VZUyAgICAgICAgPSAxMiwKLQlDTURfUkVBRF9NRU1PUlkgICAgID0gMTMsCi0JQ01EX1dSSVRFX01FTU9SWSAgICA9IDE0LAotCUNNRF9CRUFDT04gICAgICAgICAgPSAxOSwKLQlDTURfUFJPQkVfUkVTUCAgICAgID0gMjAsCi0JQ01EX05VTExfREFUQSAgICAgICA9IDIxLAotCUNNRF9QUk9CRV9SRVEgICAgICAgPSAyMiwKLQlDTURfVEVTVCAgICAgICAgICAgID0gMjMsCi0JQ01EX1JBRElPX0NBTElCUkFURSAgICAgPSAyNSwgICAvKiBPQlNPTEVURSAqLwotCUNNRF9FTkFCTEVfUlhfUEFUSCAgICAgID0gMjcsICAgLyogT0JTT0xFVEUgKi8KLQlDTURfTk9JU0VfSElTVCAgICAgID0gMjgsCi0JQ01EX1JYX1JFU0VUICAgICAgICA9IDI5LAotCUNNRF9QU19QT0xMICAgICAgICAgPSAzMCwKLQlDTURfUU9TX05VTExfREFUQSAgID0gMzEsCi0JQ01EX0xOQV9DT05UUk9MICAgICA9IDMyLAotCUNNRF9TRVRfQkNOX01PREUgICAgPSAzMywKLQlDTURfTUVBU1VSRU1FTlQgICAgICA9IDM0LAotCUNNRF9TVE9QX01FQVNVUkVNRU5UID0gMzUsCi0JQ01EX0RJU0NPTk5FQ1QgICAgICAgPSAzNiwKLQlDTURfU0VUX1BTX01PREUgICAgICA9IDM3LAotCUNNRF9DSEFOTkVMX1NXSVRDSCAgID0gMzgsCi0JQ01EX1NUT1BfQ0hBTk5FTF9TV0lDVEggPSAzOSwKLQlDTURfQVBfRElTQ09WRVJZICAgICA9IDQwLAotCUNNRF9TVE9QX0FQX0RJU0NPVkVSWSA9IDQxLAotCUNNRF9TUFNfU0NBTiA9IDQyLAotCUNNRF9TVE9QX1NQU19TQ0FOID0gNDMsCi0JQ01EX0hFQUxUSF9DSEVDSyAgICAgPSA0NSwKLQlDTURfREVCVUcgICAgICAgICAgICA9IDQ2LAotCUNNRF9UUklHR0VSX1NDQU5fVE8gID0gNDcsCi0KLQlOVU1fQ09NTUFORFMsCi0JTUFYX0NPTU1BTkRfSUQgPSAweEZGRkYsCi19OwotCi0jZGVmaW5lIE1BWF9DTURfUEFSQU1TIDU3MgotCi1zdHJ1Y3QgIHdsMTJ4eF9jb21tYW5kIHsKLQl1MTYgaWQ7Ci0JdTE2IHN0YXR1czsKLQl1OCAgcGFyYW1ldGVyc1tNQVhfQ01EX1BBUkFNU107Ci19OwotCi1lbnVtIHsKLQlDTURfTUFJTEJPWF9JRExFICAgICAgICAgICAgICAJCT0gIDAsCi0JQ01EX1NUQVRVU19TVUNDRVNTICAgICAgICAgICAgCQk9ICAxLAotCUNNRF9TVEFUVVNfVU5LTk9XTl9DTUQgICAgICAgIAkJPSAgMiwKLQlDTURfU1RBVFVTX1VOS05PV05fSUUgICAgICAgICAJCT0gIDMsCi0JQ01EX1NUQVRVU19SRUpFQ1RfTUVBU19TR19BQ1RJVkUgCT0gMTEsCi0JQ01EX1NUQVRVU19SWF9CVVNZICAgICAgICAgICAgCQk9IDEzLAotCUNNRF9TVEFUVVNfSU5WQUxJRF9QQVJBTSAgICAgIAkJPSAxNCwKLQlDTURfU1RBVFVTX1RFTVBMQVRFX1RPT19MQVJHRSAJCT0gMTUsCi0JQ01EX1NUQVRVU19PVVRfT0ZfTUVNT1JZICAgICAgCQk9IDE2LAotCUNNRF9TVEFUVVNfU1RBX1RBQkxFX0ZVTEwgICAgIAkJPSAxNywKLQlDTURfU1RBVFVTX1JBRElPX0VSUk9SICAgICAgICAJCT0gMTgsCi0JQ01EX1NUQVRVU19XUk9OR19ORVNUSU5HICAgICAgCQk9IDE5LAotCUNNRF9TVEFUVVNfVElNRU9VVCAgICAgICAgICAgIAkJPSAyMSwgLyogRHJpdmVyIGludGVybmFsIHVzZS4qLwotCUNNRF9TVEFUVVNfRldfUkVTRVQgICAgICAgICAgIAkJPSAyMiwgLyogRHJpdmVyIGludGVybmFsIHVzZS4qLwotCU1BWF9DT01NQU5EX1NUQVRVUyAgICAgICAgICAgIAkJPSAweGZmCi19OwotCi0KLS8qCi0gKiBDTURfUkVBRF9NRU1PUlkKLSAqCi0gKiBUaGUgaG9zdCBpc3N1ZXMgdGhpcyBjb21tYW5kIHRvIHJlYWQgdGhlIFdpTGluayBkZXZpY2UgbWVtb3J5L3JlZ2lzdGVycy4KLSAqCi0gKiBOb3RlOiBUaGUgQmFzZSBCYW5kIGFkZHJlc3MgaGFzIHNwZWNpYWwgaGFuZGxpbmcgKDE2IGJpdHMgcmVnaXN0ZXJzIGFuZAotICogYWRkcmVzc2VzKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgaGFyZHdhcmUgc3BlY2lmaWNhdGlvbi4KLSAqLwotLyoKLSAqIENNRF9XUklURV9NRU1PUlkKLSAqCi0gKiBUaGUgaG9zdCBpc3N1ZXMgdGhpcyBjb21tYW5kIHRvIHdyaXRlIHRoZSBXaUxpbmsgZGV2aWNlIG1lbW9yeS9yZWdpc3RlcnMuCi0gKgotICogVGhlIEJhc2UgQmFuZCBhZGRyZXNzIGhhcyBzcGVjaWFsIGhhbmRsaW5nICgxNiBiaXRzIHJlZ2lzdGVycyBhbmQKLSAqIGFkZHJlc3NlcykuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGhhcmR3YXJlIHNwZWNpZmljYXRpb24uCi0gKi8KLSNkZWZpbmUgTUFYX1JFQURfU0laRSAyNTYKLQotc3RydWN0IGNtZF9yZWFkX3dyaXRlX21lbW9yeSB7Ci0JLyogVGhlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uKi8KLQl1MzIgYWRkcjsKLQotCS8qIFRoZSBhbW91bnQgb2YgZGF0YSBpbiBieXRlcyB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8gdGhlIFdpTGluawotCSAqIGRldmljZS4qLwotCXUzMiBzaXplOwotCi0JLyogVGhlIGFjdHVhbCB2YWx1ZSByZWFkIGZyb20gb3Igd3JpdHRlbiB0byB0aGUgV2lsaW5rLiBUaGUgc291cmNlCi0JICAgb2YgdGhpcyBmaWVsZCBpcyB0aGUgSG9zdCBpbiBXUklURSBjb21tYW5kIG9yIHRoZSBXaWxpbmsgaW4gUkVBRAotCSAgIGNvbW1hbmQuICovCi0JdTggdmFsdWVbTUFYX1JFQURfU0laRV07Ci19OwotCi0jZGVmaW5lIENNRE1CT1hfSEVBREVSX0xFTiA0Ci0jZGVmaW5lIENNRE1CT1hfSU5GT19FTEVNX0hFQURFUl9MRU4gNAotCi0KLXN0cnVjdCBiYXNpY19zY2FuX3BhcmFtZXRlcnMgewotCXUzMiByeF9jb25maWdfb3B0aW9uczsKLQl1MzIgcnhfZmlsdGVyX29wdGlvbnM7Ci0KLQkvKgotCSAqIFNjYW4gb3B0aW9uczoKLQkgKiBiaXQgMDogV2hlbiB0aGlzIGJpdCBpcyBzZXQsIHBhc3NpdmUgc2Nhbi4KLQkgKiBiaXQgMTogQmFuZCwgd2hlbiB0aGlzIGJpdCBpcyBzZXQgd2Ugc2NhbgotCSAqIGluIHRoZSA1R2h6IGJhbmQuCi0JICogYml0IDI6IHZvaWNlIG1vZGUsIDAgZm9yIG5vcm1hbCBzY2FuLgotCSAqIGJpdCAzOiBzY2FuIHByaW9yaXR5LCAxIGZvciBoaWdoIHByaW9yaXR5LgotCSAqLwotCXUxNiBzY2FuX29wdGlvbnM7Ci0KLQkvKiBOdW1iZXIgb2YgY2hhbm5lbHMgdG8gc2NhbiAqLwotCXU4IG51bV9jaGFubmVsczsKLQotCS8qIE51bWJlciBvcGYgcHJvYmUgcmVxdWVzdHMgdG8gc2VuZCwgcGVyIGNoYW5uZWwgKi8KLQl1OCBudW1fcHJvYmVfcmVxdWVzdHM7Ci0KLQkvKiBSYXRlIGFuZCBtb2R1bGF0aW9uIGZvciBwcm9iZSByZXF1ZXN0cyAqLwotCXUxNiB0eF9yYXRlOwotCi0JdTggdGlkX3RyaWdnZXI7Ci0JdTggc3NpZF9sZW47Ci0JdTMyIHNzaWRbOF07Ci0KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgYmFzaWNfc2Nhbl9jaGFubmVsX3BhcmFtZXRlcnMgewotCXUzMiBtaW5fZHVyYXRpb247IC8qIGluIFRVICovCi0JdTMyIG1heF9kdXJhdGlvbjsgLyogaW4gVFUgKi8KLQl1MzIgYnNzaWRfbHNiOwotCXUxNiBic3NpZF9tc2I7Ci0KLQkvKgotCSAqIGJpdHMgMC0zOiBFYXJseSB0ZXJtaW5hdGlvbiBjb3VudC4KLQkgKiBiaXRzIDQtNTogRWFybHkgdGVybWluYXRpb24gY29uZGl0aW9uLgotCSAqLwotCXU4IGVhcmx5X3Rlcm1pbmF0aW9uOwotCi0JdTggdHhfcG93ZXJfYXR0OwotCXU4IGNoYW5uZWw7Ci0JdTggcGFkWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFNDQU4gcGFyYW1ldGVycyAqLwotI2RlZmluZSBTQ0FOX01BWF9OVU1fT0ZfQ0hBTk5FTFMgMTYKLQotc3RydWN0IGNtZF9zY2FuIHsKLQlzdHJ1Y3QgYmFzaWNfc2Nhbl9wYXJhbWV0ZXJzIHBhcmFtczsKLQlzdHJ1Y3QgYmFzaWNfc2Nhbl9jaGFubmVsX3BhcmFtZXRlcnMgY2hhbm5lbHNbU0NBTl9NQVhfTlVNX09GX0NIQU5ORUxTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIHsKLQlCU1NfVFlQRV9JQlNTID0gMCwKLQlCU1NfVFlQRV9TVEFfQlNTID0gMiwKLQlCU1NfVFlQRV9BUF9CU1MgPSAzLAotCU1BWF9CU1NfVFlQRSA9IDB4RkYKLX07Ci0KLSNkZWZpbmUgSk9JTl9DTURfQ1RSTF9UWF9GTFVTSCAgICAgICAgICAgICAweDgwIC8qIEZpcm13YXJlIGZsdXNoZXMgYWxsIFR4ICovCi0jZGVmaW5lIEpPSU5fQ01EX0NUUkxfRUFSTFlfV0FLRVVQX0VOQUJMRSAgMHgwMSAvKiBFYXJseSB3YWtldXAgdGltZSAqLwotCi0KLXN0cnVjdCBjbWRfam9pbiB7Ci0JdTMyIGJzc2lkX2xzYjsKLQl1MTYgYnNzaWRfbXNiOwotCXUxNiBiZWFjb25faW50ZXJ2YWw7IC8qIGluIFRCVFRzICovCi0JdTMyIHJ4X2NvbmZpZ19vcHRpb25zOwotCXUzMiByeF9maWx0ZXJfb3B0aW9uczsKLQotCS8qCi0JICogVGhlIHRhcmdldCB1c2VzIHRoaXMgZmllbGQgdG8gZGV0ZXJtaW5lIHRoZSByYXRlIGF0Ci0JICogd2hpY2ggdG8gdHJhbnNtaXQgY29udHJvbCBmcmFtZSByZXNwb25zZXMgKHN1Y2ggYXMKLQkgKiBBQ0sgb3IgQ1RTIGZyYW1lcykuCi0JICovCi0JdTE2IGJhc2ljX3JhdGVfc2V0OwotCXU4IGR0aW1faW50ZXJ2YWw7Ci0JdTggdHhfY3RybF9mcmFtZV9yYXRlOyAvKiBPQlNPTEVURSAqLwotCXU4IHR4X2N0cmxfZnJhbWVfbW9kOyAgLyogT0JTT0xFVEUgKi8KLQkvKgotCSAqIGJpdHMgMC0yOiBUaGlzIGJpdHdpc2UgZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlCi0JICogb2YgQlNTIHRvIHN0YXJ0IG9yIGpvaW4gKEJTU19UWVBFXyopLgotCSAqIGJpdCA0OiBCYW5kIC0gVGhlIHJhZGlvIGJhbmQgaW4gd2hpY2ggdG8gam9pbgotCSAqIG9yIHN0YXJ0LgotCSAqICAwIC0gMi40R0h6IGJhbmQKLQkgKiAgMSAtIDVHSHogYmFuZAotCSAqIGJpdHMgMywgNS03OiBSZXNlcnZlZAotCSAqLwotCXU4IGJzc190eXBlOwotCXU4IGNoYW5uZWw7Ci0JdTggc3NpZF9sZW47Ci0JdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRV07Ci0JdTggY3RybDsgLyogSk9JTl9DTURfQ1RSTF8qICovCi0JdTggdHhfbWd0X2ZyYW1lX3JhdGU7IC8qIE9CU09MRVRFICovCi0JdTggdHhfbWd0X2ZyYW1lX21vZDsgIC8qIE9CU09MRVRFICovCi0JdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0jZW5kaWYgLyogX19XTDEyWFhfQ01EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9kZWJ1Z2ZzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYjM2OGMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuYworKysgL2Rldi9udWxsCkBAIC0xLDUwOCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSAiZGVidWdmcy5oIgotCi0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0KLSNpbmNsdWRlICJ3bDEyeHguaCIKLSNpbmNsdWRlICJhY3guaCIKLQotLyogbXMgKi8KLSNkZWZpbmUgV0wxMlhYX0RFQlVHRlNfU1RBVFNfTElGRVRJTUUgMTAwMAotCi0vKiBkZWJ1Z2ZzIG1hY3JvcyBpZGVhIGZyb20gbWFjODAyMTEgKi8KLQotI2RlZmluZSBERUJVR0ZTX1JFQURPTkxZX0ZJTEUobmFtZSwgYnVmbGVuLCBmbXQsIHZhbHVlLi4uKQkJXAotc3RhdGljIHNzaXplX3QgbmFtZSMjIF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwJXAotCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHdsMTJ4eCAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CQkJCVwKLQljaGFyIGJ1ZltidWZsZW5dOwkJCQkJCVwKLQlpbnQgcmVzOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JcmVzID0gc2NucHJpbnRmKGJ1ZiwgYnVmbGVuLCBmbXQgIlxuIiwgIyN2YWx1ZSk7CQlcCi0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7CVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuYW1lIyMgX29wcyA9IHsJCQlcCi0JLnJlYWQgPSBuYW1lIyMgX3JlYWQsCQkJCQkJXAotCS5vcGVuID0gd2wxMnh4X29wZW5fZmlsZV9nZW5lcmljLAkJCQlcCi19OwotCi0jZGVmaW5lIERFQlVHRlNfQUREKG5hbWUsIHBhcmVudCkJCQkJCVwKLQl3bC0+ZGVidWdmcy5uYW1lID0gZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgMDQwMCwgcGFyZW50LAlcCi0JCQkJCSAgICAgICB3bCwgJm5hbWUjIyBfb3BzKTsJXAotCWlmIChJU19FUlIod2wtPmRlYnVnZnMubmFtZSkpIHsJCQkJCVwKLQkJcmV0ID0gUFRSX0VSUih3bC0+ZGVidWdmcy5uYW1lKTsJCQlcCi0JCXdsLT5kZWJ1Z2ZzLm5hbWUgPSBOVUxMOwkJCQlcCi0JCWdvdG8gb3V0OwkJCQkJCVwKLQl9Ci0KLSNkZWZpbmUgREVCVUdGU19ERUwobmFtZSkJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlkZWJ1Z2ZzX3JlbW92ZSh3bC0+ZGVidWdmcy5uYW1lKTsJCQlcCi0JCXdsLT5kZWJ1Z2ZzLm5hbWUgPSBOVUxMOwkJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBERUJVR0ZTX0ZXU1RBVFNfRklMRShzdWIsIG5hbWUsIGJ1ZmxlbiwgZm10KQkJCVwKLXN0YXRpYyBzc2l6ZV90IHN1YiMjIF8gIyNuYW1lIyMgX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCQlcCi0JCQkJICAgICAgY2hhciBfX3VzZXIgKnVzZXJidWYsCQlcCi0JCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHdsMTJ4eCAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CQkJCVwKLQljaGFyIGJ1ZltidWZsZW5dOwkJCQkJCVwKLQlpbnQgcmVzOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0Jd2wxMnh4X2RlYnVnZnNfdXBkYXRlX3N0YXRzKHdsKTsJCQkJXAotCQkJCQkJCQkJXAotCXJlcyA9IHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgZm10ICJcbiIsCQkJCVwKLQkJCXdsLT5zdGF0cy5md19zdGF0cy0+c3ViLm5hbWUpOwkJCVwKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN1YiMjIF8gIyNuYW1lIyMgX29wcyA9IHsJCVwKLQkucmVhZCA9IHN1YiMjIF8gIyNuYW1lIyMgX3JlYWQsCQkJCQlcCi0JLm9wZW4gPSB3bDEyeHhfb3Blbl9maWxlX2dlbmVyaWMsCQkJCVwKLX07Ci0KLSNkZWZpbmUgREVCVUdGU19GV1NUQVRTX0FERChzdWIsIG5hbWUpCQkJCVwKLQlERUJVR0ZTX0FERChzdWIjIyBfICMjbmFtZSwgd2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcykKLQotI2RlZmluZSBERUJVR0ZTX0ZXU1RBVFNfREVMKHN1YiwgbmFtZSkJCQkJXAotCURFQlVHRlNfREVMKHN1YiMjIF8gIyNuYW1lKQotCi1zdGF0aWMgdm9pZCB3bDEyeHhfZGVidWdmc191cGRhdGVfc3RhdHMoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCWlmICh3bC0+c3RhdGUgPT0gV0wxMlhYX1NUQVRFX09OICYmCi0JICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgd2wtPnN0YXRzLmZ3X3N0YXRzX3VwZGF0ZSArCi0JCSAgICAgICBtc2Vjc190b19qaWZmaWVzKFdMMTJYWF9ERUJVR0ZTX1NUQVRTX0xJRkVUSU1FKSkpIHsKLQkJd2wxMnh4X2FjeF9zdGF0aXN0aWNzKHdsLCB3bC0+c3RhdHMuZndfc3RhdHMpOwotCQl3bC0+c3RhdHMuZndfc3RhdHNfdXBkYXRlID0gamlmZmllczsKLQl9Ci0KLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X29wZW5fZmlsZV9nZW5lcmljKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLURFQlVHRlNfRldTVEFUU19GSUxFKHR4LCBpbnRlcm5hbF9kZXNjX292ZXJmbG93LCAyMCwgIiV1Iik7Ci0KLURFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBvdXRfb2ZfbWVtLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShyeCwgaGRyX292ZXJmbG93LCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShyeCwgaHdfc3R1Y2ssIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBkcm9wcGVkLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShyeCwgZmNzX2VyciwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocngsIHhmcl9oaW50X3RyaWcsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBwYXRoX3Jlc2V0LCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShyeCwgcmVzZXRfY291bnRlciwgMjAsICIldSIpOwotCi1ERUJVR0ZTX0ZXU1RBVFNfRklMRShkbWEsIHJ4X3JlcXVlc3RlZCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoZG1hLCByeF9lcnJvcnMsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGRtYSwgdHhfcmVxdWVzdGVkLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShkbWEsIHR4X2Vycm9ycywgMjAsICIldSIpOwotCi1ERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGNtZF9jbXBsdCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBmaXFzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIHJ4X2hlYWRlcnMsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgcnhfbWVtX292ZXJmbG93LCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIHJ4X3JkeXMsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgaXJxcywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCB0eF9wcm9jcywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBkZWNyeXB0X2RvbmUsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgZG1hMF9kb25lLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGRtYTFfZG9uZSwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCB0eF9leGNoX2NvbXBsZXRlLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGNvbW1hbmRzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIHJ4X3Byb2NzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGh3X3BtX21vZGVfY2hhbmdlcywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBob3N0X2Fja25vd2xlZGdlcywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBwY2lfcG0sIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgd2FrZXVwcywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBsb3dfcnNzaSwgMjAsICIldSIpOwotCi1ERUJVR0ZTX0ZXU1RBVFNfRklMRSh3ZXAsIGFkZHJfa2V5X2NvdW50LCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRSh3ZXAsIGRlZmF1bHRfa2V5X2NvdW50LCAyMCwgIiV1Iik7Ci0vKiBza2lwcGluZyB3ZXAucmVzZXJ2ZWQgKi8KLURFQlVHRlNfRldTVEFUU19GSUxFKHdlcCwga2V5X25vdF9mb3VuZCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUod2VwLCBkZWNyeXB0X2ZhaWwsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHdlcCwgcGFja2V0cywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUod2VwLCBpbnRlcnJ1cHQsIDIwLCAiJXUiKTsKLQotREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCBwc19lbnRlciwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCBlbHBfZW50ZXIsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgbWlzc2luZ19iY25zLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHdha2Vfb25faG9zdCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCB3YWtlX29uX3RpbWVyX2V4cCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCB0eF93aXRoX3BzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHR4X3dpdGhvdXRfcHMsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgcmN2ZF9iZWFjb25zLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHBvd2VyX3NhdmVfb2ZmLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIGVuYWJsZV9wcywgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCBkaXNhYmxlX3BzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIGZpeF90c2ZfcHMsIDIwLCAiJXUiKTsKLS8qIHNraXBwaW5nIGNvbnRfbWlzc19iY25zX3NwcmVhZCBmb3Igbm93ICovCi1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHJjdmRfYXdha2VfYmVhY29ucywgMjAsICIldSIpOwotCi1ERUJVR0ZTX0ZXU1RBVFNfRklMRShtaWMsIHJ4X3BrdHMsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKG1pYywgY2FsY19mYWlsdXJlLCAyMCwgIiV1Iik7Ci0KLURFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZW5jcnlwdF9mYWlsLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShhZXMsIGRlY3J5cHRfZmFpbCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoYWVzLCBlbmNyeXB0X3BhY2tldHMsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZGVjcnlwdF9wYWNrZXRzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShhZXMsIGVuY3J5cHRfaW50ZXJydXB0LCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShhZXMsIGRlY3J5cHRfaW50ZXJydXB0LCAyMCwgIiV1Iik7Ci0KLURFQlVHRlNfRldTVEFUU19GSUxFKGV2ZW50LCBoZWFydF9iZWF0LCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgY2FsaWJyYXRpb24sIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGV2ZW50LCByeF9taXNtYXRjaCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoZXZlbnQsIHJ4X21lbV9lbXB0eSwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoZXZlbnQsIHJ4X3Bvb2wsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKGV2ZW50LCBvb21fbGF0ZSwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoZXZlbnQsIHBoeV90cmFuc21pdF9lcnJvciwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUoZXZlbnQsIHR4X3N0dWNrLCAyMCwgIiV1Iik7Ci0KLURFQlVHRlNfRldTVEFUU19GSUxFKHBzLCBwc3BvbGxfdGltZW91dHMsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHBzLCB1cHNkX3RpbWVvdXRzLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwcywgdXBzZF9tYXhfc3B0aW1lLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwcywgdXBzZF9tYXhfYXB0dXJuLCAyMCwgIiV1Iik7Ci1ERUJVR0ZTX0ZXU1RBVFNfRklMRShwcywgcHNwb2xsX21heF9hcHR1cm4sIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHBzLCBwc3BvbGxfdXRpbGl6YXRpb24sIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHBzLCB1cHNkX3V0aWxpemF0aW9uLCAyMCwgIiV1Iik7Ci0KLURFQlVHRlNfRldTVEFUU19GSUxFKHJ4cGlwZSwgcnhfcHJlcF9iZWFjb25fZHJvcCwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocnhwaXBlLCBkZXNjcl9ob3N0X2ludF90cmlnX3J4X2RhdGEsIDIwLCAiJXUiKTsKLURFQlVHRlNfRldTVEFUU19GSUxFKHJ4cGlwZSwgYmVhY29uX2J1ZmZlcl90aHJlc19ob3N0X2ludF90cmlnX3J4X2RhdGEsCi0JCSAgICAgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocnhwaXBlLCBtaXNzZWRfYmVhY29uX2hvc3RfaW50X3RyaWdfcnhfZGF0YSwgMjAsICIldSIpOwotREVCVUdGU19GV1NUQVRTX0ZJTEUocnhwaXBlLCB0eF94ZnJfaG9zdF9pbnRfdHJpZ19yeF9kYXRhLCAyMCwgIiV1Iik7Ci0KLURFQlVHRlNfUkVBRE9OTFlfRklMRShyZXRyeV9jb3VudCwgMjAsICIldSIsIHdsLT5zdGF0cy5yZXRyeV9jb3VudCk7Ci1ERUJVR0ZTX1JFQURPTkxZX0ZJTEUoZXhjZXNzaXZlX3JldHJpZXMsIDIwLCAiJXUiLAotCQkgICAgICB3bC0+c3RhdHMuZXhjZXNzaXZlX3JldHJpZXMpOwotCi1zdGF0aWMgc3NpemVfdCB0eF9xdWV1ZV9sZW5fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCi0JCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCB3bDEyeHggKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXUzMiBxdWV1ZV9sZW47Ci0JY2hhciBidWZbMjBdOwotCWludCByZXM7Ci0KLQlxdWV1ZV9sZW4gPSBza2JfcXVldWVfbGVuKCZ3bC0+dHhfcXVldWUpOwotCi0JcmVzID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwgcXVldWVfbGVuKTsKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHhfcXVldWVfbGVuX29wcyA9IHsKLQkucmVhZCA9IHR4X3F1ZXVlX2xlbl9yZWFkLAotCS5vcGVuID0gd2wxMnh4X29wZW5fZmlsZV9nZW5lcmljLAotfTsKLQotc3RhdGljIHZvaWQgd2wxMnh4X2RlYnVnZnNfZGVsZXRlX2ZpbGVzKHN0cnVjdCB3bDEyeHggKndsKQotewotCURFQlVHRlNfRldTVEFUU19ERUwodHgsIGludGVybmFsX2Rlc2Nfb3ZlcmZsb3cpOwotCi0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgb3V0X29mX21lbSk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgaGRyX292ZXJmbG93KTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCBod19zdHVjayk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgZHJvcHBlZCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgZmNzX2Vycik7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgeGZyX2hpbnRfdHJpZyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgcGF0aF9yZXNldCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeCwgcmVzZXRfY291bnRlcik7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGRtYSwgcnhfcmVxdWVzdGVkKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGRtYSwgcnhfZXJyb3JzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGRtYSwgdHhfcmVxdWVzdGVkKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGRtYSwgdHhfZXJyb3JzKTsKLQotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBjbWRfY21wbHQpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBmaXFzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgcnhfaGVhZGVycyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIHJ4X21lbV9vdmVyZmxvdyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIHJ4X3JkeXMpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBpcnFzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgdHhfcHJvY3MpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBkZWNyeXB0X2RvbmUpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBkbWEwX2RvbmUpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBkbWExX2RvbmUpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCB0eF9leGNoX2NvbXBsZXRlKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgY29tbWFuZHMpOwotCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCByeF9wcm9jcyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGh3X3BtX21vZGVfY2hhbmdlcyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGhvc3RfYWNrbm93bGVkZ2VzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgcGNpX3BtKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgd2FrZXVwcyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGxvd19yc3NpKTsKLQotCURFQlVHRlNfRldTVEFUU19ERUwod2VwLCBhZGRyX2tleV9jb3VudCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTCh3ZXAsIGRlZmF1bHRfa2V5X2NvdW50KTsKLQkvKiBza2lwcGluZyB3ZXAucmVzZXJ2ZWQgKi8KLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHdlcCwga2V5X25vdF9mb3VuZCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTCh3ZXAsIGRlY3J5cHRfZmFpbCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTCh3ZXAsIHBhY2tldHMpOwotCURFQlVHRlNfRldTVEFUU19ERUwod2VwLCBpbnRlcnJ1cHQpOwotCi0JREVCVUdGU19GV1NUQVRTX0RFTChwd3IsIHBzX2VudGVyKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgZWxwX2VudGVyKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgbWlzc2luZ19iY25zKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgd2FrZV9vbl9ob3N0KTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgd2FrZV9vbl90aW1lcl9leHApOwotCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCB0eF93aXRoX3BzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgdHhfd2l0aG91dF9wcyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChwd3IsIHJjdmRfYmVhY29ucyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChwd3IsIHBvd2VyX3NhdmVfb2ZmKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgZW5hYmxlX3BzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgZGlzYWJsZV9wcyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChwd3IsIGZpeF90c2ZfcHMpOwotCS8qIHNraXBwaW5nIGNvbnRfbWlzc19iY25zX3NwcmVhZCBmb3Igbm93ICovCi0JREVCVUdGU19GV1NUQVRTX0RFTChwd3IsIHJjdmRfYXdha2VfYmVhY29ucyk7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfREVMKG1pYywgcnhfcGt0cyk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChtaWMsIGNhbGNfZmFpbHVyZSk7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGFlcywgZW5jcnlwdF9mYWlsKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGFlcywgZGVjcnlwdF9mYWlsKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGFlcywgZW5jcnlwdF9wYWNrZXRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGFlcywgZGVjcnlwdF9wYWNrZXRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGFlcywgZW5jcnlwdF9pbnRlcnJ1cHQpOwotCURFQlVHRlNfRldTVEFUU19ERUwoYWVzLCBkZWNyeXB0X2ludGVycnVwdCk7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGV2ZW50LCBoZWFydF9iZWF0KTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKGV2ZW50LCBjYWxpYnJhdGlvbik7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChldmVudCwgcnhfbWlzbWF0Y2gpOwotCURFQlVHRlNfRldTVEFUU19ERUwoZXZlbnQsIHJ4X21lbV9lbXB0eSk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChldmVudCwgcnhfcG9vbCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChldmVudCwgb29tX2xhdGUpOwotCURFQlVHRlNfRldTVEFUU19ERUwoZXZlbnQsIHBoeV90cmFuc21pdF9lcnJvcik7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChldmVudCwgdHhfc3R1Y2spOwotCi0JREVCVUdGU19GV1NUQVRTX0RFTChwcywgcHNwb2xsX3RpbWVvdXRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHBzLCB1cHNkX3RpbWVvdXRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHBzLCB1cHNkX21heF9zcHRpbWUpOwotCURFQlVHRlNfRldTVEFUU19ERUwocHMsIHVwc2RfbWF4X2FwdHVybik7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChwcywgcHNwb2xsX21heF9hcHR1cm4pOwotCURFQlVHRlNfRldTVEFUU19ERUwocHMsIHBzcG9sbF91dGlsaXphdGlvbik7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChwcywgdXBzZF91dGlsaXphdGlvbik7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4cGlwZSwgcnhfcHJlcF9iZWFjb25fZHJvcCk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeHBpcGUsIGRlc2NyX2hvc3RfaW50X3RyaWdfcnhfZGF0YSk7Ci0JREVCVUdGU19GV1NUQVRTX0RFTChyeHBpcGUsIGJlYWNvbl9idWZmZXJfdGhyZXNfaG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKLQlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4cGlwZSwgbWlzc2VkX2JlYWNvbl9ob3N0X2ludF90cmlnX3J4X2RhdGEpOwotCURFQlVHRlNfRldTVEFUU19ERUwocnhwaXBlLCB0eF94ZnJfaG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKLQotCURFQlVHRlNfREVMKHR4X3F1ZXVlX2xlbik7Ci0JREVCVUdGU19ERUwocmV0cnlfY291bnQpOwotCURFQlVHRlNfREVMKGV4Y2Vzc2l2ZV9yZXRyaWVzKTsKLX0KLQotc3RhdGljIGludCB3bDEyeHhfZGVidWdmc19hZGRfZmlsZXMoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHR4LCBpbnRlcm5hbF9kZXNjX292ZXJmbG93KTsKLQotCURFQlVHRlNfRldTVEFUU19BREQocngsIG91dF9vZl9tZW0pOwotCURFQlVHRlNfRldTVEFUU19BREQocngsIGhkcl9vdmVyZmxvdyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChyeCwgaHdfc3R1Y2spOwotCURFQlVHRlNfRldTVEFUU19BREQocngsIGRyb3BwZWQpOwotCURFQlVHRlNfRldTVEFUU19BREQocngsIGZjc19lcnIpOwotCURFQlVHRlNfRldTVEFUU19BREQocngsIHhmcl9oaW50X3RyaWcpOwotCURFQlVHRlNfRldTVEFUU19BREQocngsIHBhdGhfcmVzZXQpOwotCURFQlVHRlNfRldTVEFUU19BREQocngsIHJlc2V0X2NvdW50ZXIpOwotCi0JREVCVUdGU19GV1NUQVRTX0FERChkbWEsIHJ4X3JlcXVlc3RlZCk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChkbWEsIHJ4X2Vycm9ycyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChkbWEsIHR4X3JlcXVlc3RlZCk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChkbWEsIHR4X2Vycm9ycyk7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgY21kX2NtcGx0KTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgZmlxcyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChpc3IsIHJ4X2hlYWRlcnMpOwotCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCByeF9tZW1fb3ZlcmZsb3cpOwotCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCByeF9yZHlzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgaXJxcyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChpc3IsIHR4X3Byb2NzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgZGVjcnlwdF9kb25lKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgZG1hMF9kb25lKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgZG1hMV9kb25lKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgdHhfZXhjaF9jb21wbGV0ZSk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGNvbW1hbmRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgcnhfcHJvY3MpOwotCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBod19wbV9tb2RlX2NoYW5nZXMpOwotCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBob3N0X2Fja25vd2xlZGdlcyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChpc3IsIHBjaV9wbSk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChpc3IsIHdha2V1cHMpOwotCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBsb3dfcnNzaSk7Ci0KLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHdlcCwgYWRkcl9rZXlfY291bnQpOwotCURFQlVHRlNfRldTVEFUU19BREQod2VwLCBkZWZhdWx0X2tleV9jb3VudCk7Ci0JLyogc2tpcHBpbmcgd2VwLnJlc2VydmVkICovCi0JREVCVUdGU19GV1NUQVRTX0FERCh3ZXAsIGtleV9ub3RfZm91bmQpOwotCURFQlVHRlNfRldTVEFUU19BREQod2VwLCBkZWNyeXB0X2ZhaWwpOwotCURFQlVHRlNfRldTVEFUU19BREQod2VwLCBwYWNrZXRzKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHdlcCwgaW50ZXJydXB0KTsKLQotCURFQlVHRlNfRldTVEFUU19BREQocHdyLCBwc19lbnRlcik7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwd3IsIGVscF9lbnRlcik7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwd3IsIG1pc3NpbmdfYmNucyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHdha2Vfb25faG9zdCk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHdha2Vfb25fdGltZXJfZXhwKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgdHhfd2l0aF9wcyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHR4X3dpdGhvdXRfcHMpOwotCURFQlVHRlNfRldTVEFUU19BREQocHdyLCByY3ZkX2JlYWNvbnMpOwotCURFQlVHRlNfRldTVEFUU19BREQocHdyLCBwb3dlcl9zYXZlX29mZik7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwd3IsIGVuYWJsZV9wcyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwd3IsIGRpc2FibGVfcHMpOwotCURFQlVHRlNfRldTVEFUU19BREQocHdyLCBmaXhfdHNmX3BzKTsKLQkvKiBza2lwcGluZyBjb250X21pc3NfYmNuc19zcHJlYWQgZm9yIG5vdyAqLwotCURFQlVHRlNfRldTVEFUU19BREQocHdyLCByY3ZkX2F3YWtlX2JlYWNvbnMpOwotCi0JREVCVUdGU19GV1NUQVRTX0FERChtaWMsIHJ4X3BrdHMpOwotCURFQlVHRlNfRldTVEFUU19BREQobWljLCBjYWxjX2ZhaWx1cmUpOwotCi0JREVCVUdGU19GV1NUQVRTX0FERChhZXMsIGVuY3J5cHRfZmFpbCk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChhZXMsIGRlY3J5cHRfZmFpbCk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChhZXMsIGVuY3J5cHRfcGFja2V0cyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChhZXMsIGRlY3J5cHRfcGFja2V0cyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChhZXMsIGVuY3J5cHRfaW50ZXJydXB0KTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZGVjcnlwdF9pbnRlcnJ1cHQpOwotCi0JREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgaGVhcnRfYmVhdCk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgY2FsaWJyYXRpb24pOwotCURFQlVHRlNfRldTVEFUU19BREQoZXZlbnQsIHJ4X21pc21hdGNoKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGV2ZW50LCByeF9tZW1fZW1wdHkpOwotCURFQlVHRlNfRldTVEFUU19BREQoZXZlbnQsIHJ4X3Bvb2wpOwotCURFQlVHRlNfRldTVEFUU19BREQoZXZlbnQsIG9vbV9sYXRlKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKGV2ZW50LCBwaHlfdHJhbnNtaXRfZXJyb3IpOwotCURFQlVHRlNfRldTVEFUU19BREQoZXZlbnQsIHR4X3N0dWNrKTsKLQotCURFQlVHRlNfRldTVEFUU19BREQocHMsIHBzcG9sbF90aW1lb3V0cyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwcywgdXBzZF90aW1lb3V0cyk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChwcywgdXBzZF9tYXhfc3B0aW1lKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHBzLCB1cHNkX21heF9hcHR1cm4pOwotCURFQlVHRlNfRldTVEFUU19BREQocHMsIHBzcG9sbF9tYXhfYXB0dXJuKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHBzLCBwc3BvbGxfdXRpbGl6YXRpb24pOwotCURFQlVHRlNfRldTVEFUU19BREQocHMsIHVwc2RfdXRpbGl6YXRpb24pOwotCi0JREVCVUdGU19GV1NUQVRTX0FERChyeHBpcGUsIHJ4X3ByZXBfYmVhY29uX2Ryb3ApOwotCURFQlVHRlNfRldTVEFUU19BREQocnhwaXBlLCBkZXNjcl9ob3N0X2ludF90cmlnX3J4X2RhdGEpOwotCURFQlVHRlNfRldTVEFUU19BREQocnhwaXBlLCBiZWFjb25fYnVmZmVyX3RocmVzX2hvc3RfaW50X3RyaWdfcnhfZGF0YSk7Ci0JREVCVUdGU19GV1NUQVRTX0FERChyeHBpcGUsIG1pc3NlZF9iZWFjb25faG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKLQlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4cGlwZSwgdHhfeGZyX2hvc3RfaW50X3RyaWdfcnhfZGF0YSk7Ci0KLQlERUJVR0ZTX0FERCh0eF9xdWV1ZV9sZW4sIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOwotCURFQlVHRlNfQUREKHJldHJ5X2NvdW50LCB3bC0+ZGVidWdmcy5yb290ZGlyKTsKLQlERUJVR0ZTX0FERChleGNlc3NpdmVfcmV0cmllcywgd2wtPmRlYnVnZnMucm9vdGRpcik7Ci0KLW91dDoKLQlpZiAocmV0IDwgMCkKLQkJd2wxMnh4X2RlYnVnZnNfZGVsZXRlX2ZpbGVzKHdsKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgd2wxMnh4X2RlYnVnZnNfcmVzZXQoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JbWVtc2V0KHdsLT5zdGF0cy5md19zdGF0cywgMCwgc2l6ZW9mKCp3bC0+c3RhdHMuZndfc3RhdHMpKTsKLQl3bC0+c3RhdHMucmV0cnlfY291bnQgPSAwOwotCXdsLT5zdGF0cy5leGNlc3NpdmVfcmV0cmllcyA9IDA7Ci19Ci0KLWludCB3bDEyeHhfZGVidWdmc19pbml0KHN0cnVjdCB3bDEyeHggKndsKQotewotCWludCByZXQ7Ci0KLQl3bC0+ZGVidWdmcy5yb290ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKEtCVUlMRF9NT0ROQU1FLCBOVUxMKTsKLQotCWlmIChJU19FUlIod2wtPmRlYnVnZnMucm9vdGRpcikpIHsKLQkJcmV0ID0gUFRSX0VSUih3bC0+ZGVidWdmcy5yb290ZGlyKTsKLQkJd2wtPmRlYnVnZnMucm9vdGRpciA9IE5VTEw7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXdsLT5kZWJ1Z2ZzLmZ3X3N0YXRpc3RpY3MgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImZ3LXN0YXRpc3RpY3MiLAotCQkJCQkJICAgICAgIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOwotCi0JaWYgKElTX0VSUih3bC0+ZGVidWdmcy5md19zdGF0aXN0aWNzKSkgewotCQlyZXQgPSBQVFJfRVJSKHdsLT5kZWJ1Z2ZzLmZ3X3N0YXRpc3RpY3MpOwotCQl3bC0+ZGVidWdmcy5md19zdGF0aXN0aWNzID0gTlVMTDsKLQkJZ290byBlcnJfcm9vdDsKLQl9Ci0KLQl3bC0+c3RhdHMuZndfc3RhdHMgPSBremFsbG9jKHNpemVvZigqd2wtPnN0YXRzLmZ3X3N0YXRzKSwKLQkJCQkgICAgICBHRlBfS0VSTkVMKTsKLQotCWlmICghd2wtPnN0YXRzLmZ3X3N0YXRzKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2Z3OwotCX0KLQotCXdsLT5zdGF0cy5md19zdGF0c191cGRhdGUgPSBqaWZmaWVzOwotCi0JcmV0ID0gd2wxMnh4X2RlYnVnZnNfYWRkX2ZpbGVzKHdsKTsKLQotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycl9maWxlOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9maWxlOgotCWtmcmVlKHdsLT5zdGF0cy5md19zdGF0cyk7Ci0Jd2wtPnN0YXRzLmZ3X3N0YXRzID0gTlVMTDsKLQotZXJyX2Z3OgotCWRlYnVnZnNfcmVtb3ZlKHdsLT5kZWJ1Z2ZzLmZ3X3N0YXRpc3RpY3MpOwotCXdsLT5kZWJ1Z2ZzLmZ3X3N0YXRpc3RpY3MgPSBOVUxMOwotCi1lcnJfcm9vdDoKLQlkZWJ1Z2ZzX3JlbW92ZSh3bC0+ZGVidWdmcy5yb290ZGlyKTsKLQl3bC0+ZGVidWdmcy5yb290ZGlyID0gTlVMTDsKLQotZXJyOgotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgd2wxMnh4X2RlYnVnZnNfZXhpdChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQl3bDEyeHhfZGVidWdmc19kZWxldGVfZmlsZXMod2wpOwotCi0Ja2ZyZWUod2wtPnN0YXRzLmZ3X3N0YXRzKTsKLQl3bC0+c3RhdHMuZndfc3RhdHMgPSBOVUxMOwotCi0JZGVidWdmc19yZW1vdmUod2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcyk7Ci0Jd2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcyA9IE5VTEw7Ci0KLQlkZWJ1Z2ZzX3JlbW92ZSh3bC0+ZGVidWdmcy5yb290ZGlyKTsKLQl3bC0+ZGVidWdmcy5yb290ZGlyID0gTlVMTDsKLQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9kZWJ1Z2ZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2MmNkY2IuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgV0wxMlhYX0RFQlVHRlNfSAotI2RlZmluZSBXTDEyWFhfREVCVUdGU19ICi0KLSNpbmNsdWRlICJ3bDEyeHguaCIKLQotaW50IHdsMTJ4eF9kZWJ1Z2ZzX2luaXQoc3RydWN0IHdsMTJ4eCAqd2wpOwotdm9pZCB3bDEyeHhfZGVidWdmc19leGl0KHN0cnVjdCB3bDEyeHggKndsKTsKLXZvaWQgd2wxMnh4X2RlYnVnZnNfcmVzZXQoc3RydWN0IHdsMTJ4eCAqd2wpOwotCi0jZW5kaWYgLyogV0wxMlhYX0RFQlVHRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZXZlbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk1MjljYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZXZlbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4Ci0gKgotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJ3bDEyeHguaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJzcGkuaCIKLSNpbmNsdWRlICJldmVudC5oIgotI2luY2x1ZGUgInBzLmgiCi0KLXN0YXRpYyBpbnQgd2wxMnh4X2V2ZW50X3NjYW5fY29tcGxldGUoc3RydWN0IHdsMTJ4eCAqd2wsCi0JCQkJICAgICAgc3RydWN0IGV2ZW50X21haWxib3ggKm1ib3gpCi17Ci0Jd2wxMnh4X2RlYnVnKERFQlVHX0VWRU5ULCAic3RhdHVzOiAweCV4LCBjaGFubmVsczogJWQiLAotCQkgICAgIG1ib3gtPnNjaGVkdWxlZF9zY2FuX3N0YXR1cywKLQkJICAgICBtYm94LT5zY2hlZHVsZWRfc2Nhbl9jaGFubmVscyk7Ci0KLQlpZiAod2wtPnNjYW5uaW5nKSB7Ci0JCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgZmFsc2UpOwotCQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCQl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgd2wxMnh4X2V2ZW50X21ib3hfZHVtcChzdHJ1Y3QgZXZlbnRfbWFpbGJveCAqbWJveCkKLXsKLQl3bDEyeHhfZGVidWcoREVCVUdfRVZFTlQsICJNQk9YIERVTVA6Iik7Ci0Jd2wxMnh4X2RlYnVnKERFQlVHX0VWRU5ULCAiXHR2ZWN0b3I6IDB4JXgiLCBtYm94LT5ldmVudHNfdmVjdG9yKTsKLQl3bDEyeHhfZGVidWcoREVCVUdfRVZFTlQsICJcdG1hc2s6IDB4JXgiLCBtYm94LT5ldmVudHNfbWFzayk7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X2V2ZW50X3Byb2Nlc3Moc3RydWN0IHdsMTJ4eCAqd2wsIHN0cnVjdCBldmVudF9tYWlsYm94ICptYm94KQotewotCWludCByZXQ7Ci0JdTMyIHZlY3RvcjsKLQotCXdsMTJ4eF9ldmVudF9tYm94X2R1bXAobWJveCk7Ci0KLQl2ZWN0b3IgPSBtYm94LT5ldmVudHNfdmVjdG9yICYgfihtYm94LT5ldmVudHNfbWFzayk7Ci0Jd2wxMnh4X2RlYnVnKERFQlVHX0VWRU5ULCAidmVjdG9yOiAweCV4IiwgdmVjdG9yKTsKLQotCWlmICh2ZWN0b3IgJiBTQ0FOX0NPTVBMRVRFX0VWRU5UX0lEKSB7Ci0JCXJldCA9IHdsMTJ4eF9ldmVudF9zY2FuX2NvbXBsZXRlKHdsLCBtYm94KTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmICh2ZWN0b3IgJiBCU1NfTE9TRV9FVkVOVF9JRCkgewotCQl3bDEyeHhfZGVidWcoREVCVUdfRVZFTlQsICJCU1NfTE9TRV9FVkVOVCIpOwotCi0JCWlmICh3bC0+cHNtX3JlcXVlc3RlZCAmJiB3bC0+cHNtKSB7Ci0JCQlyZXQgPSB3bDEyeHhfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2V2ZW50X3VubWFzayhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9ldmVudF9tYm94X21hc2sod2wsIH4od2wtPmV2ZW50X21hc2spKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi12b2lkIHdsMTJ4eF9ldmVudF9tYm94X2NvbmZpZyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQl3bC0+bWJveF9wdHJbMF0gPSB3bDEyeHhfcmVnX3JlYWQzMih3bCwgUkVHX0VWRU5UX01BSUxCT1hfUFRSKTsKLQl3bC0+bWJveF9wdHJbMV0gPSB3bC0+bWJveF9wdHJbMF0gKyBzaXplb2Yoc3RydWN0IGV2ZW50X21haWxib3gpOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0VWRU5ULCAiTUJPWCBwdHJzOiAweCV4IDB4JXgiLAotCQkgICAgIHdsLT5tYm94X3B0clswXSwgd2wtPm1ib3hfcHRyWzFdKTsKLX0KLQotaW50IHdsMTJ4eF9ldmVudF9oYW5kbGUoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IG1ib3hfbnVtKQotewotCXN0cnVjdCBldmVudF9tYWlsYm94IG1ib3g7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19FVkVOVCwgIkVWRU5UIG9uIG1ib3ggJWQiLCBtYm94X251bSk7Ci0KLQlpZiAobWJveF9udW0gPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIGZpcnN0IHdlIHJlYWQgdGhlIG1ib3ggZGVzY3JpcHRvciAqLwotCXdsMTJ4eF9zcGlfbWVtX3JlYWQod2wsIHdsLT5tYm94X3B0clttYm94X251bV0sICZtYm94LAotCQkJICAgIHNpemVvZihzdHJ1Y3QgZXZlbnRfbWFpbGJveCkpOwotCi0JLyogcHJvY2VzcyB0aGUgZGVzY3JpcHRvciAqLwotCXJldCA9IHdsMTJ4eF9ldmVudF9wcm9jZXNzKHdsLCAmbWJveCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiB0aGVuIHdlIGxldCB0aGUgZmlybXdhcmUga25vdyBpdCBjYW4gZ28gb24uLi4qLwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfVFJJRywgSU5UUl9UUklHX0VWRU5UX0FDSyk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ldmVudC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNGMyZjcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAotICoKLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fV0wxMlhYX0VWRU5UX0hfXwotI2RlZmluZSBfX1dMMTJYWF9FVkVOVF9IX18KLQotLyoKLSAqIE1ib3ggZXZlbnRzCi0gKgotICogVGhlIGV2ZW50IG1lY2hhbmlzbSBpcyBiYXNlZCBvbiBhIHBhaXIgb2YgZXZlbnQgYnVmZmVycyAoYnVmZmVycyBBIGFuZAotICogQikgYXQgZml4ZWQgbG9jYXRpb25zIGluIHRoZSB0YXJnZXQncyBtZW1vcnkuIFRoZSBob3N0IHByb2Nlc3NlcyBvbmUKLSAqIGJ1ZmZlciB3aGlsZSB0aGUgb3RoZXIgYnVmZmVyIGNvbnRpbnVlcyB0byBjb2xsZWN0IGV2ZW50cy4gSWYgdGhlIGhvc3QKLSAqIGlzIG5vdCBwcm9jZXNzaW5nIGV2ZW50cywgYW4gaW50ZXJydXB0IGlzIGlzc3VlZCB0byBzaWduYWwgdGhhdCBhIGJ1ZmZlcgotICogaXMgcmVhZHkuIE9uY2UgdGhlIGhvc3QgaXMgZG9uZSB3aXRoIHByb2Nlc3NpbmcgZXZlbnRzIGZyb20gb25lIGJ1ZmZlciwKLSAqIGl0IHNpZ25hbHMgdGhlIHRhcmdldCAod2l0aCBhbiBBQ0sgaW50ZXJydXB0KSB0aGF0IHRoZSBldmVudCBidWZmZXIgaXMKLSAqIGZyZWUuCi0gKi8KLQotZW51bSB7Ci0JUkVTRVJWRUQxX0VWRU5UX0lEICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgwKSwKLQlSRVNFUlZFRDJfRVZFTlRfSUQgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDEpLAotCU1FQVNVUkVNRU5UX1NUQVJUX0VWRU5UX0lEICAgICAgICAgICAgICAgPSBCSVQoMiksCi0JU0NBTl9DT01QTEVURV9FVkVOVF9JRCAgICAgICAgICAgICAgICAgICA9IEJJVCgzKSwKLQlDQUxJQlJBVElPTl9DT01QTEVURV9FVkVOVF9JRCAgICAgICAgICAgID0gQklUKDQpLAotCVJPQU1JTkdfVFJJR0dFUl9MT1dfUlNTSV9FVkVOVF9JRCAgICAgICAgPSBCSVQoNSksCi0JUFNfUkVQT1JUX0VWRU5UX0lEICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCg2KSwKLQlTWU5DSFJPTklaQVRJT05fVElNRU9VVF9FVkVOVF9JRCAgICAgICAgID0gQklUKDcpLAotCUhFQUxUSF9SRVBPUlRfRVZFTlRfSUQgICAgICAgICAgICAgICAgICAgPSBCSVQoOCksCi0JQUNJX0RFVEVDVElPTl9FVkVOVF9JRCAgICAgICAgICAgICAgICAgICA9IEJJVCg5KSwKLQlERUJVR19SRVBPUlRfRVZFTlRfSUQgICAgICAgICAgICAgICAgICAgID0gQklUKDEwKSwKLQlNQUNfU1RBVFVTX0VWRU5UX0lEICAgICAgICAgICAgICAgICAgICAgID0gQklUKDExKSwKLQlESVNDT05ORUNUX0VWRU5UX0NPTVBMRVRFX0lEICAgICAgICAgICAgID0gQklUKDEyKSwKLQlKT0lOX0VWRU5UX0NPTVBMRVRFX0lEICAgICAgICAgICAgICAgICAgID0gQklUKDEzKSwKLQlDSEFOTkVMX1NXSVRDSF9DT01QTEVURV9FVkVOVF9JRCAgICAgICAgID0gQklUKDE0KSwKLQlCU1NfTE9TRV9FVkVOVF9JRCAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDE1KSwKLQlST0FNSU5HX1RSSUdHRVJfTUFYX1RYX1JFVFJZX0VWRU5UX0lEICAgID0gQklUKDE2KSwKLQlNRUFTVVJFTUVOVF9DT01QTEVURV9FVkVOVF9JRCAgICAgICAgICAgID0gQklUKDE3KSwKLQlBUF9ESVNDT1ZFUllfQ09NUExFVEVfRVZFTlRfSUQgICAgICAgICAgID0gQklUKDE4KSwKLQlTQ0hFRFVMRURfU0NBTl9DT01QTEVURV9FVkVOVF9JRCAgICAgICAgID0gQklUKDE5KSwKLQlQU1BPTExfREVMSVZFUllfRkFJTFVSRV9FVkVOVF9JRCAJID0gQklUKDIwKSwKLQlSRVNFVF9CU1NfRVZFTlRfSUQgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDIxKSwKLQlSRUdBSU5FRF9CU1NfRVZFTlRfSUQgICAgICAgICAgICAgICAgICAgID0gQklUKDIyKSwKLQlST0FNSU5HX1RSSUdHRVJfUkVHQUlORURfUlNTSV9FVkVOVF9JRCAgID0gQklUKDIzKSwKLQlST0FNSU5HX1RSSUdHRVJfTE9XX1NOUl9FVkVOVF9JRCAgICAgICAgID0gQklUKDI0KSwKLQlST0FNSU5HX1RSSUdHRVJfUkVHQUlORURfU05SX0VWRU5UX0lEICAgID0gQklUKDI1KSwKLQotCURCR19FVkVOVF9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMjYpLAotCUJUX1BUQV9TRU5TRV9FVkVOVF9JRCAgICAgICAgICAgICAgICAgICAgPSBCSVQoMjcpLAotCUJUX1BUQV9QUkVESUNUSU9OX0VWRU5UX0lEICAgICAgICAgICAgICAgPSBCSVQoMjgpLAotCUJUX1BUQV9BVkFMQU5DSEVfRVZFTlRfSUQgICAgICAgICAgICAgICAgPSBCSVQoMjkpLAotCi0JUExUX1JYX0NBTElCUkFUSU9OX0NPTVBMRVRFX0VWRU5UX0lEICAgICA9IEJJVCgzMCksCi0KLQlFVkVOVF9NQk9YX0FMTF9FVkVOVF9JRCAgICAgICAgICAgICAgICAgID0gMHg3ZmZmZmZmZiwKLX07Ci0KLXN0cnVjdCBldmVudF9kZWJ1Z19yZXBvcnQgewotCXU4IGRlYnVnX2V2ZW50X2lkOwotCXU4IG51bV9wYXJhbXM7Ci0JdTE2IHBhZDsKLQl1MzIgcmVwb3J0XzE7Ci0JdTMyIHJlcG9ydF8yOwotCXUzMiByZXBvcnRfMzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgZXZlbnRfbWFpbGJveCB7Ci0JdTMyIGV2ZW50c192ZWN0b3I7Ci0JdTMyIGV2ZW50c19tYXNrOwotCXUzMiByZXNlcnZlZF8xOwotCXUzMiByZXNlcnZlZF8yOwotCi0JY2hhciBhdmVyYWdlX3Jzc2lfbGV2ZWw7Ci0JdTggcHNfc3RhdHVzOwotCXU4IGNoYW5uZWxfc3dpdGNoX3N0YXR1czsKLQl1OCBzY2hlZHVsZWRfc2Nhbl9zdGF0dXM7Ci0KLQkvKiBDaGFubmVscyBzY2FubmVkIGJ5IHRoZSBzY2hlZHVsZWQgc2NhbiAqLwotCXUxNiBzY2hlZHVsZWRfc2Nhbl9jaGFubmVsczsKLQotCS8qIElmIGJpdCAwIGlzIHNldCAtPiB0YXJnZXQncyBmYXRhbCBlcnJvciAqLwotCXUxNiBoZWFsdGhfcmVwb3J0OwotCXUxNiBiYWRfZmZ0X2NvdW50ZXI7Ci0JdTggYnRfcHRhX3NlbnNlX2luZm87Ci0JdTggYnRfcHRhX3Byb3RlY3RpdmVfaW5mbzsKLQl1MzIgcmVzZXJ2ZWQ7Ci0JdTMyIGRlYnVnX3JlcG9ydFsyXTsKLQotCS8qIE51bWJlciBvZiBGQ1MgZXJyb3JzIHNpbmNlIGxhc3QgZXZlbnQgKi8KLQl1MzIgZmNzX2Vycl9jb3VudGVyOwotCi0Jc3RydWN0IGV2ZW50X2RlYnVnX3JlcG9ydCByZXBvcnQ7Ci0JdTggYXZlcmFnZV9zbnJfbGV2ZWw7Ci0JdTggcGFkZGluZ1sxOV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotaW50IHdsMTJ4eF9ldmVudF91bm1hc2soc3RydWN0IHdsMTJ4eCAqd2wpOwotdm9pZCB3bDEyeHhfZXZlbnRfbWJveF9jb25maWcoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9ldmVudF9oYW5kbGUoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IG1ib3gpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTU3M2E2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pbml0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSAiaW5pdC5oIgotI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgotI2luY2x1ZGUgImFjeC5oIgotI2luY2x1ZGUgImNtZC5oIgotCi1pbnQgd2wxMnh4X2h3X2luaXRfaHdlbmNfY29uZmlnKHN0cnVjdCB3bDEyeHggKndsKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfYWN4X2ZlYXR1cmVfY2ZnKHdsKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiY291bGRuJ3Qgc2V0IGZlYXR1cmUgY29uZmlnIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gd2wxMnh4X2FjeF9kZWZhdWx0X2tleSh3bCwgd2wtPmRlZmF1bHRfa2V5KTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiY291bGRuJ3Qgc2V0IGRlZmF1bHQga2V5Iik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfaHdfaW5pdF90ZW1wbGF0ZXNfY29uZmlnKHN0cnVjdCB3bDEyeHggKndsKQotewotCWludCByZXQ7Ci0JdTggcGFydGlhbF92Ym1bUEFSVElBTF9WQk1fTUFYXTsKLQotCS8qIHNlbmQgZW1wdHkgdGVtcGxhdGVzIGZvciBmdyBtZW1vcnkgcmVzZXJ2YXRpb24gKi8KLQlyZXQgPSB3bDEyeHhfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1BST0JFX1JFUSwgTlVMTCwKLQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHdsMTJ4eF9wcm9iZV9yZXFfdGVtcGxhdGUpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfTlVMTF9EQVRBLCBOVUxMLAotCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMnh4X251bGxfZGF0YV90ZW1wbGF0ZSkpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMnh4X2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QU19QT0xMLCBOVUxMLAotCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMnh4X3BzX3BvbGxfdGVtcGxhdGUpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfUU9TX05VTExfREFUQSwgTlVMTCwKLQkJCQkgICAgICBzaXplb2YKLQkJCQkgICAgICAoc3RydWN0IHdsMTJ4eF9xb3NfbnVsbF9kYXRhX3RlbXBsYXRlKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1BST0JFX1JFU1AsIE5VTEwsCi0JCQkJICAgICAgc2l6ZW9mCi0JCQkJICAgICAgKHN0cnVjdCB3bDEyeHhfcHJvYmVfcmVzcF90ZW1wbGF0ZSkpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMnh4X2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9CRUFDT04sIE5VTEwsCi0JCQkJICAgICAgc2l6ZW9mCi0JCQkJICAgICAgKHN0cnVjdCB3bDEyeHhfYmVhY29uX3RlbXBsYXRlKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiB0aW0gdGVtcGxhdGVzLCBmaXJzdCByZXNlcnZlIHNwYWNlIHRoZW4gYWxsb2NhdGUgYW4gZW1wdHkgb25lICovCi0JbWVtc2V0KHBhcnRpYWxfdmJtLCAwLCBQQVJUSUFMX1ZCTV9NQVgpOwotCXJldCA9IHdsMTJ4eF9jbWRfdmJtKHdsLCBUSU1fRUxFX0lELCBwYXJ0aWFsX3ZibSwgUEFSVElBTF9WQk1fTUFYLCAwKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfdmJtKHdsLCBUSU1fRUxFX0lELCBwYXJ0aWFsX3ZibSwgMSwgMCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9od19pbml0X3J4X2NvbmZpZyhzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTMyIGNvbmZpZywgdTMyIGZpbHRlcikKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9yeF9tc2R1X2xpZmVfdGltZSh3bCwgUlhfTVNEVV9MSUZFVElNRV9ERUYpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9yeF9jb25maWcod2wsIGNvbmZpZywgZmlsdGVyKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2h3X2luaXRfcGh5X2NvbmZpZyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9wZF90aHJlc2hvbGQod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9zbG90KHdsLCBERUZBVUxUX1NMT1RfVElNRSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTJ4eF9hY3hfc2VydmljZV9wZXJpb2RfdGltZW91dCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfYWN4X3J0c190aHJlc2hvbGQod2wsIFJUU19USFJFU0hPTERfREVGKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2h3X2luaXRfYmVhY29uX2ZpbHRlcihzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9iZWFjb25fZmlsdGVyX29wdCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfYWN4X2JlYWNvbl9maWx0ZXJfdGFibGUod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfaHdfaW5pdF9wdGEoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHdsMTJ4eF9hY3hfc2dfZW5hYmxlKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTJ4eF9hY3hfc2dfY2ZnKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2h3X2luaXRfZW5lcmd5X2RldGVjdGlvbihzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9jY2FfdGhyZXNob2xkKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2h3X2luaXRfYmVhY29uX2Jyb2FkY2FzdChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9iY25fZHRpbV9vcHRpb25zKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2h3X2luaXRfcG93ZXJfYXV0aChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlyZXR1cm4gd2wxMnh4X2FjeF9zbGVlcF9hdXRoKHdsLCBXTDEyWFhfUFNNX0NBTSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhiNmNkMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2lmbmRlZiBfX1dMMTJYWF9JTklUX0hfXwotI2RlZmluZSBfX1dMMTJYWF9JTklUX0hfXwotCi0jaW5jbHVkZSAid2wxMnh4LmgiCi0KLWludCB3bDEyeHhfaHdfaW5pdF9od2VuY19jb25maWcoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9od19pbml0X3RlbXBsYXRlc19jb25maWcoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9od19pbml0X21lbV9jb25maWcoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9od19pbml0X3J4X2NvbmZpZyhzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTMyIGNvbmZpZywgdTMyIGZpbHRlcik7Ci1pbnQgd2wxMnh4X2h3X2luaXRfcGh5X2NvbmZpZyhzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2h3X2luaXRfYmVhY29uX2ZpbHRlcihzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2h3X2luaXRfcHRhKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfaHdfaW5pdF9lbmVyZ3lfZGV0ZWN0aW9uKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfaHdfaW5pdF9iZWFjb25fYnJvYWRjYXN0KHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfaHdfaW5pdF9wb3dlcl9hdXRoKHN0cnVjdCB3bDEyeHggKndsKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAzZDYxMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM1OCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvd2wxMnh4Lmg+Ci0KLSNpbmNsdWRlICJ3bDEyeHguaCIKLSNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJ3bDEyNTEuaCIKLSNpbmNsdWRlICJzcGkuaCIKLSNpbmNsdWRlICJldmVudC5oIgotI2luY2x1ZGUgInR4LmgiCi0jaW5jbHVkZSAicnguaCIKLSNpbmNsdWRlICJwcy5oIgotI2luY2x1ZGUgImluaXQuaCIKLSNpbmNsdWRlICJkZWJ1Z2ZzLmgiCi0KLXN0YXRpYyB2b2lkIHdsMTJ4eF9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JZGlzYWJsZV9pcnEod2wtPmlycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTJ4eF9wb3dlcl9vZmYoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0Jd2wtPnNldF9wb3dlcihmYWxzZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTJ4eF9wb3dlcl9vbihzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQl3bC0+c2V0X3Bvd2VyKHRydWUpOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3Qgd2wxMnh4X2lycShpbnQgaXJxLCB2b2lkICpjb29raWUpCi17Ci0Jc3RydWN0IHdsMTJ4eCAqd2w7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfSVJRLCAiSVJRIik7Ci0KLQl3bCA9IGNvb2tpZTsKLQotCXNjaGVkdWxlX3dvcmsoJndsLT5pcnFfd29yayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X2ZldGNoX2Zpcm13YXJlKHN0cnVjdCB3bDEyeHggKndsKQotewotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCB3bC0+Y2hpcC5md19maWxlbmFtZSwgJndsLT5zcGktPmRldik7Ci0KLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoImNvdWxkIG5vdCBnZXQgZmlybXdhcmU6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoZnctPnNpemUgJSA0KSB7Ci0JCXdsMTJ4eF9lcnJvcigiZmlybXdhcmUgc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMzIgYml0czogJXp1IiwKLQkJCSAgICAgZnctPnNpemUpOwotCQlyZXQgPSAtRUlMU0VROwotCQlnb3RvIG91dDsKLQl9Ci0KLQl3bC0+ZndfbGVuID0gZnctPnNpemU7Ci0Jd2wtPmZ3ID0ga21hbGxvYyh3bC0+ZndfbGVuLCBHRlBfS0VSTkVMKTsKLQotCWlmICghd2wtPmZ3KSB7Ci0JCXdsMTJ4eF9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGZpcm13YXJlIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCW1lbWNweSh3bC0+ZncsIGZ3LT5kYXRhLCB3bC0+ZndfbGVuKTsKLQotCXJldCA9IDA7Ci0KLW91dDoKLQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X2ZldGNoX252cyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwotCWludCByZXQ7Ci0KLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgd2wtPmNoaXAubnZzX2ZpbGVuYW1lLCAmd2wtPnNwaS0+ZGV2KTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigiY291bGQgbm90IGdldCBudnMgZmlsZTogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChmdy0+c2l6ZSAlIDQpIHsKLQkJd2wxMnh4X2Vycm9yKCJudnMgc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMzIgYml0czogJXp1IiwKLQkJCSAgICAgZnctPnNpemUpOwotCQlyZXQgPSAtRUlMU0VROwotCQlnb3RvIG91dDsKLQl9Ci0KLQl3bC0+bnZzX2xlbiA9IGZ3LT5zaXplOwotCXdsLT5udnMgPSBrbWFsbG9jKHdsLT5udnNfbGVuLCBHRlBfS0VSTkVMKTsKLQotCWlmICghd2wtPm52cykgewotCQl3bDEyeHhfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBudnMgZmlsZSIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltZW1jcHkod2wtPm52cywgZnctPmRhdGEsIHdsLT5udnNfbGVuKTsKLQotCXJldCA9IDA7Ci0KLW91dDoKLQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTJ4eF9md193YWtldXAoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JdTMyIGVscF9yZWc7Ci0KLQllbHBfcmVnID0gRUxQQ1RSTF9XQUtFX1VQOwotCXdsMTJ4eF93cml0ZTMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIsIGVscF9yZWcpOwotCWVscF9yZWcgPSB3bDEyeHhfcmVhZDMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIpOwotCi0JaWYgKCEoZWxwX3JlZyAmIEVMUENUUkxfV0xBTl9SRUFEWSkpIHsKLQkJd2wxMnh4X3dhcm5pbmcoIldMQU4gbm90IHJlYWR5Iik7Ci0JCWVscF9yZWcgPSBFTFBDVFJMX1dBS0VfVVBfV0xBTl9SRUFEWTsKLQkJd2wxMnh4X3dyaXRlMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUiwgZWxwX3JlZyk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF9jaGlwX3dha2V1cChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCXdsMTJ4eF9wb3dlcl9vbih3bCk7Ci0JbXNsZWVwKHdsLT5jaGlwLnBvd2VyX29uX3NsZWVwKTsKLQl3bDEyeHhfc3BpX3Jlc2V0KHdsKTsKLQl3bDEyeHhfc3BpX2luaXQod2wpOwotCi0JLyogV2UgZG9uJ3QgbmVlZCBhIHJlYWwgbWVtb3J5IHBhcnRpdGlvbiBoZXJlLCBiZWNhdXNlIHdlIG9ubHkgd2FudAotCSAqIHRvIHVzZSB0aGUgcmVnaXN0ZXJzIGF0IHRoaXMgcG9pbnQuICovCi0Jd2wxMnh4X3NldF9wYXJ0aXRpb24od2wsCi0JCQkgICAgIDB4MDAwMDAwMDAsCi0JCQkgICAgIDB4MDAwMDAwMDAsCi0JCQkgICAgIFJFR0lTVEVSU19CQVNFLAotCQkJICAgICBSRUdJU1RFUlNfRE9XTl9TSVpFKTsKLQotCS8qIEVMUCBtb2R1bGUgd2FrZSB1cCAqLwotCXdsMTJ4eF9md193YWtldXAod2wpOwotCi0JLyogd2hhbF9Gd0N0cmxfQm9vdFNtKCkgKi8KLQotCS8qIDAuIHJlYWQgY2hpcCBpZCBmcm9tIENISVBfSUQgKi8KLQl3bC0+Y2hpcC5pZCA9IHdsMTJ4eF9yZWdfcmVhZDMyKHdsLCBDSElQX0lEX0IpOwotCi0JLyogMS4gY2hlY2sgaWYgY2hpcCBpZCBpcyB2YWxpZCAqLwotCi0Jc3dpdGNoICh3bC0+Y2hpcC5pZCkgewotCWNhc2UgQ0hJUF9JRF8xMjUxX1BHMTI6Ci0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCAweCV4ICgxMjUxIFBHMTIpIiwKLQkJCSAgICAgd2wtPmNoaXAuaWQpOwotCi0JCXdsMTI1MV9zZXR1cCh3bCk7Ci0KLQkJYnJlYWs7Ci0JY2FzZSBDSElQX0lEXzEyNzFfUEcxMDoKLQljYXNlIENISVBfSURfMTI1MV9QRzEwOgotCWNhc2UgQ0hJUF9JRF8xMjUxX1BHMTE6Ci0JZGVmYXVsdDoKLQkJd2wxMnh4X2Vycm9yKCJ1bnN1cHBvcnRlZCBjaGlwIGlkOiAweCV4Iiwgd2wtPmNoaXAuaWQpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAod2wtPmZ3ID09IE5VTEwpIHsKLQkJcmV0ID0gd2wxMnh4X2ZldGNoX2Zpcm13YXJlKHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBObyBOVlMgZnJvbSBuZXRsaW5rLCB0cnkgdG8gZ2V0IGl0IGZyb20gdGhlIGZpbGVzeXN0ZW0gKi8KLQlpZiAod2wtPm52cyA9PSBOVUxMKSB7Ci0JCXJldCA9IHdsMTJ4eF9mZXRjaF9udnMod2wpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTJ4eF9maWx0ZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHdsMTJ4eCAqd2wgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdsMTJ4eCwgZmlsdGVyX3dvcmspOwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JaWYgKHdsLT5zdGF0ZSA9PSBXTDEyWFhfU1RBVEVfT0ZGKQotCQlnb3RvIG91dDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfam9pbih3bCwgd2wtPmJzc190eXBlLCAxLCAxMDAsIDApOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotb3V0OgotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLX0KLQotaW50IHdsMTJ4eF9wbHRfc3RhcnQoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9ub3RpY2UoInBvd2VyIHVwIik7Ci0KLQlpZiAod2wtPnN0YXRlICE9IFdMMTJYWF9TVEFURV9PRkYpIHsKLQkJd2wxMnh4X2Vycm9yKCJjYW5ub3QgZ28gaW50byBQTFQgc3RhdGUgYmVjYXVzZSBub3QgIgotCQkJICAgICAiaW4gb2ZmIHN0YXRlOiAlZCIsIHdsLT5zdGF0ZSk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0Jd2wtPnN0YXRlID0gV0wxMlhYX1NUQVRFX1BMVDsKLQotCXJldCA9IHdsMTJ4eF9jaGlwX3dha2V1cCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bC0+Y2hpcC5vcF9ib290KHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXdsMTJ4eF9ub3RpY2UoImZpcm13YXJlIGJvb3RlZCBpbiBQTFQgbW9kZSAoJXMpIiwgd2wtPmNoaXAuZndfdmVyKTsKLQotCXJldCA9IHdsLT5jaGlwLm9wX3BsdF9pbml0KHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X3BsdF9zdG9wKHN0cnVjdCB3bDEyeHggKndsKQotewotCXdsMTJ4eF9ub3RpY2UoInBvd2VyIGRvd24iKTsKLQotCWlmICh3bC0+c3RhdGUgIT0gV0wxMlhYX1NUQVRFX1BMVCkgewotCQl3bDEyeHhfZXJyb3IoImNhbm5vdCBwb3dlciBkb3duIGJlY2F1c2Ugbm90IGluIFBMVCAiCi0JCQkgICAgICJzdGF0ZTogJWQiLCB3bC0+c3RhdGUpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXdsMTJ4eF9kaXNhYmxlX2ludGVycnVwdHMod2wpOwotCXdsMTJ4eF9wb3dlcl9vZmYod2wpOwotCi0Jd2wtPnN0YXRlID0gV0wxMlhYX1NUQVRFX09GRjsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgd2wxMnh4X29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCB3bDEyeHggKndsID0gaHctPnByaXY7Ci0KLQlza2JfcXVldWVfdGFpbCgmd2wtPnR4X3F1ZXVlLCBza2IpOwotCi0Jc2NoZWR1bGVfd29yaygmd2wtPnR4X3dvcmspOwotCi0JLyoKLQkgKiBUaGUgd29ya3F1ZXVlIGlzIHNsb3cgdG8gcHJvY2VzcyB0aGUgdHhfcXVldWUgYW5kIHdlIG5lZWQgc3RvcAotCSAqIHRoZSBxdWV1ZSBoZXJlLCBvdGhlcndpc2UgdGhlIHF1ZXVlIHdpbGwgZ2V0IHRvbyBsb25nLgotCSAqLwotCWlmIChza2JfcXVldWVfbGVuKCZ3bC0+dHhfcXVldWUpID49IFdMMTJYWF9UWF9RVUVVRV9NQVhfTEVOR1RIKSB7Ci0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyh3bC0+aHcpOwotCi0JCS8qCi0JCSAqIEZJWE1FOiB0aGlzIGlzIHJhY3ksIHRoZSB2YXJpYWJsZSBpcyBub3QgcHJvcGVybHkKLQkJICogcHJvdGVjdGVkLiBNYXliZSBmaXggdGhpcyBieSByZW1vdmluZyB0aGUgc3R1cGlkCi0JCSAqIHZhcmlhYmxlIGFsdG9nZXRoZXIgYW5kIGNoZWNraW5nIHRoZSByZWFsIHF1ZXVlIHN0YXRlPwotCQkgKi8KLQkJd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSB0cnVlOwotCX0KLQotCXJldHVybiBORVRERVZfVFhfT0s7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCB3bDEyeHggKndsID0gaHctPnByaXY7Ci0JaW50IHJldCA9IDA7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzdGFydCIpOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCWlmICh3bC0+c3RhdGUgIT0gV0wxMlhYX1NUQVRFX09GRikgewotCQl3bDEyeHhfZXJyb3IoImNhbm5vdCBzdGFydCBiZWNhdXNlIG5vdCBpbiBvZmYgc3RhdGU6ICVkIiwKLQkJCSAgICAgd2wtPnN0YXRlKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSB3bDEyeHhfY2hpcF93YWtldXAod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wtPmNoaXAub3BfYm9vdCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gd2wtPmNoaXAub3BfaHdfaW5pdCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9zdGF0aW9uX2lkKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQl3bC0+c3RhdGUgPSBXTDEyWFhfU1RBVEVfT047Ci0KLQl3bDEyeHhfaW5mbygiZmlybXdhcmUgYm9vdGVkICglcykiLCB3bC0+Y2hpcC5md192ZXIpOwotCi1vdXQ6Ci0JaWYgKHJldCA8IDApCi0JCXdsMTJ4eF9wb3dlcl9vZmYod2wpOwotCi0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgd2wxMnh4X29wX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IHdsMTJ4eCAqd2wgPSBody0+cHJpdjsKLQotCXdsMTJ4eF9pbmZvKCJkb3duIik7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzdG9wIik7Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JV0FSTl9PTih3bC0+c3RhdGUgIT0gV0wxMlhYX1NUQVRFX09OKTsKLQotCWlmICh3bC0+c2Nhbm5pbmcpIHsKLQkJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQod2wtPmh3LCB0cnVlKTsKLQkJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQkJd2wtPnNjYW5uaW5nID0gZmFsc2U7Ci0JfQotCi0Jd2wtPnN0YXRlID0gV0wxMlhYX1NUQVRFX09GRjsKLQotCXdsMTJ4eF9kaXNhYmxlX2ludGVycnVwdHMod2wpOwotCi0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JY2FuY2VsX3dvcmtfc3luYygmd2wtPmlycV93b3JrKTsKLQljYW5jZWxfd29ya19zeW5jKCZ3bC0+dHhfd29yayk7Ci0JY2FuY2VsX3dvcmtfc3luYygmd2wtPmZpbHRlcl93b3JrKTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0KLQkvKiBsZXQncyBub3RpZnkgTUFDODAyMTEgYWJvdXQgdGhlIHJlbWFpbmluZyBwZW5kaW5nIFRYIGZyYW1lcyAqLwotCXdsMTJ4eF90eF9mbHVzaCh3bCk7Ci0KLQl3bDEyeHhfcG93ZXJfb2ZmKHdsKTsKLQotCW1lbXNldCh3bC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKLQl3bC0+bGlzdGVuX2ludCA9IDE7Ci0Jd2wtPmJzc190eXBlID0gTUFYX0JTU19UWVBFOwotCi0Jd2wtPmRhdGFfaW5fY291bnQgPSAwOwotCXdsLT5yeF9jb3VudGVyID0gMDsKLQl3bC0+cnhfaGFuZGxlZCA9IDA7Ci0Jd2wtPnJ4X2N1cnJlbnRfYnVmZmVyID0gMDsKLQl3bC0+cnhfbGFzdF9pZCA9IDA7Ci0Jd2wtPm5leHRfdHhfY29tcGxldGUgPSAwOwotCXdsLT5lbHAgPSBmYWxzZTsKLQl3bC0+cHNtID0gMDsKLQl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IGZhbHNlOwotCXdsLT5wb3dlcl9sZXZlbCA9IFdMMTJYWF9ERUZBVUxUX1BPV0VSX0xFVkVMOwotCi0Jd2wxMnh4X2RlYnVnZnNfcmVzZXQod2wpOwotCi0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQotewotCXN0cnVjdCB3bDEyeHggKndsID0gaHctPnByaXY7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7Ci0JaW50IHJldCA9IDA7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBhZGQgaW50ZXJmYWNlIHR5cGUgJWQgbWFjICVzIiwKLQkJICAgICBjb25mLT50eXBlLCBwcmludF9tYWMobWFjLCBjb25mLT5tYWNfYWRkcikpOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCXN3aXRjaCAoY29uZi0+dHlwZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJd2wtPmJzc190eXBlID0gQlNTX1RZUEVfU1RBX0JTUzsKLQkJYnJlYWs7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJd2wtPmJzc190eXBlID0gQlNTX1RZUEVfSUJTUzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChtZW1jbXAod2wtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pKSB7Ci0JCW1lbWNweSh3bC0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHdsLT5odywgd2wtPm1hY19hZGRyKTsKLQkJcmV0ID0gd2wxMnh4X2FjeF9zdGF0aW9uX2lkKHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgd2wxMnh4X29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKLXsKLQl3bDEyeHhfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSByZW1vdmUgaW50ZXJmYWNlIik7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X2J1aWxkX251bGxfZGF0YShzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlzdHJ1Y3Qgd2wxMnh4X251bGxfZGF0YV90ZW1wbGF0ZSB0ZW1wbGF0ZTsKLQotCWlmICghaXNfemVyb19ldGhlcl9hZGRyKHdsLT5ic3NpZCkpIHsKLQkJbWVtY3B5KHRlbXBsYXRlLmhlYWRlci5kYSwgd2wtPmJzc2lkLCBFVEhfQUxFTik7Ci0JCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuYnNzaWQsIHdsLT5ic3NpZCwgRVRIX0FMRU4pOwotCX0gZWxzZSB7Ci0JCW1lbXNldCh0ZW1wbGF0ZS5oZWFkZXIuZGEsIDB4ZmYsIEVUSF9BTEVOKTsKLQkJbWVtc2V0KHRlbXBsYXRlLmhlYWRlci5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOwotCX0KLQotCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuc2EsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCXRlbXBsYXRlLmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8Ci0JCQkJCQlJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMpOwotCi0JcmV0dXJuIHdsMTJ4eF9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfTlVMTF9EQVRBLCAmdGVtcGxhdGUsCi0JCQkJICAgICAgIHNpemVvZih0ZW1wbGF0ZSkpOwotCi19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X2J1aWxkX3BzX3BvbGwoc3RydWN0IHdsMTJ4eCAqd2wsIHUxNiBhaWQpCi17Ci0Jc3RydWN0IHdsMTJ4eF9wc19wb2xsX3RlbXBsYXRlIHRlbXBsYXRlOwotCi0JbWVtY3B5KHRlbXBsYXRlLmJzc2lkLCB3bC0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkodGVtcGxhdGUudGEsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCXRlbXBsYXRlLmFpZCA9IGFpZDsKLQl0ZW1wbGF0ZS5mYyA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMKTsKLQotCXJldHVybiB3bDEyeHhfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1BTX1BPTEwsICZ0ZW1wbGF0ZSwKLQkJCQkgICAgICAgc2l6ZW9mKHRlbXBsYXRlKSk7Ci0KLX0KLQotc3RhdGljIGludCB3bDEyeHhfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKLXsKLQlzdHJ1Y3Qgd2wxMnh4ICp3bCA9IGh3LT5wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKLQlpbnQgY2hhbm5lbCwgcmV0ID0gMDsKLQotCWNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgY29uZmlnIGNoICVkIHBzbSAlcyBwb3dlciAlZCIsCi0JCSAgICAgY2hhbm5lbCwKLQkJICAgICBjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTID8gIm9uIiA6ICJvZmYiLAotCQkgICAgIGNvbmYtPnBvd2VyX2xldmVsKTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0KLQlpZiAoY2hhbm5lbCAhPSB3bC0+Y2hhbm5lbCkgewotCQkvKiBGSVhNRTogdXNlIGJlYWNvbiBpbnRlcnZhbCBwcm92aWRlZCBieSBtYWM4MDIxMSAqLwotCQlyZXQgPSB3bDEyeHhfY21kX2pvaW4od2wsIHdsLT5ic3NfdHlwZSwgMSwgMTAwLCAwKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQotCQl3bC0+Y2hhbm5lbCA9IGNoYW5uZWw7Ci0JfQotCi0JcmV0ID0gd2wxMnh4X2J1aWxkX251bGxfZGF0YSh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMgJiYgIXdsLT5wc21fcmVxdWVzdGVkKSB7Ci0JCXdsMTJ4eF9pbmZvKCJwc20gZW5hYmxlZCIpOwotCi0JCXdsLT5wc21fcmVxdWVzdGVkID0gdHJ1ZTsKLQotCQkvKgotCQkgKiBXZSBlbnRlciBQU00gb25seSBpZiB3ZSdyZSBhbHJlYWR5IGFzc29jaWF0ZWQuCi0JCSAqIElmIHdlJ3JlIG5vdCwgd2UnbGwgZW50ZXIgaXQgd2hlbiBqb2luaW5nIGFuIFNTSUQsCi0JCSAqIHRocm91Z2ggdGhlIGJzc19pbmZvX2NoYW5nZWQoKSBob29rLgotCQkgKi8KLQkJcmV0ID0gd2wxMnh4X3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7Ci0JfSBlbHNlIGlmICghKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpICYmCi0JCSAgIHdsLT5wc21fcmVxdWVzdGVkKSB7Ci0JCXdsMTJ4eF9pbmZvKCJwc20gZGlzYWJsZWQiKTsKLQotCQl3bC0+cHNtX3JlcXVlc3RlZCA9IGZhbHNlOwotCi0JCWlmICh3bC0+cHNtKQotCQkJcmV0ID0gd2wxMnh4X3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFKTsKLQl9Ci0KLQlpZiAoY29uZi0+cG93ZXJfbGV2ZWwgIT0gd2wtPnBvd2VyX2xldmVsKSB7Ci0JCXJldCA9IHdsMTJ4eF9hY3hfdHhfcG93ZXIod2wsIGNvbmYtPnBvd2VyX2xldmVsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQotCQl3bC0+cG93ZXJfbGV2ZWwgPSBjb25mLT5wb3dlcl9sZXZlbDsKLQl9Ci0KLW91dDoKLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotI2RlZmluZSBXTDEyWFhfU1VQUE9SVEVEX0ZJTFRFUlMgKEZJRl9QUk9NSVNDX0lOX0JTUyB8IFwKLQkJCQkgIEZJRl9BTExNVUxUSSB8IFwKLQkJCQkgIEZJRl9GQ1NGQUlMIHwgXAotCQkJCSAgRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBcCi0JCQkJICBGSUZfQ09OVFJPTCB8IFwKLQkJCQkgIEZJRl9PVEhFUl9CU1MpCi0KLXN0YXRpYyB2b2lkIHdsMTJ4eF9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZCwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50ICp0b3RhbCwKLQkJCQkgICAgICAgaW50IG1jX2NvdW50LAotCQkJCSAgICAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKLXsKLQlzdHJ1Y3Qgd2wxMnh4ICp3bCA9IGh3LT5wcml2OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgY29uZmlndXJlIGZpbHRlciIpOwotCi0JKnRvdGFsICY9IFdMMTJYWF9TVVBQT1JURURfRklMVEVSUzsKLQljaGFuZ2VkICY9IFdMMTJYWF9TVVBQT1JURURfRklMVEVSUzsKLQotCWlmIChjaGFuZ2VkID09IDApCi0JCS8qIG5vIGZpbHRlcnMgd2hpY2ggd2Ugc3VwcG9ydCBjaGFuZ2VkICovCi0JCXJldHVybjsKLQotCS8qIEZJWE1FOiB3bC0+cnhfY29uZmlnIGFuZCB3bC0+cnhfZmlsdGVyIGFyZSBub3QgcHJvdGVjdGVkICovCi0KLQl3bC0+cnhfY29uZmlnID0gV0wxMlhYX0RFRkFVTFRfUlhfQ09ORklHOwotCXdsLT5yeF9maWx0ZXIgPSBXTDEyWFhfREVGQVVMVF9SWF9GSUxURVI7Ci0KLQlpZiAoKnRvdGFsICYgRklGX1BST01JU0NfSU5fQlNTKSB7Ci0JCXdsLT5yeF9jb25maWcgfD0gQ0ZHX0JTU0lEX0ZJTFRFUl9FTjsKLQkJd2wtPnJ4X2NvbmZpZyB8PSBDRkdfUlhfQUxMX0dPT0Q7Ci0JfQotCWlmICgqdG90YWwgJiBGSUZfQUxMTVVMVEkpCi0JCS8qCi0JCSAqIENGR19NQ19GSUxURVJfRU4gaW4gcnhfY29uZmlnIG5lZWRzIHRvIGJlIDAgdG8gcmVjZWl2ZQotCQkgKiBhbGwgbXVsdGljYXN0IGZyYW1lcwotCQkgKi8KLQkJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX01DX0ZJTFRFUl9FTjsKLQlpZiAoKnRvdGFsICYgRklGX0ZDU0ZBSUwpCi0JCXdsLT5yeF9maWx0ZXIgfD0gQ0ZHX1JYX0ZDU19FUlJPUjsKLQlpZiAoKnRvdGFsICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIHsKLQkJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX0JTU0lEX0ZJTFRFUl9FTjsKLQkJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX1NTSURfRklMVEVSX0VOOwotCX0KLQlpZiAoKnRvdGFsICYgRklGX0NPTlRST0wpCi0JCXdsLT5yeF9maWx0ZXIgfD0gQ0ZHX1JYX0NUTF9FTjsKLQlpZiAoKnRvdGFsICYgRklGX09USEVSX0JTUykKLQkJd2wtPnJ4X2ZpbHRlciAmPSB+Q0ZHX0JTU0lEX0ZJTFRFUl9FTjsKLQotCS8qCi0JICogRklYTUU6IHdvcmtxdWV1ZXMgbmVlZCB0byBiZSBwcm9wZXJseSBjYW5jZWxsZWQgb24gc3RvcCgpLCBmb3IKLQkgKiBub3cgbGV0J3MganVzdCBkaXNhYmxlIGNoYW5naW5nIHRoZSBmaWx0ZXIgc2V0dGluZ3MuIFRoZXkgd2lsbAotCSAqIGJlIHVwZGF0ZWQgYW55IG9uIGNvbmZpZygpLgotCSAqLwotCS8qIHNjaGVkdWxlX3dvcmsoJndsLT5maWx0ZXJfd29yayk7ICovCi19Ci0KLS8qIEhXIGVuY3J5cHRpb24gKi8KLXN0YXRpYyBpbnQgd2wxMnh4X3NldF9rZXlfdHlwZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgc3RydWN0IGFjeF9zZXRfa2V5ICprZXksCi0JCQkgICAgICAgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqbWFjODAyMTFfa2V5LAotCQkJICAgICAgIGNvbnN0IHU4ICphZGRyKQotewotCXN3aXRjaCAobWFjODAyMTFfa2V5LT5hbGcpIHsKLQljYXNlIEFMR19XRVA6Ci0JCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKSkKLQkJCWtleS0+a2V5X3R5cGUgPSBLRVlfV0VQX0RFRkFVTFQ7Ci0JCWVsc2UKLQkJCWtleS0+a2V5X3R5cGUgPSBLRVlfV0VQX0FERFI7Ci0KLQkJbWFjODAyMTFfa2V5LT5od19rZXlfaWR4ID0gbWFjODAyMTFfa2V5LT5rZXlpZHg7Ci0JCWJyZWFrOwotCWNhc2UgQUxHX1RLSVA6Ci0JCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKSkKLQkJCWtleS0+a2V5X3R5cGUgPSBLRVlfVEtJUF9NSUNfR1JPVVA7Ci0JCWVsc2UKLQkJCWtleS0+a2V5X3R5cGUgPSBLRVlfVEtJUF9NSUNfUEFJUldJU0U7Ci0KLQkJbWFjODAyMTFfa2V5LT5od19rZXlfaWR4ID0gbWFjODAyMTFfa2V5LT5rZXlpZHg7Ci0JCWJyZWFrOwotCWNhc2UgQUxHX0NDTVA6Ci0JCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKSkKLQkJCWtleS0+a2V5X3R5cGUgPSBLRVlfQUVTX0dST1VQOwotCQllbHNlCi0JCQlrZXktPmtleV90eXBlID0gS0VZX0FFU19QQUlSV0lTRTsKLQkJbWFjODAyMTFfa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXdsMTJ4eF9lcnJvcigiVW5rbm93biBrZXkgYWxnbyAweCV4IiwgbWFjODAyMTFfa2V5LT5hbGcpOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X29wX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCi17Ci0Jc3RydWN0IHdsMTJ4eCAqd2wgPSBody0+cHJpdjsKLQlzdHJ1Y3QgYWN4X3NldF9rZXkgd2xfa2V5OwotCWNvbnN0IHU4ICphZGRyOwotCWludCByZXQ7Ci0KLQlzdGF0aWMgY29uc3QgdTggYmNhc3RfYWRkcltFVEhfQUxFTl0gPQotCQl7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIHNldCBrZXkiKTsKLQotCW1lbXNldCgmd2xfa2V5LCAwLCBzaXplb2Yod2xfa2V5KSk7Ci0KLQlhZGRyID0gc3RhID8gc3RhLT5hZGRyIDogYmNhc3RfYWRkcjsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19DUllQVCwgIkNNRDogMHgleCIsIGNtZCk7Ci0Jd2wxMnh4X2R1bXAoREVCVUdfQ1JZUFQsICJBRERSOiAiLCBhZGRyLCBFVEhfQUxFTik7Ci0Jd2wxMnh4X2RlYnVnKERFQlVHX0NSWVBULCAiS2V5OiBhbGdvOjB4JXgsIGlkOiVkLCBsZW46JWQgZmxhZ3MgMHgleCIsCi0JCSAgICAga2V5LT5hbGcsIGtleS0+a2V5aWR4LCBrZXktPmtleWxlbiwga2V5LT5mbGFncyk7Ci0Jd2wxMnh4X2R1bXAoREVCVUdfQ1JZUFQsICJLRVk6ICIsIGtleS0+a2V5LCBrZXktPmtleWxlbik7Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNFVF9LRVk6Ci0JCXdsX2tleS5rZXlfYWN0aW9uID0gS0VZX0FERF9PUl9SRVBMQUNFOwotCQlicmVhazsKLQljYXNlIERJU0FCTEVfS0VZOgotCQl3bF9rZXkua2V5X2FjdGlvbiA9IEtFWV9SRU1PVkU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXdsMTJ4eF9lcnJvcigiVW5zdXBwb3J0ZWQga2V5IGNtZCAweCV4IiwgY21kKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0ID0gd2wxMnh4X3NldF9rZXlfdHlwZSh3bCwgJndsX2tleSwgY21kLCBrZXksIGFkZHIpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigiU2V0IEtFWSB0eXBlIGZhaWxlZCIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAod2xfa2V5LmtleV90eXBlICE9IEtFWV9XRVBfREVGQVVMVCkKLQkJbWVtY3B5KHdsX2tleS5hZGRyLCBhZGRyLCBFVEhfQUxFTik7Ci0KLQlpZiAoKHdsX2tleS5rZXlfdHlwZSA9PSBLRVlfVEtJUF9NSUNfR1JPVVApIHx8Ci0JICAgICh3bF9rZXkua2V5X3R5cGUgPT0gS0VZX1RLSVBfTUlDX1BBSVJXSVNFKSkgewotCQkvKgotCQkgKiBXZSBnZXQgdGhlIGtleSBpbiB0aGUgZm9sbG93aW5nIGZvcm06Ci0JCSAqIFRLSVAgKDE2IGJ5dGVzKSAtIFRYIE1JQyAoOCBieXRlcykgLSBSWCBNSUMgKDggYnl0ZXMpCi0JCSAqIGJ1dCB0aGUgdGFyZ2V0IGlzIGV4cGVjdGluZzoKLQkJICogVEtJUCAtIFJYIE1JQyAtIFRYIE1JQwotCQkgKi8KLQkJbWVtY3B5KHdsX2tleS5rZXksIGtleS0+a2V5LCAxNik7Ci0JCW1lbWNweSh3bF9rZXkua2V5ICsgMTYsIGtleS0+a2V5ICsgMjQsIDgpOwotCQltZW1jcHkod2xfa2V5LmtleSArIDI0LCBrZXktPmtleSArIDE2LCA4KTsKLQotCX0gZWxzZSB7Ci0JCW1lbWNweSh3bF9rZXkua2V5LCBrZXktPmtleSwga2V5LT5rZXlsZW4pOwotCX0KLQl3bF9rZXkua2V5X3NpemUgPSBrZXktPmtleWxlbjsKLQotCXdsX2tleS5pZCA9IGtleS0+a2V5aWR4OwotCXdsX2tleS5zc2lkX3Byb2ZpbGUgPSAwOwotCi0Jd2wxMnh4X2R1bXAoREVCVUdfQ1JZUFQsICJUQVJHRVQgS0VZOiAiLCAmd2xfa2V5LCBzaXplb2Yod2xfa2V5KSk7Ci0KLQlpZiAod2wxMnh4X2NtZF9zZW5kKHdsLCBDTURfU0VUX0tFWVMsICZ3bF9rZXksIHNpemVvZih3bF9rZXkpKSA8IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJTZXQgS0VZIGZhaWxlZCIpOwotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X2J1aWxkX2Jhc2ljX3JhdGVzKGNoYXIgKnJhdGVzKQotewotCXU4IGluZGV4ID0gMDsKLQotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyB8IElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7Ci0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzJNQjsKLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sgfCBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyB8IElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COwotCi0JcmV0dXJuIGluZGV4OwotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF9idWlsZF9leHRlbmRlZF9yYXRlcyhjaGFyICpyYXRlcykKLXsKLQl1OCBpbmRleCA9IDA7Ci0KLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNk1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV85TUI7Ci0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUI7Ci0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI7Ci0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUI7Ci0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUI7Ci0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUI7Ci0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUI7Ci0KLQlyZXR1cm4gaW5kZXg7Ci19Ci0KLQotc3RhdGljIGludCB3bDEyeHhfYnVpbGRfcHJvYmVfcmVxKHN0cnVjdCB3bDEyeHggKndsLCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQotewotCXN0cnVjdCB3bDEyeHhfcHJvYmVfcmVxX3RlbXBsYXRlIHRlbXBsYXRlOwotCXN0cnVjdCB3bDEyeHhfaWVfcmF0ZXMgKnJhdGVzOwotCWNoYXIgKnB0cjsKLQl1MTYgc2l6ZTsKLQotCXB0ciA9IChjaGFyICopJnRlbXBsYXRlOwotCXNpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZWFkZXIpOwotCi0JbWVtc2V0KHRlbXBsYXRlLmhlYWRlci5kYSwgMHhmZiwgRVRIX0FMRU4pOwotCW1lbXNldCh0ZW1wbGF0ZS5oZWFkZXIuYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKLQltZW1jcHkodGVtcGxhdGUuaGVhZGVyLnNhLCB3bC0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQl0ZW1wbGF0ZS5oZWFkZXIuZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7Ci0KLQkvKiBJRXMgKi8KLQkvKiBTU0lEICovCi0JdGVtcGxhdGUuc3NpZC5oZWFkZXIuaWQgPSBXTEFOX0VJRF9TU0lEOwotCXRlbXBsYXRlLnNzaWQuaGVhZGVyLmxlbiA9IHNzaWRfbGVuOwotCWlmIChzc2lkX2xlbiAmJiBzc2lkKQotCQltZW1jcHkodGVtcGxhdGUuc3NpZC5zc2lkLCBzc2lkLCBzc2lkX2xlbik7Ci0Jc2l6ZSArPSBzaXplb2Yoc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIpICsgc3NpZF9sZW47Ci0JcHRyICs9IHNpemU7Ci0KLQkvKiBCYXNpYyBSYXRlcyAqLwotCXJhdGVzID0gKHN0cnVjdCB3bDEyeHhfaWVfcmF0ZXMgKilwdHI7Ci0JcmF0ZXMtPmhlYWRlci5pZCA9IFdMQU5fRUlEX1NVUFBfUkFURVM7Ci0JcmF0ZXMtPmhlYWRlci5sZW4gPSB3bDEyeHhfYnVpbGRfYmFzaWNfcmF0ZXMocmF0ZXMtPnJhdGVzKTsKLQlzaXplICs9IHNpemVvZihzdHJ1Y3Qgd2wxMnh4X2llX2hlYWRlcikgKyByYXRlcy0+aGVhZGVyLmxlbjsKLQlwdHIgKz0gc2l6ZW9mKHN0cnVjdCB3bDEyeHhfaWVfaGVhZGVyKSArIHJhdGVzLT5oZWFkZXIubGVuOwotCi0JLyogRXh0ZW5kZWQgcmF0ZXMgKi8KLQlyYXRlcyA9IChzdHJ1Y3Qgd2wxMnh4X2llX3JhdGVzICopcHRyOwotCXJhdGVzLT5oZWFkZXIuaWQgPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKLQlyYXRlcy0+aGVhZGVyLmxlbiA9IHdsMTJ4eF9idWlsZF9leHRlbmRlZF9yYXRlcyhyYXRlcy0+cmF0ZXMpOwotCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCB3bDEyeHhfaWVfaGVhZGVyKSArIHJhdGVzLT5oZWFkZXIubGVuOwotCi0Jd2wxMnh4X2R1bXAoREVCVUdfU0NBTiwgIlBST0JFIFJFUTogIiwgJnRlbXBsYXRlLCBzaXplKTsKLQotCXJldHVybiB3bDEyeHhfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1BST0JFX1JFUSwgJnRlbXBsYXRlLAotCQkJCSAgICAgIHNpemUpOwotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF9od19zY2FuKHN0cnVjdCB3bDEyeHggKndsLCB1OCAqc3NpZCwgc2l6ZV90IGxlbiwKLQkJCSAgdTggYWN0aXZlX3NjYW4sIHU4IGhpZ2hfcHJpbywgdTggbnVtX2NoYW5uZWxzLAotCQkJICB1OCBwcm9iZV9yZXF1ZXN0cykKLXsKLQlpbnQgaSwgcmV0OwotCXUzMiBzcGxpdF9zY2FuID0gMDsKLQl1MTYgc2Nhbl9vcHRpb25zID0gMDsKLQlzdHJ1Y3QgY21kX3NjYW4gKnBhcmFtczsKLQlzdHJ1Y3Qgd2wxMnh4X2NvbW1hbmQgKmNtZF9hbnN3ZXI7Ci0KLQlpZiAod2wtPnNjYW5uaW5nKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBhcmFtcyA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJhbXMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBhcmFtcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlwYXJhbXMtPnBhcmFtcy5yeF9jb25maWdfb3B0aW9ucyA9IGNwdV90b19sZTMyKENGR19SWF9BTExfR09PRCk7Ci0JcGFyYW1zLT5wYXJhbXMucnhfZmlsdGVyX29wdGlvbnMgPQotCQljcHVfdG9fbGUzMihDRkdfUlhfUFJTUF9FTiB8IENGR19SWF9NR01UX0VOIHwgQ0ZHX1JYX0JDTl9FTik7Ci0KLQkvKiBIaWdoIHByaW9yaXR5IHNjYW4gKi8KLQlpZiAoIWFjdGl2ZV9zY2FuKQotCQlzY2FuX29wdGlvbnMgfD0gU0NBTl9QQVNTSVZFOwotCWlmIChoaWdoX3ByaW8pCi0JCXNjYW5fb3B0aW9ucyB8PSBTQ0FOX1BSSU9SSVRZX0hJR0g7Ci0JcGFyYW1zLT5wYXJhbXMuc2Nhbl9vcHRpb25zID0gc2Nhbl9vcHRpb25zOwotCi0JcGFyYW1zLT5wYXJhbXMubnVtX2NoYW5uZWxzID0gbnVtX2NoYW5uZWxzOwotCXBhcmFtcy0+cGFyYW1zLm51bV9wcm9iZV9yZXF1ZXN0cyA9IHByb2JlX3JlcXVlc3RzOwotCXBhcmFtcy0+cGFyYW1zLnR4X3JhdGUgPSBjcHVfdG9fbGUxNigxIDw8IDEpOyAvKiAyIE1icHMgKi8KLQlwYXJhbXMtPnBhcmFtcy50aWRfdHJpZ2dlciA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NoYW5uZWxzOyBpKyspIHsKLQkJcGFyYW1zLT5jaGFubmVsc1tpXS5taW5fZHVyYXRpb24gPSBjcHVfdG9fbGUzMigzMDAwMCk7Ci0JCXBhcmFtcy0+Y2hhbm5lbHNbaV0ubWF4X2R1cmF0aW9uID0gY3B1X3RvX2xlMzIoNjAwMDApOwotCQltZW1zZXQoJnBhcmFtcy0+Y2hhbm5lbHNbaV0uYnNzaWRfbHNiLCAweGZmLCA0KTsKLQkJbWVtc2V0KCZwYXJhbXMtPmNoYW5uZWxzW2ldLmJzc2lkX21zYiwgMHhmZiwgMik7Ci0JCXBhcmFtcy0+Y2hhbm5lbHNbaV0uZWFybHlfdGVybWluYXRpb24gPSAwOwotCQlwYXJhbXMtPmNoYW5uZWxzW2ldLnR4X3Bvd2VyX2F0dCA9IDA7Ci0JCXBhcmFtcy0+Y2hhbm5lbHNbaV0uY2hhbm5lbCA9IGkgKyAxOwotCQltZW1zZXQocGFyYW1zLT5jaGFubmVsc1tpXS5wYWQsIDAsIDMpOwotCX0KLQotCWZvciAoaSA9IG51bV9jaGFubmVsczsgaSA8IFNDQU5fTUFYX05VTV9PRl9DSEFOTkVMUzsgaSsrKQotCQltZW1zZXQoJnBhcmFtcy0+Y2hhbm5lbHNbaV0sIDAsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGJhc2ljX3NjYW5fY2hhbm5lbF9wYXJhbWV0ZXJzKSk7Ci0KLQlpZiAobGVuICYmIHNzaWQpIHsKLQkJcGFyYW1zLT5wYXJhbXMuc3NpZF9sZW4gPSBsZW47Ci0JCW1lbWNweShwYXJhbXMtPnBhcmFtcy5zc2lkLCBzc2lkLCBsZW4pOwotCX0gZWxzZSB7Ci0JCXBhcmFtcy0+cGFyYW1zLnNzaWRfbGVuID0gMDsKLQkJbWVtc2V0KHBhcmFtcy0+cGFyYW1zLnNzaWQsIDAsIDMyKTsKLQl9Ci0KLQlyZXQgPSB3bDEyeHhfYnVpbGRfcHJvYmVfcmVxKHdsLCBzc2lkLCBsZW4pOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigiUFJPQkUgcmVxdWVzdCB0ZW1wbGF0ZSBmYWlsZWQiKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gd2wxMnh4X2NtZF9zZW5kKHdsLCBDTURfVFJJR0dFUl9TQ0FOX1RPLCAmc3BsaXRfc2NhbiwKLQkJCSAgICAgIHNpemVvZih1MzIpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoIlNwbGl0IFNDQU4gZmFpbGVkIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdsMTJ4eF9kdW1wKERFQlVHX1NDQU4sICJTQ0FOOiAiLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7Ci0KLQl3bC0+c2Nhbm5pbmcgPSB0cnVlOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9zZW5kKHdsLCBDTURfU0NBTiwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOwotCWlmIChyZXQgPCAwKQotCQl3bDEyeHhfZXJyb3IoIlNDQU4gZmFpbGVkIik7Ci0KLQl3bDEyeHhfc3BpX21lbV9yZWFkKHdsLCB3bC0+Y21kX2JveF9hZGRyLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7Ci0KLQljbWRfYW5zd2VyID0gKHN0cnVjdCB3bDEyeHhfY29tbWFuZCAqKSBwYXJhbXM7Ci0JaWYgKGNtZF9hbnN3ZXItPnN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJd2wxMnh4X2Vycm9yKCJURVNUIGNvbW1hbmQgYW5zd2VyIGVycm9yOiAlZCIsCi0JCQkgICAgIGNtZF9hbnN3ZXItPnN0YXR1cyk7Ci0JCXdsLT5zY2FubmluZyA9IGZhbHNlOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShwYXJhbXMpOwotCXJldHVybiByZXQ7Ci0KLX0KLQotc3RhdGljIGludCB3bDEyeHhfb3BfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQotewotCXN0cnVjdCB3bDEyeHggKndsID0gaHctPnByaXY7Ci0JaW50IHJldDsKLQl1OCAqc3NpZCA9IE5VTEw7Ci0Jc2l6ZV90IHNzaWRfbGVuID0gMDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGh3IHNjYW4iKTsKLQotCWlmIChyZXEtPm5fc3NpZHMpIHsKLQkJc3NpZCA9IHJlcS0+c3NpZHNbMF0uc3NpZDsKLQkJc3NpZF9sZW4gPSByZXEtPnNzaWRzWzBdLnNzaWRfbGVuOwotCX0KLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0JcmV0ID0gd2wxMnh4X2h3X3NjYW4oaHctPnByaXYsIHNzaWQsIHNzaWRfbGVuLCAxLCAwLCAxMywgMyk7Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3bDEyeHhfb3Bfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3Qgd2wxMnh4ICp3bCA9IGh3LT5wcml2OwotCWludCByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfYWN4X3J0c190aHJlc2hvbGQod2wsICh1MTYpIHZhbHVlKTsKLQotCWlmIChyZXQgPCAwKQotCQl3bDEyeHhfd2FybmluZygid2wxMnh4X29wX3NldF9ydHNfdGhyZXNob2xkIGZhaWxlZDogJWQiLCByZXQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgd2wxMnh4X29wX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLAotCQkJCSAgICAgICB1MzIgY2hhbmdlZCkKLXsKLQllbnVtIGFjeF9wc19tb2RlIG1vZGU7Ci0Jc3RydWN0IHdsMTJ4eCAqd2wgPSBody0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uOwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBic3MgaW5mbyBjaGFuZ2VkIik7Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgewotCQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7Ci0JCQl3bC0+YWlkID0gYnNzX2NvbmYtPmFpZDsKLQotCQkJcmV0ID0gd2wxMnh4X2J1aWxkX3BzX3BvbGwod2wsIHdsLT5haWQpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBvdXQ7Ci0KLQkJCXJldCA9IHdsMTJ4eF9hY3hfYWlkKHdsLCB3bC0+YWlkKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCWdvdG8gb3V0OwotCi0JCQkvKiBJZiB3ZSB3YW50IHRvIGdvIGluIFBTTSBidXQgd2UncmUgbm90IHRoZXJlIHlldCAqLwotCQkJaWYgKHdsLT5wc21fcmVxdWVzdGVkICYmICF3bC0+cHNtKSB7Ci0JCQkJbW9kZSA9IFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFOwotCQkJCXJldCA9IHdsMTJ4eF9wc19zZXRfbW9kZSh3bCwgbW9kZSk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0JfQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1NMT1QpIHsKLQkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCkKLQkJCXJldCA9IHdsMTJ4eF9hY3hfc2xvdCh3bCwgU0xPVF9USU1FX1NIT1JUKTsKLQkJZWxzZQotCQkJcmV0ID0gd2wxMnh4X2FjeF9zbG90KHdsLCBTTE9UX1RJTUVfTE9ORyk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQl3bDEyeHhfd2FybmluZygiU2V0IHNsb3QgdGltZSBmYWlsZWQgJWQiLCByZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgewotCQlpZiAoYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSkKLQkJCXdsMTJ4eF9hY3hfc2V0X3ByZWFtYmxlKHdsLCBBQ1hfUFJFQU1CTEVfU0hPUlQpOwotCQllbHNlCi0JCQl3bDEyeHhfYWN4X3NldF9wcmVhbWJsZSh3bCwgQUNYX1BSRUFNQkxFX0xPTkcpOwotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UKSB7Ci0JCWlmIChic3NfY29uZi0+dXNlX2N0c19wcm90KQotCQkJcmV0ID0gd2wxMnh4X2FjeF9jdHNfcHJvdGVjdCh3bCwgQ1RTUFJPVEVDVF9FTkFCTEUpOwotCQllbHNlCi0JCQlyZXQgPSB3bDEyeHhfYWN4X2N0c19wcm90ZWN0KHdsLCBDVFNQUk9URUNUX0RJU0FCTEUpOwotCQlpZiAocmV0IDwgMCkgewotCQkJd2wxMnh4X3dhcm5pbmcoIlNldCBjdHNwcm90ZWN0IGZhaWxlZCAlZCIsIHJldCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpIHsKLQkJbWVtY3B5KHdsLT5ic3NpZCwgYnNzX2NvbmYtPmJzc2lkLCBFVEhfQUxFTik7Ci0KLQkJcmV0ID0gd2wxMnh4X2J1aWxkX251bGxfZGF0YSh3bCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJaWYgKHdsLT5ic3NfdHlwZSAhPSBCU1NfVFlQRV9JQlNTKSB7Ci0JCQlyZXQgPSB3bDEyeHhfY21kX2pvaW4od2wsIHdsLT5ic3NfdHlwZSwgNSwgMTAwLCAxKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT04pIHsKLQkJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7Ci0JCXJldCA9IHdsMTJ4eF9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfQkVBQ09OLCBiZWFjb24tPmRhdGEsCi0JCQkJCSAgICAgIGJlYWNvbi0+bGVuKTsKLQotCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2tmcmVlX3NrYihiZWFjb24pOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlyZXQgPSB3bDEyeHhfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1BST0JFX1JFU1AsIGJlYWNvbi0+ZGF0YSwKLQkJCQkJICAgICAgYmVhY29uLT5sZW4pOwotCi0JCWRldl9rZnJlZV9za2IoYmVhY29uKTsKLQotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCXJldCA9IHdsMTJ4eF9jbWRfam9pbih3bCwgd2wtPmJzc190eXBlLCAxLCAxMDAsIDApOwotCi0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotfQotCi0KLS8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLwotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSB3bDEyeHhfcmF0ZXNbXSA9IHsKLQl7IC5iaXRyYXRlID0gMTAsCi0JICAuaHdfdmFsdWUgPSAweDEsCi0JICAuaHdfdmFsdWVfc2hvcnQgPSAweDEsIH0sCi0JeyAuYml0cmF0ZSA9IDIwLAotCSAgLmh3X3ZhbHVlID0gMHgyLAotCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgyLAotCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKLQl7IC5iaXRyYXRlID0gNTUsCi0JICAuaHdfdmFsdWUgPSAweDQsCi0JICAuaHdfdmFsdWVfc2hvcnQgPSAweDQsCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAotCXsgLmJpdHJhdGUgPSAxMTAsCi0JICAuaHdfdmFsdWUgPSAweDIwLAotCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgyMCwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCi0JeyAuYml0cmF0ZSA9IDYwLAotCSAgLmh3X3ZhbHVlID0gMHg4LAotCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHg4LCB9LAotCXsgLmJpdHJhdGUgPSA5MCwKLQkgIC5od192YWx1ZSA9IDB4MTAsCi0JICAuaHdfdmFsdWVfc2hvcnQgPSAweDEwLCB9LAotCXsgLmJpdHJhdGUgPSAxMjAsCi0JICAuaHdfdmFsdWUgPSAweDQwLAotCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHg0MCwgfSwKLQl7IC5iaXRyYXRlID0gMTgwLAotCSAgLmh3X3ZhbHVlID0gMHg4MCwKLQkgIC5od192YWx1ZV9zaG9ydCA9IDB4ODAsIH0sCi0JeyAuYml0cmF0ZSA9IDI0MCwKLQkgIC5od192YWx1ZSA9IDB4MjAwLAotCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgyMDAsIH0sCi0JeyAuYml0cmF0ZSA9IDM2MCwKLQkgLmh3X3ZhbHVlID0gMHg0MDAsCi0JIC5od192YWx1ZV9zaG9ydCA9IDB4NDAwLCB9LAotCXsgLmJpdHJhdGUgPSA0ODAsCi0JICAuaHdfdmFsdWUgPSAweDgwMCwKLQkgIC5od192YWx1ZV9zaG9ydCA9IDB4ODAwLCB9LAotCXsgLmJpdHJhdGUgPSA1NDAsCi0JICAuaHdfdmFsdWUgPSAweDEwMDAsCi0JICAuaHdfdmFsdWVfc2hvcnQgPSAweDEwMDAsIH0sCi19OwotCi0vKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgd2wxMnh4X2NoYW5uZWxzW10gPSB7Ci0JeyAuaHdfdmFsdWUgPSAxLCAuY2VudGVyX2ZyZXEgPSAyNDEyfSwKLQl7IC5od192YWx1ZSA9IDIsIC5jZW50ZXJfZnJlcSA9IDI0MTd9LAotCXsgLmh3X3ZhbHVlID0gMywgLmNlbnRlcl9mcmVxID0gMjQyMn0sCi0JeyAuaHdfdmFsdWUgPSA0LCAuY2VudGVyX2ZyZXEgPSAyNDI3fSwKLQl7IC5od192YWx1ZSA9IDUsIC5jZW50ZXJfZnJlcSA9IDI0MzJ9LAotCXsgLmh3X3ZhbHVlID0gNiwgLmNlbnRlcl9mcmVxID0gMjQzN30sCi0JeyAuaHdfdmFsdWUgPSA3LCAuY2VudGVyX2ZyZXEgPSAyNDQyfSwKLQl7IC5od192YWx1ZSA9IDgsIC5jZW50ZXJfZnJlcSA9IDI0NDd9LAotCXsgLmh3X3ZhbHVlID0gOSwgLmNlbnRlcl9mcmVxID0gMjQ1Mn0sCi0JeyAuaHdfdmFsdWUgPSAxMCwgLmNlbnRlcl9mcmVxID0gMjQ1N30sCi0JeyAuaHdfdmFsdWUgPSAxMSwgLmNlbnRlcl9mcmVxID0gMjQ2Mn0sCi0JeyAuaHdfdmFsdWUgPSAxMiwgLmNlbnRlcl9mcmVxID0gMjQ2N30sCi0JeyAuaHdfdmFsdWUgPSAxMywgLmNlbnRlcl9mcmVxID0gMjQ3Mn0sCi19OwotCi0vKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIHdsMTJ4eF9iYW5kXzJnaHogPSB7Ci0JLmNoYW5uZWxzID0gd2wxMnh4X2NoYW5uZWxzLAotCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRSh3bDEyeHhfY2hhbm5lbHMpLAotCS5iaXRyYXRlcyA9IHdsMTJ4eF9yYXRlcywKLQkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUod2wxMnh4X3JhdGVzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyB3bDEyeHhfb3BzID0gewotCS5zdGFydCA9IHdsMTJ4eF9vcF9zdGFydCwKLQkuc3RvcCA9IHdsMTJ4eF9vcF9zdG9wLAotCS5hZGRfaW50ZXJmYWNlID0gd2wxMnh4X29wX2FkZF9pbnRlcmZhY2UsCi0JLnJlbW92ZV9pbnRlcmZhY2UgPSB3bDEyeHhfb3BfcmVtb3ZlX2ludGVyZmFjZSwKLQkuY29uZmlnID0gd2wxMnh4X29wX2NvbmZpZywKLQkuY29uZmlndXJlX2ZpbHRlciA9IHdsMTJ4eF9vcF9jb25maWd1cmVfZmlsdGVyLAotCS50eCA9IHdsMTJ4eF9vcF90eCwKLQkuc2V0X2tleSA9IHdsMTJ4eF9vcF9zZXRfa2V5LAotCS5od19zY2FuID0gd2wxMnh4X29wX2h3X3NjYW4sCi0JLmJzc19pbmZvX2NoYW5nZWQgPSB3bDEyeHhfb3BfYnNzX2luZm9fY2hhbmdlZCwKLQkuc2V0X3J0c190aHJlc2hvbGQgPSB3bDEyeHhfb3Bfc2V0X3J0c190aHJlc2hvbGQsCi19OwotCi1zdGF0aWMgaW50IHdsMTJ4eF9yZWdpc3Rlcl9odyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JaWYgKHdsLT5tYWM4MDIxMV9yZWdpc3RlcmVkKQotCQlyZXR1cm4gMDsKLQotCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHdsLT5odywgd2wtPm1hY19hZGRyKTsKLQotCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyh3bC0+aHcpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigidW5hYmxlIHRvIHJlZ2lzdGVyIG1hYzgwMjExIGh3OiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jd2wtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSB0cnVlOwotCi0Jd2wxMnh4X25vdGljZSgibG9hZGVkIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bDEyeHhfaW5pdF9pZWVlODAyMTEoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JLyogVGhlIHR4IGRlc2NyaXB0b3IgYnVmZmVyIGFuZCB0aGUgVEtJUCBzcGFjZSAqLwotCXdsLT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IHR4X2RvdWJsZV9idWZmZXJfZGVzYykKLQkJKyBXTDEyWFhfVEtJUF9JVl9TUEFDRTsKLQotCS8qIHVuaXQgdXMgKi8KLQkvKiBGSVhNRTogZmluZCBhIHByb3BlciB2YWx1ZSAqLwotCXdsLT5ody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDAwOwotCi0Jd2wtPmh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKLQkJSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKLQotCXdsLT5ody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKLQl3bC0+aHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDE7Ci0Jd2wtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmd2wxMnh4X2JhbmRfMmdoejsKLQotCVNFVF9JRUVFODAyMTFfREVWKHdsLT5odywgJndsLT5zcGktPmRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBXTDEyWFhfREVGQVVMVF9DSEFOTkVMIDEKLXN0YXRpYyBpbnQgX19kZXZpbml0IHdsMTJ4eF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0cnVjdCB3bDEyeHhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IHdsMTJ4eCAqd2w7Ci0JaW50IHJldCwgaTsKLQlzdGF0aWMgY29uc3QgdTggbm9raWFfb3VpWzNdID0gezB4MDAsIDB4MWYsIDB4ZGZ9OwotCi0JcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwotCWlmICghcGRhdGEpIHsKLQkJd2wxMnh4X2Vycm9yKCJubyBwbGF0Zm9ybSBkYXRhIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqd2wpLCAmd2wxMnh4X29wcyk7Ci0JaWYgKCFodykgewotCQl3bDEyeHhfZXJyb3IoImNvdWxkIG5vdCBhbGxvYyBpZWVlODAyMTFfaHciKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jd2wgPSBody0+cHJpdjsKLQltZW1zZXQod2wsIDAsIHNpemVvZigqd2wpKTsKLQotCXdsLT5odyA9IGh3OwotCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHdsKTsKLQl3bC0+c3BpID0gc3BpOwotCi0Jd2wtPmRhdGFfaW5fY291bnQgPSAwOwotCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd2wtPnR4X3F1ZXVlKTsKLQotCUlOSVRfV09SSygmd2wtPnR4X3dvcmssIHdsMTJ4eF90eF93b3JrKTsKLQlJTklUX1dPUksoJndsLT5maWx0ZXJfd29yaywgd2wxMnh4X2ZpbHRlcl93b3JrKTsKLQl3bC0+Y2hhbm5lbCA9IFdMMTJYWF9ERUZBVUxUX0NIQU5ORUw7Ci0Jd2wtPnNjYW5uaW5nID0gZmFsc2U7Ci0Jd2wtPmRlZmF1bHRfa2V5ID0gMDsKLQl3bC0+bGlzdGVuX2ludCA9IDE7Ci0Jd2wtPnJ4X2NvdW50ZXIgPSAwOwotCXdsLT5yeF9oYW5kbGVkID0gMDsKLQl3bC0+cnhfY3VycmVudF9idWZmZXIgPSAwOwotCXdsLT5yeF9sYXN0X2lkID0gMDsKLQl3bC0+cnhfY29uZmlnID0gV0wxMlhYX0RFRkFVTFRfUlhfQ09ORklHOwotCXdsLT5yeF9maWx0ZXIgPSBXTDEyWFhfREVGQVVMVF9SWF9GSUxURVI7Ci0Jd2wtPmVscCA9IGZhbHNlOwotCXdsLT5wc20gPSAwOwotCXdsLT5wc21fcmVxdWVzdGVkID0gZmFsc2U7Ci0Jd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSBmYWxzZTsKLQl3bC0+cG93ZXJfbGV2ZWwgPSBXTDEyWFhfREVGQVVMVF9QT1dFUl9MRVZFTDsKLQotCS8qIFdlIHVzZSB0aGUgZGVmYXVsdCBwb3dlciBvbiBzbGVlcCB0aW1lIHVudGlsIHdlIGtub3cgd2hpY2ggY2hpcAotCSAqIHdlJ3JlIHVzaW5nICovCi0Jd2wtPmNoaXAucG93ZXJfb25fc2xlZXAgPSBXTDEyWFhfREVGQVVMVF9QT1dFUl9PTl9TTEVFUDsKLQotCWZvciAoaSA9IDA7IGkgPCBGV19UWF9DTVBMVF9CTE9DS19TSVpFOyBpKyspCi0JCXdsLT50eF9mcmFtZXNbaV0gPSBOVUxMOwotCi0Jd2wtPm5leHRfdHhfY29tcGxldGUgPSAwOwotCi0JLyoKLQkgKiBJbiBjYXNlIG91ciBNQUMgYWRkcmVzcyBpcyBub3QgY29ycmVjdGx5IHNldCwKLQkgKiB3ZSB1c2UgYSByYW5kb20gYnV0IE5va2lhIE1BQy4KLQkgKi8KLQltZW1jcHkod2wtPm1hY19hZGRyLCBub2tpYV9vdWksIDMpOwotCWdldF9yYW5kb21fYnl0ZXMod2wtPm1hY19hZGRyICsgMywgMyk7Ci0KLQl3bC0+c3RhdGUgPSBXTDEyWFhfU1RBVEVfT0ZGOwotCW11dGV4X2luaXQoJndsLT5tdXRleCk7Ci0KLQl3bC0+dHhfbWdtdF9mcm1fcmF0ZSA9IERFRkFVTFRfSFdfR0VOX1RYX1JBVEU7Ci0Jd2wtPnR4X21nbXRfZnJtX21vZCA9IERFRkFVTFRfSFdfR0VOX01PRFVMQVRJT05fVFlQRTsKLQotCS8qIFRoaXMgaXMgdGhlIG9ubHkgU1BJIHZhbHVlIHRoYXQgd2UgbmVlZCB0byBzZXQgaGVyZSwgdGhlIHJlc3QKLQkgKiBjb21lcyBmcm9tIHRoZSBib2FyZC1wZXJpcGhlcmFscyBmaWxlICovCi0Jc3BpLT5iaXRzX3Blcl93b3JkID0gMzI7Ci0KLQlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoInNwaV9zZXR1cCBmYWlsZWQiKTsKLQkJZ290byBvdXRfZnJlZTsKLQl9Ci0KLQl3bC0+c2V0X3Bvd2VyID0gcGRhdGEtPnNldF9wb3dlcjsKLQlpZiAoIXdsLT5zZXRfcG93ZXIpIHsKLQkJd2wxMnh4X2Vycm9yKCJzZXQgcG93ZXIgZnVuY3Rpb24gbWlzc2luZyBpbiBwbGF0Zm9ybSBkYXRhIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXdsLT5pcnEgPSBzcGktPmlycTsKLQlpZiAod2wtPmlycSA8IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJpcnEgbWlzc2luZyBpbiBwbGF0Zm9ybSBkYXRhIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJldCA9IHJlcXVlc3RfaXJxKHdsLT5pcnEsIHdsMTJ4eF9pcnEsIDAsIERSSVZFUl9OQU1FLCB3bCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJyZXF1ZXN0X2lycSgpIGZhaWxlZDogJWQiLCByZXQpOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQotCXNldF9pcnFfdHlwZSh3bC0+aXJxLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7Ci0KLQlkaXNhYmxlX2lycSh3bC0+aXJxKTsKLQotCXJldCA9IHdsMTJ4eF9pbml0X2llZWU4MDIxMSh3bCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfaXJxOwotCi0JcmV0ID0gd2wxMnh4X3JlZ2lzdGVyX2h3KHdsKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9pcnE7Ci0KLQl3bDEyeHhfZGVidWdmc19pbml0KHdsKTsKLQotCXdsMTJ4eF9ub3RpY2UoImluaXRpYWxpemVkIik7Ci0KLQlyZXR1cm4gMDsKLQotIG91dF9pcnE6Ci0JZnJlZV9pcnEod2wtPmlycSwgd2wpOwotCi0gb3V0X2ZyZWU6Ci0JaWVlZTgwMjExX2ZyZWVfaHcoaHcpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgd2wxMnh4X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0cnVjdCB3bDEyeHggKndsID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7Ci0KLQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3bC0+aHcpOwotCi0Jd2wxMnh4X2RlYnVnZnNfZXhpdCh3bCk7Ci0KLQlmcmVlX2lycSh3bC0+aXJxLCB3bCk7Ci0Ja2ZyZWUod2wtPnRhcmdldF9tZW1fbWFwKTsKLQlrZnJlZSh3bC0+ZGF0YV9wYXRoKTsKLQlrZnJlZSh3bC0+ZncpOwotCXdsLT5mdyA9IE5VTEw7Ci0Ja2ZyZWUod2wtPm52cyk7Ci0Jd2wtPm52cyA9IE5VTEw7Ci0JaWVlZTgwMjExX2ZyZWVfaHcod2wtPmh3KTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bDEyeHhfc3BpX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZQkJPSAid2wxMnh4IiwKLQkJLmJ1cwkJPSAmc3BpX2J1c190eXBlLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JfSwKLQotCS5wcm9iZQkJPSB3bDEyeHhfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bDEyeHhfcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHdsMTJ4eF9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJndsMTJ4eF9zcGlfZHJpdmVyKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoImZhaWxlZCB0byByZWdpc3RlciBzcGkgZHJpdmVyOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB3bDEyeHhfZXhpdCh2b2lkKQotewotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmd2wxMnh4X3NwaV9kcml2ZXIpOwotCi0Jd2wxMnh4X25vdGljZSgidW5sb2FkZWQiKTsKLX0KLQotbW9kdWxlX2luaXQod2wxMnh4X2luaXQpOwotbW9kdWxlX2V4aXQod2wxMnh4X2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJLYWxsZSBWYWxvIDxLYWxsZS5WYWxvQG5va2lhLmNvbT4sICIKLQkJIkx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9wcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2ExMDExLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9wcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwcy5oIgotI2luY2x1ZGUgInNwaS5oIgotCi0jZGVmaW5lIFdMMTJYWF9XQUtFVVBfVElNRU9VVCAyMDAwCi0KLS8qIFJvdXRpbmVzIHRvIHRvZ2dsZSBzbGVlcCBtb2RlIHdoaWxlIGluIEVMUCAqLwotdm9pZCB3bDEyeHhfcHNfZWxwX3NsZWVwKHN0cnVjdCB3bDEyeHggKndsKQotewotCWlmICh3bC0+ZWxwIHx8ICF3bC0+cHNtKQotCQlyZXR1cm47Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfUFNNLCAiY2hpcCB0byBlbHAiKTsKLQotCXdsMTJ4eF93cml0ZTMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIsIEVMUENUUkxfU0xFRVApOwotCi0Jd2wtPmVscCA9IHRydWU7Ci19Ci0KLWludCB3bDEyeHhfcHNfZWxwX3dha2V1cChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JdTMyIGVscF9yZWc7Ci0KLQlpZiAoIXdsLT5lbHApCi0JCXJldHVybiAwOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX1BTTSwgIndha2luZyB1cCBjaGlwIGZyb20gZWxwIik7Ci0KLQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoV0wxMlhYX1dBS0VVUF9USU1FT1VUKTsKLQotCXdsMTJ4eF93cml0ZTMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIsIEVMUENUUkxfV0FLRV9VUCk7Ci0KLQllbHBfcmVnID0gd2wxMnh4X3JlYWQzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSKTsKLQotCS8qCi0JICogRklYTUU6IHdlIHNob3VsZCB3YWl0IGZvciBpcnEgZnJvbSBjaGlwIGJ1dCwgYXMgYSB0ZW1wb3JhcnkKLQkgKiBzb2x1dGlvbiB0byBzaW1wbGlmeSBsb2NraW5nLCBsZXQncyBwb2xsIGluc3RlYWQKLQkgKi8KLQl3aGlsZSAoIShlbHBfcmVnICYgRUxQQ1RSTF9XTEFOX1JFQURZKSkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJd2wxMnh4X2Vycm9yKCJlbHAgd2FrZXVwIHRpbWVvdXQiKTsKLQkJCXJldHVybiAtRVRJTUVET1VUOwotCQl9Ci0JCW1zbGVlcCgxKTsKLQkJZWxwX3JlZyA9IHdsMTJ4eF9yZWFkMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUik7Ci0JfQotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX1BTTSwgIndha2V1cCB0aW1lOiAldSBtcyIsCi0JCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzKSAtCi0JCSAgICAgKGppZmZpZXNfdG9fbXNlY3ModGltZW91dCkgLSBXTDEyWFhfV0FLRVVQX1RJTUVPVVQpKTsKLQotCXdsLT5lbHAgPSBmYWxzZTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF9wc19zZXRfZWxwKHN0cnVjdCB3bDEyeHggKndsLCBib29sIGVuYWJsZSkKLXsKLQlpbnQgcmV0OwotCi0JaWYgKGVuYWJsZSkgewotCQl3bDEyeHhfZGVidWcoREVCVUdfUFNNLCAic2xlZXAgYXV0aCBwc20vZWxwIik7Ci0KLQkJLyoKLQkJICogRklYTUU6IHdlIHNob3VsZCBQU01fRUxQLCBidXQgYmVjYXVzZSBvZiBmaXJtd2FyZSB3YWtldXAKLQkJICogcHJvYmxlbXMgbGV0J3MgdXNlIG9ubHkgUFNNX1BTCi0JCSAqLwotCQlyZXQgPSB3bDEyeHhfYWN4X3NsZWVwX2F1dGgod2wsIFdMMTJYWF9QU01fUFMpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJd2wxMnh4X3BzX2VscF9zbGVlcCh3bCk7Ci0JfSBlbHNlIHsKLQkJd2wxMnh4X2RlYnVnKERFQlVHX1BTTSwgInNsZWVwIGF1dGggY2FtIik7Ci0KLQkJLyoKLQkJICogV2hlbiB0aGUgdGFyZ2V0IGlzIGluIEVMUCwgd2UgY2FuIG9ubHkKLQkJICogYWNjZXNzIHRoZSBFTFAgY29udHJvbCByZWdpc3Rlci4gVGh1cywKLQkJICogd2UgaGF2ZSB0byB3YWtlIHRoZSB0YXJnZXQgdXAgYmVmb3JlCi0JCSAqIGNoYW5naW5nIHRoZSBwb3dlciBhdXRob3JpemF0aW9uLgotCQkgKi8KLQotCQl3bDEyeHhfcHNfZWxwX3dha2V1cCh3bCk7Ci0KLQkJcmV0ID0gd2wxMnh4X2FjeF9zbGVlcF9hdXRoKHdsLCBXTDEyWFhfUFNNX0NBTSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9wc19zZXRfbW9kZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgZW51bSBhY3hfcHNfbW9kZSBtb2RlKQotewotCWludCByZXQ7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFOgotCQl3bDEyeHhfZGVidWcoREVCVUdfUFNNLCAiZW50ZXJpbmcgcHNtIik7Ci0JCXJldCA9IHdsMTJ4eF9jbWRfcHNfbW9kZSh3bCwgU1RBVElPTl9QT1dFUl9TQVZFX01PREUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJcmV0ID0gd2wxMnh4X3BzX3NldF9lbHAod2wsIHRydWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJd2wtPnBzbSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgU1RBVElPTl9BQ1RJVkVfTU9ERToKLQlkZWZhdWx0OgotCQl3bDEyeHhfZGVidWcoREVCVUdfUFNNLCAibGVhdmluZyBwc20iKTsKLQkJcmV0ID0gd2wxMnh4X3BzX3NldF9lbHAod2wsIGZhbHNlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCXJldCA9IHdsMTJ4eF9jbWRfcHNfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQl3bC0+cHNtID0gMDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3BzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ3YzUyNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSNpZm5kZWYgX19XTDEyWFhfUFNfSF9fCi0jZGVmaW5lIF9fV0wxMlhYX1BTX0hfXwotCi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4Ci0gKgotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJ3bDEyeHguaCIKLSNpbmNsdWRlICJhY3guaCIKLQotaW50IHdsMTJ4eF9wc19zZXRfbW9kZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgZW51bSBhY3hfcHNfbW9kZSBtb2RlKTsKLXZvaWQgd2wxMnh4X3BzX2VscF9zbGVlcChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X3BzX2VscF93YWtldXAoc3RydWN0IHdsMTJ4eCAqd2wpOwotCi0KLSNlbmRpZiAvKiBfX1dMMTJYWF9QU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yZWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQyMTY0My4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcmVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NDUgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAotICoKLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fUkVHX0hfXwotI2RlZmluZSBfX1JFR19IX18KLQotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgIndsMTJ4eC5oIgotCi0jZGVmaW5lIFJFR0lTVEVSU19CQVNFIDB4MDAzMDAwMDAKLSNkZWZpbmUgRFJQV19CQVNFICAgICAgMHgwMDMxMDAwMAotCi0jZGVmaW5lIFJFR0lTVEVSU19ET1dOX1NJWkUgMHgwMDAwODgwMAotI2RlZmluZSBSRUdJU1RFUlNfV09SS19TSVpFIDB4MDAwMGIwMDAKLQotI2RlZmluZSBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIgICAgICAgICAweDFGRkZDCi0KLS8qIEVMUCByZWdpc3RlciBjb21tYW5kcyAqLwotI2RlZmluZSBFTFBDVFJMX1dBS0VfVVAgICAgICAgICAgICAgMHgxCi0jZGVmaW5lIEVMUENUUkxfV0FLRV9VUF9XTEFOX1JFQURZICAweDUKLSNkZWZpbmUgRUxQQ1RSTF9TTEVFUCAgICAgICAgICAgICAgIDB4MAotLyogRUxQIFdMQU5fUkVBRFkgYml0ICovCi0jZGVmaW5lIEVMUENUUkxfV0xBTl9SRUFEWSAgICAgICAgICAweDIKLQotLyoKLSAqIEludGVycnVwdCByZWdpc3RlcnMuCi0gKiA2NCBiaXQgaW50ZXJydXB0IHNvdXJjZXMgcmVnaXN0ZXJzIHdzIGNlZC4KLSAqIHNtZSBpbnRlcnVwdHMgd2VyZSByZW1vdmVkIGFuZCBuZXcgb25lcyB3ZXJlIGFkZGVkLgotICogT3JkZXIgd2FzIGNoYW5nZWQuCi0gKi8KLSNkZWZpbmUgRklRX01BU0sgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQwMCkKLSNkZWZpbmUgRklRX01BU0tfTCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQwMCkKLSNkZWZpbmUgRklRX01BU0tfSCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQwNCkKLSNkZWZpbmUgRklRX01BU0tfU0VUICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQwOCkKLSNkZWZpbmUgRklRX01BU0tfU0VUX0wgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQwOCkKLSNkZWZpbmUgRklRX01BU0tfU0VUX0ggICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQwQykKLSNkZWZpbmUgRklRX01BU0tfQ0xSICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQxMCkKLSNkZWZpbmUgRklRX01BU0tfQ0xSX0wgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQxMCkKLSNkZWZpbmUgRklRX01BU0tfQ0xSX0ggICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQxNCkKLSNkZWZpbmUgSVJRX01BU0sgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQxOCkKLSNkZWZpbmUgSVJRX01BU0tfTCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQxOCkKLSNkZWZpbmUgSVJRX01BU0tfSCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQxQykKLSNkZWZpbmUgSVJRX01BU0tfU0VUICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQyMCkKLSNkZWZpbmUgSVJRX01BU0tfU0VUX0wgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQyMCkKLSNkZWZpbmUgSVJRX01BU0tfU0VUX0ggICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQyNCkKLSNkZWZpbmUgSVJRX01BU0tfQ0xSICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQyOCkKLSNkZWZpbmUgSVJRX01BU0tfQ0xSX0wgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQyOCkKLSNkZWZpbmUgSVJRX01BU0tfQ0xSX0ggICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQyQykKLSNkZWZpbmUgRUNQVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ0OCkKLSNkZWZpbmUgRklRX1NUU19MICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ0QykKLSNkZWZpbmUgRklRX1NUU19IICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ1MCkKLSNkZWZpbmUgSVJRX1NUU19MICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ1NCkKLSNkZWZpbmUgSVJRX1NUU19IICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ1OCkKLSNkZWZpbmUgSU5UX1NUU19ORCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ2NCkKLSNkZWZpbmUgSU5UX1NUU19SQVdfTCAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ2NCkKLSNkZWZpbmUgSU5UX1NUU19SQVdfSCAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ2OCkKLSNkZWZpbmUgSU5UX1NUU19DTFIgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRCNCkKLSNkZWZpbmUgSU5UX1NUU19DTFJfTCAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRCNCkKLSNkZWZpbmUgSU5UX1NUU19DTFJfSCAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRCOCkKLSNkZWZpbmUgSU5UX0FDSyAgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ2QykKLSNkZWZpbmUgSU5UX0FDS19MICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ2QykKLSNkZWZpbmUgSU5UX0FDS19IICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3MCkKLSNkZWZpbmUgSU5UX1RSSUcgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3NCkKLSNkZWZpbmUgSU5UX1RSSUdfTCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3NCkKLSNkZWZpbmUgSU5UX1RSSUdfSCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3OCkKLSNkZWZpbmUgSE9TVF9TVFNfTCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ1QykKLSNkZWZpbmUgSE9TVF9TVFNfSCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ2MCkKLSNkZWZpbmUgSE9TVF9NQVNLICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQzMCkKLSNkZWZpbmUgSE9TVF9NQVNLX0wgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQzMCkKLSNkZWZpbmUgSE9TVF9NQVNLX0ggICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQzNCkKLSNkZWZpbmUgSE9TVF9NQVNLX1NFVCAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQzOCkKLSNkZWZpbmUgSE9TVF9NQVNLX1NFVF9MICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQzOCkKLSNkZWZpbmUgSE9TVF9NQVNLX1NFVF9IICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQzQykKLSNkZWZpbmUgSE9TVF9NQVNLX0NMUiAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ0MCkKLSNkZWZpbmUgSE9TVF9NQVNLX0NMUl9MICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ0MCkKLSNkZWZpbmUgSE9TVF9NQVNLX0NMUl9IICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ0NCkKLQotLyogSG9zdCBJbnRlcnJ1cHRzKi8KLSNkZWZpbmUgSElOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5NCkKLSNkZWZpbmUgSElOVF9NQVNLX1NFVCAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5OCkKLSNkZWZpbmUgSElOVF9NQVNLX0NMUiAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5QykKLSNkZWZpbmUgSElOVF9TVFNfTkRfTUFTS0VEICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRBMCkKLS8qMTE1MCBzcGVjIGNhbGxzIHRoaXMgSElOVF9TVFNfUkFXKi8KLSNkZWZpbmUgSElOVF9TVFNfTkQJCSAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QjApCi0jZGVmaW5lIEhJTlRfU1RTX0NMUiAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QTQpCi0jZGVmaW5lIEhJTlRfQUNLICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QTgpCi0jZGVmaW5lIEhJTlRfVFJJRyAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QUMpCi0KLS8qIERldmljZSBDb25maWd1cmF0aW9uIHJlZ2lzdGVycyovCi0jZGVmaW5lIFNPUl9DRkcgICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA4MDApCi0jZGVmaW5lIEVDUFVfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA4MDQpCi0jZGVmaW5lIEhJX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA4MDgpCi0jZGVmaW5lIEVFX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA4MEMpCi0KLSNkZWZpbmUgQ0hJUF9JRF9CICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTY3NCkKLQotI2RlZmluZSBDSElQX0lEXzEyNTFfUEcxMAkgICAgICAgICAgICgweDcwMTAxMDEpCi0jZGVmaW5lIENISVBfSURfMTI1MV9QRzExCSAgICAgICAgICAgKDB4NzAyMDEwMSkKLSNkZWZpbmUgQ0hJUF9JRF8xMjUxX1BHMTIJICAgICAgICAgICAoMHg3MDMwMTAxKQotCi0jZGVmaW5lIEVOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU0NTApCi0KLS8qIFBvd2VyIE1hbmFnZW1lbnQgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEVMUF9DRkdfTU9ERSAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU4MDQpCi0jZGVmaW5lIEVMUF9DTUQgICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU4MDgpCi0jZGVmaW5lIFBMTF9DQUxfVElNRSAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU4MTApCi0jZGVmaW5lIENMS19SRVFfVElNRSAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU4MTQpCi0jZGVmaW5lIENMS19CVUZfVElNRSAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU4MTgpCi0KLSNkZWZpbmUgQ0ZHX1BMTF9TWU5DX0NOVCAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTgyMCkKLQotLyogU2NyYXRjaCBQYWQgcmVnaXN0ZXJzKi8KLSNkZWZpbmUgU0NSX1BBRDAgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYwOCkKLSNkZWZpbmUgU0NSX1BBRDEgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYwQykKLSNkZWZpbmUgU0NSX1BBRDIgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYxMCkKLSNkZWZpbmUgU0NSX1BBRDMgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYxNCkKLSNkZWZpbmUgU0NSX1BBRDQgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYxOCkKLSNkZWZpbmUgU0NSX1BBRDRfU0VUICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYxQykKLSNkZWZpbmUgU0NSX1BBRDRfQ0xSICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYyMCkKLSNkZWZpbmUgU0NSX1BBRDUgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYyNCkKLSNkZWZpbmUgU0NSX1BBRDVfU0VUICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYyOCkKLSNkZWZpbmUgU0NSX1BBRDVfQ0xSICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYyQykKLSNkZWZpbmUgU0NSX1BBRDYgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYzMCkKLSNkZWZpbmUgU0NSX1BBRDcgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYzNCkKLSNkZWZpbmUgU0NSX1BBRDggICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYzOCkKLSNkZWZpbmUgU0NSX1BBRDkgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYzQykKLQotLyogU3BhcmUgcmVnaXN0ZXJzKi8KLSNkZWZpbmUgU1BBUkVfQTEgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDk5NCkKLSNkZWZpbmUgU1BBUkVfQTIgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDk5OCkKLSNkZWZpbmUgU1BBUkVfQTMgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDk5QykKLSNkZWZpbmUgU1BBUkVfQTQgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDlBMCkKLSNkZWZpbmUgU1BBUkVfQTUgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDlBNCkKLSNkZWZpbmUgU1BBUkVfQTYgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDlBOCkKLSNkZWZpbmUgU1BBUkVfQTcgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDlBQykKLSNkZWZpbmUgU1BBUkVfQTggICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDlCMCkKLSNkZWZpbmUgU1BBUkVfQjEgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQyMCkKLSNkZWZpbmUgU1BBUkVfQjIgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQyNCkKLSNkZWZpbmUgU1BBUkVfQjMgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQyOCkKLSNkZWZpbmUgU1BBUkVfQjQgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQyQykKLSNkZWZpbmUgU1BBUkVfQjUgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQzMCkKLSNkZWZpbmUgU1BBUkVfQjYgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQzNCkKLSNkZWZpbmUgU1BBUkVfQjcgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQzOCkKLSNkZWZpbmUgU1BBUkVfQjggICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQzQykKLQotZW51bSB3bDEyeHhfYWN4X2ludF9yZWcgewotCUFDWF9SRUdfSU5URVJSVVBUX1RSSUcsCi0JQUNYX1JFR19JTlRFUlJVUFRfVFJJR19ILAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBIb3N0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0gMzJiaXQgKFJXKQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgU2V0dGluZyBhIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIG1hc2tzIHRoZQotICBjb3JyZXNwb25kaW5nIGludGVycnVwdCB0byB0aGUgaG9zdC4KLSAgMCAtIFJYMAkJLSBSeCBmaXJzdCBkdWJibGUgYnVmZmVyIERhdGEgSW50ZXJydXB0Ci0gIDEgLSBUWEQJCS0gVHggRGF0YSBJbnRlcnJ1cHQKLSAgMiAtIFRYWEZSCQktIFR4IFRyYW5zZmVyIEludGVycnVwdAotICAzIC0gUlgxCQktIFJ4IHNlY29uZCBkdWJibGUgYnVmZmVyIERhdGEgSW50ZXJydXB0Ci0gIDQgLSBSWFhGUgkJLSBSeCBUcmFuc2ZlciBJbnRlcnJ1cHQKLSAgNSAtIEVWRU5UX0EJLSBFdmVudCBNYWlsYm94IGludGVycnVwdAotICA2IC0gRVZFTlRfQgktIEV2ZW50IE1haWxib3ggaW50ZXJydXB0Ci0gIDcgLSBXTk9OSFNUCS0gV2FrZSBPbiBIb3N0IEludGVycnVwdAotICA4IC0gVFJBQ0VfQQktIERlYnVnIFRyYWNlIGludGVycnVwdAotICA5IC0gVFJBQ0VfQgktIERlYnVnIFRyYWNlIGludGVycnVwdAotIDEwIC0gQ0RDTVAJCS0gQ29tbWFuZCBDb21wbGV0ZSBJbnRlcnJ1cHQKLSAxMSAtCi0gMTIgLQotIDEzIC0KLSAxNCAtIElDT01QCQktIEluaXRpYWxpemF0aW9uIENvbXBsZXRlIEludGVycnVwdAotIDE2IC0gU0cgU0UJCS0gU29mdCBHZW1pbmkgLSBTZW5zZSBlbmFibGUgaW50ZXJydXB0Ci0gMTcgLSBTRyBTRAkJLSBTb2Z0IEdlbWluaSAtIFNlbnNlIGRpc2FibGUgaW50ZXJydXB0Ci0gMTggLQkJCS0KLSAxOSAtCQkJLQotIDIwIC0JCQktCi0gMjEtCQkJLQotIERlZmF1bHQ6IDB4MDAwMQotKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCUFDWF9SRUdfSU5URVJSVVBUX01BU0ssCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIEhvc3QgSW50ZXJydXB0IE1hc2sgU2V0IDE2Yml0LCAoV3JpdGUgb25seSkKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gU2V0dGluZyBhIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIHNldHMKLSB0aGUgY29ycmVzcG9uZGluZyBiaW4gaW4gQUNYX0hJTlRfTUFTSyByZWdpc3RlcgotIHdpdGhvdXQgZWZmZWN0aW5nIHRoZSBtYXNrCi0gc3RhdGUgb2Ygb3RoZXIgYml0cyAoMCA9IG5vIGVmZmVjdCkuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQlBQ1hfUkVHX0hJTlRfTUFTS19TRVQsCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIEhvc3QgSW50ZXJydXB0IE1hc2sgQ2xlYXIgMTZiaXQsKFdyaXRlIG9ubHkpCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFNldHRpbmcgYSBiaXQgaW4gdGhpcyByZWdpc3RlciBjbGVhcnMKLSB0aGUgY29ycmVzcG9uZGluZyBiaW4gaW4gQUNYX0hJTlRfTUFTSyByZWdpc3RlcgotIHdpdGhvdXQgZWZmZWN0aW5nIHRoZSBtYXNrCi0gc3RhdGUgb2Ygb3RoZXIgYml0cyAoMCA9IG5vIGVmZmVjdCkuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCUFDWF9SRUdfSElOVF9NQVNLX0NMUiwKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE5vbmRlc3RydWN0aXZlIFJlYWQKLSAgMTZiaXQsKFJlYWQgb25seSkKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gVGhlIGhvc3QgY2FuIHJlYWQgdGhpcyByZWdpc3RlciB0byBkZXRlcm1pbmUKLSB3aGljaCBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUuCi0gUmVhZGluZyB0aGlzIHJlZ2lzdGVyIGRvZXNuJ3QKLSBlZmZlY3QgaXRzIGNvbnRlbnQuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCUFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSLAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBIb3N0IEludGVycnVwdCBTdGF0dXMgQ2xlYXIgb24gUmVhZCAgUmVnaXN0ZXIKLSAgMTZiaXQsKFJlYWQgb25seSkKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gVGhlIGhvc3QgY2FuIHJlYWQgdGhpcyByZWdpc3RlciB0byBkZXRlcm1pbmUKLSB3aGljaCBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUuCi0gUmVhZGluZyB0aGlzIHJlZ2lzdGVyIGNsZWFycyBpdCwKLSB0aHVzIG1ha2luZyBhbGwgaW50ZXJydXB0cyBpbmFjdGl2ZS4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCUFDWF9SRUdfSU5URVJSVVBUX0NMRUFSLAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBIb3N0IEludGVycnVwdCBBY2tub3dsZWRnZSBSZWdpc3RlcgotICAxNmJpdCwoV3JpdGUgb25seSkKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gVGhlIGhvc3QgY2FuIHNldCBpbmRpdmlkdWFsIGJpdHMgaW4gdGhpcwotIHJlZ2lzdGVyIHRvIGNsZWFyIChhY2tub3dsZWRnZSkgdGhlIGNvcnJlc3AuCi0gaW50ZXJydXB0IHN0YXR1cyBiaXRzIGluIHRoZSBISU5UX1NUU19DTFIgYW5kCi0gSElOVF9TVFNfTkQgcmVnaXN0ZXJzLCB0aHVzIG1ha2luZyB0aGUKLSBhc3NvdGlhdGVkIGludGVycnVwdCBpbmFjdGl2ZS4gKDAtbm8gZWZmZWN0KQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0JQUNYX1JFR19JTlRFUlJVUFRfQUNLLAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICBIb3N0IFNvZnR3YXJlIFJlc2V0IC0gMzJiaXQgUlcKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBbMzE6MV0gUmVzZXJ2ZWQKLSAgICAwICBTT0ZUX1JFU0VUIFNvZnQgUmVzZXQgIC0gV2hlbiB0aGlzIGJpdCBpcyBzZXQsCi0gICAgaXQgaG9sZHMgdGhlIFdsYW4gaGFyZHdhcmUgaW4gYSBzb2Z0IHJlc2V0IHN0YXRlLgotICAgIFRoaXMgcmVzZXQgZGlzYWJsZXMgYWxsIE1BQyBhbmQgYmFzZWJhbmQgcHJvY2Vzc29yCi0gICAgY2xvY2tzIGV4Y2VwdCB0aGUgQ2FyZEJ1cy9QQ0kgaW50ZXJmYWNlIGNsb2NrLgotICAgIEl0IGFsc28gaW5pdGlhbGl6ZXMgYWxsIE1BQyBzdGF0ZSBtYWNoaW5lcyBleGNlcHQKLSAgICB0aGUgaG9zdCBpbnRlcmZhY2UuIEl0IGRvZXMgbm90IHJlbG9hZCB0aGUKLSAgICBjb250ZW50cyBvZiB0aGUgRUVQUk9NLiBXaGVuIHRoaXMgYml0IGlzIGNsZWFyZWQKLSAgICAobm90IHNlbGYtY2xlYXJpbmcpLCB0aGUgV2xhbiBoYXJkd2FyZQotICAgIGV4aXRzIHRoZSBzb2Z0d2FyZSByZXNldCBzdGF0ZS4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQlBQ1hfUkVHX1NMVl9TT0ZUX1JFU0VULAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gRUVQUk9NIEJ1cnN0IFJlYWQgU3RhcnQgIC0gMzJiaXQgUlcKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBbMzE6MV0gUmVzZXJ2ZWQKLSAwICBBQ1hfRUVfU1RBUlQgLSAgRUVQUk9NIEJ1cnN0IFJlYWQgU3RhcnQgMAotIFNldHRpbmcgdGhpcyBiaXQgc3RhcnRzIGEgYnVyc3QgcmVhZCBmcm9tCi0gdGhlIGV4dGVybmFsIEVFUFJPTS4KLSBJZiB0aGlzIGJpdCBpcyBzZXQgKGFmdGVyIHJlc2V0KSBiZWZvcmUgYW4gRUVQUk9NIHJlYWQvd3JpdGUsCi0gdGhlIGJ1cnN0IHJlYWQgc3RhcnRzIGF0IEVFUFJPTSBhZGRyZXNzIDAuCi0gT3RoZXJ3aXNlLCBpdCBzdGFydHMgYXQgdGhlIGFkZHJlc3MKLSBmb2xsb3dpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIGFjY2Vzcy4KLSBUaGVXbGFuIGhhcmR3YXJlIGhhcmR3YXJlIGNsZWFycyB0aGlzIGJpdCBhdXRvbWF0aWNhbGx5LgotCi0gRGVmYXVsdDogMHgwMDAwMDAwMAotKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0JQUNYX1JFR19FRV9TVEFSVCwKLQotLyogRW1iZWRkZWQgQVJNIENQVSBDb250cm9sICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSBIYWx0IGVDUFUgICAtIDMyYml0IFJXCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gMCBIQUxUX0VDUFUgSGFsdCBFbWJlZGRlZCBDUFUgLSBUaGlzIGJpdCBpcyB0aGUKLSBjb21wbGltZW50IG9mIGJpdCAxIChNREFUQTIpIGluIHRoZSBTT1JfQ0ZHIHJlZ2lzdGVyLgotIER1cmluZyBhIGhhcmR3YXJlIHJlc2V0LCB0aGlzIGJpdCBob2xkcwotIHRoZSBpbnZlcnNlIG9mIE1EQVRBMi4KLSBXaGVuIGRvd25sb2FkaW5nIGZpcm13YXJlIGZyb20gdGhlIGhvc3QsCi0gc2V0IHRoaXMgYml0IChwdWxsIGRvd24gTURBVEEyKS4KLSBUaGUgaG9zdCBjbGVhcnMgdGhpcyBiaXQgYWZ0ZXIgZG93bmxvYWRpbmcgdGhlIGZpcm13YXJlIGludG8KLSB6ZXJvLXdhaXQtc3RhdGUgU1NSQU0uCi0gV2hlbiBsb2FkaW5nIGZpcm13YXJlIGZyb20gRmxhc2gsIGNsZWFyIHRoaXMgYml0IChwdWxsIHVwIE1EQVRBMikKLSBzbyB0aGF0IHRoZSBlQ1BVIGNhbiBydW4gdGhlIGJvb3Rsb2FkZXIgY29kZSBpbiBGbGFzaAotIEhBTFRfRUNQVSBlQ1BVIFN0YXRlCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAxIGhhbHQgZUNQVQotIDAgZW5hYmxlIGVDUFUKLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0JQUNYX1JFR19FQ1BVX0NPTlRST0wsCi0KLQlBQ1hfUkVHX1RBQkxFX0xFTgotfTsKLQotI2RlZmluZSBBQ1hfU0xWX1NPRlRfUkVTRVRfQklUICAgQklUKDEpCi0jZGVmaW5lIEFDWF9SRUdfRUVQUk9NX1NUQVJUX0JJVCBCSVQoMSkKLQotLyogQ29tbWFuZC9JbmZvcm1hdGlvbiBNYWlsYm94IFBvaW50ZXJzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgQ29tbWFuZCBNYWlsYm94IFBvaW50ZXIgLSAzMmJpdCBSVwotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFRoaXMgcmVnaXN0ZXIgaG9sZHMgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YKLSB0aGUgY29tbWFuZCBtYWlsYm94IGxvY2F0ZWQgaW4gdGhlIFdsYW4gaGFyZHdhcmUgbWVtb3J5LgotIFRoZSBob3N0IG11c3QgcmVhZCB0aGlzIHBvaW50ZXIgYWZ0ZXIgYSByZXNldCB0bwotIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tYW5kIG1haWxib3guCi0gVGhlIFdsYW4gaGFyZHdhcmUgaW5pdGlhbGl6ZXMgdGhlIGNvbW1hbmQgbWFpbGJveAotIHBvaW50ZXIgd2l0aCB0aGUgZGVmYXVsdCBhZGRyZXNzIG9mIHRoZSBjb21tYW5kIG1haWxib3guCi0gVGhlIGNvbW1hbmQgbWFpbGJveCBwb2ludGVyIGlzIG5vdCB2YWxpZCB1bnRpbCBhZnRlcgotIHRoZSBob3N0IHJlY2VpdmVzIHRoZSBJbml0IENvbXBsZXRlIGludGVycnVwdCBmcm9tCi0gdGhlIFdsYW4gaGFyZHdhcmUuCi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotI2RlZmluZSBSRUdfQ09NTUFORF9NQUlMQk9YX1BUUgkJCQkoU0NSX1BBRDApCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgSW5mb3JtYXRpb24gTWFpbGJveCBQb2ludGVyIC0gMzJiaXQgUlcKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBUaGlzIHJlZ2lzdGVyIGhvbGRzIHRoZSBzdGFydCBhZGRyZXNzIG9mCi0gdGhlIGluZm9ybWF0aW9uIG1haWxib3ggbG9jYXRlZCBpbiB0aGUgV2xhbiBoYXJkd2FyZSBtZW1vcnkuCi0gVGhlIGhvc3QgbXVzdCByZWFkIHRoaXMgcG9pbnRlciBhZnRlciBhIHJlc2V0IHRvIGZpbmQKLSB0aGUgbG9jYXRpb24gb2YgdGhlIGluZm9ybWF0aW9uIG1haWxib3guCi0gVGhlIFdsYW4gaGFyZHdhcmUgaW5pdGlhbGl6ZXMgdGhlIGluZm9ybWF0aW9uIG1haWxib3ggcG9pbnRlcgotIHdpdGggdGhlIGRlZmF1bHQgYWRkcmVzcyBvZiB0aGUgaW5mb3JtYXRpb24gbWFpbGJveC4KLSBUaGUgaW5mb3JtYXRpb24gbWFpbGJveCBwb2ludGVyIGlzIG5vdCB2YWxpZAotIHVudGlsIGFmdGVyIHRoZSBob3N0IHJlY2VpdmVzIHRoZSBJbml0IENvbXBsZXRlIGludGVycnVwdCBmcm9tCi0gdGhlIFdsYW4gaGFyZHdhcmUuCi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotI2RlZmluZSBSRUdfRVZFTlRfTUFJTEJPWF9QVFIJCQkJKFNDUl9QQUQxKQotCi0KLS8qIE1pc2MgKi8KLQotI2RlZmluZSBSRUdfRU5BQkxFX1RYX1JYCQkJCShFTkFCTEUpCi0vKgotICogUnggY29uZmlndXJhdGlvbiAoZmlsdGVyKSBpbmZvcm1hdGlvbiBlbGVtZW50Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2RlZmluZSBSRUdfUlhfQ09ORklHCQkJCShSWF9DRkcpCi0jZGVmaW5lIFJFR19SWF9GSUxURVIJCQkJKFJYX0ZJTFRFUl9DRkcpCi0KLQotI2RlZmluZSBSWF9DRkdfRU5BQkxFX1BIWV9IRUFERVJfUExDUAkgMHgwMDAyCi0KLS8qIHByb21pc2N1b3VzIC0gcmVjZWl2ZXMgYWxsIHZhbGlkIGZyYW1lcyAqLwotI2RlZmluZSBSWF9DRkdfUFJPTUlTQ1VPVVMJCSAweDAwMDgKLQotLyogcmVjZWl2ZXMgZnJhbWVzIGZyb20gYW55IEJTU0lEICovCi0jZGVmaW5lIFJYX0NGR19CU1NJRAkJCSAweDAwMjAKLQotLyogcmVjZWl2ZXMgZnJhbWVzIGRlc3RpbmVkIHRvIGFueSBNQUMgYWRkcmVzcyAqLwotI2RlZmluZSBSWF9DRkdfTUFDCQkJIDB4MDAxMAotCi0jZGVmaW5lIFJYX0NGR19FTkFCTEVfT05MWV9NWV9ERVNUX01BQwkgMHgwMDEwCi0jZGVmaW5lIFJYX0NGR19FTkFCTEVfQU5ZX0RFU1RfTUFDCSAweDAwMDAKLSNkZWZpbmUgUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX0JTU0lECSAweDAwMjAKLSNkZWZpbmUgUlhfQ0ZHX0VOQUJMRV9BTllfQlNTSUQJCSAweDAwMDAKLQotLyogZGlzY2FyZHMgYWxsIGJyb2FkY2FzdCBmcmFtZXMgKi8KLSNkZWZpbmUgUlhfQ0ZHX0RJU0FCTEVfQkNBU1QJCSAweDAyMDAKLQotI2RlZmluZSBSWF9DRkdfRU5BQkxFX09OTFlfTVlfU1NJRAkgMHgwNDAwCi0jZGVmaW5lIFJYX0NGR19FTkFCTEVfUlhfQ01QTFRfRkNTX0VSUk9SIDB4MDgwMAotI2RlZmluZSBSWF9DRkdfQ09QWV9SWF9TVEFUVVMJCSAweDIwMDAKLSNkZWZpbmUgUlhfQ0ZHX1RTRgkJCSAweDEwMDAwCi0KLSNkZWZpbmUgUlhfQ09ORklHX09QVElPTl9BTllfRFNUX01ZX0JTUwkgKFJYX0NGR19FTkFCTEVfQU5ZX0RFU1RfTUFDIHwgXAotCQkJCQkgIFJYX0NGR19FTkFCTEVfT05MWV9NWV9CU1NJRCkKLQotI2RlZmluZSBSWF9DT05GSUdfT1BUSU9OX01ZX0RTVF9BTllfQlNTCSAoUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX0RFU1RfTUFDXAotCQkJCQkgIHwgUlhfQ0ZHX0VOQUJMRV9BTllfQlNTSUQpCi0KLSNkZWZpbmUgUlhfQ09ORklHX09QVElPTl9BTllfRFNUX0FOWV9CU1MgKFJYX0NGR19FTkFCTEVfQU5ZX0RFU1RfTUFDIHwgXAotCQkJCQkgIFJYX0NGR19FTkFCTEVfQU5ZX0JTU0lEKQotCi0jZGVmaW5lIFJYX0NPTkZJR19PUFRJT05fTVlfRFNUX01ZX0JTUwkgKFJYX0NGR19FTkFCTEVfT05MWV9NWV9ERVNUX01BQ1wKLQkJCQkJICB8IFJYX0NGR19FTkFCTEVfT05MWV9NWV9CU1NJRCkKLQotI2RlZmluZSBSWF9DT05GSUdfT1BUSU9OX0ZPUl9TQ0FOICAoUlhfQ0ZHX0VOQUJMRV9QSFlfSEVBREVSX1BMQ1AgXAotCQkJCSAgICB8IFJYX0NGR19FTkFCTEVfUlhfQ01QTFRfRkNTX0VSUk9SIFwKLQkJCQkgICAgfCBSWF9DRkdfQ09QWV9SWF9TVEFUVVMgfCBSWF9DRkdfVFNGKQotCi0jZGVmaW5lIFJYX0NPTkZJR19PUFRJT05fRk9SX01FQVNVUkVNRU5UIChSWF9DRkdfRU5BQkxFX0FOWV9ERVNUX01BQykKLQotI2RlZmluZSBSWF9DT05GSUdfT1BUSU9OX0ZPUl9KT0lOCSAoUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX0JTU0lEIHwgXAotCQkJCQkgIFJYX0NGR19FTkFCTEVfT05MWV9NWV9ERVNUX01BQykKLQotI2RlZmluZSBSWF9DT05GSUdfT1BUSU9OX0ZPUl9JQlNTX0pPSU4gICAoUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX1NTSUQgfCBcCi0JCQkJCSAgUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX0RFU1RfTUFDKQotCi0jZGVmaW5lIFJYX0ZJTFRFUl9PUFRJT05fREVGCSAgICAgIChDRkdfUlhfTUdNVF9FTiB8IENGR19SWF9EQVRBX0VOXAotCQkJCSAgICAgICB8IENGR19SWF9DVExfRU4gfCBDRkdfUlhfQkNOX0VOXAotCQkJCSAgICAgICB8IENGR19SWF9BVVRIX0VOIHwgQ0ZHX1JYX0FTU09DX0VOKQotCi0jZGVmaW5lIFJYX0ZJTFRFUl9PUFRJT05fRklMVEVSX0FMTAkgMAotCi0jZGVmaW5lIFJYX0ZJTFRFUl9PUFRJT05fREVGX1BSU1BfQkNOICAoQ0ZHX1JYX1BSU1BfRU4gfCBDRkdfUlhfTUdNVF9FTlwKLQkJCQkJfCBDRkdfUlhfUkNUU19BQ0sgfCBDRkdfUlhfQkNOX0VOKQotCi0jZGVmaW5lIFJYX0ZJTFRFUl9PUFRJT05fSk9JTgkgICAgIChDRkdfUlhfTUdNVF9FTiB8IENGR19SWF9EQVRBX0VOXAotCQkJCSAgICAgIHwgQ0ZHX1JYX0JDTl9FTiB8IENGR19SWF9BVVRIX0VOXAotCQkJCSAgICAgIHwgQ0ZHX1JYX0FTU09DX0VOIHwgQ0ZHX1JYX1JDVFNfQUNLXAotCQkJCSAgICAgIHwgQ0ZHX1JYX1BSU1BfRU4pCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBQaHkgcmVncwotID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgQUNYX1BIWV9BRERSX1JFRyAgICAgICAgICAgICAgICBTQkJfQUREUgotI2RlZmluZSBBQ1hfUEhZX0RBVEFfUkVHICAgICAgICAgICAgICAgIFNCQl9EQVRBCi0jZGVmaW5lIEFDWF9QSFlfQ1RSTF9SRUcgICAgICAgICAgICAgICAgU0JCX0NUTAotI2RlZmluZSBBQ1hfUEhZX1JFR19XUl9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDF1bAotI2RlZmluZSBBQ1hfUEhZX1JFR19SRF9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDJ1bAotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSBFRVBST00gUmVhZC9Xcml0ZSBSZXF1ZXN0IDMyYml0IFJXCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gMSBFRV9SRUFEIC0gRUVQUk9NIFJlYWQgUmVxdWVzdCAxIC0gU2V0dGluZyB0aGlzIGJpdAotIGxvYWRzIGEgc2luZ2xlIGJ5dGUgb2YgZGF0YSBpbnRvIHRoZSBFRV9EQVRBCi0gcmVnaXN0ZXIgZnJvbSB0aGUgRUVQUk9NIGxvY2F0aW9uIHNwZWNpZmllZCBpbgotIHRoZSBFRV9BRERSIHJlZ2lzdGVyLgotIFRoZSBXbGFuIGhhcmR3YXJlIGhhcmR3YXJlIGNsZWFycyB0aGlzIGJpdCBhdXRvbWF0aWNhbGx5LgotIEVFX0RBVEEgaXMgdmFsaWQgd2hlbiB0aGlzIGJpdCBpcyBjbGVhcmVkLgotCi0gMCBFRV9XUklURSAgLSBFRVBST00gV3JpdGUgUmVxdWVzdCAgLSBTZXR0aW5nIHRoaXMgYml0Ci0gd3JpdGVzIGEgc2luZ2xlIGJ5dGUgb2YgZGF0YSBmcm9tIHRoZSBFRV9EQVRBIHJlZ2lzdGVyIGludG8gdGhlCi0gRUVQUk9NIGxvY2F0aW9uIHNwZWNpZmllZCBpbiB0aGUgRUVfQUREUiByZWdpc3Rlci4KLSBUaGUgV2xhbiBoYXJkd2FyZSBoYXJkd2FyZSBjbGVhcnMgdGhpcyBiaXQgYXV0b21hdGljYWxseS4KLSo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0jZGVmaW5lIEFDWF9FRV9DVExfUkVHICAgICAgICAgICAgICAgICAgICAgIEVFX0NUTAotI2RlZmluZSBFRV9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxdWwKLSNkZWZpbmUgRUVfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMnVsCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgRUVQUk9NIEFkZHJlc3MgIC0gMzJiaXQgUlcKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFRoaXMgcmVnaXN0ZXIgc3BlY2lmaWVzIHRoZSBhZGRyZXNzCi0gIHdpdGhpbiB0aGUgRUVQUk9NIGZyb20vdG8gd2hpY2ggdG8gcmVhZC93cml0ZSBkYXRhLgotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0jZGVmaW5lIEFDWF9FRV9BRERSX1JFRyAgICAgICAgICAgICAgICAgICAgIEVFX0FERFIKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBFRVBST00gRGF0YSAgLSAzMmJpdCBSVwotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgVGhpcyByZWdpc3RlciBlaXRoZXIgaG9sZHMgdGhlIHJlYWQgOCBiaXRzIG9mCi0gIGRhdGEgZnJvbSB0aGUgRUVQUk9NIG9yIHRoZSB3cml0ZSBkYXRhCi0gIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTS4KLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotI2RlZmluZSBBQ1hfRUVfREFUQV9SRUcgICAgICAgICAgICAgICAgICAgICBFRV9EQVRBCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgRUVQUk9NIEJhc2UgQWRkcmVzcyAgLSAzMmJpdCBSVwotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgVGhpcyByZWdpc3RlciBob2xkcyB0aGUgdXBwZXIgbmluZSBiaXRzCi0gIFsyMzoxNV0gb2YgdGhlIDI0LWJpdCBXbGFuIGhhcmR3YXJlIG1lbW9yeQotICBhZGRyZXNzIGZvciBidXJzdCByZWFkcyBmcm9tIEVFUFJPTSBhY2Nlc3Nlcy4KLSAgVGhlIEVFUFJPTSBwcm92aWRlcyB0aGUgbG93ZXIgMTUgYml0cyBvZiB0aGlzIGFkZHJlc3MuCi0gIFRoZSBNU0Igb2YgdGhlIGFkZHJlc3MgZnJvbSB0aGUgRUVQUk9NIGlzIGlnbm9yZWQuCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgQUNYX0VFX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgRUVfQ0ZHCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgR1BJTyBPdXRwdXQgVmFsdWVzICAtMzJiaXQsIFJXCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBbMzE6MTZdICBSZXNlcnZlZAotICBbMTU6IDBdICBTcGVjaWZ5IHRoZSBvdXRwdXQgdmFsdWVzIChhdCB0aGUgb3V0cHV0IGRyaXZlciBpbnB1dHMpIGZvcgotICBHUElPWzE1OjBdLCByZXNwZWN0aXZlbHkuCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgQUNYX0dQSU9fT1VUX1JFRyAgICAgICAgICAgIEdQSU9fT1VUCi0jZGVmaW5lIEFDWF9NQVhfR1BJT19MSU5FUyAgICAgICAgICAxNQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIENvbnRlbnRpb24gd2luZG93ICAtMzJiaXQsIFJXCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBbMzE6MjZdICBSZXNlcnZlZAotICBbMjU6MTZdICBNYXggKDB4M2ZmKQotICBbMTU6MDddICBSZXNlcnZlZAotICBbMDY6MDBdICBDdXJyZW50IGNvbnRlbnRpb24gd2luZG93IHZhbHVlIC0gZGVmYXVsdCBpcyAweDFGCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgQUNYX0NPTlRfV0lORF9DRkdfUkVHICAgIENPTlRfV0lORF9DRkcKLSNkZWZpbmUgQUNYX0NPTlRfV0lORF9NSU5fTUFTSyAgIDB4MDAwMDAwN2YKLSNkZWZpbmUgQUNYX0NPTlRfV0lORF9NQVggICAgICAgIDB4MDNmZjAwMDAKLQotLyoKLSAqIEluZGlyZWN0IHNsYXZlIHJlZ2lzdGVyL21lbW9yeSByZWdpc3RlcnMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2RlZmluZSBIV19TTEFWRV9SRUdfQUREUl9SRUcJCTB4MDAwMDAwMDQKLSNkZWZpbmUgSFdfU0xBVkVfUkVHX0RBVEFfUkVHCQkweDAwMDAwMDA4Ci0jZGVmaW5lIEhXX1NMQVZFX1JFR19DVFJMX1JFRwkJMHgwMDAwMDAwYwotCi0jZGVmaW5lIFNMQVZFX0FVVE9fSU5DCQkJCTB4MDAwMTAwMDAKLSNkZWZpbmUgU0xBVkVfTk9fQVVUT19JTkMJCQkweDAwMDAwMDAwCi0jZGVmaW5lIFNMQVZFX0hPU1RfTElUVExFX0VORElBTgkweDAwMDAwMDAwCi0KLSNkZWZpbmUgSFdfU0xBVkVfTUVNX0FERFJfUkVHCQlTTFZfTUVNX0FERFIKLSNkZWZpbmUgSFdfU0xBVkVfTUVNX0RBVEFfUkVHCQlTTFZfTUVNX0RBVEEKLSNkZWZpbmUgSFdfU0xBVkVfTUVNX0NUUkxfUkVHCQlTTFZfTUVNX0NUTAotI2RlZmluZSBIV19TTEFWRV9NRU1fRU5ESUFOX1JFRwkJU0xWX0VORF9DVEwKLQotI2RlZmluZSBIV19GVU5DX0VWRU5UX0lOVF9FTgkJMHg4MDAwCi0jZGVmaW5lIEhXX0ZVTkNfRVZFTlRfTUFTS19SRUcJCTB4MDAwMDAwMzQKLQotI2RlZmluZSBBQ1hfTUFDX1RJTUVTVEFNUF9SRUcJKE1BQ19USU1FU1RBTVApCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgSElfQ0ZHIEludGVyZmFjZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIFZhbHVlcwotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotI2RlZmluZSBISV9DRkdfVUFSVF9FTkFCTEUgICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBISV9DRkdfUlNUMjMyX0VOQUJMRSAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBISV9DRkdfQ0xPQ0tfUkVRX1NFTEVDVCAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBISV9DRkdfSE9TVF9JTlRfRU5BQkxFICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBISV9DRkdfVkxZTlFfT1VUUFVUX0VOQUJMRSAgMHgwMDAwMDA0MAotI2RlZmluZSBISV9DRkdfSE9TVF9JTlRfQUNUSVZFX0xPVyAgMHgwMDAwMDA4MAotI2RlZmluZSBISV9DRkdfVUFSVF9UWF9PVVRfR1BJT18xNSAgMHgwMDAwMDEwMAotI2RlZmluZSBISV9DRkdfVUFSVF9UWF9PVVRfR1BJT18xNCAgMHgwMDAwMDIwMAotI2RlZmluZSBISV9DRkdfVUFSVF9UWF9PVVRfR1BJT183ICAgMHgwMDAwMDQwMAotCi0vKgotICogTk9URTogVVNFX0FDVElWRV9ISUdIIGNvbXBpbGF0aW9uIGZsYWcgc2hvdWxkIGJlIGRlZmluZWQgaW4gbWFrZWZpbGUKLSAqICAgICAgIGZvciBwbGF0Zm9ybXMgdXNpbmcgYWN0aXZlIGhpZ2ggaW50ZXJydXB0IGxldmVsCi0gKi8KLSNpZmRlZiBVU0VfQUNUSVZFX0hJR0gKLSNkZWZpbmUgSElfQ0ZHX0RFRl9WQUwgICAgICAgICAgICAgIFwKLQkoSElfQ0ZHX1VBUlRfRU5BQkxFIHwgICAgICAgIFwKLQlISV9DRkdfUlNUMjMyX0VOQUJMRSB8ICAgICAgXAotCUhJX0NGR19DTE9DS19SRVFfU0VMRUNUIHwgICBcCi0JSElfQ0ZHX0hPU1RfSU5UX0VOQUJMRSkKLSNlbHNlCi0jZGVmaW5lIEhJX0NGR19ERUZfVkFMICAgICAgICAgICAgICBcCi0JKEhJX0NGR19VQVJUX0VOQUJMRSB8ICAgICAgICBcCi0JSElfQ0ZHX1JTVDIzMl9FTkFCTEUgfCAgICAgIFwKLQlISV9DRkdfQ0xPQ0tfUkVRX1NFTEVDVCB8ICAgXAotCUhJX0NGR19IT1NUX0lOVF9FTkFCTEUpCi0KLSNlbmRpZgotCi0jZGVmaW5lIFJFRl9GUkVRXzE5XzIgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUkVGX0ZSRVFfMjZfMCAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBSRUZfRlJFUV8zOF80ICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFJFRl9GUkVRXzQwXzAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUkVGX0ZSRVFfMzNfNiAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBSRUZfRlJFUV9OVU0gICAgICAgICAgICAgICAgICAgICAgICA1Ci0KLSNkZWZpbmUgTFVUX1BBUkFNX0lOVEVHRVJfRElWSURFUiAgICAgICAgICAgMAotI2RlZmluZSBMVVRfUEFSQU1fRlJBQ1RJT05BTF9ESVZJREVSICAgICAgICAxCi0jZGVmaW5lIExVVF9QQVJBTV9BVFROX0JCICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgTFVUX1BBUkFNX0FMUEhBX0JCICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBMVVRfUEFSQU1fU1RPUF9USU1FX0JCICAgICAgICAgICAgICA0Ci0jZGVmaW5lIExVVF9QQVJBTV9CQl9QTExfTE9PUF9GSUxURVIgICAgICAgIDUKLSNkZWZpbmUgTFVUX1BBUkFNX05VTSAgICAgICAgICAgICAgICAgICAgICAgNgotCi0jZGVmaW5lIEFDWF9FRVBST01MRVNTX0lORF9SRUcgICAgICAgICAgICAgIChTQ1JfUEFENCkKLSNkZWZpbmUgVVNFX0VFUFJPTSAgICAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBTT0ZUX1JFU0VUX01BWF9USU1FICAgICAgICAgICAgICAgICAxMDAwMDAwCi0jZGVmaW5lIFNPRlRfUkVTRVRfU1RBTExfVElNRSAgICAgICAgICAgICAgIDEwMDAKLSNkZWZpbmUgTlZTX0RBVEFfQlVOREFSWV9BTElHTk1FTlQgICAgICAgICAgNAotCi0KLS8qIEZpcm13YXJlIGltYWdlIGxvYWQgY2h1bmsgc2l6ZSAqLwotI2RlZmluZSBDSFVOS19TSVpFICAgICAgICAgIDUxMgotCi0vKiBGaXJtd2FyZSBpbWFnZSBoZWFkZXIgc2l6ZSAqLwotI2RlZmluZSBGV19IRFJfU0laRSA4Ci0KLSNkZWZpbmUgRUNQVV9DT05UUk9MX0hBTFQJCQkJCTB4MDAwMDAxMDEKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBDSEFOTkVMUywgQkFORCAmIFJFRyBET01BSU5TIGRlZmluaXRpb25zCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1lbnVtIHsKLQlSQURJT19CQU5EXzJfNEdIWiA9IDAsICAvKiAyLjQgR2h6IGJhbmQgKi8KLQlSQURJT19CQU5EXzVHSFogPSAxLCAgICAvKiA1IEdoeiBiYW5kICovCi0JUkFESU9fQkFORF9KQVBBTl80XzlfR0haID0gMiwKLQlERUZBVUxUX0JBTkQgPSBSQURJT19CQU5EXzJfNEdIWiwKLQlJTlZBTElEX0JBTkQgPSAweEZFLAotCU1BWF9SQURJT19CQU5EUyA9IDB4RkYKLX07Ci0KLWVudW0gewotCU5PX1JBVEUgICAgICA9IDAsCi0JUkFURV8xTUJQUyAgID0gMHgwQSwKLQlSQVRFXzJNQlBTICAgPSAweDE0LAotCVJBVEVfNV81TUJQUyA9IDB4MzcsCi0JUkFURV82TUJQUyAgID0gMHgwQiwKLQlSQVRFXzlNQlBTICAgPSAweDBGLAotCVJBVEVfMTFNQlBTICA9IDB4NkUsCi0JUkFURV8xMk1CUFMgID0gMHgwQSwKLQlSQVRFXzE4TUJQUyAgPSAweDBFLAotCVJBVEVfMjJNQlBTICA9IDB4REMsCi0JUkFURV8yNE1CUFMgID0gMHgwOSwKLQlSQVRFXzM2TUJQUyAgPSAweDBELAotCVJBVEVfNDhNQlBTICA9IDB4MDgsCi0JUkFURV81NE1CUFMgID0gMHgwQwotfTsKLQotZW51bSB7Ci0JUkFURV9JTkRFWF8xTUJQUyAgID0gIDAsCi0JUkFURV9JTkRFWF8yTUJQUyAgID0gIDEsCi0JUkFURV9JTkRFWF81XzVNQlBTID0gIDIsCi0JUkFURV9JTkRFWF82TUJQUyAgID0gIDMsCi0JUkFURV9JTkRFWF85TUJQUyAgID0gIDQsCi0JUkFURV9JTkRFWF8xMU1CUFMgID0gIDUsCi0JUkFURV9JTkRFWF8xMk1CUFMgID0gIDYsCi0JUkFURV9JTkRFWF8xOE1CUFMgID0gIDcsCi0JUkFURV9JTkRFWF8yMk1CUFMgID0gIDgsCi0JUkFURV9JTkRFWF8yNE1CUFMgID0gIDksCi0JUkFURV9JTkRFWF8zNk1CUFMgID0gIDEwLAotCVJBVEVfSU5ERVhfNDhNQlBTICA9ICAxMSwKLQlSQVRFX0lOREVYXzU0TUJQUyAgPSAgMTIsCi0JUkFURV9JTkRFWF9NQVggICAgID0gIFJBVEVfSU5ERVhfNTRNQlBTLAotCU1BWF9SQVRFX0lOREVYLAotCUlOVkFMSURfUkFURV9JTkRFWCA9IE1BWF9SQVRFX0lOREVYLAotCVJBVEVfSU5ERVhfRU5VTV9NQVhfU0laRSA9IDB4N0ZGRkZGRkYKLX07Ci0KLWVudW0gewotCVJBVEVfTUFTS18xTUJQUyA9IDB4MSwKLQlSQVRFX01BU0tfMk1CUFMgPSAweDIsCi0JUkFURV9NQVNLXzVfNU1CUFMgPSAweDQsCi0JUkFURV9NQVNLXzExTUJQUyA9IDB4MjAsCi19OwotCi0jZGVmaW5lIFNIT1JUX1BSRUFNQkxFX0JJVCAgIEJJVCgwKSAvKiBDQ0sgb3IgQmFya2VyIGRlcGVuZGluZyBvbiB0aGUgcmF0ZSAqLwotI2RlZmluZSBPRkRNX1JBVEVfQklUICAgICAgICBCSVQoNikKLSNkZWZpbmUgUEJDQ19SQVRFX0JJVCAgICAgICAgQklUKDcpCi0KLWVudW0gewotCUNDS19MT05HID0gMCwKLQlDQ0tfU0hPUlQgPSBTSE9SVF9QUkVBTUJMRV9CSVQsCi0JUEJDQ19MT05HID0gUEJDQ19SQVRFX0JJVCwKLQlQQkNDX1NIT1JUID0gUEJDQ19SQVRFX0JJVCB8IFNIT1JUX1BSRUFNQkxFX0JJVCwKLQlPRkRNID0gT0ZETV9SQVRFX0JJVAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi1UcmFuc21pdC1EZXNjcmlwdG9yIFJBVEUtU0VUIGZpZWxkIGRlZmluaXRpb25zLi4uCi0KLURlZmluZSBhIG5ldyAiUmF0ZS1TZXQiIGZvciBUWCBwYXRoIHRoYXQgaW5jb3Jwb3JhdGVzIHRoZQotUmF0ZSAmIE1vZHVsYXRpb24gaW5mbyBpbnRvIGEgc2luZ2xlIDE2LWJpdCBmaWVsZC4KLQotVHhkUmF0ZVNldF90OgotYjE1ICAgLSBJbmRpY2F0ZXMgUHJlYW1ibGUgdHlwZSAoMT1TSE9SVCwgMD1MT05HKS4KLQlOb3RlczoKLQlNdXN0IGJlIExPTkcgKDApIGZvciAxTWJwcyByYXRlLgotCURvZXMgbm90IGFwcGx5IChzZXQgdG8gMCkgZm9yIFJldkctT0ZETSByYXRlcy4KLWIxNCAgIC0gSW5kaWNhdGVzIFBCQ0MgZW5jb2RpbmcgKDE9UEJDQywgMD1ub3QpLgotCU5vdGVzOgotCURvZXMgbm90IGFwcGx5IChzZXQgdG8gMCkgZm9yIHJhdGVzIDEgYW5kIDIgTWJwcy4KLQlEb2VzIG5vdCBhcHBseSAoc2V0IHRvIDApIGZvciBSZXZHLU9GRE0gcmF0ZXMuCi1iMTMgICAgLSBVbnVzZWQgKHNldCB0byAwKS4KLWIxMi1iMCAtIFN1cHBvcnRlZCBSYXRlIGluZGljYXRvciBiaXRzIGFzIGRlZmluZWQgYmVsb3cuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jZGVmaW5lIFRORVRXMTI1MV9DSElQX0lEX1BHMV8wICAgICAgICAgMHgwNzAxMDEwMQotI2RlZmluZSBUTkVUVzEyNTFfQ0hJUF9JRF9QRzFfMSAgICAgICAgIDB4MDcwMjAxMDEKLSNkZWZpbmUgVE5FVFcxMjUxX0NISVBfSURfUEcxXzIJICAgICAgICAweDA3MDMwMTAxCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBJbnRlcnJ1cHQgVHJpZ2dlciBSZWdpc3RlciAoSG9zdCAtPiBXaUxpbmspCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBIYXJkd2FyZSB0byBFbWJlZGRlZCBDUFUgSW50ZXJydXB0cyAtIGZpcnN0IDMyLWJpdCByZWdpc3RlciBzZXQgKi8KLQotLyoKLSAqIEhvc3QgQ29tbWFuZCBJbnRlcnJ1cHQuIFNldHRpbmcgdGhpcyBiaXQgbWFza3MKLSAqIHRoZSBpbnRlcnJ1cHQgdGhhdCB0aGUgaG9zdCBpc3N1ZXMgdG8gaW5mb3JtCi0gKiB0aGUgRlcgdGhhdCBpdCBoYXMgc2VudCBhIGNvbW1hbmQKLSAqIHRvIHRoZSBXbGFuIGhhcmR3YXJlIENvbW1hbmQgTWFpbGJveC4KLSAqLwotI2RlZmluZSBJTlRSX1RSSUdfQ01EICAgICAgIEJJVCgwKQotCi0vKgotICogSG9zdCBFdmVudCBBY2tub3dsZWdkZSBJbnRlcnJ1cHQuIFRoZSBob3N0Ci0gKiBzZXRzIHRoaXMgYml0IHRvIGFja25vd2xlZGdlIHRoYXQgaXQgcmVjZWl2ZWQKLSAqIHRoZSB1bnNvbGljaXRlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBldmVudAotICogbWFpbGJveC4KLSAqLwotI2RlZmluZSBJTlRSX1RSSUdfRVZFTlRfQUNLIEJJVCgxKQotCi0vKgotICogVGhlIGhvc3Qgc2V0cyB0aGlzIGJpdCB0byBpbmZvcm0gdGhlIFdsYW4KLSAqIEZXIHRoYXQgYSBUWCBwYWNrZXQgaXMgaW4gdGhlIFhGRVIKLSAqIEJ1ZmZlciAjMC4KLSAqLwotI2RlZmluZSBJTlRSX1RSSUdfVFhfUFJPQzAgQklUKDIpCi0KLS8qCi0gKiBUaGUgaG9zdCBzZXRzIHRoaXMgYml0IHRvIGluZm9ybSB0aGUgRlcKLSAqIHRoYXQgaXQgcmVhZCBhIHBhY2tldCBmcm9tIFJYIFhGRVIKLSAqIEJ1ZmZlciAjMC4KLSAqLwotI2RlZmluZSBJTlRSX1RSSUdfUlhfUFJPQzAgQklUKDMpCi0KLSNkZWZpbmUgSU5UUl9UUklHX0RFQlVHX0FDSyBCSVQoNCkKLQotI2RlZmluZSBJTlRSX1RSSUdfU1RBVEVfQ0hBTkdFRCBCSVQoNSkKLQotCi0vKiBIYXJkd2FyZSB0byBFbWJlZGRlZCBDUFUgSW50ZXJydXB0cyAtIHNlY29uZCAzMi1iaXQgcmVnaXN0ZXIgc2V0ICovCi0KLS8qCi0gKiBUaGUgaG9zdCBzZXRzIHRoaXMgYml0IHRvIGluZm9ybSB0aGUgRlcKLSAqIHRoYXQgaXQgcmVhZCBhIHBhY2tldCBmcm9tIFJYIFhGRVIKLSAqIEJ1ZmZlciAjMS4KLSAqLwotI2RlZmluZSBJTlRSX1RSSUdfUlhfUFJPQzEgQklUKDE3KQotCi0vKgotICogVGhlIGhvc3Qgc2V0cyB0aGlzIGJpdCB0byBpbmZvcm0gdGhlIFdsYW4KLSAqIGhhcmR3YXJlIHRoYXQgYSBUWCBwYWNrZXQgaXMgaW4gdGhlIFhGRVIKLSAqIEJ1ZmZlciAjMS4KLSAqLwotI2RlZmluZSBJTlRSX1RSSUdfVFhfUFJPQzEgQklUKDE4KQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3J4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MWVhMjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3J4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAotICoKLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLSNpbmNsdWRlICJ3bDEyeHguaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJzcGkuaCIKLSNpbmNsdWRlICJyeC5oIgotCi1zdGF0aWMgdm9pZCB3bDEyeHhfcnhfaGVhZGVyKHN0cnVjdCB3bDEyeHggKndsLAotCQkJICAgICBzdHJ1Y3Qgd2wxMnh4X3J4X2Rlc2NyaXB0b3IgKmRlc2MpCi17Ci0JdTMyIHJ4X3BhY2tldF9yaW5nX2FkZHI7Ci0KLQlyeF9wYWNrZXRfcmluZ19hZGRyID0gd2wtPmRhdGFfcGF0aC0+cnhfcGFja2V0X3JpbmdfYWRkcjsKLQlpZiAod2wtPnJ4X2N1cnJlbnRfYnVmZmVyKQotCQlyeF9wYWNrZXRfcmluZ19hZGRyICs9IHdsLT5kYXRhX3BhdGgtPnJ4X3BhY2tldF9yaW5nX2NodW5rX3NpemU7Ci0KLQl3bDEyeHhfc3BpX21lbV9yZWFkKHdsLCByeF9wYWNrZXRfcmluZ19hZGRyLCBkZXNjLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgd2wxMnh4X3J4X2Rlc2NyaXB0b3IpKTsKLX0KLQotc3RhdGljIHZvaWQgd2wxMnh4X3J4X3N0YXR1cyhzdHJ1Y3Qgd2wxMnh4ICp3bCwKLQkJCSAgICAgc3RydWN0IHdsMTJ4eF9yeF9kZXNjcmlwdG9yICpkZXNjLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAotCQkJICAgICB1OCBiZWFjb24pCi17Ci0JbWVtc2V0KHN0YXR1cywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSk7Ci0KLQlzdGF0dXMtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwotCXN0YXR1cy0+bWFjdGltZSA9IGRlc2MtPnRpbWVzdGFtcDsKLQotCS8qCi0JICogVGhlIHJ4IHN0YXR1cyB0aW1lc3RhbXAgaXMgYSAzMiBiaXRzIHZhbHVlIHdoaWxlIHRoZSBUU0YgaXMgYQotCSAqIDY0IGJpdHMgb25lLgotCSAqIEZvciBJQlNTIG1lcmdpbmcsIFRTRiBpcyBtYW5kYXRvcnksIHNvIHdlIGhhdmUgdG8gZ2V0IGl0Ci0JICogc29tZWhvdywgc28gd2UgYXNrIGZvciBBQ1hfVFNGX0lORk8uCi0JICogVGhhdCBjb3VsZCBiZSBtb3ZlZCB0byB0aGUgZ2V0X3RzZigpIGhvb2ssIGJ1dCB1bmZvcnR1bmF0ZWx5LAotCSAqIHRoaXMgb25lIG11c3QgYmUgYXRvbWljLCB3aGlsZSBvdXIgU1BJIHJvdXRpbmVzIGNhbiBzbGVlcC4KLQkgKi8KLQlpZiAoKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9JQlNTKSAmJiBiZWFjb24pIHsKLQkJdTY0IG1hY3RpbWU7Ci0JCWludCByZXQ7Ci0JCXN0cnVjdCB3bDEyeHhfY29tbWFuZCBjbWQ7Ci0JCXN0cnVjdCBhY3hfdHNmX2luZm8gKnRzZl9pbmZvOwotCi0JCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7Ci0KLQkJcmV0ID0gd2wxMnh4X2NtZF9pbnRlcnJvZ2F0ZSh3bCwgQUNYX1RTRl9JTkZPLAotCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgYWN4X3RzZl9pbmZvKSwKLQkJCQkJICAgICAmY21kKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXdsMTJ4eF93YXJuaW5nKCJBQ1hfRldfUkVWIGludGVycm9nYXRlIGZhaWxlZCIpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJdHNmX2luZm8gPSAoc3RydWN0IGFjeF90c2ZfaW5mbyAqKSYoY21kLnBhcmFtZXRlcnMpOwotCi0JCW1hY3RpbWUgPSB0c2ZfaW5mby0+Y3VycmVudF90c2ZfbHNiIHwKLQkJCSh0c2ZfaW5mby0+Y3VycmVudF90c2ZfbXNiIDw8IDMxKTsKLQotCQlzdGF0dXMtPm1hY3RpbWUgPSBtYWN0aW1lOwotCX0KLQotCXN0YXR1cy0+c2lnbmFsID0gZGVzYy0+cnNzaTsKLQlzdGF0dXMtPnF1YWwgPSAoZGVzYy0+cnNzaSAtIFdMMTJYWF9SWF9NSU5fUlNTSSkgKiAxMDAgLwotCQkoV0wxMlhYX1JYX01BWF9SU1NJIC0gV0wxMlhYX1JYX01JTl9SU1NJKTsKLQlzdGF0dXMtPnF1YWwgPSBtaW4oc3RhdHVzLT5xdWFsLCAxMDApOwotCXN0YXR1cy0+cXVhbCA9IG1heChzdGF0dXMtPnF1YWwsIDApOwotCi0JLyoKLQkgKiBGSVhNRTogZ3Vlc3NpbmcgdGhhdCBzbnIgbmVlZHMgdG8gYmUgZGl2aWRlZCBieSB0d28sIG90aGVyd2lzZQotCSAqIHRoZSB2YWx1ZXMgZG9uJ3QgbWFrZSBhbnkgc2Vuc2UKLQkgKi8KLQlzdGF0dXMtPm5vaXNlID0gZGVzYy0+cnNzaSAtIGRlc2MtPnNuciAvIDI7Ci0KLQlzdGF0dXMtPmZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZGVzYy0+Y2hhbm5lbCk7Ci0KLQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19UU0ZUOwotCi0JaWYgKGRlc2MtPmZsYWdzICYgUlhfREVTQ19FTkNSWVBUSU9OX01BU0spIHsKLQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfSVZfU1RSSVBQRUQgfCBSWF9GTEFHX01NSUNfU1RSSVBQRUQ7Ci0KLQkJaWYgKGxpa2VseSghKGRlc2MtPmZsYWdzICYgUlhfREVTQ19ERUNSWVBUX0ZBSUwpKSkKLQkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKLQotCQlpZiAodW5saWtlbHkoZGVzYy0+ZmxhZ3MgJiBSWF9ERVNDX01JQ19GQUlMKSkKLQkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7Ci0JfQotCi0JaWYgKHVubGlrZWx5KCEoZGVzYy0+ZmxhZ3MgJiBSWF9ERVNDX1ZBTElEX0ZDUykpKQotCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKLQotCi0JLyogRklYTUU6IHNldCBzdGF0dXMtPnJhdGVfaWR4ICovCi19Ci0KLXN0YXRpYyB2b2lkIHdsMTJ4eF9yeF9ib2R5KHN0cnVjdCB3bDEyeHggKndsLAotCQkJICAgc3RydWN0IHdsMTJ4eF9yeF9kZXNjcmlwdG9yICpkZXNjKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHVzOwotCXU4ICpyeF9idWZmZXIsIGJlYWNvbiA9IDA7Ci0JdTE2IGxlbmd0aCwgKmZjOwotCXUzMiBjdXJyX2lkLCBsYXN0X2lkX2luYywgcnhfcGFja2V0X3JpbmdfYWRkcjsKLQotCWxlbmd0aCA9IFdMMTJYWF9SWF9BTElHTihkZXNjLT5sZW5ndGggIC0gUExDUF9IRUFERVJfTEVOR1RIKTsKLQljdXJyX2lkID0gKGRlc2MtPmZsYWdzICYgUlhfREVTQ19TRVFOVU1fTUFTSykgPj4gUlhfREVTQ19QQUNLRVRJRF9TSElGVDsKLQlsYXN0X2lkX2luYyA9ICh3bC0+cnhfbGFzdF9pZCArIDEpICUgKFJYX01BWF9QQUNLRVRfSUQgKyAxKTsKLQotCWlmIChsYXN0X2lkX2luYyAhPSBjdXJyX2lkKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJjdXJyIElEOiVkLCBsYXN0IElEIGluYzolZCIsCi0JCQkgICAgICAgY3Vycl9pZCwgbGFzdF9pZF9pbmMpOwotCQl3bC0+cnhfbGFzdF9pZCA9IGN1cnJfaWQ7Ci0JfSBlbHNlIHsKLQkJd2wtPnJ4X2xhc3RfaWQgPSBsYXN0X2lkX2luYzsKLQl9Ci0KLQlyeF9wYWNrZXRfcmluZ19hZGRyID0gd2wtPmRhdGFfcGF0aC0+cnhfcGFja2V0X3JpbmdfYWRkciArCi0JCXNpemVvZihzdHJ1Y3Qgd2wxMnh4X3J4X2Rlc2NyaXB0b3IpICsgMjA7Ci0JaWYgKHdsLT5yeF9jdXJyZW50X2J1ZmZlcikKLQkJcnhfcGFja2V0X3JpbmdfYWRkciArPSB3bC0+ZGF0YV9wYXRoLT5yeF9wYWNrZXRfcmluZ19jaHVua19zaXplOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsZW5ndGgpOwotCWlmICghc2tiKSB7Ci0JCXdsMTJ4eF9lcnJvcigiQ291bGRuJ3QgYWxsb2NhdGUgUlggZnJhbWUiKTsKLQkJcmV0dXJuOwotCX0KLQotCXJ4X2J1ZmZlciA9IHNrYl9wdXQoc2tiLCBsZW5ndGgpOwotCXdsMTJ4eF9zcGlfbWVtX3JlYWQod2wsIHJ4X3BhY2tldF9yaW5nX2FkZHIsIHJ4X2J1ZmZlciwgbGVuZ3RoKTsKLQotCS8qIFRoZSBhY3R1YWwgbGVuZ2h0IGRvZXNuJ3QgaW5jbHVkZSB0aGUgdGFyZ2V0J3MgYWxpZ25tZW50ICovCi0Jc2tiLT5sZW4gPSBkZXNjLT5sZW5ndGggIC0gUExDUF9IRUFERVJfTEVOR1RIOwotCi0JZmMgPSAodTE2ICopc2tiLT5kYXRhOwotCi0JaWYgKCgqZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikKLQkJYmVhY29uID0gMTsKLQotCXdsMTJ4eF9yeF9zdGF0dXMod2wsIGRlc2MsICZzdGF0dXMsIGJlYWNvbik7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfUlgsICJyeCBza2IgMHglcDogJWQgQiAlcyIsIHNrYiwgc2tiLT5sZW4sCi0JCSAgICAgYmVhY29uID8gImJlYWNvbiIgOiAiIik7Ci0KLQlpZWVlODAyMTFfcngod2wtPmh3LCBza2IsICZzdGF0dXMpOwotfQotCi1zdGF0aWMgdm9pZCB3bDEyeHhfcnhfYWNrKHN0cnVjdCB3bDEyeHggKndsKQotewotCXUzMiBkYXRhLCBhZGRyOwotCi0JaWYgKHdsLT5yeF9jdXJyZW50X2J1ZmZlcikgewotCQlhZGRyID0gQUNYX1JFR19JTlRFUlJVUFRfVFJJR19IOwotCQlkYXRhID0gSU5UUl9UUklHX1JYX1BST0MxOwotCX0gZWxzZSB7Ci0JCWFkZHIgPSBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHOwotCQlkYXRhID0gSU5UUl9UUklHX1JYX1BST0MwOwotCX0KLQotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgYWRkciwgZGF0YSk7Ci0KLQkvKiBUb2dnbGUgYnVmZmVyIHJpbmcgKi8KLQl3bC0+cnhfY3VycmVudF9idWZmZXIgPSAhd2wtPnJ4X2N1cnJlbnRfYnVmZmVyOwotfQotCi0KLXZvaWQgd2wxMnh4X3J4KHN0cnVjdCB3bDEyeHggKndsKQotewotCXN0cnVjdCB3bDEyeHhfcnhfZGVzY3JpcHRvciByeF9kZXNjOwotCi0JaWYgKHdsLT5zdGF0ZSAhPSBXTDEyWFhfU1RBVEVfT04pCi0JCXJldHVybjsKLQotCS8qIFdlIGZpcnN0IHJlYWQgdGhlIGZyYW1lJ3MgaGVhZGVyICovCi0Jd2wxMnh4X3J4X2hlYWRlcih3bCwgJnJ4X2Rlc2MpOwotCi0JLyogTm93IHdlIGNhbiByZWFkIHRoZSBib2R5ICovCi0Jd2wxMnh4X3J4X2JvZHkod2wsICZyeF9kZXNjKTsKLQotCS8qIEZpbmFsbHksIHdlIG5lZWQgdG8gQUNLIHRoZSBSWCAqLwotCXdsMTJ4eF9yeF9hY2sod2wpOwotCi0JcmV0dXJuOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcnguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEyM2ZkZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcnguaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4Ci0gKgotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgX19XTDEyWFhfUlhfSF9fCi0jZGVmaW5lIF9fV0wxMlhYX1JYX0hfXwotCi0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0KLS8qCi0gKiBSWCBQQVRICi0gKgotICogVGhlIFJ4IHBhdGggdXNlcyBhIGRvdWJsZSBidWZmZXIgYW5kIGFuIHJ4X2NvbnRybyBzdHJ1Y3R1cmUsIGVhY2ggbG9jYXRlZAotICogYXQgYSBmaXhlZCBhZGRyZXNzIGluIHRoZSBkZXZpY2UgbWVtb3J5LiBUaGUgaG9zdCBrZWVwcyB0cmFjayBvZiB3aGljaAotICogYnVmZmVyIGlzIGF2YWlsYWJsZSBhbmQgYWx0ZXJuYXRlcyBiZXR3ZWVuIHRoZW0gb24gYSBwZXIgcGFja2V0IGJhc2lzLgotICogVGhlIHNpemUgb2YgZWFjaCBvZiB0aGUgdHdvIGJ1ZmZlcnMgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGxvbmdlc3QKLSAqIDgwMi4zIHBhY2tldC4KLSAqIFRoZSBSWCBwYXRoIGdvZXMgbGlrZSB0aGF0OgotICogMSkgVGhlIHRhcmdldCBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0IGVhY2ggdGltZSBhIG5ldyBwYWNrZXQgaXMgcmVjZWl2ZWQuCi0gKiAgIFRoZXJlIGFyZSAyIFJYIGludGVycnVwdHMsIG9uZSBmb3IgZWFjaCBidWZmZXIuCi0gKiAyKSBUaGUgaG9zdCByZWFkcyB0aGUgcmVjZWl2ZWQgcGFja2V0IGZyb20gb25lIG9mIHRoZSBkb3VibGUgYnVmZmVycy4KLSAqIDMpIFRoZSBob3N0IHRyaWdnZXJzIGEgdGFyZ2V0IGludGVycnVwdC4KLSAqIDQpIFRoZSB0YXJnZXQgcHJlcGFyZXMgdGhlIG5leHQgUlggcGFja2V0LgotICovCi0KLSNkZWZpbmUgV0wxMlhYX1JYX01BWF9SU1NJIC0zMAotI2RlZmluZSBXTDEyWFhfUlhfTUlOX1JTU0kgLTk1Ci0KLSNkZWZpbmUgV0wxMlhYX1JYX0FMSUdOX1RPIDQKLSNkZWZpbmUgV0wxMlhYX1JYX0FMSUdOKGxlbikgKCgobGVuKSArIFdMMTJYWF9SWF9BTElHTl9UTyAtIDEpICYgXAotCQkJICAgICB+KFdMMTJYWF9SWF9BTElHTl9UTyAtIDEpKQotCi0jZGVmaW5lIFNIT1JUX1BSRUFNQkxFX0JJVCAgIEJJVCgwKQotI2RlZmluZSBPRkRNX1JBVEVfQklUICAgICAgICBCSVQoNikKLSNkZWZpbmUgUEJDQ19SQVRFX0JJVCAgICAgICAgQklUKDcpCi0KLSNkZWZpbmUgUExDUF9IRUFERVJfTEVOR1RIIDgKLSNkZWZpbmUgUlhfREVTQ19QQUNLRVRJRF9TSElGVCAxMQotI2RlZmluZSBSWF9NQVhfUEFDS0VUX0lEIDMKLQotI2RlZmluZSBSWF9ERVNDX1ZBTElEX0ZDUyAgICAgICAgIDB4MDAwMQotI2RlZmluZSBSWF9ERVNDX01BVENIX1JYQUREUjEgICAgIDB4MDAwMgotI2RlZmluZSBSWF9ERVNDX01DQVNUICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBSWF9ERVNDX1NUQUlOVElNICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBSWF9ERVNDX1ZJUlRVQUxfQk0gICAgICAgIDB4MDAxMAotI2RlZmluZSBSWF9ERVNDX0JDQVNUICAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZSBSWF9ERVNDX01BVENIX1NTSUQgICAgICAgIDB4MDA0MAotI2RlZmluZSBSWF9ERVNDX01BVENIX0JTU0lEICAgICAgIDB4MDA4MAotI2RlZmluZSBSWF9ERVNDX0VOQ1JZUFRJT05fTUFTSyAgIDB4MDMwMAotI2RlZmluZSBSWF9ERVNDX01FQVNVUk1FTlQgICAgICAgIDB4MDQwMAotI2RlZmluZSBSWF9ERVNDX1NFUU5VTV9NQVNLICAgICAgIDB4MTgwMAotI2RlZmluZQlSWF9ERVNDX01JQ19GQUlMCSAgMHgyMDAwCi0jZGVmaW5lCVJYX0RFU0NfREVDUllQVF9GQUlMCSAgMHg0MDAwCi0KLXN0cnVjdCB3bDEyeHhfcnhfZGVzY3JpcHRvciB7Ci0JdTMyIHRpbWVzdGFtcDsgLyogSW4gbWljcm9zZWNvbmRzICovCi0JdTE2IGxlbmd0aDsgLyogUGF5bG9kIGxlbmd0aCwgaW5jbHVkaW5nIGhlYWRlcnMgKi8KLQl1MTYgZmxhZ3M7Ci0KLQkvKgotCSAqIDAgLSA4MDIuMTEKLQkgKiAxIC0gODAyLjMKLQkgKiAyIC0gSVAKLQkgKiAzIC0gUmF3IENvZGVjCi0JICovCi0JdTggdHlwZTsKLQotCS8qCi0JICogUmVjZXZpZWQgUmF0ZToKLQkgKiAweDBBIC0gMU1CUFMKLQkgKiAweDE0IC0gMk1CUFMKLQkgKiAweDM3IC0gNV81TUJQUwotCSAqIDB4MEIgLSA2TUJQUwotCSAqIDB4MEYgLSA5TUJQUwotCSAqIDB4NkUgLSAxMU1CUFMKLQkgKiAweDBBIC0gMTJNQlBTCi0JICogMHgwRSAtIDE4TUJQUwotCSAqIDB4REMgLSAyMk1CUFMKLQkgKiAweDA5IC0gMjRNQlBTCi0JICogMHgwRCAtIDM2TUJQUwotCSAqIDB4MDggLSA0OE1CUFMKLQkgKiAweDBDIC0gNTRNQlBTCi0JICovCi0JdTggcmF0ZTsKLQotCXU4IG1vZF9wcmU7IC8qIE1vZHVsYXRpb24gYW5kIHByZWFtYmxlICovCi0JdTggY2hhbm5lbDsKLQotCS8qCi0JICogMCAtIDIuNCBHaHoKLQkgKiAxIC0gNSBHaHoKLQkgKi8KLQl1OCBiYW5kOwotCi0JczggcnNzaTsgLyogaW4gZEIgKi8KLQl1OCByY3BpOyAvKiBpbiBkQiAqLwotCXU4IHNucjsgLyogaW4gZEIgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi12b2lkIHdsMTJ4eF9yeChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmRmMTcxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYworKysgL2Rldi9udWxsCkBAIC0xLDM1OCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjNy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQotI2luY2x1ZGUgIndsMTJ4eC5oIgotI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgotI2luY2x1ZGUgInJlZy5oIgotI2luY2x1ZGUgInNwaS5oIgotI2luY2x1ZGUgInBzLmgiCi0KLXN0YXRpYyBpbnQgd2wxMnh4X3RyYW5zbGF0ZV9yZWdfYWRkcihzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IGFkZHIpCi17Ci0JLyogSWYgdGhlIGFkZHJlc3MgaXMgbG93ZXIgdGhhbiBSRUdJU1RFUlNfQkFTRSwgaXQgbWVhbnMgdGhhdCB0aGlzIGlzCi0JICogYSBjaGlwLXNwZWNpZmljIHJlZ2lzdGVyIGFkZHJlc3MsIHNvIGxvb2sgaXQgdXAgaW4gdGhlIHJlZ2lzdGVycwotCSAqIHRhYmxlICovCi0JaWYgKGFkZHIgPCBSRUdJU1RFUlNfQkFTRSkgewotCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ28gb3ZlciB0aGUgdGFibGUgKi8KLQkJaWYgKGFkZHIgPj0gQUNYX1JFR19UQUJMRV9MRU4pIHsKLQkJCXdsMTJ4eF9lcnJvcigiYWRkcmVzcyBvdXQgb2YgcmFuZ2UgKCVkKSIsIGFkZHIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYWRkciA9IHdsLT5jaGlwLmFjeF9yZWdfdGFibGVbYWRkcl07Ci0JfQotCi0JcmV0dXJuIGFkZHIgLSB3bC0+cGh5c2ljYWxfcmVnX2FkZHIgKyB3bC0+dmlydHVhbF9yZWdfYWRkcjsKLX0KLQotc3RhdGljIGludCB3bDEyeHhfdHJhbnNsYXRlX21lbV9hZGRyKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkcikKLXsKLQlyZXR1cm4gYWRkciAtIHdsLT5waHlzaWNhbF9tZW1fYWRkciArIHdsLT52aXJ0dWFsX21lbV9hZGRyOwotfQotCi0KLXZvaWQgd2wxMnh4X3NwaV9yZXNldChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQl1OCAqY21kOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQotCWNtZCA9IGt6YWxsb2MoV1NQSV9JTklUX0NNRF9MRU4sIEdGUF9LRVJORUwpOwotCWlmICghY21kKSB7Ci0JCXdsMTJ4eF9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIGNtZCBmb3Igc3BpIHJlc2V0Iik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7Ci0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0KLQltZW1zZXQoY21kLCAweGZmLCBXU1BJX0lOSVRfQ01EX0xFTik7Ci0KLQl0LnR4X2J1ZiA9IGNtZDsKLQl0LmxlbiA9IFdTUElfSU5JVF9DTURfTEVOOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7Ci0KLQlzcGlfc3luYyh3bC0+c3BpLCAmbSk7Ci0KLQl3bDEyeHhfZHVtcChERUJVR19TUEksICJzcGkgcmVzZXQgLT4gIiwgY21kLCBXU1BJX0lOSVRfQ01EX0xFTik7Ci19Ci0KLXZvaWQgd2wxMnh4X3NwaV9pbml0KHN0cnVjdCB3bDEyeHggKndsKQotewotCXU4IGNyY1tXU1BJX0lOSVRfQ01EX0NSQ19MRU5dLCAqY21kOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQotCWNtZCA9IGt6YWxsb2MoV1NQSV9JTklUX0NNRF9MRU4sIEdGUF9LRVJORUwpOwotCWlmICghY21kKSB7Ci0JCXdsMTJ4eF9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIGNtZCBmb3Igc3BpIGluaXQiKTsKLQkJcmV0dXJuOwotCX0KLQotCW1lbXNldChjcmMsIDAsIHNpemVvZihjcmMpKTsKLQltZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7Ci0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0KLQkvKgotCSAqIFNldCBXU1BJX0lOSVRfQ09NTUFORAotCSAqIHRoZSBkYXRhIGlzIGJlaW5nIHNlbmQgZnJvbSB0aGUgTVNCIHRvIExTQgotCSAqLwotCWNtZFsyXSA9IDB4ZmY7Ci0JY21kWzNdID0gMHhmZjsKLQljbWRbMV0gPSBXU1BJX0lOSVRfQ01EX1NUQVJUIHwgV1NQSV9JTklUX0NNRF9UWDsKLQljbWRbMF0gPSAwOwotCWNtZFs3XSA9IDA7Ci0JY21kWzZdIHw9IEhXX0FDQ0VTU19XU1BJX0lOSVRfQ01EX01BU0sgPDwgMzsKLQljbWRbNl0gfD0gSFdfQUNDRVNTX1dTUElfRklYRURfQlVTWV9MRU4gJiBXU1BJX0lOSVRfQ01EX0ZJWEVEQlVTWV9MRU47Ci0KLQlpZiAoSFdfQUNDRVNTX1dTUElfRklYRURfQlVTWV9MRU4gPT0gMCkKLQkJY21kWzVdIHw9ICBXU1BJX0lOSVRfQ01EX0RJU19GSVhFREJVU1k7Ci0JZWxzZQotCQljbWRbNV0gfD0gV1NQSV9JTklUX0NNRF9FTl9GSVhFREJVU1k7Ci0KLQljbWRbNV0gfD0gV1NQSV9JTklUX0NNRF9JT0QgfCBXU1BJX0lOSVRfQ01EX0lQIHwgV1NQSV9JTklUX0NNRF9DUwotCQl8IFdTUElfSU5JVF9DTURfV1NQSSB8IFdTUElfSU5JVF9DTURfV1M7Ci0KLQljcmNbMF0gPSBjbWRbMV07Ci0JY3JjWzFdID0gY21kWzBdOwotCWNyY1syXSA9IGNtZFs3XTsKLQljcmNbM10gPSBjbWRbNl07Ci0JY3JjWzRdID0gY21kWzVdOwotCi0JY21kWzRdIHw9IGNyYzcoMCwgY3JjLCBXU1BJX0lOSVRfQ01EX0NSQ19MRU4pIDw8IDE7Ci0JY21kWzRdIHw9IFdTUElfSU5JVF9DTURfRU5EOwotCi0JdC50eF9idWYgPSBjbWQ7Ci0JdC5sZW4gPSBXU1BJX0lOSVRfQ01EX0xFTjsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwotCi0Jc3BpX3N5bmMod2wtPnNwaSwgJm0pOwotCi0Jd2wxMnh4X2R1bXAoREVCVUdfU1BJLCAic3BpIGluaXQgLT4gIiwgY21kLCBXU1BJX0lOSVRfQ01EX0xFTik7Ci19Ci0KLS8qIFNldCB0aGUgU1BJIHBhcnRpdGlvbnMgdG8gYWNjZXNzIHRoZSBjaGlwIGFkZHJlc3NlcwotICoKLSAqIFRoZXJlIGFyZSB0d28gVklSVFVBTCAoU1BJKSBwYXJ0aXRpb25zICh0aGUgbWVtb3J5IHBhcnRpdGlvbiBhbmQgdGhlCi0gKiByZWdpc3RlcnMgcGFydGl0aW9uKSwgd2hpY2ggYXJlIG1hcHBlZCB0byB0d28gZGlmZmVyZW50IGFyZWFzIG9mIHRoZQotICogUEhZU0lDQUwgKGhhcmR3YXJlKSBtZW1vcnkuICBUaGlzIGZ1bmN0aW9uIGFsc28gbWFrZXMgb3RoZXIgY2hlY2tzIHRvCi0gKiBlbnN1cmUgdGhhdCB0aGUgcGFydGl0aW9ucyBhcmUgbm90IG92ZXJsYXBwaW5nLiAgSW4gdGhlIGRpYWdyYW0gYmVsb3csIHRoZQotICogbWVtb3J5IHBhcnRpdGlvbiBjb21lcyBiZWZvcmUgdGhlIHJlZ2lzdGVyIHBhcnRpdGlvbiwgYnV0IHRoZSBvcHBvc2l0ZSBpcwotICogYWxzbyBzdXBwb3J0ZWQuCi0gKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEhZU0lDQUwgYWRkcmVzcwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UKLSAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4rLS0tLSstLT4gbWVtX3N0YXJ0Ci0gKiAgICAgICAgICBWSVJUVUFMIGFkZHJlc3MgICAgIC4uLiAgIHwgICAgfAotICogICAgICAgICAgICAgICBzcGFjZSAgICAgICAuLi4gICAgICB8ICAgIHwgW1BBUlRfMF0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgfCAgICB8Ci0gKiAweDAwMDAwMDAwIDwtLSstLS0tKy4uLiAgICAgICAgIC4uListLS0tKy0tPiBtZW1fc3RhcnQgKyBtZW1fc2l6ZQotICogICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICAuLi4gICB8ICAgIHwKLSAqICAgICAgICAgICAgICAgfE1FTSB8ICAgICAgLi4uICAgICAgfCAgICB8Ci0gKiAgICAgICAgICAgICAgIHwgICAgfCAgIC4uLiAgICAgICAgIHwgICAgfAotICogIHBhcnRfc2l6ZSA8LS0rLS0tLSsuLi4gICAgICAgICAgICB8ICAgIHwge3VudXNlZCBhcmVhKQotICogICAgICAgICAgICAgICB8ICAgIHwgICAuLi4gICAgICAgICB8ICAgIHwKLSAqICAgICAgICAgICAgICAgfFJFRyB8ICAgICAgLi4uICAgICAgfCAgICB8Ci0gKiAgcGFydF9zaXplICAgIHwgICAgfCAgICAgICAgIC4uLiAgIHwgICAgfAotICogICAgICArICAgICA8LS0rLS0tLSsuLi4gICAgICAgICAuLi4rLS0tLSstLT4gcmVnX3N0YXJ0Ci0gKiAgcmVnX3NpemUgICAgICAgICAgICAgIC4uLiAgICAgICAgIHwgICAgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4gICAgICB8ICAgIHwgW1BBUlRfMV0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgfCAgICB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uListLS0tKy0tPiByZWdfc3RhcnQgKyByZWdfc2l6ZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKLSAqCi0gKi8KLXZvaWQgd2wxMnh4X3NldF9wYXJ0aXRpb24oc3RydWN0IHdsMTJ4eCAqd2wsCi0JCQkgIHUzMiBtZW1fc3RhcnQsIHUzMiBtZW1fc2l6ZSwKLQkJCSAgdTMyIHJlZ19zdGFydCwgdTMyIHJlZ19zaXplKQotewotCXU4IHR4X2J1ZltzaXplb2YodTMyKSArIDIgKiBzaXplb2Yoc3RydWN0IHdsMTJ4eF9wYXJ0aXRpb24pXTsKLQlzdHJ1Y3Qgd2wxMnh4X3BhcnRpdGlvbiAqcGFydGl0aW9uOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQl1MzIgKmNtZDsKLQlzaXplX3QgbGVuOwotCWludCBhZGRyOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOwotCW1lbXNldCh0eF9idWYsIDAsIHNpemVvZih0eF9idWYpKTsKLQotCWNtZCA9ICh1MzIgKikgdHhfYnVmOwotCXBhcnRpdGlvbiA9IChzdHJ1Y3Qgd2wxMnh4X3BhcnRpdGlvbiAqKSAodHhfYnVmICsgc2l6ZW9mKHUzMikpOwotCWFkZHIgPSBIV19BQ0NFU1NfUEFSVDBfU0laRV9BRERSOwotCWxlbiA9IDIgKiBzaXplb2Yoc3RydWN0IHdsMTJ4eF9wYXJ0aXRpb24pOwotCi0JKmNtZCB8PSBXU1BJX0NNRF9XUklURTsKLQkqY21kIHw9IChsZW4gPDwgV1NQSV9DTURfQllURV9MRU5HVEhfT0ZGU0VUKSAmIFdTUElfQ01EX0JZVEVfTEVOR1RIOwotCSpjbWQgfD0gYWRkciAmIFdTUElfQ01EX0JZVEVfQUREUjsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19TUEksICJtZW1fc3RhcnQgJTA4WCBtZW1fc2l6ZSAlMDhYIiwKLQkJICAgICBtZW1fc3RhcnQsIG1lbV9zaXplKTsKLQl3bDEyeHhfZGVidWcoREVCVUdfU1BJLCAicmVnX3N0YXJ0ICUwOFggcmVnX3NpemUgJTA4WCIsCi0JCSAgICAgcmVnX3N0YXJ0LCByZWdfc2l6ZSk7Ci0KLQkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgdHdvIHBhcnRpdGlvbnMgdG9nZXRoZXIgZG9uJ3QgZXhjZWVkIHRoZQotCSAqIGFkZHJlc3MgcmFuZ2UgKi8KLQlpZiAoKG1lbV9zaXplICsgcmVnX3NpemUpID4gSFdfQUNDRVNTX01FTU9SWV9NQVhfUkFOR0UpIHsKLQkJd2wxMnh4X2RlYnVnKERFQlVHX1NQSSwgIlRvdGFsIHNpemUgZXhjZWVkcyBtYXhpbXVtIHZpcnR1YWwiCi0JCQkgICAgICIgYWRkcmVzcyByYW5nZS4gIFRydW5jYXRpbmcgcGFydGl0aW9uWzBdLiIpOwotCQltZW1fc2l6ZSA9IEhXX0FDQ0VTU19NRU1PUllfTUFYX1JBTkdFIC0gcmVnX3NpemU7Ci0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19TUEksICJtZW1fc3RhcnQgJTA4WCBtZW1fc2l6ZSAlMDhYIiwKLQkJCSAgICAgbWVtX3N0YXJ0LCBtZW1fc2l6ZSk7Ci0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19TUEksICJyZWdfc3RhcnQgJTA4WCByZWdfc2l6ZSAlMDhYIiwKLQkJCSAgICAgcmVnX3N0YXJ0LCByZWdfc2l6ZSk7Ci0JfQotCi0JaWYgKChtZW1fc3RhcnQgPCByZWdfc3RhcnQpICYmCi0JICAgICgobWVtX3N0YXJ0ICsgbWVtX3NpemUpID4gcmVnX3N0YXJ0KSkgewotCQkvKiBHdWFyYW50ZWUgdGhhdCB0aGUgbWVtb3J5IHBhcnRpdGlvbiBkb2Vzbid0IG92ZXJsYXAgdGhlCi0JCSAqIHJlZ2lzdGVycyBwYXJ0aXRpb24gKi8KLQkJd2wxMnh4X2RlYnVnKERFQlVHX1NQSSwgIkVuZCBvZiBwYXJ0aXRpb25bMF0gaXMgIgotCQkJICAgICAib3ZlcmxhcHBpbmcgcGFydGl0aW9uWzFdLiAgQWRqdXN0ZWQuIik7Ci0JCW1lbV9zaXplID0gcmVnX3N0YXJ0IC0gbWVtX3N0YXJ0OwotCQl3bDEyeHhfZGVidWcoREVCVUdfU1BJLCAibWVtX3N0YXJ0ICUwOFggbWVtX3NpemUgJTA4WCIsCi0JCQkgICAgIG1lbV9zdGFydCwgbWVtX3NpemUpOwotCQl3bDEyeHhfZGVidWcoREVCVUdfU1BJLCAicmVnX3N0YXJ0ICUwOFggcmVnX3NpemUgJTA4WCIsCi0JCQkgICAgIHJlZ19zdGFydCwgcmVnX3NpemUpOwotCX0gZWxzZSBpZiAoKHJlZ19zdGFydCA8IG1lbV9zdGFydCkgJiYKLQkJICAgKChyZWdfc3RhcnQgKyByZWdfc2l6ZSkgPiBtZW1fc3RhcnQpKSB7Ci0JCS8qIEd1YXJhbnRlZSB0aGF0IHRoZSByZWdpc3RlciBwYXJ0aXRpb24gZG9lc24ndCBvdmVybGFwIHRoZQotCQkgKiBtZW1vcnkgcGFydGl0aW9uICovCi0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19TUEksICJFbmQgb2YgcGFydGl0aW9uWzFdIGlzIgotCQkJICAgICAiIG92ZXJsYXBwaW5nIHBhcnRpdGlvblswXS4gIEFkanVzdGVkLiIpOwotCQlyZWdfc2l6ZSA9IG1lbV9zdGFydCAtIHJlZ19zdGFydDsKLQkJd2wxMnh4X2RlYnVnKERFQlVHX1NQSSwgIm1lbV9zdGFydCAlMDhYIG1lbV9zaXplICUwOFgiLAotCQkJICAgICBtZW1fc3RhcnQsIG1lbV9zaXplKTsKLQkJd2wxMnh4X2RlYnVnKERFQlVHX1NQSSwgInJlZ19zdGFydCAlMDhYIHJlZ19zaXplICUwOFgiLAotCQkJICAgICByZWdfc3RhcnQsIHJlZ19zaXplKTsKLQl9Ci0KLQlwYXJ0aXRpb25bMF0uc3RhcnQgPSBtZW1fc3RhcnQ7Ci0JcGFydGl0aW9uWzBdLnNpemUgID0gbWVtX3NpemU7Ci0JcGFydGl0aW9uWzFdLnN0YXJ0ID0gcmVnX3N0YXJ0OwotCXBhcnRpdGlvblsxXS5zaXplICA9IHJlZ19zaXplOwotCi0Jd2wtPnBoeXNpY2FsX21lbV9hZGRyID0gbWVtX3N0YXJ0OwotCXdsLT5waHlzaWNhbF9yZWdfYWRkciA9IHJlZ19zdGFydDsKLQotCXdsLT52aXJ0dWFsX21lbV9hZGRyID0gMDsKLQl3bC0+dmlydHVhbF9yZWdfYWRkciA9IG1lbV9zaXplOwotCi0JdC50eF9idWYgPSB0eF9idWY7Ci0JdC5sZW4gPSBzaXplb2YodHhfYnVmKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwotCi0Jc3BpX3N5bmMod2wtPnNwaSwgJm0pOwotfQotCi12b2lkIHdsMTJ4eF9zcGlfcmVhZChzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKLQkJICAgICBzaXplX3QgbGVuKQotewotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFszXTsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQljaGFyIGJ1c3lfYnVmW1RORVRXSUZfUkVBRF9PRkZTRVRfQllURVNdOwotCXUzMiBjbWQ7Ci0KLQljbWQgPSAwOwotCWNtZCB8PSBXU1BJX0NNRF9SRUFEOwotCWNtZCB8PSAobGVuIDw8IFdTUElfQ01EX0JZVEVfTEVOR1RIX09GRlNFVCkgJiBXU1BJX0NNRF9CWVRFX0xFTkdUSDsKLQljbWQgfD0gYWRkciAmIFdTUElfQ01EX0JZVEVfQUREUjsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOwotCi0JdFswXS50eF9idWYgPSAmY21kOwotCXRbMF0ubGVuID0gNDsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOwotCi0JLyogQnVzeSBhbmQgbm9uIGJ1c3kgd29yZHMgcmVhZCAqLwotCXRbMV0ucnhfYnVmID0gYnVzeV9idWY7Ci0JdFsxXS5sZW4gPSBUTkVUV0lGX1JFQURfT0ZGU0VUX0JZVEVTOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7Ci0KLQl0WzJdLnJ4X2J1ZiA9IGJ1ZjsKLQl0WzJdLmxlbiA9IGxlbjsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsyXSwgJm0pOwotCi0Jc3BpX3N5bmMod2wtPnNwaSwgJm0pOwotCi0JLyogRklYTUU6IGNoZWNrIGJ1c3kgd29yZHMgKi8KLQotCXdsMTJ4eF9kdW1wKERFQlVHX1NQSSwgInNwaV9yZWFkIGNtZCAtPiAiLCAmY21kLCBzaXplb2YoY21kKSk7Ci0Jd2wxMnh4X2R1bXAoREVCVUdfU1BJLCAic3BpX3JlYWQgYnVmIDwtICIsIGJ1ZiwgbGVuKTsKLX0KLQotdm9pZCB3bDEyeHhfc3BpX3dyaXRlKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAotCQkgICAgICBzaXplX3QgbGVuKQotewotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFsyXTsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQl1MzIgY21kOwotCi0JY21kID0gMDsKLQljbWQgfD0gV1NQSV9DTURfV1JJVEU7Ci0JY21kIHw9IChsZW4gPDwgV1NQSV9DTURfQllURV9MRU5HVEhfT0ZGU0VUKSAmIFdTUElfQ01EX0JZVEVfTEVOR1RIOwotCWNtZCB8PSBhZGRyICYgV1NQSV9DTURfQllURV9BRERSOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7Ci0KLQl0WzBdLnR4X2J1ZiA9ICZjbWQ7Ci0JdFswXS5sZW4gPSBzaXplb2YoY21kKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOwotCi0JdFsxXS50eF9idWYgPSBidWY7Ci0JdFsxXS5sZW4gPSBsZW47Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKLQotCXNwaV9zeW5jKHdsLT5zcGksICZtKTsKLQotCXdsMTJ4eF9kdW1wKERFQlVHX1NQSSwgInNwaV93cml0ZSBjbWQgLT4gIiwgJmNtZCwgc2l6ZW9mKGNtZCkpOwotCXdsMTJ4eF9kdW1wKERFQlVHX1NQSSwgInNwaV93cml0ZSBidWYgLT4gIiwgYnVmLCBsZW4pOwotfQotCi12b2lkIHdsMTJ4eF9zcGlfbWVtX3JlYWQoc3RydWN0IHdsMTJ4eCAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsCi0JCQkgc2l6ZV90IGxlbikKLXsKLQlpbnQgcGh5c2ljYWw7Ci0KLQlwaHlzaWNhbCA9IHdsMTJ4eF90cmFuc2xhdGVfbWVtX2FkZHIod2wsIGFkZHIpOwotCi0Jd2wxMnh4X3NwaV9yZWFkKHdsLCBwaHlzaWNhbCwgYnVmLCBsZW4pOwotfQotCi12b2lkIHdsMTJ4eF9zcGlfbWVtX3dyaXRlKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAotCQkJICBzaXplX3QgbGVuKQotewotCWludCBwaHlzaWNhbDsKLQotCXBoeXNpY2FsID0gd2wxMnh4X3RyYW5zbGF0ZV9tZW1fYWRkcih3bCwgYWRkcik7Ci0KLQl3bDEyeHhfc3BpX3dyaXRlKHdsLCBwaHlzaWNhbCwgYnVmLCBsZW4pOwotfQotCi11MzIgd2wxMnh4X21lbV9yZWFkMzIoc3RydWN0IHdsMTJ4eCAqd2wsIGludCBhZGRyKQotewotCXJldHVybiB3bDEyeHhfcmVhZDMyKHdsLCB3bDEyeHhfdHJhbnNsYXRlX21lbV9hZGRyKHdsLCBhZGRyKSk7Ci19Ci0KLXZvaWQgd2wxMnh4X21lbV93cml0ZTMyKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKLXsKLQl3bDEyeHhfd3JpdGUzMih3bCwgd2wxMnh4X3RyYW5zbGF0ZV9tZW1fYWRkcih3bCwgYWRkciksIHZhbCk7Ci19Ci0KLXUzMiB3bDEyeHhfcmVnX3JlYWQzMihzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IGFkZHIpCi17Ci0JcmV0dXJuIHdsMTJ4eF9yZWFkMzIod2wsIHdsMTJ4eF90cmFuc2xhdGVfcmVnX2FkZHIod2wsIGFkZHIpKTsKLX0KLQotdm9pZCB3bDEyeHhfcmVnX3dyaXRlMzIoc3RydWN0IHdsMTJ4eCAqd2wsIGludCBhZGRyLCB1MzIgdmFsKQotewotCXdsMTJ4eF93cml0ZTMyKHdsLCB3bDEyeHhfdHJhbnNsYXRlX3JlZ19hZGRyKHdsLCBhZGRyKSwgdmFsKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQzMjI3ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAotICoKLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fV0wxMlhYX1NQSV9IX18KLSNkZWZpbmUgX19XTDEyWFhfU1BJX0hfXwotCi0jaW5jbHVkZSAiY21kLmgiCi0jaW5jbHVkZSAiYWN4LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0KLSNkZWZpbmUgSFdfQUNDRVNTX01FTU9SWV9NQVhfUkFOR0UJCTB4MUZGQzAKLQotI2RlZmluZSBIV19BQ0NFU1NfUEFSVDBfU0laRV9BRERSICAgICAgICAgICAweDFGRkMwCi0jZGVmaW5lIEhXX0FDQ0VTU19QQVJUMF9TVEFSVF9BRERSICAgICAgICAgIDB4MUZGQzQKLSNkZWZpbmUgSFdfQUNDRVNTX1BBUlQxX1NJWkVfQUREUiAgICAgICAgICAgMHgxRkZDOAotI2RlZmluZSBIV19BQ0NFU1NfUEFSVDFfU1RBUlRfQUREUiAgICAgICAgICAweDFGRkNDCi0KLSNkZWZpbmUgSFdfQUNDRVNTX1JFR0lTVEVSX1NJWkUgICAgICAgICAgICAgNAotCi0jZGVmaW5lIEhXX0FDQ0VTU19QUkFNX01BWF9SQU5HRQkJMHgzYzAwMAotCi0jZGVmaW5lIFdTUElfQ01EX1JFQUQgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgV1NQSV9DTURfV1JJVEUgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBXU1BJX0NNRF9GSVhFRCAgICAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFdTUElfQ01EX0JZVEVfTEVOR1RIICAgICAgICAgIDB4MUZGRTAwMDAKLSNkZWZpbmUgV1NQSV9DTURfQllURV9MRU5HVEhfT0ZGU0VUICAgMTcKLSNkZWZpbmUgV1NQSV9DTURfQllURV9BRERSICAgICAgICAgICAgMHgwMDAxRkZGRgotCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfQ1JDX0xFTiAgICAgICA1Ci0KLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9TVEFSVCAgICAgICAgIDB4MDAKLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9UWCAgICAgICAgICAgIDB4NDAKLS8qIHRoZSBleHRyYSBieXBhc3MgYml0IGlzIHNhbXBsZWQgYnkgdGhlIFRORVQgYXMgJzEnICovCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfQllQQVNTX0JJVCAgICAweDgwCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfRklYRURCVVNZX0xFTiAweDA3Ci0jZGVmaW5lIFdTUElfSU5JVF9DTURfRU5fRklYRURCVVNZICAweDgwCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfRElTX0ZJWEVEQlVTWSAweDAwCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfSU9EICAgICAgICAgICAweDQwCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfSVAgICAgICAgICAgICAweDIwCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfQ1MgICAgICAgICAgICAweDEwCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfV1MgICAgICAgICAgICAweDA4Ci0jZGVmaW5lIFdTUElfSU5JVF9DTURfV1NQSSAgICAgICAgICAweDAxCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfRU5EICAgICAgICAgICAweDAxCi0KLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9MRU4gICAgICAgICAgIDgKLQotI2RlZmluZSBUTkVUV0lGX1JFQURfT0ZGU0VUX0JZVEVTICA4Ci0jZGVmaW5lIEhXX0FDQ0VTU19XU1BJX0ZJWEVEX0JVU1lfTEVOIFwKLQkJKChUTkVUV0lGX1JFQURfT0ZGU0VUX0JZVEVTIC0gNCkgLyBzaXplb2YodTMyKSkKLSNkZWZpbmUgSFdfQUNDRVNTX1dTUElfSU5JVF9DTURfTUFTSyAgMAotCi0KLS8qIFJhdyB0YXJnZXQgSU8sIGFkZHJlc3MgaXMgbm90IHRyYW5zbGF0ZWQgKi8KLXZvaWQgd2wxMnh4X3NwaV9yZWFkKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKLXZvaWQgd2wxMnh4X3NwaV93cml0ZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Ci0KLS8qIE1lbW9yeSB0YXJnZXQgSU8sIGFkZHJlc3MgaXMgdHJhbmxhdGVkIHRvIHBhcnRpdGlvbiAwICovCi12b2lkIHdsMTJ4eF9zcGlfbWVtX3JlYWQoc3RydWN0IHdsMTJ4eCAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOwotdm9pZCB3bDEyeHhfc3BpX21lbV93cml0ZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Ci11MzIgd2wxMnh4X21lbV9yZWFkMzIoc3RydWN0IHdsMTJ4eCAqd2wsIGludCBhZGRyKTsKLXZvaWQgd2wxMnh4X21lbV93cml0ZTMyKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkciwgdTMyIHZhbCk7Ci0KLS8qIFJlZ2lzdGVycyBJTyAqLwotdTMyIHdsMTJ4eF9yZWdfcmVhZDMyKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkcik7Ci12b2lkIHdsMTJ4eF9yZWdfd3JpdGUzMihzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IGFkZHIsIHUzMiB2YWwpOwotCi0vKiBJTklUIGFuZCBSRVNFVCB3b3JkcyAqLwotdm9pZCB3bDEyeHhfc3BpX3Jlc2V0KHN0cnVjdCB3bDEyeHggKndsKTsKLXZvaWQgd2wxMnh4X3NwaV9pbml0KHN0cnVjdCB3bDEyeHggKndsKTsKLXZvaWQgd2wxMnh4X3NldF9wYXJ0aXRpb24oc3RydWN0IHdsMTJ4eCAqd2wsCi0JCQkgIHUzMiBwYXJ0X3N0YXJ0LCB1MzIgcGFydF9zaXplLAotCQkJICB1MzIgcmVnX3N0YXJ0LCAgdTMyIHJlZ19zaXplKTsKLQotc3RhdGljIGlubGluZSB1MzIgd2wxMnh4X3JlYWQzMihzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IGFkZHIpCi17Ci0JdTMyIHJlc3BvbnNlOwotCi0Jd2wxMnh4X3NwaV9yZWFkKHdsLCBhZGRyLCAmcmVzcG9uc2UsIHNpemVvZih1MzIpKTsKLQotCXJldHVybiByZXNwb25zZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdsMTJ4eF93cml0ZTMyKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKLXsKLQl3bDEyeHhfc3BpX3dyaXRlKHdsLCBhZGRyLCAmdmFsLCBzaXplb2YodTMyKSk7Ci19Ci0KLSNlbmRpZiAvKiBfX1dMMTJYWF9TUElfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjE0NWUyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTU3ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSAid2wxMnh4LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAic3BpLmgiCi0jaW5jbHVkZSAidHguaCIKLSNpbmNsdWRlICJwcy5oIgotCi1zdGF0aWMgYm9vbCB3bDEyeHhfdHhfZG91YmxlX2J1ZmZlcl9idXN5KHN0cnVjdCB3bDEyeHggKndsLCB1MzIgZGF0YV9vdXRfY291bnQpCi17Ci0JaW50IHVzZWQsIGRhdGFfaW5fY291bnQ7Ci0KLQlkYXRhX2luX2NvdW50ID0gd2wtPmRhdGFfaW5fY291bnQ7Ci0KLQlpZiAoZGF0YV9pbl9jb3VudCA8IGRhdGFfb3V0X2NvdW50KQotCQkvKiBkYXRhX2luX2NvdW50IGhhcyB3cmFwcGVkICovCi0JCWRhdGFfaW5fY291bnQgKz0gVFhfU1RBVFVTX0RBVEFfT1VUX0NPVU5UX01BU0sgKyAxOwotCi0JdXNlZCA9IGRhdGFfaW5fY291bnQgLSBkYXRhX291dF9jb3VudDsKLQotCVdBUk5fT04odXNlZCA8IDApOwotCVdBUk5fT04odXNlZCA+IERQX1RYX1BBQ0tFVF9SSU5HX0NIVU5LX05VTSk7Ci0KLQlpZiAodXNlZCA+PSBEUF9UWF9QQUNLRVRfUklOR19DSFVOS19OVU0pCi0JCXJldHVybiB0cnVlOwotCWVsc2UKLQkJcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF90eF9wYXRoX3N0YXR1cyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQl1MzIgc3RhdHVzLCBhZGRyLCBkYXRhX291dF9jb3VudDsKLQlib29sIGJ1c3k7Ci0KLQlhZGRyID0gd2wtPmRhdGFfcGF0aC0+dHhfY29udHJvbF9hZGRyOwotCXN0YXR1cyA9IHdsMTJ4eF9tZW1fcmVhZDMyKHdsLCBhZGRyKTsKLQlkYXRhX291dF9jb3VudCA9IHN0YXR1cyAmIFRYX1NUQVRVU19EQVRBX09VVF9DT1VOVF9NQVNLOwotCWJ1c3kgPSB3bDEyeHhfdHhfZG91YmxlX2J1ZmZlcl9idXN5KHdsLCBkYXRhX291dF9jb3VudCk7Ci0KLQlpZiAoYnVzeSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF90eF9pZChzdHJ1Y3Qgd2wxMnh4ICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBGV19UWF9DTVBMVF9CTE9DS19TSVpFOyBpKyspCi0JCWlmICh3bC0+dHhfZnJhbWVzW2ldID09IE5VTEwpIHsKLQkJCXdsLT50eF9mcmFtZXNbaV0gPSBza2I7Ci0JCQlyZXR1cm4gaTsKLQkJfQotCi0JcmV0dXJuIC1FQlVTWTsKLX0KLQotc3RhdGljIHZvaWQgd2wxMnh4X3R4X2NvbnRyb2woc3RydWN0IHR4X2RvdWJsZV9idWZmZXJfZGVzYyAqdHhfaGRyLAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpjb250cm9sLCB1MTYgZmMpCi17Ci0JKih1MTYgKikmdHhfaGRyLT5jb250cm9sID0gMDsKLQotCXR4X2hkci0+Y29udHJvbC5yYXRlX3BvbGljeSA9IDA7Ci0KLQkvKiA4MDIuMTEgcGFja2V0cyAqLwotCXR4X2hkci0+Y29udHJvbC5wYWNrZXRfdHlwZSA9IDA7Ci0KLQlpZiAoY29udHJvbC0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykKLQkJdHhfaGRyLT5jb250cm9sLmFja19wb2xpY3kgPSAxOwotCi0JdHhfaGRyLT5jb250cm9sLnR4X2NvbXBsZXRlID0gMTsKLQotCWlmICgoZmMgJiBJRUVFODAyMTFfRlRZUEVfREFUQSkgJiYKLQkgICAgKChmYyAmIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSkgfHwKLQkgICAgIChmYyAmIElFRUU4MDIxMV9TVFlQRV9RT1NfTlVMTEZVTkMpKSkKLQkJdHhfaGRyLT5jb250cm9sLnFvcyA9IDE7Ci19Ci0KLS8qIFJTTiArIE1JQyA9IDggKyA4ID0gMTYgYnl0ZXMgKHdvcnN0IGNhc2UgLSBBRVMpLiAqLwotI2RlZmluZSBNQVhfTVNEVV9TRUNVUklUWV9MRU5HVEggICAgICAxNgotI2RlZmluZSBNQVhfTVBEVV9TRUNVUklUWV9MRU5HVEggICAgICAxNgotI2RlZmluZSBXTEFOX1FPU19IRFJfTEVOICAgICAgICAgICAgICAyNgotI2RlZmluZSBNQVhfTVBEVV9IRUFERVJfQU5EX1NFQ1VSSVRZICAoTUFYX01QRFVfU0VDVVJJVFlfTEVOR1RIICsgXAotCQkJCSAgICAgICBXTEFOX1FPU19IRFJfTEVOKQotI2RlZmluZSBIV19CTE9DS19TSVpFICAgICAgICAgICAgICAgICAyNTIKLXN0YXRpYyB2b2lkIHdsMTJ4eF90eF9mcmFnX2Jsb2NrX251bShzdHJ1Y3QgdHhfZG91YmxlX2J1ZmZlcl9kZXNjICp0eF9oZHIpCi17Ci0JdTE2IHBheWxvYWRfbGVuLCBmcmFnX3RocmVzaG9sZCwgbWVtX2Jsb2NrczsKLQl1MTYgbnVtX21wZHVzLCBtZW1fYmxvY2tzX3Blcl9mcmFnOwotCi0JZnJhZ190aHJlc2hvbGQgPSBJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEOwotCXR4X2hkci0+ZnJhZ190aHJlc2hvbGQgPSBjcHVfdG9fbGUxNihmcmFnX3RocmVzaG9sZCk7Ci0KLQlwYXlsb2FkX2xlbiA9IHR4X2hkci0+bGVuZ3RoICsgTUFYX01TRFVfU0VDVVJJVFlfTEVOR1RIOwotCi0JaWYgKHBheWxvYWRfbGVuID4gZnJhZ190aHJlc2hvbGQpIHsKLQkJbWVtX2Jsb2Nrc19wZXJfZnJhZyA9Ci0JCQkoKGZyYWdfdGhyZXNob2xkICsgTUFYX01QRFVfSEVBREVSX0FORF9TRUNVUklUWSkgLwotCQkJIEhXX0JMT0NLX1NJWkUpICsgMTsKLQkJbnVtX21wZHVzID0gcGF5bG9hZF9sZW4gLyBmcmFnX3RocmVzaG9sZDsKLQkJbWVtX2Jsb2NrcyA9IG51bV9tcGR1cyAqIG1lbV9ibG9ja3NfcGVyX2ZyYWc7Ci0JCXBheWxvYWRfbGVuIC09IG51bV9tcGR1cyAqIGZyYWdfdGhyZXNob2xkOwotCQludW1fbXBkdXMrKzsKLQotCX0gZWxzZSB7Ci0JCW1lbV9ibG9ja3NfcGVyX2ZyYWcgPSAwOwotCQltZW1fYmxvY2tzID0gMDsKLQkJbnVtX21wZHVzID0gMTsKLQl9Ci0KLQltZW1fYmxvY2tzICs9IChwYXlsb2FkX2xlbiAvIEhXX0JMT0NLX1NJWkUpICsgMTsKLQotCWlmIChudW1fbXBkdXMgPiAxKQotCQltZW1fYmxvY2tzICs9IG1pbihudW1fbXBkdXMsIG1lbV9ibG9ja3NfcGVyX2ZyYWcpOwotCi0JdHhfaGRyLT5udW1fbWVtX2Jsb2NrcyA9IG1lbV9ibG9ja3M7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X3R4X2ZpbGxfaGRyKHN0cnVjdCB3bDEyeHggKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpjb250cm9sKQotewotCXN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MgKnR4X2hkcjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7Ci0JaW50IGlkOwotCXUxNiBmYzsKLQotCWlmICghc2tiKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlkID0gd2wxMnh4X3R4X2lkKHdsLCBza2IpOwotCWlmIChpZCA8IDApCi0JCXJldHVybiBpZDsKLQotCWZjID0gKih1MTYgKilza2ItPmRhdGE7Ci0JdHhfaGRyID0gKHN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MgKikgc2tiX3B1c2goc2tiLAotCQkJCQkJCSAgIHNpemVvZigqdHhfaGRyKSk7Ci0KLQl0eF9oZHItPmxlbmd0aCA9IGNwdV90b19sZTE2KHNrYi0+bGVuIC0gc2l6ZW9mKCp0eF9oZHIpKTsKLQlyYXRlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKHdsLT5odywgY29udHJvbCk7Ci0JdHhfaGRyLT5yYXRlID0gY3B1X3RvX2xlMTYocmF0ZS0+aHdfdmFsdWUpOwotCXR4X2hkci0+ZXhwaXJ5X3RpbWUgPSBjcHVfdG9fbGUzMigxIDw8IDE2KTsKLQl0eF9oZHItPmlkID0gaWQ7Ci0KLQkvKiBGSVhNRTogaG93IHRvIGdldCB0aGUgY29ycmVjdCBxdWV1ZSBpZD8gKi8KLQl0eF9oZHItPnhtaXRfcXVldWUgPSAwOwotCi0Jd2wxMnh4X3R4X2NvbnRyb2wodHhfaGRyLCBjb250cm9sLCBmYyk7Ci0Jd2wxMnh4X3R4X2ZyYWdfYmxvY2tfbnVtKHR4X2hkcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogV2UgY29weSB0aGUgcGFja2V0IHRvIHRoZSB0YXJnZXQgKi8KLXN0YXRpYyBpbnQgd2wxMnh4X3R4X3NlbmRfcGFja2V0KHN0cnVjdCB3bDEyeHggKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmNvbnRyb2wpCi17Ci0Jc3RydWN0IHR4X2RvdWJsZV9idWZmZXJfZGVzYyAqdHhfaGRyOwotCWludCBsZW47Ci0JdTMyIGFkZHI7Ci0KLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0eF9oZHIgPSAoc3RydWN0IHR4X2RvdWJsZV9idWZmZXJfZGVzYyAqKSBza2ItPmRhdGE7Ci0KLQlpZiAoY29udHJvbC0+Y29udHJvbC5od19rZXkgJiYKLQkgICAgY29udHJvbC0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfVEtJUCkgewotCQlpbnQgaGRybGVuOwotCQl1MTYgZmM7Ci0JCXU4ICpwb3M7Ci0KLQkJZmMgPSAqKHUxNiAqKShza2ItPmRhdGEgKyBzaXplb2YoKnR4X2hkcikpOwotCQl0eF9oZHItPmxlbmd0aCArPSBXTDEyWFhfVEtJUF9JVl9TUEFDRTsKLQotCQloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjKTsKLQotCQlwb3MgPSBza2JfcHVzaChza2IsIFdMMTJYWF9US0lQX0lWX1NQQUNFKTsKLQkJbWVtbW92ZShwb3MsIHBvcyArIFdMMTJYWF9US0lQX0lWX1NQQUNFLAotCQkJc2l6ZW9mKCp0eF9oZHIpICsgaGRybGVuKTsKLQl9Ci0KLQkvKiBSZXZpc2l0LiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgZ2V0dGluZyBub24tYWxpZ25lZCBwYWNrZXRzLgotCSAgIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIEVBUE9MIHBhY2tldHMgZnJvbSB0aGUgdXNlciBzcGFjZS4KLQkgICBPdXIgRE1BIHJlcXVpcmVzIHBhY2tldHMgdG8gYmUgYWxpZ25lZCBvbiBhIDQtYnl0ZSBib3VuZGFyeS4KLQkqLwotCWlmICh1bmxpa2VseSgobG9uZylza2ItPmRhdGEgJiAweDAzKSkgewotCQlpbnQgb2Zmc2V0ID0gKDQgLSAobG9uZylza2ItPmRhdGEpICYgMHgwMzsKLQkJd2wxMnh4X2RlYnVnKERFQlVHX1RYLCAic2tiIG9mZnNldCAlZCIsIG9mZnNldCk7Ci0KLQkJLyogY2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBza2IgY2FuIGJlIHVzZWQgKi8KLQkJaWYgKCFza2JfY2xvbmVkKHNrYikgJiYgKHNrYl90YWlscm9vbShza2IpID49IG9mZnNldCkpIHsKLQkJCXVuc2lnbmVkIGNoYXIgKnNyYyA9IHNrYi0+ZGF0YTsKLQotCQkJLyogYWxpZ24gdGhlIGJ1ZmZlciBvbiBhIDQtYnl0ZSBib3VuZGFyeSAqLwotCQkJc2tiX3Jlc2VydmUoc2tiLCBvZmZzZXQpOwotCQkJbWVtbW92ZShza2ItPmRhdGEsIHNyYywgc2tiLT5sZW4pOwotCQl9IGVsc2UgewotCQkJd2wxMnh4X2luZm8oIk5vIGhhbmRsZXIsIGZpeG1lISIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQkvKiBPdXIgc2tiLT5kYXRhIGF0IHRoaXMgcG9pbnQgaW5jbHVkZXMgdGhlIEhXIGhlYWRlciAqLwotCWxlbiA9IFdMMTJYWF9UWF9BTElHTihza2ItPmxlbik7Ci0KLQlpZiAod2wtPmRhdGFfaW5fY291bnQgJiAweDEpCi0JCWFkZHIgPSB3bC0+ZGF0YV9wYXRoLT50eF9wYWNrZXRfcmluZ19hZGRyICsKLQkJCXdsLT5kYXRhX3BhdGgtPnR4X3BhY2tldF9yaW5nX2NodW5rX3NpemU7Ci0JZWxzZQotCQlhZGRyID0gd2wtPmRhdGFfcGF0aC0+dHhfcGFja2V0X3JpbmdfYWRkcjsKLQotCXdsMTJ4eF9zcGlfbWVtX3dyaXRlKHdsLCBhZGRyLCBza2ItPmRhdGEsIGxlbik7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfVFgsICJ0eCBpZCAldSBza2IgMHglcCBwYXlsb2FkICV1IHJhdGUgMHgleCIsCi0JCSAgICAgdHhfaGRyLT5pZCwgc2tiLCB0eF9oZHItPmxlbmd0aCwgdHhfaGRyLT5yYXRlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB3bDEyeHhfdHhfdHJpZ2dlcihzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQl1MzIgZGF0YSwgYWRkcjsKLQotCWlmICh3bC0+ZGF0YV9pbl9jb3VudCAmIDB4MSkgewotCQlhZGRyID0gQUNYX1JFR19JTlRFUlJVUFRfVFJJR19IOwotCQlkYXRhID0gSU5UUl9UUklHX1RYX1BST0MxOwotCX0gZWxzZSB7Ci0JCWFkZHIgPSBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHOwotCQlkYXRhID0gSU5UUl9UUklHX1RYX1BST0MwOwotCX0KLQotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgYWRkciwgZGF0YSk7Ci0KLQkvKiBCdW1waW5nIGRhdGEgaW4gKi8KLQl3bC0+ZGF0YV9pbl9jb3VudCA9ICh3bC0+ZGF0YV9pbl9jb3VudCArIDEpICYKLQkJVFhfU1RBVFVTX0RBVEFfT1VUX0NPVU5UX01BU0s7Ci19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgd2wtPm11dGV4ICovCi1zdGF0aWMgaW50IHdsMTJ4eF90eF9mcmFtZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0JaW50IHJldCA9IDA7Ci0JdTggaWR4OwotCi0JaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQotCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkgewotCQlpZHggPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeDsKLQkJaWYgKHVubGlrZWx5KHdsLT5kZWZhdWx0X2tleSAhPSBpZHgpKSB7Ci0JCQlyZXQgPSB3bDEyeHhfYWN4X2RlZmF1bHRfa2V5KHdsLCBpZHgpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCXJldCA9IHdsMTJ4eF90eF9wYXRoX3N0YXR1cyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfdHhfZmlsbF9oZHIod2wsIHNrYiwgaW5mbyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfdHhfc2VuZF9wYWNrZXQod2wsIHNrYiwgaW5mbyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQl3bDEyeHhfdHhfdHJpZ2dlcih3bCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIHdsMTJ4eF90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgd2wxMnh4ICp3bCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2wxMnh4LCB0eF93b3JrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWJvb2wgd29rZW5fdXAgPSBmYWxzZTsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMlhYX1NUQVRFX09GRikpCi0JCWdvdG8gb3V0OwotCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2wtPnR4X3F1ZXVlKSkpIHsKLQkJaWYgKCF3b2tlbl91cCkgewotCQkJd2wxMnh4X3BzX2VscF93YWtldXAod2wpOwotCQkJd29rZW5fdXAgPSB0cnVlOwotCQl9Ci0KLQkJcmV0ID0gd2wxMnh4X3R4X2ZyYW1lKHdsLCBza2IpOwotCQlpZiAocmV0ID09IC1FQlVTWSkgewotCQkJLyogZmlybXdhcmUgYnVmZmVyIGlzIGZ1bGwsIHN0b3AgcXVldWVzICovCi0JCQl3bDEyeHhfZGVidWcoREVCVUdfVFgsICJ0eF93b3JrOiBmdyBidWZmZXIgZnVsbCwgIgotCQkJCSAgICAgInN0b3AgcXVldWVzIik7Ci0JCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMod2wtPmh3KTsKLQkJCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gdHJ1ZTsKLQkJCXNrYl9xdWV1ZV9oZWFkKCZ3bC0+dHhfcXVldWUsIHNrYik7Ci0JCQlnb3RvIG91dDsKLQkJfSBlbHNlIGlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotb3V0OgotCWlmICh3b2tlbl91cCkKLQkJd2wxMnh4X3BzX2VscF9zbGVlcCh3bCk7Ci0KLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICp3bDEyeHhfdHhfcGFyc2Vfc3RhdHVzKHU4IHN0YXR1cykKLXsKLQkvKiA4IGJpdCBzdGF0dXMgZmllbGQsIG9uZSBjaGFyYWN0ZXIgcGVyIGJpdCBwbHVzIG51bGwgKi8KLQlzdGF0aWMgY2hhciBidWZbOV07Ci0JaW50IGkgPSAwOwotCi0JbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwotCi0JaWYgKHN0YXR1cyAmIFRYX0RNQV9FUlJPUikKLQkJYnVmW2krK10gPSAnbSc7Ci0JaWYgKHN0YXR1cyAmIFRYX0RJU0FCTEVEKQotCQlidWZbaSsrXSA9ICdkJzsKLQlpZiAoc3RhdHVzICYgVFhfUkVUUllfRVhDRUVERUQpCi0JCWJ1ZltpKytdID0gJ3InOwotCWlmIChzdGF0dXMgJiBUWF9USU1FT1VUKQotCQlidWZbaSsrXSA9ICd0JzsKLQlpZiAoc3RhdHVzICYgVFhfS0VZX05PVF9GT1VORCkKLQkJYnVmW2krK10gPSAnayc7Ci0JaWYgKHN0YXR1cyAmIFRYX0VOQ1JZUFRfRkFJTCkKLQkJYnVmW2krK10gPSAnZSc7Ci0JaWYgKHN0YXR1cyAmIFRYX1VOQVZBSUxBQkxFX1BSSU9SSVRZKQotCQlidWZbaSsrXSA9ICdwJzsKLQotCS8qIGJpdCAwIGlzIHVudXNlZCBhcHBhcmVudGx5ICovCi0KLQlyZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgdm9pZCB3bDEyeHhfdHhfcGFja2V0X2NiKHN0cnVjdCB3bDEyeHggKndsLAotCQkJCXN0cnVjdCB0eF9yZXN1bHQgKnJlc3VsdCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgaGRybGVuLCByZXQ7Ci0JdTggKmZyYW1lOwotCi0Jc2tiID0gd2wtPnR4X2ZyYW1lc1tyZXN1bHQtPmlkXTsKLQlpZiAoc2tiID09IE5VTEwpIHsKLQkJd2wxMnh4X2Vycm9yKCJTS0IgZm9yIHBhY2tldCAlZCBpcyBOVUxMIiwgcmVzdWx0LT5pZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCi0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKLQkgICAgKHJlc3VsdC0+c3RhdHVzID09IFRYX1NVQ0NFU1MpKQotCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7Ci0KLQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSByZXN1bHQtPmFja19mYWlsdXJlcyArIDE7Ci0Jd2wtPnN0YXRzLnJldHJ5X2NvdW50ICs9IHJlc3VsdC0+YWNrX2ZhaWx1cmVzOwotCi0JLyoKLQkgKiBXZSBoYXZlIHRvIHJlbW92ZSBvdXIgcHJpdmF0ZSBUWCBoZWFkZXIgYmVmb3JlIHB1c2hpbmcKLQkgKiB0aGUgc2tiIGJhY2sgdG8gbWFjODAyMTEuCi0JICovCi0JZnJhbWUgPSBza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdHhfZG91YmxlX2J1ZmZlcl9kZXNjKSk7Ci0JaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5ICYmCi0JICAgIGluZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1RLSVApIHsKLQkJaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKLQkJbWVtbW92ZShmcmFtZSArIFdMMTJYWF9US0lQX0lWX1NQQUNFLCBmcmFtZSwgaGRybGVuKTsKLQkJc2tiX3B1bGwoc2tiLCBXTDEyWFhfVEtJUF9JVl9TUEFDRSk7Ci0JfQotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX1RYLCAidHggc3RhdHVzIGlkICV1IHNrYiAweCVwIGZhaWx1cmVzICV1IHJhdGUgMHgleCIKLQkJICAgICAiIHN0YXR1cyAweCV4ICglcykiLAotCQkgICAgIHJlc3VsdC0+aWQsIHNrYiwgcmVzdWx0LT5hY2tfZmFpbHVyZXMsIHJlc3VsdC0+cmF0ZSwKLQkJICAgICByZXN1bHQtPnN0YXR1cywgd2wxMnh4X3R4X3BhcnNlX3N0YXR1cyhyZXN1bHQtPnN0YXR1cykpOwotCi0KLQlpZWVlODAyMTFfdHhfc3RhdHVzKHdsLT5odywgc2tiKTsKLQotCXdsLT50eF9mcmFtZXNbcmVzdWx0LT5pZF0gPSBOVUxMOwotCi0JaWYgKHdsLT50eF9xdWV1ZV9zdG9wcGVkKSB7Ci0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19UWCwgImNiOiBxdWV1ZSB3YXMgc3RvcHBlZCIpOwotCi0JCXNrYiA9IHNrYl9kZXF1ZXVlKCZ3bC0+dHhfcXVldWUpOwotCi0JCS8qIFRoZSBza2IgY2FuIGJlIE5VTEwgYmVjYXVzZSB0eF93b3JrIG1pZ2h0IGhhdmUgYmVlbgotCQkgICBzY2hlZHVsZWQgYmVmb3JlIHRoZSBxdWV1ZSB3YXMgc3RvcHBlZCBtYWtpbmcgdGhlCi0JCSAgIHF1ZXVlIGVtcHR5ICovCi0KLQkJaWYgKHNrYikgewotCQkJcmV0ID0gd2wxMnh4X3R4X2ZyYW1lKHdsLCBza2IpOwotCQkJaWYgKHJldCA9PSAtRUJVU1kpIHsKLQkJCQkvKiBmaXJtd2FyZSBidWZmZXIgaXMgc3RpbGwgZnVsbCAqLwotCQkJCXdsMTJ4eF9kZWJ1ZyhERUJVR19UWCwgImNiOiBmdyBidWZmZXIgIgotCQkJCQkgICAgICJzdGlsbCBmdWxsIik7Ci0JCQkJc2tiX3F1ZXVlX2hlYWQoJndsLT50eF9xdWV1ZSwgc2tiKTsKLQkJCQlyZXR1cm47Ci0JCQl9IGVsc2UgaWYgKHJldCA8IDApIHsKLQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJd2wxMnh4X2RlYnVnKERFQlVHX1RYLCAiY2I6IHdha2luZyBxdWV1ZXMiKTsKLQkJaWVlZTgwMjExX3dha2VfcXVldWVzKHdsLT5odyk7Ci0JCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gZmFsc2U7Ci0JfQotfQotCi0vKiBDYWxsZWQgdXBvbiByZWNlcHRpb24gb2YgYSBUWCBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KLXZvaWQgd2wxMnh4X3R4X2NvbXBsZXRlKHN0cnVjdCB3bDEyeHggKndsKQotewotCWludCBpLCByZXN1bHRfaW5kZXgsIG51bV9jb21wbGV0ZSA9IDA7Ci0Jc3RydWN0IHR4X3Jlc3VsdCByZXN1bHRbRldfVFhfQ01QTFRfQkxPQ0tfU0laRV0sICpyZXN1bHRfcHRyOwotCi0JaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSAhPSBXTDEyWFhfU1RBVEVfT04pKQotCQlyZXR1cm47Ci0KLQkvKiBGaXJzdCB3ZSByZWFkIHRoZSByZXN1bHQgKi8KLQl3bDEyeHhfc3BpX21lbV9yZWFkKHdsLCB3bC0+ZGF0YV9wYXRoLT50eF9jb21wbGV0ZV9hZGRyLAotCQkJICAgIHJlc3VsdCwgc2l6ZW9mKHJlc3VsdCkpOwotCi0JcmVzdWx0X2luZGV4ID0gd2wtPm5leHRfdHhfY29tcGxldGU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZXN1bHQpOyBpKyspIHsKLQkJcmVzdWx0X3B0ciA9ICZyZXN1bHRbcmVzdWx0X2luZGV4XTsKLQotCQlpZiAocmVzdWx0X3B0ci0+ZG9uZV8xID09IDEgJiYKLQkJICAgIHJlc3VsdF9wdHItPmRvbmVfMiA9PSAxKSB7Ci0JCQl3bDEyeHhfdHhfcGFja2V0X2NiKHdsLCByZXN1bHRfcHRyKTsKLQotCQkJcmVzdWx0X3B0ci0+ZG9uZV8xID0gMDsKLQkJCXJlc3VsdF9wdHItPmRvbmVfMiA9IDA7Ci0KLQkJCXJlc3VsdF9pbmRleCA9IChyZXN1bHRfaW5kZXggKyAxKSAmCi0JCQkJKEZXX1RYX0NNUExUX0JMT0NLX1NJWkUgLSAxKTsKLQkJCW51bV9jb21wbGV0ZSsrOwotCQl9IGVsc2UgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBFdmVyeSBjb21wbGV0ZWQgZnJhbWUgbmVlZHMgdG8gYmUgYWNrbm93bGVkZ2VkICovCi0JaWYgKG51bV9jb21wbGV0ZSkgewotCQkvKgotCQkgKiBJZiB3ZSd2ZSB3cmFwcGVkLCB3ZSBoYXZlIHRvIGNsZWFyCi0JCSAqIHRoZSByZXN1bHRzIGluIDIgc3RlcHMuCi0JCSAqLwotCQlpZiAocmVzdWx0X2luZGV4ID4gd2wtPm5leHRfdHhfY29tcGxldGUpIHsKLQkJCS8qIE9ubHkgMSB3cml0ZSBpcyBuZWVkZWQgKi8KLQkJCXdsMTJ4eF9zcGlfbWVtX3dyaXRlKHdsLAotCQkJCQkgICAgIHdsLT5kYXRhX3BhdGgtPnR4X2NvbXBsZXRlX2FkZHIgKwotCQkJCQkgICAgICh3bC0+bmV4dF90eF9jb21wbGV0ZSAqCi0JCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgdHhfcmVzdWx0KSksCi0JCQkJCSAgICAgJnJlc3VsdFt3bC0+bmV4dF90eF9jb21wbGV0ZV0sCi0JCQkJCSAgICAgbnVtX2NvbXBsZXRlICoKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IHR4X3Jlc3VsdCkpOwotCi0KLQkJfSBlbHNlIGlmIChyZXN1bHRfaW5kZXggPCB3bC0+bmV4dF90eF9jb21wbGV0ZSkgewotCQkJLyogMiB3cml0ZXMgYXJlIG5lZWRlZCAqLwotCQkJd2wxMnh4X3NwaV9tZW1fd3JpdGUod2wsCi0JCQkJCSAgICAgd2wtPmRhdGFfcGF0aC0+dHhfY29tcGxldGVfYWRkciArCi0JCQkJCSAgICAgKHdsLT5uZXh0X3R4X2NvbXBsZXRlICoKLQkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB0eF9yZXN1bHQpKSwKLQkJCQkJICAgICAmcmVzdWx0W3dsLT5uZXh0X3R4X2NvbXBsZXRlXSwKLQkJCQkJICAgICAoRldfVFhfQ01QTFRfQkxPQ0tfU0laRSAtCi0JCQkJCSAgICAgIHdsLT5uZXh0X3R4X2NvbXBsZXRlKSAqCi0JCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCB0eF9yZXN1bHQpKTsKLQotCQkJd2wxMnh4X3NwaV9tZW1fd3JpdGUod2wsCi0JCQkJCSAgICAgd2wtPmRhdGFfcGF0aC0+dHhfY29tcGxldGVfYWRkciwKLQkJCQkJICAgICByZXN1bHQsCi0JCQkJCSAgICAgKG51bV9jb21wbGV0ZSAtCi0JCQkJCSAgICAgIEZXX1RYX0NNUExUX0JMT0NLX1NJWkUgKwotCQkJCQkgICAgICB3bC0+bmV4dF90eF9jb21wbGV0ZSkgKgotCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgdHhfcmVzdWx0KSk7Ci0KLQkJfSBlbHNlIHsKLQkJCS8qIFdlIGhhdmUgdG8gd3JpdGUgdGhlIHdob2xlIGFycmF5ICovCi0JCQl3bDEyeHhfc3BpX21lbV93cml0ZSh3bCwKLQkJCQkJICAgICB3bC0+ZGF0YV9wYXRoLT50eF9jb21wbGV0ZV9hZGRyLAotCQkJCQkgICAgIHJlc3VsdCwKLQkJCQkJICAgICBGV19UWF9DTVBMVF9CTE9DS19TSVpFICoKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IHR4X3Jlc3VsdCkpOwotCQl9Ci0KLQl9Ci0KLQl3bC0+bmV4dF90eF9jb21wbGV0ZSA9IHJlc3VsdF9pbmRleDsKLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCB3bC0+bXV0ZXggKi8KLXZvaWQgd2wxMnh4X3R4X2ZsdXNoKHN0cnVjdCB3bDEyeHggKndsKQotewotCWludCBpOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCi0JLyogVFggZmFpbHVyZSAqLwotLyogCWNvbnRyb2wtPmZsYWdzID0gMDsgRklYTUUgKi8KLQotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJndsLT50eF9xdWV1ZSkpKSB7Ci0JCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0KLQkJd2wxMnh4X2RlYnVnKERFQlVHX1RYLCAiZmx1c2hpbmcgc2tiIDB4JXAiLCBza2IpOwotCi0JCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTKSkKLQkJCQljb250aW51ZTsKLQotCQlpZWVlODAyMTFfdHhfc3RhdHVzKHdsLT5odywgc2tiKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRldfVFhfQ01QTFRfQkxPQ0tfU0laRTsgaSsrKQotCQlpZiAod2wtPnR4X2ZyYW1lc1tpXSAhPSBOVUxMKSB7Ci0JCQlza2IgPSB3bC0+dHhfZnJhbWVzW2ldOwotCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQotCQkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVMpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZWVlODAyMTFfdHhfc3RhdHVzKHdsLT5odywgc2tiKTsKLQkJCXdsLT50eF9mcmFtZXNbaV0gPSBOVUxMOwotCQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzgyNjkxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90eC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2lmbmRlZiBfX1dMMTJYWF9UWF9IX18KLSNkZWZpbmUgX19XTDEyWFhfVFhfSF9fCi0KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLQotLyoKLSAqCi0gKiBUWCBQQVRICi0gKgotICogVGhlIFR4IHBhdGggdXNlcyBhIGRvdWJsZSBidWZmZXIgYW5kIGEgdHhfY29udHJvbCBzdHJ1Y3R1cmUsIGVhY2ggbG9jYXRlZAotICogYXQgYSBmaXhlZCBhZGRyZXNzIGluIHRoZSBkZXZpY2UncyBtZW1vcnkuIE9uIHN0YXJ0dXAsIHRoZSBob3N0IHJldHJpZXZlcwotICogdGhlIHBvaW50ZXJzIHRvIHRoZXNlIGFkZHJlc3Nlcy4gQSBkb3VibGUgYnVmZmVyIGFsbG93cyBmb3IgY29udGludW91cyBkYXRhCi0gKiBmbG93IHRvd2FyZHMgdGhlIGRldmljZS4gVGhlIGhvc3Qga2VlcHMgdHJhY2sgb2Ygd2hpY2ggYnVmZmVyIGlzIGF2YWlsYWJsZQotICogYW5kIGFsdGVybmF0ZXMgYmV0d2VlbiB0aGVzZSB0d28gYnVmZmVycyBvbiBhIHBlciBwYWNrZXQgYmFzaXMuCi0gKgotICogVGhlIHNpemUgb2YgZWFjaCBvZiB0aGUgdHdvIGJ1ZmZlcnMgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGxvbmdlc3QKLSAqIDgwMi4zIHBhY2tldCAtIG1heGltdW0gc2l6ZSBFdGhlcm5ldCBwYWNrZXQgKyBoZWFkZXIgKyBkZXNjcmlwdG9yLgotICogVFggY29tcGxldGUgaW5kaWNhdGlvbiB3aWxsIGJlIHJlY2VpdmVkIGEtc3luY2hyb25vdXNseSBpbiBhIFRYIGRvbmUgY3ljbGljCi0gKiBidWZmZXIgd2hpY2ggaXMgY29tcG9zZWQgb2YgMTYgdHhfcmVzdWx0IGRlc2NyaXB0b3JzIHN0cnVjdHVyZXMgYW5kIGlzIHVzZWQKLSAqIGluIGEgY3ljbGljIG1hbm5lci4KLSAqCi0gKiBUaGUgVFggKEhPU1QpIHByb2NlZHVyZSBpcyBhcyBmb2xsb3dzOgotICogMS4gUmVhZCB0aGUgVHggcGF0aCBzdGF0dXMsIHRoYXQgd2lsbCBnaXZlIHRoZSBkYXRhX291dF9jb3VudC4KLSAqIDIuIGdvdG8gMSwgaWYgbm90IHBvc3NpYmxlLgotICogICAgaS5lLiBpZiBkYXRhX2luX2NvdW50IC0gZGF0YV9vdXRfY291bnQgPj0gSHdCdWZmZXIgc2l6ZSAoMiBmb3IgZG91YmxlCi0gKiAgICBidWZmZXIpLgotICogMy4gQ29weSB0aGUgcGFja2V0IChwcmVjZWRlZCBieSBkb3VibGVfYnVmZmVyX2Rlc2MpLCBpZiBwb3NzaWJsZS4KLSAqICAgIGkuZS4gaWYgZGF0YV9pbl9jb3VudCAtIGRhdGFfb3V0X2NvdW50IDwgSHdCdWZmZXIgc2l6ZSAoMiBmb3IgZG91YmxlCi0gKiAgICBidWZmZXIpLgotICogNC4gaW5jcmVtZW50IGRhdGFfaW5fY291bnQuCi0gKiA1LiBJbmZvcm0gdGhlIGZpcm13YXJlIGJ5IGdlbmVyYXRpbmcgYSBmaXJtd2FyZSBpbnRlcm5hbCBpbnRlcnJ1cHQuCi0gKiA2LiBGVyB3aWxsIGluY3JlbWVudCBkYXRhX291dF9jb3VudCBhZnRlciBpdCByZWFkcyB0aGUgYnVmZmVyLgotICoKLSAqIFRoZSBUWCBDb21wbGV0ZSBwcm9jZWR1cmU6Ci0gKiAxLiBUbyBnZXQgYSBUWCBjb21wbGV0ZSBpbmRpY2F0aW9uIHRoZSBob3N0IGVuYWJsZXMgdGhlIHR4X2NvbXBsZXRlIGZsYWcgaW4KLSAqICAgIHRoZSBUWCBkZXNjcmlwdG9yIFN0cnVjdHVyZS4KLSAqIDIuIEZvciBlYWNoIHBhY2tldCB3aXRoIGEgVHggQ29tcGxldGUgZmllbGQgc2V0LCB0aGUgZmlybXdhcmUgYWRkcyB0aGUKLSAqICAgIHRyYW5zbWl0IHJlc3VsdHMgdG8gdGhlIGN5Y2xpYyBidWZmZXIgKHR4RG9uZVJpbmcpIGFuZCBzZXRzIGJvdGggZG9uZV8xCi0gKiAgICBhbmQgZG9uZV8yIHRvIDEgdG8gaW5kaWNhdGUgZHJpdmVyIG93bmVyc2hpcC4KLSAqIDMuIFRoZSBmaXJtd2FyZSBzZW5kcyBhIFR4IENvbXBsZXRlIGludGVycnVwdCB0byB0aGUgaG9zdCB0byB0cmlnZ2VyIHRoZQotICogICAgaG9zdCB0byBwcm9jZXNzIHRoZSBuZXcgZGF0YS4gTm90ZTogaW50ZXJydXB0IHdpbGwgYmUgc2VuZCBwZXIgcGFja2V0IGlmCi0gKiAgICBUWCBjb21wbGV0ZSBpbmRpY2F0aW9uIHdhcyByZXF1ZXN0ZWQgaW4gdHhfY29udHJvbCBvciBwZXIgY3Jvc3NpbmcKLSAqICAgIGFnZ3JlZ2F0aW9uIHRocmVzaG9sZC4KLSAqIDQuIEFmdGVyIHJlY2VpdmluZyB0aGUgVHggQ29tcGxldGUgaW50ZXJydXB0LCB0aGUgaG9zdCByZWFkcyB0aGUKLSAqICAgIFR4RGVzY3JpcHRvckRvbmUgaW5mb3JtYXRpb24gaW4gYSBjeWNsaWMgbWFubmVyIGFuZCBjbGVhcnMgYm90aCBkb25lXzEKLSAqICAgIGFuZCBkb25lXzIgZmllbGRzLgotICoKLSAqLwotCi0jZGVmaW5lIFRYX0NPTVBMRVRFX1JFUVVJUkVEX0JJVAkweDgwCi0jZGVmaW5lIFRYX1NUQVRVU19EQVRBX09VVF9DT1VOVF9NQVNLICAgMHhmCi0jZGVmaW5lIFdMMTJYWF9UWF9BTElHTl9UTyA0Ci0jZGVmaW5lIFdMMTJYWF9UWF9BTElHTihsZW4pICgoKGxlbikgKyBXTDEyWFhfVFhfQUxJR05fVE8gLSAxKSAmIFwKLQkJCSAgICAgfihXTDEyWFhfVFhfQUxJR05fVE8gLSAxKSkKLSNkZWZpbmUgV0wxMlhYX1RLSVBfSVZfU1BBQ0UgNAotCi1zdHJ1Y3QgdHhfY29udHJvbCB7Ci0JLyogUmF0ZSBQb2xpY3kgKGNsYXNzKSBpbmRleCAqLwotCXVuc2lnbmVkIHJhdGVfcG9saWN5OjM7Ci0KLQkvKiBXaGVuIHNldCwgbm8gYWNrIHBvbGljeSBpcyBleHBlY3RlZCAqLwotCXVuc2lnbmVkIGFja19wb2xpY3k6MTsKLQotCS8qCi0JICogUGFja2V0IHR5cGU6Ci0JICogMCAtPiA4MDIuMTEKLQkgKiAxIC0+IDgwMi4zCi0JICogMiAtPiBJUAotCSAqIDMgLT4gcmF3IGNvZGVjCi0JICovCi0JdW5zaWduZWQgcGFja2V0X3R5cGU6MjsKLQotCS8qIElmIHNldCwgdGhpcyBpcyBhIFFvUy1OdWxsIG9yIFFvUy1EYXRhIGZyYW1lICovCi0JdW5zaWduZWQgcW9zOjE7Ci0KLQkvKgotCSAqIElmIHNldCwgdGhlIHRhcmdldCB0cmlnZ2VycyB0aGUgdHggY29tcGxldGUgSU5UCi0JICogdXBvbiBmcmFtZSBzZW5kaW5nIGNvbXBsZXRpb24uCi0JICovCi0JdW5zaWduZWQgdHhfY29tcGxldGU6MTsKLQotCS8qIDIgYnl0ZXMgcGFkZGluZyBiZWZvcmUgcGFja2V0IGhlYWRlciAqLwotCXVuc2lnbmVkIHhmZXJfcGFkOjE7Ci0KLQl1bnNpZ25lZCByZXNlcnZlZDo3OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLQotc3RydWN0IHR4X2RvdWJsZV9idWZmZXJfZGVzYyB7Ci0JLyogTGVuZ3RoIG9mIHBheWxvYWQsIGluY2x1ZGluZyBoZWFkZXJzLiAqLwotCXUxNiBsZW5ndGg7Ci0KLQkvKgotCSAqIEEgYml0IG1hc2sgdGhhdCBzcGVjaWZpZXMgdGhlIGluaXRpYWwgcmF0ZSB0byBiZSB1c2VkCi0JICogUG9zc2libGUgdmFsdWVzIGFyZToKLQkgKiAweDAwMDEgLSAxTWJpdHMKLQkgKiAweDAwMDIgLSAyTWJpdHMKLQkgKiAweDAwMDQgLSA1LjVNYml0cwotCSAqIDB4MDAwOCAtIDZNYml0cwotCSAqIDB4MDAxMCAtIDlNYml0cwotCSAqIDB4MDAyMCAtIDExTWJpdHMKLQkgKiAweDAwNDAgLSAxMk1iaXRzCi0JICogMHgwMDgwIC0gMThNYml0cwotCSAqIDB4MDEwMCAtIDIyTWJpdHMKLQkgKiAweDAyMDAgLSAyNE1iaXRzCi0JICogMHgwNDAwIC0gMzZNYml0cwotCSAqIDB4MDgwMCAtIDQ4TWJpdHMKLQkgKiAweDEwMDAgLSA1NE1iaXRzCi0JICovCi0JdTE2IHJhdGU7Ci0KLQkvKiBUaW1lIGluIHVzIHRoYXQgYSBwYWNrZXQgY2FuIHNwZW5kIGluIHRoZSB0YXJnZXQgKi8KLQl1MzIgZXhwaXJ5X3RpbWU7Ci0KLQkvKiBpbmRleCBvZiB0aGUgVFggcXVldWUgdXNlZCBmb3IgdGhpcyBwYWNrZXQgKi8KLQl1OCB4bWl0X3F1ZXVlOwotCi0JLyogVXNlZCB0byBpZGVudGlmeSBhIHBhY2tldCAqLwotCXU4IGlkOwotCi0Jc3RydWN0IHR4X2NvbnRyb2wgY29udHJvbDsKLQotCS8qCi0JICogVGhlIEZXIHNob3VsZCBjdXQgdGhlIHBhY2tldCBpbnRvIGZyYWdtZW50cwotCSAqIG9mIHRoaXMgc2l6ZS4KLQkgKi8KLQl1MTYgZnJhZ190aHJlc2hvbGQ7Ci0KLQkvKiBOdW1iZXJzIG9mIEhXIHF1ZXVlIGJsb2NrcyB0byBiZSBhbGxvY2F0ZWQgKi8KLQl1OCBudW1fbWVtX2Jsb2NrczsKLQotCXU4IHJlc2VydmVkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWVudW0gewotCVRYX1NVQ0NFU1MgICAgICAgICAgICAgID0gMCwKLQlUWF9ETUFfRVJST1IgICAgICAgICAgICA9IEJJVCg3KSwKLQlUWF9ESVNBQkxFRCAgICAgICAgICAgICA9IEJJVCg2KSwKLQlUWF9SRVRSWV9FWENFRURFRCAgICAgICA9IEJJVCg1KSwKLQlUWF9USU1FT1VUICAgICAgICAgICAgICA9IEJJVCg0KSwKLQlUWF9LRVlfTk9UX0ZPVU5EICAgICAgICA9IEJJVCgzKSwKLQlUWF9FTkNSWVBUX0ZBSUwgICAgICAgICA9IEJJVCgyKSwKLQlUWF9VTkFWQUlMQUJMRV9QUklPUklUWSA9IEJJVCgxKSwKLX07Ci0KLXN0cnVjdCB0eF9yZXN1bHQgewotCS8qCi0JICogT3duZXJzaGlwIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBob3N0IGFuZAotCSAqIHRoZSBmaXJtd2FyZS4gSWYgZG9uZV8xIGFuZCBkb25lXzIgYXJlIGNsZWFyZWQsCi0JICogb3duZWQgYnkgdGhlIEZXIChubyBpbmZvIHJlYWR5KS4KLQkgKi8KLQl1OCBkb25lXzE7Ci0KLQkvKiBzYW1lIGFzIGRvdWJsZV9idWZmZXJfZGVzYy0+aWQgKi8KLQl1OCBpZDsKLQotCS8qCi0JICogVG90YWwgYWlyIGFjY2VzcyBkdXJhdGlvbiBjb25zdW1lZCBieSB0aGlzCi0JICogcGFja2V0LCBpbmNsdWRpbmcgYWxsIHJldHJpZXMgYW5kIG92ZXJoZWFkcy4KLQkgKi8KLQl1MTYgbWVkaXVtX3VzYWdlOwotCi0JLyogVG90YWwgbWVkaWEgZGVsYXkgKGZyb20gMXN0IEVEQ0EgQUlGUyBjb3VudGVyIHVudGlsIFRYIENvbXBsZXRlKS4gKi8KLQl1MzIgbWVkaXVtX2RlbGF5OwotCi0JLyogVGltZSBiZXR3ZWVuIGhvc3QgeGZlciBhbmQgdHggY29tcGxldGUgKi8KLQl1MzIgZndfaG5hZGxpbmdfdGltZTsKLQotCS8qIFRoZSBMUy1ieXRlIG9mIHRoZSBsYXN0IFRLSVAgc2VxdWVuY2UgbnVtYmVyLiAqLwotCXU4IGxzYl9zZXFfbnVtOwotCi0JLyogUmV0cnkgY291bnQgKi8KLQl1OCBhY2tfZmFpbHVyZXM7Ci0KLQkvKiBBdCB3aGljaCByYXRlIHdlIGdvdCBhIEFDSyAqLwotCXUxNiByYXRlOwotCi0JdTE2IHJlc2VydmVkOwotCi0JLyogVFhfKiAqLwotCXU4IHN0YXR1czsKLQotCS8qIFNlZSBkb25lXzEgKi8KLQl1OCBkb25lXzI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotdm9pZCB3bDEyeHhfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotdm9pZCB3bDEyeHhfdHhfY29tcGxldGUoc3RydWN0IHdsMTJ4eCAqd2wpOwotdm9pZCB3bDEyeHhfdHhfZmx1c2goc3RydWN0IHdsMTJ4eCAqd2wpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UxNTYxYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MDkgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNpbmNsdWRlICJ3bDEyNTEuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJzcGkuaCIKLSNpbmNsdWRlICJib290LmgiCi0jaW5jbHVkZSAiZXZlbnQuaCIKLSNpbmNsdWRlICJhY3guaCIKLSNpbmNsdWRlICJ0eC5oIgotI2luY2x1ZGUgInJ4LmgiCi0jaW5jbHVkZSAicHMuaCIKLSNpbmNsdWRlICJpbml0LmgiCi0KLXN0YXRpYyBzdHJ1Y3Qgd2wxMnh4X3BhcnRpdGlvbl9zZXQgd2wxMjUxX3BhcnRfdGFibGVbUEFSVF9UQUJMRV9MRU5dID0gewotCVtQQVJUX0RPV05dID0gewotCQkubWVtID0gewotCQkJLnN0YXJ0ID0gMHgwMDAwMDAwMCwKLQkJCS5zaXplICA9IDB4MDAwMTY4MDAKLQkJfSwKLQkJLnJlZyA9IHsKLQkJCS5zdGFydCA9IFJFR0lTVEVSU19CQVNFLAotCQkJLnNpemUgID0gUkVHSVNURVJTX0RPV05fU0laRQotCQl9LAotCX0sCi0KLQlbUEFSVF9XT1JLXSA9IHsKLQkJLm1lbSA9IHsKLQkJCS5zdGFydCA9IDB4MDAwMjgwMDAsCi0JCQkuc2l6ZSAgPSAweDAwMDE0MDAwCi0JCX0sCi0JCS5yZWcgPSB7Ci0JCQkuc3RhcnQgPSBSRUdJU1RFUlNfQkFTRSwKLQkJCS5zaXplICA9IFJFR0lTVEVSU19XT1JLX1NJWkUKLQkJfSwKLQl9LAotCi0JLyogV0wxMjUxIGRvZXNuJ3QgdXNlIHRoZSBEUlBXIHBhcnRpdGlvbiwgc28gd2UgZG9uJ3Qgc2V0IGl0IGhlcmUgKi8KLX07Ci0KLXN0YXRpYyBlbnVtIHdsMTJ4eF9hY3hfaW50X3JlZyB3bDEyNTFfYWN4X3JlZ190YWJsZVtBQ1hfUkVHX1RBQkxFX0xFTl0gPSB7Ci0JW0FDWF9SRUdfSU5URVJSVVBUX1RSSUddICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3NCksCi0JW0FDWF9SRUdfSU5URVJSVVBUX1RSSUdfSF0gICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3OCksCi0JW0FDWF9SRUdfSU5URVJSVVBUX01BU0tdICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5NCksCi0JW0FDWF9SRUdfSElOVF9NQVNLX1NFVF0gICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5OCksCi0JW0FDWF9SRUdfSElOVF9NQVNLX0NMUl0gICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5QyksCi0JW0FDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSXSA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDRCMCksCi0JW0FDWF9SRUdfSU5URVJSVVBUX0NMRUFSXSAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDRBNCksCi0JW0FDWF9SRUdfSU5URVJSVVBUX0FDS10gICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDRBOCksCi0JW0FDWF9SRUdfU0xWX1NPRlRfUkVTRVRdICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDAwMCksCi0JW0FDWF9SRUdfRUVfU1RBUlRdICAgICAgICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDgwQyksCi0JW0FDWF9SRUdfRUNQVV9DT05UUk9MXSAgICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDgwNCkKLX07Ci0KLXN0YXRpYyBpbnQgd2wxMjUxX3VwbG9hZF9maXJtd2FyZShzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlzdHJ1Y3Qgd2wxMnh4X3BhcnRpdGlvbl9zZXQgKnBfdGFibGUgPSB3bC0+Y2hpcC5wX3RhYmxlOwotCWludCBhZGRyLCBjaHVua19udW0sIHBhcnRpdGlvbl9saW1pdDsKLQlzaXplX3QgZndfZGF0YV9sZW47Ci0JdTggKnA7Ci0KLQkvKiB3aGFsX0Z3Q3RybF9Mb2FkRndJbWFnZVNtKCkgKi8KLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCBiZWZvcmUgZncgdXBsb2FkOiAweCV4IiwKLQkJICAgICB3bDEyeHhfcmVnX3JlYWQzMih3bCwgQ0hJUF9JRF9CKSk7Ci0KLQkvKiAxMC4wIGNoZWNrIGZpcm13YXJlIGxlbmd0aCBhbmQgc2V0IHBhcnRpdGlvbiAqLwotCWZ3X2RhdGFfbGVuID0gICh3bC0+ZndbNF0gPDwgMjQpIHwgKHdsLT5md1s1XSA8PCAxNikgfAotCQkod2wtPmZ3WzZdIDw8IDgpIHwgKHdsLT5md1s3XSk7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQk9PVCwgImZ3X2RhdGFfbGVuICV6dSBjaHVua19zaXplICVkIiwgZndfZGF0YV9sZW4sCi0JCUNIVU5LX1NJWkUpOwotCi0JaWYgKChmd19kYXRhX2xlbiAlIDQpICE9IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJmaXJtd2FyZSBsZW5ndGggbm90IG11bHRpcGxlIG9mIGZvdXIiKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jd2wxMnh4X3NldF9wYXJ0aXRpb24od2wsCi0JCQkgICAgIHBfdGFibGVbUEFSVF9ET1dOXS5tZW0uc3RhcnQsCi0JCQkgICAgIHBfdGFibGVbUEFSVF9ET1dOXS5tZW0uc2l6ZSwKLQkJCSAgICAgcF90YWJsZVtQQVJUX0RPV05dLnJlZy5zdGFydCwKLQkJCSAgICAgcF90YWJsZVtQQVJUX0RPV05dLnJlZy5zaXplKTsKLQotCS8qIDEwLjEgc2V0IHBhcnRpdGlvbiBsaW1pdCBhbmQgY2h1bmsgbnVtICovCi0JY2h1bmtfbnVtID0gMDsKLQlwYXJ0aXRpb25fbGltaXQgPSBwX3RhYmxlW1BBUlRfRE9XTl0ubWVtLnNpemU7Ci0KLQl3aGlsZSAoY2h1bmtfbnVtIDwgZndfZGF0YV9sZW4gLyBDSFVOS19TSVpFKSB7Ci0JCS8qIDEwLjIgdXBkYXRlIHBhcnRpdGlvbiwgaWYgbmVlZGVkICovCi0JCWFkZHIgPSBwX3RhYmxlW1BBUlRfRE9XTl0ubWVtLnN0YXJ0ICsKLQkJCShjaHVua19udW0gKyAyKSAqIENIVU5LX1NJWkU7Ci0JCWlmIChhZGRyID4gcGFydGl0aW9uX2xpbWl0KSB7Ci0JCQlhZGRyID0gcF90YWJsZVtQQVJUX0RPV05dLm1lbS5zdGFydCArCi0JCQkJY2h1bmtfbnVtICogQ0hVTktfU0laRTsKLQkJCXBhcnRpdGlvbl9saW1pdCA9IGNodW5rX251bSAqIENIVU5LX1NJWkUgKwotCQkJCXBfdGFibGVbUEFSVF9ET1dOXS5tZW0uc2l6ZTsKLQkJCXdsMTJ4eF9zZXRfcGFydGl0aW9uKHdsLAotCQkJCQkgICAgIGFkZHIsCi0JCQkJCSAgICAgcF90YWJsZVtQQVJUX0RPV05dLm1lbS5zaXplLAotCQkJCQkgICAgIHBfdGFibGVbUEFSVF9ET1dOXS5yZWcuc3RhcnQsCi0JCQkJCSAgICAgcF90YWJsZVtQQVJUX0RPV05dLnJlZy5zaXplKTsKLQkJfQotCi0JCS8qIDEwLjMgdXBsb2FkIHRoZSBjaHVuayAqLwotCQlhZGRyID0gcF90YWJsZVtQQVJUX0RPV05dLm1lbS5zdGFydCArIGNodW5rX251bSAqIENIVU5LX1NJWkU7Ci0JCXAgPSB3bC0+ZncgKyBGV19IRFJfU0laRSArIGNodW5rX251bSAqIENIVU5LX1NJWkU7Ci0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19CT09ULCAidXBsb2FkaW5nIGZ3IGNodW5rIDB4JXAgdG8gMHgleCIsCi0JCQkgICAgIHAsIGFkZHIpOwotCQl3bDEyeHhfc3BpX21lbV93cml0ZSh3bCwgYWRkciwgcCwgQ0hVTktfU0laRSk7Ci0KLQkJY2h1bmtfbnVtKys7Ci0JfQotCi0JLyogMTAuNCB1cGxvYWQgdGhlIGxhc3QgY2h1bmsgKi8KLQlhZGRyID0gcF90YWJsZVtQQVJUX0RPV05dLm1lbS5zdGFydCArIGNodW5rX251bSAqIENIVU5LX1NJWkU7Ci0JcCA9IHdsLT5mdyArIEZXX0hEUl9TSVpFICsgY2h1bmtfbnVtICogQ0hVTktfU0laRTsKLQl3bDEyeHhfZGVidWcoREVCVUdfQk9PVCwgInVwbG9hZGluZyBmdyBsYXN0IGNodW5rICglenUgQikgMHglcCB0byAweCV4IiwKLQkJICAgICBmd19kYXRhX2xlbiAlIENIVU5LX1NJWkUsIHAsIGFkZHIpOwotCXdsMTJ4eF9zcGlfbWVtX3dyaXRlKHdsLCBhZGRyLCBwLCBmd19kYXRhX2xlbiAlIENIVU5LX1NJWkUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjUxX3VwbG9hZF9udnMoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0Jc2l6ZV90IG52c19sZW4sIG52c19ieXRlc193cml0dGVuLCBidXJzdF9sZW47Ci0JaW50IG52c19zdGFydCwgaTsKLQl1MzIgZGVzdF9hZGRyLCB2YWw7Ci0JdTggKm52c19wdHIsICpudnM7Ci0KLQludnMgPSB3bC0+bnZzOwotCWlmIChudnMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQludnNfcHRyID0gbnZzOwotCi0JbnZzX2xlbiA9IHdsLT5udnNfbGVuOwotCW52c19zdGFydCA9IHdsLT5md19sZW47Ci0KLQkvKgotCSAqIExheW91dCBiZWZvcmUgdGhlIGFjdHVhbCBOVlMgdGFibGVzOgotCSAqIDEgYnl0ZSA6IGJ1cnN0IGxlbmd0aC4KLQkgKiAyIGJ5dGVzOiBkZXN0aW5hdGlvbiBhZGRyZXNzLgotCSAqIG4gYnl0ZXM6IGRhdGEgdG8gYnVyc3QgY29weS4KLQkgKgotCSAqIFRoaXMgaXMgZW5kZWQgYnkgYSAwIGxlbmd0aCwgdGhlbiB0aGUgTlZTIHRhYmxlcy4KLQkgKi8KLQotCXdoaWxlIChudnNfcHRyWzBdKSB7Ci0JCWJ1cnN0X2xlbiA9IG52c19wdHJbMF07Ci0JCWRlc3RfYWRkciA9IChudnNfcHRyWzFdICYgMHhmZSkgfCAoKHUzMikobnZzX3B0clsyXSA8PCA4KSk7Ci0KLQkJLyogV2UgbW92ZSBvdXIgcG9pbnRlciB0byB0aGUgZGF0YSAqLwotCQludnNfcHRyICs9IDM7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGJ1cnN0X2xlbjsgaSsrKSB7Ci0JCQl2YWwgPSAobnZzX3B0clswXSB8IChudnNfcHRyWzFdIDw8IDgpCi0JCQkgICAgICAgfCAobnZzX3B0clsyXSA8PCAxNikgfCAobnZzX3B0clszXSA8PCAyNCkpOwotCi0JCQl3bDEyeHhfZGVidWcoREVCVUdfQk9PVCwKLQkJCQkgICAgICJudnMgYnVyc3Qgd3JpdGUgMHgleDogMHgleCIsCi0JCQkJICAgICBkZXN0X2FkZHIsIHZhbCk7Ci0JCQl3bDEyeHhfbWVtX3dyaXRlMzIod2wsIGRlc3RfYWRkciwgdmFsKTsKLQotCQkJbnZzX3B0ciArPSA0OwotCQkJZGVzdF9hZGRyICs9IDQ7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFdlJ3ZlIHJlYWNoZWQgdGhlIGZpcnN0IHplcm8gbGVuZ3RoLCB0aGUgZmlyc3QgTlZTIHRhYmxlCi0JICogaXMgNyBieXRlcyBmdXJ0aGVyLgotCSAqLwotCW52c19wdHIgKz0gNzsKLQludnNfbGVuIC09IG52c19wdHIgLSBudnM7Ci0JbnZzX2xlbiA9IEFMSUdOKG52c19sZW4sIDQpOwotCi0JLyogTm93IHdlIG11c3Qgc2V0IHRoZSBwYXJ0aXRpb24gY29ycmVjdGx5ICovCi0Jd2wxMnh4X3NldF9wYXJ0aXRpb24od2wsIG52c19zdGFydCwKLQkJCSAgICAgd2wtPmNoaXAucF90YWJsZVtQQVJUX0RPV05dLm1lbS5zaXplLAotCQkJICAgICB3bC0+Y2hpcC5wX3RhYmxlW1BBUlRfRE9XTl0ucmVnLnN0YXJ0LAotCQkJICAgICB3bC0+Y2hpcC5wX3RhYmxlW1BBUlRfRE9XTl0ucmVnLnNpemUpOwotCi0JLyogQW5kIGZpbmFsbHkgd2UgdXBsb2FkIHRoZSBOVlMgdGFibGVzICovCi0JbnZzX2J5dGVzX3dyaXR0ZW4gPSAwOwotCXdoaWxlIChudnNfYnl0ZXNfd3JpdHRlbiA8IG52c19sZW4pIHsKLQkJdmFsID0gKG52c19wdHJbMF0gfCAobnZzX3B0clsxXSA8PCA4KQotCQkgICAgICAgfCAobnZzX3B0clsyXSA8PCAxNikgfCAobnZzX3B0clszXSA8PCAyNCkpOwotCi0JCXZhbCA9IGNwdV90b19sZTMyKHZhbCk7Ci0KLQkJd2wxMnh4X2RlYnVnKERFQlVHX0JPT1QsCi0JCQkgICAgICJudnMgd3JpdGUgdGFibGUgMHgleDogMHgleCIsCi0JCQkgICAgIG52c19zdGFydCwgdmFsKTsKLQkJd2wxMnh4X21lbV93cml0ZTMyKHdsLCBudnNfc3RhcnQsIHZhbCk7Ci0KLQkJbnZzX3B0ciArPSA0OwotCQludnNfYnl0ZXNfd3JpdHRlbiArPSA0OwotCQludnNfc3RhcnQgKz0gNDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bDEyNTFfYm9vdChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgcmV0ID0gMCwgbWlub3JfbWlub3JfZTJfdmVyOwotCXUzMiB0bXAsIGJvb3RfZGF0YTsKLQotCXJldCA9IHdsMTJ4eF9ib290X3NvZnRfcmVzZXQod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCS8qIDIuIHN0YXJ0IHByb2Nlc3NpbmcgTlZTIGZpbGUgKi8KLQlyZXQgPSB3bC0+Y2hpcC5vcF91cGxvYWRfbnZzKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQkvKiB3cml0ZSBmaXJtd2FyZSdzIGxhc3QgYWRkcmVzcyAoaWUuIGl0J3MgbGVuZ3RoKSB0bwotCSAqIEFDWF9FRVBST01MRVNTX0lORF9SRUcgKi8KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIEFDWF9FRVBST01MRVNTX0lORF9SRUcsIHdsLT5md19sZW4pOwotCi0JLyogNi4gcmVhZCB0aGUgRUVQUk9NIHBhcmFtZXRlcnMgKi8KLQl0bXAgPSB3bDEyeHhfcmVnX3JlYWQzMih3bCwgU0NSX1BBRDIpOwotCi0JLyogNy4gcmVhZCBib290ZGF0YSAqLwotCXdsLT5ib290X2F0dHIucmFkaW9fdHlwZSA9ICh0bXAgJiAweDAwMDBGRjAwKSA+PiA4OwotCXdsLT5ib290X2F0dHIubWFqb3IgPSAodG1wICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0JdG1wID0gd2wxMnh4X3JlZ19yZWFkMzIod2wsIFNDUl9QQUQzKTsKLQotCS8qIDguIGNoZWNrIGJvb3RkYXRhIGFuZCBjYWxsIHJlc3RhcnQgc2VxdWVuY2UgKi8KLQl3bC0+Ym9vdF9hdHRyLm1pbm9yID0gKHRtcCAmIDB4MDBGRjAwMDApID4+IDE2OwotCW1pbm9yX21pbm9yX2UyX3ZlciA9ICh0bXAgJiAweEZGMDAwMDAwKSA+PiAyNDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19CT09ULCAicmFkaW9UeXBlIDB4JXggbWFqb3JFMlZlciAweCV4ICIKLQkJICAgICAibWlub3JFMlZlciAweCV4IG1pbm9yX21pbm9yX2UyX3ZlciAweCV4IiwKLQkJICAgICB3bC0+Ym9vdF9hdHRyLnJhZGlvX3R5cGUsIHdsLT5ib290X2F0dHIubWFqb3IsCi0JCSAgICAgd2wtPmJvb3RfYXR0ci5taW5vciwgbWlub3JfbWlub3JfZTJfdmVyKTsKLQotCXJldCA9IHdsMTJ4eF9ib290X2luaXRfc2VxKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQkvKiA5LiBOVlMgcHJvY2Vzc2luZyBkb25lICovCi0JYm9vdF9kYXRhID0gd2wxMnh4X3JlZ19yZWFkMzIod2wsIEFDWF9SRUdfRUNQVV9DT05UUk9MKTsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19CT09ULCAiaGFsdCBib290X2RhdGEgMHgleCIsIGJvb3RfZGF0YSk7Ci0KLQkvKiAxMC4gY2hlY2sgdGhhdCBFQ1BVX0NPTlRST0xfSEFMVCBiaXRzIGFyZSBzZXQgaW4KLQkgKiBwV2hhbEJ1cy0+dUJvb3REYXRhIGFuZCBzdGFydCB1cGxvYWRpbmcgZmlybXdhcmUKLQkgKi8KLQlpZiAoKGJvb3RfZGF0YSAmIEVDUFVfQ09OVFJPTF9IQUxUKSA9PSAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigiYm9vdCBmYWlsZWQsIEVDUFVfQ09OVFJPTF9IQUxUIG5vdCBzZXQiKTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gd2wtPmNoaXAub3BfdXBsb2FkX2Z3KHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQkvKiAxMC41IHN0YXJ0IGZpcm13YXJlICovCi0JcmV0ID0gd2wxMnh4X2Jvb3RfcnVuX2Zpcm13YXJlKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBHZXQgYW5kIHNhdmUgdGhlIGZpcm13YXJlIHZlcnNpb24gKi8KLQl3bDEyeHhfYWN4X2Z3X3ZlcnNpb24od2wsIHdsLT5jaGlwLmZ3X3Zlciwgc2l6ZW9mKHdsLT5jaGlwLmZ3X3ZlcikpOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3bDEyNTFfbWVtX2NmZyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlzdHJ1Y3Qgd2wxMjUxX2FjeF9jb25maWdfbWVtb3J5IG1lbV9jb25mOwotCWludCByZXQsIGk7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAid2wxMjUxIG1lbSBjZmciKTsKLQotCS8qIG1lbW9yeSBjb25maWcgKi8KLQltZW1fY29uZi5tZW1fY29uZmlnLm51bV9zdGF0aW9ucyA9IGNwdV90b19sZTE2KERFRkFVTFRfTlVNX1NUQVRJT05TKTsKLQltZW1fY29uZi5tZW1fY29uZmlnLnJ4X21lbV9ibG9ja19udW0gPSAzNTsKLQltZW1fY29uZi5tZW1fY29uZmlnLnR4X21pbl9tZW1fYmxvY2tfbnVtID0gNjQ7Ci0JbWVtX2NvbmYubWVtX2NvbmZpZy5udW1fdHhfcXVldWVzID0gTUFYX1RYX1FVRVVFUzsKLQltZW1fY29uZi5tZW1fY29uZmlnLmhvc3RfaWZfb3B0aW9ucyA9IEhPU1RJRl9QS1RfUklORzsKLQltZW1fY29uZi5tZW1fY29uZmlnLm51bV9zc2lkX3Byb2ZpbGVzID0gMTsKLQltZW1fY29uZi5tZW1fY29uZmlnLmRlYnVnX2J1ZmZlcl9zaXplID0KLQkJY3B1X3RvX2xlMTYoVFJBQ0VfQlVGRkVSX01BWF9TSVpFKTsKLQotCS8qIFJYIHF1ZXVlIGNvbmZpZyAqLwotCW1lbV9jb25mLnJ4X3F1ZXVlX2NvbmZpZy5kbWFfYWRkcmVzcyA9IDA7Ci0JbWVtX2NvbmYucnhfcXVldWVfY29uZmlnLm51bV9kZXNjcyA9IEFDWF9SWF9ERVNDX0RFRjsKLQltZW1fY29uZi5yeF9xdWV1ZV9jb25maWcucHJpb3JpdHkgPSBERUZBVUxUX1JYUV9QUklPUklUWTsKLQltZW1fY29uZi5yeF9xdWV1ZV9jb25maWcudHlwZSA9IERFRkFVTFRfUlhRX1RZUEU7Ci0KLQkvKiBUWCBxdWV1ZSBjb25maWcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCW1lbV9jb25mLnR4X3F1ZXVlX2NvbmZpZ1tpXS5udW1fZGVzY3MgPSBBQ1hfVFhfREVTQ19ERUY7Ci0JCW1lbV9jb25mLnR4X3F1ZXVlX2NvbmZpZ1tpXS5hdHRyaWJ1dGVzID0gaTsKLQl9Ci0KLQltZW1fY29uZi5oZWFkZXIuaWQgPSBBQ1hfTUVNX0NGRzsKLQltZW1fY29uZi5oZWFkZXIubGVuID0gc2l6ZW9mKHN0cnVjdCB3bDEyNTFfYWN4X2NvbmZpZ19tZW1vcnkpIC0KLQkJc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQltZW1fY29uZi5oZWFkZXIubGVuIC09Ci0JCShNQVhfVFhfUVVFVUVfQ09ORklHUyAtIG1lbV9jb25mLm1lbV9jb25maWcubnVtX3R4X3F1ZXVlcykgKgotCQlzaXplb2Yoc3RydWN0IHdsMTI1MV9hY3hfdHhfcXVldWVfY29uZmlnKTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmbWVtX2NvbmYsCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCB3bDEyNTFfYWN4X2NvbmZpZ19tZW1vcnkpKTsKLQlpZiAocmV0IDwgMCkKLQkJd2wxMnh4X3dhcm5pbmcoIndsMTI1MSBtZW0gY29uZmlnIGZhaWxlZDogJWQiLCByZXQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3bDEyNTFfaHdfaW5pdF9tZW1fY29uZmlnKHN0cnVjdCB3bDEyeHggKndsKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSB3bDEyNTFfbWVtX2NmZyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQl3bC0+dGFyZ2V0X21lbV9tYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2wxMjUxX2FjeF9tZW1fbWFwKSwKLQkJCQkJICBHRlBfS0VSTkVMKTsKLQlpZiAoIXdsLT50YXJnZXRfbWVtX21hcCkgewotCQl3bDEyeHhfZXJyb3IoImNvdWxkbid0IGFsbG9jYXRlIHRhcmdldCBtZW1vcnkgbWFwIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIHdlIG5vdyBhc2sgZm9yIHRoZSBmaXJtd2FyZSBidWlsdCBtZW1vcnkgbWFwICovCi0JcmV0ID0gd2wxMnh4X2FjeF9tZW1fbWFwKHdsLCB3bC0+dGFyZ2V0X21lbV9tYXAsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgd2wxMjUxX2FjeF9tZW1fbWFwKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJjb3VsZG4ndCByZXRyaWV2ZSBmaXJtd2FyZSBtZW1vcnkgbWFwIik7Ci0JCWtmcmVlKHdsLT50YXJnZXRfbWVtX21hcCk7Ci0JCXdsLT50YXJnZXRfbWVtX21hcCA9IE5VTEw7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTI1MV9zZXRfZWNwdV9jdHJsKHN0cnVjdCB3bDEyeHggKndsLCB1MzIgZmxhZykKLXsKLQl1MzIgY3B1X2N0cmw7Ci0KLQkvKiAxMC41LjAgcnVuIHRoZSBmaXJtd2FyZSAoSSkgKi8KLQljcHVfY3RybCA9IHdsMTJ4eF9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCk7Ci0KLQkvKiAxMC41LjEgcnVuIHRoZSBmaXJtd2FyZSAoSUkpICovCi0JY3B1X2N0cmwgJj0gfmZsYWc7Ci0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCwgY3B1X2N0cmwpOwotfQotCi1zdGF0aWMgdm9pZCB3bDEyNTFfdGFyZ2V0X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyeHggKndsKQotewotCS8qIEVuYWJsZSB0YXJnZXQncyBpbnRlcnJ1cHRzICovCi0Jd2wtPmludHJfbWFzayA9IFdMMTI1MV9BQ1hfSU5UUl9SWDBfREFUQSB8Ci0JCVdMMTI1MV9BQ1hfSU5UUl9SWDFfREFUQSB8Ci0JCVdMMTI1MV9BQ1hfSU5UUl9UWF9SRVNVTFQgfAotCQlXTDEyNTFfQUNYX0lOVFJfRVZFTlRfQSB8Ci0JCVdMMTI1MV9BQ1hfSU5UUl9FVkVOVF9CIHwKLQkJV0wxMjUxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEU7Ci0Jd2wxMnh4X2Jvb3RfdGFyZ2V0X2VuYWJsZV9pbnRlcnJ1cHRzKHdsKTsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjUxX2lycV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQl1MzIgaW50cjsKLQlzdHJ1Y3Qgd2wxMnh4ICp3bCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2wxMnh4LCBpcnFfd29yayk7Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0lSUSwgIklSUSB3b3JrIik7Ci0KLQlpZiAod2wtPnN0YXRlID09IFdMMTJYWF9TVEFURV9PRkYpCi0JCWdvdG8gb3V0OwotCi0Jd2wxMnh4X3BzX2VscF93YWtldXAod2wpOwotCi0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLCBXTDEyNTFfQUNYX0lOVFJfQUxMKTsKLQotCWludHIgPSB3bDEyeHhfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfQ0xFQVIpOwotCXdsMTJ4eF9kZWJ1ZyhERUJVR19JUlEsICJpbnRyOiAweCV4IiwgaW50cik7Ci0KLQlpZiAod2wtPmRhdGFfcGF0aCkgewotCQl3bDEyeHhfc3BpX21lbV9yZWFkKHdsLCB3bC0+ZGF0YV9wYXRoLT5yeF9jb250cm9sX2FkZHIsCi0JCQkJICAgICZ3bC0+cnhfY291bnRlciwgc2l6ZW9mKHUzMikpOwotCi0JCS8qIFdlIGhhbmRsZSBhIGZybXdhcmUgYnVnIGhlcmUgKi8KLQkJc3dpdGNoICgod2wtPnJ4X2NvdW50ZXIgLSB3bC0+cnhfaGFuZGxlZCkgJiAweGYpIHsKLQkJY2FzZSAwOgotCQkJd2wxMnh4X2RlYnVnKERFQlVHX0lSUSwgIlJYOiBGVyBhbmQgaG9zdCBpbiBzeW5jIik7Ci0JCQlpbnRyICY9IH5XTDEyNTFfQUNYX0lOVFJfUlgwX0RBVEE7Ci0JCQlpbnRyICY9IH5XTDEyNTFfQUNYX0lOVFJfUlgxX0RBVEE7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJd2wxMnh4X2RlYnVnKERFQlVHX0lSUSwgIlJYOiBGVyArMSIpOwotCQkJaW50ciB8PSBXTDEyNTFfQUNYX0lOVFJfUlgwX0RBVEE7Ci0JCQlpbnRyICY9IH5XTDEyNTFfQUNYX0lOVFJfUlgxX0RBVEE7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJd2wxMnh4X2RlYnVnKERFQlVHX0lSUSwgIlJYOiBGVyArMiIpOwotCQkJaW50ciB8PSBXTDEyNTFfQUNYX0lOVFJfUlgwX0RBVEE7Ci0JCQlpbnRyIHw9IFdMMTI1MV9BQ1hfSU5UUl9SWDFfREFUQTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJd2wxMnh4X3dhcm5pbmcoIlJYOiBGVyBhbmQgaG9zdCBvdXQgb2Ygc3luYzogJWQiLAotCQkJCSAgICAgICB3bC0+cnhfY291bnRlciAtIHdsLT5yeF9oYW5kbGVkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJd2wtPnJ4X2hhbmRsZWQgPSB3bC0+cnhfY291bnRlcjsKLQotCi0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19JUlEsICJSWCBjb3VudGVyOiAlZCIsIHdsLT5yeF9jb3VudGVyKTsKLQl9Ci0KLQlpbnRyICY9IHdsLT5pbnRyX21hc2s7Ci0KLQlpZiAoaW50ciA9PSAwKSB7Ci0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19JUlEsICJJTlRSIGlzIDAiKTsKLQkJd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLAotCQkJCSAgIH4od2wtPmludHJfbWFzaykpOwotCi0JCWdvdG8gb3V0X3NsZWVwOwotCX0KLQotCWlmIChpbnRyICYgV0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBKSB7Ci0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNTFfQUNYX0lOVFJfUlgwX0RBVEEiKTsKLQkJd2wxMnh4X3J4KHdsKTsKLQl9Ci0KLQlpZiAoaW50ciAmIFdMMTI1MV9BQ1hfSU5UUl9SWDFfREFUQSkgewotCQl3bDEyeHhfZGVidWcoREVCVUdfSVJRLCAiV0wxMjUxX0FDWF9JTlRSX1JYMV9EQVRBIik7Ci0JCXdsMTJ4eF9yeCh3bCk7Ci0JfQotCi0JaWYgKGludHIgJiBXTDEyNTFfQUNYX0lOVFJfVFhfUkVTVUxUKSB7Ci0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNTFfQUNYX0lOVFJfVFhfUkVTVUxUIik7Ci0JCXdsMTJ4eF90eF9jb21wbGV0ZSh3bCk7Ci0JfQotCi0JaWYgKGludHIgJiAoV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0EgfCBXTDEyNTFfQUNYX0lOVFJfRVZFTlRfQikpIHsKLQkJd2wxMnh4X2RlYnVnKERFQlVHX0lSUSwgIldMMTI1MV9BQ1hfSU5UUl9FVkVOVCAoMHgleCkiLCBpbnRyKTsKLQkJaWYgKGludHIgJiBXTDEyNTFfQUNYX0lOVFJfRVZFTlRfQSkKLQkJCXdsMTJ4eF9ldmVudF9oYW5kbGUod2wsIDApOwotCQllbHNlCi0JCQl3bDEyeHhfZXZlbnRfaGFuZGxlKHdsLCAxKTsKLQl9Ci0KLQlpZiAoaW50ciAmIFdMMTI1MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFKQotCQl3bDEyeHhfZGVidWcoREVCVUdfSVJRLCAiV0wxMjUxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUiKTsKLQotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywgfih3bC0+aW50cl9tYXNrKSk7Ci0KLW91dF9zbGVlcDoKLQl3bDEyeHhfcHNfZWxwX3NsZWVwKHdsKTsKLW91dDoKLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjUxX2h3X2luaXRfdHhxX2ZpbGwodTggcWlkLAotCQkJCSAgIHN0cnVjdCBhY3hfdHhfcXVldWVfcW9zX2NvbmZpZyAqY29uZmlnLAotCQkJCSAgIHUzMiBudW1fYmxvY2tzKQotewotCWNvbmZpZy0+cWlkID0gcWlkOwotCi0Jc3dpdGNoIChxaWQpIHsKLQljYXNlIFFPU19BQ19CRToKLQkJY29uZmlnLT5oaWdoX3RocmVzaG9sZCA9Ci0JCQkoUU9TX1RYX0hJR0hfQkVfREVGICogbnVtX2Jsb2NrcykgLyAxMDA7Ci0JCWNvbmZpZy0+bG93X3RocmVzaG9sZCA9Ci0JCQkoUU9TX1RYX0xPV19CRV9ERUYgKiBudW1fYmxvY2tzKSAvIDEwMDsKLQkJYnJlYWs7Ci0JY2FzZSBRT1NfQUNfQks6Ci0JCWNvbmZpZy0+aGlnaF90aHJlc2hvbGQgPQotCQkJKFFPU19UWF9ISUdIX0JLX0RFRiAqIG51bV9ibG9ja3MpIC8gMTAwOwotCQljb25maWctPmxvd190aHJlc2hvbGQgPQotCQkJKFFPU19UWF9MT1dfQktfREVGICogbnVtX2Jsb2NrcykgLyAxMDA7Ci0JCWJyZWFrOwotCWNhc2UgUU9TX0FDX1ZJOgotCQljb25maWctPmhpZ2hfdGhyZXNob2xkID0KLQkJCShRT1NfVFhfSElHSF9WSV9ERUYgKiBudW1fYmxvY2tzKSAvIDEwMDsKLQkJY29uZmlnLT5sb3dfdGhyZXNob2xkID0KLQkJCShRT1NfVFhfTE9XX1ZJX0RFRiAqIG51bV9ibG9ja3MpIC8gMTAwOwotCQlicmVhazsKLQljYXNlIFFPU19BQ19WTzoKLQkJY29uZmlnLT5oaWdoX3RocmVzaG9sZCA9Ci0JCQkoUU9TX1RYX0hJR0hfVk9fREVGICogbnVtX2Jsb2NrcykgLyAxMDA7Ci0JCWNvbmZpZy0+bG93X3RocmVzaG9sZCA9Ci0JCQkoUU9TX1RYX0xPV19WT19ERUYgKiBudW1fYmxvY2tzKSAvIDEwMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJd2wxMnh4X2Vycm9yKCJJbnZhbGlkIFRYIHF1ZXVlIGlkOiAlZCIsIHFpZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsMTI1MV9od19pbml0X3R4X3F1ZXVlX2NvbmZpZyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlzdHJ1Y3QgYWN4X3R4X3F1ZXVlX3Fvc19jb25maWcgY29uZmlnOwotCXN0cnVjdCB3bDEyNTFfYWN4X21lbV9tYXAgKndsX21lbV9tYXAgPSB3bC0+dGFyZ2V0X21lbV9tYXA7Ci0JaW50IHJldCwgaTsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggdHggcXVldWUgY29uZmlnIik7Ci0KLQljb25maWcuaGVhZGVyLmlkID0gQUNYX1RYX1FVRVVFX0NGRzsKLQljb25maWcuaGVhZGVyLmxlbiA9IHNpemVvZihzdHJ1Y3QgYWN4X3R4X3F1ZXVlX3Fvc19jb25maWcpIC0KLQkJc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX09GX0FDOyBpKyspIHsKLQkJcmV0ID0gd2wxMjUxX2h3X2luaXRfdHhxX2ZpbGwoaSwgJmNvbmZpZywKLQkJCQkJICAgICAgd2xfbWVtX21hcC0+bnVtX3R4X21lbV9ibG9ja3MpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJcmV0ID0gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZjb25maWcsIHNpemVvZihjb25maWcpKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsMTI1MV9od19pbml0X2RhdGFfcGF0aF9jb25maWcoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JaW50IHJldDsKLQotCS8qIGFza2luZyBmb3IgdGhlIGRhdGEgcGF0aCBwYXJhbWV0ZXJzICovCi0Jd2wtPmRhdGFfcGF0aCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3hfZGF0YV9wYXRoX3BhcmFtc19yZXNwKSwKLQkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIXdsLT5kYXRhX3BhdGgpIHsKLQkJd2wxMnh4X2Vycm9yKCJDb3VsZG50IGFsbG9jYXRlIGRhdGEgcGF0aCBwYXJhbWV0ZXJzIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldCA9IHdsMTJ4eF9hY3hfZGF0YV9wYXRoX3BhcmFtcyh3bCwgd2wtPmRhdGFfcGF0aCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJa2ZyZWUod2wtPmRhdGFfcGF0aCk7Ci0JCXdsLT5kYXRhX3BhdGggPSBOVUxMOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsMTI1MV9od19pbml0KHN0cnVjdCB3bDEyeHggKndsKQotewotCXN0cnVjdCB3bDEyNTFfYWN4X21lbV9tYXAgKndsX21lbV9tYXA7Ci0JaW50IHJldDsKLQotCXJldCA9IHdsMTJ4eF9od19pbml0X2h3ZW5jX2NvbmZpZyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBUZW1wbGF0ZSBzZXR0aW5ncyAqLwotCXJldCA9IHdsMTJ4eF9od19pbml0X3RlbXBsYXRlc19jb25maWcod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogRGVmYXVsdCBtZW1vcnkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHdsMTI1MV9od19pbml0X21lbV9jb25maWcod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogRGVmYXVsdCBkYXRhIHBhdGggY29uZmlndXJhdGlvbiAgKi8KLQlyZXQgPSB3bDEyNTFfaHdfaW5pdF9kYXRhX3BhdGhfY29uZmlnKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9tZW1tYXA7Ci0KLQkvKiBSWCBjb25maWcgKi8KLQlyZXQgPSB3bDEyeHhfaHdfaW5pdF9yeF9jb25maWcod2wsCi0JCQkJICAgICAgIFJYX0NGR19QUk9NSVNDVU9VUyB8IFJYX0NGR19UU0YsCi0JCQkJICAgICAgIFJYX0ZJTFRFUl9PUFRJT05fREVGKTsKLQkvKiBSWF9DT05GSUdfT1BUSU9OX0FOWV9EU1RfQU5ZX0JTUywKLQkgICBSWF9GSUxURVJfT1BUSU9OX0ZJTFRFUl9BTEwpOyAqLwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX2RhdGFfcGF0aDsKLQotCS8qIFRYIHF1ZXVlcyBjb25maWcgKi8KLQlyZXQgPSB3bDEyNTFfaHdfaW5pdF90eF9xdWV1ZV9jb25maWcod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX2RhdGFfcGF0aDsKLQotCS8qIFBIWSBsYXllciBjb25maWcgKi8KLQlyZXQgPSB3bDEyeHhfaHdfaW5pdF9waHlfY29uZmlnKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9kYXRhX3BhdGg7Ci0KLQkvKiBCZWFjb24gZmlsdGVyaW5nICovCi0JcmV0ID0gd2wxMnh4X2h3X2luaXRfYmVhY29uX2ZpbHRlcih3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfZGF0YV9wYXRoOwotCi0JLyogQmx1ZXRvb3RoIFdMQU4gY29leGlzdGVuY2UgKi8KLQlyZXQgPSB3bDEyeHhfaHdfaW5pdF9wdGEod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX2RhdGFfcGF0aDsKLQotCS8qIEVuZXJneSBkZXRlY3Rpb24gKi8KLQlyZXQgPSB3bDEyeHhfaHdfaW5pdF9lbmVyZ3lfZGV0ZWN0aW9uKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9kYXRhX3BhdGg7Ci0KLQkvKiBCZWFjb25zIGFuZCBib3JhZGNhc3Qgc2V0dGluZ3MgKi8KLQlyZXQgPSB3bDEyeHhfaHdfaW5pdF9iZWFjb25fYnJvYWRjYXN0KHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9kYXRhX3BhdGg7Ci0KLQkvKiBFbmFibGUgZGF0YSBwYXRoICovCi0JcmV0ID0gd2wxMnh4X2NtZF9kYXRhX3BhdGgod2wsIHdsLT5jaGFubmVsLCAxKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9kYXRhX3BhdGg7Ci0KLQkvKiBEZWZhdWx0IHBvd2VyIHN0YXRlICovCi0JcmV0ID0gd2wxMnh4X2h3X2luaXRfcG93ZXJfYXV0aCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfZGF0YV9wYXRoOwotCi0Jd2xfbWVtX21hcCA9IHdsLT50YXJnZXRfbWVtX21hcDsKLQl3bDEyeHhfaW5mbygiJWQgdHggYmxvY2tzIGF0IDB4JXgsICVkIHJ4IGJsb2NrcyBhdCAweCV4IiwKLQkJICAgIHdsX21lbV9tYXAtPm51bV90eF9tZW1fYmxvY2tzLAotCQkgICAgd2wtPmRhdGFfcGF0aC0+dHhfY29udHJvbF9hZGRyLAotCQkgICAgd2xfbWVtX21hcC0+bnVtX3J4X21lbV9ibG9ja3MsCi0JCSAgICB3bC0+ZGF0YV9wYXRoLT5yeF9jb250cm9sX2FkZHIpOwotCi0JcmV0dXJuIDA7Ci0KLSBvdXRfZnJlZV9kYXRhX3BhdGg6Ci0Ja2ZyZWUod2wtPmRhdGFfcGF0aCk7Ci0KLSBvdXRfZnJlZV9tZW1tYXA6Ci0Ja2ZyZWUod2wtPnRhcmdldF9tZW1fbWFwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjUxX3BsdF9pbml0KHN0cnVjdCB3bDEyeHggKndsKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSB3bDEyNTFfaHdfaW5pdF9tZW1fY29uZmlnKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfZGF0YV9wYXRoKHdsLCB3bC0+Y2hhbm5lbCwgMSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB3bDEyNTFfc2V0dXAoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JLyogRklYTUU6IElzIGl0IGJldHRlciB0byB1c2Ugc3RybmNweSBoZXJlIG9yIGlzIHRoaXMgb2s/ICovCi0Jd2wtPmNoaXAuZndfZmlsZW5hbWUgPSBXTDEyNTFfRldfTkFNRTsKLQl3bC0+Y2hpcC5udnNfZmlsZW5hbWUgPSBXTDEyNTFfTlZTX05BTUU7Ci0KLQkvKiBOb3cgd2Uga25vdyB3aGF0IGNoaXAgd2UncmUgdXNpbmcsIHNvIGFkanVzdCB0aGUgcG93ZXIgb24gc2xlZXAKLQkgKiB0aW1lIGFjY29yZGluZ2x5ICovCi0Jd2wtPmNoaXAucG93ZXJfb25fc2xlZXAgPSBXTDEyNTFfUE9XRVJfT05fU0xFRVA7Ci0KLQl3bC0+Y2hpcC5pbnRyX2NtZF9jb21wbGV0ZSA9IFdMMTI1MV9BQ1hfSU5UUl9DTURfQ09NUExFVEU7Ci0Jd2wtPmNoaXAuaW50cl9pbml0X2NvbXBsZXRlID0gV0wxMjUxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEU7Ci0KLQl3bC0+Y2hpcC5vcF91cGxvYWRfbnZzID0gd2wxMjUxX3VwbG9hZF9udnM7Ci0Jd2wtPmNoaXAub3BfdXBsb2FkX2Z3ID0gd2wxMjUxX3VwbG9hZF9maXJtd2FyZTsKLQl3bC0+Y2hpcC5vcF9ib290ID0gd2wxMjUxX2Jvb3Q7Ci0Jd2wtPmNoaXAub3Bfc2V0X2VjcHVfY3RybCA9IHdsMTI1MV9zZXRfZWNwdV9jdHJsOwotCXdsLT5jaGlwLm9wX3RhcmdldF9lbmFibGVfaW50ZXJydXB0cyA9IHdsMTI1MV90YXJnZXRfZW5hYmxlX2ludGVycnVwdHM7Ci0Jd2wtPmNoaXAub3BfaHdfaW5pdCA9IHdsMTI1MV9od19pbml0OwotCXdsLT5jaGlwLm9wX3BsdF9pbml0ID0gd2wxMjUxX3BsdF9pbml0OwotCi0Jd2wtPmNoaXAucF90YWJsZSA9IHdsMTI1MV9wYXJ0X3RhYmxlOwotCXdsLT5jaGlwLmFjeF9yZWdfdGFibGUgPSB3bDEyNTFfYWN4X3JlZ190YWJsZTsKLQotCUlOSVRfV09SSygmd2wtPmlycV93b3JrLCB3bDEyNTFfaXJxX3dvcmspOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MS5oCmluZGV4IDFmNGE0NDMuLjk5OGU0YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxLmgKQEAgLTEsNyArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KICAqCkBAIC0yNCwxNDIgKzI1LDQwMCBAQAogI2lmbmRlZiBfX1dMMTI1MV9IX18KICNkZWZpbmUgX19XTDEyNTFfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAotI2luY2x1ZGUgIndsMTJ4eC5oIgotI2luY2x1ZGUgImFjeC5oIgorI2RlZmluZSBEUklWRVJfTkFNRSAid2wxMjUxIgorI2RlZmluZSBEUklWRVJfUFJFRklYIERSSVZFUl9OQU1FICI6ICIKKworZW51bSB7CisJREVCVUdfTk9ORQk9IDAsCisJREVCVUdfSVJRCT0gQklUKDApLAorCURFQlVHX1NQSQk9IEJJVCgxKSwKKwlERUJVR19CT09UCT0gQklUKDIpLAorCURFQlVHX01BSUxCT1gJPSBCSVQoMyksCisJREVCVUdfTkVUTElOSwk9IEJJVCg0KSwKKwlERUJVR19FVkVOVAk9IEJJVCg1KSwKKwlERUJVR19UWAk9IEJJVCg2KSwKKwlERUJVR19SWAk9IEJJVCg3KSwKKwlERUJVR19TQ0FOCT0gQklUKDgpLAorCURFQlVHX0NSWVBUCT0gQklUKDkpLAorCURFQlVHX1BTTQk9IEJJVCgxMCksCisJREVCVUdfTUFDODAyMTEJPSBCSVQoMTEpLAorCURFQlVHX0NNRAk9IEJJVCgxMiksCisJREVCVUdfQUNYCT0gQklUKDEzKSwKKwlERUJVR19BTEwJPSB+MCwKK307CisKKyNkZWZpbmUgREVCVUdfTEVWRUwgKERFQlVHX05PTkUpCisKKyNkZWZpbmUgREVCVUdfRFVNUF9MSU1JVCAxMDI0CisKKyNkZWZpbmUgd2wxMjUxX2Vycm9yKGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9QUkVGSVggIkVSUk9SICIgZm10ICJcbiIsICMjYXJnKQorCisjZGVmaW5lIHdsMTI1MV93YXJuaW5nKGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfUFJFRklYICJXQVJOSU5HICIgZm10ICJcbiIsICMjYXJnKQorCisjZGVmaW5lIHdsMTI1MV9ub3RpY2UoZm10LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKQorCisjZGVmaW5lIHdsMTI1MV9pbmZvKGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX1BSRUZJWCBmbXQgIlxuIiwgIyNhcmcpCisKKyNkZWZpbmUgd2wxMjUxX2RlYnVnKGxldmVsLCBmbXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAobGV2ZWwgJiBERUJVR19MRVZFTCkgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX1BSRUZJWCBmbXQgIlxuIiwgIyNhcmcpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSB3bDEyNTFfZHVtcChsZXZlbCwgcHJlZml4LCBidWYsIGxlbikJXAorCWRvIHsgXAorCQlpZiAobGV2ZWwgJiBERUJVR19MRVZFTCkgXAorCQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgRFJJVkVSX1BSRUZJWCBwcmVmaXgsIFwKKwkJCQkgICAgICAgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwJXAorCQkJCSAgICAgICBidWYsCQkJCVwKKwkJCQkgICAgICAgbWluX3Qoc2l6ZV90LCBsZW4sIERFQlVHX0RVTVBfTElNSVQpLCBcCisJCQkJICAgICAgIDApOwkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSB3bDEyNTFfZHVtcF9hc2NpaShsZXZlbCwgcHJlZml4LCBidWYsIGxlbikJXAorCWRvIHsgXAorCQlpZiAobGV2ZWwgJiBERUJVR19MRVZFTCkgXAorCQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgRFJJVkVSX1BSRUZJWCBwcmVmaXgsIFwKKwkJCQkgICAgICAgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwJXAorCQkJCSAgICAgICBidWYsCQkJCVwKKwkJCQkgICAgICAgbWluX3Qoc2l6ZV90LCBsZW4sIERFQlVHX0RVTVBfTElNSVQpLCBcCisJCQkJICAgICAgIHRydWUpOwkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBXTDEyNTFfREVGQVVMVF9SWF9DT05GSUcgKENGR19VTklfRklMVEVSX0VOIHwJXAorCQkJCSAgQ0ZHX0JTU0lEX0ZJTFRFUl9FTikKKworI2RlZmluZSBXTDEyNTFfREVGQVVMVF9SWF9GSUxURVIgKENGR19SWF9QUlNQX0VOIHwgIFwKKwkJCQkgIENGR19SWF9NR01UX0VOIHwgIFwKKwkJCQkgIENGR19SWF9EQVRBX0VOIHwgIFwKKwkJCQkgIENGR19SWF9DVExfRU4gfCAgIFwKKwkJCQkgIENGR19SWF9CQ05fRU4gfCAgIFwKKwkJCQkgIENGR19SWF9BVVRIX0VOIHwgIFwKKwkJCQkgIENGR19SWF9BU1NPQ19FTikKKworI2RlZmluZSBXTDEyNTFfQlVTWV9XT1JEX0xFTiA4CisKK3N0cnVjdCBib290X2F0dHIgeworCXUzMiByYWRpb190eXBlOworCXU4IG1hY19jbG9jazsKKwl1OCBhcm1fY2xvY2s7CisJaW50IGZpcm13YXJlX2RlYnVnOworCXUzMiBtaW5vcjsKKwl1MzIgbWFqb3I7CisJdTMyIGJ1Z2ZpeDsKK307CisKK2VudW0gd2wxMjUxX3N0YXRlIHsKKwlXTDEyNTFfU1RBVEVfT0ZGLAorCVdMMTI1MV9TVEFURV9PTiwKKwlXTDEyNTFfU1RBVEVfUExULAorfTsKKworZW51bSB3bDEyNTFfcGFydGl0aW9uX3R5cGUgeworCVBBUlRfRE9XTiwKKwlQQVJUX1dPUkssCisJUEFSVF9EUlBXLAorCisJUEFSVF9UQUJMRV9MRU4KK307CisKK3N0cnVjdCB3bDEyNTFfcGFydGl0aW9uIHsKKwl1MzIgc2l6ZTsKKwl1MzIgc3RhcnQ7Cit9OworCitzdHJ1Y3Qgd2wxMjUxX3BhcnRpdGlvbl9zZXQgeworCXN0cnVjdCB3bDEyNTFfcGFydGl0aW9uIG1lbTsKKwlzdHJ1Y3Qgd2wxMjUxX3BhcnRpdGlvbiByZWc7Cit9OworCitzdHJ1Y3Qgd2wxMjUxOworCitzdHJ1Y3Qgd2wxMjUxX3N0YXRzIHsKKwlzdHJ1Y3QgYWN4X3N0YXRpc3RpY3MgKmZ3X3N0YXRzOworCXVuc2lnbmVkIGxvbmcgZndfc3RhdHNfdXBkYXRlOworCisJdW5zaWduZWQgaW50IHJldHJ5X2NvdW50OworCXVuc2lnbmVkIGludCBleGNlc3NpdmVfcmV0cmllczsKK307CisKK3N0cnVjdCB3bDEyNTFfZGVidWdmcyB7CisJc3RydWN0IGRlbnRyeSAqcm9vdGRpcjsKKwlzdHJ1Y3QgZGVudHJ5ICpmd19zdGF0aXN0aWNzOworCisJc3RydWN0IGRlbnRyeSAqdHhfaW50ZXJuYWxfZGVzY19vdmVyZmxvdzsKKworCXN0cnVjdCBkZW50cnkgKnJ4X291dF9vZl9tZW07CisJc3RydWN0IGRlbnRyeSAqcnhfaGRyX292ZXJmbG93OworCXN0cnVjdCBkZW50cnkgKnJ4X2h3X3N0dWNrOworCXN0cnVjdCBkZW50cnkgKnJ4X2Ryb3BwZWQ7CisJc3RydWN0IGRlbnRyeSAqcnhfZmNzX2VycjsKKwlzdHJ1Y3QgZGVudHJ5ICpyeF94ZnJfaGludF90cmlnOworCXN0cnVjdCBkZW50cnkgKnJ4X3BhdGhfcmVzZXQ7CisJc3RydWN0IGRlbnRyeSAqcnhfcmVzZXRfY291bnRlcjsKKworCXN0cnVjdCBkZW50cnkgKmRtYV9yeF9yZXF1ZXN0ZWQ7CisJc3RydWN0IGRlbnRyeSAqZG1hX3J4X2Vycm9yczsKKwlzdHJ1Y3QgZGVudHJ5ICpkbWFfdHhfcmVxdWVzdGVkOworCXN0cnVjdCBkZW50cnkgKmRtYV90eF9lcnJvcnM7CisKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfY21kX2NtcGx0OworCXN0cnVjdCBkZW50cnkgKmlzcl9maXFzOworCXN0cnVjdCBkZW50cnkgKmlzcl9yeF9oZWFkZXJzOworCXN0cnVjdCBkZW50cnkgKmlzcl9yeF9tZW1fb3ZlcmZsb3c7CisJc3RydWN0IGRlbnRyeSAqaXNyX3J4X3JkeXM7CisJc3RydWN0IGRlbnRyeSAqaXNyX2lycXM7CisJc3RydWN0IGRlbnRyeSAqaXNyX3R4X3Byb2NzOworCXN0cnVjdCBkZW50cnkgKmlzcl9kZWNyeXB0X2RvbmU7CisJc3RydWN0IGRlbnRyeSAqaXNyX2RtYTBfZG9uZTsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfZG1hMV9kb25lOworCXN0cnVjdCBkZW50cnkgKmlzcl90eF9leGNoX2NvbXBsZXRlOworCXN0cnVjdCBkZW50cnkgKmlzcl9jb21tYW5kczsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfcnhfcHJvY3M7CisJc3RydWN0IGRlbnRyeSAqaXNyX2h3X3BtX21vZGVfY2hhbmdlczsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfaG9zdF9hY2tub3dsZWRnZXM7CisJc3RydWN0IGRlbnRyeSAqaXNyX3BjaV9wbTsKKwlzdHJ1Y3QgZGVudHJ5ICppc3Jfd2FrZXVwczsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfbG93X3Jzc2k7CisKKwlzdHJ1Y3QgZGVudHJ5ICp3ZXBfYWRkcl9rZXlfY291bnQ7CisJc3RydWN0IGRlbnRyeSAqd2VwX2RlZmF1bHRfa2V5X2NvdW50OworCS8qIHNraXBwaW5nIHdlcC5yZXNlcnZlZCAqLworCXN0cnVjdCBkZW50cnkgKndlcF9rZXlfbm90X2ZvdW5kOworCXN0cnVjdCBkZW50cnkgKndlcF9kZWNyeXB0X2ZhaWw7CisJc3RydWN0IGRlbnRyeSAqd2VwX3BhY2tldHM7CisJc3RydWN0IGRlbnRyeSAqd2VwX2ludGVycnVwdDsKKworCXN0cnVjdCBkZW50cnkgKnB3cl9wc19lbnRlcjsKKwlzdHJ1Y3QgZGVudHJ5ICpwd3JfZWxwX2VudGVyOworCXN0cnVjdCBkZW50cnkgKnB3cl9taXNzaW5nX2JjbnM7CisJc3RydWN0IGRlbnRyeSAqcHdyX3dha2Vfb25faG9zdDsKKwlzdHJ1Y3QgZGVudHJ5ICpwd3Jfd2FrZV9vbl90aW1lcl9leHA7CisJc3RydWN0IGRlbnRyeSAqcHdyX3R4X3dpdGhfcHM7CisJc3RydWN0IGRlbnRyeSAqcHdyX3R4X3dpdGhvdXRfcHM7CisJc3RydWN0IGRlbnRyeSAqcHdyX3JjdmRfYmVhY29uczsKKwlzdHJ1Y3QgZGVudHJ5ICpwd3JfcG93ZXJfc2F2ZV9vZmY7CisJc3RydWN0IGRlbnRyeSAqcHdyX2VuYWJsZV9wczsKKwlzdHJ1Y3QgZGVudHJ5ICpwd3JfZGlzYWJsZV9wczsKKwlzdHJ1Y3QgZGVudHJ5ICpwd3JfZml4X3RzZl9wczsKKwkvKiBza2lwcGluZyBjb250X21pc3NfYmNuc19zcHJlYWQgZm9yIG5vdyAqLworCXN0cnVjdCBkZW50cnkgKnB3cl9yY3ZkX2F3YWtlX2JlYWNvbnM7CisKKwlzdHJ1Y3QgZGVudHJ5ICptaWNfcnhfcGt0czsKKwlzdHJ1Y3QgZGVudHJ5ICptaWNfY2FsY19mYWlsdXJlOworCisJc3RydWN0IGRlbnRyeSAqYWVzX2VuY3J5cHRfZmFpbDsKKwlzdHJ1Y3QgZGVudHJ5ICphZXNfZGVjcnlwdF9mYWlsOworCXN0cnVjdCBkZW50cnkgKmFlc19lbmNyeXB0X3BhY2tldHM7CisJc3RydWN0IGRlbnRyeSAqYWVzX2RlY3J5cHRfcGFja2V0czsKKwlzdHJ1Y3QgZGVudHJ5ICphZXNfZW5jcnlwdF9pbnRlcnJ1cHQ7CisJc3RydWN0IGRlbnRyeSAqYWVzX2RlY3J5cHRfaW50ZXJydXB0OworCisJc3RydWN0IGRlbnRyeSAqZXZlbnRfaGVhcnRfYmVhdDsKKwlzdHJ1Y3QgZGVudHJ5ICpldmVudF9jYWxpYnJhdGlvbjsKKwlzdHJ1Y3QgZGVudHJ5ICpldmVudF9yeF9taXNtYXRjaDsKKwlzdHJ1Y3QgZGVudHJ5ICpldmVudF9yeF9tZW1fZW1wdHk7CisJc3RydWN0IGRlbnRyeSAqZXZlbnRfcnhfcG9vbDsKKwlzdHJ1Y3QgZGVudHJ5ICpldmVudF9vb21fbGF0ZTsKKwlzdHJ1Y3QgZGVudHJ5ICpldmVudF9waHlfdHJhbnNtaXRfZXJyb3I7CisJc3RydWN0IGRlbnRyeSAqZXZlbnRfdHhfc3R1Y2s7CisKKwlzdHJ1Y3QgZGVudHJ5ICpwc19wc3BvbGxfdGltZW91dHM7CisJc3RydWN0IGRlbnRyeSAqcHNfdXBzZF90aW1lb3V0czsKKwlzdHJ1Y3QgZGVudHJ5ICpwc191cHNkX21heF9zcHRpbWU7CisJc3RydWN0IGRlbnRyeSAqcHNfdXBzZF9tYXhfYXB0dXJuOworCXN0cnVjdCBkZW50cnkgKnBzX3BzcG9sbF9tYXhfYXB0dXJuOworCXN0cnVjdCBkZW50cnkgKnBzX3BzcG9sbF91dGlsaXphdGlvbjsKKwlzdHJ1Y3QgZGVudHJ5ICpwc191cHNkX3V0aWxpemF0aW9uOworCisJc3RydWN0IGRlbnRyeSAqcnhwaXBlX3J4X3ByZXBfYmVhY29uX2Ryb3A7CisJc3RydWN0IGRlbnRyeSAqcnhwaXBlX2Rlc2NyX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKKwlzdHJ1Y3QgZGVudHJ5ICpyeHBpcGVfYmVhY29uX2J1ZmZlcl90aHJlc19ob3N0X2ludF90cmlnX3J4X2RhdGE7CisJc3RydWN0IGRlbnRyeSAqcnhwaXBlX21pc3NlZF9iZWFjb25faG9zdF9pbnRfdHJpZ19yeF9kYXRhOworCXN0cnVjdCBkZW50cnkgKnJ4cGlwZV90eF94ZnJfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOworCisJc3RydWN0IGRlbnRyeSAqdHhfcXVldWVfbGVuOworCisJc3RydWN0IGRlbnRyeSAqcmV0cnlfY291bnQ7CisJc3RydWN0IGRlbnRyeSAqZXhjZXNzaXZlX3JldHJpZXM7Cit9OworCitzdHJ1Y3Qgd2wxMjUxX2lmX29wZXJhdGlvbnMgeworCXZvaWQgKCpyZWFkKShzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CisJdm9pZCAoKndyaXRlKShzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CisJdm9pZCAoKnJlc2V0KShzdHJ1Y3Qgd2wxMjUxICp3bCk7CisJdm9pZCAoKmVuYWJsZV9pcnEpKHN0cnVjdCB3bDEyNTEgKndsKTsKKwl2b2lkICgqZGlzYWJsZV9pcnEpKHN0cnVjdCB3bDEyNTEgKndsKTsKK307CisKK3N0cnVjdCB3bDEyNTEgeworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCWJvb2wgbWFjODAyMTFfcmVnaXN0ZXJlZDsKKworCXZvaWQgKmlmX3ByaXY7CisJY29uc3Qgc3RydWN0IHdsMTI1MV9pZl9vcGVyYXRpb25zICppZl9vcHM7CisKKwl2b2lkICgqc2V0X3Bvd2VyKShib29sIGVuYWJsZSk7CisJaW50IGlycTsKKworCWVudW0gd2wxMjUxX3N0YXRlIHN0YXRlOworCXN0cnVjdCBtdXRleCBtdXRleDsKKworCWludCBwaHlzaWNhbF9tZW1fYWRkcjsKKwlpbnQgcGh5c2ljYWxfcmVnX2FkZHI7CisJaW50IHZpcnR1YWxfbWVtX2FkZHI7CisJaW50IHZpcnR1YWxfcmVnX2FkZHI7CisKKwlpbnQgY21kX2JveF9hZGRyOworCWludCBldmVudF9ib3hfYWRkcjsKKwlzdHJ1Y3QgYm9vdF9hdHRyIGJvb3RfYXR0cjsKKworCXU4ICpmdzsKKwlzaXplX3QgZndfbGVuOworCXU4ICpudnM7CisJc2l6ZV90IG52c19sZW47CisKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXU4IGJzc190eXBlOworCXU4IGxpc3Rlbl9pbnQ7CisJaW50IGNoYW5uZWw7CisKKwl2b2lkICp0YXJnZXRfbWVtX21hcDsKKwlzdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXNfcmVzcCAqZGF0YV9wYXRoOworCisJLyogTnVtYmVyIG9mIFRYIHBhY2tldHMgdHJhbnNmZXJyZWQgdG8gdGhlIEZXLCBtb2R1bG8gMTYgKi8KKwl1MzIgZGF0YV9pbl9jb3VudDsKKworCS8qIEZyYW1lcyBzY2hlZHVsZWQgZm9yIHRyYW5zbWlzc2lvbiwgbm90IGhhbmRsZWQgeWV0ICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZTsKKwlib29sIHR4X3F1ZXVlX3N0b3BwZWQ7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmlsdGVyX3dvcms7CisKKwkvKiBQZW5kaW5nIFRYIGZyYW1lcyAqLworCXN0cnVjdCBza19idWZmICp0eF9mcmFtZXNbMTZdOworCisJLyoKKwkgKiBJbmRleCBwb2ludGluZyB0byB0aGUgbmV4dCBUWCBjb21wbGV0ZSBlbnRyeQorCSAqIGluIHRoZSBjeWNsaWMgWFQgY29tcGxldGUgYXJyYXkgd2UgZ2V0IGZyb20KKwkgKiB0aGUgRlcuCisJICovCisJdTMyIG5leHRfdHhfY29tcGxldGU7CisKKwkvKiBGVyBSeCBjb3VudGVyICovCisJdTMyIHJ4X2NvdW50ZXI7CisKKwkvKiBSeCBmcmFtZXMgaGFuZGxlZCAqLworCXUzMiByeF9oYW5kbGVkOworCisJLyogQ3VycmVudCBkb3VibGUgYnVmZmVyICovCisJdTMyIHJ4X2N1cnJlbnRfYnVmZmVyOworCXUzMiByeF9sYXN0X2lkOworCisJLyogVGhlIHRhcmdldCBpbnRlcnJ1cHQgbWFzayAqLworCXUzMiBpbnRyX21hc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IGlycV93b3JrOworCisJLyogVGhlIG1ib3ggZXZlbnQgbWFzayAqLworCXUzMiBldmVudF9tYXNrOworCisJLyogTWFpbGJveCBwb2ludGVycyAqLworCXUzMiBtYm94X3B0clsyXTsKKworCS8qIEFyZSB3ZSBjdXJyZW50bHkgc2Nhbm5pbmcgKi8KKwlib29sIHNjYW5uaW5nOworCisJLyogT3VyIGFzc29jaWF0aW9uIElEICovCisJdTE2IGFpZDsKKworCS8qIERlZmF1bHQga2V5IChmb3IgV0VQKSAqLworCXUzMiBkZWZhdWx0X2tleTsKKworCXVuc2lnbmVkIGludCB0eF9tZ210X2ZybV9yYXRlOworCXVuc2lnbmVkIGludCB0eF9tZ210X2ZybV9tb2Q7CisKKwl1bnNpZ25lZCBpbnQgcnhfY29uZmlnOworCXVuc2lnbmVkIGludCByeF9maWx0ZXI7CisKKwkvKiBpcyBmaXJtd2FyZSBpbiBlbHAgbW9kZSAqLworCWJvb2wgZWxwOworCisJLyogd2UgY2FuIGJlIGluIHBzbSwgYnV0IG5vdCBpbiBlbHAsIHdlIGhhdmUgdG8gZGlmZmVyZW50aWF0ZSAqLworCWJvb2wgcHNtOworCisJLyogUFNNIG1vZGUgcmVxdWVzdGVkICovCisJYm9vbCBwc21fcmVxdWVzdGVkOworCisJdTE2IGJlYWNvbl9pbnQ7CisJdTggZHRpbV9wZXJpb2Q7CisKKwkvKiBpbiBkQm0gKi8KKwlpbnQgcG93ZXJfbGV2ZWw7CisKKwlzdHJ1Y3Qgd2wxMjUxX3N0YXRzIHN0YXRzOworCXN0cnVjdCB3bDEyNTFfZGVidWdmcyBkZWJ1Z2ZzOworCisJdTMyIGJ1ZmZlcl8zMjsKKwl1MzIgYnVmZmVyX2NtZDsKKwl1OCBidWZmZXJfYnVzeXdvcmRbV0wxMjUxX0JVU1lfV09SRF9MRU5dOworCXN0cnVjdCB3bDEyNTFfcnhfZGVzY3JpcHRvciAqcnhfZGVzY3JpcHRvcjsKKworCXUzMiBjaGlwX2lkOworCWNoYXIgZndfdmVyWzIxXTsKK307CisKK2ludCB3bDEyNTFfcGx0X3N0YXJ0KHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfcGx0X3N0b3Aoc3RydWN0IHdsMTI1MSAqd2wpOworCitzdHJ1Y3QgaWVlZTgwMjExX2h3ICp3bDEyNTFfYWxsb2NfaHcodm9pZCk7CitpbnQgd2wxMjUxX2ZyZWVfaHcoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9pbml0X2llZWU4MDIxMShzdHJ1Y3Qgd2wxMjUxICp3bCk7Cit2b2lkIHdsMTI1MV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgd2wxMjUxICp3bCk7Cit2b2lkIHdsMTI1MV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI1MSAqd2wpOworCisjZGVmaW5lIERFRkFVTFRfSFdfR0VOX01PRFVMQVRJT05fVFlQRSAgICBDQ0tfTE9ORyAvKiBMb25nIFByZWFtYmxlICovCisjZGVmaW5lIERFRkFVTFRfSFdfR0VOX1RYX1JBVEUgICAgICAgICAgUkFURV8yTUJQUworI2RlZmluZSBKT0lOX1RJTUVPVVQgNTAwMCAvKiA1MDAwIG1pbGxpc2Vjb25kcyB0byBqb2luICovCisKKyNkZWZpbmUgV0wxMjUxX0RFRkFVTFRfUE9XRVJfTEVWRUwgMjAKKworI2RlZmluZSBXTDEyNTFfVFhfUVVFVUVfTUFYX0xFTkdUSCAyMAorCisjZGVmaW5lIFdMMTI1MV9ERUZBVUxUX0JFQUNPTl9JTlQgMTAwCisjZGVmaW5lIFdMMTI1MV9ERUZBVUxUX0RUSU1fUEVSSU9EIDEKKworI2RlZmluZSBXTDEyNTFfREVGQVVMVF9DSEFOTkVMIDAKKworI2RlZmluZSBDSElQX0lEXzEyNTFfUEcxMAkgICAgICAgICAgICgweDcwMTAxMDEpCisjZGVmaW5lIENISVBfSURfMTI1MV9QRzExCSAgICAgICAgICAgKDB4NzAyMDEwMSkKKyNkZWZpbmUgQ0hJUF9JRF8xMjUxX1BHMTIJICAgICAgICAgICAoMHg3MDMwMTAxKQorI2RlZmluZSBDSElQX0lEXzEyNzFfUEcxMAkgICAgICAgICAgICgweDQwMzAxMDEpCisjZGVmaW5lIENISVBfSURfMTI3MV9QRzIwCSAgICAgICAgICAgKDB4NDAzMDExMSkKIAogI2RlZmluZSBXTDEyNTFfRldfTkFNRSAid2wxMjUxLWZ3LmJpbiIKICNkZWZpbmUgV0wxMjUxX05WU19OQU1FICJ3bDEyNTEtbnZzLmJpbiIKIAogI2RlZmluZSBXTDEyNTFfUE9XRVJfT05fU0xFRVAgMTAgLyogaW4gbWlsaXNlY29uZHMgKi8KIAotdm9pZCB3bDEyNTFfc2V0dXAoc3RydWN0IHdsMTJ4eCAqd2wpOworI2RlZmluZSBXTDEyNTFfUEFSVF9ET1dOX01FTV9TVEFSVAkweDAKKyNkZWZpbmUgV0wxMjUxX1BBUlRfRE9XTl9NRU1fU0laRQkweDE2ODAwCisjZGVmaW5lIFdMMTI1MV9QQVJUX0RPV05fUkVHX1NUQVJUCVJFR0lTVEVSU19CQVNFCisjZGVmaW5lIFdMMTI1MV9QQVJUX0RPV05fUkVHX1NJWkUJUkVHSVNURVJTX0RPV05fU0laRQogCi0KLXN0cnVjdCB3bDEyNTFfYWN4X21lbW9yeSB7Ci0JX19sZTE2IG51bV9zdGF0aW9uczsgLyogbnVtYmVyIG9mIFNUQXMgdG8gYmUgc3VwcG9ydGVkLiAqLwotCXUxNiByZXNlcnZlZF8xOwotCi0JLyoKLQkgKiBObWJlciBvZiBtZW1vcnkgYnVmZmVycyBmb3IgdGhlIFJYIG1lbSBwb29sLgotCSAqIFRoZSBhY3R1YWwgbnVtYmVyIG1heSBiZSBsZXNzIGlmIHRoZXJlIGFyZQotCSAqIG5vdCBlbm91Z2ggYmxvY2tzIGxlZnQgZm9yIHRoZSBtaW5pbXVtIG51bQotCSAqIG9mIFRYIG9uZXMuCi0JICovCi0JdTggcnhfbWVtX2Jsb2NrX251bTsKLQl1OCByZXNlcnZlZF8yOwotCXU4IG51bV90eF9xdWV1ZXM7IC8qIEZyb20gMSB0byAxNiAqLwotCXU4IGhvc3RfaWZfb3B0aW9uczsgLyogSE9TVF9JRiogKi8KLQl1OCB0eF9taW5fbWVtX2Jsb2NrX251bTsKLQl1OCBudW1fc3NpZF9wcm9maWxlczsKLQlfX2xlMTYgZGVidWdfYnVmZmVyX3NpemU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0jZGVmaW5lIEFDWF9SWF9ERVNDX01JTiAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIEFDWF9SWF9ERVNDX01BWCAgICAgICAgICAgICAgICAxMjcKLSNkZWZpbmUgQUNYX1JYX0RFU0NfREVGICAgICAgICAgICAgICAgIDMyCi1zdHJ1Y3Qgd2wxMjUxX2FjeF9yeF9xdWV1ZV9jb25maWcgewotCXU4IG51bV9kZXNjczsKLQl1OCBwYWQ7Ci0JdTggdHlwZTsKLQl1OCBwcmlvcml0eTsKLQlfX2xlMzIgZG1hX2FkZHJlc3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBBQ1hfVFhfREVTQ19NSU4gICAgICAgICAgICAgICAgMQotI2RlZmluZSBBQ1hfVFhfREVTQ19NQVggICAgICAgICAgICAgICAgMTI3Ci0jZGVmaW5lIEFDWF9UWF9ERVNDX0RFRiAgICAgICAgICAgICAgICAxNgotc3RydWN0IHdsMTI1MV9hY3hfdHhfcXVldWVfY29uZmlnIHsKLSAgICB1OCBudW1fZGVzY3M7Ci0gICAgdTggcGFkWzJdOwotICAgIHU4IGF0dHJpYnV0ZXM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBNQVhfVFhfUVVFVUVfQ09ORklHUyA1Ci0jZGVmaW5lIE1BWF9UWF9RVUVVRVMgNAotc3RydWN0IHdsMTI1MV9hY3hfY29uZmlnX21lbW9yeSB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0Jc3RydWN0IHdsMTI1MV9hY3hfbWVtb3J5IG1lbV9jb25maWc7Ci0Jc3RydWN0IHdsMTI1MV9hY3hfcnhfcXVldWVfY29uZmlnIHJ4X3F1ZXVlX2NvbmZpZzsKLQlzdHJ1Y3Qgd2wxMjUxX2FjeF90eF9xdWV1ZV9jb25maWcgdHhfcXVldWVfY29uZmlnW01BWF9UWF9RVUVVRV9DT05GSUdTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgd2wxMjUxX2FjeF9tZW1fbWFwIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQl2b2lkICpjb2RlX3N0YXJ0OwotCXZvaWQgKmNvZGVfZW5kOwotCi0Jdm9pZCAqd2VwX2RlZmtleV9zdGFydDsKLQl2b2lkICp3ZXBfZGVma2V5X2VuZDsKLQotCXZvaWQgKnN0YV90YWJsZV9zdGFydDsKLQl2b2lkICpzdGFfdGFibGVfZW5kOwotCi0Jdm9pZCAqcGFja2V0X3RlbXBsYXRlX3N0YXJ0OwotCXZvaWQgKnBhY2tldF90ZW1wbGF0ZV9lbmQ7Ci0KLQl2b2lkICpxdWV1ZV9tZW1vcnlfc3RhcnQ7Ci0Jdm9pZCAqcXVldWVfbWVtb3J5X2VuZDsKLQotCXZvaWQgKnBhY2tldF9tZW1vcnlfcG9vbF9zdGFydDsKLQl2b2lkICpwYWNrZXRfbWVtb3J5X3Bvb2xfZW5kOwotCi0Jdm9pZCAqZGVidWdfYnVmZmVyMV9zdGFydDsKLQl2b2lkICpkZWJ1Z19idWZmZXIxX2VuZDsKLQotCXZvaWQgKmRlYnVnX2J1ZmZlcjJfc3RhcnQ7Ci0Jdm9pZCAqZGVidWdfYnVmZmVyMl9lbmQ7Ci0KLQkvKiBOdW1iZXIgb2YgYmxvY2tzIEZXIGFsbG9jYXRlZCBmb3IgVFggcGFja2V0cyAqLwotCXUzMiBudW1fdHhfbWVtX2Jsb2NrczsKLQotCS8qIE51bWJlciBvZiBibG9ja3MgRlcgYWxsb2NhdGVkIGZvciBSWCBwYWNrZXRzICovCi0JdTMyIG51bV9yeF9tZW1fYmxvY2tzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICBIb3N0IEludGVycnVwdCBSZWdpc3RlciAoV2lMaW5rIC0+IEhvc3QpCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBSWCBwYWNrZXQgaXMgcmVhZHkgaW4gWGZlciBidWZmZXIgIzAgKi8KLSNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBICAgICAgQklUKDApCi0KLS8qIFRYIHJlc3VsdChzKSBhcmUgaW4gdGhlIFRYIGNvbXBsZXRlIGJ1ZmZlciAqLwotI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfVFhfUkVTVUxUCUJJVCgxKQotCi0vKiBPQlNPTEVURSAqLwotI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfVFhfWEZSCQlCSVQoMikKLQotLyogUlggcGFja2V0IGlzIHJlYWR5IGluIFhmZXIgYnVmZmVyICMxICovCi0jZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9SWDFfREFUQQlCSVQoMykKLQotLyogRXZlbnQgd2FzIGVudGVyZWQgdG8gRXZlbnQgTUJPWCAjQSAqLwotI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfRVZFTlRfQQkJQklUKDQpCi0KLS8qIEV2ZW50IHdhcyBlbnRlcmVkIHRvIEV2ZW50IE1CT1ggI0IgKi8KLSNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0IJCUJJVCg1KQotCi0vKiBPQlNPTEVURSAqLwotI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfV0FLRV9PTl9IT1NUCUJJVCg2KQotCi0vKiBUcmFjZSBtZWFzc2dlIG9uIE1CT1ggI0EgKi8KLSNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1RSQUNFX0EJCUJJVCg3KQotCi0vKiBUcmFjZSBtZWFzc2dlIG9uIE1CT1ggI0IgKi8KLSNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1RSQUNFX0IJCUJJVCg4KQotCi0vKiBDb21tYW5kIHByb2Nlc3NpbmcgY29tcGxldGlvbiAqLwotI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfQ01EX0NPTVBMRVRFCUJJVCg5KQotCi0vKiBJbml0IHNlcXVlbmNlIGlzIGRvbmUgKi8KLSNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUJQklUKDE0KQotCi0jZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9BTEwgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgV0wxMjUxX1BBUlRfV09SS19NRU1fU1RBUlQJMHgyODAwMAorI2RlZmluZSBXTDEyNTFfUEFSVF9XT1JLX01FTV9TSVpFCTB4MTQwMDAKKyNkZWZpbmUgV0wxMjUxX1BBUlRfV09SS19SRUdfU1RBUlQJUkVHSVNURVJTX0JBU0UKKyNkZWZpbmUgV0wxMjUxX1BBUlRfV09SS19SRUdfU0laRQlSRUdJU1RFUlNfV09SS19TSVpFCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9hY3guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiMjZjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmMKQEAgLTAsMCArMSw5MTggQEAKKyNpbmNsdWRlICJ3bDEyNTFfYWN4LmgiCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmM3Lmg+CisKKyNpbmNsdWRlICJ3bDEyNTEuaCIKKyNpbmNsdWRlICJ3bDEyNTFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjUxX2NtZC5oIgorI2luY2x1ZGUgIndsMTI1MV9wcy5oIgorCitpbnQgd2wxMjUxX2FjeF9mcmFtZV9yYXRlcyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggY3RybF9yYXRlLCB1OCBjdHJsX21vZCwKKwkJCSAgIHU4IG1ndF9yYXRlLCB1OCBtZ3RfbW9kKQoreworCXN0cnVjdCBhY3hfZndfZ2VuX2ZyYW1lX3JhdGVzICpyYXRlczsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBmcmFtZSByYXRlcyIpOworCisJcmF0ZXMgPSBremFsbG9jKHNpemVvZigqcmF0ZXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJhdGVzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJhdGVzLT50eF9jdHJsX2ZyYW1lX3JhdGUgPSBjdHJsX3JhdGU7CisJcmF0ZXMtPnR4X2N0cmxfZnJhbWVfbW9kID0gY3RybF9tb2Q7CisJcmF0ZXMtPnR4X21ndF9mcmFtZV9yYXRlID0gbWd0X3JhdGU7CisJcmF0ZXMtPnR4X21ndF9mcmFtZV9tb2QgPSBtZ3RfbW9kOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9GV19HRU5fRlJBTUVfUkFURVMsCisJCQkJICAgcmF0ZXMsIHNpemVvZigqcmF0ZXMpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoIkZhaWxlZCB0byBzZXQgRlcgcmF0ZXMgYW5kIG1vZHVsYXRpb24iKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUocmF0ZXMpOworCXJldHVybiByZXQ7Cit9CisKKworaW50IHdsMTI1MV9hY3hfc3RhdGlvbl9pZChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2RvdDExX3N0YXRpb25faWQgKm1hYzsKKwlpbnQgcmV0LCBpOworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBkb3QxMV9zdGF0aW9uX2lkIik7CisKKwltYWMgPSBremFsbG9jKHNpemVvZigqbWFjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYWMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCW1hYy0+bWFjW2ldID0gd2wtPm1hY19hZGRyW0VUSF9BTEVOIC0gMSAtIGldOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIERPVDExX1NUQVRJT05fSUQsIG1hYywgc2l6ZW9mKCptYWMpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKK291dDoKKwlrZnJlZShtYWMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X2RlZmF1bHRfa2V5KHN0cnVjdCB3bDEyNTEgKndsLCB1OCBrZXlfaWQpCit7CisJc3RydWN0IGFjeF9kb3QxMV9kZWZhdWx0X2tleSAqZGVmYXVsdF9rZXk7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZG90MTFfZGVmYXVsdF9rZXkgKCVkKSIsIGtleV9pZCk7CisKKwlkZWZhdWx0X2tleSA9IGt6YWxsb2Moc2l6ZW9mKCpkZWZhdWx0X2tleSksIEdGUF9LRVJORUwpOworCWlmICghZGVmYXVsdF9rZXkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZGVmYXVsdF9rZXktPmlkID0ga2V5X2lkOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIERPVDExX0RFRkFVTFRfS0VZLAorCQkJCSAgIGRlZmF1bHRfa2V5LCBzaXplb2YoKmRlZmF1bHRfa2V5KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJDb3VsZG4ndCBzZXQgZGVmYXVsdCBrZXkiKTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wtPmRlZmF1bHRfa2V5ID0ga2V5X2lkOworCitvdXQ6CisJa2ZyZWUoZGVmYXVsdF9rZXkpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X3dha2VfdXBfY29uZGl0aW9ucyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggd2FrZV91cF9ldmVudCwKKwkJCQkgIHU4IGxpc3Rlbl9pbnRlcnZhbCkKK3sKKwlzdHJ1Y3QgYWN4X3dha2VfdXBfY29uZGl0aW9uICp3YWtlX3VwOworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHdha2UgdXAgY29uZGl0aW9ucyIpOworCisJd2FrZV91cCA9IGt6YWxsb2Moc2l6ZW9mKCp3YWtlX3VwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3YWtlX3VwKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXdha2VfdXAtPndha2VfdXBfZXZlbnQgPSB3YWtlX3VwX2V2ZW50OworCXdha2VfdXAtPmxpc3Rlbl9pbnRlcnZhbCA9IGxpc3Rlbl9pbnRlcnZhbDsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfV0FLRV9VUF9DT05ESVRJT05TLAorCQkJCSAgIHdha2VfdXAsIHNpemVvZigqd2FrZV91cCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJjb3VsZCBub3Qgc2V0IHdha2UgdXAgY29uZGl0aW9uczogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZSh3YWtlX3VwKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9zbGVlcF9hdXRoKHN0cnVjdCB3bDEyNTEgKndsLCB1OCBzbGVlcF9hdXRoKQoreworCXN0cnVjdCBhY3hfc2xlZXBfYXV0aCAqYXV0aDsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzbGVlcCBhdXRoIik7CisKKwlhdXRoID0ga3phbGxvYyhzaXplb2YoKmF1dGgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF1dGgpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYXV0aC0+c2xlZXBfYXV0aCA9IHNsZWVwX2F1dGg7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NMRUVQX0FVVEgsIGF1dGgsIHNpemVvZigqYXV0aCkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCitvdXQ6CisJa2ZyZWUoYXV0aCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfZndfdmVyc2lvbihzdHJ1Y3Qgd2wxMjUxICp3bCwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBhY3hfcmV2aXNpb24gKnJldjsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBmdyByZXYiKTsKKworCXJldiA9IGt6YWxsb2Moc2l6ZW9mKCpyZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB3bDEyNTFfY21kX2ludGVycm9nYXRlKHdsLCBBQ1hfRldfUkVWLCByZXYsIHNpemVvZigqcmV2KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoIkFDWF9GV19SRVYgaW50ZXJyb2dhdGUgZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGJlIGNhcmVmdWwgd2l0aCB0aGUgYnVmZmVyIHNpemVzICovCisJc3RybmNweShidWYsIHJldi0+ZndfdmVyc2lvbiwgbWluKGxlbiwgc2l6ZW9mKHJldi0+ZndfdmVyc2lvbikpKTsKKworCS8qCisJICogaWYgdGhlIGZpcm13YXJlIHZlcnNpb24gc3RyaW5nIGlzIGV4YWN0bHkKKwkgKiBzaXplb2YocmV2LT5md192ZXJzaW9uKSBsb25nIG9yIGZ3X2xlbiBpcyBsZXNzIHRoYW4KKwkgKiBzaXplb2YocmV2LT5md192ZXJzaW9uKSBpdCB3b24ndCBiZSBudWxsIHRlcm1pbmF0ZWQKKwkgKi8KKwlidWZbbWluKGxlbiwgc2l6ZW9mKHJldi0+ZndfdmVyc2lvbikpIC0gMV0gPSAnXDAnOworCitvdXQ6CisJa2ZyZWUocmV2KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF90eF9wb3dlcihzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IHBvd2VyKQoreworCXN0cnVjdCBhY3hfY3VycmVudF90eF9wb3dlciAqYWN4OworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGRvdDExX2N1cl90eF9wd3IiKTsKKworCWlmIChwb3dlciA8IDAgfHwgcG93ZXIgPiAyNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5jdXJyZW50X3R4X3Bvd2VyID0gcG93ZXIgKiAxMDsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9DVVJfVFhfUFdSLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImNvbmZpZ3VyZSBvZiB0eCBwb3dlciBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9mZWF0dXJlX2NmZyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2ZlYXR1cmVfY29uZmlnICpmZWF0dXJlOworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGZlYXR1cmUgY2ZnIik7CisKKwlmZWF0dXJlID0ga3phbGxvYyhzaXplb2YoKmZlYXR1cmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZlYXR1cmUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogREZfRU5DUllQVElPTl9ESVNBQkxFIGFuZCBERl9TTklGRl9NT0RFX0VOQUJMRSBhcmUgZGlzYWJsZWQgKi8KKwlmZWF0dXJlLT5kYXRhX2Zsb3dfb3B0aW9ucyA9IDA7CisJZmVhdHVyZS0+b3B0aW9ucyA9IDA7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0ZFQVRVUkVfQ0ZHLAorCQkJCSAgIGZlYXR1cmUsIHNpemVvZigqZmVhdHVyZSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiQ291bGRuJ3Qgc2V0IEhXIGVuY3J5cHRpb24iKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoZmVhdHVyZSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfbWVtX21hcChzdHJ1Y3Qgd2wxMjUxICp3bCwgc3RydWN0IGFjeF9oZWFkZXIgKm1lbV9tYXAsCisJCSAgICAgICBzaXplX3QgbGVuKQoreworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IG1lbSBtYXAiKTsKKworCXJldCA9IHdsMTI1MV9jbWRfaW50ZXJyb2dhdGUod2wsIEFDWF9NRU1fTUFQLCBtZW1fbWFwLCBsZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNTFfYWN4X2RhdGFfcGF0aF9wYXJhbXMoc3RydWN0IHdsMTI1MSAqd2wsCisJCQkJc3RydWN0IGFjeF9kYXRhX3BhdGhfcGFyYW1zX3Jlc3AgKnJlc3ApCit7CisJc3RydWN0IGFjeF9kYXRhX3BhdGhfcGFyYW1zICpwYXJhbXM7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZGF0YSBwYXRoIHBhcmFtcyIpOworCisJcGFyYW1zID0ga3phbGxvYyhzaXplb2YoKnBhcmFtcyksIEdGUF9LRVJORUwpOworCWlmICghcGFyYW1zKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXBhcmFtcy0+cnhfcGFja2V0X3JpbmdfY2h1bmtfc2l6ZSA9IERQX1JYX1BBQ0tFVF9SSU5HX0NIVU5LX1NJWkU7CisJcGFyYW1zLT50eF9wYWNrZXRfcmluZ19jaHVua19zaXplID0gRFBfVFhfUEFDS0VUX1JJTkdfQ0hVTktfU0laRTsKKworCXBhcmFtcy0+cnhfcGFja2V0X3JpbmdfY2h1bmtfbnVtID0gRFBfUlhfUEFDS0VUX1JJTkdfQ0hVTktfTlVNOworCXBhcmFtcy0+dHhfcGFja2V0X3JpbmdfY2h1bmtfbnVtID0gRFBfVFhfUEFDS0VUX1JJTkdfQ0hVTktfTlVNOworCisJcGFyYW1zLT50eF9jb21wbGV0ZV90aHJlc2hvbGQgPSAxOworCisJcGFyYW1zLT50eF9jb21wbGV0ZV9yaW5nX2RlcHRoID0gRldfVFhfQ01QTFRfQkxPQ0tfU0laRTsKKworCXBhcmFtcy0+dHhfY29tcGxldGVfdGltZW91dCA9IERQX1RYX0NPTVBMRVRFX1RJTUVfT1VUOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9EQVRBX1BBVEhfUEFSQU1TLAorCQkJCSAgIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBGSVhNRTogc2hvdWxkbid0IHRoaXMgYmUgQUNYX0RBVEFfUEFUSF9SRVNQX1BBUkFNUz8gKi8KKwlyZXQgPSB3bDEyNTFfY21kX2ludGVycm9nYXRlKHdsLCBBQ1hfREFUQV9QQVRIX1BBUkFNUywKKwkJCQkgICAgIHJlc3AsIHNpemVvZigqcmVzcCkpOworCisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImZhaWxlZCB0byByZWFkIGRhdGEgcGF0aCBwYXJhbWV0ZXJzOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAocmVzcC0+aGVhZGVyLmNtZC5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7CisJCXdsMTI1MV93YXJuaW5nKCJkYXRhIHBhdGggcGFyYW1ldGVyIGFjeCBzdGF0dXMgZmFpbGVkIik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHBhcmFtcyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfcnhfbXNkdV9saWZlX3RpbWUoc3RydWN0IHdsMTI1MSAqd2wsIHUzMiBsaWZlX3RpbWUpCit7CisJc3RydWN0IGFjeF9yeF9tc2R1X2xpZmV0aW1lICphY3g7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcnggbXNkdSBsaWZlIHRpbWUiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPmxpZmV0aW1lID0gbGlmZV90aW1lOworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9SWF9NU0RVX0xJRkVfVElNRSwKKwkJCQkgICBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnggbXNkdSBsaWZlIHRpbWU6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9yeF9jb25maWcoc3RydWN0IHdsMTI1MSAqd2wsIHUzMiBjb25maWcsIHUzMiBmaWx0ZXIpCit7CisJc3RydWN0IGFjeF9yeF9jb25maWcgKnJ4X2NvbmZpZzsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCByeCBjb25maWciKTsKKworCXJ4X2NvbmZpZyA9IGt6YWxsb2Moc2l6ZW9mKCpyeF9jb25maWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X2NvbmZpZykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyeF9jb25maWctPmNvbmZpZ19vcHRpb25zID0gY29uZmlnOworCXJ4X2NvbmZpZy0+ZmlsdGVyX29wdGlvbnMgPSBmaWx0ZXI7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1JYX0NGRywKKwkJCQkgICByeF9jb25maWcsIHNpemVvZigqcnhfY29uZmlnKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnggY29uZmlnOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHJ4X2NvbmZpZyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfcGRfdGhyZXNob2xkKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXN0cnVjdCBhY3hfcGFja2V0X2RldGVjdGlvbiAqcGQ7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZGF0YSBwZCB0aHJlc2hvbGQiKTsKKworCXBkID0ga3phbGxvYyhzaXplb2YoKnBkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBGSVhNRTogdGhyZXNob2xkIHZhbHVlIG5vdCBzZXQgKi8KKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUERfVEhSRVNIT0xELCBwZCwgc2l6ZW9mKCpwZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHBkIHRocmVzaG9sZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwZCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNTFfYWN4X3Nsb3Qoc3RydWN0IHdsMTI1MSAqd2wsIGVudW0gYWN4X3Nsb3RfdHlwZSBzbG90X3RpbWUpCit7CisJc3RydWN0IGFjeF9zbG90ICpzbG90OworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNsb3QiKTsKKworCXNsb3QgPSBremFsbG9jKHNpemVvZigqc2xvdCksIEdGUF9LRVJORUwpOworCWlmICghc2xvdCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlzbG90LT53b25lX2luZGV4ID0gU1RBVElPTl9XT05FX0lOREVYOworCXNsb3QtPnNsb3RfdGltZSA9IHNsb3RfdGltZTsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0xPVCwgc2xvdCwgc2l6ZW9mKCpzbG90KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc2xvdCB0aW1lOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHNsb3QpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXN0cnVjdCBhY3hfZG90MTFfZ3JwX2FkZHJfdGJsICphY3g7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZ3JvdXAgYWRkcmVzcyB0YmwiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBNQUMgZmlsdGVyaW5nICovCisJYWN4LT5lbmFibGVkID0gMDsKKwlhY3gtPm51bV9ncm91cHMgPSAwOworCW1lbXNldChhY3gtPm1hY190YWJsZSwgMCwgQUREUkVTU19HUk9VUF9NQVhfTEVOKTsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9HUk9VUF9BRERSRVNTX1RCTCwKKwkJCQkgICBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgZ3JvdXAgYWRkciB0YWJsZTogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJc3RydWN0IGFjeF9yeF90aW1lb3V0ICpyeF90aW1lb3V0OworCWludCByZXQ7CisKKwlyeF90aW1lb3V0ID0ga3phbGxvYyhzaXplb2YoKnJ4X3RpbWVvdXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X3RpbWVvdXQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzZXJ2aWNlIHBlcmlvZCB0aW1lb3V0Iik7CisKKwlyeF90aW1lb3V0LT5wc19wb2xsX3RpbWVvdXQgPSBSWF9USU1FT1VUX1BTX1BPTExfREVGOworCXJ4X3RpbWVvdXQtPnVwc2RfdGltZW91dCA9IFJYX1RJTUVPVVRfVVBTRF9ERUY7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NFUlZJQ0VfUEVSSU9EX1RJTUVPVVQsCisJCQkJICAgcnhfdGltZW91dCwgc2l6ZW9mKCpyeF90aW1lb3V0KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc2VydmljZSBwZXJpb2QgdGltZW91dDogJWQiLAorCQkJICAgICAgIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHJ4X3RpbWVvdXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X3J0c190aHJlc2hvbGQoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiBydHNfdGhyZXNob2xkKQoreworCXN0cnVjdCBhY3hfcnRzX3RocmVzaG9sZCAqcnRzOworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJ0cyB0aHJlc2hvbGQiKTsKKworCXJ0cyA9IGt6YWxsb2Moc2l6ZW9mKCpydHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ0cykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlydHMtPnRocmVzaG9sZCA9IHJ0c190aHJlc2hvbGQ7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgRE9UMTFfUlRTX1RIUkVTSE9MRCwgcnRzLCBzaXplb2YoKnJ0cykpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHJ0cyB0aHJlc2hvbGQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUocnRzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9iZWFjb25fZmlsdGVyX29wdChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2JlYWNvbl9maWx0ZXJfb3B0aW9uICpiZWFjb25fZmlsdGVyOworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGJlYWNvbiBmaWx0ZXIgb3B0Iik7CisKKwliZWFjb25fZmlsdGVyID0ga3phbGxvYyhzaXplb2YoKmJlYWNvbl9maWx0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJlYWNvbl9maWx0ZXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYmVhY29uX2ZpbHRlci0+ZW5hYmxlID0gMDsKKwliZWFjb25fZmlsdGVyLT5tYXhfbnVtX2JlYWNvbnMgPSAwOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9CRUFDT05fRklMVEVSX09QVCwKKwkJCQkgICBiZWFjb25fZmlsdGVyLCBzaXplb2YoKmJlYWNvbl9maWx0ZXIpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiZmFpbGVkIHRvIHNldCBiZWFjb24gZmlsdGVyIG9wdDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShiZWFjb25fZmlsdGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9iZWFjb25fZmlsdGVyX3RhYmxlKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXN0cnVjdCBhY3hfYmVhY29uX2ZpbHRlcl9pZV90YWJsZSAqaWVfdGFibGU7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYmVhY29uIGZpbHRlciB0YWJsZSIpOworCisJaWVfdGFibGUgPSBremFsbG9jKHNpemVvZigqaWVfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWllX3RhYmxlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWllX3RhYmxlLT5udW1faWUgPSAwOworCW1lbXNldChpZV90YWJsZS0+dGFibGUsIDAsIEJFQUNPTl9GSUxURVJfVEFCTEVfTUFYX1NJWkUpOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9CRUFDT05fRklMVEVSX1RBQkxFLAorCQkJCSAgIGllX3RhYmxlLCBzaXplb2YoKmllX3RhYmxlKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgYmVhY29uIGZpbHRlciB0YWJsZTogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShpZV90YWJsZSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfc2dfZW5hYmxlKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXN0cnVjdCBhY3hfYnRfd2xhbl9jb2V4ICpwdGE7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2cgZW5hYmxlIik7CisKKwlwdGEgPSBremFsbG9jKHNpemVvZigqcHRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwdGEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcHRhLT5lbmFibGUgPSBTR19FTkFCTEU7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NHX0VOQUJMRSwgcHRhLCBzaXplb2YoKnB0YSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNvZnRnZW1pbmkgZW5hYmxlOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHB0YSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfc2dfY2ZnKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXN0cnVjdCBhY3hfYnRfd2xhbl9jb2V4X3BhcmFtICpwYXJhbTsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzZyBjZmciKTsKKworCXBhcmFtID0ga3phbGxvYyhzaXplb2YoKnBhcmFtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJhbSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBCVC1XTEFOIGNvZXh0IHBhcmFtZXRlcnMgKi8KKwlwYXJhbS0+bWluX3JhdGUgPSBSQVRFX0lOREVYXzI0TUJQUzsKKwlwYXJhbS0+YnRfaHBfbWF4X3RpbWUgPSBQVEFfQlRfSFBfTUFYVElNRV9ERUY7CisJcGFyYW0tPndsYW5faHBfbWF4X3RpbWUgPSBQVEFfV0xBTl9IUF9NQVhfVElNRV9ERUY7CisJcGFyYW0tPnNlbnNlX2Rpc2FibGVfdGltZXIgPSBQVEFfU0VOU0VfRElTQUJMRV9USU1FUl9ERUY7CisJcGFyYW0tPnJ4X3RpbWVfYnRfaHAgPSBQVEFfUFJPVEVDVElWRV9SWF9USU1FX0RFRjsKKwlwYXJhbS0+dHhfdGltZV9idF9ocCA9IFBUQV9QUk9URUNUSVZFX1RYX1RJTUVfREVGOworCXBhcmFtLT5yeF90aW1lX2J0X2hwX2Zhc3QgPSBQVEFfUFJPVEVDVElWRV9SWF9USU1FX0ZBU1RfREVGOworCXBhcmFtLT50eF90aW1lX2J0X2hwX2Zhc3QgPSBQVEFfUFJPVEVDVElWRV9UWF9USU1FX0ZBU1RfREVGOworCXBhcmFtLT53bGFuX2N5Y2xlX2Zhc3QgPSBQVEFfQ1lDTEVfVElNRV9GQVNUX0RFRjsKKwlwYXJhbS0+YnRfYW50aV9zdGFydmF0aW9uX3BlcmlvZCA9IFBUQV9BTlRJX1NUQVJWRV9QRVJJT0RfREVGOworCXBhcmFtLT5uZXh0X2J0X2xwX3BhY2tldCA9IFBUQV9USU1FT1VUX05FWFRfQlRfTFBfUEFDS0VUX0RFRjsKKwlwYXJhbS0+d2FrZV91cF9iZWFjb24gPSBQVEFfVElNRV9CRUZPUkVfQkVBQ09OX0RFRjsKKwlwYXJhbS0+aHBfZG1fbWF4X2d1YXJkX3RpbWUgPSBQVEFfSFBETV9NQVhfVElNRV9ERUY7CisJcGFyYW0tPm5leHRfd2xhbl9wYWNrZXQgPSBQVEFfVElNRV9PVVRfTkVYVF9XTEFOX0RFRjsKKwlwYXJhbS0+YW50ZW5uYV90eXBlID0gUFRBX0FOVEVOTkFfVFlQRV9ERUY7CisJcGFyYW0tPnNpZ25hbF90eXBlID0gUFRBX1NJR05BTElOR19UWVBFX0RFRjsKKwlwYXJhbS0+YWZoX2xldmVyYWdlX29uID0gUFRBX0FGSF9MRVZFUkFHRV9PTl9ERUY7CisJcGFyYW0tPnF1aWV0X2N5Y2xlX251bSA9IFBUQV9OVU1CRVJfUVVJRVRfQ1lDTEVfREVGOworCXBhcmFtLT5tYXhfY3RzID0gUFRBX01BWF9OVU1fQ1RTX0RFRjsKKwlwYXJhbS0+d2xhbl9wYWNrZXRzX251bSA9IFBUQV9OVU1CRVJfT0ZfV0xBTl9QQUNLRVRTX0RFRjsKKwlwYXJhbS0+YnRfcGFja2V0c19udW0gPSBQVEFfTlVNQkVSX09GX0JUX1BBQ0tFVFNfREVGOworCXBhcmFtLT5taXNzZWRfcnhfYXZhbGFuY2hlID0gUFRBX1JYX0ZPUl9BVkFMQU5DSEVfREVGOworCXBhcmFtLT53bGFuX2VscF9ocCA9IFBUQV9FTFBfSFBfREVGOworCXBhcmFtLT5idF9hbnRpX3N0YXJ2YXRpb25fY3ljbGVzID0gUFRBX0FOVElfU1RBUlZFX05VTV9DWUNMRV9ERUY7CisJcGFyYW0tPmFja19tb2RlX2R1YWxfYW50ID0gUFRBX0FDS19NT0RFX0RFRjsKKwlwYXJhbS0+cGFfc2RfZW5hYmxlID0gUFRBX0FMTE9XX1BBX1NEX0RFRjsKKwlwYXJhbS0+cHRhX2F1dG9fbW9kZV9lbmFibGUgPSBQVEFfQVVUT19NT0RFX05PX0NUU19ERUY7CisJcGFyYW0tPmJ0X2hwX3Jlc3BlY3RlZF9udW0gPSBQVEFfQlRfSFBfUkVTUEVDVEVEX0RFRjsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0dfQ0ZHLCBwYXJhbSwgc2l6ZW9mKCpwYXJhbSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNnIGNvbmZpZzogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwYXJhbSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfY2NhX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2VuZXJneV9kZXRlY3Rpb24gKmRldGVjdGlvbjsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBjY2EgdGhyZXNob2xkIik7CisKKwlkZXRlY3Rpb24gPSBremFsbG9jKHNpemVvZigqZGV0ZWN0aW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXRlY3Rpb24pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZGV0ZWN0aW9uLT5yeF9jY2FfdGhyZXNob2xkID0gQ0NBX1RIUlNIX0RJU0FCTEVfRU5FUkdZX0Q7CisJZGV0ZWN0aW9uLT50eF9lbmVyZ3lfZGV0ZWN0aW9uID0gMDsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQ0NBX1RIUkVTSE9MRCwKKwkJCQkgICBkZXRlY3Rpb24sIHNpemVvZigqZGV0ZWN0aW9uKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgY2NhIHRocmVzaG9sZDogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworb3V0OgorCWtmcmVlKGRldGVjdGlvbik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfYmNuX2R0aW1fb3B0aW9ucyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2JlYWNvbl9icm9hZGNhc3QgKmJiOworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGJjbiBkdGltIG9wdGlvbnMiKTsKKworCWJiID0ga3phbGxvYyhzaXplb2YoKmJiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiYikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwliYi0+YmVhY29uX3J4X3RpbWVvdXQgPSBCQ05fUlhfVElNRU9VVF9ERUZfVkFMVUU7CisJYmItPmJyb2FkY2FzdF90aW1lb3V0ID0gQlJPQURDQVNUX1JYX1RJTUVPVVRfREVGX1ZBTFVFOworCWJiLT5yeF9icm9hZGNhc3RfaW5fcHMgPSBSWF9CUk9BRENBU1RfSU5fUFNfREVGX1ZBTFVFOworCWJiLT5wc19wb2xsX3RocmVzaG9sZCA9IENPTlNFQ1VUSVZFX1BTX1BPTExfRkFJTFVSRV9ERUY7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0JDTl9EVElNX09QVElPTlMsIGJiLCBzaXplb2YoKmJiKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnggY29uZmlnOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGJiKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9haWQoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiBhaWQpCit7CisJc3RydWN0IGFjeF9haWQgKmFjeF9haWQ7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYWlkIik7CisKKwlhY3hfYWlkID0ga3phbGxvYyhzaXplb2YoKmFjeF9haWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeF9haWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4X2FpZC0+YWlkID0gYWlkOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9BSUQsIGFjeF9haWQsIHNpemVvZigqYWN4X2FpZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGFpZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3hfYWlkKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9ldmVudF9tYm94X21hc2soc3RydWN0IHdsMTI1MSAqd2wsIHUzMiBldmVudF9tYXNrKQoreworCXN0cnVjdCBhY3hfZXZlbnRfbWFzayAqbWFzazsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBldmVudCBtYm94IG1hc2siKTsKKworCW1hc2sgPSBremFsbG9jKHNpemVvZigqbWFzayksIEdGUF9LRVJORUwpOworCWlmICghbWFzaykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBoaWdoIGV2ZW50IG1hc2sgaXMgdW51c2VkICovCisJbWFzay0+aGlnaF9ldmVudF9tYXNrID0gMHhmZmZmZmZmZjsKKworCW1hc2stPmV2ZW50X21hc2sgPSBldmVudF9tYXNrOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9FVkVOVF9NQk9YX01BU0ssCisJCQkJICAgbWFzaywgc2l6ZW9mKCptYXNrKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgYWN4X2V2ZW50X21ib3hfbWFzazogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShtYXNrKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9zZXRfcHJlYW1ibGUoc3RydWN0IHdsMTI1MSAqd2wsIGVudW0gYWN4X3ByZWFtYmxlX3R5cGUgcHJlYW1ibGUpCit7CisJc3RydWN0IGFjeF9wcmVhbWJsZSAqYWN4OworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4X3NldF9wcmVhbWJsZSIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+cHJlYW1ibGUgPSBwcmVhbWJsZTsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUFJFQU1CTEVfVFlQRSwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJTZXR0aW5nIG9mIHByZWFtYmxlIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X2N0c19wcm90ZWN0KHN0cnVjdCB3bDEyNTEgKndsLAorCQkJICAgZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIGN0c3Byb3RlY3QpCit7CisJc3RydWN0IGFjeF9jdHNwcm90ZWN0ICphY3g7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3hfc2V0X2N0c3Byb3RlY3QiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPmN0c3Byb3RlY3QgPSBjdHNwcm90ZWN0OworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9DVFNfUFJPVEVDVElPTiwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJTZXR0aW5nIG9mIGN0c3Byb3RlY3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfdHNmX2luZm8oc3RydWN0IHdsMTI1MSAqd2wsIHU2NCAqbWFjdGltZSkKK3sKKwlzdHJ1Y3QgYWN4X3RzZl9pbmZvICp0c2ZfaW5mbzsKKwlpbnQgcmV0OworCisJdHNmX2luZm8gPSBremFsbG9jKHNpemVvZigqdHNmX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRzZl9pbmZvKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHdsMTI1MV9jbWRfaW50ZXJyb2dhdGUod2wsIEFDWF9UU0ZfSU5GTywKKwkJCQkgICAgIHRzZl9pbmZvLCBzaXplb2YoKnRzZl9pbmZvKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoIkFDWF9GV19SRVYgaW50ZXJyb2dhdGUgZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworCSptYWN0aW1lID0gdHNmX2luZm8tPmN1cnJlbnRfdHNmX2xzYiB8CisJCSh0c2ZfaW5mby0+Y3VycmVudF90c2ZfbXNiIDw8IDMxKTsKKworb3V0OgorCWtmcmVlKHRzZl9pbmZvKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9zdGF0aXN0aWNzKHN0cnVjdCB3bDEyNTEgKndsLCBzdHJ1Y3QgYWN4X3N0YXRpc3RpY3MgKnN0YXRzKQoreworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHN0YXRpc3RpY3MiKTsKKworCXJldCA9IHdsMTI1MV9jbWRfaW50ZXJyb2dhdGUod2wsIEFDWF9TVEFUSVNUSUNTLCBzdGF0cywKKwkJCQkgICAgIHNpemVvZigqc3RhdHMpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiYWN4IHN0YXRpc3RpY3MgZmFpbGVkOiAlZCIsIHJldCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgd2wxMjUxX2FjeF9yYXRlX3BvbGljaWVzKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXN0cnVjdCBhY3hfcmF0ZV9wb2xpY3kgKmFjeDsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcmF0ZSBwb2xpY2llcyIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogY29uZmlndXJlIG9uZSBkZWZhdWx0IChvbmUtc2l6ZS1maXRzLWFsbCkgcmF0ZSBjbGFzcyAqLworCWFjeC0+cmF0ZV9jbGFzc19jbnQgPSAxOworCWFjeC0+cmF0ZV9jbGFzc1swXS5lbmFibGVkX3JhdGVzID0gQUNYX1JBVEVfTUFTS19VTlNQRUNJRklFRDsKKwlhY3gtPnJhdGVfY2xhc3NbMF0uc2hvcnRfcmV0cnlfbGltaXQgPSBBQ1hfUkFURV9SRVRSWV9MSU1JVDsKKwlhY3gtPnJhdGVfY2xhc3NbMF0ubG9uZ19yZXRyeV9saW1pdCA9IEFDWF9SQVRFX1JFVFJZX0xJTUlUOworCWFjeC0+cmF0ZV9jbGFzc1swXS5hZmxhZ3MgPSAwOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9SQVRFX1BPTElDWSwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJTZXR0aW5nIG9mIHJhdGUgcG9saWNpZXMgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfbWVtX2NmZyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3Qgd2wxMjUxX2FjeF9jb25maWdfbWVtb3J5ICptZW1fY29uZjsKKwlpbnQgcmV0LCBpOworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBtZW0gY2ZnIik7CisKKwltZW1fY29uZiA9IGt6YWxsb2Moc2l6ZW9mKCptZW1fY29uZiksIEdGUF9LRVJORUwpOworCWlmICghbWVtX2NvbmYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogbWVtb3J5IGNvbmZpZyAqLworCW1lbV9jb25mLT5tZW1fY29uZmlnLm51bV9zdGF0aW9ucyA9IGNwdV90b19sZTE2KERFRkFVTFRfTlVNX1NUQVRJT05TKTsKKwltZW1fY29uZi0+bWVtX2NvbmZpZy5yeF9tZW1fYmxvY2tfbnVtID0gMzU7CisJbWVtX2NvbmYtPm1lbV9jb25maWcudHhfbWluX21lbV9ibG9ja19udW0gPSA2NDsKKwltZW1fY29uZi0+bWVtX2NvbmZpZy5udW1fdHhfcXVldWVzID0gTUFYX1RYX1FVRVVFUzsKKwltZW1fY29uZi0+bWVtX2NvbmZpZy5ob3N0X2lmX29wdGlvbnMgPSBIT1NUSUZfUEtUX1JJTkc7CisJbWVtX2NvbmYtPm1lbV9jb25maWcubnVtX3NzaWRfcHJvZmlsZXMgPSAxOworCW1lbV9jb25mLT5tZW1fY29uZmlnLmRlYnVnX2J1ZmZlcl9zaXplID0KKwkJY3B1X3RvX2xlMTYoVFJBQ0VfQlVGRkVSX01BWF9TSVpFKTsKKworCS8qIFJYIHF1ZXVlIGNvbmZpZyAqLworCW1lbV9jb25mLT5yeF9xdWV1ZV9jb25maWcuZG1hX2FkZHJlc3MgPSAwOworCW1lbV9jb25mLT5yeF9xdWV1ZV9jb25maWcubnVtX2Rlc2NzID0gQUNYX1JYX0RFU0NfREVGOworCW1lbV9jb25mLT5yeF9xdWV1ZV9jb25maWcucHJpb3JpdHkgPSBERUZBVUxUX1JYUV9QUklPUklUWTsKKwltZW1fY29uZi0+cnhfcXVldWVfY29uZmlnLnR5cGUgPSBERUZBVUxUX1JYUV9UWVBFOworCisJLyogVFggcXVldWUgY29uZmlnICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9UWF9RVUVVRVM7IGkrKykgeworCQltZW1fY29uZi0+dHhfcXVldWVfY29uZmlnW2ldLm51bV9kZXNjcyA9IEFDWF9UWF9ERVNDX0RFRjsKKwkJbWVtX2NvbmYtPnR4X3F1ZXVlX2NvbmZpZ1tpXS5hdHRyaWJ1dGVzID0gaTsKKwl9CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX01FTV9DRkcsIG1lbV9jb25mLAorCQkJCSAgIHNpemVvZigqbWVtX2NvbmYpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygid2wxMjUxIG1lbSBjb25maWcgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKG1lbV9jb25mKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9hY3guaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FmYjkxNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmgKQEAgLTAsMCArMSwxMjkyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19XTDEyNTFfQUNYX0hfXworI2RlZmluZSBfX1dMMTI1MV9BQ1hfSF9fCisKKyNpbmNsdWRlICJ3bDEyNTEuaCIKKyNpbmNsdWRlICJ3bDEyNTFfY21kLmgiCisKKy8qIFRhcmdldCdzIGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KK3N0cnVjdCBhY3hfaGVhZGVyIHsKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF9oZWFkZXIgY21kOworCisJLyogYWN4IChvciBpbmZvcm1hdGlvbiBlbGVtZW50KSBoZWFkZXIgKi8KKwl1MTYgaWQ7CisKKwkvKiBwYXlsb2FkIGxlbmd0aCAobm90IGluY2x1ZGluZyBoZWFkZXJzICovCisJdTE2IGxlbjsKK307CisKK3N0cnVjdCBhY3hfZXJyb3JfY291bnRlciB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJLyogVGhlIG51bWJlciBvZiBQTENQIGVycm9ycyBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMgKi8KKwkvKiBpbmZvcm1hdGlvbiBlbGVtZW50IHdhcyBpbnRlcnJvZ2F0ZWQuIFRoaXMgZmllbGQgaXMgKi8KKwkvKiBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiBpdCBpcyBpbnRlcnJvZ2F0ZWQuKi8KKwl1MzIgUExDUF9lcnJvcjsKKworCS8qIFRoZSBudW1iZXIgb2YgRkNTIGVycm9ycyBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMgKi8KKwkvKiBpbmZvcm1hdGlvbiBlbGVtZW50IHdhcyBpbnRlcnJvZ2F0ZWQuIFRoaXMgZmllbGQgaXMgKi8KKwkvKiBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiBpdCBpcyBpbnRlcnJvZ2F0ZWQuKi8KKwl1MzIgRkNTX2Vycm9yOworCisJLyogVGhlIG51bWJlciBvZiBNUERVcyB3aXRob3V0IFBMQ1AgaGVhZGVyIGVycm9ycyByZWNlaXZlZCovCisJLyogc2luY2UgdGhlIGxhc3QgdGltZSB0aGlzIGluZm9ybWF0aW9uIGVsZW1lbnQgd2FzIGludGVycm9nYXRlZC4gKi8KKwkvKiBUaGlzIGZpZWxkIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIGl0IGlzIGludGVycm9nYXRlZC4qLworCXUzMiB2YWxpZF9mcmFtZTsKKworCS8qIHRoZSBudW1iZXIgb2YgbWlzc2VkIHNlcXVlbmNlIG51bWJlcnMgaW4gdGhlIHNxdWVudGlhbGx5ICovCisJLyogdmFsdWVzIG9mIGZyYW1lcyBzZXEgbnVtYmVycyAqLworCXUzMiBzZXFfbnVtX21pc3M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9yZXZpc2lvbiB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJLyoKKwkgKiBUaGUgV2lMaW5rIGZpcm13YXJlIHZlcnNpb24sIGFuIEFTQ0lJIHN0cmluZyB4LngueC54LAorCSAqIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgY3VycmVudCBmaXJtd2FyZS4KKwkgKiBUaGUgbGVmdCBtb3N0IGRpZ2l0IGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBhCisJICogc2lnbmlmaWNhbnQgY2hhbmdlIGlzIG1hZGUgdG8gdGhlIGZpcm13YXJlLCBzdWNoIGFzCisJICogY29kZSByZWRlc2lnbiBvciBuZXcgcGxhdGZvcm0gc3VwcG9ydC4KKwkgKiBUaGUgc2Vjb25kIGRpZ2l0IGlzIGluY3JlbWVudGVkIHdoZW4gbWFqb3IgZW5oYW5jZW1lbnRzCisJICogYXJlIGFkZGVkIG9yIG1ham9yIGZpeGVzIGFyZSBtYWRlLgorCSAqIFRoZSB0aGlyZCBkaWdpdCBpcyBpbmNyZW1lbnRlZCBmb3IgZWFjaCBHQSByZWxlYXNlLgorCSAqIFRoZSBmb3VydGggZGlnaXQgaXMgaW5jcmVtZW50ZWQgZm9yIGVhY2ggYnVpbGQuCisJICogVGhlIGZpcnN0IHR3byBkaWdpdHMgaWRlbnRpZnkgYSBmaXJtd2FyZSByZWxlYXNlIHZlcnNpb24sCisJICogaW4gb3RoZXIgd29yZHMsIGEgdW5pcXVlIHNldCBvZiBmZWF0dXJlcy4KKwkgKiBUaGUgZmlyc3QgdGhyZWUgZGlnaXRzIGlkZW50aWZ5IGEgR0EgcmVsZWFzZS4KKwkgKi8KKwljaGFyIGZ3X3ZlcnNpb25bMjBdOworCisJLyoKKwkgKiBUaGlzIDQgYnl0ZSBmaWVsZCBzcGVjaWZpZXMgdGhlIFdpTGluayBoYXJkd2FyZSB2ZXJzaW9uLgorCSAqIGJpdHMgMCAgLSAxNTogUmVzZXJ2ZWQuCisJICogYml0cyAxNiAtIDIzOiBWZXJzaW9uIElEIC0gVGhlIFdpTGluayB2ZXJzaW9uIElECisJICogICAgICAgICAgICAgICgxID0gZmlyc3Qgc3BpbiwgMiA9IHNlY29uZCBzcGluLCBhbmQgc28gb24pLgorCSAqIGJpdHMgMjQgLSAzMTogQ2hpcCBJRCAtIFRoZSBXaUxpbmsgY2hpcCBJRC4KKwkgKi8KKwl1MzIgaHdfdmVyc2lvbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIHdsMTI1MV9wc21fbW9kZSB7CisJLyogQWN0aXZlIG1vZGUgKi8KKwlXTDEyNTFfUFNNX0NBTSA9IDAsCisKKwkvKiBQb3dlciBzYXZlIG1vZGUgKi8KKwlXTDEyNTFfUFNNX1BTID0gMSwKKworCS8qIEV4dHJlbWUgbG93IHBvd2VyICovCisJV0wxMjUxX1BTTV9FTFAgPSAyLAorfTsKKworc3RydWN0IGFjeF9zbGVlcF9hdXRoIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwkvKiBUaGUgc2xlZXAgbGV2ZWwgYXV0aG9yaXphdGlvbiBvZiB0aGUgZGV2aWNlLiAqLworCS8qIDAgLSBBbHdheXMgYWN0aXZlKi8KKwkvKiAxIC0gUG93ZXIgZG93biBtb2RlOiBsaWdodCAvIGZhc3Qgc2xlZXAqLworCS8qIDIgLSBFTFAgbW9kZTogRGVlcCAvIE1heCBzbGVlcCovCisJdTggIHNsZWVwX2F1dGg7CisJdTggIHBhZGRpbmdbM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSB7CisJSE9TVElGX1BDSV9NQVNURVJfSE9TVF9JTkRJUkVDVCwKKwlIT1NUSUZfUENJX01BU1RFUl9IT1NUX0RJUkVDVCwKKwlIT1NUSUZfU0xBVkUsCisJSE9TVElGX1BLVF9SSU5HLAorCUhPU1RJRl9ET05UQ0FSRSA9IDB4RkYKK307CisKKyNkZWZpbmUgREVGQVVMVF9VQ0FTVF9QUklPUklUWSAgICAgICAgICAwCisjZGVmaW5lIERFRkFVTFRfUlhfUV9QUklPUklUWSAgICAgICAgICAgMAorI2RlZmluZSBERUZBVUxUX05VTV9TVEFUSU9OUyAgICAgICAgICAgIDEKKyNkZWZpbmUgREVGQVVMVF9SWFFfUFJJT1JJVFkgICAgICAgICAgICAwIC8qIGxvdyAwIC4uIDE1IGhpZ2ggICovCisjZGVmaW5lIERFRkFVTFRfUlhRX1RZUEUgICAgICAgICAgICAgICAgMHgwNyAgICAvKiBBbGwgZnJhbWVzLCBEYXRhL0N0cmwvTWdtdCAqLworI2RlZmluZSBUUkFDRV9CVUZGRVJfTUFYX1NJWkUgICAgICAgICAgIDI1NgorCisjZGVmaW5lICBEUF9SWF9QQUNLRVRfUklOR19DSFVOS19TSVpFIDE2MDAKKyNkZWZpbmUgIERQX1RYX1BBQ0tFVF9SSU5HX0NIVU5LX1NJWkUgMTYwMAorI2RlZmluZSAgRFBfUlhfUEFDS0VUX1JJTkdfQ0hVTktfTlVNIDIKKyNkZWZpbmUgIERQX1RYX1BBQ0tFVF9SSU5HX0NIVU5LX05VTSAyCisjZGVmaW5lICBEUF9UWF9DT01QTEVURV9USU1FX09VVCAyMAorI2RlZmluZSAgRldfVFhfQ01QTFRfQkxPQ0tfU0laRSAxNgorCitzdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXMgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXUxNiByeF9wYWNrZXRfcmluZ19jaHVua19zaXplOworCXUxNiB0eF9wYWNrZXRfcmluZ19jaHVua19zaXplOworCisJdTggcnhfcGFja2V0X3JpbmdfY2h1bmtfbnVtOworCXU4IHR4X3BhY2tldF9yaW5nX2NodW5rX251bTsKKworCS8qCisJICogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IGNhbiBiZSBnYXRoZXJlZAorCSAqIGluIHRoZSBUWCBjb21wbGV0ZSByaW5nIGJlZm9yZSBhbiBpbnRlcnJ1cHQKKwkgKiBpcyBnZW5lcmF0ZWQuCisJICovCisJdTggdHhfY29tcGxldGVfdGhyZXNob2xkOworCisJLyogTnVtYmVyIG9mIHBlbmRpbmcgVFggY29tcGxldGUgZW50cmllcyBpbiBjeWNsaWMgcmluZy4qLworCXU4IHR4X2NvbXBsZXRlX3JpbmdfZGVwdGg7CisKKwkvKgorCSAqIE1heCBudW0gbWljcm9zZWNvbmRzIHNpbmNlIGEgcGFja2V0IGVudGVycyB0aGUgVFgKKwkgKiBjb21wbGV0ZSByaW5nIHVudGlsIGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuCisJICovCisJdTMyIHR4X2NvbXBsZXRlX3RpbWVvdXQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXNfcmVzcCB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTE2IHJ4X3BhY2tldF9yaW5nX2NodW5rX3NpemU7CisJdTE2IHR4X3BhY2tldF9yaW5nX2NodW5rX3NpemU7CisKKwl1OCByeF9wYWNrZXRfcmluZ19jaHVua19udW07CisJdTggdHhfcGFja2V0X3JpbmdfY2h1bmtfbnVtOworCisJdTggcGFkWzJdOworCisJdTMyIHJ4X3BhY2tldF9yaW5nX2FkZHI7CisJdTMyIHR4X3BhY2tldF9yaW5nX2FkZHI7CisKKwl1MzIgcnhfY29udHJvbF9hZGRyOworCXUzMiB0eF9jb250cm9sX2FkZHI7CisKKwl1MzIgdHhfY29tcGxldGVfYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFRYX01TRFVfTElGRVRJTUVfTUlOICAgICAgIDAKKyNkZWZpbmUgVFhfTVNEVV9MSUZFVElNRV9NQVggICAgICAgMzAwMAorI2RlZmluZSBUWF9NU0RVX0xJRkVUSU1FX0RFRiAgICAgICA1MTIKKyNkZWZpbmUgUlhfTVNEVV9MSUZFVElNRV9NSU4gICAgICAgMAorI2RlZmluZSBSWF9NU0RVX0xJRkVUSU1FX01BWCAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFJYX01TRFVfTElGRVRJTUVfREVGICAgICAgIDUxMjAwMAorCitzdHJ1Y3QgYWN4X3J4X21zZHVfbGlmZXRpbWUgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCS8qCisJICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUsIGluIFRVLCBiZWZvcmUgdGhlCisJICogZmlybXdhcmUgZGlzY2FyZHMgdGhlIE1TRFUuCisJICovCisJdTMyIGxpZmV0aW1lOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBSWCBDb25maWcgT3B0aW9ucyBUYWJsZQorICogQml0CQlEZWZpbml0aW9uCisgKiA9PT0JCT09PT09PT09PT0KKyAqIDMxOjE0CQlSZXNlcnZlZAorICogMTMJCUNvcHkgUlggU3RhdHVzIC0gd2hlbiBzZXQsIHdyaXRlIHRocmVlIHJlY2VpdmUgc3RhdHVzIHdvcmRzCisgKiAJIAl0byB0b3Agb2YgcngnZCBNUERVcy4KKyAqIAkJV2hlbiBjbGVhcmVkLCBkbyBub3Qgd3JpdGUgdGhyZWUgc3RhdHVzIHdvcmRzIChhZGRlZCByZXYgMS41KQorICogMTIJCVJlc2VydmVkCisgKiAxMQkJUlggQ29tcGxldGUgdXBvbiBGQ1MgZXJyb3IgLSB3aGVuIHNldCwgZ2l2ZSByeCBjb21wbGV0ZQorICoJIAlpbnRlcnJ1cHQgZm9yIEZDUyBlcnJvcnMsIGFmdGVyIHRoZSByeCBmaWx0ZXJpbmcsIGUuZy4gdW5pY2FzdAorICoJIAlmcmFtZXMgbm90IHRvIHVzIHdpdGggRkNTIGVycm9yIHdpbGwgbm90IGdlbmVyYXRlIGFuIGludGVycnVwdC4KKyAqIDEwCQlTU0lEIEZpbHRlciBFbmFibGUgLSBXaGVuIHNldCwgdGhlIFdpTGluayBkaXNjYXJkcyBhbGwgYmVhY29uLAorICoJICAgICAgICBwcm9iZSByZXF1ZXN0LCBhbmQgcHJvYmUgcmVzcG9uc2UgZnJhbWVzIHdpdGggYW4gU1NJRCB0aGF0IGRvZXMKKyAqCQlub3QgbWF0Y2ggdGhlIFNTSUQgc3BlY2lmaWVkIGJ5IHRoZSBob3N0IGluIHRoZSBTVEFSVC9KT0lOCisgKgkJY29tbWFuZC4KKyAqCQlXaGVuIGNsZWFyLCB0aGUgV2lMaW5rIHJlY2VpdmVzIGZyYW1lcyB3aXRoIGFueSBTU0lELgorICogOQkJQnJvYWRjYXN0IEZpbHRlciBFbmFibGUgLSBXaGVuIHNldCwgdGhlIFdpTGluayBkaXNjYXJkcyBhbGwKKyAqIAkgCWJyb2FkY2FzdCBmcmFtZXMuIFdoZW4gY2xlYXIsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIHJlY2VpdmVkCisgKgkJYnJvYWRjYXN0IGZyYW1lcy4KKyAqIDg6NgkJUmVzZXJ2ZWQKKyAqIDUJCUJTU0lEIEZpbHRlciBFbmFibGUgLSBXaGVuIHNldCwgdGhlIFdpTGluayBkaXNjYXJkcyBhbnkgZnJhbWVzCisgKiAJIAl3aXRoIGEgQlNTSUQgdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgQlNTSUQgc3BlY2lmaWVkIGJ5IHRoZQorICoJCWhvc3QuCisgKgkJV2hlbiBjbGVhciwgdGhlIFdpTGluayByZWNlaXZlcyBmcmFtZXMgZnJvbSBhbnkgQlNTSUQuCisgKiA0CQlNQUMgQWRkciBGaWx0ZXIgLSBXaGVuIHNldCwgdGhlIFdpTGluayBkaXNjYXJkcyBhbnkgZnJhbWVzCisgKiAJIAl3aXRoIGEgZGVzdGluYXRpb24gYWRkcmVzcyB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZSBNQUMgYWRkcmVzcworICoJCW9mIHRoZSBhZGFwdG9yLgorICoJCVdoZW4gY2xlYXIsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgZnJhbWVzIGRlc3RpbmVkIHRvIGFueSBNQUMKKyAqCQlhZGRyZXNzLgorICogMwkJUHJvbWlzY3VvdXMgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgdmFsaWQgZnJhbWVzCisgKiAJIAkoaS5lLiwgYWxsIGZyYW1lcyB0aGF0IHBhc3MgdGhlIEZDUyBjaGVjaykuCisgKgkJV2hlbiBjbGVhciwgb25seSBmcmFtZXMgdGhhdCBwYXNzIHRoZSBvdGhlciBmaWx0ZXJzIHNwZWNpZmllZAorICoJCWFyZSByZWNlaXZlZC4KKyAqIDIJCUZDUyAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIGluY2x1ZGVzIHRoZSBGQ1Mgd2l0aCB0aGUgcmVjZWl2ZWQKKyAqCSAJZnJhbWUuCisgKgkJV2hlbiBjbGVhcmVkLCB0aGUgRkNTIGlzIGRpc2NhcmRlZC4KKyAqIDEJCVBMQ1AgaGVhZGVyIC0gV2hlbiBzZXQsIHdyaXRlIGFsbCBkYXRhIGZyb20gYmFzZWJhbmQgdG8gZnJhbWUKKyAqIAkgCWJ1ZmZlciBpbmNsdWRpbmcgUEhZIGhlYWRlci4KKyAqIDAJCVJlc2VydmVkIC0gQWx3YXlzIGVxdWFsIHRvIDAuCisgKgorICogUlggRmlsdGVyIE9wdGlvbnMgVGFibGUKKyAqIEJpdAkJRGVmaW5pdGlvbgorICogPT09CQk9PT09PT09PT09CisgKiAzMToxMgkJUmVzZXJ2ZWQgLSBBbHdheXMgZXF1YWwgdG8gMC4KKyAqIDExCQlBc3NvY2lhdGlvbiAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBhc3NvY2lhdGlvbgorICogCSAJcmVsYXRlZCBmcmFtZXMgKGFzc29jaWF0aW9uIHJlcXVlc3QvcmVzcG9uc2UsIHJlYXNzb2NhdGlvbgorICoJCXJlcXVlc3QvcmVzcG9uc2UsIGFuZCBkaXNhc3NvY2lhdGlvbikuIFdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcworICoJCWFyZSBkaXNjYXJkZWQuCisgKiAxMAkJQXV0aC9EZSBhdXRoIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIGF1dGhlbnRpY2F0aW9uCisgKiAJIAlhbmQgZGUtYXV0aGVudGljYXRpb24gZnJhbWVzLiBXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlCisgKgkJZGlzY2FyZGVkLgorICogOQkJQmVhY29uIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIGJlYWNvbiBmcmFtZXMuCisgKiAJIAlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KKyAqIDgJCUNvbnRlbnRpb24gRnJlZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBjb250ZW50aW9uCisgKiAJIAlmcmVlIGZyYW1lcy4KKyAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KKyAqIDcJCUNvbnRyb2wgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgY29udHJvbCBmcmFtZXMuCisgKiAJIAlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KKyAqIDYJCURhdGEgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgZGF0YSBmcmFtZXMuCisgKiAJIAlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KKyAqIDUJCUZDUyBFcnJvciAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGZyYW1lcyB0aGF0IGhhdmUgRkNTCisgKgkgCWVycm9ycy4KKyAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KKyAqIDQJCU1hbmFnZW1lbnQgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgbWFuYWdlbWVudAorICoJCWZyYW1lcy4KKyAqIAkgCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgorICogMwkJUHJvYmUgUmVxdWVzdCAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBwcm9iZSByZXF1ZXN0CisgKiAJIAlmcmFtZXMuCisgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCisgKiAyCQlQcm9iZSBSZXNwb25zZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBwcm9iZQorICogCQlyZXNwb25zZSBmcmFtZXMuCisgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCisgKiAxCQlSVFMvQ1RTL0FDSyAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBSVFMsIENUUyBhbmQgQUNLCisgKiAJIAlmcmFtZXMuCisgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCisgKiAwCQlSc3ZkIFR5cGUvU3ViIFR5cGUgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgZnJhbWVzCisgKiAJIAl0aGF0IGhhdmUgcmVzZXJ2ZWQgZnJhbWUgdHlwZXMgYW5kIHN1YiB0eXBlcyBhcyBkZWZpbmVkIGJ5IHRoZQorICoJCTgwMi4xMSBzcGVjaWZpY2F0aW9uLgorICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgorICovCitzdHJ1Y3QgYWN4X3J4X2NvbmZpZyB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTMyIGNvbmZpZ19vcHRpb25zOworCXUzMiBmaWx0ZXJfb3B0aW9uczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIHsKKwlRT1NfQUNfQkUgPSAwLAorCVFPU19BQ19CSywKKwlRT1NfQUNfVkksCisJUU9TX0FDX1ZPLAorCVFPU19ISUdIRVNUX0FDX0lOREVYID0gUU9TX0FDX1ZPLAorfTsKKworI2RlZmluZSBNQVhfTlVNX09GX0FDICAgICAgICAgICAgIChRT1NfSElHSEVTVF9BQ19JTkRFWCsxKQorI2RlZmluZSBGSVJTVF9BQ19JTkRFWCAgICAgICAgICAgIFFPU19BQ19CRQorI2RlZmluZSBNQVhfTlVNX09GXzgwMl8xZF9UQUdTICAgIDgKKyNkZWZpbmUgQUNfUEFSQU1TX01BWF9UU0lEICAgICAgICAxNQorI2RlZmluZSBNQVhfQVBTRF9DT05GICAgICAgICAgICAgIDB4ZmZmZgorCisjZGVmaW5lICBRT1NfVFhfSElHSF9NSU4gICAgICAoMCkKKyNkZWZpbmUgIFFPU19UWF9ISUdIX01BWCAgICAgICgxMDApCisKKyNkZWZpbmUgIFFPU19UWF9ISUdIX0JLX0RFRiAgICgyNSkKKyNkZWZpbmUgIFFPU19UWF9ISUdIX0JFX0RFRiAgICgzNSkKKyNkZWZpbmUgIFFPU19UWF9ISUdIX1ZJX0RFRiAgICgzNSkKKyNkZWZpbmUgIFFPU19UWF9ISUdIX1ZPX0RFRiAgICgzNSkKKworI2RlZmluZSAgUU9TX1RYX0xPV19CS19ERUYgICAgKDE1KQorI2RlZmluZSAgUU9TX1RYX0xPV19CRV9ERUYgICAgKDI1KQorI2RlZmluZSAgUU9TX1RYX0xPV19WSV9ERUYgICAgKDI1KQorI2RlZmluZSAgUU9TX1RYX0xPV19WT19ERUYgICAgKDI1KQorCitzdHJ1Y3QgYWN4X3R4X3F1ZXVlX3Fvc19jb25maWcgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXU4IHFpZDsKKwl1OCBwYWRbM107CisKKwkvKiBNYXggbnVtYmVyIG9mIGJsb2NrcyBhbGxvd2QgaW4gdGhlIHF1ZXVlICovCisJdTE2IGhpZ2hfdGhyZXNob2xkOworCisJLyogTG93ZXN0IG1lbW9yeSBibG9ja3MgZ3VhcmFudGVlZCBmb3IgdGhpcyBxdWV1ZSAqLworCXUxNiBsb3dfdGhyZXNob2xkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3hfcGFja2V0X2RldGVjdGlvbiB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTMyIHRocmVzaG9sZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKK2VudW0gYWN4X3Nsb3RfdHlwZSB7CisJU0xPVF9USU1FX0xPTkcgPSAwLAorCVNMT1RfVElNRV9TSE9SVCA9IDEsCisJREVGQVVMVF9TTE9UX1RJTUUgPSBTTE9UX1RJTUVfU0hPUlQsCisJTUFYX1NMT1RfVElNRVMgPSAweEZGCit9OworCisjZGVmaW5lIFNUQVRJT05fV09ORV9JTkRFWCAwCisKK3N0cnVjdCBhY3hfc2xvdCB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTggd29uZV9pbmRleDsgLyogUmVzZXJ2ZWQgKi8KKwl1OCBzbG90X3RpbWU7CisJdTggcmVzZXJ2ZWRbNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisjZGVmaW5lIEFERFJFU1NfR1JPVVBfTUFYCSg4KQorI2RlZmluZSBBRERSRVNTX0dST1VQX01BWF9MRU4JKEVUSF9BTEVOICogQUREUkVTU19HUk9VUF9NQVgpCisKK3N0cnVjdCBhY3hfZG90MTFfZ3JwX2FkZHJfdGJsIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1OCBlbmFibGVkOworCXU4IG51bV9ncm91cHM7CisJdTggcGFkWzJdOworCXU4IG1hY190YWJsZVtBRERSRVNTX0dST1VQX01BWF9MRU5dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworI2RlZmluZSAgUlhfVElNRU9VVF9QU19QT0xMX01JTiAgICAwCisjZGVmaW5lICBSWF9USU1FT1VUX1BTX1BPTExfTUFYICAgICgyMDAwMDApCisjZGVmaW5lICBSWF9USU1FT1VUX1BTX1BPTExfREVGICAgICgxNSkKKyNkZWZpbmUgIFJYX1RJTUVPVVRfVVBTRF9NSU4gICAgICAgMAorI2RlZmluZSAgUlhfVElNRU9VVF9VUFNEX01BWCAgICAgICAoMjAwMDAwKQorI2RlZmluZSAgUlhfVElNRU9VVF9VUFNEX0RFRiAgICAgICAoMTUpCisKK3N0cnVjdCBhY3hfcnhfdGltZW91dCB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJLyoKKwkgKiBUaGUgbG9uZ2VzdCB0aW1lIHRoZSBTVEEgd2lsbCB3YWl0IHRvIHJlY2VpdmUKKwkgKiB0cmFmZmljIGZyb20gdGhlIEFQIGFmdGVyIGEgUFMtcG9sbCBoYXMgYmVlbgorCSAqIHRyYW5zbWl0dGVkLgorCSAqLworCXUxNiBwc19wb2xsX3RpbWVvdXQ7CisKKwkvKgorCSAqIFRoZSBsb25nZXN0IHRpbWUgdGhlIFNUQSB3aWxsIHdhaXQgdG8gcmVjZWl2ZQorCSAqIHRyYWZmaWMgZnJvbSB0aGUgQVAgYWZ0ZXIgYSBmcmFtZSBoYXMgYmVlbiBzZW50CisJICogZnJvbSBhbiBVUFNEIGVuYWJsZWQgcXVldWUuCisJICovCisJdTE2IHVwc2RfdGltZW91dDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFJUU19USFJFU0hPTERfTUlOICAgICAgICAgICAgICAwCisjZGVmaW5lIFJUU19USFJFU0hPTERfTUFYICAgICAgICAgICAgICA0MDk2CisjZGVmaW5lIFJUU19USFJFU0hPTERfREVGICAgICAgICAgICAgICAyMzQ3CisKK3N0cnVjdCBhY3hfcnRzX3RocmVzaG9sZCB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTE2IHRocmVzaG9sZDsKKwl1OCBwYWRbMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9iZWFjb25fZmlsdGVyX29wdGlvbiB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTggZW5hYmxlOworCisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGJlYWNvbnMgd2l0aG91dCB0aGUgdW5pY2FzdCBUSU0KKwkgKiBiaXQgc2V0IHRoYXQgdGhlIGZpcm13YXJlIGJ1ZmZlcnMgYmVmb3JlCisJICogc2lnbmFsaW5nIHRoZSBob3N0IGFib3V0IHJlYWR5IGZyYW1lcy4KKwkgKiBXaGVuIHNldCB0byAwIGFuZCB0aGUgZmlsdGVyIGlzIGVuYWJsZWQsIGJlYWNvbnMKKwkgKiB3aXRob3V0IHRoZSB1bmljYXN0IFRJTSBiaXQgc2V0IGFyZSBkcm9wcGVkLgorCSAqLworCXU4IG1heF9udW1fYmVhY29uczsKKwl1OCBwYWRbMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIEFDWEJlYWNvbkZpbHRlckVudHJ5IChub3QgMjIxKQorICogQnl0ZSBPZmZzZXQgICAgIFNpemUgKEJ5dGVzKSAgICBEZWZpbml0aW9uCisgKiA9PT09PT09PT09PSAgICAgPT09PT09PT09PT09ICAgID09PT09PT09PT0KKyAqIDAJCQkJMSAgICAgICAgICAgICAgIElFIGlkZW50aWZpZXIKKyAqIDEgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgVHJlYXRtZW50IGJpdCBtYXNrCisgKgorICogQUNYQmVhY29uRmlsdGVyRW50cnkgKDIyMSkKKyAqIEJ5dGUgT2Zmc2V0ICAgICBTaXplIChCeXRlcykgICAgRGVmaW5pdGlvbgorICogPT09PT09PT09PT0gICAgID09PT09PT09PT09PSAgICA9PT09PT09PT09CisgKiAwICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIElFIGlkZW50aWZpZXIKKyAqIDEgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgVHJlYXRtZW50IGJpdCBtYXNrCisgKiAyICAgICAgICAgICAgICAgMyAgICAgICAgICAgICAgIE9VSQorICogNSAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICBUeXBlCisgKiA2ICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgIFZlcnNpb24KKyAqCisgKgorICogVHJlYXRtZW50IGJpdCBtYXNrIC0gVGhlIGluZm9ybWF0aW9uIGVsZW1lbnQgaGFuZGxpbmc6CisgKiBiaXQgMCAtIFRoZSBpbmZvcm1hdGlvbiBlbGVtZW50IGlzIGNvbXBhcmVkIGFuZCB0cmFuc2ZlcnJlZAorICogaW4gY2FzZSBvZiBjaGFuZ2UuCisgKiBiaXQgMSAtIFRoZSBpbmZvcm1hdGlvbiBlbGVtZW50IGlzIHRyYW5zZmVycmVkIHRvIHRoZSBob3N0CisgKiB3aXRoIGVhY2ggYXBwZWFyYW5jZSBvciBkaXNhcHBlYXJhbmNlLgorICogTm90ZSB0aGF0IGJvdGggYml0cyBjYW4gYmUgc2V0IGF0IHRoZSBzYW1lIHRpbWUuCisgKi8KKyNkZWZpbmUJQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfSUVfTlVNCQkgICAgICAgKDMyKQorI2RlZmluZSBCRUFDT05fRklMVEVSX1RBQkxFX01BWF9WRU5ET1JfU1BFQ0lGSUNfSUVfTlVNICg2KQorI2RlZmluZSBCRUFDT05fRklMVEVSX1RBQkxFX0lFX0VOVFJZX1NJWkUJICAgICAgICgyKQorI2RlZmluZSBCRUFDT05fRklMVEVSX1RBQkxFX0VYVFJBX1ZFTkRPUl9TUEVDSUZJQ19JRV9TSVpFICg2KQorI2RlZmluZSBCRUFDT05fRklMVEVSX1RBQkxFX01BWF9TSVpFICgoQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfSUVfTlVNICogXAorCQkJICAgIEJFQUNPTl9GSUxURVJfVEFCTEVfSUVfRU5UUllfU0laRSkgKyBcCisJCQkgICAoQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfVkVORE9SX1NQRUNJRklDX0lFX05VTSAqIFwKKwkJCSAgICBCRUFDT05fRklMVEVSX1RBQkxFX0VYVFJBX1ZFTkRPUl9TUEVDSUZJQ19JRV9TSVpFKSkKKworc3RydWN0IGFjeF9iZWFjb25fZmlsdGVyX2llX3RhYmxlIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1OCBudW1faWU7CisJdTggdGFibGVbQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfU0laRV07CisJdTggcGFkWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0geworCVNHX0VOQUJMRSA9IDAsCisJU0dfRElTQUJMRSwKKwlTR19TRU5TRV9OT19BQ1RJVklUWSwKKwlTR19TRU5TRV9BQ1RJVkUKK307CisKK3N0cnVjdCBhY3hfYnRfd2xhbl9jb2V4IHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwkvKgorCSAqIDAgLT4gUFRBIGVuYWJsZWQKKwkgKiAxIC0+IFBUQSBkaXNhYmxlZAorCSAqIDIgLT4gc2Vuc2Ugbm8gYWN0aXZlIG1vZGUsIGkuZS4KKwkgKiAgICAgIGFuIGludGVycnVwdCBpcyBzZW50IHVwb24KKwkgKiAgICAgIEJUIGFjdGl2aXR5LgorCSAqIDMgLT4gUFRBIGlzIHN3aXRjaGVkIG9uIGluIHJlc3BvbnNlCisJICogICAgICB0byB0aGUgaW50ZXJydXB0IHNlbmRpbmcuCisJICovCisJdTggZW5hYmxlOworCXU4IHBhZFszXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFBUQV9BTlRFTk5BX1RZUEVfREVGCQkgICgwKQorI2RlZmluZSBQVEFfQlRfSFBfTUFYVElNRV9ERUYJCSAgKDIwMDApCisjZGVmaW5lIFBUQV9XTEFOX0hQX01BWF9USU1FX0RFRgkgICg1MDAwKQorI2RlZmluZSBQVEFfU0VOU0VfRElTQUJMRV9USU1FUl9ERUYJICAoMTM1MCkKKyNkZWZpbmUgUFRBX1BST1RFQ1RJVkVfUlhfVElNRV9ERUYJICAoMTUwMCkKKyNkZWZpbmUgUFRBX1BST1RFQ1RJVkVfVFhfVElNRV9ERUYJICAoMTUwMCkKKyNkZWZpbmUgUFRBX1RJTUVPVVRfTkVYVF9CVF9MUF9QQUNLRVRfREVGICgzMDAwKQorI2RlZmluZSBQVEFfU0lHTkFMSU5HX1RZUEVfREVGCQkgICgxKQorI2RlZmluZSBQVEFfQUZIX0xFVkVSQUdFX09OX0RFRgkJICAoMCkKKyNkZWZpbmUgUFRBX05VTUJFUl9RVUlFVF9DWUNMRV9ERUYJICAoMCkKKyNkZWZpbmUgUFRBX01BWF9OVU1fQ1RTX0RFRgkJICAoMykKKyNkZWZpbmUgUFRBX05VTUJFUl9PRl9XTEFOX1BBQ0tFVFNfREVGCSAgKDIpCisjZGVmaW5lIFBUQV9OVU1CRVJfT0ZfQlRfUEFDS0VUU19ERUYJICAoMikKKyNkZWZpbmUgUFRBX1BST1RFQ1RJVkVfUlhfVElNRV9GQVNUX0RFRgkgICgxNTAwKQorI2RlZmluZSBQVEFfUFJPVEVDVElWRV9UWF9USU1FX0ZBU1RfREVGCSAgKDMwMDApCisjZGVmaW5lIFBUQV9DWUNMRV9USU1FX0ZBU1RfREVGCQkgICg4NzAwKQorI2RlZmluZSBQVEFfUlhfRk9SX0FWQUxBTkNIRV9ERUYJICAoNSkKKyNkZWZpbmUgUFRBX0VMUF9IUF9ERUYJCQkgICgwKQorI2RlZmluZSBQVEFfQU5USV9TVEFSVkVfUEVSSU9EX0RFRgkgICg1MDApCisjZGVmaW5lIFBUQV9BTlRJX1NUQVJWRV9OVU1fQ1lDTEVfREVGCSAgKDQpCisjZGVmaW5lIFBUQV9BTExPV19QQV9TRF9ERUYJCSAgKDEpCisjZGVmaW5lIFBUQV9USU1FX0JFRk9SRV9CRUFDT05fREVGCSAgKDYzMDApCisjZGVmaW5lIFBUQV9IUERNX01BWF9USU1FX0RFRgkJICAoMTYwMCkKKyNkZWZpbmUgUFRBX1RJTUVfT1VUX05FWFRfV0xBTl9ERUYJICAoMjU1MCkKKyNkZWZpbmUgUFRBX0FVVE9fTU9ERV9OT19DVFNfREVGCSAgKDApCisjZGVmaW5lIFBUQV9CVF9IUF9SRVNQRUNURURfREVGCQkgICgzKQorI2RlZmluZSBQVEFfV0xBTl9SWF9NSU5fUkFURV9ERUYJICAoMjQpCisjZGVmaW5lIFBUQV9BQ0tfTU9ERV9ERUYJCSAgKDEpCisKK3N0cnVjdCBhY3hfYnRfd2xhbl9jb2V4X3BhcmFtIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwkvKgorCSAqIFRoZSBtaW5pbXVtIHJhdGUgb2YgYSByZWNlaXZlZCBXTEFOIHBhY2tldCBpbiB0aGUgU1RBLAorCSAqIGR1cmluZyBwcm90ZWN0aXZlIG1vZGUsIG9mIHdoaWNoIGEgbmV3IEJULUhQIHJlcXVlc3QKKwkgKiBkdXJpbmcgdGhpcyBSeCB3aWxsIGFsd2F5cyBiZSByZXNwZWN0ZWQgYW5kIGdhaW4gdGhlIGFudGVubmEuCisJICovCisJdTMyIG1pbl9yYXRlOworCisJLyogTWF4IHRpbWUgdGhlIEJUIEhQIHdpbGwgYmUgcmVzcGVjdGVkLiAqLworCXUxNiBidF9ocF9tYXhfdGltZTsKKworCS8qIE1heCB0aW1lIHRoZSBXTEFOIEhQIHdpbGwgYmUgcmVzcGVjdGVkLiAqLworCXUxNiB3bGFuX2hwX21heF90aW1lOworCisJLyoKKwkgKiBUaGUgdGltZSBiZXR3ZWVuIHRoZSBsYXN0IEJUIGFjdGl2aXR5CisJICogYW5kIHRoZSBtb21lbnQgd2hlbiB0aGUgc2Vuc2UgbW9kZSByZXR1cm5zCisJICogdG8gU0VOU0VfSU5BQ1RJVkUuCisJICovCisJdTE2IHNlbnNlX2Rpc2FibGVfdGltZXI7CisKKwkvKiBUaW1lIGJlZm9yZSB0aGUgbmV4dCBCVCBIUCBpbnN0YW5jZSAqLworCXUxNiByeF90aW1lX2J0X2hwOworCXUxNiB0eF90aW1lX2J0X2hwOworCisJLyogcmFuZ2U6IDEwLTIwMDAwICAgIGRlZmF1bHQ6IDE1MDAgKi8KKwl1MTYgcnhfdGltZV9idF9ocF9mYXN0OworCXUxNiB0eF90aW1lX2J0X2hwX2Zhc3Q7CisKKwkvKiByYW5nZTogMjAwMC02NTUzNSAgZGVmYXVsdDogODcwMCAqLworCXUxNiB3bGFuX2N5Y2xlX2Zhc3Q7CisKKwkvKiByYW5nZTogMCAtIDE1MDAwIChNc2VjKSBkZWZhdWx0OiAxMDAwICovCisJdTE2IGJ0X2FudGlfc3RhcnZhdGlvbl9wZXJpb2Q7CisKKwkvKiByYW5nZSA0MDAtMTAwMDAoVXNlYykgZGVmYXVsdDogMzAwMCAqLworCXUxNiBuZXh0X2J0X2xwX3BhY2tldDsKKworCS8qIERlYWZ1bHQ6IHdvcnN0IGNhc2UgZm9yIEJUIERINSB0cmFmZmljICovCisJdTE2IHdha2VfdXBfYmVhY29uOworCisJLyogcmFuZ2U6IDAtNTAwMDAoVXNlYykgZGVmYXVsdDogMTA1MCAqLworCXUxNiBocF9kbV9tYXhfZ3VhcmRfdGltZTsKKworCS8qCisJICogVGhpcyBpcyB0byBwcmV2ZW50IGJvdGggQlQgJiBXTEFOIGFudGVubmEKKwkgKiBzdGFydmF0aW9uLgorCSAqIFJhbmdlOiAxMDAtNTAwMDAoVXNlYykgZGVmYXVsdDoyNTUwCisJICovCisJdTE2IG5leHRfd2xhbl9wYWNrZXQ7CisKKwkvKiAwIC0+IHNoYXJlZCBhbnRlbm5hICovCisJdTggYW50ZW5uYV90eXBlOworCisJLyoKKwkgKiAwIC0+IFRJIGxlZ2FjeQorCSAqIDEgLT4gUGFsYXUKKwkgKi8KKwl1OCBzaWduYWxfdHlwZTsKKworCS8qCisJICogQlQgQUZIIHN0YXR1cworCSAqIDAgLT4gbm8gQUZICisJICogMSAtPiBmcm9tIGRlZGljYXRlZCBHUElPCisJICogMiAtPiBBRkggb24gKGZyb20gaG9zdCkKKwkgKi8KKwl1OCBhZmhfbGV2ZXJhZ2Vfb247CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgY3ljbGVzIGR1cmluZyB3aGljaCBubworCSAqIFRYIHdpbGwgYmUgc2VudCBhZnRlciAxIGN5Y2xlIG9mIFJYCisJICogdHJhbnNhY3Rpb24gaW4gcHJvdGVjdGl2ZSBtb2RlCisJICovCisJdTggcXVpZXRfY3ljbGVfbnVtOworCisJLyoKKwkgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgQ1RTcyB0aGF0IHdpbGwKKwkgKiBiZSBzZW50IGZvciByZWNlaXZpbmcgUlggcGFja2V0IGluCisJICogcHJvdGVjdGl2ZSBtb2RlCisJICovCisJdTggbWF4X2N0czsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBXTEFOIHBhY2tldHMKKwkgKiB0cmFuc2ZlcnJlZCBpbiBjb21tb24gbW9kZSBiZWZvcmUKKwkgKiBzd2l0Y2hpbmcgdG8gQlQuCisJICovCisJdTggd2xhbl9wYWNrZXRzX251bTsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBCVCBwYWNrZXRzCisJICogdHJhbnNmZXJyZWQgaW4gY29tbW9uIG1vZGUgYmVmb3JlCisJICogc3dpdGNoaW5nIHRvIFdMQU4uCisJICovCisJdTggYnRfcGFja2V0c19udW07CisKKwkvKiByYW5nZTogMS0yNTUgIGRlZmF1bHQ6IDUgKi8KKwl1OCBtaXNzZWRfcnhfYXZhbGFuY2hlOworCisJLyogcmFuZ2U6IDAtMSAgICBkZWZhdWx0OiAxICovCisJdTggd2xhbl9lbHBfaHA7CisKKwkvKiByYW5nZTogMCAtIDE1ICBkZWZhdWx0OiA0ICovCisJdTggYnRfYW50aV9zdGFydmF0aW9uX2N5Y2xlczsKKworCXU4IGFja19tb2RlX2R1YWxfYW50OworCisJLyoKKwkgKiBBbGxvdyBQQV9TRCBhc3NlcnRpb24vZGUtYXNzZXJ0aW9uCisJICogZHVyaW5nIGVuYWJsZWQgQlQgYWN0aXZpdHkuCisJICovCisJdTggcGFfc2RfZW5hYmxlOworCisJLyoKKwkgKiBFbmFibGUvRGlzYWJsZSBQVEEgaW4gYXV0byBtb2RlOgorCSAqIFN1cHBvcnQgQm90aCBBY3RpdmUgJiBQLlMgbW9kZXMKKwkgKi8KKwl1OCBwdGFfYXV0b19tb2RlX2VuYWJsZTsKKworCS8qIHJhbmdlOiAwIC0gMjAgIGRlZmF1bHQ6IDEgKi8KKwl1OCBidF9ocF9yZXNwZWN0ZWRfbnVtOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgQ0NBX1RIUlNIX0VOQUJMRV9FTkVSR1lfRCAgICAgICAweDE0MEEKKyNkZWZpbmUgQ0NBX1RIUlNIX0RJU0FCTEVfRU5FUkdZX0QgICAgICAweEZGRUYKKworc3RydWN0IGFjeF9lbmVyZ3lfZGV0ZWN0aW9uIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwkvKiBUaGUgUlggQ2xlYXIgQ2hhbm5lbCBBc3Nlc3NtZW50IHRocmVzaG9sZCBpbiB0aGUgUEhZICovCisJdTE2IHJ4X2NjYV90aHJlc2hvbGQ7CisJdTggdHhfZW5lcmd5X2RldGVjdGlvbjsKKwl1OCBwYWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBCQ05fUlhfVElNRU9VVF9ERUZfVkFMVUUgICAgICAgIDEwMDAwCisjZGVmaW5lIEJST0FEQ0FTVF9SWF9USU1FT1VUX0RFRl9WQUxVRSAgMjAwMDAKKyNkZWZpbmUgUlhfQlJPQURDQVNUX0lOX1BTX0RFRl9WQUxVRSAgICAxCisjZGVmaW5lIENPTlNFQ1VUSVZFX1BTX1BPTExfRkFJTFVSRV9ERUYgNAorCitzdHJ1Y3QgYWN4X2JlYWNvbl9icm9hZGNhc3QgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXUxNiBiZWFjb25fcnhfdGltZW91dDsKKwl1MTYgYnJvYWRjYXN0X3RpbWVvdXQ7CisKKwkvKiBFbmFibGVzIHJlY2VpdmluZyBvZiBicm9hZGNhc3QgcGFja2V0cyBpbiBQUyBtb2RlICovCisJdTggcnhfYnJvYWRjYXN0X2luX3BzOworCisJLyogQ29uc2VjdXRpdmUgUFMgUG9sbCBmYWlsdXJlcyBiZWZvcmUgdXBkYXRpbmcgdGhlIGhvc3QgKi8KKwl1OCBwc19wb2xsX3RocmVzaG9sZDsKKwl1OCBwYWRbMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9ldmVudF9tYXNrIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1MzIgZXZlbnRfbWFzazsKKwl1MzIgaGlnaF9ldmVudF9tYXNrOyAvKiBVbnVzZWQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIENGR19SWF9GQ1MJCUJJVCgyKQorI2RlZmluZSBDRkdfUlhfQUxMX0dPT0QJCUJJVCgzKQorI2RlZmluZSBDRkdfVU5JX0ZJTFRFUl9FTglCSVQoNCkKKyNkZWZpbmUgQ0ZHX0JTU0lEX0ZJTFRFUl9FTglCSVQoNSkKKyNkZWZpbmUgQ0ZHX01DX0ZJTFRFUl9FTglCSVQoNikKKyNkZWZpbmUgQ0ZHX01DX0FERFIwX0VOCQlCSVQoNykKKyNkZWZpbmUgQ0ZHX01DX0FERFIxX0VOCQlCSVQoOCkKKyNkZWZpbmUgQ0ZHX0JDX1JFSkVDVF9FTglCSVQoOSkKKyNkZWZpbmUgQ0ZHX1NTSURfRklMVEVSX0VOCUJJVCgxMCkKKyNkZWZpbmUgQ0ZHX1JYX0lOVF9GQ1NfRVJST1IJQklUKDExKQorI2RlZmluZSBDRkdfUlhfSU5UX0VOQ1JZUFRFRAlCSVQoMTIpCisjZGVmaW5lIENGR19SWF9XUl9SWF9TVEFUVVMJQklUKDEzKQorI2RlZmluZSBDRkdfUlhfRklMVEVSX05VTFRJCUJJVCgxNCkKKyNkZWZpbmUgQ0ZHX1JYX1JFU0VSVkUJCUJJVCgxNSkKKyNkZWZpbmUgQ0ZHX1JYX1RJTUVTVEFNUF9UU0YJQklUKDE2KQorCisjZGVmaW5lIENGR19SWF9SU1ZfRU4JCUJJVCgwKQorI2RlZmluZSBDRkdfUlhfUkNUU19BQ0sJCUJJVCgxKQorI2RlZmluZSBDRkdfUlhfUFJTUF9FTgkJQklUKDIpCisjZGVmaW5lIENGR19SWF9QUkVRX0VOCQlCSVQoMykKKyNkZWZpbmUgQ0ZHX1JYX01HTVRfRU4JCUJJVCg0KQorI2RlZmluZSBDRkdfUlhfRkNTX0VSUk9SCUJJVCg1KQorI2RlZmluZSBDRkdfUlhfREFUQV9FTgkJQklUKDYpCisjZGVmaW5lIENGR19SWF9DVExfRU4JCUJJVCg3KQorI2RlZmluZSBDRkdfUlhfQ0ZfRU4JCUJJVCg4KQorI2RlZmluZSBDRkdfUlhfQkNOX0VOCQlCSVQoOSkKKyNkZWZpbmUgQ0ZHX1JYX0FVVEhfRU4JCUJJVCgxMCkKKyNkZWZpbmUgQ0ZHX1JYX0FTU09DX0VOCQlCSVQoMTEpCisKKyNkZWZpbmUgU0NBTl9QQVNTSVZFCQlCSVQoMCkKKyNkZWZpbmUgU0NBTl81R0haX0JBTkQJCUJJVCgxKQorI2RlZmluZSBTQ0FOX1RSSUdHRVJFRAkJQklUKDIpCisjZGVmaW5lIFNDQU5fUFJJT1JJVFlfSElHSAlCSVQoMykKKworc3RydWN0IGFjeF9md19nZW5fZnJhbWVfcmF0ZXMgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXU4IHR4X2N0cmxfZnJhbWVfcmF0ZTsgLyogUkFURV8qICovCisJdTggdHhfY3RybF9mcmFtZV9tb2Q7IC8qIENDS18qIG9yIFBCQ0NfKiAqLworCXU4IHR4X21ndF9mcmFtZV9yYXRlOworCXU4IHR4X21ndF9mcmFtZV9tb2Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogU1RBIE1BQyAqLworc3RydWN0IGFjeF9kb3QxMV9zdGF0aW9uX2lkIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1OCBtYWNbRVRIX0FMRU5dOworCXU4IHBhZFsyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWN4X2ZlYXR1cmVfY29uZmlnIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1MzIgb3B0aW9uczsKKwl1MzIgZGF0YV9mbG93X29wdGlvbnM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9jdXJyZW50X3R4X3Bvd2VyIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1OCAgY3VycmVudF90eF9wb3dlcjsKKwl1OCAgcGFkZGluZ1szXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWN4X2RvdDExX2RlZmF1bHRfa2V5IHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1OCBpZDsKKwl1OCBwYWRbM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF90c2ZfaW5mbyB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTMyIGN1cnJlbnRfdHNmX21zYjsKKwl1MzIgY3VycmVudF90c2ZfbHNiOworCXUzMiBsYXN0X1RCVFRfbXNiOworCXUzMiBsYXN0X1RCVFRfbHNiOworCXU4IGxhc3RfZHRpbV9jb3VudDsKKwl1OCBwYWRbM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSBhY3hfd2FrZV91cF9ldmVudCB7CisJV0FLRV9VUF9FVkVOVF9CRUFDT05fQklUTUFQCT0gMHgwMSwgLyogV2FrZSBvbiBldmVyeSBCZWFjb24qLworCVdBS0VfVVBfRVZFTlRfRFRJTV9CSVRNQVAJPSAweDAyLAkvKiBXYWtlIG9uIGV2ZXJ5IERUSU0qLworCVdBS0VfVVBfRVZFTlRfTl9EVElNX0JJVE1BUAk9IDB4MDQsIC8qIFdha2Ugb24gZXZlcnkgTnRoIERUSU0gKi8KKwlXQUtFX1VQX0VWRU5UX05fQkVBQ09OU19CSVRNQVAJPSAweDA4LCAvKiBXYWtlIG9uIGV2ZXJ5IE50aCBCZWFjb24gKi8KKwlXQUtFX1VQX0VWRU5UX0JJVFNfTUFTSwkJPSAweDBGCit9OworCitzdHJ1Y3QgYWN4X3dha2VfdXBfY29uZGl0aW9uIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1OCB3YWtlX3VwX2V2ZW50OyAvKiBPbmx5IG9uZSBiaXQgY2FuIGJlIHNldCAqLworCXU4IGxpc3Rlbl9pbnRlcnZhbDsKKwl1OCBwYWRbMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9haWQgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCS8qCisJICogVG8gYmUgc2V0IHdoZW4gYXNzb2NpYXRlZCB3aXRoIGFuIEFQLgorCSAqLworCXUxNiBhaWQ7CisJdTggcGFkWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0gYWN4X3ByZWFtYmxlX3R5cGUgeworCUFDWF9QUkVBTUJMRV9MT05HID0gMCwKKwlBQ1hfUFJFQU1CTEVfU0hPUlQgPSAxCit9OworCitzdHJ1Y3QgYWN4X3ByZWFtYmxlIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwkvKgorCSAqIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHRyYW5zbWl0cyB0aGUgZnJhbWVzIHdpdGggYSBzaG9ydCBwcmVhbWJsZSBhbmQKKwkgKiB3aGVuIGNsZWFyZWQsIHRoZSBXaUxpbmsgdHJhbnNtaXRzIHRoZSBmcmFtZXMgd2l0aCBhIGxvbmcgcHJlYW1ibGUuCisJICovCisJdTggcHJlYW1ibGU7CisJdTggcGFkZGluZ1szXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIGFjeF9jdHNwcm90ZWN0X3R5cGUgeworCUNUU1BST1RFQ1RfRElTQUJMRSA9IDAsCisJQ1RTUFJPVEVDVF9FTkFCTEUgPSAxCit9OworCitzdHJ1Y3QgYWN4X2N0c3Byb3RlY3QgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKwl1OCBjdHNwcm90ZWN0OworCXU4IHBhZGRpbmdbM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF90eF9zdGF0aXN0aWNzIHsKKwl1MzIgaW50ZXJuYWxfZGVzY19vdmVyZmxvdzsKK30gIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9yeF9zdGF0aXN0aWNzIHsKKwl1MzIgb3V0X29mX21lbTsKKwl1MzIgaGRyX292ZXJmbG93OworCXUzMiBod19zdHVjazsKKwl1MzIgZHJvcHBlZDsKKwl1MzIgZmNzX2VycjsKKwl1MzIgeGZyX2hpbnRfdHJpZzsKKwl1MzIgcGF0aF9yZXNldDsKKwl1MzIgcmVzZXRfY291bnRlcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWN4X2RtYV9zdGF0aXN0aWNzIHsKKwl1MzIgcnhfcmVxdWVzdGVkOworCXUzMiByeF9lcnJvcnM7CisJdTMyIHR4X3JlcXVlc3RlZDsKKwl1MzIgdHhfZXJyb3JzOworfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWN4X2lzcl9zdGF0aXN0aWNzIHsKKwkvKiBob3N0IGNvbW1hbmQgY29tcGxldGUgKi8KKwl1MzIgY21kX2NtcGx0OworCisJLyogZmlxaXNyKCkgKi8KKwl1MzIgZmlxczsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfUlhfSEVBREVSKSAqLworCXUzMiByeF9oZWFkZXJzOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19SWF9DTVBMVCkgKi8KKwl1MzIgcnhfY29tcGxldGVzOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19OT19SWF9CVUYpICovCisJdTMyIHJ4X21lbV9vdmVyZmxvdzsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfU19SWF9SRFkpICovCisJdTMyIHJ4X3JkeXM7CisKKwkvKiBpcnFpc3IoKSAqLworCXUzMiBpcnFzOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19UWF9QUk9DKSAqLworCXUzMiB0eF9wcm9jczsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfREVDUllQVF9ET05FKSAqLworCXUzMiBkZWNyeXB0X2RvbmU7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0RNQTApICovCisJdTMyIGRtYTBfZG9uZTsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfRE1BMSkgKi8KKwl1MzIgZG1hMV9kb25lOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19UWF9FWENfQ01QTFQpICovCisJdTMyIHR4X2V4Y2hfY29tcGxldGU7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0NPTU1BTkQpICovCisJdTMyIGNvbW1hbmRzOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19SWF9QUk9DKSAqLworCXUzMiByeF9wcm9jczsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfUE1fODAyKSAqLworCXUzMiBod19wbV9tb2RlX2NoYW5nZXM7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0FDS05PV0xFREdFKSAqLworCXUzMiBob3N0X2Fja25vd2xlZGdlczsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfUE1fUENJKSAqLworCXUzMiBwY2lfcG07CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0FDTV9XQUtFVVApICovCisJdTMyIHdha2V1cHM7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0xPV19SU1NJKSAqLworCXUzMiBsb3dfcnNzaTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWN4X3dlcF9zdGF0aXN0aWNzIHsKKwkvKiBXRVAgYWRkcmVzcyBrZXlzIGNvbmZpZ3VyZWQgKi8KKwl1MzIgYWRkcl9rZXlfY291bnQ7CisKKwkvKiBkZWZhdWx0IGtleXMgY29uZmlndXJlZCAqLworCXUzMiBkZWZhdWx0X2tleV9jb3VudDsKKworCXUzMiByZXNlcnZlZDsKKworCS8qIG51bWJlciBvZiB0aW1lcyB0aGF0IFdFUCBrZXkgbm90IGZvdW5kIG9uIGxvb2t1cCAqLworCXUzMiBrZXlfbm90X2ZvdW5kOworCisJLyogbnVtYmVyIG9mIHRpbWVzIHRoYXQgV0VQIGtleSBkZWNyeXB0aW9uIGZhaWxlZCAqLworCXUzMiBkZWNyeXB0X2ZhaWw7CisKKwkvKiBXRVAgcGFja2V0cyBkZWNyeXB0ZWQgKi8KKwl1MzIgcGFja2V0czsKKworCS8qIFdFUCBkZWNyeXB0IGludGVycnVwdHMgKi8KKwl1MzIgaW50ZXJydXB0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgQUNYX01JU1NFRF9CRUFDT05TX1NQUkVBRCAxMAorCitzdHJ1Y3QgYWN4X3B3cl9zdGF0aXN0aWNzIHsKKwkvKiB0aGUgYW1vdW50IG9mIGVudGVycyBpbnRvIHBvd2VyIHNhdmUgbW9kZSAoYm90aCBQRCAmIEVMUCkgKi8KKwl1MzIgcHNfZW50ZXI7CisKKwkvKiB0aGUgYW1vdW50IG9mIGVudGVycyBpbnRvIEVMUCBtb2RlICovCisJdTMyIGVscF9lbnRlcjsKKworCS8qIHRoZSBhbW91bnQgb2YgbWlzc2luZyBiZWFjb24gaW50ZXJydXB0cyB0byB0aGUgaG9zdCAqLworCXUzMiBtaXNzaW5nX2JjbnM7CisKKwkvKiB0aGUgYW1vdW50IG9mIHdha2Ugb24gaG9zdC1hY2Nlc3MgdGltZXMgKi8KKwl1MzIgd2FrZV9vbl9ob3N0OworCisJLyogdGhlIGFtb3VudCBvZiB3YWtlIG9uIHRpbWVyLWV4cGlyZSAqLworCXUzMiB3YWtlX29uX3RpbWVyX2V4cDsKKworCS8qIHRoZSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IHdlcmUgdHJhbnNtaXR0ZWQgd2l0aCBQUyBiaXQgc2V0ICovCisJdTMyIHR4X3dpdGhfcHM7CisKKwkvKiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHdpdGggUFMgYml0IGNsZWFyICovCisJdTMyIHR4X3dpdGhvdXRfcHM7CisKKwkvKiB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGJlYWNvbnMgKi8KKwl1MzIgcmN2ZF9iZWFjb25zOworCisJLyogdGhlIG51bWJlciBvZiBlbnRlcmluZyBpbnRvIFBvd2VyT24gKHBvd2VyIHNhdmUgb2ZmKSAqLworCXUzMiBwb3dlcl9zYXZlX29mZjsKKworCS8qIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbnRvIHBvd2VyIHNhdmUgbW9kZSAqLworCXUxNiBlbmFibGVfcHM7CisKKwkvKgorCSAqIHRoZSBudW1iZXIgb2YgZXhpdHMgZnJvbSBwb3dlciBzYXZlLCBub3QgaW5jbHVkaW5nIGZhaWxlZCBQUworCSAqIHRyYW5zaXRpb25zCisJICovCisJdTE2IGRpc2FibGVfcHM7CisKKwkvKgorCSAqIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIFRTRiBjb3VudGVyIHdhcyBhZGp1c3RlZCBiZWNhdXNlCisJICogb2YgZHJpZnQKKwkgKi8KKwl1MzIgZml4X3RzZl9wczsKKworCS8qIEdpdmVzIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHNwcmVhZCBjb250aW51b3VzIG1pc3NlZCBiZWFjb25zLgorCSAqIFRoZSAxNiBMU0IgYXJlIGRlZGljYXRlZCBmb3IgdGhlIFBTIG1vZGUuCisJICogVGhlIDE2IE1TQiBhcmUgZGVkaWNhdGVkIGZvciB0aGUgUFMgbW9kZS4KKwkgKiBjb250X21pc3NfYmNuc19zcHJlYWRbMF0gLSBzaW5nbGUgbWlzc2VkIGJlYWNvbi4KKwkgKiBjb250X21pc3NfYmNuc19zcHJlYWRbMV0gLSB0d28gY29udGludW91cyBtaXNzZWQgYmVhY29ucy4KKwkgKiBjb250X21pc3NfYmNuc19zcHJlYWRbMl0gLSB0aHJlZSBjb250aW51b3VzIG1pc3NlZCBiZWFjb25zLgorCSAqIC4uLgorCSAqIGNvbnRfbWlzc19iY25zX3NwcmVhZFs5XSAtIHRlbiBhbmQgbW9yZSBjb250aW51b3VzIG1pc3NlZCBiZWFjb25zLgorCSovCisJdTMyIGNvbnRfbWlzc19iY25zX3NwcmVhZFtBQ1hfTUlTU0VEX0JFQUNPTlNfU1BSRUFEXTsKKworCS8qIHRoZSBudW1iZXIgb2YgYmVhY29ucyBpbiBhd2FrZSBtb2RlICovCisJdTMyIHJjdmRfYXdha2VfYmVhY29uczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWN4X21pY19zdGF0aXN0aWNzIHsKKwl1MzIgcnhfcGt0czsKKwl1MzIgY2FsY19mYWlsdXJlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3hfYWVzX3N0YXRpc3RpY3MgeworCXUzMiBlbmNyeXB0X2ZhaWw7CisJdTMyIGRlY3J5cHRfZmFpbDsKKwl1MzIgZW5jcnlwdF9wYWNrZXRzOworCXUzMiBkZWNyeXB0X3BhY2tldHM7CisJdTMyIGVuY3J5cHRfaW50ZXJydXB0OworCXUzMiBkZWNyeXB0X2ludGVycnVwdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWN4X2V2ZW50X3N0YXRpc3RpY3MgeworCXUzMiBoZWFydF9iZWF0OworCXUzMiBjYWxpYnJhdGlvbjsKKwl1MzIgcnhfbWlzbWF0Y2g7CisJdTMyIHJ4X21lbV9lbXB0eTsKKwl1MzIgcnhfcG9vbDsKKwl1MzIgb29tX2xhdGU7CisJdTMyIHBoeV90cmFuc21pdF9lcnJvcjsKKwl1MzIgdHhfc3R1Y2s7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9wc19zdGF0aXN0aWNzIHsKKwl1MzIgcHNwb2xsX3RpbWVvdXRzOworCXUzMiB1cHNkX3RpbWVvdXRzOworCXUzMiB1cHNkX21heF9zcHRpbWU7CisJdTMyIHVwc2RfbWF4X2FwdHVybjsKKwl1MzIgcHNwb2xsX21heF9hcHR1cm47CisJdTMyIHBzcG9sbF91dGlsaXphdGlvbjsKKwl1MzIgdXBzZF91dGlsaXphdGlvbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWN4X3J4cGlwZV9zdGF0aXN0aWNzIHsKKwl1MzIgcnhfcHJlcF9iZWFjb25fZHJvcDsKKwl1MzIgZGVzY3JfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOworCXUzMiBiZWFjb25fYnVmZmVyX3RocmVzX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKKwl1MzIgbWlzc2VkX2JlYWNvbl9ob3N0X2ludF90cmlnX3J4X2RhdGE7CisJdTMyIHR4X3hmcl9ob3N0X2ludF90cmlnX3J4X2RhdGE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9zdGF0aXN0aWNzIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlzdHJ1Y3QgYWN4X3R4X3N0YXRpc3RpY3MgdHg7CisJc3RydWN0IGFjeF9yeF9zdGF0aXN0aWNzIHJ4OworCXN0cnVjdCBhY3hfZG1hX3N0YXRpc3RpY3MgZG1hOworCXN0cnVjdCBhY3hfaXNyX3N0YXRpc3RpY3MgaXNyOworCXN0cnVjdCBhY3hfd2VwX3N0YXRpc3RpY3Mgd2VwOworCXN0cnVjdCBhY3hfcHdyX3N0YXRpc3RpY3MgcHdyOworCXN0cnVjdCBhY3hfYWVzX3N0YXRpc3RpY3MgYWVzOworCXN0cnVjdCBhY3hfbWljX3N0YXRpc3RpY3MgbWljOworCXN0cnVjdCBhY3hfZXZlbnRfc3RhdGlzdGljcyBldmVudDsKKwlzdHJ1Y3QgYWN4X3BzX3N0YXRpc3RpY3MgcHM7CisJc3RydWN0IGFjeF9yeHBpcGVfc3RhdGlzdGljcyByeHBpcGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBBQ1hfTUFYX1JBVEVfQ0xBU1NFUyAgICAgICA4CisjZGVmaW5lIEFDWF9SQVRFX01BU0tfVU5TUEVDSUZJRUQgIDAKKyNkZWZpbmUgQUNYX1JBVEVfUkVUUllfTElNSVQgICAgICAxMAorCitzdHJ1Y3QgYWN4X3JhdGVfY2xhc3MgeworCXUzMiBlbmFibGVkX3JhdGVzOworCXU4IHNob3J0X3JldHJ5X2xpbWl0OworCXU4IGxvbmdfcmV0cnlfbGltaXQ7CisJdTggYWZsYWdzOworCXU4IHJlc2VydmVkOworfTsKKworc3RydWN0IGFjeF9yYXRlX3BvbGljeSB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTMyIHJhdGVfY2xhc3NfY250OworCXN0cnVjdCBhY3hfcmF0ZV9jbGFzcyByYXRlX2NsYXNzW0FDWF9NQVhfUkFURV9DTEFTU0VTXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3Qgd2wxMjUxX2FjeF9tZW1vcnkgeworCV9fbGUxNiBudW1fc3RhdGlvbnM7IC8qIG51bWJlciBvZiBTVEFzIHRvIGJlIHN1cHBvcnRlZC4gKi8KKwl1MTYgcmVzZXJ2ZWRfMTsKKworCS8qCisJICogTm1iZXIgb2YgbWVtb3J5IGJ1ZmZlcnMgZm9yIHRoZSBSWCBtZW0gcG9vbC4KKwkgKiBUaGUgYWN0dWFsIG51bWJlciBtYXkgYmUgbGVzcyBpZiB0aGVyZSBhcmUKKwkgKiBub3QgZW5vdWdoIGJsb2NrcyBsZWZ0IGZvciB0aGUgbWluaW11bSBudW0KKwkgKiBvZiBUWCBvbmVzLgorCSAqLworCXU4IHJ4X21lbV9ibG9ja19udW07CisJdTggcmVzZXJ2ZWRfMjsKKwl1OCBudW1fdHhfcXVldWVzOyAvKiBGcm9tIDEgdG8gMTYgKi8KKwl1OCBob3N0X2lmX29wdGlvbnM7IC8qIEhPU1RfSUYqICovCisJdTggdHhfbWluX21lbV9ibG9ja19udW07CisJdTggbnVtX3NzaWRfcHJvZmlsZXM7CisJX19sZTE2IGRlYnVnX2J1ZmZlcl9zaXplOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworI2RlZmluZSBBQ1hfUlhfREVTQ19NSU4gICAgICAgICAgICAgICAgMQorI2RlZmluZSBBQ1hfUlhfREVTQ19NQVggICAgICAgICAgICAgICAgMTI3CisjZGVmaW5lIEFDWF9SWF9ERVNDX0RFRiAgICAgICAgICAgICAgICAzMgorc3RydWN0IHdsMTI1MV9hY3hfcnhfcXVldWVfY29uZmlnIHsKKwl1OCBudW1fZGVzY3M7CisJdTggcGFkOworCXU4IHR5cGU7CisJdTggcHJpb3JpdHk7CisJX19sZTMyIGRtYV9hZGRyZXNzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgQUNYX1RYX0RFU0NfTUlOICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQUNYX1RYX0RFU0NfTUFYICAgICAgICAgICAgICAgIDEyNworI2RlZmluZSBBQ1hfVFhfREVTQ19ERUYgICAgICAgICAgICAgICAgMTYKK3N0cnVjdCB3bDEyNTFfYWN4X3R4X3F1ZXVlX2NvbmZpZyB7CisgICAgdTggbnVtX2Rlc2NzOworICAgIHU4IHBhZFsyXTsKKyAgICB1OCBhdHRyaWJ1dGVzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgTUFYX1RYX1FVRVVFX0NPTkZJR1MgNQorI2RlZmluZSBNQVhfVFhfUVVFVUVTIDQKK3N0cnVjdCB3bDEyNTFfYWN4X2NvbmZpZ19tZW1vcnkgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXN0cnVjdCB3bDEyNTFfYWN4X21lbW9yeSBtZW1fY29uZmlnOworCXN0cnVjdCB3bDEyNTFfYWN4X3J4X3F1ZXVlX2NvbmZpZyByeF9xdWV1ZV9jb25maWc7CisJc3RydWN0IHdsMTI1MV9hY3hfdHhfcXVldWVfY29uZmlnIHR4X3F1ZXVlX2NvbmZpZ1tNQVhfVFhfUVVFVUVfQ09ORklHU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHdsMTI1MV9hY3hfbWVtX21hcCB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdm9pZCAqY29kZV9zdGFydDsKKwl2b2lkICpjb2RlX2VuZDsKKworCXZvaWQgKndlcF9kZWZrZXlfc3RhcnQ7CisJdm9pZCAqd2VwX2RlZmtleV9lbmQ7CisKKwl2b2lkICpzdGFfdGFibGVfc3RhcnQ7CisJdm9pZCAqc3RhX3RhYmxlX2VuZDsKKworCXZvaWQgKnBhY2tldF90ZW1wbGF0ZV9zdGFydDsKKwl2b2lkICpwYWNrZXRfdGVtcGxhdGVfZW5kOworCisJdm9pZCAqcXVldWVfbWVtb3J5X3N0YXJ0OworCXZvaWQgKnF1ZXVlX21lbW9yeV9lbmQ7CisKKwl2b2lkICpwYWNrZXRfbWVtb3J5X3Bvb2xfc3RhcnQ7CisJdm9pZCAqcGFja2V0X21lbW9yeV9wb29sX2VuZDsKKworCXZvaWQgKmRlYnVnX2J1ZmZlcjFfc3RhcnQ7CisJdm9pZCAqZGVidWdfYnVmZmVyMV9lbmQ7CisKKwl2b2lkICpkZWJ1Z19idWZmZXIyX3N0YXJ0OworCXZvaWQgKmRlYnVnX2J1ZmZlcjJfZW5kOworCisJLyogTnVtYmVyIG9mIGJsb2NrcyBGVyBhbGxvY2F0ZWQgZm9yIFRYIHBhY2tldHMgKi8KKwl1MzIgbnVtX3R4X21lbV9ibG9ja3M7CisKKwkvKiBOdW1iZXIgb2YgYmxvY2tzIEZXIGFsbG9jYXRlZCBmb3IgUlggcGFja2V0cyAqLworCXUzMiBudW1fcnhfbWVtX2Jsb2NrczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgSG9zdCBJbnRlcnJ1cHQgUmVnaXN0ZXIgKFdpTGluayAtPiBIb3N0KQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUlggcGFja2V0IGlzIHJlYWR5IGluIFhmZXIgYnVmZmVyICMwICovCisjZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9SWDBfREFUQSAgICAgIEJJVCgwKQorCisvKiBUWCByZXN1bHQocykgYXJlIGluIHRoZSBUWCBjb21wbGV0ZSBidWZmZXIgKi8KKyNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1RYX1JFU1VMVAlCSVQoMSkKKworLyogT0JTT0xFVEUgKi8KKyNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1RYX1hGUgkJQklUKDIpCisKKy8qIFJYIHBhY2tldCBpcyByZWFkeSBpbiBYZmVyIGJ1ZmZlciAjMSAqLworI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfUlgxX0RBVEEJQklUKDMpCisKKy8qIEV2ZW50IHdhcyBlbnRlcmVkIHRvIEV2ZW50IE1CT1ggI0EgKi8KKyNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0EJCUJJVCg0KQorCisvKiBFdmVudCB3YXMgZW50ZXJlZCB0byBFdmVudCBNQk9YICNCICovCisjZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9FVkVOVF9CCQlCSVQoNSkKKworLyogT0JTT0xFVEUgKi8KKyNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1dBS0VfT05fSE9TVAlCSVQoNikKKworLyogVHJhY2UgbWVhc3NnZSBvbiBNQk9YICNBICovCisjZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9UUkFDRV9BCQlCSVQoNykKKworLyogVHJhY2UgbWVhc3NnZSBvbiBNQk9YICNCICovCisjZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9UUkFDRV9CCQlCSVQoOCkKKworLyogQ29tbWFuZCBwcm9jZXNzaW5nIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX0NNRF9DT01QTEVURQlCSVQoOSkKKworLyogSW5pdCBzZXF1ZW5jZSBpcyBkb25lICovCisjZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFCUJJVCgxNCkKKworI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfQUxMICAgICAgICAgICAweEZGRkZGRkZGCisKK2VudW0geworCUFDWF9XQUtFX1VQX0NPTkRJVElPTlMgICAgICA9IDB4MDAwMiwKKwlBQ1hfTUVNX0NGRyAgICAgICAgICAgICAgICAgPSAweDAwMDMsCisJQUNYX1NMT1QgICAgICAgICAgICAgICAgICAgID0gMHgwMDA0LAorCUFDWF9RVUVVRV9IRUFEICAgICAgICAgICAgICA9IDB4MDAwNSwgLyogZm9yIE1BU1RFUiBtb2RlIG9ubHkgKi8KKwlBQ1hfQUNfQ0ZHICAgICAgICAgICAgICAgICAgPSAweDAwMDcsCisJQUNYX01FTV9NQVAgICAgICAgICAgICAgICAgID0gMHgwMDA4LAorCUFDWF9BSUQgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwQSwKKwlBQ1hfUkFESU9fUEFSQU0gICAgICAgICAgICAgPSAweDAwMEIsIC8qIE5vdCB1c2VkICovCisJQUNYX0NGRyAgICAgICAgICAgICAgICAgICAgID0gMHgwMDBDLCAvKiBOb3QgdXNlZCAqLworCUFDWF9GV19SRVYgICAgICAgICAgICAgICAgICA9IDB4MDAwRCwKKwlBQ1hfTUVESVVNX1VTQUdFICAgICAgICAgICAgPSAweDAwMEYsCisJQUNYX1JYX0NGRyAgICAgICAgICAgICAgICAgID0gMHgwMDEwLAorCUFDWF9UWF9RVUVVRV9DRkcgICAgICAgICAgICA9IDB4MDAxMSwgLyogRklYTUU6IG9ubHkgdXNlZCBieSB3bDEyNTEgKi8KKwlBQ1hfQlNTX0lOX1BTICAgICAgICAgICAgICAgPSAweDAwMTIsIC8qIGZvciBBUCBvbmx5ICovCisJQUNYX1NUQVRJU1RJQ1MgICAgICAgICAgICAgID0gMHgwMDEzLCAvKiBEZWJ1ZyBBUEkgKi8KKwlBQ1hfRkVBVFVSRV9DRkcgICAgICAgICAgICAgPSAweDAwMTUsCisJQUNYX01JU0NfQ0ZHICAgICAgICAgICAgICAgID0gMHgwMDE3LCAvKiBOb3QgdXNlZCAqLworCUFDWF9USURfQ0ZHICAgICAgICAgICAgICAgICA9IDB4MDAxQSwKKwlBQ1hfQkVBQ09OX0ZJTFRFUl9PUFQgICAgICAgPSAweDAwMUYsCisJQUNYX0xPV19SU1NJICAgICAgICAgICAgICAgID0gMHgwMDIwLAorCUFDWF9OT0lTRV9ISVNUICAgICAgICAgICAgICA9IDB4MDAyMSwKKwlBQ1hfSERLX1ZFUlNJT04gICAgICAgICAgICAgPSAweDAwMjIsIC8qID8/PyAqLworCUFDWF9QRF9USFJFU0hPTEQgICAgICAgICAgICA9IDB4MDAyMywKKwlBQ1hfREFUQV9QQVRIX1BBUkFNUyAgICAgICAgPSAweDAwMjQsIC8qIFdPICovCisJQUNYX0RBVEFfUEFUSF9SRVNQX1BBUkFNUyAgID0gMHgwMDI0LCAvKiBSTyAqLworCUFDWF9DQ0FfVEhSRVNIT0xEICAgICAgICAgICA9IDB4MDAyNSwKKwlBQ1hfRVZFTlRfTUJPWF9NQVNLICAgICAgICAgPSAweDAwMjYsCisjaWZkZWYgRldfUlVOTklOR19BU19BUAorCUFDWF9EVElNX1BFUklPRCAgICAgICAgICAgICA9IDB4MDAyNywgLyogZm9yIEFQIG9ubHkgKi8KKyNlbHNlCisJQUNYX1dSX1RCVFRfQU5EX0RUSU0gICAgICAgID0gMHgwMDI3LCAvKiBTVEEgb25seSAqLworI2VuZGlmCisJQUNYX0FDSV9PUFRJT05fQ0ZHICAgICAgICAgID0gMHgwMDI5LCAvKiBPQlNPTEVURSAoZm9yIDEyNTEpKi8KKwlBQ1hfR1BJT19DRkcgICAgICAgICAgICAgICAgPSAweDAwMkEsIC8qIE5vdCB1c2VkICovCisJQUNYX0dQSU9fU0VUICAgICAgICAgICAgICAgID0gMHgwMDJCLCAvKiBOb3QgdXNlZCAqLworCUFDWF9QTV9DRkcgICAgICAgICAgICAgICAgICA9IDB4MDAyQywgLyogVG8gQmUgRG9jdW1lbnRlZCAqLworCUFDWF9DT05OX01PTklUX1BBUkFNUyAgICAgICA9IDB4MDAyRCwKKwlBQ1hfQVZFUkFHRV9SU1NJICAgICAgICAgICAgPSAweDAwMkUsIC8qIE5vdCB1c2VkICovCisJQUNYX0NPTlNfVFhfRkFJTFVSRSAgICAgICAgID0gMHgwMDJGLAorCUFDWF9CQ05fRFRJTV9PUFRJT05TICAgICAgICA9IDB4MDAzMSwKKwlBQ1hfU0dfRU5BQkxFICAgICAgICAgICAgICAgPSAweDAwMzIsCisJQUNYX1NHX0NGRyAgICAgICAgICAgICAgICAgID0gMHgwMDMzLAorCUFDWF9BTlRFTk5BX0RJVkVSU0lUWV9DRkcgICA9IDB4MDAzNSwgLyogVG8gQmUgRG9jdW1lbnRlZCAqLworCUFDWF9MT1dfU05SCQkgICAgPSAweDAwMzcsIC8qIFRvIEJlIERvY3VtZW50ZWQgKi8KKwlBQ1hfQkVBQ09OX0ZJTFRFUl9UQUJMRSAgICAgPSAweDAwMzgsCisJQUNYX0FSUF9JUF9GSUxURVIgICAgICAgICAgID0gMHgwMDM5LAorCUFDWF9ST0FNSU5HX1NUQVRJU1RJQ1NfVEJMICA9IDB4MDAzQiwKKwlBQ1hfUkFURV9QT0xJQ1kgICAgICAgICAgICAgPSAweDAwM0QsCisJQUNYX0NUU19QUk9URUNUSU9OICAgICAgICAgID0gMHgwMDNFLAorCUFDWF9TTEVFUF9BVVRIICAgICAgICAgICAgICA9IDB4MDAzRiwKKwlBQ1hfUFJFQU1CTEVfVFlQRQkgICAgPSAweDAwNDAsCisJQUNYX0VSUk9SX0NOVCAgICAgICAgICAgICAgID0gMHgwMDQxLAorCUFDWF9GV19HRU5fRlJBTUVfUkFURVMgICAgICA9IDB4MDA0MiwKKwlBQ1hfSUJTU19GSUxURVIJCSAgICA9IDB4MDA0NCwKKwlBQ1hfU0VSVklDRV9QRVJJT0RfVElNRU9VVCAgPSAweDAwNDUsCisJQUNYX1RTRl9JTkZPICAgICAgICAgICAgICAgID0gMHgwMDQ2LAorCUFDWF9DT05GSUdfUFNfV01NICAgICAgICAgICA9IDB4MDA0OSwKKwlBQ1hfRU5BQkxFX1JYX0RBVEFfRklMVEVSICAgPSAweDAwNEEsCisJQUNYX1NFVF9SWF9EQVRBX0ZJTFRFUiAgICAgID0gMHgwMDRCLAorCUFDWF9HRVRfREFUQV9GSUxURVJfU1RBVElTVElDUyA9IDB4MDA0QywKKwlBQ1hfUE9XRVJfTEVWRUxfVEFCTEUgICAgICAgPSAweDAwNEQsCisJQUNYX0JFVF9FTkFCTEUgICAgICAgICAgICAgID0gMHgwMDUwLAorCURPVDExX1NUQVRJT05fSUQgICAgICAgICAgICA9IDB4MTAwMSwKKwlET1QxMV9SWF9NU0RVX0xJRkVfVElNRSAgICAgPSAweDEwMDQsCisJRE9UMTFfQ1VSX1RYX1BXUiAgICAgICAgICAgID0gMHgxMDBELAorCURPVDExX0RFRkFVTFRfS0VZICAgICAgICAgICA9IDB4MTAxMCwKKwlET1QxMV9SWF9ET1QxMV9NT0RFICAgICAgICAgPSAweDEwMTIsCisJRE9UMTFfUlRTX1RIUkVTSE9MRCAgICAgICAgID0gMHgxMDEzLAorCURPVDExX0dST1VQX0FERFJFU1NfVEJMICAgICA9IDB4MTAxNCwKKworCU1BWF9ET1QxMV9JRSA9IERPVDExX0dST1VQX0FERFJFU1NfVEJMLAorCisJTUFYX0lFID0gMHhGRkZGCit9OworCisKK2ludCB3bDEyNTFfYWN4X2ZyYW1lX3JhdGVzKHN0cnVjdCB3bDEyNTEgKndsLCB1OCBjdHJsX3JhdGUsIHU4IGN0cmxfbW9kLAorCQkJICAgdTggbWd0X3JhdGUsIHU4IG1ndF9tb2QpOworaW50IHdsMTI1MV9hY3hfc3RhdGlvbl9pZChzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2FjeF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2wxMjUxICp3bCwgdTgga2V5X2lkKTsKK2ludCB3bDEyNTFfYWN4X3dha2VfdXBfY29uZGl0aW9ucyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggd2FrZV91cF9ldmVudCwKKwkJCQkgIHU4IGxpc3Rlbl9pbnRlcnZhbCk7CitpbnQgd2wxMjUxX2FjeF9zbGVlcF9hdXRoKHN0cnVjdCB3bDEyNTEgKndsLCB1OCBzbGVlcF9hdXRoKTsKK2ludCB3bDEyNTFfYWN4X2Z3X3ZlcnNpb24oc3RydWN0IHdsMTI1MSAqd2wsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CitpbnQgd2wxMjUxX2FjeF90eF9wb3dlcihzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IHBvd2VyKTsKK2ludCB3bDEyNTFfYWN4X2ZlYXR1cmVfY2ZnKHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfYWN4X21lbV9tYXAoc3RydWN0IHdsMTI1MSAqd2wsCisJCSAgICAgICBzdHJ1Y3QgYWN4X2hlYWRlciAqbWVtX21hcCwgc2l6ZV90IGxlbik7CitpbnQgd2wxMjUxX2FjeF9kYXRhX3BhdGhfcGFyYW1zKHN0cnVjdCB3bDEyNTEgKndsLAorCQkJCXN0cnVjdCBhY3hfZGF0YV9wYXRoX3BhcmFtc19yZXNwICpkYXRhX3BhdGgpOworaW50IHdsMTI1MV9hY3hfcnhfbXNkdV9saWZlX3RpbWUoc3RydWN0IHdsMTI1MSAqd2wsIHUzMiBsaWZlX3RpbWUpOworaW50IHdsMTI1MV9hY3hfcnhfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgY29uZmlnLCB1MzIgZmlsdGVyKTsKK2ludCB3bDEyNTFfYWN4X3BkX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2FjeF9zbG90KHN0cnVjdCB3bDEyNTEgKndsLCBlbnVtIGFjeF9zbG90X3R5cGUgc2xvdF90aW1lKTsKK2ludCB3bDEyNTFfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9hY3hfcnRzX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjUxICp3bCwgdTE2IHJ0c190aHJlc2hvbGQpOworaW50IHdsMTI1MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9hY3hfYmVhY29uX2ZpbHRlcl90YWJsZShzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2FjeF9zZ19lbmFibGUoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9hY3hfc2dfY2ZnKHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfYWN4X2NjYV90aHJlc2hvbGQoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9hY3hfYmNuX2R0aW1fb3B0aW9ucyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2FjeF9haWQoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiBhaWQpOworaW50IHdsMTI1MV9hY3hfZXZlbnRfbWJveF9tYXNrKHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgZXZlbnRfbWFzayk7CitpbnQgd2wxMjUxX2FjeF9zZXRfcHJlYW1ibGUoc3RydWN0IHdsMTI1MSAqd2wsIGVudW0gYWN4X3ByZWFtYmxlX3R5cGUgcHJlYW1ibGUpOworaW50IHdsMTI1MV9hY3hfY3RzX3Byb3RlY3Qoc3RydWN0IHdsMTI1MSAqd2wsCisJCQkgICAgZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIGN0c3Byb3RlY3QpOworaW50IHdsMTI1MV9hY3hfc3RhdGlzdGljcyhzdHJ1Y3Qgd2wxMjUxICp3bCwgc3RydWN0IGFjeF9zdGF0aXN0aWNzICpzdGF0cyk7CitpbnQgd2wxMjUxX2FjeF90c2ZfaW5mbyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTY0ICptYWN0aW1lKTsKK2ludCB3bDEyNTFfYWN4X3JhdGVfcG9saWNpZXMoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9hY3hfbWVtX2NmZyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CisKKyNlbmRpZiAvKiBfX1dMMTI1MV9BQ1hfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2Jvb3QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MmQ3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2Jvb3QuYwpAQCAtMCwwICsxLDUzMCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI1MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgIndsMTI1MV9yZWcuaCIKKyNpbmNsdWRlICJ3bDEyNTFfYm9vdC5oIgorI2luY2x1ZGUgIndsMTI1MV9pby5oIgorI2luY2x1ZGUgIndsMTI1MV9zcGkuaCIKKyNpbmNsdWRlICJ3bDEyNTFfZXZlbnQuaCIKKyNpbmNsdWRlICJ3bDEyNTFfYWN4LmgiCisKK3ZvaWQgd2wxMjUxX2Jvb3RfdGFyZ2V0X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywgfih3bC0+aW50cl9tYXNrKSk7CisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBISV9DRkcsIEhJX0NGR19ERUZfVkFMKTsKK30KKworaW50IHdsMTI1MV9ib290X3NvZnRfcmVzZXQoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiBib290X2RhdGE7CisKKwkvKiBwZXJmb3JtIHNvZnQgcmVzZXQgKi8KKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfU0xWX1NPRlRfUkVTRVQsIEFDWF9TTFZfU09GVF9SRVNFVF9CSVQpOworCisJLyogU09GVF9SRVNFVCBpcyBzZWxmIGNsZWFyaW5nICovCisJdGltZW91dCA9IGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKFNPRlRfUkVTRVRfTUFYX1RJTUUpOworCXdoaWxlICgxKSB7CisJCWJvb3RfZGF0YSA9IHdsMTI1MV9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX1NMVl9TT0ZUX1JFU0VUKTsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX0JPT1QsICJzb2Z0IHJlc2V0IGJvb3RkYXRhIDB4JXgiLCBib290X2RhdGEpOworCQlpZiAoKGJvb3RfZGF0YSAmIEFDWF9TTFZfU09GVF9SRVNFVF9CSVQpID09IDApCisJCQlicmVhazsKKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJLyogMS4yIGNoZWNrIHBXaGFsQnVzLT51U2VsZkNsZWFyVGltZSBpZiB0aGUKKwkJCSAqIHRpbWVvdXQgd2FzIHJlYWNoZWQgKi8KKwkJCXdsMTI1MV9lcnJvcigic29mdCByZXNldCB0aW1lb3V0Iik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQl1ZGVsYXkoU09GVF9SRVNFVF9TVEFMTF9USU1FKTsKKwl9CisKKwkvKiBkaXNhYmxlIFJ4L1R4ICovCisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBFTkFCTEUsIDB4MCk7CisKKwkvKiBkaXNhYmxlIGF1dG8gY2FsaWJyYXRpb24gb24gc3RhcnQqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgU1BBUkVfQTIsIDB4ZmZmZik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9ib290X2luaXRfc2VxKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXUzMiBzY3JfcGFkNiwgaW5pdF9kYXRhLCB0bXAsIGVscF9jbWQsIHJlZl9mcmVxOworCisJLyoKKwkgKiBjb2wgIzE6IElOVEVHRVJfRElWSURFUgorCSAqIGNvbCAjMjogRlJBQ1RJT05BTF9ESVZJREVSCisJICogY29sICMzOiBBVFROX0JCCisJICogY29sICM0OiBBTFBIQV9CQgorCSAqIGNvbCAjNTogU1RPUF9USU1FX0JCCisJICogY29sICM2OiBCQl9QTExfTE9PUF9GSUxURVIKKwkgKi8KKwlzdGF0aWMgY29uc3QgdTMyIExVVFtSRUZfRlJFUV9OVU1dW0xVVF9QQVJBTV9OVU1dID0geworCisJCXsgICA4MywgODczODEsICAweEIsIDUsIDB4RjAwLCAgM30sIC8qIFJFRl9GUkVRXzE5XzIqLworCQl7ICAgNjEsIDE0MTE1NCwgMHhCLCA1LCAweDE0NTAsIDJ9LCAvKiBSRUZfRlJFUV8yNl8wKi8KKwkJeyAgIDQxLCAxNzQ3NjMsIDB4QywgNiwgMHgyRDAwLCAxfSwgLyogUkVGX0ZSRVFfMzhfNCovCisJCXsgICA0MCwgMCwgICAgICAweEMsIDYsIDB4MkVFMCwgMX0sIC8qIFJFRl9GUkVRXzQwXzAqLworCQl7ICAgNDcsIDE2MjI4MCwgMHhDLCA2LCAweDI3NjAsIDF9ICAvKiBSRUZfRlJFUV8zM182ICAgICAgICAqLworCX07CisKKwkvKiByZWFkIE5WUyBwYXJhbXMgKi8KKwlzY3JfcGFkNiA9IHdsMTI1MV9yZWdfcmVhZDMyKHdsLCBTQ1JfUEFENik7CisJd2wxMjUxX2RlYnVnKERFQlVHX0JPT1QsICJzY3JfcGFkNiAweCV4Iiwgc2NyX3BhZDYpOworCisJLyogcmVhZCBFTFBfQ01EICovCisJZWxwX2NtZCA9IHdsMTI1MV9yZWdfcmVhZDMyKHdsLCBFTFBfQ01EKTsKKwl3bDEyNTFfZGVidWcoREVCVUdfQk9PVCwgImVscF9jbWQgMHgleCIsIGVscF9jbWQpOworCisJLyogc2V0IHRoZSBCQiBjYWxpYnJhdGlvbiB0aW1lIHRvIGJlIDMwMCB1c2VjIChQTExfQ0FMX1RJTUUpICovCisJcmVmX2ZyZXEgPSBzY3JfcGFkNiAmIDB4MDAwMDAwRkY7CisJd2wxMjUxX2RlYnVnKERFQlVHX0JPT1QsICJyZWZfZnJlcSAweCV4IiwgcmVmX2ZyZXEpOworCisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBQTExfQ0FMX1RJTUUsIDB4OSk7CisKKwkvKgorCSAqIFBHIDEuMjogc2V0IHRoZSBjbG9jayBidWZmZXIgdGltZSB0byBiZSAyMTAgdXNlYyAoQ0xLX0JVRl9USU1FKQorCSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgQ0xLX0JVRl9USU1FLCAweDYpOworCisJLyoKKwkgKiBzZXQgdGhlIGNsb2NrIGRldGVjdCBmZWF0dXJlIHRvIHdvcmsgaW4gdGhlIHJlc3RhcnQgd3UgcHJvY2VkdXJlCisJICogKEVMUF9DRkdfTU9ERVsxNF0pIGFuZCBTZWxlY3QgdGhlIGNsb2NrIHNvdXJjZSB0eXBlCisJICogKEVMUF9DRkdfTU9ERVsxMzoxMl0pCisJICovCisJdG1wID0gKChzY3JfcGFkNiAmIDB4MDAwMEZGMDApIDw8IDQpIHwgMHgwMDAwNDAwMDsKKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIEVMUF9DRkdfTU9ERSwgdG1wKTsKKworCS8qIFBHIDEuMjogZW5hYmxlIHRoZSBCQiBQTEwgZml4LiBFbmFibGUgdGhlIFBMTF9MSU1QX0NMS19FTl9DTUQgKi8KKwllbHBfY21kIHw9IDB4MDAwMDAwNDA7CisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBFTFBfQ01ELCBlbHBfY21kKTsKKworCS8qIFBHIDEuMjogU2V0IHRoZSBCQiBQTEwgc3RhYmxlIHRpbWUgdG8gYmUgMTAwMHVzZWMKKwkgKiAoUExMX1NUQUJMRV9USU1FKSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgQ0ZHX1BMTF9TWU5DX0NOVCwgMHgyMCk7CisKKwkvKiBQRyAxLjI6IHJlYWQgY2xvY2sgcmVxdWVzdCB0aW1lICovCisJaW5pdF9kYXRhID0gd2wxMjUxX3JlZ19yZWFkMzIod2wsIENMS19SRVFfVElNRSk7CisKKwkvKgorCSAqIFBHIDEuMjogc2V0IHRoZSBjbG9jayByZXF1ZXN0IHRpbWUgdG8gYmUgcmVmX2Nsa19zZXR0bGluZ190aW1lIC0KKwkgKiAxbXMgPSA0bXMKKwkgKi8KKwlpZiAoaW5pdF9kYXRhID4gMHgyMSkKKwkJdG1wID0gaW5pdF9kYXRhIC0gMHgyMTsKKwllbHNlCisJCXRtcCA9IDA7CisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBDTEtfUkVRX1RJTUUsIHRtcCk7CisKKwkvKiBzZXQgQkIgUExMIGNvbmZpZ3VyYXRpb25zIGluIFJGIEFGRSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgMHgwMDMwNThjYywgMHg0QjUpOworCisJLyogc2V0IFJGX0FGRV9SRUdfNSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgMHgwMDMwNThkNCwgMHg1MCk7CisKKwkvKiBzZXQgUkZfQUZFX0NUUkxfUkVHXzIgKi8KKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU5NDgsIDB4MTFjMDAxKTsKKworCS8qCisJICogY2hhbmdlIFJGIFBMTCBhbmQgQkIgUExMIGRpdmlkZXIgZm9yIFZDTyBjbG9jayBhbmQgYWRqdXN0IFZDTworCSAqIGJhaXMgY3VycmVudChSRl9BRkVfUkVHXzEzKQorCSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgMHgwMDMwNThmNCwgMHgxZSk7CisKKwkvKiBzZXQgQkIgUExMIGNvbmZpZ3VyYXRpb25zICovCisJdG1wID0gTFVUW3JlZl9mcmVxXVtMVVRfUEFSQU1fSU5URUdFUl9ESVZJREVSXSB8IDB4MDAwMTcwMDA7CisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCAweDAwMzA1ODQwLCB0bXApOworCisJLyogc2V0IGZyYWN0aW9uYWwgZGl2aWRlciBhY2NvcmRpbmcgdG8gQXBwZW5kaXggQy1CQiBQTEwKKwkgKiBDYWxjdWxhdGlvbnMKKwkgKi8KKwl0bXAgPSBMVVRbcmVmX2ZyZXFdW0xVVF9QQVJBTV9GUkFDVElPTkFMX0RJVklERVJdOworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgMHgwMDMwNTg0NCwgdG1wKTsKKworCS8qIHNldCB0aGUgaW5pdGlhbCBkYXRhIGZvciB0aGUgc2lnbWEgZGVsdGEgKi8KKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4NDgsIDB4MzAzOSk7CisKKwkvKgorCSAqIHNldCB0aGUgYWNjdW11bGF0b3IgYXR0ZW51YXRpb24gdmFsdWUsIGNhbGlicmF0aW9uIGxvb3AxCisJICogKGFscGhhKSwgY2FsaWJyYXRpb24gbG9vcDIgKGJldGEpLCBjYWxpYnJhdGlvbiBsb29wMyAoZ2FtbWEpIGFuZAorCSAqIHRoZSBWQ08gZ2FpbgorCSAqLworCXRtcCA9IChMVVRbcmVmX2ZyZXFdW0xVVF9QQVJBTV9BVFROX0JCXSA8PCAxNikgfAorCQkoTFVUW3JlZl9mcmVxXVtMVVRfUEFSQU1fQUxQSEFfQkJdIDw8IDEyKSB8IDB4MTsKKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4NTQsIHRtcCk7CisKKwkvKgorCSAqIHNldCB0aGUgY2FsaWJyYXRpb24gc3RvcCB0aW1lIGFmdGVyIGhvbGRvZmYgdGltZSBleHBpcmVzIGFuZCBzZXQKKwkgKiBzZXR0bGluZyB0aW1lIEhPTERfT0ZGX1RJTUVfQkIKKwkgKi8KKwl0bXAgPSBMVVRbcmVmX2ZyZXFdW0xVVF9QQVJBTV9TVE9QX1RJTUVfQkJdIHwgMHgwMDBBMDAwMDsKKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4NTgsIHRtcCk7CisKKwkvKgorCSAqIHNldCBCQiBQTEwgTG9vcCBmaWx0ZXIgY2FwYWNpdG9yMy0gQkJfQzNbMjowXSBhbmQgc2V0IEJCIFBMTAorCSAqIGNvbnN0YW50IGxlYWthZ2UgY3VycmVudCB0byBsaW5lYXJpemUgUEZEIHRvIDB1QSAtCisJICogQkJfSUxPT1BGWzc6M10KKwkgKi8KKwl0bXAgPSBMVVRbcmVmX2ZyZXFdW0xVVF9QQVJBTV9CQl9QTExfTE9PUF9GSUxURVJdIHwgMHgwMDAwMDAzMDsKKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4ZjgsIHRtcCk7CisKKwkvKgorCSAqIHNldCByZWd1bGF0b3Igb3V0cHV0IHZvbHRhZ2UgZm9yIG4gZGl2aWRlciB0bworCSAqIDEuMzUtQkJfUkVGRElWWzE6MF0sIHNldCBjaGFyZ2UgcHVtcCBjdXJyZW50LSBCQl9DUEdBSU5bNDoyXSwKKwkgKiBzZXQgQkIgUExMIExvb3AgZmlsdGVyIGNhcGFjaXRvcjItIEJCX0MyWzc6NV0sIHNldCBnYWluIG9mIEJCCisJICogUExMIGF1dG8tY2FsbCB0byBub3JtYWwgbW9kZS0gQkJfQ0FMR0FJTl8zREJbOF0KKwkgKi8KKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4ZjAsIDB4MjkpOworCisJLyogZW5hYmxlIHJlc3RhcnQgd2FrZXVwIHNlcXVlbmNlIChFTFBfQ01EWzBdKSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgRUxQX0NNRCwgZWxwX2NtZCB8IDB4MSk7CisKKwkvKiByZXN0YXJ0IHNlcXVlbmNlIGNvbXBsZXRlZCAqLworCXVkZWxheSgyMDAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfYm9vdF9zZXRfZWNwdV9jdHJsKHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgZmxhZykKK3sKKwl1MzIgY3B1X2N0cmw7CisKKwkvKiAxMC41LjAgcnVuIHRoZSBmaXJtd2FyZSAoSSkgKi8KKwljcHVfY3RybCA9IHdsMTI1MV9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCk7CisKKwkvKiAxMC41LjEgcnVuIHRoZSBmaXJtd2FyZSAoSUkpICovCisJY3B1X2N0cmwgJj0gfmZsYWc7CisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCwgY3B1X2N0cmwpOworfQorCitpbnQgd2wxMjUxX2Jvb3RfcnVuX2Zpcm13YXJlKHN0cnVjdCB3bDEyNTEgKndsKQoreworCWludCBsb29wLCByZXQ7CisJdTMyIGNoaXBfaWQsIGludGVycnVwdDsKKworCXdsMTI1MV9ib290X3NldF9lY3B1X2N0cmwod2wsIEVDUFVfQ09OVFJPTF9IQUxUKTsKKworCWNoaXBfaWQgPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCBhZnRlciBmaXJtd2FyZSBib290OiAweCV4IiwgY2hpcF9pZCk7CisKKwlpZiAoY2hpcF9pZCAhPSB3bC0+Y2hpcF9pZCkgeworCQl3bDEyNTFfZXJyb3IoImNoaXAgaWQgZG9lc24ndCBtYXRjaCBhZnRlciBmaXJtd2FyZSBib290Iik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIHdhaXQgZm9yIGluaXQgdG8gY29tcGxldGUgKi8KKwlsb29wID0gMDsKKwl3aGlsZSAobG9vcCsrIDwgSU5JVF9MT09QKSB7CisJCXVkZWxheShJTklUX0xPT1BfREVMQVkpOworCQlpbnRlcnJ1cHQgPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOworCisJCWlmIChpbnRlcnJ1cHQgPT0gMHhmZmZmZmZmZikgeworCQkJd2wxMjUxX2Vycm9yKCJlcnJvciByZWFkaW5nIGhhcmR3YXJlIGNvbXBsZXRlICIKKwkJCQkgICAgICJpbml0IGluZGljYXRpb24iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCS8qIGNoZWNrIHRoYXQgQUNYX0lOVFJfSU5JVF9DT01QTEVURSBpcyBlbmFibGVkICovCisJCWVsc2UgaWYgKGludGVycnVwdCAmIFdMMTI1MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFKSB7CisJCQl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX0FDSywKKwkJCQkJICAgV0wxMjUxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobG9vcCA+PSBJTklUX0xPT1ApIHsKKwkJd2wxMjUxX2Vycm9yKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHRoZSBoYXJkd2FyZSB0byAiCisJCQkgICAgICJjb21wbGV0ZSBpbml0aWFsaXphdGlvbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBnZXQgaGFyZHdhcmUgY29uZmlnIGNvbW1hbmQgbWFpbCBib3ggKi8KKwl3bC0+Y21kX2JveF9hZGRyID0gd2wxMjUxX3JlZ19yZWFkMzIod2wsIFJFR19DT01NQU5EX01BSUxCT1hfUFRSKTsKKworCS8qIGdldCBoYXJkd2FyZSBjb25maWcgZXZlbnQgbWFpbCBib3ggKi8KKwl3bC0+ZXZlbnRfYm94X2FkZHIgPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgUkVHX0VWRU5UX01BSUxCT1hfUFRSKTsKKworCS8qIHNldCB0aGUgd29ya2luZyBwYXJ0aXRpb24gdG8gaXRzICJydW5uaW5nIiBtb2RlIG9mZnNldCAqLworCXdsMTI1MV9zZXRfcGFydGl0aW9uKHdsLCBXTDEyNTFfUEFSVF9XT1JLX01FTV9TVEFSVCwKKwkJCSAgICAgV0wxMjUxX1BBUlRfV09SS19NRU1fU0laRSwKKwkJCSAgICAgV0wxMjUxX1BBUlRfV09SS19SRUdfU1RBUlQsCisJCQkgICAgIFdMMTI1MV9QQVJUX1dPUktfUkVHX1NJWkUpOworCisJd2wxMjUxX2RlYnVnKERFQlVHX01BSUxCT1gsICJjbWRfYm94X2FkZHIgMHgleCBldmVudF9ib3hfYWRkciAweCV4IiwKKwkJICAgICB3bC0+Y21kX2JveF9hZGRyLCB3bC0+ZXZlbnRfYm94X2FkZHIpOworCisJd2wxMjUxX2FjeF9md192ZXJzaW9uKHdsLCB3bC0+ZndfdmVyLCBzaXplb2Yod2wtPmZ3X3ZlcikpOworCisJLyoKKwkgKiBpbiBjYXNlIG9mIGZ1bGwgYXN5bmNocm9ub3VzIG1vZGUgdGhlIGZpcm13YXJlIGV2ZW50IG11c3QgYmUKKwkgKiByZWFkeSB0byByZWNlaXZlIGV2ZW50IGZyb20gdGhlIGNvbW1hbmQgbWFpbGJveAorCSAqLworCisJLyogZW5hYmxlIGdwaW8gaW50ZXJydXB0cyAqLworCXdsMTI1MV9lbmFibGVfaW50ZXJydXB0cyh3bCk7CisKKwkvKiBFbmFibGUgdGFyZ2V0J3MgaW50ZXJydXB0cyAqLworCXdsLT5pbnRyX21hc2sgPSBXTDEyNTFfQUNYX0lOVFJfUlgwX0RBVEEgfAorCQlXTDEyNTFfQUNYX0lOVFJfUlgxX0RBVEEgfAorCQlXTDEyNTFfQUNYX0lOVFJfVFhfUkVTVUxUIHwKKwkJV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0EgfAorCQlXTDEyNTFfQUNYX0lOVFJfRVZFTlRfQiB8CisJCVdMMTI1MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFOworCXdsMTI1MV9ib290X3RhcmdldF9lbmFibGVfaW50ZXJydXB0cyh3bCk7CisKKwkvKiB1bm1hc2sgYWxsIG1ib3ggZXZlbnRzICAqLworCXdsLT5ldmVudF9tYXNrID0gMHhmZmZmZmZmZjsKKworCXJldCA9IHdsMTI1MV9ldmVudF91bm1hc2sod2wpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiRVZFTlQgbWFzayBzZXR0aW5nIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdsMTI1MV9ldmVudF9tYm94X2NvbmZpZyh3bCk7CisKKwkvKiBmaXJtd2FyZSBzdGFydHVwIGNvbXBsZXRlZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI1MV9ib290X3VwbG9hZF9maXJtd2FyZShzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpbnQgYWRkciwgY2h1bmtfbnVtLCBwYXJ0aXRpb25fbGltaXQ7CisJc2l6ZV90IGZ3X2RhdGFfbGVuOworCXU4ICpwOworCisJLyogd2hhbF9Gd0N0cmxfTG9hZEZ3SW1hZ2VTbSgpICovCisKKwl3bDEyNTFfZGVidWcoREVCVUdfQk9PVCwgImNoaXAgaWQgYmVmb3JlIGZ3IHVwbG9hZDogMHgleCIsCisJCSAgICAgd2wxMjUxX3JlZ19yZWFkMzIod2wsIENISVBfSURfQikpOworCisJLyogMTAuMCBjaGVjayBmaXJtd2FyZSBsZW5ndGggYW5kIHNldCBwYXJ0aXRpb24gKi8KKwlmd19kYXRhX2xlbiA9ICAod2wtPmZ3WzRdIDw8IDI0KSB8ICh3bC0+ZndbNV0gPDwgMTYpIHwKKwkJKHdsLT5md1s2XSA8PCA4KSB8ICh3bC0+ZndbN10pOworCisJd2wxMjUxX2RlYnVnKERFQlVHX0JPT1QsICJmd19kYXRhX2xlbiAlenUgY2h1bmtfc2l6ZSAlZCIsIGZ3X2RhdGFfbGVuLAorCQlDSFVOS19TSVpFKTsKKworCWlmICgoZndfZGF0YV9sZW4gJSA0KSAhPSAwKSB7CisJCXdsMTI1MV9lcnJvcigiZmlybXdhcmUgbGVuZ3RoIG5vdCBtdWx0aXBsZSBvZiBmb3VyIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXdsMTI1MV9zZXRfcGFydGl0aW9uKHdsLCBXTDEyNTFfUEFSVF9ET1dOX01FTV9TVEFSVCwKKwkJCSAgICAgV0wxMjUxX1BBUlRfRE9XTl9NRU1fU0laRSwKKwkJCSAgICAgV0wxMjUxX1BBUlRfRE9XTl9SRUdfU1RBUlQsCisJCQkgICAgIFdMMTI1MV9QQVJUX0RPV05fUkVHX1NJWkUpOworCisJLyogMTAuMSBzZXQgcGFydGl0aW9uIGxpbWl0IGFuZCBjaHVuayBudW0gKi8KKwljaHVua19udW0gPSAwOworCXBhcnRpdGlvbl9saW1pdCA9IFdMMTI1MV9QQVJUX0RPV05fTUVNX1NJWkU7CisKKwl3aGlsZSAoY2h1bmtfbnVtIDwgZndfZGF0YV9sZW4gLyBDSFVOS19TSVpFKSB7CisJCS8qIDEwLjIgdXBkYXRlIHBhcnRpdGlvbiwgaWYgbmVlZGVkICovCisJCWFkZHIgPSBXTDEyNTFfUEFSVF9ET1dOX01FTV9TVEFSVCArCisJCQkoY2h1bmtfbnVtICsgMikgKiBDSFVOS19TSVpFOworCQlpZiAoYWRkciA+IHBhcnRpdGlvbl9saW1pdCkgeworCQkJYWRkciA9IFdMMTI1MV9QQVJUX0RPV05fTUVNX1NUQVJUICsKKwkJCQljaHVua19udW0gKiBDSFVOS19TSVpFOworCQkJcGFydGl0aW9uX2xpbWl0ID0gY2h1bmtfbnVtICogQ0hVTktfU0laRSArCisJCQkJV0wxMjUxX1BBUlRfRE9XTl9NRU1fU0laRTsKKwkJCXdsMTI1MV9zZXRfcGFydGl0aW9uKHdsLAorCQkJCQkgICAgIGFkZHIsCisJCQkJCSAgICAgV0wxMjUxX1BBUlRfRE9XTl9NRU1fU0laRSwKKwkJCQkJICAgICBXTDEyNTFfUEFSVF9ET1dOX1JFR19TVEFSVCwKKwkJCQkJICAgICBXTDEyNTFfUEFSVF9ET1dOX1JFR19TSVpFKTsKKwkJfQorCisJCS8qIDEwLjMgdXBsb2FkIHRoZSBjaHVuayAqLworCQlhZGRyID0gV0wxMjUxX1BBUlRfRE9XTl9NRU1fU1RBUlQgKyBjaHVua19udW0gKiBDSFVOS19TSVpFOworCQlwID0gd2wtPmZ3ICsgRldfSERSX1NJWkUgKyBjaHVua19udW0gKiBDSFVOS19TSVpFOworCQl3bDEyNTFfZGVidWcoREVCVUdfQk9PVCwgInVwbG9hZGluZyBmdyBjaHVuayAweCVwIHRvIDB4JXgiLAorCQkJICAgICBwLCBhZGRyKTsKKwkJd2wxMjUxX21lbV93cml0ZSh3bCwgYWRkciwgcCwgQ0hVTktfU0laRSk7CisKKwkJY2h1bmtfbnVtKys7CisJfQorCisJLyogMTAuNCB1cGxvYWQgdGhlIGxhc3QgY2h1bmsgKi8KKwlhZGRyID0gV0wxMjUxX1BBUlRfRE9XTl9NRU1fU1RBUlQgKyBjaHVua19udW0gKiBDSFVOS19TSVpFOworCXAgPSB3bC0+ZncgKyBGV19IRFJfU0laRSArIGNodW5rX251bSAqIENIVU5LX1NJWkU7CisJd2wxMjUxX2RlYnVnKERFQlVHX0JPT1QsICJ1cGxvYWRpbmcgZncgbGFzdCBjaHVuayAoJXp1IEIpIDB4JXAgdG8gMHgleCIsCisJCSAgICAgZndfZGF0YV9sZW4gJSBDSFVOS19TSVpFLCBwLCBhZGRyKTsKKwl3bDEyNTFfbWVtX3dyaXRlKHdsLCBhZGRyLCBwLCBmd19kYXRhX2xlbiAlIENIVU5LX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2Jvb3RfdXBsb2FkX252cyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzaXplX3QgbnZzX2xlbiwgbnZzX2J5dGVzX3dyaXR0ZW4sIGJ1cnN0X2xlbjsKKwlpbnQgbnZzX3N0YXJ0LCBpOworCXUzMiBkZXN0X2FkZHIsIHZhbDsKKwl1OCAqbnZzX3B0ciwgKm52czsKKworCW52cyA9IHdsLT5udnM7CisJaWYgKG52cyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW52c19wdHIgPSBudnM7CisKKwludnNfbGVuID0gd2wtPm52c19sZW47CisJbnZzX3N0YXJ0ID0gd2wtPmZ3X2xlbjsKKworCS8qCisJICogTGF5b3V0IGJlZm9yZSB0aGUgYWN0dWFsIE5WUyB0YWJsZXM6CisJICogMSBieXRlIDogYnVyc3QgbGVuZ3RoLgorCSAqIDIgYnl0ZXM6IGRlc3RpbmF0aW9uIGFkZHJlc3MuCisJICogbiBieXRlczogZGF0YSB0byBidXJzdCBjb3B5LgorCSAqCisJICogVGhpcyBpcyBlbmRlZCBieSBhIDAgbGVuZ3RoLCB0aGVuIHRoZSBOVlMgdGFibGVzLgorCSAqLworCisJd2hpbGUgKG52c19wdHJbMF0pIHsKKwkJYnVyc3RfbGVuID0gbnZzX3B0clswXTsKKwkJZGVzdF9hZGRyID0gKG52c19wdHJbMV0gJiAweGZlKSB8ICgodTMyKShudnNfcHRyWzJdIDw8IDgpKTsKKworCQkvKiBXZSBtb3ZlIG91ciBwb2ludGVyIHRvIHRoZSBkYXRhICovCisJCW52c19wdHIgKz0gMzsKKworCQlmb3IgKGkgPSAwOyBpIDwgYnVyc3RfbGVuOyBpKyspIHsKKwkJCXZhbCA9IChudnNfcHRyWzBdIHwgKG52c19wdHJbMV0gPDwgOCkKKwkJCSAgICAgICB8IChudnNfcHRyWzJdIDw8IDE2KSB8IChudnNfcHRyWzNdIDw8IDI0KSk7CisKKwkJCXdsMTI1MV9kZWJ1ZyhERUJVR19CT09ULAorCQkJCSAgICAgIm52cyBidXJzdCB3cml0ZSAweCV4OiAweCV4IiwKKwkJCQkgICAgIGRlc3RfYWRkciwgdmFsKTsKKwkJCXdsMTI1MV9tZW1fd3JpdGUzMih3bCwgZGVzdF9hZGRyLCB2YWwpOworCisJCQludnNfcHRyICs9IDQ7CisJCQlkZXN0X2FkZHIgKz0gNDsKKwkJfQorCX0KKworCS8qCisJICogV2UndmUgcmVhY2hlZCB0aGUgZmlyc3QgemVybyBsZW5ndGgsIHRoZSBmaXJzdCBOVlMgdGFibGUKKwkgKiBpcyA3IGJ5dGVzIGZ1cnRoZXIuCisJICovCisJbnZzX3B0ciArPSA3OworCW52c19sZW4gLT0gbnZzX3B0ciAtIG52czsKKwludnNfbGVuID0gQUxJR04obnZzX2xlbiwgNCk7CisKKwkvKiBOb3cgd2UgbXVzdCBzZXQgdGhlIHBhcnRpdGlvbiBjb3JyZWN0bHkgKi8KKwl3bDEyNTFfc2V0X3BhcnRpdGlvbih3bCwgbnZzX3N0YXJ0LAorCQkJICAgICBXTDEyNTFfUEFSVF9ET1dOX01FTV9TSVpFLAorCQkJICAgICBXTDEyNTFfUEFSVF9ET1dOX1JFR19TVEFSVCwKKwkJCSAgICAgV0wxMjUxX1BBUlRfRE9XTl9SRUdfU0laRSk7CisKKwkvKiBBbmQgZmluYWxseSB3ZSB1cGxvYWQgdGhlIE5WUyB0YWJsZXMgKi8KKwludnNfYnl0ZXNfd3JpdHRlbiA9IDA7CisJd2hpbGUgKG52c19ieXRlc193cml0dGVuIDwgbnZzX2xlbikgeworCQl2YWwgPSAobnZzX3B0clswXSB8IChudnNfcHRyWzFdIDw8IDgpCisJCSAgICAgICB8IChudnNfcHRyWzJdIDw8IDE2KSB8IChudnNfcHRyWzNdIDw8IDI0KSk7CisKKwkJdmFsID0gY3B1X3RvX2xlMzIodmFsKTsKKworCQl3bDEyNTFfZGVidWcoREVCVUdfQk9PVCwKKwkJCSAgICAgIm52cyB3cml0ZSB0YWJsZSAweCV4OiAweCV4IiwKKwkJCSAgICAgbnZzX3N0YXJ0LCB2YWwpOworCQl3bDEyNTFfbWVtX3dyaXRlMzIod2wsIG52c19zdGFydCwgdmFsKTsKKworCQludnNfcHRyICs9IDQ7CisJCW52c19ieXRlc193cml0dGVuICs9IDQ7CisJCW52c19zdGFydCArPSA0OworCX0KKworCXJldHVybiAwOworfQorCitpbnQgd2wxMjUxX2Jvb3Qoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldCA9IDAsIG1pbm9yX21pbm9yX2UyX3ZlcjsKKwl1MzIgdG1wLCBib290X2RhdGE7CisKKwkvKiBoYWx0IGVtYmVkZGVkIEFSTSBDUFUgd2hpbGUgbG9hZGluZyBmaXJtd2FyZSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19FQ1BVX0NPTlRST0wsIEVDUFVfQ09OVFJPTF9IQUxUKTsKKworCXJldCA9IHdsMTI1MV9ib290X3NvZnRfcmVzZXQod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIDIuIHN0YXJ0IHByb2Nlc3NpbmcgTlZTIGZpbGUgKi8KKwlyZXQgPSB3bDEyNTFfYm9vdF91cGxvYWRfbnZzKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiB3cml0ZSBmaXJtd2FyZSdzIGxhc3QgYWRkcmVzcyAoaWUuIGl0J3MgbGVuZ3RoKSB0bworCSAqIEFDWF9FRVBST01MRVNTX0lORF9SRUcgKi8KKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIEFDWF9FRVBST01MRVNTX0lORF9SRUcsIHdsLT5md19sZW4pOworCisJLyogNi4gcmVhZCB0aGUgRUVQUk9NIHBhcmFtZXRlcnMgKi8KKwl0bXAgPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgU0NSX1BBRDIpOworCisJLyogNy4gcmVhZCBib290ZGF0YSAqLworCXdsLT5ib290X2F0dHIucmFkaW9fdHlwZSA9ICh0bXAgJiAweDAwMDBGRjAwKSA+PiA4OworCXdsLT5ib290X2F0dHIubWFqb3IgPSAodG1wICYgMHgwMEZGMDAwMCkgPj4gMTY7CisJdG1wID0gd2wxMjUxX3JlZ19yZWFkMzIod2wsIFNDUl9QQUQzKTsKKworCS8qIDguIGNoZWNrIGJvb3RkYXRhIGFuZCBjYWxsIHJlc3RhcnQgc2VxdWVuY2UgKi8KKwl3bC0+Ym9vdF9hdHRyLm1pbm9yID0gKHRtcCAmIDB4MDBGRjAwMDApID4+IDE2OworCW1pbm9yX21pbm9yX2UyX3ZlciA9ICh0bXAgJiAweEZGMDAwMDAwKSA+PiAyNDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19CT09ULCAicmFkaW9UeXBlIDB4JXggbWFqb3JFMlZlciAweCV4ICIKKwkJICAgICAibWlub3JFMlZlciAweCV4IG1pbm9yX21pbm9yX2UyX3ZlciAweCV4IiwKKwkJICAgICB3bC0+Ym9vdF9hdHRyLnJhZGlvX3R5cGUsIHdsLT5ib290X2F0dHIubWFqb3IsCisJCSAgICAgd2wtPmJvb3RfYXR0ci5taW5vciwgbWlub3JfbWlub3JfZTJfdmVyKTsKKworCXJldCA9IHdsMTI1MV9ib290X2luaXRfc2VxKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiA5LiBOVlMgcHJvY2Vzc2luZyBkb25lICovCisJYm9vdF9kYXRhID0gd2wxMjUxX3JlZ19yZWFkMzIod2wsIEFDWF9SRUdfRUNQVV9DT05UUk9MKTsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19CT09ULCAiaGFsdCBib290X2RhdGEgMHgleCIsIGJvb3RfZGF0YSk7CisKKwkvKiAxMC4gY2hlY2sgdGhhdCBFQ1BVX0NPTlRST0xfSEFMVCBiaXRzIGFyZSBzZXQgaW4KKwkgKiBwV2hhbEJ1cy0+dUJvb3REYXRhIGFuZCBzdGFydCB1cGxvYWRpbmcgZmlybXdhcmUKKwkgKi8KKwlpZiAoKGJvb3RfZGF0YSAmIEVDUFVfQ09OVFJPTF9IQUxUKSA9PSAwKSB7CisJCXdsMTI1MV9lcnJvcigiYm9vdCBmYWlsZWQsIEVDUFVfQ09OVFJPTF9IQUxUIG5vdCBzZXQiKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gd2wxMjUxX2Jvb3RfdXBsb2FkX2Zpcm13YXJlKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiAxMC41IHN0YXJ0IGZpcm13YXJlICovCisJcmV0ID0gd2wxMjUxX2Jvb3RfcnVuX2Zpcm13YXJlKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ib290LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2Jvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDA2MzY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ib290LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI1MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0JPT1RfSF9fCisjZGVmaW5lIF9fQk9PVF9IX18KKworI2luY2x1ZGUgIndsMTI1MS5oIgorCitpbnQgd2wxMjUxX2Jvb3Rfc29mdF9yZXNldChzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2Jvb3RfaW5pdF9zZXEoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9ib290X3J1bl9maXJtd2FyZShzdHJ1Y3Qgd2wxMjUxICp3bCk7Cit2b2lkIHdsMTI1MV9ib290X3RhcmdldF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2Jvb3Qoc3RydWN0IHdsMTI1MSAqd2wpOworCisvKiBudW1iZXIgb2YgdGltZXMgd2UgdHJ5IHRvIHJlYWQgdGhlIElOSVQgaW50ZXJydXB0ICovCisjZGVmaW5lIElOSVRfTE9PUCAyMDAwMAorCisvKiBkZWxheSBiZXR3ZWVuIHJldHJpZXMgKi8KKyNkZWZpbmUgSU5JVF9MT09QX0RFTEFZIDUwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwZjI2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfY21kLmMKQEAgLTAsMCArMSw0MTIgQEAKKyNpbmNsdWRlICJ3bDEyNTFfY21kLmgiCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmM3Lmg+CisKKyNpbmNsdWRlICJ3bDEyNTEuaCIKKyNpbmNsdWRlICJ3bDEyNTFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjUxX2lvLmgiCisjaW5jbHVkZSAid2wxMjUxX3BzLmgiCisjaW5jbHVkZSAid2wxMjUxX2FjeC5oIgorCisvKioKKyAqIHNlbmQgY29tbWFuZCB0byBmaXJtd2FyZQorICoKKyAqIEB3bDogd2wgc3RydWN0CisgKiBAaWQ6IGNvbW1hbmQgaWQKKyAqIEBidWY6IGJ1ZmZlciBjb250YWluaW5nIHRoZSBjb21tYW5kLCBtdXN0IHdvcmsgd2l0aCBkbWEKKyAqIEBsZW46IGxlbmd0aCBvZiB0aGUgYnVmZmVyCisgKi8KK2ludCB3bDEyNTFfY21kX3NlbmQoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiBpZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCB3bDEyNTFfY21kX2hlYWRlciAqY21kOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1MzIgaW50cjsKKwlpbnQgcmV0ID0gMDsKKworCWNtZCA9IGJ1ZjsKKwljbWQtPmlkID0gaWQ7CisJY21kLT5zdGF0dXMgPSAwOworCisJV0FSTl9PTihsZW4gJSA0ICE9IDApOworCisJd2wxMjUxX21lbV93cml0ZSh3bCwgd2wtPmNtZF9ib3hfYWRkciwgYnVmLCBsZW4pOworCisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHLCBJTlRSX1RSSUdfQ01EKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhXTDEyNTFfQ09NTUFORF9USU1FT1VUKTsKKworCWludHIgPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOworCXdoaWxlICghKGludHIgJiBXTDEyNTFfQUNYX0lOVFJfQ01EX0NPTVBMRVRFKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJd2wxMjUxX2Vycm9yKCJjb21tYW5kIGNvbXBsZXRlIHRpbWVvdXQiKTsKKwkJCXJldCA9IC1FVElNRURPVVQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW1zbGVlcCgxKTsKKworCQlpbnRyID0gd2wxMjUxX3JlZ19yZWFkMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSKTsKKwl9CisKKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX0FDSywKKwkJCSAgIFdMMTI1MV9BQ1hfSU5UUl9DTURfQ09NUExFVEUpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBzZW5kIHRlc3QgY29tbWFuZCB0byBmaXJtd2FyZQorICoKKyAqIEB3bDogd2wgc3RydWN0CisgKiBAYnVmOiBidWZmZXIgY29udGFpbmluZyB0aGUgY29tbWFuZCwgd2l0aCBhbGwgaGVhZGVycywgbXVzdCB3b3JrIHdpdGggZG1hCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICogQGFuc3dlcjogaXMgYW5zd2VyIG5lZWRlZAorICovCitpbnQgd2wxMjUxX2NtZF90ZXN0KHN0cnVjdCB3bDEyNTEgKndsLCB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuLCB1OCBhbnN3ZXIpCit7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgdGVzdCIpOworCisJcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBDTURfVEVTVCwgYnVmLCBidWZfbGVuKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJURVNUIGNvbW1hbmQgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGFuc3dlcikgeworCQlzdHJ1Y3Qgd2wxMjUxX2NvbW1hbmQgKmNtZF9hbnN3ZXI7CisKKwkJLyoKKwkJICogVGhlIHRlc3QgY29tbWFuZCBnb3QgaW4sIHdlIGNhbiByZWFkIHRoZSBhbnN3ZXIuCisJCSAqIFRoZSBhbnN3ZXIgd291bGQgYmUgYSB3bDEyNTFfY29tbWFuZCwgd2hlcmUgdGhlCisJCSAqIHBhcmFtZXRlciBhcnJheSBjb250YWlucyB0aGUgYWN0dWFsIGFuc3dlci4KKwkJICovCisJCXdsMTI1MV9tZW1fcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwgYnVmLCBidWZfbGVuKTsKKworCQljbWRfYW5zd2VyID0gYnVmOworCisJCWlmIChjbWRfYW5zd2VyLT5oZWFkZXIuc3RhdHVzICE9IENNRF9TVEFUVVNfU1VDQ0VTUykKKwkJCXdsMTI1MV9lcnJvcigiVEVTVCBjb21tYW5kIGFuc3dlciBlcnJvcjogJWQiLAorCQkJCSAgICAgY21kX2Fuc3dlci0+aGVhZGVyLnN0YXR1cyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcmVhZCBhY3ggZnJvbSBmaXJtd2FyZQorICoKKyAqIEB3bDogd2wgc3RydWN0CisgKiBAaWQ6IGFjeCBpZAorICogQGJ1ZjogYnVmZmVyIGZvciB0aGUgcmVzcG9uc2UsIGluY2x1ZGluZyBhbGwgaGVhZGVycywgbXVzdCB3b3JrIHdpdGggZG1hCisgKiBAbGVuOiBsZW5naHQgb2YgYnVmCisgKi8KK2ludCB3bDEyNTFfY21kX2ludGVycm9nYXRlKHN0cnVjdCB3bDEyNTEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgYWN4X2hlYWRlciAqYWN4ID0gYnVmOworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQ01ELCAiY21kIGludGVycm9nYXRlIik7CisKKwlhY3gtPmlkID0gaWQ7CisKKwkvKiBwYXlsb2FkIGxlbmd0aCwgZG9lcyBub3QgaW5jbHVkZSBhbnkgaGVhZGVycyAqLworCWFjeC0+bGVuID0gbGVuIC0gc2l6ZW9mKCphY3gpOworCisJcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBDTURfSU5URVJST0dBVEUsIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoIklOVEVSUk9HQVRFIGNvbW1hbmQgZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHRoZSBpbnRlcnJvZ2F0ZSBjb21tYW5kIGdvdCBpbiwgd2UgY2FuIHJlYWQgdGhlIGFuc3dlciAqLworCXdsMTI1MV9tZW1fcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwgYnVmLCBsZW4pOworCisJYWN4ID0gYnVmOworCWlmIChhY3gtPmNtZC5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKQorCQl3bDEyNTFfZXJyb3IoIklOVEVSUk9HQVRFIGNvbW1hbmQgZXJyb3I6ICVkIiwKKwkJCSAgICAgYWN4LT5jbWQuc3RhdHVzKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogd3JpdGUgYWN4IHZhbHVlIHRvIGZpcm13YXJlCisgKgorICogQHdsOiB3bCBzdHJ1Y3QKKyAqIEBpZDogYWN4IGlkCisgKiBAYnVmOiBidWZmZXIgY29udGFpbmluZyBhY3gsIGluY2x1ZGluZyBhbGwgaGVhZGVycywgbXVzdCB3b3JrIHdpdGggZG1hCisgKiBAbGVuOiBsZW5ndGggb2YgYnVmCisgKi8KK2ludCB3bDEyNTFfY21kX2NvbmZpZ3VyZShzdHJ1Y3Qgd2wxMjUxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGFjeF9oZWFkZXIgKmFjeCA9IGJ1ZjsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBjb25maWd1cmUiKTsKKworCWFjeC0+aWQgPSBpZDsKKworCS8qIHBheWxvYWQgbGVuZ3RoLCBkb2VzIG5vdCBpbmNsdWRlIGFueSBoZWFkZXJzICovCisJYWN4LT5sZW4gPSBsZW4gLSBzaXplb2YoKmFjeCk7CisKKwlyZXQgPSB3bDEyNTFfY21kX3NlbmQod2wsIENNRF9DT05GSUdVUkUsIGFjeCwgbGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiQ09ORklHVVJFIGNvbW1hbmQgTk9LIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNTFfY21kX3ZibShzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggaWRlbnRpdHksCisJCSAgIHZvaWQgKmJpdG1hcCwgdTE2IGJpdG1hcF9sZW4sIHU4IGJpdG1hcF9jb250cm9sKQoreworCXN0cnVjdCB3bDEyNTFfY21kX3ZibV91cGRhdGUgKnZibTsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0NNRCwgImNtZCB2Ym0iKTsKKworCXZibSA9IGt6YWxsb2Moc2l6ZW9mKCp2Ym0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZibSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBDb3VudCBhbmQgcGVyaW9kIHdpbGwgYmUgZmlsbGVkIGJ5IHRoZSB0YXJnZXQgKi8KKwl2Ym0tPnRpbS5iaXRtYXBfY3RybCA9IGJpdG1hcF9jb250cm9sOworCWlmIChiaXRtYXBfbGVuID4gUEFSVElBTF9WQk1fTUFYKSB7CisJCXdsMTI1MV93YXJuaW5nKCJjbWQgdmJtIGxlbiBpcyAlZCBCLCB0cnVuY2F0aW5nIHRvICVkIiwKKwkJCSAgICAgICBiaXRtYXBfbGVuLCBQQVJUSUFMX1ZCTV9NQVgpOworCQliaXRtYXBfbGVuID0gUEFSVElBTF9WQk1fTUFYOworCX0KKwltZW1jcHkodmJtLT50aW0ucHZiX2ZpZWxkLCBiaXRtYXAsIGJpdG1hcF9sZW4pOworCXZibS0+dGltLmlkZW50aXR5ID0gaWRlbnRpdHk7CisJdmJtLT50aW0ubGVuZ3RoID0gYml0bWFwX2xlbiArIDM7CisKKwl2Ym0tPmxlbiA9IGNwdV90b19sZTE2KGJpdG1hcF9sZW4gKyA1KTsKKworCXJldCA9IHdsMTI1MV9jbWRfc2VuZCh3bCwgQ01EX1ZCTSwgdmJtLCBzaXplb2YoKnZibSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiVkJNIGNvbW1hbmQgZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHZibSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNTFfY21kX2RhdGFfcGF0aChzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggY2hhbm5lbCwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGNtZF9lbmFibGVkaXNhYmxlX3BhdGggKmNtZDsKKwlpbnQgcmV0OworCXUxNiBjbWRfcngsIGNtZF90eDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgZGF0YSBwYXRoIik7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY21kLT5jaGFubmVsID0gY2hhbm5lbDsKKworCWlmIChlbmFibGUpIHsKKwkJY21kX3J4ID0gQ01EX0VOQUJMRV9SWDsKKwkJY21kX3R4ID0gQ01EX0VOQUJMRV9UWDsKKwl9IGVsc2UgeworCQljbWRfcnggPSBDTURfRElTQUJMRV9SWDsKKwkJY21kX3R4ID0gQ01EX0RJU0FCTEVfVFg7CisJfQorCisJcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBjbWRfcngsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoInJ4ICVzIGNtZCBmb3IgY2hhbm5lbCAlZCBmYWlsZWQiLAorCQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wxMjUxX2RlYnVnKERFQlVHX0JPT1QsICJyeCAlcyBjbWQgY2hhbm5lbCAlZCIsCisJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY2hhbm5lbCk7CisKKwlyZXQgPSB3bDEyNTFfY21kX3NlbmQod2wsIGNtZF90eCwgY21kLCBzaXplb2YoKmNtZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigidHggJXMgY21kIGZvciBjaGFubmVsICVkIGZhaWxlZCIsCisJCQkgICAgIGVuYWJsZSA/ICJzdGFydCIgOiAic3RvcCIsIGNoYW5uZWwpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdsMTI1MV9kZWJ1ZyhERUJVR19CT09ULCAidHggJXMgY21kIGNoYW5uZWwgJWQiLAorCQkgICAgIGVuYWJsZSA/ICJzdGFydCIgOiAic3RvcCIsIGNoYW5uZWwpOworCitvdXQ6CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2NtZF9qb2luKHN0cnVjdCB3bDEyNTEgKndsLCB1OCBic3NfdHlwZSwgdTggY2hhbm5lbCwKKwkJICAgIHUxNiBiZWFjb25faW50ZXJ2YWwsIHU4IGR0aW1faW50ZXJ2YWwpCit7CisJc3RydWN0IGNtZF9qb2luICpqb2luOworCWludCByZXQsIGk7CisJdTggKmJzc2lkOworCisJam9pbiA9IGt6YWxsb2Moc2l6ZW9mKCpqb2luKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFqb2luKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXdsMTI1MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgam9pbiVzIGNoICVkICVkLyVkIiwKKwkJICAgICBic3NfdHlwZSA9PSBCU1NfVFlQRV9JQlNTID8gIiBpYnNzIiA6ICIiLAorCQkgICAgIGNoYW5uZWwsIGJlYWNvbl9pbnRlcnZhbCwgZHRpbV9pbnRlcnZhbCk7CisKKwkvKiBSZXZlcnNlIG9yZGVyIEJTU0lEICovCisJYnNzaWQgPSAodTggKikgJmpvaW4tPmJzc2lkX2xzYjsKKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJYnNzaWRbaV0gPSB3bC0+YnNzaWRbRVRIX0FMRU4gLSBpIC0gMV07CisKKwlqb2luLT5yeF9jb25maWdfb3B0aW9ucyA9IHdsLT5yeF9jb25maWc7CisJam9pbi0+cnhfZmlsdGVyX29wdGlvbnMgPSB3bC0+cnhfZmlsdGVyOworCisJLyoKKwkgKiBGSVhNRTogZGlzYWJsZSB0ZW1wb3JhcmlseSBhbGwgZmlsdGVycyBiZWNhdXNlIGFmdGVyIGNvbW1pdAorCSAqIDljZWY4NzM3ICJtYWM4MDIxMTogZml4IG1hbmFnZWQgbW9kZSBCU1NJRCBoYW5kbGluZyIgYnJva2UKKwkgKiBhc3NvY2lhdGlvbi4gVGhlIGZpbHRlciBsb2dpYyBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBwcm9wZXJseQorCSAqIGFuZCBvbmNlIHRoYXQgaXMgZG9uZSwgdGhpcyBoYWNrIGNhbiBiZSByZW1vdmVkLgorCSAqLworCWpvaW4tPnJ4X2NvbmZpZ19vcHRpb25zID0gMDsKKwlqb2luLT5yeF9maWx0ZXJfb3B0aW9ucyA9IFdMMTI1MV9ERUZBVUxUX1JYX0ZJTFRFUjsKKworCWpvaW4tPmJhc2ljX3JhdGVfc2V0ID0gUkFURV9NQVNLXzFNQlBTIHwgUkFURV9NQVNLXzJNQlBTIHwKKwkJUkFURV9NQVNLXzVfNU1CUFMgfCBSQVRFX01BU0tfMTFNQlBTOworCisJam9pbi0+YmVhY29uX2ludGVydmFsID0gYmVhY29uX2ludGVydmFsOworCWpvaW4tPmR0aW1faW50ZXJ2YWwgPSBkdGltX2ludGVydmFsOworCWpvaW4tPmJzc190eXBlID0gYnNzX3R5cGU7CisJam9pbi0+Y2hhbm5lbCA9IGNoYW5uZWw7CisJam9pbi0+Y3RybCA9IEpPSU5fQ01EX0NUUkxfVFhfRkxVU0g7CisKKwlyZXQgPSB3bDEyNTFfY21kX3NlbmQod2wsIENNRF9TVEFSVF9KT0lOLCBqb2luLCBzaXplb2YoKmpvaW4pKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoImZhaWxlZCB0byBpbml0aWF0ZSBjbWQgam9pbiIpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShqb2luKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2NtZF9wc19tb2RlKHN0cnVjdCB3bDEyNTEgKndsLCB1OCBwc19tb2RlKQoreworCXN0cnVjdCB3bDEyNTFfY21kX3BzX3BhcmFtcyAqcHNfcGFyYW1zID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgc2V0IHBzIG1vZGUiKTsKKworCXBzX3BhcmFtcyA9IGt6YWxsb2Moc2l6ZW9mKCpwc19wYXJhbXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBzX3BhcmFtcykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlwc19wYXJhbXMtPnBzX21vZGUgPSBwc19tb2RlOworCXBzX3BhcmFtcy0+c2VuZF9udWxsX2RhdGEgPSAxOworCXBzX3BhcmFtcy0+cmV0cmllcyA9IDU7CisJcHNfcGFyYW1zLT5oYW5nX292ZXJfcGVyaW9kID0gMTI4OworCXBzX3BhcmFtcy0+bnVsbF9kYXRhX3JhdGUgPSAxOyAvKiAxIE1icHMgKi8KKworCXJldCA9IHdsMTI1MV9jbWRfc2VuZCh3bCwgQ01EX1NFVF9QU19NT0RFLCBwc19wYXJhbXMsCisJCQkgICAgICBzaXplb2YoKnBzX3BhcmFtcykpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiY21kIHNldF9wc19tb2RlIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwc19wYXJhbXMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfY21kX3JlYWRfbWVtb3J5KHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgYWRkciwgdm9pZCAqYW5zd2VyLAorCQkJICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgY21kX3JlYWRfd3JpdGVfbWVtb3J5ICpjbWQ7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQ01ELCAiY21kIHJlYWQgbWVtb3J5Iik7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJV0FSTl9PTihsZW4gPiBNQVhfUkVBRF9TSVpFKTsKKwlsZW4gPSBtaW5fdChzaXplX3QsIGxlbiwgTUFYX1JFQURfU0laRSk7CisKKwljbWQtPmFkZHIgPSBhZGRyOworCWNtZC0+c2l6ZSA9IGxlbjsKKworCXJldCA9IHdsMTI1MV9jbWRfc2VuZCh3bCwgQ01EX1JFQURfTUVNT1JZLCBjbWQsIHNpemVvZigqY21kKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJyZWFkIG1lbW9yeSBjb21tYW5kIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiB0aGUgcmVhZCBjb21tYW5kIGdvdCBpbiwgd2UgY2FuIG5vdyByZWFkIHRoZSBhbnN3ZXIgKi8KKwl3bDEyNTFfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKworCWlmIChjbWQtPmhlYWRlci5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKQorCQl3bDEyNTFfZXJyb3IoImVycm9yIGluIHJlYWQgY29tbWFuZCByZXN1bHQ6ICVkIiwKKwkJCSAgICAgY21kLT5oZWFkZXIuc3RhdHVzKTsKKworCW1lbWNweShhbnN3ZXIsIGNtZC0+dmFsdWUsIGxlbik7CisKK291dDoKKwlrZnJlZShjbWQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfY21kX3RlbXBsYXRlX3NldChzdHJ1Y3Qgd2wxMjUxICp3bCwgdTE2IGNtZF9pZCwKKwkJCSAgICB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuKQoreworCXN0cnVjdCB3bDEyNTFfY21kX3BhY2tldF90ZW1wbGF0ZSAqY21kOworCXNpemVfdCBjbWRfbGVuOworCWludCByZXQgPSAwOworCisJd2wxMjUxX2RlYnVnKERFQlVHX0NNRCwgImNtZCB0ZW1wbGF0ZSAlZCIsIGNtZF9pZCk7CisKKwlXQVJOX09OKGJ1Zl9sZW4gPiBXTDEyNTFfTUFYX1RFTVBMQVRFX1NJWkUpOworCWJ1Zl9sZW4gPSBtaW5fdChzaXplX3QsIGJ1Zl9sZW4sIFdMMTI1MV9NQVhfVEVNUExBVEVfU0laRSk7CisJY21kX2xlbiA9IEFMSUdOKHNpemVvZigqY21kKSArIGJ1Zl9sZW4sIDQpOworCisJY21kID0ga3phbGxvYyhjbWRfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihidWZfbGVuKTsKKworCWlmIChidWYpCisJCW1lbWNweShjbWQtPmRhdGEsIGJ1ZiwgYnVmX2xlbik7CisKKwlyZXQgPSB3bDEyNTFfY21kX3NlbmQod2wsIGNtZF9pZCwgY21kLCBjbWRfbGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiY21kIHNldF90ZW1wbGF0ZSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9jbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfY21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZmNzk4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2NtZC5oCkBAIC0wLDAgKzEsNDA3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19XTDEyNTFfQ01EX0hfXworI2RlZmluZSBfX1dMMTI1MV9DTURfSF9fCisKKyNpbmNsdWRlICJ3bDEyNTEuaCIKKworc3RydWN0IGFjeF9oZWFkZXI7CisKK2ludCB3bDEyNTFfY21kX3NlbmQoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiB0eXBlLCB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuKTsKK2ludCB3bDEyNTFfY21kX3Rlc3Qoc3RydWN0IHdsMTI1MSAqd2wsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIHU4IGFuc3dlcik7CitpbnQgd2wxMjUxX2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMjUxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOworaW50IHdsMTI1MV9jbWRfY29uZmlndXJlKHN0cnVjdCB3bDEyNTEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CitpbnQgd2wxMjUxX2NtZF92Ym0oc3RydWN0IHdsMTI1MSAqd2wsIHU4IGlkZW50aXR5LAorCQkgICB2b2lkICpiaXRtYXAsIHUxNiBiaXRtYXBfbGVuLCB1OCBiaXRtYXBfY29udHJvbCk7CitpbnQgd2wxMjUxX2NtZF9kYXRhX3BhdGgoc3RydWN0IHdsMTI1MSAqd2wsIHU4IGNoYW5uZWwsIGJvb2wgZW5hYmxlKTsKK2ludCB3bDEyNTFfY21kX2pvaW4oc3RydWN0IHdsMTI1MSAqd2wsIHU4IGJzc190eXBlLCB1OCBjaGFubmVsLAorCQkgICAgdTE2IGJlYWNvbl9pbnRlcnZhbCwgdTggZHRpbV9pbnRlcnZhbCk7CitpbnQgd2wxMjUxX2NtZF9wc19tb2RlKHN0cnVjdCB3bDEyNTEgKndsLCB1OCBwc19tb2RlKTsKK2ludCB3bDEyNTFfY21kX3JlYWRfbWVtb3J5KHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgYWRkciwgdm9pZCAqYW5zd2VyLAorCQkJICAgc2l6ZV90IGxlbik7CitpbnQgd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiBjbWRfaWQsCisJCQkgICAgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbik7CisKKy8qIHVuaXQgbXMgKi8KKyNkZWZpbmUgV0wxMjUxX0NPTU1BTkRfVElNRU9VVCAyMDAwCisKK2VudW0gd2wxMjUxX2NvbW1hbmRzIHsKKwlDTURfUkVTRVQgICAgICAgICAgID0gMCwKKwlDTURfSU5URVJST0dBVEUgICAgID0gMSwgICAgLyp1c2UgdGhpcyB0byByZWFkIGluZm9ybWF0aW9uIGVsZW1lbnRzKi8KKwlDTURfQ09ORklHVVJFICAgICAgID0gMiwgICAgLyp1c2UgdGhpcyB0byB3cml0ZSBpbmZvcm1hdGlvbiBlbGVtZW50cyovCisJQ01EX0VOQUJMRV9SWCAgICAgICA9IDMsCisJQ01EX0VOQUJMRV9UWCAgICAgICA9IDQsCisJQ01EX0RJU0FCTEVfUlggICAgICA9IDUsCisJQ01EX0RJU0FCTEVfVFggICAgICA9IDYsCisJQ01EX1NDQU4gICAgICAgICAgICA9IDgsCisJQ01EX1NUT1BfU0NBTiAgICAgICA9IDksCisJQ01EX1ZCTSAgICAgICAgICAgICA9IDEwLAorCUNNRF9TVEFSVF9KT0lOICAgICAgPSAxMSwKKwlDTURfU0VUX0tFWVMgICAgICAgID0gMTIsCisJQ01EX1JFQURfTUVNT1JZICAgICA9IDEzLAorCUNNRF9XUklURV9NRU1PUlkgICAgPSAxNCwKKwlDTURfQkVBQ09OICAgICAgICAgID0gMTksCisJQ01EX1BST0JFX1JFU1AgICAgICA9IDIwLAorCUNNRF9OVUxMX0RBVEEgICAgICAgPSAyMSwKKwlDTURfUFJPQkVfUkVRICAgICAgID0gMjIsCisJQ01EX1RFU1QgICAgICAgICAgICA9IDIzLAorCUNNRF9SQURJT19DQUxJQlJBVEUgICAgID0gMjUsICAgLyogT0JTT0xFVEUgKi8KKwlDTURfRU5BQkxFX1JYX1BBVEggICAgICA9IDI3LCAgIC8qIE9CU09MRVRFICovCisJQ01EX05PSVNFX0hJU1QgICAgICA9IDI4LAorCUNNRF9SWF9SRVNFVCAgICAgICAgPSAyOSwKKwlDTURfUFNfUE9MTCAgICAgICAgID0gMzAsCisJQ01EX1FPU19OVUxMX0RBVEEgICA9IDMxLAorCUNNRF9MTkFfQ09OVFJPTCAgICAgPSAzMiwKKwlDTURfU0VUX0JDTl9NT0RFICAgID0gMzMsCisJQ01EX01FQVNVUkVNRU5UICAgICAgPSAzNCwKKwlDTURfU1RPUF9NRUFTVVJFTUVOVCA9IDM1LAorCUNNRF9ESVNDT05ORUNUICAgICAgID0gMzYsCisJQ01EX1NFVF9QU19NT0RFICAgICAgPSAzNywKKwlDTURfQ0hBTk5FTF9TV0lUQ0ggICA9IDM4LAorCUNNRF9TVE9QX0NIQU5ORUxfU1dJQ1RIID0gMzksCisJQ01EX0FQX0RJU0NPVkVSWSAgICAgPSA0MCwKKwlDTURfU1RPUF9BUF9ESVNDT1ZFUlkgPSA0MSwKKwlDTURfU1BTX1NDQU4gPSA0MiwKKwlDTURfU1RPUF9TUFNfU0NBTiA9IDQzLAorCUNNRF9IRUFMVEhfQ0hFQ0sgICAgID0gNDUsCisJQ01EX0RFQlVHICAgICAgICAgICAgPSA0NiwKKwlDTURfVFJJR0dFUl9TQ0FOX1RPICA9IDQ3LAorCisJTlVNX0NPTU1BTkRTLAorCU1BWF9DT01NQU5EX0lEID0gMHhGRkZGLAorfTsKKworI2RlZmluZSBNQVhfQ01EX1BBUkFNUyA1NzIKKworc3RydWN0IHdsMTI1MV9jbWRfaGVhZGVyIHsKKwl1MTYgaWQ7CisJdTE2IHN0YXR1czsKKwkvKiBwYXlsb2FkICovCisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgIHdsMTI1MV9jb21tYW5kIHsKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF9oZWFkZXIgaGVhZGVyOworCXU4ICBwYXJhbWV0ZXJzW01BWF9DTURfUEFSQU1TXTsKK307CisKK2VudW0geworCUNNRF9NQUlMQk9YX0lETEUgICAgICAgICAgICAgIAkJPSAgMCwKKwlDTURfU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAJCT0gIDEsCisJQ01EX1NUQVRVU19VTktOT1dOX0NNRCAgICAgICAgCQk9ICAyLAorCUNNRF9TVEFUVVNfVU5LTk9XTl9JRSAgICAgICAgIAkJPSAgMywKKwlDTURfU1RBVFVTX1JFSkVDVF9NRUFTX1NHX0FDVElWRSAJPSAxMSwKKwlDTURfU1RBVFVTX1JYX0JVU1kgICAgICAgICAgICAJCT0gMTMsCisJQ01EX1NUQVRVU19JTlZBTElEX1BBUkFNICAgICAgCQk9IDE0LAorCUNNRF9TVEFUVVNfVEVNUExBVEVfVE9PX0xBUkdFIAkJPSAxNSwKKwlDTURfU1RBVFVTX09VVF9PRl9NRU1PUlkgICAgICAJCT0gMTYsCisJQ01EX1NUQVRVU19TVEFfVEFCTEVfRlVMTCAgICAgCQk9IDE3LAorCUNNRF9TVEFUVVNfUkFESU9fRVJST1IgICAgICAgIAkJPSAxOCwKKwlDTURfU1RBVFVTX1dST05HX05FU1RJTkcgICAgICAJCT0gMTksCisJQ01EX1NUQVRVU19USU1FT1VUICAgICAgICAgICAgCQk9IDIxLCAvKiBEcml2ZXIgaW50ZXJuYWwgdXNlLiovCisJQ01EX1NUQVRVU19GV19SRVNFVCAgICAgICAgICAgCQk9IDIyLCAvKiBEcml2ZXIgaW50ZXJuYWwgdXNlLiovCisJTUFYX0NPTU1BTkRfU1RBVFVTICAgICAgICAgICAgCQk9IDB4ZmYKK307CisKKworLyoKKyAqIENNRF9SRUFEX01FTU9SWQorICoKKyAqIFRoZSBob3N0IGlzc3VlcyB0aGlzIGNvbW1hbmQgdG8gcmVhZCB0aGUgV2lMaW5rIGRldmljZSBtZW1vcnkvcmVnaXN0ZXJzLgorICoKKyAqIE5vdGU6IFRoZSBCYXNlIEJhbmQgYWRkcmVzcyBoYXMgc3BlY2lhbCBoYW5kbGluZyAoMTYgYml0cyByZWdpc3RlcnMgYW5kCisgKiBhZGRyZXNzZXMpLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLgorICovCisvKgorICogQ01EX1dSSVRFX01FTU9SWQorICoKKyAqIFRoZSBob3N0IGlzc3VlcyB0aGlzIGNvbW1hbmQgdG8gd3JpdGUgdGhlIFdpTGluayBkZXZpY2UgbWVtb3J5L3JlZ2lzdGVycy4KKyAqCisgKiBUaGUgQmFzZSBCYW5kIGFkZHJlc3MgaGFzIHNwZWNpYWwgaGFuZGxpbmcgKDE2IGJpdHMgcmVnaXN0ZXJzIGFuZAorICogYWRkcmVzc2VzKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgaGFyZHdhcmUgc3BlY2lmaWNhdGlvbi4KKyAqLworI2RlZmluZSBNQVhfUkVBRF9TSVpFIDI1NgorCitzdHJ1Y3QgY21kX3JlYWRfd3JpdGVfbWVtb3J5IHsKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJLyogVGhlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uKi8KKwl1MzIgYWRkcjsKKworCS8qIFRoZSBhbW91bnQgb2YgZGF0YSBpbiBieXRlcyB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8gdGhlIFdpTGluaworCSAqIGRldmljZS4qLworCXUzMiBzaXplOworCisJLyogVGhlIGFjdHVhbCB2YWx1ZSByZWFkIGZyb20gb3Igd3JpdHRlbiB0byB0aGUgV2lsaW5rLiBUaGUgc291cmNlCisJICAgb2YgdGhpcyBmaWVsZCBpcyB0aGUgSG9zdCBpbiBXUklURSBjb21tYW5kIG9yIHRoZSBXaWxpbmsgaW4gUkVBRAorCSAgIGNvbW1hbmQuICovCisJdTggdmFsdWVbTUFYX1JFQURfU0laRV07Cit9OworCisjZGVmaW5lIENNRE1CT1hfSEVBREVSX0xFTiA0CisjZGVmaW5lIENNRE1CT1hfSU5GT19FTEVNX0hFQURFUl9MRU4gNAorCisKK3N0cnVjdCBiYXNpY19zY2FuX3BhcmFtZXRlcnMgeworCXUzMiByeF9jb25maWdfb3B0aW9uczsKKwl1MzIgcnhfZmlsdGVyX29wdGlvbnM7CisKKwkvKgorCSAqIFNjYW4gb3B0aW9uczoKKwkgKiBiaXQgMDogV2hlbiB0aGlzIGJpdCBpcyBzZXQsIHBhc3NpdmUgc2Nhbi4KKwkgKiBiaXQgMTogQmFuZCwgd2hlbiB0aGlzIGJpdCBpcyBzZXQgd2Ugc2NhbgorCSAqIGluIHRoZSA1R2h6IGJhbmQuCisJICogYml0IDI6IHZvaWNlIG1vZGUsIDAgZm9yIG5vcm1hbCBzY2FuLgorCSAqIGJpdCAzOiBzY2FuIHByaW9yaXR5LCAxIGZvciBoaWdoIHByaW9yaXR5LgorCSAqLworCXUxNiBzY2FuX29wdGlvbnM7CisKKwkvKiBOdW1iZXIgb2YgY2hhbm5lbHMgdG8gc2NhbiAqLworCXU4IG51bV9jaGFubmVsczsKKworCS8qIE51bWJlciBvcGYgcHJvYmUgcmVxdWVzdHMgdG8gc2VuZCwgcGVyIGNoYW5uZWwgKi8KKwl1OCBudW1fcHJvYmVfcmVxdWVzdHM7CisKKwkvKiBSYXRlIGFuZCBtb2R1bGF0aW9uIGZvciBwcm9iZSByZXF1ZXN0cyAqLworCXUxNiB0eF9yYXRlOworCisJdTggdGlkX3RyaWdnZXI7CisJdTggc3NpZF9sZW47CisJdTMyIHNzaWRbOF07CisKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYmFzaWNfc2Nhbl9jaGFubmVsX3BhcmFtZXRlcnMgeworCXUzMiBtaW5fZHVyYXRpb247IC8qIGluIFRVICovCisJdTMyIG1heF9kdXJhdGlvbjsgLyogaW4gVFUgKi8KKwl1MzIgYnNzaWRfbHNiOworCXUxNiBic3NpZF9tc2I7CisKKwkvKgorCSAqIGJpdHMgMC0zOiBFYXJseSB0ZXJtaW5hdGlvbiBjb3VudC4KKwkgKiBiaXRzIDQtNTogRWFybHkgdGVybWluYXRpb24gY29uZGl0aW9uLgorCSAqLworCXU4IGVhcmx5X3Rlcm1pbmF0aW9uOworCisJdTggdHhfcG93ZXJfYXR0OworCXU4IGNoYW5uZWw7CisJdTggcGFkWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIFNDQU4gcGFyYW1ldGVycyAqLworI2RlZmluZSBTQ0FOX01BWF9OVU1fT0ZfQ0hBTk5FTFMgMTYKKworc3RydWN0IGNtZF9zY2FuIHsKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJc3RydWN0IGJhc2ljX3NjYW5fcGFyYW1ldGVycyBwYXJhbXM7CisJc3RydWN0IGJhc2ljX3NjYW5fY2hhbm5lbF9wYXJhbWV0ZXJzIGNoYW5uZWxzW1NDQU5fTUFYX05VTV9PRl9DSEFOTkVMU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSB7CisJQlNTX1RZUEVfSUJTUyA9IDAsCisJQlNTX1RZUEVfU1RBX0JTUyA9IDIsCisJQlNTX1RZUEVfQVBfQlNTID0gMywKKwlNQVhfQlNTX1RZUEUgPSAweEZGCit9OworCisjZGVmaW5lIEpPSU5fQ01EX0NUUkxfVFhfRkxVU0ggICAgICAgICAgICAgMHg4MCAvKiBGaXJtd2FyZSBmbHVzaGVzIGFsbCBUeCAqLworI2RlZmluZSBKT0lOX0NNRF9DVFJMX0VBUkxZX1dBS0VVUF9FTkFCTEUgIDB4MDEgLyogRWFybHkgd2FrZXVwIHRpbWUgKi8KKworCitzdHJ1Y3QgY21kX2pvaW4geworCXN0cnVjdCB3bDEyNTFfY21kX2hlYWRlciBoZWFkZXI7CisKKwl1MzIgYnNzaWRfbHNiOworCXUxNiBic3NpZF9tc2I7CisJdTE2IGJlYWNvbl9pbnRlcnZhbDsgLyogaW4gVEJUVHMgKi8KKwl1MzIgcnhfY29uZmlnX29wdGlvbnM7CisJdTMyIHJ4X2ZpbHRlcl9vcHRpb25zOworCisJLyoKKwkgKiBUaGUgdGFyZ2V0IHVzZXMgdGhpcyBmaWVsZCB0byBkZXRlcm1pbmUgdGhlIHJhdGUgYXQKKwkgKiB3aGljaCB0byB0cmFuc21pdCBjb250cm9sIGZyYW1lIHJlc3BvbnNlcyAoc3VjaCBhcworCSAqIEFDSyBvciBDVFMgZnJhbWVzKS4KKwkgKi8KKwl1MTYgYmFzaWNfcmF0ZV9zZXQ7CisJdTggZHRpbV9pbnRlcnZhbDsKKwl1OCB0eF9jdHJsX2ZyYW1lX3JhdGU7IC8qIE9CU09MRVRFICovCisJdTggdHhfY3RybF9mcmFtZV9tb2Q7ICAvKiBPQlNPTEVURSAqLworCS8qCisJICogYml0cyAwLTI6IFRoaXMgYml0d2lzZSBmaWVsZCBzcGVjaWZpZXMgdGhlIHR5cGUKKwkgKiBvZiBCU1MgdG8gc3RhcnQgb3Igam9pbiAoQlNTX1RZUEVfKikuCisJICogYml0IDQ6IEJhbmQgLSBUaGUgcmFkaW8gYmFuZCBpbiB3aGljaCB0byBqb2luCisJICogb3Igc3RhcnQuCisJICogIDAgLSAyLjRHSHogYmFuZAorCSAqICAxIC0gNUdIeiBiYW5kCisJICogYml0cyAzLCA1LTc6IFJlc2VydmVkCisJICovCisJdTggYnNzX3R5cGU7CisJdTggY2hhbm5lbDsKKwl1OCBzc2lkX2xlbjsKKwl1OCBzc2lkW0lXX0VTU0lEX01BWF9TSVpFXTsKKwl1OCBjdHJsOyAvKiBKT0lOX0NNRF9DVFJMXyogKi8KKwl1OCB0eF9tZ3RfZnJhbWVfcmF0ZTsgLyogT0JTT0xFVEUgKi8KKwl1OCB0eF9tZ3RfZnJhbWVfbW9kOyAgLyogT0JTT0xFVEUgKi8KKwl1OCByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgY21kX2VuYWJsZWRpc2FibGVfcGF0aCB7CisJc3RydWN0IHdsMTI1MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXU4IGNoYW5uZWw7CisJdTggcGFkZGluZ1szXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFdMMTI1MV9NQVhfVEVNUExBVEVfU0laRSAzMDAKKworc3RydWN0IHdsMTI1MV9jbWRfcGFja2V0X3RlbXBsYXRlIHsKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJX19sZTE2IHNpemU7CisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFRJTV9FTEVfSUQgICAgNQorI2RlZmluZSBQQVJUSUFMX1ZCTV9NQVggICAgMjUxCisKK3N0cnVjdCB3bDEyNTFfdGltIHsKKwl1OCBpZGVudGl0eTsKKwl1OCBsZW5ndGg7CisJdTggZHRpbV9jb3VudDsKKwl1OCBkdGltX3BlcmlvZDsKKwl1OCBiaXRtYXBfY3RybDsKKwl1OCBwdmJfZmllbGRbUEFSVElBTF9WQk1fTUFYXTsgLyogUGFydGlhbCBWaXJ0dWFsIEJpdG1hcCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIFZpcnR1YWwgQml0IE1hcCB1cGRhdGUgKi8KK3N0cnVjdCB3bDEyNTFfY21kX3ZibV91cGRhdGUgeworCXN0cnVjdCB3bDEyNTFfY21kX2hlYWRlciBoZWFkZXI7CisJX19sZTE2IGxlbjsKKwl1OCAgcGFkZGluZ1syXTsKKwlzdHJ1Y3Qgd2wxMjUxX3RpbSB0aW07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSB3bDEyNTFfY21kX3BzX21vZGUgeworCVNUQVRJT05fQUNUSVZFX01PREUsCisJU1RBVElPTl9QT1dFUl9TQVZFX01PREUKK307CisKK3N0cnVjdCB3bDEyNTFfY21kX3BzX3BhcmFtcyB7CisJc3RydWN0IHdsMTI1MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXU4IHBzX21vZGU7IC8qIFNUQVRJT05fKiAqLworCXU4IHNlbmRfbnVsbF9kYXRhOyAvKiBEbyB3ZSBoYXZlIHRvIHNlbmQgTlVMTCBkYXRhIHBhY2tldCA/ICovCisJdTggcmV0cmllczsgLyogTnVtYmVyIG9mIHJldGlyZXMgZm9yIHRoZSBpbml0aWFsIE5VTEwgZGF0YSBwYWNrZXQgKi8KKworCSAvKgorCSAgKiBUVXMgZHVyaW5nIHdoaWNoIHRoZSB0YXJnZXQgc3RheXMgYXdha2UgYWZ0ZXIgc3dpdGNoaW5nCisJICAqIHRvIHBvd2VyIHNhdmUgbW9kZS4KKwkgICovCisJdTggaGFuZ19vdmVyX3BlcmlvZDsKKwl1MTYgbnVsbF9kYXRhX3JhdGU7CisJdTggcGFkWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB3bDEyNTFfY21kX3RyaWdnZXJfc2Nhbl90byB7CisJc3RydWN0IHdsMTI1MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXUzMiB0aW1lb3V0OworfTsKKworLyogSFcgZW5jcnlwdGlvbiBrZXlzICovCisjZGVmaW5lIE5VTV9BQ0NFU1NfQ0FURUdPUklFU19DT1BZIDQKKyNkZWZpbmUgTUFYX0tFWV9TSVpFIDMyCisKKy8qIFdoZW4gc2V0LCBkaXNhYmxlIEhXIGVuY3J5cHRpb24gKi8KKyNkZWZpbmUgREZfRU5DUllQVElPTl9ESVNBQkxFICAgICAgMHgwMQorLyogV2hlbiBzZXQsIGRpc2FibGUgSFcgZGVjcnlwdGlvbiAqLworI2RlZmluZSBERl9TTklGRl9NT0RFX0VOQUJMRSAgICAgICAweDgwCisKK2VudW0gd2wxMjUxX2NtZF9rZXlfYWN0aW9uIHsKKwlLRVlfQUREX09SX1JFUExBQ0UgPSAxLAorCUtFWV9SRU1PVkUgICAgICAgICA9IDIsCisJS0VZX1NFVF9JRCAgICAgICAgID0gMywKKwlNQVhfS0VZX0FDVElPTiAgICAgPSAweGZmZmYsCit9OworCitlbnVtIHdsMTI1MV9jbWRfa2V5X3R5cGUgeworCUtFWV9XRVBfREVGQVVMVCAgICAgICA9IDAsCisJS0VZX1dFUF9BRERSICAgICAgICAgID0gMSwKKwlLRVlfQUVTX0dST1VQICAgICAgICAgPSA0LAorCUtFWV9BRVNfUEFJUldJU0UgICAgICA9IDUsCisJS0VZX1dFUF9HUk9VUCAgICAgICAgID0gNiwKKwlLRVlfVEtJUF9NSUNfR1JPVVAgICAgPSAxMCwKKwlLRVlfVEtJUF9NSUNfUEFJUldJU0UgPSAxMSwKK307CisKKy8qCisgKgorICoga2V5X3R5cGVfZSAgIGtleSBzaXplICAgIGtleSBmb3JtYXQKKyAqIC0tLS0tLS0tLS0gICAtLS0tLS0tLS0gICAtLS0tLS0tLS0tCisgKiAweDAwICAgICAgICAgNSwgMTMsIDI5ICAgS2V5IGRhdGEKKyAqIDB4MDEgICAgICAgICA1LCAxMywgMjkgICBLZXkgZGF0YQorICogMHgwNCAgICAgICAgIDE2ICAgICAgICAgIDE2IGJ5dGVzIG9mIGtleSBkYXRhCisgKiAweDA1ICAgICAgICAgMTYgICAgICAgICAgMTYgYnl0ZXMgb2Yga2V5IGRhdGEKKyAqIDB4MGEgICAgICAgICAzMiAgICAgICAgICAxNiBieXRlcyBvZiBUS0lQIGtleSBkYXRhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgOCBieXRlcyBvZiBSWCBNSUMga2V5IGRhdGEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICA4IGJ5dGVzIG9mIFRYIE1JQyBrZXkgZGF0YQorICogMHgwYiAgICAgICAgIDMyICAgICAgICAgIDE2IGJ5dGVzIG9mIFRLSVAga2V5IGRhdGEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICA4IGJ5dGVzIG9mIFJYIE1JQyBrZXkgZGF0YQorICogICAgICAgICAgICAgICAgICAgICAgICAgIDggYnl0ZXMgb2YgVFggTUlDIGtleSBkYXRhCisgKgorICovCisKK3N0cnVjdCB3bDEyNTFfY21kX3NldF9rZXlzIHsKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJLyogSWdub3JlZCBmb3IgZGVmYXVsdCBXRVAga2V5ICovCisJdTggYWRkcltFVEhfQUxFTl07CisKKwkvKiBrZXlfYWN0aW9uX2UgKi8KKwl1MTYga2V5X2FjdGlvbjsKKworCXUxNiByZXNlcnZlZF8xOworCisJLyoga2V5IHNpemUgaW4gYnl0ZXMgKi8KKwl1OCBrZXlfc2l6ZTsKKworCS8qIGtleV90eXBlX2UgKi8KKwl1OCBrZXlfdHlwZTsKKwl1OCBzc2lkX3Byb2ZpbGU7CisKKwkvKgorCSAqIFRLSVAsIEFFUzogZnJhbWUncyBrZXkgaWQgZmllbGQuCisJICogRm9yIFdFUCBkZWZhdWx0IGtleToga2V5IGlkOworCSAqLworCXU4IGlkOworCXU4IHJlc2VydmVkXzJbNl07CisJdTgga2V5W01BWF9LRVlfU0laRV07CisJdTE2IGFjX3NlcV9udW0xNltOVU1fQUNDRVNTX0NBVEVHT1JJRVNfQ09QWV07CisJdTMyIGFjX3NlcV9udW0zMltOVU1fQUNDRVNTX0NBVEVHT1JJRVNfQ09QWV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisjZW5kaWYgLyogX19XTDEyNTFfQ01EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2RlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDA3MjMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9kZWJ1Z2ZzLmMKQEAgLTAsMCArMSw1MTggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJ3bDEyNTFfZGVidWdmcy5oIgorCisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKyNpbmNsdWRlICJ3bDEyNTEuaCIKKyNpbmNsdWRlICJ3bDEyNTFfYWN4LmgiCisjaW5jbHVkZSAid2wxMjUxX3BzLmgiCisKKy8qIG1zICovCisjZGVmaW5lIFdMMTI1MV9ERUJVR0ZTX1NUQVRTX0xJRkVUSU1FIDEwMDAKKworLyogZGVidWdmcyBtYWNyb3MgaWRlYSBmcm9tIG1hYzgwMjExICovCisKKyNkZWZpbmUgREVCVUdGU19SRUFET05MWV9GSUxFKG5hbWUsIGJ1ZmxlbiwgZm10LCB2YWx1ZS4uLikJCVwKK3N0YXRpYyBzc2l6ZV90IG5hbWUjIyBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCVwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB3bDEyNTEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwkJCQlcCisJY2hhciBidWZbYnVmbGVuXTsJCQkJCQlcCisJaW50IHJlczsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJlcyA9IHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgZm10ICJcbiIsICMjdmFsdWUpOwkJXAorCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOwlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmFtZSMjIF9vcHMgPSB7CQkJXAorCS5yZWFkID0gbmFtZSMjIF9yZWFkLAkJCQkJCVwKKwkub3BlbiA9IHdsMTI1MV9vcGVuX2ZpbGVfZ2VuZXJpYywJCQkJXAorfTsKKworI2RlZmluZSBERUJVR0ZTX0FERChuYW1lLCBwYXJlbnQpCQkJCQlcCisJd2wtPmRlYnVnZnMubmFtZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIDA0MDAsIHBhcmVudCwJXAorCQkJCQkgICAgICAgd2wsICZuYW1lIyMgX29wcyk7CVwKKwlpZiAoSVNfRVJSKHdsLT5kZWJ1Z2ZzLm5hbWUpKSB7CQkJCQlcCisJCXJldCA9IFBUUl9FUlIod2wtPmRlYnVnZnMubmFtZSk7CQkJXAorCQl3bC0+ZGVidWdmcy5uYW1lID0gTlVMTDsJCQkJXAorCQlnb3RvIG91dDsJCQkJCQlcCisJfQorCisjZGVmaW5lIERFQlVHRlNfREVMKG5hbWUpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJZGVidWdmc19yZW1vdmUod2wtPmRlYnVnZnMubmFtZSk7CQkJXAorCQl3bC0+ZGVidWdmcy5uYW1lID0gTlVMTDsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgREVCVUdGU19GV1NUQVRTX0ZJTEUoc3ViLCBuYW1lLCBidWZsZW4sIGZtdCkJCQlcCitzdGF0aWMgc3NpemVfdCBzdWIjIyBfICMjbmFtZSMjIF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAkJXAorCQkJCSAgICAgIGNoYXIgX191c2VyICp1c2VyYnVmLAkJXAorCQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB3bDEyNTEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwkJCQlcCisJY2hhciBidWZbYnVmbGVuXTsJCQkJCQlcCisJaW50IHJlczsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXdsMTI1MV9kZWJ1Z2ZzX3VwZGF0ZV9zdGF0cyh3bCk7CQkJCVwKKwkJCQkJCQkJCVwKKwlyZXMgPSBzY25wcmludGYoYnVmLCBidWZsZW4sIGZtdCAiXG4iLAkJCQlcCisJCQl3bC0+c3RhdHMuZndfc3RhdHMtPnN1Yi5uYW1lKTsJCQlcCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7CVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdWIjIyBfICMjbmFtZSMjIF9vcHMgPSB7CQlcCisJLnJlYWQgPSBzdWIjIyBfICMjbmFtZSMjIF9yZWFkLAkJCQkJXAorCS5vcGVuID0gd2wxMjUxX29wZW5fZmlsZV9nZW5lcmljLAkJCQlcCit9OworCisjZGVmaW5lIERFQlVHRlNfRldTVEFUU19BREQoc3ViLCBuYW1lKQkJCQlcCisJREVCVUdGU19BREQoc3ViIyMgXyAjI25hbWUsIHdsLT5kZWJ1Z2ZzLmZ3X3N0YXRpc3RpY3MpCisKKyNkZWZpbmUgREVCVUdGU19GV1NUQVRTX0RFTChzdWIsIG5hbWUpCQkJCVwKKwlERUJVR0ZTX0RFTChzdWIjIyBfICMjbmFtZSkKKworc3RhdGljIHZvaWQgd2wxMjUxX2RlYnVnZnNfdXBkYXRlX3N0YXRzKHN0cnVjdCB3bDEyNTEgKndsKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0ID0gd2wxMjUxX3BzX2VscF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWlmICh3bC0+c3RhdGUgPT0gV0wxMjUxX1NUQVRFX09OICYmCisJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgd2wtPnN0YXRzLmZ3X3N0YXRzX3VwZGF0ZSArCisJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKFdMMTI1MV9ERUJVR0ZTX1NUQVRTX0xJRkVUSU1FKSkpIHsKKwkJd2wxMjUxX2FjeF9zdGF0aXN0aWNzKHdsLCB3bC0+c3RhdHMuZndfc3RhdHMpOworCQl3bC0+c3RhdHMuZndfc3RhdHNfdXBkYXRlID0gamlmZmllczsKKwl9CisKKwl3bDEyNTFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKworc3RhdGljIGludCB3bDEyNTFfb3Blbl9maWxlX2dlbmVyaWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworREVCVUdGU19GV1NUQVRTX0ZJTEUodHgsIGludGVybmFsX2Rlc2Nfb3ZlcmZsb3csIDIwLCAiJXUiKTsKKworREVCVUdGU19GV1NUQVRTX0ZJTEUocngsIG91dF9vZl9tZW0sIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBoZHJfb3ZlcmZsb3csIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBod19zdHVjaywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocngsIGRyb3BwZWQsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBmY3NfZXJyLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShyeCwgeGZyX2hpbnRfdHJpZywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocngsIHBhdGhfcmVzZXQsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCByZXNldF9jb3VudGVyLCAyMCwgIiV1Iik7CisKK0RFQlVHRlNfRldTVEFUU19GSUxFKGRtYSwgcnhfcmVxdWVzdGVkLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShkbWEsIHJ4X2Vycm9ycywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoZG1hLCB0eF9yZXF1ZXN0ZWQsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGRtYSwgdHhfZXJyb3JzLCAyMCwgIiV1Iik7CisKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgY21kX2NtcGx0LCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGZpcXMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgcnhfaGVhZGVycywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCByeF9tZW1fb3ZlcmZsb3csIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgcnhfcmR5cywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBpcnFzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIHR4X3Byb2NzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGRlY3J5cHRfZG9uZSwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBkbWEwX2RvbmUsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgZG1hMV9kb25lLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIHR4X2V4Y2hfY29tcGxldGUsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgY29tbWFuZHMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgcnhfcHJvY3MsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgaHdfcG1fbW9kZV9jaGFuZ2VzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGhvc3RfYWNrbm93bGVkZ2VzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIHBjaV9wbSwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCB3YWtldXBzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGxvd19yc3NpLCAyMCwgIiV1Iik7CisKK0RFQlVHRlNfRldTVEFUU19GSUxFKHdlcCwgYWRkcl9rZXlfY291bnQsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHdlcCwgZGVmYXVsdF9rZXlfY291bnQsIDIwLCAiJXUiKTsKKy8qIHNraXBwaW5nIHdlcC5yZXNlcnZlZCAqLworREVCVUdGU19GV1NUQVRTX0ZJTEUod2VwLCBrZXlfbm90X2ZvdW5kLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRSh3ZXAsIGRlY3J5cHRfZmFpbCwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUod2VwLCBwYWNrZXRzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRSh3ZXAsIGludGVycnVwdCwgMjAsICIldSIpOworCitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHBzX2VudGVyLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIGVscF9lbnRlciwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCBtaXNzaW5nX2JjbnMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgd2FrZV9vbl9ob3N0LCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHdha2Vfb25fdGltZXJfZXhwLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHR4X3dpdGhfcHMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgdHhfd2l0aG91dF9wcywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCByY3ZkX2JlYWNvbnMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgcG93ZXJfc2F2ZV9vZmYsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgZW5hYmxlX3BzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIGRpc2FibGVfcHMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgZml4X3RzZl9wcywgMjAsICIldSIpOworLyogc2tpcHBpbmcgY29udF9taXNzX2JjbnNfc3ByZWFkIGZvciBub3cgKi8KK0RFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgcmN2ZF9hd2FrZV9iZWFjb25zLCAyMCwgIiV1Iik7CisKK0RFQlVHRlNfRldTVEFUU19GSUxFKG1pYywgcnhfcGt0cywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUobWljLCBjYWxjX2ZhaWx1cmUsIDIwLCAiJXUiKTsKKworREVCVUdGU19GV1NUQVRTX0ZJTEUoYWVzLCBlbmNyeXB0X2ZhaWwsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZGVjcnlwdF9mYWlsLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShhZXMsIGVuY3J5cHRfcGFja2V0cywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoYWVzLCBkZWNyeXB0X3BhY2tldHMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZW5jcnlwdF9pbnRlcnJ1cHQsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZGVjcnlwdF9pbnRlcnJ1cHQsIDIwLCAiJXUiKTsKKworREVCVUdGU19GV1NUQVRTX0ZJTEUoZXZlbnQsIGhlYXJ0X2JlYXQsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGV2ZW50LCBjYWxpYnJhdGlvbiwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoZXZlbnQsIHJ4X21pc21hdGNoLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgcnhfbWVtX2VtcHR5LCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgcnhfcG9vbCwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoZXZlbnQsIG9vbV9sYXRlLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgcGh5X3RyYW5zbWl0X2Vycm9yLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgdHhfc3R1Y2ssIDIwLCAiJXUiKTsKKworREVCVUdGU19GV1NUQVRTX0ZJTEUocHMsIHBzcG9sbF90aW1lb3V0cywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHMsIHVwc2RfdGltZW91dHMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHBzLCB1cHNkX21heF9zcHRpbWUsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHBzLCB1cHNkX21heF9hcHR1cm4sIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHBzLCBwc3BvbGxfbWF4X2FwdHVybiwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHMsIHBzcG9sbF91dGlsaXphdGlvbiwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHMsIHVwc2RfdXRpbGl6YXRpb24sIDIwLCAiJXUiKTsKKworREVCVUdGU19GV1NUQVRTX0ZJTEUocnhwaXBlLCByeF9wcmVwX2JlYWNvbl9kcm9wLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShyeHBpcGUsIGRlc2NyX2hvc3RfaW50X3RyaWdfcnhfZGF0YSwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocnhwaXBlLCBiZWFjb25fYnVmZmVyX3RocmVzX2hvc3RfaW50X3RyaWdfcnhfZGF0YSwKKwkJICAgICAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShyeHBpcGUsIG1pc3NlZF9iZWFjb25faG9zdF9pbnRfdHJpZ19yeF9kYXRhLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShyeHBpcGUsIHR4X3hmcl9ob3N0X2ludF90cmlnX3J4X2RhdGEsIDIwLCAiJXUiKTsKKworREVCVUdGU19SRUFET05MWV9GSUxFKHJldHJ5X2NvdW50LCAyMCwgIiV1Iiwgd2wtPnN0YXRzLnJldHJ5X2NvdW50KTsKK0RFQlVHRlNfUkVBRE9OTFlfRklMRShleGNlc3NpdmVfcmV0cmllcywgMjAsICIldSIsCisJCSAgICAgIHdsLT5zdGF0cy5leGNlc3NpdmVfcmV0cmllcyk7CisKK3N0YXRpYyBzc2l6ZV90IHR4X3F1ZXVlX2xlbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHdsMTI1MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdTMyIHF1ZXVlX2xlbjsKKwljaGFyIGJ1ZlsyMF07CisJaW50IHJlczsKKworCXF1ZXVlX2xlbiA9IHNrYl9xdWV1ZV9sZW4oJndsLT50eF9xdWV1ZSk7CisKKwlyZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLCBxdWV1ZV9sZW4pOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0eF9xdWV1ZV9sZW5fb3BzID0geworCS5yZWFkID0gdHhfcXVldWVfbGVuX3JlYWQsCisJLm9wZW4gPSB3bDEyNTFfb3Blbl9maWxlX2dlbmVyaWMsCit9OworCitzdGF0aWMgdm9pZCB3bDEyNTFfZGVidWdmc19kZWxldGVfZmlsZXMoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJREVCVUdGU19GV1NUQVRTX0RFTCh0eCwgaW50ZXJuYWxfZGVzY19vdmVyZmxvdyk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCBvdXRfb2ZfbWVtKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCBoZHJfb3ZlcmZsb3cpOworCURFQlVHRlNfRldTVEFUU19ERUwocngsIGh3X3N0dWNrKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCBkcm9wcGVkKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCBmY3NfZXJyKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCB4ZnJfaGludF90cmlnKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCBwYXRoX3Jlc2V0KTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCByZXNldF9jb3VudGVyKTsKKworCURFQlVHRlNfRldTVEFUU19ERUwoZG1hLCByeF9yZXF1ZXN0ZWQpOworCURFQlVHRlNfRldTVEFUU19ERUwoZG1hLCByeF9lcnJvcnMpOworCURFQlVHRlNfRldTVEFUU19ERUwoZG1hLCB0eF9yZXF1ZXN0ZWQpOworCURFQlVHRlNfRldTVEFUU19ERUwoZG1hLCB0eF9lcnJvcnMpOworCisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGNtZF9jbXBsdCk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGZpcXMpOworCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCByeF9oZWFkZXJzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgcnhfbWVtX292ZXJmbG93KTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgcnhfcmR5cyk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGlycXMpOworCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCB0eF9wcm9jcyk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGRlY3J5cHRfZG9uZSk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGRtYTBfZG9uZSk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGRtYTFfZG9uZSk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIHR4X2V4Y2hfY29tcGxldGUpOworCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBjb21tYW5kcyk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIHJ4X3Byb2NzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgaHdfcG1fbW9kZV9jaGFuZ2VzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgaG9zdF9hY2tub3dsZWRnZXMpOworCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBwY2lfcG0pOworCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCB3YWtldXBzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgbG93X3Jzc2kpOworCisJREVCVUdGU19GV1NUQVRTX0RFTCh3ZXAsIGFkZHJfa2V5X2NvdW50KTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHdlcCwgZGVmYXVsdF9rZXlfY291bnQpOworCS8qIHNraXBwaW5nIHdlcC5yZXNlcnZlZCAqLworCURFQlVHRlNfRldTVEFUU19ERUwod2VwLCBrZXlfbm90X2ZvdW5kKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHdlcCwgZGVjcnlwdF9mYWlsKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHdlcCwgcGFja2V0cyk7CisJREVCVUdGU19GV1NUQVRTX0RFTCh3ZXAsIGludGVycnVwdCk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgcHNfZW50ZXIpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCBlbHBfZW50ZXIpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCBtaXNzaW5nX2JjbnMpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCB3YWtlX29uX2hvc3QpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCB3YWtlX29uX3RpbWVyX2V4cCk7CisJREVCVUdGU19GV1NUQVRTX0RFTChwd3IsIHR4X3dpdGhfcHMpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCB0eF93aXRob3V0X3BzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgcmN2ZF9iZWFjb25zKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgcG93ZXJfc2F2ZV9vZmYpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCBlbmFibGVfcHMpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCBkaXNhYmxlX3BzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgZml4X3RzZl9wcyk7CisJLyogc2tpcHBpbmcgY29udF9taXNzX2JjbnNfc3ByZWFkIGZvciBub3cgKi8KKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgcmN2ZF9hd2FrZV9iZWFjb25zKTsKKworCURFQlVHRlNfRldTVEFUU19ERUwobWljLCByeF9wa3RzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKG1pYywgY2FsY19mYWlsdXJlKTsKKworCURFQlVHRlNfRldTVEFUU19ERUwoYWVzLCBlbmNyeXB0X2ZhaWwpOworCURFQlVHRlNfRldTVEFUU19ERUwoYWVzLCBkZWNyeXB0X2ZhaWwpOworCURFQlVHRlNfRldTVEFUU19ERUwoYWVzLCBlbmNyeXB0X3BhY2tldHMpOworCURFQlVHRlNfRldTVEFUU19ERUwoYWVzLCBkZWNyeXB0X3BhY2tldHMpOworCURFQlVHRlNfRldTVEFUU19ERUwoYWVzLCBlbmNyeXB0X2ludGVycnVwdCk7CisJREVCVUdGU19GV1NUQVRTX0RFTChhZXMsIGRlY3J5cHRfaW50ZXJydXB0KTsKKworCURFQlVHRlNfRldTVEFUU19ERUwoZXZlbnQsIGhlYXJ0X2JlYXQpOworCURFQlVHRlNfRldTVEFUU19ERUwoZXZlbnQsIGNhbGlicmF0aW9uKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGV2ZW50LCByeF9taXNtYXRjaCk7CisJREVCVUdGU19GV1NUQVRTX0RFTChldmVudCwgcnhfbWVtX2VtcHR5KTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGV2ZW50LCByeF9wb29sKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGV2ZW50LCBvb21fbGF0ZSk7CisJREVCVUdGU19GV1NUQVRTX0RFTChldmVudCwgcGh5X3RyYW5zbWl0X2Vycm9yKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGV2ZW50LCB0eF9zdHVjayk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHBzLCBwc3BvbGxfdGltZW91dHMpOworCURFQlVHRlNfRldTVEFUU19ERUwocHMsIHVwc2RfdGltZW91dHMpOworCURFQlVHRlNfRldTVEFUU19ERUwocHMsIHVwc2RfbWF4X3NwdGltZSk7CisJREVCVUdGU19GV1NUQVRTX0RFTChwcywgdXBzZF9tYXhfYXB0dXJuKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHBzLCBwc3BvbGxfbWF4X2FwdHVybik7CisJREVCVUdGU19GV1NUQVRTX0RFTChwcywgcHNwb2xsX3V0aWxpemF0aW9uKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHBzLCB1cHNkX3V0aWxpemF0aW9uKTsKKworCURFQlVHRlNfRldTVEFUU19ERUwocnhwaXBlLCByeF9wcmVwX2JlYWNvbl9kcm9wKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4cGlwZSwgZGVzY3JfaG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4cGlwZSwgYmVhY29uX2J1ZmZlcl90aHJlc19ob3N0X2ludF90cmlnX3J4X2RhdGEpOworCURFQlVHRlNfRldTVEFUU19ERUwocnhwaXBlLCBtaXNzZWRfYmVhY29uX2hvc3RfaW50X3RyaWdfcnhfZGF0YSk7CisJREVCVUdGU19GV1NUQVRTX0RFTChyeHBpcGUsIHR4X3hmcl9ob3N0X2ludF90cmlnX3J4X2RhdGEpOworCisJREVCVUdGU19ERUwodHhfcXVldWVfbGVuKTsKKwlERUJVR0ZTX0RFTChyZXRyeV9jb3VudCk7CisJREVCVUdGU19ERUwoZXhjZXNzaXZlX3JldHJpZXMpOworfQorCitzdGF0aWMgaW50IHdsMTI1MV9kZWJ1Z2ZzX2FkZF9maWxlcyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCURFQlVHRlNfRldTVEFUU19BREQodHgsIGludGVybmFsX2Rlc2Nfb3ZlcmZsb3cpOworCisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgb3V0X29mX21lbSk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgaGRyX292ZXJmbG93KTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4LCBod19zdHVjayk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgZHJvcHBlZCk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgZmNzX2Vycik7CisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgeGZyX2hpbnRfdHJpZyk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgcGF0aF9yZXNldCk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgcmVzZXRfY291bnRlcik7CisKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGRtYSwgcnhfcmVxdWVzdGVkKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGRtYSwgcnhfZXJyb3JzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGRtYSwgdHhfcmVxdWVzdGVkKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGRtYSwgdHhfZXJyb3JzKTsKKworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBjbWRfY21wbHQpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBmaXFzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgcnhfaGVhZGVycyk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIHJ4X21lbV9vdmVyZmxvdyk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIHJ4X3JkeXMpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBpcnFzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgdHhfcHJvY3MpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBkZWNyeXB0X2RvbmUpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBkbWEwX2RvbmUpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBkbWExX2RvbmUpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCB0eF9leGNoX2NvbXBsZXRlKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgY29tbWFuZHMpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCByeF9wcm9jcyk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGh3X3BtX21vZGVfY2hhbmdlcyk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGhvc3RfYWNrbm93bGVkZ2VzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgcGNpX3BtKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgd2FrZXVwcyk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGxvd19yc3NpKTsKKworCURFQlVHRlNfRldTVEFUU19BREQod2VwLCBhZGRyX2tleV9jb3VudCk7CisJREVCVUdGU19GV1NUQVRTX0FERCh3ZXAsIGRlZmF1bHRfa2V5X2NvdW50KTsKKwkvKiBza2lwcGluZyB3ZXAucmVzZXJ2ZWQgKi8KKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHdlcCwga2V5X25vdF9mb3VuZCk7CisJREVCVUdGU19GV1NUQVRTX0FERCh3ZXAsIGRlY3J5cHRfZmFpbCk7CisJREVCVUdGU19GV1NUQVRTX0FERCh3ZXAsIHBhY2tldHMpOworCURFQlVHRlNfRldTVEFUU19BREQod2VwLCBpbnRlcnJ1cHQpOworCisJREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHBzX2VudGVyKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgZWxwX2VudGVyKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgbWlzc2luZ19iY25zKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgd2FrZV9vbl9ob3N0KTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgd2FrZV9vbl90aW1lcl9leHApOworCURFQlVHRlNfRldTVEFUU19BREQocHdyLCB0eF93aXRoX3BzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgdHhfd2l0aG91dF9wcyk7CisJREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHJjdmRfYmVhY29ucyk7CisJREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHBvd2VyX3NhdmVfb2ZmKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgZW5hYmxlX3BzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgZGlzYWJsZV9wcyk7CisJREVCVUdGU19GV1NUQVRTX0FERChwd3IsIGZpeF90c2ZfcHMpOworCS8qIHNraXBwaW5nIGNvbnRfbWlzc19iY25zX3NwcmVhZCBmb3Igbm93ICovCisJREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHJjdmRfYXdha2VfYmVhY29ucyk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKG1pYywgcnhfcGt0cyk7CisJREVCVUdGU19GV1NUQVRTX0FERChtaWMsIGNhbGNfZmFpbHVyZSk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZW5jcnlwdF9mYWlsKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZGVjcnlwdF9mYWlsKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZW5jcnlwdF9wYWNrZXRzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZGVjcnlwdF9wYWNrZXRzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZW5jcnlwdF9pbnRlcnJ1cHQpOworCURFQlVHRlNfRldTVEFUU19BREQoYWVzLCBkZWNyeXB0X2ludGVycnVwdCk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGV2ZW50LCBoZWFydF9iZWF0KTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGV2ZW50LCBjYWxpYnJhdGlvbik7CisJREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgcnhfbWlzbWF0Y2gpOworCURFQlVHRlNfRldTVEFUU19BREQoZXZlbnQsIHJ4X21lbV9lbXB0eSk7CisJREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgcnhfcG9vbCk7CisJREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgb29tX2xhdGUpOworCURFQlVHRlNfRldTVEFUU19BREQoZXZlbnQsIHBoeV90cmFuc21pdF9lcnJvcik7CisJREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgdHhfc3R1Y2spOworCisJREVCVUdGU19GV1NUQVRTX0FERChwcywgcHNwb2xsX3RpbWVvdXRzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHBzLCB1cHNkX3RpbWVvdXRzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHBzLCB1cHNkX21heF9zcHRpbWUpOworCURFQlVHRlNfRldTVEFUU19BREQocHMsIHVwc2RfbWF4X2FwdHVybik7CisJREVCVUdGU19GV1NUQVRTX0FERChwcywgcHNwb2xsX21heF9hcHR1cm4pOworCURFQlVHRlNfRldTVEFUU19BREQocHMsIHBzcG9sbF91dGlsaXphdGlvbik7CisJREVCVUdGU19GV1NUQVRTX0FERChwcywgdXBzZF91dGlsaXphdGlvbik7CisKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4cGlwZSwgcnhfcHJlcF9iZWFjb25fZHJvcCk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeHBpcGUsIGRlc2NyX2hvc3RfaW50X3RyaWdfcnhfZGF0YSk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeHBpcGUsIGJlYWNvbl9idWZmZXJfdGhyZXNfaG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4cGlwZSwgbWlzc2VkX2JlYWNvbl9ob3N0X2ludF90cmlnX3J4X2RhdGEpOworCURFQlVHRlNfRldTVEFUU19BREQocnhwaXBlLCB0eF94ZnJfaG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKKworCURFQlVHRlNfQUREKHR4X3F1ZXVlX2xlbiwgd2wtPmRlYnVnZnMucm9vdGRpcik7CisJREVCVUdGU19BREQocmV0cnlfY291bnQsIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOworCURFQlVHRlNfQUREKGV4Y2Vzc2l2ZV9yZXRyaWVzLCB3bC0+ZGVidWdmcy5yb290ZGlyKTsKKworb3V0OgorCWlmIChyZXQgPCAwKQorCQl3bDEyNTFfZGVidWdmc19kZWxldGVfZmlsZXMod2wpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCB3bDEyNTFfZGVidWdmc19yZXNldChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwltZW1zZXQod2wtPnN0YXRzLmZ3X3N0YXRzLCAwLCBzaXplb2YoKndsLT5zdGF0cy5md19zdGF0cykpOworCXdsLT5zdGF0cy5yZXRyeV9jb3VudCA9IDA7CisJd2wtPnN0YXRzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMDsKK30KKworaW50IHdsMTI1MV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldDsKKworCXdsLT5kZWJ1Z2ZzLnJvb3RkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoS0JVSUxEX01PRE5BTUUsIE5VTEwpOworCisJaWYgKElTX0VSUih3bC0+ZGVidWdmcy5yb290ZGlyKSkgeworCQlyZXQgPSBQVFJfRVJSKHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOworCQl3bC0+ZGVidWdmcy5yb290ZGlyID0gTlVMTDsKKwkJZ290byBlcnI7CisJfQorCisJd2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcyA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZnctc3RhdGlzdGljcyIsCisJCQkJCQkgICAgICAgd2wtPmRlYnVnZnMucm9vdGRpcik7CisKKwlpZiAoSVNfRVJSKHdsLT5kZWJ1Z2ZzLmZ3X3N0YXRpc3RpY3MpKSB7CisJCXJldCA9IFBUUl9FUlIod2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcyk7CisJCXdsLT5kZWJ1Z2ZzLmZ3X3N0YXRpc3RpY3MgPSBOVUxMOworCQlnb3RvIGVycl9yb290OworCX0KKworCXdsLT5zdGF0cy5md19zdGF0cyA9IGt6YWxsb2Moc2l6ZW9mKCp3bC0+c3RhdHMuZndfc3RhdHMpLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCisJaWYgKCF3bC0+c3RhdHMuZndfc3RhdHMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnc7CisJfQorCisJd2wtPnN0YXRzLmZ3X3N0YXRzX3VwZGF0ZSA9IGppZmZpZXM7CisKKwlyZXQgPSB3bDEyNTFfZGVidWdmc19hZGRfZmlsZXMod2wpOworCisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2ZpbGU7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZpbGU6CisJa2ZyZWUod2wtPnN0YXRzLmZ3X3N0YXRzKTsKKwl3bC0+c3RhdHMuZndfc3RhdHMgPSBOVUxMOworCitlcnJfZnc6CisJZGVidWdmc19yZW1vdmUod2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcyk7CisJd2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcyA9IE5VTEw7CisKK2Vycl9yb290OgorCWRlYnVnZnNfcmVtb3ZlKHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOworCXdsLT5kZWJ1Z2ZzLnJvb3RkaXIgPSBOVUxMOworCitlcnI6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB3bDEyNTFfZGVidWdmc19leGl0KHN0cnVjdCB3bDEyNTEgKndsKQoreworCXdsMTI1MV9kZWJ1Z2ZzX2RlbGV0ZV9maWxlcyh3bCk7CisKKwlrZnJlZSh3bC0+c3RhdHMuZndfc3RhdHMpOworCXdsLT5zdGF0cy5md19zdGF0cyA9IE5VTEw7CisKKwlkZWJ1Z2ZzX3JlbW92ZSh3bC0+ZGVidWdmcy5md19zdGF0aXN0aWNzKTsKKwl3bC0+ZGVidWdmcy5md19zdGF0aXN0aWNzID0gTlVMTDsKKworCWRlYnVnZnNfcmVtb3ZlKHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOworCXdsLT5kZWJ1Z2ZzLnJvb3RkaXIgPSBOVUxMOworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2RlYnVnZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZGVidWdmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYzNkMDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2RlYnVnZnMuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIFdMMTI1MV9ERUJVR0ZTX0gKKyNkZWZpbmUgV0wxMjUxX0RFQlVHRlNfSAorCisjaW5jbHVkZSAid2wxMjUxLmgiCisKK2ludCB3bDEyNTFfZGVidWdmc19pbml0KHN0cnVjdCB3bDEyNTEgKndsKTsKK3ZvaWQgd2wxMjUxX2RlYnVnZnNfZXhpdChzdHJ1Y3Qgd2wxMjUxICp3bCk7Cit2b2lkIHdsMTI1MV9kZWJ1Z2ZzX3Jlc2V0KHN0cnVjdCB3bDEyNTEgKndsKTsKKworI2VuZGlmIC8qIFdMMTI1MV9ERUJVR0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZXZlbnQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDA3NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ldmVudC5jCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJ3bDEyNTEuaCIKKyNpbmNsdWRlICJ3bDEyNTFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjUxX2lvLmgiCisjaW5jbHVkZSAid2wxMjUxX2V2ZW50LmgiCisjaW5jbHVkZSAid2wxMjUxX3BzLmgiCisKK3N0YXRpYyBpbnQgd2wxMjUxX2V2ZW50X3NjYW5fY29tcGxldGUoc3RydWN0IHdsMTI1MSAqd2wsCisJCQkJICAgICAgc3RydWN0IGV2ZW50X21haWxib3ggKm1ib3gpCit7CisJd2wxMjUxX2RlYnVnKERFQlVHX0VWRU5ULCAic3RhdHVzOiAweCV4LCBjaGFubmVsczogJWQiLAorCQkgICAgIG1ib3gtPnNjaGVkdWxlZF9zY2FuX3N0YXR1cywKKwkJICAgICBtYm94LT5zY2hlZHVsZWRfc2Nhbl9jaGFubmVscyk7CisKKwlpZiAod2wtPnNjYW5uaW5nKSB7CisJCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgZmFsc2UpOworCQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCQl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBodyBzY2FuIGNvbXBsZXRlZCIpOworCQl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX2V2ZW50X21ib3hfZHVtcChzdHJ1Y3QgZXZlbnRfbWFpbGJveCAqbWJveCkKK3sKKwl3bDEyNTFfZGVidWcoREVCVUdfRVZFTlQsICJNQk9YIERVTVA6Iik7CisJd2wxMjUxX2RlYnVnKERFQlVHX0VWRU5ULCAiXHR2ZWN0b3I6IDB4JXgiLCBtYm94LT5ldmVudHNfdmVjdG9yKTsKKwl3bDEyNTFfZGVidWcoREVCVUdfRVZFTlQsICJcdG1hc2s6IDB4JXgiLCBtYm94LT5ldmVudHNfbWFzayk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2V2ZW50X3Byb2Nlc3Moc3RydWN0IHdsMTI1MSAqd2wsIHN0cnVjdCBldmVudF9tYWlsYm94ICptYm94KQoreworCWludCByZXQ7CisJdTMyIHZlY3RvcjsKKworCXdsMTI1MV9ldmVudF9tYm94X2R1bXAobWJveCk7CisKKwl2ZWN0b3IgPSBtYm94LT5ldmVudHNfdmVjdG9yICYgfihtYm94LT5ldmVudHNfbWFzayk7CisJd2wxMjUxX2RlYnVnKERFQlVHX0VWRU5ULCAidmVjdG9yOiAweCV4IiwgdmVjdG9yKTsKKworCWlmICh2ZWN0b3IgJiBTQ0FOX0NPTVBMRVRFX0VWRU5UX0lEKSB7CisJCXJldCA9IHdsMTI1MV9ldmVudF9zY2FuX2NvbXBsZXRlKHdsLCBtYm94KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmICh2ZWN0b3IgJiBCU1NfTE9TRV9FVkVOVF9JRCkgeworCQl3bDEyNTFfZGVidWcoREVCVUdfRVZFTlQsICJCU1NfTE9TRV9FVkVOVCIpOworCisJCWlmICh3bC0+cHNtX3JlcXVlc3RlZCAmJiB3bC0+cHNtKSB7CisJCQlyZXQgPSB3bDEyNTFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgd2wxMjUxX2V2ZW50X3VubWFzayhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjUxX2FjeF9ldmVudF9tYm94X21hc2sod2wsIH4od2wtPmV2ZW50X21hc2spKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCit2b2lkIHdsMTI1MV9ldmVudF9tYm94X2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwl3bC0+bWJveF9wdHJbMF0gPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgUkVHX0VWRU5UX01BSUxCT1hfUFRSKTsKKwl3bC0+bWJveF9wdHJbMV0gPSB3bC0+bWJveF9wdHJbMF0gKyBzaXplb2Yoc3RydWN0IGV2ZW50X21haWxib3gpOworCisJd2wxMjUxX2RlYnVnKERFQlVHX0VWRU5ULCAiTUJPWCBwdHJzOiAweCV4IDB4JXgiLAorCQkgICAgIHdsLT5tYm94X3B0clswXSwgd2wtPm1ib3hfcHRyWzFdKTsKK30KKworaW50IHdsMTI1MV9ldmVudF9oYW5kbGUoc3RydWN0IHdsMTI1MSAqd2wsIHU4IG1ib3hfbnVtKQoreworCXN0cnVjdCBldmVudF9tYWlsYm94IG1ib3g7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19FVkVOVCwgIkVWRU5UIG9uIG1ib3ggJWQiLCBtYm94X251bSk7CisKKwlpZiAobWJveF9udW0gPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGZpcnN0IHdlIHJlYWQgdGhlIG1ib3ggZGVzY3JpcHRvciAqLworCXdsMTI1MV9tZW1fcmVhZCh3bCwgd2wtPm1ib3hfcHRyW21ib3hfbnVtXSwgJm1ib3gsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBldmVudF9tYWlsYm94KSk7CisKKwkvKiBwcm9jZXNzIHRoZSBkZXNjcmlwdG9yICovCisJcmV0ID0gd2wxMjUxX2V2ZW50X3Byb2Nlc3Mod2wsICZtYm94KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHRoZW4gd2UgbGV0IHRoZSBmaXJtd2FyZSBrbm93IGl0IGNhbiBnbyBvbi4uLiovCisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHLCBJTlRSX1RSSUdfRVZFTlRfQUNLKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ldmVudC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMGFjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2V2ZW50LmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1dMMTI1MV9FVkVOVF9IX18KKyNkZWZpbmUgX19XTDEyNTFfRVZFTlRfSF9fCisKKy8qCisgKiBNYm94IGV2ZW50cworICoKKyAqIFRoZSBldmVudCBtZWNoYW5pc20gaXMgYmFzZWQgb24gYSBwYWlyIG9mIGV2ZW50IGJ1ZmZlcnMgKGJ1ZmZlcnMgQSBhbmQKKyAqIEIpIGF0IGZpeGVkIGxvY2F0aW9ucyBpbiB0aGUgdGFyZ2V0J3MgbWVtb3J5LiBUaGUgaG9zdCBwcm9jZXNzZXMgb25lCisgKiBidWZmZXIgd2hpbGUgdGhlIG90aGVyIGJ1ZmZlciBjb250aW51ZXMgdG8gY29sbGVjdCBldmVudHMuIElmIHRoZSBob3N0CisgKiBpcyBub3QgcHJvY2Vzc2luZyBldmVudHMsIGFuIGludGVycnVwdCBpcyBpc3N1ZWQgdG8gc2lnbmFsIHRoYXQgYSBidWZmZXIKKyAqIGlzIHJlYWR5LiBPbmNlIHRoZSBob3N0IGlzIGRvbmUgd2l0aCBwcm9jZXNzaW5nIGV2ZW50cyBmcm9tIG9uZSBidWZmZXIsCisgKiBpdCBzaWduYWxzIHRoZSB0YXJnZXQgKHdpdGggYW4gQUNLIGludGVycnVwdCkgdGhhdCB0aGUgZXZlbnQgYnVmZmVyIGlzCisgKiBmcmVlLgorICovCisKK2VudW0geworCVJFU0VSVkVEMV9FVkVOVF9JRCAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMCksCisJUkVTRVJWRUQyX0VWRU5UX0lEICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxKSwKKwlNRUFTVVJFTUVOVF9TVEFSVF9FVkVOVF9JRCAgICAgICAgICAgICAgID0gQklUKDIpLAorCVNDQU5fQ09NUExFVEVfRVZFTlRfSUQgICAgICAgICAgICAgICAgICAgPSBCSVQoMyksCisJQ0FMSUJSQVRJT05fQ09NUExFVEVfRVZFTlRfSUQgICAgICAgICAgICA9IEJJVCg0KSwKKwlST0FNSU5HX1RSSUdHRVJfTE9XX1JTU0lfRVZFTlRfSUQgICAgICAgID0gQklUKDUpLAorCVBTX1JFUE9SVF9FVkVOVF9JRCAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoNiksCisJU1lOQ0hST05JWkFUSU9OX1RJTUVPVVRfRVZFTlRfSUQgICAgICAgICA9IEJJVCg3KSwKKwlIRUFMVEhfUkVQT1JUX0VWRU5UX0lEICAgICAgICAgICAgICAgICAgID0gQklUKDgpLAorCUFDSV9ERVRFQ1RJT05fRVZFTlRfSUQgICAgICAgICAgICAgICAgICAgPSBCSVQoOSksCisJREVCVUdfUkVQT1JUX0VWRU5UX0lEICAgICAgICAgICAgICAgICAgICA9IEJJVCgxMCksCisJTUFDX1NUQVRVU19FVkVOVF9JRCAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxMSksCisJRElTQ09OTkVDVF9FVkVOVF9DT01QTEVURV9JRCAgICAgICAgICAgICA9IEJJVCgxMiksCisJSk9JTl9FVkVOVF9DT01QTEVURV9JRCAgICAgICAgICAgICAgICAgICA9IEJJVCgxMyksCisJQ0hBTk5FTF9TV0lUQ0hfQ09NUExFVEVfRVZFTlRfSUQgICAgICAgICA9IEJJVCgxNCksCisJQlNTX0xPU0VfRVZFTlRfSUQgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxNSksCisJUk9BTUlOR19UUklHR0VSX01BWF9UWF9SRVRSWV9FVkVOVF9JRCAgICA9IEJJVCgxNiksCisJTUVBU1VSRU1FTlRfQ09NUExFVEVfRVZFTlRfSUQgICAgICAgICAgICA9IEJJVCgxNyksCisJQVBfRElTQ09WRVJZX0NPTVBMRVRFX0VWRU5UX0lEICAgICAgICAgICA9IEJJVCgxOCksCisJU0NIRURVTEVEX1NDQU5fQ09NUExFVEVfRVZFTlRfSUQgICAgICAgICA9IEJJVCgxOSksCisJUFNQT0xMX0RFTElWRVJZX0ZBSUxVUkVfRVZFTlRfSUQgCSA9IEJJVCgyMCksCisJUkVTRVRfQlNTX0VWRU5UX0lEICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgyMSksCisJUkVHQUlORURfQlNTX0VWRU5UX0lEICAgICAgICAgICAgICAgICAgICA9IEJJVCgyMiksCisJUk9BTUlOR19UUklHR0VSX1JFR0FJTkVEX1JTU0lfRVZFTlRfSUQgICA9IEJJVCgyMyksCisJUk9BTUlOR19UUklHR0VSX0xPV19TTlJfRVZFTlRfSUQgICAgICAgICA9IEJJVCgyNCksCisJUk9BTUlOR19UUklHR0VSX1JFR0FJTkVEX1NOUl9FVkVOVF9JRCAgICA9IEJJVCgyNSksCisKKwlEQkdfRVZFTlRfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDI2KSwKKwlCVF9QVEFfU0VOU0VfRVZFTlRfSUQgICAgICAgICAgICAgICAgICAgID0gQklUKDI3KSwKKwlCVF9QVEFfUFJFRElDVElPTl9FVkVOVF9JRCAgICAgICAgICAgICAgID0gQklUKDI4KSwKKwlCVF9QVEFfQVZBTEFOQ0hFX0VWRU5UX0lEICAgICAgICAgICAgICAgID0gQklUKDI5KSwKKworCVBMVF9SWF9DQUxJQlJBVElPTl9DT01QTEVURV9FVkVOVF9JRCAgICAgPSBCSVQoMzApLAorCisJRVZFTlRfTUJPWF9BTExfRVZFTlRfSUQgICAgICAgICAgICAgICAgICA9IDB4N2ZmZmZmZmYsCit9OworCitzdHJ1Y3QgZXZlbnRfZGVidWdfcmVwb3J0IHsKKwl1OCBkZWJ1Z19ldmVudF9pZDsKKwl1OCBudW1fcGFyYW1zOworCXUxNiBwYWQ7CisJdTMyIHJlcG9ydF8xOworCXUzMiByZXBvcnRfMjsKKwl1MzIgcmVwb3J0XzM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGV2ZW50X21haWxib3ggeworCXUzMiBldmVudHNfdmVjdG9yOworCXUzMiBldmVudHNfbWFzazsKKwl1MzIgcmVzZXJ2ZWRfMTsKKwl1MzIgcmVzZXJ2ZWRfMjsKKworCWNoYXIgYXZlcmFnZV9yc3NpX2xldmVsOworCXU4IHBzX3N0YXR1czsKKwl1OCBjaGFubmVsX3N3aXRjaF9zdGF0dXM7CisJdTggc2NoZWR1bGVkX3NjYW5fc3RhdHVzOworCisJLyogQ2hhbm5lbHMgc2Nhbm5lZCBieSB0aGUgc2NoZWR1bGVkIHNjYW4gKi8KKwl1MTYgc2NoZWR1bGVkX3NjYW5fY2hhbm5lbHM7CisKKwkvKiBJZiBiaXQgMCBpcyBzZXQgLT4gdGFyZ2V0J3MgZmF0YWwgZXJyb3IgKi8KKwl1MTYgaGVhbHRoX3JlcG9ydDsKKwl1MTYgYmFkX2ZmdF9jb3VudGVyOworCXU4IGJ0X3B0YV9zZW5zZV9pbmZvOworCXU4IGJ0X3B0YV9wcm90ZWN0aXZlX2luZm87CisJdTMyIHJlc2VydmVkOworCXUzMiBkZWJ1Z19yZXBvcnRbMl07CisKKwkvKiBOdW1iZXIgb2YgRkNTIGVycm9ycyBzaW5jZSBsYXN0IGV2ZW50ICovCisJdTMyIGZjc19lcnJfY291bnRlcjsKKworCXN0cnVjdCBldmVudF9kZWJ1Z19yZXBvcnQgcmVwb3J0OworCXU4IGF2ZXJhZ2Vfc25yX2xldmVsOworCXU4IHBhZGRpbmdbMTldOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2ludCB3bDEyNTFfZXZlbnRfdW5tYXNrKHN0cnVjdCB3bDEyNTEgKndsKTsKK3ZvaWQgd2wxMjUxX2V2ZW50X21ib3hfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfZXZlbnRfaGFuZGxlKHN0cnVjdCB3bDEyNTEgKndsLCB1OCBtYm94KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZWU0ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuYwpAQCAtMCwwICsxLDQxMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI1MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAid2wxMjUxX2luaXQuaCIKKyNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKKyNpbmNsdWRlICJ3bDEyNTFfYWN4LmgiCisjaW5jbHVkZSAid2wxMjUxX2NtZC5oIgorI2luY2x1ZGUgIndsMTI1MV9yZWcuaCIKKworaW50IHdsMTI1MV9od19pbml0X2h3ZW5jX2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjUxX2FjeF9mZWF0dXJlX2NmZyh3bCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImNvdWxkbid0IHNldCBmZWF0dXJlIGNvbmZpZyIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHdsMTI1MV9hY3hfZGVmYXVsdF9rZXkod2wsIHdsLT5kZWZhdWx0X2tleSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImNvdWxkbid0IHNldCBkZWZhdWx0IGtleSIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitpbnQgd2wxMjUxX2h3X2luaXRfdGVtcGxhdGVzX2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpbnQgcmV0OworCXU4IHBhcnRpYWxfdmJtW1BBUlRJQUxfVkJNX01BWF07CisKKwkvKiBzZW5kIGVtcHR5IHRlbXBsYXRlcyBmb3IgZncgbWVtb3J5IHJlc2VydmF0aW9uICovCisJcmV0ID0gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QUk9CRV9SRVEsIE5VTEwsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyeHhfcHJvYmVfcmVxX3RlbXBsYXRlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNTFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX05VTExfREFUQSwgTlVMTCwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHdsMTJ4eF9udWxsX2RhdGFfdGVtcGxhdGUpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfUFNfUE9MTCwgTlVMTCwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHdsMTJ4eF9wc19wb2xsX3RlbXBsYXRlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNTFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1FPU19OVUxMX0RBVEEsIE5VTEwsCisJCQkJICAgICAgc2l6ZW9mCisJCQkJICAgICAgKHN0cnVjdCB3bDEyeHhfcW9zX251bGxfZGF0YV90ZW1wbGF0ZSkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QUk9CRV9SRVNQLCBOVUxMLAorCQkJCSAgICAgIHNpemVvZgorCQkJCSAgICAgIChzdHJ1Y3Qgd2wxMnh4X3Byb2JlX3Jlc3BfdGVtcGxhdGUpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfQkVBQ09OLCBOVUxMLAorCQkJCSAgICAgIHNpemVvZgorCQkJCSAgICAgIChzdHJ1Y3Qgd2wxMnh4X2JlYWNvbl90ZW1wbGF0ZSkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogdGltIHRlbXBsYXRlcywgZmlyc3QgcmVzZXJ2ZSBzcGFjZSB0aGVuIGFsbG9jYXRlIGFuIGVtcHR5IG9uZSAqLworCW1lbXNldChwYXJ0aWFsX3ZibSwgMCwgUEFSVElBTF9WQk1fTUFYKTsKKwlyZXQgPSB3bDEyNTFfY21kX3ZibSh3bCwgVElNX0VMRV9JRCwgcGFydGlhbF92Ym0sIFBBUlRJQUxfVkJNX01BWCwgMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNTFfY21kX3ZibSh3bCwgVElNX0VMRV9JRCwgcGFydGlhbF92Ym0sIDEsIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNTFfaHdfaW5pdF9yeF9jb25maWcoc3RydWN0IHdsMTI1MSAqd2wsIHUzMiBjb25maWcsIHUzMiBmaWx0ZXIpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfcnhfbXNkdV9saWZlX3RpbWUod2wsIFJYX01TRFVfTElGRVRJTUVfREVGKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfcnhfY29uZmlnKHdsLCBjb25maWcsIGZpbHRlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9od19pbml0X3BoeV9jb25maWcoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfcGRfdGhyZXNob2xkKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfc2xvdCh3bCwgREVGQVVMVF9TTE9UX1RJTUUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjUxX2FjeF9ncm91cF9hZGRyZXNzX3RibCh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNTFfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjUxX2FjeF9ydHNfdGhyZXNob2xkKHdsLCBSVFNfVEhSRVNIT0xEX0RFRik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9od19pbml0X2JlYWNvbl9maWx0ZXIoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjUxX2FjeF9iZWFjb25fZmlsdGVyX3RhYmxlKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitpbnQgd2wxMjUxX2h3X2luaXRfcHRhKHN0cnVjdCB3bDEyNTEgKndsKQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bDEyNTFfYWN4X3NnX2VuYWJsZSh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNTFfYWN4X3NnX2NmZyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9od19pbml0X2VuZXJneV9kZXRlY3Rpb24oc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfY2NhX3RocmVzaG9sZCh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9od19pbml0X2JlYWNvbl9icm9hZGNhc3Qoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfYmNuX2R0aW1fb3B0aW9ucyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9od19pbml0X3Bvd2VyX2F1dGgoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJcmV0dXJuIHdsMTI1MV9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMjUxX1BTTV9DQU0pOworfQorCitpbnQgd2wxMjUxX2h3X2luaXRfbWVtX2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjUxX2FjeF9tZW1fY2ZnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXdsLT50YXJnZXRfbWVtX21hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bDEyNTFfYWN4X21lbV9tYXApLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmICghd2wtPnRhcmdldF9tZW1fbWFwKSB7CisJCXdsMTI1MV9lcnJvcigiY291bGRuJ3QgYWxsb2NhdGUgdGFyZ2V0IG1lbW9yeSBtYXAiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogd2Ugbm93IGFzayBmb3IgdGhlIGZpcm13YXJlIGJ1aWx0IG1lbW9yeSBtYXAgKi8KKwlyZXQgPSB3bDEyNTFfYWN4X21lbV9tYXAod2wsIHdsLT50YXJnZXRfbWVtX21hcCwKKwkJCQkgc2l6ZW9mKHN0cnVjdCB3bDEyNTFfYWN4X21lbV9tYXApKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoImNvdWxkbid0IHJldHJpZXZlIGZpcm13YXJlIG1lbW9yeSBtYXAiKTsKKwkJa2ZyZWUod2wtPnRhcmdldF9tZW1fbWFwKTsKKwkJd2wtPnRhcmdldF9tZW1fbWFwID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNTFfaHdfaW5pdF90eHFfZmlsbCh1OCBxaWQsCisJCQkJICAgc3RydWN0IGFjeF90eF9xdWV1ZV9xb3NfY29uZmlnICpjb25maWcsCisJCQkJICAgdTMyIG51bV9ibG9ja3MpCit7CisJY29uZmlnLT5xaWQgPSBxaWQ7CisKKwlzd2l0Y2ggKHFpZCkgeworCWNhc2UgUU9TX0FDX0JFOgorCQljb25maWctPmhpZ2hfdGhyZXNob2xkID0KKwkJCShRT1NfVFhfSElHSF9CRV9ERUYgKiBudW1fYmxvY2tzKSAvIDEwMDsKKwkJY29uZmlnLT5sb3dfdGhyZXNob2xkID0KKwkJCShRT1NfVFhfTE9XX0JFX0RFRiAqIG51bV9ibG9ja3MpIC8gMTAwOworCQlicmVhazsKKwljYXNlIFFPU19BQ19CSzoKKwkJY29uZmlnLT5oaWdoX3RocmVzaG9sZCA9CisJCQkoUU9TX1RYX0hJR0hfQktfREVGICogbnVtX2Jsb2NrcykgLyAxMDA7CisJCWNvbmZpZy0+bG93X3RocmVzaG9sZCA9CisJCQkoUU9TX1RYX0xPV19CS19ERUYgKiBudW1fYmxvY2tzKSAvIDEwMDsKKwkJYnJlYWs7CisJY2FzZSBRT1NfQUNfVkk6CisJCWNvbmZpZy0+aGlnaF90aHJlc2hvbGQgPQorCQkJKFFPU19UWF9ISUdIX1ZJX0RFRiAqIG51bV9ibG9ja3MpIC8gMTAwOworCQljb25maWctPmxvd190aHJlc2hvbGQgPQorCQkJKFFPU19UWF9MT1dfVklfREVGICogbnVtX2Jsb2NrcykgLyAxMDA7CisJCWJyZWFrOworCWNhc2UgUU9TX0FDX1ZPOgorCQljb25maWctPmhpZ2hfdGhyZXNob2xkID0KKwkJCShRT1NfVFhfSElHSF9WT19ERUYgKiBudW1fYmxvY2tzKSAvIDEwMDsKKwkJY29uZmlnLT5sb3dfdGhyZXNob2xkID0KKwkJCShRT1NfVFhfTE9XX1ZPX0RFRiAqIG51bV9ibG9ja3MpIC8gMTAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3bDEyNTFfZXJyb3IoIkludmFsaWQgVFggcXVldWUgaWQ6ICVkIiwgcWlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2h3X2luaXRfdHhfcXVldWVfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXN0cnVjdCBhY3hfdHhfcXVldWVfcW9zX2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCB3bDEyNTFfYWN4X21lbV9tYXAgKndsX21lbV9tYXAgPSB3bC0+dGFyZ2V0X21lbV9tYXA7CisJaW50IHJldCwgaTsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggdHggcXVldWUgY29uZmlnIik7CisKKwljb25maWcgPSBremFsbG9jKHNpemVvZigqY29uZmlnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb25maWcpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfQUM7IGkrKykgeworCQlyZXQgPSB3bDEyNTFfaHdfaW5pdF90eHFfZmlsbChpLCBjb25maWcsCisJCQkJCSAgICAgIHdsX21lbV9tYXAtPm51bV90eF9tZW1fYmxvY2tzKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1RYX1FVRVVFX0NGRywKKwkJCQkJICAgY29uZmlnLCBzaXplb2YoKmNvbmZpZykpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGNvbmZpZyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bDEyNTFfaHdfaW5pdF9kYXRhX3BhdGhfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsKQoreworCWludCByZXQ7CisKKwkvKiBhc2tpbmcgZm9yIHRoZSBkYXRhIHBhdGggcGFyYW1ldGVycyAqLworCXdsLT5kYXRhX3BhdGggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXNfcmVzcCksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCF3bC0+ZGF0YV9wYXRoKSB7CisJCXdsMTI1MV9lcnJvcigiQ291bGRudCBhbGxvY2F0ZSBkYXRhIHBhdGggcGFyYW1ldGVycyIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSB3bDEyNTFfYWN4X2RhdGFfcGF0aF9wYXJhbXMod2wsIHdsLT5kYXRhX3BhdGgpOworCWlmIChyZXQgPCAwKSB7CisJCWtmcmVlKHdsLT5kYXRhX3BhdGgpOworCQl3bC0+ZGF0YV9wYXRoID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitpbnQgd2wxMjUxX2h3X2luaXQoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJc3RydWN0IHdsMTI1MV9hY3hfbWVtX21hcCAqd2xfbWVtX21hcDsKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjUxX2h3X2luaXRfaHdlbmNfY29uZmlnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFRlbXBsYXRlIHNldHRpbmdzICovCisJcmV0ID0gd2wxMjUxX2h3X2luaXRfdGVtcGxhdGVzX2NvbmZpZyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBEZWZhdWx0IG1lbW9yeSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gd2wxMjUxX2h3X2luaXRfbWVtX2NvbmZpZyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBEZWZhdWx0IGRhdGEgcGF0aCBjb25maWd1cmF0aW9uICAqLworCXJldCA9IHdsMTI1MV9od19pbml0X2RhdGFfcGF0aF9jb25maWcod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIFJYIGNvbmZpZyAqLworCXJldCA9IHdsMTI1MV9od19pbml0X3J4X2NvbmZpZyh3bCwKKwkJCQkgICAgICAgUlhfQ0ZHX1BST01JU0NVT1VTIHwgUlhfQ0ZHX1RTRiwKKwkJCQkgICAgICAgUlhfRklMVEVSX09QVElPTl9ERUYpOworCS8qIFJYX0NPTkZJR19PUFRJT05fQU5ZX0RTVF9BTllfQlNTLAorCSAgIFJYX0ZJTFRFUl9PUFRJT05fRklMVEVSX0FMTCk7ICovCisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfZGF0YV9wYXRoOworCisJLyogVFggcXVldWVzIGNvbmZpZyAqLworCXJldCA9IHdsMTI1MV9od19pbml0X3R4X3F1ZXVlX2NvbmZpZyh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfZGF0YV9wYXRoOworCisJLyogUEhZIGxheWVyIGNvbmZpZyAqLworCXJldCA9IHdsMTI1MV9od19pbml0X3BoeV9jb25maWcod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX2RhdGFfcGF0aDsKKworCS8qIEJlYWNvbiBmaWx0ZXJpbmcgKi8KKwlyZXQgPSB3bDEyNTFfaHdfaW5pdF9iZWFjb25fZmlsdGVyKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9kYXRhX3BhdGg7CisKKwkvKiBCbHVldG9vdGggV0xBTiBjb2V4aXN0ZW5jZSAqLworCXJldCA9IHdsMTI1MV9od19pbml0X3B0YSh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfZGF0YV9wYXRoOworCisJLyogRW5lcmd5IGRldGVjdGlvbiAqLworCXJldCA9IHdsMTI1MV9od19pbml0X2VuZXJneV9kZXRlY3Rpb24od2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX2RhdGFfcGF0aDsKKworCS8qIEJlYWNvbnMgYW5kIGJvcmFkY2FzdCBzZXR0aW5ncyAqLworCXJldCA9IHdsMTI1MV9od19pbml0X2JlYWNvbl9icm9hZGNhc3Qod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX2RhdGFfcGF0aDsKKworCS8qIEVuYWJsZSBkYXRhIHBhdGggKi8KKwlyZXQgPSB3bDEyNTFfY21kX2RhdGFfcGF0aCh3bCwgd2wtPmNoYW5uZWwsIDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX2RhdGFfcGF0aDsKKworCS8qIERlZmF1bHQgcG93ZXIgc3RhdGUgKi8KKwlyZXQgPSB3bDEyNTFfaHdfaW5pdF9wb3dlcl9hdXRoKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9kYXRhX3BhdGg7CisKKwl3bF9tZW1fbWFwID0gd2wtPnRhcmdldF9tZW1fbWFwOworCXdsMTI1MV9pbmZvKCIlZCB0eCBibG9ja3MgYXQgMHgleCwgJWQgcnggYmxvY2tzIGF0IDB4JXgiLAorCQkgICAgd2xfbWVtX21hcC0+bnVtX3R4X21lbV9ibG9ja3MsCisJCSAgICB3bC0+ZGF0YV9wYXRoLT50eF9jb250cm9sX2FkZHIsCisJCSAgICB3bF9tZW1fbWFwLT5udW1fcnhfbWVtX2Jsb2NrcywKKwkJICAgIHdsLT5kYXRhX3BhdGgtPnJ4X2NvbnRyb2xfYWRkcik7CisKKwlyZXR1cm4gMDsKKworIG91dF9mcmVlX2RhdGFfcGF0aDoKKwlrZnJlZSh3bC0+ZGF0YV9wYXRoKTsKKworIG91dF9mcmVlX21lbW1hcDoKKwlrZnJlZSh3bC0+dGFyZ2V0X21lbV9tYXApOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW5pdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiMjVlYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW5pdC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19XTDEyNTFfSU5JVF9IX18KKyNkZWZpbmUgX19XTDEyNTFfSU5JVF9IX18KKworI2luY2x1ZGUgIndsMTI1MS5oIgorCitpbnQgd2wxMjUxX2h3X2luaXRfaHdlbmNfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfaHdfaW5pdF90ZW1wbGF0ZXNfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfaHdfaW5pdF9yeF9jb25maWcoc3RydWN0IHdsMTI1MSAqd2wsIHUzMiBjb25maWcsIHUzMiBmaWx0ZXIpOworaW50IHdsMTI1MV9od19pbml0X3BoeV9jb25maWcoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9od19pbml0X2JlYWNvbl9maWx0ZXIoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9od19pbml0X3B0YShzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2h3X2luaXRfZW5lcmd5X2RldGVjdGlvbihzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2h3X2luaXRfYmVhY29uX2Jyb2FkY2FzdChzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2h3X2luaXRfcG93ZXJfYXV0aChzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2h3X2luaXRfbWVtX2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2h3X2luaXQoc3RydWN0IHdsMTI1MSAqd2wpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWMyMzJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pby5jCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAid2wxMjUxLmgiCisjaW5jbHVkZSAid2wxMjUxX3JlZy5oIgorI2luY2x1ZGUgIndsMTI1MV9pby5oIgorCisvKiBGSVhNRTogdGhpcyBpcyBzdGF0aWMgZGF0YSBub3dhZGF5cyBhbmQgdGhlIHRhYmxlIGNhbiBiZSByZW1vdmVkICovCitzdGF0aWMgZW51bSB3bDEyeHhfYWN4X2ludF9yZWcgd2wxMjUxX2lvX3JlZ190YWJsZVtBQ1hfUkVHX1RBQkxFX0xFTl0gPSB7CisJW0FDWF9SRUdfSU5URVJSVVBUX1RSSUddICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3NCksCisJW0FDWF9SRUdfSU5URVJSVVBUX1RSSUdfSF0gICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3OCksCisJW0FDWF9SRUdfSU5URVJSVVBUX01BU0tdICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5NCksCisJW0FDWF9SRUdfSElOVF9NQVNLX1NFVF0gICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5OCksCisJW0FDWF9SRUdfSElOVF9NQVNLX0NMUl0gICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5QyksCisJW0FDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSXSA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDRCMCksCisJW0FDWF9SRUdfSU5URVJSVVBUX0NMRUFSXSAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDRBNCksCisJW0FDWF9SRUdfSU5URVJSVVBUX0FDS10gICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDRBOCksCisJW0FDWF9SRUdfU0xWX1NPRlRfUkVTRVRdICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDAwMCksCisJW0FDWF9SRUdfRUVfU1RBUlRdICAgICAgICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDgwQyksCisJW0FDWF9SRUdfRUNQVV9DT05UUk9MXSAgICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDgwNCkKK307CisKK3N0YXRpYyBpbnQgd2wxMjUxX3RyYW5zbGF0ZV9yZWdfYWRkcihzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIpCit7CisJLyogSWYgdGhlIGFkZHJlc3MgaXMgbG93ZXIgdGhhbiBSRUdJU1RFUlNfQkFTRSwgaXQgbWVhbnMgdGhhdCB0aGlzIGlzCisJICogYSBjaGlwLXNwZWNpZmljIHJlZ2lzdGVyIGFkZHJlc3MsIHNvIGxvb2sgaXQgdXAgaW4gdGhlIHJlZ2lzdGVycworCSAqIHRhYmxlICovCisJaWYgKGFkZHIgPCBSRUdJU1RFUlNfQkFTRSkgeworCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ28gb3ZlciB0aGUgdGFibGUgKi8KKwkJaWYgKGFkZHIgPj0gQUNYX1JFR19UQUJMRV9MRU4pIHsKKwkJCXdsMTI1MV9lcnJvcigiYWRkcmVzcyBvdXQgb2YgcmFuZ2UgKCVkKSIsIGFkZHIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYWRkciA9IHdsMTI1MV9pb19yZWdfdGFibGVbYWRkcl07CisJfQorCisJcmV0dXJuIGFkZHIgLSB3bC0+cGh5c2ljYWxfcmVnX2FkZHIgKyB3bC0+dmlydHVhbF9yZWdfYWRkcjsKK30KKworc3RhdGljIGludCB3bDEyNTFfdHJhbnNsYXRlX21lbV9hZGRyKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gYWRkciAtIHdsLT5waHlzaWNhbF9tZW1fYWRkciArIHdsLT52aXJ0dWFsX21lbV9hZGRyOworfQorCit2b2lkIHdsMTI1MV9tZW1fcmVhZChzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlpbnQgcGh5c2ljYWw7CisKKwlwaHlzaWNhbCA9IHdsMTI1MV90cmFuc2xhdGVfbWVtX2FkZHIod2wsIGFkZHIpOworCisJd2wtPmlmX29wcy0+cmVhZCh3bCwgcGh5c2ljYWwsIGJ1ZiwgbGVuKTsKK30KKwordm9pZCB3bDEyNTFfbWVtX3dyaXRlKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCWludCBwaHlzaWNhbDsKKworCXBoeXNpY2FsID0gd2wxMjUxX3RyYW5zbGF0ZV9tZW1fYWRkcih3bCwgYWRkcik7CisKKwl3bC0+aWZfb3BzLT53cml0ZSh3bCwgcGh5c2ljYWwsIGJ1ZiwgbGVuKTsKK30KKwordTMyIHdsMTI1MV9tZW1fcmVhZDMyKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gd2wxMjUxX3JlYWQzMih3bCwgd2wxMjUxX3RyYW5zbGF0ZV9tZW1fYWRkcih3bCwgYWRkcikpOworfQorCit2b2lkIHdsMTI1MV9tZW1fd3JpdGUzMihzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIsIHUzMiB2YWwpCit7CisJd2wxMjUxX3dyaXRlMzIod2wsIHdsMTI1MV90cmFuc2xhdGVfbWVtX2FkZHIod2wsIGFkZHIpLCB2YWwpOworfQorCit1MzIgd2wxMjUxX3JlZ19yZWFkMzIoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyKQoreworCXJldHVybiB3bDEyNTFfcmVhZDMyKHdsLCB3bDEyNTFfdHJhbnNsYXRlX3JlZ19hZGRyKHdsLCBhZGRyKSk7Cit9CisKK3ZvaWQgd2wxMjUxX3JlZ193cml0ZTMyKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKK3sKKwl3bDEyNTFfd3JpdGUzMih3bCwgd2wxMjUxX3RyYW5zbGF0ZV9yZWdfYWRkcih3bCwgYWRkciksIHZhbCk7Cit9CisKKy8qIFNldCB0aGUgcGFydGl0aW9ucyB0byBhY2Nlc3MgdGhlIGNoaXAgYWRkcmVzc2VzLgorICoKKyAqIFRoZXJlIGFyZSB0d28gVklSVFVBTCBwYXJ0aXRpb25zICh0aGUgbWVtb3J5IHBhcnRpdGlvbiBhbmQgdGhlCisgKiByZWdpc3RlcnMgcGFydGl0aW9uKSwgd2hpY2ggYXJlIG1hcHBlZCB0byB0d28gZGlmZmVyZW50IGFyZWFzIG9mIHRoZQorICogUEhZU0lDQUwgKGhhcmR3YXJlKSBtZW1vcnkuICBUaGlzIGZ1bmN0aW9uIGFsc28gbWFrZXMgb3RoZXIgY2hlY2tzIHRvCisgKiBlbnN1cmUgdGhhdCB0aGUgcGFydGl0aW9ucyBhcmUgbm90IG92ZXJsYXBwaW5nLiAgSW4gdGhlIGRpYWdyYW0gYmVsb3csIHRoZQorICogbWVtb3J5IHBhcnRpdGlvbiBjb21lcyBiZWZvcmUgdGhlIHJlZ2lzdGVyIHBhcnRpdGlvbiwgYnV0IHRoZSBvcHBvc2l0ZSBpcworICogYWxzbyBzdXBwb3J0ZWQuCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEhZU0lDQUwgYWRkcmVzcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UKKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4rLS0tLSstLT4gbWVtX3N0YXJ0CisgKiAgICAgICAgICBWSVJUVUFMIGFkZHJlc3MgICAgIC4uLiAgIHwgICAgfAorICogICAgICAgICAgICAgICBzcGFjZSAgICAgICAuLi4gICAgICB8ICAgIHwgW1BBUlRfMF0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgfCAgICB8CisgKiAweDAwMDAwMDAwIDwtLSstLS0tKy4uLiAgICAgICAgIC4uListLS0tKy0tPiBtZW1fc3RhcnQgKyBtZW1fc2l6ZQorICogICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICAuLi4gICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgfE1FTSB8ICAgICAgLi4uICAgICAgfCAgICB8CisgKiAgICAgICAgICAgICAgIHwgICAgfCAgIC4uLiAgICAgICAgIHwgICAgfAorICogIHBhcnRfc2l6ZSA8LS0rLS0tLSsuLi4gICAgICAgICAgICB8ICAgIHwge3VudXNlZCBhcmVhKQorICogICAgICAgICAgICAgICB8ICAgIHwgICAuLi4gICAgICAgICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgfFJFRyB8ICAgICAgLi4uICAgICAgfCAgICB8CisgKiAgcGFydF9zaXplICAgIHwgICAgfCAgICAgICAgIC4uLiAgIHwgICAgfAorICogICAgICArICAgICA8LS0rLS0tLSsuLi4gICAgICAgICAuLi4rLS0tLSstLT4gcmVnX3N0YXJ0CisgKiAgcmVnX3NpemUgICAgICAgICAgICAgIC4uLiAgICAgICAgIHwgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4gICAgICB8ICAgIHwgW1BBUlRfMV0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgfCAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uListLS0tKy0tPiByZWdfc3RhcnQgKyByZWdfc2l6ZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAqCisgKi8KK3ZvaWQgd2wxMjUxX3NldF9wYXJ0aXRpb24oc3RydWN0IHdsMTI1MSAqd2wsCisJCQkgIHUzMiBtZW1fc3RhcnQsIHUzMiBtZW1fc2l6ZSwKKwkJCSAgdTMyIHJlZ19zdGFydCwgdTMyIHJlZ19zaXplKQoreworCXN0cnVjdCB3bDEyNTFfcGFydGl0aW9uIHBhcnRpdGlvblsyXTsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19TUEksICJtZW1fc3RhcnQgJTA4WCBtZW1fc2l6ZSAlMDhYIiwKKwkJICAgICBtZW1fc3RhcnQsIG1lbV9zaXplKTsKKwl3bDEyNTFfZGVidWcoREVCVUdfU1BJLCAicmVnX3N0YXJ0ICUwOFggcmVnX3NpemUgJTA4WCIsCisJCSAgICAgcmVnX3N0YXJ0LCByZWdfc2l6ZSk7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgdHdvIHBhcnRpdGlvbnMgdG9nZXRoZXIgZG9uJ3QgZXhjZWVkIHRoZQorCSAqIGFkZHJlc3MgcmFuZ2UgKi8KKwlpZiAoKG1lbV9zaXplICsgcmVnX3NpemUpID4gSFdfQUNDRVNTX01FTU9SWV9NQVhfUkFOR0UpIHsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1NQSSwgIlRvdGFsIHNpemUgZXhjZWVkcyBtYXhpbXVtIHZpcnR1YWwiCisJCQkgICAgICIgYWRkcmVzcyByYW5nZS4gIFRydW5jYXRpbmcgcGFydGl0aW9uWzBdLiIpOworCQltZW1fc2l6ZSA9IEhXX0FDQ0VTU19NRU1PUllfTUFYX1JBTkdFIC0gcmVnX3NpemU7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19TUEksICJtZW1fc3RhcnQgJTA4WCBtZW1fc2l6ZSAlMDhYIiwKKwkJCSAgICAgbWVtX3N0YXJ0LCBtZW1fc2l6ZSk7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19TUEksICJyZWdfc3RhcnQgJTA4WCByZWdfc2l6ZSAlMDhYIiwKKwkJCSAgICAgcmVnX3N0YXJ0LCByZWdfc2l6ZSk7CisJfQorCisJaWYgKChtZW1fc3RhcnQgPCByZWdfc3RhcnQpICYmCisJICAgICgobWVtX3N0YXJ0ICsgbWVtX3NpemUpID4gcmVnX3N0YXJ0KSkgeworCQkvKiBHdWFyYW50ZWUgdGhhdCB0aGUgbWVtb3J5IHBhcnRpdGlvbiBkb2Vzbid0IG92ZXJsYXAgdGhlCisJCSAqIHJlZ2lzdGVycyBwYXJ0aXRpb24gKi8KKwkJd2wxMjUxX2RlYnVnKERFQlVHX1NQSSwgIkVuZCBvZiBwYXJ0aXRpb25bMF0gaXMgIgorCQkJICAgICAib3ZlcmxhcHBpbmcgcGFydGl0aW9uWzFdLiAgQWRqdXN0ZWQuIik7CisJCW1lbV9zaXplID0gcmVnX3N0YXJ0IC0gbWVtX3N0YXJ0OworCQl3bDEyNTFfZGVidWcoREVCVUdfU1BJLCAibWVtX3N0YXJ0ICUwOFggbWVtX3NpemUgJTA4WCIsCisJCQkgICAgIG1lbV9zdGFydCwgbWVtX3NpemUpOworCQl3bDEyNTFfZGVidWcoREVCVUdfU1BJLCAicmVnX3N0YXJ0ICUwOFggcmVnX3NpemUgJTA4WCIsCisJCQkgICAgIHJlZ19zdGFydCwgcmVnX3NpemUpOworCX0gZWxzZSBpZiAoKHJlZ19zdGFydCA8IG1lbV9zdGFydCkgJiYKKwkJICAgKChyZWdfc3RhcnQgKyByZWdfc2l6ZSkgPiBtZW1fc3RhcnQpKSB7CisJCS8qIEd1YXJhbnRlZSB0aGF0IHRoZSByZWdpc3RlciBwYXJ0aXRpb24gZG9lc24ndCBvdmVybGFwIHRoZQorCQkgKiBtZW1vcnkgcGFydGl0aW9uICovCisJCXdsMTI1MV9kZWJ1ZyhERUJVR19TUEksICJFbmQgb2YgcGFydGl0aW9uWzFdIGlzIgorCQkJICAgICAiIG92ZXJsYXBwaW5nIHBhcnRpdGlvblswXS4gIEFkanVzdGVkLiIpOworCQlyZWdfc2l6ZSA9IG1lbV9zdGFydCAtIHJlZ19zdGFydDsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1NQSSwgIm1lbV9zdGFydCAlMDhYIG1lbV9zaXplICUwOFgiLAorCQkJICAgICBtZW1fc3RhcnQsIG1lbV9zaXplKTsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1NQSSwgInJlZ19zdGFydCAlMDhYIHJlZ19zaXplICUwOFgiLAorCQkJICAgICByZWdfc3RhcnQsIHJlZ19zaXplKTsKKwl9CisKKwlwYXJ0aXRpb25bMF0uc3RhcnQgPSBtZW1fc3RhcnQ7CisJcGFydGl0aW9uWzBdLnNpemUgID0gbWVtX3NpemU7CisJcGFydGl0aW9uWzFdLnN0YXJ0ID0gcmVnX3N0YXJ0OworCXBhcnRpdGlvblsxXS5zaXplICA9IHJlZ19zaXplOworCisJd2wtPnBoeXNpY2FsX21lbV9hZGRyID0gbWVtX3N0YXJ0OworCXdsLT5waHlzaWNhbF9yZWdfYWRkciA9IHJlZ19zdGFydDsKKworCXdsLT52aXJ0dWFsX21lbV9hZGRyID0gMDsKKwl3bC0+dmlydHVhbF9yZWdfYWRkciA9IG1lbV9zaXplOworCisJd2wtPmlmX29wcy0+d3JpdGUod2wsIEhXX0FDQ0VTU19QQVJUMF9TSVpFX0FERFIsIHBhcnRpdGlvbiwKKwkJc2l6ZW9mKHBhcnRpdGlvbikpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OWQyYWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2lvLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKyNpZm5kZWYgX19XTDEyNTFfSU9fSF9fCisjZGVmaW5lIF9fV0wxMjUxX0lPX0hfXworCisjaW5jbHVkZSAid2wxMjUxLmgiCisKKyNkZWZpbmUgSFdfQUNDRVNTX01FTU9SWV9NQVhfUkFOR0UJCTB4MUZGQzAKKworI2RlZmluZSBIV19BQ0NFU1NfUEFSVDBfU0laRV9BRERSICAgICAgICAgICAweDFGRkMwCisjZGVmaW5lIEhXX0FDQ0VTU19QQVJUMF9TVEFSVF9BRERSICAgICAgICAgIDB4MUZGQzQKKyNkZWZpbmUgSFdfQUNDRVNTX1BBUlQxX1NJWkVfQUREUiAgICAgICAgICAgMHgxRkZDOAorI2RlZmluZSBIV19BQ0NFU1NfUEFSVDFfU1RBUlRfQUREUiAgICAgICAgICAweDFGRkNDCisKKyNkZWZpbmUgSFdfQUNDRVNTX1JFR0lTVEVSX1NJWkUgICAgICAgICAgICAgNAorCisjZGVmaW5lIEhXX0FDQ0VTU19QUkFNX01BWF9SQU5HRQkJMHgzYzAwMAorCitzdGF0aWMgaW5saW5lIHUzMiB3bDEyNTFfcmVhZDMyKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkcikKK3sKKwl1MzIgcmVzcG9uc2U7CisKKwl3bC0+aWZfb3BzLT5yZWFkKHdsLCBhZGRyLCAmcmVzcG9uc2UsIHNpemVvZih1MzIpKTsKKworCXJldHVybiByZXNwb25zZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdsMTI1MV93cml0ZTMyKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKK3sKKwl3bC0+aWZfb3BzLT53cml0ZSh3bCwgYWRkciwgJnZhbCwgc2l6ZW9mKHUzMikpOworfQorCisvKiBNZW1vcnkgdGFyZ2V0IElPLCBhZGRyZXNzIGlzIHRyYW5zbGF0ZWQgdG8gcGFydGl0aW9uIDAgKi8KK3ZvaWQgd2wxMjUxX21lbV9yZWFkKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKK3ZvaWQgd2wxMjUxX21lbV93cml0ZShzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Cit1MzIgd2wxMjUxX21lbV9yZWFkMzIoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyKTsKK3ZvaWQgd2wxMjUxX21lbV93cml0ZTMyKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCk7CisvKiBSZWdpc3RlcnMgSU8gKi8KK3UzMiB3bDEyNTFfcmVnX3JlYWQzMihzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIpOwordm9pZCB3bDEyNTFfcmVnX3dyaXRlMzIoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKTsKKwordm9pZCB3bDEyNTFfc2V0X3BhcnRpdGlvbihzdHJ1Y3Qgd2wxMjUxICp3bCwKKwkJCSAgdTMyIHBhcnRfc3RhcnQsIHUzMiBwYXJ0X3NpemUsCisJCQkgIHUzMiByZWdfc3RhcnQsICB1MzIgcmVnX3NpemUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwOWVmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfbWFpbi5jCkBAIC0wLDAgKzEsMTQyOCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI1MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgIndsMTI1MS5oIgorI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgorI2luY2x1ZGUgIndsMTI1MV9yZWcuaCIKKyNpbmNsdWRlICJ3bDEyNTFfaW8uaCIKKyNpbmNsdWRlICJ3bDEyNTFfY21kLmgiCisjaW5jbHVkZSAid2wxMjUxX2V2ZW50LmgiCisjaW5jbHVkZSAid2wxMjUxX3R4LmgiCisjaW5jbHVkZSAid2wxMjUxX3J4LmgiCisjaW5jbHVkZSAid2wxMjUxX3BzLmgiCisjaW5jbHVkZSAid2wxMjUxX2luaXQuaCIKKyNpbmNsdWRlICJ3bDEyNTFfZGVidWdmcy5oIgorI2luY2x1ZGUgIndsMTI1MV9ib290LmgiCisKK3ZvaWQgd2wxMjUxX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXdsLT5pZl9vcHMtPmVuYWJsZV9pcnEod2wpOworfQorCit2b2lkIHdsMTI1MV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJd2wtPmlmX29wcy0+ZGlzYWJsZV9pcnEod2wpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfcG93ZXJfb2ZmKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXdsLT5zZXRfcG93ZXIoZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfcG93ZXJfb24oc3RydWN0IHdsMTI1MSAqd2wpCit7CisJd2wtPnNldF9wb3dlcih0cnVlKTsKK30KKworc3RhdGljIGludCB3bDEyNTFfZmV0Y2hfZmlybXdhcmUoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3aXBoeV9kZXYod2wtPmh3LT53aXBoeSk7CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBXTDEyNTFfRldfTkFNRSwgZGV2KTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiY291bGQgbm90IGdldCBmaXJtd2FyZTogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChmdy0+c2l6ZSAlIDQpIHsKKwkJd2wxMjUxX2Vycm9yKCJmaXJtd2FyZSBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiAzMiBiaXRzOiAlenUiLAorCQkJICAgICBmdy0+c2l6ZSk7CisJCXJldCA9IC1FSUxTRVE7CisJCWdvdG8gb3V0OworCX0KKworCXdsLT5md19sZW4gPSBmdy0+c2l6ZTsKKwl3bC0+ZncgPSBrbWFsbG9jKHdsLT5md19sZW4sIEdGUF9LRVJORUwpOworCisJaWYgKCF3bC0+ZncpIHsKKwkJd2wxMjUxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZmlybXdhcmUiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KHdsLT5mdywgZnctPmRhdGEsIHdsLT5md19sZW4pOworCisJcmV0ID0gMDsKKworb3V0OgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bDEyNTFfZmV0Y2hfbnZzKHN0cnVjdCB3bDEyNTEgKndsKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJc3RydWN0IGRldmljZSAqZGV2ID0gd2lwaHlfZGV2KHdsLT5ody0+d2lwaHkpOworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgV0wxMjUxX05WU19OQU1FLCBkZXYpOworCisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJjb3VsZCBub3QgZ2V0IG52cyBmaWxlOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGZ3LT5zaXplICUgNCkgeworCQl3bDEyNTFfZXJyb3IoIm52cyBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiAzMiBiaXRzOiAlenUiLAorCQkJICAgICBmdy0+c2l6ZSk7CisJCXJldCA9IC1FSUxTRVE7CisJCWdvdG8gb3V0OworCX0KKworCXdsLT5udnNfbGVuID0gZnctPnNpemU7CisJd2wtPm52cyA9IGttYWxsb2Mod2wtPm52c19sZW4sIEdGUF9LRVJORUwpOworCisJaWYgKCF3bC0+bnZzKSB7CisJCXdsMTI1MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG52cyBmaWxlIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW1lbWNweSh3bC0+bnZzLCBmdy0+ZGF0YSwgd2wtPm52c19sZW4pOworCisJcmV0ID0gMDsKKworb3V0OgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX2Z3X3dha2V1cChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwl1MzIgZWxwX3JlZzsKKworCWVscF9yZWcgPSBFTFBDVFJMX1dBS0VfVVA7CisJd2wxMjUxX3dyaXRlMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUiwgZWxwX3JlZyk7CisJZWxwX3JlZyA9IHdsMTI1MV9yZWFkMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUik7CisKKwlpZiAoIShlbHBfcmVnICYgRUxQQ1RSTF9XTEFOX1JFQURZKSkKKwkJd2wxMjUxX3dhcm5pbmcoIldMQU4gbm90IHJlYWR5Iik7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2NoaXBfd2FrZXVwKHN0cnVjdCB3bDEyNTEgKndsKQoreworCWludCByZXQgPSAwOworCisJd2wxMjUxX3Bvd2VyX29uKHdsKTsKKwltc2xlZXAoV0wxMjUxX1BPV0VSX09OX1NMRUVQKTsKKwl3bC0+aWZfb3BzLT5yZXNldCh3bCk7CisKKwkvKiBXZSBkb24ndCBuZWVkIGEgcmVhbCBtZW1vcnkgcGFydGl0aW9uIGhlcmUsIGJlY2F1c2Ugd2Ugb25seSB3YW50CisJICogdG8gdXNlIHRoZSByZWdpc3RlcnMgYXQgdGhpcyBwb2ludC4gKi8KKwl3bDEyNTFfc2V0X3BhcnRpdGlvbih3bCwKKwkJCSAgICAgMHgwMDAwMDAwMCwKKwkJCSAgICAgMHgwMDAwMDAwMCwKKwkJCSAgICAgUkVHSVNURVJTX0JBU0UsCisJCQkgICAgIFJFR0lTVEVSU19ET1dOX1NJWkUpOworCisJLyogRUxQIG1vZHVsZSB3YWtlIHVwICovCisJd2wxMjUxX2Z3X3dha2V1cCh3bCk7CisKKwkvKiB3aGFsX0Z3Q3RybF9Cb290U20oKSAqLworCisJLyogMC4gcmVhZCBjaGlwIGlkIGZyb20gQ0hJUF9JRCAqLworCXdsLT5jaGlwX2lkID0gd2wxMjUxX3JlZ19yZWFkMzIod2wsIENISVBfSURfQik7CisKKwkvKiAxLiBjaGVjayBpZiBjaGlwIGlkIGlzIHZhbGlkICovCisKKwlzd2l0Y2ggKHdsLT5jaGlwX2lkKSB7CisJY2FzZSBDSElQX0lEXzEyNTFfUEcxMjoKKwkJd2wxMjUxX2RlYnVnKERFQlVHX0JPT1QsICJjaGlwIGlkIDB4JXggKDEyNTEgUEcxMikiLAorCQkJICAgICB3bC0+Y2hpcF9pZCk7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9JRF8xMjUxX1BHMTA6CisJY2FzZSBDSElQX0lEXzEyNTFfUEcxMToKKwlkZWZhdWx0OgorCQl3bDEyNTFfZXJyb3IoInVuc3VwcG9ydGVkIGNoaXAgaWQ6IDB4JXgiLCB3bC0+Y2hpcF9pZCk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh3bC0+ZncgPT0gTlVMTCkgeworCQlyZXQgPSB3bDEyNTFfZmV0Y2hfZmlybXdhcmUod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKworCS8qIE5vIE5WUyBmcm9tIG5ldGxpbmssIHRyeSB0byBnZXQgaXQgZnJvbSB0aGUgZmlsZXN5c3RlbSAqLworCWlmICh3bC0+bnZzID09IE5VTEwpIHsKKwkJcmV0ID0gd2wxMjUxX2ZldGNoX252cyh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX2lycV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwl1MzIgaW50cjsKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2wxMjUxLCBpcnFfd29yayk7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfSVJRLCAiSVJRIHdvcmsiKTsKKworCWlmICh3bC0+c3RhdGUgPT0gV0wxMjUxX1NUQVRFX09GRikKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNTFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLCBXTDEyNTFfQUNYX0lOVFJfQUxMKTsKKworCWludHIgPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfQ0xFQVIpOworCXdsMTI1MV9kZWJ1ZyhERUJVR19JUlEsICJpbnRyOiAweCV4IiwgaW50cik7CisKKwlpZiAod2wtPmRhdGFfcGF0aCkgeworCQl3bC0+cnhfY291bnRlciA9CisJCQl3bDEyNTFfbWVtX3JlYWQzMih3bCwgd2wtPmRhdGFfcGF0aC0+cnhfY29udHJvbF9hZGRyKTsKKworCQkvKiBXZSBoYW5kbGUgYSBmcm13YXJlIGJ1ZyBoZXJlICovCisJCXN3aXRjaCAoKHdsLT5yeF9jb3VudGVyIC0gd2wtPnJ4X2hhbmRsZWQpICYgMHhmKSB7CisJCWNhc2UgMDoKKwkJCXdsMTI1MV9kZWJ1ZyhERUJVR19JUlEsICJSWDogRlcgYW5kIGhvc3QgaW4gc3luYyIpOworCQkJaW50ciAmPSB+V0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBOworCQkJaW50ciAmPSB+V0wxMjUxX0FDWF9JTlRSX1JYMV9EQVRBOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXdsMTI1MV9kZWJ1ZyhERUJVR19JUlEsICJSWDogRlcgKzEiKTsKKwkJCWludHIgfD0gV0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBOworCQkJaW50ciAmPSB+V0wxMjUxX0FDWF9JTlRSX1JYMV9EQVRBOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXdsMTI1MV9kZWJ1ZyhERUJVR19JUlEsICJSWDogRlcgKzIiKTsKKwkJCWludHIgfD0gV0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBOworCQkJaW50ciB8PSBXTDEyNTFfQUNYX0lOVFJfUlgxX0RBVEE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXdsMTI1MV93YXJuaW5nKCJSWDogRlcgYW5kIGhvc3Qgb3V0IG9mIHN5bmM6ICVkIiwKKwkJCQkgICAgICAgd2wtPnJ4X2NvdW50ZXIgLSB3bC0+cnhfaGFuZGxlZCk7CisJCQlicmVhazsKKwkJfQorCisJCXdsLT5yeF9oYW5kbGVkID0gd2wtPnJ4X2NvdW50ZXI7CisKKworCQl3bDEyNTFfZGVidWcoREVCVUdfSVJRLCAiUlggY291bnRlcjogJWQiLCB3bC0+cnhfY291bnRlcik7CisJfQorCisJaW50ciAmPSB3bC0+aW50cl9tYXNrOworCisJaWYgKGludHIgPT0gMCkgeworCQl3bDEyNTFfZGVidWcoREVCVUdfSVJRLCAiSU5UUiBpcyAwIik7CisJCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywKKwkJCQkgICB+KHdsLT5pbnRyX21hc2spKTsKKworCQlnb3RvIG91dF9zbGVlcDsKKwl9CisKKwlpZiAoaW50ciAmIFdMMTI1MV9BQ1hfSU5UUl9SWDBfREFUQSkgeworCQl3bDEyNTFfZGVidWcoREVCVUdfSVJRLCAiV0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBIik7CisJCXdsMTI1MV9yeCh3bCk7CisJfQorCisJaWYgKGludHIgJiBXTDEyNTFfQUNYX0lOVFJfUlgxX0RBVEEpIHsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX0lSUSwgIldMMTI1MV9BQ1hfSU5UUl9SWDFfREFUQSIpOworCQl3bDEyNTFfcngod2wpOworCX0KKworCWlmIChpbnRyICYgV0wxMjUxX0FDWF9JTlRSX1RYX1JFU1VMVCkgeworCQl3bDEyNTFfZGVidWcoREVCVUdfSVJRLCAiV0wxMjUxX0FDWF9JTlRSX1RYX1JFU1VMVCIpOworCQl3bDEyNTFfdHhfY29tcGxldGUod2wpOworCX0KKworCWlmIChpbnRyICYgKFdMMTI1MV9BQ1hfSU5UUl9FVkVOVF9BIHwgV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0IpKSB7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNTFfQUNYX0lOVFJfRVZFTlQgKDB4JXgpIiwgaW50cik7CisJCWlmIChpbnRyICYgV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0EpCisJCQl3bDEyNTFfZXZlbnRfaGFuZGxlKHdsLCAwKTsKKwkJZWxzZQorCQkJd2wxMjUxX2V2ZW50X2hhbmRsZSh3bCwgMSk7CisJfQorCisJaWYgKGludHIgJiBXTDEyNTFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSkKKwkJd2wxMjUxX2RlYnVnKERFQlVHX0lSUSwgIldMMTI1MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFIik7CisKKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssIH4od2wtPmludHJfbWFzaykpOworCitvdXRfc2xlZXA6CisJd2wxMjUxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2pvaW4oc3RydWN0IHdsMTI1MSAqd2wsIHU4IGJzc190eXBlLCB1OCBjaGFubmVsLAorCQkgICAgICAgdTE2IGJlYWNvbl9pbnRlcnZhbCwgdTggZHRpbV9wZXJpb2QpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfZnJhbWVfcmF0ZXMod2wsIERFRkFVTFRfSFdfR0VOX1RYX1JBVEUsCisJCQkJICAgICBERUZBVUxUX0hXX0dFTl9NT0RVTEFUSU9OX1RZUEUsCisJCQkJICAgICB3bC0+dHhfbWdtdF9mcm1fcmF0ZSwKKwkJCQkgICAgIHdsLT50eF9tZ210X2ZybV9tb2QpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCisJcmV0ID0gd2wxMjUxX2NtZF9qb2luKHdsLCBic3NfdHlwZSwgY2hhbm5lbCwgYmVhY29uX2ludGVydmFsLAorCQkJICAgICAgZHRpbV9wZXJpb2QpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qCisJICogRklYTUU6IHdlIHNob3VsZCB3YWl0IGZvciBKT0lOX0VWRU5UX0NPTVBMRVRFX0lEIGJ1dCB0byBzaW1wbGlmeQorCSAqIGxvY2tpbmcgd2UganVzdCBzbGVlcCBpbnN0ZWFkLCBmb3Igbm93CisJICovCisJbXNsZWVwKDEwKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV9maWx0ZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdsMTI1MSAqd2wgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdsMTI1MSwgZmlsdGVyX3dvcmspOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJaWYgKHdsLT5zdGF0ZSA9PSBXTDEyNTFfU1RBVEVfT0ZGKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI1MV9wc19lbHBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNTFfam9pbih3bCwgd2wtPmJzc190eXBlLCB3bC0+Y2hhbm5lbCwgd2wtPmJlYWNvbl9pbnQsCisJCQkgIHdsLT5kdGltX3BlcmlvZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCitvdXRfc2xlZXA6CisJd2wxMjUxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CisKKwlza2JfcXVldWVfdGFpbCgmd2wtPnR4X3F1ZXVlLCBza2IpOworCisJLyoKKwkgKiBUaGUgY2hpcCBzcGVjaWZpYyBzZXR1cCBtdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IFRYIHBhY2tldCAtCisJICogYmVmb3JlIHRoYXQsIHRoZSB0eF93b3JrIHdpbGwgbm90IGJlIGluaXRpYWxpemVkIQorCSAqLworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPnR4X3dvcmspOworCisJLyoKKwkgKiBUaGUgd29ya3F1ZXVlIGlzIHNsb3cgdG8gcHJvY2VzcyB0aGUgdHhfcXVldWUgYW5kIHdlIG5lZWQgc3RvcAorCSAqIHRoZSBxdWV1ZSBoZXJlLCBvdGhlcndpc2UgdGhlIHF1ZXVlIHdpbGwgZ2V0IHRvbyBsb25nLgorCSAqLworCWlmIChza2JfcXVldWVfbGVuKCZ3bC0+dHhfcXVldWUpID49IFdMMTI1MV9UWF9RVUVVRV9NQVhfTEVOR1RIKSB7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyh3bC0+aHcpOworCisJCS8qCisJCSAqIEZJWE1FOiB0aGlzIGlzIHJhY3ksIHRoZSB2YXJpYWJsZSBpcyBub3QgcHJvcGVybHkKKwkJICogcHJvdGVjdGVkLiBNYXliZSBmaXggdGhpcyBieSByZW1vdmluZyB0aGUgc3R1cGlkCisJCSAqIHZhcmlhYmxlIGFsdG9nZXRoZXIgYW5kIGNoZWNraW5nIHRoZSByZWFsIHF1ZXVlIHN0YXRlPworCQkgKi8KKwkJd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSB0cnVlOworCX0KKworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzdGFydCIpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWlmICh3bC0+c3RhdGUgIT0gV0wxMjUxX1NUQVRFX09GRikgeworCQl3bDEyNTFfZXJyb3IoImNhbm5vdCBzdGFydCBiZWNhdXNlIG5vdCBpbiBvZmYgc3RhdGU6ICVkIiwKKwkJCSAgICAgd2wtPnN0YXRlKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB3bDEyNTFfY2hpcF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI1MV9ib290KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNTFfaHdfaW5pdCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjUxX2FjeF9zdGF0aW9uX2lkKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwl3bC0+c3RhdGUgPSBXTDEyNTFfU1RBVEVfT047CisKKwl3bDEyNTFfaW5mbygiZmlybXdhcmUgYm9vdGVkICglcykiLCB3bC0+ZndfdmVyKTsKKworb3V0OgorCWlmIChyZXQgPCAwKQorCQl3bDEyNTFfcG93ZXJfb2ZmKHdsKTsKKworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV9vcF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CisKKwl3bDEyNTFfaW5mbygiZG93biIpOworCisJd2wxMjUxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgc3RvcCIpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCVdBUk5fT04od2wtPnN0YXRlICE9IFdMMTI1MV9TVEFURV9PTik7CisKKwlpZiAod2wtPnNjYW5uaW5nKSB7CisJCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgdHJ1ZSk7CisJCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJCXdsLT5zY2FubmluZyA9IGZhbHNlOworCX0KKworCXdsLT5zdGF0ZSA9IFdMMTI1MV9TVEFURV9PRkY7CisKKwl3bDEyNTFfZGlzYWJsZV9pbnRlcnJ1cHRzKHdsKTsKKworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCWNhbmNlbF93b3JrX3N5bmMoJndsLT5pcnFfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmd2wtPnR4X3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJndsLT5maWx0ZXJfd29yayk7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJLyogbGV0J3Mgbm90aWZ5IE1BQzgwMjExIGFib3V0IHRoZSByZW1haW5pbmcgcGVuZGluZyBUWCBmcmFtZXMgKi8KKwl3bDEyNTFfdHhfZmx1c2god2wpOworCXdsMTI1MV9wb3dlcl9vZmYod2wpOworCisJbWVtc2V0KHdsLT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCXdsLT5saXN0ZW5faW50ID0gMTsKKwl3bC0+YnNzX3R5cGUgPSBNQVhfQlNTX1RZUEU7CisKKwl3bC0+ZGF0YV9pbl9jb3VudCA9IDA7CisJd2wtPnJ4X2NvdW50ZXIgPSAwOworCXdsLT5yeF9oYW5kbGVkID0gMDsKKwl3bC0+cnhfY3VycmVudF9idWZmZXIgPSAwOworCXdsLT5yeF9sYXN0X2lkID0gMDsKKwl3bC0+bmV4dF90eF9jb21wbGV0ZSA9IDA7CisJd2wtPmVscCA9IGZhbHNlOworCXdsLT5wc20gPSAwOworCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gZmFsc2U7CisJd2wtPnBvd2VyX2xldmVsID0gV0wxMjUxX0RFRkFVTFRfUE9XRVJfTEVWRUw7CisJd2wtPmNoYW5uZWwgPSBXTDEyNTFfREVGQVVMVF9DSEFOTkVMOworCisJd2wxMjUxX2RlYnVnZnNfcmVzZXQod2wpOworCisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHdsMTI1MV9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBhZGQgaW50ZXJmYWNlIHR5cGUgJWQgbWFjICVwTSIsCisJCSAgICAgY29uZi0+dHlwZSwgY29uZi0+bWFjX2FkZHIpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJd2wtPmJzc190eXBlID0gQlNTX1RZUEVfU1RBX0JTUzsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJd2wtPmJzc190eXBlID0gQlNTX1RZUEVfSUJTUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtZW1jbXAod2wtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pKSB7CisJCW1lbWNweSh3bC0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHdsLT5odywgd2wtPm1hY19hZGRyKTsKKwkJcmV0ID0gd2wxMjUxX2FjeF9zdGF0aW9uX2lkKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSByZW1vdmUgaW50ZXJmYWNlIik7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2J1aWxkX251bGxfZGF0YShzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3Qgd2wxMnh4X251bGxfZGF0YV90ZW1wbGF0ZSB0ZW1wbGF0ZTsKKworCWlmICghaXNfemVyb19ldGhlcl9hZGRyKHdsLT5ic3NpZCkpIHsKKwkJbWVtY3B5KHRlbXBsYXRlLmhlYWRlci5kYSwgd2wtPmJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuYnNzaWQsIHdsLT5ic3NpZCwgRVRIX0FMRU4pOworCX0gZWxzZSB7CisJCW1lbXNldCh0ZW1wbGF0ZS5oZWFkZXIuZGEsIDB4ZmYsIEVUSF9BTEVOKTsKKwkJbWVtc2V0KHRlbXBsYXRlLmhlYWRlci5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOworCX0KKworCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuc2EsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXRlbXBsYXRlLmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8CisJCQkJCQlJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMpOworCisJcmV0dXJuIHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfTlVMTF9EQVRBLCAmdGVtcGxhdGUsCisJCQkJICAgICAgIHNpemVvZih0ZW1wbGF0ZSkpOworCit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2J1aWxkX3BzX3BvbGwoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiBhaWQpCit7CisJc3RydWN0IHdsMTJ4eF9wc19wb2xsX3RlbXBsYXRlIHRlbXBsYXRlOworCisJbWVtY3B5KHRlbXBsYXRlLmJzc2lkLCB3bC0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkodGVtcGxhdGUudGEsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXRlbXBsYXRlLmFpZCA9IGFpZDsKKwl0ZW1wbGF0ZS5mYyA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMKTsKKworCXJldHVybiB3bDEyNTFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1BTX1BPTEwsICZ0ZW1wbGF0ZSwKKwkJCQkgICAgICAgc2l6ZW9mKHRlbXBsYXRlKSk7CisKK30KKworc3RhdGljIGludCB3bDEyNTFfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKwlpbnQgY2hhbm5lbCwgcmV0ID0gMDsKKworCWNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCisJd2wxMjUxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgY29uZmlnIGNoICVkIHBzbSAlcyBwb3dlciAlZCIsCisJCSAgICAgY2hhbm5lbCwKKwkJICAgICBjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTID8gIm9uIiA6ICJvZmYiLAorCQkgICAgIGNvbmYtPnBvd2VyX2xldmVsKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXQgPSB3bDEyNTFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKGNoYW5uZWwgIT0gd2wtPmNoYW5uZWwpIHsKKwkJd2wtPmNoYW5uZWwgPSBjaGFubmVsOworCisJCXJldCA9IHdsMTI1MV9qb2luKHdsLCB3bC0+YnNzX3R5cGUsIHdsLT5jaGFubmVsLAorCQkJCSAgd2wtPmJlYWNvbl9pbnQsIHdsLT5kdGltX3BlcmlvZCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfc2xlZXA7CisJfQorCisJcmV0ID0gd2wxMjUxX2J1aWxkX251bGxfZGF0YSh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCisJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMgJiYgIXdsLT5wc21fcmVxdWVzdGVkKSB7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJwc20gZW5hYmxlZCIpOworCisJCXdsLT5wc21fcmVxdWVzdGVkID0gdHJ1ZTsKKworCQkvKgorCQkgKiBXZSBlbnRlciBQU00gb25seSBpZiB3ZSdyZSBhbHJlYWR5IGFzc29jaWF0ZWQuCisJCSAqIElmIHdlJ3JlIG5vdCwgd2UnbGwgZW50ZXIgaXQgd2hlbiBqb2luaW5nIGFuIFNTSUQsCisJCSAqIHRocm91Z2ggdGhlIGJzc19pbmZvX2NoYW5nZWQoKSBob29rLgorCQkgKi8KKwkJcmV0ID0gd2wxMjUxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7CisJfSBlbHNlIGlmICghKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpICYmCisJCSAgIHdsLT5wc21fcmVxdWVzdGVkKSB7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJwc20gZGlzYWJsZWQiKTsKKworCQl3bC0+cHNtX3JlcXVlc3RlZCA9IGZhbHNlOworCisJCWlmICh3bC0+cHNtKQorCQkJcmV0ID0gd2wxMjUxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFKTsKKwl9CisKKwlpZiAoY29uZi0+cG93ZXJfbGV2ZWwgIT0gd2wtPnBvd2VyX2xldmVsKSB7CisJCXJldCA9IHdsMTI1MV9hY3hfdHhfcG93ZXIod2wsIGNvbmYtPnBvd2VyX2xldmVsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQl3bC0+cG93ZXJfbGV2ZWwgPSBjb25mLT5wb3dlcl9sZXZlbDsKKwl9CisKK291dF9zbGVlcDoKKwl3bDEyNTFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgV0wxMjUxX1NVUFBPUlRFRF9GSUxURVJTIChGSUZfUFJPTUlTQ19JTl9CU1MgfCBcCisJCQkJICBGSUZfQUxMTVVMVEkgfCBcCisJCQkJICBGSUZfRkNTRkFJTCB8IFwKKwkJCQkgIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwgXAorCQkJCSAgRklGX0NPTlRST0wgfCBcCisJCQkJICBGSUZfT1RIRVJfQlNTKQorCitzdGF0aWMgdm9pZCB3bDEyNTFfb3BfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZWQsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqdG90YWwsdTY0IG11bHRpY2FzdCkKK3sKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2OworCisJd2wxMjUxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgY29uZmlndXJlIGZpbHRlciIpOworCisJKnRvdGFsICY9IFdMMTI1MV9TVVBQT1JURURfRklMVEVSUzsKKwljaGFuZ2VkICY9IFdMMTI1MV9TVVBQT1JURURfRklMVEVSUzsKKworCWlmIChjaGFuZ2VkID09IDApCisJCS8qIG5vIGZpbHRlcnMgd2hpY2ggd2Ugc3VwcG9ydCBjaGFuZ2VkICovCisJCXJldHVybjsKKworCS8qIEZJWE1FOiB3bC0+cnhfY29uZmlnIGFuZCB3bC0+cnhfZmlsdGVyIGFyZSBub3QgcHJvdGVjdGVkICovCisKKwl3bC0+cnhfY29uZmlnID0gV0wxMjUxX0RFRkFVTFRfUlhfQ09ORklHOworCXdsLT5yeF9maWx0ZXIgPSBXTDEyNTFfREVGQVVMVF9SWF9GSUxURVI7CisKKwlpZiAoKnRvdGFsICYgRklGX1BST01JU0NfSU5fQlNTKSB7CisJCXdsLT5yeF9jb25maWcgfD0gQ0ZHX0JTU0lEX0ZJTFRFUl9FTjsKKwkJd2wtPnJ4X2NvbmZpZyB8PSBDRkdfUlhfQUxMX0dPT0Q7CisJfQorCWlmICgqdG90YWwgJiBGSUZfQUxMTVVMVEkpCisJCS8qCisJCSAqIENGR19NQ19GSUxURVJfRU4gaW4gcnhfY29uZmlnIG5lZWRzIHRvIGJlIDAgdG8gcmVjZWl2ZQorCQkgKiBhbGwgbXVsdGljYXN0IGZyYW1lcworCQkgKi8KKwkJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX01DX0ZJTFRFUl9FTjsKKwlpZiAoKnRvdGFsICYgRklGX0ZDU0ZBSUwpCisJCXdsLT5yeF9maWx0ZXIgfD0gQ0ZHX1JYX0ZDU19FUlJPUjsKKwlpZiAoKnRvdGFsICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIHsKKwkJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX0JTU0lEX0ZJTFRFUl9FTjsKKwkJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX1NTSURfRklMVEVSX0VOOworCX0KKwlpZiAoKnRvdGFsICYgRklGX0NPTlRST0wpCisJCXdsLT5yeF9maWx0ZXIgfD0gQ0ZHX1JYX0NUTF9FTjsKKwlpZiAoKnRvdGFsICYgRklGX09USEVSX0JTUykKKwkJd2wtPnJ4X2ZpbHRlciAmPSB+Q0ZHX0JTU0lEX0ZJTFRFUl9FTjsKKworCS8qCisJICogRklYTUU6IHdvcmtxdWV1ZXMgbmVlZCB0byBiZSBwcm9wZXJseSBjYW5jZWxsZWQgb24gc3RvcCgpLCBmb3IKKwkgKiBub3cgbGV0J3MganVzdCBkaXNhYmxlIGNoYW5naW5nIHRoZSBmaWx0ZXIgc2V0dGluZ3MuIFRoZXkgd2lsbAorCSAqIGJlIHVwZGF0ZWQgYW55IG9uIGNvbmZpZygpLgorCSAqLworCS8qIHNjaGVkdWxlX3dvcmsoJndsLT5maWx0ZXJfd29yayk7ICovCit9CisKKy8qIEhXIGVuY3J5cHRpb24gKi8KK3N0YXRpYyBpbnQgd2wxMjUxX3NldF9rZXlfdHlwZShzdHJ1Y3Qgd2wxMjUxICp3bCwKKwkJCSAgICAgICBzdHJ1Y3Qgd2wxMjUxX2NtZF9zZXRfa2V5cyAqa2V5LAorCQkJICAgICAgIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKm1hYzgwMjExX2tleSwKKwkJCSAgICAgICBjb25zdCB1OCAqYWRkcikKK3sKKwlzd2l0Y2ggKG1hYzgwMjExX2tleS0+YWxnKSB7CisJY2FzZSBBTEdfV0VQOgorCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCisJCQlrZXktPmtleV90eXBlID0gS0VZX1dFUF9ERUZBVUxUOworCQllbHNlCisJCQlrZXktPmtleV90eXBlID0gS0VZX1dFUF9BRERSOworCisJCW1hYzgwMjExX2tleS0+aHdfa2V5X2lkeCA9IG1hYzgwMjExX2tleS0+a2V5aWR4OworCQlicmVhazsKKwljYXNlIEFMR19US0lQOgorCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCisJCQlrZXktPmtleV90eXBlID0gS0VZX1RLSVBfTUlDX0dST1VQOworCQllbHNlCisJCQlrZXktPmtleV90eXBlID0gS0VZX1RLSVBfTUlDX1BBSVJXSVNFOworCisJCW1hYzgwMjExX2tleS0+aHdfa2V5X2lkeCA9IG1hYzgwMjExX2tleS0+a2V5aWR4OworCQlicmVhazsKKwljYXNlIEFMR19DQ01QOgorCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCisJCQlrZXktPmtleV90eXBlID0gS0VZX0FFU19HUk9VUDsKKwkJZWxzZQorCQkJa2V5LT5rZXlfdHlwZSA9IEtFWV9BRVNfUEFJUldJU0U7CisJCW1hYzgwMjExX2tleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3bDEyNTFfZXJyb3IoIlVua25vd24ga2V5IGFsZ28gMHgleCIsIG1hYzgwMjExX2tleS0+YWxnKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI1MV9vcF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CisJc3RydWN0IHdsMTI1MV9jbWRfc2V0X2tleXMgKndsX2NtZDsKKwljb25zdCB1OCAqYWRkcjsKKwlpbnQgcmV0OworCisJc3RhdGljIGNvbnN0IHU4IGJjYXN0X2FkZHJbRVRIX0FMRU5dID0KKwkJeyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisKKwl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzZXQga2V5Iik7CisKKwl3bF9jbWQgPSBremFsbG9jKHNpemVvZigqd2xfY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bF9jbWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWRkciA9IHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHI7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQ1JZUFQsICJDTUQ6IDB4JXgiLCBjbWQpOworCXdsMTI1MV9kdW1wKERFQlVHX0NSWVBULCAiQUREUjogIiwgYWRkciwgRVRIX0FMRU4pOworCXdsMTI1MV9kZWJ1ZyhERUJVR19DUllQVCwgIktleTogYWxnbzoweCV4LCBpZDolZCwgbGVuOiVkIGZsYWdzIDB4JXgiLAorCQkgICAgIGtleS0+YWxnLCBrZXktPmtleWlkeCwga2V5LT5rZXlsZW4sIGtleS0+ZmxhZ3MpOworCXdsMTI1MV9kdW1wKERFQlVHX0NSWVBULCAiS0VZOiAiLCBrZXktPmtleSwga2V5LT5rZXlsZW4pOworCisJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihhZGRyKSkgeworCQkvKiBXZSBkb250IHN1cHBvcnQgVFggb25seSBlbmNyeXB0aW9uICovCisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0ID0gd2wxMjUxX3BzX2VscF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0VUX0tFWToKKwkJd2xfY21kLT5rZXlfYWN0aW9uID0gS0VZX0FERF9PUl9SRVBMQUNFOworCQlicmVhazsKKwljYXNlIERJU0FCTEVfS0VZOgorCQl3bF9jbWQtPmtleV9hY3Rpb24gPSBLRVlfUkVNT1ZFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3bDEyNTFfZXJyb3IoIlVuc3VwcG9ydGVkIGtleSBjbWQgMHgleCIsIGNtZCk7CisJCWJyZWFrOworCX0KKworCXJldCA9IHdsMTI1MV9zZXRfa2V5X3R5cGUod2wsIHdsX2NtZCwgY21kLCBrZXksIGFkZHIpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiU2V0IEtFWSB0eXBlIGZhaWxlZCIpOworCQlnb3RvIG91dF9zbGVlcDsKKwl9CisKKwlpZiAod2xfY21kLT5rZXlfdHlwZSAhPSBLRVlfV0VQX0RFRkFVTFQpCisJCW1lbWNweSh3bF9jbWQtPmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKKworCWlmICgod2xfY21kLT5rZXlfdHlwZSA9PSBLRVlfVEtJUF9NSUNfR1JPVVApIHx8CisJICAgICh3bF9jbWQtPmtleV90eXBlID09IEtFWV9US0lQX01JQ19QQUlSV0lTRSkpIHsKKwkJLyoKKwkJICogV2UgZ2V0IHRoZSBrZXkgaW4gdGhlIGZvbGxvd2luZyBmb3JtOgorCQkgKiBUS0lQICgxNiBieXRlcykgLSBUWCBNSUMgKDggYnl0ZXMpIC0gUlggTUlDICg4IGJ5dGVzKQorCQkgKiBidXQgdGhlIHRhcmdldCBpcyBleHBlY3Rpbmc6CisJCSAqIFRLSVAgLSBSWCBNSUMgLSBUWCBNSUMKKwkJICovCisJCW1lbWNweSh3bF9jbWQtPmtleSwga2V5LT5rZXksIDE2KTsKKwkJbWVtY3B5KHdsX2NtZC0+a2V5ICsgMTYsIGtleS0+a2V5ICsgMjQsIDgpOworCQltZW1jcHkod2xfY21kLT5rZXkgKyAyNCwga2V5LT5rZXkgKyAxNiwgOCk7CisKKwl9IGVsc2UgeworCQltZW1jcHkod2xfY21kLT5rZXksIGtleS0+a2V5LCBrZXktPmtleWxlbik7CisJfQorCXdsX2NtZC0+a2V5X3NpemUgPSBrZXktPmtleWxlbjsKKworCXdsX2NtZC0+aWQgPSBrZXktPmtleWlkeDsKKwl3bF9jbWQtPnNzaWRfcHJvZmlsZSA9IDA7CisKKwl3bDEyNTFfZHVtcChERUJVR19DUllQVCwgIlRBUkdFVCBLRVk6ICIsIHdsX2NtZCwgc2l6ZW9mKCp3bF9jbWQpKTsKKworCXJldCA9IHdsMTI1MV9jbWRfc2VuZCh3bCwgQ01EX1NFVF9LRVlTLCB3bF9jbWQsIHNpemVvZigqd2xfY21kKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImNvdWxkIG5vdCBzZXQga2V5cyIpOworCQlnb3RvIG91dF9zbGVlcDsKKwl9CisKK291dF9zbGVlcDoKKwl3bDEyNTFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKK291dDoKKwlrZnJlZSh3bF9jbWQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bDEyNTFfYnVpbGRfYmFzaWNfcmF0ZXMoY2hhciAqcmF0ZXMpCit7CisJdTggaW5kZXggPSAwOworCisJcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sgfCBJRUVFODAyMTFfQ0NLX1JBVEVfMk1COworCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyB8IElFRUU4MDIxMV9DQ0tfUkFURV81TUI7CisJcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzExTUI7CisKKwlyZXR1cm4gaW5kZXg7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2J1aWxkX2V4dGVuZGVkX3JhdGVzKGNoYXIgKnJhdGVzKQoreworCXU4IGluZGV4ID0gMDsKKworCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV82TUI7CisJcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjsKKworCXJldHVybiBpbmRleDsKK30KKworCitzdGF0aWMgaW50IHdsMTI1MV9idWlsZF9wcm9iZV9yZXEoc3RydWN0IHdsMTI1MSAqd2wsIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCit7CisJc3RydWN0IHdsMTJ4eF9wcm9iZV9yZXFfdGVtcGxhdGUgdGVtcGxhdGU7CisJc3RydWN0IHdsMTJ4eF9pZV9yYXRlcyAqcmF0ZXM7CisJY2hhciAqcHRyOworCXUxNiBzaXplOworCisJcHRyID0gKGNoYXIgKikmdGVtcGxhdGU7CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hlYWRlcik7CisKKwltZW1zZXQodGVtcGxhdGUuaGVhZGVyLmRhLCAweGZmLCBFVEhfQUxFTik7CisJbWVtc2V0KHRlbXBsYXRlLmhlYWRlci5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOworCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuc2EsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXRlbXBsYXRlLmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKKworCS8qIElFcyAqLworCS8qIFNTSUQgKi8KKwl0ZW1wbGF0ZS5zc2lkLmhlYWRlci5pZCA9IFdMQU5fRUlEX1NTSUQ7CisJdGVtcGxhdGUuc3NpZC5oZWFkZXIubGVuID0gc3NpZF9sZW47CisJaWYgKHNzaWRfbGVuICYmIHNzaWQpCisJCW1lbWNweSh0ZW1wbGF0ZS5zc2lkLnNzaWQsIHNzaWQsIHNzaWRfbGVuKTsKKwlzaXplICs9IHNpemVvZihzdHJ1Y3Qgd2wxMnh4X2llX2hlYWRlcikgKyBzc2lkX2xlbjsKKwlwdHIgKz0gc2l6ZTsKKworCS8qIEJhc2ljIFJhdGVzICovCisJcmF0ZXMgPSAoc3RydWN0IHdsMTJ4eF9pZV9yYXRlcyAqKXB0cjsKKwlyYXRlcy0+aGVhZGVyLmlkID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwlyYXRlcy0+aGVhZGVyLmxlbiA9IHdsMTI1MV9idWlsZF9iYXNpY19yYXRlcyhyYXRlcy0+cmF0ZXMpOworCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCB3bDEyeHhfaWVfaGVhZGVyKSArIHJhdGVzLT5oZWFkZXIubGVuOworCXB0ciArPSBzaXplb2Yoc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIpICsgcmF0ZXMtPmhlYWRlci5sZW47CisKKwkvKiBFeHRlbmRlZCByYXRlcyAqLworCXJhdGVzID0gKHN0cnVjdCB3bDEyeHhfaWVfcmF0ZXMgKilwdHI7CisJcmF0ZXMtPmhlYWRlci5pZCA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCXJhdGVzLT5oZWFkZXIubGVuID0gd2wxMjUxX2J1aWxkX2V4dGVuZGVkX3JhdGVzKHJhdGVzLT5yYXRlcyk7CisJc2l6ZSArPSBzaXplb2Yoc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIpICsgcmF0ZXMtPmhlYWRlci5sZW47CisKKwl3bDEyNTFfZHVtcChERUJVR19TQ0FOLCAiUFJPQkUgUkVROiAiLCAmdGVtcGxhdGUsIHNpemUpOworCisJcmV0dXJuIHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfUFJPQkVfUkVRLCAmdGVtcGxhdGUsCisJCQkJICAgICAgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2h3X3NjYW4oc3RydWN0IHdsMTI1MSAqd2wsIHU4ICpzc2lkLCBzaXplX3QgbGVuLAorCQkJICB1OCBhY3RpdmVfc2NhbiwgdTggaGlnaF9wcmlvLCB1OCBudW1fY2hhbm5lbHMsCisJCQkgIHU4IHByb2JlX3JlcXVlc3RzKQoreworCXN0cnVjdCB3bDEyNTFfY21kX3RyaWdnZXJfc2Nhbl90byAqdHJpZ2dlciA9IE5VTEw7CisJc3RydWN0IGNtZF9zY2FuICpwYXJhbXMgPSBOVUxMOworCWludCBpLCByZXQ7CisJdTE2IHNjYW5fb3B0aW9ucyA9IDA7CisKKwlpZiAod2wtPnNjYW5uaW5nKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBhcmFtcyA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJhbXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcmFtcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwYXJhbXMtPnBhcmFtcy5yeF9jb25maWdfb3B0aW9ucyA9IGNwdV90b19sZTMyKENGR19SWF9BTExfR09PRCk7CisJcGFyYW1zLT5wYXJhbXMucnhfZmlsdGVyX29wdGlvbnMgPQorCQljcHVfdG9fbGUzMihDRkdfUlhfUFJTUF9FTiB8IENGR19SWF9NR01UX0VOIHwgQ0ZHX1JYX0JDTl9FTik7CisKKwkvKiBIaWdoIHByaW9yaXR5IHNjYW4gKi8KKwlpZiAoIWFjdGl2ZV9zY2FuKQorCQlzY2FuX29wdGlvbnMgfD0gU0NBTl9QQVNTSVZFOworCWlmIChoaWdoX3ByaW8pCisJCXNjYW5fb3B0aW9ucyB8PSBTQ0FOX1BSSU9SSVRZX0hJR0g7CisJcGFyYW1zLT5wYXJhbXMuc2Nhbl9vcHRpb25zID0gc2Nhbl9vcHRpb25zOworCisJcGFyYW1zLT5wYXJhbXMubnVtX2NoYW5uZWxzID0gbnVtX2NoYW5uZWxzOworCXBhcmFtcy0+cGFyYW1zLm51bV9wcm9iZV9yZXF1ZXN0cyA9IHByb2JlX3JlcXVlc3RzOworCXBhcmFtcy0+cGFyYW1zLnR4X3JhdGUgPSBjcHVfdG9fbGUxNigxIDw8IDEpOyAvKiAyIE1icHMgKi8KKwlwYXJhbXMtPnBhcmFtcy50aWRfdHJpZ2dlciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NoYW5uZWxzOyBpKyspIHsKKwkJcGFyYW1zLT5jaGFubmVsc1tpXS5taW5fZHVyYXRpb24gPSBjcHVfdG9fbGUzMigzMDAwMCk7CisJCXBhcmFtcy0+Y2hhbm5lbHNbaV0ubWF4X2R1cmF0aW9uID0gY3B1X3RvX2xlMzIoNjAwMDApOworCQltZW1zZXQoJnBhcmFtcy0+Y2hhbm5lbHNbaV0uYnNzaWRfbHNiLCAweGZmLCA0KTsKKwkJbWVtc2V0KCZwYXJhbXMtPmNoYW5uZWxzW2ldLmJzc2lkX21zYiwgMHhmZiwgMik7CisJCXBhcmFtcy0+Y2hhbm5lbHNbaV0uZWFybHlfdGVybWluYXRpb24gPSAwOworCQlwYXJhbXMtPmNoYW5uZWxzW2ldLnR4X3Bvd2VyX2F0dCA9IDA7CisJCXBhcmFtcy0+Y2hhbm5lbHNbaV0uY2hhbm5lbCA9IGkgKyAxOworCQltZW1zZXQocGFyYW1zLT5jaGFubmVsc1tpXS5wYWQsIDAsIDMpOworCX0KKworCWZvciAoaSA9IG51bV9jaGFubmVsczsgaSA8IFNDQU5fTUFYX05VTV9PRl9DSEFOTkVMUzsgaSsrKQorCQltZW1zZXQoJnBhcmFtcy0+Y2hhbm5lbHNbaV0sIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGJhc2ljX3NjYW5fY2hhbm5lbF9wYXJhbWV0ZXJzKSk7CisKKwlpZiAobGVuICYmIHNzaWQpIHsKKwkJcGFyYW1zLT5wYXJhbXMuc3NpZF9sZW4gPSBsZW47CisJCW1lbWNweShwYXJhbXMtPnBhcmFtcy5zc2lkLCBzc2lkLCBsZW4pOworCX0gZWxzZSB7CisJCXBhcmFtcy0+cGFyYW1zLnNzaWRfbGVuID0gMDsKKwkJbWVtc2V0KHBhcmFtcy0+cGFyYW1zLnNzaWQsIDAsIDMyKTsKKwl9CisKKwlyZXQgPSB3bDEyNTFfYnVpbGRfcHJvYmVfcmVxKHdsLCBzc2lkLCBsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiUFJPQkUgcmVxdWVzdCB0ZW1wbGF0ZSBmYWlsZWQiKTsKKwkJZ290byBvdXQ7CisJfQorCisJdHJpZ2dlciA9IGt6YWxsb2Moc2l6ZW9mKCp0cmlnZ2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cmlnZ2VyKQorCQlnb3RvIG91dDsKKworCXRyaWdnZXItPnRpbWVvdXQgPSAwOworCisJcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBDTURfVFJJR0dFUl9TQ0FOX1RPLCB0cmlnZ2VyLAorCQkJICAgICAgc2l6ZW9mKCp0cmlnZ2VyKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJ0cmlnZ2VyIHNjYW4gdG8gZmFpbGVkIGZvciBodyBzY2FuIik7CisJCWdvdG8gb3V0OworCX0KKworCXdsMTI1MV9kdW1wKERFQlVHX1NDQU4sICJTQ0FOOiAiLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7CisKKwl3bC0+c2Nhbm5pbmcgPSB0cnVlOworCisJcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBDTURfU0NBTiwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOworCWlmIChyZXQgPCAwKQorCQl3bDEyNTFfZXJyb3IoIlNDQU4gZmFpbGVkIik7CisKKwl3bDEyNTFfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKKworCWlmIChwYXJhbXMtPmhlYWRlci5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7CisJCXdsMTI1MV9lcnJvcigiVEVTVCBjb21tYW5kIGFuc3dlciBlcnJvcjogJWQiLAorCQkJICAgICBwYXJhbXMtPmhlYWRlci5zdGF0dXMpOworCQl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUocGFyYW1zKTsKKwlyZXR1cm4gcmV0OworCit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX29wX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2OworCWludCByZXQ7CisJdTggKnNzaWQgPSBOVUxMOworCXNpemVfdCBzc2lkX2xlbiA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBodyBzY2FuIik7CisKKwlpZiAocmVxLT5uX3NzaWRzKSB7CisJCXNzaWQgPSByZXEtPnNzaWRzWzBdLnNzaWQ7CisJCXNzaWRfbGVuID0gcmVxLT5zc2lkc1swXS5zc2lkX2xlbjsKKwl9CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0ID0gd2wxMjUxX3BzX2VscF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI1MV9od19zY2FuKGh3LT5wcml2LCBzc2lkLCBzc2lkX2xlbiwgMSwgMCwgMTMsIDMpOworCisJd2wxMjUxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI1MV9vcF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXQgPSB3bDEyNTFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjUxX2FjeF9ydHNfdGhyZXNob2xkKHdsLCAodTE2KSB2YWx1ZSk7CisJaWYgKHJldCA8IDApCisJCXdsMTI1MV93YXJuaW5nKCJ3bDEyNTFfb3Bfc2V0X3J0c190aHJlc2hvbGQgZmFpbGVkOiAlZCIsIHJldCk7CisKKwl3bDEyNTFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKKwkJCQkgICAgICAgdTMyIGNoYW5nZWQpCit7CisJZW51bSB3bDEyNTFfY21kX3BzX21vZGUgbW9kZTsKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCBza19idWZmICpiZWFjb247CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGJzcyBpbmZvIGNoYW5nZWQiKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXQgPSB3bDEyNTFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgeworCQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CisJCQl3bC0+YmVhY29uX2ludCA9IGJzc19jb25mLT5iZWFjb25faW50OworCQkJd2wtPmR0aW1fcGVyaW9kID0gYnNzX2NvbmYtPmR0aW1fcGVyaW9kOworCisJCQkvKiBGSVhNRTogY2FsbCBqb2luICovCisKKwkJCXdsLT5haWQgPSBic3NfY29uZi0+YWlkOworCisJCQlyZXQgPSB3bDEyNTFfYnVpbGRfcHNfcG9sbCh3bCwgd2wtPmFpZCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKworCQkJcmV0ID0gd2wxMjUxX2FjeF9haWQod2wsIHdsLT5haWQpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXRfc2xlZXA7CisKKwkJCS8qIElmIHdlIHdhbnQgdG8gZ28gaW4gUFNNIGJ1dCB3ZSdyZSBub3QgdGhlcmUgeWV0ICovCisJCQlpZiAod2wtPnBzbV9yZXF1ZXN0ZWQgJiYgIXdsLT5wc20pIHsKKwkJCQltb2RlID0gU1RBVElPTl9QT1dFUl9TQVZFX01PREU7CisJCQkJcmV0ID0gd2wxMjUxX3BzX3NldF9tb2RlKHdsLCBtb2RlKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJZ290byBvdXRfc2xlZXA7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiB1c2UgZGVmYXVsdHMgd2hlbiBub3QgYXNzb2NpYXRlZCAqLworCQkJd2wtPmJlYWNvbl9pbnQgPSBXTDEyNTFfREVGQVVMVF9CRUFDT05fSU5UOworCQkJd2wtPmR0aW1fcGVyaW9kID0gV0wxMjUxX0RFRkFVTFRfRFRJTV9QRVJJT0Q7CisJCX0KKwl9CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfU0xPVCkgeworCQlpZiAoYnNzX2NvbmYtPnVzZV9zaG9ydF9zbG90KQorCQkJcmV0ID0gd2wxMjUxX2FjeF9zbG90KHdsLCBTTE9UX1RJTUVfU0hPUlQpOworCQllbHNlCisJCQlyZXQgPSB3bDEyNTFfYWN4X3Nsb3Qod2wsIFNMT1RfVElNRV9MT05HKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXdsMTI1MV93YXJuaW5nKCJTZXQgc2xvdCB0aW1lIGZhaWxlZCAlZCIsIHJldCk7CisJCQlnb3RvIG91dF9zbGVlcDsKKwkJfQorCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFKSB7CisJCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKQorCQkJd2wxMjUxX2FjeF9zZXRfcHJlYW1ibGUod2wsIEFDWF9QUkVBTUJMRV9TSE9SVCk7CisJCWVsc2UKKwkJCXdsMTI1MV9hY3hfc2V0X3ByZWFtYmxlKHdsLCBBQ1hfUFJFQU1CTEVfTE9ORyk7CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpIHsKKwkJaWYgKGJzc19jb25mLT51c2VfY3RzX3Byb3QpCisJCQlyZXQgPSB3bDEyNTFfYWN4X2N0c19wcm90ZWN0KHdsLCBDVFNQUk9URUNUX0VOQUJMRSk7CisJCWVsc2UKKwkJCXJldCA9IHdsMTI1MV9hY3hfY3RzX3Byb3RlY3Qod2wsIENUU1BST1RFQ1RfRElTQUJMRSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bDEyNTFfd2FybmluZygiU2V0IGN0c3Byb3RlY3QgZmFpbGVkICVkIiwgcmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCkgeworCQltZW1jcHkod2wtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKKworCQlyZXQgPSB3bDEyNTFfYnVpbGRfbnVsbF9kYXRhKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQlpZiAod2wtPmJzc190eXBlICE9IEJTU19UWVBFX0lCU1MpIHsKKwkJCXJldCA9IHdsMTI1MV9qb2luKHdsLCB3bC0+YnNzX3R5cGUsIHdsLT5jaGFubmVsLAorCQkJCQkgIHdsLT5iZWFjb25faW50LCB3bC0+ZHRpbV9wZXJpb2QpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXRfc2xlZXA7CisJCQl3bDEyNTFfd2FybmluZygiU2V0IGN0c3Byb3RlY3QgZmFpbGVkICVkIiwgcmV0KTsKKwkJCWdvdG8gb3V0X3NsZWVwOworCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT04pIHsKKwkJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7CisJCXJldCA9IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfQkVBQ09OLCBiZWFjb24tPmRhdGEsCisJCQkJCSAgICAgIGJlYWNvbi0+bGVuKTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2tmcmVlX3NrYihiZWFjb24pOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSB3bDEyNTFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1BST0JFX1JFU1AsIGJlYWNvbi0+ZGF0YSwKKwkJCQkJICAgICAgYmVhY29uLT5sZW4pOworCisJCWRldl9rZnJlZV9za2IoYmVhY29uKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCisJCXJldCA9IHdsMTI1MV9qb2luKHdsLCB3bC0+YnNzX3R5cGUsIHdsLT5iZWFjb25faW50LAorCQkJCSAgd2wtPmNoYW5uZWwsIHdsLT5kdGltX3BlcmlvZCk7CisKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisKK291dF9zbGVlcDoKKwl3bDEyNTFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKworCisvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgd2wxMjUxX3JhdGVzW10gPSB7CisJeyAuYml0cmF0ZSA9IDEwLAorCSAgLmh3X3ZhbHVlID0gMHgxLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgxLCB9LAorCXsgLmJpdHJhdGUgPSAyMCwKKwkgIC5od192YWx1ZSA9IDB4MiwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4MiwKKwkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDU1LAorCSAgLmh3X3ZhbHVlID0gMHg0LAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHg0LAorCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKKwl7IC5iaXRyYXRlID0gMTEwLAorCSAgLmh3X3ZhbHVlID0gMHgyMCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4MjAsCisJICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSA2MCwKKwkgIC5od192YWx1ZSA9IDB4OCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4OCwgfSwKKwl7IC5iaXRyYXRlID0gOTAsCisJICAuaHdfdmFsdWUgPSAweDEwLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgxMCwgfSwKKwl7IC5iaXRyYXRlID0gMTIwLAorCSAgLmh3X3ZhbHVlID0gMHg0MCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4NDAsIH0sCisJeyAuYml0cmF0ZSA9IDE4MCwKKwkgIC5od192YWx1ZSA9IDB4ODAsCisJICAuaHdfdmFsdWVfc2hvcnQgPSAweDgwLCB9LAorCXsgLmJpdHJhdGUgPSAyNDAsCisJICAuaHdfdmFsdWUgPSAweDIwMCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4MjAwLCB9LAorCXsgLmJpdHJhdGUgPSAzNjAsCisJIC5od192YWx1ZSA9IDB4NDAwLAorCSAuaHdfdmFsdWVfc2hvcnQgPSAweDQwMCwgfSwKKwl7IC5iaXRyYXRlID0gNDgwLAorCSAgLmh3X3ZhbHVlID0gMHg4MDAsCisJICAuaHdfdmFsdWVfc2hvcnQgPSAweDgwMCwgfSwKKwl7IC5iaXRyYXRlID0gNTQwLAorCSAgLmh3X3ZhbHVlID0gMHgxMDAwLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgxMDAwLCB9LAorfTsKKworLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHdsMTI1MV9jaGFubmVsc1tdID0geworCXsgLmh3X3ZhbHVlID0gMSwgLmNlbnRlcl9mcmVxID0gMjQxMn0sCisJeyAuaHdfdmFsdWUgPSAyLCAuY2VudGVyX2ZyZXEgPSAyNDE3fSwKKwl7IC5od192YWx1ZSA9IDMsIC5jZW50ZXJfZnJlcSA9IDI0MjJ9LAorCXsgLmh3X3ZhbHVlID0gNCwgLmNlbnRlcl9mcmVxID0gMjQyN30sCisJeyAuaHdfdmFsdWUgPSA1LCAuY2VudGVyX2ZyZXEgPSAyNDMyfSwKKwl7IC5od192YWx1ZSA9IDYsIC5jZW50ZXJfZnJlcSA9IDI0Mzd9LAorCXsgLmh3X3ZhbHVlID0gNywgLmNlbnRlcl9mcmVxID0gMjQ0Mn0sCisJeyAuaHdfdmFsdWUgPSA4LCAuY2VudGVyX2ZyZXEgPSAyNDQ3fSwKKwl7IC5od192YWx1ZSA9IDksIC5jZW50ZXJfZnJlcSA9IDI0NTJ9LAorCXsgLmh3X3ZhbHVlID0gMTAsIC5jZW50ZXJfZnJlcSA9IDI0NTd9LAorCXsgLmh3X3ZhbHVlID0gMTEsIC5jZW50ZXJfZnJlcSA9IDI0NjJ9LAorCXsgLmh3X3ZhbHVlID0gMTIsIC5jZW50ZXJfZnJlcSA9IDI0Njd9LAorCXsgLmh3X3ZhbHVlID0gMTMsIC5jZW50ZXJfZnJlcSA9IDI0NzJ9LAorfTsKKworLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCB3bDEyNTFfYmFuZF8yZ2h6ID0geworCS5jaGFubmVscyA9IHdsMTI1MV9jaGFubmVscywKKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUod2wxMjUxX2NoYW5uZWxzKSwKKwkuYml0cmF0ZXMgPSB3bDEyNTFfcmF0ZXMsCisJLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHdsMTI1MV9yYXRlcyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgd2wxMjUxX29wcyA9IHsKKwkuc3RhcnQgPSB3bDEyNTFfb3Bfc3RhcnQsCisJLnN0b3AgPSB3bDEyNTFfb3Bfc3RvcCwKKwkuYWRkX2ludGVyZmFjZSA9IHdsMTI1MV9vcF9hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlID0gd2wxMjUxX29wX3JlbW92ZV9pbnRlcmZhY2UsCisJLmNvbmZpZyA9IHdsMTI1MV9vcF9jb25maWcsCisJLmNvbmZpZ3VyZV9maWx0ZXIgPSB3bDEyNTFfb3BfY29uZmlndXJlX2ZpbHRlciwKKwkudHggPSB3bDEyNTFfb3BfdHgsCisJLnNldF9rZXkgPSB3bDEyNTFfb3Bfc2V0X2tleSwKKwkuaHdfc2NhbiA9IHdsMTI1MV9vcF9od19zY2FuLAorCS5ic3NfaW5mb19jaGFuZ2VkID0gd2wxMjUxX29wX2Jzc19pbmZvX2NoYW5nZWQsCisJLnNldF9ydHNfdGhyZXNob2xkID0gd2wxMjUxX29wX3NldF9ydHNfdGhyZXNob2xkLAorfTsKKworc3RhdGljIGludCB3bDEyNTFfcmVnaXN0ZXJfaHcoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldDsKKworCWlmICh3bC0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKKwkJcmV0dXJuIDA7CisKKwlTRVRfSUVFRTgwMjExX1BFUk1fQUREUih3bC0+aHcsIHdsLT5tYWNfYWRkcik7CisKKwlyZXQgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcod2wtPmh3KTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoInVuYWJsZSB0byByZWdpc3RlciBtYWM4MDIxMSBodzogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdsLT5tYWM4MDIxMV9yZWdpc3RlcmVkID0gdHJ1ZTsKKworCXdsMTI1MV9ub3RpY2UoImxvYWRlZCIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNTFfaW5pdF9pZWVlODAyMTEoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldDsKKworCS8qIFRoZSB0eCBkZXNjcmlwdG9yIGJ1ZmZlciBhbmQgdGhlIFRLSVAgc3BhY2UgKi8KKwl3bC0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MpCisJCSsgV0wxMjUxX1RLSVBfSVZfU1BBQ0U7CisKKwkvKiB1bml0IHVzICovCisJLyogRklYTUU6IGZpbmQgYSBwcm9wZXIgdmFsdWUgKi8KKwl3bC0+aHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwMDsKKworCXdsLT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCUlFRUU4MDIxMV9IV19OT0lTRV9EQk07CisKKwl3bC0+aHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CisJd2wtPmh3LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOworCXdsLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJndsMTI1MV9iYW5kXzJnaHo7CisKKwlyZXQgPSB3bDEyNTFfcmVnaXN0ZXJfaHcod2wpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJd2wxMjUxX2RlYnVnZnNfaW5pdCh3bCk7CisJd2wxMjUxX25vdGljZSgiaW5pdGlhbGl6ZWQiKTsKKworCXJldCA9IDA7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod2wxMjUxX2luaXRfaWVlZTgwMjExKTsKKworc3RydWN0IGllZWU4MDIxMV9odyAqd2wxMjUxX2FsbG9jX2h3KHZvaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IHdsMTI1MSAqd2w7CisJaW50IGk7CisJc3RhdGljIGNvbnN0IHU4IG5va2lhX291aVszXSA9IHsweDAwLCAweDFmLCAweGRmfTsKKworCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqd2wpLCAmd2wxMjUxX29wcyk7CisJaWYgKCFodykgeworCQl3bDEyNTFfZXJyb3IoImNvdWxkIG5vdCBhbGxvYyBpZWVlODAyMTFfaHciKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJd2wgPSBody0+cHJpdjsKKwltZW1zZXQod2wsIDAsIHNpemVvZigqd2wpKTsKKworCXdsLT5odyA9IGh3OworCisJd2wtPmRhdGFfaW5fY291bnQgPSAwOworCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd2wtPnR4X3F1ZXVlKTsKKworCUlOSVRfV09SSygmd2wtPmZpbHRlcl93b3JrLCB3bDEyNTFfZmlsdGVyX3dvcmspOworCXdsLT5jaGFubmVsID0gV0wxMjUxX0RFRkFVTFRfQ0hBTk5FTDsKKwl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKKwl3bC0+ZGVmYXVsdF9rZXkgPSAwOworCXdsLT5saXN0ZW5faW50ID0gMTsKKwl3bC0+cnhfY291bnRlciA9IDA7CisJd2wtPnJ4X2hhbmRsZWQgPSAwOworCXdsLT5yeF9jdXJyZW50X2J1ZmZlciA9IDA7CisJd2wtPnJ4X2xhc3RfaWQgPSAwOworCXdsLT5yeF9jb25maWcgPSBXTDEyNTFfREVGQVVMVF9SWF9DT05GSUc7CisJd2wtPnJ4X2ZpbHRlciA9IFdMMTI1MV9ERUZBVUxUX1JYX0ZJTFRFUjsKKwl3bC0+ZWxwID0gZmFsc2U7CisJd2wtPnBzbSA9IDA7CisJd2wtPnBzbV9yZXF1ZXN0ZWQgPSBmYWxzZTsKKwl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IGZhbHNlOworCXdsLT5wb3dlcl9sZXZlbCA9IFdMMTI1MV9ERUZBVUxUX1BPV0VSX0xFVkVMOworCXdsLT5iZWFjb25faW50ID0gV0wxMjUxX0RFRkFVTFRfQkVBQ09OX0lOVDsKKwl3bC0+ZHRpbV9wZXJpb2QgPSBXTDEyNTFfREVGQVVMVF9EVElNX1BFUklPRDsKKworCWZvciAoaSA9IDA7IGkgPCBGV19UWF9DTVBMVF9CTE9DS19TSVpFOyBpKyspCisJCXdsLT50eF9mcmFtZXNbaV0gPSBOVUxMOworCisJd2wtPm5leHRfdHhfY29tcGxldGUgPSAwOworCisJSU5JVF9XT1JLKCZ3bC0+aXJxX3dvcmssIHdsMTI1MV9pcnFfd29yayk7CisJSU5JVF9XT1JLKCZ3bC0+dHhfd29yaywgd2wxMjUxX3R4X3dvcmspOworCisJLyoKKwkgKiBJbiBjYXNlIG91ciBNQUMgYWRkcmVzcyBpcyBub3QgY29ycmVjdGx5IHNldCwKKwkgKiB3ZSB1c2UgYSByYW5kb20gYnV0IE5va2lhIE1BQy4KKwkgKi8KKwltZW1jcHkod2wtPm1hY19hZGRyLCBub2tpYV9vdWksIDMpOworCWdldF9yYW5kb21fYnl0ZXMod2wtPm1hY19hZGRyICsgMywgMyk7CisKKwl3bC0+c3RhdGUgPSBXTDEyNTFfU1RBVEVfT0ZGOworCW11dGV4X2luaXQoJndsLT5tdXRleCk7CisKKwl3bC0+dHhfbWdtdF9mcm1fcmF0ZSA9IERFRkFVTFRfSFdfR0VOX1RYX1JBVEU7CisJd2wtPnR4X21nbXRfZnJtX21vZCA9IERFRkFVTFRfSFdfR0VOX01PRFVMQVRJT05fVFlQRTsKKworCXdsLT5yeF9kZXNjcmlwdG9yID0ga21hbGxvYyhzaXplb2YoKndsLT5yeF9kZXNjcmlwdG9yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bC0+cnhfZGVzY3JpcHRvcikgeworCQl3bDEyNTFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJ4IGRlc2NyaXB0b3IiKTsKKwkJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlyZXR1cm4gaHc7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bDEyNTFfYWxsb2NfaHcpOworCitpbnQgd2wxMjUxX2ZyZWVfaHcoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2wtPmh3KTsKKworCXdsMTI1MV9kZWJ1Z2ZzX2V4aXQod2wpOworCisJa2ZyZWUod2wtPnRhcmdldF9tZW1fbWFwKTsKKwlrZnJlZSh3bC0+ZGF0YV9wYXRoKTsKKwlrZnJlZSh3bC0+ZncpOworCXdsLT5mdyA9IE5VTEw7CisJa2ZyZWUod2wtPm52cyk7CisJd2wtPm52cyA9IE5VTEw7CisKKwlrZnJlZSh3bC0+cnhfZGVzY3JpcHRvcik7CisJd2wtPnJ4X2Rlc2NyaXB0b3IgPSBOVUxMOworCisJaWVlZTgwMjExX2ZyZWVfaHcod2wtPmh3KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwod2wxMjUxX2ZyZWVfaHcpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlRJIHdsMTI1MSBXaXJlbGVzIExBTiBEcml2ZXIgQ29yZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX25ldGxpbmsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfbmV0bGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMzY2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX25ldGxpbmsuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fV0wxMjUxX05FVExJTktfSF9fCisjZGVmaW5lIF9fV0wxMjUxX05FVExJTktfSF9fCisKK2ludCB3bDEyNTFfbmxfcmVnaXN0ZXIodm9pZCk7Cit2b2lkIHdsMTI1MV9ubF91bnJlZ2lzdGVyKHZvaWQpOworCisjZW5kaWYgLyogX19XTDEyNTFfTkVUTElOS19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTNlMjg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9wcy5jCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAid2wxMjUxX3JlZy5oIgorI2luY2x1ZGUgIndsMTI1MV9wcy5oIgorI2luY2x1ZGUgIndsMTI1MV9jbWQuaCIKKyNpbmNsdWRlICJ3bDEyNTFfaW8uaCIKKworI2RlZmluZSBXTDEyNTFfV0FLRVVQX1RJTUVPVVQgMjAwMAorCisvKiBSb3V0aW5lcyB0byB0b2dnbGUgc2xlZXAgbW9kZSB3aGlsZSBpbiBFTFAgKi8KK3ZvaWQgd2wxMjUxX3BzX2VscF9zbGVlcChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpZiAod2wtPmVscCB8fCAhd2wtPnBzbSkKKwkJcmV0dXJuOworCisJd2wxMjUxX2RlYnVnKERFQlVHX1BTTSwgImNoaXAgdG8gZWxwIik7CisKKwl3bDEyNTFfd3JpdGUzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSLCBFTFBDVFJMX1NMRUVQKTsKKworCXdsLT5lbHAgPSB0cnVlOworfQorCitpbnQgd2wxMjUxX3BzX2VscF93YWtldXAoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiBlbHBfcmVnOworCisJaWYgKCF3bC0+ZWxwKQorCQlyZXR1cm4gMDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJ3YWtpbmcgdXAgY2hpcCBmcm9tIGVscCIpOworCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFdMMTI1MV9XQUtFVVBfVElNRU9VVCk7CisKKwl3bDEyNTFfd3JpdGUzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSLCBFTFBDVFJMX1dBS0VfVVApOworCisJZWxwX3JlZyA9IHdsMTI1MV9yZWFkMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUik7CisKKwkvKgorCSAqIEZJWE1FOiB3ZSBzaG91bGQgd2FpdCBmb3IgaXJxIGZyb20gY2hpcCBidXQsIGFzIGEgdGVtcG9yYXJ5CisJICogc29sdXRpb24gdG8gc2ltcGxpZnkgbG9ja2luZywgbGV0J3MgcG9sbCBpbnN0ZWFkCisJICovCisJd2hpbGUgKCEoZWxwX3JlZyAmIEVMUENUUkxfV0xBTl9SRUFEWSkpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCXdsMTI1MV9lcnJvcigiZWxwIHdha2V1cCB0aW1lb3V0Iik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCQltc2xlZXAoMSk7CisJCWVscF9yZWcgPSB3bDEyNTFfcmVhZDMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIpOworCX0KKworCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJ3YWtldXAgdGltZTogJXUgbXMiLAorCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcykgLQorCQkgICAgIChqaWZmaWVzX3RvX21zZWNzKHRpbWVvdXQpIC0gV0wxMjUxX1dBS0VVUF9USU1FT1VUKSk7CisKKwl3bC0+ZWxwID0gZmFsc2U7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNTFfcHNfc2V0X2VscChzdHJ1Y3Qgd2wxMjUxICp3bCwgYm9vbCBlbmFibGUpCit7CisJaW50IHJldDsKKworCWlmIChlbmFibGUpIHsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1BTTSwgInNsZWVwIGF1dGggcHNtL2VscCIpOworCisJCXJldCA9IHdsMTI1MV9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMjUxX1BTTV9FTFApOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJd2wxMjUxX3BzX2VscF9zbGVlcCh3bCk7CisJfSBlbHNlIHsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1BTTSwgInNsZWVwIGF1dGggY2FtIik7CisKKwkJLyoKKwkJICogV2hlbiB0aGUgdGFyZ2V0IGlzIGluIEVMUCwgd2UgY2FuIG9ubHkKKwkJICogYWNjZXNzIHRoZSBFTFAgY29udHJvbCByZWdpc3Rlci4gVGh1cywKKwkJICogd2UgaGF2ZSB0byB3YWtlIHRoZSB0YXJnZXQgdXAgYmVmb3JlCisJCSAqIGNoYW5naW5nIHRoZSBwb3dlciBhdXRob3JpemF0aW9uLgorCQkgKi8KKworCQl3bDEyNTFfcHNfZWxwX3dha2V1cCh3bCk7CisKKwkJcmV0ID0gd2wxMjUxX2FjeF9zbGVlcF9hdXRoKHdsLCBXTDEyNTFfUFNNX0NBTSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9wc19zZXRfbW9kZShzdHJ1Y3Qgd2wxMjUxICp3bCwgZW51bSB3bDEyNTFfY21kX3BzX21vZGUgbW9kZSkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERToKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1BTTSwgImVudGVyaW5nIHBzbSIpOworCisJCXJldCA9IHdsMTI1MV9hY3hfd2FrZV91cF9jb25kaXRpb25zKHdsLAorCQkJCQkJICAgIFdBS0VfVVBfRVZFTlRfRFRJTV9CSVRNQVAsCisJCQkJCQkgICAgd2wtPmxpc3Rlbl9pbnQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gd2wxMjUxX2NtZF9wc19tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSB3bDEyNTFfcHNfc2V0X2VscCh3bCwgdHJ1ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQl3bC0+cHNtID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX0FDVElWRV9NT0RFOgorCWRlZmF1bHQ6CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJsZWF2aW5nIHBzbSIpOworCQlyZXQgPSB3bDEyNTFfcHNfc2V0X2VscCh3bCwgZmFsc2UpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gd2wxMjUxX2FjeF93YWtlX3VwX2NvbmRpdGlvbnMod2wsCisJCQkJCQkgICAgV0FLRV9VUF9FVkVOVF9EVElNX0JJVE1BUCwKKwkJCQkJCSAgICB3bC0+bGlzdGVuX2ludCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSB3bDEyNTFfY21kX3BzX21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJd2wtPnBzbSA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjAzNmZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9wcy5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgX19XTDEyNTFfUFNfSF9fCisjZGVmaW5lIF9fV0wxMjUxX1BTX0hfXworCisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJ3bDEyNTEuaCIKKyNpbmNsdWRlICJ3bDEyNTFfYWN4LmgiCisKK2ludCB3bDEyNTFfcHNfc2V0X21vZGUoc3RydWN0IHdsMTI1MSAqd2wsIGVudW0gd2wxMjUxX2NtZF9wc19tb2RlIG1vZGUpOwordm9pZCB3bDEyNTFfcHNfZWxwX3NsZWVwKHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfcHNfZWxwX3dha2V1cChzdHJ1Y3Qgd2wxMjUxICp3bCk7CisKKworI2VuZGlmIC8qIF9fV0wxMjUxX1BTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZlMWJkOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcmVnLmgKQEAgLTAsMCArMSw2NDQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1JFR19IX18KKyNkZWZpbmUgX19SRUdfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2RlZmluZSBSRUdJU1RFUlNfQkFTRSAweDAwMzAwMDAwCisjZGVmaW5lIERSUFdfQkFTRSAgICAgIDB4MDAzMTAwMDAKKworI2RlZmluZSBSRUdJU1RFUlNfRE9XTl9TSVpFIDB4MDAwMDg4MDAKKyNkZWZpbmUgUkVHSVNURVJTX1dPUktfU0laRSAweDAwMDBiMDAwCisKKyNkZWZpbmUgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSICAgICAgICAgMHgxRkZGQworCisvKiBFTFAgcmVnaXN0ZXIgY29tbWFuZHMgKi8KKyNkZWZpbmUgRUxQQ1RSTF9XQUtFX1VQICAgICAgICAgICAgIDB4MQorI2RlZmluZSBFTFBDVFJMX1dBS0VfVVBfV0xBTl9SRUFEWSAgMHg1CisjZGVmaW5lIEVMUENUUkxfU0xFRVAgICAgICAgICAgICAgICAweDAKKy8qIEVMUCBXTEFOX1JFQURZIGJpdCAqLworI2RlZmluZSBFTFBDVFJMX1dMQU5fUkVBRFkgICAgICAgICAgMHgyCisKKy8qIERldmljZSBDb25maWd1cmF0aW9uIHJlZ2lzdGVycyovCisjZGVmaW5lIFNPUl9DRkcgICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA4MDApCisjZGVmaW5lIEVDUFVfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA4MDQpCisjZGVmaW5lIEhJX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA4MDgpCisjZGVmaW5lIEVFX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA4MEMpCisKKyNkZWZpbmUgQ0hJUF9JRF9CICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTY3NCkKKworI2RlZmluZSBDSElQX0lEXzEyNTFfUEcxMAkgICAgICAgICAgICgweDcwMTAxMDEpCisjZGVmaW5lIENISVBfSURfMTI1MV9QRzExCSAgICAgICAgICAgKDB4NzAyMDEwMSkKKyNkZWZpbmUgQ0hJUF9JRF8xMjUxX1BHMTIJICAgICAgICAgICAoMHg3MDMwMTAxKQorCisjZGVmaW5lIEVOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU0NTApCisKKy8qIFBvd2VyIE1hbmFnZW1lbnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIEVMUF9DRkdfTU9ERSAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU4MDQpCisjZGVmaW5lIEVMUF9DTUQgICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU4MDgpCisjZGVmaW5lIFBMTF9DQUxfVElNRSAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU4MTApCisjZGVmaW5lIENMS19SRVFfVElNRSAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU4MTQpCisjZGVmaW5lIENMS19CVUZfVElNRSAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU4MTgpCisKKyNkZWZpbmUgQ0ZHX1BMTF9TWU5DX0NOVCAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTgyMCkKKworLyogU2NyYXRjaCBQYWQgcmVnaXN0ZXJzKi8KKyNkZWZpbmUgU0NSX1BBRDAgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYwOCkKKyNkZWZpbmUgU0NSX1BBRDEgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYwQykKKyNkZWZpbmUgU0NSX1BBRDIgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYxMCkKKyNkZWZpbmUgU0NSX1BBRDMgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYxNCkKKyNkZWZpbmUgU0NSX1BBRDQgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYxOCkKKyNkZWZpbmUgU0NSX1BBRDRfU0VUICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYxQykKKyNkZWZpbmUgU0NSX1BBRDRfQ0xSICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYyMCkKKyNkZWZpbmUgU0NSX1BBRDUgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYyNCkKKyNkZWZpbmUgU0NSX1BBRDVfU0VUICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYyOCkKKyNkZWZpbmUgU0NSX1BBRDVfQ0xSICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYyQykKKyNkZWZpbmUgU0NSX1BBRDYgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYzMCkKKyNkZWZpbmUgU0NSX1BBRDcgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYzNCkKKyNkZWZpbmUgU0NSX1BBRDggICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYzOCkKKyNkZWZpbmUgU0NSX1BBRDkgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTYzQykKKworLyogU3BhcmUgcmVnaXN0ZXJzKi8KKyNkZWZpbmUgU1BBUkVfQTEgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDk5NCkKKyNkZWZpbmUgU1BBUkVfQTIgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDk5OCkKKyNkZWZpbmUgU1BBUkVfQTMgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDk5QykKKyNkZWZpbmUgU1BBUkVfQTQgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDlBMCkKKyNkZWZpbmUgU1BBUkVfQTUgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDlBNCkKKyNkZWZpbmUgU1BBUkVfQTYgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDlBOCkKKyNkZWZpbmUgU1BBUkVfQTcgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDlBQykKKyNkZWZpbmUgU1BBUkVfQTggICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDlCMCkKKyNkZWZpbmUgU1BBUkVfQjEgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQyMCkKKyNkZWZpbmUgU1BBUkVfQjIgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQyNCkKKyNkZWZpbmUgU1BBUkVfQjMgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQyOCkKKyNkZWZpbmUgU1BBUkVfQjQgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQyQykKKyNkZWZpbmUgU1BBUkVfQjUgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQzMCkKKyNkZWZpbmUgU1BBUkVfQjYgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQzNCkKKyNkZWZpbmUgU1BBUkVfQjcgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQzOCkKKyNkZWZpbmUgU1BBUkVfQjggICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQzQykKKworZW51bSB3bDEyeHhfYWN4X2ludF9yZWcgeworCUFDWF9SRUdfSU5URVJSVVBUX1RSSUcsCisJQUNYX1JFR19JTlRFUlJVUFRfVFJJR19ILAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBIb3N0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0gMzJiaXQgKFJXKQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU2V0dGluZyBhIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIG1hc2tzIHRoZQorICBjb3JyZXNwb25kaW5nIGludGVycnVwdCB0byB0aGUgaG9zdC4KKyAgMCAtIFJYMAkJLSBSeCBmaXJzdCBkdWJibGUgYnVmZmVyIERhdGEgSW50ZXJydXB0CisgIDEgLSBUWEQJCS0gVHggRGF0YSBJbnRlcnJ1cHQKKyAgMiAtIFRYWEZSCQktIFR4IFRyYW5zZmVyIEludGVycnVwdAorICAzIC0gUlgxCQktIFJ4IHNlY29uZCBkdWJibGUgYnVmZmVyIERhdGEgSW50ZXJydXB0CisgIDQgLSBSWFhGUgkJLSBSeCBUcmFuc2ZlciBJbnRlcnJ1cHQKKyAgNSAtIEVWRU5UX0EJLSBFdmVudCBNYWlsYm94IGludGVycnVwdAorICA2IC0gRVZFTlRfQgktIEV2ZW50IE1haWxib3ggaW50ZXJydXB0CisgIDcgLSBXTk9OSFNUCS0gV2FrZSBPbiBIb3N0IEludGVycnVwdAorICA4IC0gVFJBQ0VfQQktIERlYnVnIFRyYWNlIGludGVycnVwdAorICA5IC0gVFJBQ0VfQgktIERlYnVnIFRyYWNlIGludGVycnVwdAorIDEwIC0gQ0RDTVAJCS0gQ29tbWFuZCBDb21wbGV0ZSBJbnRlcnJ1cHQKKyAxMSAtCisgMTIgLQorIDEzIC0KKyAxNCAtIElDT01QCQktIEluaXRpYWxpemF0aW9uIENvbXBsZXRlIEludGVycnVwdAorIDE2IC0gU0cgU0UJCS0gU29mdCBHZW1pbmkgLSBTZW5zZSBlbmFibGUgaW50ZXJydXB0CisgMTcgLSBTRyBTRAkJLSBTb2Z0IEdlbWluaSAtIFNlbnNlIGRpc2FibGUgaW50ZXJydXB0CisgMTggLQkJCS0KKyAxOSAtCQkJLQorIDIwIC0JCQktCisgMjEtCQkJLQorIERlZmF1bHQ6IDB4MDAwMQorKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCUFDWF9SRUdfSU5URVJSVVBUX01BU0ssCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEhvc3QgSW50ZXJydXB0IE1hc2sgU2V0IDE2Yml0LCAoV3JpdGUgb25seSkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2V0dGluZyBhIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIHNldHMKKyB0aGUgY29ycmVzcG9uZGluZyBiaW4gaW4gQUNYX0hJTlRfTUFTSyByZWdpc3RlcgorIHdpdGhvdXQgZWZmZWN0aW5nIHRoZSBtYXNrCisgc3RhdGUgb2Ygb3RoZXIgYml0cyAoMCA9IG5vIGVmZmVjdCkuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwlBQ1hfUkVHX0hJTlRfTUFTS19TRVQsCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEhvc3QgSW50ZXJydXB0IE1hc2sgQ2xlYXIgMTZiaXQsKFdyaXRlIG9ubHkpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNldHRpbmcgYSBiaXQgaW4gdGhpcyByZWdpc3RlciBjbGVhcnMKKyB0aGUgY29ycmVzcG9uZGluZyBiaW4gaW4gQUNYX0hJTlRfTUFTSyByZWdpc3RlcgorIHdpdGhvdXQgZWZmZWN0aW5nIHRoZSBtYXNrCisgc3RhdGUgb2Ygb3RoZXIgYml0cyAoMCA9IG5vIGVmZmVjdCkuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCUFDWF9SRUdfSElOVF9NQVNLX0NMUiwKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE5vbmRlc3RydWN0aXZlIFJlYWQKKyAgMTZiaXQsKFJlYWQgb25seSkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGhlIGhvc3QgY2FuIHJlYWQgdGhpcyByZWdpc3RlciB0byBkZXRlcm1pbmUKKyB3aGljaCBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUuCisgUmVhZGluZyB0aGlzIHJlZ2lzdGVyIGRvZXNuJ3QKKyBlZmZlY3QgaXRzIGNvbnRlbnQuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCUFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSLAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBIb3N0IEludGVycnVwdCBTdGF0dXMgQ2xlYXIgb24gUmVhZCAgUmVnaXN0ZXIKKyAgMTZiaXQsKFJlYWQgb25seSkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGhlIGhvc3QgY2FuIHJlYWQgdGhpcyByZWdpc3RlciB0byBkZXRlcm1pbmUKKyB3aGljaCBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUuCisgUmVhZGluZyB0aGlzIHJlZ2lzdGVyIGNsZWFycyBpdCwKKyB0aHVzIG1ha2luZyBhbGwgaW50ZXJydXB0cyBpbmFjdGl2ZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCUFDWF9SRUdfSU5URVJSVVBUX0NMRUFSLAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBIb3N0IEludGVycnVwdCBBY2tub3dsZWRnZSBSZWdpc3RlcgorICAxNmJpdCwoV3JpdGUgb25seSkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGhlIGhvc3QgY2FuIHNldCBpbmRpdmlkdWFsIGJpdHMgaW4gdGhpcworIHJlZ2lzdGVyIHRvIGNsZWFyIChhY2tub3dsZWRnZSkgdGhlIGNvcnJlc3AuCisgaW50ZXJydXB0IHN0YXR1cyBiaXRzIGluIHRoZSBISU5UX1NUU19DTFIgYW5kCisgSElOVF9TVFNfTkQgcmVnaXN0ZXJzLCB0aHVzIG1ha2luZyB0aGUKKyBhc3NvdGlhdGVkIGludGVycnVwdCBpbmFjdGl2ZS4gKDAtbm8gZWZmZWN0KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJQUNYX1JFR19JTlRFUlJVUFRfQUNLLAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBIb3N0IFNvZnR3YXJlIFJlc2V0IC0gMzJiaXQgUlcKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBbMzE6MV0gUmVzZXJ2ZWQKKyAgICAwICBTT0ZUX1JFU0VUIFNvZnQgUmVzZXQgIC0gV2hlbiB0aGlzIGJpdCBpcyBzZXQsCisgICAgaXQgaG9sZHMgdGhlIFdsYW4gaGFyZHdhcmUgaW4gYSBzb2Z0IHJlc2V0IHN0YXRlLgorICAgIFRoaXMgcmVzZXQgZGlzYWJsZXMgYWxsIE1BQyBhbmQgYmFzZWJhbmQgcHJvY2Vzc29yCisgICAgY2xvY2tzIGV4Y2VwdCB0aGUgQ2FyZEJ1cy9QQ0kgaW50ZXJmYWNlIGNsb2NrLgorICAgIEl0IGFsc28gaW5pdGlhbGl6ZXMgYWxsIE1BQyBzdGF0ZSBtYWNoaW5lcyBleGNlcHQKKyAgICB0aGUgaG9zdCBpbnRlcmZhY2UuIEl0IGRvZXMgbm90IHJlbG9hZCB0aGUKKyAgICBjb250ZW50cyBvZiB0aGUgRUVQUk9NLiBXaGVuIHRoaXMgYml0IGlzIGNsZWFyZWQKKyAgICAobm90IHNlbGYtY2xlYXJpbmcpLCB0aGUgV2xhbiBoYXJkd2FyZQorICAgIGV4aXRzIHRoZSBzb2Z0d2FyZSByZXNldCBzdGF0ZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwlBQ1hfUkVHX1NMVl9TT0ZUX1JFU0VULAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgRUVQUk9NIEJ1cnN0IFJlYWQgU3RhcnQgIC0gMzJiaXQgUlcKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBbMzE6MV0gUmVzZXJ2ZWQKKyAwICBBQ1hfRUVfU1RBUlQgLSAgRUVQUk9NIEJ1cnN0IFJlYWQgU3RhcnQgMAorIFNldHRpbmcgdGhpcyBiaXQgc3RhcnRzIGEgYnVyc3QgcmVhZCBmcm9tCisgdGhlIGV4dGVybmFsIEVFUFJPTS4KKyBJZiB0aGlzIGJpdCBpcyBzZXQgKGFmdGVyIHJlc2V0KSBiZWZvcmUgYW4gRUVQUk9NIHJlYWQvd3JpdGUsCisgdGhlIGJ1cnN0IHJlYWQgc3RhcnRzIGF0IEVFUFJPTSBhZGRyZXNzIDAuCisgT3RoZXJ3aXNlLCBpdCBzdGFydHMgYXQgdGhlIGFkZHJlc3MKKyBmb2xsb3dpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIGFjY2Vzcy4KKyBUaGVXbGFuIGhhcmR3YXJlIGhhcmR3YXJlIGNsZWFycyB0aGlzIGJpdCBhdXRvbWF0aWNhbGx5LgorCisgRGVmYXVsdDogMHgwMDAwMDAwMAorKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJQUNYX1JFR19FRV9TVEFSVCwKKworLyogRW1iZWRkZWQgQVJNIENQVSBDb250cm9sICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBIYWx0IGVDUFUgICAtIDMyYml0IFJXCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMCBIQUxUX0VDUFUgSGFsdCBFbWJlZGRlZCBDUFUgLSBUaGlzIGJpdCBpcyB0aGUKKyBjb21wbGltZW50IG9mIGJpdCAxIChNREFUQTIpIGluIHRoZSBTT1JfQ0ZHIHJlZ2lzdGVyLgorIER1cmluZyBhIGhhcmR3YXJlIHJlc2V0LCB0aGlzIGJpdCBob2xkcworIHRoZSBpbnZlcnNlIG9mIE1EQVRBMi4KKyBXaGVuIGRvd25sb2FkaW5nIGZpcm13YXJlIGZyb20gdGhlIGhvc3QsCisgc2V0IHRoaXMgYml0IChwdWxsIGRvd24gTURBVEEyKS4KKyBUaGUgaG9zdCBjbGVhcnMgdGhpcyBiaXQgYWZ0ZXIgZG93bmxvYWRpbmcgdGhlIGZpcm13YXJlIGludG8KKyB6ZXJvLXdhaXQtc3RhdGUgU1NSQU0uCisgV2hlbiBsb2FkaW5nIGZpcm13YXJlIGZyb20gRmxhc2gsIGNsZWFyIHRoaXMgYml0IChwdWxsIHVwIE1EQVRBMikKKyBzbyB0aGF0IHRoZSBlQ1BVIGNhbiBydW4gdGhlIGJvb3Rsb2FkZXIgY29kZSBpbiBGbGFzaAorIEhBTFRfRUNQVSBlQ1BVIFN0YXRlCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGhhbHQgZUNQVQorIDAgZW5hYmxlIGVDUFUKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJQUNYX1JFR19FQ1BVX0NPTlRST0wsCisKKwlBQ1hfUkVHX1RBQkxFX0xFTgorfTsKKworI2RlZmluZSBBQ1hfU0xWX1NPRlRfUkVTRVRfQklUICAgQklUKDApCisjZGVmaW5lIEFDWF9SRUdfRUVQUk9NX1NUQVJUX0JJVCBCSVQoMCkKKworLyogQ29tbWFuZC9JbmZvcm1hdGlvbiBNYWlsYm94IFBvaW50ZXJzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQ29tbWFuZCBNYWlsYm94IFBvaW50ZXIgLSAzMmJpdCBSVworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRoaXMgcmVnaXN0ZXIgaG9sZHMgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YKKyB0aGUgY29tbWFuZCBtYWlsYm94IGxvY2F0ZWQgaW4gdGhlIFdsYW4gaGFyZHdhcmUgbWVtb3J5LgorIFRoZSBob3N0IG11c3QgcmVhZCB0aGlzIHBvaW50ZXIgYWZ0ZXIgYSByZXNldCB0bworIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tYW5kIG1haWxib3guCisgVGhlIFdsYW4gaGFyZHdhcmUgaW5pdGlhbGl6ZXMgdGhlIGNvbW1hbmQgbWFpbGJveAorIHBvaW50ZXIgd2l0aCB0aGUgZGVmYXVsdCBhZGRyZXNzIG9mIHRoZSBjb21tYW5kIG1haWxib3guCisgVGhlIGNvbW1hbmQgbWFpbGJveCBwb2ludGVyIGlzIG5vdCB2YWxpZCB1bnRpbCBhZnRlcgorIHRoZSBob3N0IHJlY2VpdmVzIHRoZSBJbml0IENvbXBsZXRlIGludGVycnVwdCBmcm9tCisgdGhlIFdsYW4gaGFyZHdhcmUuCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBSRUdfQ09NTUFORF9NQUlMQk9YX1BUUgkJCQkoU0NSX1BBRDApCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgSW5mb3JtYXRpb24gTWFpbGJveCBQb2ludGVyIC0gMzJiaXQgUlcKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaGlzIHJlZ2lzdGVyIGhvbGRzIHRoZSBzdGFydCBhZGRyZXNzIG9mCisgdGhlIGluZm9ybWF0aW9uIG1haWxib3ggbG9jYXRlZCBpbiB0aGUgV2xhbiBoYXJkd2FyZSBtZW1vcnkuCisgVGhlIGhvc3QgbXVzdCByZWFkIHRoaXMgcG9pbnRlciBhZnRlciBhIHJlc2V0IHRvIGZpbmQKKyB0aGUgbG9jYXRpb24gb2YgdGhlIGluZm9ybWF0aW9uIG1haWxib3guCisgVGhlIFdsYW4gaGFyZHdhcmUgaW5pdGlhbGl6ZXMgdGhlIGluZm9ybWF0aW9uIG1haWxib3ggcG9pbnRlcgorIHdpdGggdGhlIGRlZmF1bHQgYWRkcmVzcyBvZiB0aGUgaW5mb3JtYXRpb24gbWFpbGJveC4KKyBUaGUgaW5mb3JtYXRpb24gbWFpbGJveCBwb2ludGVyIGlzIG5vdCB2YWxpZAorIHVudGlsIGFmdGVyIHRoZSBob3N0IHJlY2VpdmVzIHRoZSBJbml0IENvbXBsZXRlIGludGVycnVwdCBmcm9tCisgdGhlIFdsYW4gaGFyZHdhcmUuCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBSRUdfRVZFTlRfTUFJTEJPWF9QVFIJCQkJKFNDUl9QQUQxKQorCisKKy8qIE1pc2MgKi8KKworI2RlZmluZSBSRUdfRU5BQkxFX1RYX1JYCQkJCShFTkFCTEUpCisvKgorICogUnggY29uZmlndXJhdGlvbiAoZmlsdGVyKSBpbmZvcm1hdGlvbiBlbGVtZW50CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBSRUdfUlhfQ09ORklHCQkJCShSWF9DRkcpCisjZGVmaW5lIFJFR19SWF9GSUxURVIJCQkJKFJYX0ZJTFRFUl9DRkcpCisKKworI2RlZmluZSBSWF9DRkdfRU5BQkxFX1BIWV9IRUFERVJfUExDUAkgMHgwMDAyCisKKy8qIHByb21pc2N1b3VzIC0gcmVjZWl2ZXMgYWxsIHZhbGlkIGZyYW1lcyAqLworI2RlZmluZSBSWF9DRkdfUFJPTUlTQ1VPVVMJCSAweDAwMDgKKworLyogcmVjZWl2ZXMgZnJhbWVzIGZyb20gYW55IEJTU0lEICovCisjZGVmaW5lIFJYX0NGR19CU1NJRAkJCSAweDAwMjAKKworLyogcmVjZWl2ZXMgZnJhbWVzIGRlc3RpbmVkIHRvIGFueSBNQUMgYWRkcmVzcyAqLworI2RlZmluZSBSWF9DRkdfTUFDCQkJIDB4MDAxMAorCisjZGVmaW5lIFJYX0NGR19FTkFCTEVfT05MWV9NWV9ERVNUX01BQwkgMHgwMDEwCisjZGVmaW5lIFJYX0NGR19FTkFCTEVfQU5ZX0RFU1RfTUFDCSAweDAwMDAKKyNkZWZpbmUgUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX0JTU0lECSAweDAwMjAKKyNkZWZpbmUgUlhfQ0ZHX0VOQUJMRV9BTllfQlNTSUQJCSAweDAwMDAKKworLyogZGlzY2FyZHMgYWxsIGJyb2FkY2FzdCBmcmFtZXMgKi8KKyNkZWZpbmUgUlhfQ0ZHX0RJU0FCTEVfQkNBU1QJCSAweDAyMDAKKworI2RlZmluZSBSWF9DRkdfRU5BQkxFX09OTFlfTVlfU1NJRAkgMHgwNDAwCisjZGVmaW5lIFJYX0NGR19FTkFCTEVfUlhfQ01QTFRfRkNTX0VSUk9SIDB4MDgwMAorI2RlZmluZSBSWF9DRkdfQ09QWV9SWF9TVEFUVVMJCSAweDIwMDAKKyNkZWZpbmUgUlhfQ0ZHX1RTRgkJCSAweDEwMDAwCisKKyNkZWZpbmUgUlhfQ09ORklHX09QVElPTl9BTllfRFNUX01ZX0JTUwkgKFJYX0NGR19FTkFCTEVfQU5ZX0RFU1RfTUFDIHwgXAorCQkJCQkgIFJYX0NGR19FTkFCTEVfT05MWV9NWV9CU1NJRCkKKworI2RlZmluZSBSWF9DT05GSUdfT1BUSU9OX01ZX0RTVF9BTllfQlNTCSAoUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX0RFU1RfTUFDXAorCQkJCQkgIHwgUlhfQ0ZHX0VOQUJMRV9BTllfQlNTSUQpCisKKyNkZWZpbmUgUlhfQ09ORklHX09QVElPTl9BTllfRFNUX0FOWV9CU1MgKFJYX0NGR19FTkFCTEVfQU5ZX0RFU1RfTUFDIHwgXAorCQkJCQkgIFJYX0NGR19FTkFCTEVfQU5ZX0JTU0lEKQorCisjZGVmaW5lIFJYX0NPTkZJR19PUFRJT05fTVlfRFNUX01ZX0JTUwkgKFJYX0NGR19FTkFCTEVfT05MWV9NWV9ERVNUX01BQ1wKKwkJCQkJICB8IFJYX0NGR19FTkFCTEVfT05MWV9NWV9CU1NJRCkKKworI2RlZmluZSBSWF9DT05GSUdfT1BUSU9OX0ZPUl9TQ0FOICAoUlhfQ0ZHX0VOQUJMRV9QSFlfSEVBREVSX1BMQ1AgXAorCQkJCSAgICB8IFJYX0NGR19FTkFCTEVfUlhfQ01QTFRfRkNTX0VSUk9SIFwKKwkJCQkgICAgfCBSWF9DRkdfQ09QWV9SWF9TVEFUVVMgfCBSWF9DRkdfVFNGKQorCisjZGVmaW5lIFJYX0NPTkZJR19PUFRJT05fRk9SX01FQVNVUkVNRU5UIChSWF9DRkdfRU5BQkxFX0FOWV9ERVNUX01BQykKKworI2RlZmluZSBSWF9DT05GSUdfT1BUSU9OX0ZPUl9KT0lOCSAoUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX0JTU0lEIHwgXAorCQkJCQkgIFJYX0NGR19FTkFCTEVfT05MWV9NWV9ERVNUX01BQykKKworI2RlZmluZSBSWF9DT05GSUdfT1BUSU9OX0ZPUl9JQlNTX0pPSU4gICAoUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX1NTSUQgfCBcCisJCQkJCSAgUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX0RFU1RfTUFDKQorCisjZGVmaW5lIFJYX0ZJTFRFUl9PUFRJT05fREVGCSAgICAgIChDRkdfUlhfTUdNVF9FTiB8IENGR19SWF9EQVRBX0VOXAorCQkJCSAgICAgICB8IENGR19SWF9DVExfRU4gfCBDRkdfUlhfQkNOX0VOXAorCQkJCSAgICAgICB8IENGR19SWF9BVVRIX0VOIHwgQ0ZHX1JYX0FTU09DX0VOKQorCisjZGVmaW5lIFJYX0ZJTFRFUl9PUFRJT05fRklMVEVSX0FMTAkgMAorCisjZGVmaW5lIFJYX0ZJTFRFUl9PUFRJT05fREVGX1BSU1BfQkNOICAoQ0ZHX1JYX1BSU1BfRU4gfCBDRkdfUlhfTUdNVF9FTlwKKwkJCQkJfCBDRkdfUlhfUkNUU19BQ0sgfCBDRkdfUlhfQkNOX0VOKQorCisjZGVmaW5lIFJYX0ZJTFRFUl9PUFRJT05fSk9JTgkgICAgIChDRkdfUlhfTUdNVF9FTiB8IENGR19SWF9EQVRBX0VOXAorCQkJCSAgICAgIHwgQ0ZHX1JYX0JDTl9FTiB8IENGR19SWF9BVVRIX0VOXAorCQkJCSAgICAgIHwgQ0ZHX1JYX0FTU09DX0VOIHwgQ0ZHX1JYX1JDVFNfQUNLXAorCQkJCSAgICAgIHwgQ0ZHX1JYX1BSU1BfRU4pCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIEVFUFJPTSBSZWFkL1dyaXRlIFJlcXVlc3QgMzJiaXQgUlcKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIEVFX1JFQUQgLSBFRVBST00gUmVhZCBSZXF1ZXN0IDEgLSBTZXR0aW5nIHRoaXMgYml0CisgbG9hZHMgYSBzaW5nbGUgYnl0ZSBvZiBkYXRhIGludG8gdGhlIEVFX0RBVEEKKyByZWdpc3RlciBmcm9tIHRoZSBFRVBST00gbG9jYXRpb24gc3BlY2lmaWVkIGluCisgdGhlIEVFX0FERFIgcmVnaXN0ZXIuCisgVGhlIFdsYW4gaGFyZHdhcmUgaGFyZHdhcmUgY2xlYXJzIHRoaXMgYml0IGF1dG9tYXRpY2FsbHkuCisgRUVfREFUQSBpcyB2YWxpZCB3aGVuIHRoaXMgYml0IGlzIGNsZWFyZWQuCisKKyAwIEVFX1dSSVRFICAtIEVFUFJPTSBXcml0ZSBSZXF1ZXN0ICAtIFNldHRpbmcgdGhpcyBiaXQKKyB3cml0ZXMgYSBzaW5nbGUgYnl0ZSBvZiBkYXRhIGZyb20gdGhlIEVFX0RBVEEgcmVnaXN0ZXIgaW50byB0aGUKKyBFRVBST00gbG9jYXRpb24gc3BlY2lmaWVkIGluIHRoZSBFRV9BRERSIHJlZ2lzdGVyLgorIFRoZSBXbGFuIGhhcmR3YXJlIGhhcmR3YXJlIGNsZWFycyB0aGlzIGJpdCBhdXRvbWF0aWNhbGx5LgorKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQUNYX0VFX0NUTF9SRUcgICAgICAgICAgICAgICAgICAgICAgRUVfQ1RMCisjZGVmaW5lIEVFX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDF1bAorI2RlZmluZSBFRV9SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAydWwKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBFRVBST00gQWRkcmVzcyAgLSAzMmJpdCBSVworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhpcyByZWdpc3RlciBzcGVjaWZpZXMgdGhlIGFkZHJlc3MKKyAgd2l0aGluIHRoZSBFRVBST00gZnJvbS90byB3aGljaCB0byByZWFkL3dyaXRlIGRhdGEuCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQUNYX0VFX0FERFJfUkVHICAgICAgICAgICAgICAgICAgICAgRUVfQUREUgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEVFUFJPTSBEYXRhICAtIDMyYml0IFJXCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGlzIHJlZ2lzdGVyIGVpdGhlciBob2xkcyB0aGUgcmVhZCA4IGJpdHMgb2YKKyAgZGF0YSBmcm9tIHRoZSBFRVBST00gb3IgdGhlIHdyaXRlIGRhdGEKKyAgdG8gYmUgd3JpdHRlbiB0byB0aGUgRUVQUk9NLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisjZGVmaW5lIEFDWF9FRV9EQVRBX1JFRyAgICAgICAgICAgICAgICAgICAgIEVFX0RBVEEKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBFRVBST00gQmFzZSBBZGRyZXNzICAtIDMyYml0IFJXCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGlzIHJlZ2lzdGVyIGhvbGRzIHRoZSB1cHBlciBuaW5lIGJpdHMKKyAgWzIzOjE1XSBvZiB0aGUgMjQtYml0IFdsYW4gaGFyZHdhcmUgbWVtb3J5CisgIGFkZHJlc3MgZm9yIGJ1cnN0IHJlYWRzIGZyb20gRUVQUk9NIGFjY2Vzc2VzLgorICBUaGUgRUVQUk9NIHByb3ZpZGVzIHRoZSBsb3dlciAxNSBiaXRzIG9mIHRoaXMgYWRkcmVzcy4KKyAgVGhlIE1TQiBvZiB0aGUgYWRkcmVzcyBmcm9tIHRoZSBFRVBST00gaXMgaWdub3JlZC4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBBQ1hfRUVfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICBFRV9DRkcKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBHUElPIE91dHB1dCBWYWx1ZXMgIC0zMmJpdCwgUlcKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFszMToxNl0gIFJlc2VydmVkCisgIFsxNTogMF0gIFNwZWNpZnkgdGhlIG91dHB1dCB2YWx1ZXMgKGF0IHRoZSBvdXRwdXQgZHJpdmVyIGlucHV0cykgZm9yCisgIEdQSU9bMTU6MF0sIHJlc3BlY3RpdmVseS4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBBQ1hfR1BJT19PVVRfUkVHICAgICAgICAgICAgR1BJT19PVVQKKyNkZWZpbmUgQUNYX01BWF9HUElPX0xJTkVTICAgICAgICAgIDE1CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQ29udGVudGlvbiB3aW5kb3cgIC0zMmJpdCwgUlcKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFszMToyNl0gIFJlc2VydmVkCisgIFsyNToxNl0gIE1heCAoMHgzZmYpCisgIFsxNTowN10gIFJlc2VydmVkCisgIFswNjowMF0gIEN1cnJlbnQgY29udGVudGlvbiB3aW5kb3cgdmFsdWUgLSBkZWZhdWx0IGlzIDB4MUYKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBBQ1hfQ09OVF9XSU5EX0NGR19SRUcgICAgQ09OVF9XSU5EX0NGRworI2RlZmluZSBBQ1hfQ09OVF9XSU5EX01JTl9NQVNLICAgMHgwMDAwMDA3ZgorI2RlZmluZSBBQ1hfQ09OVF9XSU5EX01BWCAgICAgICAgMHgwM2ZmMDAwMAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEhJX0NGRyBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBWYWx1ZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgSElfQ0ZHX1VBUlRfRU5BQkxFICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSElfQ0ZHX1JTVDIzMl9FTkFCTEUgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSElfQ0ZHX0NMT0NLX1JFUV9TRUxFQ1QgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSElfQ0ZHX0hPU1RfSU5UX0VOQUJMRSAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSElfQ0ZHX1ZMWU5RX09VVFBVVF9FTkFCTEUgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSElfQ0ZHX0hPU1RfSU5UX0FDVElWRV9MT1cgIDB4MDAwMDAwODAKKyNkZWZpbmUgSElfQ0ZHX1VBUlRfVFhfT1VUX0dQSU9fMTUgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSElfQ0ZHX1VBUlRfVFhfT1VUX0dQSU9fMTQgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSElfQ0ZHX1VBUlRfVFhfT1VUX0dQSU9fNyAgIDB4MDAwMDA0MDAKKworLyoKKyAqIE5PVEU6IFVTRV9BQ1RJVkVfSElHSCBjb21waWxhdGlvbiBmbGFnIHNob3VsZCBiZSBkZWZpbmVkIGluIG1ha2VmaWxlCisgKiAgICAgICBmb3IgcGxhdGZvcm1zIHVzaW5nIGFjdGl2ZSBoaWdoIGludGVycnVwdCBsZXZlbAorICovCisjaWZkZWYgVVNFX0FDVElWRV9ISUdICisjZGVmaW5lIEhJX0NGR19ERUZfVkFMICAgICAgICAgICAgICBcCisJKEhJX0NGR19VQVJUX0VOQUJMRSB8ICAgICAgICBcCisJSElfQ0ZHX1JTVDIzMl9FTkFCTEUgfCAgICAgIFwKKwlISV9DRkdfQ0xPQ0tfUkVRX1NFTEVDVCB8ICAgXAorCUhJX0NGR19IT1NUX0lOVF9FTkFCTEUpCisjZWxzZQorI2RlZmluZSBISV9DRkdfREVGX1ZBTCAgICAgICAgICAgICAgXAorCShISV9DRkdfVUFSVF9FTkFCTEUgfCAgICAgICAgXAorCUhJX0NGR19SU1QyMzJfRU5BQkxFIHwgICAgICBcCisJSElfQ0ZHX0NMT0NLX1JFUV9TRUxFQ1QgfCAgIFwKKwlISV9DRkdfSE9TVF9JTlRfRU5BQkxFKQorCisjZW5kaWYKKworI2RlZmluZSBSRUZfRlJFUV8xOV8yICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFJFRl9GUkVRXzI2XzAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUkVGX0ZSRVFfMzhfNCAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBSRUZfRlJFUV80MF8wICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFJFRl9GUkVRXzMzXzYgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUkVGX0ZSRVFfTlVNICAgICAgICAgICAgICAgICAgICAgICAgNQorCisjZGVmaW5lIExVVF9QQVJBTV9JTlRFR0VSX0RJVklERVIgICAgICAgICAgIDAKKyNkZWZpbmUgTFVUX1BBUkFNX0ZSQUNUSU9OQUxfRElWSURFUiAgICAgICAgMQorI2RlZmluZSBMVVRfUEFSQU1fQVRUTl9CQiAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIExVVF9QQVJBTV9BTFBIQV9CQiAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTFVUX1BBUkFNX1NUT1BfVElNRV9CQiAgICAgICAgICAgICAgNAorI2RlZmluZSBMVVRfUEFSQU1fQkJfUExMX0xPT1BfRklMVEVSICAgICAgICA1CisjZGVmaW5lIExVVF9QQVJBTV9OVU0gICAgICAgICAgICAgICAgICAgICAgIDYKKworI2RlZmluZSBBQ1hfRUVQUk9NTEVTU19JTkRfUkVHICAgICAgICAgICAgICAoU0NSX1BBRDQpCisjZGVmaW5lIFVTRV9FRVBST00gICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU09GVF9SRVNFVF9NQVhfVElNRSAgICAgICAgICAgICAgICAgMTAwMDAwMAorI2RlZmluZSBTT0ZUX1JFU0VUX1NUQUxMX1RJTUUgICAgICAgICAgICAgICAxMDAwCisjZGVmaW5lIE5WU19EQVRBX0JVTkRBUllfQUxJR05NRU5UICAgICAgICAgIDQKKworCisvKiBGaXJtd2FyZSBpbWFnZSBsb2FkIGNodW5rIHNpemUgKi8KKyNkZWZpbmUgQ0hVTktfU0laRSAgICAgICAgICA1MTIKKworLyogRmlybXdhcmUgaW1hZ2UgaGVhZGVyIHNpemUgKi8KKyNkZWZpbmUgRldfSERSX1NJWkUgOAorCisjZGVmaW5lIEVDUFVfQ09OVFJPTF9IQUxUCQkJCQkweDAwMDAwMTAxCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgQ0hBTk5FTFMsIEJBTkQgJiBSRUcgRE9NQUlOUyBkZWZpbml0aW9ucworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworZW51bSB7CisJUkFESU9fQkFORF8yXzRHSFogPSAwLCAgLyogMi40IEdoeiBiYW5kICovCisJUkFESU9fQkFORF81R0haID0gMSwgICAgLyogNSBHaHogYmFuZCAqLworCVJBRElPX0JBTkRfSkFQQU5fNF85X0dIWiA9IDIsCisJREVGQVVMVF9CQU5EID0gUkFESU9fQkFORF8yXzRHSFosCisJSU5WQUxJRF9CQU5EID0gMHhGRSwKKwlNQVhfUkFESU9fQkFORFMgPSAweEZGCit9OworCitlbnVtIHsKKwlOT19SQVRFICAgICAgPSAwLAorCVJBVEVfMU1CUFMgICA9IDB4MEEsCisJUkFURV8yTUJQUyAgID0gMHgxNCwKKwlSQVRFXzVfNU1CUFMgPSAweDM3LAorCVJBVEVfNk1CUFMgICA9IDB4MEIsCisJUkFURV85TUJQUyAgID0gMHgwRiwKKwlSQVRFXzExTUJQUyAgPSAweDZFLAorCVJBVEVfMTJNQlBTICA9IDB4MEEsCisJUkFURV8xOE1CUFMgID0gMHgwRSwKKwlSQVRFXzIyTUJQUyAgPSAweERDLAorCVJBVEVfMjRNQlBTICA9IDB4MDksCisJUkFURV8zNk1CUFMgID0gMHgwRCwKKwlSQVRFXzQ4TUJQUyAgPSAweDA4LAorCVJBVEVfNTRNQlBTICA9IDB4MEMKK307CisKK2VudW0geworCVJBVEVfSU5ERVhfMU1CUFMgICA9ICAwLAorCVJBVEVfSU5ERVhfMk1CUFMgICA9ICAxLAorCVJBVEVfSU5ERVhfNV81TUJQUyA9ICAyLAorCVJBVEVfSU5ERVhfNk1CUFMgICA9ICAzLAorCVJBVEVfSU5ERVhfOU1CUFMgICA9ICA0LAorCVJBVEVfSU5ERVhfMTFNQlBTICA9ICA1LAorCVJBVEVfSU5ERVhfMTJNQlBTICA9ICA2LAorCVJBVEVfSU5ERVhfMThNQlBTICA9ICA3LAorCVJBVEVfSU5ERVhfMjJNQlBTICA9ICA4LAorCVJBVEVfSU5ERVhfMjRNQlBTICA9ICA5LAorCVJBVEVfSU5ERVhfMzZNQlBTICA9ICAxMCwKKwlSQVRFX0lOREVYXzQ4TUJQUyAgPSAgMTEsCisJUkFURV9JTkRFWF81NE1CUFMgID0gIDEyLAorCVJBVEVfSU5ERVhfTUFYICAgICA9ICBSQVRFX0lOREVYXzU0TUJQUywKKwlNQVhfUkFURV9JTkRFWCwKKwlJTlZBTElEX1JBVEVfSU5ERVggPSBNQVhfUkFURV9JTkRFWCwKKwlSQVRFX0lOREVYX0VOVU1fTUFYX1NJWkUgPSAweDdGRkZGRkZGCit9OworCitlbnVtIHsKKwlSQVRFX01BU0tfMU1CUFMgPSAweDEsCisJUkFURV9NQVNLXzJNQlBTID0gMHgyLAorCVJBVEVfTUFTS181XzVNQlBTID0gMHg0LAorCVJBVEVfTUFTS18xMU1CUFMgPSAweDIwLAorfTsKKworI2RlZmluZSBTSE9SVF9QUkVBTUJMRV9CSVQgICBCSVQoMCkgLyogQ0NLIG9yIEJhcmtlciBkZXBlbmRpbmcgb24gdGhlIHJhdGUgKi8KKyNkZWZpbmUgT0ZETV9SQVRFX0JJVCAgICAgICAgQklUKDYpCisjZGVmaW5lIFBCQ0NfUkFURV9CSVQgICAgICAgIEJJVCg3KQorCitlbnVtIHsKKwlDQ0tfTE9ORyA9IDAsCisJQ0NLX1NIT1JUID0gU0hPUlRfUFJFQU1CTEVfQklULAorCVBCQ0NfTE9ORyA9IFBCQ0NfUkFURV9CSVQsCisJUEJDQ19TSE9SVCA9IFBCQ0NfUkFURV9CSVQgfCBTSE9SVF9QUkVBTUJMRV9CSVQsCisJT0ZETSA9IE9GRE1fUkFURV9CSVQKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVHJhbnNtaXQtRGVzY3JpcHRvciBSQVRFLVNFVCBmaWVsZCBkZWZpbml0aW9ucy4uLgorCitEZWZpbmUgYSBuZXcgIlJhdGUtU2V0IiBmb3IgVFggcGF0aCB0aGF0IGluY29ycG9yYXRlcyB0aGUKK1JhdGUgJiBNb2R1bGF0aW9uIGluZm8gaW50byBhIHNpbmdsZSAxNi1iaXQgZmllbGQuCisKK1R4ZFJhdGVTZXRfdDoKK2IxNSAgIC0gSW5kaWNhdGVzIFByZWFtYmxlIHR5cGUgKDE9U0hPUlQsIDA9TE9ORykuCisJTm90ZXM6CisJTXVzdCBiZSBMT05HICgwKSBmb3IgMU1icHMgcmF0ZS4KKwlEb2VzIG5vdCBhcHBseSAoc2V0IHRvIDApIGZvciBSZXZHLU9GRE0gcmF0ZXMuCitiMTQgICAtIEluZGljYXRlcyBQQkNDIGVuY29kaW5nICgxPVBCQ0MsIDA9bm90KS4KKwlOb3RlczoKKwlEb2VzIG5vdCBhcHBseSAoc2V0IHRvIDApIGZvciByYXRlcyAxIGFuZCAyIE1icHMuCisJRG9lcyBub3QgYXBwbHkgKHNldCB0byAwKSBmb3IgUmV2Ry1PRkRNIHJhdGVzLgorYjEzICAgIC0gVW51c2VkIChzZXQgdG8gMCkuCitiMTItYjAgLSBTdXBwb3J0ZWQgUmF0ZSBpbmRpY2F0b3IgYml0cyBhcyBkZWZpbmVkIGJlbG93LgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIEludGVycnVwdCBUcmlnZ2VyIFJlZ2lzdGVyIChIb3N0IC0+IFdpTGluaykKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEhhcmR3YXJlIHRvIEVtYmVkZGVkIENQVSBJbnRlcnJ1cHRzIC0gZmlyc3QgMzItYml0IHJlZ2lzdGVyIHNldCAqLworCisvKgorICogSG9zdCBDb21tYW5kIEludGVycnVwdC4gU2V0dGluZyB0aGlzIGJpdCBtYXNrcworICogdGhlIGludGVycnVwdCB0aGF0IHRoZSBob3N0IGlzc3VlcyB0byBpbmZvcm0KKyAqIHRoZSBGVyB0aGF0IGl0IGhhcyBzZW50IGEgY29tbWFuZAorICogdG8gdGhlIFdsYW4gaGFyZHdhcmUgQ29tbWFuZCBNYWlsYm94LgorICovCisjZGVmaW5lIElOVFJfVFJJR19DTUQgICAgICAgQklUKDApCisKKy8qCisgKiBIb3N0IEV2ZW50IEFja25vd2xlZ2RlIEludGVycnVwdC4gVGhlIGhvc3QKKyAqIHNldHMgdGhpcyBiaXQgdG8gYWNrbm93bGVkZ2UgdGhhdCBpdCByZWNlaXZlZAorICogdGhlIHVuc29saWNpdGVkIGluZm9ybWF0aW9uIGZyb20gdGhlIGV2ZW50CisgKiBtYWlsYm94LgorICovCisjZGVmaW5lIElOVFJfVFJJR19FVkVOVF9BQ0sgQklUKDEpCisKKy8qCisgKiBUaGUgaG9zdCBzZXRzIHRoaXMgYml0IHRvIGluZm9ybSB0aGUgV2xhbgorICogRlcgdGhhdCBhIFRYIHBhY2tldCBpcyBpbiB0aGUgWEZFUgorICogQnVmZmVyICMwLgorICovCisjZGVmaW5lIElOVFJfVFJJR19UWF9QUk9DMCBCSVQoMikKKworLyoKKyAqIFRoZSBob3N0IHNldHMgdGhpcyBiaXQgdG8gaW5mb3JtIHRoZSBGVworICogdGhhdCBpdCByZWFkIGEgcGFja2V0IGZyb20gUlggWEZFUgorICogQnVmZmVyICMwLgorICovCisjZGVmaW5lIElOVFJfVFJJR19SWF9QUk9DMCBCSVQoMykKKworI2RlZmluZSBJTlRSX1RSSUdfREVCVUdfQUNLIEJJVCg0KQorCisjZGVmaW5lIElOVFJfVFJJR19TVEFURV9DSEFOR0VEIEJJVCg1KQorCisKKy8qIEhhcmR3YXJlIHRvIEVtYmVkZGVkIENQVSBJbnRlcnJ1cHRzIC0gc2Vjb25kIDMyLWJpdCByZWdpc3RlciBzZXQgKi8KKworLyoKKyAqIFRoZSBob3N0IHNldHMgdGhpcyBiaXQgdG8gaW5mb3JtIHRoZSBGVworICogdGhhdCBpdCByZWFkIGEgcGFja2V0IGZyb20gUlggWEZFUgorICogQnVmZmVyICMxLgorICovCisjZGVmaW5lIElOVFJfVFJJR19SWF9QUk9DMSBCSVQoMTcpCisKKy8qCisgKiBUaGUgaG9zdCBzZXRzIHRoaXMgYml0IHRvIGluZm9ybSB0aGUgV2xhbgorICogaGFyZHdhcmUgdGhhdCBhIFRYIHBhY2tldCBpcyBpbiB0aGUgWEZFUgorICogQnVmZmVyICMxLgorICovCisjZGVmaW5lIElOVFJfVFJJR19UWF9QUk9DMSBCSVQoMTgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YzU0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3J4LmMKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCisjaW5jbHVkZSAid2wxMjUxLmgiCisjaW5jbHVkZSAid2wxMjUxX3JlZy5oIgorI2luY2x1ZGUgIndsMTI1MV9pby5oIgorI2luY2x1ZGUgIndsMTI1MV9yeC5oIgorI2luY2x1ZGUgIndsMTI1MV9jbWQuaCIKKyNpbmNsdWRlICJ3bDEyNTFfYWN4LmgiCisKK3N0YXRpYyB2b2lkIHdsMTI1MV9yeF9oZWFkZXIoc3RydWN0IHdsMTI1MSAqd2wsCisJCQkgICAgIHN0cnVjdCB3bDEyNTFfcnhfZGVzY3JpcHRvciAqZGVzYykKK3sKKwl1MzIgcnhfcGFja2V0X3JpbmdfYWRkcjsKKworCXJ4X3BhY2tldF9yaW5nX2FkZHIgPSB3bC0+ZGF0YV9wYXRoLT5yeF9wYWNrZXRfcmluZ19hZGRyOworCWlmICh3bC0+cnhfY3VycmVudF9idWZmZXIpCisJCXJ4X3BhY2tldF9yaW5nX2FkZHIgKz0gd2wtPmRhdGFfcGF0aC0+cnhfcGFja2V0X3JpbmdfY2h1bmtfc2l6ZTsKKworCXdsMTI1MV9tZW1fcmVhZCh3bCwgcnhfcGFja2V0X3JpbmdfYWRkciwgZGVzYywgc2l6ZW9mKCpkZXNjKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV9yeF9zdGF0dXMoc3RydWN0IHdsMTI1MSAqd2wsCisJCQkgICAgIHN0cnVjdCB3bDEyNTFfcnhfZGVzY3JpcHRvciAqZGVzYywKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywKKwkJCSAgICAgdTggYmVhY29uKQoreworCXU2NCBtYWN0aW1lOworCWludCByZXQ7CisKKwltZW1zZXQoc3RhdHVzLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMpKTsKKworCXN0YXR1cy0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJc3RhdHVzLT5tYWN0aW1lID0gZGVzYy0+dGltZXN0YW1wOworCisJLyoKKwkgKiBUaGUgcnggc3RhdHVzIHRpbWVzdGFtcCBpcyBhIDMyIGJpdHMgdmFsdWUgd2hpbGUgdGhlIFRTRiBpcyBhCisJICogNjQgYml0cyBvbmUuCisJICogRm9yIElCU1MgbWVyZ2luZywgVFNGIGlzIG1hbmRhdG9yeSwgc28gd2UgaGF2ZSB0byBnZXQgaXQKKwkgKiBzb21laG93LCBzbyB3ZSBhc2sgZm9yIEFDWF9UU0ZfSU5GTy4KKwkgKiBUaGF0IGNvdWxkIGJlIG1vdmVkIHRvIHRoZSBnZXRfdHNmKCkgaG9vaywgYnV0IHVuZm9ydHVuYXRlbHksCisJICogdGhpcyBvbmUgbXVzdCBiZSBhdG9taWMsIHdoaWxlIG91ciBTUEkgcm91dGluZXMgY2FuIHNsZWVwLgorCSAqLworCWlmICgod2wtPmJzc190eXBlID09IEJTU19UWVBFX0lCU1MpICYmIGJlYWNvbikgeworCQlyZXQgPSB3bDEyNTFfYWN4X3RzZl9pbmZvKHdsLCAmbWFjdGltZSk7CisJCWlmIChyZXQgPT0gMCkKKwkJCXN0YXR1cy0+bWFjdGltZSA9IG1hY3RpbWU7CisJfQorCisJc3RhdHVzLT5zaWduYWwgPSBkZXNjLT5yc3NpOworCXN0YXR1cy0+cXVhbCA9IChkZXNjLT5yc3NpIC0gV0wxMjUxX1JYX01JTl9SU1NJKSAqIDEwMCAvCisJCShXTDEyNTFfUlhfTUFYX1JTU0kgLSBXTDEyNTFfUlhfTUlOX1JTU0kpOworCXN0YXR1cy0+cXVhbCA9IG1pbihzdGF0dXMtPnF1YWwsIDEwMCk7CisJc3RhdHVzLT5xdWFsID0gbWF4KHN0YXR1cy0+cXVhbCwgMCk7CisKKwkvKgorCSAqIEZJWE1FOiBndWVzc2luZyB0aGF0IHNuciBuZWVkcyB0byBiZSBkaXZpZGVkIGJ5IHR3bywgb3RoZXJ3aXNlCisJICogdGhlIHZhbHVlcyBkb24ndCBtYWtlIGFueSBzZW5zZQorCSAqLworCXN0YXR1cy0+bm9pc2UgPSBkZXNjLT5yc3NpIC0gZGVzYy0+c25yIC8gMjsKKworCXN0YXR1cy0+ZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShkZXNjLT5jaGFubmVsKTsKKworCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX1RTRlQ7CisKKwlpZiAoZGVzYy0+ZmxhZ3MgJiBSWF9ERVNDX0VOQ1JZUFRJT05fTUFTSykgeworCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19JVl9TVFJJUFBFRCB8IFJYX0ZMQUdfTU1JQ19TVFJJUFBFRDsKKworCQlpZiAobGlrZWx5KCEoZGVzYy0+ZmxhZ3MgJiBSWF9ERVNDX0RFQ1JZUFRfRkFJTCkpKQorCQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOworCisJCWlmICh1bmxpa2VseShkZXNjLT5mbGFncyAmIFJYX0RFU0NfTUlDX0ZBSUwpKQorCQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKKwl9CisKKwlpZiAodW5saWtlbHkoIShkZXNjLT5mbGFncyAmIFJYX0RFU0NfVkFMSURfRkNTKSkpCisJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOworCisKKwkvKiBGSVhNRTogc2V0IHN0YXR1cy0+cmF0ZV9pZHggKi8KK30KKworc3RhdGljIHZvaWQgd2wxMjUxX3J4X2JvZHkoc3RydWN0IHdsMTI1MSAqd2wsCisJCQkgICBzdHJ1Y3Qgd2wxMjUxX3J4X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0dXM7CisJdTggKnJ4X2J1ZmZlciwgYmVhY29uID0gMDsKKwl1MTYgbGVuZ3RoLCAqZmM7CisJdTMyIGN1cnJfaWQsIGxhc3RfaWRfaW5jLCByeF9wYWNrZXRfcmluZ19hZGRyOworCisJbGVuZ3RoID0gV0wxMjUxX1JYX0FMSUdOKGRlc2MtPmxlbmd0aCAgLSBQTENQX0hFQURFUl9MRU5HVEgpOworCWN1cnJfaWQgPSAoZGVzYy0+ZmxhZ3MgJiBSWF9ERVNDX1NFUU5VTV9NQVNLKSA+PiBSWF9ERVNDX1BBQ0tFVElEX1NISUZUOworCWxhc3RfaWRfaW5jID0gKHdsLT5yeF9sYXN0X2lkICsgMSkgJSAoUlhfTUFYX1BBQ0tFVF9JRCArIDEpOworCisJaWYgKGxhc3RfaWRfaW5jICE9IGN1cnJfaWQpIHsKKwkJd2wxMjUxX3dhcm5pbmcoImN1cnIgSUQ6JWQsIGxhc3QgSUQgaW5jOiVkIiwKKwkJCSAgICAgICBjdXJyX2lkLCBsYXN0X2lkX2luYyk7CisJCXdsLT5yeF9sYXN0X2lkID0gY3Vycl9pZDsKKwl9IGVsc2UgeworCQl3bC0+cnhfbGFzdF9pZCA9IGxhc3RfaWRfaW5jOworCX0KKworCXJ4X3BhY2tldF9yaW5nX2FkZHIgPSB3bC0+ZGF0YV9wYXRoLT5yeF9wYWNrZXRfcmluZ19hZGRyICsKKwkJc2l6ZW9mKHN0cnVjdCB3bDEyNTFfcnhfZGVzY3JpcHRvcikgKyAyMDsKKwlpZiAod2wtPnJ4X2N1cnJlbnRfYnVmZmVyKQorCQlyeF9wYWNrZXRfcmluZ19hZGRyICs9IHdsLT5kYXRhX3BhdGgtPnJ4X3BhY2tldF9yaW5nX2NodW5rX3NpemU7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbmd0aCk7CisJaWYgKCFza2IpIHsKKwkJd2wxMjUxX2Vycm9yKCJDb3VsZG4ndCBhbGxvY2F0ZSBSWCBmcmFtZSIpOworCQlyZXR1cm47CisJfQorCisJcnhfYnVmZmVyID0gc2tiX3B1dChza2IsIGxlbmd0aCk7CisJd2wxMjUxX21lbV9yZWFkKHdsLCByeF9wYWNrZXRfcmluZ19hZGRyLCByeF9idWZmZXIsIGxlbmd0aCk7CisKKwkvKiBUaGUgYWN0dWFsIGxlbmdodCBkb2Vzbid0IGluY2x1ZGUgdGhlIHRhcmdldCdzIGFsaWdubWVudCAqLworCXNrYi0+bGVuID0gZGVzYy0+bGVuZ3RoICAtIFBMQ1BfSEVBREVSX0xFTkdUSDsKKworCWZjID0gKHUxNiAqKXNrYi0+ZGF0YTsKKworCWlmICgoKmZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pCisJCWJlYWNvbiA9IDE7CisKKwl3bDEyNTFfcnhfc3RhdHVzKHdsLCBkZXNjLCAmc3RhdHVzLCBiZWFjb24pOworCisJd2wxMjUxX2RlYnVnKERFQlVHX1JYLCAicnggc2tiIDB4JXA6ICVkIEIgJXMiLCBza2IsIHNrYi0+bGVuLAorCQkgICAgIGJlYWNvbiA/ICJiZWFjb24iIDogIiIpOworCisJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWVlZTgwMjExX3J4KHdsLT5odywgc2tiKTsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX3J4X2FjayhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwl1MzIgZGF0YSwgYWRkcjsKKworCWlmICh3bC0+cnhfY3VycmVudF9idWZmZXIpIHsKKwkJYWRkciA9IEFDWF9SRUdfSU5URVJSVVBUX1RSSUdfSDsKKwkJZGF0YSA9IElOVFJfVFJJR19SWF9QUk9DMTsKKwl9IGVsc2UgeworCQlhZGRyID0gQUNYX1JFR19JTlRFUlJVUFRfVFJJRzsKKwkJZGF0YSA9IElOVFJfVFJJR19SWF9QUk9DMDsKKwl9CisKKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIGFkZHIsIGRhdGEpOworCisJLyogVG9nZ2xlIGJ1ZmZlciByaW5nICovCisJd2wtPnJ4X2N1cnJlbnRfYnVmZmVyID0gIXdsLT5yeF9jdXJyZW50X2J1ZmZlcjsKK30KKworCit2b2lkIHdsMTI1MV9yeChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3Qgd2wxMjUxX3J4X2Rlc2NyaXB0b3IgKnJ4X2Rlc2M7CisKKwlpZiAod2wtPnN0YXRlICE9IFdMMTI1MV9TVEFURV9PTikKKwkJcmV0dXJuOworCisJcnhfZGVzYyA9IHdsLT5yeF9kZXNjcmlwdG9yOworCisJLyogV2UgZmlyc3QgcmVhZCB0aGUgZnJhbWUncyBoZWFkZXIgKi8KKwl3bDEyNTFfcnhfaGVhZGVyKHdsLCByeF9kZXNjKTsKKworCS8qIE5vdyB3ZSBjYW4gcmVhZCB0aGUgYm9keSAqLworCXdsMTI1MV9yeF9ib2R5KHdsLCByeF9kZXNjKTsKKworCS8qIEZpbmFsbHksIHdlIG5lZWQgdG8gQUNLIHRoZSBSWCAqLworCXdsMTI1MV9yeF9hY2sod2wpOworCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9yeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2M2EzZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3J4LmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1dMMTI1MV9SWF9IX18KKyNkZWZpbmUgX19XTDEyNTFfUlhfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2luY2x1ZGUgIndsMTI1MS5oIgorCisvKgorICogUlggUEFUSAorICoKKyAqIFRoZSBSeCBwYXRoIHVzZXMgYSBkb3VibGUgYnVmZmVyIGFuZCBhbiByeF9jb250cm8gc3RydWN0dXJlLCBlYWNoIGxvY2F0ZWQKKyAqIGF0IGEgZml4ZWQgYWRkcmVzcyBpbiB0aGUgZGV2aWNlIG1lbW9yeS4gVGhlIGhvc3Qga2VlcHMgdHJhY2sgb2Ygd2hpY2gKKyAqIGJ1ZmZlciBpcyBhdmFpbGFibGUgYW5kIGFsdGVybmF0ZXMgYmV0d2VlbiB0aGVtIG9uIGEgcGVyIHBhY2tldCBiYXNpcy4KKyAqIFRoZSBzaXplIG9mIGVhY2ggb2YgdGhlIHR3byBidWZmZXJzIGlzIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBsb25nZXN0CisgKiA4MDIuMyBwYWNrZXQuCisgKiBUaGUgUlggcGF0aCBnb2VzIGxpa2UgdGhhdDoKKyAqIDEpIFRoZSB0YXJnZXQgZ2VuZXJhdGVzIGFuIGludGVycnVwdCBlYWNoIHRpbWUgYSBuZXcgcGFja2V0IGlzIHJlY2VpdmVkLgorICogICBUaGVyZSBhcmUgMiBSWCBpbnRlcnJ1cHRzLCBvbmUgZm9yIGVhY2ggYnVmZmVyLgorICogMikgVGhlIGhvc3QgcmVhZHMgdGhlIHJlY2VpdmVkIHBhY2tldCBmcm9tIG9uZSBvZiB0aGUgZG91YmxlIGJ1ZmZlcnMuCisgKiAzKSBUaGUgaG9zdCB0cmlnZ2VycyBhIHRhcmdldCBpbnRlcnJ1cHQuCisgKiA0KSBUaGUgdGFyZ2V0IHByZXBhcmVzIHRoZSBuZXh0IFJYIHBhY2tldC4KKyAqLworCisjZGVmaW5lIFdMMTI1MV9SWF9NQVhfUlNTSSAtMzAKKyNkZWZpbmUgV0wxMjUxX1JYX01JTl9SU1NJIC05NQorCisjZGVmaW5lIFdMMTI1MV9SWF9BTElHTl9UTyA0CisjZGVmaW5lIFdMMTI1MV9SWF9BTElHTihsZW4pICgoKGxlbikgKyBXTDEyNTFfUlhfQUxJR05fVE8gLSAxKSAmIFwKKwkJCSAgICAgfihXTDEyNTFfUlhfQUxJR05fVE8gLSAxKSkKKworI2RlZmluZSBTSE9SVF9QUkVBTUJMRV9CSVQgICBCSVQoMCkKKyNkZWZpbmUgT0ZETV9SQVRFX0JJVCAgICAgICAgQklUKDYpCisjZGVmaW5lIFBCQ0NfUkFURV9CSVQgICAgICAgIEJJVCg3KQorCisjZGVmaW5lIFBMQ1BfSEVBREVSX0xFTkdUSCA4CisjZGVmaW5lIFJYX0RFU0NfUEFDS0VUSURfU0hJRlQgMTEKKyNkZWZpbmUgUlhfTUFYX1BBQ0tFVF9JRCAzCisKKyNkZWZpbmUgUlhfREVTQ19WQUxJRF9GQ1MgICAgICAgICAweDAwMDEKKyNkZWZpbmUgUlhfREVTQ19NQVRDSF9SWEFERFIxICAgICAweDAwMDIKKyNkZWZpbmUgUlhfREVTQ19NQ0FTVCAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgUlhfREVTQ19TVEFJTlRJTSAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgUlhfREVTQ19WSVJUVUFMX0JNICAgICAgICAweDAwMTAKKyNkZWZpbmUgUlhfREVTQ19CQ0FTVCAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgUlhfREVTQ19NQVRDSF9TU0lEICAgICAgICAweDAwNDAKKyNkZWZpbmUgUlhfREVTQ19NQVRDSF9CU1NJRCAgICAgICAweDAwODAKKyNkZWZpbmUgUlhfREVTQ19FTkNSWVBUSU9OX01BU0sgICAweDAzMDAKKyNkZWZpbmUgUlhfREVTQ19NRUFTVVJNRU5UICAgICAgICAweDA0MDAKKyNkZWZpbmUgUlhfREVTQ19TRVFOVU1fTUFTSyAgICAgICAweDE4MDAKKyNkZWZpbmUJUlhfREVTQ19NSUNfRkFJTAkgIDB4MjAwMAorI2RlZmluZQlSWF9ERVNDX0RFQ1JZUFRfRkFJTAkgIDB4NDAwMAorCitzdHJ1Y3Qgd2wxMjUxX3J4X2Rlc2NyaXB0b3IgeworCXUzMiB0aW1lc3RhbXA7IC8qIEluIG1pY3Jvc2Vjb25kcyAqLworCXUxNiBsZW5ndGg7IC8qIFBheWxvZCBsZW5ndGgsIGluY2x1ZGluZyBoZWFkZXJzICovCisJdTE2IGZsYWdzOworCisJLyoKKwkgKiAwIC0gODAyLjExCisJICogMSAtIDgwMi4zCisJICogMiAtIElQCisJICogMyAtIFJhdyBDb2RlYworCSAqLworCXU4IHR5cGU7CisKKwkvKgorCSAqIFJlY2VpdmVkIFJhdGU6CisJICogMHgwQSAtIDFNQlBTCisJICogMHgxNCAtIDJNQlBTCisJICogMHgzNyAtIDVfNU1CUFMKKwkgKiAweDBCIC0gNk1CUFMKKwkgKiAweDBGIC0gOU1CUFMKKwkgKiAweDZFIC0gMTFNQlBTCisJICogMHgwQSAtIDEyTUJQUworCSAqIDB4MEUgLSAxOE1CUFMKKwkgKiAweERDIC0gMjJNQlBTCisJICogMHgwOSAtIDI0TUJQUworCSAqIDB4MEQgLSAzNk1CUFMKKwkgKiAweDA4IC0gNDhNQlBTCisJICogMHgwQyAtIDU0TUJQUworCSAqLworCXU4IHJhdGU7CisKKwl1OCBtb2RfcHJlOyAvKiBNb2R1bGF0aW9uIGFuZCBwcmVhbWJsZSAqLworCXU4IGNoYW5uZWw7CisKKwkvKgorCSAqIDAgLSAyLjQgR2h6CisJICogMSAtIDUgR2h6CisJICovCisJdTggYmFuZDsKKworCXM4IHJzc2k7IC8qIGluIGRCICovCisJdTggcmNwaTsgLyogaW4gZEIgKi8KKwl1OCBzbnI7IC8qIGluIGRCICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwordm9pZCB3bDEyNTFfcngoc3RydWN0IHdsMTI1MSAqd2wpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9zZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyM2YyMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfc2Rpby5jCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogd2wxMnh4IFNESU8gcm91dGluZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMKKyAqIENvcHlyaWdodCAoQykgMjAwOSBCb2IgQ29wZWxhbmQgKG1lQGJvYmNvcGVsYW5kLmNvbSkKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19mdW5jLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9faWRzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ3bDEyNTEuaCIKKyNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKKyNpbmNsdWRlICJ3bDEyNTFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjUxX3BzLmgiCisjaW5jbHVkZSAid2wxMjUxX2lvLmgiCisjaW5jbHVkZSAid2wxMjUxX3R4LmgiCisjaW5jbHVkZSAid2wxMjUxX2RlYnVnZnMuaCIKKworI2lmbmRlZiBTRElPX1ZFTkRPUl9JRF9USQorI2RlZmluZSBTRElPX1ZFTkRPUl9JRF9USQkJMHgxMDRjCisjZW5kaWYKKworI2lmbmRlZiBTRElPX0RFVklDRV9JRF9USV9XTDEyNTEKKyNkZWZpbmUgU0RJT19ERVZJQ0VfSURfVElfV0wxMjUxCTB4OTA2NgorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgc2Rpb19mdW5jICp3bF90b19mdW5jKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXJldHVybiB3bC0+aWZfcHJpdjsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX3NkaW9faW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCit7CisJc3RydWN0IHdsMTI1MSAqd2wgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOworCisJd2wxMjUxX2RlYnVnKERFQlVHX0lSUSwgIklSUSIpOworCisJLyogRklYTUUgc2hvdWxkIGJlIHN5bmNocm9ub3VzIGZvciBzZGlvICovCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPmlycV93b3JrKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCB3bDEyNTFfZGV2aWNlc1tdID0geworCXsgU0RJT19ERVZJQ0UoU0RJT19WRU5ET1JfSURfVEksIFNESU9fREVWSUNFX0lEX1RJX1dMMTI1MSkgfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoc2Rpbywgd2wxMjUxX2RldmljZXMpOworCisKK3ZvaWQgd2wxMjUxX3NkaW9fcmVhZChzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSB3bF90b19mdW5jKHdsKTsKKworCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKKwlyZXQgPSBzZGlvX21lbWNweV9mcm9taW8oZnVuYywgYnVmLCBhZGRyLCBsZW4pOworCWlmIChyZXQpCisJCXdsMTI1MV9lcnJvcigic2RpbyByZWFkIGZhaWxlZCAoJWQpIiwgcmV0KTsKKwlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKK30KKwordm9pZCB3bDEyNTFfc2Rpb193cml0ZShzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSB3bF90b19mdW5jKHdsKTsKKworCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKKwlyZXQgPSBzZGlvX21lbWNweV90b2lvKGZ1bmMsIGFkZHIsIGJ1ZiwgbGVuKTsKKwlpZiAocmV0KQorCQl3bDEyNTFfZXJyb3IoInNkaW8gd3JpdGUgZmFpbGVkICglZCkiLCByZXQpOworCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworfQorCit2b2lkIHdsMTI1MV9zZGlvX3Jlc2V0KHN0cnVjdCB3bDEyNTEgKndsKQoreworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfc2Rpb19lbmFibGVfaXJxKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSB3bF90b19mdW5jKHdsKTsKKworCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKKwlzZGlvX2NsYWltX2lycShmdW5jLCB3bDEyNTFfc2Rpb19pbnRlcnJ1cHQpOworCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfc2Rpb19kaXNhYmxlX2lycShzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gd2xfdG9fZnVuYyh3bCk7CisKKwlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CisJc2Rpb19yZWxlYXNlX2lycShmdW5jKTsKKwlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKK30KKwordm9pZCB3bDEyNTFfc2Rpb19zZXRfcG93ZXIoYm9vbCBlbmFibGUpCit7Cit9CisKK3N0cnVjdCB3bDEyNTFfaWZfb3BlcmF0aW9ucyB3bDEyNTFfc2Rpb19vcHMgPSB7CisJLnJlYWQgPSB3bDEyNTFfc2Rpb19yZWFkLAorCS53cml0ZSA9IHdsMTI1MV9zZGlvX3dyaXRlLAorCS5yZXNldCA9IHdsMTI1MV9zZGlvX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gd2wxMjUxX3NkaW9fZW5hYmxlX2lycSwKKwkuZGlzYWJsZV9pcnEgPSB3bDEyNTFfc2Rpb19kaXNhYmxlX2lycSwKK307CisKK2ludCB3bDEyNTFfc2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IHdsMTI1MSAqd2w7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisKKwlodyA9IHdsMTI1MV9hbGxvY19odygpOworCWlmIChJU19FUlIoaHcpKQorCQlyZXR1cm4gUFRSX0VSUihodyk7CisKKwl3bCA9IGh3LT5wcml2OworCisJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOworCXJldCA9IHNkaW9fZW5hYmxlX2Z1bmMoZnVuYyk7CisJaWYgKHJldCkKKwkJZ290byByZWxlYXNlOworCisJc2Rpb19zZXRfYmxvY2tfc2l6ZShmdW5jLCA1MTIpOworCisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZmdW5jLT5kZXYpOworCXdsLT5pZl9wcml2ID0gZnVuYzsKKwl3bC0+aWZfb3BzID0gJndsMTI1MV9zZGlvX29wczsKKwl3bC0+c2V0X3Bvd2VyID0gd2wxMjUxX3NkaW9fc2V0X3Bvd2VyOworCisJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CisJcmV0ID0gd2wxMjUxX2luaXRfaWVlZTgwMjExKHdsKTsKKwlpZiAocmV0KQorCQlnb3RvIGRpc2FibGU7CisKKwlzZGlvX3NldF9kcnZkYXRhKGZ1bmMsIHdsKTsKKwlyZXR1cm4gcmV0OworCitkaXNhYmxlOgorCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKKwlzZGlvX2Rpc2FibGVfZnVuYyhmdW5jKTsKK3JlbGVhc2U6CisJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHdsMTI1MV9zZGlvX3JlbW92ZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKKworCXdsMTI1MV9mcmVlX2h3KHdsKTsKKworCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKKwlzZGlvX3JlbGVhc2VfaXJxKGZ1bmMpOworCXNkaW9fZGlzYWJsZV9mdW5jKGZ1bmMpOworCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworfQorCitzdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHdsMTI1MV9zZGlvX2RyaXZlciA9IHsKKwkubmFtZQkJPSAid2wxMjUxX3NkaW8iLAorCS5pZF90YWJsZQk9IHdsMTI1MV9kZXZpY2VzLAorCS5wcm9iZQkJPSB3bDEyNTFfc2Rpb19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdsMTI1MV9zZGlvX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bDEyNTFfc2Rpb19pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKCZ3bDEyNTFfc2Rpb19kcml2ZXIpOworCWlmIChlcnIpCisJCXdsMTI1MV9lcnJvcigiZmFpbGVkIHRvIHJlZ2lzdGVyIHNkaW8gZHJpdmVyOiAlZCIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdsMTI1MV9zZGlvX2V4aXQodm9pZCkKK3sKKwlzZGlvX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bDEyNTFfc2Rpb19kcml2ZXIpOworCXdsMTI1MV9ub3RpY2UoInVubG9hZGVkIik7Cit9CisKK21vZHVsZV9pbml0KHdsMTI1MV9zZGlvX2luaXQpOworbW9kdWxlX2V4aXQod2wxMjUxX3NkaW9fZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRlZmYyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfc3BpLmMKQEAgLTAsMCArMSwzNDQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmM3Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS93bDEyeHguaD4KKworI2luY2x1ZGUgIndsMTI1MS5oIgorI2luY2x1ZGUgIndsMTI1MV9yZWcuaCIKKyNpbmNsdWRlICJ3bDEyNTFfc3BpLmgiCisKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bDEyNTFfaXJxKGludCBpcnEsIHZvaWQgKmNvb2tpZSkKK3sKKwlzdHJ1Y3Qgd2wxMjUxICp3bDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19JUlEsICJJUlEiKTsKKworCXdsID0gY29va2llOworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPmlycV93b3JrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZGV2aWNlICp3bF90b19zcGkoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJcmV0dXJuIHdsLT5pZl9wcml2OworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfc3BpX3Jlc2V0KHN0cnVjdCB3bDEyNTEgKndsKQoreworCXU4ICpjbWQ7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCisJY21kID0ga3phbGxvYyhXU1BJX0lOSVRfQ01EX0xFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpIHsKKwkJd2wxMjUxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgY21kIGZvciBzcGkgcmVzZXQiKTsKKwkJcmV0dXJuOworCX0KKworCW1lbXNldCgmdCwgMCwgc2l6ZW9mKHQpKTsKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKworCW1lbXNldChjbWQsIDB4ZmYsIFdTUElfSU5JVF9DTURfTEVOKTsKKworCXQudHhfYnVmID0gY21kOworCXQubGVuID0gV1NQSV9JTklUX0NNRF9MRU47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKworCXNwaV9zeW5jKHdsX3RvX3NwaSh3bCksICZtKTsKKworCXdsMTI1MV9kdW1wKERFQlVHX1NQSSwgInNwaSByZXNldCAtPiAiLCBjbWQsIFdTUElfSU5JVF9DTURfTEVOKTsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX3NwaV93YWtlKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXU4IGNyY1tXU1BJX0lOSVRfQ01EX0NSQ19MRU5dLCAqY21kOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKworCWNtZCA9IGt6YWxsb2MoV1NQSV9JTklUX0NNRF9MRU4sIEdGUF9LRVJORUwpOworCWlmICghY21kKSB7CisJCXdsMTI1MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIGNtZCBmb3Igc3BpIGluaXQiKTsKKwkJcmV0dXJuOworCX0KKworCW1lbXNldChjcmMsIDAsIHNpemVvZihjcmMpKTsKKwltZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7CisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisKKwkvKgorCSAqIFNldCBXU1BJX0lOSVRfQ09NTUFORAorCSAqIHRoZSBkYXRhIGlzIGJlaW5nIHNlbmQgZnJvbSB0aGUgTVNCIHRvIExTQgorCSAqLworCWNtZFsyXSA9IDB4ZmY7CisJY21kWzNdID0gMHhmZjsKKwljbWRbMV0gPSBXU1BJX0lOSVRfQ01EX1NUQVJUIHwgV1NQSV9JTklUX0NNRF9UWDsKKwljbWRbMF0gPSAwOworCWNtZFs3XSA9IDA7CisJY21kWzZdIHw9IEhXX0FDQ0VTU19XU1BJX0lOSVRfQ01EX01BU0sgPDwgMzsKKwljbWRbNl0gfD0gSFdfQUNDRVNTX1dTUElfRklYRURfQlVTWV9MRU4gJiBXU1BJX0lOSVRfQ01EX0ZJWEVEQlVTWV9MRU47CisKKwlpZiAoSFdfQUNDRVNTX1dTUElfRklYRURfQlVTWV9MRU4gPT0gMCkKKwkJY21kWzVdIHw9ICBXU1BJX0lOSVRfQ01EX0RJU19GSVhFREJVU1k7CisJZWxzZQorCQljbWRbNV0gfD0gV1NQSV9JTklUX0NNRF9FTl9GSVhFREJVU1k7CisKKwljbWRbNV0gfD0gV1NQSV9JTklUX0NNRF9JT0QgfCBXU1BJX0lOSVRfQ01EX0lQIHwgV1NQSV9JTklUX0NNRF9DUworCQl8IFdTUElfSU5JVF9DTURfV1NQSSB8IFdTUElfSU5JVF9DTURfV1M7CisKKwljcmNbMF0gPSBjbWRbMV07CisJY3JjWzFdID0gY21kWzBdOworCWNyY1syXSA9IGNtZFs3XTsKKwljcmNbM10gPSBjbWRbNl07CisJY3JjWzRdID0gY21kWzVdOworCisJY21kWzRdIHw9IGNyYzcoMCwgY3JjLCBXU1BJX0lOSVRfQ01EX0NSQ19MRU4pIDw8IDE7CisJY21kWzRdIHw9IFdTUElfSU5JVF9DTURfRU5EOworCisJdC50eF9idWYgPSBjbWQ7CisJdC5sZW4gPSBXU1BJX0lOSVRfQ01EX0xFTjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOworCisJc3BpX3N5bmMod2xfdG9fc3BpKHdsKSwgJm0pOworCisJd2wxMjUxX2R1bXAoREVCVUdfU1BJLCAic3BpIGluaXQgLT4gIiwgY21kLCBXU1BJX0lOSVRfQ01EX0xFTik7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV9zcGlfcmVzZXRfd2FrZShzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwl3bDEyNTFfc3BpX3Jlc2V0KHdsKTsKKwl3bDEyNTFfc3BpX3dha2Uod2wpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfc3BpX3JlYWQoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsCisJCQkgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbM107CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJdTggKmJ1c3lfYnVmOworCXUzMiAqY21kOworCisJY21kID0gJndsLT5idWZmZXJfY21kOworCWJ1c3lfYnVmID0gd2wtPmJ1ZmZlcl9idXN5d29yZDsKKworCSpjbWQgPSAwOworCSpjbWQgfD0gV1NQSV9DTURfUkVBRDsKKwkqY21kIHw9IChsZW4gPDwgV1NQSV9DTURfQllURV9MRU5HVEhfT0ZGU0VUKSAmIFdTUElfQ01EX0JZVEVfTEVOR1RIOworCSpjbWQgfD0gYWRkciAmIFdTUElfQ01EX0JZVEVfQUREUjsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOworCisJdFswXS50eF9idWYgPSBjbWQ7CisJdFswXS5sZW4gPSA0OworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CisKKwkvKiBCdXN5IGFuZCBub24gYnVzeSB3b3JkcyByZWFkICovCisJdFsxXS5yeF9idWYgPSBidXN5X2J1ZjsKKwl0WzFdLmxlbiA9IFdMMTI1MV9CVVNZX1dPUkRfTEVOOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7CisKKwl0WzJdLnJ4X2J1ZiA9IGJ1ZjsKKwl0WzJdLmxlbiA9IGxlbjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsyXSwgJm0pOworCisJc3BpX3N5bmMod2xfdG9fc3BpKHdsKSwgJm0pOworCisJLyogRklYTUU6IGNoZWNrIGJ1c3kgd29yZHMgKi8KKworCXdsMTI1MV9kdW1wKERFQlVHX1NQSSwgInNwaV9yZWFkIGNtZCAtPiAiLCBjbWQsIHNpemVvZigqY21kKSk7CisJd2wxMjUxX2R1bXAoREVCVUdfU1BJLCAic3BpX3JlYWQgYnVmIDwtICIsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX3NwaV93cml0ZShzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJCSAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbMl07CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJdTMyICpjbWQ7CisKKwljbWQgPSAmd2wtPmJ1ZmZlcl9jbWQ7CisKKwkqY21kID0gMDsKKwkqY21kIHw9IFdTUElfQ01EX1dSSVRFOworCSpjbWQgfD0gKGxlbiA8PCBXU1BJX0NNRF9CWVRFX0xFTkdUSF9PRkZTRVQpICYgV1NQSV9DTURfQllURV9MRU5HVEg7CisJKmNtZCB8PSBhZGRyICYgV1NQSV9DTURfQllURV9BRERSOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7CisKKwl0WzBdLnR4X2J1ZiA9IGNtZDsKKwl0WzBdLmxlbiA9IHNpemVvZigqY21kKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOworCisJdFsxXS50eF9idWYgPSBidWY7CisJdFsxXS5sZW4gPSBsZW47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKKworCXNwaV9zeW5jKHdsX3RvX3NwaSh3bCksICZtKTsKKworCXdsMTI1MV9kdW1wKERFQlVHX1NQSSwgInNwaV93cml0ZSBjbWQgLT4gIiwgY21kLCBzaXplb2YoKmNtZCkpOworCXdsMTI1MV9kdW1wKERFQlVHX1NQSSwgInNwaV93cml0ZSBidWYgLT4gIiwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfc3BpX2VuYWJsZV9pcnEoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJcmV0dXJuIGVuYWJsZV9pcnEod2wtPmlycSk7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV9zcGlfZGlzYWJsZV9pcnEoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJcmV0dXJuIGRpc2FibGVfaXJxKHdsLT5pcnEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHdsMTI1MV9pZl9vcGVyYXRpb25zIHdsMTI1MV9zcGlfb3BzID0geworCS5yZWFkID0gd2wxMjUxX3NwaV9yZWFkLAorCS53cml0ZSA9IHdsMTI1MV9zcGlfd3JpdGUsCisJLnJlc2V0ID0gd2wxMjUxX3NwaV9yZXNldF93YWtlLAorCS5lbmFibGVfaXJxID0gd2wxMjUxX3NwaV9lbmFibGVfaXJxLAorCS5kaXNhYmxlX2lycSA9IHdsMTI1MV9zcGlfZGlzYWJsZV9pcnEsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bDEyNTFfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3Qgd2wxMjUxICp3bDsKKwlpbnQgcmV0OworCisJcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJd2wxMjUxX2Vycm9yKCJubyBwbGF0Zm9ybSBkYXRhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWh3ID0gd2wxMjUxX2FsbG9jX2h3KCk7CisJaWYgKElTX0VSUihodykpCisJCXJldHVybiBQVFJfRVJSKGh3KTsKKworCXdsID0gaHctPnByaXY7CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnNwaS0+ZGV2KTsKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCB3bCk7CisJd2wtPmlmX3ByaXYgPSBzcGk7CisJd2wtPmlmX29wcyA9ICZ3bDEyNTFfc3BpX29wczsKKworCS8qIFRoaXMgaXMgdGhlIG9ubHkgU1BJIHZhbHVlIHRoYXQgd2UgbmVlZCB0byBzZXQgaGVyZSwgdGhlIHJlc3QKKwkgKiBjb21lcyBmcm9tIHRoZSBib2FyZC1wZXJpcGhlcmFscyBmaWxlICovCisJc3BpLT5iaXRzX3Blcl93b3JkID0gMzI7CisKKwlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoInNwaV9zZXR1cCBmYWlsZWQiKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwl3bC0+c2V0X3Bvd2VyID0gcGRhdGEtPnNldF9wb3dlcjsKKwlpZiAoIXdsLT5zZXRfcG93ZXIpIHsKKwkJd2wxMjUxX2Vycm9yKCJzZXQgcG93ZXIgZnVuY3Rpb24gbWlzc2luZyBpbiBwbGF0Zm9ybSBkYXRhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXdsLT5pcnEgPSBzcGktPmlycTsKKwlpZiAod2wtPmlycSA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJpcnEgbWlzc2luZyBpbiBwbGF0Zm9ybSBkYXRhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKHdsLT5pcnEsIHdsMTI1MV9pcnEsIDAsIERSSVZFUl9OQU1FLCB3bCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJyZXF1ZXN0X2lycSgpIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXNldF9pcnFfdHlwZSh3bC0+aXJxLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7CisKKwlkaXNhYmxlX2lycSh3bC0+aXJxKTsKKworCXJldCA9IHdsMTI1MV9pbml0X2llZWU4MDIxMSh3bCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfaXJxOworCisJcmV0dXJuIDA7CisKKyBvdXRfaXJxOgorCWZyZWVfaXJxKHdsLT5pcnEsIHdsKTsKKworIG91dF9mcmVlOgorCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHdsMTI1MV9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHdsMTI1MSAqd2wgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCWZyZWVfaXJxKHdsLT5pcnEsIHdsKTsKKwl3bDEyNTFfZnJlZV9odyh3bCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdsMTI1MV9zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJ3bDEyeHgiLAorCQkuYnVzCQk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCisJLnByb2JlCQk9IHdsMTI1MV9zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bDEyNTFfc3BpX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bDEyNTFfc3BpX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd2wxMjUxX3NwaV9kcml2ZXIpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiZmFpbGVkIHRvIHJlZ2lzdGVyIHNwaSBkcml2ZXI6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdsMTI1MV9zcGlfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmd2wxMjUxX3NwaV9kcml2ZXIpOworCisJd2wxMjUxX25vdGljZSgidW5sb2FkZWQiKTsKK30KKworbW9kdWxlX2luaXQod2wxMjUxX3NwaV9pbml0KTsKK21vZHVsZV9leGl0KHdsMTI1MV9zcGlfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9zcGkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUyNzNhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfc3BpLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI1MQorICoKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fV0wxMjUxX1NQSV9IX18KKyNkZWZpbmUgX19XTDEyNTFfU1BJX0hfXworCisjaW5jbHVkZSAid2wxMjUxX2NtZC5oIgorI2luY2x1ZGUgIndsMTI1MV9hY3guaCIKKyNpbmNsdWRlICJ3bDEyNTFfcmVnLmgiCisKKyNkZWZpbmUgV1NQSV9DTURfUkVBRCAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBXU1BJX0NNRF9XUklURSAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFdTUElfQ01EX0ZJWEVEICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgV1NQSV9DTURfQllURV9MRU5HVEggICAgICAgICAgMHgxRkZFMDAwMAorI2RlZmluZSBXU1BJX0NNRF9CWVRFX0xFTkdUSF9PRkZTRVQgICAxNworI2RlZmluZSBXU1BJX0NNRF9CWVRFX0FERFIgICAgICAgICAgICAweDAwMDFGRkZGCisKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9DUkNfTEVOICAgICAgIDUKKworI2RlZmluZSBXU1BJX0lOSVRfQ01EX1NUQVJUICAgICAgICAgMHgwMAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX1RYICAgICAgICAgICAgMHg0MAorLyogdGhlIGV4dHJhIGJ5cGFzcyBiaXQgaXMgc2FtcGxlZCBieSB0aGUgVE5FVCBhcyAnMScgKi8KKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9CWVBBU1NfQklUICAgIDB4ODAKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9GSVhFREJVU1lfTEVOIDB4MDcKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9FTl9GSVhFREJVU1kgIDB4ODAKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9ESVNfRklYRURCVVNZIDB4MDAKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9JT0QgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9JUCAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9DUyAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9XUyAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9XU1BJICAgICAgICAgIDB4MDEKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9FTkQgICAgICAgICAgIDB4MDEKKworI2RlZmluZSBXU1BJX0lOSVRfQ01EX0xFTiAgICAgICAgICAgOAorCisjZGVmaW5lIEhXX0FDQ0VTU19XU1BJX0ZJWEVEX0JVU1lfTEVOIFwKKwkJKChXTDEyNTFfQlVTWV9XT1JEX0xFTiAtIDQpIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIEhXX0FDQ0VTU19XU1BJX0lOSVRfQ01EX01BU0sgIDAKKworI2VuZGlmIC8qIF9fV0wxMjUxX1NQSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODU5NzA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5jCkBAIC0wLDAgKzEsNTU5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgIndsMTI1MS5oIgorI2luY2x1ZGUgIndsMTI1MV9yZWcuaCIKKyNpbmNsdWRlICJ3bDEyNTFfdHguaCIKKyNpbmNsdWRlICJ3bDEyNTFfcHMuaCIKKyNpbmNsdWRlICJ3bDEyNTFfaW8uaCIKKworc3RhdGljIGJvb2wgd2wxMjUxX3R4X2RvdWJsZV9idWZmZXJfYnVzeShzdHJ1Y3Qgd2wxMjUxICp3bCwgdTMyIGRhdGFfb3V0X2NvdW50KQoreworCWludCB1c2VkLCBkYXRhX2luX2NvdW50OworCisJZGF0YV9pbl9jb3VudCA9IHdsLT5kYXRhX2luX2NvdW50OworCisJaWYgKGRhdGFfaW5fY291bnQgPCBkYXRhX291dF9jb3VudCkKKwkJLyogZGF0YV9pbl9jb3VudCBoYXMgd3JhcHBlZCAqLworCQlkYXRhX2luX2NvdW50ICs9IFRYX1NUQVRVU19EQVRBX09VVF9DT1VOVF9NQVNLICsgMTsKKworCXVzZWQgPSBkYXRhX2luX2NvdW50IC0gZGF0YV9vdXRfY291bnQ7CisKKwlXQVJOX09OKHVzZWQgPCAwKTsKKwlXQVJOX09OKHVzZWQgPiBEUF9UWF9QQUNLRVRfUklOR19DSFVOS19OVU0pOworCisJaWYgKHVzZWQgPj0gRFBfVFhfUEFDS0VUX1JJTkdfQ0hVTktfTlVNKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCB3bDEyNTFfdHhfcGF0aF9zdGF0dXMoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJdTMyIHN0YXR1cywgYWRkciwgZGF0YV9vdXRfY291bnQ7CisJYm9vbCBidXN5OworCisJYWRkciA9IHdsLT5kYXRhX3BhdGgtPnR4X2NvbnRyb2xfYWRkcjsKKwlzdGF0dXMgPSB3bDEyNTFfbWVtX3JlYWQzMih3bCwgYWRkcik7CisJZGF0YV9vdXRfY291bnQgPSBzdGF0dXMgJiBUWF9TVEFUVVNfREFUQV9PVVRfQ09VTlRfTUFTSzsKKwlidXN5ID0gd2wxMjUxX3R4X2RvdWJsZV9idWZmZXJfYnVzeSh3bCwgZGF0YV9vdXRfY291bnQpOworCisJaWYgKGJ1c3kpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNTFfdHhfaWQoc3RydWN0IHdsMTI1MSAqd2wsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRldfVFhfQ01QTFRfQkxPQ0tfU0laRTsgaSsrKQorCQlpZiAod2wtPnR4X2ZyYW1lc1tpXSA9PSBOVUxMKSB7CisJCQl3bC0+dHhfZnJhbWVzW2ldID0gc2tiOworCQkJcmV0dXJuIGk7CisJCX0KKworCXJldHVybiAtRUJVU1k7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV90eF9jb250cm9sKHN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MgKnR4X2hkciwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqY29udHJvbCwgdTE2IGZjKQoreworCSoodTE2ICopJnR4X2hkci0+Y29udHJvbCA9IDA7CisKKwl0eF9oZHItPmNvbnRyb2wucmF0ZV9wb2xpY3kgPSAwOworCisJLyogODAyLjExIHBhY2tldHMgKi8KKwl0eF9oZHItPmNvbnRyb2wucGFja2V0X3R5cGUgPSAwOworCisJaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spCisJCXR4X2hkci0+Y29udHJvbC5hY2tfcG9saWN5ID0gMTsKKworCXR4X2hkci0+Y29udHJvbC50eF9jb21wbGV0ZSA9IDE7CisKKwlpZiAoKGZjICYgSUVFRTgwMjExX0ZUWVBFX0RBVEEpICYmCisJICAgICgoZmMgJiBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEpIHx8CisJICAgICAoZmMgJiBJRUVFODAyMTFfU1RZUEVfUU9TX05VTExGVU5DKSkpCisJCXR4X2hkci0+Y29udHJvbC5xb3MgPSAxOworfQorCisvKiBSU04gKyBNSUMgPSA4ICsgOCA9IDE2IGJ5dGVzICh3b3JzdCBjYXNlIC0gQUVTKS4gKi8KKyNkZWZpbmUgTUFYX01TRFVfU0VDVVJJVFlfTEVOR1RIICAgICAgMTYKKyNkZWZpbmUgTUFYX01QRFVfU0VDVVJJVFlfTEVOR1RIICAgICAgMTYKKyNkZWZpbmUgV0xBTl9RT1NfSERSX0xFTiAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgTUFYX01QRFVfSEVBREVSX0FORF9TRUNVUklUWSAgKE1BWF9NUERVX1NFQ1VSSVRZX0xFTkdUSCArIFwKKwkJCQkgICAgICAgV0xBTl9RT1NfSERSX0xFTikKKyNkZWZpbmUgSFdfQkxPQ0tfU0laRSAgICAgICAgICAgICAgICAgMjUyCitzdGF0aWMgdm9pZCB3bDEyNTFfdHhfZnJhZ19ibG9ja19udW0oc3RydWN0IHR4X2RvdWJsZV9idWZmZXJfZGVzYyAqdHhfaGRyKQoreworCXUxNiBwYXlsb2FkX2xlbiwgZnJhZ190aHJlc2hvbGQsIG1lbV9ibG9ja3M7CisJdTE2IG51bV9tcGR1cywgbWVtX2Jsb2Nrc19wZXJfZnJhZzsKKworCWZyYWdfdGhyZXNob2xkID0gSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRDsKKwl0eF9oZHItPmZyYWdfdGhyZXNob2xkID0gY3B1X3RvX2xlMTYoZnJhZ190aHJlc2hvbGQpOworCisJcGF5bG9hZF9sZW4gPSB0eF9oZHItPmxlbmd0aCArIE1BWF9NU0RVX1NFQ1VSSVRZX0xFTkdUSDsKKworCWlmIChwYXlsb2FkX2xlbiA+IGZyYWdfdGhyZXNob2xkKSB7CisJCW1lbV9ibG9ja3NfcGVyX2ZyYWcgPQorCQkJKChmcmFnX3RocmVzaG9sZCArIE1BWF9NUERVX0hFQURFUl9BTkRfU0VDVVJJVFkpIC8KKwkJCSBIV19CTE9DS19TSVpFKSArIDE7CisJCW51bV9tcGR1cyA9IHBheWxvYWRfbGVuIC8gZnJhZ190aHJlc2hvbGQ7CisJCW1lbV9ibG9ja3MgPSBudW1fbXBkdXMgKiBtZW1fYmxvY2tzX3Blcl9mcmFnOworCQlwYXlsb2FkX2xlbiAtPSBudW1fbXBkdXMgKiBmcmFnX3RocmVzaG9sZDsKKwkJbnVtX21wZHVzKys7CisKKwl9IGVsc2UgeworCQltZW1fYmxvY2tzX3Blcl9mcmFnID0gMDsKKwkJbWVtX2Jsb2NrcyA9IDA7CisJCW51bV9tcGR1cyA9IDE7CisJfQorCisJbWVtX2Jsb2NrcyArPSAocGF5bG9hZF9sZW4gLyBIV19CTE9DS19TSVpFKSArIDE7CisKKwlpZiAobnVtX21wZHVzID4gMSkKKwkJbWVtX2Jsb2NrcyArPSBtaW4obnVtX21wZHVzLCBtZW1fYmxvY2tzX3Blcl9mcmFnKTsKKworCXR4X2hkci0+bnVtX21lbV9ibG9ja3MgPSBtZW1fYmxvY2tzOworfQorCitzdGF0aWMgaW50IHdsMTI1MV90eF9maWxsX2hkcihzdHJ1Y3Qgd2wxMjUxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqY29udHJvbCkKK3sKKwlzdHJ1Y3QgdHhfZG91YmxlX2J1ZmZlcl9kZXNjICp0eF9oZHI7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOworCWludCBpZDsKKwl1MTYgZmM7CisKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZCA9IHdsMTI1MV90eF9pZCh3bCwgc2tiKTsKKwlpZiAoaWQgPCAwKQorCQlyZXR1cm4gaWQ7CisKKwlmYyA9ICoodTE2ICopc2tiLT5kYXRhOworCXR4X2hkciA9IChzdHJ1Y3QgdHhfZG91YmxlX2J1ZmZlcl9kZXNjICopIHNrYl9wdXNoKHNrYiwKKwkJCQkJCQkgICBzaXplb2YoKnR4X2hkcikpOworCisJdHhfaGRyLT5sZW5ndGggPSBjcHVfdG9fbGUxNihza2ItPmxlbiAtIHNpemVvZigqdHhfaGRyKSk7CisJcmF0ZSA9IGllZWU4MDIxMV9nZXRfdHhfcmF0ZSh3bC0+aHcsIGNvbnRyb2wpOworCXR4X2hkci0+cmF0ZSA9IGNwdV90b19sZTE2KHJhdGUtPmh3X3ZhbHVlKTsKKwl0eF9oZHItPmV4cGlyeV90aW1lID0gY3B1X3RvX2xlMzIoMSA8PCAxNik7CisJdHhfaGRyLT5pZCA9IGlkOworCisJLyogRklYTUU6IGhvdyB0byBnZXQgdGhlIGNvcnJlY3QgcXVldWUgaWQ/ICovCisJdHhfaGRyLT54bWl0X3F1ZXVlID0gMDsKKworCXdsMTI1MV90eF9jb250cm9sKHR4X2hkciwgY29udHJvbCwgZmMpOworCXdsMTI1MV90eF9mcmFnX2Jsb2NrX251bSh0eF9oZHIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFdlIGNvcHkgdGhlIHBhY2tldCB0byB0aGUgdGFyZ2V0ICovCitzdGF0aWMgaW50IHdsMTI1MV90eF9zZW5kX3BhY2tldChzdHJ1Y3Qgd2wxMjUxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpjb250cm9sKQoreworCXN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MgKnR4X2hkcjsKKwlpbnQgbGVuOworCXUzMiBhZGRyOworCisJaWYgKCFza2IpCisJCXJldHVybiAtRUlOVkFMOworCisJdHhfaGRyID0gKHN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MgKikgc2tiLT5kYXRhOworCisJaWYgKGNvbnRyb2wtPmNvbnRyb2wuaHdfa2V5ICYmCisJICAgIGNvbnRyb2wtPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1RLSVApIHsKKwkJaW50IGhkcmxlbjsKKwkJdTE2IGZjOworCQl1OCAqcG9zOworCisJCWZjID0gKih1MTYgKikoc2tiLT5kYXRhICsgc2l6ZW9mKCp0eF9oZHIpKTsKKwkJdHhfaGRyLT5sZW5ndGggKz0gV0wxMjUxX1RLSVBfSVZfU1BBQ0U7CisKKwkJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihmYyk7CisKKwkJcG9zID0gc2tiX3B1c2goc2tiLCBXTDEyNTFfVEtJUF9JVl9TUEFDRSk7CisJCW1lbW1vdmUocG9zLCBwb3MgKyBXTDEyNTFfVEtJUF9JVl9TUEFDRSwKKwkJCXNpemVvZigqdHhfaGRyKSArIGhkcmxlbik7CisJfQorCisJLyogUmV2aXNpdC4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGdldHRpbmcgbm9uLWFsaWduZWQgcGFja2V0cy4KKwkgICBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCBFQVBPTCBwYWNrZXRzIGZyb20gdGhlIHVzZXIgc3BhY2UuCisJICAgT3VyIERNQSByZXF1aXJlcyBwYWNrZXRzIHRvIGJlIGFsaWduZWQgb24gYSA0LWJ5dGUgYm91bmRhcnkuCisJKi8KKwlpZiAodW5saWtlbHkoKGxvbmcpc2tiLT5kYXRhICYgMHgwMykpIHsKKwkJaW50IG9mZnNldCA9ICg0IC0gKGxvbmcpc2tiLT5kYXRhKSAmIDB4MDM7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19UWCwgInNrYiBvZmZzZXQgJWQiLCBvZmZzZXQpOworCisJCS8qIGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgc2tiIGNhbiBiZSB1c2VkICovCisJCWlmICghc2tiX2Nsb25lZChza2IpICYmIChza2JfdGFpbHJvb20oc2tiKSA+PSBvZmZzZXQpKSB7CisJCQl1bnNpZ25lZCBjaGFyICpzcmMgPSBza2ItPmRhdGE7CisKKwkJCS8qIGFsaWduIHRoZSBidWZmZXIgb24gYSA0LWJ5dGUgYm91bmRhcnkgKi8KKwkJCXNrYl9yZXNlcnZlKHNrYiwgb2Zmc2V0KTsKKwkJCW1lbW1vdmUoc2tiLT5kYXRhLCBzcmMsIHNrYi0+bGVuKTsKKwkJfSBlbHNlIHsKKwkJCXdsMTI1MV9pbmZvKCJObyBoYW5kbGVyLCBmaXhtZSEiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogT3VyIHNrYi0+ZGF0YSBhdCB0aGlzIHBvaW50IGluY2x1ZGVzIHRoZSBIVyBoZWFkZXIgKi8KKwlsZW4gPSBXTDEyNTFfVFhfQUxJR04oc2tiLT5sZW4pOworCisJaWYgKHdsLT5kYXRhX2luX2NvdW50ICYgMHgxKQorCQlhZGRyID0gd2wtPmRhdGFfcGF0aC0+dHhfcGFja2V0X3JpbmdfYWRkciArCisJCQl3bC0+ZGF0YV9wYXRoLT50eF9wYWNrZXRfcmluZ19jaHVua19zaXplOworCWVsc2UKKwkJYWRkciA9IHdsLT5kYXRhX3BhdGgtPnR4X3BhY2tldF9yaW5nX2FkZHI7CisKKwl3bDEyNTFfbWVtX3dyaXRlKHdsLCBhZGRyLCBza2ItPmRhdGEsIGxlbik7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfVFgsICJ0eCBpZCAldSBza2IgMHglcCBwYXlsb2FkICV1IHJhdGUgMHgleCIsCisJCSAgICAgdHhfaGRyLT5pZCwgc2tiLCB0eF9oZHItPmxlbmd0aCwgdHhfaGRyLT5yYXRlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfdHhfdHJpZ2dlcihzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwl1MzIgZGF0YSwgYWRkcjsKKworCWlmICh3bC0+ZGF0YV9pbl9jb3VudCAmIDB4MSkgeworCQlhZGRyID0gQUNYX1JFR19JTlRFUlJVUFRfVFJJR19IOworCQlkYXRhID0gSU5UUl9UUklHX1RYX1BST0MxOworCX0gZWxzZSB7CisJCWFkZHIgPSBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHOworCQlkYXRhID0gSU5UUl9UUklHX1RYX1BST0MwOworCX0KKworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgYWRkciwgZGF0YSk7CisKKwkvKiBCdW1waW5nIGRhdGEgaW4gKi8KKwl3bC0+ZGF0YV9pbl9jb3VudCA9ICh3bC0+ZGF0YV9pbl9jb3VudCArIDEpICYKKwkJVFhfU1RBVFVTX0RBVEFfT1VUX0NPVU5UX01BU0s7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2wtPm11dGV4ICovCitzdGF0aWMgaW50IHdsMTI1MV90eF9mcmFtZShzdHJ1Y3Qgd2wxMjUxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJaW50IHJldCA9IDA7CisJdTggaWR4OworCisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkgeworCQlpZHggPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeDsKKwkJaWYgKHVubGlrZWx5KHdsLT5kZWZhdWx0X2tleSAhPSBpZHgpKSB7CisJCQlyZXQgPSB3bDEyNTFfYWN4X2RlZmF1bHRfa2V5KHdsLCBpZHgpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldCA9IHdsMTI1MV90eF9wYXRoX3N0YXR1cyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNTFfdHhfZmlsbF9oZHIod2wsIHNrYiwgaW5mbyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNTFfdHhfc2VuZF9wYWNrZXQod2wsIHNrYiwgaW5mbyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwl3bDEyNTFfdHhfdHJpZ2dlcih3bCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHdsMTI1MV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2wxMjUxLCB0eF93b3JrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWJvb2wgd29rZW5fdXAgPSBmYWxzZTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMjUxX1NUQVRFX09GRikpCisJCWdvdG8gb3V0OworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2wtPnR4X3F1ZXVlKSkpIHsKKwkJaWYgKCF3b2tlbl91cCkgeworCQkJcmV0ID0gd2wxMjUxX3BzX2VscF93YWtldXAod2wpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXQ7CisJCQl3b2tlbl91cCA9IHRydWU7CisJCX0KKworCQlyZXQgPSB3bDEyNTFfdHhfZnJhbWUod2wsIHNrYik7CisJCWlmIChyZXQgPT0gLUVCVVNZKSB7CisJCQkvKiBmaXJtd2FyZSBidWZmZXIgaXMgZnVsbCwgc3RvcCBxdWV1ZXMgKi8KKwkJCXdsMTI1MV9kZWJ1ZyhERUJVR19UWCwgInR4X3dvcms6IGZ3IGJ1ZmZlciBmdWxsLCAiCisJCQkJICAgICAic3RvcCBxdWV1ZXMiKTsKKwkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyh3bC0+aHcpOworCQkJd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSB0cnVlOworCQkJc2tiX3F1ZXVlX2hlYWQoJndsLT50eF9xdWV1ZSwgc2tiKTsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgaWYgKHJldCA8IDApIHsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCitvdXQ6CisJaWYgKHdva2VuX3VwKQorCQl3bDEyNTFfcHNfZWxwX3NsZWVwKHdsKTsKKworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKndsMTI1MV90eF9wYXJzZV9zdGF0dXModTggc3RhdHVzKQoreworCS8qIDggYml0IHN0YXR1cyBmaWVsZCwgb25lIGNoYXJhY3RlciBwZXIgYml0IHBsdXMgbnVsbCAqLworCXN0YXRpYyBjaGFyIGJ1Zls5XTsKKwlpbnQgaSA9IDA7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisKKwlpZiAoc3RhdHVzICYgVFhfRE1BX0VSUk9SKQorCQlidWZbaSsrXSA9ICdtJzsKKwlpZiAoc3RhdHVzICYgVFhfRElTQUJMRUQpCisJCWJ1ZltpKytdID0gJ2QnOworCWlmIChzdGF0dXMgJiBUWF9SRVRSWV9FWENFRURFRCkKKwkJYnVmW2krK10gPSAncic7CisJaWYgKHN0YXR1cyAmIFRYX1RJTUVPVVQpCisJCWJ1ZltpKytdID0gJ3QnOworCWlmIChzdGF0dXMgJiBUWF9LRVlfTk9UX0ZPVU5EKQorCQlidWZbaSsrXSA9ICdrJzsKKwlpZiAoc3RhdHVzICYgVFhfRU5DUllQVF9GQUlMKQorCQlidWZbaSsrXSA9ICdlJzsKKwlpZiAoc3RhdHVzICYgVFhfVU5BVkFJTEFCTEVfUFJJT1JJVFkpCisJCWJ1ZltpKytdID0gJ3AnOworCisJLyogYml0IDAgaXMgdW51c2VkIGFwcGFyZW50bHkgKi8KKworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV90eF9wYWNrZXRfY2Ioc3RydWN0IHdsMTI1MSAqd2wsCisJCQkJc3RydWN0IHR4X3Jlc3VsdCAqcmVzdWx0KQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBoZHJsZW4sIHJldDsKKwl1OCAqZnJhbWU7CisKKwlza2IgPSB3bC0+dHhfZnJhbWVzW3Jlc3VsdC0+aWRdOworCWlmIChza2IgPT0gTlVMTCkgeworCQl3bDEyNTFfZXJyb3IoIlNLQiBmb3IgcGFja2V0ICVkIGlzIE5VTEwiLCByZXN1bHQtPmlkKTsKKwkJcmV0dXJuOworCX0KKworCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSAmJgorCSAgICAocmVzdWx0LT5zdGF0dXMgPT0gVFhfU1VDQ0VTUykpCisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKworCWluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IHJlc3VsdC0+YWNrX2ZhaWx1cmVzICsgMTsKKwl3bC0+c3RhdHMucmV0cnlfY291bnQgKz0gcmVzdWx0LT5hY2tfZmFpbHVyZXM7CisKKwkvKgorCSAqIFdlIGhhdmUgdG8gcmVtb3ZlIG91ciBwcml2YXRlIFRYIGhlYWRlciBiZWZvcmUgcHVzaGluZworCSAqIHRoZSBza2IgYmFjayB0byBtYWM4MDIxMS4KKwkgKi8KKwlmcmFtZSA9IHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MpKTsKKwlpZiAoaW5mby0+Y29udHJvbC5od19rZXkgJiYKKwkgICAgaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfVEtJUCkgeworCQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOworCQltZW1tb3ZlKGZyYW1lICsgV0wxMjUxX1RLSVBfSVZfU1BBQ0UsIGZyYW1lLCBoZHJsZW4pOworCQlza2JfcHVsbChza2IsIFdMMTI1MV9US0lQX0lWX1NQQUNFKTsKKwl9CisKKwl3bDEyNTFfZGVidWcoREVCVUdfVFgsICJ0eCBzdGF0dXMgaWQgJXUgc2tiIDB4JXAgZmFpbHVyZXMgJXUgcmF0ZSAweCV4IgorCQkgICAgICIgc3RhdHVzIDB4JXggKCVzKSIsCisJCSAgICAgcmVzdWx0LT5pZCwgc2tiLCByZXN1bHQtPmFja19mYWlsdXJlcywgcmVzdWx0LT5yYXRlLAorCQkgICAgIHJlc3VsdC0+c3RhdHVzLCB3bDEyNTFfdHhfcGFyc2Vfc3RhdHVzKHJlc3VsdC0+c3RhdHVzKSk7CisKKworCWllZWU4MDIxMV90eF9zdGF0dXMod2wtPmh3LCBza2IpOworCisJd2wtPnR4X2ZyYW1lc1tyZXN1bHQtPmlkXSA9IE5VTEw7CisKKwlpZiAod2wtPnR4X3F1ZXVlX3N0b3BwZWQpIHsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1RYLCAiY2I6IHF1ZXVlIHdhcyBzdG9wcGVkIik7CisKKwkJc2tiID0gc2tiX2RlcXVldWUoJndsLT50eF9xdWV1ZSk7CisKKwkJLyogVGhlIHNrYiBjYW4gYmUgTlVMTCBiZWNhdXNlIHR4X3dvcmsgbWlnaHQgaGF2ZSBiZWVuCisJCSAgIHNjaGVkdWxlZCBiZWZvcmUgdGhlIHF1ZXVlIHdhcyBzdG9wcGVkIG1ha2luZyB0aGUKKwkJICAgcXVldWUgZW1wdHkgKi8KKworCQlpZiAoc2tiKSB7CisJCQlyZXQgPSB3bDEyNTFfdHhfZnJhbWUod2wsIHNrYik7CisJCQlpZiAocmV0ID09IC1FQlVTWSkgeworCQkJCS8qIGZpcm13YXJlIGJ1ZmZlciBpcyBzdGlsbCBmdWxsICovCisJCQkJd2wxMjUxX2RlYnVnKERFQlVHX1RYLCAiY2I6IGZ3IGJ1ZmZlciAiCisJCQkJCSAgICAgInN0aWxsIGZ1bGwiKTsKKwkJCQlza2JfcXVldWVfaGVhZCgmd2wtPnR4X3F1ZXVlLCBza2IpOworCQkJCXJldHVybjsKKwkJCX0gZWxzZSBpZiAocmV0IDwgMCkgeworCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCQl3bDEyNTFfZGVidWcoREVCVUdfVFgsICJjYjogd2FraW5nIHF1ZXVlcyIpOworCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMod2wtPmh3KTsKKwkJd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSBmYWxzZTsKKwl9Cit9CisKKy8qIENhbGxlZCB1cG9uIHJlY2VwdGlvbiBvZiBhIFRYIGNvbXBsZXRlIGludGVycnVwdCAqLwordm9pZCB3bDEyNTFfdHhfY29tcGxldGUoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IGksIHJlc3VsdF9pbmRleCwgbnVtX2NvbXBsZXRlID0gMDsKKwlzdHJ1Y3QgdHhfcmVzdWx0IHJlc3VsdFtGV19UWF9DTVBMVF9CTE9DS19TSVpFXSwgKnJlc3VsdF9wdHI7CisKKwlpZiAodW5saWtlbHkod2wtPnN0YXRlICE9IFdMMTI1MV9TVEFURV9PTikpCisJCXJldHVybjsKKworCS8qIEZpcnN0IHdlIHJlYWQgdGhlIHJlc3VsdCAqLworCXdsMTI1MV9tZW1fcmVhZCh3bCwgd2wtPmRhdGFfcGF0aC0+dHhfY29tcGxldGVfYWRkciwKKwkJCSAgICByZXN1bHQsIHNpemVvZihyZXN1bHQpKTsKKworCXJlc3VsdF9pbmRleCA9IHdsLT5uZXh0X3R4X2NvbXBsZXRlOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVzdWx0KTsgaSsrKSB7CisJCXJlc3VsdF9wdHIgPSAmcmVzdWx0W3Jlc3VsdF9pbmRleF07CisKKwkJaWYgKHJlc3VsdF9wdHItPmRvbmVfMSA9PSAxICYmCisJCSAgICByZXN1bHRfcHRyLT5kb25lXzIgPT0gMSkgeworCQkJd2wxMjUxX3R4X3BhY2tldF9jYih3bCwgcmVzdWx0X3B0cik7CisKKwkJCXJlc3VsdF9wdHItPmRvbmVfMSA9IDA7CisJCQlyZXN1bHRfcHRyLT5kb25lXzIgPSAwOworCisJCQlyZXN1bHRfaW5kZXggPSAocmVzdWx0X2luZGV4ICsgMSkgJgorCQkJCShGV19UWF9DTVBMVF9CTE9DS19TSVpFIC0gMSk7CisJCQludW1fY29tcGxldGUrKzsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogRXZlcnkgY29tcGxldGVkIGZyYW1lIG5lZWRzIHRvIGJlIGFja25vd2xlZGdlZCAqLworCWlmIChudW1fY29tcGxldGUpIHsKKwkJLyoKKwkJICogSWYgd2UndmUgd3JhcHBlZCwgd2UgaGF2ZSB0byBjbGVhcgorCQkgKiB0aGUgcmVzdWx0cyBpbiAyIHN0ZXBzLgorCQkgKi8KKwkJaWYgKHJlc3VsdF9pbmRleCA+IHdsLT5uZXh0X3R4X2NvbXBsZXRlKSB7CisJCQkvKiBPbmx5IDEgd3JpdGUgaXMgbmVlZGVkICovCisJCQl3bDEyNTFfbWVtX3dyaXRlKHdsLAorCQkJCQkgd2wtPmRhdGFfcGF0aC0+dHhfY29tcGxldGVfYWRkciArCisJCQkJCSAod2wtPm5leHRfdHhfY29tcGxldGUgKgorCQkJCQkgIHNpemVvZihzdHJ1Y3QgdHhfcmVzdWx0KSksCisJCQkJCSAmcmVzdWx0W3dsLT5uZXh0X3R4X2NvbXBsZXRlXSwKKwkJCQkJIG51bV9jb21wbGV0ZSAqCisJCQkJCSBzaXplb2Yoc3RydWN0IHR4X3Jlc3VsdCkpOworCisKKwkJfSBlbHNlIGlmIChyZXN1bHRfaW5kZXggPCB3bC0+bmV4dF90eF9jb21wbGV0ZSkgeworCQkJLyogMiB3cml0ZXMgYXJlIG5lZWRlZCAqLworCQkJd2wxMjUxX21lbV93cml0ZSh3bCwKKwkJCQkJIHdsLT5kYXRhX3BhdGgtPnR4X2NvbXBsZXRlX2FkZHIgKworCQkJCQkgKHdsLT5uZXh0X3R4X2NvbXBsZXRlICoKKwkJCQkJICBzaXplb2Yoc3RydWN0IHR4X3Jlc3VsdCkpLAorCQkJCQkgJnJlc3VsdFt3bC0+bmV4dF90eF9jb21wbGV0ZV0sCisJCQkJCSAoRldfVFhfQ01QTFRfQkxPQ0tfU0laRSAtCisJCQkJCSAgd2wtPm5leHRfdHhfY29tcGxldGUpICoKKwkJCQkJIHNpemVvZihzdHJ1Y3QgdHhfcmVzdWx0KSk7CisKKwkJCXdsMTI1MV9tZW1fd3JpdGUod2wsCisJCQkJCSB3bC0+ZGF0YV9wYXRoLT50eF9jb21wbGV0ZV9hZGRyLAorCQkJCQkgcmVzdWx0LAorCQkJCQkgKG51bV9jb21wbGV0ZSAtCisJCQkJCSAgRldfVFhfQ01QTFRfQkxPQ0tfU0laRSArCisJCQkJCSAgd2wtPm5leHRfdHhfY29tcGxldGUpICoKKwkJCQkJIHNpemVvZihzdHJ1Y3QgdHhfcmVzdWx0KSk7CisKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGhhdmUgdG8gd3JpdGUgdGhlIHdob2xlIGFycmF5ICovCisJCQl3bDEyNTFfbWVtX3dyaXRlKHdsLAorCQkJCQkgd2wtPmRhdGFfcGF0aC0+dHhfY29tcGxldGVfYWRkciwKKwkJCQkJIHJlc3VsdCwKKwkJCQkJIEZXX1RYX0NNUExUX0JMT0NLX1NJWkUgKgorCQkJCQkgc2l6ZW9mKHN0cnVjdCB0eF9yZXN1bHQpKTsKKwkJfQorCisJfQorCisJd2wtPm5leHRfdHhfY29tcGxldGUgPSByZXN1bHRfaW5kZXg7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2wtPm11dGV4ICovCit2b2lkIHdsMTI1MV90eF9mbHVzaChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKworCS8qIFRYIGZhaWx1cmUgKi8KKy8qIAljb250cm9sLT5mbGFncyA9IDA7IEZJWE1FICovCisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bC0+dHhfcXVldWUpKSkgeworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJCXdsMTI1MV9kZWJ1ZyhERUJVR19UWCwgImZsdXNoaW5nIHNrYiAweCVwIiwgc2tiKTsKKworCQlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUykpCisJCQkJY29udGludWU7CisKKwkJaWVlZTgwMjExX3R4X3N0YXR1cyh3bC0+aHcsIHNrYik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEZXX1RYX0NNUExUX0JMT0NLX1NJWkU7IGkrKykKKwkJaWYgKHdsLT50eF9mcmFtZXNbaV0gIT0gTlVMTCkgeworCQkJc2tiID0gd2wtPnR4X2ZyYW1lc1tpXTsKKwkJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwkJCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTKSkKKwkJCQljb250aW51ZTsKKworCQkJaWVlZTgwMjExX3R4X3N0YXR1cyh3bC0+aHcsIHNrYik7CisJCQl3bC0+dHhfZnJhbWVzW2ldID0gTlVMTDsKKwkJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMWMxNjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmgKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1dMMTI1MV9UWF9IX18KKyNkZWZpbmUgX19XTDEyNTFfVFhfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworLyoKKyAqCisgKiBUWCBQQVRICisgKgorICogVGhlIFR4IHBhdGggdXNlcyBhIGRvdWJsZSBidWZmZXIgYW5kIGEgdHhfY29udHJvbCBzdHJ1Y3R1cmUsIGVhY2ggbG9jYXRlZAorICogYXQgYSBmaXhlZCBhZGRyZXNzIGluIHRoZSBkZXZpY2UncyBtZW1vcnkuIE9uIHN0YXJ0dXAsIHRoZSBob3N0IHJldHJpZXZlcworICogdGhlIHBvaW50ZXJzIHRvIHRoZXNlIGFkZHJlc3Nlcy4gQSBkb3VibGUgYnVmZmVyIGFsbG93cyBmb3IgY29udGludW91cyBkYXRhCisgKiBmbG93IHRvd2FyZHMgdGhlIGRldmljZS4gVGhlIGhvc3Qga2VlcHMgdHJhY2sgb2Ygd2hpY2ggYnVmZmVyIGlzIGF2YWlsYWJsZQorICogYW5kIGFsdGVybmF0ZXMgYmV0d2VlbiB0aGVzZSB0d28gYnVmZmVycyBvbiBhIHBlciBwYWNrZXQgYmFzaXMuCisgKgorICogVGhlIHNpemUgb2YgZWFjaCBvZiB0aGUgdHdvIGJ1ZmZlcnMgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGxvbmdlc3QKKyAqIDgwMi4zIHBhY2tldCAtIG1heGltdW0gc2l6ZSBFdGhlcm5ldCBwYWNrZXQgKyBoZWFkZXIgKyBkZXNjcmlwdG9yLgorICogVFggY29tcGxldGUgaW5kaWNhdGlvbiB3aWxsIGJlIHJlY2VpdmVkIGEtc3luY2hyb25vdXNseSBpbiBhIFRYIGRvbmUgY3ljbGljCisgKiBidWZmZXIgd2hpY2ggaXMgY29tcG9zZWQgb2YgMTYgdHhfcmVzdWx0IGRlc2NyaXB0b3JzIHN0cnVjdHVyZXMgYW5kIGlzIHVzZWQKKyAqIGluIGEgY3ljbGljIG1hbm5lci4KKyAqCisgKiBUaGUgVFggKEhPU1QpIHByb2NlZHVyZSBpcyBhcyBmb2xsb3dzOgorICogMS4gUmVhZCB0aGUgVHggcGF0aCBzdGF0dXMsIHRoYXQgd2lsbCBnaXZlIHRoZSBkYXRhX291dF9jb3VudC4KKyAqIDIuIGdvdG8gMSwgaWYgbm90IHBvc3NpYmxlLgorICogICAgaS5lLiBpZiBkYXRhX2luX2NvdW50IC0gZGF0YV9vdXRfY291bnQgPj0gSHdCdWZmZXIgc2l6ZSAoMiBmb3IgZG91YmxlCisgKiAgICBidWZmZXIpLgorICogMy4gQ29weSB0aGUgcGFja2V0IChwcmVjZWRlZCBieSBkb3VibGVfYnVmZmVyX2Rlc2MpLCBpZiBwb3NzaWJsZS4KKyAqICAgIGkuZS4gaWYgZGF0YV9pbl9jb3VudCAtIGRhdGFfb3V0X2NvdW50IDwgSHdCdWZmZXIgc2l6ZSAoMiBmb3IgZG91YmxlCisgKiAgICBidWZmZXIpLgorICogNC4gaW5jcmVtZW50IGRhdGFfaW5fY291bnQuCisgKiA1LiBJbmZvcm0gdGhlIGZpcm13YXJlIGJ5IGdlbmVyYXRpbmcgYSBmaXJtd2FyZSBpbnRlcm5hbCBpbnRlcnJ1cHQuCisgKiA2LiBGVyB3aWxsIGluY3JlbWVudCBkYXRhX291dF9jb3VudCBhZnRlciBpdCByZWFkcyB0aGUgYnVmZmVyLgorICoKKyAqIFRoZSBUWCBDb21wbGV0ZSBwcm9jZWR1cmU6CisgKiAxLiBUbyBnZXQgYSBUWCBjb21wbGV0ZSBpbmRpY2F0aW9uIHRoZSBob3N0IGVuYWJsZXMgdGhlIHR4X2NvbXBsZXRlIGZsYWcgaW4KKyAqICAgIHRoZSBUWCBkZXNjcmlwdG9yIFN0cnVjdHVyZS4KKyAqIDIuIEZvciBlYWNoIHBhY2tldCB3aXRoIGEgVHggQ29tcGxldGUgZmllbGQgc2V0LCB0aGUgZmlybXdhcmUgYWRkcyB0aGUKKyAqICAgIHRyYW5zbWl0IHJlc3VsdHMgdG8gdGhlIGN5Y2xpYyBidWZmZXIgKHR4RG9uZVJpbmcpIGFuZCBzZXRzIGJvdGggZG9uZV8xCisgKiAgICBhbmQgZG9uZV8yIHRvIDEgdG8gaW5kaWNhdGUgZHJpdmVyIG93bmVyc2hpcC4KKyAqIDMuIFRoZSBmaXJtd2FyZSBzZW5kcyBhIFR4IENvbXBsZXRlIGludGVycnVwdCB0byB0aGUgaG9zdCB0byB0cmlnZ2VyIHRoZQorICogICAgaG9zdCB0byBwcm9jZXNzIHRoZSBuZXcgZGF0YS4gTm90ZTogaW50ZXJydXB0IHdpbGwgYmUgc2VuZCBwZXIgcGFja2V0IGlmCisgKiAgICBUWCBjb21wbGV0ZSBpbmRpY2F0aW9uIHdhcyByZXF1ZXN0ZWQgaW4gdHhfY29udHJvbCBvciBwZXIgY3Jvc3NpbmcKKyAqICAgIGFnZ3JlZ2F0aW9uIHRocmVzaG9sZC4KKyAqIDQuIEFmdGVyIHJlY2VpdmluZyB0aGUgVHggQ29tcGxldGUgaW50ZXJydXB0LCB0aGUgaG9zdCByZWFkcyB0aGUKKyAqICAgIFR4RGVzY3JpcHRvckRvbmUgaW5mb3JtYXRpb24gaW4gYSBjeWNsaWMgbWFubmVyIGFuZCBjbGVhcnMgYm90aCBkb25lXzEKKyAqICAgIGFuZCBkb25lXzIgZmllbGRzLgorICoKKyAqLworCisjZGVmaW5lIFRYX0NPTVBMRVRFX1JFUVVJUkVEX0JJVAkweDgwCisjZGVmaW5lIFRYX1NUQVRVU19EQVRBX09VVF9DT1VOVF9NQVNLICAgMHhmCisKKyNkZWZpbmUgV0wxMjUxX1RYX0FMSUdOX1RPIDQKKyNkZWZpbmUgV0wxMjUxX1RYX0FMSUdOKGxlbikgKCgobGVuKSArIFdMMTI1MV9UWF9BTElHTl9UTyAtIDEpICYgXAorCQkJICAgICB+KFdMMTI1MV9UWF9BTElHTl9UTyAtIDEpKQorI2RlZmluZSBXTDEyNTFfVEtJUF9JVl9TUEFDRSA0CisKK3N0cnVjdCB0eF9jb250cm9sIHsKKwkvKiBSYXRlIFBvbGljeSAoY2xhc3MpIGluZGV4ICovCisJdW5zaWduZWQgcmF0ZV9wb2xpY3k6MzsKKworCS8qIFdoZW4gc2V0LCBubyBhY2sgcG9saWN5IGlzIGV4cGVjdGVkICovCisJdW5zaWduZWQgYWNrX3BvbGljeToxOworCisJLyoKKwkgKiBQYWNrZXQgdHlwZToKKwkgKiAwIC0+IDgwMi4xMQorCSAqIDEgLT4gODAyLjMKKwkgKiAyIC0+IElQCisJICogMyAtPiByYXcgY29kZWMKKwkgKi8KKwl1bnNpZ25lZCBwYWNrZXRfdHlwZToyOworCisJLyogSWYgc2V0LCB0aGlzIGlzIGEgUW9TLU51bGwgb3IgUW9TLURhdGEgZnJhbWUgKi8KKwl1bnNpZ25lZCBxb3M6MTsKKworCS8qCisJICogSWYgc2V0LCB0aGUgdGFyZ2V0IHRyaWdnZXJzIHRoZSB0eCBjb21wbGV0ZSBJTlQKKwkgKiB1cG9uIGZyYW1lIHNlbmRpbmcgY29tcGxldGlvbi4KKwkgKi8KKwl1bnNpZ25lZCB0eF9jb21wbGV0ZToxOworCisJLyogMiBieXRlcyBwYWRkaW5nIGJlZm9yZSBwYWNrZXQgaGVhZGVyICovCisJdW5zaWduZWQgeGZlcl9wYWQ6MTsKKworCXVuc2lnbmVkIHJlc2VydmVkOjc7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgdHhfZG91YmxlX2J1ZmZlcl9kZXNjIHsKKwkvKiBMZW5ndGggb2YgcGF5bG9hZCwgaW5jbHVkaW5nIGhlYWRlcnMuICovCisJdTE2IGxlbmd0aDsKKworCS8qCisJICogQSBiaXQgbWFzayB0aGF0IHNwZWNpZmllcyB0aGUgaW5pdGlhbCByYXRlIHRvIGJlIHVzZWQKKwkgKiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgorCSAqIDB4MDAwMSAtIDFNYml0cworCSAqIDB4MDAwMiAtIDJNYml0cworCSAqIDB4MDAwNCAtIDUuNU1iaXRzCisJICogMHgwMDA4IC0gNk1iaXRzCisJICogMHgwMDEwIC0gOU1iaXRzCisJICogMHgwMDIwIC0gMTFNYml0cworCSAqIDB4MDA0MCAtIDEyTWJpdHMKKwkgKiAweDAwODAgLSAxOE1iaXRzCisJICogMHgwMTAwIC0gMjJNYml0cworCSAqIDB4MDIwMCAtIDI0TWJpdHMKKwkgKiAweDA0MDAgLSAzNk1iaXRzCisJICogMHgwODAwIC0gNDhNYml0cworCSAqIDB4MTAwMCAtIDU0TWJpdHMKKwkgKi8KKwl1MTYgcmF0ZTsKKworCS8qIFRpbWUgaW4gdXMgdGhhdCBhIHBhY2tldCBjYW4gc3BlbmQgaW4gdGhlIHRhcmdldCAqLworCXUzMiBleHBpcnlfdGltZTsKKworCS8qIGluZGV4IG9mIHRoZSBUWCBxdWV1ZSB1c2VkIGZvciB0aGlzIHBhY2tldCAqLworCXU4IHhtaXRfcXVldWU7CisKKwkvKiBVc2VkIHRvIGlkZW50aWZ5IGEgcGFja2V0ICovCisJdTggaWQ7CisKKwlzdHJ1Y3QgdHhfY29udHJvbCBjb250cm9sOworCisJLyoKKwkgKiBUaGUgRlcgc2hvdWxkIGN1dCB0aGUgcGFja2V0IGludG8gZnJhZ21lbnRzCisJICogb2YgdGhpcyBzaXplLgorCSAqLworCXUxNiBmcmFnX3RocmVzaG9sZDsKKworCS8qIE51bWJlcnMgb2YgSFcgcXVldWUgYmxvY2tzIHRvIGJlIGFsbG9jYXRlZCAqLworCXU4IG51bV9tZW1fYmxvY2tzOworCisJdTggcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSB7CisJVFhfU1VDQ0VTUyAgICAgICAgICAgICAgPSAwLAorCVRYX0RNQV9FUlJPUiAgICAgICAgICAgID0gQklUKDcpLAorCVRYX0RJU0FCTEVEICAgICAgICAgICAgID0gQklUKDYpLAorCVRYX1JFVFJZX0VYQ0VFREVEICAgICAgID0gQklUKDUpLAorCVRYX1RJTUVPVVQgICAgICAgICAgICAgID0gQklUKDQpLAorCVRYX0tFWV9OT1RfRk9VTkQgICAgICAgID0gQklUKDMpLAorCVRYX0VOQ1JZUFRfRkFJTCAgICAgICAgID0gQklUKDIpLAorCVRYX1VOQVZBSUxBQkxFX1BSSU9SSVRZID0gQklUKDEpLAorfTsKKworc3RydWN0IHR4X3Jlc3VsdCB7CisJLyoKKwkgKiBPd25lcnNoaXAgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIGhvc3QgYW5kCisJICogdGhlIGZpcm13YXJlLiBJZiBkb25lXzEgYW5kIGRvbmVfMiBhcmUgY2xlYXJlZCwKKwkgKiBvd25lZCBieSB0aGUgRlcgKG5vIGluZm8gcmVhZHkpLgorCSAqLworCXU4IGRvbmVfMTsKKworCS8qIHNhbWUgYXMgZG91YmxlX2J1ZmZlcl9kZXNjLT5pZCAqLworCXU4IGlkOworCisJLyoKKwkgKiBUb3RhbCBhaXIgYWNjZXNzIGR1cmF0aW9uIGNvbnN1bWVkIGJ5IHRoaXMKKwkgKiBwYWNrZXQsIGluY2x1ZGluZyBhbGwgcmV0cmllcyBhbmQgb3ZlcmhlYWRzLgorCSAqLworCXUxNiBtZWRpdW1fdXNhZ2U7CisKKwkvKiBUb3RhbCBtZWRpYSBkZWxheSAoZnJvbSAxc3QgRURDQSBBSUZTIGNvdW50ZXIgdW50aWwgVFggQ29tcGxldGUpLiAqLworCXUzMiBtZWRpdW1fZGVsYXk7CisKKwkvKiBUaW1lIGJldHdlZW4gaG9zdCB4ZmVyIGFuZCB0eCBjb21wbGV0ZSAqLworCXUzMiBmd19obmFkbGluZ190aW1lOworCisJLyogVGhlIExTLWJ5dGUgb2YgdGhlIGxhc3QgVEtJUCBzZXF1ZW5jZSBudW1iZXIuICovCisJdTggbHNiX3NlcV9udW07CisKKwkvKiBSZXRyeSBjb3VudCAqLworCXU4IGFja19mYWlsdXJlczsKKworCS8qIEF0IHdoaWNoIHJhdGUgd2UgZ290IGEgQUNLICovCisJdTE2IHJhdGU7CisKKwl1MTYgcmVzZXJ2ZWQ7CisKKwkvKiBUWF8qICovCisJdTggc3RhdHVzOworCisJLyogU2VlIGRvbmVfMSAqLworCXU4IGRvbmVfMjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCit2b2lkIHdsMTI1MV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIHdsMTI1MV90eF9jb21wbGV0ZShzdHJ1Y3Qgd2wxMjUxICp3bCk7Cit2b2lkIHdsMTI1MV90eF9mbHVzaChzdHJ1Y3Qgd2wxMjUxICp3bCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ODE4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxLmgKQEAgLTAsMCArMSw0MDcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19XTDEyNzFfSF9fCisjZGVmaW5lIF9fV0wxMjcxX0hfXworCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgIndsMTI3MSIKKyNkZWZpbmUgRFJJVkVSX1BSRUZJWCBEUklWRVJfTkFNRSAiOiAiCisKK2VudW0geworCURFQlVHX05PTkUJPSAwLAorCURFQlVHX0lSUQk9IEJJVCgwKSwKKwlERUJVR19TUEkJPSBCSVQoMSksCisJREVCVUdfQk9PVAk9IEJJVCgyKSwKKwlERUJVR19NQUlMQk9YCT0gQklUKDMpLAorCURFQlVHX05FVExJTksJPSBCSVQoNCksCisJREVCVUdfRVZFTlQJPSBCSVQoNSksCisJREVCVUdfVFgJPSBCSVQoNiksCisJREVCVUdfUlgJPSBCSVQoNyksCisJREVCVUdfU0NBTgk9IEJJVCg4KSwKKwlERUJVR19DUllQVAk9IEJJVCg5KSwKKwlERUJVR19QU00JPSBCSVQoMTApLAorCURFQlVHX01BQzgwMjExCT0gQklUKDExKSwKKwlERUJVR19DTUQJPSBCSVQoMTIpLAorCURFQlVHX0FDWAk9IEJJVCgxMyksCisJREVCVUdfQUxMCT0gfjAsCit9OworCisjZGVmaW5lIERFQlVHX0xFVkVMIChERUJVR19OT05FKQorCisjZGVmaW5lIERFQlVHX0RVTVBfTElNSVQgMTAyNAorCisjZGVmaW5lIHdsMTI3MV9lcnJvcihmbXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0VSUiBEUklWRVJfUFJFRklYICJFUlJPUiAiIGZtdCAiXG4iLCAjI2FyZykKKworI2RlZmluZSB3bDEyNzFfd2FybmluZyhmbXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX1BSRUZJWCAiV0FSTklORyAiIGZtdCAiXG4iLCAjI2FyZykKKworI2RlZmluZSB3bDEyNzFfbm90aWNlKGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfUFJFRklYIGZtdCAiXG4iLCAjI2FyZykKKworI2RlZmluZSB3bDEyNzFfaW5mbyhmbXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKQorCisjZGVmaW5lIHdsMTI3MV9kZWJ1ZyhsZXZlbCwgZm10LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgd2wxMjcxX2R1bXAobGV2ZWwsIHByZWZpeCwgYnVmLCBsZW4pCVwKKwlkbyB7IFwKKwkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKKwkJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsIERSSVZFUl9QUkVGSVggcHJlZml4LCBcCisJCQkJICAgICAgIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCVwKKwkJCQkgICAgICAgYnVmLAkJCQlcCisJCQkJICAgICAgIG1pbl90KHNpemVfdCwgbGVuLCBERUJVR19EVU1QX0xJTUlUKSwgXAorCQkJCSAgICAgICAwKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgd2wxMjcxX2R1bXBfYXNjaWkobGV2ZWwsIHByZWZpeCwgYnVmLCBsZW4pCVwKKwlkbyB7IFwKKwkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKKwkJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsIERSSVZFUl9QUkVGSVggcHJlZml4LCBcCisJCQkJICAgICAgIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCVwKKwkJCQkgICAgICAgYnVmLAkJCQlcCisJCQkJICAgICAgIG1pbl90KHNpemVfdCwgbGVuLCBERUJVR19EVU1QX0xJTUlUKSwgXAorCQkJCSAgICAgICB0cnVlKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgV0wxMjcxX0RFRkFVTFRfUlhfQ09ORklHIChDRkdfVU5JX0ZJTFRFUl9FTiB8CVwKKwkJCQkgIENGR19CU1NJRF9GSUxURVJfRU4pCisKKyNkZWZpbmUgV0wxMjcxX0RFRkFVTFRfUlhfRklMVEVSIChDRkdfUlhfUkNUU19BQ0sgfCBDRkdfUlhfUFJTUF9FTiB8ICBcCisJCQkJICBDRkdfUlhfTUdNVF9FTiB8IENGR19SWF9EQVRBX0VOIHwgICBcCisJCQkJICBDRkdfUlhfQ1RMX0VOIHwgQ0ZHX1JYX0JDTl9FTiB8ICAgICBcCisJCQkJICBDRkdfUlhfQVVUSF9FTiB8IENGR19SWF9BU1NPQ19FTikKKworI2RlZmluZSBXTDEyNzFfRldfTkFNRSAid2wxMjcxLWZ3LmJpbiIKKyNkZWZpbmUgV0wxMjcxX05WU19OQU1FICJ3bDEyNzEtbnZzLmJpbiIKKworI2RlZmluZSBXTDEyNzFfQlVTWV9XT1JEX0xFTiA4CisKKyNkZWZpbmUgV0wxMjcxX0VMUF9IV19TVEFURV9BU0xFRVAgMAorI2RlZmluZSBXTDEyNzFfRUxQX0hXX1NUQVRFX0lSUSAgICAxCisKK2VudW0gd2wxMjcxX3N0YXRlIHsKKwlXTDEyNzFfU1RBVEVfT0ZGLAorCVdMMTI3MV9TVEFURV9PTiwKKwlXTDEyNzFfU1RBVEVfUExULAorfTsKKworZW51bSB3bDEyNzFfcGFydGl0aW9uX3R5cGUgeworCVBBUlRfRE9XTiwKKwlQQVJUX1dPUkssCisJUEFSVF9EUlBXLAorCisJUEFSVF9UQUJMRV9MRU4KK307CisKK3N0cnVjdCB3bDEyNzFfcGFydGl0aW9uIHsKKwl1MzIgc2l6ZTsKKwl1MzIgc3RhcnQ7Cit9OworCitzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbl9zZXQgeworCXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uIG1lbTsKKwlzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbiByZWc7Cit9OworCitzdHJ1Y3Qgd2wxMjcxOworCisvKiBGSVhNRTogSSdtIG5vdCBzdXJlIGFib3V0IHRoaXMgc3RydWN0dXJlIG5hbWUgKi8KK3N0cnVjdCB3bDEyNzFfY2hpcCB7CisJdTMyIGlkOworCWNoYXIgZndfdmVyWzIxXTsKK307CisKK3N0cnVjdCB3bDEyNzFfc3RhdHMgeworCXN0cnVjdCBhY3hfc3RhdGlzdGljcyAqZndfc3RhdHM7CisJdW5zaWduZWQgbG9uZyBmd19zdGF0c191cGRhdGU7CisKKwl1bnNpZ25lZCBpbnQgcmV0cnlfY291bnQ7CisJdW5zaWduZWQgaW50IGV4Y2Vzc2l2ZV9yZXRyaWVzOworfTsKKworc3RydWN0IHdsMTI3MV9kZWJ1Z2ZzIHsKKwlzdHJ1Y3QgZGVudHJ5ICpyb290ZGlyOworCXN0cnVjdCBkZW50cnkgKmZ3X3N0YXRpc3RpY3M7CisKKwlzdHJ1Y3QgZGVudHJ5ICp0eF9pbnRlcm5hbF9kZXNjX292ZXJmbG93OworCisJc3RydWN0IGRlbnRyeSAqcnhfb3V0X29mX21lbTsKKwlzdHJ1Y3QgZGVudHJ5ICpyeF9oZHJfb3ZlcmZsb3c7CisJc3RydWN0IGRlbnRyeSAqcnhfaHdfc3R1Y2s7CisJc3RydWN0IGRlbnRyeSAqcnhfZHJvcHBlZDsKKwlzdHJ1Y3QgZGVudHJ5ICpyeF9mY3NfZXJyOworCXN0cnVjdCBkZW50cnkgKnJ4X3hmcl9oaW50X3RyaWc7CisJc3RydWN0IGRlbnRyeSAqcnhfcGF0aF9yZXNldDsKKwlzdHJ1Y3QgZGVudHJ5ICpyeF9yZXNldF9jb3VudGVyOworCisJc3RydWN0IGRlbnRyeSAqZG1hX3J4X3JlcXVlc3RlZDsKKwlzdHJ1Y3QgZGVudHJ5ICpkbWFfcnhfZXJyb3JzOworCXN0cnVjdCBkZW50cnkgKmRtYV90eF9yZXF1ZXN0ZWQ7CisJc3RydWN0IGRlbnRyeSAqZG1hX3R4X2Vycm9yczsKKworCXN0cnVjdCBkZW50cnkgKmlzcl9jbWRfY21wbHQ7CisJc3RydWN0IGRlbnRyeSAqaXNyX2ZpcXM7CisJc3RydWN0IGRlbnRyeSAqaXNyX3J4X2hlYWRlcnM7CisJc3RydWN0IGRlbnRyeSAqaXNyX3J4X21lbV9vdmVyZmxvdzsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfcnhfcmR5czsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfaXJxczsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfdHhfcHJvY3M7CisJc3RydWN0IGRlbnRyeSAqaXNyX2RlY3J5cHRfZG9uZTsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfZG1hMF9kb25lOworCXN0cnVjdCBkZW50cnkgKmlzcl9kbWExX2RvbmU7CisJc3RydWN0IGRlbnRyeSAqaXNyX3R4X2V4Y2hfY29tcGxldGU7CisJc3RydWN0IGRlbnRyeSAqaXNyX2NvbW1hbmRzOworCXN0cnVjdCBkZW50cnkgKmlzcl9yeF9wcm9jczsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfaHdfcG1fbW9kZV9jaGFuZ2VzOworCXN0cnVjdCBkZW50cnkgKmlzcl9ob3N0X2Fja25vd2xlZGdlczsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfcGNpX3BtOworCXN0cnVjdCBkZW50cnkgKmlzcl93YWtldXBzOworCXN0cnVjdCBkZW50cnkgKmlzcl9sb3dfcnNzaTsKKworCXN0cnVjdCBkZW50cnkgKndlcF9hZGRyX2tleV9jb3VudDsKKwlzdHJ1Y3QgZGVudHJ5ICp3ZXBfZGVmYXVsdF9rZXlfY291bnQ7CisJLyogc2tpcHBpbmcgd2VwLnJlc2VydmVkICovCisJc3RydWN0IGRlbnRyeSAqd2VwX2tleV9ub3RfZm91bmQ7CisJc3RydWN0IGRlbnRyeSAqd2VwX2RlY3J5cHRfZmFpbDsKKwlzdHJ1Y3QgZGVudHJ5ICp3ZXBfcGFja2V0czsKKwlzdHJ1Y3QgZGVudHJ5ICp3ZXBfaW50ZXJydXB0OworCisJc3RydWN0IGRlbnRyeSAqcHdyX3BzX2VudGVyOworCXN0cnVjdCBkZW50cnkgKnB3cl9lbHBfZW50ZXI7CisJc3RydWN0IGRlbnRyeSAqcHdyX21pc3NpbmdfYmNuczsKKwlzdHJ1Y3QgZGVudHJ5ICpwd3Jfd2FrZV9vbl9ob3N0OworCXN0cnVjdCBkZW50cnkgKnB3cl93YWtlX29uX3RpbWVyX2V4cDsKKwlzdHJ1Y3QgZGVudHJ5ICpwd3JfdHhfd2l0aF9wczsKKwlzdHJ1Y3QgZGVudHJ5ICpwd3JfdHhfd2l0aG91dF9wczsKKwlzdHJ1Y3QgZGVudHJ5ICpwd3JfcmN2ZF9iZWFjb25zOworCXN0cnVjdCBkZW50cnkgKnB3cl9wb3dlcl9zYXZlX29mZjsKKwlzdHJ1Y3QgZGVudHJ5ICpwd3JfZW5hYmxlX3BzOworCXN0cnVjdCBkZW50cnkgKnB3cl9kaXNhYmxlX3BzOworCXN0cnVjdCBkZW50cnkgKnB3cl9maXhfdHNmX3BzOworCS8qIHNraXBwaW5nIGNvbnRfbWlzc19iY25zX3NwcmVhZCBmb3Igbm93ICovCisJc3RydWN0IGRlbnRyeSAqcHdyX3JjdmRfYXdha2VfYmVhY29uczsKKworCXN0cnVjdCBkZW50cnkgKm1pY19yeF9wa3RzOworCXN0cnVjdCBkZW50cnkgKm1pY19jYWxjX2ZhaWx1cmU7CisKKwlzdHJ1Y3QgZGVudHJ5ICphZXNfZW5jcnlwdF9mYWlsOworCXN0cnVjdCBkZW50cnkgKmFlc19kZWNyeXB0X2ZhaWw7CisJc3RydWN0IGRlbnRyeSAqYWVzX2VuY3J5cHRfcGFja2V0czsKKwlzdHJ1Y3QgZGVudHJ5ICphZXNfZGVjcnlwdF9wYWNrZXRzOworCXN0cnVjdCBkZW50cnkgKmFlc19lbmNyeXB0X2ludGVycnVwdDsKKwlzdHJ1Y3QgZGVudHJ5ICphZXNfZGVjcnlwdF9pbnRlcnJ1cHQ7CisKKwlzdHJ1Y3QgZGVudHJ5ICpldmVudF9oZWFydF9iZWF0OworCXN0cnVjdCBkZW50cnkgKmV2ZW50X2NhbGlicmF0aW9uOworCXN0cnVjdCBkZW50cnkgKmV2ZW50X3J4X21pc21hdGNoOworCXN0cnVjdCBkZW50cnkgKmV2ZW50X3J4X21lbV9lbXB0eTsKKwlzdHJ1Y3QgZGVudHJ5ICpldmVudF9yeF9wb29sOworCXN0cnVjdCBkZW50cnkgKmV2ZW50X29vbV9sYXRlOworCXN0cnVjdCBkZW50cnkgKmV2ZW50X3BoeV90cmFuc21pdF9lcnJvcjsKKwlzdHJ1Y3QgZGVudHJ5ICpldmVudF90eF9zdHVjazsKKworCXN0cnVjdCBkZW50cnkgKnBzX3BzcG9sbF90aW1lb3V0czsKKwlzdHJ1Y3QgZGVudHJ5ICpwc191cHNkX3RpbWVvdXRzOworCXN0cnVjdCBkZW50cnkgKnBzX3Vwc2RfbWF4X3NwdGltZTsKKwlzdHJ1Y3QgZGVudHJ5ICpwc191cHNkX21heF9hcHR1cm47CisJc3RydWN0IGRlbnRyeSAqcHNfcHNwb2xsX21heF9hcHR1cm47CisJc3RydWN0IGRlbnRyeSAqcHNfcHNwb2xsX3V0aWxpemF0aW9uOworCXN0cnVjdCBkZW50cnkgKnBzX3Vwc2RfdXRpbGl6YXRpb247CisKKwlzdHJ1Y3QgZGVudHJ5ICpyeHBpcGVfcnhfcHJlcF9iZWFjb25fZHJvcDsKKwlzdHJ1Y3QgZGVudHJ5ICpyeHBpcGVfZGVzY3JfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOworCXN0cnVjdCBkZW50cnkgKnJ4cGlwZV9iZWFjb25fYnVmZmVyX3RocmVzX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKKwlzdHJ1Y3QgZGVudHJ5ICpyeHBpcGVfbWlzc2VkX2JlYWNvbl9ob3N0X2ludF90cmlnX3J4X2RhdGE7CisJc3RydWN0IGRlbnRyeSAqcnhwaXBlX3R4X3hmcl9ob3N0X2ludF90cmlnX3J4X2RhdGE7CisKKwlzdHJ1Y3QgZGVudHJ5ICp0eF9xdWV1ZV9sZW47CisKKwlzdHJ1Y3QgZGVudHJ5ICpyZXRyeV9jb3VudDsKKwlzdHJ1Y3QgZGVudHJ5ICpleGNlc3NpdmVfcmV0cmllczsKK307CisKKyNkZWZpbmUgTlVNX1RYX1FVRVVFUyAgICAgICAgICAgICAgNAorI2RlZmluZSBOVU1fUlhfUEtUX0RFU0MgICAgICAgICAgICA4CisKKy8qIEZXIHN0YXR1cyByZWdpc3RlcnMgKi8KK3N0cnVjdCB3bDEyNzFfZndfc3RhdHVzIHsKKwl1MzIgaW50cjsKKwl1OCAgZndfcnhfY291bnRlcjsKKwl1OCAgZHJ2X3J4X2NvdW50ZXI7CisJdTggIHJlc2VydmVkOworCXU4ICB0eF9yZXN1bHRzX2NvdW50ZXI7CisJdTMyIHJ4X3BrdF9kZXNjc1tOVU1fUlhfUEtUX0RFU0NdOworCXUzMiB0eF9yZWxlYXNlZF9ibGtzW05VTV9UWF9RVUVVRVNdOworCXUzMiBmd19sb2NhbHRpbWU7CisJdTMyIHBhZGRpbmdbMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHdsMTI3MV9yeF9tZW1fcG9vbF9hZGRyIHsKKwl1MzIgYWRkcjsKKwl1MzIgYWRkcl9leHRyYTsKK307CisKK3N0cnVjdCB3bDEyNzEgeworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCWJvb2wgbWFjODAyMTFfcmVnaXN0ZXJlZDsKKworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7CisKKwl2b2lkICgqc2V0X3Bvd2VyKShib29sIGVuYWJsZSk7CisJaW50IGlycTsKKworCXNwaW5sb2NrX3Qgd2xfbG9jazsKKworCWVudW0gd2wxMjcxX3N0YXRlIHN0YXRlOworCXN0cnVjdCBtdXRleCBtdXRleDsKKworCWludCBwaHlzaWNhbF9tZW1fYWRkcjsKKwlpbnQgcGh5c2ljYWxfcmVnX2FkZHI7CisJaW50IHZpcnR1YWxfbWVtX2FkZHI7CisJaW50IHZpcnR1YWxfcmVnX2FkZHI7CisKKwlzdHJ1Y3Qgd2wxMjcxX2NoaXAgY2hpcDsKKworCWludCBjbWRfYm94X2FkZHI7CisJaW50IGV2ZW50X2JveF9hZGRyOworCisJdTggKmZ3OworCXNpemVfdCBmd19sZW47CisJdTggKm52czsKKwlzaXplX3QgbnZzX2xlbjsKKworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggYnNzX3R5cGU7CisJdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOworCXU4IHNzaWRfbGVuOworCXU4IGxpc3Rlbl9pbnQ7CisJaW50IGNoYW5uZWw7CisKKwlzdHJ1Y3Qgd2wxMjcxX2FjeF9tZW1fbWFwICp0YXJnZXRfbWVtX21hcDsKKworCS8qIEFjY291bnRpbmcgZm9yIGFsbG9jYXRlZCAvIGF2YWlsYWJsZSBUWCBibG9ja3Mgb24gSFcgKi8KKwl1MzIgdHhfYmxvY2tzX2ZyZWVkW05VTV9UWF9RVUVVRVNdOworCXUzMiB0eF9ibG9ja3NfYXZhaWxhYmxlOworCXU4IHR4X3Jlc3VsdHNfY291bnQ7CisKKwkvKiBUcmFuc21pdHRlZCBUWCBwYWNrZXRzIGNvdW50ZXIgZm9yIGNoaXBzZXQgaW50ZXJmYWNlICovCisJaW50IHR4X3BhY2tldHNfY291bnQ7CisKKwkvKiBUaW1lLW9mZnNldCBiZXR3ZWVuIGhvc3QgYW5kIGNoaXBzZXQgY2xvY2tzICovCisJaW50IHRpbWVfb2Zmc2V0OworCisJLyogU2Vzc2lvbiBjb3VudGVyIGZvciB0aGUgY2hpcHNldCAqLworCWludCBzZXNzaW9uX2NvdW50ZXI7CisKKwkvKiBGcmFtZXMgc2NoZWR1bGVkIGZvciB0cmFuc21pc3Npb24sIG5vdCBoYW5kbGVkIHlldCAqLworCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWU7CisJYm9vbCB0eF9xdWV1ZV9zdG9wcGVkOworCisJc3RydWN0IHdvcmtfc3RydWN0IHR4X3dvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IGZpbHRlcl93b3JrOworCisJLyogUGVuZGluZyBUWCBmcmFtZXMgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqdHhfZnJhbWVzWzE2XTsKKworCS8qIEZXIFJ4IGNvdW50ZXIgKi8KKwl1MzIgcnhfY291bnRlcjsKKworCS8qIFJ4IG1lbW9yeSBwb29sIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgd2wxMjcxX3J4X21lbV9wb29sX2FkZHIgcnhfbWVtX3Bvb2xfYWRkcjsKKworCS8qIFRoZSB0YXJnZXQgaW50ZXJydXB0IG1hc2sgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaXJxX3dvcms7CisKKwkvKiBUaGUgbWJveCBldmVudCBtYXNrICovCisJdTMyIGV2ZW50X21hc2s7CisKKwkvKiBNYWlsYm94IHBvaW50ZXJzICovCisJdTMyIG1ib3hfcHRyWzJdOworCisJLyogQXJlIHdlIGN1cnJlbnRseSBzY2FubmluZyAqLworCWJvb2wgc2Nhbm5pbmc7CisKKwkvKiBPdXIgYXNzb2NpYXRpb24gSUQgKi8KKwl1MTYgYWlkOworCisJLyogRGVmYXVsdCBrZXkgKGZvciBXRVApICovCisJdTMyIGRlZmF1bHRfa2V5OworCisJdW5zaWduZWQgaW50IHJ4X2NvbmZpZzsKKwl1bnNpZ25lZCBpbnQgcnhfZmlsdGVyOworCisJLyogaXMgZmlybXdhcmUgaW4gZWxwIG1vZGUgKi8KKwlib29sIGVscDsKKworCXN0cnVjdCBjb21wbGV0aW9uICplbHBfY29tcGw7CisKKwkvKiB3ZSBjYW4gYmUgaW4gcHNtLCBidXQgbm90IGluIGVscCwgd2UgaGF2ZSB0byBkaWZmZXJlbnRpYXRlICovCisJYm9vbCBwc207CisKKwkvKiBQU00gbW9kZSByZXF1ZXN0ZWQgKi8KKwlib29sIHBzbV9yZXF1ZXN0ZWQ7CisKKwkvKiBpbiBkQm0gKi8KKwlpbnQgcG93ZXJfbGV2ZWw7CisKKwlzdHJ1Y3Qgd2wxMjcxX3N0YXRzIHN0YXRzOworCXN0cnVjdCB3bDEyNzFfZGVidWdmcyBkZWJ1Z2ZzOworCisJdTMyIGJ1ZmZlcl8zMjsKKwl1MzIgYnVmZmVyX2NtZDsKKwl1OCBidWZmZXJfYnVzeXdvcmRbV0wxMjcxX0JVU1lfV09SRF9MRU5dOworCXN0cnVjdCB3bDEyNzFfcnhfZGVzY3JpcHRvciAqcnhfZGVzY3JpcHRvcjsKKworCXN0cnVjdCB3bDEyNzFfZndfc3RhdHVzICpmd19zdGF0dXM7CisJc3RydWN0IHdsMTI3MV90eF9od19yZXNfaWYgKnR4X3Jlc19pZjsKK307CisKK2ludCB3bDEyNzFfcGx0X3N0YXJ0KHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfcGx0X3N0b3Aoc3RydWN0IHdsMTI3MSAqd2wpOworCisjZGVmaW5lIEpPSU5fVElNRU9VVCA1MDAwIC8qIDUwMDAgbWlsbGlzZWNvbmRzIHRvIGpvaW4gKi8KKworI2RlZmluZSBTRVNTSU9OX0NPVU5URVJfTUFYIDcgLyogbWF4aW11bSB2YWx1ZSBmb3IgdGhlIHNlc3Npb24gY291bnRlciAqLworCisjZGVmaW5lIFdMMTI3MV9ERUZBVUxUX1BPV0VSX0xFVkVMIDAKKworI2RlZmluZSBXTDEyNzFfVFhfUVVFVUVfTUFYX0xFTkdUSCAyMAorCisvKiBXTDEyNzEgbmVlZHMgYSAyMDBtcyBzbGVlcCBhZnRlciBwb3dlciBvbiAqLworI2RlZmluZSBXTDEyNzFfUE9XRVJfT05fU0xFRVAgMjAwIC8qIGluIG1pbGlzZWNvbmRzICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyMmE0MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmMKQEAgLTAsMCArMSw5NjEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAid2wxMjcxX2FjeC5oIgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjNy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2luY2x1ZGUgIndsMTI3MS5oIgorI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgorI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKKyNpbmNsdWRlICJ3bDEyNzFfc3BpLmgiCisjaW5jbHVkZSAid2wxMjcxX3BzLmgiCisKK2ludCB3bDEyNzFfYWN4X3dha2VfdXBfY29uZGl0aW9ucyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggd2FrZV91cF9ldmVudCwKKwkJCQkgIHU4IGxpc3Rlbl9pbnRlcnZhbCkKK3sKKwlzdHJ1Y3QgYWN4X3dha2VfdXBfY29uZGl0aW9uICp3YWtlX3VwOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHdha2UgdXAgY29uZGl0aW9ucyIpOworCisJd2FrZV91cCA9IGt6YWxsb2Moc2l6ZW9mKCp3YWtlX3VwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3YWtlX3VwKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXdha2VfdXAtPndha2VfdXBfZXZlbnQgPSB3YWtlX3VwX2V2ZW50OworCXdha2VfdXAtPmxpc3Rlbl9pbnRlcnZhbCA9IGxpc3Rlbl9pbnRlcnZhbDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfV0FLRV9VUF9DT05ESVRJT05TLAorCQkJCSAgIHdha2VfdXAsIHNpemVvZigqd2FrZV91cCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJjb3VsZCBub3Qgc2V0IHdha2UgdXAgY29uZGl0aW9uczogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZSh3YWtlX3VwKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9zbGVlcF9hdXRoKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBzbGVlcF9hdXRoKQoreworCXN0cnVjdCBhY3hfc2xlZXBfYXV0aCAqYXV0aDsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzbGVlcCBhdXRoIik7CisKKwlhdXRoID0ga3phbGxvYyhzaXplb2YoKmF1dGgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF1dGgpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYXV0aC0+c2xlZXBfYXV0aCA9IHNsZWVwX2F1dGg7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NMRUVQX0FVVEgsIGF1dGgsIHNpemVvZigqYXV0aCkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCitvdXQ6CisJa2ZyZWUoYXV0aCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfZndfdmVyc2lvbihzdHJ1Y3Qgd2wxMjcxICp3bCwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBhY3hfcmV2aXNpb24gKnJldjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBmdyByZXYiKTsKKworCXJldiA9IGt6YWxsb2Moc2l6ZW9mKCpyZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB3bDEyNzFfY21kX2ludGVycm9nYXRlKHdsLCBBQ1hfRldfUkVWLCByZXYsIHNpemVvZigqcmV2KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoIkFDWF9GV19SRVYgaW50ZXJyb2dhdGUgZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGJlIGNhcmVmdWwgd2l0aCB0aGUgYnVmZmVyIHNpemVzICovCisJc3RybmNweShidWYsIHJldi0+ZndfdmVyc2lvbiwgbWluKGxlbiwgc2l6ZW9mKHJldi0+ZndfdmVyc2lvbikpKTsKKworCS8qCisJICogaWYgdGhlIGZpcm13YXJlIHZlcnNpb24gc3RyaW5nIGlzIGV4YWN0bHkKKwkgKiBzaXplb2YocmV2LT5md192ZXJzaW9uKSBsb25nIG9yIGZ3X2xlbiBpcyBsZXNzIHRoYW4KKwkgKiBzaXplb2YocmV2LT5md192ZXJzaW9uKSBpdCB3b24ndCBiZSBudWxsIHRlcm1pbmF0ZWQKKwkgKi8KKwlidWZbbWluKGxlbiwgc2l6ZW9mKHJldi0+ZndfdmVyc2lvbikpIC0gMV0gPSAnXDAnOworCitvdXQ6CisJa2ZyZWUocmV2KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF90eF9wb3dlcihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IHBvd2VyKQoreworCXN0cnVjdCBhY3hfY3VycmVudF90eF9wb3dlciAqYWN4OworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGRvdDExX2N1cl90eF9wd3IiKTsKKworCWlmIChwb3dlciA8IDAgfHwgcG93ZXIgPiAyNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5jdXJyZW50X3R4X3Bvd2VyID0gcG93ZXIgKiAxMDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9DVVJfVFhfUFdSLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImNvbmZpZ3VyZSBvZiB0eCBwb3dlciBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9mZWF0dXJlX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2ZlYXR1cmVfY29uZmlnICpmZWF0dXJlOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGZlYXR1cmUgY2ZnIik7CisKKwlmZWF0dXJlID0ga3phbGxvYyhzaXplb2YoKmZlYXR1cmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZlYXR1cmUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogREZfRU5DUllQVElPTl9ESVNBQkxFIGFuZCBERl9TTklGRl9NT0RFX0VOQUJMRSBhcmUgZGlzYWJsZWQgKi8KKwlmZWF0dXJlLT5kYXRhX2Zsb3dfb3B0aW9ucyA9IDA7CisJZmVhdHVyZS0+b3B0aW9ucyA9IDA7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0ZFQVRVUkVfQ0ZHLAorCQkJCSAgIGZlYXR1cmUsIHNpemVvZigqZmVhdHVyZSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiQ291bGRudCBzZXQgSFcgZW5jcnlwdGlvbiIpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShmZWF0dXJlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9tZW1fbWFwKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3QgYWN4X2hlYWRlciAqbWVtX21hcCwKKwkJICAgICAgIHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggbWVtIG1hcCIpOworCisJcmV0ID0gd2wxMjcxX2NtZF9pbnRlcnJvZ2F0ZSh3bCwgQUNYX01FTV9NQVAsIG1lbV9tYXAsIGxlbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI3MV9hY3hfcnhfbXNkdV9saWZlX3RpbWUoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBsaWZlX3RpbWUpCit7CisJc3RydWN0IGFjeF9yeF9tc2R1X2xpZmV0aW1lICphY3g7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcnggbXNkdSBsaWZlIHRpbWUiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPmxpZmV0aW1lID0gbGlmZV90aW1lOworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9SWF9NU0RVX0xJRkVfVElNRSwKKwkJCQkgICBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnggbXNkdSBsaWZlIHRpbWU6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9yeF9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBjb25maWcsIHUzMiBmaWx0ZXIpCit7CisJc3RydWN0IGFjeF9yeF9jb25maWcgKnJ4X2NvbmZpZzsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCByeCBjb25maWciKTsKKworCXJ4X2NvbmZpZyA9IGt6YWxsb2Moc2l6ZW9mKCpyeF9jb25maWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X2NvbmZpZykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyeF9jb25maWctPmNvbmZpZ19vcHRpb25zID0gY29uZmlnOworCXJ4X2NvbmZpZy0+ZmlsdGVyX29wdGlvbnMgPSBmaWx0ZXI7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1JYX0NGRywKKwkJCQkgICByeF9jb25maWcsIHNpemVvZigqcnhfY29uZmlnKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnggY29uZmlnOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHJ4X2NvbmZpZyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfcGRfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfcGFja2V0X2RldGVjdGlvbiAqcGQ7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZGF0YSBwZCB0aHJlc2hvbGQiKTsKKworCXBkID0ga3phbGxvYyhzaXplb2YoKnBkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBGSVhNRTogdGhyZXNob2xkIHZhbHVlIG5vdCBzZXQgKi8KKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUERfVEhSRVNIT0xELCBwZCwgc2l6ZW9mKCpwZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHBkIHRocmVzaG9sZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwZCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNzFfYWN4X3Nsb3Qoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gYWN4X3Nsb3RfdHlwZSBzbG90X3RpbWUpCit7CisJc3RydWN0IGFjeF9zbG90ICpzbG90OworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNsb3QiKTsKKworCXNsb3QgPSBremFsbG9jKHNpemVvZigqc2xvdCksIEdGUF9LRVJORUwpOworCWlmICghc2xvdCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlzbG90LT53b25lX2luZGV4ID0gU1RBVElPTl9XT05FX0lOREVYOworCXNsb3QtPnNsb3RfdGltZSA9IHNsb3RfdGltZTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0xPVCwgc2xvdCwgc2l6ZW9mKCpzbG90KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc2xvdCB0aW1lOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHNsb3QpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfZG90MTFfZ3JwX2FkZHJfdGJsICphY3g7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZ3JvdXAgYWRkcmVzcyB0YmwiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBNQUMgZmlsdGVyaW5nICovCisJYWN4LT5lbmFibGVkID0gMDsKKwlhY3gtPm51bV9ncm91cHMgPSAwOworCW1lbXNldChhY3gtPm1hY190YWJsZSwgMCwgQUREUkVTU19HUk9VUF9NQVhfTEVOKTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9HUk9VUF9BRERSRVNTX1RCTCwKKwkJCQkgICBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgZ3JvdXAgYWRkciB0YWJsZTogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IGFjeF9yeF90aW1lb3V0ICpyeF90aW1lb3V0OworCWludCByZXQ7CisKKwlyeF90aW1lb3V0ID0ga3phbGxvYyhzaXplb2YoKnJ4X3RpbWVvdXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X3RpbWVvdXQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzZXJ2aWNlIHBlcmlvZCB0aW1lb3V0Iik7CisKKwlyeF90aW1lb3V0LT5wc19wb2xsX3RpbWVvdXQgPSBSWF9USU1FT1VUX1BTX1BPTExfREVGOworCXJ4X3RpbWVvdXQtPnVwc2RfdGltZW91dCA9IFJYX1RJTUVPVVRfVVBTRF9ERUY7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NFUlZJQ0VfUEVSSU9EX1RJTUVPVVQsCisJCQkJICAgcnhfdGltZW91dCwgc2l6ZW9mKCpyeF90aW1lb3V0KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc2VydmljZSBwZXJpb2QgdGltZW91dDogJWQiLAorCQkJICAgICAgIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHJ4X3RpbWVvdXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X3J0c190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBydHNfdGhyZXNob2xkKQoreworCXN0cnVjdCBhY3hfcnRzX3RocmVzaG9sZCAqcnRzOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJ0cyB0aHJlc2hvbGQiKTsKKworCXJ0cyA9IGt6YWxsb2Moc2l6ZW9mKCpydHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ0cykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlydHMtPnRocmVzaG9sZCA9IHJ0c190aHJlc2hvbGQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgRE9UMTFfUlRTX1RIUkVTSE9MRCwgcnRzLCBzaXplb2YoKnJ0cykpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHJ0cyB0aHJlc2hvbGQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUocnRzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX29wdChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2JlYWNvbl9maWx0ZXJfb3B0aW9uICpiZWFjb25fZmlsdGVyOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGJlYWNvbiBmaWx0ZXIgb3B0Iik7CisKKwliZWFjb25fZmlsdGVyID0ga3phbGxvYyhzaXplb2YoKmJlYWNvbl9maWx0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJlYWNvbl9maWx0ZXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYmVhY29uX2ZpbHRlci0+ZW5hYmxlID0gMDsKKwliZWFjb25fZmlsdGVyLT5tYXhfbnVtX2JlYWNvbnMgPSAwOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9CRUFDT05fRklMVEVSX09QVCwKKwkJCQkgICBiZWFjb25fZmlsdGVyLCBzaXplb2YoKmJlYWNvbl9maWx0ZXIpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBiZWFjb24gZmlsdGVyIG9wdDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShiZWFjb25fZmlsdGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX3RhYmxlKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfYmVhY29uX2ZpbHRlcl9pZV90YWJsZSAqaWVfdGFibGU7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYmVhY29uIGZpbHRlciB0YWJsZSIpOworCisJaWVfdGFibGUgPSBremFsbG9jKHNpemVvZigqaWVfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWllX3RhYmxlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWllX3RhYmxlLT5udW1faWUgPSAwOworCW1lbXNldChpZV90YWJsZS0+dGFibGUsIDAsIEJFQUNPTl9GSUxURVJfVEFCTEVfTUFYX1NJWkUpOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9CRUFDT05fRklMVEVSX1RBQkxFLAorCQkJCSAgIGllX3RhYmxlLCBzaXplb2YoKmllX3RhYmxlKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgYmVhY29uIGZpbHRlciB0YWJsZTogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShpZV90YWJsZSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfc2dfZW5hYmxlKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfYnRfd2xhbl9jb2V4ICpwdGE7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2cgZW5hYmxlIik7CisKKwlwdGEgPSBremFsbG9jKHNpemVvZigqcHRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwdGEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcHRhLT5lbmFibGUgPSBTR19FTkFCTEU7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NHX0VOQUJMRSwgcHRhLCBzaXplb2YoKnB0YSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNvZnRnZW1pbmkgZW5hYmxlOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHB0YSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfc2dfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfYnRfd2xhbl9jb2V4X3BhcmFtICpwYXJhbTsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzZyBjZmciKTsKKworCXBhcmFtID0ga3phbGxvYyhzaXplb2YoKnBhcmFtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJhbSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBCVC1XTEFOIGNvZXh0IHBhcmFtZXRlcnMgKi8KKwlwYXJhbS0+bWluX3JhdGUgPSBSQVRFX0lOREVYXzI0TUJQUzsKKwlwYXJhbS0+YnRfaHBfbWF4X3RpbWUgPSBQVEFfQlRfSFBfTUFYVElNRV9ERUY7CisJcGFyYW0tPndsYW5faHBfbWF4X3RpbWUgPSBQVEFfV0xBTl9IUF9NQVhfVElNRV9ERUY7CisJcGFyYW0tPnNlbnNlX2Rpc2FibGVfdGltZXIgPSBQVEFfU0VOU0VfRElTQUJMRV9USU1FUl9ERUY7CisJcGFyYW0tPnJ4X3RpbWVfYnRfaHAgPSBQVEFfUFJPVEVDVElWRV9SWF9USU1FX0RFRjsKKwlwYXJhbS0+dHhfdGltZV9idF9ocCA9IFBUQV9QUk9URUNUSVZFX1RYX1RJTUVfREVGOworCXBhcmFtLT5yeF90aW1lX2J0X2hwX2Zhc3QgPSBQVEFfUFJPVEVDVElWRV9SWF9USU1FX0ZBU1RfREVGOworCXBhcmFtLT50eF90aW1lX2J0X2hwX2Zhc3QgPSBQVEFfUFJPVEVDVElWRV9UWF9USU1FX0ZBU1RfREVGOworCXBhcmFtLT53bGFuX2N5Y2xlX2Zhc3QgPSBQVEFfQ1lDTEVfVElNRV9GQVNUX0RFRjsKKwlwYXJhbS0+YnRfYW50aV9zdGFydmF0aW9uX3BlcmlvZCA9IFBUQV9BTlRJX1NUQVJWRV9QRVJJT0RfREVGOworCXBhcmFtLT5uZXh0X2J0X2xwX3BhY2tldCA9IFBUQV9USU1FT1VUX05FWFRfQlRfTFBfUEFDS0VUX0RFRjsKKwlwYXJhbS0+d2FrZV91cF9iZWFjb24gPSBQVEFfVElNRV9CRUZPUkVfQkVBQ09OX0RFRjsKKwlwYXJhbS0+aHBfZG1fbWF4X2d1YXJkX3RpbWUgPSBQVEFfSFBETV9NQVhfVElNRV9ERUY7CisJcGFyYW0tPm5leHRfd2xhbl9wYWNrZXQgPSBQVEFfVElNRV9PVVRfTkVYVF9XTEFOX0RFRjsKKwlwYXJhbS0+YW50ZW5uYV90eXBlID0gUFRBX0FOVEVOTkFfVFlQRV9ERUY7CisJcGFyYW0tPnNpZ25hbF90eXBlID0gUFRBX1NJR05BTElOR19UWVBFX0RFRjsKKwlwYXJhbS0+YWZoX2xldmVyYWdlX29uID0gUFRBX0FGSF9MRVZFUkFHRV9PTl9ERUY7CisJcGFyYW0tPnF1aWV0X2N5Y2xlX251bSA9IFBUQV9OVU1CRVJfUVVJRVRfQ1lDTEVfREVGOworCXBhcmFtLT5tYXhfY3RzID0gUFRBX01BWF9OVU1fQ1RTX0RFRjsKKwlwYXJhbS0+d2xhbl9wYWNrZXRzX251bSA9IFBUQV9OVU1CRVJfT0ZfV0xBTl9QQUNLRVRTX0RFRjsKKwlwYXJhbS0+YnRfcGFja2V0c19udW0gPSBQVEFfTlVNQkVSX09GX0JUX1BBQ0tFVFNfREVGOworCXBhcmFtLT5taXNzZWRfcnhfYXZhbGFuY2hlID0gUFRBX1JYX0ZPUl9BVkFMQU5DSEVfREVGOworCXBhcmFtLT53bGFuX2VscF9ocCA9IFBUQV9FTFBfSFBfREVGOworCXBhcmFtLT5idF9hbnRpX3N0YXJ2YXRpb25fY3ljbGVzID0gUFRBX0FOVElfU1RBUlZFX05VTV9DWUNMRV9ERUY7CisJcGFyYW0tPmFja19tb2RlX2R1YWxfYW50ID0gUFRBX0FDS19NT0RFX0RFRjsKKwlwYXJhbS0+cGFfc2RfZW5hYmxlID0gUFRBX0FMTE9XX1BBX1NEX0RFRjsKKwlwYXJhbS0+cHRhX2F1dG9fbW9kZV9lbmFibGUgPSBQVEFfQVVUT19NT0RFX05PX0NUU19ERUY7CisJcGFyYW0tPmJ0X2hwX3Jlc3BlY3RlZF9udW0gPSBQVEFfQlRfSFBfUkVTUEVDVEVEX0RFRjsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0dfQ0ZHLCBwYXJhbSwgc2l6ZW9mKCpwYXJhbSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNnIGNvbmZpZzogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwYXJhbSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfY2NhX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2VuZXJneV9kZXRlY3Rpb24gKmRldGVjdGlvbjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBjY2EgdGhyZXNob2xkIik7CisKKwlkZXRlY3Rpb24gPSBremFsbG9jKHNpemVvZigqZGV0ZWN0aW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXRlY3Rpb24pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZGV0ZWN0aW9uLT5yeF9jY2FfdGhyZXNob2xkID0gQ0NBX1RIUlNIX0RJU0FCTEVfRU5FUkdZX0Q7CisJZGV0ZWN0aW9uLT50eF9lbmVyZ3lfZGV0ZWN0aW9uID0gMDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQ0NBX1RIUkVTSE9MRCwKKwkJCQkgICBkZXRlY3Rpb24sIHNpemVvZigqZGV0ZWN0aW9uKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgY2NhIHRocmVzaG9sZDogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworb3V0OgorCWtmcmVlKGRldGVjdGlvbik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfYmNuX2R0aW1fb3B0aW9ucyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2JlYWNvbl9icm9hZGNhc3QgKmJiOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGJjbiBkdGltIG9wdGlvbnMiKTsKKworCWJiID0ga3phbGxvYyhzaXplb2YoKmJiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiYikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwliYi0+YmVhY29uX3J4X3RpbWVvdXQgPSBCQ05fUlhfVElNRU9VVF9ERUZfVkFMVUU7CisJYmItPmJyb2FkY2FzdF90aW1lb3V0ID0gQlJPQURDQVNUX1JYX1RJTUVPVVRfREVGX1ZBTFVFOworCWJiLT5yeF9icm9hZGNhc3RfaW5fcHMgPSBSWF9CUk9BRENBU1RfSU5fUFNfREVGX1ZBTFVFOworCWJiLT5wc19wb2xsX3RocmVzaG9sZCA9IENPTlNFQ1VUSVZFX1BTX1BPTExfRkFJTFVSRV9ERUY7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0JDTl9EVElNX09QVElPTlMsIGJiLCBzaXplb2YoKmJiKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnggY29uZmlnOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGJiKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9haWQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhaWQpCit7CisJc3RydWN0IGFjeF9haWQgKmFjeF9haWQ7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYWlkIik7CisKKwlhY3hfYWlkID0ga3phbGxvYyhzaXplb2YoKmFjeF9haWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeF9haWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4X2FpZC0+YWlkID0gYWlkOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9BSUQsIGFjeF9haWQsIHNpemVvZigqYWN4X2FpZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGFpZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3hfYWlkKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9ldmVudF9tYm94X21hc2soc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBldmVudF9tYXNrKQoreworCXN0cnVjdCBhY3hfZXZlbnRfbWFzayAqbWFzazsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBldmVudCBtYm94IG1hc2siKTsKKworCW1hc2sgPSBremFsbG9jKHNpemVvZigqbWFzayksIEdGUF9LRVJORUwpOworCWlmICghbWFzaykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBoaWdoIGV2ZW50IG1hc2sgaXMgdW51c2VkICovCisJbWFzay0+aGlnaF9ldmVudF9tYXNrID0gMHhmZmZmZmZmZjsKKworCW1hc2stPmV2ZW50X21hc2sgPSBldmVudF9tYXNrOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9FVkVOVF9NQk9YX01BU0ssCisJCQkJICAgbWFzaywgc2l6ZW9mKCptYXNrKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgYWN4X2V2ZW50X21ib3hfbWFzazogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShtYXNrKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9zZXRfcHJlYW1ibGUoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gYWN4X3ByZWFtYmxlX3R5cGUgcHJlYW1ibGUpCit7CisJc3RydWN0IGFjeF9wcmVhbWJsZSAqYWN4OworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4X3NldF9wcmVhbWJsZSIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+cHJlYW1ibGUgPSBwcmVhbWJsZTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUFJFQU1CTEVfVFlQRSwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIHByZWFtYmxlIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2N0c19wcm90ZWN0KHN0cnVjdCB3bDEyNzEgKndsLAorCQkJICAgZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIGN0c3Byb3RlY3QpCit7CisJc3RydWN0IGFjeF9jdHNwcm90ZWN0ICphY3g7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3hfc2V0X2N0c3Byb3RlY3QiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPmN0c3Byb3RlY3QgPSBjdHNwcm90ZWN0OworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9DVFNfUFJPVEVDVElPTiwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIGN0c3Byb3RlY3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfc3RhdGlzdGljcyhzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IGFjeF9zdGF0aXN0aWNzICpzdGF0cykKK3sKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzdGF0aXN0aWNzIik7CisKKwlyZXQgPSB3bDEyNzFfY21kX2ludGVycm9nYXRlKHdsLCBBQ1hfU1RBVElTVElDUywgc3RhdHMsCisJCQkJICAgICBzaXplb2YoKnN0YXRzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImFjeCBzdGF0aXN0aWNzIGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X3JhdGVfcG9saWN5ICphY3g7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJhdGUgcG9saWNpZXMiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNvbmZpZ3VyZSBvbmUgZGVmYXVsdCAob25lLXNpemUtZml0cy1hbGwpIHJhdGUgY2xhc3MgKi8KKwlhY3gtPnJhdGVfY2xhc3NfY250ID0gMTsKKwlhY3gtPnJhdGVfY2xhc3NbMF0uZW5hYmxlZF9yYXRlcyA9IEFDWF9SQVRFX01BU0tfQUxMOworCWFjeC0+cmF0ZV9jbGFzc1swXS5zaG9ydF9yZXRyeV9saW1pdCA9IEFDWF9SQVRFX1JFVFJZX0xJTUlUOworCWFjeC0+cmF0ZV9jbGFzc1swXS5sb25nX3JldHJ5X2xpbWl0ID0gQUNYX1JBVEVfUkVUUllfTElNSVQ7CisJYWN4LT5yYXRlX2NsYXNzWzBdLmFmbGFncyA9IDA7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1JBVEVfUE9MSUNZLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoIlNldHRpbmcgb2YgcmF0ZSBwb2xpY2llcyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9hY19jZmcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IGFjeF9hY19jZmcgKmFjeDsKKwlpbnQgaSwgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYWNjZXNzIGNhdGVnb3J5IGNvbmZpZyIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBGSVhNRTogQ29uZmlndXJlIGVhY2ggQUMgd2l0aCBhcHByb3ByaWF0ZSB2YWx1ZXMgKG1vc3Qgc3VpdGFibGUKKwkgKiB2YWx1ZXMgd2lsbCBwcm9iYWJseSBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggQUMuCisJICovCisJZm9yIChpID0gMDsgaSA8IFdMMTI3MV9BQ1hfQUNfQ09VTlQ7IGkrKykgeworCQlhY3gtPmFjID0gaTsKKworCQkvKgorCQkgKiBGSVhNRTogVGhlIGZvbGxvd2luZyBkZWZhdWx0IHZhbHVlcyBvcmlnaW5hdGUgZnJvbQorCQkgKiB0aGUgVEkgcmVmZXJlbmNlIGRyaXZlci4gV2hhdCBkbyB0aGV5IG1lYW4/CisJCSAqLworCQlhY3gtPmN3X21pbiA9IDE1OworCQlhY3gtPmN3X21heCA9IDYzOworCQlhY3gtPmFpZnNuID0gMzsKKwkJYWN4LT5yZXNlcnZlZCA9IDA7CisJCWFjeC0+dHhfb3BfbGltaXQgPSAwOworCisJCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQUNfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bDEyNzFfd2FybmluZygiU2V0dGluZyBvZiBhY2Nlc3MgY2F0ZWdvcnkgIgorCQkJCSAgICAgICAiY29uZmlnOiAlZCIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfdGlkX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X3RpZF9jb25maWcgKmFjeDsKKwlpbnQgaSwgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggdGlkIGNvbmZpZyIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRklYTUU6IGNvbmZpZ3VyZSBlYWNoIFRJRCB3aXRoIGEgZGlmZmVyZW50IEFDIHJlZmVyZW5jZSAqLworCWZvciAoaSA9IDA7IGkgPCBXTDEyNzFfQUNYX1RJRF9DT1VOVDsgaSsrKSB7CisJCWFjeC0+cXVldWVfaWQgPSBpOworCQlhY3gtPnRzaWQgPSBXTDEyNzFfQUNYX0FDX0JFOworCQlhY3gtPnBzX3NjaGVtZSA9IFdMMTI3MV9BQ1hfUFNfU0NIRU1FX0xFR0FDWTsKKwkJYWN4LT5hY2tfcG9saWN5ID0gV0wxMjcxX0FDWF9BQ0tfUE9MSUNZX0xFR0FDWTsKKworCQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1RJRF9DRkcsIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIHRpZCBjb25maWcgZmFpbGVkOiAlZCIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IGFjeF9mcmFnX3RocmVzaG9sZCAqYWN4OworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBmcmFnIHRocmVzaG9sZCIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5mcmFnX3RocmVzaG9sZCA9IElFRUU4MDIxMV9NQVhfRlJBR19USFJFU0hPTEQ7CisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9GUkFHX0NGRywgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIGZyYWcgdGhyZXNob2xkIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X3R4X2NvbmZpZ19vcHRpb25zKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfdHhfY29uZmlnX29wdGlvbnMgKmFjeDsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggdHggY29uZmlnIG9wdGlvbnMiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+dHhfY29tcGxfdGltZW91dCA9IFdMMTI3MV9BQ1hfVFhfQ09NUExfVElNRU9VVDsKKwlhY3gtPnR4X2NvbXBsX3RocmVzaG9sZCA9IFdMMTI3MV9BQ1hfVFhfQ09NUExfVEhSRVNIT0xEOworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfVFhfQ09ORklHX09QVCwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIHR4IG9wdGlvbnMgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfbWVtX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2FjeF9jb25maWdfbWVtb3J5ICptZW1fY29uZjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgIndsMTI3MSBtZW0gY2ZnIik7CisKKwltZW1fY29uZiA9IGt6YWxsb2Moc2l6ZW9mKCptZW1fY29uZiksIEdGUF9LRVJORUwpOworCWlmICghbWVtX2NvbmYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogbWVtb3J5IGNvbmZpZyAqLworCW1lbV9jb25mLT5udW1fc3RhdGlvbnMgPSBjcHVfdG9fbGUxNihERUZBVUxUX05VTV9TVEFUSU9OUyk7CisJbWVtX2NvbmYtPnJ4X21lbV9ibG9ja19udW0gPSBBQ1hfUlhfTUVNX0JMT0NLUzsKKwltZW1fY29uZi0+dHhfbWluX21lbV9ibG9ja19udW0gPSBBQ1hfVFhfTUlOX01FTV9CTE9DS1M7CisJbWVtX2NvbmYtPm51bV9zc2lkX3Byb2ZpbGVzID0gQUNYX05VTV9TU0lEX1BST0ZJTEVTOworCW1lbV9jb25mLT50b3RhbF90eF9kZXNjcmlwdG9ycyA9IEFDWF9UWF9ERVNDUklQVE9SUzsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfTUVNX0NGRywgbWVtX2NvbmYsCisJCQkJICAgc2l6ZW9mKCptZW1fY29uZikpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJ3bDEyNzEgbWVtIGNvbmZpZyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUobWVtX2NvbmYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2luaXRfbWVtX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9tZW1fY2ZnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXdsLT50YXJnZXRfbWVtX21hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bDEyNzFfYWN4X21lbV9tYXApLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmICghd2wtPnRhcmdldF9tZW1fbWFwKSB7CisJCXdsMTI3MV9lcnJvcigiY291bGRuJ3QgYWxsb2NhdGUgdGFyZ2V0IG1lbW9yeSBtYXAiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogd2Ugbm93IGFzayBmb3IgdGhlIGZpcm13YXJlIGJ1aWx0IG1lbW9yeSBtYXAgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X21lbV9tYXAod2wsICh2b2lkICopd2wtPnRhcmdldF9tZW1fbWFwLAorCQkJCSBzaXplb2Yoc3RydWN0IHdsMTI3MV9hY3hfbWVtX21hcCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiY291bGRuJ3QgcmV0cmlldmUgZmlybXdhcmUgbWVtb3J5IG1hcCIpOworCQlrZnJlZSh3bC0+dGFyZ2V0X21lbV9tYXApOworCQl3bC0+dGFyZ2V0X21lbV9tYXAgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGluaXRpYWxpemUgVFggYmxvY2sgYm9vayBrZWVwaW5nICovCisJd2wtPnR4X2Jsb2Nrc19hdmFpbGFibGUgPSB3bC0+dGFyZ2V0X21lbV9tYXAtPm51bV90eF9tZW1fYmxvY2tzOworCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgImF2YWlsYWJsZSB0eCBibG9ja3M6ICVkIiwKKwkJICAgICB3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI3MV9hY3hfaW5pdF9yeF9pbnRlcnJ1cHQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9hY3hfcnhfY29uZmlnX29wdCAqcnhfY29uZjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgIndsMTI3MSByeCBpbnRlcnJ1cHQgY29uZmlnIik7CisKKwlyeF9jb25mID0ga3phbGxvYyhzaXplb2YoKnJ4X2NvbmYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X2NvbmYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcnhfY29uZi0+dGhyZXNob2xkID0gV0wxMjcxX1JYX0lOVFJfVEhSRVNIT0xEX0RFRjsKKwlyeF9jb25mLT50aW1lb3V0ID0gV0wxMjcxX1JYX0lOVFJfVElNRU9VVF9ERUY7CisJcnhfY29uZi0+bWJsa190aHJlc2hvbGQgPSBVU0hPUlRfTUFYOyAvKiBEaXNhYmxlZCAqLworCXJ4X2NvbmYtPnF1ZXVlX3R5cGUgPSBSWF9RVUVVRV9UWVBFX1JYX0xPV19QUklPUklUWTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUlhfQ09ORklHX09QVCwgcnhfY29uZiwKKwkJCQkgICBzaXplb2YoKnJ4X2NvbmYpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygid2wxMjcxIHJ4IGNvbmZpZyBvcHQgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHJ4X2NvbmYpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY4ZGFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guaApAQCAtMCwwICsxLDEyMjEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19XTDEyNzFfQUNYX0hfXworI2RlZmluZSBfX1dMMTI3MV9BQ1hfSF9fCisKKyNpbmNsdWRlICJ3bDEyNzEuaCIKKyNpbmNsdWRlICJ3bDEyNzFfY21kLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBIb3N0IEludGVycnVwdCBSZWdpc3RlciAoV2lMaW5rIC0+IEhvc3QpCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSFcgSW5pdGlhdGVkIGludGVycnVwdCBXYXRjaGRvZyB0aW1lciBleHBpcmF0aW9uICovCisjZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9XQVRDSERPRyAgICAgICAgICAgQklUKDApCisvKiBJbml0IHNlcXVlbmNlIGlzIGRvbmUgKG1hc2tlZCBpbnRlcnJ1cHQsIGRldGVjdGlvbiB0aHJvdWdoIHBvbGxpbmcgb25seSApICovCisjZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFICAgICAgQklUKDEpCisvKiBFdmVudCB3YXMgZW50ZXJlZCB0byBFdmVudCBNQk9YICNBKi8KKyNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0EgICAgICAgICAgICBCSVQoMikKKy8qIEV2ZW50IHdhcyBlbnRlcmVkIHRvIEV2ZW50IE1CT1ggI0IqLworI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQiAgICAgICAgICAgIEJJVCgzKQorLyogQ29tbWFuZCBwcm9jZXNzaW5nIGNvbXBsZXRpb24qLworI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfQ01EX0NPTVBMRVRFICAgICAgIEJJVCg0KQorLyogU2lnbmFsaW5nIHRoZSBob3N0IG9uIEhXIHdha2V1cCAqLworI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfSFdfQVZBSUxBQkxFICAgICAgIEJJVCg1KQorLyogVGhlIE1JU0MgYml0IGlzIHVzZWQgZm9yIGFnZ3JlZ2F0aW9uIG9mIFJYLCBUeENvbXBsZXRlIGFuZCBUWCByYXRlIHVwZGF0ZSAqLworI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfREFUQSAgICAgICAgICAgICAgIEJJVCg2KQorLyogVHJhY2UgbWVhc3NnZSBvbiBNQk9YICNBICovCisjZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9UUkFDRV9BICAgICAgICAgICAgQklUKDcpCisvKiBUcmFjZSBtZWFzc2dlIG9uIE1CT1ggI0IgKi8KKyNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX1RSQUNFX0IgICAgICAgICAgICBCSVQoOCkKKworI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfQUxMCQkgICAweEZGRkZGRkZGCisjZGVmaW5lIFdMMTI3MV9BQ1hfQUxMX0VWRU5UU19WRUNUT1IgICAgICAgKFdMMTI3MV9BQ1hfSU5UUl9XQVRDSERPRyAgICAgIHwgXAorCQkJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUgfCBcCisJCQkJCSAgICBXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQSAgICAgICB8IFwKKwkJCQkJICAgIFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9CICAgICAgIHwgXAorCQkJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0NNRF9DT01QTEVURSAgfCBcCisJCQkJCSAgICBXTDEyNzFfQUNYX0lOVFJfSFdfQVZBSUxBQkxFICB8IFwKKwkJCQkJICAgIFdMMTI3MV9BQ1hfSU5UUl9EQVRBKQorCisjZGVmaW5lIFdMMTI3MV9JTlRSX01BU0sgICAgICAgICAgICAgICAgICAgKFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9BIHwJXAorCQkJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0IgfCBcCisJCQkJCSAgICBXTDEyNzFfQUNYX0lOVFJfREFUQSkKKworLyogVGFyZ2V0J3MgaW5mb3JtYXRpb24gZWxlbWVudCAqLworc3RydWN0IGFjeF9oZWFkZXIgeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBjbWQ7CisKKwkvKiBhY3ggKG9yIGluZm9ybWF0aW9uIGVsZW1lbnQpIGhlYWRlciAqLworCXUxNiBpZDsKKworCS8qIHBheWxvYWQgbGVuZ3RoIChub3QgaW5jbHVkaW5nIGhlYWRlcnMgKi8KKwl1MTYgbGVuOworfTsKKworc3RydWN0IGFjeF9lcnJvcl9jb3VudGVyIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwkvKiBUaGUgbnVtYmVyIG9mIFBMQ1AgZXJyb3JzIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhpcyAqLworCS8qIGluZm9ybWF0aW9uIGVsZW1lbnQgd2FzIGludGVycm9nYXRlZC4gVGhpcyBmaWVsZCBpcyAqLworCS8qIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIGl0IGlzIGludGVycm9nYXRlZC4qLworCXUzMiBQTENQX2Vycm9yOworCisJLyogVGhlIG51bWJlciBvZiBGQ1MgZXJyb3JzIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhpcyAqLworCS8qIGluZm9ybWF0aW9uIGVsZW1lbnQgd2FzIGludGVycm9nYXRlZC4gVGhpcyBmaWVsZCBpcyAqLworCS8qIGF1dG9tYXRpY2FsbHkgY2xlYXJlZCB3aGVuIGl0IGlzIGludGVycm9nYXRlZC4qLworCXUzMiBGQ1NfZXJyb3I7CisKKwkvKiBUaGUgbnVtYmVyIG9mIE1QRFVzIHdpdGhvdXQgUExDUCBoZWFkZXIgZXJyb3JzIHJlY2VpdmVkKi8KKwkvKiBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoaXMgaW5mb3JtYXRpb24gZWxlbWVudCB3YXMgaW50ZXJyb2dhdGVkLiAqLworCS8qIFRoaXMgZmllbGQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIHdoZW4gaXQgaXMgaW50ZXJyb2dhdGVkLiovCisJdTMyIHZhbGlkX2ZyYW1lOworCisJLyogdGhlIG51bWJlciBvZiBtaXNzZWQgc2VxdWVuY2UgbnVtYmVycyBpbiB0aGUgc3F1ZW50aWFsbHkgKi8KKwkvKiB2YWx1ZXMgb2YgZnJhbWVzIHNlcSBudW1iZXJzICovCisJdTMyIHNlcV9udW1fbWlzczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWN4X3JldmlzaW9uIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwkvKgorCSAqIFRoZSBXaUxpbmsgZmlybXdhcmUgdmVyc2lvbiwgYW4gQVNDSUkgc3RyaW5nIHgueC54LngsCisJICogdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBjdXJyZW50IGZpcm13YXJlLgorCSAqIFRoZSBsZWZ0IG1vc3QgZGlnaXQgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGEKKwkgKiBzaWduaWZpY2FudCBjaGFuZ2UgaXMgbWFkZSB0byB0aGUgZmlybXdhcmUsIHN1Y2ggYXMKKwkgKiBjb2RlIHJlZGVzaWduIG9yIG5ldyBwbGF0Zm9ybSBzdXBwb3J0LgorCSAqIFRoZSBzZWNvbmQgZGlnaXQgaXMgaW5jcmVtZW50ZWQgd2hlbiBtYWpvciBlbmhhbmNlbWVudHMKKwkgKiBhcmUgYWRkZWQgb3IgbWFqb3IgZml4ZXMgYXJlIG1hZGUuCisJICogVGhlIHRoaXJkIGRpZ2l0IGlzIGluY3JlbWVudGVkIGZvciBlYWNoIEdBIHJlbGVhc2UuCisJICogVGhlIGZvdXJ0aCBkaWdpdCBpcyBpbmNyZW1lbnRlZCBmb3IgZWFjaCBidWlsZC4KKwkgKiBUaGUgZmlyc3QgdHdvIGRpZ2l0cyBpZGVudGlmeSBhIGZpcm13YXJlIHJlbGVhc2UgdmVyc2lvbiwKKwkgKiBpbiBvdGhlciB3b3JkcywgYSB1bmlxdWUgc2V0IG9mIGZlYXR1cmVzLgorCSAqIFRoZSBmaXJzdCB0aHJlZSBkaWdpdHMgaWRlbnRpZnkgYSBHQSByZWxlYXNlLgorCSAqLworCWNoYXIgZndfdmVyc2lvblsyMF07CisKKwkvKgorCSAqIFRoaXMgNCBieXRlIGZpZWxkIHNwZWNpZmllcyB0aGUgV2lMaW5rIGhhcmR3YXJlIHZlcnNpb24uCisJICogYml0cyAwICAtIDE1OiBSZXNlcnZlZC4KKwkgKiBiaXRzIDE2IC0gMjM6IFZlcnNpb24gSUQgLSBUaGUgV2lMaW5rIHZlcnNpb24gSUQKKwkgKiAgICAgICAgICAgICAgKDEgPSBmaXJzdCBzcGluLCAyID0gc2Vjb25kIHNwaW4sIGFuZCBzbyBvbikuCisJICogYml0cyAyNCAtIDMxOiBDaGlwIElEIC0gVGhlIFdpTGluayBjaGlwIElELgorCSAqLworCXUzMiBod192ZXJzaW9uOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0gd2wxMjcxX3BzbV9tb2RlIHsKKwkvKiBBY3RpdmUgbW9kZSAqLworCVdMMTI3MV9QU01fQ0FNID0gMCwKKworCS8qIFBvd2VyIHNhdmUgbW9kZSAqLworCVdMMTI3MV9QU01fUFMgPSAxLAorCisJLyogRXh0cmVtZSBsb3cgcG93ZXIgKi8KKwlXTDEyNzFfUFNNX0VMUCA9IDIsCit9OworCitzdHJ1Y3QgYWN4X3NsZWVwX2F1dGggeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCS8qIFRoZSBzbGVlcCBsZXZlbCBhdXRob3JpemF0aW9uIG9mIHRoZSBkZXZpY2UuICovCisJLyogMCAtIEFsd2F5cyBhY3RpdmUqLworCS8qIDEgLSBQb3dlciBkb3duIG1vZGU6IGxpZ2h0IC8gZmFzdCBzbGVlcCovCisJLyogMiAtIEVMUCBtb2RlOiBEZWVwIC8gTWF4IHNsZWVwKi8KKwl1OCAgc2xlZXBfYXV0aDsKKwl1OCAgcGFkZGluZ1szXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIHsKKwlIT1NUSUZfUENJX01BU1RFUl9IT1NUX0lORElSRUNULAorCUhPU1RJRl9QQ0lfTUFTVEVSX0hPU1RfRElSRUNULAorCUhPU1RJRl9TTEFWRSwKKwlIT1NUSUZfUEtUX1JJTkcsCisJSE9TVElGX0RPTlRDQVJFID0gMHhGRgorfTsKKworI2RlZmluZSBERUZBVUxUX1VDQVNUX1BSSU9SSVRZICAgICAgICAgIDAKKyNkZWZpbmUgREVGQVVMVF9SWF9RX1BSSU9SSVRZICAgICAgICAgICAwCisjZGVmaW5lIERFRkFVTFRfTlVNX1NUQVRJT05TICAgICAgICAgICAgMQorI2RlZmluZSBERUZBVUxUX1JYUV9QUklPUklUWSAgICAgICAgICAgIDAgLyogbG93IDAgLi4gMTUgaGlnaCAgKi8KKyNkZWZpbmUgREVGQVVMVF9SWFFfVFlQRSAgICAgICAgICAgICAgICAweDA3ICAgIC8qIEFsbCBmcmFtZXMsIERhdGEvQ3RybC9NZ210ICovCisjZGVmaW5lIFRSQUNFX0JVRkZFUl9NQVhfU0laRSAgICAgICAgICAgMjU2CisKKyNkZWZpbmUgIERQX1JYX1BBQ0tFVF9SSU5HX0NIVU5LX1NJWkUgMTYwMAorI2RlZmluZSAgRFBfVFhfUEFDS0VUX1JJTkdfQ0hVTktfU0laRSAxNjAwCisjZGVmaW5lICBEUF9SWF9QQUNLRVRfUklOR19DSFVOS19OVU0gMgorI2RlZmluZSAgRFBfVFhfUEFDS0VUX1JJTkdfQ0hVTktfTlVNIDIKKyNkZWZpbmUgIERQX1RYX0NPTVBMRVRFX1RJTUVfT1VUIDIwCisjZGVmaW5lICBGV19UWF9DTVBMVF9CTE9DS19TSVpFIDE2CisKKyNkZWZpbmUgVFhfTVNEVV9MSUZFVElNRV9NSU4gICAgICAgMAorI2RlZmluZSBUWF9NU0RVX0xJRkVUSU1FX01BWCAgICAgICAzMDAwCisjZGVmaW5lIFRYX01TRFVfTElGRVRJTUVfREVGICAgICAgIDUxMgorI2RlZmluZSBSWF9NU0RVX0xJRkVUSU1FX01JTiAgICAgICAwCisjZGVmaW5lIFJYX01TRFVfTElGRVRJTUVfTUFYICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgUlhfTVNEVV9MSUZFVElNRV9ERUYgICAgICAgNTEyMDAwCisKK3N0cnVjdCBhY3hfcnhfbXNkdV9saWZldGltZSB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJLyoKKwkgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSwgaW4gVFUsIGJlZm9yZSB0aGUKKwkgKiBmaXJtd2FyZSBkaXNjYXJkcyB0aGUgTVNEVS4KKwkgKi8KKwl1MzIgbGlmZXRpbWU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIFJYIENvbmZpZyBPcHRpb25zIFRhYmxlCisgKiBCaXQJCURlZmluaXRpb24KKyAqID09PQkJPT09PT09PT09PQorICogMzE6MTQJCVJlc2VydmVkCisgKiAxMwkJQ29weSBSWCBTdGF0dXMgLSB3aGVuIHNldCwgd3JpdGUgdGhyZWUgcmVjZWl2ZSBzdGF0dXMgd29yZHMKKyAqCQl0byB0b3Agb2YgcngnZCBNUERVcy4KKyAqCQlXaGVuIGNsZWFyZWQsIGRvIG5vdCB3cml0ZSB0aHJlZSBzdGF0dXMgd29yZHMgKGFkZGVkIHJldiAxLjUpCisgKiAxMgkJUmVzZXJ2ZWQKKyAqIDExCQlSWCBDb21wbGV0ZSB1cG9uIEZDUyBlcnJvciAtIHdoZW4gc2V0LCBnaXZlIHJ4IGNvbXBsZXRlCisgKgkJaW50ZXJydXB0IGZvciBGQ1MgZXJyb3JzLCBhZnRlciB0aGUgcnggZmlsdGVyaW5nLCBlLmcuIHVuaWNhc3QKKyAqCQlmcmFtZXMgbm90IHRvIHVzIHdpdGggRkNTIGVycm9yIHdpbGwgbm90IGdlbmVyYXRlIGFuIGludGVycnVwdC4KKyAqIDEwCQlTU0lEIEZpbHRlciBFbmFibGUgLSBXaGVuIHNldCwgdGhlIFdpTGluayBkaXNjYXJkcyBhbGwgYmVhY29uLAorICoJICAgICAgICBwcm9iZSByZXF1ZXN0LCBhbmQgcHJvYmUgcmVzcG9uc2UgZnJhbWVzIHdpdGggYW4gU1NJRCB0aGF0IGRvZXMKKyAqCQlub3QgbWF0Y2ggdGhlIFNTSUQgc3BlY2lmaWVkIGJ5IHRoZSBob3N0IGluIHRoZSBTVEFSVC9KT0lOCisgKgkJY29tbWFuZC4KKyAqCQlXaGVuIGNsZWFyLCB0aGUgV2lMaW5rIHJlY2VpdmVzIGZyYW1lcyB3aXRoIGFueSBTU0lELgorICogOQkJQnJvYWRjYXN0IEZpbHRlciBFbmFibGUgLSBXaGVuIHNldCwgdGhlIFdpTGluayBkaXNjYXJkcyBhbGwKKyAqCQlicm9hZGNhc3QgZnJhbWVzLiBXaGVuIGNsZWFyLCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCByZWNlaXZlZAorICoJCWJyb2FkY2FzdCBmcmFtZXMuCisgKiA4OjYJCVJlc2VydmVkCisgKiA1CQlCU1NJRCBGaWx0ZXIgRW5hYmxlIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgZGlzY2FyZHMgYW55IGZyYW1lcworICoJCXdpdGggYSBCU1NJRCB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZSBCU1NJRCBzcGVjaWZpZWQgYnkgdGhlCisgKgkJaG9zdC4KKyAqCQlXaGVuIGNsZWFyLCB0aGUgV2lMaW5rIHJlY2VpdmVzIGZyYW1lcyBmcm9tIGFueSBCU1NJRC4KKyAqIDQJCU1BQyBBZGRyIEZpbHRlciAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIGRpc2NhcmRzIGFueSBmcmFtZXMKKyAqCQl3aXRoIGEgZGVzdGluYXRpb24gYWRkcmVzcyB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZSBNQUMgYWRkcmVzcworICoJCW9mIHRoZSBhZGFwdG9yLgorICoJCVdoZW4gY2xlYXIsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgZnJhbWVzIGRlc3RpbmVkIHRvIGFueSBNQUMKKyAqCQlhZGRyZXNzLgorICogMwkJUHJvbWlzY3VvdXMgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgdmFsaWQgZnJhbWVzCisgKgkJKGkuZS4sIGFsbCBmcmFtZXMgdGhhdCBwYXNzIHRoZSBGQ1MgY2hlY2spLgorICoJCVdoZW4gY2xlYXIsIG9ubHkgZnJhbWVzIHRoYXQgcGFzcyB0aGUgb3RoZXIgZmlsdGVycyBzcGVjaWZpZWQKKyAqCQlhcmUgcmVjZWl2ZWQuCisgKiAyCQlGQ1MgLSBXaGVuIHNldCwgdGhlIFdpTGluayBpbmNsdWRlcyB0aGUgRkNTIHdpdGggdGhlIHJlY2VpdmVkCisgKgkJZnJhbWUuCisgKgkJV2hlbiBjbGVhcmVkLCB0aGUgRkNTIGlzIGRpc2NhcmRlZC4KKyAqIDEJCVBMQ1AgaGVhZGVyIC0gV2hlbiBzZXQsIHdyaXRlIGFsbCBkYXRhIGZyb20gYmFzZWJhbmQgdG8gZnJhbWUKKyAqCQlidWZmZXIgaW5jbHVkaW5nIFBIWSBoZWFkZXIuCisgKiAwCQlSZXNlcnZlZCAtIEFsd2F5cyBlcXVhbCB0byAwLgorICoKKyAqIFJYIEZpbHRlciBPcHRpb25zIFRhYmxlCisgKiBCaXQJCURlZmluaXRpb24KKyAqID09PQkJPT09PT09PT09PQorICogMzE6MTIJCVJlc2VydmVkIC0gQWx3YXlzIGVxdWFsIHRvIDAuCisgKiAxMQkJQXNzb2NpYXRpb24gLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgYXNzb2NpYXRpb24KKyAqCQlyZWxhdGVkIGZyYW1lcyAoYXNzb2NpYXRpb24gcmVxdWVzdC9yZXNwb25zZSwgcmVhc3NvY2F0aW9uCisgKgkJcmVxdWVzdC9yZXNwb25zZSwgYW5kIGRpc2Fzc29jaWF0aW9uKS4gV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzCisgKgkJYXJlIGRpc2NhcmRlZC4KKyAqIDEwCQlBdXRoL0RlIGF1dGggLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgYXV0aGVudGljYXRpb24KKyAqCQlhbmQgZGUtYXV0aGVudGljYXRpb24gZnJhbWVzLiBXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlCisgKgkJZGlzY2FyZGVkLgorICogOQkJQmVhY29uIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIGJlYWNvbiBmcmFtZXMuCisgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCisgKiA4CQlDb250ZW50aW9uIEZyZWUgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgY29udGVudGlvbgorICoJCWZyZWUgZnJhbWVzLgorICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgorICogNwkJQ29udHJvbCAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBjb250cm9sIGZyYW1lcy4KKyAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KKyAqIDYJCURhdGEgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgZGF0YSBmcmFtZXMuCisgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCisgKiA1CQlGQ1MgRXJyb3IgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBmcmFtZXMgdGhhdCBoYXZlIEZDUworICoJCWVycm9ycy4KKyAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KKyAqIDQJCU1hbmFnZW1lbnQgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgbWFuYWdlbWVudAorICoJCWZyYW1lcy4KKyAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KKyAqIDMJCVByb2JlIFJlcXVlc3QgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgcHJvYmUgcmVxdWVzdAorICoJCWZyYW1lcy4KKyAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KKyAqIDIJCVByb2JlIFJlc3BvbnNlIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIHByb2JlCisgKgkJcmVzcG9uc2UgZnJhbWVzLgorICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgorICogMQkJUlRTL0NUUy9BQ0sgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgUlRTLCBDVFMgYW5kIEFDSworICoJCWZyYW1lcy4KKyAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KKyAqIDAJCVJzdmQgVHlwZS9TdWIgVHlwZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBmcmFtZXMKKyAqCQl0aGF0IGhhdmUgcmVzZXJ2ZWQgZnJhbWUgdHlwZXMgYW5kIHN1YiB0eXBlcyBhcyBkZWZpbmVkIGJ5IHRoZQorICoJCTgwMi4xMSBzcGVjaWZpY2F0aW9uLgorICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgorICovCitzdHJ1Y3QgYWN4X3J4X2NvbmZpZyB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTMyIGNvbmZpZ19vcHRpb25zOworCXUzMiBmaWx0ZXJfb3B0aW9uczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWN4X3BhY2tldF9kZXRlY3Rpb24geworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXUzMiB0aHJlc2hvbGQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitlbnVtIGFjeF9zbG90X3R5cGUgeworCVNMT1RfVElNRV9MT05HID0gMCwKKwlTTE9UX1RJTUVfU0hPUlQgPSAxLAorCURFRkFVTFRfU0xPVF9USU1FID0gU0xPVF9USU1FX1NIT1JULAorCU1BWF9TTE9UX1RJTUVTID0gMHhGRgorfTsKKworI2RlZmluZSBTVEFUSU9OX1dPTkVfSU5ERVggMAorCitzdHJ1Y3QgYWN4X3Nsb3QgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXU4IHdvbmVfaW5kZXg7IC8qIFJlc2VydmVkICovCisJdTggc2xvdF90aW1lOworCXU4IHJlc2VydmVkWzZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworI2RlZmluZSBBRERSRVNTX0dST1VQX01BWAkoOCkKKyNkZWZpbmUgQUREUkVTU19HUk9VUF9NQVhfTEVOCShFVEhfQUxFTiAqIEFERFJFU1NfR1JPVVBfTUFYKQorCitzdHJ1Y3QgYWN4X2RvdDExX2dycF9hZGRyX3RibCB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTggZW5hYmxlZDsKKwl1OCBudW1fZ3JvdXBzOworCXU4IHBhZFsyXTsKKwl1OCBtYWNfdGFibGVbQUREUkVTU19HUk9VUF9NQVhfTEVOXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKyNkZWZpbmUgIFJYX1RJTUVPVVRfUFNfUE9MTF9NSU4gICAgMAorI2RlZmluZSAgUlhfVElNRU9VVF9QU19QT0xMX01BWCAgICAoMjAwMDAwKQorI2RlZmluZSAgUlhfVElNRU9VVF9QU19QT0xMX0RFRiAgICAoMTUpCisjZGVmaW5lICBSWF9USU1FT1VUX1VQU0RfTUlOICAgICAgIDAKKyNkZWZpbmUgIFJYX1RJTUVPVVRfVVBTRF9NQVggICAgICAgKDIwMDAwMCkKKyNkZWZpbmUgIFJYX1RJTUVPVVRfVVBTRF9ERUYgICAgICAgKDE1KQorCitzdHJ1Y3QgYWN4X3J4X3RpbWVvdXQgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCS8qCisJICogVGhlIGxvbmdlc3QgdGltZSB0aGUgU1RBIHdpbGwgd2FpdCB0byByZWNlaXZlCisJICogdHJhZmZpYyBmcm9tIHRoZSBBUCBhZnRlciBhIFBTLXBvbGwgaGFzIGJlZW4KKwkgKiB0cmFuc21pdHRlZC4KKwkgKi8KKwl1MTYgcHNfcG9sbF90aW1lb3V0OworCisJLyoKKwkgKiBUaGUgbG9uZ2VzdCB0aW1lIHRoZSBTVEEgd2lsbCB3YWl0IHRvIHJlY2VpdmUKKwkgKiB0cmFmZmljIGZyb20gdGhlIEFQIGFmdGVyIGEgZnJhbWUgaGFzIGJlZW4gc2VudAorCSAqIGZyb20gYW4gVVBTRCBlbmFibGVkIHF1ZXVlLgorCSAqLworCXUxNiB1cHNkX3RpbWVvdXQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBSVFNfVEhSRVNIT0xEX01JTiAgICAgICAgICAgICAgMAorI2RlZmluZSBSVFNfVEhSRVNIT0xEX01BWCAgICAgICAgICAgICAgNDA5NgorI2RlZmluZSBSVFNfVEhSRVNIT0xEX0RFRiAgICAgICAgICAgICAgMjM0NworCitzdHJ1Y3QgYWN4X3J0c190aHJlc2hvbGQgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXUxNiB0aHJlc2hvbGQ7CisJdTggcGFkWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3hfYmVhY29uX2ZpbHRlcl9vcHRpb24geworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXU4IGVuYWJsZTsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBiZWFjb25zIHdpdGhvdXQgdGhlIHVuaWNhc3QgVElNCisJICogYml0IHNldCB0aGF0IHRoZSBmaXJtd2FyZSBidWZmZXJzIGJlZm9yZQorCSAqIHNpZ25hbGluZyB0aGUgaG9zdCBhYm91dCByZWFkeSBmcmFtZXMuCisJICogV2hlbiBzZXQgdG8gMCBhbmQgdGhlIGZpbHRlciBpcyBlbmFibGVkLCBiZWFjb25zCisJICogd2l0aG91dCB0aGUgdW5pY2FzdCBUSU0gYml0IHNldCBhcmUgZHJvcHBlZC4KKwkgKi8KKwl1OCBtYXhfbnVtX2JlYWNvbnM7CisJdTggcGFkWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBBQ1hCZWFjb25GaWx0ZXJFbnRyeSAobm90IDIyMSkKKyAqIEJ5dGUgT2Zmc2V0ICAgICBTaXplIChCeXRlcykgICAgRGVmaW5pdGlvbgorICogPT09PT09PT09PT0gICAgID09PT09PT09PT09PSAgICA9PT09PT09PT09CisgKiAwCQkJCTEgICAgICAgICAgICAgICBJRSBpZGVudGlmaWVyCisgKiAxICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIFRyZWF0bWVudCBiaXQgbWFzaworICoKKyAqIEFDWEJlYWNvbkZpbHRlckVudHJ5ICgyMjEpCisgKiBCeXRlIE9mZnNldCAgICAgU2l6ZSAoQnl0ZXMpICAgIERlZmluaXRpb24KKyAqID09PT09PT09PT09ICAgICA9PT09PT09PT09PT0gICAgPT09PT09PT09PQorICogMCAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICBJRSBpZGVudGlmaWVyCisgKiAxICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIFRyZWF0bWVudCBiaXQgbWFzaworICogMiAgICAgICAgICAgICAgIDMgICAgICAgICAgICAgICBPVUkKKyAqIDUgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgVHlwZQorICogNiAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICBWZXJzaW9uCisgKgorICoKKyAqIFRyZWF0bWVudCBiaXQgbWFzayAtIFRoZSBpbmZvcm1hdGlvbiBlbGVtZW50IGhhbmRsaW5nOgorICogYml0IDAgLSBUaGUgaW5mb3JtYXRpb24gZWxlbWVudCBpcyBjb21wYXJlZCBhbmQgdHJhbnNmZXJyZWQKKyAqIGluIGNhc2Ugb2YgY2hhbmdlLgorICogYml0IDEgLSBUaGUgaW5mb3JtYXRpb24gZWxlbWVudCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaG9zdAorICogd2l0aCBlYWNoIGFwcGVhcmFuY2Ugb3IgZGlzYXBwZWFyYW5jZS4KKyAqIE5vdGUgdGhhdCBib3RoIGJpdHMgY2FuIGJlIHNldCBhdCB0aGUgc2FtZSB0aW1lLgorICovCisjZGVmaW5lCUJFQUNPTl9GSUxURVJfVEFCTEVfTUFYX0lFX05VTQkJICAgICAgICgzMikKKyNkZWZpbmUgQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfVkVORE9SX1NQRUNJRklDX0lFX05VTSAoNikKKyNkZWZpbmUgQkVBQ09OX0ZJTFRFUl9UQUJMRV9JRV9FTlRSWV9TSVpFCSAgICAgICAoMikKKyNkZWZpbmUgQkVBQ09OX0ZJTFRFUl9UQUJMRV9FWFRSQV9WRU5ET1JfU1BFQ0lGSUNfSUVfU0laRSAoNikKKyNkZWZpbmUgQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfU0laRSAoKEJFQUNPTl9GSUxURVJfVEFCTEVfTUFYX0lFX05VTSAqIFwKKwkJCSAgICBCRUFDT05fRklMVEVSX1RBQkxFX0lFX0VOVFJZX1NJWkUpICsgXAorCQkJICAgKEJFQUNPTl9GSUxURVJfVEFCTEVfTUFYX1ZFTkRPUl9TUEVDSUZJQ19JRV9OVU0gKiBcCisJCQkgICAgQkVBQ09OX0ZJTFRFUl9UQUJMRV9FWFRSQV9WRU5ET1JfU1BFQ0lGSUNfSUVfU0laRSkpCisKK3N0cnVjdCBhY3hfYmVhY29uX2ZpbHRlcl9pZV90YWJsZSB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTggbnVtX2llOworCXU4IHRhYmxlW0JFQUNPTl9GSUxURVJfVEFCTEVfTUFYX1NJWkVdOworCXU4IHBhZFszXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIHsKKwlTR19FTkFCTEUgPSAwLAorCVNHX0RJU0FCTEUsCisJU0dfU0VOU0VfTk9fQUNUSVZJVFksCisJU0dfU0VOU0VfQUNUSVZFCit9OworCitzdHJ1Y3QgYWN4X2J0X3dsYW5fY29leCB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJLyoKKwkgKiAwIC0+IFBUQSBlbmFibGVkCisJICogMSAtPiBQVEEgZGlzYWJsZWQKKwkgKiAyIC0+IHNlbnNlIG5vIGFjdGl2ZSBtb2RlLCBpLmUuCisJICogICAgICBhbiBpbnRlcnJ1cHQgaXMgc2VudCB1cG9uCisJICogICAgICBCVCBhY3Rpdml0eS4KKwkgKiAzIC0+IFBUQSBpcyBzd2l0Y2hlZCBvbiBpbiByZXNwb25zZQorCSAqICAgICAgdG8gdGhlIGludGVycnVwdCBzZW5kaW5nLgorCSAqLworCXU4IGVuYWJsZTsKKwl1OCBwYWRbM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBQVEFfQU5URU5OQV9UWVBFX0RFRgkJICAoMCkKKyNkZWZpbmUgUFRBX0JUX0hQX01BWFRJTUVfREVGCQkgICgyMDAwKQorI2RlZmluZSBQVEFfV0xBTl9IUF9NQVhfVElNRV9ERUYJICAoNTAwMCkKKyNkZWZpbmUgUFRBX1NFTlNFX0RJU0FCTEVfVElNRVJfREVGCSAgKDEzNTApCisjZGVmaW5lIFBUQV9QUk9URUNUSVZFX1JYX1RJTUVfREVGCSAgKDE1MDApCisjZGVmaW5lIFBUQV9QUk9URUNUSVZFX1RYX1RJTUVfREVGCSAgKDE1MDApCisjZGVmaW5lIFBUQV9USU1FT1VUX05FWFRfQlRfTFBfUEFDS0VUX0RFRiAoMzAwMCkKKyNkZWZpbmUgUFRBX1NJR05BTElOR19UWVBFX0RFRgkJICAoMSkKKyNkZWZpbmUgUFRBX0FGSF9MRVZFUkFHRV9PTl9ERUYJCSAgKDApCisjZGVmaW5lIFBUQV9OVU1CRVJfUVVJRVRfQ1lDTEVfREVGCSAgKDApCisjZGVmaW5lIFBUQV9NQVhfTlVNX0NUU19ERUYJCSAgKDMpCisjZGVmaW5lIFBUQV9OVU1CRVJfT0ZfV0xBTl9QQUNLRVRTX0RFRgkgICgyKQorI2RlZmluZSBQVEFfTlVNQkVSX09GX0JUX1BBQ0tFVFNfREVGCSAgKDIpCisjZGVmaW5lIFBUQV9QUk9URUNUSVZFX1JYX1RJTUVfRkFTVF9ERUYJICAoMTUwMCkKKyNkZWZpbmUgUFRBX1BST1RFQ1RJVkVfVFhfVElNRV9GQVNUX0RFRgkgICgzMDAwKQorI2RlZmluZSBQVEFfQ1lDTEVfVElNRV9GQVNUX0RFRgkJICAoODcwMCkKKyNkZWZpbmUgUFRBX1JYX0ZPUl9BVkFMQU5DSEVfREVGCSAgKDUpCisjZGVmaW5lIFBUQV9FTFBfSFBfREVGCQkJICAoMCkKKyNkZWZpbmUgUFRBX0FOVElfU1RBUlZFX1BFUklPRF9ERUYJICAoNTAwKQorI2RlZmluZSBQVEFfQU5USV9TVEFSVkVfTlVNX0NZQ0xFX0RFRgkgICg0KQorI2RlZmluZSBQVEFfQUxMT1dfUEFfU0RfREVGCQkgICgxKQorI2RlZmluZSBQVEFfVElNRV9CRUZPUkVfQkVBQ09OX0RFRgkgICg2MzAwKQorI2RlZmluZSBQVEFfSFBETV9NQVhfVElNRV9ERUYJCSAgKDE2MDApCisjZGVmaW5lIFBUQV9USU1FX09VVF9ORVhUX1dMQU5fREVGCSAgKDI1NTApCisjZGVmaW5lIFBUQV9BVVRPX01PREVfTk9fQ1RTX0RFRgkgICgwKQorI2RlZmluZSBQVEFfQlRfSFBfUkVTUEVDVEVEX0RFRgkJICAoMykKKyNkZWZpbmUgUFRBX1dMQU5fUlhfTUlOX1JBVEVfREVGCSAgKDI0KQorI2RlZmluZSBQVEFfQUNLX01PREVfREVGCQkgICgxKQorCitzdHJ1Y3QgYWN4X2J0X3dsYW5fY29leF9wYXJhbSB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJLyoKKwkgKiBUaGUgbWluaW11bSByYXRlIG9mIGEgcmVjZWl2ZWQgV0xBTiBwYWNrZXQgaW4gdGhlIFNUQSwKKwkgKiBkdXJpbmcgcHJvdGVjdGl2ZSBtb2RlLCBvZiB3aGljaCBhIG5ldyBCVC1IUCByZXF1ZXN0CisJICogZHVyaW5nIHRoaXMgUnggd2lsbCBhbHdheXMgYmUgcmVzcGVjdGVkIGFuZCBnYWluIHRoZSBhbnRlbm5hLgorCSAqLworCXUzMiBtaW5fcmF0ZTsKKworCS8qIE1heCB0aW1lIHRoZSBCVCBIUCB3aWxsIGJlIHJlc3BlY3RlZC4gKi8KKwl1MTYgYnRfaHBfbWF4X3RpbWU7CisKKwkvKiBNYXggdGltZSB0aGUgV0xBTiBIUCB3aWxsIGJlIHJlc3BlY3RlZC4gKi8KKwl1MTYgd2xhbl9ocF9tYXhfdGltZTsKKworCS8qCisJICogVGhlIHRpbWUgYmV0d2VlbiB0aGUgbGFzdCBCVCBhY3Rpdml0eQorCSAqIGFuZCB0aGUgbW9tZW50IHdoZW4gdGhlIHNlbnNlIG1vZGUgcmV0dXJucworCSAqIHRvIFNFTlNFX0lOQUNUSVZFLgorCSAqLworCXUxNiBzZW5zZV9kaXNhYmxlX3RpbWVyOworCisJLyogVGltZSBiZWZvcmUgdGhlIG5leHQgQlQgSFAgaW5zdGFuY2UgKi8KKwl1MTYgcnhfdGltZV9idF9ocDsKKwl1MTYgdHhfdGltZV9idF9ocDsKKworCS8qIHJhbmdlOiAxMC0yMDAwMCAgICBkZWZhdWx0OiAxNTAwICovCisJdTE2IHJ4X3RpbWVfYnRfaHBfZmFzdDsKKwl1MTYgdHhfdGltZV9idF9ocF9mYXN0OworCisJLyogcmFuZ2U6IDIwMDAtNjU1MzUgIGRlZmF1bHQ6IDg3MDAgKi8KKwl1MTYgd2xhbl9jeWNsZV9mYXN0OworCisJLyogcmFuZ2U6IDAgLSAxNTAwMCAoTXNlYykgZGVmYXVsdDogMTAwMCAqLworCXUxNiBidF9hbnRpX3N0YXJ2YXRpb25fcGVyaW9kOworCisJLyogcmFuZ2UgNDAwLTEwMDAwKFVzZWMpIGRlZmF1bHQ6IDMwMDAgKi8KKwl1MTYgbmV4dF9idF9scF9wYWNrZXQ7CisKKwkvKiBEZWFmdWx0OiB3b3JzdCBjYXNlIGZvciBCVCBESDUgdHJhZmZpYyAqLworCXUxNiB3YWtlX3VwX2JlYWNvbjsKKworCS8qIHJhbmdlOiAwLTUwMDAwKFVzZWMpIGRlZmF1bHQ6IDEwNTAgKi8KKwl1MTYgaHBfZG1fbWF4X2d1YXJkX3RpbWU7CisKKwkvKgorCSAqIFRoaXMgaXMgdG8gcHJldmVudCBib3RoIEJUICYgV0xBTiBhbnRlbm5hCisJICogc3RhcnZhdGlvbi4KKwkgKiBSYW5nZTogMTAwLTUwMDAwKFVzZWMpIGRlZmF1bHQ6MjU1MAorCSAqLworCXUxNiBuZXh0X3dsYW5fcGFja2V0OworCisJLyogMCAtPiBzaGFyZWQgYW50ZW5uYSAqLworCXU4IGFudGVubmFfdHlwZTsKKworCS8qCisJICogMCAtPiBUSSBsZWdhY3kKKwkgKiAxIC0+IFBhbGF1CisJICovCisJdTggc2lnbmFsX3R5cGU7CisKKwkvKgorCSAqIEJUIEFGSCBzdGF0dXMKKwkgKiAwIC0+IG5vIEFGSAorCSAqIDEgLT4gZnJvbSBkZWRpY2F0ZWQgR1BJTworCSAqIDIgLT4gQUZIIG9uIChmcm9tIGhvc3QpCisJICovCisJdTggYWZoX2xldmVyYWdlX29uOworCisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGN5Y2xlcyBkdXJpbmcgd2hpY2ggbm8KKwkgKiBUWCB3aWxsIGJlIHNlbnQgYWZ0ZXIgMSBjeWNsZSBvZiBSWAorCSAqIHRyYW5zYWN0aW9uIGluIHByb3RlY3RpdmUgbW9kZQorCSAqLworCXU4IHF1aWV0X2N5Y2xlX251bTsKKworCS8qCisJICogVGhlIG1heGltdW0gbnVtYmVyIG9mIENUU3MgdGhhdCB3aWxsCisJICogYmUgc2VudCBmb3IgcmVjZWl2aW5nIFJYIHBhY2tldCBpbgorCSAqIHByb3RlY3RpdmUgbW9kZQorCSAqLworCXU4IG1heF9jdHM7CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgV0xBTiBwYWNrZXRzCisJICogdHJhbnNmZXJyZWQgaW4gY29tbW9uIG1vZGUgYmVmb3JlCisJICogc3dpdGNoaW5nIHRvIEJULgorCSAqLworCXU4IHdsYW5fcGFja2V0c19udW07CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgQlQgcGFja2V0cworCSAqIHRyYW5zZmVycmVkIGluIGNvbW1vbiBtb2RlIGJlZm9yZQorCSAqIHN3aXRjaGluZyB0byBXTEFOLgorCSAqLworCXU4IGJ0X3BhY2tldHNfbnVtOworCisJLyogcmFuZ2U6IDEtMjU1ICBkZWZhdWx0OiA1ICovCisJdTggbWlzc2VkX3J4X2F2YWxhbmNoZTsKKworCS8qIHJhbmdlOiAwLTEgICAgZGVmYXVsdDogMSAqLworCXU4IHdsYW5fZWxwX2hwOworCisJLyogcmFuZ2U6IDAgLSAxNSAgZGVmYXVsdDogNCAqLworCXU4IGJ0X2FudGlfc3RhcnZhdGlvbl9jeWNsZXM7CisKKwl1OCBhY2tfbW9kZV9kdWFsX2FudDsKKworCS8qCisJICogQWxsb3cgUEFfU0QgYXNzZXJ0aW9uL2RlLWFzc2VydGlvbgorCSAqIGR1cmluZyBlbmFibGVkIEJUIGFjdGl2aXR5LgorCSAqLworCXU4IHBhX3NkX2VuYWJsZTsKKworCS8qCisJICogRW5hYmxlL0Rpc2FibGUgUFRBIGluIGF1dG8gbW9kZToKKwkgKiBTdXBwb3J0IEJvdGggQWN0aXZlICYgUC5TIG1vZGVzCisJICovCisJdTggcHRhX2F1dG9fbW9kZV9lbmFibGU7CisKKwkvKiByYW5nZTogMCAtIDIwICBkZWZhdWx0OiAxICovCisJdTggYnRfaHBfcmVzcGVjdGVkX251bTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIENDQV9USFJTSF9FTkFCTEVfRU5FUkdZX0QgICAgICAgMHgxNDBBCisjZGVmaW5lIENDQV9USFJTSF9ESVNBQkxFX0VORVJHWV9EICAgICAgMHhGRkVGCisKK3N0cnVjdCBhY3hfZW5lcmd5X2RldGVjdGlvbiB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJLyogVGhlIFJYIENsZWFyIENoYW5uZWwgQXNzZXNzbWVudCB0aHJlc2hvbGQgaW4gdGhlIFBIWSAqLworCXUxNiByeF9jY2FfdGhyZXNob2xkOworCXU4IHR4X2VuZXJneV9kZXRlY3Rpb247CisJdTggcGFkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgQkNOX1JYX1RJTUVPVVRfREVGX1ZBTFVFICAgICAgICAxMDAwMAorI2RlZmluZSBCUk9BRENBU1RfUlhfVElNRU9VVF9ERUZfVkFMVUUgIDIwMDAwCisjZGVmaW5lIFJYX0JST0FEQ0FTVF9JTl9QU19ERUZfVkFMVUUgICAgMQorI2RlZmluZSBDT05TRUNVVElWRV9QU19QT0xMX0ZBSUxVUkVfREVGIDQKKworc3RydWN0IGFjeF9iZWFjb25fYnJvYWRjYXN0IHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1MTYgYmVhY29uX3J4X3RpbWVvdXQ7CisJdTE2IGJyb2FkY2FzdF90aW1lb3V0OworCisJLyogRW5hYmxlcyByZWNlaXZpbmcgb2YgYnJvYWRjYXN0IHBhY2tldHMgaW4gUFMgbW9kZSAqLworCXU4IHJ4X2Jyb2FkY2FzdF9pbl9wczsKKworCS8qIENvbnNlY3V0aXZlIFBTIFBvbGwgZmFpbHVyZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBob3N0ICovCisJdTggcHNfcG9sbF90aHJlc2hvbGQ7CisJdTggcGFkWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3hfZXZlbnRfbWFzayB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTMyIGV2ZW50X21hc2s7CisJdTMyIGhpZ2hfZXZlbnRfbWFzazsgLyogVW51c2VkICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBDRkdfUlhfRkNTCQlCSVQoMikKKyNkZWZpbmUgQ0ZHX1JYX0FMTF9HT09ECQlCSVQoMykKKyNkZWZpbmUgQ0ZHX1VOSV9GSUxURVJfRU4JQklUKDQpCisjZGVmaW5lIENGR19CU1NJRF9GSUxURVJfRU4JQklUKDUpCisjZGVmaW5lIENGR19NQ19GSUxURVJfRU4JQklUKDYpCisjZGVmaW5lIENGR19NQ19BRERSMF9FTgkJQklUKDcpCisjZGVmaW5lIENGR19NQ19BRERSMV9FTgkJQklUKDgpCisjZGVmaW5lIENGR19CQ19SRUpFQ1RfRU4JQklUKDkpCisjZGVmaW5lIENGR19TU0lEX0ZJTFRFUl9FTglCSVQoMTApCisjZGVmaW5lIENGR19SWF9JTlRfRkNTX0VSUk9SCUJJVCgxMSkKKyNkZWZpbmUgQ0ZHX1JYX0lOVF9FTkNSWVBURUQJQklUKDEyKQorI2RlZmluZSBDRkdfUlhfV1JfUlhfU1RBVFVTCUJJVCgxMykKKyNkZWZpbmUgQ0ZHX1JYX0ZJTFRFUl9OVUxUSQlCSVQoMTQpCisjZGVmaW5lIENGR19SWF9SRVNFUlZFCQlCSVQoMTUpCisjZGVmaW5lIENGR19SWF9USU1FU1RBTVBfVFNGCUJJVCgxNikKKworI2RlZmluZSBDRkdfUlhfUlNWX0VOCQlCSVQoMCkKKyNkZWZpbmUgQ0ZHX1JYX1JDVFNfQUNLCQlCSVQoMSkKKyNkZWZpbmUgQ0ZHX1JYX1BSU1BfRU4JCUJJVCgyKQorI2RlZmluZSBDRkdfUlhfUFJFUV9FTgkJQklUKDMpCisjZGVmaW5lIENGR19SWF9NR01UX0VOCQlCSVQoNCkKKyNkZWZpbmUgQ0ZHX1JYX0ZDU19FUlJPUglCSVQoNSkKKyNkZWZpbmUgQ0ZHX1JYX0RBVEFfRU4JCUJJVCg2KQorI2RlZmluZSBDRkdfUlhfQ1RMX0VOCQlCSVQoNykKKyNkZWZpbmUgQ0ZHX1JYX0NGX0VOCQlCSVQoOCkKKyNkZWZpbmUgQ0ZHX1JYX0JDTl9FTgkJQklUKDkpCisjZGVmaW5lIENGR19SWF9BVVRIX0VOCQlCSVQoMTApCisjZGVmaW5lIENGR19SWF9BU1NPQ19FTgkJQklUKDExKQorCisjZGVmaW5lIFNDQU5fUEFTU0lWRQkJQklUKDApCisjZGVmaW5lIFNDQU5fNUdIWl9CQU5ECQlCSVQoMSkKKyNkZWZpbmUgU0NBTl9UUklHR0VSRUQJCUJJVCgyKQorI2RlZmluZSBTQ0FOX1BSSU9SSVRZX0hJR0gJQklUKDMpCisKK3N0cnVjdCBhY3hfZmVhdHVyZV9jb25maWcgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXUzMiBvcHRpb25zOworCXUzMiBkYXRhX2Zsb3dfb3B0aW9uczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWN4X2N1cnJlbnRfdHhfcG93ZXIgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXU4ICBjdXJyZW50X3R4X3Bvd2VyOworCXU4ICBwYWRkaW5nWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0gYWN4X3dha2VfdXBfZXZlbnQgeworCVdBS0VfVVBfRVZFTlRfQkVBQ09OX0JJVE1BUAk9IDB4MDEsIC8qIFdha2Ugb24gZXZlcnkgQmVhY29uKi8KKwlXQUtFX1VQX0VWRU5UX0RUSU1fQklUTUFQCT0gMHgwMiwJLyogV2FrZSBvbiBldmVyeSBEVElNKi8KKwlXQUtFX1VQX0VWRU5UX05fRFRJTV9CSVRNQVAJPSAweDA0LCAvKiBXYWtlIG9uIGV2ZXJ5IE50aCBEVElNICovCisJV0FLRV9VUF9FVkVOVF9OX0JFQUNPTlNfQklUTUFQCT0gMHgwOCwgLyogV2FrZSBvbiBldmVyeSBOdGggQmVhY29uICovCisJV0FLRV9VUF9FVkVOVF9CSVRTX01BU0sJCT0gMHgwRgorfTsKKworc3RydWN0IGFjeF93YWtlX3VwX2NvbmRpdGlvbiB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTggd2FrZV91cF9ldmVudDsgLyogT25seSBvbmUgYml0IGNhbiBiZSBzZXQgKi8KKwl1OCBsaXN0ZW5faW50ZXJ2YWw7CisJdTggcGFkWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3hfYWlkIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwkvKgorCSAqIFRvIGJlIHNldCB3aGVuIGFzc29jaWF0ZWQgd2l0aCBhbiBBUC4KKwkgKi8KKwl1MTYgYWlkOworCXU4IHBhZFsyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIGFjeF9wcmVhbWJsZV90eXBlIHsKKwlBQ1hfUFJFQU1CTEVfTE9ORyA9IDAsCisJQUNYX1BSRUFNQkxFX1NIT1JUID0gMQorfTsKKworc3RydWN0IGFjeF9wcmVhbWJsZSB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJLyoKKwkgKiBXaGVuIHNldCwgdGhlIFdpTGluayB0cmFuc21pdHMgdGhlIGZyYW1lcyB3aXRoIGEgc2hvcnQgcHJlYW1ibGUgYW5kCisJICogd2hlbiBjbGVhcmVkLCB0aGUgV2lMaW5rIHRyYW5zbWl0cyB0aGUgZnJhbWVzIHdpdGggYSBsb25nIHByZWFtYmxlLgorCSAqLworCXU4IHByZWFtYmxlOworCXU4IHBhZGRpbmdbM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIHsKKwlDVFNQUk9URUNUX0RJU0FCTEUgPSAwLAorCUNUU1BST1RFQ1RfRU5BQkxFID0gMQorfTsKKworc3RydWN0IGFjeF9jdHNwcm90ZWN0IHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisJdTggY3RzcHJvdGVjdDsKKwl1OCBwYWRkaW5nWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3hfdHhfc3RhdGlzdGljcyB7CisJdTMyIGludGVybmFsX2Rlc2Nfb3ZlcmZsb3c7Cit9ICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3hfcnhfc3RhdGlzdGljcyB7CisJdTMyIG91dF9vZl9tZW07CisJdTMyIGhkcl9vdmVyZmxvdzsKKwl1MzIgaHdfc3R1Y2s7CisJdTMyIGRyb3BwZWQ7CisJdTMyIGZjc19lcnI7CisJdTMyIHhmcl9oaW50X3RyaWc7CisJdTMyIHBhdGhfcmVzZXQ7CisJdTMyIHJlc2V0X2NvdW50ZXI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9kbWFfc3RhdGlzdGljcyB7CisJdTMyIHJ4X3JlcXVlc3RlZDsKKwl1MzIgcnhfZXJyb3JzOworCXUzMiB0eF9yZXF1ZXN0ZWQ7CisJdTMyIHR4X2Vycm9yczsKK30gIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9pc3Jfc3RhdGlzdGljcyB7CisJLyogaG9zdCBjb21tYW5kIGNvbXBsZXRlICovCisJdTMyIGNtZF9jbXBsdDsKKworCS8qIGZpcWlzcigpICovCisJdTMyIGZpcXM7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX1JYX0hFQURFUikgKi8KKwl1MzIgcnhfaGVhZGVyczsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfUlhfQ01QTFQpICovCisJdTMyIHJ4X2NvbXBsZXRlczsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfTk9fUlhfQlVGKSAqLworCXUzMiByeF9tZW1fb3ZlcmZsb3c7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX1NfUlhfUkRZKSAqLworCXUzMiByeF9yZHlzOworCisJLyogaXJxaXNyKCkgKi8KKwl1MzIgaXJxczsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfVFhfUFJPQykgKi8KKwl1MzIgdHhfcHJvY3M7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0RFQ1JZUFRfRE9ORSkgKi8KKwl1MzIgZGVjcnlwdF9kb25lOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19ETUEwKSAqLworCXUzMiBkbWEwX2RvbmU7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX0RNQTEpICovCisJdTMyIGRtYTFfZG9uZTsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfVFhfRVhDX0NNUExUKSAqLworCXUzMiB0eF9leGNoX2NvbXBsZXRlOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19DT01NQU5EKSAqLworCXUzMiBjb21tYW5kczsKKworCS8qIChJTlRfU1RTX05EICYgSU5UX1RSSUdfUlhfUFJPQykgKi8KKwl1MzIgcnhfcHJvY3M7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX1BNXzgwMikgKi8KKwl1MzIgaHdfcG1fbW9kZV9jaGFuZ2VzOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19BQ0tOT1dMRURHRSkgKi8KKwl1MzIgaG9zdF9hY2tub3dsZWRnZXM7CisKKwkvKiAoSU5UX1NUU19ORCAmIElOVF9UUklHX1BNX1BDSSkgKi8KKwl1MzIgcGNpX3BtOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19BQ01fV0FLRVVQKSAqLworCXUzMiB3YWtldXBzOworCisJLyogKElOVF9TVFNfTkQgJiBJTlRfVFJJR19MT1dfUlNTSSkgKi8KKwl1MzIgbG93X3Jzc2k7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF93ZXBfc3RhdGlzdGljcyB7CisJLyogV0VQIGFkZHJlc3Mga2V5cyBjb25maWd1cmVkICovCisJdTMyIGFkZHJfa2V5X2NvdW50OworCisJLyogZGVmYXVsdCBrZXlzIGNvbmZpZ3VyZWQgKi8KKwl1MzIgZGVmYXVsdF9rZXlfY291bnQ7CisKKwl1MzIgcmVzZXJ2ZWQ7CisKKwkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCBXRVAga2V5IG5vdCBmb3VuZCBvbiBsb29rdXAgKi8KKwl1MzIga2V5X25vdF9mb3VuZDsKKworCS8qIG51bWJlciBvZiB0aW1lcyB0aGF0IFdFUCBrZXkgZGVjcnlwdGlvbiBmYWlsZWQgKi8KKwl1MzIgZGVjcnlwdF9mYWlsOworCisJLyogV0VQIHBhY2tldHMgZGVjcnlwdGVkICovCisJdTMyIHBhY2tldHM7CisKKwkvKiBXRVAgZGVjcnlwdCBpbnRlcnJ1cHRzICovCisJdTMyIGludGVycnVwdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIEFDWF9NSVNTRURfQkVBQ09OU19TUFJFQUQgMTAKKworc3RydWN0IGFjeF9wd3Jfc3RhdGlzdGljcyB7CisJLyogdGhlIGFtb3VudCBvZiBlbnRlcnMgaW50byBwb3dlciBzYXZlIG1vZGUgKGJvdGggUEQgJiBFTFApICovCisJdTMyIHBzX2VudGVyOworCisJLyogdGhlIGFtb3VudCBvZiBlbnRlcnMgaW50byBFTFAgbW9kZSAqLworCXUzMiBlbHBfZW50ZXI7CisKKwkvKiB0aGUgYW1vdW50IG9mIG1pc3NpbmcgYmVhY29uIGludGVycnVwdHMgdG8gdGhlIGhvc3QgKi8KKwl1MzIgbWlzc2luZ19iY25zOworCisJLyogdGhlIGFtb3VudCBvZiB3YWtlIG9uIGhvc3QtYWNjZXNzIHRpbWVzICovCisJdTMyIHdha2Vfb25faG9zdDsKKworCS8qIHRoZSBhbW91bnQgb2Ygd2FrZSBvbiB0aW1lci1leHBpcmUgKi8KKwl1MzIgd2FrZV9vbl90aW1lcl9leHA7CisKKwkvKiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCB3ZXJlIHRyYW5zbWl0dGVkIHdpdGggUFMgYml0IHNldCAqLworCXUzMiB0eF93aXRoX3BzOworCisJLyogdGhlIG51bWJlciBvZiBwYWNrZXRzIHRoYXQgd2VyZSB0cmFuc21pdHRlZCB3aXRoIFBTIGJpdCBjbGVhciAqLworCXUzMiB0eF93aXRob3V0X3BzOworCisJLyogdGhlIG51bWJlciBvZiByZWNlaXZlZCBiZWFjb25zICovCisJdTMyIHJjdmRfYmVhY29uczsKKworCS8qIHRoZSBudW1iZXIgb2YgZW50ZXJpbmcgaW50byBQb3dlck9uIChwb3dlciBzYXZlIG9mZikgKi8KKwl1MzIgcG93ZXJfc2F2ZV9vZmY7CisKKwkvKiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW50byBwb3dlciBzYXZlIG1vZGUgKi8KKwl1MTYgZW5hYmxlX3BzOworCisJLyoKKwkgKiB0aGUgbnVtYmVyIG9mIGV4aXRzIGZyb20gcG93ZXIgc2F2ZSwgbm90IGluY2x1ZGluZyBmYWlsZWQgUFMKKwkgKiB0cmFuc2l0aW9ucworCSAqLworCXUxNiBkaXNhYmxlX3BzOworCisJLyoKKwkgKiB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBUU0YgY291bnRlciB3YXMgYWRqdXN0ZWQgYmVjYXVzZQorCSAqIG9mIGRyaWZ0CisJICovCisJdTMyIGZpeF90c2ZfcHM7CisKKwkvKiBHaXZlcyBzdGF0aXN0aWNzIGFib3V0IHRoZSBzcHJlYWQgY29udGludW91cyBtaXNzZWQgYmVhY29ucy4KKwkgKiBUaGUgMTYgTFNCIGFyZSBkZWRpY2F0ZWQgZm9yIHRoZSBQUyBtb2RlLgorCSAqIFRoZSAxNiBNU0IgYXJlIGRlZGljYXRlZCBmb3IgdGhlIFBTIG1vZGUuCisJICogY29udF9taXNzX2JjbnNfc3ByZWFkWzBdIC0gc2luZ2xlIG1pc3NlZCBiZWFjb24uCisJICogY29udF9taXNzX2JjbnNfc3ByZWFkWzFdIC0gdHdvIGNvbnRpbnVvdXMgbWlzc2VkIGJlYWNvbnMuCisJICogY29udF9taXNzX2JjbnNfc3ByZWFkWzJdIC0gdGhyZWUgY29udGludW91cyBtaXNzZWQgYmVhY29ucy4KKwkgKiAuLi4KKwkgKiBjb250X21pc3NfYmNuc19zcHJlYWRbOV0gLSB0ZW4gYW5kIG1vcmUgY29udGludW91cyBtaXNzZWQgYmVhY29ucy4KKwkqLworCXUzMiBjb250X21pc3NfYmNuc19zcHJlYWRbQUNYX01JU1NFRF9CRUFDT05TX1NQUkVBRF07CisKKwkvKiB0aGUgbnVtYmVyIG9mIGJlYWNvbnMgaW4gYXdha2UgbW9kZSAqLworCXUzMiByY3ZkX2F3YWtlX2JlYWNvbnM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9taWNfc3RhdGlzdGljcyB7CisJdTMyIHJ4X3BrdHM7CisJdTMyIGNhbGNfZmFpbHVyZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWN4X2Flc19zdGF0aXN0aWNzIHsKKwl1MzIgZW5jcnlwdF9mYWlsOworCXUzMiBkZWNyeXB0X2ZhaWw7CisJdTMyIGVuY3J5cHRfcGFja2V0czsKKwl1MzIgZGVjcnlwdF9wYWNrZXRzOworCXUzMiBlbmNyeXB0X2ludGVycnVwdDsKKwl1MzIgZGVjcnlwdF9pbnRlcnJ1cHQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9ldmVudF9zdGF0aXN0aWNzIHsKKwl1MzIgaGVhcnRfYmVhdDsKKwl1MzIgY2FsaWJyYXRpb247CisJdTMyIHJ4X21pc21hdGNoOworCXUzMiByeF9tZW1fZW1wdHk7CisJdTMyIHJ4X3Bvb2w7CisJdTMyIG9vbV9sYXRlOworCXUzMiBwaHlfdHJhbnNtaXRfZXJyb3I7CisJdTMyIHR4X3N0dWNrOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3hfcHNfc3RhdGlzdGljcyB7CisJdTMyIHBzcG9sbF90aW1lb3V0czsKKwl1MzIgdXBzZF90aW1lb3V0czsKKwl1MzIgdXBzZF9tYXhfc3B0aW1lOworCXUzMiB1cHNkX21heF9hcHR1cm47CisJdTMyIHBzcG9sbF9tYXhfYXB0dXJuOworCXUzMiBwc3BvbGxfdXRpbGl6YXRpb247CisJdTMyIHVwc2RfdXRpbGl6YXRpb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9yeHBpcGVfc3RhdGlzdGljcyB7CisJdTMyIHJ4X3ByZXBfYmVhY29uX2Ryb3A7CisJdTMyIGRlc2NyX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKKwl1MzIgYmVhY29uX2J1ZmZlcl90aHJlc19ob3N0X2ludF90cmlnX3J4X2RhdGE7CisJdTMyIG1pc3NlZF9iZWFjb25faG9zdF9pbnRfdHJpZ19yeF9kYXRhOworCXUzMiB0eF94ZnJfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBhY3hfc3RhdGlzdGljcyB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJc3RydWN0IGFjeF90eF9zdGF0aXN0aWNzIHR4OworCXN0cnVjdCBhY3hfcnhfc3RhdGlzdGljcyByeDsKKwlzdHJ1Y3QgYWN4X2RtYV9zdGF0aXN0aWNzIGRtYTsKKwlzdHJ1Y3QgYWN4X2lzcl9zdGF0aXN0aWNzIGlzcjsKKwlzdHJ1Y3QgYWN4X3dlcF9zdGF0aXN0aWNzIHdlcDsKKwlzdHJ1Y3QgYWN4X3B3cl9zdGF0aXN0aWNzIHB3cjsKKwlzdHJ1Y3QgYWN4X2Flc19zdGF0aXN0aWNzIGFlczsKKwlzdHJ1Y3QgYWN4X21pY19zdGF0aXN0aWNzIG1pYzsKKwlzdHJ1Y3QgYWN4X2V2ZW50X3N0YXRpc3RpY3MgZXZlbnQ7CisJc3RydWN0IGFjeF9wc19zdGF0aXN0aWNzIHBzOworCXN0cnVjdCBhY3hfcnhwaXBlX3N0YXRpc3RpY3MgcnhwaXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgQUNYX01BWF9SQVRFX0NMQVNTRVMgICAgICAgOAorI2RlZmluZSBBQ1hfUkFURV9NQVNLX1VOU1BFQ0lGSUVEICAwCisjZGVmaW5lIEFDWF9SQVRFX01BU0tfQUxMICAgICAgICAgIDB4MWVmZgorI2RlZmluZSBBQ1hfUkFURV9SRVRSWV9MSU1JVCAgICAgICAxMAorCitzdHJ1Y3QgYWN4X3JhdGVfY2xhc3MgeworCXUzMiBlbmFibGVkX3JhdGVzOworCXU4IHNob3J0X3JldHJ5X2xpbWl0OworCXU4IGxvbmdfcmV0cnlfbGltaXQ7CisJdTggYWZsYWdzOworCXU4IHJlc2VydmVkOworfTsKKworc3RydWN0IGFjeF9yYXRlX3BvbGljeSB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTMyIHJhdGVfY2xhc3NfY250OworCXN0cnVjdCBhY3hfcmF0ZV9jbGFzcyByYXRlX2NsYXNzW0FDWF9NQVhfUkFURV9DTEFTU0VTXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFdMMTI3MV9BQ1hfQUNfQ09VTlQgNAorCitzdHJ1Y3QgYWN4X2FjX2NmZyB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCXU4IGFjOworCXU4IGN3X21pbjsKKwl1MTYgY3dfbWF4OworCXU4IGFpZnNuOworCXU4IHJlc2VydmVkOworCXUxNiB0eF9vcF9saW1pdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIHdsMTI3MV9hY3hfYWMgeworCVdMMTI3MV9BQ1hfQUNfQkUgPSAwLAorCVdMMTI3MV9BQ1hfQUNfQksgPSAxLAorCVdMMTI3MV9BQ1hfQUNfVkkgPSAyLAorCVdMMTI3MV9BQ1hfQUNfVk8gPSAzLAorCVdMMTI3MV9BQ1hfQUNfQ1RTMlNFTEYgPSA0LAorCVdMMTI3MV9BQ1hfQUNfQU5ZX1RJRCA9IDB4MUYsCisJV0wxMjcxX0FDWF9BQ19JTlZBTElEID0gMHhGRiwKK307CisKK2VudW0gd2wxMjcxX2FjeF9wc19zY2hlbWUgeworCVdMMTI3MV9BQ1hfUFNfU0NIRU1FX0xFR0FDWSA9IDAsCisJV0wxMjcxX0FDWF9QU19TQ0hFTUVfVVBTRF9UUklHR0VSID0gMSwKKwlXTDEyNzFfQUNYX1BTX1NDSEVNRV9MRUdBQ1lfUFNQT0xMID0gMiwKKwlXTDEyNzFfQUNYX1BTX1NDSEVNRV9TQVBTRCA9IDMsCit9OworCitlbnVtIHdsMTI3MV9hY3hfYWNrX3BvbGljeSB7CisJV0wxMjcxX0FDWF9BQ0tfUE9MSUNZX0xFR0FDWSA9IDAsCisJV0wxMjcxX0FDWF9BQ0tfUE9MSUNZX05PX0FDSyA9IDEsCisJV0wxMjcxX0FDWF9BQ0tfUE9MSUNZX0JMT0NLID0gMiwKK307CisKKyNkZWZpbmUgV0wxMjcxX0FDWF9USURfQ09VTlQgNworCitzdHJ1Y3QgYWN4X3RpZF9jb25maWcgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKwl1OCBxdWV1ZV9pZDsKKwl1OCBjaGFubmVsX3R5cGU7CisJdTggdHNpZDsKKwl1OCBwc19zY2hlbWU7CisJdTggYWNrX3BvbGljeTsKKwl1OCBwYWRkaW5nWzNdOworCXUzMiBhcHNkX2NvbmZbMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGFjeF9mcmFnX3RocmVzaG9sZCB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCXUxNiBmcmFnX3RocmVzaG9sZDsKKwl1OCBwYWRkaW5nWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgV0wxMjcxX0FDWF9UWF9DT01QTF9USU1FT1VUICAgNQorI2RlZmluZSBXTDEyNzFfQUNYX1RYX0NPTVBMX1RIUkVTSE9MRCA1CisKK3N0cnVjdCBhY3hfdHhfY29uZmlnX29wdGlvbnMgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKwl1MTYgdHhfY29tcGxfdGltZW91dDsgICAgIC8qIG1zZWMgKi8KKwl1MTYgdHhfY29tcGxfdGhyZXNob2xkOyAgIC8qIG51bWJlciBvZiBwYWNrZXRzICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBBQ1hfUlhfTUVNX0JMT0NLUyAgICAgNjQKKyNkZWZpbmUgQUNYX1RYX01JTl9NRU1fQkxPQ0tTIDY0CisjZGVmaW5lIEFDWF9UWF9ERVNDUklQVE9SUyAgICAzMgorI2RlZmluZSBBQ1hfTlVNX1NTSURfUFJPRklMRVMgMQorCitzdHJ1Y3Qgd2wxMjcxX2FjeF9jb25maWdfbWVtb3J5IHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1OCByeF9tZW1fYmxvY2tfbnVtOworCXU4IHR4X21pbl9tZW1fYmxvY2tfbnVtOworCXU4IG51bV9zdGF0aW9uczsKKwl1OCBudW1fc3NpZF9wcm9maWxlczsKKwl1MzIgdG90YWxfdHhfZGVzY3JpcHRvcnM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHdsMTI3MV9hY3hfbWVtX21hcCB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdm9pZCAqY29kZV9zdGFydDsKKwl2b2lkICpjb2RlX2VuZDsKKworCXZvaWQgKndlcF9kZWZrZXlfc3RhcnQ7CisJdm9pZCAqd2VwX2RlZmtleV9lbmQ7CisKKwl2b2lkICpzdGFfdGFibGVfc3RhcnQ7CisJdm9pZCAqc3RhX3RhYmxlX2VuZDsKKworCXZvaWQgKnBhY2tldF90ZW1wbGF0ZV9zdGFydDsKKwl2b2lkICpwYWNrZXRfdGVtcGxhdGVfZW5kOworCisJLyogQWRkcmVzcyBvZiB0aGUgVFggcmVzdWx0IGludGVyZmFjZSAoY29udHJvbCBibG9jaykgKi8KKwl1MzIgdHhfcmVzdWx0OworCXUzMiB0eF9yZXN1bHRfcXVldWVfc3RhcnQ7CisKKwl2b2lkICpxdWV1ZV9tZW1vcnlfc3RhcnQ7CisJdm9pZCAqcXVldWVfbWVtb3J5X2VuZDsKKworCXUzMiBwYWNrZXRfbWVtb3J5X3Bvb2xfc3RhcnQ7CisJdTMyIHBhY2tldF9tZW1vcnlfcG9vbF9lbmQ7CisKKwl2b2lkICpkZWJ1Z19idWZmZXIxX3N0YXJ0OworCXZvaWQgKmRlYnVnX2J1ZmZlcjFfZW5kOworCisJdm9pZCAqZGVidWdfYnVmZmVyMl9zdGFydDsKKwl2b2lkICpkZWJ1Z19idWZmZXIyX2VuZDsKKworCS8qIE51bWJlciBvZiBibG9ja3MgRlcgYWxsb2NhdGVkIGZvciBUWCBwYWNrZXRzICovCisJdTMyIG51bV90eF9tZW1fYmxvY2tzOworCisJLyogTnVtYmVyIG9mIGJsb2NrcyBGVyBhbGxvY2F0ZWQgZm9yIFJYIHBhY2tldHMgKi8KKwl1MzIgbnVtX3J4X21lbV9ibG9ja3M7CisKKwkvKiB0aGUgZm9sbG93aW5nIDQgZmllbGRzIGFyZSB2YWxpZCBpbiBTTEFWRSBtb2RlIG9ubHkgKi8KKwl1OCAqdHhfY2J1ZjsKKwl1OCAqcnhfY2J1ZjsKKwl2b2lkICpyeF9jdHJsOworCXZvaWQgKnR4X2N0cmw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSB3bDEyNzFfYWN4X3J4X3F1ZXVlX3R5cGUgeworCVJYX1FVRVVFX1RZUEVfUlhfTE9XX1BSSU9SSVRZLCAgICAvKiBBbGwgZXhjZXB0IHRoZSBoaWdoIHByaW9yaXR5ICovCisJUlhfUVVFVUVfVFlQRV9SWF9ISUdIX1BSSU9SSVRZLCAgIC8qIE1hbmFnZW1lbnQgYW5kIHZvaWNlIHBhY2tldHMgKi8KKwlSWF9RVUVVRV9UWVBFX05VTSwKKwlSWF9RVUVVRV9UWVBFX01BWCA9IFVTSE9SVF9NQVgKK307CisKKyNkZWZpbmUgV0wxMjcxX1JYX0lOVFJfVEhSRVNIT0xEX0RFRiAgMCAgICAgICAvKiBubyBwYWNpbmcsIHNlbmQgaW50ZXJydXB0IG9uCisJCQkJCSAgICAgICAqIGV2ZXJ5IGV2ZW50ICovCisjZGVmaW5lIFdMMTI3MV9SWF9JTlRSX1RIUkVTSE9MRF9NSU4gIDAKKyNkZWZpbmUgV0wxMjcxX1JYX0lOVFJfVEhSRVNIT0xEX01BWCAgMTUKKworI2RlZmluZSBXTDEyNzFfUlhfSU5UUl9USU1FT1VUX0RFRiAgICA1CisjZGVmaW5lIFdMMTI3MV9SWF9JTlRSX1RJTUVPVVRfTUlOICAgIDEKKyNkZWZpbmUgV0wxMjcxX1JYX0lOVFJfVElNRU9VVF9NQVggICAgMTAwCisKK3N0cnVjdCB3bDEyNzFfYWN4X3J4X2NvbmZpZ19vcHQgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXUxNiBtYmxrX3RocmVzaG9sZDsKKwl1MTYgdGhyZXNob2xkOworCXUxNiB0aW1lb3V0OworCXU4IHF1ZXVlX3R5cGU7CisJdTggcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSB7CisJQUNYX1dBS0VfVVBfQ09ORElUSU9OUyAgICAgID0gMHgwMDAyLAorCUFDWF9NRU1fQ0ZHICAgICAgICAgICAgICAgICA9IDB4MDAwMywKKwlBQ1hfU0xPVCAgICAgICAgICAgICAgICAgICAgPSAweDAwMDQsCisJQUNYX0FDX0NGRyAgICAgICAgICAgICAgICAgID0gMHgwMDA3LAorCUFDWF9NRU1fTUFQICAgICAgICAgICAgICAgICA9IDB4MDAwOCwKKwlBQ1hfQUlEICAgICAgICAgICAgICAgICAgICAgPSAweDAwMEEsCisJLyogQUNYX0ZXX1JFViBpcyBtaXNzaW5nIGluIHRoZSByZWYgZHJpdmVyLCBidXQgc2VlbXMgdG8gd29yayAqLworCUFDWF9GV19SRVYgICAgICAgICAgICAgICAgICA9IDB4MDAwRCwKKwlBQ1hfTUVESVVNX1VTQUdFICAgICAgICAgICAgPSAweDAwMEYsCisJQUNYX1JYX0NGRyAgICAgICAgICAgICAgICAgID0gMHgwMDEwLAorCUFDWF9UWF9RVUVVRV9DRkcgICAgICAgICAgICA9IDB4MDAxMSwgLyogRklYTUU6IG9ubHkgdXNlZCBieSB3bDEyNTEgKi8KKwlBQ1hfU1RBVElTVElDUyAgICAgICAgICAgICAgPSAweDAwMTMsIC8qIERlYnVnIEFQSSAqLworCUFDWF9QV1JfQ09OU1VNUFRJT05fU1RBVElTVElDUyA9IDB4MDAxNCwKKwlBQ1hfRkVBVFVSRV9DRkcgICAgICAgICAgICAgPSAweDAwMTUsCisJQUNYX1RJRF9DRkcgICAgICAgICAgICAgICAgID0gMHgwMDFBLAorCUFDWF9QU19SWF9TVFJFQU1JTkcgICAgICAgICA9IDB4MDAxQiwKKwlBQ1hfQkVBQ09OX0ZJTFRFUl9PUFQgICAgICAgPSAweDAwMUYsCisJQUNYX05PSVNFX0hJU1QgICAgICAgICAgICAgID0gMHgwMDIxLAorCUFDWF9IREtfVkVSU0lPTiAgICAgICAgICAgICA9IDB4MDAyMiwgLyogPz8/ICovCisJQUNYX1BEX1RIUkVTSE9MRCAgICAgICAgICAgID0gMHgwMDIzLAorCUFDWF9UWF9DT05GSUdfT1BUICAgICAgICAgICA9IDB4MDAyNCwKKwlBQ1hfQ0NBX1RIUkVTSE9MRCAgICAgICAgICAgPSAweDAwMjUsCisJQUNYX0VWRU5UX01CT1hfTUFTSyAgICAgICAgID0gMHgwMDI2LAorCUFDWF9DT05OX01PTklUX1BBUkFNUyAgICAgICA9IDB4MDAyRCwKKwlBQ1hfQ09OU19UWF9GQUlMVVJFICAgICAgICAgPSAweDAwMkYsCisJQUNYX0JDTl9EVElNX09QVElPTlMgICAgICAgID0gMHgwMDMxLAorCUFDWF9TR19FTkFCTEUgICAgICAgICAgICAgICA9IDB4MDAzMiwKKwlBQ1hfU0dfQ0ZHICAgICAgICAgICAgICAgICAgPSAweDAwMzMsCisJQUNYX0JFQUNPTl9GSUxURVJfVEFCTEUgICAgID0gMHgwMDM4LAorCUFDWF9BUlBfSVBfRklMVEVSICAgICAgICAgICA9IDB4MDAzOSwKKwlBQ1hfUk9BTUlOR19TVEFUSVNUSUNTX1RCTCAgPSAweDAwM0IsCisJQUNYX1JBVEVfUE9MSUNZICAgICAgICAgICAgID0gMHgwMDNELAorCUFDWF9DVFNfUFJPVEVDVElPTiAgICAgICAgICA9IDB4MDAzRSwKKwlBQ1hfU0xFRVBfQVVUSCAgICAgICAgICAgICAgPSAweDAwM0YsCisJQUNYX1BSRUFNQkxFX1RZUEUJICAgID0gMHgwMDQwLAorCUFDWF9FUlJPUl9DTlQgICAgICAgICAgICAgICA9IDB4MDA0MSwKKwlBQ1hfSUJTU19GSUxURVIJCSAgICA9IDB4MDA0NCwKKwlBQ1hfU0VSVklDRV9QRVJJT0RfVElNRU9VVCAgPSAweDAwNDUsCisJQUNYX1RTRl9JTkZPICAgICAgICAgICAgICAgID0gMHgwMDQ2LAorCUFDWF9DT05GSUdfUFNfV01NICAgICAgICAgICA9IDB4MDA0OSwKKwlBQ1hfRU5BQkxFX1JYX0RBVEFfRklMVEVSICAgPSAweDAwNEEsCisJQUNYX1NFVF9SWF9EQVRBX0ZJTFRFUiAgICAgID0gMHgwMDRCLAorCUFDWF9HRVRfREFUQV9GSUxURVJfU1RBVElTVElDUyA9IDB4MDA0QywKKwlBQ1hfUlhfQ09ORklHX09QVCAgICAgICAgICAgPSAweDAwNEUsCisJQUNYX0ZSQUdfQ0ZHICAgICAgICAgICAgICAgID0gMHgwMDRGLAorCUFDWF9CRVRfRU5BQkxFICAgICAgICAgICAgICA9IDB4MDA1MCwKKwlBQ1hfUlNTSV9TTlJfVFJJR0dFUiAgICAgICAgPSAweDAwNTEsCisJQUNYX1JTU0lfU05SX1dFSUdIVFMgICAgICAgID0gMHgwMDUxLAorCUFDWF9LRUVQX0FMSVZFX01PREUgICAgICAgICA9IDB4MDA1MiwKKwlBQ1hfU0VUX0tFRVBfQUxJVkVfQ09ORklHICAgPSAweDAwNTQsCisJQUNYX0JBX1NFU1NJT05fUkVTUE9OREVSX1BPTElDWSA9IDB4MDA1NSwKKwlBQ1hfQkFfU0VTU0lPTl9JTklUSUFUT1JfUE9MSUNZID0gMHgwMDU2LAorCUFDWF9QRUVSX0hUX0NBUCAgICAgICAgICAgICA9IDB4MDA1NywKKwlBQ1hfSFRfQlNTX09QRVJBVElPTiAgICAgICAgPSAweDAwNTgsCisJQUNYX0NPRVhfQUNUSVZJVFkgICAgICAgICAgID0gMHgwMDU5LAorCURPVDExX1JYX01TRFVfTElGRV9USU1FICAgICA9IDB4MTAwNCwKKwlET1QxMV9DVVJfVFhfUFdSICAgICAgICAgICAgPSAweDEwMEQsCisJRE9UMTFfUlhfRE9UMTFfTU9ERSAgICAgICAgID0gMHgxMDEyLAorCURPVDExX1JUU19USFJFU0hPTEQgICAgICAgICA9IDB4MTAxMywKKwlET1QxMV9HUk9VUF9BRERSRVNTX1RCTCAgICAgPSAweDEwMTQsCisKKwlNQVhfRE9UMTFfSUUgPSBET1QxMV9HUk9VUF9BRERSRVNTX1RCTCwKKworCU1BWF9JRSA9IDB4RkZGRgorfTsKKworCitpbnQgd2wxMjcxX2FjeF93YWtlX3VwX2NvbmRpdGlvbnMoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHdha2VfdXBfZXZlbnQsCisJCQkJICB1OCBsaXN0ZW5faW50ZXJ2YWwpOworaW50IHdsMTI3MV9hY3hfc2xlZXBfYXV0aChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggc2xlZXBfYXV0aCk7CitpbnQgd2wxMjcxX2FjeF9md192ZXJzaW9uKHN0cnVjdCB3bDEyNzEgKndsLCBjaGFyICpidWYsIHNpemVfdCBsZW4pOworaW50IHdsMTI3MV9hY3hfdHhfcG93ZXIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBwb3dlcik7CitpbnQgd2wxMjcxX2FjeF9mZWF0dXJlX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9tZW1fbWFwKHN0cnVjdCB3bDEyNzEgKndsLAorCQkgICAgICAgc3RydWN0IGFjeF9oZWFkZXIgKm1lbV9tYXAsIHNpemVfdCBsZW4pOworaW50IHdsMTI3MV9hY3hfcnhfbXNkdV9saWZlX3RpbWUoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBsaWZlX3RpbWUpOworaW50IHdsMTI3MV9hY3hfcnhfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgY29uZmlnLCB1MzIgZmlsdGVyKTsKK2ludCB3bDEyNzFfYWN4X3BkX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9zbG90KHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIGFjeF9zbG90X3R5cGUgc2xvdF90aW1lKTsKK2ludCB3bDEyNzFfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IHJ0c190aHJlc2hvbGQpOworaW50IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl90YWJsZShzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9zZ19lbmFibGUoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfc2dfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X2NjYV90aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfYmNuX2R0aW1fb3B0aW9ucyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9haWQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhaWQpOworaW50IHdsMTI3MV9hY3hfZXZlbnRfbWJveF9tYXNrKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgZXZlbnRfbWFzayk7CitpbnQgd2wxMjcxX2FjeF9zZXRfcHJlYW1ibGUoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gYWN4X3ByZWFtYmxlX3R5cGUgcHJlYW1ibGUpOworaW50IHdsMTI3MV9hY3hfY3RzX3Byb3RlY3Qoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkgICAgZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIGN0c3Byb3RlY3QpOworaW50IHdsMTI3MV9hY3hfc3RhdGlzdGljcyhzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IGFjeF9zdGF0aXN0aWNzICpzdGF0cyk7CitpbnQgd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X2FjX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF90aWRfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X3R4X2NvbmZpZ19vcHRpb25zKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X21lbV9jZmcoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfaW5pdF9tZW1fY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X2luaXRfcnhfaW50ZXJydXB0KHN0cnVjdCB3bDEyNzEgKndsKTsKKworI2VuZGlmIC8qIF9fV0wxMjcxX0FDWF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyOGVmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jCkBAIC0wLDAgKzEsNTQxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgIndsMTI3MV9hY3guaCIKKyNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjcxX2Jvb3QuaCIKKyNpbmNsdWRlICJ3bDEyNzFfc3BpLmgiCisjaW5jbHVkZSAid2wxMjcxX2V2ZW50LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbl9zZXQgcGFydF90YWJsZVtQQVJUX1RBQkxFX0xFTl0gPSB7CisJW1BBUlRfRE9XTl0gPSB7CisJCS5tZW0gPSB7CisJCQkuc3RhcnQgPSAweDAwMDAwMDAwLAorCQkJLnNpemUgID0gMHgwMDAxNzdjMAorCQl9LAorCQkucmVnID0geworCQkJLnN0YXJ0ID0gUkVHSVNURVJTX0JBU0UsCisJCQkuc2l6ZSAgPSAweDAwMDA4ODAwCisJCX0sCisJfSwKKworCVtQQVJUX1dPUktdID0geworCQkubWVtID0geworCQkJLnN0YXJ0ID0gMHgwMDA0MDAwMCwKKwkJCS5zaXplICA9IDB4MDAwMTRmYzAKKwkJfSwKKwkJLnJlZyA9IHsKKwkJCS5zdGFydCA9IFJFR0lTVEVSU19CQVNFLAorCQkJLnNpemUgID0gMHgwMDAwYjAwMAorCQl9LAorCX0sCisKKwlbUEFSVF9EUlBXXSA9IHsKKwkJLm1lbSA9IHsKKwkJCS5zdGFydCA9IDB4MDAwNDAwMDAsCisJCQkuc2l6ZSAgPSAweDAwMDE0ZmMwCisJCX0sCisJCS5yZWcgPSB7CisJCQkuc3RhcnQgPSBEUlBXX0JBU0UsCisJCQkuc2l6ZSAgPSAweDAwMDA2MDAwCisJCX0KKwl9Cit9OworCitzdGF0aWMgdm9pZCB3bDEyNzFfYm9vdF9zZXRfZWNwdV9jdHJsKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgZmxhZykKK3sKKwl1MzIgY3B1X2N0cmw7CisKKwkvKiAxMC41LjAgcnVuIHRoZSBmaXJtd2FyZSAoSSkgKi8KKwljcHVfY3RybCA9IHdsMTI3MV9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCk7CisKKwkvKiAxMC41LjEgcnVuIHRoZSBmaXJtd2FyZSAoSUkpICovCisJY3B1X2N0cmwgfD0gZmxhZzsKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfRUNQVV9DT05UUk9MLCBjcHVfY3RybCk7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9ib290X2Z3X3ZlcnNpb24oc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9zdGF0aWNfZGF0YSBzdGF0aWNfZGF0YTsKKworCXdsMTI3MV9zcGlfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsCisJCQkgICAgJnN0YXRpY19kYXRhLCBzaXplb2Yoc3RhdGljX2RhdGEpKTsKKworCXN0cm5jcHkod2wtPmNoaXAuZndfdmVyLCBzdGF0aWNfZGF0YS5md192ZXJzaW9uLAorCQlzaXplb2Yod2wtPmNoaXAuZndfdmVyKSk7CisKKwkvKiBtYWtlIHN1cmUgdGhlIHN0cmluZyBpcyBOVUxMLXRlcm1pbmF0ZWQgKi8KKwl3bC0+Y2hpcC5md192ZXJbc2l6ZW9mKHdsLT5jaGlwLmZ3X3ZlcikgLSAxXSA9ICdcMCc7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2Jvb3RfdXBsb2FkX2Zpcm13YXJlX2NodW5rKHN0cnVjdCB3bDEyNzEgKndsLCB2b2lkICpidWYsCisJCQkJCSAgICAgc2l6ZV90IGZ3X2RhdGFfbGVuLCB1MzIgZGVzdCkKK3sKKwlpbnQgYWRkciwgY2h1bmtfbnVtLCBwYXJ0aXRpb25fbGltaXQ7CisJdTggKnA7CisKKwkvKiB3aGFsX0Z3Q3RybF9Mb2FkRndJbWFnZVNtKCkgKi8KKworCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAic3RhcnRpbmcgZmlybXdhcmUgdXBsb2FkIik7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImZ3X2RhdGFfbGVuICV6ZCBjaHVua19zaXplICVkIiwKKwkJICAgICBmd19kYXRhX2xlbiwgQ0hVTktfU0laRSk7CisKKworCWlmICgoZndfZGF0YV9sZW4gJSA0KSAhPSAwKSB7CisJCXdsMTI3MV9lcnJvcigiZmlybXdhcmUgbGVuZ3RoIG5vdCBtdWx0aXBsZSBvZiBmb3VyIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLCBkZXN0LAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfRE9XTl0ubWVtLnNpemUsCisJCQkgICAgIHBhcnRfdGFibGVbUEFSVF9ET1dOXS5yZWcuc3RhcnQsCisJCQkgICAgIHBhcnRfdGFibGVbUEFSVF9ET1dOXS5yZWcuc2l6ZSk7CisKKwkvKiAxMC4xIHNldCBwYXJ0aXRpb24gbGltaXQgYW5kIGNodW5rIG51bSAqLworCWNodW5rX251bSA9IDA7CisJcGFydGl0aW9uX2xpbWl0ID0gcGFydF90YWJsZVtQQVJUX0RPV05dLm1lbS5zaXplOworCisJd2hpbGUgKGNodW5rX251bSA8IGZ3X2RhdGFfbGVuIC8gQ0hVTktfU0laRSkgeworCQkvKiAxMC4yIHVwZGF0ZSBwYXJ0aXRpb24sIGlmIG5lZWRlZCAqLworCQlhZGRyID0gZGVzdCArIChjaHVua19udW0gKyAyKSAqIENIVU5LX1NJWkU7CisJCWlmIChhZGRyID4gcGFydGl0aW9uX2xpbWl0KSB7CisJCQlhZGRyID0gZGVzdCArIGNodW5rX251bSAqIENIVU5LX1NJWkU7CisJCQlwYXJ0aXRpb25fbGltaXQgPSBjaHVua19udW0gKiBDSFVOS19TSVpFICsKKwkJCQlwYXJ0X3RhYmxlW1BBUlRfRE9XTl0ubWVtLnNpemU7CisKKwkJCS8qIEZJWE1FOiBPdmVyIDgwIGNoYXJzISAqLworCQkJd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsCisJCQkJCSAgICAgYWRkciwKKwkJCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfRE9XTl0ubWVtLnNpemUsCisJCQkJCSAgICAgcGFydF90YWJsZVtQQVJUX0RPV05dLnJlZy5zdGFydCwKKwkJCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfRE9XTl0ucmVnLnNpemUpOworCQl9CisKKwkJLyogMTAuMyB1cGxvYWQgdGhlIGNodW5rICovCisJCWFkZHIgPSBkZXN0ICsgY2h1bmtfbnVtICogQ0hVTktfU0laRTsKKwkJcCA9IGJ1ZiArIGNodW5rX251bSAqIENIVU5LX1NJWkU7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAidXBsb2FkaW5nIGZ3IGNodW5rIDB4JXAgdG8gMHgleCIsCisJCQkgICAgIHAsIGFkZHIpOworCQl3bDEyNzFfc3BpX21lbV93cml0ZSh3bCwgYWRkciwgcCwgQ0hVTktfU0laRSk7CisKKwkJY2h1bmtfbnVtKys7CisJfQorCisJLyogMTAuNCB1cGxvYWQgdGhlIGxhc3QgY2h1bmsgKi8KKwlhZGRyID0gZGVzdCArIGNodW5rX251bSAqIENIVU5LX1NJWkU7CisJcCA9IGJ1ZiArIGNodW5rX251bSAqIENIVU5LX1NJWkU7CisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJ1cGxvYWRpbmcgZncgbGFzdCBjaHVuayAoJXpkIEIpIDB4JXAgdG8gMHgleCIsCisJCSAgICAgZndfZGF0YV9sZW4gJSBDSFVOS19TSVpFLCBwLCBhZGRyKTsKKwl3bDEyNzFfc3BpX21lbV93cml0ZSh3bCwgYWRkciwgcCwgZndfZGF0YV9sZW4gJSBDSFVOS19TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9ib290X3VwbG9hZF9maXJtd2FyZShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1MzIgY2h1bmtzLCBhZGRyLCBsZW47CisJdTggKmZ3OworCisJZncgPSB3bC0+Znc7CisJY2h1bmtzID0gYmUzMl90b19jcHVwKCh1MzIgKikgZncpOworCWZ3ICs9IHNpemVvZih1MzIpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJmaXJtd2FyZSBjaHVua3MgdG8gYmUgdXBsb2FkZWQ6ICV1IiwgY2h1bmtzKTsKKworCXdoaWxlIChjaHVua3MtLSkgeworCQlhZGRyID0gYmUzMl90b19jcHVwKCh1MzIgKikgZncpOworCQlmdyArPSBzaXplb2YodTMyKTsKKwkJbGVuID0gYmUzMl90b19jcHVwKCh1MzIgKikgZncpOworCQlmdyArPSBzaXplb2YodTMyKTsKKworCQlpZiAobGVuID4gMzAwMDAwKSB7CisJCQl3bDEyNzFfaW5mbygiZmlybXdhcmUgY2h1bmsgdG9vIGxvbmc6ICV1IiwgbGVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2h1bmsgJWQgYWRkciAweCV4IGxlbiAldSIsCisJCQkgICAgIGNodW5rcywgYWRkciwgbGVuKTsKKwkJd2wxMjcxX2Jvb3RfdXBsb2FkX2Zpcm13YXJlX2NodW5rKHdsLCBmdywgbGVuLCBhZGRyKTsKKwkJZncgKz0gbGVuOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9ib290X3VwbG9hZF9udnMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc2l6ZV90IG52c19sZW4sIGJ1cnN0X2xlbjsKKwlpbnQgaTsKKwl1MzIgZGVzdF9hZGRyLCB2YWw7CisJdTggKm52c19wdHIsICpudnMsICpudnNfYWxpZ25lZDsKKworCW52cyA9IHdsLT5udnM7CisJaWYgKG52cyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW52c19wdHIgPSBudnM7CisKKwludnNfbGVuID0gd2wtPm52c19sZW47CisKKwkvKiBVcGRhdGUgdGhlIGRldmljZSBNQUMgYWRkcmVzcyBpbnRvIHRoZSBudnMgKi8KKwludnNbMTFdID0gd2wtPm1hY19hZGRyWzBdOworCW52c1sxMF0gPSB3bC0+bWFjX2FkZHJbMV07CisJbnZzWzZdID0gd2wtPm1hY19hZGRyWzJdOworCW52c1s1XSA9IHdsLT5tYWNfYWRkclszXTsKKwludnNbNF0gPSB3bC0+bWFjX2FkZHJbNF07CisJbnZzWzNdID0gd2wtPm1hY19hZGRyWzVdOworCisJLyoKKwkgKiBMYXlvdXQgYmVmb3JlIHRoZSBhY3R1YWwgTlZTIHRhYmxlczoKKwkgKiAxIGJ5dGUgOiBidXJzdCBsZW5ndGguCisJICogMiBieXRlczogZGVzdGluYXRpb24gYWRkcmVzcy4KKwkgKiBuIGJ5dGVzOiBkYXRhIHRvIGJ1cnN0IGNvcHkuCisJICoKKwkgKiBUaGlzIGlzIGVuZGVkIGJ5IGEgMCBsZW5ndGgsIHRoZW4gdGhlIE5WUyB0YWJsZXMuCisJICovCisKKwkvKiBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBoZXJlIHdoZXRoZXIgdGhlIExTQiBpcyAxPyAqLworCXdoaWxlIChudnNfcHRyWzBdKSB7CisJCWJ1cnN0X2xlbiA9IG52c19wdHJbMF07CisJCWRlc3RfYWRkciA9IChudnNfcHRyWzFdICYgMHhmZSkgfCAoKHUzMikobnZzX3B0clsyXSA8PCA4KSk7CisKKwkJLyogRklYTUU6IER1ZSB0byBvdXIgbmV3IHdsMTI3MV90cmFuc2xhdGVfcmVnX2FkZHIgZnVuY3Rpb24sCisJCSAgIHdlIG5lZWQgdG8gYWRkIHRoZSBSRUdJU1RFUl9CQVNFIHRvIHRoZSBkZXN0aW5hdGlvbiAqLworCQlkZXN0X2FkZHIgKz0gUkVHSVNURVJTX0JBU0U7CisKKwkJLyogV2UgbW92ZSBvdXIgcG9pbnRlciB0byB0aGUgZGF0YSAqLworCQludnNfcHRyICs9IDM7CisKKwkJZm9yIChpID0gMDsgaSA8IGJ1cnN0X2xlbjsgaSsrKSB7CisJCQl2YWwgPSAobnZzX3B0clswXSB8IChudnNfcHRyWzFdIDw8IDgpCisJCQkgICAgICAgfCAobnZzX3B0clsyXSA8PCAxNikgfCAobnZzX3B0clszXSA8PCAyNCkpOworCisJCQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwKKwkJCQkgICAgICJudnMgYnVyc3Qgd3JpdGUgMHgleDogMHgleCIsCisJCQkJICAgICBkZXN0X2FkZHIsIHZhbCk7CisJCQl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIGRlc3RfYWRkciwgdmFsKTsKKworCQkJbnZzX3B0ciArPSA0OworCQkJZGVzdF9hZGRyICs9IDQ7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlJ3ZlIHJlYWNoZWQgdGhlIGZpcnN0IHplcm8gbGVuZ3RoLCB0aGUgZmlyc3QgTlZTIHRhYmxlCisJICogaXMgNyBieXRlcyBmdXJ0aGVyLgorCSAqLworCW52c19wdHIgKz0gNzsKKwludnNfbGVuIC09IG52c19wdHIgLSBudnM7CisJbnZzX2xlbiA9IEFMSUdOKG52c19sZW4sIDQpOworCisJLyogRklYTUU6IFRoZSBkcml2ZXIgc2V0cyB0aGUgcGFydGl0aW9uIGhlcmUsIGJ1dCB0aGlzIGlzIG5vdCBuZWVkZWQsCisJICAgc2luY2UgaXQgc2V0cyB0byB0aGUgc2FtZSBvbmUgYXMgY3VycmVudGx5IGluIHVzZSAqLworCS8qIE5vdyB3ZSBtdXN0IHNldCB0aGUgcGFydGl0aW9uIGNvcnJlY3RseSAqLworCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfV09SS10ubWVtLnN0YXJ0LAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfV09SS10ubWVtLnNpemUsCisJCQkgICAgIHBhcnRfdGFibGVbUEFSVF9XT1JLXS5yZWcuc3RhcnQsCisJCQkgICAgIHBhcnRfdGFibGVbUEFSVF9XT1JLXS5yZWcuc2l6ZSk7CisKKwkvKiBDb3B5IHRoZSBOVlMgdGFibGVzIHRvIGEgbmV3IGJsb2NrIHRvIGVuc3VyZSBhbGlnbm1lbnQgKi8KKwludnNfYWxpZ25lZCA9IGttZW1kdXAobnZzX3B0ciwgbnZzX2xlbiwgR0ZQX0tFUk5FTCk7CisKKwkvKiBBbmQgZmluYWxseSB3ZSB1cGxvYWQgdGhlIE5WUyB0YWJsZXMgKi8KKwkvKiBGSVhNRTogSW4gd2wxMjcxLCB3ZSB1cGxvYWQgZXZlcnl0aGluZyBhdCBvbmNlLgorCSAgIE5vIGVuZGlhbm5lc3MgaGFuZGxpbmcgbmVlZGVkIGhlcmU/ISBUaGUgcmVmIGRyaXZlciBkb2Vzbid0IGRvCisJICAgYW55dGhpbmcgYWJvdXQgaXQgYXQgdGhpcyBwb2ludCAqLworCXdsMTI3MV9zcGlfbWVtX3dyaXRlKHdsLCBDTURfTUJPWF9BRERSRVNTLCBudnNfYWxpZ25lZCwgbnZzX2xlbik7CisKKwlrZnJlZShudnNfYWxpZ25lZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9ib290X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWVuYWJsZV9pcnEod2wtPmlycSk7CisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLAorCQkJICAgV0wxMjcxX0FDWF9JTlRSX0FMTCAmIH4oV0wxMjcxX0lOVFJfTUFTSykpOworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgSElfQ0ZHLCBISV9DRkdfREVGX1ZBTCk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2Jvb3Rfc29mdF9yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIGJvb3RfZGF0YTsKKworCS8qIHBlcmZvcm0gc29mdCByZXNldCAqLworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19TTFZfU09GVF9SRVNFVCwgQUNYX1NMVl9TT0ZUX1JFU0VUX0JJVCk7CisKKwkvKiBTT0ZUX1JFU0VUIGlzIHNlbGYgY2xlYXJpbmcgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoU09GVF9SRVNFVF9NQVhfVElNRSk7CisJd2hpbGUgKDEpIHsKKwkJYm9vdF9kYXRhID0gd2wxMjcxX3JlZ19yZWFkMzIod2wsIEFDWF9SRUdfU0xWX1NPRlRfUkVTRVQpOworCQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInNvZnQgcmVzZXQgYm9vdGRhdGEgMHgleCIsIGJvb3RfZGF0YSk7CisJCWlmICgoYm9vdF9kYXRhICYgQUNYX1NMVl9TT0ZUX1JFU0VUX0JJVCkgPT0gMCkKKwkJCWJyZWFrOworCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQkvKiAxLjIgY2hlY2sgcFdoYWxCdXMtPnVTZWxmQ2xlYXJUaW1lIGlmIHRoZQorCQkJICogdGltZW91dCB3YXMgcmVhY2hlZCAqLworCQkJd2wxMjcxX2Vycm9yKCJzb2Z0IHJlc2V0IHRpbWVvdXQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCXVkZWxheShTT0ZUX1JFU0VUX1NUQUxMX1RJTUUpOworCX0KKworCS8qIGRpc2FibGUgUngvVHggKi8KKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIEVOQUJMRSwgMHgwKTsKKworCS8qIGRpc2FibGUgYXV0byBjYWxpYnJhdGlvbiBvbiBzdGFydCovCisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBTUEFSRV9BMiwgMHhmZmZmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9ib290X3J1bl9maXJtd2FyZShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgbG9vcCwgcmV0OworCXUzMiBjaGlwX2lkLCBpbnRlcnJ1cHQ7CisKKwl3bDEyNzFfYm9vdF9zZXRfZWNwdV9jdHJsKHdsLCBFQ1BVX0NPTlRST0xfSEFMVCk7CisKKwljaGlwX2lkID0gd2wxMjcxX3JlZ19yZWFkMzIod2wsIENISVBfSURfQik7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImNoaXAgaWQgYWZ0ZXIgZmlybXdhcmUgYm9vdDogMHgleCIsIGNoaXBfaWQpOworCisJaWYgKGNoaXBfaWQgIT0gd2wtPmNoaXAuaWQpIHsKKwkJd2wxMjcxX2Vycm9yKCJjaGlwIGlkIGRvZXNuJ3QgbWF0Y2ggYWZ0ZXIgZmlybXdhcmUgYm9vdCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiB3YWl0IGZvciBpbml0IHRvIGNvbXBsZXRlICovCisJbG9vcCA9IDA7CisJd2hpbGUgKGxvb3ArKyA8IElOSVRfTE9PUCkgeworCQl1ZGVsYXkoSU5JVF9MT09QX0RFTEFZKTsKKwkJaW50ZXJydXB0ID0gd2wxMjcxX3JlZ19yZWFkMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSKTsKKworCQlpZiAoaW50ZXJydXB0ID09IDB4ZmZmZmZmZmYpIHsKKwkJCXdsMTI3MV9lcnJvcigiZXJyb3IgcmVhZGluZyBoYXJkd2FyZSBjb21wbGV0ZSAiCisJCQkJICAgICAiaW5pdCBpbmRpY2F0aW9uIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQkvKiBjaGVjayB0aGF0IEFDWF9JTlRSX0lOSVRfQ09NUExFVEUgaXMgZW5hYmxlZCAqLworCQllbHNlIGlmIChpbnRlcnJ1cHQgJiBXTDEyNzFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSkgeworCQkJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9BQ0ssCisJCQkJCSAgIFdMMTI3MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGxvb3AgPj0gSU5JVF9MT09QKSB7CisJCXdsMTI3MV9lcnJvcigidGltZW91dCB3YWl0aW5nIGZvciB0aGUgaGFyZHdhcmUgdG8gIgorCQkJICAgICAiY29tcGxldGUgaW5pdGlhbGl6YXRpb24iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogZ2V0IGhhcmR3YXJlIGNvbmZpZyBjb21tYW5kIG1haWwgYm94ICovCisJd2wtPmNtZF9ib3hfYWRkciA9IHdsMTI3MV9yZWdfcmVhZDMyKHdsLCBSRUdfQ09NTUFORF9NQUlMQk9YX1BUUik7CisKKwkvKiBnZXQgaGFyZHdhcmUgY29uZmlnIGV2ZW50IG1haWwgYm94ICovCisJd2wtPmV2ZW50X2JveF9hZGRyID0gd2wxMjcxX3JlZ19yZWFkMzIod2wsIFJFR19FVkVOVF9NQUlMQk9YX1BUUik7CisKKwkvKiBzZXQgdGhlIHdvcmtpbmcgcGFydGl0aW9uIHRvIGl0cyAicnVubmluZyIgbW9kZSBvZmZzZXQgKi8KKwl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwKKwkJCSAgICAgcGFydF90YWJsZVtQQVJUX1dPUktdLm1lbS5zdGFydCwKKwkJCSAgICAgcGFydF90YWJsZVtQQVJUX1dPUktdLm1lbS5zaXplLAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfV09SS10ucmVnLnN0YXJ0LAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfV09SS10ucmVnLnNpemUpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BSUxCT1gsICJjbWRfYm94X2FkZHIgMHgleCBldmVudF9ib3hfYWRkciAweCV4IiwKKwkJICAgICB3bC0+Y21kX2JveF9hZGRyLCB3bC0+ZXZlbnRfYm94X2FkZHIpOworCisJd2wxMjcxX2Jvb3RfZndfdmVyc2lvbih3bCk7CisKKwkvKgorCSAqIGluIGNhc2Ugb2YgZnVsbCBhc3luY2hyb25vdXMgbW9kZSB0aGUgZmlybXdhcmUgZXZlbnQgbXVzdCBiZQorCSAqIHJlYWR5IHRvIHJlY2VpdmUgZXZlbnQgZnJvbSB0aGUgY29tbWFuZCBtYWlsYm94CisJICovCisKKwkvKiBlbmFibGUgZ3BpbyBpbnRlcnJ1cHRzICovCisJd2wxMjcxX2Jvb3RfZW5hYmxlX2ludGVycnVwdHMod2wpOworCisJLyogdW5tYXNrIGFsbCBtYm94IGV2ZW50cyAgKi8KKwl3bC0+ZXZlbnRfbWFzayA9IDB4ZmZmZmZmZmY7CisKKwlyZXQgPSB3bDEyNzFfZXZlbnRfdW5tYXNrKHdsKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoIkVWRU5UIG1hc2sgc2V0dGluZyBmYWlsZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3bDEyNzFfZXZlbnRfbWJveF9jb25maWcod2wpOworCisJLyogZmlybXdhcmUgc3RhcnR1cCBjb21wbGV0ZWQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfYm9vdF93cml0ZV9pcnFfcG9sYXJpdHkoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJdTMyIHBvbGFyaXR5LCBzdGF0dXMsIGk7CisKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIE9DUF9QT1JfQ1RSLCBPQ1BfUkVHX1BPTEFSSVRZKTsKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIE9DUF9DTUQsIE9DUF9DTURfUkVBRCk7CisKKwkvKiBXYWl0IHVudGlsIHRoZSBjb21tYW5kIGlzIGNvbXBsZXRlIChpZS4gYml0IDE4IGlzIHNldCkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgT0NQX0NNRF9MT09QOyBpKyspIHsKKwkJcG9sYXJpdHkgPSB3bDEyNzFfcmVnX3JlYWQzMih3bCwgT0NQX0RBVEFfUkVBRCk7CisJCWlmIChwb2xhcml0eSAmIE9DUF9SRUFEWV9NQVNLKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IE9DUF9DTURfTE9PUCkgeworCQl3bDEyNzFfZXJyb3IoIk9DUCBjb21tYW5kIHRpbWVvdXQhIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXN0YXR1cyA9IHBvbGFyaXR5ICYgT0NQX1NUQVRVU19NQVNLOworCWlmIChzdGF0dXMgIT0gT0NQX1NUQVRVU19PSykgeworCQl3bDEyNzFfZXJyb3IoIk9DUCBjb21tYW5kIGZhaWxlZCAoJWQpIiwgc3RhdHVzKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogV2UgdXNlIEhJR0ggcG9sYXJpdHksIHNvIHVuc2V0IHRoZSBMT1cgYml0ICovCisJcG9sYXJpdHkgJj0gflBPTEFSSVRZX0xPVzsKKworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgT0NQX1BPUl9DVFIsIE9DUF9SRUdfUE9MQVJJVFkpOworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgT0NQX0RBVEFfV1JJVEUsIHBvbGFyaXR5KTsKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIE9DUF9DTUQsIE9DUF9DTURfV1JJVEUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNzFfYm9vdChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MzIgdG1wLCBjbGssIHBhdXNlOworCisJaWYgKFJFRl9DTE9DSyA9PSAwIHx8IFJFRl9DTE9DSyA9PSAyKQorCQkvKiByZWYgY2xrOiAxOS4yLzM4LjQgKi8KKwkJY2xrID0gMHgzOworCWVsc2UgaWYgKFJFRl9DTE9DSyA9PSAxIHx8IFJFRl9DTE9DSyA9PSAzKQorCQkvKiByZWYgY2xrOiAyNi81MiAqLworCQljbGsgPSAweDU7CisKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIFBMTF9QQVJBTUVURVJTLCBjbGspOworCisJcGF1c2UgPSB3bDEyNzFfcmVnX3JlYWQzMih3bCwgUExMX1BBUkFNRVRFUlMpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJwYXVzZTEgMHgleCIsIHBhdXNlKTsKKworCXBhdXNlICY9IH4oV1VfQ09VTlRFUl9QQVVTRV9WQUwpOyAvKiBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUKKwkJCQkJICAgKiBXVV9DT1VOVEVSX1BBVVNFX1ZBTCBpbnN0ZWFkIG9mCisJCQkJCSAgICogMHgzZmYgKG1hZ2ljIG51bWJlciApLiAgSG93IGRvZXMKKwkJCQkJICAgKiB0aGlzIHdvcms/ISAqLworCXBhdXNlIHw9IFdVX0NPVU5URVJfUEFVU0VfVkFMOworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgV1VfQ09VTlRFUl9QQVVTRSwgcGF1c2UpOworCisJLyogQ29udGludWUgdGhlIEVMUCB3YWtlIHVwIHNlcXVlbmNlICovCisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBXRUxQX0FSTV9DT01NQU5ELCBXRUxQX0FSTV9DT01NQU5EX1ZBTCk7CisJdWRlbGF5KDUwMCk7CisKKwl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwKKwkJCSAgICAgcGFydF90YWJsZVtQQVJUX0RSUFddLm1lbS5zdGFydCwKKwkJCSAgICAgcGFydF90YWJsZVtQQVJUX0RSUFddLm1lbS5zaXplLAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfRFJQV10ucmVnLnN0YXJ0LAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfRFJQV10ucmVnLnNpemUpOworCisJLyogUmVhZC1tb2RpZnktd3JpdGUgRFJQV19TQ1JBVENIX1NUQVJUIHJlZ2lzdGVyIChzZWUgbmV4dCBzdGF0ZSkKKwkgICB0byBiZSB1c2VkIGJ5IERSUHcgRlcuIFRoZSBSVFJJTSB2YWx1ZSB3aWxsIGJlIGFkZGVkIGJ5IHRoZSBGVworCSAgIGJlZm9yZSB0YWtpbmcgRFJQdyBvdXQgb2YgcmVzZXQgKi8KKworCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiRFJQV19TQ1JBVENIX1NUQVJUICUwOHgiLCBEUlBXX1NDUkFUQ0hfU1RBUlQpOworCWNsayA9IHdsMTI3MV9yZWdfcmVhZDMyKHdsLCBEUlBXX1NDUkFUQ0hfU1RBUlQpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJjbGsyIDB4JXgiLCBjbGspOworCisJLyogMiAqLworCWNsayB8PSAoUkVGX0NMT0NLIDw8IDEpIDw8IDQ7CisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBEUlBXX1NDUkFUQ0hfU1RBUlQsIGNsayk7CisKKwl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwKKwkJCSAgICAgcGFydF90YWJsZVtQQVJUX1dPUktdLm1lbS5zdGFydCwKKwkJCSAgICAgcGFydF90YWJsZVtQQVJUX1dPUktdLm1lbS5zaXplLAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfV09SS10ucmVnLnN0YXJ0LAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfV09SS10ucmVnLnNpemUpOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLCBXTDEyNzFfQUNYX0lOVFJfQUxMKTsKKworCXJldCA9IHdsMTI3MV9ib290X3NvZnRfcmVzZXQod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIDIuIHN0YXJ0IHByb2Nlc3NpbmcgTlZTIGZpbGUgKi8KKwlyZXQgPSB3bDEyNzFfYm9vdF91cGxvYWRfbnZzKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiB3cml0ZSBmaXJtd2FyZSdzIGxhc3QgYWRkcmVzcyAoaWUuIGl0J3MgbGVuZ3RoKSB0bworCSAqIEFDWF9FRVBST01MRVNTX0lORF9SRUcgKi8KKwl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgIkFDWF9FRVBST01MRVNTX0lORF9SRUciKTsKKworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgQUNYX0VFUFJPTUxFU1NfSU5EX1JFRywgQUNYX0VFUFJPTUxFU1NfSU5EX1JFRyk7CisKKwl0bXAgPSB3bDEyNzFfcmVnX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCAweCV4IiwgdG1wKTsKKworCS8qIDYuIHJlYWQgdGhlIEVFUFJPTSBwYXJhbWV0ZXJzICovCisJdG1wID0gd2wxMjcxX3JlZ19yZWFkMzIod2wsIFNDUl9QQUQyKTsKKworCXJldCA9IHdsMTI3MV9ib290X3dyaXRlX2lycV9wb2xhcml0eSh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogRklYTUU6IE5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGlzIGlzIHJlYWxseSB3aGF0IHdlIHdhbnQgKi8KKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssCisJCQkgICBXTDEyNzFfQUNYX0FMTF9FVkVOVFNfVkVDVE9SKTsKKworCS8qIFdMMTI3MTogVGhlIHJlZmVyZW5jZSBkcml2ZXIgc2tpcHMgc3RlcHMgNyB0byAxMCAoanVtcHMgZGlyZWN0bHkKKwkgKiB0byB1cGxvYWRfZncpICovCisKKwlyZXQgPSB3bDEyNzFfYm9vdF91cGxvYWRfZmlybXdhcmUod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIDEwLjUgc3RhcnQgZmlybXdhcmUgKi8KKwlyZXQgPSB3bDEyNzFfYm9vdF9ydW5fZmlybXdhcmUod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIHNldCB0aGUgd2wxMjcxIGRlZmF1bHQgZmlsdGVycyAqLworCXdsLT5yeF9jb25maWcgPSBXTDEyNzFfREVGQVVMVF9SWF9DT05GSUc7CisJd2wtPnJ4X2ZpbHRlciA9IFdMMTI3MV9ERUZBVUxUX1JYX0ZJTFRFUjsKKworCXdsMTI3MV9ldmVudF9tYm94X2NvbmZpZyh3bCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ib290LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2Jvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGQ4ZmI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ib290LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19CT09UX0hfXworI2RlZmluZSBfX0JPT1RfSF9fCisKKyNpbmNsdWRlICJ3bDEyNzEuaCIKKworaW50IHdsMTI3MV9ib290KHN0cnVjdCB3bDEyNzEgKndsKTsKKworI2RlZmluZSBXTDEyNzFfTk9fU1VCQkFORFMgOAorI2RlZmluZSBXTDEyNzFfTk9fUE9XRVJfTEVWRUxTIDQKKyNkZWZpbmUgV0wxMjcxX0ZXX1ZFUlNJT05fTUFYX0xFTiAyMAorCitzdHJ1Y3Qgd2wxMjcxX3N0YXRpY19kYXRhIHsKKwl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CisJdTggcGFkZGluZ1syXTsKKwl1OCBmd192ZXJzaW9uW1dMMTI3MV9GV19WRVJTSU9OX01BWF9MRU5dOworCXUzMiBod192ZXJzaW9uOworCXU4IHR4X3Bvd2VyX3RhYmxlW1dMMTI3MV9OT19TVUJCQU5EU11bV0wxMjcxX05PX1BPV0VSX0xFVkVMU107Cit9OworCisvKiBudW1iZXIgb2YgdGltZXMgd2UgdHJ5IHRvIHJlYWQgdGhlIElOSVQgaW50ZXJydXB0ICovCisjZGVmaW5lIElOSVRfTE9PUCAyMDAwMAorCisvKiBkZWxheSBiZXR3ZWVuIHJldHJpZXMgKi8KKyNkZWZpbmUgSU5JVF9MT09QX0RFTEFZIDUwCisKKyNkZWZpbmUgUkVGX0NMT0NLICAgICAgICAgICAgMgorI2RlZmluZSBXVV9DT1VOVEVSX1BBVVNFX1ZBTCAweDNGRgorI2RlZmluZSBXRUxQX0FSTV9DT01NQU5EX1ZBTCAweDQKKworI2RlZmluZSBPQ1BfQ01EX0xPT1AgIDMyCisKKyNkZWZpbmUgT0NQX0NNRF9XUklURSAweDEKKyNkZWZpbmUgT0NQX0NNRF9SRUFEICAweDIKKworI2RlZmluZSBPQ1BfUkVBRFlfTUFTSyAgQklUKDE4KQorI2RlZmluZSBPQ1BfU1RBVFVTX01BU0sgKEJJVCgxNikgfCBCSVQoMTcpKQorCisjZGVmaW5lIE9DUF9TVEFUVVNfTk9fUkVTUCAgICAweDAwMDAwCisjZGVmaW5lIE9DUF9TVEFUVVNfT0sgICAgICAgICAweDEwMDAwCisjZGVmaW5lIE9DUF9TVEFUVVNfUkVRX0ZBSUxFRCAweDIwMDAwCisjZGVmaW5lIE9DUF9TVEFUVVNfUkVTUF9FUlJPUiAweDMwMDAwCisKKyNkZWZpbmUgT0NQX1JFR19QT0xBUklUWSAweDMwMDMyCisKKyNkZWZpbmUgQ01EX01CT1hfQUREUkVTUyAweDQwN0I0CisKKyNkZWZpbmUgUE9MQVJJVFlfTE9XIEJJVCgxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNDM1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5jCkBAIC0wLDAgKzEsODEzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmM3Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ3bDEyNzEuaCIKKyNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorI2luY2x1ZGUgIndsMTI3MV9hY3guaCIKKyNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKKyNpbmNsdWRlICJ3bDEyNzFfY21kLmgiCisKKy8qCisgKiBzZW5kIGNvbW1hbmQgdG8gZmlybXdhcmUKKyAqCisgKiBAd2w6IHdsIHN0cnVjdAorICogQGlkOiBjb21tYW5kIGlkCisgKiBAYnVmOiBidWZmZXIgY29udGFpbmluZyB0aGUgY29tbWFuZCwgbXVzdCB3b3JrIHdpdGggZG1hCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICovCitpbnQgd2wxMjcxX2NtZF9zZW5kKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgKmNtZDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIGludHI7CisJaW50IHJldCA9IDA7CisKKwljbWQgPSBidWY7CisJY21kLT5pZCA9IGlkOworCWNtZC0+c3RhdHVzID0gMDsKKworCVdBUk5fT04obGVuICUgNCAhPSAwKTsKKworCXdsMTI3MV9zcGlfbWVtX3dyaXRlKHdsLCB3bC0+Y21kX2JveF9hZGRyLCBidWYsIGxlbik7CisKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX1RSSUcsIElOVFJfVFJJR19DTUQpOworCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFdMMTI3MV9DT01NQU5EX1RJTUVPVVQpOworCisJaW50ciA9IHdsMTI3MV9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9OT19DTEVBUik7CisJd2hpbGUgKCEoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9DTURfQ09NUExFVEUpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQl3bDEyNzFfZXJyb3IoImNvbW1hbmQgY29tcGxldGUgdGltZW91dCIpOworCQkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbXNsZWVwKDEpOworCisJCWludHIgPSB3bDEyNzFfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOworCX0KKworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfQUNLLAorCQkJICAgV0wxMjcxX0FDWF9JTlRSX0NNRF9DT01QTEVURSk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2NtZF9jYWxfY2hhbm5lbF90dW5lKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCB3bDEyNzFfY21kX2NhbF9jaGFubmVsX3R1bmUgKmNtZDsKKwlpbnQgcmV0ID0gMDsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPnRlc3QuaWQgPSBURVNUX0NNRF9DSEFOTkVMX1RVTkU7CisKKwljbWQtPmJhbmQgPSBXTDEyNzFfQ0hBTk5FTF9UVU5FX0JBTkRfMl80OworCS8qIHNldCB1cCBhbnkgY2hhbm5lbCwgNyBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSByYW5nZSAqLworCWNtZC0+Y2hhbm5lbCA9IDc7CisKKwlyZXQgPSB3bDEyNzFfY21kX3Rlc3Qod2wsIGNtZCwgc2l6ZW9mKCpjbWQpLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJd2wxMjcxX3dhcm5pbmcoIlRFU1RfQ01EX0NIQU5ORUxfVFVORSBmYWlsZWQiKTsKKworCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9jbWRfY2FsX3VwZGF0ZV9yZWZfcG9pbnQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9jbWRfY2FsX3VwZGF0ZV9yZWZfcG9pbnQgKmNtZDsKKwlpbnQgcmV0ID0gMDsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPnRlc3QuaWQgPSBURVNUX0NNRF9VUERBVEVfUERfUkVGRVJFTkNFX1BPSU5UOworCisJLyogRklYTUU6IHN0aWxsIHdhaXRpbmcgZm9yIHRoZSBjb3JyZWN0IHZhbHVlcyAqLworCWNtZC0+cmVmX3Bvd2VyICAgID0gMDsKKwljbWQtPnJlZl9kZXRlY3RvciA9IDA7CisKKwljbWQtPnN1Yl9iYW5kICAgICA9IFdMMTI3MV9QRF9SRUZFUkVOQ0VfUE9JTlRfQkFORF9CX0c7CisKKwlyZXQgPSB3bDEyNzFfY21kX3Rlc3Qod2wsIGNtZCwgc2l6ZW9mKCpjbWQpLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJd2wxMjcxX3dhcm5pbmcoIlRFU1RfQ01EX1VQREFURV9QRF9SRUZFUkVOQ0VfUE9JTlQgZmFpbGVkIik7CisKKwlrZnJlZShjbWQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfY21kX2NhbF9wMmcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9jbWRfY2FsX3AyZyAqY21kOworCWludCByZXQgPSAwOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+dGVzdC5pZCA9IFRFU1RfQ01EX1AyR19DQUw7CisKKwljbWQtPnN1Yl9iYW5kX21hc2sgPSBXTDEyNzFfQ0FMX1AyR19CQU5EX0JfRzsKKworCXJldCA9IHdsMTI3MV9jbWRfdGVzdCh3bCwgY21kLCBzaXplb2YoKmNtZCksIDApOworCWlmIChyZXQgPCAwKQorCQl3bDEyNzFfd2FybmluZygiVEVTVF9DTURfUDJHX0NBTCBmYWlsZWQiKTsKKworCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9jbWRfY2FsKHN0cnVjdCB3bDEyNzEgKndsKQoreworCS8qCisJICogRklYTUU6IHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgd2UncmUgbm90IHNsZWVwaW5nIHdoZW4gY2FsaWJyYXRpb24KKwkgKiBpcyBkb25lCisJICovCisJaW50IHJldDsKKworCXdsMTI3MV9ub3RpY2UoInBlcmZvcm1pbmcgdHggY2FsaWJyYXRpb24iKTsKKworCXJldCA9IHdsMTI3MV9jbWRfY2FsX2NoYW5uZWxfdHVuZSh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NhbF91cGRhdGVfcmVmX3BvaW50KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9jbWRfY2FsX3AyZyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2NtZF9qb2luKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBic3NfdHlwZSwgdTggZHRpbV9pbnRlcnZhbCwKKwkJICAgIHUxNiBiZWFjb25faW50ZXJ2YWwsIHU4IHdhaXQpCit7CisJc3RhdGljIGJvb2wgZG9fY2FsID0gdHJ1ZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJc3RydWN0IHdsMTI3MV9jbWRfam9pbiAqam9pbjsKKwlpbnQgcmV0LCBpOworCXU4ICpic3NpZDsKKworCS8qIEZJWE1FOiByZW1vdmUgd2hlbiB3ZSBnZXQgY2FsaWJyYXRpb24gZnJvbSB0aGUgZmFjdG9yeSAqLworCWlmIChkb19jYWwpIHsKKwkJcmV0ID0gd2wxMjcxX2NtZF9jYWwod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCXdsMTI3MV93YXJuaW5nKCJjb3VsZG4ndCBjYWxpYnJhdGUiKTsKKwkJZWxzZQorCQkJZG9fY2FsID0gZmFsc2U7CisJfQorCisKKwlqb2luID0ga3phbGxvYyhzaXplb2YoKmpvaW4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWpvaW4pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBqb2luIik7CisKKwkvKiBSZXZlcnNlIG9yZGVyIEJTU0lEICovCisJYnNzaWQgPSAodTggKikgJmpvaW4tPmJzc2lkX2xzYjsKKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJYnNzaWRbaV0gPSB3bC0+YnNzaWRbRVRIX0FMRU4gLSBpIC0gMV07CisKKwlqb2luLT5yeF9jb25maWdfb3B0aW9ucyA9IHdsLT5yeF9jb25maWc7CisJam9pbi0+cnhfZmlsdGVyX29wdGlvbnMgPSB3bC0+cnhfZmlsdGVyOworCisJam9pbi0+YmFzaWNfcmF0ZV9zZXQgPSBSQVRFX01BU0tfMU1CUFMgfCBSQVRFX01BU0tfMk1CUFMgfAorCQlSQVRFX01BU0tfNV81TUJQUyB8IFJBVEVfTUFTS18xMU1CUFM7CisKKwlqb2luLT5iZWFjb25faW50ZXJ2YWwgPSBiZWFjb25faW50ZXJ2YWw7CisJam9pbi0+ZHRpbV9pbnRlcnZhbCA9IGR0aW1faW50ZXJ2YWw7CisJam9pbi0+YnNzX3R5cGUgPSBic3NfdHlwZTsKKwlqb2luLT5jaGFubmVsID0gd2wtPmNoYW5uZWw7CisJam9pbi0+c3NpZF9sZW4gPSB3bC0+c3NpZF9sZW47CisJbWVtY3B5KGpvaW4tPnNzaWQsIHdsLT5zc2lkLCB3bC0+c3NpZF9sZW4pOworCWpvaW4tPmN0cmwgPSBXTDEyNzFfSk9JTl9DTURfQ1RSTF9UWF9GTFVTSDsKKworCS8qIGluY3JlbWVudCB0aGUgc2Vzc2lvbiBjb3VudGVyICovCisJd2wtPnNlc3Npb25fY291bnRlcisrOworCWlmICh3bC0+c2Vzc2lvbl9jb3VudGVyID49IFNFU1NJT05fQ09VTlRFUl9NQVgpCisJCXdsLT5zZXNzaW9uX2NvdW50ZXIgPSAwOworCisJam9pbi0+Y3RybCB8PSB3bC0+c2Vzc2lvbl9jb3VudGVyIDw8IFdMMTI3MV9KT0lOX0NNRF9UWF9TRVNTSU9OX09GRlNFVDsKKworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfU1RBUlRfSk9JTiwgam9pbiwgc2l6ZW9mKCpqb2luKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJmYWlsZWQgdG8gaW5pdGlhdGUgY21kIGpvaW4iKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhKT0lOX1RJTUVPVVQpOworCisJLyoKKwkgKiB1Z2x5IGhhY2s6IHdlIHNob3VsZCB3YWl0IGZvciBKT0lOX0VWRU5UX0NPTVBMRVRFX0lEIGJ1dCB0bworCSAqIHNpbXBsaWZ5IGxvY2tpbmcgd2UganVzdCBzbGVlcCBpbnN0ZWFkLCBmb3Igbm93CisJICovCisJaWYgKHdhaXQpCisJCW1zbGVlcCgxMCk7CisKK291dF9mcmVlOgorCWtmcmVlKGpvaW4pOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBzZW5kIHRlc3QgY29tbWFuZCB0byBmaXJtd2FyZQorICoKKyAqIEB3bDogd2wgc3RydWN0CisgKiBAYnVmOiBidWZmZXIgY29udGFpbmluZyB0aGUgY29tbWFuZCwgd2l0aCBhbGwgaGVhZGVycywgbXVzdCB3b3JrIHdpdGggZG1hCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICogQGFuc3dlcjogaXMgYW5zd2VyIG5lZWRlZAorICovCitpbnQgd2wxMjcxX2NtZF90ZXN0KHN0cnVjdCB3bDEyNzEgKndsLCB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuLCB1OCBhbnN3ZXIpCit7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgdGVzdCIpOworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfVEVTVCwgYnVmLCBidWZfbGVuKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJURVNUIGNvbW1hbmQgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGFuc3dlcikgeworCQlzdHJ1Y3Qgd2wxMjcxX2NvbW1hbmQgKmNtZF9hbnN3ZXI7CisKKwkJLyoKKwkJICogVGhlIHRlc3QgY29tbWFuZCBnb3QgaW4sIHdlIGNhbiByZWFkIHRoZSBhbnN3ZXIuCisJCSAqIFRoZSBhbnN3ZXIgd291bGQgYmUgYSB3bDEyNzFfY29tbWFuZCwgd2hlcmUgdGhlCisJCSAqIHBhcmFtZXRlciBhcnJheSBjb250YWlucyB0aGUgYWN0dWFsIGFuc3dlci4KKwkJICovCisJCXdsMTI3MV9zcGlfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIGJ1ZiwgYnVmX2xlbik7CisKKwkJY21kX2Fuc3dlciA9IGJ1ZjsKKworCQlpZiAoY21kX2Fuc3dlci0+aGVhZGVyLnN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpCisJCQl3bDEyNzFfZXJyb3IoIlRFU1QgY29tbWFuZCBhbnN3ZXIgZXJyb3I6ICVkIiwKKwkJCQkgICAgIGNtZF9hbnN3ZXItPmhlYWRlci5zdGF0dXMpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHJlYWQgYWN4IGZyb20gZmlybXdhcmUKKyAqCisgKiBAd2w6IHdsIHN0cnVjdAorICogQGlkOiBhY3ggaWQKKyAqIEBidWY6IGJ1ZmZlciBmb3IgdGhlIHJlc3BvbnNlLCBpbmNsdWRpbmcgYWxsIGhlYWRlcnMsIG11c3Qgd29yayB3aXRoIGRtYQorICogQGxlbjogbGVuZ2h0IG9mIGJ1ZgorICovCitpbnQgd2wxMjcxX2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGFjeF9oZWFkZXIgKmFjeCA9IGJ1ZjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBpbnRlcnJvZ2F0ZSIpOworCisJYWN4LT5pZCA9IGlkOworCisJLyogcGF5bG9hZCBsZW5ndGgsIGRvZXMgbm90IGluY2x1ZGUgYW55IGhlYWRlcnMgKi8KKwlhY3gtPmxlbiA9IGxlbiAtIHNpemVvZigqYWN4KTsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX0lOVEVSUk9HQVRFLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJJTlRFUlJPR0FURSBjb21tYW5kIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiB0aGUgaW50ZXJyb2dhdGUgY29tbWFuZCBnb3QgaW4sIHdlIGNhbiByZWFkIHRoZSBhbnN3ZXIgKi8KKwl3bDEyNzFfc3BpX21lbV9yZWFkKHdsLCB3bC0+Y21kX2JveF9hZGRyLCBidWYsIGxlbik7CisKKwlhY3ggPSBidWY7CisJaWYgKGFjeC0+Y21kLnN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpCisJCXdsMTI3MV9lcnJvcigiSU5URVJST0dBVEUgY29tbWFuZCBlcnJvcjogJWQiLAorCQkJICAgICBhY3gtPmNtZC5zdGF0dXMpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB3cml0ZSBhY3ggdmFsdWUgdG8gZmlybXdhcmUKKyAqCisgKiBAd2w6IHdsIHN0cnVjdAorICogQGlkOiBhY3ggaWQKKyAqIEBidWY6IGJ1ZmZlciBjb250YWluaW5nIGFjeCwgaW5jbHVkaW5nIGFsbCBoZWFkZXJzLCBtdXN0IHdvcmsgd2l0aCBkbWEKKyAqIEBsZW46IGxlbmd0aCBvZiBidWYKKyAqLworaW50IHdsMTI3MV9jbWRfY29uZmlndXJlKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgYWN4X2hlYWRlciAqYWN4ID0gYnVmOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQ01ELCAiY21kIGNvbmZpZ3VyZSIpOworCisJYWN4LT5pZCA9IGlkOworCisJLyogcGF5bG9hZCBsZW5ndGgsIGRvZXMgbm90IGluY2x1ZGUgYW55IGhlYWRlcnMgKi8KKwlhY3gtPmxlbiA9IGxlbiAtIHNpemVvZigqYWN4KTsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX0NPTkZJR1VSRSwgYWN4LCBsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJDT05GSUdVUkUgY29tbWFuZCBOT0siKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBjaGFubmVsLCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgY21kX2VuYWJsZWRpc2FibGVfcGF0aCAqY21kOworCWludCByZXQ7CisJdTE2IGNtZF9yeCwgY21kX3R4OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBkYXRhIHBhdGgiKTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljbWQtPmNoYW5uZWwgPSBjaGFubmVsOworCisJaWYgKGVuYWJsZSkgeworCQljbWRfcnggPSBDTURfRU5BQkxFX1JYOworCQljbWRfdHggPSBDTURfRU5BQkxFX1RYOworCX0gZWxzZSB7CisJCWNtZF9yeCA9IENNRF9ESVNBQkxFX1JYOworCQljbWRfdHggPSBDTURfRElTQUJMRV9UWDsKKwl9CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIGNtZF9yeCwgY21kLCBzaXplb2YoKmNtZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigicnggJXMgY21kIGZvciBjaGFubmVsICVkIGZhaWxlZCIsCisJCQkgICAgIGVuYWJsZSA/ICJzdGFydCIgOiAic3RvcCIsIGNoYW5uZWwpOworCQlnb3RvIG91dDsKKwl9CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInJ4ICVzIGNtZCBjaGFubmVsICVkIiwKKwkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgY21kX3R4LCBjbWQsIHNpemVvZigqY21kKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJ0eCAlcyBjbWQgZm9yIGNoYW5uZWwgJWQgZmFpbGVkIiwKKwkJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY2hhbm5lbCk7CisJCXJldHVybiByZXQ7CisJfQorCisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJ0eCAlcyBjbWQgY2hhbm5lbCAlZCIsCisJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY2hhbm5lbCk7CisKK291dDoKKwlrZnJlZShjbWQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfY21kX3BzX21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHBzX21vZGUpCit7CisJc3RydWN0IHdsMTI3MV9jbWRfcHNfcGFyYW1zICpwc19wYXJhbXMgPSBOVUxMOworCWludCByZXQgPSAwOworCisJLyogRklYTUU6IHRoaXMgc2hvdWxkIGJlIGluIHBzLmMgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X3dha2VfdXBfY29uZGl0aW9ucyh3bCwgV0FLRV9VUF9FVkVOVF9EVElNX0JJVE1BUCwKKwkJCQkJICAgIHdsLT5saXN0ZW5faW50KTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkbid0IHNldCB3YWtlIHVwIGNvbmRpdGlvbnMiKTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBzZXQgcHMgbW9kZSIpOworCisJcHNfcGFyYW1zID0ga3phbGxvYyhzaXplb2YoKnBzX3BhcmFtcyksIEdGUF9LRVJORUwpOworCWlmICghcHNfcGFyYW1zKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXBzX3BhcmFtcy0+cHNfbW9kZSA9IHBzX21vZGU7CisJcHNfcGFyYW1zLT5zZW5kX251bGxfZGF0YSA9IDE7CisJcHNfcGFyYW1zLT5yZXRyaWVzID0gNTsKKwlwc19wYXJhbXMtPmhhbmdfb3Zlcl9wZXJpb2QgPSAxMjg7CisJcHNfcGFyYW1zLT5udWxsX2RhdGFfcmF0ZSA9IDE7IC8qIDEgTWJwcyAqLworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfU0VUX1BTX01PREUsIHBzX3BhcmFtcywKKwkJCSAgICAgIHNpemVvZigqcHNfcGFyYW1zKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJjbWQgc2V0X3BzX21vZGUgZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHBzX3BhcmFtcyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9jbWRfcmVhZF9tZW1vcnkoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBhZGRyLCB2b2lkICphbnN3ZXIsCisJCQkgICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBjbWRfcmVhZF93cml0ZV9tZW1vcnkgKmNtZDsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgcmVhZCBtZW1vcnkiKTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlXQVJOX09OKGxlbiA+IE1BWF9SRUFEX1NJWkUpOworCWxlbiA9IG1pbl90KHNpemVfdCwgbGVuLCBNQVhfUkVBRF9TSVpFKTsKKworCWNtZC0+YWRkciA9IGFkZHI7CisJY21kLT5zaXplID0gbGVuOworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfUkVBRF9NRU1PUlksIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoInJlYWQgbWVtb3J5IGNvbW1hbmQgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHRoZSByZWFkIGNvbW1hbmQgZ290IGluLCB3ZSBjYW4gbm93IHJlYWQgdGhlIGFuc3dlciAqLworCXdsMTI3MV9zcGlfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKworCWlmIChjbWQtPmhlYWRlci5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKQorCQl3bDEyNzFfZXJyb3IoImVycm9yIGluIHJlYWQgY29tbWFuZCByZXN1bHQ6ICVkIiwKKwkJCSAgICAgY21kLT5oZWFkZXIuc3RhdHVzKTsKKworCW1lbWNweShhbnN3ZXIsIGNtZC0+dmFsdWUsIGxlbik7CisKK291dDoKKwlrZnJlZShjbWQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfY21kX3NjYW4oc3RydWN0IHdsMTI3MSAqd2wsIHU4ICpzc2lkLCBzaXplX3QgbGVuLAorCQkgICAgdTggYWN0aXZlX3NjYW4sIHU4IGhpZ2hfcHJpbywgdTggbnVtX2NoYW5uZWxzLAorCQkgICAgdTggcHJvYmVfcmVxdWVzdHMpCit7CisKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF90cmlnZ2VyX3NjYW5fdG8gKnRyaWdnZXIgPSBOVUxMOworCXN0cnVjdCB3bDEyNzFfY21kX3NjYW4gKnBhcmFtcyA9IE5VTEw7CisJaW50IGksIHJldDsKKwl1MTYgc2Nhbl9vcHRpb25zID0gMDsKKworCWlmICh3bC0+c2Nhbm5pbmcpCisJCXJldHVybiAtRUlOVkFMOworCisJcGFyYW1zID0ga3phbGxvYyhzaXplb2YoKnBhcmFtcyksIEdGUF9LRVJORUwpOworCWlmICghcGFyYW1zKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhcmFtcy0+cGFyYW1zLnJ4X2NvbmZpZ19vcHRpb25zID0gY3B1X3RvX2xlMzIoQ0ZHX1JYX0FMTF9HT09EKTsKKwlwYXJhbXMtPnBhcmFtcy5yeF9maWx0ZXJfb3B0aW9ucyA9CisJCWNwdV90b19sZTMyKENGR19SWF9QUlNQX0VOIHwgQ0ZHX1JYX01HTVRfRU4gfCBDRkdfUlhfQkNOX0VOKTsKKworCWlmICghYWN0aXZlX3NjYW4pCisJCXNjYW5fb3B0aW9ucyB8PSBXTDEyNzFfU0NBTl9PUFRfUEFTU0lWRTsKKwlpZiAoaGlnaF9wcmlvKQorCQlzY2FuX29wdGlvbnMgfD0gV0wxMjcxX1NDQU5fT1BUX1BSSU9SSVRZX0hJR0g7CisJcGFyYW1zLT5wYXJhbXMuc2Nhbl9vcHRpb25zID0gc2Nhbl9vcHRpb25zOworCisJcGFyYW1zLT5wYXJhbXMubnVtX2NoYW5uZWxzID0gbnVtX2NoYW5uZWxzOworCXBhcmFtcy0+cGFyYW1zLm51bV9wcm9iZV9yZXF1ZXN0cyA9IHByb2JlX3JlcXVlc3RzOworCXBhcmFtcy0+cGFyYW1zLnR4X3JhdGUgPSBjcHVfdG9fbGUzMihSQVRFX01BU0tfMk1CUFMpOworCXBhcmFtcy0+cGFyYW1zLnRpZF90cmlnZ2VyID0gMDsKKwlwYXJhbXMtPnBhcmFtcy5zY2FuX3RhZyA9IFdMMTI3MV9TQ0FOX0RFRkFVTFRfVEFHOworCisJZm9yIChpID0gMDsgaSA8IG51bV9jaGFubmVsczsgaSsrKSB7CisJCXBhcmFtcy0+Y2hhbm5lbHNbaV0ubWluX2R1cmF0aW9uID0KKwkJCWNwdV90b19sZTMyKFdMMTI3MV9TQ0FOX0NIQU5fTUlOX0RVUkFUSU9OKTsKKwkJcGFyYW1zLT5jaGFubmVsc1tpXS5tYXhfZHVyYXRpb24gPQorCQkJY3B1X3RvX2xlMzIoV0wxMjcxX1NDQU5fQ0hBTl9NQVhfRFVSQVRJT04pOworCQltZW1zZXQoJnBhcmFtcy0+Y2hhbm5lbHNbaV0uYnNzaWRfbHNiLCAweGZmLCA0KTsKKwkJbWVtc2V0KCZwYXJhbXMtPmNoYW5uZWxzW2ldLmJzc2lkX21zYiwgMHhmZiwgMik7CisJCXBhcmFtcy0+Y2hhbm5lbHNbaV0uZWFybHlfdGVybWluYXRpb24gPSAwOworCQlwYXJhbXMtPmNoYW5uZWxzW2ldLnR4X3Bvd2VyX2F0dCA9IFdMMTI3MV9TQ0FOX0NVUlJFTlRfVFhfUFdSOworCQlwYXJhbXMtPmNoYW5uZWxzW2ldLmNoYW5uZWwgPSBpICsgMTsKKwl9CisKKwlpZiAobGVuICYmIHNzaWQpIHsKKwkJcGFyYW1zLT5wYXJhbXMuc3NpZF9sZW4gPSBsZW47CisJCW1lbWNweShwYXJhbXMtPnBhcmFtcy5zc2lkLCBzc2lkLCBsZW4pOworCX0KKworCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfcHJvYmVfcmVxKHdsLCBzc2lkLCBsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiUFJPQkUgcmVxdWVzdCB0ZW1wbGF0ZSBmYWlsZWQiKTsKKwkJZ290byBvdXQ7CisJfQorCisJdHJpZ2dlciA9IGt6YWxsb2Moc2l6ZW9mKCp0cmlnZ2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cmlnZ2VyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIGRpc2FibGUgdGhlIHRpbWVvdXQgKi8KKwl0cmlnZ2VyLT50aW1lb3V0ID0gMDsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1RSSUdHRVJfU0NBTl9UTywgdHJpZ2dlciwKKwkJCSAgICAgIHNpemVvZigqdHJpZ2dlcikpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigidHJpZ2dlciBzY2FuIHRvIGZhaWxlZCBmb3IgaHcgc2NhbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwl3bDEyNzFfZHVtcChERUJVR19TQ0FOLCAiU0NBTjogIiwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOworCisJd2wtPnNjYW5uaW5nID0gdHJ1ZTsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1NDQU4sIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoIlNDQU4gZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworCXdsMTI3MV9zcGlfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKKworCWlmIChwYXJhbXMtPmhlYWRlci5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7CisJCXdsMTI3MV9lcnJvcigiU2NhbiBjb21tYW5kIGVycm9yOiAlZCIsCisJCQkgICAgIHBhcmFtcy0+aGVhZGVyLnN0YXR1cyk7CisJCXdsLT5zY2FubmluZyA9IGZhbHNlOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwYXJhbXMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfY21kX3RlbXBsYXRlX3NldChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IHRlbXBsYXRlX2lkLAorCQkJICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pCit7CisJc3RydWN0IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0ICpjbWQ7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQ01ELCAiY21kIHRlbXBsYXRlX3NldCAlZCIsIHRlbXBsYXRlX2lkKTsKKworCVdBUk5fT04oYnVmX2xlbiA+IFdMMTI3MV9DTURfVEVNUExfTUFYX1NJWkUpOworCWJ1Zl9sZW4gPSBtaW5fdChzaXplX3QsIGJ1Zl9sZW4sIFdMMTI3MV9DTURfVEVNUExfTUFYX1NJWkUpOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWNtZC0+bGVuID0gY3B1X3RvX2xlMTYoYnVmX2xlbik7CisJY21kLT50ZW1wbGF0ZV90eXBlID0gdGVtcGxhdGVfaWQ7CisJY21kLT5lbmFibGVkX3JhdGVzID0gQUNYX1JBVEVfTUFTS19VTlNQRUNJRklFRDsKKwljbWQtPnNob3J0X3JldHJ5X2xpbWl0ID0gQUNYX1JBVEVfUkVUUllfTElNSVQ7CisJY21kLT5sb25nX3JldHJ5X2xpbWl0ID0gQUNYX1JBVEVfUkVUUllfTElNSVQ7CisKKwlpZiAoYnVmKQorCQltZW1jcHkoY21kLT50ZW1wbGF0ZV9kYXRhLCBidWYsIGJ1Zl9sZW4pOworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfU0VUX1RFTVBMQVRFLCBjbWQsIHNpemVvZigqY21kKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImNtZCBzZXRfdGVtcGxhdGUgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCitvdXRfZnJlZToKKwlrZnJlZShjbWQpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bDEyNzFfYnVpbGRfYmFzaWNfcmF0ZXMoY2hhciAqcmF0ZXMpCit7CisJdTggaW5kZXggPSAwOworCisJcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sgfCBJRUVFODAyMTFfQ0NLX1JBVEVfMk1COworCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyB8IElFRUU4MDIxMV9DQ0tfUkFURV81TUI7CisJcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzExTUI7CisKKwlyZXR1cm4gaW5kZXg7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2J1aWxkX2V4dGVuZGVkX3JhdGVzKGNoYXIgKnJhdGVzKQoreworCXU4IGluZGV4ID0gMDsKKworCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV82TUI7CisJcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjsKKworCXJldHVybiBpbmRleDsKK30KKworaW50IHdsMTI3MV9jbWRfYnVpbGRfbnVsbF9kYXRhKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCB3bDEyeHhfbnVsbF9kYXRhX3RlbXBsYXRlIHRlbXBsYXRlOworCisJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIod2wtPmJzc2lkKSkgeworCQltZW1jcHkodGVtcGxhdGUuaGVhZGVyLmRhLCB3bC0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KHRlbXBsYXRlLmhlYWRlci5ic3NpZCwgd2wtPmJzc2lkLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJbWVtc2V0KHRlbXBsYXRlLmhlYWRlci5kYSwgMHhmZiwgRVRIX0FMRU4pOworCQltZW1zZXQodGVtcGxhdGUuaGVhZGVyLmJzc2lkLCAweGZmLCBFVEhfQUxFTik7CisJfQorCisJbWVtY3B5KHRlbXBsYXRlLmhlYWRlci5zYSwgd2wtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJdGVtcGxhdGUuaGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwKKwkJCQkJCUlFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyk7CisKKwlyZXR1cm4gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9OVUxMX0RBVEEsICZ0ZW1wbGF0ZSwKKwkJCQkgICAgICAgc2l6ZW9mKHRlbXBsYXRlKSk7CisKK30KKworaW50IHdsMTI3MV9jbWRfYnVpbGRfcHNfcG9sbChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGFpZCkKK3sKKwlzdHJ1Y3Qgd2wxMnh4X3BzX3BvbGxfdGVtcGxhdGUgdGVtcGxhdGU7CisKKwltZW1jcHkodGVtcGxhdGUuYnNzaWQsIHdsLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweSh0ZW1wbGF0ZS50YSwgd2wtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJdGVtcGxhdGUuYWlkID0gYWlkOworCXRlbXBsYXRlLmZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9QU1BPTEwpOworCisJcmV0dXJuIHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfUFNfUE9MTCwgJnRlbXBsYXRlLAorCQkJCSAgICAgICBzaXplb2YodGVtcGxhdGUpKTsKKworfQorCitpbnQgd2wxMjcxX2NtZF9idWlsZF9wcm9iZV9yZXEoc3RydWN0IHdsMTI3MSAqd2wsIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCit7CisJc3RydWN0IHdsMTJ4eF9wcm9iZV9yZXFfdGVtcGxhdGUgdGVtcGxhdGU7CisJc3RydWN0IHdsMTJ4eF9pZV9yYXRlcyAqcmF0ZXM7CisJY2hhciAqcHRyOworCXUxNiBzaXplOworCisJcHRyID0gKGNoYXIgKikmdGVtcGxhdGU7CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hlYWRlcik7CisKKwltZW1zZXQodGVtcGxhdGUuaGVhZGVyLmRhLCAweGZmLCBFVEhfQUxFTik7CisJbWVtc2V0KHRlbXBsYXRlLmhlYWRlci5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOworCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuc2EsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXRlbXBsYXRlLmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKKworCS8qIElFcyAqLworCS8qIFNTSUQgKi8KKwl0ZW1wbGF0ZS5zc2lkLmhlYWRlci5pZCA9IFdMQU5fRUlEX1NTSUQ7CisJdGVtcGxhdGUuc3NpZC5oZWFkZXIubGVuID0gc3NpZF9sZW47CisJaWYgKHNzaWRfbGVuICYmIHNzaWQpCisJCW1lbWNweSh0ZW1wbGF0ZS5zc2lkLnNzaWQsIHNzaWQsIHNzaWRfbGVuKTsKKwlzaXplICs9IHNpemVvZihzdHJ1Y3Qgd2wxMnh4X2llX2hlYWRlcikgKyBzc2lkX2xlbjsKKwlwdHIgKz0gc2l6ZTsKKworCS8qIEJhc2ljIFJhdGVzICovCisJcmF0ZXMgPSAoc3RydWN0IHdsMTJ4eF9pZV9yYXRlcyAqKXB0cjsKKwlyYXRlcy0+aGVhZGVyLmlkID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwlyYXRlcy0+aGVhZGVyLmxlbiA9IHdsMTI3MV9idWlsZF9iYXNpY19yYXRlcyhyYXRlcy0+cmF0ZXMpOworCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCB3bDEyeHhfaWVfaGVhZGVyKSArIHJhdGVzLT5oZWFkZXIubGVuOworCXB0ciArPSBzaXplb2Yoc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIpICsgcmF0ZXMtPmhlYWRlci5sZW47CisKKwkvKiBFeHRlbmRlZCByYXRlcyAqLworCXJhdGVzID0gKHN0cnVjdCB3bDEyeHhfaWVfcmF0ZXMgKilwdHI7CisJcmF0ZXMtPmhlYWRlci5pZCA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCXJhdGVzLT5oZWFkZXIubGVuID0gd2wxMjcxX2J1aWxkX2V4dGVuZGVkX3JhdGVzKHJhdGVzLT5yYXRlcyk7CisJc2l6ZSArPSBzaXplb2Yoc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIpICsgcmF0ZXMtPmhlYWRlci5sZW47CisKKwl3bDEyNzFfZHVtcChERUJVR19TQ0FOLCAiUFJPQkUgUkVROiAiLCAmdGVtcGxhdGUsIHNpemUpOworCisJcmV0dXJuIHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfQ0ZHX1BST0JFX1JFUV8yXzQsCisJCQkJICAgICAgICZ0ZW1wbGF0ZSwgc2l6ZSk7Cit9CisKK2ludCB3bDEyNzFfY21kX3NldF9kZWZhdWx0X3dlcF9rZXkoc3RydWN0IHdsMTI3MSAqd2wsIHU4IGlkKQoreworCXN0cnVjdCB3bDEyNzFfY21kX3NldF9rZXlzICpjbWQ7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQ01ELCAiY21kIHNldF9kZWZhdWx0X3dlcF9rZXkgJWQiLCBpZCk7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY21kLT5pZCA9IGlkOworCWNtZC0+a2V5X2FjdGlvbiA9IEtFWV9TRVRfSUQ7CisJY21kLT5rZXlfdHlwZSA9IEtFWV9XRVA7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TRVRfS0VZUywgY21kLCBzaXplb2YoKmNtZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJjbWQgc2V0X2RlZmF1bHRfd2VwX2tleSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfY21kX3NldF9rZXkoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhY3Rpb24sIHU4IGlkLCB1OCBrZXlfdHlwZSwKKwkJICAgICAgIHU4IGtleV9zaXplLCBjb25zdCB1OCAqa2V5LCBjb25zdCB1OCAqYWRkcikKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9zZXRfa2V5cyAqY21kOworCWludCByZXQgPSAwOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWlmIChrZXlfdHlwZSAhPSBLRVlfV0VQKQorCQltZW1jcHkoY21kLT5hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisKKwljbWQtPmtleV9hY3Rpb24gPSBhY3Rpb247CisJY21kLT5rZXlfc2l6ZSA9IGtleV9zaXplOworCWNtZC0+a2V5X3R5cGUgPSBrZXlfdHlwZTsKKworCS8qIHdlIGhhdmUgb25seSBvbmUgU1NJRCBwcm9maWxlICovCisJY21kLT5zc2lkX3Byb2ZpbGUgPSAwOworCisJY21kLT5pZCA9IGlkOworCisJLyogRklYTUU6IHRoaXMgaXMgZnJvbSB3bDEyNTEsIG5lZWRzIHRvIGJlIGNoZWNrZWQgKi8KKwlpZiAoa2V5X3R5cGUgPT0gS0VZX1RLSVApIHsKKwkJLyoKKwkJICogV2UgZ2V0IHRoZSBrZXkgaW4gdGhlIGZvbGxvd2luZyBmb3JtOgorCQkgKiBUS0lQICgxNiBieXRlcykgLSBUWCBNSUMgKDggYnl0ZXMpIC0gUlggTUlDICg4IGJ5dGVzKQorCQkgKiBidXQgdGhlIHRhcmdldCBpcyBleHBlY3Rpbmc6CisJCSAqIFRLSVAgLSBSWCBNSUMgLSBUWCBNSUMKKwkJICovCisJCW1lbWNweShjbWQtPmtleSwga2V5LCAxNik7CisJCW1lbWNweShjbWQtPmtleSArIDE2LCBrZXkgKyAyNCwgOCk7CisJCW1lbWNweShjbWQtPmtleSArIDI0LCBrZXkgKyAxNiwgOCk7CisKKwl9IGVsc2UgeworCQltZW1jcHkoY21kLT5rZXksIGtleSwga2V5X3NpemUpOworCX0KKworCXdsMTI3MV9kdW1wKERFQlVHX0NSWVBULCAiVEFSR0VUIEtFWTogIiwgY21kLCBzaXplb2YoKmNtZCkpOworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfU0VUX0tFWVMsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiY291bGQgbm90IHNldCBrZXlzIik7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxYTg0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmgKQEAgLTAsMCArMSw0NjQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fV0wxMjcxX0NNRF9IX18KKyNkZWZpbmUgX19XTDEyNzFfQ01EX0hfXworCisjaW5jbHVkZSAid2wxMjcxLmgiCisKK3N0cnVjdCBhY3hfaGVhZGVyOworCitpbnQgd2wxMjcxX2NtZF9zZW5kKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgdHlwZSwgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbik7CitpbnQgd2wxMjcxX2NtZF9qb2luKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBic3NfdHlwZSwgdTggZHRpbV9pbnRlcnZhbCwKKwkJICAgIHUxNiBiZWFjb25faW50ZXJ2YWwsIHU4IHdhaXQpOworaW50IHdsMTI3MV9jbWRfdGVzdChzdHJ1Y3Qgd2wxMjcxICp3bCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbiwgdTggYW5zd2VyKTsKK2ludCB3bDEyNzFfY21kX2ludGVycm9nYXRlKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CitpbnQgd2wxMjcxX2NtZF9jb25maWd1cmUoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBpZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKK2ludCB3bDEyNzFfY21kX2RhdGFfcGF0aChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggY2hhbm5lbCwgYm9vbCBlbmFibGUpOworaW50IHdsMTI3MV9jbWRfcHNfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggcHNfbW9kZSk7CitpbnQgd2wxMjcxX2NtZF9yZWFkX21lbW9yeShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGFkZHIsIHZvaWQgKmFuc3dlciwKKwkJCSAgIHNpemVfdCBsZW4pOworaW50IHdsMTI3MV9jbWRfc2NhbihzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggKnNzaWQsIHNpemVfdCBsZW4sCisJCSAgICB1OCBhY3RpdmVfc2NhbiwgdTggaGlnaF9wcmlvLCB1OCBudW1fY2hhbm5lbHMsCisJCSAgICB1OCBwcm9iZV9yZXF1ZXN0cyk7CitpbnQgd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiB0ZW1wbGF0ZV9pZCwKKwkJCSAgICB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuKTsKK2ludCB3bDEyNzFfY21kX2J1aWxkX251bGxfZGF0YShzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2NtZF9idWlsZF9wc19wb2xsKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgYWlkKTsKK2ludCB3bDEyNzFfY21kX2J1aWxkX3Byb2JlX3JlcShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbik7CitpbnQgd2wxMjcxX2NtZF9zZXRfZGVmYXVsdF93ZXBfa2V5KHN0cnVjdCB3bDEyNzEgKndsLCB1OCBpZCk7CitpbnQgd2wxMjcxX2NtZF9zZXRfa2V5KHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgYWN0aW9uLCB1OCBpZCwgdTgga2V5X3R5cGUsCisJCSAgICAgICB1OCBrZXlfc2l6ZSwgY29uc3QgdTggKmtleSwgY29uc3QgdTggKmFkZHIpOworCitlbnVtIHdsMTI3MV9jb21tYW5kcyB7CisJQ01EX0lOVEVSUk9HQVRFICAgICA9IDEsICAgIC8qdXNlIHRoaXMgdG8gcmVhZCBpbmZvcm1hdGlvbiBlbGVtZW50cyovCisJQ01EX0NPTkZJR1VSRSAgICAgICA9IDIsICAgIC8qdXNlIHRoaXMgdG8gd3JpdGUgaW5mb3JtYXRpb24gZWxlbWVudHMqLworCUNNRF9FTkFCTEVfUlggICAgICAgPSAzLAorCUNNRF9FTkFCTEVfVFggICAgICAgPSA0LAorCUNNRF9ESVNBQkxFX1JYICAgICAgPSA1LAorCUNNRF9ESVNBQkxFX1RYICAgICAgPSA2LAorCUNNRF9TQ0FOICAgICAgICAgICAgPSA4LAorCUNNRF9TVE9QX1NDQU4gICAgICAgPSA5LAorCUNNRF9TVEFSVF9KT0lOICAgICAgPSAxMSwKKwlDTURfU0VUX0tFWVMgICAgICAgID0gMTIsCisJQ01EX1JFQURfTUVNT1JZICAgICA9IDEzLAorCUNNRF9XUklURV9NRU1PUlkgICAgPSAxNCwKKwlDTURfU0VUX1RFTVBMQVRFICAgID0gMTksCisJQ01EX1RFU1QgICAgICAgICAgICA9IDIzLAorCUNNRF9OT0lTRV9ISVNUICAgICAgPSAyOCwKKwlDTURfTE5BX0NPTlRST0wgICAgID0gMzIsCisJQ01EX1NFVF9CQ05fTU9ERSAgICA9IDMzLAorCUNNRF9NRUFTVVJFTUVOVCAgICAgID0gMzQsCisJQ01EX1NUT1BfTUVBU1VSRU1FTlQgPSAzNSwKKwlDTURfRElTQ09OTkVDVCAgICAgICA9IDM2LAorCUNNRF9TRVRfUFNfTU9ERSAgICAgID0gMzcsCisJQ01EX0NIQU5ORUxfU1dJVENIICAgPSAzOCwKKwlDTURfU1RPUF9DSEFOTkVMX1NXSUNUSCA9IDM5LAorCUNNRF9BUF9ESVNDT1ZFUlkgICAgID0gNDAsCisJQ01EX1NUT1BfQVBfRElTQ09WRVJZID0gNDEsCisJQ01EX1NQU19TQ0FOID0gNDIsCisJQ01EX1NUT1BfU1BTX1NDQU4gPSA0MywKKwlDTURfSEVBTFRIX0NIRUNLICAgICA9IDQ1LAorCUNNRF9ERUJVRyAgICAgICAgICAgID0gNDYsCisJQ01EX1RSSUdHRVJfU0NBTl9UTyAgPSA0NywKKwlDTURfQ09OTkVDVElPTl9TQ0FOX0NGRyAgICAgID0gNDgsCisJQ01EX0NPTk5FQ1RJT05fU0NBTl9TU0lEX0NGRyA9IDQ5LAorCUNNRF9TVEFSVF9QRVJJT0RJQ19TQ0FOICAgICAgPSA1MCwKKwlDTURfU1RPUF9QRVJJT0RJQ19TQ0FOICAgICAgID0gNTEsCisJQ01EX1NFVF9TVEFfU1RBVEUgICAgICAgICAgICA9IDUyLAorCisJTlVNX0NPTU1BTkRTLAorCU1BWF9DT01NQU5EX0lEID0gMHhGRkZGLAorfTsKKworI2RlZmluZSBNQVhfQ01EX1BBUkFNUyA1NzIKKworZW51bSBjbWRfdGVtcGwgeworCUNNRF9URU1QTF9OVUxMX0RBVEEgPSAwLAorCUNNRF9URU1QTF9CRUFDT04sCisJQ01EX1RFTVBMX0NGR19QUk9CRV9SRVFfMl80LAorCUNNRF9URU1QTF9DRkdfUFJPQkVfUkVRXzUsCisJQ01EX1RFTVBMX1BST0JFX1JFU1BPTlNFLAorCUNNRF9URU1QTF9RT1NfTlVMTF9EQVRBLAorCUNNRF9URU1QTF9QU19QT0xMLAorCUNNRF9URU1QTF9LTFYsCisJQ01EX1RFTVBMX0RJU0NPTk5FQ1QsCisJQ01EX1RFTVBMX1BST0JFX1JFUV8yXzQsIC8qIGZvciBmaXJtd2FyZSBpbnRlcm5hbCB1c2Ugb25seSAqLworCUNNRF9URU1QTF9QUk9CRV9SRVFfNSwgICAvKiBmb3IgZmlybXdhcmUgaW50ZXJuYWwgdXNlIG9ubHkgKi8KKwlDTURfVEVNUExfQkFSLCAgICAgICAgICAgLyogZm9yIGZpcm13YXJlIGludGVybmFsIHVzZSBvbmx5ICovCisJQ01EX1RFTVBMX0NUUywgICAgICAgICAgIC8qCisJCQkJICAqIEZvciBDVFMtdG8tc2VsZiAoRmFzdENUUykgbWVjaGFuaXNtCisJCQkJICAqIGZvciBCVC9XTEFOIGNvZXhpc3RlbmNlIChTb2Z0R2VtaW5pKS4gKi8KKwlDTURfVEVNUExfTUFYID0gMHhmZgorfTsKKworLyogdW5pdCBtcyAqLworI2RlZmluZSBXTDEyNzFfQ09NTUFORF9USU1FT1VUICAgICAyMDAwCisjZGVmaW5lIFdMMTI3MV9DTURfVEVNUExfTUFYX1NJWkUgIDI1MgorCitzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgeworCXUxNiBpZDsKKwl1MTYgc3RhdHVzOworCS8qIHBheWxvYWQgKi8KKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgV0wxMjcxX0NNRF9NQVhfUEFSQU1TIDU3MgorCitzdHJ1Y3Qgd2wxMjcxX2NvbW1hbmQgeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisJdTggIHBhcmFtZXRlcnNbV0wxMjcxX0NNRF9NQVhfUEFSQU1TXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIHsKKwlDTURfTUFJTEJPWF9JRExFCQk9ICAwLAorCUNNRF9TVEFUVVNfU1VDQ0VTUwkJPSAgMSwKKwlDTURfU1RBVFVTX1VOS05PV05fQ01ECQk9ICAyLAorCUNNRF9TVEFUVVNfVU5LTk9XTl9JRQkJPSAgMywKKwlDTURfU1RBVFVTX1JFSkVDVF9NRUFTX1NHX0FDVElWRQk9IDExLAorCUNNRF9TVEFUVVNfUlhfQlVTWQkJPSAxMywKKwlDTURfU1RBVFVTX0lOVkFMSURfUEFSQU0JCT0gMTQsCisJQ01EX1NUQVRVU19URU1QTEFURV9UT09fTEFSR0UJCT0gMTUsCisJQ01EX1NUQVRVU19PVVRfT0ZfTUVNT1JZCQk9IDE2LAorCUNNRF9TVEFUVVNfU1RBX1RBQkxFX0ZVTEwJCT0gMTcsCisJQ01EX1NUQVRVU19SQURJT19FUlJPUgkJPSAxOCwKKwlDTURfU1RBVFVTX1dST05HX05FU1RJTkcJCT0gMTksCisJQ01EX1NUQVRVU19USU1FT1VUCQk9IDIxLCAvKiBEcml2ZXIgaW50ZXJuYWwgdXNlLiovCisJQ01EX1NUQVRVU19GV19SRVNFVAkJPSAyMiwgLyogRHJpdmVyIGludGVybmFsIHVzZS4qLworCU1BWF9DT01NQU5EX1NUQVRVUwkJPSAweGZmCit9OworCisKKy8qCisgKiBDTURfUkVBRF9NRU1PUlkKKyAqCisgKiBUaGUgaG9zdCBpc3N1ZXMgdGhpcyBjb21tYW5kIHRvIHJlYWQgdGhlIFdpTGluayBkZXZpY2UgbWVtb3J5L3JlZ2lzdGVycy4KKyAqCisgKiBOb3RlOiBUaGUgQmFzZSBCYW5kIGFkZHJlc3MgaGFzIHNwZWNpYWwgaGFuZGxpbmcgKDE2IGJpdHMgcmVnaXN0ZXJzIGFuZAorICogYWRkcmVzc2VzKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgaGFyZHdhcmUgc3BlY2lmaWNhdGlvbi4KKyAqLworLyoKKyAqIENNRF9XUklURV9NRU1PUlkKKyAqCisgKiBUaGUgaG9zdCBpc3N1ZXMgdGhpcyBjb21tYW5kIHRvIHdyaXRlIHRoZSBXaUxpbmsgZGV2aWNlIG1lbW9yeS9yZWdpc3RlcnMuCisgKgorICogVGhlIEJhc2UgQmFuZCBhZGRyZXNzIGhhcyBzcGVjaWFsIGhhbmRsaW5nICgxNiBiaXRzIHJlZ2lzdGVycyBhbmQKKyAqIGFkZHJlc3NlcykuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGhhcmR3YXJlIHNwZWNpZmljYXRpb24uCisgKi8KKyNkZWZpbmUgTUFYX1JFQURfU0laRSAyNTYKKworc3RydWN0IGNtZF9yZWFkX3dyaXRlX21lbW9yeSB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCS8qIFRoZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLiovCisJdTMyIGFkZHI7CisKKwkvKiBUaGUgYW1vdW50IG9mIGRhdGEgaW4gYnl0ZXMgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIHRoZSBXaUxpbmsKKwkgKiBkZXZpY2UuKi8KKwl1MzIgc2l6ZTsKKworCS8qIFRoZSBhY3R1YWwgdmFsdWUgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gdGhlIFdpbGluay4gVGhlIHNvdXJjZQorCSAgIG9mIHRoaXMgZmllbGQgaXMgdGhlIEhvc3QgaW4gV1JJVEUgY29tbWFuZCBvciB0aGUgV2lsaW5rIGluIFJFQUQKKwkgICBjb21tYW5kLiAqLworCXU4IHZhbHVlW01BWF9SRUFEX1NJWkVdOworfTsKKworI2RlZmluZSBDTURNQk9YX0hFQURFUl9MRU4gNAorI2RlZmluZSBDTURNQk9YX0lORk9fRUxFTV9IRUFERVJfTEVOIDQKKworZW51bSB7CisJQlNTX1RZUEVfSUJTUyA9IDAsCisJQlNTX1RZUEVfU1RBX0JTUyA9IDIsCisJQlNTX1RZUEVfQVBfQlNTID0gMywKKwlNQVhfQlNTX1RZUEUgPSAweEZGCit9OworCisjZGVmaW5lIFdMMTI3MV9KT0lOX0NNRF9DVFJMX1RYX0ZMVVNIICAgICAweDgwIC8qIEZpcm13YXJlIGZsdXNoZXMgYWxsIFR4ICovCisjZGVmaW5lIFdMMTI3MV9KT0lOX0NNRF9UWF9TRVNTSU9OX09GRlNFVCAxCisKK3N0cnVjdCB3bDEyNzFfY21kX2pvaW4geworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwl1MzIgYnNzaWRfbHNiOworCXUxNiBic3NpZF9tc2I7CisJdTE2IGJlYWNvbl9pbnRlcnZhbDsgLyogaW4gVEJUVHMgKi8KKwl1MzIgcnhfY29uZmlnX29wdGlvbnM7CisJdTMyIHJ4X2ZpbHRlcl9vcHRpb25zOworCisJLyoKKwkgKiBUaGUgdGFyZ2V0IHVzZXMgdGhpcyBmaWVsZCB0byBkZXRlcm1pbmUgdGhlIHJhdGUgYXQKKwkgKiB3aGljaCB0byB0cmFuc21pdCBjb250cm9sIGZyYW1lIHJlc3BvbnNlcyAoc3VjaCBhcworCSAqIEFDSyBvciBDVFMgZnJhbWVzKS4KKwkgKi8KKwl1MzIgYmFzaWNfcmF0ZV9zZXQ7CisJdTggZHRpbV9pbnRlcnZhbDsKKwkvKgorCSAqIGJpdHMgMC0yOiBUaGlzIGJpdHdpc2UgZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlCisJICogb2YgQlNTIHRvIHN0YXJ0IG9yIGpvaW4gKEJTU19UWVBFXyopLgorCSAqIGJpdCA0OiBCYW5kIC0gVGhlIHJhZGlvIGJhbmQgaW4gd2hpY2ggdG8gam9pbgorCSAqIG9yIHN0YXJ0LgorCSAqICAwIC0gMi40R0h6IGJhbmQKKwkgKiAgMSAtIDVHSHogYmFuZAorCSAqIGJpdHMgMywgNS03OiBSZXNlcnZlZAorCSAqLworCXU4IGJzc190eXBlOworCXU4IGNoYW5uZWw7CisJdTggc3NpZF9sZW47CisJdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CisJdTggY3RybDsgLyogSk9JTl9DTURfQ1RSTF8qICovCisJdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGNtZF9lbmFibGVkaXNhYmxlX3BhdGggeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwl1OCBjaGFubmVsOworCXU4IHBhZGRpbmdbM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0IHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJdTE2IGxlbjsKKwl1OCB0ZW1wbGF0ZV90eXBlOworCXU4IGluZGV4OyAgLyogcmVsZXZhbnQgb25seSBmb3IgS0xWX1RFTVBMQVRFIHR5cGUgKi8KKwl1MzIgZW5hYmxlZF9yYXRlczsKKwl1OCBzaG9ydF9yZXRyeV9saW1pdDsKKwl1OCBsb25nX3JldHJ5X2xpbWl0OworCXU4IGFmbGFnczsKKwl1OCByZXNlcnZlZDsKKwl1OCB0ZW1wbGF0ZV9kYXRhW1dMMTI3MV9DTURfVEVNUExfTUFYX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVElNX0VMRV9JRCAgICA1CisjZGVmaW5lIFBBUlRJQUxfVkJNX01BWCAgICAyNTEKKworc3RydWN0IHdsMTI3MV90aW0geworCXU4IGlkZW50aXR5OworCXU4IGxlbmd0aDsKKwl1OCBkdGltX2NvdW50OworCXU4IGR0aW1fcGVyaW9kOworCXU4IGJpdG1hcF9jdHJsOworCXU4IHB2Yl9maWVsZFtQQVJUSUFMX1ZCTV9NQVhdOyAvKiBQYXJ0aWFsIFZpcnR1YWwgQml0bWFwICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSB3bDEyNzFfY21kX3BzX21vZGUgeworCVNUQVRJT05fQUNUSVZFX01PREUsCisJU1RBVElPTl9QT1dFUl9TQVZFX01PREUKK307CisKK3N0cnVjdCB3bDEyNzFfY21kX3BzX3BhcmFtcyB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXU4IHBzX21vZGU7IC8qIFNUQVRJT05fKiAqLworCXU4IHNlbmRfbnVsbF9kYXRhOyAvKiBEbyB3ZSBoYXZlIHRvIHNlbmQgTlVMTCBkYXRhIHBhY2tldCA/ICovCisJdTggcmV0cmllczsgLyogTnVtYmVyIG9mIHJldGlyZXMgZm9yIHRoZSBpbml0aWFsIE5VTEwgZGF0YSBwYWNrZXQgKi8KKworCSAvKgorCSAgKiBUVXMgZHVyaW5nIHdoaWNoIHRoZSB0YXJnZXQgc3RheXMgYXdha2UgYWZ0ZXIgc3dpdGNoaW5nCisJICAqIHRvIHBvd2VyIHNhdmUgbW9kZS4KKwkgICovCisJdTggaGFuZ19vdmVyX3BlcmlvZDsKKwl1MzIgbnVsbF9kYXRhX3JhdGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogSFcgZW5jcnlwdGlvbiBrZXlzICovCisjZGVmaW5lIE5VTV9BQ0NFU1NfQ0FURUdPUklFU19DT1BZIDQKKyNkZWZpbmUgTUFYX0tFWV9TSVpFIDMyCisKKy8qIFdoZW4gc2V0LCBkaXNhYmxlIEhXIGVuY3J5cHRpb24gKi8KKyNkZWZpbmUgREZfRU5DUllQVElPTl9ESVNBQkxFICAgICAgMHgwMQorLyogV2hlbiBzZXQsIGRpc2FibGUgSFcgZGVjcnlwdGlvbiAqLworI2RlZmluZSBERl9TTklGRl9NT0RFX0VOQUJMRSAgICAgICAweDgwCisKK2VudW0gd2wxMjcxX2NtZF9rZXlfYWN0aW9uIHsKKwlLRVlfQUREX09SX1JFUExBQ0UgPSAxLAorCUtFWV9SRU1PVkUgICAgICAgICA9IDIsCisJS0VZX1NFVF9JRCAgICAgICAgID0gMywKKwlNQVhfS0VZX0FDVElPTiAgICAgPSAweGZmZmYsCit9OworCitlbnVtIHdsMTI3MV9jbWRfa2V5X3R5cGUgeworCUtFWV9OT05FID0gMCwKKwlLRVlfV0VQICA9IDEsCisJS0VZX1RLSVAgPSAyLAorCUtFWV9BRVMgID0gMywKKwlLRVlfR0VNICA9IDQKK307CisKKy8qIEZJWE1FOiBBZGQgZGVzY3JpcHRpb24gZm9yIGtleS10eXBlcyAqLworCitzdHJ1Y3Qgd2wxMjcxX2NtZF9zZXRfa2V5cyB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCS8qIElnbm9yZWQgZm9yIGRlZmF1bHQgV0VQIGtleSAqLworCXU4IGFkZHJbRVRIX0FMRU5dOworCisJLyoga2V5X2FjdGlvbl9lICovCisJdTE2IGtleV9hY3Rpb247CisKKwl1MTYgcmVzZXJ2ZWRfMTsKKworCS8qIGtleSBzaXplIGluIGJ5dGVzICovCisJdTgga2V5X3NpemU7CisKKwkvKiBrZXlfdHlwZV9lICovCisJdTgga2V5X3R5cGU7CisJdTggc3NpZF9wcm9maWxlOworCisJLyoKKwkgKiBUS0lQLCBBRVM6IGZyYW1lJ3Mga2V5IGlkIGZpZWxkLgorCSAqIEZvciBXRVAgZGVmYXVsdCBrZXk6IGtleSBpZDsKKwkgKi8KKwl1OCBpZDsKKwl1OCByZXNlcnZlZF8yWzZdOworCXU4IGtleVtNQVhfS0VZX1NJWkVdOworCXUxNiBhY19zZXFfbnVtMTZbTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFldOworCXUzMiBhY19zZXFfbnVtMzJbTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFldOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworI2RlZmluZSBXTDEyNzFfU0NBTl9NQVhfQ0hBTk5FTFMgICAgICAgMjQKKyNkZWZpbmUgV0wxMjcxX1NDQU5fREVGQVVMVF9UQUcgICAgICAgIDEKKyNkZWZpbmUgV0wxMjcxX1NDQU5fQ1VSUkVOVF9UWF9QV1IgICAgIDAKKyNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX0FDVElWRSAgICAgICAgIDAKKyNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX1BBU1NJVkUJICAgICAgIDEKKyNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX1BSSU9SSVRZX0hJR0ggIDQKKyNkZWZpbmUgV0wxMjcxX1NDQU5fQ0hBTl9NSU5fRFVSQVRJT04gIDMwMDAwICAvKiBUVSAqLworI2RlZmluZSBXTDEyNzFfU0NBTl9DSEFOX01BWF9EVVJBVElPTiAgNjAwMDAgIC8qIFRVICovCisKK3N0cnVjdCBiYXNpY19zY2FuX3BhcmFtcyB7CisJdTMyIHJ4X2NvbmZpZ19vcHRpb25zOworCXUzMiByeF9maWx0ZXJfb3B0aW9uczsKKwkvKiBTY2FuIG9wdGlvbiBmbGFncyAoV0wxMjcxX1NDQU5fT1BUXyopICovCisJdTE2IHNjYW5fb3B0aW9uczsKKwkvKiBOdW1iZXIgb2Ygc2NhbiBjaGFubmVscyBpbiB0aGUgbGlzdCAobWF4aW11bSAzMCkgKi8KKwl1OCBudW1fY2hhbm5lbHM7CisJLyogVGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBwcm9iZSByZXF1ZXN0cyB0byBzZW5kCisJICAgcGVyIGNoYW5uZWwgZm9yIGFuIGFjdGl2ZSBzY2FuICovCisJdTggbnVtX3Byb2JlX3JlcXVlc3RzOworCS8qIFJhdGUgYml0IGZpZWxkIGZvciBzZW5kaW5nIHRoZSBwcm9iZXMgKi8KKwl1MzIgdHhfcmF0ZTsKKwl1OCB0aWRfdHJpZ2dlcjsKKwl1OCBzc2lkX2xlbjsKKwkvKiBpbiBvcmRlciB0byBhbGlnbiAqLworCXU4IHBhZGRpbmcxWzJdOworCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOworCS8qIEJhbmQgdG8gc2NhbiAqLworCXU4IGJhbmQ7CisJdTggdXNlX3NzaWRfbGlzdDsKKwl1OCBzY2FuX3RhZzsKKwl1OCBwYWRkaW5nMjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYmFzaWNfc2Nhbl9jaGFubmVsX3BhcmFtcyB7CisJLyogRHVyYXRpb24gaW4gVFUgdG8gd2FpdCBmb3IgZnJhbWVzIG9uIGEgY2hhbm5lbCBmb3IgYWN0aXZlIHNjYW4gKi8KKwl1MzIgbWluX2R1cmF0aW9uOworCXUzMiBtYXhfZHVyYXRpb247CisJdTMyIGJzc2lkX2xzYjsKKwl1MTYgYnNzaWRfbXNiOworCXU4IGVhcmx5X3Rlcm1pbmF0aW9uOworCXU4IHR4X3Bvd2VyX2F0dDsKKwl1OCBjaGFubmVsOworCS8qIEZXIGludGVybmFsIHVzZSBvbmx5ISAqLworCXU4IGRmc19jYW5kaWRhdGU7CisJdTggYWN0aXZpdHlfZGV0ZWN0ZWQ7CisJdTggcGFkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB3bDEyNzFfY21kX3NjYW4geworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwlzdHJ1Y3QgYmFzaWNfc2Nhbl9wYXJhbXMgcGFyYW1zOworCXN0cnVjdCBiYXNpY19zY2FuX2NoYW5uZWxfcGFyYW1zIGNoYW5uZWxzW1dMMTI3MV9TQ0FOX01BWF9DSEFOTkVMU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHdsMTI3MV9jbWRfdHJpZ2dlcl9zY2FuX3RvIHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJdTMyIHRpbWVvdXQ7Cit9OworCitzdHJ1Y3Qgd2wxMjcxX2NtZF90ZXN0X2hlYWRlciB7CisJdTggaWQ7CisJdTggcGFkZGluZ1szXTsKK307CisKK2VudW0gd2wxMjcxX2NoYW5uZWxfdHVuZV9iYW5kcyB7CisJV0wxMjcxX0NIQU5ORUxfVFVORV9CQU5EXzJfNCwKKwlXTDEyNzFfQ0hBTk5FTF9UVU5FX0JBTkRfNSwKKwlXTDEyNzFfQ0hBTk5FTF9UVU5FX0JBTkRfNF85Cit9OworCisjZGVmaW5lIFdMMTI3MV9QRF9SRUZFUkVOQ0VfUE9JTlRfQkFORF9CX0cgMAorCisjZGVmaW5lIFRFU1RfQ01EX1AyR19DQUwgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBURVNUX0NNRF9DSEFOTkVMX1RVTkUgICAgICAgICAgICAgIDB4MGQKKyNkZWZpbmUgVEVTVF9DTURfVVBEQVRFX1BEX1JFRkVSRU5DRV9QT0lOVCAweDFkCisKK3N0cnVjdCB3bDEyNzFfY21kX2NhbF9jaGFubmVsX3R1bmUgeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF90ZXN0X2hlYWRlciB0ZXN0OworCisJdTggYmFuZDsKKwl1OCBjaGFubmVsOworCisJdTE2IHJhZGlvX3N0YXR1czsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3Qgd2wxMjcxX2NtZF9jYWxfdXBkYXRlX3JlZl9wb2ludCB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXN0cnVjdCB3bDEyNzFfY21kX3Rlc3RfaGVhZGVyIHRlc3Q7CisKKwlzMzIgcmVmX3Bvd2VyOworCXMzMiByZWZfZGV0ZWN0b3I7CisJdTggIHN1Yl9iYW5kOworCXU4ICBwYWRkaW5nWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgTUFYX1RMVl9MRU5HVEggICAgICAgICA0MDAKKyNkZWZpbmUJTUFYX05WU19WRVJTSU9OX0xFTkdUSCAxMgorCisjZGVmaW5lIFdMMTI3MV9DQUxfUDJHX0JBTkRfQl9HIEJJVCgwKQorCitzdHJ1Y3Qgd2wxMjcxX2NtZF9jYWxfcDJnIHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJc3RydWN0IHdsMTI3MV9jbWRfdGVzdF9oZWFkZXIgdGVzdDsKKworCXUxNiBsZW47CisJdTggIGJ1ZltNQVhfVExWX0xFTkdUSF07CisJdTggIHR5cGU7CisJdTggIHBhZGRpbmc7CisKKwlzMTYgcmFkaW9fc3RhdHVzOworCXU4ICBudnNfdmVyc2lvbltNQVhfTlZTX1ZFUlNJT05fTEVOR1RIXTsKKworCXU4ICBzdWJfYmFuZF9tYXNrOworCXU4ICBwYWRkaW5nMjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZW5kaWYgLyogX19XTDEyNzFfQ01EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2RlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTgwNWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9kZWJ1Z2ZzLmMKQEAgLTAsMCArMSw1MTggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIndsMTI3MV9kZWJ1Z2ZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworI2luY2x1ZGUgIndsMTI3MS5oIgorI2luY2x1ZGUgIndsMTI3MV9hY3guaCIKKyNpbmNsdWRlICJ3bDEyNzFfcHMuaCIKKworLyogbXMgKi8KKyNkZWZpbmUgV0wxMjcxX0RFQlVHRlNfU1RBVFNfTElGRVRJTUUgMTAwMAorCisvKiBkZWJ1Z2ZzIG1hY3JvcyBpZGVhIGZyb20gbWFjODAyMTEgKi8KKworI2RlZmluZSBERUJVR0ZTX1JFQURPTkxZX0ZJTEUobmFtZSwgYnVmbGVuLCBmbXQsIHZhbHVlLi4uKQkJXAorc3RhdGljIHNzaXplX3QgbmFtZSMjIF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwJXAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CQkJCVwKKwljaGFyIGJ1ZltidWZsZW5dOwkJCQkJCVwKKwlpbnQgcmVzOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJcmVzID0gc2NucHJpbnRmKGJ1ZiwgYnVmbGVuLCBmbXQgIlxuIiwgIyN2YWx1ZSk7CQlcCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7CVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuYW1lIyMgX29wcyA9IHsJCQlcCisJLnJlYWQgPSBuYW1lIyMgX3JlYWQsCQkJCQkJXAorCS5vcGVuID0gd2wxMjcxX29wZW5fZmlsZV9nZW5lcmljLAkJCQlcCit9OworCisjZGVmaW5lIERFQlVHRlNfQUREKG5hbWUsIHBhcmVudCkJCQkJCVwKKwl3bC0+ZGVidWdmcy5uYW1lID0gZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgMDQwMCwgcGFyZW50LAlcCisJCQkJCSAgICAgICB3bCwgJm5hbWUjIyBfb3BzKTsJXAorCWlmIChJU19FUlIod2wtPmRlYnVnZnMubmFtZSkpIHsJCQkJCVwKKwkJcmV0ID0gUFRSX0VSUih3bC0+ZGVidWdmcy5uYW1lKTsJCQlcCisJCXdsLT5kZWJ1Z2ZzLm5hbWUgPSBOVUxMOwkJCQlcCisJCWdvdG8gb3V0OwkJCQkJCVwKKwl9CisKKyNkZWZpbmUgREVCVUdGU19ERUwobmFtZSkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlkZWJ1Z2ZzX3JlbW92ZSh3bC0+ZGVidWdmcy5uYW1lKTsJCQlcCisJCXdsLT5kZWJ1Z2ZzLm5hbWUgPSBOVUxMOwkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBERUJVR0ZTX0ZXU1RBVFNfRklMRShzdWIsIG5hbWUsIGJ1ZmxlbiwgZm10KQkJCVwKK3N0YXRpYyBzc2l6ZV90IHN1YiMjIF8gIyNuYW1lIyMgX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCQlcCisJCQkJICAgICAgY2hhciBfX3VzZXIgKnVzZXJidWYsCQlcCisJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CQkJCVwKKwljaGFyIGJ1ZltidWZsZW5dOwkJCQkJCVwKKwlpbnQgcmVzOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJd2wxMjcxX2RlYnVnZnNfdXBkYXRlX3N0YXRzKHdsKTsJCQkJXAorCQkJCQkJCQkJXAorCXJlcyA9IHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgZm10ICJcbiIsCQkJCVwKKwkJCXdsLT5zdGF0cy5md19zdGF0cy0+c3ViLm5hbWUpOwkJCVwKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN1YiMjIF8gIyNuYW1lIyMgX29wcyA9IHsJCVwKKwkucmVhZCA9IHN1YiMjIF8gIyNuYW1lIyMgX3JlYWQsCQkJCQlcCisJLm9wZW4gPSB3bDEyNzFfb3Blbl9maWxlX2dlbmVyaWMsCQkJCVwKK307CisKKyNkZWZpbmUgREVCVUdGU19GV1NUQVRTX0FERChzdWIsIG5hbWUpCQkJCVwKKwlERUJVR0ZTX0FERChzdWIjIyBfICMjbmFtZSwgd2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcykKKworI2RlZmluZSBERUJVR0ZTX0ZXU1RBVFNfREVMKHN1YiwgbmFtZSkJCQkJXAorCURFQlVHRlNfREVMKHN1YiMjIF8gIyNuYW1lKQorCitzdGF0aWMgdm9pZCB3bDEyNzFfZGVidWdmc191cGRhdGVfc3RhdHMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWlmICh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09OICYmCisJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgd2wtPnN0YXRzLmZ3X3N0YXRzX3VwZGF0ZSArCisJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKFdMMTI3MV9ERUJVR0ZTX1NUQVRTX0xJRkVUSU1FKSkpIHsKKwkJd2wxMjcxX2FjeF9zdGF0aXN0aWNzKHdsLCB3bC0+c3RhdHMuZndfc3RhdHMpOworCQl3bC0+c3RhdHMuZndfc3RhdHNfdXBkYXRlID0gamlmZmllczsKKwl9CisKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKworc3RhdGljIGludCB3bDEyNzFfb3Blbl9maWxlX2dlbmVyaWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworREVCVUdGU19GV1NUQVRTX0ZJTEUodHgsIGludGVybmFsX2Rlc2Nfb3ZlcmZsb3csIDIwLCAiJXUiKTsKKworREVCVUdGU19GV1NUQVRTX0ZJTEUocngsIG91dF9vZl9tZW0sIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBoZHJfb3ZlcmZsb3csIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBod19zdHVjaywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocngsIGRyb3BwZWQsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCBmY3NfZXJyLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShyeCwgeGZyX2hpbnRfdHJpZywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocngsIHBhdGhfcmVzZXQsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHJ4LCByZXNldF9jb3VudGVyLCAyMCwgIiV1Iik7CisKK0RFQlVHRlNfRldTVEFUU19GSUxFKGRtYSwgcnhfcmVxdWVzdGVkLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShkbWEsIHJ4X2Vycm9ycywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoZG1hLCB0eF9yZXF1ZXN0ZWQsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGRtYSwgdHhfZXJyb3JzLCAyMCwgIiV1Iik7CisKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgY21kX2NtcGx0LCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGZpcXMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgcnhfaGVhZGVycywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCByeF9tZW1fb3ZlcmZsb3csIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgcnhfcmR5cywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBpcnFzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIHR4X3Byb2NzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGRlY3J5cHRfZG9uZSwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCBkbWEwX2RvbmUsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgZG1hMV9kb25lLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIHR4X2V4Y2hfY29tcGxldGUsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgY29tbWFuZHMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgcnhfcHJvY3MsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGlzciwgaHdfcG1fbW9kZV9jaGFuZ2VzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGhvc3RfYWNrbm93bGVkZ2VzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIHBjaV9wbSwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoaXNyLCB3YWtldXBzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShpc3IsIGxvd19yc3NpLCAyMCwgIiV1Iik7CisKK0RFQlVHRlNfRldTVEFUU19GSUxFKHdlcCwgYWRkcl9rZXlfY291bnQsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHdlcCwgZGVmYXVsdF9rZXlfY291bnQsIDIwLCAiJXUiKTsKKy8qIHNraXBwaW5nIHdlcC5yZXNlcnZlZCAqLworREVCVUdGU19GV1NUQVRTX0ZJTEUod2VwLCBrZXlfbm90X2ZvdW5kLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRSh3ZXAsIGRlY3J5cHRfZmFpbCwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUod2VwLCBwYWNrZXRzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRSh3ZXAsIGludGVycnVwdCwgMjAsICIldSIpOworCitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHBzX2VudGVyLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIGVscF9lbnRlciwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCBtaXNzaW5nX2JjbnMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgd2FrZV9vbl9ob3N0LCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHdha2Vfb25fdGltZXJfZXhwLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIHR4X3dpdGhfcHMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgdHhfd2l0aG91dF9wcywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHdyLCByY3ZkX2JlYWNvbnMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgcG93ZXJfc2F2ZV9vZmYsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgZW5hYmxlX3BzLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShwd3IsIGRpc2FibGVfcHMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgZml4X3RzZl9wcywgMjAsICIldSIpOworLyogc2tpcHBpbmcgY29udF9taXNzX2JjbnNfc3ByZWFkIGZvciBub3cgKi8KK0RFQlVHRlNfRldTVEFUU19GSUxFKHB3ciwgcmN2ZF9hd2FrZV9iZWFjb25zLCAyMCwgIiV1Iik7CisKK0RFQlVHRlNfRldTVEFUU19GSUxFKG1pYywgcnhfcGt0cywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUobWljLCBjYWxjX2ZhaWx1cmUsIDIwLCAiJXUiKTsKKworREVCVUdGU19GV1NUQVRTX0ZJTEUoYWVzLCBlbmNyeXB0X2ZhaWwsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZGVjcnlwdF9mYWlsLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShhZXMsIGVuY3J5cHRfcGFja2V0cywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoYWVzLCBkZWNyeXB0X3BhY2tldHMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZW5jcnlwdF9pbnRlcnJ1cHQsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGFlcywgZGVjcnlwdF9pbnRlcnJ1cHQsIDIwLCAiJXUiKTsKKworREVCVUdGU19GV1NUQVRTX0ZJTEUoZXZlbnQsIGhlYXJ0X2JlYXQsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKGV2ZW50LCBjYWxpYnJhdGlvbiwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoZXZlbnQsIHJ4X21pc21hdGNoLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgcnhfbWVtX2VtcHR5LCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgcnhfcG9vbCwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUoZXZlbnQsIG9vbV9sYXRlLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgcGh5X3RyYW5zbWl0X2Vycm9yLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShldmVudCwgdHhfc3R1Y2ssIDIwLCAiJXUiKTsKKworREVCVUdGU19GV1NUQVRTX0ZJTEUocHMsIHBzcG9sbF90aW1lb3V0cywgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHMsIHVwc2RfdGltZW91dHMsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHBzLCB1cHNkX21heF9zcHRpbWUsIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHBzLCB1cHNkX21heF9hcHR1cm4sIDIwLCAiJXUiKTsKK0RFQlVHRlNfRldTVEFUU19GSUxFKHBzLCBwc3BvbGxfbWF4X2FwdHVybiwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHMsIHBzcG9sbF91dGlsaXphdGlvbiwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocHMsIHVwc2RfdXRpbGl6YXRpb24sIDIwLCAiJXUiKTsKKworREVCVUdGU19GV1NUQVRTX0ZJTEUocnhwaXBlLCByeF9wcmVwX2JlYWNvbl9kcm9wLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShyeHBpcGUsIGRlc2NyX2hvc3RfaW50X3RyaWdfcnhfZGF0YSwgMjAsICIldSIpOworREVCVUdGU19GV1NUQVRTX0ZJTEUocnhwaXBlLCBiZWFjb25fYnVmZmVyX3RocmVzX2hvc3RfaW50X3RyaWdfcnhfZGF0YSwKKwkJICAgICAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShyeHBpcGUsIG1pc3NlZF9iZWFjb25faG9zdF9pbnRfdHJpZ19yeF9kYXRhLCAyMCwgIiV1Iik7CitERUJVR0ZTX0ZXU1RBVFNfRklMRShyeHBpcGUsIHR4X3hmcl9ob3N0X2ludF90cmlnX3J4X2RhdGEsIDIwLCAiJXUiKTsKKworREVCVUdGU19SRUFET05MWV9GSUxFKHJldHJ5X2NvdW50LCAyMCwgIiV1Iiwgd2wtPnN0YXRzLnJldHJ5X2NvdW50KTsKK0RFQlVHRlNfUkVBRE9OTFlfRklMRShleGNlc3NpdmVfcmV0cmllcywgMjAsICIldSIsCisJCSAgICAgIHdsLT5zdGF0cy5leGNlc3NpdmVfcmV0cmllcyk7CisKK3N0YXRpYyBzc2l6ZV90IHR4X3F1ZXVlX2xlbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdTMyIHF1ZXVlX2xlbjsKKwljaGFyIGJ1ZlsyMF07CisJaW50IHJlczsKKworCXF1ZXVlX2xlbiA9IHNrYl9xdWV1ZV9sZW4oJndsLT50eF9xdWV1ZSk7CisKKwlyZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLCBxdWV1ZV9sZW4pOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0eF9xdWV1ZV9sZW5fb3BzID0geworCS5yZWFkID0gdHhfcXVldWVfbGVuX3JlYWQsCisJLm9wZW4gPSB3bDEyNzFfb3Blbl9maWxlX2dlbmVyaWMsCit9OworCitzdGF0aWMgdm9pZCB3bDEyNzFfZGVidWdmc19kZWxldGVfZmlsZXMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJREVCVUdGU19GV1NUQVRTX0RFTCh0eCwgaW50ZXJuYWxfZGVzY19vdmVyZmxvdyk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCBvdXRfb2ZfbWVtKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCBoZHJfb3ZlcmZsb3cpOworCURFQlVHRlNfRldTVEFUU19ERUwocngsIGh3X3N0dWNrKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCBkcm9wcGVkKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCBmY3NfZXJyKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCB4ZnJfaGludF90cmlnKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCBwYXRoX3Jlc2V0KTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4LCByZXNldF9jb3VudGVyKTsKKworCURFQlVHRlNfRldTVEFUU19ERUwoZG1hLCByeF9yZXF1ZXN0ZWQpOworCURFQlVHRlNfRldTVEFUU19ERUwoZG1hLCByeF9lcnJvcnMpOworCURFQlVHRlNfRldTVEFUU19ERUwoZG1hLCB0eF9yZXF1ZXN0ZWQpOworCURFQlVHRlNfRldTVEFUU19ERUwoZG1hLCB0eF9lcnJvcnMpOworCisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGNtZF9jbXBsdCk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGZpcXMpOworCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCByeF9oZWFkZXJzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgcnhfbWVtX292ZXJmbG93KTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgcnhfcmR5cyk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGlycXMpOworCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCB0eF9wcm9jcyk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGRlY3J5cHRfZG9uZSk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGRtYTBfZG9uZSk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIGRtYTFfZG9uZSk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIHR4X2V4Y2hfY29tcGxldGUpOworCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBjb21tYW5kcyk7CisJREVCVUdGU19GV1NUQVRTX0RFTChpc3IsIHJ4X3Byb2NzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgaHdfcG1fbW9kZV9jaGFuZ2VzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgaG9zdF9hY2tub3dsZWRnZXMpOworCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCBwY2lfcG0pOworCURFQlVHRlNfRldTVEFUU19ERUwoaXNyLCB3YWtldXBzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGlzciwgbG93X3Jzc2kpOworCisJREVCVUdGU19GV1NUQVRTX0RFTCh3ZXAsIGFkZHJfa2V5X2NvdW50KTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHdlcCwgZGVmYXVsdF9rZXlfY291bnQpOworCS8qIHNraXBwaW5nIHdlcC5yZXNlcnZlZCAqLworCURFQlVHRlNfRldTVEFUU19ERUwod2VwLCBrZXlfbm90X2ZvdW5kKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHdlcCwgZGVjcnlwdF9mYWlsKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHdlcCwgcGFja2V0cyk7CisJREVCVUdGU19GV1NUQVRTX0RFTCh3ZXAsIGludGVycnVwdCk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgcHNfZW50ZXIpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCBlbHBfZW50ZXIpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCBtaXNzaW5nX2JjbnMpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCB3YWtlX29uX2hvc3QpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCB3YWtlX29uX3RpbWVyX2V4cCk7CisJREVCVUdGU19GV1NUQVRTX0RFTChwd3IsIHR4X3dpdGhfcHMpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCB0eF93aXRob3V0X3BzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgcmN2ZF9iZWFjb25zKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgcG93ZXJfc2F2ZV9vZmYpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCBlbmFibGVfcHMpOworCURFQlVHRlNfRldTVEFUU19ERUwocHdyLCBkaXNhYmxlX3BzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgZml4X3RzZl9wcyk7CisJLyogc2tpcHBpbmcgY29udF9taXNzX2JjbnNfc3ByZWFkIGZvciBub3cgKi8KKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHB3ciwgcmN2ZF9hd2FrZV9iZWFjb25zKTsKKworCURFQlVHRlNfRldTVEFUU19ERUwobWljLCByeF9wa3RzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKG1pYywgY2FsY19mYWlsdXJlKTsKKworCURFQlVHRlNfRldTVEFUU19ERUwoYWVzLCBlbmNyeXB0X2ZhaWwpOworCURFQlVHRlNfRldTVEFUU19ERUwoYWVzLCBkZWNyeXB0X2ZhaWwpOworCURFQlVHRlNfRldTVEFUU19ERUwoYWVzLCBlbmNyeXB0X3BhY2tldHMpOworCURFQlVHRlNfRldTVEFUU19ERUwoYWVzLCBkZWNyeXB0X3BhY2tldHMpOworCURFQlVHRlNfRldTVEFUU19ERUwoYWVzLCBlbmNyeXB0X2ludGVycnVwdCk7CisJREVCVUdGU19GV1NUQVRTX0RFTChhZXMsIGRlY3J5cHRfaW50ZXJydXB0KTsKKworCURFQlVHRlNfRldTVEFUU19ERUwoZXZlbnQsIGhlYXJ0X2JlYXQpOworCURFQlVHRlNfRldTVEFUU19ERUwoZXZlbnQsIGNhbGlicmF0aW9uKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGV2ZW50LCByeF9taXNtYXRjaCk7CisJREVCVUdGU19GV1NUQVRTX0RFTChldmVudCwgcnhfbWVtX2VtcHR5KTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGV2ZW50LCByeF9wb29sKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGV2ZW50LCBvb21fbGF0ZSk7CisJREVCVUdGU19GV1NUQVRTX0RFTChldmVudCwgcGh5X3RyYW5zbWl0X2Vycm9yKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKGV2ZW50LCB0eF9zdHVjayk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHBzLCBwc3BvbGxfdGltZW91dHMpOworCURFQlVHRlNfRldTVEFUU19ERUwocHMsIHVwc2RfdGltZW91dHMpOworCURFQlVHRlNfRldTVEFUU19ERUwocHMsIHVwc2RfbWF4X3NwdGltZSk7CisJREVCVUdGU19GV1NUQVRTX0RFTChwcywgdXBzZF9tYXhfYXB0dXJuKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHBzLCBwc3BvbGxfbWF4X2FwdHVybik7CisJREVCVUdGU19GV1NUQVRTX0RFTChwcywgcHNwb2xsX3V0aWxpemF0aW9uKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHBzLCB1cHNkX3V0aWxpemF0aW9uKTsKKworCURFQlVHRlNfRldTVEFUU19ERUwocnhwaXBlLCByeF9wcmVwX2JlYWNvbl9kcm9wKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4cGlwZSwgZGVzY3JfaG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKKwlERUJVR0ZTX0ZXU1RBVFNfREVMKHJ4cGlwZSwgYmVhY29uX2J1ZmZlcl90aHJlc19ob3N0X2ludF90cmlnX3J4X2RhdGEpOworCURFQlVHRlNfRldTVEFUU19ERUwocnhwaXBlLCBtaXNzZWRfYmVhY29uX2hvc3RfaW50X3RyaWdfcnhfZGF0YSk7CisJREVCVUdGU19GV1NUQVRTX0RFTChyeHBpcGUsIHR4X3hmcl9ob3N0X2ludF90cmlnX3J4X2RhdGEpOworCisJREVCVUdGU19ERUwodHhfcXVldWVfbGVuKTsKKwlERUJVR0ZTX0RFTChyZXRyeV9jb3VudCk7CisJREVCVUdGU19ERUwoZXhjZXNzaXZlX3JldHJpZXMpOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9kZWJ1Z2ZzX2FkZF9maWxlcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCURFQlVHRlNfRldTVEFUU19BREQodHgsIGludGVybmFsX2Rlc2Nfb3ZlcmZsb3cpOworCisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgb3V0X29mX21lbSk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgaGRyX292ZXJmbG93KTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4LCBod19zdHVjayk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgZHJvcHBlZCk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgZmNzX2Vycik7CisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgeGZyX2hpbnRfdHJpZyk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgcGF0aF9yZXNldCk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeCwgcmVzZXRfY291bnRlcik7CisKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGRtYSwgcnhfcmVxdWVzdGVkKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGRtYSwgcnhfZXJyb3JzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGRtYSwgdHhfcmVxdWVzdGVkKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGRtYSwgdHhfZXJyb3JzKTsKKworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBjbWRfY21wbHQpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBmaXFzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgcnhfaGVhZGVycyk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIHJ4X21lbV9vdmVyZmxvdyk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIHJ4X3JkeXMpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBpcnFzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgdHhfcHJvY3MpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBkZWNyeXB0X2RvbmUpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBkbWEwX2RvbmUpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCBkbWExX2RvbmUpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCB0eF9leGNoX2NvbXBsZXRlKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgY29tbWFuZHMpOworCURFQlVHRlNfRldTVEFUU19BREQoaXNyLCByeF9wcm9jcyk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGh3X3BtX21vZGVfY2hhbmdlcyk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGhvc3RfYWNrbm93bGVkZ2VzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgcGNpX3BtKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGlzciwgd2FrZXVwcyk7CisJREVCVUdGU19GV1NUQVRTX0FERChpc3IsIGxvd19yc3NpKTsKKworCURFQlVHRlNfRldTVEFUU19BREQod2VwLCBhZGRyX2tleV9jb3VudCk7CisJREVCVUdGU19GV1NUQVRTX0FERCh3ZXAsIGRlZmF1bHRfa2V5X2NvdW50KTsKKwkvKiBza2lwcGluZyB3ZXAucmVzZXJ2ZWQgKi8KKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHdlcCwga2V5X25vdF9mb3VuZCk7CisJREVCVUdGU19GV1NUQVRTX0FERCh3ZXAsIGRlY3J5cHRfZmFpbCk7CisJREVCVUdGU19GV1NUQVRTX0FERCh3ZXAsIHBhY2tldHMpOworCURFQlVHRlNfRldTVEFUU19BREQod2VwLCBpbnRlcnJ1cHQpOworCisJREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHBzX2VudGVyKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgZWxwX2VudGVyKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgbWlzc2luZ19iY25zKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgd2FrZV9vbl9ob3N0KTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgd2FrZV9vbl90aW1lcl9leHApOworCURFQlVHRlNfRldTVEFUU19BREQocHdyLCB0eF93aXRoX3BzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgdHhfd2l0aG91dF9wcyk7CisJREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHJjdmRfYmVhY29ucyk7CisJREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHBvd2VyX3NhdmVfb2ZmKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgZW5hYmxlX3BzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHB3ciwgZGlzYWJsZV9wcyk7CisJREVCVUdGU19GV1NUQVRTX0FERChwd3IsIGZpeF90c2ZfcHMpOworCS8qIHNraXBwaW5nIGNvbnRfbWlzc19iY25zX3NwcmVhZCBmb3Igbm93ICovCisJREVCVUdGU19GV1NUQVRTX0FERChwd3IsIHJjdmRfYXdha2VfYmVhY29ucyk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKG1pYywgcnhfcGt0cyk7CisJREVCVUdGU19GV1NUQVRTX0FERChtaWMsIGNhbGNfZmFpbHVyZSk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZW5jcnlwdF9mYWlsKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZGVjcnlwdF9mYWlsKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZW5jcnlwdF9wYWNrZXRzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZGVjcnlwdF9wYWNrZXRzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGFlcywgZW5jcnlwdF9pbnRlcnJ1cHQpOworCURFQlVHRlNfRldTVEFUU19BREQoYWVzLCBkZWNyeXB0X2ludGVycnVwdCk7CisKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGV2ZW50LCBoZWFydF9iZWF0KTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKGV2ZW50LCBjYWxpYnJhdGlvbik7CisJREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgcnhfbWlzbWF0Y2gpOworCURFQlVHRlNfRldTVEFUU19BREQoZXZlbnQsIHJ4X21lbV9lbXB0eSk7CisJREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgcnhfcG9vbCk7CisJREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgb29tX2xhdGUpOworCURFQlVHRlNfRldTVEFUU19BREQoZXZlbnQsIHBoeV90cmFuc21pdF9lcnJvcik7CisJREVCVUdGU19GV1NUQVRTX0FERChldmVudCwgdHhfc3R1Y2spOworCisJREVCVUdGU19GV1NUQVRTX0FERChwcywgcHNwb2xsX3RpbWVvdXRzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHBzLCB1cHNkX3RpbWVvdXRzKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHBzLCB1cHNkX21heF9zcHRpbWUpOworCURFQlVHRlNfRldTVEFUU19BREQocHMsIHVwc2RfbWF4X2FwdHVybik7CisJREVCVUdGU19GV1NUQVRTX0FERChwcywgcHNwb2xsX21heF9hcHR1cm4pOworCURFQlVHRlNfRldTVEFUU19BREQocHMsIHBzcG9sbF91dGlsaXphdGlvbik7CisJREVCVUdGU19GV1NUQVRTX0FERChwcywgdXBzZF91dGlsaXphdGlvbik7CisKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4cGlwZSwgcnhfcHJlcF9iZWFjb25fZHJvcCk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeHBpcGUsIGRlc2NyX2hvc3RfaW50X3RyaWdfcnhfZGF0YSk7CisJREVCVUdGU19GV1NUQVRTX0FERChyeHBpcGUsIGJlYWNvbl9idWZmZXJfdGhyZXNfaG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKKwlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4cGlwZSwgbWlzc2VkX2JlYWNvbl9ob3N0X2ludF90cmlnX3J4X2RhdGEpOworCURFQlVHRlNfRldTVEFUU19BREQocnhwaXBlLCB0eF94ZnJfaG9zdF9pbnRfdHJpZ19yeF9kYXRhKTsKKworCURFQlVHRlNfQUREKHR4X3F1ZXVlX2xlbiwgd2wtPmRlYnVnZnMucm9vdGRpcik7CisJREVCVUdGU19BREQocmV0cnlfY291bnQsIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOworCURFQlVHRlNfQUREKGV4Y2Vzc2l2ZV9yZXRyaWVzLCB3bC0+ZGVidWdmcy5yb290ZGlyKTsKKworb3V0OgorCWlmIChyZXQgPCAwKQorCQl3bDEyNzFfZGVidWdmc19kZWxldGVfZmlsZXMod2wpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCB3bDEyNzFfZGVidWdmc19yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwltZW1zZXQod2wtPnN0YXRzLmZ3X3N0YXRzLCAwLCBzaXplb2YoKndsLT5zdGF0cy5md19zdGF0cykpOworCXdsLT5zdGF0cy5yZXRyeV9jb3VudCA9IDA7CisJd2wtPnN0YXRzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMDsKK30KKworaW50IHdsMTI3MV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCXdsLT5kZWJ1Z2ZzLnJvb3RkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoS0JVSUxEX01PRE5BTUUsIE5VTEwpOworCisJaWYgKElTX0VSUih3bC0+ZGVidWdmcy5yb290ZGlyKSkgeworCQlyZXQgPSBQVFJfRVJSKHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOworCQl3bC0+ZGVidWdmcy5yb290ZGlyID0gTlVMTDsKKwkJZ290byBlcnI7CisJfQorCisJd2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcyA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZnctc3RhdGlzdGljcyIsCisJCQkJCQkgICAgICAgd2wtPmRlYnVnZnMucm9vdGRpcik7CisKKwlpZiAoSVNfRVJSKHdsLT5kZWJ1Z2ZzLmZ3X3N0YXRpc3RpY3MpKSB7CisJCXJldCA9IFBUUl9FUlIod2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcyk7CisJCXdsLT5kZWJ1Z2ZzLmZ3X3N0YXRpc3RpY3MgPSBOVUxMOworCQlnb3RvIGVycl9yb290OworCX0KKworCXdsLT5zdGF0cy5md19zdGF0cyA9IGt6YWxsb2Moc2l6ZW9mKCp3bC0+c3RhdHMuZndfc3RhdHMpLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCisJaWYgKCF3bC0+c3RhdHMuZndfc3RhdHMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnc7CisJfQorCisJd2wtPnN0YXRzLmZ3X3N0YXRzX3VwZGF0ZSA9IGppZmZpZXM7CisKKwlyZXQgPSB3bDEyNzFfZGVidWdmc19hZGRfZmlsZXMod2wpOworCisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2ZpbGU7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZpbGU6CisJa2ZyZWUod2wtPnN0YXRzLmZ3X3N0YXRzKTsKKwl3bC0+c3RhdHMuZndfc3RhdHMgPSBOVUxMOworCitlcnJfZnc6CisJZGVidWdmc19yZW1vdmUod2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcyk7CisJd2wtPmRlYnVnZnMuZndfc3RhdGlzdGljcyA9IE5VTEw7CisKK2Vycl9yb290OgorCWRlYnVnZnNfcmVtb3ZlKHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOworCXdsLT5kZWJ1Z2ZzLnJvb3RkaXIgPSBOVUxMOworCitlcnI6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB3bDEyNzFfZGVidWdmc19leGl0KHN0cnVjdCB3bDEyNzEgKndsKQoreworCXdsMTI3MV9kZWJ1Z2ZzX2RlbGV0ZV9maWxlcyh3bCk7CisKKwlrZnJlZSh3bC0+c3RhdHMuZndfc3RhdHMpOworCXdsLT5zdGF0cy5md19zdGF0cyA9IE5VTEw7CisKKwlkZWJ1Z2ZzX3JlbW92ZSh3bC0+ZGVidWdmcy5md19zdGF0aXN0aWNzKTsKKwl3bC0+ZGVidWdmcy5md19zdGF0aXN0aWNzID0gTlVMTDsKKworCWRlYnVnZnNfcmVtb3ZlKHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOworCXdsLT5kZWJ1Z2ZzLnJvb3RkaXIgPSBOVUxMOworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2RlYnVnZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZGVidWdmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYTQ1YjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2RlYnVnZnMuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgV0wxMjcxX0RFQlVHRlNfSAorI2RlZmluZSBXTDEyNzFfREVCVUdGU19ICisKKyNpbmNsdWRlICJ3bDEyNzEuaCIKKworaW50IHdsMTI3MV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHdsMTI3MSAqd2wpOwordm9pZCB3bDEyNzFfZGVidWdmc19leGl0KHN0cnVjdCB3bDEyNzEgKndsKTsKK3ZvaWQgd2wxMjcxX2RlYnVnZnNfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpOworCisjZW5kaWYgLyogV0wxMjcxX0RFQlVHRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYWZkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAid2wxMjcxLmgiCisjaW5jbHVkZSAid2wxMjcxX3JlZy5oIgorI2luY2x1ZGUgIndsMTI3MV9zcGkuaCIKKyNpbmNsdWRlICJ3bDEyNzFfZXZlbnQuaCIKKyNpbmNsdWRlICJ3bDEyNzFfcHMuaCIKKworc3RhdGljIGludCB3bDEyNzFfZXZlbnRfc2Nhbl9jb21wbGV0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwKKwkJCQkgICAgICBzdHJ1Y3QgZXZlbnRfbWFpbGJveCAqbWJveCkKK3sKKwl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJzdGF0dXM6IDB4JXgiLAorCQkgICAgIG1ib3gtPnNjaGVkdWxlZF9zY2FuX3N0YXR1cyk7CisKKwlpZiAod2wtPnNjYW5uaW5nKSB7CisJCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgZmFsc2UpOworCQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCQl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2wxMjcxX2V2ZW50X21ib3hfZHVtcChzdHJ1Y3QgZXZlbnRfbWFpbGJveCAqbWJveCkKK3sKKwl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJNQk9YIERVTVA6Iik7CisJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAiXHR2ZWN0b3I6IDB4JXgiLCBtYm94LT5ldmVudHNfdmVjdG9yKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJcdG1hc2s6IDB4JXgiLCBtYm94LT5ldmVudHNfbWFzayk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2V2ZW50X3Byb2Nlc3Moc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBldmVudF9tYWlsYm94ICptYm94KQoreworCWludCByZXQ7CisJdTMyIHZlY3RvcjsKKworCXdsMTI3MV9ldmVudF9tYm94X2R1bXAobWJveCk7CisKKwl2ZWN0b3IgPSBtYm94LT5ldmVudHNfdmVjdG9yICYgfihtYm94LT5ldmVudHNfbWFzayk7CisJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAidmVjdG9yOiAweCV4IiwgdmVjdG9yKTsKKworCWlmICh2ZWN0b3IgJiBTQ0FOX0NPTVBMRVRFX0VWRU5UX0lEKSB7CisJCXJldCA9IHdsMTI3MV9ldmVudF9zY2FuX2NvbXBsZXRlKHdsLCBtYm94KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmICh2ZWN0b3IgJiBCU1NfTE9TRV9FVkVOVF9JRCkgeworCQl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJCU1NfTE9TRV9FVkVOVCIpOworCisJCWlmICh3bC0+cHNtX3JlcXVlc3RlZCAmJiB3bC0+cHNtKSB7CisJCQlyZXQgPSB3bDEyNzFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgd2wxMjcxX2V2ZW50X3VubWFzayhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9ldmVudF9tYm94X21hc2sod2wsIH4od2wtPmV2ZW50X21hc2spKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCit2b2lkIHdsMTI3MV9ldmVudF9tYm94X2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl3bC0+bWJveF9wdHJbMF0gPSB3bDEyNzFfcmVnX3JlYWQzMih3bCwgUkVHX0VWRU5UX01BSUxCT1hfUFRSKTsKKwl3bC0+bWJveF9wdHJbMV0gPSB3bC0+bWJveF9wdHJbMF0gKyBzaXplb2Yoc3RydWN0IGV2ZW50X21haWxib3gpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAiTUJPWCBwdHJzOiAweCV4IDB4JXgiLAorCQkgICAgIHdsLT5tYm94X3B0clswXSwgd2wtPm1ib3hfcHRyWzFdKTsKK30KKworaW50IHdsMTI3MV9ldmVudF9oYW5kbGUoc3RydWN0IHdsMTI3MSAqd2wsIHU4IG1ib3hfbnVtKQoreworCXN0cnVjdCBldmVudF9tYWlsYm94IG1ib3g7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIkVWRU5UIG9uIG1ib3ggJWQiLCBtYm94X251bSk7CisKKwlpZiAobWJveF9udW0gPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGZpcnN0IHdlIHJlYWQgdGhlIG1ib3ggZGVzY3JpcHRvciAqLworCXdsMTI3MV9zcGlfbWVtX3JlYWQod2wsIHdsLT5tYm94X3B0clttYm94X251bV0sICZtYm94LAorCQkJICAgIHNpemVvZihzdHJ1Y3QgZXZlbnRfbWFpbGJveCkpOworCisJLyogcHJvY2VzcyB0aGUgZGVzY3JpcHRvciAqLworCXJldCA9IHdsMTI3MV9ldmVudF9wcm9jZXNzKHdsLCAmbWJveCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiB0aGVuIHdlIGxldCB0aGUgZmlybXdhcmUga25vdyBpdCBjYW4gZ28gb24uLi4qLworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfVFJJRywgSU5UUl9UUklHX0VWRU5UX0FDSyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2RjZTdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fV0wxMjcxX0VWRU5UX0hfXworI2RlZmluZSBfX1dMMTI3MV9FVkVOVF9IX18KKworLyoKKyAqIE1ib3ggZXZlbnRzCisgKgorICogVGhlIGV2ZW50IG1lY2hhbmlzbSBpcyBiYXNlZCBvbiBhIHBhaXIgb2YgZXZlbnQgYnVmZmVycyAoYnVmZmVycyBBIGFuZAorICogQikgYXQgZml4ZWQgbG9jYXRpb25zIGluIHRoZSB0YXJnZXQncyBtZW1vcnkuIFRoZSBob3N0IHByb2Nlc3NlcyBvbmUKKyAqIGJ1ZmZlciB3aGlsZSB0aGUgb3RoZXIgYnVmZmVyIGNvbnRpbnVlcyB0byBjb2xsZWN0IGV2ZW50cy4gSWYgdGhlIGhvc3QKKyAqIGlzIG5vdCBwcm9jZXNzaW5nIGV2ZW50cywgYW4gaW50ZXJydXB0IGlzIGlzc3VlZCB0byBzaWduYWwgdGhhdCBhIGJ1ZmZlcgorICogaXMgcmVhZHkuIE9uY2UgdGhlIGhvc3QgaXMgZG9uZSB3aXRoIHByb2Nlc3NpbmcgZXZlbnRzIGZyb20gb25lIGJ1ZmZlciwKKyAqIGl0IHNpZ25hbHMgdGhlIHRhcmdldCAod2l0aCBhbiBBQ0sgaW50ZXJydXB0KSB0aGF0IHRoZSBldmVudCBidWZmZXIgaXMKKyAqIGZyZWUuCisgKi8KKworZW51bSB7CisJTUVBU1VSRU1FTlRfU1RBUlRfRVZFTlRfSUQJCSA9IEJJVCg4KSwKKwlNRUFTVVJFTUVOVF9DT01QTEVURV9FVkVOVF9JRAkJID0gQklUKDkpLAorCVNDQU5fQ09NUExFVEVfRVZFTlRfSUQJCQkgPSBCSVQoMTApLAorCVNDSEVEVUxFRF9TQ0FOX0NPTVBMRVRFX0VWRU5UX0lECSA9IEJJVCgxMSksCisJQVBfRElTQ09WRVJZX0NPTVBMRVRFX0VWRU5UX0lECQkgPSBCSVQoMTIpLAorCVBTX1JFUE9SVF9FVkVOVF9JRAkJCSA9IEJJVCgxMyksCisJUFNQT0xMX0RFTElWRVJZX0ZBSUxVUkVfRVZFTlRfSUQJID0gQklUKDE0KSwKKwlESVNDT05ORUNUX0VWRU5UX0NPTVBMRVRFX0lECQkgPSBCSVQoMTUpLAorCUpPSU5fRVZFTlRfQ09NUExFVEVfSUQJCQkgPSBCSVQoMTYpLAorCUNIQU5ORUxfU1dJVENIX0NPTVBMRVRFX0VWRU5UX0lECSA9IEJJVCgxNyksCisJQlNTX0xPU0VfRVZFTlRfSUQJCQkgPSBCSVQoMTgpLAorCVJFR0FJTkVEX0JTU19FVkVOVF9JRAkJCSA9IEJJVCgxOSksCisJUk9BTUlOR19UUklHR0VSX01BWF9UWF9SRVRSWV9FVkVOVF9JRAkgPSBCSVQoMjApLAorCVNPRlRfR0VNSU5JX1NFTlNFX0VWRU5UX0lECQkgPSBCSVQoMjIpLAorCVNPRlRfR0VNSU5JX1BSRURJQ1RJT05fRVZFTlRfSUQJCSA9IEJJVCgyMyksCisJU09GVF9HRU1JTklfQVZBTEFOQ0hFX0VWRU5UX0lECQkgPSBCSVQoMjQpLAorCVBMVF9SWF9DQUxJQlJBVElPTl9DT01QTEVURV9FVkVOVF9JRAkgPSBCSVQoMjUpLAorCURCR19FVkVOVF9JRAkJCQkgPSBCSVQoMjYpLAorCUhFQUxUSF9DSEVDS19SRVBMWV9FVkVOVF9JRAkJID0gQklUKDI3KSwKKwlQRVJJT0RJQ19TQ0FOX0NPTVBMRVRFX0VWRU5UX0lECQkgPSBCSVQoMjgpLAorCVBFUklPRElDX1NDQU5fUkVQT1JUX0VWRU5UX0lECQkgPSBCSVQoMjkpLAorCUJBX1NFU1NJT05fVEVBUl9ET1dOX0VWRU5UX0lECQkgPSBCSVQoMzApLAorCUVWRU5UX01CT1hfQUxMX0VWRU5UX0lECQkJID0gMHg3ZmZmZmZmZiwKK307CisKK3N0cnVjdCBldmVudF9kZWJ1Z19yZXBvcnQgeworCXU4IGRlYnVnX2V2ZW50X2lkOworCXU4IG51bV9wYXJhbXM7CisJdTE2IHBhZDsKKwl1MzIgcmVwb3J0XzE7CisJdTMyIHJlcG9ydF8yOworCXUzMiByZXBvcnRfMzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE5VTV9PRl9SU1NJX1NOUl9UUklHR0VSUyA4CisKK3N0cnVjdCBldmVudF9tYWlsYm94IHsKKwl1MzIgZXZlbnRzX3ZlY3RvcjsKKwl1MzIgZXZlbnRzX21hc2s7CisJdTMyIHJlc2VydmVkXzE7CisJdTMyIHJlc2VydmVkXzI7CisKKwl1OCBkYmdfZXZlbnRfaWQ7CisJdTggbnVtX3JlbGV2YW50X3BhcmFtczsKKwl1MTYgcmVzZXJ2ZWRfMzsKKwl1MzIgZXZlbnRfcmVwb3J0X3AxOworCXUzMiBldmVudF9yZXBvcnRfcDI7CisJdTMyIGV2ZW50X3JlcG9ydF9wMzsKKworCXU4IG51bWJlcl9vZl9zY2FuX3Jlc3VsdHM7CisJdTggc2Nhbl90YWc7CisJdTggcmVzZXJ2ZWRfNFsyXTsKKwl1MzIgY29tcGxfc2NoZWR1bGVkX3NjYW5fc3RhdHVzOworCisJdTE2IHNjaGVkdWxlZF9zY2FuX2F0dGVuZGVkX2NoYW5uZWxzOworCXU4IHNvZnRfZ2VtaW5pX3NlbnNlX2luZm87CisJdTggc29mdF9nZW1pbmlfcHJvdGVjdGl2ZV9pbmZvOworCXM4IHJzc2lfc25yX3RyaWdnZXJfbWV0cmljW05VTV9PRl9SU1NJX1NOUl9UUklHR0VSU107CisJdTggY2hhbm5lbF9zd2l0Y2hfc3RhdHVzOworCXU4IHNjaGVkdWxlZF9zY2FuX3N0YXR1czsKKwl1OCBwc19zdGF0dXM7CisKKwl1OCByZXNlcnZlZF81WzI5XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitpbnQgd2wxMjcxX2V2ZW50X3VubWFzayhzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit2b2lkIHdsMTI3MV9ldmVudF9tYm94X2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2V2ZW50X2hhbmRsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggbWJveCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTBkZjIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pbml0LmMKQEAgLTAsMCArMSwzOTcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAid2wxMjcxX2luaXQuaCIKKyNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKKyNpbmNsdWRlICJ3bDEyNzFfYWN4LmgiCisjaW5jbHVkZSAid2wxMjcxX2NtZC5oIgorI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKKworc3RhdGljIGludCB3bDEyNzFfaW5pdF9od2VuY19jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfZmVhdHVyZV9jZmcod2wpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJjb3VsZG4ndCBzZXQgZmVhdHVyZSBjb25maWciKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSB3bDEyNzFfY21kX3NldF9kZWZhdWx0X3dlcF9rZXkod2wsIHdsLT5kZWZhdWx0X2tleSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImNvdWxkbid0IHNldCBkZWZhdWx0IGtleSIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9pbml0X3RlbXBsYXRlc19jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCS8qIHNlbmQgZW1wdHkgdGVtcGxhdGVzIGZvciBmdyBtZW1vcnkgcmVzZXJ2YXRpb24gKi8KKwlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX0NGR19QUk9CRV9SRVFfMl80LCBOVUxMLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMnh4X3Byb2JlX3JlcV90ZW1wbGF0ZSkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9OVUxMX0RBVEEsIE5VTEwsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyeHhfbnVsbF9kYXRhX3RlbXBsYXRlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX1BTX1BPTEwsIE5VTEwsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyeHhfcHNfcG9sbF90ZW1wbGF0ZSkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9RT1NfTlVMTF9EQVRBLCBOVUxMLAorCQkJCSAgICAgIHNpemVvZgorCQkJCSAgICAgIChzdHJ1Y3Qgd2wxMnh4X3Fvc19udWxsX2RhdGFfdGVtcGxhdGUpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfUFJPQkVfUkVTUE9OU0UsIE5VTEwsCisJCQkJICAgICAgc2l6ZW9mCisJCQkJICAgICAgKHN0cnVjdCB3bDEyeHhfcHJvYmVfcmVzcF90ZW1wbGF0ZSkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9CRUFDT04sIE5VTEwsCisJCQkJICAgICAgc2l6ZW9mCisJCQkJICAgICAgKHN0cnVjdCB3bDEyeHhfYmVhY29uX3RlbXBsYXRlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfaW5pdF9yeF9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBjb25maWcsIHUzMiBmaWx0ZXIpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfcnhfbXNkdV9saWZlX3RpbWUod2wsIFJYX01TRFVfTElGRVRJTUVfREVGKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfcnhfY29uZmlnKHdsLCBjb25maWcsIGZpbHRlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfaW5pdF9waHlfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X3BkX3RocmVzaG9sZCh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X3Nsb3Qod2wsIERFRkFVTFRfU0xPVF9USU1FKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfZ3JvdXBfYWRkcmVzc190Ymwod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9zZXJ2aWNlX3BlcmlvZF90aW1lb3V0KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZCh3bCwgUlRTX1RIUkVTSE9MRF9ERUYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2luaXRfYmVhY29uX2ZpbHRlcihzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX29wdCh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfdGFibGUod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2luaXRfcHRhKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X3NnX2VuYWJsZSh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X3NnX2NmZyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfaW5pdF9lbmVyZ3lfZGV0ZWN0aW9uKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2NjYV90aHJlc2hvbGQod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2luaXRfYmVhY29uX2Jyb2FkY2FzdChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9iY25fZHRpbV9vcHRpb25zKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9pbml0X2dlbmVyYWxfcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9nZW5lcmFsX3Bhcm1zICpnZW5fcGFybXM7CisJaW50IHJldDsKKworCWdlbl9wYXJtcyA9IGt6YWxsb2Moc2l6ZW9mKCpnZW5fcGFybXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdlbl9wYXJtcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlnZW5fcGFybXMtPmlkID0gVEVTVF9DTURfSU5JX0ZJTEVfR0VORVJBTF9QQVJBTTsKKworCWdlbl9wYXJtcy0+cmVmX2NsayA9IFJFRl9DTEtfMzhfNF9FOworCS8qIEZJWE1FOiBtYWdpYyBudW1iZXJzICovCisJZ2VuX3Bhcm1zLT5zZXR0bGluZ190aW1lID0gNTsKKwlnZW5fcGFybXMtPmNsa192YWxpZF9vbl93YWtldXAgPSAwOworCWdlbl9wYXJtcy0+ZGMyZGNtb2RlID0gMDsKKwlnZW5fcGFybXMtPnNpbmdsZV9kdWFsX2JhbmQgPSAwOworCWdlbl9wYXJtcy0+dHhfYmlwX2ZlbV9hdXRvZGV0ZWN0ID0gMTsKKwlnZW5fcGFybXMtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyID0gMTsKKwlnZW5fcGFybXMtPnNldHRpbmdzID0gMTsKKworCXJldCA9IHdsMTI3MV9jbWRfdGVzdCh3bCwgZ2VuX3Bhcm1zLCBzaXplb2YoKmdlbl9wYXJtcyksIDApOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJDTURfSU5JX0ZJTEVfR0VORVJBTF9QQVJBTSBmYWlsZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlrZnJlZShnZW5fcGFybXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9pbml0X3JhZGlvX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKQoreworCS8qCisJICogRklYTUU6IEFsbCB0aGVzZSBtYWdpYyBudW1iZXJzIHNob3VsZCBiZSBtb3ZlZCB0byBzb21lIHBsYWNlIHdoZXJlCisJICogdGhleSBjYW4gYmUgY29uZmlndXJlZCAoc2VwYXJhdGUgZmlsZT8pCisJICovCisKKwlzdHJ1Y3Qgd2wxMjcxX3JhZGlvX3Bhcm1zICpyYWRpb19wYXJtczsKKwlpbnQgcmV0OworCXU4IGNvbXBlbnNhdGlvbltdID0geyAweGVjLCAweGY2LCAweDAwLCAweDBjLCAweDE4LCAweGY4LCAweGZjLCAweDAwLAorCQkJICAgICAgMHgwOCwgMHgxMCwgMHhmMCwgMHhmOCwgMHgwMCwgMHgwYSwgMHgxNCB9OworCisJdTggdHhfcmF0ZV9saW1pdHNfbm9ybWFsW10gICA9IHsgMHgxZSwgMHgxZiwgMHgyMiwgMHgyNCwgMHgyOCwgMHgyOSB9OworCXU4IHR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkW10gPSB7IDB4MWIsIDB4MWMsIDB4MWUsIDB4MjAsIDB4MjQsIDB4MjUgfTsKKworCXU4IHR4X2NoYW5uZWxfbGltaXRzXzExYltdID0geyAweDIyLCAweDUwLCAweDUwLCAweDUwLAorCQkJCSAgICAgICAweDUwLCAweDUwLCAweDUwLCAweDUwLAorCQkJCSAgICAgICAweDUwLCAweDUwLCAweDIyLCAweDUwLAorCQkJCSAgICAgICAweDIyLCAweDUwIH07CisKKwl1OCB0eF9jaGFubmVsX2xpbWl0c19vZmRtW10gPSB7IDB4MjAsIDB4NTAsIDB4NTAsIDB4NTAsCisJCQkJCTB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsCisJCQkJCTB4NTAsIDB4NTAsIDB4MjAsIDB4NTAsCisJCQkJCTB4MjAsIDB4NTAgfTsKKworCXU4IHR4X3Bkdl9yYXRlX29mZnNldHNbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisKKwl1OCB0eF9pYmlhc1tdID0geyAweDFhLCAweDFhLCAweDFhLCAweDFhLCAweDFhLCAweDI3IH07CisKKwlyYWRpb19wYXJtcyA9IGt6YWxsb2Moc2l6ZW9mKCpyYWRpb19wYXJtcyksIEdGUF9LRVJORUwpOworCWlmICghcmFkaW9fcGFybXMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmFkaW9fcGFybXMtPmlkID0gVEVTVF9DTURfSU5JX0ZJTEVfUkFESU9fUEFSQU07CisKKwkvKiBTdGF0aWMgcmFkaW8gcGFyYW1ldGVycyAqLworCXJhZGlvX3Bhcm1zLT5yeF90cmFjZV9sb3NzID0gMTA7CisJcmFkaW9fcGFybXMtPnR4X3RyYWNlX2xvc3MgPSAxMDsKKwltZW1jcHkocmFkaW9fcGFybXMtPnJ4X3Jzc2lfYW5kX3Byb2NfY29tcGVucywgY29tcGVuc2F0aW9uLAorCSAgICAgICBzaXplb2YoY29tcGVuc2F0aW9uKSk7CisKKwkvKiBXZSBkb24ndCBzZXQgdGhlIDVHSHogLS0gTi9BICovCisKKwkvKiBEeW5hbWljIHJhZGlvIHBhcmFtZXRlcnMgKi8KKwlyYWRpb19wYXJtcy0+dHhfcmVmX3BkX3ZvbHRhZ2UgPSBjcHVfdG9fbGUxNigweDI0ZSk7CisJcmFkaW9fcGFybXMtPnR4X3JlZl9wb3dlciA9IDB4Nzg7CisJcmFkaW9fcGFybXMtPnR4X29mZnNldF9kYiA9IDB4MDsKKworCW1lbWNweShyYWRpb19wYXJtcy0+dHhfcmF0ZV9saW1pdHNfbm9ybWFsLCB0eF9yYXRlX2xpbWl0c19ub3JtYWwsCisJICAgICAgIHNpemVvZih0eF9yYXRlX2xpbWl0c19ub3JtYWwpKTsKKwltZW1jcHkocmFkaW9fcGFybXMtPnR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkLCB0eF9yYXRlX2xpbWl0c19kZWdyYWRlZCwKKwkgICAgICAgc2l6ZW9mKHR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkKSk7CisKKwltZW1jcHkocmFkaW9fcGFybXMtPnR4X2NoYW5uZWxfbGltaXRzXzExYiwgdHhfY2hhbm5lbF9saW1pdHNfMTFiLAorCSAgICAgICBzaXplb2YodHhfY2hhbm5lbF9saW1pdHNfMTFiKSk7CisJbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9jaGFubmVsX2xpbWl0c19vZmRtLCB0eF9jaGFubmVsX2xpbWl0c19vZmRtLAorCSAgICAgICBzaXplb2YodHhfY2hhbm5lbF9saW1pdHNfb2ZkbSkpOworCW1lbWNweShyYWRpb19wYXJtcy0+dHhfcGR2X3JhdGVfb2Zmc2V0cywgdHhfcGR2X3JhdGVfb2Zmc2V0cywKKwkgICAgICAgc2l6ZW9mKHR4X3Bkdl9yYXRlX29mZnNldHMpKTsKKwltZW1jcHkocmFkaW9fcGFybXMtPnR4X2liaWFzLCB0eF9pYmlhcywKKwkgICAgICAgc2l6ZW9mKHR4X2liaWFzKSk7CisKKwlyYWRpb19wYXJtcy0+cnhfZmVtX2luc2VydGlvbl9sb3NzID0gMHgxNDsKKworCXJldCA9IHdsMTI3MV9jbWRfdGVzdCh3bCwgcmFkaW9fcGFybXMsIHNpemVvZigqcmFkaW9fcGFybXMpLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJd2wxMjcxX3dhcm5pbmcoIkNNRF9JTklfRklMRV9SQURJT19QQVJBTSBmYWlsZWQiKTsKKworCWtmcmVlKHJhZGlvX3Bhcm1zKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2h3X2luaXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI3MV9pbml0X2dlbmVyYWxfcGFybXMod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2luaXRfcmFkaW9fcGFybXMod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogVGVtcGxhdGUgc2V0dGluZ3MgKi8KKwlyZXQgPSB3bDEyNzFfaW5pdF90ZW1wbGF0ZXNfY29uZmlnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIERlZmF1bHQgbWVtb3J5IGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSB3bDEyNzFfYWN4X2luaXRfbWVtX2NvbmZpZyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBSWCBjb25maWcgKi8KKwlyZXQgPSB3bDEyNzFfaW5pdF9yeF9jb25maWcod2wsCisJCQkJICAgICAgIFJYX0NGR19QUk9NSVNDVU9VUyB8IFJYX0NGR19UU0YsCisJCQkJICAgICAgIFJYX0ZJTFRFUl9PUFRJT05fREVGKTsKKwkvKiBSWF9DT05GSUdfT1BUSU9OX0FOWV9EU1RfQU5ZX0JTUywKKwkgICBSWF9GSUxURVJfT1BUSU9OX0ZJTFRFUl9BTEwpOyAqLworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIFBIWSBsYXllciBjb25maWcgKi8KKwlyZXQgPSB3bDEyNzFfaW5pdF9waHlfY29uZmlnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBCZWFjb24gZmlsdGVyaW5nICovCisJcmV0ID0gd2wxMjcxX2luaXRfYmVhY29uX2ZpbHRlcih3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogQ29uZmlndXJlIFRYIHBhdGNoIGNvbXBsZXRlIGludGVycnVwdCBiZWhhdmlvciAqLworCXJldCA9IHdsMTI3MV9hY3hfdHhfY29uZmlnX29wdGlvbnMod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIFJYIGNvbXBsZXRlIGludGVycnVwdCBwYWNpbmcgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X2luaXRfcnhfaW50ZXJydXB0KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBCbHVldG9vdGggV0xBTiBjb2V4aXN0ZW5jZSAqLworCXJldCA9IHdsMTI3MV9pbml0X3B0YSh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogRW5lcmd5IGRldGVjdGlvbiAqLworCXJldCA9IHdsMTI3MV9pbml0X2VuZXJneV9kZXRlY3Rpb24od2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIEJlYWNvbnMgYW5kIGJvcmFkY2FzdCBzZXR0aW5ncyAqLworCXJldCA9IHdsMTI3MV9pbml0X2JlYWNvbl9icm9hZGNhc3Qod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIERlZmF1bHQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X2ZyYWdfdGhyZXNob2xkKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBEZWZhdWx0IFRJRCBjb25maWd1cmF0aW9uICovCisJcmV0ID0gd2wxMjcxX2FjeF90aWRfY2ZnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBEZWZhdWx0IEFDIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSB3bDEyNzFfYWN4X2FjX2NmZyh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogQ29uZmlndXJlIFRYIHJhdGUgY2xhc3NlcyAqLworCXJldCA9IHdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogRW5hYmxlIGRhdGEgcGF0aCAqLworCXJldCA9IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHdsLCB3bC0+Y2hhbm5lbCwgMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogQ29uZmlndXJlIGZvciBFTFAgcG93ZXIgc2F2aW5nICovCisJcmV0ID0gd2wxMjcxX2FjeF9zbGVlcF9hdXRoKHdsLCBXTDEyNzFfUFNNX0VMUCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogQ29uZmlndXJlIEhXIGVuY3J5cHRpb24gKi8KKwlyZXQgPSB3bDEyNzFfaW5pdF9od2VuY19jb25maWcod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCXJldHVybiAwOworCisgb3V0X2ZyZWVfbWVtbWFwOgorCWtmcmVlKHdsLT50YXJnZXRfbWVtX21hcCk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pbml0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDhmZjBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pbml0LmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1dMMTI3MV9JTklUX0hfXworI2RlZmluZSBfX1dMMTI3MV9JTklUX0hfXworCisjaW5jbHVkZSAid2wxMjcxLmgiCisKK2ludCB3bDEyNzFfaHdfaW5pdF9wb3dlcl9hdXRoKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfaHdfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCk7CisKKy8qIFRoZXNlIGFyZSBub3QgcmVhbGx5IGEgVEVTVF9DTUQsIGJ1dCB0aGUgcmVmIGRyaXZlciB1c2VzIHRoZW0gYXMgc3VjaCAqLworI2RlZmluZSBURVNUX0NNRF9JTklfRklMRV9SQURJT19QQVJBTSAgIDB4MTkKKyNkZWZpbmUgVEVTVF9DTURfSU5JX0ZJTEVfR0VORVJBTF9QQVJBTSAweDFFCisKK3N0cnVjdCB3bDEyNzFfZ2VuZXJhbF9wYXJtcyB7CisJdTggaWQ7CisJdTggcGFkZGluZ1szXTsKKworCXU4IHJlZl9jbGs7CisJdTggc2V0dGxpbmdfdGltZTsKKwl1OCBjbGtfdmFsaWRfb25fd2FrZXVwOworCXU4IGRjMmRjbW9kZTsKKwl1OCBzaW5nbGVfZHVhbF9iYW5kOworCisJdTggdHhfYmlwX2ZlbV9hdXRvZGV0ZWN0OworCXU4IHR4X2JpcF9mZW1fbWFudWZhY3R1cmVyOworCXU4IHNldHRpbmdzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0gcmVmX2Nsa19lbnVtIHsKKwlSRUZfQ0xLXzE5XzJfRSwKKwlSRUZfQ0xLXzI2X0UsCisJUkVGX0NMS18zOF80X0UsCisJUkVGX0NMS181Ml9FCit9OworCisjZGVmaW5lIFJTU0lfQU5EX1BST0NFU1NfQ09NUEVOU0FUSU9OX1NJWkUgMTUKKyNkZWZpbmUgTlVNQkVSX09GX1NVQl9CQU5EU181ICA3CisjZGVmaW5lIE5VTUJFUl9PRl9SQVRFX0dST1VQUyAgNgorI2RlZmluZSBOVU1CRVJfT0ZfQ0hBTk5FTFNfMl80IDE0CisjZGVmaW5lIE5VTUJFUl9PRl9DSEFOTkVMU181ICAgMzUKKworc3RydWN0IHdsMTI3MV9yYWRpb19wYXJtcyB7CisJdTggaWQ7CisJdTggcGFkZGluZ1szXTsKKworCS8qIFN0YXRpYyByYWRpbyBwYXJhbWV0ZXJzICovCisJLyogMi40R0h6ICovCisJdTggcnhfdHJhY2VfbG9zczsKKwl1OCB0eF90cmFjZV9sb3NzOworCXM4IHJ4X3Jzc2lfYW5kX3Byb2NfY29tcGVuc1tSU1NJX0FORF9QUk9DRVNTX0NPTVBFTlNBVElPTl9TSVpFXTsKKworCS8qIDVHSHogKi8KKwl1OCByeF90cmFjZV9sb3NzXzVbTlVNQkVSX09GX1NVQl9CQU5EU181XTsKKwl1OCB0eF90cmFjZV9sb3NzXzVbTlVNQkVSX09GX1NVQl9CQU5EU181XTsKKwlzOCByeF9yc3NpX2FuZF9wcm9jX2NvbXBlbnNfNVtSU1NJX0FORF9QUk9DRVNTX0NPTVBFTlNBVElPTl9TSVpFXTsKKworCS8qIER5bmFtaWMgcmFkaW8gcGFyYW1ldGVycyAqLworCS8qIDIuNEdIeiAqLworCXMxNiB0eF9yZWZfcGRfdm9sdGFnZTsKKwlzOCAgdHhfcmVmX3Bvd2VyOworCXM4ICB0eF9vZmZzZXRfZGI7CisKKwlzOCAgdHhfcmF0ZV9saW1pdHNfbm9ybWFsW05VTUJFUl9PRl9SQVRFX0dST1VQU107CisJczggIHR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkW05VTUJFUl9PRl9SQVRFX0dST1VQU107CisKKwlzOCAgdHhfY2hhbm5lbF9saW1pdHNfMTFiW05VTUJFUl9PRl9DSEFOTkVMU18yXzRdOworCXM4ICB0eF9jaGFubmVsX2xpbWl0c19vZmRtW05VTUJFUl9PRl9DSEFOTkVMU18yXzRdOworCXM4ICB0eF9wZHZfcmF0ZV9vZmZzZXRzW05VTUJFUl9PRl9SQVRFX0dST1VQU107CisKKwl1OCAgdHhfaWJpYXNbTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKKwl1OCAgcnhfZmVtX2luc2VydGlvbl9sb3NzOworCisJdTggcGFkZGluZzI7CisKKwkvKiA1R0h6ICovCisJczE2IHR4X3JlZl9wZF92b2x0YWdlXzVbTlVNQkVSX09GX1NVQl9CQU5EU181XTsKKwlzOCAgdHhfcmVmX3Bvd2VyXzVbTlVNQkVSX09GX1NVQl9CQU5EU181XTsKKwlzOCAgdHhfb2Zmc2V0X2RiXzVbTlVNQkVSX09GX1NVQl9CQU5EU181XTsKKworCXM4ICB0eF9yYXRlX2xpbWl0c19ub3JtYWxfNVtOVU1CRVJfT0ZfUkFURV9HUk9VUFNdOworCXM4ICB0eF9yYXRlX2xpbWl0c19kZWdyYWRlZF81W05VTUJFUl9PRl9SQVRFX0dST1VQU107CisKKwlzOCAgdHhfY2hhbm5lbF9saW1pdHNfb2ZkbV81W05VTUJFUl9PRl9DSEFOTkVMU181XTsKKwlzOCAgdHhfcGR2X3JhdGVfb2Zmc2V0c181W05VTUJFUl9PRl9SQVRFX0dST1VQU107CisKKwkvKiBGSVhNRTogdGhpcyBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdHlwZXMgZm9yIDIuNEdIeiAqLworCXM4ICB0eF9pYmlhc181W05VTUJFUl9PRl9SQVRFX0dST1VQU107CisJczggIHJ4X2ZlbV9pbnNlcnRpb25fbG9zc181W05VTUJFUl9PRl9TVUJfQkFORFNfNV07CisKKwl1OCBwYWRkaW5nM1syXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxNjliNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfbWFpbi5jCkBAIC0wLDAgKzEsMTM5NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvd2wxMnh4Lmg+CisKKyNpbmNsdWRlICJ3bDEyNzEuaCIKKyNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKKyNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorI2luY2x1ZGUgIndsMTI3MV9ldmVudC5oIgorI2luY2x1ZGUgIndsMTI3MV90eC5oIgorI2luY2x1ZGUgIndsMTI3MV9yeC5oIgorI2luY2x1ZGUgIndsMTI3MV9wcy5oIgorI2luY2x1ZGUgIndsMTI3MV9pbml0LmgiCisjaW5jbHVkZSAid2wxMjcxX2RlYnVnZnMuaCIKKyNpbmNsdWRlICJ3bDEyNzFfY21kLmgiCisjaW5jbHVkZSAid2wxMjcxX2Jvb3QuaCIKKworc3RhdGljIGludCB3bDEyNzFfcGx0X2luaXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfaW5pdF9tZW1fY29uZmlnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHdsLCB3bC0+Y2hhbm5lbCwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2wxMjcxX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlkaXNhYmxlX2lycSh3bC0+aXJxKTsKK30KKworc3RhdGljIHZvaWQgd2wxMjcxX3Bvd2VyX29mZihzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl3bC0+c2V0X3Bvd2VyKGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgd2wxMjcxX3Bvd2VyX29uKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXdsLT5zZXRfcG93ZXIodHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9md19zdGF0dXMoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCB3bDEyNzFfZndfc3RhdHVzICpzdGF0dXMpCit7CisJdTMyIHRvdGFsID0gMDsKKwlpbnQgaTsKKworCS8qCisJICogRklYTUU6IFJlYWRpbmcgdGhlIEZXIHN0YXR1cyBkaXJlY3RseSBmcm9tIHRoZSByZWdpc3RlcnMgc2VlbXMgdG8KKwkgKiBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCBpdCBkb2Vzbid0IHdvcmsuICBBbmQgaW4gdGhlCisJICogcmVmZXJlbmNlIGRyaXZlciwgdGhlcmUgaXMgYSB3b3JrYXJvdW5kIGNhbGxlZAorCSAqIFVTRV9TRElPXzI0TV9XT1JLQVJPVU5ELCB3aGljaCByZWFkcyB0aGUgc3RhdHVzIGZyb20gbWVtb3J5CisJICogaW5zdGVhZCwgc28gd2UgZG8gdGhlIHNhbWUgaGVyZS4KKwkgKi8KKworCXdsMTI3MV9zcGlfbWVtX3JlYWQod2wsIFNUQVRVU19NRU1fQUREUkVTUywgc3RhdHVzLCBzaXplb2YoKnN0YXR1cykpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0lSUSwgImludHI6IDB4JXggKGZ3X3J4X2NvdW50ZXIgPSAlZCwgIgorCQkgICAgICJkcnZfcnhfY291bnRlciA9ICVkLCB0eF9yZXN1bHRzX2NvdW50ZXIgPSAlZCkiLAorCQkgICAgIHN0YXR1cy0+aW50ciwKKwkJICAgICBzdGF0dXMtPmZ3X3J4X2NvdW50ZXIsCisJCSAgICAgc3RhdHVzLT5kcnZfcnhfY291bnRlciwKKwkJICAgICBzdGF0dXMtPnR4X3Jlc3VsdHNfY291bnRlcik7CisKKwkvKiB1cGRhdGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBUWCBibG9ja3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX1FVRVVFUzsgaSsrKSB7CisJCXUzMiBjbnQgPSBzdGF0dXMtPnR4X3JlbGVhc2VkX2Jsa3NbaV0gLSB3bC0+dHhfYmxvY2tzX2ZyZWVkW2ldOworCQl3bC0+dHhfYmxvY2tzX2ZyZWVkW2ldID0gc3RhdHVzLT50eF9yZWxlYXNlZF9ibGtzW2ldOworCQl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSArPSBjbnQ7CisJCXRvdGFsICs9IGNudDsKKwl9CisKKwkvKiBpZiBtb3JlIGJsb2NrcyBhcmUgYXZhaWxhYmxlIG5vdywgc2NoZWR1bGUgc29tZSB0eCB3b3JrICovCisJaWYgKHRvdGFsICYmICFza2JfcXVldWVfZW1wdHkoJndsLT50eF9xdWV1ZSkpCisJCXNjaGVkdWxlX3dvcmsoJndsLT50eF93b3JrKTsKKworCS8qIHVwZGF0ZSB0aGUgaG9zdC1jaGlwc2V0IHRpbWUgb2Zmc2V0ICovCisJd2wtPnRpbWVfb2Zmc2V0ID0gamlmZmllc190b191c2VjcyhqaWZmaWVzKSAtIHN0YXR1cy0+ZndfbG9jYWx0aW1lOworfQorCisjZGVmaW5lIFdMMTI3MV9JUlFfTUFYX0xPT1BTIDEwCitzdGF0aWMgdm9pZCB3bDEyNzFfaXJxX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXUzMiBpbnRyLCBjdHIgPSBXTDEyNzFfSVJRX01BWF9MT09QUzsKKwlpbnQgcmV0OworCXN0cnVjdCB3bDEyNzEgKndsID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bDEyNzEsIGlycV93b3JrKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiSVJRIHdvcmsiKTsKKworCWlmICh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgdHJ1ZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLCBXTDEyNzFfQUNYX0lOVFJfQUxMKTsKKworCWludHIgPSB3bDEyNzFfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfQ0xFQVIpOworCWlmICghaW50cikgeworCQl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiWmVybyBpbnRlcnJ1cHQgcmVjZWl2ZWQuIik7CisJCWdvdG8gb3V0X3NsZWVwOworCX0KKworCWludHIgJj0gV0wxMjcxX0lOVFJfTUFTSzsKKworCWRvIHsKKwkJd2wxMjcxX2Z3X3N0YXR1cyh3bCwgd2wtPmZ3X3N0YXR1cyk7CisKKworCQlpZiAoaW50ciAmIChXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQSB8CisJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0IpKSB7CisJCQl3bDEyNzFfZGVidWcoREVCVUdfSVJRLAorCQkJCSAgICAgIldMMTI3MV9BQ1hfSU5UUl9FVkVOVCAoMHgleCkiLCBpbnRyKTsKKwkJCWlmIChpbnRyICYgV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0EpCisJCQkJd2wxMjcxX2V2ZW50X2hhbmRsZSh3bCwgMCk7CisJCQllbHNlCisJCQkJd2wxMjcxX2V2ZW50X2hhbmRsZSh3bCwgMSk7CisJCX0KKworCQlpZiAoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFKQorCQkJd2wxMjcxX2RlYnVnKERFQlVHX0lSUSwKKwkJCQkgICAgICJXTDEyNzFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSIpOworCisJCWlmIChpbnRyICYgV0wxMjcxX0FDWF9JTlRSX0hXX0FWQUlMQUJMRSkKKwkJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNzFfQUNYX0lOVFJfSFdfQVZBSUxBQkxFIik7CisKKwkJaWYgKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfREFUQSkgeworCQkJdTggdHhfcmVzX2NudCA9IHdsLT5md19zdGF0dXMtPnR4X3Jlc3VsdHNfY291bnRlciAtCisJCQkJd2wtPnR4X3Jlc3VsdHNfY291bnQ7CisKKwkJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNzFfQUNYX0lOVFJfREFUQSIpOworCisJCQkvKiBjaGVjayBmb3IgdHggcmVzdWx0cyAqLworCQkJaWYgKHR4X3Jlc19jbnQpCisJCQkJd2wxMjcxX3R4X2NvbXBsZXRlKHdsLCB0eF9yZXNfY250KTsKKworCQkJd2wxMjcxX3J4KHdsLCB3bC0+Zndfc3RhdHVzKTsKKwkJfQorCisJCWludHIgPSB3bDEyNzFfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfQ0xFQVIpOworCQlpbnRyICY9IFdMMTI3MV9JTlRSX01BU0s7CisJfSB3aGlsZSAoaW50ciAmJiAtLWN0cik7CisKK291dF9zbGVlcDoKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssCisJCQkgICBXTDEyNzFfQUNYX0lOVFJfQUxMICYgfihXTDEyNzFfSU5UUl9NQVNLKSk7CisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bDEyNzFfaXJxKGludCBpcnEsIHZvaWQgKmNvb2tpZSkKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0lSUSwgIklSUSIpOworCisJd2wgPSBjb29raWU7CisKKwkvKiBjb21wbGV0ZSB0aGUgRUxQIGNvbXBsZXRpb24gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKwlpZiAod2wtPmVscF9jb21wbCkgeworCQljb21wbGV0ZSh3bC0+ZWxwX2NvbXBsKTsKKwkJd2wtPmVscF9jb21wbCA9IE5VTEw7CisJfQorCisJc2NoZWR1bGVfd29yaygmd2wtPmlycV93b3JrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9mZXRjaF9maXJtd2FyZShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgV0wxMjcxX0ZXX05BTUUsICZ3bC0+c3BpLT5kZXYpOworCisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgZ2V0IGZpcm13YXJlOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGZ3LT5zaXplICUgNCkgeworCQl3bDEyNzFfZXJyb3IoImZpcm13YXJlIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIDMyIGJpdHM6ICV6dSIsCisJCQkgICAgIGZ3LT5zaXplKTsKKwkJcmV0ID0gLUVJTFNFUTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wtPmZ3X2xlbiA9IGZ3LT5zaXplOworCXdsLT5mdyA9IGttYWxsb2Mod2wtPmZ3X2xlbiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXdsLT5mdykgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBmaXJtd2FyZSIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1jcHkod2wtPmZ3LCBmdy0+ZGF0YSwgd2wtPmZ3X2xlbik7CisKKwlyZXQgPSAwOworCitvdXQ6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV9mZXRjaF9udnMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIFdMMTI3MV9OVlNfTkFNRSwgJndsLT5zcGktPmRldik7CisKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBnZXQgbnZzIGZpbGU6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZnctPnNpemUgJSA0KSB7CisJCXdsMTI3MV9lcnJvcigibnZzIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIDMyIGJpdHM6ICV6dSIsCisJCQkgICAgIGZ3LT5zaXplKTsKKwkJcmV0ID0gLUVJTFNFUTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wtPm52c19sZW4gPSBmdy0+c2l6ZTsKKwl3bC0+bnZzID0ga21hbGxvYyh3bC0+bnZzX2xlbiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXdsLT5udnMpIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbnZzIGZpbGUiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KHdsLT5udnMsIGZ3LT5kYXRhLCB3bC0+bnZzX2xlbik7CisKKwlyZXQgPSAwOworCitvdXQ6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfZndfd2FrZXVwKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXUzMiBlbHBfcmVnOworCisJZWxwX3JlZyA9IEVMUENUUkxfV0FLRV9VUDsKKwl3bDEyNzFfd3JpdGUzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSLCBlbHBfcmVnKTsKK30KKworc3RhdGljIGludCB3bDEyNzFfc2V0dXAoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJd2wtPmZ3X3N0YXR1cyA9IGttYWxsb2Moc2l6ZW9mKCp3bC0+Zndfc3RhdHVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bC0+Zndfc3RhdHVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdsLT50eF9yZXNfaWYgPSBrbWFsbG9jKHNpemVvZigqd2wtPnR4X3Jlc19pZiksIEdGUF9LRVJORUwpOworCWlmICghd2wtPnR4X3Jlc19pZikgeworCQlrZnJlZSh3bC0+Zndfc3RhdHVzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJSU5JVF9XT1JLKCZ3bC0+aXJxX3dvcmssIHdsMTI3MV9pcnFfd29yayk7CisJSU5JVF9XT1JLKCZ3bC0+dHhfd29yaywgd2wxMjcxX3R4X3dvcmspOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9jaGlwX3dha2V1cChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9wb3dlcl9vbih3bCk7CisJbXNsZWVwKFdMMTI3MV9QT1dFUl9PTl9TTEVFUCk7CisJd2wxMjcxX3NwaV9yZXNldCh3bCk7CisJd2wxMjcxX3NwaV9pbml0KHdsKTsKKworCS8qIFdlIGRvbid0IG5lZWQgYSByZWFsIG1lbW9yeSBwYXJ0aXRpb24gaGVyZSwgYmVjYXVzZSB3ZSBvbmx5IHdhbnQKKwkgKiB0byB1c2UgdGhlIHJlZ2lzdGVycyBhdCB0aGlzIHBvaW50LiAqLworCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLAorCQkJICAgICAweDAwMDAwMDAwLAorCQkJICAgICAweDAwMDAwMDAwLAorCQkJICAgICBSRUdJU1RFUlNfQkFTRSwKKwkJCSAgICAgUkVHSVNURVJTX0RPV05fU0laRSk7CisKKwkvKiBFTFAgbW9kdWxlIHdha2UgdXAgKi8KKwl3bDEyNzFfZndfd2FrZXVwKHdsKTsKKworCS8qIHdoYWxfRndDdHJsX0Jvb3RTbSgpICovCisKKwkvKiAwLiByZWFkIGNoaXAgaWQgZnJvbSBDSElQX0lEICovCisJd2wtPmNoaXAuaWQgPSB3bDEyNzFfcmVnX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKKworCS8qIDEuIGNoZWNrIGlmIGNoaXAgaWQgaXMgdmFsaWQgKi8KKworCXN3aXRjaCAod2wtPmNoaXAuaWQpIHsKKwljYXNlIENISVBfSURfMTI3MV9QRzEwOgorCQl3bDEyNzFfd2FybmluZygiY2hpcCBpZCAweCV4ICgxMjcxIFBHMTApIHN1cHBvcnQgaXMgb2Jzb2xldGUiLAorCQkJICAgICAgIHdsLT5jaGlwLmlkKTsKKworCQlyZXQgPSB3bDEyNzFfc2V0dXAod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwljYXNlIENISVBfSURfMTI3MV9QRzIwOgorCQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImNoaXAgaWQgMHgleCAoMTI3MSBQRzIwKSIsCisJCQkgICAgIHdsLT5jaGlwLmlkKTsKKworCQlyZXQgPSB3bDEyNzFfc2V0dXAod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3bDEyNzFfZXJyb3IoInVuc3VwcG9ydGVkIGNoaXAgaWQ6IDB4JXgiLCB3bC0+Y2hpcC5pZCk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh3bC0+ZncgPT0gTlVMTCkgeworCQlyZXQgPSB3bDEyNzFfZmV0Y2hfZmlybXdhcmUod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKworCS8qIE5vIE5WUyBmcm9tIG5ldGxpbmssIHRyeSB0byBnZXQgaXQgZnJvbSB0aGUgZmlsZXN5c3RlbSAqLworCWlmICh3bC0+bnZzID09IE5VTEwpIHsKKwkJcmV0ID0gd2wxMjcxX2ZldGNoX252cyh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd2wxMjcxX2ZpbHRlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2wxMjcxLCBmaWx0ZXJfd29yayk7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlpZiAod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBGSVhNRTogcmVwbGFjZSB0aGUgbWFnaWMgbnVtYmVycyB3aXRoIHByb3BlciBkZWZpbml0aW9ucyAqLworCXJldCA9IHdsMTI3MV9jbWRfam9pbih3bCwgd2wtPmJzc190eXBlLCAxLCAxMDAsIDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworb3V0X3NsZWVwOgorCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitpbnQgd2wxMjcxX3BsdF9zdGFydChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXdsMTI3MV9ub3RpY2UoInBvd2VyIHVwIik7CisKKwlpZiAod2wtPnN0YXRlICE9IFdMMTI3MV9TVEFURV9PRkYpIHsKKwkJd2wxMjcxX2Vycm9yKCJjYW5ub3QgZ28gaW50byBQTFQgc3RhdGUgYmVjYXVzZSBub3QgIgorCQkJICAgICAiaW4gb2ZmIHN0YXRlOiAlZCIsIHdsLT5zdGF0ZSk7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX1BMVDsKKworCXJldCA9IHdsMTI3MV9jaGlwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX2Jvb3Qod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXdsMTI3MV9ub3RpY2UoImZpcm13YXJlIGJvb3RlZCBpbiBQTFQgbW9kZSAoJXMpIiwgd2wtPmNoaXAuZndfdmVyKTsKKworCXJldCA9IHdsMTI3MV9wbHRfaW5pdCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9wbHRfc3RvcChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwl3bDEyNzFfbm90aWNlKCJwb3dlciBkb3duIik7CisKKwlpZiAod2wtPnN0YXRlICE9IFdMMTI3MV9TVEFURV9QTFQpIHsKKwkJd2wxMjcxX2Vycm9yKCJjYW5ub3QgcG93ZXIgZG93biBiZWNhdXNlIG5vdCBpbiBQTFQgIgorCQkJICAgICAic3RhdGU6ICVkIiwgd2wtPnN0YXRlKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwl3bDEyNzFfZGlzYWJsZV9pbnRlcnJ1cHRzKHdsKTsKKwl3bDEyNzFfcG93ZXJfb2ZmKHdsKTsKKworCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PRkY7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgd2wxMjcxX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisKKwlza2JfcXVldWVfdGFpbCgmd2wtPnR4X3F1ZXVlLCBza2IpOworCisJLyoKKwkgKiBUaGUgY2hpcCBzcGVjaWZpYyBzZXR1cCBtdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IFRYIHBhY2tldCAtCisJICogYmVmb3JlIHRoYXQsIHRoZSB0eF93b3JrIHdpbGwgbm90IGJlIGluaXRpYWxpemVkIQorCSAqLworCisJc2NoZWR1bGVfd29yaygmd2wtPnR4X3dvcmspOworCisJLyoKKwkgKiBUaGUgd29ya3F1ZXVlIGlzIHNsb3cgdG8gcHJvY2VzcyB0aGUgdHhfcXVldWUgYW5kIHdlIG5lZWQgc3RvcAorCSAqIHRoZSBxdWV1ZSBoZXJlLCBvdGhlcndpc2UgdGhlIHF1ZXVlIHdpbGwgZ2V0IHRvbyBsb25nLgorCSAqLworCWlmIChza2JfcXVldWVfbGVuKCZ3bC0+dHhfcXVldWUpID49IFdMMTI3MV9UWF9RVUVVRV9NQVhfTEVOR1RIKSB7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyh3bC0+aHcpOworCisJCS8qCisJCSAqIEZJWE1FOiB0aGlzIGlzIHJhY3ksIHRoZSB2YXJpYWJsZSBpcyBub3QgcHJvcGVybHkKKwkJICogcHJvdGVjdGVkLiBNYXliZSBmaXggdGhpcyBieSByZW1vdmluZyB0aGUgc3R1cGlkCisJCSAqIHZhcmlhYmxlIGFsdG9nZXRoZXIgYW5kIGNoZWNraW5nIHRoZSByZWFsIHF1ZXVlIHN0YXRlPworCQkgKi8KKwkJd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSB0cnVlOworCX0KKworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzdGFydCIpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWlmICh3bC0+c3RhdGUgIT0gV0wxMjcxX1NUQVRFX09GRikgeworCQl3bDEyNzFfZXJyb3IoImNhbm5vdCBzdGFydCBiZWNhdXNlIG5vdCBpbiBvZmYgc3RhdGU6ICVkIiwKKwkJCSAgICAgd2wtPnN0YXRlKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB3bDEyNzFfY2hpcF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI3MV9ib290KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNzFfaHdfaW5pdCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX09OOworCisJd2wxMjcxX2luZm8oImZpcm13YXJlIGJvb3RlZCAoJXMpIiwgd2wtPmNoaXAuZndfdmVyKTsKKworb3V0OgorCWlmIChyZXQgPCAwKQorCQl3bDEyNzFfcG93ZXJfb2ZmKHdsKTsKKworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9vcF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJaW50IGk7CisKKwl3bDEyNzFfaW5mbygiZG93biIpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgc3RvcCIpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCVdBUk5fT04od2wtPnN0YXRlICE9IFdMMTI3MV9TVEFURV9PTik7CisKKwlpZiAod2wtPnNjYW5uaW5nKSB7CisJCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgdHJ1ZSk7CisJCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJCXdsLT5zY2FubmluZyA9IGZhbHNlOworCX0KKworCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PRkY7CisKKwl3bDEyNzFfZGlzYWJsZV9pbnRlcnJ1cHRzKHdsKTsKKworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCWNhbmNlbF93b3JrX3N5bmMoJndsLT5pcnFfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmd2wtPnR4X3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJndsLT5maWx0ZXJfd29yayk7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJLyogbGV0J3Mgbm90aWZ5IE1BQzgwMjExIGFib3V0IHRoZSByZW1haW5pbmcgcGVuZGluZyBUWCBmcmFtZXMgKi8KKwl3bDEyNzFfdHhfZmx1c2god2wpOworCXdsMTI3MV9wb3dlcl9vZmYod2wpOworCisJbWVtc2V0KHdsLT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCW1lbXNldCh3bC0+c3NpZCwgMCwgSVdfRVNTSURfTUFYX1NJWkUgKyAxKTsKKwl3bC0+c3NpZF9sZW4gPSAwOworCXdsLT5saXN0ZW5faW50ID0gMTsKKwl3bC0+YnNzX3R5cGUgPSBNQVhfQlNTX1RZUEU7CisKKwl3bC0+cnhfY291bnRlciA9IDA7CisJd2wtPmVscCA9IGZhbHNlOworCXdsLT5wc20gPSAwOworCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gZmFsc2U7CisJd2wtPnBvd2VyX2xldmVsID0gV0wxMjcxX0RFRkFVTFRfUE9XRVJfTEVWRUw7CisJd2wtPnR4X2Jsb2Nrc19hdmFpbGFibGUgPSAwOworCXdsLT50eF9yZXN1bHRzX2NvdW50ID0gMDsKKwl3bC0+dHhfcGFja2V0c19jb3VudCA9IDA7CisJd2wtPnRpbWVfb2Zmc2V0ID0gMDsKKwl3bC0+c2Vzc2lvbl9jb3VudGVyID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX1FVRVVFUzsgaSsrKQorCQl3bC0+dHhfYmxvY2tzX2ZyZWVkW2ldID0gMDsKKworCXdsMTI3MV9kZWJ1Z2ZzX3Jlc2V0KHdsKTsKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGFkZCBpbnRlcmZhY2UgdHlwZSAlZCBtYWMgJXBNIiwKKwkJICAgICBjb25mLT50eXBlLCBjb25mLT5tYWNfYWRkcik7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJc3dpdGNoIChjb25mLT50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQl3bC0+YnNzX3R5cGUgPSBCU1NfVFlQRV9TVEFfQlNTOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQl3bC0+YnNzX3R5cGUgPSBCU1NfVFlQRV9JQlNTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRklYTUU6IHdoYXQgaWYgY29uZi0+bWFjX2FkZHIgY2hhbmdlcz8gKi8KKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIHJlbW92ZSBpbnRlcmZhY2UiKTsKK30KKworI2lmIDAKK3N0YXRpYyBpbnQgd2wxMjcxX29wX2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uOworCURFQ0xBUkVfTUFDX0JVRihtYWMpOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBjb25maWdfaW50ZXJmYWNlIGJzc2lkICVzIiwKKwkJICAgICBwcmludF9tYWMobWFjLCBjb25mLT5ic3NpZCkpOworCXdsMTI3MV9kdW1wX2FzY2lpKERFQlVHX01BQzgwMjExLCAic3NpZDogIiwgY29uZi0+c3NpZCwKKwkJCSAgY29uZi0+c3NpZF9sZW4pOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJbWVtY3B5KHdsLT5ic3NpZCwgY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKKworCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfbnVsbF9kYXRhKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfc2xlZXA7CisKKwl3bC0+c3NpZF9sZW4gPSBjb25mLT5zc2lkX2xlbjsKKwlpZiAod2wtPnNzaWRfbGVuKQorCQltZW1jcHkod2wtPnNzaWQsIGNvbmYtPnNzaWQsIHdsLT5zc2lkX2xlbik7CisKKwlpZiAod2wtPmJzc190eXBlICE9IEJTU19UWVBFX0lCU1MpIHsKKwkJLyogRklYTUU6IHJlcGxhY2UgdGhlIG1hZ2ljIG51bWJlcnMgd2l0aCBwcm9wZXIgZGVmaW5pdGlvbnMgKi8KKwkJcmV0ID0gd2wxMjcxX2NtZF9qb2luKHdsLCB3bC0+YnNzX3R5cGUsIDUsIDEwMCwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfc2xlZXA7CisJfQorCisJaWYgKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pIHsKKwkJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7CisJCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfQkVBQ09OLAorCQkJCQkgICAgICBiZWFjb24tPmRhdGEsIGJlYWNvbi0+bGVuKTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2tmcmVlX3NrYihiZWFjb24pOworCQkJZ290byBvdXRfc2xlZXA7CisJCX0KKworCQlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX1BST0JFX1JFU1BPTlNFLAorCQkJCQkgICAgICBiZWFjb24tPmRhdGEsIGJlYWNvbi0+bGVuKTsKKworCQlkZXZfa2ZyZWVfc2tiKGJlYWNvbik7CisKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9zbGVlcDsKKworCQkvKiBGSVhNRTogcmVwbGFjZSB0aGUgbWFnaWMgbnVtYmVycyB3aXRoIHByb3BlciBkZWZpbml0aW9ucyAqLworCQlyZXQgPSB3bDEyNzFfY21kX2pvaW4od2wsIHdsLT5ic3NfdHlwZSwgMSwgMTAwLCAwKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X3NsZWVwOworCX0KKworb3V0X3NsZWVwOgorCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHdsMTI3MV9vcF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOworCWludCBjaGFubmVsLCByZXQgPSAwOworCisJY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBjb25maWcgY2ggJWQgcHNtICVzIHBvd2VyICVkIiwKKwkJICAgICBjaGFubmVsLAorCQkgICAgIGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMgPyAib24iIDogIm9mZiIsCisJCSAgICAgY29uZi0+cG93ZXJfbGV2ZWwpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKGNoYW5uZWwgIT0gd2wtPmNoYW5uZWwpIHsKKwkJdTggb2xkX2NoYW5uZWwgPSB3bC0+Y2hhbm5lbDsKKwkJd2wtPmNoYW5uZWwgPSBjaGFubmVsOworCisJCS8qIEZJWE1FOiB1c2UgYmVhY29uIGludGVydmFsIHByb3ZpZGVkIGJ5IG1hYzgwMjExICovCisJCXJldCA9IHdsMTI3MV9jbWRfam9pbih3bCwgd2wtPmJzc190eXBlLCAxLCAxMDAsIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJd2wtPmNoYW5uZWwgPSBvbGRfY2hhbm5lbDsKKwkJCWdvdG8gb3V0X3NsZWVwOworCQl9CisJfQorCisJcmV0ID0gd2wxMjcxX2NtZF9idWlsZF9udWxsX2RhdGEod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTICYmICF3bC0+cHNtX3JlcXVlc3RlZCkgeworCQl3bDEyNzFfaW5mbygicHNtIGVuYWJsZWQiKTsKKworCQl3bC0+cHNtX3JlcXVlc3RlZCA9IHRydWU7CisKKwkJLyoKKwkJICogV2UgZW50ZXIgUFNNIG9ubHkgaWYgd2UncmUgYWxyZWFkeSBhc3NvY2lhdGVkLgorCQkgKiBJZiB3ZSdyZSBub3QsIHdlJ2xsIGVudGVyIGl0IHdoZW4gam9pbmluZyBhbiBTU0lELAorCQkgKiB0aHJvdWdoIHRoZSBic3NfaW5mb19jaGFuZ2VkKCkgaG9vay4KKwkJICovCisJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9QT1dFUl9TQVZFX01PREUpOworCX0gZWxzZSBpZiAoIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSAmJgorCQkgICB3bC0+cHNtX3JlcXVlc3RlZCkgeworCQl3bDEyNzFfaW5mbygicHNtIGRpc2FibGVkIik7CisKKwkJd2wtPnBzbV9yZXF1ZXN0ZWQgPSBmYWxzZTsKKworCQlpZiAod2wtPnBzbSkKKwkJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSk7CisJfQorCisJaWYgKGNvbmYtPnBvd2VyX2xldmVsICE9IHdsLT5wb3dlcl9sZXZlbCkgeworCQlyZXQgPSB3bDEyNzFfYWN4X3R4X3Bvd2VyKHdsLCBjb25mLT5wb3dlcl9sZXZlbCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJd2wtPnBvd2VyX2xldmVsID0gY29uZi0+cG93ZXJfbGV2ZWw7CisJfQorCitvdXRfc2xlZXA6CisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIFdMMTI3MV9TVVBQT1JURURfRklMVEVSUyAoRklGX1BST01JU0NfSU5fQlNTIHwgXAorCQkJCSAgRklGX0FMTE1VTFRJIHwgXAorCQkJCSAgRklGX0ZDU0ZBSUwgfCBcCisJCQkJICBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQyB8IFwKKwkJCQkgIEZJRl9DT05UUk9MIHwgXAorCQkJCSAgRklGX09USEVSX0JTUykKKworc3RhdGljIHZvaWQgd2wxMjcxX29wX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsLHU2NCBtdWx0aWNhc3QpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGNvbmZpZ3VyZSBmaWx0ZXIiKTsKKworCSp0b3RhbCAmPSBXTDEyNzFfU1VQUE9SVEVEX0ZJTFRFUlM7CisJY2hhbmdlZCAmPSBXTDEyNzFfU1VQUE9SVEVEX0ZJTFRFUlM7CisKKwlpZiAoY2hhbmdlZCA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBGSVhNRTogd2wtPnJ4X2NvbmZpZyBhbmQgd2wtPnJ4X2ZpbHRlciBhcmUgbm90IHByb3RlY3RlZCAqLworCXdsLT5yeF9jb25maWcgPSBXTDEyNzFfREVGQVVMVF9SWF9DT05GSUc7CisJd2wtPnJ4X2ZpbHRlciA9IFdMMTI3MV9ERUZBVUxUX1JYX0ZJTFRFUjsKKworCS8qCisJICogRklYTUU6IHdvcmtxdWV1ZXMgbmVlZCB0byBiZSBwcm9wZXJseSBjYW5jZWxsZWQgb24gc3RvcCgpLCBmb3IKKwkgKiBub3cgbGV0J3MganVzdCBkaXNhYmxlIGNoYW5naW5nIHRoZSBmaWx0ZXIgc2V0dGluZ3MuIFRoZXkgd2lsbAorCSAqIGJlIHVwZGF0ZWQgYW55IG9uIGNvbmZpZygpLgorCSAqLworCS8qIHNjaGVkdWxlX3dvcmsoJndsLT5maWx0ZXJfd29yayk7ICovCit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX29wX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXlfY29uZikKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCWNvbnN0IHU4ICphZGRyOworCWludCByZXQ7CisJdTgga2V5X3R5cGU7CisKKwlzdGF0aWMgY29uc3QgdTggYmNhc3RfYWRkcltFVEhfQUxFTl0gPQorCQl7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIHNldCBrZXkiKTsKKworCWFkZHIgPSBzdGEgPyBzdGEtPmFkZHIgOiBiY2FzdF9hZGRyOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0NSWVBULCAiQ01EOiAweCV4IiwgY21kKTsKKwl3bDEyNzFfZHVtcChERUJVR19DUllQVCwgIkFERFI6ICIsIGFkZHIsIEVUSF9BTEVOKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfQ1JZUFQsICJLZXk6IGFsZ286MHgleCwgaWQ6JWQsIGxlbjolZCBmbGFncyAweCV4IiwKKwkJICAgICBrZXlfY29uZi0+YWxnLCBrZXlfY29uZi0+a2V5aWR4LAorCQkgICAgIGtleV9jb25mLT5rZXlsZW4sIGtleV9jb25mLT5mbGFncyk7CisJd2wxMjcxX2R1bXAoREVCVUdfQ1JZUFQsICJLRVk6ICIsIGtleV9jb25mLT5rZXksIGtleV9jb25mLT5rZXlsZW4pOworCisJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihhZGRyKSkgeworCQkvKiBXZSBkb250IHN1cHBvcnQgVFggb25seSBlbmNyeXB0aW9uICovCisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfdW5sb2NrOworCisJc3dpdGNoIChrZXlfY29uZi0+YWxnKSB7CisJY2FzZSBBTEdfV0VQOgorCQlrZXlfdHlwZSA9IEtFWV9XRVA7CisKKwkJa2V5X2NvbmYtPmh3X2tleV9pZHggPSBrZXlfY29uZi0+a2V5aWR4OworCQlicmVhazsKKwljYXNlIEFMR19US0lQOgorCQlrZXlfdHlwZSA9IEtFWV9US0lQOworCisJCWtleV9jb25mLT5od19rZXlfaWR4ID0ga2V5X2NvbmYtPmtleWlkeDsKKwkJYnJlYWs7CisJY2FzZSBBTEdfQ0NNUDoKKwkJa2V5X3R5cGUgPSBLRVlfQUVTOworCisJCWtleV9jb25mLT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXdsMTI3MV9lcnJvcigiVW5rbm93biBrZXkgYWxnbyAweCV4Iiwga2V5X2NvbmYtPmFsZyk7CisKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0X3NsZWVwOworCX0KKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTRVRfS0VZOgorCQlyZXQgPSB3bDEyNzFfY21kX3NldF9rZXkod2wsIEtFWV9BRERfT1JfUkVQTEFDRSwKKwkJCQkJIGtleV9jb25mLT5rZXlpZHgsIGtleV90eXBlLAorCQkJCQkga2V5X2NvbmYtPmtleWxlbiwga2V5X2NvbmYtPmtleSwKKwkJCQkJIGFkZHIpOworCQlpZiAocmV0IDwgMCkgeworCQkJd2wxMjcxX2Vycm9yKCJDb3VsZCBub3QgYWRkIG9yIHJlcGxhY2Uga2V5Iik7CisJCQlnb3RvIG91dF9zbGVlcDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRElTQUJMRV9LRVk6CisJCXJldCA9IHdsMTI3MV9jbWRfc2V0X2tleSh3bCwgS0VZX1JFTU9WRSwKKwkJCQkJIGtleV9jb25mLT5rZXlpZHgsIGtleV90eXBlLAorCQkJCQkga2V5X2NvbmYtPmtleWxlbiwga2V5X2NvbmYtPmtleSwKKwkJCQkJIGFkZHIpOworCQlpZiAocmV0IDwgMCkgeworCQkJd2wxMjcxX2Vycm9yKCJDb3VsZCBub3QgcmVtb3ZlIGtleSIpOworCQkJZ290byBvdXRfc2xlZXA7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl3bDEyNzFfZXJyb3IoIlVuc3VwcG9ydGVkIGtleSBjbWQgMHgleCIsIGNtZCk7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dF9zbGVlcDsKKworCQlicmVhazsKKwl9CisKK291dF9zbGVlcDoKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV9vcF9od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCXU4ICpzc2lkID0gTlVMTDsKKwlzaXplX3Qgc3NpZF9sZW4gPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgaHcgc2NhbiIpOworCisJaWYgKHJlcS0+bl9zc2lkcykgeworCQlzc2lkID0gcmVxLT5zc2lkc1swXS5zc2lkOworCQlzc2lkX2xlbiA9IHJlcS0+c3NpZHNbMF0uc3NpZF9sZW47CisJfQorCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX2NtZF9zY2FuKGh3LT5wcml2LCBzc2lkLCBzc2lkX2xlbiwgMSwgMCwgMTMsIDMpOworCisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV9vcF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZCh3bCwgKHUxNikgdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQl3bDEyNzFfd2FybmluZygid2wxMjcxX29wX3NldF9ydHNfdGhyZXNob2xkIGZhaWxlZDogJWQiLCByZXQpOworCisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCisJCQkJICAgICAgIHUzMiBjaGFuZ2VkKQoreworCWVudW0gd2wxMjcxX2NtZF9wc19tb2RlIG1vZGU7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgYnNzIGluZm8gY2hhbmdlZCIpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgeworCQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CisJCQl3bC0+YWlkID0gYnNzX2NvbmYtPmFpZDsKKworCQkJcmV0ID0gd2wxMjcxX2NtZF9idWlsZF9wc19wb2xsKHdsLCB3bC0+YWlkKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0X3NsZWVwOworCisJCQlyZXQgPSB3bDEyNzFfYWN4X2FpZCh3bCwgd2wtPmFpZCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKworCQkJLyogSWYgd2Ugd2FudCB0byBnbyBpbiBQU00gYnV0IHdlJ3JlIG5vdCB0aGVyZSB5ZXQgKi8KKwkJCWlmICh3bC0+cHNtX3JlcXVlc3RlZCAmJiAhd2wtPnBzbSkgeworCQkJCW1vZGUgPSBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERTsKKwkJCQlyZXQgPSB3bDEyNzFfcHNfc2V0X21vZGUod2wsIG1vZGUpOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQlnb3RvIG91dF9zbGVlcDsKKwkJCX0KKwkJfQorCX0KKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9TTE9UKSB7CisJCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3Nsb3QpCisJCQlyZXQgPSB3bDEyNzFfYWN4X3Nsb3Qod2wsIFNMT1RfVElNRV9TSE9SVCk7CisJCWVsc2UKKwkJCXJldCA9IHdsMTI3MV9hY3hfc2xvdCh3bCwgU0xPVF9USU1FX0xPTkcpOworCQlpZiAocmV0IDwgMCkgeworCQkJd2wxMjcxX3dhcm5pbmcoIlNldCBzbG90IHRpbWUgZmFpbGVkICVkIiwgcmV0KTsKKwkJCWdvdG8gb3V0X3NsZWVwOworCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpIHsKKwkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpCisJCQl3bDEyNzFfYWN4X3NldF9wcmVhbWJsZSh3bCwgQUNYX1BSRUFNQkxFX1NIT1JUKTsKKwkJZWxzZQorCQkJd2wxMjcxX2FjeF9zZXRfcHJlYW1ibGUod2wsIEFDWF9QUkVBTUJMRV9MT05HKTsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVCkgeworCQlpZiAoYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCkKKwkJCXJldCA9IHdsMTI3MV9hY3hfY3RzX3Byb3RlY3Qod2wsIENUU1BST1RFQ1RfRU5BQkxFKTsKKwkJZWxzZQorCQkJcmV0ID0gd2wxMjcxX2FjeF9jdHNfcHJvdGVjdCh3bCwgQ1RTUFJPVEVDVF9ESVNBQkxFKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXdsMTI3MV93YXJuaW5nKCJTZXQgY3RzcHJvdGVjdCBmYWlsZWQgJWQiLCByZXQpOworCQkJZ290byBvdXRfc2xlZXA7CisJCX0KKwl9CisKK291dF9zbGVlcDoKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKworCisvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgd2wxMjcxX3JhdGVzW10gPSB7CisJeyAuYml0cmF0ZSA9IDEwLAorCSAgLmh3X3ZhbHVlID0gMHgxLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgxLCB9LAorCXsgLmJpdHJhdGUgPSAyMCwKKwkgIC5od192YWx1ZSA9IDB4MiwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4MiwKKwkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDU1LAorCSAgLmh3X3ZhbHVlID0gMHg0LAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHg0LAorCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKKwl7IC5iaXRyYXRlID0gMTEwLAorCSAgLmh3X3ZhbHVlID0gMHgyMCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4MjAsCisJICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSA2MCwKKwkgIC5od192YWx1ZSA9IDB4OCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4OCwgfSwKKwl7IC5iaXRyYXRlID0gOTAsCisJICAuaHdfdmFsdWUgPSAweDEwLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgxMCwgfSwKKwl7IC5iaXRyYXRlID0gMTIwLAorCSAgLmh3X3ZhbHVlID0gMHg0MCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4NDAsIH0sCisJeyAuYml0cmF0ZSA9IDE4MCwKKwkgIC5od192YWx1ZSA9IDB4ODAsCisJICAuaHdfdmFsdWVfc2hvcnQgPSAweDgwLCB9LAorCXsgLmJpdHJhdGUgPSAyNDAsCisJICAuaHdfdmFsdWUgPSAweDIwMCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4MjAwLCB9LAorCXsgLmJpdHJhdGUgPSAzNjAsCisJIC5od192YWx1ZSA9IDB4NDAwLAorCSAuaHdfdmFsdWVfc2hvcnQgPSAweDQwMCwgfSwKKwl7IC5iaXRyYXRlID0gNDgwLAorCSAgLmh3X3ZhbHVlID0gMHg4MDAsCisJICAuaHdfdmFsdWVfc2hvcnQgPSAweDgwMCwgfSwKKwl7IC5iaXRyYXRlID0gNTQwLAorCSAgLmh3X3ZhbHVlID0gMHgxMDAwLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgxMDAwLCB9LAorfTsKKworLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHdsMTI3MV9jaGFubmVsc1tdID0geworCXsgLmh3X3ZhbHVlID0gMSwgLmNlbnRlcl9mcmVxID0gMjQxMn0sCisJeyAuaHdfdmFsdWUgPSAyLCAuY2VudGVyX2ZyZXEgPSAyNDE3fSwKKwl7IC5od192YWx1ZSA9IDMsIC5jZW50ZXJfZnJlcSA9IDI0MjJ9LAorCXsgLmh3X3ZhbHVlID0gNCwgLmNlbnRlcl9mcmVxID0gMjQyN30sCisJeyAuaHdfdmFsdWUgPSA1LCAuY2VudGVyX2ZyZXEgPSAyNDMyfSwKKwl7IC5od192YWx1ZSA9IDYsIC5jZW50ZXJfZnJlcSA9IDI0Mzd9LAorCXsgLmh3X3ZhbHVlID0gNywgLmNlbnRlcl9mcmVxID0gMjQ0Mn0sCisJeyAuaHdfdmFsdWUgPSA4LCAuY2VudGVyX2ZyZXEgPSAyNDQ3fSwKKwl7IC5od192YWx1ZSA9IDksIC5jZW50ZXJfZnJlcSA9IDI0NTJ9LAorCXsgLmh3X3ZhbHVlID0gMTAsIC5jZW50ZXJfZnJlcSA9IDI0NTd9LAorCXsgLmh3X3ZhbHVlID0gMTEsIC5jZW50ZXJfZnJlcSA9IDI0NjJ9LAorCXsgLmh3X3ZhbHVlID0gMTIsIC5jZW50ZXJfZnJlcSA9IDI0Njd9LAorCXsgLmh3X3ZhbHVlID0gMTMsIC5jZW50ZXJfZnJlcSA9IDI0NzJ9LAorfTsKKworLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCB3bDEyNzFfYmFuZF8yZ2h6ID0geworCS5jaGFubmVscyA9IHdsMTI3MV9jaGFubmVscywKKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUod2wxMjcxX2NoYW5uZWxzKSwKKwkuYml0cmF0ZXMgPSB3bDEyNzFfcmF0ZXMsCisJLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHdsMTI3MV9yYXRlcyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgd2wxMjcxX29wcyA9IHsKKwkuc3RhcnQgPSB3bDEyNzFfb3Bfc3RhcnQsCisJLnN0b3AgPSB3bDEyNzFfb3Bfc3RvcCwKKwkuYWRkX2ludGVyZmFjZSA9IHdsMTI3MV9vcF9hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlID0gd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2UsCisJLmNvbmZpZyA9IHdsMTI3MV9vcF9jb25maWcsCisvKiAJLmNvbmZpZ19pbnRlcmZhY2UgPSB3bDEyNzFfb3BfY29uZmlnX2ludGVyZmFjZSwgKi8KKwkuY29uZmlndXJlX2ZpbHRlciA9IHdsMTI3MV9vcF9jb25maWd1cmVfZmlsdGVyLAorCS50eCA9IHdsMTI3MV9vcF90eCwKKwkuc2V0X2tleSA9IHdsMTI3MV9vcF9zZXRfa2V5LAorCS5od19zY2FuID0gd2wxMjcxX29wX2h3X3NjYW4sCisJLmJzc19pbmZvX2NoYW5nZWQgPSB3bDEyNzFfb3BfYnNzX2luZm9fY2hhbmdlZCwKKwkuc2V0X3J0c190aHJlc2hvbGQgPSB3bDEyNzFfb3Bfc2V0X3J0c190aHJlc2hvbGQsCit9OworCitzdGF0aWMgaW50IHdsMTI3MV9yZWdpc3Rlcl9odyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJaWYgKHdsLT5tYWM4MDIxMV9yZWdpc3RlcmVkKQorCQlyZXR1cm4gMDsKKworCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHdsLT5odywgd2wtPm1hY19hZGRyKTsKKworCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyh3bC0+aHcpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigidW5hYmxlIHRvIHJlZ2lzdGVyIG1hYzgwMjExIGh3OiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJd2wtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSB0cnVlOworCisJd2wxMjcxX25vdGljZSgibG9hZGVkIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfaW5pdF9pZWVlODAyMTEoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJLyoKKwkgKiBUaGUgdHggZGVzY3JpcHRvciBidWZmZXIgYW5kIHRoZSBUS0lQIHNwYWNlLgorCSAqCisJICogRklYTUU6IGFkZCBjb3JyZWN0IDEyNzEgZGVzY3JpcHRvciBzaXplCisJICovCisJd2wtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IFdMMTI3MV9US0lQX0lWX1NQQUNFOworCisJLyogdW5pdCB1cyAqLworCS8qIEZJWE1FOiBmaW5kIGEgcHJvcGVyIHZhbHVlICovCisJd2wtPmh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTAwMDA7CisKKwl3bC0+aHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCQlJRUVFODAyMTFfSFdfTk9JU0VfREJNOworCisJd2wtPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOworCXdsLT5ody0+d2lwaHktPm1heF9zY2FuX3NzaWRzID0gMTsKKwl3bC0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZ3bDEyNzFfYmFuZF8yZ2h6OworCisJU0VUX0lFRUU4MDIxMV9ERVYod2wtPmh3LCAmd2wtPnNwaS0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHdsMTI3MV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gIndsMTI3MSIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisKKwkvKiBkZXZpY2UgbW9kZWwgaW5zaXN0cyB0byBoYXZlIGEgcmVsZWFzZSBmdW5jdGlvbiAqLworCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnJlbGVhc2UgPSB3bDEyNzFfZGV2aWNlX3JlbGVhc2UsCisJfSwKK307CisKKyNkZWZpbmUgV0wxMjcxX0RFRkFVTFRfQ0hBTk5FTCAwCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bDEyNzFfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgd2wxMnh4X3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCB3bDEyNzEgKndsOworCWludCByZXQsIGk7CisJc3RhdGljIGNvbnN0IHU4IG5va2lhX291aVszXSA9IHsweDAwLCAweDFmLCAweGRmfTsKKworCXBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKSB7CisJCXdsMTI3MV9lcnJvcigibm8gcGxhdGZvcm0gZGF0YSIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKndsKSwgJndsMTI3MV9vcHMpOworCWlmICghaHcpIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2MgaWVlZTgwMjExX2h3Iik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXdsID0gaHctPnByaXY7CisJbWVtc2V0KHdsLCAwLCBzaXplb2YoKndsKSk7CisKKwl3bC0+aHcgPSBodzsKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCB3bCk7CisJd2wtPnNwaSA9IHNwaTsKKworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJndsLT50eF9xdWV1ZSk7CisKKwlJTklUX1dPUksoJndsLT5maWx0ZXJfd29yaywgd2wxMjcxX2ZpbHRlcl93b3JrKTsKKwl3bC0+Y2hhbm5lbCA9IFdMMTI3MV9ERUZBVUxUX0NIQU5ORUw7CisJd2wtPnNjYW5uaW5nID0gZmFsc2U7CisJd2wtPmRlZmF1bHRfa2V5ID0gMDsKKwl3bC0+bGlzdGVuX2ludCA9IDE7CisJd2wtPnJ4X2NvdW50ZXIgPSAwOworCXdsLT5yeF9jb25maWcgPSBXTDEyNzFfREVGQVVMVF9SWF9DT05GSUc7CisJd2wtPnJ4X2ZpbHRlciA9IFdMMTI3MV9ERUZBVUxUX1JYX0ZJTFRFUjsKKwl3bC0+ZWxwID0gZmFsc2U7CisJd2wtPnBzbSA9IDA7CisJd2wtPnBzbV9yZXF1ZXN0ZWQgPSBmYWxzZTsKKwl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IGZhbHNlOworCXdsLT5wb3dlcl9sZXZlbCA9IFdMMTI3MV9ERUZBVUxUX1BPV0VSX0xFVkVMOworCisJLyogV2UgdXNlIHRoZSBkZWZhdWx0IHBvd2VyIG9uIHNsZWVwIHRpbWUgdW50aWwgd2Uga25vdyB3aGljaCBjaGlwCisJICogd2UncmUgdXNpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRldfVFhfQ01QTFRfQkxPQ0tfU0laRTsgaSsrKQorCQl3bC0+dHhfZnJhbWVzW2ldID0gTlVMTDsKKworCXNwaW5fbG9ja19pbml0KCZ3bC0+d2xfbG9jayk7CisKKwkvKgorCSAqIEluIGNhc2Ugb3VyIE1BQyBhZGRyZXNzIGlzIG5vdCBjb3JyZWN0bHkgc2V0LAorCSAqIHdlIHVzZSBhIHJhbmRvbSBidXQgTm9raWEgTUFDLgorCSAqLworCW1lbWNweSh3bC0+bWFjX2FkZHIsIG5va2lhX291aSwgMyk7CisJZ2V0X3JhbmRvbV9ieXRlcyh3bC0+bWFjX2FkZHIgKyAzLCAzKTsKKworCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PRkY7CisJbXV0ZXhfaW5pdCgmd2wtPm11dGV4KTsKKworCXdsLT5yeF9kZXNjcmlwdG9yID0ga21hbGxvYyhzaXplb2YoKndsLT5yeF9kZXNjcmlwdG9yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bC0+cnhfZGVzY3JpcHRvcikgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJ4IGRlc2NyaXB0b3IiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwkvKiBUaGlzIGlzIHRoZSBvbmx5IFNQSSB2YWx1ZSB0aGF0IHdlIG5lZWQgdG8gc2V0IGhlcmUsIHRoZSByZXN0CisJICogY29tZXMgZnJvbSB0aGUgYm9hcmQtcGVyaXBoZXJhbHMgZmlsZSAqLworCXNwaS0+Yml0c19wZXJfd29yZCA9IDMyOworCisJcmV0ID0gc3BpX3NldHVwKHNwaSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJzcGlfc2V0dXAgZmFpbGVkIik7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJd2wtPnNldF9wb3dlciA9IHBkYXRhLT5zZXRfcG93ZXI7CisJaWYgKCF3bC0+c2V0X3Bvd2VyKSB7CisJCXdsMTI3MV9lcnJvcigic2V0IHBvd2VyIGZ1bmN0aW9uIG1pc3NpbmcgaW4gcGxhdGZvcm0gZGF0YSIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXdsLT5pcnEgPSBzcGktPmlycTsKKwlpZiAod2wtPmlycSA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJpcnEgbWlzc2luZyBpbiBwbGF0Zm9ybSBkYXRhIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEod2wtPmlycSwgd2wxMjcxX2lycSwgMCwgRFJJVkVSX05BTUUsIHdsKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoInJlcXVlc3RfaXJxKCkgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJc2V0X2lycV90eXBlKHdsLT5pcnEsIElSUV9UWVBFX0VER0VfUklTSU5HKTsKKworCWRpc2FibGVfaXJxKHdsLT5pcnEpOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3bDEyNzFfZGV2aWNlKTsKKwlpZiAocmV0KSB7CisJCXdsMTI3MV9lcnJvcigiY291bGRuJ3QgcmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlIik7CisJCWdvdG8gb3V0X2lycTsKKwl9CisJZGV2X3NldF9kcnZkYXRhKCZ3bDEyNzFfZGV2aWNlLmRldiwgd2wpOworCisJcmV0ID0gd2wxMjcxX2luaXRfaWVlZTgwMjExKHdsKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9wbGF0Zm9ybTsKKworCXJldCA9IHdsMTI3MV9yZWdpc3Rlcl9odyh3bCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcGxhdGZvcm07CisKKwl3bDEyNzFfZGVidWdmc19pbml0KHdsKTsKKworCXdsMTI3MV9ub3RpY2UoImluaXRpYWxpemVkIik7CisKKwlyZXR1cm4gMDsKKworIG91dF9wbGF0Zm9ybToKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcigmd2wxMjcxX2RldmljZSk7CisKKyBvdXRfaXJxOgorCWZyZWVfaXJxKHdsLT5pcnEsIHdsKTsKKworIG91dF9mcmVlOgorCWtmcmVlKHdsLT5yeF9kZXNjcmlwdG9yKTsKKwl3bC0+cnhfZGVzY3JpcHRvciA9IE5VTEw7CisKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bDEyNzFfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHdsLT5odyk7CisKKwl3bDEyNzFfZGVidWdmc19leGl0KHdsKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcigmd2wxMjcxX2RldmljZSk7CisJZnJlZV9pcnEod2wtPmlycSwgd2wpOworCWtmcmVlKHdsLT50YXJnZXRfbWVtX21hcCk7CisJa2ZyZWUod2wtPmZ3KTsKKwl3bC0+ZncgPSBOVUxMOworCWtmcmVlKHdsLT5udnMpOworCXdsLT5udnMgPSBOVUxMOworCisJa2ZyZWUod2wtPnJ4X2Rlc2NyaXB0b3IpOworCXdsLT5yeF9kZXNjcmlwdG9yID0gTlVMTDsKKworCWtmcmVlKHdsLT5md19zdGF0dXMpOworCWtmcmVlKHdsLT50eF9yZXNfaWYpOworCisJaWVlZTgwMjExX2ZyZWVfaHcod2wtPmh3KTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bDEyNzFfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAid2wxMjcxIiwKKwkJLmJ1cwkJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKworCS5wcm9iZQkJPSB3bDEyNzFfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bDEyNzFfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdsMTI3MV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJndsMTI3MV9zcGlfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImZhaWxlZCB0byByZWdpc3RlciBzcGkgZHJpdmVyOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bDEyNzFfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmd2wxMjcxX3NwaV9kcml2ZXIpOworCisJd2wxMjcxX25vdGljZSgidW5sb2FkZWQiKTsKK30KKworbW9kdWxlX2luaXQod2wxMjcxX2luaXQpOworbW9kdWxlX2V4aXQod2wxMjcxX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzc0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAid2wxMjcxX3JlZy5oIgorI2luY2x1ZGUgIndsMTI3MV9wcy5oIgorI2luY2x1ZGUgIndsMTI3MV9zcGkuaCIKKworI2RlZmluZSBXTDEyNzFfV0FLRVVQX1RJTUVPVVQgNTAwCisKKy8qIFJvdXRpbmVzIHRvIHRvZ2dsZSBzbGVlcCBtb2RlIHdoaWxlIGluIEVMUCAqLwordm9pZCB3bDEyNzFfcHNfZWxwX3NsZWVwKHN0cnVjdCB3bDEyNzEgKndsKQoreworCS8qCisJICogRklYTUU6IGR1ZSB0byBhIHByb2JsZW0gaW4gdGhlIGZpcm13YXJlIChjYXVzaW5nIGEgZmlybXdhcmUKKwkgKiBjcmFzaCksIEVMUCBlbnRyeSBpcyBwcmV2ZW50ZWQgYmVsb3cuIFJlbW92ZSB0aGUgInRydWUiIHRvCisJICogcmUtZW5hYmxlIEVMUCBlbnRyeS4KKwkgKi8KKwlpZiAodHJ1ZSB8fCB3bC0+ZWxwIHx8ICF3bC0+cHNtKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEdvIHRvIEVMUCB1bmxlc3MgdGhlcmUgaXMgd29yayBhbHJlYWR5IHBlbmRpbmcgLSBwZW5kaW5nIHdvcmsKKwkgKiB3aWxsIGltbWVkaWF0ZWx5IHdha2V1cCB0aGUgY2hpcHNldCBhbnl3YXkuCisJICovCisJaWYgKCF3b3JrX3BlbmRpbmcoJndsLT5pcnFfd29yaykgJiYgIXdvcmtfcGVuZGluZygmd2wtPnR4X3dvcmspKSB7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJjaGlwIHRvIGVscCIpOworCQl3bDEyNzFfd3JpdGUzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSLCBFTFBDVFJMX1NMRUVQKTsKKwkJd2wtPmVscCA9IHRydWU7CisJfQorfQorCitpbnQgd2wxMjcxX3BzX2VscF93YWtldXAoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgY2hpcF9hd2FrZSkKK3sKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjb21wbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCXUzMiBzdGFydF90aW1lID0gamlmZmllczsKKwlib29sIHBlbmRpbmcgPSBmYWxzZTsKKworCWlmICghd2wtPmVscCkKKwkJcmV0dXJuIDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAid2FraW5nIHVwIGNoaXAgZnJvbSBlbHAiKTsKKworCS8qCisJICogVGhlIHNwaW5sb2NrIGlzIHJlcXVpcmVkIGhlcmUgdG8gc3luY2hyb25pemUgYm90aCB0aGUgd29yayBhbmQKKwkgKiB0aGUgY29tcGxldGlvbiB2YXJpYWJsZSBpbiBvbmUgZW50aXR5LgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCWlmICh3b3JrX3BlbmRpbmcoJndsLT5pcnFfd29yaykgfHwgY2hpcF9hd2FrZSkKKwkJcGVuZGluZyA9IHRydWU7CisJZWxzZQorCQl3bC0+ZWxwX2NvbXBsID0gJmNvbXBsOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisKKwl3bDEyNzFfd3JpdGUzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSLCBFTFBDVFJMX1dBS0VfVVApOworCisJaWYgKCFwZW5kaW5nKSB7CisJCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgKKwkJCSZjb21wbCwgbXNlY3NfdG9famlmZmllcyhXTDEyNzFfV0FLRVVQX1RJTUVPVVQpKTsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQl3bDEyNzFfZXJyb3IoIkVMUCB3YWtldXAgdGltZW91dCEiKTsKKwkJCXJldCA9IC1FVElNRURPVVQ7CisJCQlnb3RvIGVycjsKKwkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CisJCQl3bDEyNzFfZXJyb3IoIkVMUCB3YWtldXAgY29tcGxldGlvbiBlcnJvci4iKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJd2wtPmVscCA9IGZhbHNlOworCisJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgIndha2V1cCB0aW1lOiAldSBtcyIsCisJCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhcnRfdGltZSkpOworCWdvdG8gb3V0OworCitlcnI6CisJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJd2wtPmVscF9jb21wbCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworCitvdXQ6CisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNzFfcHNfc2V0X21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gd2wxMjcxX2NtZF9wc19tb2RlIG1vZGUpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgU1RBVElPTl9QT1dFUl9TQVZFX01PREU6CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJlbnRlcmluZyBwc20iKTsKKwkJcmV0ID0gd2wxMjcxX2NtZF9wc19tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXdsLT5wc20gPSAxOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fQUNUSVZFX01PREU6CisJZGVmYXVsdDoKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgImxlYXZpbmcgcHNtIik7CisJCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSB3bDEyNzFfY21kX3BzX21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJd2wtPnBzbSA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMmJkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19XTDEyNzFfUFNfSF9fCisjZGVmaW5lIF9fV0wxMjcxX1BTX0hfXworCisjaW5jbHVkZSAid2wxMjcxLmgiCisjaW5jbHVkZSAid2wxMjcxX2FjeC5oIgorCitpbnQgd2wxMjcxX3BzX3NldF9tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIHdsMTI3MV9jbWRfcHNfbW9kZSBtb2RlKTsKK3ZvaWQgd2wxMjcxX3BzX2VscF9zbGVlcChzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX3BzX2VscF93YWtldXAoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgY2hpcF9hd2FrZSk7CisKKworI2VuZGlmIC8qIF9fV0wxMjcxX1BTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhlZDRhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcmVnLmgKQEAgLTAsMCArMSw3NTggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fUkVHX0hfXworI2RlZmluZSBfX1JFR19IX18KKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjZGVmaW5lIFJFR0lTVEVSU19CQVNFIDB4MDAzMDAwMDAKKyNkZWZpbmUgRFJQV19CQVNFICAgICAgMHgwMDMxMDAwMAorCisjZGVmaW5lIFJFR0lTVEVSU19ET1dOX1NJWkUgMHgwMDAwODgwMAorI2RlZmluZSBSRUdJU1RFUlNfV09SS19TSVpFIDB4MDAwMGIwMDAKKworI2RlZmluZSBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIgICAgICAgICAweDFGRkZDCisjZGVmaW5lIFNUQVRVU19NRU1fQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4NDA0MDAKKworLyogRUxQIHJlZ2lzdGVyIGNvbW1hbmRzICovCisjZGVmaW5lIEVMUENUUkxfV0FLRV9VUCAgICAgICAgICAgICAweDEKKyNkZWZpbmUgRUxQQ1RSTF9XQUtFX1VQX1dMQU5fUkVBRFkgIDB4NQorI2RlZmluZSBFTFBDVFJMX1NMRUVQICAgICAgICAgICAgICAgMHgwCisvKiBFTFAgV0xBTl9SRUFEWSBiaXQgKi8KKyNkZWZpbmUgRUxQQ1RSTF9XTEFOX1JFQURZICAgICAgICAgIDB4MgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBIb3N0IFNvZnR3YXJlIFJlc2V0IC0gMzJiaXQgUlcKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBbMzE6MV0gUmVzZXJ2ZWQKKyAgICAwICBTT0ZUX1JFU0VUIFNvZnQgUmVzZXQgIC0gV2hlbiB0aGlzIGJpdCBpcyBzZXQsCisgICAgaXQgaG9sZHMgdGhlIFdsYW4gaGFyZHdhcmUgaW4gYSBzb2Z0IHJlc2V0IHN0YXRlLgorICAgIFRoaXMgcmVzZXQgZGlzYWJsZXMgYWxsIE1BQyBhbmQgYmFzZWJhbmQgcHJvY2Vzc29yCisgICAgY2xvY2tzIGV4Y2VwdCB0aGUgQ2FyZEJ1cy9QQ0kgaW50ZXJmYWNlIGNsb2NrLgorICAgIEl0IGFsc28gaW5pdGlhbGl6ZXMgYWxsIE1BQyBzdGF0ZSBtYWNoaW5lcyBleGNlcHQKKyAgICB0aGUgaG9zdCBpbnRlcmZhY2UuIEl0IGRvZXMgbm90IHJlbG9hZCB0aGUKKyAgICBjb250ZW50cyBvZiB0aGUgRUVQUk9NLiBXaGVuIHRoaXMgYml0IGlzIGNsZWFyZWQKKyAgICAobm90IHNlbGYtY2xlYXJpbmcpLCB0aGUgV2xhbiBoYXJkd2FyZQorICAgIGV4aXRzIHRoZSBzb2Z0d2FyZSByZXNldCBzdGF0ZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQUNYX1JFR19TTFZfU09GVF9SRVNFVCAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDAwMCkKKworI2RlZmluZSBXTDEyNzFfU0xWX1JFR19EQVRBICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwMDA4KQorI2RlZmluZSBXTDEyNzFfU0xWX1JFR19BREFUQSAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwMDBjKQorI2RlZmluZSBXTDEyNzFfU0xWX01FTV9EQVRBICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwMDE4KQorLyoKKyAqIEludGVycnVwdCByZWdpc3RlcnMuCisgKiA2NCBiaXQgaW50ZXJydXB0IHNvdXJjZXMgcmVnaXN0ZXJzIHdzIGNlZC4KKyAqIHNtZSBpbnRlcnVwdHMgd2VyZSByZW1vdmVkIGFuZCBuZXcgb25lcyB3ZXJlIGFkZGVkLgorICogT3JkZXIgd2FzIGNoYW5nZWQuCisgKi8KKyNkZWZpbmUgRklRX01BU0sgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQwMCkKKyNkZWZpbmUgRklRX01BU0tfTCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQwMCkKKyNkZWZpbmUgRklRX01BU0tfSCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQwNCkKKyNkZWZpbmUgRklRX01BU0tfU0VUICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQwOCkKKyNkZWZpbmUgRklRX01BU0tfU0VUX0wgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQwOCkKKyNkZWZpbmUgRklRX01BU0tfU0VUX0ggICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQwQykKKyNkZWZpbmUgRklRX01BU0tfQ0xSICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQxMCkKKyNkZWZpbmUgRklRX01BU0tfQ0xSX0wgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQxMCkKKyNkZWZpbmUgRklRX01BU0tfQ0xSX0ggICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQxNCkKKyNkZWZpbmUgSVJRX01BU0sgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQxOCkKKyNkZWZpbmUgSVJRX01BU0tfTCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQxOCkKKyNkZWZpbmUgSVJRX01BU0tfSCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQxQykKKyNkZWZpbmUgSVJRX01BU0tfU0VUICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQyMCkKKyNkZWZpbmUgSVJRX01BU0tfU0VUX0wgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQyMCkKKyNkZWZpbmUgSVJRX01BU0tfU0VUX0ggICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQyNCkKKyNkZWZpbmUgSVJRX01BU0tfQ0xSICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQyOCkKKyNkZWZpbmUgSVJRX01BU0tfQ0xSX0wgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQyOCkKKyNkZWZpbmUgSVJRX01BU0tfQ0xSX0ggICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQyQykKKyNkZWZpbmUgRUNQVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ0OCkKKyNkZWZpbmUgRklRX1NUU19MICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ0QykKKyNkZWZpbmUgRklRX1NUU19IICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ1MCkKKyNkZWZpbmUgSVJRX1NUU19MICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ1NCkKKyNkZWZpbmUgSVJRX1NUU19IICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ1OCkKKyNkZWZpbmUgSU5UX1NUU19ORCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ2NCkKKyNkZWZpbmUgSU5UX1NUU19SQVdfTCAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ2NCkKKyNkZWZpbmUgSU5UX1NUU19SQVdfSCAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ2OCkKKyNkZWZpbmUgSU5UX1NUU19DTFIgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRCNCkKKyNkZWZpbmUgSU5UX1NUU19DTFJfTCAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRCNCkKKyNkZWZpbmUgSU5UX1NUU19DTFJfSCAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRCOCkKKyNkZWZpbmUgSU5UX0FDSyAgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ2QykKKyNkZWZpbmUgSU5UX0FDS19MICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ2QykKKyNkZWZpbmUgSU5UX0FDS19IICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3MCkKKyNkZWZpbmUgSU5UX1RSSUcgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3NCkKKyNkZWZpbmUgSU5UX1RSSUdfTCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3NCkKKyNkZWZpbmUgSU5UX1RSSUdfSCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3OCkKKyNkZWZpbmUgSE9TVF9TVFNfTCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ1QykKKyNkZWZpbmUgSE9TVF9TVFNfSCAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ2MCkKKyNkZWZpbmUgSE9TVF9NQVNLICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQzMCkKKyNkZWZpbmUgSE9TVF9NQVNLX0wgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQzMCkKKyNkZWZpbmUgSE9TVF9NQVNLX0ggICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQzNCkKKyNkZWZpbmUgSE9TVF9NQVNLX1NFVCAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQzOCkKKyNkZWZpbmUgSE9TVF9NQVNLX1NFVF9MICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQzOCkKKyNkZWZpbmUgSE9TVF9NQVNLX1NFVF9IICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQzQykKKyNkZWZpbmUgSE9TVF9NQVNLX0NMUiAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ0MCkKKyNkZWZpbmUgSE9TVF9NQVNLX0NMUl9MICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ0MCkKKyNkZWZpbmUgSE9TVF9NQVNLX0NMUl9IICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ0NCkKKworI2RlZmluZSBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDc0KQorI2RlZmluZSBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHX0ggICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDc4KQorCisvKiBIb3N0IEludGVycnVwdHMqLworI2RlZmluZSBISU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDk0KQorI2RlZmluZSBISU5UX01BU0tfU0VUICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDk4KQorI2RlZmluZSBISU5UX01BU0tfQ0xSICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDlDKQorI2RlZmluZSBISU5UX1NUU19ORF9NQVNLRUQgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEEwKQorLyoxMTUwIHNwZWMgY2FsbHMgdGhpcyBISU5UX1NUU19SQVcqLworI2RlZmluZSBISU5UX1NUU19ORAkJICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRCMCkKKyNkZWZpbmUgSElOVF9TVFNfQ0xSICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRBNCkKKyNkZWZpbmUgSElOVF9BQ0sgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRBOCkKKyNkZWZpbmUgSElOVF9UUklHICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRBQykKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgSG9zdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAtIDMyYml0IChSVykKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFNldHRpbmcgYSBiaXQgaW4gdGhpcyByZWdpc3RlciBtYXNrcyB0aGUKKyAgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgdG8gdGhlIGhvc3QuCisgIDAgLSBSWDAJCS0gUnggZmlyc3QgZHViYmxlIGJ1ZmZlciBEYXRhIEludGVycnVwdAorICAxIC0gVFhECQktIFR4IERhdGEgSW50ZXJydXB0CisgIDIgLSBUWFhGUgkJLSBUeCBUcmFuc2ZlciBJbnRlcnJ1cHQKKyAgMyAtIFJYMQkJLSBSeCBzZWNvbmQgZHViYmxlIGJ1ZmZlciBEYXRhIEludGVycnVwdAorICA0IC0gUlhYRlIJCS0gUnggVHJhbnNmZXIgSW50ZXJydXB0CisgIDUgLSBFVkVOVF9BCS0gRXZlbnQgTWFpbGJveCBpbnRlcnJ1cHQKKyAgNiAtIEVWRU5UX0IJLSBFdmVudCBNYWlsYm94IGludGVycnVwdAorICA3IC0gV05PTkhTVAktIFdha2UgT24gSG9zdCBJbnRlcnJ1cHQKKyAgOCAtIFRSQUNFX0EJLSBEZWJ1ZyBUcmFjZSBpbnRlcnJ1cHQKKyAgOSAtIFRSQUNFX0IJLSBEZWJ1ZyBUcmFjZSBpbnRlcnJ1cHQKKyAxMCAtIENEQ01QCQktIENvbW1hbmQgQ29tcGxldGUgSW50ZXJydXB0CisgMTEgLQorIDEyIC0KKyAxMyAtCisgMTQgLSBJQ09NUAkJLSBJbml0aWFsaXphdGlvbiBDb21wbGV0ZSBJbnRlcnJ1cHQKKyAxNiAtIFNHIFNFCQktIFNvZnQgR2VtaW5pIC0gU2Vuc2UgZW5hYmxlIGludGVycnVwdAorIDE3IC0gU0cgU0QJCS0gU29mdCBHZW1pbmkgLSBTZW5zZSBkaXNhYmxlIGludGVycnVwdAorIDE4IC0JCQktCisgMTkgLQkJCS0KKyAyMCAtCQkJLQorIDIxLQkJCS0KKyBEZWZhdWx0OiAweDAwMDEKKyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQUNYX1JFR19JTlRFUlJVUFRfTUFTSyAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDREQykKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgSG9zdCBJbnRlcnJ1cHQgTWFzayBTZXQgMTZiaXQsIChXcml0ZSBvbmx5KQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXR0aW5nIGEgYml0IGluIHRoaXMgcmVnaXN0ZXIgc2V0cworIHRoZSBjb3JyZXNwb25kaW5nIGJpbiBpbiBBQ1hfSElOVF9NQVNLIHJlZ2lzdGVyCisgd2l0aG91dCBlZmZlY3RpbmcgdGhlIG1hc2sKKyBzdGF0ZSBvZiBvdGhlciBiaXRzICgwID0gbm8gZWZmZWN0KS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBBQ1hfUkVHX0hJTlRfTUFTS19TRVQgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEUwKQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBIb3N0IEludGVycnVwdCBNYXNrIENsZWFyIDE2Yml0LChXcml0ZSBvbmx5KQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXR0aW5nIGEgYml0IGluIHRoaXMgcmVnaXN0ZXIgY2xlYXJzCisgdGhlIGNvcnJlc3BvbmRpbmcgYmluIGluIEFDWF9ISU5UX01BU0sgcmVnaXN0ZXIKKyB3aXRob3V0IGVmZmVjdGluZyB0aGUgbWFzaworIHN0YXRlIG9mIG90aGVyIGJpdHMgKDAgPSBubyBlZmZlY3QpLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQUNYX1JFR19ISU5UX01BU0tfQ0xSICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRFNCkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE5vbmRlc3RydWN0aXZlIFJlYWQKKyAgMTZiaXQsKFJlYWQgb25seSkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGhlIGhvc3QgY2FuIHJlYWQgdGhpcyByZWdpc3RlciB0byBkZXRlcm1pbmUKKyB3aGljaCBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUuCisgUmVhZGluZyB0aGlzIHJlZ2lzdGVyIGRvZXNuJ3QKKyBlZmZlY3QgaXRzIGNvbnRlbnQuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBBQ1hfUkVHX0lOVEVSUlVQVF9OT19DTEVBUiAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEU4KQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBIb3N0IEludGVycnVwdCBTdGF0dXMgQ2xlYXIgb24gUmVhZCAgUmVnaXN0ZXIKKyAgMTZiaXQsKFJlYWQgb25seSkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGhlIGhvc3QgY2FuIHJlYWQgdGhpcyByZWdpc3RlciB0byBkZXRlcm1pbmUKKyB3aGljaCBpbnRlcnJ1cHRzIGFyZSBhY3RpdmUuCisgUmVhZGluZyB0aGlzIHJlZ2lzdGVyIGNsZWFycyBpdCwKKyB0aHVzIG1ha2luZyBhbGwgaW50ZXJydXB0cyBpbmFjdGl2ZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBBQ1hfUkVHX0lOVEVSUlVQVF9DTEVBUiAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEY4KQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBIb3N0IEludGVycnVwdCBBY2tub3dsZWRnZSBSZWdpc3RlcgorICAxNmJpdCwoV3JpdGUgb25seSkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGhlIGhvc3QgY2FuIHNldCBpbmRpdmlkdWFsIGJpdHMgaW4gdGhpcworIHJlZ2lzdGVyIHRvIGNsZWFyIChhY2tub3dsZWRnZSkgdGhlIGNvcnJlc3AuCisgaW50ZXJydXB0IHN0YXR1cyBiaXRzIGluIHRoZSBISU5UX1NUU19DTFIgYW5kCisgSElOVF9TVFNfTkQgcmVnaXN0ZXJzLCB0aHVzIG1ha2luZyB0aGUKKyBhc3NvdGlhdGVkIGludGVycnVwdCBpbmFjdGl2ZS4gKDAtbm8gZWZmZWN0KQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisjZGVmaW5lIEFDWF9SRUdfSU5URVJSVVBUX0FDSyAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0RjApCisKKyNkZWZpbmUgUlhfRFJJVkVSX0RVTU1ZX1dSSVRFX0FERFJFU1MgIChSRUdJU1RFUlNfQkFTRSArIDB4MDUzNCkKKyNkZWZpbmUgUlhfRFJJVkVSX0NPVU5URVJfQUREUkVTUyAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDUzOCkKKworLyogRGV2aWNlIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzKi8KKyNkZWZpbmUgU09SX0NGRyAgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDgwMCkKKworLyogRW1iZWRkZWQgQVJNIENQVSBDb250cm9sICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBIYWx0IGVDUFUgICAtIDMyYml0IFJXCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMCBIQUxUX0VDUFUgSGFsdCBFbWJlZGRlZCBDUFUgLSBUaGlzIGJpdCBpcyB0aGUKKyBjb21wbGltZW50IG9mIGJpdCAxIChNREFUQTIpIGluIHRoZSBTT1JfQ0ZHIHJlZ2lzdGVyLgorIER1cmluZyBhIGhhcmR3YXJlIHJlc2V0LCB0aGlzIGJpdCBob2xkcworIHRoZSBpbnZlcnNlIG9mIE1EQVRBMi4KKyBXaGVuIGRvd25sb2FkaW5nIGZpcm13YXJlIGZyb20gdGhlIGhvc3QsCisgc2V0IHRoaXMgYml0IChwdWxsIGRvd24gTURBVEEyKS4KKyBUaGUgaG9zdCBjbGVhcnMgdGhpcyBiaXQgYWZ0ZXIgZG93bmxvYWRpbmcgdGhlIGZpcm13YXJlIGludG8KKyB6ZXJvLXdhaXQtc3RhdGUgU1NSQU0uCisgV2hlbiBsb2FkaW5nIGZpcm13YXJlIGZyb20gRmxhc2gsIGNsZWFyIHRoaXMgYml0IChwdWxsIHVwIE1EQVRBMikKKyBzbyB0aGF0IHRoZSBlQ1BVIGNhbiBydW4gdGhlIGJvb3Rsb2FkZXIgY29kZSBpbiBGbGFzaAorIEhBTFRfRUNQVSBlQ1BVIFN0YXRlCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGhhbHQgZUNQVQorIDAgZW5hYmxlIGVDUFUKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisjZGVmaW5lIEFDWF9SRUdfRUNQVV9DT05UUk9MICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA4MDQpCisKKyNkZWZpbmUgSElfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDgwOCkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIEVFUFJPTSBCdXJzdCBSZWFkIFN0YXJ0ICAtIDMyYml0IFJXCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgWzMxOjFdIFJlc2VydmVkCisgMCAgQUNYX0VFX1NUQVJUIC0gIEVFUFJPTSBCdXJzdCBSZWFkIFN0YXJ0IDAKKyBTZXR0aW5nIHRoaXMgYml0IHN0YXJ0cyBhIGJ1cnN0IHJlYWQgZnJvbQorIHRoZSBleHRlcm5hbCBFRVBST00uCisgSWYgdGhpcyBiaXQgaXMgc2V0IChhZnRlciByZXNldCkgYmVmb3JlIGFuIEVFUFJPTSByZWFkL3dyaXRlLAorIHRoZSBidXJzdCByZWFkIHN0YXJ0cyBhdCBFRVBST00gYWRkcmVzcyAwLgorIE90aGVyd2lzZSwgaXQgc3RhcnRzIGF0IHRoZSBhZGRyZXNzCisgZm9sbG93aW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyBhY2Nlc3MuCisgVGhlV2xhbiBoYXJkd2FyZSBoYXJkd2FyZSBjbGVhcnMgdGhpcyBiaXQgYXV0b21hdGljYWxseS4KKworIERlZmF1bHQ6IDB4MDAwMDAwMDAKKyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBBQ1hfUkVHX0VFX1NUQVJUICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwODBDKQorCisjZGVmaW5lIE9DUF9QT1JfQ1RSICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA5QjQpCisjZGVmaW5lIE9DUF9EQVRBX1dSSVRFICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA5QjgpCisjZGVmaW5lIE9DUF9EQVRBX1JFQUQgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA5QkMpCisjZGVmaW5lIE9DUF9DTUQgICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA5QzApCisKKyNkZWZpbmUgV0wxMjcxX0hPU1RfV1JfQUNDRVNTICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDlGOCkKKworI2RlZmluZSBDSElQX0lEX0IgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHg1Njc0KQorCisjZGVmaW5lIENISVBfSURfMTI3MV9QRzEwICAgICAgICAgICAgICAoMHg0MDMwMTAxKQorI2RlZmluZSBDSElQX0lEXzEyNzFfUEcyMCAgICAgICAgICAgICAgKDB4NDAzMDExMSkKKworI2RlZmluZSBFTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHg1NDUwKQorCisvKiBQb3dlciBNYW5hZ2VtZW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBFTFBfQ0ZHX01PREUgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHg1ODA0KQorI2RlZmluZSBFTFBfQ01EICAgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHg1ODA4KQorI2RlZmluZSBQTExfQ0FMX1RJTUUgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHg1ODEwKQorI2RlZmluZSBDTEtfUkVRX1RJTUUgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHg1ODE0KQorI2RlZmluZSBDTEtfQlVGX1RJTUUgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHg1ODE4KQorCisjZGVmaW5lIENGR19QTExfU1lOQ19DTlQgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU4MjApCisKKy8qIFNjcmF0Y2ggUGFkIHJlZ2lzdGVycyovCisjZGVmaW5lIFNDUl9QQUQwICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2MDgpCisjZGVmaW5lIFNDUl9QQUQxICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2MEMpCisjZGVmaW5lIFNDUl9QQUQyICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2MTApCisjZGVmaW5lIFNDUl9QQUQzICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2MTQpCisjZGVmaW5lIFNDUl9QQUQ0ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2MTgpCisjZGVmaW5lIFNDUl9QQUQ0X1NFVCAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2MUMpCisjZGVmaW5lIFNDUl9QQUQ0X0NMUiAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2MjApCisjZGVmaW5lIFNDUl9QQUQ1ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2MjQpCisjZGVmaW5lIFNDUl9QQUQ1X1NFVCAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2MjgpCisjZGVmaW5lIFNDUl9QQUQ1X0NMUiAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2MkMpCisjZGVmaW5lIFNDUl9QQUQ2ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2MzApCisjZGVmaW5lIFNDUl9QQUQ3ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2MzQpCisjZGVmaW5lIFNDUl9QQUQ4ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2MzgpCisjZGVmaW5lIFNDUl9QQUQ5ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU2M0MpCisKKy8qIFNwYXJlIHJlZ2lzdGVycyovCisjZGVmaW5lIFNQQVJFX0ExICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA5OTQpCisjZGVmaW5lIFNQQVJFX0EyICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA5OTgpCisjZGVmaW5lIFNQQVJFX0EzICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA5OUMpCisjZGVmaW5lIFNQQVJFX0E0ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA5QTApCisjZGVmaW5lIFNQQVJFX0E1ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA5QTQpCisjZGVmaW5lIFNQQVJFX0E2ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA5QTgpCisjZGVmaW5lIFNQQVJFX0E3ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA5QUMpCisjZGVmaW5lIFNQQVJFX0E4ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA5QjApCisjZGVmaW5lIFNQQVJFX0IxICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU0MjApCisjZGVmaW5lIFNQQVJFX0IyICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU0MjQpCisjZGVmaW5lIFNQQVJFX0IzICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU0MjgpCisjZGVmaW5lIFNQQVJFX0I0ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU0MkMpCisjZGVmaW5lIFNQQVJFX0I1ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU0MzApCisjZGVmaW5lIFNQQVJFX0I2ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU0MzQpCisjZGVmaW5lIFNQQVJFX0I3ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU0MzgpCisjZGVmaW5lIFNQQVJFX0I4ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU0M0MpCisKKyNkZWZpbmUgUExMX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NjA0MCkKKyNkZWZpbmUgV1VfQ09VTlRFUl9QQVVTRSAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NjAwOCkKKyNkZWZpbmUgV0VMUF9BUk1fQ09NTUFORCAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NjEwMCkKKyNkZWZpbmUgRFJQV19TQ1JBVENIX1NUQVJUICAgICAgICAgICAgIChEUlBXX0JBU0UgKyAweDAwMkMpCisKKworI2RlZmluZSBBQ1hfU0xWX1NPRlRfUkVTRVRfQklUICAgQklUKDEpCisjZGVmaW5lIEFDWF9SRUdfRUVQUk9NX1NUQVJUX0JJVCBCSVQoMSkKKworLyogQ29tbWFuZC9JbmZvcm1hdGlvbiBNYWlsYm94IFBvaW50ZXJzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQ29tbWFuZCBNYWlsYm94IFBvaW50ZXIgLSAzMmJpdCBSVworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRoaXMgcmVnaXN0ZXIgaG9sZHMgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YKKyB0aGUgY29tbWFuZCBtYWlsYm94IGxvY2F0ZWQgaW4gdGhlIFdsYW4gaGFyZHdhcmUgbWVtb3J5LgorIFRoZSBob3N0IG11c3QgcmVhZCB0aGlzIHBvaW50ZXIgYWZ0ZXIgYSByZXNldCB0bworIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tYW5kIG1haWxib3guCisgVGhlIFdsYW4gaGFyZHdhcmUgaW5pdGlhbGl6ZXMgdGhlIGNvbW1hbmQgbWFpbGJveAorIHBvaW50ZXIgd2l0aCB0aGUgZGVmYXVsdCBhZGRyZXNzIG9mIHRoZSBjb21tYW5kIG1haWxib3guCisgVGhlIGNvbW1hbmQgbWFpbGJveCBwb2ludGVyIGlzIG5vdCB2YWxpZCB1bnRpbCBhZnRlcgorIHRoZSBob3N0IHJlY2VpdmVzIHRoZSBJbml0IENvbXBsZXRlIGludGVycnVwdCBmcm9tCisgdGhlIFdsYW4gaGFyZHdhcmUuCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBSRUdfQ09NTUFORF9NQUlMQk9YX1BUUgkJCQkoU0NSX1BBRDApCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgSW5mb3JtYXRpb24gTWFpbGJveCBQb2ludGVyIC0gMzJiaXQgUlcKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaGlzIHJlZ2lzdGVyIGhvbGRzIHRoZSBzdGFydCBhZGRyZXNzIG9mCisgdGhlIGluZm9ybWF0aW9uIG1haWxib3ggbG9jYXRlZCBpbiB0aGUgV2xhbiBoYXJkd2FyZSBtZW1vcnkuCisgVGhlIGhvc3QgbXVzdCByZWFkIHRoaXMgcG9pbnRlciBhZnRlciBhIHJlc2V0IHRvIGZpbmQKKyB0aGUgbG9jYXRpb24gb2YgdGhlIGluZm9ybWF0aW9uIG1haWxib3guCisgVGhlIFdsYW4gaGFyZHdhcmUgaW5pdGlhbGl6ZXMgdGhlIGluZm9ybWF0aW9uIG1haWxib3ggcG9pbnRlcgorIHdpdGggdGhlIGRlZmF1bHQgYWRkcmVzcyBvZiB0aGUgaW5mb3JtYXRpb24gbWFpbGJveC4KKyBUaGUgaW5mb3JtYXRpb24gbWFpbGJveCBwb2ludGVyIGlzIG5vdCB2YWxpZAorIHVudGlsIGFmdGVyIHRoZSBob3N0IHJlY2VpdmVzIHRoZSBJbml0IENvbXBsZXRlIGludGVycnVwdCBmcm9tCisgdGhlIFdsYW4gaGFyZHdhcmUuCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBSRUdfRVZFTlRfTUFJTEJPWF9QVFIJCQkJKFNDUl9QQUQxKQorCisKKy8qIE1pc2MgKi8KKworI2RlZmluZSBSRUdfRU5BQkxFX1RYX1JYCQkJCShFTkFCTEUpCisvKgorICogUnggY29uZmlndXJhdGlvbiAoZmlsdGVyKSBpbmZvcm1hdGlvbiBlbGVtZW50CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBSRUdfUlhfQ09ORklHCQkJCShSWF9DRkcpCisjZGVmaW5lIFJFR19SWF9GSUxURVIJCQkJKFJYX0ZJTFRFUl9DRkcpCisKKworI2RlZmluZSBSWF9DRkdfRU5BQkxFX1BIWV9IRUFERVJfUExDUAkgMHgwMDAyCisKKy8qIHByb21pc2N1b3VzIC0gcmVjZWl2ZXMgYWxsIHZhbGlkIGZyYW1lcyAqLworI2RlZmluZSBSWF9DRkdfUFJPTUlTQ1VPVVMJCSAweDAwMDgKKworLyogcmVjZWl2ZXMgZnJhbWVzIGZyb20gYW55IEJTU0lEICovCisjZGVmaW5lIFJYX0NGR19CU1NJRAkJCSAweDAwMjAKKworLyogcmVjZWl2ZXMgZnJhbWVzIGRlc3RpbmVkIHRvIGFueSBNQUMgYWRkcmVzcyAqLworI2RlZmluZSBSWF9DRkdfTUFDCQkJIDB4MDAxMAorCisjZGVmaW5lIFJYX0NGR19FTkFCTEVfT05MWV9NWV9ERVNUX01BQwkgMHgwMDEwCisjZGVmaW5lIFJYX0NGR19FTkFCTEVfQU5ZX0RFU1RfTUFDCSAweDAwMDAKKyNkZWZpbmUgUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX0JTU0lECSAweDAwMjAKKyNkZWZpbmUgUlhfQ0ZHX0VOQUJMRV9BTllfQlNTSUQJCSAweDAwMDAKKworLyogZGlzY2FyZHMgYWxsIGJyb2FkY2FzdCBmcmFtZXMgKi8KKyNkZWZpbmUgUlhfQ0ZHX0RJU0FCTEVfQkNBU1QJCSAweDAyMDAKKworI2RlZmluZSBSWF9DRkdfRU5BQkxFX09OTFlfTVlfU1NJRAkgMHgwNDAwCisjZGVmaW5lIFJYX0NGR19FTkFCTEVfUlhfQ01QTFRfRkNTX0VSUk9SIDB4MDgwMAorI2RlZmluZSBSWF9DRkdfQ09QWV9SWF9TVEFUVVMJCSAweDIwMDAKKyNkZWZpbmUgUlhfQ0ZHX1RTRgkJCSAweDEwMDAwCisKKyNkZWZpbmUgUlhfQ09ORklHX09QVElPTl9BTllfRFNUX01ZX0JTUwkgKFJYX0NGR19FTkFCTEVfQU5ZX0RFU1RfTUFDIHwgXAorCQkJCQkgIFJYX0NGR19FTkFCTEVfT05MWV9NWV9CU1NJRCkKKworI2RlZmluZSBSWF9DT05GSUdfT1BUSU9OX01ZX0RTVF9BTllfQlNTCSAoUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX0RFU1RfTUFDXAorCQkJCQkgIHwgUlhfQ0ZHX0VOQUJMRV9BTllfQlNTSUQpCisKKyNkZWZpbmUgUlhfQ09ORklHX09QVElPTl9BTllfRFNUX0FOWV9CU1MgKFJYX0NGR19FTkFCTEVfQU5ZX0RFU1RfTUFDIHwgXAorCQkJCQkgIFJYX0NGR19FTkFCTEVfQU5ZX0JTU0lEKQorCisjZGVmaW5lIFJYX0NPTkZJR19PUFRJT05fTVlfRFNUX01ZX0JTUwkgKFJYX0NGR19FTkFCTEVfT05MWV9NWV9ERVNUX01BQ1wKKwkJCQkJICB8IFJYX0NGR19FTkFCTEVfT05MWV9NWV9CU1NJRCkKKworI2RlZmluZSBSWF9DT05GSUdfT1BUSU9OX0ZPUl9TQ0FOICAoUlhfQ0ZHX0VOQUJMRV9QSFlfSEVBREVSX1BMQ1AgXAorCQkJCSAgICB8IFJYX0NGR19FTkFCTEVfUlhfQ01QTFRfRkNTX0VSUk9SIFwKKwkJCQkgICAgfCBSWF9DRkdfQ09QWV9SWF9TVEFUVVMgfCBSWF9DRkdfVFNGKQorCisjZGVmaW5lIFJYX0NPTkZJR19PUFRJT05fRk9SX01FQVNVUkVNRU5UIChSWF9DRkdfRU5BQkxFX0FOWV9ERVNUX01BQykKKworI2RlZmluZSBSWF9DT05GSUdfT1BUSU9OX0ZPUl9KT0lOCSAoUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX0JTU0lEIHwgXAorCQkJCQkgIFJYX0NGR19FTkFCTEVfT05MWV9NWV9ERVNUX01BQykKKworI2RlZmluZSBSWF9DT05GSUdfT1BUSU9OX0ZPUl9JQlNTX0pPSU4gICAoUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX1NTSUQgfCBcCisJCQkJCSAgUlhfQ0ZHX0VOQUJMRV9PTkxZX01ZX0RFU1RfTUFDKQorCisjZGVmaW5lIFJYX0ZJTFRFUl9PUFRJT05fREVGCSAgICAgIChDRkdfUlhfTUdNVF9FTiB8IENGR19SWF9EQVRBX0VOXAorCQkJCSAgICAgICB8IENGR19SWF9DVExfRU4gfCBDRkdfUlhfQkNOX0VOXAorCQkJCSAgICAgICB8IENGR19SWF9BVVRIX0VOIHwgQ0ZHX1JYX0FTU09DX0VOKQorCisjZGVmaW5lIFJYX0ZJTFRFUl9PUFRJT05fRklMVEVSX0FMTAkgMAorCisjZGVmaW5lIFJYX0ZJTFRFUl9PUFRJT05fREVGX1BSU1BfQkNOICAoQ0ZHX1JYX1BSU1BfRU4gfCBDRkdfUlhfTUdNVF9FTlwKKwkJCQkJfCBDRkdfUlhfUkNUU19BQ0sgfCBDRkdfUlhfQkNOX0VOKQorCisjZGVmaW5lIFJYX0ZJTFRFUl9PUFRJT05fSk9JTgkgICAgIChDRkdfUlhfTUdNVF9FTiB8IENGR19SWF9EQVRBX0VOXAorCQkJCSAgICAgIHwgQ0ZHX1JYX0JDTl9FTiB8IENGR19SWF9BVVRIX0VOXAorCQkJCSAgICAgIHwgQ0ZHX1JYX0FTU09DX0VOIHwgQ0ZHX1JYX1JDVFNfQUNLXAorCQkJCSAgICAgIHwgQ0ZHX1JYX1BSU1BfRU4pCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBQaHkgcmVncworID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQUNYX1BIWV9BRERSX1JFRyAgICAgICAgICAgICAgICBTQkJfQUREUgorI2RlZmluZSBBQ1hfUEhZX0RBVEFfUkVHICAgICAgICAgICAgICAgIFNCQl9EQVRBCisjZGVmaW5lIEFDWF9QSFlfQ1RSTF9SRUcgICAgICAgICAgICAgICAgU0JCX0NUTAorI2RlZmluZSBBQ1hfUEhZX1JFR19XUl9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDF1bAorI2RlZmluZSBBQ1hfUEhZX1JFR19SRF9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwMDJ1bAorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBFRVBST00gUmVhZC9Xcml0ZSBSZXF1ZXN0IDMyYml0IFJXCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBFRV9SRUFEIC0gRUVQUk9NIFJlYWQgUmVxdWVzdCAxIC0gU2V0dGluZyB0aGlzIGJpdAorIGxvYWRzIGEgc2luZ2xlIGJ5dGUgb2YgZGF0YSBpbnRvIHRoZSBFRV9EQVRBCisgcmVnaXN0ZXIgZnJvbSB0aGUgRUVQUk9NIGxvY2F0aW9uIHNwZWNpZmllZCBpbgorIHRoZSBFRV9BRERSIHJlZ2lzdGVyLgorIFRoZSBXbGFuIGhhcmR3YXJlIGhhcmR3YXJlIGNsZWFycyB0aGlzIGJpdCBhdXRvbWF0aWNhbGx5LgorIEVFX0RBVEEgaXMgdmFsaWQgd2hlbiB0aGlzIGJpdCBpcyBjbGVhcmVkLgorCisgMCBFRV9XUklURSAgLSBFRVBST00gV3JpdGUgUmVxdWVzdCAgLSBTZXR0aW5nIHRoaXMgYml0Cisgd3JpdGVzIGEgc2luZ2xlIGJ5dGUgb2YgZGF0YSBmcm9tIHRoZSBFRV9EQVRBIHJlZ2lzdGVyIGludG8gdGhlCisgRUVQUk9NIGxvY2F0aW9uIHNwZWNpZmllZCBpbiB0aGUgRUVfQUREUiByZWdpc3Rlci4KKyBUaGUgV2xhbiBoYXJkd2FyZSBoYXJkd2FyZSBjbGVhcnMgdGhpcyBiaXQgYXV0b21hdGljYWxseS4KKyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisjZGVmaW5lIEFDWF9FRV9DVExfUkVHICAgICAgICAgICAgICAgICAgICAgIEVFX0NUTAorI2RlZmluZSBFRV9XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxdWwKKyNkZWZpbmUgRUVfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMnVsCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgRUVQUk9NIEFkZHJlc3MgIC0gMzJiaXQgUlcKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFRoaXMgcmVnaXN0ZXIgc3BlY2lmaWVzIHRoZSBhZGRyZXNzCisgIHdpdGhpbiB0aGUgRUVQUk9NIGZyb20vdG8gd2hpY2ggdG8gcmVhZC93cml0ZSBkYXRhLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisjZGVmaW5lIEFDWF9FRV9BRERSX1JFRyAgICAgICAgICAgICAgICAgICAgIEVFX0FERFIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBFRVBST00gRGF0YSAgLSAzMmJpdCBSVworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhpcyByZWdpc3RlciBlaXRoZXIgaG9sZHMgdGhlIHJlYWQgOCBiaXRzIG9mCisgIGRhdGEgZnJvbSB0aGUgRUVQUk9NIG9yIHRoZSB3cml0ZSBkYXRhCisgIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTS4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBBQ1hfRUVfREFUQV9SRUcgICAgICAgICAgICAgICAgICAgICBFRV9EQVRBCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgRUVQUk9NIEJhc2UgQWRkcmVzcyAgLSAzMmJpdCBSVworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhpcyByZWdpc3RlciBob2xkcyB0aGUgdXBwZXIgbmluZSBiaXRzCisgIFsyMzoxNV0gb2YgdGhlIDI0LWJpdCBXbGFuIGhhcmR3YXJlIG1lbW9yeQorICBhZGRyZXNzIGZvciBidXJzdCByZWFkcyBmcm9tIEVFUFJPTSBhY2Nlc3Nlcy4KKyAgVGhlIEVFUFJPTSBwcm92aWRlcyB0aGUgbG93ZXIgMTUgYml0cyBvZiB0aGlzIGFkZHJlc3MuCisgIFRoZSBNU0Igb2YgdGhlIGFkZHJlc3MgZnJvbSB0aGUgRUVQUk9NIGlzIGlnbm9yZWQuCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQUNYX0VFX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgRUVfQ0ZHCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgR1BJTyBPdXRwdXQgVmFsdWVzICAtMzJiaXQsIFJXCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBbMzE6MTZdICBSZXNlcnZlZAorICBbMTU6IDBdICBTcGVjaWZ5IHRoZSBvdXRwdXQgdmFsdWVzIChhdCB0aGUgb3V0cHV0IGRyaXZlciBpbnB1dHMpIGZvcgorICBHUElPWzE1OjBdLCByZXNwZWN0aXZlbHkuCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQUNYX0dQSU9fT1VUX1JFRyAgICAgICAgICAgIEdQSU9fT1VUCisjZGVmaW5lIEFDWF9NQVhfR1BJT19MSU5FUyAgICAgICAgICAxNQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIENvbnRlbnRpb24gd2luZG93ICAtMzJiaXQsIFJXCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBbMzE6MjZdICBSZXNlcnZlZAorICBbMjU6MTZdICBNYXggKDB4M2ZmKQorICBbMTU6MDddICBSZXNlcnZlZAorICBbMDY6MDBdICBDdXJyZW50IGNvbnRlbnRpb24gd2luZG93IHZhbHVlIC0gZGVmYXVsdCBpcyAweDFGCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQUNYX0NPTlRfV0lORF9DRkdfUkVHICAgIENPTlRfV0lORF9DRkcKKyNkZWZpbmUgQUNYX0NPTlRfV0lORF9NSU5fTUFTSyAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQUNYX0NPTlRfV0lORF9NQVggICAgICAgIDB4MDNmZjAwMDAKKworLyoKKyAqIEluZGlyZWN0IHNsYXZlIHJlZ2lzdGVyL21lbW9yeSByZWdpc3RlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBIV19TTEFWRV9SRUdfQUREUl9SRUcJCTB4MDAwMDAwMDQKKyNkZWZpbmUgSFdfU0xBVkVfUkVHX0RBVEFfUkVHCQkweDAwMDAwMDA4CisjZGVmaW5lIEhXX1NMQVZFX1JFR19DVFJMX1JFRwkJMHgwMDAwMDAwYworCisjZGVmaW5lIFNMQVZFX0FVVE9fSU5DCQkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgU0xBVkVfTk9fQVVUT19JTkMJCQkweDAwMDAwMDAwCisjZGVmaW5lIFNMQVZFX0hPU1RfTElUVExFX0VORElBTgkweDAwMDAwMDAwCisKKyNkZWZpbmUgSFdfU0xBVkVfTUVNX0FERFJfUkVHCQlTTFZfTUVNX0FERFIKKyNkZWZpbmUgSFdfU0xBVkVfTUVNX0RBVEFfUkVHCQlTTFZfTUVNX0RBVEEKKyNkZWZpbmUgSFdfU0xBVkVfTUVNX0NUUkxfUkVHCQlTTFZfTUVNX0NUTAorI2RlZmluZSBIV19TTEFWRV9NRU1fRU5ESUFOX1JFRwkJU0xWX0VORF9DVEwKKworI2RlZmluZSBIV19GVU5DX0VWRU5UX0lOVF9FTgkJMHg4MDAwCisjZGVmaW5lIEhXX0ZVTkNfRVZFTlRfTUFTS19SRUcJCTB4MDAwMDAwMzQKKworI2RlZmluZSBBQ1hfTUFDX1RJTUVTVEFNUF9SRUcJKE1BQ19USU1FU1RBTVApCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgSElfQ0ZHIEludGVyZmFjZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIFZhbHVlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBISV9DRkdfVUFSVF9FTkFCTEUgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBISV9DRkdfUlNUMjMyX0VOQUJMRSAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBISV9DRkdfQ0xPQ0tfUkVRX1NFTEVDVCAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBISV9DRkdfSE9TVF9JTlRfRU5BQkxFICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBISV9DRkdfVkxZTlFfT1VUUFVUX0VOQUJMRSAgMHgwMDAwMDA0MAorI2RlZmluZSBISV9DRkdfSE9TVF9JTlRfQUNUSVZFX0xPVyAgMHgwMDAwMDA4MAorI2RlZmluZSBISV9DRkdfVUFSVF9UWF9PVVRfR1BJT18xNSAgMHgwMDAwMDEwMAorI2RlZmluZSBISV9DRkdfVUFSVF9UWF9PVVRfR1BJT18xNCAgMHgwMDAwMDIwMAorI2RlZmluZSBISV9DRkdfVUFSVF9UWF9PVVRfR1BJT183ICAgMHgwMDAwMDQwMAorCisvKgorICogTk9URTogVVNFX0FDVElWRV9ISUdIIGNvbXBpbGF0aW9uIGZsYWcgc2hvdWxkIGJlIGRlZmluZWQgaW4gbWFrZWZpbGUKKyAqICAgICAgIGZvciBwbGF0Zm9ybXMgdXNpbmcgYWN0aXZlIGhpZ2ggaW50ZXJydXB0IGxldmVsCisgKi8KKyNpZmRlZiBVU0VfQUNUSVZFX0hJR0gKKyNkZWZpbmUgSElfQ0ZHX0RFRl9WQUwgICAgICAgICAgICAgIFwKKwkoSElfQ0ZHX1VBUlRfRU5BQkxFIHwgICAgICAgIFwKKwlISV9DRkdfUlNUMjMyX0VOQUJMRSB8ICAgICAgXAorCUhJX0NGR19DTE9DS19SRVFfU0VMRUNUIHwgICBcCisJSElfQ0ZHX0hPU1RfSU5UX0VOQUJMRSkKKyNlbHNlCisjZGVmaW5lIEhJX0NGR19ERUZfVkFMICAgICAgICAgICAgICBcCisJKEhJX0NGR19VQVJUX0VOQUJMRSB8ICAgICAgICBcCisJSElfQ0ZHX1JTVDIzMl9FTkFCTEUgfCAgICAgIFwKKwlISV9DRkdfQ0xPQ0tfUkVRX1NFTEVDVCB8ICAgXAorCUhJX0NGR19IT1NUX0lOVF9FTkFCTEUpCisKKyNlbmRpZgorCisjZGVmaW5lIFJFRl9GUkVRXzE5XzIgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUkVGX0ZSRVFfMjZfMCAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBSRUZfRlJFUV8zOF80ICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFJFRl9GUkVRXzQwXzAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUkVGX0ZSRVFfMzNfNiAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBSRUZfRlJFUV9OVU0gICAgICAgICAgICAgICAgICAgICAgICA1CisKKyNkZWZpbmUgTFVUX1BBUkFNX0lOVEVHRVJfRElWSURFUiAgICAgICAgICAgMAorI2RlZmluZSBMVVRfUEFSQU1fRlJBQ1RJT05BTF9ESVZJREVSICAgICAgICAxCisjZGVmaW5lIExVVF9QQVJBTV9BVFROX0JCICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTFVUX1BBUkFNX0FMUEhBX0JCICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBMVVRfUEFSQU1fU1RPUF9USU1FX0JCICAgICAgICAgICAgICA0CisjZGVmaW5lIExVVF9QQVJBTV9CQl9QTExfTE9PUF9GSUxURVIgICAgICAgIDUKKyNkZWZpbmUgTFVUX1BBUkFNX05VTSAgICAgICAgICAgICAgICAgICAgICAgNgorCisjZGVmaW5lIEFDWF9FRVBST01MRVNTX0lORF9SRUcgICAgICAgICAgICAgIChTQ1JfUEFENCkKKyNkZWZpbmUgVVNFX0VFUFJPTSAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTT0ZUX1JFU0VUX01BWF9USU1FICAgICAgICAgICAgICAgICAxMDAwMDAwCisjZGVmaW5lIFNPRlRfUkVTRVRfU1RBTExfVElNRSAgICAgICAgICAgICAgIDEwMDAKKyNkZWZpbmUgTlZTX0RBVEFfQlVOREFSWV9BTElHTk1FTlQgICAgICAgICAgNAorCisKKy8qIEZpcm13YXJlIGltYWdlIGxvYWQgY2h1bmsgc2l6ZSAqLworI2RlZmluZSBDSFVOS19TSVpFICAgICAgICAgIDUxMgorCisvKiBGaXJtd2FyZSBpbWFnZSBoZWFkZXIgc2l6ZSAqLworI2RlZmluZSBGV19IRFJfU0laRSA4CisKKyNkZWZpbmUgRUNQVV9DT05UUk9MX0hBTFQJCQkJCTB4MDAwMDAxMDEKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBDSEFOTkVMUywgQkFORCAmIFJFRyBET01BSU5TIGRlZmluaXRpb25zCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitlbnVtIHsKKwlSQURJT19CQU5EXzJfNEdIWiA9IDAsICAvKiAyLjQgR2h6IGJhbmQgKi8KKwlSQURJT19CQU5EXzVHSFogPSAxLCAgICAvKiA1IEdoeiBiYW5kICovCisJUkFESU9fQkFORF9KQVBBTl80XzlfR0haID0gMiwKKwlERUZBVUxUX0JBTkQgPSBSQURJT19CQU5EXzJfNEdIWiwKKwlJTlZBTElEX0JBTkQgPSAweEZFLAorCU1BWF9SQURJT19CQU5EUyA9IDB4RkYKK307CisKK2VudW0geworCU5PX1JBVEUgICAgICA9IDAsCisJUkFURV8xTUJQUyAgID0gMHgwQSwKKwlSQVRFXzJNQlBTICAgPSAweDE0LAorCVJBVEVfNV81TUJQUyA9IDB4MzcsCisJUkFURV82TUJQUyAgID0gMHgwQiwKKwlSQVRFXzlNQlBTICAgPSAweDBGLAorCVJBVEVfMTFNQlBTICA9IDB4NkUsCisJUkFURV8xMk1CUFMgID0gMHgwQSwKKwlSQVRFXzE4TUJQUyAgPSAweDBFLAorCVJBVEVfMjJNQlBTICA9IDB4REMsCisJUkFURV8yNE1CUFMgID0gMHgwOSwKKwlSQVRFXzM2TUJQUyAgPSAweDBELAorCVJBVEVfNDhNQlBTICA9IDB4MDgsCisJUkFURV81NE1CUFMgID0gMHgwQworfTsKKworZW51bSB7CisJUkFURV9JTkRFWF8xTUJQUyAgID0gIDAsCisJUkFURV9JTkRFWF8yTUJQUyAgID0gIDEsCisJUkFURV9JTkRFWF81XzVNQlBTID0gIDIsCisJUkFURV9JTkRFWF82TUJQUyAgID0gIDMsCisJUkFURV9JTkRFWF85TUJQUyAgID0gIDQsCisJUkFURV9JTkRFWF8xMU1CUFMgID0gIDUsCisJUkFURV9JTkRFWF8xMk1CUFMgID0gIDYsCisJUkFURV9JTkRFWF8xOE1CUFMgID0gIDcsCisJUkFURV9JTkRFWF8yMk1CUFMgID0gIDgsCisJUkFURV9JTkRFWF8yNE1CUFMgID0gIDksCisJUkFURV9JTkRFWF8zNk1CUFMgID0gIDEwLAorCVJBVEVfSU5ERVhfNDhNQlBTICA9ICAxMSwKKwlSQVRFX0lOREVYXzU0TUJQUyAgPSAgMTIsCisJUkFURV9JTkRFWF9NQVggICAgID0gIFJBVEVfSU5ERVhfNTRNQlBTLAorCU1BWF9SQVRFX0lOREVYLAorCUlOVkFMSURfUkFURV9JTkRFWCA9IE1BWF9SQVRFX0lOREVYLAorCVJBVEVfSU5ERVhfRU5VTV9NQVhfU0laRSA9IDB4N0ZGRkZGRkYKK307CisKK2VudW0geworCVJBVEVfTUFTS18xTUJQUyA9IDB4MSwKKwlSQVRFX01BU0tfMk1CUFMgPSAweDIsCisJUkFURV9NQVNLXzVfNU1CUFMgPSAweDQsCisJUkFURV9NQVNLXzExTUJQUyA9IDB4MjAsCit9OworCisjZGVmaW5lIFNIT1JUX1BSRUFNQkxFX0JJVCAgIEJJVCgwKSAvKiBDQ0sgb3IgQmFya2VyIGRlcGVuZGluZyBvbiB0aGUgcmF0ZSAqLworI2RlZmluZSBPRkRNX1JBVEVfQklUICAgICAgICBCSVQoNikKKyNkZWZpbmUgUEJDQ19SQVRFX0JJVCAgICAgICAgQklUKDcpCisKK2VudW0geworCUNDS19MT05HID0gMCwKKwlDQ0tfU0hPUlQgPSBTSE9SVF9QUkVBTUJMRV9CSVQsCisJUEJDQ19MT05HID0gUEJDQ19SQVRFX0JJVCwKKwlQQkNDX1NIT1JUID0gUEJDQ19SQVRFX0JJVCB8IFNIT1JUX1BSRUFNQkxFX0JJVCwKKwlPRkRNID0gT0ZETV9SQVRFX0JJVAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUcmFuc21pdC1EZXNjcmlwdG9yIFJBVEUtU0VUIGZpZWxkIGRlZmluaXRpb25zLi4uCisKK0RlZmluZSBhIG5ldyAiUmF0ZS1TZXQiIGZvciBUWCBwYXRoIHRoYXQgaW5jb3Jwb3JhdGVzIHRoZQorUmF0ZSAmIE1vZHVsYXRpb24gaW5mbyBpbnRvIGEgc2luZ2xlIDE2LWJpdCBmaWVsZC4KKworVHhkUmF0ZVNldF90OgorYjE1ICAgLSBJbmRpY2F0ZXMgUHJlYW1ibGUgdHlwZSAoMT1TSE9SVCwgMD1MT05HKS4KKwlOb3RlczoKKwlNdXN0IGJlIExPTkcgKDApIGZvciAxTWJwcyByYXRlLgorCURvZXMgbm90IGFwcGx5IChzZXQgdG8gMCkgZm9yIFJldkctT0ZETSByYXRlcy4KK2IxNCAgIC0gSW5kaWNhdGVzIFBCQ0MgZW5jb2RpbmcgKDE9UEJDQywgMD1ub3QpLgorCU5vdGVzOgorCURvZXMgbm90IGFwcGx5IChzZXQgdG8gMCkgZm9yIHJhdGVzIDEgYW5kIDIgTWJwcy4KKwlEb2VzIG5vdCBhcHBseSAoc2V0IHRvIDApIGZvciBSZXZHLU9GRE0gcmF0ZXMuCitiMTMgICAgLSBVbnVzZWQgKHNldCB0byAwKS4KK2IxMi1iMCAtIFN1cHBvcnRlZCBSYXRlIGluZGljYXRvciBiaXRzIGFzIGRlZmluZWQgYmVsb3cuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjZGVmaW5lIFRORVRXMTI1MV9DSElQX0lEX1BHMV8wICAgICAgICAgMHgwNzAxMDEwMQorI2RlZmluZSBUTkVUVzEyNTFfQ0hJUF9JRF9QRzFfMSAgICAgICAgIDB4MDcwMjAxMDEKKyNkZWZpbmUgVE5FVFcxMjUxX0NISVBfSURfUEcxXzIJICAgICAgICAweDA3MDMwMTAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBJbnRlcnJ1cHQgVHJpZ2dlciBSZWdpc3RlciAoSG9zdCAtPiBXaUxpbmspCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBIYXJkd2FyZSB0byBFbWJlZGRlZCBDUFUgSW50ZXJydXB0cyAtIGZpcnN0IDMyLWJpdCByZWdpc3RlciBzZXQgKi8KKworLyoKKyAqIEhvc3QgQ29tbWFuZCBJbnRlcnJ1cHQuIFNldHRpbmcgdGhpcyBiaXQgbWFza3MKKyAqIHRoZSBpbnRlcnJ1cHQgdGhhdCB0aGUgaG9zdCBpc3N1ZXMgdG8gaW5mb3JtCisgKiB0aGUgRlcgdGhhdCBpdCBoYXMgc2VudCBhIGNvbW1hbmQKKyAqIHRvIHRoZSBXbGFuIGhhcmR3YXJlIENvbW1hbmQgTWFpbGJveC4KKyAqLworI2RlZmluZSBJTlRSX1RSSUdfQ01EICAgICAgIEJJVCgwKQorCisvKgorICogSG9zdCBFdmVudCBBY2tub3dsZWdkZSBJbnRlcnJ1cHQuIFRoZSBob3N0CisgKiBzZXRzIHRoaXMgYml0IHRvIGFja25vd2xlZGdlIHRoYXQgaXQgcmVjZWl2ZWQKKyAqIHRoZSB1bnNvbGljaXRlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBldmVudAorICogbWFpbGJveC4KKyAqLworI2RlZmluZSBJTlRSX1RSSUdfRVZFTlRfQUNLIEJJVCgxKQorCisvKgorICogVGhlIGhvc3Qgc2V0cyB0aGlzIGJpdCB0byBpbmZvcm0gdGhlIFdsYW4KKyAqIEZXIHRoYXQgYSBUWCBwYWNrZXQgaXMgaW4gdGhlIFhGRVIKKyAqIEJ1ZmZlciAjMC4KKyAqLworI2RlZmluZSBJTlRSX1RSSUdfVFhfUFJPQzAgQklUKDIpCisKKy8qCisgKiBUaGUgaG9zdCBzZXRzIHRoaXMgYml0IHRvIGluZm9ybSB0aGUgRlcKKyAqIHRoYXQgaXQgcmVhZCBhIHBhY2tldCBmcm9tIFJYIFhGRVIKKyAqIEJ1ZmZlciAjMC4KKyAqLworI2RlZmluZSBJTlRSX1RSSUdfUlhfUFJPQzAgQklUKDMpCisKKyNkZWZpbmUgSU5UUl9UUklHX0RFQlVHX0FDSyBCSVQoNCkKKworI2RlZmluZSBJTlRSX1RSSUdfU1RBVEVfQ0hBTkdFRCBCSVQoNSkKKworCisvKiBIYXJkd2FyZSB0byBFbWJlZGRlZCBDUFUgSW50ZXJydXB0cyAtIHNlY29uZCAzMi1iaXQgcmVnaXN0ZXIgc2V0ICovCisKKy8qCisgKiBUaGUgaG9zdCBzZXRzIHRoaXMgYml0IHRvIGluZm9ybSB0aGUgRlcKKyAqIHRoYXQgaXQgcmVhZCBhIHBhY2tldCBmcm9tIFJYIFhGRVIKKyAqIEJ1ZmZlciAjMS4KKyAqLworI2RlZmluZSBJTlRSX1RSSUdfUlhfUFJPQzEgQklUKDE3KQorCisvKgorICogVGhlIGhvc3Qgc2V0cyB0aGlzIGJpdCB0byBpbmZvcm0gdGhlIFdsYW4KKyAqIGhhcmR3YXJlIHRoYXQgYSBUWCBwYWNrZXQgaXMgaW4gdGhlIFhGRVIKKyAqIEJ1ZmZlciAjMS4KKyAqLworI2RlZmluZSBJTlRSX1RSSUdfVFhfUFJPQzEgQklUKDE4KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDhiNjkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yeC5jCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJ3bDEyNzEuaCIKKyNpbmNsdWRlICJ3bDEyNzFfYWN4LmgiCisjaW5jbHVkZSAid2wxMjcxX3JlZy5oIgorI2luY2x1ZGUgIndsMTI3MV9yeC5oIgorI2luY2x1ZGUgIndsMTI3MV9zcGkuaCIKKworc3RhdGljIHU4IHdsMTI3MV9yeF9nZXRfbWVtX2Jsb2NrKHN0cnVjdCB3bDEyNzFfZndfc3RhdHVzICpzdGF0dXMsCisJCQkJICB1MzIgZHJ2X3J4X2NvdW50ZXIpCit7CisJcmV0dXJuIHN0YXR1cy0+cnhfcGt0X2Rlc2NzW2Rydl9yeF9jb3VudGVyXSAmIFJYX01FTV9CTE9DS19NQVNLOworfQorCitzdGF0aWMgdTMyIHdsMTI3MV9yeF9nZXRfYnVmX3NpemUoc3RydWN0IHdsMTI3MV9md19zdGF0dXMgKnN0YXR1cywKKwkJCQkgdTMyIGRydl9yeF9jb3VudGVyKQoreworCXJldHVybiAoc3RhdHVzLT5yeF9wa3RfZGVzY3NbZHJ2X3J4X2NvdW50ZXJdICYgUlhfQlVGX1NJWkVfTUFTSykgPj4KKwkJUlhfQlVGX1NJWkVfU0hJRlRfRElWOworfQorCisvKiBUaGUgdmFsdWVzIG9mIHRoaXMgdGFibGUgbXVzdCBtYXRjaCB0aGUgd2wxMjcxX3JhdGVzW10gYXJyYXkgKi8KK3N0YXRpYyB1OCB3bDEyNzFfcnhfcmF0ZV90b19pZHhbXSA9IHsKKwkvKiBNQ1MgcmF0ZXMgYXJlIHVzZWQgb25seSB3aXRoIDExbiAqLworCVdMMTI3MV9SWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBXTDEyNzFfUkFURV9NQ1M3ICovCisJV0wxMjcxX1JYX1JBVEVfVU5TVVBQT1JURUQsIC8qIFdMMTI3MV9SQVRFX01DUzYgKi8KKwlXTDEyNzFfUlhfUkFURV9VTlNVUFBPUlRFRCwgLyogV0wxMjcxX1JBVEVfTUNTNSAqLworCVdMMTI3MV9SWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBXTDEyNzFfUkFURV9NQ1M0ICovCisJV0wxMjcxX1JYX1JBVEVfVU5TVVBQT1JURUQsIC8qIFdMMTI3MV9SQVRFX01DUzMgKi8KKwlXTDEyNzFfUlhfUkFURV9VTlNVUFBPUlRFRCwgLyogV0wxMjcxX1JBVEVfTUNTMiAqLworCVdMMTI3MV9SWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBXTDEyNzFfUkFURV9NQ1MxICovCisJV0wxMjcxX1JYX1JBVEVfVU5TVVBQT1JURUQsIC8qIFdMMTI3MV9SQVRFX01DUzAgKi8KKworCTExLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXTDEyNzFfUkFURV81NCAgICovCisJMTAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdMMTI3MV9SQVRFXzQ4ICAgKi8KKwk5LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0wxMjcxX1JBVEVfMzYgICAqLworCTgsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXTDEyNzFfUkFURV8yNCAgICovCisKKwkvKiBUSS1zcGVjaWZpYyByYXRlICovCisJV0wxMjcxX1JYX1JBVEVfVU5TVVBQT1JURUQsIC8qIFdMMTI3MV9SQVRFXzIyICAgKi8KKworCTcsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXTDEyNzFfUkFURV8xOCAgICovCisJNiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdMMTI3MV9SQVRFXzEyICAgKi8KKwkzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0wxMjcxX1JBVEVfMTEgICAqLworCTUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXTDEyNzFfUkFURV85ICAgICovCisJNCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdMMTI3MV9SQVRFXzYgICAgKi8KKwkyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0wxMjcxX1JBVEVfNV81ICAqLworCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXTDEyNzFfUkFURV8yICAgICovCisJMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdMMTI3MV9SQVRFXzEgICAgKi8KK307CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9yeF9zdGF0dXMoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkgICAgIHN0cnVjdCB3bDEyNzFfcnhfZGVzY3JpcHRvciAqZGVzYywKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywKKwkJCSAgICAgdTggYmVhY29uKQoreworCW1lbXNldChzdGF0dXMsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cykpOworCisJaWYgKChkZXNjLT5mbGFncyAmIFdMMTI3MV9SWF9ERVNDX0JBTkRfTUFTSykgPT0gV0wxMjcxX1JYX0RFU0NfQkFORF9CRykKKwkJc3RhdHVzLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwllbHNlCisJCXdsMTI3MV93YXJuaW5nKCJ1bnN1cHBvcnRlZCBiYW5kIDB4JXgiLAorCQkJICAgICAgIGRlc2MtPmZsYWdzICYgV0wxMjcxX1JYX0RFU0NfQkFORF9NQVNLKTsKKworCS8qCisJICogRklYTUU6IEFkZCBtYWN0aW1lIGhhbmRsaW5nLiAgRm9yIElCU1MgKGFkLWhvYykgd2UgbmVlZCB0byBnZXQgdGhlCisJICogdGltZXN0YW1wIGZyb20gdGhlIGJlYWNvbiAoYWN4X3RzZl9pbmZvKS4gIEluIEJTUyBtb2RlIChpbmZyYSkgd2UKKwkgKiBvbmx5IG5lZWQgdGhlIG1hY3RpbWUgZm9yIG1vbml0b3IgbW9kZS4gIEZvciBub3cgdGhlIG1hY3RpbWUgaXMKKwkgKiBub3QgdmFsaWQsIHNvIFJYX0ZMQUdfVFNGVCBzaG91bGQgbm90IGJlIHNldAorCSAqLworCXN0YXR1cy0+c2lnbmFsID0gZGVzYy0+cnNzaTsKKworCS8qIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBvcHRpbWl6ZWQ/ICovCisJc3RhdHVzLT5xdWFsID0gKGRlc2MtPnJzc2kgLSBXTDEyNzFfUlhfTUlOX1JTU0kpICogMTAwIC8KKwkJKFdMMTI3MV9SWF9NQVhfUlNTSSAtIFdMMTI3MV9SWF9NSU5fUlNTSSk7CisJc3RhdHVzLT5xdWFsID0gbWluKHN0YXR1cy0+cXVhbCwgMTAwKTsKKwlzdGF0dXMtPnF1YWwgPSBtYXgoc3RhdHVzLT5xdWFsLCAwKTsKKworCS8qCisJICogRklYTUU6IEluIHdsMTI1MSwgdGhlIFNOUiBzaG91bGQgYmUgZGl2aWRlZCBieSB0d28uICBJbiB3bDEyNzEgd2UKKwkgKiBuZWVkIHRvIGRpdmlkZSBieSB0d28gZm9yIG5vdywgYnV0IFRJIGhhcyBiZWVuIGRpc2N1c3NpbmcgYWJvdXQKKwkgKiBjaGFuZ2luZyBpdC4gIFRoaXMgbmVlZHMgdG8gYmUgcmVjaGVja2VkLgorCSAqLworCXN0YXR1cy0+bm9pc2UgPSBkZXNjLT5yc3NpIC0gKGRlc2MtPnNuciA+PiAxKTsKKworCXN0YXR1cy0+ZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShkZXNjLT5jaGFubmVsKTsKKworCWlmIChkZXNjLT5mbGFncyAmIFdMMTI3MV9SWF9ERVNDX0VOQ1JZUFRfTUFTSykgeworCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19JVl9TVFJJUFBFRCB8IFJYX0ZMQUdfTU1JQ19TVFJJUFBFRDsKKworCQlpZiAobGlrZWx5KCEoZGVzYy0+ZmxhZ3MgJiBXTDEyNzFfUlhfREVTQ19ERUNSWVBUX0ZBSUwpKSkKKwkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKKworCQlpZiAodW5saWtlbHkoZGVzYy0+ZmxhZ3MgJiBXTDEyNzFfUlhfREVTQ19NSUNfRkFJTCkpCisJCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19NTUlDX0VSUk9SOworCX0KKworCXN0YXR1cy0+cmF0ZV9pZHggPSB3bDEyNzFfcnhfcmF0ZV90b19pZHhbZGVzYy0+cmF0ZV07CisKKwlpZiAoc3RhdHVzLT5yYXRlX2lkeCA9PSBXTDEyNzFfUlhfUkFURV9VTlNVUFBPUlRFRCkKKwkJd2wxMjcxX3dhcm5pbmcoInVuc3VwcG9ydGVkIHJhdGUiKTsKK30KKworc3RhdGljIHZvaWQgd2wxMjcxX3J4X2hhbmRsZV9kYXRhKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgbGVuZ3RoKQoreworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXR1czsKKwlzdHJ1Y3Qgd2wxMjcxX3J4X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgKmZjOworCXU4ICpidWY7CisJdTggYmVhY29uID0gMDsKKworCXNrYiA9IGRldl9hbGxvY19za2IobGVuZ3RoKTsKKwlpZiAoIXNrYikgeworCQl3bDEyNzFfZXJyb3IoIkNvdWxkbid0IGFsbG9jYXRlIFJYIGZyYW1lIik7CisJCXJldHVybjsKKwl9CisKKwlidWYgPSBza2JfcHV0KHNrYiwgbGVuZ3RoKTsKKwl3bDEyNzFfc3BpX3JlZ19yZWFkKHdsLCBXTDEyNzFfU0xWX01FTV9EQVRBLCBidWYsIGxlbmd0aCwgdHJ1ZSk7CisKKwkvKiB0aGUgZGF0YSByZWFkIHN0YXJ0cyB3aXRoIHRoZSBkZXNjcmlwdG9yICovCisJZGVzYyA9IChzdHJ1Y3Qgd2wxMjcxX3J4X2Rlc2NyaXB0b3IgKikgYnVmOworCisJLyogbm93IHdlIHB1bGwgdGhlIGRlc2NyaXB0b3Igb3V0IG9mIHRoZSBidWZmZXIgKi8KKwlza2JfcHVsbChza2IsIHNpemVvZigqZGVzYykpOworCisJZmMgPSAodTE2ICopc2tiLT5kYXRhOworCWlmICgoKmZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pCisJCWJlYWNvbiA9IDE7CisKKwl3bDEyNzFfcnhfc3RhdHVzKHdsLCBkZXNjLCAmcnhfc3RhdHVzLCBiZWFjb24pOworCisJd2wxMjcxX2RlYnVnKERFQlVHX1JYLCAicnggc2tiIDB4JXA6ICVkIEIgJXMiLCBza2IsIHNrYi0+bGVuLAorCQkgICAgIGJlYWNvbiA/ICJiZWFjb24iIDogIiIpOworCisJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmcnhfc3RhdHVzLCBzaXplb2Yocnhfc3RhdHVzKSk7CisJaWVlZTgwMjExX3J4KHdsLT5odywgc2tiKTsKK30KKwordm9pZCB3bDEyNzFfcngoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCB3bDEyNzFfZndfc3RhdHVzICpzdGF0dXMpCit7CisJc3RydWN0IHdsMTI3MV9hY3hfbWVtX21hcCAqd2xfbWVtX21hcCA9IHdsLT50YXJnZXRfbWVtX21hcDsKKwl1MzIgYnVmX3NpemU7CisJdTMyIGZ3X3J4X2NvdW50ZXIgID0gc3RhdHVzLT5md19yeF9jb3VudGVyICYgTlVNX1JYX1BLVF9ERVNDX01PRF9NQVNLOworCXUzMiBkcnZfcnhfY291bnRlciA9IHdsLT5yeF9jb3VudGVyICYgTlVNX1JYX1BLVF9ERVNDX01PRF9NQVNLOworCXUzMiBtZW1fYmxvY2s7CisKKwl3aGlsZSAoZHJ2X3J4X2NvdW50ZXIgIT0gZndfcnhfY291bnRlcikgeworCQltZW1fYmxvY2sgPSB3bDEyNzFfcnhfZ2V0X21lbV9ibG9jayhzdGF0dXMsIGRydl9yeF9jb3VudGVyKTsKKwkJYnVmX3NpemUgPSB3bDEyNzFfcnhfZ2V0X2J1Zl9zaXplKHN0YXR1cywgZHJ2X3J4X2NvdW50ZXIpOworCisJCWlmIChidWZfc2l6ZSA9PSAwKSB7CisJCQl3bDEyNzFfd2FybmluZygicmVjZWl2ZWQgZW1wdHkgZGF0YSIpOworCQkJYnJlYWs7CisJCX0KKworCQl3bC0+cnhfbWVtX3Bvb2xfYWRkci5hZGRyID0KKwkJCShtZW1fYmxvY2sgPDwgOCkgKyB3bF9tZW1fbWFwLT5wYWNrZXRfbWVtb3J5X3Bvb2xfc3RhcnQ7CisJCXdsLT5yeF9tZW1fcG9vbF9hZGRyLmFkZHJfZXh0cmEgPQorCQkJd2wtPnJ4X21lbV9wb29sX2FkZHIuYWRkciArIDQ7CisKKwkJLyogQ2hvb3NlIHRoZSBibG9jayB3ZSB3YW50IHRvIHJlYWQgKi8KKwkJd2wxMjcxX3NwaV9yZWdfd3JpdGUod2wsIFdMMTI3MV9TTFZfUkVHX0RBVEEsCisJCQkJICAgICAmd2wtPnJ4X21lbV9wb29sX2FkZHIsCisJCQkJICAgICBzaXplb2Yod2wtPnJ4X21lbV9wb29sX2FkZHIpLCBmYWxzZSk7CisKKwkJd2wxMjcxX3J4X2hhbmRsZV9kYXRhKHdsLCBidWZfc2l6ZSk7CisKKwkJd2wtPnJ4X2NvdW50ZXIrKzsKKwkJZHJ2X3J4X2NvdW50ZXIgPSB3bC0+cnhfY291bnRlciAmIE5VTV9SWF9QS1RfREVTQ19NT0RfTUFTSzsKKwl9CisKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIFJYX0RSSVZFUl9DT1VOVEVSX0FERFJFU1MsIHdsLT5yeF9jb3VudGVyKTsKKworCS8qIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBzb21lIHByb2JsZW1zIGluIHRoZSBjaGlwICovCisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBSWF9EUklWRVJfRFVNTVlfV1JJVEVfQUREUkVTUywgMHgxKTsKKworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxY2E2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3J4LmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19XTDEyNzFfUlhfSF9fCisjZGVmaW5lIF9fV0wxMjcxX1JYX0hfXworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKKyNkZWZpbmUgV0wxMjcxX1JYX01BWF9SU1NJIC0zMAorI2RlZmluZSBXTDEyNzFfUlhfTUlOX1JTU0kgLTk1CisKKyNkZWZpbmUgV0wxMjcxX1JYX0FMSUdOX1RPIDQKKyNkZWZpbmUgV0wxMjcxX1JYX0FMSUdOKGxlbikgKCgobGVuKSArIFdMMTI3MV9SWF9BTElHTl9UTyAtIDEpICYgXAorCQkJICAgICB+KFdMMTI3MV9SWF9BTElHTl9UTyAtIDEpKQorCisjZGVmaW5lIFNIT1JUX1BSRUFNQkxFX0JJVCAgIEJJVCgwKQorI2RlZmluZSBPRkRNX1JBVEVfQklUICAgICAgICBCSVQoNikKKyNkZWZpbmUgUEJDQ19SQVRFX0JJVCAgICAgICAgQklUKDcpCisKKyNkZWZpbmUgUExDUF9IRUFERVJfTEVOR1RIIDgKKyNkZWZpbmUgUlhfREVTQ19QQUNLRVRJRF9TSElGVCAxMQorI2RlZmluZSBSWF9NQVhfUEFDS0VUX0lEIDMKKworI2RlZmluZSBOVU1fUlhfUEtUX0RFU0NfTU9EX01BU0sgICA3CisjZGVmaW5lIFdMMTI3MV9SWF9SQVRFX1VOU1VQUE9SVEVEIDB4RkYKKworI2RlZmluZSBSWF9ERVNDX1ZBTElEX0ZDUyAgICAgICAgIDB4MDAwMQorI2RlZmluZSBSWF9ERVNDX01BVENIX1JYQUREUjEgICAgIDB4MDAwMgorI2RlZmluZSBSWF9ERVNDX01DQVNUICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBSWF9ERVNDX1NUQUlOVElNICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBSWF9ERVNDX1ZJUlRVQUxfQk0gICAgICAgIDB4MDAxMAorI2RlZmluZSBSWF9ERVNDX0JDQVNUICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBSWF9ERVNDX01BVENIX1NTSUQgICAgICAgIDB4MDA0MAorI2RlZmluZSBSWF9ERVNDX01BVENIX0JTU0lEICAgICAgIDB4MDA4MAorI2RlZmluZSBSWF9ERVNDX0VOQ1JZUFRJT05fTUFTSyAgIDB4MDMwMAorI2RlZmluZSBSWF9ERVNDX01FQVNVUk1FTlQgICAgICAgIDB4MDQwMAorI2RlZmluZSBSWF9ERVNDX1NFUU5VTV9NQVNLICAgICAgIDB4MTgwMAorI2RlZmluZQlSWF9ERVNDX01JQ19GQUlMCSAgMHgyMDAwCisjZGVmaW5lCVJYX0RFU0NfREVDUllQVF9GQUlMCSAgMHg0MDAwCisKKy8qCisgKiBSWCBEZXNjcmlwdG9yIGZsYWdzOgorICoKKyAqIEJpdHMgMC0xIC0gYmFuZAorICogQml0ICAyICAgLSBTVEJDCisgKiBCaXQgIDMgICAtIEEtTVBEVQorICogQml0ICA0ICAgLSBIVAorICogQml0cyA1LTcgLSBlbmNyeXB0aW9uCisgKi8KKyNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfQkFORF9NQVNLICAgIDB4MDMKKyNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfRU5DUllQVF9NQVNLIDB4RTAKKworI2RlZmluZSBXTDEyNzFfUlhfREVTQ19CQU5EX0JHICAgICAgMHgwMAorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19CQU5EX0ogICAgICAgMHgwMQorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19CQU5EX0EgICAgICAgMHgwMgorCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX1NUQkMgICAgICAgICBCSVQoMikKKyNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfQV9NUERVICAgICAgIEJJVCgzKQorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19IVCAgICAgICAgICAgQklUKDQpCisKKyNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfRU5DUllQVF9XRVAgIDB4MjAKKyNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfRU5DUllQVF9US0lQIDB4NDAKKyNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfRU5DUllQVF9BRVMgIDB4NjAKKyNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfRU5DUllQVF9HRU0gIDB4ODAKKworLyoKKyAqIFJYIERlc2NyaXB0b3Igc3RhdHVzCisgKgorICogQml0cyAwLTIgLSBzdGF0dXMKKyAqIEJpdHMgMy03IC0gcmVzZXJ2ZWQKKyAqLworI2RlZmluZSBXTDEyNzFfUlhfREVTQ19TVEFUVVNfTUFTSyAgICAgIDB4MDcKKworI2RlZmluZSBXTDEyNzFfUlhfREVTQ19TVUNDRVNTICAgICAgICAgIDB4MDAKKyNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfREVDUllQVF9GQUlMICAgICAweDAxCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX01JQ19GQUlMICAgICAgICAgMHgwMgorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19EUklWRVJfUlhfUV9GQUlMIDB4MDMKKworI2RlZmluZSBSWF9NRU1fQkxPQ0tfTUFTSyAgICAgMHhGRgorI2RlZmluZSBSWF9CVUZfU0laRV9NQVNLICAgICAgMHhGRkYwMAorI2RlZmluZSBSWF9CVUZfU0laRV9TSElGVF9ESVYgNgorCitzdHJ1Y3Qgd2wxMjcxX3J4X2Rlc2NyaXB0b3IgeworCXUxNiBsZW5ndGg7CisJdTggIHN0YXR1czsKKwl1OCAgZmxhZ3M7CisJdTggIHJhdGU7CisJdTggIGNoYW5uZWw7CisJczggIHJzc2k7CisJdTggIHNucjsKKwl1MzIgdGltZXN0YW1wOworCXU4ICBwYWNrZXRfY2xhc3M7CisJdTggIHByb2Nlc3NfaWQ7CisJdTggIHBhZF9sZW47CisJdTggIHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3ZvaWQgd2wxMjcxX3J4KHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgd2wxMjcxX2Z3X3N0YXR1cyAqc3RhdHVzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTEyODgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zcGkuYwpAQCAtMCwwICsxLDM4MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmM3Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjaW5jbHVkZSAid2wxMjcxLmgiCisjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCisjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorCitzdGF0aWMgaW50IHdsMTI3MV90cmFuc2xhdGVfcmVnX2FkZHIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKQoreworCXJldHVybiBhZGRyIC0gd2wtPnBoeXNpY2FsX3JlZ19hZGRyICsgd2wtPnZpcnR1YWxfcmVnX2FkZHI7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3RyYW5zbGF0ZV9tZW1fYWRkcihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpCit7CisJcmV0dXJuIGFkZHIgLSB3bC0+cGh5c2ljYWxfbWVtX2FkZHIgKyB3bC0+dmlydHVhbF9tZW1fYWRkcjsKK30KKworCit2b2lkIHdsMTI3MV9zcGlfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJdTggKmNtZDsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisKKwljbWQgPSBremFsbG9jKFdTUElfSU5JVF9DTURfTEVOLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBjbWQgZm9yIHNwaSByZXNldCIpOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCisJbWVtc2V0KGNtZCwgMHhmZiwgV1NQSV9JTklUX0NNRF9MRU4pOworCisJdC50eF9idWYgPSBjbWQ7CisJdC5sZW4gPSBXU1BJX0lOSVRfQ01EX0xFTjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOworCisJc3BpX3N5bmMod2wtPnNwaSwgJm0pOworCisJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpIHJlc2V0IC0+ICIsIGNtZCwgV1NQSV9JTklUX0NNRF9MRU4pOworfQorCit2b2lkIHdsMTI3MV9zcGlfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1OCBjcmNbV1NQSV9JTklUX0NNRF9DUkNfTEVOXSwgKmNtZDsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisKKwljbWQgPSBremFsbG9jKFdTUElfSU5JVF9DTURfTEVOLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBjbWQgZm9yIHNwaSBpbml0Iik7CisJCXJldHVybjsKKwl9CisKKwltZW1zZXQoY3JjLCAwLCBzaXplb2YoY3JjKSk7CisJbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCisJLyoKKwkgKiBTZXQgV1NQSV9JTklUX0NPTU1BTkQKKwkgKiB0aGUgZGF0YSBpcyBiZWluZyBzZW5kIGZyb20gdGhlIE1TQiB0byBMU0IKKwkgKi8KKwljbWRbMl0gPSAweGZmOworCWNtZFszXSA9IDB4ZmY7CisJY21kWzFdID0gV1NQSV9JTklUX0NNRF9TVEFSVCB8IFdTUElfSU5JVF9DTURfVFg7CisJY21kWzBdID0gMDsKKwljbWRbN10gPSAwOworCWNtZFs2XSB8PSBIV19BQ0NFU1NfV1NQSV9JTklUX0NNRF9NQVNLIDw8IDM7CisJY21kWzZdIHw9IEhXX0FDQ0VTU19XU1BJX0ZJWEVEX0JVU1lfTEVOICYgV1NQSV9JTklUX0NNRF9GSVhFREJVU1lfTEVOOworCisJaWYgKEhXX0FDQ0VTU19XU1BJX0ZJWEVEX0JVU1lfTEVOID09IDApCisJCWNtZFs1XSB8PSAgV1NQSV9JTklUX0NNRF9ESVNfRklYRURCVVNZOworCWVsc2UKKwkJY21kWzVdIHw9IFdTUElfSU5JVF9DTURfRU5fRklYRURCVVNZOworCisJY21kWzVdIHw9IFdTUElfSU5JVF9DTURfSU9EIHwgV1NQSV9JTklUX0NNRF9JUCB8IFdTUElfSU5JVF9DTURfQ1MKKwkJfCBXU1BJX0lOSVRfQ01EX1dTUEkgfCBXU1BJX0lOSVRfQ01EX1dTOworCisJY3JjWzBdID0gY21kWzFdOworCWNyY1sxXSA9IGNtZFswXTsKKwljcmNbMl0gPSBjbWRbN107CisJY3JjWzNdID0gY21kWzZdOworCWNyY1s0XSA9IGNtZFs1XTsKKworCWNtZFs0XSB8PSBjcmM3KDAsIGNyYywgV1NQSV9JTklUX0NNRF9DUkNfTEVOKSA8PCAxOworCWNtZFs0XSB8PSBXU1BJX0lOSVRfQ01EX0VORDsKKworCXQudHhfYnVmID0gY21kOworCXQubGVuID0gV1NQSV9JTklUX0NNRF9MRU47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKworCXNwaV9zeW5jKHdsLT5zcGksICZtKTsKKworCXdsMTI3MV9kdW1wKERFQlVHX1NQSSwgInNwaSBpbml0IC0+ICIsIGNtZCwgV1NQSV9JTklUX0NNRF9MRU4pOworfQorCisvKiBTZXQgdGhlIFNQSSBwYXJ0aXRpb25zIHRvIGFjY2VzcyB0aGUgY2hpcCBhZGRyZXNzZXMKKyAqCisgKiBUaGVyZSBhcmUgdHdvIFZJUlRVQUwgKFNQSSkgcGFydGl0aW9ucyAodGhlIG1lbW9yeSBwYXJ0aXRpb24gYW5kIHRoZQorICogcmVnaXN0ZXJzIHBhcnRpdGlvbiksIHdoaWNoIGFyZSBtYXBwZWQgdG8gdHdvIGRpZmZlcmVudCBhcmVhcyBvZiB0aGUKKyAqIFBIWVNJQ0FMIChoYXJkd2FyZSkgbWVtb3J5LiAgVGhpcyBmdW5jdGlvbiBhbHNvIG1ha2VzIG90aGVyIGNoZWNrcyB0bworICogZW5zdXJlIHRoYXQgdGhlIHBhcnRpdGlvbnMgYXJlIG5vdCBvdmVybGFwcGluZy4gIEluIHRoZSBkaWFncmFtIGJlbG93LCB0aGUKKyAqIG1lbW9yeSBwYXJ0aXRpb24gY29tZXMgYmVmb3JlIHRoZSByZWdpc3RlciBwYXJ0aXRpb24sIGJ1dCB0aGUgb3Bwb3NpdGUgaXMKKyAqIGFsc28gc3VwcG9ydGVkLgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBIWVNJQ0FMIGFkZHJlc3MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKy0tLS0rLS0+IG1lbV9zdGFydAorICogICAgICAgICAgVklSVFVBTCBhZGRyZXNzICAgICAuLi4gICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgc3BhY2UgICAgICAgLi4uICAgICAgfCAgICB8IFtQQVJUXzBdCisgKiAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgIHwgICAgfAorICogMHgwMDAwMDAwMCA8LS0rLS0tLSsuLi4gICAgICAgICAuLi4rLS0tLSstLT4gbWVtX3N0YXJ0ICsgbWVtX3NpemUKKyAqICAgICAgICAgICAgICAgfCAgICB8ICAgICAgICAgLi4uICAgfCAgICB8CisgKiAgICAgICAgICAgICAgIHxNRU0gfCAgICAgIC4uLiAgICAgIHwgICAgfAorICogICAgICAgICAgICAgICB8ICAgIHwgICAuLi4gICAgICAgICB8ICAgIHwKKyAqICBwYXJ0X3NpemUgPC0tKy0tLS0rLi4uICAgICAgICAgICAgfCAgICB8IHt1bnVzZWQgYXJlYSkKKyAqICAgICAgICAgICAgICAgfCAgICB8ICAgLi4uICAgICAgICAgfCAgICB8CisgKiAgICAgICAgICAgICAgIHxSRUcgfCAgICAgIC4uLiAgICAgIHwgICAgfAorICogIHBhcnRfc2l6ZSAgICB8ICAgIHwgICAgICAgICAuLi4gICB8ICAgIHwKKyAqICAgICAgKyAgICAgPC0tKy0tLS0rLi4uICAgICAgICAgLi4uKy0tLS0rLS0+IHJlZ19zdGFydAorICogIHJlZ19zaXplICAgICAgICAgICAgICAuLi4gICAgICAgICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgICAgfCAgICB8IFtQQVJUXzFdCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgIHwgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4rLS0tLSstLT4gcmVnX3N0YXJ0ICsgcmVnX3NpemUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgKgorICovCitpbnQgd2wxMjcxX3NldF9wYXJ0aXRpb24oc3RydWN0IHdsMTI3MSAqd2wsCisJCQkgIHUzMiBtZW1fc3RhcnQsIHUzMiBtZW1fc2l6ZSwKKwkJCSAgdTMyIHJlZ19zdGFydCwgdTMyIHJlZ19zaXplKQoreworCXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uICpwYXJ0aXRpb247CisJc3RydWN0IHNwaV90cmFuc2ZlciB0OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXNpemVfdCBsZW4sIGNtZF9sZW47CisJdTMyICpjbWQ7CisJaW50IGFkZHI7CisKKwljbWRfbGVuID0gc2l6ZW9mKHUzMikgKyAyICogc2l6ZW9mKHN0cnVjdCB3bDEyNzFfcGFydGl0aW9uKTsKKwljbWQgPSBremFsbG9jKGNtZF9sZW4sIEdGUF9LRVJORUwpOworCWlmICghY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCgmdCwgMCwgc2l6ZW9mKHQpKTsKKworCXBhcnRpdGlvbiA9IChzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbiAqKSAoY21kICsgMSk7CisJYWRkciA9IEhXX0FDQ0VTU19QQVJUMF9TSVpFX0FERFI7CisJbGVuID0gMiAqIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbik7CisKKwkqY21kIHw9IFdTUElfQ01EX1dSSVRFOworCSpjbWQgfD0gKGxlbiA8PCBXU1BJX0NNRF9CWVRFX0xFTkdUSF9PRkZTRVQpICYgV1NQSV9DTURfQllURV9MRU5HVEg7CisJKmNtZCB8PSBhZGRyICYgV1NQSV9DTURfQllURV9BRERSOworCisJd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgIm1lbV9zdGFydCAlMDhYIG1lbV9zaXplICUwOFgiLAorCQkgICAgIG1lbV9zdGFydCwgbWVtX3NpemUpOworCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJyZWdfc3RhcnQgJTA4WCByZWdfc2l6ZSAlMDhYIiwKKwkJICAgICByZWdfc3RhcnQsIHJlZ19zaXplKTsKKworCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSB0d28gcGFydGl0aW9ucyB0b2dldGhlciBkb24ndCBleGNlZWQgdGhlCisJICogYWRkcmVzcyByYW5nZSAqLworCWlmICgobWVtX3NpemUgKyByZWdfc2l6ZSkgPiBIV19BQ0NFU1NfTUVNT1JZX01BWF9SQU5HRSkgeworCQl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAiVG90YWwgc2l6ZSBleGNlZWRzIG1heGltdW0gdmlydHVhbCIKKwkJCSAgICAgIiBhZGRyZXNzIHJhbmdlLiAgVHJ1bmNhdGluZyBwYXJ0aXRpb25bMF0uIik7CisJCW1lbV9zaXplID0gSFdfQUNDRVNTX01FTU9SWV9NQVhfUkFOR0UgLSByZWdfc2l6ZTsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgIm1lbV9zdGFydCAlMDhYIG1lbV9zaXplICUwOFgiLAorCQkJICAgICBtZW1fc3RhcnQsIG1lbV9zaXplKTsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgInJlZ19zdGFydCAlMDhYIHJlZ19zaXplICUwOFgiLAorCQkJICAgICByZWdfc3RhcnQsIHJlZ19zaXplKTsKKwl9CisKKwlpZiAoKG1lbV9zdGFydCA8IHJlZ19zdGFydCkgJiYKKwkgICAgKChtZW1fc3RhcnQgKyBtZW1fc2l6ZSkgPiByZWdfc3RhcnQpKSB7CisJCS8qIEd1YXJhbnRlZSB0aGF0IHRoZSBtZW1vcnkgcGFydGl0aW9uIGRvZXNuJ3Qgb3ZlcmxhcCB0aGUKKwkJICogcmVnaXN0ZXJzIHBhcnRpdGlvbiAqLworCQl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAiRW5kIG9mIHBhcnRpdGlvblswXSBpcyAiCisJCQkgICAgICJvdmVybGFwcGluZyBwYXJ0aXRpb25bMV0uICBBZGp1c3RlZC4iKTsKKwkJbWVtX3NpemUgPSByZWdfc3RhcnQgLSBtZW1fc3RhcnQ7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJtZW1fc3RhcnQgJTA4WCBtZW1fc2l6ZSAlMDhYIiwKKwkJCSAgICAgbWVtX3N0YXJ0LCBtZW1fc2l6ZSk7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJyZWdfc3RhcnQgJTA4WCByZWdfc2l6ZSAlMDhYIiwKKwkJCSAgICAgcmVnX3N0YXJ0LCByZWdfc2l6ZSk7CisJfSBlbHNlIGlmICgocmVnX3N0YXJ0IDwgbWVtX3N0YXJ0KSAmJgorCQkgICAoKHJlZ19zdGFydCArIHJlZ19zaXplKSA+IG1lbV9zdGFydCkpIHsKKwkJLyogR3VhcmFudGVlIHRoYXQgdGhlIHJlZ2lzdGVyIHBhcnRpdGlvbiBkb2Vzbid0IG92ZXJsYXAgdGhlCisJCSAqIG1lbW9yeSBwYXJ0aXRpb24gKi8KKwkJd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgIkVuZCBvZiBwYXJ0aXRpb25bMV0gaXMiCisJCQkgICAgICIgb3ZlcmxhcHBpbmcgcGFydGl0aW9uWzBdLiAgQWRqdXN0ZWQuIik7CisJCXJlZ19zaXplID0gbWVtX3N0YXJ0IC0gcmVnX3N0YXJ0OworCQl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAibWVtX3N0YXJ0ICUwOFggbWVtX3NpemUgJTA4WCIsCisJCQkgICAgIG1lbV9zdGFydCwgbWVtX3NpemUpOworCQl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAicmVnX3N0YXJ0ICUwOFggcmVnX3NpemUgJTA4WCIsCisJCQkgICAgIHJlZ19zdGFydCwgcmVnX3NpemUpOworCX0KKworCXBhcnRpdGlvblswXS5zdGFydCA9IG1lbV9zdGFydDsKKwlwYXJ0aXRpb25bMF0uc2l6ZSAgPSBtZW1fc2l6ZTsKKwlwYXJ0aXRpb25bMV0uc3RhcnQgPSByZWdfc3RhcnQ7CisJcGFydGl0aW9uWzFdLnNpemUgID0gcmVnX3NpemU7CisKKwl3bC0+cGh5c2ljYWxfbWVtX2FkZHIgPSBtZW1fc3RhcnQ7CisJd2wtPnBoeXNpY2FsX3JlZ19hZGRyID0gcmVnX3N0YXJ0OworCisJd2wtPnZpcnR1YWxfbWVtX2FkZHIgPSAwOworCXdsLT52aXJ0dWFsX3JlZ19hZGRyID0gbWVtX3NpemU7CisKKwl0LnR4X2J1ZiA9IGNtZDsKKwl0LmxlbiA9IGNtZF9sZW47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKworCXNwaV9zeW5jKHdsLT5zcGksICZtKTsKKworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3bDEyNzFfc3BpX3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsCisJCSAgICAgc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCkKK3sKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbM107CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJdTggKmJ1c3lfYnVmOworCXUzMiAqY21kOworCisJY21kID0gJndsLT5idWZmZXJfY21kOworCWJ1c3lfYnVmID0gd2wtPmJ1ZmZlcl9idXN5d29yZDsKKworCSpjbWQgPSAwOworCSpjbWQgfD0gV1NQSV9DTURfUkVBRDsKKwkqY21kIHw9IChsZW4gPDwgV1NQSV9DTURfQllURV9MRU5HVEhfT0ZGU0VUKSAmIFdTUElfQ01EX0JZVEVfTEVOR1RIOworCSpjbWQgfD0gYWRkciAmIFdTUElfQ01EX0JZVEVfQUREUjsKKworCWlmIChmaXhlZCkKKwkJKmNtZCB8PSBXU1BJX0NNRF9GSVhFRDsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOworCisJdFswXS50eF9idWYgPSBjbWQ7CisJdFswXS5sZW4gPSA0OworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CisKKwkvKiBCdXN5IGFuZCBub24gYnVzeSB3b3JkcyByZWFkICovCisJdFsxXS5yeF9idWYgPSBidXN5X2J1ZjsKKwl0WzFdLmxlbiA9IFdMMTI3MV9CVVNZX1dPUkRfTEVOOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7CisKKwl0WzJdLnJ4X2J1ZiA9IGJ1ZjsKKwl0WzJdLmxlbiA9IGxlbjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsyXSwgJm0pOworCisJc3BpX3N5bmMod2wtPnNwaSwgJm0pOworCisJLyogRklYTUU6IGNoZWNrIGJ1c3kgd29yZHMgKi8KKworCXdsMTI3MV9kdW1wKERFQlVHX1NQSSwgInNwaV9yZWFkIGNtZCAtPiAiLCBjbWQsIHNpemVvZigqY21kKSk7CisJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpX3JlYWQgYnVmIDwtICIsIGJ1ZiwgbGVuKTsKK30KKwordm9pZCB3bDEyNzFfc3BpX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAorCQkgICAgICBzaXplX3QgbGVuLCBib29sIGZpeGVkKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFsyXTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwl1MzIgKmNtZDsKKworCWNtZCA9ICZ3bC0+YnVmZmVyX2NtZDsKKworCSpjbWQgPSAwOworCSpjbWQgfD0gV1NQSV9DTURfV1JJVEU7CisJKmNtZCB8PSAobGVuIDw8IFdTUElfQ01EX0JZVEVfTEVOR1RIX09GRlNFVCkgJiBXU1BJX0NNRF9CWVRFX0xFTkdUSDsKKwkqY21kIHw9IGFkZHIgJiBXU1BJX0NNRF9CWVRFX0FERFI7CisKKwlpZiAoZml4ZWQpCisJCSpjbWQgfD0gV1NQSV9DTURfRklYRUQ7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKKworCXRbMF0udHhfYnVmID0gY21kOworCXRbMF0ubGVuID0gc2l6ZW9mKCpjbWQpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CisKKwl0WzFdLnR4X2J1ZiA9IGJ1ZjsKKwl0WzFdLmxlbiA9IGxlbjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOworCisJc3BpX3N5bmMod2wtPnNwaSwgJm0pOworCisJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpX3dyaXRlIGNtZCAtPiAiLCBjbWQsIHNpemVvZigqY21kKSk7CisJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpX3dyaXRlIGJ1ZiAtPiAiLCBidWYsIGxlbik7Cit9CisKK3ZvaWQgd2wxMjcxX3NwaV9tZW1fcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJCSBzaXplX3QgbGVuKQoreworCWludCBwaHlzaWNhbDsKKworCXBoeXNpY2FsID0gd2wxMjcxX3RyYW5zbGF0ZV9tZW1fYWRkcih3bCwgYWRkcik7CisKKwl3bDEyNzFfc3BpX3JlYWQod2wsIHBoeXNpY2FsLCBidWYsIGxlbiwgZmFsc2UpOworfQorCit2b2lkIHdsMTI3MV9zcGlfbWVtX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAorCQkJICBzaXplX3QgbGVuKQoreworCWludCBwaHlzaWNhbDsKKworCXBoeXNpY2FsID0gd2wxMjcxX3RyYW5zbGF0ZV9tZW1fYWRkcih3bCwgYWRkcik7CisKKwl3bDEyNzFfc3BpX3dyaXRlKHdsLCBwaHlzaWNhbCwgYnVmLCBsZW4sIGZhbHNlKTsKK30KKwordm9pZCB3bDEyNzFfc3BpX3JlZ19yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAorCQkJIGJvb2wgZml4ZWQpCit7CisJaW50IHBoeXNpY2FsOworCisJcGh5c2ljYWwgPSB3bDEyNzFfdHJhbnNsYXRlX3JlZ19hZGRyKHdsLCBhZGRyKTsKKworCXdsMTI3MV9zcGlfcmVhZCh3bCwgcGh5c2ljYWwsIGJ1ZiwgbGVuLCBmaXhlZCk7Cit9CisKK3ZvaWQgd2wxMjcxX3NwaV9yZWdfd3JpdGUoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCisJCQkgIGJvb2wgZml4ZWQpCit7CisJaW50IHBoeXNpY2FsOworCisJcGh5c2ljYWwgPSB3bDEyNzFfdHJhbnNsYXRlX3JlZ19hZGRyKHdsLCBhZGRyKTsKKworCXdsMTI3MV9zcGlfd3JpdGUod2wsIHBoeXNpY2FsLCBidWYsIGxlbiwgZml4ZWQpOworfQorCit1MzIgd2wxMjcxX21lbV9yZWFkMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKQoreworCXJldHVybiB3bDEyNzFfcmVhZDMyKHdsLCB3bDEyNzFfdHJhbnNsYXRlX21lbV9hZGRyKHdsLCBhZGRyKSk7Cit9CisKK3ZvaWQgd2wxMjcxX21lbV93cml0ZTMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKK3sKKwl3bDEyNzFfd3JpdGUzMih3bCwgd2wxMjcxX3RyYW5zbGF0ZV9tZW1fYWRkcih3bCwgYWRkciksIHZhbCk7Cit9CisKK3UzMiB3bDEyNzFfcmVnX3JlYWQzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpCit7CisJcmV0dXJuIHdsMTI3MV9yZWFkMzIod2wsIHdsMTI3MV90cmFuc2xhdGVfcmVnX2FkZHIod2wsIGFkZHIpKTsKK30KKwordm9pZCB3bDEyNzFfcmVnX3dyaXRlMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKQoreworCXdsMTI3MV93cml0ZTMyKHdsLCB3bDEyNzFfdHJhbnNsYXRlX3JlZ19hZGRyKHdsLCBhZGRyKSwgdmFsKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc3BpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOTk2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fV0wxMjcxX1NQSV9IX18KKyNkZWZpbmUgX19XTDEyNzFfU1BJX0hfXworCisjaW5jbHVkZSAid2wxMjcxX3JlZy5oIgorCisjZGVmaW5lIEhXX0FDQ0VTU19NRU1PUllfTUFYX1JBTkdFCQkweDFGRkMwCisKKyNkZWZpbmUgSFdfQUNDRVNTX1BBUlQwX1NJWkVfQUREUiAgICAgICAgICAgMHgxRkZDMAorI2RlZmluZSBIV19BQ0NFU1NfUEFSVDBfU1RBUlRfQUREUiAgICAgICAgICAweDFGRkM0CisjZGVmaW5lIEhXX0FDQ0VTU19QQVJUMV9TSVpFX0FERFIgICAgICAgICAgIDB4MUZGQzgKKyNkZWZpbmUgSFdfQUNDRVNTX1BBUlQxX1NUQVJUX0FERFIgICAgICAgICAgMHgxRkZDQworCisjZGVmaW5lIEhXX0FDQ0VTU19SRUdJU1RFUl9TSVpFICAgICAgICAgICAgIDQKKworI2RlZmluZSBIV19BQ0NFU1NfUFJBTV9NQVhfUkFOR0UJCTB4M2MwMDAKKworI2RlZmluZSBXU1BJX0NNRF9SRUFEICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFdTUElfQ01EX1dSSVRFICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgV1NQSV9DTURfRklYRUQgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBXU1BJX0NNRF9CWVRFX0xFTkdUSCAgICAgICAgICAweDFGRkUwMDAwCisjZGVmaW5lIFdTUElfQ01EX0JZVEVfTEVOR1RIX09GRlNFVCAgIDE3CisjZGVmaW5lIFdTUElfQ01EX0JZVEVfQUREUiAgICAgICAgICAgIDB4MDAwMUZGRkYKKworI2RlZmluZSBXU1BJX0lOSVRfQ01EX0NSQ19MRU4gICAgICAgNQorCisjZGVmaW5lIFdTUElfSU5JVF9DTURfU1RBUlQgICAgICAgICAweDAwCisjZGVmaW5lIFdTUElfSU5JVF9DTURfVFggICAgICAgICAgICAweDQwCisvKiB0aGUgZXh0cmEgYnlwYXNzIGJpdCBpcyBzYW1wbGVkIGJ5IHRoZSBUTkVUIGFzICcxJyAqLworI2RlZmluZSBXU1BJX0lOSVRfQ01EX0JZUEFTU19CSVQgICAgMHg4MAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX0ZJWEVEQlVTWV9MRU4gMHgwNworI2RlZmluZSBXU1BJX0lOSVRfQ01EX0VOX0ZJWEVEQlVTWSAgMHg4MAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX0RJU19GSVhFREJVU1kgMHgwMAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX0lPRCAgICAgICAgICAgMHg0MAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX0lQICAgICAgICAgICAgMHgyMAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX0NTICAgICAgICAgICAgMHgxMAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX1dTICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX1dTUEkgICAgICAgICAgMHgwMQorI2RlZmluZSBXU1BJX0lOSVRfQ01EX0VORCAgICAgICAgICAgMHgwMQorCisjZGVmaW5lIFdTUElfSU5JVF9DTURfTEVOICAgICAgICAgICA4CisKKyNkZWZpbmUgSFdfQUNDRVNTX1dTUElfRklYRURfQlVTWV9MRU4gXAorCQkoKFdMMTI3MV9CVVNZX1dPUkRfTEVOIC0gNCkgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgSFdfQUNDRVNTX1dTUElfSU5JVF9DTURfTUFTSyAgMAorCisKKy8qIFJhdyB0YXJnZXQgSU8sIGFkZHJlc3MgaXMgbm90IHRyYW5zbGF0ZWQgKi8KK3ZvaWQgd2wxMjcxX3NwaV93cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJICAgICAgc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCk7Cit2b2lkIHdsMTI3MV9zcGlfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJICAgICBzaXplX3QgbGVuLCBib29sIGZpeGVkKTsKKworLyogTWVtb3J5IHRhcmdldCBJTywgYWRkcmVzcyBpcyB0cmFubGF0ZWQgdG8gcGFydGl0aW9uIDAgKi8KK3ZvaWQgd2wxMjcxX3NwaV9tZW1fcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Cit2b2lkIHdsMTI3MV9zcGlfbWVtX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKK3UzMiB3bDEyNzFfbWVtX3JlYWQzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpOwordm9pZCB3bDEyNzFfbWVtX3dyaXRlMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKTsKKworLyogUmVnaXN0ZXJzIElPICovCit2b2lkIHdsMTI3MV9zcGlfcmVnX3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCisJCQkgYm9vbCBmaXhlZCk7Cit2b2lkIHdsMTI3MV9zcGlfcmVnX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAorCQkJICBib29sIGZpeGVkKTsKK3UzMiB3bDEyNzFfcmVnX3JlYWQzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpOwordm9pZCB3bDEyNzFfcmVnX3dyaXRlMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKTsKKworLyogSU5JVCBhbmQgUkVTRVQgd29yZHMgKi8KK3ZvaWQgd2wxMjcxX3NwaV9yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit2b2lkIHdsMTI3MV9zcGlfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX3NldF9wYXJ0aXRpb24oc3RydWN0IHdsMTI3MSAqd2wsCisJCQkgdTMyIHBhcnRfc3RhcnQsIHUzMiBwYXJ0X3NpemUsCisJCQkgdTMyIHJlZ19zdGFydCwgIHUzMiByZWdfc2l6ZSk7CisKK3N0YXRpYyBpbmxpbmUgdTMyIHdsMTI3MV9yZWFkMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKQoreworCXdsMTI3MV9zcGlfcmVhZCh3bCwgYWRkciwgJndsLT5idWZmZXJfMzIsCisJCQlzaXplb2Yod2wtPmJ1ZmZlcl8zMiksIGZhbHNlKTsKKworCXJldHVybiB3bC0+YnVmZmVyXzMyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2wxMjcxX3dyaXRlMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKQoreworCXdsLT5idWZmZXJfMzIgPSB2YWw7CisJd2wxMjcxX3NwaV93cml0ZSh3bCwgYWRkciwgJndsLT5idWZmZXJfMzIsCisJCQkgc2l6ZW9mKHdsLT5idWZmZXJfMzIpLCBmYWxzZSk7Cit9CisKKyNlbmRpZiAvKiBfX1dMMTI3MV9TUElfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyMjEyNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguYwpAQCAtMCwwICsxLDM3OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJ3bDEyNzEuaCIKKyNpbmNsdWRlICJ3bDEyNzFfc3BpLmgiCisjaW5jbHVkZSAid2wxMjcxX3JlZy5oIgorI2luY2x1ZGUgIndsMTI3MV9wcy5oIgorI2luY2x1ZGUgIndsMTI3MV90eC5oIgorCitzdGF0aWMgaW50IHdsMTI3MV90eF9pZChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBGV19UWF9DTVBMVF9CTE9DS19TSVpFOyBpKyspCisJCWlmICh3bC0+dHhfZnJhbWVzW2ldID09IE5VTEwpIHsKKwkJCXdsLT50eF9mcmFtZXNbaV0gPSBza2I7CisJCQlyZXR1cm4gaTsKKwkJfQorCisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGludCB3bDEyNzFfdHhfYWxsb2NhdGUoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBleHRyYSkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyICpkZXNjOworCXUzMiB0b3RhbF9sZW4gPSBza2ItPmxlbiArIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyKSArIGV4dHJhOworCXUzMiB0b3RhbF9ibG9ja3MsIGV4Y2x1ZGVkOworCWludCBpZCwgcmV0ID0gLUVCVVNZOworCisJLyogYWxsb2NhdGUgZnJlZSBpZGVudGlmaWVyIGZvciB0aGUgcGFja2V0ICovCisJaWQgPSB3bDEyNzFfdHhfaWQod2wsIHNrYik7CisJaWYgKGlkIDwgMCkKKwkJcmV0dXJuIGlkOworCisJLyogYXBwcm94aW1hdGUgdGhlIG51bWJlciBvZiBibG9ja3MgcmVxdWlyZWQgZm9yIHRoaXMgcGFja2V0CisJICAgaW4gdGhlIGZpcm13YXJlICovCisJLyogRklYTUU6IHRyeSB0byBmaWd1cmUgb3V0IHdoYXQgaXMgZG9uZSBoZXJlIGFuZCBtYWtlIGl0IGNsZWFuZXIgKi8KKwl0b3RhbF9ibG9ja3MgPSAoc2tiLT5sZW4pID4+IFRYX0hXX0JMT0NLX1NISUZUX0RJVjsKKwlleGNsdWRlZCA9ICh0b3RhbF9ibG9ja3MgPDwgMikgKyAoc2tiLT5sZW4gJiAweGZmKSArIDM0OworCXRvdGFsX2Jsb2NrcyArPSAoZXhjbHVkZWQgPiAyNTIpID8gMiA6IDE7CisJdG90YWxfYmxvY2tzICs9IFRYX0hXX0JMT0NLX1NQQVJFOworCisJaWYgKHRvdGFsX2Jsb2NrcyA8PSB3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSkgeworCQlkZXNjID0gKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgKilza2JfcHVzaCgKKwkJCXNrYiwgdG90YWxfbGVuIC0gc2tiLT5sZW4pOworCisJCWRlc2MtPmV4dHJhX21lbV9ibG9ja3MgPSBUWF9IV19CTE9DS19TUEFSRTsKKwkJZGVzYy0+dG90YWxfbWVtX2Jsb2NrcyA9IHRvdGFsX2Jsb2NrczsKKwkJZGVzYy0+aWQgPSBpZDsKKworCQl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSAtPSB0b3RhbF9ibG9ja3M7CisKKwkJcmV0ID0gMDsKKworCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsCisJCQkgICAgICJ0eF9hbGxvY2F0ZTogc2l6ZTogJWQsIGJsb2NrczogJWQsIGlkOiAlZCIsCisJCQkgICAgIHRvdGFsX2xlbiwgdG90YWxfYmxvY2tzLCBpZCk7CisJfSBlbHNlCisJCXdsLT50eF9mcmFtZXNbaWRdID0gTlVMTDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3R4X2ZpbGxfaGRyKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgdTMyIGV4dHJhLCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmNvbnRyb2wpCit7CisJc3RydWN0IHdsMTI3MV90eF9od19kZXNjciAqZGVzYzsKKwlpbnQgcGFkOworCisJZGVzYyA9IChzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyICopIHNrYi0+ZGF0YTsKKworCS8qIGNvbmZpZ3VyZSBwYWNrZXQgbGlmZSB0aW1lICovCisJZGVzYy0+c3RhcnRfdGltZSA9IGppZmZpZXNfdG9fdXNlY3MoamlmZmllcykgLSB3bC0+dGltZV9vZmZzZXQ7CisJZGVzYy0+bGlmZV90aW1lID0gVFhfSFdfTUdNVF9QS1RfTElGRVRJTUVfVFU7CisKKwkvKiBjb25maWd1cmUgdGhlIHR4IGF0dHJpYnV0ZXMgKi8KKwlkZXNjLT50eF9hdHRyID0gd2wtPnNlc3Npb25fY291bnRlciA8PCBUWF9IV19BVFRSX09GU1RfU0VTU0lPTl9DT1VOVEVSOworCS8qIEZJWE1FOiBkbyB3ZSBrbm93IHRoZSBwYWNrZXQgcHJpb3JpdHk/IGNhbiB3ZSBpZGVudGlmeSBtZ210CisJICAgcGFja2V0cywgYW5kIHVzZSBtYXggcHJpbyBmb3IgdGhlbSBhdCBsZWFzdD8gKi8KKwlkZXNjLT50aWQgPSAwOworCWRlc2MtPmFpZCA9IFRYX0hXX0RFRkFVTFRfQUlEOworCWRlc2MtPnJlc2VydmVkID0gMDsKKworCS8qIGFsaWduIHRoZSBsZW5ndGggKGFuZCBzdG9yZSBpbiB0ZXJtcyBvZiB3b3JkcykgKi8KKwlwYWQgPSBXTDEyNzFfVFhfQUxJR04oc2tiLT5sZW4pOworCWRlc2MtPmxlbmd0aCA9IHBhZCA+PiAyOworCisJLyogY2FsY3VsYXRlIG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzICovCisJcGFkID0gcGFkIC0gc2tiLT5sZW47CisJZGVzYy0+dHhfYXR0ciB8PSBwYWQgPDwgVFhfSFdfQVRUUl9PRlNUX0xBU1RfV09SRF9QQUQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJ0eF9maWxsX2hkcjogcGFkOiAlZCIsIHBhZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3R4X3NlbmRfcGFja2V0KHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmNvbnRyb2wpCit7CisKKwlzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyICpkZXNjOworCWludCBsZW47CisKKwkvKiBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGdldHRpbmcgbm9uLWFsaWduZWQgcGFja2V0cy4KKwkgICBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCBFQVBPTCBwYWNrZXRzIGZyb20gdGhlIHVzZXIgc3BhY2UuCisJICAgT3VyIERNQSByZXF1aXJlcyBwYWNrZXRzIHRvIGJlIGFsaWduZWQgb24gYSA0LWJ5dGUgYm91bmRhcnkuCisJKi8KKwlpZiAodW5saWtlbHkoKGxvbmcpc2tiLT5kYXRhICYgMHgwMykpIHsKKwkJaW50IG9mZnNldCA9ICg0IC0gKGxvbmcpc2tiLT5kYXRhKSAmIDB4MDM7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgInNrYiBvZmZzZXQgJWQiLCBvZmZzZXQpOworCisJCS8qIGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgc2tiIGNhbiBiZSB1c2VkICovCisJCWlmICghc2tiX2Nsb25lZChza2IpICYmIChza2JfdGFpbHJvb20oc2tiKSA+PSBvZmZzZXQpKSB7CisJCQl1bnNpZ25lZCBjaGFyICpzcmMgPSBza2ItPmRhdGE7CisKKwkJCS8qIGFsaWduIHRoZSBidWZmZXIgb24gYSA0LWJ5dGUgYm91bmRhcnkgKi8KKwkJCXNrYl9yZXNlcnZlKHNrYiwgb2Zmc2V0KTsKKwkJCW1lbW1vdmUoc2tiLT5kYXRhLCBzcmMsIHNrYi0+bGVuKTsKKwkJfSBlbHNlIHsKKwkJCXdsMTI3MV9pbmZvKCJObyBoYW5kbGVyLCBmaXhtZSEiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJbGVuID0gV0wxMjcxX1RYX0FMSUdOKHNrYi0+bGVuKTsKKworCS8qIHBlcmZvcm0gYSBmaXhlZCBhZGRyZXNzIGJsb2NrIHdyaXRlIHdpdGggdGhlIHBhY2tldCAqLworCXdsMTI3MV9zcGlfcmVnX3dyaXRlKHdsLCBXTDEyNzFfU0xWX01FTV9EQVRBLCBza2ItPmRhdGEsIGxlbiwgdHJ1ZSk7CisKKwkvKiB3cml0ZSBwYWNrZXQgbmV3IGNvdW50ZXIgaW50byB0aGUgd3JpdGUgYWNjZXNzIHJlZ2lzdGVyICovCisJd2wtPnR4X3BhY2tldHNfY291bnQrKzsKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIFdMMTI3MV9IT1NUX1dSX0FDQ0VTUywgd2wtPnR4X3BhY2tldHNfY291bnQpOworCisJZGVzYyA9IChzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyICopIHNrYi0+ZGF0YTsKKwl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJ0eCBpZCAldSBza2IgMHglcCBwYXlsb2FkICV1ICgldSB3b3JkcykiLAorCQkgICAgIGRlc2MtPmlkLCBza2IsIGxlbiwgZGVzYy0+bGVuZ3RoKTsKKworCXJldHVybiAwOworfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHdsLT5tdXRleCAqLworc3RhdGljIGludCB3bDEyNzFfdHhfZnJhbWUoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXUzMiBleHRyYSA9IDA7CisJaW50IHJldCA9IDA7CisJdTggaWR4OworCisJaWYgKCFza2IpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSAmJgorCSAgICBpbmZvLT5jb250cm9sLmh3X2tleS0+YWxnID09IEFMR19US0lQKQorCQlleHRyYSA9IFdMMTI3MV9US0lQX0lWX1NQQUNFOworCisJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7CisJCWlkeCA9IGluZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4OworCisJCS8qIEZJWE1FOiBkbyB3ZSBoYXZlIHRvIGRvIHRoaXMgaWYgd2UncmUgbm90IHVzaW5nIFdFUD8gKi8KKwkJaWYgKHVubGlrZWx5KHdsLT5kZWZhdWx0X2tleSAhPSBpZHgpKSB7CisJCQlyZXQgPSB3bDEyNzFfY21kX3NldF9kZWZhdWx0X3dlcF9rZXkod2wsIGlkeCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0ID0gd2wxMjcxX3R4X2FsbG9jYXRlKHdsLCBza2IsIGV4dHJhKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV90eF9maWxsX2hkcih3bCwgc2tiLCBleHRyYSwgaW5mbyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfdHhfc2VuZF9wYWNrZXQod2wsIHNrYiwgaW5mbyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHdsMTI3MV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2wxMjcxLCB0eF93b3JrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWJvb2wgd29rZW5fdXAgPSBmYWxzZTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikpCisJCWdvdG8gb3V0OworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2wtPnR4X3F1ZXVlKSkpIHsKKwkJaWYgKCF3b2tlbl91cCkgeworCQkJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0OworCQkJd29rZW5fdXAgPSB0cnVlOworCQl9CisKKwkJcmV0ID0gd2wxMjcxX3R4X2ZyYW1lKHdsLCBza2IpOworCQlpZiAocmV0ID09IC1FQlVTWSkgeworCQkJLyogZmlybXdhcmUgYnVmZmVyIGlzIGZ1bGwsIHN0b3AgcXVldWVzICovCisJCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJ0eF93b3JrOiBmdyBidWZmZXIgZnVsbCwgIgorCQkJCSAgICAgInN0b3AgcXVldWVzIik7CisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMod2wtPmh3KTsKKwkJCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gdHJ1ZTsKKwkJCXNrYl9xdWV1ZV9oZWFkKCZ3bC0+dHhfcXVldWUsIHNrYik7CisJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmICh3bC0+dHhfcXVldWVfc3RvcHBlZCkgeworCQkJLyogZmlybXdhcmUgYnVmZmVyIGhhcyBzcGFjZSwgcmVzdGFydCBxdWV1ZXMgKi8KKwkJCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwKKwkJCQkgICAgICJjb21wbGV0ZV9wYWNrZXQ6IHdha2luZyBxdWV1ZXMiKTsKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyh3bC0+aHcpOworCQkJd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSBmYWxzZTsKKwkJfQorCX0KKworb3V0OgorCWlmICh3b2tlbl91cCkKKwkJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CisKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV90eF9jb21wbGV0ZV9wYWNrZXQoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkJICAgICAgc3RydWN0IHdsMTI3MV90eF9od19yZXNfZGVzY3IgKnJlc3VsdCkKK3sKKworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUzMiBoZWFkZXJfbGVuOworCWludCBpZCA9IHJlc3VsdC0+aWQ7CisKKwkvKiBjaGVjayBmb3IgaWQgbGVnYWxpdHkgKi8KKwlpZiAoaWQgPj0gVFhfSFdfUkVTVUxUX1FVRVVFX0xFTiB8fCB3bC0+dHhfZnJhbWVzW2lkXSA9PSBOVUxMKSB7CisJCXdsMTI3MV93YXJuaW5nKCJUWCByZXN1bHQgaWxsZWdhbCBpZDogJWQiLCBpZCk7CisJCXJldHVybjsKKwl9CisKKwlza2IgPSB3bC0+dHhfZnJhbWVzW2lkXTsKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJLyogdXBkYXRlIHBhY2tldCBzdGF0dXMgKi8KKwlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkgeworCQlpZiAocmVzdWx0LT5zdGF0dXMgPT0gVFhfU1VDQ0VTUykKKwkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwkJaWYgKHJlc3VsdC0+c3RhdHVzICYgVFhfUkVUUllfRVhDRUVERUQpIHsKKwkJCS8qIEZJWE1FICovCisJCQkvKiBpbmZvLT5zdGF0dXMuZXhjZXNzaXZlX3JldHJpZXMgPSAxOyAqLworCQkJd2wtPnN0YXRzLmV4Y2Vzc2l2ZV9yZXRyaWVzKys7CisJCX0KKwl9CisKKwkvKiBGSVhNRSAqLworCS8qIGluZm8tPnN0YXR1cy5yZXRyeV9jb3VudCA9IHJlc3VsdC0+YWNrX2ZhaWx1cmVzOyAqLworCXdsLT5zdGF0cy5yZXRyeV9jb3VudCArPSByZXN1bHQtPmFja19mYWlsdXJlczsKKworCS8qIGdldCBoZWFkZXIgbGVuICovCisJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5ICYmCisJICAgIGluZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1RLSVApCisJCWhlYWRlcl9sZW4gPSBXTDEyNzFfVEtJUF9JVl9TUEFDRSArCisJCQlzaXplb2Yoc3RydWN0IHdsMTI3MV90eF9od19kZXNjcik7CisJZWxzZQorCQloZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAidHggc3RhdHVzIGlkICV1IHNrYiAweCVwIGZhaWx1cmVzICV1IHJhdGUgMHgleCIKKwkJICAgICAiIHN0YXR1cyAweCV4IiwKKwkJICAgICByZXN1bHQtPmlkLCBza2IsIHJlc3VsdC0+YWNrX2ZhaWx1cmVzLAorCQkgICAgIHJlc3VsdC0+cmF0ZV9jbGFzc19pbmRleCwgcmVzdWx0LT5zdGF0dXMpOworCisJLyogcmVtb3ZlIHByaXZhdGUgaGVhZGVyIGZyb20gcGFja2V0ICovCisJc2tiX3B1bGwoc2tiLCBoZWFkZXJfbGVuKTsKKworCS8qIHJldHVybiB0aGUgcGFja2V0IHRvIHRoZSBzdGFjayAqLworCWllZWU4MDIxMV90eF9zdGF0dXMod2wtPmh3LCBza2IpOworCXdsLT50eF9mcmFtZXNbcmVzdWx0LT5pZF0gPSBOVUxMOworfQorCisvKiBDYWxsZWQgdXBvbiByZWNlcHRpb24gb2YgYSBUWCBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KK3ZvaWQgd2wxMjcxX3R4X2NvbXBsZXRlKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgY291bnQpCit7CisJc3RydWN0IHdsMTI3MV9hY3hfbWVtX21hcCAqbWVtbWFwID0KKwkJKHN0cnVjdCB3bDEyNzFfYWN4X21lbV9tYXAgKil3bC0+dGFyZ2V0X21lbV9tYXA7CisJdTMyIGk7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJ0eF9jb21wbGV0ZSByZWNlaXZlZCwgcGFja2V0czogJWQiLCBjb3VudCk7CisKKwkvKiByZWFkIHRoZSB0eCByZXN1bHRzIGZyb20gdGhlIGNoaXBzZXQgKi8KKwl3bDEyNzFfc3BpX21lbV9yZWFkKHdsLCBtZW1tYXAtPnR4X3Jlc3VsdCwKKwkJCSAgICB3bC0+dHhfcmVzX2lmLCBzaXplb2YoKndsLT50eF9yZXNfaWYpKTsKKworCS8qIHZlcmlmeSB0aGF0IHRoZSByZXN1bHQgYnVmZmVyIGlzIG5vdCBnZXR0aW5nIG92ZXJydW4gKi8KKwlpZiAoY291bnQgPiBUWF9IV19SRVNVTFRfUVVFVUVfTEVOKSB7CisJCXdsMTI3MV93YXJuaW5nKCJUWCByZXN1bHQgb3ZlcmZsb3cgZnJvbSBjaGlwc2V0OiAlZCIsIGNvdW50KTsKKwkJY291bnQgPSBUWF9IV19SRVNVTFRfUVVFVUVfTEVOOworCX0KKworCS8qIHByb2Nlc3MgdGhlIHJlc3VsdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlzdHJ1Y3Qgd2wxMjcxX3R4X2h3X3Jlc19kZXNjciAqcmVzdWx0OworCQl1OCBvZmZzZXQgPSB3bC0+dHhfcmVzdWx0c19jb3VudCAmIFRYX0hXX1JFU1VMVF9RVUVVRV9MRU5fTUFTSzsKKworCQkvKiBwcm9jZXNzIHRoZSBwYWNrZXQgKi8KKwkJcmVzdWx0ID0gICYod2wtPnR4X3Jlc19pZi0+dHhfcmVzdWx0c19xdWV1ZVtvZmZzZXRdKTsKKwkJd2wxMjcxX3R4X2NvbXBsZXRlX3BhY2tldCh3bCwgcmVzdWx0KTsKKworCQl3bC0+dHhfcmVzdWx0c19jb3VudCsrOworCX0KKworCS8qIHdyaXRlIGhvc3QgY291bnRlciB0byBjaGlwc2V0ICh0byBhY2spICovCisJd2wxMjcxX21lbV93cml0ZTMyKHdsLCBtZW1tYXAtPnR4X3Jlc3VsdCArCisJCQkgICBvZmZzZXRvZihzdHJ1Y3Qgd2wxMjcxX3R4X2h3X3Jlc19pZiwKKwkJCQkgICAgdHhfcmVzdWx0X2hvc3RfY291bnRlciksCisJCQkgICB3bC0+dHhfcmVzX2lmLT50eF9yZXN1bHRfZndfY291bnRlcik7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2wtPm11dGV4ICovCit2b2lkIHdsMTI3MV90eF9mbHVzaChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKworCS8qIFRYIGZhaWx1cmUgKi8KKy8qIAljb250cm9sLT5mbGFncyA9IDA7IEZJWE1FICovCisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bC0+dHhfcXVldWUpKSkgeworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgImZsdXNoaW5nIHNrYiAweCVwIiwgc2tiKTsKKworCQlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUykpCisJCQkJY29udGludWU7CisKKwkJaWVlZTgwMjExX3R4X3N0YXR1cyh3bC0+aHcsIHNrYik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEZXX1RYX0NNUExUX0JMT0NLX1NJWkU7IGkrKykKKwkJaWYgKHdsLT50eF9mcmFtZXNbaV0gIT0gTlVMTCkgeworCQkJc2tiID0gd2wtPnR4X2ZyYW1lc1tpXTsKKwkJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwkJCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTKSkKKwkJCQljb250aW51ZTsKKworCQkJaWVlZTgwMjExX3R4X3N0YXR1cyh3bC0+aHcsIHNrYik7CisJCQl3bC0+dHhfZnJhbWVzW2ldID0gTlVMTDsKKwkJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNjE0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fV0wxMjcxX1RYX0hfXworI2RlZmluZSBfX1dMMTI3MV9UWF9IX18KKworI2RlZmluZSBUWF9IV19CTE9DS19TUEFSRSAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFRYX0hXX0JMT0NLX1NISUZUX0RJViAgICAgICAgICAgIDgKKworI2RlZmluZSBUWF9IV19NR01UX1BLVF9MSUZFVElNRV9UVSAgICAgICAyMDAwCisvKiBUaGUgY2hpcHNldCByZWZlcmVuY2UgZHJpdmVyIHN0YXRlcywgdGhhdCB0aGUgImFpZCIgdmFsdWUgMQorICogaXMgZm9yIGluZnJhLUJTUywgYnV0IGlzIHN0aWxsIGFsd2F5cyB1c2VkICovCisjZGVmaW5lIFRYX0hXX0RFRkFVTFRfQUlEICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBUWF9IV19BVFRSX1NBVkVfUkVUUklFUyAgICAgICAgICBCSVQoMCkKKyNkZWZpbmUgVFhfSFdfQVRUUl9IRUFERVJfUEFEICAgICAgICAgICAgQklUKDEpCisjZGVmaW5lIFRYX0hXX0FUVFJfU0VTU0lPTl9DT1VOVEVSICAgICAgIChCSVQoMikgfCBCSVQoMykgfCBCSVQoNCkpCisjZGVmaW5lIFRYX0hXX0FUVFJfUkFURV9QT0xJQ1kgICAgICAgICAgIChCSVQoNSkgfCBCSVQoNikgfCBCSVQoNykgfCBcCisJCQkJCSAgQklUKDgpIHwgQklUKDkpKQorI2RlZmluZSBUWF9IV19BVFRSX0xBU1RfV09SRF9QQUQgICAgICAgICAoQklUKDEwKSB8IEJJVCgxMSkpCisjZGVmaW5lIFRYX0hXX0FUVFJfVFhfQ01QTFRfUkVRICAgICAgICAgIEJJVCgxMikKKworI2RlZmluZSBUWF9IV19BVFRSX09GU1RfU0FWRV9SRVRSSUVTICAgICAwCisjZGVmaW5lIFRYX0hXX0FUVFJfT0ZTVF9IRUFERVJfUEFEICAgICAgIDEKKyNkZWZpbmUgVFhfSFdfQVRUUl9PRlNUX1NFU1NJT05fQ09VTlRFUiAgMgorI2RlZmluZSBUWF9IV19BVFRSX09GU1RfUkFURV9QT0xJQ1kgICAgICA1CisjZGVmaW5lIFRYX0hXX0FUVFJfT0ZTVF9MQVNUX1dPUkRfUEFEICAgIDEwCisjZGVmaW5lIFRYX0hXX0FUVFJfT0ZTVF9UWF9DTVBMVF9SRVEgICAgIDEyCisKKyNkZWZpbmUgVFhfSFdfUkVTVUxUX1FVRVVFX0xFTiAgICAgICAgICAgMTYKKyNkZWZpbmUgVFhfSFdfUkVTVUxUX1FVRVVFX0xFTl9NQVNLICAgICAgMHhmCisKKyNkZWZpbmUgV0wxMjcxX1RYX0FMSUdOX1RPIDQKKyNkZWZpbmUgV0wxMjcxX1RYX0FMSUdOKGxlbikgKCgobGVuKSArIFdMMTI3MV9UWF9BTElHTl9UTyAtIDEpICYgXAorCQkJICAgICB+KFdMMTI3MV9UWF9BTElHTl9UTyAtIDEpKQorI2RlZmluZSBXTDEyNzFfVEtJUF9JVl9TUEFDRSA0CisKK3N0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgeworCS8qIExlbmd0aCBvZiBwYWNrZXQgaW4gd29yZHMsIGluY2x1ZGluZyBkZXNjcmlwdG9yK2hlYWRlcitkYXRhICovCisJdTE2IGxlbmd0aDsKKwkvKiBOdW1iZXIgb2YgZXh0cmEgbWVtb3J5IGJsb2NrcyB0byBhbGxvY2F0ZSBmb3IgdGhpcyBwYWNrZXQgaW4KKwkgICBhZGRpdGlvbiB0byB0aGUgbnVtYmVyIG9mIGJsb2NrcyBkZXJpdmVkIGZyb20gdGhlIHBhY2tldCBsZW5ndGggKi8KKwl1OCBleHRyYV9tZW1fYmxvY2tzOworCS8qIFRvdGFsIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSB0aGUgaG9zdCBmb3IgdGhpcyBwYWNrZXQuCisJICAgTXVzdCBiZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGFjdHVhbCBibG9ja3MgbnVtYmVyIGFsbG9jYXRlZCBieQorCSAgIEhXISEgKi8KKwl1OCB0b3RhbF9tZW1fYmxvY2tzOworCS8qIERldmljZSB0aW1lIChpbiB1cykgd2hlbiB0aGUgcGFja2V0IGFycml2ZWQgdG8gdGhlIGRyaXZlciAqLworCXUzMiBzdGFydF90aW1lOworCS8qIE1heCBkZWxheSBpbiBUVXMgdW50aWwgdHJhbnNtaXNzaW9uLiBUaGUgbGFzdCBkZXZpY2UgdGltZSB0aGUKKwkgICBwYWNrZXQgY2FuIGJlIHRyYW5zbWl0dGVkIGlzOiBzdGFydFRpbWUrKDEwMjQqTGlmZVRpbWUpICovCisJdTE2IGxpZmVfdGltZTsKKwkvKiBCaXR3aXNlIGZpZWxkcyAtIHNlZSBUWF9BVFRSLi4uIGRlZmluaXRpb25zIGFib3ZlLiAqLworCXUxNiB0eF9hdHRyOworCS8qIFBhY2tldCBpZGVudGlmaWVyIHVzZWQgYWxzbyBpbiB0aGUgVHgtUmVzdWx0LiAqLworCXU4IGlkOworCS8qIFRoZSBwYWNrZXQgVElEIHZhbHVlIChhcyBVc2VyLVByaW9yaXR5KSAqLworCXU4IHRpZDsKKwkvKiBJZGVudGlmaWVyIG9mIHRoZSByZW1vdGUgU1RBIGluIElCU1MsIDEgaW4gaW5mcmEtQlNTICovCisJdTggYWlkOworCXU4IHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0gd2wxMjcxX3R4X2h3X3Jlc19zdGF0dXMgeworCVRYX1NVQ0NFU1MgICAgICAgICAgPSAwLAorCVRYX0hXX0VSUk9SICAgICAgICAgPSAxLAorCVRYX0RJU0FCTEVEICAgICAgICAgPSAyLAorCVRYX1JFVFJZX0VYQ0VFREVEICAgPSAzLAorCVRYX1RJTUVPVVQgICAgICAgICAgPSA0LAorCVRYX0tFWV9OT1RfRk9VTkQgICAgPSA1LAorCVRYX1BFRVJfTk9UX0ZPVU5EICAgPSA2LAorCVRYX1NFU1NJT05fTUlTTUFUQ0ggPSA3Cit9OworCitzdHJ1Y3Qgd2wxMjcxX3R4X2h3X3Jlc19kZXNjciB7CisJLyogUGFja2V0IElkZW50aWZpZXIgLSBzYW1lIHZhbHVlIHVzZWQgaW4gdGhlIFR4IGRlc2NyaXB0b3IuKi8KKwl1OCBpZDsKKwkvKiBUaGUgc3RhdHVzIG9mIHRoZSB0cmFuc21pc3Npb24sIGluZGljYXRpbmcgc3VjY2VzcyBvciBvbmUgb2YKKwkgICBzZXZlcmFsIHBvc3NpYmxlIHJlYXNvbnMgZm9yIGZhaWx1cmUuICovCisJdTggc3RhdHVzOworCS8qIFRvdGFsIGFpciBhY2Nlc3MgZHVyYXRpb24gaW5jbHVkaW5nIGFsbCByZXRyeXMgYW5kIG92ZXJoZWFkcy4qLworCXUxNiBtZWRpdW1fdXNhZ2U7CisJLyogVGhlIHRpbWUgcGFzc2VkIGZyb20gaG9zdCB4ZmVyIHRvIFR4LWNvbXBsZXRlLiovCisJdTMyIGZ3X2hhbmRsaW5nX3RpbWU7CisJLyogVG90YWwgbWVkaWEgZGVsYXkKKwkgICAoZnJvbSAxc3QgRURDQSBBSUZTIGNvdW50ZXIgdW50aWwgVFggQ29tcGxldGUpLiAqLworCXUzMiBtZWRpdW1fZGVsYXk7CisJLyogTFMtYnl0ZSBvZiBsYXN0IFRLSVAgc2VxLW51bSAoc2F2ZWQgcGVyIEFDIGZvciByZWNvdmVyeSkuICovCisJdTggbHNiX3NlY3VyaXR5X3NlcXVlbmNlX251bWJlcjsKKwkvKiBSZXRyeSBjb3VudCAtIG51bWJlciBvZiB0cmFuc21pc3Npb25zIHdpdGhvdXQgc3VjY2Vzc2Z1bCBBQ0suKi8KKwl1OCBhY2tfZmFpbHVyZXM7CisJLyogVGhlIHJhdGUgdGhhdCBzdWNjZWVkZWQgZ2V0dGluZyBBQ0sKKwkgICAoVmFsaWQgb25seSBpZiBzdGF0dXM9U1VDQ0VTUykuICovCisJdTggcmF0ZV9jbGFzc19pbmRleDsKKwkvKiBmb3IgNC1ieXRlIGFsaWdubWVudC4gKi8KKwl1OCBzcGFyZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3Qgd2wxMjcxX3R4X2h3X3Jlc19pZiB7CisJdTMyIHR4X3Jlc3VsdF9md19jb3VudGVyOworCXUzMiB0eF9yZXN1bHRfaG9zdF9jb3VudGVyOworCXN0cnVjdCB3bDEyNzFfdHhfaHdfcmVzX2Rlc2NyIHR4X3Jlc3VsdHNfcXVldWVbVFhfSFdfUkVTVUxUX1FVRVVFX0xFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwordm9pZCB3bDEyNzFfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCB3bDEyNzFfdHhfY29tcGxldGUoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBjb3VudCk7Cit2b2lkIHdsMTI3MV90eF9mbHVzaChzdHJ1Y3Qgd2wxMjcxICp3bCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTJ4eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTJ4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODY0MTQzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyeHguaAorKysgL2Rldi9udWxsCkBAIC0xLDQwOSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4Ci0gKgotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2lmbmRlZiBfX1dMMTJYWF9IX18KLSNkZWZpbmUgX19XTDEyWFhfSF9fCi0KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotI2RlZmluZSBEUklWRVJfTkFNRSAid2wxMnh4IgotI2RlZmluZSBEUklWRVJfUFJFRklYIERSSVZFUl9OQU1FICI6ICIKLQotZW51bSB7Ci0JREVCVUdfTk9ORQk9IDAsCi0JREVCVUdfSVJRCT0gQklUKDApLAotCURFQlVHX1NQSQk9IEJJVCgxKSwKLQlERUJVR19CT09UCT0gQklUKDIpLAotCURFQlVHX01BSUxCT1gJPSBCSVQoMyksCi0JREVCVUdfTkVUTElOSwk9IEJJVCg0KSwKLQlERUJVR19FVkVOVAk9IEJJVCg1KSwKLQlERUJVR19UWAk9IEJJVCg2KSwKLQlERUJVR19SWAk9IEJJVCg3KSwKLQlERUJVR19TQ0FOCT0gQklUKDgpLAotCURFQlVHX0NSWVBUCT0gQklUKDkpLAotCURFQlVHX1BTTQk9IEJJVCgxMCksCi0JREVCVUdfTUFDODAyMTEJPSBCSVQoMTEpLAotCURFQlVHX0NNRAk9IEJJVCgxMiksCi0JREVCVUdfQUNYCT0gQklUKDEzKSwKLQlERUJVR19BTEwJPSB+MCwKLX07Ci0KLSNkZWZpbmUgREVCVUdfTEVWRUwgKERFQlVHX05PTkUpCi0KLSNkZWZpbmUgREVCVUdfRFVNUF9MSU1JVCAxMDI0Ci0KLSNkZWZpbmUgd2wxMnh4X2Vycm9yKGZtdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9QUkVGSVggIkVSUk9SICIgZm10ICJcbiIsICMjYXJnKQotCi0jZGVmaW5lIHdsMTJ4eF93YXJuaW5nKGZtdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfUFJFRklYICJXQVJOSU5HICIgZm10ICJcbiIsICMjYXJnKQotCi0jZGVmaW5lIHdsMTJ4eF9ub3RpY2UoZm10LCBhcmcuLi4pIFwKLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKQotCi0jZGVmaW5lIHdsMTJ4eF9pbmZvKGZtdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX1BSRUZJWCBmbXQgIlxuIiwgIyNhcmcpCi0KLSNkZWZpbmUgd2wxMnh4X2RlYnVnKGxldmVsLCBmbXQsIGFyZy4uLikgXAotCWRvIHsgXAotCQlpZiAobGV2ZWwgJiBERUJVR19MRVZFTCkgXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX1BSRUZJWCBmbXQgIlxuIiwgIyNhcmcpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSB3bDEyeHhfZHVtcChsZXZlbCwgcHJlZml4LCBidWYsIGxlbikJXAotCWRvIHsgXAotCQlpZiAobGV2ZWwgJiBERUJVR19MRVZFTCkgXAotCQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgRFJJVkVSX1BSRUZJWCBwcmVmaXgsIFwKLQkJCQkgICAgICAgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwJXAotCQkJCSAgICAgICBidWYsCQkJCVwKLQkJCQkgICAgICAgbWluX3Qoc2l6ZV90LCBsZW4sIERFQlVHX0RVTVBfTElNSVQpLCBcCi0JCQkJICAgICAgIDApOwkJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSB3bDEyeHhfZHVtcF9hc2NpaShsZXZlbCwgcHJlZml4LCBidWYsIGxlbikJXAotCWRvIHsgXAotCQlpZiAobGV2ZWwgJiBERUJVR19MRVZFTCkgXAotCQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgRFJJVkVSX1BSRUZJWCBwcmVmaXgsIFwKLQkJCQkgICAgICAgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwJXAotCQkJCSAgICAgICBidWYsCQkJCVwKLQkJCQkgICAgICAgbWluX3Qoc2l6ZV90LCBsZW4sIERFQlVHX0RVTVBfTElNSVQpLCBcCi0JCQkJICAgICAgIHRydWUpOwkJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBXTDEyWFhfREVGQVVMVF9SWF9DT05GSUcgKENGR19VTklfRklMVEVSX0VOIHwJXAotCQkJCSAgQ0ZHX0JTU0lEX0ZJTFRFUl9FTikKLQotI2RlZmluZSBXTDEyWFhfREVGQVVMVF9SWF9GSUxURVIgKENGR19SWF9QUlNQX0VOIHwgIFwKLQkJCQkgIENGR19SWF9NR01UX0VOIHwgIFwKLQkJCQkgIENGR19SWF9EQVRBX0VOIHwgIFwKLQkJCQkgIENGR19SWF9DVExfRU4gfCAgIFwKLQkJCQkgIENGR19SWF9CQ05fRU4gfCAgIFwKLQkJCQkgIENGR19SWF9BVVRIX0VOIHwgIFwKLQkJCQkgIENGR19SWF9BU1NPQ19FTikKLQotCi1zdHJ1Y3QgYm9vdF9hdHRyIHsKLQl1MzIgcmFkaW9fdHlwZTsKLQl1OCBtYWNfY2xvY2s7Ci0JdTggYXJtX2Nsb2NrOwotCWludCBmaXJtd2FyZV9kZWJ1ZzsKLQl1MzIgbWlub3I7Ci0JdTMyIG1ham9yOwotCXUzMiBidWdmaXg7Ci19OwotCi1lbnVtIHdsMTJ4eF9zdGF0ZSB7Ci0JV0wxMlhYX1NUQVRFX09GRiwKLQlXTDEyWFhfU1RBVEVfT04sCi0JV0wxMlhYX1NUQVRFX1BMVCwKLX07Ci0KLWVudW0gd2wxMnh4X3BhcnRpdGlvbl90eXBlIHsKLQlQQVJUX0RPV04sCi0JUEFSVF9XT1JLLAotCVBBUlRfRFJQVywKLQotCVBBUlRfVEFCTEVfTEVOCi19OwotCi1zdHJ1Y3Qgd2wxMnh4X3BhcnRpdGlvbiB7Ci0JdTMyIHNpemU7Ci0JdTMyIHN0YXJ0OwotfTsKLQotc3RydWN0IHdsMTJ4eF9wYXJ0aXRpb25fc2V0IHsKLQlzdHJ1Y3Qgd2wxMnh4X3BhcnRpdGlvbiBtZW07Ci0Jc3RydWN0IHdsMTJ4eF9wYXJ0aXRpb24gcmVnOwotfTsKLQotc3RydWN0IHdsMTJ4eDsKLQotLyogRklYTUU6IEknbSBub3Qgc3VyZSBhYm91dCB0aGlzIHN0cnVjdHVyZSBuYW1lICovCi1zdHJ1Y3Qgd2wxMnh4X2NoaXAgewotCXUzMiBpZDsKLQotCWNvbnN0IGNoYXIgKmZ3X2ZpbGVuYW1lOwotCWNvbnN0IGNoYXIgKm52c19maWxlbmFtZTsKLQotCWNoYXIgZndfdmVyWzIxXTsKLQotCXVuc2lnbmVkIGludCBwb3dlcl9vbl9zbGVlcDsKLQlpbnQgaW50cl9jbWRfY29tcGxldGU7Ci0JaW50IGludHJfaW5pdF9jb21wbGV0ZTsKLQotCWludCAoKm9wX3VwbG9hZF9mdykoc3RydWN0IHdsMTJ4eCAqd2wpOwotCWludCAoKm9wX3VwbG9hZF9udnMpKHN0cnVjdCB3bDEyeHggKndsKTsKLQlpbnQgKCpvcF9ib290KShzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci0Jdm9pZCAoKm9wX3NldF9lY3B1X2N0cmwpKHN0cnVjdCB3bDEyeHggKndsLCB1MzIgZmxhZyk7Ci0Jdm9pZCAoKm9wX3RhcmdldF9lbmFibGVfaW50ZXJydXB0cykoc3RydWN0IHdsMTJ4eCAqd2wpOwotCWludCAoKm9wX2h3X2luaXQpKHN0cnVjdCB3bDEyeHggKndsKTsKLQlpbnQgKCpvcF9wbHRfaW5pdCkoc3RydWN0IHdsMTJ4eCAqd2wpOwotCi0Jc3RydWN0IHdsMTJ4eF9wYXJ0aXRpb25fc2V0ICpwX3RhYmxlOwotCWVudW0gd2wxMnh4X2FjeF9pbnRfcmVnICphY3hfcmVnX3RhYmxlOwotfTsKLQotc3RydWN0IHdsMTJ4eF9zdGF0cyB7Ci0Jc3RydWN0IGFjeF9zdGF0aXN0aWNzICpmd19zdGF0czsKLQl1bnNpZ25lZCBsb25nIGZ3X3N0YXRzX3VwZGF0ZTsKLQotCXVuc2lnbmVkIGludCByZXRyeV9jb3VudDsKLQl1bnNpZ25lZCBpbnQgZXhjZXNzaXZlX3JldHJpZXM7Ci19OwotCi1zdHJ1Y3Qgd2wxMnh4X2RlYnVnZnMgewotCXN0cnVjdCBkZW50cnkgKnJvb3RkaXI7Ci0Jc3RydWN0IGRlbnRyeSAqZndfc3RhdGlzdGljczsKLQotCXN0cnVjdCBkZW50cnkgKnR4X2ludGVybmFsX2Rlc2Nfb3ZlcmZsb3c7Ci0KLQlzdHJ1Y3QgZGVudHJ5ICpyeF9vdXRfb2ZfbWVtOwotCXN0cnVjdCBkZW50cnkgKnJ4X2hkcl9vdmVyZmxvdzsKLQlzdHJ1Y3QgZGVudHJ5ICpyeF9od19zdHVjazsKLQlzdHJ1Y3QgZGVudHJ5ICpyeF9kcm9wcGVkOwotCXN0cnVjdCBkZW50cnkgKnJ4X2Zjc19lcnI7Ci0Jc3RydWN0IGRlbnRyeSAqcnhfeGZyX2hpbnRfdHJpZzsKLQlzdHJ1Y3QgZGVudHJ5ICpyeF9wYXRoX3Jlc2V0OwotCXN0cnVjdCBkZW50cnkgKnJ4X3Jlc2V0X2NvdW50ZXI7Ci0KLQlzdHJ1Y3QgZGVudHJ5ICpkbWFfcnhfcmVxdWVzdGVkOwotCXN0cnVjdCBkZW50cnkgKmRtYV9yeF9lcnJvcnM7Ci0Jc3RydWN0IGRlbnRyeSAqZG1hX3R4X3JlcXVlc3RlZDsKLQlzdHJ1Y3QgZGVudHJ5ICpkbWFfdHhfZXJyb3JzOwotCi0Jc3RydWN0IGRlbnRyeSAqaXNyX2NtZF9jbXBsdDsKLQlzdHJ1Y3QgZGVudHJ5ICppc3JfZmlxczsKLQlzdHJ1Y3QgZGVudHJ5ICppc3JfcnhfaGVhZGVyczsKLQlzdHJ1Y3QgZGVudHJ5ICppc3JfcnhfbWVtX292ZXJmbG93OwotCXN0cnVjdCBkZW50cnkgKmlzcl9yeF9yZHlzOwotCXN0cnVjdCBkZW50cnkgKmlzcl9pcnFzOwotCXN0cnVjdCBkZW50cnkgKmlzcl90eF9wcm9jczsKLQlzdHJ1Y3QgZGVudHJ5ICppc3JfZGVjcnlwdF9kb25lOwotCXN0cnVjdCBkZW50cnkgKmlzcl9kbWEwX2RvbmU7Ci0Jc3RydWN0IGRlbnRyeSAqaXNyX2RtYTFfZG9uZTsKLQlzdHJ1Y3QgZGVudHJ5ICppc3JfdHhfZXhjaF9jb21wbGV0ZTsKLQlzdHJ1Y3QgZGVudHJ5ICppc3JfY29tbWFuZHM7Ci0Jc3RydWN0IGRlbnRyeSAqaXNyX3J4X3Byb2NzOwotCXN0cnVjdCBkZW50cnkgKmlzcl9od19wbV9tb2RlX2NoYW5nZXM7Ci0Jc3RydWN0IGRlbnRyeSAqaXNyX2hvc3RfYWNrbm93bGVkZ2VzOwotCXN0cnVjdCBkZW50cnkgKmlzcl9wY2lfcG07Ci0Jc3RydWN0IGRlbnRyeSAqaXNyX3dha2V1cHM7Ci0Jc3RydWN0IGRlbnRyeSAqaXNyX2xvd19yc3NpOwotCi0Jc3RydWN0IGRlbnRyeSAqd2VwX2FkZHJfa2V5X2NvdW50OwotCXN0cnVjdCBkZW50cnkgKndlcF9kZWZhdWx0X2tleV9jb3VudDsKLQkvKiBza2lwcGluZyB3ZXAucmVzZXJ2ZWQgKi8KLQlzdHJ1Y3QgZGVudHJ5ICp3ZXBfa2V5X25vdF9mb3VuZDsKLQlzdHJ1Y3QgZGVudHJ5ICp3ZXBfZGVjcnlwdF9mYWlsOwotCXN0cnVjdCBkZW50cnkgKndlcF9wYWNrZXRzOwotCXN0cnVjdCBkZW50cnkgKndlcF9pbnRlcnJ1cHQ7Ci0KLQlzdHJ1Y3QgZGVudHJ5ICpwd3JfcHNfZW50ZXI7Ci0Jc3RydWN0IGRlbnRyeSAqcHdyX2VscF9lbnRlcjsKLQlzdHJ1Y3QgZGVudHJ5ICpwd3JfbWlzc2luZ19iY25zOwotCXN0cnVjdCBkZW50cnkgKnB3cl93YWtlX29uX2hvc3Q7Ci0Jc3RydWN0IGRlbnRyeSAqcHdyX3dha2Vfb25fdGltZXJfZXhwOwotCXN0cnVjdCBkZW50cnkgKnB3cl90eF93aXRoX3BzOwotCXN0cnVjdCBkZW50cnkgKnB3cl90eF93aXRob3V0X3BzOwotCXN0cnVjdCBkZW50cnkgKnB3cl9yY3ZkX2JlYWNvbnM7Ci0Jc3RydWN0IGRlbnRyeSAqcHdyX3Bvd2VyX3NhdmVfb2ZmOwotCXN0cnVjdCBkZW50cnkgKnB3cl9lbmFibGVfcHM7Ci0Jc3RydWN0IGRlbnRyeSAqcHdyX2Rpc2FibGVfcHM7Ci0Jc3RydWN0IGRlbnRyeSAqcHdyX2ZpeF90c2ZfcHM7Ci0JLyogc2tpcHBpbmcgY29udF9taXNzX2JjbnNfc3ByZWFkIGZvciBub3cgKi8KLQlzdHJ1Y3QgZGVudHJ5ICpwd3JfcmN2ZF9hd2FrZV9iZWFjb25zOwotCi0Jc3RydWN0IGRlbnRyeSAqbWljX3J4X3BrdHM7Ci0Jc3RydWN0IGRlbnRyeSAqbWljX2NhbGNfZmFpbHVyZTsKLQotCXN0cnVjdCBkZW50cnkgKmFlc19lbmNyeXB0X2ZhaWw7Ci0Jc3RydWN0IGRlbnRyeSAqYWVzX2RlY3J5cHRfZmFpbDsKLQlzdHJ1Y3QgZGVudHJ5ICphZXNfZW5jcnlwdF9wYWNrZXRzOwotCXN0cnVjdCBkZW50cnkgKmFlc19kZWNyeXB0X3BhY2tldHM7Ci0Jc3RydWN0IGRlbnRyeSAqYWVzX2VuY3J5cHRfaW50ZXJydXB0OwotCXN0cnVjdCBkZW50cnkgKmFlc19kZWNyeXB0X2ludGVycnVwdDsKLQotCXN0cnVjdCBkZW50cnkgKmV2ZW50X2hlYXJ0X2JlYXQ7Ci0Jc3RydWN0IGRlbnRyeSAqZXZlbnRfY2FsaWJyYXRpb247Ci0Jc3RydWN0IGRlbnRyeSAqZXZlbnRfcnhfbWlzbWF0Y2g7Ci0Jc3RydWN0IGRlbnRyeSAqZXZlbnRfcnhfbWVtX2VtcHR5OwotCXN0cnVjdCBkZW50cnkgKmV2ZW50X3J4X3Bvb2w7Ci0Jc3RydWN0IGRlbnRyeSAqZXZlbnRfb29tX2xhdGU7Ci0Jc3RydWN0IGRlbnRyeSAqZXZlbnRfcGh5X3RyYW5zbWl0X2Vycm9yOwotCXN0cnVjdCBkZW50cnkgKmV2ZW50X3R4X3N0dWNrOwotCi0Jc3RydWN0IGRlbnRyeSAqcHNfcHNwb2xsX3RpbWVvdXRzOwotCXN0cnVjdCBkZW50cnkgKnBzX3Vwc2RfdGltZW91dHM7Ci0Jc3RydWN0IGRlbnRyeSAqcHNfdXBzZF9tYXhfc3B0aW1lOwotCXN0cnVjdCBkZW50cnkgKnBzX3Vwc2RfbWF4X2FwdHVybjsKLQlzdHJ1Y3QgZGVudHJ5ICpwc19wc3BvbGxfbWF4X2FwdHVybjsKLQlzdHJ1Y3QgZGVudHJ5ICpwc19wc3BvbGxfdXRpbGl6YXRpb247Ci0Jc3RydWN0IGRlbnRyeSAqcHNfdXBzZF91dGlsaXphdGlvbjsKLQotCXN0cnVjdCBkZW50cnkgKnJ4cGlwZV9yeF9wcmVwX2JlYWNvbl9kcm9wOwotCXN0cnVjdCBkZW50cnkgKnJ4cGlwZV9kZXNjcl9ob3N0X2ludF90cmlnX3J4X2RhdGE7Ci0Jc3RydWN0IGRlbnRyeSAqcnhwaXBlX2JlYWNvbl9idWZmZXJfdGhyZXNfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOwotCXN0cnVjdCBkZW50cnkgKnJ4cGlwZV9taXNzZWRfYmVhY29uX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKLQlzdHJ1Y3QgZGVudHJ5ICpyeHBpcGVfdHhfeGZyX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKLQotCXN0cnVjdCBkZW50cnkgKnR4X3F1ZXVlX2xlbjsKLQotCXN0cnVjdCBkZW50cnkgKnJldHJ5X2NvdW50OwotCXN0cnVjdCBkZW50cnkgKmV4Y2Vzc2l2ZV9yZXRyaWVzOwotfTsKLQotc3RydWN0IHdsMTJ4eCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0JYm9vbCBtYWM4MDIxMV9yZWdpc3RlcmVkOwotCi0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKLQotCXZvaWQgKCpzZXRfcG93ZXIpKGJvb2wgZW5hYmxlKTsKLQlpbnQgaXJxOwotCi0JZW51bSB3bDEyeHhfc3RhdGUgc3RhdGU7Ci0Jc3RydWN0IG11dGV4IG11dGV4OwotCi0JaW50IHBoeXNpY2FsX21lbV9hZGRyOwotCWludCBwaHlzaWNhbF9yZWdfYWRkcjsKLQlpbnQgdmlydHVhbF9tZW1fYWRkcjsKLQlpbnQgdmlydHVhbF9yZWdfYWRkcjsKLQotCXN0cnVjdCB3bDEyeHhfY2hpcCBjaGlwOwotCi0JaW50IGNtZF9ib3hfYWRkcjsKLQlpbnQgZXZlbnRfYm94X2FkZHI7Ci0Jc3RydWN0IGJvb3RfYXR0ciBib290X2F0dHI7Ci0KLQl1OCAqZnc7Ci0Jc2l6ZV90IGZ3X2xlbjsKLQl1OCAqbnZzOwotCXNpemVfdCBudnNfbGVuOwotCi0JdTggYnNzaWRbRVRIX0FMRU5dOwotCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKLQl1OCBic3NfdHlwZTsKLQl1OCBsaXN0ZW5faW50OwotCWludCBjaGFubmVsOwotCi0Jdm9pZCAqdGFyZ2V0X21lbV9tYXA7Ci0Jc3RydWN0IGFjeF9kYXRhX3BhdGhfcGFyYW1zX3Jlc3AgKmRhdGFfcGF0aDsKLQotCS8qIE51bWJlciBvZiBUWCBwYWNrZXRzIHRyYW5zZmVycmVkIHRvIHRoZSBGVywgbW9kdWxvIDE2ICovCi0JdTMyIGRhdGFfaW5fY291bnQ7Ci0KLQkvKiBGcmFtZXMgc2NoZWR1bGVkIGZvciB0cmFuc21pc3Npb24sIG5vdCBoYW5kbGVkIHlldCAqLwotCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWU7Ci0JYm9vbCB0eF9xdWV1ZV9zdG9wcGVkOwotCi0Jc3RydWN0IHdvcmtfc3RydWN0IHR4X3dvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGZpbHRlcl93b3JrOwotCi0JLyogUGVuZGluZyBUWCBmcmFtZXMgKi8KLQlzdHJ1Y3Qgc2tfYnVmZiAqdHhfZnJhbWVzWzE2XTsKLQotCS8qCi0JICogSW5kZXggcG9pbnRpbmcgdG8gdGhlIG5leHQgVFggY29tcGxldGUgZW50cnkKLQkgKiBpbiB0aGUgY3ljbGljIFhUIGNvbXBsZXRlIGFycmF5IHdlIGdldCBmcm9tCi0JICogdGhlIEZXLgotCSAqLwotCXUzMiBuZXh0X3R4X2NvbXBsZXRlOwotCi0JLyogRlcgUnggY291bnRlciAqLwotCXUzMiByeF9jb3VudGVyOwotCi0JLyogUnggZnJhbWVzIGhhbmRsZWQgKi8KLQl1MzIgcnhfaGFuZGxlZDsKLQotCS8qIEN1cnJlbnQgZG91YmxlIGJ1ZmZlciAqLwotCXUzMiByeF9jdXJyZW50X2J1ZmZlcjsKLQl1MzIgcnhfbGFzdF9pZDsKLQotCS8qIFRoZSB0YXJnZXQgaW50ZXJydXB0IG1hc2sgKi8KLQl1MzIgaW50cl9tYXNrOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBpcnFfd29yazsKLQotCS8qIFRoZSBtYm94IGV2ZW50IG1hc2sgKi8KLQl1MzIgZXZlbnRfbWFzazsKLQotCS8qIE1haWxib3ggcG9pbnRlcnMgKi8KLQl1MzIgbWJveF9wdHJbMl07Ci0KLQkvKiBBcmUgd2UgY3VycmVudGx5IHNjYW5uaW5nICovCi0JYm9vbCBzY2FubmluZzsKLQotCS8qIE91ciBhc3NvY2lhdGlvbiBJRCAqLwotCXUxNiBhaWQ7Ci0KLQkvKiBEZWZhdWx0IGtleSAoZm9yIFdFUCkgKi8KLQl1MzIgZGVmYXVsdF9rZXk7Ci0KLQl1bnNpZ25lZCBpbnQgdHhfbWdtdF9mcm1fcmF0ZTsKLQl1bnNpZ25lZCBpbnQgdHhfbWdtdF9mcm1fbW9kOwotCi0JdW5zaWduZWQgaW50IHJ4X2NvbmZpZzsKLQl1bnNpZ25lZCBpbnQgcnhfZmlsdGVyOwotCi0JLyogaXMgZmlybXdhcmUgaW4gZWxwIG1vZGUgKi8KLQlib29sIGVscDsKLQotCS8qIHdlIGNhbiBiZSBpbiBwc20sIGJ1dCBub3QgaW4gZWxwLCB3ZSBoYXZlIHRvIGRpZmZlcmVudGlhdGUgKi8KLQlib29sIHBzbTsKLQotCS8qIFBTTSBtb2RlIHJlcXVlc3RlZCAqLwotCWJvb2wgcHNtX3JlcXVlc3RlZDsKLQotCS8qIGluIGRCbSAqLwotCWludCBwb3dlcl9sZXZlbDsKLQotCXN0cnVjdCB3bDEyeHhfc3RhdHMgc3RhdHM7Ci0Jc3RydWN0IHdsMTJ4eF9kZWJ1Z2ZzIGRlYnVnZnM7Ci19OwotCi1pbnQgd2wxMnh4X3BsdF9zdGFydChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X3BsdF9zdG9wKHN0cnVjdCB3bDEyeHggKndsKTsKLQotI2RlZmluZSBERUZBVUxUX0hXX0dFTl9NT0RVTEFUSU9OX1RZUEUgICAgQ0NLX0xPTkcgLyogTG9uZyBQcmVhbWJsZSAqLwotI2RlZmluZSBERUZBVUxUX0hXX0dFTl9UWF9SQVRFICAgICAgICAgIFJBVEVfMk1CUFMKLSNkZWZpbmUgSk9JTl9USU1FT1VUIDUwMDAgLyogNTAwMCBtaWxsaXNlY29uZHMgdG8gam9pbiAqLwotCi0jZGVmaW5lIFdMMTJYWF9ERUZBVUxUX1BPV0VSX0xFVkVMIDIwCi0KLSNkZWZpbmUgV0wxMlhYX1RYX1FVRVVFX01BWF9MRU5HVEggMjAKLQotLyogRGlmZmVyZW50IGNoaXBzIG5lZWQgZGlmZmVyZW50IHNsZWVwIHRpbWVzIGFmdGVyIHBvd2VyIG9uLiAgV0wxMjcxIG5lZWRzCi0gKiAyMDBtcywgV0wxMjUxIG5lZWRzIG9ubHkgMTBtcy4gIEJ5IGRlZmF1bHQgd2UgdXNlIDIwMG1zLCBidXQgYXMgc29vbiBhcyB3ZQotICoga25vdyB0aGUgY2hpcCBJRCwgd2UgY2hhbmdlIHRoZSBzbGVlcCB2YWx1ZSBpbiB0aGUgd2wxMnh4IGNoaXAgc3RydWN0dXJlLAotICogc28gaW4gc3Vic2VxdWVudCBwb3dlciBvbnMsIHdlIGRvbid0IHdhc3RlIG1vcmUgdGltZSB0aGVuIG5lZWRlZC4gICovCi0jZGVmaW5lIFdMMTJYWF9ERUZBVUxUX1BPV0VSX09OX1NMRUVQIDIwMAotCi0jZGVmaW5lIENISVBfSURfMTI1MV9QRzEwCSAgICAgICAgICAgKDB4NzAxMDEwMSkKLSNkZWZpbmUgQ0hJUF9JRF8xMjUxX1BHMTEJICAgICAgICAgICAoMHg3MDIwMTAxKQotI2RlZmluZSBDSElQX0lEXzEyNTFfUEcxMgkgICAgICAgICAgICgweDcwMzAxMDEpCi0jZGVmaW5lIENISVBfSURfMTI3MV9QRzEwCSAgICAgICAgICAgKDB4NDAzMDEwMSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCmluZGV4IGUzZTk2YmIuLjRmMWUwY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCkBAIC0xMzMzLDcgKzEzMzMsOCBAQAogICoJICAgIDEgLSBDb3VsZCBub3QgdHJhbnNtaXQgKGRldl9xdWV1ZV94bWl0IHdpbGwgcXVldWUgaXQpCiAgKgkJYW5kIHRyeSB0byBzZW50IGl0IGxhdGVyCiAgKi8KLXN0YXRpYyBpbnQgd2wzNTAxX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHdsMzUwMV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGVuYWJsZWQsIHJjOwogCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMzQ4LDcgKzEzNDksNiBAQAogCWlmIChyYykgewogCQkrK2Rldi0+c3RhdHMudHhfZHJvcHBlZDsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlyYyA9IE5FVERFVl9UWF9PSzsKIAl9IGVsc2UgewogCQkrK2Rldi0+c3RhdHMudHhfcGFja2V0czsKIAkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKQEAgLTEzNTgsNyArMTM1OCw3IEBACiAJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoaXMtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCB3bDM1MDFfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwppbmRleCA0NDMwYjhkOS4uYmM4MTk3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKQEAgLTc3OSw3ICs3NzksOCBAQAogCQkJCShsbGMrc25hcCt0eXBlK3BheWxvYWQpCiAJCXpkCQkxIG51bGwgYnl0ZSwgemQxMjAxIHBhY2tldCB0eXBlCiAgKi8KLXN0YXRpYyBpbnQgemQxMjAxX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHpkMTIwMV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHpkMTIwMSAqemQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGNoYXIgKnR4YnVmID0gemQtPnR4ZGF0YTsKQEAgLTc4OSw3ICs3OTAsNyBAQAogCWlmICghemQtPm1hY19lbmFibGVkIHx8IHpkLT5tb25pdG9yKSB7CiAJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIApAQCAtODI2LDcgKzgyNyw3IEBACiAJfQogCWtmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgemQxMjAxX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYwppbmRleCAyYzgxM2Q4Li41ZTExMGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCkBAIC0xMjc4LDExICsxMjc4LDExIEBACiAJb3RoZXJfbGVkID0gY2hpcC0+bGlua19sZWQgPT0gTEVEMSA/IExFRDIgOiBMRUQxOwogCiAJc3dpdGNoIChzdGF0dXMpIHsKLQljYXNlIExFRF9PRkY6CisJY2FzZSBaRF9MRURfT0ZGOgogCQlpb3JlcXNbMF0udmFsdWUgPSBGV19MSU5LX09GRjsKIAkJaW9yZXFzWzFdLnZhbHVlID0gdlsxXSAmIH4oTEVEMXxMRUQyKTsKIAkJYnJlYWs7Ci0JY2FzZSBMRURfU0NBTk5JTkc6CisJY2FzZSBaRF9MRURfU0NBTk5JTkc6CiAJCWlvcmVxc1swXS52YWx1ZSA9IEZXX0xJTktfT0ZGOwogCQlpb3JlcXNbMV0udmFsdWUgPSB2WzFdICYgfm90aGVyX2xlZDsKIAkJaWYgKGdldF9zZWNvbmRzKCkgJSAzID09IDApIHsKQEAgLTEyOTEsNyArMTI5MSw3IEBACiAJCQlpb3JlcXNbMV0udmFsdWUgfD0gY2hpcC0+bGlua19sZWQ7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBMRURfQVNTT0NJQVRFRDoKKwljYXNlIFpEX0xFRF9BU1NPQ0lBVEVEOgogCQlpb3JlcXNbMF0udmFsdWUgPSBGV19MSU5LX1RYOwogCQlpb3JlcXNbMV0udmFsdWUgPSB2WzFdICYgfm90aGVyX2xlZDsKIAkJaW9yZXFzWzFdLnZhbHVlIHw9IGNoaXAtPmxpbmtfbGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCmluZGV4IGVlNDI3NTEuLjY3OGMxMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKQEAgLTg5Nyw5ICs4OTcsOSBAQAogaW50IHpkX2NoaXBfdW5sb2NrX3BoeV9yZWdzKHN0cnVjdCB6ZF9jaGlwICpjaGlwKTsKIAogZW51bSBsZWRfc3RhdHVzIHsKLQlMRURfT0ZGID0gMCwKLQlMRURfU0NBTk5JTkcgPSAxLAotCUxFRF9BU1NPQ0lBVEVEID0gMiwKKwlaRF9MRURfT0ZGID0gMCwKKwlaRF9MRURfU0NBTk5JTkcgPSAxLAorCVpEX0xFRF9BU1NPQ0lBVEVEID0gMiwKIH07CiAKIGludCB6ZF9jaGlwX2NvbnRyb2xfbGVkcyhzdHJ1Y3QgemRfY2hpcCAqY2hpcCwgZW51bSBsZWRfc3RhdHVzIHN0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCmluZGV4IDNiZDNjNzcuLjZkNjY2MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCkBAIC03MTEsNyArNzExLDggQEAKIAogCW1lbWNweShza2JfcHV0KHNrYiwgbGVuZ3RoKSwgYnVmZmVyLCBsZW5ndGgpOwogCi0JaWVlZTgwMjExX3J4X2lycXNhZmUoaHcsIHNrYiwgJnN0YXRzKTsKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0cywgc2l6ZW9mKHN0YXRzKSk7CisJaWVlZTgwMjExX3J4X2lycXNhZmUoaHcsIHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc5NSwxOCArNzk2LDQwIEBACiAJCWRldl9lcnIoemRfbWFjX2RldihtYWMpLCAic2V0X3J4X2ZpbHRlcl9oYW5kbGVyIGVycm9yICVkXG4iLCByKTsKIH0KIAorc3RhdGljIHU2NCB6ZF9vcF9wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCit7CisJc3RydWN0IHpkX21hYyAqbWFjID0gemRfaHdfbWFjKGh3KTsKKwlzdHJ1Y3QgemRfbWNfaGFzaCBoYXNoOworCWludCBpOworCisJemRfbWNfY2xlYXIoJmhhc2gpOworCisJZm9yIChpID0gMDsgaSA8IG1jX2NvdW50OyBpKyspIHsKKwkJaWYgKCFtY2xpc3QpCisJCQlicmVhazsKKwkJZGV2X2RiZ19mKHpkX21hY19kZXYobWFjKSwgIm1jIGFkZHIgJXBNXG4iLCBtY2xpc3QtPmRtaV9hZGRyKTsKKwkJemRfbWNfYWRkX2FkZHIoJmhhc2gsIG1jbGlzdC0+ZG1pX2FkZHIpOworCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7CisJfQorCisJcmV0dXJuIGhhc2gubG93IHwgKCh1NjQpaGFzaC5oaWdoIDw8IDMyKTsKK30KKwogI2RlZmluZSBTVVBQT1JURURfRklGX0ZMQUdTIFwKIAkoRklGX1BST01JU0NfSU5fQlNTIHwgRklGX0FMTE1VTFRJIHwgRklGX0ZDU0ZBSUwgfCBGSUZfQ09OVFJPTCB8IFwKIAlGSUZfT1RIRVJfQlNTIHwgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCiBzdGF0aWMgdm9pZCB6ZF9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCQl1bnNpZ25lZCBpbnQgKm5ld19mbGFncywKLQkJCWludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpCisJCQl1NjQgbXVsdGljYXN0KQogewotCXN0cnVjdCB6ZF9tY19oYXNoIGhhc2g7CisJc3RydWN0IHpkX21jX2hhc2ggaGFzaCA9IHsKKwkJLmxvdyA9IG11bHRpY2FzdCwKKwkJLmhpZ2ggPSBtdWx0aWNhc3QgPj4gMzIsCisJfTsKIAlzdHJ1Y3QgemRfbWFjICptYWMgPSB6ZF9od19tYWMoaHcpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7CiAKIAkvKiBPbmx5IGRlYWwgd2l0aCBzdXBwb3J0ZWQgZmxhZ3MgKi8KIAljaGFuZ2VkX2ZsYWdzICY9IFNVUFBPUlRFRF9GSUZfRkxBR1M7CkBAIC04MTgsMjUgKzg0MSwxNiBAQAogCWlmICghY2hhbmdlZF9mbGFncykKIAkJcmV0dXJuOwogCi0JaWYgKCpuZXdfZmxhZ3MgJiAoRklGX1BST01JU0NfSU5fQlNTIHwgRklGX0FMTE1VTFRJKSkgeworCWlmICgqbmV3X2ZsYWdzICYgKEZJRl9QUk9NSVNDX0lOX0JTUyB8IEZJRl9BTExNVUxUSSkpCiAJCXpkX21jX2FkZF9hbGwoJmhhc2gpOwotCX0gZWxzZSB7Ci0JCXpkX21jX2NsZWFyKCZoYXNoKTsKLQkJZm9yIChpID0gMDsgaSA8IG1jX2NvdW50OyBpKyspIHsKLQkJCWlmICghbWNsaXN0KQotCQkJCWJyZWFrOwotCQkJZGV2X2RiZ19mKHpkX21hY19kZXYobWFjKSwgIm1jIGFkZHIgJXBNXG4iLAotCQkJCSAgbWNsaXN0LT5kbWlfYWRkcik7Ci0JCQl6ZF9tY19hZGRfYWRkcigmaGFzaCwgbWNsaXN0LT5kbWlfYWRkcik7Ci0JCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7Ci0JCX0KLQl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CiAJbWFjLT5wYXNzX2ZhaWxlZF9mY3MgPSAhISgqbmV3X2ZsYWdzICYgRklGX0ZDU0ZBSUwpOwogCW1hYy0+cGFzc19jdHJsID0gISEoKm5ld19mbGFncyAmIEZJRl9DT05UUk9MKTsKIAltYWMtPm11bHRpY2FzdF9oYXNoID0gaGFzaDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKworCS8qIFhYWDogdGhlc2UgY2FuIGJlIGNhbGxlZCBoZXJlIG5vdywgY2FuIHNsZWVwIG5vdyEgKi8KIAlxdWV1ZV93b3JrKHpkX3dvcmtxdWV1ZSwgJm1hYy0+c2V0X211bHRpY2FzdF9oYXNoX3dvcmspOwogCiAJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkKQEAgLTkzOSw2ICs5NTMsNyBAQAogCS5hZGRfaW50ZXJmYWNlCQk9IHpkX29wX2FkZF9pbnRlcmZhY2UsCiAJLnJlbW92ZV9pbnRlcmZhY2UJPSB6ZF9vcF9yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IHpkX29wX2NvbmZpZywKKwkucHJlcGFyZV9tdWx0aWNhc3QJPSB6ZF9vcF9wcmVwYXJlX211bHRpY2FzdCwKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHpkX29wX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSB6ZF9vcF9ic3NfaW5mb19jaGFuZ2VkLAogCS5nZXRfdHNmCQk9IHpkX29wX2dldF90c2YsCkBAIC0xMDEyLDcgKzEwMjcsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmbWFjLT5sb2NrKTsKIAogCXIgPSB6ZF9jaGlwX2NvbnRyb2xfbGVkcyhjaGlwLAotCQkgICAgICAgICAgICAgICAgIGlzX2Fzc29jaWF0ZWQgPyBMRURfQVNTT0NJQVRFRCA6IExFRF9TQ0FOTklORyk7CisJCSAgICAgICAgICAgICAgICAgaXNfYXNzb2NpYXRlZCA/IFpEX0xFRF9BU1NPQ0lBVEVEIDogWkRfTEVEX1NDQU5OSU5HKTsKIAlpZiAocikKIAkJZGV2X2RiZ19mKHpkX21hY19kZXYobWFjKSwgInpkX2NoaXBfY29udHJvbF9sZWRzIGVycm9yICVkXG4iLCByKTsKIApAQCAtMTAzNyw1ICsxMDUyLDUgQEAKIAlkZXZfZGJnX2YoemRfbWFjX2RldihtYWMpLCAiXG4iKTsKIAljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUoemRfd29ya3F1ZXVlLAogCQkmbWFjLT5ob3VzZWtlZXBpbmcubGlua19sZWRfd29yayk7Ci0JemRfY2hpcF9jb250cm9sX2xlZHMoJm1hYy0+Y2hpcCwgTEVEX09GRik7CisJemRfY2hpcF9jb250cm9sX2xlZHMoJm1hYy0+Y2hpcCwgWkRfTEVEX09GRik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCmluZGV4IDBlNmU0NDYuLjM4Njg4ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCkBAIC0zNiw1OCArMzYsNjAgQEAKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9pZHNbXSA9IHsKIAkvKiBaRDEyMTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwMTA1LCAweDE0NWYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDAxKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQwMiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MDcpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDA5KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDA3OWIsIDB4MDA0YSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDYwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCiAJeyBVU0JfREVWSUNFKDB4MGFjZSwgMHgxMjExKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAogCXsgVVNCX0RFVklDRSgweDBhY2UsIDB4YTIxMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMjZmLCAweGEwMDYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCi0JeyBVU0JfREVWSUNFKDB4Njg5MSwgMHhhNzI3KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcwYyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjNiLCAweDE2MzApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4MGIzYiwgMHg1NjMwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAogCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4OTA3MSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDkwNzUpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCi0JeyBVU0JfREVWSUNFKDB4MTU3ZSwgMHgzMDBiKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAotCXsgVVNCX0RFVklDRSgweDA3OWIsIDB4MDA0YSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDIwMDApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCi0JeyBVU0JfREVWSUNFKDB4MTU3ZSwgMHgzMjA0KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAotCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQwMiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwYjNiLCAweDU2MzApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCi0JeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzBjKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAotCXsgVVNCX0RFVklDRSgweDE0MzUsIDB4MDcxMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MDkpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCi0JeyBVU0JfREVWSUNFKDB4MGIzYiwgMHgxNjMwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAotCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQwMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNGVhLCAweGFiMTMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCi0JeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDFlKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAotCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQwNyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxMjZmLCAweGEwMDYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCiAJeyBVU0JfREVWSUNFKDB4MTI5YiwgMHgxNjY2KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAxZSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDM1LCAweDA3MTEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4MTRlYSwgMHhhYjEzKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAogCXsgVVNCX0RFVklDRSgweDE1N2UsIDB4MzAwYSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwMTA1LCAweDE0NWYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4MTU3ZSwgMHgzMDBiKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDE1N2UsIDB4MzIwNCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDIwMDApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4Njg5MSwgMHhhNzI3KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAogCS8qIFpEMTIxMUIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNTRjLCAweDAyNTcpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDBhY2UsIDB4MTIxNSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MGFjZSwgMHhiMjE1KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNTdlLCAweDMwMGQpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDA3OWIsIDB4MDA2MiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MTU4MiwgMHg2MDAzKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDcwNWMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4ZTUwMyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhlNTA2KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDQ1MDUpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MTIzNiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDI0KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MGYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcxYiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDEwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwYmFmLCAweDAxMjEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQxMiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDEzKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwMDUzLCAweDUzMDEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAogCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDBkYSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MjAxOSwgMHg1MzAzKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMjliLCAweDE2NjcpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAxYSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDBhKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDEyMzYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAogCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MTIzNyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdmYSwgMHgxMTk2KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMzYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4NzA1YyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MDU0YywgMHgwMjU3KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MGEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQwZiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDEwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MTIpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQxMyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MDc5YiwgMHgwMDYyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDYwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDA3ZmEsIDB4MTE5NiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg0NTA1KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGU1MDEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4ZTUwMyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhlNTA2KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYWNlLCAweDEyMTUpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDBhY2UsIDB4YjIxNSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzFiKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYmFmLCAweDAxMjEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAxYSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDM2KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxMjliLCAweDE2NjcpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAyNCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MTU3ZSwgMHgzMDBkKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNTgyLCAweDYwMDMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDIwMTksIDB4NTMwMyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCiAJLyogIkRyaXZlcmxlc3MiIGRldmljZXMgdGhhdCBuZWVkIGVqZWN0aW5nICovCiAJeyBVU0JfREVWSUNFKDB4MGFjZSwgMHgyMDExKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX0lOU1RBTExFUiB9LAogCXsgVVNCX0RFVklDRSgweDBhY2UsIDB4MjBmZiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9JTlNUQUxMRVIgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKaW5kZXggOGQ4OGRhZS4uYmFhMDUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKQEAgLTUxLDcgKzUxLDcgQEAKICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL21lbW9yeS5oPgogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvZ3JhbnRfdGFibGUuaD4KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyB4ZW5uZXRfZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHhlbm5ldF9ldGh0b29sX29wczsKIAogc3RydWN0IG5ldGZyb250X2NiIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTU1OCwxMiArNTU4LDEyIEBACiAKIAlzcGluX3VubG9ja19pcnEoJm5wLT50eF9sb2NrKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKICBkcm9wOgogCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IHhlbm5ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTYyNyw3ICsxNjI3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgeGVubmV0X2V0aHRvb2xfb3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgeGVubmV0X2V0aHRvb2xfb3BzID0KIHsKIAkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9jc3VtLAogCS5zZXRfc2cgPSB4ZW5uZXRfc2V0X3NnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMgYi9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzIyNzgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMKQEAgLTAsMCArMSwxMDQwIEBACisvKgorICogWGlsaW54IEVtYWNMaXRlIExpbnV4IGRyaXZlciBmb3IgdGhlIFhpbGlueCBFdGhlcm5ldCBNQUMgTGl0ZSBkZXZpY2UuCisgKgorICogVGhpcyBpcyBhIG5ldyBmbGF0IGRyaXZlciB3aGljaCBpcyBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgZW1hY19saXRlCisgKiBkcml2ZXIgZnJvbSBKb2huIFdpbGxpYW1zIDxqb2huLndpbGxpYW1zQHBldGFsb2dpeC5jb20+LgorICoKKyAqIDIwMDctMjAwOSAoYykgWGlsaW54LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ4aWxpbnhfZW1hY2xpdGUiCisKKy8qIFJlZ2lzdGVyIG9mZnNldHMgZm9yIHRoZSBFbWFjTGl0ZSBDb3JlICovCisjZGVmaW5lIFhFTF9UWEJVRkZfT0ZGU0VUIAkweDAJCS8qIFRyYW5zbWl0IEJ1ZmZlciAqLworI2RlZmluZSBYRUxfR0lFUl9PRkZTRVQJCTB4MDdGOAkJLyogR0lFIFJlZ2lzdGVyICovCisjZGVmaW5lIFhFTF9UU1JfT0ZGU0VUCQkweDA3RkMJCS8qIFR4IHN0YXR1cyAqLworI2RlZmluZSBYRUxfVFBMUl9PRkZTRVQJCTB4MDdGNAkJLyogVHggcGFja2V0IGxlbmd0aCAqLworCisjZGVmaW5lIFhFTF9SWEJVRkZfT0ZGU0VUCTB4MTAwMAkJLyogUmVjZWl2ZSBCdWZmZXIgKi8KKyNkZWZpbmUgWEVMX1JQTFJfT0ZGU0VUCQkweDEwMEMJCS8qIFJ4IHBhY2tldCBsZW5ndGggKi8KKyNkZWZpbmUgWEVMX1JTUl9PRkZTRVQJCTB4MTdGQwkJLyogUnggc3RhdHVzICovCisKKyNkZWZpbmUgWEVMX0JVRkZFUl9PRkZTRVQJMHgwODAwCQkvKiBOZXh0IFR4L1J4IGJ1ZmZlcidzIG9mZnNldCAqLworCisvKiBHbG9iYWwgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAoR0lFUikgQml0IE1hc2tzICovCisjZGVmaW5lIFhFTF9HSUVSX0dJRV9NQVNLCTB4ODAwMDAwMDAgCS8qIEdsb2JhbCBFbmFibGUgKi8KKworLyogVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyIChUU1IpIEJpdCBNYXNrcyAqLworI2RlZmluZSBYRUxfVFNSX1hNSVRfQlVTWV9NQVNLCSAweDAwMDAwMDAxIAkvKiBUeCBjb21wbGV0ZSAqLworI2RlZmluZSBYRUxfVFNSX1BST0dSQU1fTUFTSwkgMHgwMDAwMDAwMiAJLyogUHJvZ3JhbSB0aGUgTUFDIGFkZHJlc3MgKi8KKyNkZWZpbmUgWEVMX1RTUl9YTUlUX0lFX01BU0sJIDB4MDAwMDAwMDggCS8qIFR4IGludGVycnVwdCBlbmFibGUgYml0ICovCisjZGVmaW5lIFhFTF9UU1JfWE1JVF9BQ1RJVkVfTUFTSyAweDgwMDAwMDAwIAkvKiBCdWZmZXIgaXMgYWN0aXZlLCBTVyBiaXQKKwkJCQkJCSAqIG9ubHkuIFRoaXMgaXMgbm90IGRvY3VtZW50ZWQKKwkJCQkJCSAqIGluIHRoZSBIVyBzcGVjICovCisKKy8qIERlZmluZSBmb3IgcHJvZ3JhbW1pbmcgdGhlIE1BQyBhZGRyZXNzIGludG8gdGhlIEVtYWNMaXRlICovCisjZGVmaW5lIFhFTF9UU1JfUFJPR19NQUNfQUREUgkoWEVMX1RTUl9YTUlUX0JVU1lfTUFTSyB8IFhFTF9UU1JfUFJPR1JBTV9NQVNLKQorCisvKiBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciAoUlNSKSAqLworI2RlZmluZSBYRUxfUlNSX1JFQ1ZfRE9ORV9NQVNLCTB4MDAwMDAwMDEgCS8qIFJ4IGNvbXBsZXRlICovCisjZGVmaW5lIFhFTF9SU1JfUkVDVl9JRV9NQVNLCTB4MDAwMDAwMDggCS8qIFJ4IGludGVycnVwdCBlbmFibGUgYml0ICovCisKKy8qIFRyYW5zbWl0IFBhY2tldCBMZW5ndGggUmVnaXN0ZXIgKFRQTFIpICovCisjZGVmaW5lIFhFTF9UUExSX0xFTkdUSF9NQVNLCTB4MDAwMEZGRkYgCS8qIFR4IHBhY2tldCBsZW5ndGggKi8KKworLyogUmVjZWl2ZSBQYWNrZXQgTGVuZ3RoIFJlZ2lzdGVyIChSUExSKSAqLworI2RlZmluZSBYRUxfUlBMUl9MRU5HVEhfTUFTSwkweDAwMDBGRkZGIAkvKiBSeCBwYWNrZXQgbGVuZ3RoICovCisKKyNkZWZpbmUgWEVMX0hFQURFUl9PRkZTRVQJMTIgCQkvKiBPZmZzZXQgdG8gbGVuZ3RoIGZpZWxkICovCisjZGVmaW5lIFhFTF9IRUFERVJfU0hJRlQJMTYgCQkvKiBTaGlmdCB2YWx1ZSBmb3IgbGVuZ3RoICovCisKKy8qIEdlbmVyYWwgRXRoZXJuZXQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWEVMX0FSUF9QQUNLRVRfU0laRQkJMjggCS8qIE1heCBBUlAgcGFja2V0IHNpemUgKi8KKyNkZWZpbmUgWEVMX0hFQURFUl9JUF9MRU5HVEhfT0ZGU0VUCTE2IAkvKiBJUCBMZW5ndGggT2Zmc2V0ICovCisKKworCisjZGVmaW5lIFRYX1RJTUVPVVQJCSg2MCpIWikJCS8qIFR4IHRpbWVvdXQgaXMgNjAgc2Vjb25kcy4gKi8KKyNkZWZpbmUgQUxJR05NRU5UCQk0CisKKy8qIEJVRkZFUl9BTElHTihhZHIpIGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBieXRlcyB0byB0aGUgbmV4dCBhbGlnbm1lbnQuICovCisjZGVmaW5lIEJVRkZFUl9BTElHTihhZHIpICgoQUxJR05NRU5UIC0gKCh1MzIpIGFkcikpICUgQUxJR05NRU5UKQorCisvKioKKyAqIHN0cnVjdCBuZXRfbG9jYWwgLSBPdXIgcHJpdmF0ZSBwZXIgZGV2aWNlIGRhdGEKKyAqIEBuZGV2OgkJaW5zdGFuY2Ugb2YgdGhlIG5ldHdvcmsgZGV2aWNlCisgKiBAdHhfcGluZ19wb25nOglpbmRpY2F0ZXMgd2hldGhlciBUeCBQb25nIGJ1ZmZlciBpcyBjb25maWd1cmVkIGluIEhXCisgKiBAcnhfcGluZ19wb25nOglpbmRpY2F0ZXMgd2hldGhlciBSeCBQb25nIGJ1ZmZlciBpcyBjb25maWd1cmVkIGluIEhXCisgKiBAbmV4dF90eF9idWZfdG9fdXNlOgluZXh0IFR4IGJ1ZmZlciB0byB3cml0ZSB0bworICogQG5leHRfcnhfYnVmX3RvX3VzZToJbmV4dCBSeCBidWZmZXIgdG8gcmVhZCBmcm9tCisgKiBAYmFzZV9hZGRyOgkJYmFzZSBhZGRyZXNzIG9mIHRoZSBFbWFjbGl0ZSBkZXZpY2UKKyAqIEByZXNldF9sb2NrOgkJbG9jayB1c2VkIGZvciBzeW5jaHJvbml6YXRpb24KKyAqIEBkZWZlcnJlZF9za2I6CWhvbGRzIGFuIHNrYiAoZm9yIHRyYW5zbWlzc2lvbiBhdCBhIGxhdGVyIHRpbWUpIHdoZW4gdGhlCisgKgkJCVR4IGJ1ZmZlciBpcyBub3QgZnJlZQorICovCitzdHJ1Y3QgbmV0X2xvY2FsIHsKKworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCisJYm9vbCB0eF9waW5nX3Bvbmc7CisJYm9vbCByeF9waW5nX3Bvbmc7CisJdTMyIG5leHRfdHhfYnVmX3RvX3VzZTsKKwl1MzIgbmV4dF9yeF9idWZfdG9fdXNlOworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworCisJc3BpbmxvY2tfdCByZXNldF9sb2NrOworCXN0cnVjdCBza19idWZmICpkZWZlcnJlZF9za2I7Cit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRW1hY0xpdGUgZHJpdmVyIGNhbGxzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiB4ZW1hY2xpdGVfZW5hYmxlX2ludGVycnVwdHMgLSBFbmFibGUgdGhlIGludGVycnVwdHMgZm9yIHRoZSBFbWFjTGl0ZSBkZXZpY2UKKyAqIEBkcnZkYXRhOglQb2ludGVyIHRvIHRoZSBFbWFjbGl0ZSBkZXZpY2UgcHJpdmF0ZSBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBUeCBhbmQgUnggaW50ZXJydXB0cyBmb3IgdGhlIEVtYWNsaXRlIGRldmljZSBhbG9uZworICogd2l0aCB0aGUgR2xvYmFsIEludGVycnVwdCBFbmFibGUuCisgKi8KK3N0YXRpYyB2b2lkIHhlbWFjbGl0ZV9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgbmV0X2xvY2FsICpkcnZkYXRhKQoreworCXUzMiByZWdfZGF0YTsKKworCS8qIEVuYWJsZSB0aGUgVHggaW50ZXJydXB0cyBmb3IgdGhlIGZpcnN0IEJ1ZmZlciAqLworCXJlZ19kYXRhID0gaW5fYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKyBYRUxfVFNSX09GRlNFVCk7CisJb3V0X2JlMzIoZHJ2ZGF0YS0+YmFzZV9hZGRyICsgWEVMX1RTUl9PRkZTRVQsCisJCSByZWdfZGF0YSB8IFhFTF9UU1JfWE1JVF9JRV9NQVNLKTsKKworCS8qIEVuYWJsZSB0aGUgVHggaW50ZXJydXB0cyBmb3IgdGhlIHNlY29uZCBCdWZmZXIgaWYKKwkgKiBjb25maWd1cmVkIGluIEhXICovCisJaWYgKGRydmRhdGEtPnR4X3BpbmdfcG9uZyAhPSAwKSB7CisJCXJlZ19kYXRhID0gaW5fYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKworCQkJCSAgIFhFTF9CVUZGRVJfT0ZGU0VUICsgWEVMX1RTUl9PRkZTRVQpOworCQlvdXRfYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKyBYRUxfQlVGRkVSX09GRlNFVCArCisJCQkgWEVMX1RTUl9PRkZTRVQsCisJCQkgcmVnX2RhdGEgfCBYRUxfVFNSX1hNSVRfSUVfTUFTSyk7CisJfQorCisJLyogRW5hYmxlIHRoZSBSeCBpbnRlcnJ1cHRzIGZvciB0aGUgZmlyc3QgYnVmZmVyICovCisJcmVnX2RhdGEgPSBpbl9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArIFhFTF9SU1JfT0ZGU0VUKTsKKwlvdXRfYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKyBYRUxfUlNSX09GRlNFVCwKKwkJIHJlZ19kYXRhIHwgWEVMX1JTUl9SRUNWX0lFX01BU0spOworCisJLyogRW5hYmxlIHRoZSBSeCBpbnRlcnJ1cHRzIGZvciB0aGUgc2Vjb25kIEJ1ZmZlciBpZgorCSAqIGNvbmZpZ3VyZWQgaW4gSFcgKi8KKwlpZiAoZHJ2ZGF0YS0+cnhfcGluZ19wb25nICE9IDApIHsKKwkJcmVnX2RhdGEgPSBpbl9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArIFhFTF9CVUZGRVJfT0ZGU0VUICsKKwkJCQkgICBYRUxfUlNSX09GRlNFVCk7CisJCW91dF9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArIFhFTF9CVUZGRVJfT0ZGU0VUICsKKwkJCSBYRUxfUlNSX09GRlNFVCwKKwkJCSByZWdfZGF0YSB8IFhFTF9SU1JfUkVDVl9JRV9NQVNLKTsKKwl9CisKKwkvKiBFbmFibGUgdGhlIEdsb2JhbCBJbnRlcnJ1cHQgRW5hYmxlICovCisJb3V0X2JlMzIoZHJ2ZGF0YS0+YmFzZV9hZGRyICsgWEVMX0dJRVJfT0ZGU0VULCBYRUxfR0lFUl9HSUVfTUFTSyk7Cit9CisKKy8qKgorICogeGVtYWNsaXRlX2Rpc2FibGVfaW50ZXJydXB0cyAtIERpc2FibGUgdGhlIGludGVycnVwdHMgZm9yIHRoZSBFbWFjTGl0ZSBkZXZpY2UKKyAqIEBkcnZkYXRhOglQb2ludGVyIHRvIHRoZSBFbWFjbGl0ZSBkZXZpY2UgcHJpdmF0ZSBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgVHggYW5kIFJ4IGludGVycnVwdHMgZm9yIHRoZSBFbWFjbGl0ZSBkZXZpY2UsCisgKiBhbG9uZyB3aXRoIHRoZSBHbG9iYWwgSW50ZXJydXB0IEVuYWJsZS4KKyAqLworc3RhdGljIHZvaWQgeGVtYWNsaXRlX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgbmV0X2xvY2FsICpkcnZkYXRhKQoreworCXUzMiByZWdfZGF0YTsKKworCS8qIERpc2FibGUgdGhlIEdsb2JhbCBJbnRlcnJ1cHQgRW5hYmxlICovCisJb3V0X2JlMzIoZHJ2ZGF0YS0+YmFzZV9hZGRyICsgWEVMX0dJRVJfT0ZGU0VULCBYRUxfR0lFUl9HSUVfTUFTSyk7CisKKwkvKiBEaXNhYmxlIHRoZSBUeCBpbnRlcnJ1cHRzIGZvciB0aGUgZmlyc3QgYnVmZmVyICovCisJcmVnX2RhdGEgPSBpbl9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArIFhFTF9UU1JfT0ZGU0VUKTsKKwlvdXRfYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKyBYRUxfVFNSX09GRlNFVCwKKwkJIHJlZ19kYXRhICYgKH5YRUxfVFNSX1hNSVRfSUVfTUFTSykpOworCisJLyogRGlzYWJsZSB0aGUgVHggaW50ZXJydXB0cyBmb3IgdGhlIHNlY29uZCBCdWZmZXIKKwkgKiBpZiBjb25maWd1cmVkIGluIEhXICovCisJaWYgKGRydmRhdGEtPnR4X3BpbmdfcG9uZyAhPSAwKSB7CisJCXJlZ19kYXRhID0gaW5fYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKyBYRUxfQlVGRkVSX09GRlNFVCArCisJCQkJICAgWEVMX1RTUl9PRkZTRVQpOworCQlvdXRfYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKyBYRUxfQlVGRkVSX09GRlNFVCArCisJCQkgWEVMX1RTUl9PRkZTRVQsCisJCQkgcmVnX2RhdGEgJiAoflhFTF9UU1JfWE1JVF9JRV9NQVNLKSk7CisJfQorCisJLyogRGlzYWJsZSB0aGUgUnggaW50ZXJydXB0cyBmb3IgdGhlIGZpcnN0IGJ1ZmZlciAqLworCXJlZ19kYXRhID0gaW5fYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKyBYRUxfUlNSX09GRlNFVCk7CisJb3V0X2JlMzIoZHJ2ZGF0YS0+YmFzZV9hZGRyICsgWEVMX1JTUl9PRkZTRVQsCisJCSByZWdfZGF0YSAmICh+WEVMX1JTUl9SRUNWX0lFX01BU0spKTsKKworCS8qIERpc2FibGUgdGhlIFJ4IGludGVycnVwdHMgZm9yIHRoZSBzZWNvbmQgYnVmZmVyCisJICogaWYgY29uZmlndXJlZCBpbiBIVyAqLworCWlmIChkcnZkYXRhLT5yeF9waW5nX3BvbmcgIT0gMCkgeworCisJCXJlZ19kYXRhID0gaW5fYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKyBYRUxfQlVGRkVSX09GRlNFVCArCisJCQkJICAgWEVMX1JTUl9PRkZTRVQpOworCQlvdXRfYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKyBYRUxfQlVGRkVSX09GRlNFVCArCisJCQkgWEVMX1JTUl9PRkZTRVQsCisJCQkgcmVnX2RhdGEgJiAoflhFTF9SU1JfUkVDVl9JRV9NQVNLKSk7CisJfQorfQorCisvKioKKyAqIHhlbWFjbGl0ZV9hbGlnbmVkX3dyaXRlIC0gV3JpdGUgZnJvbSAxNi1iaXQgYWxpZ25lZCB0byAzMi1iaXQgYWxpZ25lZCBhZGRyZXNzCisgKiBAc3JjX3B0cjoJVm9pZCBwb2ludGVyIHRvIHRoZSAxNi1iaXQgYWxpZ25lZCBzb3VyY2UgYWRkcmVzcworICogQGRlc3RfcHRyOglQb2ludGVyIHRvIHRoZSAzMi1iaXQgYWxpZ25lZCBkZXN0aW5hdGlvbiBhZGRyZXNzCisgKiBAbGVuZ3RoOglOdW1iZXIgYnl0ZXMgdG8gd3JpdGUgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBkYXRhIGZyb20gYSAxNi1iaXQgYWxpZ25lZCBidWZmZXIgdG8gYSAzMi1iaXQgYWxpZ25lZAorICogYWRkcmVzcyBpbiB0aGUgRW1hY0xpdGUgZGV2aWNlLgorICovCitzdGF0aWMgdm9pZCB4ZW1hY2xpdGVfYWxpZ25lZF93cml0ZSh2b2lkICpzcmNfcHRyLCB1MzIgKmRlc3RfcHRyLAorCQkJCSAgICB1bnNpZ25lZCBsZW5ndGgpCit7CisJdTMyIGFsaWduX2J1ZmZlcjsKKwl1MzIgKnRvX3UzMl9wdHI7CisJdTE2ICpmcm9tX3UxNl9wdHIsICp0b191MTZfcHRyOworCisJdG9fdTMyX3B0ciA9IGRlc3RfcHRyOworCWZyb21fdTE2X3B0ciA9ICh1MTYgKikgc3JjX3B0cjsKKwlhbGlnbl9idWZmZXIgPSAwOworCisJZm9yICg7IGxlbmd0aCA+IDM7IGxlbmd0aCAtPSA0KSB7CisJCXRvX3UxNl9wdHIgPSAodTE2ICopICgodm9pZCAqKSAmYWxpZ25fYnVmZmVyKTsKKwkJKnRvX3UxNl9wdHIrKyA9ICpmcm9tX3UxNl9wdHIrKzsKKwkJKnRvX3UxNl9wdHIrKyA9ICpmcm9tX3UxNl9wdHIrKzsKKworCQkvKiBPdXRwdXQgYSB3b3JkICovCisJCSp0b191MzJfcHRyKysgPSBhbGlnbl9idWZmZXI7CisJfQorCWlmIChsZW5ndGgpIHsKKwkJdTggKmZyb21fdThfcHRyLCAqdG9fdThfcHRyOworCisJCS8qIFNldCB1cCB0byBvdXRwdXQgdGhlIHJlbWFpbmluZyBkYXRhICovCisJCWFsaWduX2J1ZmZlciA9IDA7CisJCXRvX3U4X3B0ciA9ICh1OCAqKSAmYWxpZ25fYnVmZmVyOworCQlmcm9tX3U4X3B0ciA9ICh1OCAqKSBmcm9tX3UxNl9wdHI7CisKKwkJLyogT3V0cHV0IHRoZSByZW1haW5pbmcgZGF0YSAqLworCQlmb3IgKDsgbGVuZ3RoID4gMDsgbGVuZ3RoLS0pCisJCQkqdG9fdThfcHRyKysgPSAqZnJvbV91OF9wdHIrKzsKKworCQkqdG9fdTMyX3B0ciA9IGFsaWduX2J1ZmZlcjsKKwl9Cit9CisKKy8qKgorICogeGVtYWNsaXRlX2FsaWduZWRfcmVhZCAtIFJlYWQgZnJvbSAzMi1iaXQgYWxpZ25lZCB0byAxNi1iaXQgYWxpZ25lZCBidWZmZXIKKyAqIEBzcmNfcHRyOglQb2ludGVyIHRvIHRoZSAzMi1iaXQgYWxpZ25lZCBzb3VyY2UgYWRkcmVzcworICogQGRlc3RfcHRyOglQb2ludGVyIHRvIHRoZSAxNi1iaXQgYWxpZ25lZCBkZXN0aW5hdGlvbiBhZGRyZXNzCisgKiBAbGVuZ3RoOglOdW1iZXIgYnl0ZXMgdG8gcmVhZCBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgZGF0YSBmcm9tIGEgMzItYml0IGFsaWduZWQgYWRkcmVzcyBpbiB0aGUgRW1hY0xpdGUgZGV2aWNlCisgKiB0byBhIDE2LWJpdCBhbGlnbmVkIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgeGVtYWNsaXRlX2FsaWduZWRfcmVhZCh1MzIgKnNyY19wdHIsIHU4ICpkZXN0X3B0ciwKKwkJCQkgICB1bnNpZ25lZCBsZW5ndGgpCit7CisJdTE2ICp0b191MTZfcHRyLCAqZnJvbV91MTZfcHRyOworCXUzMiAqZnJvbV91MzJfcHRyOworCXUzMiBhbGlnbl9idWZmZXI7CisKKwlmcm9tX3UzMl9wdHIgPSBzcmNfcHRyOworCXRvX3UxNl9wdHIgPSAodTE2ICopIGRlc3RfcHRyOworCisJZm9yICg7IGxlbmd0aCA+IDM7IGxlbmd0aCAtPSA0KSB7CisJCS8qIENvcHkgZWFjaCB3b3JkIGludG8gdGhlIHRlbXBvcmFyeSBidWZmZXIgKi8KKwkJYWxpZ25fYnVmZmVyID0gKmZyb21fdTMyX3B0cisrOworCQlmcm9tX3UxNl9wdHIgPSAodTE2ICopJmFsaWduX2J1ZmZlcjsKKworCQkvKiBSZWFkIGRhdGEgZnJvbSBzb3VyY2UgKi8KKwkJKnRvX3UxNl9wdHIrKyA9ICpmcm9tX3UxNl9wdHIrKzsKKwkJKnRvX3UxNl9wdHIrKyA9ICpmcm9tX3UxNl9wdHIrKzsKKwl9CisKKwlpZiAobGVuZ3RoKSB7CisJCXU4ICp0b191OF9wdHIsICpmcm9tX3U4X3B0cjsKKworCQkvKiBTZXQgdXAgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGRhdGEgKi8KKwkJdG9fdThfcHRyID0gKHU4ICopIHRvX3UxNl9wdHI7CisJCWFsaWduX2J1ZmZlciA9ICpmcm9tX3UzMl9wdHIrKzsKKwkJZnJvbV91OF9wdHIgPSAodTggKikgJmFsaWduX2J1ZmZlcjsKKworCQkvKiBSZWFkIHRoZSByZW1haW5pbmcgZGF0YSAqLworCQlmb3IgKDsgbGVuZ3RoID4gMDsgbGVuZ3RoLS0pCisJCQkqdG9fdThfcHRyID0gKmZyb21fdThfcHRyOworCX0KK30KKworLyoqCisgKiB4ZW1hY2xpdGVfc2VuZF9kYXRhIC0gU2VuZCBhbiBFdGhlcm5ldCBmcmFtZQorICogQGRydmRhdGE6CVBvaW50ZXIgdG8gdGhlIEVtYWNsaXRlIGRldmljZSBwcml2YXRlIGRhdGEKKyAqIEBkYXRhOglQb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIHNlbnQKKyAqIEBieXRlX2NvdW50OglUb3RhbCBmcmFtZSBzaXplLCBpbmNsdWRpbmcgaGVhZGVyCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIFR4IGJ1ZmZlciBvZiB0aGUgRW1hY2xpdGUgZGV2aWNlIGlzIGZyZWUgdG8gc2VuZAorICogZGF0YS4gSWYgc28sIGl0IGZpbGxzIHRoZSBUeCBidWZmZXIgd2l0aCBkYXRhIGZvciB0cmFuc21pc3Npb24uIE90aGVyd2lzZSwgaXQKKyAqIHJldHVybnMgYW4gZXJyb3IuCisgKgorICogUmV0dXJuOgkwIHVwb24gc3VjY2VzcyBvciAtMSBpZiB0aGUgYnVmZmVyKHMpIGFyZSBmdWxsLgorICoKKyAqIE5vdGU6CVRoZSBtYXhpbXVtIFR4IHBhY2tldCBzaXplIGNhbiBub3QgYmUgbW9yZSB0aGFuIEV0aGVybmV0IGhlYWRlcgorICoJCSgxNCBCeXRlcykgKyBNYXhpbXVtIE1UVSAoMTUwMCBieXRlcykuIFRoaXMgaXMgZXhjbHVkaW5nIEZDUy4KKyAqLworc3RhdGljIGludCB4ZW1hY2xpdGVfc2VuZF9kYXRhKHN0cnVjdCBuZXRfbG9jYWwgKmRydmRhdGEsIHU4ICpkYXRhLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBieXRlX2NvdW50KQoreworCXUzMiByZWdfZGF0YTsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisKKwkvKiBEZXRlcm1pbmUgdGhlIGV4cGVjdGVkIFR4IGJ1ZmZlciBhZGRyZXNzICovCisJYWRkciA9IGRydmRhdGEtPmJhc2VfYWRkciArIGRydmRhdGEtPm5leHRfdHhfYnVmX3RvX3VzZTsKKworCS8qIElmIHRoZSBsZW5ndGggaXMgdG9vIGxhcmdlLCB0cnVuY2F0ZSBpdCAqLworCWlmIChieXRlX2NvdW50ID4gRVRIX0ZSQU1FX0xFTikKKwkJYnl0ZV9jb3VudCA9IEVUSF9GUkFNRV9MRU47CisKKwkvKiBDaGVjayBpZiB0aGUgZXhwZWN0ZWQgYnVmZmVyIGlzIGF2YWlsYWJsZSAqLworCXJlZ19kYXRhID0gaW5fYmUzMihhZGRyICsgWEVMX1RTUl9PRkZTRVQpOworCWlmICgocmVnX2RhdGEgJiAoWEVMX1RTUl9YTUlUX0JVU1lfTUFTSyB8CisJICAgICBYRUxfVFNSX1hNSVRfQUNUSVZFX01BU0spKSA9PSAwKSB7CisKKwkJLyogU3dpdGNoIHRvIG5leHQgYnVmZmVyIGlmIGNvbmZpZ3VyZWQgKi8KKwkJaWYgKGRydmRhdGEtPnR4X3BpbmdfcG9uZyAhPSAwKQorCQkJZHJ2ZGF0YS0+bmV4dF90eF9idWZfdG9fdXNlIF49IFhFTF9CVUZGRVJfT0ZGU0VUOworCX0gZWxzZSBpZiAoZHJ2ZGF0YS0+dHhfcGluZ19wb25nICE9IDApIHsKKwkJLyogSWYgdGhlIGV4cGVjdGVkIGJ1ZmZlciBpcyBmdWxsLCB0cnkgdGhlIG90aGVyIGJ1ZmZlciwKKwkJICogaWYgaXQgaXMgY29uZmlndXJlZCBpbiBIVyAqLworCisJCWFkZHIgPSAodm9pZCBfX2lvbWVtIF9fZm9yY2UgKikoKHUzMiBfX2ZvcmNlKWFkZHIgXgorCQkJCQkJIFhFTF9CVUZGRVJfT0ZGU0VUKTsKKwkJcmVnX2RhdGEgPSBpbl9iZTMyKGFkZHIgKyBYRUxfVFNSX09GRlNFVCk7CisKKwkJaWYgKChyZWdfZGF0YSAmIChYRUxfVFNSX1hNSVRfQlVTWV9NQVNLIHwKKwkJICAgICBYRUxfVFNSX1hNSVRfQUNUSVZFX01BU0spKSAhPSAwKQorCQkJcmV0dXJuIC0xOyAvKiBCdWZmZXJzIHdlcmUgZnVsbCwgcmV0dXJuIGZhaWx1cmUgKi8KKwl9IGVsc2UKKwkJcmV0dXJuIC0xOyAvKiBCdWZmZXIgd2FzIGZ1bGwsIHJldHVybiBmYWlsdXJlICovCisKKwkvKiBXcml0ZSB0aGUgZnJhbWUgdG8gdGhlIGJ1ZmZlciAqLworCXhlbWFjbGl0ZV9hbGlnbmVkX3dyaXRlKGRhdGEsICh1MzIgX19mb3JjZSAqKSBhZGRyLCBieXRlX2NvdW50KTsKKworCW91dF9iZTMyKGFkZHIgKyBYRUxfVFBMUl9PRkZTRVQsIChieXRlX2NvdW50ICYgWEVMX1RQTFJfTEVOR1RIX01BU0spKTsKKworCS8qIFVwZGF0ZSB0aGUgVHggU3RhdHVzIFJlZ2lzdGVyIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgaXMgYQorCSAqIGZyYW1lIHRvIHNlbmQuIFNldCB0aGUgWEVMX1RTUl9YTUlUX0FDVElWRV9NQVNLIGZsYWcgd2hpY2gKKwkgKiBpcyB1c2VkIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBjaGVjayB3aGV0aGVyIGEgZnJhbWUKKwkgKiBoYXMgYmVlbiB0cmFuc21pdHRlZCAqLworCXJlZ19kYXRhID0gaW5fYmUzMihhZGRyICsgWEVMX1RTUl9PRkZTRVQpOworCXJlZ19kYXRhIHw9IChYRUxfVFNSX1hNSVRfQlVTWV9NQVNLIHwgWEVMX1RTUl9YTUlUX0FDVElWRV9NQVNLKTsKKwlvdXRfYmUzMihhZGRyICsgWEVMX1RTUl9PRkZTRVQsIHJlZ19kYXRhKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9yZWN2X2RhdGEgLSBSZWNlaXZlIGEgZnJhbWUKKyAqIEBkcnZkYXRhOglQb2ludGVyIHRvIHRoZSBFbWFjbGl0ZSBkZXZpY2UgcHJpdmF0ZSBkYXRhCisgKiBAZGF0YToJQWRkcmVzcyB3aGVyZSB0aGUgZGF0YSBpcyB0byBiZSByZWNlaXZlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBjb250ZXh0IG9yCisgKiB3aXRoIGEgd3JhcHBlciB3aGljaCB3YWl0cyBmb3IgdGhlIHJlY2VpdmUgZnJhbWUgdG8gYmUgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybjoJVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkCisgKi8KK3N0YXRpYyB1MTYgeGVtYWNsaXRlX3JlY3ZfZGF0YShzdHJ1Y3QgbmV0X2xvY2FsICpkcnZkYXRhLCB1OCAqZGF0YSkKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJdTE2IGxlbmd0aCwgcHJvdG9fdHlwZTsKKwl1MzIgcmVnX2RhdGE7CisKKwkvKiBEZXRlcm1pbmUgdGhlIGV4cGVjdGVkIGJ1ZmZlciBhZGRyZXNzICovCisJYWRkciA9IChkcnZkYXRhLT5iYXNlX2FkZHIgKyBkcnZkYXRhLT5uZXh0X3J4X2J1Zl90b191c2UpOworCisJLyogVmVyaWZ5IHdoaWNoIGJ1ZmZlciBoYXMgdmFsaWQgZGF0YSAqLworCXJlZ19kYXRhID0gaW5fYmUzMihhZGRyICsgWEVMX1JTUl9PRkZTRVQpOworCisJaWYgKChyZWdfZGF0YSAmIFhFTF9SU1JfUkVDVl9ET05FX01BU0spID09IFhFTF9SU1JfUkVDVl9ET05FX01BU0spIHsKKwkJaWYgKGRydmRhdGEtPnJ4X3BpbmdfcG9uZyAhPSAwKQorCQkJZHJ2ZGF0YS0+bmV4dF9yeF9idWZfdG9fdXNlIF49IFhFTF9CVUZGRVJfT0ZGU0VUOworCX0gZWxzZSB7CisJCS8qIFRoZSBpbnN0YW5jZSBpcyBvdXQgb2Ygc3luYywgdHJ5IG90aGVyIGJ1ZmZlciBpZiBvdGhlcgorCQkgKiBidWZmZXIgaXMgY29uZmlndXJlZCwgcmV0dXJuIDAgb3RoZXJ3aXNlLiBJZiB0aGUgaW5zdGFuY2UgaXMKKwkJICogb3V0IG9mIHN5bmMsIGRvIG5vdCB1cGRhdGUgdGhlICduZXh0X3J4X2J1Zl90b191c2UnIHNpbmNlIGl0CisJCSAqIHdpbGwgY29ycmVjdCBvbiBzdWJzZXF1ZW50IGNhbGxzICovCisJCWlmIChkcnZkYXRhLT5yeF9waW5nX3BvbmcgIT0gMCkKKwkJCWFkZHIgPSAodm9pZCBfX2lvbWVtIF9fZm9yY2UgKikoKHUzMiBfX2ZvcmNlKWFkZHIgXgorCQkJCQkJCSBYRUxfQlVGRkVSX09GRlNFVCk7CisJCWVsc2UKKwkJCXJldHVybiAwOwkvKiBObyBkYXRhIHdhcyBhdmFpbGFibGUgKi8KKworCQkvKiBWZXJpZnkgdGhhdCBidWZmZXIgaGFzIHZhbGlkIGRhdGEgKi8KKwkJcmVnX2RhdGEgPSBpbl9iZTMyKGFkZHIgKyBYRUxfUlNSX09GRlNFVCk7CisJCWlmICgocmVnX2RhdGEgJiBYRUxfUlNSX1JFQ1ZfRE9ORV9NQVNLKSAhPQorCQkgICAgIFhFTF9SU1JfUkVDVl9ET05FX01BU0spCisJCQlyZXR1cm4gMDsJLyogTm8gZGF0YSB3YXMgYXZhaWxhYmxlICovCisJfQorCisJLyogR2V0IHRoZSBwcm90b2NvbCB0eXBlIG9mIHRoZSBldGhlcm5ldCBmcmFtZSB0aGF0IGFycml2ZWQgKi8KKwlwcm90b190eXBlID0gKChpbl9iZTMyKGFkZHIgKyBYRUxfSEVBREVSX09GRlNFVCArCisJCQlYRUxfUlhCVUZGX09GRlNFVCkgPj4gWEVMX0hFQURFUl9TSElGVCkgJgorCQkJWEVMX1JQTFJfTEVOR1RIX01BU0spOworCisJLyogQ2hlY2sgaWYgcmVjZWl2ZWQgZXRoZXJuZXQgZnJhbWUgaXMgYSByYXcgZXRoZXJuZXQgZnJhbWUKKwkgKiBvciBhbiBJUCBwYWNrZXQgb3IgYW4gQVJQIHBhY2tldCAqLworCWlmIChwcm90b190eXBlID4gKEVUSF9GUkFNRV9MRU4gKyBFVEhfRkNTX0xFTikpIHsKKworCQlpZiAocHJvdG9fdHlwZSA9PSBFVEhfUF9JUCkgeworCQkJbGVuZ3RoID0gKChpbl9iZTMyKGFkZHIgKworCQkJCQlYRUxfSEVBREVSX0lQX0xFTkdUSF9PRkZTRVQgKworCQkJCQlYRUxfUlhCVUZGX09GRlNFVCkgPj4KKwkJCQkJWEVMX0hFQURFUl9TSElGVCkgJgorCQkJCQlYRUxfUlBMUl9MRU5HVEhfTUFTSyk7CisJCQlsZW5ndGggKz0gRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjsKKworCQl9IGVsc2UgaWYgKHByb3RvX3R5cGUgPT0gRVRIX1BfQVJQKQorCQkJbGVuZ3RoID0gWEVMX0FSUF9QQUNLRVRfU0laRSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU47CisJCWVsc2UKKwkJCS8qIEZpZWxkIGNvbnRhaW5zIHR5cGUgb3RoZXIgdGhhbiBJUCBvciBBUlAsIHVzZSBtYXgKKwkJCSAqIGZyYW1lIHNpemUgYW5kIGxldCB1c2VyIHBhcnNlIGl0ICovCisJCQlsZW5ndGggPSBFVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU47CisJfSBlbHNlCisJCS8qIFVzZSB0aGUgbGVuZ3RoIGluIHRoZSBmcmFtZSwgcGx1cyB0aGUgaGVhZGVyIGFuZCB0cmFpbGVyICovCisJCWxlbmd0aCA9IHByb3RvX3R5cGUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOOworCisJLyogUmVhZCBmcm9tIHRoZSBFbWFjTGl0ZSBkZXZpY2UgKi8KKwl4ZW1hY2xpdGVfYWxpZ25lZF9yZWFkKCh1MzIgX19mb3JjZSAqKSAoYWRkciArIFhFTF9SWEJVRkZfT0ZGU0VUKSwKKwkJCQlkYXRhLCBsZW5ndGgpOworCisJLyogQWNrbm93bGVkZ2UgdGhlIGZyYW1lICovCisJcmVnX2RhdGEgPSBpbl9iZTMyKGFkZHIgKyBYRUxfUlNSX09GRlNFVCk7CisJcmVnX2RhdGEgJj0gflhFTF9SU1JfUkVDVl9ET05FX01BU0s7CisJb3V0X2JlMzIoYWRkciArIFhFTF9SU1JfT0ZGU0VULCByZWdfZGF0YSk7CisKKwlyZXR1cm4gbGVuZ3RoOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3MgLSBTZXQgdGhlIE1BQyBhZGRyZXNzIGZvciB0aGlzIGRldmljZQorICogQGRydmRhdGE6CVBvaW50ZXIgdG8gdGhlIEVtYWNsaXRlIGRldmljZSBwcml2YXRlIGRhdGEKKyAqIEBhZGRyZXNzX3B0cjpQb2ludGVyIHRvIHRoZSBNQUMgYWRkcmVzcyAoTUFDIGFkZHJlc3MgaXMgYSA0OC1iaXQgdmFsdWUpCisgKgorICogVHggbXVzdCBiZSBpZGxlIGFuZCBSeCBzaG91bGQgYmUgaWRsZSBmb3IgZGV0ZXJtaW5pc3RpYyByZXN1bHRzLgorICogSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhlCisgKiBpbml0aWFsaXphdGlvbiBhbmQgYmVmb3JlIHRyYW5zbWlzc2lvbiBvZiBhbnkgcGFja2V0cyBmcm9tIHRoZSBkZXZpY2UuCisgKiBUaGUgTUFDIGFkZHJlc3MgY2FuIGJlIHByb2dyYW1tZWQgdXNpbmcgYW55IG9mIHRoZSB0d28gdHJhbnNtaXQKKyAqIGJ1ZmZlcnMgKGlmIGNvbmZpZ3VyZWQpLgorICovCitzdGF0aWMgdm9pZCB4ZW1hY2xpdGVfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfbG9jYWwgKmRydmRhdGEsCisJCQkJICAgICAgdTggKmFkZHJlc3NfcHRyKQoreworCXZvaWQgX19pb21lbSAqYWRkcjsKKwl1MzIgcmVnX2RhdGE7CisKKwkvKiBEZXRlcm1pbmUgdGhlIGV4cGVjdGVkIFR4IGJ1ZmZlciBhZGRyZXNzICovCisJYWRkciA9IGRydmRhdGEtPmJhc2VfYWRkciArIGRydmRhdGEtPm5leHRfdHhfYnVmX3RvX3VzZTsKKworCXhlbWFjbGl0ZV9hbGlnbmVkX3dyaXRlKGFkZHJlc3NfcHRyLCAodTMyIF9fZm9yY2UgKikgYWRkciwgRVRIX0FMRU4pOworCisJb3V0X2JlMzIoYWRkciArIFhFTF9UUExSX09GRlNFVCwgRVRIX0FMRU4pOworCisJLyogVXBkYXRlIHRoZSBNQUMgYWRkcmVzcyBpbiB0aGUgRW1hY0xpdGUgKi8KKwlyZWdfZGF0YSA9IGluX2JlMzIoYWRkciArIFhFTF9UU1JfT0ZGU0VUKTsKKwlvdXRfYmUzMihhZGRyICsgWEVMX1RTUl9PRkZTRVQsIHJlZ19kYXRhIHwgWEVMX1RTUl9QUk9HX01BQ19BRERSKTsKKworCS8qIFdhaXQgZm9yIEVtYWNMaXRlIHRvIGZpbmlzaCB3aXRoIHRoZSBNQUMgYWRkcmVzcyB1cGRhdGUgKi8KKwl3aGlsZSAoKGluX2JlMzIoYWRkciArIFhFTF9UU1JfT0ZGU0VUKSAmCisJCVhFTF9UU1JfUFJPR19NQUNfQUREUikgIT0gMCkKKwkJOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV90eF90aW1lb3V0IC0gQ2FsbGJhY2sgZm9yIFR4IFRpbWVvdXQKKyAqIEBkZXY6CVBvaW50ZXIgdG8gdGhlIG5ldHdvcmsgZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBUeCB0aW1lIG91dCBvY2N1cnMgZm9yIEVtYWNsaXRlIGRldmljZS4KKyAqLworc3RhdGljIHZvaWQgeGVtYWNsaXRlX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl9lcnIoJmxwLT5uZGV2LT5kZXYsICJFeGNlZWRlZCB0cmFuc21pdCB0aW1lb3V0IG9mICVsdSBtc1xuIiwKKwkJVFhfVElNRU9VVCAqIDEwMDBVTCAvIEhaKTsKKworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisKKwkvKiBSZXNldCB0aGUgZGV2aWNlICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5yZXNldF9sb2NrLCBmbGFncyk7CisKKwkvKiBTaG91bGRuJ3QgcmVhbGx5IGJlIG5lY2Vzc2FyeSwgYnV0IHNob3VsZG4ndCBodXJ0ICovCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJeGVtYWNsaXRlX2Rpc2FibGVfaW50ZXJydXB0cyhscCk7CisJeGVtYWNsaXRlX2VuYWJsZV9pbnRlcnJ1cHRzKGxwKTsKKworCWlmIChscC0+ZGVmZXJyZWRfc2tiKSB7CisJCWRldl9rZnJlZV9za2IobHAtPmRlZmVycmVkX3NrYik7CisJCWxwLT5kZWZlcnJlZF9za2IgPSBOVUxMOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCX0KKworCS8qIFRvIGV4Y2x1ZGUgdHggdGltZW91dCAqLworCWRldi0+dHJhbnNfc3RhcnQgPSAweGZmZmZmZmZmIC0gVFhfVElNRU9VVCAtIFRYX1RJTUVPVVQ7CisKKwkvKiBXZSdyZSBhbGwgcmVhZHkgdG8gZ28uIFN0YXJ0IHRoZSBxdWV1ZSAqLworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+cmVzZXRfbG9jaywgZmxhZ3MpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEludGVycnVwdCBIYW5kbGVycyAqLworLyoqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogeGVtYWNsaXRlX3R4X2hhbmRsZXIgLSBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgZnJhbWVzIHNlbnQKKyAqIEBkZXY6CVBvaW50ZXIgdG8gdGhlIG5ldHdvcmsgZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBudW1iZXIgb2YgcGFja2V0cyB0cmFuc21pdHRlZCBhbmQgaGFuZGxlcyB0aGUKKyAqIGRlZmVycmVkIHNrYiwgaWYgdGhlcmUgaXMgb25lLgorICovCitzdGF0aWMgdm9pZCB4ZW1hY2xpdGVfdHhfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gKHN0cnVjdCBuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWlmIChscC0+ZGVmZXJyZWRfc2tiKSB7CisJCWlmICh4ZW1hY2xpdGVfc2VuZF9kYXRhKGxwLAorCQkJCQkodTggKikgbHAtPmRlZmVycmVkX3NrYi0+ZGF0YSwKKwkJCQkJbHAtPmRlZmVycmVkX3NrYi0+bGVuKSAhPSAwKQorCQkJcmV0dXJuOworCQllbHNlIHsKKwkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbHAtPmRlZmVycmVkX3NrYi0+bGVuOworCQkJZGV2X2tmcmVlX3NrYl9pcnEobHAtPmRlZmVycmVkX3NrYik7CisJCQlscC0+ZGVmZXJyZWRfc2tiID0gTlVMTDsKKwkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCQl9CisJfQorfQorCisvKioKKyAqIHhlbWFjbGl0ZV9yeF9oYW5kbGVyLSBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgZnJhbWVzIHJlY2VpdmVkCisgKiBAZGV2OglQb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBzb2NrZXQgYnVmZmVyLCBmaWxscyBpdCB3aXRoIGRhdGEKKyAqIHJlY2VpdmVkIGFuZCBoYW5kcyBpdCBvdmVyIHRvIHRoZSBUQ1AvSVAgc3RhY2suCisgKi8KK3N0YXRpYyB2b2lkIHhlbWFjbGl0ZV9yeF9oYW5kbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSAoc3RydWN0IG5ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50IGFsaWduOworCXUzMiBsZW47CisKKwlsZW4gPSBFVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU47CisJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4gKyBBTElHTk1FTlQpOworCWlmICghc2tiKSB7CisJCS8qIENvdWxkbid0IGdldCBtZW1vcnkuICovCisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXZfZXJyKCZscC0+bmRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIHJlY2VpdmUgYnVmZmVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogQSBuZXcgc2tiIHNob3VsZCBoYXZlIHRoZSBkYXRhIGhhbGZ3b3JkIGFsaWduZWQsIGJ1dCB0aGlzIGNvZGUgaXMKKwkgKiBoZXJlIGp1c3QgaW4gY2FzZSB0aGF0IGlzbid0IHRydWUuIENhbGN1bGF0ZSBob3cgbWFueQorCSAqIGJ5dGVzIHdlIHNob3VsZCByZXNlcnZlIHRvIGdldCB0aGUgZGF0YSB0byBzdGFydCBvbiBhIHdvcmQKKwkgKiBib3VuZGFyeSAqLworCWFsaWduID0gQlVGRkVSX0FMSUdOKHNrYi0+ZGF0YSk7CisJaWYgKGFsaWduKQorCQlza2JfcmVzZXJ2ZShza2IsIGFsaWduKTsKKworCXNrYl9yZXNlcnZlKHNrYiwgMik7CisKKwlsZW4gPSB4ZW1hY2xpdGVfcmVjdl9kYXRhKGxwLCAodTggKikgc2tiLT5kYXRhKTsKKworCWlmICghbGVuKSB7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCXJldHVybjsKKwl9CisKKwlza2JfcHV0KHNrYiwgbGVuKTsJLyogVGVsbCB0aGUgc2tiIGhvdyBtdWNoIGRhdGEgd2UgZ290ICovCisJc2tiLT5kZXYgPSBkZXY7CQkvKiBGaWxsIG91dCByZXF1aXJlZCBtZXRhLWRhdGEgKi8KKworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CisKKwluZXRpZl9yeChza2IpOwkJLyogU2VuZCB0aGUgcGFja2V0IHVwc3RyZWFtICovCit9CisKKy8qKgorICogeGVtYWNsaXRlX2ludGVycnVwdCAtIEludGVycnVwdCBoYW5kbGVyIGZvciB0aGlzIGRyaXZlcgorICogQGlycToJSXJxIG9mIHRoZSBFbWFjbGl0ZSBkZXZpY2UKKyAqIEBkZXZfaWQ6CVZvaWQgcG9pbnRlciB0byB0aGUgbmV0d29yayBkZXZpY2UgaW5zdGFuY2UgdXNlZCBhcyBjYWxsYmFjaworICoJCXJlZmVyZW5jZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgVHggYW5kIFJ4IGludGVycnVwdHMgb2YgdGhlIEVtYWNMaXRlIGRldmljZS4KKyAqLworc3RhdGljIGlycXJldHVybl90IHhlbWFjbGl0ZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWJvb2wgdHhfY29tcGxldGUgPSAwOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSAoc3RydWN0IG5ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyID0gbHAtPmJhc2VfYWRkcjsKKwl1MzIgdHhfc3RhdHVzOworCisJLyogQ2hlY2sgaWYgdGhlcmUgaXMgUnggRGF0YSBhdmFpbGFibGUgKi8KKwlpZiAoKGluX2JlMzIoYmFzZV9hZGRyICsgWEVMX1JTUl9PRkZTRVQpICYgWEVMX1JTUl9SRUNWX0RPTkVfTUFTSykgfHwKKwkJCShpbl9iZTMyKGJhc2VfYWRkciArIFhFTF9CVUZGRVJfT0ZGU0VUICsgWEVMX1JTUl9PRkZTRVQpCisJCQkgJiBYRUxfUlNSX1JFQ1ZfRE9ORV9NQVNLKSkKKworCQl4ZW1hY2xpdGVfcnhfaGFuZGxlcihkZXYpOworCisJLyogQ2hlY2sgaWYgdGhlIFRyYW5zbWlzc2lvbiBmb3IgdGhlIGZpcnN0IGJ1ZmZlciBpcyBjb21wbGV0ZWQgKi8KKwl0eF9zdGF0dXMgPSBpbl9iZTMyKGJhc2VfYWRkciArIFhFTF9UU1JfT0ZGU0VUKTsKKwlpZiAoKCh0eF9zdGF0dXMgJiBYRUxfVFNSX1hNSVRfQlVTWV9NQVNLKSA9PSAwKSAmJgorCQkodHhfc3RhdHVzICYgWEVMX1RTUl9YTUlUX0FDVElWRV9NQVNLKSAhPSAwKSB7CisKKwkJdHhfc3RhdHVzICY9IH5YRUxfVFNSX1hNSVRfQUNUSVZFX01BU0s7CisJCW91dF9iZTMyKGJhc2VfYWRkciArIFhFTF9UU1JfT0ZGU0VULCB0eF9zdGF0dXMpOworCisJCXR4X2NvbXBsZXRlID0gMTsKKwl9CisKKwkvKiBDaGVjayBpZiB0aGUgVHJhbnNtaXNzaW9uIGZvciB0aGUgc2Vjb25kIGJ1ZmZlciBpcyBjb21wbGV0ZWQgKi8KKwl0eF9zdGF0dXMgPSBpbl9iZTMyKGJhc2VfYWRkciArIFhFTF9CVUZGRVJfT0ZGU0VUICsgWEVMX1RTUl9PRkZTRVQpOworCWlmICgoKHR4X3N0YXR1cyAmIFhFTF9UU1JfWE1JVF9CVVNZX01BU0spID09IDApICYmCisJCSh0eF9zdGF0dXMgJiBYRUxfVFNSX1hNSVRfQUNUSVZFX01BU0spICE9IDApIHsKKworCQl0eF9zdGF0dXMgJj0gflhFTF9UU1JfWE1JVF9BQ1RJVkVfTUFTSzsKKwkJb3V0X2JlMzIoYmFzZV9hZGRyICsgWEVMX0JVRkZFUl9PRkZTRVQgKyBYRUxfVFNSX09GRlNFVCwKKwkJCSB0eF9zdGF0dXMpOworCisJCXR4X2NvbXBsZXRlID0gMTsKKwl9CisKKwkvKiBJZiB0aGVyZSB3YXMgYSBUeCBpbnRlcnJ1cHQsIGNhbGwgdGhlIFR4IEhhbmRsZXIgKi8KKwlpZiAodHhfY29tcGxldGUgIT0gMCkKKwkJeGVtYWNsaXRlX3R4X2hhbmRsZXIoZGV2KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisgKiB4ZW1hY2xpdGVfb3BlbiAtIE9wZW4gdGhlIG5ldHdvcmsgZGV2aWNlCisgKiBAZGV2OglQb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgTUFDIGFkZHJlc3MsIHJlcXVlc3RzIGFuIElSUSBhbmQgZW5hYmxlcyBpbnRlcnJ1cHRzCisgKiBmb3IgdGhlIEVtYWNsaXRlIGRldmljZSBhbmQgc3RhcnRzIHRoZSBUeCBxdWV1ZS4KKyAqLworc3RhdGljIGludCB4ZW1hY2xpdGVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gKHN0cnVjdCBuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmV0dmFsOworCisJLyogSnVzdCB0byBiZSBzYWZlLCBzdG9wIHRoZSBkZXZpY2UgZmlyc3QgKi8KKwl4ZW1hY2xpdGVfZGlzYWJsZV9pbnRlcnJ1cHRzKGxwKTsKKworCS8qIFNldCB0aGUgTUFDIGFkZHJlc3MgZWFjaCB0aW1lIG9wZW5lZCAqLworCXhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3MobHAsIGRldi0+ZGV2X2FkZHIpOworCisJLyogR3JhYiB0aGUgSVJRICovCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZ4ZW1hY2xpdGVfaW50ZXJydXB0LCAwLCBkZXYtPm5hbWUsIGRldik7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZscC0+bmRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIGludGVycnVwdCAlZFxuIiwKKwkJCWRldi0+aXJxKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBFbmFibGUgSW50ZXJydXB0cyAqLworCXhlbWFjbGl0ZV9lbmFibGVfaW50ZXJydXB0cyhscCk7CisKKwkvKiBXZSdyZSByZWFkeSB0byBnbyAqLworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB4ZW1hY2xpdGVfY2xvc2UgLSBDbG9zZSB0aGUgbmV0d29yayBkZXZpY2UKKyAqIEBkZXY6CVBvaW50ZXIgdG8gdGhlIG5ldHdvcmsgZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiBzdG9wcyB0aGUgVHggcXVldWUsIGRpc2FibGVzIGludGVycnVwdHMgYW5kIGZyZWVzIHRoZSBJUlEgZm9yCisgKiB0aGUgRW1hY2xpdGUgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHhlbWFjbGl0ZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gKHN0cnVjdCBuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwl4ZW1hY2xpdGVfZGlzYWJsZV9pbnRlcnJ1cHRzKGxwKTsKKwlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9nZXRfc3RhdHMgLSBHZXQgdGhlIHN0YXRzIGZvciB0aGUgbmV0X2RldmljZQorICogQGRldjoJUG9pbnRlciB0byB0aGUgbmV0d29yayBkZXZpY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlICduZXRfZGV2aWNlX3N0YXRzJyBzdHJ1Y3R1cmUgZm9yIHRoZQorICogZ2l2ZW4gbmV0d29yayBkZXZpY2UuIFRoaXMgc3RydWN0dXJlIGhvbGRzIHVzYWdlIHN0YXRpc3RpY3MgZm9yIHRoZSBuZXR3b3JrCisgKiBkZXZpY2UuCisgKgorICogUmV0dXJuOglQb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlX3N0YXRzIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp4ZW1hY2xpdGVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuICZkZXYtPnN0YXRzOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9zZW5kIC0gVHJhbnNtaXQgYSBmcmFtZQorICogQG9yaWdfc2tiOglQb2ludGVyIHRvIHRoZSBzb2NrZXQgYnVmZmVyIHRvIGJlIHRyYW5zbWl0dGVkCisgKiBAZGV2OglQb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBUeCBidWZmZXIgb2YgdGhlIEVtYWNsaXRlIGRldmljZSBpcyBmcmVlIHRvIHNlbmQKKyAqIGRhdGEuIElmIHNvLCBpdCBmaWxscyB0aGUgVHggYnVmZmVyIHdpdGggZGF0YSBmcm9tIHNvY2tldCBidWZmZXIgZGF0YSwKKyAqIHVwZGF0ZXMgdGhlIHN0YXRzIGFuZCBmcmVlcyB0aGUgc29ja2V0IGJ1ZmZlci4gVGhlIFR4IGNvbXBsZXRpb24gaXMgc2lnbmFsZWQKKyAqIGJ5IGFuIGludGVycnVwdC4gSWYgdGhlIFR4IGJ1ZmZlciBpc24ndCBmcmVlLCB0aGVuIHRoZSBzb2NrZXQgYnVmZmVyIGlzCisgKiBkZWZlcnJlZCBhbmQgdGhlIFR4IHF1ZXVlIGlzIHN0b3BwZWQgc28gdGhhdCB0aGUgZGVmZXJyZWQgc29ja2V0IGJ1ZmZlciBjYW4KKyAqIGJlIHRyYW5zbWl0dGVkIHdoZW4gdGhlIEVtYWNsaXRlIGRldmljZSBpcyBmcmVlIHRvIHRyYW5zbWl0IGRhdGEuCisgKgorICogUmV0dXJuOgkwLCBhbHdheXMuCisgKi8KK3N0YXRpYyBpbnQgeGVtYWNsaXRlX3NlbmQoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gKHN0cnVjdCBuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsZW4gPSBvcmlnX3NrYi0+bGVuOworCisJbmV3X3NrYiA9IG9yaWdfc2tiOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5yZXNldF9sb2NrLCBmbGFncyk7CisJaWYgKHhlbWFjbGl0ZV9zZW5kX2RhdGEobHAsICh1OCAqKSBuZXdfc2tiLT5kYXRhLCBsZW4pICE9IDApIHsKKwkJLyogSWYgdGhlIEVtYWNsaXRlIFR4IGJ1ZmZlciBpcyBidXN5LCBzdG9wIHRoZSBUeCBxdWV1ZSBhbmQKKwkJICogZGVmZXIgdGhlIHNrYiBmb3IgdHJhbnNtaXNzaW9uIGF0IGEgbGF0ZXIgcG9pbnQgd2hlbiB0aGUKKwkJICogY3VycmVudCB0cmFuc21pc3Npb24gaXMgY29tcGxldGUgKi8KKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlscC0+ZGVmZXJyZWRfc2tiID0gbmV3X3NrYjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPnJlc2V0X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5yZXNldF9sb2NrLCBmbGFncyk7CisKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKKwlkZXZfa2ZyZWVfc2tiKG5ld19za2IpOworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogeGVtYWNsaXRlX2lvY3RsIC0gUGVyZm9ybSBJTyBDb250cm9sIG9wZXJhdGlvbnMgb24gdGhlIG5ldHdvcmsgZGV2aWNlCisgKiBAZGV2OglQb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZQorICogQHJxOgkJUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHJlcXVlc3Qgc3RydWN0dXJlCisgKiBAY21kOglJT0NUTCBjb21tYW5kCisgKgorICogVGhlIG9ubHkgSU9DVEwgb3BlcmF0aW9uIHN1cHBvcnRlZCBieSB0aGlzIGZ1bmN0aW9uIGlzIHNldHRpbmcgdGhlIE1BQworICogYWRkcmVzcy4gQW4gZXJyb3IgaXMgcmVwb3J0ZWQgaWYgYW55IG90aGVyIG9wZXJhdGlvbnMgYXJlIHJlcXVlc3RlZC4KKyAqCisgKiBSZXR1cm46CTAgdG8gaW5kaWNhdGUgc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB4ZW1hY2xpdGVfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGh3X2FkZHJfZGF0YSAqaHdfYWRkciA9IChzdHJ1Y3QgaHdfYWRkcl9kYXRhICopICZycS0+aWZyX2h3YWRkcjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DRVRIVE9PTDoKKwkJcmV0dXJuIC1FSU87CisKKwljYXNlIFNJT0NTSUZIV0FERFI6CisJCWRldl9lcnIoJmxwLT5uZGV2LT5kZXYsICJTSU9DU0lGSFdBRERSXG4iKTsKKworCQkvKiBDb3B5IE1BQyBhZGRyZXNzIGluIGZyb20gdXNlciBzcGFjZSAqLworCQljb3B5X2Zyb21fdXNlcigodm9pZCBfX2ZvcmNlICopIGRldi0+ZGV2X2FkZHIsCisJCQkgICAgICAgKHZvaWQgX191c2VyIF9fZm9yY2UgKikgaHdfYWRkciwKKwkJCSAgICAgICBJRkhXQUREUkxFTik7CisJCXhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3MobHAsIGRldi0+ZGV2X2FkZHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogeGVtYWNsaXRlX3JlbW92ZV9uZGV2IC0gRnJlZSB0aGUgbmV0d29yayBkZXZpY2UKKyAqIEBuZGV2OglQb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZSB0byBiZSBmcmVlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gdW4gbWFwcyB0aGUgSU8gcmVnaW9uIG9mIHRoZSBFbWFjbGl0ZSBkZXZpY2UgYW5kIGZyZWVzIHRoZSBuZXQKKyAqIGRldmljZS4KKyAqLworc3RhdGljIHZvaWQgeGVtYWNsaXRlX3JlbW92ZV9uZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCWlmIChuZGV2KSB7CisJCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gKHN0cnVjdCBuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYobmRldik7CisKKwkJaWYgKGxwLT5iYXNlX2FkZHIpCisJCQlpb3VubWFwKCh2b2lkIF9faW9tZW0gX19mb3JjZSAqKSAobHAtPmJhc2VfYWRkcikpOworCQlmcmVlX25ldGRldihuZGV2KTsKKwl9Cit9CisKKy8qKgorICogZ2V0X2Jvb2wgLSBHZXQgYSBwYXJhbWV0ZXIgZnJvbSB0aGUgT0YgZGV2aWNlCisgKiBAb2ZkZXY6CVBvaW50ZXIgdG8gT0YgZGV2aWNlIHN0cnVjdHVyZQorICogQHM6CQlQcm9wZXJ0eSB0byBiZSByZXRyaWV2ZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGxvb2tzIGZvciBhIHByb3BlcnR5IGluIHRoZSBkZXZpY2Ugbm9kZSBhbmQgcmV0dXJucyB0aGUgdmFsdWUKKyAqIG9mIHRoZSBwcm9wZXJ0eSBpZiBpdHMgZm91bmQgb3IgMCBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGZvdW5kLgorICoKKyAqIFJldHVybjoJVmFsdWUgb2YgdGhlIHBhcmFtZXRlciBpZiB0aGUgcGFyYW1ldGVyIGlzIGZvdW5kLCBvciAwIG90aGVyd2lzZQorICovCitzdGF0aWMgYm9vbCBnZXRfYm9vbChzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwgY29uc3QgY2hhciAqcykKK3sKKwl1MzIgKnAgPSAodTMyICopb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCBzLCBOVUxMKTsKKworCWlmIChwKSB7CisJCXJldHVybiAoYm9vbCkqcDsKKwl9IGVsc2UgeworCQlkZXZfd2Fybigmb2ZkZXYtPmRldiwgIlBhcmFtZXRlciAlcyBub3QgZm91bmQsIgorCQkJImRlZmF1bHRpbmcgdG8gZmFsc2VcbiIsIHMpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgeGVtYWNsaXRlX25ldGRldl9vcHM7CisKKy8qKgorICogeGVtYWNsaXRlX29mX3Byb2JlIC0gUHJvYmUgbWV0aG9kIGZvciB0aGUgRW1hY2xpdGUgZGV2aWNlLgorICogQG9mZGV2OglQb2ludGVyIHRvIE9GIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBtYXRjaDoJUG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHVzZWQgZm9yIG1hdGNoaW5nIGEgZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiBwcm9iZXMgZm9yIHRoZSBFbWFjbGl0ZSBkZXZpY2UgaW4gdGhlIGRldmljZSB0cmVlLgorICogSXQgaW5pdGlhbGl6ZXMgdGhlIGRyaXZlciBkYXRhIHN0cnVjdHVyZSBhbmQgdGhlIGhhcmR3YXJlLCBzZXRzIHRoZSBNQUMKKyAqIGFkZHJlc3MgYW5kIHJlZ2lzdGVycyB0aGUgbmV0d29yayBkZXZpY2UuCisgKgorICogUmV0dXJuOgkwLCBpZiB0aGUgZHJpdmVyIGlzIGJvdW5kIHRvIHRoZSBFbWFjbGl0ZSBkZXZpY2UsIG9yCisgKgkJYSBuZWdhdGl2ZSBlcnJvciBpZiB0aGVyZSBpcyBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCB4ZW1hY2xpdGVfb2ZfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCByZXNvdXJjZSByX2lycTsgLyogSW50ZXJydXB0IHJlc291cmNlcyAqLworCXN0cnVjdCByZXNvdXJjZSByX21lbTsgLyogSU8gbWVtIHJlc291cmNlcyAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IE5VTEw7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm9mZGV2LT5kZXY7CisJY29uc3Qgdm9pZCAqbWFjX2FkZHJlc3M7CisKKwlpbnQgcmMgPSAwOworCisJZGV2X2luZm8oZGV2LCAiRGV2aWNlIFRyZWUgUHJvYmluZ1xuIik7CisKKwkvKiBHZXQgaW9zcGFjZSBmb3IgdGhlIGRldmljZSAqLworCXJjID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShvZmRldi0+bm9kZSwgMCwgJnJfbWVtKTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIGFkZHJlc3NcbiIpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogR2V0IElSUSBmb3IgdGhlIGRldmljZSAqLworCXJjID0gb2ZfaXJxX3RvX3Jlc291cmNlKG9mZGV2LT5ub2RlLCAwLCAmcl9pcnEpOworCWlmIChyYyA9PSBOT19JUlEpIHsKKwkJZGV2X2VycihkZXYsICJubyBJUlEgZm91bmRcbiIpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogQ3JlYXRlIGFuIGV0aGVybmV0IGRldmljZSBpbnN0YW5jZSAqLworCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG5ldF9sb2NhbCkpOworCWlmICghbmRldikgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG5kZXYpOworCisJbmRldi0+aXJxID0gcl9pcnEuc3RhcnQ7CisJbmRldi0+bWVtX3N0YXJ0ID0gcl9tZW0uc3RhcnQ7CisJbmRldi0+bWVtX2VuZCA9IHJfbWVtLmVuZDsKKworCWxwID0gbmV0ZGV2X3ByaXYobmRldik7CisJbHAtPm5kZXYgPSBuZGV2OworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24obmRldi0+bWVtX3N0YXJ0LAorCQkJCW5kZXYtPm1lbV9lbmQgLSBuZGV2LT5tZW1fc3RhcnQgKyAxLAorCQkJCURSSVZFUl9OQU1FKSkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGxvY2sgbWVtb3J5IHJlZ2lvbiBhdCAlcFxuIiwKKwkJCSh2b2lkICopbmRldi0+bWVtX3N0YXJ0KTsKKwkJcmMgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3IyOworCX0KKworCS8qIEdldCB0aGUgdmlydHVhbCBiYXNlIGFkZHJlc3MgZm9yIHRoZSBkZXZpY2UgKi8KKwlscC0+YmFzZV9hZGRyID0gaW9yZW1hcChyX21lbS5zdGFydCwgcl9tZW0uZW5kIC0gcl9tZW0uc3RhcnQgKyAxKTsKKwlpZiAoTlVMTCA9PSBscC0+YmFzZV9hZGRyKSB7CisJCWRldl9lcnIoZGV2LCAiRW1hY0xpdGU6IENvdWxkIG5vdCBhbGxvY2F0ZSBpb21lbVxuIik7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJvcjE7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmxwLT5yZXNldF9sb2NrKTsKKwlscC0+bmV4dF90eF9idWZfdG9fdXNlID0gMHgwOworCWxwLT5uZXh0X3J4X2J1Zl90b191c2UgPSAweDA7CisJbHAtPnR4X3BpbmdfcG9uZyA9IGdldF9ib29sKG9mZGV2LCAieGxueCx0eC1waW5nLXBvbmciKTsKKwlscC0+cnhfcGluZ19wb25nID0gZ2V0X2Jvb2wob2ZkZXYsICJ4bG54LHJ4LXBpbmctcG9uZyIpOworCW1hY19hZGRyZXNzID0gb2ZfZ2V0X21hY19hZGRyZXNzKG9mZGV2LT5ub2RlKTsKKworCWlmIChtYWNfYWRkcmVzcykKKwkJLyogU2V0IHRoZSBNQUMgYWRkcmVzcy4gKi8KKwkJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBtYWNfYWRkcmVzcywgNik7CisJZWxzZQorCQlkZXZfd2FybihkZXYsICJObyBNQUMgYWRkcmVzcyBmb3VuZFxuIik7CisKKwkvKiBDbGVhciB0aGUgVHggQ1NSJ3MgaW4gY2FzZSB0aGlzIGlzIGEgcmVzdGFydCAqLworCW91dF9iZTMyKGxwLT5iYXNlX2FkZHIgKyBYRUxfVFNSX09GRlNFVCwgMCk7CisJb3V0X2JlMzIobHAtPmJhc2VfYWRkciArIFhFTF9CVUZGRVJfT0ZGU0VUICsgWEVMX1RTUl9PRkZTRVQsIDApOworCisJLyogU2V0IHRoZSBNQUMgYWRkcmVzcyBpbiB0aGUgRW1hY0xpdGUgZGV2aWNlICovCisJeGVtYWNsaXRlX3NldF9tYWNfYWRkcmVzcyhscCwgbmRldi0+ZGV2X2FkZHIpOworCisJZGV2X2luZm8oZGV2LAorCQkgIk1BQyBhZGRyZXNzIGlzIG5vdyAlMng6JTJ4OiUyeDolMng6JTJ4OiUyeFxuIiwKKwkJIG5kZXYtPmRldl9hZGRyWzBdLCBuZGV2LT5kZXZfYWRkclsxXSwKKwkJIG5kZXYtPmRldl9hZGRyWzJdLCBuZGV2LT5kZXZfYWRkclszXSwKKwkJIG5kZXYtPmRldl9hZGRyWzRdLCBuZGV2LT5kZXZfYWRkcls1XSk7CisKKwluZGV2LT5uZXRkZXZfb3BzID0gJnhlbWFjbGl0ZV9uZXRkZXZfb3BzOworCW5kZXYtPmZsYWdzICY9IH5JRkZfTVVMVElDQVNUOworCW5kZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKKworCS8qIEZpbmFsbHksIHJlZ2lzdGVyIHRoZSBkZXZpY2UgKi8KKwlyYyA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKKwlpZiAocmMpIHsKKwkJZGV2X2VycihkZXYsCisJCQkiQ2Fubm90IHJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlLCBhYm9ydGluZ1xuIik7CisJCWdvdG8gZXJyb3IxOworCX0KKworCWRldl9pbmZvKGRldiwKKwkJICJYaWxpbnggRW1hY0xpdGUgYXQgMHglMDhYIG1hcHBlZCB0byAweCUwOFgsIGlycT0lZFxuIiwKKwkJICh1bnNpZ25lZCBpbnQgX19mb3JjZSluZGV2LT5tZW1fc3RhcnQsCisJCSAodW5zaWduZWQgaW50IF9fZm9yY2UpbHAtPmJhc2VfYWRkciwgbmRldi0+aXJxKTsKKwlyZXR1cm4gMDsKKworZXJyb3IxOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihuZGV2LT5tZW1fc3RhcnQsIHJfbWVtLmVuZCAtIHJfbWVtLnN0YXJ0ICsgMSk7CisKK2Vycm9yMjoKKwl4ZW1hY2xpdGVfcmVtb3ZlX25kZXYobmRldik7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9vZl9yZW1vdmUgLSBVbmJpbmQgdGhlIGRyaXZlciBmcm9tIHRoZSBFbWFjbGl0ZSBkZXZpY2UuCisgKiBAb2ZfZGV2OglQb2ludGVyIHRvIE9GIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpZiBhIGRldmljZSBpcyBwaHlzaWNhbGx5IHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtIG9yCisgKiBpZiB0aGUgZHJpdmVyIG1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZC4gSXQgZnJlZXMgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgdG8KKyAqIHRoZSBkZXZpY2UuCisgKgorICogUmV0dXJuOgkwLCBhbHdheXMuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZleGl0IHhlbWFjbGl0ZV9vZl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZfZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZvZl9kZXYtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CisKKwlyZWxlYXNlX21lbV9yZWdpb24obmRldi0+bWVtX3N0YXJ0LCBuZGV2LT5tZW1fZW5kLW5kZXYtPm1lbV9zdGFydCArIDEpOworCisJeGVtYWNsaXRlX3JlbW92ZV9uZGV2KG5kZXYpOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB4ZW1hY2xpdGVfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0geGVtYWNsaXRlX29wZW4sCisJLm5kb19zdG9wCQk9IHhlbWFjbGl0ZV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0geGVtYWNsaXRlX3NlbmQsCisJLm5kb19kb19pb2N0bAkJPSB4ZW1hY2xpdGVfaW9jdGwsCisJLm5kb190eF90aW1lb3V0CQk9IHhlbWFjbGl0ZV90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IHhlbWFjbGl0ZV9nZXRfc3RhdHMsCit9OworCisvKiBNYXRjaCB0YWJsZSBmb3IgT0YgcGxhdGZvcm0gYmluZGluZyAqLworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgeGVtYWNsaXRlX29mX21hdGNoW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInhsbngsb3BiLWV0aGVybmV0bGl0ZS0xLjAxLmEiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAieGxueCxvcGItZXRoZXJuZXRsaXRlLTEuMDEuYiIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1ldGhlcm5ldGxpdGUtMS4wMC5hIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLWV0aGVybmV0bGl0ZS0yLjAwLmEiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtZXRoZXJuZXRsaXRlLTIuMDEuYSIsIH0sCisJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHhlbWFjbGl0ZV9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHhlbWFjbGl0ZV9vZl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gRFJJVkVSX05BTUUsCisJLm1hdGNoX3RhYmxlCT0geGVtYWNsaXRlX29mX21hdGNoLAorCS5wcm9iZQkJPSB4ZW1hY2xpdGVfb2ZfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh4ZW1hY2xpdGVfb2ZfcmVtb3ZlKSwKK307CisKKy8qKgorICogeGdwaW9wc3NfaW5pdCAtIEluaXRpYWwgZHJpdmVyIHJlZ2lzdHJhdGlvbiBjYWxsCisgKgorICogUmV0dXJuOgkwIHVwb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciB1cG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHhlbWFjbGl0ZV9pbml0KHZvaWQpCit7CisJLyogTm8ga2VybmVsIGJvb3Qgb3B0aW9ucyB1c2VkLCB3ZSBqdXN0IG5lZWQgdG8gcmVnaXN0ZXIgdGhlIGRyaXZlciAqLworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnhlbWFjbGl0ZV9vZl9kcml2ZXIpOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9jbGVhbnVwIC0gRHJpdmVyIHVuLXJlZ2lzdHJhdGlvbiBjYWxsCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCB4ZW1hY2xpdGVfY2xlYW51cCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ4ZW1hY2xpdGVfb2ZfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoeGVtYWNsaXRlX2luaXQpOworbW9kdWxlX2V4aXQoeGVtYWNsaXRlX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCJYaWxpbngsIEluYy4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiWGlsaW54IEV0aGVybmV0IE1BQyBMaXRlIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveHRzb25pYy5jIGIvZHJpdmVycy9uZXQveHRzb25pYy5jCmluZGV4IDVhNGFkMTUuLjBjNDQxMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3h0c29uaWMuYworKysgYi9kcml2ZXJzL25ldC94dHNvbmljLmMKQEAgLTIzOSw3ICsyMzksNyBAQAogICogQWN0dWFsbHkgcHJvYmluZyBpcyBzdXBlcmZsdW91cyBidXQgd2UncmUgcGFyYW5vaWQuCiAgKi8KIAotaW50IF9faW5pdCB4dHNvbmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitpbnQgX19kZXZpbml0IHh0c29uaWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzb25pY19sb2NhbCAqbHA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYyBiL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jCmluZGV4IGMyZmQ2MTguLjQwYWQwZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jCkBAIC0zNDcsNyArMzQ3LDggQEAKIHN0YXRpYyB2b2lkIHllbGxvd2Zpbl90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIHZvaWQgeWVsbG93ZmluX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHllbGxvd2Zpbl9pbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHllbGxvd2Zpbl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHllbGxvd2Zpbl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHllbGxvd2Zpbl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKIHN0YXRpYyBpbnQgeWVsbG93ZmluX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgeWVsbG93ZmluX2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbnRyX3N0YXR1cyk7CkBAIC04MTYsNyArODE3LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB5ZWxsb3dmaW5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHllbGxvd2Zpbl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHllbGxvd2Zpbl9wcml2YXRlICp5cCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgZW50cnk7CkBAIC04MzgsNyArODQwLDcgQEAKIAkJCWlmIChza2JfcGFkdG8oc2tiLCBsZW4pKSB7CiAJCQkJeXAtPnR4X3NrYnVmZltlbnRyeV0gPSBOVUxMOwogCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJfQogCQl9CiAJfQpAQCAtODkyLDcgKzg5NCw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogWWVsbG93ZmluIHRyYW5zbWl0IGZyYW1lICMlZCBxdWV1ZWQgaW4gc2xvdCAlZC5cbiIsCiAJCQkgICBkZXYtPm5hbWUsIHlwLT5jdXJfdHgsIGVudHJ5KTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgYWxsIG9mIHRoZSBSeCB0aHJlYWQgd29yayBhbmQgY2xlYW5zIHVwCkBAIC0xMzYzLDggKzEzNjUsNiBAQAogCQlyZXR1cm4gMDsKIAogCWNhc2UgU0lPQ1NNSUlSRUc6CQkvKiBXcml0ZSBNSUkgUEhZIHJlZ2lzdGVyLiAqLwotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwogCQlpZiAoZGF0YS0+cGh5X2lkID09IG5wLT5waHlzWzBdKSB7CiAJCQl1MTYgdmFsdWUgPSBkYXRhLT52YWxfaW47CiAJCQlzd2l0Y2ggKGRhdGEtPnJlZ19udW0pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3puZXQuYyBiL2RyaXZlcnMvbmV0L3puZXQuYwppbmRleCAwYTY5OTJkLi5hMDM4NGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC96bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvem5ldC5jCkBAIC0xNTYsNyArMTU2LDggQEAKIH07CiAKIHN0YXRpYyBpbnQJem5ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludAl6bmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHpuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3Qgem5ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkCXpuZXRfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50CXpuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC01MzQsNyArNTM1LDcgQEAKIAluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwogfQogCi1zdGF0aWMgaW50IHpuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB6bmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCXN0cnVjdCB6bmV0X3ByaXZhdGUgKnpuZXQgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNTQ2LDcgKzU0Nyw3IEBACiAKIAlpZiAobGVuZ3RoIDwgRVRIX1pMRU4pIHsKIAkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJbGVuZ3RoID0gRVRIX1pMRU47CiAJfQogCkBAIC02MDAsNyArNjAxLDcgQEAKIAkJICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0dGVyIHF1ZXVlZCwgbGVuZ3RoICVkLlxuIiwgZGV2LT5uYW1lLCBsZW5ndGgpOwogCX0KIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIFpORVQgaW50ZXJydXB0IGhhbmRsZXIuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5jCmluZGV4IDI0MjI1N2IuLmE3YWFlMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5jCkBAIC0yMSw3ICsyMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKICNpbmNsdWRlICJldmVudF9idWZmZXIuaCIKQEAgLTQwNyw2ICs0MDYsMjEgQEAKIAlyZXR1cm4gb3BfY3B1X2J1ZmZlcl9hZGRfZGF0YShlbnRyeSwgdmFsKTsKIH0KIAoraW50IG9wcm9maWxlX2FkZF9kYXRhNjQoc3RydWN0IG9wX2VudHJ5ICplbnRyeSwgdTY0IHZhbCkKK3sKKwlpZiAoIWVudHJ5LT5ldmVudCkKKwkJcmV0dXJuIDA7CisJaWYgKG9wX2NwdV9idWZmZXJfZ2V0X3NpemUoZW50cnkpIDwgMikKKwkJLyoKKwkJICogdGhlIGZ1bmN0aW9uIHJldHVybnMgMCB0byBpbmRpY2F0ZSBhIHRvbyBzbWFsbAorCQkgKiBidWZmZXIsIGV2ZW4gaWYgdGhlcmUgaXMgc29tZSBzcGFjZSBsZWZ0CisJCSAqLworCQlyZXR1cm4gMDsKKwlpZiAoIW9wX2NwdV9idWZmZXJfYWRkX2RhdGEoZW50cnksICh1MzIpdmFsKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIG9wX2NwdV9idWZmZXJfYWRkX2RhdGEoZW50cnksICh1MzIpKHZhbCA+PiAzMikpOworfQorCiBpbnQgb3Byb2ZpbGVfd3JpdGVfY29tbWl0KHN0cnVjdCBvcF9lbnRyeSAqZW50cnkpCiB7CiAJaWYgKCFlbnRyeS0+ZXZlbnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL29wcm9mLmMgYi9kcml2ZXJzL29wcm9maWxlL29wcm9mLmMKaW5kZXggM2NmZmNlOS4uZGM4YTA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZi5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuYwpAQCAtMTIsNiArMTIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tdXRleC5oPgogCiAjaW5jbHVkZSAib3Byb2YuaCIKQEAgLTg3LDYgKzg5LDY5IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmZGVmIENPTkZJR19PUFJPRklMRV9FVkVOVF9NVUxUSVBMRVgKKworc3RhdGljIHZvaWQgc3dpdGNoX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKHN3aXRjaF93b3JrLCBzd2l0Y2hfd29ya2VyKTsKKworc3RhdGljIHZvaWQgc3RhcnRfc3dpdGNoX3dvcmtlcih2b2lkKQoreworCWlmIChvcHJvZmlsZV9vcHMuc3dpdGNoX2V2ZW50cykKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzd2l0Y2hfd29yaywgb3Byb2ZpbGVfdGltZV9zbGljZSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0b3Bfc3dpdGNoX3dvcmtlcih2b2lkKQoreworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc3dpdGNoX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBzd2l0Y2hfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpZiAob3Byb2ZpbGVfb3BzLnN3aXRjaF9ldmVudHMoKSkKKwkJcmV0dXJuOworCisJYXRvbWljX2luYygmb3Byb2ZpbGVfc3RhdHMubXVsdGlwbGV4X2NvdW50ZXIpOworCXN0YXJ0X3N3aXRjaF93b3JrZXIoKTsKK30KKworLyogVXNlciBpbnB1dHMgaW4gbXMsIGNvbnZlcnRzIHRvIGppZmZpZXMgKi8KK2ludCBvcHJvZmlsZV9zZXRfdGltZW91dCh1bnNpZ25lZCBsb25nIHZhbF9tc2VjKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgdGltZV9zbGljZTsKKworCW11dGV4X2xvY2soJnN0YXJ0X211dGV4KTsKKworCWlmIChvcHJvZmlsZV9zdGFydGVkKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFvcHJvZmlsZV9vcHMuc3dpdGNoX2V2ZW50cykgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwl0aW1lX3NsaWNlID0gbXNlY3NfdG9famlmZmllcyh2YWxfbXNlYyk7CisJaWYgKHRpbWVfc2xpY2UgPT0gTUFYX0pJRkZZX09GRlNFVCkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlvcHJvZmlsZV90aW1lX3NsaWNlID0gdGltZV9zbGljZTsKKworb3V0OgorCW11dGV4X3VubG9jaygmc3RhcnRfbXV0ZXgpOworCXJldHVybiBlcnI7CisKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X3N3aXRjaF93b3JrZXIodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcF9zd2l0Y2hfd29ya2VyKHZvaWQpIHsgfQorCisjZW5kaWYKIAogLyogQWN0dWFsbHkgc3RhcnQgcHJvZmlsaW5nIChlY2hvIDE+L2Rldi9vcHJvZmlsZS9lbmFibGUpICovCiBpbnQgb3Byb2ZpbGVfc3RhcnQodm9pZCkKQEAgLTEwOCw2ICsxNzMsOCBAQAogCWlmICgoZXJyID0gb3Byb2ZpbGVfb3BzLnN0YXJ0KCkpKQogCQlnb3RvIG91dDsKIAorCXN0YXJ0X3N3aXRjaF93b3JrZXIoKTsKKwogCW9wcm9maWxlX3N0YXJ0ZWQgPSAxOwogb3V0OgogCW11dGV4X3VubG9jaygmc3RhcnRfbXV0ZXgpOwpAQCAtMTIzLDYgKzE5MCw5IEBACiAJCWdvdG8gb3V0OwogCW9wcm9maWxlX29wcy5zdG9wKCk7CiAJb3Byb2ZpbGVfc3RhcnRlZCA9IDA7CisKKwlzdG9wX3N3aXRjaF93b3JrZXIoKTsKKwogCS8qIHdha2UgdXAgdGhlIGRhZW1vbiB0byByZWFkIHdoYXQgcmVtYWlucyAqLwogCXdha2VfdXBfYnVmZmVyX3dhaXRlcigpOwogb3V0OgpAQCAtMTU1LDcgKzIyNSw2IEBACiAJbXV0ZXhfdW5sb2NrKCZzdGFydF9tdXRleCk7CiB9CiAKLQogaW50IG9wcm9maWxlX3NldF9iYWNrdHJhY2UodW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJaW50IGVyciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL29wcm9mLmggYi9kcml2ZXJzL29wcm9maWxlL29wcm9mLmgKaW5kZXggYzI4OGQzYy4uY2I5MmY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZi5oCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuaApAQCAtMjQsNiArMjQsOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb3Byb2ZpbGVfYnVmZmVyX3NpemU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBvcHJvZmlsZV9jcHVfYnVmZmVyX3NpemU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBvcHJvZmlsZV9idWZmZXJfd2F0ZXJzaGVkOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb3Byb2ZpbGVfdGltZV9zbGljZTsKKwogZXh0ZXJuIHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zIG9wcm9maWxlX29wczsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG9wcm9maWxlX3N0YXJ0ZWQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBvcHJvZmlsZV9iYWNrdHJhY2VfZGVwdGg7CkBAIC0zNSw1ICszNyw2IEBACiB2b2lkIG9wcm9maWxlX3RpbWVyX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcyk7CiAKIGludCBvcHJvZmlsZV9zZXRfYmFja3RyYWNlKHVuc2lnbmVkIGxvbmcgZGVwdGgpOworaW50IG9wcm9maWxlX3NldF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgdGltZSk7CiAKICNlbmRpZiAvKiBPUFJPRl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlX2ZpbGVzLmMgYi9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlX2ZpbGVzLmMKaW5kZXggNWQzNmZmYy4uYmJkNzUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9maWxlcy5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVfZmlsZXMuYwpAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAKICNpbmNsdWRlICJldmVudF9idWZmZXIuaCIKICNpbmNsdWRlICJvcHJvZmlsZV9zdGF0cy5oIgpAQCAtMTcsMTAgKzE4LDUxIEBACiAjZGVmaW5lIEJVRkZFUl9TSVpFX0RFRkFVTFQJCTEzMTA3MgogI2RlZmluZSBDUFVfQlVGRkVSX1NJWkVfREVGQVVMVAkJODE5MgogI2RlZmluZSBCVUZGRVJfV0FURVJTSEVEX0RFRkFVTFQJMzI3NjgJLyogRklYTUU6IHR1bmUgKi8KKyNkZWZpbmUgVElNRV9TTElDRV9ERUZBVUxUCQkxCiAKIHVuc2lnbmVkIGxvbmcgb3Byb2ZpbGVfYnVmZmVyX3NpemU7CiB1bnNpZ25lZCBsb25nIG9wcm9maWxlX2NwdV9idWZmZXJfc2l6ZTsKIHVuc2lnbmVkIGxvbmcgb3Byb2ZpbGVfYnVmZmVyX3dhdGVyc2hlZDsKK3Vuc2lnbmVkIGxvbmcgb3Byb2ZpbGVfdGltZV9zbGljZTsKKworI2lmZGVmIENPTkZJR19PUFJPRklMRV9FVkVOVF9NVUxUSVBMRVgKKworc3RhdGljIHNzaXplX3QgdGltZW91dF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQoreworCXJldHVybiBvcHJvZmlsZWZzX3Vsb25nX3RvX3VzZXIoamlmZmllc190b19tc2VjcyhvcHJvZmlsZV90aW1lX3NsaWNlKSwKKwkJCQkJYnVmLCBjb3VudCwgb2Zmc2V0KTsKK30KKworCitzdGF0aWMgc3NpemVfdCB0aW1lb3V0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIGNvbnN0IF9fdXNlciAqYnVmLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXR2YWw7CisKKwlpZiAoKm9mZnNldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR2YWwgPSBvcHJvZmlsZWZzX3Vsb25nX2Zyb21fdXNlcigmdmFsLCBidWYsIGNvdW50KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gb3Byb2ZpbGVfc2V0X3RpbWVvdXQodmFsKTsKKworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRpbWVvdXRfZm9wcyA9IHsKKwkucmVhZAkJPSB0aW1lb3V0X3JlYWQsCisJLndyaXRlCQk9IHRpbWVvdXRfd3JpdGUsCit9OworCisjZW5kaWYKKwogCiBzdGF0aWMgc3NpemVfdCBkZXB0aF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewpAQCAtMTI5LDYgKzE3MSw3IEBACiAJb3Byb2ZpbGVfYnVmZmVyX3NpemUgPQkJQlVGRkVSX1NJWkVfREVGQVVMVDsKIAlvcHJvZmlsZV9jcHVfYnVmZmVyX3NpemUgPQlDUFVfQlVGRkVSX1NJWkVfREVGQVVMVDsKIAlvcHJvZmlsZV9idWZmZXJfd2F0ZXJzaGVkID0JQlVGRkVSX1dBVEVSU0hFRF9ERUZBVUxUOworCW9wcm9maWxlX3RpbWVfc2xpY2UgPQkJbXNlY3NfdG9famlmZmllcyhUSU1FX1NMSUNFX0RFRkFVTFQpOwogCiAJb3Byb2ZpbGVmc19jcmVhdGVfZmlsZShzYiwgcm9vdCwgImVuYWJsZSIsICZlbmFibGVfZm9wcyk7CiAJb3Byb2ZpbGVmc19jcmVhdGVfZmlsZV9wZXJtKHNiLCByb290LCAiZHVtcCIsICZkdW1wX2ZvcHMsIDA2NjYpOwpAQCAtMTM5LDYgKzE4Miw5IEBACiAJb3Byb2ZpbGVmc19jcmVhdGVfZmlsZShzYiwgcm9vdCwgImNwdV90eXBlIiwgJmNwdV90eXBlX2ZvcHMpOwogCW9wcm9maWxlZnNfY3JlYXRlX2ZpbGUoc2IsIHJvb3QsICJiYWNrdHJhY2VfZGVwdGgiLCAmZGVwdGhfZm9wcyk7CiAJb3Byb2ZpbGVmc19jcmVhdGVfZmlsZShzYiwgcm9vdCwgInBvaW50ZXJfc2l6ZSIsICZwb2ludGVyX3NpemVfZm9wcyk7CisjaWZkZWYgQ09ORklHX09QUk9GSUxFX0VWRU5UX01VTFRJUExFWAorCW9wcm9maWxlZnNfY3JlYXRlX2ZpbGUoc2IsIHJvb3QsICJ0aW1lX3NsaWNlIiwgJnRpbWVvdXRfZm9wcyk7CisjZW5kaWYKIAlvcHJvZmlsZV9jcmVhdGVfc3RhdHNfZmlsZXMoc2IsIHJvb3QpOwogCWlmIChvcHJvZmlsZV9vcHMuY3JlYXRlX2ZpbGVzKQogCQlvcHJvZmlsZV9vcHMuY3JlYXRlX2ZpbGVzKHNiLCByb290KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVfc3RhdHMuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVfc3RhdHMuYwppbmRleCAzYzIyNzBhLi42MTY4OWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlX3N0YXRzLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9zdGF0cy5jCkBAIC0zNCw2ICszNCw3IEBACiAJYXRvbWljX3NldCgmb3Byb2ZpbGVfc3RhdHMuc2FtcGxlX2xvc3Rfbm9fbWFwcGluZywgMCk7CiAJYXRvbWljX3NldCgmb3Byb2ZpbGVfc3RhdHMuZXZlbnRfbG9zdF9vdmVyZmxvdywgMCk7CiAJYXRvbWljX3NldCgmb3Byb2ZpbGVfc3RhdHMuYnRfbG9zdF9ub19tYXBwaW5nLCAwKTsKKwlhdG9taWNfc2V0KCZvcHJvZmlsZV9zdGF0cy5tdWx0aXBsZXhfY291bnRlciwgMCk7CiB9CiAKIApAQCAtNzYsNCArNzcsOCBAQAogCQkmb3Byb2ZpbGVfc3RhdHMuZXZlbnRfbG9zdF9vdmVyZmxvdyk7CiAJb3Byb2ZpbGVmc19jcmVhdGVfcm9fYXRvbWljKHNiLCBkaXIsICJidF9sb3N0X25vX21hcHBpbmciLAogCQkmb3Byb2ZpbGVfc3RhdHMuYnRfbG9zdF9ub19tYXBwaW5nKTsKKyNpZmRlZiBDT05GSUdfT1BST0ZJTEVfRVZFTlRfTVVMVElQTEVYCisJb3Byb2ZpbGVmc19jcmVhdGVfcm9fYXRvbWljKHNiLCBkaXIsICJtdWx0aXBsZXhfY291bnRlciIsCisJCSZvcHJvZmlsZV9zdGF0cy5tdWx0aXBsZXhfY291bnRlcik7CisjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVfc3RhdHMuaCBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVfc3RhdHMuaAppbmRleCAzZGEwZDA4Li4wYjU0ZTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlX3N0YXRzLmgKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9zdGF0cy5oCkBAIC0xNyw2ICsxNyw3IEBACiAJYXRvbWljX3Qgc2FtcGxlX2xvc3Rfbm9fbWFwcGluZzsKIAlhdG9taWNfdCBidF9sb3N0X25vX21hcHBpbmc7CiAJYXRvbWljX3QgZXZlbnRfbG9zdF9vdmVyZmxvdzsKKwlhdG9taWNfdCBtdWx0aXBsZXhfY291bnRlcjsKIH07CiAKIGV4dGVybiBzdHJ1Y3Qgb3Byb2ZpbGVfc3RhdF9zdHJ1Y3Qgb3Byb2ZpbGVfc3RhdHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9kbWFyLmMgYi9kcml2ZXJzL3BjaS9kbWFyLmMKaW5kZXggN2IyODdjYi4uYWI5OTc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvZG1hci5jCisrKyBiL2RyaXZlcnMvcGNpL2RtYXIuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGJvb3QuaD4KIAogI3VuZGVmIFBSRUZJWAogI2RlZmluZSBQUkVGSVggIkRNQVI6IgpAQCAtNDEzLDYgKzQxNCwxMiBAQAogCSAqLwogCWRtYXJfdGFibGVfZGV0ZWN0KCk7CiAKKwkvKgorCSAqIEFDUEkgdGFibGVzIG1heSBub3QgYmUgRE1BIHByb3RlY3RlZCBieSB0Ym9vdCwgc28gdXNlIERNQVIgY29weQorCSAqIFNJTklUIHNhdmVkIGluIFNpbml0TWxlRGF0YSBpbiBUWFQgaGVhcCAod2hpY2ggaXMgRE1BIHByb3RlY3RlZCkKKwkgKi8KKwlkbWFyX3RibCA9IHRib290X2dldF9kbWFyX3RhYmxlKGRtYXJfdGJsKTsKKwogCWRtYXIgPSAoc3RydWN0IGFjcGlfdGFibGVfZG1hciAqKWRtYXJfdGJsOwogCWlmICghZG1hcikKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwppbmRleCAyMzE0YWQ3Li41NjIyMjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdGJvb3QuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgInBjaS5oIgpAQCAtMzE4MywxMiArMzE4NCwyMiBAQAogaW50IF9faW5pdCBpbnRlbF9pb21tdV9pbml0KHZvaWQpCiB7CiAJaW50IHJldCA9IDA7CisJaW50IGZvcmNlX29uID0gMDsKIAotCWlmIChkbWFyX3RhYmxlX2luaXQoKSkKLQkJcmV0dXJuIAktRU5PREVWOworCS8qIFZULWQgaXMgcmVxdWlyZWQgZm9yIGEgVFhUL3Rib290IGxhdW5jaCwgc28gZW5mb3JjZSB0aGF0ICovCisJZm9yY2Vfb24gPSB0Ym9vdF9mb3JjZV9pb21tdSgpOwogCi0JaWYgKGRtYXJfZGV2X3Njb3BlX2luaXQoKSkKKwlpZiAoZG1hcl90YWJsZV9pbml0KCkpIHsKKwkJaWYgKGZvcmNlX29uKQorCQkJcGFuaWMoInRib290OiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBETUFSIHRhYmxlXG4iKTsKIAkJcmV0dXJuIAktRU5PREVWOworCX0KKworCWlmIChkbWFyX2Rldl9zY29wZV9pbml0KCkpIHsKKwkJaWYgKGZvcmNlX29uKQorCQkJcGFuaWMoInRib290OiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBETUFSIGRldmljZSBzY29wZVxuIik7CisJCXJldHVybiAJLUVOT0RFVjsKKwl9CiAKIAkvKgogCSAqIENoZWNrIHRoZSBuZWVkIGZvciBETUEtcmVtYXBwaW5nIGluaXRpYWxpemF0aW9uIG5vdy4KQEAgLTMyMDQsNiArMzIxNSw4IEBACiAKIAlyZXQgPSBpbml0X2RtYXJzKCk7CiAJaWYgKHJldCkgeworCQlpZiAoZm9yY2Vfb24pCisJCQlwYW5pYygidGJvb3Q6IEZhaWxlZCB0byBpbml0aWFsaXplIERNQVJzXG4iKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJJT01NVTogZG1hciBpbml0IGZhaWxlZFxuIik7CiAJCXB1dF9pb3ZhX2RvbWFpbigmcmVzZXJ2ZWRfaW92YV9saXN0KTsKIAkJaW9tbXVfZXhpdF9tZW1wb29sKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCA0ZjViODcxLi40NDgwMzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTU1LDE1ICs1NSwxMiBAQAogCXJldHVybiBkZXNjLT5pcnFfMl9pb21tdTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqaXJxXzJfaW9tbXVfYWxsb2Nfbm9kZSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgbm9kZSkKK3N0YXRpYyBzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV8yX2lvbW11X2FsbG9jKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCi0JLyoKLQkgKiBhbGxvYyBpcnEgZGVzYyBpZiBub3QgYWxsb2NhdGVkIGFscmVhZHkuCi0JICovCi0JZGVzYyA9IGlycV90b19kZXNjX2FsbG9jX25vZGUoaXJxLCBub2RlKTsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlpZiAoIWRlc2MpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiY2FuIG5vdCBnZXQgaXJxX2Rlc2MgZm9yICVkXG4iLCBpcnEpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTcyLDE2ICs2OSwxMSBAQAogCWlycV9pb21tdSA9IGRlc2MtPmlycV8yX2lvbW11OwogCiAJaWYgKCFpcnFfaW9tbXUpCi0JCWRlc2MtPmlycV8yX2lvbW11ID0gZ2V0X29uZV9mcmVlX2lycV8yX2lvbW11KG5vZGUpOworCQlkZXNjLT5pcnFfMl9pb21tdSA9IGdldF9vbmVfZnJlZV9pcnFfMl9pb21tdShpcnFfbm9kZShpcnEpKTsKIAogCXJldHVybiBkZXNjLT5pcnFfMl9pb21tdTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqaXJxXzJfaW9tbXVfYWxsb2ModW5zaWduZWQgaW50IGlycSkKLXsKLQlyZXR1cm4gaXJxXzJfaW9tbXVfYWxsb2Nfbm9kZShpcnEsIGNwdV90b19ub2RlKGJvb3RfY3B1X2lkKSk7Ci19Ci0KICNlbHNlIC8qICFDT05GSUdfU1BBUlNFX0lSUSAqLwogCiBzdGF0aWMgc3RydWN0IGlycV8yX2lvbW11IGlycV8yX2lvbW11WFtOUl9JUlFTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwppbmRleCBmZmMxNWU5Li5lNWQ0N2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCkBAIC02MDAsNyArNjAwLDcgQEAKIHN0YXRpYyBpbnQgcGNpX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZChkZXYsIFBNU0dfU1VTUEVORCk7CkBAIC02MzYsNyArNjM2LDcgQEAKIHN0YXRpYyBpbnQgcGNpX3BtX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZF9sYXRlKGRldiwgUE1TR19TVVNQRU5EKTsKQEAgLTY5NSw3ICs2OTUsNyBAQAogc3RhdGljIGludCBwY2lfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQlzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOwogCWludCBlcnJvciA9IDA7CiAKIAkvKgpAQCAtNzM0LDcgKzczNCw3IEBACiBzdGF0aWMgaW50IHBjaV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZChkZXYsIFBNU0dfRlJFRVpFKTsKQEAgLTgwMSw3ICs4MDEsNyBAQAogc3RhdGljIGludCBwY2lfcG1fdGhhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7Ci0Jc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKIAlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpCkBAIC04MjIsNyArODIyLDcgQEAKIHN0YXRpYyBpbnQgcGNpX3BtX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQlzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOwogCiAJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpCiAJCXJldHVybiBwY2lfbGVnYWN5X3N1c3BlbmQoZGV2LCBQTVNHX0hJQkVSTkFURSk7CkBAIC04OTMsNyArODkzLDcgQEAKIHN0YXRpYyBpbnQgcGNpX3BtX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CiAJaW50IGVycm9yID0gMDsKIAogCS8qCkBAIC05MzEsNyArOTMxLDcgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfSElCRVJOQVRJT04gKi8KIAotc3RydWN0IGRldl9wbV9vcHMgcGNpX2Rldl9wbV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwY2lfZGV2X3BtX29wcyA9IHsKIAkucHJlcGFyZSA9IHBjaV9wbV9wcmVwYXJlLAogCS5jb21wbGV0ZSA9IHBjaV9wbV9jb21wbGV0ZSwKIAkuc3VzcGVuZCA9IHBjaV9wbV9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCAzYjY5Mzk0Li42MDk5ZmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtOTkwLDcgKzk5MCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19hbWRfaWRlX21vZGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JLyogc2V0IHNiNjAwL3NiNzAwL3NiODAwIHNhdGEgdG8gYWhjaSBtb2RlICovCisJLyogc2V0IFNCWDAwIFNBVEEgaW4gSURFIG1vZGUgdG8gQUhDSSBtb2RlICovCiAJdTggdG1wOwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX0RFVklDRSwgJnRtcCk7CkBAIC0xMDA5LDYgKzEwMDksOCBAQAogREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FX0VBUkxZKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfU0FUQSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX1NBVEEsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9TQVRBLCBxdWlya19hbWRfaWRlX21vZGUpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TQVRBX0lERSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRV9FQVJMWShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CiAKIC8qCiAgKglTZXJ2ZXJ3b3JrcyBDU0I1IElERSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0IG5hdGl2ZSBtb2RlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCmluZGV4IGEyYWQ1M2UuLmFmMDRmNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCkBAIC01Myw3ICs1Myw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGhwX3dtaV9iaW9zX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IF9fZXhpdCBocF93bWlfYmlvc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKTsKLXN0YXRpYyBpbnQgaHBfd21pX3Jlc3VtZV9oYW5kbGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSk7CitzdGF0aWMgaW50IGhwX3dtaV9yZXN1bWVfaGFuZGxlcihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwogCiBzdHJ1Y3QgYmlvc19hcmdzIHsKIAl1MzIgc2lnbmF0dXJlOwpAQCAtOTQsMTQgKzk0LDE5IEBACiBzdGF0aWMgc3RydWN0IHJma2lsbCAqYmx1ZXRvb3RoX3Jma2lsbDsKIHN0YXRpYyBzdHJ1Y3QgcmZraWxsICp3d2FuX3Jma2lsbDsKIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGhwX3dtaV9wbV9vcHMgPSB7CisJLnJlc3VtZSAgPSBocF93bWlfcmVzdW1lX2hhbmRsZXIsCisJLnJlc3RvcmUgID0gaHBfd21pX3Jlc3VtZV9oYW5kbGVyLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaHBfd21pX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkgICAubmFtZSA9ICJocC13bWkiLAotCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSAiaHAtd21pIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wbSA9ICZocF93bWlfcG1fb3BzLAogCX0sCiAJLnByb2JlID0gaHBfd21pX2Jpb3Nfc2V0dXAsCiAJLnJlbW92ZSA9IGhwX3dtaV9iaW9zX3JlbW92ZSwKLQkucmVzdW1lID0gaHBfd21pX3Jlc3VtZV9oYW5kbGVyLAogfTsKIAogc3RhdGljIGludCBocF93bWlfcGVyZm9ybV9xdWVyeShpbnQgcXVlcnksIGludCB3cml0ZSwgaW50IHZhbHVlKQpAQCAtNTEyLDcgKzUxNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaHBfd21pX3Jlc3VtZV9oYW5kbGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgaHBfd21pX3Jlc3VtZV9oYW5kbGVyKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAkvKgogCSAqIEhhcmR3YXJlIHN0YXRlIG1heSBoYXZlIGNoYW5nZWQgd2hpbGUgc3VzcGVuZGVkLCBzbyB0cmlnZ2VyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBiaW9zL2Jpb3NjYWxscy5jIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9iaW9zY2FsbHMuYwppbmRleCA3ZTZiNWEzLi5mYzgzNzgzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYmlvcy9iaW9zY2FsbHMuYworKysgYi9kcml2ZXJzL3BucC9wbnBiaW9zL2Jpb3NjYWxscy5jCkBAIC01NSwxMiArNTUsMTMgQEAKIAogI2RlZmluZSBRMl9TRVRfU0VMKGNwdSwgc2VsbmFtZSwgYWRkcmVzcywgc2l6ZSkgXAogZG8geyBcCi1zdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdkdCA9IGdldF9jcHVfZ2R0X3RhYmxlKChjcHUpKTsgXAotc2V0X2Jhc2UoZ2R0WyhzZWxuYW1lKSA+PiAzXSwgKHUzMikoYWRkcmVzcykpOyBcCi1zZXRfbGltaXQoZ2R0WyhzZWxuYW1lKSA+PiAzXSwgc2l6ZSk7IFwKKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdkdCA9IGdldF9jcHVfZ2R0X3RhYmxlKChjcHUpKTsgXAorCXNldF9kZXNjX2Jhc2UoJmdkdFsoc2VsbmFtZSkgPj4gM10sICh1MzIpKGFkZHJlc3MpKTsgXAorCXNldF9kZXNjX2xpbWl0KCZnZHRbKHNlbG5hbWUpID4+IDNdLCAoc2l6ZSkgLSAxKTsgXAogfSB3aGlsZSgwKQogCi1zdGF0aWMgc3RydWN0IGRlc2Nfc3RydWN0IGJhZF9iaW9zX2Rlc2M7CitzdGF0aWMgc3RydWN0IGRlc2Nfc3RydWN0IGJhZF9iaW9zX2Rlc2MgPSBHRFRfRU5UUllfSU5JVCgweDQwOTIsCisJCQkodW5zaWduZWQgbG9uZylfX3ZhKDB4NDAwVUwpLCBQQUdFX1NJWkUgLSAweDQwMCAtIDEpOwogCiAvKgogICogQXQgc29tZSBwb2ludCB3ZSB3YW50IHRvIHVzZSB0aGlzIHN0YWNrIGZyYW1lIHBvaW50ZXIgdG8gdW53aW5kCkBAIC00NzYsMTkgKzQ3NywxNSBAQAogCXBucF9iaW9zX2NhbGxwb2ludC5vZmZzZXQgPSBoZWFkZXItPmZpZWxkcy5wbTE2b2Zmc2V0OwogCXBucF9iaW9zX2NhbGxwb2ludC5zZWdtZW50ID0gUE5QX0NTMTY7CiAKLQliYWRfYmlvc19kZXNjLmEgPSAwOwotCWJhZF9iaW9zX2Rlc2MuYiA9IDB4MDA0MDkyMDA7Ci0KLQlzZXRfYmFzZShiYWRfYmlvc19kZXNjLCBfX3ZhKCh1bnNpZ25lZCBsb25nKTB4NDAgPDwgNCkpOwotCV9zZXRfbGltaXQoKGNoYXIgKikmYmFkX2Jpb3NfZGVzYywgNDA5NSAtICgweDQwIDw8IDQpKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewogCQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdkdCA9IGdldF9jcHVfZ2R0X3RhYmxlKGkpOwogCQlpZiAoIWdkdCkKIAkJCWNvbnRpbnVlOwotCQlzZXRfYmFzZShnZHRbR0RUX0VOVFJZX1BOUEJJT1NfQ1MzMl0sICZwbnBfYmlvc19jYWxsZnVuYyk7Ci0JCXNldF9iYXNlKGdkdFtHRFRfRU5UUllfUE5QQklPU19DUzE2XSwKLQkJCSBfX3ZhKGhlYWRlci0+ZmllbGRzLnBtMTZjc2VnKSk7Ci0JCXNldF9iYXNlKGdkdFtHRFRfRU5UUllfUE5QQklPU19EU10sCi0JCQkgX192YShoZWFkZXItPmZpZWxkcy5wbTE2ZHNlZykpOworCQlzZXRfZGVzY19iYXNlKCZnZHRbR0RUX0VOVFJZX1BOUEJJT1NfQ1MzMl0sCisJCQkgKHVuc2lnbmVkIGxvbmcpJnBucF9iaW9zX2NhbGxmdW5jKTsKKwkJc2V0X2Rlc2NfYmFzZSgmZ2R0W0dEVF9FTlRSWV9QTlBCSU9TX0NTMTZdLAorCQkJICh1bnNpZ25lZCBsb25nKV9fdmEoaGVhZGVyLT5maWVsZHMucG0xNmNzZWcpKTsKKwkJc2V0X2Rlc2NfYmFzZSgmZ2R0W0dEVF9FTlRSWV9QTlBCSU9TX0RTXSwKKwkJCSAodW5zaWduZWQgbG9uZylfX3ZhKGhlYWRlci0+ZmllbGRzLnBtMTZkc2VnKSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvcHMzc3Rvcl9saWIuYyBiL2RyaXZlcnMvcHMzL3BzM3N0b3JfbGliLmMKaW5kZXggMTgwNjZkNS4uYWYwYWZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvcHMzc3Rvcl9saWIuYworKysgYi9kcml2ZXJzL3BzMy9wczNzdG9yX2xpYi5jCkBAIC0yMyw2ICsyMyw2NSBAQAogI2luY2x1ZGUgPGFzbS9sdjFjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL3BzM3N0b3IuaD4KIAorLyoKKyAqIEEgd29ya2Fyb3VuZCBmb3IgZmxhc2ggbWVtb3J5IEkvTyBlcnJvcnMgd2hlbiB0aGUgaW50ZXJuYWwgaGFyZCBkaXNrCisgKiBoYXMgbm90IGJlZW4gZm9ybWF0dGVkIGZvciBPdGhlck9TIHVzZS4gIERlbGF5IGRpc2sgY2xvc2UgdW50aWwgZmxhc2gKKyAqIG1lbW9yeSBpcyBjbG9zZWQuCisgKi8KKworc3RhdGljIHN0cnVjdCBwczNfZmxhc2hfd29ya2Fyb3VuZCB7CisJaW50IGZsYXNoX29wZW47CisJaW50IGRpc2tfb3BlbjsKKwlzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkaXNrX3NiZDsKK30gcHMzX2ZsYXNoX3dvcmthcm91bmQ7CisKK3N0YXRpYyBpbnQgcHMzc3Rvcl9vcGVuX2h2X2RldmljZShzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpzYmQpCit7CisJaW50IGVycm9yID0gcHMzX29wZW5faHZfZGV2aWNlKHNiZCk7CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmIChzYmQtPm1hdGNoX2lkID09IFBTM19NQVRDSF9JRF9TVE9SX0ZMQVNIKQorCQlwczNfZmxhc2hfd29ya2Fyb3VuZC5mbGFzaF9vcGVuID0gMTsKKworCWlmIChzYmQtPm1hdGNoX2lkID09IFBTM19NQVRDSF9JRF9TVE9SX0RJU0spCisJCXBzM19mbGFzaF93b3JrYXJvdW5kLmRpc2tfb3BlbiA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwczNzdG9yX2Nsb3NlX2h2X2RldmljZShzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpzYmQpCit7CisJaW50IGVycm9yOworCisJaWYgKHNiZC0+bWF0Y2hfaWQgPT0gUFMzX01BVENIX0lEX1NUT1JfRElTSworCQkmJiBwczNfZmxhc2hfd29ya2Fyb3VuZC5kaXNrX29wZW4KKwkJJiYgcHMzX2ZsYXNoX3dvcmthcm91bmQuZmxhc2hfb3BlbikgeworCQlwczNfZmxhc2hfd29ya2Fyb3VuZC5kaXNrX3NiZCA9IHNiZDsKKwkJcmV0dXJuIDA7CisJfQorCisJZXJyb3IgPSBwczNfY2xvc2VfaHZfZGV2aWNlKHNiZCk7CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmIChzYmQtPm1hdGNoX2lkID09IFBTM19NQVRDSF9JRF9TVE9SX0RJU0spCisJCXBzM19mbGFzaF93b3JrYXJvdW5kLmRpc2tfb3BlbiA9IDA7CisKKwlpZiAoc2JkLT5tYXRjaF9pZCA9PSBQUzNfTUFUQ0hfSURfU1RPUl9GTEFTSCkgeworCQlwczNfZmxhc2hfd29ya2Fyb3VuZC5mbGFzaF9vcGVuID0gMDsKKworCQlpZiAocHMzX2ZsYXNoX3dvcmthcm91bmQuZGlza19zYmQpIHsKKwkJCXBzM19jbG9zZV9odl9kZXZpY2UocHMzX2ZsYXNoX3dvcmthcm91bmQuZGlza19zYmQpOworCQkJcHMzX2ZsYXNoX3dvcmthcm91bmQuZGlza19vcGVuID0gMDsKKwkJCXBzM19mbGFzaF93b3JrYXJvdW5kLmRpc2tfc2JkID0gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50IHBzM3N0b3JfcHJvYmVfYWNjZXNzKHN0cnVjdCBwczNfc3RvcmFnZV9kZXZpY2UgKmRldikKIHsKQEAgLTkwLDcgKzE0OSw3IEBACiAJaW50IGVycm9yLCByZXMsIGFsaWdubWVudDsKIAllbnVtIHBzM19kbWFfcGFnZV9zaXplIHBhZ2Vfc2l6ZTsKIAotCWVycm9yID0gcHMzX29wZW5faHZfZGV2aWNlKCZkZXYtPnNiZCk7CisJZXJyb3IgPSBwczNzdG9yX29wZW5faHZfZGV2aWNlKCZkZXYtPnNiZCk7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJmRldi0+c2JkLmNvcmUsCiAJCQkiJXM6JXU6IHBzM19vcGVuX2h2X2RldmljZSBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLApAQCAtMTY2LDcgKzIyNSw3IEBACiBmYWlsX3NiX2V2ZW50X3JlY2VpdmVfcG9ydF9kZXN0cm95OgogCXBzM19zYl9ldmVudF9yZWNlaXZlX3BvcnRfZGVzdHJveSgmZGV2LT5zYmQsIGRldi0+aXJxKTsKIGZhaWxfY2xvc2VfZGV2aWNlOgotCXBzM19jbG9zZV9odl9kZXZpY2UoJmRldi0+c2JkKTsKKwlwczNzdG9yX2Nsb3NlX2h2X2RldmljZSgmZGV2LT5zYmQpOwogZmFpbDoKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xOTMsNyArMjUyLDcgQEAKIAkJCSIlczoldTogZGVzdHJveSBldmVudCByZWNlaXZlIHBvcnQgZmFpbGVkICVkXG4iLAogCQkJX19mdW5jX18sIF9fTElORV9fLCBlcnJvcik7CiAKLQllcnJvciA9IHBzM19jbG9zZV9odl9kZXZpY2UoJmRldi0+c2JkKTsKKwllcnJvciA9IHBzM3N0b3JfY2xvc2VfaHZfZGV2aWNlKCZkZXYtPnNiZCk7CiAJaWYgKGVycm9yKQogCQlkZXZfZXJyKCZkZXYtPnNiZC5jb3JlLAogCQkJIiVzOiV1OiBwczNfY2xvc2VfaHZfZGV2aWNlIGZhaWxlZCAlZFxuIiwgX19mdW5jX18sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKaW5kZXggNGYyNDdlNC4uMDIxYjI5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwpAQCAtOSw3ICs5LDcgQEAKICAqCiAgKiBNb2RpZmljYXRpb25zIGZyb206CiAgKiAgIENJSCA8Y2loQGNvdmVudGl2ZS5jb20+Ci0gKiAgIE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqICAgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KICAqICAgQW5kcmV3IENocmlzdGlhbiA8YW5kcmV3LmNocmlzdGlhbkBocC5jb20+CiAgKgogICogQ29udmVydGVkIHRvIHRoZSBSVEMgc3Vic3lzdGVtIGFuZCBEcml2ZXIgTW9kZWwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDNmNjJkZDUuLmUxMDlkYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtNjY5LDE0ICs2NjksMTQgQEAKICAqIG1lbW9yeSBhbmQgMikgZGFzZF9zbWFsbG9jX3JlcXVlc3QgdXNlcyB0aGUgc3RhdGljIGNjdyBtZW1vcnkKICAqIHRoYXQgZ2V0cyBhbGxvY2F0ZWQgZm9yIGVhY2ggZGV2aWNlLgogICovCi1zdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX2ttYWxsb2NfcmVxdWVzdChjaGFyICptYWdpYywgaW50IGNwbGVuZ3RoLAorc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9rbWFsbG9jX3JlcXVlc3QoaW50IG1hZ2ljLCBpbnQgY3BsZW5ndGgsCiAJCQkJCSAgaW50IGRhdGFzaXplLAogCQkJCQkgIHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAogCS8qIFNhbml0eSBjaGVja3MgKi8KLQlCVUdfT04oIG1hZ2ljID09IE5VTEwgfHwgZGF0YXNpemUgPiBQQUdFX1NJWkUgfHwKKwlCVUdfT04oZGF0YXNpemUgPiBQQUdFX1NJWkUgfHwKIAkgICAgIChjcGxlbmd0aCpzaXplb2Yoc3RydWN0IGNjdzEpKSA+IFBBR0VfU0laRSk7CiAKIAljcXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9jY3dfcmVxKSwgR0ZQX0FUT01JQyk7CkBAIC03MDAsMTQgKzcwMCwxMyBAQAogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJCX0KIAl9Ci0Jc3RybmNweSgoY2hhciAqKSAmY3FyLT5tYWdpYywgbWFnaWMsIDQpOwotCUFTQ0VCQygoY2hhciAqKSAmY3FyLT5tYWdpYywgNCk7CisJY3FyLT5tYWdpYyA9ICBtYWdpYzsKIAlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKTsKIAlkYXNkX2dldF9kZXZpY2UoZGV2aWNlKTsKIAlyZXR1cm4gY3FyOwogfQogCi1zdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX3NtYWxsb2NfcmVxdWVzdChjaGFyICptYWdpYywgaW50IGNwbGVuZ3RoLAorc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF9zbWFsbG9jX3JlcXVlc3QoaW50IG1hZ2ljLCBpbnQgY3BsZW5ndGgsCiAJCQkJCSAgaW50IGRhdGFzaXplLAogCQkJCQkgIHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewpAQCAtNzE3LDcgKzcxNiw3IEBACiAJaW50IHNpemU7CiAKIAkvKiBTYW5pdHkgY2hlY2tzICovCi0JQlVHX09OKCBtYWdpYyA9PSBOVUxMIHx8IGRhdGFzaXplID4gUEFHRV9TSVpFIHx8CisJQlVHX09OKGRhdGFzaXplID4gUEFHRV9TSVpFIHx8CiAJICAgICAoY3BsZW5ndGgqc2l6ZW9mKHN0cnVjdCBjY3cxKSkgPiBQQUdFX1NJWkUpOwogCiAJc2l6ZSA9IChzaXplb2Yoc3RydWN0IGRhc2RfY2N3X3JlcSkgKyA3TCkgJiAtOEw7CkBAIC03NDQsOCArNzQzLDcgQEAKIAkJY3FyLT5kYXRhID0gZGF0YTsKICAJCW1lbXNldChjcXItPmRhdGEsIDAsIGRhdGFzaXplKTsKIAl9Ci0Jc3RybmNweSgoY2hhciAqKSAmY3FyLT5tYWdpYywgbWFnaWMsIDQpOwotCUFTQ0VCQygoY2hhciAqKSAmY3FyLT5tYWdpYywgNCk7CisJY3FyLT5tYWdpYyA9IG1hZ2ljOwogCXNldF9iaXQoREFTRF9DUVJfRkxBR1NfVVNFX0VSUCwgJmNxci0+ZmxhZ3MpOwogCWRhc2RfZ2V0X2RldmljZShkZXZpY2UpOwogCXJldHVybiBjcXI7CkBAIC04OTksOSArODk3LDYgQEAKIAlzd2l0Y2ggKHJjKSB7CiAJY2FzZSAwOgogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0lOX0lPOwotCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLAotCQkJICAgICAgInN0YXJ0X0lPOiByZXF1ZXN0ICVwIHN0YXJ0ZWQgc3VjY2Vzc2Z1bCIsCi0JCQkgICAgICBjcXIpOwogCQlicmVhazsKIAljYXNlIC1FQlVTWToKIAkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKQEAgLTE2OTksOCArMTY5NCwxMSBAQAogCSAqIGZvciB0aGF0LiBTdGF0ZSBEQVNEX1NUQVRFX09OTElORSBpcyBub3JtYWwgYmxvY2sgZGV2aWNlCiAJICogb3BlcmF0aW9uLgogCSAqLwotCWlmIChiYXNlZGV2LT5zdGF0ZSA8IERBU0RfU1RBVEVfUkVBRFkpCisJaWYgKGJhc2VkZXYtPnN0YXRlIDwgREFTRF9TVEFURV9SRUFEWSkgeworCQl3aGlsZSAoKHJlcSA9IGJsa19mZXRjaF9yZXF1ZXN0KGJsb2NrLT5yZXF1ZXN0X3F1ZXVlKSkpCisJCQlfX2Jsa19lbmRfcmVxdWVzdF9hbGwocmVxLCAtRUlPKTsKIAkJcmV0dXJuOworCX0KIAkvKiBOb3cgd2UgdHJ5IHRvIGZldGNoIHJlcXVlc3RzIGZyb20gdGhlIHJlcXVlc3QgcXVldWUgKi8KIAl3aGlsZSAoIWJsa19xdWV1ZV9wbHVnZ2VkKHF1ZXVlKSAmJiAocmVxID0gYmxrX3BlZWtfcmVxdWVzdChxdWV1ZSkpKSB7CiAJCWlmIChiYXNlZGV2LT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9SRUFET05MWSAmJgpAQCAtMjUzMCw3ICsyNTI4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpkYXNkX2dlbmVyaWNfYnVpbGRfcmRjKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAogCQkJCQkJICAgdm9pZCAqcmRjX2J1ZmZlciwKIAkJCQkJCSAgIGludCByZGNfYnVmZmVyX3NpemUsCi0JCQkJCQkgICBjaGFyICptYWdpYykKKwkJCQkJCSAgIGludCBtYWdpYykKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJc3RydWN0IGNjdzEgKmNjdzsKQEAgLTI1NjEsNyArMjU1OSw3IEBACiB9CiAKIAotaW50IGRhc2RfZ2VuZXJpY19yZWFkX2Rldl9jaGFycyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgY2hhciAqbWFnaWMsCitpbnQgZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBpbnQgbWFnaWMsCiAJCQkJdm9pZCAqcmRjX2J1ZmZlciwgaW50IHJkY19idWZmZXJfc2l6ZSkKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKaW5kZXggMjc5OTFiNi4uZThmZjdiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCkBAIC03LDcgKzcsNyBAQAogICoKICAqLwogCi0jZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZC1lY2tkIgogCiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYwppbmRleCA1YjdiYmM4Li43MGEwMDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3Iocyk6IFN0ZWZhbiBXZWluaHViZXIgPHdlaW5AZGUuaWJtLmNvbT4KICAqLwogCi0jZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZC1lY2tkIgogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KQEAgLTM3OSw4ICszNzksNyBAQAogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JY3FyID0gZGFzZF9rbWFsbG9jX3JlcXVlc3QoIkVDS0QiLAotCQkJCSAgIDEgLyogUFNGICovCSsgMSAvKiBSU1NEICovICwKKwljcXIgPSBkYXNkX2ttYWxsb2NfcmVxdWVzdChEQVNEX0VDS0RfTUFHSUMsIDEgLyogUFNGICovCSsgMSAvKiBSU1NEICovLAogCQkJCSAgIChzaXplb2Yoc3RydWN0IGRhc2RfcHNmX3Byc3NkX2RhdGEpKSwKIAkJCQkgICBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwppbmRleCA2NDQwODZiLi40ZTQ5YjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCkBAIC04LDcgKzgsNyBAQAogICoKICAqLwogCi0jZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZC1kaWFnIgogCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01MjMsOCArNTIzLDcgQEAKIAkvKiBCdWlsZCB0aGUgcmVxdWVzdCAqLwogCWRhdGFzaXplID0gc2l6ZW9mKHN0cnVjdCBkYXNkX2RpYWdfcmVxKSArCiAJCWNvdW50KnNpemVvZihzdHJ1Y3QgZGFzZF9kaWFnX2Jpbyk7Ci0JY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9kaWFnX2Rpc2NpcGxpbmUubmFtZSwgMCwKLQkJCQkgICBkYXRhc2l6ZSwgbWVtZGV2KTsKKwljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChEQVNEX0RJQUdfTUFHSUMsIDAsIGRhdGFzaXplLCBtZW1kZXYpOwogCWlmIChJU19FUlIoY3FyKSkKIAkJcmV0dXJuIGNxcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IGMxMTc3MGYuLmExY2U1NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqIEF1dGhvci4uLi4uLi4uLjogTmlnZWwgSGlzbG9wIDxoaXNsb3BfbmlnZWxAZW1jLmNvbT4KICAqLwogCi0jZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkIgorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZC1lY2tkIgogCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC03MzAsNyArNzMwLDggQEAKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJc3RydWN0IGNjdzEgKmNjdzsKIAotCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KCJFQ0tEIiwgMSAvKiBSQ0QgKi8sIGNpdy0+Y291bnQsIGRldmljZSk7CisJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoREFTRF9FQ0tEX01BR0lDLCAxIC8qIFJDRCAqLywgY2l3LT5jb3VudCwKKwkJCQkgICBkZXZpY2UpOwogCiAJaWYgKElTX0VSUihjcXIpKSB7CiAJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKQEAgLTkzNCw4ICs5MzUsNyBAQAogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKLQljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAotCQkJCSAgIDEgLyogUFNGICovCSsgMSAvKiBSU1NEICovICwKKwljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChEQVNEX0VDS0RfTUFHSUMsIDEgLyogUFNGICovCSsgMSAvKiBSU1NEICovLAogCQkJCSAgIChzaXplb2Yoc3RydWN0IGRhc2RfcHNmX3Byc3NkX2RhdGEpICsKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkYXNkX3Jzc2RfZmVhdHVyZXMpKSwKIAkJCQkgICBkZXZpY2UpOwpAQCAtOTk4LDcgKzk5OCw3IEBACiAJc3RydWN0IGRhc2RfcHNmX3NzY19kYXRhICpwc2Zfc3NjX2RhdGE7CiAJc3RydWN0IGNjdzEgKmNjdzsKIAotCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KCJFQ0tEIiwgMSAvKiBQU0YgKi8gLAorCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KERBU0RfRUNLRF9NQUdJQywgMSAvKiBQU0YgKi8gLAogCQkJCSAgc2l6ZW9mKHN0cnVjdCBkYXNkX3BzZl9zc2NfZGF0YSksCiAJCQkJICBkZXZpY2UpOwogCkBAIC0xMTQ5LDggKzExNDksOCBAQAogCQlnb3RvIG91dF9lcnIzOwogCiAJLyogUmVhZCBEZXZpY2UgQ2hhcmFjdGVyaXN0aWNzICovCi0JcmMgPSBkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMoZGV2aWNlLCAiRUNLRCIsICZwcml2YXRlLT5yZGNfZGF0YSwKLQkJCQkJIDY0KTsKKwlyYyA9IGRhc2RfZ2VuZXJpY19yZWFkX2Rldl9jaGFycyhkZXZpY2UsIERBU0RfRUNLRF9NQUdJQywKKwkJCQkJICZwcml2YXRlLT5yZGNfZGF0YSwgNjQpOwogCWlmIChyYykgewogCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsCiAJCQkgICJSZWFkIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgZmFpbGVkLCByYz0lZCBmb3IgIgpAQCAtMTIxNyw4ICsxMjE3LDcgQEAKIAogCWNwbGVuZ3RoID0gODsKIAlkYXRhc2l6ZSA9IHNpemVvZihzdHJ1Y3QgREVfZWNrZF9kYXRhKSArIDIqc2l6ZW9mKHN0cnVjdCBMT19lY2tkX2RhdGEpOwotCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KGRhc2RfZWNrZF9kaXNjaXBsaW5lLm5hbWUsCi0JCQkJICAgY3BsZW5ndGgsIGRhdGFzaXplLCBkZXZpY2UpOworCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KERBU0RfRUNLRF9NQUdJQywgY3BsZW5ndGgsIGRhdGFzaXplLCBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkKIAkJcmV0dXJuIGNxcjsKIAljY3cgPSBjcXItPmNwYWRkcjsKQEAgLTE0OTksOCArMTQ5OCw3IEBACiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAkvKiBBbGxvY2F0ZSB0aGUgZm9ybWF0IGNjdyByZXF1ZXN0LiAqLwotCWZjcCA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KGRhc2RfZWNrZF9kaXNjaXBsaW5lLm5hbWUsCi0JCQkJICAgY3BsZW5ndGgsIGRhdGFzaXplLCBkZXZpY2UpOworCWZjcCA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KERBU0RfRUNLRF9NQUdJQywgY3BsZW5ndGgsIGRhdGFzaXplLCBkZXZpY2UpOwogCWlmIChJU19FUlIoZmNwKSkKIAkJcmV0dXJuIGZjcDsKIApAQCAtMTc4Myw4ICsxNzgxLDggQEAKIAkJZGF0YXNpemUgKz0gY291bnQqc2l6ZW9mKHN0cnVjdCBMT19lY2tkX2RhdGEpOwogCX0KIAkvKiBBbGxvY2F0ZSB0aGUgY2N3IHJlcXVlc3QuICovCi0JY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9lY2tkX2Rpc2NpcGxpbmUubmFtZSwKLQkJCQkgICBjcGxlbmd0aCwgZGF0YXNpemUsIHN0YXJ0ZGV2KTsKKwljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChEQVNEX0VDS0RfTUFHSUMsIGNwbGVuZ3RoLCBkYXRhc2l6ZSwKKwkJCQkgICBzdGFydGRldik7CiAJaWYgKElTX0VSUihjcXIpKQogCQlyZXR1cm4gY3FyOwogCWNjdyA9IGNxci0+Y3BhZGRyOwpAQCAtMTk0OCw4ICsxOTQ2LDggQEAKIAkJY2lkYXcgKiBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKTsKIAogCS8qIEFsbG9jYXRlIHRoZSBjY3cgcmVxdWVzdC4gKi8KLQljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAotCQkJCSAgIGNwbGVuZ3RoLCBkYXRhc2l6ZSwgc3RhcnRkZXYpOworCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KERBU0RfRUNLRF9NQUdJQywgY3BsZW5ndGgsIGRhdGFzaXplLAorCQkJCSAgIHN0YXJ0ZGV2KTsKIAlpZiAoSVNfRVJSKGNxcikpCiAJCXJldHVybiBjcXI7CiAJY2N3ID0gY3FyLT5jcGFkZHI7CkBAIC0yMjQ5LDggKzIyNDcsNyBAQAogCiAJLyogQWxsb2NhdGUgdGhlIGNjdyByZXF1ZXN0LiAqLwogCWl0Y3dfc2l6ZSA9IGl0Y3dfY2FsY19zaXplKDAsIGN0aWRhdywgMCk7Ci0JY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9lY2tkX2Rpc2NpcGxpbmUubmFtZSwKLQkJCQkgICAwLCBpdGN3X3NpemUsIHN0YXJ0ZGV2KTsKKwljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChEQVNEX0VDS0RfTUFHSUMsIDAsIGl0Y3dfc2l6ZSwgc3RhcnRkZXYpOwogCWlmIChJU19FUlIoY3FyKSkKIAkJcmV0dXJuIGNxcjsKIApAQCAtMjU1Nyw4ICsyNTU0LDcgQEAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9lY2tkX2Rpc2NpcGxpbmUubmFtZSwKLQkJCQkgICAxLCAzMiwgZGV2aWNlKTsKKwljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChEQVNEX0VDS0RfTUFHSUMsIDEsIDMyLCBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewogCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7CkBAIC0yNjAwLDggKzI1OTYsNyBAQAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKLQljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAotCQkJCSAgIDEsIDMyLCBkZXZpY2UpOworCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KERBU0RfRUNLRF9NQUdJQywgMSwgMzIsIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7CiAJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIGluaXRpYWxpemF0aW9uIHJlcXVlc3QiKTsKQEAgLTI2NDIsOCArMjYzNyw3IEBACiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KGRhc2RfZWNrZF9kaXNjaXBsaW5lLm5hbWUsCi0JCQkJICAgMSwgMzIsIGRldmljZSk7CisJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoREFTRF9FQ0tEX01BR0lDLCAxLCAzMiwgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGNxcikpIHsKIAkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAogCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOwpAQCAtMjY4MSw4ICsyNjc1LDcgQEAKIAlzdHJ1Y3QgY2N3MSAqY2N3OwogCWludCByYzsKIAotCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KGRhc2RfZWNrZF9kaXNjaXBsaW5lLm5hbWUsCi0JCQkJICAgMSAvKiBQU0YgKi8gICsgMSAvKiBSU1NEICovICwKKwljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChEQVNEX0VDS0RfTUFHSUMsIDEgLyogUFNGICovICArIDEgLyogUlNTRCAqLywKIAkJCQkgICAoc2l6ZW9mKHN0cnVjdCBkYXNkX3BzZl9wcnNzZF9kYXRhKSArCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgZGFzZF9yc3NkX3BlcmZfc3RhdHNfdCkpLAogCQkJCSAgIGRldmljZSk7CkBAIC0yODI4LDcgKzI4MjEsNyBAQAogCX0KIAogCS8qIHNldHVwIENDV3MgZm9yIFBTRiArIFJTU0QgKi8KLQljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdCgiRUNLRCIsIDIgLCAwLCBkZXZpY2UpOworCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KERBU0RfRUNLRF9NQUdJQywgMiAsIDAsIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7CiAJCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCSJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOwpAQCAtMzI1NCw3ICszMjQ3LDcgQEAKIAogCS8qIFJlYWQgRGV2aWNlIENoYXJhY3RlcmlzdGljcyAqLwogCW1lbXNldCgmcHJpdmF0ZS0+cmRjX2RhdGEsIDAsIHNpemVvZihwcml2YXRlLT5yZGNfZGF0YSkpOwotCXJjID0gZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKGRldmljZSwgIkVDS0QiLAorCXJjID0gZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKGRldmljZSwgREFTRF9FQ0tEX01BR0lDLAogCQkJCQkgJnByaXZhdGUtPnJkY19kYXRhLCA2NCk7CiAJaWYgKHJjKSB7CiAJCURCRl9FVkVOVChEQkZfV0FSTklORywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWVyLmMKaW5kZXggYzI0YzhjMy4uZDk2MDM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWVyLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWVyLmMKQEAgLTYsNyArNiw3IEBACiAgKiAgQXV0aG9yKHMpOiBTdGVmYW4gV2Vpbmh1YmVyIDx3ZWluQGRlLmlibS5jb20+CiAgKi8KIAotI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QtZWNrZCIKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJaWYgKCFkZXZpY2UtPmRpc2NpcGxpbmUgfHwgc3RyY21wKGRldmljZS0+ZGlzY2lwbGluZS0+bmFtZSwgIkVDS0QiKSkKIAkJcmV0dXJuIC1FUEVSTTsJLyogRklYTUU6IC1FTUVESVVNVFlQRSA/ICovCiAKLQljcXIgPSBkYXNkX2ttYWxsb2NfcmVxdWVzdCgiRUNLRCIsIDEgLyogU05TUyAqLywKKwljcXIgPSBkYXNkX2ttYWxsb2NfcmVxdWVzdChEQVNEX0VDS0RfTUFHSUMsIDEgLyogU05TUyAqLywKIAkJCQkgICBTTlNTX0RBVEFfU0laRSwgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGNxcikpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZXJwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYwppbmRleCBjYjhmOWNlLi43NjU2Mzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lcnAuYwpAQCAtOTksOCArOTksOCBAQAogCQljcXItPmxwbSAgICA9IExQTV9BTllQQVRIOwogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKICAgICAgICAgfSBlbHNlIHsKLQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCi0JCQkiZGVmYXVsdCBFUlAgaGFzIHJ1biBvdXQgb2YgcmV0cmllcyBhbmQgZmFpbGVkXG4iKTsKKwkJcHJfZXJyKCIlczogZGVmYXVsdCBFUlAgaGFzIHJ1biBvdXQgb2YgcmV0cmllcyBhbmQgZmFpbGVkXG4iLAorCQkgICAgICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOwogCQljcXItPnN0b3BjbGsgPSBnZXRfY2xvY2soKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwppbmRleCAzMTg0OWFkLi5mMjQ1Mzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwpAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OSwgMjAwOQogICovCiAKLSNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJkYXNkLWZiYSIKIAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTUyLDggKzE1Miw4IEBACiAJYmxvY2stPmJhc2UgPSBkZXZpY2U7CiAKIAkvKiBSZWFkIERldmljZSBDaGFyYWN0ZXJpc3RpY3MgKi8KLQlyYyA9IGRhc2RfZ2VuZXJpY19yZWFkX2Rldl9jaGFycyhkZXZpY2UsICJGQkEgIiwgJnByaXZhdGUtPnJkY19kYXRhLAotCQkJCQkgMzIpOworCXJjID0gZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKGRldmljZSwgREFTRF9GQkFfTUFHSUMsCisJCQkJCSAmcHJpdmF0ZS0+cmRjX2RhdGEsIDMyKTsKIAlpZiAocmMpIHsKIAkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiUmVhZCBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIHJldHVybmVkICIKIAkJCSAgImVycm9yICVkIGZvciBkZXZpY2U6ICVzIiwKQEAgLTMwNSw4ICszMDUsNyBAQAogCQlkYXRhc2l6ZSArPSAoY291bnQgLSAxKSpzaXplb2Yoc3RydWN0IExPX2ZiYV9kYXRhKTsKIAl9CiAJLyogQWxsb2NhdGUgdGhlIGNjdyByZXF1ZXN0LiAqLwotCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KGRhc2RfZmJhX2Rpc2NpcGxpbmUubmFtZSwKLQkJCQkgICBjcGxlbmd0aCwgZGF0YXNpemUsIG1lbWRldik7CisJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoREFTRF9GQkFfTUFHSUMsIGNwbGVuZ3RoLCBkYXRhc2l6ZSwgbWVtZGV2KTsKIAlpZiAoSVNfRVJSKGNxcikpCiAJCXJldHVybiBjcXI7CiAJY2N3ID0gY3FyLT5jcGFkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCmluZGV4IGI2OTljYTMuLjVlNDdhMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCkBAIC01OSw2ICs1OSwxMSBAQAogI2luY2x1ZGUgPGFzbS9kYXNkLmg+CiAjaW5jbHVkZSA8YXNtL2lkYWxzLmg+CiAKKy8qIERBU0QgZGlzY2lwbGluZSBtYWdpYyAqLworI2RlZmluZSBEQVNEX0VDS0RfTUFHSUMgMHhDNUMzRDJDNAorI2RlZmluZSBEQVNEX0RJQUdfTUFHSUMgMHhDNEM5QzFDNworI2RlZmluZSBEQVNEX0ZCQV9NQUdJQyAweEM2QzJDMTQwCisKIC8qCiAgKiBTRUNUSU9OOiBUeXBlIGRlZmluaXRpb25zCiAgKi8KQEAgLTU0MCw5ICs1NDUsOSBAQAogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpkYXNkX3BhZ2VfY2FjaGU7CiAKIHN0cnVjdCBkYXNkX2Njd19yZXEgKgotZGFzZF9rbWFsbG9jX3JlcXVlc3QoY2hhciAqLCBpbnQsIGludCwgc3RydWN0IGRhc2RfZGV2aWNlICopOworZGFzZF9rbWFsbG9jX3JlcXVlc3QoaW50ICwgaW50LCBpbnQsIHN0cnVjdCBkYXNkX2RldmljZSAqKTsKIHN0cnVjdCBkYXNkX2Njd19yZXEgKgotZGFzZF9zbWFsbG9jX3JlcXVlc3QoY2hhciAqLCBpbnQsIGludCwgc3RydWN0IGRhc2RfZGV2aWNlICopOworZGFzZF9zbWFsbG9jX3JlcXVlc3QoaW50ICwgaW50LCBpbnQsIHN0cnVjdCBkYXNkX2RldmljZSAqKTsKIHZvaWQgZGFzZF9rZnJlZV9yZXF1ZXN0KHN0cnVjdCBkYXNkX2Njd19yZXEgKiwgc3RydWN0IGRhc2RfZGV2aWNlICopOwogdm9pZCBkYXNkX3NmcmVlX3JlcXVlc3Qoc3RydWN0IGRhc2RfY2N3X3JlcSAqLCBzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CiAKQEAgLTU4Nyw3ICs1OTIsNyBAQAogaW50IGRhc2RfZ2VuZXJpY19wbV9mcmVlemUoc3RydWN0IGNjd19kZXZpY2UgKik7CiBpbnQgZGFzZF9nZW5lcmljX3Jlc3RvcmVfZGV2aWNlKHN0cnVjdCBjY3dfZGV2aWNlICopOwogCi1pbnQgZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKHN0cnVjdCBkYXNkX2RldmljZSAqLCBjaGFyICosIHZvaWQgKiwgaW50KTsKK2ludCBkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMoc3RydWN0IGRhc2RfZGV2aWNlICosIGludCwgdm9pZCAqLCBpbnQpOwogY2hhciAqZGFzZF9nZXRfc2Vuc2Uoc3RydWN0IGlyYiAqKTsKIAogLyogZXh0ZXJuYWxzIGluIGRhc2RfZGV2bWFwLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCmluZGV4IGRmOTE4ZWYuLmY3NTZhMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwpAQCAtOTgsOCArOTgsOCBAQAogCWlmICghY2FwYWJsZSAoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JZGV2X2luZm8oJmJhc2UtPmNkZXYtPmRldiwgIlRoZSBEQVNEIGhhcyBiZWVuIHB1dCBpbiB0aGUgcXVpZXNjZSAiCi0JCSAic3RhdGVcbiIpOworCXByX2luZm8oIiVzOiBUaGUgREFTRCBoYXMgYmVlbiBwdXQgaW4gdGhlIHF1aWVzY2UgIgorCQkic3RhdGVcbiIsIGRldl9uYW1lKCZiYXNlLT5jZGV2LT5kZXYpKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soYmFzZS0+Y2RldiksIGZsYWdzKTsKIAliYXNlLT5zdG9wcGVkIHw9IERBU0RfU1RPUFBFRF9RVUlFU0NFOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGJhc2UtPmNkZXYpLCBmbGFncyk7CkBAIC0xMTksOCArMTE5LDggQEAKIAlpZiAoIWNhcGFibGUgKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCWRldl9pbmZvKCZiYXNlLT5jZGV2LT5kZXYsICJJL08gb3BlcmF0aW9ucyBoYXZlIGJlZW4gcmVzdW1lZCAiCi0JCSAib24gdGhlIERBU0RcbiIpOworCXByX2luZm8oIiVzOiBJL08gb3BlcmF0aW9ucyBoYXZlIGJlZW4gcmVzdW1lZCAiCisJCSJvbiB0aGUgREFTRFxuIiwgZGV2X25hbWUoJmJhc2UtPmNkZXYtPmRldikpOwogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhiYXNlLT5jZGV2KSwgZmxhZ3MpOwogCWJhc2UtPnN0b3BwZWQgJj0gfkRBU0RfU1RPUFBFRF9RVUlFU0NFOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGJhc2UtPmNkZXYpLCBmbGFncyk7CkBAIC0xNDYsOCArMTQ2LDggQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmIChiYXNlLT5zdGF0ZSAhPSBEQVNEX1NUQVRFX0JBU0lDKSB7Ci0JCWRldl93YXJuKCZiYXNlLT5jZGV2LT5kZXYsCi0JCQkgIlRoZSBEQVNEIGNhbm5vdCBiZSBmb3JtYXR0ZWQgd2hpbGUgaXQgaXMgZW5hYmxlZFxuIik7CisJCXByX3dhcm5pbmcoIiVzOiBUaGUgREFTRCBjYW5ub3QgYmUgZm9ybWF0dGVkIHdoaWxlIGl0IGlzICIKKwkJCSAgICJlbmFibGVkXG4iLCAgZGV2X25hbWUoJmJhc2UtPmNkZXYtPmRldikpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMTc1LDkgKzE3NSw5IEBACiAJCWRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIGNxci0+bWVtZGV2KTsKIAkJaWYgKHJjKSB7CiAJCQlpZiAocmMgIT0gLUVSRVNUQVJUU1lTKQotCQkJCWRldl9lcnIoJmJhc2UtPmNkZXYtPmRldiwKLQkJCQkJIkZvcm1hdHRpbmcgdW5pdCAlZCBmYWlsZWQgd2l0aCAiCi0JCQkJCSJyYz0lZFxuIiwgZmRhdGEtPnN0YXJ0X3VuaXQsIHJjKTsKKwkJCQlwcl9lcnIoIiVzOiBGb3JtYXR0aW5nIHVuaXQgJWQgZmFpbGVkIHdpdGggIgorCQkJCSAgICAgICAicmM9JWRcbiIsIGRldl9uYW1lKCZiYXNlLT5jZGV2LT5kZXYpLAorCQkJCSAgICAgICBmZGF0YS0+c3RhcnRfdW5pdCwgcmMpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAJCWZkYXRhLT5zdGFydF91bml0Kys7CkBAIC0yMDQsOSArMjA0LDkgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmZkYXRhLCBhcmdwLCBzaXplb2Yoc3RydWN0IGZvcm1hdF9kYXRhX3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJaWYgKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpIHsKLQkJZGV2X3dhcm4oJmJsb2NrLT5iYXNlLT5jZGV2LT5kZXYsCi0JCQkgIlRoZSBzcGVjaWZpZWQgREFTRCBpcyBhIHBhcnRpdGlvbiBhbmQgY2Fubm90IGJlICIKLQkJCSAiZm9ybWF0dGVkXG4iKTsKKwkJcHJfd2FybmluZygiJXM6IFRoZSBzcGVjaWZpZWQgREFTRCBpcyBhIHBhcnRpdGlvbiBhbmQgY2Fubm90ICIKKwkJCSAgICJiZSBmb3JtYXR0ZWRcbiIsCisJCQkgICBkZXZfbmFtZSgmYmxvY2stPmJhc2UtPmNkZXYtPmRldikpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIGRhc2RfZm9ybWF0KGJsb2NrLCAmZmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL3hwcmFtLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYwppbmRleCBkYjQ0MmNkLi5lZTYwNGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYwpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogCiAjZGVmaW5lIFhQUkFNX05BTUUJInhwcmFtIgogI2RlZmluZSBYUFJBTV9ERVZTCTEJLyogb25lIHBhcnRpdGlvbiAqLwpAQCAtNTEsNyArNTAsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGludAlzaXplOwkJLyogc2l6ZSBvZiB4cHJhbSBzZWdtZW50IGluIHBhZ2VzICovCiAJdW5zaWduZWQgaW50CW9mZnNldDsJCS8qIHN0YXJ0IHBhZ2Ugb2YgeHByYW0gc2VnbWVudCAqLwotCXVuc2lnbmVkIGludAljc3VtOwkJLyogcGFydGl0aW9uIGNoZWNrc3VtIGZvciBzdXNwZW5kICovCiB9IHhwcmFtX2RldmljZV90OwogCiBzdGF0aWMgeHByYW1fZGV2aWNlX3QgeHByYW1fZGV2aWNlc1tYUFJBTV9NQVhfREVWU107CkBAIC0zODcsNTggKzM4NSw2IEBACiB9CiAKIC8qCi0gKiBTYXZlIGNoZWNrc3VtcyBmb3IgYWxsIHBhcnRpdGlvbnMuCi0gKi8KLXN0YXRpYyBpbnQgeHByYW1fc2F2ZV9jaGVja3N1bXModm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOwotCWludCByYywgaTsKLQotCXJjID0gMDsKLQltZW1fcGFnZSA9ICh1bnNpZ25lZCBsb25nKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtZW1fcGFnZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZm9yIChpID0gMDsgaSA8IHhwcmFtX2RldnM7IGkrKykgewotCQlyYyA9IHhwcmFtX3BhZ2VfaW4obWVtX3BhZ2UsIHhwcmFtX2RldmljZXNbaV0ub2Zmc2V0KTsKLQkJaWYgKHJjKQotCQkJZ290byBmYWlsOwotCQl4cHJhbV9kZXZpY2VzW2ldLmNzdW0gPSBjc3VtX3BhcnRpYWwoKGNvbnN0IHZvaWQgKikgbWVtX3BhZ2UsCi0JCQkJCQkgICAgIFBBR0VfU0laRSwgMCk7Ci0JfQotZmFpbDoKLQlmcmVlX3BhZ2UobWVtX3BhZ2UpOwotCXJldHVybiByYyA/IC1FTlhJTyA6IDA7Ci19Ci0KLS8qCi0gKiBWZXJpZnkgY2hlY2tzdW1zIGZvciBhbGwgcGFydGl0aW9ucy4KLSAqLwotc3RhdGljIGludCB4cHJhbV92YWxpZGF0ZV9jaGVja3N1bXModm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOwotCXVuc2lnbmVkIGludCBjc3VtOwotCWludCByYywgaTsKLQotCXJjID0gMDsKLQltZW1fcGFnZSA9ICh1bnNpZ25lZCBsb25nKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtZW1fcGFnZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZm9yIChpID0gMDsgaSA8IHhwcmFtX2RldnM7IGkrKykgewotCQlyYyA9IHhwcmFtX3BhZ2VfaW4obWVtX3BhZ2UsIHhwcmFtX2RldmljZXNbaV0ub2Zmc2V0KTsKLQkJaWYgKHJjKQotCQkJZ290byBmYWlsOwotCQljc3VtID0gY3N1bV9wYXJ0aWFsKChjb25zdCB2b2lkICopIG1lbV9wYWdlLCBQQUdFX1NJWkUsIDApOwotCQlpZiAoeHByYW1fZGV2aWNlc1tpXS5jc3VtICE9IGNzdW0pIHsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCX0KLWZhaWw6Ci0JZnJlZV9wYWdlKG1lbV9wYWdlKTsKLQlyZXR1cm4gcmMgPyAtRU5YSU8gOiAwOwotfQotCi0vKgogICogUmVzdW1lIGZhaWxlZDogUHJpbnQgZXJyb3IgbWVzc2FnZSBhbmQgY2FsbCBwYW5pYy4KICAqLwogc3RhdGljIHZvaWQgeHByYW1fcmVzdW1lX2Vycm9yKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCkBAIC00NTgsMjEgKzQwNCwxMCBAQAogCQl4cHJhbV9yZXN1bWVfZXJyb3IoInhwcmFtIGRpc2FwcGVhcmVkIik7CiAJaWYgKHhwcmFtX3BhZ2VzICE9IHhwcmFtX2hpZ2hlc3RfcGFnZV9pbmRleCgpICsgMSkKIAkJeHByYW1fcmVzdW1lX2Vycm9yKCJTaXplIG9mIHhwcmFtIGNoYW5nZWQiKTsKLQlpZiAoeHByYW1fdmFsaWRhdGVfY2hlY2tzdW1zKCkpCi0JCXhwcmFtX3Jlc3VtZV9lcnJvcigiRGF0YSBvZiB4cHJhbSBjaGFuZ2VkIik7CiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBTYXZlIG5lY2Vzc2FyeSBzdGF0ZSBpbiBzdXNwZW5kLgotICovCi1zdGF0aWMgaW50IHhwcmFtX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIHhwcmFtX3NhdmVfY2hlY2tzdW1zKCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyB4cHJhbV9wbV9vcHMgPSB7Ci0JLmZyZWV6ZQkJPSB4cHJhbV9mcmVlemUsCiAJLnJlc3RvcmUJPSB4cHJhbV9yZXN0b3JlLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvczM5MC9jaGFyL0tjb25maWcKaW5kZXggMDc2OWNlZC4uNGUzNGQzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnCkBAIC04Miw2ICs4MiwxNiBAQAogCSAgWW91IHNob3VsZCBvbmx5IHNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsCiAJICBuZWVkIHRoaXMgZmVhdHVyZSBhbmQgaW50ZW5kIHRvIHJ1biB5b3VyIGtlcm5lbCBpbiBMUEFSLgogCitjb25maWcgU0NMUF9BU1lOQworCXRyaXN0YXRlICJTdXBwb3J0IGZvciBDYWxsIEhvbWUgdmlhIEFzeW5jaHJvbm91cyBTQ0xQIFJlY29yZHMiCisJZGVwZW5kcyBvbiBTMzkwCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgY2FsbCBob21lIGZ1bmN0aW9uLCB3aGljaCBpcyBhYmxlIHRvIGluZm9ybQorCSAgdGhlIHNlcnZpY2UgZWxlbWVudCBhbmQgY29ubmVjdGVkIG9yZ2FuaXNhdGlvbnMgYWJvdXQgYSBrZXJuZWwgcGFuaWMuCisJICBZb3Ugc2hvdWxkIG9ubHkgc2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywKKwkgIHdhbnQgZm9yIGluZm9ybSBvdGhlciBwZW9wbGUgYWJvdXQgeW91ciBrZXJuZWwgcGFuaWNzLAorCSAgbmVlZCB0aGlzIGZlYXR1cmUgYW5kIGludGVuZCB0byBydW4geW91ciBrZXJuZWwgaW4gTFBBUi4KKwogY29uZmlnIFMzOTBfVEFQRQogCXRyaXN0YXRlICJTLzM5MCB0YXBlIGRldmljZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ0NXCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9NYWtlZmlsZSBiL2RyaXZlcnMvczM5MC9jaGFyL01ha2VmaWxlCmluZGV4IDdlNzNlMzkuLmVmYjUwMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBACiBvYmotJChDT05GSUdfU0NMUF9DT05TT0xFKSArPSBzY2xwX2Nvbi5vCiBvYmotJChDT05GSUdfU0NMUF9WVDIyMF9UVFkpICs9IHNjbHBfdnQyMjAubwogb2JqLSQoQ09ORklHX1NDTFBfQ1BJKSArPSBzY2xwX2NwaS5vCitvYmotJChDT05GSUdfU0NMUF9BU1lOQykgKz0gc2NscF9hc3luYy5vCiAKIG9iai0kKENPTkZJR19aVk1fV0FUQ0hET0cpICs9IHZtd2F0Y2hkb2cubwogb2JqLSQoQ09ORklHX1ZNTE9HUkRSKSArPSB2bWxvZ3Jkci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCmluZGV4IDMyMzRlOTAuLjg5ZWNlMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCkBAIC01ODEsNyArNTgxLDcgQEAKIAltb25yZWFkZXJfZGV2aWNlLT5yZWxlYXNlID0gKHZvaWQgKCopKHN0cnVjdCBkZXZpY2UgKikpa2ZyZWU7CiAJcmMgPSBkZXZpY2VfcmVnaXN0ZXIobW9ucmVhZGVyX2RldmljZSk7CiAJaWYgKHJjKSB7Ci0JCWtmcmVlKG1vbnJlYWRlcl9kZXZpY2UpOworCQlwdXRfZGV2aWNlKG1vbnJlYWRlcl9kZXZpY2UpOwogCQlnb3RvIG91dF9kcml2ZXI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmggYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmgKaW5kZXggNjBlN2NiMC4uNmJiNWE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscC5oCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBFVlRZUF9WVDIyME1TRwkJMHgxQQogI2RlZmluZSBFVlRZUF9DT05GTUdNREFUQQkweDA0CiAjZGVmaW5lIEVWVFlQX1NESUFTCQkweDFDCisjZGVmaW5lIEVWVFlQX0FTWU5DCQkweDBBCiAKICNkZWZpbmUgRVZUWVBfT1BDTURfTUFTSwkweDgwMDAwMDAwCiAjZGVmaW5lIEVWVFlQX01TR19NQVNLCQkweDQwMDAwMDAwCkBAIC0zOCw2ICszOSw3IEBACiAjZGVmaW5lIEVWVFlQX1ZUMjIwTVNHX01BU0sJMHgwMDAwMDA0MAogI2RlZmluZSBFVlRZUF9DT05GTUdNREFUQV9NQVNLCTB4MTAwMDAwMDAKICNkZWZpbmUgRVZUWVBfU0RJQVNfTUFTSwkweDAwMDAwMDEwCisjZGVmaW5lIEVWVFlQX0FTWU5DX01BU0sJMHgwMDQwMDAwMAogCiAjZGVmaW5lIEdOUkxNU0dGTEdTX0RPTQkJMHg4MDAwCiAjZGVmaW5lIEdOUkxNU0dGTEdTX1NOREFMUk0JMHg0MDAwCkBAIC04NSwxMiArODcsMTIgQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIGV4dGVybiB1NjQgc2NscF9mYWNpbGl0aWVzOwotCiAjZGVmaW5lIFNDTFBfSEFTX0NIUF9JTkZPCShzY2xwX2ZhY2lsaXRpZXMgJiAweDgwMDAwMDAwMDAwMDAwMDBVTEwpCiAjZGVmaW5lIFNDTFBfSEFTX0NIUF9SRUNPTkZJRwkoc2NscF9mYWNpbGl0aWVzICYgMHgyMDAwMDAwMDAwMDAwMDAwVUxMKQogI2RlZmluZSBTQ0xQX0hBU19DUFVfSU5GTwkoc2NscF9mYWNpbGl0aWVzICYgMHgwODAwMDAwMDAwMDAwMDAwVUxMKQogI2RlZmluZSBTQ0xQX0hBU19DUFVfUkVDT05GSUcJKHNjbHBfZmFjaWxpdGllcyAmIDB4MDQwMDAwMDAwMDAwMDAwMFVMTCkKIAorCiBzdHJ1Y3QgZ2RzX3N1YnZlY3RvciB7CiAJdTgJbGVuZ3RoOwogCXU4CWtleTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfYXN5bmMuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfYXN5bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWFlYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogRW5hYmxlIEFzeW5jaHJvbm91cyBOb3RpZmljYXRpb24gdmlhIFNDTFAuCisgKgorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA5CisgKiBBdXRob3Iocyk6IEhhbnMtSm9hY2hpbSBQaWNodCA8aGFuc0BsaW51eC52bmV0LmlibS5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlICJzY2xwLmgiCisKK3N0YXRpYyBpbnQgY2FsbGhvbWVfZW5hYmxlZDsKK3N0YXRpYyBzdHJ1Y3Qgc2NscF9yZXEgKnJlcXVlc3Q7CitzdGF0aWMgc3RydWN0IHNjbHBfYXN5bmNfc2NjYiAqc2NjYjsKK3N0YXRpYyBpbnQgc2NscF9hc3luY19zZW5kX3dhaXQoY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmNhbGxob21lX3N5c2N0bF9oZWFkZXI7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNjbHBfYXN5bmNfbG9jayk7CitzdGF0aWMgY2hhciBub2RlbmFtZVs2NF07CisjZGVmaW5lIFNDTFBfTk9STUFMX1dSSVRFCTB4MDAKKworc3RydWN0IGFzeW5jX2V2YnVmIHsKKwlzdHJ1Y3QgZXZidWZfaGVhZGVyIGhlYWRlcjsKKwl1NjQgcmVzZXJ2ZWQ7CisJdTggcmZsYWdzOworCXU4IGVtcHR5OworCXU4IHJ0eXBlOworCXU4IG90eXBlOworCWNoYXIgY29tcF9pZFsxMl07CisJY2hhciBkYXRhWzMwMDBdOyAvKiB0aGVyZSBpcyBzdGlsbCBzb21lIHNwYWNlIGxlZnQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzY2xwX2FzeW5jX3NjY2IgeworCXN0cnVjdCBzY2NiX2hlYWRlciBoZWFkZXI7CisJc3RydWN0IGFzeW5jX2V2YnVmIGV2YnVmOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIHN0cnVjdCBzY2xwX3JlZ2lzdGVyIHNjbHBfYXN5bmNfcmVnaXN0ZXIgPSB7CisJLnNlbmRfbWFzayA9IEVWVFlQX0FTWU5DX01BU0ssCit9OworCitzdGF0aWMgaW50IGNhbGxfaG9tZV9vbl9wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQoreworCQlzdHJuY2F0KGRhdGEsIG5vZGVuYW1lLCBzdHJsZW4obm9kZW5hbWUpKTsKKwkJc2NscF9hc3luY19zZW5kX3dhaXQoZGF0YSk7CisJCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjYWxsX2hvbWVfcGFuaWNfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBjYWxsX2hvbWVfb25fcGFuaWMsCisJLnByaW9yaXR5ID0gSU5UX01BWCwKK307CisKK3N0YXRpYyBpbnQgcHJvY19oYW5kbGVyX2NhbGxob21lKGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCSB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmNvdW50LAorCQkJCSBsb2ZmX3QgKnBwb3MpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IGxlbiwgcmM7CisJY2hhciBidWZbMl07CisKKwlpZiAoISpjb3VudCB8ICgqcHBvcyAmJiAhd3JpdGUpKSB7CisJCSpjb3VudCA9IDA7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXdyaXRlKSB7CisJCWxlbiA9ICBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjYWxsaG9tZV9lbmFibGVkKTsKKwkJYnVmW2xlbl0gPSAnXDAnOworCQlyYyA9IGNvcHlfdG9fdXNlcihidWZmZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlpZiAocmMgIT0gMCkKKwkJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZSB7CisJCWxlbiA9ICpjb3VudDsKKwkJcmMgPSBjb3B5X2Zyb21fdXNlcihidWYsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZikpOworCQlpZiAocmMgIT0gMCkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKSAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh2YWwgIT0gMCAmJiB2YWwgIT0gMSkKKwkJCXJldHVybiAtRUlOVkFMOworCQljYWxsaG9tZV9lbmFibGVkID0gdmFsOworCX0KKwkqY291bnQgPSBsZW47CisJKnBwb3MgKz0gbGVuOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBjYWxsaG9tZV90YWJsZVtdID0geworCXsKKwkJLnByb2NuYW1lCT0gImNhbGxob21lIiwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2hhbmRsZXJfY2FsbGhvbWUsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDAgfQorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUga2Vybl9kaXJfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9LRVJOLAorCQkucHJvY25hbWUJPSAia2VybmVsIiwKKwkJLm1heGxlbgkJPSAwLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gY2FsbGhvbWVfdGFibGUsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDAgfQorfTsKKworLyoKKyAqIEZ1bmN0aW9uIHVzZWQgdG8gdHJhbnNmZXIgYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbgorICogcmVjb3JkcyB3aGljaCB3YWl0cyBmb3Igc2VuZCBjb21wbGV0aW9uCisgKi8KK3N0YXRpYyBpbnQgc2NscF9hc3luY19zZW5kX3dhaXQoY2hhciAqbWVzc2FnZSkKK3sKKwlzdHJ1Y3QgYXN5bmNfZXZidWYgKmV2YjsKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghY2FsbGhvbWVfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisJc2NjYi0+ZXZidWYuaGVhZGVyLnR5cGUgPSBFVlRZUF9BU1lOQzsKKwlzY2NiLT5ldmJ1Zi5ydHlwZSA9IDB4QTU7CisJc2NjYi0+ZXZidWYub3R5cGUgPSAweDAwOworCWV2YiA9ICZzY2NiLT5ldmJ1ZjsKKwlyZXF1ZXN0LT5jb21tYW5kID0gU0NMUF9DTURXX1dSSVRFX0VWRU5UX0RBVEE7CisJcmVxdWVzdC0+c2NjYiA9IHNjY2I7CisJcmVxdWVzdC0+c3RhdHVzID0gU0NMUF9SRVFfRklMTEVEOworCXN0cm5jcHkoc2NjYi0+ZXZidWYuZGF0YSwgbWVzc2FnZSwgc2l6ZW9mKHNjY2ItPmV2YnVmLmRhdGEpKTsKKwkvKgorCSAqIFJldGFpbiBRdWV1ZQorCSAqIGUuZy4gNTYzOUNDMTQwIDUwMCBSZWQgSGF0IFJIRUw1IExpbnV4IGZvciB6U2VyaWVzIChSSEVMIEFTKQorCSAqLworCXN0cm5jcHkoc2NjYi0+ZXZidWYuY29tcF9pZCwgIjAwMDAwMDAwMCIsIHNpemVvZihzY2NiLT5ldmJ1Zi5jb21wX2lkKSk7CisJc2NjYi0+ZXZidWYuaGVhZGVyLmxlbmd0aCA9IHNpemVvZihzY2NiLT5ldmJ1Zik7CisJc2NjYi0+aGVhZGVyLmxlbmd0aCA9IHNpemVvZihzY2NiLT5ldmJ1ZikgKyBzaXplb2Yoc2NjYi0+aGVhZGVyKTsKKwlzY2NiLT5oZWFkZXIuZnVuY3Rpb25fY29kZSA9IFNDTFBfTk9STUFMX1dSSVRFOworCXJjID0gc2NscF9hZGRfcmVxdWVzdChyZXF1ZXN0KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2NscF9hc3luY19sb2NrLCBmbGFncyk7CisJd2hpbGUgKHJlcXVlc3QtPnN0YXR1cyAhPSBTQ0xQX1JFUV9ET05FICYmCisJCXJlcXVlc3QtPnN0YXR1cyAhPSBTQ0xQX1JFUV9GQUlMRUQpIHsKKwkJIHNjbHBfc3luY193YWl0KCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjbHBfYXN5bmNfbG9jaywgZmxhZ3MpOworCWlmIChyZXF1ZXN0LT5zdGF0dXMgIT0gU0NMUF9SRVFfRE9ORSkKKwkJcmV0dXJuIC1FSU87CisJcmMgPSAoKHN0cnVjdCBzY2xwX2FzeW5jX3NjY2IgKikKKwkgICAgICAgcmVxdWVzdC0+c2NjYiktPmhlYWRlci5yZXNwb25zZV9jb2RlOworCWlmIChyYyAhPSAweDAwMjApCisJCXJldHVybiAtRUlPOworCWlmIChldmItPmhlYWRlci5mbGFncyAhPSAweDgwKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNjbHBfYXN5bmNfaW5pdCh2b2lkKQoreworCWludCByYzsKKworCXJjID0gc2NscF9yZWdpc3Rlcigmc2NscF9hc3luY19yZWdpc3Rlcik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJY2FsbGhvbWVfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShrZXJuX2Rpcl90YWJsZSk7CisJaWYgKCFjYWxsaG9tZV9zeXNjdGxfaGVhZGVyKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfc2NscDsKKwl9CisJaWYgKCEoc2NscF9hc3luY19yZWdpc3Rlci5zY2xwX3JlY2VpdmVfbWFzayAmIEVWVFlQX0FTWU5DX01BU0spKSB7CisJCXJjID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0X3NjbHA7CisJfQorCXJjID0gLUVOT01FTTsKKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNjbHBfcmVxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KQorCQlnb3RvIG91dF9zeXM7CisJc2NjYiA9IChzdHJ1Y3Qgc2NscF9hc3luY19zY2NiICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJaWYgKCFzY2NiKQorCQlnb3RvIG91dF9tZW07CisJcmMgPSAgYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAorCQkJCQkgICAgICZjYWxsX2hvbWVfcGFuaWNfbmIpOworCWlmIChyYykKKwkJZ290byBvdXRfbWVtOworCisJc3RybmNweShub2RlbmFtZSwgaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lLCA2NCk7CisJcmV0dXJuIDA7CisKK291dF9tZW06CisJa2ZyZWUocmVxdWVzdCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBzY2NiKTsKK291dF9zeXM6CisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoY2FsbGhvbWVfc3lzY3RsX2hlYWRlcik7CitvdXRfc2NscDoKKwlzY2xwX3VucmVnaXN0ZXIoJnNjbHBfYXN5bmNfcmVnaXN0ZXIpOworCXJldHVybiByYzsKKworfQorbW9kdWxlX2luaXQoc2NscF9hc3luY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNjbHBfYXN5bmNfZXhpdCh2b2lkKQoreworCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAorCQkJCQkgJmNhbGxfaG9tZV9wYW5pY19uYik7CisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoY2FsbGhvbWVfc3lzY3RsX2hlYWRlcik7CisJc2NscF91bnJlZ2lzdGVyKCZzY2xwX2FzeW5jX3JlZ2lzdGVyKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHNjY2IpOworCWtmcmVlKHJlcXVlc3QpOworfQorbW9kdWxlX2V4aXQoc2NscF9hc3luY19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA5Iik7CitNT0RVTEVfQVVUSE9SKCJIYW5zLUpvYWNoaW0gUGljaHQgPGhhbnNAbGludXgudm5ldC5pYm0uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTQ0xQIEFzeW5jaHJvbm91cyBOb3RpZmljYXRpb24gUmVjb3JkcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYwppbmRleCA1YTUxOWZhLi4yZmU0NWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYwpAQCAtOCw3ICs4LDcgQEAKICAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgogICovCiAKLSNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlXzM0eHgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCmluZGV4IDQxOGY3MmQuLmU0Y2MzYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCkBAIC04LDcgKzgsNyBAQAogICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CiAgKi8KIAotI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGVfMzU5MCIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTM5LDggKzM5LDYgQEAKICAqIC0gUmVhZCBBbHRlcm5hdGU6CQkgaW1wbGVtZW50ZWQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgotCiBzdGF0aWMgY29uc3QgY2hhciAqdGFwZV8zNTkwX21zZ1tUQVBFXzM1OTBfTUFYX01TR10gPSB7CiAJWzB4MDBdID0gIiIsCiAJWzB4MTBdID0gIkxvc3QgU2Vuc2UiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IDQ3ZmY2OTUuLjRjYjllNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKQEAgLTMwMiw4ICszMDIsNiBAQAogCWlmICghZGV2aWNlLT5ibGtfZGF0YS5tZWRpdW1fY2hhbmdlZCkKIAkJcmV0dXJuIDA7CiAKLQlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsICJEZXRlcm1pbmluZyB0aGUgc2l6ZSBvZiB0aGUgcmVjb3JkZWQgIgotCQkiYXJlYS4uLlxuIik7CiAJcmMgPSB0YXBlX210b3AoZGV2aWNlLCBNVEZTRk0sIDEpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtMzEyLDYgKzMxMCw4IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCisJcHJfaW5mbygiJXM6IERldGVybWluaW5nIHRoZSBzaXplIG9mIHRoZSByZWNvcmRlZCBhcmVhLi4uXG4iLAorCQlkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAlEQkZfTEgoMywgIkltYWdlIGZpbGUgZW5kcyBhdCAlZFxuIiwgcmMpOwogCW5yX29mX2Jsa3MgPSByYzsKIApAQCAtMzMwLDggKzMzMCw4IEBACiAJZGV2aWNlLT5ib2YgPSByYzsKIAlucl9vZl9ibGtzIC09IHJjOwogCi0JZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHNpemUgb2YgdGhlIHJlY29yZGVkIGFyZWEgaXMgJWkgIgotCQkiYmxvY2tzXG4iLCBucl9vZl9ibGtzKTsKKwlwcl9pbmZvKCIlczogVGhlIHNpemUgb2YgdGhlIHJlY29yZGVkIGFyZWEgaXMgJWkgYmxvY2tzXG4iLAorCQlkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBucl9vZl9ibGtzKTsKIAlzZXRfY2FwYWNpdHkoZGV2aWNlLT5ibGtfZGF0YS5kaXNrLAogCQlucl9vZl9ibGtzKihUQVBFQkxPQ0tfSFNFQ19TSVpFLzUxMikpOwogCkBAIC0zNjYsOCArMzY2LDggQEAKIAogCWlmIChkZXZpY2UtPnJlcXVpcmVkX3RhcGVtYXJrcykgewogCQlEQkZfRVZFTlQoMiwgIlRCTE9DSzogbWlzc2luZyB0YXBlbWFya3NcbiIpOwotCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJPcGVuaW5nIHRoZSB0YXBlIGZhaWxlZCBiZWNhdXNlIgotCQkJIiBvZiBtaXNzaW5nIGVuZC1vZi1maWxlIG1hcmtzXG4iKTsKKwkJcHJfd2FybmluZygiJXM6IE9wZW5pbmcgdGhlIHRhcGUgZmFpbGVkIGJlY2F1c2Ugb2YgbWlzc2luZyAiCisJCQkgICAiZW5kLW9mLWZpbGUgbWFya3NcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlyYyA9IC1FUEVSTTsKIAkJZ290byBwdXRfZGV2aWNlOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKaW5kZXggMWQ0MjBkOS4uNWNkMzFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKQEAgLTIxNCwxMyArMjE0LDE1IEBACiAJc3dpdGNoKG5ld3N0YXRlKXsKIAljYXNlIE1TX1VOTE9BREVEOgogCQlkZXZpY2UtPnRhcGVfZ2VuZXJpY19zdGF0dXMgfD0gR01UX0RSX09QRU4ofjApOwotCQlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBjYXJ0cmlkZ2UgaGFzIGJlZW4gIgotCQkJInN1Y2Nlc3NmdWxseSB1bmxvYWRlZFxuIik7CisJCWlmIChkZXZpY2UtPm1lZGl1bV9zdGF0ZSA9PSBNU19MT0FERUQpCisJCQlwcl9pbmZvKCIlczogVGhlIHRhcGUgY2FydHJpZGdlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSAiCisJCQkJInVubG9hZGVkXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJYnJlYWs7CiAJY2FzZSBNU19MT0FERUQ6CiAJCWRldmljZS0+dGFwZV9nZW5lcmljX3N0YXR1cyAmPSB+R01UX0RSX09QRU4ofjApOwotCQlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsICJBIHRhcGUgY2FydHJpZGdlIGhhcyBiZWVuICIKLQkJCSJtb3VudGVkXG4iKTsKKwkJaWYgKGRldmljZS0+bWVkaXVtX3N0YXRlID09IE1TX1VOTE9BREVEKQorCQkJcHJfaW5mbygiJXM6IEEgdGFwZSBjYXJ0cmlkZ2UgaGFzIGJlZW4gbW91bnRlZFxuIiwKKwkJCQlkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLy8gcHJpbnQgbm90aGluZwpAQCAtMzU4LDExICszNjAsMTEgQEAKIAogb3V0X2NoYXI6CiAJdGFwZWNoYXJfY2xlYW51cF9kZXZpY2UoZGV2aWNlKTsKK291dF9taW5vcjoKKwl0YXBlX3JlbW92ZV9taW5vcihkZXZpY2UpOwogb3V0X2Rpc2NpcGxpbmU6CiAJZGV2aWNlLT5kaXNjaXBsaW5lLT5jbGVhbnVwX2RldmljZShkZXZpY2UpOwogCWRldmljZS0+ZGlzY2lwbGluZSA9IE5VTEw7Ci1vdXRfbWlub3I6Ci0JdGFwZV9yZW1vdmVfbWlub3IoZGV2aWNlKTsKIG91dDoKIAltb2R1bGVfcHV0KGRpc2NpcGxpbmUtPm93bmVyKTsKIAlyZXR1cm4gcmM7CkBAIC02NTQsOCArNjU2LDggQEAKIAkJCSAqLwogCQkJREJGX0VWRU5UKDMsICIoJTA4eCk6IERyaXZlIGluIHVzZSB2YW5pc2hlZCFcbiIsCiAJCQkJZGV2aWNlLT5jZGV2X2lkKTsKLQkJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgdGFwZSB1bml0IHdhcyBkZXRhY2hlZCIKLQkJCQkiIHdoaWxlIGluIHVzZVxuIik7CisJCQlwcl93YXJuaW5nKCIlczogQSB0YXBlIHVuaXQgd2FzIGRldGFjaGVkIHdoaWxlIGluICIKKwkJCQkgICAidXNlXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJCXRhcGVfc3RhdGVfc2V0KGRldmljZSwgVFNfTk9UX09QRVIpOwogCQkJX190YXBlX2Rpc2NhcmRfcmVxdWVzdHMoZGV2aWNlKTsKIAkJCXNwaW5fdW5sb2NrX2lycShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYwppbmRleCAxYTk0MjBiLi43NTAzNTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkgKiB0byBhbm90aGVyIGhvc3QgKGFjdHVhbGx5IHRoaXMgc2hvdWxkbid0IGhhcHBlbiBidXQgaXQgZG9lcykuCiAJICogU28gd2Ugc2V0IHVwIGEgdGltZW91dCBmb3IgdGhpcyBjYWxsLgogCSAqLwotCWluaXRfdGltZXIoJnRpbWVvdXQpOworCWluaXRfdGltZXJfb25fc3RhY2soJnRpbWVvdXQpOwogCXRpbWVvdXQuZnVuY3Rpb24gPSB0YXBlX3N0ZF9hc3NpZ25fdGltZW91dDsKIAl0aW1lb3V0LmRhdGEgICAgID0gKHVuc2lnbmVkIGxvbmcpIHJlcXVlc3Q7CiAJdGltZW91dC5leHBpcmVzICA9IGppZmZpZXMgKyAyICogSFo7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdm1sb2dyZHIuYwppbmRleCBjMjBhNGZlLi5kMWExNDJmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdm1sb2dyZHIuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jCkBAIC03NjUsOCArNzY1LDEwIEBACiAJfSBlbHNlCiAJCXJldHVybiAtRU5PTUVNOwogCXJldCA9IGRldmljZV9yZWdpc3RlcihkZXYpOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlwdXRfZGV2aWNlKGRldik7CiAJCXJldHVybiByZXQ7CisJfQogCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZ2bWxvZ3Jkcl9hdHRyX2dyb3VwKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMKaW5kZXggMzFiOTAyZS4uNzc1NzFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYwpAQCAtMTAyNiw5ICsxMDI2LDE1IEBACiAKIAlkZWJ1Z19zZXRfbGV2ZWwodm11cl9kYmYsIDYpOwogCisJdm11cl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInZtdXIiKTsKKwlpZiAoSVNfRVJSKHZtdXJfY2xhc3MpKSB7CisJCXJjID0gUFRSX0VSUih2bXVyX2NsYXNzKTsKKwkJZ290byBmYWlsX2ZyZWVfZGJmOworCX0KKwogCXJjID0gY2N3X2RyaXZlcl9yZWdpc3RlcigmdXJfZHJpdmVyKTsKIAlpZiAocmMpCi0JCWdvdG8gZmFpbF9mcmVlX2RiZjsKKwkJZ290byBmYWlsX2NsYXNzX2Rlc3Ryb3k7CiAKIAlyYyA9IGFsbG9jX2NocmRldl9yZWdpb24oJmRldiwgMCwgTlVNX01JTk9SUywgInZtdXIiKTsKIAlpZiAocmMpIHsKQEAgLTEwMzgsMTggKzEwNDQsMTMgQEAKIAl9CiAJdXJfZmlyc3RfZGV2X21hal9taW4gPSBNS0RFVihNQUpPUihkZXYpLCAwKTsKIAotCXZtdXJfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJ2bXVyIik7Ci0JaWYgKElTX0VSUih2bXVyX2NsYXNzKSkgewotCQlyYyA9IFBUUl9FUlIodm11cl9jbGFzcyk7Ci0JCWdvdG8gZmFpbF91bnJlZ2lzdGVyX3JlZ2lvbjsKLQl9CiAJcHJfaW5mbygiJXMgbG9hZGVkLlxuIiwgdXJfYmFubmVyKTsKIAlyZXR1cm4gMDsKIAotZmFpbF91bnJlZ2lzdGVyX3JlZ2lvbjoKLQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24odXJfZmlyc3RfZGV2X21hal9taW4sIE5VTV9NSU5PUlMpOwogZmFpbF91bnJlZ2lzdGVyX2RyaXZlcjoKIAljY3dfZHJpdmVyX3VucmVnaXN0ZXIoJnVyX2RyaXZlcik7CitmYWlsX2NsYXNzX2Rlc3Ryb3k6CisJY2xhc3NfZGVzdHJveSh2bXVyX2NsYXNzKTsKIGZhaWxfZnJlZV9kYmY6CiAJZGVidWdfdW5yZWdpc3Rlcih2bXVyX2RiZik7CiAJcmV0dXJuIHJjOwpAQCAtMTA1Nyw5ICsxMDU4LDkgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHVyX2V4aXQodm9pZCkKIHsKLQljbGFzc19kZXN0cm95KHZtdXJfY2xhc3MpOwogCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbih1cl9maXJzdF9kZXZfbWFqX21pbiwgTlVNX01JTk9SUyk7CiAJY2N3X2RyaXZlcl91bnJlZ2lzdGVyKCZ1cl9kcml2ZXIpOworCWNsYXNzX2Rlc3Ryb3kodm11cl9jbGFzcyk7CiAJZGVidWdfdW5yZWdpc3Rlcih2bXVyX2RiZik7CiAJcHJfaW5mbygiJXMgdW5sb2FkZWQuXG4iLCB1cl9iYW5uZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKaW5kZXggMWJiYWU0My4uYzQzMTE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCkBAIC0yNzUsNyArMjc1LDcgQEAKIAl1MzIgbnVtX3BhZ2VzOwogCXUzMiBwYWQxOwogCXU2NCB0b2Q7Ci0JY3B1aWRfdCBjcHVfaWQ7CisJc3RydWN0IGNwdWlkIGNwdV9pZDsKIAl1MzIgYXJjaF9pZDsKIAl1MzIgdm9sbnI7CiAJdTMyIGJ1aWxkX2FyY2g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlIGIvZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZQppbmRleCBhZGIzZGQzLi5mYTRjOTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgUy8zOTAgY29tbW9uIGkvbyBkcml2ZXJzCiAjCiAKLW9iai15ICs9IGFpcnEubyBibGFja2xpc3QubyBjaHNjLm8gY2lvLm8gY3NzLm8gY2hwLm8gaWRzZXQubyBpc2MubyBzY3N3Lm8gXAorb2JqLXkgKz0gYWlycS5vIGJsYWNrbGlzdC5vIGNoc2MubyBjaW8ubyBjc3MubyBjaHAubyBpZHNldC5vIGlzYy5vIFwKIAlmY3gubyBpdGN3Lm8gY3J3Lm8KIGNjd19kZXZpY2Utb2JqcyArPSBkZXZpY2UubyBkZXZpY2VfZnNtLm8gZGV2aWNlX29wcy5vCiBjY3dfZGV2aWNlLW9ianMgKz0gZGV2aWNlX2lkLm8gZGV2aWNlX3BnaWQubyBkZXZpY2Vfc3RhdHVzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2NocC5jCmluZGV4IDNlNWYzMDQuLjQwMDAyODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHAuYwpAQCAtNDE3LDcgKzQxNyw4IEBACiAJaWYgKHJldCkgewogCQlDSU9fTVNHX0VWRU5UKDAsICJDb3VsZCBub3QgcmVnaXN0ZXIgY2hwJXguJTAyeDogJWRcbiIsCiAJCQkgICAgICBjaHBpZC5jc3NpZCwgY2hwaWQuaWQsIHJldCk7Ci0JCWdvdG8gb3V0X2ZyZWU7CisJCXB1dF9kZXZpY2UoJmNocC0+ZGV2KTsKKwkJZ290byBvdXQ7CiAJfQogCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2hwLT5kZXYua29iaiwgJmNocF9hdHRyX2dyb3VwKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuaCBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5oCmluZGV4IDQyNWU4ZjguLjM3YWE2MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5oCkBAIC0zNywyOSArMzcsNiBAQAogCiBzdHJ1Y3QgY2hhbm5lbF9wYXRoOwogCi1zdHJ1Y3QgY3NzX2dlbmVyYWxfY2hhciB7Ci0JdTY0IDogMTI7Ci0JdTMyIGR5bmlvIDogMTsJIC8qIGJpdCAxMiAqLwotCXUzMiA6IDI4OwotCXUzMiBhaWYgOiAxOyAgICAgLyogYml0IDQxICovCi0JdTMyIDogMzsKLQl1MzIgbWNzcyA6IDE7ICAgIC8qIGJpdCA0NSAqLwotCXUzMiBmY3MgOiAxOwkgLyogYml0IDQ2ICovCi0JdTMyIDogMTsKLQl1MzIgZXh0X21iIDogMTsgIC8qIGJpdCA0OCAqLwotCXUzMiA6IDc7Ci0JdTMyIGFpZl90ZGQgOiAxOyAvKiBiaXQgNTYgKi8KLQl1MzIgOiAxOwotCXUzMiBxZWJzbSA6IDE7ICAgLyogYml0IDU4ICovCi0JdTMyIDogODsKLQl1MzIgYWlmX29zYSA6IDE7IC8qIGJpdCA2NyAqLwotCXUzMiA6IDE0OwotCXUzMiBjaWIgOiAxOwkgLyogYml0IDgyICovCi0JdTMyIDogNTsKLQl1MzIgZmN4IDogMTsJIC8qIGJpdCA4OCAqLwotCXUzMiA6IDc7Ci19X19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KIHN0cnVjdCBjc3NfY2hzY19jaGFyIHsKIAl1NjQgcmVzOwogCXU2NCA6IDIwOwpAQCAtNzIsNyArNDksNiBAQAogCXUzMiA6IDE5OwogfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1leHRlcm4gc3RydWN0IGNzc19nZW5lcmFsX2NoYXIgY3NzX2dlbmVyYWxfY2hhcmFjdGVyaXN0aWNzOwogZXh0ZXJuIHN0cnVjdCBjc3NfY2hzY19jaGFyIGNzc19jaHNjX2NoYXJhY3RlcmlzdGljczsKIAogc3RydWN0IGNoc2Nfc3NkX2luZm8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKaW5kZXggNWVjNzc4OS4uMTM4MTI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCkBAIC0xMzksMTIgKzEzOSwxMSBAQAogCSAgICAgICBfX3U4IGxwbSwJCS8qIGxvZ2ljYWwgcGF0aCBtYXNrICovCiAJICAgICAgIF9fdTgga2V5KSAgICAgICAgICAgICAgICAvKiBzdG9yYWdlIGtleSAqLwogewotCWNoYXIgZGJmX3R4dFsxNV07CiAJaW50IGNjb2RlOwogCXVuaW9uIG9yYiAqb3JiOwogCi0JQ0lPX1RSQUNFX0VWRU5UKDQsICJzdElPIik7Ci0JQ0lPX1RSQUNFX0VWRU5UKDQsIGRldl9uYW1lKCZzY2gtPmRldikpOworCUNJT19UUkFDRV9FVkVOVCg1LCAic3RJTyIpOworCUNJT19UUkFDRV9FVkVOVCg1LCBkZXZfbmFtZSgmc2NoLT5kZXYpKTsKIAogCW9yYiA9ICZ0b19pb19wcml2YXRlKHNjaCktPm9yYjsKIAltZW1zZXQob3JiLCAwLCBzaXplb2YodW5pb24gb3JiKSk7CkBAIC0xNjksOCArMTY4LDcgQEAKIAljY29kZSA9IHNzY2goc2NoLT5zY2hpZCwgb3JiKTsKIAogCS8qIHByb2Nlc3MgY29uZGl0aW9uIGNvZGUgKi8KLQlzcHJpbnRmKGRiZl90eHQsICJjY29kZTolZCIsIGNjb2RlKTsKLQlDSU9fVFJBQ0VfRVZFTlQoNCwgZGJmX3R4dCk7CisJQ0lPX0hFWF9FVkVOVCg1LCAmY2NvZGUsIHNpemVvZihjY29kZSkpOwogCiAJc3dpdGNoIChjY29kZSkgewogCWNhc2UgMDoKQEAgLTIwMSwxNiArMTk5LDE0IEBACiBpbnQKIGNpb19yZXN1bWUgKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpCiB7Ci0JY2hhciBkYmZfdHh0WzE1XTsKIAlpbnQgY2NvZGU7CiAKLQlDSU9fVFJBQ0VfRVZFTlQgKDQsICJyZXNJTyIpOworCUNJT19UUkFDRV9FVkVOVCg0LCAicmVzSU8iKTsKIAlDSU9fVFJBQ0VfRVZFTlQoNCwgZGV2X25hbWUoJnNjaC0+ZGV2KSk7CiAKIAljY29kZSA9IHJzY2ggKHNjaC0+c2NoaWQpOwogCi0Jc3ByaW50ZiAoZGJmX3R4dCwgImNjb2RlOiVkIiwgY2NvZGUpOwotCUNJT19UUkFDRV9FVkVOVCAoNCwgZGJmX3R4dCk7CisJQ0lPX0hFWF9FVkVOVCg0LCAmY2NvZGUsIHNpemVvZihjY29kZSkpOwogCiAJc3dpdGNoIChjY29kZSkgewogCWNhc2UgMDoKQEAgLTIzNSwxMyArMjMxLDEyIEBACiBpbnQKIGNpb19oYWx0KHN0cnVjdCBzdWJjaGFubmVsICpzY2gpCiB7Ci0JY2hhciBkYmZfdHh0WzE1XTsKIAlpbnQgY2NvZGU7CiAKIAlpZiAoIXNjaCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlDSU9fVFJBQ0VfRVZFTlQgKDIsICJoYWx0SU8iKTsKKwlDSU9fVFJBQ0VfRVZFTlQoMiwgImhhbHRJTyIpOwogCUNJT19UUkFDRV9FVkVOVCgyLCBkZXZfbmFtZSgmc2NoLT5kZXYpKTsKIAogCS8qCkBAIC0yNDksOCArMjQ0LDcgQEAKIAkgKi8KIAljY29kZSA9IGhzY2ggKHNjaC0+c2NoaWQpOwogCi0Jc3ByaW50ZiAoZGJmX3R4dCwgImNjb2RlOiVkIiwgY2NvZGUpOwotCUNJT19UUkFDRV9FVkVOVCAoMiwgZGJmX3R4dCk7CisJQ0lPX0hFWF9FVkVOVCgyLCAmY2NvZGUsIHNpemVvZihjY29kZSkpOwogCiAJc3dpdGNoIChjY29kZSkgewogCWNhc2UgMDoKQEAgLTI3MCwxMyArMjY0LDEyIEBACiBpbnQKIGNpb19jbGVhcihzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKQogewotCWNoYXIgZGJmX3R4dFsxNV07CiAJaW50IGNjb2RlOwogCiAJaWYgKCFzY2gpCiAJCXJldHVybiAtRU5PREVWOwogCi0JQ0lPX1RSQUNFX0VWRU5UICgyLCAiY2xlYXJJTyIpOworCUNJT19UUkFDRV9FVkVOVCgyLCAiY2xlYXJJTyIpOwogCUNJT19UUkFDRV9FVkVOVCgyLCBkZXZfbmFtZSgmc2NoLT5kZXYpKTsKIAogCS8qCkBAIC0yODQsOCArMjc3LDcgQEAKIAkgKi8KIAljY29kZSA9IGNzY2ggKHNjaC0+c2NoaWQpOwogCi0Jc3ByaW50ZiAoZGJmX3R4dCwgImNjb2RlOiVkIiwgY2NvZGUpOwotCUNJT19UUkFDRV9FVkVOVCAoMiwgZGJmX3R4dCk7CisJQ0lPX0hFWF9FVkVOVCgyLCAmY2NvZGUsIHNpemVvZihjY29kZSkpOwogCiAJc3dpdGNoIChjY29kZSkgewogCWNhc2UgMDoKQEAgLTMwNiwxOSArMjk4LDE3IEBACiBpbnQKIGNpb19jYW5jZWwgKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpCiB7Ci0JY2hhciBkYmZfdHh0WzE1XTsKIAlpbnQgY2NvZGU7CiAKIAlpZiAoIXNjaCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlDSU9fVFJBQ0VfRVZFTlQgKDIsICJjYW5jZWxJTyIpOworCUNJT19UUkFDRV9FVkVOVCgyLCAiY2FuY2VsSU8iKTsKIAlDSU9fVFJBQ0VfRVZFTlQoMiwgZGV2X25hbWUoJnNjaC0+ZGV2KSk7CiAKIAljY29kZSA9IHhzY2ggKHNjaC0+c2NoaWQpOwogCi0Jc3ByaW50ZiAoZGJmX3R4dCwgImNjb2RlOiVkIiwgY2NvZGUpOwotCUNJT19UUkFDRV9FVkVOVCAoMiwgZGJmX3R4dCk7CisJQ0lPX0hFWF9FVkVOVCgyLCAmY2NvZGUsIHNpemVvZihjY29kZSkpOwogCiAJc3dpdGNoIChjY29kZSkgewogCWNhc2UgMDoJCS8qIHN1Y2Nlc3MgKi8KQEAgLTQyOSwxMSArNDE5LDEwIEBACiAgKi8KIGludCBjaW9fZW5hYmxlX3N1YmNoYW5uZWwoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgdTMyIGludHBhcm0pCiB7Ci0JY2hhciBkYmZfdHh0WzE1XTsKIAlpbnQgcmV0cnk7CiAJaW50IHJldDsKIAotCUNJT19UUkFDRV9FVkVOVCAoMiwgImVuc2NoIik7CisJQ0lPX1RSQUNFX0VWRU5UKDIsICJlbnNjaCIpOwogCUNJT19UUkFDRV9FVkVOVCgyLCBkZXZfbmFtZSgmc2NoLT5kZXYpKTsKIAogCWlmIChzY2hfaXNfcHNldWRvX3NjaChzY2gpKQpAQCAtNDYwLDggKzQ0OSw3IEBACiAJCX0gZWxzZQogCQkJYnJlYWs7CiAJfQotCXNwcmludGYgKGRiZl90eHQsICJyZXQ6JWQiLCByZXQpOwotCUNJT19UUkFDRV9FVkVOVCAoMiwgZGJmX3R4dCk7CisJQ0lPX0hFWF9FVkVOVCgyLCAmcmV0LCBzaXplb2YocmV0KSk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNpb19lbmFibGVfc3ViY2hhbm5lbCk7CkBAIC00NzIsMTEgKzQ2MCwxMCBAQAogICovCiBpbnQgY2lvX2Rpc2FibGVfc3ViY2hhbm5lbChzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKQogewotCWNoYXIgZGJmX3R4dFsxNV07CiAJaW50IHJldHJ5OwogCWludCByZXQ7CiAKLQlDSU9fVFJBQ0VfRVZFTlQgKDIsICJkaXNzY2giKTsKKwlDSU9fVFJBQ0VfRVZFTlQoMiwgImRpc3NjaCIpOwogCUNJT19UUkFDRV9FVkVOVCgyLCBkZXZfbmFtZSgmc2NoLT5kZXYpKTsKIAogCWlmIChzY2hfaXNfcHNldWRvX3NjaChzY2gpKQpAQCAtNDk1LDggKzQ4Miw3IEBACiAJCX0gZWxzZQogCQkJYnJlYWs7CiAJfQotCXNwcmludGYgKGRiZl90eHQsICJyZXQ6JWQiLCByZXQpOwotCUNJT19UUkFDRV9FVkVOVCAoMiwgZGJmX3R4dCk7CisJQ0lPX0hFWF9FVkVOVCgyLCAmcmV0LCBzaXplb2YocmV0KSk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNpb19kaXNhYmxlX3N1YmNoYW5uZWwpOwpAQCAtNTc4LDExICs1NjQsNiBAQAogCQkJZ290byBvdXQ7CiAJfQogCW11dGV4X2luaXQoJnNjaC0+cmVnX211dGV4KTsKLQkvKiBTZXQgYSBuYW1lIGZvciB0aGUgc3ViY2hhbm5lbCAqLwotCWlmIChjaW9faXNfY29uc29sZShzY2hpZCkpCi0JCXNjaC0+ZGV2LmluaXRfbmFtZSA9IGNpb19nZXRfY29uc29sZV9zY2hfbmFtZShzY2hpZCk7Ci0JZWxzZQotCQlkZXZfc2V0X25hbWUoJnNjaC0+ZGV2LCAiMC4leC4lMDR4Iiwgc2NoaWQuc3NpZCwgc2NoaWQuc2NoX25vKTsKIAogCS8qCiAJICogVGhlIGZpcnN0IHN1YmNoYW5uZWwgdGhhdCBpcyBub3Qtb3BlcmF0aW9uYWwgKGNjb2RlPT0zKQpAQCAtNjg2LDcgKzY2Nyw2IEBACiAKICNpZmRlZiBDT05GSUdfQ0NXX0NPTlNPTEUKIHN0YXRpYyBzdHJ1Y3Qgc3ViY2hhbm5lbCBjb25zb2xlX3N1YmNoYW5uZWw7Ci1zdGF0aWMgY2hhciBjb25zb2xlX3NjaF9uYW1lWzEwXSA9ICIwLngueHh4eCI7CiBzdGF0aWMgc3RydWN0IGlvX3N1YmNoYW5uZWxfcHJpdmF0ZSBjb25zb2xlX3ByaXY7CiBzdGF0aWMgaW50IGNvbnNvbGVfc3ViY2hhbm5lbF9pbl91c2U7CiAKQEAgLTg3MywxMiArODUzLDYgQEAKIAlyZXR1cm4gJmNvbnNvbGVfc3ViY2hhbm5lbDsKIH0KIAotY29uc3QgY2hhciAqY2lvX2dldF9jb25zb2xlX3NjaF9uYW1lKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkKQotewotCXNucHJpbnRmKGNvbnNvbGVfc2NoX25hbWUsIDEwLCAiMC4leC4lMDR4Iiwgc2NoaWQuc3NpZCwgc2NoaWQuc2NoX25vKTsKLQlyZXR1cm4gKGNvbnN0IGNoYXIgKiljb25zb2xlX3NjaF9uYW1lOwotfQotCiAjZW5kaWYKIHN0YXRpYyBpbnQKIF9fZGlzYWJsZV9zdWJjaGFubmVsX2Vhc3koc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQsIHN0cnVjdCBzY2hpYiAqc2NoaWIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5oIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uaAppbmRleCA1MTUwZmJhLi4yZTQzNTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmgKQEAgLTEzMywxNSArMTMzLDExIEBACiBleHRlcm4gc3RydWN0IHN1YmNoYW5uZWwgKmNpb19nZXRfY29uc29sZV9zdWJjaGFubmVsKHZvaWQpOwogZXh0ZXJuIHNwaW5sb2NrX3QgKiBjaW9fZ2V0X2NvbnNvbGVfbG9jayh2b2lkKTsKIGV4dGVybiB2b2lkICpjaW9fZ2V0X2NvbnNvbGVfcHJpdih2b2lkKTsKLWV4dGVybiBjb25zdCBjaGFyICpjaW9fZ2V0X2NvbnNvbGVfc2NoX25hbWUoc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQpOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmNpb19nZXRfY29uc29sZV9jZGV2X25hbWUoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCk7CiAjZWxzZQogI2RlZmluZSBjaW9faXNfY29uc29sZShzY2hpZCkgMAogI2RlZmluZSBjaW9fZ2V0X2NvbnNvbGVfc3ViY2hhbm5lbCgpIE5VTEwKICNkZWZpbmUgY2lvX2dldF9jb25zb2xlX2xvY2soKSBOVUxMCiAjZGVmaW5lIGNpb19nZXRfY29uc29sZV9wcml2KCkgTlVMTAotI2RlZmluZSBjaW9fZ2V0X2NvbnNvbGVfc2NoX25hbWUoc2NoaWQpIE5VTEwKLSNkZWZpbmUgY2lvX2dldF9jb25zb2xlX2NkZXZfbmFtZShzY2gpIE5VTEwKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCmluZGV4IDg1ZDQzYzYuLmU5OTUxMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwpAQCAtMTUyLDI0ICsxNTIsMTUgQEAKIH0KIAogc3RhdGljIHZvaWQKLWNzc19mcmVlX3N1YmNoYW5uZWwoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCkKLXsKLQlpZiAoc2NoKSB7Ci0JCS8qIFJlc2V0IGludHBhcm0gdG8gemVyb2VzLiAqLwotCQlzY2gtPmNvbmZpZy5pbnRwYXJtID0gMDsKLQkJY2lvX2NvbW1pdF9jb25maWcoc2NoKTsKLQkJa2ZyZWUoc2NoLT5sb2NrKTsKLQkJa2ZyZWUoc2NoKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCiBjc3Nfc3ViY2hhbm5lbF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOwogCiAJc2NoID0gdG9fc3ViY2hhbm5lbChkZXYpOwogCWlmICghY2lvX2lzX2NvbnNvbGUoc2NoLT5zY2hpZCkpIHsKKwkJLyogUmVzZXQgaW50cGFybSB0byB6ZXJvZXMuICovCisJCXNjaC0+Y29uZmlnLmludHBhcm0gPSAwOworCQljaW9fY29tbWl0X2NvbmZpZyhzY2gpOwogCQlrZnJlZShzY2gtPmxvY2spOwogCQlrZnJlZShzY2gpOwogCX0KQEAgLTE4MCw2ICsxNzEsOCBAQAogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZzY2gtPnJlZ19tdXRleCk7CisJZGV2X3NldF9uYW1lKCZzY2gtPmRldiwgIjAuJXguJTA0eCIsIHNjaC0+c2NoaWQuc3NpZCwKKwkJICAgICBzY2gtPnNjaGlkLnNjaF9ubyk7CiAJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZzY2gtPmRldik7CiAJbXV0ZXhfdW5sb2NrKCZzY2gtPnJlZ19tdXRleCk7CiAJcmV0dXJuIHJldDsKQEAgLTMyNyw3ICszMjAsNyBAQAogCQlyZXR1cm4gUFRSX0VSUihzY2gpOwogCXJldCA9IGNzc19yZWdpc3Rlcl9zdWJjaGFubmVsKHNjaCk7CiAJaWYgKHJldCkKLQkJY3NzX2ZyZWVfc3ViY2hhbm5lbChzY2gpOworCQlwdXRfZGV2aWNlKCZzY2gtPmRldik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjQ0LDcgKzYzNywxMCBAQAogCSAqIG5vdCB3b3JraW5nKSBzbyB3ZSBkbyBpdCBub3cuIFRoaXMgaXMgdHJ1ZSBlLmcuIGZvciB0aGUKIAkgKiBjb25zb2xlIHN1YmNoYW5uZWwuCiAJICovCi0JY3NzX3JlZ2lzdGVyX3N1YmNoYW5uZWwoc2NoKTsKKwlpZiAoY3NzX3JlZ2lzdGVyX3N1YmNoYW5uZWwoc2NoKSkgeworCQlpZiAoIWNpb19pc19jb25zb2xlKHNjaGlkKSkKKwkJCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY2MSw4ICs2NTcsOCBAQAogCQljc3MtPmdsb2JhbF9wZ2lkLnBnaWRfaGlnaC5jcHVfYWRkciA9IDA7CiAjZW5kaWYKIAl9Ci0JY3NzLT5nbG9iYWxfcGdpZC5jcHVfaWQgPSAoKGNwdWlkX3QgKikgX19MQ19DUFVJRCktPmlkZW50OwotCWNzcy0+Z2xvYmFsX3BnaWQuY3B1X21vZGVsID0gKChjcHVpZF90ICopIF9fTENfQ1BVSUQpLT5tYWNoaW5lOworCWNzcy0+Z2xvYmFsX3BnaWQuY3B1X2lkID0gUzM5MF9sb3djb3JlLmNwdV9pZC5pZGVudDsKKwljc3MtPmdsb2JhbF9wZ2lkLmNwdV9tb2RlbCA9IFMzOTBfbG93Y29yZS5jcHVfaWQubWFjaGluZTsKIAljc3MtPmdsb2JhbF9wZ2lkLnRvZF9oaWdoID0gdG9kX2hpZ2g7CiAKIH0KQEAgLTkyMCw4ICs5MTYsMTAgQEAKIAkJCQlnb3RvIG91dF9kZXZpY2U7CiAJCX0KIAkJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZjc3MtPnBzZXVkb19zdWJjaGFubmVsLT5kZXYpOwotCQlpZiAocmV0KQorCQlpZiAocmV0KSB7CisJCQlwdXRfZGV2aWNlKCZjc3MtPnBzZXVkb19zdWJjaGFubmVsLT5kZXYpOwogCQkJZ290byBvdXRfZmlsZTsKKwkJfQogCX0KIAlyZXQgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmNzc19yZWJvb3Rfbm90aWZpZXIpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCBkNTkzYmM3Li4wZjk1NDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKQEAgLTMwNyw4ICszMDcsMTEgQEAKIAogc3RhdGljIHZvaWQgY2N3X2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMSwgJmNkZXYtPnByaXZhdGUtPnJlZ2lzdGVyZWQpKQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMSwgJmNkZXYtPnByaXZhdGUtPnJlZ2lzdGVyZWQpKSB7CiAJCWRldmljZV9kZWwoJmNkZXYtPmRldik7CisJCS8qIFJlbGVhc2UgcmVmZXJlbmNlIGZyb20gZGV2aWNlX2luaXRpYWxpemUoKS4gKi8KKwkJcHV0X2RldmljZSgmY2Rldi0+ZGV2KTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGNjd19kZXZpY2VfcmVtb3ZlX29ycGhhbl9jYihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0zMTksNyArMzIyLDYgQEAKIAlwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUsIGtpY2tfd29yayk7CiAJY2RldiA9IHByaXYtPmNkZXY7CiAJY2N3X2RldmljZV91bnJlZ2lzdGVyKGNkZXYpOwotCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7CiAJLyogUmVsZWFzZSBjZGV2IHJlZmVyZW5jZSBmb3Igd29ya3F1ZXVlIHByb2Nlc3NpbmcuICovCiAJcHV0X2RldmljZSgmY2Rldi0+ZGV2KTsKIH0KQEAgLTMzMywxNSArMzM1LDE1IEBACiAJICogRm9yY2VkIG9mZmxpbmUgaW4gZGlzY29ubmVjdGVkIHN0YXRlIG1lYW5zCiAJICogJ3Rocm93IGF3YXkgZGV2aWNlJy4KIAkgKi8KLQkvKiBHZXQgY2RldiByZWZlcmVuY2UgZm9yIHdvcmtxdWV1ZSBwcm9jZXNzaW5nLiAqLwotCWlmICghZ2V0X2RldmljZSgmY2Rldi0+ZGV2KSkKLQkJcmV0dXJuOwogCWlmIChjY3dfZGV2aWNlX2lzX29ycGhhbihjZGV2KSkgewogCQkvKgogCQkgKiBEZXJlZ2lzdGVyIGNjdyBkZXZpY2UuCiAJCSAqIFVuZm9ydHVuYXRlbHksIHdlIGNhbm5vdCBkbyB0aGlzIGRpcmVjdGx5IGZyb20gdGhlCiAJCSAqIGF0dHJpYnV0ZSBtZXRob2QuCiAJCSAqLworCQkvKiBHZXQgY2RldiByZWZlcmVuY2UgZm9yIHdvcmtxdWV1ZSBwcm9jZXNzaW5nLiAqLworCQlpZiAoIWdldF9kZXZpY2UoJmNkZXYtPmRldikpCisJCQlyZXR1cm47CiAJCXNwaW5fbG9ja19pcnFzYXZlKGNkZXYtPmNjd2xvY2ssIGZsYWdzKTsKIAkJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfTk9UX09QRVI7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2Rldi0+Y2N3bG9jaywgZmxhZ3MpOwpAQCAtMzgwLDMwICszODIsMzQgQEAKIAl9CiAJY2Rldi0+b25saW5lID0gMDsKIAlzcGluX2xvY2tfaXJxKGNkZXYtPmNjd2xvY2spOwotCXJldCA9IGNjd19kZXZpY2Vfb2ZmbGluZShjZGV2KTsKLQlpZiAocmV0ID09IC1FTk9ERVYpIHsKLQkJaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9OT1RfT1BFUikgewotCQkJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfT0ZGTElORTsKLQkJCWRldl9mc21fZXZlbnQoY2RldiwgREVWX0VWRU5UX05PVE9QRVIpOwotCQl9CisJLyogV2FpdCB1bnRpbCBhIGZpbmFsIHN0YXRlIG9yIERJU0NPTk5FQ1RFRCBpcyByZWFjaGVkICovCisJd2hpbGUgKCFkZXZfZnNtX2ZpbmFsX3N0YXRlKGNkZXYpICYmCisJICAgICAgIGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9ESVNDT05ORUNURUQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxKGNkZXYtPmNjd2xvY2spOwotCQkvKiBHaXZlIHVwIHJlZmVyZW5jZSBmcm9tIGNjd19kZXZpY2Vfc2V0X29ubGluZSgpLiAqLwotCQlwdXRfZGV2aWNlKCZjZGV2LT5kZXYpOwotCQlyZXR1cm4gcmV0OworCQl3YWl0X2V2ZW50KGNkZXYtPnByaXZhdGUtPndhaXRfcSwgKGRldl9mc21fZmluYWxfc3RhdGUoY2RldikgfHwKKwkJCSAgIGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9ESVNDT05ORUNURUQpKTsKKwkJc3Bpbl9sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKIAl9CisJcmV0ID0gY2N3X2RldmljZV9vZmZsaW5lKGNkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CiAJc3Bpbl91bmxvY2tfaXJxKGNkZXYtPmNjd2xvY2spOwotCWlmIChyZXQgPT0gMCkgewotCQl3YWl0X2V2ZW50KGNkZXYtPnByaXZhdGUtPndhaXRfcSwgZGV2X2ZzbV9maW5hbF9zdGF0ZShjZGV2KSk7Ci0JCS8qIEdpdmUgdXAgcmVmZXJlbmNlIGZyb20gY2N3X2RldmljZV9zZXRfb25saW5lKCkuICovCi0JCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7Ci0JfSBlbHNlIHsKLQkJQ0lPX01TR19FVkVOVCgwLCAiY2N3X2RldmljZV9vZmZsaW5lIHJldHVybmVkICVkLCAiCi0JCQkgICAgICAiZGV2aWNlIDAuJXguJTA0eFxuIiwKLQkJCSAgICAgIHJldCwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLnNzaWQsCi0JCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8pOwotCQljZGV2LT5vbmxpbmUgPSAxOwotCX0KLQlyZXR1cm4gcmV0OworCXdhaXRfZXZlbnQoY2Rldi0+cHJpdmF0ZS0+d2FpdF9xLCAoZGV2X2ZzbV9maW5hbF9zdGF0ZShjZGV2KSB8fAorCQkgICBjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfRElTQ09OTkVDVEVEKSk7CisJLyogR2l2ZSB1cCByZWZlcmVuY2UgZnJvbSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoKS4gKi8KKwlwdXRfZGV2aWNlKCZjZGV2LT5kZXYpOworCXJldHVybiAwOworCitlcnJvcjoKKwlDSU9fTVNHX0VWRU5UKDAsICJjY3dfZGV2aWNlX29mZmxpbmUgcmV0dXJuZWQgJWQsIGRldmljZSAwLiV4LiUwNHhcbiIsCisJCSAgICAgIHJldCwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLnNzaWQsCisJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubyk7CisJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfT0ZGTElORTsKKwlkZXZfZnNtX2V2ZW50KGNkZXYsIERFVl9FVkVOVF9OT1RPUEVSKTsKKwlzcGluX3VubG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7CisJLyogR2l2ZSB1cCByZWZlcmVuY2UgZnJvbSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoKS4gKi8KKwlwdXRfZGV2aWNlKCZjZGV2LT5kZXYpOworCXJldHVybiAtRU5PREVWOwogfQogCiAvKioKQEAgLTQyMSw2ICs0MjcsNyBAQAogaW50IGNjd19kZXZpY2Vfc2V0X29ubGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAlpbnQgcmV0OworCWludCByZXQyOwogCiAJaWYgKCFjZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTQ0NCwyOCArNDUxLDUzIEBACiAJCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7CiAJCXJldHVybiByZXQ7CiAJfQotCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSAhPSBERVZfU1RBVEVfT05MSU5FKSB7CisJc3Bpbl9sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKKwkvKiBDaGVjayBpZiBvbmxpbmUgcHJvY2Vzc2luZyB3YXMgc3VjY2Vzc2Z1bCAqLworCWlmICgoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgIT0gREVWX1NUQVRFX09OTElORSkgJiYKKwkgICAgKGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9XNFNFTlNFKSkgeworCQlzcGluX3VubG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7CiAJCS8qIEdpdmUgdXAgb25saW5lIHJlZmVyZW5jZSBzaW5jZSBvbmxpbmluZyBmYWlsZWQuICovCiAJCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpZiAoIWNkZXYtPmRydi0+c2V0X29ubGluZSB8fCBjZGV2LT5kcnYtPnNldF9vbmxpbmUoY2RldikgPT0gMCkgewotCQljZGV2LT5vbmxpbmUgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0Jc3Bpbl9sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKLQlyZXQgPSBjY3dfZGV2aWNlX29mZmxpbmUoY2Rldik7CiAJc3Bpbl91bmxvY2tfaXJxKGNkZXYtPmNjd2xvY2spOwotCWlmIChyZXQgPT0gMCkKLQkJd2FpdF9ldmVudChjZGV2LT5wcml2YXRlLT53YWl0X3EsIGRldl9mc21fZmluYWxfc3RhdGUoY2RldikpOwotCWVsc2UKLQkJQ0lPX01TR19FVkVOVCgwLCAiY2N3X2RldmljZV9vZmZsaW5lIHJldHVybmVkICVkLCAiCi0JCQkgICAgICAiZGV2aWNlIDAuJXguJTA0eFxuIiwKLQkJCSAgICAgIHJldCwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLnNzaWQsCi0JCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8pOworCWlmIChjZGV2LT5kcnYtPnNldF9vbmxpbmUpCisJCXJldCA9IGNkZXYtPmRydi0+c2V0X29ubGluZShjZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIHJvbGxiYWNrOworCWNkZXYtPm9ubGluZSA9IDE7CisJcmV0dXJuIDA7CisKK3JvbGxiYWNrOgorCXNwaW5fbG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7CisJLyogV2FpdCB1bnRpbCBhIGZpbmFsIHN0YXRlIG9yIERJU0NPTk5FQ1RFRCBpcyByZWFjaGVkICovCisJd2hpbGUgKCFkZXZfZnNtX2ZpbmFsX3N0YXRlKGNkZXYpICYmCisJICAgICAgIGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9ESVNDT05ORUNURUQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKGNkZXYtPmNjd2xvY2spOworCQl3YWl0X2V2ZW50KGNkZXYtPnByaXZhdGUtPndhaXRfcSwgKGRldl9mc21fZmluYWxfc3RhdGUoY2RldikgfHwKKwkJCSAgIGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9ESVNDT05ORUNURUQpKTsKKwkJc3Bpbl9sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKKwl9CisJcmV0MiA9IGNjd19kZXZpY2Vfb2ZmbGluZShjZGV2KTsKKwlpZiAocmV0MikKKwkJZ290byBlcnJvcjsKKwlzcGluX3VubG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7CisJd2FpdF9ldmVudChjZGV2LT5wcml2YXRlLT53YWl0X3EsIChkZXZfZnNtX2ZpbmFsX3N0YXRlKGNkZXYpIHx8CisJCSAgIGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9ESVNDT05ORUNURUQpKTsKIAkvKiBHaXZlIHVwIG9ubGluZSByZWZlcmVuY2Ugc2luY2Ugb25saW5pbmcgZmFpbGVkLiAqLwogCXB1dF9kZXZpY2UoJmNkZXYtPmRldik7Ci0JcmV0dXJuIChyZXQgPT0gMCkgPyAtRU5PREVWIDogcmV0OworCXJldHVybiByZXQ7CisKK2Vycm9yOgorCUNJT19NU0dfRVZFTlQoMCwgInJvbGxiYWNrIGNjd19kZXZpY2Vfb2ZmbGluZSByZXR1cm5lZCAlZCwgIgorCQkgICAgICAiZGV2aWNlIDAuJXguJTA0eFxuIiwKKwkJICAgICAgcmV0MiwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLnNzaWQsCisJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubyk7CisJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfT0ZGTElORTsKKwlzcGluX3VubG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7CisJLyogR2l2ZSB1cCBvbmxpbmUgcmVmZXJlbmNlIHNpbmNlIG9ubGluaW5nIGZhaWxlZC4gKi8KKwlwdXRfZGV2aWNlKCZjZGV2LT5kZXYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgb25saW5lX3N0b3JlX2hhbmRsZV9vZmZsaW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQpAQCAtNjM3LDggKzY2OSwxMiBAQAogCWludCByZXQ7CiAKIAlkZXYtPmJ1cyA9ICZjY3dfYnVzX3R5cGU7Ci0KLQlpZiAoKHJldCA9IGRldmljZV9hZGQoZGV2KSkpCisJcmV0ID0gZGV2X3NldF9uYW1lKCZjZGV2LT5kZXYsICIwLiV4LiUwNHgiLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuc3NpZCwKKwkJCSAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBkZXZpY2VfYWRkKGRldik7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXNldF9iaXQoMSwgJmNkZXYtPnByaXZhdGUtPnJlZ2lzdGVyZWQpOwpAQCAtMTAyNCw5ICsxMDYwLDYgQEAKIAkJcmV0dXJuOwogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJY3NzX3NjaF9kZXZpY2VfdW5yZWdpc3RlcihzY2gpOwotCS8qIFJlc2V0IGludHBhcm0gdG8gemVyb2VzLiAqLwotCXNjaC0+Y29uZmlnLmludHBhcm0gPSAwOwotCWNpb19jb21taXRfY29uZmlnKHNjaCk7CiAJLyogUmVsZWFzZSBjZGV2IHJlZmVyZW5jZSBmb3Igd29ya3F1ZXVlIHByb2Nlc3NpbmcuKi8KIAlwdXRfZGV2aWNlKCZjZGV2LT5kZXYpOwogCS8qIFJlbGVhc2Ugc3ViY2hhbm5lbCByZWZlcmVuY2UgZm9yIGxvY2FsIHByb2Nlc3NpbmcuICovCkBAIC0xMDM1LDYgKzEwNjgsOSBAQAogCiB2b2lkIGNjd19kZXZpY2Vfc2NoZWR1bGVfc2NoX3VucmVnaXN0ZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CisJLyogR2V0IGNkZXYgcmVmZXJlbmNlIGZvciB3b3JrcXVldWUgcHJvY2Vzc2luZy4gKi8KKwlpZiAoIWdldF9kZXZpY2UoJmNkZXYtPmRldikpCisJCXJldHVybjsKIAlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKIAkJICAgICBjY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIpOwogCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKQEAgLTEwNTUsOSArMTA5MSw2IEBACiAJCS8qIERldmljZSBkaWQgbm90IHJlc3BvbmQgaW4gdGltZS4gKi8KIAljYXNlIERFVl9TVEFURV9OT1RfT1BFUjoKIAkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVjb2dfZG9uZSA9IDE7Ci0JCS8qIFJlbW92ZSBkZXZpY2UgZm91bmQgbm90IG9wZXJhdGlvbmFsLiAqLwotCQlpZiAoIWdldF9kZXZpY2UoJmNkZXYtPmRldikpCi0JCQlicmVhazsKIAkJY2N3X2RldmljZV9zY2hlZHVsZV9zY2hfdW5yZWdpc3RlcihjZGV2KTsKIAkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkpCiAJCQl3YWtlX3VwKCZjY3dfZGV2aWNlX2luaXRfd3EpOwpAQCAtMTA5NSwxMyArMTEyOCw2IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+d2FpdF9xKTsKIAlpbml0X3RpbWVyKCZwcml2LT50aW1lcik7CiAKLQkvKiBTZXQgYW4gaW5pdGlhbCBuYW1lIGZvciB0aGUgZGV2aWNlLiAqLwotCWlmIChjaW9faXNfY29uc29sZShzY2gtPnNjaGlkKSkKLQkJY2Rldi0+ZGV2LmluaXRfbmFtZSA9IGNpb19nZXRfY29uc29sZV9jZGV2X25hbWUoc2NoKTsKLQllbHNlCi0JCWRldl9zZXRfbmFtZSgmY2Rldi0+ZGV2LCAiMC4leC4lMDR4IiwKLQkJCSAgICAgc2NoLT5zY2hpZC5zc2lkLCBzY2gtPnNjaGliLnBtY3cuZGV2KTsKLQogCS8qIEluY3JlYXNlIGNvdW50ZXIgb2YgZGV2aWNlcyBjdXJyZW50bHkgaW4gcmVjb2duaXRpb24uICovCiAJYXRvbWljX2luYygmY2N3X2RldmljZV9pbml0X2NvdW50KTsKIApAQCAtMTE3MSw4ICsxMTk3LDggQEAKIAogCWNkZXYgPSBzY2hfZ2V0X2NkZXYoc2NoKTsKIAotCUNJT19UUkFDRV9FVkVOVCgzLCAiSVJRIik7Ci0JQ0lPX1RSQUNFX0VWRU5UKDMsIGRldl9uYW1lKCZzY2gtPmRldikpOworCUNJT19UUkFDRV9FVkVOVCg2LCAiSVJRIik7CisJQ0lPX1RSQUNFX0VWRU5UKDYsIGRldl9uYW1lKCZzY2gtPmRldikpOwogCWlmIChjZGV2KQogCQlkZXZfZnNtX2V2ZW50KGNkZXYsIERFVl9FVkVOVF9JTlRFUlJVUFQpOwogfQpAQCAtMTIxMCw5ICsxMjM2LDYgQEAKIAogCXNjaCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc3ViY2hhbm5lbCwgd29yayk7CiAJY3NzX3NjaF9kZXZpY2VfdW5yZWdpc3RlcihzY2gpOwotCS8qIFJlc2V0IGludHBhcm0gdG8gemVyb2VzLiAqLwotCXNjaC0+Y29uZmlnLmludHBhcm0gPSAwOwotCWNpb19jb21taXRfY29uZmlnKHNjaCk7CiAJcHV0X2RldmljZSgmc2NoLT5kZXYpOwogfQogCkBAIC0xMzM0LDcgKzEzNTcsNiBAQAogCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX05PVF9PUEVSOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2Rldi0+Y2N3bG9jaywgZmxhZ3MpOwogCWNjd19kZXZpY2VfdW5yZWdpc3RlcihjZGV2KTsKLQlwdXRfZGV2aWNlKCZjZGV2LT5kZXYpOwogCWtmcmVlKHNjaC0+cHJpdmF0ZSk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzY2gtPmRldi5rb2JqLCAmaW9fc3ViY2hhbm5lbF9hdHRyX2dyb3VwKTsKIAlyZXR1cm4gMDsKQEAgLTE1NzEsOCArMTU5Myw2IEBACiAJc3Bpbl91bmxvY2tfaXJxKGNkZXYtPmNjd2xvY2spOwogCWlmICghdW5yZWcpCiAJCWdvdG8gb3V0OwotCWlmICghZ2V0X2RldmljZSgmY2Rldi0+ZGV2KSkKLQkJZ290byBvdXQ7CiAJQ0lPX01TR19FVkVOVCgzLCAiY2N3OiBwdXJnaW5nIDAuJXguJTA0eFxuIiwgcHJpdi0+ZGV2X2lkLnNzaWQsCiAJCSAgICAgIHByaXYtPmRldl9pZC5kZXZubyk7CiAJY2N3X2RldmljZV9zY2hlZHVsZV9zY2hfdW5yZWdpc3RlcihjZGV2KTsKQEAgLTE2ODgsMTAgKzE3MDgsNiBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNjaC0+bG9jaywgZmxhZ3MpOwogCQljc3Nfc2NoX2RldmljZV91bnJlZ2lzdGVyKHNjaCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKHNjaC0+bG9jaywgZmxhZ3MpOwotCi0JCS8qIFJlc2V0IGludHBhcm0gdG8gemVyb2VzLiAqLwotCQlzY2gtPmNvbmZpZy5pbnRwYXJtID0gMDsKLQkJY2lvX2NvbW1pdF9jb25maWcoc2NoKTsKIAkJYnJlYWs7CiAJY2FzZSBSRVBST0JFOgogCQljY3dfZGV2aWNlX3RyaWdnZXJfcmVwcm9iZShjZGV2KTsKQEAgLTE3MTIsNyArMTcyOCw2IEBACiAKICNpZmRlZiBDT05GSUdfQ0NXX0NPTlNPTEUKIHN0YXRpYyBzdHJ1Y3QgY2N3X2RldmljZSBjb25zb2xlX2NkZXY7Ci1zdGF0aWMgY2hhciBjb25zb2xlX2NkZXZfbmFtZVsxMF0gPSAiMC54Lnh4eHgiOwogc3RhdGljIHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUgY29uc29sZV9wcml2YXRlOwogc3RhdGljIGludCBjb25zb2xlX2NkZXZfaW5fdXNlOwogCkBAIC0xNzk2LDEzICsxODExLDYgQEAKIAlyZXR1cm4gY2N3X2RldmljZV9wbV9yZXN0b3JlKCZjb25zb2xlX2NkZXYuZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNjd19kZXZpY2VfZm9yY2VfY29uc29sZSk7Ci0KLWNvbnN0IGNoYXIgKmNpb19nZXRfY29uc29sZV9jZGV2X25hbWUoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCkKLXsKLQlzbnByaW50Zihjb25zb2xlX2NkZXZfbmFtZSwgMTAsICIwLiV4LiUwNHgiLAotCQkgc2NoLT5zY2hpZC5zc2lkLCBzY2gtPnNjaGliLnBtY3cuZGV2KTsKLQlyZXR1cm4gKGNvbnN0IGNoYXIgKiljb25zb2xlX2NkZXZfbmFtZTsKLX0KICNlbmRpZgogCiAvKgpAQCAtMjAyMCw3ICsyMDI4LDkgQEAKIAlzcGluX3VubG9ja19pcnEoc2NoLT5sb2NrKTsKIAlpZiAocmV0KSB7CiAJCUNJT19NU0dfRVZFTlQoMCwgIkNvdWxkbid0IHN0YXJ0IHJlY29nbml0aW9uIGZvciBkZXZpY2UgIgotCQkJICAgICAgIiVzIChyZXQ9JWQpXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgcmV0KTsKKwkJCSAgICAgICIwLiV4LiUwNHggKHJldD0lZClcbiIsCisJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuc3NpZCwKKwkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywgcmV0KTsKIAkJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOwogCQljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9ESVNDT05ORUNURUQ7CiAJCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwpAQCAtMjA4Myw4ICsyMDkzLDkgQEAKIAl9CiAJLyogY2hlY2sgaWYgdGhlIGRldmljZSBpZCBoYXMgY2hhbmdlZCAqLwogCWlmIChzY2gtPnNjaGliLnBtY3cuZGV2ICE9IGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubykgewotCQlDSU9fTVNHX0VWRU5UKDAsICJyZXN1bWU6IHNjaCAlczogZmFpbGVkIChkZXZubyBjaGFuZ2VkIGZyb20gIgotCQkJICAgICAgIiUwNHggdG8gJTA0eClcbiIsIGRldl9uYW1lKCZzY2gtPmRldiksCisJCUNJT19NU0dfRVZFTlQoMCwgInJlc3VtZTogc2NoIDAuJXguJTA0eDogZmFpbGVkIChkZXZubyAiCisJCQkgICAgICAiY2hhbmdlZCBmcm9tICUwNHggdG8gJTA0eClcbiIsCisJCQkgICAgICBzY2gtPnNjaGlkLnNzaWQsIHNjaC0+c2NoaWQuc2NoX25vLAogCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLAogCQkJICAgICAgc2NoLT5zY2hpYi5wbWN3LmRldik7CiAJCWdvdG8gb3V0X3VucmVnX3VubG9jazsKQEAgLTIxMTcsOCArMjEyOCw5IEBACiAJaWYgKGNtX2VuYWJsZWQpIHsKIAkJcmV0ID0gY2N3X3NldF9jbWYoY2RldiwgMSk7CiAJCWlmIChyZXQpIHsKLQkJCUNJT19NU0dfRVZFTlQoMiwgInJlc3VtZTogY2RldiAlczogY21mIGZhaWxlZCAiCi0JCQkJICAgICAgIihyYz0lZClcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpLCByZXQpOworCQkJQ0lPX01TR19FVkVOVCgyLCAicmVzdW1lOiBjZGV2IDAuJXguJTA0eDogY21mIGZhaWxlZCAiCisJCQkJICAgICAgIihyYz0lZClcbiIsIGNkZXYtPnByaXZhdGUtPmRldl9pZC5zc2lkLAorCQkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywgcmV0KTsKIAkJCXJldCA9IDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCmluZGV4IDNkYjg4YzUuLmU3MjhjZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCkBAIC0zOTQsNiArMzk0LDEzIEBACiAJCQljY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKGNkZXYpOwogCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7CiAJfQorCWlmIChzdGF0ZSA9PSBERVZfU1RBVEVfTk9UX09QRVIpIHsKKwkJQ0lPX01TR19FVkVOVCgwLCAiRGV2aWNlICUwNHggZ29uZSBvbiBzdWJjaGFubmVsICUwNHhcbiIsCisJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sIHNjaC0+c2NoaWQuc2NoX25vKTsKKwkJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkpCisJCQljY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKGNkZXYpOworCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7CisJfQogCiAJaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5KSB7CiAJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKQEAgLTczMSw2ICs3MzgsMTcgQEAKIH0KIAogLyoKKyAqIEhhbmRsZSBwYXRoIHZlcmlmaWNhdGlvbiBldmVudCBpbiBvZmZsaW5lIHN0YXRlLgorICovCitzdGF0aWMgdm9pZCBjY3dfZGV2aWNlX29mZmxpbmVfdmVyaWZ5KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAorCQkJCSAgICAgIGVudW0gZGV2X2V2ZW50IGRldl9ldmVudCkKK3sKKwlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKKworCWNzc19zY2hlZHVsZV9ldmFsKHNjaC0+c2NoaWQpOworfQorCisvKgogICogSGFuZGxlIHBhdGggdmVyaWZpY2F0aW9uIGV2ZW50LgogICovCiBzdGF0aWMgdm9pZApAQCAtODg3LDYgKzkwNSw4IEBACiAJfQogY2FsbF9oYW5kbGVyOgogCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX09OTElORTsKKwkvKiBJbiBjYXNlIHNlbnNpbmcgaW50ZXJmZXJlZCB3aXRoIHNldHRpbmcgdGhlIGRldmljZSBvbmxpbmUgKi8KKwl3YWtlX3VwKCZjZGV2LT5wcml2YXRlLT53YWl0X3EpOwogCS8qIENhbGwgdGhlIGhhbmRsZXIuICovCiAJaWYgKGNjd19kZXZpY2VfY2FsbF9oYW5kbGVyKGNkZXYpICYmIGNkZXYtPnByaXZhdGUtPmZsYWdzLmRvdmVyaWZ5KQogCQkvKiBTdGFydCBkZWxheWVkIHBhdGggdmVyaWZpY2F0aW9uLiAqLwpAQCAtMTE0OSw3ICsxMTY5LDcgQEAKIAkJW0RFVl9FVkVOVF9OT1RPUEVSXQk9IGNjd19kZXZpY2VfZ2VuZXJpY19ub3RvcGVyLAogCQlbREVWX0VWRU5UX0lOVEVSUlVQVF0JPSBjY3dfZGV2aWNlX29mZmxpbmVfaXJxLAogCQlbREVWX0VWRU5UX1RJTUVPVVRdCT0gY2N3X2RldmljZV9ub3AsCi0JCVtERVZfRVZFTlRfVkVSSUZZXQk9IGNjd19kZXZpY2Vfbm9wLAorCQlbREVWX0VWRU5UX1ZFUklGWV0JPSBjY3dfZGV2aWNlX29mZmxpbmVfdmVyaWZ5LAogCX0sCiAJW0RFVl9TVEFURV9WRVJJRlldID0gewogCQlbREVWX0VWRU5UX05PVE9QRVJdCT0gY2N3X2RldmljZV9nZW5lcmljX25vdG9wZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCmluZGV4IGIxMjQxZjguLmZmNzc0OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGxpbnV4L2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCiAgKgotICogQ29weXJpZ2h0IDIwMDAsMjAwOCBJQk0gQ29ycC4KKyAqIENvcHlyaWdodCAyMDAwLDIwMDkgSUJNIENvcnAuCiAgKiBBdXRob3Iocyk6IFV0eiBCYWNoZXIgPHV0ei5iYWNoZXJAZGUuaWJtLmNvbT4KICAqCSAgICAgIEphbiBHbGF1YmVyIDxqYW5nQGxpbnV4LnZuZXQuaWJtLmNvbT4KICAqLwpAQCAtMjQ2LDYgKzI0Niw3IEBACiAJYXRvbWljX3QgbnJfYnVmX3VzZWQ7CiAKIAlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHI7CisJc3RydWN0IGRlbnRyeSAqZGVidWdmc19xOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OwogCiAJLyogZXJyb3IgY29uZGl0aW9uIGR1cmluZyBhIGRhdGEgdHJhbnNmZXIgKi8KQEAgLTI2Nyw2ICsyNjgsNyBAQAogCXN0cnVjdCBxaWIgcWliOwogCXUzMiAqZHNjaTsJCS8qIGFkZHJlc3Mgb2YgZGV2aWNlIHN0YXRlIGNoYW5nZSBpbmRpY2F0b3IgKi8KIAlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RldjsKIAogCXVuc2lnbmVkIGxvbmcgaW50X3Bhcm07CiAJc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCmluZGV4IGI4NjI2ZDQuLjFiNzhmNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCkBAIC0xLDE0ICsxLDEyIEBACiAvKgogICogIGRyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCiAgKgotICogIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOAorICogIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOCwyMDA5CiAgKgogICogIEF1dGhvcjogSmFuIEdsYXViZXIgKGphbmdAbGludXgudm5ldC5pYm0uY29tKQogICovCi0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGFzbS9xZGlvLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAjaW5jbHVkZSAicWRpb19kZWJ1Zy5oIgogI2luY2x1ZGUgInFkaW8uaCIKQEAgLTE3LDEwICsxNSw3IEBACiBkZWJ1Z19pbmZvX3QgKnFkaW9fZGJmX2Vycm9yOwogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290OwotI2RlZmluZSBNQVhfREVCVUdGU19RVUVVRVMJMzIKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3F1ZXVlc1tNQVhfREVCVUdGU19RVUVVRVNdID0geyBOVUxMIH07Ci1zdGF0aWMgREVGSU5FX01VVEVYKGRlYnVnZnNfbXV0ZXgpOwotI2RlZmluZSBRRElPX0RFQlVHRlNfTkFNRV9MRU4JNDAKKyNkZWZpbmUgUURJT19ERUJVR0ZTX05BTUVfTEVOCTEwCiAKIHZvaWQgcWRpb19hbGxvY2F0ZV9kYmYoc3RydWN0IHFkaW9faW5pdGlhbGl6ZSAqaW5pdF9kYXRhLAogCQkgICAgICAgc3RydWN0IHFkaW9faXJxICppcnFfcHRyKQpAQCAtMTMwLDIwICsxMjUsNiBAQAogCQkJICAgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlKTsKIH0KIAotc3RhdGljIHZvaWQgcmVtb3ZlX2RlYnVnZnNfZW50cnkoc3RydWN0IHFkaW9fcSAqcSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfREVCVUdGU19RVUVVRVM7IGkrKykgewotCQlpZiAoIWRlYnVnZnNfcXVldWVzW2ldKQotCQkJY29udGludWU7Ci0JCWlmIChkZWJ1Z2ZzX3F1ZXVlc1tpXS0+ZF9pbm9kZS0+aV9wcml2YXRlID09IHEpIHsKLQkJCWRlYnVnZnNfcmVtb3ZlKGRlYnVnZnNfcXVldWVzW2ldKTsKLQkJCWRlYnVnZnNfcXVldWVzW2ldID0gTlVMTDsKLQkJfQotCX0KLX0KLQogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdmc19mb3BzID0gewogCS5vd25lcgkgPSBUSElTX01PRFVMRSwKIAkub3BlbgkgPSBxc3RhdF9zZXFfb3BlbiwKQEAgLTE1NSwyMiArMTM2LDE1IEBACiAKIHN0YXRpYyB2b2lkIHNldHVwX2RlYnVnZnNfZW50cnkoc3RydWN0IHFkaW9fcSAqcSwgc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7Ci0JaW50IGkgPSAwOwogCWNoYXIgbmFtZVtRRElPX0RFQlVHRlNfTkFNRV9MRU5dOwogCi0Jd2hpbGUgKGRlYnVnZnNfcXVldWVzW2ldICE9IE5VTEwpIHsKLQkJaSsrOwotCQlpZiAoaSA+PSBNQVhfREVCVUdGU19RVUVVRVMpCi0JCQlyZXR1cm47Ci0JfQotCXNucHJpbnRmKG5hbWUsIFFESU9fREVCVUdGU19OQU1FX0xFTiwgIiVzXyVzXyVkIiwKLQkJIGRldl9uYW1lKCZjZGV2LT5kZXYpLAorCXNucHJpbnRmKG5hbWUsIFFESU9fREVCVUdGU19OQU1FX0xFTiwgIiVzXyVkIiwKIAkJIHEtPmlzX2lucHV0X3EgPyAiaW5wdXQiIDogIm91dHB1dCIsCiAJCSBxLT5ucik7Ci0JZGVidWdmc19xdWV1ZXNbaV0gPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJCQkJCWRlYnVnZnNfcm9vdCwgcSwgJmRlYnVnZnNfZm9wcyk7Ci0JaWYgKElTX0VSUihkZWJ1Z2ZzX3F1ZXVlc1tpXSkpCi0JCWRlYnVnZnNfcXVldWVzW2ldID0gTlVMTDsKKwlxLT5kZWJ1Z2ZzX3EgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQlxLT5pcnFfcHRyLT5kZWJ1Z2ZzX2RldiwgcSwgJmRlYnVnZnNfZm9wcyk7CisJaWYgKElTX0VSUihxLT5kZWJ1Z2ZzX3EpKQorCQlxLT5kZWJ1Z2ZzX3EgPSBOVUxMOwogfQogCiB2b2lkIHFkaW9fc2V0dXBfZGVidWdfZW50cmllcyhzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHIsIHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQpAQCAtMTc4LDEyICsxNTIsMTQgQEAKIAlzdHJ1Y3QgcWRpb19xICpxOwogCWludCBpOwogCi0JbXV0ZXhfbG9jaygmZGVidWdmc19tdXRleCk7CisJaXJxX3B0ci0+ZGVidWdmc19kZXYgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUoJmNkZXYtPmRldiksCisJCQkJCQkgIGRlYnVnZnNfcm9vdCk7CisJaWYgKElTX0VSUihpcnFfcHRyLT5kZWJ1Z2ZzX2RldikpCisJCWlycV9wdHItPmRlYnVnZnNfZGV2ID0gTlVMTDsKIAlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQogCQlzZXR1cF9kZWJ1Z2ZzX2VudHJ5KHEsIGNkZXYpOwogCWZvcl9lYWNoX291dHB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQogCQlzZXR1cF9kZWJ1Z2ZzX2VudHJ5KHEsIGNkZXYpOwotCW11dGV4X3VubG9jaygmZGVidWdmc19tdXRleCk7CiB9CiAKIHZvaWQgcWRpb19zaHV0ZG93bl9kZWJ1Z19lbnRyaWVzKHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciwgc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCkBAIC0xOTEsMTcgKzE2NywxNiBAQAogCXN0cnVjdCBxZGlvX3EgKnE7CiAJaW50IGk7CiAKLQltdXRleF9sb2NrKCZkZWJ1Z2ZzX211dGV4KTsKIAlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQotCQlyZW1vdmVfZGVidWdmc19lbnRyeShxKTsKKwkJZGVidWdmc19yZW1vdmUocS0+ZGVidWdmc19xKTsKIAlmb3JfZWFjaF9vdXRwdXRfcXVldWUoaXJxX3B0ciwgcSwgaSkKLQkJcmVtb3ZlX2RlYnVnZnNfZW50cnkocSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZWJ1Z2ZzX211dGV4KTsKKwkJZGVidWdmc19yZW1vdmUocS0+ZGVidWdmc19xKTsKKwlkZWJ1Z2ZzX3JlbW92ZShpcnFfcHRyLT5kZWJ1Z2ZzX2Rldik7CiB9CiAKIGludCBfX2luaXQgcWRpb19kZWJ1Z19pbml0KHZvaWQpCiB7Ci0JZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJxZGlvX3F1ZXVlcyIsIE5VTEwpOworCWRlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigicWRpbyIsIE5VTEwpOwogCiAJcWRpb19kYmZfc2V0dXAgPSBkZWJ1Z19yZWdpc3RlcigicWRpb19zZXR1cCIsIDE2LCAxLCAxNik7CiAJZGVidWdfcmVnaXN0ZXJfdmlldyhxZGlvX2RiZl9zZXR1cCwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDAwMzg3NTAuLjlhZWY0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtNzk4LDggKzc5OCwxMCBAQAogCiAJaWYgKCFxZGlvX2luYm91bmRfcV9kb25lKHEpKSB7CiAJCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy50aGluaW50X2luYm91bmRfbG9vcCk7Ci0JCWlmIChsaWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgIT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCisJCWlmIChsaWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgIT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpIHsKIAkJCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOworCQkJcmV0dXJuOworCQl9CiAJfQogCiAJcWRpb19zdG9wX3BvbGxpbmcocSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3Njc3cuYyBiL2RyaXZlcnMvczM5MC9jaW8vc2Nzdy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGRhMjVhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9jaW8vc2Nzdy5jCisrKyAvZGV2L251bGwKQEAgLTEsODQzICswLDAgQEAKLS8qCi0gKiAgSGVscGVyIGZ1bmN0aW9ucyBmb3Igc2NzdyBhY2Nlc3MuCi0gKgotICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4Ci0gKiAgICBBdXRob3Iocyk6IFBldGVyIE9iZXJwYXJsZWl0ZXIgPHBldGVyLm9iZXJwYXJsZWl0ZXJAZGUuaWJtLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vY2lvLmg+Ci0jaW5jbHVkZSAiY3NzLmgiCi0jaW5jbHVkZSAiY2hzYy5oIgotCi0vKioKLSAqIHNjc3dfaXNfdG0gLSBjaGVjayBmb3IgdHJhbnNwb3J0IG1vZGUgc2NzdwotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiBub24temVybyBpZiB0aGUgc3BlY2lmaWVkIHNjc3cgaXMgYSB0cmFuc3BvcnQgbW9kZSBzY3N3LCB6ZXJvCi0gKiBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X2lzX3RtKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JcmV0dXJuIGNzc19nZW5lcmFsX2NoYXJhY3RlcmlzdGljcy5mY3ggJiYgKHNjc3ctPnRtLnggPT0gMSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfaXNfdG0pOwotCi0vKioKLSAqIHNjc3dfa2V5IC0gcmV0dXJuIHNjc3cga2V5IGZpZWxkCi0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUga2V5IGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgc2NzdywgcmVnYXJkbGVzcyBvZgotICogd2hldGhlciBpdCBpcyBhIHRyYW5zcG9ydCBtb2RlIG9yIGNvbW1hbmQgbW9kZSBzY3N3LgotICovCi11MzIgc2Nzd19rZXkodW5pb24gc2NzdyAqc2NzdykKLXsKLQlpZiAoc2Nzd19pc190bShzY3N3KSkKLQkJcmV0dXJuIHNjc3ctPnRtLmtleTsKLQllbHNlCi0JCXJldHVybiBzY3N3LT5jbWQua2V5OwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2tleSk7Ci0KLS8qKgotICogc2Nzd19lc3dmIC0gcmV0dXJuIHNjc3cgZXN3ZiBmaWVsZAotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGVzd2YgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3LCByZWdhcmRsZXNzIG9mCi0gKiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCi0gKi8KLXUzMiBzY3N3X2Vzd2YodW5pb24gc2NzdyAqc2NzdykKLXsKLQlpZiAoc2Nzd19pc190bShzY3N3KSkKLQkJcmV0dXJuIHNjc3ctPnRtLmVzd2Y7Ci0JZWxzZQotCQlyZXR1cm4gc2Nzdy0+Y21kLmVzd2Y7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfZXN3Zik7Ci0KLS8qKgotICogc2Nzd19jYyAtIHJldHVybiBzY3N3IGNjIGZpZWxkCi0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY2MgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3LCByZWdhcmRsZXNzIG9mCi0gKiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCi0gKi8KLXUzMiBzY3N3X2NjKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JaWYgKHNjc3dfaXNfdG0oc2NzdykpCi0JCXJldHVybiBzY3N3LT50bS5jYzsKLQllbHNlCi0JCXJldHVybiBzY3N3LT5jbWQuY2M7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfY2MpOwotCi0vKioKLSAqIHNjc3dfZWN0bCAtIHJldHVybiBzY3N3IGVjdGwgZmllbGQKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBlY3RsIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgc2NzdywgcmVnYXJkbGVzcyBvZgotICogd2hldGhlciBpdCBpcyBhIHRyYW5zcG9ydCBtb2RlIG9yIGNvbW1hbmQgbW9kZSBzY3N3LgotICovCi11MzIgc2Nzd19lY3RsKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JaWYgKHNjc3dfaXNfdG0oc2NzdykpCi0JCXJldHVybiBzY3N3LT50bS5lY3RsOwotCWVsc2UKLQkJcmV0dXJuIHNjc3ctPmNtZC5lY3RsOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2VjdGwpOwotCi0vKioKLSAqIHNjc3dfcG5vIC0gcmV0dXJuIHNjc3cgcG5vIGZpZWxkCi0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcG5vIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgc2NzdywgcmVnYXJkbGVzcyBvZgotICogd2hldGhlciBpdCBpcyBhIHRyYW5zcG9ydCBtb2RlIG9yIGNvbW1hbmQgbW9kZSBzY3N3LgotICovCi11MzIgc2Nzd19wbm8odW5pb24gc2NzdyAqc2NzdykKLXsKLQlpZiAoc2Nzd19pc190bShzY3N3KSkKLQkJcmV0dXJuIHNjc3ctPnRtLnBubzsKLQllbHNlCi0JCXJldHVybiBzY3N3LT5jbWQucG5vOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X3Bubyk7Ci0KLS8qKgotICogc2Nzd19mY3RsIC0gcmV0dXJuIHNjc3cgZmN0bCBmaWVsZAotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3LCByZWdhcmRsZXNzIG9mCi0gKiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCi0gKi8KLXUzMiBzY3N3X2ZjdGwodW5pb24gc2NzdyAqc2NzdykKLXsKLQlpZiAoc2Nzd19pc190bShzY3N3KSkKLQkJcmV0dXJuIHNjc3ctPnRtLmZjdGw7Ci0JZWxzZQotCQlyZXR1cm4gc2Nzdy0+Y21kLmZjdGw7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfZmN0bCk7Ci0KLS8qKgotICogc2Nzd19hY3RsIC0gcmV0dXJuIHNjc3cgYWN0bCBmaWVsZAotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGFjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3LCByZWdhcmRsZXNzIG9mCi0gKiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCi0gKi8KLXUzMiBzY3N3X2FjdGwodW5pb24gc2NzdyAqc2NzdykKLXsKLQlpZiAoc2Nzd19pc190bShzY3N3KSkKLQkJcmV0dXJuIHNjc3ctPnRtLmFjdGw7Ci0JZWxzZQotCQlyZXR1cm4gc2Nzdy0+Y21kLmFjdGw7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfYWN0bCk7Ci0KLS8qKgotICogc2Nzd19zdGN0bCAtIHJldHVybiBzY3N3IHN0Y3RsIGZpZWxkCi0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgc3RjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3LCByZWdhcmRsZXNzIG9mCi0gKiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCi0gKi8KLXUzMiBzY3N3X3N0Y3RsKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JaWYgKHNjc3dfaXNfdG0oc2NzdykpCi0JCXJldHVybiBzY3N3LT50bS5zdGN0bDsKLQllbHNlCi0JCXJldHVybiBzY3N3LT5jbWQuc3RjdGw7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfc3RjdGwpOwotCi0vKioKLSAqIHNjc3dfZHN0YXQgLSByZXR1cm4gc2NzdyBkc3RhdCBmaWVsZAotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGRzdGF0IGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgc2NzdywgcmVnYXJkbGVzcyBvZgotICogd2hldGhlciBpdCBpcyBhIHRyYW5zcG9ydCBtb2RlIG9yIGNvbW1hbmQgbW9kZSBzY3N3LgotICovCi11MzIgc2Nzd19kc3RhdCh1bmlvbiBzY3N3ICpzY3N3KQotewotCWlmIChzY3N3X2lzX3RtKHNjc3cpKQotCQlyZXR1cm4gc2Nzdy0+dG0uZHN0YXQ7Ci0JZWxzZQotCQlyZXR1cm4gc2Nzdy0+Y21kLmRzdGF0OwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2RzdGF0KTsKLQotLyoqCi0gKiBzY3N3X2NzdGF0IC0gcmV0dXJuIHNjc3cgY3N0YXQgZmllbGQKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBjc3RhdCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHNjc3csIHJlZ2FyZGxlc3Mgb2YKLSAqIHdoZXRoZXIgaXQgaXMgYSB0cmFuc3BvcnQgbW9kZSBvciBjb21tYW5kIG1vZGUgc2Nzdy4KLSAqLwotdTMyIHNjc3dfY3N0YXQodW5pb24gc2NzdyAqc2NzdykKLXsKLQlpZiAoc2Nzd19pc190bShzY3N3KSkKLQkJcmV0dXJuIHNjc3ctPnRtLmNzdGF0OwotCWVsc2UKLQkJcmV0dXJuIHNjc3ctPmNtZC5jc3RhdDsKLX0KLUVYUE9SVF9TWU1CT0woc2Nzd19jc3RhdCk7Ci0KLS8qKgotICogc2Nzd19jbWRfaXNfdmFsaWRfa2V5IC0gY2hlY2sga2V5IGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBrZXkgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBjb21tYW5kIG1vZGUgc2NzdyBpcwotICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgotICovCi1pbnQgc2Nzd19jbWRfaXNfdmFsaWRfa2V5KHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JcmV0dXJuIChzY3N3LT5jbWQuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKTsKLX0KLUVYUE9SVF9TWU1CT0woc2Nzd19jbWRfaXNfdmFsaWRfa2V5KTsKLQotLyoqCi0gKiBzY3N3X2NtZF9pc192YWxpZF9zY3RsIC0gY2hlY2sgZmN0bCBmaWVsZCB2YWxpZGl0eQotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiBub24temVybyBpZiB0aGUgZmN0bCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X2NtZF9pc192YWxpZF9zY3RsKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JcmV0dXJuIChzY3N3LT5jbWQuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKTsKLX0KLUVYUE9SVF9TWU1CT0woc2Nzd19jbWRfaXNfdmFsaWRfc2N0bCk7Ci0KLS8qKgotICogc2Nzd19jbWRfaXNfdmFsaWRfZXN3ZiAtIGNoZWNrIGVzd2YgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGVzd2YgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBjb21tYW5kIG1vZGUgc2NzdyBpcwotICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgotICovCi1pbnQgc2Nzd19jbWRfaXNfdmFsaWRfZXN3Zih1bmlvbiBzY3N3ICpzY3N3KQotewotCXJldHVybiAoc2Nzdy0+Y21kLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfY21kX2lzX3ZhbGlkX2Vzd2YpOwotCi0vKioKLSAqIHNjc3dfY21kX2lzX3ZhbGlkX2NjIC0gY2hlY2sgY2MgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGNjIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBtb2RlIHNjc3cgaXMKLSAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotaW50IHNjc3dfY21kX2lzX3ZhbGlkX2NjKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JcmV0dXJuIChzY3N3LT5jbWQuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgotCSAgICAgICAoc2Nzdy0+Y21kLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfY21kX2lzX3ZhbGlkX2NjKTsKLQotLyoqCi0gKiBzY3N3X2NtZF9pc192YWxpZF9mbXQgLSBjaGVjayBmbXQgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGZtdCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X2NtZF9pc192YWxpZF9mbXQodW5pb24gc2NzdyAqc2NzdykKLXsKLQlyZXR1cm4gKHNjc3ctPmNtZC5mY3RsICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2NtZF9pc192YWxpZF9mbXQpOwotCi0vKioKLSAqIHNjc3dfY21kX2lzX3ZhbGlkX3BmY2ggLSBjaGVjayBwZmNoIGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBwZmNoIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBtb2RlIHNjc3cgaXMKLSAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotaW50IHNjc3dfY21kX2lzX3ZhbGlkX3BmY2godW5pb24gc2NzdyAqc2NzdykKLXsKLQlyZXR1cm4gKHNjc3ctPmNtZC5mY3RsICYgU0NTV19GQ1RMX1NUQVJUX0ZVTkMpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2NtZF9pc192YWxpZF9wZmNoKTsKLQotLyoqCi0gKiBzY3N3X2NtZF9pc192YWxpZF9pc2ljIC0gY2hlY2sgaXNpYyBmaWVsZCB2YWxpZGl0eQotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiBub24temVybyBpZiB0aGUgaXNpYyBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X2NtZF9pc192YWxpZF9pc2ljKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JcmV0dXJuIChzY3N3LT5jbWQuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKTsKLX0KLUVYUE9SVF9TWU1CT0woc2Nzd19jbWRfaXNfdmFsaWRfaXNpYyk7Ci0KLS8qKgotICogc2Nzd19jbWRfaXNfdmFsaWRfYWxjYyAtIGNoZWNrIGFsY2MgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGFsY2MgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBjb21tYW5kIG1vZGUgc2NzdyBpcwotICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgotICovCi1pbnQgc2Nzd19jbWRfaXNfdmFsaWRfYWxjYyh1bmlvbiBzY3N3ICpzY3N3KQotewotCXJldHVybiAoc2Nzdy0+Y21kLmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfY21kX2lzX3ZhbGlkX2FsY2MpOwotCi0vKioKLSAqIHNjc3dfY21kX2lzX3ZhbGlkX3NzaSAtIGNoZWNrIHNzaSBmaWVsZCB2YWxpZGl0eQotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiBub24temVybyBpZiB0aGUgc3NpIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBtb2RlIHNjc3cgaXMKLSAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotaW50IHNjc3dfY21kX2lzX3ZhbGlkX3NzaSh1bmlvbiBzY3N3ICpzY3N3KQotewotCXJldHVybiAoc2Nzdy0+Y21kLmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfY21kX2lzX3ZhbGlkX3NzaSk7Ci0KLS8qKgotICogc2Nzd19jbWRfaXNfdmFsaWRfemNjIC0gY2hlY2sgemNjIGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSB6Y2MgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBjb21tYW5kIG1vZGUgc2NzdyBpcwotICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgotICovCi1pbnQgc2Nzd19jbWRfaXNfdmFsaWRfemNjKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JcmV0dXJuIChzY3N3LT5jbWQuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgotCSAgICAgICAoc2Nzdy0+Y21kLnN0Y3RsICYgU0NTV19TVENUTF9JTlRFUl9TVEFUVVMpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2NtZF9pc192YWxpZF96Y2MpOwotCi0vKioKLSAqIHNjc3dfY21kX2lzX3ZhbGlkX2VjdGwgLSBjaGVjayBlY3RsIGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBlY3RsIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBtb2RlIHNjc3cgaXMKLSAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotaW50IHNjc3dfY21kX2lzX3ZhbGlkX2VjdGwodW5pb24gc2NzdyAqc2NzdykKLXsKLQlyZXR1cm4gKHNjc3ctPmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpICYmCi0JICAgICAgICEoc2Nzdy0+Y21kLnN0Y3RsICYgU0NTV19TVENUTF9JTlRFUl9TVEFUVVMpICYmCi0JICAgICAgIChzY3N3LT5jbWQuc3RjdGwgJiBTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfY21kX2lzX3ZhbGlkX2VjdGwpOwotCi0vKioKLSAqIHNjc3dfY21kX2lzX3ZhbGlkX3BubyAtIGNoZWNrIHBubyBmaWVsZCB2YWxpZGl0eQotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiBub24temVybyBpZiB0aGUgcG5vIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBtb2RlIHNjc3cgaXMKLSAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotaW50IHNjc3dfY21kX2lzX3ZhbGlkX3Bubyh1bmlvbiBzY3N3ICpzY3N3KQotewotCXJldHVybiAoc2Nzdy0+Y21kLmZjdGwgIT0gMCkgJiYKLQkgICAgICAgKHNjc3ctPmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpICYmCi0JICAgICAgICghKHNjc3ctPmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfSU5URVJfU1RBVFVTKSB8fAotCQkgKChzY3N3LT5jbWQuc3RjdGwgJiBTQ1NXX1NUQ1RMX0lOVEVSX1NUQVRVUykgJiYKLQkJICAoc2Nzdy0+Y21kLmFjdGwgJiBTQ1NXX0FDVExfU1VTUEVOREVEKSkpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2NtZF9pc192YWxpZF9wbm8pOwotCi0vKioKLSAqIHNjc3dfY21kX2lzX3ZhbGlkX2ZjdGwgLSBjaGVjayBmY3RsIGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBmY3RsIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBtb2RlIHNjc3cgaXMKLSAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotaW50IHNjc3dfY21kX2lzX3ZhbGlkX2ZjdGwodW5pb24gc2NzdyAqc2NzdykKLXsKLQkvKiBPbmx5IHZhbGlkIGlmIHBtY3cuZG52ID09IDEqLwotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2NtZF9pc192YWxpZF9mY3RsKTsKLQotLyoqCi0gKiBzY3N3X2NtZF9pc192YWxpZF9hY3RsIC0gY2hlY2sgYWN0bCBmaWVsZCB2YWxpZGl0eQotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiBub24temVybyBpZiB0aGUgYWN0bCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X2NtZF9pc192YWxpZF9hY3RsKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JLyogT25seSB2YWxpZCBpZiBwbWN3LmRudiA9PSAxKi8KLQlyZXR1cm4gMTsKLX0KLUVYUE9SVF9TWU1CT0woc2Nzd19jbWRfaXNfdmFsaWRfYWN0bCk7Ci0KLS8qKgotICogc2Nzd19jbWRfaXNfdmFsaWRfc3RjdGwgLSBjaGVjayBzdGN0bCBmaWVsZCB2YWxpZGl0eQotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiBub24temVybyBpZiB0aGUgc3RjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBjb21tYW5kIG1vZGUgc2NzdyBpcwotICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgotICovCi1pbnQgc2Nzd19jbWRfaXNfdmFsaWRfc3RjdGwodW5pb24gc2NzdyAqc2NzdykKLXsKLQkvKiBPbmx5IHZhbGlkIGlmIHBtY3cuZG52ID09IDEqLwotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2NtZF9pc192YWxpZF9zdGN0bCk7Ci0KLS8qKgotICogc2Nzd19jbWRfaXNfdmFsaWRfZHN0YXQgLSBjaGVjayBkc3RhdCBmaWVsZCB2YWxpZGl0eQotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiBub24temVybyBpZiB0aGUgZHN0YXQgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBjb21tYW5kIG1vZGUgc2NzdyBpcwotICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgotICovCi1pbnQgc2Nzd19jbWRfaXNfdmFsaWRfZHN0YXQodW5pb24gc2NzdyAqc2NzdykKLXsKLQlyZXR1cm4gKHNjc3ctPmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpICYmCi0JICAgICAgIChzY3N3LT5jbWQuY2MgIT0gMyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfY21kX2lzX3ZhbGlkX2RzdGF0KTsKLQotLyoqCi0gKiBzY3N3X2NtZF9pc192YWxpZF9jc3RhdCAtIGNoZWNrIGNzdGF0IGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBjc3RhdCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X2NtZF9pc192YWxpZF9jc3RhdCh1bmlvbiBzY3N3ICpzY3N3KQotewotCXJldHVybiAoc2Nzdy0+Y21kLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCkgJiYKLQkgICAgICAgKHNjc3ctPmNtZC5jYyAhPSAzKTsKLX0KLUVYUE9SVF9TWU1CT0woc2Nzd19jbWRfaXNfdmFsaWRfY3N0YXQpOwotCi0vKioKLSAqIHNjc3dfdG1faXNfdmFsaWRfa2V5IC0gY2hlY2sga2V5IGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBrZXkgZmllbGQgb2YgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X3RtX2lzX3ZhbGlkX2tleSh1bmlvbiBzY3N3ICpzY3N3KQotewotCXJldHVybiAoc2Nzdy0+dG0uZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKTsKLX0KLUVYUE9SVF9TWU1CT0woc2Nzd190bV9pc192YWxpZF9rZXkpOwotCi0vKioKLSAqIHNjc3dfdG1faXNfdmFsaWRfZXN3ZiAtIGNoZWNrIGVzd2YgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGVzd2YgZmllbGQgb2YgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X3RtX2lzX3ZhbGlkX2Vzd2YodW5pb24gc2NzdyAqc2NzdykKLXsKLQlyZXR1cm4gKHNjc3ctPnRtLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfdG1faXNfdmFsaWRfZXN3Zik7Ci0KLS8qKgotICogc2Nzd190bV9pc192YWxpZF9jYyAtIGNoZWNrIGNjIGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBjYyBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHRyYW5zcG9ydCBtb2RlIHNjc3cgaXMKLSAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotaW50IHNjc3dfdG1faXNfdmFsaWRfY2ModW5pb24gc2NzdyAqc2NzdykKLXsKLQlyZXR1cm4gKHNjc3ctPnRtLmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykgJiYKLQkgICAgICAgKHNjc3ctPnRtLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfdG1faXNfdmFsaWRfY2MpOwotCi0vKioKLSAqIHNjc3dfdG1faXNfdmFsaWRfZm10IC0gY2hlY2sgZm10IGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBmbXQgZmllbGQgb2YgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X3RtX2lzX3ZhbGlkX2ZtdCh1bmlvbiBzY3N3ICpzY3N3KQotewotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X3RtX2lzX3ZhbGlkX2ZtdCk7Ci0KLS8qKgotICogc2Nzd190bV9pc192YWxpZF94IC0gY2hlY2sgeCBmaWVsZCB2YWxpZGl0eQotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiBub24temVybyBpZiB0aGUgeCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHRyYW5zcG9ydCBtb2RlIHNjc3cgaXMKLSAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotaW50IHNjc3dfdG1faXNfdmFsaWRfeCh1bmlvbiBzY3N3ICpzY3N3KQotewotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X3RtX2lzX3ZhbGlkX3gpOwotCi0vKioKLSAqIHNjc3dfdG1faXNfdmFsaWRfcSAtIGNoZWNrIHEgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIHEgZmllbGQgb2YgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X3RtX2lzX3ZhbGlkX3EodW5pb24gc2NzdyAqc2NzdykKLXsKLQlyZXR1cm4gMTsKLX0KLUVYUE9SVF9TWU1CT0woc2Nzd190bV9pc192YWxpZF9xKTsKLQotLyoqCi0gKiBzY3N3X3RtX2lzX3ZhbGlkX2VjdGwgLSBjaGVjayBlY3RsIGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBlY3RsIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgdHJhbnNwb3J0IG1vZGUgc2NzdyBpcwotICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgotICovCi1pbnQgc2Nzd190bV9pc192YWxpZF9lY3RsKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JcmV0dXJuIChzY3N3LT50bS5zdGN0bCAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpICYmCi0JICAgICAgICEoc2Nzdy0+dG0uc3RjdGwgJiBTQ1NXX1NUQ1RMX0lOVEVSX1NUQVRVUykgJiYKLQkgICAgICAgKHNjc3ctPnRtLnN0Y3RsICYgU0NTV19TVENUTF9BTEVSVF9TVEFUVVMpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X3RtX2lzX3ZhbGlkX2VjdGwpOwotCi0vKioKLSAqIHNjc3dfdG1faXNfdmFsaWRfcG5vIC0gY2hlY2sgcG5vIGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBwbm8gZmllbGQgb2YgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X3RtX2lzX3ZhbGlkX3Bubyh1bmlvbiBzY3N3ICpzY3N3KQotewotCXJldHVybiAoc2Nzdy0+dG0uZmN0bCAhPSAwKSAmJgotCSAgICAgICAoc2Nzdy0+dG0uc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSAmJgotCSAgICAgICAoIShzY3N3LT50bS5zdGN0bCAmIFNDU1dfU1RDVExfSU5URVJfU1RBVFVTKSB8fAotCQkgKChzY3N3LT50bS5zdGN0bCAmIFNDU1dfU1RDVExfSU5URVJfU1RBVFVTKSAmJgotCQkgIChzY3N3LT50bS5hY3RsICYgU0NTV19BQ1RMX1NVU1BFTkRFRCkpKTsKLX0KLUVYUE9SVF9TWU1CT0woc2Nzd190bV9pc192YWxpZF9wbm8pOwotCi0vKioKLSAqIHNjc3dfdG1faXNfdmFsaWRfZmN0bCAtIGNoZWNrIGZjdGwgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGZjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X3RtX2lzX3ZhbGlkX2ZjdGwodW5pb24gc2NzdyAqc2NzdykKLXsKLQkvKiBPbmx5IHZhbGlkIGlmIHBtY3cuZG52ID09IDEqLwotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X3RtX2lzX3ZhbGlkX2ZjdGwpOwotCi0vKioKLSAqIHNjc3dfdG1faXNfdmFsaWRfYWN0bCAtIGNoZWNrIGFjdGwgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGFjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X3RtX2lzX3ZhbGlkX2FjdGwodW5pb24gc2NzdyAqc2NzdykKLXsKLQkvKiBPbmx5IHZhbGlkIGlmIHBtY3cuZG52ID09IDEqLwotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X3RtX2lzX3ZhbGlkX2FjdGwpOwotCi0vKioKLSAqIHNjc3dfdG1faXNfdmFsaWRfc3RjdGwgLSBjaGVjayBzdGN0bCBmaWVsZCB2YWxpZGl0eQotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiBub24temVybyBpZiB0aGUgc3RjdGwgZmllbGQgb2YgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X3RtX2lzX3ZhbGlkX3N0Y3RsKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JLyogT25seSB2YWxpZCBpZiBwbWN3LmRudiA9PSAxKi8KLQlyZXR1cm4gMTsKLX0KLUVYUE9SVF9TWU1CT0woc2Nzd190bV9pc192YWxpZF9zdGN0bCk7Ci0KLS8qKgotICogc2Nzd190bV9pc192YWxpZF9kc3RhdCAtIGNoZWNrIGRzdGF0IGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBkc3RhdCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHRyYW5zcG9ydCBtb2RlIHNjc3cgaXMKLSAqIHZhbGlkLCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotaW50IHNjc3dfdG1faXNfdmFsaWRfZHN0YXQodW5pb24gc2NzdyAqc2NzdykKLXsKLQlyZXR1cm4gKHNjc3ctPnRtLnN0Y3RsICYgU0NTV19TVENUTF9TVEFUVVNfUEVORCkgJiYKLQkgICAgICAgKHNjc3ctPnRtLmNjICE9IDMpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X3RtX2lzX3ZhbGlkX2RzdGF0KTsKLQotLyoqCi0gKiBzY3N3X3RtX2lzX3ZhbGlkX2NzdGF0IC0gY2hlY2sgY3N0YXQgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGNzdGF0IGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgdHJhbnNwb3J0IG1vZGUgc2NzdyBpcwotICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgotICovCi1pbnQgc2Nzd190bV9pc192YWxpZF9jc3RhdCh1bmlvbiBzY3N3ICpzY3N3KQotewotCXJldHVybiAoc2Nzdy0+dG0uc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSAmJgotCSAgICAgICAoc2Nzdy0+dG0uY2MgIT0gMyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfdG1faXNfdmFsaWRfY3N0YXQpOwotCi0vKioKLSAqIHNjc3dfdG1faXNfdmFsaWRfZmN4cyAtIGNoZWNrIGZjeHMgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGZjeHMgZmllbGQgb2YgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBzY3N3IGlzCi0gKiB2YWxpZCwgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBzY3N3X3RtX2lzX3ZhbGlkX2ZjeHModW5pb24gc2NzdyAqc2NzdykKLXsKLQlyZXR1cm4gMTsKLX0KLUVYUE9SVF9TWU1CT0woc2Nzd190bV9pc192YWxpZF9mY3hzKTsKLQotLyoqCi0gKiBzY3N3X3RtX2lzX3ZhbGlkX3NjaHhzIC0gY2hlY2sgc2NoeHMgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIHNjaHhzIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgdHJhbnNwb3J0IG1vZGUgc2NzdyBpcwotICogdmFsaWQsIHplcm8gb3RoZXJ3aXNlLgotICovCi1pbnQgc2Nzd190bV9pc192YWxpZF9zY2h4cyh1bmlvbiBzY3N3ICpzY3N3KQotewotCXJldHVybiAoc2Nzdy0+dG0uY3N0YXQgJiAoU0NITl9TVEFUX1BST0dfQ0hFQ0sgfAotCQkJCSAgU0NITl9TVEFUX0lOVEZfQ1RSTF9DSEsgfAotCQkJCSAgU0NITl9TVEFUX1BST1RfQ0hFQ0sgfAotCQkJCSAgU0NITl9TVEFUX0NITl9EQVRBX0NISykpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X3RtX2lzX3ZhbGlkX3NjaHhzKTsKLQotLyoqCi0gKiBzY3N3X2lzX3ZhbGlkX2FjdGwgLSBjaGVjayBhY3RsIGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBhY3RsIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgc2NzdyBpcyB2YWxpZCwKLSAqIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBhIHRyYW5zcG9ydCBtb2RlIG9yIGNvbW1hbmQgbW9kZSBzY3N3LgotICogUmV0dXJuIHplcm8gaWYgdGhlIGZpZWxkIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCB2YWx1ZS4KLSAqLwotaW50IHNjc3dfaXNfdmFsaWRfYWN0bCh1bmlvbiBzY3N3ICpzY3N3KQotewotCWlmIChzY3N3X2lzX3RtKHNjc3cpKQotCQlyZXR1cm4gc2Nzd190bV9pc192YWxpZF9hY3RsKHNjc3cpOwotCWVsc2UKLQkJcmV0dXJuIHNjc3dfY21kX2lzX3ZhbGlkX2FjdGwoc2Nzdyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfaXNfdmFsaWRfYWN0bCk7Ci0KLS8qKgotICogc2Nzd19pc192YWxpZF9jYyAtIGNoZWNrIGNjIGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBjYyBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHNjc3cgaXMgdmFsaWQsCi0gKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgYSB0cmFuc3BvcnQgbW9kZSBvciBjb21tYW5kIG1vZGUgc2Nzdy4KLSAqIFJldHVybiB6ZXJvIGlmIHRoZSBmaWVsZCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdmFsdWUuCi0gKi8KLWludCBzY3N3X2lzX3ZhbGlkX2NjKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JaWYgKHNjc3dfaXNfdG0oc2NzdykpCi0JCXJldHVybiBzY3N3X3RtX2lzX3ZhbGlkX2NjKHNjc3cpOwotCWVsc2UKLQkJcmV0dXJuIHNjc3dfY21kX2lzX3ZhbGlkX2NjKHNjc3cpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2lzX3ZhbGlkX2NjKTsKLQotLyoqCi0gKiBzY3N3X2lzX3ZhbGlkX2NzdGF0IC0gY2hlY2sgY3N0YXQgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGNzdGF0IGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgc2NzdyBpcyB2YWxpZCwKLSAqIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBhIHRyYW5zcG9ydCBtb2RlIG9yIGNvbW1hbmQgbW9kZSBzY3N3LgotICogUmV0dXJuIHplcm8gaWYgdGhlIGZpZWxkIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCB2YWx1ZS4KLSAqLwotaW50IHNjc3dfaXNfdmFsaWRfY3N0YXQodW5pb24gc2NzdyAqc2NzdykKLXsKLQlpZiAoc2Nzd19pc190bShzY3N3KSkKLQkJcmV0dXJuIHNjc3dfdG1faXNfdmFsaWRfY3N0YXQoc2Nzdyk7Ci0JZWxzZQotCQlyZXR1cm4gc2Nzd19jbWRfaXNfdmFsaWRfY3N0YXQoc2Nzdyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfaXNfdmFsaWRfY3N0YXQpOwotCi0vKioKLSAqIHNjc3dfaXNfdmFsaWRfZHN0YXQgLSBjaGVjayBkc3RhdCBmaWVsZCB2YWxpZGl0eQotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiBub24temVybyBpZiB0aGUgZHN0YXQgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3IGlzIHZhbGlkLAotICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCi0gKiBSZXR1cm4gemVybyBpZiB0aGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHZhbHVlLgotICovCi1pbnQgc2Nzd19pc192YWxpZF9kc3RhdCh1bmlvbiBzY3N3ICpzY3N3KQotewotCWlmIChzY3N3X2lzX3RtKHNjc3cpKQotCQlyZXR1cm4gc2Nzd190bV9pc192YWxpZF9kc3RhdChzY3N3KTsKLQllbHNlCi0JCXJldHVybiBzY3N3X2NtZF9pc192YWxpZF9kc3RhdChzY3N3KTsKLX0KLUVYUE9SVF9TWU1CT0woc2Nzd19pc192YWxpZF9kc3RhdCk7Ci0KLS8qKgotICogc2Nzd19pc192YWxpZF9lY3RsIC0gY2hlY2sgZWN0bCBmaWVsZCB2YWxpZGl0eQotICogQHNjc3c6IHBvaW50ZXIgdG8gc2NzdwotICoKLSAqIFJldHVybiBub24temVybyBpZiB0aGUgZWN0bCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHNjc3cgaXMgdmFsaWQsCi0gKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgYSB0cmFuc3BvcnQgbW9kZSBvciBjb21tYW5kIG1vZGUgc2Nzdy4KLSAqIFJldHVybiB6ZXJvIGlmIHRoZSBmaWVsZCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdmFsdWUuCi0gKi8KLWludCBzY3N3X2lzX3ZhbGlkX2VjdGwodW5pb24gc2NzdyAqc2NzdykKLXsKLQlpZiAoc2Nzd19pc190bShzY3N3KSkKLQkJcmV0dXJuIHNjc3dfdG1faXNfdmFsaWRfZWN0bChzY3N3KTsKLQllbHNlCi0JCXJldHVybiBzY3N3X2NtZF9pc192YWxpZF9lY3RsKHNjc3cpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2lzX3ZhbGlkX2VjdGwpOwotCi0vKioKLSAqIHNjc3dfaXNfdmFsaWRfZXN3ZiAtIGNoZWNrIGVzd2YgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGVzd2YgZmllbGQgb2YgdGhlIHNwZWNpZmllZCBzY3N3IGlzIHZhbGlkLAotICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGEgdHJhbnNwb3J0IG1vZGUgb3IgY29tbWFuZCBtb2RlIHNjc3cuCi0gKiBSZXR1cm4gemVybyBpZiB0aGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHZhbHVlLgotICovCi1pbnQgc2Nzd19pc192YWxpZF9lc3dmKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JaWYgKHNjc3dfaXNfdG0oc2NzdykpCi0JCXJldHVybiBzY3N3X3RtX2lzX3ZhbGlkX2Vzd2Yoc2Nzdyk7Ci0JZWxzZQotCQlyZXR1cm4gc2Nzd19jbWRfaXNfdmFsaWRfZXN3ZihzY3N3KTsKLX0KLUVYUE9SVF9TWU1CT0woc2Nzd19pc192YWxpZF9lc3dmKTsKLQotLyoqCi0gKiBzY3N3X2lzX3ZhbGlkX2ZjdGwgLSBjaGVjayBmY3RsIGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBmY3RsIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgc2NzdyBpcyB2YWxpZCwKLSAqIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBhIHRyYW5zcG9ydCBtb2RlIG9yIGNvbW1hbmQgbW9kZSBzY3N3LgotICogUmV0dXJuIHplcm8gaWYgdGhlIGZpZWxkIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCB2YWx1ZS4KLSAqLwotaW50IHNjc3dfaXNfdmFsaWRfZmN0bCh1bmlvbiBzY3N3ICpzY3N3KQotewotCWlmIChzY3N3X2lzX3RtKHNjc3cpKQotCQlyZXR1cm4gc2Nzd190bV9pc192YWxpZF9mY3RsKHNjc3cpOwotCWVsc2UKLQkJcmV0dXJuIHNjc3dfY21kX2lzX3ZhbGlkX2ZjdGwoc2Nzdyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc3dfaXNfdmFsaWRfZmN0bCk7Ci0KLS8qKgotICogc2Nzd19pc192YWxpZF9rZXkgLSBjaGVjayBrZXkgZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGtleSBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHNjc3cgaXMgdmFsaWQsCi0gKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgYSB0cmFuc3BvcnQgbW9kZSBvciBjb21tYW5kIG1vZGUgc2Nzdy4KLSAqIFJldHVybiB6ZXJvIGlmIHRoZSBmaWVsZCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdmFsdWUuCi0gKi8KLWludCBzY3N3X2lzX3ZhbGlkX2tleSh1bmlvbiBzY3N3ICpzY3N3KQotewotCWlmIChzY3N3X2lzX3RtKHNjc3cpKQotCQlyZXR1cm4gc2Nzd190bV9pc192YWxpZF9rZXkoc2Nzdyk7Ci0JZWxzZQotCQlyZXR1cm4gc2Nzd19jbWRfaXNfdmFsaWRfa2V5KHNjc3cpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2lzX3ZhbGlkX2tleSk7Ci0KLS8qKgotICogc2Nzd19pc192YWxpZF9wbm8gLSBjaGVjayBwbm8gZmllbGQgdmFsaWRpdHkKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIHBubyBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHNjc3cgaXMgdmFsaWQsCi0gKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgYSB0cmFuc3BvcnQgbW9kZSBvciBjb21tYW5kIG1vZGUgc2Nzdy4KLSAqIFJldHVybiB6ZXJvIGlmIHRoZSBmaWVsZCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdmFsdWUuCi0gKi8KLWludCBzY3N3X2lzX3ZhbGlkX3Bubyh1bmlvbiBzY3N3ICpzY3N3KQotewotCWlmIChzY3N3X2lzX3RtKHNjc3cpKQotCQlyZXR1cm4gc2Nzd190bV9pc192YWxpZF9wbm8oc2Nzdyk7Ci0JZWxzZQotCQlyZXR1cm4gc2Nzd19jbWRfaXNfdmFsaWRfcG5vKHNjc3cpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2lzX3ZhbGlkX3Bubyk7Ci0KLS8qKgotICogc2Nzd19pc192YWxpZF9zdGN0bCAtIGNoZWNrIHN0Y3RsIGZpZWxkIHZhbGlkaXR5Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBzdGN0bCBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIHNjc3cgaXMgdmFsaWQsCi0gKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgYSB0cmFuc3BvcnQgbW9kZSBvciBjb21tYW5kIG1vZGUgc2Nzdy4KLSAqIFJldHVybiB6ZXJvIGlmIHRoZSBmaWVsZCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdmFsdWUuCi0gKi8KLWludCBzY3N3X2lzX3ZhbGlkX3N0Y3RsKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JaWYgKHNjc3dfaXNfdG0oc2NzdykpCi0JCXJldHVybiBzY3N3X3RtX2lzX3ZhbGlkX3N0Y3RsKHNjc3cpOwotCWVsc2UKLQkJcmV0dXJuIHNjc3dfY21kX2lzX3ZhbGlkX3N0Y3RsKHNjc3cpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2lzX3ZhbGlkX3N0Y3RsKTsKLQotLyoqCi0gKiBzY3N3X2NtZF9pc19zb2xpY2l0ZWQgLSBjaGVjayBmb3Igc29saWNpdGVkIHNjc3cKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIGNvbW1hbmQgbW9kZSBzY3N3IGluZGljYXRlcyB0aGF0IHRoZSBhc3NvY2lhdGVkCi0gKiBzdGF0dXMgY29uZGl0aW9uIGlzIHNvbGljaXRlZCwgemVybyBpZiBpdCBpcyB1bnNvbGljaXRlZC4KLSAqLwotaW50IHNjc3dfY21kX2lzX3NvbGljaXRlZCh1bmlvbiBzY3N3ICpzY3N3KQotewotCXJldHVybiAoc2Nzdy0+Y21kLmNjICE9IDApIHx8IChzY3N3LT5jbWQuc3RjdGwgIT0KLQkJKFNDU1dfU1RDVExfU1RBVFVTX1BFTkQgfCBTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUykpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2NtZF9pc19zb2xpY2l0ZWQpOwotCi0vKioKLSAqIHNjc3dfdG1faXNfc29saWNpdGVkIC0gY2hlY2sgZm9yIHNvbGljaXRlZCBzY3N3Ci0gKiBAc2NzdzogcG9pbnRlciB0byBzY3N3Ci0gKgotICogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSB0cmFuc3BvcnQgbW9kZSBzY3N3IGluZGljYXRlcyB0aGF0IHRoZSBhc3NvY2lhdGVkCi0gKiBzdGF0dXMgY29uZGl0aW9uIGlzIHNvbGljaXRlZCwgemVybyBpZiBpdCBpcyB1bnNvbGljaXRlZC4KLSAqLwotaW50IHNjc3dfdG1faXNfc29saWNpdGVkKHVuaW9uIHNjc3cgKnNjc3cpCi17Ci0JcmV0dXJuIChzY3N3LT50bS5jYyAhPSAwKSB8fCAoc2Nzdy0+dG0uc3RjdGwgIT0KLQkJKFNDU1dfU1RDVExfU1RBVFVTX1BFTkQgfCBTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUykpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X3RtX2lzX3NvbGljaXRlZCk7Ci0KLS8qKgotICogc2Nzd19pc19zb2xpY2l0ZWQgLSBjaGVjayBmb3Igc29saWNpdGVkIHNjc3cKLSAqIEBzY3N3OiBwb2ludGVyIHRvIHNjc3cKLSAqCi0gKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIHRyYW5zcG9ydCBvciBjb21tYW5kIG1vZGUgc2NzdyBpbmRpY2F0ZXMgdGhhdCB0aGUKLSAqIGFzc29jaWF0ZWQgc3RhdHVzIGNvbmRpdGlvbiBpcyBzb2xpY2l0ZWQsIHplcm8gaWYgaXQgaXMgdW5zb2xpY2l0ZWQuCi0gKi8KLWludCBzY3N3X2lzX3NvbGljaXRlZCh1bmlvbiBzY3N3ICpzY3N3KQotewotCWlmIChzY3N3X2lzX3RtKHNjc3cpKQotCQlyZXR1cm4gc2Nzd190bV9pc19zb2xpY2l0ZWQoc2Nzdyk7Ci0JZWxzZQotCQlyZXR1cm4gc2Nzd19jbWRfaXNfc29saWNpdGVkKHNjc3cpOwotfQotRVhQT1JUX1NZTUJPTChzY3N3X2lzX3NvbGljaXRlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwppbmRleCBlZDNkY2RlLi4wOTBiMzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKQEAgLTY0OCw3ICs2NDgsOSBAQAogCS8qIFBvbGwgb24gdGhlIGRldmljZSB1bnRpbCBhbGwgcmVxdWVzdHMgYXJlIGZpbmlzaGVkLiAqLwogCWRvIHsKIAkJZmxhZ3MgPSAwOworCQlzcGluX2xvY2tfYmgoJmFwX2Rldi0+bG9jayk7CiAJCV9fYXBfcG9sbF9kZXZpY2UoYXBfZGV2LCAmZmxhZ3MpOworCQlzcGluX3VubG9ja19iaCgmYXBfZGV2LT5sb2NrKTsKIAl9IHdoaWxlICgoZmxhZ3MgJiAxKSB8fCAoZmxhZ3MgJiAyKSk7CiAKIAlhcF9kZXZpY2VfcmVtb3ZlKGRldik7CkBAIC0xMTA5LDEyICsxMTExLDE1IEBACiAKIAkJYXBfZGV2LT5kZXZpY2UuYnVzID0gJmFwX2J1c190eXBlOwogCQlhcF9kZXYtPmRldmljZS5wYXJlbnQgPSBhcF9yb290X2RldmljZTsKLQkJZGV2X3NldF9uYW1lKCZhcF9kZXYtPmRldmljZSwgImNhcmQlMDJ4IiwKLQkJCSAgICAgQVBfUUlEX0RFVklDRShhcF9kZXYtPnFpZCkpOworCQlpZiAoZGV2X3NldF9uYW1lKCZhcF9kZXYtPmRldmljZSwgImNhcmQlMDJ4IiwKKwkJCQkgQVBfUUlEX0RFVklDRShhcF9kZXYtPnFpZCkpKSB7CisJCQlrZnJlZShhcF9kZXYpOworCQkJY29udGludWU7CisJCX0KIAkJYXBfZGV2LT5kZXZpY2UucmVsZWFzZSA9IGFwX2RldmljZV9yZWxlYXNlOwogCQlyYyA9IGRldmljZV9yZWdpc3RlcigmYXBfZGV2LT5kZXZpY2UpOwogCQlpZiAocmMpIHsKLQkJCWtmcmVlKGFwX2Rldik7CisJCQlwdXRfZGV2aWNlKCZhcF9kZXYtPmRldmljZSk7CiAJCQljb250aW51ZTsKIAkJfQogCQkvKiBBZGQgZGV2aWNlIGF0dHJpYnV0ZXMuICovCkBAIC0xNDA3LDE0ICsxNDEyLDEyIEBACiAKIHN0YXRpYyBpbnQgX19hcF9wb2xsX2RldmljZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQogewotCXNwaW5fbG9jaygmYXBfZGV2LT5sb2NrKTsKIAlpZiAoIWFwX2Rldi0+dW5yZWdpc3RlcmVkKSB7CiAJCWlmIChhcF9wb2xsX3F1ZXVlKGFwX2RldiwgZmxhZ3MpKQogCQkJYXBfZGV2LT51bnJlZ2lzdGVyZWQgPSAxOwogCQlpZiAoYXBfZGV2LT5yZXNldCA9PSBBUF9SRVNFVF9ETykKIAkJCWFwX3Jlc2V0KGFwX2Rldik7CiAJfQotCXNwaW5fdW5sb2NrKCZhcF9kZXYtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xNDQxLDcgKzE0NDQsOSBAQAogCQlmbGFncyA9IDA7CiAJCXNwaW5fbG9jaygmYXBfZGV2aWNlX2xpc3RfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYXBfZGV2LCAmYXBfZGV2aWNlX2xpc3QsIGxpc3QpIHsKKwkJCXNwaW5fbG9jaygmYXBfZGV2LT5sb2NrKTsKIAkJCV9fYXBfcG9sbF9kZXZpY2UoYXBfZGV2LCAmZmxhZ3MpOworCQkJc3Bpbl91bmxvY2soJmFwX2Rldi0+bG9jayk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJmFwX2RldmljZV9saXN0X2xvY2spOwogCX0gd2hpbGUgKGZsYWdzICYgMSk7CkBAIC0xNDg3LDcgKzE0OTIsOSBAQAogCQlmbGFncyA9IDA7CiAJCXNwaW5fbG9ja19iaCgmYXBfZGV2aWNlX2xpc3RfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYXBfZGV2LCAmYXBfZGV2aWNlX2xpc3QsIGxpc3QpIHsKKwkJCXNwaW5fbG9jaygmYXBfZGV2LT5sb2NrKTsKIAkJCV9fYXBfcG9sbF9kZXZpY2UoYXBfZGV2LCAmZmxhZ3MpOworCQkJc3Bpbl91bmxvY2soJmFwX2Rldi0+bG9jayk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJmFwX2RldmljZV9saXN0X2xvY2spOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jIGIvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKaW5kZXggZTM4ZTVkMy4uMjkzMGZjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKQEAgLTQwMywxMCArNDAzLDE0IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotdm9pZCBfX2luaXQgczM5MF92aXJ0aW9fY29uc29sZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzMzkwX3ZpcnRpb19jb25zb2xlX2luaXQodm9pZCkKIHsKLQl2aXJ0aW9fY29uc19lYXJseV9pbml0KGVhcmx5X3B1dF9jaGFycyk7CisJaWYgKCFNQUNISU5FX0lTX0tWTSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIHZpcnRpb19jb25zX2Vhcmx5X2luaXQoZWFybHlfcHV0X2NoYXJzKTsKIH0KK2NvbnNvbGVfaW5pdGNhbGwoczM5MF92aXJ0aW9fY29uc29sZV9pbml0KTsKKwogCiAvKgogICogV2UgZG8gdGhpcyBhZnRlciBjb3JlIHN0dWZmLCBidXQgYmVmb3JlIHRoZSBkcml2ZXJzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwppbmRleCBmMzcwZjhkLi5jNjNiYWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwpAQCAtMzUwLDYgKzM1MCw4IEBACiAJQ0xBV19EQkZfVEVYVF8oNCwgdHJhY2UsICJjbGF3dHglZCIsIHJjKTsKIAlpZiAocmMpCiAJCXJjID0gTkVUREVWX1RYX0JVU1k7CisJZWxzZQorCQlyYyA9IE5FVERFVl9UWF9PSzsKICAgICAgICAgcmV0dXJuIHJjOwogfSAgIC8qICBlbmQgb2YgY2xhd190eCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYwppbmRleCAyMjJlNDczLi5jNWI4Mzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKQEAgLTE2NCw3ICsxNjQsNiBAQAogCQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCXByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYmxlbjsKIAkJbmV0aWZfcnhfbmkoc2tiKTsKLQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJaWYgKGxlbiA+IDApIHsKIAkJCXNrYl9wdWxsKHBza2IsIGhlYWRlci0+bGVuZ3RoKTsKIAkJCWlmIChza2JfdGFpbHJvb20ocHNrYikgPCBMTF9IRUFERVJfTEVOR1RIKSB7CkBAIC04ODAsNyArODc5LDcgQEAKIAkJCQkiJXMoJXMpOiBOVUxMIHNrX2J1ZmYgcGFzc2VkIiwKIAkJCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUpOwogCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCAoTExfSEVBREVSX0xFTkdUSCArIDIpKSB7CiAJCUNUQ01fREJGX1RFWFRfKEVSUk9SLCBDVENfREJGX0VSUk9SLApAQCAtODg4LDcgKzg4Nyw3IEBACiAJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSwgTExfSEVBREVSX0xFTkdUSCArIDIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJLyoKQEAgLTkwMSw3ICs5MDAsNyBAQAogCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlwcml2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlpZiAoY3RjbV90ZXN0X2FuZF9zZXRfYnVzeShkZXYpKQpAQCAtOTEwLDcgKzkwOSw3IEBACiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJaWYgKGN0Y21fdHJhbnNtaXRfc2tiKHByaXYtPmNoYW5uZWxbV1JJVEVdLCBza2IpICE9IDApCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiB1bm1lcmdlZCBNUEMgdmFyaWFudCBvZiBjdGNtX3R4ICovCkBAIC0xMDA4LDcgKzEwMDcsNyBAQAogCWlmIChkb19kZWJ1ZykKIAkJTVBDX0RCRl9ERVZfTkFNRShUUkFDRSwgZGV2LCAiZXhpdCIpOwogCi0JcmV0dXJuIDA7CS8qIGhhbmRsZSBmcmVlaW5nIG9mIHNrYiBoZXJlICovCisJcmV0dXJuIE5FVERFVl9UWF9PSzsJLyogaGFuZGxlIGZyZWVpbmcgb2Ygc2tiIGhlcmUgKi8KIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwppbmRleCA4YzY3NTkwLi5hNzBkZTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKQEAgLTE1NTMsMjQgKzE1NTMsMjQgQEAKIAkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGxjc19oZWFkZXIgKmhlYWRlcjsKLQlpbnQgcmMgPSAwOworCWludCByYyA9IE5FVERFVl9UWF9PSzsKIAogCUxDU19EQkZfVEVYVCg1LCB0cmFjZSwgImhhcmR4bWl0Iik7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCWNhcmQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJY2FyZC0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlpZiAoY2FyZC0+c3RhdGUgIT0gREVWX1NUQVRFX1VQKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJY2FyZC0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQljYXJkLT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJY2FyZC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCW5ldGlmX3N0b3BfcXVldWUoY2FyZC0+ZGV2KTsKIAlzcGluX2xvY2soJmNhcmQtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwppbmRleCA4YzM2ZWFmLi45MjE1ZmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwpAQCAtNjc2LDcgKzY3Niw2IEBACiAJCSAqIHdlIG11c3QgdXNlIG5ldGlmX3J4X25pKCkgaW5zdGVhZCBvZiBuZXRpZl9yeCgpCiAJCSAqLwogCQluZXRpZl9yeF9uaShza2IpOwotCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQlza2JfcHVsbChwc2tiLCBoZWFkZXItPm5leHQpOwogCQlza2JfcHV0KHBza2IsIE5FVElVQ1ZfSERSTEVOKTsKIAl9CkBAIC0xMzc2LDE0ICsxMzc1LDE0IEBACiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCUlVQ1ZfREJGX1RFWFQoZGF0YSwgMiwgIm5ldGl1Y3ZfdHg6IHNrYiBpcyBOVUxMXG4iKTsKIAkJcHJpdnB0ci0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgTkVUSVVDVl9IRFJMRU4pIHsKIAkJSVVDVl9EQkZfVEVYVChkYXRhLCAyLAogCQkJIm5ldGl1Y3ZfdHg6IHNrYl9oZWFkcm9vbSA8IE5FVElVQ1ZfSERSTEVOXG4iKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlwcml2cHRyLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCS8qKgpAQCAtMTM5NSw3ICsxMzk0LDcgQEAKIAkJcHJpdnB0ci0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlwcml2cHRyLT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJcHJpdnB0ci0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJaWYgKG5ldGl1Y3ZfdGVzdF9hbmRfc2V0X2J1c3koZGV2KSkgewpAQCAtMTgzOSw5ICsxODM4LDEwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKGRldik7Ci0KLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJcHV0X2RldmljZShkZXYpOwogCQlyZXR1cm4gcmV0OworCX0KIAlyZXQgPSBuZXRpdWN2X2FkZF9maWxlcyhkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VucmVnOwpAQCAtMjIyNiw4ICsyMjI2LDEwIEBACiAJbmV0aXVjdl9kZXYtPnJlbGVhc2UgPSAodm9pZCAoKikoc3RydWN0IGRldmljZSAqKSlrZnJlZTsKIAluZXRpdWN2X2Rldi0+ZHJpdmVyID0gJm5ldGl1Y3ZfZHJpdmVyOwogCXJjID0gZGV2aWNlX3JlZ2lzdGVyKG5ldGl1Y3ZfZGV2KTsKLQlpZiAocmMpCisJaWYgKHJjKSB7CisJCXB1dF9kZXZpY2UobmV0aXVjdl9kZXYpOwogCQlnb3RvIG91dF9kcml2ZXI7CisJfQogCW5ldGl1Y3ZfYmFubmVyKCk7CiAJcmV0dXJuIHJjOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAppbmRleCA0NDdlMWQxLi4zMWEyYjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKQEAgLTQzNSw2ICs0MzUsNyBAQAogCSAqIGluZGV4IG9mIGJ1ZmZlciB0byBiZSBmaWxsZWQgYnkgZHJpdmVyOyBzdGF0ZSBFTVBUWSBvciBQQUNLSU5HCiAJICovCiAJaW50IG5leHRfYnVmX3RvX2ZpbGw7CisJaW50IHN5bmNfaXFkaW9fZXJyb3I7CiAJLyoKIAkgKiBudW1iZXIgb2YgYnVmZmVycyB0aGF0IGFyZSBjdXJyZW50bHkgZmlsbGVkIChQUklNRUQpCiAJICogLT4gdGhlc2UgYnVmZmVycyBhcmUgaGFyZHdhcmUtb3duZWQKQEAgLTY4NSw2ICs2ODYsMTQgQEAKIAlpbnQgaXNfdm1hYzsKIH07CiAKK3N0cnVjdCBxZXRoX3NrYl9kYXRhIHsKKwlfX3UzMiBtYWdpYzsKKwlpbnQgY291bnQ7Cit9OworCisjZGVmaW5lIFFFVEhfU0tCX01BR0lDIDB4NzE2NTc0NjgKKyNkZWZpbmUgUUVUSF9TSUdBX0NDMl9SRVRSSUVTIDMKKwogc3RydWN0IHFldGhfY2FyZCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWVudW0gcWV0aF9jYXJkX3N0YXRlcyBzdGF0ZTsKQEAgLTgzNCw3ICs4NDMsNiBAQAogaW50IHFldGhfc2VuZF9jb250cm9sX2RhdGEoc3RydWN0IHFldGhfY2FyZCAqLCBpbnQsIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKiwKIAlpbnQgKCpyZXBseV9jYikoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9yZXBseSosIHVuc2lnbmVkIGxvbmcpLAogCXZvaWQgKnJlcGx5X3BhcmFtKTsKLWludCBxZXRoX2dldF9jYXN0X3R5cGUoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIGludCBxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBza19idWZmICosIGludCwgaW50KTsKIGludCBxZXRoX2dldF9lbGVtZW50c19ubyhzdHJ1Y3QgcWV0aF9jYXJkICosIHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50KTsKIGludCBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3Qoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICosCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKaW5kZXggZDUzNjIxYy4uYzRhNDJkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwpAQCAtOTI3LDggKzkyNyw4IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBxZXRoX2NsZWFyX291dHB1dF9idWZmZXIoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsCi0JCSBzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZikKK3N0YXRpYyB2b2lkIF9fcWV0aF9jbGVhcl9vdXRwdXRfYnVmZmVyKHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlLAorCQkgc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWYsIHVuc2lnbmVkIGludCBxZXRoX3NraXBfc2tiKQogewogCWludCBpOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC05MzcsMTEgKzkzNywxMyBAQAogCWlmIChidWYtPmJ1ZmZlci0+ZWxlbWVudFswXS5mbGFncyAmIDB4NDApCiAJCWF0b21pY19kZWMoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KTsKIAotCXNrYiA9IHNrYl9kZXF1ZXVlKCZidWYtPnNrYl9saXN0KTsKLQl3aGlsZSAoc2tiKSB7Ci0JCWF0b21pY19kZWMoJnNrYi0+dXNlcnMpOwotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCWlmICghcWV0aF9za2lwX3NrYikgewogCQlza2IgPSBza2JfZGVxdWV1ZSgmYnVmLT5za2JfbGlzdCk7CisJCXdoaWxlIChza2IpIHsKKwkJCWF0b21pY19kZWMoJnNrYi0+dXNlcnMpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZidWYtPnNrYl9saXN0KTsKKwkJfQogCX0KIAlmb3IgKGkgPSAwOyBpIDwgUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKTsgKytpKSB7CiAJCWlmIChidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5hZGRyICYmIGJ1Zi0+aXNfaGVhZGVyW2ldKQpAQCAtOTU3LDYgKzk1OSwxMiBAQAogCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfRU1QVFkpOwogfQogCitzdGF0aWMgdm9pZCBxZXRoX2NsZWFyX291dHB1dF9idWZmZXIoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsCisJCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmKQoreworCV9fcWV0aF9jbGVhcl9vdXRwdXRfYnVmZmVyKHF1ZXVlLCBidWYsIDApOworfQorCiB2b2lkIHFldGhfY2xlYXJfcWRpb19idWZmZXJzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCiB7CiAJaW50IGksIGo7CkBAIC0xMTUyLDggKzExNjAsOSBAQAogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yoc2xyLCBzdHJ1Y3QgcWV0aF9jYXJkLAogCQkJCQlxZXRoX3NlcnZpY2VfbGV2ZWwpOwotCXNlcV9wcmludGYobSwgInFldGg6ICVzIGZpcm13YXJlIGxldmVsICVzXG4iLCBDQVJEX0JVU19JRChjYXJkKSwKLQkJCWNhcmQtPmluZm8ubWNsX2xldmVsKTsKKwlpZiAoY2FyZC0+aW5mby5tY2xfbGV2ZWxbMF0pCisJCXNlcV9wcmludGYobSwgInFldGg6ICVzIGZpcm13YXJlIGxldmVsICVzXG4iLAorCQkJQ0FSRF9CVVNfSUQoY2FyZCksIGNhcmQtPmluZm8ubWNsX2xldmVsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBxZXRoX2NhcmQgKnFldGhfYWxsb2NfY2FyZCh2b2lkKQpAQCAtMjY4NSw2ICsyNjk0LDEzIEBACiAJaW50IHNiYWxmMTUgPSBidWZmZXItPmJ1ZmZlci0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmOwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgNiwgImhkc25kZXJyIik7CisJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpIHsKKwkJaWYgKHNiYWxmMTUgPT0gMCkgeworCQkJcWRpb19lcnIgPSAwOworCQl9IGVsc2UgeworCQkJcWRpb19lcnIgPSAxOworCQl9CisJfQogCXFldGhfY2hlY2tfcWRpb19lcnJvcnMoYnVmZmVyLT5idWZmZXIsIHFkaW9fZXJyLCAicW91dGVyciIpOwogCiAJaWYgKCFxZGlvX2VycikKQEAgLTI4MTcsNiArMjgzMyw3IEBACiAJCX0KIAl9CiAKKwlxdWV1ZS0+c3luY19pcWRpb19lcnJvciA9IDA7CiAJcXVldWUtPmNhcmQtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWlmIChxdWV1ZS0+Y2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykgewogCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX2NudCsrOwpAQCAtMjgzMiw2ICsyODQ5LDEwIEBACiAJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fdGltZSArPQogCQkJcWV0aF9nZXRfbWljcm9zKCkgLQogCQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb19zdGFydF90aW1lOworCWlmIChyYyA+IDApIHsKKwkJaWYgKCEocmMgJiBRRElPX0VSUk9SX1NJR0FfQlVTWSkpCisJCQlxdWV1ZS0+c3luY19pcWRpb19lcnJvciA9IHJjICYgMzsKKwl9CiAJaWYgKHJjKSB7CiAJCXF1ZXVlLT5jYXJkLT5zdGF0cy50eF9lcnJvcnMgKz0gY291bnQ7CiAJCS8qIGlnbm9yZSB0ZW1wb3JhcnkgU0lHQSBlcnJvcnMgd2l0aG91dCBidXN5IGNvbmRpdGlvbiAqLwpAQCAtMjg5OSw2ICsyOTIwLDcgQEAKIAlzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSA9IGNhcmQtPnFkaW8ub3V0X3FzW19fcXVldWVdOwogCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyOwogCWludCBpOworCXVuc2lnbmVkIHFldGhfc2VuZF9lcnI7CiAKIAlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAicWRvdWhkbCIpOwogCWlmIChxZGlvX2Vycm9yICYgUURJT19FUlJPUl9BQ1RJVkFURV9DSEVDS19DT05ESVRJT04pIHsKQEAgLTI5MTUsOCArMjkzNyw5IEBACiAJfQogCWZvciAoaSA9IGZpcnN0X2VsZW1lbnQ7IGkgPCAoZmlyc3RfZWxlbWVudCArIGNvdW50KTsgKytpKSB7CiAJCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1tpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUV07Ci0JCXFldGhfaGFuZGxlX3NlbmRfZXJyb3IoY2FyZCwgYnVmZmVyLCBxZGlvX2Vycm9yKTsKLQkJcWV0aF9jbGVhcl9vdXRwdXRfYnVmZmVyKHF1ZXVlLCBidWZmZXIpOworCQlxZXRoX3NlbmRfZXJyID0gcWV0aF9oYW5kbGVfc2VuZF9lcnJvcihjYXJkLCBidWZmZXIsIHFkaW9fZXJyb3IpOworCQlfX3FldGhfY2xlYXJfb3V0cHV0X2J1ZmZlcihxdWV1ZSwgYnVmZmVyLAorCQkJKHFldGhfc2VuZF9lcnIgPT0gUUVUSF9TRU5EX0VSUk9SX1JFVFJZKSA/IDEgOiAwKTsKIAl9CiAJYXRvbWljX3N1Yihjb3VudCwgJnF1ZXVlLT51c2VkX2J1ZmZlcnMpOwogCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gZG8gc29tZXRoaW5nIG9uIHRoaXMgb3V0Ym91bmQgcXVldWUgKi8KQEAgLTI5MzAsNTUgKzI5NTMsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9xZGlvX291dHB1dF9oYW5kbGVyKTsKIAotaW50IHFldGhfZ2V0X2Nhc3RfdHlwZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWludCBjYXN0X3R5cGUgPSBSVE5fVU5TUEVDOwotCi0JaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pCi0JCXJldHVybiBjYXN0X3R5cGU7Ci0KLQlpZiAoc2tiX2RzdChza2IpICYmIHNrYl9kc3Qoc2tiKS0+bmVpZ2hib3VyKSB7Ci0JCWNhc3RfdHlwZSA9IHNrYl9kc3Qoc2tiKS0+bmVpZ2hib3VyLT50eXBlOwotCQlpZiAoKGNhc3RfdHlwZSA9PSBSVE5fQlJPQURDQVNUKSB8fAotCQkgICAgKGNhc3RfdHlwZSA9PSBSVE5fTVVMVElDQVNUKSB8fAotCQkgICAgKGNhc3RfdHlwZSA9PSBSVE5fQU5ZQ0FTVCkpCi0JCQlyZXR1cm4gY2FzdF90eXBlOwotCQllbHNlCi0JCQlyZXR1cm4gUlROX1VOU1BFQzsKLQl9Ci0JLyogdHJ5IHNvbWV0aGluZyBlbHNlICovCi0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVBWNikKLQkJcmV0dXJuIChza2JfbmV0d29ya19oZWFkZXIoc2tiKVsyNF0gPT0gMHhmZikgPwotCQkJCVJUTl9NVUxUSUNBU1QgOiAwOwotCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVApCi0JCXJldHVybiAoKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpWzE2XSAmIDB4ZjApID09IDB4ZTApID8KLQkJCQlSVE5fTVVMVElDQVNUIDogMDsKLQkvKiAuLi4gKi8KLQlpZiAoIW1lbWNtcChza2ItPmRhdGEsIHNrYi0+ZGV2LT5icm9hZGNhc3QsIDYpKQotCQlyZXR1cm4gUlROX0JST0FEQ0FTVDsKLQllbHNlIHsKLQkJdTE2IGhkcl9tYWM7Ci0KLQkJaGRyX21hYyA9ICooKHUxNiAqKXNrYi0+ZGF0YSk7Ci0JCS8qIHRyIG11bHRpY2FzdD8gKi8KLQkJc3dpdGNoIChjYXJkLT5pbmZvLmxpbmtfdHlwZSkgewotCQljYXNlIFFFVEhfTElOS19UWVBFX0hTVFI6Ci0JCWNhc2UgUUVUSF9MSU5LX1RZUEVfTEFORV9UUjoKLQkJCWlmICgoaGRyX21hYyA9PSBRRVRIX1RSX01BQ19OQykgfHwKLQkJCSAgICAoaGRyX21hYyA9PSBRRVRIX1RSX01BQ19DKSkKLQkJCQlyZXR1cm4gUlROX01VTFRJQ0FTVDsKLQkJCWJyZWFrOwotCQkvKiBldGggb3Igc28gbXVsdGljYXN0PyAqLwotCQlkZWZhdWx0OgotCQlpZiAoKGhkcl9tYWMgPT0gUUVUSF9FVEhfTUFDX1Y0KSB8fAotCQkJICAgIChoZHJfbWFjID09IFFFVEhfRVRIX01BQ19WNikpCi0JCQkJcmV0dXJuIFJUTl9NVUxUSUNBU1Q7Ci0JCX0KLQl9Ci0JcmV0dXJuIGNhc3RfdHlwZTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHFldGhfZ2V0X2Nhc3RfdHlwZSk7Ci0KIGludCBxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJaW50IGlwdiwgaW50IGNhc3RfdHlwZSkKIHsKQEAgLTMxNTksNyArMzEzMywxMCBAQAogCQlpbnQgb2Zmc2V0LCBpbnQgaGRfbGVuKQogewogCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCBza19idWZmICpza2IxOworCXN0cnVjdCBxZXRoX3NrYl9kYXRhICpyZXRyeV9jdHJsOwogCWludCBpbmRleDsKKwlpbnQgcmM7CiAKIAkvKiBzcGluIHVudGlsIHdlIGdldCB0aGUgcXVldWUgLi4uICovCiAJd2hpbGUgKGF0b21pY19jbXB4Y2hnKCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQsCkBAIC0zMTc4LDYgKzMxNTUsMjUgQEAKIAlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQpOwogCXFldGhfZmlsbF9idWZmZXIocXVldWUsIGJ1ZmZlciwgc2tiLCBoZHIsIG9mZnNldCwgaGRfbGVuKTsKIAlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIGluZGV4LCAxKTsKKwlpZiAocXVldWUtPnN5bmNfaXFkaW9fZXJyb3IgPT0gMikgeworCQlza2IxID0gc2tiX2RlcXVldWUoJmJ1ZmZlci0+c2tiX2xpc3QpOworCQl3aGlsZSAoc2tiMSkgeworCQkJYXRvbWljX2RlYygmc2tiMS0+dXNlcnMpOworCQkJc2tiMSA9IHNrYl9kZXF1ZXVlKCZidWZmZXItPnNrYl9saXN0KTsKKwkJfQorCQlyZXRyeV9jdHJsID0gKHN0cnVjdCBxZXRoX3NrYl9kYXRhICopICZza2ItPmNiWzE2XTsKKwkJaWYgKHJldHJ5X2N0cmwtPm1hZ2ljICE9IFFFVEhfU0tCX01BR0lDKSB7CisJCQlyZXRyeV9jdHJsLT5tYWdpYyA9IFFFVEhfU0tCX01BR0lDOworCQkJcmV0cnlfY3RybC0+Y291bnQgPSAwOworCQl9CisJCWlmIChyZXRyeV9jdHJsLT5jb3VudCA8IFFFVEhfU0lHQV9DQzJfUkVUUklFUykgeworCQkJcmV0cnlfY3RybC0+Y291bnQrKzsKKwkJCXJjID0gZGV2X3F1ZXVlX3htaXQoc2tiKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQlRRVRIX0RCRl9URVhUKFFFUlIsIDIsICJxcmRyb3AiKTsKKwkJfQorCX0KIAlyZXR1cm4gMDsKIG91dDoKIAlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYwppbmRleCA1Njg0NjVkLi4zMzUwNWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJaWYgKCFjYXJkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBjYXJkLT5vcHRpb25zLmxheWVyMiA/IDE6MCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGNhcmQtPm9wdGlvbnMubGF5ZXIyKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcWV0aF9kZXZfbGF5ZXIyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCmluZGV4IDY5MWNlY2QuLmY0ZjNjYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwpAQCAtMjE2LDM2ICsyMTYsMTYgQEAKIAlzcGluX3VubG9ja19iaCgmY2FyZC0+bWNsb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgcWV0aF9sMl9nZXRfcGFja2V0X3R5cGUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKLQkJCXN0cnVjdCBxZXRoX2hkciAqaGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBpbnQgcWV0aF9sMl9nZXRfY2FzdF90eXBlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCV9fdTE2IGhkcl9tYWM7Ci0KLQlpZiAoIW1lbWNtcChza2ItPmRhdGEgKyBRRVRIX0hFQURFUl9TSVpFLAotCQkgICAgc2tiLT5kZXYtPmJyb2FkY2FzdCwgNikpIHsKLQkJLyogYnJvYWRjYXN0PyAqLwotCQloZHItPmhkci5sMi5mbGFnc1syXSB8PSBRRVRIX0xBWUVSMl9GTEFHX0JST0FEQ0FTVDsKLQkJcmV0dXJuOwotCX0KLQloZHJfbWFjID0gKigoX191MTYgKilza2ItPmRhdGEpOwotCS8qIHRyIG11bHRpY2FzdD8gKi8KLQlzd2l0Y2ggKGNhcmQtPmluZm8ubGlua190eXBlKSB7Ci0JY2FzZSBRRVRIX0xJTktfVFlQRV9IU1RSOgotCWNhc2UgUUVUSF9MSU5LX1RZUEVfTEFORV9UUjoKLQkJaWYgKChoZHJfbWFjID09IFFFVEhfVFJfTUFDX05DKSB8fAotCQkgICAgKGhkcl9tYWMgPT0gUUVUSF9UUl9NQUNfQykpCi0JCQloZHItPmhkci5sMi5mbGFnc1syXSB8PSBRRVRIX0xBWUVSMl9GTEFHX01VTFRJQ0FTVDsKLQkJZWxzZQotCQkJaGRyLT5oZHIubDIuZmxhZ3NbMl0gfD0gUUVUSF9MQVlFUjJfRkxBR19VTklDQVNUOwotCQlicmVhazsKLQkJLyogZXRoIG9yIHNvIG11bHRpY2FzdD8gKi8KLQlkZWZhdWx0OgotCQlpZiAoKGhkcl9tYWMgPT0gUUVUSF9FVEhfTUFDX1Y0KSB8fAotCQkgICAgIChoZHJfbWFjID09IFFFVEhfRVRIX01BQ19WNikpCi0JCQloZHItPmhkci5sMi5mbGFnc1syXSB8PSBRRVRIX0xBWUVSMl9GTEFHX01VTFRJQ0FTVDsKLQkJZWxzZQotCQkJaGRyLT5oZHIubDIuZmxhZ3NbMl0gfD0gUUVUSF9MQVlFUjJfRkxBR19VTklDQVNUOwotCX0KKwlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKKwkJcmV0dXJuIFJUTl9VTlNQRUM7CisJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHNrYi0+ZGF0YSkpCisJCXJldHVybiBSVE5fQlJPQURDQVNUOworCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihza2ItPmRhdGEpKQorCQlyZXR1cm4gUlROX01VTFRJQ0FTVDsKKwlyZXR1cm4gUlROX1VOU1BFQzsKIH0KIAogc3RhdGljIHZvaWQgcWV0aF9sMl9maWxsX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9oZHIgKmhkciwKQEAgLTI2Miw3ICsyNDIsNyBAQAogCWVsc2UgaWYgKGNhc3RfdHlwZSA9PSBSVE5fQlJPQURDQVNUKQogCQloZHItPmhkci5sMi5mbGFnc1syXSB8PSBRRVRIX0xBWUVSMl9GTEFHX0JST0FEQ0FTVDsKIAllbHNlCi0JCXFldGhfbDJfZ2V0X3BhY2tldF90eXBlKGNhcmQsIGhkciwgc2tiKTsKKwkJaGRyLT5oZHIubDIuZmxhZ3NbMl0gfD0gUUVUSF9MQVlFUjJfRkxBR19VTklDQVNUOwogCiAJaGRyLT5oZHIubDIucGt0X2xlbmd0aCA9IHNrYi0+bGVuLVFFVEhfSEVBREVSX1NJWkU7CiAJLyogVlNXSVRDSCByZWxpZXMgb24gdGhlIFZMQU4KQEAgLTQ2OSw3ICs0NDksNiBAQAogCQkJUUVUSF9EQkZfSEVYKENUUkwsIDMsIGhkciwgUUVUSF9EQkZfQ1RSTF9MRU4pOwogCQkJY29udGludWU7CiAJCX0KLQkJY2FyZC0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJY2FyZC0+c3RhdHMucnhfcGFja2V0cysrOwogCQljYXJkLT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CiAJfQpAQCAtNjcyLDcgKzY1MSw3IEBACiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IHNrYjsKIAlpbnQgaXB2ID0gcWV0aF9nZXRfaXBfdmVyc2lvbihza2IpOwotCWludCBjYXN0X3R5cGUgPSBxZXRoX2dldF9jYXN0X3R5cGUoY2FyZCwgc2tiKTsKKwlpbnQgY2FzdF90eXBlID0gcWV0aF9sMl9nZXRfY2FzdF90eXBlKGNhcmQsIHNrYik7CiAJc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUgPSBjYXJkLT5xZGlvLm91dF9xcwogCQlbcWV0aF9nZXRfcHJpb3JpdHlfcXVldWUoY2FyZCwgc2tiLCBpcHYsIGNhc3RfdHlwZSldOwogCWludCB0eF9ieXRlcyA9IHNrYi0+bGVuOwpAQCAtNzQ0LDYgKzcyMyw3IEBACiAJCWNhcmQtPnN0YXRzLnR4X2J5dGVzICs9IHR4X2J5dGVzOwogCQlpZiAobmV3X3NrYiAhPSBza2IpCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlyYyA9IE5FVERFVl9UWF9PSzsKIAl9IGVsc2UgewogCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKIAkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOwpAQCAtODgyLDcgKzg2Miw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHFldGhfbDJfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHFldGhfbDJfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X3N0cmluZ3MgPSBxZXRoX2NvcmVfZ2V0X3N0cmluZ3MsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gcWV0aF9jb3JlX2dldF9ldGh0b29sX3N0YXRzLApAQCAtODkxLDcgKzg3MSw3IEBACiAJLmdldF9zZXR0aW5ncyA9IHFldGhfY29yZV9ldGh0b29sX2dldF9zZXR0aW5ncywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgcWV0aF9sMl9vc25fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBxZXRoX2wyX29zbl9vcHMgPSB7CiAJLmdldF9zdHJpbmdzID0gcWV0aF9jb3JlX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IHFldGhfY29yZV9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X3N0YXRzX2NvdW50ID0gcWV0aF9jb3JlX2dldF9zdGF0c19jb3VudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCmluZGV4IDU0ODcyNDAuLjA3M2I2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYwpAQCAtMTk4Nyw3ICsxOTg3LDYgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJY2FyZC0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJY2FyZC0+c3RhdHMucnhfcGFja2V0cysrOwogCQljYXJkLT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CiAJfQpAQCAtMjUyNSw2ICsyNTI0LDUxIEBACiAJcmV0dXJuIHJjOwogfQogCitpbnQgaW5saW5lIHFldGhfbDNfZ2V0X2Nhc3RfdHlwZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBjYXN0X3R5cGUgPSBSVE5fVU5TUEVDOworCisJaWYgKHNrYl9kc3Qoc2tiKSAmJiBza2JfZHN0KHNrYiktPm5laWdoYm91cikgeworCQljYXN0X3R5cGUgPSBza2JfZHN0KHNrYiktPm5laWdoYm91ci0+dHlwZTsKKwkJaWYgKChjYXN0X3R5cGUgPT0gUlROX0JST0FEQ0FTVCkgfHwKKwkJICAgIChjYXN0X3R5cGUgPT0gUlROX01VTFRJQ0FTVCkgfHwKKwkJICAgIChjYXN0X3R5cGUgPT0gUlROX0FOWUNBU1QpKQorCQkJcmV0dXJuIGNhc3RfdHlwZTsKKwkJZWxzZQorCQkJcmV0dXJuIFJUTl9VTlNQRUM7CisJfQorCS8qIHRyeSBzb21ldGhpbmcgZWxzZSAqLworCWlmIChza2ItPnByb3RvY29sID09IEVUSF9QX0lQVjYpCisJCXJldHVybiAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYilbMjRdID09IDB4ZmYpID8KKwkJCQlSVE5fTVVMVElDQVNUIDogMDsKKwllbHNlIGlmIChza2ItPnByb3RvY29sID09IEVUSF9QX0lQKQorCQlyZXR1cm4gKChza2JfbmV0d29ya19oZWFkZXIoc2tiKVsxNl0gJiAweGYwKSA9PSAweGUwKSA/CisJCQkJUlROX01VTFRJQ0FTVCA6IDA7CisJLyogLi4uICovCisJaWYgKCFtZW1jbXAoc2tiLT5kYXRhLCBza2ItPmRldi0+YnJvYWRjYXN0LCA2KSkKKwkJcmV0dXJuIFJUTl9CUk9BRENBU1Q7CisJZWxzZSB7CisJCXUxNiBoZHJfbWFjOworCisJCWhkcl9tYWMgPSAqKCh1MTYgKilza2ItPmRhdGEpOworCQkvKiB0ciBtdWx0aWNhc3Q/ICovCisJCXN3aXRjaCAoY2FyZC0+aW5mby5saW5rX3R5cGUpIHsKKwkJY2FzZSBRRVRIX0xJTktfVFlQRV9IU1RSOgorCQljYXNlIFFFVEhfTElOS19UWVBFX0xBTkVfVFI6CisJCQlpZiAoKGhkcl9tYWMgPT0gUUVUSF9UUl9NQUNfTkMpIHx8CisJCQkgICAgKGhkcl9tYWMgPT0gUUVUSF9UUl9NQUNfQykpCisJCQkJcmV0dXJuIFJUTl9NVUxUSUNBU1Q7CisJCQlicmVhazsKKwkJLyogZXRoIG9yIHNvIG11bHRpY2FzdD8gKi8KKwkJZGVmYXVsdDoKKwkJaWYgKChoZHJfbWFjID09IFFFVEhfRVRIX01BQ19WNCkgfHwKKwkJCSAgICAoaGRyX21hYyA9PSBRRVRIX0VUSF9NQUNfVjYpKQorCQkJCXJldHVybiBSVE5fTVVMVElDQVNUOworCQl9CisJfQorCXJldHVybiBjYXN0X3R5cGU7Cit9CisKIHN0YXRpYyB2b2lkIHFldGhfbDNfZmlsbF9oZWFkZXIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfaGRyICpoZHIsCiAJCXN0cnVjdCBza19idWZmICpza2IsIGludCBpcHYsIGludCBjYXN0X3R5cGUpCiB7CkBAIC0yNjUwLDcgKzI2OTQsNyBAQAogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPSBOVUxMOwogCWludCBpcHYgPSBxZXRoX2dldF9pcF92ZXJzaW9uKHNrYik7Ci0JaW50IGNhc3RfdHlwZSA9IHFldGhfZ2V0X2Nhc3RfdHlwZShjYXJkLCBza2IpOworCWludCBjYXN0X3R5cGUgPSBxZXRoX2wzX2dldF9jYXN0X3R5cGUoY2FyZCwgc2tiKTsKIAlzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSA9IGNhcmQtPnFkaW8ub3V0X3FzCiAJCVtxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShjYXJkLCBza2IsIGlwdiwgY2FzdF90eXBlKV07CiAJaW50IHR4X2J5dGVzID0gc2tiLT5sZW47CkBAIC0yNzkzLDYgKzI4MzcsNyBAQAogCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfZnJhZ3Nfc2VudCArPSBucl9mcmFncyArIDE7CiAJCQl9CiAJCX0KKwkJcmMgPSBORVRERVZfVFhfT0s7CiAJfSBlbHNlIHsKIAkJaWYgKGRhdGFfb2Zmc2V0ID49IDApCiAJCQlrbWVtX2NhY2hlX2ZyZWUocWV0aF9jb3JlX2hlYWRlcl9jYWNoZSwgaGRyKTsKQEAgLTI5MDAsNyArMjk0NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgcWV0aF9sM19ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcWV0aF9sM19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCiAJLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bSwKQEAgLTMxNzksNiArMzIyNCw3IEBACiAJbmV0aWZfY2Fycmllcl9vbihjYXJkLT5kZXYpOwogCiAJcWV0aF9zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsIDB4ZmZmZmZmZmYsIDApOworCXFldGhfbDNfc2V0X2lwX2FkZHJfbGlzdChjYXJkKTsKIAlpZiAocmVjb3Zlcl9mbGFnID09IENBUkRfU1RBVEVfUkVDT1ZFUikgewogCQlpZiAocmVjb3ZlcnlfbW9kZSkKIAkJCXFldGhfbDNfb3BlbihjYXJkLT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCmluZGV4IGU3NmEzMjAuLjEwMjAwMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKQEAgLTIxOSwxMyArMjE5LDEzIEBACiAJc21zZ19kZXYtPmRyaXZlciA9ICZzbXNnX2RyaXZlcjsKIAlyYyA9IGRldmljZV9yZWdpc3RlcihzbXNnX2Rldik7CiAJaWYgKHJjKQotCQlnb3RvIG91dF9mcmVlX2RldjsKKwkJZ290byBvdXRfcHV0OwogCiAJY3BjbWQoIlNFVCBTTVNHIElVQ1YiLCBOVUxMLCAwLCBOVUxMKTsKIAlyZXR1cm4gMDsKIAotb3V0X2ZyZWVfZGV2OgotCWtmcmVlKHNtc2dfZGV2KTsKK291dF9wdXQ6CisJcHV0X2RldmljZShzbXNnX2Rldik7CiBvdXRfZnJlZV9wYXRoOgogCWl1Y3ZfcGF0aF9mcmVlKHNtc2dfcGF0aCk7CiAJc21zZ19wYXRoID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCmluZGV4IDJjY2JkMTguLjFiZTZiZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwpAQCAtNDIsNiArNDIsMTIgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZXZpY2UsIGluaXRfZGV2aWNlLCBjaGFycCwgMDQwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRldmljZSwgInNwZWNpZnkgaW5pdGlhbCBkZXZpY2UiKTsKIAorc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp6ZmNwX2NhY2hlX2h3X2FsaWduKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4ga21lbV9jYWNoZV9jcmVhdGUobmFtZSwgc2l6ZSwgcm91bmR1cF9wb3dfb2ZfdHdvKHNpemUpLCAwLCBOVUxMKTsKK30KKwogc3RhdGljIGludCB6ZmNwX3JlcWxpc3RfYWxsb2Moc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgaWR4OwpAQCAtNzgsNyArODQsNyBAQAogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAotCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJcmVhZF9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKIAlhZGFwdGVyID0gemZjcF9nZXRfYWRhcHRlcl9ieV9idXNpZChidXNpZCk7CiAJaWYgKGFkYXB0ZXIpCkBAIC05MywzMSArOTksMjMgQEAKIAl1bml0ID0gemZjcF91bml0X2VucXVldWUocG9ydCwgbHVuKTsKIAlpZiAoSVNfRVJSKHVuaXQpKQogCQlnb3RvIG91dF91bml0OwotCXVwKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOworCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJY2N3X2RldmljZV9zZXRfb25saW5lKGFkYXB0ZXItPmNjd19kZXZpY2UpOwogCiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAlmbHVzaF93b3JrKCZ1bml0LT5zY3NpX3dvcmspOwogCi0JZG93bigmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKKwltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAl6ZmNwX3VuaXRfcHV0KHVuaXQpOwogb3V0X3VuaXQ6CiAJemZjcF9wb3J0X3B1dChwb3J0KTsKIG91dF9wb3J0OgogCXpmY3BfYWRhcHRlcl9wdXQoYWRhcHRlcik7CiBvdXRfYWRhcHRlcjoKLQl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKKwltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCXJldHVybjsKIH0KIAotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp6ZmNwX2NhY2hlX2NyZWF0ZShpbnQgc2l6ZSwgY2hhciAqbmFtZSkKLXsKLQlpbnQgYWxpZ24gPSAxOwotCXdoaWxlICgoc2l6ZSAtIGFsaWduKSA+IDApCi0JCWFsaWduIDw8PSAxOwotCXJldHVybiBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lICwgc2l6ZSwgYWxpZ24sIDAsIE5VTEwpOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgemZjcF9pbml0X2RldmljZV9zZXR1cChjaGFyICpkZXZzdHIpCiB7CiAJY2hhciAqdG9rZW47CkBAIC0xNTgsMjQgKzE1NiwyNyBAQAogewogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCi0JemZjcF9kYXRhLmZzZl9yZXFfcXRjYl9jYWNoZSA9IHpmY3BfY2FjaGVfY3JlYXRlKAotCQkJc2l6ZW9mKHN0cnVjdCB6ZmNwX2ZzZl9yZXFfcXRjYiksICJ6ZmNwX2ZzZiIpOwotCWlmICghemZjcF9kYXRhLmZzZl9yZXFfcXRjYl9jYWNoZSkKKwl6ZmNwX2RhdGEuZ3BuX2Z0X2NhY2hlID0gemZjcF9jYWNoZV9od19hbGlnbigiemZjcF9ncG4iLAorCQkJCQlzaXplb2Yoc3RydWN0IGN0X2l1X2dwbl9mdF9yZXEpKTsKKwlpZiAoIXpmY3BfZGF0YS5ncG5fZnRfY2FjaGUpCiAJCWdvdG8gb3V0OwogCi0JemZjcF9kYXRhLnNyX2J1ZmZlcl9jYWNoZSA9IHpmY3BfY2FjaGVfY3JlYXRlKAotCQkJc2l6ZW9mKHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyKSwgInpmY3Bfc3IiKTsKKwl6ZmNwX2RhdGEucXRjYl9jYWNoZSA9IHpmY3BfY2FjaGVfaHdfYWxpZ24oInpmY3BfcXRjYiIsCisJCQkJCXNpemVvZihzdHJ1Y3QgZnNmX3F0Y2IpKTsKKwlpZiAoIXpmY3BfZGF0YS5xdGNiX2NhY2hlKQorCQlnb3RvIG91dF9xdGNiX2NhY2hlOworCisJemZjcF9kYXRhLnNyX2J1ZmZlcl9jYWNoZSA9IHpmY3BfY2FjaGVfaHdfYWxpZ24oInpmY3Bfc3IiLAorCQkJCQlzaXplb2Yoc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIpKTsKIAlpZiAoIXpmY3BfZGF0YS5zcl9idWZmZXJfY2FjaGUpCiAJCWdvdG8gb3V0X3NyX2NhY2hlOwogCi0JemZjcF9kYXRhLmdpZF9wbl9jYWNoZSA9IHpmY3BfY2FjaGVfY3JlYXRlKAotCQkJc2l6ZW9mKHN0cnVjdCB6ZmNwX2dpZF9wbl9kYXRhKSwgInpmY3BfZ2lkIik7CisJemZjcF9kYXRhLmdpZF9wbl9jYWNoZSA9IHpmY3BfY2FjaGVfaHdfYWxpZ24oInpmY3BfZ2lkIiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB6ZmNwX2dpZF9wbl9kYXRhKSk7CiAJaWYgKCF6ZmNwX2RhdGEuZ2lkX3BuX2NhY2hlKQogCQlnb3RvIG91dF9naWRfY2FjaGU7CiAKLQl6ZmNwX2RhdGEud29ya19xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJ6ZmNwX3dxIik7Ci0KLQlzZW1hX2luaXQoJnpmY3BfZGF0YS5jb25maWdfc2VtYSwgMSk7CisJbXV0ZXhfaW5pdCgmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJcndsb2NrX2luaXQoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CiAKIAl6ZmNwX2RhdGEuc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgPQpAQCAtMjA5LDcgKzIxMCw5IEBACiBvdXRfZ2lkX2NhY2hlOgogCWttZW1fY2FjaGVfZGVzdHJveSh6ZmNwX2RhdGEuc3JfYnVmZmVyX2NhY2hlKTsKIG91dF9zcl9jYWNoZToKLQlrbWVtX2NhY2hlX2Rlc3Ryb3koemZjcF9kYXRhLmZzZl9yZXFfcXRjYl9jYWNoZSk7CisJa21lbV9jYWNoZV9kZXN0cm95KHpmY3BfZGF0YS5xdGNiX2NhY2hlKTsKK291dF9xdGNiX2NhY2hlOgorCWttZW1fY2FjaGVfZGVzdHJveSh6ZmNwX2RhdGEuZ3BuX2Z0X2NhY2hlKTsKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMjYzLDcgKzI2Niw3IEBACiAgKiBAcG9ydDogcG9pbnRlciB0byBwb3J0IHdoZXJlIHVuaXQgaXMgYWRkZWQKICAqIEBmY3BfbHVuOiBGQ1AgTFVOIG9mIHVuaXQgdG8gYmUgZW5xdWV1ZWQKICAqIFJldHVybnM6IHBvaW50ZXIgdG8gZW5xdWV1ZWQgdW5pdCBvbiBzdWNjZXNzLCBFUlJfUFRSIG9uIGVycm9yCi0gKiBMb2NrczogY29uZmlnX3NlbWEgbXVzdCBiZSBoZWxkIHRvIHNlcmlhbGl6ZSBjaGFuZ2VzIHRvIHRoZSB1bml0IGxpc3QKKyAqIExvY2tzOiBjb25maWdfbXV0ZXggbXVzdCBiZSBoZWxkIHRvIHNlcmlhbGl6ZSBjaGFuZ2VzIHRvIHRoZSB1bml0IGxpc3QKICAqCiAgKiBTZXRzIHVwIHNvbWUgdW5pdCBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFuZCBjcmVhdGVzIHN5c2ZzIGVudHJ5LgogICovCkBAIC0yNzEsNiArMjc0LDEzIEBACiB7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAorCXJlYWRfbG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CisJaWYgKHpmY3BfZ2V0X3VuaXRfYnlfbHVuKHBvcnQsIGZjcF9sdW4pKSB7CisJCXJlYWRfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCXJlYWRfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKKwogCXVuaXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgemZjcF91bml0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1bml0KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTI4Miw4ICsyOTIsMTEgQEAKIAl1bml0LT5wb3J0ID0gcG9ydDsKIAl1bml0LT5mY3BfbHVuID0gZmNwX2x1bjsKIAotCWRldl9zZXRfbmFtZSgmdW5pdC0+c3lzZnNfZGV2aWNlLCAiMHglMDE2bGx4IiwKLQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBmY3BfbHVuKTsKKwlpZiAoZGV2X3NldF9uYW1lKCZ1bml0LT5zeXNmc19kZXZpY2UsICIweCUwMTZsbHgiLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGZjcF9sdW4pKSB7CisJCWtmcmVlKHVuaXQpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CiAJdW5pdC0+c3lzZnNfZGV2aWNlLnBhcmVudCA9ICZwb3J0LT5zeXNmc19kZXZpY2U7CiAJdW5pdC0+c3lzZnNfZGV2aWNlLnJlbGVhc2UgPSB6ZmNwX3N5c2ZzX3VuaXRfcmVsZWFzZTsKIAlkZXZfc2V0X2RydmRhdGEoJnVuaXQtPnN5c2ZzX2RldmljZSwgdW5pdCk7CkBAIC0yOTksMjAgKzMxMiwxNSBAQAogCXVuaXQtPmxhdGVuY2llcy5jbWQuY2hhbm5lbC5taW4gPSAweEZGRkZGRkZGOwogCXVuaXQtPmxhdGVuY2llcy5jbWQuZmFicmljLm1pbiA9IDB4RkZGRkZGRkY7CiAKLQlyZWFkX2xvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwotCWlmICh6ZmNwX2dldF91bml0X2J5X2x1bihwb3J0LCBmY3BfbHVuKSkgewotCQlyZWFkX3VubG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7Ci0JCWdvdG8gZXJyX291dF9mcmVlOworCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnVuaXQtPnN5c2ZzX2RldmljZSkpIHsKKwkJcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQotCXJlYWRfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKLQotCWlmIChkZXZpY2VfcmVnaXN0ZXIoJnVuaXQtPnN5c2ZzX2RldmljZSkpCi0JCWdvdG8gZXJyX291dF9mcmVlOwogCiAJaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmdW5pdC0+c3lzZnNfZGV2aWNlLmtvYmosCiAJCQkgICAgICAgJnpmY3Bfc3lzZnNfdW5pdF9hdHRycykpIHsKIAkJZGV2aWNlX3VucmVnaXN0ZXIoJnVuaXQtPnN5c2ZzX2RldmljZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU8pOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKIAl6ZmNwX3VuaXRfZ2V0KHVuaXQpOwpAQCAtMzI3LDEwICszMzUsNiBAQAogCXpmY3BfcG9ydF9nZXQocG9ydCk7CiAKIAlyZXR1cm4gdW5pdDsKLQotZXJyX291dF9mcmVlOgotCWtmcmVlKHVuaXQpOwotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCiAvKioKQEAgLTM1MywzNyArMzU3LDQ3IEBACiAKIHN0YXRpYyBpbnQgemZjcF9hbGxvY2F0ZV9sb3dfbWVtX2J1ZmZlcnMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKLQkvKiBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggemZjcF9kYXRhLmNvbmZpZ19zZW1hIHRha2VuICovCi0JYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2VycCA9Ci0JCW1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbCgxLCB6ZmNwX2RhdGEuZnNmX3JlcV9xdGNiX2NhY2hlKTsKLQlpZiAoIWFkYXB0ZXItPnBvb2wuZnNmX3JlcV9lcnApCisJLyogbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIHpmY3BfZGF0YS5jb25maWdfbXV0ZXggdGFrZW4gKi8KKwlhZGFwdGVyLT5wb29sLmVycF9yZXEgPQorCQltZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Bvb2woMSwgc2l6ZW9mKHN0cnVjdCB6ZmNwX2ZzZl9yZXEpKTsKKwlpZiAoIWFkYXB0ZXItPnBvb2wuZXJwX3JlcSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlhZGFwdGVyLT5wb29sLmZzZl9yZXFfc2NzaSA9Ci0JCW1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbCgxLCB6ZmNwX2RhdGEuZnNmX3JlcV9xdGNiX2NhY2hlKTsKLQlpZiAoIWFkYXB0ZXItPnBvb2wuZnNmX3JlcV9zY3NpKQorCWFkYXB0ZXItPnBvb2wuZ2lkX3BuX3JlcSA9CisJCW1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbCgxLCBzaXplb2Yoc3RydWN0IHpmY3BfZnNmX3JlcSkpOworCWlmICghYWRhcHRlci0+cG9vbC5naWRfcG5fcmVxKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWFkYXB0ZXItPnBvb2wuZnNmX3JlcV9hYm9ydCA9Ci0JCW1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbCgxLCB6ZmNwX2RhdGEuZnNmX3JlcV9xdGNiX2NhY2hlKTsKLQlpZiAoIWFkYXB0ZXItPnBvb2wuZnNmX3JlcV9hYm9ydCkKKwlhZGFwdGVyLT5wb29sLnNjc2lfcmVxID0KKwkJbWVtcG9vbF9jcmVhdGVfa21hbGxvY19wb29sKDEsIHNpemVvZihzdHJ1Y3QgemZjcF9mc2ZfcmVxKSk7CisJaWYgKCFhZGFwdGVyLT5wb29sLnNjc2lfcmVxKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWFkYXB0ZXItPnBvb2wuZnNmX3JlcV9zdGF0dXNfcmVhZCA9CisJYWRhcHRlci0+cG9vbC5zY3NpX2Fib3J0ID0KKwkJbWVtcG9vbF9jcmVhdGVfa21hbGxvY19wb29sKDEsIHNpemVvZihzdHJ1Y3QgemZjcF9mc2ZfcmVxKSk7CisJaWYgKCFhZGFwdGVyLT5wb29sLnNjc2lfYWJvcnQpCisJCXJldHVybiAtRU5PTUVNOworCisJYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9yZXEgPQogCQltZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Bvb2woRlNGX1NUQVRVU19SRUFEU19SRUNPTSwKIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgemZjcF9mc2ZfcmVxKSk7Ci0JaWYgKCFhZGFwdGVyLT5wb29sLmZzZl9yZXFfc3RhdHVzX3JlYWQpCisJaWYgKCFhZGFwdGVyLT5wb29sLnN0YXR1c19yZWFkX3JlcSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlhZGFwdGVyLT5wb29sLmRhdGFfc3RhdHVzX3JlYWQgPQorCWFkYXB0ZXItPnBvb2wucXRjYl9wb29sID0KKwkJbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKDQsIHpmY3BfZGF0YS5xdGNiX2NhY2hlKTsKKwlpZiAoIWFkYXB0ZXItPnBvb2wucXRjYl9wb29sKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFkYXB0ZXItPnBvb2wuc3RhdHVzX3JlYWRfZGF0YSA9CiAJCW1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChGU0ZfU1RBVFVTX1JFQURTX1JFQ09NLAogCQkJCQkgemZjcF9kYXRhLnNyX2J1ZmZlcl9jYWNoZSk7Ci0JaWYgKCFhZGFwdGVyLT5wb29sLmRhdGFfc3RhdHVzX3JlYWQpCisJaWYgKCFhZGFwdGVyLT5wb29sLnN0YXR1c19yZWFkX2RhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JYWRhcHRlci0+cG9vbC5kYXRhX2dpZF9wbiA9CisJYWRhcHRlci0+cG9vbC5naWRfcG5fZGF0YSA9CiAJCW1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbCgxLCB6ZmNwX2RhdGEuZ2lkX3BuX2NhY2hlKTsKLQlpZiAoIWFkYXB0ZXItPnBvb2wuZGF0YV9naWRfcG4pCisJaWYgKCFhZGFwdGVyLT5wb29sLmdpZF9wbl9kYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXJldHVybiAwOwpAQCAtMzkxLDE5ICs0MDUsMjEgQEAKIAogc3RhdGljIHZvaWQgemZjcF9mcmVlX2xvd19tZW1fYnVmZmVycyhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogewotCS8qIHpmY3BfZGF0YS5jb25maWdfc2VtYSBtdXN0IGJlIGhlbGQgKi8KLQlpZiAoYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2VycCkKLQkJbWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItPnBvb2wuZnNmX3JlcV9lcnApOwotCWlmIChhZGFwdGVyLT5wb29sLmZzZl9yZXFfc2NzaSkKLQkJbWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItPnBvb2wuZnNmX3JlcV9zY3NpKTsKLQlpZiAoYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2Fib3J0KQotCQltZW1wb29sX2Rlc3Ryb3koYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2Fib3J0KTsKLQlpZiAoYWRhcHRlci0+cG9vbC5mc2ZfcmVxX3N0YXR1c19yZWFkKQotCQltZW1wb29sX2Rlc3Ryb3koYWRhcHRlci0+cG9vbC5mc2ZfcmVxX3N0YXR1c19yZWFkKTsKLQlpZiAoYWRhcHRlci0+cG9vbC5kYXRhX3N0YXR1c19yZWFkKQotCQltZW1wb29sX2Rlc3Ryb3koYWRhcHRlci0+cG9vbC5kYXRhX3N0YXR1c19yZWFkKTsKLQlpZiAoYWRhcHRlci0+cG9vbC5kYXRhX2dpZF9wbikKLQkJbWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItPnBvb2wuZGF0YV9naWRfcG4pOworCS8qIHpmY3BfZGF0YS5jb25maWdfbXV0ZXggbXVzdCBiZSBoZWxkICovCisJaWYgKGFkYXB0ZXItPnBvb2wuZXJwX3JlcSkKKwkJbWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CisJaWYgKGFkYXB0ZXItPnBvb2wuc2NzaV9yZXEpCisJCW1lbXBvb2xfZGVzdHJveShhZGFwdGVyLT5wb29sLnNjc2lfcmVxKTsKKwlpZiAoYWRhcHRlci0+cG9vbC5zY3NpX2Fib3J0KQorCQltZW1wb29sX2Rlc3Ryb3koYWRhcHRlci0+cG9vbC5zY3NpX2Fib3J0KTsKKwlpZiAoYWRhcHRlci0+cG9vbC5xdGNiX3Bvb2wpCisJCW1lbXBvb2xfZGVzdHJveShhZGFwdGVyLT5wb29sLnF0Y2JfcG9vbCk7CisJaWYgKGFkYXB0ZXItPnBvb2wuc3RhdHVzX3JlYWRfcmVxKQorCQltZW1wb29sX2Rlc3Ryb3koYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9yZXEpOworCWlmIChhZGFwdGVyLT5wb29sLnN0YXR1c19yZWFkX2RhdGEpCisJCW1lbXBvb2xfZGVzdHJveShhZGFwdGVyLT5wb29sLnN0YXR1c19yZWFkX2RhdGEpOworCWlmIChhZGFwdGVyLT5wb29sLmdpZF9wbl9kYXRhKQorCQltZW1wb29sX2Rlc3Ryb3koYWRhcHRlci0+cG9vbC5naWRfcG5fZGF0YSk7CiB9CiAKIC8qKgpAQCAtNDE4LDcgKzQzNCw3IEBACiBpbnQgemZjcF9zdGF0dXNfcmVhZF9yZWZpbGwoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl3aGlsZSAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXRfbWlzcykgPiAwKQotCQlpZiAoemZjcF9mc2Zfc3RhdHVzX3JlYWQoYWRhcHRlcikpIHsKKwkJaWYgKHpmY3BfZnNmX3N0YXR1c19yZWFkKGFkYXB0ZXItPnFkaW8pKSB7CiAJCQlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXRfbWlzcykgPj0gMTYpIHsKIAkJCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiYXhzcmVmMSIsCiAJCQkJCQkJTlVMTCk7CkBAIC00NDYsNiArNDYyLDI3IEBACiAJCSAgIGFkYXB0ZXItPmZzZl9saWNfdmVyc2lvbik7CiB9CiAKK3N0YXRpYyBpbnQgemZjcF9zZXR1cF9hZGFwdGVyX3dvcmtfcXVldWUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3sKKwljaGFyIG5hbWVbVEFTS19DT01NX0xFTl07CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJ6ZmNwX3FfJXMiLAorCQkgZGV2X25hbWUoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOworCWFkYXB0ZXItPndvcmtfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShuYW1lKTsKKworCWlmIChhZGFwdGVyLT53b3JrX3F1ZXVlKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgemZjcF9kZXN0cm95X2FkYXB0ZXJfd29ya19xdWV1ZShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT53b3JrX3F1ZXVlKQorCQlkZXN0cm95X3dvcmtxdWV1ZShhZGFwdGVyLT53b3JrX3F1ZXVlKTsKKwlhZGFwdGVyLT53b3JrX3F1ZXVlID0gTlVMTDsKKworfQorCiAvKioKICAqIHpmY3BfYWRhcHRlcl9lbnF1ZXVlIC0gZW5xdWV1ZSBhIG5ldyBhZGFwdGVyIHRvIHRoZSBsaXN0CiAgKiBAY2N3X2RldmljZTogcG9pbnRlciB0byB0aGUgc3RydWN0IGNjX2RldmljZQpAQCAtNDU1LDcgKzQ5Miw3IEBACiAgKiBFbnF1ZXVlcyBhbiBhZGFwdGVyIGF0IHRoZSBlbmQgb2YgdGhlIGFkYXB0ZXIgbGlzdCBpbiB0aGUgZHJpdmVyIGRhdGEuCiAgKiBBbGwgYWRhcHRlciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFyZSBzZXQgdXAuCiAgKiBQcm9jLWZzIGVudHJpZXMgYXJlIGFsc28gY3JlYXRlZC4KLSAqIGxvY2tzOgljb25maWdfc2VtYSBtdXN0IGJlIGhlbGQgdG8gc2VyaWFsaXNlIGNoYW5nZXMgdG8gdGhlIGFkYXB0ZXIgbGlzdAorICogbG9ja3M6IGNvbmZpZ19tdXRleCBtdXN0IGJlIGhlbGQgdG8gc2VyaWFsaXplIGNoYW5nZXMgdG8gdGhlIGFkYXB0ZXIgbGlzdAogICovCiBpbnQgemZjcF9hZGFwdGVyX2VucXVldWUoc3RydWN0IGNjd19kZXZpY2UgKmNjd19kZXZpY2UpCiB7CkBAIC00NjMsMzcgKzUwMCwzNyBAQAogCiAJLyoKIAkgKiBOb3RlOiBJdCBpcyBzYWZlIHRvIHJlbGVhc2UgdGhlIGxpc3RfbG9jaywgYXMgYW55IGxpc3QgY2hhbmdlcwotCSAqIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIGNvbmZpZ19zZW1hLCB3aGljaCBtdXN0IGJlIGhlbGQgdG8gZ2V0IGhlcmUKKwkgKiBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBjb25maWdfbXV0ZXgsIHdoaWNoIG11c3QgYmUgaGVsZCB0byBnZXQgaGVyZQogCSAqLwogCiAJYWRhcHRlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6ZmNwX2FkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFkYXB0ZXIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JYWRhcHRlci0+Z3MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgemZjcF93a2FfcG9ydHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFkYXB0ZXItPmdzKSB7Ci0JCWtmcmVlKGFkYXB0ZXIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KIAljY3dfZGV2aWNlLT5oYW5kbGVyID0gTlVMTDsKIAlhZGFwdGVyLT5jY3dfZGV2aWNlID0gY2N3X2RldmljZTsKIAlhdG9taWNfc2V0KCZhZGFwdGVyLT5yZWZjb3VudCwgMCk7CiAKLQlpZiAoemZjcF9xZGlvX2FsbG9jYXRlKGFkYXB0ZXIpKQotCQlnb3RvIHFkaW9fYWxsb2NhdGVfZmFpbGVkOworCWlmICh6ZmNwX3FkaW9fc2V0dXAoYWRhcHRlcikpCisJCWdvdG8gcWRpb19mYWlsZWQ7CiAKIAlpZiAoemZjcF9hbGxvY2F0ZV9sb3dfbWVtX2J1ZmZlcnMoYWRhcHRlcikpCi0JCWdvdG8gZmFpbGVkX2xvd19tZW1fYnVmZmVyczsKKwkJZ290byBsb3dfbWVtX2J1ZmZlcnNfZmFpbGVkOwogCiAJaWYgKHpmY3BfcmVxbGlzdF9hbGxvYyhhZGFwdGVyKSkKLQkJZ290byBmYWlsZWRfbG93X21lbV9idWZmZXJzOworCQlnb3RvIGxvd19tZW1fYnVmZmVyc19mYWlsZWQ7CiAKLQlpZiAoemZjcF9hZGFwdGVyX2RlYnVnX3JlZ2lzdGVyKGFkYXB0ZXIpKQorCWlmICh6ZmNwX2RiZl9hZGFwdGVyX3JlZ2lzdGVyKGFkYXB0ZXIpKQogCQlnb3RvIGRlYnVnX3JlZ2lzdGVyX2ZhaWxlZDsKIAorCWlmICh6ZmNwX3NldHVwX2FkYXB0ZXJfd29ya19xdWV1ZShhZGFwdGVyKSkKKwkJZ290byB3b3JrX3F1ZXVlX2ZhaWxlZDsKKworCWlmICh6ZmNwX2ZjX2dzX3NldHVwKGFkYXB0ZXIpKQorCQlnb3RvIGdlbmVyaWNfc2VydmljZXNfZmFpbGVkOworCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYWRhcHRlci0+cmVtb3ZlX3dxKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhZGFwdGVyLT5lcnBfdGhyZWFkX3dxaCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmYWRhcHRlci0+ZXJwX3JlYWR5X3dxKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhZGFwdGVyLT5lcnBfZG9uZV93cWgpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkKTsKQEAgLTUwMiwyMCArNTM5LDE0IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7CiAKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+aGJhX2RiZl9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+c2FuX2RiZl9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+c2NzaV9kYmZfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnJlY19kYmZfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnJlcV9xX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5xZGlvX3N0YXRfbG9jayk7Ci0KIAlyd2xvY2tfaW5pdCgmYWRhcHRlci0+ZXJwX2xvY2spOwogCXJ3bG9ja19pbml0KCZhZGFwdGVyLT5hYm9ydF9sb2NrKTsKIAotCXNlbWFfaW5pdCgmYWRhcHRlci0+ZXJwX3JlYWR5X3NlbSwgMCk7CisJaWYgKHpmY3BfZXJwX3RocmVhZF9zZXR1cChhZGFwdGVyKSkKKwkJZ290byBlcnBfdGhyZWFkX2ZhaWxlZDsKIAogCUlOSVRfV09SSygmYWRhcHRlci0+c3RhdF93b3JrLCBfemZjcF9zdGF0dXNfcmVhZF9zY2hlZHVsZXIpOwotCUlOSVRfV09SSygmYWRhcHRlci0+c2Nhbl93b3JrLCBfemZjcF9zY2FuX3BvcnRzX2xhdGVyKTsKKwlJTklUX1dPUksoJmFkYXB0ZXItPnNjYW5fd29yaywgX3pmY3BfZmNfc2Nhbl9wb3J0c19sYXRlcik7CiAKIAlhZGFwdGVyLT5zZXJ2aWNlX2xldmVsLnNlcV9wcmludCA9IHpmY3BfcHJpbnRfc2w7CiAKQEAgLTUyOSwyMCArNTYwLDI1IEBACiAJCWdvdG8gc3lzZnNfZmFpbGVkOwogCiAJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX1JFTU9WRSwgJmFkYXB0ZXItPnN0YXR1cyk7Ci0JemZjcF9mY193a2FfcG9ydHNfaW5pdChhZGFwdGVyKTsKIAogCWlmICghemZjcF9hZGFwdGVyX3Njc2lfcmVnaXN0ZXIoYWRhcHRlcikpCiAJCXJldHVybiAwOwogCiBzeXNmc19mYWlsZWQ6Ci0JemZjcF9hZGFwdGVyX2RlYnVnX3VucmVnaXN0ZXIoYWRhcHRlcik7CisJemZjcF9lcnBfdGhyZWFkX2tpbGwoYWRhcHRlcik7CitlcnBfdGhyZWFkX2ZhaWxlZDoKKwl6ZmNwX2ZjX2dzX2Rlc3Ryb3koYWRhcHRlcik7CitnZW5lcmljX3NlcnZpY2VzX2ZhaWxlZDoKKwl6ZmNwX2Rlc3Ryb3lfYWRhcHRlcl93b3JrX3F1ZXVlKGFkYXB0ZXIpOword29ya19xdWV1ZV9mYWlsZWQ6CisJemZjcF9kYmZfYWRhcHRlcl91bnJlZ2lzdGVyKGFkYXB0ZXItPmRiZik7CiBkZWJ1Z19yZWdpc3Rlcl9mYWlsZWQ6CiAJZGV2X3NldF9kcnZkYXRhKCZjY3dfZGV2aWNlLT5kZXYsIE5VTEwpOwogCWtmcmVlKGFkYXB0ZXItPnJlcV9saXN0KTsKLWZhaWxlZF9sb3dfbWVtX2J1ZmZlcnM6Citsb3dfbWVtX2J1ZmZlcnNfZmFpbGVkOgogCXpmY3BfZnJlZV9sb3dfbWVtX2J1ZmZlcnMoYWRhcHRlcik7Ci1xZGlvX2FsbG9jYXRlX2ZhaWxlZDoKLQl6ZmNwX3FkaW9fZnJlZShhZGFwdGVyKTsKK3FkaW9fZmFpbGVkOgorCXpmY3BfcWRpb19kZXN0cm95KGFkYXB0ZXItPnFkaW8pOwogCWtmcmVlKGFkYXB0ZXIpOwogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtNTU5LDYgKzU5NSw3IEBACiAKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zY2FuX3dvcmspOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnN0YXRfd29yayk7CisJemZjcF9mY193a2FfcG9ydHNfZm9yY2Vfb2ZmbGluZShhZGFwdGVyLT5ncyk7CiAJemZjcF9hZGFwdGVyX3Njc2lfdW5yZWdpc3RlcihhZGFwdGVyKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldi5rb2JqLAogCQkJICAgJnpmY3Bfc3lzZnNfYWRhcHRlcl9hdHRycyk7CkBAIC01NzAsMTMgKzYwNywxNSBAQAogCWlmICghcmV0dmFsKQogCQlyZXR1cm47CiAKLQl6ZmNwX2FkYXB0ZXJfZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyKTsKLQl6ZmNwX3FkaW9fZnJlZShhZGFwdGVyKTsKKwl6ZmNwX2ZjX2dzX2Rlc3Ryb3koYWRhcHRlcik7CisJemZjcF9lcnBfdGhyZWFkX2tpbGwoYWRhcHRlcik7CisJemZjcF9kZXN0cm95X2FkYXB0ZXJfd29ya19xdWV1ZShhZGFwdGVyKTsKKwl6ZmNwX2RiZl9hZGFwdGVyX3VucmVnaXN0ZXIoYWRhcHRlci0+ZGJmKTsKIAl6ZmNwX2ZyZWVfbG93X21lbV9idWZmZXJzKGFkYXB0ZXIpOworCXpmY3BfcWRpb19kZXN0cm95KGFkYXB0ZXItPnFkaW8pOwogCWtmcmVlKGFkYXB0ZXItPnJlcV9saXN0KTsKIAlrZnJlZShhZGFwdGVyLT5mY19zdGF0cyk7CiAJa2ZyZWUoYWRhcHRlci0+c3RhdHNfcmVzZXRfZGF0YSk7Ci0Ja2ZyZWUoYWRhcHRlci0+Z3MpOwogCWtmcmVlKGFkYXB0ZXIpOwogfQogCkBAIC01OTIsNyArNjMxLDcgQEAKICAqIEBzdGF0dXM6IGluaXRpYWwgc3RhdHVzIGZvciB0aGUgcG9ydAogICogQGRfaWQ6IGRlc3RpbmF0aW9uIGlkIG9mIHRoZSByZW1vdGUgcG9ydCB0byBiZSBlbnF1ZXVlZAogICogUmV0dXJuczogcG9pbnRlciB0byBlbnF1ZXVlZCBwb3J0IG9uIHN1Y2Nlc3MsIEVSUl9QVFIgb24gZXJyb3IKLSAqIExvY2tzOiBjb25maWdfc2VtYSBtdXN0IGJlIGhlbGQgdG8gc2VyaWFsaXplIGNoYW5nZXMgdG8gdGhlIHBvcnQgbGlzdAorICogTG9ja3M6IGNvbmZpZ19tdXRleCBtdXN0IGJlIGhlbGQgdG8gc2VyaWFsaXplIGNoYW5nZXMgdG8gdGhlIHBvcnQgbGlzdAogICoKICAqIEFsbCBwb3J0IGludGVybmFsIHN0cnVjdHVyZXMgYXJlIHNldCB1cCBhbmQgdGhlIHN5c2ZzIGVudHJ5IGlzIGdlbmVyYXRlZC4KICAqIGRfaWQgaXMgdXNlZCB0byBlbnF1ZXVlIHBvcnRzIHdpdGggYSB3ZWxsIGtub3duIGFkZHJlc3MgbGlrZSB0aGUgRGlyZWN0b3J5CkBAIC02MDIsNyArNjQxLDEzIEBACiAJCQkJICAgICB1MzIgc3RhdHVzLCB1MzIgZF9pZCkKIHsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwotCWludCByZXR2YWw7CisKKwlyZWFkX2xvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOworCWlmICh6ZmNwX2dldF9wb3J0X2J5X3d3cG4oYWRhcHRlciwgd3dwbikpIHsKKwkJcmVhZF91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisJcmVhZF91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwogCiAJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6ZmNwX3BvcnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBvcnQpCkBAIC02MTAsNyArNjU1LDcgQEAKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPnJlbW92ZV93cSk7CiAJSU5JVF9MSVNUX0hFQUQoJnBvcnQtPnVuaXRfbGlzdF9oZWFkKTsKLQlJTklUX1dPUksoJnBvcnQtPmdpZF9wbl93b3JrLCB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X29wZW5fbG9va3VwKTsKKwlJTklUX1dPUksoJnBvcnQtPmdpZF9wbl93b3JrLCB6ZmNwX2ZjX3BvcnRfZGlkX2xvb2t1cCk7CiAJSU5JVF9XT1JLKCZwb3J0LT50ZXN0X2xpbmtfd29yaywgemZjcF9mY19saW5rX3Rlc3Rfd29yayk7CiAJSU5JVF9XT1JLKCZwb3J0LT5ycG9ydF93b3JrLCB6ZmNwX3Njc2lfcnBvcnRfd29yayk7CiAKQEAgLTYyMywyOSArNjY4LDI0IEBACiAJYXRvbWljX3NldF9tYXNrKHN0YXR1cyB8IFpGQ1BfU1RBVFVTX0NPTU1PTl9SRU1PVkUsICZwb3J0LT5zdGF0dXMpOwogCWF0b21pY19zZXQoJnBvcnQtPnJlZmNvdW50LCAwKTsKIAotCWRldl9zZXRfbmFtZSgmcG9ydC0+c3lzZnNfZGV2aWNlLCAiMHglMDE2bGx4IiwKLQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXd3cG4pOworCWlmIChkZXZfc2V0X25hbWUoJnBvcnQtPnN5c2ZzX2RldmljZSwgIjB4JTAxNmxseCIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyl3d3BuKSkgeworCQlrZnJlZShwb3J0KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQogCXBvcnQtPnN5c2ZzX2RldmljZS5wYXJlbnQgPSAmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2OwotCiAJcG9ydC0+c3lzZnNfZGV2aWNlLnJlbGVhc2UgPSB6ZmNwX3N5c2ZzX3BvcnRfcmVsZWFzZTsKIAlkZXZfc2V0X2RydmRhdGEoJnBvcnQtPnN5c2ZzX2RldmljZSwgcG9ydCk7CiAKLQlyZWFkX2xvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwotCWlmICh6ZmNwX2dldF9wb3J0X2J5X3d3cG4oYWRhcHRlciwgd3dwbikpIHsKLQkJcmVhZF91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwotCQlnb3RvIGVycl9vdXRfZnJlZTsKKwlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZwb3J0LT5zeXNmc19kZXZpY2UpKSB7CisJCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KLQlyZWFkX3VubG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CiAKLQlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZwb3J0LT5zeXNmc19kZXZpY2UpKQotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcG9ydC0+c3lzZnNfZGV2aWNlLmtvYmosCi0JCQkJICAgICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOwotCi0JaWYgKHJldHZhbCkgeworCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJnBvcnQtPnN5c2ZzX2RldmljZS5rb2JqLAorCQkJICAgICAgICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpKSB7CiAJCWRldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5zeXNmc19kZXZpY2UpOwotCQlnb3RvIGVycl9vdXQ7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAogCXpmY3BfcG9ydF9nZXQocG9ydCk7CkBAIC02NTksMTEgKzY5OSw2IEBACiAKIAl6ZmNwX2FkYXB0ZXJfZ2V0KGFkYXB0ZXIpOwogCXJldHVybiBwb3J0OwotCi1lcnJfb3V0X2ZyZWU6Ci0Ja2ZyZWUocG9ydCk7Ci1lcnJfb3V0OgotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCiAvKioKQEAgLTY3MiwxMiArNzA3LDExIEBACiAgKi8KIHZvaWQgemZjcF9wb3J0X2RlcXVldWUoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKIHsKLQl3YWl0X2V2ZW50KHBvcnQtPnJlbW92ZV93cSwgYXRvbWljX3JlYWQoJnBvcnQtPnJlZmNvdW50KSA9PSAwKTsKIAl3cml0ZV9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKIAlsaXN0X2RlbCgmcG9ydC0+bGlzdCk7CiAJd3JpdGVfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKLQlpZiAocG9ydC0+cnBvcnQpCi0JCXBvcnQtPnJwb3J0LT5kZF9kYXRhID0gTlVMTDsKKwl3YWl0X2V2ZW50KHBvcnQtPnJlbW92ZV93cSwgYXRvbWljX3JlYWQoJnBvcnQtPnJlZmNvdW50KSA9PSAwKTsKKwljYW5jZWxfd29ya19zeW5jKCZwb3J0LT5ycG9ydF93b3JrKTsgLyogdXN1YWxseSBub3QgbmVjZXNzYXJ5ICovCiAJemZjcF9hZGFwdGVyX3B1dChwb3J0LT5hZGFwdGVyKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBvcnQtPnN5c2ZzX2RldmljZS5rb2JqLCAmemZjcF9zeXNmc19wb3J0X2F0dHJzKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+c3lzZnNfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCmluZGV4IGQ5ZGE1YzQuLjBjOTBmOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwpAQCAtMTgsMTIgKzE4LDE1IEBACiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2Rldi0+ZGV2KTsKIAotCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJaWYgKCFhZGFwdGVyKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCiAJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiY2NzdXNwMSIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAKLQl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKKwltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMyw2ICszNiw5IEBACiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2Rldi0+ZGV2KTsKIAorCWlmICghYWRhcHRlcikKKwkJcmV0dXJuIDA7CisKIAl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgImNjcmVzdTEiLCBOVUxMLAogCQkJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fUlVOTklORywgWkZDUF9TRVQpOwogCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELApAQCAtNjMsMjUgKzY5LDE0IEBACiAgKiB6ZmNwX2Njd19wcm9iZSAtIHByb2JlIGZ1bmN0aW9uIG9mIHpmY3AgZHJpdmVyCiAgKiBAY2N3X2RldmljZTogcG9pbnRlciB0byBiZWxvbmdpbmcgY2N3IGRldmljZQogICoKLSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgdGhlIGNvbW1vbiBpL28gbGF5ZXIgYW5kIHNldHMgdXAgdGhlIGluaXRpYWwKLSAqIGRhdGEgc3RydWN0dXJlcyBmb3IgZWFjaCBmY3AgYWRhcHRlciwgd2hpY2ggd2FzIGRldGVjdGVkIGJ5IHRoZSBzeXN0ZW0uCi0gKiBBbHNvIHRoZSBzeXNmcyBmaWxlcyBmb3IgdGhpcyBhZGFwdGVyIHdpbGwgYmUgY3JlYXRlZCBieSB0aGlzIGZ1bmN0aW9uLgotICogSW4gYWRkaXRpb24gdGhlIG5hbWVzZXJ2ZXIgcG9ydCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwb3J0cyBvZiB0aGUgYWRhcHRlcgotICogYW5kIGl0cyBzeXNmcyByZXByZXNlbnRhdGlvbiB3aWxsIGJlIGNyZWF0ZWQgdG9vLgorICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSB0aGUgY29tbW9uIGkvbyBsYXllciBmb3IgZWFjaCBGQ1AKKyAqIGRldmljZSBmb3VuZCBvbiB0aGUgY3VycmVudCBzeXN0ZW0uIFRoaXMgaXMgb25seSBhIHN0dWIgdG8gbWFrZSBjaW8KKyAqIHdvcms6IFRvIG9ubHkgYWxsb2NhdGUgYWRhcHRlciByZXNvdXJjZXMgZm9yIGRldmljZXMgYWN0dWFsbHkgdXNlZCwKKyAqIHRoZSBhbGxvY2F0aW9uIGlzIGRlZmVycmVkIHRvIHRoZSBmaXJzdCBjYWxsIHRvIGNjd19zZXRfb25saW5lLgogICovCiBzdGF0aWMgaW50IHpmY3BfY2N3X3Byb2JlKHN0cnVjdCBjY3dfZGV2aWNlICpjY3dfZGV2aWNlKQogewotCWludCByZXR2YWwgPSAwOwotCi0JZG93bigmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKLQlpZiAoemZjcF9hZGFwdGVyX2VucXVldWUoY2N3X2RldmljZSkpIHsKLQkJZGV2X2VycigmY2N3X2RldmljZS0+ZGV2LAotCQkJIlNldHRpbmcgdXAgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgIgotCQkJIkZDUCBhZGFwdGVyIGZhaWxlZFxuIik7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JfQotCXVwKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOwotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTAyLDggKzk3LDExIEBACiAJTElTVF9IRUFEKHBvcnRfcmVtb3ZlX2xoKTsKIAogCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoY2N3X2RldmljZSk7Ci0JZG93bigmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKKworCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd19kZXZpY2UtPmRldik7CisJaWYgKCFhZGFwdGVyKQorCQlnb3RvIG91dDsKIAogCXdyaXRlX2xvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCBwLCAmYWRhcHRlci0+cG9ydF9saXN0X2hlYWQsIGxpc3QpIHsKQEAgLTEyOSwyOSArMTI3LDQxIEBACiAJd2FpdF9ldmVudChhZGFwdGVyLT5yZW1vdmVfd3EsIGF0b21pY19yZWFkKCZhZGFwdGVyLT5yZWZjb3VudCkgPT0gMCk7CiAJemZjcF9hZGFwdGVyX2RlcXVldWUoYWRhcHRlcik7CiAKLQl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKK291dDoKKwltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogfQogCiAvKioKICAqIHpmY3BfY2N3X3NldF9vbmxpbmUgLSBzZXRfb25saW5lIGZ1bmN0aW9uIG9mIHpmY3AgZHJpdmVyCiAgKiBAY2N3X2RldmljZTogcG9pbnRlciB0byBiZWxvbmdpbmcgY2N3IGRldmljZQogICoKLSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgdGhlIGNvbW1vbiBpL28gbGF5ZXIgYW5kIHNldHMgYW4gYWRhcHRlcgotICogaW50byBzdGF0ZSBvbmxpbmUuIFNldHRpbmcgYW4gZmNwIGRldmljZSBvbmxpbmUgbWVhbnMgdGhhdCBpdCB3aWxsIGJlCi0gKiByZWdpc3RlcmVkIHdpdGggdGhlIFNDU0kgc3RhY2ssIHRoYXQgdGhlIFFESU8gcXVldWVzIHdpbGwgYmUgc2V0IHVwCi0gKiBhbmQgdGhhdCB0aGUgYWRhcHRlciB3aWxsIGJlIG9wZW5lZCAoYXN5bmNocm9ub3VzbHkpLgorICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSB0aGUgY29tbW9uIGkvbyBsYXllciBhbmQgc2V0cyBhbgorICogYWRhcHRlciBpbnRvIHN0YXRlIG9ubGluZS4gIFRoZSBmaXJzdCBjYWxsIHdpbGwgYWxsb2NhdGUgYWxsCisgKiBhZGFwdGVyIHJlc291cmNlcyB0aGF0IHdpbGwgYmUgcmV0YWluZWQgdW50aWwgdGhlIGRldmljZSBpcyByZW1vdmVkCisgKiB2aWEgemZjcF9jY3dfcmVtb3ZlLgorICoKKyAqIFNldHRpbmcgYW4gZmNwIGRldmljZSBvbmxpbmUgbWVhbnMgdGhhdCBpdCB3aWxsIGJlIHJlZ2lzdGVyZWQgd2l0aAorICogdGhlIFNDU0kgc3RhY2ssIHRoYXQgdGhlIFFESU8gcXVldWVzIHdpbGwgYmUgc2V0IHVwIGFuZCB0aGF0IHRoZQorICogYWRhcHRlciB3aWxsIGJlIG9wZW5lZC4KICAqLwogc3RhdGljIGludCB6ZmNwX2Njd19zZXRfb25saW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjY3dfZGV2aWNlKQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0ID0gMDsKIAotCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2N3X2RldmljZS0+ZGV2KTsKIAotCXJldHZhbCA9IHpmY3BfZXJwX3RocmVhZF9zZXR1cChhZGFwdGVyKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIG91dDsKKwlpZiAoIWFkYXB0ZXIpIHsKKwkJcmV0ID0gemZjcF9hZGFwdGVyX2VucXVldWUoY2N3X2RldmljZSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJmNjd19kZXZpY2UtPmRldiwKKwkJCQkiU2V0dGluZyB1cCBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSAiCisJCQkJIkZDUCBhZGFwdGVyIGZhaWxlZFxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjY3dfZGV2aWNlLT5kZXYpOworCX0KIAogCS8qIGluaXRpYWxpemUgcmVxdWVzdCBjb3VudGVyICovCiAJQlVHX09OKCF6ZmNwX3JlcWxpc3RfaXNlbXB0eShhZGFwdGVyKSk7CkBAIC0xNjIsMTMgKzE3MiwxMSBAQAogCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVELAogCQkJCSJjY3NvbmwyIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKLQl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKLQlmbHVzaF93b3JrKCZhZGFwdGVyLT5zY2FuX3dvcmspOwotCXJldHVybiAwOwotCi0gb3V0OgotCXVwKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOwotCXJldHVybiByZXR2YWw7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKKwlpZiAoIXJldCkKKwkJZmx1c2hfd29yaygmYWRhcHRlci0+c2Nhbl93b3JrKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTE4MiwxMiArMTkwLDE1IEBACiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcjsKIAotCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2N3X2RldmljZS0+ZGV2KTsKKwlpZiAoIWFkYXB0ZXIpCisJCWdvdG8gb3V0OworCiAJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiY2Nzb2ZmMSIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7Ci0JemZjcF9lcnBfdGhyZWFkX2tpbGwoYWRhcHRlcik7Ci0JdXAoJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKK291dDoKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQwLDExICsyNTEsMTIgQEAKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyOwogCi0JZG93bigmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKKwltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjZGV2LT5kZXYpOwogCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImNjc2h1dDEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwotCXVwKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOworCXpmY3BfZXJwX3RocmVhZF9raWxsKGFkYXB0ZXIpOworCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2N3X2RyaXZlciB6ZmNwX2Njd19kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYwppbmRleCBiOTliODdjLi4yMTViNzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogRGVidWcgdHJhY2VzIGZvciB6ZmNwLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOAorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiemZjcCIKQEAgLTExLDYgKzExLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CisjaW5jbHVkZSAiemZjcF9kYmYuaCIKICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgogCiBzdGF0aWMgdTMyIGRiZnNpemUgPSA0OwpAQCAtMzcsMTkgKzM4LDYgQEAKIAl9CiB9CiAKLS8qIEZJWE1FOiB0aGlzIGR1cGxpY2F0ZSB0aGlzIGNvZGUgaW4gczM5MCBkZWJ1ZyBmZWF0dXJlICovCi1zdGF0aWMgdm9pZCB6ZmNwX2RiZl90aW1lc3RhbXAodW5zaWduZWQgbG9uZyBsb25nIHN0Y2ssIHN0cnVjdCB0aW1lc3BlYyAqdGltZSkKLXsKLQl1bnNpZ25lZCBsb25nIGxvbmcgc2VjOwotCi0Jc3RjayAtPSAweDgxMjZkNjBlNDYwMDAwMDBMTCAtICgweDNjMjY3MDBMTCAqIDEwMDAwMDAgKiA0MDk2KTsKLQlzZWMgPSBzdGNrID4+IDEyOwotCWRvX2RpdihzZWMsIDEwMDAwMDApOwotCXRpbWUtPnR2X3NlYyA9IHNlYzsKLQlzdGNrIC09IChzZWMgKiAxMDAwMDAwKSA8PCAxMjsKLQl0aW1lLT50dl9uc2VjID0gKChzdGNrICogMTAwMCkgPj4gMTIpOwotfQotCiBzdGF0aWMgdm9pZCB6ZmNwX2RiZl90YWcoY2hhciAqKnAsIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBjaGFyICp0YWcpCiB7CiAJaW50IGk7CkBAIC0xMDYsNyArOTQsNyBAQAogCWNoYXIgKnAgPSBvdXRfYnVmOwogCiAJaWYgKHN0cm5jbXAoZHVtcC0+dGFnLCAiZHVtcCIsIFpGQ1BfREJGX1RBR19TSVpFKSAhPSAwKSB7Ci0JCXpmY3BfZGJmX3RpbWVzdGFtcChlbnRyeS0+aWQuc3RjaywgJnQpOworCQlzdGNrX3RvX3RpbWVzcGVjKGVudHJ5LT5pZC5zdGNrLCAmdCk7CiAJCXpmY3BfZGJmX291dCgmcCwgInRpbWVzdGFtcCIsICIlMDExbHU6JTA2bHUiLAogCQkJICAgICB0LnR2X3NlYywgdC50dl9uc2VjKTsKIAkJemZjcF9kYmZfb3V0KCZwLCAiY3B1IiwgIiUwMmkiLCBlbnRyeS0+aWQuZmllbGRzLmNwdWlkKTsKQEAgLTExOSwxMyArMTA3LDEwIEBACiAJcmV0dXJuIHAgLSBvdXRfYnVmOwogfQogCi0vKioKLSAqIHpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfcmVzcG9uc2UgLSB0cmFjZSBldmVudCBmb3IgcmVxdWVzdCBjb21wbGV0aW9uCi0gKiBAZnNmX3JlcTogcmVxdWVzdCB0aGF0IGhhcyBiZWVuIGNvbXBsZXRlZAotICovCi12b2lkIHpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3ZvaWQgX3pmY3BfZGJmX2hiYV9mc2ZfcmVzcG9uc2UoY29uc3QgY2hhciAqdGFnMiwgaW50IGxldmVsLAorCQkJCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsCisJCQkJc3RydWN0IHpmY3BfZGJmICpkYmYpCiB7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7CiAJc3RydWN0IGZzZl9xdGNiICpxdGNiID0gZnNmX3JlcS0+cXRjYjsKIAl1bmlvbiBmc2ZfcHJvdF9zdGF0dXNfcXVhbCAqcHJvdF9zdGF0dXNfcXVhbCA9CiAJCQkJCSZxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbDsKQEAgLTEzNCwzMyArMTE5LDE0IEBACiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwogCXN0cnVjdCB6ZmNwX3NlbmRfZWxzICpzZW5kX2VsczsKLQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCAqcmVjID0gJmFkYXB0ZXItPmhiYV9kYmZfYnVmOwotCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3Jlc3BvbnNlICpyZXNwb25zZSA9ICZyZWMtPnUucmVzcG9uc2U7Ci0JaW50IGxldmVsOworCXN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkICpyZWMgPSAmZGJmLT5oYmFfYnVmOworCXN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkX3Jlc3BvbnNlICpyZXNwb25zZSA9ICZyZWMtPnUucmVzcG9uc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5oYmFfbG9jaywgZmxhZ3MpOwogCW1lbXNldChyZWMsIDAsIHNpemVvZigqcmVjKSk7CiAJc3RybmNweShyZWMtPnRhZywgInJlc3AiLCBaRkNQX0RCRl9UQUdfU0laRSk7Ci0KLQlpZiAoKHF0Y2ItPnByZWZpeC5wcm90X3N0YXR1cyAhPSBGU0ZfUFJPVF9HT09EKSAmJgotCSAgICAocXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzICE9IEZTRl9QUk9UX0ZTRl9TVEFUVVNfUFJFU0VOVEVEKSkgewotCQlzdHJuY3B5KHJlYy0+dGFnMiwgInBlcnIiLCBaRkNQX0RCRl9UQUdfU0laRSk7Ci0JCWxldmVsID0gMTsKLQl9IGVsc2UgaWYgKHF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzICE9IEZTRl9HT09EKSB7Ci0JCXN0cm5jcHkocmVjLT50YWcyLCAiZmVyciIsIFpGQ1BfREJGX1RBR19TSVpFKTsKLQkJbGV2ZWwgPSAxOwotCX0gZWxzZSBpZiAoKGZzZl9yZXEtPmZzZl9jb21tYW5kID09IEZTRl9RVENCX09QRU5fUE9SVF9XSVRIX0RJRCkgfHwKLQkJICAgKGZzZl9yZXEtPmZzZl9jb21tYW5kID09IEZTRl9RVENCX09QRU5fTFVOKSkgewotCQlzdHJuY3B5KHJlYy0+dGFnMiwgIm9wZW4iLCBaRkNQX0RCRl9UQUdfU0laRSk7Ci0JCWxldmVsID0gNDsKLQl9IGVsc2UgaWYgKHF0Y2ItPmhlYWRlci5sb2dfbGVuZ3RoKSB7Ci0JCXN0cm5jcHkocmVjLT50YWcyLCAicXRjYiIsIFpGQ1BfREJGX1RBR19TSVpFKTsKLQkJbGV2ZWwgPSA1OwotCX0gZWxzZSB7Ci0JCXN0cm5jcHkocmVjLT50YWcyLCAibm9ybSIsIFpGQ1BfREJGX1RBR19TSVpFKTsKLQkJbGV2ZWwgPSA2OwotCX0KKwlzdHJuY3B5KHJlYy0+dGFnMiwgdGFnMiwgWkZDUF9EQkZfVEFHX1NJWkUpOwogCiAJcmVzcG9uc2UtPmZzZl9jb21tYW5kID0gZnNmX3JlcS0+ZnNmX2NvbW1hbmQ7CiAJcmVzcG9uc2UtPmZzZl9yZXFpZCA9IGZzZl9yZXEtPnJlcV9pZDsKQEAgLTE3Myw5ICsxMzksOSBAQAogCW1lbWNweShyZXNwb25zZS0+ZnNmX3N0YXR1c19xdWFsLAogCSAgICAgICBmc2Zfc3RhdHVzX3F1YWwsIEZTRl9TVEFUVVNfUVVBTElGSUVSX1NJWkUpOwogCXJlc3BvbnNlLT5mc2ZfcmVxX3N0YXR1cyA9IGZzZl9yZXEtPnN0YXR1czsKLQlyZXNwb25zZS0+c2JhbF9maXJzdCA9IGZzZl9yZXEtPnNiYWxfZmlyc3Q7Ci0JcmVzcG9uc2UtPnNiYWxfbGFzdCA9IGZzZl9yZXEtPnNiYWxfbGFzdDsKLQlyZXNwb25zZS0+c2JhbF9yZXNwb25zZSA9IGZzZl9yZXEtPnNiYWxfcmVzcG9uc2U7CisJcmVzcG9uc2UtPnNiYWxfZmlyc3QgPSBmc2ZfcmVxLT5xdWV1ZV9yZXEuc2JhbF9maXJzdDsKKwlyZXNwb25zZS0+c2JhbF9sYXN0ID0gZnNmX3JlcS0+cXVldWVfcmVxLnNiYWxfbGFzdDsKKwlyZXNwb25zZS0+c2JhbF9yZXNwb25zZSA9IGZzZl9yZXEtPnF1ZXVlX3JlcS5zYmFsX3Jlc3BvbnNlOwogCXJlc3BvbnNlLT5wb29sID0gZnNmX3JlcS0+cG9vbCAhPSBOVUxMOwogCXJlc3BvbnNlLT5lcnBfYWN0aW9uID0gKHVuc2lnbmVkIGxvbmcpZnNmX3JlcS0+ZXJwX2FjdGlvbjsKIApAQCAtMjI0LDcgKzE5MCw3IEBACiAJCWJyZWFrOwogCX0KIAotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmhiYV9kYmYsIGxldmVsLCByZWMsIHNpemVvZigqcmVjKSk7CisJZGVidWdfZXZlbnQoZGJmLT5oYmEsIGxldmVsLCByZWMsIHNpemVvZigqcmVjKSk7CiAKIAkvKiBoYXZlIGZjcCBjaGFubmVsIG1pY3JvY29kZSBmaXhlZCB0byB1c2UgYXMgbGl0dGxlIGFzIHBvc3NpYmxlICovCiAJaWYgKGZzZl9yZXEtPmZzZl9jb21tYW5kICE9IEZTRl9RVENCX0ZDUF9DTU5EKSB7CkBAIC0yMzIsMzEgKzE5OCwyNSBAQAogCQljaGFyICpidWYgPSAoY2hhciAqKXF0Y2IgKyBxdGNiLT5oZWFkZXIubG9nX3N0YXJ0OwogCQlpbnQgbGVuID0gcXRjYi0+aGVhZGVyLmxvZ19sZW5ndGg7CiAJCWZvciAoOyBsZW4gJiYgIWJ1ZltsZW4gLSAxXTsgbGVuLS0pOwotCQl6ZmNwX2RiZl9oZXhkdW1wKGFkYXB0ZXItPmhiYV9kYmYsIHJlYywgc2l6ZW9mKCpyZWMpLCBsZXZlbCwKLQkJCQkgYnVmLCBsZW4pOworCQl6ZmNwX2RiZl9oZXhkdW1wKGRiZi0+aGJhLCByZWMsIHNpemVvZigqcmVjKSwgbGV2ZWwsIGJ1ZiwKKwkJCQkgbGVuKTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPmhiYV9sb2NrLCBmbGFncyk7CiB9CiAKLS8qKgotICogemZjcF9oYmFfZGJmX2V2ZW50X2ZzZl91bnNvbCAtIHRyYWNlIGV2ZW50IGZvciBhbiB1bnNvbGljaXRlZCBzdGF0dXMgYnVmZmVyCi0gKiBAdGFnOiB0YWcgaW5kaWNhdGluZyB3aGljaCBraW5kIG9mIHVuc29saWNpdGVkIHN0YXR1cyBoYXMgYmVlbiByZWNlaXZlZAotICogQGFkYXB0ZXI6IGFkYXB0ZXIgdGhhdCBoYXMgaXNzdWVkIHRoZSB1bnNvbGljaXRlZCBzdGF0dXMgYnVmZmVyCi0gKiBAc3RhdHVzX2J1ZmZlcjogYnVmZmVyIGNvbnRhaW5pbmcgcGF5bG9hZCBvZiB1bnNvbGljaXRlZCBzdGF0dXMKLSAqLwotdm9pZCB6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Vuc29sKGNvbnN0IGNoYXIgKnRhZywgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgIHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpzdGF0dXNfYnVmZmVyKQordm9pZCBfemZjcF9kYmZfaGJhX2ZzZl91bnNvbChjb25zdCBjaGFyICp0YWcsIGludCBsZXZlbCwgc3RydWN0IHpmY3BfZGJmICpkYmYsCisJCQkgICAgIHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpzdGF0dXNfYnVmZmVyKQogewotCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkICpyZWMgPSAmYWRhcHRlci0+aGJhX2RiZl9idWY7CisJc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmQgKnJlYyA9ICZkYmYtPmhiYV9idWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5oYmFfbG9jaywgZmxhZ3MpOwogCW1lbXNldChyZWMsIDAsIHNpemVvZigqcmVjKSk7CiAJc3RybmNweShyZWMtPnRhZywgInN0YXQiLCBaRkNQX0RCRl9UQUdfU0laRSk7CiAJc3RybmNweShyZWMtPnRhZzIsIHRhZywgWkZDUF9EQkZfVEFHX1NJWkUpOwogCi0JcmVjLT51LnN0YXR1cy5mYWlsZWQgPSBhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdF9taXNzKTsKKwlyZWMtPnUuc3RhdHVzLmZhaWxlZCA9IGF0b21pY19yZWFkKCZkYmYtPmFkYXB0ZXItPnN0YXRfbWlzcyk7CiAJaWYgKHN0YXR1c19idWZmZXIgIT0gTlVMTCkgewogCQlyZWMtPnUuc3RhdHVzLnN0YXR1c190eXBlID0gc3RhdHVzX2J1ZmZlci0+c3RhdHVzX3R5cGU7CiAJCXJlYy0+dS5zdGF0dXMuc3RhdHVzX3N1YnR5cGUgPSBzdGF0dXNfYnVmZmVyLT5zdGF0dXNfc3VidHlwZTsKQEAgLTI5Myw2MyArMjUzLDYxIEBACiAJCSAgICAgICAmc3RhdHVzX2J1ZmZlci0+cGF5bG9hZCwgcmVjLT51LnN0YXR1cy5wYXlsb2FkX3NpemUpOwogCX0KIAotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmhiYV9kYmYsIDIsIHJlYywgc2l6ZW9mKCpyZWMpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKKwlkZWJ1Z19ldmVudChkYmYtPmhiYSwgbGV2ZWwsIHJlYywgc2l6ZW9mKCpyZWMpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPmhiYV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgotICogemZjcF9oYmFfZGJmX2V2ZW50X3FkaW8gLSB0cmFjZSBldmVudCBmb3IgUURJTyByZWxhdGVkIGZhaWx1cmUKLSAqIEBhZGFwdGVyOiBhZGFwdGVyIGFmZmVjdGVkIGJ5IHRoaXMgUURJTyByZWxhdGVkIGV2ZW50CisgKiB6ZmNwX2RiZl9oYmFfcWRpbyAtIHRyYWNlIGV2ZW50IGZvciBRRElPIHJlbGF0ZWQgZmFpbHVyZQorICogQHFkaW86IHFkaW8gc3RydWN0dXJlIGFmZmVjdGVkIGJ5IHRoaXMgUURJTyByZWxhdGVkIGV2ZW50CiAgKiBAcWRpb19lcnJvcjogYXMgcGFzc2VkIGJ5IHFkaW8gbW9kdWxlCiAgKiBAc2JhbF9pbmRleDogZmlyc3QgYnVmZmVyIHdpdGggZXJyb3IgY29uZGl0aW9uLCBhcyBwYXNzZWQgYnkgcWRpbyBtb2R1bGUKICAqIEBzYmFsX2NvdW50OiBudW1iZXIgb2YgYnVmZmVycyBhZmZlY3RlZCwgYXMgcGFzc2VkIGJ5IHFkaW8gbW9kdWxlCiAgKi8KLXZvaWQgemZjcF9oYmFfZGJmX2V2ZW50X3FkaW8oc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgdW5zaWduZWQgaW50IHFkaW9fZXJyb3IsIGludCBzYmFsX2luZGV4LAotCQkJICAgICBpbnQgc2JhbF9jb3VudCkKK3ZvaWQgemZjcF9kYmZfaGJhX3FkaW8oc3RydWN0IHpmY3BfZGJmICpkYmYsIHVuc2lnbmVkIGludCBxZGlvX2Vycm9yLAorCQkgICAgICAgaW50IHNiYWxfaW5kZXgsIGludCBzYmFsX2NvdW50KQogewotCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkICpyID0gJmFkYXB0ZXItPmhiYV9kYmZfYnVmOworCXN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkICpyID0gJmRiZi0+aGJhX2J1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmhiYV9kYmZfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkYmYtPmhiYV9sb2NrLCBmbGFncyk7CiAJbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOwogCXN0cm5jcHkoci0+dGFnLCAicWRpbyIsIFpGQ1BfREJGX1RBR19TSVpFKTsKIAlyLT51LnFkaW8ucWRpb19lcnJvciA9IHFkaW9fZXJyb3I7CiAJci0+dS5xZGlvLnNiYWxfaW5kZXggPSBzYmFsX2luZGV4OwogCXItPnUucWRpby5zYmFsX2NvdW50ID0gc2JhbF9jb3VudDsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5oYmFfZGJmLCAwLCByLCBzaXplb2YoKnIpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKKwlkZWJ1Z19ldmVudChkYmYtPmhiYSwgMCwgciwgc2l6ZW9mKCpyKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5oYmFfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKLSAqIHpmY3BfaGJhX2RiZl9ldmVudF9iZXJyIC0gdHJhY2UgZXZlbnQgZm9yIGJpdCBlcnJvciB0aHJlc2hvbGQKLSAqIEBhZGFwdGVyOiBhZGFwdGVyIGFmZmVjdGVkIGJ5IHRoaXMgUURJTyByZWxhdGVkIGV2ZW50CisgKiB6ZmNwX2RiZl9oYmFfYmVyciAtIHRyYWNlIGV2ZW50IGZvciBiaXQgZXJyb3IgdGhyZXNob2xkCisgKiBAZGJmOiBkYmYgc3RydWN0dXJlIGFmZmVjdGVkIGJ5IHRoaXMgUURJTyByZWxhdGVkIGV2ZW50CiAgKiBAcmVxOiBmc2YgcmVxdWVzdAogICovCi12b2lkIHpmY3BfaGJhX2RiZl9ldmVudF9iZXJyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKK3ZvaWQgemZjcF9kYmZfaGJhX2JlcnIoc3RydWN0IHpmY3BfZGJmICpkYmYsIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKIHsKLQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCAqciA9ICZhZGFwdGVyLT5oYmFfZGJmX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZCAqciA9ICZkYmYtPmhiYV9idWY7CiAJc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKnNyX2J1ZiA9IHJlcS0+ZGF0YTsKIAlzdHJ1Y3QgZnNmX2JpdF9lcnJvcl9wYXlsb2FkICplcnIgPSAmc3JfYnVmLT5wYXlsb2FkLmJpdF9lcnJvcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmhiYV9kYmZfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkYmYtPmhiYV9sb2NrLCBmbGFncyk7CiAJbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOwogCXN0cm5jcHkoci0+dGFnLCAiYmVyciIsIFpGQ1BfREJGX1RBR19TSVpFKTsKIAltZW1jcHkoJnItPnUuYmVyciwgZXJyLCBzaXplb2Yoc3RydWN0IGZzZl9iaXRfZXJyb3JfcGF5bG9hZCkpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmhiYV9kYmYsIDAsIHIsIHNpemVvZigqcikpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmhiYV9kYmZfbG9jaywgZmxhZ3MpOworCWRlYnVnX2V2ZW50KGRiZi0+aGJhLCAwLCByLCBzaXplb2YoKnIpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPmhiYV9sb2NrLCBmbGFncyk7CiB9Ci1zdGF0aWMgdm9pZCB6ZmNwX2hiYV9kYmZfdmlld19yZXNwb25zZShjaGFyICoqcCwKLQkJCQkgICAgICAgc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfcmVzcG9uc2UgKnIpCitzdGF0aWMgdm9pZCB6ZmNwX2RiZl9oYmFfdmlld19yZXNwb25zZShjaGFyICoqcCwKKwkJCQkgICAgICAgc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmRfcmVzcG9uc2UgKnIpCiB7CiAJc3RydWN0IHRpbWVzcGVjIHQ7CiAKIAl6ZmNwX2RiZl9vdXQocCwgImZzZl9jb21tYW5kIiwgIjB4JTA4eCIsIHItPmZzZl9jb21tYW5kKTsKIAl6ZmNwX2RiZl9vdXQocCwgImZzZl9yZXFpZCIsICIweCUwTHgiLCByLT5mc2ZfcmVxaWQpOwogCXpmY3BfZGJmX291dChwLCAiZnNmX3NlcW5vIiwgIjB4JTA4eCIsIHItPmZzZl9zZXFubyk7Ci0JemZjcF9kYmZfdGltZXN0YW1wKHItPmZzZl9pc3N1ZWQsICZ0KTsKKwlzdGNrX3RvX3RpbWVzcGVjKHItPmZzZl9pc3N1ZWQsICZ0KTsKIAl6ZmNwX2RiZl9vdXQocCwgImZzZl9pc3N1ZWQiLCAiJTAxMWx1OiUwNmx1IiwgdC50dl9zZWMsIHQudHZfbnNlYyk7CiAJemZjcF9kYmZfb3V0KHAsICJmc2ZfcHJvdF9zdGF0dXMiLCAiMHglMDh4Iiwgci0+ZnNmX3Byb3Rfc3RhdHVzKTsKIAl6ZmNwX2RiZl9vdXQocCwgImZzZl9zdGF0dXMiLCAiMHglMDh4Iiwgci0+ZnNmX3N0YXR1cyk7CkBAIC00MDMsOCArMzYxLDggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfaGJhX2RiZl92aWV3X3N0YXR1cyhjaGFyICoqcCwKLQkJCQkgICAgIHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3N0YXR1cyAqcikKK3N0YXRpYyB2b2lkIHpmY3BfZGJmX2hiYV92aWV3X3N0YXR1cyhjaGFyICoqcCwKKwkJCQkgICAgIHN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkX3N0YXR1cyAqcikKIHsKIAl6ZmNwX2RiZl9vdXQocCwgImZhaWxlZCIsICIweCUwMngiLCByLT5mYWlsZWQpOwogCXpmY3BfZGJmX291dChwLCAic3RhdHVzX3R5cGUiLCAiMHglMDh4Iiwgci0+c3RhdHVzX3R5cGUpOwpAQCAtNDE2LDE0ICszNzQsMTQgQEAKIAkJICAgICAgci0+cGF5bG9hZF9zaXplKTsKIH0KIAotc3RhdGljIHZvaWQgemZjcF9oYmFfZGJmX3ZpZXdfcWRpbyhjaGFyICoqcCwgc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfcWRpbyAqcikKK3N0YXRpYyB2b2lkIHpmY3BfZGJmX2hiYV92aWV3X3FkaW8oY2hhciAqKnAsIHN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkX3FkaW8gKnIpCiB7CiAJemZjcF9kYmZfb3V0KHAsICJxZGlvX2Vycm9yIiwgIjB4JTA4eCIsIHItPnFkaW9fZXJyb3IpOwogCXpmY3BfZGJmX291dChwLCAic2JhbF9pbmRleCIsICIweCUwMngiLCByLT5zYmFsX2luZGV4KTsKIAl6ZmNwX2RiZl9vdXQocCwgInNiYWxfY291bnQiLCAiMHglMDJ4Iiwgci0+c2JhbF9jb3VudCk7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfaGJhX2RiZl92aWV3X2JlcnIoY2hhciAqKnAsIHN0cnVjdCBmc2ZfYml0X2Vycm9yX3BheWxvYWQgKnIpCitzdGF0aWMgdm9pZCB6ZmNwX2RiZl9oYmFfdmlld19iZXJyKGNoYXIgKipwLCBzdHJ1Y3QgZnNmX2JpdF9lcnJvcl9wYXlsb2FkICpyKQogewogCXpmY3BfZGJmX291dChwLCAibGlua19mYWlsdXJlcyIsICIlZCIsIHItPmxpbmtfZmFpbHVyZV9lcnJvcl9jb3VudCk7CiAJemZjcF9kYmZfb3V0KHAsICJsb3NzX29mX3N5bmNfZXJyIiwgIiVkIiwgci0+bG9zc19vZl9zeW5jX2Vycm9yX2NvdW50KTsKQEAgLTQ0NywxMCArNDA1LDEwIEBACiAJCSAgICAgci0+Y3VycmVudF90cmFuc21pdF9iMmJfY3JlZGl0KTsKIH0KIAotc3RhdGljIGludCB6ZmNwX2hiYV9kYmZfdmlld19mb3JtYXQoZGVidWdfaW5mb190ICppZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsCitzdGF0aWMgaW50IHpmY3BfZGJmX2hiYV92aWV3X2Zvcm1hdChkZWJ1Z19pbmZvX3QgKmlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywKIAkJCQkgICAgY2hhciAqb3V0X2J1ZiwgY29uc3QgY2hhciAqaW5fYnVmKQogewotCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkICpyID0gKHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkICopaW5fYnVmOworCXN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkICpyID0gKHN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkICopaW5fYnVmOwogCWNoYXIgKnAgPSBvdXRfYnVmOwogCiAJaWYgKHN0cm5jbXAoci0+dGFnLCAiZHVtcCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQpAQCAtNDYxLDQ1ICs0MTksNDIgQEAKIAkJemZjcF9kYmZfdGFnKCZwLCAidGFnMiIsIHItPnRhZzIpOwogCiAJaWYgKHN0cm5jbXAoci0+dGFnLCAicmVzcCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQotCQl6ZmNwX2hiYV9kYmZfdmlld19yZXNwb25zZSgmcCwgJnItPnUucmVzcG9uc2UpOworCQl6ZmNwX2RiZl9oYmFfdmlld19yZXNwb25zZSgmcCwgJnItPnUucmVzcG9uc2UpOwogCWVsc2UgaWYgKHN0cm5jbXAoci0+dGFnLCAic3RhdCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQotCQl6ZmNwX2hiYV9kYmZfdmlld19zdGF0dXMoJnAsICZyLT51LnN0YXR1cyk7CisJCXpmY3BfZGJmX2hiYV92aWV3X3N0YXR1cygmcCwgJnItPnUuc3RhdHVzKTsKIAllbHNlIGlmIChzdHJuY21wKHItPnRhZywgInFkaW8iLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKLQkJemZjcF9oYmFfZGJmX3ZpZXdfcWRpbygmcCwgJnItPnUucWRpbyk7CisJCXpmY3BfZGJmX2hiYV92aWV3X3FkaW8oJnAsICZyLT51LnFkaW8pOwogCWVsc2UgaWYgKHN0cm5jbXAoci0+dGFnLCAiYmVyciIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQotCQl6ZmNwX2hiYV9kYmZfdmlld19iZXJyKCZwLCAmci0+dS5iZXJyKTsKKwkJemZjcF9kYmZfaGJhX3ZpZXdfYmVycigmcCwgJnItPnUuYmVycik7CiAKIAlpZiAoc3RybmNtcChyLT50YWcsICJyZXNwIiwgWkZDUF9EQkZfVEFHX1NJWkUpICE9IDApCiAJCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKIAlyZXR1cm4gcCAtIG91dF9idWY7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVidWdfdmlldyB6ZmNwX2hiYV9kYmZfdmlldyA9IHsKLQkic3RydWN0dXJlZCIsCi0JTlVMTCwKLQkmemZjcF9kYmZfdmlld19oZWFkZXIsCi0JJnpmY3BfaGJhX2RiZl92aWV3X2Zvcm1hdCwKLQlOVUxMLAotCU5VTEwKK3N0YXRpYyBzdHJ1Y3QgZGVidWdfdmlldyB6ZmNwX2RiZl9oYmFfdmlldyA9IHsKKwkubmFtZSA9ICJzdHJ1Y3R1cmVkIiwKKwkuaGVhZGVyX3Byb2MgPSB6ZmNwX2RiZl92aWV3X2hlYWRlciwKKwkuZm9ybWF0X3Byb2MgPSB6ZmNwX2RiZl9oYmFfdmlld19mb3JtYXQsCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqemZjcF9yZWNfZGJmX3RhZ3NbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICp6ZmNwX2RiZl9yZWNfdGFnc1tdID0gewogCVtaRkNQX1JFQ19EQkZfSURfVEhSRUFEXSA9ICJ0aHJlYWQiLAogCVtaRkNQX1JFQ19EQkZfSURfVEFSR0VUXSA9ICJ0YXJnZXQiLAogCVtaRkNQX1JFQ19EQkZfSURfVFJJR0dFUl0gPSAidHJpZ2dlciIsCiAJW1pGQ1BfUkVDX0RCRl9JRF9BQ1RJT05dID0gImFjdGlvbiIsCiB9OwogCi1zdGF0aWMgaW50IHpmY3BfcmVjX2RiZl92aWV3X2Zvcm1hdChkZWJ1Z19pbmZvX3QgKmlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywKK3N0YXRpYyBpbnQgemZjcF9kYmZfcmVjX3ZpZXdfZm9ybWF0KGRlYnVnX2luZm9fdCAqaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LAogCQkJCSAgICBjaGFyICpidWYsIGNvbnN0IGNoYXIgKl9yZWMpCiB7Ci0Jc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmQgKnIgPSAoc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmQgKilfcmVjOworCXN0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkICpyID0gKHN0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkICopX3JlYzsKIAljaGFyICpwID0gYnVmOwogCWNoYXIgaGludFtaRkNQX0RCRl9JRF9TSVpFICsgMV07CiAKIAltZW1jcHkoaGludCwgci0+aWQyLCBaRkNQX0RCRl9JRF9TSVpFKTsKIAloaW50W1pGQ1BfREJGX0lEX1NJWkVdID0gMDsKLQl6ZmNwX2RiZl9vdXRzKCZwLCAidGFnIiwgemZjcF9yZWNfZGJmX3RhZ3Nbci0+aWRdKTsKKwl6ZmNwX2RiZl9vdXRzKCZwLCAidGFnIiwgemZjcF9kYmZfcmVjX3RhZ3Nbci0+aWRdKTsKIAl6ZmNwX2RiZl9vdXRzKCZwLCAiaGludCIsIGhpbnQpOwogCXN3aXRjaCAoci0+aWQpIHsKIAljYXNlIFpGQ1BfUkVDX0RCRl9JRF9USFJFQUQ6CkBAIC01MzcsMjQgKzQ5MiwyMiBAQAogCXJldHVybiBwIC0gYnVmOwogfQogCi1zdGF0aWMgc3RydWN0IGRlYnVnX3ZpZXcgemZjcF9yZWNfZGJmX3ZpZXcgPSB7Ci0JInN0cnVjdHVyZWQiLAotCU5VTEwsCi0JJnpmY3BfZGJmX3ZpZXdfaGVhZGVyLAotCSZ6ZmNwX3JlY19kYmZfdmlld19mb3JtYXQsCi0JTlVMTCwKLQlOVUxMCitzdGF0aWMgc3RydWN0IGRlYnVnX3ZpZXcgemZjcF9kYmZfcmVjX3ZpZXcgPSB7CisJLm5hbWUgPSAic3RydWN0dXJlZCIsCisJLmhlYWRlcl9wcm9jID0gemZjcF9kYmZfdmlld19oZWFkZXIsCisJLmZvcm1hdF9wcm9jID0gemZjcF9kYmZfcmVjX3ZpZXdfZm9ybWF0LAogfTsKIAogLyoqCi0gKiB6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkIC0gdHJhY2UgZXZlbnQgcmVsYXRlZCB0byByZWNvdmVyeSB0aHJlYWQgb3BlcmF0aW9uCisgKiB6ZmNwX2RiZl9yZWNfdGhyZWFkIC0gdHJhY2UgZXZlbnQgcmVsYXRlZCB0byByZWNvdmVyeSB0aHJlYWQgb3BlcmF0aW9uCiAgKiBAaWQyOiBpZGVudGlmaWVyIGZvciBldmVudAotICogQGFkYXB0ZXI6IGFkYXB0ZXIKKyAqIEBkYmY6IHJlZmVyZW5jZSB0byBkYmYgc3RydWN0dXJlCiAgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIGlzIGhvbGRpbmcgZXJwX2xvY2suCiAgKi8KLXZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZChjaGFyICppZDIsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIHpmY3BfZGJmX3JlY190aHJlYWQoY2hhciAqaWQyLCBzdHJ1Y3QgemZjcF9kYmYgKmRiZikKIHsKLQlzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZCAqciA9ICZhZGFwdGVyLT5yZWNfZGJmX2J1ZjsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZGJmLT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkICpyID0gJmRiZi0+cmVjX2J1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKIAl1bnNpZ25lZCByZWFkeSA9IDAsIHJ1bm5pbmcgPSAwLCB0b3RhbDsKQEAgLTU2NSw0MSArNTE4LDQxIEBACiAJCXJ1bm5pbmcrKzsKIAl0b3RhbCA9IGFkYXB0ZXItPmVycF90b3RhbF9jb3VudDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZWNfZGJmX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5yZWNfbG9jaywgZmxhZ3MpOwogCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKIAlyLT5pZCA9IFpGQ1BfUkVDX0RCRl9JRF9USFJFQUQ7CiAJbWVtY3B5KHItPmlkMiwgaWQyLCBaRkNQX0RCRl9JRF9TSVpFKTsKIAlyLT51LnRocmVhZC50b3RhbCA9IHRvdGFsOwogCXItPnUudGhyZWFkLnJlYWR5ID0gcmVhZHk7CiAJci0+dS50aHJlYWQucnVubmluZyA9IHJ1bm5pbmc7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+cmVjX2RiZiwgNiwgciwgc2l6ZW9mKCpyKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVjX2RiZl9sb2NrLCBmbGFncyk7CisJZGVidWdfZXZlbnQoZGJmLT5yZWMsIDYsIHIsIHNpemVvZigqcikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+cmVjX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCi0gKiB6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkIC0gdHJhY2UgZXZlbnQgcmVsYXRlZCB0byByZWNvdmVyeSB0aHJlYWQgb3BlcmF0aW9uCisgKiB6ZmNwX2RiZl9yZWNfdGhyZWFkIC0gdHJhY2UgZXZlbnQgcmVsYXRlZCB0byByZWNvdmVyeSB0aHJlYWQgb3BlcmF0aW9uCiAgKiBAaWQyOiBpZGVudGlmaWVyIGZvciBldmVudAogICogQGFkYXB0ZXI6IGFkYXB0ZXIKICAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgZG9lcyBub3QgaG9sZCBlcnBfbG9jay4KICAqLwotdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soY2hhciAqaWQyLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQordm9pZCB6ZmNwX2RiZl9yZWNfdGhyZWFkX2xvY2soY2hhciAqaWQyLCBzdHJ1Y3QgemZjcF9kYmYgKmRiZikKIHsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZGJmLT5hZGFwdGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+ZXJwX2xvY2ssIGZsYWdzKTsKLQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkKGlkMiwgYWRhcHRlcik7CisJemZjcF9kYmZfcmVjX3RocmVhZChpZDIsIGRiZik7CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+ZXJwX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RhcmdldChjaGFyICppZDIsIHZvaWQgKnJlZiwKLQkJCQkgICAgICBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICAgIGF0b21pY190ICpzdGF0dXMsIGF0b21pY190ICplcnBfY291bnQsCi0JCQkJICAgICAgdTY0IHd3cG4sIHUzMiBkX2lkLCB1NjQgZmNwX2x1bikKK3N0YXRpYyB2b2lkIHpmY3BfZGJmX3JlY190YXJnZXQoY2hhciAqaWQyLCB2b2lkICpyZWYsIHN0cnVjdCB6ZmNwX2RiZiAqZGJmLAorCQkJCWF0b21pY190ICpzdGF0dXMsIGF0b21pY190ICplcnBfY291bnQsIHU2NCB3d3BuLAorCQkJCXUzMiBkX2lkLCB1NjQgZmNwX2x1bikKIHsKLQlzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZCAqciA9ICZhZGFwdGVyLT5yZWNfZGJmX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZCAqciA9ICZkYmYtPnJlY19idWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZWNfZGJmX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5yZWNfbG9jaywgZmxhZ3MpOwogCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKIAlyLT5pZCA9IFpGQ1BfUkVDX0RCRl9JRF9UQVJHRVQ7CiAJbWVtY3B5KHItPmlkMiwgaWQyLCBaRkNQX0RCRl9JRF9TSVpFKTsKQEAgLTYwOSw1NiArNTYyLDU3IEBACiAJci0+dS50YXJnZXQuZF9pZCA9IGRfaWQ7CiAJci0+dS50YXJnZXQuZmNwX2x1biA9IGZjcF9sdW47CiAJci0+dS50YXJnZXQuZXJwX2NvdW50ID0gYXRvbWljX3JlYWQoZXJwX2NvdW50KTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5yZWNfZGJmLCAzLCByLCBzaXplb2YoKnIpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZWNfZGJmX2xvY2ssIGZsYWdzKTsKKwlkZWJ1Z19ldmVudChkYmYtPnJlYywgMywgciwgc2l6ZW9mKCpyKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5yZWNfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKLSAqIHpmY3BfcmVjX2RiZl9ldmVudF9hZGFwdGVyIC0gdHJhY2UgZXZlbnQgZm9yIGFkYXB0ZXIgc3RhdGUgY2hhbmdlCisgKiB6ZmNwX2RiZl9yZWNfYWRhcHRlciAtIHRyYWNlIGV2ZW50IGZvciBhZGFwdGVyIHN0YXRlIGNoYW5nZQogICogQGlkOiBpZGVudGlmaWVyIGZvciB0cmlnZ2VyIG9mIHN0YXRlIGNoYW5nZQogICogQHJlZjogYWRkaXRpb25hbCByZWZlcmVuY2UgKGUuZy4gcmVxdWVzdCkKLSAqIEBhZGFwdGVyOiBhZGFwdGVyCisgKiBAZGJmOiByZWZlcmVuY2UgdG8gZGJmIHN0cnVjdHVyZQogICovCi12b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9hZGFwdGVyKGNoYXIgKmlkLCB2b2lkICpyZWYsCi0JCQkJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3ZvaWQgemZjcF9kYmZfcmVjX2FkYXB0ZXIoY2hhciAqaWQsIHZvaWQgKnJlZiwgc3RydWN0IHpmY3BfZGJmICpkYmYpCiB7Ci0JemZjcF9yZWNfZGJmX2V2ZW50X3RhcmdldChpZCwgcmVmLCBhZGFwdGVyLCAmYWRhcHRlci0+c3RhdHVzLAorCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkYmYtPmFkYXB0ZXI7CisKKwl6ZmNwX2RiZl9yZWNfdGFyZ2V0KGlkLCByZWYsIGRiZiwgJmFkYXB0ZXItPnN0YXR1cywKIAkJCQkgICZhZGFwdGVyLT5lcnBfY291bnRlciwgMCwgMCwgMCk7CiB9CiAKIC8qKgotICogemZjcF9yZWNfZGJmX2V2ZW50X3BvcnQgLSB0cmFjZSBldmVudCBmb3IgcG9ydCBzdGF0ZSBjaGFuZ2UKKyAqIHpmY3BfZGJmX3JlY19wb3J0IC0gdHJhY2UgZXZlbnQgZm9yIHBvcnQgc3RhdGUgY2hhbmdlCiAgKiBAaWQ6IGlkZW50aWZpZXIgZm9yIHRyaWdnZXIgb2Ygc3RhdGUgY2hhbmdlCiAgKiBAcmVmOiBhZGRpdGlvbmFsIHJlZmVyZW5jZSAoZS5nLiByZXF1ZXN0KQogICogQHBvcnQ6IHBvcnQKICAqLwotdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfcG9ydChjaGFyICppZCwgdm9pZCAqcmVmLCBzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQordm9pZCB6ZmNwX2RiZl9yZWNfcG9ydChjaGFyICppZCwgdm9pZCAqcmVmLCBzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX2RiZiAqZGJmID0gcG9ydC0+YWRhcHRlci0+ZGJmOwogCi0JemZjcF9yZWNfZGJmX2V2ZW50X3RhcmdldChpZCwgcmVmLCBhZGFwdGVyLCAmcG9ydC0+c3RhdHVzLAorCXpmY3BfZGJmX3JlY190YXJnZXQoaWQsIHJlZiwgZGJmLCAmcG9ydC0+c3RhdHVzLAogCQkJCSAgJnBvcnQtPmVycF9jb3VudGVyLCBwb3J0LT53d3BuLCBwb3J0LT5kX2lkLAogCQkJCSAgMCk7CiB9CiAKIC8qKgotICogemZjcF9yZWNfZGJmX2V2ZW50X3VuaXQgLSB0cmFjZSBldmVudCBmb3IgdW5pdCBzdGF0ZSBjaGFuZ2UKKyAqIHpmY3BfZGJmX3JlY191bml0IC0gdHJhY2UgZXZlbnQgZm9yIHVuaXQgc3RhdGUgY2hhbmdlCiAgKiBAaWQ6IGlkZW50aWZpZXIgZm9yIHRyaWdnZXIgb2Ygc3RhdGUgY2hhbmdlCiAgKiBAcmVmOiBhZGRpdGlvbmFsIHJlZmVyZW5jZSAoZS5nLiByZXF1ZXN0KQogICogQHVuaXQ6IHVuaXQKICAqLwotdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdW5pdChjaGFyICppZCwgdm9pZCAqcmVmLCBzdHJ1Y3QgemZjcF91bml0ICp1bml0KQordm9pZCB6ZmNwX2RiZl9yZWNfdW5pdChjaGFyICppZCwgdm9pZCAqcmVmLCBzdHJ1Y3QgemZjcF91bml0ICp1bml0KQogewogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSB1bml0LT5wb3J0OwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX2RiZiAqZGJmID0gcG9ydC0+YWRhcHRlci0+ZGJmOwogCi0JemZjcF9yZWNfZGJmX2V2ZW50X3RhcmdldChpZCwgcmVmLCBhZGFwdGVyLCAmdW5pdC0+c3RhdHVzLAorCXpmY3BfZGJmX3JlY190YXJnZXQoaWQsIHJlZiwgZGJmLCAmdW5pdC0+c3RhdHVzLAogCQkJCSAgJnVuaXQtPmVycF9jb3VudGVyLCBwb3J0LT53d3BuLCBwb3J0LT5kX2lkLAogCQkJCSAgdW5pdC0+ZmNwX2x1bik7CiB9CiAKIC8qKgotICogemZjcF9yZWNfZGJmX2V2ZW50X3RyaWdnZXIgLSB0cmFjZSBldmVudCBmb3IgdHJpZ2dlcmVkIGVycm9yIHJlY292ZXJ5CisgKiB6ZmNwX2RiZl9yZWNfdHJpZ2dlciAtIHRyYWNlIGV2ZW50IGZvciB0cmlnZ2VyZWQgZXJyb3IgcmVjb3ZlcnkKICAqIEBpZDI6IGlkZW50aWZpZXIgZm9yIGVycm9yIHJlY292ZXJ5IHRyaWdnZXIKICAqIEByZWY6IGFkZGl0aW9uYWwgcmVmZXJlbmNlIChlLmcuIHJlcXVlc3QpCiAgKiBAd2FudDogb3JpZ2luYWxseSByZXF1ZXN0ZWQgZXJyb3IgcmVjb3ZlcnkgYWN0aW9uCkBAIC02NjgsMTQgKzYyMiwxNSBAQAogICogQHBvcnQ6IHBvcnQKICAqIEB1bml0OiB1bml0CiAgKi8KLXZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RyaWdnZXIoY2hhciAqaWQyLCB2b2lkICpyZWYsIHU4IHdhbnQsIHU4IG5lZWQsCi0JCQkJdm9pZCAqYWN0aW9uLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsIHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQpCit2b2lkIHpmY3BfZGJmX3JlY190cmlnZ2VyKGNoYXIgKmlkMiwgdm9pZCAqcmVmLCB1OCB3YW50LCB1OCBuZWVkLCB2b2lkICphY3Rpb24sCisJCQkgIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsCisJCQkgIHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQpCiB7Ci0Jc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmQgKnIgPSAmYWRhcHRlci0+cmVjX2RiZl9idWY7CisJc3RydWN0IHpmY3BfZGJmICpkYmYgPSBhZGFwdGVyLT5kYmY7CisJc3RydWN0IHpmY3BfZGJmX3JlY19yZWNvcmQgKnIgPSAmZGJmLT5yZWNfYnVmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVjX2RiZl9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRiZi0+cmVjX2xvY2ssIGZsYWdzKTsKIAltZW1zZXQociwgMCwgc2l6ZW9mKCpyKSk7CiAJci0+aWQgPSBaRkNQX1JFQ19EQkZfSURfVFJJR0dFUjsKIAltZW1jcHkoci0+aWQyLCBpZDIsIFpGQ1BfREJGX0lEX1NJWkUpOwpAQCAtNjkyLDIyICs2NDcsMjIgQEAKIAkJci0+dS50cmlnZ2VyLnVzID0gYXRvbWljX3JlYWQoJnVuaXQtPnN0YXR1cyk7CiAJCXItPnUudHJpZ2dlci5mY3BfbHVuID0gdW5pdC0+ZmNwX2x1bjsKIAl9Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+cmVjX2RiZiwgYWN0aW9uID8gMSA6IDQsIHIsIHNpemVvZigqcikpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlY19kYmZfbG9jaywgZmxhZ3MpOworCWRlYnVnX2V2ZW50KGRiZi0+cmVjLCBhY3Rpb24gPyAxIDogNCwgciwgc2l6ZW9mKCpyKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5yZWNfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKLSAqIHpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24gLSB0cmFjZSBldmVudCBzaG93aW5nIHByb2dyZXNzIG9mIHJlY292ZXJ5IGFjdGlvbgorICogemZjcF9kYmZfcmVjX2FjdGlvbiAtIHRyYWNlIGV2ZW50IHNob3dpbmcgcHJvZ3Jlc3Mgb2YgcmVjb3ZlcnkgYWN0aW9uCiAgKiBAaWQyOiBpZGVudGlmaWVyCiAgKiBAZXJwX2FjdGlvbjogZXJyb3IgcmVjb3ZlcnkgYWN0aW9uIHN0cnVjdCBwb2ludGVyCiAgKi8KLXZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbihjaGFyICppZDIsIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCit2b2lkIHpmY3BfZGJmX3JlY19hY3Rpb24oY2hhciAqaWQyLCBzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOwotCXN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkICpyID0gJmFkYXB0ZXItPnJlY19kYmZfYnVmOworCXN0cnVjdCB6ZmNwX2RiZiAqZGJmID0gZXJwX2FjdGlvbi0+YWRhcHRlci0+ZGJmOworCXN0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkICpyID0gJmRiZi0+cmVjX2J1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlY19kYmZfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkYmYtPnJlY19sb2NrLCBmbGFncyk7CiAJbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOwogCXItPmlkID0gWkZDUF9SRUNfREJGX0lEX0FDVElPTjsKIAltZW1jcHkoci0+aWQyLCBpZDIsIFpGQ1BfREJGX0lEX1NJWkUpOwpAQCAtNzE1LDI2ICs2NzAsMjcgQEAKIAlyLT51LmFjdGlvbi5zdGF0dXMgPSBlcnBfYWN0aW9uLT5zdGF0dXM7CiAJci0+dS5hY3Rpb24uc3RlcCA9IGVycF9hY3Rpb24tPnN0ZXA7CiAJci0+dS5hY3Rpb24uZnNmX3JlcSA9ICh1bnNpZ25lZCBsb25nKWVycF9hY3Rpb24tPmZzZl9yZXE7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+cmVjX2RiZiwgNSwgciwgc2l6ZW9mKCpyKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVjX2RiZl9sb2NrLCBmbGFncyk7CisJZGVidWdfZXZlbnQoZGJmLT5yZWMsIDUsIHIsIHNpemVvZigqcikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+cmVjX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCi0gKiB6ZmNwX3Nhbl9kYmZfZXZlbnRfY3RfcmVxdWVzdCAtIHRyYWNlIGV2ZW50IGZvciBpc3N1ZWQgQ1QgcmVxdWVzdAorICogemZjcF9kYmZfc2FuX2N0X3JlcXVlc3QgLSB0cmFjZSBldmVudCBmb3IgaXNzdWVkIENUIHJlcXVlc3QKICAqIEBmc2ZfcmVxOiByZXF1ZXN0IGNvbnRhaW5pbmcgaXNzdWVkIENUIGRhdGEKICAqLwotdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfY3RfcmVxdWVzdChzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQordm9pZCB6ZmNwX2RiZl9zYW5fY3RfcmVxdWVzdChzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQogewogCXN0cnVjdCB6ZmNwX3NlbmRfY3QgKmN0ID0gKHN0cnVjdCB6ZmNwX3NlbmRfY3QgKilmc2ZfcmVxLT5kYXRhOwogCXN0cnVjdCB6ZmNwX3drYV9wb3J0ICp3a2FfcG9ydCA9IGN0LT53a2FfcG9ydDsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gd2thX3BvcnQtPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfZGJmICpkYmYgPSBhZGFwdGVyLT5kYmY7CiAJc3RydWN0IGN0X2hkciAqaGRyID0gc2dfdmlydChjdC0+cmVxKTsKLQlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCAqciA9ICZhZGFwdGVyLT5zYW5fZGJmX2J1ZjsKLQlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZF9jdF9yZXF1ZXN0ICpvY3QgPSAmci0+dS5jdF9yZXE7CisJc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmQgKnIgPSAmZGJmLT5zYW5fYnVmOworCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkX2N0X3JlcXVlc3QgKm9jdCA9ICZyLT51LmN0X3JlcTsKIAlpbnQgbGV2ZWwgPSAzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c2FuX2RiZl9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRiZi0+c2FuX2xvY2ssIGZsYWdzKTsKIAltZW1zZXQociwgMCwgc2l6ZW9mKCpyKSk7CiAJc3RybmNweShyLT50YWcsICJvY3RjIiwgWkZDUF9EQkZfVEFHX1NJWkUpOwogCXItPmZzZl9yZXFpZCA9IGZzZl9yZXEtPnJlcV9pZDsKQEAgLTc0OSwyOCArNzA1LDI5IEBACiAJb2N0LT5tYXhfcmVzX3NpemUgPSBoZHItPm1heF9yZXNfc2l6ZTsKIAlvY3QtPmxlbiA9IG1pbigoaW50KWN0LT5yZXEtPmxlbmd0aCAtIChpbnQpc2l6ZW9mKHN0cnVjdCBjdF9oZHIpLAogCQkgICAgICAgWkZDUF9EQkZfU0FOX01BWF9QQVlMT0FEKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5zYW5fZGJmLCBsZXZlbCwgciwgc2l6ZW9mKCpyKSk7Ci0JemZjcF9kYmZfaGV4ZHVtcChhZGFwdGVyLT5zYW5fZGJmLCByLCBzaXplb2YoKnIpLCBsZXZlbCwKKwlkZWJ1Z19ldmVudChkYmYtPnNhbiwgbGV2ZWwsIHIsIHNpemVvZigqcikpOworCXpmY3BfZGJmX2hleGR1bXAoZGJmLT5zYW4sIHIsIHNpemVvZigqciksIGxldmVsLAogCQkJICh2b2lkICopaGRyICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHIpLCBvY3QtPmxlbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2FuX2RiZl9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5zYW5fbG9jaywgZmxhZ3MpOwogfQogCiAvKioKLSAqIHpmY3Bfc2FuX2RiZl9ldmVudF9jdF9yZXNwb25zZSAtIHRyYWNlIGV2ZW50IGZvciBjb21wbGV0aW9uIG9mIENUIHJlcXVlc3QKKyAqIHpmY3BfZGJmX3Nhbl9jdF9yZXNwb25zZSAtIHRyYWNlIGV2ZW50IGZvciBjb21wbGV0aW9uIG9mIENUIHJlcXVlc3QKICAqIEBmc2ZfcmVxOiByZXF1ZXN0IGNvbnRhaW5pbmcgQ1QgcmVzcG9uc2UKICAqLwotdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfY3RfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3ZvaWQgemZjcF9kYmZfc2FuX2N0X3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCiB7CiAJc3RydWN0IHpmY3Bfc2VuZF9jdCAqY3QgPSAoc3RydWN0IHpmY3Bfc2VuZF9jdCAqKWZzZl9yZXEtPmRhdGE7CiAJc3RydWN0IHpmY3Bfd2thX3BvcnQgKndrYV9wb3J0ID0gY3QtPndrYV9wb3J0OwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB3a2FfcG9ydC0+YWRhcHRlcjsKIAlzdHJ1Y3QgY3RfaGRyICpoZHIgPSBzZ192aXJ0KGN0LT5yZXNwKTsKLQlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCAqciA9ICZhZGFwdGVyLT5zYW5fZGJmX2J1ZjsKLQlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZF9jdF9yZXNwb25zZSAqcmN0ID0gJnItPnUuY3RfcmVzcDsKKwlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IGFkYXB0ZXItPmRiZjsKKwlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZCAqciA9ICZkYmYtPnNhbl9idWY7CisJc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmRfY3RfcmVzcG9uc2UgKnJjdCA9ICZyLT51LmN0X3Jlc3A7CiAJaW50IGxldmVsID0gMzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNhbl9kYmZfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkYmYtPnNhbl9sb2NrLCBmbGFncyk7CiAJbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOwogCXN0cm5jcHkoci0+dGFnLCAicmN0YyIsIFpGQ1BfREJGX1RBR19TSVpFKTsKIAlyLT5mc2ZfcmVxaWQgPSBmc2ZfcmVxLT5yZXFfaWQ7CkBAIC03ODUsMjIgKzc0MiwyMiBAQAogCXJjdC0+bWF4X3Jlc19zaXplID0gaGRyLT5tYXhfcmVzX3NpemU7CiAJcmN0LT5sZW4gPSBtaW4oKGludCljdC0+cmVzcC0+bGVuZ3RoIC0gKGludClzaXplb2Yoc3RydWN0IGN0X2hkciksCiAJCSAgICAgICBaRkNQX0RCRl9TQU5fTUFYX1BBWUxPQUQpOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnNhbl9kYmYsIGxldmVsLCByLCBzaXplb2YoKnIpKTsKLQl6ZmNwX2RiZl9oZXhkdW1wKGFkYXB0ZXItPnNhbl9kYmYsIHIsIHNpemVvZigqciksIGxldmVsLAorCWRlYnVnX2V2ZW50KGRiZi0+c2FuLCBsZXZlbCwgciwgc2l6ZW9mKCpyKSk7CisJemZjcF9kYmZfaGV4ZHVtcChkYmYtPnNhbiwgciwgc2l6ZW9mKCpyKSwgbGV2ZWwsCiAJCQkgKHZvaWQgKiloZHIgKyBzaXplb2Yoc3RydWN0IGN0X2hkciksIHJjdC0+bGVuKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zYW5fZGJmX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPnNhbl9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9lbHMoY29uc3QgY2hhciAqdGFnLCBpbnQgbGV2ZWwsCi0JCQkJICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwgdTMyIHNfaWQsCi0JCQkJICAgdTMyIGRfaWQsIHU4IGxzX2NvZGUsIHZvaWQgKmJ1ZmZlciwKLQkJCQkgICBpbnQgYnVmbGVuKQorc3RhdGljIHZvaWQgemZjcF9kYmZfc2FuX2Vscyhjb25zdCBjaGFyICp0YWcsIGludCBsZXZlbCwKKwkJCSAgICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwgdTMyIHNfaWQsIHUzMiBkX2lkLAorCQkJICAgICB1OCBsc19jb2RlLCB2b2lkICpidWZmZXIsIGludCBidWZsZW4pCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7Ci0Jc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQgKnJlYyA9ICZhZGFwdGVyLT5zYW5fZGJmX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IGFkYXB0ZXItPmRiZjsKKwlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZCAqcmVjID0gJmRiZi0+c2FuX2J1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNhbl9kYmZfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkYmYtPnNhbl9sb2NrLCBmbGFncyk7CiAJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKCpyZWMpKTsKIAlzdHJuY3B5KHJlYy0+dGFnLCB0YWcsIFpGQ1BfREJGX1RBR19TSVpFKTsKIAlyZWMtPmZzZl9yZXFpZCA9IGZzZl9yZXEtPnJlcV9pZDsKQEAgLTgwOCw0NSArNzY1LDQ1IEBACiAJcmVjLT5zX2lkID0gc19pZDsKIAlyZWMtPmRfaWQgPSBkX2lkOwogCXJlYy0+dS5lbHMubHNfY29kZSA9IGxzX2NvZGU7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+c2FuX2RiZiwgbGV2ZWwsIHJlYywgc2l6ZW9mKCpyZWMpKTsKLQl6ZmNwX2RiZl9oZXhkdW1wKGFkYXB0ZXItPnNhbl9kYmYsIHJlYywgc2l6ZW9mKCpyZWMpLCBsZXZlbCwKKwlkZWJ1Z19ldmVudChkYmYtPnNhbiwgbGV2ZWwsIHJlYywgc2l6ZW9mKCpyZWMpKTsKKwl6ZmNwX2RiZl9oZXhkdW1wKGRiZi0+c2FuLCByZWMsIHNpemVvZigqcmVjKSwgbGV2ZWwsCiAJCQkgYnVmZmVyLCBtaW4oYnVmbGVuLCBaRkNQX0RCRl9TQU5fTUFYX1BBWUxPQUQpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zYW5fZGJmX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPnNhbl9sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgotICogemZjcF9zYW5fZGJmX2V2ZW50X2Vsc19yZXF1ZXN0IC0gdHJhY2UgZXZlbnQgZm9yIGlzc3VlZCBFTFMKKyAqIHpmY3BfZGJmX3Nhbl9lbHNfcmVxdWVzdCAtIHRyYWNlIGV2ZW50IGZvciBpc3N1ZWQgRUxTCiAgKiBAZnNmX3JlcTogcmVxdWVzdCBjb250YWluaW5nIGlzc3VlZCBFTFMKICAqLwotdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzX3JlcXVlc3Qoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3ZvaWQgemZjcF9kYmZfc2FuX2Vsc19yZXF1ZXN0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCiB7CiAJc3RydWN0IHpmY3Bfc2VuZF9lbHMgKmVscyA9IChzdHJ1Y3QgemZjcF9zZW5kX2VscyAqKWZzZl9yZXEtPmRhdGE7CiAKLQl6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzKCJvZWxzIiwgMiwgZnNmX3JlcSwKKwl6ZmNwX2RiZl9zYW5fZWxzKCJvZWxzIiwgMiwgZnNmX3JlcSwKIAkJCSAgICAgICBmY19ob3N0X3BvcnRfaWQoZWxzLT5hZGFwdGVyLT5zY3NpX2hvc3QpLAogCQkJICAgICAgIGVscy0+ZF9pZCwgKih1OCAqKSBzZ192aXJ0KGVscy0+cmVxKSwKIAkJCSAgICAgICBzZ192aXJ0KGVscy0+cmVxKSwgZWxzLT5yZXEtPmxlbmd0aCk7CiB9CiAKIC8qKgotICogemZjcF9zYW5fZGJmX2V2ZW50X2Vsc19yZXNwb25zZSAtIHRyYWNlIGV2ZW50IGZvciBjb21wbGV0ZWQgRUxTCisgKiB6ZmNwX2RiZl9zYW5fZWxzX3Jlc3BvbnNlIC0gdHJhY2UgZXZlbnQgZm9yIGNvbXBsZXRlZCBFTFMKICAqIEBmc2ZfcmVxOiByZXF1ZXN0IGNvbnRhaW5pbmcgRUxTIHJlc3BvbnNlCiAgKi8KLXZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2Vsc19yZXNwb25zZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQordm9pZCB6ZmNwX2RiZl9zYW5fZWxzX3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCiB7CiAJc3RydWN0IHpmY3Bfc2VuZF9lbHMgKmVscyA9IChzdHJ1Y3QgemZjcF9zZW5kX2VscyAqKWZzZl9yZXEtPmRhdGE7CiAKLQl6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzKCJyZWxzIiwgMiwgZnNmX3JlcSwgZWxzLT5kX2lkLAorCXpmY3BfZGJmX3Nhbl9lbHMoInJlbHMiLCAyLCBmc2ZfcmVxLCBlbHMtPmRfaWQsCiAJCQkgICAgICAgZmNfaG9zdF9wb3J0X2lkKGVscy0+YWRhcHRlci0+c2NzaV9ob3N0KSwKIAkJCSAgICAgICAqKHU4ICopc2dfdmlydChlbHMtPnJlcSksIHNnX3ZpcnQoZWxzLT5yZXNwKSwKIAkJCSAgICAgICBlbHMtPnJlc3AtPmxlbmd0aCk7CiB9CiAKIC8qKgotICogemZjcF9zYW5fZGJmX2V2ZW50X2luY29taW5nX2VscyAtIHRyYWNlIGV2ZW50IGZvciBpbmNvbWlnIEVMUworICogemZjcF9kYmZfc2FuX2luY29taW5nX2VscyAtIHRyYWNlIGV2ZW50IGZvciBpbmNvbWlnIEVMUwogICogQGZzZl9yZXE6IHJlcXVlc3QgY29udGFpbmluZyB1bnNvbGljaXRlZCBzdGF0dXMgYnVmZmVyIHdpdGggaW5jb21pbmcgRUxTCiAgKi8KLXZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2luY29taW5nX2VscyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQordm9pZCB6ZmNwX2RiZl9zYW5faW5jb21pbmdfZWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGZzZl9yZXEtPmFkYXB0ZXI7CiAJc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKmJ1ZiA9CkBAIC04NTQsMTYgKzgxMSwxNiBAQAogCWludCBsZW5ndGggPSAoaW50KWJ1Zi0+bGVuZ3RoIC0KIAkJICAgICAoaW50KSgodm9pZCAqKSZidWYtPnBheWxvYWQgLSAodm9pZCAqKWJ1Zik7CiAKLQl6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzKCJpZWxzIiwgMSwgZnNmX3JlcSwgYnVmLT5kX2lkLAorCXpmY3BfZGJmX3Nhbl9lbHMoImllbHMiLCAxLCBmc2ZfcmVxLCBidWYtPmRfaWQsCiAJCQkgICAgICAgZmNfaG9zdF9wb3J0X2lkKGFkYXB0ZXItPnNjc2lfaG9zdCksCiAJCQkgICAgICAgYnVmLT5wYXlsb2FkLmRhdGFbMF0sICh2b2lkICopYnVmLT5wYXlsb2FkLmRhdGEsCiAJCQkgICAgICAgbGVuZ3RoKTsKIH0KIAotc3RhdGljIGludCB6ZmNwX3Nhbl9kYmZfdmlld19mb3JtYXQoZGVidWdfaW5mb190ICppZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsCitzdGF0aWMgaW50IHpmY3BfZGJmX3Nhbl92aWV3X2Zvcm1hdChkZWJ1Z19pbmZvX3QgKmlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywKIAkJCQkgICAgY2hhciAqb3V0X2J1ZiwgY29uc3QgY2hhciAqaW5fYnVmKQogewotCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkICpyID0gKHN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkICopaW5fYnVmOworCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkICpyID0gKHN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkICopaW5fYnVmOwogCWNoYXIgKnAgPSBvdXRfYnVmOwogCiAJaWYgKHN0cm5jbXAoci0+dGFnLCAiZHVtcCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKQpAQCAtODc2LDcgKzgzMyw3IEBACiAJemZjcF9kYmZfb3V0KCZwLCAiZF9pZCIsICIweCUwNngiLCByLT5kX2lkKTsKIAogCWlmIChzdHJuY21wKHItPnRhZywgIm9jdGMiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgewotCQlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZF9jdF9yZXF1ZXN0ICpjdCA9ICZyLT51LmN0X3JlcTsKKwkJc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmRfY3RfcmVxdWVzdCAqY3QgPSAmci0+dS5jdF9yZXE7CiAJCXpmY3BfZGJmX291dCgmcCwgImNtZF9yZXFfY29kZSIsICIweCUwNHgiLCBjdC0+Y21kX3JlcV9jb2RlKTsKIAkJemZjcF9kYmZfb3V0KCZwLCAicmV2aXNpb24iLCAiMHglMDJ4IiwgY3QtPnJldmlzaW9uKTsKIAkJemZjcF9kYmZfb3V0KCZwLCAiZ3NfdHlwZSIsICIweCUwMngiLCBjdC0+Z3NfdHlwZSk7CkBAIC04ODQsNyArODQxLDcgQEAKIAkJemZjcF9kYmZfb3V0KCZwLCAib3B0aW9ucyIsICIweCUwMngiLCBjdC0+b3B0aW9ucyk7CiAJCXpmY3BfZGJmX291dCgmcCwgIm1heF9yZXNfc2l6ZSIsICIweCUwNHgiLCBjdC0+bWF4X3Jlc19zaXplKTsKIAl9IGVsc2UgaWYgKHN0cm5jbXAoci0+dGFnLCAicmN0YyIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKSB7Ci0JCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2N0X3Jlc3BvbnNlICpjdCA9ICZyLT51LmN0X3Jlc3A7CisJCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkX2N0X3Jlc3BvbnNlICpjdCA9ICZyLT51LmN0X3Jlc3A7CiAJCXpmY3BfZGJmX291dCgmcCwgImNtZF9yc3BfY29kZSIsICIweCUwNHgiLCBjdC0+Y21kX3JzcF9jb2RlKTsKIAkJemZjcF9kYmZfb3V0KCZwLCAicmV2aXNpb24iLCAiMHglMDJ4IiwgY3QtPnJldmlzaW9uKTsKIAkJemZjcF9kYmZfb3V0KCZwLCAicmVhc29uX2NvZGUiLCAiMHglMDJ4IiwgY3QtPnJlYXNvbl9jb2RlKTsKQEAgLTg5NCwzNSArODUxLDMwIEBACiAJfSBlbHNlIGlmIChzdHJuY21wKHItPnRhZywgIm9lbHMiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCB8fAogCQkgICBzdHJuY21wKHItPnRhZywgInJlbHMiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCB8fAogCQkgICBzdHJuY21wKHItPnRhZywgImllbHMiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgewotCQlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZF9lbHMgKmVscyA9ICZyLT51LmVsczsKKwkJc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmRfZWxzICplbHMgPSAmci0+dS5lbHM7CiAJCXpmY3BfZGJmX291dCgmcCwgImxzX2NvZGUiLCAiMHglMDJ4IiwgZWxzLT5sc19jb2RlKTsKIAl9CiAJcmV0dXJuIHAgLSBvdXRfYnVmOwogfQogCi1zdGF0aWMgc3RydWN0IGRlYnVnX3ZpZXcgemZjcF9zYW5fZGJmX3ZpZXcgPSB7Ci0JInN0cnVjdHVyZWQiLAotCU5VTEwsCi0JJnpmY3BfZGJmX3ZpZXdfaGVhZGVyLAotCSZ6ZmNwX3Nhbl9kYmZfdmlld19mb3JtYXQsCi0JTlVMTCwKLQlOVUxMCitzdGF0aWMgc3RydWN0IGRlYnVnX3ZpZXcgemZjcF9kYmZfc2FuX3ZpZXcgPSB7CisJLm5hbWUgPSAic3RydWN0dXJlZCIsCisJLmhlYWRlcl9wcm9jID0gemZjcF9kYmZfdmlld19oZWFkZXIsCisJLmZvcm1hdF9wcm9jID0gemZjcF9kYmZfc2FuX3ZpZXdfZm9ybWF0LAogfTsKIAotc3RhdGljIHZvaWQgemZjcF9zY3NpX2RiZl9ldmVudChjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKnRhZzIsIGludCBsZXZlbCwKLQkJCQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCwKLQkJCQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxLAotCQkJCXVuc2lnbmVkIGxvbmcgb2xkX3JlcV9pZCkKK3ZvaWQgX3pmY3BfZGJmX3Njc2koY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICp0YWcyLCBpbnQgbGV2ZWwsCisJCSAgICBzdHJ1Y3QgemZjcF9kYmYgKmRiZiwgc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbW5kLAorCQkgICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwgdW5zaWduZWQgbG9uZyBvbGRfcmVxX2lkKQogewotCXN0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZCAqcmVjID0gJmFkYXB0ZXItPnNjc2lfZGJmX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfc2NzaV9yZWNvcmQgKnJlYyA9ICZkYmYtPnNjc2lfYnVmOwogCXN0cnVjdCB6ZmNwX2RiZl9kdW1wICpkdW1wID0gKHN0cnVjdCB6ZmNwX2RiZl9kdW1wICopcmVjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGZjcF9yc3BfaXUgKmZjcF9yc3A7CiAJY2hhciAqZmNwX3JzcF9pbmZvID0gTlVMTCwgKmZjcF9zbnNfaW5mbyA9IE5VTEw7CiAJaW50IG9mZnNldCA9IDAsIGJ1ZmxlbiA9IDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c2NzaV9kYmZfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkYmYtPnNjc2lfbG9jaywgZmxhZ3MpOwogCWRvIHsKIAkJbWVtc2V0KHJlYywgMCwgc2l6ZW9mKCpyZWMpKTsKIAkJaWYgKG9mZnNldCA9PSAwKSB7CkBAIC05NzYsNjggKzkyOCwyMCBAQAogCQkJZHVtcC0+b2Zmc2V0ID0gb2Zmc2V0OwogCQkJZHVtcC0+c2l6ZSA9IG1pbihidWZsZW4gLSBvZmZzZXQsCiAJCQkJCSAoaW50KXNpemVvZihzdHJ1Y3QKLQkJCQkJCSAgICAgemZjcF9zY3NpX2RiZl9yZWNvcmQpIC0KKwkJCQkJCSAgICAgemZjcF9kYmZfc2NzaV9yZWNvcmQpIC0KIAkJCQkJIChpbnQpc2l6ZW9mKHN0cnVjdCB6ZmNwX2RiZl9kdW1wKSk7CiAJCQltZW1jcHkoZHVtcC0+ZGF0YSwgZmNwX3Nuc19pbmZvICsgb2Zmc2V0LCBkdW1wLT5zaXplKTsKIAkJCW9mZnNldCArPSBkdW1wLT5zaXplOwogCQl9Ci0JCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnNjc2lfZGJmLCBsZXZlbCwgcmVjLCBzaXplb2YoKnJlYykpOworCQlkZWJ1Z19ldmVudChkYmYtPnNjc2ksIGxldmVsLCByZWMsIHNpemVvZigqcmVjKSk7CiAJfSB3aGlsZSAob2Zmc2V0IDwgYnVmbGVuKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zY3NpX2RiZl9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5zY3NpX2xvY2ssIGZsYWdzKTsKIH0KIAotLyoqCi0gKiB6ZmNwX3Njc2lfZGJmX2V2ZW50X3Jlc3VsdCAtIHRyYWNlIGV2ZW50IGZvciBTQ1NJIGNvbW1hbmQgY29tcGxldGlvbgotICogQHRhZzogdGFnIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlIG9mIFNDU0kgY29tbWFuZAotICogQGxldmVsOiB0cmFjZSBsZXZlbCBhcHBsaWNhYmxlIGZvciB0aGlzIGV2ZW50Ci0gKiBAYWRhcHRlcjogYWRhcHRlciB0aGF0IGhhcyBiZWVuIHVzZWQgdG8gaXNzdWUgdGhlIFNDU0kgY29tbWFuZAotICogQHNjc2lfY21uZDogU0NTSSBjb21tYW5kIHBvaW50ZXIKLSAqIEBmc2ZfcmVxOiByZXF1ZXN0IHVzZWQgdG8gaXNzdWUgU0NTSSBjb21tYW5kIChtaWdodCBiZSBOVUxMKQotICovCi12b2lkIHpmY3Bfc2NzaV9kYmZfZXZlbnRfcmVzdWx0KGNvbnN0IGNoYXIgKnRhZywgaW50IGxldmVsLAotCQkJCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbW5kLAotCQkJCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCi17Ci0JemZjcF9zY3NpX2RiZl9ldmVudCgicnNsdCIsIHRhZywgbGV2ZWwsIGFkYXB0ZXIsIHNjc2lfY21uZCwgZnNmX3JlcSwgMCk7Ci19Ci0KLS8qKgotICogemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCAtIHRyYWNlIGV2ZW50IGZvciBTQ1NJIGNvbW1hbmQgYWJvcnQKLSAqIEB0YWc6IHRhZyBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBhYm9ydCBvcGVyYXRpb24KLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHRoYXMgaGFzIGJlZW4gdXNlZCB0byBpc3N1ZSBTQ1NJIGNvbW1hbmQgdG8gYmUgYWJvcnRlZAotICogQHNjc2lfY21uZDogU0NTSSBjb21tYW5kIHRvIGJlIGFib3J0ZWQKLSAqIEBuZXdfZnNmX3JlcTogcmVxdWVzdCBjb250YWluaW5nIGFib3J0IChtaWdodCBiZSBOVUxMKQotICogQG9sZF9yZXFfaWQ6IGlkZW50aWZpZXIgb2YgcmVxdWVzdCBjb250YWluZyBTQ1NJIGNvbW1hbmQgdG8gYmUgYWJvcnRlZAotICovCi12b2lkIHpmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQoY29uc3QgY2hhciAqdGFnLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCwKLQkJCSAgICAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpuZXdfZnNmX3JlcSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9sZF9yZXFfaWQpCi17Ci0JemZjcF9zY3NpX2RiZl9ldmVudCgiYWJydCIsIHRhZywgMSwgYWRhcHRlciwgc2NzaV9jbW5kLCBuZXdfZnNmX3JlcSwKLQkJCSAgICBvbGRfcmVxX2lkKTsKLX0KLQotLyoqCi0gKiB6ZmNwX3Njc2lfZGJmX2V2ZW50X2RldnJlc2V0IC0gdHJhY2UgZXZlbnQgZm9yIExvZ2ljYWwgVW5pdCBvciBUYXJnZXQgUmVzZXQKLSAqIEB0YWc6IHRhZyBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiByZXNldCBvcGVyYXRpb24KLSAqIEBmbGFnOiBpbmRpY2F0ZXMgdHlwZSBvZiByZXNldCAoVGFyZ2V0IFJlc2V0LCBMb2dpY2FsIFVuaXQgUmVzZXQpCi0gKiBAdW5pdDogdW5pdCB0aGF0IG5lZWRzIHJlc2V0Ci0gKiBAc2NzaV9jbW5kOiBTQ1NJIGNvbW1hbmQgd2hpY2ggY2F1c2VkIHRoaXMgZXJyb3IgcmVjb3ZlcnkKLSAqLwotdm9pZCB6ZmNwX3Njc2lfZGJmX2V2ZW50X2RldnJlc2V0KGNvbnN0IGNoYXIgKnRhZywgdTggZmxhZywKLQkJCQkgIHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsCi0JCQkJICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQpCi17Ci0JemZjcF9zY3NpX2RiZl9ldmVudChmbGFnID09IEZDUF9UQVJHRVRfUkVTRVQgPyAidHJzdCIgOiAibHJzdCIsIHRhZywgMSwKLQkJCSAgICB1bml0LT5wb3J0LT5hZGFwdGVyLCBzY3NpX2NtbmQsIE5VTEwsIDApOwotfQotCi1zdGF0aWMgaW50IHpmY3Bfc2NzaV9kYmZfdmlld19mb3JtYXQoZGVidWdfaW5mb190ICppZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsCitzdGF0aWMgaW50IHpmY3BfZGJmX3Njc2lfdmlld19mb3JtYXQoZGVidWdfaW5mb190ICppZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsCiAJCQkJICAgICBjaGFyICpvdXRfYnVmLCBjb25zdCBjaGFyICppbl9idWYpCiB7Ci0Jc3RydWN0IHpmY3Bfc2NzaV9kYmZfcmVjb3JkICpyID0gKHN0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZCAqKWluX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfc2NzaV9yZWNvcmQgKnIgPSAoc3RydWN0IHpmY3BfZGJmX3Njc2lfcmVjb3JkICopaW5fYnVmOwogCXN0cnVjdCB0aW1lc3BlYyB0OwogCWNoYXIgKnAgPSBvdXRfYnVmOwogCkBAIC0xMDU5LDcgKzk2Myw3IEBACiAJCXpmY3BfZGJmX291dCgmcCwgIm9sZF9mc2ZfcmVxaWQiLCAiMHglMEx4Iiwgci0+b2xkX2ZzZl9yZXFpZCk7CiAJemZjcF9kYmZfb3V0KCZwLCAiZnNmX3JlcWlkIiwgIjB4JTBMeCIsIHItPmZzZl9yZXFpZCk7CiAJemZjcF9kYmZfb3V0KCZwLCAiZnNmX3NlcW5vIiwgIjB4JTA4eCIsIHItPmZzZl9zZXFubyk7Ci0JemZjcF9kYmZfdGltZXN0YW1wKHItPmZzZl9pc3N1ZWQsICZ0KTsKKwlzdGNrX3RvX3RpbWVzcGVjKHItPmZzZl9pc3N1ZWQsICZ0KTsKIAl6ZmNwX2RiZl9vdXQoJnAsICJmc2ZfaXNzdWVkIiwgIiUwMTFsdTolMDZsdSIsIHQudHZfc2VjLCB0LnR2X25zZWMpOwogCiAJaWYgKHN0cm5jbXAoci0+dGFnLCAicnNsdCIsIFpGQ1BfREJGX1RBR19TSVpFKSA9PSAwKSB7CkBAIC0xMDc4LDg0ICs5ODIsOTYgQEAKIAlyZXR1cm4gcCAtIG91dF9idWY7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVidWdfdmlldyB6ZmNwX3Njc2lfZGJmX3ZpZXcgPSB7Ci0JInN0cnVjdHVyZWQiLAotCU5VTEwsCi0JJnpmY3BfZGJmX3ZpZXdfaGVhZGVyLAotCSZ6ZmNwX3Njc2lfZGJmX3ZpZXdfZm9ybWF0LAotCU5VTEwsCi0JTlVMTAorc3RhdGljIHN0cnVjdCBkZWJ1Z192aWV3IHpmY3BfZGJmX3Njc2lfdmlldyA9IHsKKwkubmFtZSA9ICJzdHJ1Y3R1cmVkIiwKKwkuaGVhZGVyX3Byb2MgPSB6ZmNwX2RiZl92aWV3X2hlYWRlciwKKwkuZm9ybWF0X3Byb2MgPSB6ZmNwX2RiZl9zY3NpX3ZpZXdfZm9ybWF0LAogfTsKIAorc3RhdGljIGRlYnVnX2luZm9fdCAqemZjcF9kYmZfcmVnKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZXZlbCwKKwkJCQkgIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgZGVidWdfaW5mbyAqZDsKKworCWQgPSBkZWJ1Z19yZWdpc3RlcihuYW1lLCBkYmZzaXplLCBsZXZlbCwgc2l6ZSk7CisJaWYgKCFkKQorCQlyZXR1cm4gTlVMTDsKKworCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoZCwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKKwlkZWJ1Z19yZWdpc3Rlcl92aWV3KGQsIHZpZXcpOworCWRlYnVnX3NldF9sZXZlbChkLCBsZXZlbCk7CisKKwlyZXR1cm4gZDsKK30KKwogLyoqCiAgKiB6ZmNwX2FkYXB0ZXJfZGVidWdfcmVnaXN0ZXIgLSByZWdpc3RlcnMgZGVidWcgZmVhdHVyZSBmb3IgYW4gYWRhcHRlcgogICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlciBmb3Igd2hpY2ggZGVidWcgZmVhdHVyZXMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQKICAqIHJldHVybjogLUVOT01FTSBvbiBlcnJvciwgMCBvdGhlcndpc2UKICAqLwotaW50IHpmY3BfYWRhcHRlcl9kZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQoraW50IHpmY3BfZGJmX2FkYXB0ZXJfcmVnaXN0ZXIoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKIAljaGFyIGRiZl9uYW1lW0RFQlVHX01BWF9OQU1FX0xFTl07CisJc3RydWN0IHpmY3BfZGJmICpkYmY7CisKKwlkYmYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgemZjcF9kYmYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRiZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYmYtPmFkYXB0ZXIgPSBhZGFwdGVyOworCisJc3Bpbl9sb2NrX2luaXQoJmRiZi0+aGJhX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkYmYtPnNhbl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGJmLT5zY3NpX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkYmYtPnJlY19sb2NrKTsKIAogCS8qIGRlYnVnIGZlYXR1cmUgYXJlYSB3aGljaCByZWNvcmRzIHJlY292ZXJ5IGFjdGl2aXR5ICovCiAJc3ByaW50ZihkYmZfbmFtZSwgInpmY3BfJXNfcmVjIiwgZGV2X25hbWUoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOwotCWFkYXB0ZXItPnJlY19kYmYgPSBkZWJ1Z19yZWdpc3RlcihkYmZfbmFtZSwgZGJmc2l6ZSwgMSwKLQkJCQkJICBzaXplb2Yoc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmQpKTsKLQlpZiAoIWFkYXB0ZXItPnJlY19kYmYpCi0JCWdvdG8gZmFpbGVkOwotCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+cmVjX2RiZiwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKLQlkZWJ1Z19yZWdpc3Rlcl92aWV3KGFkYXB0ZXItPnJlY19kYmYsICZ6ZmNwX3JlY19kYmZfdmlldyk7Ci0JZGVidWdfc2V0X2xldmVsKGFkYXB0ZXItPnJlY19kYmYsIDMpOworCWRiZi0+cmVjID0gemZjcF9kYmZfcmVnKGRiZl9uYW1lLCAzLCAmemZjcF9kYmZfcmVjX3ZpZXcsCisJCQkJc2l6ZW9mKHN0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkKSk7CisJaWYgKCFkYmYtPnJlYykKKwkJZ290byBlcnJfb3V0OwogCiAJLyogZGVidWcgZmVhdHVyZSBhcmVhIHdoaWNoIHJlY29yZHMgSEJBIChGU0YgYW5kIFFESU8pIGNvbmRpdGlvbnMgKi8KIAlzcHJpbnRmKGRiZl9uYW1lLCAiemZjcF8lc19oYmEiLCBkZXZfbmFtZSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7Ci0JYWRhcHRlci0+aGJhX2RiZiA9IGRlYnVnX3JlZ2lzdGVyKGRiZl9uYW1lLCBkYmZzaXplLCAxLAotCQkJCQkgIHNpemVvZihzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCkpOwotCWlmICghYWRhcHRlci0+aGJhX2RiZikKLQkJZ290byBmYWlsZWQ7Ci0JZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5oYmFfZGJmLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOwotCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+aGJhX2RiZiwgJnpmY3BfaGJhX2RiZl92aWV3KTsKLQlkZWJ1Z19zZXRfbGV2ZWwoYWRhcHRlci0+aGJhX2RiZiwgMyk7CisJZGJmLT5oYmEgPSB6ZmNwX2RiZl9yZWcoZGJmX25hbWUsIDMsICZ6ZmNwX2RiZl9oYmFfdmlldywKKwkJCQlzaXplb2Yoc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmQpKTsKKwlpZiAoIWRiZi0+aGJhKQorCQlnb3RvIGVycl9vdXQ7CiAKIAkvKiBkZWJ1ZyBmZWF0dXJlIGFyZWEgd2hpY2ggcmVjb3JkcyBTQU4gY29tbWFuZCBmYWlsdXJlcyBhbmQgcmVjb3ZlcnkgKi8KIAlzcHJpbnRmKGRiZl9uYW1lLCAiemZjcF8lc19zYW4iLCBkZXZfbmFtZSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7Ci0JYWRhcHRlci0+c2FuX2RiZiA9IGRlYnVnX3JlZ2lzdGVyKGRiZl9uYW1lLCBkYmZzaXplLCAxLAotCQkJCQkgIHNpemVvZihzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCkpOwotCWlmICghYWRhcHRlci0+c2FuX2RiZikKLQkJZ290byBmYWlsZWQ7Ci0JZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5zYW5fZGJmLCAmZGVidWdfaGV4X2FzY2lpX3ZpZXcpOwotCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+c2FuX2RiZiwgJnpmY3Bfc2FuX2RiZl92aWV3KTsKLQlkZWJ1Z19zZXRfbGV2ZWwoYWRhcHRlci0+c2FuX2RiZiwgNik7CisJZGJmLT5zYW4gPSB6ZmNwX2RiZl9yZWcoZGJmX25hbWUsIDYsICZ6ZmNwX2RiZl9zYW5fdmlldywKKwkJCQlzaXplb2Yoc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmQpKTsKKwlpZiAoIWRiZi0+c2FuKQorCQlnb3RvIGVycl9vdXQ7CiAKIAkvKiBkZWJ1ZyBmZWF0dXJlIGFyZWEgd2hpY2ggcmVjb3JkcyBTQ1NJIGNvbW1hbmQgZmFpbHVyZXMgYW5kIHJlY292ZXJ5ICovCiAJc3ByaW50ZihkYmZfbmFtZSwgInpmY3BfJXNfc2NzaSIsIGRldl9uYW1lKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYpKTsKLQlhZGFwdGVyLT5zY3NpX2RiZiA9IGRlYnVnX3JlZ2lzdGVyKGRiZl9uYW1lLCBkYmZzaXplLCAxLAotCQkJCQkgICBzaXplb2Yoc3RydWN0IHpmY3Bfc2NzaV9kYmZfcmVjb3JkKSk7Ci0JaWYgKCFhZGFwdGVyLT5zY3NpX2RiZikKLQkJZ290byBmYWlsZWQ7Ci0JZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5zY3NpX2RiZiwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKLQlkZWJ1Z19yZWdpc3Rlcl92aWV3KGFkYXB0ZXItPnNjc2lfZGJmLCAmemZjcF9zY3NpX2RiZl92aWV3KTsKLQlkZWJ1Z19zZXRfbGV2ZWwoYWRhcHRlci0+c2NzaV9kYmYsIDMpOworCWRiZi0+c2NzaSA9IHpmY3BfZGJmX3JlZyhkYmZfbmFtZSwgMywgJnpmY3BfZGJmX3Njc2lfdmlldywKKwkJCQkgc2l6ZW9mKHN0cnVjdCB6ZmNwX2RiZl9zY3NpX3JlY29yZCkpOworCWlmICghZGJmLT5zY3NpKQorCQlnb3RvIGVycl9vdXQ7CiAKKwlhZGFwdGVyLT5kYmYgPSBkYmY7CiAJcmV0dXJuIDA7CiAKLSBmYWlsZWQ6Ci0JemZjcF9hZGFwdGVyX2RlYnVnX3VucmVnaXN0ZXIoYWRhcHRlcik7Ci0KK2Vycl9vdXQ6CisJemZjcF9kYmZfYWRhcHRlcl91bnJlZ2lzdGVyKGRiZik7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKIC8qKgogICogemZjcF9hZGFwdGVyX2RlYnVnX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVycyBkZWJ1ZyBmZWF0dXJlIGZvciBhbiBhZGFwdGVyCi0gKiBAYWRhcHRlcjogcG9pbnRlciB0byBhZGFwdGVyIGZvciB3aGljaCBkZWJ1ZyBmZWF0dXJlcyBzaG91bGQgYmUgdW5yZWdpc3RlcmVkCisgKiBAZGJmOiBwb2ludGVyIHRvIGRiZiBmb3Igd2hpY2ggZGVidWcgZmVhdHVyZXMgc2hvdWxkIGJlIHVucmVnaXN0ZXJlZAogICovCi12b2lkIHpmY3BfYWRhcHRlcl9kZWJ1Z191bnJlZ2lzdGVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIHpmY3BfZGJmX2FkYXB0ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgemZjcF9kYmYgKmRiZikKIHsKLQlkZWJ1Z191bnJlZ2lzdGVyKGFkYXB0ZXItPnNjc2lfZGJmKTsKLQlkZWJ1Z191bnJlZ2lzdGVyKGFkYXB0ZXItPnNhbl9kYmYpOwotCWRlYnVnX3VucmVnaXN0ZXIoYWRhcHRlci0+aGJhX2RiZik7Ci0JZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyLT5yZWNfZGJmKTsKLQlhZGFwdGVyLT5zY3NpX2RiZiA9IE5VTEw7Ci0JYWRhcHRlci0+c2FuX2RiZiA9IE5VTEw7Ci0JYWRhcHRlci0+aGJhX2RiZiA9IE5VTEw7Ci0JYWRhcHRlci0+cmVjX2RiZiA9IE5VTEw7CisJZGVidWdfdW5yZWdpc3RlcihkYmYtPnNjc2kpOworCWRlYnVnX3VucmVnaXN0ZXIoZGJmLT5zYW4pOworCWRlYnVnX3VucmVnaXN0ZXIoZGJmLT5oYmEpOworCWRlYnVnX3VucmVnaXN0ZXIoZGJmLT5yZWMpOworCWRiZi0+YWRhcHRlci0+ZGJmID0gTlVMTDsKKwlrZnJlZShkYmYpOwogfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaAppbmRleCBhNTczZjczLi42YjE0NjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmgKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgemZjcCBkZXZpY2UgZHJpdmVyIGZvcgogICogRkNQIGFkYXB0ZXJzIGZvciBJQk0gU3lzdGVtIHo5IGFuZCB6U2VyaWVzLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOCwgMjAwOAorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4LCAyMDA5CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMiw3ICsyMiw5IEBACiAjaWZuZGVmIFpGQ1BfREJGX0gKICNkZWZpbmUgWkZDUF9EQkZfSAogCisjaW5jbHVkZSAiemZjcF9leHQuaCIKICNpbmNsdWRlICJ6ZmNwX2ZzZi5oIgorI2luY2x1ZGUgInpmY3BfZGVmLmgiCiAKICNkZWZpbmUgWkZDUF9EQkZfVEFHX1NJWkUgICAgICA0CiAjZGVmaW5lIFpGQ1BfREJGX0lEX1NJWkUgICAgICAgNwpAQCAtMzUsMTMgKzM3LDEzIEBACiAJdTggZGF0YVtdOwkJLyogZHVtcCBkYXRhICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfdGhyZWFkIHsKK3N0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkX3RocmVhZCB7CiAJdTMyIHRvdGFsOwogCXUzMiByZWFkeTsKIAl1MzIgcnVubmluZzsKIH07CiAKLXN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkX3RhcmdldCB7CitzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZF90YXJnZXQgewogCXU2NCByZWY7CiAJdTMyIHN0YXR1czsKIAl1MzIgZF9pZDsKQEAgLTUwLDcgKzUyLDcgQEAKIAl1MzIgZXJwX2NvdW50OwogfTsKIAotc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfdHJpZ2dlciB7CitzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZF90cmlnZ2VyIHsKIAl1OCB3YW50OwogCXU4IG5lZWQ7CiAJdTMyIGFzOwpAQCAtNjIsMjEgKzY0LDIxIEBACiAJdTY0IGZjcF9sdW47CiB9OwogCi1zdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZF9hY3Rpb24geworc3RydWN0IHpmY3BfZGJmX3JlY19yZWNvcmRfYWN0aW9uIHsKIAl1MzIgc3RhdHVzOwogCXUzMiBzdGVwOwogCXU2NCBhY3Rpb247CiAJdTY0IGZzZl9yZXE7CiB9OwogCi1zdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZCB7CitzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZCB7CiAJdTggaWQ7CiAJY2hhciBpZDJbN107CiAJdW5pb24gewotCQlzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZF9hY3Rpb24gYWN0aW9uOwotCQlzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZF90aHJlYWQgdGhyZWFkOwotCQlzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZF90YXJnZXQgdGFyZ2V0OwotCQlzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZF90cmlnZ2VyIHRyaWdnZXI7CisJCXN0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkX2FjdGlvbiBhY3Rpb247CisJCXN0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkX3RocmVhZCB0aHJlYWQ7CisJCXN0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkX3RhcmdldCB0YXJnZXQ7CisJCXN0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkX3RyaWdnZXIgdHJpZ2dlcjsKIAl9IHU7CiB9OwogCkBAIC04Nyw3ICs4OSw3IEBACiAJWkZDUF9SRUNfREJGX0lEX1RSSUdHRVIsCiB9OwogCi1zdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9yZXNwb25zZSB7CitzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZF9yZXNwb25zZSB7CiAJdTMyIGZzZl9jb21tYW5kOwogCXU2NCBmc2ZfcmVxaWQ7CiAJdTMyIGZzZl9zZXFubzsKQEAgLTEyNSw3ICsxMjcsNyBAQAogCX0gdTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9zdGF0dXMgeworc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmRfc3RhdHVzIHsKIAl1OCBmYWlsZWQ7CiAJdTMyIHN0YXR1c190eXBlOwogCXUzMiBzdGF0dXNfc3VidHlwZTsKQEAgLTEzOSwyNCArMTQxLDI0IEBACiAJdTggcGF5bG9hZFtaRkNQX0RCRl9VTlNPTF9QQVlMT0FEXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9xZGlvIHsKK3N0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkX3FkaW8gewogCXUzMiBxZGlvX2Vycm9yOwogCXU4IHNiYWxfaW5kZXg7CiAJdTggc2JhbF9jb3VudDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCB7CitzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZCB7CiAJdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKIAl1OCB0YWcyW1pGQ1BfREJGX1RBR19TSVpFXTsKIAl1bmlvbiB7Ci0JCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3Jlc3BvbnNlIHJlc3BvbnNlOwotCQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9zdGF0dXMgc3RhdHVzOwotCQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9xZGlvIHFkaW87CisJCXN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkX3Jlc3BvbnNlIHJlc3BvbnNlOworCQlzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZF9zdGF0dXMgc3RhdHVzOworCQlzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZF9xZGlvIHFkaW87CiAJCXN0cnVjdCBmc2ZfYml0X2Vycm9yX3BheWxvYWQgYmVycjsKIAl9IHU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfY3RfcmVxdWVzdCB7CitzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9jdF9yZXF1ZXN0IHsKIAl1MTYgY21kX3JlcV9jb2RlOwogCXU4IHJldmlzaW9uOwogCXU4IGdzX3R5cGU7CkBAIC0xNjYsNyArMTY4LDcgQEAKIAl1MzIgbGVuOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2N0X3Jlc3BvbnNlIHsKK3N0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkX2N0X3Jlc3BvbnNlIHsKIAl1MTYgY21kX3JzcF9jb2RlOwogCXU4IHJldmlzaW9uOwogCXU4IHJlYXNvbl9jb2RlOwpAQCAtMTc2LDI3ICsxNzgsMjcgQEAKIAl1MzIgbGVuOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2VscyB7CitzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9lbHMgewogCXU4IGxzX2NvZGU7CiAJdTMyIGxlbjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCB7CitzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZCB7CiAJdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKIAl1NjQgZnNmX3JlcWlkOwogCXUzMiBmc2Zfc2Vxbm87CiAJdTMyIHNfaWQ7CiAJdTMyIGRfaWQ7CiAJdW5pb24gewotCQlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZF9jdF9yZXF1ZXN0IGN0X3JlcTsKLQkJc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfY3RfcmVzcG9uc2UgY3RfcmVzcDsKLQkJc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfZWxzIGVsczsKKwkJc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmRfY3RfcmVxdWVzdCBjdF9yZXE7CisJCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkX2N0X3Jlc3BvbnNlIGN0X3Jlc3A7CisJCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkX2VscyBlbHM7CiAJfSB1OwogI2RlZmluZSBaRkNQX0RCRl9TQU5fTUFYX1BBWUxPQUQgMTAyNAogCXU4IHBheWxvYWRbMzJdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZCB7CitzdHJ1Y3QgemZjcF9kYmZfc2NzaV9yZWNvcmQgewogCXU4IHRhZ1taRkNQX0RCRl9UQUdfU0laRV07CiAJdTggdGFnMltaRkNQX0RCRl9UQUdfU0laRV07CiAJdTMyIHNjc2lfaWQ7CkBAIC0yMjIsNCArMjI0LDEyNyBAQAogCXU4IHNuc19pbmZvW1pGQ1BfREJGX1NDU0lfRkNQX1NOU19JTkZPXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgemZjcF9kYmYgeworCWRlYnVnX2luZm9fdAkJCSpyZWM7CisJZGVidWdfaW5mb190CQkJKmhiYTsKKwlkZWJ1Z19pbmZvX3QJCQkqc2FuOworCWRlYnVnX2luZm9fdAkJCSpzY3NpOworCXNwaW5sb2NrX3QJCQlyZWNfbG9jazsKKwlzcGlubG9ja190CQkJaGJhX2xvY2s7CisJc3BpbmxvY2tfdAkJCXNhbl9sb2NrOworCXNwaW5sb2NrX3QJCQlzY3NpX2xvY2s7CisJc3RydWN0IHpmY3BfZGJmX3JlY19yZWNvcmQJcmVjX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZAloYmFfYnVmOworCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkCXNhbl9idWY7CisJc3RydWN0IHpmY3BfZGJmX3Njc2lfcmVjb3JkCXNjc2lfYnVmOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIJCSphZGFwdGVyOworfTsKKworc3RhdGljIGlubGluZQordm9pZCB6ZmNwX2RiZl9oYmFfZnNmX3Jlc3AoY29uc3QgY2hhciAqdGFnMiwgaW50IGxldmVsLAorCQkJICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxLCBzdHJ1Y3QgemZjcF9kYmYgKmRiZikKK3sKKwlpZiAobGV2ZWwgPD0gZGJmLT5oYmEtPmxldmVsKQorCQlfemZjcF9kYmZfaGJhX2ZzZl9yZXNwb25zZSh0YWcyLCBsZXZlbCwgcmVxLCBkYmYpOworfQorCisvKioKKyAqIHpmY3BfZGJmX2hiYV9mc2ZfcmVzcG9uc2UgLSB0cmFjZSBldmVudCBmb3IgcmVxdWVzdCBjb21wbGV0aW9uCisgKiBAZnNmX3JlcTogcmVxdWVzdCB0aGF0IGhhcyBiZWVuIGNvbXBsZXRlZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgemZjcF9kYmZfaGJhX2ZzZl9yZXNwb25zZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCit7CisJc3RydWN0IHpmY3BfZGJmICpkYmYgPSByZXEtPmFkYXB0ZXItPmRiZjsKKwlzdHJ1Y3QgZnNmX3F0Y2IgKnF0Y2IgPSByZXEtPnF0Y2I7CisKKwlpZiAoKHF0Y2ItPnByZWZpeC5wcm90X3N0YXR1cyAhPSBGU0ZfUFJPVF9HT09EKSAmJgorCSAgICAocXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzICE9IEZTRl9QUk9UX0ZTRl9TVEFUVVNfUFJFU0VOVEVEKSkgeworCQl6ZmNwX2RiZl9oYmFfZnNmX3Jlc3AoInBlcnIiLCAxLCByZXEsIGRiZik7CisKKwl9IGVsc2UgaWYgKHF0Y2ItPmhlYWRlci5mc2Zfc3RhdHVzICE9IEZTRl9HT09EKSB7CisJCXpmY3BfZGJmX2hiYV9mc2ZfcmVzcCgiZmVyciIsIDEsIHJlcSwgZGJmKTsKKworCX0gZWxzZSBpZiAoKHJlcS0+ZnNmX2NvbW1hbmQgPT0gRlNGX1FUQ0JfT1BFTl9QT1JUX1dJVEhfRElEKSB8fAorCQkgICAocmVxLT5mc2ZfY29tbWFuZCA9PSBGU0ZfUVRDQl9PUEVOX0xVTikpIHsKKwkJemZjcF9kYmZfaGJhX2ZzZl9yZXNwKCJvcGVuIiwgNCwgcmVxLCBkYmYpOworCisJfSBlbHNlIGlmIChxdGNiLT5oZWFkZXIubG9nX2xlbmd0aCkgeworCQl6ZmNwX2RiZl9oYmFfZnNmX3Jlc3AoInF0Y2IiLCA1LCByZXEsIGRiZik7CisKKwl9IGVsc2UgeworCQl6ZmNwX2RiZl9oYmFfZnNmX3Jlc3AoIm5vcm0iLCA2LCByZXEsIGRiZik7CisJfQorIH0KKworLyoqCisgKiB6ZmNwX2RiZl9oYmFfZnNmX3Vuc29sIC0gdHJhY2UgZXZlbnQgZm9yIGFuIHVuc29saWNpdGVkIHN0YXR1cyBidWZmZXIKKyAqIEB0YWc6IHRhZyBpbmRpY2F0aW5nIHdoaWNoIGtpbmQgb2YgdW5zb2xpY2l0ZWQgc3RhdHVzIGhhcyBiZWVuIHJlY2VpdmVkCisgKiBAZGJmOiByZWZlcmVuY2UgdG8gZGJmIHN0cnVjdHVyZQorICogQHN0YXR1c19idWZmZXI6IGJ1ZmZlciBjb250YWluaW5nIHBheWxvYWQgb2YgdW5zb2xpY2l0ZWQgc3RhdHVzCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgemZjcF9kYmZfaGJhX2ZzZl91bnNvbChjb25zdCBjaGFyICp0YWcsIHN0cnVjdCB6ZmNwX2RiZiAqZGJmLAorCQkJICAgIHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpidWYpCit7CisJaW50IGxldmVsID0gMjsKKworCWlmIChsZXZlbCA8PSBkYmYtPmhiYS0+bGV2ZWwpCisJCV96ZmNwX2RiZl9oYmFfZnNmX3Vuc29sKHRhZywgbGV2ZWwsIGRiZiwgYnVmKTsKK30KKworc3RhdGljIGlubGluZQordm9pZCB6ZmNwX2RiZl9zY3NpKGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqdGFnMiwgaW50IGxldmVsLAorCQkgICBzdHJ1Y3QgemZjcF9kYmYgKmRiZiwgc3RydWN0IHNjc2lfY21uZCAqc2NtZCwKKwkJICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxLCB1bnNpZ25lZCBsb25nIG9sZF9pZCkKK3sKKwlpZiAobGV2ZWwgPD0gZGJmLT5zY3NpLT5sZXZlbCkKKwkJX3pmY3BfZGJmX3Njc2kodGFnLCB0YWcyLCBsZXZlbCwgZGJmLCBzY21kLCByZXEsIG9sZF9pZCk7Cit9CisKKy8qKgorICogemZjcF9kYmZfc2NzaV9yZXN1bHQgLSB0cmFjZSBldmVudCBmb3IgU0NTSSBjb21tYW5kIGNvbXBsZXRpb24KKyAqIEB0YWc6IHRhZyBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBTQ1NJIGNvbW1hbmQKKyAqIEBsZXZlbDogdHJhY2UgbGV2ZWwgYXBwbGljYWJsZSBmb3IgdGhpcyBldmVudAorICogQGFkYXB0ZXI6IGFkYXB0ZXIgdGhhdCBoYXMgYmVlbiB1c2VkIHRvIGlzc3VlIHRoZSBTQ1NJIGNvbW1hbmQKKyAqIEBzY21kOiBTQ1NJIGNvbW1hbmQgcG9pbnRlcgorICogQGZzZl9yZXE6IHJlcXVlc3QgdXNlZCB0byBpc3N1ZSBTQ1NJIGNvbW1hbmQgKG1pZ2h0IGJlIE5VTEwpCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgemZjcF9kYmZfc2NzaV9yZXN1bHQoY29uc3QgY2hhciAqdGFnLCBpbnQgbGV2ZWwsIHN0cnVjdCB6ZmNwX2RiZiAqZGJmLAorCQkJICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQoreworCXpmY3BfZGJmX3Njc2koInJzbHQiLCB0YWcsIGxldmVsLCBkYmYsIHNjbWQsIGZzZl9yZXEsIDApOworfQorCisvKioKKyAqIHpmY3BfZGJmX3Njc2lfYWJvcnQgLSB0cmFjZSBldmVudCBmb3IgU0NTSSBjb21tYW5kIGFib3J0CisgKiBAdGFnOiB0YWcgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgYWJvcnQgb3BlcmF0aW9uCisgKiBAYWRhcHRlcjogYWRhcHRlciB0aGFzIGhhcyBiZWVuIHVzZWQgdG8gaXNzdWUgU0NTSSBjb21tYW5kIHRvIGJlIGFib3J0ZWQKKyAqIEBzY21kOiBTQ1NJIGNvbW1hbmQgdG8gYmUgYWJvcnRlZAorICogQG5ld19yZXE6IHJlcXVlc3QgY29udGFpbmluZyBhYm9ydCAobWlnaHQgYmUgTlVMTCkKKyAqIEBvbGRfaWQ6IGlkZW50aWZpZXIgb2YgcmVxdWVzdCBjb250YWluZyBTQ1NJIGNvbW1hbmQgdG8gYmUgYWJvcnRlZAorICovCitzdGF0aWMgaW5saW5lCit2b2lkIHpmY3BfZGJmX3Njc2lfYWJvcnQoY29uc3QgY2hhciAqdGFnLCBzdHJ1Y3QgemZjcF9kYmYgKmRiZiwKKwkJCSBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpuZXdfcmVxLAorCQkJIHVuc2lnbmVkIGxvbmcgb2xkX2lkKQoreworCXpmY3BfZGJmX3Njc2koImFicnQiLCB0YWcsIDEsIGRiZiwgc2NtZCwgbmV3X3JlcSwgb2xkX2lkKTsKK30KKworLyoqCisgKiB6ZmNwX2RiZl9zY3NpX2RldnJlc2V0IC0gdHJhY2UgZXZlbnQgZm9yIExvZ2ljYWwgVW5pdCBvciBUYXJnZXQgUmVzZXQKKyAqIEB0YWc6IHRhZyBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiByZXNldCBvcGVyYXRpb24KKyAqIEBmbGFnOiBpbmRpY2F0ZXMgdHlwZSBvZiByZXNldCAoVGFyZ2V0IFJlc2V0LCBMb2dpY2FsIFVuaXQgUmVzZXQpCisgKiBAdW5pdDogdW5pdCB0aGF0IG5lZWRzIHJlc2V0CisgKiBAc2NzaV9jbW5kOiBTQ1NJIGNvbW1hbmQgd2hpY2ggY2F1c2VkIHRoaXMgZXJyb3IgcmVjb3ZlcnkKKyAqLworc3RhdGljIGlubGluZQordm9pZCB6ZmNwX2RiZl9zY3NpX2RldnJlc2V0KGNvbnN0IGNoYXIgKnRhZywgdTggZmxhZywgc3RydWN0IHpmY3BfdW5pdCAqdW5pdCwKKwkJCSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQpCit7CisJemZjcF9kYmZfc2NzaShmbGFnID09IEZDUF9UQVJHRVRfUkVTRVQgPyAidHJzdCIgOiAibHJzdCIsIHRhZywgMSwKKwkJCSAgICB1bml0LT5wb3J0LT5hZGFwdGVyLT5kYmYsIHNjc2lfY21uZCwgTlVMTCwgMCk7Cit9CisKICNlbmRpZiAvKiBaRkNQX0RCRl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAppbmRleCA0OWQwNTMyLi43ZGEyZmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKQEAgLTM3LDEwICszNyw4IEBACiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgogI2luY2x1ZGUgPGFzbS9zeXNpbmZvLmg+Ci0jaW5jbHVkZSAiemZjcF9kYmYuaCIKICNpbmNsdWRlICJ6ZmNwX2ZzZi5oIgogCi0KIC8qKioqKioqKioqKioqKioqKioqKiogR0VORVJBTCBERUZJTkVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBSRVFVRVNUX0xJU1RfU0laRSAxMjgKQEAgLTc1LDkgKzczLDYgQEAKIAogLyoqKioqKioqKioqKioqKiBGSUJSRSBDSEFOTkVMIFBST1RPQ09MIFNQRUNJRklDIERFRklORVMgKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIHRpbWVvdXQgZm9yIG5hbWUtc2VydmVyIGxvb2t1cCAoaW4gc2Vjb25kcykgKi8KLSNkZWZpbmUgWkZDUF9OU19HSURfUE5fVElNRU9VVAkJMTAKLQogLyogdGFzayBhdHRyaWJ1dGUgdmFsdWVzIGluIEZDUC0yIEZDUF9DTU5EIElVICovCiAjZGVmaW5lIFNJTVBMRV9RCTAKICNkZWZpbmUgSEVBRF9PRl9RCTEKQEAgLTIyNCw4ICsyMTksNiBAQAogI2RlZmluZSBaRkNQX1NUQVRVU19BREFQVEVSX1FESU9VUAkJMHgwMDAwMDAwMgogI2RlZmluZSBaRkNQX1NUQVRVU19BREFQVEVSX1hDT05GSUdfT0sJCTB4MDAwMDAwMDgKICNkZWZpbmUgWkZDUF9TVEFUVVNfQURBUFRFUl9IT1NUX0NPTl9JTklUCTB4MDAwMDAwMTAKLSNkZWZpbmUgWkZDUF9TVEFUVVNfQURBUFRFUl9FUlBfVEhSRUFEX1VQCTB4MDAwMDAwMjAKLSNkZWZpbmUgWkZDUF9TVEFUVVNfQURBUFRFUl9FUlBfVEhSRUFEX0tJTEwJMHgwMDAwMDA4MAogI2RlZmluZSBaRkNQX1NUQVRVU19BREFQVEVSX0VSUF9QRU5ESU5HCQkweDAwMDAwMTAwCiAjZGVmaW5lIFpGQ1BfU1RBVFVTX0FEQVBURVJfTElOS19VTlBMVUdHRUQJMHgwMDAwMDIwMAogCkBAIC0yMzQsNiArMjI3LDcgQEAKIAogLyogcmVtb3RlIHBvcnQgc3RhdHVzICovCiAjZGVmaW5lIFpGQ1BfU1RBVFVTX1BPUlRfUEhZU19PUEVOCQkweDAwMDAwMDAxCisjZGVmaW5lIFpGQ1BfU1RBVFVTX1BPUlRfTElOS19URVNUCQkweDAwMDAwMDAyCiAKIC8qIHdlbGwga25vd24gYWRkcmVzcyAoV0tBKSBwb3J0IHN0YXR1cyovCiBlbnVtIHpmY3Bfd2thX3N0YXR1cyB7CkBAIC0yNDksNyArMjQzLDYgQEAKIAogLyogRlNGIHJlcXVlc3Qgc3RhdHVzICh0aGlzIGRvZXMgbm90IGhhdmUgYSBjb21tb24gcGFydCkgKi8KICNkZWZpbmUgWkZDUF9TVEFUVVNfRlNGUkVRX1RBU0tfTUFOQUdFTUVOVAkweDAwMDAwMDAyCi0jZGVmaW5lIFpGQ1BfU1RBVFVTX0ZTRlJFUV9DT01QTEVURUQJCTB4MDAwMDAwMDQKICNkZWZpbmUgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SCQkweDAwMDAwMDA4CiAjZGVmaW5lIFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQCQkweDAwMDAwMDEwCiAjZGVmaW5lIFpGQ1BfU1RBVFVTX0ZTRlJFUV9BQk9SVFNVQ0NFRURFRAkweDAwMDAwMDQwCkBAIC0yNjYsMTIgKzI1OSwxNCBAQAogCiAvKiBob2xkcyB2YXJpb3VzIG1lbW9yeSBwb29scyBvZiBhbiBhZGFwdGVyICovCiBzdHJ1Y3QgemZjcF9hZGFwdGVyX21lbXBvb2wgewotCW1lbXBvb2xfdCAqZnNmX3JlcV9lcnA7Ci0JbWVtcG9vbF90ICpmc2ZfcmVxX3Njc2k7Ci0JbWVtcG9vbF90ICpmc2ZfcmVxX2Fib3J0OwotCW1lbXBvb2xfdCAqZnNmX3JlcV9zdGF0dXNfcmVhZDsKLQltZW1wb29sX3QgKmRhdGFfc3RhdHVzX3JlYWQ7Ci0JbWVtcG9vbF90ICpkYXRhX2dpZF9wbjsKKwltZW1wb29sX3QgKmVycF9yZXE7CisJbWVtcG9vbF90ICpnaWRfcG5fcmVxOworCW1lbXBvb2xfdCAqc2NzaV9yZXE7CisJbWVtcG9vbF90ICpzY3NpX2Fib3J0OworCW1lbXBvb2xfdCAqc3RhdHVzX3JlYWRfcmVxOworCW1lbXBvb2xfdCAqc3RhdHVzX3JlYWRfZGF0YTsKKwltZW1wb29sX3QgKmdpZF9wbl9kYXRhOworCW1lbXBvb2xfdCAqcXRjYl9wb29sOwogfTsKIAogLyoKQEAgLTMwNSw2ICszMDAsMTUgQEAKIAl1MzIgZF9pZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3QgY3RfaXVfZ3BuX2Z0X3JlcSB7CisJc3RydWN0IGN0X2hkciBoZWFkZXI7CisJdTggZmxhZ3M7CisJdTggZG9tYWluX2lkX3Njb3BlOworCXU4IGFyZWFfaWRfc2NvcGU7CisJdTggZmM0X3R5cGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCiAvKioKICAqIHN0cnVjdCB6ZmNwX3NlbmRfY3QgLSB1c2VkIHRvIHBhc3MgcGFyYW1ldGVycyB0byBmdW5jdGlvbiB6ZmNwX2ZzZl9zZW5kX2N0CiAgKiBAd2thX3BvcnQ6IHBvcnQgd2hlcmUgdGhlIHJlcXVlc3QgaXMgc2VudCB0bwpAQCAtMzEyLDcgKzMxNiw2IEBACiAgKiBAcmVzcDogc2NhdHRlci1nYXRoZXIgbGlzdCBmb3IgcmVzcG9uc2UKICAqIEBoYW5kbGVyOiBoYW5kbGVyIGZ1bmN0aW9uIChjYWxsZWQgZm9yIHJlc3BvbnNlIHRvIHRoZSByZXF1ZXN0KQogICogQGhhbmRsZXJfZGF0YTogZGF0YSBwYXNzZWQgdG8gaGFuZGxlciBmdW5jdGlvbgotICogQHRpbWVvdXQ6IEZTRiB0aW1lb3V0IGZvciB0aGlzIHJlcXVlc3QKICAqIEBjb21wbGV0aW9uOiBjb21wbGV0aW9uIGZvciBzeW5jaHJvbml6YXRpb24gcHVycG9zZXMKICAqIEBzdGF0dXM6IHVzZWQgdG8gcGFzcyBlcnJvciBzdGF0dXMgdG8gY2FsbGluZyBmdW5jdGlvbgogICovCkBAIC0zMjIsNyArMzI1LDYgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnJlc3A7CiAJdm9pZCAoKmhhbmRsZXIpKHVuc2lnbmVkIGxvbmcpOwogCXVuc2lnbmVkIGxvbmcgaGFuZGxlcl9kYXRhOwotCWludCB0aW1lb3V0OwogCXN0cnVjdCBjb21wbGV0aW9uICpjb21wbGV0aW9uOwogCWludCBzdGF0dXM7CiB9OwpAQCAtNDIwLDYgKzQyMiwyOSBAQAogCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKKy8qKiBzdHJ1Y3QgemZjcF9xZGlvIC0gYmFzaWMgUURJTyBkYXRhIHN0cnVjdHVyZQorICogQHJlc3BfcTogcmVzcG9uc2UgcXVldWUKKyAqIEByZXFfcTogcmVxdWVzdCBxdWV1ZQorICogQHN0YXRfbG9jazogbG9jayB0byBwcm90ZWN0IHJlcV9xX3V0aWwgYW5kIHJlcV9xX3RpbWUKKyAqIEByZXFfcV9sb2NrOyBsb2NrIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gcmVxdWVzdCBxdWV1ZQorICogQHJlcV9xX3RpbWU6IHRpbWUgb2YgbGFzdCBmaWxsIGxldmVsIGNoYW5nZQorICogQHJlcV9xX3V0aWw6IHVzZWQgZm9yIGFjY291bnRpbmcKKyAqIEByZXFfcV9mdWxsOiBxdWV1ZSBmdWxsIGluY2lkZW50cworICogQHJlcV9xX3dxOiB1c2VkIHRvIHdhaXQgZm9yIFNCQUwgYXZhaWxhYmlsaXR5CisgKiBAYWRhcHRlcjogYWRhcHRlciB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBRRElPIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgemZjcF9xZGlvIHsKKwlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlCXJlc3BfcTsKKwlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlCXJlcV9xOworCXNwaW5sb2NrX3QJCXN0YXRfbG9jazsKKwlzcGlubG9ja190CQlyZXFfcV9sb2NrOworCXVuc2lnbmVkIGxvbmcgbG9uZwlyZXFfcV90aW1lOworCXU2NAkJCXJlcV9xX3V0aWw7CisJYXRvbWljX3QJCXJlcV9xX2Z1bGw7CisJd2FpdF9xdWV1ZV9oZWFkX3QJcmVxX3Ffd3E7CisJc3RydWN0IHpmY3BfYWRhcHRlcgkqYWRhcHRlcjsKK307CisKIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgewogCWF0b21pY190ICAgICAgICAgICAgICAgIHJlZmNvdW50OyAgICAgICAgICAvKiByZWZlcmVuY2UgY291bnQgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdAlyZW1vdmVfd3E7ICAgICAgICAgLyogY2FuIGJlIHVzZWQgdG8gd2FpdCBmb3IKQEAgLTQyOCw2ICs0NTMsNyBAQAogCXU2NAkJCXBlZXJfd3dwbjsJICAgLyogUDJQIHBlZXIgV1dQTiAqLwogCXUzMgkJCXBlZXJfZF9pZDsJICAgLyogUDJQIHBlZXIgRF9JRCAqLwogCXN0cnVjdCBjY3dfZGV2aWNlICAgICAgICpjY3dfZGV2aWNlOwkgICAvKiBTLzM5MCBjY3cgZGV2aWNlICovCisJc3RydWN0IHpmY3BfcWRpbwkqcWRpbzsKIAl1MzIJCQloeWRyYV92ZXJzaW9uOwkgICAvKiBIeWRyYSB2ZXJzaW9uICovCiAJdTMyCQkJZnNmX2xpY192ZXJzaW9uOwogCXUzMgkJCWFkYXB0ZXJfZmVhdHVyZXM7ICAvKiBGQ1AgY2hhbm5lbCBmZWF0dXJlcyAqLwpAQCAtNDM5LDE1ICs0NjUsNyBAQAogCXVuc2lnbmVkIGxvbmcJCXJlcV9ubzsJCSAgIC8qIHVuaXF1ZSBGU0YgcmVxIG51bWJlciAqLwogCXN0cnVjdCBsaXN0X2hlYWQJKnJlcV9saXN0OwkgICAvKiBsaXN0IG9mIHBlbmRpbmcgcmVxcyAqLwogCXNwaW5sb2NrX3QJCXJlcV9saXN0X2xvY2s7CSAgIC8qIHJlcXVlc3QgbGlzdCBsb2NrICovCi0Jc3RydWN0IHpmY3BfcWRpb19xdWV1ZQlyZXFfcTsJCSAgIC8qIHJlcXVlc3QgcXVldWUgKi8KLQlzcGlubG9ja190CQlyZXFfcV9sb2NrOwkgICAvKiBmb3Igb3BlcmF0aW9ucyBvbiBxdWV1ZSAqLwotCWt0aW1lX3QJCQlyZXFfcV90aW1lOyAvKiB0aW1lIG9mIGxhc3QgZmlsbCBsZXZlbCBjaGFuZ2UgKi8KLQl1NjQJCQlyZXFfcV91dGlsOyAvKiBmb3IgYWNjb3VudGluZyAqLwotCXNwaW5sb2NrX3QJCXFkaW9fc3RhdF9sb2NrOwogCXUzMgkJCWZzZl9yZXFfc2VxX25vOwkgICAvKiBGU0YgY21uZCBzZXEgbnVtYmVyICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJcmVxdWVzdF93cTsJICAgLyogY2FuIGJlIHVzZWQgdG8gd2FpdCBmb3IKLQkJCQkJCSAgICAgIG1vcmUgYXZhbGlhYmxlIFNCQUxzICovCi0Jc3RydWN0IHpmY3BfcWRpb19xdWV1ZQlyZXNwX3E7CSAgIC8qIHJlc3BvbnNlIHF1ZXVlICovCiAJcndsb2NrX3QJCWFib3J0X2xvY2s7ICAgICAgICAvKiBQcm90ZWN0cyBhZ2FpbnN0IFNDU0kKIAkJCQkJCSAgICAgIHN0YWNrIGFib3J0L2NvbW1hbmQKIAkJCQkJCSAgICAgIGNvbXBsZXRpb24gcmFjZXMgKi8KQEAgLTQ1NiwxMCArNDc0LDkgQEAKIAlhdG9taWNfdAkJc3RhdHVzOwkgICAgICAgICAgIC8qIHN0YXR1cyBvZiB0aGlzIGFkYXB0ZXIgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWVycF9yZWFkeV9oZWFkOwkgICAvKiBlcnJvciByZWNvdmVyeSBmb3IgdGhpcwogCQkJCQkJICAgICAgYWRhcHRlci9kZXZpY2VzICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJZXJwX3JlYWR5X3dxOwogCXN0cnVjdCBsaXN0X2hlYWQJZXJwX3J1bm5pbmdfaGVhZDsKIAlyd2xvY2tfdAkJZXJwX2xvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZQllcnBfcmVhZHlfc2VtOwotCXdhaXRfcXVldWVfaGVhZF90CWVycF90aHJlYWRfd3FoOwogCXdhaXRfcXVldWVfaGVhZF90CWVycF9kb25lX3dxaDsKIAlzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uCWVycF9hY3Rpb247CSAgIC8qIHBlbmRpbmcgZXJyb3IgcmVjb3ZlcnkgKi8KICAgICAgICAgYXRvbWljX3QgICAgICAgICAgICAgICAgZXJwX2NvdW50ZXI7CkBAIC00NjcsMjcgKzQ4NCwxNiBAQAogCQkJCQkJICAgICAgYWN0aW9ucyAqLwogCXUzMgkJCWVycF9sb3dfbWVtX2NvdW50OyAvKiBuciBvZiBlcnAgYWN0aW9ucyB3YWl0aW5nCiAJCQkJCQkgICAgICBmb3IgbWVtb3J5ICovCisJc3RydWN0IHRhc2tfc3RydWN0CSplcnBfdGhyZWFkOwogCXN0cnVjdCB6ZmNwX3drYV9wb3J0cwkqZ3M7CQkgICAvKiBnZW5lcmljIHNlcnZpY2VzICovCi0JZGVidWdfaW5mb190CQkqcmVjX2RiZjsKLQlkZWJ1Z19pbmZvX3QJCSpoYmFfZGJmOwotCWRlYnVnX2luZm9fdAkJKnNhbl9kYmY7ICAgICAgICAgIC8qIGRlYnVnIGZlYXR1cmUgYXJlYXMgKi8KLQlkZWJ1Z19pbmZvX3QJCSpzY3NpX2RiZjsKLQlzcGlubG9ja190CQlyZWNfZGJmX2xvY2s7Ci0Jc3BpbmxvY2tfdAkJaGJhX2RiZl9sb2NrOwotCXNwaW5sb2NrX3QJCXNhbl9kYmZfbG9jazsKLQlzcGlubG9ja190CQlzY3NpX2RiZl9sb2NrOwotCXN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkCXJlY19kYmZfYnVmOwotCXN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkCWhiYV9kYmZfYnVmOwotCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkCXNhbl9kYmZfYnVmOwotCXN0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZAlzY3NpX2RiZl9idWY7CisJc3RydWN0IHpmY3BfZGJmCQkqZGJmOwkJICAgLyogZGVidWcgdHJhY2VzICovCiAJc3RydWN0IHpmY3BfYWRhcHRlcl9tZW1wb29sCXBvb2w7ICAgICAgLyogQWRhcHRlciBtZW1vcnkgcG9vbHMgKi8KLQlzdHJ1Y3QgcWRpb19pbml0aWFsaXplICBxZGlvX2luaXRfZGF0YTsgICAgLyogZm9yIHFkaW9fZXN0YWJsaXNoICovCiAJc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyAqZmNfc3RhdHM7CiAJc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9wb3J0ICpzdGF0c19yZXNldF9kYXRhOwogCXVuc2lnbmVkIGxvbmcJCXN0YXRzX3Jlc2V0OwogCXN0cnVjdCB3b3JrX3N0cnVjdAlzY2FuX3dvcms7CiAJc3RydWN0IHNlcnZpY2VfbGV2ZWwJc2VydmljZV9sZXZlbDsKLQlhdG9taWNfdAkJcWRpb19vdXRiX2Z1bGw7CSAgIC8qIHF1ZXVlIGZ1bGwgaW5jaWRlbnRzICovCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKndvcmtfcXVldWU7CiB9OwogCiBzdHJ1Y3QgemZjcF9wb3J0IHsKQEAgLTUzMSwzNiArNTM3LDY0IEBACiAJc3RydWN0IHdvcmtfc3RydWN0CXNjc2lfd29yazsKIH07CiAKLS8qIEZTRiByZXF1ZXN0ICovCisvKioKKyAqIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAtIHF1ZXVlIHJlbGF0ZWQgdmFsdWVzIGZvciBhIHJlcXVlc3QKKyAqIEBzYmFsX251bWJlcjogbnVtYmVyIG9mIGZyZWUgU0JBTHMKKyAqIEBzYmFsX2ZpcnN0OiBmaXJzdCBTQkFMIGZvciB0aGlzIHJlcXVlc3QKKyAqIEBzYmFsX2xhc3Q6IGxhc3QgU0JBTCBmb3IgdGhpcyByZXF1ZXN0CisgKiBAc2JhbF9saW1pdDogbGFzdCBwb3NzaWJsZSBTQkFMIGZvciB0aGlzIHJlcXVlc3QKKyAqIEBzYmFsZV9jdXJyOiBjdXJyZW50IFNCQUxFIGF0IGNyZWF0aW9uIG9mIHRoaXMgcmVxdWVzdAorICogQHNiYWxfcmVzcG9uc2U6IFNCQUwgdXNlZCBpbiBpbnRlcnJ1cHQKKyAqIEBxZGlvX291dGJfdXNhZ2U6IHVzYWdlIG9mIG91dGJvdW5kIHF1ZXVlCisgKiBAcWRpb19pbmJfdXNhZ2U6IHVzYWdlIG9mIGluYm91bmQgcXVldWUKKyAqLworc3RydWN0IHpmY3BfcXVldWVfcmVxIHsKKwl1OAkJICAgICAgIHNiYWxfbnVtYmVyOworCXU4CQkgICAgICAgc2JhbF9maXJzdDsKKwl1OAkJICAgICAgIHNiYWxfbGFzdDsKKwl1OAkJICAgICAgIHNiYWxfbGltaXQ7CisJdTgJCSAgICAgICBzYmFsZV9jdXJyOworCXU4CQkgICAgICAgc2JhbF9yZXNwb25zZTsKKwl1MTYJCSAgICAgICBxZGlvX291dGJfdXNhZ2U7CisJdTE2CQkgICAgICAgcWRpb19pbmJfdXNhZ2U7Cit9OworCisvKioKKyAqIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgLSBiYXNpYyBGU0YgcmVxdWVzdCBzdHJ1Y3R1cmUKKyAqIEBsaXN0OiBsaXN0IG9mIEZTRiByZXF1ZXN0cworICogQHJlcV9pZDogdW5pcXVlIHJlcXVlc3QgSUQKKyAqIEBhZGFwdGVyOiBhZGFwdGVyIHRoaXMgcmVxdWVzdCBiZWxvbmdzIHRvCisgKiBAcXVldWVfcmVxOiBxdWV1ZSByZWxhdGVkIHZhbHVlcworICogQGNvbXBsZXRpb246IHVzZWQgdG8gc2lnbmFsIHRoZSBjb21wbGV0aW9uIG9mIHRoZSByZXF1ZXN0CisgKiBAc3RhdHVzOiBzdGF0dXMgb2YgdGhlIHJlcXVlc3QKKyAqIEBmc2ZfY29tbWFuZDogRlNGIGNvbW1hbmQgaXNzdWVkCisgKiBAcXRjYjogYXNzb2NpYXRlZCBRVENCCisgKiBAc2VxX25vOiBzZXF1ZW5jZSBudW1iZXIgb2YgdGhpcyByZXF1ZXN0CisgKiBAZGF0YTogcHJpdmF0ZSBkYXRhCisgKiBAdGltZXI6IHRpbWVyIGRhdGEgb2YgdGhpcyByZXF1ZXN0CisgKiBAZXJwX2FjdGlvbjogcmVmZXJlbmNlIHRvIGVycCBhY3Rpb24gaWYgcmVxdWVzdCBpc3N1ZWQgb24gYmVoYWxmIG9mIEVSUAorICogQHBvb2w6IHJlZmVyZW5jZSB0byBtZW1vcnkgcG9vbCBpZiB1c2VkIGZvciB0aGlzIHJlcXVlc3QKKyAqIEBpc3N1ZWQ6IHRpbWUgd2hlbiByZXF1ZXN0IHdhcyBzZW5kIChTVENLKQorICogQHVuaXQ6IHJlZmVyZW5jZSB0byB1bml0IGlmIHRoaXMgcmVxdWVzdCBpcyBhIFNDU0kgcmVxdWVzdAorICogQGhhbmRsZXI6IGhhbmRsZXIgd2hpY2ggc2hvdWxkIGJlIGNhbGxlZCB0byBwcm9jZXNzIHJlc3BvbnNlCisgKi8KIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgewotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgbGlzdDsJICAgICAgIC8qIGxpc3Qgb2YgRlNGIHJlcXVlc3RzICovCi0JdW5zaWduZWQgbG9uZwkgICAgICAgcmVxX2lkOwkgICAgICAgLyogdW5pcXVlIHJlcXVlc3QgSUQgKi8KLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICAgICphZGFwdGVyOyAgICAgICAvKiBhZGFwdGVyIHJlcXVlc3QgYmVsb25ncyB0byAqLwotCXU4CQkgICAgICAgc2JhbF9udW1iZXI7ICAgIC8qIG5yIG9mIFNCQUxzIGZyZWUgZm9yIHVzZSAqLwotCXU4CQkgICAgICAgc2JhbF9maXJzdDsgICAgIC8qIGZpcnN0IFNCQUwgZm9yIHRoaXMgcmVxdWVzdCAqLwotCXU4CQkgICAgICAgc2JhbF9sYXN0OyAgICAgIC8qIGxhc3QgU0JBTCBmb3IgdGhpcyByZXF1ZXN0ICovCi0JdTgJCSAgICAgICBzYmFsX2xpbWl0OyAgICAgIC8qIGxhc3QgcG9zc2libGUgU0JBTCBmb3IKLQkJCQkJCSAgdGhpcyByZXVlc3QgKi8KLQl1OAkJICAgICAgIHNiYWxlX2N1cnI7ICAgICAvKiBjdXJyZW50IFNCQUxFIGR1cmluZyBjcmVhdGlvbgotCQkJCQkJICBvZiByZXF1ZXN0ICovCi0JdTgJCQlzYmFsX3Jlc3BvbnNlOwkvKiBTQkFMIHVzZWQgaW4gaW50ZXJydXB0ICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgICAgICBjb21wbGV0aW9uX3dxOyAgLyogY2FuIGJlIHVzZWQgYnkgYSByb3V0aW5lCi0JCQkJCQkgIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KLQl1MzIJCQlzdGF0dXM7CSAgICAgICAvKiBzdGF0dXMgb2YgdGhpcyByZXF1ZXN0ICovCi0JdTMyCQkgICAgICAgZnNmX2NvbW1hbmQ7ICAgIC8qIEZTRiBDb21tYW5kIGNvcHkgKi8KLQlzdHJ1Y3QgZnNmX3F0Y2IJICAgICAgICpxdGNiOwkgICAgICAgLyogYWRkcmVzcyBvZiBhc3NvY2lhdGVkIFFUQ0IgKi8KLQl1MzIJCSAgICAgICBzZXFfbm87ICAgICAgICAgLyogU2VxdWVuY2UgbnVtYmVyIG9mIHJlcXVlc3QgKi8KLQl2b2lkCQkJKmRhdGE7ICAgICAgICAgICAvKiBwcml2YXRlIGRhdGEgb2YgcmVxdWVzdCAqLwotCXN0cnVjdCB0aW1lcl9saXN0ICAgICB0aW1lcjsJICAgICAgIC8qIHVzZWQgZm9yIGVycCBvciBzY3NpIGVyICovCi0Jc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbjsgICAgLyogdXNlZCBpZiB0aGlzIHJlcXVlc3QgaXMKLQkJCQkJCSAgaXNzdWVkIG9uIGJlaGFsZiBvZiBlcnAgKi8KLQltZW1wb29sX3QJICAgICAgICpwb29sOwkgICAgICAgLyogdXNlZCBpZiByZXF1ZXN0IHdhcyBhbGxvYWN0ZWQKLQkJCQkJCSAgZnJvbSBlbWVyZ2VuY3kgcG9vbCAqLwotCXVuc2lnbmVkIGxvbmcgbG9uZyAgICAgaXNzdWVkOyAgICAgICAgIC8qIHJlcXVlc3Qgc2VudCB0aW1lIChTVENLKSAqLwotCXN0cnVjdCB6ZmNwX3VuaXQgICAgICAgKnVuaXQ7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXVuc2lnbmVkIGxvbmcJCXJlcV9pZDsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyCSphZGFwdGVyOworCXN0cnVjdCB6ZmNwX3F1ZXVlX3JlcQlxdWV1ZV9yZXE7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGlvbjsKKwl1MzIJCQlzdGF0dXM7CisJdTMyCQkJZnNmX2NvbW1hbmQ7CisJc3RydWN0IGZzZl9xdGNiCQkqcXRjYjsKKwl1MzIJCQlzZXFfbm87CisJdm9pZAkJCSpkYXRhOworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOworCXN0cnVjdCB6ZmNwX2VycF9hY3Rpb24JKmVycF9hY3Rpb247CisJbWVtcG9vbF90CQkqcG9vbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcJaXNzdWVkOworCXN0cnVjdCB6ZmNwX3VuaXQJKnVuaXQ7CiAJdm9pZAkJCSgqaGFuZGxlcikoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKLQl1MTYJCQlxZGlvX291dGJfdXNhZ2U7LyogdXNhZ2Ugb2Ygb3V0Ym91bmQgcXVldWUgKi8KLQl1MTYJCQlxZGlvX2luYl91c2FnZTsJLyogdXNhZ2Ugb2YgaW5ib3VuZCBxdWV1ZSAqLwogfTsKIAogLyogZHJpdmVyIGRhdGEgKi8KQEAgLTU3MCwxOCArNjA0LDExIEBACiAJcndsb2NrX3QgICAgICAgICAgICAgICAgY29uZmlnX2xvY2s7ICAgICAgICAvKiBzZXJpYWxpc2VzIGNoYW5nZXMKIAkJCQkJCSAgICAgICB0byBhZGFwdGVyL3BvcnQvdW5pdAogCQkJCQkJICAgICAgIGxpc3RzICovCi0Jc3RydWN0IHNlbWFwaG9yZSAgICAgICAgY29uZmlnX3NlbWE7ICAgICAgICAvKiBzZXJpYWxpc2VzIGNvbmZpZ3VyYXRpb24KLQkJCQkJCSAgICAgICBjaGFuZ2VzICovCi0Jc3RydWN0IGttZW1fY2FjaGUJKmZzZl9yZXFfcXRjYl9jYWNoZTsKKwlzdHJ1Y3QgbXV0ZXgJCWNvbmZpZ19tdXRleDsKKwlzdHJ1Y3Qga21lbV9jYWNoZQkqZ3BuX2Z0X2NhY2hlOworCXN0cnVjdCBrbWVtX2NhY2hlCSpxdGNiX2NhY2hlOwogCXN0cnVjdCBrbWVtX2NhY2hlCSpzcl9idWZmZXJfY2FjaGU7CiAJc3RydWN0IGttZW1fY2FjaGUJKmdpZF9wbl9jYWNoZTsKLQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd29ya19xdWV1ZTsKLX07Ci0KLS8qIHN0cnVjdCB1c2VkIGJ5IG1lbW9yeSBwb29scyBmb3IgZnNmX3JlcXVlc3RzICovCi1zdHJ1Y3QgemZjcF9mc2ZfcmVxX3F0Y2IgewotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgZnNmX3JlcTsKLQlzdHJ1Y3QgZnNmX3F0Y2IgcXRjYjsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqIFpGQ1AgU1BFQ0lGSUMgREVGSU5FUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCmluZGV4IGM3NWQ2ZjMuLjczZDM2NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwpAQCAtOSw2ICs5LDcgQEAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCiAjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CiAKKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSAiemZjcF9leHQuaCIKIAogI2RlZmluZSBaRkNQX01BWF9FUlBTICAgICAgICAgICAgICAgICAgIDMKQEAgLTI2LDcgKzI3LDYgQEAKIAlaRkNQX0VSUF9TVEVQX0ZTRl9YQ09ORklHCT0gMHgwMDAxLAogCVpGQ1BfRVJQX1NURVBfUEhZU19QT1JUX0NMT1NJTkcJPSAweDAwMTAsCiAJWkZDUF9FUlBfU1RFUF9QT1JUX0NMT1NJTkcJPSAweDAxMDAsCi0JWkZDUF9FUlBfU1RFUF9OQU1FU0VSVkVSX0xPT0tVUAk9IDB4MDQwMCwKIAlaRkNQX0VSUF9TVEVQX1BPUlRfT1BFTklORwk9IDB4MDgwMCwKIAlaRkNQX0VSUF9TVEVQX1VOSVRfQ0xPU0lORwk9IDB4MTAwMCwKIAlaRkNQX0VSUF9TVEVQX1VOSVRfT1BFTklORwk9IDB4MjAwMCwKQEAgLTc1LDkgKzc1LDkgQEAKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gYWN0LT5hZGFwdGVyOwogCiAJbGlzdF9tb3ZlKCZhY3QtPmxpc3QsICZhY3QtPmFkYXB0ZXItPmVycF9yZWFkeV9oZWFkKTsKLQl6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKCJlcmFyZHkxIiwgYWN0KTsKLQl1cCgmYWRhcHRlci0+ZXJwX3JlYWR5X3NlbSk7Ci0JemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCgiZXJhcmR5MiIsIGFkYXB0ZXIpOworCXpmY3BfZGJmX3JlY19hY3Rpb24oImVyYXJkeTEiLCBhY3QpOworCXdha2VfdXAoJmFkYXB0ZXItPmVycF9yZWFkeV93cSk7CisJemZjcF9kYmZfcmVjX3RocmVhZCgiZXJhcmR5MiIsIGFkYXB0ZXItPmRiZik7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCkKQEAgLTE1MCw2ICsxNTAsOSBAQAogCQlhX3N0YXR1cyA9IGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpOwogCQlpZiAoYV9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFKQogCQkJcmV0dXJuIDA7CisJCWlmICghKGFfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcpICYmCisJCSAgICAhKGFfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pKQorCQkJcmV0dXJuIDA7IC8qIHNodXRkb3duIHJlcXVlc3RlZCBmb3IgY2xvc2VkIGFkYXB0ZXIgKi8KIAl9CiAKIAlyZXR1cm4gbmVlZDsKQEAgLTIxMyw4ICsyMTYsNyBAQAogCWludCByZXR2YWwgPSAxLCBuZWVkOwogCXN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCA9IE5VTEw7CiAKLQlpZiAoIShhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmCi0JICAgICAgWkZDUF9TVEFUVVNfQURBUFRFUl9FUlBfVEhSRUFEX1VQKSkKKwlpZiAoIWFkYXB0ZXItPmVycF90aHJlYWQpCiAJCXJldHVybiAtRUlPOwogCiAJbmVlZCA9IHpmY3BfZXJwX3JlcXVpcmVkX2FjdCh3YW50LCBhZGFwdGVyLCBwb3J0LCB1bml0KTsKQEAgLTIyNywxMiArMjI5LDExIEBACiAJCWdvdG8gb3V0OwogCSsrYWRhcHRlci0+ZXJwX3RvdGFsX2NvdW50OwogCWxpc3RfYWRkX3RhaWwoJmFjdC0+bGlzdCwgJmFkYXB0ZXItPmVycF9yZWFkeV9oZWFkKTsKLQl1cCgmYWRhcHRlci0+ZXJwX3JlYWR5X3NlbSk7Ci0JemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCgiZXJhY3RlMSIsIGFkYXB0ZXIpOworCXdha2VfdXAoJmFkYXB0ZXItPmVycF9yZWFkeV93cSk7CisJemZjcF9kYmZfcmVjX3RocmVhZCgiZXJhY3RlMSIsIGFkYXB0ZXItPmRiZik7CiAJcmV0dmFsID0gMDsKICBvdXQ6Ci0JemZjcF9yZWNfZGJmX2V2ZW50X3RyaWdnZXIoaWQsIHJlZiwgd2FudCwgbmVlZCwgYWN0LAotCQkJCSAgIGFkYXB0ZXIsIHBvcnQsIHVuaXQpOworCXpmY3BfZGJmX3JlY190cmlnZ2VyKGlkLCByZWYsIHdhbnQsIG5lZWQsIGFjdCwgYWRhcHRlciwgcG9ydCwgdW5pdCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNDQzLDI4ICs0NDQsMjggQEAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfdW5ibG9jayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogewogCWlmIChzdGF0dXNfY2hhbmdlX3NldChaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmYWRhcHRlci0+c3RhdHVzKSkKLQkJemZjcF9yZWNfZGJmX2V2ZW50X2FkYXB0ZXIoImVyYXVibDEiLCBOVUxMLCBhZGFwdGVyKTsKKwkJemZjcF9kYmZfcmVjX2FkYXB0ZXIoImVyYXVibDEiLCBOVUxMLCBhZGFwdGVyLT5kYmYpOwogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmYWRhcHRlci0+c3RhdHVzKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9lcnBfcG9ydF91bmJsb2NrKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7CiAJaWYgKHN0YXR1c19jaGFuZ2Vfc2V0KFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQsICZwb3J0LT5zdGF0dXMpKQotCQl6ZmNwX3JlY19kYmZfZXZlbnRfcG9ydCgiZXJwdWJsMSIsIE5VTEwsIHBvcnQpOworCQl6ZmNwX2RiZl9yZWNfcG9ydCgiZXJwdWJsMSIsIE5VTEwsIHBvcnQpOwogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmcG9ydC0+c3RhdHVzKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9lcnBfdW5pdF91bmJsb2NrKHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQpCiB7CiAJaWYgKHN0YXR1c19jaGFuZ2Vfc2V0KFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQsICZ1bml0LT5zdGF0dXMpKQotCQl6ZmNwX3JlY19kYmZfZXZlbnRfdW5pdCgiZXJ1dWJsMSIsIE5VTEwsIHVuaXQpOworCQl6ZmNwX2RiZl9yZWNfdW5pdCgiZXJ1dWJsMSIsIE5VTEwsIHVuaXQpOwogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmdW5pdC0+c3RhdHVzKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9lcnBfYWN0aW9uX3RvX3J1bm5pbmcoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKIHsKIAlsaXN0X21vdmUoJmVycF9hY3Rpb24tPmxpc3QsICZlcnBfYWN0aW9uLT5hZGFwdGVyLT5lcnBfcnVubmluZ19oZWFkKTsKLQl6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKCJlcmF0b3IxIiwgZXJwX2FjdGlvbik7CisJemZjcF9kYmZfcmVjX2FjdGlvbigiZXJhdG9yMSIsIGVycF9hY3Rpb24pOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9zdHJhdGVneV9jaGVja19mc2ZyZXEoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0KQpAQCAtNDgwLDEzICs0ODEsMTIgQEAKIAkJaWYgKGFjdC0+c3RhdHVzICYgKFpGQ1BfU1RBVFVTX0VSUF9ESVNNSVNTRUQgfAogCQkJCSAgIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkpIHsKIAkJCWFjdC0+ZnNmX3JlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQ7Ci0JCQl6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKCJlcnNjZl8xIiwgYWN0KTsKKwkJCXpmY3BfZGJmX3JlY19hY3Rpb24oImVyc2NmXzEiLCBhY3QpOwogCQkJYWN0LT5mc2ZfcmVxLT5lcnBfYWN0aW9uID0gTlVMTDsKIAkJfQogCQlpZiAoYWN0LT5zdGF0dXMgJiBaRkNQX1NUQVRVU19FUlBfVElNRURPVVQpCi0JCQl6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uKCJlcnNjZl8yIiwgYWN0KTsKLQkJaWYgKGFjdC0+ZnNmX3JlcS0+c3RhdHVzICYgKFpGQ1BfU1RBVFVTX0ZTRlJFUV9DT01QTEVURUQgfAotCQkJCQkgICAgWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRCkpCisJCQl6ZmNwX2RiZl9yZWNfYWN0aW9uKCJlcnNjZl8yIiwgYWN0KTsKKwkJaWYgKGFjdC0+ZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRCkKIAkJCWFjdC0+ZnNmX3JlcSA9IE5VTEw7CiAJfSBlbHNlCiAJCWFjdC0+ZnNmX3JlcSA9IE5VTEw7CkBAIC02MDQsOSArNjA0LDExIEBACiAKIHN0YXRpYyBpbnQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX3FkaW8oc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0KQogewotCWlmICh6ZmNwX3FkaW9fb3BlbihhY3QtPmFkYXB0ZXIpKQorCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBhY3QtPmFkYXB0ZXItPnFkaW87CisKKwlpZiAoemZjcF9xZGlvX29wZW4ocWRpbykpCiAJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmYWN0LT5hZGFwdGVyLT5yZXF1ZXN0X3dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxZGlvLT5yZXFfcV93cSk7CiAJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfUURJT1VQLCAmYWN0LT5hZGFwdGVyLT5zdGF0dXMpOwogCXJldHVybiBaRkNQX0VSUF9TVUNDRUVERUQ7CiB9CkBAIC02NDEsOSArNjQzLDEwIEBACiAJCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOwogCQl9CiAKLQkJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKCJlcmFzZngxIiwgYWRhcHRlcik7Ci0JCWRvd24oJmFkYXB0ZXItPmVycF9yZWFkeV9zZW0pOwotCQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soImVyYXNmeDIiLCBhZGFwdGVyKTsKKwkJemZjcF9kYmZfcmVjX3RocmVhZF9sb2NrKCJlcmFzZngxIiwgYWRhcHRlci0+ZGJmKTsKKwkJd2FpdF9ldmVudChhZGFwdGVyLT5lcnBfcmVhZHlfd3EsCisJCQkgICAhbGlzdF9lbXB0eSgmYWRhcHRlci0+ZXJwX3JlYWR5X2hlYWQpKTsKKwkJemZjcF9kYmZfcmVjX3RocmVhZF9sb2NrKCJlcmFzZngyIiwgYWRhcHRlci0+ZGJmKTsKIAkJaWYgKGVycF9hY3Rpb24tPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkKIAkJCWJyZWFrOwogCkBAIC02ODIsOSArNjg1LDEwIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKIAotCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jaygiZXJhc294MSIsIGFkYXB0ZXIpOwotCWRvd24oJmFkYXB0ZXItPmVycF9yZWFkeV9zZW0pOwotCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jaygiZXJhc294MiIsIGFkYXB0ZXIpOworCXpmY3BfZGJmX3JlY190aHJlYWRfbG9jaygiZXJhc294MSIsIGFkYXB0ZXItPmRiZik7CisJd2FpdF9ldmVudChhZGFwdGVyLT5lcnBfcmVhZHlfd3EsCisJCSAgICFsaXN0X2VtcHR5KCZhZGFwdGVyLT5lcnBfcmVhZHlfaGVhZCkpOworCXpmY3BfZGJmX3JlY190aHJlYWRfbG9jaygiZXJhc294MiIsIGFkYXB0ZXItPmRiZik7CiAJaWYgKGFjdC0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRVJQX1RJTUVET1VUKQogCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOwogCkBAIC03MTEsMTAgKzcxNSwxMCBAQAogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBhY3QtPmFkYXB0ZXI7CiAKIAkvKiBjbG9zZSBxdWV1ZXMgdG8gZW5zdXJlIHRoYXQgYnVmZmVycyBhcmUgbm90IGFjY2Vzc2VkIGJ5IGFkYXB0ZXIgKi8KLQl6ZmNwX3FkaW9fY2xvc2UoYWRhcHRlcik7CisJemZjcF9xZGlvX2Nsb3NlKGFkYXB0ZXItPnFkaW8pOwogCXpmY3BfZnNmX3JlcV9kaXNtaXNzX2FsbChhZGFwdGVyKTsKIAlhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubyA9IDA7Ci0JemZjcF9mY193a2FfcG9ydF9mb3JjZV9vZmZsaW5lKCZhZGFwdGVyLT5ncy0+ZHMpOworCXpmY3BfZmNfd2thX3BvcnRzX2ZvcmNlX29mZmxpbmUoYWRhcHRlci0+Z3MpOwogCS8qIGFsbCBwb3J0cyBhbmQgdW5pdHMgYXJlIGNsb3NlZCAqLwogCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLCAiZXJhc2NsMSIsIE5VTEwsCiAJCQkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOLCBaRkNQX0NMRUFSKTsKQEAgLTg0MSwyNyArODQ1LDYgQEAKIAlyZXR1cm4gemZjcF9lcnBfcG9ydF9zdHJhdGVneV9vcGVuX3BvcnQoYWN0KTsKIH0KIAotdm9pZCB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X29wZW5fbG9va3VwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlpbnQgcmV0dmFsOwotCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHpmY3BfcG9ydCwKLQkJCQkJICAgICAgZ2lkX3BuX3dvcmspOwotCi0JcmV0dmFsID0gemZjcF9mY19uc19naWRfcG4oJnBvcnQtPmVycF9hY3Rpb24pOwotCWlmICghcmV0dmFsKSB7Ci0JCXBvcnQtPmVycF9hY3Rpb24uc3RlcCA9IFpGQ1BfRVJQX1NURVBfTkFNRVNFUlZFUl9MT09LVVA7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAocmV0dmFsID09IC1FTk9NRU0pIHsKLQkJemZjcF9lcnBfbm90aWZ5KCZwb3J0LT5lcnBfYWN0aW9uLCBaRkNQX1NUQVRVU19FUlBfTE9XTUVNKTsKLQkJZ290byBvdXQ7Ci0JfQotCS8qIGFsbCBvdGhlciBlcnJvciBjb25kdGlvbnMgKi8KLQl6ZmNwX2VycF9ub3RpZnkoJnBvcnQtPmVycF9hY3Rpb24sIDApOwotb3V0OgotCXpmY3BfcG9ydF9wdXQocG9ydCk7Ci19Ci0KIHN0YXRpYyBpbnQgemZjcF9lcnBfcG9ydF9zdHJhdGVneV9vcGVuX2NvbW1vbihzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3QpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGFjdC0+YWRhcHRlcjsKQEAgLTg3NiwxNSArODU5LDExIEBACiAJCQlyZXR1cm4gemZjcF9lcnBfb3Blbl9wdHBfcG9ydChhY3QpOwogCQlpZiAoIXBvcnQtPmRfaWQpIHsKIAkJCXpmY3BfcG9ydF9nZXQocG9ydCk7Ci0JCQlpZiAoIXF1ZXVlX3dvcmsoemZjcF9kYXRhLndvcmtfcXVldWUsCisJCQlpZiAoIXF1ZXVlX3dvcmsoYWRhcHRlci0+d29ya19xdWV1ZSwKIAkJCQkJJnBvcnQtPmdpZF9wbl93b3JrKSkKIAkJCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOwotCQkJcmV0dXJuIFpGQ1BfRVJQX0NPTlRJTlVFUzsKKwkJCXJldHVybiBaRkNQX0VSUF9FWElUOwogCQl9Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgWkZDUF9FUlBfU1RFUF9OQU1FU0VSVkVSX0xPT0tVUDoKLQkJaWYgKCFwb3J0LT5kX2lkKQotCQkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKIAkJcmV0dXJuIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfb3Blbl9wb3J0KGFjdCk7CiAKIAljYXNlIFpGQ1BfRVJQX1NURVBfUE9SVF9PUEVOSU5HOgpAQCAtMTE2Myw3ICsxMTQyLDcgQEAKIAl9CiAKIAlsaXN0X2RlbCgmZXJwX2FjdGlvbi0+bGlzdCk7Ci0JemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbigiZXJhY3RkMSIsIGVycF9hY3Rpb24pOworCXpmY3BfZGJmX3JlY19hY3Rpb24oImVyYWN0ZDEiLCBlcnBfYWN0aW9uKTsKIAogCXN3aXRjaCAoZXJwX2FjdGlvbi0+YWN0aW9uKSB7CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1VOSVQ6CkBAIC0xMzExLDIwICsxMjkwLDE2IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqbmV4dDsKIAlzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaWdub3JlOwogCi0JZGFlbW9uaXplKCJ6ZmNwZXJwJXMiLCBkZXZfbmFtZSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7Ci0JLyogQmxvY2sgYWxsIHNpZ25hbHMgKi8KLQlzaWdpbml0c2V0aW52KCZjdXJyZW50LT5ibG9ja2VkLCAwKTsKLQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9FUlBfVEhSRUFEX1VQLCAmYWRhcHRlci0+c3RhdHVzKTsKLQl3YWtlX3VwKCZhZGFwdGVyLT5lcnBfdGhyZWFkX3dxaCk7CisJZm9yICg7OykgeworCQl6ZmNwX2RiZl9yZWNfdGhyZWFkX2xvY2soImVydGhyZDEiLCBhZGFwdGVyLT5kYmYpOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYWRhcHRlci0+ZXJwX3JlYWR5X3dxLAorCQkJICAgIWxpc3RfZW1wdHkoJmFkYXB0ZXItPmVycF9yZWFkeV9oZWFkKSB8fAorCQkJICAga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKwkJemZjcF9kYmZfcmVjX3RocmVhZF9sb2NrKCJlcnRocmQyIiwgYWRhcHRlci0+ZGJmKTsKIAotCXdoaWxlICghKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYKLQkJIFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9LSUxMKSkgewotCi0JCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jaygiZXJ0aHJkMSIsIGFkYXB0ZXIpOwotCQlpZ25vcmUgPSBkb3duX2ludGVycnVwdGlibGUoJmFkYXB0ZXItPmVycF9yZWFkeV9zZW0pOwotCQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soImVydGhyZDIiLCBhZGFwdGVyKTsKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWJyZWFrOwogCiAJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+ZXJwX2xvY2ssIGZsYWdzKTsKIAkJbmV4dCA9IGFkYXB0ZXItPmVycF9yZWFkeV9oZWFkLm5leHQ7CkBAIC0xMzM5LDkgKzEzMTQsNiBAQAogCQl9CiAJfQogCi0JYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9FUlBfVEhSRUFEX1VQLCAmYWRhcHRlci0+c3RhdHVzKTsKLQl3YWtlX3VwKCZhZGFwdGVyLT5lcnBfdGhyZWFkX3dxaCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM1MywxOCArMTMyNSwxNyBAQAogICovCiBpbnQgemZjcF9lcnBfdGhyZWFkX3NldHVwKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JaW50IHJldHZhbDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKIAotCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9VUCwgJmFkYXB0ZXItPnN0YXR1cyk7Ci0JcmV0dmFsID0ga2VybmVsX3RocmVhZCh6ZmNwX2VycF90aHJlYWQsIGFkYXB0ZXIsIFNJR0NITEQpOwotCWlmIChyZXR2YWwgPCAwKSB7CisJdGhyZWFkID0ga3RocmVhZF9ydW4oemZjcF9lcnBfdGhyZWFkLCBhZGFwdGVyLCAiemZjcGVycCVzIiwKKwkJCSAgICAgZGV2X25hbWUoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOworCWlmIChJU19FUlIodGhyZWFkKSkgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkiQ3JlYXRpbmcgYW4gRVJQIHRocmVhZCBmb3IgdGhlIEZDUCBkZXZpY2UgZmFpbGVkLlxuIik7Ci0JCXJldHVybiByZXR2YWw7CisJCXJldHVybiBQVFJfRVJSKHRocmVhZCk7CiAJfQotCXdhaXRfZXZlbnQoYWRhcHRlci0+ZXJwX3RocmVhZF93cWgsCi0JCSAgIGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYKLQkJCVpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9VUCk7CisKKwlhZGFwdGVyLT5lcnBfdGhyZWFkID0gdGhyZWFkOwogCXJldHVybiAwOwogfQogCkBAIC0xMzc5LDE2ICsxMzUwLDEwIEBACiAgKi8KIHZvaWQgemZjcF9lcnBfdGhyZWFkX2tpbGwoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9FUlBfVEhSRUFEX0tJTEwsICZhZGFwdGVyLT5zdGF0dXMpOwotCXVwKCZhZGFwdGVyLT5lcnBfcmVhZHlfc2VtKTsKLQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soImVydGhyazEiLCBhZGFwdGVyKTsKLQotCXdhaXRfZXZlbnQoYWRhcHRlci0+ZXJwX3RocmVhZF93cWgsCi0JCSAgICEoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJgotCQkJCVpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9VUCkpOwotCi0JYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9FUlBfVEhSRUFEX0tJTEwsCi0JCQkgICZhZGFwdGVyLT5zdGF0dXMpOworCWt0aHJlYWRfc3RvcChhZGFwdGVyLT5lcnBfdGhyZWFkKTsKKwlhZGFwdGVyLT5lcnBfdGhyZWFkID0gTlVMTDsKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZhZGFwdGVyLT5lcnBfcmVhZHlfaGVhZCkpOworCVdBUk5fT04oIWxpc3RfZW1wdHkoJmFkYXB0ZXItPmVycF9ydW5uaW5nX2hlYWQpKTsKIH0KIAogLyoqCkBAIC0xNDU2LDExICsxNDIxLDExIEBACiAKIAlpZiAoc2V0X29yX2NsZWFyID09IFpGQ1BfU0VUKSB7CiAJCWlmIChzdGF0dXNfY2hhbmdlX3NldChtYXNrLCAmYWRhcHRlci0+c3RhdHVzKSkKLQkJCXpmY3BfcmVjX2RiZl9ldmVudF9hZGFwdGVyKGlkLCByZWYsIGFkYXB0ZXIpOworCQkJemZjcF9kYmZfcmVjX2FkYXB0ZXIoaWQsIHJlZiwgYWRhcHRlci0+ZGJmKTsKIAkJYXRvbWljX3NldF9tYXNrKG1hc2ssICZhZGFwdGVyLT5zdGF0dXMpOwogCX0gZWxzZSB7CiAJCWlmIChzdGF0dXNfY2hhbmdlX2NsZWFyKG1hc2ssICZhZGFwdGVyLT5zdGF0dXMpKQotCQkJemZjcF9yZWNfZGJmX2V2ZW50X2FkYXB0ZXIoaWQsIHJlZiwgYWRhcHRlcik7CisJCQl6ZmNwX2RiZl9yZWNfYWRhcHRlcihpZCwgcmVmLCBhZGFwdGVyLT5kYmYpOwogCQlhdG9taWNfY2xlYXJfbWFzayhtYXNrLCAmYWRhcHRlci0+c3RhdHVzKTsKIAkJaWYgKG1hc2sgJiBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCkKIAkJCWF0b21pY19zZXQoJmFkYXB0ZXItPmVycF9jb3VudGVyLCAwKTsKQEAgLTE0OTAsMTEgKzE0NTUsMTEgQEAKIAogCWlmIChzZXRfb3JfY2xlYXIgPT0gWkZDUF9TRVQpIHsKIAkJaWYgKHN0YXR1c19jaGFuZ2Vfc2V0KG1hc2ssICZwb3J0LT5zdGF0dXMpKQotCQkJemZjcF9yZWNfZGJmX2V2ZW50X3BvcnQoaWQsIHJlZiwgcG9ydCk7CisJCQl6ZmNwX2RiZl9yZWNfcG9ydChpZCwgcmVmLCBwb3J0KTsKIAkJYXRvbWljX3NldF9tYXNrKG1hc2ssICZwb3J0LT5zdGF0dXMpOwogCX0gZWxzZSB7CiAJCWlmIChzdGF0dXNfY2hhbmdlX2NsZWFyKG1hc2ssICZwb3J0LT5zdGF0dXMpKQotCQkJemZjcF9yZWNfZGJmX2V2ZW50X3BvcnQoaWQsIHJlZiwgcG9ydCk7CisJCQl6ZmNwX2RiZl9yZWNfcG9ydChpZCwgcmVmLCBwb3J0KTsKIAkJYXRvbWljX2NsZWFyX21hc2sobWFzaywgJnBvcnQtPnN0YXR1cyk7CiAJCWlmIChtYXNrICYgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpCiAJCQlhdG9taWNfc2V0KCZwb3J0LT5lcnBfY291bnRlciwgMCk7CkBAIC0xNTE5LDExICsxNDg0LDExIEBACiB7CiAJaWYgKHNldF9vcl9jbGVhciA9PSBaRkNQX1NFVCkgewogCQlpZiAoc3RhdHVzX2NoYW5nZV9zZXQobWFzaywgJnVuaXQtPnN0YXR1cykpCi0JCQl6ZmNwX3JlY19kYmZfZXZlbnRfdW5pdChpZCwgcmVmLCB1bml0KTsKKwkJCXpmY3BfZGJmX3JlY191bml0KGlkLCByZWYsIHVuaXQpOwogCQlhdG9taWNfc2V0X21hc2sobWFzaywgJnVuaXQtPnN0YXR1cyk7CiAJfSBlbHNlIHsKIAkJaWYgKHN0YXR1c19jaGFuZ2VfY2xlYXIobWFzaywgJnVuaXQtPnN0YXR1cykpCi0JCQl6ZmNwX3JlY19kYmZfZXZlbnRfdW5pdChpZCwgcmVmLCB1bml0KTsKKwkJCXpmY3BfZGJmX3JlY191bml0KGlkLCByZWYsIHVuaXQpOwogCQlhdG9taWNfY2xlYXJfbWFzayhtYXNrLCAmdW5pdC0+c3RhdHVzKTsKIAkJaWYgKG1hc2sgJiBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCkgewogCQkJYXRvbWljX3NldCgmdW5pdC0+ZXJwX2NvdW50ZXIsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKaW5kZXggMzA0NGM2MC4uMzY5MzViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCkBAIC0zNCwzNyArMzQsMzEgQEAKIGV4dGVybiBzdHJ1Y3QgbWlzY2RldmljZSB6ZmNwX2NmZGNfbWlzYzsKIAogLyogemZjcF9kYmYuYyAqLwotZXh0ZXJuIGludCB6ZmNwX2FkYXB0ZXJfZGVidWdfcmVnaXN0ZXIoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKLWV4dGVybiB2b2lkIHpmY3BfYWRhcHRlcl9kZWJ1Z191bnJlZ2lzdGVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkKGNoYXIgKiwgc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKLWV4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jayhjaGFyICosIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfYWRhcHRlcihjaGFyICosIHZvaWQgKiwgc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKLWV4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9wb3J0KGNoYXIgKiwgdm9pZCAqLCBzdHJ1Y3QgemZjcF9wb3J0ICopOwotZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3VuaXQoY2hhciAqLCB2b2lkICosIHN0cnVjdCB6ZmNwX3VuaXQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdHJpZ2dlcihjaGFyICosIHZvaWQgKiwgdTgsIHU4LCB2b2lkICosCi0JCQkJICAgICAgIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKLQkJCQkgICAgICAgc3RydWN0IHpmY3BfcG9ydCAqLCBzdHJ1Y3QgemZjcF91bml0ICopOwotZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbihjaGFyICosIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Vuc29sKGNvbnN0IGNoYXIgKiwgc3RydWN0IHpmY3BfYWRhcHRlciAqLAotCQkJCQkgc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2hiYV9kYmZfZXZlbnRfcWRpbyhzdHJ1Y3QgemZjcF9hZGFwdGVyICosIHVuc2lnbmVkIGludCwgaW50LAotCQkJCSAgICBpbnQpOwotZXh0ZXJuIHZvaWQgemZjcF9oYmFfZGJmX2V2ZW50X2JlcnIoc3RydWN0IHpmY3BfYWRhcHRlciAqLAotCQkJCSAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotZXh0ZXJuIHZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2N0X3JlcXVlc3Qoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKLWV4dGVybiB2b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9jdF9yZXNwb25zZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotZXh0ZXJuIHZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2Vsc19yZXF1ZXN0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzX3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfaW5jb21pbmdfZWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3Njc2lfZGJmX2V2ZW50X3Jlc3VsdChjb25zdCBjaGFyICosIGludCwgc3RydWN0IHpmY3BfYWRhcHRlciAqLAotCQkJCSAgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICosCi0JCQkJICAgICAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHpmY3BfYWRhcHRlciAqLAotCQkJCSAgICAgIHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHpmY3BfZnNmX3JlcSAqLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldChjb25zdCBjaGFyICosIHU4LCBzdHJ1Y3QgemZjcF91bml0ICosCi0JCQkJCSBzdHJ1Y3Qgc2NzaV9jbW5kICopOworZXh0ZXJuIGludCB6ZmNwX2RiZl9hZGFwdGVyX3JlZ2lzdGVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CitleHRlcm4gdm9pZCB6ZmNwX2RiZl9hZGFwdGVyX3VucmVnaXN0ZXIoc3RydWN0IHpmY3BfZGJmICopOworZXh0ZXJuIHZvaWQgemZjcF9kYmZfcmVjX3RocmVhZChjaGFyICosIHN0cnVjdCB6ZmNwX2RiZiAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX3JlY190aHJlYWRfbG9jayhjaGFyICosIHN0cnVjdCB6ZmNwX2RiZiAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX3JlY19hZGFwdGVyKGNoYXIgKiwgdm9pZCAqLCBzdHJ1Y3QgemZjcF9kYmYgKik7CitleHRlcm4gdm9pZCB6ZmNwX2RiZl9yZWNfcG9ydChjaGFyICosIHZvaWQgKiwgc3RydWN0IHpmY3BfcG9ydCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX3JlY191bml0KGNoYXIgKiwgdm9pZCAqLCBzdHJ1Y3QgemZjcF91bml0ICopOworZXh0ZXJuIHZvaWQgemZjcF9kYmZfcmVjX3RyaWdnZXIoY2hhciAqLCB2b2lkICosIHU4LCB1OCwgdm9pZCAqLAorCQkJCSBzdHJ1Y3QgemZjcF9hZGFwdGVyICosIHN0cnVjdCB6ZmNwX3BvcnQgKiwKKwkJCQkgc3RydWN0IHpmY3BfdW5pdCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX3JlY19hY3Rpb24oY2hhciAqLCBzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOworZXh0ZXJuIHZvaWQgX3pmY3BfZGJmX2hiYV9mc2ZfcmVzcG9uc2UoY29uc3QgY2hhciAqLCBpbnQsIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKiwKKwkJCQkgICAgICAgc3RydWN0IHpmY3BfZGJmICopOworZXh0ZXJuIHZvaWQgX3pmY3BfZGJmX2hiYV9mc2ZfdW5zb2woY29uc3QgY2hhciAqLCBpbnQgbGV2ZWwsIHN0cnVjdCB6ZmNwX2RiZiAqLAorCQkJCQkgIHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICopOworZXh0ZXJuIHZvaWQgemZjcF9kYmZfaGJhX3FkaW8oc3RydWN0IHpmY3BfZGJmICosIHVuc2lnbmVkIGludCwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgemZjcF9kYmZfaGJhX2JlcnIoc3RydWN0IHpmY3BfZGJmICosIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CitleHRlcm4gdm9pZCB6ZmNwX2RiZl9zYW5fY3RfcmVxdWVzdChzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworZXh0ZXJuIHZvaWQgemZjcF9kYmZfc2FuX2N0X3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CitleHRlcm4gdm9pZCB6ZmNwX2RiZl9zYW5fZWxzX3JlcXVlc3Qoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX3Nhbl9lbHNfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX3Nhbl9pbmNvbWluZ19lbHMoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKK2V4dGVybiB2b2lkIF96ZmNwX2RiZl9zY3NpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQsIHN0cnVjdCB6ZmNwX2RiZiAqLAorCQkJICAgc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICosCisJCQkgICB1bnNpZ25lZCBsb25nKTsKIAogLyogemZjcF9lcnAuYyAqLwogZXh0ZXJuIHZvaWQgemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgY2hhciAqLApAQCAtOTYsMjIgKzkwLDIwIEBACiBleHRlcm4gdm9pZCB6ZmNwX2VycF9hZGFwdGVyX2FjY2Vzc19jaGFuZ2VkKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgY2hhciAqLAogCQkJCQkgICAgdm9pZCAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZXJwX3RpbWVvdXRfaGFuZGxlcih1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfb3Blbl9sb29rdXAoc3RydWN0IHdvcmtfc3RydWN0ICopOwogCiAvKiB6ZmNwX2ZjLmMgKi8KLWV4dGVybiBpbnQgemZjcF9zY2FuX3BvcnRzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gdm9pZCBfemZjcF9zY2FuX3BvcnRzX2xhdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK2V4dGVybiBpbnQgemZjcF9mY19zY2FuX3BvcnRzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CitleHRlcm4gdm9pZCBfemZjcF9mY19zY2FuX3BvcnRzX2xhdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfaW5jb21pbmdfZWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7Ci1leHRlcm4gaW50IHpmY3BfZmNfbnNfZ2lkX3BuKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CitleHRlcm4gdm9pZCB6ZmNwX2ZjX3BvcnRfZGlkX2xvb2t1cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX3Bsb2dpX2V2YWx1YXRlKHN0cnVjdCB6ZmNwX3BvcnQgKiwgc3RydWN0IGZzZl9wbG9naSAqKTsKLWV4dGVybiB2b2lkIHpmY3BfdGVzdF9saW5rKHN0cnVjdCB6ZmNwX3BvcnQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2ZjX3Rlc3RfbGluayhzdHJ1Y3QgemZjcF9wb3J0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19saW5rX3Rlc3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2ZjX3drYV9wb3J0X2ZvcmNlX29mZmxpbmUoc3RydWN0IHpmY3Bfd2thX3BvcnQgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2ZjX3drYV9wb3J0c19pbml0KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CitleHRlcm4gdm9pZCB6ZmNwX2ZjX3drYV9wb3J0c19mb3JjZV9vZmZsaW5lKHN0cnVjdCB6ZmNwX3drYV9wb3J0cyAqKTsKK2V4dGVybiBpbnQgemZjcF9mY19nc19zZXR1cChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOworZXh0ZXJuIHZvaWQgemZjcF9mY19nc19kZXN0cm95KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiBleHRlcm4gaW50IHpmY3BfZmNfZXhlY3V0ZV9lbHNfZmNfam9iKHN0cnVjdCBmY19ic2dfam9iICopOwogZXh0ZXJuIGludCB6ZmNwX2ZjX2V4ZWN1dGVfY3RfZmNfam9iKHN0cnVjdCBmY19ic2dfam9iICopOwotZXh0ZXJuIHZvaWQgemZjcF9mY193a2FfcG9ydF9mb3JjZV9vZmZsaW5lKHN0cnVjdCB6ZmNwX3drYV9wb3J0ICopOwotCiAKIC8qIHpmY3BfZnNmLmMgKi8KIGV4dGVybiBpbnQgemZjcF9mc2Zfb3Blbl9wb3J0KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CkBAIC0xMjIsMzcgKzExNCwzOSBAQAogZXh0ZXJuIGludCB6ZmNwX2ZzZl9vcGVuX3VuaXQoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKIGV4dGVybiBpbnQgemZjcF9mc2ZfY2xvc2VfdW5pdChzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOwogZXh0ZXJuIGludCB6ZmNwX2ZzZl9leGNoYW5nZV9jb25maWdfZGF0YShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOwotZXh0ZXJuIGludCB6ZmNwX2ZzZl9leGNoYW5nZV9jb25maWdfZGF0YV9zeW5jKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKK2V4dGVybiBpbnQgemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2RhdGFfc3luYyhzdHJ1Y3QgemZjcF9xZGlvICosCiAJCQkJCSAgICAgIHN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fY29uZmlnICopOwogZXh0ZXJuIGludCB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGEoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKLWV4dGVybiBpbnQgemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhX3N5bmMoc3RydWN0IHpmY3BfYWRhcHRlciAqLAorZXh0ZXJuIGludCB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGFfc3luYyhzdHJ1Y3QgemZjcF9xZGlvICosCiAJCQkJCSAgICBzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3BvcnQgKik7CiBleHRlcm4gc3RydWN0IHpmY3BfZnNmX3JlcSAqemZjcF9mc2ZfY29udHJvbF9maWxlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKIAkJCQkJCSAgc3RydWN0IHpmY3BfZnNmX2NmZGMgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZzZl9yZXFfZGlzbWlzc19hbGwoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKLWV4dGVybiBpbnQgemZjcF9mc2Zfc3RhdHVzX3JlYWQoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKK2V4dGVybiBpbnQgemZjcF9mc2Zfc3RhdHVzX3JlYWQoc3RydWN0IHpmY3BfcWRpbyAqKTsKIGV4dGVybiBpbnQgemZjcF9zdGF0dXNfcmVhZF9yZWZpbGwoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcik7Ci1leHRlcm4gaW50IHpmY3BfZnNmX3NlbmRfY3Qoc3RydWN0IHpmY3Bfc2VuZF9jdCAqLCBtZW1wb29sX3QgKiwKLQkJCSAgICBzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOworZXh0ZXJuIGludCB6ZmNwX2ZzZl9zZW5kX2N0KHN0cnVjdCB6ZmNwX3NlbmRfY3QgKiwgbWVtcG9vbF90ICopOwogZXh0ZXJuIGludCB6ZmNwX2ZzZl9zZW5kX2VscyhzdHJ1Y3QgemZjcF9zZW5kX2VscyAqKTsKIGV4dGVybiBpbnQgemZjcF9mc2Zfc2VuZF9mY3BfY29tbWFuZF90YXNrKHN0cnVjdCB6ZmNwX3VuaXQgKiwKIAkJCQkJICBzdHJ1Y3Qgc2NzaV9jbW5kICopOwotZXh0ZXJuIHZvaWQgemZjcF9mc2ZfcmVxX2NvbXBsZXRlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZzZl9yZXFfZnJlZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwogZXh0ZXJuIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX3NlbmRfZmNwX2N0bShzdHJ1Y3QgemZjcF91bml0ICosIHU4KTsKIGV4dGVybiBzdHJ1Y3QgemZjcF9mc2ZfcmVxICp6ZmNwX2ZzZl9hYm9ydF9mY3BfY29tbWFuZCh1bnNpZ25lZCBsb25nLAogCQkJCQkJICAgICAgIHN0cnVjdCB6ZmNwX3VuaXQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2ZzZl9yZXFpZF9jaGVjayhzdHJ1Y3QgemZjcF9xZGlvICosIGludCk7CiAKIC8qIHpmY3BfcWRpby5jICovCi1leHRlcm4gaW50IHpmY3BfcWRpb19hbGxvY2F0ZShzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwotZXh0ZXJuIHZvaWQgemZjcF9xZGlvX2ZyZWUoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKLWV4dGVybiBpbnQgemZjcF9xZGlvX3NlbmQoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKLWV4dGVybiBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqemZjcF9xZGlvX3NiYWxlX3JlcShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotZXh0ZXJuIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICp6ZmNwX3FkaW9fc2JhbGVfY3VycihzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotZXh0ZXJuIGludCB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICosIHVuc2lnbmVkIGxvbmcsCitleHRlcm4gaW50IHpmY3BfcWRpb19zZXR1cChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOworZXh0ZXJuIHZvaWQgemZjcF9xZGlvX2Rlc3Ryb3koc3RydWN0IHpmY3BfcWRpbyAqKTsKK2V4dGVybiBpbnQgemZjcF9xZGlvX3NlbmQoc3RydWN0IHpmY3BfcWRpbyAqLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKik7CitleHRlcm4gc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQKKwkqemZjcF9xZGlvX3NiYWxlX3JlcShzdHJ1Y3QgemZjcF9xZGlvICosIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqKTsKK2V4dGVybiBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudAorCSp6ZmNwX3FkaW9fc2JhbGVfY3VycihzdHJ1Y3QgemZjcF9xZGlvICosIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqKTsKK2V4dGVybiBpbnQgemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coc3RydWN0IHpmY3BfcWRpbyAqLAorCQkJCSAgIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqLCB1bnNpZ25lZCBsb25nLAogCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQpOwotZXh0ZXJuIGludCB6ZmNwX3FkaW9fb3BlbihzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwotZXh0ZXJuIHZvaWQgemZjcF9xZGlvX2Nsb3NlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CitleHRlcm4gaW50IHpmY3BfcWRpb19vcGVuKHN0cnVjdCB6ZmNwX3FkaW8gKik7CitleHRlcm4gdm9pZCB6ZmNwX3FkaW9fY2xvc2Uoc3RydWN0IHpmY3BfcWRpbyAqKTsKIAogLyogemZjcF9zY3NpLmMgKi8KIGV4dGVybiBzdHJ1Y3QgemZjcF9kYXRhIHpmY3BfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwppbmRleCA0N2RhZWJmLi43MjJmMjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCkBAIC0yNSwxNCArMjUsNiBAQAogCVtSU0NOX0ZBQlJJQ19BRERSRVNTXQkJPSAweDAwMDAwMCwKIH07CiAKLXN0cnVjdCBjdF9pdV9ncG5fZnRfcmVxIHsKLQlzdHJ1Y3QgY3RfaGRyIGhlYWRlcjsKLQl1OCBmbGFnczsKLQl1OCBkb21haW5faWRfc2NvcGU7Ci0JdTggYXJlYV9pZF9zY29wZTsKLQl1OCBmYzRfdHlwZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiBzdHJ1Y3QgZ3BuX2Z0X3Jlc3BfYWNjIHsKIAl1OCBjb250cm9sOwogCXU4IHBvcnRfaWRbM107CkBAIC02NSw3ICs1Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBoYW5kbGVyX2RhdGE7CiB9OwogCi1zdGF0aWMgaW50IHpmY3Bfd2thX3BvcnRfZ2V0KHN0cnVjdCB6ZmNwX3drYV9wb3J0ICp3a2FfcG9ydCkKK3N0YXRpYyBpbnQgemZjcF9mY193a2FfcG9ydF9nZXQoc3RydWN0IHpmY3Bfd2thX3BvcnQgKndrYV9wb3J0KQogewogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJndrYV9wb3J0LT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CkBAIC05MCw3ICs4Miw3IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3Bfd2thX3BvcnRfb2ZmbGluZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCB6ZmNwX2ZjX3drYV9wb3J0X29mZmxpbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3ID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogCXN0cnVjdCB6ZmNwX3drYV9wb3J0ICp3a2FfcG9ydCA9CkBAIC0xMTAsNyArMTAyLDcgQEAKIAltdXRleF91bmxvY2soJndrYV9wb3J0LT5tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3Bfd2thX3BvcnRfcHV0KHN0cnVjdCB6ZmNwX3drYV9wb3J0ICp3a2FfcG9ydCkKK3N0YXRpYyB2b2lkIHpmY3BfZmNfd2thX3BvcnRfcHV0KHN0cnVjdCB6ZmNwX3drYV9wb3J0ICp3a2FfcG9ydCkKIHsKIAlpZiAoYXRvbWljX2RlY19yZXR1cm4oJndrYV9wb3J0LT5yZWZjb3VudCkgIT0gMCkKIAkJcmV0dXJuOwpAQCAtMTI5LDEwICsxMjEsMTAgQEAKIAl3a2FfcG9ydC0+c3RhdHVzID0gWkZDUF9XS0FfUE9SVF9PRkZMSU5FOwogCWF0b21pY19zZXQoJndrYV9wb3J0LT5yZWZjb3VudCwgMCk7CiAJbXV0ZXhfaW5pdCgmd2thX3BvcnQtPm11dGV4KTsKLQlJTklUX0RFTEFZRURfV09SSygmd2thX3BvcnQtPndvcmssIHpmY3Bfd2thX3BvcnRfb2ZmbGluZSk7CisJSU5JVF9ERUxBWUVEX1dPUksoJndrYV9wb3J0LT53b3JrLCB6ZmNwX2ZjX3drYV9wb3J0X29mZmxpbmUpOwogfQogCi12b2lkIHpmY3BfZmNfd2thX3BvcnRfZm9yY2Vfb2ZmbGluZShzdHJ1Y3QgemZjcF93a2FfcG9ydCAqd2thKQorc3RhdGljIHZvaWQgemZjcF9mY193a2FfcG9ydF9mb3JjZV9vZmZsaW5lKHN0cnVjdCB6ZmNwX3drYV9wb3J0ICp3a2EpCiB7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3a2EtPndvcmspOwogCW11dGV4X2xvY2soJndrYS0+bXV0ZXgpOwpAQCAtMTQwLDE1ICsxMzIsMTMgQEAKIAltdXRleF91bmxvY2soJndrYS0+bXV0ZXgpOwogfQogCi12b2lkIHpmY3BfZmNfd2thX3BvcnRzX2luaXQoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3ZvaWQgemZjcF9mY193a2FfcG9ydHNfZm9yY2Vfb2ZmbGluZShzdHJ1Y3QgemZjcF93a2FfcG9ydHMgKmdzKQogewotCXN0cnVjdCB6ZmNwX3drYV9wb3J0cyAqZ3MgPSBhZGFwdGVyLT5nczsKLQotCXpmY3BfZmNfd2thX3BvcnRfaW5pdCgmZ3MtPm1zLCBGQ19GSURfTUdNVF9TRVJWLCBhZGFwdGVyKTsKLQl6ZmNwX2ZjX3drYV9wb3J0X2luaXQoJmdzLT50cywgRkNfRklEX1RJTUVfU0VSViwgYWRhcHRlcik7Ci0JemZjcF9mY193a2FfcG9ydF9pbml0KCZncy0+ZHMsIEZDX0ZJRF9ESVJfU0VSViwgYWRhcHRlcik7Ci0JemZjcF9mY193a2FfcG9ydF9pbml0KCZncy0+YXMsIEZDX0ZJRF9BTElBU0VTLCBhZGFwdGVyKTsKLQl6ZmNwX2ZjX3drYV9wb3J0X2luaXQoJmdzLT5rcywgRkNfRklEX1NFQ19LRVksIGFkYXB0ZXIpOworCXpmY3BfZmNfd2thX3BvcnRfZm9yY2Vfb2ZmbGluZSgmZ3MtPm1zKTsKKwl6ZmNwX2ZjX3drYV9wb3J0X2ZvcmNlX29mZmxpbmUoJmdzLT50cyk7CisJemZjcF9mY193a2FfcG9ydF9mb3JjZV9vZmZsaW5lKCZncy0+ZHMpOworCXpmY3BfZmNfd2thX3BvcnRfZm9yY2Vfb2ZmbGluZSgmZ3MtPmFzKTsKKwl6ZmNwX2ZjX3drYV9wb3J0X2ZvcmNlX29mZmxpbmUoJmdzLT5rcyk7CiB9CiAKIHN0YXRpYyB2b2lkIF96ZmNwX2ZjX2luY29taW5nX3JzY24oc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwgdTMyIHJhbmdlLApAQCAtMTYwLDcgKzE1MCw3IEBACiAJcmVhZF9sb2NrX2lycXNhdmUoJnpmY3BfZGF0YS5jb25maWdfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmZzZl9yZXEtPmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkLCBsaXN0KSB7CiAJCWlmICgocG9ydC0+ZF9pZCAmIHJhbmdlKSA9PSAoZWxlbS0+bnBvcnRfZGlkICYgcmFuZ2UpKQotCQkJemZjcF90ZXN0X2xpbmsocG9ydCk7CisJCQl6ZmNwX2ZjX3Rlc3RfbGluayhwb3J0KTsKIAkJaWYgKCFwb3J0LT5kX2lkKQogCQkJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwKIAkJCQkJICAgICBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKQEAgLTI0MSw3ICsyMzEsNyBAQAogCQkoc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIgKikgZnNmX3JlcS0+ZGF0YTsKIAl1bnNpZ25lZCBpbnQgZWxzX3R5cGUgPSBzdGF0dXNfYnVmZmVyLT5wYXlsb2FkLmRhdGFbMF07CiAKLQl6ZmNwX3Nhbl9kYmZfZXZlbnRfaW5jb21pbmdfZWxzKGZzZl9yZXEpOworCXpmY3BfZGJmX3Nhbl9pbmNvbWluZ19lbHMoZnNmX3JlcSk7CiAJaWYgKGVsc190eXBlID09IExTX1BMT0dJKQogCQl6ZmNwX2ZjX2luY29taW5nX3Bsb2dpKGZzZl9yZXEpOwogCWVsc2UgaWYgKGVsc190eXBlID09IExTX0xPR08pCkBAIC0yODEsMTkgKzI3MSwxOCBAQAogCXBvcnQtPmRfaWQgPSBjdF9pdV9yZXNwLT5kX2lkICYgWkZDUF9ESURfTUFTSzsKIH0KIAotaW50IHN0YXRpYyB6ZmNwX2ZjX25zX2dpZF9wbl9yZXF1ZXN0KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24sCitzdGF0aWMgaW50IHpmY3BfZmNfbnNfZ2lkX3BuX3JlcXVlc3Qoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCwKIAkJCQkgICAgIHN0cnVjdCB6ZmNwX2dpZF9wbl9kYXRhICpnaWRfcG4pCiB7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CiAJc3RydWN0IHpmY3BfZmNfbnNfaGFuZGxlcl9kYXRhIGNvbXBsX3JlYzsKIAlpbnQgcmV0OwogCiAJLyogc2V0dXAgcGFyYW1ldGVycyBmb3Igc2VuZCBnZW5lcmljIGNvbW1hbmQgKi8KLQlnaWRfcG4tPnBvcnQgPSBlcnBfYWN0aW9uLT5wb3J0OworCWdpZF9wbi0+cG9ydCA9IHBvcnQ7CiAJZ2lkX3BuLT5jdC53a2FfcG9ydCA9ICZhZGFwdGVyLT5ncy0+ZHM7CiAJZ2lkX3BuLT5jdC5oYW5kbGVyID0gemZjcF9mY19uc19oYW5kbGVyOwogCWdpZF9wbi0+Y3QuaGFuZGxlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZjb21wbF9yZWM7Ci0JZ2lkX3BuLT5jdC50aW1lb3V0ID0gWkZDUF9OU19HSURfUE5fVElNRU9VVDsKIAlnaWRfcG4tPmN0LnJlcSA9ICZnaWRfcG4tPnJlcTsKIAlnaWRfcG4tPmN0LnJlc3AgPSAmZ2lkX3BuLT5yZXNwOwogCXNnX2luaXRfb25lKCZnaWRfcG4tPnJlcSwgJmdpZF9wbi0+Y3RfaXVfcmVxLApAQCAtMzA4LDEzICsyOTcsMTIgQEAKIAlnaWRfcG4tPmN0X2l1X3JlcS5oZWFkZXIub3B0aW9ucyA9IFpGQ1BfQ1RfU1lOQ0hST05PVVM7CiAJZ2lkX3BuLT5jdF9pdV9yZXEuaGVhZGVyLmNtZF9yc3BfY29kZSA9IFpGQ1BfQ1RfR0lEX1BOOwogCWdpZF9wbi0+Y3RfaXVfcmVxLmhlYWRlci5tYXhfcmVzX3NpemUgPSBaRkNQX0NUX1NJWkVfT05FX1BBR0UgLyA0OwotCWdpZF9wbi0+Y3RfaXVfcmVxLnd3cG4gPSBlcnBfYWN0aW9uLT5wb3J0LT53d3BuOworCWdpZF9wbi0+Y3RfaXVfcmVxLnd3cG4gPSBwb3J0LT53d3BuOwogCiAJaW5pdF9jb21wbGV0aW9uKCZjb21wbF9yZWMuZG9uZSk7CiAJY29tcGxfcmVjLmhhbmRsZXIgPSB6ZmNwX2ZjX25zX2dpZF9wbl9ldmFsOwogCWNvbXBsX3JlYy5oYW5kbGVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykgZ2lkX3BuOwotCXJldCA9IHpmY3BfZnNmX3NlbmRfY3QoJmdpZF9wbi0+Y3QsIGFkYXB0ZXItPnBvb2wuZnNmX3JlcV9lcnAsCi0JCQkgICAgICAgZXJwX2FjdGlvbik7CisJcmV0ID0gemZjcF9mc2Zfc2VuZF9jdCgmZ2lkX3BuLT5jdCwgYWRhcHRlci0+cG9vbC5naWRfcG5fcmVxKTsKIAlpZiAoIXJldCkKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmY29tcGxfcmVjLmRvbmUpOwogCXJldHVybiByZXQ7CkBAIC0zMjIsMzMgKzMxMCw1NiBAQAogCiAvKioKICAqIHpmY3BfZmNfbnNfZ2lkX3BuX3JlcXVlc3QgLSBpbml0aWF0ZSBHSURfUE4gbmFtZXNlcnZlciByZXF1ZXN0Ci0gKiBAZXJwX2FjdGlvbjogcG9pbnRlciB0byB6ZmNwX2VycF9hY3Rpb24gd2hlcmUgR0lEX1BOIHJlcXVlc3QgaXMgbmVlZGVkCisgKiBAcG9ydDogcG9ydCB3aGVyZSBHSURfUE4gcmVxdWVzdCBpcyBuZWVkZWQKICAqIHJldHVybjogLUVOT01FTSBvbiBlcnJvciwgMCBvdGhlcndpc2UKICAqLwotaW50IHpmY3BfZmNfbnNfZ2lkX3BuKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCitzdGF0aWMgaW50IHpmY3BfZmNfbnNfZ2lkX3BuKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgemZjcF9naWRfcG5fZGF0YSAqZ2lkX3BuOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwogCi0JZ2lkX3BuID0gbWVtcG9vbF9hbGxvYyhhZGFwdGVyLT5wb29sLmRhdGFfZ2lkX3BuLCBHRlBfQVRPTUlDKTsKKwlnaWRfcG4gPSBtZW1wb29sX2FsbG9jKGFkYXB0ZXItPnBvb2wuZ2lkX3BuX2RhdGEsIEdGUF9BVE9NSUMpOwogCWlmICghZ2lkX3BuKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCW1lbXNldChnaWRfcG4sIDAsIHNpemVvZigqZ2lkX3BuKSk7CiAKLQlyZXQgPSB6ZmNwX3drYV9wb3J0X2dldCgmYWRhcHRlci0+Z3MtPmRzKTsKKwlyZXQgPSB6ZmNwX2ZjX3drYV9wb3J0X2dldCgmYWRhcHRlci0+Z3MtPmRzKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCXJldCA9IHpmY3BfZmNfbnNfZ2lkX3BuX3JlcXVlc3QoZXJwX2FjdGlvbiwgZ2lkX3BuKTsKKwlyZXQgPSB6ZmNwX2ZjX25zX2dpZF9wbl9yZXF1ZXN0KHBvcnQsIGdpZF9wbik7CiAKLQl6ZmNwX3drYV9wb3J0X3B1dCgmYWRhcHRlci0+Z3MtPmRzKTsKKwl6ZmNwX2ZjX3drYV9wb3J0X3B1dCgmYWRhcHRlci0+Z3MtPmRzKTsKIG91dDoKLQltZW1wb29sX2ZyZWUoZ2lkX3BuLCBhZGFwdGVyLT5wb29sLmRhdGFfZ2lkX3BuKTsKKwltZW1wb29sX2ZyZWUoZ2lkX3BuLCBhZGFwdGVyLT5wb29sLmdpZF9wbl9kYXRhKTsKIAlyZXR1cm4gcmV0OwogfQogCit2b2lkIHpmY3BfZmNfcG9ydF9kaWRfbG9va3VwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHpmY3BfcG9ydCwKKwkJCQkJICAgICAgZ2lkX3BuX3dvcmspOworCisJcmV0ID0gemZjcF9mY19uc19naWRfcG4ocG9ydCk7CisJaWYgKHJldCkgeworCQkvKiBjb3VsZCBub3QgaXNzdWUgZ2lkX3BuIGZvciBzb21lIHJlYXNvbiAqLworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3Blbihwb3J0LT5hZGFwdGVyLCAwLCAiZmNncG5fMSIsIE5VTEwpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXBvcnQtPmRfaWQpIHsKKwkJemZjcF9lcnBfcG9ydF9mYWlsZWQocG9ydCwgImZjZ3BuXzIiLCBOVUxMKTsKKwkJZ290byBvdXQ7CisJfQorCisJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgImZjZ3BuXzMiLCBOVUxMKTsKK291dDoKKwl6ZmNwX3BvcnRfcHV0KHBvcnQpOworfQorCiAvKioKICAqIHpmY3BfZmNfcGxvZ2lfZXZhbHVhdGUgLSBldmFsdWF0ZSBQTE9HSSBwbGF5bG9hZAogICogQHBvcnQ6IHpmY3BfcG9ydCBzdHJ1Y3R1cmUKQEAgLTQwNCw2ICs0MTUsNyBAQAogCS8qIHBvcnQgaXMgZ29vZCwgdW5ibG9jayBycG9ydCB3aXRob3V0IGdvaW5nIHRocm91Z2ggZXJwICovCiAJemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X3JlZ2lzdGVyKHBvcnQpOwogIG91dDoKKwlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19QT1JUX0xJTktfVEVTVCwgJnBvcnQtPnN0YXR1cyk7CiAJemZjcF9wb3J0X3B1dChwb3J0KTsKIAlrZnJlZShhZGlzYyk7CiB9CkBAIC00NTAsMjggKzQ2MiwzNiBAQAogCXBvcnQtPnJwb3J0X3Rhc2sgPSBSUE9SVF9ERUw7CiAJemZjcF9zY3NpX3Jwb3J0X3dvcmsoJnBvcnQtPnJwb3J0X3dvcmspOwogCisJLyogb25seSBpc3N1ZSBvbmUgdGVzdCBjb21tYW5kIGF0IG9uZSB0aW1lIHBlciBwb3J0ICovCisJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfUE9SVF9MSU5LX1RFU1QpCisJCWdvdG8gb3V0OworCisJYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX1BPUlRfTElOS19URVNULCAmcG9ydC0+c3RhdHVzKTsKKwogCXJldHZhbCA9IHpmY3BfZmNfYWRpc2MocG9ydCk7CiAJaWYgKHJldHZhbCA9PSAwKQogCQlyZXR1cm47CiAKIAkvKiBzZW5kIG9mIEFESVNDIHdhcyBub3QgcG9zc2libGUgKi8KKwlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19QT1JUX0xJTktfVEVTVCwgJnBvcnQtPnN0YXR1cyk7CiAJemZjcF9lcnBfcG9ydF9mb3JjZWRfcmVvcGVuKHBvcnQsIDAsICJmY2x0d2sxIiwgTlVMTCk7CiAKK291dDoKIAl6ZmNwX3BvcnRfcHV0KHBvcnQpOwogfQogCiAvKioKLSAqIHpmY3BfdGVzdF9saW5rIC0gbGlnaHR3ZWlnaHQgbGluayB0ZXN0IHByb2NlZHVyZQorICogemZjcF9mY190ZXN0X2xpbmsgLSBsaWdodHdlaWdodCBsaW5rIHRlc3QgcHJvY2VkdXJlCiAgKiBAcG9ydDogcG9ydCB0byBiZSB0ZXN0ZWQKICAqCiAgKiBUZXN0IHN0YXR1cyBvZiBhIGxpbmsgdG8gYSByZW1vdGUgcG9ydCB1c2luZyB0aGUgRUxTIGNvbW1hbmQgQURJU0MuCiAgKiBJZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgcmVtb3RlIHBvcnQsIGVycm9yIHJlY292ZXJ5IHN0ZXBzCiAgKiB3aWxsIGJlIHRyaWdnZXJlZC4KICAqLwotdm9pZCB6ZmNwX3Rlc3RfbGluayhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQordm9pZCB6ZmNwX2ZjX3Rlc3RfbGluayhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewogCXpmY3BfcG9ydF9nZXQocG9ydCk7Ci0JaWYgKCFxdWV1ZV93b3JrKHpmY3BfZGF0YS53b3JrX3F1ZXVlLCAmcG9ydC0+dGVzdF9saW5rX3dvcmspKQorCWlmICghcXVldWVfd29yayhwb3J0LT5hZGFwdGVyLT53b3JrX3F1ZXVlLCAmcG9ydC0+dGVzdF9saW5rX3dvcmspKQogCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOwogfQogCkBAIC00NzksNyArNDk5LDcgQEAKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gJmdwbl9mdC0+c2dfcmVxOwogCi0Ja2ZyZWUoc2dfdmlydChzZykpOyAvKiBmcmVlIHJlcXVlc3QgYnVmZmVyICovCisJa21lbV9jYWNoZV9mcmVlKHpmY3BfZGF0YS5ncG5fZnRfY2FjaGUsIHNnX3ZpcnQoc2cpKTsKIAl6ZmNwX3NnX2ZyZWVfdGFibGUoZ3BuX2Z0LT5zZ19yZXNwLCBidWZfbnVtKTsKIAogCWtmcmVlKGdwbl9mdCk7CkBAIC00OTQsNyArNTE0LDcgQEAKIAlpZiAoIWdwbl9mdCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3RfaXVfZ3BuX2Z0X3JlcSksIEdGUF9LRVJORUwpOworCXJlcSA9IGttZW1fY2FjaGVfYWxsb2MoemZjcF9kYXRhLmdwbl9mdF9jYWNoZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZXEpIHsKIAkJa2ZyZWUoZ3BuX2Z0KTsKIAkJZ3BuX2Z0ID0gTlVMTDsKQEAgLTUxMSw5ICs1MzEsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgemZjcF9zY2FuX2lzc3VlX2dwbl9mdChzdHJ1Y3QgemZjcF9ncG5fZnQgKmdwbl9mdCwKLQkJCQkgIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICBpbnQgbWF4X2J5dGVzKQorc3RhdGljIGludCB6ZmNwX2ZjX3NlbmRfZ3BuX2Z0KHN0cnVjdCB6ZmNwX2dwbl9mdCAqZ3BuX2Z0LAorCQkJICAgICAgIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBtYXhfYnl0ZXMpCiB7CiAJc3RydWN0IHpmY3Bfc2VuZF9jdCAqY3QgPSAmZ3BuX2Z0LT5jdDsKIAlzdHJ1Y3QgY3RfaXVfZ3BuX2Z0X3JlcSAqcmVxID0gc2dfdmlydCgmZ3BuX2Z0LT5zZ19yZXEpOwpAQCAtNTM2LDE5ICs1NTUsMTggQEAKIAljdC0+d2thX3BvcnQgPSAmYWRhcHRlci0+Z3MtPmRzOwogCWN0LT5oYW5kbGVyID0gemZjcF9mY19uc19oYW5kbGVyOwogCWN0LT5oYW5kbGVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykmY29tcGxfcmVjOwotCWN0LT50aW1lb3V0ID0gMTA7CiAJY3QtPnJlcSA9ICZncG5fZnQtPnNnX3JlcTsKIAljdC0+cmVzcCA9IGdwbl9mdC0+c2dfcmVzcDsKIAogCWluaXRfY29tcGxldGlvbigmY29tcGxfcmVjLmRvbmUpOwogCWNvbXBsX3JlYy5oYW5kbGVyID0gTlVMTDsKLQlyZXQgPSB6ZmNwX2ZzZl9zZW5kX2N0KGN0LCBOVUxMLCBOVUxMKTsKKwlyZXQgPSB6ZmNwX2ZzZl9zZW5kX2N0KGN0LCBOVUxMKTsKIAlpZiAoIXJldCkKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmY29tcGxfcmVjLmRvbmUpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfdmFsaWRhdGVfcG9ydChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQgemZjcF9mY192YWxpZGF0ZV9wb3J0KHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CiAKQEAgLTU2OCw3ICs1ODYsNyBAQAogCXpmY3BfcG9ydF9kZXF1ZXVlKHBvcnQpOwogfQogCi1zdGF0aWMgaW50IHpmY3Bfc2Nhbl9ldmFsX2dwbl9mdChzdHJ1Y3QgemZjcF9ncG5fZnQgKmdwbl9mdCwgaW50IG1heF9lbnRyaWVzKQorc3RhdGljIGludCB6ZmNwX2ZjX2V2YWxfZ3BuX2Z0KHN0cnVjdCB6ZmNwX2dwbl9mdCAqZ3BuX2Z0LCBpbnQgbWF4X2VudHJpZXMpCiB7CiAJc3RydWN0IHpmY3Bfc2VuZF9jdCAqY3QgPSAmZ3BuX2Z0LT5jdDsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gZ3BuX2Z0LT5zZ19yZXNwOwpAQCAtNTk1LDcgKzYxMyw3IEBACiAJCXJldHVybiAtRTJCSUc7CiAJfQogCi0JZG93bigmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKKwltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAogCS8qIGZpcnN0IGVudHJ5IGlzIHRoZSBoZWFkZXIgKi8KIAlmb3IgKHggPSAxOyB4IDwgbWF4X2VudHJpZXMgJiYgIWxhc3Q7IHgrKykgewpAQCAtNjI4LDE2ICs2NDYsMTYgQEAKIAogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcnQsIHRtcCwgJmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkLCBsaXN0KQotCQl6ZmNwX3ZhbGlkYXRlX3BvcnQocG9ydCk7Ci0JdXAoJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJCXpmY3BfZmNfdmFsaWRhdGVfcG9ydChwb3J0KTsKKwltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKIC8qKgotICogemZjcF9zY2FuX3BvcnRzIC0gc2NhbiByZW1vdGUgcG9ydHMgYW5kIGF0dGFjaCBuZXcgcG9ydHMKKyAqIHpmY3BfZmNfc2Nhbl9wb3J0cyAtIHNjYW4gcmVtb3RlIHBvcnRzIGFuZCBhdHRhY2ggbmV3IHBvcnRzCiAgKiBAYWRhcHRlcjogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9hZGFwdGVyCiAgKi8KLWludCB6ZmNwX3NjYW5fcG9ydHMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK2ludCB6ZmNwX2ZjX3NjYW5fcG9ydHMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgcmV0LCBpOwogCXN0cnVjdCB6ZmNwX2dwbl9mdCAqZ3BuX2Z0OwpAQCAtNjUyLDcgKzY3MCw3IEBACiAJICAgIGZjX2hvc3RfcG9ydF90eXBlKGFkYXB0ZXItPnNjc2lfaG9zdCkgIT0gRkNfUE9SVFRZUEVfTlBJVikKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSB6ZmNwX3drYV9wb3J0X2dldCgmYWRhcHRlci0+Z3MtPmRzKTsKKwlyZXQgPSB6ZmNwX2ZjX3drYV9wb3J0X2dldCgmYWRhcHRlci0+Z3MtPmRzKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC02NjMsOSArNjgxLDkgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCXJldCA9IHpmY3Bfc2Nhbl9pc3N1ZV9ncG5fZnQoZ3BuX2Z0LCBhZGFwdGVyLCBtYXhfYnl0ZXMpOworCQlyZXQgPSB6ZmNwX2ZjX3NlbmRfZ3BuX2Z0KGdwbl9mdCwgYWRhcHRlciwgbWF4X2J5dGVzKTsKIAkJaWYgKCFyZXQpIHsKLQkJCXJldCA9IHpmY3Bfc2Nhbl9ldmFsX2dwbl9mdChncG5fZnQsIG1heF9lbnRyaWVzKTsKKwkJCXJldCA9IHpmY3BfZmNfZXZhbF9ncG5fZnQoZ3BuX2Z0LCBtYXhfZW50cmllcyk7CiAJCQlpZiAocmV0ID09IC1FQUdBSU4pCiAJCQkJc3NsZWVwKDEpOwogCQkJZWxzZQpAQCAtNjc0LDE0ICs2OTIsMTQgQEAKIAl9CiAJemZjcF9mcmVlX3NnX2VudihncG5fZnQsIGJ1Zl9udW0pOwogb3V0OgotCXpmY3Bfd2thX3BvcnRfcHV0KCZhZGFwdGVyLT5ncy0+ZHMpOworCXpmY3BfZmNfd2thX3BvcnRfcHV0KCZhZGFwdGVyLT5ncy0+ZHMpOwogCXJldHVybiByZXQ7CiB9CiAKIAotdm9pZCBfemZjcF9zY2FuX3BvcnRzX2xhdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3ZvaWQgX3pmY3BfZmNfc2Nhbl9wb3J0c19sYXRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JemZjcF9zY2FuX3BvcnRzKGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgemZjcF9hZGFwdGVyLCBzY2FuX3dvcmspKTsKKwl6ZmNwX2ZjX3NjYW5fcG9ydHMoY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6ZmNwX2FkYXB0ZXIsIHNjYW5fd29yaykpOwogfQogCiBzdHJ1Y3QgemZjcF9lbHNfZmNfam9iIHsKQEAgLTczMiw3ICs3NTAsNyBAQAogCWVsc19mY19qb2ItPmVscy5hZGFwdGVyID0gYWRhcHRlcjsKIAlpZiAocnBvcnQpIHsKIAkJcmVhZF9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKLQkJcG9ydCA9IHJwb3J0LT5kZF9kYXRhOworCQlwb3J0ID0gemZjcF9nZXRfcG9ydF9ieV93d3BuKGFkYXB0ZXIsIHJwb3J0LT5wb3J0X25hbWUpOwogCQlpZiAocG9ydCkKIAkJCWVsc19mY19qb2ItPmVscy5kX2lkID0gcG9ydC0+ZF9pZDsKIAkJcmVhZF91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwpAQCAtNzcxLDcgKzc4OSw3IEBACiAJam9iLT5zdGF0ZV9mbGFncyA9IEZDX1JRU1RfU1RBVEVfRE9ORTsKIAlqb2ItPmpvYl9kb25lKGpvYik7CiAKLQl6ZmNwX3drYV9wb3J0X3B1dChjdF9mY19qb2ItPmN0LndrYV9wb3J0KTsKKwl6ZmNwX2ZjX3drYV9wb3J0X3B1dChjdF9mY19qb2ItPmN0LndrYV9wb3J0KTsKIAogCWtmcmVlKGN0X2ZjX2pvYik7CiB9CkBAIC04MTcsNyArODM1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7IC8qIG5vIHN1Y2ggc2VydmljZSAqLwogCX0KIAotCXJldCA9IHpmY3Bfd2thX3BvcnRfZ2V0KGN0X2ZjX2pvYi0+Y3Qud2thX3BvcnQpOworCXJldCA9IHpmY3BfZmNfd2thX3BvcnRfZ2V0KGN0X2ZjX2pvYi0+Y3Qud2thX3BvcnQpOwogCWlmIChyZXQpIHsKIAkJa2ZyZWUoY3RfZmNfam9iKTsKIAkJcmV0dXJuIHJldDsKQEAgLTgyNSwxNiArODQzLDQwIEBACiAKIAljdF9mY19qb2ItPmN0LnJlcSA9IGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3Q7CiAJY3RfZmNfam9iLT5jdC5yZXNwID0gam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3Q7Ci0JY3RfZmNfam9iLT5jdC50aW1lb3V0ID0gWkZDUF9GU0ZfUkVRVUVTVF9USU1FT1VUOwogCWN0X2ZjX2pvYi0+Y3QuaGFuZGxlciA9IHpmY3BfZmNfZ2VuZXJpY19jdF9oYW5kbGVyOwogCWN0X2ZjX2pvYi0+Y3QuaGFuZGxlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGN0X2ZjX2pvYjsKIAljdF9mY19qb2ItPmN0LmNvbXBsZXRpb24gPSBOVUxMOwogCWN0X2ZjX2pvYi0+am9iID0gam9iOwogCi0JcmV0ID0gemZjcF9mc2Zfc2VuZF9jdCgmY3RfZmNfam9iLT5jdCwgTlVMTCwgTlVMTCk7CisJcmV0ID0gemZjcF9mc2Zfc2VuZF9jdCgmY3RfZmNfam9iLT5jdCwgTlVMTCk7CiAJaWYgKHJldCkgewogCQlrZnJlZShjdF9mY19qb2IpOwotCQl6ZmNwX3drYV9wb3J0X3B1dChjdF9mY19qb2ItPmN0LndrYV9wb3J0KTsKKwkJemZjcF9mY193a2FfcG9ydF9wdXQoY3RfZmNfam9iLT5jdC53a2FfcG9ydCk7CiAJfQogCXJldHVybiByZXQ7CiB9CisKK2ludCB6ZmNwX2ZjX2dzX3NldHVwKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHpmY3Bfd2thX3BvcnRzICp3a2FfcG9ydHM7CisKKwl3a2FfcG9ydHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgemZjcF93a2FfcG9ydHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdrYV9wb3J0cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhZGFwdGVyLT5ncyA9IHdrYV9wb3J0czsKKwl6ZmNwX2ZjX3drYV9wb3J0X2luaXQoJndrYV9wb3J0cy0+bXMsIEZDX0ZJRF9NR01UX1NFUlYsIGFkYXB0ZXIpOworCXpmY3BfZmNfd2thX3BvcnRfaW5pdCgmd2thX3BvcnRzLT50cywgRkNfRklEX1RJTUVfU0VSViwgYWRhcHRlcik7CisJemZjcF9mY193a2FfcG9ydF9pbml0KCZ3a2FfcG9ydHMtPmRzLCBGQ19GSURfRElSX1NFUlYsIGFkYXB0ZXIpOworCXpmY3BfZmNfd2thX3BvcnRfaW5pdCgmd2thX3BvcnRzLT5hcywgRkNfRklEX0FMSUFTRVMsIGFkYXB0ZXIpOworCXpmY3BfZmNfd2thX3BvcnRfaW5pdCgmd2thX3BvcnRzLT5rcywgRkNfRklEX1NFQ19LRVksIGFkYXB0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgemZjcF9mY19nc19kZXN0cm95KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJa2ZyZWUoYWRhcHRlci0+Z3MpOworCWFkYXB0ZXItPmdzID0gTlVMTDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKaW5kZXggNDc3OTVmYi4uZjA5Yzg2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCkBAIC0xMSw5ICsxMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9ibGt0cmFjZV9hcGkuaD4KICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgotCi0jZGVmaW5lIFpGQ1BfUkVRX0FVVE9fQ0xFQU5VUAkweDAwMDAwMDAyCi0jZGVmaW5lIFpGQ1BfUkVRX05PX1FUQ0IJMHgwMDAwMDAwOAorI2luY2x1ZGUgInpmY3BfZGJmLmgiCiAKIHN0YXRpYyB2b2lkIHpmY3BfZnNmX3JlcXVlc3RfdGltZW91dF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTExMSw0MyArMTA5LDE1IEBACiB2b2lkIHpmY3BfZnNmX3JlcV9mcmVlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKIHsKIAlpZiAobGlrZWx5KHJlcS0+cG9vbCkpIHsKKwkJaWYgKGxpa2VseShyZXEtPnF0Y2IpKQorCQkJbWVtcG9vbF9mcmVlKHJlcS0+cXRjYiwgcmVxLT5hZGFwdGVyLT5wb29sLnF0Y2JfcG9vbCk7CiAJCW1lbXBvb2xfZnJlZShyZXEsIHJlcS0+cG9vbCk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAocmVxLT5xdGNiKSB7Ci0JCWttZW1fY2FjaGVfZnJlZSh6ZmNwX2RhdGEuZnNmX3JlcV9xdGNiX2NhY2hlLCByZXEpOwotCQlyZXR1cm47Ci0JfQotfQotCi0vKioKLSAqIHpmY3BfZnNmX3JlcV9kaXNtaXNzX2FsbCAtIGRpc21pc3MgYWxsIGZzZiByZXF1ZXN0cwotICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfYWRhcHRlcgotICoKLSAqIE5ldmVyIGV2ZXIgY2FsbCB0aGlzIHdpdGhvdXQgc2h1dHRpbmcgZG93biB0aGUgYWRhcHRlciBmaXJzdC4KLSAqIE90aGVyd2lzZSB0aGUgYWRhcHRlciB3b3VsZCBjb250aW51ZSB1c2luZyBhbmQgY29ycnVwdGluZyBzMzkwIHN0b3JhZ2UuCi0gKiBJbmNsdWRlZCBCVUdfT04oKSBjYWxsIHRvIGVuc3VyZSB0aGlzIGlzIGRvbmUuCi0gKiBFUlAgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIG9ubHkgdXNlciBvZiB0aGlzIGZ1bmN0aW9uLgotICovCi12b2lkIHpmY3BfZnNmX3JlcV9kaXNtaXNzX2FsbChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSwgKnRtcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCUxJU1RfSEVBRChyZW1vdmVfcXVldWUpOwotCXVuc2lnbmVkIGludCBpOwotCi0JQlVHX09OKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVApOwotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IFJFUVVFU1RfTElTVF9TSVpFOyBpKyspCi0JCWxpc3Rfc3BsaWNlX2luaXQoJmFkYXB0ZXItPnJlcV9saXN0W2ldLCAmcmVtb3ZlX3F1ZXVlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsICZyZW1vdmVfcXVldWUsIGxpc3QpIHsKLQkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7Ci0JCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQ7Ci0JCXpmY3BfZnNmX3JlcV9jb21wbGV0ZShyZXEpOwotCX0KKwlpZiAobGlrZWx5KHJlcS0+cXRjYikpCisJCWttZW1fY2FjaGVfZnJlZSh6ZmNwX2RhdGEucXRjYl9jYWNoZSwgcmVxLT5xdGNiKTsKKwlrZnJlZShyZXEpOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9zdGF0dXNfcmVhZF9wb3J0X2Nsb3NlZChzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCkBAIC0yNzgsMTMgKzI0OCwxMyBAQAogCXN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpzcl9idWYgPSByZXEtPmRhdGE7CiAKIAlpZiAocmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEKSB7Ci0JCXpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfdW5zb2woImRpc20iLCBhZGFwdGVyLCBzcl9idWYpOwotCQltZW1wb29sX2ZyZWUoc3JfYnVmLCBhZGFwdGVyLT5wb29sLmRhdGFfc3RhdHVzX3JlYWQpOworCQl6ZmNwX2RiZl9oYmFfZnNmX3Vuc29sKCJkaXNtIiwgYWRhcHRlci0+ZGJmLCBzcl9idWYpOworCQltZW1wb29sX2ZyZWUoc3JfYnVmLCBhZGFwdGVyLT5wb29sLnN0YXR1c19yZWFkX2RhdGEpOwogCQl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwogCQlyZXR1cm47CiAJfQogCi0JemZjcF9oYmFfZGJmX2V2ZW50X2ZzZl91bnNvbCgicmVhZCIsIGFkYXB0ZXIsIHNyX2J1Zik7CisJemZjcF9kYmZfaGJhX2ZzZl91bnNvbCgicmVhZCIsIGFkYXB0ZXItPmRiZiwgc3JfYnVmKTsKIAogCXN3aXRjaCAoc3JfYnVmLT5zdGF0dXNfdHlwZSkgewogCWNhc2UgRlNGX1NUQVRVU19SRUFEX1BPUlRfQ0xPU0VEOgpAQCAtMjk5LDcgKzI2OSw3IEBACiAJCWRldl93YXJuKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkgIlRoZSBlcnJvciB0aHJlc2hvbGQgZm9yIGNoZWNrc3VtIHN0YXRpc3RpY3MgIgogCQkJICJoYXMgYmVlbiBleGNlZWRlZFxuIik7Ci0JCXpmY3BfaGJhX2RiZl9ldmVudF9iZXJyKGFkYXB0ZXIsIHJlcSk7CisJCXpmY3BfZGJmX2hiYV9iZXJyKGFkYXB0ZXItPmRiZiwgcmVxKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU1RBVFVTX1JFQURfTElOS19ET1dOOgogCQl6ZmNwX2ZzZl9zdGF0dXNfcmVhZF9saW5rX2Rvd24ocmVxKTsKQEAgLTMzMSwxMSArMzAxLDExIEBACiAJCWJyZWFrOwogCX0KIAotCW1lbXBvb2xfZnJlZShzcl9idWYsIGFkYXB0ZXItPnBvb2wuZGF0YV9zdGF0dXNfcmVhZCk7CisJbWVtcG9vbF9mcmVlKHNyX2J1ZiwgYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9kYXRhKTsKIAl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwogCiAJYXRvbWljX2luYygmYWRhcHRlci0+c3RhdF9taXNzKTsKLQlxdWV1ZV93b3JrKHpmY3BfZGF0YS53b3JrX3F1ZXVlLCAmYWRhcHRlci0+c3RhdF93b3JrKTsKKwlxdWV1ZV93b3JrKGFkYXB0ZXItPndvcmtfcXVldWUsICZhZGFwdGVyLT5zdGF0X3dvcmspOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9mc2ZzdGF0dXNfcXVhbF9ldmFsKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKQEAgLTM4NSw3ICszNTUsNyBAQAogCXN0cnVjdCBmc2ZfcXRjYiAqcXRjYiA9IHJlcS0+cXRjYjsKIAl1bmlvbiBmc2ZfcHJvdF9zdGF0dXNfcXVhbCAqcHNxID0gJnF0Y2ItPnByZWZpeC5wcm90X3N0YXR1c19xdWFsOwogCi0JemZjcF9oYmFfZGJmX2V2ZW50X2ZzZl9yZXNwb25zZShyZXEpOworCXpmY3BfZGJmX2hiYV9mc2ZfcmVzcG9uc2UocmVxKTsKIAogCWlmIChyZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQpIHsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SIHwKQEAgLTQ1OCw3ICs0MjgsNyBAQAogICogaXMgY2FsbGVkIHRvIHByb2Nlc3MgdGhlIGNvbXBsZXRpb24gc3RhdHVzIGFuZCB0cmlnZ2VyIGZ1cnRoZXIKICAqIGV2ZW50cyByZWxhdGVkIHRvIHRoZSBGU0YgcmVxdWVzdC4KICAqLwotdm9pZCB6ZmNwX2ZzZl9yZXFfY29tcGxldGUoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQorc3RhdGljIHZvaWQgemZjcF9mc2ZfcmVxX2NvbXBsZXRlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKIHsKIAlpZiAodW5saWtlbHkocmVxLT5mc2ZfY29tbWFuZCA9PSBGU0ZfUVRDQl9VTlNPTElDSVRFRF9TVEFUVVMpKSB7CiAJCXpmY3BfZnNmX3N0YXR1c19yZWFkX2hhbmRsZXIocmVxKTsKQEAgLTQ3MiwyMyArNDQyLDQwIEBACiAKIAlpZiAocmVxLT5lcnBfYWN0aW9uKQogCQl6ZmNwX2VycF9ub3RpZnkocmVxLT5lcnBfYWN0aW9uLCAwKTsKLQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVEOwogCiAJaWYgKGxpa2VseShyZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQKSkKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKIAllbHNlCi0JLyogbm90aWZ5IGluaXRpYXRvciB3YWl0aW5nIGZvciB0aGUgcmVxdWVzdHMgY29tcGxldGlvbiAqLwotCS8qCi0JICogRklYTUU6IFJhY2UhIFdlIG11c3Qgbm90IGFjY2VzcyBmc2ZfcmVxIGhlcmUgYXMgaXQgbWlnaHQgaGF2ZSBiZWVuCi0JICogY2xlYW5lZCB1cCBhbHJlYWR5IGR1ZSB0byB0aGUgc2V0IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DT01QTEVURUQKLQkgKiBmbGFnLiBJdCdzIGFuIGltcHJvYmFibGUgY2FzZS4gQnV0LCB3ZSBoYXZlIHRoZSBzYW1lIHBhcmFub2lhIGZvcgotCSAqIHRoZSBjbGVhbnVwIGZsYWcgYWxyZWFkeS4KLQkgKiBNaWdodCBiZXR0ZXIgYmUgaGFuZGxlZCB1c2luZyBjb21wbGV0ZSgpPwotCSAqIChzZXR0aW5nIHRoZSBmbGFnIGFuZCBkb2luZyB3YWtldXAgb3VnaHQgdG8gYmUgYXRvbWljCi0JICogIHdpdGggcmVnYXJkIHRvIGNoZWNraW5nIHRoZSBmbGFnIGFzIGxvbmcgYXMgd2FpdHF1ZXVlIGlzCi0JICogIHBhcnQgb2YgdGhlIHRvIGJlIHJlbGVhc2VkIHN0cnVjdHVyZSkKLQkgKi8KLQkJd2FrZV91cCgmcmVxLT5jb21wbGV0aW9uX3dxKTsKKwkJY29tcGxldGUoJnJlcS0+Y29tcGxldGlvbik7Cit9CisKKy8qKgorICogemZjcF9mc2ZfcmVxX2Rpc21pc3NfYWxsIC0gZGlzbWlzcyBhbGwgZnNmIHJlcXVlc3RzCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9hZGFwdGVyCisgKgorICogTmV2ZXIgZXZlciBjYWxsIHRoaXMgd2l0aG91dCBzaHV0dGluZyBkb3duIHRoZSBhZGFwdGVyIGZpcnN0LgorICogT3RoZXJ3aXNlIHRoZSBhZGFwdGVyIHdvdWxkIGNvbnRpbnVlIHVzaW5nIGFuZCBjb3JydXB0aW5nIHMzOTAgc3RvcmFnZS4KKyAqIEluY2x1ZGVkIEJVR19PTigpIGNhbGwgdG8gZW5zdXJlIHRoaXMgaXMgZG9uZS4KKyAqIEVSUCBpcyBzdXBwb3NlZCB0byBiZSB0aGUgb25seSB1c2VyIG9mIHRoaXMgZnVuY3Rpb24uCisgKi8KK3ZvaWQgemZjcF9mc2ZfcmVxX2Rpc21pc3NfYWxsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKHJlbW92ZV9xdWV1ZSk7CisJdW5zaWduZWQgaW50IGk7CisKKwlCVUdfT04oYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJiBaRkNQX1NUQVRVU19BREFQVEVSX1FESU9VUCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgUkVRVUVTVF9MSVNUX1NJWkU7IGkrKykKKwkJbGlzdF9zcGxpY2VfaW5pdCgmYWRhcHRlci0+cmVxX2xpc3RbaV0sICZyZW1vdmVfcXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgJnJlbW92ZV9xdWV1ZSwgbGlzdCkgeworCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKKwkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRDsKKwkJemZjcF9mc2ZfcmVxX2NvbXBsZXRlKHJlcSk7CisJfQogfQogCiBzdGF0aWMgaW50IHpmY3BfZnNmX2V4Y2hhbmdlX2NvbmZpZ19ldmFsdWF0ZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCkBAIC02NTAsNzkgKzYzNyw3NyBAQAogCX0KIH0KIAotc3RhdGljIGludCB6ZmNwX2ZzZl9zYmFsX2NoZWNrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IHpmY3BfZnNmX3NiYWxfY2hlY2soc3RydWN0IHpmY3BfcWRpbyAqcWRpbykKIHsKLQlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpyZXFfcSA9ICZhZGFwdGVyLT5yZXFfcTsKKwlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpyZXFfcSA9ICZxZGlvLT5yZXFfcTsKIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlpZiAoYXRvbWljX3JlYWQoJnJlcV9xLT5jb3VudCkpCiAJCXJldHVybiAxOwotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IHpmY3BfZnNmX3JlcV9zYmFsX2dldChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvKQogeworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxZGlvLT5hZGFwdGVyOwogCWxvbmcgcmV0OwogCi0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOwotCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGFkYXB0ZXItPnJlcXVlc3Rfd3EsCi0JCQkgICAgICAgemZjcF9mc2Zfc2JhbF9jaGVjayhhZGFwdGVyKSwgNSAqIEhaKTsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocWRpby0+cmVxX3Ffd3EsCisJCQkgICAgICAgemZjcF9mc2Zfc2JhbF9jaGVjayhxZGlvKSwgNSAqIEhaKTsKIAlpZiAocmV0ID4gMCkKIAkJcmV0dXJuIDA7CiAJaWYgKCFyZXQpIHsKLQkJYXRvbWljX2luYygmYWRhcHRlci0+cWRpb19vdXRiX2Z1bGwpOworCQlhdG9taWNfaW5jKCZxZGlvLT5yZXFfcV9mdWxsKTsKIAkJLyogYXNzdW1lIGhhbmdpbmcgb3V0Ym91bmQgcXVldWUsIHRyeSBxdWV1ZSByZWNvdmVyeSAqLwogCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwLCAiZnNyc2dfMSIsIE5VTEwpOwogCX0KIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gLUVJTzsKIH0KIAotc3RhdGljIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX2FsbG9jX25vcXRjYihtZW1wb29sX3QgKnBvb2wpCitzdGF0aWMgc3RydWN0IHpmY3BfZnNmX3JlcSAqemZjcF9mc2ZfYWxsb2MobWVtcG9vbF90ICpwb29sKQogewogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKLQlyZXEgPSBtZW1wb29sX2FsbG9jKHBvb2wsIEdGUF9BVE9NSUMpOwotCWlmICghcmVxKQorCisJaWYgKGxpa2VseShwb29sKSkKKwkJcmVxID0gbWVtcG9vbF9hbGxvYyhwb29sLCBHRlBfQVRPTUlDKTsKKwllbHNlCisJCXJlcSA9IGttYWxsb2Moc2l6ZW9mKCpyZXEpLCBHRlBfQVRPTUlDKTsKKworCWlmICh1bmxpa2VseSghcmVxKSkKIAkJcmV0dXJuIE5VTEw7CisKIAltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOwogCXJlcS0+cG9vbCA9IHBvb2w7CiAJcmV0dXJuIHJlcTsKIH0KIAotc3RhdGljIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX2FsbG9jX3F0Y2IobWVtcG9vbF90ICpwb29sKQorc3RhdGljIHN0cnVjdCBmc2ZfcXRjYiAqemZjcF9xdGNiX2FsbG9jKG1lbXBvb2xfdCAqcG9vbCkKIHsKLQlzdHJ1Y3QgemZjcF9mc2ZfcmVxX3F0Y2IgKnF0Y2I7CisJc3RydWN0IGZzZl9xdGNiICpxdGNiOwogCiAJaWYgKGxpa2VseShwb29sKSkKIAkJcXRjYiA9IG1lbXBvb2xfYWxsb2MocG9vbCwgR0ZQX0FUT01JQyk7CiAJZWxzZQotCQlxdGNiID0ga21lbV9jYWNoZV9hbGxvYyh6ZmNwX2RhdGEuZnNmX3JlcV9xdGNiX2NhY2hlLAotCQkJCQlHRlBfQVRPTUlDKTsKKwkJcXRjYiA9IGttZW1fY2FjaGVfYWxsb2MoemZjcF9kYXRhLnF0Y2JfY2FjaGUsIEdGUF9BVE9NSUMpOworCiAJaWYgKHVubGlrZWx5KCFxdGNiKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAltZW1zZXQocXRjYiwgMCwgc2l6ZW9mKCpxdGNiKSk7Ci0JcXRjYi0+ZnNmX3JlcS5xdGNiID0gJnF0Y2ItPnF0Y2I7Ci0JcXRjYi0+ZnNmX3JlcS5wb29sID0gcG9vbDsKLQotCXJldHVybiAmcXRjYi0+ZnNmX3JlcTsKKwlyZXR1cm4gcXRjYjsKIH0KIAotc3RhdGljIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX3JlcV9jcmVhdGUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJCXUzMiBmc2ZfY21kLCBpbnQgcmVxX2ZsYWdzLAotCQkJCQkJbWVtcG9vbF90ICpwb29sKQorc3RhdGljIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX3JlcV9jcmVhdGUoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKKwkJCQkJCXUzMiBmc2ZfY21kLCBtZW1wb29sX3QgKnBvb2wpCiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwotCi0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnJlcV9xID0gJmFkYXB0ZXItPnJlcV9xOwotCi0JaWYgKHJlcV9mbGFncyAmIFpGQ1BfUkVRX05PX1FUQ0IpCi0JCXJlcSA9IHpmY3BfZnNmX2FsbG9jX25vcXRjYihwb29sKTsKLQllbHNlCi0JCXJlcSA9IHpmY3BfZnNmX2FsbG9jX3F0Y2IocG9vbCk7CisJc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcmVxX3EgPSAmcWRpby0+cmVxX3E7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHFkaW8tPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxID0gemZjcF9mc2ZfYWxsb2MocG9vbCk7CiAKIAlpZiAodW5saWtlbHkoIXJlcSkpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtNzMyLDIyICs3MTcsMzIgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZyZXEtPmxpc3QpOwogCWluaXRfdGltZXIoJnJlcS0+dGltZXIpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJlcS0+Y29tcGxldGlvbl93cSk7CisJaW5pdF9jb21wbGV0aW9uKCZyZXEtPmNvbXBsZXRpb24pOwogCiAJcmVxLT5hZGFwdGVyID0gYWRhcHRlcjsKIAlyZXEtPmZzZl9jb21tYW5kID0gZnNmX2NtZDsKIAlyZXEtPnJlcV9pZCA9IGFkYXB0ZXItPnJlcV9ubzsKLQlyZXEtPnNiYWxfbnVtYmVyID0gMTsKLQlyZXEtPnNiYWxfZmlyc3QgPSByZXFfcS0+Zmlyc3Q7Ci0JcmVxLT5zYmFsX2xhc3QgPSByZXFfcS0+Zmlyc3Q7Ci0JcmVxLT5zYmFsZV9jdXJyID0gMTsKKwlyZXEtPnF1ZXVlX3JlcS5zYmFsX251bWJlciA9IDE7CisJcmVxLT5xdWV1ZV9yZXEuc2JhbF9maXJzdCA9IHJlcV9xLT5maXJzdDsKKwlyZXEtPnF1ZXVlX3JlcS5zYmFsX2xhc3QgPSByZXFfcS0+Zmlyc3Q7CisJcmVxLT5xdWV1ZV9yZXEuc2JhbGVfY3VyciA9IDE7CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKIAlzYmFsZVswXS5hZGRyID0gKHZvaWQgKikgcmVxLT5yZXFfaWQ7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfQ09NTUFORDsKIAotCWlmIChsaWtlbHkocmVxLT5xdGNiKSkgewotCQlyZXEtPnF0Y2ItPnByZWZpeC5yZXFfc2VxX25vID0gcmVxLT5hZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubzsKKwlpZiAobGlrZWx5KGZzZl9jbWQgIT0gRlNGX1FUQ0JfVU5TT0xJQ0lURURfU1RBVFVTKSkgeworCQlpZiAobGlrZWx5KHBvb2wpKQorCQkJcmVxLT5xdGNiID0gemZjcF9xdGNiX2FsbG9jKGFkYXB0ZXItPnBvb2wucXRjYl9wb29sKTsKKwkJZWxzZQorCQkJcmVxLT5xdGNiID0gemZjcF9xdGNiX2FsbG9jKE5VTEwpOworCisJCWlmICh1bmxpa2VseSghcmVxLT5xdGNiKSkgeworCQkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQl9CisKKwkJcmVxLT5xdGNiLT5wcmVmaXgucmVxX3NlcV9ubyA9IGFkYXB0ZXItPmZzZl9yZXFfc2VxX25vOwogCQlyZXEtPnF0Y2ItPnByZWZpeC5yZXFfaWQgPSByZXEtPnJlcV9pZDsKIAkJcmVxLT5xdGNiLT5wcmVmaXgudWxwX2luZm8gPSAyNjsKIAkJcmVxLT5xdGNiLT5wcmVmaXgucXRjYl90eXBlID0gZnNmX3F0Y2JfdHlwZVtyZXEtPmZzZl9jb21tYW5kXTsKQEAgLTc2NSwxNSArNzYwLDEzIEBACiAJCXJldHVybiBFUlJfUFRSKC1FSU8pOwogCX0KIAotCWlmIChsaWtlbHkocmVxX2ZsYWdzICYgWkZDUF9SRVFfQVVUT19DTEVBTlVQKSkKLQkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0KIAlyZXR1cm4gcmVxOwogfQogCiBzdGF0aWMgaW50IHpmY3BfZnNmX3JlcV9zZW5kKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcmVxLT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBhZGFwdGVyLT5xZGlvOwogCXVuc2lnbmVkIGxvbmcJICAgICBmbGFnczsKIAlpbnQJCSAgICAgaWR4OwogCWludAkJICAgICB3aXRoX3F0Y2IgPSAocmVxLT5xdGNiICE9IE5VTEwpOwpAQCAtNzg0LDkgKzc3Nyw5IEBACiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmYWRhcHRlci0+cmVxX2xpc3RbaWR4XSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwogCi0JcmVxLT5xZGlvX291dGJfdXNhZ2UgPSBhdG9taWNfcmVhZCgmYWRhcHRlci0+cmVxX3EuY291bnQpOworCXJlcS0+cXVldWVfcmVxLnFkaW9fb3V0Yl91c2FnZSA9IGF0b21pY19yZWFkKCZxZGlvLT5yZXFfcS5jb3VudCk7CiAJcmVxLT5pc3N1ZWQgPSBnZXRfY2xvY2soKTsKLQlpZiAoemZjcF9xZGlvX3NlbmQocmVxKSkgeworCWlmICh6ZmNwX3FkaW9fc2VuZChxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpKSB7CiAJCWRlbF90aW1lcigmcmVxLT50aW1lcik7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7CiAJCS8qIGxvb2t1cCByZXF1ZXN0IGFnYWluLCBsaXN0IG1pZ2h0IGhhdmUgY2hhbmdlZCAqLwpAQCAtODExLDM4ICs4MDQsMzcgQEAKICAqIEByZXFfZmxhZ3M6IHJlcXVlc3QgZmxhZ3MKICAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgRVJST1Igb3RoZXJ3aXNlCiAgKi8KLWludCB6ZmNwX2ZzZl9zdGF0dXNfcmVhZChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQoraW50IHpmY3BfZnNmX3N0YXR1c19yZWFkKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8pCiB7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHFkaW8tPmFkYXB0ZXI7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwogCXN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpzcl9idWY7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCWludCByZXR2YWwgPSAtRUlPOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7CiAKLQlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX1VOU09MSUNJVEVEX1NUQVRVUywKLQkJCQkgIFpGQ1BfUkVRX05PX1FUQ0IsCi0JCQkJICBhZGFwdGVyLT5wb29sLmZzZl9yZXFfc3RhdHVzX3JlYWQpOworCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfVU5TT0xJQ0lURURfU1RBVFVTLAorCQkJCSAgYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9yZXEpOwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOwotCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfU1RBVFVTOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlWzJdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKLQlyZXEtPnNiYWxlX2N1cnIgPSAyOworCXJlcS0+cXVldWVfcmVxLnNiYWxlX2N1cnIgPSAyOwogCi0Jc3JfYnVmID0gbWVtcG9vbF9hbGxvYyhhZGFwdGVyLT5wb29sLmRhdGFfc3RhdHVzX3JlYWQsIEdGUF9BVE9NSUMpOworCXNyX2J1ZiA9IG1lbXBvb2xfYWxsb2MoYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9kYXRhLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNyX2J1ZikgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxlZF9idWY7CiAJfQogCW1lbXNldChzcl9idWYsIDAsIHNpemVvZigqc3JfYnVmKSk7CiAJcmVxLT5kYXRhID0gc3JfYnVmOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX2N1cnIocmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CiAJc2JhbGUtPmFkZHIgPSAodm9pZCAqKSBzcl9idWY7CiAJc2JhbGUtPmxlbmd0aCA9IHNpemVvZigqc3JfYnVmKTsKIApAQCAtODUzLDEyICs4NDUsMTIgQEAKIAlnb3RvIG91dDsKIAogZmFpbGVkX3JlcV9zZW5kOgotCW1lbXBvb2xfZnJlZShzcl9idWYsIGFkYXB0ZXItPnBvb2wuZGF0YV9zdGF0dXNfcmVhZCk7CisJbWVtcG9vbF9mcmVlKHNyX2J1ZiwgYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9kYXRhKTsKIGZhaWxlZF9idWY6CiAJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQl6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Vuc29sKCJmYWlsIiwgYWRhcHRlciwgTlVMTCk7CisJemZjcF9kYmZfaGJhX2ZzZl91bnNvbCgiZmFpbCIsIGFkYXB0ZXItPmRiZiwgTlVMTCk7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC05MDAsNyArODkyLDcgQEAKIAljYXNlIEZTRl9BREFQVEVSX1NUQVRVU19BVkFJTEFCTEU6CiAJCXN3aXRjaCAoZnNxLT53b3JkWzBdKSB7CiAJCWNhc2UgRlNGX1NRX0lOVk9LRV9MSU5LX1RFU1RfUFJPQ0VEVVJFOgotCQkJemZjcF90ZXN0X2xpbmsodW5pdC0+cG9ydCk7CisJCQl6ZmNwX2ZjX3Rlc3RfbGluayh1bml0LT5wb3J0KTsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIEZTRl9TUV9VTFBfREVQRU5ERU5UX0VSUF9SRVFVSVJFRDoKIAkJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKQEAgLTkyNSwxMyArOTE3LDEzIEBACiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSA9IE5VTEw7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IHVuaXQtPnBvcnQtPmFkYXB0ZXItPnFkaW87CiAKLQlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOwotCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoYWRhcHRlcikpCisJc3Bpbl9sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKKwlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KHFkaW8pKQogCQlnb3RvIG91dDsKLQlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX0FCT1JUX0ZDUF9DTU5ELAotCQkJCSAgMCwgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2Fib3J0KTsKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0FCT1JUX0ZDUF9DTU5ELAorCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5zY3NpX2Fib3J0KTsKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmVxID0gTlVMTDsKIAkJZ290byBvdXQ7CkBAIC05NDEsNyArOTMzLDcgQEAKIAkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQpKSkKIAkJZ290byBvdXRfZXJyb3JfZnJlZTsKIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTk1OSw3ICs5NTEsNyBAQAogCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiAJcmVxID0gTlVMTDsKIG91dDoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXE7CiB9CiAKQEAgLTk3Niw3ICs5NjgsNyBAQAogCiAJc3dpdGNoIChoZWFkZXItPmZzZl9zdGF0dXMpIHsKICAgICAgICAgY2FzZSBGU0ZfR09PRDoKLQkJemZjcF9zYW5fZGJmX2V2ZW50X2N0X3Jlc3BvbnNlKHJlcSk7CisJCXpmY3BfZGJmX3Nhbl9jdF9yZXNwb25zZShyZXEpOwogCQlzZW5kX2N0LT5zdGF0dXMgPSAwOwogCQlicmVhazsKICAgICAgICAgY2FzZSBGU0ZfU0VSVklDRV9DTEFTU19OT1RfU1VQUE9SVEVEOgpAQCAtMTAzNSw4ICsxMDI3LDEwIEBACiAJCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfcmVzcCwKIAkJCQkgICAgICAgaW50IG1heF9zYmFscykKIHsKLQlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHJlcSk7Ci0JdTMyIGZlYXQgPSByZXEtPmFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXM7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHJlcS0+YWRhcHRlcjsKKwlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKGFkYXB0ZXItPnFkaW8sCisJCQkJCQkJICAgICAgICZyZXEtPnF1ZXVlX3JlcSk7CisJdTMyIGZlYXQgPSBhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzOwogCWludCBieXRlczsKIAogCWlmICghKGZlYXQgJiBGU0ZfRkVBVFVSRV9FTFNfQ1RfQ0hBSU5FRF9TQkFMUykpIHsKQEAgLTEwNTMsMTggKzEwNDcsMjUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhyZXEsIFNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwKKwlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKGFkYXB0ZXItPnFkaW8sICZyZXEtPnF1ZXVlX3JlcSwKKwkJCQkJU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFELAogCQkJCQlzZ19yZXEsIG1heF9zYmFscyk7CiAJaWYgKGJ5dGVzIDw9IDApCiAJCXJldHVybiAtRUlPOwogCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQucmVxX2J1Zl9sZW5ndGggPSBieXRlczsKLQlyZXEtPnNiYWxlX2N1cnIgPSBaRkNQX0xBU1RfU0JBTEVfUEVSX1NCQUw7CisJcmVxLT5xdWV1ZV9yZXEuc2JhbGVfY3VyciA9IFpGQ1BfTEFTVF9TQkFMRV9QRVJfU0JBTDsKIAotCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2cocmVxLCBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsCisJYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhhZGFwdGVyLT5xZGlvLCAmcmVxLT5xdWV1ZV9yZXEsCisJCQkJCVNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwKIAkJCQkJc2dfcmVzcCwgbWF4X3NiYWxzKTsKIAlpZiAoYnl0ZXMgPD0gMCkKIAkJcmV0dXJuIC1FSU87CisKKwkvKiBjb21tb24gc2V0dGluZ3MgZm9yIGN0L2dzIGFuZCBlbHMgcmVxdWVzdHMgKi8KIAlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnJlc3BfYnVmX2xlbmd0aCA9IGJ5dGVzOworCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuc2VydmljZV9jbGFzcyA9IEZTRl9DTEFTU18zOworCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQudGltZW91dCA9IDIgKiBSX0FfVE9WOworCXpmY3BfZnNmX3N0YXJ0X3RpbWVyKHJlcSwgMiAqIFJfQV9UT1YgKyAxMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwNzMsMjcgKzEwNzQsMjYgQEAKICAqIHpmY3BfZnNmX3NlbmRfY3QgLSBpbml0aWF0ZSBhIEdlbmVyaWMgU2VydmljZSByZXF1ZXN0IChGQy1HUykKICAqIEBjdDogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9zZW5kX2N0IHdpdGggZGF0YSBmb3IgcmVxdWVzdAogICogQHBvb2w6IGlmIG5vbi1udWxsIHRoaXMgbWVtcG9vbCBpcyB1c2VkIHRvIGFsbG9jYXRlIHN0cnVjdCB6ZmNwX2ZzZl9yZXEKLSAqIEBlcnBfYWN0aW9uOiBpZiBub24tbnVsbCB0aGUgR2VuZXJpYyBTZXJ2aWNlIHJlcXVlc3Qgc2VudCB3aXRoaW4gRVJQCiAgKi8KLWludCB6ZmNwX2ZzZl9zZW5kX2N0KHN0cnVjdCB6ZmNwX3NlbmRfY3QgKmN0LCBtZW1wb29sX3QgKnBvb2wsCi0JCSAgICAgc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKK2ludCB6ZmNwX2ZzZl9zZW5kX2N0KHN0cnVjdCB6ZmNwX3NlbmRfY3QgKmN0LCBtZW1wb29sX3QgKnBvb2wpCiB7CiAJc3RydWN0IHpmY3Bfd2thX3BvcnQgKndrYV9wb3J0ID0gY3QtPndrYV9wb3J0OwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB3a2FfcG9ydC0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gd2thX3BvcnQtPmFkYXB0ZXItPnFkaW87CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwogCWludCByZXQgPSAtRUlPOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7CiAKLQlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX1NFTkRfR0VORVJJQywKLQkJCQkgIFpGQ1BfUkVRX0FVVE9fQ0xFQU5VUCwgcG9vbCk7CisJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9TRU5EX0dFTkVSSUMsIHBvb2wpOworCiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldCA9IFBUUl9FUlIocmVxKTsKIAkJZ290byBvdXQ7CiAJfQogCisJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7CiAJcmV0ID0gemZjcF9mc2Zfc2V0dXBfY3RfZWxzX3NiYWxzKHJlcSwgY3QtPnJlcSwgY3QtPnJlc3AsCiAJCQkJCSAgRlNGX01BWF9TQkFMU19QRVJfUkVRKTsKIAlpZiAocmV0KQpAQCAtMTEwMSwxOCArMTEwMSw5IEBACiAKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9zZW5kX2N0X2hhbmRsZXI7CiAJcmVxLT5xdGNiLT5oZWFkZXIucG9ydF9oYW5kbGUgPSB3a2FfcG9ydC0+aGFuZGxlOwotCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuc2VydmljZV9jbGFzcyA9IEZTRl9DTEFTU18zOwotCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQudGltZW91dCA9IGN0LT50aW1lb3V0OwogCXJlcS0+ZGF0YSA9IGN0OwogCi0JemZjcF9zYW5fZGJmX2V2ZW50X2N0X3JlcXVlc3QocmVxKTsKLQotCWlmIChlcnBfYWN0aW9uKSB7Ci0JCWVycF9hY3Rpb24tPmZzZl9yZXEgPSByZXE7Ci0JCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247Ci0JCXpmY3BfZnNmX3N0YXJ0X2VycF90aW1lcihyZXEpOwotCX0gZWxzZQotCQl6ZmNwX2ZzZl9zdGFydF90aW1lcihyZXEsIFpGQ1BfRlNGX1JFUVVFU1RfVElNRU9VVCk7CisJemZjcF9kYmZfc2FuX2N0X3JlcXVlc3QocmVxKTsKIAogCXJldCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7CiAJaWYgKHJldCkKQEAgLTExMjIsMTAgKzExMTMsOCBAQAogCiBmYWlsZWRfc2VuZDoKIAl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwotCWlmIChlcnBfYWN0aW9uKQotCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKIG91dDoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTExNDIsNyArMTEzMSw3IEBACiAKIAlzd2l0Y2ggKGhlYWRlci0+ZnNmX3N0YXR1cykgewogCWNhc2UgRlNGX0dPT0Q6Ci0JCXpmY3Bfc2FuX2RiZl9ldmVudF9lbHNfcmVzcG9uc2UocmVxKTsKKwkJemZjcF9kYmZfc2FuX2Vsc19yZXNwb25zZShyZXEpOwogCQlzZW5kX2Vscy0+c3RhdHVzID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBGU0ZfU0VSVklDRV9DTEFTU19OT1RfU1VQUE9SVEVEOgpAQCAtMTE1Miw3ICsxMTQxLDcgQEAKIAkJc3dpdGNoIChoZWFkZXItPmZzZl9zdGF0dXNfcXVhbC53b3JkWzBdKXsKIAkJY2FzZSBGU0ZfU1FfSU5WT0tFX0xJTktfVEVTVF9QUk9DRURVUkU6CiAJCQlpZiAocG9ydCAmJiAoc2VuZF9lbHMtPmxzX2NvZGUgIT0gWkZDUF9MU19BRElTQykpCi0JCQkJemZjcF90ZXN0X2xpbmsocG9ydCk7CisJCQkJemZjcF9mY190ZXN0X2xpbmsocG9ydCk7CiAJCQkvKmZhbGwgdGhyb3VnaCAqLwogCQljYXNlIEZTRl9TUV9VTFBfREVQRU5ERU5UX0VSUF9SRVFVSVJFRDoKIAkJY2FzZSBGU0ZfU1FfUkVUUllfSUZfUE9TU0lCTEU6CkBAIC0xMTg4LDM1ICsxMTc3LDMyIEBACiBpbnQgemZjcF9mc2Zfc2VuZF9lbHMoc3RydWN0IHpmY3Bfc2VuZF9lbHMgKmVscykKIHsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVscy0+YWRhcHRlcjsKLQlzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3N1cHBvcnQgKmJvdHRvbTsKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gZWxzLT5hZGFwdGVyLT5xZGlvOwogCWludCByZXQgPSAtRUlPOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7Ci0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9TRU5EX0VMUywKLQkJCQkgIFpGQ1BfUkVRX0FVVE9fQ0xFQU5VUCwgTlVMTCk7CisKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX1NFTkRfRUxTLCBOVUxMKTsKKwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXQgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KIAorCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwogCXJldCA9IHpmY3BfZnNmX3NldHVwX2N0X2Vsc19zYmFscyhyZXEsIGVscy0+cmVxLCBlbHMtPnJlc3AsIDIpOwogCiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWRfc2VuZDsKIAotCWJvdHRvbSA9ICZyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0OworCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuZF9pZCA9IGVscy0+ZF9pZDsKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9zZW5kX2Vsc19oYW5kbGVyOwotCWJvdHRvbS0+ZF9pZCA9IGVscy0+ZF9pZDsKLQlib3R0b20tPnNlcnZpY2VfY2xhc3MgPSBGU0ZfQ0xBU1NfMzsKLQlib3R0b20tPnRpbWVvdXQgPSAyICogUl9BX1RPVjsKIAlyZXEtPmRhdGEgPSBlbHM7CiAKLQl6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzX3JlcXVlc3QocmVxKTsKKwl6ZmNwX2RiZl9zYW5fZWxzX3JlcXVlc3QocmVxKTsKIAotCXpmY3BfZnNmX3N0YXJ0X3RpbWVyKHJlcSwgWkZDUF9GU0ZfUkVRVUVTVF9USU1FT1VUKTsKIAlyZXQgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkX3NlbmQ7CkBAIC0xMjI2LDcgKzEyMTIsNyBAQAogZmFpbGVkX3NlbmQ6CiAJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKIG91dDoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyMzQsMjIgKzEyMjAsMjMgQEAKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBlcnBfYWN0aW9uLT5hZGFwdGVyLT5xZGlvOwogCWludCByZXR2YWwgPSAtRUlPOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7Ci0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLAotCQkJCSAgRlNGX1FUQ0JfRVhDSEFOR0VfQ09ORklHX0RBVEEsCi0JCQkJICBaRkNQX1JFUV9BVVRPX0NMRUFOVVAsCi0JCQkJICBhZGFwdGVyLT5wb29sLmZzZl9yZXFfZXJwKTsKKworCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRVhDSEFOR0VfQ09ORklHX0RBVEEsCisJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOworCiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIocmVxKTsKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHJlcSk7CisJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTI2OSwyOSArMTI1NiwyOSBAQAogCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKIAl9CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1pbnQgemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2RhdGFfc3luYyhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAoraW50IHpmY3BfZnNmX2V4Y2hhbmdlX2NvbmZpZ19kYXRhX3N5bmMoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKIAkJCQkgICAgICAgc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9jb25maWcgKmRhdGEpCiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSA9IE5VTEw7CiAJaW50IHJldHZhbCA9IC1FSU87CiAKLQlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOwotCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoYWRhcHRlcikpCisJc3Bpbl9sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKKwlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KHFkaW8pKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX0VYQ0hBTkdFX0NPTkZJR19EQVRBLAotCQkJCSAgMCwgTlVMTCk7CisJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9FWENIQU5HRV9DT05GSUdfREFUQSwgTlVMTCk7CisKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHJlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9leGNoYW5nZV9jb25maWdfZGF0YV9oYW5kbGVyOwpAQCAtMTMwNywxNiArMTI5NCwxNSBAQAogCiAJemZjcF9mc2Zfc3RhcnRfdGltZXIocmVxLCBaRkNQX0ZTRl9SRVFVRVNUX1RJTUVPVVQpOwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlpZiAoIXJldHZhbCkKLQkJd2FpdF9ldmVudChyZXEtPmNvbXBsZXRpb25fd3EsCi0JCQkgICByZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9DT01QTEVURUQpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyZXEtPmNvbXBsZXRpb24pOwogCiAJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKIAlyZXR1cm4gcmV0dmFsOwogCiBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTMyNywyNiArMTMxMywyOCBAQAogICovCiBpbnQgemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CisJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IGVycF9hY3Rpb24tPmFkYXB0ZXItPnFkaW87CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKIAlpbnQgcmV0dmFsID0gLUVJTzsKIAotCWlmICghKGFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9IQkFBUElfTUFOQUdFTUVOVCkpCisJaWYgKCEocWRpby0+YWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX0hCQUFQSV9NQU5BR0VNRU5UKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7Ci0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9FWENIQU5HRV9QT1JUX0RBVEEsCi0JCQkJICBaRkNQX1JFUV9BVVRPX0NMRUFOVVAsCi0JCQkJICBhZGFwdGVyLT5wb29sLmZzZl9yZXFfZXJwKTsKKworCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRVhDSEFOR0VfUE9SVF9EQVRBLAorCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKKwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOworCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTEzNjEsMzIgKzEzNDksMzIgQEAKIAkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CiAJfQogb3V0OgotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAogLyoqCiAgKiB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGFfc3luYyAtIHJlcXVlc3QgaW5mb3JtYXRpb24gYWJvdXQgbG9jYWwgcG9ydAotICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfYWRhcHRlcgorICogQHFkaW86IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpbwogICogQGRhdGE6IHBvaW50ZXIgdG8gc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9wb3J0CiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIG90aGVyd2lzZQogICovCi1pbnQgemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhX3N5bmMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKK2ludCB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGFfc3luYyhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAogCQkJCSAgICAgc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9wb3J0ICpkYXRhKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEgPSBOVUxMOwogCWludCByZXR2YWwgPSAtRUlPOwogCi0JaWYgKCEoYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX0hCQUFQSV9NQU5BR0VNRU5UKSkKKwlpZiAoIShxZGlvLT5hZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfSEJBQVBJX01BTkFHRU1FTlQpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOwotCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoYWRhcHRlcikpCisJc3Bpbl9sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKKwlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KHFkaW8pKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX0VYQ0hBTkdFX1BPUlRfREFUQSwgMCwKLQkJCQkgIE5VTEwpOworCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRVhDSEFOR0VfUE9SVF9EQVRBLCBOVUxMKTsKKwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTEzOTUsMjQgKzEzODMsMjQgQEAKIAlpZiAoZGF0YSkKIAkJcmVxLT5kYXRhID0gZGF0YTsKIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGFfaGFuZGxlcjsKIAl6ZmNwX2ZzZl9zdGFydF90aW1lcihyZXEsIFpGQ1BfRlNGX1JFUVVFU1RfVElNRU9VVCk7CiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCiAJaWYgKCFyZXR2YWwpCi0JCXdhaXRfZXZlbnQocmVxLT5jb21wbGV0aW9uX3dxLAotCQkJICAgcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVEKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmcmVxLT5jb21wbGV0aW9uKTsKKwogCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiAKIAlyZXR1cm4gcmV0dmFsOwogCiBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTQ5OCwyNSArMTQ4NiwyNSBAQAogaW50IHpmY3BfZnNmX29wZW5fcG9ydChzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7CisJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IGVycF9hY3Rpb24tPmFkYXB0ZXItPnFkaW87CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGVycF9hY3Rpb24tPnBvcnQ7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwogCWludCByZXR2YWwgPSAtRUlPOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7CiAKLQlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsCi0JCQkJICBGU0ZfUVRDQl9PUEVOX1BPUlRfV0lUSF9ESUQsCi0JCQkJICBaRkNQX1JFUV9BVVRPX0NMRUFOVVAsCi0JCQkJICBhZGFwdGVyLT5wb29sLmZzZl9yZXFfZXJwKTsKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX09QRU5fUE9SVF9XSVRIX0RJRCwKKwkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CisKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocmVxKTsKKwlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKICAgICAgICAgc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogICAgICAgICBzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE1MzUsNyArMTUyMyw3IEBACiAJCXpmY3BfcG9ydF9wdXQocG9ydCk7CiAJfQogb3V0OgotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTU2OSwyMyArMTU1NywyNCBAQAogaW50IHpmY3BfZnNmX2Nsb3NlX3BvcnQoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IGVycF9hY3Rpb24tPmFkYXB0ZXItPnFkaW87CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwogCWludCByZXR2YWwgPSAtRUlPOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7CiAKLQlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX0NMT1NFX1BPUlQsCi0JCQkJICBaRkNQX1JFUV9BVVRPX0NMRUFOVVAsCi0JCQkJICBhZGFwdGVyLT5wb29sLmZzZl9yZXFfZXJwKTsKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0NMT1NFX1BPUlQsCisJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOworCiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIocmVxKTsKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHJlcSk7CisJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTYwMiw3ICsxNTkxLDcgQEAKIAkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CiAJfQogb3V0OgotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTY0NSwyNCArMTYzNCwyNCBAQAogaW50IHpmY3BfZnNmX29wZW5fd2thX3BvcnQoc3RydWN0IHpmY3Bfd2thX3BvcnQgKndrYV9wb3J0KQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gd2thX3BvcnQtPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IHdrYV9wb3J0LT5hZGFwdGVyLT5xZGlvOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKIAlpbnQgcmV0dmFsID0gLUVJTzsKIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwogCi0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLAotCQkJCSAgRlNGX1FUQ0JfT1BFTl9QT1JUX1dJVEhfRElELAotCQkJCSAgWkZDUF9SRVFfQVVUT19DTEVBTlVQLAotCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2VycCk7CisJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9PUEVOX1BPUlRfV0lUSF9ESUQsCisJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOworCiAJaWYgKHVubGlrZWx5KElTX0VSUihyZXEpKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOworCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE2NzUsNyArMTY2NCw3IEBACiAJaWYgKHJldHZhbCkKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKIG91dDoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE3MDAsMjMgKzE2ODksMjQgQEAKIGludCB6ZmNwX2ZzZl9jbG9zZV93a2FfcG9ydChzdHJ1Y3QgemZjcF93a2FfcG9ydCAqd2thX3BvcnQpCiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB3a2FfcG9ydC0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gd2thX3BvcnQtPmFkYXB0ZXItPnFkaW87CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwogCWludCByZXR2YWwgPSAtRUlPOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7CiAKLQlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX0NMT1NFX1BPUlQsCi0JCQkJICBaRkNQX1JFUV9BVVRPX0NMRUFOVVAsCi0JCQkJICBhZGFwdGVyLT5wb29sLmZzZl9yZXFfZXJwKTsKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0NMT1NFX1BPUlQsCisJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOworCiAJaWYgKHVubGlrZWx5KElTX0VSUihyZXEpKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOworCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE3MjksNyArMTcxOSw3IEBACiAJaWYgKHJldHZhbCkKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKIG91dDoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE3OTEsMjMgKzE3ODEsMjQgQEAKIGludCB6ZmNwX2ZzZl9jbG9zZV9waHlzaWNhbF9wb3J0KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBlcnBfYWN0aW9uLT5hZGFwdGVyLT5xZGlvOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKIAlpbnQgcmV0dmFsID0gLUVJTzsKIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwogCi0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9DTE9TRV9QSFlTSUNBTF9QT1JULAotCQkJCSAgWkZDUF9SRVFfQVVUT19DTEVBTlVQLAotCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2VycCk7CisJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9DTE9TRV9QSFlTSUNBTF9QT1JULAorCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKKwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOworCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE4MjQsNyArMTgxNSw3IEBACiAJCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOwogCX0KIG91dDoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE4OTUsNyArMTg4Niw3IEBACiAJY2FzZSBGU0ZfQURBUFRFUl9TVEFUVVNfQVZBSUxBQkxFOgogCQlzd2l0Y2ggKGhlYWRlci0+ZnNmX3N0YXR1c19xdWFsLndvcmRbMF0pIHsKIAkJY2FzZSBGU0ZfU1FfSU5WT0tFX0xJTktfVEVTVF9QUk9DRURVUkU6Ci0JCQl6ZmNwX3Rlc3RfbGluayh1bml0LT5wb3J0KTsKKwkJCXpmY3BfZmNfdGVzdF9saW5rKHVuaXQtPnBvcnQpOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgRlNGX1NRX1VMUF9ERVBFTkRFTlRfRVJQX1JFUVVJUkVEOgogCQkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwpAQCAtMTk2NCwyMiArMTk1NSwyNCBAQAogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gYWRhcHRlci0+cWRpbzsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7CiAJaW50IHJldHZhbCA9IC1FSU87CiAKLQlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOwotCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoYWRhcHRlcikpCisJc3Bpbl9sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKKwlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KHFkaW8pKQogCQlnb3RvIG91dDsKIAotCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwgRlNGX1FUQ0JfT1BFTl9MVU4sCi0JCQkJICBaRkNQX1JFUV9BVVRPX0NMRUFOVVAsCi0JCQkJICBhZGFwdGVyLT5wb29sLmZzZl9yZXFfZXJwKTsKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX09QRU5fTFVOLAorCQkJCSAgYWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKKwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOworCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogICAgICAgICBzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAgICAgICAgIHNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMjAwMCw3ICsxOTkzLDcgQEAKIAkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CiAJfQogb3V0OgotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMjAyOCw3ICsyMDIxLDcgQEAKIAljYXNlIEZTRl9BREFQVEVSX1NUQVRVU19BVkFJTEFCTEU6CiAJCXN3aXRjaCAocmVxLT5xdGNiLT5oZWFkZXIuZnNmX3N0YXR1c19xdWFsLndvcmRbMF0pIHsKIAkJY2FzZSBGU0ZfU1FfSU5WT0tFX0xJTktfVEVTVF9QUk9DRURVUkU6Ci0JCQl6ZmNwX3Rlc3RfbGluayh1bml0LT5wb3J0KTsKKwkJCXpmY3BfZmNfdGVzdF9saW5rKHVuaXQtPnBvcnQpOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgRlNGX1NRX1VMUF9ERVBFTkRFTlRfRVJQX1JFUVVJUkVEOgogCQkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwpAQCAtMjA0OSwyMiArMjA0MiwyNCBAQAogaW50IHpmY3BfZnNmX2Nsb3NlX3VuaXQoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IGVycF9hY3Rpb24tPmFkYXB0ZXItPnFkaW87CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwogCWludCByZXR2YWwgPSAtRUlPOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7Ci0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9DTE9TRV9MVU4sCi0JCQkJICBaRkNQX1JFUV9BVVRPX0NMRUFOVVAsCi0JCQkJICBhZGFwdGVyLT5wb29sLmZzZl9yZXFfZXJwKTsKKworCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfQ0xPU0VfTFVOLAorCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKKwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOworCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTIwODIsNyArMjA3Nyw3IEBACiAJCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOwogCX0KIG91dDoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTIxNDEsOCArMjEzNiw4IEBACiAJfQogCWlmIChmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IpCiAJCXRyYWNlLmZsYWdzIHw9IFpGQ1BfQkxLX1JFUV9FUlJPUjsKLQl0cmFjZS5pbmJfdXNhZ2UgPSBmc2ZfcmVxLT5xZGlvX2luYl91c2FnZTsKLQl0cmFjZS5vdXRiX3VzYWdlID0gZnNmX3JlcS0+cWRpb19vdXRiX3VzYWdlOworCXRyYWNlLmluYl91c2FnZSA9IGZzZl9yZXEtPnF1ZXVlX3JlcS5xZGlvX2luYl91c2FnZTsKKwl0cmFjZS5vdXRiX3VzYWdlID0gZnNmX3JlcS0+cXVldWVfcmVxLnFkaW9fb3V0Yl91c2FnZTsKIAogCWJsa19hZGRfZHJpdmVyX2RhdGEocmVxLT5xLCByZXEsICZ0cmFjZSwgc2l6ZW9mKHRyYWNlKSk7CiB9CkBAIC0yMjE1LDExICsyMjEwLDExIEBACiAJfQogc2tpcF9mc2ZzdGF0dXM6CiAJaWYgKHNjcG50LT5yZXN1bHQgIT0gMCkKLQkJemZjcF9zY3NpX2RiZl9ldmVudF9yZXN1bHQoImVycm8iLCAzLCByZXEtPmFkYXB0ZXIsIHNjcG50LCByZXEpOworCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgiZXJybyIsIDMsIHJlcS0+YWRhcHRlci0+ZGJmLCBzY3BudCwgcmVxKTsKIAllbHNlIGlmIChzY3BudC0+cmV0cmllcyA+IDApCi0JCXpmY3Bfc2NzaV9kYmZfZXZlbnRfcmVzdWx0KCJyZXRyIiwgNCwgcmVxLT5hZGFwdGVyLCBzY3BudCwgcmVxKTsKKwkJemZjcF9kYmZfc2NzaV9yZXN1bHQoInJldHIiLCA0LCByZXEtPmFkYXB0ZXItPmRiZiwgc2NwbnQsIHJlcSk7CiAJZWxzZQotCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X3Jlc3VsdCgibm9ybSIsIDYsIHJlcS0+YWRhcHRlciwgc2NwbnQsIHJlcSk7CisJCXpmY3BfZGJmX3Njc2lfcmVzdWx0KCJub3JtIiwgNiwgcmVxLT5hZGFwdGVyLT5kYmYsIHNjcG50LCByZXEpOwogCiAJc2NwbnQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwogCShzY3BudC0+c2NzaV9kb25lKSAoc2NwbnQpOwpAQCAtMjMwOSw3ICsyMzA0LDcgQEAKIAljYXNlIEZTRl9BREFQVEVSX1NUQVRVU19BVkFJTEFCTEU6CiAJCWlmIChoZWFkZXItPmZzZl9zdGF0dXNfcXVhbC53b3JkWzBdID09CiAJCSAgICBGU0ZfU1FfSU5WT0tFX0xJTktfVEVTVF9QUk9DRURVUkUpCi0JCQl6ZmNwX3Rlc3RfbGluayh1bml0LT5wb3J0KTsKKwkJCXpmY3BfZmNfdGVzdF9saW5rKHVuaXQtPnBvcnQpOwogCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CiAJCWJyZWFrOwogCX0KQEAgLTIzNTAsMjQgKzIzNDUsMjcgQEAKIAl1bnNpZ25lZCBpbnQgc2J0eXBlID0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCWludCByZWFsX2J5dGVzLCByZXR2YWwgPSAtRUlPOwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBhZGFwdGVyLT5xZGlvOwogCiAJaWYgKHVubGlrZWx5KCEoYXRvbWljX3JlYWQoJnVuaXQtPnN0YXR1cykgJgogCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCkpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc3Bpbl9sb2NrKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJlcV9xLmNvdW50KSA8PSAwKSB7Ci0JCWF0b21pY19pbmMoJmFkYXB0ZXItPnFkaW9fb3V0Yl9mdWxsKTsKKwlzcGluX2xvY2soJnFkaW8tPnJlcV9xX2xvY2spOworCWlmIChhdG9taWNfcmVhZCgmcWRpby0+cmVxX3EuY291bnQpIDw9IDApIHsKKwkJYXRvbWljX2luYygmcWRpby0+cmVxX3FfZnVsbCk7CiAJCWdvdG8gb3V0OwogCX0KLQlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX0ZDUF9DTU5ELAotCQkJCSAgWkZDUF9SRVFfQVVUT19DTEVBTlVQLAotCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX3Njc2kpOworCisJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9GQ1BfQ01ORCwKKwkJCQkgIGFkYXB0ZXItPnBvb2wuc2NzaV9yZXEpOworCiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIocmVxKTsKIAkJZ290byBvdXQ7CiAJfQogCisJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7CiAJemZjcF91bml0X2dldCh1bml0KTsKIAlyZXEtPnVuaXQgPSB1bml0OwogCXJlcS0+ZGF0YSA9IHNjc2lfY21uZDsKQEAgLTI0MTksMTEgKzI0MTcsMTEgQEAKIAlyZXEtPnF0Y2ItPmJvdHRvbS5pby5mY3BfY21uZF9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGZjcF9jbW5kX2l1KSArCiAJCWZjcF9jbW5kX2l1LT5hZGRfZmNwX2NkYl9sZW5ndGggKyBzaXplb2YodTMyKTsKIAotCXJlYWxfYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhyZXEsIHNidHlwZSwKKwlyZWFsX2J5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2cocWRpbywgJnJlcS0+cXVldWVfcmVxLCBzYnR5cGUsCiAJCQkJCSAgICAgc2NzaV9zZ2xpc3Qoc2NzaV9jbW5kKSwKIAkJCQkJICAgICBGU0ZfTUFYX1NCQUxTX1BFUl9SRVEpOwogCWlmICh1bmxpa2VseShyZWFsX2J5dGVzIDwgMCkpIHsKLQkJaWYgKHJlcS0+c2JhbF9udW1iZXIgPj0gRlNGX01BWF9TQkFMU19QRVJfUkVRKSB7CisJCWlmIChyZXEtPnF1ZXVlX3JlcS5zYmFsX251bWJlciA+PSBGU0ZfTUFYX1NCQUxTX1BFUl9SRVEpIHsKIAkJCWRldl9lcnIoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKIAkJCQkiT3ZlcnNpemUgZGF0YSBwYWNrYWdlLCB1bml0IDB4JTAxNkx4ICIKIAkJCQkib24gcG9ydCAweCUwMTZMeCBjbG9zZWRcbiIsCkBAIC0yNDQ4LDcgKzI0NDYsNyBAQAogCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiAJc2NzaV9jbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIG91dDoKLQlzcGluX3VubG9jaygmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2soJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTI0NjMsMTcgKzI0NjEsMTkgQEAKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxID0gTlVMTDsKIAlzdHJ1Y3QgZmNwX2NtbmRfaXUgKmZjcF9jbW5kX2l1OwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSB1bml0LT5wb3J0LT5hZGFwdGVyLT5xZGlvOwogCiAJaWYgKHVubGlrZWx5KCEoYXRvbWljX3JlYWQoJnVuaXQtPnN0YXR1cykgJgogCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCkpKQogCQlyZXR1cm4gTlVMTDsKIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwotCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwgRlNGX1FUQ0JfRkNQX0NNTkQsIDAsCi0JCQkJICBhZGFwdGVyLT5wb29sLmZzZl9yZXFfc2NzaSk7CisKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0ZDUF9DTU5ELAorCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5zY3NpX3JlcSk7CisKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmVxID0gTlVMTDsKIAkJZ290byBvdXQ7CkBAIC0yNDg5LDcgKzI0ODksNyBAQAogCXJlcS0+cXRjYi0+Ym90dG9tLmlvLmZjcF9jbW5kX2xlbmd0aCA9IAlzaXplb2Yoc3RydWN0IGZjcF9jbW5kX2l1KSArCiAJCQkJCQlzaXplb2YodTMyKTsKIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfV1JJVEU7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0yNTA0LDcgKzI1MDQsNyBAQAogCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiAJcmVxID0gTlVMTDsKIG91dDoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXE7CiB9CiAKQEAgLTI1MjIsNiArMjUyMiw3IEBACiAJCQkJCSAgIHN0cnVjdCB6ZmNwX2ZzZl9jZmRjICpmc2ZfY2ZkYykKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CisJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IGFkYXB0ZXItPnFkaW87CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxID0gTlVMTDsKIAlzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3N1cHBvcnQgKmJvdHRvbTsKIAlpbnQgZGlyZWN0aW9uLCByZXR2YWwgPSAtRUlPLCBieXRlczsKQEAgLTI1NDAsMTEgKzI1NDEsMTEgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7CiAKLQlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIGZzZl9jZmRjLT5jb21tYW5kLCAwLCBOVUxMKTsKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIGZzZl9jZmRjLT5jb21tYW5kLCBOVUxMKTsKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0dmFsID0gLUVQRVJNOwogCQlnb3RvIG91dDsKQEAgLTI1NTIsMTQgKzI1NTMsMTUgQEAKIAogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX2NvbnRyb2xfZmlsZV9oYW5kbGVyOwogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHJlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gZGlyZWN0aW9uOwogCiAJYm90dG9tID0gJnJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQ7CiAJYm90dG9tLT5vcGVyYXRpb25fc3VidHlwZSA9IEZTRl9DRkRDX09QRVJBVElPTl9TVUJUWVBFOwogCWJvdHRvbS0+b3B0aW9uID0gZnNmX2NmZGMtPm9wdGlvbjsKIAotCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2cocmVxLCBkaXJlY3Rpb24sIGZzZl9jZmRjLT5zZywKKwlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSwKKwkJCQkJZGlyZWN0aW9uLCBmc2ZfY2ZkYy0+c2csCiAJCQkJCUZTRl9NQVhfU0JBTFNfUEVSX1JFUSk7CiAJaWYgKGJ5dGVzICE9IFpGQ1BfQ0ZEQ19NQVhfU0laRSkgewogCQl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwpAQCAtMjU2OSwxMiArMjU3MSw1MyBAQAogCXpmY3BfZnNmX3N0YXJ0X3RpbWVyKHJlcSwgWkZDUF9GU0ZfUkVRVUVTVF9USU1FT1VUKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogb3V0OgotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAKIAlpZiAoIXJldHZhbCkgewotCQl3YWl0X2V2ZW50KHJlcS0+Y29tcGxldGlvbl93cSwKLQkJCSAgIHJlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0NPTVBMRVRFRCk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJlcS0+Y29tcGxldGlvbik7CiAJCXJldHVybiByZXE7CiAJfQogCXJldHVybiBFUlJfUFRSKHJldHZhbCk7CiB9CisKKy8qKgorICogemZjcF9mc2ZfcmVxaWRfY2hlY2sgLSB2YWxpZGF0ZSByZXFfaWQgY29udGFpbmVkIGluIFNCQUwgcmV0dXJuZWQgYnkgUURJTworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfYWRhcHRlcgorICogQHNiYWxfaWR4OiByZXNwb25zZSBxdWV1ZSBpbmRleCBvZiBTQkFMIHRvIGJlIHByb2Nlc3NlZAorICovCit2b2lkIHpmY3BfZnNmX3JlcWlkX2NoZWNrKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIGludCBzYmFsX2lkeCkKK3sKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcWRpby0+YWRhcHRlcjsKKwlzdHJ1Y3QgcWRpb19idWZmZXIgKnNiYWwgPSBxZGlvLT5yZXNwX3Euc2JhbFtzYmFsX2lkeF07CisJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXE7CisJdW5zaWduZWQgbG9uZyBmbGFncywgcmVxX2lkOworCWludCBpZHg7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IFFESU9fTUFYX0VMRU1FTlRTX1BFUl9CVUZGRVI7IGlkeCsrKSB7CisKKwkJc2JhbGUgPSAmc2JhbC0+ZWxlbWVudFtpZHhdOworCQlyZXFfaWQgPSAodW5zaWduZWQgbG9uZykgc2JhbGUtPmFkZHI7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7CisJCWZzZl9yZXEgPSB6ZmNwX3JlcWxpc3RfZmluZChhZGFwdGVyLCByZXFfaWQpOworCisJCWlmICghZnNmX3JlcSkKKwkJCS8qCisJCQkgKiBVbmtub3duIHJlcXVlc3QgbWVhbnMgdGhhdCB3ZSBoYXZlIHBvdGVudGlhbGx5IG1lbW9yeQorCQkJICogY29ycnVwdGlvbiBhbmQgbXVzdCBzdG9wIHRoZSBtYWNoaW5lIGltbWVkaWF0ZWx5LgorCQkJICovCisJCQlwYW5pYygiZXJyb3I6IHVua25vd24gcmVxX2lkICglbHgpIG9uIGFkYXB0ZXIgJXMuXG4iLAorCQkJICAgICAgcmVxX2lkLCBkZXZfbmFtZSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7CisKKwkJbGlzdF9kZWwoJmZzZl9yZXEtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7CisKKwkJZnNmX3JlcS0+cXVldWVfcmVxLnNiYWxfcmVzcG9uc2UgPSBzYmFsX2lkeDsKKwkJZnNmX3JlcS0+cXVldWVfcmVxLnFkaW9faW5iX3VzYWdlID0KKwkJCWF0b21pY19yZWFkKCZxZGlvLT5yZXNwX3EuY291bnQpOworCQl6ZmNwX2ZzZl9yZXFfY29tcGxldGUoZnNmX3JlcSk7CisKKwkJaWYgKGxpa2VseShzYmFsZS0+ZmxhZ3MgJiBTQkFMX0ZMQUdTX0xBU1RfRU5UUlkpKQorCQkJYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmgKaW5kZXggZGY3ZjIzMi4uZGNjN2MxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oCkBAIC0zLDEzICszLDE0IEBACiAgKgogICogSW50ZXJmYWNlIHRvIHRoZSBGU0Ygc3VwcG9ydCBmdW5jdGlvbnMuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA4CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKICAqLwogCiAjaWZuZGVmIEZTRl9ICiAjZGVmaW5lIEZTRl9ICiAKICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCiAjZGVmaW5lIEZTRl9RVENCX0NVUlJFTlRfVkVSU0lPTgkJMHgwMDAwMDAwMQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCmluZGV4IGUwYTIxNTMuLjZjNTIyOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFNldHVwIGFuZCBoZWxwZXIgZnVuY3Rpb25zIHRvIGFjY2VzcyBRRElPLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOAorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiemZjcCIKQEAgLTM0LDI5ICszNCwxMCBAQAogCXJldHVybiAmcS0+c2JhbFtzYmFsX2lkeF0tPmVsZW1lbnRbc2JhbGVfaWR4XTsKIH0KIAotLyoqCi0gKiB6ZmNwX3FkaW9fZnJlZSAtIGZyZWUgbWVtb3J5IHVzZWQgYnkgcmVxdWVzdC0gYW5kIHJlc3Bvc25lIHF1ZXVlCi0gKiBAYWRhcHRlcjogcG9pbnRlciB0byB0aGUgemZjcF9hZGFwdGVyIHN0cnVjdHVyZQotICovCi12b2lkIHpmY3BfcWRpb19mcmVlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCB6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcihzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBjaGFyICppZCkKIHsKLQlzdHJ1Y3QgcWRpb19idWZmZXIgKipzYmFsX3JlcSwgKipzYmFsX3Jlc3A7Ci0JaW50IHA7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHFkaW8tPmFkYXB0ZXI7CiAKLQlpZiAoYWRhcHRlci0+Y2N3X2RldmljZSkKLQkJcWRpb19mcmVlKGFkYXB0ZXItPmNjd19kZXZpY2UpOwotCi0Jc2JhbF9yZXEgPSBhZGFwdGVyLT5yZXFfcS5zYmFsOwotCXNiYWxfcmVzcCA9IGFkYXB0ZXItPnJlc3BfcS5zYmFsOwotCi0JZm9yIChwID0gMDsgcCA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7IHAgKz0gUUJVRkZfUEVSX1BBR0UpIHsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBzYmFsX3JlcVtwXSk7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgc2JhbF9yZXNwW3BdKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmlkKQotewogCWRldl93YXJuKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsICJBIFFESU8gcHJvYmxlbSBvY2N1cnJlZFxuIik7CiAKIAl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLApAQCAtNzUsNzIgKzU2LDQ3IEBACiB9CiAKIC8qIHRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIHByaW9yIHRvIHVwZGF0aW5nIHRoZSBxdWV1ZSBmaWxsIGxldmVsICovCi1zdGF0aWMgdm9pZCB6ZmNwX3FkaW9fYWNjb3VudChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGlubGluZSB2b2lkIHpmY3BfcWRpb19hY2NvdW50KHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8pCiB7Ci0Ja3RpbWVfdCBub3c7Ci0JczY0IHNwYW47CisJdW5zaWduZWQgbG9uZyBsb25nIG5vdywgc3BhbjsKIAlpbnQgZnJlZSwgdXNlZDsKIAotCXNwaW5fbG9jaygmYWRhcHRlci0+cWRpb19zdGF0X2xvY2spOwotCW5vdyA9IGt0aW1lX2dldCgpOwotCXNwYW4gPSBrdGltZV91c19kZWx0YShub3csIGFkYXB0ZXItPnJlcV9xX3RpbWUpOwotCWZyZWUgPSBtYXgoMCwgYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJlcV9xLmNvdW50KSk7CisJc3Bpbl9sb2NrKCZxZGlvLT5zdGF0X2xvY2spOworCW5vdyA9IGdldF9jbG9ja19tb25vdG9uaWMoKTsKKwlzcGFuID0gKG5vdyAtIHFkaW8tPnJlcV9xX3RpbWUpID4+IDEyOworCWZyZWUgPSBhdG9taWNfcmVhZCgmcWRpby0+cmVxX3EuY291bnQpOwogCXVzZWQgPSBRRElPX01BWF9CVUZGRVJTX1BFUl9RIC0gZnJlZTsKLQlhZGFwdGVyLT5yZXFfcV91dGlsICs9IHVzZWQgKiBzcGFuOwotCWFkYXB0ZXItPnJlcV9xX3RpbWUgPSBub3c7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPnFkaW9fc3RhdF9sb2NrKTsKKwlxZGlvLT5yZXFfcV91dGlsICs9IHVzZWQgKiBzcGFuOworCXFkaW8tPnJlcV9xX3RpbWUgPSBub3c7CisJc3Bpbl91bmxvY2soJnFkaW8tPnN0YXRfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfcWRpb19pbnRfcmVxKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgcWRpb19lcnIsCiAJCQkgICAgICBpbnQgcXVldWVfbm8sIGludCBmaXJzdCwgaW50IGNvdW50LAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBwYXJtKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBwYXJtOwotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnF1ZXVlID0gJmFkYXB0ZXItPnJlcV9xOworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSAoc3RydWN0IHpmY3BfcWRpbyAqKSBwYXJtOworCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnF1ZXVlID0gJnFkaW8tPnJlcV9xOwogCiAJaWYgKHVubGlrZWx5KHFkaW9fZXJyKSkgewotCQl6ZmNwX2hiYV9kYmZfZXZlbnRfcWRpbyhhZGFwdGVyLCBxZGlvX2VyciwgZmlyc3QsIGNvdW50KTsKLQkJemZjcF9xZGlvX2hhbmRsZXJfZXJyb3IoYWRhcHRlciwgInFkaXJlcTEiKTsKKwkJemZjcF9kYmZfaGJhX3FkaW8ocWRpby0+YWRhcHRlci0+ZGJmLCBxZGlvX2VyciwgZmlyc3QsCisJCQkJCWNvdW50KTsKKwkJemZjcF9xZGlvX2hhbmRsZXJfZXJyb3IocWRpbywgInFkaXJlcTEiKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIGNsZWFudXAgYWxsIFNCQUxzIGJlaW5nIHByb2dyYW0tb3duZWQgbm93ICovCiAJemZjcF9xZGlvX3plcm9fc2JhbHMocXVldWUtPnNiYWwsIGZpcnN0LCBjb3VudCk7CiAKLQl6ZmNwX3FkaW9fYWNjb3VudChhZGFwdGVyKTsKKwl6ZmNwX3FkaW9fYWNjb3VudChxZGlvKTsKIAlhdG9taWNfYWRkKGNvdW50LCAmcXVldWUtPmNvdW50KTsKLQl3YWtlX3VwKCZhZGFwdGVyLT5yZXF1ZXN0X3dxKTsKKwl3YWtlX3VwKCZxZGlvLT5yZXFfcV93cSk7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfcWRpb19yZXFpZF9jaGVjayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgdW5zaWduZWQgbG9uZyByZXFfaWQsIGludCBzYmFsX2lkeCkKK3N0YXRpYyB2b2lkIHpmY3BfcWRpb19yZXNwX3B1dF9iYWNrKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIGludCBwcm9jZXNzZWQpCiB7Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKLQlmc2ZfcmVxID0gemZjcF9yZXFsaXN0X2ZpbmQoYWRhcHRlciwgcmVxX2lkKTsKLQotCWlmICghZnNmX3JlcSkKLQkJLyoKLQkJICogVW5rbm93biByZXF1ZXN0IG1lYW5zIHRoYXQgd2UgaGF2ZSBwb3RlbnRpYWxseSBtZW1vcnkKLQkJICogY29ycnVwdGlvbiBhbmQgbXVzdCBzdG9wIHRoZSBtYWNoaW5lIGltbWVkaWF0bHkuCi0JCSAqLwotCQlwYW5pYygiZXJyb3I6IHVua25vd24gcmVxdWVzdCBpZCAoJWx4KSBvbiBhZGFwdGVyICVzLlxuIiwKLQkJICAgICAgcmVxX2lkLCBkZXZfbmFtZSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7Ci0KLQl6ZmNwX3JlcWxpc3RfcmVtb3ZlKGFkYXB0ZXIsIGZzZl9yZXEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKLQotCWZzZl9yZXEtPnNiYWxfcmVzcG9uc2UgPSBzYmFsX2lkeDsKLQlmc2ZfcmVxLT5xZGlvX2luYl91c2FnZSA9IGF0b21pY19yZWFkKCZhZGFwdGVyLT5yZXNwX3EuY291bnQpOwotCXpmY3BfZnNmX3JlcV9jb21wbGV0ZShmc2ZfcmVxKTsKLX0KLQotc3RhdGljIHZvaWQgemZjcF9xZGlvX3Jlc3BfcHV0X2JhY2soc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgaW50IHByb2Nlc3NlZCkKLXsKLQlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpxdWV1ZSA9ICZhZGFwdGVyLT5yZXNwX3E7Ci0Jc3RydWN0IGNjd19kZXZpY2UgKmNkZXYgPSBhZGFwdGVyLT5jY3dfZGV2aWNlOworCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnF1ZXVlID0gJnFkaW8tPnJlc3BfcTsKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiA9IHFkaW8tPmFkYXB0ZXItPmNjd19kZXZpY2U7CiAJdTggY291bnQsIHN0YXJ0ID0gcXVldWUtPmZpcnN0OwogCXVuc2lnbmVkIGludCByZXR2YWw7CiAKQEAgLTE2MiwxNCArMTE4LDEzIEBACiAJCQkgICAgICAgaW50IHF1ZXVlX25vLCBpbnQgZmlyc3QsIGludCBjb3VudCwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIHBhcm0pCiB7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgemZjcF9hZGFwdGVyICopIHBhcm07Ci0Jc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcXVldWUgPSAmYWRhcHRlci0+cmVzcF9xOwotCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKLQlpbnQgc2JhbF9pZHgsIHNiYWxlX2lkeCwgc2JhbF9ubzsKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gKHN0cnVjdCB6ZmNwX3FkaW8gKikgcGFybTsKKwlpbnQgc2JhbF9pZHgsIHNiYWxfbm87CiAKIAlpZiAodW5saWtlbHkocWRpb19lcnIpKSB7Ci0JCXpmY3BfaGJhX2RiZl9ldmVudF9xZGlvKGFkYXB0ZXIsIHFkaW9fZXJyLCBmaXJzdCwgY291bnQpOwotCQl6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcihhZGFwdGVyLCAicWRpcmVzMSIpOworCQl6ZmNwX2RiZl9oYmFfcWRpbyhxZGlvLT5hZGFwdGVyLT5kYmYsIHFkaW9fZXJyLCBmaXJzdCwKKwkJCQkJY291bnQpOworCQl6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcihxZGlvLCAicWRpcmVzMSIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNzksMzkgKzEzNCwyNyBAQAogCSAqLwogCWZvciAoc2JhbF9ubyA9IDA7IHNiYWxfbm8gPCBjb3VudDsgc2JhbF9ubysrKSB7CiAJCXNiYWxfaWR4ID0gKGZpcnN0ICsgc2JhbF9ubykgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCiAJCS8qIGdvIHRocm91Z2ggYWxsIFNCQUxFcyBvZiBTQkFMICovCi0JCWZvciAoc2JhbGVfaWR4ID0gMDsgc2JhbGVfaWR4IDwgUURJT19NQVhfRUxFTUVOVFNfUEVSX0JVRkZFUjsKLQkJICAgICBzYmFsZV9pZHgrKykgewotCQkJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGUocXVldWUsIHNiYWxfaWR4LCBzYmFsZV9pZHgpOwotCQkJemZjcF9xZGlvX3JlcWlkX2NoZWNrKGFkYXB0ZXIsCi0JCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBzYmFsZS0+YWRkciwKLQkJCQkJICAgICAgc2JhbF9pZHgpOwotCQkJaWYgKGxpa2VseShzYmFsZS0+ZmxhZ3MgJiBTQkFMX0ZMQUdTX0xBU1RfRU5UUlkpKQotCQkJCWJyZWFrOwotCQl9OwotCi0JCWlmICh1bmxpa2VseSghKHNiYWxlLT5mbGFncyAmIFNCQUxfRkxBR1NfTEFTVF9FTlRSWSkpKQotCQkJZGV2X3dhcm4oJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKLQkJCQkgIkEgUURJTyBwcm90b2NvbCBlcnJvciBvY2N1cnJlZCwgIgotCQkJCSAib3BlcmF0aW9ucyBjb250aW51ZVxuIik7CisJCXpmY3BfZnNmX3JlcWlkX2NoZWNrKHFkaW8sIHNiYWxfaWR4KTsKIAl9CiAKIAkvKgogCSAqIHB1dCByYW5nZSBvZiBTQkFMcyBiYWNrIHRvIHJlc3BvbnNlIHF1ZXVlCiAJICogKGluY2x1ZGluZyBTQkFMcyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBmcmVlIGJlZm9yZSkKIAkgKi8KLQl6ZmNwX3FkaW9fcmVzcF9wdXRfYmFjayhhZGFwdGVyLCBjb3VudCk7CisJemZjcF9xZGlvX3Jlc3BfcHV0X2JhY2socWRpbywgY291bnQpOwogfQogCiAvKioKICAqIHpmY3BfcWRpb19zYmFsZV9yZXEgLSByZXR1cm4gcHRyIHRvIFNCQUxFIG9mIHJlcV9xIGZvciBhIHN0cnVjdCB6ZmNwX2ZzZl9yZXEKLSAqIEBmc2ZfcmVxOiBwb2ludGVyIHRvIHN0cnVjdCBmc2ZfcmVxCisgKiBAcWRpbzogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xZGlvCisgKiBAcV9yZWM6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcXVldWVfcmVjCiAgKiBSZXR1cm5zOiBwb2ludGVyIHRvIHFkaW9fYnVmZmVyX2VsZW1lbnQgKFNCQUxFKSBzdHJ1Y3R1cmUKICAqLwotc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnpmY3BfcWRpb19zYmFsZV9yZXEoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQorc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnpmY3BfcWRpb19zYmFsZV9yZXEoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKKwkJCQkJCXN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEpCiB7Ci0JcmV0dXJuIHpmY3BfcWRpb19zYmFsZSgmcmVxLT5hZGFwdGVyLT5yZXFfcSwgcmVxLT5zYmFsX2xhc3QsIDApOworCXJldHVybiB6ZmNwX3FkaW9fc2JhbGUoJnFkaW8tPnJlcV9xLCBxX3JlcS0+c2JhbF9sYXN0LCAwKTsKIH0KIAogLyoqCkBAIC0yMTksNzQgKzE2Miw4MCBAQAogICogQGZzZl9yZXE6IHBvaW50ZXIgdG8gc3RydWN0IGZzZl9yZXEKICAqIFJldHVybnM6IHBvaW50ZXIgdG8gcWRpb19idWZmZXJfZWxlbWVudCAoU0JBTEUpIHN0cnVjdHVyZQogICovCi1zdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqemZjcF9xZGlvX3NiYWxlX2N1cnIoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQorc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnpmY3BfcWRpb19zYmFsZV9jdXJyKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCisJCQkJCQkgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSkKIHsKLQlyZXR1cm4gemZjcF9xZGlvX3NiYWxlKCZyZXEtPmFkYXB0ZXItPnJlcV9xLCByZXEtPnNiYWxfbGFzdCwKLQkJCSAgICAgICByZXEtPnNiYWxlX2N1cnIpOworCXJldHVybiB6ZmNwX3FkaW9fc2JhbGUoJnFkaW8tPnJlcV9xLCBxX3JlcS0+c2JhbF9sYXN0LAorCQkJICAgICAgIHFfcmVxLT5zYmFsZV9jdXJyKTsKIH0KIAotc3RhdGljIHZvaWQgemZjcF9xZGlvX3NiYWxfbGltaXQoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwgaW50IG1heF9zYmFscykKK3N0YXRpYyB2b2lkIHpmY3BfcWRpb19zYmFsX2xpbWl0KHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCisJCQkJIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEsIGludCBtYXhfc2JhbHMpCiB7Ci0JaW50IGNvdW50ID0gYXRvbWljX3JlYWQoJmZzZl9yZXEtPmFkYXB0ZXItPnJlcV9xLmNvdW50KTsKKwlpbnQgY291bnQgPSBhdG9taWNfcmVhZCgmcWRpby0+cmVxX3EuY291bnQpOwogCWNvdW50ID0gbWluKGNvdW50LCBtYXhfc2JhbHMpOwotCWZzZl9yZXEtPnNiYWxfbGltaXQgPSAoZnNmX3JlcS0+c2JhbF9maXJzdCArIGNvdW50IC0gMSkKKwlxX3JlcS0+c2JhbF9saW1pdCA9IChxX3JlcS0+c2JhbF9maXJzdCArIGNvdW50IC0gMSkKIAkJCQkJJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwogfQogCiBzdGF0aWMgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKgotemZjcF9xZGlvX3NiYWxfY2hhaW4oc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwgdW5zaWduZWQgbG9uZyBzYnR5cGUpCit6ZmNwX3FkaW9fc2JhbF9jaGFpbihzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgc2J0eXBlKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAogCS8qIHNldCBsYXN0IGVudHJ5IGZsYWcgaW4gY3VycmVudCBTQkFMRSBvZiBjdXJyZW50IFNCQUwgKi8KLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKGZzZl9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX2N1cnIocWRpbywgcV9yZXEpOwogCXNiYWxlLT5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKIAkvKiBkb24ndCBleGNlZWQgbGFzdCBhbGxvd2VkIFNCQUwgKi8KLQlpZiAoZnNmX3JlcS0+c2JhbF9sYXN0ID09IGZzZl9yZXEtPnNiYWxfbGltaXQpCisJaWYgKHFfcmVxLT5zYmFsX2xhc3QgPT0gcV9yZXEtPnNiYWxfbGltaXQpCiAJCXJldHVybiBOVUxMOwogCiAJLyogc2V0IGNoYWluaW5nIGZsYWcgaW4gZmlyc3QgU0JBTEUgb2YgY3VycmVudCBTQkFMICovCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKGZzZl9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCBxX3JlcSk7CiAJc2JhbGUtPmZsYWdzIHw9IFNCQUxfRkxBR1MwX01PUkVfU0JBTFM7CiAKIAkvKiBjYWxjdWxhdGUgaW5kZXggb2YgbmV4dCBTQkFMICovCi0JZnNmX3JlcS0+c2JhbF9sYXN0Kys7Ci0JZnNmX3JlcS0+c2JhbF9sYXN0ICU9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CisJcV9yZXEtPnNiYWxfbGFzdCsrOworCXFfcmVxLT5zYmFsX2xhc3QgJT0gUURJT19NQVhfQlVGRkVSU19QRVJfUTsKIAogCS8qIGtlZXAgdGhpcyByZXF1ZXN0cyBudW1iZXIgb2YgU0JBTHMgdXAtdG8tZGF0ZSAqLwotCWZzZl9yZXEtPnNiYWxfbnVtYmVyKys7CisJcV9yZXEtPnNiYWxfbnVtYmVyKys7CiAKIAkvKiBzdGFydCBhdCBmaXJzdCBTQkFMRSBvZiBuZXcgU0JBTCAqLwotCWZzZl9yZXEtPnNiYWxlX2N1cnIgPSAwOworCXFfcmVxLT5zYmFsZV9jdXJyID0gMDsKIAogCS8qIHNldCBzdG9yYWdlLWJsb2NrIHR5cGUgZm9yIG5ldyBTQkFMICovCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfY3Vycihmc2ZfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sIHFfcmVxKTsKIAlzYmFsZS0+ZmxhZ3MgfD0gc2J0eXBlOwogCiAJcmV0dXJuIHNiYWxlOwogfQogCiBzdGF0aWMgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKgotemZjcF9xZGlvX3NiYWxlX25leHQoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwgdW5zaWduZWQgbG9uZyBzYnR5cGUpCit6ZmNwX3FkaW9fc2JhbGVfbmV4dChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxLAorCQkgICAgIHVuc2lnbmVkIGludCBzYnR5cGUpCiB7Ci0JaWYgKGZzZl9yZXEtPnNiYWxlX2N1cnIgPT0gWkZDUF9MQVNUX1NCQUxFX1BFUl9TQkFMKQotCQlyZXR1cm4gemZjcF9xZGlvX3NiYWxfY2hhaW4oZnNmX3JlcSwgc2J0eXBlKTsKLQlmc2ZfcmVxLT5zYmFsZV9jdXJyKys7Ci0JcmV0dXJuIHpmY3BfcWRpb19zYmFsZV9jdXJyKGZzZl9yZXEpOworCWlmIChxX3JlcS0+c2JhbGVfY3VyciA9PSBaRkNQX0xBU1RfU0JBTEVfUEVSX1NCQUwpCisJCXJldHVybiB6ZmNwX3FkaW9fc2JhbF9jaGFpbihxZGlvLCBxX3JlcSwgc2J0eXBlKTsKKwlxX3JlcS0+c2JhbGVfY3VycisrOworCXJldHVybiB6ZmNwX3FkaW9fc2JhbGVfY3VycihxZGlvLCBxX3JlcSk7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfcWRpb191bmRvX3NiYWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCitzdGF0aWMgdm9pZCB6ZmNwX3FkaW9fdW5kb19zYmFscyhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAorCQkJCSBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxKQogewotCXN0cnVjdCBxZGlvX2J1ZmZlciAqKnNiYWwgPSBmc2ZfcmVxLT5hZGFwdGVyLT5yZXFfcS5zYmFsOwotCWludCBmaXJzdCA9IGZzZl9yZXEtPnNiYWxfZmlyc3Q7Ci0JaW50IGxhc3QgPSBmc2ZfcmVxLT5zYmFsX2xhc3Q7CisJc3RydWN0IHFkaW9fYnVmZmVyICoqc2JhbCA9IHFkaW8tPnJlcV9xLnNiYWw7CisJaW50IGZpcnN0ID0gcV9yZXEtPnNiYWxfZmlyc3Q7CisJaW50IGxhc3QgPSBxX3JlcS0+c2JhbF9sYXN0OwogCWludCBjb3VudCA9IChsYXN0IC0gZmlyc3QgKyBRRElPX01BWF9CVUZGRVJTX1BFUl9RKSAlCiAJCVFESU9fTUFYX0JVRkZFUlNfUEVSX1EgKyAxOwogCXpmY3BfcWRpb196ZXJvX3NiYWxzKHNiYWwsIGZpcnN0LCBjb3VudCk7CiB9CiAKLXN0YXRpYyBpbnQgemZjcF9xZGlvX2ZpbGxfc2JhbHMoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwKK3N0YXRpYyBpbnQgemZjcF9xZGlvX2ZpbGxfc2JhbHMoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKKwkJCQlzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxLAogCQkJCXVuc2lnbmVkIGludCBzYnR5cGUsIHZvaWQgKnN0YXJ0X2FkZHIsCiAJCQkJdW5zaWduZWQgaW50IHRvdGFsX2xlbmd0aCkKIHsKQEAgLTI5NywxMCArMjQ2LDEwIEBACiAJLyogc3BsaXQgc2VnbWVudCB1cCAqLwogCWZvciAoYWRkciA9IHN0YXJ0X2FkZHIsIHJlbWFpbmluZyA9IHRvdGFsX2xlbmd0aDsgcmVtYWluaW5nID4gMDsKIAkgICAgIGFkZHIgKz0gbGVuZ3RoLCByZW1haW5pbmcgLT0gbGVuZ3RoKSB7Ci0JCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX25leHQoZnNmX3JlcSwgc2J0eXBlKTsKKwkJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfbmV4dChxZGlvLCBxX3JlcSwgc2J0eXBlKTsKIAkJaWYgKCFzYmFsZSkgewotCQkJYXRvbWljX2luYygmZnNmX3JlcS0+YWRhcHRlci0+cWRpb19vdXRiX2Z1bGwpOwotCQkJemZjcF9xZGlvX3VuZG9fc2JhbHMoZnNmX3JlcSk7CisJCQlhdG9taWNfaW5jKCZxZGlvLT5yZXFfcV9mdWxsKTsKKwkJCXpmY3BfcWRpb191bmRvX3NiYWxzKHFkaW8sIHFfcmVxKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTMyMiwyOSArMjcxLDMxIEBACiAgKiBAbWF4X3NiYWxzOiB1cHBlciBib3VuZCBmb3IgbnVtYmVyIG9mIFNCQUxzIHRvIGJlIHVzZWQKICAqIFJldHVybnM6IG51bWJlciBvZiBieXRlcywgb3IgZXJyb3IgKG5lZ2F0aXYpCiAgKi8KLWludCB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxLCB1bnNpZ25lZCBsb25nIHNidHlwZSwKLQkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbWF4X3NiYWxzKQoraW50IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCisJCQkgICAgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIHNidHlwZSwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgICBpbnQgbWF4X3NiYWxzKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlpbnQgcmV0dmFsLCBieXRlcyA9IDA7CiAKIAkvKiBmaWd1cmUgb3V0IGxhc3QgYWxsb3dlZCBTQkFMICovCi0JemZjcF9xZGlvX3NiYWxfbGltaXQoZnNmX3JlcSwgbWF4X3NiYWxzKTsKKwl6ZmNwX3FkaW9fc2JhbF9saW1pdChxZGlvLCBxX3JlcSwgbWF4X3NiYWxzKTsKIAogCS8qIHNldCBzdG9yYWdlLWJsb2NrIHR5cGUgZm9yIHRoaXMgcmVxdWVzdCAqLwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShmc2ZfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgcV9yZXEpOwogCXNiYWxlLT5mbGFncyB8PSBzYnR5cGU7CiAKIAlmb3IgKDsgc2c7IHNnID0gc2dfbmV4dChzZykpIHsKLQkJcmV0dmFsID0gemZjcF9xZGlvX2ZpbGxfc2JhbHMoZnNmX3JlcSwgc2J0eXBlLCBzZ192aXJ0KHNnKSwKLQkJCQkJICAgICAgc2ctPmxlbmd0aCk7CisJCXJldHZhbCA9IHpmY3BfcWRpb19maWxsX3NiYWxzKHFkaW8sIHFfcmVxLCBzYnR5cGUsCisJCQkJCSAgICAgIHNnX3ZpcnQoc2cpLCBzZy0+bGVuZ3RoKTsKIAkJaWYgKHJldHZhbCA8IDApCiAJCQlyZXR1cm4gcmV0dmFsOwogCQlieXRlcyArPSBzZy0+bGVuZ3RoOwogCX0KIAogCS8qIGFzc3VtZSB0aGF0IG5vIG90aGVyIFNCQUxFcyBhcmUgdG8gZm9sbG93IGluIHRoZSBzYW1lIFNCQUwgKi8KLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKGZzZl9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX2N1cnIocWRpbywgcV9yZXEpOwogCXNiYWxlLT5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKIAlyZXR1cm4gYnl0ZXM7CkBAIC0zNTIsMjEgKzMwMywyMiBAQAogCiAvKioKICAqIHpmY3BfcWRpb19zZW5kIC0gc2V0IFBDSSBmbGFnIGluIGZpcnN0IFNCQUxFIGFuZCBzZW5kIHJlcSB0byBRRElPCi0gKiBAZnNmX3JlcTogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9mc2ZfcmVxCisgKiBAcWRpbzogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xZGlvCisgKiBAcV9yZXE6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcXVldWVfcmVxCiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIG90aGVyd2lzZQogICovCi1pbnQgemZjcF9xZGlvX3NlbmQoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK2ludCB6ZmNwX3FkaW9fc2VuZChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOwotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnJlcV9xID0gJmFkYXB0ZXItPnJlcV9xOwotCWludCBmaXJzdCA9IGZzZl9yZXEtPnNiYWxfZmlyc3Q7Ci0JaW50IGNvdW50ID0gZnNmX3JlcS0+c2JhbF9udW1iZXI7CisJc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcmVxX3EgPSAmcWRpby0+cmVxX3E7CisJaW50IGZpcnN0ID0gcV9yZXEtPnNiYWxfZmlyc3Q7CisJaW50IGNvdW50ID0gcV9yZXEtPnNiYWxfbnVtYmVyOwogCWludCByZXR2YWw7CiAJdW5zaWduZWQgaW50IHFkaW9fZmxhZ3MgPSBRRElPX0ZMQUdfU1lOQ19PVVRQVVQ7CiAKLQl6ZmNwX3FkaW9fYWNjb3VudChhZGFwdGVyKTsKKwl6ZmNwX3FkaW9fYWNjb3VudChxZGlvKTsKIAotCXJldHZhbCA9IGRvX1FESU8oYWRhcHRlci0+Y2N3X2RldmljZSwgcWRpb19mbGFncywgMCwgZmlyc3QsIGNvdW50KTsKKwlyZXR2YWwgPSBkb19RRElPKHFkaW8tPmFkYXB0ZXItPmNjd19kZXZpY2UsIHFkaW9fZmxhZ3MsIDAsIGZpcnN0LAorCQkJIGNvdW50KTsKIAlpZiAodW5saWtlbHkocmV0dmFsKSkgewogCQl6ZmNwX3FkaW9femVyb19zYmFscyhyZXFfcS0+c2JhbCwgZmlyc3QsIGNvdW50KTsKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTM3OSw2MyArMzMxLDY5IEBACiAJcmV0dXJuIDA7CiB9CiAKKworc3RhdGljIHZvaWQgemZjcF9xZGlvX3NldHVwX2luaXRfZGF0YShzdHJ1Y3QgcWRpb19pbml0aWFsaXplICppZCwKKwkJCQkgICAgICBzdHJ1Y3QgemZjcF9xZGlvICpxZGlvKQoreworCisJaWQtPmNkZXYgPSBxZGlvLT5hZGFwdGVyLT5jY3dfZGV2aWNlOworCWlkLT5xX2Zvcm1hdCA9IFFESU9fWkZDUF9RRk1UOworCW1lbWNweShpZC0+YWRhcHRlcl9uYW1lLCBkZXZfbmFtZSgmaWQtPmNkZXYtPmRldiksIDgpOworCUFTQ0VCQyhpZC0+YWRhcHRlcl9uYW1lLCA4KTsKKwlpZC0+cWliX3BhcmFtX2ZpZWxkX2Zvcm1hdCA9IDA7CisJaWQtPnFpYl9wYXJhbV9maWVsZCA9IE5VTEw7CisJaWQtPmlucHV0X3NsaWJfZWxlbWVudHMgPSBOVUxMOworCWlkLT5vdXRwdXRfc2xpYl9lbGVtZW50cyA9IE5VTEw7CisJaWQtPm5vX2lucHV0X3FzID0gMTsKKwlpZC0+bm9fb3V0cHV0X3FzID0gMTsKKwlpZC0+aW5wdXRfaGFuZGxlciA9IHpmY3BfcWRpb19pbnRfcmVzcDsKKwlpZC0+b3V0cHV0X2hhbmRsZXIgPSB6ZmNwX3FkaW9faW50X3JlcTsKKwlpZC0+aW50X3Bhcm0gPSAodW5zaWduZWQgbG9uZykgcWRpbzsKKwlpZC0+ZmxhZ3MgPSBRRElPX0lOQk9VTkRfMENPUFlfU0JBTFMgfAorCQkgICAgUURJT19PVVRCT1VORF8wQ09QWV9TQkFMUyB8IFFESU9fVVNFX09VVEJPVU5EX1BDSVM7CisJaWQtPmlucHV0X3NiYWxfYWRkcl9hcnJheSA9ICh2b2lkICoqKSAocWRpby0+cmVzcF9xLnNiYWwpOworCWlkLT5vdXRwdXRfc2JhbF9hZGRyX2FycmF5ID0gKHZvaWQgKiopIChxZGlvLT5yZXFfcS5zYmFsKTsKKworfQogLyoqCiAgKiB6ZmNwX3FkaW9fYWxsb2NhdGUgLSBhbGxvY2F0ZSBxdWV1ZSBtZW1vcnkgYW5kIGluaXRpYWxpemUgUURJTyBkYXRhCiAgKiBAYWRhcHRlcjogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9hZGFwdGVyCiAgKiBSZXR1cm5zOiAtRU5PTUVNIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIG9yIHJldHVybiB2YWx1ZSBmcm9tCiAgKiAgICAgICAgICBxZGlvX2FsbG9jYXRlCiAgKi8KLWludCB6ZmNwX3FkaW9fYWxsb2NhdGUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgemZjcF9xZGlvX2FsbG9jYXRlKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8pCiB7Ci0Jc3RydWN0IHFkaW9faW5pdGlhbGl6ZSAqaW5pdF9kYXRhOworCXN0cnVjdCBxZGlvX2luaXRpYWxpemUgaW5pdF9kYXRhOwogCi0JaWYgKHpmY3BfcWRpb19idWZmZXJzX2VucXVldWUoYWRhcHRlci0+cmVxX3Euc2JhbCkgfHwKLQkJICAgemZjcF9xZGlvX2J1ZmZlcnNfZW5xdWV1ZShhZGFwdGVyLT5yZXNwX3Euc2JhbCkpCisJaWYgKHpmY3BfcWRpb19idWZmZXJzX2VucXVldWUocWRpby0+cmVxX3Euc2JhbCkgfHwKKwkgICAgemZjcF9xZGlvX2J1ZmZlcnNfZW5xdWV1ZShxZGlvLT5yZXNwX3Euc2JhbCkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaW5pdF9kYXRhID0gJmFkYXB0ZXItPnFkaW9faW5pdF9kYXRhOworCXpmY3BfcWRpb19zZXR1cF9pbml0X2RhdGEoJmluaXRfZGF0YSwgcWRpbyk7CiAKLQlpbml0X2RhdGEtPmNkZXYgPSBhZGFwdGVyLT5jY3dfZGV2aWNlOwotCWluaXRfZGF0YS0+cV9mb3JtYXQgPSBRRElPX1pGQ1BfUUZNVDsKLQltZW1jcHkoaW5pdF9kYXRhLT5hZGFwdGVyX25hbWUsIGRldl9uYW1lKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYpLCA4KTsKLQlBU0NFQkMoaW5pdF9kYXRhLT5hZGFwdGVyX25hbWUsIDgpOwotCWluaXRfZGF0YS0+cWliX3BhcmFtX2ZpZWxkX2Zvcm1hdCA9IDA7Ci0JaW5pdF9kYXRhLT5xaWJfcGFyYW1fZmllbGQgPSBOVUxMOwotCWluaXRfZGF0YS0+aW5wdXRfc2xpYl9lbGVtZW50cyA9IE5VTEw7Ci0JaW5pdF9kYXRhLT5vdXRwdXRfc2xpYl9lbGVtZW50cyA9IE5VTEw7Ci0JaW5pdF9kYXRhLT5ub19pbnB1dF9xcyA9IDE7Ci0JaW5pdF9kYXRhLT5ub19vdXRwdXRfcXMgPSAxOwotCWluaXRfZGF0YS0+aW5wdXRfaGFuZGxlciA9IHpmY3BfcWRpb19pbnRfcmVzcDsKLQlpbml0X2RhdGEtPm91dHB1dF9oYW5kbGVyID0gemZjcF9xZGlvX2ludF9yZXE7Ci0JaW5pdF9kYXRhLT5pbnRfcGFybSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOwotCWluaXRfZGF0YS0+ZmxhZ3MgPSBRRElPX0lOQk9VTkRfMENPUFlfU0JBTFMgfAotCQkJUURJT19PVVRCT1VORF8wQ09QWV9TQkFMUyB8IFFESU9fVVNFX09VVEJPVU5EX1BDSVM7Ci0JaW5pdF9kYXRhLT5pbnB1dF9zYmFsX2FkZHJfYXJyYXkgPQotCQkJKHZvaWQgKiopIChhZGFwdGVyLT5yZXNwX3Euc2JhbCk7Ci0JaW5pdF9kYXRhLT5vdXRwdXRfc2JhbF9hZGRyX2FycmF5ID0KLQkJCSh2b2lkICoqKSAoYWRhcHRlci0+cmVxX3Euc2JhbCk7Ci0KLQlyZXR1cm4gcWRpb19hbGxvY2F0ZShpbml0X2RhdGEpOworCXJldHVybiBxZGlvX2FsbG9jYXRlKCZpbml0X2RhdGEpOwogfQogCiAvKioKICAqIHpmY3BfY2xvc2VfcWRpbyAtIGNsb3NlIHFkaW8gcXVldWVzIGZvciBhbiBhZGFwdGVyCisgKiBAcWRpbzogcG9pbnRlciB0byBzdHJ1Y3R1cmUgemZjcF9xZGlvCiAgKi8KLXZvaWQgemZjcF9xZGlvX2Nsb3NlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIHpmY3BfcWRpb19jbG9zZShzdHJ1Y3QgemZjcF9xZGlvICpxZGlvKQogewogCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnJlcV9xOwogCWludCBmaXJzdCwgY291bnQ7CiAKLQlpZiAoIShhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0FEQVBURVJfUURJT1VQKSkKKwlpZiAoIShhdG9taWNfcmVhZCgmcWRpby0+YWRhcHRlci0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0FEQVBURVJfUURJT1VQKSkKIAkJcmV0dXJuOwogCiAJLyogY2xlYXIgUURJT1VQIGZsYWcsIHRodXMgZG9fUURJTyBpcyBub3QgY2FsbGVkIGR1cmluZyBxZGlvX3NodXRkb3duICovCi0JcmVxX3EgPSAmYWRhcHRlci0+cmVxX3E7Ci0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX1FESU9VUCwgJmFkYXB0ZXItPnN0YXR1cyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXJlcV9xID0gJnFkaW8tPnJlcV9xOworCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVAsICZxZGlvLT5hZGFwdGVyLT5zdGF0dXMpOworCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAotCXFkaW9fc2h1dGRvd24oYWRhcHRlci0+Y2N3X2RldmljZSwgUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfQ0xFQVIpOworCXFkaW9fc2h1dGRvd24ocWRpby0+YWRhcHRlci0+Y2N3X2RldmljZSwKKwkJICAgICAgUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfQ0xFQVIpOwogCiAJLyogY2xlYW51cCB1c2VkIG91dGJvdW5kIHNiYWxzICovCiAJY291bnQgPSBhdG9taWNfcmVhZCgmcmVxX3EtPmNvdW50KTsKQEAgLTQ0Niw1MCArNDA0LDk5IEBACiAJfQogCXJlcV9xLT5maXJzdCA9IDA7CiAJYXRvbWljX3NldCgmcmVxX3EtPmNvdW50LCAwKTsKLQlhZGFwdGVyLT5yZXNwX3EuZmlyc3QgPSAwOwotCWF0b21pY19zZXQoJmFkYXB0ZXItPnJlc3BfcS5jb3VudCwgMCk7CisJcWRpby0+cmVzcF9xLmZpcnN0ID0gMDsKKwlhdG9taWNfc2V0KCZxZGlvLT5yZXNwX3EuY291bnQsIDApOwogfQogCiAvKioKICAqIHpmY3BfcWRpb19vcGVuIC0gcHJlcGFyZSBhbmQgaW5pdGlhbGl6ZSByZXNwb25zZSBxdWV1ZQotICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfYWRhcHRlcgorICogQHFkaW86IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpbwogICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgLUVJTwogICovCi1pbnQgemZjcF9xZGlvX29wZW4oc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK2ludCB6ZmNwX3FkaW9fb3BlbihzdHJ1Y3QgemZjcF9xZGlvICpxZGlvKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKKwlzdHJ1Y3QgcWRpb19pbml0aWFsaXplIGluaXRfZGF0YTsKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiA9IHFkaW8tPmFkYXB0ZXItPmNjd19kZXZpY2U7CiAJaW50IGNjOwogCi0JaWYgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVApCisJaWYgKGF0b21pY19yZWFkKCZxZGlvLT5hZGFwdGVyLT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVApCiAJCXJldHVybiAtRUlPOwogCi0JaWYgKHFkaW9fZXN0YWJsaXNoKCZhZGFwdGVyLT5xZGlvX2luaXRfZGF0YSkpCisJemZjcF9xZGlvX3NldHVwX2luaXRfZGF0YSgmaW5pdF9kYXRhLCBxZGlvKTsKKworCWlmIChxZGlvX2VzdGFibGlzaCgmaW5pdF9kYXRhKSkKIAkJZ290byBmYWlsZWRfZXN0YWJsaXNoOwogCi0JaWYgKHFkaW9fYWN0aXZhdGUoYWRhcHRlci0+Y2N3X2RldmljZSkpCisJaWYgKHFkaW9fYWN0aXZhdGUoY2RldikpCiAJCWdvdG8gZmFpbGVkX3FkaW87CiAKIAlmb3IgKGNjID0gMDsgY2MgPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyBjYysrKSB7Ci0JCXNiYWxlID0gJihhZGFwdGVyLT5yZXNwX3Euc2JhbFtjY10tPmVsZW1lbnRbMF0pOworCQlzYmFsZSA9ICYocWRpby0+cmVzcF9xLnNiYWxbY2NdLT5lbGVtZW50WzBdKTsKIAkJc2JhbGUtPmxlbmd0aCA9IDA7CiAJCXNiYWxlLT5mbGFncyA9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIAkJc2JhbGUtPmFkZHIgPSBOVUxMOwogCX0KIAotCWlmIChkb19RRElPKGFkYXB0ZXItPmNjd19kZXZpY2UsIFFESU9fRkxBR19TWU5DX0lOUFVULCAwLCAwLAorCWlmIChkb19RRElPKGNkZXYsIFFESU9fRkxBR19TWU5DX0lOUFVULCAwLCAwLAogCQkgICAgIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EpKQogCQlnb3RvIGZhaWxlZF9xZGlvOwogCiAJLyogc2V0IGluZGV4IG9mIGZpcnN0IGF2YWxhYmxlIFNCQUxTIC8gbnVtYmVyIG9mIGF2YWlsYWJsZSBTQkFMUyAqLwotCWFkYXB0ZXItPnJlcV9xLmZpcnN0ID0gMDsKLQlhdG9taWNfc2V0KCZhZGFwdGVyLT5yZXFfcS5jb3VudCwgUURJT19NQVhfQlVGRkVSU19QRVJfUSk7CisJcWRpby0+cmVxX3EuZmlyc3QgPSAwOworCWF0b21pY19zZXQoJnFkaW8tPnJlcV9xLmNvdW50LCBRRElPX01BWF9CVUZGRVJTX1BFUl9RKTsKIAogCXJldHVybiAwOwogCiBmYWlsZWRfcWRpbzoKLQlxZGlvX3NodXRkb3duKGFkYXB0ZXItPmNjd19kZXZpY2UsIFFESU9fRkxBR19DTEVBTlVQX1VTSU5HX0NMRUFSKTsKKwlxZGlvX3NodXRkb3duKGNkZXYsIFFESU9fRkxBR19DTEVBTlVQX1VTSU5HX0NMRUFSKTsKIGZhaWxlZF9lc3RhYmxpc2g6Ci0JZGV2X2VycigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAorCWRldl9lcnIoJmNkZXYtPmRldiwKIAkJIlNldHRpbmcgdXAgdGhlIFFESU8gY29ubmVjdGlvbiB0byB0aGUgRkNQIGFkYXB0ZXIgZmFpbGVkXG4iKTsKIAlyZXR1cm4gLUVJTzsKIH0KKwordm9pZCB6ZmNwX3FkaW9fZGVzdHJveShzdHJ1Y3QgemZjcF9xZGlvICpxZGlvKQoreworCXN0cnVjdCBxZGlvX2J1ZmZlciAqKnNiYWxfcmVxLCAqKnNiYWxfcmVzcDsKKwlpbnQgcDsKKworCWlmICghcWRpbykKKwkJcmV0dXJuOworCisJaWYgKHFkaW8tPmFkYXB0ZXItPmNjd19kZXZpY2UpCisJCXFkaW9fZnJlZShxZGlvLT5hZGFwdGVyLT5jY3dfZGV2aWNlKTsKKworCXNiYWxfcmVxID0gcWRpby0+cmVxX3Euc2JhbDsKKwlzYmFsX3Jlc3AgPSBxZGlvLT5yZXNwX3Euc2JhbDsKKworCWZvciAocCA9IDA7IHAgPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyBwICs9IFFCVUZGX1BFUl9QQUdFKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgc2JhbF9yZXFbcF0pOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHNiYWxfcmVzcFtwXSk7CisJfQorCisJa2ZyZWUocWRpbyk7Cit9CisKK2ludCB6ZmNwX3FkaW9fc2V0dXAoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvOworCisJcWRpbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6ZmNwX3FkaW8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXFkaW8pCisJCXJldHVybiAtRU5PTUVNOworCisJcWRpby0+YWRhcHRlciA9IGFkYXB0ZXI7CisKKwlpZiAoemZjcF9xZGlvX2FsbG9jYXRlKHFkaW8pKSB7CisJCXpmY3BfcWRpb19kZXN0cm95KHFkaW8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmcWRpby0+cmVxX3FfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnFkaW8tPnN0YXRfbG9jayk7CisKKwlhZGFwdGVyLT5xZGlvID0gcWRpbzsKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwppbmRleCA2OTI1YTE3Li4zZmY3MjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwpAQCAtOSw4ICs5LDkgQEAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCiAjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CiAKLSNpbmNsdWRlICJ6ZmNwX2V4dC5oIgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlICJ6ZmNwX2V4dC5oIgorI2luY2x1ZGUgInpmY3BfZGJmLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9kZXB0aCA9IDMyOwogbW9kdWxlX3BhcmFtX25hbWVkKHF1ZXVlX2RlcHRoLCBkZWZhdWx0X2RlcHRoLCB1aW50LCAwNjAwKTsKQEAgLTUyLDExICs1MywxMSBAQAogCiBzdGF0aWMgdm9pZCB6ZmNwX3Njc2lfY29tbWFuZF9mYWlsKHN0cnVjdCBzY3NpX2NtbmQgKnNjcG50LCBpbnQgcmVzdWx0KQogeworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPQorCQkoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBzY3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKIAlzZXRfaG9zdF9ieXRlKHNjcG50LCByZXN1bHQpOwogCWlmICgoc2NwbnQtPmRldmljZSAhPSBOVUxMKSAmJiAoc2NwbnQtPmRldmljZS0+aG9zdCAhPSBOVUxMKSkKLQkJemZjcF9zY3NpX2RiZl9ldmVudF9yZXN1bHQoImZhaWwiLCA0LAotCQkJKHN0cnVjdCB6ZmNwX2FkYXB0ZXIqKSBzY3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXSwKLQkJCXNjcG50LCBOVUxMKTsKKwkJemZjcF9kYmZfc2NzaV9yZXN1bHQoImZhaWwiLCA0LCBhZGFwdGVyLT5kYmYsIHNjcG50LCBOVUxMKTsKIAkvKiByZXR1cm4gZGlyZWN0bHkgKi8KIAlzY3BudC0+c2NzaV9kb25lKHNjcG50KTsKIH0KQEAgLTkyLDcgKzkzLDcgQEAKIAlzY3NpX3Jlc3VsdCA9IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KTsKIAlpZiAodW5saWtlbHkoc2NzaV9yZXN1bHQpKSB7CiAJCXNjcG50LT5yZXN1bHQgPSBzY3NpX3Jlc3VsdDsKLQkJemZjcF9zY3NpX2RiZl9ldmVudF9yZXN1bHQoImZhaWwiLCA0LCBhZGFwdGVyLCBzY3BudCwgTlVMTCk7CisJCXpmY3BfZGJmX3Njc2lfcmVzdWx0KCJmYWlsIiwgNCwgYWRhcHRlci0+ZGJmLCBzY3BudCwgTlVMTCk7CiAJCXNjcG50LT5zY3NpX2RvbmUoc2NwbnQpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xODAsOCArMTgxLDggQEAKIAlzcGluX3VubG9jaygmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7CiAJaWYgKCFvbGRfcmVxKSB7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hYm9ydF9sb2NrLCBmbGFncyk7Ci0JCXpmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQoImx0ZTEiLCBhZGFwdGVyLCBzY3BudCwgTlVMTCwKLQkJCQkJICBvbGRfcmVxaWQpOworCQl6ZmNwX2RiZl9zY3NpX2Fib3J0KCJsdGUxIiwgYWRhcHRlci0+ZGJmLCBzY3BudCwgTlVMTCwKKwkJCQkgICAgb2xkX3JlcWlkKTsKIAkJcmV0dXJuIEZBSUxFRDsgLyogY29tcGxldGlvbiBjb3VsZCBiZSBpbiBwcm9ncmVzcyAqLwogCX0KIAlvbGRfcmVxLT5kYXRhID0gTlVMTDsKQEAgLTE5NywxNiArMTk4LDE1IEBACiAJCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJCWlmICghKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYKIAkJICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcpKSB7Ci0JCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KCJucmVzIiwgYWRhcHRlciwgc2NwbnQsIE5VTEwsCi0JCQkJCQkgIG9sZF9yZXFpZCk7CisJCQl6ZmNwX2RiZl9zY3NpX2Fib3J0KCJucmVzIiwgYWRhcHRlci0+ZGJmLCBzY3BudCwgTlVMTCwKKwkJCQkJICAgIG9sZF9yZXFpZCk7CiAJCQlyZXR1cm4gU1VDQ0VTUzsKIAkJfQogCX0KIAlpZiAoIWFicnRfcmVxKQogCQlyZXR1cm4gRkFJTEVEOwogCi0Jd2FpdF9ldmVudChhYnJ0X3JlcS0+Y29tcGxldGlvbl93cSwKLQkJICAgYWJydF9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9DT01QTEVURUQpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFicnRfcmVxLT5jb21wbGV0aW9uKTsKIAogCWlmIChhYnJ0X3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0FCT1JUU1VDQ0VFREVEKQogCQlkYmZfdGFnID0gIm9rYXkiOwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJCWRiZl90YWcgPSAiZmFpbCI7CiAJCXJldHZhbCA9IEZBSUxFRDsKIAl9Ci0JemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydChkYmZfdGFnLCBhZGFwdGVyLCBzY3BudCwgYWJydF9yZXEsIG9sZF9yZXFpZCk7CisJemZjcF9kYmZfc2NzaV9hYm9ydChkYmZfdGFnLCBhZGFwdGVyLT5kYmYsIHNjcG50LCBhYnJ0X3JlcSwgb2xkX3JlcWlkKTsKIAl6ZmNwX2ZzZl9yZXFfZnJlZShhYnJ0X3JlcSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTIyNSw3ICsyMjUsNyBAQAogewogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSBzY3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxOworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEgPSBOVUxMOwogCWludCByZXR2YWwgPSBTVUNDRVNTOwogCWludCByZXRyeSA9IDM7CiAKQEAgLTIzNywyNSArMjM3LDIzIEBACiAJCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJCWlmICghKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYKIAkJICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcpKSB7Ci0JCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2RldnJlc2V0KCJucmVzIiwgdG1fZmxhZ3MsIHVuaXQsCi0JCQkJCQkgICAgIHNjcG50KTsKKwkJCXpmY3BfZGJmX3Njc2lfZGV2cmVzZXQoIm5yZXMiLCB0bV9mbGFncywgdW5pdCwgc2NwbnQpOwogCQkJcmV0dXJuIFNVQ0NFU1M7CiAJCX0KIAl9CiAJaWYgKCFmc2ZfcmVxKQogCQlyZXR1cm4gRkFJTEVEOwogCi0Jd2FpdF9ldmVudChmc2ZfcmVxLT5jb21wbGV0aW9uX3dxLAotCQkgICBmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVEKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmc2ZfcmVxLT5jb21wbGV0aW9uKTsKIAogCWlmIChmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfVE1GVU5DRkFJTEVEKSB7Ci0JCXpmY3Bfc2NzaV9kYmZfZXZlbnRfZGV2cmVzZXQoImZhaWwiLCB0bV9mbGFncywgdW5pdCwgc2NwbnQpOworCQl6ZmNwX2RiZl9zY3NpX2RldnJlc2V0KCJmYWlsIiwgdG1fZmxhZ3MsIHVuaXQsIHNjcG50KTsKIAkJcmV0dmFsID0gRkFJTEVEOwogCX0gZWxzZSBpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX1RNRlVOQ05PVFNVUFApIHsKLQkJemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldCgibnN1cCIsIHRtX2ZsYWdzLCB1bml0LCBzY3BudCk7CisJCXpmY3BfZGJmX3Njc2lfZGV2cmVzZXQoIm5zdXAiLCB0bV9mbGFncywgdW5pdCwgc2NwbnQpOwogCQlyZXR2YWwgPSBGQUlMRUQ7CiAJfSBlbHNlCi0JCXpmY3Bfc2NzaV9kYmZfZXZlbnRfZGV2cmVzZXQoIm9rYXkiLCB0bV9mbGFncywgdW5pdCwgc2NwbnQpOworCQl6ZmNwX2RiZl9zY3NpX2RldnJlc2V0KCJva2F5IiwgdG1fZmxhZ3MsIHVuaXQsIHNjcG50KTsKIAogCXpmY3BfZnNmX3JlcV9mcmVlKGZzZl9yZXEpOwogCXJldHVybiByZXR2YWw7CkBAIC00MzAsNyArNDI4LDcgQEAKIAlpZiAoIWRhdGEpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0ID0gemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhX3N5bmMoYWRhcHRlciwgZGF0YSk7CisJcmV0ID0gemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhX3N5bmMoYWRhcHRlci0+cWRpbywgZGF0YSk7CiAJaWYgKHJldCkgewogCQlrZnJlZShkYXRhKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC00NTksNyArNDU3LDcgQEAKIAlpZiAoIWRhdGEpCiAJCXJldHVybjsKIAotCXJldCA9IHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YV9zeW5jKGFkYXB0ZXIsIGRhdGEpOworCXJldCA9IHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YV9zeW5jKGFkYXB0ZXItPnFkaW8sIGRhdGEpOwogCWlmIChyZXQpCiAJCWtmcmVlKGRhdGEpOwogCWVsc2UgewpAQCAtNDkzLDIxICs0OTEsNiBAQAogfQogCiAvKioKLSAqIHpmY3Bfc2NzaV9kZXZfbG9zc190bW9fY2FsbGJrIC0gRnJlZSBhbnkgcmVmZXJlbmNlIHRvIHJwb3J0Ci0gKiBAcnBvcnQ6IFRoZSBycG9ydCB0aGF0IGlzIGFib3V0IHRvIGJlIGRlbGV0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHpmY3Bfc2NzaV9kZXZfbG9zc190bW9fY2FsbGJrKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCi17Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKLQotCXdyaXRlX2xvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwotCXBvcnQgPSBycG9ydC0+ZGRfZGF0YTsKLQlpZiAocG9ydCkKLQkJcG9ydC0+cnBvcnQgPSBOVUxMOwotCXdyaXRlX3VubG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7Ci19Ci0KLS8qKgogICogemZjcF9zY3NpX3Rlcm1pbmF0ZV9ycG9ydF9pbyAtIFRlcm1pbmF0ZSBhbGwgSS9PIG9uIGEgcnBvcnQKICAqIEBycG9ydDogVGhlIEZDIHJwb3J0IHdoZXJlIHRvIHRlbWluYXRlIEkvTwogICoKQEAgLTUxOCw5ICs1MDEsMTIgQEAKIHN0YXRpYyB2b2lkIHpmY3Bfc2NzaV90ZXJtaW5hdGVfcnBvcnRfaW8oc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKIHsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPQorCQkoc3RydWN0IHpmY3BfYWRhcHRlciAqKXNob3N0LT5ob3N0ZGF0YVswXTsKIAogCXdyaXRlX2xvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwotCXBvcnQgPSBycG9ydC0+ZGRfZGF0YTsKKwlwb3J0ID0gemZjcF9nZXRfcG9ydF9ieV93d3BuKGFkYXB0ZXIsIHJwb3J0LT5wb3J0X25hbWUpOwogCWlmIChwb3J0KQogCQl6ZmNwX3BvcnRfZ2V0KHBvcnQpOwogCXdyaXRlX3VubG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CkBAIC01NTIsNyArNTM4LDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCXJwb3J0LT5kZF9kYXRhID0gcG9ydDsKIAlycG9ydC0+bWF4ZnJhbWVfc2l6ZSA9IHBvcnQtPm1heGZyYW1lX3NpemU7CiAJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gcG9ydC0+c3VwcG9ydGVkX2NsYXNzZXM7CiAJcG9ydC0+cnBvcnQgPSBycG9ydDsKQEAgLTU3Myw3ICs1NTgsNyBAQAogCXpmY3BfcG9ydF9nZXQocG9ydCk7CiAJcG9ydC0+cnBvcnRfdGFzayA9IFJQT1JUX0FERDsKIAotCWlmICghcXVldWVfd29yayh6ZmNwX2RhdGEud29ya19xdWV1ZSwgJnBvcnQtPnJwb3J0X3dvcmspKQorCWlmICghcXVldWVfd29yayhwb3J0LT5hZGFwdGVyLT53b3JrX3F1ZXVlLCAmcG9ydC0+cnBvcnRfd29yaykpCiAJCXpmY3BfcG9ydF9wdXQocG9ydCk7CiB9CiAKQEAgLTU4Miw4ICs1NjcsMTEgQEAKIAl6ZmNwX3BvcnRfZ2V0KHBvcnQpOwogCXBvcnQtPnJwb3J0X3Rhc2sgPSBSUE9SVF9ERUw7CiAKLQlpZiAoIXF1ZXVlX3dvcmsoemZjcF9kYXRhLndvcmtfcXVldWUsICZwb3J0LT5ycG9ydF93b3JrKSkKLQkJemZjcF9wb3J0X3B1dChwb3J0KTsKKwlpZiAocG9ydC0+cnBvcnQgJiYgcXVldWVfd29yayhwb3J0LT5hZGFwdGVyLT53b3JrX3F1ZXVlLAorCQkJCSAgICAgICZwb3J0LT5ycG9ydF93b3JrKSkKKwkJcmV0dXJuOworCisJemZjcF9wb3J0X3B1dChwb3J0KTsKIH0KIAogdm9pZCB6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRzX2Jsb2NrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC02NjIsNyArNjUwLDYgQEAKIAkucmVzZXRfZmNfaG9zdF9zdGF0cyA9IHpmY3BfcmVzZXRfZmNfaG9zdF9zdGF0cywKIAkuc2V0X3Jwb3J0X2Rldl9sb3NzX3RtbyA9IHpmY3Bfc2V0X3Jwb3J0X2Rldl9sb3NzX3RtbywKIAkuZ2V0X2hvc3RfcG9ydF9zdGF0ZSA9IHpmY3BfZ2V0X2hvc3RfcG9ydF9zdGF0ZSwKLQkuZGV2X2xvc3NfdG1vX2NhbGxiayA9IHpmY3Bfc2NzaV9kZXZfbG9zc190bW9fY2FsbGJrLAogCS50ZXJtaW5hdGVfcnBvcnRfaW8gPSB6ZmNwX3Njc2lfdGVybWluYXRlX3Jwb3J0X2lvLAogCS5zaG93X2hvc3RfcG9ydF9zdGF0ZSA9IDEsCiAJLmJzZ19yZXF1ZXN0ID0gemZjcF9leGVjdXRlX2ZjX2pvYiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYwppbmRleCAwZmU1Y2NlLi4wNzlhOGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCkBAIC04OCw3ICs4OCw3IEBACiAJdW5zaWduZWQgbG9uZyB2YWw7CQkJCQkJICAgICAgIFwKIAlpbnQgcmV0dmFsID0gMDsJCQkJCQkJICAgICAgIFwKIAkJCQkJCQkJCSAgICAgICBcCi0JZG93bigmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsJCQkJCSAgICAgICBcCisJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CQkJCSAgICAgICBcCiAJaWYgKGF0b21pY19yZWFkKCZfZmVhdC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9SRU1PVkUpIHsJICAgICAgIFwKIAkJcmV0dmFsID0gLUVCVVNZOwkJCQkJICAgICAgIFwKIAkJZ290byBvdXQ7CQkJCQkJICAgICAgIFwKQEAgLTEwNSw3ICsxMDUsNyBAQAogCQkJCSAgX3Jlb3Blbl9pZCwgTlVMTCk7CQkJICAgICAgIFwKIAl6ZmNwX2VycF93YWl0KF9hZGFwdGVyKTsJCQkJCSAgICAgICBcCiBvdXQ6CQkJCQkJCQkJICAgICAgIFwKLQl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsJCQkJCSAgICAgICBcCisJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsJCQkJICAgICAgIFwKIAlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogKHNzaXplX3QpIGNvdW50OwkJCSAgICAgICBcCiB9CQkJCQkJCQkJICAgICAgIFwKIHN0YXRpYyBaRkNQX0RFVl9BVFRSKF9mZWF0LCBmYWlsZWQsIFNfSVdVU1IgfCBTX0lSVUdPLAkJCSAgICAgICBcCkBAIC0xMjYsNyArMTI2LDcgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fUkVNT1ZFKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JcmV0ID0gemZjcF9zY2FuX3BvcnRzKGFkYXB0ZXIpOworCXJldCA9IHpmY3BfZmNfc2Nhbl9wb3J0cyhhZGFwdGVyKTsKIAlyZXR1cm4gcmV0ID8gcmV0IDogKHNzaXplX3QpIGNvdW50OwogfQogc3RhdGljIFpGQ1BfREVWX0FUVFIoYWRhcHRlciwgcG9ydF9yZXNjYW4sIFNfSVdVU1IsIE5VTEwsCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlpbnQgcmV0dmFsID0gMDsKIAlMSVNUX0hFQUQocG9ydF9yZW1vdmVfbGgpOwogCi0JZG93bigmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKKwltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fUkVNT1ZFKSB7CiAJCXJldHZhbCA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CkBAIC0xNzMsNyArMTczLDcgQEAKIAl6ZmNwX3BvcnRfcHV0KHBvcnQpOwogCXpmY3BfcG9ydF9kZXF1ZXVlKHBvcnQpOwogIG91dDoKLQl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKKwltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCXJldHVybiByZXR2YWwgPyByZXR2YWwgOiAoc3NpemVfdCkgY291bnQ7CiB9CiBzdGF0aWMgWkZDUF9ERVZfQVRUUihhZGFwdGVyLCBwb3J0X3JlbW92ZSwgU19JV1VTUiwgTlVMTCwKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXU2NCBmY3BfbHVuOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCi0JZG93bigmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKKwltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlpZiAoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fUkVNT1ZFKSB7CiAJCXJldHZhbCA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CkBAIC0yMjYsNyArMjI2LDcgQEAKIAl6ZmNwX2VycF93YWl0KHVuaXQtPnBvcnQtPmFkYXB0ZXIpOwogCXpmY3BfdW5pdF9wdXQodW5pdCk7CiBvdXQ6Ci0JdXAoJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogKHNzaXplX3QpIGNvdW50OwogfQogc3RhdGljIERFVklDRV9BVFRSKHVuaXRfYWRkLCBTX0lXVVNSLCBOVUxMLCB6ZmNwX3N5c2ZzX3VuaXRfYWRkX3N0b3JlKTsKQEAgLTI0MSw3ICsyNDEsNyBAQAogCWludCByZXR2YWwgPSAwOwogCUxJU1RfSEVBRCh1bml0X3JlbW92ZV9saCk7CiAKLQlkb3duKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOworCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCWlmIChhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9SRU1PVkUpIHsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIG91dDsKQEAgLTI4Miw3ICsyODIsNyBAQAogCXpmY3BfdW5pdF9wdXQodW5pdCk7CiAJemZjcF91bml0X2RlcXVldWUodW5pdCk7CiBvdXQ6Ci0JdXAoJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogKHNzaXplX3QpIGNvdW50OwogfQogc3RhdGljIERFVklDRV9BVFRSKHVuaXRfcmVtb3ZlLCBTX0lXVVNSLCBOVUxMLCB6ZmNwX3N5c2ZzX3VuaXRfcmVtb3ZlX3N0b3JlKTsKQEAgLTQyNSw3ICs0MjUsNyBAQAogCWlmICghcXRjYl9wb3J0KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldHZhbCA9IHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YV9zeW5jKGFkYXB0ZXIsIHF0Y2JfcG9ydCk7CisJcmV0dmFsID0gemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhX3N5bmMoYWRhcHRlci0+cWRpbywgcXRjYl9wb3J0KTsKIAlpZiAoIXJldHZhbCkKIAkJcmV0dmFsID0gc3ByaW50ZihidWYsICIldSAldSAldVxuIiwgcXRjYl9wb3J0LT5jcF91dGlsLAogCQkJCSBxdGNiX3BvcnQtPmNiX3V0aWwsIHF0Y2JfcG9ydC0+YV91dGlsKTsKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCWlmICghcXRjYl9jb25maWcpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0dmFsID0gemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2RhdGFfc3luYyhhZGFwdGVyLCBxdGNiX2NvbmZpZyk7CisJcmV0dmFsID0gemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2RhdGFfc3luYyhhZGFwdGVyLT5xZGlvLCBxdGNiX2NvbmZpZyk7CiAJaWYgKCFyZXR2YWwpCiAJCSpzdGF0X2luZiA9IHF0Y2JfY29uZmlnLT5zdGF0X2luZm87CiAKQEAgLTQ5MiwxNSArNDkyLDE1IEBACiAJCQkJCSAgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzY3NpX2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPQotCQkoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBzY3NpX2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPQorCQkoKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NzaV9ob3N0LT5ob3N0ZGF0YVswXSktPnFkaW87CiAJdTY0IHV0aWw7CiAKLQlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPnFkaW9fc3RhdF9sb2NrKTsKLQl1dGlsID0gYWRhcHRlci0+cmVxX3FfdXRpbDsKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cWRpb19zdGF0X2xvY2spOworCXNwaW5fbG9ja19iaCgmcWRpby0+c3RhdF9sb2NrKTsKKwl1dGlsID0gcWRpby0+cmVxX3FfdXRpbDsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+c3RhdF9sb2NrKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkICVsbHVcbiIsIGF0b21pY19yZWFkKCZhZGFwdGVyLT5xZGlvX291dGJfZnVsbCksCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQgJWxsdVxuIiwgYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xX2Z1bGwpLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl1dGlsKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihxdWV1ZV9mdWxsLCBTX0lSVUdPLCB6ZmNwX3N5c2ZzX2FkYXB0ZXJfcV9mdWxsX3Nob3csIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwppbmRleCA5YzIzMTIyLi44MmJiM2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwpAQCAtMTgxMSw2ICsxODExLDEyIEBACiAgICAgICAgICAgY2FsbGVkIHpmY3AuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmUKICAgICAgICAgICBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dD4uCiAKK2NvbmZpZyBTQ1NJX1BNQ1JBSUQKKwl0cmlzdGF0ZSAiUE1DIFNJRVJSQSBMaW51eCBNYXhSQUlEIGFkYXB0ZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFBNQyBTSUVSUkEgTWF4UkFJRCBhZGFwdGVycy4KKwogY29uZmlnIFNDU0lfU1JQCiAJdHJpc3RhdGUgIlNDU0kgUkRNQSBQcm90b2NvbCBoZWxwZXIgbGlicmFyeSIKIAlkZXBlbmRzIG9uIFNDU0kgJiYgUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKaW5kZXggMjU0MjllYS4uNjFhOTRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQpAQCAtMTMwLDYgKzEzMCw3IEBACiBvYmotJChDT05GSUdfUFMzX1JPTSkJCSs9IHBzM3JvbS5vCiBvYmotJChDT05GSUdfU0NTSV9DWEdCM19JU0NTSSkJKz0gbGliaXNjc2kubyBsaWJpc2NzaV90Y3AubyBjeGdiM2kvCiBvYmotJChDT05GSUdfU0NTSV9CTlgyX0lTQ1NJKQkrPSBsaWJpc2NzaS5vIGJueDJpLworb2JqLSQoQ09ORklHX1NDU0lfUE1DUkFJRCkJKz0gcG1jcmFpZC5vCiAKIG9iai0kKENPTkZJR19BUk0pCQkrPSBhcm0vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaW5pdC5jCmluZGV4IGFlNGIyZDUuLjBjNDIxMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2luaXQuYwpAQCAtMTUsMTEgKzE1LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGFkYXB0ZXJfbGlzdCA9IExJU1RfSEVBRF9JTklUKGFkYXB0ZXJfbGlzdCk7CiBzdGF0aWMgdTMyIGFkYXB0ZXJfY291bnQ7Ci1zdGF0aWMgaW50IGJueDJpX3JlZ19kZXZpY2U7CiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYm54MmkiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMi4wLjFkIgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk1hciAyNSwgMjAwOSIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIyLjAuMWUiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiSnVuZSAyMiwgMjAwOSIKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogCQkiQnJvYWRjb20gTmV0WHRyZW1lIElJIGlTQ1NJIERyaXZlciAiIERSVl9NT0RVTEVfTkFNRSBcCkBAIC0zMSw3ICszMCw3IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfTU9EVUxFX1ZFUlNJT04pOwogCi1zdGF0aWMgREVGSU5FX1JXTE9DSyhibngyaV9kZXZfbG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKGJueDJpX2Rldl9sb2NrKTsKIAogdW5zaWduZWQgaW50IGV2ZW50X2NvYWxfZGl2ID0gMTsKIG1vZHVsZV9wYXJhbShldmVudF9jb2FsX2RpdiwgaW50LCAwNjY0KTsKQEAgLTEwMCwxNCArOTksMTQgQEAKIAlpZiAoIWFkYXB0ZXJfY291bnQpCiAJCWdvdG8gaGJhX25vdF9mb3VuZDsKIAotCXJlYWRfbG9jaygmYm54MmlfZGV2X2xvY2spOworCW11dGV4X2xvY2soJmJueDJpX2Rldl9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9oYmEsICZhZGFwdGVyX2xpc3QsIGxpbmspIHsKIAkJaWYgKHRtcF9oYmEtPmNuaWMgJiYgdG1wX2hiYS0+Y25pYy0+Y21fc2VsZWN0X2RldikgewogCQkJaGJhID0gdG1wX2hiYTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXJlYWRfdW5sb2NrKCZibngyaV9kZXZfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZibngyaV9kZXZfbG9jayk7CiBoYmFfbm90X2ZvdW5kOgogCXJldHVybiBoYmE7CiB9CkBAIC0xMjIsMTQgKzEyMSwxNCBAQAogewogCXN0cnVjdCBibngyaV9oYmEgKmhiYSwgKnRlbXA7CiAKLQlyZWFkX2xvY2soJmJueDJpX2Rldl9sb2NrKTsKKwltdXRleF9sb2NrKCZibngyaV9kZXZfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhiYSwgdGVtcCwgJmFkYXB0ZXJfbGlzdCwgbGluaykgewogCQlpZiAoaGJhLT5jbmljID09IGNuaWMpIHsKLQkJCXJlYWRfdW5sb2NrKCZibngyaV9kZXZfbG9jayk7CisJCQltdXRleF91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKIAkJCXJldHVybiBoYmE7CiAJCX0KIAl9Ci0JcmVhZF91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKKwltdXRleF91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTg2LDE4ICsxODUsMTcgQEAKICAqLwogdm9pZCBibngyaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGJueDJpX2hiYSAqaGJhKQogeworCWludCByYzsKKwogCWlmICh0ZXN0X2JpdChBREFQVEVSX1NUQVRFX0dPSU5HX0RPV04sICZoYmEtPmFkYXB0ZXJfc3RhdGUpIHx8CiAJICAgIHRlc3RfYml0KEJOWDJJX0NOSUNfUkVHSVNURVJFRCwgJmhiYS0+cmVnX3dpdGhfY25pYykpIHsKIAkJcmV0dXJuOwogCX0KIAotCWhiYS0+Y25pYy0+cmVnaXN0ZXJfZGV2aWNlKGhiYS0+Y25pYywgQ05JQ19VTFBfSVNDU0ksIGhiYSk7CisJcmMgPSBoYmEtPmNuaWMtPnJlZ2lzdGVyX2RldmljZShoYmEtPmNuaWMsIENOSUNfVUxQX0lTQ1NJLCBoYmEpOwogCi0Jc3Bpbl9sb2NrKCZoYmEtPmxvY2spOwotCWJueDJpX3JlZ19kZXZpY2UrKzsKLQlzcGluX3VubG9jaygmaGJhLT5sb2NrKTsKLQotCXNldF9iaXQoQk5YMklfQ05JQ19SRUdJU1RFUkVELCAmaGJhLT5yZWdfd2l0aF9jbmljKTsKKwlpZiAoIXJjKQorCQlzZXRfYml0KEJOWDJJX0NOSUNfUkVHSVNURVJFRCwgJmhiYS0+cmVnX3dpdGhfY25pYyk7CiB9CiAKIApAQCAtMjExLDEwICsyMDksMTAgQEAKIHsKIAlzdHJ1Y3QgYm54MmlfaGJhICpoYmEsICp0ZW1wOwogCi0JcmVhZF9sb2NrKCZibngyaV9kZXZfbG9jayk7CisJbXV0ZXhfbG9jaygmYm54MmlfZGV2X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShoYmEsIHRlbXAsICZhZGFwdGVyX2xpc3QsIGxpbmspCiAJCWJueDJpX3JlZ2lzdGVyX2RldmljZShoYmEpOwotCXJlYWRfdW5sb2NrKCZibngyaV9kZXZfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZibngyaV9kZXZfbG9jayk7CiB9CiAKIApAQCAtMjM0LDEwICsyMzIsNiBAQAogCiAJaGJhLT5jbmljLT51bnJlZ2lzdGVyX2RldmljZShoYmEtPmNuaWMsIENOSUNfVUxQX0lTQ1NJKTsKIAotCXNwaW5fbG9jaygmaGJhLT5sb2NrKTsKLQlibngyaV9yZWdfZGV2aWNlLS07Ci0Jc3Bpbl91bmxvY2soJmhiYS0+bG9jayk7Ci0KIAkvKiBlcF9kaXNjb25uZWN0IGNvdWxkIGNvbWUgYmVmb3JlIE5FVERFVl9ET1dOLCBkcml2ZXIgd29uJ3QKIAkgKiBzZWUgTkVUREVWX0RPV04gYXMgaXQgYWxyZWFkeSB1bnJlZ2lzdGVyZWQgaXRzZWxmLgogCSAqLwpAQCAtMjU1LDEwICsyNDksMTAgQEAKIHsKIAlzdHJ1Y3QgYm54MmlfaGJhICpoYmEsICp0ZW1wOwogCi0JcmVhZF9sb2NrKCZibngyaV9kZXZfbG9jayk7CisJbXV0ZXhfbG9jaygmYm54MmlfZGV2X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShoYmEsIHRlbXAsICZhZGFwdGVyX2xpc3QsIGxpbmspCiAJCWJueDJpX3VucmVnX29uZV9kZXZpY2UoaGJhKTsKLQlyZWFkX3VubG9jaygmYm54MmlfZGV2X2xvY2spOworCW11dGV4X3VubG9jaygmYm54MmlfZGV2X2xvY2spOwogfQogCiAKQEAgLTI2NywzNSArMjYxLDM0IEBACiAgKiBAaGJhOglibngyaSBhZGFwdGVyIGluc3RhbmNlCiAgKiBAY25pYzoJY25pYyBkZXZpY2UgaGFuZGxlCiAgKgotICogR2xvYmFsIHJlc291cmNlIGxvY2sgYW5kIGhvc3QgYWRhcHRlciBsb2NrIGlzIGhlbGQgZHVyaW5nIGNyaXRpY2FsIHNlY3Rpb25zCi0gKgliZWxvdy4gVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIGNuaWNfcmVnaXN0ZXJfZHJpdmVyKCkgY29udGV4dCBhbmQKLSAqCXdvcmsgaG9yc2UgdGhyZWFkIHdoaWNoIGRvZXMgbWFqb3JpdHkgb2YgZGV2aWNlIHNwZWNpZmljIGluaXRpYWxpemF0aW9uCisgKiBHbG9iYWwgcmVzb3VyY2UgbG9jayBpcyBoZWxkIGR1cmluZyBjcml0aWNhbCBzZWN0aW9ucyBiZWxvdy4gVGhpcyByb3V0aW5lIGlzCisgKgljYWxsZWQgZnJvbSBlaXRoZXIgY25pY19yZWdpc3Rlcl9kcml2ZXIoKSBvciBkZXZpY2UgaG90IHBsdWcgY29udGV4dCBhbmQKKyAqCWFuZCBkb2VzIG1ham9yaXR5IG9mIGRldmljZSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbgogICovCiBzdGF0aWMgaW50IGJueDJpX2luaXRfb25lKHN0cnVjdCBibngyaV9oYmEgKmhiYSwgc3RydWN0IGNuaWNfZGV2ICpjbmljKQogewogCWludCByYzsKIAotCXJlYWRfbG9jaygmYm54MmlfZGV2X2xvY2spOwotCWlmIChibngyaV9yZWdfZGV2aWNlICYmCi0JICAgICF0ZXN0X2JpdChCTlgySV9DTklDX1JFR0lTVEVSRUQsICZoYmEtPnJlZ193aXRoX2NuaWMpKSB7Ci0JCXJjID0gY25pYy0+cmVnaXN0ZXJfZGV2aWNlKGNuaWMsIENOSUNfVUxQX0lTQ1NJLCBoYmEpOwotCQlpZiAocmMpCQkvKiBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uICovCi0JCQlwcmludGsoS0VSTl9FUlIgImJueDJpLSBkZXYgcmVnIGZhaWxlZFxuIik7Ci0KLQkJc3Bpbl9sb2NrKCZoYmEtPmxvY2spOwotCQlibngyaV9yZWdfZGV2aWNlKys7CisJbXV0ZXhfbG9jaygmYm54MmlfZGV2X2xvY2spOworCXJjID0gY25pYy0+cmVnaXN0ZXJfZGV2aWNlKGNuaWMsIENOSUNfVUxQX0lTQ1NJLCBoYmEpOworCWlmICghcmMpIHsKIAkJaGJhLT5hZ2UrKzsKLQkJc3Bpbl91bmxvY2soJmhiYS0+bG9jayk7Ci0KIAkJc2V0X2JpdChCTlgySV9DTklDX1JFR0lTVEVSRUQsICZoYmEtPnJlZ193aXRoX2NuaWMpOwotCX0KLQlyZWFkX3VubG9jaygmYm54MmlfZGV2X2xvY2spOworCQlsaXN0X2FkZF90YWlsKCZoYmEtPmxpbmssICZhZGFwdGVyX2xpc3QpOworCQlhZGFwdGVyX2NvdW50Kys7CisJfSBlbHNlIGlmIChyYyA9PSAtRUJVU1kpIAkvKiBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uICovCisJCXByaW50ayhLRVJOX0FMRVJUICJibngyaSwgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiIKKwkJCQkgICJoYmE9JXAsIGNuaWM9JXBcbiIsIGhiYSwgY25pYyk7CisJZWxzZSBpZiAocmMgPT0gLUVBR0FJTikKKwkJcHJpbnRrKEtFUk5fRVJSICJibngyaSwgZHJpdmVyIG5vdCByZWdpc3RlcmVkXG4iKTsKKwllbHNlIGlmIChyYyA9PSAtRUlOVkFMKQorCQlwcmludGsoS0VSTl9FUlIgImJueDJpLCBpbnZhbGlkIHR5cGUgJWRcbiIsIENOSUNfVUxQX0lTQ1NJKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiYm54MmkgZGV2IHJlZywgdW5rbm93biBlcnJvciwgJWRcbiIsIHJjKTsKIAotCXdyaXRlX2xvY2soJmJueDJpX2Rldl9sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZoYmEtPmxpbmssICZhZGFwdGVyX2xpc3QpOwotCWFkYXB0ZXJfY291bnQrKzsKLQl3cml0ZV91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKKworCXJldHVybiByYzsKIH0KIAogCkBAIC0zNDMsMTkgKzMzNiwxNSBAQAogCQkJCSAiZm91bmQsIGRldiAweCVwXG4iLCBkZXYpOwogCQlyZXR1cm47CiAJfQotCXdyaXRlX2xvY2soJmJueDJpX2Rldl9sb2NrKTsKKwltdXRleF9sb2NrKCZibngyaV9kZXZfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmaGJhLT5saW5rKTsKIAlhZGFwdGVyX2NvdW50LS07CiAKIAlpZiAodGVzdF9iaXQoQk5YMklfQ05JQ19SRUdJU1RFUkVELCAmaGJhLT5yZWdfd2l0aF9jbmljKSkgewogCQloYmEtPmNuaWMtPnVucmVnaXN0ZXJfZGV2aWNlKGhiYS0+Y25pYywgQ05JQ19VTFBfSVNDU0kpOwogCQljbGVhcl9iaXQoQk5YMklfQ05JQ19SRUdJU1RFUkVELCAmaGJhLT5yZWdfd2l0aF9jbmljKTsKLQotCQlzcGluX2xvY2soJmhiYS0+bG9jayk7Ci0JCWJueDJpX3JlZ19kZXZpY2UtLTsKLQkJc3Bpbl91bmxvY2soJmhiYS0+bG9jayk7CiAJfQotCXdyaXRlX3VubG9jaygmYm54MmlfZGV2X2xvY2spOworCW11dGV4X3VubG9jaygmYm54MmlfZGV2X2xvY2spOwogCiAJYm54MmlfZnJlZV9oYmEoaGJhKTsKIH0KQEAgLTM3Nyw2ICszNjYsOCBAQAogCWlmICghaXNfcG93ZXJfb2ZfMihzcV9zaXplKSkKIAkJc3Ffc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhzcV9zaXplKTsKIAorCW11dGV4X2luaXQoJmJueDJpX2Rldl9sb2NrKTsKKwogCWJueDJpX3Njc2lfeHBvcnRfdGVtcGxhdGUgPQogCQkJaXNjc2lfcmVnaXN0ZXJfdHJhbnNwb3J0KCZibngyaV9pc2NzaV90cmFuc3BvcnQpOwogCWlmICghYm54Mmlfc2NzaV94cG9ydF90ZW1wbGF0ZSkgewpAQCAtNDEyLDcgKzQwMyw3IEBACiB7CiAJc3RydWN0IGJueDJpX2hiYSAqaGJhOwogCi0Jd3JpdGVfbG9jaygmYm54MmlfZGV2X2xvY2spOworCW11dGV4X2xvY2soJmJueDJpX2Rldl9sb2NrKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmFkYXB0ZXJfbGlzdCkpIHsKIAkJaGJhID0gbGlzdF9lbnRyeShhZGFwdGVyX2xpc3QubmV4dCwgc3RydWN0IGJueDJpX2hiYSwgbGluayk7CiAJCWxpc3RfZGVsKCZoYmEtPmxpbmspOwpAQCAtNDIxLDE0ICs0MTIsMTEgQEAKIAkJaWYgKHRlc3RfYml0KEJOWDJJX0NOSUNfUkVHSVNURVJFRCwgJmhiYS0+cmVnX3dpdGhfY25pYykpIHsKIAkJCWhiYS0+Y25pYy0+dW5yZWdpc3Rlcl9kZXZpY2UoaGJhLT5jbmljLCBDTklDX1VMUF9JU0NTSSk7CiAJCQljbGVhcl9iaXQoQk5YMklfQ05JQ19SRUdJU1RFUkVELCAmaGJhLT5yZWdfd2l0aF9jbmljKTsKLQkJCWJueDJpX3JlZ19kZXZpY2UtLTsKIAkJfQogCi0JCXdyaXRlX3VubG9jaygmYm54MmlfZGV2X2xvY2spOwogCQlibngyaV9mcmVlX2hiYShoYmEpOwotCQl3cml0ZV9sb2NrKCZibngyaV9kZXZfbG9jayk7CiAJfQotCXdyaXRlX3VubG9jaygmYm54MmlfZGV2X2xvY2spOworCW11dGV4X3VubG9jaygmYm54MmlfZGV2X2xvY2spOwogCiAJaXNjc2lfdW5yZWdpc3Rlcl90cmFuc3BvcnQoJmJueDJpX2lzY3NpX3RyYW5zcG9ydCk7CiAJY25pY191bnJlZ2lzdGVyX2RyaXZlcihDTklDX1VMUF9JU0NTSSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCmluZGV4IGY3NDEyMTkuLjlhN2JhNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jCkBAIC0zODcsNiArMzg3LDcgQEAKIAlibngyaV9lcCA9IGVwLT5kZF9kYXRhOwogCUlOSVRfTElTVF9IRUFEKCZibngyaV9lcC0+bGluayk7CiAJYm54MmlfZXAtPnN0YXRlID0gRVBfU1RBVEVfSURMRTsKKwlibngyaV9lcC0+ZXBfaXNjc2lfY2lkID0gKHUxNikgLTE7CiAJYm54MmlfZXAtPmhiYSA9IGhiYTsKIAlibngyaV9lcC0+aGJhX2FnZSA9IGhiYS0+YWdlOwogCWhiYS0+b2ZsZF9jb25uc19hY3RpdmUrKzsKQEAgLTExNjAsOSArMTE2MSw2IEBACiAJc3RydWN0IGJueDJpX2NtZCAqY21kID0gdGFzay0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfY21kICpoZHIgPSAoc3RydWN0IGlzY3NpX2NtZCAqKSB0YXNrLT5oZHI7CiAKLQlpZiAodGVzdF9iaXQoQURBUFRFUl9TVEFURV9MSU5LX0RPV04sICZoYmEtPmFkYXB0ZXJfc3RhdGUpKQotCQlyZXR1cm4gLUVOT1RDT05OOwotCiAJaWYgKCFibngyaV9jb25uLT5pc19ib3VuZCkKIAkJcmV0dXJuIC1FTk9UQ09OTjsKIApAQCAtMTY1MywxNSArMTY1MSwxOCBAQAogCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXA7CiAJaW50IHJjID0gMDsKIAotCWlmIChzaG9zdCkKKwlpZiAoc2hvc3QpIHsKIAkJLyogZHJpdmVyIGlzIGdpdmVuIHNjc2kgaG9zdCB0byB3b3JrIHdpdGggKi8KIAkJaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKLQllbHNlCisJCS8qIFJlZ2lzdGVyIHRoZSBkZXZpY2Ugd2l0aCBjbmljIGlmIG5vdCBhbHJlYWR5IGRvbmUgc28gKi8KKwkJYm54MmlfcmVnaXN0ZXJfZGV2aWNlKGhiYSk7CisJfSBlbHNlCiAJCS8qCiAJCSAqIGNoZWNrIGlmIHRoZSBnaXZlbiBkZXN0aW5hdGlvbiBjYW4gYmUgcmVhY2hlZCB0aHJvdWdoCiAJCSAqIGEgaXNjc2kgY2FwYWJsZSBOZXRYdHJlbWUyIGRldmljZQogCQkgKi8KIAkJaGJhID0gYm54MmlfY2hlY2tfcm91dGUoZHN0X2FkZHIpOworCiAJaWYgKCFoYmEpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGNoZWNrX2J1c3k7CkBAIC0xNjgxLDggKzE2ODIsNiBAQAogCQlnb3RvIG5ldF9pZl9kb3duOwogCX0KIAotCWJueDJpX2VwLT5zdGF0ZSA9IEVQX1NUQVRFX0lETEU7Ci0JYm54MmlfZXAtPmVwX2lzY3NpX2NpZCA9ICh1MTYpIC0xOwogCWJueDJpX2VwLT5udW1fYWN0aXZlX2NtZHMgPSAwOwogCWlzY3NpX2NpZCA9IGJueDJpX2FsbG9jX2lzY3NpX2NpZChoYmEpOwogCWlmIChpc2NzaV9jaWQgPT0gLTEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jaC5jIGIvZHJpdmVycy9zY3NpL2NoLmMKaW5kZXggN2IxNjMzYS4uZmUxMWMxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NoLmMKKysrIGIvZHJpdmVycy9zY3NpL2NoLmMKQEAgLTM1Myw2ICszNTMsMTIgQEAKIAkvKiBsb29rIHVwIHRoZSBkZXZpY2VzIG9mIHRoZSBkYXRhIHRyYW5zZmVyIGVsZW1lbnRzICovCiAJY2gtPmR0ID0ga21hbGxvYyhjaC0+Y291bnRzW0NIRVRfRFRdKnNpemVvZihzdHJ1Y3Qgc2NzaV9kZXZpY2UpLAogCQkJIEdGUF9LRVJORUwpOworCisJaWYgKCFjaC0+ZHQpIHsKKwkJa2ZyZWUoYnVmZmVyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJZm9yIChlbGVtID0gMDsgZWxlbSA8IGNoLT5jb3VudHNbQ0hFVF9EVF07IGVsZW0rKykgewogCQlpZCAgPSAtMTsKIAkJbHVuID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYyBiL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYwppbmRleCBlNzllMTgxLi42M2FiYjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKKysrIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCkBAIC00LDggKzQsNyBAQAogICogQWRkaXRpb25zIGZvciBTQ1NJIDIgYW5kIExpbnV4IDIuMi54IGJ5IEQuIEdpbGJlcnQgKDk5MDQyMikKICAqIEFkZGl0aW9ucyBmb3IgU0NTSSAzKyAoU1BDLTMgVDEwLzE0MTYtRCBSZXYgMDcgMyBNYXkgMjAwMikKICAqICAgYnkgRC4gR2lsYmVydCBhbmQgYWViICgyMDAyMDYwOSkKLSAqIEFkZGl0aW9ucyBmb3IgU1BDLTMgVDEwLzE0MTYtRCBSZXYgMjEgMjIgU2VwdCAyMDA0LCBELiBHaWxiZXJ0IDIwMDQxMDI1Ci0gKiBVcGRhdGUgdG8gU1BDLTQgVDEwLzE3MTMtRCBSZXYgNWEsIDE0IEp1bmUgMjAwNiwgRC4gR2lsYmVydCAyMDA2MDcwMgorICogVXBkYXRlIHRvIFNQQy00IFQxMC8xNzEzLUQgUmV2IDIwLCAyMiBNYXkgMjAwOSwgRC4gR2lsYmVydCAyMDA5MDYyNAogICovCiAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KQEAgLTU2LDkgKzU1LDkgQEAKICAgICAgICAgICAgICJSZWFkIEJ1ZmZlciIsIAogLyogM2QtM2YgKi8gIlVwZGF0ZSBCbG9jayIsICJSZWFkIExvbmcoMTApIiwgICJXcml0ZSBMb25nKDEwKSIsCiAvKiA0MC00MSAqLyAiQ2hhbmdlIERlZmluaXRpb24iLCAiV3JpdGUgU2FtZSgxMCkiLAotLyogNDItNDggKi8gIlJlYWQgc3ViLWNoYW5uZWwiLCAiUmVhZCBUT0MvUE1BL0FUSVAiLCAiUmVhZCBkZW5zaXR5IHN1cHBvcnQiLAotICAgICAgICAgICAgIlBsYXkgYXVkaW8oMTApIiwgIkdldCBjb25maWd1cmF0aW9uIiwgIlBsYXkgYXVkaW8gbXNmIiwKLSAgICAgICAgICAgICJQbGF5IGF1ZGlvIHRyYWNrL2luZGV4IiwKKy8qIDQyLTQ4ICovICJVbm1hcC9SZWFkIHN1Yi1jaGFubmVsIiwgIlJlYWQgVE9DL1BNQS9BVElQIiwKKwkgICAgIlJlYWQgZGVuc2l0eSBzdXBwb3J0IiwgIlBsYXkgYXVkaW8oMTApIiwgIkdldCBjb25maWd1cmF0aW9uIiwKKwkgICAgIlBsYXkgYXVkaW8gbXNmIiwgIlBsYXkgYXVkaW8gdHJhY2svaW5kZXgiLAogLyogNDktNGYgKi8gIlBsYXkgdHJhY2sgcmVsYXRpdmUoMTApIiwgIkdldCBldmVudCBzdGF0dXMgbm90aWZpY2F0aW9uIiwKICAgICAgICAgICAgICJQYXVzZS9yZXN1bWUiLCAiTG9nIFNlbGVjdCIsICJMb2cgU2Vuc2UiLCAiU3RvcCBwbGF5L3NjYW4iLAogICAgICAgICAgICAgTlVMTCwKQEAgLTcxLDEyICs3MCwxMyBAQAogLyogNjAtNjcgKi8gTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKIC8qIDY4LTZmICovIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAvKiA3MC03NyAqLyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotLyogNzgtN2YgKi8gTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIlZhcmlhYmxlIGxlbmd0aCIsCisvKiA3OC03ZiAqLyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAiRXh0ZW5kZWQgQ0RCIiwKKwkgICAgIlZhcmlhYmxlIGxlbmd0aCIsCiAvKiA4MC04NCAqLyAiWGR3cml0ZSgxNikiLCAiUmVidWlsZCgxNikiLCAiUmVnZW5lcmF0ZSgxNikiLCAiRXh0ZW5kZWQgY29weSIsCiAgICAgICAgICAgICAiUmVjZWl2ZSBjb3B5IHJlc3VsdHMiLAogLyogODUtODkgKi8gIkFUQSBjb21tYW5kIHBhc3MgdGhyb3VnaCgxNikiLCAiQWNjZXNzIGNvbnRyb2wgaW4iLAogCSAgICAiQWNjZXNzIGNvbnRyb2wgb3V0IiwgIlJlYWQoMTYpIiwgIk1lbW9yeSBFeHBvcnQgT3V0KDE2KSIsCi0vKiA4YS04ZiAqLyAiV3JpdGUoMTYpIiwgTlVMTCwgIlJlYWQgYXR0cmlidXRlcyIsICJXcml0ZSBhdHRyaWJ1dGVzIiwKKy8qIDhhLThmICovICJXcml0ZSgxNikiLCAiT1JXcml0ZSIsICJSZWFkIGF0dHJpYnV0ZXMiLCAiV3JpdGUgYXR0cmlidXRlcyIsCiAgICAgICAgICAgICAiV3JpdGUgYW5kIHZlcmlmeSgxNikiLCAiVmVyaWZ5KDE2KSIsCiAvKiA5MC05NCAqLyAiUHJlLWZldGNoKDE2KSIsICJTeW5jaHJvbml6ZSBjYWNoZSgxNikiLAogICAgICAgICAgICAgIkxvY2svdW5sb2NrIGNhY2hlKDE2KSIsICJXcml0ZSBzYW1lKDE2KSIsIE5VTEwsCkBAIC0xMDcsMjIgKzEwNywyNCBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2YWx1ZV9uYW1lX3BhaXIgbWFpbnRfaW5fYXJyW10gPSB7Ci0JezB4NSwgIlJlcG9ydCBkZXZpY2UgaWRlbnRpZmllciJ9LAorCXsweDUsICJSZXBvcnQgaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24ifSwKIAl7MHhhLCAiUmVwb3J0IHRhcmdldCBwb3J0IGdyb3VwcyJ9LAogCXsweGIsICJSZXBvcnQgYWxpYXNlcyJ9LAogCXsweGMsICJSZXBvcnQgc3VwcG9ydGVkIG9wZXJhdGlvbiBjb2RlcyJ9LAogCXsweGQsICJSZXBvcnQgc3VwcG9ydGVkIHRhc2sgbWFuYWdlbWVudCBmdW5jdGlvbnMifSwKIAl7MHhlLCAiUmVwb3J0IHByaW9yaXR5In0sCiAJezB4ZiwgIlJlcG9ydCB0aW1lc3RhbXAifSwKKwl7MHgxMCwgIk1hbmFnZW1lbnQgcHJvdG9jb2wgaW4ifSwKIH07CiAjZGVmaW5lIE1BSU5UX0lOX1NaIEFSUkFZX1NJWkUobWFpbnRfaW5fYXJyKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZhbHVlX25hbWVfcGFpciBtYWludF9vdXRfYXJyW10gPSB7Ci0JezB4NiwgIlNldCBkZXZpY2UgaWRlbnRpZmllciJ9LAorCXsweDYsICJTZXQgaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24ifSwKIAl7MHhhLCAiU2V0IHRhcmdldCBwb3J0IGdyb3VwcyJ9LAogCXsweGIsICJDaGFuZ2UgYWxpYXNlcyJ9LAogCXsweGUsICJTZXQgcHJpb3JpdHkifSwKLQl7MHhlLCAiU2V0IHRpbWVzdGFtcCJ9LAorCXsweGYsICJTZXQgdGltZXN0YW1wIn0sCisJezB4MTAsICJNYW5hZ2VtZW50IHByb3RvY29sIG91dCJ9LAogfTsKICNkZWZpbmUgTUFJTlRfT1VUX1NaIEFSUkFZX1NJWkUobWFpbnRfb3V0X2FycikKIApAQCAtNDEyLDYgKzQxNCw3IEBACiAJezB4MDAwNCwgIkJlZ2lubmluZy1vZi1wYXJ0aXRpb24vbWVkaXVtIGRldGVjdGVkIn0sCiAJezB4MDAwNSwgIkVuZC1vZi1kYXRhIGRldGVjdGVkIn0sCiAJezB4MDAwNiwgIkkvTyBwcm9jZXNzIHRlcm1pbmF0ZWQifSwKKwl7MHgwMDA3LCAiUHJvZ3JhbW1hYmxlIGVhcmx5IHdhcm5pbmcgZGV0ZWN0ZWQifSwKIAl7MHgwMDExLCAiQXVkaW8gcGxheSBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MifSwKIAl7MHgwMDEyLCAiQXVkaW8gcGxheSBvcGVyYXRpb24gcGF1c2VkIn0sCiAJezB4MDAxMywgIkF1ZGlvIHBsYXkgb3BlcmF0aW9uIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQifSwKQEAgLTQyNSw2ICs0MjgsNyBAQAogCXsweDAwMUIsICJTZXQgY2FwYWNpdHkgb3BlcmF0aW9uIGluIHByb2dyZXNzIn0sCiAJezB4MDAxQywgIlZlcmlmeSBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MifSwKIAl7MHgwMDFELCAiQVRBIHBhc3MgdGhyb3VnaCBpbmZvcm1hdGlvbiBhdmFpbGFibGUifSwKKwl7MHgwMDFFLCAiQ29uZmxpY3RpbmcgU0EgY3JlYXRpb24gcmVxdWVzdCJ9LAogCiAJezB4MDEwMCwgIk5vIGluZGV4L3NlY3RvciBzaWduYWwifSwKIApAQCAtNDQ5LDkgKzQ1MywxMiBAQAogCXsweDA0MEIsICJMb2dpY2FsIHVuaXQgbm90IGFjY2Vzc2libGUsIHRhcmdldCBwb3J0IGluIHN0YW5kYnkgc3RhdGUifSwKIAl7MHgwNDBDLCAiTG9naWNhbCB1bml0IG5vdCBhY2Nlc3NpYmxlLCB0YXJnZXQgcG9ydCBpbiB1bmF2YWlsYWJsZSAiCiAJICJzdGF0ZSJ9LAorCXsweDA0MEQsICJMb2dpY2FsIHVuaXQgbm90IHJlYWR5LCBzdHJ1Y3R1cmUgY2hlY2sgcmVxdWlyZWQifSwKIAl7MHgwNDEwLCAiTG9naWNhbCB1bml0IG5vdCByZWFkeSwgYXV4aWxpYXJ5IG1lbW9yeSBub3QgYWNjZXNzaWJsZSJ9LAogCXsweDA0MTEsICJMb2dpY2FsIHVuaXQgbm90IHJlYWR5LCBub3RpZnkgKGVuYWJsZSBzcGludXApIHJlcXVpcmVkIn0sCiAJezB4MDQxMiwgIkxvZ2ljYWwgdW5pdCBub3QgcmVhZHksIG9mZmxpbmUifSwKKwl7MHgwNDEzLCAiTG9naWNhbCB1bml0IG5vdCByZWFkeSwgU0EgY3JlYXRpb24gaW4gcHJvZ3Jlc3MifSwKKwl7MHgwNDE0LCAiTG9naWNhbCB1bml0IG5vdCByZWFkeSwgc3BhY2UgYWxsb2NhdGlvbiBpbiBwcm9ncmVzcyJ9LAogCiAJezB4MDUwMCwgIkxvZ2ljYWwgdW5pdCBkb2VzIG5vdCByZXNwb25kIHRvIHNlbGVjdGlvbiJ9LAogCkBAIC00NzksNiArNDg2LDkgQEAKIAl7MHgwQjAzLCAiV2FybmluZyAtIGJhY2tncm91bmQgc2VsZi10ZXN0IGZhaWxlZCJ9LAogCXsweDBCMDQsICJXYXJuaW5nIC0gYmFja2dyb3VuZCBwcmUtc2NhbiBkZXRlY3RlZCBtZWRpdW0gZXJyb3IifSwKIAl7MHgwQjA1LCAiV2FybmluZyAtIGJhY2tncm91bmQgbWVkaXVtIHNjYW4gZGV0ZWN0ZWQgbWVkaXVtIGVycm9yIn0sCisJezB4MEIwNiwgIldhcm5pbmcgLSBub24tdm9sYXRpbGUgY2FjaGUgbm93IHZvbGF0aWxlIn0sCisJezB4MEIwNywgIldhcm5pbmcgLSBkZWdyYWRlZCBwb3dlciB0byBub24tdm9sYXRpbGUgY2FjaGUifSwKKwl7MHgwQjA4LCAiV2FybmluZyAtIHBvd2VyIGxvc3MgZXhwZWN0ZWQifSwKIAogCXsweDBDMDAsICJXcml0ZSBlcnJvciJ9LAogCXsweDBDMDEsICJXcml0ZSBlcnJvciAtIHJlY292ZXJlZCB3aXRoIGF1dG8gcmVhbGxvY2F0aW9uIn0sCkBAIC01OTMsNiArNjAzLDcgQEAKIAl7MHgxQzAyLCAiR3Jvd24gZGVmZWN0IGxpc3Qgbm90IGZvdW5kIn0sCiAKIAl7MHgxRDAwLCAiTWlzY29tcGFyZSBkdXJpbmcgdmVyaWZ5IG9wZXJhdGlvbiJ9LAorCXsweDFEMDEsICJNaXNjb21wYXJlIHZlcmlmeSBvZiB1bm1hcHBlZCBMQkEifSwKIAogCXsweDFFMDAsICJSZWNvdmVyZWQgaWQgd2l0aCBFQ0MgY29ycmVjdGlvbiJ9LAogCkBAIC02MjYsNiArNjM3LDcgQEAKIAl7MHgyNDA1LCAiU2VjdXJpdHkgd29ya2luZyBrZXkgZnJvemVuIn0sCiAJezB4MjQwNiwgIk5vbmNlIG5vdCB1bmlxdWUifSwKIAl7MHgyNDA3LCAiTm9uY2UgdGltZXN0YW1wIG91dCBvZiByYW5nZSJ9LAorCXsweDI0MDgsICJJbnZhbGlkIFhDREIifSwKIAogCXsweDI1MDAsICJMb2dpY2FsIHVuaXQgbm90IHN1cHBvcnRlZCJ9LAogCkBAIC02NTYsMTAgKzY2OCwxMiBAQAogCXsweDI3MDQsICJQZXJzaXN0ZW50IHdyaXRlIHByb3RlY3QifSwKIAl7MHgyNzA1LCAiUGVybWFuZW50IHdyaXRlIHByb3RlY3QifSwKIAl7MHgyNzA2LCAiQ29uZGl0aW9uYWwgd3JpdGUgcHJvdGVjdCJ9LAorCXsweDI3MDcsICJTcGFjZSBhbGxvY2F0aW9uIGZhaWxlZCB3cml0ZSBwcm90ZWN0In0sCiAKIAl7MHgyODAwLCAiTm90IHJlYWR5IHRvIHJlYWR5IGNoYW5nZSwgbWVkaXVtIG1heSBoYXZlIGNoYW5nZWQifSwKIAl7MHgyODAxLCAiSW1wb3J0IG9yIGV4cG9ydCBlbGVtZW50IGFjY2Vzc2VkIn0sCiAJezB4MjgwMiwgIkZvcm1hdC1sYXllciBtYXkgaGF2ZSBjaGFuZ2VkIn0sCisJezB4MjgwMywgIkltcG9ydC9leHBvcnQgZWxlbWVudCBhY2Nlc3NlZCwgbWVkaXVtIGNoYW5nZWQifSwKIAogCXsweDI5MDAsICJQb3dlciBvbiwgcmVzZXQsIG9yIGJ1cyBkZXZpY2UgcmVzZXQgb2NjdXJyZWQifSwKIAl7MHgyOTAxLCAiUG93ZXIgb24gb2NjdXJyZWQifSwKQEAgLTY4MCwxMSArNjk0LDE2IEBACiAJezB4MkEwNywgIkltcGxpY2l0IGFzeW1tZXRyaWMgYWNjZXNzIHN0YXRlIHRyYW5zaXRpb24gZmFpbGVkIn0sCiAJezB4MkEwOCwgIlByaW9yaXR5IGNoYW5nZWQifSwKIAl7MHgyQTA5LCAiQ2FwYWNpdHkgZGF0YSBoYXMgY2hhbmdlZCJ9LAorCXsweDJBMEEsICJFcnJvciBoaXN0b3J5IElfVCBuZXh1cyBjbGVhcmVkIn0sCisJezB4MkEwQiwgIkVycm9yIGhpc3Rvcnkgc25hcHNob3QgcmVsZWFzZWQifSwKKwl7MHgyQTBDLCAiRXJyb3IgcmVjb3ZlcnkgYXR0cmlidXRlcyBoYXZlIGNoYW5nZWQifSwKKwl7MHgyQTBELCAiRGF0YSBlbmNyeXB0aW9uIGNhcGFiaWxpdGllcyBjaGFuZ2VkIn0sCiAJezB4MkExMCwgIlRpbWVzdGFtcCBjaGFuZ2VkIn0sCiAJezB4MkExMSwgIkRhdGEgZW5jcnlwdGlvbiBwYXJhbWV0ZXJzIGNoYW5nZWQgYnkgYW5vdGhlciBpX3QgbmV4dXMifSwKIAl7MHgyQTEyLCAiRGF0YSBlbmNyeXB0aW9uIHBhcmFtZXRlcnMgY2hhbmdlZCBieSB2ZW5kb3Igc3BlY2lmaWMgIgogCQkgImV2ZW50In0sCiAJezB4MkExMywgIkRhdGEgZW5jcnlwdGlvbiBrZXkgaW5zdGFuY2UgY291bnRlciBoYXMgY2hhbmdlZCJ9LAorCXsweDJBMTQsICJTQSBjcmVhdGlvbiBjYXBhYmlsaXRpZXMgZGF0YSBoYXMgY2hhbmdlZCJ9LAogCiAJezB4MkIwMCwgIkNvcHkgY2Fubm90IGV4ZWN1dGUgc2luY2UgaG9zdCBjYW5ub3QgZGlzY29ubmVjdCJ9LAogCkBAIC03MjMsNiArNzQyLDggQEAKIAl7MHgzMDBDLCAiV09STSBtZWRpdW0gLSBvdmVyd3JpdGUgYXR0ZW1wdGVkIn0sCiAJezB4MzAwRCwgIldPUk0gbWVkaXVtIC0gaW50ZWdyaXR5IGNoZWNrIn0sCiAJezB4MzAxMCwgIk1lZGl1bSBub3QgZm9ybWF0dGVkIn0sCisJezB4MzAxMSwgIkluY29tcGF0aWJsZSB2b2x1bWUgdHlwZSJ9LAorCXsweDMwMTIsICJJbmNvbXBhdGlibGUgdm9sdW1lIHF1YWxpZmllciJ9LAogCiAJezB4MzEwMCwgIk1lZGl1bSBmb3JtYXQgY29ycnVwdGVkIn0sCiAJezB4MzEwMSwgIkZvcm1hdCBjb21tYW5kIGZhaWxlZCJ9LApAQCAtNzgyLDYgKzgwMywxMCBAQAogCXsweDNCMTUsICJNZWRpdW0gbWFnYXppbmUgdW5sb2NrZWQifSwKIAl7MHgzQjE2LCAiTWVjaGFuaWNhbCBwb3NpdGlvbmluZyBvciBjaGFuZ2VyIGVycm9yIn0sCiAJezB4M0IxNywgIlJlYWQgcGFzdCBlbmQgb2YgdXNlciBvYmplY3QifSwKKwl7MHgzQjE4LCAiRWxlbWVudCBkaXNhYmxlZCJ9LAorCXsweDNCMTksICJFbGVtZW50IGVuYWJsZWQifSwKKwl7MHgzQjFBLCAiRGF0YSB0cmFuc2ZlciBkZXZpY2UgcmVtb3ZlZCJ9LAorCXsweDNCMUIsICJEYXRhIHRyYW5zZmVyIGRldmljZSBpbnNlcnRlZCJ9LAogCiAJezB4M0QwMCwgIkludmFsaWQgYml0cyBpbiBpZGVudGlmeSBtZXNzYWdlIn0sCiAKQEAgLTg4Miw2ICs5MDcsOCBAQAogCXsweDU1MDYsICJBdXhpbGlhcnkgbWVtb3J5IG91dCBvZiBzcGFjZSJ9LAogCXsweDU1MDcsICJRdW90YSBlcnJvciJ9LAogCXsweDU1MDgsICJNYXhpbXVtIG51bWJlciBvZiBzdXBwbGVtZW50YWwgZGVjcnlwdGlvbiBrZXlzIGV4Y2VlZGVkIn0sCisJezB4NTUwOSwgIk1lZGl1bSBhdXhpbGlhcnkgbWVtb3J5IG5vdCBhY2Nlc3NpYmxlIn0sCisJezB4NTUwQSwgIkRhdGEgY3VycmVudGx5IHVuYXZhaWxhYmxlIn0sCiAKIAl7MHg1NzAwLCAiVW5hYmxlIHRvIHJlY292ZXIgdGFibGUtb2YtY29udGVudHMifSwKIApAQCAtOTkzLDYgKzEwMjAsMTIgQEAKIAl7MHg1RTAyLCAiU3RhbmRieSBjb25kaXRpb24gYWN0aXZhdGVkIGJ5IHRpbWVyIn0sCiAJezB4NUUwMywgIklkbGUgY29uZGl0aW9uIGFjdGl2YXRlZCBieSBjb21tYW5kIn0sCiAJezB4NUUwNCwgIlN0YW5kYnkgY29uZGl0aW9uIGFjdGl2YXRlZCBieSBjb21tYW5kIn0sCisJezB4NUUwNSwgIklkbGVfYiBjb25kaXRpb24gYWN0aXZhdGVkIGJ5IHRpbWVyIn0sCisJezB4NUUwNiwgIklkbGVfYiBjb25kaXRpb24gYWN0aXZhdGVkIGJ5IGNvbW1hbmQifSwKKwl7MHg1RTA3LCAiSWRsZV9jIGNvbmRpdGlvbiBhY3RpdmF0ZWQgYnkgdGltZXIifSwKKwl7MHg1RTA4LCAiSWRsZV9jIGNvbmRpdGlvbiBhY3RpdmF0ZWQgYnkgY29tbWFuZCJ9LAorCXsweDVFMDksICJTdGFuZGJ5X3kgY29uZGl0aW9uIGFjdGl2YXRlZCBieSB0aW1lciJ9LAorCXsweDVFMEEsICJTdGFuZGJ5X3kgY29uZGl0aW9uIGFjdGl2YXRlZCBieSBjb21tYW5kIn0sCiAJezB4NUU0MSwgIlBvd2VyIHN0YXRlIGNoYW5nZSB0byBhY3RpdmUifSwKIAl7MHg1RTQyLCAiUG93ZXIgc3RhdGUgY2hhbmdlIHRvIGlkbGUifSwKIAl7MHg1RTQzLCAiUG93ZXIgc3RhdGUgY2hhbmdlIHRvIHN0YW5kYnkifSwKQEAgLTEwOTEsNyArMTEyNCwyOCBAQAogCXsweDc0MDMsICJJbmNvcnJlY3QgZGF0YSBlbmNyeXB0aW9uIGtleSJ9LAogCXsweDc0MDQsICJDcnlwdG9ncmFwaGljIGludGVncml0eSB2YWxpZGF0aW9uIGZhaWxlZCJ9LAogCXsweDc0MDUsICJFcnJvciBkZWNyeXB0aW5nIGRhdGEifSwKKwl7MHg3NDA2LCAiVW5rbm93biBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGtleSJ9LAorCXsweDc0MDcsICJFbmNyeXB0aW9uIHBhcmFtZXRlcnMgbm90IHVzZWFibGUifSwKKwl7MHg3NDA4LCAiRGlnaXRhbCBzaWduYXR1cmUgdmFsaWRhdGlvbiBmYWlsdXJlIn0sCisJezB4NzQwOSwgIkVuY3J5cHRpb24gbW9kZSBtaXNtYXRjaCBvbiByZWFkIn0sCisJezB4NzQwQSwgIkVuY3J5cHRlZCBibG9jayBub3QgcmF3IHJlYWQgZW5hYmxlZCJ9LAorCXsweDc0MEIsICJJbmNvcnJlY3QgRW5jcnlwdGlvbiBwYXJhbWV0ZXJzIn0sCisJezB4NzQwQywgIlVuYWJsZSB0byBkZWNyeXB0IHBhcmFtZXRlciBsaXN0In0sCisJezB4NzQwRCwgIkVuY3J5cHRpb24gYWxnb3JpdGhtIGRpc2FibGVkIn0sCisJezB4NzQxMCwgIlNBIGNyZWF0aW9uIHBhcmFtZXRlciB2YWx1ZSBpbnZhbGlkIn0sCisJezB4NzQxMSwgIlNBIGNyZWF0aW9uIHBhcmFtZXRlciB2YWx1ZSByZWplY3RlZCJ9LAorCXsweDc0MTIsICJJbnZhbGlkIFNBIHVzYWdlIn0sCisJezB4NzQyMSwgIkRhdGEgRW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIHByZXZlbnRlZCJ9LAorCXsweDc0MzAsICJTQSBjcmVhdGlvbiBwYXJhbWV0ZXIgbm90IHN1cHBvcnRlZCJ9LAorCXsweDc0NDAsICJBdXRoZW50aWNhdGlvbiBmYWlsZWQifSwKKwl7MHg3NDYxLCAiRXh0ZXJuYWwgZGF0YSBlbmNyeXB0aW9uIGtleSBtYW5hZ2VyIGFjY2VzcyBlcnJvciJ9LAorCXsweDc0NjIsICJFeHRlcm5hbCBkYXRhIGVuY3J5cHRpb24ga2V5IG1hbmFnZXIgZXJyb3IifSwKKwl7MHg3NDYzLCAiRXh0ZXJuYWwgZGF0YSBlbmNyeXB0aW9uIGtleSBub3QgZm91bmQifSwKKwl7MHg3NDY0LCAiRXh0ZXJuYWwgZGF0YSBlbmNyeXB0aW9uIHJlcXVlc3Qgbm90IGF1dGhvcml6ZWQifSwKKwl7MHg3NDZFLCAiRXh0ZXJuYWwgZGF0YSBlbmNyeXB0aW9uIGNvbnRyb2wgdGltZW91dCJ9LAorCXsweDc0NkYsICJFeHRlcm5hbCBkYXRhIGVuY3J5cHRpb24gY29udHJvbCBlcnJvciJ9LAogCXsweDc0NzEsICJMb2dpY2FsIHVuaXQgYWNjZXNzIG5vdCBhdXRob3JpemVkIn0sCisJezB4NzQ3OSwgIlNlY3VyaXR5IGNvbmZsaWN0IGluIHRyYW5zbGF0ZWQgZGV2aWNlIn0sCiAKIAl7MCwgTlVMTH0KIH07CkBAIC0xMTAzLDEyICsxMTU3LDEyIEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXJyb3JfaW5mbzIgYWRkaXRpb25hbDJbXSA9CiB7Ci0JezB4NDAsMHgwMCwweDdmLCJSYW0gZmFpbHVyZSAoJXgpIn0sCi0JezB4NDAsMHg4MCwweGZmLCJEaWFnbm9zdGljIGZhaWx1cmUgb24gY29tcG9uZW50ICgleCkifSwKLQl7MHg0MSwweDAwLDB4ZmYsIkRhdGEgcGF0aCBmYWlsdXJlICgleCkifSwKLQl7MHg0MiwweDAwLDB4ZmYsIlBvd2VyLW9uIG9yIHNlbGYtdGVzdCBmYWlsdXJlICgleCkifSwKLQl7MHg0RCwweDAwLDB4ZmYsIlRhZ2dlZCBvdmVybGFwcGVkIGNvbW1hbmRzIChxdWV1ZSB0YWcgJXgpIn0sCi0JezB4NzAsMHgwMCwweGZmLCJEZWNvbXByZXNzaW9uIGV4Y2VwdGlvbiBzaG9ydCBhbGdvcml0aG0gaWQgb2YgJXgifSwKKwl7MHg0MCwgMHgwMCwgMHg3ZiwgIlJhbSBmYWlsdXJlICgleCkifSwKKwl7MHg0MCwgMHg4MCwgMHhmZiwgIkRpYWdub3N0aWMgZmFpbHVyZSBvbiBjb21wb25lbnQgKCV4KSJ9LAorCXsweDQxLCAweDAwLCAweGZmLCAiRGF0YSBwYXRoIGZhaWx1cmUgKCV4KSJ9LAorCXsweDQyLCAweDAwLCAweGZmLCAiUG93ZXItb24gb3Igc2VsZi10ZXN0IGZhaWx1cmUgKCV4KSJ9LAorCXsweDRELCAweDAwLCAweGZmLCAiVGFnZ2VkIG92ZXJsYXBwZWQgY29tbWFuZHMgKHRhc2sgdGFnICV4KSJ9LAorCXsweDcwLCAweDAwLCAweGZmLCAiRGVjb21wcmVzc2lvbiBleGNlcHRpb24gc2hvcnQgYWxnb3JpdGhtIGlkIG9mICV4In0sCiAJezAsIDAsIDAsIE5VTEx9CiB9OwogCkBAIC0xMTU3LDE0ICsxMjExLDE1IEBACiAJaW50IGk7CiAJdW5zaWduZWQgc2hvcnQgY29kZSA9ICgoYXNjIDw8IDgpIHwgYXNjcSk7CiAKLQlmb3IgKGk9MDsgYWRkaXRpb25hbFtpXS50ZXh0OyBpKyspCisJZm9yIChpID0gMDsgYWRkaXRpb25hbFtpXS50ZXh0OyBpKyspCiAJCWlmIChhZGRpdGlvbmFsW2ldLmNvZGUxMiA9PSBjb2RlKQogCQkJcmV0dXJuIGFkZGl0aW9uYWxbaV0udGV4dDsKLQlmb3IgKGk9MDsgYWRkaXRpb25hbDJbaV0uZm10OyBpKyspCisJZm9yIChpID0gMDsgYWRkaXRpb25hbDJbaV0uZm10OyBpKyspIHsKIAkJaWYgKGFkZGl0aW9uYWwyW2ldLmNvZGUxID09IGFzYyAmJgotCQkgICAgYWRkaXRpb25hbDJbaV0uY29kZTJfbWluID49IGFzY3EgJiYKLQkJICAgIGFkZGl0aW9uYWwyW2ldLmNvZGUyX21heCA8PSBhc2NxKQorCQkgICAgYXNjcSA+PSBhZGRpdGlvbmFsMltpXS5jb2RlMl9taW4gJiYKKwkJICAgIGFzY3EgPD0gYWRkaXRpb25hbDJbaV0uY29kZTJfbWF4KQogCQkJcmV0dXJuIGFkZGl0aW9uYWwyW2ldLmZtdDsKKwl9CiAjZW5kaWYKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2luaXQuYwppbmRleCAwNDJkOWJjLi5kMGFiMjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaW5pdC5jCkBAIC0yNiw3ICsyNiw3IEBACiAKIHN0YXRpYyB2b2lkIG9wZW5fczNfZGV2KHN0cnVjdCB0M2NkZXYgKik7CiBzdGF0aWMgdm9pZCBjbG9zZV9zM19kZXYoc3RydWN0IHQzY2RldiAqKTsKLXN0YXRpYyB2b2lkIHMzX2Vycl9oYW5kbGVyKHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBzdGF0dXMsIHUzMiBlcnJvcik7CitzdGF0aWMgdm9pZCBzM19ldmVudF9oYW5kbGVyKHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBldmVudCwgdTMyIHBvcnQpOwogCiBzdGF0aWMgY3hnYjNfY3BsX2hhbmRsZXJfZnVuYyBjeGdiM2lfY3BsX2hhbmRsZXJzW05VTV9DUExfQ01EU107CiBzdGF0aWMgc3RydWN0IGN4Z2IzX2NsaWVudCB0M2NfY2xpZW50ID0gewpAQCAtMzQsNyArMzQsNyBAQAogCS5oYW5kbGVycyA9IGN4Z2IzaV9jcGxfaGFuZGxlcnMsCiAJLmFkZCA9IG9wZW5fczNfZGV2LAogCS5yZW1vdmUgPSBjbG9zZV9zM19kZXYsCi0JLmVycl9oYW5kbGVyID0gczNfZXJyX2hhbmRsZXIsCisJLmV2ZW50X2hhbmRsZXIgPSBzM19ldmVudF9oYW5kbGVyLAogfTsKIAogLyoqCkBAIC02NiwxNiArNjYsMTYgQEAKIAljeGdiM2lfZGRwX2NsZWFudXAodDNkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBzM19lcnJfaGFuZGxlcihzdHJ1Y3QgdDNjZGV2ICp0ZGV2LCB1MzIgc3RhdHVzLCB1MzIgZXJyb3IpCitzdGF0aWMgdm9pZCBzM19ldmVudF9oYW5kbGVyKHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBldmVudCwgdTMyIHBvcnQpCiB7CiAJc3RydWN0IGN4Z2IzaV9hZGFwdGVyICpzbmljID0gY3hnYjNpX2FkYXB0ZXJfZmluZF9ieV90ZGV2KHRkZXYpOwogCi0JY3hnYjNpX2xvZ19pbmZvKCJzbmljIDB4JXAsIHRkZXYgMHglcCwgc3RhdHVzIDB4JXgsIGVyciAweCV4LlxuIiwKLQkJCXNuaWMsIHRkZXYsIHN0YXR1cywgZXJyb3IpOworCWN4Z2IzaV9sb2dfaW5mbygic25pYyAweCVwLCB0ZGV2IDB4JXAsIGV2ZW50IDB4JXgsIHBvcnQgMHgleC5cbiIsCisJCQlzbmljLCB0ZGV2LCBldmVudCwgcG9ydCk7CiAJaWYgKCFzbmljKQogCQlyZXR1cm47CiAKLQlzd2l0Y2ggKHN0YXR1cykgeworCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE9GRkxPQURfU1RBVFVTX0RPV046CiAJCXNuaWMtPmZsYWdzIHw9IENYR0IzSV9BREFQVEVSX0ZMQUdfUkVTRVQ7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGguYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMKaW5kZXggYTUxOGYyZS4uM2VlMWNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGguYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jCkBAIC0xNTMsMTIgKzE1MywyNCBAQAogCWlmIChzZGV2LT5zY3NpX2RoX2RhdGEpIHsKIAkJaWYgKHNkZXYtPnNjc2lfZGhfZGF0YS0+c2NzaV9kaCAhPSBzY3NpX2RoKQogCQkJZXJyID0gLUVCVVNZOwotCX0gZWxzZSBpZiAoc2NzaV9kaC0+YXR0YWNoKQorCQllbHNlCisJCQlrcmVmX2dldCgmc2Rldi0+c2NzaV9kaF9kYXRhLT5rcmVmKTsKKwl9IGVsc2UgaWYgKHNjc2lfZGgtPmF0dGFjaCkgewogCQllcnIgPSBzY3NpX2RoLT5hdHRhY2goc2Rldik7Ci0KKwkJaWYgKCFlcnIpIHsKKwkJCWtyZWZfaW5pdCgmc2Rldi0+c2NzaV9kaF9kYXRhLT5rcmVmKTsKKwkJCXNkZXYtPnNjc2lfZGhfZGF0YS0+c2RldiA9IHNkZXY7CisJCX0KKwl9CiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgX19kZXRhY2hfaGFuZGxlciAoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBzY3NpX2RoX2RhdGEsIGtyZWYpOworCXNjc2lfZGhfZGF0YS0+c2NzaV9kaC0+ZGV0YWNoKHNjc2lfZGhfZGF0YS0+c2Rldik7Cit9CisKIC8qCiAgKiBzY3NpX2RoX2hhbmRsZXJfZGV0YWNoIC0gRGV0YWNoIGEgZGV2aWNlIGhhbmRsZXIgZnJvbSBhIGRldmljZQogICogQHNkZXYgLSBTQ1NJIGRldmljZSB0aGUgZGV2aWNlIGhhbmRsZXIgc2hvdWxkIGJlIGRldGFjaGVkIGZyb20KQEAgLTE4MCw3ICsxOTIsNyBAQAogCQlzY3NpX2RoID0gc2Rldi0+c2NzaV9kaF9kYXRhLT5zY3NpX2RoOwogCiAJaWYgKHNjc2lfZGggJiYgc2NzaV9kaC0+ZGV0YWNoKQotCQlzY3NpX2RoLT5kZXRhY2goc2Rldik7CisJCWtyZWZfcHV0KCZzZGV2LT5zY3NpX2RoX2RhdGEtPmtyZWYsIF9fZGV0YWNoX2hhbmRsZXIpOwogfQogCiAvKgpAQCAtNDQwLDYgKzQ1MiwzOSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9kaF9hY3RpdmF0ZSk7CiAKIC8qCisgKiBzY3NpX2RoX3NldF9wYXJhbXMgLSBzZXQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkZXZpY2UgYXMgcGVyIHRoZQorICogICAgICBzdHJpbmcgc3BlY2lmaWVkIGluIHBhcmFtcy4KKyAqIEBxIC0gUmVxdWVzdCBxdWV1ZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NzaV9kZXZpY2UgZm9yCisgKiAgICAgIHdoaWNoIHRoZSBwYXJhbWV0ZXJzIHRvIGJlIHNldC4KKyAqIEBwYXJhbXMgLSBwYXJhbWV0ZXJzIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0CisgKiAgICAgICJub19vZl9wYXJhbXNcMHBhcmFtMVwwcGFyYW0yXDBwYXJhbTNcMC4uLlwwIgorICogICAgICBmb3IgZXhhbXBsZSwgc3RyaW5nIGZvciAyIHBhcmFtZXRlcnMgd2l0aCB2YWx1ZSAxMCBhbmQgMjEKKyAqICAgICAgaXMgc3BlY2lmaWVkIGFzICIyXDAxMFwwMjFcMCIuCisgKi8KK2ludCBzY3NpX2RoX3NldF9wYXJhbXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNvbnN0IGNoYXIgKnBhcmFtcykKK3sKKwlpbnQgZXJyID0gLVNDU0lfREhfTk9TWVM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJc3RydWN0IHNjc2lfZGV2aWNlX2hhbmRsZXIgKnNjc2lfZGggPSBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOworCXNkZXYgPSBxLT5xdWV1ZWRhdGE7CisJaWYgKHNkZXYgJiYgc2Rldi0+c2NzaV9kaF9kYXRhKQorCQlzY3NpX2RoID0gc2Rldi0+c2NzaV9kaF9kYXRhLT5zY3NpX2RoOworCWlmIChzY3NpX2RoICYmIHNjc2lfZGgtPnNldF9wYXJhbXMgJiYgZ2V0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpKQorCQllcnIgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzY3NpX2RoLT5zZXRfcGFyYW1zKHNkZXYsIHBhcmFtcyk7CisJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzY3NpX2RoX3NldF9wYXJhbXMpOworCisvKgogICogc2NzaV9kaF9oYW5kbGVyX2V4aXN0IC0gUmV0dXJuIFRSVUUoMSkgaWYgYSBkZXZpY2UgaGFuZGxlciBleGlzdHMgZm9yCiAgKgl0aGUgZ2l2ZW4gbmFtZS4gRkFMU0UoMCkgb3RoZXJ3aXNlLgogICogQG5hbWUgLSBuYW1lIG9mIHRoZSBkZXZpY2UgaGFuZGxlci4KQEAgLTQ3NCw3ICs1MTksNiBAQAogCiAJaWYgKCFlcnIpIHsKIAkJZXJyID0gc2NzaV9kaF9oYW5kbGVyX2F0dGFjaChzZGV2LCBzY3NpX2RoKTsKLQogCQlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJfQogCXJldHVybiBlcnI7CkBAIC01MDUsMTAgKzU0OSw4IEBACiAJCXJldHVybjsKIAogCWlmIChzZGV2LT5zY3NpX2RoX2RhdGEpIHsKLQkJLyogaWYgc2RldiBpcyBub3Qgb24gaW50ZXJuYWwgbGlzdCwgZGV0YWNoICovCiAJCXNjc2lfZGggPSBzZGV2LT5zY3NpX2RoX2RhdGEtPnNjc2lfZGg7Ci0JCWlmICghZGV2aWNlX2hhbmRsZXJfbWF0Y2goc2NzaV9kaCwgc2RldikpCi0JCQlzY3NpX2RoX2hhbmRsZXJfZGV0YWNoKHNkZXYsIHNjc2lfZGgpOworCQlzY3NpX2RoX2hhbmRsZXJfZGV0YWNoKHNkZXYsIHNjc2lfZGgpOwogCX0KIAlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKaW5kZXggZGJhMTU0Yy4uYjVjZGVmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYwpAQCAtNjYzLDcgKzY2Myw3IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoaC0+dHBncyA9PSBUUEdTX01PREVfRVhQTElDSVQgJiYgaC0+c3RhdGUgIT0gVFBHU19TVEFURV9PUFRJTUlaRUQpCisJaWYgKGgtPnRwZ3MgJiBUUEdTX01PREVfRVhQTElDSVQgJiYgaC0+c3RhdGUgIT0gVFBHU19TVEFURV9PUFRJTUlaRUQpCiAJCWVyciA9IGFsdWFfc3RwZyhzZGV2LCBUUEdTX1NUQVRFX09QVElNSVpFRCwgaCk7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2VtYy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfZW1jLmMKaW5kZXggMGU1NzJkMi4uMGNmZmU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfZW1jLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfZW1jLmMKQEAgLTU2MSw2ICs1NjEsNjEgQEAKIAogCXJldHVybiByZXN1bHQ7CiB9CisvKgorICogcGFyYW1zIC0gcGFyYW1ldGVycyBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdAorICogICAgICAibm9fb2ZfcGFyYW1zXDBwYXJhbTFcMHBhcmFtMlwwcGFyYW0zXDAuLi5cMCIKKyAqICAgICAgZm9yIGV4YW1wbGUsIHN0cmluZyBmb3IgMiBwYXJhbWV0ZXJzIHdpdGggdmFsdWUgMTAgYW5kIDIxCisgKiAgICAgIGlzIHNwZWNpZmllZCBhcyAiMlwwMTBcMDIxXDAiLgorICovCitzdGF0aWMgaW50IGNsYXJpaW9uX3NldF9wYXJhbXMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBjb25zdCBjaGFyICpwYXJhbXMpCit7CisJc3RydWN0IGNsYXJpaW9uX2RoX2RhdGEgKmNzZGV2ID0gZ2V0X2NsYXJpaW9uX2RhdGEoc2Rldik7CisJdW5zaWduZWQgaW50IGhyID0gMCwgc3QgPSAwLCBhcmdjOworCWNvbnN0IGNoYXIgKnAgPSBwYXJhbXM7CisJaW50IHJlc3VsdCA9IFNDU0lfREhfT0s7CisKKwlpZiAoKHNzY2FuZihwYXJhbXMsICIldSIsICZhcmdjKSAhPSAxKSB8fCAoYXJnYyAhPSAyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoKnArKykKKwkJOworCWlmICgoc3NjYW5mKHAsICIldSIsICZzdCkgIT0gMSkgfHwgKHN0ID4gMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJd2hpbGUgKCpwKyspCisJCTsKKwlpZiAoKHNzY2FuZihwLCAiJXUiLCAmaHIpICE9IDEpIHx8IChociA+IDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdCkKKwkJY3NkZXYtPmZsYWdzIHw9IENMQVJJSU9OX1NIT1JUX1RSRVNQQVNTOworCWVsc2UKKwkJY3NkZXYtPmZsYWdzICY9IH5DTEFSSUlPTl9TSE9SVF9UUkVTUEFTUzsKKworCWlmIChocikKKwkJY3NkZXYtPmZsYWdzIHw9IENMQVJJSU9OX0hPTk9SX1JFU0VSVkFUSU9OUzsKKwllbHNlCisJCWNzZGV2LT5mbGFncyAmPSB+Q0xBUklJT05fSE9OT1JfUkVTRVJWQVRJT05TOworCisJLyoKKwkgKiBJZiB0aGlzIHBhdGggaXMgb3duZWQsIHdlIGhhdmUgdG8gc2VuZCBhIHRyZXNwYXNzIGNvbW1hbmQKKwkgKiB3aXRoIHRoZSBuZXcgcGFyYW1ldGVycy4gSWYgbm90LCBzaW1wbHkgcmV0dXJuLiBOZXh0IHRyZXNwYXNzCisJICogY29tbWFuZCB3b3VsZCB1c2UgdGhlIHBhcmFtZXRlcnMuCisJICovCisJaWYgKGNzZGV2LT5sdW5fc3RhdGUgIT0gQ0xBUklJT05fTFVOX09XTkVEKQorCQlnb3RvIGRvbmU7CisKKwljc2Rldi0+bHVuX3N0YXRlID0gQ0xBUklJT05fTFVOX1VOSU5JVElBTElaRUQ7CisJcmVzdWx0ID0gc2VuZF90cmVzcGFzc19jbWQoc2RldiwgY3NkZXYpOworCWlmIChyZXN1bHQgIT0gU0NTSV9ESF9PSykKKwkJZ290byBkb25lOworCisJLyogVXBkYXRlIHN0YXR1cyAqLworCXJlc3VsdCA9IGNsYXJpaW9uX3NlbmRfaW5xdWlyeShzZGV2LCBjc2Rldik7CisKK2RvbmU6CisJcmV0dXJuIHJlc3VsdDsKK30KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzY3NpX2RoX2Rldmxpc3QgY2xhcmlpb25fZGV2X2xpc3RbXSA9IHsKIAl7IkRHQyIsICJSQUlEIn0sCkBAIC01ODEsMTEgKzYzNiw5IEBACiAJLmNoZWNrX3NlbnNlCT0gY2xhcmlpb25fY2hlY2tfc2Vuc2UsCiAJLmFjdGl2YXRlCT0gY2xhcmlpb25fYWN0aXZhdGUsCiAJLnByZXBfZm4JPSBjbGFyaWlvbl9wcmVwX2ZuLAorCS5zZXRfcGFyYW1zCT0gY2xhcmlpb25fc2V0X3BhcmFtcywKIH07CiAKLS8qCi0gKiBUT0RPOiBuZWVkIHNvbWUgaW50ZXJmYWNlIHNvIHdlIGNhbiBzZXQgdHJlc3Bhc3MgdmFsdWVzCi0gKi8KIHN0YXRpYyBpbnQgY2xhcmlpb25fYnVzX2F0dGFjaChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCmluZGV4IGZkMDU0NGYuLjExYzg5MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKQEAgLTExMiw2ICsxMTIsNyBAQAogCiAjZGVmaW5lIFNVQlNZU19JRF9MRU4JMTYKICNkZWZpbmUgU0xPVF9JRF9MRU4JMgorI2RlZmluZSBBUlJBWV9MQUJFTF9MRU4JMzEKIAogc3RydWN0IGM0X2lucXVpcnkgewogCXU4CXBlcmlwaGVyYWxfaW5mbzsKQEAgLTEzNSw2ICsxMzYsOCBAQAogCQlzdHJ1Y3QgcmRhY19wZ19sZWdhY3kgbGVnYWN5OwogCQlzdHJ1Y3QgcmRhY19wZ19leHBhbmRlZCBleHBhbmRlZDsKIAl9IG1vZGVfc2VsZWN0OworCXU4CWluZGV4OworCXU4CWFycmF5X25hbWVbQVJSQVlfTEFCRUxfTEVOXTsKIH07CiBzdHJ1Y3QgYzhfaW5xdWlyeSB7CiAJdTgJcGVyaXBoZXJhbF9pbmZvOwpAQCAtMTk4LDYgKzIwMSwzMSBAQAogc3RhdGljIExJU1RfSEVBRChjdGxyX2xpc3QpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhsaXN0X2xvY2spOwogCisvKgorICogbW9kdWxlIHBhcmFtZXRlciB0byBlbmFibGUgcmRhYyBkZWJ1ZyBsb2dnaW5nLgorICogMiBiaXRzIGZvciBlYWNoIHR5cGUgb2YgbG9nZ2luZywgb25seSB0d28gdHlwZXMgZGVmaW5lZCBmb3Igbm93CisgKiBDYW4gYmUgZW5oYW5jZWQgaWYgcmVxdWlyZWQgYXQgbGF0ZXIgcG9pbnQKKyAqLworc3RhdGljIGludCByZGFjX2xvZ2dpbmcgPSAxOworbW9kdWxlX3BhcmFtKHJkYWNfbG9nZ2luZywgaW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhyZGFjX2xvZ2dpbmcsICJBIGJpdCBtYXNrIG9mIHJkYWMgbG9nZ2luZyBsZXZlbHMsICIKKwkJIkRlZmF1bHQgaXMgMSAtIGZhaWxvdmVyIGxvZ2dpbmcgZW5hYmxlZCwgIgorCQkic2V0IGl0IHRvIDB4RiB0byBlbmFibGUgYWxsIHRoZSBsb2dzIik7CisKKyNkZWZpbmUgUkRBQ19MT0dfRkFJTE9WRVIJMAorI2RlZmluZSBSREFDX0xPR19TRU5TRQkJMgorCisjZGVmaW5lIFJEQUNfTE9HX0JJVFMJCTIKKworI2RlZmluZSBSREFDX0xPR19MRVZFTChTSElGVCkgIFwKKwkoKHJkYWNfbG9nZ2luZyA+PiAoU0hJRlQpKSAmICgoMSA8PCAoUkRBQ19MT0dfQklUUykpIC0gMSkpCisKKyNkZWZpbmUgUkRBQ19MT0coU0hJRlQsIHNkZXYsIGYsIGFyZy4uLikgXAorZG8geyBcCisJaWYgKHVubGlrZWx5KFJEQUNfTE9HX0xFVkVMKFNISUZUKSkpIFwKKwkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCBSREFDX05BTUUgIjogIiBmICJcbiIsICMjIGFyZyk7IFwKK30gd2hpbGUgKDApOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZGFjX2RoX2RhdGEgKmdldF9yZGFjX2RhdGEoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCXN0cnVjdCBzY3NpX2RoX2RhdGEgKnNjc2lfZGhfZGF0YSA9IHNkZXYtPnNjc2lfZGhfZGF0YTsKQEAgLTMwMyw3ICszMzEsOCBAQAogCWtmcmVlKGN0bHIpOwogfQogCi1zdGF0aWMgc3RydWN0IHJkYWNfY29udHJvbGxlciAqZ2V0X2NvbnRyb2xsZXIodTggKnN1YnN5c19pZCwgdTggKnNsb3RfaWQpCitzdGF0aWMgc3RydWN0IHJkYWNfY29udHJvbGxlciAqZ2V0X2NvbnRyb2xsZXIodTggKnN1YnN5c19pZCwgdTggKnNsb3RfaWQsCisJCQkJCQljaGFyICphcnJheV9uYW1lKQogewogCXN0cnVjdCByZGFjX2NvbnRyb2xsZXIgKmN0bHIsICp0bXA7CiAKQEAgLTMyNCw2ICszNTMsMTQgQEAKIAkvKiBpbml0aWFsaXplIGZpZWxkcyBvZiBjb250cm9sbGVyICovCiAJbWVtY3B5KGN0bHItPnN1YnN5c19pZCwgc3Vic3lzX2lkLCBTVUJTWVNfSURfTEVOKTsKIAltZW1jcHkoY3Rsci0+c2xvdF9pZCwgc2xvdF9pZCwgU0xPVF9JRF9MRU4pOworCW1lbWNweShjdGxyLT5hcnJheV9uYW1lLCBhcnJheV9uYW1lLCBBUlJBWV9MQUJFTF9MRU4pOworCisJLyogdXBkYXRlIHRoZSBjb250cm9sbGVyIGluZGV4ICovCisJaWYgKHNsb3RfaWRbMV0gPT0gMHgzMSkKKwkJY3Rsci0+aW5kZXggPSAwOworCWVsc2UKKwkJY3Rsci0+aW5kZXggPSAxOworCiAJa3JlZl9pbml0KCZjdGxyLT5rcmVmKTsKIAljdGxyLT51c2VfbXMxMCA9IC0xOwogCWxpc3RfYWRkKCZjdGxyLT5ub2RlLCAmY3Rscl9saXN0KTsKQEAgLTM2Myw5ICs0MDAsMTAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGdldF9sdW4oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgcmRhY19kaF9kYXRhICpoKQorc3RhdGljIGludCBnZXRfbHVuX2luZm8oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgcmRhY19kaF9kYXRhICpoLAorCQkJY2hhciAqYXJyYXlfbmFtZSkKIHsKLQlpbnQgZXJyOworCWludCBlcnIsIGk7CiAJc3RydWN0IGM4X2lucXVpcnkgKmlucXA7CiAKIAllcnIgPSBzdWJtaXRfaW5xdWlyeShzZGV2LCAweEM4LCBzaXplb2Yoc3RydWN0IGM4X2lucXVpcnkpLCBoKTsKQEAgLTM3Nyw2ICs0MTUsMTEgQEAKIAkJICAgIGlucXAtPnBhZ2VfaWRbMl0gIT0gJ2knIHx8IGlucXAtPnBhZ2VfaWRbM10gIT0gJ2QnKQogCQkJcmV0dXJuIFNDU0lfREhfTk9TWVM7CiAJCWgtPmx1biA9IGlucXAtPmx1bls3XTsgLyogVXNlcyBvbmx5IHRoZSBsYXN0IGJ5dGUgKi8KKworCQlmb3IoaT0wOyBpPEFSUkFZX0xBQkVMX0xFTi0xOyArK2kpCisJCQkqKGFycmF5X25hbWUraSkgPSBpbnFwLT5hcnJheV91c2VyX2xhYmVsWygyKmkpKzFdOworCisJCSooYXJyYXlfbmFtZStBUlJBWV9MQUJFTF9MRU4tMSkgPSAnXDAnOwogCX0KIAlyZXR1cm4gZXJyOwogfQpAQCAtNDEwLDcgKzQ1Myw3IEBACiB9CiAKIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZV9jb250cm9sbGVyKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKLQkJCQkgc3RydWN0IHJkYWNfZGhfZGF0YSAqaCkKKwkJCQkgc3RydWN0IHJkYWNfZGhfZGF0YSAqaCwgY2hhciAqYXJyYXlfbmFtZSkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBjNF9pbnF1aXJ5ICppbnFwOwpAQCAtNDE4LDcgKzQ2MSw4IEBACiAJZXJyID0gc3VibWl0X2lucXVpcnkoc2RldiwgMHhDNCwgc2l6ZW9mKHN0cnVjdCBjNF9pbnF1aXJ5KSwgaCk7CiAJaWYgKGVyciA9PSBTQ1NJX0RIX09LKSB7CiAJCWlucXAgPSAmaC0+aW5xLmM0OwotCQloLT5jdGxyID0gZ2V0X2NvbnRyb2xsZXIoaW5xcC0+c3Vic3lzX2lkLCBpbnFwLT5zbG90X2lkKTsKKwkJaC0+Y3RsciA9IGdldF9jb250cm9sbGVyKGlucXAtPnN1YnN5c19pZCwgaW5xcC0+c2xvdF9pZCwKKwkJCQkJYXJyYXlfbmFtZSk7CiAJCWlmICghaC0+Y3RscikKIAkJCWVyciA9IFNDU0lfREhfUkVTX1RFTVBfVU5BVkFJTDsKIAl9CkBAIC00NTAsNiArNDk0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc2Vuc2VfaGRyOwogCWludCBlcnIgPSBTQ1NJX0RIX0lPLCByZXQ7CisJc3RydWN0IHJkYWNfZGhfZGF0YSAqaCA9IGdldF9yZGFjX2RhdGEoc2Rldik7CiAKIAlyZXQgPSBzY3NpX25vcm1hbGl6ZV9zZW5zZShzZW5zZWJ1ZiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCAmc2Vuc2VfaGRyKTsKIAlpZiAoIXJldCkKQEAgLTQ3OCwxMSArNTIzLDE0IEBACiAJCQllcnIgPSBTQ1NJX0RIX1JFVFJZOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsCi0JCQkgICAgIk1PREVfU0VMRUNUIGZhaWxlZCB3aXRoIHNlbnNlICUwMngvJTAyeC8lMDJ4LlxuIiwKLQkJCSAgICBzZW5zZV9oZHIuc2Vuc2Vfa2V5LCBzZW5zZV9oZHIuYXNjLCBzZW5zZV9oZHIuYXNjcSk7CisJCWJyZWFrOwogCX0KIAorCVJEQUNfTE9HKFJEQUNfTE9HX0ZBSUxPVkVSLCBzZGV2LCAiYXJyYXkgJXMsIGN0bHIgJWQsICIKKwkJIk1PREVfU0VMRUNUIHJldHVybmVkIHdpdGggc2Vuc2UgJTAyeC8lMDJ4LyUwMngiLAorCQkoY2hhciAqKSBoLT5jdGxyLT5hcnJheV9uYW1lLCBoLT5jdGxyLT5pbmRleCwKKwkJc2Vuc2VfaGRyLnNlbnNlX2tleSwgc2Vuc2VfaGRyLmFzYywgc2Vuc2VfaGRyLmFzY3EpOworCiBkb25lOgogCXJldHVybiBlcnI7CiB9CkBAIC00OTksNyArNTQ3LDkgQEAKIAlpZiAoIXJxKQogCQlnb3RvIGRvbmU7CiAKLQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICIlcyBNT0RFX1NFTEVDVCBjb21tYW5kLlxuIiwKKwlSREFDX0xPRyhSREFDX0xPR19GQUlMT1ZFUiwgc2RldiwgImFycmF5ICVzLCBjdGxyICVkLCAiCisJCSIlcyBNT0RFX1NFTEVDVCBjb21tYW5kIiwKKwkJKGNoYXIgKikgaC0+Y3Rsci0+YXJyYXlfbmFtZSwgaC0+Y3Rsci0+aW5kZXgsCiAJCShyZXRyeV9jbnQgPT0gUkRBQ19SRVRSWV9DT1VOVCkgPyAicXVldWVpbmciIDogInJldHJ5aW5nIik7CiAKIAllcnIgPSBibGtfZXhlY3V0ZV9ycShxLCBOVUxMLCBycSwgMSk7CkBAIC01MDksOCArNTU5LDEyIEBACiAJCWlmIChlcnIgPT0gU0NTSV9ESF9SRVRSWSAmJiByZXRyeV9jbnQtLSkKIAkJCWdvdG8gcmV0cnk7CiAJfQotCWlmIChlcnIgPT0gU0NTSV9ESF9PSykKKwlpZiAoZXJyID09IFNDU0lfREhfT0spIHsKIAkJaC0+c3RhdGUgPSBSREFDX1NUQVRFX0FDVElWRTsKKwkJUkRBQ19MT0coUkRBQ19MT0dfRkFJTE9WRVIsIHNkZXYsICJhcnJheSAlcywgY3RsciAlZCwgIgorCQkJCSJNT0RFX1NFTEVDVCBjb21wbGV0ZWQiLAorCQkJCShjaGFyICopIGgtPmN0bHItPmFycmF5X25hbWUsIGgtPmN0bHItPmluZGV4KTsKKwl9CiAKIGRvbmU6CiAJcmV0dXJuIGVycjsKQEAgLTUyNSwxNyArNTc5LDYgQEAKIAlpZiAoZXJyICE9IFNDU0lfREhfT0spCiAJCWdvdG8gZG9uZTsKIAotCWlmICghaC0+Y3RscikgewotCQllcnIgPSBpbml0aWFsaXplX2NvbnRyb2xsZXIoc2RldiwgaCk7Ci0JCWlmIChlcnIgIT0gU0NTSV9ESF9PSykKLQkJCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAoaC0+Y3Rsci0+dXNlX21zMTAgPT0gLTEpIHsKLQkJZXJyID0gc2V0X21vZGVfc2VsZWN0KHNkZXYsIGgpOwotCQlpZiAoZXJyICE9IFNDU0lfREhfT0spCi0JCQlnb3RvIGRvbmU7Ci0JfQogCWlmIChoLT5sdW5fc3RhdGUgPT0gUkRBQ19MVU5fVU5PV05FRCkKIAkJZXJyID0gc2VuZF9tb2RlX3NlbGVjdChzZGV2LCBoKTsKIGRvbmU6CkBAIC01NTksNiArNjAyLDEyIEBACiAJCQkJc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzZW5zZV9oZHIpCiB7CiAJc3RydWN0IHJkYWNfZGhfZGF0YSAqaCA9IGdldF9yZGFjX2RhdGEoc2Rldik7CisKKwlSREFDX0xPRyhSREFDX0xPR19TRU5TRSwgc2RldiwgImFycmF5ICVzLCBjdGxyICVkLCAiCisJCQkiSS9PIHJldHVybmVkIHdpdGggc2Vuc2UgJTAyeC8lMDJ4LyUwMngiLAorCQkJKGNoYXIgKikgaC0+Y3Rsci0+YXJyYXlfbmFtZSwgaC0+Y3Rsci0+aW5kZXgsCisJCQlzZW5zZV9oZHItPnNlbnNlX2tleSwgc2Vuc2VfaGRyLT5hc2MsIHNlbnNlX2hkci0+YXNjcSk7CisKIAlzd2l0Y2ggKHNlbnNlX2hkci0+c2Vuc2Vfa2V5KSB7CiAJY2FzZSBOT1RfUkVBRFk6CiAJCWlmIChzZW5zZV9oZHItPmFzYyA9PSAweDA0ICYmIHNlbnNlX2hkci0+YXNjcSA9PSAweDAxKQpAQCAtNjI4LDExICs2NzcsMTggQEAKIAl7IlNHSSIsICJJUyJ9LAogCXsiU1RLIiwgIk9QRU5zdG9yYWdlIEQyODAifSwKIAl7IlNVTiIsICJDU00yMDBfUiJ9LAorCXsiU1VOIiwgIkxDU00xMDBfSSJ9LAorCXsiU1VOIiwgIkxDU00xMDBfUyJ9LAorCXsiU1VOIiwgIkxDU00xMDBfRSJ9LAogCXsiU1VOIiwgIkxDU00xMDBfRiJ9LAogCXsiREVMTCIsICJNRDMwMDAifSwKIAl7IkRFTEwiLCAiTUQzMDAwaSJ9LAorCXsiREVMTCIsICJNRDMyeHgifSwKKwl7IkRFTEwiLCAiTUQzMnh4aSJ9LAogCXsiTFNJIiwgIklORi0wMS0wMCJ9LAogCXsiRU5HRU5JTyIsICJJTkYtMDEtMDAifSwKKwl7IlNUSyIsICJGTEVYTElORSAzODAifSwKKwl7IlNVTiIsICJDU00xMDBfUl9GQyJ9LAogCXtOVUxMLCBOVUxMfSwKIH07CiAKQEAgLTY1Niw2ICs3MTIsNyBAQAogCXN0cnVjdCByZGFjX2RoX2RhdGEgKmg7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOworCWNoYXIgYXJyYXlfbmFtZVtBUlJBWV9MQUJFTF9MRU5dOwogCiAJc2NzaV9kaF9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNjc2lfZGV2aWNlX2hhbmRsZXIgKikKIAkJCSAgICAgICArIHNpemVvZigqaCkgLCBHRlBfS0VSTkVMKTsKQEAgLTY3MCwxNiArNzI3LDI0IEBACiAJaC0+bHVuID0gVU5JTklUSUFMSVpFRF9MVU47CiAJaC0+c3RhdGUgPSBSREFDX1NUQVRFX0FDVElWRTsKIAotCWVyciA9IGdldF9sdW4oc2RldiwgaCk7CisJZXJyID0gZ2V0X2x1bl9pbmZvKHNkZXYsIGgsIGFycmF5X25hbWUpOworCWlmIChlcnIgIT0gU0NTSV9ESF9PSykKKwkJZ290byBmYWlsZWQ7CisKKwllcnIgPSBpbml0aWFsaXplX2NvbnRyb2xsZXIoc2RldiwgaCwgYXJyYXlfbmFtZSk7CiAJaWYgKGVyciAhPSBTQ1NJX0RIX09LKQogCQlnb3RvIGZhaWxlZDsKIAogCWVyciA9IGNoZWNrX293bmVyc2hpcChzZGV2LCBoKTsKIAlpZiAoZXJyICE9IFNDU0lfREhfT0spCi0JCWdvdG8gZmFpbGVkOworCQlnb3RvIGNsZWFuX2N0bHI7CisKKwllcnIgPSBzZXRfbW9kZV9zZWxlY3Qoc2RldiwgaCk7CisJaWYgKGVyciAhPSBTQ1NJX0RIX09LKQorCQlnb3RvIGNsZWFuX2N0bHI7CiAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKLQkJZ290byBmYWlsZWQ7CisJCWdvdG8gY2xlYW5fY3RscjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAlzZGV2LT5zY3NpX2RoX2RhdGEgPSBzY3NpX2RoX2RhdGE7CkBAIC02OTEsNiArNzU2LDkgQEAKIAogCXJldHVybiAwOwogCitjbGVhbl9jdGxyOgorCWtyZWZfcHV0KCZoLT5jdGxyLT5rcmVmLCByZWxlYXNlX2NvbnRyb2xsZXIpOworCiBmYWlsZWQ6CiAJa2ZyZWUoc2NzaV9kaF9kYXRhKTsKIAlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwgIiVzOiBub3QgYXR0YWNoZWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKaW5kZXggMGE1NjA5Yi4uNzA0YjhlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC00OSw5ICs0OSwyMCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJGQ29FIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiAKKy8qIFBlcmZvcm1hbmNlIHR1bmluZyBwYXJhbWV0ZXJzIGZvciBmY29lICovCitzdGF0aWMgdW5zaWduZWQgaW50IGZjb2VfZGRwX21pbjsKK21vZHVsZV9wYXJhbV9uYW1lZChkZHBfbWluLCBmY29lX2RkcF9taW4sIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGRwX21pbiwgIk1pbmltdW0gSS9PIHNpemUgaW4gYnl0ZXMgZm9yICIJXAorCQkgIkRpcmVjdCBEYXRhIFBsYWNlbWVudCAoRERQKS4iKTsKKworREVGSU5FX01VVEVYKGZjb2VfY29uZmlnX211dGV4KTsKKworLyogZmNvZV9wZXJjcHVfY2xlYW4gY29tcGxldGlvbi4gIFdhaXRlciBwcm90ZWN0ZWQgYnkgZmNvZV9jcmVhdGVfbXV0ZXggKi8KK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oZmNvZV9mbHVzaF9jb21wbGV0aW9uKTsKKwogLyogZmNvZSBob3N0IGxpc3QgKi8KKy8qIG11c3Qgb25seSBieSBhY2Nlc3NlZCB1bmRlciB0aGUgUlROTCBtdXRleCAqLwogTElTVF9IRUFEKGZjb2VfaG9zdGxpc3QpOwotREVGSU5FX1JXTE9DSyhmY29lX2hvc3RsaXN0X2xvY2spOwogREVGSU5FX1BFUl9DUFUoc3RydWN0IGZjb2VfcGVyY3B1X3MsIGZjb2VfcGVyY3B1KTsKIAogLyogRnVuY3Rpb24gUHJvdG90eXBlcyAqLwpAQCAtNjYsMTIgKzc3LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZmNfbHBvcnQgKmZjb2VfaG9zdGxpc3RfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBmY29lX2hvc3RsaXN0X2FkZChjb25zdCBzdHJ1Y3QgZmNfbHBvcnQgKik7Ci1zdGF0aWMgaW50IGZjb2VfaG9zdGxpc3RfcmVtb3ZlKGNvbnN0IHN0cnVjdCBmY19scG9ydCAqKTsKIAogc3RhdGljIHZvaWQgZmNvZV9jaGVja193YWl0X3F1ZXVlKHN0cnVjdCBmY19scG9ydCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIHN0YXRpYyBpbnQgZmNvZV9kZXZpY2Vfbm90aWZpY2F0aW9uKHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bG9uZywgdm9pZCAqKTsKIHN0YXRpYyB2b2lkIGZjb2VfZGV2X3NldHVwKHZvaWQpOwogc3RhdGljIHZvaWQgZmNvZV9kZXZfY2xlYW51cCh2b2lkKTsKK3N0YXRpYyBzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKgorCWZjb2VfaG9zdGxpc3RfbG9va3VwX3BvcnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBmcm9tIG5ldCBkZXZpY2UgKi8KIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmNvZV9ub3RpZmllciA9IHsKQEAgLTEzMiw2ICsxNDQsMTgwIEBACiAJLm1heF9zZWN0b3JzID0gMHhmZmZmLAogfTsKIAorc3RhdGljIGludCBmY29lX2ZpcF9yZWN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IHBhY2tldF90eXBlICpwdHlwZSwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOworLyoqCisgKiBmY29lX2ludGVyZmFjZV9zZXR1cCgpCisgKiBAZmNvZTogbmV3IGZjb2VfaW50ZXJmYWNlCisgKiBAbmV0ZGV2IDogcHRyIHRvIHRoZSBhc3NvY2lhdGVkIG5ldGRldmljZSBzdHJ1Y3QKKyAqCisgKiBSZXR1cm5zIDogMCBmb3Igc3VjY2VzcworICogTG9ja2luZzogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgUlROTCBtdXRleCBoZWxkCisgKi8KK3N0YXRpYyBpbnQgZmNvZV9pbnRlcmZhY2Vfc2V0dXAoc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lLAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGZjb2VfY3RsciAqZmlwID0gJmZjb2UtPmN0bHI7CisJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKKwl1OCBmbG9naV9tYWRkcltFVEhfQUxFTl07CisKKwlmY29lLT5uZXRkZXYgPSBuZXRkZXY7CisKKwkvKiBEbyBub3Qgc3VwcG9ydCBmb3IgYm9uZGluZyBkZXZpY2UgKi8KKwlpZiAoKG5ldGRldi0+cHJpdl9mbGFncyAmIElGRl9NQVNURVJfQUxCKSB8fAorCSAgICAobmV0ZGV2LT5wcml2X2ZsYWdzICYgSUZGX1NMQVZFX0lOQUNUSVZFKSB8fAorCSAgICAobmV0ZGV2LT5wcml2X2ZsYWdzICYgSUZGX01BU1RFUl84MDIzQUQpKSB7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwkvKiBsb29rIGZvciBTQU4gTUFDIGFkZHJlc3MsIGlmIG11bHRpcGxlIFNBTiBNQUNzIGV4aXN0LCBvbmx5CisJICogdXNlIHRoZSBmaXJzdCBvbmUgZm9yIFNQTUEgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJZm9yX2VhY2hfZGV2X2FkZHIobmV0ZGV2LCBoYSkgeworCQlpZiAoKGhhLT50eXBlID09IE5FVERFVl9IV19BRERSX1RfU0FOKSAmJgorCQkgICAgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZmlwLT5jdGxfc3JjX2FkZHIpKSkgeworCQkJbWVtY3B5KGZpcC0+Y3RsX3NyY19hZGRyLCBoYS0+YWRkciwgRVRIX0FMRU4pOworCQkJZmlwLT5zcG1hID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJLyogc2V0dXAgU291cmNlIE1hYyBBZGRyZXNzICovCisJaWYgKCFmaXAtPnNwbWEpCisJCW1lbWNweShmaXAtPmN0bF9zcmNfYWRkciwgbmV0ZGV2LT5kZXZfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CisKKwkvKgorCSAqIEFkZCBGQ29FIE1BQyBhZGRyZXNzIGFzIHNlY29uZCB1bmljYXN0IE1BQyBhZGRyZXNzCisJICogb3IgZW50ZXIgcHJvbWlzY3VvdXMgbW9kZSBpZiBub3QgY2FwYWJsZSBvZiBsaXN0ZW5pbmcKKwkgKiBmb3IgbXVsdGlwbGUgdW5pY2FzdCBNQUNzLgorCSAqLworCW1lbWNweShmbG9naV9tYWRkciwgKHU4WzZdKSBGQ19GQ09FX0ZMT0dJX01BQywgRVRIX0FMRU4pOworCWRldl91bmljYXN0X2FkZChuZXRkZXYsIGZsb2dpX21hZGRyKTsKKwlpZiAoZmlwLT5zcG1hKQorCQlkZXZfdW5pY2FzdF9hZGQobmV0ZGV2LCBmaXAtPmN0bF9zcmNfYWRkcik7CisJZGV2X21jX2FkZChuZXRkZXYsIEZJUF9BTExfRU5PREVfTUFDUywgRVRIX0FMRU4sIDApOworCisJLyoKKwkgKiBzZXR1cCB0aGUgcmVjZWl2ZSBmdW5jdGlvbiBmcm9tIGV0aGVybmV0IGRyaXZlcgorCSAqIG9uIHRoZSBldGhlcnR5cGUgZm9yIHRoZSBnaXZlbiBkZXZpY2UKKwkgKi8KKwlmY29lLT5mY29lX3BhY2tldF90eXBlLmZ1bmMgPSBmY29lX3JjdjsKKwlmY29lLT5mY29lX3BhY2tldF90eXBlLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0ZDT0UpOworCWZjb2UtPmZjb2VfcGFja2V0X3R5cGUuZGV2ID0gbmV0ZGV2OworCWRldl9hZGRfcGFjaygmZmNvZS0+ZmNvZV9wYWNrZXRfdHlwZSk7CisKKwlmY29lLT5maXBfcGFja2V0X3R5cGUuZnVuYyA9IGZjb2VfZmlwX3JlY3Y7CisJZmNvZS0+ZmlwX3BhY2tldF90eXBlLnR5cGUgPSBodG9ucyhFVEhfUF9GSVApOworCWZjb2UtPmZpcF9wYWNrZXRfdHlwZS5kZXYgPSBuZXRkZXY7CisJZGV2X2FkZF9wYWNrKCZmY29lLT5maXBfcGFja2V0X3R5cGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZjb2VfZmlwX3NlbmQoc3RydWN0IGZjb2VfY3RsciAqZmlwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyB2b2lkIGZjb2VfdXBkYXRlX3NyY19tYWMoc3RydWN0IGZjb2VfY3RsciAqZmlwLCB1OCAqb2xkLCB1OCAqbmV3KTsKK3N0YXRpYyB2b2lkIGZjb2VfZGVzdHJveV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKKy8qKgorICogZmNvZV9pbnRlcmZhY2VfY3JlYXRlKCkKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlCisgKgorICogUmV0dXJuczogcG9pbnRlciB0byBhIHN0cnVjdCBmY29lX2ludGVyZmFjZSBvciBOVUxMIG9uIGVycm9yCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2VfaW50ZXJmYWNlX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKKworCWZjb2UgPSBremFsbG9jKHNpemVvZigqZmNvZSksIEdGUF9LRVJORUwpOworCWlmICghZmNvZSkgeworCQlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIGZjb2Ugc3RydWN0dXJlXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZGV2X2hvbGQobmV0ZGV2KTsKKwlrcmVmX2luaXQoJmZjb2UtPmtyZWYpOworCisJLyoKKwkgKiBJbml0aWFsaXplIEZJUC4KKwkgKi8KKwlmY29lX2N0bHJfaW5pdCgmZmNvZS0+Y3Rscik7CisJZmNvZS0+Y3Rsci5zZW5kID0gZmNvZV9maXBfc2VuZDsKKwlmY29lLT5jdGxyLnVwZGF0ZV9tYWMgPSBmY29lX3VwZGF0ZV9zcmNfbWFjOworCisJZmNvZV9pbnRlcmZhY2Vfc2V0dXAoZmNvZSwgbmV0ZGV2KTsKKworCXJldHVybiBmY29lOworfQorCisvKioKKyAqIGZjb2VfaW50ZXJmYWNlX2NsZWFudXAoKSAtIGNsZWFuIHVwIG5ldGRldiBjb25maWd1cmF0aW9ucworICogQGZjb2U6CisgKgorICogQ2FsbGVyIG11c3QgYmUgaG9sZGluZyB0aGUgUlROTCBtdXRleAorICovCit2b2lkIGZjb2VfaW50ZXJmYWNlX2NsZWFudXAoc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBmY29lLT5uZXRkZXY7CisJc3RydWN0IGZjb2VfY3RsciAqZmlwID0gJmZjb2UtPmN0bHI7CisJdTggZmxvZ2lfbWFkZHJbRVRIX0FMRU5dOworCisJLyoKKwkgKiBEb24ndCBsaXN0ZW4gZm9yIEV0aGVybmV0IHBhY2tldHMgYW55bW9yZS4KKwkgKiBzeW5jaHJvbml6ZV9uZXQoKSBlbnN1cmVzIHRoYXQgdGhlIHBhY2tldCBoYW5kbGVycyBhcmUgbm90IHJ1bm5pbmcKKwkgKiBvbiBhbm90aGVyIENQVS4gZGV2X3JlbW92ZV9wYWNrKCkgd291bGQgZG8gdGhhdCwgdGhpcyBjYWxscyB0aGUKKwkgKiB1bnN5bmNyb25pemVkIHZlcnNpb24gX19kZXZfcmVtb3ZlX3BhY2soKSB0byBhdm9pZCBtdWx0aXBsZSBkZWxheXMuCisJICovCisJX19kZXZfcmVtb3ZlX3BhY2soJmZjb2UtPmZjb2VfcGFja2V0X3R5cGUpOworCV9fZGV2X3JlbW92ZV9wYWNrKCZmY29lLT5maXBfcGFja2V0X3R5cGUpOworCXN5bmNocm9uaXplX25ldCgpOworCisJLyogRGVsZXRlIHNlY29uZGFyeSBNQUMgYWRkcmVzc2VzICovCisJbWVtY3B5KGZsb2dpX21hZGRyLCAodThbNl0pIEZDX0ZDT0VfRkxPR0lfTUFDLCBFVEhfQUxFTik7CisJZGV2X3VuaWNhc3RfZGVsZXRlKG5ldGRldiwgZmxvZ2lfbWFkZHIpOworCWlmICghaXNfemVyb19ldGhlcl9hZGRyKGZpcC0+ZGF0YV9zcmNfYWRkcikpCisJCWRldl91bmljYXN0X2RlbGV0ZShuZXRkZXYsIGZpcC0+ZGF0YV9zcmNfYWRkcik7CisJaWYgKGZpcC0+c3BtYSkKKwkJZGV2X3VuaWNhc3RfZGVsZXRlKG5ldGRldiwgZmlwLT5jdGxfc3JjX2FkZHIpOworCWRldl9tY19kZWxldGUobmV0ZGV2LCBGSVBfQUxMX0VOT0RFX01BQ1MsIEVUSF9BTEVOLCAwKTsKK30KKworLyoqCisgKiBmY29lX2ludGVyZmFjZV9yZWxlYXNlKCkgLSBmY29lX3BvcnQga3JlZiByZWxlYXNlIGZ1bmN0aW9uCisgKiBAa3JlZjogZW1iZWRkZWQgcmVmZXJlbmNlIGNvdW50IGluIGFuIGZjb2VfaW50ZXJmYWNlIHN0cnVjdAorICovCitzdGF0aWMgdm9pZCBmY29lX2ludGVyZmFjZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCisJZmNvZSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UsIGtyZWYpOworCW5ldGRldiA9IGZjb2UtPm5ldGRldjsKKwkvKiB0ZWFyLWRvd24gdGhlIEZDb0UgY29udHJvbGxlciAqLworCWZjb2VfY3Rscl9kZXN0cm95KCZmY29lLT5jdGxyKTsKKwlrZnJlZShmY29lKTsKKwlkZXZfcHV0KG5ldGRldik7Cit9CisKKy8qKgorICogZmNvZV9pbnRlcmZhY2VfZ2V0KCkKKyAqIEBmY29lOgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmNvZV9pbnRlcmZhY2VfZ2V0KHN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZSkKK3sKKwlrcmVmX2dldCgmZmNvZS0+a3JlZik7Cit9CisKKy8qKgorICogZmNvZV9pbnRlcmZhY2VfcHV0KCkKKyAqIEBmY29lOgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmNvZV9pbnRlcmZhY2VfcHV0KHN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZSkKK3sKKwlrcmVmX3B1dCgmZmNvZS0+a3JlZiwgZmNvZV9pbnRlcmZhY2VfcmVsZWFzZSk7Cit9CisKIC8qKgogICogZmNvZV9maXBfcmVjdiAtIGhhbmRsZSBhIHJlY2VpdmVkIEZJUCBmcmFtZS4KICAqIEBza2I6IHRoZSByZWNlaXZlIHNrYgpAQCAtMTQ1LDEwICszMzEsMTAgQEAKIAkJCSBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLAogCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7CisJc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lOwogCi0JZmMgPSBjb250YWluZXJfb2YocHR5cGUsIHN0cnVjdCBmY29lX3NvZnRjLCBmaXBfcGFja2V0X3R5cGUpOwotCWZjb2VfY3Rscl9yZWN2KCZmYy0+Y3Rsciwgc2tiKTsKKwlmY29lID0gY29udGFpbmVyX29mKHB0eXBlLCBzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UsIGZpcF9wYWNrZXRfdHlwZSk7CisJZmNvZV9jdGxyX3JlY3YoJmZjb2UtPmN0bHIsIHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1OSw3ICszNDUsNyBAQAogICovCiBzdGF0aWMgdm9pZCBmY29lX2ZpcF9zZW5kKHN0cnVjdCBmY29lX2N0bHIgKmZpcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlza2ItPmRldiA9IGZjb2VfZnJvbV9jdGxyKGZpcCktPnJlYWxfZGV2OworCXNrYi0+ZGV2ID0gZmNvZV9mcm9tX2N0bHIoZmlwKS0+bmV0ZGV2OwogCWRldl9xdWV1ZV94bWl0KHNrYik7CiB9CiAKQEAgLTE3NCwxMyArMzYwLDEzIEBACiAgKi8KIHN0YXRpYyB2b2lkIGZjb2VfdXBkYXRlX3NyY19tYWMoc3RydWN0IGZjb2VfY3RsciAqZmlwLCB1OCAqb2xkLCB1OCAqbmV3KQogewotCXN0cnVjdCBmY29lX3NvZnRjICpmYzsKKwlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2U7CiAKLQlmYyA9IGZjb2VfZnJvbV9jdGxyKGZpcCk7CisJZmNvZSA9IGZjb2VfZnJvbV9jdGxyKGZpcCk7CiAJcnRubF9sb2NrKCk7CiAJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIob2xkKSkKLQkJZGV2X3VuaWNhc3RfZGVsZXRlKGZjLT5yZWFsX2Rldiwgb2xkKTsKLQlkZXZfdW5pY2FzdF9hZGQoZmMtPnJlYWxfZGV2LCBuZXcpOworCQlkZXZfdW5pY2FzdF9kZWxldGUoZmNvZS0+bmV0ZGV2LCBvbGQpOworCWRldl91bmljYXN0X2FkZChmY29lLT5uZXRkZXYsIG5ldyk7CiAJcnRubF91bmxvY2soKTsKIH0KIApAQCAtMjE3LDMwICs0MDMsNiBAQAogfQogCiAvKioKLSAqIGZjb2VfbmV0ZGV2X2NsZWFudXAoKSAtIGNsZWFuIHVwIG5ldGRldiBjb25maWd1cmF0aW9ucwotICogQGZjOiBwdHIgdG8gdGhlIGZjb2Vfc29mdGMKLSAqLwotdm9pZCBmY29lX25ldGRldl9jbGVhbnVwKHN0cnVjdCBmY29lX3NvZnRjICpmYykKLXsKLQl1OCBmbG9naV9tYWRkcltFVEhfQUxFTl07Ci0KLQkvKiBEb24ndCBsaXN0ZW4gZm9yIEV0aGVybmV0IHBhY2tldHMgYW55bW9yZSAqLwotCWRldl9yZW1vdmVfcGFjaygmZmMtPmZjb2VfcGFja2V0X3R5cGUpOwotCWRldl9yZW1vdmVfcGFjaygmZmMtPmZpcF9wYWNrZXRfdHlwZSk7Ci0KLQkvKiBEZWxldGUgc2Vjb25kYXJ5IE1BQyBhZGRyZXNzZXMgKi8KLQlydG5sX2xvY2soKTsKLQltZW1jcHkoZmxvZ2lfbWFkZHIsICh1OFs2XSkgRkNfRkNPRV9GTE9HSV9NQUMsIEVUSF9BTEVOKTsKLQlkZXZfdW5pY2FzdF9kZWxldGUoZmMtPnJlYWxfZGV2LCBmbG9naV9tYWRkcik7Ci0JaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIoZmMtPmN0bHIuZGF0YV9zcmNfYWRkcikpCi0JCWRldl91bmljYXN0X2RlbGV0ZShmYy0+cmVhbF9kZXYsIGZjLT5jdGxyLmRhdGFfc3JjX2FkZHIpOwotCWlmIChmYy0+Y3Rsci5zcG1hKQotCQlkZXZfdW5pY2FzdF9kZWxldGUoZmMtPnJlYWxfZGV2LCBmYy0+Y3Rsci5jdGxfc3JjX2FkZHIpOwotCWRldl9tY19kZWxldGUoZmMtPnJlYWxfZGV2LCBGSVBfQUxMX0VOT0RFX01BQ1MsIEVUSF9BTEVOLCAwKTsKLQlydG5sX3VubG9jaygpOwotfQotCi0vKioKICAqIGZjb2VfcXVldWVfdGltZXIoKSAtIGZjb2UgcXVldWUgdGltZXIKICAqIEBscDogdGhlIGZjX2xwb3J0IHBvaW50ZXIKICAqCkBAIC0yNjUsMTE2ICs0MjcsNTMgQEAKIHsKIAl1MzIgbWZzOwogCXU2NCB3d25uLCB3d3BuOwotCXN0cnVjdCBmY29lX3NvZnRjICpmYzsKLQl1OCBmbG9naV9tYWRkcltFVEhfQUxFTl07Ci0Jc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKKwlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2U7CisJc3RydWN0IGZjb2VfcG9ydCAqcG9ydDsKIAogCS8qIFNldHVwIGxwb3J0IHByaXZhdGUgZGF0YSB0byBwb2ludCB0byBmY29lIHNvZnRjICovCi0JZmMgPSBscG9ydF9wcml2KGxwKTsKLQlmYy0+Y3Rsci5scCA9IGxwOwotCWZjLT5yZWFsX2RldiA9IG5ldGRldjsKLQlmYy0+cGh5c19kZXYgPSBuZXRkZXY7Ci0KLQkvKiBSZXF1aXJlIHN1cHBvcnQgZm9yIGdldF9wYXVzZXBhcmFtIGV0aHRvb2wgb3AuICovCi0JaWYgKG5ldGRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikKLQkJZmMtPnBoeXNfZGV2ID0gdmxhbl9kZXZfcmVhbF9kZXYobmV0ZGV2KTsKLQotCS8qIERvIG5vdCBzdXBwb3J0IGZvciBib25kaW5nIGRldmljZSAqLwotCWlmICgoZmMtPnJlYWxfZGV2LT5wcml2X2ZsYWdzICYgSUZGX01BU1RFUl9BTEIpIHx8Ci0JICAgIChmYy0+cmVhbF9kZXYtPnByaXZfZmxhZ3MgJiBJRkZfU0xBVkVfSU5BQ1RJVkUpIHx8Ci0JICAgIChmYy0+cmVhbF9kZXYtPnByaXZfZmxhZ3MgJiBJRkZfTUFTVEVSXzgwMjNBRCkpIHsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KKwlwb3J0ID0gbHBvcnRfcHJpdihscCk7CisJZmNvZSA9IHBvcnQtPmZjb2U7CiAKIAkvKgogCSAqIERldGVybWluZSBtYXggZnJhbWUgc2l6ZSBiYXNlZCBvbiB1bmRlcmx5aW5nIGRldmljZSBhbmQgb3B0aW9uYWwKIAkgKiB1c2VyLWNvbmZpZ3VyZWQgbGltaXQuICBJZiB0aGUgTUZTIGlzIHRvbyBsb3csIGZjb2VfbGlua19vaygpCiAJICogd2lsbCByZXR1cm4gMCwgc28gZG8gdGhpcyBmaXJzdC4KIAkgKi8KLQltZnMgPSBmYy0+cmVhbF9kZXYtPm10dSAtIChzaXplb2Yoc3RydWN0IGZjb2VfaGRyKSArCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBmY29lX2NyY19lb2YpKTsKKwltZnMgPSBuZXRkZXYtPm10dSAtIChzaXplb2Yoc3RydWN0IGZjb2VfaGRyKSArCisJCQkgICAgIHNpemVvZihzdHJ1Y3QgZmNvZV9jcmNfZW9mKSk7CiAJaWYgKGZjX3NldF9tZnMobHAsIG1mcykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogb2ZmbG9hZCBmZWF0dXJlcyBzdXBwb3J0ICovCi0JaWYgKGZjLT5yZWFsX2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKQorCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRykKIAkJbHAtPnNnX3N1cHAgPSAxOwogCi0jaWZkZWYgTkVUSUZfRl9GQ09FX0NSQwogCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9GQ09FX0NSQykgewogCQlscC0+Y3JjX29mZmxvYWQgPSAxOwogCQlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiU3VwcG9ydHMgRkNDUkMgb2ZmbG9hZFxuIik7CiAJfQotI2VuZGlmCi0jaWZkZWYgTkVUSUZfRl9GU08KIAlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfRlNPKSB7CiAJCWxwLT5zZXFfb2ZmbG9hZCA9IDE7CiAJCWxwLT5sc29fbWF4ID0gbmV0ZGV2LT5nc29fbWF4X3NpemU7CiAJCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJTdXBwb3J0cyBMU08gZm9yIG1heCBsZW4gMHgleFxuIiwKIAkJCQlscC0+bHNvX21heCk7CiAJfQotI2VuZGlmCiAJaWYgKG5ldGRldi0+ZmNvZV9kZHBfeGlkKSB7CiAJCWxwLT5scm9fZW5hYmxlZCA9IDE7CiAJCWxwLT5scm9feGlkID0gbmV0ZGV2LT5mY29lX2RkcF94aWQ7CiAJCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJTdXBwb3J0cyBMUk8gZm9yIG1heCB4aWQgMHgleFxuIiwKIAkJCQlscC0+bHJvX3hpZCk7CiAJfQotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUpOwotCWZjLT5mY29lX3BlbmRpbmdfcXVldWVfYWN0aXZlID0gMDsKLQlzZXR1cF90aW1lcigmZmMtPnRpbWVyLCBmY29lX3F1ZXVlX3RpbWVyLCAodW5zaWduZWQgbG9uZylscCk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlKTsKKwlwb3J0LT5mY29lX3BlbmRpbmdfcXVldWVfYWN0aXZlID0gMDsKKwlzZXR1cF90aW1lcigmcG9ydC0+dGltZXIsIGZjb2VfcXVldWVfdGltZXIsICh1bnNpZ25lZCBsb25nKWxwKTsKIAotCS8qIGxvb2sgZm9yIFNBTiBNQUMgYWRkcmVzcywgaWYgbXVsdGlwbGUgU0FOIE1BQ3MgZXhpc3QsIG9ubHkKLQkgKiB1c2UgdGhlIGZpcnN0IG9uZSBmb3IgU1BNQSAqLwotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9kZXZfYWRkcihuZXRkZXYsIGhhKSB7Ci0JCWlmICgoaGEtPnR5cGUgPT0gTkVUREVWX0hXX0FERFJfVF9TQU4pICYmCi0JCSAgICAoaXNfdmFsaWRfZXRoZXJfYWRkcihmYy0+Y3Rsci5jdGxfc3JjX2FkZHIpKSkgewotCQkJbWVtY3B5KGZjLT5jdGxyLmN0bF9zcmNfYWRkciwgaGEtPmFkZHIsIEVUSF9BTEVOKTsKLQkJCWZjLT5jdGxyLnNwbWEgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQkvKiBzZXR1cCBTb3VyY2UgTWFjIEFkZHJlc3MgKi8KLQlpZiAoIWZjLT5jdGxyLnNwbWEpCi0JCW1lbWNweShmYy0+Y3Rsci5jdGxfc3JjX2FkZHIsIGZjLT5yZWFsX2Rldi0+ZGV2X2FkZHIsCi0JCSAgICAgICBmYy0+cmVhbF9kZXYtPmFkZHJfbGVuKTsKLQotCXd3bm4gPSBmY29lX3d3bl9mcm9tX21hYyhmYy0+cmVhbF9kZXYtPmRldl9hZGRyLCAxLCAwKTsKKwl3d25uID0gZmNvZV93d25fZnJvbV9tYWMobmV0ZGV2LT5kZXZfYWRkciwgMSwgMCk7CiAJZmNfc2V0X3d3bm4obHAsIHd3bm4pOwogCS8qIFhYWCAtIDNyZCBhcmcgbmVlZHMgdG8gYmUgdmxhbiBpZCAqLwotCXd3cG4gPSBmY29lX3d3bl9mcm9tX21hYyhmYy0+cmVhbF9kZXYtPmRldl9hZGRyLCAyLCAwKTsKKwl3d3BuID0gZmNvZV93d25fZnJvbV9tYWMobmV0ZGV2LT5kZXZfYWRkciwgMiwgMCk7CiAJZmNfc2V0X3d3cG4obHAsIHd3cG4pOwogCi0JLyoKLQkgKiBBZGQgRkNvRSBNQUMgYWRkcmVzcyBhcyBzZWNvbmQgdW5pY2FzdCBNQUMgYWRkcmVzcwotCSAqIG9yIGVudGVyIHByb21pc2N1b3VzIG1vZGUgaWYgbm90IGNhcGFibGUgb2YgbGlzdGVuaW5nCi0JICogZm9yIG11bHRpcGxlIHVuaWNhc3QgTUFDcy4KLQkgKi8KLQlydG5sX2xvY2soKTsKLQltZW1jcHkoZmxvZ2lfbWFkZHIsICh1OFs2XSkgRkNfRkNPRV9GTE9HSV9NQUMsIEVUSF9BTEVOKTsKLQlkZXZfdW5pY2FzdF9hZGQoZmMtPnJlYWxfZGV2LCBmbG9naV9tYWRkcik7Ci0JaWYgKGZjLT5jdGxyLnNwbWEpCi0JCWRldl91bmljYXN0X2FkZChmYy0+cmVhbF9kZXYsIGZjLT5jdGxyLmN0bF9zcmNfYWRkcik7Ci0JZGV2X21jX2FkZChmYy0+cmVhbF9kZXYsIEZJUF9BTExfRU5PREVfTUFDUywgRVRIX0FMRU4sIDApOwotCXJ0bmxfdW5sb2NrKCk7Ci0KLQkvKgotCSAqIHNldHVwIHRoZSByZWNlaXZlIGZ1bmN0aW9uIGZyb20gZXRoZXJuZXQgZHJpdmVyCi0JICogb24gdGhlIGV0aGVydHlwZSBmb3IgdGhlIGdpdmVuIGRldmljZQotCSAqLwotCWZjLT5mY29lX3BhY2tldF90eXBlLmZ1bmMgPSBmY29lX3JjdjsKLQlmYy0+ZmNvZV9wYWNrZXRfdHlwZS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9GQ09FKTsKLQlmYy0+ZmNvZV9wYWNrZXRfdHlwZS5kZXYgPSBmYy0+cmVhbF9kZXY7Ci0JZGV2X2FkZF9wYWNrKCZmYy0+ZmNvZV9wYWNrZXRfdHlwZSk7Ci0KLQlmYy0+ZmlwX3BhY2tldF90eXBlLmZ1bmMgPSBmY29lX2ZpcF9yZWN2OwotCWZjLT5maXBfcGFja2V0X3R5cGUudHlwZSA9IGh0b25zKEVUSF9QX0ZJUCk7Ci0JZmMtPmZpcF9wYWNrZXRfdHlwZS5kZXYgPSBmYy0+cmVhbF9kZXY7Ci0JZGV2X2FkZF9wYWNrKCZmYy0+ZmlwX3BhY2tldF90eXBlKTsKLQogCXJldHVybiAwOwogfQogCkBAIC00MTUsODYgKzUxNCwxNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIGZjb2Vfb2VtX21hdGNoKCkgLSBtYXRjaCBmb3IgcmVhZCB0eXBlcyBJTworICogQGZwOiB0aGUgZmNfZnJhbWUgZm9yIG5ldyBJTy4KKyAqCisgKiBSZXR1cm5zIDogdHJ1ZSBmb3IgcmVhZCB0eXBlcyBJTywgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisgKi8KK2Jvb2wgZmNvZV9vZW1fbWF0Y2goc3RydWN0IGZjX2ZyYW1lICpmcCkKK3sKKwlyZXR1cm4gZmNfZmNwX2lzX3JlYWQoZnJfZnNwKGZwKSkgJiYKKwkJKGZyX2ZzcChmcCktPmRhdGFfbGVuID4gZmNvZV9kZHBfbWluKTsKK30KKwogLyoqCiAgKiBmY29lX2VtX2NvbmZpZygpIC0gYWxsb2NhdGVzIGVtIGZvciB0aGlzIGxwb3J0Ci0gKiBAbHA6IHRoZSBwb3J0IHRoYXQgZW0gaXMgdG8gYWxsb2NhdGVkIGZvcgorICogQGxwOiB0aGUgZmNvZSB0aGF0IGVtIGlzIHRvIGFsbG9jYXRlZCBmb3IKICAqCiAgKiBSZXR1cm5zIDogMCBvbiBzdWNjZXNzCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGZjb2VfZW1fY29uZmlnKHN0cnVjdCBmY19scG9ydCAqbHApCiB7Ci0JQlVHX09OKGxwLT5lbXApOworCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQgPSBscG9ydF9wcml2KGxwKTsKKwlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2UgPSBwb3J0LT5mY29lOworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqb2xkZmNvZSA9IE5VTEw7CisJc3RydWN0IG5ldF9kZXZpY2UgKm9sZF9yZWFsX2RldiwgKmN1cl9yZWFsX2RldjsKKwl1MTYgbWluX3hpZCA9IEZDT0VfTUlOX1hJRDsKKwl1MTYgbWF4X3hpZCA9IEZDT0VfTUFYX1hJRDsKIAotCWxwLT5lbXAgPSBmY19leGNoX21ncl9hbGxvYyhscCwgRkNfQ0xBU1NfMywKLQkJCQkgICAgRkNPRV9NSU5fWElELCBGQ09FX01BWF9YSUQpOwotCWlmICghbHAtPmVtcCkKKwkvKgorCSAqIENoZWNrIGlmIG5lZWQgdG8gYWxsb2NhdGUgYW4gZW0gaW5zdGFuY2UgZm9yCisJICogb2ZmbG9hZCBleGNoYW5nZSBpZHMgdG8gYmUgc2hhcmVkIGFjcm9zcyBhbGwgVk5fUE9SVHMvbHBvcnQuCisJICovCisJaWYgKCFscC0+bHJvX2VuYWJsZWQgfHwgIWxwLT5scm9feGlkIHx8IChscC0+bHJvX3hpZCA+PSBtYXhfeGlkKSkgeworCQlscC0+bHJvX3hpZCA9IDA7CisJCWdvdG8gc2tpcF9vZW07CisJfQorCisJLyoKKwkgKiBSZXVzZSBleGlzdGluZyBvZmZsb2FkIGVtIGluc3RhbmNlIGluIGNhc2UKKwkgKiBpdCBpcyBhbHJlYWR5IGFsbG9jYXRlZCBvbiByZWFsIGV0aCBkZXZpY2UKKwkgKi8KKwlpZiAoZmNvZS0+bmV0ZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKQorCQljdXJfcmVhbF9kZXYgPSB2bGFuX2Rldl9yZWFsX2RldihmY29lLT5uZXRkZXYpOworCWVsc2UKKwkJY3VyX3JlYWxfZGV2ID0gZmNvZS0+bmV0ZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShvbGRmY29lLCAmZmNvZV9ob3N0bGlzdCwgbGlzdCkgeworCQlpZiAob2xkZmNvZS0+bmV0ZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKQorCQkJb2xkX3JlYWxfZGV2ID0gdmxhbl9kZXZfcmVhbF9kZXYob2xkZmNvZS0+bmV0ZGV2KTsKKwkJZWxzZQorCQkJb2xkX3JlYWxfZGV2ID0gb2xkZmNvZS0+bmV0ZGV2OworCisJCWlmIChjdXJfcmVhbF9kZXYgPT0gb2xkX3JlYWxfZGV2KSB7CisJCQlmY29lLT5vZW0gPSBvbGRmY29lLT5vZW07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmY29lLT5vZW0pIHsKKwkJaWYgKCFmY19leGNoX21ncl9hZGQobHAsIGZjb2UtPm9lbSwgZmNvZV9vZW1fbWF0Y2gpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImZjb2VfZW1fY29uZmlnOiBmYWlsZWQgdG8gYWRkICIKKwkJCSAgICAgICAib2ZmbG9hZCBlbTolcCBvbiBpbnRlcmZhY2U6JXNcbiIsCisJCQkgICAgICAgZmNvZS0+b2VtLCBmY29lLT5uZXRkZXYtPm5hbWUpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9IGVsc2UgeworCQlmY29lLT5vZW0gPSBmY19leGNoX21ncl9hbGxvYyhscCwgRkNfQ0xBU1NfMywKKwkJCQkJICAgIEZDT0VfTUlOX1hJRCwgbHAtPmxyb194aWQsCisJCQkJCSAgICBmY29lX29lbV9tYXRjaCk7CisJCWlmICghZmNvZS0+b2VtKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImZjb2VfZW1fY29uZmlnOiBmYWlsZWQgdG8gYWxsb2NhdGUgIgorCQkJICAgICAgICJlbSBmb3Igb2ZmbG9hZCBleGNoZXMgb24gaW50ZXJmYWNlOiVzXG4iLAorCQkJICAgICAgIGZjb2UtPm5ldGRldi0+bmFtZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCS8qCisJICogRXhjbHVkZSBvZmZsb2FkIEVNIHhpZCByYW5nZSBmcm9tIG5leHQgRU0geGlkIHJhbmdlLgorCSAqLworCW1pbl94aWQgKz0gbHAtPmxyb194aWQgKyAxOworCitza2lwX29lbToKKwlpZiAoIWZjX2V4Y2hfbWdyX2FsbG9jKGxwLCBGQ19DTEFTU18zLCBtaW5feGlkLCBtYXhfeGlkLCBOVUxMKSkgeworCQlwcmludGsoS0VSTl9FUlIgImZjb2VfZW1fY29uZmlnOiBmYWlsZWQgdG8gIgorCQkgICAgICAgImFsbG9jYXRlIGVtIG9uIGludGVyZmFjZSAlc1xuIiwgZmNvZS0+bmV0ZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgogICogZmNvZV9pZl9kZXN0cm95KCkgLSBGQ29FIHNvZnR3YXJlIEhCQSB0ZWFyLWRvd24gZnVuY3Rpb24KLSAqIEBuZXRkZXY6IHB0ciB0byB0aGUgYXNzb2NpYXRlZCBuZXRfZGV2aWNlCi0gKgotICogUmV0dXJuczogMCBpZiBsaW5rIGlzIE9LIGZvciB1c2UgYnkgRkNvRS4KKyAqIEBscG9ydDogZmNfbHBvcnQgdG8gZGVzdHJveQogICovCi1zdGF0aWMgaW50IGZjb2VfaWZfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIHZvaWQgZmNvZV9pZl9kZXN0cm95KHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCiB7Ci0Jc3RydWN0IGZjX2xwb3J0ICpscCA9IE5VTEw7Ci0Jc3RydWN0IGZjb2Vfc29mdGMgKmZjOwotCi0JQlVHX09OKCFuZXRkZXYpOworCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQgPSBscG9ydF9wcml2KGxwb3J0KTsKKwlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2UgPSBwb3J0LT5mY29lOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBmY29lLT5uZXRkZXY7CiAKIAlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiRGVzdHJveWluZyBpbnRlcmZhY2VcbiIpOwogCi0JbHAgPSBmY29lX2hvc3RsaXN0X2xvb2t1cChuZXRkZXYpOwotCWlmICghbHApCi0JCXJldHVybiAtRU5PREVWOwotCi0JZmMgPSBscG9ydF9wcml2KGxwKTsKLQogCS8qIExvZ291dCBvZiB0aGUgZmFicmljICovCi0JZmNfZmFicmljX2xvZ29mZihscCk7Ci0KLQkvKiBSZW1vdmUgdGhlIGluc3RhbmNlIGZyb20gZmNvZSdzIGxpc3QgKi8KLQlmY29lX2hvc3RsaXN0X3JlbW92ZShscCk7Ci0KLQkvKiBjbGVhbiB1cCBuZXRkZXYgY29uZmlndXJhdGlvbnMgKi8KLQlmY29lX25ldGRldl9jbGVhbnVwKGZjKTsKLQotCS8qIHRlYXItZG93biB0aGUgRkNvRSBjb250cm9sbGVyICovCi0JZmNvZV9jdGxyX2Rlc3Ryb3koJmZjLT5jdGxyKTsKKwlmY19mYWJyaWNfbG9nb2ZmKGxwb3J0KTsKIAogCS8qIENsZWFudXAgdGhlIGZjX2xwb3J0ICovCi0JZmNfbHBvcnRfZGVzdHJveShscCk7Ci0JZmNfZmNwX2Rlc3Ryb3kobHApOworCWZjX2xwb3J0X2Rlc3Ryb3kobHBvcnQpOworCWZjX2ZjcF9kZXN0cm95KGxwb3J0KTsKKworCS8qIFN0b3AgdGhlIHRyYW5zbWl0IHJldHJ5IHRpbWVyICovCisJZGVsX3RpbWVyX3N5bmMoJnBvcnQtPnRpbWVyKTsKKworCS8qIEZyZWUgZXhpc3RpbmcgdHJhbnNtaXQgc2ticyAqLworCWZjb2VfY2xlYW5fcGVuZGluZ19xdWV1ZShscG9ydCk7CisKKwkvKiByZWNlaXZlcyBtYXkgbm90IGJlIHN0b3BwZWQgdW50aWwgYWZ0ZXIgdGhpcyAqLworCWZjb2VfaW50ZXJmYWNlX3B1dChmY29lKTsKKworCS8qIEZyZWUgcXVldWVkIHBhY2tldHMgZm9yIHRoZSBwZXItQ1BVIHJlY2VpdmUgdGhyZWFkcyAqLworCWZjb2VfcGVyY3B1X2NsZWFuKGxwb3J0KTsKIAogCS8qIERldGFjaCBmcm9tIHRoZSBzY3NpLW1sICovCi0JZmNfcmVtb3ZlX2hvc3QobHAtPmhvc3QpOwotCXNjc2lfcmVtb3ZlX2hvc3QobHAtPmhvc3QpOworCWZjX3JlbW92ZV9ob3N0KGxwb3J0LT5ob3N0KTsKKwlzY3NpX3JlbW92ZV9ob3N0KGxwb3J0LT5ob3N0KTsKIAogCS8qIFRoZXJlIGFyZSBubyBtb3JlIHJwb3J0cyBvciBJL08sIGZyZWUgdGhlIEVNICovCi0JaWYgKGxwLT5lbXApCi0JCWZjX2V4Y2hfbWdyX2ZyZWUobHAtPmVtcCk7Ci0KLQkvKiBGcmVlIHRoZSBwZXItQ1BVIHJlY2VpdmUgdGhyZWFkcyAqLwotCWZjb2VfcGVyY3B1X2NsZWFuKGxwKTsKLQotCS8qIEZyZWUgZXhpc3Rpbmcgc2ticyAqLwotCWZjb2VfY2xlYW5fcGVuZGluZ19xdWV1ZShscCk7Ci0KLQkvKiBTdG9wIHRoZSB0aW1lciAqLwotCWRlbF90aW1lcl9zeW5jKCZmYy0+dGltZXIpOworCWZjX2V4Y2hfbWdyX2ZyZWUobHBvcnQpOwogCiAJLyogRnJlZSBtZW1vcnkgdXNlZCBieSBzdGF0aXN0aWNhbCBjb3VudGVycyAqLwotCWZjX2xwb3J0X2ZyZWVfc3RhdHMobHApOworCWZjX2xwb3J0X2ZyZWVfc3RhdHMobHBvcnQpOwogCi0JLyogUmVsZWFzZSB0aGUgbmV0X2RldmljZSBhbmQgU2NzaV9Ib3N0ICovCi0JZGV2X3B1dChmYy0+cmVhbF9kZXYpOwotCXNjc2lfaG9zdF9wdXQobHAtPmhvc3QpOwotCi0JcmV0dXJuIDA7CisJLyogUmVsZWFzZSB0aGUgU2NzaV9Ib3N0ICovCisJc2NzaV9ob3N0X3B1dChscG9ydC0+aG9zdCk7CiB9CiAKIC8qCkBAIC01NDAsMTA2ICs2OTMsOTYgQEAKIH07CiAKIC8qKgotICogZmNvZV9pZl9jcmVhdGUoKSAtIHRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgZmNvZSBpbnRlcmZhY2UKLSAqIEBuZXRkZXY6IHBvaW50ZXIgdGhlIGFzc29jaWF0ZWQgbmV0ZGV2aWNlCisgKiBmY29lX2lmX2NyZWF0ZSgpIC0gdGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSBmY29lIHBvcnQKKyAqIEBmY29lOiBmY29lX2ludGVyZmFjZSBzdHJ1Y3R1cmUgdG8gY3JlYXRlIGFuIGZjX2xwb3J0IGluc3RhbmNlIG9uCisgKiBAcGFyZW50OiBkZXZpY2UgcG9pbnRlciB0byBiZSB0aGUgcGFyZW50IGluIHN5c2ZzIGZvciB0aGUgU0NTSSBob3N0CiAgKgotICogQ3JlYXRlcyBmY19scG9ydCBzdHJ1Y3QgYW5kIHNjc2lfaG9zdCBmb3IgbHBvcnQsIGNvbmZpZ3VyZXMgbHBvcnQKLSAqIGFuZCBzdGFydHMgZmFicmljIGxvZ2luLgorICogQ3JlYXRlcyBmY19scG9ydCBzdHJ1Y3QgYW5kIHNjc2lfaG9zdCBmb3IgbHBvcnQsIGNvbmZpZ3VyZXMgbHBvcnQuCiAgKgotICogUmV0dXJucyA6IDAgb24gc3VjY2VzcworICogUmV0dXJucyA6IFRoZSBhbGxvY2F0ZWQgZmNfbHBvcnQgb3IgYW4gZXJyb3IgcG9pbnRlcgogICovCi1zdGF0aWMgaW50IGZjb2VfaWZfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgc3RydWN0IGZjX2xwb3J0ICpmY29lX2lmX2NyZWF0ZShzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2UsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKIHsKIAlpbnQgcmM7Ci0Jc3RydWN0IGZjX2xwb3J0ICpscCA9IE5VTEw7Ci0Jc3RydWN0IGZjb2Vfc29mdGMgKmZjOworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBOVUxMOworCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQ7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7Ci0KLQlCVUdfT04oIW5ldGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGZjb2UtPm5ldGRldjsKIAogCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJDcmVhdGUgSW50ZXJmYWNlXG4iKTsKIAotCWxwID0gZmNvZV9ob3N0bGlzdF9sb29rdXAobmV0ZGV2KTsKLQlpZiAobHApCi0JCXJldHVybiAtRUVYSVNUOwotCiAJc2hvc3QgPSBsaWJmY19ob3N0X2FsbG9jKCZmY29lX3Nob3N0X3RlbXBsYXRlLAotCQkJCSBzaXplb2Yoc3RydWN0IGZjb2Vfc29mdGMpKTsKKwkJCQkgc2l6ZW9mKHN0cnVjdCBmY29lX3BvcnQpKTsKIAlpZiAoIXNob3N0KSB7CiAJCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgaG9zdCBzdHJ1Y3R1cmVcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKIAl9Ci0JbHAgPSBzaG9zdF9wcml2KHNob3N0KTsKLQlmYyA9IGxwb3J0X3ByaXYobHApOworCWxwb3J0ID0gc2hvc3RfcHJpdihzaG9zdCk7CisJcG9ydCA9IGxwb3J0X3ByaXYobHBvcnQpOworCXBvcnQtPmxwb3J0ID0gbHBvcnQ7CisJcG9ydC0+ZmNvZSA9IGZjb2U7CisJSU5JVF9XT1JLKCZwb3J0LT5kZXN0cm95X3dvcmssIGZjb2VfZGVzdHJveV93b3JrKTsKIAogCS8qIGNvbmZpZ3VyZSBmY19scG9ydCwgZS5nLiwgZW0gKi8KLQlyYyA9IGZjb2VfbHBvcnRfY29uZmlnKGxwKTsKKwlyYyA9IGZjb2VfbHBvcnRfY29uZmlnKGxwb3J0KTsKIAlpZiAocmMpIHsKIAkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIkNvdWxkIG5vdCBjb25maWd1cmUgbHBvcnQgZm9yIHRoZSAiCiAJCQkJImludGVyZmFjZVxuIik7CiAJCWdvdG8gb3V0X2hvc3RfcHV0OwogCX0KIAotCS8qCi0JICogSW5pdGlhbGl6ZSBGSVAuCi0JICovCi0JZmNvZV9jdGxyX2luaXQoJmZjLT5jdGxyKTsKLQlmYy0+Y3Rsci5zZW5kID0gZmNvZV9maXBfc2VuZDsKLQlmYy0+Y3Rsci51cGRhdGVfbWFjID0gZmNvZV91cGRhdGVfc3JjX21hYzsKLQogCS8qIGNvbmZpZ3VyZSBscG9ydCBuZXR3b3JrIHByb3BlcnRpZXMgKi8KLQlyYyA9IGZjb2VfbmV0ZGV2X2NvbmZpZyhscCwgbmV0ZGV2KTsKKwlyYyA9IGZjb2VfbmV0ZGV2X2NvbmZpZyhscG9ydCwgbmV0ZGV2KTsKIAlpZiAocmMpIHsKIAkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIkNvdWxkIG5vdCBjb25maWd1cmUgbmV0ZGV2IGZvciB0aGUgIgogCQkJCSJpbnRlcmZhY2VcbiIpOwotCQlnb3RvIG91dF9uZXRkZXZfY2xlYW51cDsKKwkJZ290byBvdXRfbHBfZGVzdHJveTsKIAl9CiAKIAkvKiBjb25maWd1cmUgbHBvcnQgc2NzaSBob3N0IHByb3BlcnRpZXMgKi8KLQlyYyA9IGZjb2Vfc2hvc3RfY29uZmlnKGxwLCBzaG9zdCwgJm5ldGRldi0+ZGV2KTsKKwlyYyA9IGZjb2Vfc2hvc3RfY29uZmlnKGxwb3J0LCBzaG9zdCwgcGFyZW50KTsKIAlpZiAocmMpIHsKIAkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIkNvdWxkIG5vdCBjb25maWd1cmUgc2hvc3QgZm9yIHRoZSAiCiAJCQkJImludGVyZmFjZVxuIik7Ci0JCWdvdG8gb3V0X25ldGRldl9jbGVhbnVwOwotCX0KLQotCS8qIGxwb3J0IGV4Y2ggbWFuYWdlciBhbGxvY2F0aW9uICovCi0JcmMgPSBmY29lX2VtX2NvbmZpZyhscCk7Ci0JaWYgKHJjKSB7Ci0JCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJDb3VsZCBub3QgY29uZmlndXJlIHRoZSBFTSBmb3IgdGhlICIKLQkJCQkiaW50ZXJmYWNlXG4iKTsKLQkJZ290byBvdXRfbmV0ZGV2X2NsZWFudXA7CisJCWdvdG8gb3V0X2xwX2Rlc3Ryb3k7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgbGlicmFyeSAqLwotCXJjID0gZmNvZV9saWJmY19jb25maWcobHAsICZmY29lX2xpYmZjX2Zjbl90ZW1wbCk7CisJcmMgPSBmY29lX2xpYmZjX2NvbmZpZyhscG9ydCwgJmZjb2VfbGliZmNfZmNuX3RlbXBsKTsKIAlpZiAocmMpIHsKIAkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIkNvdWxkIG5vdCBjb25maWd1cmUgbGliZmMgZm9yIHRoZSAiCiAJCQkJImludGVyZmFjZVxuIik7CiAJCWdvdG8gb3V0X2xwX2Rlc3Ryb3k7CiAJfQogCi0JLyogYWRkIHRvIGxwb3J0cyBsaXN0ICovCi0JZmNvZV9ob3N0bGlzdF9hZGQobHApOworCS8qCisJICogZmNvZV9lbV9hbGxvYygpIGFuZCBmY29lX2hvc3RsaXN0X2FkZCgpIGJvdGgKKwkgKiBuZWVkIHRvIGJlIGF0b21pYyB3aXRoIHJlc3BlY3QgdG8gb3RoZXIgY2hhbmdlcyB0byB0aGUgaG9zdGxpc3QKKwkgKiBzaW5jZSBmY29lX2VtX2FsbG9jKCkgbG9va3MgZm9yIGFuIGV4aXN0aW5nIEVNCisJICogaW5zdGFuY2Ugb24gaG9zdCBsaXN0IHVwZGF0ZWQgYnkgZmNvZV9ob3N0bGlzdF9hZGQoKS4KKwkgKgorCSAqIFRoaXMgaXMgY3VycmVudGx5IGhhbmRsZWQgdGhyb3VnaCB0aGUgZmNvZV9jb25maWdfbXV0ZXggYmVnaW4gaGVsZC4KKwkgKi8KIAotCWxwLT5ib290X3RpbWUgPSBqaWZmaWVzOworCS8qIGxwb3J0IGV4Y2ggbWFuYWdlciBhbGxvY2F0aW9uICovCisJcmMgPSBmY29lX2VtX2NvbmZpZyhscG9ydCk7CisJaWYgKHJjKSB7CisJCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJDb3VsZCBub3QgY29uZmlndXJlIHRoZSBFTSBmb3IgdGhlICIKKwkJCQkiaW50ZXJmYWNlXG4iKTsKKwkJZ290byBvdXRfbHBfZGVzdHJveTsKKwl9CiAKLQlmY19mYWJyaWNfbG9naW4obHApOwotCi0JaWYgKCFmY29lX2xpbmtfb2sobHApKQotCQlmY29lX2N0bHJfbGlua191cCgmZmMtPmN0bHIpOwotCi0JZGV2X2hvbGQobmV0ZGV2KTsKLQotCXJldHVybiByYzsKKwlmY29lX2ludGVyZmFjZV9nZXQoZmNvZSk7CisJcmV0dXJuIGxwb3J0OwogCiBvdXRfbHBfZGVzdHJveToKLQlmY19leGNoX21ncl9mcmVlKGxwLT5lbXApOyAvKiBGcmVlIHRoZSBFTSAqLwotb3V0X25ldGRldl9jbGVhbnVwOgotCWZjb2VfbmV0ZGV2X2NsZWFudXAoZmMpOworCWZjX2V4Y2hfbWdyX2ZyZWUobHBvcnQpOwogb3V0X2hvc3RfcHV0OgotCXNjc2lfaG9zdF9wdXQobHAtPmhvc3QpOwotCXJldHVybiByYzsKKwlzY3NpX2hvc3RfcHV0KGxwb3J0LT5ob3N0KTsKK291dDoKKwlyZXR1cm4gRVJSX1BUUihyYyk7CiB9CiAKIC8qKgpAQCAtNjY5LDYgKzgxMiw3IEBACiBpbnQgX19leGl0IGZjb2VfaWZfZXhpdCh2b2lkKQogewogCWZjX3JlbGVhc2VfdHJhbnNwb3J0KHNjc2lfdHJhbnNwb3J0X2Zjb2Vfc3cpOworCXNjc2lfdHJhbnNwb3J0X2Zjb2Vfc3cgPSBOVUxMOwogCXJldHVybiAwOwogfQogCkBAIC02ODYsNyArODMwLDcgQEAKIAl0aHJlYWQgPSBrdGhyZWFkX2NyZWF0ZShmY29lX3BlcmNwdV9yZWNlaXZlX3RocmVhZCwKIAkJCQkodm9pZCAqKXAsICJmY29ldGhyZWFkLyVkIiwgY3B1KTsKIAotCWlmIChsaWtlbHkoIUlTX0VSUihwLT50aHJlYWQpKSkgeworCWlmIChsaWtlbHkoIUlTX0VSUih0aHJlYWQpKSkgewogCQlrdGhyZWFkX2JpbmQodGhyZWFkLCBjcHUpOwogCQl3YWtlX3VwX3Byb2Nlc3ModGhyZWFkKTsKIApAQCAtODM4LDE0ICs5ODIsMTMgQEAKIHsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwOwogCXN0cnVjdCBmY29lX3Jjdl9pbmZvICpmcjsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7CisJc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lOwogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOwogCXN0cnVjdCBmY29lX3BlcmNwdV9zICpmcHM7Ci0JdW5zaWduZWQgc2hvcnQgb3hpZDsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gMDsKKwl1bnNpZ25lZCBpbnQgY3B1OwogCi0JZmMgPSBjb250YWluZXJfb2YocHR5cGUsIHN0cnVjdCBmY29lX3NvZnRjLCBmY29lX3BhY2tldF90eXBlKTsKLQlscCA9IGZjLT5jdGxyLmxwOworCWZjb2UgPSBjb250YWluZXJfb2YocHR5cGUsIHN0cnVjdCBmY29lX2ludGVyZmFjZSwgZmNvZV9wYWNrZXRfdHlwZSk7CisJbHAgPSBmY29lLT5jdGxyLmxwOwogCWlmICh1bmxpa2VseShscCA9PSBOVUxMKSkgewogCQlGQ09FX05FVERFVl9EQkcoZGV2LCAiQ2Fubm90IGZpbmQgaGJhIHN0cnVjdHVyZSIpOwogCQlnb3RvIGVycjI7CkBAIC04NzYsMjAgKzEwMTksMjAgQEAKIAlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBzaXplb2Yoc3RydWN0IGZjb2VfaGRyKSk7CiAJZmggPSAoc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqKSBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCi0Jb3hpZCA9IG50b2hzKGZoLT5maF9veF9pZCk7Ci0KIAlmciA9IGZjb2VfZGV2X2Zyb21fc2tiKHNrYik7CiAJZnItPmZyX2RldiA9IGxwOwogCWZyLT5wdHlwZSA9IHB0eXBlOwogCi0jaWZkZWYgQ09ORklHX1NNUAogCS8qCi0JICogVGhlIGluY29taW5nIGZyYW1lIGV4Y2hhbmdlIGlkKG94aWQpIGlzIEFORGVkIHdpdGggbnVtIG9mIG9ubGluZQotCSAqIGNwdSBiaXRzIHRvIGdldCBjcHUgYW5kIHRoZW4gdGhpcyBjcHUgaXMgdXNlZCBmb3Igc2VsZWN0aW5nCi0JICogYSBwZXIgY3B1IGtlcm5lbCB0aHJlYWQgZnJvbSBmY29lX3BlcmNwdS4KKwkgKiBJbiBjYXNlIHRoZSBpbmNvbWluZyBmcmFtZSdzIGV4Y2hhbmdlIGlzIG9yaWdpbmF0ZWQgZnJvbQorCSAqIHRoZSBpbml0aWF0b3IsIHRoZW4gcmVjZWl2ZWQgZnJhbWUncyBleGNoYW5nZSBpZCBpcyBBTkRlZAorCSAqIHdpdGggZmNfY3B1X21hc2sgYml0cyB0byBnZXQgdGhlIHNhbWUgY3B1IG9uIHdoaWNoIGV4Y2hhbmdlCisJICogd2FzIG9yaWdpbmF0ZWQsIG90aGVyd2lzZSBqdXN0IHVzZSB0aGUgY3VycmVudCBjcHUuCiAJICovCi0JY3B1ID0gb3hpZCAmIChudW1fb25saW5lX2NwdXMoKSAtIDEpOwotI2VuZGlmCisJaWYgKG50b2gyNChmaC0+ZmhfZl9jdGwpICYgRkNfRkNfRVhfQ1RYKQorCQljcHUgPSBudG9ocyhmaC0+Zmhfb3hfaWQpICYgZmNfY3B1X21hc2s7CisJZWxzZQorCQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlmcHMgPSAmcGVyX2NwdShmY29lX3BlcmNwdSwgY3B1KTsKIAlzcGluX2xvY2tfYmgoJmZwcy0+ZmNvZV9yeF9saXN0LmxvY2spOwpAQCAtOTk2LDcgKzExMzksNyBAQAogICogZmNvZV9mY19jcmMoKSAtIGNhbGN1bGF0ZXMgRkMgQ1JDIGluIHRoaXMgZmNvZSBza2IKICAqIEBmcDogdGhlIGZjX2ZyYW1lIGNvbnRhaW5pbmcgZGF0YSB0byBiZSBjaGVja3N1bW1lZAogICoKLSAqIFRoaXMgdXNlcyBjcmMzMigpIHRvIGNhbGN1bGF0ZSB0aGUgY3JjIGZvciBmYyBmcmFtZQorICogVGhpcyB1c2VzIGNyYzMyKCkgdG8gY2FsY3VsYXRlIHRoZSBjcmMgZm9yIHBvcnQgZnJhbWUKICAqIFJldHVybiAgIDogMzIgYml0IGNyYwogICovCiB1MzIgZmNvZV9mY19jcmMoc3RydWN0IGZjX2ZyYW1lICpmcCkKQEAgLTEwMjksNyArMTE3Miw3IEBACiAKIC8qKgogICogZmNvZV94bWl0KCkgLSBGQ29FIGZyYW1lIHRyYW5zbWl0IGZ1bmN0aW9uCi0gKiBAbHA6CXRoZSBhc3NvY2lhdGVkIGxvY2FsIHBvcnQKKyAqIEBscDoJdGhlIGFzc29jaWF0ZWQgbG9jYWwgZmNvZQogICogQGZwOiB0aGUgZmNfZnJhbWUgdG8gYmUgdHJhbnNtaXR0ZWQKICAqCiAgKiBSZXR1cm4gICA6IDAgZm9yIHN1Y2Nlc3MKQEAgLTEwNDYsMTMgKzExODksMTMgQEAKIAl1bnNpZ25lZCBpbnQgaGxlbjsJCS8qIGhlYWRlciBsZW5ndGggaW1wbGllcyB0aGUgdmVyc2lvbiAqLwogCXVuc2lnbmVkIGludCB0bGVuOwkJLyogdHJhaWxlciBsZW5ndGggKi8KIAl1bnNpZ25lZCBpbnQgZWxlbjsJCS8qIGV0aCBoZWFkZXIsIG1heSBpbmNsdWRlIHZsYW4gKi8KLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7CisJc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IGxwb3J0X3ByaXYobHApOworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZSA9IHBvcnQtPmZjb2U7CiAJdTggc29mLCBlb2Y7CiAJc3RydWN0IGZjb2VfaGRyICpocDsKIAogCVdBUk5fT04oKGZyX2xlbihmcCkgJSBzaXplb2YodTMyKSkgIT0gMCk7CiAKLQlmYyA9IGxwb3J0X3ByaXYobHApOwogCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7CiAJc2tiID0gZnBfc2tiKGZwKTsKIAl3bGVuID0gc2tiLT5sZW4gLyBGQ09FX1dPUkRfVE9fQllURTsKQEAgLTEwNjMsNyArMTIwNiw3IEBACiAJfQogCiAJaWYgKHVubGlrZWx5KGZoLT5maF9yX2N0bCA9PSBGQ19SQ1RMX0VMU19SRVEpICYmCi0JICAgIGZjb2VfY3Rscl9lbHNfc2VuZCgmZmMtPmN0bHIsIHNrYikpCisJICAgIGZjb2VfY3Rscl9lbHNfc2VuZCgmZmNvZS0+Y3Rsciwgc2tiKSkKIAkJcmV0dXJuIDA7CiAKIAlzb2YgPSBmcl9zb2YoZnApOwpAQCAtMTA4NSw3ICsxMjI4LDcgQEAKIAkJY3JjID0gZmNvZV9mY19jcmMoZnApOwogCX0KIAotCS8qIGNvcHkgZmMgY3JjIGFuZCBlb2YgdG8gdGhlIHNrYiBidWZmICovCisJLyogY29weSBwb3J0IGNyYyBhbmQgZW9mIHRvIHRoZSBza2IgYnVmZiAqLwogCWlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHsKIAkJc2tiX2ZyYWdfdCAqZnJhZzsKIAkJaWYgKGZjb2VfZ2V0X3BhZ2VkX2NyY19lb2Yoc2tiLCB0bGVuKSkgewpAQCAtMTEwOCwyNyArMTI1MSwyNyBAQAogCQljcCA9IE5VTEw7CiAJfQogCi0JLyogYWRqdXN0IHNrYiBuZXR3b3JrL3RyYW5zcG9ydCBvZmZzZXRzIHRvIG1hdGNoIG1hYy9mY29lL2ZjICovCisJLyogYWRqdXN0IHNrYiBuZXR3b3JrL3RyYW5zcG9ydCBvZmZzZXRzIHRvIG1hdGNoIG1hYy9mY29lL3BvcnQgKi8KIAlza2JfcHVzaChza2IsIGVsZW4gKyBobGVuKTsKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCXNrYi0+bWFjX2xlbiA9IGVsZW47CiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0ZDT0UpOwotCXNrYi0+ZGV2ID0gZmMtPnJlYWxfZGV2OworCXNrYi0+ZGV2ID0gZmNvZS0+bmV0ZGV2OwogCiAJLyogZmlsbCB1cCBtYWMgYW5kIGZjb2UgaGVhZGVycyAqLwogCWVoID0gZXRoX2hkcihza2IpOwogCWVoLT5oX3Byb3RvID0gaHRvbnMoRVRIX1BfRkNPRSk7Ci0JaWYgKGZjLT5jdGxyLm1hcF9kZXN0KQorCWlmIChmY29lLT5jdGxyLm1hcF9kZXN0KQogCQlmY19mY29lX3NldF9tYWMoZWgtPmhfZGVzdCwgZmgtPmZoX2RfaWQpOwogCWVsc2UKIAkJLyogaW5zZXJ0IEdXIGFkZHJlc3MgKi8KLQkJbWVtY3B5KGVoLT5oX2Rlc3QsIGZjLT5jdGxyLmRlc3RfYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkoZWgtPmhfZGVzdCwgZmNvZS0+Y3Rsci5kZXN0X2FkZHIsIEVUSF9BTEVOKTsKIAotCWlmICh1bmxpa2VseShmYy0+Y3Rsci5mbG9naV9veGlkICE9IEZDX1hJRF9VTktOT1dOKSkKLQkJbWVtY3B5KGVoLT5oX3NvdXJjZSwgZmMtPmN0bHIuY3RsX3NyY19hZGRyLCBFVEhfQUxFTik7CisJaWYgKHVubGlrZWx5KGZjb2UtPmN0bHIuZmxvZ2lfb3hpZCAhPSBGQ19YSURfVU5LTk9XTikpCisJCW1lbWNweShlaC0+aF9zb3VyY2UsIGZjb2UtPmN0bHIuY3RsX3NyY19hZGRyLCBFVEhfQUxFTik7CiAJZWxzZQotCQltZW1jcHkoZWgtPmhfc291cmNlLCBmYy0+Y3Rsci5kYXRhX3NyY19hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShlaC0+aF9zb3VyY2UsIGZjb2UtPmN0bHIuZGF0YV9zcmNfYWRkciwgRVRIX0FMRU4pOwogCiAJaHAgPSAoc3RydWN0IGZjb2VfaGRyICopKGVoICsgMSk7CiAJbWVtc2V0KGhwLCAwLCBzaXplb2YoKmhwKSk7CkBAIC0xMTM2LDcgKzEyNzksNiBAQAogCQlGQ19GQ09FX0VOQ0FQU19WRVIoaHAsIEZDX0ZDT0VfVkVSKTsKIAlocC0+ZmNvZV9zb2YgPSBzb2Y7CiAKLSNpZmRlZiBORVRJRl9GX0ZTTwogCS8qIGZjb2UgbHNvLCBtc3MgaXMgaW4gbWF4X3BheWxvYWQgd2hpY2ggaXMgbm9uLXplcm8gZm9yIEZDUCBkYXRhICovCiAJaWYgKGxwLT5zZXFfb2ZmbG9hZCAmJiBmcl9tYXhfcGF5bG9hZChmcCkpIHsKIAkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9IFNLQl9HU09fRkNPRTsKQEAgLTExNDUsNyArMTI4Nyw2IEBACiAJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPSAwOwogCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gMDsKIAl9Ci0jZW5kaWYKIAkvKiB1cGRhdGUgdHggc3RhdHM6IHJlZ2FyZGxlc3MgaWYgTExEIGZhaWxzICovCiAJc3RhdHMgPSBmY19scG9ydF9nZXRfc3RhdHMobHApOwogCXN0YXRzLT5UeEZyYW1lcysrOwpAQCAtMTE1Myw3ICsxMjk0LDcgQEAKIAogCS8qIHNlbmQgZG93biB0byBsbGQgKi8KIAlmcl9kZXYoZnApID0gbHA7Ci0JaWYgKGZjLT5mY29lX3BlbmRpbmdfcXVldWUucWxlbikKKwlpZiAocG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4pCiAJCWZjb2VfY2hlY2tfd2FpdF9xdWV1ZShscCwgc2tiKTsKIAllbHNlIGlmIChmY29lX3N0YXJ0X2lvKHNrYikpCiAJCWZjb2VfY2hlY2tfd2FpdF9xdWV1ZShscCwgc2tiKTsKQEAgLTExNjIsNiArMTMwMywxNSBAQAogfQogCiAvKioKKyAqIGZjb2VfcGVyY3B1X2ZsdXNoX2RvbmUoKSAtIEluZGljYXRlIHBlcmNwdSBxdWV1ZSBmbHVzaCBjb21wbGV0aW9uLgorICogQHNrYjogdGhlIHNrYiBiZWluZyBjb21wbGV0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGZjb2VfcGVyY3B1X2ZsdXNoX2RvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwljb21wbGV0ZSgmZmNvZV9mbHVzaF9jb21wbGV0aW9uKTsKK30KKworLyoqCiAgKiBmY29lX3BlcmNwdV9yZWNlaXZlX3RocmVhZCgpIC0gcmVjdiB0aHJlYWQgcGVyIGNwdQogICogQGFyZzogcHRyIHRvIHRoZSBmY29lIHBlciBjcHUgc3RydWN0CiAgKgpAQCAtMTE3OSw3ICsxMzI5LDcgQEAKIAlzdHJ1Y3QgZmNvZV9jcmNfZW9mIGNyY19lb2Y7CiAJc3RydWN0IGZjX2ZyYW1lICpmcDsKIAl1OCAqbWFjID0gTlVMTDsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7CisJc3RydWN0IGZjb2VfcG9ydCAqcG9ydDsKIAlzdHJ1Y3QgZmNvZV9oZHIgKmhwOwogCiAJc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOwpAQCAtMTIwMCw3ICsxMzUwLDggQEAKIAkJZnIgPSBmY29lX2Rldl9mcm9tX3NrYihza2IpOwogCQlscCA9IGZyLT5mcl9kZXY7CiAJCWlmICh1bmxpa2VseShscCA9PSBOVUxMKSkgewotCQkJRkNPRV9ORVRERVZfREJHKHNrYi0+ZGV2LCAiSW52YWxpZCBIQkEgU3RydWN0dXJlIik7CisJCQlpZiAoc2tiLT5kZXN0cnVjdG9yICE9IGZjb2VfcGVyY3B1X2ZsdXNoX2RvbmUpCisJCQkJRkNPRV9ORVRERVZfREJHKHNrYi0+ZGV2LCAiTlVMTCBscG9ydCBpbiBza2IiKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTEyMTUsNyArMTM2Niw3IEBACiAJCS8qCiAJCSAqIFNhdmUgc291cmNlIE1BQyBhZGRyZXNzIGJlZm9yZSBkaXNjYXJkaW5nIGhlYWRlci4KIAkJICovCi0JCWZjID0gbHBvcnRfcHJpdihscCk7CisJCXBvcnQgPSBscG9ydF9wcml2KGxwKTsKIAkJaWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkKIAkJCXNrYl9saW5lYXJpemUoc2tiKTsJLyogbm90IGlkZWFsICovCiAJCW1hYyA9IGV0aF9oZHIoc2tiKS0+aF9zb3VyY2U7CkBAIC0xMjc3LDcgKzE0MjgsNyBAQAogCQlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOwogCQlpZiAoZmgtPmZoX3JfY3RsID09IEZDX1JDVExfRERfU09MX0RBVEEgJiYKIAkJICAgIGZoLT5maF90eXBlID09IEZDX1RZUEVfRkNQKSB7Ci0JCQlmY19leGNoX3JlY3YobHAsIGxwLT5lbXAsIGZwKTsKKwkJCWZjX2V4Y2hfcmVjdihscCwgZnApOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGZyX2ZsYWdzKGZwKSAmIEZDUEhGX0NSQ19VTkNIRUNLRUQpIHsKQEAgLTEyOTMsMTIgKzE0NDQsMTIgQEAKIAkJCX0KIAkJCWZyX2ZsYWdzKGZwKSAmPSB+RkNQSEZfQ1JDX1VOQ0hFQ0tFRDsKIAkJfQotCQlpZiAodW5saWtlbHkoZmMtPmN0bHIuZmxvZ2lfb3hpZCAhPSBGQ19YSURfVU5LTk9XTikgJiYKLQkJICAgIGZjb2VfY3Rscl9yZWN2X2Zsb2dpKCZmYy0+Y3RsciwgZnAsIG1hYykpIHsKKwkJaWYgKHVubGlrZWx5KHBvcnQtPmZjb2UtPmN0bHIuZmxvZ2lfb3hpZCAhPSBGQ19YSURfVU5LTk9XTikgJiYKKwkJICAgIGZjb2VfY3Rscl9yZWN2X2Zsb2dpKCZwb3J0LT5mY29lLT5jdGxyLCBmcCwgbWFjKSkgewogCQkJZmNfZnJhbWVfZnJlZShmcCk7CiAJCQljb250aW51ZTsKIAkJfQotCQlmY19leGNoX3JlY3YobHAsIGxwLT5lbXAsIGZwKTsKKwkJZmNfZXhjaF9yZWN2KGxwLCBmcCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTMxOCw0NiArMTQ2OSw0NiBAQAogICovCiBzdGF0aWMgdm9pZCBmY29lX2NoZWNrX3dhaXRfcXVldWUoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmMgPSBscG9ydF9wcml2KGxwKTsKKwlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0ID0gbHBvcnRfcHJpdihscCk7CiAJaW50IHJjOwogCi0Jc3Bpbl9sb2NrX2JoKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOworCXNwaW5fbG9ja19iaCgmcG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOwogCiAJaWYgKHNrYikKLQkJX19za2JfcXVldWVfdGFpbCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZSwgc2tiKTsKKwkJX19za2JfcXVldWVfdGFpbCgmcG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlLCBza2IpOwogCi0JaWYgKGZjLT5mY29lX3BlbmRpbmdfcXVldWVfYWN0aXZlKQorCWlmIChwb3J0LT5mY29lX3BlbmRpbmdfcXVldWVfYWN0aXZlKQogCQlnb3RvIG91dDsKLQlmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlX2FjdGl2ZSA9IDE7CisJcG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlX2FjdGl2ZSA9IDE7CiAKLQl3aGlsZSAoZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuKSB7CisJd2hpbGUgKHBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuKSB7CiAJCS8qIGtlZXAgcWxlbiA+IDAgdW50aWwgZmNvZV9zdGFydF9pbyBzdWNjZWVkcyAqLwotCQlmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4rKzsKLQkJc2tiID0gX19za2JfZGVxdWV1ZSgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZSk7CisJCXBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuKys7CisJCXNrYiA9IF9fc2tiX2RlcXVldWUoJnBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZSk7CiAKLQkJc3Bpbl91bmxvY2tfYmgoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CiAJCXJjID0gZmNvZV9zdGFydF9pbyhza2IpOwotCQlzcGluX2xvY2tfYmgoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CisJCXNwaW5fbG9ja19iaCgmcG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOwogCiAJCWlmIChyYykgewotCQkJX19za2JfcXVldWVfaGVhZCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZSwgc2tiKTsKKwkJCV9fc2tiX3F1ZXVlX2hlYWQoJnBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZSwgc2tiKTsKIAkJCS8qIHVuZG8gdGVtcG9yYXJ5IGluY3JlbWVudCBhYm92ZSAqLwotCQkJZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuLS07CisJCQlwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUucWxlbi0tOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogdW5kbyB0ZW1wb3JhcnkgaW5jcmVtZW50IGFib3ZlICovCi0JCWZjLT5mY29lX3BlbmRpbmdfcXVldWUucWxlbi0tOworCQlwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUucWxlbi0tOwogCX0KIAotCWlmIChmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4gPCBGQ09FX0xPV19RVUVVRV9ERVBUSCkKKwlpZiAocG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4gPCBGQ09FX0xPV19RVUVVRV9ERVBUSCkKIAkJbHAtPnFmdWxsID0gMDsKLQlpZiAoZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuICYmICF0aW1lcl9wZW5kaW5nKCZmYy0+dGltZXIpKQotCQltb2RfdGltZXIoJmZjLT50aW1lciwgamlmZmllcyArIDIpOwotCWZjLT5mY29lX3BlbmRpbmdfcXVldWVfYWN0aXZlID0gMDsKKwlpZiAocG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4gJiYgIXRpbWVyX3BlbmRpbmcoJnBvcnQtPnRpbWVyKSkKKwkJbW9kX3RpbWVyKCZwb3J0LT50aW1lciwgamlmZmllcyArIDIpOworCXBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZV9hY3RpdmUgPSAwOwogb3V0OgotCWlmIChmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4gPiBGQ09FX01BWF9RVUVVRV9ERVBUSCkKKwlpZiAocG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4gPiBGQ09FX01BWF9RVUVVRV9ERVBUSCkKIAkJbHAtPnFmdWxsID0gMTsKLQlzcGluX3VubG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOwogCXJldHVybjsKIH0KIApAQCAtMTM5MSwyMSArMTU0MiwyMCBAQAogCQkJCSAgICB1bG9uZyBldmVudCwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBmY19scG9ydCAqbHAgPSBOVUxMOwotCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHB0cjsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHB0cjsKKwlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2U7CisJc3RydWN0IGZjb2VfcG9ydCAqcG9ydDsKIAlzdHJ1Y3QgZmNvZV9kZXZfc3RhdHMgKnN0YXRzOwogCXUzMiBsaW5rX3Bvc3NpYmxlID0gMTsKIAl1MzIgbWZzOwogCWludCByYyA9IE5PVElGWV9PSzsKIAotCXJlYWRfbG9jaygmZmNvZV9ob3N0bGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjLCAmZmNvZV9ob3N0bGlzdCwgbGlzdCkgewotCQlpZiAoZmMtPnJlYWxfZGV2ID09IHJlYWxfZGV2KSB7Ci0JCQlscCA9IGZjLT5jdGxyLmxwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNvZSwgJmZjb2VfaG9zdGxpc3QsIGxpc3QpIHsKKwkJaWYgKGZjb2UtPm5ldGRldiA9PSBuZXRkZXYpIHsKKwkJCWxwID0gZmNvZS0+Y3Rsci5scDsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXJlYWRfdW5sb2NrKCZmY29lX2hvc3RsaXN0X2xvY2spOwogCWlmIChscCA9PSBOVUxMKSB7CiAJCXJjID0gTk9USUZZX0RPTkU7CiAJCWdvdG8gb3V0OwpAQCAtMTQyMCwyMSArMTU3MCwyNyBAQAogCWNhc2UgTkVUREVWX0NIQU5HRToKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfQ0hBTkdFTVRVOgotCQltZnMgPSBmYy0+cmVhbF9kZXYtPm10dSAtCi0JCQkoc2l6ZW9mKHN0cnVjdCBmY29lX2hkcikgKwotCQkJIHNpemVvZihzdHJ1Y3QgZmNvZV9jcmNfZW9mKSk7CisJCW1mcyA9IG5ldGRldi0+bXR1IC0gKHNpemVvZihzdHJ1Y3QgZmNvZV9oZHIpICsKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZmNvZV9jcmNfZW9mKSk7CiAJCWlmIChtZnMgPj0gRkNfTUlOX01BWF9GUkFNRSkKIAkJCWZjX3NldF9tZnMobHAsIG1mcyk7CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgogCQlicmVhazsKKwljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgorCQlsaXN0X2RlbCgmZmNvZS0+bGlzdCk7CisJCXBvcnQgPSBscG9ydF9wcml2KGZjb2UtPmN0bHIubHApOworCQlmY29lX2ludGVyZmFjZV9jbGVhbnVwKGZjb2UpOworCQlzY2hlZHVsZV93b3JrKCZwb3J0LT5kZXN0cm95X3dvcmspOworCQlnb3RvIG91dDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJRkNPRV9ORVRERVZfREJHKHJlYWxfZGV2LCAiVW5rbm93biBldmVudCAlbGQgIgorCQlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiVW5rbm93biBldmVudCAlbGQgIgogCQkJCSJmcm9tIG5ldGRldiBuZXRsaW5rXG4iLCBldmVudCk7CiAJfQogCWlmIChsaW5rX3Bvc3NpYmxlICYmICFmY29lX2xpbmtfb2sobHApKQotCQlmY29lX2N0bHJfbGlua191cCgmZmMtPmN0bHIpOwotCWVsc2UgaWYgKGZjb2VfY3Rscl9saW5rX2Rvd24oJmZjLT5jdGxyKSkgeworCQlmY29lX2N0bHJfbGlua191cCgmZmNvZS0+Y3Rscik7CisJZWxzZSBpZiAoZmNvZV9jdGxyX2xpbmtfZG93bigmZmNvZS0+Y3RscikpIHsKIAkJc3RhdHMgPSBmY19scG9ydF9nZXRfc3RhdHMobHApOwogCQlzdGF0cy0+TGlua0ZhaWx1cmVDb3VudCsrOwogCQlmY29lX2NsZWFuX3BlbmRpbmdfcXVldWUobHApOwpAQCAtMTQ2NSw3NSArMTYyMSw2IEBACiB9CiAKIC8qKgotICogZmNvZV9uZXRkZXZfdG9fbW9kdWxlX293bmVyKCkgLSBmaW5kcyBvdXQgdGhlIGRyaXZlciBtb2R1bGUgb2YgdGhlIG5ldGRldgotICogQG5ldGRldjogdGhlIHRhcmdldCBuZXRkZXYKLSAqCi0gKiBSZXR1cm5zOiBwdHIgdG8gdGhlIHN0cnVjdCBtb2R1bGUsIE5VTEwgZm9yIGZhaWx1cmUKLSAqLwotc3RhdGljIHN0cnVjdCBtb2R1bGUgKgotZmNvZV9uZXRkZXZfdG9fbW9kdWxlX293bmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCi0JaWYgKCFuZXRkZXYpCi0JCXJldHVybiBOVUxMOwotCi0JZGV2ID0gbmV0ZGV2LT5kZXYucGFyZW50OwotCWlmICghZGV2KQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICghZGV2LT5kcml2ZXIpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIGRldi0+ZHJpdmVyLT5vd25lcjsKLX0KLQotLyoqCi0gKiBmY29lX2V0aGRydl9nZXQoKSAtIEhvbGQgdGhlIEV0aGVybmV0IGRyaXZlcgotICogQG5ldGRldjogdGhlIHRhcmdldCBuZXRkZXYKLSAqCi0gKiBIb2xkcyB0aGUgRXRoZXJuZXQgZHJpdmVyIG1vZHVsZSBieSB0cnlfbW9kdWxlX2dldCgpIGZvcgotICogdGhlIGNvcnJlc3BvbmRpbmcgbmV0ZGV2LgotICoKLSAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKLSAqLwotc3RhdGljIGludCBmY29lX2V0aGRydl9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQotCW93bmVyID0gZmNvZV9uZXRkZXZfdG9fbW9kdWxlX293bmVyKG5ldGRldik7Ci0JaWYgKG93bmVyKSB7Ci0JCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJIb2xkIGRyaXZlciBtb2R1bGUgJXNcbiIsCi0JCQkJbW9kdWxlX25hbWUob3duZXIpKTsKLQkJcmV0dXJuICB0cnlfbW9kdWxlX2dldChvd25lcik7Ci0JfQotCXJldHVybiAtRU5PREVWOwotfQotCi0vKioKLSAqIGZjb2VfZXRoZHJ2X3B1dCgpIC0gUmVsZWFzZSB0aGUgRXRoZXJuZXQgZHJpdmVyCi0gKiBAbmV0ZGV2OiB0aGUgdGFyZ2V0IG5ldGRldgotICoKLSAqIFJlbGVhc2VzIHRoZSBFdGhlcm5ldCBkcml2ZXIgbW9kdWxlIGJ5IG1vZHVsZV9wdXQgZm9yCi0gKiB0aGUgY29ycmVzcG9uZGluZyBuZXRkZXYuCi0gKgotICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICovCi1zdGF0aWMgaW50IGZjb2VfZXRoZHJ2X3B1dChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCi0Jb3duZXIgPSBmY29lX25ldGRldl90b19tb2R1bGVfb3duZXIobmV0ZGV2KTsKLQlpZiAob3duZXIpIHsKLQkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIlJlbGVhc2UgZHJpdmVyIG1vZHVsZSAlc1xuIiwKLQkJCQltb2R1bGVfbmFtZShvd25lcikpOwotCQltb2R1bGVfcHV0KG93bmVyKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRU5PREVWOwotfQotCi0vKioKICAqIGZjb2VfZGVzdHJveSgpIC0gaGFuZGxlcyB0aGUgZGVzdHJveSBmcm9tIHN5c2ZzCiAgKiBAYnVmZmVyOiBleHBlY3RlZCB0byBiZSBhbiBldGggaWYgbmFtZQogICogQGtwOiBhc3NvY2lhdGVkIGtlcm5lbCBwYXJhbQpAQCAtMTU0MiwzNCArMTYyOSw1NyBAQAogICovCiBzdGF0aWMgaW50IGZjb2VfZGVzdHJveShjb25zdCBjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewotCWludCByYzsKKwlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2U7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlpbnQgcmM7CisKKwltdXRleF9sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CisjaWZkZWYgQ09ORklHX0ZDT0VfTU9EVUxFCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIG1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIGlzIG5vdCBhYm91dCB0byBiZQorCSAqIHJlbW92ZWQuICBNb2R1bGUgcGFyYW10ZXIgc3lzZnMgZmlsZXMgYXJlIHdyaXRhYmxlIGJlZm9yZSB0aGUKKwkgKiBtb2R1bGVfaW5pdCBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIGFmdGVyIG1vZHVsZV9leGl0LgorCSAqLworCWlmIChUSElTX01PRFVMRS0+c3RhdGUgIT0gTU9EVUxFX1NUQVRFX0xJVkUpIHsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIG91dF9ub2RldjsKKwl9CisjZW5kaWYKIAogCW5ldGRldiA9IGZjb2VfaWZfdG9fbmV0ZGV2KGJ1ZmZlcik7CiAJaWYgKCFuZXRkZXYpIHsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIG91dF9ub2RldjsKIAl9Ci0JLyogbG9vayBmb3IgZXhpc3RpbmcgbHBvcnQgKi8KLQlpZiAoIWZjb2VfaG9zdGxpc3RfbG9va3VwKG5ldGRldikpIHsKKworCXJ0bmxfbG9jaygpOworCWZjb2UgPSBmY29lX2hvc3RsaXN0X2xvb2t1cF9wb3J0KG5ldGRldik7CisJaWYgKCFmY29lKSB7CisJCXJ0bmxfdW5sb2NrKCk7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcHV0ZGV2OwogCX0KLQlyYyA9IGZjb2VfaWZfZGVzdHJveShuZXRkZXYpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgImZjb2U6IEZhaWxlZCB0byBkZXN0cm95IGludGVyZmFjZSAoJXMpXG4iLAotCQkgICAgICAgbmV0ZGV2LT5uYW1lKTsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIG91dF9wdXRkZXY7Ci0JfQotCWZjb2VfZXRoZHJ2X3B1dChuZXRkZXYpOwotCXJjID0gMDsKKwlsaXN0X2RlbCgmZmNvZS0+bGlzdCk7CisJZmNvZV9pbnRlcmZhY2VfY2xlYW51cChmY29lKTsKKwlydG5sX3VubG9jaygpOworCWZjb2VfaWZfZGVzdHJveShmY29lLT5jdGxyLmxwKTsKIG91dF9wdXRkZXY6CiAJZGV2X3B1dChuZXRkZXYpOwogb3V0X25vZGV2OgorCW11dGV4X3VubG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHZvaWQgZmNvZV9kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQ7CisKKwlwb3J0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmY29lX3BvcnQsIGRlc3Ryb3lfd29yayk7CisJbXV0ZXhfbG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOworCWZjb2VfaWZfZGVzdHJveShwb3J0LT5scG9ydCk7CisJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7Cit9CisKIC8qKgogICogZmNvZV9jcmVhdGUoKSAtIEhhbmRsZXMgdGhlIGNyZWF0ZSBjYWxsIGZyb20gc3lzZnMKICAqIEBidWZmZXI6IGV4cGVjdGVkIHRvIGJlIGFuIGV0aCBpZiBuYW1lCkBAIC0xNTgwLDQxICsxNjkwLDg0IEBACiBzdGF0aWMgaW50IGZjb2VfY3JlYXRlKGNvbnN0IGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CiAJaW50IHJjOworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKKwltdXRleF9sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CisjaWZkZWYgQ09ORklHX0ZDT0VfTU9EVUxFCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIG1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIGlzIG5vdCBhYm91dCB0byBiZQorCSAqIHJlbW92ZWQuICBNb2R1bGUgcGFyYW10ZXIgc3lzZnMgZmlsZXMgYXJlIHdyaXRhYmxlIGJlZm9yZSB0aGUKKwkgKiBtb2R1bGVfaW5pdCBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIGFmdGVyIG1vZHVsZV9leGl0LgorCSAqLworCWlmIChUSElTX01PRFVMRS0+c3RhdGUgIT0gTU9EVUxFX1NUQVRFX0xJVkUpIHsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIG91dF9ub2RldjsKKwl9CisjZW5kaWYKKworCXJ0bmxfbG9jaygpOwogCW5ldGRldiA9IGZjb2VfaWZfdG9fbmV0ZGV2KGJ1ZmZlcik7CiAJaWYgKCFuZXRkZXYpIHsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIG91dF9ub2RldjsKIAl9CisKIAkvKiBsb29rIGZvciBleGlzdGluZyBscG9ydCAqLwogCWlmIChmY29lX2hvc3RsaXN0X2xvb2t1cChuZXRkZXYpKSB7CiAJCXJjID0gLUVFWElTVDsKIAkJZ290byBvdXRfcHV0ZGV2OwogCX0KLQlmY29lX2V0aGRydl9nZXQobmV0ZGV2KTsKIAotCXJjID0gZmNvZV9pZl9jcmVhdGUobmV0ZGV2KTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJmY29lOiBGYWlsZWQgdG8gY3JlYXRlIGludGVyZmFjZSAoJXMpXG4iLAotCQkgICAgICAgbmV0ZGV2LT5uYW1lKTsKLQkJZmNvZV9ldGhkcnZfcHV0KG5ldGRldik7Ci0JCXJjID0gLUVJTzsKKwlmY29lID0gZmNvZV9pbnRlcmZhY2VfY3JlYXRlKG5ldGRldik7CisJaWYgKCFmY29lKSB7CisJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXRfcHV0ZGV2OwogCX0KKworCWxwb3J0ID0gZmNvZV9pZl9jcmVhdGUoZmNvZSwgJm5ldGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKGxwb3J0KSkgeworCQlwcmludGsoS0VSTl9FUlIgImZjb2U6IEZhaWxlZCB0byBjcmVhdGUgaW50ZXJmYWNlICglcylcbiIsCisJCSAgICAgICBuZXRkZXYtPm5hbWUpOworCQlyYyA9IC1FSU87CisJCWZjb2VfaW50ZXJmYWNlX2NsZWFudXAoZmNvZSk7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJLyogTWFrZSB0aGlzIHRoZSAibWFzdGVyIiBOX1BvcnQgKi8KKwlmY29lLT5jdGxyLmxwID0gbHBvcnQ7CisKKwkvKiBhZGQgdG8gbHBvcnRzIGxpc3QgKi8KKwlmY29lX2hvc3RsaXN0X2FkZChscG9ydCk7CisKKwkvKiBzdGFydCBGSVAgRGlzY292ZXJ5IGFuZCBGTE9HSSAqLworCWxwb3J0LT5ib290X3RpbWUgPSBqaWZmaWVzOworCWZjX2ZhYnJpY19sb2dpbihscG9ydCk7CisJaWYgKCFmY29lX2xpbmtfb2sobHBvcnQpKQorCQlmY29lX2N0bHJfbGlua191cCgmZmNvZS0+Y3Rscik7CisKIAlyYyA9IDA7CitvdXRfZnJlZToKKwkvKgorCSAqIFJlbGVhc2UgZnJvbSBpbml0IGluIGZjb2VfaW50ZXJmYWNlX2NyZWF0ZSgpLCBvbiBzdWNjZXNzIGxwb3J0CisJICogc2hvdWxkIGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgdGFrZW4gaW4gZmNvZV9pZl9jcmVhdGUoKS4KKwkgKi8KKwlmY29lX2ludGVyZmFjZV9wdXQoZmNvZSk7CiBvdXRfcHV0ZGV2OgogCWRldl9wdXQobmV0ZGV2KTsKIG91dF9ub2RldjoKKwlydG5sX3VubG9jaygpOworCW11dGV4X3VubG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwogCXJldHVybiByYzsKIH0KIAogbW9kdWxlX3BhcmFtX2NhbGwoY3JlYXRlLCBmY29lX2NyZWF0ZSwgTlVMTCwgTlVMTCwgU19JV1VTUik7CiBfX01PRFVMRV9QQVJNX1RZUEUoY3JlYXRlLCAic3RyaW5nIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGNyZWF0ZSwgIkNyZWF0ZSBmY29lIHBvcnQgdXNpbmcgbmV0IGRldmljZSBwYXNzZWQgaW4uIik7CitNT0RVTEVfUEFSTV9ERVNDKGNyZWF0ZSwgIkNyZWF0ZSBmY29lIGZjb2UgdXNpbmcgbmV0IGRldmljZSBwYXNzZWQgaW4uIik7CiBtb2R1bGVfcGFyYW1fY2FsbChkZXN0cm95LCBmY29lX2Rlc3Ryb3ksIE5VTEwsIE5VTEwsIFNfSVdVU1IpOwogX19NT0RVTEVfUEFSTV9UWVBFKGRlc3Ryb3ksICJzdHJpbmciKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVzdHJveSwgIkRlc3Ryb3kgZmNvZSBwb3J0Iik7CitNT0RVTEVfUEFSTV9ERVNDKGRlc3Ryb3ksICJEZXN0cm95IGZjb2UgZmNvZSIpOwogCiAvKioKICAqIGZjb2VfbGlua19vaygpIC0gQ2hlY2sgaWYgbGluayBpcyBvayBmb3IgdGhlIGZjX2xwb3J0CkBAIC0xNjMyLDM3ICsxNzg1LDQwIEBACiAgKi8KIGludCBmY29lX2xpbmtfb2soc3RydWN0IGZjX2xwb3J0ICpscCkKIHsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmMgPSBscG9ydF9wcml2KGxwKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZmMtPnJlYWxfZGV2OworCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQgPSBscG9ydF9wcml2KGxwKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG9ydC0+ZmNvZS0+bmV0ZGV2OwogCXN0cnVjdCBldGh0b29sX2NtZCBlY21kID0geyBFVEhUT09MX0dTRVQgfTsKLQlpbnQgcmMgPSAwOwogCi0JaWYgKChkZXYtPmZsYWdzICYgSUZGX1VQKSAmJiBuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJZGV2ID0gZmMtPnBoeXNfZGV2OwotCQlpZiAoZGV2LT5ldGh0b29sX29wcy0+Z2V0X3NldHRpbmdzKSB7Ci0JCQlkZXYtPmV0aHRvb2xfb3BzLT5nZXRfc2V0dGluZ3MoZGV2LCAmZWNtZCk7Ci0JCQlscC0+bGlua19zdXBwb3J0ZWRfc3BlZWRzICY9Ci0JCQkJfihGQ19QT1JUU1BFRURfMUdCSVQgfCBGQ19QT1JUU1BFRURfMTBHQklUKTsKLQkJCWlmIChlY21kLnN1cHBvcnRlZCAmIChTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYgfAotCQkJCQkgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwpKQotCQkJCWxwLT5saW5rX3N1cHBvcnRlZF9zcGVlZHMgfD0gRkNfUE9SVFNQRUVEXzFHQklUOwotCQkJaWYgKGVjbWQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCkKLQkJCQlscC0+bGlua19zdXBwb3J0ZWRfc3BlZWRzIHw9Ci0JCQkJCUZDX1BPUlRTUEVFRF8xMEdCSVQ7Ci0JCQlpZiAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwKQotCQkJCWxwLT5saW5rX3NwZWVkID0gRkNfUE9SVFNQRUVEXzFHQklUOwotCQkJaWYgKGVjbWQuc3BlZWQgPT0gU1BFRURfMTAwMDApCi0JCQkJbHAtPmxpbmtfc3BlZWQgPSBGQ19QT1JUU1BFRURfMTBHQklUOwotCQl9Ci0JfSBlbHNlCi0JCXJjID0gLTE7CisJaWYgKChkZXYtPmZsYWdzICYgSUZGX1VQKSAmJiBuZXRpZl9jYXJyaWVyX29rKGRldikgJiYKKwkgICAgKCFkZXZfZXRodG9vbF9nZXRfc2V0dGluZ3MoZGV2LCAmZWNtZCkpKSB7CisJCWxwLT5saW5rX3N1cHBvcnRlZF9zcGVlZHMgJj0KKwkJCX4oRkNfUE9SVFNQRUVEXzFHQklUIHwgRkNfUE9SVFNQRUVEXzEwR0JJVCk7CisJCWlmIChlY21kLnN1cHBvcnRlZCAmIChTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYgfAorCQkJCSAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCkpCisJCQlscC0+bGlua19zdXBwb3J0ZWRfc3BlZWRzIHw9IEZDX1BPUlRTUEVFRF8xR0JJVDsKKwkJaWYgKGVjbWQuc3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCkKKwkJCWxwLT5saW5rX3N1cHBvcnRlZF9zcGVlZHMgfD0KKwkJCQlGQ19QT1JUU1BFRURfMTBHQklUOworCQlpZiAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwKQorCQkJbHAtPmxpbmtfc3BlZWQgPSBGQ19QT1JUU1BFRURfMUdCSVQ7CisJCWlmIChlY21kLnNwZWVkID09IFNQRUVEXzEwMDAwKQorCQkJbHAtPmxpbmtfc3BlZWQgPSBGQ19QT1JUU1BFRURfMTBHQklUOwogCi0JcmV0dXJuIHJjOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOwogfQogCiAvKioKICAqIGZjb2VfcGVyY3B1X2NsZWFuKCkgLSBDbGVhciB0aGUgcGVuZGluZyBza2JzIGZvciBhbiBscG9ydAogICogQGxwOiB0aGUgZmNfbHBvcnQKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGZjb2VfY3JlYXRlX211dGV4IGhlbGQgdG8gc2luZ2xlLXRocmVhZCBjb21wbGV0aW9uLgorICoKKyAqIFRoaXMgZmx1c2hlcyB0aGUgcGVuZGluZyBza2JzIGJ5IGFkZGluZyBhIG5ldyBza2IgdG8gZWFjaCBxdWV1ZSBhbmQKKyAqIHdhaXRpbmcgdW50aWwgdGhleSBhcmUgYWxsIGZyZWVkLiAgVGhpcyBhc3N1cmVzIHVzIHRoYXQgbm90IG9ubHkgYXJlCisgKiB0aGVyZSBubyBwYWNrZXRzIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBscG9ydCwgYnV0IGFsc28gdGhhdCBhbnkKKyAqIHRocmVhZHMgYWxyZWFkeSBoYW5kbGluZyBwYWNrZXQgaGF2ZSByZXR1cm5lZC4KICAqLwogdm9pZCBmY29lX3BlcmNwdV9jbGVhbihzdHJ1Y3QgZmNfbHBvcnQgKmxwKQogewpAQCAtMTY4Nyw3ICsxODQzLDI1IEBACiAJCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQl9CiAJCX0KKworCQlpZiAoIXBwLT50aHJlYWQgfHwgIWNwdV9vbmxpbmUoY3B1KSkgeworCQkJc3Bpbl91bmxvY2tfYmgoJnBwLT5mY29lX3J4X2xpc3QubG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXNrYiA9IGRldl9hbGxvY19za2IoMCk7CisJCWlmICghc2tiKSB7CisJCQlzcGluX3VubG9ja19iaCgmcHAtPmZjb2VfcnhfbGlzdC5sb2NrKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNrYi0+ZGVzdHJ1Y3RvciA9IGZjb2VfcGVyY3B1X2ZsdXNoX2RvbmU7CisKKwkJX19za2JfcXVldWVfdGFpbCgmcHAtPmZjb2VfcnhfbGlzdCwgc2tiKTsKKwkJaWYgKHBwLT5mY29lX3J4X2xpc3QucWxlbiA9PSAxKQorCQkJd2FrZV91cF9wcm9jZXNzKHBwLT50aHJlYWQpOwogCQlzcGluX3VubG9ja19iaCgmcHAtPmZjb2VfcnhfbGlzdC5sb2NrKTsKKworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmY29lX2ZsdXNoX2NvbXBsZXRpb24pOwogCX0KIH0KIApAQCAtMTY5OSwxNiArMTg3MywxNiBAQAogICovCiB2b2lkIGZjb2VfY2xlYW5fcGVuZGluZ19xdWV1ZShzdHJ1Y3QgZmNfbHBvcnQgKmxwKQogewotCXN0cnVjdCBmY29lX3NvZnRjICAqZmMgPSBscG9ydF9wcml2KGxwKTsKKwlzdHJ1Y3QgZmNvZV9wb3J0ICAqcG9ydCA9IGxwb3J0X3ByaXYobHApOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlzcGluX2xvY2tfYmgoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7Ci0Jd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlKSkgIT0gTlVMTCkgewotCQlzcGluX3VubG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKKwl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJnBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZSkpICE9IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCXNwaW5fbG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKKwkJc3Bpbl9sb2NrX2JoKCZwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CiB9CiAKIC8qKgpAQCAtMTcyNSwyNCArMTg5OSwyMSBAQAogfQogCiAvKioKLSAqIGZjb2VfaG9zdGxpc3RfbG9va3VwX3NvZnRjKCkgLSBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGxwb3J0IGJ5IGEgZ2l2ZW4gZGV2aWNlCisgKiBmY29lX2hvc3RsaXN0X2xvb2t1cF9wb3J0KCkgLSBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGxwb3J0IGJ5IGEgZ2l2ZW4gZGV2aWNlCiAgKiBAZGV2OiB0aGlzIGlzIGN1cnJlbnRseSBwdHIgdG8gbmV0X2RldmljZQogICoKLSAqIFJldHVybnM6IE5VTEwgb3IgdGhlIGxvY2F0ZWQgZmNvZV9zb2Z0YworICogUmV0dXJuczogTlVMTCBvciB0aGUgbG9jYXRlZCBmY29lX3BvcnQKKyAqIExvY2tpbmc6IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIFJOTCBtdXRleCBoZWxkCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmNvZV9zb2Z0YyAqCi1mY29lX2hvc3RsaXN0X2xvb2t1cF9zb2Z0Yyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHN0cnVjdCBmY29lX2ludGVyZmFjZSAqCitmY29lX2hvc3RsaXN0X2xvb2t1cF9wb3J0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZjb2Vfc29mdGMgKmZjOworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKIAotCXJlYWRfbG9jaygmZmNvZV9ob3N0bGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjLCAmZmNvZV9ob3N0bGlzdCwgbGlzdCkgewotCQlpZiAoZmMtPnJlYWxfZGV2ID09IGRldikgewotCQkJcmVhZF91bmxvY2soJmZjb2VfaG9zdGxpc3RfbG9jayk7Ci0JCQlyZXR1cm4gZmM7Ci0JCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjb2UsICZmY29lX2hvc3RsaXN0LCBsaXN0KSB7CisJCWlmIChmY29lLT5uZXRkZXYgPT0gZGV2KQorCQkJcmV0dXJuIGZjb2U7CiAJfQotCXJlYWRfdW5sb2NrKCZmY29lX2hvc3RsaXN0X2xvY2spOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xNzUxLDE0ICsxOTIyLDE0IEBACiAgKiBAbmV0ZGV2OiBwdHIgdG8gbmV0X2RldmljZQogICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKKyAqIExvY2tpbmc6IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIFJUTkwgbXV0ZXggaGVsZAogICovCi1zdHJ1Y3QgZmNfbHBvcnQgKmZjb2VfaG9zdGxpc3RfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgc3RydWN0IGZjX2xwb3J0ICpmY29lX2hvc3RsaXN0X2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewotCXN0cnVjdCBmY29lX3NvZnRjICpmYzsKKwlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2U7CiAKLQlmYyA9IGZjb2VfaG9zdGxpc3RfbG9va3VwX3NvZnRjKG5ldGRldik7Ci0KLQlyZXR1cm4gKGZjKSA/IGZjLT5jdGxyLmxwIDogTlVMTDsKKwlmY29lID0gZmNvZV9ob3N0bGlzdF9sb29rdXBfcG9ydChuZXRkZXYpOworCXJldHVybiAoZmNvZSkgPyBmY29lLT5jdGxyLmxwIDogTlVMTDsKIH0KIAogLyoqCkBAIC0xNzY2LDQxICsxOTM3LDIzIEBACiAgKiBAbHA6IHB0ciB0byB0aGUgZmNfbHBvcnQgdG8gYmUgYWRkZWQKICAqCiAgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCisgKiBMb2NraW5nOiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBSVE5MIG11dGV4IGhlbGQKICAqLwotaW50IGZjb2VfaG9zdGxpc3RfYWRkKGNvbnN0IHN0cnVjdCBmY19scG9ydCAqbHApCitzdGF0aWMgaW50IGZjb2VfaG9zdGxpc3RfYWRkKGNvbnN0IHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCiB7Ci0Jc3RydWN0IGZjb2Vfc29mdGMgKmZjOworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKKwlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0OwogCi0JZmMgPSBmY29lX2hvc3RsaXN0X2xvb2t1cF9zb2Z0YyhmY29lX25ldGRldihscCkpOwotCWlmICghZmMpIHsKLQkJZmMgPSBscG9ydF9wcml2KGxwKTsKLQkJd3JpdGVfbG9ja19iaCgmZmNvZV9ob3N0bGlzdF9sb2NrKTsKLQkJbGlzdF9hZGRfdGFpbCgmZmMtPmxpc3QsICZmY29lX2hvc3RsaXN0KTsKLQkJd3JpdGVfdW5sb2NrX2JoKCZmY29lX2hvc3RsaXN0X2xvY2spOworCWZjb2UgPSBmY29lX2hvc3RsaXN0X2xvb2t1cF9wb3J0KGZjb2VfbmV0ZGV2KGxwb3J0KSk7CisJaWYgKCFmY29lKSB7CisJCXBvcnQgPSBscG9ydF9wcml2KGxwb3J0KTsKKwkJZmNvZSA9IHBvcnQtPmZjb2U7CisJCWxpc3RfYWRkX3RhaWwoJmZjb2UtPmxpc3QsICZmY29lX2hvc3RsaXN0KTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogZmNvZV9ob3N0bGlzdF9yZW1vdmUoKSAtIHJlbW92ZSBhIGxwb3J0IGZyb20gbHBvcnRzIGxpc3QKLSAqIEBscDogcHRyIHRvIHRoZSBmY19scG9ydCB0byBiZSByZW1vdmVkCi0gKgotICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICovCi1pbnQgZmNvZV9ob3N0bGlzdF9yZW1vdmUoY29uc3Qgc3RydWN0IGZjX2xwb3J0ICpscCkKLXsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7Ci0KLQlmYyA9IGZjb2VfaG9zdGxpc3RfbG9va3VwX3NvZnRjKGZjb2VfbmV0ZGV2KGxwKSk7Ci0JQlVHX09OKCFmYyk7Ci0Jd3JpdGVfbG9ja19iaCgmZmNvZV9ob3N0bGlzdF9sb2NrKTsKLQlsaXN0X2RlbCgmZmMtPmxpc3QpOwotCXdyaXRlX3VubG9ja19iaCgmZmNvZV9ob3N0bGlzdF9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKICAqIGZjb2VfaW5pdCgpIC0gZmNvZSBtb2R1bGUgbG9hZGluZyBpbml0aWFsaXphdGlvbgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCkBAIC0xODExLDggKzE5NjQsNyBAQAogCWludCByYyA9IDA7CiAJc3RydWN0IGZjb2VfcGVyY3B1X3MgKnA7CiAKLQlJTklUX0xJU1RfSEVBRCgmZmNvZV9ob3N0bGlzdCk7Ci0Jcndsb2NrX2luaXQoJmZjb2VfaG9zdGxpc3RfbG9jayk7CisJbXV0ZXhfbG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlwID0gJnBlcl9jcHUoZmNvZV9wZXJjcHUsIGNwdSk7CkBAIC0xODMwLDE1ICsxOTgyLDE4IEBACiAJLyogU2V0dXAgbGluayBjaGFuZ2Ugbm90aWZpY2F0aW9uICovCiAJZmNvZV9kZXZfc2V0dXAoKTsKIAotCWZjb2VfaWZfaW5pdCgpOworCXJjID0gZmNvZV9pZl9pbml0KCk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9mcmVlOwogCisJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlOgogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWZjb2VfcGVyY3B1X3RocmVhZF9kZXN0cm95KGNwdSk7CiAJfQotCisJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CiAJcmV0dXJuIHJjOwogfQogbW9kdWxlX2luaXQoZmNvZV9pbml0KTsKQEAgLTE4NTEsMjEgKzIwMDYsMzYgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmY29lX2V4aXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1OwotCXN0cnVjdCBmY29lX3NvZnRjICpmYywgKnRtcDsKKwlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2UsICp0bXA7CisJc3RydWN0IGZjb2VfcG9ydCAqcG9ydDsKKworCW11dGV4X2xvY2soJmZjb2VfY29uZmlnX211dGV4KTsKIAogCWZjb2VfZGV2X2NsZWFudXAoKTsKIAogCS8qIHJlbGVhc2VzIHRoZSBhc3NvY2lhdGVkIGZjb2UgaG9zdHMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmMsIHRtcCwgJmZjb2VfaG9zdGxpc3QsIGxpc3QpCi0JCWZjb2VfaWZfZGVzdHJveShmYy0+cmVhbF9kZXYpOworCXJ0bmxfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmY29lLCB0bXAsICZmY29lX2hvc3RsaXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZmY29lLT5saXN0KTsKKwkJcG9ydCA9IGxwb3J0X3ByaXYoZmNvZS0+Y3Rsci5scCk7CisJCWZjb2VfaW50ZXJmYWNlX2NsZWFudXAoZmNvZSk7CisJCXNjaGVkdWxlX3dvcmsoJnBvcnQtPmRlc3Ryb3lfd29yayk7CisJfQorCXJ0bmxfdW5sb2NrKCk7CiAKIAl1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmZmNvZV9jcHVfbm90aWZpZXIpOwogCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKIAkJZmNvZV9wZXJjcHVfdGhyZWFkX2Rlc3Ryb3koY3B1KTsKLQl9CiAKLQkvKiBkZXRhY2ggZnJvbSBzY3NpIHRyYW5zcG9ydCAqLworCW11dGV4X3VubG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOworCisJLyogZmx1c2ggYW55IGFzeW5jcm9ub3VzIGludGVyZmFjZSBkZXN0cm95cywKKwkgKiB0aGlzIHNob3VsZCBoYXBwZW4gYWZ0ZXIgdGhlIG5ldGRldiBub3RpZmllciBpcyB1bnJlZ2lzdGVyZWQgKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJLyogZGV0YWNoIGZyb20gc2NzaSB0cmFuc3BvcnQKKwkgKiBtdXN0IGhhcHBlbiBhZnRlciBhbGwgZGVzdHJveXMgYXJlIGRvbmUsIHRoZXJlZm9yIGFmdGVyIHRoZSBmbHVzaCAqLwogCWZjb2VfaWZfZXhpdCgpOwogfQogbW9kdWxlX2V4aXQoZmNvZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuaCBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuaAppbmRleCAwZDcyNGZhLi5jZTdmNjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmgKKysrIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5oCkBAIC0zNyw4ICszNyw4IEBACiAKICNkZWZpbmUgRkNPRV9NQVhfT1VUU1RBTkRJTkdfQ09NTUFORFMJMTAyNAogCi0jZGVmaW5lIEZDT0VfTUlOX1hJRAkJMHgwMDAxCS8qIHRoZSBtaW4geGlkIHN1cHBvcnRlZCBieSBmY29lX3N3ICovCi0jZGVmaW5lIEZDT0VfTUFYX1hJRAkJMHgwN2VmCS8qIHRoZSBtYXggeGlkIHN1cHBvcnRlZCBieSBmY29lX3N3ICovCisjZGVmaW5lIEZDT0VfTUlOX1hJRAkJMHgwMDAwCS8qIHRoZSBtaW4geGlkIHN1cHBvcnRlZCBieSBmY29lX3N3ICovCisjZGVmaW5lIEZDT0VfTUFYX1hJRAkJMHgwRkZGCS8qIHRoZSBtYXggeGlkIHN1cHBvcnRlZCBieSBmY29lX3N3ICovCiAKIHVuc2lnbmVkIGludCBmY29lX2RlYnVnX2xvZ2dpbmc7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWdfbG9nZ2luZywgZmNvZV9kZWJ1Z19sb2dnaW5nLCBpbnQsIFNfSVJVR098U19JV1VTUik7CkBAIC01Myw3ICs1Myw3IEBACiAJCWRvIHsJCQkJCQkJXAogCQkJQ01EOwkJCQkJCVwKIAkJfSB3aGlsZSAoMCk7CQkJCQkJXAotfSB3aGlsZSAoMCk7Cit9IHdoaWxlICgwKQogCiAjZGVmaW5lIEZDT0VfREJHKGZtdCwgYXJncy4uLikJCQkJCQlcCiAJRkNPRV9DSEVDS19MT0dHSU5HKEZDT0VfTE9HR0lORywJCQkJXApAQCAtNjEsNyArNjEsNyBAQAogCiAjZGVmaW5lIEZDT0VfTkVUREVWX0RCRyhuZXRkZXYsIGZtdCwgYXJncy4uLikJCQlcCiAJRkNPRV9DSEVDS19MT0dHSU5HKEZDT0VfTkVUREVWX0xPR0dJTkcsCQkJXAotCQkJICAgcHJpbnRrKEtFUk5fSU5GTyAiZmNvZTogJXMiIGZtdCwJXAorCQkJICAgcHJpbnRrKEtFUk5fSU5GTyAiZmNvZTogJXM6ICIgZm10LAlcCiAJCQkJICBuZXRkZXYtPm5hbWUsICMjYXJncyk7KQogCiAvKgpAQCAtNzUsMjYgKzc1LDM2IEBACiB9OwogCiAvKgotICogdGhlIGZjb2Ugc3cgdHJhbnNwb3J0IHByaXZhdGUgZGF0YQorICogYW4gRkNvRSBpbnRlcmZhY2UsIDE6MSB3aXRoIG5ldGRldgogICovCi1zdHJ1Y3QgZmNvZV9zb2Z0YyB7CitzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnBoeXNfZGV2OwkJLyogZGV2aWNlIHdpdGggZXRodG9vbF9vcHMgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBwYWNrZXRfdHlwZSAgZmNvZV9wYWNrZXRfdHlwZTsKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgIGZpcF9wYWNrZXRfdHlwZTsKKwlzdHJ1Y3QgZmNvZV9jdGxyIGN0bHI7CisJc3RydWN0IGZjX2V4Y2hfbWdyICpvZW07CQkvKiBvZmZsb2FkIGV4Y2hhbmdlIG1hbmFnZXIgKi8KKwlzdHJ1Y3Qga3JlZiBrcmVmOworfTsKKworLyoKKyAqIHRoZSBGQ29FIHByaXZhdGUgc3RydWN0dXJlIHRoYXQncyBhbGxvY2F0ZWQgYWxvbmcgd2l0aCB0aGUKKyAqIFNjc2lfSG9zdCBhbmQgbGliZmMgZmNfbHBvcnQgc3RydWN0dXJlcworICovCitzdHJ1Y3QgZmNvZV9wb3J0IHsKKwlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2U7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZjb2VfcGVuZGluZ19xdWV1ZTsKIAl1OAlmY29lX3BlbmRpbmdfcXVldWVfYWN0aXZlOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwkJLyogcXVldWUgdGltZXIgKi8KLQlzdHJ1Y3QgZmNvZV9jdGxyIGN0bHI7CisJc3RydWN0IHdvcmtfc3RydWN0IGRlc3Ryb3lfd29yazsJLyogdG8gcHJldmVudCBydG5sIGRlYWRsb2NrcyAqLwogfTsKIAotI2RlZmluZSBmY29lX2Zyb21fY3RscihmYykgY29udGFpbmVyX29mKGZjLCBzdHJ1Y3QgZmNvZV9zb2Z0YywgY3RscikKKyNkZWZpbmUgZmNvZV9mcm9tX2N0bHIoZmlwKSBjb250YWluZXJfb2YoZmlwLCBzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UsIGN0bHIpCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKmZjb2VfbmV0ZGV2KAotCWNvbnN0IHN0cnVjdCBmY19scG9ydCAqbHApCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpmY29lX25ldGRldihjb25zdCBzdHJ1Y3QgZmNfbHBvcnQgKmxwKQogewotCXJldHVybiAoKHN0cnVjdCBmY29lX3NvZnRjICopbHBvcnRfcHJpdihscCkpLT5yZWFsX2RldjsKKwlyZXR1cm4gKChzdHJ1Y3QgZmNvZV9wb3J0ICopbHBvcnRfcHJpdihscCkpLT5mY29lLT5uZXRkZXY7CiB9CiAKICNlbmRpZiAvKiBfRkNPRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jCmluZGV4IGY1NDQzNDAuLjYyYTRjMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9saWJmY29lLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAkJZG8gewkJCQkJCQlcCiAJCQlDTUQ7CQkJCQkJXAogCQl9IHdoaWxlICgwKTsJCQkJCQlcCi19IHdoaWxlICgwKTsKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgTElCRkNPRV9EQkcoZm10LCBhcmdzLi4uKQkJCQkJXAogCUxJQkZDT0VfQ0hFQ0tfTE9HR0lORyhMSUJGQ09FX0xPR0dJTkcsCQkJCVwKQEAgLTE0OCwxMyArMTQ4LDE3IEBACiAgKi8KIHZvaWQgZmNvZV9jdGxyX2Rlc3Ryb3koc3RydWN0IGZjb2VfY3RsciAqZmlwKQogewotCWZsdXNoX3dvcmsoJmZpcC0+cmVjdl93b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZmaXAtPnJlY3Zfd29yayk7CisJc3Bpbl9sb2NrX2JoKCZmaXAtPmZpcF9yZWN2X2xpc3QubG9jayk7CisJX19za2JfcXVldWVfcHVyZ2UoJmZpcC0+ZmlwX3JlY3ZfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJmZpcC0+ZmlwX3JlY3ZfbGlzdC5sb2NrKTsKKwogCXNwaW5fbG9ja19iaCgmZmlwLT5sb2NrKTsKIAlmaXAtPnN0YXRlID0gRklQX1NUX0RJU0FCTEVEOwogCWZjb2VfY3Rscl9yZXNldF9mY2ZzKGZpcCk7CiAJc3Bpbl91bmxvY2tfYmgoJmZpcC0+bG9jayk7CiAJZGVsX3RpbWVyX3N5bmMoJmZpcC0+dGltZXIpOwotCWZsdXNoX3dvcmsoJmZpcC0+bGlua193b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZmaXAtPmxpbmtfd29yayk7CiB9CiBFWFBPUlRfU1lNQk9MKGZjb2VfY3Rscl9kZXN0cm95KTsKIApAQCAtNDEzLDEwICs0MTcsMTggQEAKIAlzdHJ1Y3QgZmlwX21hY19kZXNjICptYWM7CiAJc3RydWN0IGZjb2VfZmNmICpmY2Y7CiAJc2l6ZV90IGRsZW47CisJdTE2IGZpcF9mbGFnczsKIAogCWZjZiA9IGZpcC0+c2VsX2ZjZjsKIAlpZiAoIWZjZikKIAkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBzZXQgZmxhZ3MgYWNjb3JkaW5nIHRvIGJvdGggRkNGIGFuZCBscG9ydCdzIGNhcGFiaWxpdHkgb24gU1BNQSAqLworCWZpcF9mbGFncyA9IGZjZi0+ZmxhZ3M7CisJZmlwX2ZsYWdzICY9IGZpcC0+c3BtYSA/IEZJUF9GTF9TUE1BIHwgRklQX0ZMX0ZQTUEgOiBGSVBfRkxfRlBNQTsKKwlpZiAoIWZpcF9mbGFncykKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlkbGVuID0gc2l6ZW9mKHN0cnVjdCBmaXBfZW5jYXBzKSArIHNrYi0+bGVuOwkvKiBsZW4gYmVmb3JlIHB1c2ggKi8KIAljYXAgPSAoc3RydWN0IGZpcF9lbmNhcHNfaGVhZCAqKXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpjYXApKTsKIApAQCAtNDI5LDkgKzQ0MSw3IEBACiAJY2FwLT5maXAuZmlwX29wID0gaHRvbnMoRklQX09QX0xTKTsKIAljYXAtPmZpcC5maXBfc3ViY29kZSA9IEZJUF9TQ19SRVE7CiAJY2FwLT5maXAuZmlwX2RsX2xlbiA9IGh0b25zKChkbGVuICsgc2l6ZW9mKCptYWMpKSAvIEZJUF9CUFcpOwotCWNhcC0+ZmlwLmZpcF9mbGFncyA9IGh0b25zKEZJUF9GTF9GUE1BKTsKLQlpZiAoZmlwLT5zcG1hKQotCQljYXAtPmZpcC5maXBfZmxhZ3MgfD0gaHRvbnMoRklQX0ZMX1NQTUEpOworCWNhcC0+ZmlwLmZpcF9mbGFncyA9IGh0b25zKGZpcF9mbGFncyk7CiAKIAljYXAtPmVuY2Fwcy5mZF9kZXNjLmZpcF9kdHlwZSA9IGR0eXBlOwogCWNhcC0+ZW5jYXBzLmZkX2Rlc2MuZmlwX2RsZW4gPSBkbGVuIC8gRklQX0JQVzsKQEAgLTg3OSw3ICs4ODksNyBAQAogCXN0YXRzLT5SeEZyYW1lcysrOwogCXN0YXRzLT5SeFdvcmRzICs9IHNrYi0+bGVuIC8gRklQX0JQVzsKIAotCWZjX2V4Y2hfcmVjdihscCwgbHAtPmVtcCwgZnApOworCWZjX2V4Y2hfcmVjdihscCwgZnApOwogCXJldHVybjsKIAogbGVuX2VycjoKQEAgLTExMDQsNyArMTExNCw2IEBACiAJc3RydWN0IGZjb2VfZmNmICpzZWw7CiAJc3RydWN0IGZjb2VfZmNmICpmY2Y7CiAJdW5zaWduZWQgbG9uZyBuZXh0X3RpbWVyID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoRklQX1ZOX0tBX1BFUklPRCk7Ci0JREVDTEFSRV9NQUNfQlVGKGJ1Zik7CiAJdTggc2VuZF9jdGxyX2thOwogCXU4IHNlbmRfcG9ydF9rYTsKIApAQCAtMTEyOCw5ICsxMTM3LDggQEAKIAkJZmNmID0gc2VsOwkJLyogdGhlIG9sZCBGQ0YgbWF5IGhhdmUgYmVlbiBmcmVlZCAqLwogCQlpZiAoc2VsKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJsaWJmY29lOiBob3N0JWQ6IEZJUCBzZWxlY3RlZCAiCi0JCQkgICAgICAgIkZpYnJlLUNoYW5uZWwgRm9yd2FyZGVyIE1BQyAlc1xuIiwKLQkJCSAgICAgICBmaXAtPmxwLT5ob3N0LT5ob3N0X25vLAotCQkJICAgICAgIHByaW50X21hYyhidWYsIHNlbC0+ZmNmX21hYykpOworCQkJICAgICAgICJGaWJyZS1DaGFubmVsIEZvcndhcmRlciBNQUMgJXBNXG4iLAorCQkJICAgICAgIGZpcC0+bHAtPmhvc3QtPmhvc3Rfbm8sIHNlbC0+ZmNmX21hYyk7CiAJCQltZW1jcHkoZmlwLT5kZXN0X2FkZHIsIHNlbC0+ZmNmX21hYywgRVRIX0FMRU4pOwogCQkJZmlwLT5wb3J0X2thX3RpbWUgPSBqaWZmaWVzICsKIAkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoRklQX1ZOX0tBX1BFUklPRCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX2Zjcy5jIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19mY3MuYwppbmRleCAwN2U2ZWVkLi41MGRiM2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX2Zjcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfZmNzLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZuaWMtPmZuaWNfbG9jaywgZmxhZ3MpOwogCi0JCWZjX2V4Y2hfcmVjdihscCwgbHAtPmVtcCwgZnApOworCQlmY19leGNoX3JlY3YobHAsIGZwKTsKIAl9CiAKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfbWFpbi5jIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19tYWluLmMKaW5kZXggMmMyNjZjMC4uNzFjN2JiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19tYWluLmMKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19tYWluLmMKQEAgLTY3MSwxNCArNjcxLDYgQEAKIAlscC0+bGlua191cCA9IDA7CiAJbHAtPnR0ID0gZm5pY190cmFuc3BvcnRfdGVtcGxhdGU7CiAKLQlscC0+ZW1wID0gZmNfZXhjaF9tZ3JfYWxsb2MobHAsIEZDX0NMQVNTXzMsCi0JCQkJICAgIEZDUElPX0hPU1RfRVhDSF9SQU5HRV9TVEFSVCwKLQkJCQkgICAgRkNQSU9fSE9TVF9FWENIX1JBTkdFX0VORCk7Ci0JaWYgKCFscC0+ZW1wKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX291dF9yZW1vdmVfc2NzaV9ob3N0OwotCX0KLQogCWxwLT5tYXhfcmV0cnlfY291bnQgPSBmbmljLT5jb25maWcuZmxvZ2lfcmV0cmllczsKIAlscC0+bWF4X3Jwb3J0X3JldHJ5X2NvdW50ID0gZm5pYy0+Y29uZmlnLnBsb2dpX3JldHJpZXM7CiAJbHAtPnNlcnZpY2VfcGFyYW1zID0gKEZDUF9TUFBGX0lOSVRfRkNOIHwgRkNQX1NQUEZfUkRfWFJEWV9ESVMgfApAQCAtNjkzLDEyICs2ODUsMTggQEAKIAlmY19zZXRfd3dubihscCwgZm5pYy0+Y29uZmlnLm5vZGVfd3duKTsKIAlmY19zZXRfd3dwbihscCwgZm5pYy0+Y29uZmlnLnBvcnRfd3duKTsKIAotCWZjX2V4Y2hfaW5pdChscCk7CiAJZmNfbHBvcnRfaW5pdChscCk7CisJZmNfZXhjaF9pbml0KGxwKTsKIAlmY19lbHNjdF9pbml0KGxwKTsKIAlmY19ycG9ydF9pbml0KGxwKTsKIAlmY19kaXNjX2luaXQobHApOwogCisJaWYgKCFmY19leGNoX21ncl9hbGxvYyhscCwgRkNfQ0xBU1NfMywgRkNQSU9fSE9TVF9FWENIX1JBTkdFX1NUQVJULAorCQkJICAgICAgIEZDUElPX0hPU1RfRVhDSF9SQU5HRV9FTkQsIE5VTEwpKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9yZW1vdmVfc2NzaV9ob3N0OworCX0KKwogCWZjX2xwb3J0X2NvbmZpZyhscCk7CiAKIAlpZiAoZmNfc2V0X21mcyhscCwgZm5pYy0+Y29uZmlnLm1heGRhdGFmaWVsZHNpemUgKwpAQCAtNzM4LDcgKzczNiw3IEBACiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfZnJlZV9leGNoX21ncjoKLQlmY19leGNoX21ncl9mcmVlKGxwLT5lbXApOworCWZjX2V4Y2hfbWdyX2ZyZWUobHApOwogZXJyX291dF9yZW1vdmVfc2NzaV9ob3N0OgogCWZjX3JlbW92ZV9ob3N0KGZuaWMtPmxwb3J0LT5ob3N0KTsKIAlzY3NpX3JlbW92ZV9ob3N0KGZuaWMtPmxwb3J0LT5ob3N0KTsKQEAgLTgyNyw3ICs4MjUsNyBAQAogCiAJZmNfcmVtb3ZlX2hvc3QoZm5pYy0+bHBvcnQtPmhvc3QpOwogCXNjc2lfcmVtb3ZlX2hvc3QoZm5pYy0+bHBvcnQtPmhvc3QpOwotCWZjX2V4Y2hfbWdyX2ZyZWUoZm5pYy0+bHBvcnQtPmVtcCk7CisJZmNfZXhjaF9tZ3JfZnJlZShmbmljLT5scG9ydCk7CiAJdm5pY19kZXZfbm90aWZ5X3Vuc2V0KGZuaWMtPnZkZXYpOwogCWZuaWNfZnJlZV92bmljX3Jlc291cmNlcyhmbmljKTsKIAlmbmljX2ZyZWVfaW50cihmbmljKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYwppbmRleCAxNjZkOTY0Li5iYjJjNjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKKysrIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCkBAIC00MjE3LDcgKzQyMTcsNyBAQAogCWlmICghdmhvc3QtPnRyYWNlKQogCQlnb3RvIGZyZWVfZGlzY19idWZmZXI7CiAKLQl2aG9zdC0+dGd0X3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9remFsbG9jX3Bvb2woSUJNVkZDX1RHVF9NRU1QT09MX1NaLAorCXZob3N0LT50Z3RfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChJQk1WRkNfVEdUX01FTVBPT0xfU1osCiAJCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGlibXZmY190YXJnZXQpKTsKIAogCWlmICghdmhvc3QtPnRndF9wb29sKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggNGI2M2RkNi4uMTYzMjQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMTE5OSw3ICsxMTk5LDcgQEAKIAogCXN0cnVjdCBhdGFfaG9zdCBhdGFfaG9zdDsKIAljaGFyIGlwcl9jbWRfbGFiZWxbOF07Ci0jZGVmaW5lIElQUl9DTURfTEFCRUwJCSJpcHJfY21uZCIKKyNkZWZpbmUgSVBSX0NNRF9MQUJFTAkJImlwcl9jbWQiCiAJc3RydWN0IGlwcl9jbW5kICppcHJfY21uZF9saXN0W0lQUl9OVU1fQ01EX0JMS1NdOwogCXUzMiBpcHJfY21uZF9saXN0X2RtYVtJUFJfTlVNX0NNRF9CTEtTXTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKaW5kZXggNTE4ZGJkOS4uMmIxYjgzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwpAQCAtOTksNiArOTksMjcgQEAKIAlyZXR1cm4gdG90YWxfY29uc3VtZWQ7CiB9CiAKKy8qKgorICogaXNjc2lfc3dfc2tfc3RhdGVfY2hlY2sgLSBjaGVjayBzb2NrZXQgc3RhdGUKKyAqIEBzazogc29ja2V0CisgKgorICogSWYgdGhlIHNvY2tldCBpcyBpbiBDTE9TRSBvciBDTE9TRV9XQUlUIHdlIHNob3VsZAorICogbm90IGNsb3NlIHRoZSBjb25uZWN0aW9uIGlmIHRoZXJlIGlzIHN0aWxsIHNvbWUKKyAqIGRhdGEgcGVuZGluZy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNjc2lfc3dfc2tfc3RhdGVfY2hlY2soc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gKHN0cnVjdCBpc2NzaV9jb25uKilzay0+c2tfdXNlcl9kYXRhOworCisJaWYgKChzay0+c2tfc3RhdGUgPT0gVENQX0NMT1NFX1dBSVQgfHwgc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkgJiYKKwkgICAgIWF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykpIHsKKwkJSVNDU0lfU1dfVENQX0RCRyhjb25uLCAiVENQX0NMT1NFfFRDUF9DTE9TRV9XQUlUXG4iKTsKKwkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9UQ1BfQ09OTl9DTE9TRSk7CisJCXJldHVybiAtRUNPTk5SRVNFVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGlzY3NpX3N3X3RjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWcpCiB7CiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBzay0+c2tfdXNlcl9kYXRhOwpAQCAtMTE3LDYgKzEzOCw4IEBACiAJcmRfZGVzYy5jb3VudCA9IDE7CiAJdGNwX3JlYWRfc29jayhzaywgJnJkX2Rlc2MsIGlzY3NpX3N3X3RjcF9yZWN2KTsKIAorCWlzY3NpX3N3X3NrX3N0YXRlX2NoZWNrKHNrKTsKKwogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiAKIAkvKiBJZiB3ZSBoYWQgdG8gKGF0b21pY2FsbHkpIG1hcCBhIGhpZ2htZW0gcGFnZSwKQEAgLTEzNywxMyArMTYwLDcgQEAKIAljb25uID0gKHN0cnVjdCBpc2NzaV9jb25uKilzay0+c2tfdXNlcl9kYXRhOwogCXNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwogCi0JaWYgKChzay0+c2tfc3RhdGUgPT0gVENQX0NMT1NFX1dBSVQgfHwKLQkgICAgIHNrLT5za19zdGF0ZSA9PSBUQ1BfQ0xPU0UpICYmCi0JICAgICFhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpKSB7Ci0JCUlTQ1NJX1NXX1RDUF9EQkcoY29ubiwgImlzY3NpX3RjcF9zdGF0ZV9jaGFuZ2U6ICIKLQkJCQkgIlRDUF9DTE9TRXxUQ1BfQ0xPU0VfV0FJVFxuIik7Ci0JCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwotCX0KKwlpc2NzaV9zd19za19zdGF0ZV9jaGVjayhzayk7CiAKIAl0Y3BfY29ubiA9IGNvbm4tPmRkX2RhdGE7CiAJdGNwX3N3X2Nvbm4gPSB0Y3BfY29ubi0+ZGRfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19kaXNjLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZGlzYy5jCmluZGV4IDZmYWJmNjYuLmM0ODc5OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19kaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2Rpc2MuYwpAQCAtNDMsNDcgKzQzLDE0IEBACiAjZGVmaW5lIEZDX0RJU0NfUkVUUllfTElNSVQJMwkvKiBtYXggcmV0cmllcyAqLwogI2RlZmluZSBGQ19ESVNDX1JFVFJZX0RFTEFZCTUwMFVMCS8qIChtc2VjcykgZGVsYXkgKi8KIAotI2RlZmluZQlGQ19ESVNDX0RFTEFZCQkzCi0KIHN0YXRpYyB2b2lkIGZjX2Rpc2NfZ3BuX2Z0X3JlcShzdHJ1Y3QgZmNfZGlzYyAqKTsKIHN0YXRpYyB2b2lkIGZjX2Rpc2NfZ3BuX2Z0X3Jlc3Aoc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKiwgdm9pZCAqKTsKLXN0YXRpYyBpbnQgZmNfZGlzY19uZXdfdGFyZ2V0KHN0cnVjdCBmY19kaXNjICosIHN0cnVjdCBmY19ycG9ydCAqLAotCQkJICAgICAgc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzICopOwotc3RhdGljIHZvaWQgZmNfZGlzY19kZWxfdGFyZ2V0KHN0cnVjdCBmY19kaXNjICosIHN0cnVjdCBmY19ycG9ydCAqKTsKLXN0YXRpYyB2b2lkIGZjX2Rpc2NfZG9uZShzdHJ1Y3QgZmNfZGlzYyAqKTsKK3N0YXRpYyB2b2lkIGZjX2Rpc2NfZG9uZShzdHJ1Y3QgZmNfZGlzYyAqLCBlbnVtIGZjX2Rpc2NfZXZlbnQpOwogc3RhdGljIHZvaWQgZmNfZGlzY190aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKLXN0YXRpYyB2b2lkIGZjX2Rpc2Nfc2luZ2xlKHN0cnVjdCBmY19kaXNjICosIHN0cnVjdCBmY19kaXNjX3BvcnQgKik7CitzdGF0aWMgaW50IGZjX2Rpc2Nfc2luZ2xlKHN0cnVjdCBmY19scG9ydCAqLCBzdHJ1Y3QgZmNfZGlzY19wb3J0ICopOwogc3RhdGljIHZvaWQgZmNfZGlzY19yZXN0YXJ0KHN0cnVjdCBmY19kaXNjICopOwogCiAvKioKLSAqIGZjX2Rpc2NfbG9va3VwX3Jwb3J0KCkgLSBsb29rdXAgYSByZW1vdGUgcG9ydCBieSBwb3J0X2lkCi0gKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCi0gKiBAcG9ydF9pZDogcmVtb3RlIHBvcnQgcG9ydF9pZCB0byBtYXRjaAotICovCi1zdHJ1Y3QgZmNfcnBvcnQgKmZjX2Rpc2NfbG9va3VwX3Jwb3J0KGNvbnN0IHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCi0JCQkJICAgICAgdTMyIHBvcnRfaWQpCi17Ci0JY29uc3Qgc3RydWN0IGZjX2Rpc2MgKmRpc2MgPSAmbHBvcnQtPmRpc2M7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgKmZvdW5kID0gTlVMTDsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGE7Ci0JaW50IGRpc2NfZm91bmQgPSAwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZGF0YSwgJmRpc2MtPnJwb3J0cywgcGVlcnMpIHsKLQkJcnBvcnQgPSBQUklWX1RPX1JQT1JUKHJkYXRhKTsKLQkJaWYgKHJwb3J0LT5wb3J0X2lkID09IHBvcnRfaWQpIHsKLQkJCWRpc2NfZm91bmQgPSAxOwotCQkJZm91bmQgPSBycG9ydDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCFkaXNjX2ZvdW5kKQotCQlmb3VuZCA9IE5VTEw7Ci0KLQlyZXR1cm4gZm91bmQ7Ci19Ci0KLS8qKgogICogZmNfZGlzY19zdG9wX3Jwb3J0cygpIC0gZGVsZXRlIGFsbCB0aGUgcmVtb3RlIHBvcnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbHBvcnQKICAqIEBkaXNjOiBUaGUgZGlzY292ZXJ5IGpvYiB0byBzdG9wIHJwb3J0cyBvbgogICoKQEAgLTkzLDcwICs2MCwxNyBAQAogdm9pZCBmY19kaXNjX3N0b3BfcnBvcnRzKHN0cnVjdCBmY19kaXNjICpkaXNjKQogewogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEsICpuZXh0OworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSwgKm5leHQ7CiAKIAlscG9ydCA9IGRpc2MtPmxwb3J0OwogCiAJbXV0ZXhfbG9jaygmZGlzYy0+ZGlzY19tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJkYXRhLCBuZXh0LCAmZGlzYy0+cnBvcnRzLCBwZWVycykgewotCQlycG9ydCA9IFBSSVZfVE9fUlBPUlQocmRhdGEpOwotCQlsaXN0X2RlbCgmcmRhdGEtPnBlZXJzKTsKLQkJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihycG9ydCk7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJkYXRhLCBuZXh0LCAmZGlzYy0+cm9ndWVfcnBvcnRzLCBwZWVycykgewotCQlycG9ydCA9IFBSSVZfVE9fUlBPUlQocmRhdGEpOwotCQlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKHJwb3J0KTsKLQl9Ci0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmRhdGEsIG5leHQsICZkaXNjLT5ycG9ydHMsIHBlZXJzKQorCQlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKHJkYXRhKTsKIAltdXRleF91bmxvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOwogfQogCiAvKioKLSAqIGZjX2Rpc2NfcnBvcnRfY2FsbGJhY2soKSAtIEV2ZW50IGhhbmRsZXIgZm9yIHJwb3J0IGV2ZW50cwotICogQGxwb3J0OiBUaGUgbHBvcnQgd2hpY2ggaXMgcmVjZWl2aW5nIHRoZSBldmVudAotICogQHJwb3J0OiBUaGUgcnBvcnQgd2hpY2ggdGhlIGV2ZW50IGhhcyBvY2N1cmVkIG9uCi0gKiBAZXZlbnQ6IFRoZSBldmVudCB0aGF0IG9jY3VyZWQKLSAqCi0gKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIHNob3VsZCBub3QgYmUgaGVsZCB3aGVuIGNhbGxpbmcKLSAqCQkgdGhpcyBmdW5jdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgZmNfZGlzY19ycG9ydF9jYWxsYmFjayhzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAotCQkJCSAgIHN0cnVjdCBmY19ycG9ydCAqcnBvcnQsCi0JCQkJICAgZW51bSBmY19ycG9ydF9ldmVudCBldmVudCkKLXsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKLQlzdHJ1Y3QgZmNfZGlzYyAqZGlzYyA9ICZscG9ydC0+ZGlzYzsKLQotCUZDX0RJU0NfREJHKGRpc2MsICJSZWNlaXZlZCBhICVkIGV2ZW50IGZvciBwb3J0ICglNngpXG4iLCBldmVudCwKLQkJICAgIHJwb3J0LT5wb3J0X2lkKTsKLQotCXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIFJQT1JUX0VWX0NSRUFURUQ6Ci0JCWlmIChkaXNjKSB7Ci0JCQltdXRleF9sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKLQkJCWxpc3RfYWRkX3RhaWwoJnJkYXRhLT5wZWVycywgJmRpc2MtPnJwb3J0cyk7Ci0JCQltdXRleF91bmxvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgUlBPUlRfRVZfTE9HTzoKLQljYXNlIFJQT1JUX0VWX0ZBSUxFRDoKLQljYXNlIFJQT1JUX0VWX1NUT1A6Ci0JCW11dGV4X2xvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOwotCQltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwotCQlpZiAocmRhdGEtPnRyYW5zX3N0YXRlID09IEZDX1BPUlRTVEFURV9ST0dVRSkKLQkJCWxpc3RfZGVsKCZyZGF0YS0+cGVlcnMpOwotCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7Ci0JCW11dGV4X3VubG9jaygmZGlzYy0+ZGlzY19tdXRleCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotfQotCi0vKioKICAqIGZjX2Rpc2NfcmVjdl9yc2NuX3JlcSgpIC0gSGFuZGxlIFJlZ2lzdGVyZWQgU3RhdGUgQ2hhbmdlIE5vdGlmaWNhdGlvbiAoUlNDTikKICAqIEBzcDogQ3VycmVudCBzZXF1ZW5jZSBvZiB0aGUgUlNDTiBleGNoYW5nZQogICogQGZwOiBSU0NOIEZyYW1lCkBAIC0xNjksOCArODMsNiBAQAogCQkJCSAgc3RydWN0IGZjX2Rpc2MgKmRpc2MpCiB7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YTsKIAlzdHJ1Y3QgZmNfZWxzX3JzY24gKnJwOwogCXN0cnVjdCBmY19lbHNfcnNjbl9wYWdlICpwcDsKIAlzdHJ1Y3QgZmNfc2VxX2Vsc19kYXRhIHJqdF9kYXRhOwpAQCAtMjI0LDEwICsxMzYsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQkJZHAtPmxwID0gbHBvcnQ7Ci0JCQlkcC0+aWRzLnBvcnRfaWQgPSBudG9oMjQocHAtPnJzY25fZmlkKTsKLQkJCWRwLT5pZHMucG9ydF9uYW1lID0gLTE7Ci0JCQlkcC0+aWRzLm5vZGVfbmFtZSA9IC0xOwotCQkJZHAtPmlkcy5yb2xlcyA9IEZDX1JQT1JUX1JPTEVfVU5LTk9XTjsKKwkJCWRwLT5wb3J0X2lkID0gbnRvaDI0KHBwLT5yc2NuX2ZpZCk7CiAJCQlsaXN0X2FkZF90YWlsKCZkcC0+cGVlcnMsICZkaXNjX3BvcnRzKTsKIAkJCWJyZWFrOwogCQljYXNlIEVMU19BRERSX0ZNVF9BUkVBOgpAQCAtMjQwLDYgKzE0OSwxOSBAQAogCQl9CiAJfQogCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLCBFTFNfTFNfQUNDLCBOVUxMKTsKKworCS8qCisJICogSWYgbm90IGRvaW5nIGEgY29tcGxldGUgcmVkaXNjb3ZlcnksIGRvIEdQTl9JRCBvbgorCSAqIHRoZSBpbmRpdmlkdWFsIHBvcnRzIG1lbnRpb25lZCBpbiB0aGUgbGlzdC4KKwkgKiBJZiBhbnkgb2YgdGhlc2UgZ2V0IGFuIGVycm9yLCBkbyBhIGZ1bGwgcmVkaXNjb3ZlcnkuCisJICogSW4gYW55IGNhc2UsIGdvIHRocm91Z2ggdGhlIGxpc3QgYW5kIGZyZWUgdGhlIGVudHJpZXMuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRwLCBuZXh0LCAmZGlzY19wb3J0cywgcGVlcnMpIHsKKwkJbGlzdF9kZWwoJmRwLT5wZWVycyk7CisJCWlmICghcmVkaXNjKQorCQkJcmVkaXNjID0gZmNfZGlzY19zaW5nbGUobHBvcnQsIGRwKTsKKwkJa2ZyZWUoZHApOworCX0KIAlpZiAocmVkaXNjKSB7CiAJCUZDX0RJU0NfREJHKGRpc2MsICJSU0NOIHJlY2VpdmVkOiByZWRpc2NvdmVyaW5nXG4iKTsKIAkJZmNfZGlzY19yZXN0YXJ0KGRpc2MpOwpAQCAtMjQ3LDE2ICsxNjksNiBAQAogCQlGQ19ESVNDX0RCRyhkaXNjLCAiUlNDTiByZWNlaXZlZDogbm90IHJlZGlzY292ZXJpbmcuICIKIAkJCSAgICAicmVkaXNjICVkIHN0YXRlICVkIGluX3Byb2cgJWRcbiIsCiAJCQkgICAgcmVkaXNjLCBscG9ydC0+c3RhdGUsIGRpc2MtPnBlbmRpbmcpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHAsIG5leHQsICZkaXNjX3BvcnRzLCBwZWVycykgewotCQkJbGlzdF9kZWwoJmRwLT5wZWVycyk7Ci0JCQlycG9ydCA9IGxwb3J0LT50dC5ycG9ydF9sb29rdXAobHBvcnQsIGRwLT5pZHMucG9ydF9pZCk7Ci0JCQlpZiAocnBvcnQpIHsKLQkJCQlyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwotCQkJCWxpc3RfZGVsKCZyZGF0YS0+cGVlcnMpOwotCQkJCWxwb3J0LT50dC5ycG9ydF9sb2dvZmYocnBvcnQpOwotCQkJfQotCQkJZmNfZGlzY19zaW5nbGUoZGlzYywgZHApOwotCQl9CiAJfQogCWZjX2ZyYW1lX2ZyZWUoZnApOwogCXJldHVybjsKQEAgLTMwOCwzNSArMjIwLDM0IEBACiAgKi8KIHN0YXRpYyB2b2lkIGZjX2Rpc2NfcmVzdGFydChzdHJ1Y3QgZmNfZGlzYyAqZGlzYykKIHsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSwgKm5leHQ7Ci0Jc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IGRpc2MtPmxwb3J0OworCWlmICghZGlzYy0+ZGlzY19jYWxsYmFjaykKKwkJcmV0dXJuOwogCiAJRkNfRElTQ19EQkcoZGlzYywgIlJlc3RhcnRpbmcgZGlzY292ZXJ5XG4iKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZGF0YSwgbmV4dCwgJmRpc2MtPnJwb3J0cywgcGVlcnMpIHsKLQkJcnBvcnQgPSBQUklWX1RPX1JQT1JUKHJkYXRhKTsKLQkJbGlzdF9kZWwoJnJkYXRhLT5wZWVycyk7Ci0JCWxwb3J0LT50dC5ycG9ydF9sb2dvZmYocnBvcnQpOwotCX0KLQogCWRpc2MtPnJlcXVlc3RlZCA9IDE7Ci0JaWYgKCFkaXNjLT5wZW5kaW5nKQotCQlmY19kaXNjX2dwbl9mdF9yZXEoZGlzYyk7CisJaWYgKGRpc2MtPnBlbmRpbmcpCisJCXJldHVybjsKKworCS8qCisJICogQWR2YW5jZSBkaXNjX2lkLiAgVGhpcyBpcyBhbiBhcmJpdHJhcnkgbm9uLXplcm8gbnVtYmVyIHRoYXQgd2lsbAorCSAqIG1hdGNoIHRoZSB2YWx1ZSBpbiB0aGUgZmNfcnBvcnRfcHJpdiBhZnRlciBkaXNjb3ZlcnkgZm9yIGFsbAorCSAqIGZyZXNobHktZGlzY292ZXJlZCByZW1vdGUgcG9ydHMuICBBdm9pZCB3cmFwcGluZyB0byB6ZXJvLgorCSAqLworCWRpc2MtPmRpc2NfaWQgPSAoZGlzYy0+ZGlzY19pZCArIDIpIHwgMTsKKwlkaXNjLT5yZXRyeV9jb3VudCA9IDA7CisJZmNfZGlzY19ncG5fZnRfcmVxKGRpc2MpOwogfQogCiAvKioKICAqIGZjX2Rpc2Nfc3RhcnQoKSAtIEZpYnJlIENoYW5uZWwgVGFyZ2V0IGRpc2NvdmVyeQogICogQGxwb3J0OiBGQyBsb2NhbCBwb3J0Ci0gKgotICogUmV0dXJucyBub24temVybyBpZiBkaXNjb3ZlcnkgY2Fubm90IGJlIHN0YXJ0ZWQuCisgKiBAZGlzY19jYWxsYmFjazogZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gZGlzY292ZXJ5IGlzIGNvbXBsZXRlCiAgKi8KIHN0YXRpYyB2b2lkIGZjX2Rpc2Nfc3RhcnQodm9pZCAoKmRpc2NfY2FsbGJhY2spKHN0cnVjdCBmY19scG9ydCAqLAogCQkJCQkJZW51bSBmY19kaXNjX2V2ZW50KSwKIAkJCSAgc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKIHsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwotCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyBpZHM7CiAJc3RydWN0IGZjX2Rpc2MgKmRpc2MgPSAmbHBvcnQtPmRpc2M7CiAKIAkvKgpAQCAtMzQ1LDE0NSArMjU2LDQ3IEBACiAJICogYW5kIHNlbmQgdGhlIEdQTl9GVCByZXF1ZXN0LgogCSAqLwogCW11dGV4X2xvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOwotCiAJZGlzYy0+ZGlzY19jYWxsYmFjayA9IGRpc2NfY2FsbGJhY2s7Ci0KLQkvKgotCSAqIElmIG5vdCByZWFkeSwgb3IgYWxyZWFkeSBydW5uaW5nIGRpc2NvdmVyeSwganVzdCBzZXQgcmVxdWVzdCBmbGFnLgotCSAqLwotCWRpc2MtPnJlcXVlc3RlZCA9IDE7Ci0KLQlpZiAoZGlzYy0+cGVuZGluZykgewotCQltdXRleF91bmxvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBIYW5kbGUgcG9pbnQtdG8tcG9pbnQgbW9kZSBhcyBhIHNpbXBsZSBkaXNjb3ZlcnkKLQkgKiBvZiB0aGUgcmVtb3RlIHBvcnQuIFl1Y2t5LCB5dWNreSwgeXVjaywgeXVjayEKLQkgKi8KLQlycG9ydCA9IGRpc2MtPmxwb3J0LT5wdHBfcnA7Ci0JaWYgKHJwb3J0KSB7Ci0JCWlkcy5wb3J0X2lkID0gcnBvcnQtPnBvcnRfaWQ7Ci0JCWlkcy5wb3J0X25hbWUgPSBycG9ydC0+cG9ydF9uYW1lOwotCQlpZHMubm9kZV9uYW1lID0gcnBvcnQtPm5vZGVfbmFtZTsKLQkJaWRzLnJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOwotCQlnZXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKLQotCQlpZiAoIWZjX2Rpc2NfbmV3X3RhcmdldChkaXNjLCBycG9ydCwgJmlkcykpIHsKLQkJCWRpc2MtPmV2ZW50ID0gRElTQ19FVl9TVUNDRVNTOwotCQkJZmNfZGlzY19kb25lKGRpc2MpOwotCQl9Ci0JCXB1dF9kZXZpY2UoJnJwb3J0LT5kZXYpOwotCX0gZWxzZSB7Ci0JCWZjX2Rpc2NfZ3BuX2Z0X3JlcShkaXNjKTsJLyogZ2V0IHBvcnRzIGJ5IEZDLTQgdHlwZSAqLwotCX0KLQorCWZjX2Rpc2NfcmVzdGFydChkaXNjKTsKIAltdXRleF91bmxvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOwogfQogCi1zdGF0aWMgc3RydWN0IGZjX3Jwb3J0X29wZXJhdGlvbnMgZmNfZGlzY19ycG9ydF9vcHMgPSB7Ci0JLmV2ZW50X2NhbGxiYWNrID0gZmNfZGlzY19ycG9ydF9jYWxsYmFjaywKLX07Ci0KLS8qKgotICogZmNfZGlzY19uZXdfdGFyZ2V0KCkgLSBIYW5kbGUgbmV3IHRhcmdldCBmb3VuZCBieSBkaXNjb3ZlcnkKLSAqIEBscG9ydDogRkMgbG9jYWwgcG9ydAotICogQHJwb3J0OiBUaGUgcHJldmlvdXMgRkMgcmVtb3RlIHBvcnQgKE5VTEwgaWYgbmV3IHJlbW90ZSBwb3J0KQotICogQGlkczogSWRlbnRpZmllcnMgZm9yIHRoZSBuZXcgRkMgcmVtb3RlIHBvcnQKLSAqCi0gKiBMb2NraW5nIE5vdGU6IFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGF0IHRoZSBkaXNjX211dGV4IGlzIGxvY2tlZAotICoJCSBiZWZvcmUgaXQgaXMgY2FsbGVkLgotICovCi1zdGF0aWMgaW50IGZjX2Rpc2NfbmV3X3RhcmdldChzdHJ1Y3QgZmNfZGlzYyAqZGlzYywKLQkJCSAgICAgIHN0cnVjdCBmY19ycG9ydCAqcnBvcnQsCi0JCQkgICAgICBzdHJ1Y3QgZmNfcnBvcnRfaWRlbnRpZmllcnMgKmlkcykKLXsKLQlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gZGlzYy0+bHBvcnQ7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhOwotCWludCBlcnJvciA9IDA7Ci0KLQlpZiAocnBvcnQgJiYgaWRzLT5wb3J0X25hbWUpIHsKLQkJaWYgKHJwb3J0LT5wb3J0X25hbWUgPT0gLTEpIHsKLQkJCS8qCi0JCQkgKiBTZXQgV1dOIGFuZCBmYWxsIHRocm91Z2ggdG8gbm90aWZ5IG9mIGNyZWF0ZS4KLQkJCSAqLwotCQkJZmNfcnBvcnRfc2V0X25hbWUocnBvcnQsIGlkcy0+cG9ydF9uYW1lLAotCQkJCQkgIHJwb3J0LT5ub2RlX25hbWUpOwotCQl9IGVsc2UgaWYgKHJwb3J0LT5wb3J0X25hbWUgIT0gaWRzLT5wb3J0X25hbWUpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIGlzIGEgbmV3IHBvcnQgd2l0aCB0aGUgc2FtZSBGQ0lEIGFzCi0JCQkgKiBhIHByZXZpb3VzbHktZGlzY292ZXJlZCBwb3J0LiAgUHJlc3VtYWJseSB0aGUgb2xkCi0JCQkgKiBwb3J0IGxvZ2dlZCBvdXQgYW5kIGEgbmV3IHBvcnQgbG9nZ2VkIGluIGFuZCB3YXMKLQkJCSAqIGFzc2lnbmVkIHRoZSBzYW1lIEZDSUQuICBUaGlzIHNob3VsZCBiZSByYXJlLgotCQkJICogRGVsZXRlIHRoZSBvbGQgb25lIGFuZCBmYWxsIHRocnUgdG8gcmUtY3JlYXRlLgotCQkJICovCi0JCQlmY19kaXNjX2RlbF90YXJnZXQoZGlzYywgcnBvcnQpOwotCQkJcnBvcnQgPSBOVUxMOwotCQl9Ci0JfQotCWlmICgoKGlkcy0+cG9ydF9uYW1lICE9IC0xKSB8fCAoaWRzLT5wb3J0X2lkICE9IC0xKSkgJiYKLQkgICAgaWRzLT5wb3J0X2lkICE9IGZjX2hvc3RfcG9ydF9pZChscG9ydC0+aG9zdCkgJiYKLQkgICAgaWRzLT5wb3J0X25hbWUgIT0gbHBvcnQtPnd3cG4pIHsKLQkJaWYgKCFycG9ydCkgewotCQkJcnBvcnQgPSBscG9ydC0+dHQucnBvcnRfbG9va3VwKGxwb3J0LCBpZHMtPnBvcnRfaWQpOwotCQkJaWYgKCFycG9ydCkgewotCQkJCXN0cnVjdCBmY19kaXNjX3BvcnQgZHA7Ci0JCQkJZHAubHAgPSBscG9ydDsKLQkJCQlkcC5pZHMucG9ydF9pZCA9IGlkcy0+cG9ydF9pZDsKLQkJCQlkcC5pZHMucG9ydF9uYW1lID0gaWRzLT5wb3J0X25hbWU7Ci0JCQkJZHAuaWRzLm5vZGVfbmFtZSA9IGlkcy0+bm9kZV9uYW1lOwotCQkJCWRwLmlkcy5yb2xlcyA9IGlkcy0+cm9sZXM7Ci0JCQkJcnBvcnQgPSBscG9ydC0+dHQucnBvcnRfY3JlYXRlKCZkcCk7Ci0JCQl9Ci0JCQlpZiAoIXJwb3J0KQotCQkJCWVycm9yID0gLUVOT01FTTsKLQkJfQotCQlpZiAocnBvcnQpIHsKLQkJCXJkYXRhID0gcnBvcnQtPmRkX2RhdGE7Ci0JCQlyZGF0YS0+b3BzID0gJmZjX2Rpc2NfcnBvcnRfb3BzOwotCQkJcmRhdGEtPnJwX3N0YXRlID0gUlBPUlRfU1RfSU5JVDsKLQkJCWxpc3RfYWRkX3RhaWwoJnJkYXRhLT5wZWVycywgJmRpc2MtPnJvZ3VlX3Jwb3J0cyk7Ci0JCQlscG9ydC0+dHQucnBvcnRfbG9naW4ocnBvcnQpOwotCQl9Ci0JfQotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiBmY19kaXNjX2RlbF90YXJnZXQoKSAtIERlbGV0ZSBhIHRhcmdldAotICogQGRpc2M6IEZDIGRpc2NvdmVyeSBjb250ZXh0Ci0gKiBAcnBvcnQ6IFRoZSByZW1vdGUgcG9ydCB0byBiZSByZW1vdmVkCi0gKi8KLXN0YXRpYyB2b2lkIGZjX2Rpc2NfZGVsX3RhcmdldChzdHJ1Y3QgZmNfZGlzYyAqZGlzYywgc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKLXsKLQlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gZGlzYy0+bHBvcnQ7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7Ci0JbGlzdF9kZWwoJnJkYXRhLT5wZWVycyk7Ci0JbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihycG9ydCk7Ci19Ci0KIC8qKgogICogZmNfZGlzY19kb25lKCkgLSBEaXNjb3ZlcnkgaGFzIGJlZW4gY29tcGxldGVkCiAgKiBAZGlzYzogRkMgZGlzY292ZXJ5IGNvbnRleHQKKyAqIEBldmVudDogZGlzY292ZXJ5IGNvbXBsZXRpb24gc3RhdHVzCisgKgogICogTG9ja2luZyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhhdCB0aGUgZGlzYyBtdXRleCBpcyBsb2NrZWQgYmVmb3JlCiAgKiBpdCBpcyBjYWxsZWQuIFRoZSBkaXNjb3ZlcnkgY2FsbGJhY2sgaXMgdGhlbiBtYWRlIHdpdGggdGhlIGxvY2sgcmVsZWFzZWQsCiAgKiBhbmQgdGhlIGxvY2sgaXMgcmUtdGFrZW4gYmVmb3JlIHJldHVybmluZyBmcm9tIHRoaXMgZnVuY3Rpb24KICAqLwotc3RhdGljIHZvaWQgZmNfZGlzY19kb25lKHN0cnVjdCBmY19kaXNjICpkaXNjKQorc3RhdGljIHZvaWQgZmNfZGlzY19kb25lKHN0cnVjdCBmY19kaXNjICpkaXNjLCBlbnVtIGZjX2Rpc2NfZXZlbnQgZXZlbnQpCiB7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IGRpc2MtPmxwb3J0OwotCWVudW0gZmNfZGlzY19ldmVudCBldmVudDsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGE7CiAKIAlGQ19ESVNDX0RCRyhkaXNjLCAiRGlzY292ZXJ5IGNvbXBsZXRlXG4iKTsKIAotCWV2ZW50ID0gZGlzYy0+ZXZlbnQ7Ci0JZGlzYy0+ZXZlbnQgPSBESVNDX0VWX05PTkU7CisJZGlzYy0+cGVuZGluZyA9IDA7CisJaWYgKGRpc2MtPnJlcXVlc3RlZCkgeworCQlmY19kaXNjX3Jlc3RhcnQoZGlzYyk7CisJCXJldHVybjsKKwl9CiAKLQlpZiAoZGlzYy0+cmVxdWVzdGVkKQotCQlmY19kaXNjX2dwbl9mdF9yZXEoZGlzYyk7Ci0JZWxzZQotCQlkaXNjLT5wZW5kaW5nID0gMDsKKwkvKgorCSAqIEdvIHRocm91Z2ggYWxsIHJlbW90ZSBwb3J0cy4gIElmIHRoZXkgd2VyZSBmb3VuZCBpbiB0aGUgbGF0ZXN0CisJICogZGlzY292ZXJ5LCByZXZlcmlmeSBvciBsb2cgdGhlbSBpbi4gIE90aGVyd2lzZSwgbG9nIHRoZW0gb3V0LgorCSAqIFNraXAgcG9ydHMgd2hpY2ggd2VyZSBuZXZlciBkaXNjb3ZlcmVkLiAgVGhlc2UgYXJlIHRoZSBkTlMgcG9ydAorCSAqIGFuZCBwb3J0cyB3aGljaCB3ZXJlIGNyZWF0ZWQgYnkgUExPR0kuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGF0YSwgJmRpc2MtPnJwb3J0cywgcGVlcnMpIHsKKwkJaWYgKCFyZGF0YS0+ZGlzY19pZCkKKwkJCWNvbnRpbnVlOworCQlpZiAocmRhdGEtPmRpc2NfaWQgPT0gZGlzYy0+ZGlzY19pZCkKKwkJCWxwb3J0LT50dC5ycG9ydF9sb2dpbihyZGF0YSk7CisJCWVsc2UKKwkJCWxwb3J0LT50dC5ycG9ydF9sb2dvZmYocmRhdGEpOworCX0KIAogCW11dGV4X3VubG9jaygmZGlzYy0+ZGlzY19tdXRleCk7CiAJZGlzYy0+ZGlzY19jYWxsYmFjayhscG9ydCwgZXZlbnQpOwpAQCAtNTIyLDExICszMzUsOCBAQAogCQkJfQogCQkJZGlzYy0+cmV0cnlfY291bnQrKzsKIAkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGlzYy0+ZGlzY193b3JrLCBkZWxheSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBleGNlZWRlZCByZXRyaWVzICovCi0JCQlkaXNjLT5ldmVudCA9IERJU0NfRVZfRkFJTEVEOwotCQkJZmNfZGlzY19kb25lKGRpc2MpOwotCQl9CisJCX0gZWxzZQorCQkJZmNfZGlzY19kb25lKGRpc2MsIERJU0NfRVZfRkFJTEVEKTsKIAl9CiB9CiAKQEAgLTU1NSw3ICszNjUsNyBAQAogCWlmICghZnApCiAJCWdvdG8gZXJyOwogCi0JaWYgKGxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBOVUxMLCBmcCwKKwlpZiAobHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIDAsIGZwLAogCQkJCSBGQ19OU19HUE5fRlQsCiAJCQkJIGZjX2Rpc2NfZ3BuX2Z0X3Jlc3AsCiAJCQkJIGRpc2MsIGxwb3J0LT5lX2RfdG92KSkKQEAgLTU2NSwxMCArMzc1LDEyIEBACiB9CiAKIC8qKgotICogZmNfZGlzY19ncG5fZnRfcGFyc2UoKSAtIFBhcnNlIHRoZSBsaXN0IG9mIElEcyBhbmQgbmFtZXMgcmVzdWx0aW5nIGZyb20gYSByZXF1ZXN0CisgKiBmY19kaXNjX2dwbl9mdF9wYXJzZSgpIC0gUGFyc2UgdGhlIGJvZHkgb2YgdGhlIGROUyBHUE5fRlQgcmVzcG9uc2UuCiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCiAgKiBAYnVmOiBHUE5fRlQgcmVzcG9uc2UgYnVmZmVyCiAgKiBAbGVuOiBzaXplIG9mIHJlc3BvbnNlIGJ1ZmZlcgorICoKKyAqIEdvZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBJRHMgYW5kIG5hbWVzIHJlc3VsdGluZyBmcm9tIGEgcmVxdWVzdC4KICAqLwogc3RhdGljIGludCBmY19kaXNjX2dwbl9mdF9wYXJzZShzdHJ1Y3QgZmNfZGlzYyAqZGlzYywgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQogewpAQCAtNTc4LDExICszOTAsMTEgQEAKIAlzaXplX3QgcGxlbjsKIAlzaXplX3QgdGxlbjsKIAlpbnQgZXJyb3IgPSAwOwotCXN0cnVjdCBmY19kaXNjX3BvcnQgZHA7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGE7CisJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzIGlkczsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGE7CiAKIAlscG9ydCA9IGRpc2MtPmxwb3J0OworCWRpc2MtPnNlcV9jb3VudCsrOwogCiAJLyoKIAkgKiBIYW5kbGUgcGFydGlhbCBuYW1lIHJlY29yZCBsZWZ0IG92ZXIgZnJvbSBwcmV2aW91cyBjYWxsLgpAQCAtNTkxLDYgKzQwMyw3IEBACiAJcGxlbiA9IGxlbjsKIAlucCA9IChzdHJ1Y3QgZmNfZ3BuX2Z0X3Jlc3AgKilicDsKIAl0bGVuID0gZGlzYy0+YnVmX2xlbjsKKwlkaXNjLT5idWZfbGVuID0gMDsKIAlpZiAodGxlbikgewogCQlXQVJOX09OKHRsZW4gPj0gc2l6ZW9mKCpucCkpOwogCQlwbGVuID0gc2l6ZW9mKCpucCkgLSB0bGVuOwpAQCAtNjIxLDMxICs0MzQsMjUgQEAKIAkgKiBBZnRlciB0aGUgZmlyc3QgdGltZSB0aHJvdWdoIHRoZSBsb29wLCB0aGluZ3MgcmV0dXJuIHRvICJub3JtYWwiLgogCSAqLwogCXdoaWxlIChwbGVuID49IHNpemVvZigqbnApKSB7Ci0JCWRwLmxwID0gbHBvcnQ7Ci0JCWRwLmlkcy5wb3J0X2lkID0gbnRvaDI0KG5wLT5mcF9maWQpOwotCQlkcC5pZHMucG9ydF9uYW1lID0gbnRvaGxsKG5wLT5mcF93d3BuKTsKLQkJZHAuaWRzLm5vZGVfbmFtZSA9IC0xOwotCQlkcC5pZHMucm9sZXMgPSBGQ19SUE9SVF9ST0xFX1VOS05PV047CisJCWlkcy5wb3J0X2lkID0gbnRvaDI0KG5wLT5mcF9maWQpOworCQlpZHMucG9ydF9uYW1lID0gbnRvaGxsKG5wLT5mcF93d3BuKTsKIAotCQlpZiAoKGRwLmlkcy5wb3J0X2lkICE9IGZjX2hvc3RfcG9ydF9pZChscG9ydC0+aG9zdCkpICYmCi0JCSAgICAoZHAuaWRzLnBvcnRfbmFtZSAhPSBscG9ydC0+d3dwbikpIHsKLQkJCXJwb3J0ID0gbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZSgmZHApOwotCQkJaWYgKHJwb3J0KSB7Ci0JCQkJcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKLQkJCQlyZGF0YS0+b3BzID0gJmZjX2Rpc2NfcnBvcnRfb3BzOwotCQkJCXJkYXRhLT5sb2NhbF9wb3J0ID0gbHBvcnQ7Ci0JCQkJbGlzdF9hZGRfdGFpbCgmcmRhdGEtPnBlZXJzLAotCQkJCQkgICAgICAmZGlzYy0+cm9ndWVfcnBvcnRzKTsKLQkJCQlscG9ydC0+dHQucnBvcnRfbG9naW4ocnBvcnQpOwotCQkJfSBlbHNlCisJCWlmIChpZHMucG9ydF9pZCAhPSBmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpICYmCisJCSAgICBpZHMucG9ydF9uYW1lICE9IGxwb3J0LT53d3BuKSB7CisJCQlyZGF0YSA9IGxwb3J0LT50dC5ycG9ydF9jcmVhdGUobHBvcnQsIGlkcy5wb3J0X2lkKTsKKwkJCWlmIChyZGF0YSkgeworCQkJCXJkYXRhLT5pZHMucG9ydF9uYW1lID0gaWRzLnBvcnRfbmFtZTsKKwkJCQlyZGF0YS0+ZGlzY19pZCA9IGRpc2MtPmRpc2NfaWQ7CisJCQl9IGVsc2UgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImxpYmZjOiBGYWlsZWQgdG8gYWxsb2NhdGUgIgogCQkJCSAgICAgICAibWVtb3J5IGZvciB0aGUgbmV3bHkgZGlzY292ZXJlZCBwb3J0ICIKLQkJCQkgICAgICAgIiglNngpXG4iLCBkcC5pZHMucG9ydF9pZCk7CisJCQkJICAgICAgICIoJTZ4KVxuIiwgaWRzLnBvcnRfaWQpOworCQkJCWVycm9yID0gLUVOT01FTTsKKwkJCX0KIAkJfQogCiAJCWlmIChucC0+ZnBfZmxhZ3MgJiBGQ19OU19GSURfTEFTVCkgewotCQkJZGlzYy0+ZXZlbnQgPSBESVNDX0VWX1NVQ0NFU1M7Ci0JCQlmY19kaXNjX2RvbmUoZGlzYyk7CisJCQlmY19kaXNjX2RvbmUoZGlzYywgRElTQ19FVl9TVUNDRVNTKTsKIAkJCWxlbiA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtNjY1LDggKzQ3Miw2IEBACiAJCQltZW1jcHkoJmRpc2MtPnBhcnRpYWxfYnVmLCBucCwgbGVuKTsKIAkJfQogCQlkaXNjLT5idWZfbGVuID0gKHVuc2lnbmVkIGNoYXIpIGxlbjsKLQl9IGVsc2UgewotCQlkaXNjLT5idWZfbGVuID0gMDsKIAl9CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtNjgzLDggKzQ4OCw3IEBACiAJCQkJCSAgICBzdHJ1Y3QgZmNfZGlzYywKIAkJCQkJICAgIGRpc2Nfd29yay53b3JrKTsKIAltdXRleF9sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKLQlpZiAoZGlzYy0+cmVxdWVzdGVkICYmICFkaXNjLT5wZW5kaW5nKQotCQlmY19kaXNjX2dwbl9mdF9yZXEoZGlzYyk7CisJZmNfZGlzY19ncG5fZnRfcmVxKGRpc2MpOwogCW11dGV4X3VubG9jaygmZGlzYy0+ZGlzY19tdXRleCk7CiB9CiAKQEAgLTcwMywxMCArNTA3LDEwIEBACiAJc3RydWN0IGZjX2Rpc2MgKmRpc2MgPSBkaXNjX2FyZzsKIAlzdHJ1Y3QgZmNfY3RfaGRyICpjcDsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKKwllbnVtIGZjX2Rpc2NfZXZlbnQgZXZlbnQgPSBESVNDX0VWX05PTkU7CiAJdW5zaWduZWQgaW50IHNlcV9jbnQ7Ci0Jdm9pZCAqYnVmID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgbGVuOwotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IgPSAwOwogCiAJbXV0ZXhfbG9jaygmZGlzYy0+ZGlzY19tdXRleCk7CiAJRkNfRElTQ19EQkcoZGlzYywgIlJlY2VpdmVkIGEgR1BOX0ZUIHJlc3BvbnNlXG4iKTsKQEAgLTcyMSw3NyArNTI1LDE1OCBAQAogCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7CiAJbGVuID0gZnJfbGVuKGZwKSAtIHNpemVvZigqZmgpOwogCXNlcV9jbnQgPSBudG9ocyhmaC0+Zmhfc2VxX2NudCk7Ci0JaWYgKGZyX3NvZihmcCkgPT0gRkNfU09GX0kzICYmIHNlcV9jbnQgPT0gMCAmJgotCSAgICBkaXNjLT5zZXFfY291bnQgPT0gMCkgeworCWlmIChmcl9zb2YoZnApID09IEZDX1NPRl9JMyAmJiBzZXFfY250ID09IDAgJiYgZGlzYy0+c2VxX2NvdW50ID09IDApIHsKIAkJY3AgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCpjcCkpOwogCQlpZiAoIWNwKSB7CiAJCQlGQ19ESVNDX0RCRyhkaXNjLCAiR1BOX0ZUIHJlc3BvbnNlIHRvbyBzaG9ydCwgbGVuICVkXG4iLAogCQkJCSAgICBmcl9sZW4oZnApKTsKKwkJCWV2ZW50ID0gRElTQ19FVl9GQUlMRUQ7CiAJCX0gZWxzZSBpZiAobnRvaHMoY3AtPmN0X2NtZCkgPT0gRkNfRlNfQUNDKSB7CiAKIAkJCS8qIEFjY2VwdGVkLCBwYXJzZSB0aGUgcmVzcG9uc2UuICovCi0JCQlidWYgPSBjcCArIDE7CiAJCQlsZW4gLT0gc2l6ZW9mKCpjcCk7CisJCQllcnJvciA9IGZjX2Rpc2NfZ3BuX2Z0X3BhcnNlKGRpc2MsIGNwICsgMSwgbGVuKTsKIAkJfSBlbHNlIGlmIChudG9ocyhjcC0+Y3RfY21kKSA9PSBGQ19GU19SSlQpIHsKIAkJCUZDX0RJU0NfREJHKGRpc2MsICJHUE5fRlQgcmVqZWN0ZWQgcmVhc29uICV4IGV4cCAleCAiCiAJCQkJICAgICIoY2hlY2sgem9uaW5nKVxuIiwgY3AtPmN0X3JlYXNvbiwKIAkJCQkgICAgY3AtPmN0X2V4cGxhbik7Ci0JCQlkaXNjLT5ldmVudCA9IERJU0NfRVZfRkFJTEVEOwotCQkJZmNfZGlzY19kb25lKGRpc2MpOworCQkJZXZlbnQgPSBESVNDX0VWX0ZBSUxFRDsKKwkJCWlmIChjcC0+Y3RfcmVhc29uID09IEZDX0ZTX1JKVF9VTkFCTCAmJgorCQkJICAgIGNwLT5jdF9leHBsYW4gPT0gRkNfRlNfRVhQX0ZUTlIpCisJCQkJZXZlbnQgPSBESVNDX0VWX1NVQ0NFU1M7CiAJCX0gZWxzZSB7CiAJCQlGQ19ESVNDX0RCRyhkaXNjLCAiR1BOX0ZUIHVuZXhwZWN0ZWQgcmVzcG9uc2UgY29kZSAiCiAJCQkJICAgICIleFxuIiwgbnRvaHMoY3AtPmN0X2NtZCkpOworCQkJZXZlbnQgPSBESVNDX0VWX0ZBSUxFRDsKIAkJfQotCX0gZWxzZSBpZiAoZnJfc29mKGZwKSA9PSBGQ19TT0ZfTjMgJiYKLQkJICAgc2VxX2NudCA9PSBkaXNjLT5zZXFfY291bnQpIHsKLQkJYnVmID0gZmggKyAxOworCX0gZWxzZSBpZiAoZnJfc29mKGZwKSA9PSBGQ19TT0ZfTjMgJiYgc2VxX2NudCA9PSBkaXNjLT5zZXFfY291bnQpIHsKKwkJZXJyb3IgPSBmY19kaXNjX2dwbl9mdF9wYXJzZShkaXNjLCBmaCArIDEsIGxlbik7CiAJfSBlbHNlIHsKIAkJRkNfRElTQ19EQkcoZGlzYywgIkdQTl9GVCB1bmV4cGVjdGVkIGZyYW1lIC0gb3V0IG9mIHNlcXVlbmNlPyAiCiAJCQkgICAgInNlcV9jbnQgJXggZXhwZWN0ZWQgJXggc29mICV4IGVvZiAleFxuIiwKIAkJCSAgICBzZXFfY250LCBkaXNjLT5zZXFfY291bnQsIGZyX3NvZihmcCksIGZyX2VvZihmcCkpOworCQlldmVudCA9IERJU0NfRVZfRkFJTEVEOwogCX0KLQlpZiAoYnVmKSB7Ci0JCWVycm9yID0gZmNfZGlzY19ncG5fZnRfcGFyc2UoZGlzYywgYnVmLCBsZW4pOwotCQlpZiAoZXJyb3IpCi0JCQlmY19kaXNjX2Vycm9yKGRpc2MsIGZwKTsKLQkJZWxzZQotCQkJZGlzYy0+c2VxX2NvdW50Kys7Ci0JfQorCWlmIChlcnJvcikKKwkJZmNfZGlzY19lcnJvcihkaXNjLCBmcCk7CisJZWxzZSBpZiAoZXZlbnQgIT0gRElTQ19FVl9OT05FKQorCQlmY19kaXNjX2RvbmUoZGlzYywgZXZlbnQpOwogCWZjX2ZyYW1lX2ZyZWUoZnApOwotCiAJbXV0ZXhfdW5sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKIH0KIAogLyoqCisgKiBmY19kaXNjX2dwbl9pZF9yZXNwKCkgLSBIYW5kbGUgYSByZXNwb25zZSBmcmFtZSBmcm9tIEdldCBQb3J0IE5hbWVzIChHUE5fSUQpCisgKiBAc3A6IGV4Y2hhbmdlIHNlcXVlbmNlCisgKiBAZnA6IHJlc3BvbnNlIGZyYW1lCisgKiBAcmRhdGFfYXJnOiByZW1vdGUgcG9ydCBwcml2YXRlIGRhdGEKKyAqCisgKiBMb2NraW5nIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhvdXQgZGlzYyBtdXRleCBoZWxkLgorICovCitzdGF0aWMgdm9pZCBmY19kaXNjX2dwbl9pZF9yZXNwKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAorCQkJCXZvaWQgKnJkYXRhX2FyZykKK3sKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEgPSByZGF0YV9hcmc7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKm5ld19yZGF0YTsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OworCXN0cnVjdCBmY19kaXNjICpkaXNjOworCXN0cnVjdCBmY19jdF9oZHIgKmNwOworCXN0cnVjdCBmY19uc19naWRfcG4gKnBuOworCXU2NCBwb3J0X25hbWU7CisKKwlscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OworCWRpc2MgPSAmbHBvcnQtPmRpc2M7CisKKwltdXRleF9sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKKwlpZiAoUFRSX0VSUihmcCkgPT0gLUZDX0VYX0NMT1NFRCkKKwkJZ290byBvdXQ7CisJaWYgKElTX0VSUihmcCkpCisJCWdvdG8gcmVkaXNjOworCisJY3AgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCpjcCkpOworCWlmICghY3ApCisJCWdvdG8gcmVkaXNjOworCWlmIChudG9ocyhjcC0+Y3RfY21kKSA9PSBGQ19GU19BQ0MpIHsKKwkJaWYgKGZyX2xlbihmcCkgPCBzaXplb2Yoc3RydWN0IGZjX2ZyYW1lX2hlYWRlcikgKworCQkgICAgc2l6ZW9mKCpjcCkgKyBzaXplb2YoKnBuKSkKKwkJCWdvdG8gcmVkaXNjOworCQlwbiA9IChzdHJ1Y3QgZmNfbnNfZ2lkX3BuICopKGNwICsgMSk7CisJCXBvcnRfbmFtZSA9IGdldF91bmFsaWduZWRfYmU2NCgmcG4tPmZuX3d3cG4pOworCQlpZiAocmRhdGEtPmlkcy5wb3J0X25hbWUgPT0gLTEpCisJCQlyZGF0YS0+aWRzLnBvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKwkJZWxzZSBpZiAocmRhdGEtPmlkcy5wb3J0X25hbWUgIT0gcG9ydF9uYW1lKSB7CisJCQlGQ19ESVNDX0RCRyhkaXNjLCAiR1BOX0lEIGFjY2VwdGVkLiAgV1dQTiBjaGFuZ2VkLiAiCisJCQkJICAgICJQb3J0LWlkICV4IHd3cG4gJWxseFxuIiwKKwkJCQkgICAgcmRhdGEtPmlkcy5wb3J0X2lkLCBwb3J0X25hbWUpOworCQkJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihyZGF0YSk7CisKKwkJCW5ld19yZGF0YSA9IGxwb3J0LT50dC5ycG9ydF9jcmVhdGUobHBvcnQsCisJCQkJCQkJICAgcmRhdGEtPmlkcy5wb3J0X2lkKTsKKwkJCWlmIChuZXdfcmRhdGEpIHsKKwkJCQluZXdfcmRhdGEtPmRpc2NfaWQgPSBkaXNjLT5kaXNjX2lkOworCQkJCWxwb3J0LT50dC5ycG9ydF9sb2dpbihuZXdfcmRhdGEpOworCQkJfQorCQkJZ290byBvdXQ7CisJCX0KKwkJcmRhdGEtPmRpc2NfaWQgPSBkaXNjLT5kaXNjX2lkOworCQlscG9ydC0+dHQucnBvcnRfbG9naW4ocmRhdGEpOworCX0gZWxzZSBpZiAobnRvaHMoY3AtPmN0X2NtZCkgPT0gRkNfRlNfUkpUKSB7CisJCUZDX0RJU0NfREJHKGRpc2MsICJHUE5fSUQgcmVqZWN0ZWQgcmVhc29uICV4IGV4cCAleFxuIiwKKwkJCSAgICBjcC0+Y3RfcmVhc29uLCBjcC0+Y3RfZXhwbGFuKTsKKwkJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihyZGF0YSk7CisJfSBlbHNlIHsKKwkJRkNfRElTQ19EQkcoZGlzYywgIkdQTl9JRCB1bmV4cGVjdGVkIHJlc3BvbnNlIGNvZGUgJXhcbiIsCisJCQkgICAgbnRvaHMoY3AtPmN0X2NtZCkpOworcmVkaXNjOgorCQlmY19kaXNjX3Jlc3RhcnQoZGlzYyk7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmZGlzYy0+ZGlzY19tdXRleCk7CisJa3JlZl9wdXQoJnJkYXRhLT5rcmVmLCBscG9ydC0+dHQucnBvcnRfZGVzdHJveSk7Cit9CisKKy8qKgorICogZmNfZGlzY19ncG5faWRfcmVxKCkgLSBTZW5kIEdldCBQb3J0IE5hbWVzIGJ5IElEIChHUE5fSUQpIHJlcXVlc3QKKyAqIEBscG9ydDogbG9jYWwgcG9ydAorICogQHJkYXRhOiByZW1vdGUgcG9ydCBwcml2YXRlIGRhdGEKKyAqCisgKiBMb2NraW5nIE5vdGU6IFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGF0IHRoZSBkaXNjX211dGV4IGlzIGxvY2tlZAorICoJCSBiZWZvcmUgaXQgaXMgY2FsbGVkLgorICogT24gZmFpbHVyZSwgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIGludCBmY19kaXNjX2dwbl9pZF9yZXEoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKKwkJCSAgICAgIHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSkKK3sKKwlzdHJ1Y3QgZmNfZnJhbWUgKmZwOworCisJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgc2l6ZW9mKHN0cnVjdCBmY19jdF9oZHIpICsKKwkJCSAgICBzaXplb2Yoc3RydWN0IGZjX25zX2ZpZCkpOworCWlmICghZnApCisJCXJldHVybiAtRU5PTUVNOworCWlmICghbHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIHJkYXRhLT5pZHMucG9ydF9pZCwgZnAsIEZDX05TX0dQTl9JRCwKKwkJCQkgZmNfZGlzY19ncG5faWRfcmVzcCwgcmRhdGEsIGxwb3J0LT5lX2RfdG92KSkKKwkJcmV0dXJuIC1FTk9NRU07CisJa3JlZl9nZXQoJnJkYXRhLT5rcmVmKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBmY19kaXNjX3NpbmdsZSgpIC0gRGlzY292ZXIgdGhlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiBmb3IgYSBzaW5nbGUgdGFyZ2V0Ci0gKiBAbHBvcnQ6IEZDIGxvY2FsIHBvcnQKKyAqIEBscG9ydDogbG9jYWwgcG9ydAogICogQGRwOiBUaGUgcG9ydCB0byByZWRpc2NvdmVyCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhhdCB0aGUgZGlzY19tdXRleCBpcyBsb2NrZWQKICAqCQkgYmVmb3JlIGl0IGlzIGNhbGxlZC4KICAqLwotc3RhdGljIHZvaWQgZmNfZGlzY19zaW5nbGUoc3RydWN0IGZjX2Rpc2MgKmRpc2MsIHN0cnVjdCBmY19kaXNjX3BvcnQgKmRwKQorc3RhdGljIGludCBmY19kaXNjX3NpbmdsZShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LCBzdHJ1Y3QgZmNfZGlzY19wb3J0ICpkcCkKIHsKLQlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OwotCXN0cnVjdCBmY19ycG9ydCAqbmV3X3Jwb3J0OwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YTsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGE7CiAKLQlscG9ydCA9IGRpc2MtPmxwb3J0OwotCi0JaWYgKGRwLT5pZHMucG9ydF9pZCA9PSBmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpKQotCQlnb3RvIG91dDsKLQotCW5ld19ycG9ydCA9IGxwb3J0LT50dC5ycG9ydF9jcmVhdGUoZHApOwotCWlmIChuZXdfcnBvcnQpIHsKLQkJcmRhdGEgPSBuZXdfcnBvcnQtPmRkX2RhdGE7Ci0JCXJkYXRhLT5vcHMgPSAmZmNfZGlzY19ycG9ydF9vcHM7Ci0JCWtmcmVlKGRwKTsKLQkJbGlzdF9hZGRfdGFpbCgmcmRhdGEtPnBlZXJzLCAmZGlzYy0+cm9ndWVfcnBvcnRzKTsKLQkJbHBvcnQtPnR0LnJwb3J0X2xvZ2luKG5ld19ycG9ydCk7Ci0JfQotCXJldHVybjsKLW91dDoKLQlrZnJlZShkcCk7CisJcmRhdGEgPSBscG9ydC0+dHQucnBvcnRfY3JlYXRlKGxwb3J0LCBkcC0+cG9ydF9pZCk7CisJaWYgKCFyZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmRhdGEtPmRpc2NfaWQgPSAwOworCXJldHVybiBmY19kaXNjX2dwbl9pZF9yZXEobHBvcnQsIHJkYXRhKTsKIH0KIAogLyoqCkBAIC04NDEsMTggKzcyNiwxMiBAQAogCWlmICghbHBvcnQtPnR0LmRpc2NfcmVjdl9yZXEpCiAJCWxwb3J0LT50dC5kaXNjX3JlY3ZfcmVxID0gZmNfZGlzY19yZWN2X3JlcTsKIAotCWlmICghbHBvcnQtPnR0LnJwb3J0X2xvb2t1cCkKLQkJbHBvcnQtPnR0LnJwb3J0X2xvb2t1cCA9IGZjX2Rpc2NfbG9va3VwX3Jwb3J0OwotCiAJZGlzYyA9ICZscG9ydC0+ZGlzYzsKIAlJTklUX0RFTEFZRURfV09SSygmZGlzYy0+ZGlzY193b3JrLCBmY19kaXNjX3RpbWVvdXQpOwogCW11dGV4X2luaXQoJmRpc2MtPmRpc2NfbXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZkaXNjLT5ycG9ydHMpOwotCUlOSVRfTElTVF9IRUFEKCZkaXNjLT5yb2d1ZV9ycG9ydHMpOwogCiAJZGlzYy0+bHBvcnQgPSBscG9ydDsKLQlkaXNjLT5kZWxheSA9IEZDX0RJU0NfREVMQVk7Ci0JZGlzYy0+ZXZlbnQgPSBESVNDX0VWX05PTkU7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19lbHNjdC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2Vsc2N0LmMKaW5kZXggNTg3OGIzNC4uNWNmYTY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2Vsc2N0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2Vsc2N0LmMKQEAgLTMyLDcgKzMyLDcgQEAKICAqIGZjX2Vsc2N0X3NlbmQgLSBzZW5kcyBFTFMvQ1QgZnJhbWUKICAqLwogc3RhdGljIHN0cnVjdCBmY19zZXEgKmZjX2Vsc2N0X3NlbmQoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKLQkJCQkgICAgc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwKKwkJCQkgICAgdTMyIGRpZCwKIAkJCQkgICAgc3RydWN0IGZjX2ZyYW1lICpmcCwKIAkJCQkgICAgdW5zaWduZWQgaW50IG9wLAogCQkJCSAgICB2b2lkICgqcmVzcCkoc3RydWN0IGZjX3NlcSAqLApAQCAtNDEsMTYgKzQxLDE3IEBACiAJCQkJICAgIHZvaWQgKmFyZywgdTMyIHRpbWVyX21zZWMpCiB7CiAJZW51bSBmY19yY3RsIHJfY3RsOwotCXUzMiBkaWQgPSBGQ19GSURfTk9ORTsKIAllbnVtIGZjX2ZoX3R5cGUgZmhfdHlwZTsKIAlpbnQgcmM7CiAKIAkvKiBFTFMgcmVxdWVzdHMgKi8KIAlpZiAoKG9wID49IEVMU19MU19SSlQpICYmIChvcCA8PSBFTFNfQVVUSF9FTFMpKQotCQlyYyA9IGZjX2Vsc19maWxsKGxwb3J0LCBycG9ydCwgZnAsIG9wLCAmcl9jdGwsICZkaWQsICZmaF90eXBlKTsKLQllbHNlCisJCXJjID0gZmNfZWxzX2ZpbGwobHBvcnQsIGRpZCwgZnAsIG9wLCAmcl9jdGwsICZmaF90eXBlKTsKKwllbHNlIHsKIAkJLyogQ1QgcmVxdWVzdHMgKi8KLQkJcmMgPSBmY19jdF9maWxsKGxwb3J0LCBmcCwgb3AsICZyX2N0bCwgJmRpZCwgJmZoX3R5cGUpOworCQlyYyA9IGZjX2N0X2ZpbGwobHBvcnQsIGRpZCwgZnAsIG9wLCAmcl9jdGwsICZmaF90eXBlKTsKKwkJZGlkID0gRkNfRklEX0RJUl9TRVJWOworCX0KIAogCWlmIChyYykKIAkJcmV0dXJuIE5VTEw7CkBAIC02OSwzICs3MCw0MSBAQAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChmY19lbHNjdF9pbml0KTsKKworLyoqCisgKiBmY19lbHNfcmVzcF90eXBlKCkgLSByZXR1cm4gc3RyaW5nIGRlc2NyaWJpbmcgRUxTIHJlc3BvbnNlIGZvciBkZWJ1Zy4KKyAqIEBmcDogZnJhbWUgcG9pbnRlciB3aXRoIHBvc3NpYmxlIGVycm9yIGNvZGUuCisgKi8KK2NvbnN0IGNoYXIgKmZjX2Vsc19yZXNwX3R5cGUoc3RydWN0IGZjX2ZyYW1lICpmcCkKK3sKKwljb25zdCBjaGFyICptc2c7CisJaWYgKElTX0VSUihmcCkpIHsKKwkJc3dpdGNoICgtUFRSX0VSUihmcCkpIHsKKwkJY2FzZSBGQ19OT19FUlI6CisJCQltc2cgPSAicmVzcG9uc2Ugbm8gZXJyb3IiOworCQkJYnJlYWs7CisJCWNhc2UgRkNfRVhfVElNRU9VVDoKKwkJCW1zZyA9ICJyZXNwb25zZSB0aW1lb3V0IjsKKwkJCWJyZWFrOworCQljYXNlIEZDX0VYX0NMT1NFRDoKKwkJCW1zZyA9ICJyZXNwb25zZSBjbG9zZWQiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltc2cgPSAicmVzcG9uc2UgdW5rbm93biBlcnJvciI7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAoZmNfZnJhbWVfcGF5bG9hZF9vcChmcCkpIHsKKwkJY2FzZSBFTFNfTFNfQUNDOgorCQkJbXNnID0gImFjY2VwdCI7CisJCQlicmVhazsKKwkJY2FzZSBFTFNfTFNfUkpUOgorCQkJbXNnID0gInJlamVjdCI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1zZyA9ICJyZXNwb25zZSB1bmtub3duIEVMUyI7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gbXNnOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMKaW5kZXggMTQ1YWI5Yi4uYzFjMTU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jCkBAIC0zMiw2ICszMiw5IEBACiAjaW5jbHVkZSA8c2NzaS9saWJmYy5oPgogI2luY2x1ZGUgPHNjc2kvZmNfZW5jb2RlLmg+CiAKK3UxNglmY19jcHVfbWFzazsJCS8qIGNwdSBtYXNrIGZvciBwb3NzaWJsZSBjcHVzICovCitFWFBPUlRfU1lNQk9MKGZjX2NwdV9tYXNrKTsKK3N0YXRpYyB1MTYJZmNfY3B1X29yZGVyOwkvKiAyJ3MgcG93ZXIgdG8gcmVwcmVzZW50IHRvdGFsIHBvc3NpYmxlIGNwdXMgKi8KIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZmNfZW1fY2FjaGVwOyAgICAgICAgLyogY2FjaGUgZm9yIGV4Y2hhbmdlcyAqLwogCiAvKgpAQCAtNDgsNiArNTEsMjAgQEAKICAqLwogCiAvKgorICogUGVyIGNwdSBleGNoYW5nZSBwb29sCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgbWFuYWdlcyBwZXIgY3B1IGV4Y2hhbmdlcyBpbiBhcnJheSBvZiBleGNoYW5nZSBwb2ludGVycy4KKyAqIFRoaXMgYXJyYXkgaXMgYWxsb2NhdGVkIGZvbGxvd2VkIGJ5IHN0cnVjdCBmY19leGNoX3Bvb2wgbWVtb3J5IGZvcgorICogYXNzaWduZWQgcmFuZ2Ugb2YgZXhjaGFuZ2VzIHRvIHBlciBjcHUgcG9vbC4KKyAqLworc3RydWN0IGZjX2V4Y2hfcG9vbCB7CisJdTE2CQluZXh0X2luZGV4OwkvKiBuZXh0IHBvc3NpYmxlIGZyZWUgZXhjaGFuZ2UgaW5kZXggKi8KKwl1MTYJCXRvdGFsX2V4Y2hlczsJLyogdG90YWwgYWxsb2NhdGVkIGV4Y2hhbmdlcyAqLworCXNwaW5sb2NrX3QJbG9jazsJCS8qIGV4Y2ggcG9vbCBsb2NrICovCisJc3RydWN0IGxpc3RfaGVhZAlleF9saXN0OwkvKiBhbGxvY2F0ZWQgZXhjaGFuZ2VzIGxpc3QgKi8KK307CisKKy8qCiAgKiBFeGNoYW5nZSBtYW5hZ2VyLgogICoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHRoZSBjZW50ZXIgZm9yIGNyZWF0aW5nIGV4Y2hhbmdlcyBhbmQgc2VxdWVuY2VzLgpAQCAtNTUsMTcgKzcyLDEzIEBACiAgKi8KIHN0cnVjdCBmY19leGNoX21nciB7CiAJZW51bSBmY19jbGFzcwljbGFzczsJCS8qIGRlZmF1bHQgY2xhc3MgZm9yIHNlcXVlbmNlcyAqLwotCXNwaW5sb2NrX3QJZW1fbG9jazsJLyogZXhjaGFuZ2UgbWFuYWdlciBsb2NrLAotCQkJCQkgICBtdXN0IGJlIHRha2VuIGJlZm9yZSBleF9sb2NrICovCi0JdTE2CQlsYXN0X3hpZDsJLyogbGFzdCBhbGxvY2F0ZWQgZXhjaGFuZ2UgSUQgKi8KKwlzdHJ1Y3Qga3JlZglrcmVmOwkJLyogZXhjaGFuZ2UgbWdyIHJlZmVyZW5jZSBjb3VudCAqLwogCXUxNgkJbWluX3hpZDsJLyogbWluIGV4Y2hhbmdlIElEICovCiAJdTE2CQltYXhfeGlkOwkvKiBtYXggZXhjaGFuZ2UgSUQgKi8KLQl1MTYJCW1heF9yZWFkOwkvKiBtYXggZXhjaGFuZ2UgSUQgZm9yIHJlYWQgKi8KLQl1MTYJCWxhc3RfcmVhZDsJLyogbGFzdCB4aWQgYWxsb2NhdGVkIGZvciByZWFkICovCi0JdTMyCXRvdGFsX2V4Y2hlczsJCS8qIHRvdGFsIGFsbG9jYXRlZCBleGNoYW5nZXMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWV4X2xpc3Q7CS8qIGFsbG9jYXRlZCBleGNoYW5nZXMgbGlzdCAqLwotCXN0cnVjdCBmY19scG9ydAkqbHA7CQkvKiBmYyBkZXZpY2UgaW5zdGFuY2UgKi8KIAltZW1wb29sX3QJKmVwX3Bvb2w7CS8qIHJlc2VydmUgZXAncyAqLworCXUxNgkJcG9vbF9tYXhfaW5kZXg7CS8qIG1heCBleGNoIGFycmF5IGluZGV4IGluIGV4Y2ggcG9vbCAqLworCXN0cnVjdCBmY19leGNoX3Bvb2wgKnBvb2w7CS8qIHBlciBjcHUgZXhjaCBwb29sICovCiAKIAkvKgogCSAqIGN1cnJlbnRseSBleGNoYW5nZSBtZ3Igc3RhdHMgYXJlIHVwZGF0ZWQgYnV0IG5vdCB1c2VkLgpAQCAtODAsMTAgKzkzLDE1IEBACiAJCWF0b21pY190IHNlcV9ub3RfZm91bmQ7CiAJCWF0b21pY190IG5vbl9ibHNfcmVzcDsKIAl9IHN0YXRzOwotCXN0cnVjdCBmY19leGNoICoqZXhjaGVzOwkvKiBmb3IgZXhjaCBwb2ludGVycyBpbmRleGVkIGJ5IHhpZCAqLwogfTsKICNkZWZpbmUJZmNfc2VxX2V4Y2goc3ApIGNvbnRhaW5lcl9vZihzcCwgc3RydWN0IGZjX2V4Y2gsIHNlcSkKIAorc3RydWN0IGZjX2V4Y2hfbWdyX2FuY2hvciB7CisJc3RydWN0IGxpc3RfaGVhZCBlbWFfbGlzdDsKKwlzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wOworCWJvb2wgKCptYXRjaCkoc3RydWN0IGZjX2ZyYW1lICopOworfTsKKwogc3RhdGljIHZvaWQgZmNfZXhjaF9ycnEoc3RydWN0IGZjX2V4Y2ggKik7CiBzdGF0aWMgdm9pZCBmY19zZXFfbHNfYWNjKHN0cnVjdCBmY19zZXEgKik7CiBzdGF0aWMgdm9pZCBmY19zZXFfbHNfcmp0KHN0cnVjdCBmY19zZXEgKiwgZW51bSBmY19lbHNfcmp0X3JlYXNvbiwKQEAgLTE2Nyw4ICsxODUsOCBAQAogICogc2VxdWVuY2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG11c3QgYmUgbG9ja2VkLgogICogIC0gZXhjaGFuZ2UgcmVmY250IGNhbiBiZSBkb25lIGF0b21pY2x5IHdpdGhvdXQgbG9ja3MuCiAgKiAgLSBzZXF1ZW5jZSBhbGxvY2F0aW9uIG11c3QgYmUgbG9ja2VkIGJ5IGV4Y2ggbG9jay4KLSAqICAtIElmIHRoZSBlbV9sb2NrIGFuZCBleF9sb2NrIG11c3QgYmUgdGFrZW4gYXQgdGhlIHNhbWUgdGltZSwgdGhlbiB0aGUKLSAqICAgIGVtX2xvY2sgbXVzdCBiZSB0YWtlbiBiZWZvcmUgdGhlIGV4X2xvY2suCisgKiAgLSBJZiB0aGUgRU0gcG9vbCBsb2NrIGFuZCBleF9sb2NrIG11c3QgYmUgdGFrZW4gYXQgdGhlIHNhbWUgdGltZSwgdGhlbiB0aGUKKyAqICAgIEVNIHBvb2wgbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSB0aGUgZXhfbG9jay4KICAqLwogCiAvKgpAQCAtMjY4LDggKzI4Niw2IEBACiAJCW1wID0gZXAtPmVtOwogCQlpZiAoZXAtPmRlc3RydWN0b3IpCiAJCQllcC0+ZGVzdHJ1Y3RvcigmZXAtPnNlcSwgZXAtPmFyZyk7Ci0JCWlmIChlcC0+bHAtPnR0LmV4Y2hfcHV0KQotCQkJZXAtPmxwLT50dC5leGNoX3B1dChlcC0+bHAsIG1wLCBlcC0+eGlkKTsKIAkJV0FSTl9PTighKGVwLT5lc2Jfc3RhdCAmIEVTQl9TVF9DT01QTEVURSkpOwogCQltZW1wb29sX2ZyZWUoZXAsIG1wLT5lcF9wb29sKTsKIAl9CkBAIC0yOTksMTcgKzMxNSwzMSBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgZmNfZXhjaF9tZ3JfZGVsZXRlX2VwKHN0cnVjdCBmY19leGNoICplcCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZjX2V4Y2ggKmZjX2V4Y2hfcHRyX2dldChzdHJ1Y3QgZmNfZXhjaF9wb29sICpwb29sLAorCQkJCQkgICAgICB1MTYgaW5kZXgpCiB7Ci0Jc3RydWN0IGZjX2V4Y2hfbWdyICptcDsKKwlzdHJ1Y3QgZmNfZXhjaCAqKmV4Y2hlcyA9IChzdHJ1Y3QgZmNfZXhjaCAqKikocG9vbCArIDEpOworCXJldHVybiBleGNoZXNbaW5kZXhdOworfQogCi0JbXAgPSBlcC0+ZW07Ci0Jc3Bpbl9sb2NrX2JoKCZtcC0+ZW1fbG9jayk7Ci0JV0FSTl9PTihtcC0+dG90YWxfZXhjaGVzIDw9IDApOwotCW1wLT50b3RhbF9leGNoZXMtLTsKLQltcC0+ZXhjaGVzW2VwLT54aWQgLSBtcC0+bWluX3hpZF0gPSBOVUxMOworc3RhdGljIGlubGluZSB2b2lkIGZjX2V4Y2hfcHRyX3NldChzdHJ1Y3QgZmNfZXhjaF9wb29sICpwb29sLCB1MTYgaW5kZXgsCisJCQkJICAgc3RydWN0IGZjX2V4Y2ggKmVwKQoreworCSgoc3RydWN0IGZjX2V4Y2ggKiopKHBvb2wgKyAxKSlbaW5kZXhdID0gZXA7Cit9CisKK3N0YXRpYyB2b2lkIGZjX2V4Y2hfZGVsZXRlKHN0cnVjdCBmY19leGNoICplcCkKK3sKKwlzdHJ1Y3QgZmNfZXhjaF9wb29sICpwb29sOworCisJcG9vbCA9IGVwLT5wb29sOworCXNwaW5fbG9ja19iaCgmcG9vbC0+bG9jayk7CisJV0FSTl9PTihwb29sLT50b3RhbF9leGNoZXMgPD0gMCk7CisJcG9vbC0+dG90YWxfZXhjaGVzLS07CisJZmNfZXhjaF9wdHJfc2V0KHBvb2wsIChlcC0+eGlkIC0gZXAtPmVtLT5taW5feGlkKSA+PiBmY19jcHVfb3JkZXIsCisJCQlOVUxMKTsKIAlsaXN0X2RlbCgmZXAtPmV4X2xpc3QpOwotCXNwaW5fdW5sb2NrX2JoKCZtcC0+ZW1fbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBvb2wtPmxvY2spOwogCWZjX2V4Y2hfcmVsZWFzZShlcCk7CS8qIGRyb3AgaG9sZCBmb3IgZXhjaCBpbiBtcCAqLwogfQogCkBAIC0zMjIsNyArMzUyLDcgQEAKIAlpZiAoZXAtPnN0YXRlICYgKEZDX0VYX1JTVF9DTEVBTlVQIHwgRkNfRVhfRE9ORSkpCiAJCXJldHVybjsKIAotCUZDX0VYQ0hfREJHKGVwLCAiRXhjaGFuZ2UgdGltZWQgb3V0LCBub3RpZnlpbmcgdGhlIHVwcGVyIGxheWVyXG4iKTsKKwlGQ19FWENIX0RCRyhlcCwgIkV4Y2hhbmdlIHRpbWVyIGFybWVkXG4iKTsKIAogCWlmIChzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmVwLT50aW1lb3V0X3dvcmssCiAJCQkJICBtc2Vjc190b19qaWZmaWVzKHRpbWVyX21zZWMpKSkKQEAgLTQwOCw2ICs0MzgsOCBAQAogCXUzMiBlX3N0YXQ7CiAJaW50IHJjID0gMTsKIAorCUZDX0VYQ0hfREJHKGVwLCAiRXhjaGFuZ2UgdGltZWQgb3V0XG4iKTsKKwogCXNwaW5fbG9ja19iaCgmZXAtPmV4X2xvY2spOwogCWlmIChlcC0+c3RhdGUgJiAoRkNfRVhfUlNUX0NMRUFOVVAgfCBGQ19FWF9ET05FKSkKIAkJZ290byB1bmxvY2s7CkBAIC00MjcsNyArNDU5LDcgQEAKIAkJCXJjID0gZmNfZXhjaF9kb25lX2xvY2tlZChlcCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZlcC0+ZXhfbG9jayk7CiAJCWlmICghcmMpCi0JCQlmY19leGNoX21ncl9kZWxldGVfZXAoZXApOworCQkJZmNfZXhjaF9kZWxldGUoZXApOwogCQlpZiAocmVzcCkKIAkJCXJlc3Aoc3AsIEVSUl9QVFIoLUZDX0VYX1RJTUVPVVQpLCBhcmcpOwogCQlmY19zZXFfZXhjaF9hYm9ydChzcCwgMiAqIGVwLT5yX2FfdG92KTsKQEAgLTQ2MCw2NSArNDkyLDIwIEBACiAJcmV0dXJuIHNwOwogfQogCi0vKgotICogZmNfZW1fYWxsb2NfeGlkIC0gcmV0dXJucyBhbiB4aWQgYmFzZWQgb24gcmVxdWVzdCB0eXBlCi0gKiBAbHAgOiBwdHIgdG8gYXNzb2NpYXRlZCBscG9ydAotICogQGZwIDogcHRyIHRvIHRoZSBhc3NvY2F0ZWQgZnJhbWUKKy8qKgorICogZmNfZXhjaF9lbV9hbGxvYygpIC0gYWxsb2NhdGUgYW4gZXhjaGFuZ2UgZnJvbSBhIHNwZWNpZmllZCBFTS4KKyAqIEBscG9ydDoJcHRyIHRvIHRoZSBsb2NhbCBwb3J0CisgKiBAbXA6CQlwdHIgdG8gdGhlIGV4Y2hhbmdlIG1hbmFnZXIKICAqCi0gKiBjaGVjayB0aGUgYXNzb2NpYXRlZCBmY19mc3BfcGt0IHRvIGdldCBzY3NpIGNvbW1hbmQgdHlwZSBhbmQKLSAqIGNvbW1hbmQgZGlyZWN0aW9uIHRvIGRlY2lkZSBmcm9tIHdoaWNoIHJhbmdlIHRoaXMgZXhjaCBpZAotICogd2lsbCBiZSBhbGxvY2F0ZWQgZnJvbS4KLSAqCi0gKiBSZXR1cm5zIDogMCBvciBhbiB2YWxpZCB4aWQKKyAqIFJldHVybnMgcG9pbnRlciB0byBhbGxvY2F0ZWQgZmNfZXhjaCB3aXRoIGV4Y2ggbG9jayBoZWxkLgogICovCi1zdGF0aWMgdTE2IGZjX2VtX2FsbG9jX3hpZChzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wLCBjb25zdCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQotewotCXUxNiB4aWQsIG1pbiwgbWF4OwotCXUxNiAqcGxhc3Q7Ci0Jc3RydWN0IGZjX2V4Y2ggKmVwID0gTlVMTDsKLQotCWlmIChtcC0+bWF4X3JlYWQpIHsKLQkJaWYgKGZjX2ZjcF9pc19yZWFkKGZyX2ZzcChmcCkpKSB7Ci0JCQltaW4gPSBtcC0+bWluX3hpZDsKLQkJCW1heCA9IG1wLT5tYXhfcmVhZDsKLQkJCXBsYXN0ID0gJm1wLT5sYXN0X3JlYWQ7Ci0JCX0gZWxzZSB7Ci0JCQltaW4gPSBtcC0+bWF4X3JlYWQgKyAxOwotCQkJbWF4ID0gbXAtPm1heF94aWQ7Ci0JCQlwbGFzdCA9ICZtcC0+bGFzdF94aWQ7Ci0JCX0KLQl9IGVsc2UgewotCQltaW4gPSBtcC0+bWluX3hpZDsKLQkJbWF4ID0gbXAtPm1heF94aWQ7Ci0JCXBsYXN0ID0gJm1wLT5sYXN0X3hpZDsKLQl9Ci0JeGlkID0gKnBsYXN0OwotCWRvIHsKLQkJeGlkID0gKHhpZCA9PSBtYXgpID8gbWluIDogeGlkICsgMTsKLQkJZXAgPSBtcC0+ZXhjaGVzW3hpZCAtIG1wLT5taW5feGlkXTsKLQl9IHdoaWxlICgoZXAgIT0gTlVMTCkgJiYgKHhpZCAhPSAqcGxhc3QpKTsKLQotCWlmICh1bmxpa2VseShlcCkpCi0JCXhpZCA9IDA7Ci0JZWxzZQotCQkqcGxhc3QgPSB4aWQ7Ci0KLQlyZXR1cm4geGlkOwotfQotCi0vKgotICogZmNfZXhjaF9hbGxvYyAtIGFsbG9jYXRlIGFuIGV4Y2hhbmdlLgotICogQG1wIDogcHRyIHRvIHRoZSBleGNoYW5nZSBtYW5hZ2VyCi0gKiBAeGlkOiBpbnB1dCB4aWQKLSAqCi0gKiBpZiB4aWQgaXMgc3VwcGxpZWQgemVybyB0aGVuIGFzc2lnbiBuZXh0IGZyZWUgZXhjaGFuZ2UgSUQKLSAqIGZyb20gZXhjaGFuZ2UgbWFuYWdlciwgb3RoZXJ3aXNlIHVzZSBzdXBwbGllZCB4aWQuCi0gKiBSZXR1cm5zIHdpdGggZXhjaCBsb2NrIGhlbGQuCi0gKi8KLXN0cnVjdCBmY19leGNoICpmY19leGNoX2FsbG9jKHN0cnVjdCBmY19leGNoX21nciAqbXAsCi0JCQkgICAgICBzdHJ1Y3QgZmNfZnJhbWUgKmZwLCB1MTYgeGlkKQorc3RhdGljIHN0cnVjdCBmY19leGNoICpmY19leGNoX2VtX2FsbG9jKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCQkJCXN0cnVjdCBmY19leGNoX21nciAqbXApCiB7CiAJc3RydWN0IGZjX2V4Y2ggKmVwOworCXVuc2lnbmVkIGludCBjcHU7CisJdTE2IGluZGV4OworCXN0cnVjdCBmY19leGNoX3Bvb2wgKnBvb2w7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGV4Y2hhbmdlICovCiAJZXAgPSBtZW1wb29sX2FsbG9jKG1wLT5lcF9wb29sLCBHRlBfQVRPTUlDKTsKQEAgLTUyOCwxNiArNTE1LDE3IEBACiAJfQogCW1lbXNldChlcCwgMCwgc2l6ZW9mKCplcCkpOwogCi0Jc3Bpbl9sb2NrX2JoKCZtcC0+ZW1fbG9jayk7Ci0JLyogYWxsb2MgeGlkIGlmIGlucHV0IHhpZCAwICovCi0JaWYgKCF4aWQpIHsKLQkJLyogYWxsb2MgYSBuZXcgeGlkICovCi0JCXhpZCA9IGZjX2VtX2FsbG9jX3hpZChtcCwgZnApOwotCQlpZiAoIXhpZCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibGliZmM6IEZhaWxlZCB0byBhbGxvY2F0ZSBhbiBleGhhbmdlXG4iKTsKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJcG9vbCA9IHBlcl9jcHVfcHRyKG1wLT5wb29sLCBjcHUpOworCXNwaW5fbG9ja19iaCgmcG9vbC0+bG9jayk7CisJaW5kZXggPSBwb29sLT5uZXh0X2luZGV4OworCS8qIGFsbG9jYXRlIG5ldyBleGNoIGZyb20gcG9vbCAqLworCXdoaWxlIChmY19leGNoX3B0cl9nZXQocG9vbCwgaW5kZXgpKSB7CisJCWluZGV4ID0gaW5kZXggPT0gbXAtPnBvb2xfbWF4X2luZGV4ID8gMCA6IGluZGV4ICsgMTsKKwkJaWYgKGluZGV4ID09IHBvb2wtPm5leHRfaW5kZXgpCiAJCQlnb3RvIGVycjsKLQkJfQogCX0KKwlwb29sLT5uZXh0X2luZGV4ID0gaW5kZXggPT0gbXAtPnBvb2xfbWF4X2luZGV4ID8gMCA6IGluZGV4ICsgMTsKIAogCWZjX2V4Y2hfaG9sZChlcCk7CS8qIGhvbGQgZm9yIGV4Y2ggaW4gbXAgKi8KIAlzcGluX2xvY2tfaW5pdCgmZXAtPmV4X2xvY2spOwpAQCAtNTQ4LDE4ICs1MzYsMTkgQEAKIAkgKi8KIAlzcGluX2xvY2tfYmgoJmVwLT5leF9sb2NrKTsKIAotCW1wLT5leGNoZXNbeGlkIC0gbXAtPm1pbl94aWRdID0gZXA7Ci0JbGlzdF9hZGRfdGFpbCgmZXAtPmV4X2xpc3QsICZtcC0+ZXhfbGlzdCk7CisJZmNfZXhjaF9wdHJfc2V0KHBvb2wsIGluZGV4LCBlcCk7CisJbGlzdF9hZGRfdGFpbCgmZXAtPmV4X2xpc3QsICZwb29sLT5leF9saXN0KTsKIAlmY19zZXFfYWxsb2MoZXAsIGVwLT5zZXFfaWQrKyk7Ci0JbXAtPnRvdGFsX2V4Y2hlcysrOwotCXNwaW5fdW5sb2NrX2JoKCZtcC0+ZW1fbG9jayk7CisJcG9vbC0+dG90YWxfZXhjaGVzKys7CisJc3Bpbl91bmxvY2tfYmgoJnBvb2wtPmxvY2spOwogCiAJLyoKIAkgKiAgdXBkYXRlIGV4Y2hhbmdlCiAJICovCi0JZXAtPm94aWQgPSBlcC0+eGlkID0geGlkOworCWVwLT5veGlkID0gZXAtPnhpZCA9IChpbmRleCA8PCBmY19jcHVfb3JkZXIgfCBjcHUpICsgbXAtPm1pbl94aWQ7CiAJZXAtPmVtID0gbXA7Ci0JZXAtPmxwID0gbXAtPmxwOworCWVwLT5wb29sID0gcG9vbDsKKwllcC0+bHAgPSBscG9ydDsKIAllcC0+Zl9jdGwgPSBGQ19GQ19GSVJTVF9TRVE7CS8qIG5leHQgc2VxIGlzIGZpcnN0IHNlcSAqLwogCWVwLT5yeGlkID0gRkNfWElEX1VOS05PV047CiAJZXAtPmNsYXNzID0gbXAtPmNsYXNzOwpAQCAtNTY3LDExICs1NTYsMzYgQEAKIG91dDoKIAlyZXR1cm4gZXA7CiBlcnI6Ci0Jc3Bpbl91bmxvY2tfYmgoJm1wLT5lbV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG9vbC0+bG9jayk7CiAJYXRvbWljX2luYygmbXAtPnN0YXRzLm5vX2ZyZWVfZXhjaF94aWQpOwogCW1lbXBvb2xfZnJlZShlcCwgbXAtPmVwX3Bvb2wpOwogCXJldHVybiBOVUxMOwogfQorCisvKioKKyAqIGZjX2V4Y2hfYWxsb2MoKSAtIGFsbG9jYXRlIGFuIGV4Y2hhbmdlLgorICogQGxwb3J0OglwdHIgdG8gdGhlIGxvY2FsIHBvcnQKKyAqIEBmcDoJCXB0ciB0byB0aGUgRkMgZnJhbWUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdhbGtzIHRoZSBsaXN0IG9mIHRoZSBleGNoYW5nZSBtYW5hZ2VyKEVNKQorICogYW5jaG9ycyB0byBzZWxlY3QgYSBFTSBmb3IgbmV3IGV4Y2hhbmdlIGFsbG9jYXRpb24uIFRoZQorICogRU0gaXMgc2VsZWN0ZWQgaGF2aW5nIGVpdGhlciBhIE5VTEwgbWF0Y2ggZnVuY3Rpb24gcG9pbnRlcgorICogb3IgY2FsbCB0byBtYXRjaCBmdW5jdGlvbiByZXR1cm5pbmcgdHJ1ZS4KKyAqLworc3RydWN0IGZjX2V4Y2ggKmZjX2V4Y2hfYWxsb2Moc3RydWN0IGZjX2xwb3J0ICpscG9ydCwgc3RydWN0IGZjX2ZyYW1lICpmcCkKK3sKKwlzdHJ1Y3QgZmNfZXhjaF9tZ3JfYW5jaG9yICplbWE7CisJc3RydWN0IGZjX2V4Y2ggKmVwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbWEsICZscG9ydC0+ZW1hX2xpc3QsIGVtYV9saXN0KSB7CisJCWlmICghZW1hLT5tYXRjaCB8fCBlbWEtPm1hdGNoKGZwKSkgeworCQkJZXAgPSBmY19leGNoX2VtX2FsbG9jKGxwb3J0LCBlbWEtPm1wKTsKKwkJCWlmIChlcCkKKwkJCQlyZXR1cm4gZXA7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CiBFWFBPUlRfU1lNQk9MKGZjX2V4Y2hfYWxsb2MpOwogCiAvKgpAQCAtNTc5LDE2ICs1OTMsMTggQEAKICAqLwogc3RhdGljIHN0cnVjdCBmY19leGNoICpmY19leGNoX2ZpbmQoc3RydWN0IGZjX2V4Y2hfbWdyICptcCwgdTE2IHhpZCkKIHsKKwlzdHJ1Y3QgZmNfZXhjaF9wb29sICpwb29sOwogCXN0cnVjdCBmY19leGNoICplcCA9IE5VTEw7CiAKIAlpZiAoKHhpZCA+PSBtcC0+bWluX3hpZCkgJiYgKHhpZCA8PSBtcC0+bWF4X3hpZCkpIHsKLQkJc3Bpbl9sb2NrX2JoKCZtcC0+ZW1fbG9jayk7Ci0JCWVwID0gbXAtPmV4Y2hlc1t4aWQgLSBtcC0+bWluX3hpZF07CisJCXBvb2wgPSBwZXJfY3B1X3B0cihtcC0+cG9vbCwgeGlkICYgZmNfY3B1X21hc2spOworCQlzcGluX2xvY2tfYmgoJnBvb2wtPmxvY2spOworCQllcCA9IGZjX2V4Y2hfcHRyX2dldChwb29sLCAoeGlkIC0gbXAtPm1pbl94aWQpID4+IGZjX2NwdV9vcmRlcik7CiAJCWlmIChlcCkgewogCQkJZmNfZXhjaF9ob2xkKGVwKTsKIAkJCVdBUk5fT04oZXAtPnhpZCAhPSB4aWQpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZtcC0+ZW1fbG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZwb29sLT5sb2NrKTsKIAl9CiAJcmV0dXJuIGVwOwogfQpAQCAtNjAyLDcgKzYxOCw3IEBACiAJcmMgPSBmY19leGNoX2RvbmVfbG9ja2VkKGVwKTsKIAlzcGluX3VubG9ja19iaCgmZXAtPmV4X2xvY2spOwogCWlmICghcmMpCi0JCWZjX2V4Y2hfbWdyX2RlbGV0ZV9lcChlcCk7CisJCWZjX2V4Y2hfZGVsZXRlKGVwKTsKIH0KIEVYUE9SVF9TWU1CT0woZmNfZXhjaF9kb25lKTsKIApAQCAtNjEwLDEyICs2MjYsMTQgQEAKICAqIEFsbG9jYXRlIGEgbmV3IGV4Y2hhbmdlIGFzIHJlc3BvbmRlci4KICAqIFNldHMgdGhlIHJlc3BvbmRlciBJRCBpbiB0aGUgZnJhbWUgaGVhZGVyLgogICovCi1zdGF0aWMgc3RydWN0IGZjX2V4Y2ggKmZjX2V4Y2hfcmVzcChzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQorc3RhdGljIHN0cnVjdCBmY19leGNoICpmY19leGNoX3Jlc3Aoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKKwkJCQkgICAgc3RydWN0IGZjX2V4Y2hfbWdyICptcCwKKwkJCQkgICAgc3RydWN0IGZjX2ZyYW1lICpmcCkKIHsKIAlzdHJ1Y3QgZmNfZXhjaCAqZXA7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CiAKLQllcCA9IG1wLT5scC0+dHQuZXhjaF9nZXQobXAtPmxwLCBmcCk7CisJZXAgPSBmY19leGNoX2FsbG9jKGxwb3J0LCBmcCk7CiAJaWYgKGVwKSB7CiAJCWVwLT5jbGFzcyA9IGZjX2ZyYW1lX2NsYXNzKGZwKTsKIApAQCAtNjQxLDcgKzY1OSw3IEBACiAJCQllcC0+ZXNiX3N0YXQgJj0gfkVTQl9TVF9TRVFfSU5JVDsKIAogCQlmY19leGNoX2hvbGQoZXApOwkvKiBob2xkIGZvciBjYWxsZXIgKi8KLQkJc3Bpbl91bmxvY2tfYmgoJmVwLT5leF9sb2NrKTsJLyogbG9jayBmcm9tIGV4Y2hfZ2V0ICovCisJCXNwaW5fdW5sb2NrX2JoKCZlcC0+ZXhfbG9jayk7CS8qIGxvY2sgZnJvbSBmY19leGNoX2FsbG9jICovCiAJfQogCXJldHVybiBlcDsKIH0KQEAgLTY1MSw3ICs2NjksOCBAQAogICogSWYgZmNfcGZfcmp0X3JlYXNvbiBpcyBGQ19SSlRfTk9ORSB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCBoYXZlIGEgaG9sZAogICogb24gdGhlIGVwIHRoYXQgc2hvdWxkIGJlIHJlbGVhc2VkIGJ5IHRoZSBjYWxsZXIuCiAgKi8KLXN0YXRpYyBlbnVtIGZjX3BmX3JqdF9yZWFzb24gZmNfc2VxX2xvb2t1cF9yZWNpcChzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wLAorc3RhdGljIGVudW0gZmNfcGZfcmp0X3JlYXNvbiBmY19zZXFfbG9va3VwX3JlY2lwKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCQkJCQkgc3RydWN0IGZjX2V4Y2hfbWdyICptcCwKIAkJCQkJCSBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7CkBAIC03MDUsNyArNzI0LDcgQEAKIAkJCQlyZWplY3QgPSBGQ19SSlRfUlhfSUQ7CiAJCQkJZ290byByZWw7CiAJCQl9Ci0JCQllcCA9IGZjX2V4Y2hfcmVzcChtcCwgZnApOworCQkJZXAgPSBmY19leGNoX3Jlc3AobHBvcnQsIG1wLCBmcCk7CiAJCQlpZiAoIWVwKSB7CiAJCQkJcmVqZWN0ID0gRkNfUkpUX0VYQ0hfRVNUOwkvKiBYWFggKi8KIAkJCQlnb3RvIG91dDsKQEAgLTgyMiw3ICs4NDEsNiBAQAogCXN0cnVjdCBmY19leGNoICplcCA9IGZjX3NlcV9leGNoKHNwKTsKIAogCXNwaW5fbG9ja19iaCgmZXAtPmV4X2xvY2spOwotCVdBUk5fT04oKGVwLT5lc2Jfc3RhdCAmIEVTQl9TVF9DT01QTEVURSkgIT0gMCk7CiAJc3AgPSBmY19zZXFfc3RhcnRfbmV4dF9sb2NrZWQoc3ApOwogCXNwaW5fdW5sb2NrX2JoKCZlcC0+ZXhfbG9jayk7CiAKQEAgLTk5OSw4ICsxMDE3LDggQEAKIAkgKi8KIAltZW1jcHkoZmgtPmZoX3NfaWQsIHJ4X2ZoLT5maF9kX2lkLCAzKTsKIAltZW1jcHkoZmgtPmZoX2RfaWQsIHJ4X2ZoLT5maF9zX2lkLCAzKTsKLQlmaC0+Zmhfb3hfaWQgPSByeF9maC0+ZmhfcnhfaWQ7Ci0JZmgtPmZoX3J4X2lkID0gcnhfZmgtPmZoX294X2lkOworCWZoLT5maF9veF9pZCA9IHJ4X2ZoLT5maF9veF9pZDsKKwlmaC0+ZmhfcnhfaWQgPSByeF9maC0+ZmhfcnhfaWQ7CiAJZmgtPmZoX3NlcV9jbnQgPSByeF9maC0+Zmhfc2VxX2NudDsKIAlmaC0+Zmhfcl9jdGwgPSBGQ19SQ1RMX0JBX1JKVDsKIAlmaC0+ZmhfdHlwZSA9IEZDX1RZUEVfQkxTOwpAQCAtMTA5Nyw3ICsxMTE1LDcgQEAKIAllbnVtIGZjX3BmX3JqdF9yZWFzb24gcmVqZWN0OwogCiAJZnJfc2VxKGZwKSA9IE5VTEw7Ci0JcmVqZWN0ID0gZmNfc2VxX2xvb2t1cF9yZWNpcChtcCwgZnApOworCXJlamVjdCA9IGZjX3NlcV9sb29rdXBfcmVjaXAobHAsIG1wLCBmcCk7CiAJaWYgKHJlamVjdCA9PSBGQ19SSlRfTk9ORSkgewogCQlzcCA9IGZyX3NlcShmcCk7CS8qIHNlcXVlbmNlIHdpbGwgYmUgaGVsZCAqLwogCQllcCA9IGZjX3NlcV9leGNoKHNwKTsKQEAgLTExMjMsNyArMTE0MSw3IEBACiAJCQlscC0+dHQubHBvcnRfcmVjdihscCwgc3AsIGZwKTsKIAkJZmNfZXhjaF9yZWxlYXNlKGVwKTsJLyogcmVsZWFzZSBmcm9tIGxvb2t1cCAqLwogCX0gZWxzZSB7Ci0JCUZDX0VNX0RCRyhtcCwgImV4Y2gvc2VxIGxvb2t1cCBmYWlsZWQ6IHJlamVjdCAleFxuIiwgcmVqZWN0KTsKKwkJRkNfTFBPUlRfREJHKGxwLCAiZXhjaC9zZXEgbG9va3VwIGZhaWxlZDogcmVqZWN0ICV4XG4iLCByZWplY3QpOwogCQlmY19mcmFtZV9mcmVlKGZwKTsKIAl9CiB9CkBAIC0xMTkzLDcgKzEyMTEsNyBAQAogCQlXQVJOX09OKGZjX3NlcV9leGNoKHNwKSAhPSBlcCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZlcC0+ZXhfbG9jayk7CiAJCWlmICghcmMpCi0JCQlmY19leGNoX21ncl9kZWxldGVfZXAoZXApOworCQkJZmNfZXhjaF9kZWxldGUoZXApOwogCX0KIAogCS8qCkBAIC0xMjI5LDEzICsxMjQ3LDEyIEBACiAJc3RydWN0IGZjX3NlcSAqc3A7CiAKIAlzcCA9IGZjX3NlcV9sb29rdXBfb3JpZyhtcCwgZnApOwkvKiBkb2Vzbid0IGhvbGQgc2VxdWVuY2UgKi8KLQlpZiAoIXNwKSB7CisKKwlpZiAoIXNwKQogCQlhdG9taWNfaW5jKCZtcC0+c3RhdHMueGlkX25vdF9mb3VuZCk7Ci0JCUZDX0VNX0RCRyhtcCwgInNlcSBsb29rdXAgZmFpbGVkXG4iKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJYXRvbWljX2luYygmbXAtPnN0YXRzLm5vbl9ibHNfcmVzcCk7Ci0JCUZDX0VNX0RCRyhtcCwgIm5vbi1CTFMgcmVzcG9uc2UgdG8gc2VxdWVuY2UiKTsKLQl9CisKIAlmY19mcmFtZV9mcmVlKGZwKTsKIH0KIApAQCAtMTMwNCw3ICsxMzIxLDcgQEAKIAkJcmMgPSBmY19leGNoX2RvbmVfbG9ja2VkKGVwKTsKIAlzcGluX3VubG9ja19iaCgmZXAtPmV4X2xvY2spOwogCWlmICghcmMpCi0JCWZjX2V4Y2hfbWdyX2RlbGV0ZV9lcChlcCk7CisJCWZjX2V4Y2hfZGVsZXRlKGVwKTsKIAogCWlmIChyZXNwKQogCQlyZXNwKHNwLCBmcCwgZXhfcmVzcF9hcmcpOwpAQCAtMTQ0Nyw0NCArMTQ2NCw3NyBAQAogCXJjID0gZmNfZXhjaF9kb25lX2xvY2tlZChlcCk7CiAJc3Bpbl91bmxvY2tfYmgoJmVwLT5leF9sb2NrKTsKIAlpZiAoIXJjKQotCQlmY19leGNoX21ncl9kZWxldGVfZXAoZXApOworCQlmY19leGNoX2RlbGV0ZShlcCk7CiAKIAlpZiAocmVzcCkKIAkJcmVzcChzcCwgRVJSX1BUUigtRkNfRVhfQ0xPU0VEKSwgYXJnKTsKIH0KIAotLyoKLSAqIFJlc2V0IGFuIGV4Y2hhbmdlIG1hbmFnZXIsIHJlbGVhc2luZyBhbGwgc2VxdWVuY2VzIGFuZCBleGNoYW5nZXMuCi0gKiBJZiBzaWQgaXMgbm9uLXplcm8sIHJlc2V0IG9ubHkgZXhjaGFuZ2VzIHdlIHNvdXJjZSBmcm9tIHRoYXQgRklELgotICogSWYgZGlkIGlzIG5vbi16ZXJvLCByZXNldCBvbmx5IGV4Y2hhbmdlcyBkZXN0aW5lZCB0byB0aGF0IEZJRC4KKy8qKgorICogZmNfZXhjaF9wb29sX3Jlc2V0KCkgLSBSZXNldHMgYW4gcGVyIGNwdSBleGNoZXMgcG9vbC4KKyAqIEBscG9ydDoJcHRyIHRvIHRoZSBsb2NhbCBwb3J0CisgKiBAcG9vbDoJcHRyIHRvIHRoZSBwZXIgY3B1IGV4Y2hlcyBwb29sCisgKiBAc2lkOglzb3VyY2UgRkMgSUQKKyAqIEBkaWQ6CWRlc3RpbmF0aW9uIEZDIElECisgKgorICogUmVzZXRzIGFuIHBlciBjcHUgZXhjaGVzIHBvb2wsIHJlbGVhc2luZyBpdHMgYWxsIHNlcXVlbmNlcworICogYW5kIGV4Y2hhbmdlcy4gSWYgc2lkIGlzIG5vbi16ZXJvLCB0aGVuIHJlc2V0IG9ubHkgZXhjaGFuZ2VzCisgKiB3ZSBzb3VyY2VkIGZyb20gdGhhdCBGSUQuIElmIGRpZCBpcyBub24temVybywgcmVzZXQgb25seQorICogZXhjaGFuZ2VzIGRlc3RpbmVkIHRvIHRoYXQgRklELgogICovCi12b2lkIGZjX2V4Y2hfbWdyX3Jlc2V0KHN0cnVjdCBmY19scG9ydCAqbHAsIHUzMiBzaWQsIHUzMiBkaWQpCitzdGF0aWMgdm9pZCBmY19leGNoX3Bvb2xfcmVzZXQoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKKwkJCSAgICAgICBzdHJ1Y3QgZmNfZXhjaF9wb29sICpwb29sLAorCQkJICAgICAgIHUzMiBzaWQsIHUzMiBkaWQpCiB7CiAJc3RydWN0IGZjX2V4Y2ggKmVwOwogCXN0cnVjdCBmY19leGNoICpuZXh0OwotCXN0cnVjdCBmY19leGNoX21nciAqbXAgPSBscC0+ZW1wOwogCi0Jc3Bpbl9sb2NrX2JoKCZtcC0+ZW1fbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZwb29sLT5sb2NrKTsKIHJlc3RhcnQ6Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVwLCBuZXh0LCAmbXAtPmV4X2xpc3QsIGV4X2xpc3QpIHsKLQkJaWYgKChzaWQgPT0gMCB8fCBzaWQgPT0gZXAtPnNpZCkgJiYKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXAsIG5leHQsICZwb29sLT5leF9saXN0LCBleF9saXN0KSB7CisJCWlmICgobHBvcnQgPT0gZXAtPmxwKSAmJgorCQkgICAgKHNpZCA9PSAwIHx8IHNpZCA9PSBlcC0+c2lkKSAmJgogCQkgICAgKGRpZCA9PSAwIHx8IGRpZCA9PSBlcC0+ZGlkKSkgewogCQkJZmNfZXhjaF9ob2xkKGVwKTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZtcC0+ZW1fbG9jayk7CisJCQlzcGluX3VubG9ja19iaCgmcG9vbC0+bG9jayk7CiAKIAkJCWZjX2V4Y2hfcmVzZXQoZXApOwogCiAJCQlmY19leGNoX3JlbGVhc2UoZXApOwotCQkJc3Bpbl9sb2NrX2JoKCZtcC0+ZW1fbG9jayk7CisJCQlzcGluX2xvY2tfYmgoJnBvb2wtPmxvY2spOwogCiAJCQkvKgotCQkJICogbXVzdCByZXN0YXJ0IGxvb3AgaW5jYXNlIHdoaWxlIGxvY2sgd2FzIGRvd24KLQkJCSAqIG11bHRpcGxlIGVwcyB3ZXJlIHJlbGVhc2VkLgorCQkJICogbXVzdCByZXN0YXJ0IGxvb3AgaW5jYXNlIHdoaWxlIGxvY2sKKwkJCSAqIHdhcyBkb3duIG11bHRpcGxlIGVwcyB3ZXJlIHJlbGVhc2VkLgogCQkJICovCiAJCQlnb3RvIHJlc3RhcnQ7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJm1wLT5lbV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG9vbC0+bG9jayk7Cit9CisKKy8qKgorICogZmNfZXhjaF9tZ3JfcmVzZXQoKSAtIFJlc2V0cyBhbGwgRU1zIG9mIGEgbHBvcnQKKyAqIEBscG9ydDoJcHRyIHRvIHRoZSBsb2NhbCBwb3J0CisgKiBAc2lkOglzb3VyY2UgRkMgSUQKKyAqIEBkaWQ6CWRlc3RpbmF0aW9uIEZDIElECisgKgorICogUmVzZXQgYWxsIEVNcyBvZiBhIGxwb3J0LCByZWxlYXNpbmcgaXRzIGFsbCBzZXF1ZW5jZXMgYW5kCisgKiBleGNoYW5nZXMuIElmIHNpZCBpcyBub24temVybywgdGhlbiByZXNldCBvbmx5IGV4Y2hhbmdlcworICogd2Ugc291cmNlZCBmcm9tIHRoYXQgRklELiBJZiBkaWQgaXMgbm9uLXplcm8sIHJlc2V0IG9ubHkKKyAqIGV4Y2hhbmdlcyBkZXN0aW5lZCB0byB0aGF0IEZJRC4KKyAqLwordm9pZCBmY19leGNoX21ncl9yZXNldChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LCB1MzIgc2lkLCB1MzIgZGlkKQoreworCXN0cnVjdCBmY19leGNoX21ncl9hbmNob3IgKmVtYTsKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbWEsICZscG9ydC0+ZW1hX2xpc3QsIGVtYV9saXN0KSB7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCQlmY19leGNoX3Bvb2xfcmVzZXQobHBvcnQsCisJCQkJCSAgIHBlcl9jcHVfcHRyKGVtYS0+bXAtPnBvb2wsIGNwdSksCisJCQkJCSAgIHNpZCwgZGlkKTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKGZjX2V4Y2hfbWdyX3Jlc2V0KTsKIApAQCAtMTczMCw4NSArMTc4MCwxMjkgQEAKIAlmY19mcmFtZV9mcmVlKGZwKTsKIH0KIAorc3RydWN0IGZjX2V4Y2hfbWdyX2FuY2hvciAqZmNfZXhjaF9tZ3JfYWRkKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCQkJCSAgIHN0cnVjdCBmY19leGNoX21nciAqbXAsCisJCQkJCSAgIGJvb2wgKCptYXRjaCkoc3RydWN0IGZjX2ZyYW1lICopKQoreworCXN0cnVjdCBmY19leGNoX21ncl9hbmNob3IgKmVtYTsKKworCWVtYSA9IGttYWxsb2Moc2l6ZW9mKCplbWEpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWVtYSkKKwkJcmV0dXJuIGVtYTsKKworCWVtYS0+bXAgPSBtcDsKKwllbWEtPm1hdGNoID0gbWF0Y2g7CisJLyogYWRkIEVNIGFuY2hvciB0byBFTSBhbmNob3JzIGxpc3QgKi8KKwlsaXN0X2FkZF90YWlsKCZlbWEtPmVtYV9saXN0LCAmbHBvcnQtPmVtYV9saXN0KTsKKwlrcmVmX2dldCgmbXAtPmtyZWYpOworCXJldHVybiBlbWE7Cit9CitFWFBPUlRfU1lNQk9MKGZjX2V4Y2hfbWdyX2FkZCk7CisKK3N0YXRpYyB2b2lkIGZjX2V4Y2hfbWdyX2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGZjX2V4Y2hfbWdyICptcCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZmNfZXhjaF9tZ3IsIGtyZWYpOworCisJbWVtcG9vbF9kZXN0cm95KG1wLT5lcF9wb29sKTsKKwlmcmVlX3BlcmNwdShtcC0+cG9vbCk7CisJa2ZyZWUobXApOworfQorCit2b2lkIGZjX2V4Y2hfbWdyX2RlbChzdHJ1Y3QgZmNfZXhjaF9tZ3JfYW5jaG9yICplbWEpCit7CisJLyogcmVtb3ZlIEVNIGFuY2hvciBmcm9tIEVNIGFuY2hvcnMgbGlzdCAqLworCWxpc3RfZGVsKCZlbWEtPmVtYV9saXN0KTsKKwlrcmVmX3B1dCgmZW1hLT5tcC0+a3JlZiwgZmNfZXhjaF9tZ3JfZGVzdHJveSk7CisJa2ZyZWUoZW1hKTsKK30KK0VYUE9SVF9TWU1CT0woZmNfZXhjaF9tZ3JfZGVsKTsKKwogc3RydWN0IGZjX2V4Y2hfbWdyICpmY19leGNoX21ncl9hbGxvYyhzdHJ1Y3QgZmNfbHBvcnQgKmxwLAogCQkJCSAgICAgIGVudW0gZmNfY2xhc3MgY2xhc3MsCi0JCQkJICAgICAgdTE2IG1pbl94aWQsIHUxNiBtYXhfeGlkKQorCQkJCSAgICAgIHUxNiBtaW5feGlkLCB1MTYgbWF4X3hpZCwKKwkJCQkgICAgICBib29sICgqbWF0Y2gpKHN0cnVjdCBmY19mcmFtZSAqKSkKIHsKIAlzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wOwotCXNpemVfdCBsZW47CisJdTE2IHBvb2xfZXhjaF9yYW5nZTsKKwlzaXplX3QgcG9vbF9zaXplOworCXVuc2lnbmVkIGludCBjcHU7CisJc3RydWN0IGZjX2V4Y2hfcG9vbCAqcG9vbDsKIAotCWlmIChtYXhfeGlkIDw9IG1pbl94aWQgfHwgbWluX3hpZCA9PSAwIHx8IG1heF94aWQgPT0gRkNfWElEX1VOS05PV04pIHsKKwlpZiAobWF4X3hpZCA8PSBtaW5feGlkIHx8IG1heF94aWQgPT0gRkNfWElEX1VOS05PV04gfHwKKwkgICAgKG1pbl94aWQgJiBmY19jcHVfbWFzaykgIT0gMCkgewogCQlGQ19MUE9SVF9EQkcobHAsICJJbnZhbGlkIG1pbl94aWQgMHg6JXggYW5kIG1heF94aWQgMHg6JXhcbiIsCiAJCQkgICAgIG1pbl94aWQsIG1heF94aWQpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAkvKgotCSAqIE1lbW9yeSBuZWVkIGZvciBFTQorCSAqIGFsbG9jYXRlIG1lbW9yeSBmb3IgRU0KIAkgKi8KLSNkZWZpbmUgeGlkX29rKGksIG0xLCBtMikgKCgoaSkgPj0gKG0xKSkgJiYgKChpKSA8PSAobTIpKSkKLQlsZW4gPSAobWF4X3hpZCAtIG1pbl94aWQgKyAxKSAqIChzaXplb2Yoc3RydWN0IGZjX2V4Y2ggKikpOwotCWxlbiArPSBzaXplb2Yoc3RydWN0IGZjX2V4Y2hfbWdyKTsKLQotCW1wID0ga3phbGxvYyhsZW4sIEdGUF9BVE9NSUMpOworCW1wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZjX2V4Y2hfbWdyKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFtcCkKIAkJcmV0dXJuIE5VTEw7CiAKIAltcC0+Y2xhc3MgPSBjbGFzczsKLQltcC0+dG90YWxfZXhjaGVzID0gMDsKLQltcC0+ZXhjaGVzID0gKHN0cnVjdCBmY19leGNoICoqKShtcCArIDEpOwotCW1wLT5scCA9IGxwOwogCS8qIGFkanVzdCBlbSBleGNoIHhpZCByYW5nZSBmb3Igb2ZmbG9hZCAqLwogCW1wLT5taW5feGlkID0gbWluX3hpZDsKIAltcC0+bWF4X3hpZCA9IG1heF94aWQ7Ci0JbXAtPmxhc3RfeGlkID0gbWluX3hpZCAtIDE7Ci0JbXAtPm1heF9yZWFkID0gMDsKLQltcC0+bGFzdF9yZWFkID0gMDsKLQlpZiAobHAtPmxyb19lbmFibGVkICYmIHhpZF9vayhscC0+bHJvX3hpZCwgbWluX3hpZCwgbWF4X3hpZCkpIHsKLQkJbXAtPm1heF9yZWFkID0gbHAtPmxyb194aWQ7Ci0JCW1wLT5sYXN0X3JlYWQgPSBtaW5feGlkIC0gMTsKLQkJbXAtPmxhc3RfeGlkID0gbXAtPm1heF9yZWFkOwotCX0gZWxzZSB7Ci0JCS8qIGRpc2FibGUgbHJvIGlmIG5vIHhpZCBjb250cm9sIG92ZXIgcmVhZCAqLwotCQlscC0+bHJvX2VuYWJsZWQgPSAwOwotCX0KLQotCUlOSVRfTElTVF9IRUFEKCZtcC0+ZXhfbGlzdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1wLT5lbV9sb2NrKTsKIAogCW1wLT5lcF9wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKDIsIGZjX2VtX2NhY2hlcCk7CiAJaWYgKCFtcC0+ZXBfcG9vbCkKIAkJZ290byBmcmVlX21wOwogCisJLyoKKwkgKiBTZXR1cCBwZXIgY3B1IGV4Y2ggcG9vbCB3aXRoIGVudGlyZSBleGNoYW5nZSBpZCByYW5nZSBlcXVhbGx5CisJICogZGl2aWRlZCBhY3Jvc3MgYWxsIGNwdXMuIFRoZSBleGNoIHBvaW50ZXJzIGFycmF5IG1lbW9yeSBpcworCSAqIGFsbG9jYXRlZCBmb3IgZXhjaCByYW5nZSBwZXIgcG9vbC4KKwkgKi8KKwlwb29sX2V4Y2hfcmFuZ2UgPSAobXAtPm1heF94aWQgLSBtcC0+bWluX3hpZCArIDEpIC8gKGZjX2NwdV9tYXNrICsgMSk7CisJbXAtPnBvb2xfbWF4X2luZGV4ID0gcG9vbF9leGNoX3JhbmdlIC0gMTsKKworCS8qCisJICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcGVyIGNwdSBleGNoIHBvb2wKKwkgKi8KKwlwb29sX3NpemUgPSBzaXplb2YoKnBvb2wpICsgcG9vbF9leGNoX3JhbmdlICogc2l6ZW9mKHN0cnVjdCBmY19leGNoICopOworCW1wLT5wb29sID0gX19hbGxvY19wZXJjcHUocG9vbF9zaXplLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgZmNfZXhjaF9wb29sKSk7CisJaWYgKCFtcC0+cG9vbCkKKwkJZ290byBmcmVlX21lbXBvb2w7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlwb29sID0gcGVyX2NwdV9wdHIobXAtPnBvb2wsIGNwdSk7CisJCXNwaW5fbG9ja19pbml0KCZwb29sLT5sb2NrKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPmV4X2xpc3QpOworCX0KKworCWtyZWZfaW5pdCgmbXAtPmtyZWYpOworCWlmICghZmNfZXhjaF9tZ3JfYWRkKGxwLCBtcCwgbWF0Y2gpKSB7CisJCWZyZWVfcGVyY3B1KG1wLT5wb29sKTsKKwkJZ290byBmcmVlX21lbXBvb2w7CisJfQorCisJLyoKKwkgKiBBYm92ZSBrcmVmX2luaXQoKSBzZXRzIG1wLT5rcmVmIHRvIDEgYW5kIHRoZW4KKwkgKiBjYWxsIHRvIGZjX2V4Y2hfbWdyX2FkZCBpbmNyZW1lbnRlZCBtcC0+a3JlZiBhZ2FpbiwKKwkgKiBzbyBhZGp1c3QgdGhhdCBleHRyYSBpbmNyZW1lbnQuCisJICovCisJa3JlZl9wdXQoJm1wLT5rcmVmLCBmY19leGNoX21ncl9kZXN0cm95KTsKIAlyZXR1cm4gbXA7CiAKK2ZyZWVfbWVtcG9vbDoKKwltZW1wb29sX2Rlc3Ryb3kobXAtPmVwX3Bvb2wpOwogZnJlZV9tcDoKIAlrZnJlZShtcCk7CiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX2V4Y2hfbWdyX2FsbG9jKTsKIAotdm9pZCBmY19leGNoX21ncl9mcmVlKHN0cnVjdCBmY19leGNoX21nciAqbXApCit2b2lkIGZjX2V4Y2hfbWdyX2ZyZWUoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKIHsKLQlXQVJOX09OKCFtcCk7Ci0JLyoKLQkgKiBUaGUgdG90YWwgZXhjaCBjb3VudCBtdXN0IGJlIHplcm8KLQkgKiBiZWZvcmUgZnJlZWluZyBleGNoYW5nZSBtYW5hZ2VyLgotCSAqLwotCVdBUk5fT04obXAtPnRvdGFsX2V4Y2hlcyAhPSAwKTsKLQltZW1wb29sX2Rlc3Ryb3kobXAtPmVwX3Bvb2wpOwotCWtmcmVlKG1wKTsKKwlzdHJ1Y3QgZmNfZXhjaF9tZ3JfYW5jaG9yICplbWEsICpuZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVtYSwgbmV4dCwgJmxwb3J0LT5lbWFfbGlzdCwgZW1hX2xpc3QpCisJCWZjX2V4Y2hfbWdyX2RlbChlbWEpOwogfQogRVhQT1JUX1NZTUJPTChmY19leGNoX21ncl9mcmVlKTsKIAotc3RydWN0IGZjX2V4Y2ggKmZjX2V4Y2hfZ2V0KHN0cnVjdCBmY19scG9ydCAqbHAsIHN0cnVjdCBmY19mcmFtZSAqZnApCi17Ci0JaWYgKCFscCB8fCAhbHAtPmVtcCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gZmNfZXhjaF9hbGxvYyhscC0+ZW1wLCBmcCwgMCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGZjX2V4Y2hfZ2V0KTsKIAogc3RydWN0IGZjX3NlcSAqZmNfZXhjaF9zZXFfc2VuZChzdHJ1Y3QgZmNfbHBvcnQgKmxwLAogCQkJCXN0cnVjdCBmY19mcmFtZSAqZnAsCkBAIC0xODIzLDcgKzE5MTcsNyBAQAogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOwogCWludCByYyA9IDE7CiAKLQllcCA9IGxwLT50dC5leGNoX2dldChscCwgZnApOworCWVwID0gZmNfZXhjaF9hbGxvYyhscCwgZnApOwogCWlmICghZXApIHsKIAkJZmNfZnJhbWVfZnJlZShmcCk7CiAJCXJldHVybiBOVUxMOwpAQCAtMTg0Myw3ICsxOTM3LDggQEAKIAlmY19leGNoX3NldHVwX2hkcihlcCwgZnAsIGVwLT5mX2N0bCk7CiAJc3AtPmNudCsrOwogCi0JZmNfZmNwX2RkcF9zZXR1cChmcl9mc3AoZnApLCBlcC0+eGlkKTsKKwlpZiAoZXAtPnhpZCA8PSBscC0+bHJvX3hpZCkKKwkJZmNfZmNwX2RkcF9zZXR1cChmcl9mc3AoZnApLCBlcC0+eGlkKTsKIAogCWlmICh1bmxpa2VseShscC0+dHQuZnJhbWVfc2VuZChscCwgZnApKSkKIAkJZ290byBlcnI7CkBAIC0xODYwLDcgKzE5NTUsNyBAQAogCXJjID0gZmNfZXhjaF9kb25lX2xvY2tlZChlcCk7CiAJc3Bpbl91bmxvY2tfYmgoJmVwLT5leF9sb2NrKTsKIAlpZiAoIXJjKQotCQlmY19leGNoX21ncl9kZWxldGVfZXAoZXApOworCQlmY19leGNoX2RlbGV0ZShlcCk7CiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX2V4Y2hfc2VxX3NlbmQpOwpAQCAtMTg2OCwyNCArMTk2Myw0NCBAQAogLyoKICAqIFJlY2VpdmUgYSBmcmFtZQogICovCi12b2lkIGZjX2V4Y2hfcmVjdihzdHJ1Y3QgZmNfbHBvcnQgKmxwLCBzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wLAotCQkgIHN0cnVjdCBmY19mcmFtZSAqZnApCit2b2lkIGZjX2V4Y2hfcmVjdihzdHJ1Y3QgZmNfbHBvcnQgKmxwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7Ci0JdTMyIGZfY3RsOworCXN0cnVjdCBmY19leGNoX21ncl9hbmNob3IgKmVtYTsKKwl1MzIgZl9jdGwsIGZvdW5kID0gMDsKKwl1MTYgb3hpZDsKIAogCS8qIGxwb3J0IGxvY2sgPyAqLwotCWlmICghbHAgfHwgIW1wIHx8IChscC0+c3RhdGUgPT0gTFBPUlRfU1RfTk9ORSkpIHsKKwlpZiAoIWxwIHx8IGxwLT5zdGF0ZSA9PSBMUE9SVF9TVF9ESVNBQkxFRCkgewogCQlGQ19MUE9SVF9EQkcobHAsICJSZWNlaXZpbmcgZnJhbWVzIGZvciBhbiBscG9ydCB0aGF0ICIKIAkJCSAgICAgImhhcyBub3QgYmVlbiBpbml0aWFsaXplZCBjb3JyZWN0bHlcbiIpOwogCQlmY19mcmFtZV9mcmVlKGZwKTsKIAkJcmV0dXJuOwogCX0KIAorCWZfY3RsID0gbnRvaDI0KGZoLT5maF9mX2N0bCk7CisJb3hpZCA9IG50b2hzKGZoLT5maF9veF9pZCk7CisJaWYgKGZfY3RsICYgRkNfRkNfRVhfQ1RYKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZW1hLCAmbHAtPmVtYV9saXN0LCBlbWFfbGlzdCkgeworCQkJaWYgKChveGlkID49IGVtYS0+bXAtPm1pbl94aWQpICYmCisJCQkgICAgKG94aWQgPD0gZW1hLT5tcC0+bWF4X3hpZCkpIHsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoIWZvdW5kKSB7CisJCQlGQ19MUE9SVF9EQkcobHAsICJSZWNlaXZlZCByZXNwb25zZSBmb3Igb3V0ICIKKwkJCQkgICAgICJvZiByYW5nZSBveGlkOiVoeFxuIiwgb3hpZCk7CisJCQlmY19mcmFtZV9mcmVlKGZwKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZQorCQllbWEgPSBsaXN0X2VudHJ5KGxwLT5lbWFfbGlzdC5wcmV2LCB0eXBlb2YoKmVtYSksIGVtYV9saXN0KTsKKwogCS8qCiAJICogSWYgZnJhbWUgaXMgbWFya2VkIGludmFsaWQsIGp1c3QgZHJvcCBpdC4KIAkgKi8KLQlmX2N0bCA9IG50b2gyNChmaC0+ZmhfZl9jdGwpOwogCXN3aXRjaCAoZnJfZW9mKGZwKSkgewogCWNhc2UgRkNfRU9GX1Q6CiAJCWlmIChmX2N0bCAmIEZDX0ZDX0VORF9TRVEpCkBAIC0xODkzLDM0ICsyMDA4LDI0IEBACiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgRkNfRU9GX046CiAJCWlmIChmaC0+ZmhfdHlwZSA9PSBGQ19UWVBFX0JMUykKLQkJCWZjX2V4Y2hfcmVjdl9ibHMobXAsIGZwKTsKKwkJCWZjX2V4Y2hfcmVjdl9ibHMoZW1hLT5tcCwgZnApOwogCQllbHNlIGlmICgoZl9jdGwgJiAoRkNfRkNfRVhfQ1RYIHwgRkNfRkNfU0VRX0NUWCkpID09CiAJCQkgRkNfRkNfRVhfQ1RYKQotCQkJZmNfZXhjaF9yZWN2X3NlcV9yZXNwKG1wLCBmcCk7CisJCQlmY19leGNoX3JlY3Zfc2VxX3Jlc3AoZW1hLT5tcCwgZnApOwogCQllbHNlIGlmIChmX2N0bCAmIEZDX0ZDX1NFUV9DVFgpCi0JCQlmY19leGNoX3JlY3ZfcmVzcChtcCwgZnApOworCQkJZmNfZXhjaF9yZWN2X3Jlc3AoZW1hLT5tcCwgZnApOwogCQllbHNlCi0JCQlmY19leGNoX3JlY3ZfcmVxKGxwLCBtcCwgZnApOworCQkJZmNfZXhjaF9yZWN2X3JlcShscCwgZW1hLT5tcCwgZnApOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlGQ19FTV9EQkcobXAsICJkcm9wcGluZyBpbnZhbGlkIGZyYW1lIChlb2YgJXgpIiwgZnJfZW9mKGZwKSk7CisJCUZDX0xQT1JUX0RCRyhscCwgImRyb3BwaW5nIGludmFsaWQgZnJhbWUgKGVvZiAleCkiLCBmcl9lb2YoZnApKTsKIAkJZmNfZnJhbWVfZnJlZShmcCk7Ci0JCWJyZWFrOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woZmNfZXhjaF9yZWN2KTsKIAogaW50IGZjX2V4Y2hfaW5pdChzdHJ1Y3QgZmNfbHBvcnQgKmxwKQogewotCWlmICghbHAtPnR0LmV4Y2hfZ2V0KSB7Ci0JCS8qCi0JCSAqICBleGNoX3B1dCgpIHNob3VsZCBiZSBOVUxMIGlmCi0JCSAqICBleGNoX2dldCgpIGlzIE5VTEwKLQkJICovCi0JCVdBUk5fT04obHAtPnR0LmV4Y2hfcHV0KTsKLQkJbHAtPnR0LmV4Y2hfZ2V0ID0gZmNfZXhjaF9nZXQ7Ci0JfQotCiAJaWYgKCFscC0+dHQuc2VxX3N0YXJ0X25leHQpCiAJCWxwLT50dC5zZXFfc3RhcnRfbmV4dCA9IGZjX3NlcV9zdGFydF9uZXh0OwogCkBAIC0xOTQyLDYgKzIwNDcsMjggQEAKIAlpZiAoIWxwLT50dC5zZXFfZXhjaF9hYm9ydCkKIAkJbHAtPnR0LnNlcV9leGNoX2Fib3J0ID0gZmNfc2VxX2V4Y2hfYWJvcnQ7CiAKKwkvKgorCSAqIEluaXRpYWxpemUgZmNfY3B1X21hc2sgYW5kIGZjX2NwdV9vcmRlci4gVGhlCisJICogZmNfY3B1X21hc2sgaXMgc2V0IGZvciBucl9jcHVfaWRzIHJvdW5kZWQgdXAKKwkgKiB0byBvcmRlciBvZiAyJ3MgKiBwb3dlciBhbmQgb3JkZXIgaXMgc3RvcmVkCisJICogaW4gZmNfY3B1X29yZGVyIGFzIHRoaXMgaXMgbGF0ZXIgcmVxdWlyZWQgaW4KKwkgKiBtYXBwaW5nIGJldHdlZW4gYW4gZXhjaCBpZCBhbmQgZXhjaCBhcnJheSBpbmRleAorCSAqIGluIHBlciBjcHUgZXhjaCBwb29sLgorCSAqCisJICogVGhpcyByb3VuZCB1cCBpcyByZXF1aXJlZCB0byBhbGlnbiBmY19jcHVfbWFzaworCSAqIHRvIGV4Y2hhbmdlIGlkJ3MgbG93ZXIgYml0cyBzdWNoIHRoYXQgYWxsIGluY29taW5nCisJICogZnJhbWVzIG9mIGFuIGV4Y2hhbmdlIGdldHMgZGVsaXZlcmVkIHRvIHRoZSBzYW1lCisJICogY3B1IG9uIHdoaWNoIGV4Y2hhbmdlIG9yaWdpbmF0ZWQgYnkgc2ltcGxlIGJpdHdpc2UKKwkgKiBBTkQgb3BlcmF0aW9uIGJldHdlZW4gZmNfY3B1X21hc2sgYW5kIGV4Y2hhbmdlIGlkLgorCSAqLworCWZjX2NwdV9tYXNrID0gMTsKKwlmY19jcHVfb3JkZXIgPSAwOworCXdoaWxlIChmY19jcHVfbWFzayA8IG5yX2NwdV9pZHMpIHsKKwkJZmNfY3B1X21hc2sgPDw9IDE7CisJCWZjX2NwdV9vcmRlcisrOworCX0KKwlmY19jcHVfbWFzay0tOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX2V4Y2hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKaW5kZXggZTMwM2UwZC4uNTlhNDQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYwpAQCAtNTA3LDMzICs1MDcsNiBAQAogCWZfY3RsID0gRkNfRkNfUkVMX09GRjsKIAlXQVJOX09OKCFzZXEpOwogCi0JLyoKLQkgKiBJZiBhIGdldF9wYWdlKCkvcHV0X3BhZ2UoKSB3aWxsIGZhaWwsIGRvbid0IHVzZSBzZyBsaXN0cwotCSAqIGluIHRoZSBmY19mcmFtZSBzdHJ1Y3R1cmUuCi0JICoKLQkgKiBUaGUgcHV0X3BhZ2UoKSBtYXkgYmUgbG9uZyBhZnRlciB0aGUgSS9PIGhhcyBjb21wbGV0ZWQKLQkgKiBpbiB0aGUgY2FzZSBvZiBGQ29FLCBzaW5jZSB0aGUgbmV0d29yayBkcml2ZXIgZG9lcyBpdAotCSAqIHZpYSBmcmVlX3NrYigpLiAgU2VlIHRoZSB0ZXN0IGluIGZyZWVfcGFnZXNfY2hlY2soKS4KLQkgKgotCSAqIFRlc3QgdGhpcyBjYXNlIHdpdGggJ2RkIDwvZGV2L3plcm8gPi9kZXYvc3QwIGJzPTY0aycuCi0JICovCi0JaWYgKHVzaW5nX3NnKSB7Ci0JCWZvciAoc2cgPSBzY3NpX3NnbGlzdChzYyk7IHNnOyBzZyA9IHNnX25leHQoc2cpKSB7Ci0JCQlpZiAocGFnZV9jb3VudChzZ19wYWdlKHNnKSkgPT0gMCB8fAotCQkJICAgIChzZ19wYWdlKHNnKS0+ZmxhZ3MgJiAoMSA8PCBQR19scnUgfAotCQkJCQkJICAgMSA8PCBQR19wcml2YXRlIHwKLQkJCQkJCSAgIDEgPDwgUEdfbG9ja2VkIHwKLQkJCQkJCSAgIDEgPDwgUEdfYWN0aXZlIHwKLQkJCQkJCSAgIDEgPDwgUEdfc2xhYiB8Ci0JCQkJCQkgICAxIDw8IFBHX3N3YXBjYWNoZSB8Ci0JCQkJCQkgICAxIDw8IFBHX3dyaXRlYmFjayB8Ci0JCQkJCQkgICAxIDw8IFBHX3Jlc2VydmVkIHwKLQkJCQkJCSAgIDEgPDwgUEdfYnVkZHkpKSkgewotCQkJCXVzaW5nX3NnID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KIAlzZyA9IHNjc2lfc2dsaXN0KHNjKTsKIAogCXdoaWxlIChyZW1haW5pbmcgPiAwICYmIHNnKSB7CkBAIC01NjksOCArNTQyLDYgQEAKIAkJfQogCQlzZ19ieXRlcyA9IG1pbih0bGVuLCBzZy0+bGVuZ3RoIC0gb2Zmc2V0KTsKIAkJaWYgKHVzaW5nX3NnKSB7Ci0JCQlXQVJOX09OKHNrYl9zaGluZm8oZnBfc2tiKGZwKSktPm5yX2ZyYWdzID4KLQkJCQlGQ19GUkFNRV9TR19MRU4pOwogCQkJZ2V0X3BhZ2Uoc2dfcGFnZShzZykpOwogCQkJc2tiX2ZpbGxfcGFnZV9kZXNjKGZwX3NrYihmcCksCiAJCQkJCSAgIHNrYl9zaGluZm8oZnBfc2tiKGZwKSktPm5yX2ZyYWdzLApAQCAtMTMzNyw3ICsxMzA4LDcgQEAKIAlmY19maWxsX2ZjX2hkcihmcCwgRkNfUkNUTF9FTFNfUkVRLCBycG9ydC0+cG9ydF9pZCwKIAkJICAgICAgIGZjX2hvc3RfcG9ydF9pZChycC0+bG9jYWxfcG9ydC0+aG9zdCksIEZDX1RZUEVfRUxTLAogCQkgICAgICAgRkNfRkNfRklSU1RfU0VRIHwgRkNfRkNfRU5EX1NFUSB8IEZDX0ZDX1NFUV9JTklULCAwKTsKLQlpZiAobHAtPnR0LmVsc2N0X3NlbmQobHAsIHJwb3J0LCBmcCwgRUxTX1JFQywgZmNfZmNwX3JlY19yZXNwLAorCWlmIChscC0+dHQuZWxzY3Rfc2VuZChscCwgcnBvcnQtPnBvcnRfaWQsIGZwLCBFTFNfUkVDLCBmY19mY3BfcmVjX3Jlc3AsCiAJCQkgICAgICBmc3AsIGppZmZpZXNfdG9fbXNlY3MoRkNfU0NTSV9SRUNfVE9WKSkpIHsKIAkJZmNfZmNwX3BrdF9ob2xkKGZzcCk7CQkvKiBob2xkIHdoaWxlIFJFQyBvdXRzdGFuZGluZyAqLwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCmluZGV4IDc0NWZhNTUuLmJkMmY3NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIHN0YXRpYyB2b2lkIGZjX2xwb3J0X2VudGVyX2xvZ28oc3RydWN0IGZjX2xwb3J0ICopOwogCiBzdGF0aWMgY29uc3QgY2hhciAqZmNfbHBvcnRfc3RhdGVfbmFtZXNbXSA9IHsKLQlbTFBPUlRfU1RfTk9ORV0gPSAgICAgIm5vbmUiLAorCVtMUE9SVF9TVF9ESVNBQkxFRF0gPSAiZGlzYWJsZWQiLAogCVtMUE9SVF9TVF9GTE9HSV0gPSAgICAiRkxPR0kiLAogCVtMUE9SVF9TVF9ETlNdID0gICAgICAiZE5TIiwKIAlbTFBPUlRfU1RfUlBOX0lEXSA9ICAgIlJQTl9JRCIsCkBAIC0xMzMsNTcgKzEzMyw0NCBAQAogLyoqCiAgKiBmY19scG9ydF9ycG9ydF9jYWxsYmFjaygpIC0gRXZlbnQgaGFuZGxlciBmb3IgcnBvcnQgZXZlbnRzCiAgKiBAbHBvcnQ6IFRoZSBscG9ydCB3aGljaCBpcyByZWNlaXZpbmcgdGhlIGV2ZW50Ci0gKiBAcnBvcnQ6IFRoZSBycG9ydCB3aGljaCB0aGUgZXZlbnQgaGFzIG9jY3VyZWQgb24KKyAqIEByZGF0YTogcHJpdmF0ZSByZW1vdGUgcG9ydCBkYXRhCiAgKiBAZXZlbnQ6IFRoZSBldmVudCB0aGF0IG9jY3VyZWQKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIHNob3VsZCBub3QgYmUgaGVsZCB3aGVuIGNhbGxpbmcKICAqCQkgdGhpcyBmdW5jdGlvbi4KICAqLwogc3RhdGljIHZvaWQgZmNfbHBvcnRfcnBvcnRfY2FsbGJhY2soc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKLQkJCQkgICAgc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwKKwkJCQkgICAgc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhLAogCQkJCSAgICBlbnVtIGZjX3Jwb3J0X2V2ZW50IGV2ZW50KQogewogCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGEgJWQgZXZlbnQgZm9yIHBvcnQgKCU2eClcbiIsIGV2ZW50LAotCQkgICAgIHJwb3J0LT5wb3J0X2lkKTsKKwkJICAgICByZGF0YS0+aWRzLnBvcnRfaWQpOwogCisJbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKIAlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBSUE9SVF9FVl9DUkVBVEVEOgotCQlpZiAocnBvcnQtPnBvcnRfaWQgPT0gRkNfRklEX0RJUl9TRVJWKSB7Ci0JCQltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwotCQkJaWYgKGxwb3J0LT5zdGF0ZSA9PSBMUE9SVF9TVF9ETlMpIHsKLQkJCQlscG9ydC0+ZG5zX3JwID0gcnBvcnQ7Ci0JCQkJZmNfbHBvcnRfZW50ZXJfcnBuX2lkKGxwb3J0KTsKLQkJCX0gZWxzZSB7Ci0JCQkJRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYW4gQ1JFQVRFRCBldmVudCAiCi0JCQkJCSAgICAgIm9uIHBvcnQgKCU2eCkgZm9yIHRoZSBkaXJlY3RvcnkgIgotCQkJCQkgICAgICJzZXJ2ZXIsIGJ1dCB0aGUgbHBvcnQgaXMgbm90ICIKLQkJCQkJICAgICAiaW4gdGhlIEROUyBzdGF0ZSwgaXQncyBpbiB0aGUgIgotCQkJCQkgICAgICIlZCBzdGF0ZSIsIHJwb3J0LT5wb3J0X2lkLAotCQkJCQkgICAgIGxwb3J0LT5zdGF0ZSk7Ci0JCQkJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihycG9ydCk7Ci0JCQl9Ci0JCQltdXRleF91bmxvY2soJmxwb3J0LT5scF9tdXRleCk7Ci0JCX0gZWxzZQotCQkJRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYW4gZXZlbnQgZm9yIHBvcnQgKCU2eCkgIgotCQkJCSAgICAgIndoaWNoIGlzIG5vdCB0aGUgZGlyZWN0b3J5IHNlcnZlclxuIiwKLQkJCQkgICAgIHJwb3J0LT5wb3J0X2lkKTsKKwljYXNlIFJQT1JUX0VWX1JFQURZOgorCQlpZiAobHBvcnQtPnN0YXRlID09IExQT1JUX1NUX0ROUykgeworCQkJbHBvcnQtPmRuc19ycCA9IHJkYXRhOworCQkJZmNfbHBvcnRfZW50ZXJfcnBuX2lkKGxwb3J0KTsKKwkJfSBlbHNlIHsKKwkJCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGFuIFJFQURZIGV2ZW50ICIKKwkJCQkgICAgICJvbiBwb3J0ICglNngpIGZvciB0aGUgZGlyZWN0b3J5ICIKKwkJCQkgICAgICJzZXJ2ZXIsIGJ1dCB0aGUgbHBvcnQgaXMgbm90ICIKKwkJCQkgICAgICJpbiB0aGUgRE5TIHN0YXRlLCBpdCdzIGluIHRoZSAiCisJCQkJICAgICAiJWQgc3RhdGUiLCByZGF0YS0+aWRzLnBvcnRfaWQsCisJCQkJICAgICBscG9ydC0+c3RhdGUpOworCQkJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihyZGF0YSk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBSUE9SVF9FVl9MT0dPOgogCWNhc2UgUlBPUlRfRVZfRkFJTEVEOgogCWNhc2UgUlBPUlRfRVZfU1RPUDoKLQkJaWYgKHJwb3J0LT5wb3J0X2lkID09IEZDX0ZJRF9ESVJfU0VSVikgewotCQkJbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKLQkJCWxwb3J0LT5kbnNfcnAgPSBOVUxMOwotCQkJbXV0ZXhfdW5sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwotCi0JCX0gZWxzZQotCQkJRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYW4gZXZlbnQgZm9yIHBvcnQgKCU2eCkgIgotCQkJCSAgICAgIndoaWNoIGlzIG5vdCB0aGUgZGlyZWN0b3J5IHNlcnZlclxuIiwKLQkJCQkgICAgIHJwb3J0LT5wb3J0X2lkKTsKKwkJbHBvcnQtPmRuc19ycCA9IE5VTEw7CiAJCWJyZWFrOwogCWNhc2UgUlBPUlRfRVZfTk9ORToKIAkJYnJlYWs7CiAJfQorCW11dGV4X3VubG9jaygmbHBvcnQtPmxwX211dGV4KTsKIH0KIAogLyoqCkBAIC0yMTEsMjAgKzE5OCwxMyBAQAogCQkJICAgICAgIHUzMiByZW1vdGVfZmlkLCB1NjQgcmVtb3RlX3d3cG4sCiAJCQkgICAgICAgdTY0IHJlbW90ZV93d25uKQogewotCXN0cnVjdCBmY19kaXNjX3BvcnQgZHA7Ci0KLQlkcC5scCA9IGxwb3J0OwotCWRwLmlkcy5wb3J0X2lkID0gcmVtb3RlX2ZpZDsKLQlkcC5pZHMucG9ydF9uYW1lID0gcmVtb3RlX3d3cG47Ci0JZHAuaWRzLm5vZGVfbmFtZSA9IHJlbW90ZV93d25uOwotCWRwLmlkcy5yb2xlcyA9IEZDX1JQT1JUX1JPTEVfVU5LTk9XTjsKLQotCWlmIChscG9ydC0+cHRwX3JwKSB7CisJbXV0ZXhfbG9jaygmbHBvcnQtPmRpc2MuZGlzY19tdXRleCk7CisJaWYgKGxwb3J0LT5wdHBfcnApCiAJCWxwb3J0LT50dC5ycG9ydF9sb2dvZmYobHBvcnQtPnB0cF9ycCk7Ci0JCWxwb3J0LT5wdHBfcnAgPSBOVUxMOwotCX0KLQotCWxwb3J0LT5wdHBfcnAgPSBscG9ydC0+dHQucnBvcnRfY3JlYXRlKCZkcCk7CisJbHBvcnQtPnB0cF9ycCA9IGxwb3J0LT50dC5ycG9ydF9jcmVhdGUobHBvcnQsIHJlbW90ZV9maWQpOworCWxwb3J0LT5wdHBfcnAtPmlkcy5wb3J0X25hbWUgPSByZW1vdGVfd3dwbjsKKwlscG9ydC0+cHRwX3JwLT5pZHMubm9kZV9uYW1lID0gcmVtb3RlX3d3bm47CisJbXV0ZXhfdW5sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKIAogCWxwb3J0LT50dC5ycG9ydF9sb2dpbihscG9ydC0+cHRwX3JwKTsKIApAQCAtNDcyLDU2ICs0NTIsNiBAQAogfQogCiAvKioKLSAqIGZjX2xwb3J0X3JlY3ZfYWRpc2NfcmVxKCkgLSBIYW5kbGUgcmVjZWl2ZWQgQWRkcmVzcyBEaXNjb3ZlcnkgUmVxdWVzdAotICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgcmVjaWV2aW5nIHRoZSBBRElTQwotICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBBRElTQyBleGNoYW5nZQotICogQGZwOiBBRElTQyByZXF1ZXN0IGZyYW1lCi0gKgotICogTG9ja2luZyBOb3RlOiBUaGUgbHBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCi0gKiB0aGlzIGZ1bmN0aW9uLgotICovCi1zdGF0aWMgdm9pZCBmY19scG9ydF9yZWN2X2FkaXNjX3JlcShzdHJ1Y3QgZmNfc2VxICpzcCwgc3RydWN0IGZjX2ZyYW1lICppbl9mcCwKLQkJCQkgICAgc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKLXsKLQlzdHJ1Y3QgZmNfZnJhbWUgKmZwOwotCXN0cnVjdCBmY19leGNoICplcCA9IGZjX3NlcV9leGNoKHNwKTsKLQlzdHJ1Y3QgZmNfZWxzX2FkaXNjICpyZXEsICpycDsKLQlzdHJ1Y3QgZmNfc2VxX2Vsc19kYXRhIHJqdF9kYXRhOwotCXNpemVfdCBsZW47Ci0JdTMyIGZfY3RsOwotCi0JRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgQURJU0MgcmVxdWVzdCB3aGlsZSBpbiBzdGF0ZSAlc1xuIiwKLQkJICAgICBmY19scG9ydF9zdGF0ZShscG9ydCkpOwotCi0JcmVxID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoaW5fZnAsIHNpemVvZigqcmVxKSk7Ci0JaWYgKCFyZXEpIHsKLQkJcmp0X2RhdGEuZnAgPSBOVUxMOwotCQlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX0xPR0lDOwotCQlyanRfZGF0YS5leHBsYW4gPSBFTFNfRVhQTF9OT05FOwotCQlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChzcCwgRUxTX0xTX1JKVCwgJnJqdF9kYXRhKTsKLQl9IGVsc2UgewotCQlsZW4gPSBzaXplb2YoKnJwKTsKLQkJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgbGVuKTsKLQkJaWYgKGZwKSB7Ci0JCQlycCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBsZW4pOwotCQkJbWVtc2V0KHJwLCAwLCBsZW4pOwotCQkJcnAtPmFkaXNjX2NtZCA9IEVMU19MU19BQ0M7Ci0JCQlycC0+YWRpc2Nfd3dwbiA9IGh0b25sbChscG9ydC0+d3dwbik7Ci0JCQlycC0+YWRpc2Nfd3dubiA9IGh0b25sbChscG9ydC0+d3dubik7Ci0JCQlodG9uMjQocnAtPmFkaXNjX3BvcnRfaWQsCi0JCQkgICAgICAgZmNfaG9zdF9wb3J0X2lkKGxwb3J0LT5ob3N0KSk7Ci0JCQlzcCA9IGxwb3J0LT50dC5zZXFfc3RhcnRfbmV4dChzcCk7Ci0JCQlmX2N0bCA9IEZDX0ZDX0VYX0NUWCB8IEZDX0ZDX0xBU1RfU0VROwotCQkJZl9jdGwgfD0gRkNfRkNfRU5EX1NFUSB8IEZDX0ZDX1NFUV9JTklUOwotCQkJZmNfZmlsbF9mY19oZHIoZnAsIEZDX1JDVExfRUxTX1JFUCwgZXAtPmRpZCwgZXAtPnNpZCwKLQkJCQkgICAgICAgRkNfVFlQRV9FTFMsIGZfY3RsLCAwKTsKLQkJCWxwb3J0LT50dC5zZXFfc2VuZChscG9ydCwgc3AsIGZwKTsKLQkJfQotCX0KLQlmY19mcmFtZV9mcmVlKGluX2ZwKTsKLX0KLQotLyoqCiAgKiBmY19scG9ydF9yZWN2X2xvZ29fcmVxKCkgLSBIYW5kbGUgcmVjZWl2ZWQgZmFicmljIExPR08gcmVxdWVzdAogICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgcmVjaWV2aW5nIHRoZSBMT0dPCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIExPR08gZXhjaGFuZ2UKQEAgLTU1MCw3ICs0ODAsNyBAQAogCWludCByYyA9IC0xOwogCiAJbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKLQlpZiAobHBvcnQtPnN0YXRlID09IExQT1JUX1NUX05PTkUpIHsKKwlpZiAobHBvcnQtPnN0YXRlID09IExQT1JUX1NUX0RJU0FCTEVEKSB7CiAJCWZjX2xwb3J0X2VudGVyX3Jlc2V0KGxwb3J0KTsKIAkJcmMgPSAwOwogCX0KQEAgLTYzNywxMiArNTY3LDEzIEBACiBpbnQgZmNfbHBvcnRfZGVzdHJveShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogewogCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7Ci0JbHBvcnQtPnN0YXRlID0gTFBPUlRfU1RfTk9ORTsKKwlscG9ydC0+c3RhdGUgPSBMUE9SVF9TVF9ESVNBQkxFRDsKIAlscG9ydC0+bGlua191cCA9IDA7CiAJbHBvcnQtPnR0LmZyYW1lX3NlbmQgPSBmY19mcmFtZV9kcm9wOwogCW11dGV4X3VubG9jaygmbHBvcnQtPmxwX211dGV4KTsKIAogCWxwb3J0LT50dC5mY3BfYWJvcnRfaW8obHBvcnQpOworCWxwb3J0LT50dC5kaXNjX3N0b3BfZmluYWwobHBvcnQpOwogCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydCwgMCwgMCk7CiAJcmV0dXJuIDA7CiB9CkBAIC03MjIsNyArNjUzLDggQEAKIAogCWZjX2xwb3J0X3N0YXRlX2VudGVyKGxwb3J0LCBMUE9SVF9TVF9SRUFEWSk7CiAKLQlscG9ydC0+dHQuZGlzY19zdGFydChmY19scG9ydF9kaXNjX2NhbGxiYWNrLCBscG9ydCk7CisJaWYgKCFscG9ydC0+cHRwX3JwKQorCQlscG9ydC0+dHQuZGlzY19zdGFydChmY19scG9ydF9kaXNjX2NhbGxiYWNrLCBscG9ydCk7CiB9CiAKIC8qKgpAQCAtODA4LDggKzc0MCw2IEBACiAJZmNfbHBvcnRfcHRwX3NldHVwKGxwb3J0LCByZW1vdGVfZmlkLCByZW1vdGVfd3dwbiwKIAkJCSAgIGdldF91bmFsaWduZWRfYmU2NCgmZmxwLT5mbF93d25uKSk7CiAKLQlscG9ydC0+dHQuZGlzY19zdGFydChmY19scG9ydF9kaXNjX2NhbGxiYWNrLCBscG9ydCk7Ci0KIG91dDoKIAlzcCA9IGZyX3NlcShyeF9mcCk7CiAJZmNfZnJhbWVfZnJlZShyeF9mcCk7CkBAIC04MzIsMTAgKzc2Miw2IEBACiB7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKIAl2b2lkICgqcmVjdikgKHN0cnVjdCBmY19zZXEgKiwgc3RydWN0IGZjX2ZyYW1lICosIHN0cnVjdCBmY19scG9ydCAqKTsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwotCXUzMiBzX2lkOwotCXUzMiBkX2lkOwotCXN0cnVjdCBmY19zZXFfZWxzX2RhdGEgcmp0X2RhdGE7CiAKIAltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwogCkBAIC04NDQsMTEgKzc3MCwxNCBAQAogCSAqIFJTQ04gaGVyZS4gIFRoZXNlIGRvbid0IHJlcXVpcmUgYSBzZXNzaW9uLgogCSAqIEV2ZW4gaWYgd2UgaGFkIGEgc2Vzc2lvbiwgaXQgbWlnaHQgbm90IGJlIHJlYWR5LgogCSAqLwotCWlmIChmaC0+ZmhfdHlwZSA9PSBGQ19UWVBFX0VMUyAmJiBmaC0+Zmhfcl9jdGwgPT0gRkNfUkNUTF9FTFNfUkVRKSB7CisJaWYgKCFscG9ydC0+bGlua191cCkKKwkJZmNfZnJhbWVfZnJlZShmcCk7CisJZWxzZSBpZiAoZmgtPmZoX3R5cGUgPT0gRkNfVFlQRV9FTFMgJiYKKwkJIGZoLT5maF9yX2N0bCA9PSBGQ19SQ1RMX0VMU19SRVEpIHsKIAkJLyoKIAkJICogQ2hlY2sgb3Bjb2RlLgogCQkgKi8KLQkJcmVjdiA9IE5VTEw7CisJCXJlY3YgPSBscG9ydC0+dHQucnBvcnRfcmVjdl9yZXE7CiAJCXN3aXRjaCAoZmNfZnJhbWVfcGF5bG9hZF9vcChmcCkpIHsKIAkJY2FzZSBFTFNfRkxPR0k6CiAJCQlyZWN2ID0gZmNfbHBvcnRfcmVjdl9mbG9naV9yZXE7CkBAIC04NzAsMzQgKzc5OSw5IEBACiAJCWNhc2UgRUxTX1JOSUQ6CiAJCQlyZWN2ID0gZmNfbHBvcnRfcmVjdl9ybmlkX3JlcTsKIAkJCWJyZWFrOwotCQljYXNlIEVMU19BRElTQzoKLQkJCXJlY3YgPSBmY19scG9ydF9yZWN2X2FkaXNjX3JlcTsKLQkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKHJlY3YpCi0JCQlyZWN2KHNwLCBmcCwgbHBvcnQpOwotCQllbHNlIHsKLQkJCS8qCi0JCQkgKiBGaW5kIHNlc3Npb24uCi0JCQkgKiBJZiB0aGlzIGlzIGEgbmV3IGluY29taW5nIFBMT0dJLCB3ZSB3b24ndCBmaW5kIGl0LgotCQkJICovCi0JCQlzX2lkID0gbnRvaDI0KGZoLT5maF9zX2lkKTsKLQkJCWRfaWQgPSBudG9oMjQoZmgtPmZoX2RfaWQpOwotCi0JCQlycG9ydCA9IGxwb3J0LT50dC5ycG9ydF9sb29rdXAobHBvcnQsIHNfaWQpOwotCQkJaWYgKHJwb3J0KQotCQkJCWxwb3J0LT50dC5ycG9ydF9yZWN2X3JlcShzcCwgZnAsIHJwb3J0KTsKLQkJCWVsc2UgewotCQkJCXJqdF9kYXRhLmZwID0gTlVMTDsKLQkJCQlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX1VOQUI7Ci0JCQkJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfTk9ORTsKLQkJCQlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChzcCwKLQkJCQkJCQkgICBFTFNfTFNfUkpULAotCQkJCQkJCSAgICZyanRfZGF0YSk7Ci0JCQkJZmNfZnJhbWVfZnJlZShmcCk7Ci0JCQl9Ci0JCX0KKwkJcmVjdihzcCwgZnAsIGxwb3J0KTsKIAl9IGVsc2UgewogCQlGQ19MUE9SVF9EQkcobHBvcnQsICJkcm9wcGluZyBpbnZhbGlkIGZyYW1lIChlb2YgJXgpXG4iLAogCQkJICAgICBmcl9lb2YoZnApKTsKQEAgLTkzMCw3ICs4MzQsMjggQEAKIEVYUE9SVF9TWU1CT0woZmNfbHBvcnRfcmVzZXQpOwogCiAvKioKLSAqIGZjX3Jwb3J0X2VudGVyX3Jlc2V0KCkgLSBSZXNldCB0aGUgbG9jYWwgcG9ydAorICogZmNfbHBvcnRfcmVzZXRfbG9ja2VkKCkgLSBSZXNldCB0aGUgbG9jYWwgcG9ydAorICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgdG8gYmUgcmVzZXQKKyAqCisgKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKKyAqIHRoaXMgcm91dGluZS4KKyAqLworc3RhdGljIHZvaWQgZmNfbHBvcnRfcmVzZXRfbG9ja2VkKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCit7CisJaWYgKGxwb3J0LT5kbnNfcnApCisJCWxwb3J0LT50dC5ycG9ydF9sb2dvZmYobHBvcnQtPmRuc19ycCk7CisKKwlscG9ydC0+cHRwX3JwID0gTlVMTDsKKworCWxwb3J0LT50dC5kaXNjX3N0b3AobHBvcnQpOworCisJbHBvcnQtPnR0LmV4Y2hfbWdyX3Jlc2V0KGxwb3J0LCAwLCAwKTsKKwlmY19ob3N0X2ZhYnJpY19uYW1lKGxwb3J0LT5ob3N0KSA9IDA7CisJZmNfaG9zdF9wb3J0X2lkKGxwb3J0LT5ob3N0KSA9IDA7Cit9CisKKy8qKgorICogZmNfbHBvcnRfZW50ZXJfcmVzZXQoKSAtIFJlc2V0IHRoZSBsb2NhbCBwb3J0CiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCB0byBiZSByZXNldAogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIGxwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwpAQCAtOTQyLDI2ICs4NjcsMjggQEAKIAkJICAgICBmY19scG9ydF9zdGF0ZShscG9ydCkpOwogCiAJZmNfbHBvcnRfc3RhdGVfZW50ZXIobHBvcnQsIExQT1JUX1NUX1JFU0VUKTsKLQotCWlmIChscG9ydC0+ZG5zX3JwKQotCQlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKGxwb3J0LT5kbnNfcnApOwotCi0JaWYgKGxwb3J0LT5wdHBfcnApIHsKLQkJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihscG9ydC0+cHRwX3JwKTsKLQkJbHBvcnQtPnB0cF9ycCA9IE5VTEw7Ci0JfQotCi0JbHBvcnQtPnR0LmRpc2Nfc3RvcChscG9ydCk7Ci0KLQlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQsIDAsIDApOwotCWZjX2hvc3RfZmFicmljX25hbWUobHBvcnQtPmhvc3QpID0gMDsKLQlmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpID0gMDsKLQorCWZjX2xwb3J0X3Jlc2V0X2xvY2tlZChscG9ydCk7CiAJaWYgKGxwb3J0LT5saW5rX3VwKQogCQlmY19scG9ydF9lbnRlcl9mbG9naShscG9ydCk7CiB9CiAKIC8qKgorICogZmNfbHBvcnRfZW50ZXJfZGlzYWJsZWQoKSAtIGRpc2FibGUgdGhlIGxvY2FsIHBvcnQKKyAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBsb2NhbCBwb3J0IHRvIGJlIHJlc2V0CisgKgorICogTG9ja2luZyBOb3RlOiBUaGUgbHBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCisgKiB0aGlzIHJvdXRpbmUuCisgKi8KK3N0YXRpYyB2b2lkIGZjX2xwb3J0X2VudGVyX2Rpc2FibGVkKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCit7CisJRkNfTFBPUlRfREJHKGxwb3J0LCAiRW50ZXJlZCBkaXNhYmxlZCBzdGF0ZSBmcm9tICVzIHN0YXRlXG4iLAorCQkgICAgIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSk7CisKKwlmY19scG9ydF9zdGF0ZV9lbnRlcihscG9ydCwgTFBPUlRfU1RfRElTQUJMRUQpOworCWZjX2xwb3J0X3Jlc2V0X2xvY2tlZChscG9ydCk7Cit9CisKKy8qKgogICogZmNfbHBvcnRfZXJyb3IoKSAtIEhhbmRsZXIgZm9yIGFueSBlcnJvcnMKICAqIEBscG9ydDogVGhlIGZjX2xwb3J0IG9iamVjdAogICogQGZwOiBUaGUgZnJhbWUgcG9pbnRlcgpAQCAtOTkyLDcgKzkxOSw3IEBACiAJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmxwb3J0LT5yZXRyeV93b3JrLCBkZWxheSk7CiAJCX0gZWxzZSB7CiAJCQlzd2l0Y2ggKGxwb3J0LT5zdGF0ZSkgewotCQkJY2FzZSBMUE9SVF9TVF9OT05FOgorCQkJY2FzZSBMUE9SVF9TVF9ESVNBQkxFRDoKIAkJCWNhc2UgTFBPUlRfU1RfUkVBRFk6CiAJCQljYXNlIExQT1JUX1NUX1JFU0VUOgogCQkJY2FzZSBMUE9SVF9TVF9SUE5fSUQ6CkBAIC0xMDI2LDEzICs5NTMsMTMgQEAKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKIAlzdHJ1Y3QgZmNfY3RfaGRyICpjdDsKIAorCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGEgUkZUX0lEICVzXG4iLCBmY19lbHNfcmVzcF90eXBlKGZwKSk7CisKIAlpZiAoZnAgPT0gRVJSX1BUUigtRkNfRVhfQ0xPU0VEKSkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKIAotCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGEgUkZUX0lEIHJlc3BvbnNlXG4iKTsKLQogCWlmIChscG9ydC0+c3RhdGUgIT0gTFBPUlRfU1RfUkZUX0lEKSB7CiAJCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGEgUkZUX0lEIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgIgogCQkJICAgICAiJXNcbiIsIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSk7CkBAIC0xMDgwLDEzICsxMDA3LDEzIEBACiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CiAJc3RydWN0IGZjX2N0X2hkciAqY3Q7CiAKKwlGQ19MUE9SVF9EQkcobHBvcnQsICJSZWNlaXZlZCBhIFJQTl9JRCAlc1xuIiwgZmNfZWxzX3Jlc3BfdHlwZShmcCkpOworCiAJaWYgKGZwID09IEVSUl9QVFIoLUZDX0VYX0NMT1NFRCkpCiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7CiAKLQlGQ19MUE9SVF9EQkcobHBvcnQsICJSZWNlaXZlZCBhIFJQTl9JRCByZXNwb25zZVxuIik7Ci0KIAlpZiAobHBvcnQtPnN0YXRlICE9IExQT1JUX1NUX1JQTl9JRCkgewogCQlGQ19MUE9SVF9EQkcobHBvcnQsICJSZWNlaXZlZCBhIFJQTl9JRCByZXNwb25zZSwgYnV0IGluIHN0YXRlICIKIAkJCSAgICAgIiVzXG4iLCBmY19scG9ydF9zdGF0ZShscG9ydCkpOwpAQCAtMTEzMiwxMyArMTA1OSwxMyBAQAogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBscF9hcmc7CiAJdTggb3A7CiAKKwlGQ19MUE9SVF9EQkcobHBvcnQsICJSZWNlaXZlZCBhIFNDUiAlc1xuIiwgZmNfZWxzX3Jlc3BfdHlwZShmcCkpOworCiAJaWYgKGZwID09IEVSUl9QVFIoLUZDX0VYX0NMT1NFRCkpCiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7CiAKLQlGQ19MUE9SVF9EQkcobHBvcnQsICJSZWNlaXZlZCBhIFNDUiByZXNwb25zZVxuIik7Ci0KIAlpZiAobHBvcnQtPnN0YXRlICE9IExQT1JUX1NUX1NDUikgewogCQlGQ19MUE9SVF9EQkcobHBvcnQsICJSZWNlaXZlZCBhIFNDUiByZXNwb25zZSwgYnV0IGluIHN0YXRlICIKIAkJCSAgICAgIiVzXG4iLCBmY19scG9ydF9zdGF0ZShscG9ydCkpOwpAQCAtMTE4Niw3ICsxMTEzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICghbHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIE5VTEwsIGZwLCBFTFNfU0NSLAorCWlmICghbHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIEZDX0ZJRF9GQ1RSTCwgZnAsIEVMU19TQ1IsCiAJCQkJICBmY19scG9ydF9zY3JfcmVzcCwgbHBvcnQsIGxwb3J0LT5lX2RfdG92KSkKIAkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKIH0KQEAgLTEyMjcsNyArMTE1NCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBOVUxMLCBmcCwgRkNfTlNfUkZUX0lELAorCWlmICghbHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIEZDX0ZJRF9ESVJfU0VSViwgZnAsIEZDX05TX1JGVF9JRCwKIAkJCQkgIGZjX2xwb3J0X3JmdF9pZF9yZXNwLAogCQkJCSAgbHBvcnQsIGxwb3J0LT5lX2RfdG92KSkKIAkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKQEAgLTEyNTYsNyArMTE4Myw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBOVUxMLCBmcCwgRkNfTlNfUlBOX0lELAorCWlmICghbHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIEZDX0ZJRF9ESVJfU0VSViwgZnAsIEZDX05TX1JQTl9JRCwKIAkJCQkgIGZjX2xwb3J0X3Jwbl9pZF9yZXNwLAogCQkJCSAgbHBvcnQsIGxwb3J0LT5lX2RfdG92KSkKIAkJZmNfbHBvcnRfZXJyb3IobHBvcnQsIGZwKTsKQEAgLTEyNzUsMjggKzEyMDIsMjEgQEAKICAqLwogc3RhdGljIHZvaWQgZmNfbHBvcnRfZW50ZXJfZG5zKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGE7Ci0Jc3RydWN0IGZjX2Rpc2NfcG9ydCBkcDsKLQotCWRwLmlkcy5wb3J0X2lkID0gRkNfRklEX0RJUl9TRVJWOwotCWRwLmlkcy5wb3J0X25hbWUgPSAtMTsKLQlkcC5pZHMubm9kZV9uYW1lID0gLTE7Ci0JZHAuaWRzLnJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOwotCWRwLmxwID0gbHBvcnQ7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhOwogCiAJRkNfTFBPUlRfREJHKGxwb3J0LCAiRW50ZXJlZCBETlMgc3RhdGUgZnJvbSAlcyBzdGF0ZVxuIiwKIAkJICAgICBmY19scG9ydF9zdGF0ZShscG9ydCkpOwogCiAJZmNfbHBvcnRfc3RhdGVfZW50ZXIobHBvcnQsIExQT1JUX1NUX0ROUyk7CiAKLQlycG9ydCA9IGxwb3J0LT50dC5ycG9ydF9jcmVhdGUoJmRwKTsKLQlpZiAoIXJwb3J0KQorCW11dGV4X2xvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOworCXJkYXRhID0gbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZShscG9ydCwgRkNfRklEX0RJUl9TRVJWKTsKKwltdXRleF91bmxvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOworCWlmICghcmRhdGEpCiAJCWdvdG8gZXJyOwogCi0JcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAlyZGF0YS0+b3BzID0gJmZjX2xwb3J0X3Jwb3J0X29wczsKLQlscG9ydC0+dHQucnBvcnRfbG9naW4ocnBvcnQpOworCWxwb3J0LT50dC5ycG9ydF9sb2dpbihyZGF0YSk7CiAJcmV0dXJuOwogCiBlcnI6CkBAIC0xMzE2LDcgKzEyMzYsNyBAQAogCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7CiAKIAlzd2l0Y2ggKGxwb3J0LT5zdGF0ZSkgewotCWNhc2UgTFBPUlRfU1RfTk9ORToKKwljYXNlIExQT1JUX1NUX0RJU0FCTEVEOgogCWNhc2UgTFBPUlRfU1RfUkVBRFk6CiAJY2FzZSBMUE9SVF9TVF9SRVNFVDoKIAkJV0FSTl9PTigxKTsKQEAgLTEzNjAsMTMgKzEyODAsMTMgQEAKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gbHBfYXJnOwogCXU4IG9wOwogCisJRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYSBMT0dPICVzXG4iLCBmY19lbHNfcmVzcF90eXBlKGZwKSk7CisKIAlpZiAoZnAgPT0gRVJSX1BUUigtRkNfRVhfQ0xPU0VEKSkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKIAotCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGEgTE9HTyByZXNwb25zZVxuIik7Ci0KIAlpZiAobHBvcnQtPnN0YXRlICE9IExQT1JUX1NUX0xPR08pIHsKIAkJRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYSBMT0dPIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgIgogCQkJICAgICAiJXNcbiIsIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSk7CkBAIC0xMzgyLDcgKzEzMDIsNyBAQAogCiAJb3AgPSBmY19mcmFtZV9wYXlsb2FkX29wKGZwKTsKIAlpZiAob3AgPT0gRUxTX0xTX0FDQykKLQkJZmNfbHBvcnRfZW50ZXJfcmVzZXQobHBvcnQpOworCQlmY19scG9ydF9lbnRlcl9kaXNhYmxlZChscG9ydCk7CiAJZWxzZQogCQlmY19scG9ydF9lcnJvcihscG9ydCwgZnApOwogCkBAIC0xNDE1LDggKzEzMzUsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgTlVMTCwgZnAsIEVMU19MT0dPLCBmY19scG9ydF9sb2dvX3Jlc3AsCi0JCQkJICBscG9ydCwgbHBvcnQtPmVfZF90b3YpKQorCWlmICghbHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIEZDX0ZJRF9GTE9HSSwgZnAsIEVMU19MT0dPLAorCQkJCSAgZmNfbHBvcnRfbG9nb19yZXNwLCBscG9ydCwgbHBvcnQtPmVfZF90b3YpKQogCQlmY19scG9ydF9lcnJvcihscG9ydCwgZnApOwogfQogCkBAIC0xNDQyLDEzICsxMzYyLDEzIEBACiAJdW5zaWduZWQgaW50IGVfZF90b3Y7CiAJdTE2IG1mczsKIAorCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGEgRkxPR0kgJXNcbiIsIGZjX2Vsc19yZXNwX3R5cGUoZnApKTsKKwogCWlmIChmcCA9PSBFUlJfUFRSKC1GQ19FWF9DTE9TRUQpKQogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwogCi0JRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYSBGTE9HSSByZXNwb25zZVxuIik7Ci0KIAlpZiAobHBvcnQtPnN0YXRlICE9IExQT1JUX1NUX0ZMT0dJKSB7CiAJCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGEgRkxPR0kgcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAiCiAJCQkgICAgICIlc1xuIiwgZmNfbHBvcnRfc3RhdGUobHBvcnQpKTsKQEAgLTE1MDEsMTQgKzE0MjEsNiBAQAogCQkJCWZjX2xwb3J0X2VudGVyX2RucyhscG9ydCk7CiAJCQl9CiAJCX0KLQotCQlpZiAoZmxwKSB7Ci0JCQljc3BfZmxhZ3MgPSBudG9ocyhmbHAtPmZsX2NzcC5zcF9mZWF0dXJlcyk7Ci0JCQlpZiAoKGNzcF9mbGFncyAmIEZDX1NQX0ZUX0ZQT1JUKSA9PSAwKSB7Ci0JCQkJbHBvcnQtPnR0LmRpc2Nfc3RhcnQoZmNfbHBvcnRfZGlzY19jYWxsYmFjaywKLQkJCQkJCSAgICAgbHBvcnQpOwotCQkJfQotCQl9CiAJfSBlbHNlIHsKIAkJRkNfTFBPUlRfREJHKGxwb3J0LCAiQmFkIEZMT0dJIHJlc3BvbnNlXG4iKTsKIAl9CkBAIC0xNTM5LDcgKzE0NTEsNyBAQAogCWlmICghZnApCiAJCXJldHVybiBmY19scG9ydF9lcnJvcihscG9ydCwgZnApOwogCi0JaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgTlVMTCwgZnAsIEVMU19GTE9HSSwKKwlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBGQ19GSURfRkxPR0ksIGZwLCBFTFNfRkxPR0ksCiAJCQkJICBmY19scG9ydF9mbG9naV9yZXNwLCBscG9ydCwgbHBvcnQtPmVfZF90b3YpKQogCQlmY19scG9ydF9lcnJvcihscG9ydCwgZnApOwogfQpAQCAtMTU1MCw3ICsxNDYyLDcgQEAKIAlJTklUX0RFTEFZRURfV09SSygmbHBvcnQtPnJldHJ5X3dvcmssIGZjX2xwb3J0X3RpbWVvdXQpOwogCW11dGV4X2luaXQoJmxwb3J0LT5scF9tdXRleCk7CiAKLQlmY19scG9ydF9zdGF0ZV9lbnRlcihscG9ydCwgTFBPUlRfU1RfTk9ORSk7CisJZmNfbHBvcnRfc3RhdGVfZW50ZXIobHBvcnQsIExQT1JUX1NUX0RJU0FCTEVEKTsKIAogCWZjX2xwb3J0X2FkZF9mYzRfdHlwZShscG9ydCwgRkNfVFlQRV9GQ1ApOwogCWZjX2xwb3J0X2FkZF9mYzRfdHlwZShscG9ydCwgRkNfVFlQRV9DVCk7CkBAIC0xNTg4LDYgKzE1MDAsNyBAQAogCWlmIChscG9ydC0+bGlua19zdXBwb3J0ZWRfc3BlZWRzICYgRkNfUE9SVFNQRUVEXzEwR0JJVCkKIAkJZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKGxwb3J0LT5ob3N0KSB8PSBGQ19QT1JUU1BFRURfMTBHQklUOwogCisJSU5JVF9MSVNUX0hFQUQoJmxwb3J0LT5lbWFfbGlzdCk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX2xwb3J0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfcnBvcnQuYwppbmRleCA3MTYyMzg1Zi4uMDNlYTY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX3Jwb3J0LmMKQEAgLTU3LDk0ICs1NywxMTQgQEAKIAogc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJwb3J0X2V2ZW50X3F1ZXVlOwogCi1zdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9wbG9naShzdHJ1Y3QgZmNfcnBvcnQgKik7Ci1zdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9wcmxpKHN0cnVjdCBmY19ycG9ydCAqKTsKLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3J0dihzdHJ1Y3QgZmNfcnBvcnQgKik7Ci1zdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9yZWFkeShzdHJ1Y3QgZmNfcnBvcnQgKik7Ci1zdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9sb2dvKHN0cnVjdCBmY19ycG9ydCAqKTsKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3Bsb2dpKHN0cnVjdCBmY19ycG9ydF9wcml2ICopOworc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfcHJsaShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqKTsKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3J0dihzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqKTsKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3JlYWR5KHN0cnVjdCBmY19ycG9ydF9wcml2ICopOworc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfbG9nbyhzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqKTsKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX2FkaXNjKHN0cnVjdCBmY19ycG9ydF9wcml2ICopOwogCi1zdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3Bsb2dpX3JlcShzdHJ1Y3QgZmNfcnBvcnQgKiwKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfcGxvZ2lfcmVxKHN0cnVjdCBmY19scG9ydCAqLAogCQkJCSAgICBzdHJ1Y3QgZmNfc2VxICosIHN0cnVjdCBmY19mcmFtZSAqKTsKLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfcHJsaV9yZXEoc3RydWN0IGZjX3Jwb3J0ICosCitzdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3BybGlfcmVxKHN0cnVjdCBmY19ycG9ydF9wcml2ICosCiAJCQkJICAgc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7Ci1zdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3BybG9fcmVxKHN0cnVjdCBmY19ycG9ydCAqLAorc3RhdGljIHZvaWQgZmNfcnBvcnRfcmVjdl9wcmxvX3JlcShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqLAogCQkJCSAgIHN0cnVjdCBmY19zZXEgKiwgc3RydWN0IGZjX2ZyYW1lICopOwotc3RhdGljIHZvaWQgZmNfcnBvcnRfcmVjdl9sb2dvX3JlcShzdHJ1Y3QgZmNfcnBvcnQgKiwKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfbG9nb19yZXEoc3RydWN0IGZjX2xwb3J0ICosCiAJCQkJICAgc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7CiBzdGF0aWMgdm9pZCBmY19ycG9ydF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X2Vycm9yKHN0cnVjdCBmY19ycG9ydCAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7Ci1zdGF0aWMgdm9pZCBmY19ycG9ydF9lcnJvcl9yZXRyeShzdHJ1Y3QgZmNfcnBvcnQgKiwgc3RydWN0IGZjX2ZyYW1lICopOworc3RhdGljIHZvaWQgZmNfcnBvcnRfZXJyb3Ioc3RydWN0IGZjX3Jwb3J0X3ByaXYgKiwgc3RydWN0IGZjX2ZyYW1lICopOworc3RhdGljIHZvaWQgZmNfcnBvcnRfZXJyb3JfcmV0cnkoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKiwgc3RydWN0IGZjX2ZyYW1lICopOwogc3RhdGljIHZvaWQgZmNfcnBvcnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpmY19ycG9ydF9zdGF0ZV9uYW1lc1tdID0gewotCVtSUE9SVF9TVF9OT05FXSA9ICJOb25lIiwKIAlbUlBPUlRfU1RfSU5JVF0gPSAiSW5pdCIsCiAJW1JQT1JUX1NUX1BMT0dJXSA9ICJQTE9HSSIsCiAJW1JQT1JUX1NUX1BSTEldID0gIlBSTEkiLAogCVtSUE9SVF9TVF9SVFZdID0gIlJUViIsCiAJW1JQT1JUX1NUX1JFQURZXSA9ICJSZWFkeSIsCiAJW1JQT1JUX1NUX0xPR09dID0gIkxPR08iLAorCVtSUE9SVF9TVF9BRElTQ10gPSAiQURJU0MiLAorCVtSUE9SVF9TVF9ERUxFVEVdID0gIkRlbGV0ZSIsCiB9OwogCi1zdGF0aWMgdm9pZCBmY19ycG9ydF9yb2d1ZV9kZXN0cm95KHN0cnVjdCBkZXZpY2UgKmRldikKKy8qKgorICogZmNfcnBvcnRfbG9va3VwKCkgLSBsb29rdXAgYSByZW1vdGUgcG9ydCBieSBwb3J0X2lkCisgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCisgKiBAcG9ydF9pZDogcmVtb3RlIHBvcnQgcG9ydF9pZCB0byBtYXRjaAorICovCitzdGF0aWMgc3RydWN0IGZjX3Jwb3J0X3ByaXYgKmZjX3Jwb3J0X2xvb2t1cChjb25zdCBzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAorCQkJCQkgICAgIHUzMiBwb3J0X2lkKQogewotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBkZXZfdG9fcnBvcnQoZGV2KTsKLQlGQ19SUE9SVF9EQkcocnBvcnQsICJEZXN0cm95aW5nIHJvZ3VlIHJwb3J0XG4iKTsKLQlrZnJlZShycG9ydCk7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGF0YSwgJmxwb3J0LT5kaXNjLnJwb3J0cywgcGVlcnMpCisJCWlmIChyZGF0YS0+aWRzLnBvcnRfaWQgPT0gcG9ydF9pZCAmJgorCQkgICAgcmRhdGEtPnJwX3N0YXRlICE9IFJQT1JUX1NUX0RFTEVURSkKKwkJCXJldHVybiByZGF0YTsKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RydWN0IGZjX3Jwb3J0ICpmY19ycG9ydF9yb2d1ZV9jcmVhdGUoc3RydWN0IGZjX2Rpc2NfcG9ydCAqZHApCisvKioKKyAqIGZjX3Jwb3J0X2NyZWF0ZSgpIC0gQ3JlYXRlIGEgbmV3IHJlbW90ZSBwb3J0CisgKiBAbHBvcnQ6ICAgVGhlIGxvY2FsIHBvcnQgdGhhdCB0aGUgbmV3IHJlbW90ZSBwb3J0IGlzIGZvcgorICogQHBvcnRfaWQ6IFRoZSBwb3J0IElEIGZvciB0aGUgbmV3IHJlbW90ZSBwb3J0CisgKgorICogTG9ja2luZyBub3RlOiAgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgZGlzY19tdXRleCBoZWxkLgorICovCitzdGF0aWMgc3RydWN0IGZjX3Jwb3J0X3ByaXYgKmZjX3Jwb3J0X2NyZWF0ZShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAorCQkJCQkgICAgIHUzMiBwb3J0X2lkKQogewotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhOwotCXJwb3J0ID0ga3phbGxvYyhzaXplb2YoKnJwb3J0KSArIHNpemVvZigqcmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGE7CiAKLQlpZiAoIXJwb3J0KQorCXJkYXRhID0gbHBvcnQtPnR0LnJwb3J0X2xvb2t1cChscG9ydCwgcG9ydF9pZCk7CisJaWYgKHJkYXRhKQorCQlyZXR1cm4gcmRhdGE7CisKKwlyZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpyZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcmRhdGEpCiAJCXJldHVybiBOVUxMOwogCi0JcmRhdGEgPSBSUE9SVF9UT19QUklWKHJwb3J0KTsKKwlyZGF0YS0+aWRzLm5vZGVfbmFtZSA9IC0xOworCXJkYXRhLT5pZHMucG9ydF9uYW1lID0gLTE7CisJcmRhdGEtPmlkcy5wb3J0X2lkID0gcG9ydF9pZDsKKwlyZGF0YS0+aWRzLnJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOwogCi0JcnBvcnQtPmRkX2RhdGEgPSByZGF0YTsKLQlycG9ydC0+cG9ydF9pZCA9IGRwLT5pZHMucG9ydF9pZDsKLQlycG9ydC0+cG9ydF9uYW1lID0gZHAtPmlkcy5wb3J0X25hbWU7Ci0JcnBvcnQtPm5vZGVfbmFtZSA9IGRwLT5pZHMubm9kZV9uYW1lOwotCXJwb3J0LT5yb2xlcyA9IGRwLT5pZHMucm9sZXM7Ci0JcnBvcnQtPm1heGZyYW1lX3NpemUgPSBGQ19NSU5fTUFYX1BBWUxPQUQ7Ci0JLyoKLQkgKiBOb3RlOiBhbGwgdGhpcyBsaWJmYyByb2d1ZSBycG9ydCBjb2RlIHdpbGwgYmUgcmVtb3ZlZCBmb3IKLQkgKiB1cHN0cmVhbSBzbyBpdCBmaW5lIHRoYXQgdGhpcyBpcyByZWFsbHkgdWdseSBhbmQgaGFja3kgcmlnaHQgbm93LgotCSAqLwotCWRldmljZV9pbml0aWFsaXplKCZycG9ydC0+ZGV2KTsKLQlycG9ydC0+ZGV2LnJlbGVhc2UgPSBmY19ycG9ydF9yb2d1ZV9kZXN0cm95OwotCisJa3JlZl9pbml0KCZyZGF0YS0+a3JlZik7CiAJbXV0ZXhfaW5pdCgmcmRhdGEtPnJwX211dGV4KTsKLQlyZGF0YS0+bG9jYWxfcG9ydCA9IGRwLT5scDsKLQlyZGF0YS0+dHJhbnNfc3RhdGUgPSBGQ19QT1JUU1RBVEVfUk9HVUU7CisJcmRhdGEtPmxvY2FsX3BvcnQgPSBscG9ydDsKIAlyZGF0YS0+cnBfc3RhdGUgPSBSUE9SVF9TVF9JTklUOwogCXJkYXRhLT5ldmVudCA9IFJQT1JUX0VWX05PTkU7CiAJcmRhdGEtPmZsYWdzID0gRkNfUlBfRkxBR1NfUkVDX1NVUFBPUlRFRDsKLQlyZGF0YS0+b3BzID0gTlVMTDsKLQlyZGF0YS0+ZV9kX3RvdiA9IGRwLT5scC0+ZV9kX3RvdjsKLQlyZGF0YS0+cl9hX3RvdiA9IGRwLT5scC0+cl9hX3RvdjsKKwlyZGF0YS0+ZV9kX3RvdiA9IGxwb3J0LT5lX2RfdG92OworCXJkYXRhLT5yX2FfdG92ID0gbHBvcnQtPnJfYV90b3Y7CisJcmRhdGEtPm1heGZyYW1lX3NpemUgPSBGQ19NSU5fTUFYX1BBWUxPQUQ7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnJkYXRhLT5yZXRyeV93b3JrLCBmY19ycG9ydF90aW1lb3V0KTsKIAlJTklUX1dPUksoJnJkYXRhLT5ldmVudF93b3JrLCBmY19ycG9ydF93b3JrKTsKLQkvKgotCSAqIEZvciBnb29kIG1lYXN1cmUsIGJ1dCBub3QgbmVjZXNzYXJ5IGFzIHdlIHNob3VsZCBvbmx5Ci0JICogYWRkIFJFQUwgcnBvcnQgdG8gdGhlIGxwb3J0IGxpc3QuCi0JICovCi0JSU5JVF9MSVNUX0hFQUQoJnJkYXRhLT5wZWVycyk7CisJaWYgKHBvcnRfaWQgIT0gRkNfRklEX0RJUl9TRVJWKQorCQlsaXN0X2FkZCgmcmRhdGEtPnBlZXJzLCAmbHBvcnQtPmRpc2MucnBvcnRzKTsKKwlyZXR1cm4gcmRhdGE7Cit9CiAKLQlyZXR1cm4gcnBvcnQ7CisvKioKKyAqIGZjX3Jwb3J0X2Rlc3Ryb3koKSAtIGZyZWUgYSByZW1vdGUgcG9ydCBhZnRlciBsYXN0IHJlZmVyZW5jZSBpcyByZWxlYXNlZC4KKyAqIEBrcmVmOiBwb2ludGVyIHRvIGtyZWYgaW5zaWRlIHN0cnVjdCBmY19ycG9ydF9wcml2CisgKi8KK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhOworCisJcmRhdGEgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGZjX3Jwb3J0X3ByaXYsIGtyZWYpOworCWtmcmVlKHJkYXRhKTsKIH0KIAogLyoqCiAgKiBmY19ycG9ydF9zdGF0ZSgpIC0gcmV0dXJuIGEgc3RyaW5nIGZvciB0aGUgc3RhdGUgdGhlIHJwb3J0IGlzIGluCi0gKiBAcnBvcnQ6IFRoZSBycG9ydCB3aG9zZSBzdGF0ZSB3ZSB3YW50IHRvIGdldCBhIHN0cmluZyBmb3IKKyAqIEByZGF0YTogcmVtb3RlIHBvcnQgcHJpdmF0ZSBkYXRhCiAgKi8KLXN0YXRpYyBjb25zdCBjaGFyICpmY19ycG9ydF9zdGF0ZShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQorc3RhdGljIGNvbnN0IGNoYXIgKmZjX3Jwb3J0X3N0YXRlKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSkKIHsKIAljb25zdCBjaGFyICpjcDsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAogCWNwID0gZmNfcnBvcnRfc3RhdGVfbmFtZXNbcmRhdGEtPnJwX3N0YXRlXTsKIAlpZiAoIWNwKQpAQCAtMTkxLDE1ICsyMTEsMTQgQEAKIAogLyoqCiAgKiBmY19ycG9ydF9zdGF0ZV9lbnRlcigpIC0gQ2hhbmdlIHRoZSBycG9ydCdzIHN0YXRlCi0gKiBAcnBvcnQ6IFRoZSBycG9ydCB3aG9zZSBzdGF0ZSBzaG91bGQgY2hhbmdlCisgKiBAcmRhdGE6IFRoZSBycG9ydCB3aG9zZSBzdGF0ZSBzaG91bGQgY2hhbmdlCiAgKiBAbmV3OiBUaGUgbmV3IHN0YXRlIG9mIHRoZSBycG9ydAogICoKICAqIExvY2tpbmcgTm90ZTogQ2FsbGVkIHdpdGggdGhlIHJwb3J0IGxvY2sgaGVsZAogICovCi1zdGF0aWMgdm9pZCBmY19ycG9ydF9zdGF0ZV9lbnRlcihzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LAorc3RhdGljIHZvaWQgZmNfcnBvcnRfc3RhdGVfZW50ZXIoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhLAogCQkJCSBlbnVtIGZjX3Jwb3J0X3N0YXRlIG5ldykKIHsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAlpZiAocmRhdGEtPnJwX3N0YXRlICE9IG5ldykKIAkJcmRhdGEtPnJldHJpZXMgPSAwOwogCXJkYXRhLT5ycF9zdGF0ZSA9IG5ldzsKQEAgLTIwOCwxNDcgKzIyNywxODcgQEAKIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXUzMiBwb3J0X2lkOwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiwgZXZlbnRfd29yayk7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmY19ycG9ydF9wcml2LCBldmVudF93b3JrKTsKKwlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcnA7CiAJZW51bSBmY19ycG9ydF9ldmVudCBldmVudDsKLQllbnVtIGZjX3Jwb3J0X3RyYW5zX3N0YXRlIHRyYW5zX3N0YXRlOwogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKIAlzdHJ1Y3QgZmNfcnBvcnRfb3BlcmF0aW9ucyAqcnBvcnRfb3BzOwotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBQUklWX1RPX1JQT1JUKHJkYXRhKTsKKwlzdHJ1Y3QgZmNfcnBvcnRfaWRlbnRpZmllcnMgaWRzOworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7CiAKIAltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCWV2ZW50ID0gcmRhdGEtPmV2ZW50OwogCXJwb3J0X29wcyA9IHJkYXRhLT5vcHM7CisJcnBvcnQgPSByZGF0YS0+cnBvcnQ7CiAKLQlpZiAoZXZlbnQgPT0gUlBPUlRfRVZfQ1JFQVRFRCkgewotCQlzdHJ1Y3QgZmNfcnBvcnQgKm5ld19ycG9ydDsKLQkJc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKm5ld19yZGF0YTsKLQkJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzIGlkczsKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJ3b3JrIGV2ZW50ICV1XG4iLCBldmVudCk7CiAKLQkJaWRzLnBvcnRfaWQgPSBycG9ydC0+cG9ydF9pZDsKLQkJaWRzLnJvbGVzID0gcnBvcnQtPnJvbGVzOwotCQlpZHMucG9ydF9uYW1lID0gcnBvcnQtPnBvcnRfbmFtZTsKLQkJaWRzLm5vZGVfbmFtZSA9IHJwb3J0LT5ub2RlX25hbWU7Ci0KKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUE9SVF9FVl9SRUFEWToKKwkJaWRzID0gcmRhdGEtPmlkczsKKwkJcmRhdGEtPmV2ZW50ID0gUlBPUlRfRVZfTk9ORTsKKwkJa3JlZl9nZXQoJnJkYXRhLT5rcmVmKTsKIAkJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCi0JCW5ld19ycG9ydCA9IGZjX3JlbW90ZV9wb3J0X2FkZChscG9ydC0+aG9zdCwgMCwgJmlkcyk7Ci0JCWlmIChuZXdfcnBvcnQpIHsKLQkJCS8qCi0JCQkgKiBTd2l0Y2ggZnJvbSB0aGUgcm9ndWUgcnBvcnQgdG8gdGhlIHJwb3J0Ci0JCQkgKiByZXR1cm5lZCBieSB0aGUgRkMgY2xhc3MuCi0JCQkgKi8KLQkJCW5ld19ycG9ydC0+bWF4ZnJhbWVfc2l6ZSA9IHJwb3J0LT5tYXhmcmFtZV9zaXplOwotCi0JCQluZXdfcmRhdGEgPSBuZXdfcnBvcnQtPmRkX2RhdGE7Ci0JCQluZXdfcmRhdGEtPmVfZF90b3YgPSByZGF0YS0+ZV9kX3RvdjsKLQkJCW5ld19yZGF0YS0+cl9hX3RvdiA9IHJkYXRhLT5yX2FfdG92OwotCQkJbmV3X3JkYXRhLT5vcHMgPSByZGF0YS0+b3BzOwotCQkJbmV3X3JkYXRhLT5sb2NhbF9wb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7Ci0JCQluZXdfcmRhdGEtPmZsYWdzID0gRkNfUlBfRkxBR1NfUkVDX1NVUFBPUlRFRDsKLQkJCW5ld19yZGF0YS0+dHJhbnNfc3RhdGUgPSBGQ19QT1JUU1RBVEVfUkVBTDsKLQkJCW11dGV4X2luaXQoJm5ld19yZGF0YS0+cnBfbXV0ZXgpOwotCQkJSU5JVF9ERUxBWUVEX1dPUksoJm5ld19yZGF0YS0+cmV0cnlfd29yaywKLQkJCQkJICBmY19ycG9ydF90aW1lb3V0KTsKLQkJCUlOSVRfTElTVF9IRUFEKCZuZXdfcmRhdGEtPnBlZXJzKTsKLQkJCUlOSVRfV09SSygmbmV3X3JkYXRhLT5ldmVudF93b3JrLCBmY19ycG9ydF93b3JrKTsKLQotCQkJZmNfcnBvcnRfc3RhdGVfZW50ZXIobmV3X3Jwb3J0LCBSUE9SVF9TVF9SRUFEWSk7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJsaWJmYzogRmFpbGVkIHRvIGFsbG9jYXRlICIKLQkJCSAgICAgICAiIG1lbW9yeSBmb3IgcnBvcnQgKCU2eClcbiIsIGlkcy5wb3J0X2lkKTsKLQkJCWV2ZW50ID0gUlBPUlRfRVZfRkFJTEVEOworCQlpZiAoIXJwb3J0KQorCQkJcnBvcnQgPSBmY19yZW1vdGVfcG9ydF9hZGQobHBvcnQtPmhvc3QsIDAsICZpZHMpOworCQlpZiAoIXJwb3J0KSB7CisJCQlGQ19SUE9SVF9EQkcocmRhdGEsICJGYWlsZWQgdG8gYWRkIHRoZSBycG9ydFxuIik7CisJCQlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKHJkYXRhKTsKKwkJCWtyZWZfcHV0KCZyZGF0YS0+a3JlZiwgbHBvcnQtPnR0LnJwb3J0X2Rlc3Ryb3kpOworCQkJcmV0dXJuOwogCQl9Ci0JCWlmIChycG9ydC0+cG9ydF9pZCAhPSBGQ19GSURfRElSX1NFUlYpCi0JCQlpZiAocnBvcnRfb3BzLT5ldmVudF9jYWxsYmFjaykKLQkJCQlycG9ydF9vcHMtPmV2ZW50X2NhbGxiYWNrKGxwb3J0LCBycG9ydCwKLQkJCQkJCQkgIFJQT1JUX0VWX0ZBSUxFRCk7Ci0JCXB1dF9kZXZpY2UoJnJwb3J0LT5kZXYpOwotCQlycG9ydCA9IG5ld19ycG9ydDsKLQkJcmRhdGEgPSBuZXdfcnBvcnQtPmRkX2RhdGE7Ci0JCWlmIChycG9ydF9vcHMtPmV2ZW50X2NhbGxiYWNrKQotCQkJcnBvcnRfb3BzLT5ldmVudF9jYWxsYmFjayhscG9ydCwgcnBvcnQsIGV2ZW50KTsKLQl9IGVsc2UgaWYgKChldmVudCA9PSBSUE9SVF9FVl9GQUlMRUQpIHx8Ci0JCSAgIChldmVudCA9PSBSUE9SVF9FVl9MT0dPKSB8fAotCQkgICAoZXZlbnQgPT0gUlBPUlRfRVZfU1RPUCkpIHsKLQkJdHJhbnNfc3RhdGUgPSByZGF0YS0+dHJhbnNfc3RhdGU7CisJCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7CisJCWlmIChyZGF0YS0+cnBvcnQpCisJCQlGQ19SUE9SVF9EQkcocmRhdGEsICJycG9ydCBhbHJlYWR5IGFsbG9jYXRlZFxuIik7CisJCXJkYXRhLT5ycG9ydCA9IHJwb3J0OworCQlycG9ydC0+bWF4ZnJhbWVfc2l6ZSA9IHJkYXRhLT5tYXhmcmFtZV9zaXplOworCQlycG9ydC0+c3VwcG9ydGVkX2NsYXNzZXMgPSByZGF0YS0+c3VwcG9ydGVkX2NsYXNzZXM7CisKKwkJcnAgPSBycG9ydC0+ZGRfZGF0YTsKKwkJcnAtPmxvY2FsX3BvcnQgPSBscG9ydDsKKwkJcnAtPnJwX3N0YXRlID0gcmRhdGEtPnJwX3N0YXRlOworCQlycC0+ZmxhZ3MgPSByZGF0YS0+ZmxhZ3M7CisJCXJwLT5lX2RfdG92ID0gcmRhdGEtPmVfZF90b3Y7CisJCXJwLT5yX2FfdG92ID0gcmRhdGEtPnJfYV90b3Y7CiAJCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKLQkJaWYgKHJwb3J0X29wcy0+ZXZlbnRfY2FsbGJhY2spCi0JCQlycG9ydF9vcHMtPmV2ZW50X2NhbGxiYWNrKGxwb3J0LCBycG9ydCwgZXZlbnQpOwotCQlpZiAodHJhbnNfc3RhdGUgPT0gRkNfUE9SVFNUQVRFX1JPR1VFKQotCQkJcHV0X2RldmljZSgmcnBvcnQtPmRldik7Ci0JCWVsc2UgewotCQkJcG9ydF9pZCA9IHJwb3J0LT5wb3J0X2lkOworCisJCWlmIChycG9ydF9vcHMgJiYgcnBvcnRfb3BzLT5ldmVudF9jYWxsYmFjaykgeworCQkJRkNfUlBPUlRfREJHKHJkYXRhLCAiY2FsbGJhY2sgZXYgJWRcbiIsIGV2ZW50KTsKKwkJCXJwb3J0X29wcy0+ZXZlbnRfY2FsbGJhY2sobHBvcnQsIHJkYXRhLCBldmVudCk7CisJCX0KKwkJa3JlZl9wdXQoJnJkYXRhLT5rcmVmLCBscG9ydC0+dHQucnBvcnRfZGVzdHJveSk7CisJCWJyZWFrOworCisJY2FzZSBSUE9SVF9FVl9GQUlMRUQ6CisJY2FzZSBSUE9SVF9FVl9MT0dPOgorCWNhc2UgUlBPUlRfRVZfU1RPUDoKKwkJcG9ydF9pZCA9IHJkYXRhLT5pZHMucG9ydF9pZDsKKwkJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOworCisJCWlmIChwb3J0X2lkICE9IEZDX0ZJRF9ESVJfU0VSVikgeworCQkJbXV0ZXhfbG9jaygmbHBvcnQtPmRpc2MuZGlzY19tdXRleCk7CisJCQlsaXN0X2RlbCgmcmRhdGEtPnBlZXJzKTsKKwkJCW11dGV4X3VubG9jaygmbHBvcnQtPmRpc2MuZGlzY19tdXRleCk7CisJCX0KKworCQlpZiAocnBvcnRfb3BzICYmIHJwb3J0X29wcy0+ZXZlbnRfY2FsbGJhY2spIHsKKwkJCUZDX1JQT1JUX0RCRyhyZGF0YSwgImNhbGxiYWNrIGV2ICVkXG4iLCBldmVudCk7CisJCQlycG9ydF9vcHMtPmV2ZW50X2NhbGxiYWNrKGxwb3J0LCByZGF0YSwgZXZlbnQpOworCQl9CisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcmRhdGEtPnJldHJ5X3dvcmspOworCisJCS8qCisJCSAqIFJlc2V0IGFueSBvdXRzdGFuZGluZyBleGNoYW5nZXMgYmVmb3JlIGZyZWVpbmcgcnBvcnQuCisJCSAqLworCQlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQsIDAsIHBvcnRfaWQpOworCQlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQsIHBvcnRfaWQsIDApOworCisJCWlmIChycG9ydCkgeworCQkJcnAgPSBycG9ydC0+ZGRfZGF0YTsKKwkJCXJwLT5ycF9zdGF0ZSA9IFJQT1JUX1NUX0RFTEVURTsKKwkJCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7CisJCQlyZGF0YS0+cnBvcnQgPSBOVUxMOworCQkJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCQkJZmNfcmVtb3RlX3BvcnRfZGVsZXRlKHJwb3J0KTsKLQkJCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydCwgMCwgcG9ydF9pZCk7Ci0JCQlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQsIHBvcnRfaWQsIDApOwogCQl9Ci0JfSBlbHNlCisJCWtyZWZfcHV0KCZyZGF0YS0+a3JlZiwgbHBvcnQtPnR0LnJwb3J0X2Rlc3Ryb3kpOworCQlicmVhazsKKworCWRlZmF1bHQ6CiAJCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKKwkJYnJlYWs7CisJfQogfQogCiAvKioKICAqIGZjX3Jwb3J0X2xvZ2luKCkgLSBTdGFydCB0aGUgcmVtb3RlIHBvcnQgbG9naW4gc3RhdGUgbWFjaGluZQotICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0CisgKiBAcmRhdGE6IHByaXZhdGUgcmVtb3RlIHBvcnQKICAqCiAgKiBMb2NraW5nIE5vdGU6IENhbGxlZCB3aXRob3V0IHRoZSBycG9ydCBsb2NrIGhlbGQuIFRoaXMKICAqIGZ1bmN0aW9uIHdpbGwgaG9sZCB0aGUgcnBvcnQgbG9jaywgY2FsbCBhbiBfZW50ZXJfKgogICogZnVuY3Rpb24gYW5kIHRoZW4gdW5sb2NrIHRoZSBycG9ydC4KKyAqCisgKiBUaGlzIGluZGljYXRlcyB0aGUgaW50ZW50IHRvIGJlIGxvZ2dlZCBpbnRvIHRoZSByZW1vdGUgcG9ydC4KKyAqIElmIGl0IGFwcGVhcnMgd2UgYXJlIGFscmVhZHkgbG9nZ2VkIGluLCBBRElTQyBpcyB1c2VkIHRvIHZlcmlmeQorICogdGhlIHNldHVwLgogICovCi1pbnQgZmNfcnBvcnRfbG9naW4oc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKK2ludCBmY19ycG9ydF9sb2dpbihzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7Ci0KIAltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCi0JRkNfUlBPUlRfREJHKHJwb3J0LCAiTG9naW4gdG8gcG9ydFxuIik7Ci0KLQlmY19ycG9ydF9lbnRlcl9wbG9naShycG9ydCk7Ci0KKwlzd2l0Y2ggKHJkYXRhLT5ycF9zdGF0ZSkgeworCWNhc2UgUlBPUlRfU1RfUkVBRFk6CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIkFESVNDIHBvcnRcbiIpOworCQlmY19ycG9ydF9lbnRlcl9hZGlzYyhyZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIkxvZ2luIHRvIHBvcnRcbiIpOworCQlmY19ycG9ydF9lbnRlcl9wbG9naShyZGF0YSk7CisJCWJyZWFrOworCX0KIAltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoqCisgKiBmY19ycG9ydF9lbnRlcl9kZWxldGUoKSAtIHNjaGVkdWxlIGEgcmVtb3RlIHBvcnQgdG8gYmUgZGVsZXRlZC4KKyAqIEByZGF0YTogcHJpdmF0ZSByZW1vdGUgcG9ydAorICogQGV2ZW50OiBldmVudCB0byByZXBvcnQgYXMgdGhlIHJlYXNvbiBmb3IgZGVsZXRpb24KKyAqCisgKiBMb2NraW5nIE5vdGU6IENhbGxlZCB3aXRoIHRoZSBycG9ydCBsb2NrIGhlbGQuCisgKgorICogQWxsb3cgc3RhdGUgY2hhbmdlIGludG8gREVMRVRFIG9ubHkgb25jZS4KKyAqCisgKiBDYWxsIHF1ZXVlX3dvcmsgb25seSBpZiB0aGVyZSdzIG5vIGV2ZW50IGFscmVhZHkgcGVuZGluZy4KKyAqIFNldCB0aGUgbmV3IGV2ZW50IHNvIHRoYXQgdGhlIG9sZCBwZW5kaW5nIGV2ZW50IHdpbGwgbm90IG9jY3VyLgorICogU2luY2Ugd2UgaGF2ZSB0aGUgbXV0ZXgsIGV2ZW4gaWYgZmNfcnBvcnRfd29yaygpIGlzIGFscmVhZHkgc3RhcnRlZCwKKyAqIGl0J2xsIHNlZSB0aGUgbmV3IGV2ZW50LgorICovCitzdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9kZWxldGUoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhLAorCQkJCSAgZW51bSBmY19ycG9ydF9ldmVudCBldmVudCkKK3sKKwlpZiAocmRhdGEtPnJwX3N0YXRlID09IFJQT1JUX1NUX0RFTEVURSkKKwkJcmV0dXJuOworCisJRkNfUlBPUlRfREJHKHJkYXRhLCAiRGVsZXRlIHBvcnRcbiIpOworCisJZmNfcnBvcnRfc3RhdGVfZW50ZXIocmRhdGEsIFJQT1JUX1NUX0RFTEVURSk7CisKKwlpZiAocmRhdGEtPmV2ZW50ID09IFJQT1JUX0VWX05PTkUpCisJCXF1ZXVlX3dvcmsocnBvcnRfZXZlbnRfcXVldWUsICZyZGF0YS0+ZXZlbnRfd29yayk7CisJcmRhdGEtPmV2ZW50ID0gZXZlbnQ7Cit9CisKKy8qKgogICogZmNfcnBvcnRfbG9nb2ZmKCkgLSBMb2dvZmYgYW5kIHJlbW92ZSBhbiBycG9ydAotICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRvIGJlIHJlbW92ZWQKKyAqIEByZGF0YTogcHJpdmF0ZSByZW1vdGUgcG9ydAogICoKICAqIExvY2tpbmcgTm90ZTogQ2FsbGVkIHdpdGhvdXQgdGhlIHJwb3J0IGxvY2sgaGVsZC4gVGhpcwogICogZnVuY3Rpb24gd2lsbCBob2xkIHRoZSBycG9ydCBsb2NrLCBjYWxsIGFuIF9lbnRlcl8qCiAgKiBmdW5jdGlvbiBhbmQgdGhlbiB1bmxvY2sgdGhlIHJwb3J0LgogICovCi1pbnQgZmNfcnBvcnRfbG9nb2ZmKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCitpbnQgZmNfcnBvcnRfbG9nb2ZmKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSkKIHsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKLQogCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAKLQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZW1vdmUgcG9ydFxuIik7CisJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVtb3ZlIHBvcnRcbiIpOwogCi0JaWYgKHJkYXRhLT5ycF9zdGF0ZSA9PSBSUE9SVF9TVF9OT05FKSB7Ci0JCUZDX1JQT1JUX0RCRyhycG9ydCwgIlBvcnQgaW4gTk9ORSBzdGF0ZSwgbm90IHJlbW92aW5nXG4iKTsKKwlpZiAocmRhdGEtPnJwX3N0YXRlID09IFJQT1JUX1NUX0RFTEVURSkgeworCQlGQ19SUE9SVF9EQkcocmRhdGEsICJQb3J0IGluIERlbGV0ZSBzdGF0ZSwgbm90IHJlbW92aW5nXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlmY19ycG9ydF9lbnRlcl9sb2dvKHJwb3J0KTsKKwlmY19ycG9ydF9lbnRlcl9sb2dvKHJkYXRhKTsKIAogCS8qCi0JICogQ2hhbmdlIHRoZSBzdGF0ZSB0byBOT05FIHNvIHRoYXQgd2UgZGlzY2FyZAorCSAqIENoYW5nZSB0aGUgc3RhdGUgdG8gRGVsZXRlIHNvIHRoYXQgd2UgZGlzY2FyZAogCSAqIHRoZSByZXNwb25zZS4KIAkgKi8KLQlmY19ycG9ydF9zdGF0ZV9lbnRlcihycG9ydCwgUlBPUlRfU1RfTk9ORSk7Ci0KLQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7Ci0KLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJkYXRhLT5yZXRyeV93b3JrKTsKLQotCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7Ci0KLQlyZGF0YS0+ZXZlbnQgPSBSUE9SVF9FVl9TVE9QOwotCXF1ZXVlX3dvcmsocnBvcnRfZXZlbnRfcXVldWUsICZyZGF0YS0+ZXZlbnRfd29yayk7Ci0KKwlmY19ycG9ydF9lbnRlcl9kZWxldGUocmRhdGEsIFJQT1JUX0VWX1NUT1ApOwogCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKIAogb3V0OgpAQCAtMzU3LDI2ICs0MTYsMjUgQEAKIAogLyoqCiAgKiBmY19ycG9ydF9lbnRlcl9yZWFkeSgpIC0gVGhlIHJwb3J0IGlzIHJlYWR5Ci0gKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQgdGhhdCBpcyByZWFkeQorICogQHJkYXRhOiBwcml2YXRlIHJlbW90ZSBwb3J0CiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCiAgKiB0aGlzIHJvdXRpbmUuCiAgKi8KLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3JlYWR5KHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCitzdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9yZWFkeShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7CisJZmNfcnBvcnRfc3RhdGVfZW50ZXIocmRhdGEsIFJQT1JUX1NUX1JFQURZKTsKIAotCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJwb3J0LCBSUE9SVF9TVF9SRUFEWSk7CisJRkNfUlBPUlRfREJHKHJkYXRhLCAiUG9ydCBpcyBSZWFkeVxuIik7CiAKLQlGQ19SUE9SVF9EQkcocnBvcnQsICJQb3J0IGlzIFJlYWR5XG4iKTsKLQotCXJkYXRhLT5ldmVudCA9IFJQT1JUX0VWX0NSRUFURUQ7Ci0JcXVldWVfd29yayhycG9ydF9ldmVudF9xdWV1ZSwgJnJkYXRhLT5ldmVudF93b3JrKTsKKwlpZiAocmRhdGEtPmV2ZW50ID09IFJQT1JUX0VWX05PTkUpCisJCXF1ZXVlX3dvcmsocnBvcnRfZXZlbnRfcXVldWUsICZyZGF0YS0+ZXZlbnRfd29yayk7CisJcmRhdGEtPmV2ZW50ID0gUlBPUlRfRVZfUkVBRFk7CiB9CiAKIC8qKgogICogZmNfcnBvcnRfdGltZW91dCgpIC0gSGFuZGxlciBmb3IgdGhlIHJldHJ5X3dvcmsgdGltZXIuCi0gKiBAd29yazogVGhlIHdvcmsgc3RydWN0IG9mIHRoZSBmY19ycG9ydF9saWJmY19wcml2CisgKiBAd29yazogVGhlIHdvcmsgc3RydWN0IG9mIHRoZSBmY19ycG9ydF9wcml2CiAgKgogICogTG9ja2luZyBOb3RlOiBDYWxsZWQgd2l0aG91dCB0aGUgcnBvcnQgbG9jayBoZWxkLiBUaGlzCiAgKiBmdW5jdGlvbiB3aWxsIGhvbGQgdGhlIHJwb3J0IGxvY2ssIGNhbGwgYW4gX2VudGVyXyoKQEAgLTM4NCw2MyArNDQyLDYzIEBACiAgKi8KIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiwgcmV0cnlfd29yay53b3JrKTsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gUFJJVl9UT19SUE9SVChyZGF0YSk7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmY19ycG9ydF9wcml2LCByZXRyeV93b3JrLndvcmspOwogCiAJbXV0ZXhfbG9jaygmcmRhdGEtPnJwX211dGV4KTsKIAogCXN3aXRjaCAocmRhdGEtPnJwX3N0YXRlKSB7CiAJY2FzZSBSUE9SVF9TVF9QTE9HSToKLQkJZmNfcnBvcnRfZW50ZXJfcGxvZ2kocnBvcnQpOworCQlmY19ycG9ydF9lbnRlcl9wbG9naShyZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgUlBPUlRfU1RfUFJMSToKLQkJZmNfcnBvcnRfZW50ZXJfcHJsaShycG9ydCk7CisJCWZjX3Jwb3J0X2VudGVyX3BybGkocmRhdGEpOwogCQlicmVhazsKIAljYXNlIFJQT1JUX1NUX1JUVjoKLQkJZmNfcnBvcnRfZW50ZXJfcnR2KHJwb3J0KTsKKwkJZmNfcnBvcnRfZW50ZXJfcnR2KHJkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBSUE9SVF9TVF9MT0dPOgotCQlmY19ycG9ydF9lbnRlcl9sb2dvKHJwb3J0KTsKKwkJZmNfcnBvcnRfZW50ZXJfbG9nbyhyZGF0YSk7CisJCWJyZWFrOworCWNhc2UgUlBPUlRfU1RfQURJU0M6CisJCWZjX3Jwb3J0X2VudGVyX2FkaXNjKHJkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBSUE9SVF9TVF9SRUFEWToKIAljYXNlIFJQT1JUX1NUX0lOSVQ6Ci0JY2FzZSBSUE9SVF9TVF9OT05FOgorCWNhc2UgUlBPUlRfU1RfREVMRVRFOgogCQlicmVhazsKIAl9CiAKIAltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7Ci0JcHV0X2RldmljZSgmcnBvcnQtPmRldik7CiB9CiAKIC8qKgogICogZmNfcnBvcnRfZXJyb3IoKSAtIEVycm9yIGhhbmRsZXIsIGNhbGxlZCBvbmNlIHJldHJpZXMgaGF2ZSBiZWVuIGV4aGF1c3RlZAotICogQHJwb3J0OiBUaGUgZmNfcnBvcnQgb2JqZWN0CisgKiBAcmRhdGE6IHByaXZhdGUgcmVtb3RlIHBvcnQKICAqIEBmcDogVGhlIGZyYW1lIHBvaW50ZXIKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlCiAgKiBjYWxsaW5nIHRoaXMgcm91dGluZQogICovCi1zdGF0aWMgdm9pZCBmY19ycG9ydF9lcnJvcihzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQorc3RhdGljIHZvaWQgZmNfcnBvcnRfZXJyb3Ioc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwotCi0JRkNfUlBPUlRfREJHKHJwb3J0LCAiRXJyb3IgJWxkIGluIHN0YXRlICVzLCByZXRyaWVzICVkXG4iLAotCQkgICAgIFBUUl9FUlIoZnApLCBmY19ycG9ydF9zdGF0ZShycG9ydCksIHJkYXRhLT5yZXRyaWVzKTsKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJFcnJvciAlbGQgaW4gc3RhdGUgJXMsIHJldHJpZXMgJWRcbiIsCisJCSAgICAgSVNfRVJSKGZwKSA/IC1QVFJfRVJSKGZwKSA6IDAsCisJCSAgICAgZmNfcnBvcnRfc3RhdGUocmRhdGEpLCByZGF0YS0+cmV0cmllcyk7CiAKIAlzd2l0Y2ggKHJkYXRhLT5ycF9zdGF0ZSkgewogCWNhc2UgUlBPUlRfU1RfUExPR0k6Ci0JY2FzZSBSUE9SVF9TVF9QUkxJOgogCWNhc2UgUlBPUlRfU1RfTE9HTzoKLQkJcmRhdGEtPmV2ZW50ID0gUlBPUlRfRVZfRkFJTEVEOwotCQlmY19ycG9ydF9zdGF0ZV9lbnRlcihycG9ydCwgUlBPUlRfU1RfTk9ORSk7Ci0JCXF1ZXVlX3dvcmsocnBvcnRfZXZlbnRfcXVldWUsCi0JCQkgICAmcmRhdGEtPmV2ZW50X3dvcmspOworCQlmY19ycG9ydF9lbnRlcl9kZWxldGUocmRhdGEsIFJQT1JUX0VWX0ZBSUxFRCk7CiAJCWJyZWFrOwogCWNhc2UgUlBPUlRfU1RfUlRWOgotCQlmY19ycG9ydF9lbnRlcl9yZWFkeShycG9ydCk7CisJCWZjX3Jwb3J0X2VudGVyX3JlYWR5KHJkYXRhKTsKIAkJYnJlYWs7Ci0JY2FzZSBSUE9SVF9TVF9OT05FOgorCWNhc2UgUlBPUlRfU1RfUFJMSToKKwljYXNlIFJQT1JUX1NUX0FESVNDOgorCQlmY19ycG9ydF9lbnRlcl9sb2dvKHJkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBSUE9SVF9TVF9ERUxFVEU6CiAJY2FzZSBSUE9SVF9TVF9SRUFEWToKIAljYXNlIFJQT1JUX1NUX0lOSVQ6CiAJCWJyZWFrOwpAQCAtNDQ5LDcgKzUwNyw3IEBACiAKIC8qKgogICogZmNfcnBvcnRfZXJyb3JfcmV0cnkoKSAtIEVycm9yIGhhbmRsZXIgd2hlbiByZXRyaWVzIGFyZSBkZXNpcmVkCi0gKiBAcnBvcnQ6IFRoZSBmY19ycG9ydCBvYmplY3QKKyAqIEByZGF0YTogcHJpdmF0ZSByZW1vdGUgcG9ydCBkYXRhCiAgKiBAZnA6IFRoZSBmcmFtZSBwb2ludGVyCiAgKgogICogSWYgdGhlIGVycm9yIHdhcyBhbiBleGNoYW5nZSB0aW1lb3V0IHJldHJ5IGltbWVkaWF0ZWx5LApAQCAtNDU4LDQ1ICs1MTYsNDMgQEAKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUKICAqIGNhbGxpbmcgdGhpcyByb3V0aW5lCiAgKi8KLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X2Vycm9yX3JldHJ5KHN0cnVjdCBmY19ycG9ydCAqcnBvcnQsIHN0cnVjdCBmY19mcmFtZSAqZnApCitzdGF0aWMgdm9pZCBmY19ycG9ydF9lcnJvcl9yZXRyeShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEsCisJCQkJIHN0cnVjdCBmY19mcmFtZSAqZnApCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBkZWxheSA9IEZDX0RFRl9FX0RfVE9WOwogCiAJLyogbWFrZSBzdXJlIHRoaXMgaXNuJ3QgYW4gRkNfRVhfQ0xPU0VEIGVycm9yLCBuZXZlciByZXRyeSB0aG9zZSAqLwogCWlmIChQVFJfRVJSKGZwKSA9PSAtRkNfRVhfQ0xPU0VEKQotCQlyZXR1cm4gZmNfcnBvcnRfZXJyb3IocnBvcnQsIGZwKTsKKwkJcmV0dXJuIGZjX3Jwb3J0X2Vycm9yKHJkYXRhLCBmcCk7CiAKIAlpZiAocmRhdGEtPnJldHJpZXMgPCByZGF0YS0+bG9jYWxfcG9ydC0+bWF4X3Jwb3J0X3JldHJ5X2NvdW50KSB7Ci0JCUZDX1JQT1JUX0RCRyhycG9ydCwgIkVycm9yICVsZCBpbiBzdGF0ZSAlcywgcmV0cnlpbmdcbiIsCi0JCQkgICAgIFBUUl9FUlIoZnApLCBmY19ycG9ydF9zdGF0ZShycG9ydCkpOworCQlGQ19SUE9SVF9EQkcocmRhdGEsICJFcnJvciAlbGQgaW4gc3RhdGUgJXMsIHJldHJ5aW5nXG4iLAorCQkJICAgICBQVFJfRVJSKGZwKSwgZmNfcnBvcnRfc3RhdGUocmRhdGEpKTsKIAkJcmRhdGEtPnJldHJpZXMrKzsKIAkJLyogbm8gYWRkaXRpb25hbCBkZWxheSBvbiBleGNoYW5nZSB0aW1lb3V0cyAqLwogCQlpZiAoUFRSX0VSUihmcCkgPT0gLUZDX0VYX1RJTUVPVVQpCiAJCQlkZWxheSA9IDA7Ci0JCWdldF9kZXZpY2UoJnJwb3J0LT5kZXYpOwogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJkYXRhLT5yZXRyeV93b3JrLCBkZWxheSk7CiAJCXJldHVybjsKIAl9CiAKLQlyZXR1cm4gZmNfcnBvcnRfZXJyb3IocnBvcnQsIGZwKTsKKwlyZXR1cm4gZmNfcnBvcnRfZXJyb3IocmRhdGEsIGZwKTsKIH0KIAogLyoqCiAgKiBmY19ycG9ydF9wbG9naV9yZWN2X3Jlc3AoKSAtIEhhbmRsZSBpbmNvbWluZyBFTFMgUExPR0kgcmVzcG9uc2UKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUExPR0kgZXhjaGFuZ2UKICAqIEBmcDogcmVzcG9uc2UgZnJhbWUKLSAqIEBycF9hcmc6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQKKyAqIEByZGF0YV9hcmc6IHByaXZhdGUgcmVtb3RlIHBvcnQgZGF0YQogICoKICAqIExvY2tpbmcgTm90ZTogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRob3V0IHRoZSBycG9ydCBsb2NrCiAgKiBoZWxkLCBidXQgaXQgd2lsbCBsb2NrLCBjYWxsIGFuIF9lbnRlcl8qIGZ1bmN0aW9uIG9yIGZjX3Jwb3J0X2Vycm9yCiAgKiBhbmQgdGhlbiB1bmxvY2sgdGhlIHJwb3J0LgogICovCiBzdGF0aWMgdm9pZCBmY19ycG9ydF9wbG9naV9yZXNwKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAotCQkJCXZvaWQgKnJwX2FyZykKKwkJCQl2b2lkICpyZGF0YV9hcmcpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHJwX2FyZzsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEgPSByZGF0YV9hcmc7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OwogCXN0cnVjdCBmY19lbHNfZmxvZ2kgKnBscCA9IE5VTEw7CiAJdW5zaWduZWQgaW50IHRvdjsKQEAgLTUwNiwyNiArNTYyLDI2IEBACiAKIAltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCi0JRkNfUlBPUlRfREJHKHJwb3J0LCAiUmVjZWl2ZWQgYSBQTE9HSSByZXNwb25zZVxuIik7CisJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgYSBQTE9HSSAlc1xuIiwgZmNfZWxzX3Jlc3BfdHlwZShmcCkpOwogCiAJaWYgKHJkYXRhLT5ycF9zdGF0ZSAhPSBSUE9SVF9TVF9QTE9HSSkgewotCQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZWNlaXZlZCBhIFBMT0dJIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgIgotCQkJICAgICAiJXNcbiIsIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlJlY2VpdmVkIGEgUExPR0kgcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAiCisJCQkgICAgICIlc1xuIiwgZmNfcnBvcnRfc3RhdGUocmRhdGEpKTsKIAkJaWYgKElTX0VSUihmcCkpCiAJCQlnb3RvIGVycjsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKElTX0VSUihmcCkpIHsKLQkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocnBvcnQsIGZwKTsKKwkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocmRhdGEsIGZwKTsKIAkJZ290byBlcnI7CiAJfQogCiAJb3AgPSBmY19mcmFtZV9wYXlsb2FkX29wKGZwKTsKIAlpZiAob3AgPT0gRUxTX0xTX0FDQyAmJgogCSAgICAocGxwID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIHNpemVvZigqcGxwKSkpICE9IE5VTEwpIHsKLQkJcnBvcnQtPnBvcnRfbmFtZSA9IGdldF91bmFsaWduZWRfYmU2NCgmcGxwLT5mbF93d3BuKTsKLQkJcnBvcnQtPm5vZGVfbmFtZSA9IGdldF91bmFsaWduZWRfYmU2NCgmcGxwLT5mbF93d25uKTsKKwkJcmRhdGEtPmlkcy5wb3J0X25hbWUgPSBnZXRfdW5hbGlnbmVkX2JlNjQoJnBscC0+Zmxfd3dwbik7CisJCXJkYXRhLT5pZHMubm9kZV9uYW1lID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZwbHAtPmZsX3d3bm4pOwogCiAJCXRvdiA9IG50b2hsKHBscC0+ZmxfY3NwLnNwX2VfZF90b3YpOwogCQlpZiAobnRvaHMocGxwLT5mbF9jc3Auc3BfZmVhdHVyZXMpICYgRkNfU1BfRlRfRURUUikKQEAgLTUzNyw3NSArNTkzLDY0IEBACiAJCWlmIChjc3NwX3NlcSA8IGNzcF9zZXEpCiAJCQljc3Bfc2VxID0gY3NzcF9zZXE7CiAJCXJkYXRhLT5tYXhfc2VxID0gY3NwX3NlcTsKLQkJcnBvcnQtPm1heGZyYW1lX3NpemUgPQotCQkJZmNfcGxvZ2lfZ2V0X21heGZyYW1lKHBscCwgbHBvcnQtPm1mcyk7Ci0KLQkJLyoKLQkJICogSWYgdGhlIHJwb3J0IGlzIG9uZSBvZiB0aGUgd2VsbCBrbm93biBhZGRyZXNzZXMKLQkJICogd2Ugc2tpcCBQUkxJIGFuZCBSVFYgYW5kIGdvIHN0cmFpZ2h0IHRvIFJFQURZLgotCQkgKi8KLQkJaWYgKHJwb3J0LT5wb3J0X2lkID49IEZDX0ZJRF9ET01fTUdSKQotCQkJZmNfcnBvcnRfZW50ZXJfcmVhZHkocnBvcnQpOwotCQllbHNlCi0JCQlmY19ycG9ydF9lbnRlcl9wcmxpKHJwb3J0KTsKKwkJcmRhdGEtPm1heGZyYW1lX3NpemUgPSBmY19wbG9naV9nZXRfbWF4ZnJhbWUocGxwLCBscG9ydC0+bWZzKTsKKwkJZmNfcnBvcnRfZW50ZXJfcHJsaShyZGF0YSk7CiAJfSBlbHNlCi0JCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJkYXRhLCBmcCk7CiAKIG91dDoKIAlmY19mcmFtZV9mcmVlKGZwKTsKIGVycjoKIAltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7Ci0JcHV0X2RldmljZSgmcnBvcnQtPmRldik7CisJa3JlZl9wdXQoJnJkYXRhLT5rcmVmLCByZGF0YS0+bG9jYWxfcG9ydC0+dHQucnBvcnRfZGVzdHJveSk7CiB9CiAKIC8qKgogICogZmNfcnBvcnRfZW50ZXJfcGxvZ2koKSAtIFNlbmQgUG9ydCBMb2dpbiAoUExPR0kpIHJlcXVlc3QgdG8gcGVlcgotICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRvIHNlbmQgUExPR0kgdG8KKyAqIEByZGF0YTogcHJpdmF0ZSByZW1vdGUgcG9ydCBkYXRhCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCiAgKiB0aGlzIHJvdXRpbmUuCiAgKi8KLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3Bsb2dpKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCitzdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9wbG9naShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OwogCXN0cnVjdCBmY19mcmFtZSAqZnA7CiAKLQlGQ19SUE9SVF9EQkcocnBvcnQsICJQb3J0IGVudGVyZWQgUExPR0kgc3RhdGUgZnJvbSAlcyBzdGF0ZVxuIiwKLQkJICAgICBmY19ycG9ydF9zdGF0ZShycG9ydCkpOworCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlBvcnQgZW50ZXJlZCBQTE9HSSBzdGF0ZSBmcm9tICVzIHN0YXRlXG4iLAorCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CiAKLQlmY19ycG9ydF9zdGF0ZV9lbnRlcihycG9ydCwgUlBPUlRfU1RfUExPR0kpOworCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJkYXRhLCBSUE9SVF9TVF9QTE9HSSk7CiAKLQlycG9ydC0+bWF4ZnJhbWVfc2l6ZSA9IEZDX01JTl9NQVhfUEFZTE9BRDsKKwlyZGF0YS0+bWF4ZnJhbWVfc2l6ZSA9IEZDX01JTl9NQVhfUEFZTE9BRDsKIAlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2Yoc3RydWN0IGZjX2Vsc19mbG9naSkpOwogCWlmICghZnApIHsKLQkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocnBvcnQsIGZwKTsKKwkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocmRhdGEsIGZwKTsKIAkJcmV0dXJuOwogCX0KIAlyZGF0YS0+ZV9kX3RvdiA9IGxwb3J0LT5lX2RfdG92OwogCi0JaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgcnBvcnQsIGZwLCBFTFNfUExPR0ksCi0JCQkJICBmY19ycG9ydF9wbG9naV9yZXNwLCBycG9ydCwgbHBvcnQtPmVfZF90b3YpKQotCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOworCWlmICghbHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIHJkYXRhLT5pZHMucG9ydF9pZCwgZnAsIEVMU19QTE9HSSwKKwkJCQkgIGZjX3Jwb3J0X3Bsb2dpX3Jlc3AsIHJkYXRhLCBscG9ydC0+ZV9kX3RvdikpCisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJkYXRhLCBmcCk7CiAJZWxzZQotCQlnZXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKKwkJa3JlZl9nZXQoJnJkYXRhLT5rcmVmKTsKIH0KIAogLyoqCiAgKiBmY19ycG9ydF9wcmxpX3Jlc3AoKSAtIFByb2Nlc3MgTG9naW4gKFBSTEkpIHJlc3BvbnNlIGhhbmRsZXIKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUFJMSSBleGNoYW5nZQogICogQGZwOiByZXNwb25zZSBmcmFtZQotICogQHJwX2FyZzogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydAorICogQHJkYXRhX2FyZzogcHJpdmF0ZSByZW1vdGUgcG9ydCBkYXRhCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIHJwb3J0IGxvY2sKICAqIGhlbGQsIGJ1dCBpdCB3aWxsIGxvY2ssIGNhbGwgYW4gX2VudGVyXyogZnVuY3Rpb24gb3IgZmNfcnBvcnRfZXJyb3IKICAqIGFuZCB0aGVuIHVubG9jayB0aGUgcnBvcnQuCiAgKi8KIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X3BybGlfcmVzcChzdHJ1Y3QgZmNfc2VxICpzcCwgc3RydWN0IGZjX2ZyYW1lICpmcCwKLQkJCSAgICAgICB2b2lkICpycF9hcmcpCisJCQkgICAgICAgdm9pZCAqcmRhdGFfYXJnKQogewotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBycF9hcmc7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhID0gcmRhdGFfYXJnOwogCXN0cnVjdCB7CiAJCXN0cnVjdCBmY19lbHNfcHJsaSBwcmxpOwogCQlzdHJ1Y3QgZmNfZWxzX3NwcCBzcHA7CkBAIC02MTYsMjEgKzY2MSwyNCBAQAogCiAJbXV0ZXhfbG9jaygmcmRhdGEtPnJwX211dGV4KTsKIAotCUZDX1JQT1JUX0RCRyhycG9ydCwgIlJlY2VpdmVkIGEgUFJMSSByZXNwb25zZVxuIik7CisJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgYSBQUkxJICVzXG4iLCBmY19lbHNfcmVzcF90eXBlKGZwKSk7CiAKIAlpZiAocmRhdGEtPnJwX3N0YXRlICE9IFJQT1JUX1NUX1BSTEkpIHsKLQkJRkNfUlBPUlRfREJHKHJwb3J0LCAiUmVjZWl2ZWQgYSBQUkxJIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgIgotCQkJICAgICAiJXNcbiIsIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlJlY2VpdmVkIGEgUFJMSSByZXNwb25zZSwgYnV0IGluIHN0YXRlICIKKwkJCSAgICAgIiVzXG4iLCBmY19ycG9ydF9zdGF0ZShyZGF0YSkpOwogCQlpZiAoSVNfRVJSKGZwKSkKIAkJCWdvdG8gZXJyOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoSVNfRVJSKGZwKSkgewotCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShyZGF0YSwgZnApOwogCQlnb3RvIGVycjsKIAl9CiAKKwkvKiByZWluaXRpYWxpemUgcmVtb3RlIHBvcnQgcm9sZXMgKi8KKwlyZGF0YS0+aWRzLnJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOworCiAJb3AgPSBmY19mcmFtZV9wYXlsb2FkX29wKGZwKTsKIAlpZiAob3AgPT0gRUxTX0xTX0FDQykgewogCQlwcCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKnBwKSk7CkBAIC02NDAsOTAgKzY4OCw4MiBAQAogCQkJCXJkYXRhLT5mbGFncyB8PSBGQ19SUF9GTEFHU19SRVRSWTsKIAkJfQogCi0JCXJwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9IEZDX0NPU19DTEFTUzM7CisJCXJkYXRhLT5zdXBwb3J0ZWRfY2xhc3NlcyA9IEZDX0NPU19DTEFTUzM7CiAJCWlmIChmY3BfcGFybSAmIEZDUF9TUFBGX0lOSVRfRkNOKQogCQkJcm9sZXMgfD0gRkNfUlBPUlRfUk9MRV9GQ1BfSU5JVElBVE9SOwogCQlpZiAoZmNwX3Bhcm0gJiBGQ1BfU1BQRl9UQVJHX0ZDTikKIAkJCXJvbGVzIHw9IEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVDsKIAotCQlycG9ydC0+cm9sZXMgPSByb2xlczsKLQkJZmNfcnBvcnRfZW50ZXJfcnR2KHJwb3J0KTsKKwkJcmRhdGEtPmlkcy5yb2xlcyA9IHJvbGVzOworCQlmY19ycG9ydF9lbnRlcl9ydHYocmRhdGEpOwogCiAJfSBlbHNlIHsKLQkJRkNfUlBPUlRfREJHKHJwb3J0LCAiQmFkIEVMUyByZXNwb25zZSBmb3IgUFJMSSBjb21tYW5kXG4iKTsKLQkJcmRhdGEtPmV2ZW50ID0gUlBPUlRfRVZfRkFJTEVEOwotCQlmY19ycG9ydF9zdGF0ZV9lbnRlcihycG9ydCwgUlBPUlRfU1RfTk9ORSk7Ci0JCXF1ZXVlX3dvcmsocnBvcnRfZXZlbnRfcXVldWUsICZyZGF0YS0+ZXZlbnRfd29yayk7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIkJhZCBFTFMgcmVzcG9uc2UgZm9yIFBSTEkgY29tbWFuZFxuIik7CisJCWZjX3Jwb3J0X2VudGVyX2RlbGV0ZShyZGF0YSwgUlBPUlRfRVZfRkFJTEVEKTsKIAl9CiAKIG91dDoKIAlmY19mcmFtZV9mcmVlKGZwKTsKIGVycjoKIAltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7Ci0JcHV0X2RldmljZSgmcnBvcnQtPmRldik7CisJa3JlZl9wdXQoJnJkYXRhLT5rcmVmLCByZGF0YS0+bG9jYWxfcG9ydC0+dHQucnBvcnRfZGVzdHJveSk7CiB9CiAKIC8qKgogICogZmNfcnBvcnRfbG9nb19yZXNwKCkgLSBMb2dvdXQgKExPR08pIHJlc3BvbnNlIGhhbmRsZXIKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgTE9HTyBleGNoYW5nZQogICogQGZwOiByZXNwb25zZSBmcmFtZQotICogQHJwX2FyZzogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydAorICogQHJkYXRhX2FyZzogcHJpdmF0ZSByZW1vdGUgcG9ydCBkYXRhCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIHJwb3J0IGxvY2sKICAqIGhlbGQsIGJ1dCBpdCB3aWxsIGxvY2ssIGNhbGwgYW4gX2VudGVyXyogZnVuY3Rpb24gb3IgZmNfcnBvcnRfZXJyb3IKICAqIGFuZCB0aGVuIHVubG9jayB0aGUgcnBvcnQuCiAgKi8KIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X2xvZ29fcmVzcChzdHJ1Y3QgZmNfc2VxICpzcCwgc3RydWN0IGZjX2ZyYW1lICpmcCwKLQkJCSAgICAgICB2b2lkICpycF9hcmcpCisJCQkgICAgICAgdm9pZCAqcmRhdGFfYXJnKQogewotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBycF9hcmc7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhID0gcmRhdGFfYXJnOwogCXU4IG9wOwogCiAJbXV0ZXhfbG9jaygmcmRhdGEtPnJwX211dGV4KTsKIAotCUZDX1JQT1JUX0RCRyhycG9ydCwgIlJlY2VpdmVkIGEgTE9HTyByZXNwb25zZVxuIik7CisJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgYSBMT0dPICVzXG4iLCBmY19lbHNfcmVzcF90eXBlKGZwKSk7CiAKIAlpZiAocmRhdGEtPnJwX3N0YXRlICE9IFJQT1JUX1NUX0xPR08pIHsKLQkJRkNfUlBPUlRfREJHKHJwb3J0LCAiUmVjZWl2ZWQgYSBMT0dPIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgIgotCQkJICAgICAiJXNcbiIsIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlJlY2VpdmVkIGEgTE9HTyByZXNwb25zZSwgYnV0IGluIHN0YXRlICIKKwkJCSAgICAgIiVzXG4iLCBmY19ycG9ydF9zdGF0ZShyZGF0YSkpOwogCQlpZiAoSVNfRVJSKGZwKSkKIAkJCWdvdG8gZXJyOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoSVNfRVJSKGZwKSkgewotCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShyZGF0YSwgZnApOwogCQlnb3RvIGVycjsKIAl9CiAKIAlvcCA9IGZjX2ZyYW1lX3BheWxvYWRfb3AoZnApOwotCWlmIChvcCA9PSBFTFNfTFNfQUNDKSB7Ci0JCWZjX3Jwb3J0X2VudGVyX3J0dihycG9ydCk7Ci0JfSBlbHNlIHsKLQkJRkNfUlBPUlRfREJHKHJwb3J0LCAiQmFkIEVMUyByZXNwb25zZSBmb3IgTE9HTyBjb21tYW5kXG4iKTsKLQkJcmRhdGEtPmV2ZW50ID0gUlBPUlRfRVZfTE9HTzsKLQkJZmNfcnBvcnRfc3RhdGVfZW50ZXIocnBvcnQsIFJQT1JUX1NUX05PTkUpOwotCQlxdWV1ZV93b3JrKHJwb3J0X2V2ZW50X3F1ZXVlLCAmcmRhdGEtPmV2ZW50X3dvcmspOwotCX0KKwlpZiAob3AgIT0gRUxTX0xTX0FDQykKKwkJRkNfUlBPUlRfREJHKHJkYXRhLCAiQmFkIEVMUyByZXNwb25zZSBvcCAleCBmb3IgTE9HTyBjb21tYW5kXG4iLAorCQkJICAgICBvcCk7CisJZmNfcnBvcnRfZW50ZXJfZGVsZXRlKHJkYXRhLCBSUE9SVF9FVl9MT0dPKTsKIAogb3V0OgogCWZjX2ZyYW1lX2ZyZWUoZnApOwogZXJyOgogCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKLQlwdXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKKwlrcmVmX3B1dCgmcmRhdGEtPmtyZWYsIHJkYXRhLT5sb2NhbF9wb3J0LT50dC5ycG9ydF9kZXN0cm95KTsKIH0KIAogLyoqCiAgKiBmY19ycG9ydF9lbnRlcl9wcmxpKCkgLSBTZW5kIFByb2Nlc3MgTG9naW4gKFBSTEkpIHJlcXVlc3QgdG8gcGVlcgotICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRvIHNlbmQgUFJMSSB0bworICogQHJkYXRhOiBwcml2YXRlIHJlbW90ZSBwb3J0IGRhdGEKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKICAqIHRoaXMgcm91dGluZS4KICAqLwotc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfcHJsaShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQorc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfcHJsaShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OwogCXN0cnVjdCB7CiAJCXN0cnVjdCBmY19lbHNfcHJsaSBwcmxpOwpAQCAtNzMxLDI5ICs3NzEsMzggQEAKIAl9ICpwcDsKIAlzdHJ1Y3QgZmNfZnJhbWUgKmZwOwogCi0JRkNfUlBPUlRfREJHKHJwb3J0LCAiUG9ydCBlbnRlcmVkIFBSTEkgc3RhdGUgZnJvbSAlcyBzdGF0ZVxuIiwKLQkJICAgICBmY19ycG9ydF9zdGF0ZShycG9ydCkpOwotCi0JZmNfcnBvcnRfc3RhdGVfZW50ZXIocnBvcnQsIFJQT1JUX1NUX1BSTEkpOwotCi0JZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgc2l6ZW9mKCpwcCkpOwotCWlmICghZnApIHsKLQkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocnBvcnQsIGZwKTsKKwkvKgorCSAqIElmIHRoZSBycG9ydCBpcyBvbmUgb2YgdGhlIHdlbGwga25vd24gYWRkcmVzc2VzCisJICogd2Ugc2tpcCBQUkxJIGFuZCBSVFYgYW5kIGdvIHN0cmFpZ2h0IHRvIFJFQURZLgorCSAqLworCWlmIChyZGF0YS0+aWRzLnBvcnRfaWQgPj0gRkNfRklEX0RPTV9NR1IpIHsKKwkJZmNfcnBvcnRfZW50ZXJfcmVhZHkocmRhdGEpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgcnBvcnQsIGZwLCBFTFNfUFJMSSwKLQkJCQkgIGZjX3Jwb3J0X3BybGlfcmVzcCwgcnBvcnQsIGxwb3J0LT5lX2RfdG92KSkKLQkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocnBvcnQsIGZwKTsKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJQb3J0IGVudGVyZWQgUFJMSSBzdGF0ZSBmcm9tICVzIHN0YXRlXG4iLAorCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CisKKwlmY19ycG9ydF9zdGF0ZV9lbnRlcihyZGF0YSwgUlBPUlRfU1RfUFJMSSk7CisKKwlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2YoKnBwKSk7CisJaWYgKCFmcCkgeworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShyZGF0YSwgZnApOworCQlyZXR1cm47CisJfQorCisJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgcmRhdGEtPmlkcy5wb3J0X2lkLCBmcCwgRUxTX1BSTEksCisJCQkJICBmY19ycG9ydF9wcmxpX3Jlc3AsIHJkYXRhLCBscG9ydC0+ZV9kX3RvdikpCisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJkYXRhLCBmcCk7CiAJZWxzZQotCQlnZXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKKwkJa3JlZl9nZXQoJnJkYXRhLT5rcmVmKTsKIH0KIAogLyoqCiAgKiBmY19ycG9ydF9lbHNfcnR2X3Jlc3AoKSAtIFJlcXVlc3QgVGltZW91dCBWYWx1ZSByZXNwb25zZSBoYW5kbGVyCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIFJUViBleGNoYW5nZQogICogQGZwOiByZXNwb25zZSBmcmFtZQotICogQHJwX2FyZzogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydAorICogQHJkYXRhX2FyZzogcHJpdmF0ZSByZW1vdGUgcG9ydCBkYXRhCiAgKgogICogTWFueSB0YXJnZXRzIGRvbid0IHNlZW0gdG8gc3VwcG9ydCB0aGlzLgogICoKQEAgLTc2MiwyNiArODExLDI1IEBACiAgKiBhbmQgdGhlbiB1bmxvY2sgdGhlIHJwb3J0LgogICovCiBzdGF0aWMgdm9pZCBmY19ycG9ydF9ydHZfcmVzcChzdHJ1Y3QgZmNfc2VxICpzcCwgc3RydWN0IGZjX2ZyYW1lICpmcCwKLQkJCSAgICAgIHZvaWQgKnJwX2FyZykKKwkJCSAgICAgIHZvaWQgKnJkYXRhX2FyZykKIHsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gcnBfYXJnOwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSA9IHJkYXRhX2FyZzsKIAl1OCBvcDsKIAogCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAKLQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZWNlaXZlZCBhIFJUViByZXNwb25zZVxuIik7CisJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgYSBSVFYgJXNcbiIsIGZjX2Vsc19yZXNwX3R5cGUoZnApKTsKIAogCWlmIChyZGF0YS0+cnBfc3RhdGUgIT0gUlBPUlRfU1RfUlRWKSB7Ci0JCUZDX1JQT1JUX0RCRyhycG9ydCwgIlJlY2VpdmVkIGEgUlRWIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgIgotCQkJICAgICAiJXNcbiIsIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlJlY2VpdmVkIGEgUlRWIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgIgorCQkJICAgICAiJXNcbiIsIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CiAJCWlmIChJU19FUlIoZnApKQogCQkJZ290byBlcnI7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmIChJU19FUlIoZnApKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yKHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yKHJkYXRhLCBmcCk7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtODA3LDE4NCArODU1LDM3NiBAQAogCQl9CiAJfQogCi0JZmNfcnBvcnRfZW50ZXJfcmVhZHkocnBvcnQpOworCWZjX3Jwb3J0X2VudGVyX3JlYWR5KHJkYXRhKTsKIAogb3V0OgogCWZjX2ZyYW1lX2ZyZWUoZnApOwogZXJyOgogCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKLQlwdXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKKwlrcmVmX3B1dCgmcmRhdGEtPmtyZWYsIHJkYXRhLT5sb2NhbF9wb3J0LT50dC5ycG9ydF9kZXN0cm95KTsKIH0KIAogLyoqCiAgKiBmY19ycG9ydF9lbnRlcl9ydHYoKSAtIFNlbmQgUmVxdWVzdCBUaW1lb3V0IFZhbHVlIChSVFYpIHJlcXVlc3QgdG8gcGVlcgotICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRvIHNlbmQgUlRWIHRvCisgKiBAcmRhdGE6IHByaXZhdGUgcmVtb3RlIHBvcnQgZGF0YQogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwogICogdGhpcyByb3V0aW5lLgogICovCi1zdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9ydHYoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3J0dihzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEpCiB7CiAJc3RydWN0IGZjX2ZyYW1lICpmcDsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7CiAKLQlGQ19SUE9SVF9EQkcocnBvcnQsICJQb3J0IGVudGVyZWQgUlRWIHN0YXRlIGZyb20gJXMgc3RhdGVcbiIsCi0JCSAgICAgZmNfcnBvcnRfc3RhdGUocnBvcnQpKTsKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJQb3J0IGVudGVyZWQgUlRWIHN0YXRlIGZyb20gJXMgc3RhdGVcbiIsCisJCSAgICAgZmNfcnBvcnRfc3RhdGUocmRhdGEpKTsKIAotCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJwb3J0LCBSUE9SVF9TVF9SVFYpOworCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJkYXRhLCBSUE9SVF9TVF9SVFYpOwogCiAJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgc2l6ZW9mKHN0cnVjdCBmY19lbHNfcnR2KSk7CiAJaWYgKCFmcCkgewotCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShyZGF0YSwgZnApOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgcnBvcnQsIGZwLCBFTFNfUlRWLAotCQkJCSAgICAgZmNfcnBvcnRfcnR2X3Jlc3AsIHJwb3J0LCBscG9ydC0+ZV9kX3RvdikpCi0JCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CisJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgcmRhdGEtPmlkcy5wb3J0X2lkLCBmcCwgRUxTX1JUViwKKwkJCQkgICAgIGZjX3Jwb3J0X3J0dl9yZXNwLCByZGF0YSwgbHBvcnQtPmVfZF90b3YpKQorCQlmY19ycG9ydF9lcnJvcl9yZXRyeShyZGF0YSwgZnApOwogCWVsc2UKLQkJZ2V0X2RldmljZSgmcnBvcnQtPmRldik7CisJCWtyZWZfZ2V0KCZyZGF0YS0+a3JlZik7CiB9CiAKIC8qKgogICogZmNfcnBvcnRfZW50ZXJfbG9nbygpIC0gU2VuZCBMb2dvdXQgKExPR08pIHJlcXVlc3QgdG8gcGVlcgotICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRvIHNlbmQgTE9HTyB0bworICogQHJkYXRhOiBwcml2YXRlIHJlbW90ZSBwb3J0IGRhdGEKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKICAqIHRoaXMgcm91dGluZS4KICAqLwotc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfbG9nbyhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQorc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfbG9nbyhzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OwogCXN0cnVjdCBmY19mcmFtZSAqZnA7CiAKLQlGQ19SUE9SVF9EQkcocnBvcnQsICJQb3J0IGVudGVyZWQgTE9HTyBzdGF0ZSBmcm9tICVzIHN0YXRlXG4iLAotCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7CisJRkNfUlBPUlRfREJHKHJkYXRhLCAiUG9ydCBlbnRlcmVkIExPR08gc3RhdGUgZnJvbSAlcyBzdGF0ZVxuIiwKKwkJICAgICBmY19ycG9ydF9zdGF0ZShyZGF0YSkpOwogCi0JZmNfcnBvcnRfc3RhdGVfZW50ZXIocnBvcnQsIFJQT1JUX1NUX0xPR08pOworCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJkYXRhLCBSUE9SVF9TVF9MT0dPKTsKIAogCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZihzdHJ1Y3QgZmNfZWxzX2xvZ28pKTsKIAlpZiAoIWZwKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJkYXRhLCBmcCk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBycG9ydCwgZnAsIEVMU19MT0dPLAotCQkJCSAgZmNfcnBvcnRfbG9nb19yZXNwLCBycG9ydCwgbHBvcnQtPmVfZF90b3YpKQotCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOworCWlmICghbHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIHJkYXRhLT5pZHMucG9ydF9pZCwgZnAsIEVMU19MT0dPLAorCQkJCSAgZmNfcnBvcnRfbG9nb19yZXNwLCByZGF0YSwgbHBvcnQtPmVfZF90b3YpKQorCQlmY19ycG9ydF9lcnJvcl9yZXRyeShyZGF0YSwgZnApOwogCWVsc2UKLQkJZ2V0X2RldmljZSgmcnBvcnQtPmRldik7CisJCWtyZWZfZ2V0KCZyZGF0YS0+a3JlZik7CiB9CiAKLQogLyoqCi0gKiBmY19ycG9ydF9yZWN2X3JlcSgpIC0gUmVjZWl2ZSBhIHJlcXVlc3QgZnJvbSBhIHJwb3J0Ci0gKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIFBMT0dJIGV4Y2hhbmdlCisgKiBmY19ycG9ydF9lbHNfYWRpc2NfcmVzcCgpIC0gQWRkcmVzcyBEaXNjb3ZlcnkgcmVzcG9uc2UgaGFuZGxlcgorICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBBRElTQyBleGNoYW5nZQogICogQGZwOiByZXNwb25zZSBmcmFtZQotICogQHJwX2FyZzogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydAorICogQHJkYXRhX2FyZzogcmVtb3RlIHBvcnQgcHJpdmF0ZS4KICAqCi0gKiBMb2NraW5nIE5vdGU6IENhbGxlZCB3aXRob3V0IHRoZSBycG9ydCBsb2NrIGhlbGQuIFRoaXMKLSAqIGZ1bmN0aW9uIHdpbGwgaG9sZCB0aGUgcnBvcnQgbG9jaywgY2FsbCBhbiBfZW50ZXJfKgotICogZnVuY3Rpb24gYW5kIHRoZW4gdW5sb2NrIHRoZSBycG9ydC4KKyAqIExvY2tpbmcgTm90ZTogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRob3V0IHRoZSBycG9ydCBsb2NrCisgKiBoZWxkLCBidXQgaXQgd2lsbCBsb2NrLCBjYWxsIGFuIF9lbnRlcl8qIGZ1bmN0aW9uIG9yIGZjX3Jwb3J0X2Vycm9yCisgKiBhbmQgdGhlbiB1bmxvY2sgdGhlIHJwb3J0LgogICovCi12b2lkIGZjX3Jwb3J0X3JlY3ZfcmVxKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAotCQkgICAgICAgc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X2FkaXNjX3Jlc3Aoc3RydWN0IGZjX3NlcSAqc3AsIHN0cnVjdCBmY19mcmFtZSAqZnAsCisJCQkgICAgICB2b2lkICpyZGF0YV9hcmcpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7Ci0Jc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OwotCi0Jc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7Ci0Jc3RydWN0IGZjX3NlcV9lbHNfZGF0YSBlbHNfZGF0YTsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEgPSByZGF0YV9hcmc7CisJc3RydWN0IGZjX2Vsc19hZGlzYyAqYWRpc2M7CiAJdTggb3A7CiAKIAltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCisJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgYSBBRElTQyByZXNwb25zZVxuIik7CisKKwlpZiAocmRhdGEtPnJwX3N0YXRlICE9IFJQT1JUX1NUX0FESVNDKSB7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlJlY2VpdmVkIGEgQURJU0MgcmVzcCBidXQgaW4gc3RhdGUgJXNcbiIsCisJCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CisJCWlmIChJU19FUlIoZnApKQorCQkJZ290byBlcnI7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChJU19FUlIoZnApKSB7CisJCWZjX3Jwb3J0X2Vycm9yKHJkYXRhLCBmcCk7CisJCWdvdG8gZXJyOworCX0KKworCS8qCisJICogSWYgYWRkcmVzcyB2ZXJpZmljYXRpb24gZmFpbGVkLiAgQ29uc2lkZXIgdXMgbG9nZ2VkIG91dCBvZiB0aGUgcnBvcnQuCisJICogU2luY2UgdGhlIHJwb3J0IGlzIHN0aWxsIGluIGRpc2NvdmVyeSwgd2Ugd2FudCB0byBiZQorCSAqIGxvZ2dlZCBpbiwgc28gZ28gdG8gUExPR0kgc3RhdGUuICBPdGhlcndpc2UsIGdvIGJhY2sgdG8gUkVBRFkuCisJICovCisJb3AgPSBmY19mcmFtZV9wYXlsb2FkX29wKGZwKTsKKwlhZGlzYyA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKmFkaXNjKSk7CisJaWYgKG9wICE9IEVMU19MU19BQ0MgfHwgIWFkaXNjIHx8CisJICAgIG50b2gyNChhZGlzYy0+YWRpc2NfcG9ydF9pZCkgIT0gcmRhdGEtPmlkcy5wb3J0X2lkIHx8CisJICAgIGdldF91bmFsaWduZWRfYmU2NCgmYWRpc2MtPmFkaXNjX3d3cG4pICE9IHJkYXRhLT5pZHMucG9ydF9uYW1lIHx8CisJICAgIGdldF91bmFsaWduZWRfYmU2NCgmYWRpc2MtPmFkaXNjX3d3bm4pICE9IHJkYXRhLT5pZHMubm9kZV9uYW1lKSB7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIkFESVNDIGVycm9yIG9yIG1pc21hdGNoXG4iKTsKKwkJZmNfcnBvcnRfZW50ZXJfcGxvZ2kocmRhdGEpOworCX0gZWxzZSB7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIkFESVNDIE9LXG4iKTsKKwkJZmNfcnBvcnRfZW50ZXJfcmVhZHkocmRhdGEpOworCX0KK291dDoKKwlmY19mcmFtZV9mcmVlKGZwKTsKK2VycjoKKwltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CisJa3JlZl9wdXQoJnJkYXRhLT5rcmVmLCByZGF0YS0+bG9jYWxfcG9ydC0+dHQucnBvcnRfZGVzdHJveSk7Cit9CisKKy8qKgorICogZmNfcnBvcnRfZW50ZXJfYWRpc2MoKSAtIFNlbmQgQWRkcmVzcyBEaXNjb3ZlciAoQURJU0MpIHJlcXVlc3QgdG8gcGVlcgorICogQHJkYXRhOiByZW1vdGUgcG9ydCBwcml2YXRlIGRhdGEKKyAqCisgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKKyAqIHRoaXMgcm91dGluZS4KKyAqLworc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfYWRpc2Moc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhKQoreworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKKwlzdHJ1Y3QgZmNfZnJhbWUgKmZwOworCisJRkNfUlBPUlRfREJHKHJkYXRhLCAic2VuZGluZyBBRElTQyBmcm9tICVzIHN0YXRlXG4iLAorCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CisKKwlmY19ycG9ydF9zdGF0ZV9lbnRlcihyZGF0YSwgUlBPUlRfU1RfQURJU0MpOworCisJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgc2l6ZW9mKHN0cnVjdCBmY19lbHNfYWRpc2MpKTsKKwlpZiAoIWZwKSB7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJkYXRhLCBmcCk7CisJCXJldHVybjsKKwl9CisJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgcmRhdGEtPmlkcy5wb3J0X2lkLCBmcCwgRUxTX0FESVNDLAorCQkJCSAgZmNfcnBvcnRfYWRpc2NfcmVzcCwgcmRhdGEsIGxwb3J0LT5lX2RfdG92KSkKKwkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocmRhdGEsIGZwKTsKKwllbHNlCisJCWtyZWZfZ2V0KCZyZGF0YS0+a3JlZik7Cit9CisKKy8qKgorICogZmNfcnBvcnRfcmVjdl9hZGlzY19yZXEoKSAtIEhhbmRsZSBpbmNvbWluZyBBZGRyZXNzIERpc2NvdmVyeSAoQURJU0MpIFJlcXVlc3QKKyAqIEByZGF0YTogcmVtb3RlIHBvcnQgcHJpdmF0ZQorICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBBRElTQyBleGNoYW5nZQorICogQGluX2ZwOiBBRElTQyByZXF1ZXN0IGZyYW1lCisgKgorICogTG9ja2luZyBOb3RlOiAgQ2FsbGVkIHdpdGggdGhlIGxwb3J0IGFuZCBycG9ydCBsb2NrcyBoZWxkLgorICovCitzdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X2FkaXNjX3JlcShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEsCisJCQkJICAgIHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmluX2ZwKQoreworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKKwlzdHJ1Y3QgZmNfZnJhbWUgKmZwOworCXN0cnVjdCBmY19leGNoICplcCA9IGZjX3NlcV9leGNoKHNwKTsKKwlzdHJ1Y3QgZmNfZWxzX2FkaXNjICphZGlzYzsKKwlzdHJ1Y3QgZmNfc2VxX2Vsc19kYXRhIHJqdF9kYXRhOworCXUzMiBmX2N0bDsKKworCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlJlY2VpdmVkIEFESVNDIHJlcXVlc3RcbiIpOworCisJYWRpc2MgPSBmY19mcmFtZV9wYXlsb2FkX2dldChpbl9mcCwgc2l6ZW9mKCphZGlzYykpOworCWlmICghYWRpc2MpIHsKKwkJcmp0X2RhdGEuZnAgPSBOVUxMOworCQlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX1BST1Q7CisJCXJqdF9kYXRhLmV4cGxhbiA9IEVMU19FWFBMX0lOVl9MRU47CisJCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLCBFTFNfTFNfUkpULCAmcmp0X2RhdGEpOworCQlnb3RvIGRyb3A7CisJfQorCisJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgc2l6ZW9mKCphZGlzYykpOworCWlmICghZnApCisJCWdvdG8gZHJvcDsKKwlmY19hZGlzY19maWxsKGxwb3J0LCBmcCk7CisJYWRpc2MgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCphZGlzYykpOworCWFkaXNjLT5hZGlzY19jbWQgPSBFTFNfTFNfQUNDOworCXNwID0gbHBvcnQtPnR0LnNlcV9zdGFydF9uZXh0KHNwKTsKKwlmX2N0bCA9IEZDX0ZDX0VYX0NUWCB8IEZDX0ZDX0xBU1RfU0VRIHwgRkNfRkNfRU5EX1NFUSB8IEZDX0ZDX1NFUV9JTklUOworCWZjX2ZpbGxfZmNfaGRyKGZwLCBGQ19SQ1RMX0VMU19SRVAsIGVwLT5kaWQsIGVwLT5zaWQsCisJCSAgICAgICBGQ19UWVBFX0VMUywgZl9jdGwsIDApOworCWxwb3J0LT50dC5zZXFfc2VuZChscG9ydCwgc3AsIGZwKTsKK2Ryb3A6CisJZmNfZnJhbWVfZnJlZShpbl9mcCk7Cit9CisKKy8qKgorICogZmNfcnBvcnRfcmVjdl9lbHNfcmVxKCkgLSBoYW5kbGUgYSB2YWxpZGF0ZWQgRUxTIHJlcXVlc3QuCisgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydAorICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBQTE9HSSBleGNoYW5nZQorICogQGZwOiByZXNwb25zZSBmcmFtZQorICoKKyAqIEhhbmRsZSBpbmNvbWluZyBFTFMgcmVxdWVzdHMgdGhhdCByZXF1aXJlIHBvcnQgbG9naW4uCisgKiBUaGUgRUxTIG9wY29kZSBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBieSB0aGUgY2FsbGVyLgorICoKKyAqIExvY2tpbmcgTm90ZTogQ2FsbGVkIHdpdGggdGhlIGxwb3J0IGxvY2sgaGVsZC4KKyAqLworc3RhdGljIHZvaWQgZmNfcnBvcnRfcmVjdl9lbHNfcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCQkJICBzdHJ1Y3QgZmNfc2VxICpzcCwgc3RydWN0IGZjX2ZyYW1lICpmcCkKK3sKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGE7CisJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CisJc3RydWN0IGZjX3NlcV9lbHNfZGF0YSBlbHNfZGF0YTsKKwogCWVsc19kYXRhLmZwID0gTlVMTDsKLQllbHNfZGF0YS5leHBsYW4gPSBFTFNfRVhQTF9OT05FOwotCWVsc19kYXRhLnJlYXNvbiA9IEVMU19SSlRfTk9ORTsKKwllbHNfZGF0YS5yZWFzb24gPSBFTFNfUkpUX1VOQUI7CisJZWxzX2RhdGEuZXhwbGFuID0gRUxTX0VYUExfUExPR0lfUkVRRDsKIAogCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7CiAKLQlpZiAoZmgtPmZoX3JfY3RsID09IEZDX1JDVExfRUxTX1JFUSAmJiBmaC0+ZmhfdHlwZSA9PSBGQ19UWVBFX0VMUykgewotCQlvcCA9IGZjX2ZyYW1lX3BheWxvYWRfb3AoZnApOwotCQlzd2l0Y2ggKG9wKSB7Ci0JCWNhc2UgRUxTX1BMT0dJOgotCQkJZmNfcnBvcnRfcmVjdl9wbG9naV9yZXEocnBvcnQsIHNwLCBmcCk7Ci0JCQlicmVhazsKLQkJY2FzZSBFTFNfUFJMSToKLQkJCWZjX3Jwb3J0X3JlY3ZfcHJsaV9yZXEocnBvcnQsIHNwLCBmcCk7Ci0JCQlicmVhazsKLQkJY2FzZSBFTFNfUFJMTzoKLQkJCWZjX3Jwb3J0X3JlY3ZfcHJsb19yZXEocnBvcnQsIHNwLCBmcCk7Ci0JCQlicmVhazsKLQkJY2FzZSBFTFNfTE9HTzoKLQkJCWZjX3Jwb3J0X3JlY3ZfbG9nb19yZXEocnBvcnQsIHNwLCBmcCk7Ci0JCQlicmVhazsKLQkJY2FzZSBFTFNfUlJROgotCQkJZWxzX2RhdGEuZnAgPSBmcDsKLQkJCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLCBFTFNfUlJRLCAmZWxzX2RhdGEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRUxTX1JFQzoKLQkJCWVsc19kYXRhLmZwID0gZnA7Ci0JCQlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChzcCwgRUxTX1JFQywgJmVsc19kYXRhKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZWxzX2RhdGEucmVhc29uID0gRUxTX1JKVF9VTlNVUDsKLQkJCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLCBFTFNfTFNfUkpULCAmZWxzX2RhdGEpOwotCQkJYnJlYWs7Ci0JCX0KKwltdXRleF9sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKKwlyZGF0YSA9IGxwb3J0LT50dC5ycG9ydF9sb29rdXAobHBvcnQsIG50b2gyNChmaC0+Zmhfc19pZCkpOworCWlmICghcmRhdGEpIHsKKwkJbXV0ZXhfdW5sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKKwkJZ290byByZWplY3Q7CisJfQorCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKKworCXN3aXRjaCAocmRhdGEtPnJwX3N0YXRlKSB7CisJY2FzZSBSUE9SVF9TVF9QUkxJOgorCWNhc2UgUlBPUlRfU1RfUlRWOgorCWNhc2UgUlBPUlRfU1RfUkVBRFk6CisJY2FzZSBSUE9SVF9TVF9BRElTQzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOworCQlnb3RvIHJlamVjdDsKKwl9CisKKwlzd2l0Y2ggKGZjX2ZyYW1lX3BheWxvYWRfb3AoZnApKSB7CisJY2FzZSBFTFNfUFJMSToKKwkJZmNfcnBvcnRfcmVjdl9wcmxpX3JlcShyZGF0YSwgc3AsIGZwKTsKKwkJYnJlYWs7CisJY2FzZSBFTFNfUFJMTzoKKwkJZmNfcnBvcnRfcmVjdl9wcmxvX3JlcShyZGF0YSwgc3AsIGZwKTsKKwkJYnJlYWs7CisJY2FzZSBFTFNfQURJU0M6CisJCWZjX3Jwb3J0X3JlY3ZfYWRpc2NfcmVxKHJkYXRhLCBzcCwgZnApOworCQlicmVhazsKKwljYXNlIEVMU19SUlE6CisJCWVsc19kYXRhLmZwID0gZnA7CisJCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLCBFTFNfUlJRLCAmZWxzX2RhdGEpOworCQlicmVhazsKKwljYXNlIEVMU19SRUM6CisJCWVsc19kYXRhLmZwID0gZnA7CisJCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLCBFTFNfUkVDLCAmZWxzX2RhdGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmY19mcmFtZV9mcmVlKGZwKTsJLyogY2FuJ3QgaGFwcGVuICovCisJCWJyZWFrOwogCX0KIAogCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKKwlyZXR1cm47CisKK3JlamVjdDoKKwlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChzcCwgRUxTX0xTX1JKVCwgJmVsc19kYXRhKTsKKwlmY19mcmFtZV9mcmVlKGZwKTsKK30KKworLyoqCisgKiBmY19ycG9ydF9yZWN2X3JlcSgpIC0gSGFuZGxlIGEgcmVjZWl2ZWQgRUxTIHJlcXVlc3QgZnJvbSBhIHJwb3J0CisgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIFBMT0dJIGV4Y2hhbmdlCisgKiBAZnA6IHJlc3BvbnNlIGZyYW1lCisgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydAorICoKKyAqIExvY2tpbmcgTm90ZTogQ2FsbGVkIHdpdGggdGhlIGxwb3J0IGxvY2sgaGVsZC4KKyAqLwordm9pZCBmY19ycG9ydF9yZWN2X3JlcShzdHJ1Y3QgZmNfc2VxICpzcCwgc3RydWN0IGZjX2ZyYW1lICpmcCwKKwkJICAgICAgIHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCit7CisJc3RydWN0IGZjX3NlcV9lbHNfZGF0YSBlbHNfZGF0YTsKKworCS8qCisJICogSGFuZGxlIFBMT0dJIGFuZCBMT0dPIHJlcXVlc3RzIHNlcGFyYXRlbHksIHNpbmNlIHRoZXkKKwkgKiBkb24ndCByZXF1aXJlIHByaW9yIGxvZ2luLgorCSAqIENoZWNrIGZvciB1bnN1cHBvcnRlZCBvcGNvZGVzIGZpcnN0IGFuZCByZWplY3QgdGhlbS4KKwkgKiBGb3Igc29tZSBvcHMsIGl0IHdvdWxkIGJlIGluY29ycmVjdCB0byByZWplY3Qgd2l0aCAiUExPR0kgcmVxdWlyZWQiLgorCSAqLworCXN3aXRjaCAoZmNfZnJhbWVfcGF5bG9hZF9vcChmcCkpIHsKKwljYXNlIEVMU19QTE9HSToKKwkJZmNfcnBvcnRfcmVjdl9wbG9naV9yZXEobHBvcnQsIHNwLCBmcCk7CisJCWJyZWFrOworCWNhc2UgRUxTX0xPR086CisJCWZjX3Jwb3J0X3JlY3ZfbG9nb19yZXEobHBvcnQsIHNwLCBmcCk7CisJCWJyZWFrOworCWNhc2UgRUxTX1BSTEk6CisJY2FzZSBFTFNfUFJMTzoKKwljYXNlIEVMU19BRElTQzoKKwljYXNlIEVMU19SUlE6CisJY2FzZSBFTFNfUkVDOgorCQlmY19ycG9ydF9yZWN2X2Vsc19yZXEobHBvcnQsIHNwLCBmcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZjX2ZyYW1lX2ZyZWUoZnApOworCQllbHNfZGF0YS5mcCA9IE5VTEw7CisJCWVsc19kYXRhLnJlYXNvbiA9IEVMU19SSlRfVU5TVVA7CisJCWVsc19kYXRhLmV4cGxhbiA9IEVMU19FWFBMX05PTkU7CisJCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLCBFTFNfTFNfUkpULCAmZWxzX2RhdGEpOworCQlicmVhazsKKwl9CiB9CiAKIC8qKgogICogZmNfcnBvcnRfcmVjdl9wbG9naV9yZXEoKSAtIEhhbmRsZSBpbmNvbWluZyBQb3J0IExvZ2luIChQTE9HSSkgcmVxdWVzdAotICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRoYXQgaW5pdGlhdGVkIFBMT0dJCisgKiBAbHBvcnQ6IGxvY2FsIHBvcnQKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUExPR0kgZXhjaGFuZ2UKICAqIEBmcDogUExPR0kgcmVxdWVzdCBmcmFtZQogICoKLSAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCi0gKiB0aGlzIGZ1bmN0aW9uLgorICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBoZWxkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfcGxvZ2lfcmVxKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQsCitzdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3Bsb2dpX3JlcShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAogCQkJCSAgICBzdHJ1Y3QgZmNfc2VxICpzcCwgc3RydWN0IGZjX2ZyYW1lICpyeF9mcCkKIHsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKLQlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7CisJc3RydWN0IGZjX2Rpc2MgKmRpc2M7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhOwogCXN0cnVjdCBmY19mcmFtZSAqZnAgPSByeF9mcDsKIAlzdHJ1Y3QgZmNfZXhjaCAqZXA7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CiAJc3RydWN0IGZjX2Vsc19mbG9naSAqcGw7CiAJc3RydWN0IGZjX3NlcV9lbHNfZGF0YSByanRfZGF0YTsKLQl1MzIgc2lkOwotCXU2NCB3d3BuOwotCXU2NCB3d25uOwotCWVudW0gZmNfZWxzX3JqdF9yZWFzb24gcmVqZWN0ID0gMDsKLQl1MzIgZl9jdGw7CisJdTMyIHNpZCwgZl9jdGw7CisKIAlyanRfZGF0YS5mcCA9IE5VTEw7Ci0KIAlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOwotCi0JRkNfUlBPUlRfREJHKHJwb3J0LCAiUmVjZWl2ZWQgUExPR0kgcmVxdWVzdCB3aGlsZSBpbiBzdGF0ZSAlc1xuIiwKLQkJICAgICBmY19ycG9ydF9zdGF0ZShycG9ydCkpOwotCiAJc2lkID0gbnRvaDI0KGZoLT5maF9zX2lkKTsKKworCUZDX1JQT1JUX0lEX0RCRyhscG9ydCwgc2lkLCAiUmVjZWl2ZWQgUExPR0kgcmVxdWVzdFxuIik7CisKIAlwbCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKnBsKSk7CiAJaWYgKCFwbCkgewotCQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZWNlaXZlZCBQTE9HSSB0b28gc2hvcnRcbiIpOwotCQlXQVJOX09OKDEpOwotCQkvKiBYWFggVEJEOiBzZW5kIHJlamVjdD8gKi8KLQkJZmNfZnJhbWVfZnJlZShmcCk7Ci0JCXJldHVybjsKKwkJRkNfUlBPUlRfSURfREJHKGxwb3J0LCBzaWQsICJSZWNlaXZlZCBQTE9HSSB0b28gc2hvcnRcbiIpOworCQlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX1BST1Q7CisJCXJqdF9kYXRhLmV4cGxhbiA9IEVMU19FWFBMX0lOVl9MRU47CisJCWdvdG8gcmVqZWN0OwogCX0KLQl3d3BuID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZwbC0+Zmxfd3dwbik7Ci0Jd3dubiA9IGdldF91bmFsaWduZWRfYmU2NCgmcGwtPmZsX3d3bm4pOworCisJZGlzYyA9ICZscG9ydC0+ZGlzYzsKKwltdXRleF9sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKKwlyZGF0YSA9IGxwb3J0LT50dC5ycG9ydF9jcmVhdGUobHBvcnQsIHNpZCk7CisJaWYgKCFyZGF0YSkgeworCQltdXRleF91bmxvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOworCQlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX1VOQUI7CisJCXJqdF9kYXRhLmV4cGxhbiA9IEVMU19FWFBMX0lOU1VGX1JFUzsKKwkJZ290byByZWplY3Q7CisJfQorCisJbXV0ZXhfbG9jaygmcmRhdGEtPnJwX211dGV4KTsKKwltdXRleF91bmxvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOworCisJcmRhdGEtPmlkcy5wb3J0X25hbWUgPSBnZXRfdW5hbGlnbmVkX2JlNjQoJnBsLT5mbF93d3BuKTsKKwlyZGF0YS0+aWRzLm5vZGVfbmFtZSA9IGdldF91bmFsaWduZWRfYmU2NCgmcGwtPmZsX3d3bm4pOwogCiAJLyoKLQkgKiBJZiB0aGUgc2Vzc2lvbiB3YXMganVzdCBjcmVhdGVkLCBwb3NzaWJseSBkdWUgdG8gdGhlIGluY29taW5nIFBMT0dJLAorCSAqIElmIHRoZSBycG9ydCB3YXMganVzdCBjcmVhdGVkLCBwb3NzaWJseSBkdWUgdG8gdGhlIGluY29taW5nIFBMT0dJLAogCSAqIHNldCB0aGUgc3RhdGUgYXBwcm9wcmlhdGVseSBhbmQgYWNjZXB0IHRoZSBQTE9HSS4KIAkgKgogCSAqIElmIHdlIGhhZCBhbHNvIHNlbnQgYSBQTE9HSSwgYW5kIGlmIHRoZSByZWNlaXZlZCBQTE9HSSBpcyBmcm9tIGEKQEAgLTk5Niw4NiArMTIzNiw3NiBAQAogCSAqLwogCXN3aXRjaCAocmRhdGEtPnJwX3N0YXRlKSB7CiAJY2FzZSBSUE9SVF9TVF9JTklUOgotCQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZWNlaXZlZCBQTE9HSSwgd3dwbiAlbGx4IHN0YXRlIElOSVQgIgotCQkJICAgICAiLSByZWplY3RcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpd3dwbik7Ci0JCXJlamVjdCA9IEVMU19SSlRfVU5TVVA7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlJlY2VpdmVkIFBMT0dJIGluIElOSVQgc3RhdGVcbiIpOwogCQlicmVhazsKIAljYXNlIFJQT1JUX1NUX1BMT0dJOgotCQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZWNlaXZlZCBQTE9HSSBpbiBQTE9HSSBzdGF0ZSAlZFxuIiwKLQkJCSAgICAgcmRhdGEtPnJwX3N0YXRlKTsKLQkJaWYgKHd3cG4gPCBscG9ydC0+d3dwbikKLQkJCXJlamVjdCA9IEVMU19SSlRfSU5QUk9HOworCQlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBQTE9HSSBpbiBQTE9HSSBzdGF0ZVxuIik7CisJCWlmIChyZGF0YS0+aWRzLnBvcnRfbmFtZSA8IGxwb3J0LT53d3BuKSB7CisJCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CisJCQlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX0lOUFJPRzsKKwkJCXJqdF9kYXRhLmV4cGxhbiA9IEVMU19FWFBMX05PTkU7CisJCQlnb3RvIHJlamVjdDsKKwkJfQogCQlicmVhazsKIAljYXNlIFJQT1JUX1NUX1BSTEk6CiAJY2FzZSBSUE9SVF9TVF9SRUFEWToKLQkJRkNfUlBPUlRfREJHKHJwb3J0LCAiUmVjZWl2ZWQgUExPR0kgaW4gbG9nZ2VkLWluIHN0YXRlICVkICIKKwljYXNlIFJQT1JUX1NUX0FESVNDOgorCQlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBQTE9HSSBpbiBsb2dnZWQtaW4gc3RhdGUgJWQgIgogCQkJICAgICAiLSBpZ25vcmVkIGZvciBub3dcbiIsIHJkYXRhLT5ycF9zdGF0ZSk7CiAJCS8qIFhYWCBUQkQgLSBzaG91bGQgcmVzZXQgKi8KIAkJYnJlYWs7Ci0JY2FzZSBSUE9SVF9TVF9OT05FOgorCWNhc2UgUlBPUlRfU1RfREVMRVRFOgogCWRlZmF1bHQ6Ci0JCUZDX1JQT1JUX0RCRyhycG9ydCwgIlJlY2VpdmVkIFBMT0dJIGluIHVuZXhwZWN0ZWQgIgotCQkJICAgICAic3RhdGUgJWRcbiIsIHJkYXRhLT5ycF9zdGF0ZSk7Ci0JCWZjX2ZyYW1lX2ZyZWUoZnApOwotCQlyZXR1cm47Ci0JCWJyZWFrOworCQlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBQTE9HSSBpbiB1bmV4cGVjdGVkIHN0YXRlICVkXG4iLAorCQkJICAgICByZGF0YS0+cnBfc3RhdGUpOworCQlmY19mcmFtZV9mcmVlKHJ4X2ZwKTsKKwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHJlamVjdCkgewotCQlyanRfZGF0YS5yZWFzb24gPSByZWplY3Q7Ci0JCXJqdF9kYXRhLmV4cGxhbiA9IEVMU19FWFBMX05PTkU7Ci0JCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLCBFTFNfTFNfUkpULCAmcmp0X2RhdGEpOwotCQlmY19mcmFtZV9mcmVlKGZwKTsKLQl9IGVsc2UgewotCQlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2YoKnBsKSk7Ci0JCWlmIChmcCA9PSBOVUxMKSB7Ci0JCQlmcCA9IHJ4X2ZwOwotCQkJcmp0X2RhdGEucmVhc29uID0gRUxTX1JKVF9VTkFCOwotCQkJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfTk9ORTsKLQkJCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLCBFTFNfTFNfUkpULCAmcmp0X2RhdGEpOwotCQkJZmNfZnJhbWVfZnJlZShmcCk7Ci0JCX0gZWxzZSB7Ci0JCQlzcCA9IGxwb3J0LT50dC5zZXFfc3RhcnRfbmV4dChzcCk7Ci0JCQlXQVJOX09OKCFzcCk7Ci0JCQlmY19ycG9ydF9zZXRfbmFtZShycG9ydCwgd3dwbiwgd3dubik7CisJLyoKKwkgKiBHZXQgc2Vzc2lvbiBwYXlsb2FkIHNpemUgZnJvbSBpbmNvbWluZyBQTE9HSS4KKwkgKi8KKwlyZGF0YS0+bWF4ZnJhbWVfc2l6ZSA9IGZjX3Bsb2dpX2dldF9tYXhmcmFtZShwbCwgbHBvcnQtPm1mcyk7CisJZmNfZnJhbWVfZnJlZShyeF9mcCk7CiAKLQkJCS8qCi0JCQkgKiBHZXQgc2Vzc2lvbiBwYXlsb2FkIHNpemUgZnJvbSBpbmNvbWluZyBQTE9HSS4KLQkJCSAqLwotCQkJcnBvcnQtPm1heGZyYW1lX3NpemUgPQotCQkJCWZjX3Bsb2dpX2dldF9tYXhmcmFtZShwbCwgbHBvcnQtPm1mcyk7Ci0JCQlmY19mcmFtZV9mcmVlKHJ4X2ZwKTsKLQkJCWZjX3Bsb2dpX2ZpbGwobHBvcnQsIGZwLCBFTFNfTFNfQUNDKTsKKwkvKgorCSAqIFNlbmQgTFNfQUNDLgkgSWYgdGhpcyBmYWlscywgdGhlIG9yaWdpbmF0b3Igc2hvdWxkIHJldHJ5LgorCSAqLworCXNwID0gbHBvcnQtPnR0LnNlcV9zdGFydF9uZXh0KHNwKTsKKwlpZiAoIXNwKQorCQlnb3RvIG91dDsKKwlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2YoKnBsKSk7CisJaWYgKCFmcCkKKwkJZ290byBvdXQ7CiAKLQkJCS8qCi0JCQkgKiBTZW5kIExTX0FDQy4JIElmIHRoaXMgZmFpbHMsCi0JCQkgKiB0aGUgb3JpZ2luYXRvciBzaG91bGQgcmV0cnkuCi0JCQkgKi8KLQkJCWZfY3RsID0gRkNfRkNfRVhfQ1RYIHwgRkNfRkNfTEFTVF9TRVE7Ci0JCQlmX2N0bCB8PSBGQ19GQ19FTkRfU0VRIHwgRkNfRkNfU0VRX0lOSVQ7Ci0JCQllcCA9IGZjX3NlcV9leGNoKHNwKTsKLQkJCWZjX2ZpbGxfZmNfaGRyKGZwLCBGQ19SQ1RMX0VMU19SRVAsIGVwLT5kaWQsIGVwLT5zaWQsCi0JCQkJICAgICAgIEZDX1RZUEVfRUxTLCBmX2N0bCwgMCk7Ci0JCQlscG9ydC0+dHQuc2VxX3NlbmQobHBvcnQsIHNwLCBmcCk7Ci0JCQlpZiAocmRhdGEtPnJwX3N0YXRlID09IFJQT1JUX1NUX1BMT0dJKQotCQkJCWZjX3Jwb3J0X2VudGVyX3BybGkocnBvcnQpOwotCQl9Ci0JfQorCWZjX3Bsb2dpX2ZpbGwobHBvcnQsIGZwLCBFTFNfTFNfQUNDKTsKKwlmX2N0bCA9IEZDX0ZDX0VYX0NUWCB8IEZDX0ZDX0xBU1RfU0VRIHwgRkNfRkNfRU5EX1NFUSB8IEZDX0ZDX1NFUV9JTklUOworCWVwID0gZmNfc2VxX2V4Y2goc3ApOworCWZjX2ZpbGxfZmNfaGRyKGZwLCBGQ19SQ1RMX0VMU19SRVAsIGVwLT5kaWQsIGVwLT5zaWQsCisJCSAgICAgICBGQ19UWVBFX0VMUywgZl9jdGwsIDApOworCWxwb3J0LT50dC5zZXFfc2VuZChscG9ydCwgc3AsIGZwKTsKKwlmY19ycG9ydF9lbnRlcl9wcmxpKHJkYXRhKTsKK291dDoKKwltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CisJcmV0dXJuOworCityZWplY3Q6CisJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19SSlQsICZyanRfZGF0YSk7CisJZmNfZnJhbWVfZnJlZShmcCk7CiB9CiAKIC8qKgogICogZmNfcnBvcnRfcmVjdl9wcmxpX3JlcSgpIC0gSGFuZGxlIGluY29taW5nIFByb2Nlc3MgTG9naW4gKFBSTEkpIHJlcXVlc3QKLSAqIEBycG9ydDogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydCB0aGF0IGluaXRpYXRlZCBQUkxJCisgKiBAcmRhdGE6IHByaXZhdGUgcmVtb3RlIHBvcnQgZGF0YQogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBQUkxJIGV4Y2hhbmdlCiAgKiBAZnA6IFBSTEkgcmVxdWVzdCBmcmFtZQogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCiAgKiB0aGlzIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3BybGlfcmVxKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQsCitzdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3BybGlfcmVxKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSwKIAkJCQkgICBzdHJ1Y3QgZmNfc2VxICpzcCwgc3RydWN0IGZjX2ZyYW1lICpyeF9mcCkKIHsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7CiAJc3RydWN0IGZjX2V4Y2ggKmVwOwogCXN0cnVjdCBmY19mcmFtZSAqZnA7CkBAIC0xMDk5LDEyICsxMzI5LDE0IEBACiAKIAlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQocnhfZnApOwogCi0JRkNfUlBPUlRfREJHKHJwb3J0LCAiUmVjZWl2ZWQgUFJMSSByZXF1ZXN0IHdoaWxlIGluIHN0YXRlICVzXG4iLAotCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7CisJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgUFJMSSByZXF1ZXN0IHdoaWxlIGluIHN0YXRlICVzXG4iLAorCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CiAKIAlzd2l0Y2ggKHJkYXRhLT5ycF9zdGF0ZSkgewogCWNhc2UgUlBPUlRfU1RfUFJMSToKKwljYXNlIFJQT1JUX1NUX1JUVjoKIAljYXNlIFJQT1JUX1NUX1JFQURZOgorCWNhc2UgUlBPUlRfU1RfQURJU0M6CiAJCXJlYXNvbiA9IEVMU19SSlRfTk9ORTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTExNDksNiArMTM4MSw5IEBACiAJCXBwLT5wcmxpLnBybGlfbGVuID0gaHRvbnMobGVuKTsKIAkJbGVuIC09IHNpemVvZihzdHJ1Y3QgZmNfZWxzX3BybGkpOwogCisJCS8qIHJlaW5pdGlhbGl6ZSByZW1vdGUgcG9ydCByb2xlcyAqLworCQlyZGF0YS0+aWRzLnJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOworCiAJCS8qCiAJCSAqIEdvIHRocm91Z2ggYWxsIHRoZSBzZXJ2aWNlIHBhcmFtZXRlciBwYWdlcyBhbmQgYnVpbGQKIAkJICogcmVzcG9uc2UuICBJZiBwbGVuIGluZGljYXRlcyBsb25nZXIgU1BQIHRoYW4gc3RhbmRhcmQsCkBAIC0xMTY5LDEyICsxNDA0LDEyIEBACiAJCQkJZmNwX3Bhcm0gPSBudG9obChyc3BwLT5zcHBfcGFyYW1zKTsKIAkJCQlpZiAoZmNwX3Bhcm0gKiBGQ1BfU1BQRl9SRVRSWSkKIAkJCQkJcmRhdGEtPmZsYWdzIHw9IEZDX1JQX0ZMQUdTX1JFVFJZOwotCQkJCXJwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9IEZDX0NPU19DTEFTUzM7CisJCQkJcmRhdGEtPnN1cHBvcnRlZF9jbGFzc2VzID0gRkNfQ09TX0NMQVNTMzsKIAkJCQlpZiAoZmNwX3Bhcm0gJiBGQ1BfU1BQRl9JTklUX0ZDTikKIAkJCQkJcm9sZXMgfD0gRkNfUlBPUlRfUk9MRV9GQ1BfSU5JVElBVE9SOwogCQkJCWlmIChmY3BfcGFybSAmIEZDUF9TUFBGX1RBUkdfRkNOKQogCQkJCQlyb2xlcyB8PSBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQ7Ci0JCQkJcnBvcnQtPnJvbGVzID0gcm9sZXM7CisJCQkJcmRhdGEtPmlkcy5yb2xlcyA9IHJvbGVzOwogCiAJCQkJc3BwLT5zcHBfcGFyYW1zID0KIAkJCQkJaHRvbmwobHBvcnQtPnNlcnZpY2VfcGFyYW1zKTsKQEAgLTEyMDQsOSArMTQzOSwxMCBAQAogCQkgKi8KIAkJc3dpdGNoIChyZGF0YS0+cnBfc3RhdGUpIHsKIAkJY2FzZSBSUE9SVF9TVF9QUkxJOgotCQkJZmNfcnBvcnRfZW50ZXJfcmVhZHkocnBvcnQpOworCQkJZmNfcnBvcnRfZW50ZXJfcmVhZHkocmRhdGEpOwogCQkJYnJlYWs7CiAJCWNhc2UgUlBPUlRfU1RfUkVBRFk6CisJCWNhc2UgUlBPUlRfU1RfQURJU0M6CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpAQCAtMTIxNywxNyArMTQ1MywxNyBAQAogCiAvKioKICAqIGZjX3Jwb3J0X3JlY3ZfcHJsb19yZXEoKSAtIEhhbmRsZSBpbmNvbWluZyBQcm9jZXNzIExvZ291dCAoUFJMTykgcmVxdWVzdAotICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRoYXQgaW5pdGlhdGVkIFBSTE8KKyAqIEByZGF0YTogcHJpdmF0ZSByZW1vdGUgcG9ydCBkYXRhCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIFBSTE8gZXhjaGFuZ2UKICAqIEBmcDogUFJMTyByZXF1ZXN0IGZyYW1lCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKICAqIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfcHJsb19yZXEoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgc3RydWN0IGZjX3NlcSAqc3AsCitzdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3BybG9fcmVxKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSwKKwkJCQkgICBzdHJ1Y3QgZmNfc2VxICpzcCwKIAkJCQkgICBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKIAogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOwpAQCAtMTIzNSwxMyArMTQ3MSw4IEBACiAKIAlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOwogCi0JRkNfUlBPUlRfREJHKHJwb3J0LCAiUmVjZWl2ZWQgUFJMTyByZXF1ZXN0IHdoaWxlIGluIHN0YXRlICVzXG4iLAotCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7Ci0KLQlpZiAocmRhdGEtPnJwX3N0YXRlID09IFJQT1JUX1NUX05PTkUpIHsKLQkJZmNfZnJhbWVfZnJlZShmcCk7Ci0JCXJldHVybjsKLQl9CisJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgUFJMTyByZXF1ZXN0IHdoaWxlIGluIHN0YXRlICVzXG4iLAorCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CiAKIAlyanRfZGF0YS5mcCA9IE5VTEw7CiAJcmp0X2RhdGEucmVhc29uID0gRUxTX1JKVF9VTkFCOwpAQCAtMTI1MiwzNSArMTQ4Myw0NiBAQAogCiAvKioKICAqIGZjX3Jwb3J0X3JlY3ZfbG9nb19yZXEoKSAtIEhhbmRsZSBpbmNvbWluZyBMb2dvdXQgKExPR08pIHJlcXVlc3QKLSAqIEBycG9ydDogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydCB0aGF0IGluaXRpYXRlZCBMT0dPCisgKiBAbHBvcnQ6IGxvY2FsIHBvcnQuCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIExPR08gZXhjaGFuZ2UKICAqIEBmcDogTE9HTyByZXF1ZXN0IGZyYW1lCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKICAqIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfbG9nb19yZXEoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgc3RydWN0IGZjX3NlcSAqc3AsCitzdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X2xvZ29fcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCQkJICAgc3RydWN0IGZjX3NlcSAqc3AsCiAJCQkJICAgc3RydWN0IGZjX2ZyYW1lICpmcCkKIHsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKLQlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7Ci0KLQlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOwotCi0JRkNfUlBPUlRfREJHKHJwb3J0LCAiUmVjZWl2ZWQgTE9HTyByZXF1ZXN0IHdoaWxlIGluIHN0YXRlICVzXG4iLAotCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7Ci0KLQlpZiAocmRhdGEtPnJwX3N0YXRlID09IFJQT1JUX1NUX05PTkUpIHsKLQkJZmNfZnJhbWVfZnJlZShmcCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZGF0YS0+ZXZlbnQgPSBSUE9SVF9FVl9MT0dPOwotCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJwb3J0LCBSUE9SVF9TVF9OT05FKTsKLQlxdWV1ZV93b3JrKHJwb3J0X2V2ZW50X3F1ZXVlLCAmcmRhdGEtPmV2ZW50X3dvcmspOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKKwl1MzIgc2lkOwogCiAJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19BQ0MsIE5VTEwpOworCisJZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKKwlzaWQgPSBudG9oMjQoZmgtPmZoX3NfaWQpOworCisJbXV0ZXhfbG9jaygmbHBvcnQtPmRpc2MuZGlzY19tdXRleCk7CisJcmRhdGEgPSBscG9ydC0+dHQucnBvcnRfbG9va3VwKGxwb3J0LCBzaWQpOworCWlmIChyZGF0YSkgeworCQltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOworCQlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBMT0dPIHJlcXVlc3Qgd2hpbGUgaW4gc3RhdGUgJXNcbiIsCisJCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CisKKwkJLyoKKwkJICogSWYgdGhlIHJlbW90ZSBwb3J0IHdhcyBjcmVhdGVkIGR1ZSB0byBkaXNjb3ZlcnksCisJCSAqIGxvZyBiYWNrIGluLiAgSXQgbWF5IGhhdmUgc2VlbiBhIHN0YWxlIFJTQ04gYWJvdXQgdXMuCisJCSAqLworCQlpZiAocmRhdGEtPnJwX3N0YXRlICE9IFJQT1JUX1NUX0RFTEVURSAmJiByZGF0YS0+ZGlzY19pZCkKKwkJCWZjX3Jwb3J0X2VudGVyX3Bsb2dpKHJkYXRhKTsKKwkJZWxzZQorCQkJZmNfcnBvcnRfZW50ZXJfZGVsZXRlKHJkYXRhLCBSUE9SVF9FVl9MT0dPKTsKKwkJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOworCX0gZWxzZQorCQlGQ19SUE9SVF9JRF9EQkcobHBvcnQsIHNpZCwKKwkJCQkiUmVjZWl2ZWQgTE9HTyBmcm9tIG5vbi1sb2dnZWQtaW4gcG9ydFxuIik7CisJbXV0ZXhfdW5sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKIAlmY19mcmFtZV9mcmVlKGZwKTsKIH0KIApAQCAtMTI5MSw4ICsxNTMzLDExIEBACiAKIGludCBmY19ycG9ydF9pbml0KHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCiB7CisJaWYgKCFscG9ydC0+dHQucnBvcnRfbG9va3VwKQorCQlscG9ydC0+dHQucnBvcnRfbG9va3VwID0gZmNfcnBvcnRfbG9va3VwOworCiAJaWYgKCFscG9ydC0+dHQucnBvcnRfY3JlYXRlKQotCQlscG9ydC0+dHQucnBvcnRfY3JlYXRlID0gZmNfcnBvcnRfcm9ndWVfY3JlYXRlOworCQlscG9ydC0+dHQucnBvcnRfY3JlYXRlID0gZmNfcnBvcnRfY3JlYXRlOwogCiAJaWYgKCFscG9ydC0+dHQucnBvcnRfbG9naW4pCiAJCWxwb3J0LT50dC5ycG9ydF9sb2dpbiA9IGZjX3Jwb3J0X2xvZ2luOwpAQCAtMTMwNiw2ICsxNTUxLDkgQEAKIAlpZiAoIWxwb3J0LT50dC5ycG9ydF9mbHVzaF9xdWV1ZSkKIAkJbHBvcnQtPnR0LnJwb3J0X2ZsdXNoX3F1ZXVlID0gZmNfcnBvcnRfZmx1c2hfcXVldWU7CiAKKwlpZiAoIWxwb3J0LT50dC5ycG9ydF9kZXN0cm95KQorCQlscG9ydC0+dHQucnBvcnRfZGVzdHJveSA9IGZjX3Jwb3J0X2Rlc3Ryb3k7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZmNfcnBvcnRfaW5pdCk7CkBAIC0xMzI3LDggKzE1NzUsOCBAQAogCiB2b2lkIGZjX3Jwb3J0X3Rlcm1pbmF0ZV9pbyhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQogewotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwotCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKKwlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcnAgPSBycG9ydC0+ZGRfZGF0YTsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcnAtPmxvY2FsX3BvcnQ7CiAKIAlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQsIDAsIHJwb3J0LT5wb3J0X2lkKTsKIAlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQsIHJwb3J0LT5wb3J0X2lkLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKaW5kZXggYTc1MWY2Mi4uOGRjNzNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKQEAgLTEwOSwxMiArMTA5LDkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2Nvbm5fcXVldWVfd29yayk7CiAKLXZvaWQKLWlzY3NpX3VwZGF0ZV9jbWRzbihzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IGlzY3NpX25vcGluICpoZHIpCitzdGF0aWMgdm9pZCBfX2lzY3NpX3VwZGF0ZV9jbWRzbihzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkgdWludDMyX3QgZXhwX2NtZHNuLCB1aW50MzJfdCBtYXhfY21kc24pCiB7Ci0JdWludDMyX3QgbWF4X2NtZHNuID0gYmUzMl90b19jcHUoaGRyLT5tYXhfY21kc24pOwotCXVpbnQzMl90IGV4cF9jbWRzbiA9IGJlMzJfdG9fY3B1KGhkci0+ZXhwX2NtZHNuKTsKLQogCS8qCiAJICogc3RhbmRhcmQgc3BlY2lmaWVzIHRoaXMgY2hlY2sgZm9yIHdoZW4gdG8gdXBkYXRlIGV4cGVjdGVkIGFuZAogCSAqIG1heCBzZXF1ZW5jZSBudW1iZXJzCkBAIC0xMzgsNiArMTM1LDEyIEBACiAJCQlpc2NzaV9jb25uX3F1ZXVlX3dvcmsoc2Vzc2lvbi0+bGVhZGNvbm4pOwogCX0KIH0KKwordm9pZCBpc2NzaV91cGRhdGVfY21kc24oc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBpc2NzaV9ub3BpbiAqaGRyKQoreworCV9faXNjc2lfdXBkYXRlX2NtZHNuKHNlc3Npb24sIGJlMzJfdG9fY3B1KGhkci0+ZXhwX2NtZHNuKSwKKwkJCSAgICAgYmUzMl90b19jcHUoaGRyLT5tYXhfY21kc24pKTsKK30KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3VwZGF0ZV9jbWRzbik7CiAKIC8qKgpAQCAtMzAxLDggKzMwNCw2IEBACiAJaGRyLT5mbGFncyA9IElTQ1NJX0FUVFJfU0lNUExFOwogCWludF90b19zY3NpbHVuKHNjLT5kZXZpY2UtPmx1biwgKHN0cnVjdCBzY3NpX2x1biAqKWhkci0+bHVuKTsKIAltZW1jcHkodGFzay0+bHVuLCBoZHItPmx1biwgc2l6ZW9mKHRhc2stPmx1bikpOwotCWhkci0+Y21kc24gPSB0YXNrLT5jbWRzbiA9IGNwdV90b19iZTMyKHNlc3Npb24tPmNtZHNuKTsKLQlzZXNzaW9uLT5jbWRzbisrOwogCWhkci0+ZXhwX3N0YXRzbiA9IGNwdV90b19iZTMyKGNvbm4tPmV4cF9zdGF0c24pOwogCWNtZF9sZW4gPSBzYy0+Y21kX2xlbjsKIAlpZiAoY21kX2xlbiA8IElTQ1NJX0NEQl9TSVpFKQpAQCAtMzg4LDYgKzM4OSw4IEBACiAJCXJldHVybiAtRUlPOwogCiAJdGFzay0+c3RhdGUgPSBJU0NTSV9UQVNLX1JVTk5JTkc7CisJaGRyLT5jbWRzbiA9IHRhc2stPmNtZHNuID0gY3B1X3RvX2JlMzIoc2Vzc2lvbi0+Y21kc24pOworCXNlc3Npb24tPmNtZHNuKys7CiAKIAljb25uLT5zY3NpY21kX3BkdXNfY250Kys7CiAJSVNDU0lfREJHX1NFU1NJT04oc2Vzc2lvbiwgImlzY3NpIHByZXAgWyVzIGNpZCAlZCBzYyAlcCBjZGIgMHgleCAiCkBAIC00OTksNiArNTAyLDMxIEBACiAJX19pc2NzaV9wdXRfdGFzayh0YXNrKTsKIH0KIAorLyoqCisgKiBpc2NzaV9jb21wbGV0ZV9zY3NpX3Rhc2sgLSBmaW5pc2ggc2NzaSB0YXNrIG5vcm1hbGx5CisgKiBAdGFzazogaXNjc2kgdGFzayBmb3Igc2NzaSBjbWQKKyAqIEBleHBfY21kc246IGV4cGVjdGVkIGNtZCBzbiBpbiBjcHUgZm9ybWF0CisgKiBAbWF4X2NtZHNuOiBtYXggY21kIHNuIGluIGNwdSBmb3JtYXQKKyAqCisgKiBUaGlzIGlzIHVzZWQgd2hlbiBkcml2ZXJzIGRvIG5vdCBuZWVkIG9yIGNhbm5vdCBwZXJmb3JtCisgKiBsb3dlciBsZXZlbCBwZHUgcHJvY2Vzc2luZy4KKyAqCisgKiBDYWxsZWQgd2l0aCBzZXNzaW9uIGxvY2sKKyAqLwordm9pZCBpc2NzaV9jb21wbGV0ZV9zY3NpX3Rhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssCisJCQkgICAgICB1aW50MzJfdCBleHBfY21kc24sIHVpbnQzMl90IG1heF9jbWRzbikKK3sKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IHRhc2stPmNvbm47CisKKwlJU0NTSV9EQkdfU0VTU0lPTihjb25uLT5zZXNzaW9uLCAiW2l0dCAweCV4XVxuIiwgdGFzay0+aXR0KTsKKworCWNvbm4tPmxhc3RfcmVjdiA9IGppZmZpZXM7CisJX19pc2NzaV91cGRhdGVfY21kc24oY29ubi0+c2Vzc2lvbiwgZXhwX2NtZHNuLCBtYXhfY21kc24pOworCWlzY3NpX2NvbXBsZXRlX3Rhc2sodGFzaywgSVNDU0lfVEFTS19DT01QTEVURUQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfY29tcGxldGVfc2NzaV90YXNrKTsKKworCiAvKgogICogc2Vzc2lvbiBsb2NrIG11c3QgYmUgaGVsZCBhbmQgaWYgbm90IGNhbGxlZCBmb3IgYSB0YXNrIHRoYXQgaXMKICAqIHN0aWxsIHBlbmRpbmcgb3IgZnJvbSB0aGUgeG1pdCB0aHJlYWQsIHRoZW4geG1pdCB0aHJlYWQgbXVzdApAQCAtODU3LDI3ICs4ODUsMTAyIEBACiAJfQogfQogCitzdGF0aWMgaW50IGlzY3NpX25vcF9vdXRfcnNwKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrLAorCQkJICAgICBzdHJ1Y3QgaXNjc2lfbm9waW4gKm5vcCwgY2hhciAqZGF0YSwgaW50IGRhdGFsZW4pCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSB0YXNrLT5jb25uOworCWludCByYyA9IDA7CisKKwlpZiAoY29ubi0+cGluZ190YXNrICE9IHRhc2spIHsKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub3QgaW4gcmVzcG9uc2UgdG8gb25lIG9mIG91cgorCQkgKiBub3BzIHRoZW4gaXQgbXVzdCBiZSBmcm9tIHVzZXJzcGFjZS4KKwkJICovCisJCWlmIChpc2NzaV9yZWN2X3BkdShjb25uLT5jbHNfY29ubiwgKHN0cnVjdCBpc2NzaV9oZHIgKilub3AsCisJCQkJICAgZGF0YSwgZGF0YWxlbikpCisJCQlyYyA9IElTQ1NJX0VSUl9DT05OX0ZBSUxFRDsKKwl9IGVsc2UKKwkJbW9kX3RpbWVyKCZjb25uLT50cmFuc3BvcnRfdGltZXIsIGppZmZpZXMgKyBjb25uLT5yZWN2X3RpbWVvdXQpOworCWlzY3NpX2NvbXBsZXRlX3Rhc2sodGFzaywgSVNDU0lfVEFTS19DT01QTEVURUQpOworCXJldHVybiByYzsKK30KKwogc3RhdGljIGludCBpc2NzaV9oYW5kbGVfcmVqZWN0KHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIsCiAJCQkgICAgICAgY2hhciAqZGF0YSwgaW50IGRhdGFsZW4pCiB7CiAJc3RydWN0IGlzY3NpX3JlamVjdCAqcmVqZWN0ID0gKHN0cnVjdCBpc2NzaV9yZWplY3QgKiloZHI7CiAJc3RydWN0IGlzY3NpX2hkciByZWplY3RlZF9wZHU7CisJaW50IG9wY29kZSwgcmMgPSAwOwogCiAJY29ubi0+ZXhwX3N0YXRzbiA9IGJlMzJfdG9fY3B1KHJlamVjdC0+c3RhdHNuKSArIDE7CiAKLQlpZiAocmVqZWN0LT5yZWFzb24gPT0gSVNDU0lfUkVBU09OX0RBVEFfRElHRVNUX0VSUk9SKSB7Ci0JCWlmIChudG9oMjQocmVqZWN0LT5kbGVuZ3RoKSA+IGRhdGFsZW4pCi0JCQlyZXR1cm4gSVNDU0lfRVJSX1BST1RPOwotCi0JCWlmIChudG9oMjQocmVqZWN0LT5kbGVuZ3RoKSA+PSBzaXplb2Yoc3RydWN0IGlzY3NpX2hkcikpIHsKLQkJCW1lbWNweSgmcmVqZWN0ZWRfcGR1LCBkYXRhLCBzaXplb2Yoc3RydWN0IGlzY3NpX2hkcikpOwotCQkJaXNjc2lfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sCi0JCQkJCSAgInBkdSAob3AgMHgleCkgcmVqZWN0ZWQgIgotCQkJCQkgICJkdWUgdG8gRGF0YURpZ2VzdCBlcnJvci5cbiIsCi0JCQkJCSAgcmVqZWN0ZWRfcGR1Lm9wY29kZSk7Ci0JCX0KKwlpZiAobnRvaDI0KHJlamVjdC0+ZGxlbmd0aCkgPiBkYXRhbGVuIHx8CisJICAgIG50b2gyNChyZWplY3QtPmRsZW5ndGgpIDwgc2l6ZW9mKHN0cnVjdCBpc2NzaV9oZHIpKSB7CisJCWlzY3NpX2Nvbm5fcHJpbnRrKEtFUk5fRVJSLCBjb25uLCAiQ2Fubm90IGhhbmRsZSByZWplY3RlZCAiCisJCQkJICAicGR1LiBJbnZhbGlkIGRhdGEgbGVuZ3RoIChwZHUgZGxlbmd0aCAiCisJCQkJICAiJXUsIGRhdGFsZW4gJWRcbiIsIG50b2gyNChyZWplY3QtPmRsZW5ndGgpLAorCQkJCSAgZGF0YWxlbik7CisJCXJldHVybiBJU0NTSV9FUlJfUFJPVE87CiAJfQotCXJldHVybiAwOworCW1lbWNweSgmcmVqZWN0ZWRfcGR1LCBkYXRhLCBzaXplb2Yoc3RydWN0IGlzY3NpX2hkcikpOworCW9wY29kZSA9IHJlamVjdGVkX3BkdS5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSzsKKworCXN3aXRjaCAocmVqZWN0LT5yZWFzb24pIHsKKwljYXNlIElTQ1NJX1JFQVNPTl9EQVRBX0RJR0VTVF9FUlJPUjoKKwkJaXNjc2lfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sCisJCQkJICAicGR1IChvcCAweCV4IGl0dCAweCV4KSByZWplY3RlZCAiCisJCQkJICAiZHVlIHRvIERhdGFEaWdlc3QgZXJyb3IuXG4iLAorCQkJCSAgcmVqZWN0ZWRfcGR1Lml0dCwgb3Bjb2RlKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9SRUFTT05fSU1NX0NNRF9SRUpFQ1Q6CisJCWlzY3NpX2Nvbm5fcHJpbnRrKEtFUk5fRVJSLCBjb25uLAorCQkJCSAgInBkdSAob3AgMHgleCBpdHQgMHgleCkgcmVqZWN0ZWQuIFRvbyBtYW55ICIKKwkJCQkgICJpbW1lZGlhdGUgY29tbWFuZHMuXG4iLAorCQkJCSAgcmVqZWN0ZWRfcGR1Lml0dCwgb3Bjb2RlKTsKKwkJLyoKKwkJICogV2Ugb25seSBzZW5kIG9uZSBUTUYgYXQgYSB0aW1lIHNvIGlmIHRoZSB0YXJnZXQgY291bGQgbm90CisJCSAqIGhhbmRsZSBpdCwgdGhlbiBpdCBzaG91bGQgZ2V0IGZpeGVkIChSRkMgbWFuZGF0ZXMgdGhhdAorCQkgKiBhIHRhcmdldCBjYW4gaGFuZGxlIG9uZSBpbW1lZGlhdGUgVE1GIHBlciBjb25uKS4KKwkJICoKKwkJICogRm9yIG5vcHMtb3V0cywgd2UgY291bGQgaGF2ZSBzZW50IG1vcmUgdGhhbiBvbmUgaWYKKwkJICogdGhlIHRhcmdldCBpcyBzZW5kaW5nIHVzIGxvdHMgb2Ygbm9wLWlucworCQkgKi8KKwkJaWYgKG9wY29kZSAhPSBJU0NTSV9PUF9OT09QX09VVCkKKwkJCXJldHVybiAwOworCisJCSBpZiAocmVqZWN0ZWRfcGR1Lml0dCA9PSBjcHVfdG9fYmUzMihJU0NTSV9SRVNFUlZFRF9UQUcpKQorCQkJLyoKKwkJCSAqIG5vcC1vdXQgaW4gcmVzcG9uc2UgdG8gdGFyZ2V0J3Mgbm9wLW91dCByZWplY3RlZC4KKwkJCSAqIEp1c3QgcmVzZW5kLgorCQkJICovCisJCQlpc2NzaV9zZW5kX25vcG91dChjb25uLAorCQkJCQkgIChzdHJ1Y3QgaXNjc2lfbm9waW4qKSZyZWplY3RlZF9wZHUpOworCQllbHNlIHsKKwkJCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrOworCQkJLyoKKwkJCSAqIE91ciBub3AgYXMgcGluZyBnb3QgZHJvcHBlZC4gV2Uga25vdyB0aGUgdGFyZ2V0CisJCQkgKiBhbmQgdHJhbnNwb3J0IGFyZSBvayBzbyBqdXN0IGNsZWFuIHVwCisJCQkgKi8KKwkJCXRhc2sgPSBpc2NzaV9pdHRfdG9fdGFzayhjb25uLCByZWplY3RlZF9wZHUuaXR0KTsKKwkJCWlmICghdGFzaykgeworCQkJCWlzY3NpX2Nvbm5fcHJpbnRrKEtFUk5fRVJSLCBjb25uLAorCQkJCQkJICJJbnZhbGlkIHBkdSByZWplY3QuIENvdWxkICIKKwkJCQkJCSAibm90IGxvb2t1cCByZWplY3RlZCB0YXNrLlxuIik7CisJCQkJcmMgPSBJU0NTSV9FUlJfQkFEX0lUVDsKKwkJCX0gZWxzZQorCQkJCXJjID0gaXNjc2lfbm9wX291dF9yc3AodGFzaywKKwkJCQkJKHN0cnVjdCBpc2NzaV9ub3BpbiopJnJlamVjdGVkX3BkdSwKKwkJCQkJTlVMTCwgMCk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaXNjc2lfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sCisJCQkJICAicGR1IChvcCAweCV4IGl0dCAweCV4KSByZWplY3RlZC4gUmVhc29uICIKKwkJCQkgICJjb2RlIDB4JXhcbiIsIHJlamVjdGVkX3BkdS5pdHQsCisJCQkJICByZWplY3RlZF9wZHUub3Bjb2RlLCByZWplY3QtPnJlYXNvbik7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtMTAzOCwxNSArMTE0MSw4IEBACiAJCX0KIAkJY29ubi0+ZXhwX3N0YXRzbiA9IGJlMzJfdG9fY3B1KGhkci0+c3RhdHNuKSArIDE7CiAKLQkJaWYgKGNvbm4tPnBpbmdfdGFzayAhPSB0YXNrKQotCQkJLyoKLQkJCSAqIElmIHRoaXMgaXMgbm90IGluIHJlc3BvbnNlIHRvIG9uZSBvZiBvdXIKLQkJCSAqIG5vcHMgdGhlbiBpdCBtdXN0IGJlIGZyb20gdXNlcnNwYWNlLgotCQkJICovCi0JCQlnb3RvIHJlY3ZfcGR1OwotCi0JCW1vZF90aW1lcigmY29ubi0+dHJhbnNwb3J0X3RpbWVyLCBqaWZmaWVzICsgY29ubi0+cmVjdl90aW1lb3V0KTsKLQkJaXNjc2lfY29tcGxldGVfdGFzayh0YXNrLCBJU0NTSV9UQVNLX0NPTVBMRVRFRCk7CisJCXJjID0gaXNjc2lfbm9wX291dF9yc3AodGFzaywgKHN0cnVjdCBpc2NzaV9ub3BpbiopaGRyLAorCQkJCSAgICAgICBkYXRhLCBkYXRhbGVuKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmMgPSBJU0NTSV9FUlJfQkFEX09QQ09ERTsKQEAgLTEyMTIsNiArMTMwOCw5IEBACiAJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2sgPSBjb25uLT50YXNrOwogCWludCByYzsKIAorCWlmICh0ZXN0X2JpdChJU0NTSV9TVVNQRU5EX0JJVCwgJmNvbm4tPnN1c3BlbmRfdHgpKQorCQlyZXR1cm4gLUVOT0RBVEE7CisKIAlfX2lzY3NpX2dldF90YXNrKHRhc2spOwogCXNwaW5fdW5sb2NrX2JoKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKIAlyYyA9IGNvbm4tPnNlc3Npb24tPnR0LT54bWl0X3Rhc2sodGFzayk7CkBAIC0xMjYxLDcgKzEzNjAsNyBAQAogCWludCByYyA9IDA7CiAKIAlzcGluX2xvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOwotCWlmICh1bmxpa2VseShjb25uLT5zdXNwZW5kX3R4KSkgeworCWlmICh0ZXN0X2JpdChJU0NTSV9TVVNQRU5EX0JJVCwgJmNvbm4tPnN1c3BlbmRfdHgpKSB7CiAJCUlTQ1NJX0RCR19TRVNTSU9OKGNvbm4tPnNlc3Npb24sICJUeCBzdXNwZW5kZWQhXG4iKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOwogCQlyZXR1cm4gLUVOT0RBVEE7CkBAIC0xMjcwLDcgKzEzNjksNyBAQAogCWlmIChjb25uLT50YXNrKSB7CiAJCXJjID0gaXNjc2lfeG1pdF90YXNrKGNvbm4pOwogCSAgICAgICAgaWYgKHJjKQotCQkgICAgICAgIGdvdG8gYWdhaW47CisJCSAgICAgICAgZ290byBkb25lOwogCX0KIAogCS8qCkBAIC0xMjkwLDcgKzEzODksNyBAQAogCQl9CiAJCXJjID0gaXNjc2lfeG1pdF90YXNrKGNvbm4pOwogCQlpZiAocmMpCi0JCQlnb3RvIGFnYWluOworCQkJZ290byBkb25lOwogCX0KIAogCS8qIHByb2Nlc3MgcGVuZGluZyBjb21tYW5kIHF1ZXVlICovCkBAIC0xMzExLDE0ICsxNDEwLDE0IEBACiAJCQkJbGlzdF9hZGRfdGFpbCgmY29ubi0+dGFzay0+cnVubmluZywKIAkJCQkJICAgICAgJmNvbm4tPmNtZHF1ZXVlKTsKIAkJCQljb25uLT50YXNrID0gTlVMTDsKLQkJCQlnb3RvIGFnYWluOworCQkJCWdvdG8gZG9uZTsKIAkJCX0gZWxzZQogCQkJCWZhaWxfc2NzaV90YXNrKGNvbm4tPnRhc2ssIERJRF9BQk9SVCk7CiAJCQljb250aW51ZTsKIAkJfQogCQlyYyA9IGlzY3NpX3htaXRfdGFzayhjb25uKTsKIAkJaWYgKHJjKQotCQkJZ290byBhZ2FpbjsKKwkJCWdvdG8gZG9uZTsKIAkJLyoKIAkJICogd2UgY291bGQgY29udGludW91c2x5IGdldCBuZXcgdGFzayByZXF1ZXN0cyBzbwogCQkgKiB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBtZ210IHF1ZXVlIGZvciBub3BzIHRoYXQgbmVlZCB0bwpAQCAtMTM0NCwxNiArMTQ0MywxNCBAQAogCQljb25uLT50YXNrLT5zdGF0ZSA9IElTQ1NJX1RBU0tfUlVOTklORzsKIAkJcmMgPSBpc2NzaV94bWl0X3Rhc2soY29ubik7CiAJCWlmIChyYykKLQkJCWdvdG8gYWdhaW47CisJCQlnb3RvIGRvbmU7CiAJCWlmICghbGlzdF9lbXB0eSgmY29ubi0+bWdtdHF1ZXVlKSkKIAkJCWdvdG8gY2hlY2tfbWdtdDsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOwogCXJldHVybiAtRU5PREFUQTsKIAotYWdhaW46Ci0JaWYgKHVubGlrZWx5KGNvbm4tPnN1c3BlbmRfdHgpKQotCQlyYyA9IC1FTk9EQVRBOworZG9uZToKIAlzcGluX3VubG9ja19iaCgmY29ubi0+c2Vzc2lvbi0+bG9jayk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMTQ3NCw2ICsxNTcxLDEyIEBACiAJCWdvdG8gZmF1bHQ7CiAJfQogCisJaWYgKHRlc3RfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF90eCkpIHsKKwkJcmVhc29uID0gRkFJTFVSRV9TRVNTSU9OX0lOX1JFQ09WRVJZOworCQlzYy0+cmVzdWx0ID0gRElEX1JFUVVFVUU7CisJCWdvdG8gZmF1bHQ7CisJfQorCiAJaWYgKGlzY3NpX2NoZWNrX2NtZHNuX3dpbmRvd19jbG9zZWQoY29ubikpIHsKIAkJcmVhc29uID0gRkFJTFVSRV9XSU5ET1dfQ0xPU0VEOwogCQlnb3RvIHJlamVjdDsKQEAgLTE0OTcsNiArMTYwMCw3IEBACiAJCQl9CiAJCX0KIAkJaWYgKHNlc3Npb24tPnR0LT54bWl0X3Rhc2sodGFzaykpIHsKKwkJCXNlc3Npb24tPmNtZHNuLS07CiAJCQlyZWFzb24gPSBGQUlMVVJFX1NFU1NJT05fTk9UX1JFQURZOwogCQkJZ290byBwcmVwZF9yZWplY3Q7CiAJCX0KQEAgLTE3MTIsNiArMTgxNiwzMyBAQAogCX0KIH0KIAorLyoqCisgKiBpc2NzaV9zdXNwZW5kX3F1ZXVlIC0gc3VzcGVuZCBpc2NzaV9xdWV1ZWNvbW1hbmQKKyAqIEBjb25uOiBpc2NzaSBjb25uIHRvIHN0b3AgcXVldWVpbmcgSU8gb24KKyAqCisgKiBUaGlzIGdyYWJzIHRoZSBzZXNzaW9uIGxvY2sgdG8gbWFrZSBzdXJlIG5vIG9uZSBpcyBpbgorICogeG1pdF90YXNrL3F1ZXVlY29tbWFuZCwgYW5kIHRoZW4gc2V0cyBzdXNwZW5kIHRvIHByZXZlbnQKKyAqIG5ldyBjb21tYW5kcyBmcm9tIGJlaW5nIHF1ZXVlZC4gVGhpcyBvbmx5IG5lZWRzIHRvIGJlIGNhbGxlZAorICogYnkgb2ZmbG9hZCBkcml2ZXJzIHRoYXQgbmVlZCB0byBzeW5jIGEgcGF0aCBsaWtlIGVwIGRpc2Nvbm5lY3QKKyAqIHdpdGggdGhlIGlzY3NpX3F1ZXVlY29tbWFuZC94bWl0X3Rhc2suIFRvIHN0YXJ0IElPIGFnYWluIGxpYmlzY3NpCisgKiB3aWxsIGNhbGwgaXNjc2lfc3RhcnRfdHggYW5kIGlzY3NpX3VuYmxvY2tfc2Vzc2lvbiB3aGVuIGluIEZGUC4KKyAqLwordm9pZCBpc2NzaV9zdXNwZW5kX3F1ZXVlKHN0cnVjdCBpc2NzaV9jb25uICpjb25uKQoreworCXNwaW5fbG9ja19iaCgmY29ubi0+c2Vzc2lvbi0+bG9jayk7CisJc2V0X2JpdChJU0NTSV9TVVNQRU5EX0JJVCwgJmNvbm4tPnN1c3BlbmRfdHgpOworCXNwaW5fdW5sb2NrX2JoKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3N1c3BlbmRfcXVldWUpOworCisvKioKKyAqIGlzY3NpX3N1c3BlbmRfdHggLSBzdXNwZW5kIGlzY3NpX2RhdGFfeG1pdAorICogQGNvbm46IGlzY3NpIGNvbm4gdHAgc3RvcCBwcm9jZXNzaW5nIElPIG9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgc3VzcGVuZCBiaXQgdG8gcHJldmVudCBpc2NzaV9kYXRhX3htaXQKKyAqIGZyb20gc2VuZGluZyBuZXcgSU8sIGFuZCBpZiB3b3JrIGlzIHF1ZXVlZCBvbiB0aGUgeG1pdCB0aHJlYWQKKyAqIGl0IHdpbGwgd2FpdCBmb3IgaXQgdG8gYmUgY29tcGxldGVkLgorICovCiB2b2lkIGlzY3NpX3N1c3BlbmRfdHgoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjb25uLT5zZXNzaW9uLT5ob3N0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNycC5jIGIvZHJpdmVycy9zY3NpL2xpYnNycC5jCmluZGV4IDI3NDJhZTguLjlhZDM4ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJzcnAuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic3JwLmMKQEAgLTEyNCw2ICsxMjQsNyBAQAogCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIHJpbmdbaV0tPmJ1ZiwgcmluZ1tpXS0+ZG1hKTsKIAkJa2ZyZWUocmluZ1tpXSk7CiAJfQorCWtmcmVlKHJpbmcpOwogfQogCiBpbnQgc3JwX3RhcmdldF9hbGxvYyhzdHJ1Y3Qgc3JwX3RhcmdldCAqdGFyZ2V0LCBzdHJ1Y3QgZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9scGZjL01ha2VmaWxlCmluZGV4IDFjMjg2NzAuLmFkMDVkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL01ha2VmaWxlCkBAIC0yOCw0ICsyOCw0IEBACiAKIGxwZmMtb2JqcyA6PSBscGZjX21lbS5vIGxwZmNfc2xpLm8gbHBmY19jdC5vIGxwZmNfZWxzLm8gbHBmY19oYmFkaXNjLm8JXAogCWxwZmNfaW5pdC5vIGxwZmNfbWJveC5vIGxwZmNfbnBvcnRkaXNjLm8gbHBmY19zY3NpLm8gbHBmY19hdHRyLm8gXAotCWxwZmNfdnBvcnQubyBscGZjX2RlYnVnZnMubworCWxwZmNfdnBvcnQubyBscGZjX2RlYnVnZnMubyBscGZjX2JzZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKaW5kZXggMTg3N2Q5OC4uYWExMGY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaApAQCAtMzEyLDYgKzMxMiw3IEBACiAjZGVmaW5lIEZDX0JZUEFTU0VEX01PREUgICAgICAgIDB4MjAwMDAJIC8qIE5Qb3J0IGlzIGluIGJ5cGFzc2VkIG1vZGUgKi8KICNkZWZpbmUgRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSQkweDgwMDAwICAvKiBOZWVkcyB0byBoYXZlIGl0cyB2cGkgcmVnaXN0ZXJlZCAqLwogI2RlZmluZSBGQ19SU0NOX0RFRkVSUkVECTB4MTAwMDAwIC8qIEEgZGVmZXJyZWQgUlNDTiBiZWluZyBwcm9jZXNzZWQgKi8KKyNkZWZpbmUgRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEkgMHgyMDAwMDAgLyogTmVlZCB0byBJTklUX1ZQSSBiZWZvcmUgRkRJU0MgKi8KIAogCXVpbnQzMl90IGN0X2ZsYWdzOwogI2RlZmluZSBGQ19DVF9SRkZfSUQJCTB4MQkgLyogUkZGX0lEIGFjY2VwdGVkIGJ5IHN3aXRjaCAqLwpAQCAtNDQwLDYgKzQ0MSwxMiBAQAogCU1TSVgsCiB9OwogCitzdHJ1Y3QgdW5zb2xfcmN2X2N0X2N0eCB7CisJdWludDMyX3QgY3R4dF9pZDsKKwl1aW50MzJfdCBTSUQ7CisJdWludDMyX3Qgb3hpZDsKK307CisKIHN0cnVjdCBscGZjX2hiYSB7CiAJLyogU0NTSSBpbnRlcmZhY2UgZnVuY3Rpb24ganVtcCB0YWJsZSBlbnRyaWVzICovCiAJaW50ICgqbHBmY19uZXdfc2NzaV9idWYpCkBAIC01MjUsNiArNTMyLDggQEAKICNkZWZpbmUgRkNQX1hSSV9BQk9SVF9FVkVOVAkweDIwCiAjZGVmaW5lIEVMU19YUklfQUJPUlRfRVZFTlQJMHg0MAogI2RlZmluZSBBU1lOQ19FVkVOVAkJMHg4MAorI2RlZmluZSBMSU5LX0RJU0FCTEVECQkweDEwMCAvKiBMaW5rIGRpc2FibGVkIGJ5IHVzZXIgKi8KKyNkZWZpbmUgRkNGX0RJU0NfSU5QUk9HUkVTUwkweDIwMCAvKiBGQ0YgZGlzY292ZXJ5IGluIHByb2dyZXNzICovCiAJc3RydWN0IGxwZmNfZG1hYnVmIHNsaW0ycDsKIAogCU1BSUxCT1hfdCAqbWJveDsKQEAgLTYxNiw2ICs2MjUsOCBAQAogCXVpbnQzMl90IGhicV9jb3VudDsJICAgICAgICAvKiBDb3VudCBvZiBjb25maWd1cmVkIEhCUXMgKi8KIAlzdHJ1Y3QgaGJxX3MgaGJxc1tMUEZDX01BWF9IQlFTXTsgLyogbG9jYWwgY29weSBvZiBoYnEgaW5kaWNpZXMgICovCiAKKwl1aW50MzJfdCBmY3BfcWlkeDsJCS8qIG5leHQgd29yayBxdWV1ZSB0byBwb3N0IHdvcmsgdG8gKi8KKwogCXVuc2lnbmVkIGxvbmcgcGNpX2JhcjBfbWFwOyAgICAgLyogUGh5c2ljYWwgYWRkcmVzcyBmb3IgUENJIEJBUjAgKi8KIAl1bnNpZ25lZCBsb25nIHBjaV9iYXIxX21hcDsgICAgIC8qIFBoeXNpY2FsIGFkZHJlc3MgZm9yIFBDSSBCQVIxICovCiAJdW5zaWduZWQgbG9uZyBwY2lfYmFyMl9tYXA7ICAgICAvKiBQaHlzaWNhbCBhZGRyZXNzIGZvciBQQ0kgQkFSMiAqLwpAQCAtNjgyLDYgKzY5Myw3IEBACiAJc3RydWN0IHBjaV9wb29sICpscGZjX21idWZfcG9vbDsKIAlzdHJ1Y3QgcGNpX3Bvb2wgKmxwZmNfaHJiX3Bvb2w7CS8qIGhlYWRlciByZWNlaXZlIGJ1ZmZlciBwb29sICovCiAJc3RydWN0IHBjaV9wb29sICpscGZjX2RyYl9wb29sOyAvKiBkYXRhIHJlY2VpdmUgYnVmZmVyIHBvb2wgKi8KKwlzdHJ1Y3QgcGNpX3Bvb2wgKmxwZmNfaGJxX3Bvb2w7CS8qIFNMSTMgaGJxIGJ1ZmZlciBwb29sICovCiAJc3RydWN0IGxwZmNfZG1hX3Bvb2wgbHBmY19tYnVmX3NhZmV0eV9wb29sOwogCiAJbWVtcG9vbF90ICptYm94X21lbV9wb29sOwpAQCAtNzYzLDExICs3NzUsMTggQEAKIC8qIE1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyB0aGF0IGNhbiBiZSBvdXRzdGFuZGluZyBhdCBhbnkgdGltZSovCiAjZGVmaW5lIExQRkNfTUFYX0VWVF9DT1VOVCA1MTIKIAlhdG9taWNfdCBmYXN0X2V2ZW50X2NvdW50OworCXVpbnQzMl90IGZjb2VfZXZlbnR0YWc7CisJdWludDMyX3QgZmNvZV9ldmVudHRhZ19hdF9mY2Zfc2NhbjsKIAlzdHJ1Y3QgbHBmY19mY2YgZmNmOwogCXVpbnQ4X3QgZmNfbWFwWzNdOwogCXVpbnQ4X3QgdmFsaWRfdmxhbjsKIAl1aW50MTZfdCB2bGFuX2lkOwogCXN0cnVjdCBsaXN0X2hlYWQgZmNmX2Nvbm5fcmVjX2xpc3Q7CisKKwlzdHJ1Y3QgbXV0ZXggY3RfZXZlbnRfbXV0ZXg7IC8qIHN5bmNocm9uaXplIGFjY2VzcyB0byBjdF9ldl93YWl0ZXJzICovCisJc3RydWN0IGxpc3RfaGVhZCBjdF9ldl93YWl0ZXJzOworCXN0cnVjdCB1bnNvbF9yY3ZfY3RfY3R4IGN0X2N0eFs2NF07CisJdWludDMyX3QgY3R4X2lkeDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IFNjc2lfSG9zdCAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCmluZGV4IGZjMDdiZTUuLmUxYTMwYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCkBAIC0zOTQsNyArMzk0LDEyIEBACiAJY2FzZSBMUEZDX0lOSVRfTUJYX0NNRFM6CiAJY2FzZSBMUEZDX0xJTktfRE9XTjoKIAljYXNlIExQRkNfSEJBX0VSUk9SOgotCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUtbGVuLCAiTGluayBEb3duXG4iKTsKKwkJaWYgKHBoYmEtPmhiYV9mbGFnICYgTElOS19ESVNBQkxFRCkKKwkJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRS1sZW4sCisJCQkJIkxpbmsgRG93biAtIFVzZXIgZGlzYWJsZWRcbiIpOworCQllbHNlCisJCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUtbGVuLAorCQkJCSJMaW5rIERvd25cbiIpOwogCQlicmVhazsKIAljYXNlIExQRkNfTElOS19VUDoKIAljYXNlIExQRkNfQ0xFQVJfTEE6CkBAIC00MTI3LDYgKzQxMzIsOSBAQAogCS52cG9ydF9kaXNhYmxlID0gbHBmY192cG9ydF9kaXNhYmxlLAogCiAJLnNldF92cG9ydF9zeW1ib2xpY19uYW1lID0gbHBmY19zZXRfdnBvcnRfc3ltYm9saWNfbmFtZSwKKworCS5ic2dfcmVxdWVzdCA9IGxwZmNfYnNnX3JlcXVlc3QsCisJLmJzZ190aW1lb3V0ID0gbHBmY19ic2dfdGltZW91dCwKIH07CiAKIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSBscGZjX3Zwb3J0X3RyYW5zcG9ydF9mdW5jdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTZiZjVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYwpAQCAtMCwwICsxLDkwNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCisgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICoKKyAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCisgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAqCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgICAgICAgKgorICogUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLiAqCisgKiBBTEwgRVhQUkVTUyBPUiBJTVBMSUVEIENPTkRJVElPTlMsIFJFUFJFU0VOVEFUSU9OUyBBTkQgICAgICAgICAgKgorICogV0FSUkFOVElFUywgSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwgICoKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBOT04tSU5GUklOR0VNRU5ULCBBUkUgICAgICAqCisgKiBESVNDTEFJTUVELCBFWENFUFQgVE8gVEhFIEVYVEVOVCBUSEFUIFNVQ0ggRElTQ0xBSU1FUlMgQVJFIEhFTEQgKgorICogVE8gQkUgTEVHQUxMWSBJTlZBTElELiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgICoKKyAqIG1vcmUgZGV0YWlscywgYSBjb3B5IG9mIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZSBDT1BZSU5HICAqCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfZmMuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfYnNnX2ZjLmg+CisKKyNpbmNsdWRlICJscGZjX2h3NC5oIgorI2luY2x1ZGUgImxwZmNfaHcuaCIKKyNpbmNsdWRlICJscGZjX3NsaS5oIgorI2luY2x1ZGUgImxwZmNfc2xpNC5oIgorI2luY2x1ZGUgImxwZmNfbmwuaCIKKyNpbmNsdWRlICJscGZjX2Rpc2MuaCIKKyNpbmNsdWRlICJscGZjX3Njc2kuaCIKKyNpbmNsdWRlICJscGZjLmgiCisjaW5jbHVkZSAibHBmY19sb2dtc2cuaCIKKyNpbmNsdWRlICJscGZjX2NydG4uaCIKKyNpbmNsdWRlICJscGZjX3Zwb3J0LmgiCisjaW5jbHVkZSAibHBmY192ZXJzaW9uLmgiCisKKy8qKgorICogbHBmY19ic2dfcnBvcnRfY3QgLSBzZW5kIGEgQ1QgY29tbWFuZCBmcm9tIGEgYnNnIHJlcXVlc3QKKyAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCisgKi8KK3N0YXRpYyBpbnQKK2xwZmNfYnNnX3Jwb3J0X2N0KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBqb2ItPnNob3N0OworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhID0gam9iLT5ycG9ydC0+ZGRfZGF0YTsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IHJkYXRhLT5wbm9kZTsKKwlzdHJ1Y3QgdWxwX2JkZTY0ICpicGwgPSBOVUxMOworCXVpbnQzMl90IHRpbWVvdXQ7CisJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYnEgPSBOVUxMOworCUlPQ0JfdCAqY21kOworCUlPQ0JfdCAqcnNwOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYm1wID0gTlVMTDsKKwlpbnQgcmVxdWVzdF9uc2VnOworCWludCByZXBseV9uc2VnOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlbCA9IE5VTEw7CisJaW50IG51bWJkZTsKKwlkbWFfYWRkcl90IGJ1c2FkZHI7CisJaW50IHJjID0gMDsKKworCS8qIGluIGNhc2Ugbm8gZGF0YSBpcyB0cmFuc2ZlcnJlZCAqLworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisKKwlpZiAoIWxwZmNfbmxwX2dldChuZGxwKSkgeworCQlqb2ItPnJlcGx5LT5yZXN1bHQgPSAtRU5PREVWOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfRUxTX1NORF9NQVNLKSB7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX25kbHBfZXhpdDsKKwl9CisKKwlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCWNtZGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCWlmICghY21kaW9jYnEpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCWdvdG8gZnJlZV9uZGxwX2V4aXQ7CisJfQorCWNtZCA9ICZjbWRpb2NicS0+aW9jYjsKKworCXJzcGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCWlmICghcnNwaW9jYnEpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfY21kaW9jYnE7CisJfQorCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKworCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKKworCWJtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZiksIEdGUF9LRVJORUwpOworCWlmICghYm1wKSB7CisJCXJjID0gLUVOT01FTTsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJZ290byBmcmVlX3JzcGlvY2JxOworCX0KKworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJYm1wLT52aXJ0ID0gbHBmY19tYnVmX2FsbG9jKHBoYmEsIDAsICZibXAtPnBoeXMpOworCWlmICghYm1wLT52aXJ0KSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2JtcDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJmJtcC0+bGlzdCk7CisJYnBsID0gKHN0cnVjdCB1bHBfYmRlNjQgKikgYm1wLT52aXJ0OworCisJcmVxdWVzdF9uc2VnID0gcGNpX21hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCQkJICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCWZvcl9lYWNoX3NnKGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsIHNnZWwsIHJlcXVlc3RfbnNlZywgbnVtYmRlKSB7CisJCWJ1c2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZ2VsKTsKKwkJYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjQ7CisJCWJwbC0+dHVzLmYuYmRlU2l6ZSA9IHNnX2RtYV9sZW4oc2dlbCk7CisJCWJwbC0+dHVzLncgPSBjcHVfdG9fbGUzMihicGwtPnR1cy53KTsKKwkJYnBsLT5hZGRyTG93ID0gY3B1X3RvX2xlMzIocHV0UGFkZHJMb3coYnVzYWRkcikpOworCQlicGwtPmFkZHJIaWdoID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKGJ1c2FkZHIpKTsKKwkJYnBsKys7CisJfQorCisJcmVwbHlfbnNlZyA9IHBjaV9tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJCQlqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCWZvcl9lYWNoX3NnKGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LCBzZ2VsLCByZXBseV9uc2VnLCBudW1iZGUpIHsKKwkJYnVzYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnZWwpOworCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NEk7CisJCWJwbC0+dHVzLmYuYmRlU2l6ZSA9IHNnX2RtYV9sZW4oc2dlbCk7CisJCWJwbC0+dHVzLncgPSBjcHVfdG9fbGUzMihicGwtPnR1cy53KTsKKwkJYnBsLT5hZGRyTG93ID0gY3B1X3RvX2xlMzIocHV0UGFkZHJMb3coYnVzYWRkcikpOworCQlicGwtPmFkZHJIaWdoID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKGJ1c2FkZHIpKTsKKwkJYnBsKys7CisJfQorCisJY21kLT51bi5nZW5yZXE2NC5iZGwudWxwSW9UYWczMiA9IDA7CisJY21kLT51bi5nZW5yZXE2NC5iZGwuYWRkckhpZ2ggPSBwdXRQYWRkckhpZ2goYm1wLT5waHlzKTsKKwljbWQtPnVuLmdlbnJlcTY0LmJkbC5hZGRyTG93ID0gcHV0UGFkZHJMb3coYm1wLT5waHlzKTsKKwljbWQtPnVuLmdlbnJlcTY0LmJkbC5iZGVGbGFncyA9IEJVRkZfVFlQRV9CTFBfNjQ7CisJY21kLT51bi5nZW5yZXE2NC5iZGwuYmRlU2l6ZSA9CisJCShyZXF1ZXN0X25zZWcgKyByZXBseV9uc2VnKSAqIHNpemVvZihzdHJ1Y3QgdWxwX2JkZTY0KTsKKwljbWQtPnVscENvbW1hbmQgPSBDTURfR0VOX1JFUVVFU1Q2NF9DUjsKKwljbWQtPnVuLmdlbnJlcTY0Lnc1Lmhjc3cuRmN0bCA9IChTSSB8IExBKTsKKwljbWQtPnVuLmdlbnJlcTY0Lnc1Lmhjc3cuRGZjdGwgPSAwOworCWNtZC0+dW4uZ2VucmVxNjQudzUuaGNzdy5SY3RsID0gRkNfVU5TT0xfQ1RMOworCWNtZC0+dW4uZ2VucmVxNjQudzUuaGNzdy5UeXBlID0gRkNfQ09NTU9OX1RSQU5TUE9SVF9VTFA7CisJY21kLT51bHBCZGVDb3VudCA9IDE7CisJY21kLT51bHBMZSA9IDE7CisJY21kLT51bHBDbGFzcyA9IENMQVNTMzsKKwljbWQtPnVscENvbnRleHQgPSBuZGxwLT5ubHBfcnBpOworCWNtZC0+dWxwT3duZXIgPSBPV05fQ0hJUDsKKwljbWRpb2NicS0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKwljbWRpb2NicS0+Y29udGV4dDEgPSBOVUxMOworCWNtZGlvY2JxLT5jb250ZXh0MiA9IE5VTEw7CisJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX0xJQkRGQzsKKworCXRpbWVvdXQgPSBwaGJhLT5mY19yYXRvdiAqIDI7CisJam9iLT5kZF9kYXRhID0gY21kaW9jYnE7CisKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChwaGJhLCBMUEZDX0VMU19SSU5HLCBjbWRpb2NicSwgcnNwaW9jYnEsCisJCQkJCXRpbWVvdXQgKyBMUEZDX0RSVlJfVElNRU9VVCk7CisKKwlpZiAocmMgIT0gSU9DQl9USU1FRE9VVCkgeworCQlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkJICAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCQlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJCSAgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKwl9CisKKwlpZiAocmMgPT0gSU9DQl9USU1FRE9VVCkgeworCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIHJzcGlvY2JxKTsKKwkJcmMgPSAtRUFDQ0VTOworCQlnb3RvIGZyZWVfbmRscF9leGl0OworCX0KKworCWlmIChyYyAhPSBJT0NCX1NVQ0NFU1MpIHsKKwkJcmMgPSAtRUFDQ0VTOworCQlnb3RvIGZyZWVfb3V0ZG1wOworCX0KKworCWlmIChyc3AtPnVscFN0YXR1cykgeworCQlpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgeworCQkJc3dpdGNoIChyc3AtPnVuLnVscFdvcmRbNF0gJiAweGZmKSB7CisJCQljYXNlIElPRVJSX1NFUVVFTkNFX1RJTUVPVVQ6CisJCQkJcmMgPSAtRVRJTUVET1VUOworCQkJCWJyZWFrOworCQkJY2FzZSBJT0VSUl9JTlZBTElEX1JQSToKKwkJCQlyYyA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJjID0gLUVBQ0NFUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWdvdG8gZnJlZV9vdXRkbXA7CisJCX0KKwl9IGVsc2UKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJCXJzcC0+dW4uZ2VucmVxNjQuYmRsLmJkZVNpemU7CisKK2ZyZWVfb3V0ZG1wOgorCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJbHBmY19tYnVmX2ZyZWUocGhiYSwgYm1wLT52aXJ0LCBibXAtPnBoeXMpOworZnJlZV9ibXA6CisJa2ZyZWUoYm1wKTsKK2ZyZWVfcnNwaW9jYnE6CisJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CitmcmVlX2NtZGlvY2JxOgorCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKK2ZyZWVfbmRscF9leGl0OgorCWxwZmNfbmxwX3B1dChuZGxwKTsKKworCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+am9iX2RvbmUoam9iKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNfYnNnX3Jwb3J0X2VscyAtIHNlbmQgYW4gRUxTIGNvbW1hbmQgZnJvbSBhIGJzZyByZXF1ZXN0CisgKiBAam9iOiBmY19ic2dfam9iIHRvIGhhbmRsZQorICovCitzdGF0aWMgaW50CitscGZjX2JzZ19ycG9ydF9lbHMoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilqb2ItPnNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKwlzdHJ1Y3QgbHBmY19ycG9ydF9kYXRhICpyZGF0YSA9IGpvYi0+cnBvcnQtPmRkX2RhdGE7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSByZGF0YS0+cG5vZGU7CisKKwl1aW50MzJfdCBlbHNjbWQ7CisJdWludDMyX3QgY21kc2l6ZTsKKwl1aW50MzJfdCByc3BzaXplOworCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NicTsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnE7CisJSU9DQl90ICpyc3A7CisJdWludDE2X3QgcnBpID0gMDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKnBjbWQ7CisJc3RydWN0IGxwZmNfZG1hYnVmICpwcnNwOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqcGJ1Zmxpc3QgPSBOVUxMOworCXN0cnVjdCB1bHBfYmRlNjQgKmJwbDsKKwlpbnQgaW9jYl9zdGF0dXM7CisJaW50IHJlcXVlc3RfbnNlZzsKKwlpbnQgcmVwbHlfbnNlZzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnZWwgPSBOVUxMOworCWludCBudW1iZGU7CisJZG1hX2FkZHJfdCBidXNhZGRyOworCWludCByYyA9IDA7CisKKwkvKiBpbiBjYXNlIG5vIGRhdGEgaXMgdHJhbnNmZXJyZWQgKi8KKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCisJaWYgKCFscGZjX25scF9nZXQobmRscCkpIHsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwllbHNjbWQgPSBqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5yX2Vscy5lbHNfY29kZTsKKwljbWRzaXplID0gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJcnNwc2l6ZSA9IGpvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwlyc3Bpb2NicSA9IGxwZmNfc2xpX2dldF9pb2NicShwaGJhKTsKKwlpZiAoIXJzcGlvY2JxKSB7CisJCWxwZmNfbmxwX3B1dChuZGxwKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyc3AgPSAmcnNwaW9jYnEtPmlvY2I7CisJcnBpID0gbmRscC0+bmxwX3JwaTsKKworCWNtZGlvY2JxID0gbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEtPnBwb3J0LCAxLCBjbWRzaXplLCAwLCBuZGxwLAorCQkJCSAgICAgIG5kbHAtPm5scF9ESUQsIGVsc2NtZCk7CisKKwlpZiAoIWNtZGlvY2JxKSB7CisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlqb2ItPmRkX2RhdGEgPSBjbWRpb2NicTsKKwlwY21kID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBjbWRpb2NicS0+Y29udGV4dDI7CisJcHJzcCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgcGNtZC0+bGlzdC5uZXh0OworCisJbHBmY19tYnVmX2ZyZWUocGhiYSwgcGNtZC0+dmlydCwgcGNtZC0+cGh5cyk7CisJa2ZyZWUocGNtZCk7CisJbHBmY19tYnVmX2ZyZWUocGhiYSwgcHJzcC0+dmlydCwgcHJzcC0+cGh5cyk7CisJa2ZyZWUocHJzcCk7CisJY21kaW9jYnEtPmNvbnRleHQyID0gTlVMTDsKKworCXBidWZsaXN0ID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBjbWRpb2NicS0+Y29udGV4dDM7CisJYnBsID0gKHN0cnVjdCB1bHBfYmRlNjQgKikgcGJ1Zmxpc3QtPnZpcnQ7CisKKwlyZXF1ZXN0X25zZWcgPSBwY2lfbWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCQkgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisKKwlmb3JfZWFjaF9zZyhqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LCBzZ2VsLCByZXF1ZXN0X25zZWcsIG51bWJkZSkgeworCQlidXNhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2dlbCk7CisJCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRFXzY0OworCQlicGwtPnR1cy5mLmJkZVNpemUgPSBzZ19kbWFfbGVuKHNnZWwpOworCQlicGwtPnR1cy53ID0gY3B1X3RvX2xlMzIoYnBsLT50dXMudyk7CisJCWJwbC0+YWRkckxvdyA9IGNwdV90b19sZTMyKHB1dFBhZGRyTG93KGJ1c2FkZHIpKTsKKwkJYnBsLT5hZGRySGlnaCA9IGNwdV90b19sZTMyKHB1dFBhZGRySGlnaChidXNhZGRyKSk7CisJCWJwbCsrOworCX0KKworCXJlcGx5X25zZWcgPSBwY2lfbWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCQkJam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKwlmb3JfZWFjaF9zZyhqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwgc2dlbCwgcmVwbHlfbnNlZywgbnVtYmRlKSB7CisJCWJ1c2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZ2VsKTsKKwkJYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjRJOworCQlicGwtPnR1cy5mLmJkZVNpemUgPSBzZ19kbWFfbGVuKHNnZWwpOworCQlicGwtPnR1cy53ID0gY3B1X3RvX2xlMzIoYnBsLT50dXMudyk7CisJCWJwbC0+YWRkckxvdyA9IGNwdV90b19sZTMyKHB1dFBhZGRyTG93KGJ1c2FkZHIpKTsKKwkJYnBsLT5hZGRySGlnaCA9IGNwdV90b19sZTMyKHB1dFBhZGRySGlnaChidXNhZGRyKSk7CisJCWJwbCsrOworCX0KKworCWNtZGlvY2JxLT5pb2NiLnVuLmVsc3JlcTY0LmJkbC5iZGVTaXplID0KKwkJKHJlcXVlc3RfbnNlZyArIHJlcGx5X25zZWcpICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpOworCWNtZGlvY2JxLT5pb2NiLnVscENvbnRleHQgPSBycGk7CisJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX0xJQkRGQzsKKwljbWRpb2NicS0+Y29udGV4dDEgPSBOVUxMOworCWNtZGlvY2JxLT5jb250ZXh0MiA9IE5VTEw7CisKKwlpb2NiX3N0YXR1cyA9IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChwaGJhLCBMUEZDX0VMU19SSU5HLCBjbWRpb2NicSwKKwkJCQkJcnNwaW9jYnEsIChwaGJhLT5mY19yYXRvdiAqIDIpCisJCQkJCSAgICAgICArIExQRkNfRFJWUl9USU1FT1VUKTsKKworCS8qIHJlbGVhc2UgdGhlIG5ldyBuZGxwIG9uY2UgdGhlIGlvY2IgY29tcGxldGVzICovCisJbHBmY19ubHBfcHV0KG5kbHApOworCWlmIChpb2NiX3N0YXR1cyAhPSBJT0NCX1RJTUVET1VUKSB7CisJCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkJICAgICBqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCX0KKworCWlmIChpb2NiX3N0YXR1cyA9PSBJT0NCX1NVQ0NFU1MpIHsKKwkJaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9TVUNDRVNTKSB7CisJCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJCXJzcC0+dW4uZWxzcmVxNjQuYmRsLmJkZVNpemU7CisJCQlyYyA9IDA7CisJCX0gZWxzZSBpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xTX1JKVCkgeworCQkJc3RydWN0IGZjX2JzZ19jdGVsc19yZXBseSAqZWxzX3JlcGx5OworCQkJLyogTFNfUkpUIGRhdGEgcmV0dXJuZWQgaW4gd29yZCA0ICovCisJCQl1aW50OF90ICpyanRfZGF0YSA9ICh1aW50OF90ICopJnJzcC0+dW4udWxwV29yZFs0XTsKKworCQkJZWxzX3JlcGx5ID0gJmpvYi0+cmVwbHktPnJlcGx5X2RhdGEuY3RlbHNfcmVwbHk7CisJCQlqb2ItPnJlcGx5LT5yZXN1bHQgPSAwOworCQkJZWxzX3JlcGx5LT5zdGF0dXMgPSBGQ19DVEVMU19TVEFUVVNfUkVKRUNUOworCQkJZWxzX3JlcGx5LT5yanRfZGF0YS5hY3Rpb24gPSByanRfZGF0YVswXTsKKwkJCWVsc19yZXBseS0+cmp0X2RhdGEucmVhc29uX2NvZGUgPSByanRfZGF0YVsxXTsKKwkJCWVsc19yZXBseS0+cmp0X2RhdGEucmVhc29uX2V4cGxhbmF0aW9uID0gcmp0X2RhdGFbMl07CisJCQllbHNfcmVwbHktPnJqdF9kYXRhLnZlbmRvcl91bmlxdWUgPSByanRfZGF0YVszXTsKKwkJfSBlbHNlCisJCQlyYyA9IC1FSU87CisJfSBlbHNlCisJCXJjID0gLUVJTzsKKworCWlmIChpb2NiX3N0YXR1cyAhPSBJT0NCX1RJTUVET1VUKQorCQlscGZjX2Vsc19mcmVlX2lvY2IocGhiYSwgY21kaW9jYnEpOworCisJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CisKK291dDoKKwkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KKwlqb2ItPmpvYl9kb25lKGpvYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGxwZmNfY3RfZXZlbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlpbnQgcmVmOworCXdhaXRfcXVldWVfaGVhZF90IHdxOworCisJLyogRXZlbnQgdHlwZSBhbmQgd2FpdGVyIGlkZW50aWZpZXJzICovCisJdWludDMyX3QgdHlwZV9tYXNrOworCXVpbnQzMl90IHJlcV9pZDsKKwl1aW50MzJfdCByZWdfaWQ7CisKKwkvKiBuZXh0IHR3byBmbGFncyBhcmUgaGVyZSBmb3IgdGhlIGF1dG8tZGVsZXRlIGxvZ2ljICovCisJdW5zaWduZWQgbG9uZyB3YWl0X3RpbWVfc3RhbXA7CisJaW50IHdhaXRpbmc7CisKKwkvKiBzZWVuIGFuZCBub3Qgc2VlbiBldmVudHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50c190b19nZXQ7CisJc3RydWN0IGxpc3RfaGVhZCBldmVudHNfdG9fc2VlOworfTsKKworc3RydWN0IGV2ZW50X2RhdGEgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwl1aW50MzJfdCB0eXBlOworCXVpbnQzMl90IGltbWVkX2RhdDsKKwl2b2lkICpkYXRhOworCXVpbnQzMl90IGxlbjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbHBmY19jdF9ldmVudCAqCitscGZjX2N0X2V2ZW50X25ldyhpbnQgZXZfcmVnX2lkLCB1aW50MzJfdCBldl9yZXFfaWQpCit7CisJc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dCA9IGt6YWxsb2Moc2l6ZW9mKCpldnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWV2dCkKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKKwlJTklUX0xJU1RfSEVBRCgmZXZ0LT5ldmVudHNfdG9fc2VlKTsKKwlldnQtPnJlcV9pZCA9IGV2X3JlcV9pZDsKKwlldnQtPnJlZ19pZCA9IGV2X3JlZ19pZDsKKwlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZXZ0LT53cSk7CisKKwlyZXR1cm4gZXZ0OworfQorCitzdGF0aWMgdm9pZAorbHBmY19jdF9ldmVudF9mcmVlKHN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQpCit7CisJc3RydWN0IGV2ZW50X2RhdGEgKmVkOworCisJbGlzdF9kZWwoJmV2dC0+bm9kZSk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmV2dC0+ZXZlbnRzX3RvX2dldCkpIHsKKwkJZWQgPSBsaXN0X2VudHJ5KGV2dC0+ZXZlbnRzX3RvX2dldC5uZXh0LCB0eXBlb2YoKmVkKSwgbm9kZSk7CisJCWxpc3RfZGVsKCZlZC0+bm9kZSk7CisJCWtmcmVlKGVkLT5kYXRhKTsKKwkJa2ZyZWUoZWQpOworCX0KKworCXdoaWxlICghbGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSkgeworCQllZCA9IGxpc3RfZW50cnkoZXZ0LT5ldmVudHNfdG9fc2VlLm5leHQsIHR5cGVvZigqZWQpLCBub2RlKTsKKwkJbGlzdF9kZWwoJmVkLT5ub2RlKTsKKwkJa2ZyZWUoZWQtPmRhdGEpOworCQlrZnJlZShlZCk7CisJfQorCisJa2ZyZWUoZXZ0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitscGZjX2N0X2V2ZW50X3JlZihzdHJ1Y3QgbHBmY19jdF9ldmVudCAqZXZ0KQoreworCWV2dC0+cmVmKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbHBmY19jdF9ldmVudF91bnJlZihzdHJ1Y3QgbHBmY19jdF9ldmVudCAqZXZ0KQoreworCWlmICgtLWV2dC0+cmVmIDwgMCkKKwkJbHBmY19jdF9ldmVudF9mcmVlKGV2dCk7Cit9CisKKyNkZWZpbmUgU0xJX0NUX0VMWF9MT09QQkFDSyAweDEwCisKK2VudW0gRUxYX0xPT1BCQUNLX0NNRCB7CisJRUxYX0xPT1BCQUNLX1hSSV9TRVRVUCwKKwlFTFhfTE9PUEJBQ0tfREFUQSwKK307CisKKy8qKgorICogbHBmY19ic2dfY3RfdW5zb2xfZXZlbnQgLSBwcm9jZXNzIGFuIHVuc29saWNpdGVkIENUIGNvbW1hbmQKKyAqIEBwaGJhOgorICogQHByaW5nOgorICogQHBpb2NicToKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIHVuc29saWNpdGVkIENUIGNvbW1hbmQgaXMgcmVjZWl2ZWQuICBJdAorICogZm9yd2FyZHMgdGhlIGV2ZW50IHRvIGFueSBwcm9jZXNzZXMgcmVnaXN0ZXJkIHRvIHJlY2VpdmUgQ1QgZXZlbnRzLgorICovCit2b2lkCitscGZjX2JzZ19jdF91bnNvbF9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpwaW9jYnEpCit7CisJdWludDMyX3QgZXZ0X3JlcV9pZCA9IDA7CisJdWludDMyX3QgY21kOworCXVpbnQzMl90IGxlbjsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtYWJ1ZiA9IE5VTEw7CisJc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dDsKKwlzdHJ1Y3QgZXZlbnRfZGF0YSAqZXZ0X2RhdCA9IE5VTEw7CisJc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxOworCXNpemVfdCBvZmZzZXQgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKKwlzdHJ1Y3QgdWxwX2JkZTY0ICpiZGU7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlpbnQgaTsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmJkZUJ1ZjEgPSBwaW9jYnEtPmNvbnRleHQyOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYmRlQnVmMiA9IHBpb2NicS0+Y29udGV4dDM7CisJc3RydWN0IGxwZmNfaGJxX2VudHJ5ICpoYnFlOworCXN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICpjdF9yZXE7CisKKwlJTklUX0xJU1RfSEVBRCgmaGVhZCk7CisJbGlzdF9hZGRfdGFpbCgmaGVhZCwgJnBpb2NicS0+bGlzdCk7CisKKwlpZiAocGlvY2JxLT5pb2NiLnVscEJkZUNvdW50ID09IDAgfHwKKwkgICAgcGlvY2JxLT5pb2NiLnVuLmNvbnQ2NFswXS50dXMuZi5iZGVTaXplID09IDApCisJCWdvdG8gZXJyb3JfY3RfdW5zb2xfZXhpdDsKKworCWlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpCisJCWRtYWJ1ZiA9IGJkZUJ1ZjE7CisJZWxzZSB7CisJCWRtYV9hZGRyID0gZ2V0UGFkZHIocGlvY2JxLT5pb2NiLnVuLmNvbnQ2NFswXS5hZGRySGlnaCwKKwkJCQkgICAgcGlvY2JxLT5pb2NiLnVuLmNvbnQ2NFswXS5hZGRyTG93KTsKKwkJZG1hYnVmID0gbHBmY19zbGlfcmluZ3Bvc3RidWZfZ2V0KHBoYmEsIHByaW5nLCBkbWFfYWRkcik7CisJfQorCisJY3RfcmVxID0gKHN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICopZG1hYnVmLT52aXJ0OworCWV2dF9yZXFfaWQgPSBjdF9yZXEtPkZzVHlwZTsKKwljbWQgPSBjdF9yZXEtPkNvbW1hbmRSZXNwb25zZS5iaXRzLkNtZFJzcDsKKwlsZW4gPSBjdF9yZXEtPkNvbW1hbmRSZXNwb25zZS5iaXRzLlNpemU7CisJaWYgKCEocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSkKKwkJbHBmY19zbGlfcmluZ3Bvc3RidWZfcHV0KHBoYmEsIHByaW5nLCBkbWFidWYpOworCisJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZ0LCAmcGhiYS0+Y3RfZXZfd2FpdGVycywgbm9kZSkgeworCQlpZiAoZXZ0LT5yZXFfaWQgIT0gZXZ0X3JlcV9pZCkKKwkJCWNvbnRpbnVlOworCisJCWxwZmNfY3RfZXZlbnRfcmVmKGV2dCk7CisKKwkJZXZ0X2RhdCA9IGt6YWxsb2Moc2l6ZW9mKCpldnRfZGF0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZXZ0X2RhdCkgeworCQkJbHBmY19jdF9ldmVudF91bnJlZihldnQpOworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkJIjI2MTQgTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGZvciAiCisJCQkJCSJDVCBldmVudFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCisJCWlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpIHsKKwkJCS8qIHRha2UgYWNjdW11bGF0ZWQgYnl0ZSBjb3VudCBmcm9tIHRoZSBsYXN0IGlvY2JxICovCisJCQlpb2NicSA9IGxpc3RfZW50cnkoaGVhZC5wcmV2LCB0eXBlb2YoKmlvY2JxKSwgbGlzdCk7CisJCQlldnRfZGF0LT5sZW4gPSBpb2NicS0+aW9jYi51bnNsaTMucmN2c2xpMy5hY2NfbGVuOworCQl9IGVsc2UgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShpb2NicSwgJmhlYWQsIGxpc3QpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgaW9jYnEtPmlvY2IudWxwQmRlQ291bnQ7IGkrKykKKwkJCQkJZXZ0X2RhdC0+bGVuICs9CisJCQkJCWlvY2JxLT5pb2NiLnVuLmNvbnQ2NFtpXS50dXMuZi5iZGVTaXplOworCQkJfQorCQl9CisKKwkJZXZ0X2RhdC0+ZGF0YSA9IGt6YWxsb2MoZXZ0X2RhdC0+bGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFldnRfZGF0LT5kYXRhKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCQkiMjYxNSBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZm9yICIKKwkJCQkJIkNUIGV2ZW50IGRhdGEsIHNpemUgJWRcbiIsCisJCQkJCWV2dF9kYXQtPmxlbik7CisJCQlrZnJlZShldnRfZGF0KTsKKwkJCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwkJCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsKKwkJCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQkJZ290byBlcnJvcl9jdF91bnNvbF9leGl0OworCQl9CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShpb2NicSwgJmhlYWQsIGxpc3QpIHsKKwkJCWlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpIHsKKwkJCQliZGVCdWYxID0gaW9jYnEtPmNvbnRleHQyOworCQkJCWJkZUJ1ZjIgPSBpb2NicS0+Y29udGV4dDM7CisJCQl9CisJCQlmb3IgKGkgPSAwOyBpIDwgaW9jYnEtPmlvY2IudWxwQmRlQ291bnQ7IGkrKykgeworCQkJCWludCBzaXplID0gMDsKKwkJCQlpZiAocGhiYS0+c2xpM19vcHRpb25zICYKKwkJCQkgICAgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSB7CisJCQkJCWlmIChpID09IDApIHsKKwkJCQkJCWhicWUgPSAoc3RydWN0IGxwZmNfaGJxX2VudHJ5ICopCisJCQkJCQkgICZpb2NicS0+aW9jYi51bi51bHBXb3JkWzBdOworCQkJCQkJc2l6ZSA9IGhicWUtPmJkZS50dXMuZi5iZGVTaXplOworCQkJCQkJZG1hYnVmID0gYmRlQnVmMTsKKwkJCQkJfSBlbHNlIGlmIChpID09IDEpIHsKKwkJCQkJCWhicWUgPSAoc3RydWN0IGxwZmNfaGJxX2VudHJ5ICopCisJCQkJCQkJJmlvY2JxLT5pb2NiLnVuc2xpMy4KKwkJCQkJCQlzbGkzV29yZHNbNF07CisJCQkJCQlzaXplID0gaGJxZS0+YmRlLnR1cy5mLmJkZVNpemU7CisJCQkJCQlkbWFidWYgPSBiZGVCdWYyOworCQkJCQl9CisJCQkJCWlmICgob2Zmc2V0ICsgc2l6ZSkgPiBldnRfZGF0LT5sZW4pCisJCQkJCQlzaXplID0gZXZ0X2RhdC0+bGVuIC0gb2Zmc2V0OworCQkJCX0gZWxzZSB7CisJCQkJCXNpemUgPSBpb2NicS0+aW9jYi51bi5jb250NjRbaV0uCisJCQkJCQl0dXMuZi5iZGVTaXplOworCQkJCQliZGUgPSAmaW9jYnEtPmlvY2IudW4uY29udDY0W2ldOworCQkJCQlkbWFfYWRkciA9IGdldFBhZGRyKGJkZS0+YWRkckhpZ2gsCisJCQkJCQkJICAgIGJkZS0+YWRkckxvdyk7CisJCQkJCWRtYWJ1ZiA9IGxwZmNfc2xpX3Jpbmdwb3N0YnVmX2dldChwaGJhLAorCQkJCQkJCXByaW5nLCBkbWFfYWRkcik7CisJCQkJfQorCQkJCWlmICghZG1hYnVmKSB7CisJCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwKKwkJCQkJCUxPR19MSUJERkMsICIyNjE2IE5vIGRtYWJ1ZiAiCisJCQkJCQkiZm91bmQgZm9yIGlvY2JxIDB4JXBcbiIsCisJCQkJCQlpb2NicSk7CisJCQkJCWtmcmVlKGV2dF9kYXQtPmRhdGEpOworCQkJCQlrZnJlZShldnRfZGF0KTsKKwkJCQkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQkJCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7CisJCQkJCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQkJCQlnb3RvIGVycm9yX2N0X3Vuc29sX2V4aXQ7CisJCQkJfQorCQkJCW1lbWNweSgoY2hhciAqKShldnRfZGF0LT5kYXRhKSArIG9mZnNldCwKKwkJCQkgICAgICAgZG1hYnVmLT52aXJ0LCBzaXplKTsKKwkJCQlvZmZzZXQgKz0gc2l6ZTsKKwkJCQlpZiAoZXZ0X3JlcV9pZCAhPSBTTElfQ1RfRUxYX0xPT1BCQUNLICYmCisJCQkJICAgICEocGhiYS0+c2xpM19vcHRpb25zICYKKwkJCQkgICAgICBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpKSB7CisJCQkJCWxwZmNfc2xpX3Jpbmdwb3N0YnVmX3B1dChwaGJhLCBwcmluZywKKwkJCQkJCQkJIGRtYWJ1Zik7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3dpdGNoIChjbWQpIHsKKwkJCQkJY2FzZSBFTFhfTE9PUEJBQ0tfWFJJX1NFVFVQOgorCQkJCQkJaWYgKCEocGhiYS0+c2xpM19vcHRpb25zICYKKwkJCQkJCSAgICAgIExQRkNfU0xJM19IQlFfRU5BQkxFRCkpCisJCQkJCQkJbHBmY19wb3N0X2J1ZmZlcihwaGJhLAorCQkJCQkJCQkJIHByaW5nLAorCQkJCQkJCQkJIDEpOworCQkJCQkJZWxzZQorCQkJCQkJCWxwZmNfaW5fYnVmX2ZyZWUocGhiYSwKKwkJCQkJCQkJCWRtYWJ1Zik7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWlmICghKHBoYmEtPnNsaTNfb3B0aW9ucyAmCisJCQkJCQkgICAgICBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpKQorCQkJCQkJCWxwZmNfcG9zdF9idWZmZXIocGhiYSwKKwkJCQkJCQkJCSBwcmluZywKKwkJCQkJCQkJCSAxKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CisJCQlldnRfZGF0LT5pbW1lZF9kYXQgPSBwaGJhLT5jdHhfaWR4OworCQkJcGhiYS0+Y3R4X2lkeCA9IChwaGJhLT5jdHhfaWR4ICsgMSkgJSA2NDsKKwkJCXBoYmEtPmN0X2N0eFtldnRfZGF0LT5pbW1lZF9kYXRdLm94aWQgPQorCQkJCQkJcGlvY2JxLT5pb2NiLnVscENvbnRleHQ7CisJCQlwaGJhLT5jdF9jdHhbZXZ0X2RhdC0+aW1tZWRfZGF0XS5TSUQgPQorCQkJCXBpb2NicS0+aW9jYi51bi5yY3ZlbHMucmVtb3RlSUQ7CisJCX0gZWxzZQorCQkJZXZ0X2RhdC0+aW1tZWRfZGF0ID0gcGlvY2JxLT5pb2NiLnVscENvbnRleHQ7CisKKwkJZXZ0X2RhdC0+dHlwZSA9IEZDX1JFR19DVF9FVkVOVDsKKwkJbGlzdF9hZGQoJmV2dF9kYXQtPm5vZGUsICZldnQtPmV2ZW50c190b19zZWUpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmV2dC0+d3EpOworCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7CisJCWlmIChldnRfcmVxX2lkID09IFNMSV9DVF9FTFhfTE9PUEJBQ0spCisJCQlicmVhazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisKK2Vycm9yX2N0X3Vuc29sX2V4aXQ6CisJaWYgKCFsaXN0X2VtcHR5KCZoZWFkKSkKKwkJbGlzdF9kZWwoJmhlYWQpOworCisJcmV0dXJuOworfQorCisvKioKKyAqIGxwZmNfYnNnX3NldF9ldmVudCAtIHByb2Nlc3MgYSBTRVRfRVZFTlQgYnNnIHZlbmRvciBjb21tYW5kCisgKiBAam9iOiBTRVRfRVZFTlQgZmNfYnNnX2pvYgorICovCitzdGF0aWMgaW50CitscGZjX2JzZ19zZXRfZXZlbnQoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilqb2ItPnNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKwlzdHJ1Y3Qgc2V0X2N0X2V2ZW50ICpldmVudF9yZXE7CisJc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dDsKKwlpbnQgcmMgPSAwOworCisJaWYgKGpvYi0+cmVxdWVzdF9sZW4gPAorCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3Qgc2V0X2N0X2V2ZW50KSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNjEyIFJlY2VpdmVkIFNFVF9DVF9FVkVOVCBiZWxvdyBtaW5pbXVtICIKKwkJCQkic2l6ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWV2ZW50X3JlcSA9IChzdHJ1Y3Qgc2V0X2N0X2V2ZW50ICopCisJCWpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQ7CisKKwltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldnQsICZwaGJhLT5jdF9ldl93YWl0ZXJzLCBub2RlKSB7CisJCWlmIChldnQtPnJlZ19pZCA9PSBldmVudF9yZXEtPmV2X3JlZ19pZCkgeworCQkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKKwkJCWV2dC0+d2FpdF90aW1lX3N0YW1wID0gamlmZmllczsKKwkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCisJaWYgKCZldnQtPm5vZGUgPT0gJnBoYmEtPmN0X2V2X3dhaXRlcnMpIHsKKwkJLyogbm8gZXZlbnQgd2FpdGluZyBzdHJ1Y3QgeWV0IC0gZmlyc3QgY2FsbCAqLworCQlldnQgPSBscGZjX2N0X2V2ZW50X25ldyhldmVudF9yZXEtPmV2X3JlZ19pZCwKKwkJCQkJZXZlbnRfcmVxLT5ldl9yZXFfaWQpOworCQlpZiAoIWV2dCkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkJIjI2MTcgRmFpbGVkIGFsbG9jYXRpb24gb2YgZXZlbnQgIgorCQkJCQkid2FpdGVyXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQlsaXN0X2FkZCgmZXZ0LT5ub2RlLCAmcGhiYS0+Y3RfZXZfd2FpdGVycyk7CisJCWxwZmNfY3RfZXZlbnRfcmVmKGV2dCk7CisJCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCX0KKworCWV2dC0+d2FpdGluZyA9IDE7CisJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShldnQtPndxLAorCQkJCSAgICAgIWxpc3RfZW1wdHkoJmV2dC0+ZXZlbnRzX3RvX3NlZSkpKSB7CisJCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwkJbHBmY19jdF9ldmVudF91bnJlZihldnQpOyAvKiByZWxlYXNlIHJlZiAqLworCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7IC8qIGRlbGV0ZSAqLworCQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwkJcmMgPSAtRUlOVFI7CisJCWdvdG8gc2V0X2V2ZW50X291dDsKKwl9CisKKwlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7CisJZXZ0LT53YWl0aW5nID0gMDsKKworCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlsaXN0X21vdmUoZXZ0LT5ldmVudHNfdG9fc2VlLnByZXYsICZldnQtPmV2ZW50c190b19nZXQpOworCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsgLyogcmVsZWFzZSByZWYgKi8KKwltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKworc2V0X2V2ZW50X291dDoKKwkvKiBzZXRfZXZlbnQgY2FycmllcyBubyByZXBseSBwYXlsb2FkICovCisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KKwlqb2ItPmpvYl9kb25lKGpvYik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBscGZjX2JzZ19nZXRfZXZlbnQgLSBwcm9jZXNzIGEgR0VUX0VWRU5UIGJzZyB2ZW5kb3IgY29tbWFuZAorICogQGpvYjogR0VUX0VWRU5UIGZjX2JzZ19qb2IKKyAqLworc3RhdGljIGludAorbHBmY19ic2dfZ2V0X2V2ZW50KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJc3RydWN0IGdldF9jdF9ldmVudCAqZXZlbnRfcmVxOworCXN0cnVjdCBnZXRfY3RfZXZlbnRfcmVwbHkgKmV2ZW50X3JlcGx5OworCXN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQ7CisJc3RydWN0IGV2ZW50X2RhdGEgKmV2dF9kYXQgPSBOVUxMOworCWludCByYyA9IDA7CisKKwlpZiAoam9iLT5yZXF1ZXN0X2xlbiA8CisJICAgIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcXVlc3QpICsgc2l6ZW9mKHN0cnVjdCBnZXRfY3RfZXZlbnQpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI2MTMgUmVjZWl2ZWQgR0VUX0NUX0VWRU5UIHJlcXVlc3QgYmVsb3cgIgorCQkJCSJtaW5pbXVtIHNpemVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlldmVudF9yZXEgPSAoc3RydWN0IGdldF9jdF9ldmVudCAqKQorCQlqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kOworCisJZXZlbnRfcmVwbHkgPSAoc3RydWN0IGdldF9jdF9ldmVudF9yZXBseSAqKQorCQlqb2ItPnJlcGx5LT5yZXBseV9kYXRhLnZlbmRvcl9yZXBseS52ZW5kb3JfcnNwOworCisJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZ0LCAmcGhiYS0+Y3RfZXZfd2FpdGVycywgbm9kZSkgeworCQlpZiAoZXZ0LT5yZWdfaWQgPT0gZXZlbnRfcmVxLT5ldl9yZWdfaWQpIHsKKwkJCWlmIChsaXN0X2VtcHR5KCZldnQtPmV2ZW50c190b19nZXQpKQorCQkJCWJyZWFrOworCQkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKKwkJCWV2dC0+d2FpdF90aW1lX3N0YW1wID0gamlmZmllczsKKwkJCWV2dF9kYXQgPSBsaXN0X2VudHJ5KGV2dC0+ZXZlbnRzX3RvX2dldC5wcmV2LAorCQkJCQkgICAgIHN0cnVjdCBldmVudF9kYXRhLCBub2RlKTsKKwkJCWxpc3RfZGVsKCZldnRfZGF0LT5ub2RlKTsKKwkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCisJaWYgKCFldnRfZGF0KSB7CisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJCXJjID0gLUVOT0VOVDsKKwkJZ290byBlcnJvcl9nZXRfZXZlbnRfZXhpdDsKKwl9CisKKwlpZiAoZXZ0X2RhdC0+bGVuID4gam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuKSB7CisJCWV2dF9kYXQtPmxlbiA9IGpvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJCSIyNjE4IFRydW5jYXRlZCBldmVudCBkYXRhIGF0ICVkICIKKwkJCQkJImJ5dGVzXG4iLAorCQkJCQlqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW4pOworCX0KKworCWV2ZW50X3JlcGx5LT5pbW1lZF9kYXRhID0gZXZ0X2RhdC0+aW1tZWRfZGF0OworCisJaWYgKGV2dF9kYXQtPmxlbiA+IDApCisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQlzZ19jb3B5X2Zyb21fYnVmZmVyKGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkJCQkgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwKKwkJCQkJICAgIGV2dF9kYXQtPmRhdGEsIGV2dF9kYXQtPmxlbik7CisJZWxzZQorCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCXJjID0gMDsKKworCWlmIChldnRfZGF0KQorCQlrZnJlZShldnRfZGF0LT5kYXRhKTsKKwlrZnJlZShldnRfZGF0KTsKKwltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJbHBmY19jdF9ldmVudF91bnJlZihldnQpOworCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCitlcnJvcl9nZXRfZXZlbnRfZXhpdDoKKwkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KKwlqb2ItPmpvYl9kb25lKGpvYik7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbHBmY19ic2dfaHN0X3ZlbmRvciAtIHByb2Nlc3MgYSB2ZW5kb3Itc3BlY2lmaWMgZmNfYnNnX2pvYgorICogQGpvYjogZmNfYnNnX2pvYiB0byBoYW5kbGUKKyAqLworc3RhdGljIGludAorbHBmY19ic2dfaHN0X3ZlbmRvcihzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCWludCBjb21tYW5kID0gam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZFswXTsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgTFBGQ19CU0dfVkVORE9SX1NFVF9DVF9FVkVOVDoKKwkJcmV0dXJuIGxwZmNfYnNnX3NldF9ldmVudChqb2IpOworCQlicmVhazsKKworCWNhc2UgTFBGQ19CU0dfVkVORE9SX0dFVF9DVF9FVkVOVDoKKwkJcmV0dXJuIGxwZmNfYnNnX2dldF9ldmVudChqb2IpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLyoqCisgKiBscGZjX2JzZ19yZXF1ZXN0IC0gaGFuZGxlIGEgYnNnIHJlcXVlc3QgZnJvbSB0aGUgRkMgdHJhbnNwb3J0CisgKiBAam9iOiBmY19ic2dfam9iIHRvIGhhbmRsZQorICovCitpbnQKK2xwZmNfYnNnX3JlcXVlc3Qoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK3sKKwl1aW50MzJfdCBtc2djb2RlOworCWludCByYyA9IC1FSU5WQUw7CisKKwltc2djb2RlID0gam9iLT5yZXF1ZXN0LT5tc2djb2RlOworCisJc3dpdGNoIChtc2djb2RlKSB7CisJY2FzZSBGQ19CU0dfSFNUX1ZFTkRPUjoKKwkJcmMgPSBscGZjX2JzZ19oc3RfdmVuZG9yKGpvYik7CisJCWJyZWFrOworCWNhc2UgRkNfQlNHX1JQVF9FTFM6CisJCXJjID0gbHBmY19ic2dfcnBvcnRfZWxzKGpvYik7CisJCWJyZWFrOworCWNhc2UgRkNfQlNHX1JQVF9DVDoKKwkJcmMgPSBscGZjX2JzZ19ycG9ydF9jdChqb2IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbHBmY19ic2dfdGltZW91dCAtIGhhbmRsZSB0aW1lb3V0IG9mIGEgYnNnIHJlcXVlc3QgZnJvbSB0aGUgRkMgdHJhbnNwb3J0CisgKiBAam9iOiBmY19ic2dfam9iIHRoYXQgaGFzIHRpbWVkIG91dAorICoKKyAqIFRoaXMgZnVuY3Rpb24ganVzdCBhYm9ydHMgdGhlIGpvYidzIElPQ0IuICBUaGUgYWJvcnRlZCBJT0NCIHdpbGwgcmV0dXJuIHRvCisgKiB0aGUgd2FpdGluZyBmdW5jdGlvbiB3aGljaCB3aWxsIGhhbmRsZSBwYXNzaW5nIHRoZSBlcnJvciBiYWNrIHRvIHVzZXJzcGFjZQorICovCitpbnQKK2xwZmNfYnNnX3RpbWVvdXQoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilqb2ItPnNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKWpvYi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcgPSAmcGhiYS0+c2xpLnJpbmdbTFBGQ19FTFNfUklOR107CisKKwlpZiAoY21kaW9jYikKKwkJbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWcocGhiYSwgcHJpbmcsIGNtZGlvY2IpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCmluZGV4IGQyYTkyMjkuLjA4MzBmMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCkBAIC0yMSw5ICsyMSwxMSBAQAogdHlwZWRlZiBpbnQgKCpub2RlX2ZpbHRlcikoc3RydWN0IGxwZmNfbm9kZWxpc3QgKiwgdm9pZCAqKTsKIAogc3RydWN0IGZjX3Jwb3J0Owotdm9pZCBscGZjX2R1bXBfbWVtKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgdWludDE2X3QpOwordm9pZCBscGZjX2Rvd25fbGluayhzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwordm9pZCBscGZjX3NsaV9yZWFkX2xpbmtfc3RlKHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY19kdW1wX21lbShzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICosIHVpbnQxNl90LCB1aW50MTZfdCk7CiB2b2lkIGxwZmNfZHVtcF93YWtldXBfcGFyYW0oc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKLXZvaWQgbHBmY19kdW1wX3N0YXRpY192cG9ydChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICosIHVpbnQxNl90KTsKK2ludCBscGZjX2R1bXBfc3RhdGljX3Zwb3J0KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgdWludDE2X3QpOwogaW50IGxwZmNfZHVtcF9mY29lX3BhcmFtKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY01ib3hxICopOwogdm9pZCBscGZjX3JlYWRfbnYoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19jb25maWdfYXN5bmMoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MzJfdCk7CkBAIC0xMzUsNiArMTM3LDkgQEAKIGludCBscGZjX2Vsc19kaXNjX3Bsb2dpKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX2Vsc190aW1lb3V0KHVuc2lnbmVkIGxvbmcpOwogdm9pZCBscGZjX2Vsc190aW1lb3V0X2hhbmRsZXIoc3RydWN0IGxwZmNfdnBvcnQgKik7CitzdHJ1Y3QgbHBmY19pb2NicSAqbHBmY19wcmVwX2Vsc19pb2NiKHN0cnVjdCBscGZjX3Zwb3J0ICosIHVpbnQ4X3QsIHVpbnQxNl90LAorCQkJCSAgICAgIHVpbnQ4X3QsIHN0cnVjdCBscGZjX25vZGVsaXN0ICosCisJCQkJICAgICAgdWludDMyX3QsIHVpbnQzMl90KTsKIHZvaWQgbHBmY19oYl90aW1lb3V0X2hhbmRsZXIoc3RydWN0IGxwZmNfaGJhICopOwogCiB2b2lkIGxwZmNfY3RfdW5zb2xfZXZlbnQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3NsaV9yaW5nICosCkBAIC0xODIsMTEgKzE4NywxMiBAQAogaW50IGxwZmNfbWJveF90bW9fdmFsKHN0cnVjdCBscGZjX2hiYSAqLCBpbnQpOwogdm9pZCBscGZjX2luaXRfdmZpKHN0cnVjdCBscGZjTWJveHEgKiwgc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfcmVnX3ZmaShzdHJ1Y3QgbHBmY01ib3hxICosIHN0cnVjdCBscGZjX3Zwb3J0ICosIGRtYV9hZGRyX3QpOwotdm9pZCBscGZjX2luaXRfdnBpKHN0cnVjdCBscGZjTWJveHEgKiwgdWludDE2X3QpOwordm9pZCBscGZjX2luaXRfdnBpKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY01ib3hxICosIHVpbnQxNl90KTsKIHZvaWQgbHBmY191bnJlZ192Zmkoc3RydWN0IGxwZmNNYm94cSAqLCB1aW50MTZfdCk7CiB2b2lkIGxwZmNfcmVnX2ZjZmkoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjTWJveHEgKik7CiB2b2lkIGxwZmNfdW5yZWdfZmNmaShzdHJ1Y3QgbHBmY01ib3hxICosIHVpbnQxNl90KTsKIHZvaWQgbHBmY19yZXN1bWVfcnBpKHN0cnVjdCBscGZjTWJveHEgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKik7CitpbnQgbHBmY19jaGVja19wZW5kaW5nX2Zjb2VfZXZlbnQoc3RydWN0IGxwZmNfaGJhICosIHVpbnQ4X3QpOwogCiB2b2lkIGxwZmNfY29uZmlnX2hicShzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QsIHN0cnVjdCBscGZjX2hicV9pbml0ICosCiAJdWludDMyX3QgLCBMUEZDX01CT1hRX3QgKik7CkBAIC0yMzQsNiArMjQwLDcgQEAKIGludCBscGZjX3NsaV9pc3N1ZV9pb2NiKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCwKIAkJCXN0cnVjdCBscGZjX2lvY2JxICosIHVpbnQzMl90KTsKIHZvaWQgbHBmY19zbGlfcGNpbWVtX2Jjb3B5KHZvaWQgKiwgdm9pZCAqLCB1aW50MzJfdCk7Cit2b2lkIGxwZmNfc2xpX2JlbWVtX2Jjb3B5KHZvaWQgKiwgdm9pZCAqLCB1aW50MzJfdCk7CiB2b2lkIGxwZmNfc2xpX2Fib3J0X2lvY2JfcmluZyhzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKik7CiB2b2lkIGxwZmNfc2xpX2ZsdXNoX2ZjcF9yaW5ncyhzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19zbGlfcmluZ3Bvc3RidWZfcHV0KHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqLApAQCAtMzYwLDMgKzM2Nyw4IEBACiAjZGVmaW5lIEhCQV9FVkVOVF9MSU5LX1VQICAgICAgICAgICAgICAgIDIKICNkZWZpbmUgSEJBX0VWRU5UX0xJTktfRE9XTiAgICAgICAgICAgICAgMwogCisvKiBmdW5jdGlvbnMgdG8gc3VwcG9ydCBTR0lPdjQvYnNnIGludGVyZmFjZSAqLworaW50IGxwZmNfYnNnX3JlcXVlc3Qoc3RydWN0IGZjX2JzZ19qb2IgKik7CitpbnQgbHBmY19ic2dfdGltZW91dChzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKK3ZvaWQgbHBmY19ic2dfY3RfdW5zb2xfZXZlbnQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3NsaV9yaW5nICosCisJCQkgICAgIHN0cnVjdCBscGZjX2lvY2JxICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCmluZGV4IDBlNTMyZjAuLjlkZjdlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKQEAgLTk3LDYgKzk3LDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CiAJc3RydWN0IGxwZmNfZG1hYnVmICpiZGVCdWY7CiAKKwlscGZjX2JzZ19jdF91bnNvbF9ldmVudChwaGJhLCBwcmluZywgcGlvY2JxKTsKKwogCWlmICh1bmxpa2VseShpY21kLT51bHBTdGF0dXMgPT0gSU9TVEFUX05FRURfQlVGRkVSKSkgewogCQlscGZjX3NsaV9oYnFidWZfYWRkX2hicXMocGhiYSwgTFBGQ19FTFNfSEJRKTsKIAl9IGVsc2UgaWYgKChpY21kLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCmluZGV4IGY3MmZkZjIuLjQ1MzM3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgKiAgIFBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZC9wcmVwYXJlZCBlbHMgaW9jYiBkYXRhIHN0cnVjdHVyZQogICogICBOVUxMIC0gd2hlbiBlbHMgaW9jYiBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL3ByZXBhcmF0aW9uIGZhaWxlZAogICoqLwotc3RhdGljIHN0cnVjdCBscGZjX2lvY2JxICoKK3N0cnVjdCBscGZjX2lvY2JxICoKIGxwZmNfcHJlcF9lbHNfaW9jYihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQ4X3QgZXhwZWN0UnNwLAogCQkgICB1aW50MTZfdCBjbWRTaXplLCB1aW50OF90IHJldHJ5LAogCQkgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwgdWludDMyX3QgZGlkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwppbmRleCBlZDQ2YjI0Li5lNmE0N2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwpAQCAtNjEsNiArNjEsNyBAQAogCiBzdGF0aWMgdm9pZCBscGZjX2Rpc2NfdGltZW91dF9oYW5kbGVyKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogc3RhdGljIHZvaWQgbHBmY19kaXNjX2ZsdXNoX2xpc3Qoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KTsKK3N0YXRpYyB2b2lkIGxwZmNfdW5yZWdpc3Rlcl9mY2ZpX2NtcGwoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIAogdm9pZAogbHBmY190ZXJtaW5hdGVfcnBvcnRfaW8oc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKQEAgLTEwMDksOSArMTAxMCwxNSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9SRUdJU1RFUkVEOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkvKiBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgRkNvRSBldmVudCwgcmVzdGFydCBGQ0YgdGFibGUgc2Nhbi4gKi8KKwlpZiAobHBmY19jaGVja19wZW5kaW5nX2Zjb2VfZXZlbnQocGhiYSwgMSkpIHsKKwkJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuOworCX0KIAlpZiAodnBvcnQtPnBvcnRfc3RhdGUgIT0gTFBGQ19GTE9HSSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwogCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gKEZDRl9ESVNDT1ZFUkVEIHwgRkNGX0lOX1VTRSk7CisJCXBoYmEtPmhiYV9mbGFnICY9IH5GQ0ZfRElTQ19JTlBST0dSRVNTOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJCWxwZmNfaW5pdGlhbF9mbG9naSh2cG9ydCk7CiAJfQpAQCAtMTA1NCw2ICsxMDYxLDM5IEBACiB9CiAKIC8qKgorICogbHBmY19zd19uYW1lX21hdGNoIC0gQ2hlY2sgaWYgdGhlIGZjZiBzd2l0Y2ggbmFtZSBtYXRjaC4KKyAqIEBmYWJfbmFtZTogcG9pbnRlciB0byBmYWJyaWMgbmFtZS4KKyAqIEBuZXdfZmNmX3JlY29yZDogcG9pbnRlciB0byBmY2YgcmVjb3JkLgorICoKKyAqIFRoaXMgcm91dGluZSBjb21wYXJlIHRoZSBmY2YgcmVjb3JkJ3Mgc3dpdGNoIG5hbWUgd2l0aCBwcm92aWRlZAorICogc3dpdGNoIG5hbWUuIElmIHRoZSBzd2l0Y2ggbmFtZSBhcmUgaWRlbnRpY2FsIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMgMSBlbHNlIHJldHVybiAwLgorICoqLworc3RhdGljIHVpbnQzMl90CitscGZjX3N3X25hbWVfbWF0Y2godWludDhfdCAqc3dfbmFtZSwgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQoreworCWlmICgoc3dfbmFtZVswXSA9PQorCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzAsIG5ld19mY2ZfcmVjb3JkKSkgJiYKKwkgICAgKHN3X25hbWVbMV0gPT0KKwkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8xLCBuZXdfZmNmX3JlY29yZCkpICYmCisJICAgIChzd19uYW1lWzJdID09CisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMiwgbmV3X2ZjZl9yZWNvcmQpKSAmJgorCSAgICAoc3dfbmFtZVszXSA9PQorCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzMsIG5ld19mY2ZfcmVjb3JkKSkgJiYKKwkgICAgKHN3X25hbWVbNF0gPT0KKwkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV80LCBuZXdfZmNmX3JlY29yZCkpICYmCisJICAgIChzd19uYW1lWzVdID09CisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNSwgbmV3X2ZjZl9yZWNvcmQpKSAmJgorCSAgICAoc3dfbmFtZVs2XSA9PQorCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzYsIG5ld19mY2ZfcmVjb3JkKSkgJiYKKwkgICAgKHN3X25hbWVbN10gPT0KKwkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV83LCBuZXdfZmNmX3JlY29yZCkpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisvKioKICAqIGxwZmNfbWFjX2FkZHJfbWF0Y2ggLSBDaGVjayBpZiB0aGUgZmNmIG1hYyBhZGRyZXNzIG1hdGNoLgogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKiBAbmV3X2ZjZl9yZWNvcmQ6IHBvaW50ZXIgdG8gZmNmIHJlY29yZC4KQEAgLTExMjMsNiArMTE2MywyMiBAQAogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY181LCBuZXdfZmNmX3JlY29yZCk7CiAJcGhiYS0+ZmNmLmZjZl9pbmR4ID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mY2ZfaW5kZXgsIG5ld19mY2ZfcmVjb3JkKTsKIAlwaGJhLT5mY2YucHJpb3JpdHkgPSBuZXdfZmNmX3JlY29yZC0+ZmlwX3ByaW9yaXR5OworCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVswXSA9CisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMCwgbmV3X2ZjZl9yZWNvcmQpOworCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVsxXSA9CisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMSwgbmV3X2ZjZl9yZWNvcmQpOworCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVsyXSA9CisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMiwgbmV3X2ZjZl9yZWNvcmQpOworCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVszXSA9CisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMywgbmV3X2ZjZl9yZWNvcmQpOworCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVs0XSA9CisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNCwgbmV3X2ZjZl9yZWNvcmQpOworCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVs1XSA9CisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNSwgbmV3X2ZjZl9yZWNvcmQpOworCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVs2XSA9CisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNiwgbmV3X2ZjZl9yZWNvcmQpOworCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVs3XSA9CisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNywgbmV3X2ZjZl9yZWNvcmQpOwogfQogCiAvKioKQEAgLTExNTAsNiArMTIwNiw3IEBACiAJLyogVGhlIEZDRiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIHN0YXJ0IGRpc2NvdmVyeSAqLwogCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVHSVNURVJFRCkgewogCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gKEZDRl9ESVNDT1ZFUkVEIHwgRkNGX0lOX1VTRSk7CisJCXBoYmEtPmhiYV9mbGFnICY9IH5GQ0ZfRElTQ19JTlBST0dSRVNTOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJCWlmIChwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSAhPSBMUEZDX0ZMT0dJKQogCQkJbHBmY19pbml0aWFsX2Zsb2dpKHBoYmEtPnBwb3J0KTsKQEAgLTEyMzksOSArMTI5NiwxMiBAQAogCiAJCWlmICgoY29ubl9lbnRyeS0+Y29ubl9yZWMuZmxhZ3MgJiBGQ0ZDTkNUX0ZCTk1fVkFMSUQpICYmCiAJCQkhbHBmY19mYWJfbmFtZV9tYXRjaChjb25uX2VudHJ5LT5jb25uX3JlYy5mYWJyaWNfbmFtZSwKLQkJCQluZXdfZmNmX3JlY29yZCkpCisJCQkJCSAgICAgbmV3X2ZjZl9yZWNvcmQpKQogCQkJY29udGludWU7Ci0KKwkJaWYgKChjb25uX2VudHJ5LT5jb25uX3JlYy5mbGFncyAmIEZDRkNOQ1RfU1dOTV9WQUxJRCkgJiYKKwkJCSFscGZjX3N3X25hbWVfbWF0Y2goY29ubl9lbnRyeS0+Y29ubl9yZWMuc3dpdGNoX25hbWUsCisJCQkJCSAgICBuZXdfZmNmX3JlY29yZCkpCisJCQljb250aW51ZTsKIAkJaWYgKGNvbm5fZW50cnktPmNvbm5fcmVjLmZsYWdzICYgRkNGQ05DVF9WTEFOX1ZBTElEKSB7CiAJCQkvKgogCQkJICogSWYgdGhlIHZsYW4gYml0IG1hcCBkb2VzIG5vdCBoYXZlIHRoZSBiaXQgc2V0IGZvciB0aGUKQEAgLTEzMzYsNiArMTM5Niw2MCBAQAogfQogCiAvKioKKyAqIGxwZmNfY2hlY2tfcGVuZGluZ19mY29lX2V2ZW50IC0gQ2hlY2sgaWYgdGhlcmUgaXMgcGVuZGluZyBmY29lIGV2ZW50LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAdW5yZWdfZmNmOiBVbnJlZ2lzdGVyIEZDRiBpZiBGQ0YgdGFibGUgbmVlZCB0byBiZSByZS1zY2FuZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVjayBpZiB0aGVyZSBpcyBhbnkgZmNvZSBldmVudCBwZW5kaW5nIHdoaWxlIGRyaXZlcgorICogc2NhbiBGQ0YgZW50cmllcy4gSWYgdGhlcmUgaXMgYW55IHBlbmRpbmcgZXZlbnQsIGl0IHdpbGwgcmVzdGFydCB0aGUKKyAqIEZDRiBzYW5pbmcgYW5kIHJldHVybiAxIGVsc2UgcmV0dXJuIDAuCisgKi8KK2ludAorbHBmY19jaGVja19wZW5kaW5nX2Zjb2VfZXZlbnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50OF90IHVucmVnX2ZjZikKK3sKKwlMUEZDX01CT1hRX3QgKm1ib3g7CisJaW50IHJjOworCS8qCisJICogSWYgdGhlIExpbmsgaXMgdXAgYW5kIG5vIEZDb0UgZXZlbnRzIHdoaWxlIGluIHRoZQorCSAqIEZDRiBkaXNjb3ZlcnksIG5vIG5lZWQgdG8gcmVzdGFydCBGQ0YgZGlzY292ZXJ5LgorCSAqLworCWlmICgocGhiYS0+bGlua19zdGF0ZSAgPj0gTFBGQ19MSU5LX1VQKSAmJgorCQkocGhiYS0+ZmNvZV9ldmVudHRhZyA9PSBwaGJhLT5mY29lX2V2ZW50dGFnX2F0X2ZjZl9zY2FuKSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9BVkFJTEFCTEU7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKworCWlmIChwaGJhLT5saW5rX3N0YXRlID49IExQRkNfTElOS19VUCkKKwkJbHBmY19zbGk0X3JlYWRfZmNmX3JlY29yZChwaGJhLCBMUEZDX0ZDT0VfRkNGX0dFVF9GSVJTVCk7CisKKwlpZiAodW5yZWdfZmNmKSB7CisJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9SRUdJU1RFUkVEOworCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQltYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtYm94KSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsCisJCQkJTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKKwkJCQkiMjYxMCBVTlJFR19GQ0ZJIG1ib3ggYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJbHBmY191bnJlZ19mY2ZpKG1ib3gsIHBoYmEtPmZjZi5mY2ZpKTsKKwkJbWJveC0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKwkJbWJveC0+bWJveF9jbXBsID0gbHBmY191bnJlZ2lzdGVyX2ZjZmlfY21wbDsKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3gsIE1CWF9OT1dBSVQpOworCQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAorCQkJCSIyNjExIFVOUkVHX0ZDRkkgaXNzdWUgbWJveCBmYWlsZWRcbiIpOworCQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qKgogICogbHBmY19tYnhfY21wbF9yZWFkX2ZjZl9yZWNvcmQgLSBDb21wbGV0aW9uIGhhbmRsZXIgZm9yIHJlYWRfZmNmIG1ib3guCiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqIEBtYm94cTogcG9pbnRlciB0byBtYWlsYm94IG9iamVjdC4KQEAgLTEzNjcsNiArMTQ4MSwxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdWludDE2X3Qgdmxhbl9pZDsKIAorCS8qIElmIHRoZXJlIGlzIHBlbmRpbmcgRkNvRSBldmVudCByZXN0YXJ0IEZDRiB0YWJsZSBzY2FuICovCisJaWYgKGxwZmNfY2hlY2tfcGVuZGluZ19mY29lX2V2ZW50KHBoYmEsIDApKSB7CisJCWxwZmNfc2xpNF9tYm94X2NtZF9mcmVlKHBoYmEsIG1ib3hxKTsKKwkJcmV0dXJuOworCX0KKwogCS8qIEdldCB0aGUgZmlyc3QgU0dFIGVudHJ5IGZyb20gdGhlIG5vbi1lbWJlZGRlZCBETUEgbWVtb3J5LiBUaGlzCiAJICogcm91dGluZSBvbmx5IHVzZXMgYSBzaW5nbGUgU0dFLgogCSAqLwpAQCAtMTQyNCw3ICsxNTQ0LDkgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwogCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfSU5fVVNFKSB7CiAJCWlmIChscGZjX2ZhYl9uYW1lX21hdGNoKHBoYmEtPmZjZi5mYWJyaWNfbmFtZSwKLQkJCW5ld19mY2ZfcmVjb3JkKSAmJgorCQkJCQluZXdfZmNmX3JlY29yZCkgJiYKKwkJICAgIGxwZmNfc3dfbmFtZV9tYXRjaChwaGJhLT5mY2Yuc3dpdGNoX25hbWUsCisJCQkJCW5ld19mY2ZfcmVjb3JkKSAmJgogCQkgICAgbHBmY19tYWNfYWRkcl9tYXRjaChwaGJhLCBuZXdfZmNmX3JlY29yZCkpIHsKIAkJCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfQVZBSUxBQkxFOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwpAQCAtMTQ2NCw5ICsxNTg2LDkgQEAKIAkJICogSWYgdGhlcmUgaXMgYSByZWNvcmQgd2l0aCBsb3dlciBwcmlvcml0eSB2YWx1ZSBmb3IKIAkJICogdGhlIGN1cnJlbnQgRkNGLCB1c2UgdGhhdCByZWNvcmQuCiAJCSAqLwotCQlpZiAobHBmY19mYWJfbmFtZV9tYXRjaChwaGJhLT5mY2YuZmFicmljX25hbWUsIG5ld19mY2ZfcmVjb3JkKQotCQkJJiYgKG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHkgPAotCQkJCXBoYmEtPmZjZi5wcmlvcml0eSkpIHsKKwkJaWYgKGxwZmNfZmFiX25hbWVfbWF0Y2gocGhiYS0+ZmNmLmZhYnJpY19uYW1lLAorCQkJCQluZXdfZmNmX3JlY29yZCkgJiYKKwkJICAgIChuZXdfZmNmX3JlY29yZC0+ZmlwX3ByaW9yaXR5IDwgcGhiYS0+ZmNmLnByaW9yaXR5KSkgewogCQkJLyogVXNlIHRoaXMgRkNGIHJlY29yZCAqLwogCQkJbHBmY19jb3B5X2ZjZl9yZWNvcmQocGhiYSwgbmV3X2ZjZl9yZWNvcmQpOwogCQkJcGhiYS0+ZmNmLmFkZHJfbW9kZSA9IGFkZHJfbW9kZTsKQEAgLTE1MTIsNiArMTYzNCwzOSBAQAogfQogCiAvKioKKyAqIGxwZmNfaW5pdF92cGlfY21wbCAtIENvbXBsZXRpb24gaGFuZGxlciBmb3IgaW5pdF92cGkgbWJveCBjb21tYW5kLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbWJveHE6IHBvaW50ZXIgdG8gbWFpbGJveCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgY29tcGxldGlvbiBvZiBpbml0IHZwaSBtYWlsYm94IGNvbW1hbmQuCisgKi8KK3N0YXRpYyB2b2lkCitscGZjX2luaXRfdnBpX2NtcGwoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKm1ib3hxKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IG1ib3hxLT52cG9ydDsKKwlpZiAobWJveHEtPnUubWIubWJ4U3RhdHVzKSB7CisJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLAorCQkJCUxPR19NQk9YLAorCQkJCSIyNjA5IEluaXQgVlBJIG1haWxib3ggZmFpbGVkIDB4JXhcbiIsCisJCQkJbWJveHEtPnUubWIubWJ4U3RhdHVzKTsKKwkJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX0ZBSUxFRCk7CisJCXJldHVybjsKKwl9CisJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX05FRURTX0lOSVRfVlBJOworCisJaWYgKHBoYmEtPmxpbmtfZmxhZyAmIExTX05QSVZfRkFCX1NVUFBPUlRFRCkKKwkJbHBmY19pbml0aWFsX2ZkaXNjKHZwb3J0KTsKKwllbHNlIHsKKwkJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX05PX0ZBQlJJQ19TVVBQKTsKKwkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsCisJCQlMT0dfRUxTLAorCQkJIjI2MDYgTm8gTlBJViBGYWJyaWMgc3VwcG9ydFxuIik7CisJfQorCXJldHVybjsKK30KKworLyoqCiAgKiBscGZjX3N0YXJ0X2ZkaXNjcyAtIHNlbmQgZmRpc2NzIGZvciBlYWNoIHZwb3J0cyBvbiB0aGlzIHBvcnQuCiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqCkBAIC0xNTIzLDYgKzE2NzgsOCBAQAogewogCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOwogCWludCBpOworCUxQRkNfTUJPWFFfdCAqbWJveHE7CisJaW50IHJjOwogCiAJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKIAlpZiAodnBvcnRzICE9IE5VTEwpIHsKQEAgLTE1NDAsNiArMTY5NywyOSBAQAogCQkJCQkJICAgICBGQ19WUE9SVF9MSU5LRE9XTik7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAodnBvcnRzW2ldLT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEkpIHsKKwkJCQltYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCFtYm94cSkgeworCQkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0c1tpXSwgS0VSTl9FUlIsCisJCQkJCUxPR19NQk9YLCAiMjYwNyBGYWlsZWQgdG8gYWxsb2NhdGUgIgorCQkJCQkiaW5pdF92cGkgbWFpbGJveFxuIik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlscGZjX2luaXRfdnBpKHBoYmEsIG1ib3hxLCB2cG9ydHNbaV0tPnZwaSk7CisJCQkJbWJveHEtPnZwb3J0ID0gdnBvcnRzW2ldOworCQkJCW1ib3hxLT5tYm94X2NtcGwgPSBscGZjX2luaXRfdnBpX2NtcGw7CisJCQkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3hxLAorCQkJCQlNQlhfTk9XQUlUKTsKKwkJCQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgeworCQkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0c1tpXSwgS0VSTl9FUlIsCisJCQkJCUxPR19NQk9YLCAiMjYwOCBGYWlsZWQgdG8gaXNzdWUgIgorCQkJCQkiaW5pdF92cGkgbWFpbGJveFxuIik7CisJCQkJCW1lbXBvb2xfZnJlZShtYm94cSwKKwkJCQkJCXBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmIChwaGJhLT5saW5rX2ZsYWcgJiBMU19OUElWX0ZBQl9TVVBQT1JURUQpCiAJCQkJbHBmY19pbml0aWFsX2ZkaXNjKHZwb3J0c1tpXSk7CiAJCQllbHNlIHsKQEAgLTE3NjksNiArMTk0OSw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7CisJCXZwb3J0LT5wb3J0X3N0YXRlID0gTFBGQ19WUE9SVF9VTktOT1dOOwogCQkvKgogCQkgKiBBZGQgdGhlIGRyaXZlcidzIGRlZmF1bHQgRkNGIHJlY29yZCBhdCBGQ0YgaW5kZXggMCBub3cuIFRoaXMKIAkJICogaXMgcGhhc2UgMSBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHBvcnQgRkNGIGluZGV4IDAgYW5kIGRyaXZlcgpAQCAtMTgwNCw2ICsxOTg1LDEyIEBACiAJCSAqIFRoZSBkcml2ZXIgaXMgZXhwZWN0ZWQgdG8gZG8gRklQL0ZDRi4gQ2FsbCB0aGUgcG9ydAogCQkgKiBhbmQgZ2V0IHRoZSBGQ0YgVGFibGUuCiAJCSAqLworCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJaWYgKHBoYmEtPmhiYV9mbGFnICYgRkNGX0RJU0NfSU5QUk9HUkVTUykgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJCXJldHVybjsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQlyYyA9IGxwZmNfc2xpNF9yZWFkX2ZjZl9yZWNvcmQocGhiYSwKIAkJCQkJTFBGQ19GQ09FX0ZDRl9HRVRfRklSU1QpOwogCQlpZiAocmMpCkBAIC0yMTEzLDEzICsyMzAwLDE1IEBACiAJTFBGQ19NQk9YUV90ICpwbWIgPSBOVUxMOwogCU1BSUxCT1hfdCAqbWI7CiAJc3RydWN0IHN0YXRpY192cG9ydF9pbmZvICp2cG9ydF9pbmZvOwotCWludCByYywgaTsKKwlpbnQgcmMgPSAwLCBpOwogCXN0cnVjdCBmY192cG9ydF9pZGVudGlmaWVycyB2cG9ydF9pZDsKIAlzdHJ1Y3QgZmNfdnBvcnQgKm5ld19mY192cG9ydDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQ7CiAJdWludDE2X3Qgb2Zmc2V0ID0gMDsKIAl1aW50OF90ICp2cG9ydF9idWZmOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbXA7CisJdWludDMyX3QgYnl0ZV9jb3VudCA9IDA7CiAKIAlwbWIgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwogCWlmICghcG1iKSB7CkBAIC0yMTQyLDcgKzIzMzEsOSBAQAogCiAJdnBvcnRfYnVmZiA9ICh1aW50OF90ICopIHZwb3J0X2luZm87CiAJZG8gewotCQlscGZjX2R1bXBfc3RhdGljX3Zwb3J0KHBoYmEsIHBtYiwgb2Zmc2V0KTsKKwkJaWYgKGxwZmNfZHVtcF9zdGF0aWNfdnBvcnQocGhiYSwgcG1iLCBvZmZzZXQpKQorCQkJZ290byBvdXQ7CisKIAkJcG1iLT52cG9ydCA9IHBoYmEtPnBwb3J0OwogCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChwaGJhLCBwbWIsIExQRkNfTUJPWF9UTU8pOwogCkBAIC0yMTU1LDE3ICsyMzQ2LDMwIEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWlmIChtYi0+dW4udmFyRG1wLndvcmRfY250ID4KLQkJCXNpemVvZihzdHJ1Y3Qgc3RhdGljX3Zwb3J0X2luZm8pIC0gb2Zmc2V0KQotCQkJbWItPnVuLnZhckRtcC53b3JkX2NudCA9Ci0JCQlzaXplb2Yoc3RydWN0IHN0YXRpY192cG9ydF9pbmZvKSAtIG9mZnNldDsKKwkJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgeworCQkJYnl0ZV9jb3VudCA9IHBtYi0+dS5tcWUudW4ubWJfd29yZHNbNV07CisJCQltcCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgcG1iLT5jb250ZXh0MjsKKwkJCWlmIChieXRlX2NvdW50ID4gc2l6ZW9mKHN0cnVjdCBzdGF0aWNfdnBvcnRfaW5mbykgLQorCQkJCQlvZmZzZXQpCisJCQkJYnl0ZV9jb3VudCA9IHNpemVvZihzdHJ1Y3Qgc3RhdGljX3Zwb3J0X2luZm8pCisJCQkJCS0gb2Zmc2V0OworCQkJbWVtY3B5KHZwb3J0X2J1ZmYgKyBvZmZzZXQsIG1wLT52aXJ0LCBieXRlX2NvdW50KTsKKwkJCW9mZnNldCArPSBieXRlX2NvdW50OworCQl9IGVsc2UgeworCQkJaWYgKG1iLT51bi52YXJEbXAud29yZF9jbnQgPgorCQkJCXNpemVvZihzdHJ1Y3Qgc3RhdGljX3Zwb3J0X2luZm8pIC0gb2Zmc2V0KQorCQkJCW1iLT51bi52YXJEbXAud29yZF9jbnQgPQorCQkJCQlzaXplb2Yoc3RydWN0IHN0YXRpY192cG9ydF9pbmZvKQorCQkJCQkJLSBvZmZzZXQ7CisJCQlieXRlX2NvdW50ID0gbWItPnVuLnZhckRtcC53b3JkX2NudDsKKwkJCWxwZmNfc2xpX3BjaW1lbV9iY29weSgoKHVpbnQ4X3QgKiltYikgKyBETVBfUlNQX09GRlNFVCwKKwkJCQl2cG9ydF9idWZmICsgb2Zmc2V0LAorCQkJCWJ5dGVfY291bnQpOwogCi0JCWxwZmNfc2xpX3BjaW1lbV9iY29weSgoKHVpbnQ4X3QgKiltYikgKyBETVBfUlNQX09GRlNFVCwKLQkJCXZwb3J0X2J1ZmYgKyBvZmZzZXQsCi0JCQltYi0+dW4udmFyRG1wLndvcmRfY250KTsKLQkJb2Zmc2V0ICs9IG1iLT51bi52YXJEbXAud29yZF9jbnQ7CisJCQlvZmZzZXQgKz0gYnl0ZV9jb3VudDsKKwkJfQogCi0JfSB3aGlsZSAobWItPnVuLnZhckRtcC53b3JkX2NudCAmJgorCX0gd2hpbGUgKGJ5dGVfY291bnQgJiYKIAkJb2Zmc2V0IDwgc2l6ZW9mKHN0cnVjdCBzdGF0aWNfdnBvcnRfaW5mbykpOwogCiAKQEAgLTIxOTgsNyArMjQwMiw3IEBACiAJCWlmICghbmV3X2ZjX3Zwb3J0KSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfSU5JVCwKIAkJCQkiMDU0NiBscGZjX2NyZWF0ZV9zdGF0aWNfdnBvcnQgZmFpbGVkIHRvIgotCQkJCSIgY3JlYXRlIHZwb3J0IFxuIik7CisJCQkJIiBjcmVhdGUgdnBvcnRcbiIpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMjIwNywxNiArMjQxMSwxNSBAQAogCX0KIAogb3V0OgotCS8qCi0JICogSWYgdGhpcyBpcyB0aW1lZCBvdXQgY29tbWFuZCwgc2V0dGluZyBOVUxMIHRvIGNvbnRleHQyIHRlbGwgU0xJCi0JICogbGF5ZXIgbm90IHRvIHVzZSB0aGlzIGJ1ZmZlci4KLQkgKi8KLQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQlwbWItPmNvbnRleHQyID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCWtmcmVlKHZwb3J0X2luZm8pOwotCWlmIChyYyAhPSBNQlhfVElNRU9VVCkKKwlpZiAocmMgIT0gTUJYX1RJTUVPVVQpIHsKKwkJaWYgKHBtYi0+Y29udGV4dDIpIHsKKwkJCW1wID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBwbWItPmNvbnRleHQyOworCQkJbHBmY19tYnVmX2ZyZWUocGhiYSwgbXAtPnZpcnQsIG1wLT5waHlzKTsKKwkJCWtmcmVlKG1wKTsKKwkJfQogCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwl9CiAKIAlyZXR1cm47CiB9CkBAIC00MzYwLDcgKzQ1NjMsNyBAQAogCWZjb2VfcGFyYW1faGRyID0gKHN0cnVjdCBscGZjX2ZpcF9wYXJhbV9oZHIgKikKIAkJYnVmZjsKIAlmY29lX3BhcmFtID0gKHN0cnVjdCBscGZjX2Zjb2VfcGFyYW1zICopCi0JCWJ1ZmYgKyBzaXplb2Yoc3RydWN0IGxwZmNfZmlwX3BhcmFtX2hkcik7CisJCShidWZmICsgc2l6ZW9mKHN0cnVjdCBscGZjX2ZpcF9wYXJhbV9oZHIpKTsKIAogCWlmICgoZmNvZV9wYXJhbV9oZHItPnBhcm1fdmVyc2lvbiAhPSBGSVBQX1ZFUlNJT04pIHx8CiAJCShmY29lX3BhcmFtX2hkci0+bGVuZ3RoICE9IEZDT0VfUEFSQU1fTEVOR1RIKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAppbmRleCA4YTNhMDI2Li5jY2IyNjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCkBAIC0yNDk2LDggKzI0OTYsOCBAQAogI2RlZmluZSAgRE1QX1ZQT1JUX1JFR0lPTl9TSVpFCSAweDIwMAogI2RlZmluZSAgRE1QX01CT1hfT0ZGU0VUX1dPUkQJIDB4NQogCi0jZGVmaW5lICBETVBfUkVHSU9OX0ZDT0VQQVJBTQkgMHgxNyAgIC8qIGZjb2UgcGFyYW0gcmVnaW9uICovCi0jZGVmaW5lICBETVBfRkNPRVBBUkFNX1JHTl9TSVpFCSAweDQwMAorI2RlZmluZSAgRE1QX1JFR0lPTl8yMwkgCSAweDE3ICAgLyogZmNvZSBwYXJhbSAgYW5kIHBvcnQgc3RhdGUgcmVnaW9uICovCisjZGVmaW5lICBETVBfUkdOMjNfU0laRQkgCSAweDQwMAogCiAjZGVmaW5lICBXQUtFX1VQX1BBUk1TX1JFR0lPTl9JRCAgICA0CiAjZGVmaW5lICBXQUtFX1VQX1BBUk1TX1dPUkRfU0laRSAgIDE1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaAppbmRleCAyOTk1ZDEyLi4zNjg5ZWVlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCkBAIC01Miw2ICs1MiwzMSBAQAogCXVpbnQzMl90IGFkZHJfaGk7CiB9OwogCisjZGVmaW5lIExQRkNfU0xJUkVWX0NPTkZfV09SRAkweDU4CitzdHJ1Y3QgbHBmY19zbGlfaW50ZiB7CisJdWludDMyX3Qgd29yZDA7CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfaWZ0eXBlX01BU0sgCTB4MDAwMDAwMDcKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9pZnR5cGVfU0hJRlQJMAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmdHlwZV9XT1JECXdvcmQwCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfcmV2X01BU0sgCQkweDAwMDAwMDBmCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfcmV2X1NISUZUCQk0CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfcmV2X1dPUkQJCXdvcmQwCisjZGVmaW5lIExQRkNfU0xJUkVWX0NPTkZfU0xJNAk0CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmFtaWx5X01BU0sgCTB4MDAwMDAwZmYKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9mYW1pbHlfU0hJRlQJOAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZhbWlseV9XT1JECXdvcmQwCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdDFfTUFTSyAJMHgwMDAwMDBmZgorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXQxX1NISUZUCTE2CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdDFfV09SRAl3b3JkMAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXQyX01BU0sgCTB4MDAwMDAwMWYKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0Ml9TSElGVAkyNAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXQyX1dPUkQJd29yZDAKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl92YWxpZF9NQVNLIAkweDAwMDAwMDA3CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfdmFsaWRfU0hJRlQJMjkKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl92YWxpZF9XT1JECXdvcmQwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfVkFMSUQJCTYKK307CisKICNkZWZpbmUgTFBGQ19TTEk0X0JBUjAJCTEKICNkZWZpbmUgTFBGQ19TTEk0X0JBUjEJCTIKICNkZWZpbmUgTFBGQ19TTEk0X0JBUjIJCTQKQEAgLTExODEsNiArMTIwNiwzMiBAQAogI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfZmNmX3N0YXRlX01BU0sJCTB4MDAwMEZGRkYKICNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX2ZjZl9zdGF0ZV9XT1JECQl3b3JkOAogCXVpbnQ4X3Qgdmxhbl9iaXRtYXBbNTEyXTsKKwl1aW50MzJfdCB3b3JkMTM3OworI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMF9TSElGVAkwCisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8wX01BU0sJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMF9XT1JECXdvcmQxMzcKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzFfU0hJRlQJOAorI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMV9NQVNLCTB4MDAwMDAwRkYKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzFfV09SRAl3b3JkMTM3CisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8yX1NISUZUCTE2CisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8yX01BU0sJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMl9XT1JECXdvcmQxMzcKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzNfU0hJRlQJMjQKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzNfTUFTSwkweDAwMDAwMEZGCisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8zX1dPUkQJd29yZDEzNworCXVpbnQzMl90IHdvcmQxMzg7CisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV80X1NISUZUCTAKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzRfTUFTSwkweDAwMDAwMEZGCisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV80X1dPUkQJd29yZDEzOAorI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNV9TSElGVAk4CisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV81X01BU0sJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNV9XT1JECXdvcmQxMzgKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzZfU0hJRlQJMTYKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzZfTUFTSwkweDAwMDAwMEZGCisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV82X1dPUkQJd29yZDEzOAorI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfN19TSElGVAkyNAorI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfN19NQVNLCTB4MDAwMDAwRkYKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzdfV09SRAl3b3JkMTM4CiB9OwogCiBzdHJ1Y3QgbHBmY19tYnhfcmVhZF9mY2ZfdGJsIHsKQEAgLTEzODUsMjAgKzE0MzYsMTcgQEAKIAogc3RydWN0IGxwZmNfbWJ4X3Jlc3VtZV9ycGkgewogCXVpbnQzMl90IHdvcmQxOwotI2RlZmluZSBscGZjX3Jlc3VtZV9ycGlfcnBpX1NISUZUCTAKLSNkZWZpbmUgbHBmY19yZXN1bWVfcnBpX3JwaV9NQVNLCTB4MDAwMEZGRkYKLSNkZWZpbmUgbHBmY19yZXN1bWVfcnBpX3JwaV9XT1JECXdvcmQxCisjZGVmaW5lIGxwZmNfcmVzdW1lX3JwaV9pbmRleF9TSElGVAkwCisjZGVmaW5lIGxwZmNfcmVzdW1lX3JwaV9pbmRleF9NQVNLCTB4MDAwMEZGRkYKKyNkZWZpbmUgbHBmY19yZXN1bWVfcnBpX2luZGV4X1dPUkQJd29yZDEKKyNkZWZpbmUgbHBmY19yZXN1bWVfcnBpX2lpX1NISUZUCTMwCisjZGVmaW5lIGxwZmNfcmVzdW1lX3JwaV9paV9NQVNLCQkweDAwMDAwMDAzCisjZGVmaW5lIGxwZmNfcmVzdW1lX3JwaV9paV9XT1JECQl3b3JkMQorI2RlZmluZSBSRVNVTUVfSU5ERVhfUlBJCQkwCisjZGVmaW5lIFJFU1VNRV9JTkRFWF9WUEkJCTEKKyNkZWZpbmUgUkVTVU1FX0lOREVYX1ZGSQkJMgorI2RlZmluZSBSRVNVTUVfSU5ERVhfRkNGSQkJMwogCXVpbnQzMl90IGV2ZW50X3RhZzsKLQl1aW50MzJfdCB3b3JkM19yc3ZkOwotCXVpbnQzMl90IHdvcmQ0X3JzdmQ7Ci0JdWludDMyX3Qgd29yZDVfcnN2ZDsKLQl1aW50MzJfdCB3b3JkNjsKLSNkZWZpbmUgbHBmY19yZXN1bWVfcnBpX3ZwaV9TSElGVAkwCi0jZGVmaW5lIGxwZmNfcmVzdW1lX3JwaV92cGlfTUFTSwkweDAwMDBGRkZGCi0jZGVmaW5lIGxwZmNfcmVzdW1lX3JwaV92cGlfV09SRAl3b3JkNgotI2RlZmluZSBscGZjX3Jlc3VtZV9ycGlfdmZpX1NISUZUCTE2Ci0jZGVmaW5lIGxwZmNfcmVzdW1lX3JwaV92ZmlfTUFTSwkweDAwMDBGRkZGCi0jZGVmaW5lIGxwZmNfcmVzdW1lX3JwaV92ZmlfV09SRAl3b3JkNgogfTsKIAogI2RlZmluZSBSRUdfRkNGX0lOVkFMSURfUUlECTB4RkZGRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwppbmRleCBmYzY3Y2M2Li41NjJkOGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwpAQCAtMjExLDcgKzIxMSw3IEBACiAJCWdvdG8gb3V0X2ZyZWVfbWJveDsKIAogCWRvIHsKLQkJbHBmY19kdW1wX21lbShwaGJhLCBwbWIsIG9mZnNldCk7CisJCWxwZmNfZHVtcF9tZW0ocGhiYSwgcG1iLCBvZmZzZXQsIERNUF9SRUdJT05fVlBEKTsKIAkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX1BPTEwpOwogCiAJCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgewpAQCAtNDI1LDYgKzQyNSw5IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAorCS8qIENoZWNrIGlmIHRoZSBwb3J0IGlzIGRpc2FibGVkICovCisJbHBmY19zbGlfcmVhZF9saW5rX3N0ZShwaGJhKTsKKwogCS8qIFJlc2V0IHRoZSBERlRfSEJBX1FfREVQVEggdG8gdGhlIG1heCB4cmkgICovCiAJaWYgKHBoYmEtPmNmZ19oYmFfcXVldWVfZGVwdGggPiAobWItPnVuLnZhclJkQ29uZmlnLm1heF94cmkrMSkpCiAJCXBoYmEtPmNmZ19oYmFfcXVldWVfZGVwdGggPQpAQCAtNTI0LDI3ICs1MjcsNDYgQEAKIAkvKiBTZXQgdXAgZXJyb3IgYXR0ZW50aW9uIChFUkFUVCkgcG9sbGluZyB0aW1lciAqLwogCW1vZF90aW1lcigmcGhiYS0+ZXJhdHRfcG9sbCwgamlmZmllcyArIEhaICogTFBGQ19FUkFUVF9QT0xMX0lOVEVSVkFMKTsKIAotCWxwZmNfaW5pdF9saW5rKHBoYmEsIHBtYiwgcGhiYS0+Y2ZnX3RvcG9sb2d5LCBwaGJhLT5jZmdfbGlua19zcGVlZCk7Ci0JcG1iLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOwotCWxwZmNfc2V0X2xvb3BiYWNrX2ZsYWcocGhiYSk7Ci0JcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX05PV0FJVCk7Ci0JaWYgKHJjICE9IE1CWF9TVUNDRVNTKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJaWYgKHBoYmEtPmhiYV9mbGFnICYgTElOS19ESVNBQkxFRCkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwKKwkJCUtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCSIyNTk4IEFkYXB0ZXIgTGluayBpcyBkaXNhYmxlZC5cbiIpOworCQlscGZjX2Rvd25fbGluayhwaGJhLCBwbWIpOworCQlwbWItPm1ib3hfY21wbCA9IGxwZmNfc2xpX2RlZl9tYm94X2NtcGw7CisJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9OT1dBSVQpOworCQlpZiAoKHJjICE9IE1CWF9TVUNDRVNTKSAmJiAocmMgIT0gTUJYX0JVU1kpKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwKKwkJCUtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCSIyNTk5IEFkYXB0ZXIgZmFpbGVkIHRvIGlzc3VlIERPV05fTElOSyIKKwkJCSIgbWJveCBjb21tYW5kIHJjIDB4JXhcbiIsIHJjKTsKKworCQkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0gZWxzZSB7CisJCWxwZmNfaW5pdF9saW5rKHBoYmEsIHBtYiwgcGhiYS0+Y2ZnX3RvcG9sb2d5LAorCQkJcGhiYS0+Y2ZnX2xpbmtfc3BlZWQpOworCQlwbWItPm1ib3hfY21wbCA9IGxwZmNfc2xpX2RlZl9tYm94X2NtcGw7CisJCWxwZmNfc2V0X2xvb3BiYWNrX2ZsYWcocGhiYSk7CisJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9OT1dBSVQpOworCQlpZiAocmMgIT0gTUJYX1NVQ0NFU1MpIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCiAJCQkJIjA0NTQgQWRhcHRlciBmYWlsZWQgdG8gaW5pdCwgbWJ4Q21kIHgleCAiCiAJCQkJIklOSVRfTElOSywgbWJ4U3RhdHVzIHgleFxuIiwKIAkJCQltYi0+bWJ4Q29tbWFuZCwgbWItPm1ieFN0YXR1cyk7CiAKLQkJLyogQ2xlYXIgYWxsIGludGVycnVwdCBlbmFibGUgY29uZGl0aW9ucyAqLwotCQl3cml0ZWwoMCwgcGhiYS0+SENyZWdhZGRyKTsKLQkJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KLQkJLyogQ2xlYXIgYWxsIHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCQl3cml0ZWwoMHhmZmZmZmZmZiwgcGhiYS0+SEFyZWdhZGRyKTsKLQkJcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwkJCS8qIENsZWFyIGFsbCBpbnRlcnJ1cHQgZW5hYmxlIGNvbmRpdGlvbnMgKi8KKwkJCXdyaXRlbCgwLCBwaGJhLT5IQ3JlZ2FkZHIpOworCQkJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwkJCS8qIENsZWFyIGFsbCBwZW5kaW5nIGludGVycnVwdHMgKi8KKwkJCXdyaXRlbCgweGZmZmZmZmZmLCBwaGJhLT5IQXJlZ2FkZHIpOworCQkJcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsgLyogZmx1c2ggKi8KIAotCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7Ci0JCWlmIChyYyAhPSBNQlhfQlVTWSkKLQkJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwotCQlyZXR1cm4gLUVJTzsKKwkJCXBoYmEtPmxpbmtfc3RhdGUgPSBMUEZDX0hCQV9FUlJPUjsKKwkJCWlmIChyYyAhPSBNQlhfQlVTWSkKKwkJCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAJfQogCS8qIE1CT1ggYnVmZmVyIHdpbGwgYmUgZnJlZWQgaW4gbWJveCBjb21wbCAqLwogCXBtYiA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CkBAIC01NTgsNyArNTgwLDcgQEAKIAkJCQlLRVJOX0VSUiwKIAkJCQlMT0dfSU5JVCwKIAkJCQkiMDQ1NiBBZGFwdGVyIGZhaWxlZCB0byBpc3N1ZSAiCi0JCQkJIkFTWU5DRVZUX0VOQUJMRSBtYm94IHN0YXR1cyB4JXggXG4uIiwKKwkJCQkiQVNZTkNFVlRfRU5BQkxFIG1ib3ggc3RhdHVzIHgleFxuIiwKIAkJCQlyYyk7CiAJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCX0KQEAgLTU3Miw3ICs1OTQsNyBAQAogCiAJaWYgKChyYyAhPSBNQlhfQlVTWSkgJiYgKHJjICE9IE1CWF9TVUNDRVNTKSkgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULCAiMDQzNSBBZGFwdGVyIGZhaWxlZCAiCi0JCQkJInRvIGdldCBPcHRpb24gUk9NIHZlcnNpb24gc3RhdHVzIHgleFxuLiIsIHJjKTsKKwkJCQkidG8gZ2V0IE9wdGlvbiBST00gdmVyc2lvbiBzdGF0dXMgeCV4XG4iLCByYyk7CiAJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCX0KIApAQCAtMjEzMyw2ICsyMTU1LDggQEAKIAkJCXZwb3J0c1tpXS0+ZmNfZmxhZyAmPSB+RkNfT0ZGTElORV9NT0RFOwogCQkJaWYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19OUElWX0VOQUJMRUQpCiAJCQkJdnBvcnRzW2ldLT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KQorCQkJCXZwb3J0c1tpXS0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKIAkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJfQogCQlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOwpAQCAtMjgwNyw2ICsyODMxLDcgQEAKIAlhdHRfdHlwZSA9IGxwZmNfc2xpNF9wYXJzZV9sYXR0X3R5cGUocGhiYSwgYWNxZV9saW5rKTsKIAlpZiAoYXR0X3R5cGUgIT0gQVRfTElOS19ET1dOICYmIGF0dF90eXBlICE9IEFUX0xJTktfVVApCiAJCXJldHVybjsKKwlwaGJhLT5mY29lX2V2ZW50dGFnID0gYWNxZV9saW5rLT5ldmVudF90YWc7CiAJcG1iID0gKExQRkNfTUJPWFFfdCAqKW1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwbWIpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLApAQCAtMjg5NCwxOCArMjkxOSwyMCBAQAogCXVpbnQ4X3QgZXZlbnRfdHlwZSA9IGJmX2dldChscGZjX2FjcWVfZmNvZV9ldmVudF90eXBlLCBhY3FlX2Zjb2UpOwogCWludCByYzsKIAorCXBoYmEtPmZjb2VfZXZlbnR0YWcgPSBhY3FlX2Zjb2UtPmV2ZW50X3RhZzsKIAlzd2l0Y2ggKGV2ZW50X3R5cGUpIHsKIAljYXNlIExQRkNfRkNPRV9FVkVOVF9UWVBFX05FV19GQ0Y6CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKLQkJCSIyNTQ2IE5ldyBGQ0YgZm91bmQgaW5kZXggMHgleCB0YWcgMHgleCBcbiIsCisJCQkiMjU0NiBOZXcgRkNGIGZvdW5kIGluZGV4IDB4JXggdGFnIDB4JXhcbiIsCiAJCQlhY3FlX2Zjb2UtPmZjZl9pbmRleCwKIAkJCWFjcWVfZmNvZS0+ZXZlbnRfdGFnKTsKIAkJLyoKLQkJICogSWYgdGhlIGN1cnJlbnQgRkNGIGlzIGluIGRpc2NvdmVyZWQgc3RhdGUsCi0JCSAqIGRvIG5vdGhpbmcuCisJCSAqIElmIHRoZSBjdXJyZW50IEZDRiBpcyBpbiBkaXNjb3ZlcmVkIHN0YXRlLCBvcgorCQkgKiBGQ0YgZGlzY292ZXJ5IGlzIGluIHByb2dyZXNzIGRvIG5vdGhpbmcuCiAJCSAqLwogCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9ESVNDT1ZFUkVEKSB7CisJCWlmICgocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0RJU0NPVkVSRUQpIHx8CisJCSAgIChwaGJhLT5oYmFfZmxhZyAmIEZDRl9ESVNDX0lOUFJPR1JFU1MpKSB7CiAJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI5MjIsNyArMjk0OSw3IEBACiAKIAljYXNlIExQRkNfRkNPRV9FVkVOVF9UWVBFX0ZDRl9UQUJMRV9GVUxMOgogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCi0JCQkiMjU0OCBGQ0YgVGFibGUgZnVsbCBjb3VudCAweCV4IHRhZyAweCV4IFxuIiwKKwkJCSIyNTQ4IEZDRiBUYWJsZSBmdWxsIGNvdW50IDB4JXggdGFnIDB4JXhcbiIsCiAJCQliZl9nZXQobHBmY19hY3FlX2Zjb2VfZmNmX2NvdW50LCBhY3FlX2Zjb2UpLAogCQkJYWNxZV9mY29lLT5ldmVudF90YWcpOwogCQlicmVhazsKQEAgLTI5MzAsNyArMjk1Nyw3IEBACiAJY2FzZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9GQ0ZfREVBRDoKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZLAogCQkJIjI1NDkgRkNGIGRpc2Nvbm5lY3RlZCBmcm9uIG5ldHdvcmsgaW5kZXggMHgleCIKLQkJCSIgdGFnIDB4JXggXG4iLCBhY3FlX2Zjb2UtPmZjZl9pbmRleCwKKwkJCSIgdGFnIDB4JXhcbiIsIGFjcWVfZmNvZS0+ZmNmX2luZGV4LAogCQkJYWNxZV9mY29lLT5ldmVudF90YWcpOwogCQkvKiBJZiB0aGUgZXZlbnQgaXMgbm90IGZvciBjdXJyZW50bHkgdXNlZCBmY2YgZG8gbm90aGluZyAqLwogCQlpZiAocGhiYS0+ZmNmLmZjZl9pbmR4ICE9IGFjcWVfZmNvZS0+ZmNmX2luZGV4KQpAQCAtNDEzMCw4ICs0MTU3LDcgQEAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIEhCQSBzdHJ1Y3R1cmUgKi8KIAlwaGJhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfaGJhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwaGJhKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJIjE0MTcgRmFpbGVkIHRvIGFsbG9jYXRlIGhiYSBzdHJ1Y3QuXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGhiYSBzdHJ1Y3RcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTQxNDUsNiArNDE3MSw5IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCW11dGV4X2luaXQoJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmcGhiYS0+Y3RfZXZfd2FpdGVycyk7CisKIAlyZXR1cm4gcGhiYTsKIH0KIApAQCAtNDQ4OSwyMyArNDUxOCw2IEBACiAJaWYgKCFwaGJhLT5zbGk0X2hiYS5TVEFyZWdhZGRyKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIFdpdGggdW5jb3ZlcmFibGUgZXJyb3IsIGxvZyB0aGUgZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIGVycm9yICovCi0Jb25sbnJlZzAgPSByZWFkbChwaGJhLT5zbGk0X2hiYS5PTkxJTkUwcmVnYWRkcik7Ci0Jb25sbnJlZzEgPSByZWFkbChwaGJhLT5zbGk0X2hiYS5PTkxJTkUxcmVnYWRkcik7Ci0JaWYgKChvbmxucmVnMCAhPSBMUEZDX09OTElORV9ORVJSKSB8fCAob25sbnJlZzEgIT0gTFBGQ19PTkxJTkVfTkVSUikpIHsKLQkJdWVycmxvX3JlZy53b3JkMCA9IHJlYWRsKHBoYmEtPnNsaTRfaGJhLlVFUlJMT3JlZ2FkZHIpOwotCQl1ZXJyaGlfcmVnLndvcmQwID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuVUVSUkhJcmVnYWRkcik7Ci0JCWlmICh1ZXJybG9fcmVnLndvcmQwIHx8IHVlcnJoaV9yZWcud29yZDApIHsKLQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJCSIxNDIyIEhCQSBVbnJlY292ZXJhYmxlIGVycm9yOiAiCi0JCQkJCSJ1ZXJyX2xvX3JlZz0weCV4LCB1ZXJyX2hpX3JlZz0weCV4LCAiCi0JCQkJCSJvbmxpbmUwX3JlZz0weCV4LCBvbmxpbmUxX3JlZz0weCV4XG4iLAotCQkJCQl1ZXJybG9fcmVnLndvcmQwLCB1ZXJyaGlfcmVnLndvcmQwLAotCQkJCQlvbmxucmVnMCwgb25sbnJlZzEpOwotCQl9Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQogCS8qIFdhaXQgdXAgdG8gMzAgc2Vjb25kcyBmb3IgdGhlIFNMSSBQb3J0IFBPU1QgZG9uZSBhbmQgcmVhZHkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMzAwMDsgaSsrKSB7CiAJCXN0YV9yZWcud29yZDAgPSByZWFkbChwaGJhLT5zbGk0X2hiYS5TVEFyZWdhZGRyKTsKQEAgLTQ1NDUsNiArNDU1NywyMyBAQAogCQkJYmZfZ2V0KGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwxLCAmc2NyYXRjaHBhZCksCiAJCQliZl9nZXQobHBmY19zY3JhdGNocGFkX2ZlYXR1cmVsZXZlbDIsICZzY3JhdGNocGFkKSk7CiAKKwkvKiBXaXRoIHVuY292ZXJhYmxlIGVycm9yLCBsb2cgdGhlIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBlcnJvciAqLworCW9ubG5yZWcwID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuT05MSU5FMHJlZ2FkZHIpOworCW9ubG5yZWcxID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuT05MSU5FMXJlZ2FkZHIpOworCWlmICgob25sbnJlZzAgIT0gTFBGQ19PTkxJTkVfTkVSUikgfHwgKG9ubG5yZWcxICE9IExQRkNfT05MSU5FX05FUlIpKSB7CisJCXVlcnJsb19yZWcud29yZDAgPSByZWFkbChwaGJhLT5zbGk0X2hiYS5VRVJSTE9yZWdhZGRyKTsKKwkJdWVycmhpX3JlZy53b3JkMCA9IHJlYWRsKHBoYmEtPnNsaTRfaGJhLlVFUlJISXJlZ2FkZHIpOworCQlpZiAodWVycmxvX3JlZy53b3JkMCB8fCB1ZXJyaGlfcmVnLndvcmQwKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCQkiMTQyMiBIQkEgVW5yZWNvdmVyYWJsZSBlcnJvcjogIgorCQkJCQkidWVycl9sb19yZWc9MHgleCwgdWVycl9oaV9yZWc9MHgleCwgIgorCQkJCQkib25saW5lMF9yZWc9MHgleCwgb25saW5lMV9yZWc9MHgleFxuIiwKKwkJCQkJdWVycmxvX3JlZy53b3JkMCwgdWVycmhpX3JlZy53b3JkMCwKKwkJCQkJb25sbnJlZzAsIG9ubG5yZWcxKTsKKwkJfQorCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAlyZXR1cm4gcG9ydF9lcnJvcjsKIH0KIApAQCAtNzM0Nyw2ICs3Mzc2LDkgQEAKIAkvKiBQZXJmb3JtIHBvc3QgaW5pdGlhbGl6YXRpb24gc2V0dXAgKi8KIAlscGZjX3Bvc3RfaW5pdF9zZXR1cChwaGJhKTsKIAorCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBzdGF0aWMgdnBvcnRzIHRvIGJlIGNyZWF0ZWQuICovCisJbHBmY19jcmVhdGVfc3RhdGljX3Zwb3J0KHBoYmEpOworCiAJcmV0dXJuIDA7CiAKIG91dF9kaXNhYmxlX2ludHI6CkBAIC03NjM2LDE5ICs3NjY4LDE3IEBACiBscGZjX3BjaV9wcm9iZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwaWQpCiB7CiAJaW50IHJjOwotCXVpbnQxNl90IGRldl9pZDsKKwlzdHJ1Y3QgbHBmY19zbGlfaW50ZiBpbnRmOwogCi0JaWYgKHBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9ERVZJQ0VfSUQsICZkZXZfaWQpKQorCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgTFBGQ19TTElSRVZfQ09ORl9XT1JELCAmaW50Zi53b3JkMCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0Jc3dpdGNoIChkZXZfaWQpIHsKLQljYXNlIFBDSV9ERVZJQ0VfSURfVElHRVJTSEFSSzoKKwlpZiAoKGJmX2dldChscGZjX3NsaV9pbnRmX3ZhbGlkLCAmaW50ZikgPT0gTFBGQ19TTElfSU5URl9WQUxJRCkgJiYKKwkJKGJmX2dldChscGZjX3NsaV9pbnRmX3JldiwgJmludGYpID09IExQRkNfU0xJUkVWX0NPTkZfU0xJNCkpCiAJCXJjID0gbHBmY19wY2lfcHJvYmVfb25lX3M0KHBkZXYsIHBpZCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CisJZWxzZQogCQlyYyA9IGxwZmNfcGNpX3Byb2JlX29uZV9zMyhwZGV2LCBwaWQpOwotCQlicmVhazsKLQl9CisKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKaW5kZXggMzQyMzU3MS4uMWFiNDA1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKQEAgLTUyLDQ4ICs1Miw4NSBAQAogICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIGR1bXBpbmcgbGlzdCBvZiBzdGF0aWMKICAqIHZwb3J0cyB0byBiZSBjcmVhdGVkLgogICoqLwotdm9pZAoraW50CiBscGZjX2R1bXBfc3RhdGljX3Zwb3J0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWIsCiAJCXVpbnQxNl90IG9mZnNldCkKIHsKIAlNQUlMQk9YX3QgKm1iOwotCXZvaWQgKmN0eDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKm1wOwogCiAJbWIgPSAmcG1iLT51Lm1iOwotCWN0eCA9IHBtYi0+Y29udGV4dDI7CiAKIAkvKiBTZXR1cCB0byBkdW1wIHZwb3J0IGluZm8gcmVnaW9uICovCiAJbWVtc2V0KHBtYiwgMCwgc2l6ZW9mKExQRkNfTUJPWFFfdCkpOwogCW1iLT5tYnhDb21tYW5kID0gTUJYX0RVTVBfTUVNT1JZOwotCW1iLT51bi52YXJEbXAuY3YgPSAxOwogCW1iLT51bi52YXJEbXAudHlwZSA9IERNUF9OVl9QQVJBTVM7CiAJbWItPnVuLnZhckRtcC5lbnRyeV9pbmRleCA9IG9mZnNldDsKIAltYi0+dW4udmFyRG1wLnJlZ2lvbl9pZCA9IERNUF9SRUdJT05fVlBPUlQ7Ci0JbWItPnVuLnZhckRtcC53b3JkX2NudCA9IERNUF9SU1BfU0laRS9zaXplb2YodWludDMyX3QpOwotCW1iLT51bi52YXJEbXAuY28gPSAwOwotCW1iLT51bi52YXJEbXAucmVzcF9vZmZzZXQgPSAwOwotCXBtYi0+Y29udGV4dDIgPSBjdHg7CiAJbWItPm1ieE93bmVyID0gT1dOX0hPU1Q7CiAKLQlyZXR1cm47CisJLyogRm9yIFNMSTMgSEJBcyBkYXRhIGlzIGVtYmVkZGVkIGluIG1haWxib3ggKi8KKwlpZiAocGhiYS0+c2xpX3JldiAhPSBMUEZDX1NMSV9SRVY0KSB7CisJCW1iLT51bi52YXJEbXAuY3YgPSAxOworCQltYi0+dW4udmFyRG1wLndvcmRfY250ID0gRE1QX1JTUF9TSVpFL3NpemVvZih1aW50MzJfdCk7CisJCXJldHVybiAwOworCX0KKworCS8qIEZvciBTTEk0IEhCQXMgZHJpdmVyIG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5ICovCisJbXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbHBmY19kbWFidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAobXApCisJCW1wLT52aXJ0ID0gbHBmY19tYnVmX2FsbG9jKHBoYmEsIDAsICZtcC0+cGh5cyk7CisKKwlpZiAoIW1wIHx8ICFtcC0+dmlydCkgeworCQlrZnJlZShtcCk7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX01CT1gsCisJCQkiMjYwNSBscGZjX2R1bXBfc3RhdGljX3Zwb3J0OiBtZW1vcnkiCisJCQkiIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCW1lbXNldChtcC0+dmlydCwgMCwgTFBGQ19CUExfU0laRSk7CisJSU5JVF9MSVNUX0hFQUQoJm1wLT5saXN0KTsKKwkvKiBzYXZlIGFkZHJlc3MgZm9yIGNvbXBsZXRpb24gKi8KKwlwbWItPmNvbnRleHQyID0gKHVpbnQ4X3QgKikgbXA7CisJbWItPnVuLnZhcldvcmRzWzNdID0gcHV0UGFkZHJMb3cobXAtPnBoeXMpOworCW1iLT51bi52YXJXb3Jkc1s0XSA9IHB1dFBhZGRySGlnaChtcC0+cGh5cyk7CisJbWItPnVuLnZhckRtcC5zbGk0X2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc3RhdGljX3Zwb3J0X2luZm8pOworCisJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogbHBmY19kdW1wX21lbSAtIFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHJldHJpZXZpbmcgSEJBJ3MgVlBEIG1lbW9yeQorICogbHBmY19kb3duX2xpbmsgLSBCcmluZyBkb3duIEhCQXMgbGluay4KICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KLSAqIEBvZmZzZXQ6IG9mZnNldCBmb3IgZHVtcGluZyBWUEQgbWVtb3J5IG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgYSBtYWlsYm94IGNvbW1hbmQgdG8gYnJpbmcgZG93biBIQkEgbGluay4KKyAqKi8KK3ZvaWQKK2xwZmNfZG93bl9saW5rKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWIpCit7CisJTUFJTEJPWF90ICptYjsKKwltZW1zZXQocG1iLCAwLCBzaXplb2YoTFBGQ19NQk9YUV90KSk7CisJbWIgPSAmcG1iLT51Lm1iOworCW1iLT5tYnhDb21tYW5kID0gTUJYX0RPV05fTElOSzsKKwltYi0+bWJ4T3duZXIgPSBPV05fSE9TVDsKK30KKworLyoqCisgKiBscGZjX2R1bXBfbWVtIC0gUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBhIHJlZ2lvbi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqIEBvZmZzZXQ6IG9mZnNldCBpbnRvIHRoZSByZWdpb24uCisgKiBAcmVnaW9uX2lkOiBjb25maWcgcmVnaW9uIGlkLgogICoKICAqIFRoZSBkdW1wIG1haWxib3ggY29tbWFuZCBwcm92aWRlcyBhIG1ldGhvZCBmb3IgdGhlIGRldmljZSBkcml2ZXIgdG8gb2J0YWluCiAgKiB2YXJpb3VzIHR5cGVzIG9mIGluZm9ybWF0aW9uIGZyb20gdGhlIEhCQSBkZXZpY2UuCiAgKgotICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIGR1bXBpbmcgSEJBIFZpdGFsIFByb2R1Y3QKLSAqIERhdGEgKFZQRCkgbWVtb3J5LiBUaGlzIG1haWxib3ggY29tbWFuZCBpcyB0byBiZSB1c2VkIGZvciByZXRyaWV2aW5nIGEKLSAqIHBvcnRpb24gKERNUF9SU1BfU0laRSBieXRlcykgb2YgYSBIQkEncyBWUEQgZnJvbSB0aGUgSEJBIGF0IGFuIGFkZHJlc3MKLSAqIG9mZnNldCBzcGVjaWZpZWQgYnkgdGhlIG9mZnNldCBwYXJhbWV0ZXIuCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgZHVtcGluZyBIQkEncyBjb25maWcgcmVnaW9uLgogICoqLwogdm9pZAotbHBmY19kdW1wX21lbShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIsIHVpbnQxNl90IG9mZnNldCkKK2xwZmNfZHVtcF9tZW0oc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYiwgdWludDE2X3Qgb2Zmc2V0LAorCQl1aW50MTZfdCByZWdpb25faWQpCiB7CiAJTUFJTEJPWF90ICptYjsKIAl2b2lkICpjdHg7CkBAIC0xMDcsNyArMTQ0LDcgQEAKIAltYi0+dW4udmFyRG1wLmN2ID0gMTsKIAltYi0+dW4udmFyRG1wLnR5cGUgPSBETVBfTlZfUEFSQU1TOwogCW1iLT51bi52YXJEbXAuZW50cnlfaW5kZXggPSBvZmZzZXQ7Ci0JbWItPnVuLnZhckRtcC5yZWdpb25faWQgPSBETVBfUkVHSU9OX1ZQRDsKKwltYi0+dW4udmFyRG1wLnJlZ2lvbl9pZCA9IHJlZ2lvbl9pZDsKIAltYi0+dW4udmFyRG1wLndvcmRfY250ID0gKERNUF9SU1BfU0laRSAvIHNpemVvZiAodWludDMyX3QpKTsKIAltYi0+dW4udmFyRG1wLmNvID0gMDsKIAltYi0+dW4udmFyRG1wLnJlc3Bfb2Zmc2V0ID0gMDsKQEAgLTE3ODksNiArMTgyNiw3IEBACiAKIC8qKgogICogbHBmY19pbml0X3ZwaSAtIEluaXRpYWxpemUgdGhlIElOSVRfVlBJIG1haWxib3ggY29tbWFuZAorICogQHBoYmE6IHBvaW50ZXIgdG8gdGhlIGhiYSBzdHJ1Y3R1cmUgdG8gaW5pdCB0aGUgVlBJIGZvci4KICAqIEBtYm94OiBwb2ludGVyIHRvIGxwZmMgbWJveCBjb21tYW5kIHRvIGluaXRpYWxpemUuCiAgKiBAdnBpOiBWUEkgdG8gYmUgaW5pdGlhbGl6ZWQuCiAgKgpAQCAtMTc5OSwxMSArMTgzNywxNCBAQAogICogc3VjY2Vzc2Z1bCB2aXJ0dWFsIE5Qb3J0IGxvZ2luLgogICoqLwogdm9pZAotbHBmY19pbml0X3ZwaShzdHJ1Y3QgbHBmY01ib3hxICptYm94LCB1aW50MTZfdCB2cGkpCitscGZjX2luaXRfdnBpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNNYm94cSAqbWJveCwgdWludDE2X3QgdnBpKQogewogCW1lbXNldChtYm94LCAwLCBzaXplb2YoKm1ib3gpKTsKIAliZl9zZXQobHBmY19tcWVfY29tbWFuZCwgJm1ib3gtPnUubXFlLCBNQlhfSU5JVF9WUEkpOwotCWJmX3NldChscGZjX2luaXRfdnBpX3ZwaSwgJm1ib3gtPnUubXFlLnVuLmluaXRfdnBpLCB2cGkpOworCWJmX3NldChscGZjX2luaXRfdnBpX3ZwaSwgJm1ib3gtPnUubXFlLnVuLmluaXRfdnBpLAorCSAgICAgICB2cGkgKyBwaGJhLT52cGlfYmFzZSk7CisJYmZfc2V0KGxwZmNfaW5pdF92cGlfdmZpLCAmbWJveC0+dS5tcWUudW4uaW5pdF92cGksCisJICAgICAgIHBoYmEtPnBwb3J0LT52ZmkgKyBwaGJhLT52ZmlfYmFzZSk7CiB9CiAKIC8qKgpAQCAtMTg1Miw3ICsxODkzLDcgQEAKIAkJLyogZHVtcF9mY29lX3BhcmFtIGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgKi8KIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX01CT1gsCiAJCQkiMjU2OSBscGZjX2R1bXBfZmNvZV9wYXJhbTogbWVtb3J5IgotCQkJIiBhbGxvY2F0aW9uIGZhaWxlZCBcbiIpOworCQkJIiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMTg2NCw4ICsxOTA1LDggQEAKIAogCW1iLT5tYnhDb21tYW5kID0gTUJYX0RVTVBfTUVNT1JZOwogCW1iLT51bi52YXJEbXAudHlwZSA9IERNUF9OVl9QQVJBTVM7Ci0JbWItPnVuLnZhckRtcC5yZWdpb25faWQgPSBETVBfUkVHSU9OX0ZDT0VQQVJBTTsKLQltYi0+dW4udmFyRG1wLnNsaTRfbGVuZ3RoID0gRE1QX0ZDT0VQQVJBTV9SR05fU0laRTsKKwltYi0+dW4udmFyRG1wLnJlZ2lvbl9pZCA9IERNUF9SRUdJT05fMjM7CisJbWItPnVuLnZhckRtcC5zbGk0X2xlbmd0aCA9IERNUF9SR04yM19TSVpFOwogCW1iLT51bi52YXJXb3Jkc1szXSA9IHB1dFBhZGRyTG93KG1wLT5waHlzKTsKIAltYi0+dW4udmFyV29yZHNbNF0gPSBwdXRQYWRkckhpZ2gobXAtPnBoeXMpOwogCXJldHVybiAwOwpAQCAtMTkzOCw5ICsxOTc5LDcgQEAKIAltZW1zZXQobWJveCwgMCwgc2l6ZW9mKCptYm94KSk7CiAJcmVzdW1lX3JwaSA9ICZtYm94LT51Lm1xZS51bi5yZXN1bWVfcnBpOwogCWJmX3NldChscGZjX21xZV9jb21tYW5kLCAmbWJveC0+dS5tcWUsIE1CWF9SRVNVTUVfUlBJKTsKLQliZl9zZXQobHBmY19yZXN1bWVfcnBpX3JwaSwgcmVzdW1lX3JwaSwgbmRscC0+bmxwX3JwaSk7Ci0JYmZfc2V0KGxwZmNfcmVzdW1lX3JwaV92cGksIHJlc3VtZV9ycGksCi0JICAgICAgIG5kbHAtPnZwb3J0LT52cGkgKyBuZGxwLT52cG9ydC0+cGhiYS0+dnBpX2Jhc2UpOwotCWJmX3NldChscGZjX3Jlc3VtZV9ycGlfdmZpLCByZXN1bWVfcnBpLAotCSAgICAgICBuZGxwLT52cG9ydC0+dmZpICsgbmRscC0+dnBvcnQtPnBoYmEtPnZmaV9iYXNlKTsKKwliZl9zZXQobHBmY19yZXN1bWVfcnBpX2luZGV4LCByZXN1bWVfcnBpLCBuZGxwLT5ubHBfcnBpKTsKKwliZl9zZXQobHBmY19yZXN1bWVfcnBpX2lpLCByZXN1bWVfcnBpLCBSRVNVTUVfSU5ERVhfUlBJKTsKKwlyZXN1bWVfcnBpLT5ldmVudF90YWcgPSBuZGxwLT5waGJhLT5mY19ldmVudFRhZzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWVtLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21lbS5jCmluZGV4IGUxOThjOTEuLmExYjZkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWVtLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tZW0uYwpAQCAtMTEwLDE3ICsxMTAsMjggQEAKIAkJCQkJCXNpemVvZihzdHJ1Y3QgbHBmY19ub2RlbGlzdCkpOwogCWlmICghcGhiYS0+bmxwX21lbV9wb29sKQogCQlnb3RvIGZhaWxfZnJlZV9tYm94X3Bvb2w7Ci0JcGhiYS0+bHBmY19ocmJfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgibHBmY19ocmJfcG9vbCIsCisKKwlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CisJCXBoYmEtPmxwZmNfaHJiX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoImxwZmNfaHJiX3Bvb2wiLAogCQkJCQkgICAgICBwaGJhLT5wY2lkZXYsCiAJCQkJCSAgICAgIExQRkNfSERSX0JVRl9TSVpFLCBhbGlnbiwgMCk7Ci0JaWYgKCFwaGJhLT5scGZjX2hyYl9wb29sKQotCQlnb3RvIGZhaWxfZnJlZV9ubHBfbWVtX3Bvb2w7Ci0JcGhiYS0+bHBmY19kcmJfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgibHBmY19kcmJfcG9vbCIsCisJCWlmICghcGhiYS0+bHBmY19ocmJfcG9vbCkKKwkJCWdvdG8gZmFpbF9mcmVlX25scF9tZW1fcG9vbDsKKworCQlwaGJhLT5scGZjX2RyYl9wb29sID0gcGNpX3Bvb2xfY3JlYXRlKCJscGZjX2RyYl9wb29sIiwKIAkJCQkJICAgICAgcGhiYS0+cGNpZGV2LAogCQkJCQkgICAgICBMUEZDX0RBVEFfQlVGX1NJWkUsIGFsaWduLCAwKTsKLQlpZiAoIXBoYmEtPmxwZmNfZHJiX3Bvb2wpCi0JCWdvdG8gZmFpbF9mcmVlX2hicV9wb29sOwotCisJCWlmICghcGhiYS0+bHBmY19kcmJfcG9vbCkKKwkJCWdvdG8gZmFpbF9mcmVlX2hyYl9wb29sOworCQlwaGJhLT5scGZjX2hicV9wb29sID0gTlVMTDsKKwl9IGVsc2UgeworCQlwaGJhLT5scGZjX2hicV9wb29sID0gcGNpX3Bvb2xfY3JlYXRlKCJscGZjX2hicV9wb29sIiwKKwkJCXBoYmEtPnBjaWRldiwgTFBGQ19CUExfU0laRSwgYWxpZ24sIDApOworCQlpZiAoIXBoYmEtPmxwZmNfaGJxX3Bvb2wpCisJCQlnb3RvIGZhaWxfZnJlZV9ubHBfbWVtX3Bvb2w7CisJCXBoYmEtPmxwZmNfaHJiX3Bvb2wgPSBOVUxMOworCQlwaGJhLT5scGZjX2RyYl9wb29sID0gTlVMTDsKKwl9CiAJLyogdnBpIHplcm8gaXMgcmVzZXJ2ZWQgZm9yIHRoZSBwaHlzaWNhbCBwb3J0IHNvIGFkZCAxIHRvIG1heCAqLwogCWxvbmdzID0gKChwaGJhLT5tYXhfdnBpICsgMSkgKyBCSVRTX1BFUl9MT05HIC0gMSkgLyBCSVRTX1BFUl9MT05HOwogCXBoYmEtPnZwaV9ibWFzayA9IGt6YWxsb2MobG9uZ3MgKiBzaXplb2YodW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwpOwpAQCAtMTMyLDcgKzE0Myw3IEBACiAgZmFpbF9mcmVlX2RicV9wb29sOgogCXBjaV9wb29sX2Rlc3Ryb3kocGhiYS0+bHBmY19kcmJfcG9vbCk7CiAJcGhiYS0+bHBmY19kcmJfcG9vbCA9IE5VTEw7Ci0gZmFpbF9mcmVlX2hicV9wb29sOgorIGZhaWxfZnJlZV9ocmJfcG9vbDoKIAlwY2lfcG9vbF9kZXN0cm95KHBoYmEtPmxwZmNfaHJiX3Bvb2wpOwogCXBoYmEtPmxwZmNfaHJiX3Bvb2wgPSBOVUxMOwogIGZhaWxfZnJlZV9ubHBfbWVtX3Bvb2w6CkBAIC0xNzYsMTEgKzE4NywxNyBAQAogCiAJLyogRnJlZSBIQlEgcG9vbHMgKi8KIAlscGZjX3NsaV9oYnFidWZfZnJlZV9hbGwocGhiYSk7Ci0JcGNpX3Bvb2xfZGVzdHJveShwaGJhLT5scGZjX2RyYl9wb29sKTsKKwlpZiAocGhiYS0+bHBmY19kcmJfcG9vbCkKKwkJcGNpX3Bvb2xfZGVzdHJveShwaGJhLT5scGZjX2RyYl9wb29sKTsKIAlwaGJhLT5scGZjX2RyYl9wb29sID0gTlVMTDsKLQlwY2lfcG9vbF9kZXN0cm95KHBoYmEtPmxwZmNfaHJiX3Bvb2wpOworCWlmIChwaGJhLT5scGZjX2hyYl9wb29sKQorCQlwY2lfcG9vbF9kZXN0cm95KHBoYmEtPmxwZmNfaHJiX3Bvb2wpOwogCXBoYmEtPmxwZmNfaHJiX3Bvb2wgPSBOVUxMOwogCisJaWYgKHBoYmEtPmxwZmNfaGJxX3Bvb2wpCisJCXBjaV9wb29sX2Rlc3Ryb3kocGhiYS0+bHBmY19oYnFfcG9vbCk7CisJcGhiYS0+bHBmY19oYnFfcG9vbCA9IE5VTEw7CisKIAkvKiBGcmVlIE5MUCBtZW1vcnkgcG9vbCAqLwogCW1lbXBvb2xfZGVzdHJveShwaGJhLT5ubHBfbWVtX3Bvb2wpOwogCXBoYmEtPm5scF9tZW1fcG9vbCA9IE5VTEw7CkBAIC0zODAsNyArMzk3LDcgQEAKIAlpZiAoIWhicWJwKQogCQlyZXR1cm4gTlVMTDsKIAotCWhicWJwLT5kYnVmLnZpcnQgPSBwY2lfcG9vbF9hbGxvYyhwaGJhLT5scGZjX2hyYl9wb29sLCBHRlBfS0VSTkVMLAorCWhicWJwLT5kYnVmLnZpcnQgPSBwY2lfcG9vbF9hbGxvYyhwaGJhLT5scGZjX2hicV9wb29sLCBHRlBfS0VSTkVMLAogCQkJCQkgICZoYnFicC0+ZGJ1Zi5waHlzKTsKIAlpZiAoIWhicWJwLT5kYnVmLnZpcnQpIHsKIAkJa2ZyZWUoaGJxYnApOwpAQCAtNDA1LDcgKzQyMiw3IEBACiB2b2lkCiBscGZjX2Vsc19oYnFfZnJlZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBoYnFfZG1hYnVmICpoYnFicCkKIHsKLQlwY2lfcG9vbF9mcmVlKHBoYmEtPmxwZmNfaHJiX3Bvb2wsIGhicWJwLT5kYnVmLnZpcnQsIGhicWJwLT5kYnVmLnBoeXMpOworCXBjaV9wb29sX2ZyZWUocGhiYS0+bHBmY19oYnFfcG9vbCwgaGJxYnAtPmRidWYudmlydCwgaGJxYnAtPmRidWYucGh5cyk7CiAJa2ZyZWUoaGJxYnApOwogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaAppbmRleCAyN2QxYTg4Li5kNjU1ZWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oCkBAIC0xNzcsMyArMTc3LDIzIEBACiAJdWludDMyX3QgZGF0YTsKIH07CiAKKy8qIGJzZyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfU0VUX0NUX0VWRU5UCTEKKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX0dFVF9DVF9FVkVOVAkyCisKK3N0cnVjdCBzZXRfY3RfZXZlbnQgeworCXVpbnQzMl90IGNvbW1hbmQ7CisJdWludDMyX3QgZXZfcmVxX2lkOworCXVpbnQzMl90IGV2X3JlZ19pZDsKK307CisKK3N0cnVjdCBnZXRfY3RfZXZlbnQgeworCXVpbnQzMl90IGNvbW1hbmQ7CisJdWludDMyX3QgZXZfcmVnX2lkOworCXVpbnQzMl90IGV2X3JlcV9pZDsKK307CisKK3N0cnVjdCBnZXRfY3RfZXZlbnRfcmVwbHkgeworCXVpbnQzMl90IGltbWVkX2RhdGE7CisJdWludDMyX3QgdHlwZTsKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCmluZGV4IGRhNTljNGYuLjYxZDA4OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCkBAIC0yMTQyLDcgKzIxNDIsNyBAQAogCX0gZWxzZSBpZiAocmVzcF9pbmZvICYgUkVTSURfT1ZFUikgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX1dBUk5JTkcsIExPR19GQ1AsCiAJCQkJICI5MDI4IEZDUCBjb21tYW5kIHgleCByZXNpZHVhbCBvdmVycnVuIGVycm9yLiAiCi0JCQkJICJEYXRhOiB4JXggeCV4IFxuIiwgY21uZC0+Y21uZFswXSwKKwkJCQkgIkRhdGE6IHgleCB4JXhcbiIsIGNtbmQtPmNtbmRbMF0sCiAJCQkJIHNjc2lfYnVmZmxlbihjbW5kKSwgc2NzaV9nZXRfcmVzaWQoY21uZCkpOwogCQlob3N0X3N0YXR1cyA9IERJRF9FUlJPUjsKIApAQCAtMjg0Myw3ICsyODQzLDcgQEAKIAkJCQlkaWZfb3Bfc3RyW3Njc2lfZ2V0X3Byb3Rfb3AoY21uZCldKTsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9XQVJOSU5HLCBMT0dfQkcsCiAJCQkJIjkwMzQgQkxLR1JEOiBDREI6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiCi0JCQkJIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCBcbiIsCisJCQkJIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKIAkJCQljbW5kLT5jbW5kWzBdLCBjbW5kLT5jbW5kWzFdLCBjbW5kLT5jbW5kWzJdLAogCQkJCWNtbmQtPmNtbmRbM10sIGNtbmQtPmNtbmRbNF0sIGNtbmQtPmNtbmRbNV0sCiAJCQkJY21uZC0+Y21uZFs2XSwgY21uZC0+Y21uZFs3XSwgY21uZC0+Y21uZFs4XSwKQEAgLTI4NzEsNyArMjg3MSw3IEBACiAJCQkJZGlmX29wX3N0cltzY3NpX2dldF9wcm90X29wKGNtbmQpXSk7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fV0FSTklORywgTE9HX0JHLAogCQkJCSAiOTAzOSBCTEtHUkQ6IENEQjogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICIKLQkJCQkgIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCBcbiIsCisJCQkJICIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCiAJCQkJIGNtbmQtPmNtbmRbMF0sIGNtbmQtPmNtbmRbMV0sIGNtbmQtPmNtbmRbMl0sCiAJCQkJIGNtbmQtPmNtbmRbM10sIGNtbmQtPmNtbmRbNF0sIGNtbmQtPmNtbmRbNV0sCiAJCQkJIGNtbmQtPmNtbmRbNl0sIGNtbmQtPmNtbmRbN10sIGNtbmQtPmNtbmRbOF0sCkBAIC0zNTg0LDYgKzM1ODQsNyBAQAogCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuc2hvc3RfYXR0cnMJCT0gbHBmY19oYmFfYXR0cnMsCiAJLm1heF9zZWN0b3JzCQk9IDB4RkZGRiwKKwkudmVuZG9yX2lkCQk9IExQRkNfTkxfVkVORE9SX0lELAogfTsKIAogc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBscGZjX3Zwb3J0X3RlbXBsYXRlID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKaW5kZXggYWNjNDNiMC4uNDNjYmUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCkBAIC00MTM5LDcgKzQxMzksNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJZGF0YV9sZW5ndGggPSBtcWUtPnVuLm1iX3dvcmRzWzVdOwotCWlmIChkYXRhX2xlbmd0aCA+IERNUF9GQ09FUEFSQU1fUkdOX1NJWkUpIHsKKwlpZiAoZGF0YV9sZW5ndGggPiBETVBfUkdOMjNfU0laRSkgewogCQlscGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOwogCQlrZnJlZShtcCk7CiAJCXJldHVybiAtRUlPOwpAQCAtNDMwNCw3ICs0MzA0LDcgQEAKIAkgKi8KIAlpZiAobHBmY19zbGk0X3JlYWRfZmNvZV9wYXJhbXMocGhiYSwgbWJveHEpKQogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19NQk9YIHwgTE9HX0lOSVQsCi0JCQkiMjU3MCBGYWlsZWQgdG8gcmVhZCBGQ29FIHBhcmFtZXRlcnMgXG4iKTsKKwkJCSIyNTcwIEZhaWxlZCB0byByZWFkIEZDb0UgcGFyYW1ldGVyc1xuIik7CiAKIAkvKiBJc3N1ZSBSRUFEX1JFViB0byBjb2xsZWN0IHZwZCBhbmQgRlcgaW5mb3JtYXRpb24uICovCiAJdnBkX3NpemUgPSBQQUdFX1NJWkU7CkBAIC00NTIyLDEyICs0NTIyLDggQEAKIAlscGZjX3NsaTRfcmJfc2V0dXAocGhiYSk7CiAKIAkvKiBTdGFydCB0aGUgRUxTIHdhdGNoZG9nIHRpbWVyICovCi0JLyoKLQkgKiBUaGUgZHJpdmVyIGZvciBTTEk0IGlzIG5vdCB5ZXQgcmVhZHkgdG8gcHJvY2VzcyB0aW1lb3V0cwotCSAqIG9yIGludGVycnVwdHMuICBPbmNlIGl0IGlzLCB0aGUgY29tbWVudCBiYXJzIGNhbiBiZSByZW1vdmVkLgotCSAqLwotCS8qIG1vZF90aW1lcigmdnBvcnQtPmVsc190bW9mdW5jLAotCSAqICAgICAgICAgICBqaWZmaWVzICsgSFogKiAocGhiYS0+ZmNfcmF0b3YqMikpOyAqLworCW1vZF90aW1lcigmdnBvcnQtPmVsc190bW9mdW5jLAorCQkgIGppZmZpZXMgKyBIWiAqIChwaGJhLT5mY19yYXRvdiAqIDIpKTsKIAogCS8qIFN0YXJ0IGhlYXJ0IGJlYXQgdGltZXIgKi8KIAltb2RfdGltZXIoJnBoYmEtPmhiX3Rtb2Z1bmMsCkBAIC00NzA2LDEzICs0NzAyLDEzIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZHJ2cl9mbGFnKTsKIAlpZiAoIXBtYm94KSB7CisJCXBoYmEtPnNsaS5zbGlfZmxhZyAmPSB+TFBGQ19TTElfTUJPWF9BQ1RJVkU7CiAJCS8qIHByb2Nlc3NpbmcgbWJveCBxdWV1ZSBmcm9tIGludHJfaGFuZGxlciAqLwogCQlpZiAodW5saWtlbHkocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX1NMSV9BU1lOQ19NQlhfQkxLKSkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZHJ2cl9mbGFnKTsKIAkJCXJldHVybiBNQlhfU1VDQ0VTUzsKIAkJfQogCQlwcm9jZXNzaW5nX3F1ZXVlID0gMTsKLQkJcGhiYS0+c2xpLnNsaV9mbGFnICY9IH5MUEZDX1NMSV9NQk9YX0FDVElWRTsKIAkJcG1ib3ggPSBscGZjX21ib3hfZ2V0KHBoYmEpOwogCQlpZiAoIXBtYm94KSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBkcnZyX2ZsYWcpOwpAQCAtNTI3OSw2ICs1Mjc1LDE4IEBACiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJaW50IHJjOwogCisJcmMgPSBscGZjX21ib3hfZGV2X2NoZWNrKHBoYmEpOworCWlmICh1bmxpa2VseShyYykpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTUJPWCB8IExPR19TTEksCisJCQkJIiglZCk6MjU0NCBNYWlsYm94IGNvbW1hbmQgeCV4ICh4JXgpICIKKwkJCQkiY2Fubm90IGlzc3VlIERhdGE6IHgleCB4JXhcbiIsCisJCQkJbWJveHEtPnZwb3J0ID8gbWJveHEtPnZwb3J0LT52cGkgOiAwLAorCQkJCW1ib3hxLT51Lm1iLm1ieENvbW1hbmQsCisJCQkJbHBmY19zbGk0X21ib3hfb3Bjb2RlX2dldChwaGJhLCBtYm94cSksCisJCQkJcHNsaS0+c2xpX2ZsYWcsIGZsYWcpOworCQlnb3RvIG91dF9ub3RfZmluaXNoZWQ7CisJfQorCiAJLyogRGV0ZWN0IHBvbGxpbmcgbW9kZSBhbmQganVtcCB0byBhIGhhbmRsZXIgKi8KIAlpZiAoIXBoYmEtPnNsaTRfaGJhLmludHJfZW5hYmxlKSB7CiAJCWlmIChmbGFnID09IE1CWF9QT0xMKQpAQCAtNTMzOCwxNyArNTM0Niw2IEBACiAJCQkJcHNsaS0+c2xpX2ZsYWcsIGZsYWcpOwogCQlnb3RvIG91dF9ub3RfZmluaXNoZWQ7CiAJfQotCXJjID0gbHBmY19tYm94X2Rldl9jaGVjayhwaGJhKTsKLQlpZiAodW5saWtlbHkocmMpKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX01CT1ggfCBMT0dfU0xJLAotCQkJCSIoJWQpOjI1NDQgTWFpbGJveCBjb21tYW5kIHgleCAoeCV4KSAiCi0JCQkJImNhbm5vdCBpc3N1ZSBEYXRhOiB4JXggeCV4XG4iLAotCQkJCW1ib3hxLT52cG9ydCA/IG1ib3hxLT52cG9ydC0+dnBpIDogMCwKLQkJCQltYm94cS0+dS5tYi5tYnhDb21tYW5kLAotCQkJCWxwZmNfc2xpNF9tYm94X29wY29kZV9nZXQocGhiYSwgbWJveHEpLAotCQkJCXBzbGktPnNsaV9mbGFnLCBmbGFnKTsKLQkJZ290byBvdXRfbm90X2ZpbmlzaGVkOwotCX0KIAogCS8qIFB1dCB0aGUgbWFpbGJveCBjb21tYW5kIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgRklGTyAqLwogCXBzbGktPnNsaXN0YXQubWJveF9idXN5Kys7CkBAIC01ODE3LDE5ICs1ODE0LDIxIEBACiAvKioKICAqIGxwZmNfc2xpNF9zY21kX3RvX3dxaWR4X2Rpc3RyIC0gc2NzaSBjb21tYW5kIHRvIFNMSTQgV1EgaW5kZXggZGlzdHJpYnV0aW9uCiAgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCi0gKiBAcGlvY2I6IFBvaW50ZXIgdG8gY29tbWFuZCBpb2NiLgogICoKICAqIFRoaXMgcm91dGluZSBwZXJmb3JtcyBhIHJvdW5kIHJvYmluIFNDU0kgY29tbWFuZCB0byBTTEk0IEZDUCBXUSBpbmRleAotICogZGlzdHJpYnV0aW9uLgorICogZGlzdHJpYnV0aW9uLiAgVGhpcyBpcyBjYWxsZWQgYnkgX19scGZjX3NsaV9pc3N1ZV9pb2NiX3M0KCkgd2l0aCB0aGUgaGJhbG9jaworICogaGVsZC4KICAqCiAgKiBSZXR1cm46IGluZGV4IGludG8gU0xJNCBmYXN0LXBhdGggRkNQIHF1ZXVlIGluZGV4LgogICoqLwogc3RhdGljIHVpbnQzMl90Ci1scGZjX3NsaTRfc2NtZF90b193cWlkeF9kaXN0cihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpwaW9jYikKK2xwZmNfc2xpNF9zY21kX3RvX3dxaWR4X2Rpc3RyKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKLQlzdGF0aWMgdWludDMyX3QgZmNwX3FpZHg7CisJKytwaGJhLT5mY3BfcWlkeDsKKwlpZiAocGhiYS0+ZmNwX3FpZHggPj0gcGhiYS0+Y2ZnX2ZjcF93cV9jb3VudCkKKwkJcGhiYS0+ZmNwX3FpZHggPSAwOwogCi0JcmV0dXJuIGZjcF9xaWR4KysgJSBwaGJhLT5jZmdfZmNwX3dxX2NvdW50OworCXJldHVybiBwaGJhLT5mY3BfcWlkeDsKIH0KIAogLyoqCkBAIC02MTU2LDcgKzYxNTUsNyBAQAogCQlyZXR1cm4gSU9DQl9FUlJPUjsKIAogCWlmIChwaW9jYi0+aW9jYl9mbGFnICYgIExQRkNfSU9fRkNQKSB7Ci0JCWZjcF93cWlkeCA9IGxwZmNfc2xpNF9zY21kX3RvX3dxaWR4X2Rpc3RyKHBoYmEsIHBpb2NiKTsKKwkJZmNwX3dxaWR4ID0gbHBmY19zbGk0X3NjbWRfdG9fd3FpZHhfZGlzdHIocGhiYSk7CiAJCWlmIChscGZjX3NsaTRfd3FfcHV0KHBoYmEtPnNsaTRfaGJhLmZjcF93cVtmY3Bfd3FpZHhdLCAmd3FlKSkKIAkJCXJldHVybiBJT0NCX0VSUk9SOwogCX0gZWxzZSB7CkBAIC02MzI3LDcgKzYzMjYsNyBAQAogCQkJS0VSTl9FUlIsCiAJCQlMT0dfU0xJLAogCQkJIjAzNDYgUmluZyAlZCBoYW5kbGVyOiB1bmV4cGVjdGVkIEFTWU5DX1NUQVRVUyIKLQkJCSIgZXZ0X2NvZGUgMHgleCBcbiIKKwkJCSIgZXZ0X2NvZGUgMHgleFxuIgogCQkJIlcwICAweCUwOHggVzEgIDB4JTA4eCBXMiAgMHglMDh4IFczICAweCUwOHhcbiIKIAkJCSJXNCAgMHglMDh4IFc1ICAweCUwOHggVzYgIDB4JTA4eCBXNyAgMHglMDh4XG4iCiAJCQkiVzggIDB4JTA4eCBXOSAgMHglMDh4IFcxMCAweCUwOHggVzExIDB4JTA4eFxuIgpAQCAtNjc5MCw2ICs2Nzg5LDMzIEBACiAKIAogLyoqCisgKiBscGZjX3NsaV9iZW1lbV9iY29weSAtIFNMSSBtZW1vcnkgY29weSBmdW5jdGlvbgorICogQHNyY3A6IFNvdXJjZSBtZW1vcnkgcG9pbnRlci4KKyAqIEBkZXN0cDogRGVzdGluYXRpb24gbWVtb3J5IHBvaW50ZXIuCisgKiBAY250OiBOdW1iZXIgb2Ygd29yZHMgcmVxdWlyZWQgdG8gYmUgY29waWVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgY29weWluZyBkYXRhIGJldHdlZW4gYSBkYXRhIHN0cnVjdHVyZQorICogd2l0aCBiaWcgZW5kaWFuIHJlcHJlc2VudGF0aW9uIHRvIGxvY2FsIGVuZGlhbm5lc3MuCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0IGxvY2suCisgKiovCit2b2lkCitscGZjX3NsaV9iZW1lbV9iY29weSh2b2lkICpzcmNwLCB2b2lkICpkZXN0cCwgdWludDMyX3QgY250KQoreworCXVpbnQzMl90ICpzcmMgPSBzcmNwOworCXVpbnQzMl90ICpkZXN0ID0gZGVzdHA7CisJdWludDMyX3QgbGRhdGE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKGludCljbnQ7IGkgKz0gc2l6ZW9mKHVpbnQzMl90KSkgeworCQlsZGF0YSA9ICpzcmM7CisJCWxkYXRhID0gYmUzMl90b19jcHUobGRhdGEpOworCQkqZGVzdCA9IGxkYXRhOworCQlzcmMrKzsKKwkJZGVzdCsrOworCX0KK30KKworLyoqCiAgKiBscGZjX3NsaV9yaW5ncG9zdGJ1Zl9wdXQgLSBGdW5jdGlvbiB0byBhZGQgYSBidWZmZXIgdG8gcG9zdGJ1ZnEKICAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KICAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgpAQCAtNzY3OCwxMiArNzcwNCw2IEBACiAJCQkJCSJvbmxpbmUwX3JlZz0weCV4LCBvbmxpbmUxX3JlZz0weCV4XG4iLAogCQkJCQl1ZXJyX3N0YV9sbywgdWVycl9zdGFfaGksCiAJCQkJCW9ubG5yZWcwLCBvbmxucmVnMSk7Ci0JCQkvKiBURU1QOiBhcyB0aGUgZHJpdmVyIGVycm9yIHJlY292ZXIgbG9naWMgaXMgbm90Ci0JCQkgKiBmdWxseSBkZXZlbG9wZWQsIHdlIGp1c3QgbG9nIHRoZSBlcnJvciBtZXNzYWdlCi0JCQkgKiBhbmQgdGhlIGRldmljZSBlcnJvciBhdHRlbnRpb24gYWN0aW9uIGlzIG5vdwotCQkJICogdGVtcG9yYXJpbHkgZGlzYWJsZWQuCi0JCQkgKi8KLQkJCXJldHVybiAwOwogCQkJcGhiYS0+d29ya19zdGF0dXNbMF0gPSB1ZXJyX3N0YV9sbzsKIAkJCXBoYmEtPndvcmtfc3RhdHVzWzFdID0gdWVycl9zdGFfaGk7CiAJCQkvKiBTZXQgdGhlIGRyaXZlciBIQSB3b3JrIGJpdG1hcCAqLwpAQCAtOTQ5OSw4ICs5NTE5LDcgQEAKIAllcS0+aG9zdF9pbmRleCA9IDA7CiAJZXEtPmhiYV9pbmRleCA9IDA7CiAKLQlpZiAocmMgIT0gTUJYX1RJTUVPVVQpCi0JCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtOTYwNCwxMCArOTYyMyw5IEBACiAJY3EtPnF1ZXVlX2lkID0gYmZfZ2V0KGxwZmNfbWJ4X2NxX2NyZWF0ZV9xX2lkLCAmY3FfY3JlYXRlLT51LnJlc3BvbnNlKTsKIAljcS0+aG9zdF9pbmRleCA9IDA7CiAJY3EtPmhiYV9pbmRleCA9IDA7Ci1vdXQ6CiAKLQlpZiAocmMgIT0gTUJYX1RJTUVPVVQpCi0JCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKK291dDoKKwltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtOTcxMiw4ICs5NzMwLDcgQEAKIAkvKiBsaW5rIHRoZSBtcSBvbnRvIHRoZSBwYXJlbnQgY3EgY2hpbGQgbGlzdCAqLwogCWxpc3RfYWRkX3RhaWwoJm1xLT5saXN0LCAmY3EtPmNoaWxkX2xpc3QpOwogb3V0OgotCWlmIChyYyAhPSBNQlhfVElNRU9VVCkKLQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC05Nzk1LDggKzk4MTIsNyBAQAogCS8qIGxpbmsgdGhlIHdxIG9udG8gdGhlIHBhcmVudCBjcSBjaGlsZCBsaXN0ICovCiAJbGlzdF9hZGRfdGFpbCgmd3EtPmxpc3QsICZjcS0+Y2hpbGRfbGlzdCk7CiBvdXQ6Ci0JaWYgKHJjICE9IE1CWF9USU1FT1VUKQotCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTk5NzAsOCArOTk4Niw3IEBACiAJbGlzdF9hZGRfdGFpbCgmZHJxLT5saXN0LCAmY3EtPmNoaWxkX2xpc3QpOwogCiBvdXQ6Ci0JaWYgKHJjICE9IE1CWF9USU1FT1VUKQotCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTEwMDI2LDggKzEwMDQxLDcgQEAKIAogCS8qIFJlbW92ZSBlcSBmcm9tIGFueSBsaXN0ICovCiAJbGlzdF9kZWxfaW5pdCgmZXEtPmxpc3QpOwotCWlmIChyYyAhPSBNQlhfVElNRU9VVCkKLQkJbWVtcG9vbF9mcmVlKG1ib3gsIGVxLT5waGJhLT5tYm94X21lbV9wb29sKTsKKwltZW1wb29sX2ZyZWUobWJveCwgZXEtPnBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTEwMDgwLDggKzEwMDk0LDcgQEAKIAl9CiAJLyogUmVtb3ZlIGNxIGZyb20gYW55IGxpc3QgKi8KIAlsaXN0X2RlbF9pbml0KCZjcS0+bGlzdCk7Ci0JaWYgKHJjICE9IE1CWF9USU1FT1VUKQotCQltZW1wb29sX2ZyZWUobWJveCwgY3EtPnBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCW1lbXBvb2xfZnJlZShtYm94LCBjcS0+cGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTAxMzQsOCArMTAxNDcsNyBAQAogCX0KIAkvKiBSZW1vdmUgbXEgZnJvbSBhbnkgbGlzdCAqLwogCWxpc3RfZGVsX2luaXQoJm1xLT5saXN0KTsKLQlpZiAocmMgIT0gTUJYX1RJTUVPVVQpCi0JCW1lbXBvb2xfZnJlZShtYm94LCBtcS0+cGhiYS0+bWJveF9tZW1fcG9vbCk7CisJbWVtcG9vbF9mcmVlKG1ib3gsIG1xLT5waGJhLT5tYm94X21lbV9wb29sKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xMDE4Nyw4ICsxMDE5OSw3IEBACiAJfQogCS8qIFJlbW92ZSB3cSBmcm9tIGFueSBsaXN0ICovCiAJbGlzdF9kZWxfaW5pdCgmd3EtPmxpc3QpOwotCWlmIChyYyAhPSBNQlhfVElNRU9VVCkKLQkJbWVtcG9vbF9mcmVlKG1ib3gsIHdxLT5waGJhLT5tYm94X21lbV9wb29sKTsKKwltZW1wb29sX2ZyZWUobWJveCwgd3EtPnBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTEwMjU4LDggKzEwMjY5LDcgQEAKIAl9CiAJbGlzdF9kZWxfaW5pdCgmaHJxLT5saXN0KTsKIAlsaXN0X2RlbF9pbml0KCZkcnEtPmxpc3QpOwotCWlmIChyYyAhPSBNQlhfVElNRU9VVCkKLQkJbWVtcG9vbF9mcmVlKG1ib3gsIGhycS0+cGhiYS0+bWJveF9tZW1fcG9vbCk7CisJbWVtcG9vbF9mcmVlKG1ib3gsIGhycS0+cGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTA5MzMsNiArMTA5NDMsNyBAQAogCWZpcnN0X2lvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHZwb3J0LT5waGJhKTsKIAlpZiAoZmlyc3RfaW9jYnEpIHsKIAkJLyogSW5pdGlhbGl6ZSB0aGUgZmlyc3QgSU9DQi4gKi8KKwkJZmlyc3RfaW9jYnEtPmlvY2IudW5zbGkzLnJjdnNsaTMuYWNjX2xlbiA9IDA7CiAJCWZpcnN0X2lvY2JxLT5pb2NiLnVscFN0YXR1cyA9IElPU1RBVF9TVUNDRVNTOwogCQlmaXJzdF9pb2NicS0+aW9jYi51bHBDb21tYW5kID0gQ01EX0lPQ0JfUkNWX1NFUTY0X0NYOwogCQlmaXJzdF9pb2NicS0+aW9jYi51bHBDb250ZXh0ID0gYmUxNl90b19jcHUoZmNfaGRyLT5maF9veF9pZCk7CkBAIC0xMDk0NSw2ICsxMDk1Niw4IEBACiAJCWZpcnN0X2lvY2JxLT5pb2NiLnVuLmNvbnQ2NFswXS50dXMuZi5iZGVTaXplID0KIAkJCQkJCQlMUEZDX0RBVEFfQlVGX1NJWkU7CiAJCWZpcnN0X2lvY2JxLT5pb2NiLnVuLnJjdmVscy5yZW1vdGVJRCA9IHNpZDsKKwkJZmlyc3RfaW9jYnEtPmlvY2IudW5zbGkzLnJjdnNsaTMuYWNjX2xlbiArPQorCQkJCWJmX2dldChscGZjX3JjcWVfbGVuZ3RoLCAmc2VxX2RtYWJ1Zi0+cmNxZSk7CiAJfQogCWlvY2JxID0gZmlyc3RfaW9jYnE7CiAJLyoKQEAgLTEwOTYxLDYgKzEwOTc0LDggQEAKIAkJCWlvY2JxLT5pb2NiLnVscEJkZUNvdW50Kys7CiAJCQlpb2NicS0+aW9jYi51bnNsaTMucmN2c2xpMy5iZGUyLnR1cy5mLmJkZVNpemUgPQogCQkJCQkJCUxQRkNfREFUQV9CVUZfU0laRTsKKwkJCWZpcnN0X2lvY2JxLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLmFjY19sZW4gKz0KKwkJCQliZl9nZXQobHBmY19yY3FlX2xlbmd0aCwgJnNlcV9kbWFidWYtPnJjcWUpOwogCQl9IGVsc2UgewogCQkJaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEodnBvcnQtPnBoYmEpOwogCQkJaWYgKCFpb2NicSkgewpAQCAtMTA5NzgsNiArMTA5OTMsOCBAQAogCQkJaW9jYnEtPmlvY2IudWxwQmRlQ291bnQgPSAxOwogCQkJaW9jYnEtPmlvY2IudW4uY29udDY0WzBdLnR1cy5mLmJkZVNpemUgPQogCQkJCQkJCUxQRkNfREFUQV9CVUZfU0laRTsKKwkJCWZpcnN0X2lvY2JxLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLmFjY19sZW4gKz0KKwkJCQliZl9nZXQobHBmY19yY3FlX2xlbmd0aCwgJnNlcV9kbWFidWYtPnJjcWUpOwogCQkJaW9jYnEtPmlvY2IudW4ucmN2ZWxzLnJlbW90ZUlEID0gc2lkOwogCQkJbGlzdF9hZGRfdGFpbCgmaW9jYnEtPmxpc3QsICZmaXJzdF9pb2NicS0+bGlzdCk7CiAJCX0KQEAgLTExMzI0LDcgKzExMzQxLDcgQEAKIAltYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtYm94cSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbHBmY19pbml0X3ZwaShtYm94cSwgdnBpKTsKKwlscGZjX2luaXRfdnBpKHBoYmEsIG1ib3hxLCB2cGkpOwogCW1ib3hfdG1vID0gbHBmY19tYm94X3Rtb192YWwocGhiYSwgTUJYX0lOSVRfVlBJKTsKIAlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChwaGJhLCBtYm94cSwgbWJveF90bW8pOwogCWlmIChyYyAhPSBNQlhfVElNRU9VVCkKQEAgLTExNTE5LDYgKzExNTM2LDcgQEAKIAl1aW50MzJfdCBhbGxvY19sZW4sIHJlcV9sZW47CiAJc3RydWN0IGxwZmNfbWJ4X3JlYWRfZmNmX3RibCAqcmVhZF9mY2Y7CiAKKwlwaGJhLT5mY29lX2V2ZW50dGFnX2F0X2ZjZl9zY2FuID0gcGhiYS0+ZmNvZV9ldmVudHRhZzsKIAltYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtYm94cSkgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULApAQCAtMTE1NzAsNyArMTE1ODgsMTQwIEBACiAJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKIAkJbHBmY19zbGk0X21ib3hfY21kX2ZyZWUocGhiYSwgbWJveHEpOwogCQllcnJvciA9IC1FSU87Ci0JfSBlbHNlCisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCXBoYmEtPmhiYV9mbGFnIHw9IEZDRl9ESVNDX0lOUFJPR1JFU1M7CisJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCWVycm9yID0gMDsKKwl9CiAJcmV0dXJuIGVycm9yOwogfQorCisvKioKKyAqIGxwZmNfc2xpX3JlYWRfbGlua19zdGUgLSBSZWFkIHJlZ2lvbiAyMyB0byBkZWNpZGUgaWYgbGluayBpcyBkaXNhYmxlZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZCByZWdpb24gMjMgYW5kIHBhcnNlIFRMViBmb3IgcG9ydCBzdGF0dXMgdG8KKyAqIGRlY2lkZSBpZiB0aGUgdXNlciBkaXNhbGVkIHRoZSBwb3J0LiBJZiB0aGUgVExWIGluZGljYXRlcyB0aGUKKyAqIHBvcnQgaXMgZGlzYWJsZWQsIHRoZSBoYmFfZmxhZyBpcyBzZXQgYWNjb3JkaW5nbHkuCisgKiovCit2b2lkCitscGZjX3NsaV9yZWFkX2xpbmtfc3RlKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlMUEZDX01CT1hRX3QgKnBtYiA9IE5VTEw7CisJTUFJTEJPWF90ICptYjsKKwl1aW50OF90ICpyZ24yM19kYXRhID0gTlVMTDsKKwl1aW50MzJfdCBvZmZzZXQgPSAwLCBkYXRhX3NpemUsIHN1Yl90bHZfbGVuLCB0bHZfb2Zmc2V0OworCWludCByYzsKKworCXBtYiA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbWIpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCSIyNjAwIGxwZmNfc2xpX3JlYWRfc2VyZGVzX3BhcmFtIGZhaWxlZCB0byIKKwkJCSIgYWxsb2NhdGUgbWFpbGJveCBtZW1vcnlcbiIpOworCQlnb3RvIG91dDsKKwl9CisJbWIgPSAmcG1iLT51Lm1iOworCisJLyogR2V0IGFkYXB0ZXIgUmVnaW9uIDIzIGRhdGEgKi8KKwlyZ24yM19kYXRhID0ga3phbGxvYyhETVBfUkdOMjNfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZ24yM19kYXRhKQorCQlnb3RvIG91dDsKKworCWRvIHsKKwkJbHBmY19kdW1wX21lbShwaGJhLCBwbWIsIG9mZnNldCwgRE1QX1JFR0lPTl8yMyk7CisJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9QT0xMKTsKKworCQlpZiAocmMgIT0gTUJYX1NVQ0NFU1MpIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJCSIyNjAxIGxwZmNfc2xpX3JlYWRfbGlua19zdGUgZmFpbGVkIHRvIgorCQkJCSIgcmVhZCBjb25maWcgcmVnaW9uIDIzIHJjIDB4JXggU3RhdHVzIDB4JXhcbiIsCisJCQkJcmMsIG1iLT5tYnhTdGF0dXMpOworCQkJbWItPnVuLnZhckRtcC53b3JkX2NudCA9IDA7CisJCX0KKwkJLyoKKwkJICogZHVtcCBtZW0gbWF5IHJldHVybiBhIHplcm8gd2hlbiBmaW5pc2hlZCBvciB3ZSBnb3QgYQorCQkgKiBtYWlsYm94IGVycm9yLCBlaXRoZXIgd2F5IHdlIGFyZSBkb25lLgorCQkgKi8KKwkJaWYgKG1iLT51bi52YXJEbXAud29yZF9jbnQgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAobWItPnVuLnZhckRtcC53b3JkX2NudCA+IERNUF9SR04yM19TSVpFIC0gb2Zmc2V0KQorCQkJbWItPnVuLnZhckRtcC53b3JkX2NudCA9IERNUF9SR04yM19TSVpFIC0gb2Zmc2V0OworCisJCWxwZmNfc2xpX3BjaW1lbV9iY29weSgoKHVpbnQ4X3QgKiltYikgKyBETVBfUlNQX09GRlNFVCwKKwkJCXJnbjIzX2RhdGEgKyBvZmZzZXQsCisJCQltYi0+dW4udmFyRG1wLndvcmRfY250KTsKKwkJb2Zmc2V0ICs9IG1iLT51bi52YXJEbXAud29yZF9jbnQ7CisJfSB3aGlsZSAobWItPnVuLnZhckRtcC53b3JkX2NudCAmJiBvZmZzZXQgPCBETVBfUkdOMjNfU0laRSk7CisKKwlkYXRhX3NpemUgPSBvZmZzZXQ7CisJb2Zmc2V0ID0gMDsKKworCWlmICghZGF0YV9zaXplKQorCQlnb3RvIG91dDsKKworCS8qIENoZWNrIHRoZSByZWdpb24gc2lnbmF0dXJlIGZpcnN0ICovCisJaWYgKG1lbWNtcCgmcmduMjNfZGF0YVtvZmZzZXRdLCBMUEZDX1JFR0lPTjIzX1NJR05BVFVSRSwgNCkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCSIyNjE5IENvbmZpZyByZWdpb24gMjMgaGFzIGJhZCBzaWduYXR1cmVcbiIpOworCQkJZ290byBvdXQ7CisJfQorCW9mZnNldCArPSA0OworCisJLyogQ2hlY2sgdGhlIGRhdGEgc3RydWN0dXJlIHZlcnNpb24gKi8KKwlpZiAocmduMjNfZGF0YVtvZmZzZXRdICE9IExQRkNfUkVHSU9OMjNfVkVSU0lPTikgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJIjI2MjAgQ29uZmlnIHJlZ2lvbiAyMyBoYXMgYmFkIHZlcnNpb25cbiIpOworCQlnb3RvIG91dDsKKwl9CisJb2Zmc2V0ICs9IDQ7CisKKwkvKiBQYXJzZSBUTFYgZW50cmllcyBpbiB0aGUgcmVnaW9uICovCisJd2hpbGUgKG9mZnNldCA8IGRhdGFfc2l6ZSkgeworCQlpZiAocmduMjNfZGF0YVtvZmZzZXRdID09IExQRkNfUkVHSU9OMjNfTEFTVF9SRUMpCisJCQlicmVhazsKKwkJLyoKKwkJICogSWYgdGhlIFRMViBpcyBub3QgZHJpdmVyIHNwZWNpZmljIFRMViBvciBkcml2ZXIgaWQgaXMKKwkJICogbm90IGxpbnV4IGRyaXZlciBpZCwgc2tpcCB0aGUgcmVjb3JkLgorCQkgKi8KKwkJaWYgKChyZ24yM19kYXRhW29mZnNldF0gIT0gRFJJVkVSX1NQRUNJRklDX1RZUEUpIHx8CisJCSAgICAocmduMjNfZGF0YVtvZmZzZXQgKyAyXSAhPSBMSU5VWF9EUklWRVJfSUQpIHx8CisJCSAgICAocmduMjNfZGF0YVtvZmZzZXQgKyAzXSAhPSAwKSkgeworCQkJb2Zmc2V0ICs9IHJnbjIzX2RhdGFbb2Zmc2V0ICsgMV0gKiA0ICsgNDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogRHJpdmVyIGZvdW5kIGEgZHJpdmVyIHNwZWNpZmljIFRMViBpbiB0aGUgY29uZmlnIHJlZ2lvbiAqLworCQlzdWJfdGx2X2xlbiA9IHJnbjIzX2RhdGFbb2Zmc2V0ICsgMV0gKiA0OworCQlvZmZzZXQgKz0gNDsKKwkJdGx2X29mZnNldCA9IDA7CisKKwkJLyoKKwkJICogU2VhcmNoIGZvciBjb25maWd1cmVkIHBvcnQgc3RhdGUgc3ViLVRMVi4KKwkJICovCisJCXdoaWxlICgob2Zmc2V0IDwgZGF0YV9zaXplKSAmJgorCQkJKHRsdl9vZmZzZXQgPCBzdWJfdGx2X2xlbikpIHsKKwkJCWlmIChyZ24yM19kYXRhW29mZnNldF0gPT0gTFBGQ19SRUdJT04yM19MQVNUX1JFQykgeworCQkJCW9mZnNldCArPSA0OworCQkJCXRsdl9vZmZzZXQgKz0gNDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChyZ24yM19kYXRhW29mZnNldF0gIT0gUE9SVF9TVEVfVFlQRSkgeworCQkJCW9mZnNldCArPSByZ24yM19kYXRhW29mZnNldCArIDFdICogNCArIDQ7CisJCQkJdGx2X29mZnNldCArPSByZ24yM19kYXRhW29mZnNldCArIDFdICogNCArIDQ7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIFRoaXMgSEJBIGNvbnRhaW5zIFBPUlRfU1RFIGNvbmZpZ3VyZWQgKi8KKwkJCWlmICghcmduMjNfZGF0YVtvZmZzZXQgKyAyXSkKKwkJCQlwaGJhLT5oYmFfZmxhZyB8PSBMSU5LX0RJU0FCTEVEOworCisJCQlnb3RvIG91dDsKKwkJfQorCX0KK291dDoKKwlpZiAocG1iKQorCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwlrZnJlZShyZ24yM19kYXRhKTsKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCmluZGV4IDNiMjc2YjQuLmI1ZjRiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCkBAIC0xMzIsNiArMTMyLDcgQEAKIAogc3RydWN0IGxwZmNfZmNmIHsKIAl1aW50OF90CSBmYWJyaWNfbmFtZVs4XTsKKwl1aW50OF90CSBzd2l0Y2hfbmFtZVs4XTsKIAl1aW50OF90ICBtYWNfYWRkcls2XTsKIAl1aW50MTZfdCBmY2ZfaW5keDsKIAl1aW50MTZfdCBmY2ZpOwpAQCAtMTUwLDYgKzE1MSwxMCBAQAogI2RlZmluZSBMUEZDX1JFR0lPTjIzX1NJR05BVFVSRSAiUkcyMyIKICNkZWZpbmUgTFBGQ19SRUdJT04yM19WRVJTSU9OCTEKICNkZWZpbmUgTFBGQ19SRUdJT04yM19MQVNUX1JFQyAgMHhmZgorI2RlZmluZSBEUklWRVJfU1BFQ0lGSUNfVFlQRQkweEEyCisjZGVmaW5lIExJTlVYX0RSSVZFUl9JRAkJMHgyMAorI2RlZmluZSBQT1JUX1NURV9UWVBFCQkweDEKKwogc3RydWN0IGxwZmNfZmlwX3BhcmFtX2hkciB7CiAJdWludDhfdCB0eXBlOwogI2RlZmluZSBGQ09FX1BBUkFNX1RZUEUJCTB4QTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKaW5kZXggNDEwOTRlMC4uOWFlMjBhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKQEAgLTE4LDcgKzE4LDcgQEAKICAqIGluY2x1ZGVkIHdpdGggdGhpcyBwYWNrYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjMuMyIKKyNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4zLjQiCiAKICNkZWZpbmUgTFBGQ19EUklWRVJfTkFNRQkJImxwZmMiCiAjZGVmaW5lIExQRkNfU1BfRFJJVkVSX0hBTkRMRVJfTkFNRQkibHBmYzpzcCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYwppbmRleCBlMGI0OTkyLi42MDZlZmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCkBAIC0zMTMsMjIgKzMxMyw2IEBACiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KIAotCS8qCi0JICogSW4gU0xJNCwgdGhlIHZwaSBtdXN0IGJlIGFjdGl2YXRlZCBiZWZvcmUgaXQgY2FuIGJlIHVzZWQKLQkgKiBieSB0aGUgcG9ydC4KLQkgKi8KLQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7Ci0JCXJjID0gbHBmY19zbGk0X2luaXRfdnBpKHBoYmEsIHZwaSk7Ci0JCWlmIChyYykgewotCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfVlBPUlQsCi0JCQkJCSIxODM4IEZhaWxlZCB0byBJTklUX1ZQSSBvbiB2cGkgJWQgIgotCQkJCQkic3RhdHVzICVkXG4iLCB2cGksIHJjKTsKLQkJCXJjID0gVlBPUlRfTk9SRVNPVVJDRVM7Ci0JCQlscGZjX2ZyZWVfdnBpKHBoYmEsIHZwaSk7Ci0JCQlnb3RvIGVycm9yX291dDsKLQkJfQotCX0KLQogCS8qIEFzc2lnbiBhbiB1bnVzZWQgYm9hcmQgbnVtYmVyICovCiAJaWYgKChpbnN0YW5jZSA9IGxwZmNfZ2V0X2luc3RhbmNlKCkpIDwgMCkgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19WUE9SVCwKQEAgLTM2NywxMiArMzUxLDggQEAKIAkJZ290byBlcnJvcl9vdXQ7CiAJfQogCi0JbWVtY3B5KHZwb3J0LT5mY19wb3J0bmFtZS51Lnd3biwgdnBvcnQtPmZjX3NwYXJhbS5wb3J0TmFtZS51Lnd3biwgOCk7Ci0JbWVtY3B5KHZwb3J0LT5mY19ub2RlbmFtZS51Lnd3biwgdnBvcnQtPmZjX3NwYXJhbS5ub2RlTmFtZS51Lnd3biwgOCk7Ci0JaWYgKGZjX3Zwb3J0LT5ub2RlX25hbWUgIT0gMCkKLQkJdTY0X3RvX3d3bihmY192cG9ydC0+bm9kZV9uYW1lLCB2cG9ydC0+ZmNfbm9kZW5hbWUudS53d24pOwotCWlmIChmY192cG9ydC0+cG9ydF9uYW1lICE9IDApCi0JCXU2NF90b193d24oZmNfdnBvcnQtPnBvcnRfbmFtZSwgdnBvcnQtPmZjX3BvcnRuYW1lLnUud3duKTsKKwl1NjRfdG9fd3duKGZjX3Zwb3J0LT5ub2RlX25hbWUsIHZwb3J0LT5mY19ub2RlbmFtZS51Lnd3bik7CisJdTY0X3RvX3d3bihmY192cG9ydC0+cG9ydF9uYW1lLCB2cG9ydC0+ZmNfcG9ydG5hbWUudS53d24pOwogCiAJbWVtY3B5KCZ2cG9ydC0+ZmNfc3BhcmFtLnBvcnROYW1lLCB2cG9ydC0+ZmNfcG9ydG5hbWUudS53d24sIDgpOwogCW1lbWNweSgmdnBvcnQtPmZjX3NwYXJhbS5ub2RlTmFtZSwgdnBvcnQtPmZjX25vZGVuYW1lLnUud3duLCA4KTsKQEAgLTQwNCw3ICszODQsMzQgQEAKIAkqKHN0cnVjdCBscGZjX3Zwb3J0ICoqKWZjX3Zwb3J0LT5kZF9kYXRhID0gdnBvcnQ7CiAJdnBvcnQtPmZjX3Zwb3J0ID0gZmNfdnBvcnQ7CiAKKwkvKgorCSAqIEluIFNMSTQsIHRoZSB2cGkgbXVzdCBiZSBhY3RpdmF0ZWQgYmVmb3JlIGl0IGNhbiBiZSB1c2VkCisJICogYnkgdGhlIHBvcnQuCisJICovCisJaWYgKChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpICYmCisJCShwcG9ydC0+dmZpX3N0YXRlICYgTFBGQ19WRklfUkVHSVNURVJFRCkpIHsKKwkJcmMgPSBscGZjX3NsaTRfaW5pdF92cGkocGhiYSwgdnBpKTsKKwkJaWYgKHJjKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19WUE9SVCwKKwkJCQkJIjE4MzggRmFpbGVkIHRvIElOSVRfVlBJIG9uIHZwaSAlZCAiCisJCQkJCSJzdGF0dXMgJWRcbiIsIHZwaSwgcmMpOworCQkJcmMgPSBWUE9SVF9OT1JFU09VUkNFUzsKKwkJCWxwZmNfZnJlZV92cGkocGhiYSwgdnBpKTsKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQl9CisJfSBlbHNlIGlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKKwkJLyoKKwkJICogRHJpdmVyIGNhbm5vdCBJTklUX1ZQSSBub3cuIFNldCB0aGUgZmxhZ3MgdG8KKwkJICogaW5pdF92cGkgd2hlbiByZWdfdmZpIGNvbXBsZXRlLgorCQkgKi8KKwkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7CisJCWxwZmNfdnBvcnRfc2V0X3N0YXRlKHZwb3J0LCBGQ19WUE9SVF9MSU5LRE9XTik7CisJCXJjID0gVlBPUlRfT0s7CisJCWdvdG8gb3V0OworCX0KKwogCWlmICgocGhiYS0+bGlua19zdGF0ZSA8IExQRkNfTElOS19VUCkgfHwKKwkgICAgKHBwb3J0LT5wb3J0X3N0YXRlIDwgTFBGQ19GQUJSSUNfQ0ZHX0xJTkspIHx8CiAJICAgIChwaGJhLT5mY190b3BvbG9neSA9PSBUT1BPTE9HWV9MT09QKSkgewogCQlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfTElOS0RPV04pOwogCQlyYyA9IFZQT1JUX09LOwpAQCAtNjYxLDcgKzY2OCw3IEBACiAJCQkJbHBmY19wcmludGZfbG9nKHZwb3J0LT5waGJhLCBLRVJOX1dBUk5JTkcsCiAJCQkJCQlMT0dfVlBPUlQsCiAJCQkJCQkiMTgyOSBDVCBjb21tYW5kIGZhaWxlZCB0byAiCi0JCQkJCQkiZGVsZXRlIG9iamVjdHMgb24gZmFicmljLiBcbiIpOworCQkJCQkJImRlbGV0ZSBvYmplY3RzIG9uIGZhYnJpY1xuIik7CiAJCX0KIAkJLyogRmlyc3QgbG9vayBmb3IgdGhlIEZhYnJpYyBuZGxwICovCiAJCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZCh2cG9ydCwgRmFicmljX0RJRCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCmluZGV4IDM1YTEzODYuLmQ5NWQyZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCkBAIC05NCw3ICs5NCw3IEBACiAJaW50IHJjOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKLQlpZiAoaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3MpCisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCiAJCWdvdG8gcmVhcm1fdGltZXI7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCkBAIC02ODcsNiArNjg3LDE0IEBACiAJaW9jLT5tYXNrX2ludGVycnVwdHMgPSAwOwogfQogCit1bmlvbiByZXBseV9kZXNjcmlwdG9yIHsKKwl1NjQgd29yZDsKKwlzdHJ1Y3QgeworCQl1MzIgbG93OworCQl1MzIgaGlnaDsKKwl9IHU7Cit9OworCiAvKioKICAqIF9iYXNlX2ludGVycnVwdCAtIE1QVCBhZGFwdGVyIChJT0MpIHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVyLgogICogQGlycTogaXJxIG51bWJlciAobm90IHVzZWQpCkBAIC02OTgsNDcgKzcwNiwzOCBAQAogc3RhdGljIGlycXJldHVybl90CiBfYmFzZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqYnVzX2lkKQogewotCXVuaW9uIHJlcGx5X2Rlc2NyaXB0b3IgewotCQl1NjQgd29yZDsKLQkJc3RydWN0IHsKLQkJCXUzMiBsb3c7Ci0JCQl1MzIgaGlnaDsKLQkJfSB1OwotCX07CiAJdW5pb24gcmVwbHlfZGVzY3JpcHRvciByZDsKLQl1MzIgcG9zdF9pbmRleCwgcG9zdF9pbmRleF9uZXh0LCBjb21wbGV0ZWRfY21kczsKKwl1MzIgY29tcGxldGVkX2NtZHM7CiAJdTggcmVxdWVzdF9kZXNyaXB0X3R5cGU7CiAJdTE2IHNtaWQ7CiAJdTggY2JfaWR4OwogCXUzMiByZXBseTsKIAl1OCBWRl9JRDsKLQlpbnQgaTsKIAlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBidXNfaWQ7CisJTXBpMlJlcGx5RGVzY3JpcHRvcnNVbmlvbl90ICpycGY7CiAKIAlpZiAoaW9jLT5tYXNrX2ludGVycnVwdHMpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCXBvc3RfaW5kZXggPSBpb2MtPnJlcGx5X3Bvc3RfaG9zdF9pbmRleDsKLQlyZXF1ZXN0X2Rlc3JpcHRfdHlwZSA9IGlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhdLgotCSAgICBEZWZhdWx0LlJlcGx5RmxhZ3MgJiBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UWVBFX01BU0s7CisJcnBmID0gJmlvYy0+cmVwbHlfcG9zdF9mcmVlW2lvYy0+cmVwbHlfcG9zdF9ob3N0X2luZGV4XTsKKwlyZXF1ZXN0X2Rlc3JpcHRfdHlwZSA9IHJwZi0+RGVmYXVsdC5SZXBseUZsYWdzCisJICAgICAmIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RZUEVfTUFTSzsKIAlpZiAocmVxdWVzdF9kZXNyaXB0X3R5cGUgPT0gTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVU5VU0VEKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAljb21wbGV0ZWRfY21kcyA9IDA7CiAJZG8gewotCQlyZC53b3JkID0gaW9jLT5yZXBseV9wb3N0X2ZyZWVbcG9zdF9pbmRleF0uV29yZHM7CisJCXJkLndvcmQgPSBycGYtPldvcmRzOwogCQlpZiAocmQudS5sb3cgPT0gVUlOVF9NQVggfHwgcmQudS5oaWdoID09IFVJTlRfTUFYKQogCQkJZ290byBvdXQ7CiAJCXJlcGx5ID0gMDsKIAkJY2JfaWR4ID0gMHhGRjsKLQkJc21pZCA9IGxlMTZfdG9fY3B1KGlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhdLgotCQkgICAgRGVmYXVsdC5EZXNjcmlwdG9yVHlwZURlcGVuZGVudDEpOwotCQlWRl9JRCA9IGlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhdLgotCQkgICAgRGVmYXVsdC5WRl9JRDsKKwkJc21pZCA9IGxlMTZfdG9fY3B1KHJwZi0+RGVmYXVsdC5EZXNjcmlwdG9yVHlwZURlcGVuZGVudDEpOworCQlWRl9JRCA9IHJwZi0+RGVmYXVsdC5WRl9JRDsKIAkJaWYgKHJlcXVlc3RfZGVzcmlwdF90eXBlID09CiAJCSAgICBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19BRERSRVNTX1JFUExZKSB7Ci0JCQlyZXBseSA9IGxlMzJfdG9fY3B1KGlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhdLgotCQkJICAgIEFkZHJlc3NSZXBseS5SZXBseUZyYW1lQWRkcmVzcyk7CisJCQlyZXBseSA9IGxlMzJfdG9fY3B1CisJCQkJKHJwZi0+QWRkcmVzc1JlcGx5LlJlcGx5RnJhbWVBZGRyZXNzKTsKIAkJfSBlbHNlIGlmIChyZXF1ZXN0X2Rlc3JpcHRfdHlwZSA9PQogCQkgICAgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVEFSR0VUX0NPTU1BTkRfQlVGRkVSKQogCQkJZ290byBuZXh0OwpAQCAtNzY1LDIxICs3NjQsMjcgQEAKIAkJCSAgICAwIDogaW9jLT5yZXBseV9mcmVlX2hvc3RfaW5kZXggKyAxOwogCQkJaW9jLT5yZXBseV9mcmVlW2lvYy0+cmVwbHlfZnJlZV9ob3N0X2luZGV4XSA9CiAJCQkgICAgY3B1X3RvX2xlMzIocmVwbHkpOworCQkJd21iKCk7CiAJCQl3cml0ZWwoaW9jLT5yZXBseV9mcmVlX2hvc3RfaW5kZXgsCiAJCQkgICAgJmlvYy0+Y2hpcC0+UmVwbHlGcmVlSG9zdEluZGV4KTsKLQkJCXdtYigpOwogCQl9CiAKICBuZXh0OgotCQlwb3N0X2luZGV4X25leHQgPSAocG9zdF9pbmRleCA9PSAoaW9jLT5yZXBseV9wb3N0X3F1ZXVlX2RlcHRoIC0KLQkJICAgIDEpKSA/IDAgOiBwb3N0X2luZGV4ICsgMTsKKworCQlycGYtPldvcmRzID0gVUxMT05HX01BWDsKKwkJaW9jLT5yZXBseV9wb3N0X2hvc3RfaW5kZXggPSAoaW9jLT5yZXBseV9wb3N0X2hvc3RfaW5kZXggPT0KKwkJICAgIChpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGggLSAxKSkgPyAwIDoKKwkJICAgIGlvYy0+cmVwbHlfcG9zdF9ob3N0X2luZGV4ICsgMTsKIAkJcmVxdWVzdF9kZXNyaXB0X3R5cGUgPQotCQkgICAgaW9jLT5yZXBseV9wb3N0X2ZyZWVbcG9zdF9pbmRleF9uZXh0XS5EZWZhdWx0LlJlcGx5RmxhZ3MKLQkJICAgICYgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVFlQRV9NQVNLOworCQkgICAgaW9jLT5yZXBseV9wb3N0X2ZyZWVbaW9jLT5yZXBseV9wb3N0X2hvc3RfaW5kZXhdLkRlZmF1bHQuCisJCSAgICBSZXBseUZsYWdzICYgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVFlQRV9NQVNLOwogCQljb21wbGV0ZWRfY21kcysrOwogCQlpZiAocmVxdWVzdF9kZXNyaXB0X3R5cGUgPT0gTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVU5VU0VEKQogCQkJZ290byBvdXQ7Ci0JCXBvc3RfaW5kZXggPSBwb3N0X2luZGV4X25leHQ7CisJCWlmICghaW9jLT5yZXBseV9wb3N0X2hvc3RfaW5kZXgpCisJCQlycGYgPSBpb2MtPnJlcGx5X3Bvc3RfZnJlZTsKKwkJZWxzZQorCQkJcnBmKys7CiAJfSB3aGlsZSAoMSk7CiAKICBvdXQ6CkBAIC03ODcsMTkgKzc5Miw4IEBACiAJaWYgKCFjb21wbGV0ZWRfY21kcykKIAkJcmV0dXJuIElSUV9OT05FOwogCi0JLyogcmVwbHkgcG9zdCBkZXNjcmlwdG9yIGhhbmRsaW5nICovCi0JcG9zdF9pbmRleF9uZXh0ID0gaW9jLT5yZXBseV9wb3N0X2hvc3RfaW5kZXg7Ci0JZm9yIChpID0gMCA7IGkgPCBjb21wbGV0ZWRfY21kczsgaSsrKSB7Ci0JCXBvc3RfaW5kZXggPSBwb3N0X2luZGV4X25leHQ7Ci0JCS8qIHBvaXNvbiB0aGUgcmVwbHkgcG9zdCBkZXNjcmlwdG9yICovCi0JCWlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhfbmV4dF0uV29yZHMgPSBVTExPTkdfTUFYOwotCQlwb3N0X2luZGV4X25leHQgPSAocG9zdF9pbmRleCA9PQotCQkgICAgKGlvYy0+cmVwbHlfcG9zdF9xdWV1ZV9kZXB0aCAtIDEpKQotCQkgICAgPyAwIDogcG9zdF9pbmRleCArIDE7Ci0JfQotCWlvYy0+cmVwbHlfcG9zdF9ob3N0X2luZGV4ID0gcG9zdF9pbmRleF9uZXh0OwotCXdyaXRlbChwb3N0X2luZGV4X25leHQsICZpb2MtPmNoaXAtPlJlcGx5UG9zdEhvc3RJbmRleCk7CiAJd21iKCk7CisJd3JpdGVsKGlvYy0+cmVwbHlfcG9zdF9ob3N0X2luZGV4LCAmaW9jLT5jaGlwLT5SZXBseVBvc3RIb3N0SW5kZXgpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMTU0Miw2ICsxNTM2LDggQEAKIAkgICAoaW9jLT5iaW9zX3BnMy5CaW9zVmVyc2lvbiAmIDB4MDAwMEZGMDApID4+IDgsCiAJICAgIGlvYy0+Ymlvc19wZzMuQmlvc1ZlcnNpb24gJiAweDAwMDAwMEZGKTsKIAorCV9iYXNlX2Rpc3BsYXlfZGVsbF9icmFuZGluZyhpb2MpOworCiAJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIlByb3RvY29sPSgiLCBpb2MtPm5hbWUpOwogCiAJaWYgKGlvYy0+ZmFjdHMuUHJvdG9jb2xGbGFncyAmIE1QSTJfSU9DRkFDVFNfUFJPVE9DT0xfU0NTSV9JTklUSUFUT1IpIHsKQEAgLTE1NTQsOCArMTU1MCw2IEBACiAJCWkrKzsKIAl9CiAKLQlfYmFzZV9kaXNwbGF5X2RlbGxfYnJhbmRpbmcoaW9jKTsKLQogCWkgPSAwOwogCXByaW50aygiKSwgIik7CiAJcHJpbnRrKCJDYXBhYmlsaXRpZXM9KCIpOwpAQCAtMTYyNyw2ICsxNjIxLDkgQEAKIAl1MzIgaW91bml0X3BnMV9mbGFnczsKIAogCW1wdDJzYXNfY29uZmlnX2dldF9tYW51ZmFjdHVyaW5nX3BnMChpb2MsICZtcGlfcmVwbHksICZpb2MtPm1hbnVfcGcwKTsKKwlpZiAoaW9jLT5pcl9maXJtd2FyZSkKKwkJbXB0MnNhc19jb25maWdfZ2V0X21hbnVmYWN0dXJpbmdfcGcxMChpb2MsICZtcGlfcmVwbHksCisJCSAgICAmaW9jLT5tYW51X3BnMTApOwogCW1wdDJzYXNfY29uZmlnX2dldF9iaW9zX3BnMihpb2MsICZtcGlfcmVwbHksICZpb2MtPmJpb3NfcGcyKTsKIAltcHQyc2FzX2NvbmZpZ19nZXRfYmlvc19wZzMoaW9jLCAmbXBpX3JlcGx5LCAmaW9jLT5iaW9zX3BnMyk7CiAJbXB0MnNhc19jb25maWdfZ2V0X2lvY19wZzgoaW9jLCAmbXBpX3JlcGx5LCAmaW9jLT5pb2NfcGc4KTsKQEAgLTE2NDcsNyArMTY0NCw3IEBACiAJCWlvdW5pdF9wZzFfZmxhZ3MgfD0KIAkJICAgIE1QSTJfSU9VTklUUEFHRTFfRElTQUJMRV9UQVNLX1NFVF9GVUxMX0hBTkRMSU5HOwogCWlvYy0+aW91bml0X3BnMS5GbGFncyA9IGNwdV90b19sZTMyKGlvdW5pdF9wZzFfZmxhZ3MpOwotCW1wdDJzYXNfY29uZmlnX3NldF9pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwgaW9jLT5pb3VuaXRfcGcxKTsKKwltcHQyc2FzX2NvbmZpZ19zZXRfaW91bml0X3BnMShpb2MsICZtcGlfcmVwbHksICZpb2MtPmlvdW5pdF9wZzEpOwogfQogCiAvKioKQEAgLTMzMDMsMTMgKzMzMDAsMTEgQEAKIAlpb2MtPnRtX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOwogCWlvYy0+dG1fY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKIAltdXRleF9pbml0KCZpb2MtPnRtX2NtZHMubXV0ZXgpOwotCWluaXRfY29tcGxldGlvbigmaW9jLT50bV9jbWRzLmRvbmUpOwogCiAJLyogY29uZmlnIHBhZ2UgaW50ZXJuYWwgY29tbWFuZCBiaXRzICovCiAJaW9jLT5jb25maWdfY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tFUk5FTCk7CiAJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKIAltdXRleF9pbml0KCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKLQlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y29uZmlnX2NtZHMuZG9uZSk7CiAKIAkvKiBjdGwgbW9kdWxlIGludGVybmFsIGNvbW1hbmQgYml0cyAqLwogCWlvYy0+Y3RsX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOwpAQCAtMzQzMyw2ICszNDI4LDcgQEAKIAkJaWYgKGlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUEVORElORykgewogCQkJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfUkVTRVQ7CiAJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgaW9jLT5jb25maWdfY21kcy5zbWlkKTsKKwkJCWlvYy0+Y29uZmlnX2NtZHMuc21pZCA9IFVTSE9SVF9NQVg7CiAJCQljb21wbGV0ZSgmaW9jLT5jb25maWdfY21kcy5kb25lKTsKIAkJfQogCQlicmVhazsKQEAgLTM1MDEsMjAgKzM0OTcsMTMgQEAKIAkgICAgX19mdW5jX18pKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7Ci0JaWYgKGlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzKSB7CisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogYnVzeVxuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQlpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzcyA9IDE7CiAJaW9jLT5zaG9zdF9yZWNvdmVyeSA9IDE7Ci0JaWYgKGlvYy0+c2hvc3QtPnNob3N0X3N0YXRlID09IFNIT1NUX1JVTk5JTkcpIHsKLQkJLyogc2V0IGJhY2sgdG8gU0hPU1RfUlVOTklORyBpbiBtcHQyc2FzX3Njc2loLmMgKi8KLQkJc2NzaV9ob3N0X3NldF9zdGF0ZShpb2MtPnNob3N0LCBTSE9TVF9SRUNPVkVSWSk7Ci0JCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJwdXR0aW5nIGNvbnRyb2xsZXIgaW50byAiCi0JCSAgICAiU0hPU1RfUkVDT1ZFUllcbiIsIGlvYy0+bmFtZSk7Ci0JfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKIAogCV9iYXNlX3Jlc2V0X2hhbmRsZXIoaW9jLCBNUFQyX0lPQ19QUkVfUkVTRVQpOwpAQCAtMzUzNCw3ICszNTIzLDEwIEBACiAJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sICgociA9PSAwKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSkpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKLQlpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzcyA9IDA7CisJaW9jLT5zaG9zdF9yZWNvdmVyeSA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCisJaWYgKCFyKQorCQlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfUlVOTklORyk7CiAJcmV0dXJuIHI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCmluZGV4IGFjZGNmZjEuLjJmYWFiMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCkBAIC02OSwxMCArNjksMTAgQEAKICNkZWZpbmUgTVBUMlNBU19EUklWRVJfTkFNRQkJIm1wdDJzYXMiCiAjZGVmaW5lIE1QVDJTQVNfQVVUSE9SCSJMU0kgQ29ycG9yYXRpb24gPERMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20+IgogI2RlZmluZSBNUFQyU0FTX0RFU0NSSVBUSU9OCSJMU0kgTVBUIEZ1c2lvbiBTQVMgMi4wIERldmljZSBEcml2ZXIiCi0jZGVmaW5lIE1QVDJTQVNfRFJJVkVSX1ZFUlNJT04JCSIwMS4xMDAuMDQuMDAiCisjZGVmaW5lIE1QVDJTQVNfRFJJVkVSX1ZFUlNJT04JCSIwMS4xMDAuMDYuMDAiCiAjZGVmaW5lIE1QVDJTQVNfTUFKT1JfVkVSU0lPTgkJMDEKICNkZWZpbmUgTVBUMlNBU19NSU5PUl9WRVJTSU9OCQkxMDAKLSNkZWZpbmUgTVBUMlNBU19CVUlMRF9WRVJTSU9OCQkwNAorI2RlZmluZSBNUFQyU0FTX0JVSUxEX1ZFUlNJT04JCTA2CiAjZGVmaW5lIE1QVDJTQVNfUkVMRUFTRV9WRVJTSU9OCQkwMAogCiAvKgpAQCAtMTE5LDYgKzExOSw3IEBACiAjZGVmaW5lIE1QVDJfSU9DX1BSRV9SRVNFVAkJMSAvKiBwcmlvciB0byBob3N0IHJlc2V0ICovCiAjZGVmaW5lIE1QVDJfSU9DX0FGVEVSX1JFU0VUCQkyIC8qIGp1c3QgYWZ0ZXIgaG9zdCByZXNldCAqLwogI2RlZmluZSBNUFQyX0lPQ19ET05FX1JFU0VUCQkzIC8qIGxpbmtzIHJlLWluaXRpYWxpemVkICovCisjZGVmaW5lIE1QVDJfSU9DX1JVTk5JTkcJCTQgLyogc2hvc3QgcnVubmluZyAqLwogCiAvKgogICogbG9nZ2luZyBmb3JtYXQKQEAgLTE5Niw2ICsxOTcsMzggQEAKICAqIEBibG9jazogZGV2aWNlIGlzIGluIFNERVZfQkxPQ0sgc3RhdGUKICAqIEB0bHJfc25vb3BfY2hlY2s6IGZsYWcgdXNlZCBpbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRvIGRpc2FibGUgVExSCiAgKi8KKworLyogT0VNIElkZW50aWZpZXJzICovCisjZGVmaW5lIE1GRzEwX09FTV9JRF9JTlZBTElEICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBNRkcxMF9PRU1fSURfREVMTCAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTUZHMTBfT0VNX0lEX0ZTQyAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1GRzEwX09FTV9JRF9TVU4gICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAzKQorI2RlZmluZSBNRkcxMF9PRU1fSURfSUJNICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKworLyogR0VORVJJQyBGbGFncyAwKi8KKyNkZWZpbmUgTUZHMTBfR0YwX09DRV9ESVNBQkxFRCAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1GRzEwX0dGMF9SMUVfRFJJVkVfQ09VTlQgICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNRkcxMF9HRjBfUjEwX0RJU1BMQVkgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTUZHMTBfR0YwX1NTRF9EQVRBX1NDUlVCX0RJU0FCTEUgICAgICAgKDB4MDAwMDAwMDgpCisjZGVmaW5lIE1GRzEwX0dGMF9TSU5HTEVfRFJJVkVfUjAgICAgICAgICAgICAgICgweDAwMDAwMDEwKQorCisvKiBPRU0gU3BlY2lmaWMgRmxhZ3Mgd2lsbCBjb21lIGZyb20gT0VNIHNwZWNpZmljIGhlYWRlciBmaWxlcyAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfTUFOXzEwIHsKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMDBoICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgT0VNSWRlbnRpZmllcjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDA0aCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwNWggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMDhoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDBDaCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIEdlbmVyaWNGbGFnczA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMGggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBHZW5lcmljRmxhZ3MxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTRoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE4aCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIE9FTVNwZWNpZmljRmxhZ3MwOyAgICAgICAgICAgICAgICAgICAgICAvKiAxQ2ggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBPRU1TcGVjaWZpY0ZsYWdzMTsgICAgICAgICAgICAgICAgICAgICAgLyogMjBoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1WzE4XTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI0aC02MGgqLworfSBNUEkyX0NPTkZJR19QQUdFX01BTl8xMCwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX01BTl8xMCwKKyAgTXBpMk1hbnVmYWN0dXJpbmdQYWdlMTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyTWFudWZhY3R1cmluZ1BhZ2UxMF90OworCiBzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgewogCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldDsKIAl1bnNpZ25lZCBpbnQJbHVuOwpAQCAtNDMxLDcgKzQ2NCw3IEBACiAgKiBAZndfZXZlbnRfbGlzdDogbGlzdCBvZiBmdyBldmVudHMKICAqIEBhZW5fZXZlbnRfcmVhZF9mbGFnOiBldmVudCBsb2cgd2FzIHJlYWQKICAqIEBicm9hZGNhc3RfYWVuX2J1c3k6IGJyb2FkY2FzdCBhZW4gd2FpdGluZyB0byBiZSBzZXJ2aWNlZAotICogQGlvY19yZXNldF9pbl9wcm9ncmVzczogaG9zdCByZXNldCBpbiBwcm9ncmVzcworICogQHNob3N0X3JlY292ZXJ5OiBob3N0IHJlc2V0IGluIHByb2dyZXNzCiAgKiBAaW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2s6CiAgKiBAaW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3M6IHBoeS9oYXJkIHJlc2V0IGluIHByb2dyZXNzCiAgKiBAaWdub3JlX2xvZ2luZm9zOiBpZ25vcmUgbG9naW5mb3MgZHVyaW5nIHRhc2sgbWFuYWdtZW50CkBAIC00NjAsNiArNDkzLDcgQEAKICAqIEBmYWN0czogc3RhdGljIGZhY3RzIGRhdGEKICAqIEBwZmFjdHM6IHN0YXRpYyBwb3J0IGZhY3RzIGRhdGEKICAqIEBtYW51X3BnMDogc3RhdGljIG1hbnVmYWN0dXJpbmcgcGFnZSAwCisgKiBAbWFudV9wZzEwOiBzdGF0aWMgbWFudWZhY3R1cmluZyBwYWdlIDEwCiAgKiBAYmlvc19wZzI6IHN0YXRpYyBiaW9zIHBhZ2UgMgogICogQGJpb3NfcGczOiBzdGF0aWMgYmlvcyBwYWdlIDMKICAqIEBpb2NfcGc4OiBzdGF0aWMgaW9jIHBhZ2UgOApAQCAtNTQ0LDcgKzU3OCw2IEBACiAJIC8qIG1pc2MgZmxhZ3MgKi8KIAlpbnQJCWFlbl9ldmVudF9yZWFkX2ZsYWc7CiAJdTgJCWJyb2FkY2FzdF9hZW5fYnVzeTsKLQl1OAkJaW9jX3Jlc2V0X2luX3Byb2dyZXNzOwogCXU4CQlzaG9zdF9yZWNvdmVyeTsKIAlzcGlubG9ja190IAlpb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jazsKIAl1OAkJaW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3M7CkBAIC02NjMsNiArNjk2LDcgQEAKIAlkbWFfYWRkcl90CWRpYWdfYnVmZmVyX2RtYVtNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOwogCXU4CQlkaWFnX2J1ZmZlcl9zdGF0dXNbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKIAl1MzIJCXVuaXF1ZV9pZFtNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdOworCU1waTJNYW51ZmFjdHVyaW5nUGFnZTEwX3QgbWFudV9wZzEwOwogCXUzMgkJcHJvZHVjdF9zcGVjaWZpY1tNUEkyX0RJQUdfQlVGX1RZUEVfQ09VTlRdWzIzXTsKIAl1MzIJCWRpYWdub3N0aWNfZmxhZ3NbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKIH07CkBAIC03MzQsNiArNzY4LDggQEAKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfbnVtYmVyX2hiYV9waHlzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggKm51bV9waHlzKTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfbWFudWZhY3R1cmluZ19wZzAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJNYW51ZmFjdHVyaW5nUGFnZTBfdCAqY29uZmlnX3BhZ2UpOworaW50IG1wdDJzYXNfY29uZmlnX2dldF9tYW51ZmFjdHVyaW5nX3BnMTAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJNYW51ZmFjdHVyaW5nUGFnZTEwX3QgKmNvbmZpZ19wYWdlKTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfYmlvc19wZzIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAogICAgICptcGlfcmVwbHksIE1waTJCaW9zUGFnZTJfdCAqY29uZmlnX3BhZ2UpOwogaW50IG1wdDJzYXNfY29uZmlnX2dldF9iaW9zX3BnMyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CkBAIC03NDksNyArNzg1LDcgQEAKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfaW91bml0X3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CiAgICAgKm1waV9yZXBseSwgTXBpMklPVW5pdFBhZ2UxX3QgKmNvbmZpZ19wYWdlKTsKIGludCBtcHQyc2FzX2NvbmZpZ19zZXRfaW91bml0X3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90Ci0gICAgKm1waV9yZXBseSwgTXBpMklPVW5pdFBhZ2UxX3QgY29uZmlnX3BhZ2UpOworICAgICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSk7CiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKICAgICAqbXBpX3JlcGx5LCBNcGkyU2FzSU9Vbml0UGFnZTFfdCAqY29uZmlnX3BhZ2UsIHUxNiBzeik7CiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X2lvY19wZzgoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdApAQCAtNzc2LDcgKzgxMiw2IEBACiAgICAgdTE2ICp2b2x1bWVfaGFuZGxlKTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX3d3aWQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgdm9sdW1lX2hhbmRsZSwKICAgICB1NjQgKnd3aWQpOwotCiAvKiBjdGwgc2hhcmVkIEFQSSAqLwogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptcHQyc2FzX2hvc3RfYXR0cnNbXTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbXB0MnNhc19kZXZfYXR0cnNbXTsKQEAgLTc5OCw5ICs4MzMsMTEgQEAKICAgICAqbXB0MnNhc19waHksIE1waTJTYXNQaHlQYWdlMF90IHBoeV9wZzAsIHN0cnVjdCBkZXZpY2UgKnBhcmVudF9kZXYpOwogaW50IG1wdDJzYXNfdHJhbnNwb3J0X2FkZF9leHBhbmRlcl9waHkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBzdHJ1Y3QgX3Nhc19waHkKICAgICAqbXB0MnNhc19waHksIE1waTJFeHBhbmRlclBhZ2UxX3QgZXhwYW5kZXJfcGcxLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnRfZGV2KTsKLXZvaWQgbXB0MnNhc190cmFuc3BvcnRfdXBkYXRlX3BoeV9saW5rX2NoYW5nZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUsCit2b2lkIG1wdDJzYXNfdHJhbnNwb3J0X3VwZGF0ZV9saW5rcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUsCiAgICB1MTYgYXR0YWNoZWRfaGFuZGxlLCB1OCBwaHlfbnVtYmVyLCB1OCBsaW5rX3JhdGUpOwogZXh0ZXJuIHN0cnVjdCBzYXNfZnVuY3Rpb25fdGVtcGxhdGUgbXB0MnNhc190cmFuc3BvcnRfZnVuY3Rpb25zOwogZXh0ZXJuIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqbXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGU7CitleHRlcm4gaW50IHNjc2lfaW50ZXJuYWxfZGV2aWNlX2Jsb2NrKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CitleHRlcm4gaW50IHNjc2lfaW50ZXJuYWxfZGV2aWNlX3VuYmxvY2soc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKIAogI2VuZGlmIC8qIE1QVDJTQVNfQkFTRV9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYwppbmRleCA2ZGRlZTE2Li5hYjhjNTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKQEAgLTcyLDE1ICs3MiwxNSBAQAogCiAvKioKICAqIHN0cnVjdCBjb25maWdfcmVxdWVzdCAtIG9idGFpbiBkbWEgbWVtb3J5IHZpYSByb3V0aW5lCi0gKiBAY29uZmlnX3BhZ2Vfc3o6IHNpemUKLSAqIEBjb25maWdfcGFnZTogdmlydCBwb2ludGVyCi0gKiBAY29uZmlnX3BhZ2VfZG1hOiBwaHlzIHBvaW50ZXIKKyAqIEBzejogc2l6ZQorICogQHBhZ2U6IHZpcnQgcG9pbnRlcgorICogQHBhZ2VfZG1hOiBwaHlzIHBvaW50ZXIKICAqCiAgKi8KIHN0cnVjdCBjb25maWdfcmVxdWVzdHsKLQl1MTYJCQljb25maWdfcGFnZV9zejsKLQl2b2lkCQkJKmNvbmZpZ19wYWdlOwotCWRtYV9hZGRyX3QJCWNvbmZpZ19wYWdlX2RtYTsKKwl1MTYJCQlzejsKKwl2b2lkCQkJKnBhZ2U7CisJZG1hX2FkZHJfdAkJcGFnZV9kbWE7CiB9OwogCiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCkBAIC0xNzUsNiArMTc1LDU1IEBACiAjZW5kaWYKIAogLyoqCisgKiBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5IC0gb2J0YWluIHBoeXNpY2FsIG1lbW9yeQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbWVtOiBzdHJ1Y3QgY29uZmlnX3JlcXVlc3QKKyAqCisgKiBBIHdyYXBwZXIgZm9yIG9idGFpbmluZyBkbWEtYWJsZSBtZW1vcnkgZm9yIGNvbmZpZyBwYWdlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGNvbmZpZ19yZXF1ZXN0ICptZW0pCit7CisJaW50IHIgPSAwOworCisJaWYgKG1lbS0+c3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7CisJCW1lbS0+cGFnZSA9IGRtYV9hbGxvY19jb2hlcmVudCgmaW9jLT5wZGV2LT5kZXYsIG1lbS0+c3osCisJCSAgICAmbWVtLT5wYWdlX2RtYSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbWVtLT5wYWdlKSB7CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZG1hX2FsbG9jX2NvaGVyZW50IgorCQkJICAgICIgZmFpbGVkIGFza2luZyBmb3IgKCVkKSBieXRlcyEhXG4iLAorCQkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sIG1lbS0+c3opOworCQkJciA9IC1FTk9NRU07CisJCX0KKwl9IGVsc2UgeyAvKiB1c2UgdG1wIGJ1ZmZlciBpZiBsZXNzIHRoYW4gNTEyIGJ5dGVzICovCisJCW1lbS0+cGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7CisJCW1lbS0+cGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKKwl9CisJcmV0dXJuIHI7Cit9CisKKy8qKgorICogX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5IC0gd3JhcHBlciB0byBmcmVlIHRoZSBtZW1vcnkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1lbTogc3RydWN0IGNvbmZpZ19yZXF1ZXN0CisgKgorICogQSB3cmFwcGVyIHRvIGZyZWUgZG1hLWFibGUgbWVtb3J5IHdoZW4gdXNpbmcgX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeS4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgdm9pZAorX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgKm1lbSkKK3sKKwlpZiAobWVtLT5zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCisJCWRtYV9mcmVlX2NvaGVyZW50KCZpb2MtPnBkZXYtPmRldiwgbWVtLT5zeiwgbWVtLT5wYWdlLAorCQkgICAgbWVtLT5wYWdlX2RtYSk7Cit9CisKKy8qKgogICogbXB0MnNhc19jb25maWdfZG9uZSAtIGNvbmZpZyBwYWdlIGNvbXBsZXRpb24gcm91dGluZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleApAQCAtMjA2LDYgKzI1NSw3IEBACiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJX2NvbmZpZ19kaXNwbGF5X3NvbWVfZGVidWcoaW9jLCBzbWlkLCAiY29uZmlnX2RvbmUiLCBtcGlfcmVwbHkpOwogI2VuZGlmCisJaW9jLT5jb25maWdfY21kcy5zbWlkID0gVVNIT1JUX01BWDsKIAljb21wbGV0ZSgmaW9jLT5jb25maWdfY21kcy5kb25lKTsKIH0KIApAQCAtMjE1LDcgKzI2NSw5IEBACiAgKiBAbXBpX3JlcXVlc3Q6IHJlcXVlc3QgbWVzc2FnZSBmcmFtZQogICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCiAgKiBAdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzCi0gKiBDb250ZXh0OiBzbGVlcCwgdGhlIGNhbGxpbmcgZnVuY3Rpb24gbmVlZHMgdG8gYWNxdWlyZSB0aGUgY29uZmlnX2NtZHMubXV0ZXgKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBAY29uZmlnX3BhZ2Vfc3o6IHNpemUgb2YgY29uZmlnIHBhZ2UKKyAqIENvbnRleHQ6IHNsZWVwCiAgKgogICogQSBnZW5lcmljIEFQSSBmb3IgY29uZmlnIHBhZ2UgcmVxdWVzdHMgdG8gZmlybXdhcmUuCiAgKgpAQCAtMjI4LDE2ICsyODAsMTcgQEAKICAqLwogc3RhdGljIGludAogX2NvbmZpZ19yZXF1ZXN0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcXVlc3RfdAotICAgICptcGlfcmVxdWVzdCwgTXBpMkNvbmZpZ1JlcGx5X3QgKm1waV9yZXBseSwgaW50IHRpbWVvdXQpCisgICAgKm1waV9yZXF1ZXN0LCBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBpbnQgdGltZW91dCwKKyAgICB2b2lkICpjb25maWdfcGFnZSwgdTE2IGNvbmZpZ19wYWdlX3N6KQogewogCXUxNiBzbWlkOwogCXUzMiBpb2Nfc3RhdGU7CiAJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKIAlNcGkyQ29uZmlnUmVxdWVzdF90ICpjb25maWdfcmVxdWVzdDsKIAlpbnQgcjsKLQl1OCByZXRyeV9jb3VudDsKLQl1OCBpc3N1ZV9ob3N0X3Jlc2V0ID0gMDsKKwl1OCByZXRyeV9jb3VudCwgaXNzdWVfaG9zdF9yZXNldCA9IDA7CiAJdTE2IHdhaXRfc3RhdGVfY291bnQ7CisJc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKIAogCW11dGV4X2xvY2soJmlvYy0+Y29uZmlnX2NtZHMubXV0ZXgpOwogCWlmIChpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyAhPSBNUFQyX0NNRF9OT1RfVVNFRCkgewpAQCAtMjQ2LDEyICsyOTksNDQgQEAKIAkJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQorCiAJcmV0cnlfY291bnQgPSAwOworCW1lbXNldCgmbWVtLCAwLCBzaXplb2Yoc3RydWN0IGNvbmZpZ19yZXF1ZXN0KSk7CisKKwlpZiAoY29uZmlnX3BhZ2UpIHsKKwkJbXBpX3JlcXVlc3QtPkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOworCQltcGlfcmVxdWVzdC0+SGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOworCQltcGlfcmVxdWVzdC0+SGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7CisJCW1waV9yZXF1ZXN0LT5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7CisJCW1waV9yZXF1ZXN0LT5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoOworCQltcGlfcmVxdWVzdC0+RXh0UGFnZVR5cGUgPSBtcGlfcmVwbHktPkV4dFBhZ2VUeXBlOworCQlpZiAobXBpX3JlcXVlc3QtPkhlYWRlci5QYWdlTGVuZ3RoKQorCQkJbWVtLnN6ID0gbXBpX3JlcXVlc3QtPkhlYWRlci5QYWdlTGVuZ3RoICogNDsKKwkJZWxzZQorCQkJbWVtLnN6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7CisJCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisJCWlmIChyICE9IDApCisJCQlnb3RvIG91dDsKKwkJaWYgKG1waV9yZXF1ZXN0LT5BY3Rpb24gPT0KKwkJICAgIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX0NVUlJFTlQpIHsKKwkJCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC0+UGFnZUJ1ZmZlclNHRSwKKwkJCSAgICBNUFQyX0NPTkZJR19DT01NT05fV1JJVEVfU0dMRkxBR1MgfCBtZW0uc3osCisJCQkgICAgbWVtLnBhZ2VfZG1hKTsKKwkJCW1lbWNweShtZW0ucGFnZSwgY29uZmlnX3BhZ2UsIG1pbl90KHUxNiwgbWVtLnN6LAorCQkJICAgIGNvbmZpZ19wYWdlX3N6KSk7CisJCX0gZWxzZSB7CisJCQltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIGNvbmZpZ19wYWdlX3N6KTsKKwkJCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC0+UGFnZUJ1ZmZlclNHRSwKKwkJCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uc3osIG1lbS5wYWdlX2RtYSk7CisJCX0KKwl9CiAKICByZXRyeV9jb25maWc6CiAJaWYgKHJldHJ5X2NvdW50KSB7Ci0JCWlmIChyZXRyeV9jb3VudCA+IDIpIC8qIGF0dGVtcHQgb25seSAyIHJldHJpZXMgKi8KLQkJCXJldHVybiAtRUZBVUxUOworCQlpZiAocmV0cnlfY291bnQgPiAyKSB7IC8qIGF0dGVtcHQgb25seSAyIHJldHJpZXMgKi8KKwkJCXIgPSAtRUZBVUxUOworCQkJZ290byBmcmVlX21lbTsKKwkJfQogCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGF0dGVtcHRpbmcgcmV0cnkgKCVkKVxuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sIHJldHJ5X2NvdW50KTsKIAl9CkBAIC0yNjIsOCArMzQ3LDkgQEAKIAkJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQKIAkJCSAgICAiJXM6IGZhaWxlZCBkdWUgdG8gaW9jIG5vdCBvcGVyYXRpb25hbFxuIiwKIAkJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJCWlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CiAJCQlyID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OworCQkJZ290byBmcmVlX21lbTsKIAkJfQogCQlzc2xlZXAoMSk7CiAJCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAxKTsKQEAgLTI3OSw4ICszNjUsOSBAQAogCWlmICghc21pZCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKKwkJaW9jLT5jb25maWdfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKIAkJciA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0OworCQlnb3RvIGZyZWVfbWVtOwogCX0KIAogCXIgPSAwOwpAQCAtMjkyLDYgKzM3OSw3IEBACiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJX2NvbmZpZ19kaXNwbGF5X3NvbWVfZGVidWcoaW9jLCBzbWlkLCAiY29uZmlnX3JlcXVlc3QiLCBOVUxMKTsKICNlbmRpZgorCWluaXRfY29tcGxldGlvbigmaW9jLT5jb25maWdfY21kcy5kb25lKTsKIAltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIGNvbmZpZ19yZXF1ZXN0LT5WRl9JRCk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y29uZmlnX2NtZHMuZG9uZSwKIAkgICAgdGltZW91dCpIWik7CkBAIC0zMDMsMjIgKzM5MSwzMSBAQAogCQlyZXRyeV9jb3VudCsrOwogCQlpZiAoaW9jLT5jb25maWdfY21kcy5zbWlkID09IHNtaWQpCiAJCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7Ci0JCWlmICgoaW9jLT5zaG9zdF9yZWNvdmVyeSkgfHwKLQkJICAgIChpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFU0VUKSkKKwkJaWYgKChpb2MtPnNob3N0X3JlY292ZXJ5KSB8fCAoaW9jLT5jb25maWdfY21kcy5zdGF0dXMgJgorCQkgICAgTVBUMl9DTURfUkVTRVQpKQogCQkJZ290byByZXRyeV9jb25maWc7CiAJCWlzc3VlX2hvc3RfcmVzZXQgPSAxOwogCQlyID0gLUVGQVVMVDsKLQkJZ290byBvdXQ7CisJCWdvdG8gZnJlZV9tZW07CiAJfQorCiAJaWYgKGlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVQTFlfVkFMSUQpCiAJCW1lbWNweShtcGlfcmVwbHksIGlvYy0+Y29uZmlnX2NtZHMucmVwbHksCiAJCSAgICBzaXplb2YoTXBpMkNvbmZpZ1JlcGx5X3QpKTsKIAlpZiAocmV0cnlfY291bnQpCi0JCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogcmV0cnkgY29tcGxldGVkISFcbiIsCi0JCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKLW91dDoKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiByZXRyeSAoJWQpIGNvbXBsZXRlZCEhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXywgcmV0cnlfY291bnQpOworCWlmIChjb25maWdfcGFnZSAmJiBtcGlfcmVxdWVzdC0+QWN0aW9uID09CisJICAgIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVCkKKwkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0ucGFnZSwgbWluX3QodTE2LCBtZW0uc3osCisJCSAgICBjb25maWdfcGFnZV9zeikpOworIGZyZWVfbWVtOgorCWlmIChjb25maWdfcGFnZSkKKwkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Cisgb3V0OgogCWlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CiAJbXV0ZXhfdW5sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKKwogCWlmIChpc3N1ZV9ob3N0X3Jlc2V0KQogCQltcHQyc2FzX2Jhc2VfaGFyZF9yZXNldF9oYW5kbGVyKGlvYywgQ0FOX1NMRUVQLAogCQkgICAgRk9SQ0VfQklHX0hBTU1FUik7CkBAIC0zMjYsNDUgKzQyMyw2IEBACiB9CiAKIC8qKgotICogX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeSAtIG9idGFpbiBwaHlzaWNhbCBtZW1vcnkKLSAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQG1lbTogc3RydWN0IGNvbmZpZ19yZXF1ZXN0Ci0gKgotICogQSB3cmFwcGVyIGZvciBvYnRhaW5pbmcgZG1hLWFibGUgbWVtb3J5IGZvciBjb25maWcgcGFnZSByZXF1ZXN0LgotICoKLSAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBpbnQKLV9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAotICAgIHN0cnVjdCBjb25maWdfcmVxdWVzdCAqbWVtKQotewotCWludCByID0gMDsKLQotCW1lbS0+Y29uZmlnX3BhZ2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpb2MtPnBkZXYsIG1lbS0+Y29uZmlnX3BhZ2Vfc3osCi0JICAgICZtZW0tPmNvbmZpZ19wYWdlX2RtYSk7Ci0JaWYgKCFtZW0tPmNvbmZpZ19wYWdlKQotCQlyID0gLUVOT01FTTsKLQlyZXR1cm4gcjsKLX0KLQotLyoqCi0gKiBfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkgLSB3cmFwcGVyIHRvIGZyZWUgdGhlIG1lbW9yeQotICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAbWVtOiBzdHJ1Y3QgY29uZmlnX3JlcXVlc3QKLSAqCi0gKiBBIHdyYXBwZXIgdG8gZnJlZSBkbWEtYWJsZSBtZW1vcnkgd2hlbiB1c2luZyBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5LgotICoKLSAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1fY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAotICAgIHN0cnVjdCBjb25maWdfcmVxdWVzdCAqbWVtKQotewotCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBtZW0tPmNvbmZpZ19wYWdlX3N6LCBtZW0tPmNvbmZpZ19wYWdlLAotCSAgICBtZW0tPmNvbmZpZ19wYWdlX2RtYSk7Ci19Ci0KLS8qKgogICogbXB0MnNhc19jb25maWdfZ2V0X21hbnVmYWN0dXJpbmdfcGcwIC0gb2J0YWluIG1hbnVmYWN0dXJpbmcgcGFnZSAwCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQpAQCAtMzc5LDkgKzQzNyw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCi0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMk1hbnVmYWN0dXJpbmdQYWdlMF90KSk7CiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKQEAgLTM5MCwzNyArNDQ2LDUwIEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9NQU5VRkFDVFVSSU5HMF9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAoIXIpCi0JCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JCSAgICBzaXplb2YoTXBpMk1hbnVmYWN0dXJpbmdQYWdlMF90KSkpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZigqY29uZmlnX3BhZ2UpKTsKKyBvdXQ6CisJcmV0dXJuIHI7Cit9CiAKLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKLQkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7CisvKioKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9tYW51ZmFjdHVyaW5nX3BnMTAgLSBvYnRhaW4gbWFudWZhY3R1cmluZyBwYWdlIDEwCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X21hbnVmYWN0dXJpbmdfcGcxMChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgTXBpMkNvbmZpZ1JlcGx5X3QgKm1waV9yZXBseSwgTXBpMk1hbnVmYWN0dXJpbmdQYWdlMTBfdCAqY29uZmlnX3BhZ2UpCit7CisJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKKwlpbnQgcjsKIAorCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CisJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfTUFOVUZBQ1RVUklORzsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDEwOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfTUFOVUZBQ1RVUklORzBfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZigqY29uZmlnX3BhZ2UpKTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC00NDAsOSArNTA5LDcgQEAKIHsKIAlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCWludCByOwotCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CiAKLQltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyQmlvc1BhZ2UyX3QpKTsKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwpAQCAtNDUxLDM3ICs1MTgsMTQgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX0JJT1NQQUdFMl9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAoIXIpCi0JCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JCSAgICBzaXplb2YoTXBpMkJpb3NQYWdlMl90KSkpOwotCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKCpjb25maWdfcGFnZSkpOwogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTUwMSw5ICs1NDUsNyBAQAogewogCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CiAJaW50IHI7Ci0Jc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKIAotCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJCaW9zUGFnZTNfdCkpOwogCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CkBAIC01MTIsMzcgKzU1NCwxNCBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfQklPU1BBR0UzX1BBR0VWRVJTSU9OOwogCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKLQkJICAgIHNpemVvZihNcGkyQmlvc1BhZ2UzX3QpKSk7Ci0KLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKLQkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0KKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoKmNvbmZpZ19wYWdlKSk7CiAgb3V0OgogCXJldHVybiByOwogfQpAQCAtNTYyLDkgKzU4MSw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCi0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMklPVW5pdFBhZ2UwX3QpKTsKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwpAQCAtNTczLDM3ICs1OTAsMTQgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX0lPVU5JVFBBR0UwX1BBR0VWRVJTSU9OOwogCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKLQkJICAgIHNpemVvZihNcGkySU9Vbml0UGFnZTBfdCkpKTsKLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZigqY29uZmlnX3BhZ2UpKTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC02MjMsOSArNjE3LDcgQEAKIHsKIAlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCWludCByOwotCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CiAKLQltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkySU9Vbml0UGFnZTFfdCkpOwogCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CkBAIC02MzQsMzcgKzYyNiwxNCBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfSU9VTklUUEFHRTFfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoOwotCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGgpICogNDsKLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgewotCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCQlpZiAocikKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKLQkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKLQl9Ci0JaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCi0JICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKLQkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7Ci0JaWYgKCFyKQotCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKLQkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCQkgICAgc2l6ZW9mKE1waTJJT1VuaXRQYWdlMV90KSkpOwotCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKCpjb25maWdfcGFnZSkpOwogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTY4MCwxMSArNjQ5LDEwIEBACiAgKi8KIGludAogbXB0MnNhc19jb25maWdfc2V0X2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAotICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMV90IGNvbmZpZ19wYWdlKQorICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSkKIHsKIAlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCWludCByOwotCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CiAKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CkBAIC02OTQsMzggKzY2MiwxNCBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfSU9VTklUUEFHRTFfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCi0JbWVtc2V0KG1lbS5jb25maWdfcGFnZSwgMCwgbWVtLmNvbmZpZ19wYWdlX3N6KTsKLQltZW1jcHkobWVtLmNvbmZpZ19wYWdlLCAmY29uZmlnX3BhZ2UsCi0JICAgIHNpemVvZihNcGkySU9Vbml0UGFnZTFfdCkpOwotCi0JaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCi0JICAgIE1QVDJfQ09ORklHX0NPTU1PTl9XUklURV9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKLQkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7Ci0KLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKLQkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0KKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoKmNvbmZpZ19wYWdlKSk7CiAgb3V0OgogCXJldHVybiByOwogfQpAQCAtNzQ1LDkgKzY4OSw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCi0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMklPQ1BhZ2U4X3QpKTsKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwpAQCAtNzU2LDM3ICs2OTgsMTQgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX0lPQ1BBR0U4X1BBR0VWRVJTSU9OOwogCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKLQkJICAgIHNpemVvZihNcGkySU9DUGFnZThfdCkpKTsKLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZigqY29uZmlnX3BhZ2UpKTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC04MDgsOSArNzI3LDcgQEAKIHsKIAlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCWludCByOwotCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CiAKLQltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyU2FzRGV2aWNlUGFnZTBfdCkpOwogCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CkBAIC04MjAsMzkgKzczNywxNSBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMDsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPSBjcHVfdG9fbGUzMihmb3JtIHwgaGFuZGxlKTsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGg7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHktPkV4dFBhZ2VUeXBlOwotCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAoIXIpCi0JCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JCSAgICBzaXplb2YoTXBpMlNhc0RldmljZVBhZ2UwX3QpKSk7Ci0KLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKLQkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0KKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoKmNvbmZpZ19wYWdlKSk7CiAgb3V0OgogCXJldHVybiByOwogfQpAQCAtODc0LDkgKzc2Nyw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCi0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMlNhc0RldmljZVBhZ2UxX3QpKTsKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwpAQCAtODg2LDM5ICs3NzcsMTUgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDE7CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCW1waV9yZXF1ZXN0LlBhZ2VBZGRyZXNzID0gY3B1X3RvX2xlMzIoZm9ybSB8IGhhbmRsZSk7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LT5FeHRQYWdlVHlwZTsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGgpICogNDsKLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgewotCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCQlpZiAocikKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKLQkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKLQl9Ci0JaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCi0JICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKLQkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7Ci0JaWYgKCFyKQotCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKLQkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCQkgICAgc2l6ZW9mKE1waTJTYXNEZXZpY2VQYWdlMV90KSkpOwotCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKCpjb25maWdfcGFnZSkpOwogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTkzNiwxMSArODAzLDExIEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCXUxNiBpb2Nfc3RhdHVzOwogCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKIAlNcGkyU2FzSU9Vbml0UGFnZTBfdCBjb25maWdfcGFnZTsKIAorCSpudW1fcGh5cyA9IDA7CiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKQEAgLTk1MCw0NCArODE3LDIwIEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNJT1VOSVRQQUdFMF9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsICZtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS5IZWFkZXIuUGFnZVR5cGU7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS5FeHRQYWdlTGVuZ3RoOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LkV4dFBhZ2VUeXBlOwotCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5FeHRQYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsICZtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsICZjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKE1waTJTYXNJT1VuaXRQYWdlMF90KSk7CiAJaWYgKCFyKSB7CiAJCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCiAJCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOwotCQlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7Ci0JCQltZW1jcHkoJmNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JCQkgICAgc2l6ZW9mKE1waTJTYXNJT1VuaXRQYWdlMF90KSkpOworCQlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKQogCQkJKm51bV9waHlzID0gY29uZmlnX3BhZ2UuTnVtUGh5czsKLQkJfQogCX0KLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTEwMTEsOCArODU0LDcgQEAKIHsKIAlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCWludCByOwotCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07Ci0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzeik7CisKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwpAQCAtMTAyMiwzNyArODY0LDEzIEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNJT1VOSVRQQUdFMF9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LT5FeHRQYWdlVHlwZTsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGgpICogNDsKLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgewotCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCQlpZiAocikKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKLQkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKLQl9Ci0JaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCi0JICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKLQkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7Ci0JaWYgKCFyKQotCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKLQkJICAgIG1pbl90KHUxNiwgc3osIG1lbS5jb25maWdfcGFnZV9zeikpOwotCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwgc3opOwogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTEwNzYsOSArODk0LDcgQEAKIHsKIAlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCWludCByOwotCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CiAKLQltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHN6KTsKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwpAQCAtMTA4OCwzNyArOTA0LDEzIEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNJT1VOSVRQQUdFMF9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LT5FeHRQYWdlVHlwZTsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGgpICogNDsKLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgewotCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCQlpZiAocikKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKLQkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKLQl9Ci0JaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCi0JICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKLQkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7Ci0JaWYgKCFyKQotCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKLQkJICAgIG1pbl90KHUxNiwgc3osIG1lbS5jb25maWdfcGFnZV9zeikpOwotCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwgc3opOwogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTExNDAsOSArOTMyLDcgQEAKIHsKIAlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCWludCByOwotCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CiAKLQltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyRXhwYW5kZXJQYWdlMF90KSk7CiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKQEAgLTExNTIsMzkgKzk0MiwxNSBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTRVhQQU5ERVIwX1BBR0VWRVJTSU9OOwogCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9IGNwdV90b19sZTMyKGZvcm0gfCBoYW5kbGUpOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKLQltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS0+RXh0UGFnZVR5cGU7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKLQkJICAgIHNpemVvZihNcGkyRXhwYW5kZXJQYWdlMF90KSkpOwotCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKCpjb25maWdfcGFnZSkpOwogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTEyMDcsOSArOTczLDcgQEAKIHsKIAlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCWludCByOwotCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CiAKLQltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyRXhwYW5kZXJQYWdlMV90KSk7CiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKQEAgLTEyMTksNyArOTgzLDcgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0VYUEFOREVSMV9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCkBAIC0xMjI3LDMzICs5OTEsOSBAQAogCSAgICBjcHVfdG9fbGUzMihNUEkyX1NBU19FWFBBTkRfUEdBRF9GT1JNX0hORExfUEhZX05VTSB8CiAJICAgIChwaHlfbnVtYmVyIDw8IE1QSTJfU0FTX0VYUEFORF9QR0FEX1BIWU5VTV9TSElGVCkgfCBoYW5kbGUpOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKLQltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS0+RXh0UGFnZVR5cGU7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKLQkJICAgIHNpemVvZihNcGkyRXhwYW5kZXJQYWdlMV90KSkpOwotCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKCpjb25maWdfcGFnZSkpOwogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTEyNzUsOSArMTAxNSw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCi0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMlNhc0VuY2xvc3VyZVBhZ2UwX3QpKTsKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwpAQCAtMTI4NywzOSArMTAyNSwxNSBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTRU5DTE9TVVJFMF9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPSBjcHVfdG9fbGUzMihmb3JtIHwgaGFuZGxlKTsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGg7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHktPkV4dFBhZ2VUeXBlOwotCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAoIXIpCi0JCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JCSAgICBzaXplb2YoTXBpMlNhc0VuY2xvc3VyZVBhZ2UwX3QpKSk7Ci0KLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKLQkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0KKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoKmNvbmZpZ19wYWdlKSk7CiAgb3V0OgogCXJldHVybiByOwogfQpAQCAtMTM0MCw5ICsxMDU0LDcgQEAKIHsKIAlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCWludCByOwotCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CiAKLQltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyU2FzUGh5UGFnZTBfdCkpOwogCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CkBAIC0xMzUyLDQwICsxMDY0LDE2IEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNQSFkwX1BBR0VWRVJTSU9OOwogCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9CiAJICAgIGNwdV90b19sZTMyKE1QSTJfU0FTX1BIWV9QR0FEX0ZPUk1fUEhZX05VTUJFUiB8IHBoeV9udW1iZXIpOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKLQltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS0+RXh0UGFnZVR5cGU7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKLQkJICAgIHNpemVvZihNcGkyU2FzUGh5UGFnZTBfdCkpKTsKLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZigqY29uZmlnX3BhZ2UpKTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC0xNDA2LDkgKzEwOTQsNyBAQAogewogCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CiAJaW50IHI7Ci0Jc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKIAotCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJTYXNQaHlQYWdlMV90KSk7CiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKQEAgLTE0MTgsNDAgKzExMDQsMTYgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU1BIWTFfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCW1waV9yZXF1ZXN0LlBhZ2VBZGRyZXNzID0KIAkgICAgY3B1X3RvX2xlMzIoTVBJMl9TQVNfUEhZX1BHQURfRk9STV9QSFlfTlVNQkVSIHwgcGh5X251bWJlcik7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LT5FeHRQYWdlVHlwZTsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGgpICogNDsKLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgewotCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCQlpZiAocikKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKLQkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKLQl9Ci0JaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCi0JICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKLQkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7Ci0JaWYgKCFyKQotCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKLQkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCQkgICAgc2l6ZW9mKE1waTJTYXNQaHlQYWdlMV90KSkpOwotCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKCpjb25maWdfcGFnZSkpOwogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTE0NzQsOSArMTEzNiw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCi0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMlJhaWRWb2xQYWdlMV90KSk7CiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKQEAgLTE0ODUsMzggKzExNDUsMTUgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1JBSURWT0xQQUdFMV9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPSBjcHVfdG9fbGUzMihmb3JtIHwgaGFuZGxlKTsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKLQkJICAgIHNpemVvZihNcGkyUmFpZFZvbFBhZ2UxX3QpKSk7Ci0KLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKLQkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0KKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoKmNvbmZpZ19wYWdlKSk7CiAgb3V0OgogCXJldHVybiByOwogfQpAQCAtMTUzNSwxMCArMTE3Miw5IEBACiAgICAgdTggKm51bV9wZHMpCiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKLQlNcGkyUmFpZFZvbFBhZ2UwX3QgKmNvbmZpZ19wYWdlOworCU1waTJSYWlkVm9sUGFnZTBfdCBjb25maWdfcGFnZTsKIAlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CiAJaW50IHI7Ci0Jc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKIAl1MTYgaW9jX3N0YXR1czsKIAogCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CkBAIC0xNTUwLDQzICsxMTg2LDIzIEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9SQUlEVk9MUEFHRTBfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCAmbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9CiAJICAgIGNwdV90b19sZTMyKE1QSTJfUkFJRF9WT0xVTUVfUEdBRF9GT1JNX0hBTkRMRSB8IGhhbmRsZSk7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VOdW1iZXI7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS5IZWFkZXIuUGFnZUxlbmd0aDsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSGVhZGVyLlBhZ2VMZW5ndGgpICogNDsKLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgewotCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCQlpZiAocikKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKLQkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKLQl9Ci0JaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCi0JICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKLQkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgJm1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgJmNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoTXBpMlJhaWRWb2xQYWdlMF90KSk7CiAJaWYgKCFyKSB7CiAJCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCiAJCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOwotCQlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKSB7Ci0JCQljb25maWdfcGFnZSA9IG1lbS5jb25maWdfcGFnZTsKLQkJCSpudW1fcGRzID0gY29uZmlnX3BhZ2UtPk51bVBoeXNEaXNrczsKLQkJfQorCQlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKQorCQkJKm51bV9wZHMgPSBjb25maWdfcGFnZS5OdW1QaHlzRGlza3M7CiAJfQogCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCiAgb3V0OgogCXJldHVybiByOwogfQpAQCAtMTYxMCwxMCArMTIyNiw4IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKLQltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHN6KTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9SQUlEX1ZPTFVNRTsKQEAgLTE2MjEsMzcgKzEyMzUsMTQgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1JBSURWT0xQQUdFMF9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPSBjcHVfdG9fbGUzMihmb3JtIHwgaGFuZGxlKTsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIHN6LCBtZW0uY29uZmlnX3BhZ2Vfc3opKTsKLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsIHN6KTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC0xNjc0LDEwICsxMjY1LDggQEAKIHsKIAlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCWludCByOwotCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CiAKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwotCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJSYWlkUGh5c0Rpc2tQYWdlMF90KSk7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfUkFJRF9QSFlTRElTSzsKQEAgLTE2ODUsMzggKzEyNzQsMTUgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1JBSURQSFlTRElTS1BBR0UwX1BBR0VWRVJTSU9OOwogCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9IGNwdV90b19sZTMyKGZvcm0gfCBmb3JtX3NwZWNpZmljKTsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKLQkJICAgIHNpemVvZihNcGkyUmFpZFBoeXNEaXNrUGFnZTBfdCkpKTsKLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZigqY29uZmlnX3BhZ2UpKTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC0xNzM0LDExICsxMzAwLDEwIEBACiBtcHQyc2FzX2NvbmZpZ19nZXRfdm9sdW1lX2hhbmRsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBwZF9oYW5kbGUsCiAgICAgdTE2ICp2b2x1bWVfaGFuZGxlKQogewotCU1waTJSYWlkQ29uZmlndXJhdGlvblBhZ2UwX3QgKmNvbmZpZ19wYWdlOworCU1waTJSYWlkQ29uZmlndXJhdGlvblBhZ2UwX3QgKmNvbmZpZ19wYWdlID0gTlVMTDsKIAlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKLQlpbnQgciwgaTsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOworCWludCByLCBpLCBjb25maWdfcGFnZV9zejsKIAl1MTYgaW9jX3N0YXR1czsKIAogCSp2b2x1bWVfaGFuZGxlID0gMDsKQEAgLTE3NTEsNDAgKzEzMTYsMjcgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDA7CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCAmbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9CiAJICAgIGNwdV90b19sZTMyKE1QSTJfUkFJRF9QR0FEX0ZPUk1fQUNUSVZFX0NPTkZJRyk7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VOdW1iZXI7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LkV4dFBhZ2VMZW5ndGg7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHkuRXh0UGFnZVR5cGU7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LkV4dFBhZ2VMZW5ndGgpICogNDsKLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgewotCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCQlpZiAocikKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKLQkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKLQl9Ci0JaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCi0JICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKLQkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CisJY29uZmlnX3BhZ2Vfc3ogPSAobGUxNl90b19jcHUobXBpX3JlcGx5LkV4dFBhZ2VMZW5ndGgpICogNCk7CisJY29uZmlnX3BhZ2UgPSBrbWFsbG9jKGNvbmZpZ19wYWdlX3N6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbmZpZ19wYWdlKQorCQlnb3RvIG91dDsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCAmbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwKKwkgICAgY29uZmlnX3BhZ2Vfc3opOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCXIgPSAtMTsKIAlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJiBNUEkyX0lPQ1NUQVRVU19NQVNLOwogCWlmIChpb2Nfc3RhdHVzICE9IE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1MpCi0JCWdvdG8gZG9uZTsKLQljb25maWdfcGFnZSA9IG1lbS5jb25maWdfcGFnZTsKKwkJZ290byBvdXQ7CiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZ19wYWdlLT5OdW1FbGVtZW50czsgaSsrKSB7CiAJCWlmICgoY29uZmlnX3BhZ2UtPkNvbmZpZ0VsZW1lbnRbaV0uRWxlbWVudEZsYWdzICYKIAkJICAgIE1QSTJfUkFJRENPTkZJRzBfRUZMQUdTX01BU0tfRUxFTUVOVF9UWVBFKSAhPQpAQCAtMTc5NSwxNSArMTM0NywxMSBAQAogCQkJKnZvbHVtZV9oYW5kbGUgPSBsZTE2X3RvX2NwdShjb25maWdfcGFnZS0+CiAJCQkgICAgQ29uZmlnRWxlbWVudFtpXS5Wb2xEZXZIYW5kbGUpOwogCQkJciA9IDA7Ci0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIG91dDsKIAkJfQogCX0KLQotIGRvbmU6Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCiAgb3V0OgorCWtmcmVlKGNvbmZpZ19wYWdlKTsKIAlyZXR1cm4gcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKaW5kZXggMTRlNDczZC4uYzJhNTEwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCkBAIC0xOTYzLDcgKzE5NjMsNiBAQAogewogCWVudW0gYmxvY2tfc3RhdGUgc3RhdGU7CiAJbG9uZyByZXQgPSAtRUlOVkFMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzdGF0ZSA9IChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgPyBOT05fQkxPQ0tJTkcgOgogCSAgICBCTE9DS0lORzsKQEAgLTE5ODksMTMgKzE5ODgsOCBAQAogCQkgICAgIWlvYykKIAkJCXJldHVybiAtRU5PREVWOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7Ci0JCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLAotCQkJICAgIGZsYWdzKTsKKwkJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CiAKIAkJaWYgKF9JT0NfU0laRShjbWQpID09IHNpemVvZihzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kKSkgewogCQkJdWFyZyA9IGFyZzsKQEAgLTIwOTgsNyArMjA5Miw2IEBACiAJc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZCBrYXJnOwogCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYzsKIAllbnVtIGJsb2NrX3N0YXRlIHN0YXRlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoX0lPQ19TSVpFKGNtZCkgIT0gc2l6ZW9mKHN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQzMikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjExMywxMyArMjEwNiw4IEBACiAJaWYgKF9jdGxfdmVyaWZ5X2FkYXB0ZXIoa2FyZzMyLmhkci5pb2NfbnVtYmVyLCAmaW9jKSA9PSAtMSB8fCAhaW9jKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7Ci0JaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywKLQkJICAgIGZsYWdzKTsKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkKIAkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKIAogCW1lbXNldCgma2FyZywgMCwgc2l6ZW9mKHN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQpKTsKIAlrYXJnLmhkci5pb2NfbnVtYmVyID0ga2FyZzMyLmhkci5pb2NfbnVtYmVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IDJlOWE0NDQuLjc3NGIzNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTEwMyw3ICsxMDMsNiBAQAogfTsKIAogCi0jZGVmaW5lIE1QVDJTQVNfUkVTQ0FOX0FGVEVSX0hPU1RfUkVTRVQgKDB4RkZGRikKIC8qKgogICogc3RydWN0IGZ3X2V2ZW50X3dvcmsgLSBmaXJtd2FyZSBldmVudCBzdHJ1Y3QKICAqIEBsaXN0OiBsaW5rIGxpc3QgZnJhbWV3b3JrCkBAIC0xNTAyLDcgKzE1MDEsMTMgQEAKIAkJCWJyZWFrOwogCQljYXNlIE1QSTJfUkFJRF9WT0xfVFlQRV9SQUlEMUU6CiAJCQlxZGVwdGggPSBNUFQyU0FTX1JBSURfUVVFVUVfREVQVEg7Ci0JCQlyX2xldmVsID0gIlJBSUQxRSI7CisJCQlpZiAoaW9jLT5tYW51X3BnMTAuT0VNSWRlbnRpZmllciAmJgorCQkJICAgIChpb2MtPm1hbnVfcGcxMC5HZW5lcmljRmxhZ3MwICYKKwkJCSAgICBNRkcxMF9HRjBfUjEwX0RJU1BMQVkpICYmCisJCQkgICAgIShyYWlkX2RldmljZS0+bnVtX3BkcyAlIDIpKQorCQkJCXJfbGV2ZWwgPSAiUkFJRDEwIjsKKwkJCWVsc2UKKwkJCQlyX2xldmVsID0gIlJBSUQxRSI7CiAJCQlicmVhazsKIAkJY2FzZSBNUEkyX1JBSURfVk9MX1RZUEVfUkFJRDE6CiAJCQlxZGVwdGggPSBNUFQyU0FTX1JBSURfUVVFVUVfREVQVEg7CkBAIC0xNzg2LDE3ICsxNzkxLDE4IEBACiAJdTMyIGlvY19zdGF0ZTsKIAl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OwogCXU4IFZGX0lEID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKLQlpZiAoaW9jLT50bV9jbWRzLnN0YXR1cyAhPSBNUFQyX0NNRF9OT1RfVVNFRCB8fAotCSAgICBpb2MtPnNob3N0X3JlY292ZXJ5KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jLT50bV9jbWRzLnN0YXR1cyAhPSBNUFQyX0NNRF9OT1RfVVNFRCkgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IHRtX2NtZCBidXN5ISEhXG4iLAorCQkgICAgX19mdW5jX18sIGlvYy0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkgewogCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAogCQkgICAgX19mdW5jX18sIGlvYy0+bmFtZSk7CiAJCXJldHVybjsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCiAJaW9jX3N0YXRlID0gbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShpb2MsIDApOwogCWlmIChpb2Nfc3RhdGUgJiBNUEkyX0RPT1JCRUxMX1VTRUQpIHsKQEAgLTE4MzAsNiArMTgzNiw3IEBACiAJbXBpX3JlcXVlc3QtPlRhc2tNSUQgPSBjcHVfdG9fbGUxNihzbWlkX3Rhc2spOwogCWludF90b19zY3NpbHVuKGx1biwgKHN0cnVjdCBzY3NpX2x1biAqKW1waV9yZXF1ZXN0LT5MVU4pOwogCW1wdDJzYXNfc2NzaWhfc2V0X3RtX2ZsYWcoaW9jLCBoYW5kbGUpOworCWluaXRfY29tcGxldGlvbigmaW9jLT50bV9jbWRzLmRvbmUpOwogCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShpb2MsIHNtaWQsIFZGX0lEKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT50bV9jbWRzLmRvbmUsIHRpbWVvdXQqSFopOwogCW1wdDJzYXNfc2NzaWhfY2xlYXJfdG1fZmxhZyhpb2MsIGhhbmRsZSk7CkBAIC0yMjIyLDcgKzIyMjksNyBAQAogCQkJICAgIE1QVDJTQVNfSU5GT19GTVQgIlNERVZfUlVOTklORzogIgogCQkJICAgICJoYW5kbGUoMHglMDR4KVxuIiwgaW9jLT5uYW1lLCBoYW5kbGUpKTsKIAkJCXNhc19kZXZpY2VfcHJpdl9kYXRhLT5ibG9jayA9IDA7Ci0JCQlzY3NpX2RldmljZV9zZXRfc3RhdGUoc2RldiwgU0RFVl9SVU5OSU5HKTsKKwkJCXNjc2lfaW50ZXJuYWxfZGV2aWNlX3VuYmxvY2soc2Rldik7CiAJCX0KIAl9CiB9CkBAIC0yMjUxLDcgKzIyNTgsNyBAQAogCQkJICAgIE1QVDJTQVNfSU5GT19GTVQgIlNERVZfQkxPQ0s6ICIKIAkJCSAgICAiaGFuZGxlKDB4JTA0eClcbiIsIGlvYy0+bmFtZSwgaGFuZGxlKSk7CiAJCQlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+YmxvY2sgPSAxOwotCQkJc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfQkxPQ0spOworCQkJc2NzaV9pbnRlcm5hbF9kZXZpY2VfYmxvY2soc2Rldik7CiAJCX0KIAl9CiB9CkBAIC0yMzI3LDYgKzIzMzQsNyBAQAogCXUxNiBoYW5kbGU7CiAJdTE2IHJlYXNvbl9jb2RlOwogCXU4IHBoeV9udW1iZXI7CisJdTggbGlua19yYXRlOwogCiAJZm9yIChpID0gMDsgaSA8IGV2ZW50X2RhdGEtPk51bUVudHJpZXM7IGkrKykgewogCQloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5QSFlbaV0uQXR0YWNoZWREZXZIYW5kbGUpOwpAQCAtMjMzNyw2ICsyMzQ1LDExIEBACiAJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX01BU0s7CiAJCWlmIChyZWFzb25fY29kZSA9PSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX0RFTEFZX05PVF9SRVNQT05ESU5HKQogCQkJX3Njc2loX2Jsb2NrX2lvX2RldmljZShpb2MsIGhhbmRsZSk7CisJCWlmIChyZWFzb25fY29kZSA9PSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1BIWV9DSEFOR0VEKSB7CisJCQlsaW5rX3JhdGUgPSBldmVudF9kYXRhLT5QSFlbaV0uTGlua1JhdGUgPj4gNDsKKwkJCWlmIChsaW5rX3JhdGUgPj0gTVBJMl9TQVNfTkVHX0xJTktfUkFURV8xXzUpCisJCQkJX3Njc2loX3VibG9ja19pb19kZXZpY2UoaW9jLCBoYW5kbGUpOworCQl9CiAJfQogfQogCkBAIC0yNDA1LDI3ICsyNDE4LDYgQEAKIH0KIAogLyoqCi0gKiBfc2NzaWhfcXVldWVfcmVzY2FuIC0gcXVldWUgYSB0b3BvbG9neSByZXNjYW4gZnJvbSB1c2VyIGNvbnRleHQKLSAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICoKLSAqIFJldHVybiBub3RoaW5nLgotICovCi1zdGF0aWMgdm9pZAotX3Njc2loX3F1ZXVlX3Jlc2NhbihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCi17Ci0Jc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50OwotCi0JaWYgKGlvYy0+d2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxldGUpCi0JCXJldHVybjsKLQlmd19ldmVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmd19ldmVudF93b3JrKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFmd19ldmVudCkKLQkJcmV0dXJuOwotCWZ3X2V2ZW50LT5ldmVudCA9IE1QVDJTQVNfUkVTQ0FOX0FGVEVSX0hPU1RfUkVTRVQ7Ci0JZndfZXZlbnQtPmlvYyA9IGlvYzsKLQlfc2NzaWhfZndfZXZlbnRfYWRkKGlvYywgZndfZXZlbnQpOwotfQotCi0vKioKICAqIF9zY3NpaF9mbHVzaF9ydW5uaW5nX2NtZHMgLSBjb21wbGV0aW5nIG91dHN0YW5kaW5nIGNvbW1hbmRzLgogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKgpAQCAtMjQ1Niw0NiArMjQ0OCw2IEBACiB9CiAKIC8qKgotICogbXB0MnNhc19zY3NpaF9yZXNldF9oYW5kbGVyIC0gcmVzZXQgY2FsbGJhY2sgaGFuZGxlciAoZm9yIHNjc2loKQotICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAcmVzZXRfcGhhc2U6IHBoYXNlCi0gKgotICogVGhlIGhhbmRsZXIgZm9yIGRvaW5nIGFueSByZXF1aXJlZCBjbGVhbnVwIG9yIGluaXRpYWxpemF0aW9uLgotICoKLSAqIFRoZSByZXNldCBwaGFzZSBjYW4gYmUgTVBUMl9JT0NfUFJFX1JFU0VULCBNUFQyX0lPQ19BRlRFUl9SRVNFVCwKLSAqIE1QVDJfSU9DX0RPTkVfUkVTRVQKLSAqCi0gKiBSZXR1cm4gbm90aGluZy4KLSAqLwotdm9pZAotbXB0MnNhc19zY3NpaF9yZXNldF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHJlc2V0X3BoYXNlKQotewotCXN3aXRjaCAocmVzZXRfcGhhc2UpIHsKLQljYXNlIE1QVDJfSU9DX1BSRV9SRVNFVDoKLQkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgotCQkgICAgIk1QVDJfSU9DX1BSRV9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwotCQlfc2NzaWhfZndfZXZlbnRfb2ZmKGlvYyk7Ci0JCWJyZWFrOwotCWNhc2UgTVBUMl9JT0NfQUZURVJfUkVTRVQ6Ci0JCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKLQkJICAgICJNUFQyX0lPQ19BRlRFUl9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwotCQlpZiAoaW9jLT50bV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1BFTkRJTkcpIHsKLQkJCWlvYy0+dG1fY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfUkVTRVQ7Ci0JCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgaW9jLT50bV9jbWRzLnNtaWQpOwotCQkJY29tcGxldGUoJmlvYy0+dG1fY21kcy5kb25lKTsKLQkJfQotCQlfc2NzaWhfZndfZXZlbnRfb24oaW9jKTsKLQkJX3Njc2loX2ZsdXNoX3J1bm5pbmdfY21kcyhpb2MpOwotCQlicmVhazsKLQljYXNlIE1QVDJfSU9DX0RPTkVfUkVTRVQ6Ci0JCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKLQkJICAgICJNUFQyX0lPQ19ET05FX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7Ci0JCV9zY3NpaF9xdWV1ZV9yZXNjYW4oaW9jKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKioKICAqIF9zY3NpaF9zZXR1cF9lZWRwIC0gc2V0dXAgTVBJIHJlcXVlc3QgZm9yIEVFRFAgdHJhbnNmZXIKICAqIEBzY21kOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKICAqIEBtcGlfcmVxdWVzdDogcG9pbnRlciB0byB0aGUgU0NTSV9JTyByZXFlc3QgbWVzc2FnZSBmcmFtZQpAQCAtMjYxNSw3ICsyNTY3LDYgQEAKIAlNcGkyU0NTSUlPUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKIAl1MzIgbXBpX2NvbnRyb2w7CiAJdTE2IHNtaWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNjbWQtPnNjc2lfZG9uZSA9IGRvbmU7CiAJc2FzX2RldmljZV9wcml2X2RhdGEgPSBzY21kLT5kZXZpY2UtPmhvc3RkYXRhOwpAQCAtMjYzNCwxMyArMjU4NSwxMCBAQAogCX0KIAogCS8qIHNlZSBpZiB3ZSBhcmUgYnVzeSB3aXRoIHRhc2sgbWFuYWdtZW50IHN0dWZmICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKLQlpZiAoc2FzX3RhcmdldF9wcml2X2RhdGEtPnRtX2J1c3kgfHwKLQkgICAgaW9jLT5zaG9zdF9yZWNvdmVyeSB8fCBpb2MtPmlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwlpZiAoc2FzX3RhcmdldF9wcml2X2RhdGEtPnRtX2J1c3kpCisJCXJldHVybiBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1k7CisJZWxzZSBpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSB8fCBpb2MtPmlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzKQogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHNjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKIAkJbXBpX2NvbnRyb2wgPSBNUEkyX1NDU0lJT19DT05UUk9MX1JFQUQ7CkBAIC0zMTg5LDI1ICszMTM3LDYgQEAKIH0KIAogLyoqCi0gKiBfc2NzaWhfbGlua19jaGFuZ2UgLSBwcm9jZXNzIHBoeSBsaW5rIGNoYW5nZXMKLSAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGhhbmRsZTogcGh5IGhhbmRsZQotICogQGF0dGFjaGVkX2hhbmRsZTogdmFsaWQgZm9yIGRldmljZXMgYXR0YWNoZWQgdG8gbGluawotICogQHBoeV9udW1iZXI6IHBoeSBudW1iZXIKLSAqIEBsaW5rX3JhdGU6IG5ldyBsaW5rIHJhdGUKLSAqIENvbnRleHQ6IHVzZXIuCi0gKgotICogUmV0dXJuIG5vdGhpbmcuCi0gKi8KLXN0YXRpYyB2b2lkCi1fc2NzaWhfbGlua19jaGFuZ2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlLCB1MTYgYXR0YWNoZWRfaGFuZGxlLAotICAgdTggcGh5X251bWJlciwgdTggbGlua19yYXRlKQotewotCW1wdDJzYXNfdHJhbnNwb3J0X3VwZGF0ZV9waHlfbGlua19jaGFuZ2UoaW9jLCBoYW5kbGUsIGF0dGFjaGVkX2hhbmRsZSwKLQkgICAgcGh5X251bWJlciwgbGlua19yYXRlKTsKLX0KLQotLyoqCiAgKiBfc2NzaWhfc2FzX2hvc3RfcmVmcmVzaCAtIHJlZnJlc2hpbmcgc2FzIGhvc3Qgb2JqZWN0IGNvbnRlbnRzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEB1cGRhdGU6IHVwZGF0ZSBsaW5rIGluZm9ybWF0aW9uCkBAIC0zMjUxLDcgKzMxODAsOCBAQAogCQkJICAgIGxlMTZfdG9fY3B1KHNhc19pb3VuaXRfcGcwLT5QaHlEYXRhW2ldLgogCQkJCUNvbnRyb2xsZXJEZXZIYW5kbGUpOwogCQkJaWYgKHVwZGF0ZSkKLQkJCQlfc2NzaWhfbGlua19jaGFuZ2UoaW9jLAorCQkJCW1wdDJzYXNfdHJhbnNwb3J0X3VwZGF0ZV9saW5rcygKKwkJCQkgICAgaW9jLAogCQkJCSAgICBpb2MtPnNhc19oYmEucGh5W2ldLmhhbmRsZSwKIAkJCQkgICAgbGUxNl90b19jcHUoc2FzX2lvdW5pdF9wZzAtPlBoeURhdGFbaV0uCiAJCQkJICAgIEF0dGFjaGVkRGV2SGFuZGxlKSwgaSwKQEAgLTM0MzYsNiArMzM2Niw5IEBACiAJaWYgKCFoYW5kbGUpCiAJCXJldHVybiAtMTsKIAorCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KQorCQlyZXR1cm4gLTE7CisKIAlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9leHBhbmRlcl9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmZXhwYW5kZXJfcGcwLAogCSAgICBNUEkyX1NBU19FWFBBTkRfUEdBRF9GT1JNX0hOREwsIGhhbmRsZSkpKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCkBAIC0zNTcyLDYgKzM1MDUsOSBAQAogCXN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKIAlzYXNfZXhwYW5kZXIgPSBtcHQyc2FzX3Njc2loX2V4cGFuZGVyX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKQEAgLTM3NDMsNiArMzY3OSw4IEBACiAJCW11dGV4X3VubG9jaygmaW9jLT50bV9jbWRzLm11dGV4KTsKIAkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJpc3N1ZSB0YXJnZXQgcmVzZXQgIgogCQkgICAgImRvbmU6IGhhbmRsZSgweCUwNHgpXG4iLCBpb2MtPm5hbWUsIGRldmljZV9oYW5kbGUpKTsKKwkJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCisJCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBTQVNfSU9fVU5JVF9DTlRSIC0gc2VuZCBSRU1PVkVfREVWSUNFICovCkBAIC0zNzY1LDYgKzM3MDMsOSBAQAogCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHkuSU9DTG9nSW5mbykpKTsKIAogIG91dDoKKworCV9zY3NpaF91YmxvY2tfaW9fZGV2aWNlKGlvYywgaGFuZGxlKTsKKwogCW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfcmVtb3ZlKGlvYywgc2FzX2RldmljZS0+c2FzX2FkZHJlc3MsCiAJICAgIHNhc19kZXZpY2UtPnBhcmVudF9oYW5kbGUpOwogCkBAIC0zOTA4LDYgKzM4NDksOCBAQAogCQkJICAgICJleHBhbmRlciBldmVudFxuIiwgaW9jLT5uYW1lKSk7CiAJCQlyZXR1cm47CiAJCX0KKwkJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCisJCQlyZXR1cm47CiAJCWlmIChldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKIAkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZU1RBVFVTX1ZBQ0FOVCkKIAkJCWNvbnRpbnVlOwpAQCAtMzkyMyw5ICszODY2LDEwIEBACiAJCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19UQVJHX0FEREVEOgogCQkJaWYgKCFwYXJlbnRfaGFuZGxlKSB7CiAJCQkJaWYgKHBoeV9udW1iZXIgPCBpb2MtPnNhc19oYmEubnVtX3BoeXMpCi0JCQkJCV9zY3NpaF9saW5rX2NoYW5nZShpb2MsCi0JCQkJCSAgIGlvYy0+c2FzX2hiYS5waHlbcGh5X251bWJlcl0uaGFuZGxlLAotCQkJCQkgICBoYW5kbGUsIHBoeV9udW1iZXIsIGxpbmtfcmF0ZV8pOworCQkJCQltcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfbGlua3MoCisJCQkJCWlvYywKKwkJCQkJaW9jLT5zYXNfaGJhLnBoeVtwaHlfbnVtYmVyXS5oYW5kbGUsCisJCQkJCWhhbmRsZSwgcGh5X251bWJlciwgbGlua19yYXRlXyk7CiAJCQl9IGVsc2UgewogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKIAkJCQlzYXNfZXhwYW5kZXIgPQpAQCAtMzkzNSwxNyArMzg3OSwxNCBAQAogCQkJCSAgICBmbGFncyk7CiAJCQkJaWYgKHNhc19leHBhbmRlcikgewogCQkJCQlpZiAocGh5X251bWJlciA8IHNhc19leHBhbmRlci0+bnVtX3BoeXMpCi0JCQkJCQlfc2NzaWhfbGlua19jaGFuZ2UoaW9jLAotCQkJCQkJICAgc2FzX2V4cGFuZGVyLT4KLQkJCQkJCSAgIHBoeVtwaHlfbnVtYmVyXS5oYW5kbGUsCi0JCQkJCQkgICBoYW5kbGUsIHBoeV9udW1iZXIsCi0JCQkJCQkgICBsaW5rX3JhdGVfKTsKKwkJCQkJCW1wdDJzYXNfdHJhbnNwb3J0X3VwZGF0ZV9saW5rcygKKwkJCQkJCWlvYywKKwkJCQkJCXNhc19leHBhbmRlci0+CisJCQkJCQlwaHlbcGh5X251bWJlcl0uaGFuZGxlLAorCQkJCQkJaGFuZGxlLCBwaHlfbnVtYmVyLAorCQkJCQkJbGlua19yYXRlXyk7CiAJCQkJfQogCQkJfQotCQkJaWYgKHJlYXNvbl9jb2RlID09IE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfUEhZX0NIQU5HRUQpIHsKLQkJCQlpZiAobGlua19yYXRlXyA+PSBNUEkyX1NBU19ORUdfTElOS19SQVRFXzFfNSkKLQkJCQkJX3Njc2loX3VibG9ja19pb19kZXZpY2UoaW9jLCBoYW5kbGUpOwotCQkJfQogCQkJaWYgKHJlYXNvbl9jb2RlID09IE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfVEFSR19BRERFRCkgewogCQkJCWlmIChsaW5rX3JhdGVfIDwgTVBJMl9TQVNfTkVHX0xJTktfUkFURV8xXzUpCiAJCQkJCWJyZWFrOwpAQCAtNDQ1NSw3ICs0Mzk2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCV9zY3NpaF9saW5rX2NoYW5nZShpb2MsCisJbXB0MnNhc190cmFuc3BvcnRfdXBkYXRlX2xpbmtzKGlvYywKIAkgICAgbGUxNl90b19jcHUoc2FzX2RldmljZV9wZzAuUGFyZW50RGV2SGFuZGxlKSwKIAkgICAgaGFuZGxlLCBzYXNfZGV2aWNlX3BnMC5QaHlOdW0sIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfMV81KTsKIApAQCAtNDc0NCw3ICs0Njg1LDcgQEAKIAkJCXJldHVybjsKIAkJfQogCi0JCV9zY3NpaF9saW5rX2NoYW5nZShpb2MsCisJCW1wdDJzYXNfdHJhbnNwb3J0X3VwZGF0ZV9saW5rcyhpb2MsCiAJCSAgICBsZTE2X3RvX2NwdShzYXNfZGV2aWNlX3BnMC5QYXJlbnREZXZIYW5kbGUpLAogCQkgICAgaGFuZGxlLCBzYXNfZGV2aWNlX3BnMC5QaHlOdW0sIE1QSTJfU0FTX05FR19MSU5LX1JBVEVfMV81KTsKIApAQCAtNTE1NiwyMiArNTA5Nyw5IEBACiBfc2NzaWhfcmVtb3ZlX3VucmVzcG9uZGluZ19kZXZpY2VzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKIHsKIAlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2UsICpzYXNfZGV2aWNlX25leHQ7Ci0Jc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyLCAqc2FzX2V4cGFuZGVyX25leHQ7CisJc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyOwogCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlLCAqcmFpZF9kZXZpY2VfbmV4dDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JX3Njc2loX3NlYXJjaF9yZXNwb25kaW5nX3Nhc19kZXZpY2VzKGlvYyk7Ci0JX3Njc2loX3NlYXJjaF9yZXNwb25kaW5nX3JhaWRfZGV2aWNlcyhpb2MpOwotCV9zY3NpaF9zZWFyY2hfcmVzcG9uZGluZ19leHBhbmRlcnMoaW9jKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7Ci0JaW9jLT5zaG9zdF9yZWNvdmVyeSA9IDA7Ci0JaWYgKGlvYy0+c2hvc3QtPnNob3N0X3N0YXRlID09IFNIT1NUX1JFQ09WRVJZKSB7Ci0JCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJwdXR0aW5nIGNvbnRyb2xsZXIgaW50byAiCi0JCSAgICAiU0hPU1RfUlVOTklOR1xuIiwgaW9jLT5uYW1lKTsKLQkJc2NzaV9ob3N0X3NldF9zdGF0ZShpb2MtPnNob3N0LCBTSE9TVF9SVU5OSU5HKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNhc19kZXZpY2UsIHNhc19kZXZpY2VfbmV4dCwKIAkgICAgJmlvYy0+c2FzX2RldmljZV9saXN0LCBsaXN0KSB7CkBAIC01MjA3LDE2ICs1MTM1LDYzIEBACiAJCV9zY3NpaF9yYWlkX2RldmljZV9yZW1vdmUoaW9jLCByYWlkX2RldmljZSk7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNhc19leHBhbmRlciwgc2FzX2V4cGFuZGVyX25leHQsCi0JICAgICZpb2MtPnNhc19leHBhbmRlcl9saXN0LCBsaXN0KSB7CisgcmV0cnlfZXhwYW5kZXJfc2VhcmNoOgorCXNhc19leHBhbmRlciA9IE5VTEw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYXNfZXhwYW5kZXIsICZpb2MtPnNhc19leHBhbmRlcl9saXN0LCBsaXN0KSB7CiAJCWlmIChzYXNfZXhwYW5kZXItPnJlc3BvbmRpbmcpIHsKIAkJCXNhc19leHBhbmRlci0+cmVzcG9uZGluZyA9IDA7CiAJCQljb250aW51ZTsKIAkJfQotCQlwcmludGsoIlx0cmVtb3ZpbmcgZXhwYW5kZXI6IGhhbmRsZSgweCUwNHgpLCAiCi0JCSAgICAiIHNhc19hZGRyKDB4JTAxNmxseClcbiIsIHNhc19leHBhbmRlci0+aGFuZGxlLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXNfZXhwYW5kZXItPnNhc19hZGRyZXNzKTsKIAkJX3Njc2loX2V4cGFuZGVyX3JlbW92ZShpb2MsIHNhc19leHBhbmRlci0+aGFuZGxlKTsKKwkJZ290byByZXRyeV9leHBhbmRlcl9zZWFyY2g7CisJfQorfQorCisvKioKKyAqIG1wdDJzYXNfc2NzaWhfcmVzZXRfaGFuZGxlciAtIHJlc2V0IGNhbGxiYWNrIGhhbmRsZXIgKGZvciBzY3NpaCkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHJlc2V0X3BoYXNlOiBwaGFzZQorICoKKyAqIFRoZSBoYW5kbGVyIGZvciBkb2luZyBhbnkgcmVxdWlyZWQgY2xlYW51cCBvciBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBUaGUgcmVzZXQgcGhhc2UgY2FuIGJlIE1QVDJfSU9DX1BSRV9SRVNFVCwgTVBUMl9JT0NfQUZURVJfUkVTRVQsCisgKiBNUFQyX0lPQ19ET05FX1JFU0VUCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3ZvaWQKK21wdDJzYXNfc2NzaWhfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSkKK3sKKwlzd2l0Y2ggKHJlc2V0X3BoYXNlKSB7CisJY2FzZSBNUFQyX0lPQ19QUkVfUkVTRVQ6CisJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJICAgICJNUFQyX0lPQ19QUkVfUkVTRVRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwkJX3Njc2loX2Z3X2V2ZW50X29mZihpb2MpOworCQlicmVhazsKKwljYXNlIE1QVDJfSU9DX0FGVEVSX1JFU0VUOgorCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCSAgICAiTVBUMl9JT0NfQUZURVJfUkVTRVRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwkJaWYgKGlvYy0+dG1fY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9QRU5ESU5HKSB7CisJCQlpb2MtPnRtX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX1JFU0VUOworCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIGlvYy0+dG1fY21kcy5zbWlkKTsKKwkJCWNvbXBsZXRlKCZpb2MtPnRtX2NtZHMuZG9uZSk7CisJCX0KKwkJX3Njc2loX2Z3X2V2ZW50X29uKGlvYyk7CisJCV9zY3NpaF9mbHVzaF9ydW5uaW5nX2NtZHMoaW9jKTsKKwkJYnJlYWs7CisJY2FzZSBNUFQyX0lPQ19ET05FX1JFU0VUOgorCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCSAgICAiTVBUMl9JT0NfRE9ORV9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOworCQlfc2NzaWhfc2FzX2hvc3RfcmVmcmVzaChpb2MsIDApOworCQlfc2NzaWhfc2VhcmNoX3Jlc3BvbmRpbmdfc2FzX2RldmljZXMoaW9jKTsKKwkJX3Njc2loX3NlYXJjaF9yZXNwb25kaW5nX3JhaWRfZGV2aWNlcyhpb2MpOworCQlfc2NzaWhfc2VhcmNoX3Jlc3BvbmRpbmdfZXhwYW5kZXJzKGlvYyk7CisJCWJyZWFrOworCWNhc2UgTVBUMl9JT0NfUlVOTklORzoKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkgICAgIk1QVDJfSU9DX1JVTk5JTkdcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwkJX3Njc2loX3JlbW92ZV91bnJlc3BvbmRpbmdfZGV2aWNlcyhpb2MpOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTUyMzYsMTQgKzUyMTEsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gZndfZXZlbnQtPmlvYzsKIAotCS8qIFRoaXMgaXMgaW52b2tlZCBieSBjYWxsaW5nIF9zY3NpaF9xdWV1ZV9yZXNjYW4oKS4gKi8KLQlpZiAoZndfZXZlbnQtPmV2ZW50ID09IE1QVDJTQVNfUkVTQ0FOX0FGVEVSX0hPU1RfUkVTRVQpIHsKLQkJX3Njc2loX2Z3X2V2ZW50X2ZyZWUoaW9jLCBmd19ldmVudCk7Ci0JCV9zY3NpaF9zYXNfaG9zdF9yZWZyZXNoKGlvYywgMSk7Ci0JCV9zY3NpaF9yZW1vdmVfdW5yZXNwb25kaW5nX2RldmljZXMoaW9jKTsKLQkJcmV0dXJuOwotCX0KLQogCS8qIHRoZSBxdWV1ZSBpcyBiZWluZyBmbHVzaGVkIHNvIGlnbm9yZSB0aGlzIGV2ZW50ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOwogCWlmIChpb2MtPmZ3X2V2ZW50c19vZmYgfHwgaW9jLT5yZW1vdmVfaG9zdCkgewpAQCAtNTI1MywxMyArNTIyMCwxMCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CiAJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCQlfc2NzaWhfZndfZXZlbnRfcmVxdWV1ZShpb2MsIGZ3X2V2ZW50LCAxMDAwKTsKIAkJcmV0dXJuOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CiAKIAlzd2l0Y2ggKGZ3X2V2ZW50LT5ldmVudCkgewogCWNhc2UgTVBJMl9FVkVOVF9TQVNfVE9QT0xPR1lfQ0hBTkdFX0xJU1Q6CkBAIC01NDYxLDYgKzU0MjUsOCBAQAogCQkJaWYgKCFzYXNfZGV2aWNlKQogCQkJCWNvbnRpbnVlOwogCQkJX3Njc2loX3JlbW92ZV9kZXZpY2UoaW9jLCBzYXNfZGV2aWNlLT5oYW5kbGUpOworCQkJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCisJCQkJcmV0dXJuOwogCQkJZ290byByZXRyeV9kZXZpY2Vfc2VhcmNoOwogCQl9CiAJfQpAQCAtNTQ4Miw2ICs1NDQ4LDggQEAKIAkJCWlmICghZXhwYW5kZXJfc2libGluZykKIAkJCQljb250aW51ZTsKIAkJCV9zY3NpaF9leHBhbmRlcl9yZW1vdmUoaW9jLCBleHBhbmRlcl9zaWJsaW5nLT5oYW5kbGUpOworCQkJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCisJCQkJcmV0dXJuOwogCQkJZ290byByZXRyeV9leHBhbmRlcl9zZWFyY2g7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYwppbmRleCA2ODY2OTViLi43NDIzMjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKQEAgLTE0MCwxMSArMTQwLDE4IEBACiAJdTMyIGRldmljZV9pbmZvOwogCXUzMiBpb2Nfc3RhdHVzOwogCisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBob3N0IHJlc2V0IGluIHByb2dyZXNzIVxuIiwKKwkJICAgIF9fZnVuY19fLCBpb2MtPm5hbWUpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKIAlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9zYXNfZGV2aWNlX3BnMChpb2MsICZtcGlfcmVwbHksICZzYXNfZGV2aWNlX3BnMCwKIAkgICAgTVBJMl9TQVNfREVWSUNFX1BHQURfRk9STV9IQU5ETEUsIGhhbmRsZSkpKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisKIAkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKIAlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgpAQCAtMTUzLDcgKzE2MCw3IEBACiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImhhbmRsZSgweCUwNHgpLCBpb2Nfc3RhdHVzKDB4JTA0eCkiCiAJCSAgICAiXG5mYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSwgaW9jX3N0YXR1cywKIAkJICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAltZW1zZXQoaWRlbnRpZnksIDAsIHNpemVvZihpZGVudGlmeSkpOwpAQCAtMjg4LDIxICsyOTUsMTcgQEAKIAl2b2lkICpwc2dlOwogCXUzMiBzZ2xfZmxhZ3M7CiAJdTggaXNzdWVfcmVzZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCAqZGF0YV9vdXQgPSBOVUxMOwogCWRtYV9hZGRyX3QgZGF0YV9vdXRfZG1hOwogCXUzMiBzejsKIAl1NjQgKnNhc19hZGRyZXNzX2xlOwogCXUxNiB3YWl0X3N0YXRlX2NvdW50OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKLQlpZiAoaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3MpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KSB7CiAJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaG9zdCByZXNldCBpbiBwcm9ncmVzcyFcbiIsCiAJCSAgICBfX2Z1bmNfXywgaW9jLT5uYW1lKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKIAogCW11dGV4X2xvY2soJmlvYy0+dHJhbnNwb3J0X2NtZHMubXV0ZXgpOwogCkBAIC03ODksNyArNzkyLDcgQEAKIH0KIAogLyoqCi0gKiBtcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfcGh5X2xpbmtfY2hhbmdlIC0gcmVmcmVzaGluZyBwaHkgbGluayBjaGFuZ2VzIGFuZCBhdHRhY2hlZCBkZXZpY2VzCisgKiBtcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfbGlua3MgLSByZWZyZXNoaW5nIHBoeSBsaW5rIGNoYW5nZXMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQGhhbmRsZTogaGFuZGxlIHRvIHNhc19ob3N0IG9yIGV4cGFuZGVyCiAgKiBAYXR0YWNoZWRfaGFuZGxlOiBhdHRhY2hlZCBkZXZpY2UgaGFuZGxlCkBAIC03OTksMTMgKzgwMiwxOSBAQAogICogUmV0dXJucyBub3RoaW5nLgogICovCiB2b2lkCi1tcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfcGh5X2xpbmtfY2hhbmdlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKK21wdDJzYXNfdHJhbnNwb3J0X3VwZGF0ZV9saW5rcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAgICAgdTE2IGhhbmRsZSwgdTE2IGF0dGFjaGVkX2hhbmRsZSwgdTggcGh5X251bWJlciwgdTggbGlua19yYXRlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IF9zYXNfbm9kZSAqc2FzX25vZGU7CiAJc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeTsKIAorCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaG9zdCByZXNldCBpbiBwcm9ncmVzcyFcbiIsCisJCQlfX2Z1bmNfXywgaW9jLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKIAlzYXNfbm9kZSA9IF90cmFuc3BvcnRfc2FzX25vZGVfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOwpAQCAtMTAyNSw3ICsxMDM0LDYgQEAKIAl2b2lkICpwc2dlOwogCXUzMiBzZ2xfZmxhZ3M7CiAJdTggaXNzdWVfcmVzZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcl9pbiA9IDA7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcl9vdXQgPSAwOwogCXUxNiB3YWl0X3N0YXRlX2NvdW50OwpAQCAtMTA0NSwxNCArMTA1MywxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwotCWlmIChpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzcykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKIAkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBob3N0IHJlc2V0IGluIHByb2dyZXNzIVxuIiwKIAkJICAgIF9fZnVuY19fLCBpb2MtPm5hbWUpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCiAJcmMgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlvYy0+dHJhbnNwb3J0X2NtZHMubXV0ZXgpOwogCWlmIChyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCmluZGV4IDcwYjYwYWQuLmUzMmMzNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYwpAQCAtMTcxMyw3ICsxNzEzLDcgQEAKIAogCW5zcF9kYmcoTlNQX0RFQlVHX0lOSVQsICJpbiIpOwogCi0JY2ZnX21lbSA9IGt6YWxsb2Moc2l6ZW9mKGNmZ19tZW0pLCBHRlBfS0VSTkVMKTsKKwljZmdfbWVtID0ga3phbGxvYyhzaXplb2YoKmNmZ19tZW0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNmZ19tZW0pCiAJCXJldHVybiAtRU5PTUVNOwogCWNmZ19tZW0tPmRhdGEgPSBkYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMwMmYwNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKQEAgLTAsMCArMSw1NjA0IEBACisvKgorICogcG1jcmFpZC5jIC0tIGRyaXZlciBmb3IgUE1DIFNpZXJyYSBNYXhSQUlEIGNvbnRyb2xsZXIgYWRhcHRlcnMKKyAqCisgKiBXcml0dGVuIEJ5OiBQTUMgU2llcnJhIENvcnBvcmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFBNQyBTaWVycmEgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQQorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpY2FtLmg+CisKKyNpbmNsdWRlICJwbWNyYWlkLmgiCisKKy8qCisgKiAgIE1vZHVsZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBwbWNyYWlkX2RlYnVnX2xvZzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG1jcmFpZF9kaXNhYmxlX2FlbjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG1jcmFpZF9sb2dfbGV2ZWwgPSBJT0FTQ19MT0dfTEVWRUxfTVVTVDsKKworLyoKKyAqIERhdGEgc3RydWN0dXJlcyB0byBzdXBwb3J0IG11bHRpcGxlIGFkYXB0ZXJzIGJ5IHRoZSBMTEQuCisgKiBwbWNyYWlkX2FkYXB0ZXJfY291bnQgLSBjb3VudCBvZiBjb25maWd1cmVkIGFkYXB0ZXJzCisgKi8KK3N0YXRpYyBhdG9taWNfdCBwbWNyYWlkX2FkYXB0ZXJfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKKworLyoKKyAqIFN1cHBvcnRpbmcgdXNlci1sZXZlbCBjb250cm9sIGludGVyZmFjZSB0aHJvdWdoIElPQ1RMIGNvbW1hbmRzLgorICogcG1jcmFpZF9tYWpvciAtIG1ham9yIG51bWJlciB0byB1c2UKKyAqIHBtY3JhaWRfbWlub3IgLSBtaW5vciBudW1iZXIocykgdG8gdXNlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG1jcmFpZF9tYWpvcjsKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKnBtY3JhaWRfY2xhc3M7CitERUNMQVJFX0JJVE1BUChwbWNyYWlkX21pbm9yLCBQTUNSQUlEX01BWF9BREFQVEVSUyk7CisKKy8qCisgKiBNb2R1bGUgcGFyYW1ldGVycworICovCitNT0RVTEVfQVVUSE9SKCJQTUMgU2llcnJhIENvcnBvcmF0aW9uLCBhbmlsX3JhdmluZHJhbmF0aEBwbWMtc2llcnJhLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQTUMgU2llcnJhIE1heFJBSUQgQ29udHJvbGxlciBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKFBNQ1JBSURfRFJJVkVSX1ZFUlNJT04pOworCittb2R1bGVfcGFyYW1fbmFtZWQobG9nX2xldmVsLCBwbWNyYWlkX2xvZ19sZXZlbCwgdWludCwgKFNfSVJVR08gfCBTX0lXVVNSKSk7CitNT0RVTEVfUEFSTV9ERVNDKGxvZ19sZXZlbCwKKwkJICJFbmFibGVzIGZpcm13YXJlIGVycm9yIGNvZGUgbG9nZ2luZywgZGVmYXVsdCA6MSBoaWdoLXNldmVyaXR5IgorCQkgIiBlcnJvcnMsIDI6IGFsbCBlcnJvcnMgaW5jbHVkaW5nIGhpZ2gtc2V2ZXJpdHkgZXJyb3JzLCIKKwkJICIgMDogZGlzYWJsZXMgbG9nZ2luZyIpOworCittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHBtY3JhaWRfZGVidWdfbG9nLCB1aW50LCAoU19JUlVHTyB8IFNfSVdVU1IpKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsCisJCSAiRW5hYmxlIGRyaXZlciB2ZXJib3NlIG1lc3NhZ2UgbG9nZ2luZy4gU2V0IDEgdG8gZW5hYmxlLiIKKwkJICIoZGVmYXVsdDogMCkiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKGRpc2FibGVfYWVuLCBwbWNyYWlkX2Rpc2FibGVfYWVuLCB1aW50LCAoU19JUlVHTyB8IFNfSVdVU1IpKTsKK01PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9hZW4sCisJCSAiRGlzYWJsZSBkcml2ZXIgYWVuIG5vdGlmaWNhdGlvbnMgdG8gYXBwcy4gU2V0IDEgdG8gZGlzYWJsZS4iCisJCSAiKGRlZmF1bHQ6IDApIik7CisKKy8qIGNoaXAgc3BlY2lmaWMgY29uc3RhbnRzIGZvciBQTUMgTWF4UkFJRCBjb250cm9sbGVycyAoc2FtZSBmb3IKKyAqIDB4NTIyMCBhbmQgMHg4MDEwCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcG1jcmFpZF9jaGlwX2RldGFpbHMgcG1jcmFpZF9jaGlwX2NmZ1tdID0geworCXsKKwkgLmlvYXN0YXR1cyA9IDB4MCwKKwkgLmlvYXJyaW4gPSAweDAwMDQwLAorCSAubWFpbGJveCA9IDB4N0ZDMzAsCisJIC5nbG9iYWxfaW50cl9tYXNrID0gMHgwMDAzNCwKKwkgLmlvYV9ob3N0X2ludHIgPSAweDAwMDlDLAorCSAuaW9hX2hvc3RfaW50cl9jbHIgPSAweDAwMEEwLAorCSAuaW9hX2hvc3RfbWFzayA9IDB4N0ZDMjgsCisJIC5pb2FfaG9zdF9tYXNrX2NsciA9IDB4N0ZDMjgsCisJIC5ob3N0X2lvYV9pbnRyID0gMHgwMDAyMCwKKwkgLmhvc3RfaW9hX2ludHJfY2xyID0gMHgwMDAyMCwKKwkgLnRyYW5zb3BfdGltZW91dCA9IDMwMAorCSB9Cit9OworCisvKgorICogUENJIGRldmljZSBpZHMgc3VwcG9ydGVkIGJ5IHBtY3JhaWQgZHJpdmVyCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwbWNyYWlkX3BjaV90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUE1DLCBQQ0lfREVWSUNFX0lEX1BNQ19NQVhSQUlEKSwKKwkgIDAsIDAsIChrZXJuZWxfdWxvbmdfdCkmcG1jcmFpZF9jaGlwX2NmZ1swXQorCX0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwbWNyYWlkX3BjaV90YWJsZSk7CisKKworCisvKioKKyAqIHBtY3JhaWRfc2xhdmVfYWxsb2MgLSBQcmVwYXJlIGZvciBjb21tYW5kcyB0byBhIGRldmljZQorICogQHNjc2lfZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBtaWQtbGF5ZXIgcHJpb3IgdG8gc2VuZGluZyBhbnkgY29tbWFuZCB0byB0aGUgbmV3CisgKiBkZXZpY2UuIFN0b3JlcyByZXNvdXJjZSBlbnRyeSBkZXRhaWxzIG9mIHRoZSBkZXZpY2UgaW4gc2NzaV9kZXZpY2Ugc3RydWN0LgorICogUXVldWVjb21tYW5kIHVzZXMgdGhlIHJlc291cmNlIGhhbmRsZSBhbmQgb3RoZXIgZGV0YWlscyB0byBmaWxsIHVwIElPQVJDQgorICogd2hpbGUgc2VuZGluZyBjb21tYW5kcyB0byB0aGUgZGV2aWNlLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCSAgMCBvbiBzdWNjZXNzIC8gLUVOWElPIGlmIGRldmljZSBkb2VzIG5vdCBleGlzdAorICovCitzdGF0aWMgaW50IHBtY3JhaWRfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldikKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqdGVtcCwgKnJlcyA9IE5VTEw7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZTsKKwl1OCB0YXJnZXQsIGJ1cywgbHVuOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlpbnQgcmMgPSAtRU5YSU87CisJcGluc3RhbmNlID0gc2hvc3RfcHJpdihzY3NpX2Rldi0+aG9zdCk7CisKKwkvKiBEcml2ZXIgZXhwb3NlcyBWU0VUIGFuZCBHU0NTSSByZXNvdXJjZXMgb25seTsgYWxsIG90aGVyIGRldmljZSB0eXBlcworCSAqIGFyZSBub3QgZXhwb3NlZC4gUmVzb3VyY2UgbGlzdCBpcyBzeW5jaHJvbml6ZWQgdXNpbmcgcmVzb3VyY2UgbG9jaworCSAqIHNvIGFueSB0cmF2ZXJzYWwgb3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgbGlzdCBzaG91bGQgYmUgZG9uZSBpbnNpZGUKKwkgKiB0aGlzIGxvY2sKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlbXAsICZwaW5zdGFuY2UtPnVzZWRfcmVzX3EsIHF1ZXVlKSB7CisKKwkJLyogZG8gbm90IGV4cG9zZSBWU0VUcyB3aXRoIG9yZGVyLWlkcyA+PSAyNDAgKi8KKwkJaWYgKFJFU19JU19WU0VUKHRlbXAtPmNmZ19lbnRyeSkpIHsKKwkJCXRhcmdldCA9IHRlbXAtPmNmZ19lbnRyeS51bmlxdWVfZmxhZ3MxOworCQkJaWYgKHRhcmdldCA+PSBQTUNSQUlEX01BWF9WU0VUX1RBUkdFVFMpCisJCQkJY29udGludWU7CisJCQlidXMgPSBQTUNSQUlEX1ZTRVRfQlVTX0lEOworCQkJbHVuID0gMDsKKwkJfSBlbHNlIGlmIChSRVNfSVNfR1NDU0kodGVtcC0+Y2ZnX2VudHJ5KSkgeworCQkJdGFyZ2V0ID0gUkVTX1RBUkdFVCh0ZW1wLT5jZmdfZW50cnkucmVzb3VyY2VfYWRkcmVzcyk7CisJCQlidXMgPSBQTUNSQUlEX1BIWVNfQlVTX0lEOworCQkJbHVuID0gUkVTX0xVTih0ZW1wLT5jZmdfZW50cnkucmVzb3VyY2VfYWRkcmVzcyk7CisJCX0gZWxzZSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChidXMgPT0gc2NzaV9kZXYtPmNoYW5uZWwgJiYKKwkJICAgIHRhcmdldCA9PSBzY3NpX2Rldi0+aWQgJiYKKwkJICAgIGx1biA9PSBzY3NpX2Rldi0+bHVuKSB7CisJCQlyZXMgPSB0ZW1wOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmVzKSB7CisJCXJlcy0+c2NzaV9kZXYgPSBzY3NpX2RldjsKKwkJc2NzaV9kZXYtPmhvc3RkYXRhID0gcmVzOworCQlyZXMtPmNoYW5nZV9kZXRlY3RlZCA9IDA7CisJCWF0b21pY19zZXQoJnJlcy0+cmVhZF9mYWlsdXJlcywgMCk7CisJCWF0b21pY19zZXQoJnJlcy0+d3JpdGVfZmFpbHVyZXMsIDApOworCQlyYyA9IDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jaywgbG9ja19mbGFncyk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHBtY3JhaWRfc2xhdmVfY29uZmlndXJlIC0gQ29uZmlndXJlcyBhIFNDU0kgZGV2aWNlCisgKiBAc2NzaV9kZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICoKKyAqIFRoaXMgZnVjbnRpb24gaXMgZXhlY3V0ZWQgYnkgU0NTSSBtaWQgbGF5ZXIganVzdCBhZnRlciBhIGRldmljZSBpcyBmaXJzdAorICogc2Nhbm5lZCAoaS5lLiBpdCBoYXMgcmVzcG9uZGVkIHRvIGFuIElOUVVJUlkpLiBGb3IgVlNFVCByZXNvdXJjZXMsIHRoZQorICogdGltZW91dCB2YWx1ZSAoZGVmYXVsdCAzMHMpIHdpbGwgYmUgb3Zlci13cml0dGVuIHRvIGEgaGlnaGVyIHZhbHVlICg2MHMpCisgKiBhbmQgbWF4X3NlY3RvcnMgdmFsdWUgd2lsbCBiZSBvdmVyLXdyaXR0ZW4gdG8gNTEyLiBJdCBhbHNvIHNldHMgcXVldWUgZGVwdGgKKyAqIHRvIGhvc3QtPmNtZF9wZXJfbHVuIHZhbHVlCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJICAwIG9uIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCBwbWNyYWlkX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2KQoreworCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXMgPSBzY3NpX2Rldi0+aG9zdGRhdGE7CisKKwlpZiAoIXJlcykKKwkJcmV0dXJuIDA7CisKKwkvKiBMTEQgZXhwb3NlcyBWU0VUcyBhbmQgRW5jbG9zdXJlIGRldmljZXMgb25seSAqLworCWlmIChSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpICYmCisJICAgIHNjc2lfZGV2LT50eXBlICE9IFRZUEVfRU5DTE9TVVJFKQorCQlyZXR1cm4gLUVOWElPOworCisJcG1jcmFpZF9pbmZvKCJjb25maWd1cmluZyAleDoleDoleDoleFxuIiwKKwkJICAgICBzY3NpX2Rldi0+aG9zdC0+dW5pcXVlX2lkLAorCQkgICAgIHNjc2lfZGV2LT5jaGFubmVsLAorCQkgICAgIHNjc2lfZGV2LT5pZCwKKwkJICAgICBzY3NpX2Rldi0+bHVuKTsKKworCWlmIChSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpKSB7CisJCXNjc2lfZGV2LT5hbGxvd19yZXN0YXJ0ID0gMTsKKwl9IGVsc2UgaWYgKFJFU19JU19WU0VUKHJlcy0+Y2ZnX2VudHJ5KSkgeworCQlzY3NpX2Rldi0+YWxsb3dfcmVzdGFydCA9IDE7CisJCWJsa19xdWV1ZV9ycV90aW1lb3V0KHNjc2lfZGV2LT5yZXF1ZXN0X3F1ZXVlLAorCQkJCSAgICAgUE1DUkFJRF9WU0VUX0lPX1RJTUVPVVQpOworCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2NzaV9kZXYtPnJlcXVlc3RfcXVldWUsCisJCQkJICAgICAgUE1DUkFJRF9WU0VUX01BWF9TRUNUT1JTKTsKKwl9CisKKwlpZiAoc2NzaV9kZXYtPnRhZ2dlZF9zdXBwb3J0ZWQgJiYKKwkgICAgKFJFU19JU19HU0NTSShyZXMtPmNmZ19lbnRyeSkgfHwgUkVTX0lTX1ZTRVQocmVzLT5jZmdfZW50cnkpKSkgeworCQlzY3NpX2FjdGl2YXRlX3RjcShzY3NpX2Rldiwgc2NzaV9kZXYtPnF1ZXVlX2RlcHRoKTsKKwkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2NzaV9kZXYsIE1TR19TSU1QTEVfVEFHLAorCQkJCQlzY3NpX2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4pOworCX0gZWxzZSB7CisJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCAwLAorCQkJCQlzY3NpX2Rldi0+aG9zdC0+Y21kX3Blcl9sdW4pOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHBtY3JhaWRfc2xhdmVfZGVzdHJveSAtIFVuY29uZmlndXJlIGEgU0NTSSBkZXZpY2UgYmVmb3JlIHJlbW92aW5nIGl0CisgKgorICogQHNjc2lfZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBieSBtaWQtbGF5ZXIgYmVmb3JlIHJlbW92aW5nIGEgZGV2aWNlLiBQb2ludGVyIGFzc2lnbm1lbnRzCisgKiBkb25lIGluIHBtY3JhaWRfc2xhdmVfYWxsb2Mgd2lsbCBiZSByZXNldCB0byBOVUxMIGhlcmUuCisgKgorICogUmV0dXJuIHZhbHVlCisgKiAgIG5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYpCit7CisJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlczsKKworCXJlcyA9IChzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqKXNjc2lfZGV2LT5ob3N0ZGF0YTsKKworCWlmIChyZXMpCisJCXJlcy0+c2NzaV9kZXYgPSBOVUxMOworCisJc2NzaV9kZXYtPmhvc3RkYXRhID0gTlVMTDsKK30KKworLyoqCisgKiBwbWNyYWlkX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIENoYW5nZSB0aGUgZGV2aWNlJ3MgcXVldWUgZGVwdGgKKyAqIEBzY3NpX2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKiBAZGVwdGg6IGRlcHRoIHRvIHNldAorICoKKyAqIFJldHVybiB2YWx1ZQorICogCWFjdHVhbCBkZXB0aCBzZXQKKyAqLworc3RhdGljIGludCBwbWNyYWlkX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2LCBpbnQgZGVwdGgpCit7CisJaWYgKGRlcHRoID4gUE1DUkFJRF9NQVhfQ01EX1BFUl9MVU4pCisJCWRlcHRoID0gUE1DUkFJRF9NQVhfQ01EX1BFUl9MVU47CisKKwlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzY3NpX2Rldiwgc2NzaV9nZXRfdGFnX3R5cGUoc2NzaV9kZXYpLCBkZXB0aCk7CisKKwlyZXR1cm4gc2NzaV9kZXYtPnF1ZXVlX2RlcHRoOworfQorCisvKioKKyAqIHBtY3JhaWRfY2hhbmdlX3F1ZXVlX3R5cGUgLSBDaGFuZ2UgdGhlIGRldmljZSdzIHF1ZXVlIHR5cGUKKyAqIEBzY3NpX2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKiBAdGFnOiB0eXBlIG9mIHRhZ3MgdG8gdXNlCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCWFjdHVhbCBxdWV1ZSB0eXBlIHNldAorICovCitzdGF0aWMgaW50IHBtY3JhaWRfY2hhbmdlX3F1ZXVlX3R5cGUoc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldiwgaW50IHRhZykKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqcmVzOworCisJcmVzID0gKHN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICopc2NzaV9kZXYtPmhvc3RkYXRhOworCisJaWYgKChyZXMpICYmIHNjc2lfZGV2LT50YWdnZWRfc3VwcG9ydGVkICYmCisJICAgIChSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpIHx8IFJFU19JU19WU0VUKHJlcy0+Y2ZnX2VudHJ5KSkpIHsKKwkJc2NzaV9zZXRfdGFnX3R5cGUoc2NzaV9kZXYsIHRhZyk7CisKKwkJaWYgKHRhZykKKwkJCXNjc2lfYWN0aXZhdGVfdGNxKHNjc2lfZGV2LCBzY3NpX2Rldi0+cXVldWVfZGVwdGgpOworCQllbHNlCisJCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNjc2lfZGV2LCBzY3NpX2Rldi0+cXVldWVfZGVwdGgpOworCX0gZWxzZQorCQl0YWcgPSAwOworCisJcmV0dXJuIHRhZzsKK30KKworCisvKioKKyAqIHBtY3JhaWRfaW5pdF9jbWRibGsgLSBpbml0aWFsaXplcyBhIGNvbW1hbmQgYmxvY2sKKyAqCisgKiBAY21kOiBwb2ludGVyIHRvIHN0cnVjdCBwbWNyYWlkX2NtZCB0byBiZSBpbml0aWFsaXplZAorICogQGluZGV4OiBpZiA+PTAgZmlyc3QgdGltZSBpbml0aWFsaXphdGlvbjsgb3RoZXJ3aXNlIHJlaW5pdGlhbGl6YXRpb24KKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCSBOb25lCisgKi8KK3ZvaWQgcG1jcmFpZF9pbml0X2NtZGJsayhzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCwgaW50IGluZGV4KQoreworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiAqaW9hcmNiID0gJihjbWQtPmlvYV9jYi0+aW9hcmNiKTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyID0gY21kLT5pb2FfY2JfYnVzX2FkZHI7CisKKwlpZiAoaW5kZXggPj0gMCkgeworCQkvKiBmaXJzdCB0aW1lIGluaXRpYWxpemF0aW9uIChjYWxsZWQgZnJvbSAgcHJvYmUpICovCisJCXUzMiBpb2FzYV9vZmZzZXQgPQorCQkJb2Zmc2V0b2Yoc3RydWN0IHBtY3JhaWRfY29udHJvbF9ibG9jaywgaW9hc2EpOworCisJCWNtZC0+aW5kZXggPSBpbmRleDsKKwkJaW9hcmNiLT5yZXNwb25zZV9oYW5kbGUgPSBjcHVfdG9fbGUzMihpbmRleCA8PCAyKTsKKwkJaW9hcmNiLT5pb2FyY2JfYnVzX2FkZHIgPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7CisJCWlvYXJjYi0+aW9hc2FfYnVzX2FkZHIgPSBjcHVfdG9fbGU2NChkbWFfYWRkciArIGlvYXNhX29mZnNldCk7CisJCWlvYXJjYi0+aW9hc2FfbGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2lvYXNhKSk7CisJfSBlbHNlIHsKKwkJLyogcmUtaW5pdGlhbGl6YXRpb24gb2YgdmFyaW91cyBsZW5ndGhzLCBjYWxsZWQgb25jZSBjb21tYW5kIGlzCisJCSAqIHByb2Nlc3NlZCBieSBJT0EKKwkJICovCisJCW1lbXNldCgmY21kLT5pb2FfY2ItPmlvYXJjYi5jZGIsIDAsIFBNQ1JBSURfTUFYX0NEQl9MRU4pOworCQlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MwID0gMDsKKwkJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMSA9IDA7CisJCWlvYXJjYi0+Y21kX3RpbWVvdXQgPSAwOworCQlpb2FyY2ItPmlvYXJjYl9idXNfYWRkciAmPSAofjB4MUZVTEwpOworCQlpb2FyY2ItPmlvYWRsX2J1c19hZGRyID0gMDsKKwkJaW9hcmNiLT5pb2FkbF9sZW5ndGggPSAwOworCQlpb2FyY2ItPmRhdGFfdHJhbnNmZXJfbGVuZ3RoID0gMDsKKwkJaW9hcmNiLT5hZGRfY21kX3BhcmFtX2xlbmd0aCA9IDA7CisJCWlvYXJjYi0+YWRkX2NtZF9wYXJhbV9vZmZzZXQgPSAwOworCQljbWQtPmlvYV9jYi0+aW9hc2EuaW9hc2MgPSAwOworCQljbWQtPmlvYV9jYi0+aW9hc2EucmVzaWR1YWxfZGF0YV9sZW5ndGggPSAwOworCQljbWQtPnUudGltZV9sZWZ0ID0gMDsKKwl9CisKKwljbWQtPmNtZF9kb25lID0gTlVMTDsKKwljbWQtPnNjc2lfY21kID0gTlVMTDsKKwljbWQtPnJlbGVhc2UgPSAwOworCWNtZC0+Y29tcGxldGlvbl9yZXEgPSAwOworCWNtZC0+ZG1hX2hhbmRsZSA9IDA7CisJaW5pdF90aW1lcigmY21kLT50aW1lcik7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZWluaXRfY21kYmxrIC0gcmVpbml0aWFsaXplIGEgY29tbWFuZCBibG9jaworICoKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gc3RydWN0IHBtY3JhaWRfY21kIHRvIGJlIHJlaW5pdGlhbGl6ZWQKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCSBOb25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVpbml0X2NtZGJsayhzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlwbWNyYWlkX2luaXRfY21kYmxrKGNtZCwgLTEpOworfQorCisvKioKKyAqIHBtY3JhaWRfZ2V0X2ZyZWVfY21kIC0gZ2V0IGEgZnJlZSBjbWQgYmxvY2sgZnJvbSBjb21tYW5kIGJsb2NrIHBvb2wKKyAqIEBwaW5zdGFuY2U6IGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlOgorICoJcmV0dXJucyBwb2ludGVyIHRvIGNtZCBibG9jayBvciBOVUxMIGlmIG5vIGJsb2NrcyBhcmUgYXZhaWxhYmxlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcG1jcmFpZF9jbWQgKnBtY3JhaWRfZ2V0X2ZyZWVfY21kKAorCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UKKykKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCisJLyogZnJlZSBjbWQgYmxvY2sgbGlzdCBpcyBwcm90ZWN0ZWQgYnkgZnJlZV9wb29sX2xvY2sgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGluc3RhbmNlLT5mcmVlX3Bvb2xfbG9jaywgbG9ja19mbGFncyk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnBpbnN0YW5jZS0+ZnJlZV9jbWRfcG9vbCkpIHsKKwkJY21kID0gbGlzdF9lbnRyeShwaW5zdGFuY2UtPmZyZWVfY21kX3Bvb2wubmV4dCwKKwkJCQkgc3RydWN0IHBtY3JhaWRfY21kLCBmcmVlX2xpc3QpOworCQlsaXN0X2RlbCgmY21kLT5mcmVlX2xpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW5zdGFuY2UtPmZyZWVfcG9vbF9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgYmxvY2sgYmVmb3JlIGdpdmluZyBpdCB0aGUgY2FsbGVyICovCisJaWYgKGNtZCAhPSBOVUxMKQorCQlwbWNyYWlkX3JlaW5pdF9jbWRibGsoY21kKTsKKwlyZXR1cm4gY21kOworfQorCisvKioKKyAqIHBtY3JhaWRfcmV0dXJuX2NtZCAtIHJldHVybiBhIGNvbXBsZXRlZCBjb21tYW5kIGJsb2NrIGJhY2sgaW50byBmcmVlIHBvb2wKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgYmxvY2sKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKglub3RoaW5nCisgKi8KK3ZvaWQgcG1jcmFpZF9yZXR1cm5fY21kKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5zdGFuY2UtPmZyZWVfcG9vbF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjbWQtPmZyZWVfbGlzdCwgJnBpbnN0YW5jZS0+ZnJlZV9jbWRfcG9vbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGluc3RhbmNlLT5mcmVlX3Bvb2xfbG9jaywgbG9ja19mbGFncyk7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZWFkX2ludGVycnVwdHMgLSAgcmVhZHMgSU9BIGludGVycnVwdHMKKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIHZhbHVlCisgKgkgaW50ZXJydXB0cyByZWFkIGZyb20gSU9BCisgKi8KK3N0YXRpYyB1MzIgcG1jcmFpZF9yZWFkX2ludGVycnVwdHMoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlyZXR1cm4gaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfcmVnKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2Rpc2FibGVfaW50ZXJydXB0cyAtIE1hc2tzIGFuZCBjbGVhcnMgYWxsIHNwZWNpZmllZCBpbnRlcnJ1cHRzCisgKgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBpbnRyczogaW50ZXJydXB0cyB0byBkaXNhYmxlCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkgTm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2Rpc2FibGVfaW50ZXJydXB0cygKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlLAorCXUzMiBpbnRycworKQoreworCXUzMiBnbWFzayA9IGlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuZ2xvYmFsX2ludGVycnVwdF9tYXNrX3JlZyk7CisJdTMyIG5tYXNrID0gZ21hc2sgfCBHTE9CQUxfSU5URVJSVVBUX01BU0s7CisKKwlpb3dyaXRlMzIobm1hc2ssIHBpbnN0YW5jZS0+aW50X3JlZ3MuZ2xvYmFsX2ludGVycnVwdF9tYXNrX3JlZyk7CisJaW93cml0ZTMyKGludHJzLCBwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9jbHJfcmVnKTsKKwlpb3dyaXRlMzIoaW50cnMsIHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X21hc2tfcmVnKTsKKwlpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9tYXNrX3JlZyk7Cit9CisKKy8qKgorICogcG1jcmFpZF9lbmFibGVfaW50ZXJydXB0cyAtIEVuYWJsZXMgc3BlY2lmaWVkIGludGVycnVwdHMKKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIHBlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGludHI6IGludGVycnVwdHMgdG8gZW5hYmxlCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkgTm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2VuYWJsZV9pbnRlcnJ1cHRzKAorCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UsCisJdTMyIGludHJzCispCit7CisJdTMyIGdtYXNrID0gaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5nbG9iYWxfaW50ZXJydXB0X21hc2tfcmVnKTsKKwl1MzIgbm1hc2sgPSBnbWFzayAmICh+R0xPQkFMX0lOVEVSUlVQVF9NQVNLKTsKKworCWlvd3JpdGUzMihubWFzaywgcGluc3RhbmNlLT5pbnRfcmVncy5nbG9iYWxfaW50ZXJydXB0X21hc2tfcmVnKTsKKwlpb3dyaXRlMzIofmludHJzLCBwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9tYXNrX3JlZyk7CisJaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfbWFza19yZWcpOworCisJcG1jcmFpZF9pbmZvKCJlbmFibGVkIGludGVycnVwdHMgZ2xvYmFsIG1hc2sgPSAleCBpbnRyX21hc2sgPSAleFxuIiwKKwkJaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5nbG9iYWxfaW50ZXJydXB0X21hc2tfcmVnKSwKKwkJaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfbWFza19yZWcpKTsKK30KKworLyoqCisgKiBwbWNyYWlkX3Jlc2V0X3R5cGUgLSBEZXRlcm1pbmUgdGhlIHJlcXVpcmVkIHJlc2V0IHR5cGUKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBJT0EgcmVxdWlyZXMgaGFyZCByZXNldCBpZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWUuCisgKiAxLiBJZiBIUlJRIHZhbGlkIGludGVycnVwdCBpcyBub3QgbWFza2VkCisgKiAyLiBJT0EgcmVzZXQgYWxlcnQgZG9vcmJlbGwgaXMgc2V0CisgKiAzLiBJZiB0aGVyZSBhcmUgYW55IGVycm9yIGludGVycnVwdHMKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9yZXNldF90eXBlKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJdTMyIG1hc2s7CisJdTMyIGludHJzOworCXUzMiBhbGVydHM7CisKKwltYXNrID0gaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfbWFza19yZWcpOworCWludHJzID0gaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfcmVnKTsKKwlhbGVydHMgPSBpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmhvc3RfaW9hX2ludGVycnVwdF9yZWcpOworCisJaWYgKChtYXNrICYgSU5UUlNfSFJSUV9WQUxJRCkgPT0gMCB8fAorCSAgICAoYWxlcnRzICYgRE9PUkJFTExfSU9BX1JFU0VUX0FMRVJUKSB8fAorCSAgICAoaW50cnMgJiBQTUNSQUlEX0VSUk9SX0lOVEVSUlVQVFMpKSB7CisJCXBtY3JhaWRfaW5mbygiSU9BIHJlcXVpcmVzIGhhcmQgcmVzZXRcbiIpOworCQlwaW5zdGFuY2UtPmlvYV9oYXJkX3Jlc2V0ID0gMTsKKwl9CisKKwkvKiBJZiB1bml0IGNoZWNrIGlzIGFjdGl2ZSwgdHJpZ2dlciB0aGUgZHVtcCAqLworCWlmIChpbnRycyAmIElOVFJTX0lPQV9VTklUX0NIRUNLKQorCQlwaW5zdGFuY2UtPmlvYV91bml0X2NoZWNrID0gMTsKK30KKworLyoqCisgKiBwbWNyYWlkX2Jpc3RfZG9uZSAtIGNvbXBsZXRpb24gZnVuY3Rpb24gZm9yIFBDSSBCSVNUCisgKiBAY21kOiBwb2ludGVyIHRvIHJlc2V0IGNvbW1hbmQKKyAqIFJldHVybiBWYWx1ZQorICogCW5vbmUKKyAqLworCitzdGF0aWMgdm9pZCBwbWNyYWlkX2lvYV9yZXNldChzdHJ1Y3QgcG1jcmFpZF9jbWQgKik7CisKK3N0YXRpYyB2b2lkIHBtY3JhaWRfYmlzdF9kb25lKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlpbnQgcmM7CisJdTE2IHBjaV9yZWc7CisKKwlyYyA9IHBjaV9yZWFkX2NvbmZpZ193b3JkKHBpbnN0YW5jZS0+cGRldiwgUENJX0NPTU1BTkQsICZwY2lfcmVnKTsKKworCS8qIElmIFBDSSBjb25maWcgc3BhY2UgY2FuJ3QgYmUgYWNjZXNzZWQgd2FpdCBmb3IgYW5vdGhlciB0d28gc2VjcyAqLworCWlmICgocmMgIT0gUENJQklPU19TVUNDRVNTRlVMIHx8ICghKHBjaV9yZWcgJiBQQ0lfQ09NTUFORF9NRU1PUlkpKSkgJiYKKwkgICAgY21kLT51LnRpbWVfbGVmdCA+IDApIHsKKwkJcG1jcmFpZF9pbmZvKCJCSVNUIG5vdCBjb21wbGV0ZSwgd2FpdGluZyBhbm90aGVyIDIgc2Vjc1xuIik7CisJCWNtZC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBjbWQtPnUudGltZV9sZWZ0OworCQljbWQtPnUudGltZV9sZWZ0ID0gMDsKKwkJY21kLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpY21kOworCQljbWQtPnRpbWVyLmZ1bmN0aW9uID0KKwkJCSh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSlwbWNyYWlkX2Jpc3RfZG9uZTsKKwkJYWRkX3RpbWVyKCZjbWQtPnRpbWVyKTsKKwl9IGVsc2UgeworCQljbWQtPnUudGltZV9sZWZ0ID0gMDsKKwkJcG1jcmFpZF9pbmZvKCJCSVNUIGlzIGNvbXBsZXRlLCBwcm9jZWVkaW5nIHdpdGggcmVzZXRcbiIpOworCQlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJCXBtY3JhaWRfaW9hX3Jlc2V0KGNtZCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCX0KK30KKworLyoqCisgKiBwbWNyYWlkX3N0YXJ0X2Jpc3QgLSBzdGFydHMgQklTVAorICogQGNtZDogcG9pbnRlciB0byByZXNldCBjbWQKKyAqIFJldHVybiBWYWx1ZQorICogICBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfc3RhcnRfYmlzdChzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwl1MzIgZG9vcmJlbGxzLCBpbnRyczsKKworCS8qIHByb2NlZWQgd2l0aCBiaXN0IGFuZCB3YWl0IGZvciAyIHNlY29uZHMgKi8KKwlpb3dyaXRlMzIoRE9PUkJFTExfSU9BX1NUQVJUX0JJU1QsCisJCXBpbnN0YW5jZS0+aW50X3JlZ3MuaG9zdF9pb2FfaW50ZXJydXB0X3JlZyk7CisJZG9vcmJlbGxzID0gaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5ob3N0X2lvYV9pbnRlcnJ1cHRfcmVnKTsKKwlpbnRycyA9IGlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X3JlZyk7CisJcG1jcmFpZF9pbmZvKCJkb29yYmVsbHMgYWZ0ZXIgc3RhcnQgYmlzdDogJXggaW50cnM6ICV4IFxuIiwKKwkJICAgICAgZG9vcmJlbGxzLCBpbnRycyk7CisKKwljbWQtPnUudGltZV9sZWZ0ID0gbXNlY3NfdG9famlmZmllcyhQTUNSQUlEX0JJU1RfVElNRU9VVCk7CisJY21kLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpY21kOworCWNtZC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFBNQ1JBSURfQklTVF9USU1FT1VUKTsKKwljbWQtPnRpbWVyLmZ1bmN0aW9uID0gKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKXBtY3JhaWRfYmlzdF9kb25lOworCWFkZF90aW1lcigmY21kLT50aW1lcik7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZXNldF9hbGVydF9kb25lIC0gY29tcGxldGlvbiByb3V0aW5lIGZvciByZXNldF9hbGVydAorICogQGNtZDogcG9pbnRlciB0byBjb21tYW5kIGJsb2NrIHVzZWQgaW4gcmVzZXQgc2VxdWVuY2UKKyAqIFJldHVybiB2YWx1ZQorICogIE5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9yZXNldF9hbGVydF9kb25lKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OworCXUzMiBzdGF0dXMgPSBpb3JlYWQzMihwaW5zdGFuY2UtPmlvYV9zdGF0dXMpOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKworCS8qIGlmIHRoZSBjcml0aWNhbCBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MgYml0IGlzIHNldCBvciB0aGUgd2FpdCB0aW1lcworCSAqIG91dCwgaW52b2tlIHJlc2V0IGVuZ2luZSB0byBwcm9jZWVkIHdpdGggaGFyZCByZXNldC4gSWYgdGhlcmUgaXMKKwkgKiBzb21lIG1vcmUgdGltZSB0byB3YWl0LCByZXN0YXJ0IHRoZSB0aW1lcgorCSAqLworCWlmICgoKHN0YXR1cyAmIElOVFJTX0NSSVRJQ0FMX09QX0lOX1BST0dSRVNTKSA9PSAwKSB8fAorCSAgICBjbWQtPnUudGltZV9sZWZ0IDw9IDApIHsKKwkJcG1jcmFpZF9pbmZvKCJjcml0aWNhbCBvcCBpcyByZXNldCBwcm9jZWVkaW5nIHdpdGggcmVzZXRcbiIpOworCQlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJCXBtY3JhaWRfaW9hX3Jlc2V0KGNtZCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCX0gZWxzZSB7CisJCXBtY3JhaWRfaW5mbygiY3JpdGljYWwgb3AgaXMgbm90IHlldCByZXNldCB3YWl0aW5nIGFnYWluXG4iKTsKKwkJLyogcmVzdGFydCB0aW1lciBpZiBzb21lIG1vcmUgdGltZSBpcyBhdmFpbGFibGUgdG8gd2FpdCAqLworCQljbWQtPnUudGltZV9sZWZ0IC09IFBNQ1JBSURfQ0hFQ0tfRk9SX1JFU0VUX1RJTUVPVVQ7CisJCWNtZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNtZDsKKwkJY21kLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIFBNQ1JBSURfQ0hFQ0tfRk9SX1JFU0VUX1RJTUVPVVQ7CisJCWNtZC0+dGltZXIuZnVuY3Rpb24gPQorCQkJKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKXBtY3JhaWRfcmVzZXRfYWxlcnRfZG9uZTsKKwkJYWRkX3RpbWVyKCZjbWQtPnRpbWVyKTsKKwl9Cit9CisKKy8qKgorICogcG1jcmFpZF9yZXNldF9hbGVydCAtIGFsZXJ0cyBJT0EgZm9yIGEgcG9zc2libGUgcmVzZXQKKyAqIEBjbWQgOiBjb21tYW5kIGJsb2NrIHRvIGJlIHVzZWQgZm9yIHJlc2V0IHNlcXVlbmNlLgorICoKKyAqIFJldHVybiBWYWx1ZQorICoJcmV0dXJucyAwIGlmIHBjaSBjb25maWctc3BhY2UgaXMgYWNjZXNzaWJsZSBhbmQgUkVTRVRfRE9PUkJFTEwgaXMKKyAqCXN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvIElPQS4gUmV0dXJucyBub24temVybyBpbiBjYXNlIHBjaV9jb25maWdfc3BhY2UKKyAqCWlzIG5vdCBhY2Nlc3NpYmxlCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVzZXRfYWxlcnQoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CisJdTMyIGRvb3JiZWxsczsKKwlpbnQgcmM7CisJdTE2IHBjaV9yZWc7CisKKwkvKiBJZiB3ZSBhcmUgYWJsZSB0byBhY2Nlc3MgSU9BIFBDSSBjb25maWcgc3BhY2UsIGFsZXJ0IElPQSB0aGF0IHdlIGFyZQorCSAqIGdvaW5nIHRvIHJlc2V0IGl0IHNvb24uIFRoaXMgZW5hYmxlcyBJT0EgdG8gcHJlc2VydiBwZXJzaXN0ZW50IGVycm9yCisJICogZGF0YSBpZiBhbnkuIEluIGNhc2UgbWVtb3J5IHNwYWNlIGlzIG5vdCBhY2Nlc3NpYmxlLCBwcm9jZWVkIHdpdGgKKwkgKiBCSVNUIG9yIHNsb3RfcmVzZXQKKwkgKi8KKwlyYyA9IHBjaV9yZWFkX2NvbmZpZ193b3JkKHBpbnN0YW5jZS0+cGRldiwgUENJX0NPTU1BTkQsICZwY2lfcmVnKTsKKwlpZiAoKHJjID09IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgJiYgKHBjaV9yZWcgJiBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7CisKKwkJLyogd2FpdCBmb3IgSU9BIHBlcm1pc3Npb24gaS5lIHVudGlsIENSSVRJQ0FMX09QRVJBVElPTiBiaXQgaXMKKwkJICogcmVzZXQgSU9BIGRvZXNuJ3QgZ2VuZXJhdGUgYW55IGludGVycnVwdHMgd2hlbiBDUklUSUNBTAorCQkgKiBPUEVSQVRJT04gYml0IGlzIHJlc2V0LiBBIHRpbWVyIGlzIHN0YXJ0ZWQgdG8gd2FpdCBmb3IgdGhpcworCQkgKiBiaXQgdG8gYmUgcmVzZXQuCisJCSAqLworCQljbWQtPnUudGltZV9sZWZ0ID0gUE1DUkFJRF9SRVNFVF9USU1FT1VUOworCQljbWQtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyljbWQ7CisJCWNtZC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBQTUNSQUlEX0NIRUNLX0ZPUl9SRVNFVF9USU1FT1VUOworCQljbWQtPnRpbWVyLmZ1bmN0aW9uID0KKwkJCSh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSlwbWNyYWlkX3Jlc2V0X2FsZXJ0X2RvbmU7CisJCWFkZF90aW1lcigmY21kLT50aW1lcik7CisKKwkJaW93cml0ZTMyKERPT1JCRUxMX0lPQV9SRVNFVF9BTEVSVCwKKwkJCXBpbnN0YW5jZS0+aW50X3JlZ3MuaG9zdF9pb2FfaW50ZXJydXB0X3JlZyk7CisJCWRvb3JiZWxscyA9CisJCQlpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmhvc3RfaW9hX2ludGVycnVwdF9yZWcpOworCQlwbWNyYWlkX2luZm8oImRvb3JiZWxscyBhZnRlciByZXNldCBhbGVydDogJXhcbiIsIGRvb3JiZWxscyk7CisJfSBlbHNlIHsKKwkJcG1jcmFpZF9pbmZvKCJQQ0kgY29uZmlnIGlzIG5vdCBhY2Nlc3NpYmxlIHN0YXJ0aW5nIEJJU1RcbiIpOworCQlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9JTl9IQVJEX1JFU0VUOworCQlwbWNyYWlkX3N0YXJ0X2Jpc3QoY21kKTsKKwl9Cit9CisKKy8qKgorICogcG1jcmFpZF90aW1lb3V0X2hhbmRsZXIgLSAgVGltZW91dCBoYW5kbGVyIGZvciBpbnRlcm5hbGx5IGdlbmVyYXRlZCBvcHMKKyAqCisgKiBAY21kIDogcG9pbnRlciB0byBjb21tYW5kIHN0cnVjdHVyZSwgdGhhdCBnb3QgdGltZWRvdXQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGJsb2NrcyBob3N0IHJlcXVlc3RzIGFuZCBpbml0aWF0ZXMgYW4gYWRhcHRlciByZXNldC4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgIE5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF90aW1lb3V0X2hhbmRsZXIoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCisJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCisJCSJBZGFwdGVyIGJlaW5nIHJlc2V0IGR1ZSB0byBjb21tYW5kIHRpbWVvdXQuXG4iKTsKKworCS8qIENvbW1hbmQgdGltZW91dHMgcmVzdWx0IGluIGhhcmQgcmVzZXQgc2VxdWVuY2UuIFRoZSBjb21tYW5kIHRoYXQgZ290CisJICogdGltZWQgb3V0IG1heSBiZSB0aGUgb25lIHVzZWQgYXMgcGFydCBvZiByZXNldCBzZXF1ZW5jZS4gSW4gdGhpcworCSAqIGNhc2UgcmVzdGFydCByZXNldCBzZXF1ZW5jZSB1c2luZyB0aGUgc2FtZSBjb21tYW5kIGJsb2NrIGV2ZW4gaWYKKwkgKiByZXNldCBpcyBpbiBwcm9ncmVzcy4gT3RoZXJ3aXNlIGZhaWwgdGhpcyBjb21tYW5kIGFuZCBnZXQgYSBmcmVlCisJICogY29tbWFuZCBibG9jayB0byByZXN0YXJ0IHRoZSByZXNldCBzZXF1ZW5jZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJaWYgKCFwaW5zdGFuY2UtPmlvYV9yZXNldF9pbl9wcm9ncmVzcykgeworCQlwaW5zdGFuY2UtPmlvYV9yZXNldF9hdHRlbXB0cyA9IDA7CisJCWNtZCA9IHBtY3JhaWRfZ2V0X2ZyZWVfY21kKHBpbnN0YW5jZSk7CisKKwkJLyogSWYgd2UgYXJlIG91dCBvZiBjb21tYW5kIGJsb2NrcywganVzdCByZXR1cm4gaGVyZSBpdHNlbGYuCisJCSAqIFNvbWUgb3RoZXIgY29tbWFuZCdzIHRpbWVvdXQgaGFuZGxlciBjYW4gZG8gdGhlIHJlc2V0IGpvYgorCQkgKi8KKwkJaWYgKGNtZCA9PSBOVUxMKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAorCQkJCQkgICAgICAgbG9ja19mbGFncyk7CisJCQlwbWNyYWlkX2Vycigibm8gZnJlZSBjbW5kIGJsb2NrIGZvciB0aW1lb3V0IGhhbmRsZXJcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJcGluc3RhbmNlLT5yZXNldF9jbWQgPSBjbWQ7CisJCXBpbnN0YW5jZS0+aW9hX3Jlc2V0X2luX3Byb2dyZXNzID0gMTsKKwl9IGVsc2UgeworCQlwbWNyYWlkX2luZm8oInJlc2V0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcbiIpOworCisJCWlmIChwaW5zdGFuY2UtPnJlc2V0X2NtZCAhPSBjbWQpIHsKKwkJCS8qIFRoaXMgY29tbWFuZCBzaG91bGQgaGF2ZSBiZWVuIGdpdmVuIHRvIElPQSwgdGhpcworCQkJICogY29tbWFuZCB3aWxsIGJlIGNvbXBsZXRlZCBieSBmYWlsX291dHN0YW5kaW5nX2NtZHMKKwkJCSAqIGFueXdheQorCQkJICovCisJCQlwbWNyYWlkX2VycigiY21kIGlzIHBlbmRpbmcgYnV0IHJlc2V0IGluIHByb2dyZXNzXG4iKTsKKwkJfQorCisJCS8qIElmIHRoaXMgY29tbWFuZCB3YXMgYmVpbmcgdXNlZCBhcyBwYXJ0IG9mIHRoZSByZXNldAorCQkgKiBzZXF1ZW5jZSwgc2V0IGNtZF9kb25lIHBvaW50ZXIgdG8gcG1jcmFpZF9pb2FfcmVzZXQuIFRoaXMKKwkJICogY2F1c2VzIGZhaWxfb3V0c3RhbmRpbmdfY29tbWFuZHMgbm90IHRvIHJldHVybiB0aGUgY29tbWFuZAorCQkgKiBibG9jayBiYWNrIHRvIGZyZWUgcG9vbAorCQkgKi8KKwkJaWYgKGNtZCA9PSBwaW5zdGFuY2UtPnJlc2V0X2NtZCkKKwkJCWNtZC0+Y21kX2RvbmUgPSBwbWNyYWlkX2lvYV9yZXNldDsKKworCX0KKworCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX0lOX1JFU0VUX0FMRVJUOworCXNjc2lfYmxvY2tfcmVxdWVzdHMocGluc3RhbmNlLT5ob3N0KTsKKwlwbWNyYWlkX3Jlc2V0X2FsZXJ0KGNtZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7Cit9CisKKy8qKgorICogcG1jcmFpZF9pbnRlcm5hbF9kb25lIC0gY29tcGxldGlvbiByb3V0aW5lIGZvciBpbnRlcm5hbGx5IGdlbmVyYXRlZCBjbWRzCisgKgorICogQGNtZDogY29tbWFuZCB0aGF0IGdvdCByZXNwb25zZSBmcm9tIElPQQorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqCSBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfaW50ZXJuYWxfZG9uZShzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlwbWNyYWlkX2luZm8oInJlc3BvbnNlIGludGVybmFsIGNtZCBDREJbMF0gPSAleCBpb2FzYyA9ICV4XG4iLAorCQkgICAgIGNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLAorCQkgICAgIGxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FzYS5pb2FzYykpOworCisJLyogU29tZSBvZiB0aGUgaW50ZXJuYWwgY29tbWFuZHMgYXJlIHNlbnQgd2l0aCBjYWxsZXJzIGJsb2NraW5nIGZvciB0aGUKKwkgKiByZXNwb25zZS4gU2FtZSB3aWxsIGJlIGluZGljYXRlZCBhcyBwYXJ0IG9mIGNtZC0+Y29tcGxldGlvbl9yZXEKKwkgKiBmaWVsZC4gUmVzcG9uc2UgcGF0aCBuZWVkcyB0byB3YWtlIHVwIGFueSB3YWl0ZXJzIHdhaXRpbmcgZm9yIGNtZAorCSAqIGNvbXBsZXRpb24gaWYgdGhpcyBmbGFnIGlzIHNldC4KKwkgKi8KKwlpZiAoY21kLT5jb21wbGV0aW9uX3JlcSkgeworCQljbWQtPmNvbXBsZXRpb25fcmVxID0gMDsKKwkJY29tcGxldGUoJmNtZC0+d2FpdF9mb3JfY29tcGxldGlvbik7CisJfQorCisJLyogbW9zdCBvZiB0aGUgaW50ZXJuYWwgY29tbWFuZHMgYXJlIGNvbXBsZXRlZCBieSBjYWxsZXIgaXRzZWxmLCBzbworCSAqIG5vIG5lZWQgdG8gcmV0dXJuIHRoZSBjb21tYW5kIGJsb2NrIGJhY2sgdG8gZnJlZSBwb29sIHVudGlsIHdlIGFyZQorCSAqIHJlcXVpcmVkIHRvIGRvIHNvIChlLmcgb25jZSBkb25lIHdpdGggaW5pdGlhbGl6YXRpb24pLgorCSAqLworCWlmIChjbWQtPnJlbGVhc2UpIHsKKwkJY21kLT5yZWxlYXNlID0gMDsKKwkJcG1jcmFpZF9yZXR1cm5fY21kKGNtZCk7CisJfQorfQorCisvKioKKyAqIHBtY3JhaWRfcmVpbml0X2NmZ3RhYmxlX2RvbmUgLSBkb25lIGZ1bmN0aW9uIGZvciBjZmcgdGFibGUgcmVpbml0aWFsaXphdGlvbgorICoKKyAqIEBjbWQ6IGNvbW1hbmQgdGhhdCBnb3QgcmVzcG9uc2UgZnJvbSBJT0EKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGFmdGVyIGRyaXZlciByZS1yZWFkcyBjb25maWd1cmF0aW9uIHRhYmxlIGR1ZSB0byBhCisgKiBsb3N0IENDTi4gSXQgcmV0dXJucyB0aGUgY29tbWFuZCBibG9jayBiYWNrIHRvIGZyZWUgcG9vbCBhbmQgc2NoZWR1bGVzCisgKiB3b3JrZXIgdGhyZWFkIHRvIGFkZC9kZWxldGUgZGV2aWNlcyBpbnRvIHRoZSBzeXN0ZW0uCisgKgorICogUmV0dXJuIFZhbHVlOgorICoJIG5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9yZWluaXRfY2ZndGFibGVfZG9uZShzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlwbWNyYWlkX2luZm8oInJlc3BvbnNlIGludGVybmFsIGNtZCBDREJbMF0gPSAleCBpb2FzYyA9ICV4XG4iLAorCQkgICAgIGNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLAorCQkgICAgIGxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FzYS5pb2FzYykpOworCisJaWYgKGNtZC0+cmVsZWFzZSkgeworCQljbWQtPnJlbGVhc2UgPSAwOworCQlwbWNyYWlkX3JldHVybl9jbWQoY21kKTsKKwl9CisJcG1jcmFpZF9pbmZvKCJzY2hlZHVsaW5nIHdvcmtlciBmb3IgY29uZmlnIHRhYmxlIHJlaW5pdGlhbGl6YXRpb25cbiIpOworCXNjaGVkdWxlX3dvcmsoJmNtZC0+ZHJ2X2luc3QtPndvcmtlcl9xKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2VycF9kb25lIC0gUHJvY2VzcyBjb21wbGV0aW9uIG9mIFNDU0kgZXJyb3IgcmVzcG9uc2UgZnJvbSBkZXZpY2UKKyAqIEBjbWQ6IHBtY3JhaWRfY29tbWFuZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBzZW5zZSBidWZmZXIgaW50byB0aGUgc2NzaV9jbWQgc3RydWN0IGFuZCBjb21wbGV0ZXMKKyAqIHNjc2lfY21kIGJ5IGNhbGxpbmcgc2NzaV9kb25lIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqICBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfZXJwX2RvbmUoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbWQgPSBjbWQtPnNjc2lfY21kOworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OworCXUzMiBpb2FzYyA9IGxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FzYS5pb2FzYyk7CisKKwlpZiAoUE1DUkFJRF9JT0FTQ19TRU5TRV9LRVkoaW9hc2MpID4gMCkgeworCQlzY3NpX2NtZC0+cmVzdWx0IHw9IChESURfRVJST1IgPDwgMTYpOworCQlwbWNyYWlkX2VycigiY29tbWFuZCBDREJbMF0gPSAleCBmYWlsZWQgd2l0aCBJT0FTQzogMHglMDhYXG4iLAorCQkJICAgICBjbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSwgaW9hc2MpOworCX0KKworCS8qIGlmIHdlIGhhZCBhbGxvY2F0ZWQgc2Vuc2UgYnVmZmVycyBmb3IgcmVxdWVzdCBzZW5zZSwgY29weSB0aGUgc2Vuc2UKKwkgKiByZWxlYXNlIHRoZSBidWZmZXJzCisJICovCisJaWYgKGNtZC0+c2Vuc2VfYnVmZmVyICE9IE5VTEwpIHsKKwkJbWVtY3B5KHNjc2lfY21kLT5zZW5zZV9idWZmZXIsCisJCSAgICAgICBjbWQtPnNlbnNlX2J1ZmZlciwKKwkJICAgICAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGluc3RhbmNlLT5wZGV2LAorCQkJCSAgICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsCisJCQkJICAgIGNtZC0+c2Vuc2VfYnVmZmVyLCBjbWQtPnNlbnNlX2J1ZmZlcl9kbWEpOworCQljbWQtPnNlbnNlX2J1ZmZlciA9IE5VTEw7CisJCWNtZC0+c2Vuc2VfYnVmZmVyX2RtYSA9IDA7CisJfQorCisJc2NzaV9kbWFfdW5tYXAoc2NzaV9jbWQpOworCXBtY3JhaWRfcmV0dXJuX2NtZChjbWQpOworCXNjc2lfY21kLT5zY3NpX2RvbmUoc2NzaV9jbWQpOworfQorCisvKioKKyAqIHBtY3JhaWRfZmlyZV9jb21tYW5kIC0gc2VuZHMgYW4gSU9BIGNvbW1hbmQgdG8gYWRhcHRlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgZ2l2ZW4gYmxvY2sgaW50byBwZW5kaW5nIGNvbW1hbmQgbGlzdAorICogYW5kIHJldHVybnMgd2l0aG91dCB3YWl0aW5nCisgKgorICogQGNtZCA6IGNvbW1hbmQgdG8gYmUgc2VudCB0byB0aGUgZGV2aWNlCisgKgorICogUmV0dXJuIFZhbHVlCisgKglOb25lCisgKi8KK3N0YXRpYyB2b2lkIF9wbWNyYWlkX2ZpcmVfY29tbWFuZChzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwkvKiBBZGQgdGhpcyBjb21tYW5kIGJsb2NrIHRvIHBlbmRpbmcgY21kIHBvb2wuIFdlIGRvIHRoaXMgcHJpb3IgdG8KKwkgKiB3cml0dGluZyBJT0FSQ0IgdG8gaW9hcnJpbiBiZWNhdXNlIElPQSBtaWdodCBjb21wbGV0ZSB0aGUgY29tbWFuZAorCSAqIGJ5IHRoZSB0aW1lIHdlIGFyZSBhYm91dCB0byBhZGQgaXQgdG8gdGhlIGxpc3QuIFJlc3BvbnNlIGhhbmRsZXIKKwkgKiAoaXNyL3Rhc2tsZXQpIGxvb2tzIGZvciBjbWIgYmxvY2sgaW4gdGhlIHBlbmRpbmcgcGVuZGluZyBsaXN0LgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5zdGFuY2UtPnBlbmRpbmdfcG9vbF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjbWQtPmZyZWVfbGlzdCwgJnBpbnN0YW5jZS0+cGVuZGluZ19jbWRfcG9vbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGluc3RhbmNlLT5wZW5kaW5nX3Bvb2xfbG9jaywgbG9ja19mbGFncyk7CisJYXRvbWljX2luYygmcGluc3RhbmNlLT5vdXRzdGFuZGluZ19jbWRzKTsKKworCS8qIGRyaXZlciB3cml0ZXMgbG93ZXIgMzItYml0IHZhbHVlIG9mIElPQVJDQiBhZGRyZXNzIG9ubHkgKi8KKwltYigpOworCWlvd3JpdGUzMihsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hcmNiLmlvYXJjYl9idXNfYWRkciksCisJCSAgcGluc3RhbmNlLT5pb2FycmluKTsKK30KKworLyoqCisgKiBwbWNyYWlkX3NlbmRfY21kIC0gZmlyZXMgYSBjb21tYW5kIHRvIElPQQorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxzbyBzZXRzIHVwIHRpbWVvdXQgZnVuY3Rpb24sIGFuZCBjb21tYW5kIGNvbXBsZXRpb24KKyAqIGZ1bmN0aW9uCisgKgorICogQGNtZDogcG9pbnRlciB0byB0aGUgY29tbWFuZCBibG9jayB0byBiZSBmaXJlZCB0byBJT0EKKyAqIEBjbWRfZG9uZTogY29tbWFuZCBjb21wbGV0aW9uIGZ1bmN0aW9uLCBjYWxsZWQgb25jZSBJT0EgcmVzcG9uZHMKKyAqIEB0aW1lb3V0OiB0aW1lb3V0IHRvIHdhaXQgZm9yIHRoaXMgY29tbWFuZCBjb21wbGV0aW9uCisgKiBAdGltZW91dF9mdW5jOiB0aW1lb3V0IGhhbmRsZXIKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqICAgbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3NlbmRfY21kKAorCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kLAorCXZvaWQgKCpjbWRfZG9uZSkgKHN0cnVjdCBwbWNyYWlkX2NtZCAqKSwKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQsCisJdm9pZCAoKnRpbWVvdXRfZnVuYykgKHN0cnVjdCBwbWNyYWlkX2NtZCAqKQorKQoreworCS8qIGluaXRpYWxpemUgZG9uZSBmdW5jdGlvbiAqLworCWNtZC0+Y21kX2RvbmUgPSBjbWRfZG9uZTsKKworCWlmICh0aW1lb3V0X2Z1bmMpIHsKKwkJLyogc2V0dXAgdGltZW91dCBoYW5kbGVyICovCisJCWNtZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNtZDsKKwkJY21kLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIHRpbWVvdXQ7CisJCWNtZC0+dGltZXIuZnVuY3Rpb24gPSAodm9pZCAoKikodW5zaWduZWQgbG9uZykpdGltZW91dF9mdW5jOworCQlhZGRfdGltZXIoJmNtZC0+dGltZXIpOworCX0KKworCS8qIGZpcmUgdGhlIGNvbW1hbmQgdG8gSU9BICovCisJX3BtY3JhaWRfZmlyZV9jb21tYW5kKGNtZCk7Cit9CisKKy8qKgorICogcG1jcmFpZF9pb2Ffc2h1dGRvd24gLSBzZW5kcyBTSFVURE9XTiBjb21tYW5kIHRvIGlvYQorICoKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgYmxvY2sgdXNlZCBhcyBwYXJ0IG9mIHJlc2V0IHNlcXVlbmNlCisgKgorICogUmV0dXJuIFZhbHVlCisgKiAgTm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2lvYV9zaHV0ZG93bihzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlwbWNyYWlkX2luZm8oInJlc3BvbnNlIGZvciBDYW5jZWwgQ0NOIENEQlswXSA9ICV4IGlvYXNjID0gJXhcbiIsCisJCSAgICAgY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sCisJCSAgICAgbGUzMl90b19jcHUoY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjKSk7CisKKwkvKiBOb3RlIHRoYXQgY29tbWFuZHMgc2VudCBkdXJpbmcgcmVzZXQgcmVxdWlyZSBuZXh0IGNvbW1hbmQgdG8gYmUgc2VudAorCSAqIHRvIElPQS4gSGVuY2UgcmVpbml0IHRoZSBkb25lIGZ1bmN0aW9uIGFzIHdlbGwgYXMgdGltZW91dCBmdW5jdGlvbgorCSAqLworCXBtY3JhaWRfcmVpbml0X2NtZGJsayhjbWQpOworCWNtZC0+aW9hX2NiLT5pb2FyY2IucmVxdWVzdF90eXBlID0gUkVRX1RZUEVfSU9BQ01EOworCWNtZC0+aW9hX2NiLT5pb2FyY2IucmVzb3VyY2VfaGFuZGxlID0KKwkJY3B1X3RvX2xlMzIoUE1DUkFJRF9JT0FfUkVTX0hBTkRMRSk7CisJY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0gPSBQTUNSQUlEX0lPQV9TSFVURE9XTjsKKwljbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlsxXSA9IFBNQ1JBSURfU0hVVERPV05fTk9STUFMOworCisJLyogZmlyZSBzaHV0ZG93biBjb21tYW5kIHRvIGhhcmR3YXJlLiAqLworCXBtY3JhaWRfaW5mbygiZmlyaW5nIG5vcm1hbCBzaHV0ZG93biBjb21tYW5kICglZCkgdG8gSU9BXG4iLAorCQkgICAgIGxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FyY2IucmVzcG9uc2VfaGFuZGxlKSk7CisKKwlwbWNyYWlkX3NlbmRfY21kKGNtZCwgcG1jcmFpZF9pb2FfcmVzZXQsCisJCQkgUE1DUkFJRF9TSFVURE9XTl9USU1FT1VULAorCQkJIHBtY3JhaWRfdGltZW91dF9oYW5kbGVyKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2lkZW50aWZ5X2hycnEgLSByZWdpc3RlcnMgaG9zdCBycnEgYnVmZmVycyB3aXRoIElPQQorICogQGNtZDogcG9pbnRlciB0byBjb21tYW5kIGJsb2NrIHRvIGJlIHVzZWQgZm9yIGlkZW50aWZ5IGhycnEKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCSAwIGluIGNhc2Ugb2Ygc3VjY2Vzcywgb3RoZXJ3aXNlIG5vbi16ZXJvIGZhaWx1cmUgY29kZQorICovCisKK3N0YXRpYyB2b2lkIHBtY3JhaWRfcXVlcnljZmcoc3RydWN0IHBtY3JhaWRfY21kICopOworCitzdGF0aWMgdm9pZCBwbWNyYWlkX2lkZW50aWZ5X2hycnEoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CisJc3RydWN0IHBtY3JhaWRfaW9hcmNiICppb2FyY2IgPSAmY21kLT5pb2FfY2ItPmlvYXJjYjsKKwlpbnQgaW5kZXggPSAwOworCV9fYmU2NCBocnJxX2FkZHIgPSBjcHVfdG9fYmU2NChwaW5zdGFuY2UtPmhycnFfc3RhcnRfYnVzX2FkZHJbaW5kZXhdKTsKKwl1MzIgaHJycV9zaXplID0gY3B1X3RvX2JlMzIoc2l6ZW9mKHUzMikgKiBQTUNSQUlEX01BWF9DTUQpOworCisJcG1jcmFpZF9yZWluaXRfY21kYmxrKGNtZCk7CisKKwkvKiBJbml0aWFsaXplIGlvYXJjYiAqLworCWlvYXJjYi0+cmVxdWVzdF90eXBlID0gUkVRX1RZUEVfSU9BQ01EOworCWlvYXJjYi0+cmVzb3VyY2VfaGFuZGxlID0gY3B1X3RvX2xlMzIoUE1DUkFJRF9JT0FfUkVTX0hBTkRMRSk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBocnJxIG51bWJlciB3aGVyZSBJT0Egd2lsbCByZXNwb25kIHRvIHRoaXMgY29tbWFuZCAqLworCWlvYXJjYi0+aHJycV9pZCA9IGluZGV4OworCWlvYXJjYi0+Y2RiWzBdID0gUE1DUkFJRF9JREVOVElGWV9IUlJROworCWlvYXJjYi0+Y2RiWzFdID0gaW5kZXg7CisKKwkvKiBJT0EgZXhwZWN0cyA2NC1iaXQgcGNpIGFkZHJlc3MgdG8gYmUgd3JpdHRlbiBpbiBCLkUgZm9ybWF0CisJICogKGkuZSBjZGJbMl09TVNCeXRlLi5jZGJbOV09TFNCLgorCSAqLworCXBtY3JhaWRfaW5mbygiSFJSUV9JREVOVElGWSB3aXRoIGhycnE6aW9hcmNiID0+ICVsbHg6JWxseFxuIiwKKwkJICAgICBocnJxX2FkZHIsIGlvYXJjYi0+aW9hcmNiX2J1c19hZGRyKTsKKworCW1lbWNweSgmKGlvYXJjYi0+Y2RiWzJdKSwgJmhycnFfYWRkciwgc2l6ZW9mKGhycnFfYWRkcikpOworCW1lbWNweSgmKGlvYXJjYi0+Y2RiWzEwXSksICZocnJxX3NpemUsIHNpemVvZihocnJxX3NpemUpKTsKKworCS8qIFN1YnNlcXVlbnQgY29tbWFuZHMgcmVxdWlyZSBIUlJRIGlkZW50aWZpY2F0aW9uIHRvIGJlIHN1Y2Nlc3NmdWwuCisJICogTm90ZSB0aGF0IHRoaXMgZ2V0cyBjYWxsZWQgZXZlbiBkdXJpbmcgcmVzZXQgZnJvbSBTQ1NJIG1pZC1sYXllcgorCSAqIG9yIHRhc2tsZXQKKwkgKi8KKwlwbWNyYWlkX3NlbmRfY21kKGNtZCwgcG1jcmFpZF9xdWVyeWNmZywKKwkJCSBQTUNSQUlEX0lOVEVSTkFMX1RJTUVPVVQsCisJCQkgcG1jcmFpZF90aW1lb3V0X2hhbmRsZXIpOworfQorCitzdGF0aWMgdm9pZCBwbWNyYWlkX3Byb2Nlc3NfY2NuKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKTsKK3N0YXRpYyB2b2lkIHBtY3JhaWRfcHJvY2Vzc19sZG4oc3RydWN0IHBtY3JhaWRfY21kICpjbWQpOworCisvKioKKyAqIHBtY3JhaWRfc2VuZF9oY2FtX2NtZCAtIHNlbmQgYW4gaW5pdGlhbGl6ZWQgY29tbWFuZCBibG9jayhIQ0FNKSB0byBJT0EKKyAqCisgKiBAY21kOiBpbml0aWFsaXplZCBjb21tYW5kIGJsb2NrIHBvaW50ZXIKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqICAgbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3NlbmRfaGNhbV9jbWQoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJaWYgKGNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzFdID09IFBNQ1JBSURfSENBTV9DT0RFX0NPTkZJR19DSEFOR0UpCisJCWF0b21pY19zZXQoJihjbWQtPmRydl9pbnN0LT5jY24uaWdub3JlKSwgMCk7CisJZWxzZQorCQlhdG9taWNfc2V0KCYoY21kLT5kcnZfaW5zdC0+bGRuLmlnbm9yZSksIDApOworCisJcG1jcmFpZF9zZW5kX2NtZChjbWQsIGNtZC0+Y21kX2RvbmUsIDAsIE5VTEwpOworfQorCisvKioKKyAqIHBtY3JhaWRfaW5pdF9oY2FtIC0gc2VuZCBhbiBpbml0aWFsaXplZCBjb21tYW5kIGJsb2NrKEhDQU0pIHRvIElPQQorICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEB0eXBlOiBIQ0FNIHR5cGUKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqICAgcG9pbnRlciB0byBpbml0aWFsaXplZCBwbWNyYWlkX2NtZCBzdHJ1Y3R1cmUgb3IgTlVMTAorICovCitzdGF0aWMgc3RydWN0IHBtY3JhaWRfY21kICpwbWNyYWlkX2luaXRfaGNhbQorKAorCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UsCisJdTggdHlwZQorKQoreworCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kOworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiAqaW9hcmNiOworCXN0cnVjdCBwbWNyYWlkX2lvYWRsX2Rlc2MgKmlvYWRsOworCXN0cnVjdCBwbWNyYWlkX2hvc3RyY2IgKmhjYW07CisJdm9pZCAoKmNtZF9kb25lKSAoc3RydWN0IHBtY3JhaWRfY21kICopOworCWRtYV9hZGRyX3QgZG1hOworCWludCByY2Jfc2l6ZTsKKworCWNtZCA9IHBtY3JhaWRfZ2V0X2ZyZWVfY21kKHBpbnN0YW5jZSk7CisKKwlpZiAoIWNtZCkgeworCQlwbWNyYWlkX2Vycigibm8gZnJlZSBjb21tYW5kIGJsb2NrcyBmb3IgaGNhbVxuIik7CisJCXJldHVybiBjbWQ7CisJfQorCisJaWYgKHR5cGUgPT0gUE1DUkFJRF9IQ0FNX0NPREVfQ09ORklHX0NIQU5HRSkgeworCQlyY2Jfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9oY2FtX2Njbik7CisJCWNtZF9kb25lID0gcG1jcmFpZF9wcm9jZXNzX2NjbjsKKwkJZG1hID0gcGluc3RhbmNlLT5jY24uYmFkZHIgKyBQTUNSQUlEX0FFTl9IRFJfU0laRTsKKwkJaGNhbSA9ICZwaW5zdGFuY2UtPmNjbjsKKwl9IGVsc2UgeworCQlyY2Jfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9oY2FtX2xkbik7CisJCWNtZF9kb25lID0gcG1jcmFpZF9wcm9jZXNzX2xkbjsKKwkJZG1hID0gcGluc3RhbmNlLT5sZG4uYmFkZHIgKyBQTUNSQUlEX0FFTl9IRFJfU0laRTsKKwkJaGNhbSA9ICZwaW5zdGFuY2UtPmxkbjsKKwl9CisKKwkvKiBpbml0aWFsaXplIGNvbW1hbmQgcG9pbnRlciB1c2VkIGZvciBIQ0FNIHJlZ2lzdHJhdGlvbiAqLworCWhjYW0tPmNtZCA9IGNtZDsKKworCWlvYXJjYiA9ICZjbWQtPmlvYV9jYi0+aW9hcmNiOworCWlvYXJjYi0+aW9hZGxfYnVzX2FkZHIgPSBjcHVfdG9fbGU2NCgoY21kLT5pb2FfY2JfYnVzX2FkZHIpICsKKwkJCQkJb2Zmc2V0b2Yoc3RydWN0IHBtY3JhaWRfaW9hcmNiLAorCQkJCQkJYWRkX2RhdGEudS5pb2FkbFswXSkpOworCWlvYXJjYi0+aW9hZGxfbGVuZ3RoID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2lvYWRsX2Rlc2MpKTsKKwlpb2FkbCA9IGlvYXJjYi0+YWRkX2RhdGEudS5pb2FkbDsKKworCS8qIEluaXRpYWxpemUgaW9hcmNiICovCisJaW9hcmNiLT5yZXF1ZXN0X3R5cGUgPSBSRVFfVFlQRV9IQ0FNOworCWlvYXJjYi0+cmVzb3VyY2VfaGFuZGxlID0gY3B1X3RvX2xlMzIoUE1DUkFJRF9JT0FfUkVTX0hBTkRMRSk7CisJaW9hcmNiLT5jZGJbMF0gPSBQTUNSQUlEX0hPU1RfQ09OVFJPTExFRF9BU1lOQzsKKwlpb2FyY2ItPmNkYlsxXSA9IHR5cGU7CisJaW9hcmNiLT5jZGJbN10gPSAocmNiX3NpemUgPj4gOCkgJiAweEZGOworCWlvYXJjYi0+Y2RiWzhdID0gKHJjYl9zaXplKSAmIDB4RkY7CisKKwlpb2FyY2ItPmRhdGFfdHJhbnNmZXJfbGVuZ3RoID0gY3B1X3RvX2xlMzIocmNiX3NpemUpOworCisJaW9hZGxbMF0uZmxhZ3MgfD0gY3B1X3RvX2xlMzIoSU9BRExfRkxBR1NfUkVBRF9MQVNUKTsKKwlpb2FkbFswXS5kYXRhX2xlbiA9IGNwdV90b19sZTMyKHJjYl9zaXplKTsKKwlpb2FkbFswXS5hZGRyZXNzID0gY3B1X3RvX2xlMzIoZG1hKTsKKworCWNtZC0+Y21kX2RvbmUgPSBjbWRfZG9uZTsKKwlyZXR1cm4gY21kOworfQorCisvKioKKyAqIHBtY3JhaWRfc2VuZF9oY2FtIC0gU2VuZCBhbiBIQ0FNIHRvIElPQQorICogQHBpbnN0YW5jZTogaW9hIGNvbmZpZyBzdHJ1Y3QKKyAqIEB0eXBlOiBIQ0FNIHR5cGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2VuZCBhIEhvc3QgQ29udHJvbGxlZCBBc3luYyBjb21tYW5kIHRvIElPQS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3NlbmRfaGNhbShzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlLCB1OCB0eXBlKQoreworCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kID0gcG1jcmFpZF9pbml0X2hjYW0ocGluc3RhbmNlLCB0eXBlKTsKKwlwbWNyYWlkX3NlbmRfaGNhbV9jbWQoY21kKTsKK30KKworCisvKioKKyAqIHBtY3JhaWRfcHJlcGFyZV9jYW5jZWxfY21kIC0gcHJlcGFyZXMgYSBjb21tYW5kIGJsb2NrIHRvIGFib3J0IGFub3RoZXIKKyAqCisgKiBAY21kOiBwb2ludGVyIHRvIGNtZCB0aGF0IGlzIHVzZWQgYXMgY2FuY2VsbGluZyBjb21tYW5kCisgKiBAY21kX3RvX2NhbmNlbDogcG9pbnRlciB0byB0aGUgY29tbWFuZCB0aGF0IG5lZWRzIHRvIGJlIGNhbmNlbGxlZAorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3ByZXBhcmVfY2FuY2VsX2NtZCgKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCwKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZF90b19jYW5jZWwKKykKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FyY2IgKmlvYXJjYiA9ICZjbWQtPmlvYV9jYi0+aW9hcmNiOworCV9fYmU2NCBpb2FyY2JfYWRkciA9IGNtZF90b19jYW5jZWwtPmlvYV9jYi0+aW9hcmNiLmlvYXJjYl9idXNfYWRkcjsKKworCS8qIEdldCB0aGUgcmVzb3VyY2UgaGFuZGxlIHRvIHdoZXJlIHRoZSBjb21tYW5kIHRvIGJlIGFib3J0ZWQgaGFzIGJlZW4KKwkgKiBzZW50LgorCSAqLworCWlvYXJjYi0+cmVzb3VyY2VfaGFuZGxlID0gY21kX3RvX2NhbmNlbC0+aW9hX2NiLT5pb2FyY2IucmVzb3VyY2VfaGFuZGxlOworCWlvYXJjYi0+cmVxdWVzdF90eXBlID0gUkVRX1RZUEVfSU9BQ01EOworCW1lbXNldChpb2FyY2ItPmNkYiwgMCwgUE1DUkFJRF9NQVhfQ0RCX0xFTik7CisJaW9hcmNiLT5jZGJbMF0gPSBQTUNSQUlEX0FCT1JUX0NNRDsKKworCS8qIElPQVJDQiBhZGRyZXNzIG9mIHRoZSBjb21tYW5kIHRvIGJlIGNhbmNlbGxlZCBpcyBnaXZlbiBpbgorCSAqIGNkYlsyXS4uY2RiWzldIGlzIEJpZy1FbmRpYW4gZm9ybWF0LiBOb3RlIHRoYXQgbGVuZ3RoIGJpdHMgaW4KKwkgKiBJT0FSQ0IgYWRkcmVzcyBhcmUgbm90IG1hc2tlZC4KKwkgKi8KKwlpb2FyY2JfYWRkciA9IGNwdV90b19iZTY0KGlvYXJjYl9hZGRyKTsKKwltZW1jcHkoJihpb2FyY2ItPmNkYlsyXSksICZpb2FyY2JfYWRkciwgc2l6ZW9mKGlvYXJjYl9hZGRyKSk7Cit9CisKKy8qKgorICogcG1jcmFpZF9jYW5jZWxfaGNhbSAtIHNlbmRzIEFCT1JUIHRhc2sgdG8gYWJvcnQgYSBnaXZlbiBIQ0FNCisgKgorICogQGNtZDogY29tbWFuZCB0byBiZSB1c2VkIGFzIGNhbmNlbGxpbmcgY29tbWFuZAorICogQHR5cGU6IEhDQU0gdHlwZQorICogQGNtZF9kb25lOiBvcCBkb25lIGZ1bmN0aW9uIGZvciB0aGUgY2FuY2VsbGluZyBjb21tYW5kCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfY2FuY2VsX2hjYW0oCisJc3RydWN0IHBtY3JhaWRfY21kICpjbWQsCisJdTggdHlwZSwKKwl2b2lkICgqY21kX2RvbmUpIChzdHJ1Y3QgcG1jcmFpZF9jbWQgKikKKykKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlOworCXN0cnVjdCBwbWNyYWlkX2hvc3RyY2IgICpoY2FtOworCisJcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwloY2FtID0gICh0eXBlID09IFBNQ1JBSURfSENBTV9DT0RFX0xPR19EQVRBKSA/CisJCSZwaW5zdGFuY2UtPmxkbiA6ICZwaW5zdGFuY2UtPmNjbjsKKworCS8qIHByZXBhcmUgZm9yIGNhbmNlbGxpbmcgcHJldmlvdXMgaGNhbSBjb21tYW5kLiBJZiB0aGUgSENBTSBpcworCSAqIGN1cnJlbnRseSBub3QgcGVuZGluZyB3aXRoIElPQSwgd2Ugd291bGQgaGF2ZSBoY2FtLT5jbWQgYXMgbm9uLW51bGwKKwkgKi8KKwlpZiAoaGNhbS0+Y21kID09IE5VTEwpCisJCXJldHVybjsKKworCXBtY3JhaWRfcHJlcGFyZV9jYW5jZWxfY21kKGNtZCwgaGNhbS0+Y21kKTsKKworCS8qIHdyaXRpbmcgdG8gSU9BUlJJTiBtdXN0IGJlIHByb3RlY3RlZCBieSBob3N0X2xvY2ssIGFzIG1pZC1sYXllcgorCSAqIHNjaGVkdWxlIHF1ZXVlY29tbWFuZCB3aGlsZSB3ZSBhcmUgZG9pbmcgdGhpcworCSAqLworCXBtY3JhaWRfc2VuZF9jbWQoY21kLCBjbWRfZG9uZSwKKwkJCSBQTUNSQUlEX0lOVEVSTkFMX1RJTUVPVVQsCisJCQkgcG1jcmFpZF90aW1lb3V0X2hhbmRsZXIpOworfQorCisvKioKKyAqIHBtY3JhaWRfY2FuY2VsX2NjbiAtIGNhbmNlbCBDQ04gSENBTSBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBJT0EKKyAqCisgKiBAY21kOiBjb21tYW5kIGJsb2NrIHRvIGJlIHVzZWQgZm9yIGNhbmNlbGxpbmcgdGhlIEhDQU0KKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9jYW5jZWxfY2NuKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXBtY3JhaWRfaW5mbygicmVzcG9uc2UgZm9yIENhbmNlbCBMRE4gQ0RCWzBdID0gJXggaW9hc2MgPSAleFxuIiwKKwkJICAgICBjbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSwKKwkJICAgICBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hc2EuaW9hc2MpKTsKKworCXBtY3JhaWRfcmVpbml0X2NtZGJsayhjbWQpOworCisJcG1jcmFpZF9jYW5jZWxfaGNhbShjbWQsCisJCQkgICAgUE1DUkFJRF9IQ0FNX0NPREVfQ09ORklHX0NIQU5HRSwKKwkJCSAgICBwbWNyYWlkX2lvYV9zaHV0ZG93bik7Cit9CisKKy8qKgorICogcG1jcmFpZF9jYW5jZWxfbGRuIC0gY2FuY2VsIExETiBIQ0FNIGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIElPQQorICoKKyAqIEBjbWQ6IGNvbW1hbmQgYmxvY2sgdG8gYmUgdXNlZCBmb3IgY2FuY2VsbGluZyB0aGUgSENBTQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2NhbmNlbF9sZG4oc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJcG1jcmFpZF9jYW5jZWxfaGNhbShjbWQsCisJCQkgICAgUE1DUkFJRF9IQ0FNX0NPREVfTE9HX0RBVEEsCisJCQkgICAgcG1jcmFpZF9jYW5jZWxfY2NuKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2V4cG9zZV9yZXNvdXJjZSAtIGNoZWNrIGlmIHRoZSByZXNvdXJjZSBjYW4gYmUgZXhwb3NlZCB0byBPUworICoKKyAqIEBjZmd0ZTogcG9pbnRlciB0byBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJ5IG9mIHRoZSByZXNvdXJjZQorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAl0cnVlIGlmIHJlc291cmNlIGNhbiBiZSBhZGRlZCB0byBtaWRsYXllciwgZmFsc2UoMCkgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9leHBvc2VfcmVzb3VyY2Uoc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5ICpjZmd0ZSkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmIChjZmd0ZS0+cmVzb3VyY2VfdHlwZSA9PSBSRVNfVFlQRV9WU0VUKQorCQlyZXR2YWwgPSAoKGNmZ3RlLT51bmlxdWVfZmxhZ3MxICYgMHhGRikgPCAweEZFKTsKKwllbHNlIGlmIChjZmd0ZS0+cmVzb3VyY2VfdHlwZSA9PSBSRVNfVFlQRV9HU0NTSSkKKwkJcmV0dmFsID0gKFJFU19CVVMoY2ZndGUtPnJlc291cmNlX2FkZHJlc3MpICE9CisJCQkJUE1DUkFJRF9WSVJUVUFMX0VOQ0xfQlVTX0lEKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBhdHRyaWJ1dGVzIHN1cHBvcnRlZCBieSBwbWNyYWlkX2V2ZW50X2ZhbWlseSAqLworZW51bSB7CisJUE1DUkFJRF9BRU5fQVRUUl9VTlNQRUMsCisJUE1DUkFJRF9BRU5fQVRUUl9FVkVOVCwKKwlfX1BNQ1JBSURfQUVOX0FUVFJfTUFYLAorfTsKKyNkZWZpbmUgUE1DUkFJRF9BRU5fQVRUUl9NQVggKF9fUE1DUkFJRF9BRU5fQVRUUl9NQVggLSAxKQorCisvKiBjb21tYW5kcyBzdXBwb3J0ZWQgYnkgcG1jcmFpZF9ldmVudF9mYW1pbHkgKi8KK2VudW0geworCVBNQ1JBSURfQUVOX0NNRF9VTlNQRUMsCisJUE1DUkFJRF9BRU5fQ01EX0VWRU5ULAorCV9fUE1DUkFJRF9BRU5fQ01EX01BWCwKK307CisjZGVmaW5lIFBNQ1JBSURfQUVOX0NNRF9NQVggKF9fUE1DUkFJRF9BRU5fQ01EX01BWCAtIDEpCisKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgcG1jcmFpZF9ldmVudF9mYW1pbHkgPSB7CisJLmlkID0gR0VOTF9JRF9HRU5FUkFURSwKKwkubmFtZSA9ICJwbWNyYWlkIiwKKwkudmVyc2lvbiA9IDEsCisJLm1heGF0dHIgPSBQTUNSQUlEX0FFTl9BVFRSX01BWAorfTsKKworLyoqCisgKiBwbWNyYWlkX25ldGxpbmtfaW5pdCAtIHJlZ2lzdGVycyBwbWNyYWlkX2V2ZW50X2ZhbWlseQorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAkwIGlmIHRoZSBwbWNyYWlkX2V2ZW50X2ZhbWlseSBpcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZAorICogCXdpdGggbmV0bGluayBnZW5lcmljLCBub24temVybyBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBwbWNyYWlkX25ldGxpbmtfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseSgmcG1jcmFpZF9ldmVudF9mYW1pbHkpOworCisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXBtY3JhaWRfaW5mbygicmVnaXN0ZXJlZCBORVRMSU5LIEdFTkVSSUMgZ3JvdXA6ICVkXG4iLAorCQkgICAgIHBtY3JhaWRfZXZlbnRfZmFtaWx5LmlkKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogcG1jcmFpZF9uZXRsaW5rX3JlbGVhc2UgLSB1bnJlZ2lzdGVycyBwbWNyYWlkX2V2ZW50X2ZhbWlseQorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfbmV0bGlua19yZWxlYXNlKHZvaWQpCit7CisJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmcG1jcmFpZF9ldmVudF9mYW1pbHkpOworfQorCisvKioKKyAqIHBtY3JhaWRfbm90aWZ5X2FlbiAtIHNlbmRzIGV2ZW50IG1zZyB0byB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAdHlwZTogSENBTSB0eXBlCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJMCBpZiBzdWNjZXNzLCBlcnJvciB2YWx1ZSBpbiBjYXNlIG9mIGFueSBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHBtY3JhaWRfbm90aWZ5X2FlbihzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlLCB1OCB0eXBlKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHBtY3JhaWRfYWVuX21zZyAqYWVuX21zZzsKKwl2b2lkICptc2dfaGVhZGVyOworCWludCBkYXRhX3NpemUsIHRvdGFsX3NpemU7CisJaW50IHJlc3VsdDsKKworCisJaWYgKHR5cGUgPT0gUE1DUkFJRF9IQ0FNX0NPREVfTE9HX0RBVEEpIHsKKwkJYWVuX21zZyA9IHBpbnN0YW5jZS0+bGRuLm1zZzsKKwkJZGF0YV9zaXplID0gcGluc3RhbmNlLT5sZG4uaGNhbS0+ZGF0YV9sZW47CisJfSBlbHNlIHsKKwkJYWVuX21zZyA9IHBpbnN0YW5jZS0+Y2NuLm1zZzsKKwkJZGF0YV9zaXplID0gcGluc3RhbmNlLT5jY24uaGNhbS0+ZGF0YV9sZW47CisJfQorCisJZGF0YV9zaXplICs9IHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9oY2FtX2hkcik7CisJYWVuX21zZy0+aG9zdG5vID0gKHBpbnN0YW5jZS0+aG9zdC0+dW5pcXVlX2lkIDw8IDE2IHwKKwkJCSAgIE1JTk9SKHBpbnN0YW5jZS0+Y2Rldi5kZXYpKTsKKwlhZW5fbXNnLT5sZW5ndGggPSBkYXRhX3NpemU7CisJZGF0YV9zaXplICs9IHNpemVvZigqYWVuX21zZyk7CisKKwl0b3RhbF9zaXplID0gbmxhX3RvdGFsX3NpemUoZGF0YV9zaXplKTsKKwlza2IgPSBnZW5sbXNnX25ldyh0b3RhbF9zaXplLCBHRlBfQVRPTUlDKTsKKworCisJaWYgKCFza2IpIHsKKwkJcG1jcmFpZF9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBhZW4gZGF0YSBTS0Igb2Ygc2l6ZTogJXhcbiIsCisJCQkgICAgIHRvdGFsX3NpemUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBhZGQgdGhlIGdlbmV0bGluayBtZXNzYWdlIGhlYWRlciAqLworCW1zZ19oZWFkZXIgPSBnZW5sbXNnX3B1dChza2IsIDAsIDAsCisJCQkJICZwbWNyYWlkX2V2ZW50X2ZhbWlseSwgMCwKKwkJCQkgUE1DUkFJRF9BRU5fQ01EX0VWRU5UKTsKKwlpZiAoIW1zZ19oZWFkZXIpIHsKKwkJcG1jcmFpZF9lcnIoImZhaWxlZCB0byBjb3B5IGNvbW1hbmQgZGV0YWlsc1xuIik7CisJCW5sbXNnX2ZyZWUoc2tiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmVzdWx0ID0gbmxhX3B1dChza2IsIFBNQ1JBSURfQUVOX0FUVFJfRVZFTlQsIGRhdGFfc2l6ZSwgYWVuX21zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCXBtY3JhaWRfZXJyKCJmYWlsZWQgdG8gY29weSBBRU4gYXR0cmlidXRlIGRhdGEgXG4iKTsKKwkJbmxtc2dfZnJlZShza2IpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBzZW5kIGdlbmV0bGluayBtdWx0aWNhc3QgbWVzc2FnZSB0byBub3RpZnkgYXBwcGxpY2F0aW9ucyAqLworCXJlc3VsdCA9IGdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWRlcik7CisKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwbWNyYWlkX2VycigiZ2VubG1zZ19lbmQgZmFpbGVkXG4iKTsKKwkJbmxtc2dfZnJlZShza2IpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJlc3VsdCA9CisJCWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgcG1jcmFpZF9ldmVudF9mYW1pbHkuaWQsIEdGUF9BVE9NSUMpOworCisJLyogSWYgdGhlcmUgYXJlIG5vIGxpc3RlbmVycywgZ2VubG1zZ19tdWx0aWNhc3QgbWF5IHJldHVybiBub24temVybworCSAqIHZhbHVlLgorCSAqLworCWlmIChyZXN1bHQpCisJCXBtY3JhaWRfaW5mbygiZmFpbGVkIHRvIHNlbmQgJXMgZXZlbnQgbWVzc2FnZSAleCFcbiIsCisJCQl0eXBlID09IFBNQ1JBSURfSENBTV9DT0RFX0xPR19EQVRBID8gIkxETiIgOiAiQ0NOIiwKKwkJCXJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBwbWNyYWlkX2hhbmRsZV9jb25maWdfY2hhbmdlIC0gSGFuZGxlIGEgY29uZmlnIGNoYW5nZSBmcm9tIHRoZSBhZGFwdGVyCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIHBlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqICBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfaGFuZGxlX2NvbmZpZ19jaGFuZ2Uoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGVfZW50cnkgKmNmZ19lbnRyeTsKKwlzdHJ1Y3QgcG1jcmFpZF9oY2FtX2NjbiAqY2NuX2hjYW07CisJc3RydWN0IHBtY3JhaWRfY21kICpjbWQ7CisJc3RydWN0IHBtY3JhaWRfY21kICpjZmdjbWQ7CisJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlcyA9IE5VTEw7CisJdTMyIG5ld19lbnRyeSA9IDE7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgaG9zdF9sb2NrX2ZsYWdzOworCWludCByYzsKKworCWNjbl9oY2FtID0gKHN0cnVjdCBwbWNyYWlkX2hjYW1fY2NuICopcGluc3RhbmNlLT5jY24uaGNhbTsKKwljZmdfZW50cnkgPSAmY2NuX2hjYW0tPmNmZ19lbnRyeTsKKworCXBtY3JhaWRfaW5mbworCQkoIkNDTigleCk6ICV4IHR5cGU6ICV4IGxvc3Q6ICV4IGZsYWdzOiAleCByZXM6ICV4OiV4OiV4OiV4XG4iLAorCQkgcGluc3RhbmNlLT5jY24uaGNhbS0+aWxpZCwKKwkJIHBpbnN0YW5jZS0+Y2NuLmhjYW0tPm9wX2NvZGUsCisJCSBwaW5zdGFuY2UtPmNjbi5oY2FtLT5ub3RpZmljYXRpb25fdHlwZSwKKwkJIHBpbnN0YW5jZS0+Y2NuLmhjYW0tPm5vdGlmaWNhdGlvbl9sb3N0LAorCQkgcGluc3RhbmNlLT5jY24uaGNhbS0+ZmxhZ3MsCisJCSBwaW5zdGFuY2UtPmhvc3QtPnVuaXF1ZV9pZCwKKwkJIFJFU19JU19WU0VUKCpjZmdfZW50cnkpID8gUE1DUkFJRF9WU0VUX0JVU19JRCA6CisJCSAoUkVTX0lTX0dTQ1NJKCpjZmdfZW50cnkpID8gUE1DUkFJRF9QSFlTX0JVU19JRCA6CisJCQlSRVNfQlVTKGNmZ19lbnRyeS0+cmVzb3VyY2VfYWRkcmVzcykpLAorCQkgUkVTX0lTX1ZTRVQoKmNmZ19lbnRyeSkgPyBjZmdfZW50cnktPnVuaXF1ZV9mbGFnczEgOgorCQkJUkVTX1RBUkdFVChjZmdfZW50cnktPnJlc291cmNlX2FkZHJlc3MpLAorCQkgUkVTX0xVTihjZmdfZW50cnktPnJlc291cmNlX2FkZHJlc3MpKTsKKworCisJLyogSWYgdGhpcyBIQ0FNIGluZGljYXRlcyBhIGxvc3Qgbm90aWZpY2F0aW9uLCByZWFkIHRoZSBjb25maWcgdGFibGUgKi8KKwlpZiAocGluc3RhbmNlLT5jY24uaGNhbS0+bm90aWZpY2F0aW9uX2xvc3QpIHsKKwkJY2ZnY21kID0gcG1jcmFpZF9nZXRfZnJlZV9jbWQocGluc3RhbmNlKTsKKwkJaWYgKGNmZ2NtZCkgeworCQkJcG1jcmFpZF9pbmZvKCJsb3N0IENDTiwgcmVhZGluZyBjb25maWcgdGFibGVcYiIpOworCQkJcGluc3RhbmNlLT5yZWluaXRfY2ZnX3RhYmxlID0gMTsKKwkJCXBtY3JhaWRfcXVlcnljZmcoY2ZnY21kKTsKKwkJfSBlbHNlIHsKKwkJCXBtY3JhaWRfZXJyKCJsb3N0IENDTiwgbm8gZnJlZSBjbWQgZm9yIHF1ZXJ5Y2ZnXG4iKTsKKwkJfQorCQlnb3RvIG91dF9ub3RpZnlfYXBwczsKKwl9CisKKwkvKiBJZiB0aGlzIHJlc291cmNlIGlzIG5vdCBnb2luZyB0byBiZSBhZGRlZCB0byBtaWQtbGF5ZXIsIGp1c3Qgbm90aWZ5CisJICogYXBwbGljYXRpb25zIGFuZCByZXR1cm4KKwkgKi8KKwlpZiAoIXBtY3JhaWRfZXhwb3NlX3Jlc291cmNlKGNmZ19lbnRyeSkpCisJCWdvdG8gb3V0X25vdGlmeV9hcHBzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jaywgbG9ja19mbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXMsICZwaW5zdGFuY2UtPnVzZWRfcmVzX3EsIHF1ZXVlKSB7CisJCXJjID0gbWVtY21wKCZyZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV9hZGRyZXNzLAorCQkJICAgICZjZmdfZW50cnktPnJlc291cmNlX2FkZHJlc3MsCisJCQkgICAgc2l6ZW9mKGNmZ19lbnRyeS0+cmVzb3VyY2VfYWRkcmVzcykpOworCQlpZiAoIXJjKSB7CisJCQluZXdfZW50cnkgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobmV3X2VudHJ5KSB7CisKKwkJLyogSWYgdGhlcmUgYXJlIG1vcmUgbnVtYmVyIG9mIHJlc291cmNlcyB0aGFuIHdoYXQgZHJpdmVyIGNhbgorCQkgKiBtYW5hZ2UsIGRvIG5vdCBub3RpZnkgdGhlIGFwcGxpY2F0aW9ucyBhYm91dCB0aGUgQ0NOLiBKdXN0CisJCSAqIGlnbm9yZSB0aGlzIG5vdGlmaWNhdGlvbnMgYW5kIHJlLXJlZ2lzdGVyIHRoZSBzYW1lIEhDQU0KKwkJICovCisJCWlmIChsaXN0X2VtcHR5KCZwaW5zdGFuY2UtPmZyZWVfcmVzX3EpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW5zdGFuY2UtPnJlc291cmNlX2xvY2ssCisJCQkJCQlsb2NrX2ZsYWdzKTsKKwkJCXBtY3JhaWRfZXJyKCJ0b28gbWFueSByZXNvdXJjZXMgYXR0YWNoZWRcbiIpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgaG9zdF9sb2NrX2ZsYWdzKTsKKwkJCXBtY3JhaWRfc2VuZF9oY2FtKHBpbnN0YW5jZSwKKwkJCQkJICBQTUNSQUlEX0hDQU1fQ09ERV9DT05GSUdfQ0hBTkdFKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgICAgICBob3N0X2xvY2tfZmxhZ3MpOworCQkJcmV0dXJuOworCQl9CisKKwkJcmVzID0gbGlzdF9lbnRyeShwaW5zdGFuY2UtPmZyZWVfcmVzX3EubmV4dCwKKwkJCQkgc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnksIHF1ZXVlKTsKKworCQlsaXN0X2RlbCgmcmVzLT5xdWV1ZSk7CisJCXJlcy0+c2NzaV9kZXYgPSBOVUxMOworCQlyZXMtPnJlc2V0X3Byb2dyZXNzID0gMDsKKwkJbGlzdF9hZGRfdGFpbCgmcmVzLT5xdWV1ZSwgJnBpbnN0YW5jZS0+dXNlZF9yZXNfcSk7CisJfQorCisJbWVtY3B5KCZyZXMtPmNmZ19lbnRyeSwgY2ZnX2VudHJ5LAorCQlzaXplb2Yoc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5KSk7CisKKwlpZiAocGluc3RhbmNlLT5jY24uaGNhbS0+bm90aWZpY2F0aW9uX3R5cGUgPT0KKwkgICAgTk9USUZJQ0FUSU9OX1RZUEVfRU5UUllfREVMRVRFRCkgeworCQlpZiAocmVzLT5zY3NpX2RldikgeworCQkJcmVzLT5jaGFuZ2VfZGV0ZWN0ZWQgPSBSRVNfQ0hBTkdFX0RFTDsKKwkJCXJlcy0+Y2ZnX2VudHJ5LnJlc291cmNlX2hhbmRsZSA9CisJCQkJUE1DUkFJRF9JTlZBTElEX1JFU19IQU5ETEU7CisJCQlzY2hlZHVsZV93b3JrKCZwaW5zdGFuY2UtPndvcmtlcl9xKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoaXMgbWF5IGJlIG9uZSBvZiB0aGUgbm9uLWV4cG9zZWQgcmVzb3VyY2VzICovCisJCQlsaXN0X21vdmVfdGFpbCgmcmVzLT5xdWV1ZSwgJnBpbnN0YW5jZS0+ZnJlZV9yZXNfcSk7CisJCX0KKwl9IGVsc2UgaWYgKCFyZXMtPnNjc2lfZGV2KSB7CisJCXJlcy0+Y2hhbmdlX2RldGVjdGVkID0gUkVTX0NIQU5HRV9BREQ7CisJCXNjaGVkdWxlX3dvcmsoJnBpbnN0YW5jZS0+d29ya2VyX3EpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW5zdGFuY2UtPnJlc291cmNlX2xvY2ssIGxvY2tfZmxhZ3MpOworCitvdXRfbm90aWZ5X2FwcHM6CisKKwkvKiBOb3RpZnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHRvIHJlZ2lzdGVyZWQgYXBwbGljYXRpb25zLiovCisJaWYgKCFwbWNyYWlkX2Rpc2FibGVfYWVuKQorCQlwbWNyYWlkX25vdGlmeV9hZW4ocGluc3RhbmNlLCBQTUNSQUlEX0hDQU1fQ09ERV9DT05GSUdfQ0hBTkdFKTsKKworCWNtZCA9IHBtY3JhaWRfaW5pdF9oY2FtKHBpbnN0YW5jZSwgUE1DUkFJRF9IQ0FNX0NPREVfQ09ORklHX0NIQU5HRSk7CisJaWYgKGNtZCkKKwkJcG1jcmFpZF9zZW5kX2hjYW1fY21kKGNtZCk7Cit9CisKKy8qKgorICogcG1jcmFpZF9nZXRfZXJyb3JfaW5mbyAtIHJldHVybiBlcnJvciBzdHJpbmcgZm9yIGFuIGlvYXNjCisgKiBAaW9hc2M6IGlvYXNjIGNvZGUKKyAqIFJldHVybiBWYWx1ZQorICoJIG5vbmUKKyAqLworc3RhdGljIHN0cnVjdCBwbWNyYWlkX2lvYXNjX2Vycm9yICpwbWNyYWlkX2dldF9lcnJvcl9pbmZvKHUzMiBpb2FzYykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWNyYWlkX2lvYXNjX2Vycm9yX3RhYmxlKTsgaSsrKSB7CisJCWlmIChwbWNyYWlkX2lvYXNjX2Vycm9yX3RhYmxlW2ldLmlvYXNjX2NvZGUgPT0gaW9hc2MpCisJCQlyZXR1cm4gJnBtY3JhaWRfaW9hc2NfZXJyb3JfdGFibGVbaV07CisJfQorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHBtY3JhaWRfaW9hc2NfbG9nZ2VyIC0gbG9nIElPQVNDIGluZm9ybWF0aW9uIGJhc2VkIHVzZXItc2V0dGluZ3MKKyAqIEBpb2FzYzogaW9hc2MgY29kZQorICogQGNtZDogcG9pbnRlciB0byBjb21tYW5kIHRoYXQgcmVzdWx0ZWQgaW4gJ2lvYXNjJworICovCit2b2lkIHBtY3JhaWRfaW9hc2NfbG9nZ2VyKHUzMiBpb2FzYywgc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHBtY3JhaWRfaW9hc2NfZXJyb3IgKmVycm9yX2luZm8gPSBwbWNyYWlkX2dldF9lcnJvcl9pbmZvKGlvYXNjKTsKKworCWlmIChlcnJvcl9pbmZvID09IE5VTEwgfHwKKwkJY21kLT5kcnZfaW5zdC0+Y3VycmVudF9sb2dfbGV2ZWwgPCBlcnJvcl9pbmZvLT5sb2dfbGV2ZWwpCisJCXJldHVybjsKKworCS8qIGxvZyB0aGUgZXJyb3Igc3RyaW5nICovCisJcG1jcmFpZF9lcnIoImNtZCBbJWRdIGZvciByZXNvdXJjZSAleCBmYWlsZWQgd2l0aCAleCglcylcbiIsCisJCWNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLAorCQljbWQtPmlvYV9jYi0+aW9hcmNiLnJlc291cmNlX2hhbmRsZSwKKwkJbGUzMl90b19jcHUoaW9hc2MpLCBlcnJvcl9pbmZvLT5lcnJvcl9zdHJpbmcpOworfQorCisvKioKKyAqIHBtY3JhaWRfaGFuZGxlX2Vycm9yX2xvZyAtIEhhbmRsZSBhIGNvbmZpZyBjaGFuZ2UgKGVycm9yIGxvZykgZnJvbSB0aGUgSU9BCisgKgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2hhbmRsZV9lcnJvcl9sb2coc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9oY2FtX2xkbiAqaGNhbV9sZG47CisJdTMyIGlvYXNjOworCisJaGNhbV9sZG4gPSAoc3RydWN0IHBtY3JhaWRfaGNhbV9sZG4gKilwaW5zdGFuY2UtPmxkbi5oY2FtOworCisJcG1jcmFpZF9pbmZvCisJCSgiTEROKCV4KTogJXggdHlwZTogJXggbG9zdDogJXggZmxhZ3M6ICV4IG92ZXJsYXkgaWQ6ICV4XG4iLAorCQkgcGluc3RhbmNlLT5sZG4uaGNhbS0+aWxpZCwKKwkJIHBpbnN0YW5jZS0+bGRuLmhjYW0tPm9wX2NvZGUsCisJCSBwaW5zdGFuY2UtPmxkbi5oY2FtLT5ub3RpZmljYXRpb25fdHlwZSwKKwkJIHBpbnN0YW5jZS0+bGRuLmhjYW0tPm5vdGlmaWNhdGlvbl9sb3N0LAorCQkgcGluc3RhbmNlLT5sZG4uaGNhbS0+ZmxhZ3MsCisJCSBwaW5zdGFuY2UtPmxkbi5oY2FtLT5vdmVybGF5X2lkKTsKKworCS8qIGxvZyBvbmx5IHRoZSBlcnJvcnMsIG5vIG5lZWQgdG8gbG9nIGluZm9ybWF0aW9uYWwgbG9nIGVudHJpZXMgKi8KKwlpZiAocGluc3RhbmNlLT5sZG4uaGNhbS0+bm90aWZpY2F0aW9uX3R5cGUgIT0KKwkgICAgTk9USUZJQ0FUSU9OX1RZUEVfRVJST1JfTE9HKQorCQlyZXR1cm47CisKKwlpZiAocGluc3RhbmNlLT5sZG4uaGNhbS0+bm90aWZpY2F0aW9uX2xvc3QgPT0KKwkgICAgSE9TVFJDQl9OT1RJRklDQVRJT05TX0xPU1QpCisJCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LCAiRXJyb3Igbm90aWZpY2F0aW9ucyBsb3N0XG4iKTsKKworCWlvYXNjID0gbGUzMl90b19jcHUoaGNhbV9sZG4tPmVycm9yX2xvZy5mZF9pb2FzYyk7CisKKwlpZiAoaW9hc2MgPT0gUE1DUkFJRF9JT0FTQ19VQV9CVVNfV0FTX1JFU0VUIHx8CisJCWlvYXNjID09IFBNQ1JBSURfSU9BU0NfVUFfQlVTX1dBU19SRVNFVF9CWV9PVEhFUikgeworCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJCSJVbml0QXR0ZW50aW9uIGR1ZSB0byBJT0EgQnVzIFJlc2V0XG4iKTsKKwkJc2NzaV9yZXBvcnRfYnVzX3Jlc2V0KAorCQkJcGluc3RhbmNlLT5ob3N0LAorCQkJUkVTX0JVUyhoY2FtX2xkbi0+ZXJyb3JfbG9nLmZkX3JhKSk7CisJfQorCisJcmV0dXJuOworfQorCisvKioKKyAqIHBtY3JhaWRfcHJvY2Vzc19jY24gLSBPcCBkb25lIGZ1bmN0aW9uIGZvciBhIENDTi4KKyAqIEBjbWQ6IHBvaW50ZXIgdG8gY29tbWFuZCBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvcCBkb25lIGZ1bmN0aW9uIGZvciBhIGNvbmZpZ3VyYXRpb24KKyAqIGNoYW5nZSBub3RpZmljYXRpb24KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcHJvY2Vzc19jY24oc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CisJdTMyIGlvYXNjID0gbGUzMl90b19jcHUoY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjKTsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwlwaW5zdGFuY2UtPmNjbi5jbWQgPSBOVUxMOworCXBtY3JhaWRfcmV0dXJuX2NtZChjbWQpOworCisJLyogSWYgZHJpdmVyIGluaXRpYXRlZCBJT0EgcmVzZXQgaGFwcGVuZWQgd2hpbGUgdGhpcyBoY2FtIHdhcyBwZW5kaW5nCisJICogd2l0aCBJT0EsIG9yIElPQSBicmluZ2Rvd24gc2VxdWVuY2UgaXMgaW4gcHJvZ3Jlc3MsIG5vIG5lZWQgdG8KKwkgKiByZS1yZWdpc3RlciB0aGUgaGNhbQorCSAqLworCWlmIChpb2FzYyA9PSBQTUNSQUlEX0lPQVNDX0lPQV9XQVNfUkVTRVQgfHwKKwkgICAgYXRvbWljX3JlYWQoJnBpbnN0YW5jZS0+Y2NuLmlnbm9yZSkgPT0gMSkgeworCQlyZXR1cm47CisJfSBlbHNlIGlmIChpb2FzYykgeworCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJCSJIb3N0IFJDQiAoQ0NOKSBmYWlsZWQgd2l0aCBJT0FTQzogMHglMDhYXG4iLCBpb2FzYyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJcG1jcmFpZF9zZW5kX2hjYW0ocGluc3RhbmNlLCBQTUNSQUlEX0hDQU1fQ09ERV9DT05GSUdfQ0hBTkdFKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJfSBlbHNlIHsKKwkJcG1jcmFpZF9oYW5kbGVfY29uZmlnX2NoYW5nZShwaW5zdGFuY2UpOworCX0KK30KKworLyoqCisgKiBwbWNyYWlkX3Byb2Nlc3NfbGRuIC0gb3AgZG9uZSBmdW5jdGlvbiBmb3IgYW4gTEROCisgKiBAY21kOiBwb2ludGVyIHRvIGNvbW1hbmQgYmxvY2sKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqICAgbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2luaXRpYXRlX3Jlc2V0KHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICopOworCitzdGF0aWMgdm9pZCBwbWNyYWlkX3Byb2Nlc3NfbGRuKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OworCXN0cnVjdCBwbWNyYWlkX2hjYW1fbGRuICpsZG5faGNhbSA9CisJCQkoc3RydWN0IHBtY3JhaWRfaGNhbV9sZG4gKilwaW5zdGFuY2UtPmxkbi5oY2FtOworCXUzMiBpb2FzYyA9IGxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FzYS5pb2FzYyk7CisJdTMyIGZkX2lvYXNjID0gbGUzMl90b19jcHUobGRuX2hjYW0tPmVycm9yX2xvZy5mZF9pb2FzYyk7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCisJLyogcmV0dXJuIHRoZSBjb21tYW5kIGJsb2NrIGJhY2sgdG8gZnJlZXBvb2wgKi8KKwlwaW5zdGFuY2UtPmxkbi5jbWQgPSBOVUxMOworCXBtY3JhaWRfcmV0dXJuX2NtZChjbWQpOworCisJLyogSWYgZHJpdmVyIGluaXRpYXRlZCBJT0EgcmVzZXQgaGFwcGVuZWQgd2hpbGUgdGhpcyBoY2FtIHdhcyBwZW5kaW5nCisJICogd2l0aCBJT0EsIG5vIG5lZWQgdG8gcmUtcmVnaXN0ZXIgdGhlIGhjYW0gYXMgcmVzZXQgZW5naW5lIHdpbGwgZG8gaXQKKwkgKiBvbmNlIHJlc2V0IHNlcXVlbmNlIGlzIGNvbXBsZXRlCisJICovCisJaWYgKGlvYXNjID09IFBNQ1JBSURfSU9BU0NfSU9BX1dBU19SRVNFVCB8fAorCSAgICBhdG9taWNfcmVhZCgmcGluc3RhbmNlLT5jY24uaWdub3JlKSA9PSAxKSB7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKCFpb2FzYykgeworCQlwbWNyYWlkX2hhbmRsZV9lcnJvcl9sb2cocGluc3RhbmNlKTsKKwkJaWYgKGZkX2lvYXNjID09IFBNQ1JBSURfSU9BU0NfTlJfSU9BX1JFU0VUX1JFUVVJUkVEKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywKKwkJCQkJICBsb2NrX2ZsYWdzKTsKKwkJCXBtY3JhaWRfaW5pdGlhdGVfcmVzZXQocGluc3RhbmNlKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgICAgICBsb2NrX2ZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQkJIkhvc3QgUkNCKExETikgZmFpbGVkIHdpdGggSU9BU0M6IDB4JTA4WFxuIiwgaW9hc2MpOworCX0KKwkvKiBzZW5kIG5ldGxpbmsgbWVzc2FnZSBmb3IgSENBTSBub3RpZmljYXRpb24gaWYgZW5hYmxlZCAqLworCWlmICghcG1jcmFpZF9kaXNhYmxlX2FlbikKKwkJcG1jcmFpZF9ub3RpZnlfYWVuKHBpbnN0YW5jZSwgUE1DUkFJRF9IQ0FNX0NPREVfTE9HX0RBVEEpOworCisJY21kID0gcG1jcmFpZF9pbml0X2hjYW0ocGluc3RhbmNlLCBQTUNSQUlEX0hDQU1fQ09ERV9MT0dfREFUQSk7CisJaWYgKGNtZCkKKwkJcG1jcmFpZF9zZW5kX2hjYW1fY21kKGNtZCk7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZWdpc3Rlcl9oY2FtcyAtIHJlZ2lzdGVyIEhDQU1zIGZvciBDQ04gYW5kIExETgorICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgcGVyIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlCisgKiAgIG5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9yZWdpc3Rlcl9oY2FtcyhzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCXBtY3JhaWRfc2VuZF9oY2FtKHBpbnN0YW5jZSwgUE1DUkFJRF9IQ0FNX0NPREVfQ09ORklHX0NIQU5HRSk7CisJcG1jcmFpZF9zZW5kX2hjYW0ocGluc3RhbmNlLCBQTUNSQUlEX0hDQU1fQ09ERV9MT0dfREFUQSk7Cit9CisKKy8qKgorICogcG1jcmFpZF91bnJlZ2lzdGVyX2hjYW1zIC0gY2FuY2VsIEhDQU1zIHJlZ2lzdGVyZWQgYWxyZWFkeQorICogQGNtZDogcG9pbnRlciB0byBjb21tYW5kIHVzZWQgYXMgcGFydCBvZiByZXNldCBzZXF1ZW5jZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3VucmVnaXN0ZXJfaGNhbXMoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CisKKwkvKiBEdXJpbmcgSU9BIGJyaW5nZG93biwgSENBTSBnZXRzIGZpcmVkIGFuZCB0YXNrbGV0IHByb2NlZWRzIHdpdGgKKwkgKiBoYW5kbGluZyBoY2FtIHJlc3BvbnNlIHRob3VnaCBpdCBpcyBub3QgbmVjZXNzYXJ5LiBJbiBvcmRlciB0bworCSAqIHByZXZlbnQgdGhpcywgc2V0ICdpZ25vcmUnLCBzbyB0aGF0IGJyaW5nLWRvd24gc2VxdWVuY2UgZG9lc24ndAorCSAqIHJlLXNlbmQgYW55IG1vcmUgaGNhbXMKKwkgKi8KKwlhdG9taWNfc2V0KCZwaW5zdGFuY2UtPmNjbi5pZ25vcmUsIDEpOworCWF0b21pY19zZXQoJnBpbnN0YW5jZS0+bGRuLmlnbm9yZSwgMSk7CisKKwkvKiBJZiBhZGFwdGVyIHJlc2V0IHdhcyBmb3JjZWQgYXMgcGFydCBvZiBydW50aW1lIHJlc2V0IHNlcXVlbmNlLAorCSAqIHN0YXJ0IHRoZSByZXNldCBzZXF1ZW5jZS4KKwkgKi8KKwlpZiAocGluc3RhbmNlLT5mb3JjZV9pb2FfcmVzZXQgJiYgIXBpbnN0YW5jZS0+aW9hX2JyaW5nZG93bikgeworCQlwaW5zdGFuY2UtPmZvcmNlX2lvYV9yZXNldCA9IDA7CisJCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX0lOX1JFU0VUX0FMRVJUOworCQlwbWNyYWlkX3Jlc2V0X2FsZXJ0KGNtZCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBEcml2ZXIgdHJpZXMgdG8gY2FuY2VsIEhDQU1zIGJ5IHNlbmRpbmcgQUJPUlQgVEFTSyBmb3IgZWFjaCBIQ0FNCisJICogb25lIGFmdGVyIHRoZSBvdGhlci4gU28gQ0NOIGNhbmNlbGxhdGlvbiB3aWxsIGJlIHRyaWdnZXJlZCBieQorCSAqIHBtY3JhaWRfY2FuY2VsX2xkbiBpdHNlbGYuCisJICovCisJcG1jcmFpZF9jYW5jZWxfbGRuKGNtZCk7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZXNldF9lbmFibGVfaW9hIC0gcmUtZW5hYmxlIElPQSBhZnRlciBhIGhhcmQgcmVzZXQKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIFJldHVybiBWYWx1ZQorICogIDEgaWYgVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCBpcyBhY3RpdmUsIG90aGVyd2lzZSAwCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVpbml0X2J1ZmZlcnMoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKik7CisKK3N0YXRpYyBpbnQgcG1jcmFpZF9yZXNldF9lbmFibGVfaW9hKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJdTMyIGludHJzOworCisJcG1jcmFpZF9yZWluaXRfYnVmZmVycyhwaW5zdGFuY2UpOworCWludHJzID0gcG1jcmFpZF9yZWFkX2ludGVycnVwdHMocGluc3RhbmNlKTsKKworCXBtY3JhaWRfZW5hYmxlX2ludGVycnVwdHMocGluc3RhbmNlLCBQTUNSQUlEX1BDSV9JTlRFUlJVUFRTKTsKKworCWlmIChpbnRycyAmIElOVFJTX1RSQU5TSVRJT05fVE9fT1BFUkFUSU9OQUwpIHsKKwkJaW93cml0ZTMyKElOVFJTX1RSQU5TSVRJT05fVE9fT1BFUkFUSU9OQUwsCisJCQlwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9tYXNrX3JlZyk7CisJCWlvd3JpdGUzMihJTlRSU19UUkFOU0lUSU9OX1RPX09QRVJBVElPTkFMLAorCQkJcGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfY2xyX3JlZyk7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKworLyoqCisgKiBwbWNyYWlkX3NvZnRfcmVzZXQgLSBwZXJmb3JtcyBhIHNvZnQgcmVzZXQgYW5kIG1ha2VzIElPQSBiZWNvbWUgcmVhZHkKKyAqIEBjbWQgOiBwb2ludGVyIHRvIHJlc2V0IGNvbW1hbmQgYmxvY2sKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCW5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9zb2Z0X3Jlc2V0KHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OworCXUzMiBpbnRfcmVnOworCXUzMiBkb29yYmVsbDsKKworCS8qIFRoZXJlIHdpbGwgYmUgYW4gaW50ZXJydXB0IHdoZW4gVHJhbnNpdGlvbiB0byBPcGVyYXRpb25hbCBiaXQgaXMKKwkgKiBzZXQgc28gdGFza2xldCB3b3VsZCBleGVjdXRlIG5leHQgcmVzZXQgdGFzay4gVGhlIHRpbWVvdXQgaGFuZGxlcgorCSAqIHdvdWxkIHJlLWluaXRpYXRlIGEgcmVzZXQKKwkgKi8KKwljbWQtPmNtZF9kb25lID0gcG1jcmFpZF9pb2FfcmVzZXQ7CisJY21kLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpY21kOworCWNtZC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKworCQkJICAgICBtc2Vjc190b19qaWZmaWVzKFBNQ1JBSURfVFJBTlNPUF9USU1FT1VUKTsKKwljbWQtPnRpbWVyLmZ1bmN0aW9uID0gKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKXBtY3JhaWRfdGltZW91dF9oYW5kbGVyOworCisJaWYgKCF0aW1lcl9wZW5kaW5nKCZjbWQtPnRpbWVyKSkKKwkJYWRkX3RpbWVyKCZjbWQtPnRpbWVyKTsKKworCS8qIEVuYWJsZSBkZXN0cnVjdGl2ZSBkaWFnbm9zdGljcyBvbiBJT0EgaWYgaXQgaXMgbm90IHlldCBpbgorCSAqIG9wZXJhdGlvbmFsIHN0YXRlCisJICovCisJZG9vcmJlbGwgPSBET09SQkVMTF9SVU5USU1FX1JFU0VUIHwKKwkJICAgRE9PUkJFTExfRU5BQkxFX0RFU1RSVUNUSVZFX0RJQUdTOworCisJaW93cml0ZTMyKGRvb3JiZWxsLCBwaW5zdGFuY2UtPmludF9yZWdzLmhvc3RfaW9hX2ludGVycnVwdF9yZWcpOworCWludF9yZWcgPSBpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9yZWcpOworCXBtY3JhaWRfaW5mbygiV2FpdGluZyBmb3IgSU9BIHRvIGJlY29tZSBvcGVyYXRpb25hbCAleDoleFxuIiwKKwkJICAgICBpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmhvc3RfaW9hX2ludGVycnVwdF9yZWcpLAorCQkgICAgIGludF9yZWcpOworfQorCisvKioKKyAqIHBtY3JhaWRfZ2V0X2R1bXAgLSByZXRyaWV2ZXMgSU9BIGR1bXAgaW4gY2FzZSBvZiBVbml0IENoZWNrIGludGVycnVwdAorICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCW5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9nZXRfZHVtcChzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCXBtY3JhaWRfaW5mbygiJXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZFxuIiwgX19mdW5jX18pOworfQorCisvKioKKyAqIHBtY3JhaWRfZmFpbF9vdXRzdGFuZGluZ19jbWRzIC0gRmFpbHMgYWxsIG91dHN0YW5kaW5nIG9wcy4KKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZhaWxzIGFsbCBvdXRzdGFuZGluZyBvcHMuIElmIHRoZXkgYXJlIHN1Ym1pdHRlZCB0byBJT0EKKyAqIGFscmVhZHksIGl0IHNlbmRzIGNhbmNlbCBhbGwgbWVzc2FnZXMgaWYgSU9BIGlzIHN0aWxsIGFjY2VwdGluZyBJT0FSQ0JzLAorICogb3RoZXJ3aXNlIGp1c3QgY29tcGxldGVzIHRoZSBjb21tYW5kcyBhbmQgcmV0dXJucyB0aGUgY21kIGJsb2NrcyB0byBmcmVlCisgKiBwb29sLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCSBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfZmFpbF9vdXRzdGFuZGluZ19jbWRzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJc3RydWN0IHBtY3JhaWRfY21kICpjbWQsICp0ZW1wOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKworCS8qIHBlbmRpbmcgY29tbWFuZCBsaXN0IGlzIHByb3RlY3RlZCBieSBwZW5kaW5nX3Bvb2xfbG9jay4gSXRzCisJICogdHJhdmVyc2FsIG11c3QgYmUgZG9uZSBhcyB3aXRoaW4gdGhpcyBsb2NrCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbnN0YW5jZS0+cGVuZGluZ19wb29sX2xvY2ssIGxvY2tfZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbWQsIHRlbXAsICZwaW5zdGFuY2UtPnBlbmRpbmdfY21kX3Bvb2wsCisJCQkJIGZyZWVfbGlzdCkgeworCQlsaXN0X2RlbCgmY21kLT5mcmVlX2xpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW5zdGFuY2UtPnBlbmRpbmdfcG9vbF9sb2NrLAorCQkJCQlsb2NrX2ZsYWdzKTsKKwkJY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjID0KKwkJCWNwdV90b19sZTMyKFBNQ1JBSURfSU9BU0NfSU9BX1dBU19SRVNFVCk7CisJCWNtZC0+aW9hX2NiLT5pb2FzYS5pbGlkID0KKwkJCWNwdV90b19iZTMyKFBNQ1JBSURfRFJJVkVSX0lMSUQpOworCisJCS8qIEluIGNhc2UgdGhlIGNvbW1hbmQgdGltZXIgaXMgc3RpbGwgcnVubmluZyAqLworCQlkZWxfdGltZXIoJmNtZC0+dGltZXIpOworCisJCS8qIElmIHRoaXMgaXMgYW4gSU8gY29tbWFuZCwgY29tcGxldGUgaXQgYnkgaW52b2tpbmcgc2NzaV9kb25lCisJCSAqIGZ1bmN0aW9uLiBJZiB0aGlzIGlzIG9uZSBvZiB0aGUgaW50ZXJuYWwgY29tbWFuZHMgb3RoZXIKKwkJICogdGhhbiBwbWNyYWlkX2lvYV9yZXNldCBhbmQgSENBTSBjb21tYW5kcyBpbnZva2UgY21kX2RvbmUgdG8KKwkJICogY29tcGxldGUgaXQKKwkJICovCisJCWlmIChjbWQtPnNjc2lfY21kKSB7CisKKwkJCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kID0gY21kLT5zY3NpX2NtZDsKKwkJCV9fbGUzMiByZXNwID0gY21kLT5pb2FfY2ItPmlvYXJjYi5yZXNwb25zZV9oYW5kbGU7CisKKwkJCXNjc2lfY21kLT5yZXN1bHQgfD0gRElEX0VSUk9SIDw8IDE2OworCisJCQlzY3NpX2RtYV91bm1hcChzY3NpX2NtZCk7CisJCQlwbWNyYWlkX3JldHVybl9jbWQoY21kKTsKKworCisJCQlwbWNyYWlkX2luZm8oImZhaWxpbmcoJWQpIENEQlswXSA9ICV4IHJlc3VsdDogJXhcbiIsCisJCQkJICAgICBsZTMyX3RvX2NwdShyZXNwKSA+PiAyLAorCQkJCSAgICAgY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sCisJCQkJICAgICBzY3NpX2NtZC0+cmVzdWx0KTsKKwkJCXNjc2lfY21kLT5zY3NpX2RvbmUoc2NzaV9jbWQpOworCQl9IGVsc2UgaWYgKGNtZC0+Y21kX2RvbmUgPT0gcG1jcmFpZF9pbnRlcm5hbF9kb25lIHx8CisJCQkgICBjbWQtPmNtZF9kb25lID09IHBtY3JhaWRfZXJwX2RvbmUpIHsKKwkJCWNtZC0+Y21kX2RvbmUoY21kKTsKKwkJfSBlbHNlIGlmIChjbWQtPmNtZF9kb25lICE9IHBtY3JhaWRfaW9hX3Jlc2V0KSB7CisJCQlwbWNyYWlkX3JldHVybl9jbWQoY21kKTsKKwkJfQorCisJCWF0b21pY19kZWMoJnBpbnN0YW5jZS0+b3V0c3RhbmRpbmdfY21kcyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5zdGFuY2UtPnBlbmRpbmdfcG9vbF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW5zdGFuY2UtPnBlbmRpbmdfcG9vbF9sb2NrLCBsb2NrX2ZsYWdzKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2lvYV9yZXNldCAtIEltcGxlbWVudGF0aW9uIG9mIElPQSByZXNldCBsb2dpYworICoKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gdGhlIGNtZCBibG9jayB0byBiZSB1c2VkIGZvciBlbnRpcmUgcmVzZXQgcHJvY2VzcworICoKKyAqIFRoaXMgZnVuY3Rpb24gZXhlY3V0ZXMgbW9zdCBvZiB0aGUgc3RlcHMgcmVxdWlyZWQgZm9yIElPQSByZXNldC4gVGhpcyBnZXRzCisgKiBjYWxsZWQgYnkgdXNlciB0aHJlYWRzIChtb2Rwcm9iZS9pbnNtb2Qvcm1tb2QpIHRpbWVyLCB0YXNrbGV0IGFuZCBtaWRsYXllcidzCisgKiAnZWhfJyB0aHJlYWQuIEFjY2VzcyB0byB2YXJpYWJsZXMgdXNlZCBmb3IgY29udHJvbGluZyB0aGUgcmVzZXQgc2VxdWVuY2UgaXMKKyAqIHN5bmNocm9uaXplZCB1c2luZyBob3N0IGxvY2suIFZhcmlvdXMgZnVuY3Rpb25zIGNhbGxlZCBkdXJpbmcgcmVzZXQgcHJvY2VzcworICogd291bGQgbWFrZSB1c2Ugb2YgYSBzaW5nbGUgY29tbWFuZCBibG9jaywgcG9pbnRlciB0byB3aGljaCBpcyBhbHNvIHN0b3JlZCBpbgorICogYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUuCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkgTm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2lvYV9yZXNldChzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwl1OCByZXNldF9jb21wbGV0ZSA9IDA7CisKKwlwaW5zdGFuY2UtPmlvYV9yZXNldF9pbl9wcm9ncmVzcyA9IDE7CisKKwlpZiAocGluc3RhbmNlLT5yZXNldF9jbWQgIT0gY21kKSB7CisJCXBtY3JhaWRfZXJyKCJyZXNldCBpcyBjYWxsZWQgd2l0aCBkaWZmZXJlbnQgY29tbWFuZCBibG9ja1xuIik7CisJCXBpbnN0YW5jZS0+cmVzZXRfY21kID0gY21kOworCX0KKworCXBtY3JhaWRfaW5mbygicmVzZXRfZW5naW5lOiBzdGF0ZSA9ICVkLCBjb21tYW5kID0gJXBcbiIsCisJCSAgICAgIHBpbnN0YW5jZS0+aW9hX3N0YXRlLCBjbWQpOworCisJc3dpdGNoIChwaW5zdGFuY2UtPmlvYV9zdGF0ZSkgeworCisJY2FzZSBJT0FfU1RBVEVfREVBRDoKKwkJLyogSWYgSU9BIGlzIG9mZmxpbmUsIHdoYXRldmVyIG1heSBiZSB0aGUgcmVzZXQgcmVhc29uLCBqdXN0CisJCSAqIHJldHVybi4gY2FsbGVycyBtaWdodCBiZSB3YWl0aW5nIG9uIHRoZSByZXNldCB3YWl0X3EsIHdha2UKKwkJICogdXAgdGhlbQorCQkgKi8KKwkJcG1jcmFpZF9lcnIoIklPQSBpcyBvZmZsaW5lIG5vIHJlc2V0IGlzIHBvc3NpYmxlXG4iKTsKKwkJcmVzZXRfY29tcGxldGUgPSAxOworCQlicmVhazsKKworCWNhc2UgSU9BX1NUQVRFX0lOX0JSSU5HRE9XTjoKKwkJLyogd2UgZW50ZXIgaGVyZSwgb25jZSBpb2Egc2h1dGRvd24gY29tbWFuZCBpcyBwcm9jZXNzZWQgYnkgSU9BCisJCSAqIEFsZXJ0IElPQSBmb3IgYSBwb3NzaWJsZSByZXNldC4gSWYgcmVzZXQgYWxlcnQgZmFpbHMsIElPQQorCQkgKiBnb2VzIHRocm91Z2ggaGFyZC1yZXNldAorCQkgKi8KKwkJcG1jcmFpZF9kaXNhYmxlX2ludGVycnVwdHMocGluc3RhbmNlLCB+MCk7CisJCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX0lOX1JFU0VUX0FMRVJUOworCQlwbWNyYWlkX3Jlc2V0X2FsZXJ0KGNtZCk7CisJCWJyZWFrOworCisJY2FzZSBJT0FfU1RBVEVfVU5LTk9XTjoKKwkJLyogV2UgbWF5IGJlIGNhbGxlZCBkdXJpbmcgcHJvYmUgb3IgcmVzdW1lLiBTb21lIHByZS1wcm9jZXNzaW5nCisJCSAqIGlzIHJlcXVpcmVkIGZvciBwcmlvciB0byByZXNldAorCQkgKi8KKwkJc2NzaV9ibG9ja19yZXF1ZXN0cyhwaW5zdGFuY2UtPmhvc3QpOworCisJCS8qIElmIGFza2VkIHRvIHJlc2V0IHdoaWxlIElPQSB3YXMgcHJvY2Vzc2luZyByZXNwb25zZXMgb3IKKwkJICogdGhlcmUgYXJlIGFueSBlcnJvciByZXNwb25zZXMgdGhlbiBJT0EgbWF5IHJlcXVpcmUKKwkJICogaGFyZC1yZXNldC4KKwkJICovCisJCWlmIChwaW5zdGFuY2UtPmlvYV9oYXJkX3Jlc2V0ID09IDApIHsKKwkJCWlmIChpb3JlYWQzMihwaW5zdGFuY2UtPmlvYV9zdGF0dXMpICYKKwkJCSAgICBJTlRSU19UUkFOU0lUSU9OX1RPX09QRVJBVElPTkFMKSB7CisJCQkJcG1jcmFpZF9pbmZvKCJzdGlja3kgYml0IHNldCwgYnJpbmctdXBcbiIpOworCQkJCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX0lOX0JSSU5HVVA7CisJCQkJcG1jcmFpZF9yZWluaXRfY21kYmxrKGNtZCk7CisJCQkJcG1jcmFpZF9pZGVudGlmeV9ocnJxKGNtZCk7CisJCQl9IGVsc2UgeworCQkJCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX0lOX1NPRlRfUkVTRVQ7CisJCQkJcG1jcmFpZF9zb2Z0X3Jlc2V0KGNtZCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBBbGVydCBJT0Egb2YgYSBwb3NzaWJsZSByZXNldCBhbmQgd2FpdCBmb3IgY3JpdGljYWwKKwkJCSAqIG9wZXJhdGlvbiBpbiBwcm9ncmVzcyBiaXQgdG8gcmVzZXQKKwkJCSAqLworCQkJcGluc3RhbmNlLT5pb2Ffc3RhdGUgPSBJT0FfU1RBVEVfSU5fUkVTRVRfQUxFUlQ7CisJCQlwbWNyYWlkX3Jlc2V0X2FsZXJ0KGNtZCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElPQV9TVEFURV9JTl9SRVNFVF9BTEVSVDoKKwkJLyogSWYgY3JpdGljYWwgb3BlcmF0aW9uIGluIHByb2dyZXNzIGJpdCBpcyByZXNldCBvciB3YWl0IGdldHMKKwkJICogdGltZWQgb3V0LCByZXNldCBwcm9jZWVkcyB3aXRoIHN0YXJ0aW5nIEJJU1Qgb24gdGhlIElPQS4KKwkJICogcG1jcmFpZF9pb2FfaGFyZF9yZXNldCBrZWVwcyBhIGNvdW50IG9mIHJlc2V0IGF0dGVtcHRzLiBJZgorCQkgKiB0aGV5IGFyZSAzIG9yIG1vcmUsIHJlc2V0IGVuZ2luZSBtYXJrcyBJT0EgZGVhZCBhbmQgcmV0dXJucworCQkgKi8KKwkJcGluc3RhbmNlLT5pb2Ffc3RhdGUgPSBJT0FfU1RBVEVfSU5fSEFSRF9SRVNFVDsKKwkJcG1jcmFpZF9zdGFydF9iaXN0KGNtZCk7CisJCWJyZWFrOworCisJY2FzZSBJT0FfU1RBVEVfSU5fSEFSRF9SRVNFVDoKKwkJcGluc3RhbmNlLT5pb2FfcmVzZXRfYXR0ZW1wdHMrKzsKKworCQkvKiByZXRyeSByZXNldCBpZiB3ZSBoYXZlbid0IHJlYWNoZWQgbWF4aW11bSBhbGxvd2VkIGxpbWl0ICovCisJCWlmIChwaW5zdGFuY2UtPmlvYV9yZXNldF9hdHRlbXB0cyA+IFBNQ1JBSURfUkVTRVRfQVRURU1QVFMpIHsKKwkJCXBpbnN0YW5jZS0+aW9hX3Jlc2V0X2F0dGVtcHRzID0gMDsKKwkJCXBtY3JhaWRfZXJyKCJJT0EgZGlkbid0IHJlc3BvbmQgbWFya2luZyBpdCBhcyBkZWFkXG4iKTsKKwkJCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX0RFQUQ7CisJCQlyZXNldF9jb21wbGV0ZSA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIE9uY2UgZWl0aGVyIGJpc3Qgb3IgcGNpIHJlc2V0IGlzIGRvbmUsIHJlc3RvcmUgUENJIGNvbmZpZworCQkgKiBzcGFjZS4gSWYgdGhpcyBmYWlscywgcHJvY2VlZCB3aXRoIGhhcmQgcmVzZXQgYWdhaW4KKwkJICovCisKKwkJaWYgKHBjaV9yZXN0b3JlX3N0YXRlKHBpbnN0YW5jZS0+cGRldikpIHsKKwkJCXBtY3JhaWRfaW5mbygiY29uZmlnLXNwYWNlIGVycm9yIHJlc2V0dGluZyBhZ2FpblxuIik7CisJCQlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9JTl9SRVNFVF9BTEVSVDsKKwkJCXBtY3JhaWRfcmVzZXRfYWxlcnQoY21kKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogZmFpbCBhbGwgcGVuZGluZyBjb21tYW5kcyAqLworCQlwbWNyYWlkX2ZhaWxfb3V0c3RhbmRpbmdfY21kcyhwaW5zdGFuY2UpOworCisJCS8qIGNoZWNrIGlmIHVuaXQgY2hlY2sgaXMgYWN0aXZlLCBpZiBzbyBleHRyYWN0IGR1bXAgKi8KKwkJaWYgKHBpbnN0YW5jZS0+aW9hX3VuaXRfY2hlY2spIHsKKwkJCXBtY3JhaWRfaW5mbygidW5pdCBjaGVjayBpcyBhY3RpdmVcbiIpOworCQkJcGluc3RhbmNlLT5pb2FfdW5pdF9jaGVjayA9IDA7CisJCQlwbWNyYWlkX2dldF9kdW1wKHBpbnN0YW5jZSk7CisJCQlwaW5zdGFuY2UtPmlvYV9yZXNldF9hdHRlbXB0cy0tOworCQkJcGluc3RhbmNlLT5pb2Ffc3RhdGUgPSBJT0FfU1RBVEVfSU5fUkVTRVRfQUxFUlQ7CisJCQlwbWNyYWlkX3Jlc2V0X2FsZXJ0KGNtZCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGlmIHRoZSByZXNldCByZWFzb24gaXMgdG8gYnJpbmctZG93biB0aGUgaW9hLCB3ZSBtaWdodCBiZQorCQkgKiBkb25lIHdpdGggdGhlIHJlc2V0IHJlc3RvcmUgcGNpX2NvbmZpZ19zcGFjZSBhbmQgY29tcGxldGUKKwkJICogdGhlIHJlc2V0CisJCSAqLworCQlpZiAocGluc3RhbmNlLT5pb2FfYnJpbmdkb3duKSB7CisJCQlwbWNyYWlkX2luZm8oImJyaW5naW5nIGRvd24gdGhlIGFkYXB0ZXJcbiIpOworCQkJcGluc3RhbmNlLT5pb2Ffc2h1dGRvd25fdHlwZSA9IFNIVVRET1dOX05PTkU7CisJCQlwaW5zdGFuY2UtPmlvYV9icmluZ2Rvd24gPSAwOworCQkJcGluc3RhbmNlLT5pb2Ffc3RhdGUgPSBJT0FfU1RBVEVfVU5LTk9XTjsKKwkJCXJlc2V0X2NvbXBsZXRlID0gMTsKKwkJfSBlbHNlIHsKKwkJCS8qIGJyaW5nLXVwIElPQSwgc28gcHJvY2VlZCB3aXRoIHNvZnQgcmVzZXQKKwkJCSAqIFJlaW5pdGlhbGl6ZSBocnJxX2J1ZmZlcnMgYW5kIHRoZWlyIGluZGljZXMgYWxzbworCQkJICogZW5hYmxlIGludGVycnVwdHMgYWZ0ZXIgYSBwY2lfcmVzdG9yZV9zdGF0ZQorCQkJICovCisJCQlpZiAocG1jcmFpZF9yZXNldF9lbmFibGVfaW9hKHBpbnN0YW5jZSkpIHsKKwkJCQlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9JTl9CUklOR1VQOworCQkJCXBtY3JhaWRfaW5mbygiYnJpbmdpbmcgdXAgdGhlIGFkYXB0ZXJcbiIpOworCQkJCXBtY3JhaWRfcmVpbml0X2NtZGJsayhjbWQpOworCQkJCXBtY3JhaWRfaWRlbnRpZnlfaHJycShjbWQpOworCQkJfSBlbHNlIHsKKwkJCQlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9JTl9TT0ZUX1JFU0VUOworCQkJCXBtY3JhaWRfc29mdF9yZXNldChjbWQpOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBJT0FfU1RBVEVfSU5fU09GVF9SRVNFVDoKKwkJLyogVFJBTlNJVElPTiBUTyBPUEVSQVRJT05BTCBpcyBvbiBzbyBzdGFydCBpbml0aWFsaXphdGlvbgorCQkgKiBzZXF1ZW5jZQorCQkgKi8KKwkJcG1jcmFpZF9pbmZvKCJJbiBzb2Z0cmVzZXQgcHJvY2VlZGluZyB3aXRoIGJyaW5nLXVwXG4iKTsKKwkJcGluc3RhbmNlLT5pb2Ffc3RhdGUgPSBJT0FfU1RBVEVfSU5fQlJJTkdVUDsKKworCQkvKiBJbml0aWFsaXphdGlvbiBjb21tYW5kcyBzdGFydCB3aXRoIEhSUlEgaWRlbnRpZmljYXRpb24uIEZyb20KKwkJICogbm93IG9uIHRhc2tsZXQgY29tcGxldGVzIG1vc3Qgb2YgdGhlIGNvbW1hbmRzIGFzIElPQSBpcyB1cAorCQkgKiBhbmQgaW50cnMgYXJlIGVuYWJsZWQKKwkJICovCisJCXBtY3JhaWRfaWRlbnRpZnlfaHJycShjbWQpOworCQlicmVhazsKKworCWNhc2UgSU9BX1NUQVRFX0lOX0JSSU5HVVA6CisJCS8qIHdlIGFyZSBkb25lIHdpdGggYnJpbmdpbmcgdXAgb2YgSU9BLCBjaGFuZ2UgdGhlIGlvYV9zdGF0ZSB0bworCQkgKiBvcGVyYXRpb25hbCBhbmQgd2FrZSB1cCBhbnkgd2FpdGVycworCQkgKi8KKwkJcGluc3RhbmNlLT5pb2Ffc3RhdGUgPSBJT0FfU1RBVEVfT1BFUkFUSU9OQUw7CisJCXJlc2V0X2NvbXBsZXRlID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIElPQV9TVEFURV9PUEVSQVRJT05BTDoKKwlkZWZhdWx0OgorCQkvKiBXaGVuIElPQSBpcyBvcGVyYXRpb25hbCBhbmQgYSByZXNldCBpcyByZXF1ZXN0ZWQsIGNoZWNrIGZvcgorCQkgKiB0aGUgcmVzZXQgcmVhc29uLiBJZiByZXNldCBpcyB0byBicmluZyBkb3duIElPQSwgdW5yZWdpc3RlcgorCQkgKiBIQ0FNcyBhbmQgaW5pdGlhdGUgc2h1dGRvd247IGlmIGFkYXB0ZXIgcmVzZXQgaXMgZm9yY2VkIHRoZW4KKwkJICogcmVzdGFydCByZXNldCBzZXF1ZW5jZSBhZ2FpbgorCQkgKi8KKwkJaWYgKHBpbnN0YW5jZS0+aW9hX3NodXRkb3duX3R5cGUgPT0gU0hVVERPV05fTk9ORSAmJgorCQkgICAgcGluc3RhbmNlLT5mb3JjZV9pb2FfcmVzZXQgPT0gMCkgeworCQkJcmVzZXRfY29tcGxldGUgPSAxOworCQl9IGVsc2UgeworCQkJaWYgKHBpbnN0YW5jZS0+aW9hX3NodXRkb3duX3R5cGUgIT0gU0hVVERPV05fTk9ORSkKKwkJCQlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9JTl9CUklOR0RPV047CisJCQlwbWNyYWlkX3JlaW5pdF9jbWRibGsoY21kKTsKKwkJCXBtY3JhaWRfdW5yZWdpc3Rlcl9oY2FtcyhjbWQpOworCQl9CisJCWJyZWFrOworCX0KKworCS8qIHJlc2V0IHdpbGwgYmUgY29tcGxldGVkIGlmIGlvYV9zdGF0ZSBpcyBlaXRoZXIgREVBRCBvciBVTktOT1dOIG9yCisJICogT1BFUkFUSU9OQUwuIFJlc2V0IGFsbCBjb250cm9sIHZhcmlhYmxlcyB1c2VkIGR1cmluZyByZXNldCwgd2FrZSB1cAorCSAqIGFueSB3YWl0aW5nIHRocmVhZHMgYW5kIGxldCB0aGUgU0NTSSBtaWQtbGF5ZXIgc2VuZCBjb21tYW5kcy4gTm90ZQorCSAqIHRoYXQgaG9zdF9sb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgaW52b2tpbmcgc2NzaV9yZXBvcnRfYnVzX3Jlc2V0LgorCSAqLworCWlmIChyZXNldF9jb21wbGV0ZSkgeworCQlwaW5zdGFuY2UtPmlvYV9yZXNldF9pbl9wcm9ncmVzcyA9IDA7CisJCXBpbnN0YW5jZS0+aW9hX3Jlc2V0X2F0dGVtcHRzID0gMDsKKwkJcGluc3RhbmNlLT5yZXNldF9jbWQgPSBOVUxMOworCQlwaW5zdGFuY2UtPmlvYV9zaHV0ZG93bl90eXBlID0gU0hVVERPV05fTk9ORTsKKwkJcGluc3RhbmNlLT5pb2FfYnJpbmdkb3duID0gMDsKKwkJcG1jcmFpZF9yZXR1cm5fY21kKGNtZCk7CisKKwkJLyogSWYgdGFyZ2V0IHN0YXRlIGlzIHRvIGJyaW5nIHVwIHRoZSBhZGFwdGVyLCBwcm9jZWVkIHdpdGgKKwkJICogaGNhbSByZWdpc3RyYXRpb24gYW5kIHJlc291cmNlIGV4cG9zdXJlIHRvIG1pZC1sYXllci4KKwkJICovCisJCWlmIChwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9PSBJT0FfU1RBVEVfT1BFUkFUSU9OQUwpCisJCQlwbWNyYWlkX3JlZ2lzdGVyX2hjYW1zKHBpbnN0YW5jZSk7CisKKwkJd2FrZV91cF9hbGwoJnBpbnN0YW5jZS0+cmVzZXRfd2FpdF9xKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogcG1jcmFpZF9pbml0aWF0ZV9yZXNldCAtIGluaXRpYXRlcyByZXNldCBzZXF1ZW5jZS4gVGhpcyBpcyBjYWxsZWQgZnJvbQorICogSVNSL3Rhc2tsZXQgZHVyaW5nIGVycm9yIGludGVycnVwdHMgaW5jbHVkaW5nIElPQSB1bml0IGNoZWNrLiBJZiByZXNldAorICogaXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgaXQganVzdCByZXR1cm5zLCBvdGhlcndpc2UgaW5pdGlhdGVzIElPQSByZXNldAorICogdG8gYnJpbmcgSU9BIHVwIHRvIG9wZXJhdGlvbmFsIHN0YXRlLgorICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqCSBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfaW5pdGlhdGVfcmVzZXQoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZDsKKworCS8qIElmIHRoZSByZXNldCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLCBqdXN0IHJldHVybiwgb3RoZXJ3aXNlIHN0YXJ0CisJICogcmVzZXQgc2VxdWVuY2UgYW5kIHJldHVybgorCSAqLworCWlmICghcGluc3RhbmNlLT5pb2FfcmVzZXRfaW5fcHJvZ3Jlc3MpIHsKKwkJc2NzaV9ibG9ja19yZXF1ZXN0cyhwaW5zdGFuY2UtPmhvc3QpOworCQljbWQgPSBwbWNyYWlkX2dldF9mcmVlX2NtZChwaW5zdGFuY2UpOworCisJCWlmIChjbWQgPT0gTlVMTCkgeworCQkJcG1jcmFpZF9lcnIoIm5vIGNtbmQgYmxvY2tzIGZvciBpbml0aWF0ZV9yZXNldFxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlwaW5zdGFuY2UtPmlvYV9zaHV0ZG93bl90eXBlID0gU0hVVERPV05fTk9ORTsKKwkJcGluc3RhbmNlLT5yZXNldF9jbWQgPSBjbWQ7CisJCXBpbnN0YW5jZS0+Zm9yY2VfaW9hX3Jlc2V0ID0gMTsKKwkJcG1jcmFpZF9pb2FfcmVzZXQoY21kKTsKKwl9Cit9CisKKy8qKgorICogcG1jcmFpZF9yZXNldF9yZWxvYWQgLSB1dGlsaXR5IHJvdXRpbmUgZm9yIGRvaW5nIElPQSByZXNldCBlaXRoZXIgdG8gYnJpbmd1cAorICoJCQkgIG9yIGJyaW5nZG93biBJT0EKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBzaHV0ZG93bl90eXBlOiBzaHV0ZG93biB0eXBlIHRvIGJlIHVzZWQgTk9ORSwgTk9STUFMIG9yIEFCUlJFVgorICogQHRhcmdldF9zdGF0ZTogZXhwZWN0ZWQgdGFyZ2V0IHN0YXRlIGFmdGVyIHJlc2V0CisgKgorICogTm90ZTogVGhpcyBjb21tYW5kIGluaXRpYXRlcyByZXNldCBhbmQgd2FpdHMgZm9yIGl0cyBjb21wbGV0aW9uLiBIZW5jZSB0aGlzCisgKiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGlzci90aW1lci90YXNrbGV0IGZ1bmN0aW9ucyAodGltZW91dCBoYW5kbGVycywKKyAqIGVycm9yIHJlc3BvbnNlIGhhbmRsZXJzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMpLgorICoKKyAqIFJldHVybiBWYWx1ZQorICoJIDEgaW4gY2FzZSBpb2Ffc3RhdGUgaXMgbm90IHRhcmdldF9zdGF0ZSwgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9yZXNldF9yZWxvYWQoCisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSwKKwl1OCBzaHV0ZG93bl90eXBlLAorCXU4IHRhcmdldF9zdGF0ZQorKQoreworCXN0cnVjdCBwbWNyYWlkX2NtZCAqcmVzZXRfY21kID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJaW50IHJlc2V0ID0gMTsKKworCXNwaW5fbG9ja19pcnFzYXZlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCWlmIChwaW5zdGFuY2UtPmlvYV9yZXNldF9pbl9wcm9ncmVzcykgeworCQlwbWNyYWlkX2luZm8oInJlc2V0X3JlbG9hZDogcmVzZXQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzc1xuIik7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisKKwkJd2FpdF9ldmVudChwaW5zdGFuY2UtPnJlc2V0X3dhaXRfcSwKKwkJCSAgICFwaW5zdGFuY2UtPmlvYV9yZXNldF9pbl9wcm9ncmVzcyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCisJCWlmIChwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9PSBJT0FfU1RBVEVfREVBRCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywKKwkJCQkJICAgICAgIGxvY2tfZmxhZ3MpOworCQkJcG1jcmFpZF9pbmZvKCJyZXNldF9yZWxvYWQ6IElPQSBpcyBkZWFkXG4iKTsKKwkJCXJldHVybiByZXNldDsKKwkJfSBlbHNlIGlmIChwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9PSB0YXJnZXRfc3RhdGUpIHsKKwkJCXJlc2V0ID0gMDsKKwkJfQorCX0KKworCWlmIChyZXNldCkgeworCQlwbWNyYWlkX2luZm8oInJlc2V0X3JlbG9hZDogcHJvY2VlZGluZyB3aXRoIHJlc2V0XG4iKTsKKwkJc2NzaV9ibG9ja19yZXF1ZXN0cyhwaW5zdGFuY2UtPmhvc3QpOworCQlyZXNldF9jbWQgPSBwbWNyYWlkX2dldF9mcmVlX2NtZChwaW5zdGFuY2UpOworCisJCWlmIChyZXNldF9jbWQgPT0gTlVMTCkgeworCQkJcG1jcmFpZF9lcnIoIm5vIGZyZWUgY21uZCBmb3IgcmVzZXRfcmVsb2FkXG4iKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgICAgICBsb2NrX2ZsYWdzKTsKKwkJCXJldHVybiByZXNldDsKKwkJfQorCisJCWlmIChzaHV0ZG93bl90eXBlID09IFNIVVRET1dOX05PUk1BTCkKKwkJCXBpbnN0YW5jZS0+aW9hX2JyaW5nZG93biA9IDE7CisKKwkJcGluc3RhbmNlLT5pb2Ffc2h1dGRvd25fdHlwZSA9IHNodXRkb3duX3R5cGU7CisJCXBpbnN0YW5jZS0+cmVzZXRfY21kID0gcmVzZXRfY21kOworCQlwaW5zdGFuY2UtPmZvcmNlX2lvYV9yZXNldCA9IHJlc2V0OworCQlwbWNyYWlkX2luZm8oInJlc2V0X3JlbG9hZDogaW5pdGlhdGluZyByZXNldFxuIik7CisJCXBtY3JhaWRfaW9hX3Jlc2V0KHJlc2V0X2NtZCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCQlwbWNyYWlkX2luZm8oInJlc2V0X3JlbG9hZDogd2FpdGluZyBmb3IgcmVzZXQgdG8gY29tcGxldGVcbiIpOworCQl3YWl0X2V2ZW50KHBpbnN0YW5jZS0+cmVzZXRfd2FpdF9xLAorCQkJICAgIXBpbnN0YW5jZS0+aW9hX3Jlc2V0X2luX3Byb2dyZXNzKTsKKworCQlwbWNyYWlkX2luZm8oInJlc2V0X3JlbG9hZDogcmVzZXQgaXMgY29tcGxldGUgISEgXG4iKTsKKwkJc2NzaV91bmJsb2NrX3JlcXVlc3RzKHBpbnN0YW5jZS0+aG9zdCk7CisJCWlmIChwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9PSB0YXJnZXRfc3RhdGUpCisJCQlyZXNldCA9IDA7CisJfQorCisJcmV0dXJuIHJlc2V0OworfQorCisvKioKKyAqIHBtY3JhaWRfcmVzZXRfYnJpbmdkb3duIC0gd3JhcHBlciBvdmVyIHBtY3JhaWRfcmVzZXRfcmVsb2FkIHRvIGJyaW5nZG93biBJT0EKKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgZnJvbSBwbWNyYWlkX3Jlc2V0X3JlbG9hZAorICovCitzdGF0aWMgaW50IHBtY3JhaWRfcmVzZXRfYnJpbmdkb3duKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJcmV0dXJuIHBtY3JhaWRfcmVzZXRfcmVsb2FkKHBpbnN0YW5jZSwKKwkJCQkgICAgU0hVVERPV05fTk9STUFMLAorCQkJCSAgICBJT0FfU1RBVEVfVU5LTk9XTik7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZXNldF9icmluZ3VwIC0gd3JhcHBlciBvdmVyIHBtY3JhaWRfcmVzZXRfcmVsb2FkIHRvIGJyaW5nIHVwIElPQQorICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCSB3aGF0ZXZlciBpcyByZXR1cm5lZCBmcm9tIHBtY3JhaWRfcmVzZXRfcmVsb2FkCisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9yZXNldF9icmluZ3VwKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJcmV0dXJuIHBtY3JhaWRfcmVzZXRfcmVsb2FkKHBpbnN0YW5jZSwKKwkJCQkgICAgU0hVVERPV05fTk9ORSwKKwkJCQkgICAgSU9BX1NUQVRFX09QRVJBVElPTkFMKTsKK30KKworLyoqCisgKiBwbWNyYWlkX3JlcXVlc3Rfc2Vuc2UgLSBTZW5kIHJlcXVlc3Qgc2Vuc2UgdG8gYSBkZXZpY2UKKyAqIEBjbWQ6IHBtY3JhaWQgY29tbWFuZCBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgcmVxdWVzdCBzZW5zZSB0byBhIGRldmljZSBhcyBhIHJlc3VsdCBvZiBhIGNoZWNrCisgKiBjb25kaXRpb24uIFRoaXMgbWV0aG9kIHJlLXVzZXMgdGhlIHNhbWUgY29tbWFuZCBibG9jayB0aGF0IGZhaWxlZCBlYXJsaWVyLgorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3JlcXVlc3Rfc2Vuc2Uoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHBtY3JhaWRfaW9hcmNiICppb2FyY2IgPSAmY21kLT5pb2FfY2ItPmlvYXJjYjsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjICppb2FkbCA9IGlvYXJjYi0+YWRkX2RhdGEudS5pb2FkbDsKKworCS8qIGFsbG9jYXRlIERNQWFibGUgbWVtb3J5IGZvciBzZW5zZSBidWZmZXJzICovCisJY21kLT5zZW5zZV9idWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChjbWQtPmRydl9pbnN0LT5wZGV2LAorCQkJCQkJIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwKKwkJCQkJCSAmY21kLT5zZW5zZV9idWZmZXJfZG1hKTsKKworCWlmIChjbWQtPnNlbnNlX2J1ZmZlciA9PSBOVUxMKSB7CisJCXBtY3JhaWRfZXJyCisJCQkoImNvdWxkbid0IGFsbG9jYXRlIHNlbnNlIGJ1ZmZlciBmb3IgcmVxdWVzdCBzZW5zZVxuIik7CisJCXBtY3JhaWRfZXJwX2RvbmUoY21kKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHJlLXVzZSB0aGUgY29tbWFuZCBibG9jayAqLworCW1lbXNldCgmY21kLT5pb2FfY2ItPmlvYXNhLCAwLCBzaXplb2Yoc3RydWN0IHBtY3JhaWRfaW9hc2EpKTsKKwltZW1zZXQoaW9hcmNiLT5jZGIsIDAsIFBNQ1JBSURfTUFYX0NEQl9MRU4pOworCWlvYXJjYi0+cmVxdWVzdF9mbGFnczAgPSAoU1lOQ19DT01QTEVURSB8CisJCQkJICBOT19MSU5LX0RFU0NTIHwKKwkJCQkgIElOSElCSVRfVUxfQ0hFQ0spOworCWlvYXJjYi0+cmVxdWVzdF90eXBlID0gUkVRX1RZUEVfU0NTSTsKKwlpb2FyY2ItPmNkYlswXSA9IFJFUVVFU1RfU0VOU0U7CisJaW9hcmNiLT5jZGJbNF0gPSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7CisKKwlpb2FyY2ItPmlvYWRsX2J1c19hZGRyID0gY3B1X3RvX2xlNjQoKGNtZC0+aW9hX2NiX2J1c19hZGRyKSArCisJCQkJCW9mZnNldG9mKHN0cnVjdCBwbWNyYWlkX2lvYXJjYiwKKwkJCQkJCWFkZF9kYXRhLnUuaW9hZGxbMF0pKTsKKwlpb2FyY2ItPmlvYWRsX2xlbmd0aCA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjKSk7CisKKwlpb2FyY2ItPmRhdGFfdHJhbnNmZXJfbGVuZ3RoID0gY3B1X3RvX2xlMzIoU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKworCWlvYWRsLT5hZGRyZXNzID0gY3B1X3RvX2xlNjQoY21kLT5zZW5zZV9idWZmZXJfZG1hKTsKKwlpb2FkbC0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOworCWlvYWRsLT5mbGFncyA9IGNwdV90b19sZTMyKElPQURMX0ZMQUdTX0xBU1RfREVTQyk7CisKKwkvKiByZXF1ZXN0IHNlbnNlIG1pZ2h0IGJlIGNhbGxlZCBhcyBwYXJ0IG9mIGVycm9yIHJlc3BvbnNlIHByb2Nlc3NpbmcKKwkgKiB3aGljaCBydW5zIGluIHRhc2tsZXRzIGNvbnRleHQuIEl0IGlzIHBvc3NpYmxlIHRoYXQgbWlkLWxheWVyIG1pZ2h0CisJICogc2NoZWR1bGUgcXVldWVjb21tYW5kIGR1cmluZyB0aGlzIHRpbWUsIGhlbmNlLCB3cml0dGluZyB0byBJT0FSUklOCisJICogbXVzdCBiZSBwcm90ZWN0IGJ5IGhvc3RfbG9jaworCSAqLworCXBtY3JhaWRfc2VuZF9jbWQoY21kLCBwbWNyYWlkX2VycF9kb25lLAorCQkJIFBNQ1JBSURfUkVRVUVTVF9TRU5TRV9USU1FT1VULAorCQkJIHBtY3JhaWRfdGltZW91dF9oYW5kbGVyKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2NhbmNlbF9hbGwgLSBjYW5jZWwgYWxsIG91dHN0YW5kaW5nIElPQVJDQnMgYXMgcGFydCBvZiBlcnJvciByZWNvdmVyeQorICogQGNtZDogY29tbWFuZCB0aGF0IGZhaWxlZAorICogQHNlbnNlOiB0cnVlIGlmIHJlcXVlc3Rfc2Vuc2UgaXMgcmVxdWlyZWQgYWZ0ZXIgY2FuY2VsIGFsbAorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBjYW5jZWwgYWxsIHRvIGEgZGV2aWNlIHRvIGNsZWFyIHRoZSBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9jYW5jZWxfYWxsKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kLCB1MzIgc2Vuc2UpCit7CisJc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbWQgPSBjbWQtPnNjc2lfY21kOworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiAqaW9hcmNiID0gJmNtZC0+aW9hX2NiLT5pb2FyY2I7CisJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlcyA9IHNjc2lfY21kLT5kZXZpY2UtPmhvc3RkYXRhOworCXZvaWQgKCpjbWRfZG9uZSkgKHN0cnVjdCBwbWNyYWlkX2NtZCAqKSA9IHNlbnNlID8gcG1jcmFpZF9lcnBfZG9uZQorCQkJCQkJCTogcG1jcmFpZF9yZXF1ZXN0X3NlbnNlOworCisJbWVtc2V0KGlvYXJjYi0+Y2RiLCAwLCBQTUNSQUlEX01BWF9DREJfTEVOKTsKKwlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MwID0gU1lOQ19PVkVSUklERTsKKwlpb2FyY2ItPnJlcXVlc3RfdHlwZSA9IFJFUV9UWVBFX0lPQUNNRDsKKwlpb2FyY2ItPmNkYlswXSA9IFBNQ1JBSURfQ0FOQ0VMX0FMTF9SRVFVRVNUUzsKKworCWlmIChSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpKQorCQlpb2FyY2ItPmNkYlsxXSA9IFBNQ1JBSURfU1lOQ19DT01QTEVURV9BRlRFUl9DQU5DRUw7CisKKwlpb2FyY2ItPmlvYWRsX2J1c19hZGRyID0gMDsKKwlpb2FyY2ItPmlvYWRsX2xlbmd0aCA9IDA7CisJaW9hcmNiLT5kYXRhX3RyYW5zZmVyX2xlbmd0aCA9IDA7CisJaW9hcmNiLT5pb2FyY2JfYnVzX2FkZHIgJj0gKH4weDFGVUxMKTsKKworCS8qIHdyaXRpbmcgdG8gSU9BUlJJTiBtdXN0IGJlIHByb3RlY3RlZCBieSBob3N0X2xvY2ssIGFzIG1pZC1sYXllcgorCSAqIHNjaGVkdWxlIHF1ZXVlY29tbWFuZCB3aGlsZSB3ZSBhcmUgZG9pbmcgdGhpcworCSAqLworCXBtY3JhaWRfc2VuZF9jbWQoY21kLCBjbWRfZG9uZSwKKwkJCSBQTUNSQUlEX1JFUVVFU1RfU0VOU0VfVElNRU9VVCwKKwkJCSBwbWNyYWlkX3RpbWVvdXRfaGFuZGxlcik7Cit9CisKKy8qKgorICogcG1jcmFpZF9mcmFtZV9hdXRvX3NlbnNlOiBmcmFtZSBmaXhlZCBmb3JtYXQgc2Vuc2UgaW5mb3JtYXRpb24KKyAqCisgKiBAY21kOiBwb2ludGVyIHRvIGZhaWxpbmcgY29tbWFuZCBibG9jaworICoKKyAqIFJldHVybiB2YWx1ZQorICogIG5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9mcmFtZV9hdXRvX3NlbnNlKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXU4ICpzZW5zZV9idWYgPSBjbWQtPnNjc2lfY21kLT5zZW5zZV9idWZmZXI7CisJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlcyA9IGNtZC0+c2NzaV9jbWQtPmRldmljZS0+aG9zdGRhdGE7CisJc3RydWN0IHBtY3JhaWRfaW9hc2EgKmlvYXNhID0gJmNtZC0+aW9hX2NiLT5pb2FzYTsKKwl1MzIgaW9hc2MgPSBsZTMyX3RvX2NwdShpb2FzYS0+aW9hc2MpOworCXUzMiBmYWlsaW5nX2xiYSA9IDA7CisKKwltZW1zZXQoc2Vuc2VfYnVmLCAwLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOworCWNtZC0+c2NzaV9jbWQtPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKworCWlmIChSRVNfSVNfVlNFVChyZXMtPmNmZ19lbnRyeSkgJiYKKwkgICAgaW9hc2MgPT0gUE1DUkFJRF9JT0FTQ19NRV9SRUFEX0VSUk9SX05PX1JFQUxMT0MgJiYKKwkgICAgaW9hc2EtPnUudnNldC5mYWlsaW5nX2xiYV9oaSAhPSAwKSB7CisKKwkJc2Vuc2VfYnVmWzBdID0gMHg3MjsKKwkJc2Vuc2VfYnVmWzFdID0gUE1DUkFJRF9JT0FTQ19TRU5TRV9LRVkoaW9hc2MpOworCQlzZW5zZV9idWZbMl0gPSBQTUNSQUlEX0lPQVNDX1NFTlNFX0NPREUoaW9hc2MpOworCQlzZW5zZV9idWZbM10gPSBQTUNSQUlEX0lPQVNDX1NFTlNFX1FVQUwoaW9hc2MpOworCisJCXNlbnNlX2J1Zls3XSA9IDEyOworCQlzZW5zZV9idWZbOF0gPSAwOworCQlzZW5zZV9idWZbOV0gPSAweDBBOworCQlzZW5zZV9idWZbMTBdID0gMHg4MDsKKworCQlmYWlsaW5nX2xiYSA9IGxlMzJfdG9fY3B1KGlvYXNhLT51LnZzZXQuZmFpbGluZ19sYmFfaGkpOworCisJCXNlbnNlX2J1ZlsxMl0gPSAoZmFpbGluZ19sYmEgJiAweGZmMDAwMDAwKSA+PiAyNDsKKwkJc2Vuc2VfYnVmWzEzXSA9IChmYWlsaW5nX2xiYSAmIDB4MDBmZjAwMDApID4+IDE2OworCQlzZW5zZV9idWZbMTRdID0gKGZhaWxpbmdfbGJhICYgMHgwMDAwZmYwMCkgPj4gODsKKwkJc2Vuc2VfYnVmWzE1XSA9IGZhaWxpbmdfbGJhICYgMHgwMDAwMDBmZjsKKworCQlmYWlsaW5nX2xiYSA9IGxlMzJfdG9fY3B1KGlvYXNhLT51LnZzZXQuZmFpbGluZ19sYmFfbG8pOworCisJCXNlbnNlX2J1ZlsxNl0gPSAoZmFpbGluZ19sYmEgJiAweGZmMDAwMDAwKSA+PiAyNDsKKwkJc2Vuc2VfYnVmWzE3XSA9IChmYWlsaW5nX2xiYSAmIDB4MDBmZjAwMDApID4+IDE2OworCQlzZW5zZV9idWZbMThdID0gKGZhaWxpbmdfbGJhICYgMHgwMDAwZmYwMCkgPj4gODsKKwkJc2Vuc2VfYnVmWzE5XSA9IGZhaWxpbmdfbGJhICYgMHgwMDAwMDBmZjsKKwl9IGVsc2UgeworCQlzZW5zZV9idWZbMF0gPSAweDcwOworCQlzZW5zZV9idWZbMl0gPSBQTUNSQUlEX0lPQVNDX1NFTlNFX0tFWShpb2FzYyk7CisJCXNlbnNlX2J1ZlsxMl0gPSBQTUNSQUlEX0lPQVNDX1NFTlNFX0NPREUoaW9hc2MpOworCQlzZW5zZV9idWZbMTNdID0gUE1DUkFJRF9JT0FTQ19TRU5TRV9RVUFMKGlvYXNjKTsKKworCQlpZiAoaW9hc2MgPT0gUE1DUkFJRF9JT0FTQ19NRV9SRUFEX0VSUk9SX05PX1JFQUxMT0MpIHsKKwkJCWlmIChSRVNfSVNfVlNFVChyZXMtPmNmZ19lbnRyeSkpCisJCQkJZmFpbGluZ19sYmEgPQorCQkJCQlsZTMyX3RvX2NwdShpb2FzYS0+dS4KKwkJCQkJCSB2c2V0LmZhaWxpbmdfbGJhX2xvKTsKKwkJCXNlbnNlX2J1ZlswXSB8PSAweDgwOworCQkJc2Vuc2VfYnVmWzNdID0gKGZhaWxpbmdfbGJhID4+IDI0KSAmIDB4ZmY7CisJCQlzZW5zZV9idWZbNF0gPSAoZmFpbGluZ19sYmEgPj4gMTYpICYgMHhmZjsKKwkJCXNlbnNlX2J1Zls1XSA9IChmYWlsaW5nX2xiYSA+PiA4KSAmIDB4ZmY7CisJCQlzZW5zZV9idWZbNl0gPSBmYWlsaW5nX2xiYSAmIDB4ZmY7CisJCX0KKworCQlzZW5zZV9idWZbN10gPSA2OyAvKiBhZGRpdGlvbmFsIGxlbmd0aCAqLworCX0KK30KKworLyoqCisgKiBwbWNyYWlkX2Vycm9yX2hhbmRsZXIgLSBFcnJvciByZXNwb25zZSBoYW5kbGVycyBmb3IgYSBTQ1NJIG9wCisgKiBAY21kOiBwb2ludGVyIHRvIHBtY3JhaWRfY21kIHRoYXQgaGFzIGZhaWxlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0byBpbml0aWF0ZSBFUlAgb24gdGhlIGFmZmVjdGVkCisgKiBkZXZpY2UuIFRoaXMgaXMgY2FsbGVkIGZyb20gYSB0YXNrbGV0LCB3aGljaCBkb2Vzbid0IGhvbGQgYW55IGxvY2tzLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCSAwIGl0IGNhbGxlciBjYW4gY29tcGxldGUgdGhlIHJlcXVlc3QsIG90aGVyd2lzZSAxIHdoZXJlIGluIGVycm9yCisgKgkgaGFuZGxlciBpdHNlbGYgY29tcGxldGVzIHRoZSByZXF1ZXN0IGFuZCByZXR1cm5zIHRoZSBjb21tYW5kIGJsb2NrCisgKgkgYmFjayB0byBmcmVlLXBvb2wKKyAqLworc3RhdGljIGludCBwbWNyYWlkX2Vycm9yX2hhbmRsZXIoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbWQgPSBjbWQtPnNjc2lfY21kOworCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXMgPSBzY3NpX2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FzYSAqaW9hc2EgPSAmY21kLT5pb2FfY2ItPmlvYXNhOworCXUzMiBpb2FzYyA9IGxlMzJfdG9fY3B1KGlvYXNhLT5pb2FzYyk7CisJdTMyIG1hc2tlZF9pb2FzYyA9IGlvYXNjICYgUE1DUkFJRF9JT0FTQ19TRU5TRV9NQVNLOworCXUzMiBzZW5zZV9jb3BpZWQgPSAwOworCisJaWYgKCFyZXMpIHsKKwkJcG1jcmFpZF9pbmZvKCJyZXNvdXJjZSBwb2ludGVyIGlzIE5VTExcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJZiB0aGlzIHdhcyBhIFNDU0kgcmVhZC93cml0ZSBjb21tYW5kIGtlZXAgY291bnQgb2YgZXJyb3JzICovCisJaWYgKFNDU0lfQ01EX1RZUEUoc2NzaV9jbWQtPmNtbmRbMF0pID09IFNDU0lfUkVBRF9DTUQpCisJCWF0b21pY19pbmMoJnJlcy0+cmVhZF9mYWlsdXJlcyk7CisJZWxzZSBpZiAoU0NTSV9DTURfVFlQRShzY3NpX2NtZC0+Y21uZFswXSkgPT0gU0NTSV9XUklURV9DTUQpCisJCWF0b21pY19pbmMoJnJlcy0+d3JpdGVfZmFpbHVyZXMpOworCisJaWYgKCFSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpICYmCisJCW1hc2tlZF9pb2FzYyAhPSBQTUNSQUlEX0lPQVNDX0hXX0RFVklDRV9CVVNfU1RBVFVTX0VSUk9SKSB7CisJCXBtY3JhaWRfZnJhbWVfYXV0b19zZW5zZShjbWQpOworCX0KKworCS8qIExvZyBJT0FTQy9JT0FTQSBpbmZvcm1hdGlvbiBiYXNlZCBvbiB1c2VyIHNldHRpbmdzICovCisJcG1jcmFpZF9pb2FzY19sb2dnZXIoaW9hc2MsIGNtZCk7CisKKwlzd2l0Y2ggKG1hc2tlZF9pb2FzYykgeworCisJY2FzZSBQTUNSQUlEX0lPQVNDX0FDX1RFUk1JTkFURURfQllfSE9TVDoKKwkJc2NzaV9jbWQtPnJlc3VsdCB8PSAoRElEX0FCT1JUIDw8IDE2KTsKKwkJYnJlYWs7CisKKwljYXNlIFBNQ1JBSURfSU9BU0NfSVJfSU5WQUxJRF9SRVNPVVJDRV9IQU5ETEU6CisJY2FzZSBQTUNSQUlEX0lPQVNDX0hXX0NBTk5PVF9DT01NVU5JQ0FURToKKwkJc2NzaV9jbWQtPnJlc3VsdCB8PSAoRElEX05PX0NPTk5FQ1QgPDwgMTYpOworCQlicmVhazsKKworCWNhc2UgUE1DUkFJRF9JT0FTQ19OUl9TWU5DX1JFUVVJUkVEOgorCQlyZXMtPnN5bmNfcmVxZCA9IDE7CisJCXNjc2lfY21kLT5yZXN1bHQgfD0gKERJRF9JTU1fUkVUUlkgPDwgMTYpOworCQlicmVhazsKKworCWNhc2UgUE1DUkFJRF9JT0FTQ19NRV9SRUFEX0VSUk9SX05PX1JFQUxMT0M6CisJCXNjc2lfY21kLT5yZXN1bHQgfD0gKERJRF9QQVNTVEhST1VHSCA8PCAxNik7CisJCWJyZWFrOworCisJY2FzZSBQTUNSQUlEX0lPQVNDX1VBX0JVU19XQVNfUkVTRVQ6CisJY2FzZSBQTUNSQUlEX0lPQVNDX1VBX0JVU19XQVNfUkVTRVRfQllfT1RIRVI6CisJCWlmICghcmVzLT5yZXNldF9wcm9ncmVzcykKKwkJCXNjc2lfcmVwb3J0X2J1c19yZXNldChwaW5zdGFuY2UtPmhvc3QsCisJCQkJCSAgICAgIHNjc2lfY21kLT5kZXZpY2UtPmNoYW5uZWwpOworCQlzY3NpX2NtZC0+cmVzdWx0IHw9IChESURfRVJST1IgPDwgMTYpOworCQlicmVhazsKKworCWNhc2UgUE1DUkFJRF9JT0FTQ19IV19ERVZJQ0VfQlVTX1NUQVRVU19FUlJPUjoKKwkJc2NzaV9jbWQtPnJlc3VsdCB8PSBQTUNSQUlEX0lPQVNDX1NFTlNFX1NUQVRVUyhpb2FzYyk7CisJCXJlcy0+c3luY19yZXFkID0gMTsKKworCQkvKiBpZiBjaGVja19jb25kaXRpb24gaXMgbm90IGFjdGl2ZSByZXR1cm4gd2l0aCBlcnJvciBvdGhlcndpc2UKKwkJICogZ2V0L2ZyYW1lIHRoZSBzZW5zZSBidWZmZXIKKwkJICovCisJCWlmIChQTUNSQUlEX0lPQVNDX1NFTlNFX1NUQVRVUyhpb2FzYykgIT0KKwkJICAgIFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTiAmJgorCQkgICAgUE1DUkFJRF9JT0FTQ19TRU5TRV9TVEFUVVMoaW9hc2MpICE9IFNBTV9TVEFUX0FDQV9BQ1RJVkUpCisJCQlyZXR1cm4gMDsKKworCQkvKiBJZiB3ZSBoYXZlIGF1dG8gc2Vuc2UgZGF0YSBhcyBwYXJ0IG9mIElPQVNBIHBhc3MgaXQgdG8KKwkJICogbWlkLWxheWVyCisJCSAqLworCQlpZiAoaW9hc2EtPmF1dG9fc2Vuc2VfbGVuZ3RoICE9IDApIHsKKwkJCXNob3J0IHNlbnNlX2xlbiA9IGlvYXNhLT5hdXRvX3NlbnNlX2xlbmd0aDsKKwkJCWludCBkYXRhX3NpemUgPSBtaW5fdCh1MTYsIGxlMTZfdG9fY3B1KHNlbnNlX2xlbiksCisJCQkJCSAgICAgIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CisKKwkJCW1lbWNweShzY3NpX2NtZC0+c2Vuc2VfYnVmZmVyLAorCQkJICAgICAgIGlvYXNhLT5zZW5zZV9kYXRhLAorCQkJICAgICAgIGRhdGFfc2l6ZSk7CisJCQlzZW5zZV9jb3BpZWQgPSAxOworCQl9CisKKwkJaWYgKFJFU19JU19HU0NTSShyZXMtPmNmZ19lbnRyeSkpIHsKKwkJCXBtY3JhaWRfY2FuY2VsX2FsbChjbWQsIHNlbnNlX2NvcGllZCk7CisJCX0gZWxzZSBpZiAoc2Vuc2VfY29waWVkKSB7CisJCQlwbWNyYWlkX2VycF9kb25lKGNtZCk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlICB7CisJCQlwbWNyYWlkX3JlcXVlc3Rfc2Vuc2UoY21kKTsKKwkJfQorCisJCXJldHVybiAxOworCisJY2FzZSBQTUNSQUlEX0lPQVNDX05SX0lOSVRfQ01EX1JFUVVJUkVEOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWlmIChQTUNSQUlEX0lPQVNDX1NFTlNFX0tFWShpb2FzYykgPiBSRUNPVkVSRURfRVJST1IpCisJCQlzY3NpX2NtZC0+cmVzdWx0IHw9IChESURfRVJST1IgPDwgMTYpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZXNldF9kZXZpY2UgLSBkZXZpY2UgcmVzZXQgaGFuZGxlciBmdW5jdGlvbnMKKyAqCisgKiBAc2NzaV9jbWQ6IHNjc2kgY29tbWFuZCBzdHJ1Y3QKKyAqIEBtb2RpZmllcjogcmVzZXQgbW9kaWZpZXIgaW5kaWNhdGluZyB0aGUgcmVzZXQgc2VxdWVuY2UgdG8gYmUgcGVyZm9ybWVkCisgKgorICogVGhpcyBmdW5jdGlvbiBpc3N1ZXMgYSBkZXZpY2UgcmVzZXQgdG8gdGhlIGFmZmVjdGVkIGRldmljZS4KKyAqIEEgTFVOIHJlc2V0IHdpbGwgYmUgc2VudCB0byB0aGUgZGV2aWNlIGZpcnN0LiBJZiB0aGF0IGRvZXMKKyAqIG5vdCB3b3JrLCBhIHRhcmdldCByZXNldCB3aWxsIGJlIHNlbnQuCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJU1VDQ0VTUyAvIEZBSUxFRAorICovCitzdGF0aWMgaW50IHBtY3JhaWRfcmVzZXRfZGV2aWNlKAorCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kLAorCXVuc2lnbmVkIGxvbmcgdGltZW91dCwKKwl1OCBtb2RpZmllcgorKQoreworCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kOworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2U7CisJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlczsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FyY2IgKmlvYXJjYjsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdTMyIGlvYXNjOworCisJcGluc3RhbmNlID0KKwkJKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICopc2NzaV9jbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CisJcmVzID0gc2NzaV9jbWQtPmRldmljZS0+aG9zdGRhdGE7CisKKwlpZiAoIXJlcykgeworCQlwbWNyYWlkX2VycigicmVzZXRfZGV2aWNlOiBOVUxMIHJlc291cmNlIHBvaW50ZXJcbiIpOworCQlyZXR1cm4gRkFJTEVEOworCX0KKworCS8qIElmIGFkYXB0ZXIgaXMgY3VycmVudGx5IGdvaW5nIHRocm91Z2ggcmVzZXQvcmVsb2FkLCByZXR1cm4gZmFpbGVkLgorCSAqIFRoaXMgd2lsbCBmb3JjZSB0aGUgbWlkLWxheWVyIHRvIGNhbGwgX2VoX2J1cy9ob3N0IHJlc2V0LCB3aGljaAorCSAqIHdpbGwgdGhlbiBnbyB0byBzbGVlcCBhbmQgd2FpdCBmb3IgdGhlIHJlc2V0IHRvIGNvbXBsZXRlCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCWlmIChwaW5zdGFuY2UtPmlvYV9yZXNldF9pbl9wcm9ncmVzcyB8fAorCSAgICBwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9PSBJT0FfU1RBVEVfREVBRCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJcmV0dXJuIEZBSUxFRDsKKwl9CisKKwlyZXMtPnJlc2V0X3Byb2dyZXNzID0gMTsKKwlwbWNyYWlkX2luZm8oIlJlc2V0dGluZyAlcyByZXNvdXJjZSB3aXRoIGFkZHIgJXhcbiIsCisJCSAgICAgKChtb2RpZmllciAmIFJFU0VUX0RFVklDRV9MVU4pID8gIkxVTiIgOgorCQkgICAgICgobW9kaWZpZXIgJiBSRVNFVF9ERVZJQ0VfVEFSR0VUKSA/ICJUQVJHRVQiIDogIkJVUyIpKSwKKwkJICAgICBsZTMyX3RvX2NwdShyZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV9hZGRyZXNzKSk7CisKKwkvKiBnZXQgYSBmcmVlIGNtZCBibG9jayAqLworCWNtZCA9IHBtY3JhaWRfZ2V0X2ZyZWVfY21kKHBpbnN0YW5jZSk7CisKKwlpZiAoY21kID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJCXBtY3JhaWRfZXJyKCIlczogbm8gY21kIGJsb2NrcyBhcmUgYXZhaWxhYmxlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBGQUlMRUQ7CisJfQorCisJaW9hcmNiID0gJmNtZC0+aW9hX2NiLT5pb2FyY2I7CisJaW9hcmNiLT5yZXNvdXJjZV9oYW5kbGUgPSByZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV9oYW5kbGU7CisJaW9hcmNiLT5yZXF1ZXN0X3R5cGUgPSBSRVFfVFlQRV9JT0FDTUQ7CisJaW9hcmNiLT5jZGJbMF0gPSBQTUNSQUlEX1JFU0VUX0RFVklDRTsKKworCS8qIEluaXRpYWxpemUgcmVzZXQgbW9kaWZpZXIgYml0cyAqLworCWlmIChtb2RpZmllcikKKwkJbW9kaWZpZXIgPSBFTkFCTEVfUkVTRVRfTU9ESUZJRVIgfCBtb2RpZmllcjsKKworCWlvYXJjYi0+Y2RiWzFdID0gbW9kaWZpZXI7CisKKwlpbml0X2NvbXBsZXRpb24oJmNtZC0+d2FpdF9mb3JfY29tcGxldGlvbik7CisJY21kLT5jb21wbGV0aW9uX3JlcSA9IDE7CisKKwlwbWNyYWlkX2luZm8oImNtZChDREJbMF0gPSAleCkgZm9yICV4IHdpdGggaW5kZXggPSAlZFxuIiwKKwkJICAgICBjbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSwKKwkJICAgICBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hcmNiLnJlc291cmNlX2hhbmRsZSksCisJCSAgICAgbGUzMl90b19jcHUoY21kLT5pb2FfY2ItPmlvYXJjYi5yZXNwb25zZV9oYW5kbGUpID4+IDIpOworCisJcG1jcmFpZF9zZW5kX2NtZChjbWQsCisJCQkgcG1jcmFpZF9pbnRlcm5hbF9kb25lLAorCQkJIHRpbWVvdXQsCisJCQkgcG1jcmFpZF90aW1lb3V0X2hhbmRsZXIpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisKKwkvKiBSRVNFVF9ERVZJQ0UgY29tbWFuZCBjb21wbGV0ZXMgYWZ0ZXIgYWxsIHBlbmRpbmcgSU9BUkNCcyBhcmUKKwkgKiBjb21wbGV0ZWQuIE9uY2UgdGhpcyBjb21tYW5kIGlzIGNvbXBsZXRlZCwgcG1jcmFpbmRfaW50ZXJuYWxfZG9uZQorCSAqIHdpbGwgd2FrZSB1cCB0aGUgJ2NvbXBsZXRpb24nIHF1ZXVlLgorCSAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNtZC0+d2FpdF9mb3JfY29tcGxldGlvbik7CisKKwkvKiBjb21wbGV0ZSB0aGUgY29tbWFuZCBoZXJlIGl0c2VsZiBhbmQgcmV0dXJuIHRoZSBjb21tYW5kIGJsb2NrCisJICogdG8gZnJlZSBsaXN0CisJICovCisJcG1jcmFpZF9yZXR1cm5fY21kKGNtZCk7CisJcmVzLT5yZXNldF9wcm9ncmVzcyA9IDA7CisJaW9hc2MgPSBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hc2EuaW9hc2MpOworCisJLyogc2V0IHRoZSByZXR1cm4gdmFsdWUgYmFzZWQgb24gdGhlIHJldHVybmVkIGlvYXNjICovCisJcmV0dXJuIFBNQ1JBSURfSU9BU0NfU0VOU0VfS0VZKGlvYXNjKSA/IEZBSUxFRCA6IFNVQ0NFU1M7Cit9CisKKy8qKgorICogX3BtY3JhaWRfaW9fZG9uZSAtIGhlbHBlciBmb3IgcG1jcmFpZF9pb19kb25lIGZ1bmN0aW9uCisgKgorICogQGNtZDogcG9pbnRlciB0byBwbWNyYWlkIGNvbW1hbmQgc3RydWN0CisgKiBAcmVzbGVuOiByZXNpZHVhbCBkYXRhIGxlbmd0aCB0byBiZSBzZXQgaW4gdGhlIGlvYXNhCisgKiBAaW9hc2M6IGlvYXNjIGVpdGhlciByZXR1cm5lZCBieSBJT0Egb3Igc2V0IGJ5IGRyaXZlciBpdHNlbGYuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGJ5IHBtY3JhaWRfaW9fZG9uZSB0byBjb21wbGV0ZSBtaWQtbGF5ZXIKKyAqIHNjc2kgb3BzLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCSAgMCBpZiBjYWxsZXIgaXMgcmVxdWlyZWQgdG8gcmV0dXJuIGl0IHRvIGZyZWVfcG9vbC4gUmV0dXJucyAxIGlmCisgKgkgIGNhbGxlciBuZWVkIG5vdCB3b3JyeSBhYm91dCBmcmVlaW5nIGNvbW1hbmQgYmxvY2sgYXMgZXJyb3IgaGFuZGxlcgorICoJICB3aWxsIHRha2UgY2FyZSBvZiB0aGF0LgorICovCisKK3N0YXRpYyBpbnQgX3BtY3JhaWRfaW9fZG9uZShzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCwgaW50IHJlc2xlbiwgaW50IGlvYXNjKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kID0gY21kLT5zY3NpX2NtZDsKKwlpbnQgcmMgPSAwOworCisJc2NzaV9zZXRfcmVzaWQoc2NzaV9jbWQsIHJlc2xlbik7CisKKwlwbWNyYWlkX2luZm8oInJlc3BvbnNlKCVkKSBDREJbMF0gPSAleCBpb2FzYzpyZXN1bHQ6ICV4OiV4XG4iLAorCQlsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hcmNiLnJlc3BvbnNlX2hhbmRsZSkgPj4gMiwKKwkJY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sCisJCWlvYXNjLCBzY3NpX2NtZC0+cmVzdWx0KTsKKworCWlmIChQTUNSQUlEX0lPQVNDX1NFTlNFX0tFWShpb2FzYykgIT0gMCkKKwkJcmMgPSBwbWNyYWlkX2Vycm9yX2hhbmRsZXIoY21kKTsKKworCWlmIChyYyA9PSAwKSB7CisJCXNjc2lfZG1hX3VubWFwKHNjc2lfY21kKTsKKwkJc2NzaV9jbWQtPnNjc2lfZG9uZShzY3NpX2NtZCk7CisJfQorCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHBtY3JhaWRfaW9fZG9uZSAtIFNDU0kgY29tcGxldGlvbiBmdW5jdGlvbgorICoKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gcG1jcmFpZCBjb21tYW5kIHN0cnVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBieSB0YXNrbGV0L21pZC1sYXllciBlcnJvciBoYW5kbGVyIHRvIGNvbXBsZXRpbmcKKyAqIHRoZSBTQ1NJIG9wcyBzZW50IGZyb20gbWlkLWxheWVyLgorICoKKyAqIFJldHVybiB2YWx1ZQorICoJICBub25lCisgKi8KKworc3RhdGljIHZvaWQgcG1jcmFpZF9pb19kb25lKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXUzMiBpb2FzYyA9IGxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FzYS5pb2FzYyk7CisJdTMyIHJlc2xlbiA9IGxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FzYS5yZXNpZHVhbF9kYXRhX2xlbmd0aCk7CisKKwlpZiAoX3BtY3JhaWRfaW9fZG9uZShjbWQsIHJlc2xlbiwgaW9hc2MpID09IDApCisJCXBtY3JhaWRfcmV0dXJuX2NtZChjbWQpOworfQorCisvKioKKyAqIHBtY3JhaWRfYWJvcnRfY21kIC0gQWJvcnRzIGEgc2luZ2xlIElPQVJDQiBhbHJlYWR5IHN1Ym1pdHRlZCB0byBJT0EKKyAqCisgKiBAY21kOiBjb21tYW5kIGJsb2NrIG9mIHRoZSBjb21tYW5kIHRvIGJlIGFib3J0ZWQKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKgkgcmV0dXJucyBwb2ludGVyIHRvIGNvbW1hbmQgc3RydWN0dXJlIHVzZWQgYXMgY2FuY2VsbGluZyBjbWQKKyAqLworc3RhdGljIHN0cnVjdCBwbWNyYWlkX2NtZCAqcG1jcmFpZF9hYm9ydF9jbWQoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHBtY3JhaWRfY21kICpjYW5jZWxfY21kOworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2U7CisJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlczsKKworCXBpbnN0YW5jZSA9IChzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqKWNtZC0+ZHJ2X2luc3Q7CisJcmVzID0gY21kLT5zY3NpX2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKworCWNhbmNlbF9jbWQgPSBwbWNyYWlkX2dldF9mcmVlX2NtZChwaW5zdGFuY2UpOworCisJaWYgKGNhbmNlbF9jbWQgPT0gTlVMTCkgeworCQlwbWNyYWlkX2VycigiJXM6IG5vIGNtZCBibG9ja3MgYXJlIGF2YWlsYWJsZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwbWNyYWlkX3ByZXBhcmVfY2FuY2VsX2NtZChjYW5jZWxfY21kLCBjbWQpOworCisJcG1jcmFpZF9pbmZvKCJhYm9ydGluZyBjb21tYW5kIENEQlswXT0gJXggd2l0aCBpbmRleCA9ICVkXG4iLAorCQljbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSwKKwkJY21kLT5pb2FfY2ItPmlvYXJjYi5yZXNwb25zZV9oYW5kbGUgPj4gMik7CisKKwlpbml0X2NvbXBsZXRpb24oJmNhbmNlbF9jbWQtPndhaXRfZm9yX2NvbXBsZXRpb24pOworCWNhbmNlbF9jbWQtPmNvbXBsZXRpb25fcmVxID0gMTsKKworCXBtY3JhaWRfaW5mbygiY29tbWFuZCAoJWQpIENEQlswXSA9ICV4IGZvciAleFxuIiwKKwkJbGUzMl90b19jcHUoY2FuY2VsX2NtZC0+aW9hX2NiLT5pb2FyY2IucmVzcG9uc2VfaGFuZGxlKSA+PiAyLAorCQljbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSwKKwkJbGUzMl90b19jcHUoY2FuY2VsX2NtZC0+aW9hX2NiLT5pb2FyY2IucmVzb3VyY2VfaGFuZGxlKSk7CisKKwlwbWNyYWlkX3NlbmRfY21kKGNhbmNlbF9jbWQsCisJCQkgcG1jcmFpZF9pbnRlcm5hbF9kb25lLAorCQkJIFBNQ1JBSURfSU5URVJOQUxfVElNRU9VVCwKKwkJCSBwbWNyYWlkX3RpbWVvdXRfaGFuZGxlcik7CisJcmV0dXJuIGNhbmNlbF9jbWQ7Cit9CisKKy8qKgorICogcG1jcmFpZF9hYm9ydF9jb21wbGV0ZSAtIFdhaXRzIGZvciBBQk9SVCBUQVNLIGNvbXBsZXRpb24KKyAqCisgKiBAY2FuY2VsX2NtZDogY29tbWFuZCBibG9jayB1c2UgYXMgY2FuY2VsbGluZyBjb21tYW5kCisgKgorICogUmV0dXJuIFZhbHVlOgorICoJIHJldHVybnMgU1VDQ0VTUyBpZiBBQk9SVCBUQVNLIGhhcyBnb29kIGNvbXBsZXRpb24KKyAqCSBvdGhlcndpc2UgRkFJTEVECisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9hYm9ydF9jb21wbGV0ZShzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNhbmNlbF9jbWQpCit7CisJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlczsKKwl1MzIgaW9hc2M7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjYW5jZWxfY21kLT53YWl0X2Zvcl9jb21wbGV0aW9uKTsKKwlyZXMgPSBjYW5jZWxfY21kLT51LnJlczsKKwljYW5jZWxfY21kLT51LnJlcyA9IE5VTEw7CisJaW9hc2MgPSBsZTMyX3RvX2NwdShjYW5jZWxfY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjKTsKKworCS8qIElmIHRoZSBhYm9ydCB0YXNrIGlzIG5vdCB0aW1lZCBvdXQgd2Ugd2lsbCBnZXQgYSBHb29kIGNvbXBsZXRpb24KKwkgKiBhcyBzZW5zZV9rZXksIG90aGVyd2lzZSB3ZSBtYXkgZ2V0IG9uZSB0aGUgZm9sbG93aW5nIHJlc3BvbnNlcworCSAqIGR1ZSB0byBzdWJzcXVlbnQgYnVzIHJlc2V0IG9yIGRldmljZSByZXNldC4gSW4gY2FzZSBJT0FTQyBpcworCSAqIE5SX1NZTkNfUkVRVUlSRUQsIHNldCBzeW5jX3JlcWQgZmxhZyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcmVzb3VyY2UKKwkgKi8KKwlpZiAoaW9hc2MgPT0gUE1DUkFJRF9JT0FTQ19VQV9CVVNfV0FTX1JFU0VUIHx8CisJICAgIGlvYXNjID09IFBNQ1JBSURfSU9BU0NfTlJfU1lOQ19SRVFVSVJFRCkgeworCQlpZiAoaW9hc2MgPT0gUE1DUkFJRF9JT0FTQ19OUl9TWU5DX1JFUVVJUkVEKQorCQkJcmVzLT5zeW5jX3JlcWQgPSAxOworCQlpb2FzYyA9IDA7CisJfQorCisJLyogY29tcGxldGUgdGhlIGNvbW1hbmQgaGVyZSBpdHNlbGYgKi8KKwlwbWNyYWlkX3JldHVybl9jbWQoY2FuY2VsX2NtZCk7CisJcmV0dXJuIFBNQ1JBSURfSU9BU0NfU0VOU0VfS0VZKGlvYXNjKSA/IEZBSUxFRCA6IFNVQ0NFU1M7Cit9CisKKy8qKgorICogcG1jcmFpZF9laF9hYm9ydF9oYW5kbGVyIC0gZW50cnkgcG9pbnQgZm9yIGFib3J0aW5nIGEgc2luZ2xlIHRhc2sgb24gZXJyb3JzCisgKgorICogQHNjc2lfY21kOiAgIHNjc2kgY29tbWFuZCBzdHJ1Y3QgZ2l2ZW4gYnkgbWlkLWxheWVyLiBXaGVuIHRoaXMgaXMgY2FsbGVkCisgKgkJbWlkLWxheWVyIGVuc3VyZXMgdGhhdCBubyBvdGhlciBjb21tYW5kcyBhcmUgcXVldWVkLiBUaGlzCisgKgkJbmV2ZXIgZ2V0cyBjYWxsZWQgdW5kZXIgaW50ZXJydXB0LCBidXQgYSBzZXBhcmF0ZSBlaCB0aHJlYWQuCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJIFNVQ0NFU1MgLyBGQUlMRUQKKyAqLworc3RhdGljIGludCBwbWNyYWlkX2VoX2Fib3J0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbWQpCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZTsKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZDsKKwlzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqcmVzOworCXVuc2lnbmVkIGxvbmcgaG9zdF9sb2NrX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgcGVuZGluZ19sb2NrX2ZsYWdzOworCXN0cnVjdCBwbWNyYWlkX2NtZCAqY2FuY2VsX2NtZCA9IE5VTEw7CisJaW50IGNtZF9mb3VuZCA9IDA7CisJaW50IHJjID0gRkFJTEVEOworCisJcGluc3RhbmNlID0KKwkJKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICopc2NzaV9jbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CisKKwlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJIkkvTyBjb21tYW5kIHRpbWVkIG91dCwgYWJvcnRpbmcgaXQuXG4iKTsKKworCXJlcyA9IHNjc2lfY21kLT5kZXZpY2UtPmhvc3RkYXRhOworCisJaWYgKHJlcyA9PSBOVUxMKQorCQlyZXR1cm4gcmM7CisKKwkvKiBJZiB3ZSBhcmUgY3VycmVudGx5IGdvaW5nIHRocm91Z2ggcmVzZXQvcmVsb2FkLCByZXR1cm4gZmFpbGVkLgorCSAqIFRoaXMgd2lsbCBmb3JjZSB0aGUgbWlkLWxheWVyIHRvIGV2ZW50dWFsbHkgY2FsbAorCSAqIHBtY3JhaWRfZWhfaG9zdF9yZXNldCB3aGljaCB3aWxsIHRoZW4gZ28gdG8gc2xlZXAgYW5kIHdhaXQgZm9yIHRoZQorCSAqIHJlc2V0IHRvIGNvbXBsZXRlCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGhvc3RfbG9ja19mbGFncyk7CisKKwlpZiAocGluc3RhbmNlLT5pb2FfcmVzZXRfaW5fcHJvZ3Jlc3MgfHwKKwkgICAgcGluc3RhbmNlLT5pb2Ffc3RhdGUgPT0gSU9BX1NUQVRFX0RFQUQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywKKwkJCQkgICAgICAgaG9zdF9sb2NrX2ZsYWdzKTsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qIGxvb3Agb3ZlciBwZW5kaW5nIGNtZCBsaXN0IHRvIGZpbmQgY21kIGNvcnJlc3BvbmRpbmcgdG8gdGhpcworCSAqIHNjc2lfY21kLiBOb3RlIHRoYXQgdGhpcyBjb21tYW5kIG1pZ2h0IG5vdCBoYXZlIGJlZW4gY29tcGxldGVkCisJICogYWxyZWFkeS4gbG9ja2luZzogYWxsIHBlbmRpbmcgY29tbWFuZHMgYXJlIHByb3RlY3RlZCB3aXRoCisJICogcGVuZGluZ19wb29sX2xvY2suCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbnN0YW5jZS0+cGVuZGluZ19wb29sX2xvY2ssIHBlbmRpbmdfbG9ja19mbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbWQsICZwaW5zdGFuY2UtPnBlbmRpbmdfY21kX3Bvb2wsIGZyZWVfbGlzdCkgeworCisJCWlmIChjbWQtPnNjc2lfY21kID09IHNjc2lfY21kKSB7CisJCQljbWRfZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW5zdGFuY2UtPnBlbmRpbmdfcG9vbF9sb2NrLAorCQkJCXBlbmRpbmdfbG9ja19mbGFncyk7CisKKwkvKiBJZiB0aGUgY29tbWFuZCB0byBiZSBhYm9ydGVkIHdhcyBnaXZlbiB0byBJT0EgYW5kIHN0aWxsIHBlbmRpbmcgd2l0aAorCSAqIGl0LCBzZW5kIEFCT1JUX1RBU0sgdG8gYWJvcnQgdGhpcyBhbmQgd2FpdCBmb3IgaXRzIGNvbXBsZXRpb24KKwkgKi8KKwlpZiAoY21kX2ZvdW5kKQorCQljYW5jZWxfY21kID0gcG1jcmFpZF9hYm9ydF9jbWQoY21kKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkgICAgICAgaG9zdF9sb2NrX2ZsYWdzKTsKKworCWlmIChjYW5jZWxfY21kKSB7CisJCWNhbmNlbF9jbWQtPnUucmVzID0gY21kLT5zY3NpX2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwkJcmMgPSBwbWNyYWlkX2Fib3J0X2NvbXBsZXRlKGNhbmNlbF9jbWQpOworCX0KKworCXJldHVybiBjbWRfZm91bmQgPyByYyA6IFNVQ0NFU1M7Cit9CisKKy8qKgorICogcG1jcmFpZF9laF94eHh4X3Jlc2V0X2hhbmRsZXIgLSBidXMvdGFyZ2V0L2RldmljZSByZXNldCBoYW5kbGVyIGNhbGxiYWNrcworICoKKyAqIEBzY21kOiBwb2ludGVyIHRvIHNjc2lfY21kIHRoYXQgd2FzIHNlbnQgdG8gdGhlIHJlc291cmNlIHRvIGJlIHJlc2V0LgorICoKKyAqIEFsbCB0aGVzZSByb3V0aW5lcyBpbnZva3ZlIHBtY3JhaWRfcmVzZXRfZGV2aWNlIHdpdGggYXBwcm9wcmlhdGUgcGFyYW1ldGVycy4KKyAqIFNpbmNlIHRoZXNlIGFyZSBjYWxsZWQgZnJvbSBtaWQtbGF5ZXIgRUggdGhyZWFkLCBubyBvdGhlciBJTyB3aWxsIGJlIHF1ZXVlZAorICogdG8gdGhlIHJlc291cmNlIGJlaW5nIHJlc2V0LiBIb3dldmVyLCBjb250cm9sIHBhdGggKElPQ1RMKSBtYXkgYmUgYWN0aXZlIHNvCisgKiBpdCBpcyBuZWNlc3NhcnkgdG8gc3luY2hyb25pemUgSU9BUlJJTiB3cml0ZXMgd2hpY2ggcG1jcmFpZF9yZXNldF9kZXZpY2UKKyAqIHRha2VzIGNhcmUgYnkgbG9ja2luZy91bmxvY2tpbmcgaG9zdF9sb2NrLgorICoKKyAqIFJldHVybiB2YWx1ZQorICogCVNVQ0NFU1Mgb3IgRkFJTEVECisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQoreworCXBtY3JhaWRfZXJyKCJEb2luZyBkZXZpY2UgcmVzZXQgZHVlIHRvIGFuIEkvTyBjb21tYW5kIHRpbWVvdXQuXG4iKTsKKwlyZXR1cm4gcG1jcmFpZF9yZXNldF9kZXZpY2Uoc2NtZCwKKwkJCQkgICAgUE1DUkFJRF9JTlRFUk5BTF9USU1FT1VULAorCQkJCSAgICBSRVNFVF9ERVZJQ0VfTFVOKTsKK30KKworc3RhdGljIGludCBwbWNyYWlkX2VoX2J1c19yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJcG1jcmFpZF9lcnIoIkRvaW5nIGJ1cyByZXNldCBkdWUgdG8gYW4gSS9PIGNvbW1hbmQgdGltZW91dC5cbiIpOworCXJldHVybiBwbWNyYWlkX3Jlc2V0X2RldmljZShzY21kLAorCQkJCSAgICBQTUNSQUlEX1JFU0VUX0JVU19USU1FT1VULAorCQkJCSAgICBSRVNFVF9ERVZJQ0VfQlVTKTsKK30KKworc3RhdGljIGludCBwbWNyYWlkX2VoX3RhcmdldF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJcG1jcmFpZF9lcnIoIkRvaW5nIHRhcmdldCByZXNldCBkdWUgdG8gYW4gSS9PIGNvbW1hbmQgdGltZW91dC5cbiIpOworCXJldHVybiBwbWNyYWlkX3Jlc2V0X2RldmljZShzY21kLAorCQkJCSAgICBQTUNSQUlEX0lOVEVSTkFMX1RJTUVPVVQsCisJCQkJICAgIFJFU0VUX0RFVklDRV9UQVJHRVQpOworfQorCisvKioKKyAqIHBtY3JhaWRfZWhfaG9zdF9yZXNldF9oYW5kbGVyIC0gYWRhcHRlciByZXNldCBoYW5kbGVyIGNhbGxiYWNrCisgKgorICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaV9jbWQgdGhhdCB3YXMgc2VudCB0byBhIHJlc291cmNlIG9mIGFkYXB0ZXIKKyAqCisgKiBJbml0aWF0ZXMgYWRhcHRlciByZXNldCB0byBicmluZyBpdCB1cCB0byBvcGVyYXRpb25hbCBzdGF0ZQorICoKKyAqIFJldHVybiB2YWx1ZQorICogCVNVQ0NFU1Mgb3IgRkFJTEVECisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9laF9ob3N0X3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwl1bnNpZ25lZCBsb25nIGludGVydmFsID0gMTAwMDA7IC8qIDEwIHNlY29uZHMgaW50ZXJ2YWwgKi8KKwlpbnQgd2FpdHMgPSBqaWZmaWVzX3RvX21zZWNzKFBNQ1JBSURfUkVTRVRfSE9TVF9USU1FT1VUKSAvIGludGVydmFsOworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPQorCQkoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKikoc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YSk7CisKKworCS8qIHdhaXQgZm9yIGFuIGFkZGl0aW9uYWwgMTUwIHNlY29uZHMganVzdCBpbiBjYXNlIGZpcm13YXJlIGNvdWxkIGNvbWUKKwkgKiB1cCBhbmQgaWYgaXQgY291bGQgY29tcGxldGUgYWxsIHRoZSBwZW5kaW5nIGNvbW1hbmRzIGV4Y2x1ZGluZyB0aGUKKwkgKiB0d28gSENBTSAoQ0NOIGFuZCBMRE4pLgorCSAqLworCXdoaWxlICh3YWl0cy0tKSB7CisJCWlmIChhdG9taWNfcmVhZCgmcGluc3RhbmNlLT5vdXRzdGFuZGluZ19jbWRzKSA8PQorCQkgICAgUE1DUkFJRF9NQVhfSENBTV9DTUQpCisJCQlyZXR1cm4gU1VDQ0VTUzsKKwkJbXNsZWVwKGludGVydmFsKTsKKwl9CisKKwlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJIkFkYXB0ZXIgYmVpbmcgcmVzZXQgZHVlIHRvIGFuIEkvTyBjb21tYW5kIHRpbWVvdXQuXG4iKTsKKwlyZXR1cm4gcG1jcmFpZF9yZXNldF9icmluZ3VwKHBpbnN0YW5jZSkgPT0gMCA/IFNVQ0NFU1MgOiBGQUlMRUQ7Cit9CisKKy8qKgorICogcG1jcmFpZF90YXNrX2F0dHJpYnV0ZXMgLSBUcmFuc2xhdGUgU1BJIFEtVGFncyB0byB0YXNrIGF0dHJpYnV0ZXMKKyAqIEBzY3NpX2NtZDogICBzY3NpIGNvbW1hbmQgc3RydWN0CisgKgorICogUmV0dXJuIHZhbHVlCisgKgkgIG51bWJlciBvZiB0YWdzIG9yIDAgaWYgdGhlIHRhc2sgaXMgbm90IHRhZ2dlZAorICovCitzdGF0aWMgdTggcG1jcmFpZF90YXNrX2F0dHJpYnV0ZXMoc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbWQpCit7CisJY2hhciB0YWdbMl07CisJdTggcmMgPSAwOworCisJaWYgKHNjc2lfcG9wdWxhdGVfdGFnX21zZyhzY3NpX2NtZCwgdGFnKSkgeworCQlzd2l0Y2ggKHRhZ1swXSkgeworCQljYXNlIE1TR19TSU1QTEVfVEFHOgorCQkJcmMgPSBUQVNLX1RBR19TSU1QTEU7CisJCQlicmVhazsKKwkJY2FzZSBNU0dfSEVBRF9UQUc6CisJCQlyYyA9IFRBU0tfVEFHX1FVRVVFX0hFQUQ7CisJCQlicmVhazsKKwkJY2FzZSBNU0dfT1JERVJFRF9UQUc6CisJCQlyYyA9IFRBU0tfVEFHX09SREVSRUQ7CisJCQlicmVhazsKKwkJfTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKKworLyoqCisgKiBwbWNyYWlkX2luaXRfaW9hZGxzIC0gaW5pdGlhbGl6ZXMgSU9BREwgcmVsYXRlZCBmaWVsZHMgaW4gSU9BUkNCCisgKiBAY21kOiBwbWNyYWlkIGNvbW1hbmQgc3RydWN0CisgKiBAc2djb3VudDogY291bnQgb2Ygc2NhdHRlci1nYXRoZXIgZWxlbWVudHMKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqICAgcmV0dXJucyBwb2ludGVyIHBtY3JhaWRfaW9hZGxfZGVzYywgaW5pdGlhbGl6ZWQgdG8gcG9pbnQgdG8gaW50ZXJuYWwKKyAqICAgb3IgZXh0ZXJuYWwgSU9BRExzCisgKi8KK3N0cnVjdCBwbWNyYWlkX2lvYWRsX2Rlc2MgKgorcG1jcmFpZF9pbml0X2lvYWRscyhzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCwgaW50IHNnY291bnQpCit7CisJc3RydWN0IHBtY3JhaWRfaW9hZGxfZGVzYyAqaW9hZGw7CisJc3RydWN0IHBtY3JhaWRfaW9hcmNiICppb2FyY2IgPSAmY21kLT5pb2FfY2ItPmlvYXJjYjsKKwlpbnQgaW9hZGxfY291bnQgPSAwOworCisJaWYgKGlvYXJjYi0+YWRkX2NtZF9wYXJhbV9sZW5ndGgpCisJCWlvYWRsX2NvdW50ID0gRElWX1JPVU5EX1VQKGlvYXJjYi0+YWRkX2NtZF9wYXJhbV9sZW5ndGgsIDE2KTsKKwlpb2FyY2ItPmlvYWRsX2xlbmd0aCA9CisJCXNpemVvZihzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjKSAqIHNnY291bnQ7CisKKwlpZiAoKHNnY291bnQgKyBpb2FkbF9jb3VudCkgPiAoQVJSQVlfU0laRShpb2FyY2ItPmFkZF9kYXRhLnUuaW9hZGwpKSkgeworCQkvKiBleHRlcm5hbCBpb2FkbHMgc3RhcnQgYXQgb2Zmc2V0IDB4ODAgZnJvbSBjb250cm9sX2Jsb2NrCisJCSAqIHN0cnVjdHVyZSwgcmUtdXNpbmcgMjQgb3V0IG9mIDI3IGlvYWRscyBwYXJ0IG9mIElPQVJDQi4KKwkJICogSXQgaXMgbmVjZXNzYXJ5IHRvIGluZGljYXRlIHRvIGZpcm13YXJlIHRoYXQgZHJpdmVyIGlzCisJCSAqIHVzaW5nIGlvYWRscyB0byBiZSB0cmVhdGVkIGFzIGV4dGVybmFsIHRvIElPQVJDQi4KKwkJICovCisJCWlvYXJjYi0+aW9hcmNiX2J1c19hZGRyICY9IH4oMHgxRlVMTCk7CisJCWlvYXJjYi0+aW9hZGxfYnVzX2FkZHIgPQorCQkJY3B1X3RvX2xlNjQoKGNtZC0+aW9hX2NiX2J1c19hZGRyKSArCisJCQkJb2Zmc2V0b2Yoc3RydWN0IHBtY3JhaWRfaW9hcmNiLAorCQkJCQlhZGRfZGF0YS51LmlvYWRsWzNdKSk7CisJCWlvYWRsID0gJmlvYXJjYi0+YWRkX2RhdGEudS5pb2FkbFszXTsKKwl9IGVsc2UgeworCQlpb2FyY2ItPmlvYWRsX2J1c19hZGRyID0KKwkJCWNwdV90b19sZTY0KChjbWQtPmlvYV9jYl9idXNfYWRkcikgKworCQkJCW9mZnNldG9mKHN0cnVjdCBwbWNyYWlkX2lvYXJjYiwKKwkJCQkJYWRkX2RhdGEudS5pb2FkbFtpb2FkbF9jb3VudF0pKTsKKworCQlpb2FkbCA9ICZpb2FyY2ItPmFkZF9kYXRhLnUuaW9hZGxbaW9hZGxfY291bnRdOworCQlpb2FyY2ItPmlvYXJjYl9idXNfYWRkciB8PQorCQkJCURJVl9ST1VORF9DTE9TRVNUKHNnY291bnQgKyBpb2FkbF9jb3VudCwgOCk7CisJfQorCisJcmV0dXJuIGlvYWRsOworfQorCisvKioKKyAqIHBtY3JhaWRfYnVpbGRfaW9hZGwgLSBCdWlsZCBhIHNjYXR0ZXIvZ2F0aGVyIGxpc3QgYW5kIG1hcCB0aGUgYnVmZmVyCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAY21kOiBwbWNyYWlkIGNvbW1hbmQgc3RydWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGJ5IHF1ZXVlY29tbWFuZCBlbnRyeSBwb2ludCB3aGlsZSBzZW5kaW5nIGEgY29tbWFuZAorICogdG8gZmlybXdhcmUuIFRoaXMgYnVpbGRzIGlvYWRsIGRlc2NyaXB0b3JzIGFuZCBzZXRzIHVwIGlvYXJjYiBmaWVsZHMuCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCTAgb24gc3VjY2VzcyBvciAtMSBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9idWlsZF9pb2FkbCgKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlLAorCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kCispCit7CisJaW50IGksIG5zZWc7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3Q7CisKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtZCA9IGNtZC0+c2NzaV9jbWQ7CisJc3RydWN0IHBtY3JhaWRfaW9hcmNiICppb2FyY2IgPSAmKGNtZC0+aW9hX2NiLT5pb2FyY2IpOworCXN0cnVjdCBwbWNyYWlkX2lvYWRsX2Rlc2MgKmlvYWRsID0gaW9hcmNiLT5hZGRfZGF0YS51LmlvYWRsOworCisJdTMyIGxlbmd0aCA9IHNjc2lfYnVmZmxlbihzY3NpX2NtZCk7CisKKwlpZiAoIWxlbmd0aCkKKwkJcmV0dXJuIDA7CisKKwluc2VnID0gc2NzaV9kbWFfbWFwKHNjc2lfY21kKTsKKworCWlmIChuc2VnIDwgMCkgeworCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwgInNjc2lfbWFwX2RtYSBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAobnNlZyA+IFBNQ1JBSURfTUFYX0lPQURMUykgeworCQlzY3NpX2RtYV91bm1hcChzY3NpX2NtZCk7CisJCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQkJInNnIGNvdW50IGlzICglZCkgbW9yZSB0aGFuIGFsbG93ZWQhXG4iLCBuc2VnKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIEluaXRpYWxpemUgSU9BUkNCIGRhdGEgdHJhbnNmZXIgbGVuZ3RoIGZpZWxkcyAqLworCWlmIChzY3NpX2NtZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKKwkJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMCB8PSBUUkFOU0ZFUl9ESVJfV1JJVEU7CisKKwlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MwIHw9IE5PX0xJTktfREVTQ1M7CisJaW9hcmNiLT5kYXRhX3RyYW5zZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKGxlbmd0aCk7CisJaW9hZGwgPSBwbWNyYWlkX2luaXRfaW9hZGxzKGNtZCwgbnNlZyk7CisKKwkvKiBJbml0aWFsaXplIElPQURMIGRlc2NyaXB0b3IgYWRkcmVzc2VzICovCisJc2NzaV9mb3JfZWFjaF9zZyhzY3NpX2NtZCwgc2dsaXN0LCBuc2VnLCBpKSB7CisJCWlvYWRsW2ldLmRhdGFfbGVuID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZ2xpc3QpKTsKKwkJaW9hZGxbaV0uYWRkcmVzcyA9IGNwdV90b19sZTY0KHNnX2RtYV9hZGRyZXNzKHNnbGlzdCkpOworCQlpb2FkbFtpXS5mbGFncyA9IDA7CisJfQorCS8qIHNldHVwIGxhc3QgZGVzY3JpcHRvciAqLworCWlvYWRsW2kgLSAxXS5mbGFncyA9IGNwdV90b19sZTMyKElPQURMX0ZMQUdTX0xBU1RfREVTQyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwbWNyYWlkX2ZyZWVfc2dsaXN0IC0gRnJlZXMgYW4gYWxsb2NhdGVkIFNHIGJ1ZmZlciBsaXN0CisgKiBAc2dsaXN0OiBzY2F0dGVyL2dhdGhlciBsaXN0IHBvaW50ZXIKKyAqCisgKiBGcmVlIGEgRE1BJ2FibGUgbWVtb3J5IHByZXZpb3VzbHkgYWxsb2NhdGVkIHdpdGggcG1jcmFpZF9hbGxvY19zZ2xpc3QKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2ZyZWVfc2dsaXN0KHN0cnVjdCBwbWNyYWlkX3NnbGlzdCAqc2dsaXN0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNnbGlzdC0+bnVtX3NnOyBpKyspCisJCV9fZnJlZV9wYWdlcyhzZ19wYWdlKCYoc2dsaXN0LT5zY2F0dGVybGlzdFtpXSkpLAorCQkJICAgICBzZ2xpc3QtPm9yZGVyKTsKKworCWtmcmVlKHNnbGlzdCk7Cit9CisKKy8qKgorICogcG1jcmFpZF9hbGxvY19zZ2xpc3QgLSBBbGxvY2F0ZXMgbWVtb3J5IGZvciBhIFNHIGxpc3QKKyAqIEBidWZsZW46IGJ1ZmZlciBsZW5ndGgKKyAqCisgKiBBbGxvY2F0ZXMgYSBETUEnYWJsZSBidWZmZXIgaW4gY2h1bmtzIGFuZCBhc3NlbWJsZXMgYSBzY2F0dGVyL2dhdGhlcgorICogbGlzdC4KKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqIAlwb2ludGVyIHRvIHNnbGlzdCAvIE5VTEwgb24gZmFpbHVyZQorICovCitzdGF0aWMgc3RydWN0IHBtY3JhaWRfc2dsaXN0ICpwbWNyYWlkX2FsbG9jX3NnbGlzdChpbnQgYnVmbGVuKQoreworCXN0cnVjdCBwbWNyYWlkX3NnbGlzdCAqc2dsaXN0OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdHRlcmxpc3Q7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IG51bV9lbGVtLCBpLCBqOworCWludCBzZ19zaXplOworCWludCBvcmRlcjsKKwlpbnQgYnNpemVfZWxlbTsKKworCXNnX3NpemUgPSBidWZsZW4gLyAoUE1DUkFJRF9NQVhfSU9BRExTIC0gMSk7CisJb3JkZXIgPSAoc2dfc2l6ZSA+IDApID8gZ2V0X29yZGVyKHNnX3NpemUpIDogMDsKKwlic2l6ZV9lbGVtID0gUEFHRV9TSVpFICogKDEgPDwgb3JkZXIpOworCisJLyogRGV0ZXJtaW5lIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHNnIGVudHJpZXMgbmVlZGVkICovCisJaWYgKGJ1ZmxlbiAlIGJzaXplX2VsZW0pCisJCW51bV9lbGVtID0gKGJ1ZmxlbiAvIGJzaXplX2VsZW0pICsgMTsKKwllbHNlCisJCW51bV9lbGVtID0gYnVmbGVuIC8gYnNpemVfZWxlbTsKKworCS8qIEFsbG9jYXRlIGEgc2NhdHRlci9nYXRoZXIgbGlzdCBmb3IgdGhlIERNQSAqLworCXNnbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX3NnbGlzdCkgKworCQkJIChzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSAqIChudW1fZWxlbSAtIDEpKSwKKwkJCSBHRlBfS0VSTkVMKTsKKworCWlmIChzZ2xpc3QgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzY2F0dGVybGlzdCA9IHNnbGlzdC0+c2NhdHRlcmxpc3Q7CisJc2dfaW5pdF90YWJsZShzY2F0dGVybGlzdCwgbnVtX2VsZW0pOworCXNnbGlzdC0+b3JkZXIgPSBvcmRlcjsKKwlzZ2xpc3QtPm51bV9zZyA9IG51bV9lbGVtOworCXNnX3NpemUgPSBidWZsZW47CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VsZW07IGkrKykgeworCQlwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTHxHRlBfRE1BLCBvcmRlcik7CisJCWlmICghcGFnZSkgeworCQkJZm9yIChqID0gaSAtIDE7IGogPj0gMDsgai0tKQorCQkJCV9fZnJlZV9wYWdlcyhzZ19wYWdlKCZzY2F0dGVybGlzdFtqXSksIG9yZGVyKTsKKwkJCWtmcmVlKHNnbGlzdCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCXNnX3NldF9wYWdlKCZzY2F0dGVybGlzdFtpXSwgcGFnZSwKKwkJCXNnX3NpemUgPCBic2l6ZV9lbGVtID8gc2dfc2l6ZSA6IGJzaXplX2VsZW0sIDApOworCQlzZ19zaXplIC09IGJzaXplX2VsZW07CisJfQorCisJcmV0dXJuIHNnbGlzdDsKK30KKworLyoqCisgKiBwbWNyYWlkX2NvcHlfc2dsaXN0IC0gQ29weSB1c2VyIGJ1ZmZlciB0byBrZXJuZWwgYnVmZmVyJ3MgU0cgbGlzdAorICogQHNnbGlzdDogc2NhdHRlci9nYXRoZXIgbGlzdCBwb2ludGVyCisgKiBAYnVmZmVyOiBidWZmZXIgcG9pbnRlcgorICogQGxlbjogYnVmZmVyIGxlbmd0aAorICogQGRpcmVjdGlvbjogZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24KKyAqCisgKiBDb3B5IGEgdXNlciBidWZmZXIgaW50byBhIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgcG1jcmFpZF9hbGxvY19zZ2xpc3QKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAwIG9uIHN1Y2Nlc3MgLyBvdGhlciBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9jb3B5X3NnbGlzdCgKKwlzdHJ1Y3QgcG1jcmFpZF9zZ2xpc3QgKnNnbGlzdCwKKwl1bnNpZ25lZCBsb25nIGJ1ZmZlciwKKwl1MzIgbGVuLAorCWludCBkaXJlY3Rpb24KKykKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXR0ZXJsaXN0OworCXZvaWQgKmthZGRyOworCWludCBic2l6ZV9lbGVtOworCWludCBpOworCWludCByYyA9IDA7CisKKwkvKiBEZXRlcm1pbmUgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgcGVyIGVsZW1lbnQgKi8KKwlic2l6ZV9lbGVtID0gUEFHRV9TSVpFICogKDEgPDwgc2dsaXN0LT5vcmRlcik7CisKKwlzY2F0dGVybGlzdCA9IHNnbGlzdC0+c2NhdHRlcmxpc3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgKGxlbiAvIGJzaXplX2VsZW0pOyBpKyssIGJ1ZmZlciArPSBic2l6ZV9lbGVtKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZSgmc2NhdHRlcmxpc3RbaV0pOworCisJCWthZGRyID0ga21hcChwYWdlKTsKKwkJaWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQkJcmMgPSBfX2NvcHlfZnJvbV91c2VyKGthZGRyLAorCQkJCQkgICAgICAodm9pZCAqKWJ1ZmZlciwKKwkJCQkJICAgICAgYnNpemVfZWxlbSk7CisJCWVsc2UKKwkJCXJjID0gX19jb3B5X3RvX3VzZXIoKHZvaWQgKilidWZmZXIsIGthZGRyLCBic2l6ZV9lbGVtKTsKKworCQlrdW5tYXAocGFnZSk7CisKKwkJaWYgKHJjKSB7CisJCQlwbWNyYWlkX2VycigiZmFpbGVkIHRvIGNvcHkgdXNlciBkYXRhIGludG8gc2cgbGlzdFxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCXNjYXR0ZXJsaXN0W2ldLmxlbmd0aCA9IGJzaXplX2VsZW07CisJfQorCisJaWYgKGxlbiAlIGJzaXplX2VsZW0pIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKCZzY2F0dGVybGlzdFtpXSk7CisKKwkJa2FkZHIgPSBrbWFwKHBhZ2UpOworCisJCWlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKKwkJCXJjID0gX19jb3B5X2Zyb21fdXNlcihrYWRkciwKKwkJCQkJICAgICAgKHZvaWQgKilidWZmZXIsCisJCQkJCSAgICAgIGxlbiAlIGJzaXplX2VsZW0pOworCQllbHNlCisJCQlyYyA9IF9fY29weV90b191c2VyKCh2b2lkICopYnVmZmVyLAorCQkJCQkgICAga2FkZHIsCisJCQkJCSAgICBsZW4gJSBic2l6ZV9lbGVtKTsKKworCQlrdW5tYXAocGFnZSk7CisKKwkJc2NhdHRlcmxpc3RbaV0ubGVuZ3RoID0gbGVuICUgYnNpemVfZWxlbTsKKwl9CisKKwlpZiAocmMpIHsKKwkJcG1jcmFpZF9lcnIoImZhaWxlZCB0byBjb3B5IHVzZXIgZGF0YSBpbnRvIHNnIGxpc3RcbiIpOworCQlyYyA9IC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHBtY3JhaWRfcXVldWVjb21tYW5kIC0gUXVldWUgYSBtaWQtbGF5ZXIgcmVxdWVzdAorICogQHNjc2lfY21kOiBzY3NpIGNvbW1hbmQgc3RydWN0CisgKiBAZG9uZTogZG9uZSBmdW5jdGlvbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcXVldWVzIGEgcmVxdWVzdCBnZW5lcmF0ZWQgYnkgdGhlIG1pZC1sYXllci4gTWlkbGF5ZXIgY2FsbHMKKyAqIHRoaXMgcm91dGluZSB3aXRoaW4gaG9zdC0+bG9jay4gU29tZSBvZiB0aGUgZnVuY3Rpb25zIGNhbGxlZCBieSBxdWV1ZWNvbW1hbmQKKyAqIHdvdWxkIHVzZSBjbWQgYmxvY2sgcXVldWUgbG9ja3MgKGZyZWVfcG9vbF9sb2NrIGFuZCBwZW5kaW5nX3Bvb2xfbG9jaykKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKgkgIDAgb24gc3VjY2VzcworICoJICBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1kgaWYgZGV2aWNlIGlzIGJ1c3kKKyAqCSAgU0NTSV9NTFFVRVVFX0hPU1RfQlVTWSBpZiBob3N0IGlzIGJ1c3kKKyAqLworc3RhdGljIGludCBwbWNyYWlkX3F1ZXVlY29tbWFuZCgKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtZCwKKwl2b2lkICgqZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKikKKykKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlOworCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXM7CisJc3RydWN0IHBtY3JhaWRfaW9hcmNiICppb2FyY2I7CisJc3RydWN0IHBtY3JhaWRfY21kICpjbWQ7CisJaW50IHJjID0gMDsKKworCXBpbnN0YW5jZSA9CisJCShzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqKXNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOworCisJc2NzaV9jbWQtPnNjc2lfZG9uZSA9IGRvbmU7CisJcmVzID0gc2NzaV9jbWQtPmRldmljZS0+aG9zdGRhdGE7CisJc2NzaV9jbWQtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpOworCisJLyogaWYgYWRhcHRlciBpcyBtYXJrZWQgYXMgZGVhZCwgc2V0IHJlc3VsdCB0byBESURfTk9fQ09OTkVDVCBjb21wbGV0ZQorCSAqIHRoZSBjb21tYW5kCisJICovCisJaWYgKHBpbnN0YW5jZS0+aW9hX3N0YXRlID09IElPQV9TVEFURV9ERUFEKSB7CisJCXBtY3JhaWRfaW5mbygiSU9BIGlzIGRlYWQsIGJ1dCBxdWV1ZWNvbW1hbmQgaXMgc2NoZWR1bGVkXG4iKTsKKwkJc2NzaV9jbWQtPnJlc3VsdCA9IChESURfTk9fQ09OTkVDVCA8PCAxNik7CisJCXNjc2lfY21kLT5zY3NpX2RvbmUoc2NzaV9jbWQpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJZiBJT0EgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MsIGNhbid0IHF1ZXVlIHRoZSBjb21tYW5kcyAqLworCWlmIChwaW5zdGFuY2UtPmlvYV9yZXNldF9pbl9wcm9ncmVzcykKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisKKwkvKiBpbml0aWFsaXplIHRoZSBjb21tYW5kIGFuZCBJT0FSQ0IgdG8gYmUgc2VudCB0byBJT0EgKi8KKwljbWQgPSBwbWNyYWlkX2dldF9mcmVlX2NtZChwaW5zdGFuY2UpOworCisJaWYgKGNtZCA9PSBOVUxMKSB7CisJCXBtY3JhaWRfZXJyKCJmcmVlIGNvbW1hbmQgYmxvY2sgaXMgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCX0KKworCWNtZC0+c2NzaV9jbWQgPSBzY3NpX2NtZDsKKwlpb2FyY2IgPSAmKGNtZC0+aW9hX2NiLT5pb2FyY2IpOworCW1lbWNweShpb2FyY2ItPmNkYiwgc2NzaV9jbWQtPmNtbmQsIHNjc2lfY21kLT5jbWRfbGVuKTsKKwlpb2FyY2ItPnJlc291cmNlX2hhbmRsZSA9IHJlcy0+Y2ZnX2VudHJ5LnJlc291cmNlX2hhbmRsZTsKKwlpb2FyY2ItPnJlcXVlc3RfdHlwZSA9IFJFUV9UWVBFX1NDU0k7CisKKwljbWQtPmNtZF9kb25lID0gcG1jcmFpZF9pb19kb25lOworCisJaWYgKFJFU19JU19HU0NTSShyZXMtPmNmZ19lbnRyeSkgfHwgUkVTX0lTX1ZTRVQocmVzLT5jZmdfZW50cnkpKSB7CisJCWlmIChzY3NpX2NtZC0+dW5kZXJmbG93ID09IDApCisJCQlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MwIHw9IElOSElCSVRfVUxfQ0hFQ0s7CisKKwkJaWYgKHJlcy0+c3luY19yZXFkKSB7CisJCQlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MwIHw9IFNZTkNfQ09NUExFVEU7CisJCQlyZXMtPnN5bmNfcmVxZCA9IDA7CisJCX0KKworCQlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MwIHw9IE5PX0xJTktfREVTQ1M7CisJCWlvYXJjYi0+cmVxdWVzdF9mbGFnczEgfD0gcG1jcmFpZF90YXNrX2F0dHJpYnV0ZXMoc2NzaV9jbWQpOworCisJCWlmIChSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpKQorCQkJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMSB8PSBERUxBWV9BRlRFUl9SRVNFVDsKKwl9CisKKwlyYyA9IHBtY3JhaWRfYnVpbGRfaW9hZGwocGluc3RhbmNlLCBjbWQpOworCisJcG1jcmFpZF9pbmZvKCJjb21tYW5kICglZCkgQ0RCWzBdID0gJXggZm9yICV4OiV4OiV4OiV4XG4iLAorCQkgICAgIGxlMzJfdG9fY3B1KGlvYXJjYi0+cmVzcG9uc2VfaGFuZGxlKSA+PiAyLAorCQkgICAgIHNjc2lfY21kLT5jbW5kWzBdLCBwaW5zdGFuY2UtPmhvc3QtPnVuaXF1ZV9pZCwKKwkJICAgICBSRVNfSVNfVlNFVChyZXMtPmNmZ19lbnRyeSkgPyBQTUNSQUlEX1ZTRVRfQlVTX0lEIDoKKwkJCVBNQ1JBSURfUEhZU19CVVNfSUQsCisJCSAgICAgUkVTX0lTX1ZTRVQocmVzLT5jZmdfZW50cnkpID8KKwkJCXJlcy0+Y2ZnX2VudHJ5LnVuaXF1ZV9mbGFnczEgOgorCQkJUkVTX1RBUkdFVChyZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV9hZGRyZXNzKSwKKwkJICAgICBSRVNfTFVOKHJlcy0+Y2ZnX2VudHJ5LnJlc291cmNlX2FkZHJlc3MpKTsKKworCWlmIChsaWtlbHkocmMgPT0gMCkpIHsKKwkJX3BtY3JhaWRfZmlyZV9jb21tYW5kKGNtZCk7CisJfSBlbHNlIHsKKwkJcG1jcmFpZF9lcnIoInF1ZXVlY29tbWFuZCBjb3VsZCBub3QgYnVpbGQgaW9hZGxcbiIpOworCQlwbWNyYWlkX3JldHVybl9jbWQoY21kKTsKKwkJcmMgPSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCX0KKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBwbWNyYWlkX29wZW4gLWNoYXIgbm9kZSAib3BlbiIgZW50cnksIGFsbG93ZWQgb25seSB1c2VycyB3aXRoIGFkbWluIGFjY2VzcworICovCitzdGF0aWMgaW50IHBtY3JhaWRfY2hyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2U7CisKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRUFDQ0VTOworCisJLyogUG9wdWxhdGUgYWRhcHRlciBpbnN0YW5jZSAqIHBvaW50ZXIgZm9yIHVzZSBieSBpb2N0bCAqLworCXBpbnN0YW5jZSA9IGNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LCBzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSwgY2Rldik7CisJZmlsZXAtPnByaXZhdGVfZGF0YSA9IHBpbnN0YW5jZTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVsZWFzZSAtIGNoYXIgbm9kZSAicmVsZWFzZSIgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIGludCBwbWNyYWlkX2Nocl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0KKwkJKChzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqKWZpbGVwLT5wcml2YXRlX2RhdGEpOworCisJZmlsZXAtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJZmFzeW5jX2hlbHBlcigtMSwgZmlsZXAsIDAsICZwaW5zdGFuY2UtPmFlbl9xdWV1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwbWNyYWlkX2Zhc3luYyAtIEFzeW5jIG5vdGlmaWVyIHJlZ2lzdHJhdGlvbiBmcm9tIGFwcGxpY2F0aW9ucworICoKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgY2FsbGluZyBwcm9jZXNzIHRvIGEgZHJpdmVyIGdsb2JhbCBxdWV1ZS4gV2hlbiBhbgorICogZXZlbnQgb2NjdXJzLCBTSUdJTyB3aWxsIGJlIHNlbnQgdG8gYWxsIHByb2Nlc3NlcyBpbiB0aGlzIHF1ZXVlLgorICovCitzdGF0aWMgaW50IHBtY3JhaWRfY2hyX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IG1vZGUpCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZTsKKwlpbnQgcmM7CisKKwlwaW5zdGFuY2UgPSAoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKilmaWxlcC0+cHJpdmF0ZV9kYXRhOworCW11dGV4X2xvY2soJnBpbnN0YW5jZS0+YWVuX3F1ZXVlX2xvY2spOworCXJjID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZXAsIG1vZGUsICZwaW5zdGFuY2UtPmFlbl9xdWV1ZSk7CisJbXV0ZXhfdW5sb2NrKCZwaW5zdGFuY2UtPmFlbl9xdWV1ZV9sb2NrKTsKKworCXJldHVybiByYzsKK30KKworCisvKioKKyAqIHBtY3JhaWRfYnVpbGRfcGFzc3Rocm91Z2hfaW9hZGxzIC0gYnVpbGRzIFNHIGVsZW1lbnRzIGZvciBwYXNzdGhyb3VnaAorICogY29tbWFuZHMgc2VudCBvdmVyIElPQ1RMIGludGVyZmFjZQorICoKKyAqIEBjbWQgICAgICAgOiBwb2ludGVyIHRvIHN0cnVjdCBwbWNyYWlkX2NtZAorICogQGJ1ZmxlbiAgICA6IGxlbmd0aCBvZiB0aGUgcmVxdWVzdCBidWZmZXIKKyAqIEBkaXJlY3Rpb24gOiBkYXRhIHRyYW5zZmVyIGRpcmVjdGlvbgorICoKKyAqIFJldHVybiB2YWx1ZQorICogIDAgb24gc3VjZXNzLCBub24temVybyBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludCBwbWNyYWlkX2J1aWxkX3Bhc3N0aHJvdWdoX2lvYWRscygKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCwKKwlpbnQgYnVmbGVuLAorCWludCBkaXJlY3Rpb24KKykKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9zZ2xpc3QgKnNnbGlzdCA9IE5VTEw7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IE5VTEw7CisJc3RydWN0IHBtY3JhaWRfaW9hcmNiICppb2FyY2IgPSAmY21kLT5pb2FfY2ItPmlvYXJjYjsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjICppb2FkbDsKKwlpbnQgaTsKKworCXNnbGlzdCA9IHBtY3JhaWRfYWxsb2Nfc2dsaXN0KGJ1Zmxlbik7CisKKwlpZiAoIXNnbGlzdCkgeworCQlwbWNyYWlkX2VycigiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBwYXNzdGhyb3VnaCBTR2xzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2dsaXN0LT5udW1fZG1hX3NnID0gcGNpX21hcF9zZyhjbWQtPmRydl9pbnN0LT5wZGV2LAorCQkJCQlzZ2xpc3QtPnNjYXR0ZXJsaXN0LAorCQkJCQlzZ2xpc3QtPm51bV9zZywgZGlyZWN0aW9uKTsKKworCWlmICghc2dsaXN0LT5udW1fZG1hX3NnIHx8IHNnbGlzdC0+bnVtX2RtYV9zZyA+IFBNQ1JBSURfTUFYX0lPQURMUykgeworCQlkZXZfZXJyKCZjbWQtPmRydl9pbnN0LT5wZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIG1hcCBwYXNzdGhyb3VnaCBidWZmZXIhXG4iKTsKKwkJcG1jcmFpZF9mcmVlX3NnbGlzdChzZ2xpc3QpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwljbWQtPnNnbGlzdCA9IHNnbGlzdDsKKwlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MwIHw9IE5PX0xJTktfREVTQ1M7CisKKwlpb2FkbCA9IHBtY3JhaWRfaW5pdF9pb2FkbHMoY21kLCBzZ2xpc3QtPm51bV9kbWFfc2cpOworCisJLyogSW5pdGlhbGl6ZSBJT0FETCBkZXNjcmlwdG9yIGFkZHJlc3NlcyAqLworCWZvcl9lYWNoX3NnKHNnbGlzdC0+c2NhdHRlcmxpc3QsIHNnLCBzZ2xpc3QtPm51bV9kbWFfc2csIGkpIHsKKwkJaW9hZGxbaV0uZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuKHNnKSk7CisJCWlvYWRsW2ldLmFkZHJlc3MgPSBjcHVfdG9fbGU2NChzZ19kbWFfYWRkcmVzcyhzZykpOworCQlpb2FkbFtpXS5mbGFncyA9IDA7CisJfQorCisJLyogc2V0dXAgdGhlIGxhc3QgZGVzY3JpcHRvciAqLworCWlvYWRsW2kgLSAxXS5mbGFncyA9IGNwdV90b19sZTMyKElPQURMX0ZMQUdTX0xBU1RfREVTQyk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIHBtY3JhaWRfcmVsZWFzZV9wYXNzdGhyb3VnaF9pb2FkbHMgLSByZWxlYXNlIHBhc3N0aHJvdWdoIGlvYWRscworICoKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gc3RydWN0IHBtY3JhaWRfY21kIGZvciB3aGljaCBpb2FkbHMgd2VyZSBhbGxvY2F0ZWQKKyAqIEBidWZsZW46IHNpemUgb2YgdGhlIHJlcXVlc3QgYnVmZmVyCisgKiBAZGlyZWN0aW9uOiBkYXRhIHRyYW5zZmVyIGRpcmVjdGlvbgorICoKKyAqIFJldHVybiB2YWx1ZQorICogIDAgb24gc3VjZXNzLCBub24temVybyBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9yZWxlYXNlX3Bhc3N0aHJvdWdoX2lvYWRscygKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCwKKwlpbnQgYnVmbGVuLAorCWludCBkaXJlY3Rpb24KKykKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9zZ2xpc3QgKnNnbGlzdCA9IGNtZC0+c2dsaXN0OworCisJaWYgKGJ1ZmxlbiA+IDApIHsKKwkJcGNpX3VubWFwX3NnKGNtZC0+ZHJ2X2luc3QtPnBkZXYsCisJCQkgICAgIHNnbGlzdC0+c2NhdHRlcmxpc3QsCisJCQkgICAgIHNnbGlzdC0+bnVtX3NnLAorCQkJICAgICBkaXJlY3Rpb24pOworCQlwbWNyYWlkX2ZyZWVfc2dsaXN0KHNnbGlzdCk7CisJCWNtZC0+c2dsaXN0ID0gTlVMTDsKKwl9Cit9CisKKy8qKgorICogcG1jcmFpZF9pb2N0bF9wYXNzdGhyb3VnaCAtIGhhbmRsaW5nIHBhc3N0aHJvdWdoIElPQ1RMIGNvbW1hbmRzCisgKgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGNtZDogaW9jdGwgY29kZQorICogQGFyZzogcG9pbnRlciB0byBwbWNyYWlkX3Bhc3N0aHJvdWdoX2J1ZmZlciB1c2VyIGJ1ZmZlcgorICoKKyAqIFJldHVybiB2YWx1ZQorICogIDAgb24gc3VjZXNzLCBub24temVybyBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGxvbmcgcG1jcmFpZF9pb2N0bF9wYXNzdGhyb3VnaCgKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlLAorCXVuc2lnbmVkIGludCBpb2N0bF9jbWQsCisJdW5zaWduZWQgaW50IGJ1ZmxlbiwKKwl1bnNpZ25lZCBsb25nIGFyZworKQoreworCXN0cnVjdCBwbWNyYWlkX3Bhc3N0aHJvdWdoX2lvY3RsX2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiAqaW9hcmNiOworCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kOworCXN0cnVjdCBwbWNyYWlkX2NtZCAqY2FuY2VsX2NtZDsKKwl1bnNpZ25lZCBsb25nIHJlcXVlc3RfYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgcmVxdWVzdF9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCWludCByZXF1ZXN0X3NpemU7CisJaW50IGJ1ZmZlcl9zaXplOworCXU4IGFjY2VzcywgZGlyZWN0aW9uOworCWludCByYyA9IDA7CisKKwkvKiBJZiBJT0EgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MsIHdhaXQgMTAgc2VjcyBmb3IgcmVzZXQgdG8gY29tcGxldGUgKi8KKwlpZiAocGluc3RhbmNlLT5pb2FfcmVzZXRfaW5fcHJvZ3Jlc3MpIHsKKwkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJCQlwaW5zdGFuY2UtPnJlc2V0X3dhaXRfcSwKKwkJCQkhcGluc3RhbmNlLT5pb2FfcmVzZXRfaW5fcHJvZ3Jlc3MsCisJCQkJbXNlY3NfdG9famlmZmllcygxMDAwMCkpOworCisJCWlmICghcmMpCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJZWxzZSBpZiAocmMgPCAwKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwkvKiBJZiBhZGFwdGVyIGlzIG5vdCBpbiBvcGVyYXRpb25hbCBzdGF0ZSwgcmV0dXJuIGVycm9yICovCisJaWYgKHBpbnN0YW5jZS0+aW9hX3N0YXRlICE9IElPQV9TVEFURV9PUEVSQVRJT05BTCkgeworCQlwbWNyYWlkX2VycigiSU9BIGlzIG5vdCBvcGVyYXRpb25hbFxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCWJ1ZmZlcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX3Bhc3N0aHJvdWdoX2lvY3RsX2J1ZmZlcik7CisJYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWJ1ZmZlcikgeworCQlwbWNyYWlkX2Vycigibm8gbWVtb3J5IGZvciBwYXNzdGhyb3VnaCBidWZmZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXF1ZXN0X29mZnNldCA9CisJICAgIG9mZnNldG9mKHN0cnVjdCBwbWNyYWlkX3Bhc3N0aHJvdWdoX2lvY3RsX2J1ZmZlciwgcmVxdWVzdF9idWZmZXIpOworCisJcmVxdWVzdF9idWZmZXIgPSBhcmcgKyByZXF1ZXN0X29mZnNldDsKKworCXJjID0gX19jb3B5X2Zyb21fdXNlcihidWZmZXIsCisJCQkgICAgIChzdHJ1Y3QgcG1jcmFpZF9wYXNzdGhyb3VnaF9pb2N0bF9idWZmZXIgKikgYXJnLAorCQkJICAgICBzaXplb2Yoc3RydWN0IHBtY3JhaWRfcGFzc3Rocm91Z2hfaW9jdGxfYnVmZmVyKSk7CisJaWYgKHJjKSB7CisJCXBtY3JhaWRfZXJyKCJpb2N0bDogY2FuJ3QgY29weSBwYXNzdGhyb3VnaCBidWZmZXJcbiIpOworCQlyYyA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyOworCX0KKworCXJlcXVlc3Rfc2l6ZSA9IGJ1ZmZlci0+aW9hcmNiLmRhdGFfdHJhbnNmZXJfbGVuZ3RoOworCisJaWYgKGJ1ZmZlci0+aW9hcmNiLnJlcXVlc3RfZmxhZ3MwICYgVFJBTlNGRVJfRElSX1dSSVRFKSB7CisJCWFjY2VzcyA9IFZFUklGWV9SRUFEOworCQlkaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOworCX0gZWxzZSB7CisJCWFjY2VzcyA9IFZFUklGWV9XUklURTsKKwkJZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOworCX0KKworCWlmIChyZXF1ZXN0X3NpemUgPiAwKSB7CisJCXJjID0gYWNjZXNzX29rKGFjY2VzcywgYXJnLCByZXF1ZXN0X29mZnNldCArIHJlcXVlc3Rfc2l6ZSk7CisKKwkJaWYgKCFyYykgeworCQkJcmMgPSAtRUZBVUxUOworCQkJZ290byBvdXRfZnJlZV9idWZmZXI7CisJCX0KKwl9CisKKwkvKiBjaGVjayBpZiB3ZSBoYXZlIGFueSBhZGRpdGlvbmFsIGNvbW1hbmQgcGFyYW1ldGVycyAqLworCWlmIChidWZmZXItPmlvYXJjYi5hZGRfY21kX3BhcmFtX2xlbmd0aCA+IFBNQ1JBSURfQUREX0NNRF9QQVJBTV9MRU4pIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mcmVlX2J1ZmZlcjsKKwl9CisKKwljbWQgPSBwbWNyYWlkX2dldF9mcmVlX2NtZChwaW5zdGFuY2UpOworCisJaWYgKCFjbWQpIHsKKwkJcG1jcmFpZF9lcnIoImZyZWUgY29tbWFuZCBibG9jayBpcyBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX2J1ZmZlcjsKKwl9CisKKwljbWQtPnNjc2lfY21kID0gTlVMTDsKKwlpb2FyY2IgPSAmKGNtZC0+aW9hX2NiLT5pb2FyY2IpOworCisJLyogQ29weSB0aGUgdXNlci1wcm92aWRlZCBJT0FSQ0Igc3R1ZmYgZmllbGQgYnkgZmllbGQgKi8KKwlpb2FyY2ItPnJlc291cmNlX2hhbmRsZSA9IGJ1ZmZlci0+aW9hcmNiLnJlc291cmNlX2hhbmRsZTsKKwlpb2FyY2ItPmRhdGFfdHJhbnNmZXJfbGVuZ3RoID0gYnVmZmVyLT5pb2FyY2IuZGF0YV90cmFuc2Zlcl9sZW5ndGg7CisJaW9hcmNiLT5jbWRfdGltZW91dCA9IGJ1ZmZlci0+aW9hcmNiLmNtZF90aW1lb3V0OworCWlvYXJjYi0+cmVxdWVzdF90eXBlID0gYnVmZmVyLT5pb2FyY2IucmVxdWVzdF90eXBlOworCWlvYXJjYi0+cmVxdWVzdF9mbGFnczAgPSBidWZmZXItPmlvYXJjYi5yZXF1ZXN0X2ZsYWdzMDsKKwlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MxID0gYnVmZmVyLT5pb2FyY2IucmVxdWVzdF9mbGFnczE7CisJbWVtY3B5KGlvYXJjYi0+Y2RiLCBidWZmZXItPmlvYXJjYi5jZGIsIFBNQ1JBSURfTUFYX0NEQl9MRU4pOworCisJaWYgKGJ1ZmZlci0+aW9hcmNiLmFkZF9jbWRfcGFyYW1fbGVuZ3RoKSB7CisJCWlvYXJjYi0+YWRkX2NtZF9wYXJhbV9sZW5ndGggPQorCQkJYnVmZmVyLT5pb2FyY2IuYWRkX2NtZF9wYXJhbV9sZW5ndGg7CisJCWlvYXJjYi0+YWRkX2NtZF9wYXJhbV9vZmZzZXQgPQorCQkJYnVmZmVyLT5pb2FyY2IuYWRkX2NtZF9wYXJhbV9vZmZzZXQ7CisJCW1lbWNweShpb2FyY2ItPmFkZF9kYXRhLnUuYWRkX2NtZF9wYXJhbXMsCisJCQlidWZmZXItPmlvYXJjYi5hZGRfZGF0YS51LmFkZF9jbWRfcGFyYW1zLAorCQkJYnVmZmVyLT5pb2FyY2IuYWRkX2NtZF9wYXJhbV9sZW5ndGgpOworCX0KKworCWlmIChyZXF1ZXN0X3NpemUpIHsKKwkJcmMgPSBwbWNyYWlkX2J1aWxkX3Bhc3N0aHJvdWdoX2lvYWRscyhjbWQsCisJCQkJCQkgICAgICByZXF1ZXN0X3NpemUsCisJCQkJCQkgICAgICBkaXJlY3Rpb24pOworCQlpZiAocmMpIHsKKwkJCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCBidWlsZCBwYXNzdGhyb3VnaCBpb2FkbHNcbiIpOworCQkJZ290byBvdXRfZnJlZV9idWZmZXI7CisJCX0KKwl9CisKKwkvKiBJZiBkYXRhIGlzIGJlaW5nIHdyaXR0ZW4gaW50byB0aGUgZGV2aWNlLCBjb3B5IHRoZSBkYXRhIGZyb20gdXNlcgorCSAqIGJ1ZmZlcnMKKwkgKi8KKwlpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UgJiYgcmVxdWVzdF9zaXplID4gMCkgeworCQlyYyA9IHBtY3JhaWRfY29weV9zZ2xpc3QoY21kLT5zZ2xpc3QsCisJCQkJCSByZXF1ZXN0X2J1ZmZlciwKKwkJCQkJIHJlcXVlc3Rfc2l6ZSwKKwkJCQkJIGRpcmVjdGlvbik7CisJCWlmIChyYykgeworCQkJcG1jcmFpZF9lcnIoImZhaWxlZCB0byBjb3B5IHVzZXIgYnVmZmVyXG4iKTsKKwkJCWdvdG8gb3V0X2ZyZWVfc2dsaXN0OworCQl9CisJfQorCisJLyogcGFzc3Rocm91Z2ggaW9jdGwgaXMgYSBibG9ja2luZyBjb21tYW5kIHNvLCBwdXQgdGhlIHVzZXIgdG8gc2xlZXAKKwkgKiB1bnRpbCB0aW1lb3V0LiBOb3RlIHRoYXQgYSB0aW1lb3V0IHZhbHVlIG9mIDAgbWVhbnMsIGRvIHRpbWVvdXQuCisJICovCisJY21kLT5jbWRfZG9uZSA9IHBtY3JhaWRfaW50ZXJuYWxfZG9uZTsKKwlpbml0X2NvbXBsZXRpb24oJmNtZC0+d2FpdF9mb3JfY29tcGxldGlvbik7CisJY21kLT5jb21wbGV0aW9uX3JlcSA9IDE7CisKKwlwbWNyYWlkX2luZm8oImNvbW1hbmQoJWQpIChDREJbMF0gPSAleCkgZm9yICV4XG4iLAorCQkgICAgIGxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FyY2IucmVzcG9uc2VfaGFuZGxlKSA+PiAyLAorCQkgICAgIGNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLAorCQkgICAgIGxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FyY2IucmVzb3VyY2VfaGFuZGxlKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJX3BtY3JhaWRfZmlyZV9jb21tYW5kKGNtZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisKKwkvKiBJZiBjb21tYW5kIHRpbWVvdXQgaXMgc3BlY2lmaWVkIHB1dCBjYWxsZXIgdG8gd2FpdCB0aWxsIHRoYXQgdGltZSwKKwkgKiBvdGhlcndpc2UgaXQgd291bGQgYmUgYmxvY2tpbmcgd2FpdC4gSWYgY29tbWFuZCBnZXRzIHRpbWVkIG91dCwgaXQKKwkgKiB3aWxsIGJlIGFib3J0ZWQuCisJICovCisJaWYgKGJ1ZmZlci0+aW9hcmNiLmNtZF90aW1lb3V0ID09IDApIHsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmY21kLT53YWl0X2Zvcl9jb21wbGV0aW9uKTsKKwl9IGVsc2UgaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoCisJCQkmY21kLT53YWl0X2Zvcl9jb21wbGV0aW9uLAorCQkJbXNlY3NfdG9famlmZmllcyhidWZmZXItPmlvYXJjYi5jbWRfdGltZW91dCAqIDEwMDApKSkgeworCisJCXBtY3JhaWRfaW5mbygiYWJvcnRpbmcgY21kICVkIChDREJbMF0gPSAleCkgZHVlIHRvIHRpbWVvdXRcbiIsCisJCQlsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hcmNiLnJlc3BvbnNlX2hhbmRsZSA+PiAyKSwKKwkJCWNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdKTsKKworCQlyYyA9IC1FVElNRURPVVQ7CisJCXNwaW5fbG9ja19pcnFzYXZlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJY2FuY2VsX2NtZCA9IHBtY3JhaWRfYWJvcnRfY21kKGNtZCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCisJCWlmIChjYW5jZWxfY21kKSB7CisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjYW5jZWxfY21kLT53YWl0X2Zvcl9jb21wbGV0aW9uKTsKKwkJCXBtY3JhaWRfcmV0dXJuX2NtZChjYW5jZWxfY21kKTsKKwkJfQorCisJCWdvdG8gb3V0X2ZyZWVfc2dsaXN0OworCX0KKworCS8qIElmIHRoZSBjb21tYW5kIGZhaWxlZCBmb3IgYW55IHJlYXNvbiwgY29weSBlbnRpcmUgSU9BU0EgYnVmZmVyIGFuZAorCSAqIHJldHVybiBJT0NUTCBzdWNjZXNzLiBJZiBjb3B5aW5nIElPQVNBIHRvIHVzZXItYnVmZmVyIGZhaWxzLCByZXR1cm4KKwkgKiBFRkFVTFQKKwkgKi8KKwlpZiAobGUzMl90b19jcHUoY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjKSkgeworCisJCXZvaWQgKmlvYXNhID0KKwkJICAgICh2b2lkICopKGFyZyArCisJCSAgICBvZmZzZXRvZihzdHJ1Y3QgcG1jcmFpZF9wYXNzdGhyb3VnaF9pb2N0bF9idWZmZXIsIGlvYXNhKSk7CisKKwkJcG1jcmFpZF9pbmZvKCJjb21tYW5kIGZhaWxlZCB3aXRoICV4XG4iLAorCQkJICAgICBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hc2EuaW9hc2MpKTsKKwkJaWYgKGNvcHlfdG9fdXNlcihpb2FzYSwgJmNtZC0+aW9hX2NiLT5pb2FzYSwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2lvYXNhKSkpIHsKKwkJCXBtY3JhaWRfZXJyKCJmYWlsZWQgdG8gY29weSBpb2FzYSBidWZmZXIgdG8gdXNlclxuIik7CisJCQlyYyA9IC1FRkFVTFQ7CisJCX0KKwl9CisJLyogSWYgdGhlIGRhdGEgdHJhbnNmZXIgd2FzIGZyb20gZGV2aWNlLCBjb3B5IHRoZSBkYXRhIG9udG8gdXNlcgorCSAqIGJ1ZmZlcnMKKwkgKi8KKwllbHNlIGlmIChkaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFICYmIHJlcXVlc3Rfc2l6ZSA+IDApIHsKKwkJcmMgPSBwbWNyYWlkX2NvcHlfc2dsaXN0KGNtZC0+c2dsaXN0LAorCQkJCQkgcmVxdWVzdF9idWZmZXIsCisJCQkJCSByZXF1ZXN0X3NpemUsCisJCQkJCSBkaXJlY3Rpb24pOworCQlpZiAocmMpIHsKKwkJCXBtY3JhaWRfZXJyKCJmYWlsZWQgdG8gY29weSB1c2VyIGJ1ZmZlclxuIik7CisJCQlyYyA9IC1FRkFVTFQ7CisJCX0KKwl9CisKK291dF9mcmVlX3NnbGlzdDoKKwlwbWNyYWlkX3JlbGVhc2VfcGFzc3Rocm91Z2hfaW9hZGxzKGNtZCwgcmVxdWVzdF9zaXplLCBkaXJlY3Rpb24pOworCXBtY3JhaWRfcmV0dXJuX2NtZChjbWQpOworCitvdXRfZnJlZV9idWZmZXI6CisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiByYzsKK30KKworCisKKworLyoqCisgKiBwbWNyYWlkX2lvY3RsX2RyaXZlciAtIGlvY3RsIGhhbmRsZXIgZm9yIGNvbW1hbmRzIGhhbmRsZWQgYnkgZHJpdmVyIGl0c2VsZgorICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBjbWQ6IGlvY3RsIGNvbW1hbmQgcGFzc2VkIGluCisgKiBAYnVmbGVuOiBsZW5ndGggb2YgdXNlcl9idWZmZXIKKyAqIEB1c2VyX2J1ZmZlcjogdXNlciBidWZmZXIgcG9pbnRlcgorICoKKyAqIFJldHVybiBWYWx1ZQorICogICAwIGluIGNhc2Ugb2Ygc3VjY2Vzcywgb3RoZXJ3aXNlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUKKyAqLworc3RhdGljIGxvbmcgcG1jcmFpZF9pb2N0bF9kcml2ZXIoCisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSwKKwl1bnNpZ25lZCBpbnQgY21kLAorCXVuc2lnbmVkIGludCBidWZsZW4sCisJdm9pZCBfX3VzZXIgKnVzZXJfYnVmZmVyCispCit7CisJaW50IHJjID0gLUVOT1NZUzsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1c2VyX2J1ZmZlciwgX0lPQ19TSVpFKGNtZCkpKSB7CisJCXBtY3JhaWRfZXJyKCJpb2N0bF9kcml2ZXI6IGFjY2VzcyBmYXVsdCBpbiByZXF1ZXN0IGJ1ZmZlciBcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUE1DUkFJRF9JT0NUTF9SRVNFVF9BREFQVEVSOgorCQlwbWNyYWlkX3Jlc2V0X2JyaW5ndXAocGluc3RhbmNlKTsKKwkJcmMgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBwbWNyYWlkX2NoZWNrX2lvY3RsX2J1ZmZlciAtIGNoZWNrIGZvciBwcm9wZXIgYWNjZXNzIHRvIHVzZXIgYnVmZmVyCisgKgorICogQGNtZDogaW9jdGwgY29tbWFuZAorICogQGFyZzogdXNlciBidWZmZXIKKyAqIEBoZHI6IHBvaW50ZXIgdG8ga2VybmVsIG1lbW9yeSBmb3IgcG1jcmFpZF9pb2N0bF9oZWFkZXIKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCW5lZ2V0aXZlIGVycm9yIGNvZGUgaWYgdGhlcmUgYXJlIGFjY2VzcyBpc3N1ZXMsIG90aGVyd2lzZSB6ZXJvLgorICoJVXBvbiBzdWNjZXNzLCByZXR1cm5zIGlvY3RsIGhlYWRlciBjb3BpZWQgb3V0IG9mIHVzZXIgYnVmZmVyLgorICovCisKK3N0YXRpYyBpbnQgcG1jcmFpZF9jaGVja19pb2N0bF9idWZmZXIoCisJaW50IGNtZCwKKwl2b2lkIF9fdXNlciAqYXJnLAorCXN0cnVjdCBwbWNyYWlkX2lvY3RsX2hlYWRlciAqaGRyCispCit7CisJaW50IHJjID0gMDsKKwlpbnQgYWNjZXNzID0gVkVSSUZZX1JFQUQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoaGRyLCBhcmcsIHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9pb2N0bF9oZWFkZXIpKSkgeworCQlwbWNyYWlkX2VycigiY291bGRuJ3QgY29weSBpb2N0bCBoZWFkZXIgZnJvbSB1c2VyIGJ1ZmZlclxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIGNoZWNrIGZvciB2YWxpZCBkcml2ZXIgc2lnbmF0dXJlICovCisJcmMgPSBtZW1jbXAoaGRyLT5zaWduYXR1cmUsCisJCSAgICBQTUNSQUlEX0lPQ1RMX1NJR05BVFVSRSwKKwkJICAgIHNpemVvZihoZHItPnNpZ25hdHVyZSkpOworCWlmIChyYykgeworCQlwbWNyYWlkX2Vycigic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBidWZmZXIgbGVuZ3RoIGNhbid0IGJlIG5lZ2V0aXZlICovCisJaWYgKGhkci0+YnVmZmVyX2xlbmd0aCA8IDApIHsKKwkJcG1jcmFpZF9lcnIoImlvY3RsOiBpbnZhbGlkIGJ1ZmZlciBsZW5ndGggc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgZm9yIGFwcHJvcHJpYXRlIGJ1ZmZlciBhY2Nlc3MgKi8KKwlpZiAoKF9JT0NfRElSKGNtZCkgJiBfSU9DX1JFQUQpID09IF9JT0NfUkVBRCkKKwkJYWNjZXNzID0gVkVSSUZZX1dSSVRFOworCisJcmMgPSBhY2Nlc3Nfb2soYWNjZXNzLAorCQkgICAgICAgKGFyZyArIHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9pb2N0bF9oZWFkZXIpKSwKKwkJICAgICAgIGhkci0+YnVmZmVyX2xlbmd0aCk7CisJaWYgKCFyYykgeworCQlwbWNyYWlkX2VycigiYWNjZXNzIGZhaWxlZCBmb3IgdXNlciBidWZmZXIgb2Ygc2l6ZSAlZFxuIiwKKwkJCSAgICAgaGRyLT5idWZmZXJfbGVuZ3RoKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIHBtY3JhaWRfaW9jdGwgLSBjaGFyIG5vZGUgaW9jdGwgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIGxvbmcgcG1jcmFpZF9jaHJfaW9jdGwoCisJc3RydWN0IGZpbGUgKmZpbGVwLAorCXVuc2lnbmVkIGludCBjbWQsCisJdW5zaWduZWQgbG9uZyBhcmcKKykKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gTlVMTDsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2N0bF9oZWFkZXIgKmhkciA9IE5VTEw7CisJaW50IHJldHZhbCA9IC1FTk9UVFk7CisKKwloZHIgPSBrbWFsbG9jKEdGUF9LRVJORUwsIHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9pb2N0bF9oZWFkZXIpKTsKKworCWlmICghaGRyKSB7CisJCXBtY3JhaWRfZXJyKCJmYWlsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlvY3RsIGhlYWRlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHZhbCA9IHBtY3JhaWRfY2hlY2tfaW9jdGxfYnVmZmVyKGNtZCwgKHZvaWQgKilhcmcsIGhkcik7CisKKwlpZiAocmV0dmFsKSB7CisJCXBtY3JhaWRfaW5mbygiY2hyX2lvY3RsOiBoZWFkZXIgY2hlY2sgZmFpbGVkXG4iKTsKKwkJa2ZyZWUoaGRyKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlwaW5zdGFuY2UgPSAoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKilmaWxlcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFwaW5zdGFuY2UpIHsKKwkJcG1jcmFpZF9pbmZvKCJhZGFwdGVyIGluc3RhbmNlIGlzIG5vdCBmb3VuZFxuIik7CisJCWtmcmVlKGhkcik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCXN3aXRjaCAoX0lPQ19UWVBFKGNtZCkpIHsKKworCWNhc2UgUE1DUkFJRF9QQVNTVEhST1VHSF9JT0NUTDoKKwkJLyogSWYgaW9jdGwgY29kZSBpcyB0byBkb3dubG9hZCBtaWNyb2NvZGUsIHdlIG5lZWQgdG8gYmxvY2sKKwkJICogbWlkLWxheWVyIHJlcXVlc3RzLgorCQkgKi8KKwkJaWYgKGNtZCA9PSBQTUNSQUlEX0lPQ1RMX0RPV05MT0FEX01JQ1JPQ09ERSkKKwkJCXNjc2lfYmxvY2tfcmVxdWVzdHMocGluc3RhbmNlLT5ob3N0KTsKKworCQlyZXR2YWwgPSBwbWNyYWlkX2lvY3RsX3Bhc3N0aHJvdWdoKHBpbnN0YW5jZSwKKwkJCQkJCSAgIGNtZCwKKwkJCQkJCSAgIGhkci0+YnVmZmVyX2xlbmd0aCwKKwkJCQkJCSAgIGFyZyk7CisKKwkJaWYgKGNtZCA9PSBQTUNSQUlEX0lPQ1RMX0RPV05MT0FEX01JQ1JPQ09ERSkKKwkJCXNjc2lfdW5ibG9ja19yZXF1ZXN0cyhwaW5zdGFuY2UtPmhvc3QpOworCQlicmVhazsKKworCWNhc2UgUE1DUkFJRF9EUklWRVJfSU9DVEw6CisJCWFyZyArPSBzaXplb2Yoc3RydWN0IHBtY3JhaWRfaW9jdGxfaGVhZGVyKTsKKwkJcmV0dmFsID0gcG1jcmFpZF9pb2N0bF9kcml2ZXIocGluc3RhbmNlLAorCQkJCQkgICAgICBjbWQsCisJCQkJCSAgICAgIGhkci0+YnVmZmVyX2xlbmd0aCwKKwkJCQkJICAgICAgKHZvaWQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRU5PVFRZOworCQlicmVhazsKKwl9CisKKwlrZnJlZShoZHIpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBGaWxlIG9wZXJhdGlvbnMgc3RydWN0dXJlIGZvciBtYW5hZ2VtZW50IGludGVyZmFjZQorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwbWNyYWlkX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBwbWNyYWlkX2Nocl9vcGVuLAorCS5yZWxlYXNlID0gcG1jcmFpZF9jaHJfcmVsZWFzZSwKKwkuZmFzeW5jID0gcG1jcmFpZF9jaHJfZmFzeW5jLAorCS51bmxvY2tlZF9pb2N0bCA9IHBtY3JhaWRfY2hyX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gcG1jcmFpZF9jaHJfaW9jdGwsCisjZW5kaWYKK307CisKKworCisKKy8qKgorICogcG1jcmFpZF9zaG93X2xvZ19sZXZlbCAtIERpc3BsYXkgYWRhcHRlcidzIGVycm9yIGxvZ2dpbmcgbGV2ZWwKKyAqIEBkZXY6IGNsYXNzIGRldmljZSBzdHJ1Y3QKKyAqIEBidWY6IGJ1ZmZlcgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqICBudW1iZXIgb2YgYnl0ZXMgcHJpbnRlZCB0byBidWZmZXIKKyAqLworc3RhdGljIHNzaXplX3QgcG1jcmFpZF9zaG93X2xvZ19sZXZlbCgKKwlzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0KKwkJKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICopc2hvc3QtPmhvc3RkYXRhOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBwaW5zdGFuY2UtPmN1cnJlbnRfbG9nX2xldmVsKTsKK30KKworLyoqCisgKiBwbWNyYWlkX3N0b3JlX2xvZ19sZXZlbCAtIENoYW5nZSB0aGUgYWRhcHRlcidzIGVycm9yIGxvZ2dpbmcgbGV2ZWwKKyAqIEBkZXY6IGNsYXNzIGRldmljZSBzdHJ1Y3QKKyAqIEBidWY6IGJ1ZmZlcgorICogQGNvdW50OiBub3QgdXNlZAorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqICBudW1iZXIgb2YgYnl0ZXMgcHJpbnRlZCB0byBidWZmZXIKKyAqLworc3RhdGljIHNzaXplX3QgcG1jcmFpZF9zdG9yZV9sb2dfbGV2ZWwoCisJc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCWNvbnN0IGNoYXIgKmJ1ZiwKKwlzaXplX3QgY291bnQKKykKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBsb2ctbGV2ZWwgc2hvdWxkIGJlIGZyb20gMCB0byAyICovCisJaWYgKHZhbCA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXBpbnN0YW5jZSA9IChzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqKXNob3N0LT5ob3N0ZGF0YTsKKwlwaW5zdGFuY2UtPmN1cnJlbnRfbG9nX2xldmVsID0gdmFsOworCisJcmV0dXJuIHN0cmxlbihidWYpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcG1jcmFpZF9sb2dfbGV2ZWxfYXR0ciA9IHsKKwkuYXR0ciA9IHsKKwkJIC5uYW1lID0gImxvZ19sZXZlbCIsCisJCSAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAorCQkgfSwKKwkuc2hvdyA9IHBtY3JhaWRfc2hvd19sb2dfbGV2ZWwsCisJLnN0b3JlID0gcG1jcmFpZF9zdG9yZV9sb2dfbGV2ZWwsCit9OworCisvKioKKyAqIHBtY3JhaWRfc2hvd19kcnZfdmVyc2lvbiAtIERpc3BsYXkgZHJpdmVyIHZlcnNpb24KKyAqIEBkZXY6IGNsYXNzIGRldmljZSBzdHJ1Y3QKKyAqIEBidWY6IGJ1ZmZlcgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqICBudW1iZXIgb2YgYnl0ZXMgcHJpbnRlZCB0byBidWZmZXIKKyAqLworc3RhdGljIHNzaXplX3QgcG1jcmFpZF9zaG93X2Rydl92ZXJzaW9uKAorCXN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwljaGFyICpidWYKKykKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJ2ZXJzaW9uOiAlcywgYnVpbGQgZGF0ZTogJXNcbiIsCisJCQlQTUNSQUlEX0RSSVZFUl9WRVJTSU9OLCBQTUNSQUlEX0RSSVZFUl9EQVRFKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBtY3JhaWRfZHJpdmVyX3ZlcnNpb25fYXR0ciA9IHsKKwkuYXR0ciA9IHsKKwkJIC5uYW1lID0gImRydl92ZXJzaW9uIiwKKwkJIC5tb2RlID0gU19JUlVHTywKKwkJIH0sCisJLnNob3cgPSBwbWNyYWlkX3Nob3dfZHJ2X3ZlcnNpb24sCit9OworCisvKioKKyAqIHBtY3JhaWRfc2hvd19pb19hZGFwdGVyX2lkIC0gRGlzcGxheSBkcml2ZXIgYXNzaWduZWQgYWRhcHRlciBpZAorICogQGRldjogY2xhc3MgZGV2aWNlIHN0cnVjdAorICogQGJ1ZjogYnVmZmVyCisgKgorICogUmV0dXJuIHZhbHVlOgorICogIG51bWJlciBvZiBieXRlcyBwcmludGVkIHRvIGJ1ZmZlcgorICovCitzdGF0aWMgc3NpemVfdCBwbWNyYWlkX3Nob3dfYWRhcHRlcl9pZCgKKwlzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJY2hhciAqYnVmCispCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPQorCQkoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKilzaG9zdC0+aG9zdGRhdGE7CisJdTMyIGFkYXB0ZXJfaWQgPSAocGluc3RhbmNlLT5wZGV2LT5idXMtPm51bWJlciA8PCA4KSB8CisJCXBpbnN0YW5jZS0+cGRldi0+ZGV2Zm47CisJdTMyIGFlbl9ncm91cCA9IHBtY3JhaWRfZXZlbnRfZmFtaWx5LmlkOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLAorCQkJImFkYXB0ZXIgaWQ6ICVkXG5taW5vcjogJWRcbmFlbiBncm91cDogJWRcbiIsCisJCQlhZGFwdGVyX2lkLCBNSU5PUihwaW5zdGFuY2UtPmNkZXYuZGV2KSwgYWVuX2dyb3VwKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBtY3JhaWRfYWRhcHRlcl9pZF9hdHRyID0geworCS5hdHRyID0geworCQkgLm5hbWUgPSAiYWRhcHRlcl9pZCIsCisJCSAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAorCQkgfSwKKwkuc2hvdyA9IHBtY3JhaWRfc2hvd19hZGFwdGVyX2lkLAorfTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpwbWNyYWlkX2hvc3RfYXR0cnNbXSA9IHsKKwkmcG1jcmFpZF9sb2dfbGV2ZWxfYXR0ciwKKwkmcG1jcmFpZF9kcml2ZXJfdmVyc2lvbl9hdHRyLAorCSZwbWNyYWlkX2FkYXB0ZXJfaWRfYXR0ciwKKwlOVUxMLAorfTsKKworCisvKiBob3N0IHRlbXBsYXRlIHN0cnVjdHVyZSBmb3IgcG1jcmFpZCBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBtY3JhaWRfaG9zdF90ZW1wbGF0ZSA9IHsKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSBQTUNSQUlEX0RSSVZFUl9OQU1FLAorCS5xdWV1ZWNvbW1hbmQgPSBwbWNyYWlkX3F1ZXVlY29tbWFuZCwKKwkuZWhfYWJvcnRfaGFuZGxlciA9IHBtY3JhaWRfZWhfYWJvcnRfaGFuZGxlciwKKwkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgPSBwbWNyYWlkX2VoX2J1c19yZXNldF9oYW5kbGVyLAorCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlciA9IHBtY3JhaWRfZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIsCisJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gcG1jcmFpZF9laF9kZXZpY2VfcmVzZXRfaGFuZGxlciwKKwkuZWhfaG9zdF9yZXNldF9oYW5kbGVyID0gcG1jcmFpZF9laF9ob3N0X3Jlc2V0X2hhbmRsZXIsCisKKwkuc2xhdmVfYWxsb2MgPSBwbWNyYWlkX3NsYXZlX2FsbG9jLAorCS5zbGF2ZV9jb25maWd1cmUgPSBwbWNyYWlkX3NsYXZlX2NvbmZpZ3VyZSwKKwkuc2xhdmVfZGVzdHJveSA9IHBtY3JhaWRfc2xhdmVfZGVzdHJveSwKKwkuY2hhbmdlX3F1ZXVlX2RlcHRoID0gcG1jcmFpZF9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV90eXBlICA9IHBtY3JhaWRfY2hhbmdlX3F1ZXVlX3R5cGUsCisJLmNhbl9xdWV1ZSA9IFBNQ1JBSURfTUFYX0lPX0NNRCwKKwkudGhpc19pZCA9IC0xLAorCS5zZ190YWJsZXNpemUgPSBQTUNSQUlEX01BWF9JT0FETFMsCisJLm1heF9zZWN0b3JzID0gUE1DUkFJRF9JT0FfTUFYX1NFQ1RPUlMsCisJLmNtZF9wZXJfbHVuID0gUE1DUkFJRF9NQVhfQ01EX1BFUl9MVU4sCisJLnVzZV9jbHVzdGVyaW5nID0gRU5BQkxFX0NMVVNURVJJTkcsCisJLnNob3N0X2F0dHJzID0gcG1jcmFpZF9ob3N0X2F0dHJzLAorCS5wcm9jX25hbWUgPSBQTUNSQUlEX0RSSVZFUl9OQU1FCit9OworCisvKioKKyAqIHBtY3JhaWRfaXNyX2NvbW1vbiAtIENvbW1vbiBpbnRlcnJ1cHQgaGFuZGxlciByb3V0aW5lCisgKgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBhZGFwdGVyIGluc3RhbmNlCisgKiBAaW50cnM6IGFjdGl2ZSBpbnRlcnJ1cHRzIChjb250ZW50cyBvZiBpb2FfaG9zdF9pbnRlcnJ1cHQgcmVnaXN0ZXIpCisgKiBAaHJycV9pZDogSG9zdCBSUlEgaW5kZXgKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCW5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9pc3JfY29tbW9uKAorCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UsCisJdTMyIGludHJzLAorCWludCBocnJxX2lkCispCit7CisJdTMyIGludHJzX2NsZWFyID0KKwkJKGludHJzICYgSU5UUlNfQ1JJVElDQUxfT1BfSU5fUFJPR1JFU1MpID8gaW50cnMKKwkJCQkJCQk6IElOVFJTX0hSUlFfVkFMSUQ7CisJaW93cml0ZTMyKGludHJzX2NsZWFyLAorCQkgIHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X2Nscl9yZWcpOworCWludHJzID0gaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfcmVnKTsKKworCS8qIGhycnEgdmFsaWQgYml0IHdhcyBzZXQsIHNjaGVkdWxlIHRhc2tsZXQgdG8gaGFuZGxlIHRoZSByZXNwb25zZSAqLworCWlmIChpbnRyc19jbGVhciA9PSBJTlRSU19IUlJRX1ZBTElEKQorCQl0YXNrbGV0X3NjaGVkdWxlKCYocGluc3RhbmNlLT5pc3JfdGFza2xldFtocnJxX2lkXSkpOworfQorCisvKioKKyAqIHBtY3JhaWRfaXNyICAtIGltcGxlbWVudHMgaW50ZXJydXB0IGhhbmRsaW5nIHJvdXRpbmUKKyAqCisgKiBAaXJxOiBpbnRlcnJ1cHQgdmVjdG9yIG51bWJlcgorICogQGRldl9pZDogcG9pbnRlciBocnJxX3ZlY3RvcgorICoKKyAqIFJldHVybiBWYWx1ZQorICoJIElSUV9IQU5ETEVEIGlmIGludGVycnVwdCBpcyBoYW5kbGVkIG9yIElSUV9OT05FIGlmIGlnbm9yZWQKKyAqLworc3RhdGljIGlycXJldHVybl90IHBtY3JhaWRfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pc3JfcGFyYW0gKmhycnFfdmVjdG9yOworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2U7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCXUzMiBpbnRyczsKKworCS8qIEluIGNhc2Ugb2YgbGVnYWN5IGludGVycnVwdCBtb2RlIHdoZXJlIGludGVycnVwdHMgYXJlIHNoYXJlZCBhY3Jvc3MKKwkgKiBpc3JzLCBpdCBtYXkgYmUgcG9zc2libGUgdGhhdCB0aGUgY3VycmVudCBpbnRlcnJ1cHQgaXMgbm90IGZyb20gSU9BCisJICovCisJaWYgKCFkZXZfaWQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKTogTlVMTCBob3N0IHBvaW50ZXJcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWhycnFfdmVjdG9yID0gKHN0cnVjdCBwbWNyYWlkX2lzcl9wYXJhbSAqKWRldl9pZDsKKwlwaW5zdGFuY2UgPSBocnJxX3ZlY3Rvci0+ZHJ2X2luc3Q7CisKKwkvKiBBY3F1aXJlIHRoZSBsb2NrIChjdXJyZW50bHkgaG9zdF9sb2NrKSB3aGlsZSBwcm9jZXNzaW5nIGludGVycnVwdHMuCisJICogVGhpcyBpbnRlcnZhbCBpcyBzbWFsbCBhcyBtb3N0IG9mIHRoZSByZXNwb25zZSBwcm9jZXNzaW5nIGlzIGRvbmUgYnkKKwkgKiB0YXNrbGV0IHdpdGhvdXQgdGhlIGxvY2suCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCWludHJzID0gcG1jcmFpZF9yZWFkX2ludGVycnVwdHMocGluc3RhbmNlKTsKKworCWlmICh1bmxpa2VseSgoaW50cnMgJiBQTUNSQUlEX1BDSV9JTlRFUlJVUFRTKSA9PSAwKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCS8qIEFueSBlcnJvciBpbnRlcnJ1cHRzIGluY2x1ZGluZyB1bml0X2NoZWNrLCBpbml0aWF0ZSBJT0EgcmVzZXQuCisJICogSW4gY2FzZSBvZiB1bml0IGNoZWNrIGluZGljYXRlIHRvIHJlc2V0X3NlcXVlbmNlIHRoYXQgSU9BIHVuaXQKKwkgKiBjaGVja2VkIGFuZCBwcmVwYXJlIGZvciBhIGR1bXAgZHVyaW5nIHJlc2V0IHNlcXVlbmNlCisJICovCisJaWYgKGludHJzICYgUE1DUkFJRF9FUlJPUl9JTlRFUlJVUFRTKSB7CisKKwkJaWYgKGludHJzICYgSU5UUlNfSU9BX1VOSVRfQ0hFQ0spCisJCQlwaW5zdGFuY2UtPmlvYV91bml0X2NoZWNrID0gMTsKKworCQlpb3dyaXRlMzIoaW50cnMsCisJCQkgIHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X2Nscl9yZWcpOworCQlwbWNyYWlkX2VycigiSVNSOiBlcnJvciBpbnRlcnJ1cHRzOiAleCBpbml0aWF0aW5nIHJlc2V0XG4iLAorCQkJICAgIGludHJzKTsKKwkJaW50cnMgPSBpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9yZWcpOworCQlwbWNyYWlkX2luaXRpYXRlX3Jlc2V0KHBpbnN0YW5jZSk7CisJfSBlbHNlIHsKKwkJcG1jcmFpZF9pc3JfY29tbW9uKHBpbnN0YW5jZSwgaW50cnMsIGhycnFfdmVjdG9yLT5ocnJxX2lkKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisvKioKKyAqIHBtY3JhaWRfd29ya2VyX2Z1bmN0aW9uIC0gIHdvcmtlciB0aHJlYWQgZnVuY3Rpb24KKyAqCisgKiBAd29ya3A6IHBvaW50ZXIgdG8gc3RydWN0IHdvcmsgcXVldWUKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCSBOb25lCisgKi8KKworc3RhdGljIHZvaWQgcG1jcmFpZF93b3JrZXJfZnVuY3Rpb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrcCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlOworCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXM7CisJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnRlbXA7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwl1bnNpZ25lZCBsb25nIGhvc3RfbG9ja19mbGFnczsKKwl1OCBidXMsIHRhcmdldCwgbHVuOworCisJcGluc3RhbmNlID0gY29udGFpbmVyX29mKHdvcmtwLCBzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSwgd29ya2VyX3EpOworCS8qIGFkZCByZXNvdXJjZXMgb25seSBhZnRlciBob3N0IGlzIGFkZGVkIGludG8gc3lzdGVtICovCisJaWYgKCFhdG9taWNfcmVhZCgmcGluc3RhbmNlLT5leHBvc2VfcmVzb3VyY2VzKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jaywgbG9ja19mbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcywgdGVtcCwgJnBpbnN0YW5jZS0+dXNlZF9yZXNfcSwgcXVldWUpIHsKKworCQlpZiAocmVzLT5jaGFuZ2VfZGV0ZWN0ZWQgPT0gUkVTX0NIQU5HRV9ERUwgJiYgcmVzLT5zY3NpX2RldikgeworCQkJc2RldiA9IHJlcy0+c2NzaV9kZXY7CisKKwkJCS8qIGhvc3RfbG9jayBtdXN0IGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKKwkJCSAqIHNjc2lfZGV2aWNlX2dldAorCQkJICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywKKwkJCQkJICBob3N0X2xvY2tfZmxhZ3MpOworCQkJaWYgKCFzY3NpX2RldmljZV9nZXQoc2RldikpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAorCQkJCQkJcGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCQlob3N0X2xvY2tfZmxhZ3MpOworCQkJCXBtY3JhaWRfaW5mbygiZGVsZXRpbmcgJXggZnJvbSBtaWRsYXllclxuIiwKKwkJCQkJICAgICByZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV9hZGRyZXNzKTsKKwkJCQlsaXN0X21vdmVfdGFpbCgmcmVzLT5xdWV1ZSwKKwkJCQkJCSZwaW5zdGFuY2UtPmZyZWVfcmVzX3EpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCisJCQkJCSZwaW5zdGFuY2UtPnJlc291cmNlX2xvY2ssCisJCQkJCWxvY2tfZmxhZ3MpOworCQkJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKKwkJCQlzY3NpX2RldmljZV9wdXQoc2Rldik7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jaywKKwkJCQkJCSAgIGxvY2tfZmxhZ3MpOworCQkJCXJlcy0+Y2hhbmdlX2RldGVjdGVkID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKKwkJCQkJCXBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAorCQkJCQkJaG9zdF9sb2NrX2ZsYWdzKTsKKwkJCX0KKwkJfQorCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVzLCAmcGluc3RhbmNlLT51c2VkX3Jlc19xLCBxdWV1ZSkgeworCisJCWlmIChyZXMtPmNoYW5nZV9kZXRlY3RlZCA9PSBSRVNfQ0hBTkdFX0FERCkgeworCisJCQlpZiAoIXBtY3JhaWRfZXhwb3NlX3Jlc291cmNlKCZyZXMtPmNmZ19lbnRyeSkpCisJCQkJY29udGludWU7CisKKwkJCWlmIChSRVNfSVNfVlNFVChyZXMtPmNmZ19lbnRyeSkpIHsKKwkJCQlidXMgPSBQTUNSQUlEX1ZTRVRfQlVTX0lEOworCQkJCXRhcmdldCA9IHJlcy0+Y2ZnX2VudHJ5LnVuaXF1ZV9mbGFnczE7CisJCQkJbHVuID0gUE1DUkFJRF9WU0VUX0xVTl9JRDsKKwkJCX0gZWxzZSB7CisJCQkJYnVzID0gUE1DUkFJRF9QSFlTX0JVU19JRDsKKwkJCQl0YXJnZXQgPQorCQkJCSAgICAgUkVTX1RBUkdFVCgKKwkJCQkJcmVzLT5jZmdfZW50cnkucmVzb3VyY2VfYWRkcmVzcyk7CisJCQkJbHVuID0gUkVTX0xVTihyZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV9hZGRyZXNzKTsKKwkJCX0KKworCQkJcmVzLT5jaGFuZ2VfZGV0ZWN0ZWQgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLAorCQkJCQkJbG9ja19mbGFncyk7CisJCQlzY3NpX2FkZF9kZXZpY2UocGluc3RhbmNlLT5ob3N0LCBidXMsIHRhcmdldCwgbHVuKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5zdGFuY2UtPnJlc291cmNlX2xvY2ssCisJCQkJCSAgIGxvY2tfZmxhZ3MpOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLCBsb2NrX2ZsYWdzKTsKK30KKworLyoqCisgKiBwbWNyYWlkX3Rhc2tsZXRfZnVuY3Rpb24gLSBUYXNrbGV0IGZ1bmN0aW9uCisgKgorICogQGluc3RhbmNlOiBwb2ludGVyIHRvIG1zaXggcGFyYW0gc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlCisgKglOb25lCisgKi8KK3ZvaWQgcG1jcmFpZF90YXNrbGV0X2Z1bmN0aW9uKHVuc2lnbmVkIGxvbmcgaW5zdGFuY2UpCit7CisJc3RydWN0IHBtY3JhaWRfaXNyX3BhcmFtICpocnJxX3ZlY3RvcjsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlOworCXVuc2lnbmVkIGxvbmcgaHJycV9sb2NrX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgcGVuZGluZ19sb2NrX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgaG9zdF9sb2NrX2ZsYWdzOworCXNwaW5sb2NrX3QgKmxvY2twOyAvKiBocnJxIGJ1ZmZlciBsb2NrICovCisJaW50IGlkOworCXUzMiBpbnRyczsKKwlfX2xlMzIgcmVzcDsKKworCWhycnFfdmVjdG9yID0gKHN0cnVjdCBwbWNyYWlkX2lzcl9wYXJhbSAqKWluc3RhbmNlOworCXBpbnN0YW5jZSA9IGhycnFfdmVjdG9yLT5kcnZfaW5zdDsKKwlpZCA9IGhycnFfdmVjdG9yLT5ocnJxX2lkOworCWxvY2twID0gJihwaW5zdGFuY2UtPmhycnFfbG9ja1tpZF0pOworCWludHJzID0gcG1jcmFpZF9yZWFkX2ludGVycnVwdHMocGluc3RhbmNlKTsKKworCS8qIElmIGludGVycnVwdHMgd2FzIGFzIHBhcnQgb2YgdGhlIGlvYSBpbml0aWFsaXphdGlvbiwgY2xlYXIgYW5kIG1hc2sKKwkgKiBpdC4gRGVsZXRlIHRoZSB0aW1lciBhbmQgd2FrZXVwIHRoZSByZXNldCBlbmdpbmUgdG8gcHJvY2VlZCB3aXRoCisJICogcmVzZXQgc2VxdWVuY2UKKwkgKi8KKwlpZiAoaW50cnMgJiBJTlRSU19UUkFOU0lUSU9OX1RPX09QRVJBVElPTkFMKSB7CisJCWlvd3JpdGUzMihJTlRSU19UUkFOU0lUSU9OX1RPX09QRVJBVElPTkFMLAorCQkJcGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfbWFza19yZWcpOworCQlpb3dyaXRlMzIoSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCwKKwkJCXBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X2Nscl9yZWcpOworCisJCWlmIChwaW5zdGFuY2UtPnJlc2V0X2NtZCAhPSBOVUxMKSB7CisJCQlkZWxfdGltZXIoJnBpbnN0YW5jZS0+cmVzZXRfY21kLT50aW1lcik7CisJCQlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywKKwkJCQkJICBob3N0X2xvY2tfZmxhZ3MpOworCQkJcGluc3RhbmNlLT5yZXNldF9jbWQtPmNtZF9kb25lKHBpbnN0YW5jZS0+cmVzZXRfY21kKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgICAgICBob3N0X2xvY2tfZmxhZ3MpOworCQl9CisJCXJldHVybjsKKwl9CisKKwkvKiBsb29wIHRocm91Z2ggZWFjaCBvZiB0aGUgY29tbWFuZHMgcmVzcG9uZGVkIGJ5IElPQS4gRWFjaCBIUlJRIGJ1ZiBpcworCSAqIHByb3RlY3RlZCBieSBpdHMgb3duIGxvY2suIFRyYXZlcnNhbHMgbXVzdCBiZSBkb25lIHdpdGhpbiB0aGlzIGxvY2sKKwkgKiBhcyB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgdGFza2xldHMgcnVubmluZyBvbiBtdWx0aXBsZSBDUFVzLiBOb3RlCisJICogdGhhdCB0aGUgbG9jayBpcyBoZWxkIGp1c3QgZm9yIHBpY2tpbmcgdXAgdGhlIHJlc3BvbnNlIGhhbmRsZSBhbmQKKwkgKiBtYW5pcHVsYXRpbmcgaHJycV9jdXJyL3RvZ2dsZV9iaXQgdmFsdWVzLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKGxvY2twLCBocnJxX2xvY2tfZmxhZ3MpOworCisJcmVzcCA9IGxlMzJfdG9fY3B1KCoocGluc3RhbmNlLT5ocnJxX2N1cnJbaWRdKSk7CisKKwl3aGlsZSAoKHJlc3AgJiBIUlJRX1RPR0dMRV9CSVQpID09CisJCXBpbnN0YW5jZS0+aG9zdF90b2dnbGVfYml0W2lkXSkgeworCisJCWludCBjbWRfaW5kZXggPSByZXNwID4+IDI7CisJCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kID0gTlVMTDsKKworCQlpZiAoY21kX2luZGV4IDwgUE1DUkFJRF9NQVhfQ01EKSB7CisJCQljbWQgPSBwaW5zdGFuY2UtPmNtZF9saXN0W2NtZF9pbmRleF07CisJCX0gZWxzZSB7CisJCQkvKiBJbiBjYXNlIG9mIGludmFsaWQgcmVzcG9uc2UgaGFuZGxlLCBpbml0aWF0ZSBJT0EKKwkJCSAqIHJlc2V0IHNlcXVlbmNlLgorCQkJICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2twLCBocnJxX2xvY2tfZmxhZ3MpOworCisJCQlwbWNyYWlkX2VycigiSW52YWxpZCByZXNwb25zZSAlZCBpbml0aWF0aW5nIHJlc2V0XG4iLAorCQkJCSAgICBjbWRfaW5kZXgpOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywKKwkJCQkJICBob3N0X2xvY2tfZmxhZ3MpOworCQkJcG1jcmFpZF9pbml0aWF0ZV9yZXNldChwaW5zdGFuY2UpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywKKwkJCQkJICAgICAgIGhvc3RfbG9ja19mbGFncyk7CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKGxvY2twLCBocnJxX2xvY2tfZmxhZ3MpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocGluc3RhbmNlLT5ocnJxX2N1cnJbaWRdIDwgcGluc3RhbmNlLT5ocnJxX2VuZFtpZF0pIHsKKwkJCXBpbnN0YW5jZS0+aHJycV9jdXJyW2lkXSsrOworCQl9IGVsc2UgeworCQkJcGluc3RhbmNlLT5ocnJxX2N1cnJbaWRdID0gcGluc3RhbmNlLT5ocnJxX3N0YXJ0W2lkXTsKKwkJCXBpbnN0YW5jZS0+aG9zdF90b2dnbGVfYml0W2lkXSBePSAxdTsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9ja3AsIGhycnFfbG9ja19mbGFncyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbnN0YW5jZS0+cGVuZGluZ19wb29sX2xvY2ssCisJCQkJICAgcGVuZGluZ19sb2NrX2ZsYWdzKTsKKwkJbGlzdF9kZWwoJmNtZC0+ZnJlZV9saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGluc3RhbmNlLT5wZW5kaW5nX3Bvb2xfbG9jaywKKwkJCQkJcGVuZGluZ19sb2NrX2ZsYWdzKTsKKwkJZGVsX3RpbWVyKCZjbWQtPnRpbWVyKTsKKwkJYXRvbWljX2RlYygmcGluc3RhbmNlLT5vdXRzdGFuZGluZ19jbWRzKTsKKworCQlpZiAoY21kLT5jbWRfZG9uZSA9PSBwbWNyYWlkX2lvYV9yZXNldCkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgaG9zdF9sb2NrX2ZsYWdzKTsKKwkJCWNtZC0+Y21kX2RvbmUoY21kKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgICAgICBob3N0X2xvY2tfZmxhZ3MpOworCQl9IGVsc2UgaWYgKGNtZC0+Y21kX2RvbmUgIT0gTlVMTCkgeworCQkJY21kLT5jbWRfZG9uZShjbWQpOworCQl9CisJCS8qIGxvb3Agb3ZlciB1bnRpbCB3ZSBhcmUgZG9uZSB3aXRoIGFsbCByZXNwb25zZXMgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUobG9ja3AsIGhycnFfbG9ja19mbGFncyk7CisJCXJlc3AgPSBsZTMyX3RvX2NwdSgqKHBpbnN0YW5jZS0+aHJycV9jdXJyW2lkXSkpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9ja3AsIGhycnFfbG9ja19mbGFncyk7Cit9CisKKy8qKgorICogcG1jcmFpZF91bnJlZ2lzdGVyX2ludGVycnVwdF9oYW5kbGVyIC0gZGUtcmVnaXN0ZXIgaW50ZXJydXB0cyBoYW5kbGVycworICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgcm91dGluZSB1bi1yZWdpc3RlcnMgcmVnaXN0ZXJlZCBpbnRlcnJ1cHQgaGFuZGxlciBhbmQKKyAqIGFsc28gZnJlZXMgaXJxcy92ZWN0b3JzLgorICoKKyAqIFJldHVuIFZhbHVlCisgKglOb25lCisgKi8KK3N0YXRpYwordm9pZCBwbWNyYWlkX3VucmVnaXN0ZXJfaW50ZXJydXB0X2hhbmRsZXIoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlmcmVlX2lycShwaW5zdGFuY2UtPnBkZXYtPmlycSwgJihwaW5zdGFuY2UtPmhycnFfdmVjdG9yWzBdKSk7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZWdpc3Rlcl9pbnRlcnJ1cHRfaGFuZGxlciAtIHJlZ2lzdGVycyBpbnRlcnJ1cHQgaGFuZGxlcgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBwZXItYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCTAgb24gc3VjY2Vzcywgbm9uLXplcm8gZXJyb3IgY29kZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQKK3BtY3JhaWRfcmVnaXN0ZXJfaW50ZXJydXB0X2hhbmRsZXIoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHBpbnN0YW5jZS0+cGRldjsKKworCXBpbnN0YW5jZS0+aHJycV92ZWN0b3JbMF0uaHJycV9pZCA9IDA7CisJcGluc3RhbmNlLT5ocnJxX3ZlY3RvclswXS5kcnZfaW5zdCA9IHBpbnN0YW5jZTsKKwlwaW5zdGFuY2UtPmhycnFfdmVjdG9yWzBdLnZlY3RvciA9IDA7CisJcGluc3RhbmNlLT5udW1faHJycSA9IDE7CisJcmV0dXJuIHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgcG1jcmFpZF9pc3IsIElSUUZfU0hBUkVELAorCQkJICAgUE1DUkFJRF9EUklWRVJfTkFNRSwgJnBpbnN0YW5jZS0+aHJycV92ZWN0b3JbMF0pOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVsZWFzZV9jbWRfYmxvY2tzIC0gcmVsZWFzZSBidXVmZXJzIGFsbG9jYXRlZCBmb3IgY29tbWFuZCBibG9ja3MKKyAqIEBwaW5zdGFuY2U6IHBlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZSBwb2ludGVyCisgKiBAbWF4X2luZGV4OiBudW1iZXIgb2YgYnVmZmVyIGJsb2NrcyB0byByZWxlYXNlCisgKgorICogUmV0dXJuIFZhbHVlCisgKiAgTm9uZQorICovCitzdGF0aWMgdm9pZAorcG1jcmFpZF9yZWxlYXNlX2NtZF9ibG9ja3Moc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSwgaW50IG1heF9pbmRleCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2luZGV4OyBpKyspIHsKKwkJa21lbV9jYWNoZV9mcmVlKHBpbnN0YW5jZS0+Y21kX2NhY2hlcCwgcGluc3RhbmNlLT5jbWRfbGlzdFtpXSk7CisJCXBpbnN0YW5jZS0+Y21kX2xpc3RbaV0gPSBOVUxMOworCX0KKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocGluc3RhbmNlLT5jbWRfY2FjaGVwKTsKKwlwaW5zdGFuY2UtPmNtZF9jYWNoZXAgPSBOVUxMOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVsZWFzZV9jb250cm9sX2Jsb2NrcyAtIHJlbGVhc2VzIGJ1ZmZlcnMgYWxsb2NlZCBmb3IgY29udHJvbCBibG9ja3MKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gcGVyIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAbWF4X2luZGV4OiBudW1iZXIgb2YgYnVmZmVycyAoZnJvbSAwIG9ud2FyZHMpIHRvIHJlbGVhc2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgY29tbWFuZCBibG9ja3MgZm9yIHdoaWNoIGNvbnRyb2wgYmxvY2tzIGFyZQorICogbGlua2VkIGFyZSBub3QgcmVsZWFzZWQuCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkgTm9uZQorICovCitzdGF0aWMgdm9pZAorcG1jcmFpZF9yZWxlYXNlX2NvbnRyb2xfYmxvY2tzKAorCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UsCisJaW50IG1heF9pbmRleAorKQoreworCWludCBpOworCisJaWYgKHBpbnN0YW5jZS0+Y29udHJvbF9wb29sID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBtYXhfaW5kZXg7IGkrKykgeworCQlwY2lfcG9vbF9mcmVlKHBpbnN0YW5jZS0+Y29udHJvbF9wb29sLAorCQkJICAgICAgcGluc3RhbmNlLT5jbWRfbGlzdFtpXS0+aW9hX2NiLAorCQkJICAgICAgcGluc3RhbmNlLT5jbWRfbGlzdFtpXS0+aW9hX2NiX2J1c19hZGRyKTsKKwkJcGluc3RhbmNlLT5jbWRfbGlzdFtpXS0+aW9hX2NiID0gTlVMTDsKKwkJcGluc3RhbmNlLT5jbWRfbGlzdFtpXS0+aW9hX2NiX2J1c19hZGRyID0gMDsKKwl9CisJcGNpX3Bvb2xfZGVzdHJveShwaW5zdGFuY2UtPmNvbnRyb2xfcG9vbCk7CisJcGluc3RhbmNlLT5jb250cm9sX3Bvb2wgPSBOVUxMOworfQorCisvKioKKyAqIHBtY3JhaWRfYWxsb2NhdGVfY21kX2Jsb2NrcyAtIGFsbG9jYXRlIG1lbW9yeSBmb3IgY21kIGJsb2NrIHN0cnVjdHVyZXMKKyAqIEBwaW5zdGFuY2UgLSBwb2ludGVyIHRvIHBlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIEFsbG9jYXRlcyBtZW1vcnkgZm9yIGNvbW1hbmQgYmxvY2tzIHVzaW5nIGtlcm5lbCBzbGFiIGFsbG9jYXRvci4KKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCTAgaW4gY2FzZSBvZiBzdWNjZXNzOyAtRU5PTUVNIGluIGNhc2Ugb2YgZmFpbHVyZQorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcG1jcmFpZF9hbGxvY2F0ZV9jbWRfYmxvY2tzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJaW50IGk7CisKKwlzcHJpbnRmKHBpbnN0YW5jZS0+Y21kX3Bvb2xfbmFtZSwgInBtY3JhaWRfY21kX3Bvb2xfJWQiLAorCQlwaW5zdGFuY2UtPmhvc3QtPnVuaXF1ZV9pZCk7CisKKworCXBpbnN0YW5jZS0+Y21kX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKAorCQkJCQlwaW5zdGFuY2UtPmNtZF9wb29sX25hbWUsCisJCQkJCXNpemVvZihzdHJ1Y3QgcG1jcmFpZF9jbWQpLCAwLAorCQkJCQlTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCWlmICghcGluc3RhbmNlLT5jbWRfY2FjaGVwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBQTUNSQUlEX01BWF9DTUQ7IGkrKykgeworCQlwaW5zdGFuY2UtPmNtZF9saXN0W2ldID0KKwkJCWttZW1fY2FjaGVfYWxsb2MocGluc3RhbmNlLT5jbWRfY2FjaGVwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwaW5zdGFuY2UtPmNtZF9saXN0W2ldKSB7CisJCQlwbWNyYWlkX3JlbGVhc2VfY21kX2Jsb2NrcyhwaW5zdGFuY2UsIGkpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcG1jcmFpZF9hbGxvY2F0ZV9jb250cm9sX2Jsb2NrcyAtIGFsbG9jYXRlcyBtZW1vcnkgY29udHJvbCBibG9ja3MKKyAqIEBwaW5zdGFuY2UgOiBwb2ludGVyIHRvIHBlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIFBDSSBtZW1vcnkgZm9yIERNQWFibGUgYnVmZmVycyBsaWtlIElPQVJDQiwgSU9BRExzCisgKiBhbmQgSU9BU0FzLiBUaGlzIGlzIGNhbGxlZCBhZnRlciBjb21tYW5kIGJsb2NrcyBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQuCisgKgorICogUmV0dXJuIFZhbHVlCisgKiAgMCBpbiBjYXNlIGl0IGNhbiBhbGxvY2F0ZSBhbGwgY29udHJvbCBibG9ja3MsIG90aGVyd2lzZSAtRU5PTUVNCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0CitwbWNyYWlkX2FsbG9jYXRlX2NvbnRyb2xfYmxvY2tzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJaW50IGk7CisKKwlzcHJpbnRmKHBpbnN0YW5jZS0+Y3RsX3Bvb2xfbmFtZSwgInBtY3JhaWRfY29udHJvbF9wb29sXyVkIiwKKwkJcGluc3RhbmNlLT5ob3N0LT51bmlxdWVfaWQpOworCisJcGluc3RhbmNlLT5jb250cm9sX3Bvb2wgPQorCQlwY2lfcG9vbF9jcmVhdGUocGluc3RhbmNlLT5jdGxfcG9vbF9uYW1lLAorCQkJCXBpbnN0YW5jZS0+cGRldiwKKwkJCQlzaXplb2Yoc3RydWN0IHBtY3JhaWRfY29udHJvbF9ibG9jayksCisJCQkJUE1DUkFJRF9JT0FSQ0JfQUxJR05NRU5ULCAwKTsKKworCWlmICghcGluc3RhbmNlLT5jb250cm9sX3Bvb2wpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IFBNQ1JBSURfTUFYX0NNRDsgaSsrKSB7CisJCXBpbnN0YW5jZS0+Y21kX2xpc3RbaV0tPmlvYV9jYiA9CisJCQlwY2lfcG9vbF9hbGxvYygKKwkJCQlwaW5zdGFuY2UtPmNvbnRyb2xfcG9vbCwKKwkJCQlHRlBfS0VSTkVMLAorCQkJCSYocGluc3RhbmNlLT5jbWRfbGlzdFtpXS0+aW9hX2NiX2J1c19hZGRyKSk7CisKKwkJaWYgKCFwaW5zdGFuY2UtPmNtZF9saXN0W2ldLT5pb2FfY2IpIHsKKwkJCXBtY3JhaWRfcmVsZWFzZV9jb250cm9sX2Jsb2NrcyhwaW5zdGFuY2UsIGkpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KHBpbnN0YW5jZS0+Y21kX2xpc3RbaV0tPmlvYV9jYiwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgcG1jcmFpZF9jb250cm9sX2Jsb2NrKSk7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVsZWFzZV9ob3N0X3JycXMgLSByZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGhycnEgYnVmZmVyKHMpCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIHBlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICogQG1heGluZGV4OiBzaXplIG9mIGhycnEgYnVmZmVyIHBvaW50ZXIgYXJyYXkKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCU5vbmUKKyAqLworc3RhdGljIHZvaWQKK3BtY3JhaWRfcmVsZWFzZV9ob3N0X3JycXMoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSwgaW50IG1heGluZGV4KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBtYXhpbmRleDsgaSsrKSB7CisKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwaW5zdGFuY2UtPnBkZXYsCisJCQkJICAgIEhSUlFfRU5UUllfU0laRSAqIFBNQ1JBSURfTUFYX0NNRCwKKwkJCQkgICAgcGluc3RhbmNlLT5ocnJxX3N0YXJ0W2ldLAorCQkJCSAgICBwaW5zdGFuY2UtPmhycnFfc3RhcnRfYnVzX2FkZHJbaV0pOworCisJCS8qIHJlc2V0IHBvaW50ZXJzIGFuZCB0b2dnbGUgYml0IHRvIHplcm9zICovCisJCXBpbnN0YW5jZS0+aHJycV9zdGFydFtpXSA9IE5VTEw7CisJCXBpbnN0YW5jZS0+aHJycV9zdGFydF9idXNfYWRkcltpXSA9IDA7CisJCXBpbnN0YW5jZS0+aG9zdF90b2dnbGVfYml0W2ldID0gMDsKKwl9Cit9CisKKy8qKgorICogcG1jcmFpZF9hbGxvY2F0ZV9ob3N0X3JycXMgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBob3N0IFJSUSBidWZmZXJzCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIHBlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiB2YWx1ZQorICoJMCBocnJxIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCwgLUVOT01FTSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0CitwbWNyYWlkX2FsbG9jYXRlX2hvc3RfcnJxcyhzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCWludCBpOworCWludCBidWZfY291bnQgPSBQTUNSQUlEX01BWF9DTUQgLyBwaW5zdGFuY2UtPm51bV9ocnJxOworCisJZm9yIChpID0gMDsgaSA8IHBpbnN0YW5jZS0+bnVtX2hycnE7IGkrKykgeworCQlpbnQgYnVmZmVyX3NpemUgPSBIUlJRX0VOVFJZX1NJWkUgKiBidWZfY291bnQ7CisKKwkJcGluc3RhbmNlLT5ocnJxX3N0YXJ0W2ldID0KKwkJCXBjaV9hbGxvY19jb25zaXN0ZW50KAorCQkJCQlwaW5zdGFuY2UtPnBkZXYsCisJCQkJCWJ1ZmZlcl9zaXplLAorCQkJCQkmKHBpbnN0YW5jZS0+aHJycV9zdGFydF9idXNfYWRkcltpXSkpOworCisJCWlmIChwaW5zdGFuY2UtPmhycnFfc3RhcnRbaV0gPT0gMCkgeworCQkJcG1jcmFpZF9lcnIoImNvdWxkIG5vdCBhbGxvY2F0ZSBob3N0IHJycTogJWRcbiIsIGkpOworCQkJcG1jcmFpZF9yZWxlYXNlX2hvc3RfcnJxcyhwaW5zdGFuY2UsIGkpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQltZW1zZXQocGluc3RhbmNlLT5ocnJxX3N0YXJ0W2ldLCAwLCBidWZmZXJfc2l6ZSk7CisJCXBpbnN0YW5jZS0+aHJycV9jdXJyW2ldID0gcGluc3RhbmNlLT5ocnJxX3N0YXJ0W2ldOworCQlwaW5zdGFuY2UtPmhycnFfZW5kW2ldID0KKwkJCXBpbnN0YW5jZS0+aHJycV9zdGFydFtpXSArIGJ1Zl9jb3VudCAtIDE7CisJCXBpbnN0YW5jZS0+aG9zdF90b2dnbGVfYml0W2ldID0gMTsKKwkJc3Bpbl9sb2NrX2luaXQoJnBpbnN0YW5jZS0+aHJycV9sb2NrW2ldKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZWxlYXNlX2hjYW1zIC0gcmVsZWFzZSBIQ0FNIGJ1ZmZlcnMKKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIHBlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiB2YWx1ZQorICogIG5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9yZWxlYXNlX2hjYW1zKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJaWYgKHBpbnN0YW5jZS0+Y2NuLm1zZyAhPSBOVUxMKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGluc3RhbmNlLT5wZGV2LAorCQkJCSAgICBQTUNSQUlEX0FFTl9IRFJfU0laRSArCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9oY2FtX2NjbiksCisJCQkJICAgIHBpbnN0YW5jZS0+Y2NuLm1zZywKKwkJCQkgICAgcGluc3RhbmNlLT5jY24uYmFkZHIpOworCisJCXBpbnN0YW5jZS0+Y2NuLm1zZyA9IE5VTEw7CisJCXBpbnN0YW5jZS0+Y2NuLmhjYW0gPSBOVUxMOworCQlwaW5zdGFuY2UtPmNjbi5iYWRkciA9IDA7CisJfQorCisJaWYgKHBpbnN0YW5jZS0+bGRuLm1zZyAhPSBOVUxMKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGluc3RhbmNlLT5wZGV2LAorCQkJCSAgICBQTUNSQUlEX0FFTl9IRFJfU0laRSArCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9oY2FtX2xkbiksCisJCQkJICAgIHBpbnN0YW5jZS0+bGRuLm1zZywKKwkJCQkgICAgcGluc3RhbmNlLT5sZG4uYmFkZHIpOworCisJCXBpbnN0YW5jZS0+bGRuLm1zZyA9IE5VTEw7CisJCXBpbnN0YW5jZS0+bGRuLmhjYW0gPSBOVUxMOworCQlwaW5zdGFuY2UtPmxkbi5iYWRkciA9IDA7CisJfQorfQorCisvKioKKyAqIHBtY3JhaWRfYWxsb2NhdGVfaGNhbXMgLSBhbGxvY2F0ZXMgSENBTSBidWZmZXJzCisgKiBAcGluc3RhbmNlIDogcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiAgIDAgaW4gY2FzZSBvZiBzdWNjZXNzZnVsIGFsbG9jYXRpb24sIG5vbi16ZXJvIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IHBtY3JhaWRfYWxsb2NhdGVfaGNhbXMoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlwaW5zdGFuY2UtPmNjbi5tc2cgPSBwY2lfYWxsb2NfY29uc2lzdGVudCgKKwkJCQkJcGluc3RhbmNlLT5wZGV2LAorCQkJCQlQTUNSQUlEX0FFTl9IRFJfU0laRSArCisJCQkJCXNpemVvZihzdHJ1Y3QgcG1jcmFpZF9oY2FtX2NjbiksCisJCQkJCSYocGluc3RhbmNlLT5jY24uYmFkZHIpKTsKKworCXBpbnN0YW5jZS0+bGRuLm1zZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KAorCQkJCQlwaW5zdGFuY2UtPnBkZXYsCisJCQkJCVBNQ1JBSURfQUVOX0hEUl9TSVpFICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2hjYW1fbGRuKSwKKwkJCQkJJihwaW5zdGFuY2UtPmxkbi5iYWRkcikpOworCisJaWYgKHBpbnN0YW5jZS0+bGRuLm1zZyA9PSBOVUxMIHx8IHBpbnN0YW5jZS0+Y2NuLm1zZyA9PSBOVUxMKSB7CisJCXBtY3JhaWRfcmVsZWFzZV9oY2FtcyhwaW5zdGFuY2UpOworCX0gZWxzZSB7CisJCXBpbnN0YW5jZS0+Y2NuLmhjYW0gPQorCQkJKHZvaWQgKilwaW5zdGFuY2UtPmNjbi5tc2cgKyBQTUNSQUlEX0FFTl9IRFJfU0laRTsKKwkJcGluc3RhbmNlLT5sZG4uaGNhbSA9CisJCQkodm9pZCAqKXBpbnN0YW5jZS0+bGRuLm1zZyArIFBNQ1JBSURfQUVOX0hEUl9TSVpFOworCisJCWF0b21pY19zZXQoJnBpbnN0YW5jZS0+Y2NuLmlnbm9yZSwgMCk7CisJCWF0b21pY19zZXQoJnBpbnN0YW5jZS0+bGRuLmlnbm9yZSwgMCk7CisJfQorCisJcmV0dXJuIChwaW5zdGFuY2UtPmxkbi5tc2cgPT0gTlVMTCkgPyAtRU5PTUVNIDogMDsKK30KKworLyoqCisgKiBwbWNyYWlkX3JlbGVhc2VfY29uZmlnX2J1ZmZlcnMgLSByZWxlYXNlIGNvbmZpZy50YWJsZSBidWZmZXJzCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIHBlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiBWYWx1ZQorICoJIG5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9yZWxlYXNlX2NvbmZpZ19idWZmZXJzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJaWYgKHBpbnN0YW5jZS0+Y2ZnX3RhYmxlICE9IE5VTEwgJiYKKwkgICAgcGluc3RhbmNlLT5jZmdfdGFibGVfYnVzX2FkZHIgIT0gMCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBpbnN0YW5jZS0+cGRldiwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZSksCisJCQkJICAgIHBpbnN0YW5jZS0+Y2ZnX3RhYmxlLAorCQkJCSAgICBwaW5zdGFuY2UtPmNmZ190YWJsZV9idXNfYWRkcik7CisJCXBpbnN0YW5jZS0+Y2ZnX3RhYmxlID0gTlVMTDsKKwkJcGluc3RhbmNlLT5jZmdfdGFibGVfYnVzX2FkZHIgPSAwOworCX0KKworCWlmIChwaW5zdGFuY2UtPnJlc19lbnRyaWVzICE9IE5VTEwpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IFBNQ1JBSURfTUFYX1JFU09VUkNFUzsgaSsrKQorCQkJbGlzdF9kZWwoJnBpbnN0YW5jZS0+cmVzX2VudHJpZXNbaV0ucXVldWUpOworCQlrZnJlZShwaW5zdGFuY2UtPnJlc19lbnRyaWVzKTsKKwkJcGluc3RhbmNlLT5yZXNfZW50cmllcyA9IE5VTEw7CisJfQorCisJcG1jcmFpZF9yZWxlYXNlX2hjYW1zKHBpbnN0YW5jZSk7Cit9CisKKy8qKgorICogcG1jcmFpZF9hbGxvY2F0ZV9jb25maWdfYnVmZmVycyAtIGFsbG9jYXRlcyBETUFhYmxlIG1lbW9yeSBmb3IgY29uZmlnIHRhYmxlCisgKiBAcGluc3RhbmNlIDogcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCTAgZm9yIHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbiwgLUVOT01FTSBmb3IgYW55IGZhaWx1cmUKKyAqLworc3RhdGljIGludCBfX2RldmluaXQKK3BtY3JhaWRfYWxsb2NhdGVfY29uZmlnX2J1ZmZlcnMoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlpbnQgaTsKKworCXBpbnN0YW5jZS0+cmVzX2VudHJpZXMgPQorCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkpICoKKwkJCQlQTUNSQUlEX01BWF9SRVNPVVJDRVMsIEdGUF9LRVJORUwpOworCisJaWYgKE5VTEwgPT0gcGluc3RhbmNlLT5yZXNfZW50cmllcykgeworCQlwbWNyYWlkX2VycigiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcmVzb3VyY2UgdGFibGVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgUE1DUkFJRF9NQVhfUkVTT1VSQ0VTOyBpKyspCisJCWxpc3RfYWRkX3RhaWwoJnBpbnN0YW5jZS0+cmVzX2VudHJpZXNbaV0ucXVldWUsCisJCQkgICAgICAmcGluc3RhbmNlLT5mcmVlX3Jlc19xKTsKKworCXBpbnN0YW5jZS0+Y2ZnX3RhYmxlID0KKwkJcGNpX2FsbG9jX2NvbnNpc3RlbnQocGluc3RhbmNlLT5wZGV2LAorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZSksCisJCQkJICAgICAmcGluc3RhbmNlLT5jZmdfdGFibGVfYnVzX2FkZHIpOworCisJaWYgKE5VTEwgPT0gcGluc3RhbmNlLT5jZmdfdGFibGUpIHsKKwkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGFsbG9jIERNQSBtZW1vcnkgZm9yIGNvbmZpZyB0YWJsZVxuIik7CisJCXBtY3JhaWRfcmVsZWFzZV9jb25maWdfYnVmZmVycyhwaW5zdGFuY2UpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAocG1jcmFpZF9hbGxvY2F0ZV9oY2FtcyhwaW5zdGFuY2UpKSB7CisJCXBtY3JhaWRfZXJyKCJjb3VsZCBub3QgYWxsb2MgRE1BIG1lbW9yeSBmb3IgSENBTVNcbiIpOworCQlwbWNyYWlkX3JlbGVhc2VfY29uZmlnX2J1ZmZlcnMocGluc3RhbmNlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcG1jcmFpZF9pbml0X3Rhc2tsZXRzIC0gcmVnaXN0ZXJzIHRhc2tsZXRzIGZvciByZXNwb25zZSBoYW5kbGluZworICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqCW5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9pbml0X3Rhc2tsZXRzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHBpbnN0YW5jZS0+bnVtX2hycnE7IGkrKykKKwkJdGFza2xldF9pbml0KCZwaW5zdGFuY2UtPmlzcl90YXNrbGV0W2ldLAorCQkJICAgICBwbWNyYWlkX3Rhc2tsZXRfZnVuY3Rpb24sCisJCQkgICAgICh1bnNpZ25lZCBsb25nKSZwaW5zdGFuY2UtPmhycnFfdmVjdG9yW2ldKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2tpbGxfdGFza2xldHMgLSBkZXN0cm95cyB0YXNrbGV0cyByZWdpc3RlcmVkIGZvciByZXNwb25zZSBoYW5kbGluZworICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqCW5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9raWxsX3Rhc2tsZXRzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHBpbnN0YW5jZS0+bnVtX2hycnE7IGkrKykKKwkJdGFza2xldF9raWxsKCZwaW5zdGFuY2UtPmlzcl90YXNrbGV0W2ldKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2luaXRfYnVmZmVycyAtIGFsbG9jYXRlcyBtZW1vcnkgYW5kIGluaXRpYWxpemVzIHZhcmlvdXMgc3RydWN0dXJlcworICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlLWFsbG9jYXRlcyBtZW1vcnkgYmFzZWQgb24gdGhlIHR5cGUgb2YgYmxvY2sgYXMgYmVsb3c6CisgKiBjbWRibG9ja3MoUE1DUkFJRF9NQVhfQ01EKToga2VybmVsIG1lbW9yeSB1c2luZyBrZXJuZWwncyBzbGFiX2FsbG9jYXRvciwKKyAqIElPQVJDQnMoUE1DUkFJRF9NQVhfQ01EKSAgOiBETUFhYmxlIG1lbW9yeSwgdXNpbmcgcGNpIHBvb2wgYWxsb2NhdG9yCisgKiBjb25maWctdGFibGUgZW50cmllcyAgICAgIDogRE1BYWJsZSBtZW1vcnkgdXNpbmcgcGNpX2FsbG9jX2NvbnNpc3RlbnQKKyAqIEhvc3RSUlFzICAgICAgICAgICAgICAgICAgOiBETUFhYmxlIG1lbW9yeSwgdXNpbmcgcGNpX2FsbG9jX2NvbnNpc3RlbnQKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCSAwIGluIGNhc2UgYWxsIG9mIHRoZSBibG9ja3MgYXJlIGFsbG9jYXRlZCwgLUVOT01FTSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHBtY3JhaWRfaW5pdF9idWZmZXJzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJaW50IGk7CisKKwlpZiAocG1jcmFpZF9hbGxvY2F0ZV9ob3N0X3JycXMocGluc3RhbmNlKSkgeworCQlwbWNyYWlkX2VycigiY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAlZCBob3N0IHJycXNcbiIsCisJCQkgICAgIHBpbnN0YW5jZS0+bnVtX2hycnEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAocG1jcmFpZF9hbGxvY2F0ZV9jb25maWdfYnVmZmVycyhwaW5zdGFuY2UpKSB7CisJCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbmZpZyBidWZmZXJzXG4iKTsKKwkJcG1jcmFpZF9yZWxlYXNlX2hvc3RfcnJxcyhwaW5zdGFuY2UsIHBpbnN0YW5jZS0+bnVtX2hycnEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAocG1jcmFpZF9hbGxvY2F0ZV9jbWRfYmxvY2tzKHBpbnN0YW5jZSkpIHsKKwkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgY21kIGJsb2NrcyBcbiIpOworCQlwbWNyYWlkX3JlbGVhc2VfY29uZmlnX2J1ZmZlcnMocGluc3RhbmNlKTsKKwkJcG1jcmFpZF9yZWxlYXNlX2hvc3RfcnJxcyhwaW5zdGFuY2UsIHBpbnN0YW5jZS0+bnVtX2hycnEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAocG1jcmFpZF9hbGxvY2F0ZV9jb250cm9sX2Jsb2NrcyhwaW5zdGFuY2UpKSB7CisJCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgY29udHJvbCBibG9ja3MgXG4iKTsKKwkJcG1jcmFpZF9yZWxlYXNlX2NvbmZpZ19idWZmZXJzKHBpbnN0YW5jZSk7CisJCXBtY3JhaWRfcmVsZWFzZV9jbWRfYmxvY2tzKHBpbnN0YW5jZSwgUE1DUkFJRF9NQVhfQ01EKTsKKwkJcG1jcmFpZF9yZWxlYXNlX2hvc3RfcnJxcyhwaW5zdGFuY2UsIHBpbnN0YW5jZS0+bnVtX2hycnEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBJbml0aWFsaXplIGFsbCB0aGUgY29tbWFuZCBibG9ja3MgYW5kIGFkZCB0aGVtIHRvIGZyZWUgcG9vbC4gTm8KKwkgKiBuZWVkIHRvIGxvY2sgKGZyZWVfcG9vbF9sb2NrKSBhcyB0aGlzIGlzIGRvbmUgaW4gaW5pdGlhbGl6YXRpb24KKwkgKiBpdHNlbGYKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUE1DUkFJRF9NQVhfQ01EOyBpKyspIHsKKwkJc3RydWN0IHBtY3JhaWRfY21kICpjbWRwID0gcGluc3RhbmNlLT5jbWRfbGlzdFtpXTsKKwkJcG1jcmFpZF9pbml0X2NtZGJsayhjbWRwLCBpKTsKKwkJY21kcC0+ZHJ2X2luc3QgPSBwaW5zdGFuY2U7CisJCWxpc3RfYWRkX3RhaWwoJmNtZHAtPmZyZWVfbGlzdCwgJnBpbnN0YW5jZS0+ZnJlZV9jbWRfcG9vbCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZWluaXRfYnVmZmVycyAtIHJlc2V0cyB2YXJpb3VzIGJ1ZmZlciBwb2ludGVycworICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBhZGFwdGVyIGluc3RhbmNlCisgKiBSZXR1cm4gdmFsdWUKKyAqIAlub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVpbml0X2J1ZmZlcnMoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlpbnQgaTsKKwlpbnQgYnVmZmVyX3NpemUgPSBIUlJRX0VOVFJZX1NJWkUgKiBQTUNSQUlEX01BWF9DTUQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGluc3RhbmNlLT5udW1faHJycTsgaSsrKSB7CisJCW1lbXNldChwaW5zdGFuY2UtPmhycnFfc3RhcnRbaV0sIDAsIGJ1ZmZlcl9zaXplKTsKKwkJcGluc3RhbmNlLT5ocnJxX2N1cnJbaV0gPSBwaW5zdGFuY2UtPmhycnFfc3RhcnRbaV07CisJCXBpbnN0YW5jZS0+aHJycV9lbmRbaV0gPQorCQkJcGluc3RhbmNlLT5ocnJxX3N0YXJ0W2ldICsgUE1DUkFJRF9NQVhfQ01EIC0gMTsKKwkJcGluc3RhbmNlLT5ob3N0X3RvZ2dsZV9iaXRbaV0gPSAxOworCX0KK30KKworLyoqCisgKiBwbWNyYWlkX2luaXRfaW5zdGFuY2UgLSBpbml0aWFsaXplIHBlciBpbnN0YW5jZSBkYXRhIHN0cnVjdHVyZQorICogQHBkZXY6IHBvaW50ZXIgdG8gcGNpIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBob3N0OiBwb2ludGVyIHRvIFNjc2lfSG9zdCBzdHJ1Y3R1cmUKKyAqIEBtYXBwZWRfcGNpX2FkZHI6IG1lbW9yeSBtYXBwZWQgSU9BIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkgMCBvbiBzdWNjZXNzLCBub24temVybyBpbiBjYXNlIG9mIGFueSBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHBtY3JhaWRfaW5pdF9pbnN0YW5jZSgKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0LAorCXZvaWQgX19pb21lbSAqbWFwcGVkX3BjaV9hZGRyCispCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9CisJCShzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqKWhvc3QtPmhvc3RkYXRhOworCisJcGluc3RhbmNlLT5ob3N0ID0gaG9zdDsKKwlwaW5zdGFuY2UtPnBkZXYgPSBwZGV2OworCisJLyogSW5pdGlhbGl6ZSByZWdpc3RlciBhZGRyZXNzZXMgKi8KKwlwaW5zdGFuY2UtPm1hcHBlZF9kbWFfYWRkciA9IG1hcHBlZF9wY2lfYWRkcjsKKworCS8qIEluaXRpYWxpemUgY2hpcC1zcGVjaWZpYyBkZXRhaWxzICovCisJeworCQlzdHJ1Y3QgcG1jcmFpZF9jaGlwX2RldGFpbHMgKmNoaXBfY2ZnID0gcGluc3RhbmNlLT5jaGlwX2NmZzsKKwkJc3RydWN0IHBtY3JhaWRfaW50ZXJydXB0cyAqcGludF9yZWdzID0gJnBpbnN0YW5jZS0+aW50X3JlZ3M7CisKKwkJcGluc3RhbmNlLT5pb2FycmluID0gbWFwcGVkX3BjaV9hZGRyICsgY2hpcF9jZmctPmlvYXJyaW47CisKKwkJcGludF9yZWdzLT5pb2FfaG9zdF9pbnRlcnJ1cHRfcmVnID0KKwkJCW1hcHBlZF9wY2lfYWRkciArIGNoaXBfY2ZnLT5pb2FfaG9zdF9pbnRyOworCQlwaW50X3JlZ3MtPmlvYV9ob3N0X2ludGVycnVwdF9jbHJfcmVnID0KKwkJCW1hcHBlZF9wY2lfYWRkciArIGNoaXBfY2ZnLT5pb2FfaG9zdF9pbnRyX2NscjsKKwkJcGludF9yZWdzLT5ob3N0X2lvYV9pbnRlcnJ1cHRfcmVnID0KKwkJCW1hcHBlZF9wY2lfYWRkciArIGNoaXBfY2ZnLT5ob3N0X2lvYV9pbnRyOworCQlwaW50X3JlZ3MtPmhvc3RfaW9hX2ludGVycnVwdF9jbHJfcmVnID0KKwkJCW1hcHBlZF9wY2lfYWRkciArIGNoaXBfY2ZnLT5ob3N0X2lvYV9pbnRyX2NscjsKKworCQkvKiBDdXJyZW50IHZlcnNpb24gb2YgZmlybXdhcmUgZXhwb3NlcyBpbnRlcnJ1cHQgbWFzayBzZXQKKwkJICogYW5kIG1hc2sgY2xyIHJlZ2lzdGVycyB0aHJvdWdoIG1lbW9yeSBtYXBwZWQgYmFyMC4KKwkJICovCisJCXBpbnN0YW5jZS0+bWFpbGJveCA9IG1hcHBlZF9wY2lfYWRkciArIGNoaXBfY2ZnLT5tYWlsYm94OworCQlwaW5zdGFuY2UtPmlvYV9zdGF0dXMgPSBtYXBwZWRfcGNpX2FkZHIgKyBjaGlwX2NmZy0+aW9hc3RhdHVzOworCQlwaW50X3JlZ3MtPmlvYV9ob3N0X2ludGVycnVwdF9tYXNrX3JlZyA9CisJCQltYXBwZWRfcGNpX2FkZHIgKyBjaGlwX2NmZy0+aW9hX2hvc3RfbWFzazsKKwkJcGludF9yZWdzLT5pb2FfaG9zdF9pbnRlcnJ1cHRfbWFza19jbHJfcmVnID0KKwkJCW1hcHBlZF9wY2lfYWRkciArIGNoaXBfY2ZnLT5pb2FfaG9zdF9tYXNrX2NscjsKKwkJcGludF9yZWdzLT5nbG9iYWxfaW50ZXJydXB0X21hc2tfcmVnID0KKwkJCW1hcHBlZF9wY2lfYWRkciArIGNoaXBfY2ZnLT5nbG9iYWxfaW50cl9tYXNrOworCX07CisKKwlwaW5zdGFuY2UtPmlvYV9yZXNldF9hdHRlbXB0cyA9IDA7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcGluc3RhbmNlLT5yZXNldF93YWl0X3EpOworCisJYXRvbWljX3NldCgmcGluc3RhbmNlLT5vdXRzdGFuZGluZ19jbWRzLCAwKTsKKwlhdG9taWNfc2V0KCZwaW5zdGFuY2UtPmV4cG9zZV9yZXNvdXJjZXMsIDApOworCisJSU5JVF9MSVNUX0hFQUQoJnBpbnN0YW5jZS0+ZnJlZV9yZXNfcSk7CisJSU5JVF9MSVNUX0hFQUQoJnBpbnN0YW5jZS0+dXNlZF9yZXNfcSk7CisJSU5JVF9MSVNUX0hFQUQoJnBpbnN0YW5jZS0+ZnJlZV9jbWRfcG9vbCk7CisJSU5JVF9MSVNUX0hFQUQoJnBpbnN0YW5jZS0+cGVuZGluZ19jbWRfcG9vbCk7CisKKwlzcGluX2xvY2tfaW5pdCgmcGluc3RhbmNlLT5mcmVlX3Bvb2xfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBpbnN0YW5jZS0+cGVuZGluZ19wb29sX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwaW5zdGFuY2UtPnJlc291cmNlX2xvY2spOworCW11dGV4X2luaXQoJnBpbnN0YW5jZS0+YWVuX3F1ZXVlX2xvY2spOworCisJLyogV29yay1xdWV1ZSAoU2hhcmVkKSBmb3IgZGVmZXJyZWQgcHJvY2Vzc2luZyBlcnJvciBoYW5kbGluZyAqLworCUlOSVRfV09SSygmcGluc3RhbmNlLT53b3JrZXJfcSwgcG1jcmFpZF93b3JrZXJfZnVuY3Rpb24pOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBsb2dfbGV2ZWwgKi8KKwlwaW5zdGFuY2UtPmN1cnJlbnRfbG9nX2xldmVsID0gcG1jcmFpZF9sb2dfbGV2ZWw7CisKKwkvKiBTZXR1cCB2YXJpYWJsZXMgcmVxdWlyZWQgZm9yIHJlc2V0IGVuZ2luZSAqLworCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX1VOS05PV047CisJcGluc3RhbmNlLT5yZXNldF9jbWQgPSBOVUxMOworCXJldHVybiAwOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVsZWFzZV9idWZmZXJzIC0gcmVsZWFzZSBwZXItYWRhcHRlciBidWZmZXJzIGFsbG9jYXRlZAorICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBzb2Z0IHN0YXRlCisgKgorICogUmV0dXJuIFZhbHVlCisgKiAJbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3JlbGVhc2VfYnVmZmVycyhzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCXBtY3JhaWRfcmVsZWFzZV9jb25maWdfYnVmZmVycyhwaW5zdGFuY2UpOworCXBtY3JhaWRfcmVsZWFzZV9jb250cm9sX2Jsb2NrcyhwaW5zdGFuY2UsIFBNQ1JBSURfTUFYX0NNRCk7CisJcG1jcmFpZF9yZWxlYXNlX2NtZF9ibG9ja3MocGluc3RhbmNlLCBQTUNSQUlEX01BWF9DTUQpOworCXBtY3JhaWRfcmVsZWFzZV9ob3N0X3JycXMocGluc3RhbmNlLCBwaW5zdGFuY2UtPm51bV9ocnJxKTsKKworfQorCisvKioKKyAqIHBtY3JhaWRfc2h1dGRvd24gLSBzaHV0ZG93biBhZGFwdGVyIGNvbnRyb2xsZXIuCisgKiBAcGRldjogcGNpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBJc3N1ZXMgYW4gYWRhcHRlciBzaHV0ZG93biB0byB0aGUgY2FyZCB3YWl0cyBmb3IgaXRzIGNvbXBsZXRpb24KKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqCSAgbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJcG1jcmFpZF9yZXNldF9icmluZ2Rvd24ocGluc3RhbmNlKTsKK30KKworCisvKioKKyAqIHBtY3JhaWRfZ2V0X21pbm9yIC0gcmV0dXJucyB1bnVzZWQgbWlub3IgbnVtYmVyIGZyb20gbWlub3IgbnVtYmVyIGJpdG1hcAorICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgcG1jcmFpZF9nZXRfbWlub3Iodm9pZCkKK3sKKwlpbnQgbWlub3I7CisKKwltaW5vciA9IGZpbmRfZmlyc3RfemVyb19iaXQocG1jcmFpZF9taW5vciwgc2l6ZW9mKHBtY3JhaWRfbWlub3IpKTsKKwlfX3NldF9iaXQobWlub3IsIHBtY3JhaWRfbWlub3IpOworCXJldHVybiBtaW5vcjsKK30KKworLyoqCisgKiBwbWNyYWlkX3JlbGVhc2VfbWlub3IgLSByZWxlYXNlcyBnaXZlbiBtaW5vciBiYWNrIHRvIG1pbm9yIG51bWJlciBiaXRtYXAKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9yZWxlYXNlX21pbm9yKHVuc2lnbmVkIHNob3J0IG1pbm9yKQoreworCV9fY2xlYXJfYml0KG1pbm9yLCBwbWNyYWlkX21pbm9yKTsKK30KKworLyoqCisgKiBwbWNyYWlkX3NldHVwX2NocmRldiAtIGFsbG9jYXRlcyBhIG1pbm9yIG51bWJlciBhbmQgcmVnaXN0ZXJzIGEgY2hhciBkZXZpY2UKKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2UgZm9yIHdoaWNoIHRvIHJlZ2lzdGVyIGRldmljZQorICoKKyAqIFJldHVybiB2YWx1ZQorICoJMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG90aGVyd2lzZSBub24temVybworICovCitzdGF0aWMgaW50IHBtY3JhaWRfc2V0dXBfY2hyZGV2KHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJaW50IG1pbm9yOworCWludCBlcnJvcjsKKworCW1pbm9yID0gcG1jcmFpZF9nZXRfbWlub3IoKTsKKwljZGV2X2luaXQoJnBpbnN0YW5jZS0+Y2RldiwgJnBtY3JhaWRfZm9wcyk7CisJcGluc3RhbmNlLT5jZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CisKKwllcnJvciA9IGNkZXZfYWRkKCZwaW5zdGFuY2UtPmNkZXYsIE1LREVWKHBtY3JhaWRfbWFqb3IsIG1pbm9yKSwgMSk7CisKKwlpZiAoZXJyb3IpCisJCXBtY3JhaWRfcmVsZWFzZV9taW5vcihtaW5vcik7CisJZWxzZQorCQlkZXZpY2VfY3JlYXRlKHBtY3JhaWRfY2xhc3MsIE5VTEwsIE1LREVWKHBtY3JhaWRfbWFqb3IsIG1pbm9yKSwKKwkJCSAgICAgIE5VTEwsICJwbWNzYXMldSIsIG1pbm9yKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZWxlYXNlX2NocmRldiAtIHVucmVnaXN0ZXJzIHBlci1hZGFwdGVyIG1hbmFnZW1lbnQgaW50ZXJmYWNlCisgKgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiB2YWx1ZQorICogIG5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9yZWxlYXNlX2NocmRldihzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCXBtY3JhaWRfcmVsZWFzZV9taW5vcihNSU5PUihwaW5zdGFuY2UtPmNkZXYuZGV2KSk7CisJZGV2aWNlX2Rlc3Ryb3kocG1jcmFpZF9jbGFzcywKKwkJICAgICAgIE1LREVWKHBtY3JhaWRfbWFqb3IsIE1JTk9SKHBpbnN0YW5jZS0+Y2Rldi5kZXYpKSk7CisJY2Rldl9kZWwoJnBpbnN0YW5jZS0+Y2Rldik7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZW1vdmUgLSBJT0EgaG90IHBsdWcgcmVtb3ZlIGVudHJ5IHBvaW50CisgKiBAcGRldjogcGNpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqCSAgbm9uZQorICovCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgcG1jcmFpZF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qIHJlbW92ZSB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2UgKC9kZXYgZmlsZSkgZm9yIHRoaXMgZGV2aWNlICovCisJcG1jcmFpZF9yZWxlYXNlX2NocmRldihwaW5zdGFuY2UpOworCisJLyogcmVtb3ZlIGhvc3QgdGVtcGxhdGUgZnJvbSBzY3NpIG1pZGxheWVyICovCisJc2NzaV9yZW1vdmVfaG9zdChwaW5zdGFuY2UtPmhvc3QpOworCisJLyogYmxvY2sgcmVxdWVzdHMgZnJvbSBtaWQtbGF5ZXIgKi8KKwlzY3NpX2Jsb2NrX3JlcXVlc3RzKHBpbnN0YW5jZS0+aG9zdCk7CisKKwkvKiBpbml0aWF0ZSBzaHV0ZG93biBhZGFwdGVyICovCisJcG1jcmFpZF9zaHV0ZG93bihwZGV2KTsKKworCXBtY3JhaWRfZGlzYWJsZV9pbnRlcnJ1cHRzKHBpbnN0YW5jZSwgfjApOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwlwbWNyYWlkX2tpbGxfdGFza2xldHMocGluc3RhbmNlKTsKKwlwbWNyYWlkX3VucmVnaXN0ZXJfaW50ZXJydXB0X2hhbmRsZXIocGluc3RhbmNlKTsKKwlwbWNyYWlkX3JlbGVhc2VfYnVmZmVycyhwaW5zdGFuY2UpOworCWlvdW5tYXAocGluc3RhbmNlLT5tYXBwZWRfZG1hX2FkZHIpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJc2NzaV9ob3N0X3B1dChwaW5zdGFuY2UtPmhvc3QpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJldHVybjsKK30KKworI2lmZGVmIENPTkZJR19QTQorLyoqCisgKiBwbWNyYWlkX3N1c3BlbmQgLSBkcml2ZXIgc3VzcGVuZCBlbnRyeSBwb2ludCBmb3IgcG93ZXIgbWFuYWdlbWVudAorICogQHBkZXY6ICAgUENJIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBzdGF0ZTogIFBDSSBwb3dlciBzdGF0ZSB0byBzdXNwZW5kIHJvdXRpbmUKKyAqCisgKiBSZXR1cm4gVmFsdWUgLSAwIGFsd2F5cworICovCitzdGF0aWMgaW50IHBtY3JhaWRfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlwbWNyYWlkX3NodXRkb3duKHBkZXYpOworCXBtY3JhaWRfZGlzYWJsZV9pbnRlcnJ1cHRzKHBpbnN0YW5jZSwgfjApOworCXBtY3JhaWRfa2lsbF90YXNrbGV0cyhwaW5zdGFuY2UpOworCXBjaV9zZXRfZHJ2ZGF0YShwaW5zdGFuY2UtPnBkZXYsIHBpbnN0YW5jZSk7CisJcG1jcmFpZF91bnJlZ2lzdGVyX2ludGVycnVwdF9oYW5kbGVyKHBpbnN0YW5jZSk7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZXN1bWUgLSBkcml2ZXIgcmVzdW1lIGVudHJ5IHBvaW50IFBDSSBwb3dlciBtYW5hZ2VtZW50CisgKiBAcGRldjogUENJIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gVmFsdWUgLSAwIGluIGNhc2Ugb2Ygc3VjY2Vzcy4gRXJyb3IgY29kZSBpbiBjYXNlIG9mIGFueSBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gcGluc3RhbmNlLT5ob3N0OworCWludCByYzsKKwlpbnQgaHJycXM7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EMCwgMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCisJaWYgKHJjKSB7CisJCXBtY3JhaWRfZXJyKCJwbWNyYWlkOiBFbmFibGUgZGV2aWNlIGZhaWxlZFxuIik7CisJCXJldHVybiByYzsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID09IDQpIHx8CisJICAgICBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpKQorCQlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisKKwlpZiAocmMgPT0gMCkKKwkJcmMgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisKKwlpZiAocmMgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IFBDSSBETUEgbWFza1xuIik7CisJCWdvdG8gZGlzYWJsZV9kZXZpY2U7CisJfQorCisJYXRvbWljX3NldCgmcGluc3RhbmNlLT5vdXRzdGFuZGluZ19jbWRzLCAwKTsKKwlocnJxcyA9IHBpbnN0YW5jZS0+bnVtX2hycnE7CisJcmMgPSBwbWNyYWlkX3JlZ2lzdGVyX2ludGVycnVwdF9oYW5kbGVyKHBpbnN0YW5jZSk7CisKKwlpZiAocmMpIHsKKwkJcG1jcmFpZF9lcnIoInJlc3VtZTogY291bGRuJ3QgcmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXJzXG4iKTsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIHJlbGVhc2VfaG9zdDsKKwl9CisKKwlwbWNyYWlkX2luaXRfdGFza2xldHMocGluc3RhbmNlKTsKKwlwbWNyYWlkX2VuYWJsZV9pbnRlcnJ1cHRzKHBpbnN0YW5jZSwgUE1DUkFJRF9QQ0lfSU5URVJSVVBUUyk7CisKKwkvKiBTdGFydCB3aXRoIGhhcmQgcmVzZXQgc2VxdWVuY2Ugd2hpY2ggYnJpbmdzIHVwIElPQSB0byBvcGVyYXRpb25hbAorCSAqIHN0YXRlIGFzIHdlbGwgYXMgY29tcGxldGVzIHRoZSByZXNldCBzZXF1ZW5jZS4KKwkgKi8KKwlwaW5zdGFuY2UtPmlvYV9oYXJkX3Jlc2V0ID0gMTsKKworCS8qIFN0YXJ0IElPQSBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiBhbmQgYnJpbmcgY2FyZCB0byBPcGVyYXRpb25hbAorCSAqIHN0YXRlLgorCSAqLworCWlmIChwbWNyYWlkX3Jlc2V0X2JyaW5ndXAocGluc3RhbmNlKSkgeworCQlwbWNyYWlkX2VycigiY291bGRuJ3QgaW5pdGlhbGl6ZSBJT0EgXG4iKTsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIHJlbGVhc2VfdGFza2xldHM7CisJfQorCisJcmV0dXJuIDA7CisKK3JlbGVhc2VfdGFza2xldHM6CisJcG1jcmFpZF9raWxsX3Rhc2tsZXRzKHBpbnN0YW5jZSk7CisJcG1jcmFpZF91bnJlZ2lzdGVyX2ludGVycnVwdF9oYW5kbGVyKHBpbnN0YW5jZSk7CisKK3JlbGVhc2VfaG9zdDoKKwlzY3NpX2hvc3RfcHV0KGhvc3QpOworCitkaXNhYmxlX2RldmljZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm4gcmM7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgcG1jcmFpZF9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgcG1jcmFpZF9yZXN1bWUgIE5VTEwKKworI2VuZGlmIC8qIENPTkZJR19QTSAqLworCisvKioKKyAqIHBtY3JhaWRfY29tcGxldGVfaW9hX3Jlc2V0IC0gQ2FsbGVkIGJ5IGVpdGhlciB0aW1lciBvciB0YXNrbGV0IGR1cmluZworICogCSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb24gb2YgdGhlIGlvYSByZXNldAorICogQGNtZDogcG9pbnRlciB0byByZXNldCBjb21tYW5kIGJsb2NrCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfY29tcGxldGVfaW9hX3Jlc2V0KHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCXBtY3JhaWRfaW9hX3Jlc2V0KGNtZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCXNjc2lfdW5ibG9ja19yZXF1ZXN0cyhwaW5zdGFuY2UtPmhvc3QpOworCXNjaGVkdWxlX3dvcmsoJnBpbnN0YW5jZS0+d29ya2VyX3EpOworfQorCisvKioKKyAqIHBtY3JhaWRfc2V0X3N1cHBvcnRlZF9kZXZzIC0gc2VuZHMgU0VUIFNVUFBPUlRFRCBERVZJQ0VTIHRvIElPQUZQCisgKgorICogQGNtZDogcG9pbnRlciB0byBwbWNyYWlkX2NtZCBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqICAwIGZvciBzdWNjZXNzIG9yIG5vbi16ZXJvIGZvciBmYWlsdXJlIGNhc2VzCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfc2V0X3N1cHBvcnRlZF9kZXZzKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiAqaW9hcmNiID0gJmNtZC0+aW9hX2NiLT5pb2FyY2I7CisJdm9pZCAoKmNtZF9kb25lKSAoc3RydWN0IHBtY3JhaWRfY21kICopID0gcG1jcmFpZF9jb21wbGV0ZV9pb2FfcmVzZXQ7CisKKwlwbWNyYWlkX3JlaW5pdF9jbWRibGsoY21kKTsKKworCWlvYXJjYi0+cmVzb3VyY2VfaGFuZGxlID0gY3B1X3RvX2xlMzIoUE1DUkFJRF9JT0FfUkVTX0hBTkRMRSk7CisJaW9hcmNiLT5yZXF1ZXN0X3R5cGUgPSBSRVFfVFlQRV9JT0FDTUQ7CisJaW9hcmNiLT5jZGJbMF0gPSBQTUNSQUlEX1NFVF9TVVBQT1JURURfREVWSUNFUzsKKwlpb2FyY2ItPmNkYlsxXSA9IEFMTF9ERVZJQ0VTX1NVUFBPUlRFRDsKKworCS8qIElmIHRoaXMgd2FzIGNhbGxlZCBhcyBwYXJ0IG9mIHJlc291cmNlIHRhYmxlIHJlaW5pdGlhbGl6YXRpb24gZHVlIHRvCisJICogbG9zdCBDQ04sIGl0IGlzIGVub3VnaCB0byByZXR1cm4gdGhlIGNvbW1hbmQgYmxvY2sgYmFjayB0byBmcmVlIHBvb2wKKwkgKiBhcyBwYXJ0IG9mIHNldF9zdXBwb3J0ZWRfZGV2cyBjb21wbGV0aW9uIGZ1bmN0aW9uLgorCSAqLworCWlmIChjbWQtPmRydl9pbnN0LT5yZWluaXRfY2ZnX3RhYmxlKSB7CisJCWNtZC0+ZHJ2X2luc3QtPnJlaW5pdF9jZmdfdGFibGUgPSAwOworCQljbWQtPnJlbGVhc2UgPSAxOworCQljbWRfZG9uZSA9IHBtY3JhaWRfcmVpbml0X2NmZ3RhYmxlX2RvbmU7CisJfQorCisJLyogd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhlIHJlc2V0IHNlcXVlbmNlIGFmdGVyIHNldCBzdXBwb3J0ZWQgZGV2aWNlcywKKwkgKiBzZXR1cCB0aGUgZG9uZSBmdW5jdGlvbiB0byByZXR1cm4gdGhlIGNvbW1hbmQgYmxvY2sgYmFjayB0byBmcmVlCisJICogcG9vbAorCSAqLworCXBtY3JhaWRfc2VuZF9jbWQoY21kLAorCQkJIGNtZF9kb25lLAorCQkJIFBNQ1JBSURfU0VUX1NVUF9ERVZfVElNRU9VVCwKKwkJCSBwbWNyYWlkX3RpbWVvdXRfaGFuZGxlcik7CisJcmV0dXJuOworfQorCisvKioKKyAqIHBtY3JhaWRfaW5pdF9yZXNfdGFibGUgLSBJbml0aWFsaXplIHRoZSByZXNvdXJjZSB0YWJsZQorICogQGNtZDogIHBvaW50ZXIgdG8gcG1jcmFpZCBjb21tYW5kIHN0cnVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gbG9va3MgdGhyb3VnaCB0aGUgZXhpc3RpbmcgcmVzb3VyY2UgdGFibGUsIGNvbXBhcmluZworICogaXQgd2l0aCB0aGUgY29uZmlnIHRhYmxlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBjYXJlIG9mIG9sZC9uZXcKKyAqIGRldmljZXMgYW5kIHNjaGVkdWxlIGFkZGluZy9yZW1vdmluZyB0aGVtIGZyb20gdGhlIG1pZC1sYXllcgorICogYXMgYXBwcm9wcmlhdGUuCisgKgorICogUmV0dXJuIHZhbHVlCisgKgkgTm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2luaXRfcmVzX3RhYmxlKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OworCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXMsICp0ZW1wOworCXN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeSAqY2ZndGU7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCWludCBmb3VuZCwgcmMsIGk7CisJTElTVF9IRUFEKG9sZF9yZXMpOworCisJaWYgKHBpbnN0YW5jZS0+Y2ZnX3RhYmxlLT5mbGFncyAmIE1JQ1JPQ09ERV9VUERBVEVfUkVRVUlSRUQpCisJCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LCAiUmVxdWlyZSBtaWNyb2NvZGUgZG93bmxvYWRcbiIpOworCisJLyogcmVzb3VyY2UgbGlzdCBpcyBwcm90ZWN0ZWQgYnkgcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLgorCSAqIGluaXRfcmVzX3RhYmxlIGNhbiBiZSBjYWxsZWQgZnJvbSBwcm9iZSAodXNlci10aHJlYWQpIG9yIHJ1bnRpbWUKKwkgKiByZXNldCAodGltZXIvdGFza2xldCkKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXMsIHRlbXAsICZwaW5zdGFuY2UtPnVzZWRfcmVzX3EsIHF1ZXVlKQorCQlsaXN0X21vdmVfdGFpbCgmcmVzLT5xdWV1ZSwgJm9sZF9yZXMpOworCisJZm9yIChpID0gMDsgaSA8IHBpbnN0YW5jZS0+Y2ZnX3RhYmxlLT5udW1fZW50cmllczsgaSsrKSB7CisJCWNmZ3RlID0gJnBpbnN0YW5jZS0+Y2ZnX3RhYmxlLT5lbnRyaWVzW2ldOworCisJCWlmICghcG1jcmFpZF9leHBvc2VfcmVzb3VyY2UoY2ZndGUpKQorCQkJY29udGludWU7CisKKwkJZm91bmQgPSAwOworCisJCS8qIElmIHRoaXMgZW50cnkgd2FzIGFscmVhZHkgZGV0ZWN0ZWQgYW5kIGluaXRpYWxpemVkICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXMsIHRlbXAsICZvbGRfcmVzLCBxdWV1ZSkgeworCisJCQlyYyA9IG1lbWNtcCgmcmVzLT5jZmdfZW50cnkucmVzb3VyY2VfYWRkcmVzcywKKwkJCQkgICAgJmNmZ3RlLT5yZXNvdXJjZV9hZGRyZXNzLAorCQkJCSAgICBzaXplb2YoY2ZndGUtPnJlc291cmNlX2FkZHJlc3MpKTsKKwkJCWlmICghcmMpIHsKKwkJCQlsaXN0X21vdmVfdGFpbCgmcmVzLT5xdWV1ZSwKKwkJCQkJCSZwaW5zdGFuY2UtPnVzZWRfcmVzX3EpOworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qIElmIHRoaXMgaXMgbmV3IGVudHJ5LCBpbml0aWFsaXplIGl0IGFuZCBhZGQgaXQgdGhlIHF1ZXVlICovCisJCWlmICghZm91bmQpIHsKKworCQkJaWYgKGxpc3RfZW1wdHkoJnBpbnN0YW5jZS0+ZnJlZV9yZXNfcSkpIHsKKwkJCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJCQkJIlRvbyBtYW55IGRldmljZXMgYXR0YWNoZWRcbiIpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlmb3VuZCA9IDE7CisJCQlyZXMgPSBsaXN0X2VudHJ5KHBpbnN0YW5jZS0+ZnJlZV9yZXNfcS5uZXh0LAorCQkJCQkgc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnksIHF1ZXVlKTsKKworCQkJcmVzLT5zY3NpX2RldiA9IE5VTEw7CisJCQlyZXMtPmNoYW5nZV9kZXRlY3RlZCA9IFJFU19DSEFOR0VfQUREOworCQkJcmVzLT5yZXNldF9wcm9ncmVzcyA9IDA7CisJCQlsaXN0X21vdmVfdGFpbCgmcmVzLT5xdWV1ZSwgJnBpbnN0YW5jZS0+dXNlZF9yZXNfcSk7CisJCX0KKworCQkvKiBjb3B5IG5ldyBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJ5IGRldGFpbHMgaW50byBkcml2ZXIKKwkJICogbWFpbnRhaW5lZCByZXNvdXJjZSBlbnRyeQorCQkgKi8KKwkJaWYgKGZvdW5kKSB7CisJCQltZW1jcHkoJnJlcy0+Y2ZnX2VudHJ5LCBjZmd0ZSwKKwkJCQlzaXplb2Yoc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5KSk7CisJCQlwbWNyYWlkX2luZm8oIk5ldyByZXMgdHlwZToleCwgdnNldDoleCwgYWRkcjoleDpcbiIsCisJCQkJIHJlcy0+Y2ZnX2VudHJ5LnJlc291cmNlX3R5cGUsCisJCQkJIHJlcy0+Y2ZnX2VudHJ5LnVuaXF1ZV9mbGFnczEsCisJCQkJIGxlMzJfdG9fY3B1KHJlcy0+Y2ZnX2VudHJ5LnJlc291cmNlX2FkZHJlc3MpKTsKKwkJfQorCX0KKworCS8qIERldGVjdCBhbnkgZGVsZXRlZCBlbnRyaWVzLCBtYXJrIHRoZW0gZm9yIGRlbGV0aW9uIGZyb20gbWlkLWxheWVyICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcywgdGVtcCwgJm9sZF9yZXMsIHF1ZXVlKSB7CisKKwkJaWYgKHJlcy0+c2NzaV9kZXYpIHsKKwkJCXJlcy0+Y2hhbmdlX2RldGVjdGVkID0gUkVTX0NIQU5HRV9ERUw7CisJCQlyZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV9oYW5kbGUgPQorCQkJCVBNQ1JBSURfSU5WQUxJRF9SRVNfSEFORExFOworCQkJbGlzdF9tb3ZlX3RhaWwoJnJlcy0+cXVldWUsICZwaW5zdGFuY2UtPnVzZWRfcmVzX3EpOworCQl9IGVsc2UgeworCQkJbGlzdF9tb3ZlX3RhaWwoJnJlcy0+cXVldWUsICZwaW5zdGFuY2UtPmZyZWVfcmVzX3EpOworCQl9CisJfQorCisJLyogcmVsZWFzZSB0aGUgcmVzb3VyY2UgbGlzdCBsb2NrICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlwbWNyYWlkX3NldF9zdXBwb3J0ZWRfZGV2cyhjbWQpOworfQorCisvKioKKyAqIHBtY3JhaWRfcXVlcnljZmcgLSBTZW5kIGEgUXVlcnkgSU9BIENvbmZpZyB0byB0aGUgYWRhcHRlci4KKyAqIEBjbWQ6IHBvaW50ZXIgcG1jcmFpZF9jbWQgc3RydWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIFF1ZXJ5IElPQSBDb25maWd1cmF0aW9uIGNvbW1hbmQgdG8gdGhlIGFkYXB0ZXIgdG8KKyAqIHJldHJpZXZlIHRoZSBJT0EgY29uZmlndXJhdGlvbiB0YWJsZS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKglub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcXVlcnljZmcoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHBtY3JhaWRfaW9hcmNiICppb2FyY2IgPSAmY21kLT5pb2FfY2ItPmlvYXJjYjsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjICppb2FkbCA9IGlvYXJjYi0+YWRkX2RhdGEudS5pb2FkbDsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwlpbnQgY2ZnX3RhYmxlX3NpemUgPSBjcHVfdG9fYmUzMihzaXplb2Yoc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlKSk7CisKKwlpb2FyY2ItPnJlcXVlc3RfdHlwZSA9IFJFUV9UWVBFX0lPQUNNRDsKKwlpb2FyY2ItPnJlc291cmNlX2hhbmRsZSA9IGNwdV90b19sZTMyKFBNQ1JBSURfSU9BX1JFU19IQU5ETEUpOworCisJaW9hcmNiLT5jZGJbMF0gPSBQTUNSQUlEX1FVRVJZX0lPQV9DT05GSUc7CisKKwkvKiBmaXJtd2FyZSByZXF1aXJlcyA0LWJ5dGUgbGVuZ3RoIGZpZWxkLCBzcGVjaWZpZWQgaW4gQi5FIGZvcm1hdCAqLworCW1lbWNweSgmKGlvYXJjYi0+Y2RiWzEwXSksICZjZmdfdGFibGVfc2l6ZSwgc2l6ZW9mKGNmZ190YWJsZV9zaXplKSk7CisKKwkvKiBTaW5jZSBlbnRpcmUgY29uZmlnIHRhYmxlIGNhbiBiZSBkZXNjcmliZWQgYnkgc2luZ2xlIElPQURMLCBpdCBjYW4KKwkgKiBiZSBwYXJ0IG9mIElPQVJDQiBpdHNlbGYKKwkgKi8KKwlpb2FyY2ItPmlvYWRsX2J1c19hZGRyID0gY3B1X3RvX2xlNjQoKGNtZC0+aW9hX2NiX2J1c19hZGRyKSArCisJCQkJCW9mZnNldG9mKHN0cnVjdCBwbWNyYWlkX2lvYXJjYiwKKwkJCQkJCWFkZF9kYXRhLnUuaW9hZGxbMF0pKTsKKwlpb2FyY2ItPmlvYWRsX2xlbmd0aCA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjKSk7CisJaW9hcmNiLT5pb2FyY2JfYnVzX2FkZHIgJj0gfigweDFGVUxMKTsKKworCWlvYXJjYi0+cmVxdWVzdF9mbGFnczAgfD0gTk9fTElOS19ERVNDUzsKKwlpb2FyY2ItPmRhdGFfdHJhbnNmZXJfbGVuZ3RoID0KKwkJY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZSkpOworCisJaW9hZGwgPSAmKGlvYXJjYi0+YWRkX2RhdGEudS5pb2FkbFswXSk7CisJaW9hZGwtPmZsYWdzID0gY3B1X3RvX2xlMzIoSU9BRExfRkxBR1NfTEFTVF9ERVNDKTsKKwlpb2FkbC0+YWRkcmVzcyA9IGNwdV90b19sZTY0KHBpbnN0YW5jZS0+Y2ZnX3RhYmxlX2J1c19hZGRyKTsKKwlpb2FkbC0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlKSk7CisKKwlwbWNyYWlkX3NlbmRfY21kKGNtZCwgcG1jcmFpZF9pbml0X3Jlc190YWJsZSwKKwkJCSBQTUNSQUlEX0lOVEVSTkFMX1RJTUVPVVQsIHBtY3JhaWRfdGltZW91dF9oYW5kbGVyKTsKK30KKworCisvKioKKyAqIHBtY3JhaWRfcHJvYmUgLSBQQ0kgcHJvYmUgZW50cnkgcG9pbnRlciBmb3IgUE1DIE1heFJhaWQgY29udHJvbGxlciBkcml2ZXIKKyAqIEBwZGV2OiBwb2ludGVyIHRvIHBjaSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZGV2X2lkOiBwb2ludGVyIHRvIGRldmljZSBpZHMgc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlCisgKglyZXR1cm5zIDAgaWYgdGhlIGRldmljZSBpcyBjbGFpbWVkIGFuZCBzdWNjZXNzZnVsbHkgY29uZmlndXJlZC4KKyAqCXJldHVybnMgbm9uLXplcm8gZXJyb3IgY29kZSBpbiBjYXNlIG9mIGFueSBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHBtY3JhaWRfcHJvYmUoCisJc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmRldl9pZAorKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2U7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKKwl2b2lkIF9faW9tZW0gKm1hcHBlZF9wY2lfYWRkcjsKKwlpbnQgcmMgPSBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisKKwlpZiAoYXRvbWljX3JlYWQoJnBtY3JhaWRfYWRhcHRlcl9jb3VudCkgPj0gUE1DUkFJRF9NQVhfQURBUFRFUlMpIHsKKwkJcG1jcmFpZF9lcnIKKwkJCSgibWF4aW11bSBudW1iZXIoJWQpIG9mIHN1cHBvcnRlZCBhZGFwdGVycyByZWFjaGVkXG4iLAorCQkJIGF0b21pY19yZWFkKCZwbWNyYWlkX2FkYXB0ZXJfY291bnQpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYXRvbWljX2luYygmcG1jcmFpZF9hZGFwdGVyX2NvdW50KTsKKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCisJaWYgKHJjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBlbmFibGUgYWRhcHRlclxuIik7CisJCWF0b21pY19kZWMoJnBtY3JhaWRfYWRhcHRlcl9jb3VudCk7CisJCXJldHVybiByYzsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LAorCQkiRm91bmQgbmV3IElPQSgleDoleCksIFRvdGFsIElPQSBjb3VudDogJWRcbiIsCisJCSBwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSwKKwkJIGF0b21pY19yZWFkKCZwbWNyYWlkX2FkYXB0ZXJfY291bnQpKTsKKworCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBQTUNSQUlEX0RSSVZFUl9OQU1FKTsKKworCWlmIChyYyA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkNvdWxkbid0IHJlZ2lzdGVyIG1lbW9yeSByYW5nZSBvZiByZWdpc3RlcnNcbiIpOworCQlnb3RvIG91dF9kaXNhYmxlX2RldmljZTsKKwl9CisKKwltYXBwZWRfcGNpX2FkZHIgPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7CisKKwlpZiAoIW1hcHBlZF9wY2lfYWRkcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZG4ndCBtYXAgUENJIHJlZ2lzdGVycyBtZW1vcnlcbiIpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3JlbGVhc2VfcmVnaW9uczsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCS8qIEZpcm13YXJlIHJlcXVpcmVzIHRoZSBzeXN0ZW0gYnVzIGFkZHJlc3Mgb2YgSU9BUkNCIHRvIGJlIHdpdGhpbgorCSAqIDMyLWJpdCBhZGRyZXNzYWJsZSByYW5nZSB0aG91Z2ggaXQgaGFzIDY0LWJpdCBJT0FSUklOIHJlZ2lzdGVyLgorCSAqIEhvd2V2ZXIsIGZpcm13YXJlIHN1cHBvcnRzIDY0LWJpdCBzdHJlYW1pbmcgRE1BIGJ1ZmZlcnMsIHdoZXJlYXMKKwkgKiBjb2hlcmVudCBidWZmZXJzIGFyZSB0byBiZSAzMi1iaXQuIFNpbmNlIHBjaV9hbGxvY19jb25zaXN0ZW50IGFsd2F5cworCSAqIHJldHVybnMgbWVtb3J5IHdpdGhpbiA0R0IgKGlmIG5vdCwgY2hhbmdlIHRoaXMgbG9naWMpLCBjb2hlcmVudAorCSAqIGJ1ZmZlcnMgYXJlIHdpdGhpbiBmaXJtd2FyZSBhY2NlcHRpYmxlIGFkZHJlc3MgcmFuZ2VzLgorCSAqLworCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID09IDQpIHx8CisJICAgIHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpCisJCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKworCS8qIGZpcm13YXJlIGV4cGVjdHMgMzItYml0IERNQSBhZGRyZXNzZXMgZm9yIElPQVJSSU4gcmVnaXN0ZXI7IHNldCAzMgorCSAqIGJpdCBtYXNrIGZvciBwY2lfYWxsb2NfY29uc2lzdGVudCB0byByZXR1cm4gYWRkcmVzc2VzIHdpdGhpbiA0R0IKKwkgKi8KKwlpZiAocmMgPT0gMCkKKwkJcmMgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisKKwlpZiAocmMgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IFBDSSBETUEgbWFza1xuIik7CisJCWdvdG8gY2xlYW51cF9ub21lbTsKKwl9CisKKwlob3N0ID0gc2NzaV9ob3N0X2FsbG9jKCZwbWNyYWlkX2hvc3RfdGVtcGxhdGUsCisJCQkJc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlKSk7CisKKwlpZiAoIWhvc3QpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAic2NzaV9ob3N0X2FsbG9jIGZhaWxlZCFcbiIpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cF9ub21lbTsKKwl9CisKKwlob3N0LT5tYXhfaWQgPSBQTUNSQUlEX01BWF9OVU1fVEFSR0VUU19QRVJfQlVTOworCWhvc3QtPm1heF9sdW4gPSBQTUNSQUlEX01BWF9OVU1fTFVOU19QRVJfVEFSR0VUOworCWhvc3QtPnVuaXF1ZV9pZCA9IGhvc3QtPmhvc3Rfbm87CisJaG9zdC0+bWF4X2NoYW5uZWwgPSBQTUNSQUlEX01BWF9CVVNfVE9fU0NBTjsKKwlob3N0LT5tYXhfY21kX2xlbiA9IFBNQ1JBSURfTUFYX0NEQl9MRU47CisKKwkvKiB6ZXJvIG91dCBlbnRpcmUgaW5zdGFuY2Ugc3RydWN0dXJlICovCisJcGluc3RhbmNlID0gKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICopaG9zdC0+aG9zdGRhdGE7CisJbWVtc2V0KHBpbnN0YW5jZSwgMCwgc2l6ZW9mKCpwaW5zdGFuY2UpKTsKKworCXBpbnN0YW5jZS0+Y2hpcF9jZmcgPQorCQkoc3RydWN0IHBtY3JhaWRfY2hpcF9kZXRhaWxzICopKGRldl9pZC0+ZHJpdmVyX2RhdGEpOworCisJcmMgPSBwbWNyYWlkX2luaXRfaW5zdGFuY2UocGRldiwgaG9zdCwgbWFwcGVkX3BjaV9hZGRyKTsKKworCWlmIChyYyA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgYWRhcHRlciBpbnN0YW5jZVxuIik7CisJCWdvdG8gb3V0X3Njc2lfaG9zdF9wdXQ7CisJfQorCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHBpbnN0YW5jZSk7CisKKwkvKiBTYXZlIFBDSSBjb25maWctc3BhY2UgZm9yIHVzZSBmb2xsb3dpbmcgdGhlIHJlc2V0ICovCisJcmMgPSBwY2lfc2F2ZV9zdGF0ZShwaW5zdGFuY2UtPnBkZXYpOworCisJaWYgKHJjICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHNhdmUgUENJIGNvbmZpZyBzcGFjZVxuIik7CisJCWdvdG8gb3V0X3Njc2lfaG9zdF9wdXQ7CisJfQorCisJcG1jcmFpZF9kaXNhYmxlX2ludGVycnVwdHMocGluc3RhbmNlLCB+MCk7CisKKwlyYyA9IHBtY3JhaWRfcmVnaXN0ZXJfaW50ZXJydXB0X2hhbmRsZXIocGluc3RhbmNlKTsKKworCWlmIChyYykgeworCQlwbWNyYWlkX2VycigiY291bGRuJ3QgcmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXJcbiIpOworCQlnb3RvIG91dF9zY3NpX2hvc3RfcHV0OworCX0KKworCXBtY3JhaWRfaW5pdF90YXNrbGV0cyhwaW5zdGFuY2UpOworCisJLyogYWxsb2NhdGUgdmVyaW91cyBidWZmZXJzIHVzZWQgYnkgTExELiovCisJcmMgPSBwbWNyYWlkX2luaXRfYnVmZmVycyhwaW5zdGFuY2UpOworCisJaWYgKHJjKSB7CisJCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgYmxvY2tzXG4iKTsKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9pc3I7CisJfQorCisJLyogY2hlY2sgdGhlIHJlc2V0IHR5cGUgcmVxdWlyZWQgKi8KKwlwbWNyYWlkX3Jlc2V0X3R5cGUocGluc3RhbmNlKTsKKworCXBtY3JhaWRfZW5hYmxlX2ludGVycnVwdHMocGluc3RhbmNlLCBQTUNSQUlEX1BDSV9JTlRFUlJVUFRTKTsKKworCS8qIFN0YXJ0IElPQSBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiBhbmQgYnJpbmcgY2FyZCB0byBPcGVyYXRpb25hbAorCSAqIHN0YXRlLgorCSAqLworCXBtY3JhaWRfaW5mbygic3RhcnRpbmcgSU9BIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlXG4iKTsKKwlpZiAocG1jcmFpZF9yZXNldF9icmluZ3VwKHBpbnN0YW5jZSkpIHsKKwkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGluaXRpYWxpemUgSU9BIFxuIik7CisJCXJjID0gMTsKKwkJZ290byBvdXRfcmVsZWFzZV9idWZzOworCX0KKworCS8qIEFkZCBhZGFwdGVyIGluc3RhbmNlIGludG8gbWlkLWxheWVyIGxpc3QgKi8KKwlyYyA9IHNjc2lfYWRkX2hvc3QocGluc3RhbmNlLT5ob3N0LCAmcGRldi0+ZGV2KTsKKwlpZiAocmMgIT0gMCkgeworCQlwbWNyYWlkX2VycigiY291bGRuJ3QgYWRkIGhvc3QgaW50byBtaWQtbGF5ZXI6ICVkXG4iLCByYyk7CisJCWdvdG8gb3V0X3JlbGVhc2VfYnVmczsKKwl9CisKKwlzY3NpX3NjYW5faG9zdChwaW5zdGFuY2UtPmhvc3QpOworCisJcmMgPSBwbWNyYWlkX3NldHVwX2NocmRldihwaW5zdGFuY2UpOworCisJaWYgKHJjICE9IDApIHsKKwkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGNyZWF0ZSBtZ210IGludGVyZmFjZSwgZXJyb3I6ICV4XG4iLAorCQkJICAgICByYyk7CisJCWdvdG8gb3V0X3JlbW92ZV9ob3N0OworCX0KKworCS8qIFNjaGVkdWxlIHdvcmtlciB0aHJlYWQgdG8gaGFuZGxlIENDTiBhbmQgdGFrZSBjYXJlIG9mIGFkZGluZyBhbmQKKwkgKiByZW1vdmluZyBkZXZpY2VzIHRvIE9TCisJICovCisJYXRvbWljX3NldCgmcGluc3RhbmNlLT5leHBvc2VfcmVzb3VyY2VzLCAxKTsKKwlzY2hlZHVsZV93b3JrKCZwaW5zdGFuY2UtPndvcmtlcl9xKTsKKwlyZXR1cm4gcmM7CisKK291dF9yZW1vdmVfaG9zdDoKKwlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOworCitvdXRfcmVsZWFzZV9idWZzOgorCXBtY3JhaWRfcmVsZWFzZV9idWZmZXJzKHBpbnN0YW5jZSk7CisKK291dF91bnJlZ2lzdGVyX2lzcjoKKwlwbWNyYWlkX2tpbGxfdGFza2xldHMocGluc3RhbmNlKTsKKwlwbWNyYWlkX3VucmVnaXN0ZXJfaW50ZXJydXB0X2hhbmRsZXIocGluc3RhbmNlKTsKKworb3V0X3Njc2lfaG9zdF9wdXQ6CisJc2NzaV9ob3N0X3B1dChob3N0KTsKKworY2xlYW51cF9ub21lbToKKwlpb3VubWFwKG1hcHBlZF9wY2lfYWRkcik7CisKK291dF9yZWxlYXNlX3JlZ2lvbnM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKworb3V0X2Rpc2FibGVfZGV2aWNlOgorCWF0b21pY19kZWMoJnBtY3JhaWRfYWRhcHRlcl9jb3VudCk7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoKKyAqIFBDSSBkcml2ZXIgc3RydWN0dXJlIG9mIHBjbXJhaWQgZHJpdmVyCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwbWNyYWlkX2RyaXZlciA9IHsKKwkubmFtZSA9IFBNQ1JBSURfRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlID0gcG1jcmFpZF9wY2lfdGFibGUsCisJLnByb2JlID0gcG1jcmFpZF9wcm9iZSwKKwkucmVtb3ZlID0gcG1jcmFpZF9yZW1vdmUsCisJLnN1c3BlbmQgPSBwbWNyYWlkX3N1c3BlbmQsCisJLnJlc3VtZSA9IHBtY3JhaWRfcmVzdW1lLAorCS5zaHV0ZG93biA9IHBtY3JhaWRfc2h1dGRvd24KK307CisKKworLyoqCisgKiBwbWNyYWlkX2luaXQgLSBtb2R1bGUgbG9hZCBlbnRyeSBwb2ludAorICovCitzdGF0aWMgaW50IF9faW5pdCBwbWNyYWlkX2luaXQodm9pZCkKK3sKKwlkZXZfdCBkZXY7CisJaW50IGVycm9yOworCisJcG1jcmFpZF9pbmZvKCIlcyBEZXZpY2UgRHJpdmVyIHZlcnNpb246ICVzICVzXG4iLAorCQkJIFBNQ1JBSURfRFJJVkVSX05BTUUsCisJCQkgUE1DUkFJRF9EUklWRVJfVkVSU0lPTiwgUE1DUkFJRF9EUklWRVJfREFURSk7CisKKwllcnJvciA9IGFsbG9jX2NocmRldl9yZWdpb24oJmRldiwgMCwKKwkJCQkgICAgUE1DUkFJRF9NQVhfQURBUFRFUlMsCisJCQkJICAgIFBNQ1JBSURfREVWRklMRSk7CisKKwlpZiAoZXJyb3IpIHsKKwkJcG1jcmFpZF9lcnIoImZhaWxlZCB0byBnZXQgYSBtYWpvciBudW1iZXIgZm9yIGFkYXB0ZXJzXG4iKTsKKwkJZ290byBvdXRfaW5pdDsKKwl9CisKKwlwbWNyYWlkX21ham9yID0gTUFKT1IoZGV2KTsKKwlwbWNyYWlkX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCBQTUNSQUlEX0RFVkZJTEUpOworCisJaWYgKElTX0VSUihwbWNyYWlkX2NsYXNzKSkgeworCQllcnJvciA9IFBUUl9FUlIocG1jcmFpZF9jbGFzcyk7CisJCXBtY3JhaWRfZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgd2l0aCB3aXRoIHN5c2ZzLCBlcnJvciA9ICV4XG4iLAorCQkJICAgIGVycm9yKTsKKwkJZ290byBvdXRfdW5yZWdfY2hyZGV2OworCX0KKworCisJZXJyb3IgPSBwbWNyYWlkX25ldGxpbmtfaW5pdCgpOworCisJaWYgKGVycm9yKQorCQlnb3RvIG91dF91bnJlZ19jaHJkZXY7CisKKwllcnJvciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnBtY3JhaWRfZHJpdmVyKTsKKworCWlmIChlcnJvciA9PSAwKQorCQlnb3RvIG91dF9pbml0OworCisJcG1jcmFpZF9lcnIoImZhaWxlZCB0byByZWdpc3RlciBwbWNyYWlkIGRyaXZlciwgZXJyb3IgPSAleFxuIiwKKwkJICAgICBlcnJvcik7CisJY2xhc3NfZGVzdHJveShwbWNyYWlkX2NsYXNzKTsKKwlwbWNyYWlkX25ldGxpbmtfcmVsZWFzZSgpOworCitvdXRfdW5yZWdfY2hyZGV2OgorCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihwbWNyYWlkX21ham9yLCAwKSwgUE1DUkFJRF9NQVhfQURBUFRFUlMpOworb3V0X2luaXQ6CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHBtY3JhaWRfZXhpdCAtIG1vZHVsZSB1bmxvYWQgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIHZvaWQgX19leGl0IHBtY3JhaWRfZXhpdCh2b2lkKQoreworCXBtY3JhaWRfbmV0bGlua19yZWxlYXNlKCk7CisJY2xhc3NfZGVzdHJveShwbWNyYWlkX2NsYXNzKTsKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYocG1jcmFpZF9tYWpvciwgMCksCisJCQkJIFBNQ1JBSURfTUFYX0FEQVBURVJTKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnBtY3JhaWRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocG1jcmFpZF9pbml0KTsKK21vZHVsZV9leGl0KHBtY3JhaWRfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTRiM2E3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuaApAQCAtMCwwICsxLDEwMjkgQEAKKy8qCisgKiBwbWNyYWlkLmggLS0gUE1DIFNpZXJyYSBNYXhSQUlEIGNvbnRyb2xsZXIgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFBNQyBTaWVycmEgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9QTUNSQUlEX0gKKyNkZWZpbmUgX1BNQ1JBSURfSAorCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CisvKgorICogRHJpdmVyIG5hbWUgICA6IHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRyaXZlciBuYW1lCisgKiBEZXZpY2UgZmlsZSAgIDogL2RldiBmaWxlIHRvIGJlIHVzZWQgZm9yIG1hbmFnZW1lbnQgaW50ZXJmYWNlcworICogRHJpdmVyIHZlcnNpb246IHZlcnNpb24gc3RyaW5nIGluIG1ham9yX3ZlcnNpb24ubWlub3JfdmVyc2lvbi5wYXRjaCBmb3JtYXQKKyAqIERyaXZlciBkYXRlICAgOiBkYXRlIGluZm9ybWF0aW9uIGluICJNb24gZGQgeXl5eSIgZm9ybWF0CisgKi8KKyNkZWZpbmUgUE1DUkFJRF9EUklWRVJfTkFNRSAgICAgICAJIlBNQyBNYXhSQUlEIgorI2RlZmluZSBQTUNSQUlEX0RFVkZJTEUJCQkicG1jc2FzIgorI2RlZmluZSBQTUNSQUlEX0RSSVZFUl9WRVJTSU9OICAgIAkiMS4wLjIiCisjZGVmaW5lIFBNQ1JBSURfRFJJVkVSX0RBVEUgICAgICAgCV9fREFURV9fCisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGFkYXB0ZXJzIHN1cHBvcnRlZCBieSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIGRyaXZlciAqLworI2RlZmluZSBQTUNSQUlEX01BWF9BREFQVEVSUwkJMTAyNAorCisvKiBCaXQgZGVmaW5pdGlvbnMgYXMgcGVyIGZpcm13YXJlLCBiaXQgcG9zaXRpb24gWzBdWzFdWzJdLi4uLi5bMzFdICovCisjZGVmaW5lIFBNQ19CSVQ4KG4pICAgICAgICAgICgxIDw8ICg3LW4pKQorI2RlZmluZSBQTUNfQklUMTYobikgICAgICAgICAoMSA8PCAoMTUtbikpCisjZGVmaW5lIFBNQ19CSVQzMihuKSAgICAgICAgICgxIDw8ICgzMS1uKSkKKworLyogUE1DIFBDSSB2ZW5kb3IgSUQgYW5kIGRldmljZSBJRCB2YWx1ZXMgKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9QTUMJCQkweDExRjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTUNfTUFYUkFJRAkJMHg1MjIwCisKKy8qCisgKiBNQVhfQ01EICAgICAgICAgIDogbWF4aW11bSBjb21tYW5kcyB0aGF0IGNhbiBiZSBvdXRzdGFuZGluZyB3aXRoIElPQQorICogTUFYX0lPX0NNRCAgICAgICA6IGNvbW1hbmQgYmxvY2tzIGF2YWlsYWJsZSBmb3IgSU8gY29tbWFuZHMKKyAqIE1BWF9IQ0FNX0NNRCAgICAgOiBjb21tYW5kIGJsb2NrcyBhdmFpYmFsZSBmb3IgSENBTVMKKyAqIE1BWF9JTlRFUk5BTF9DTUQgOiBjb21tYW5kIGJsb2NrcyBhdmFpYmxlIGZvciBpbnRlcm5hbCBjb21tYW5kcyBsaWtlIHJlc2V0CisgKi8KKyNkZWZpbmUgUE1DUkFJRF9NQVhfQ01ECQkJCTEwMjQKKyNkZWZpbmUgUE1DUkFJRF9NQVhfSU9fQ01ECQkJMTAyMAorI2RlZmluZSBQTUNSQUlEX01BWF9IQ0FNX0NNRAkJCTIKKyNkZWZpbmUgUE1DUkFJRF9NQVhfSU5URVJOQUxfQ01ECQkyCisKKy8qIE1BWF9JT0FETFMgICAgICAgOiBtYXggbnVtYmVyIG9mIHNjYXR0ZXItZ2F0aGVyIGxpc3RzIHN1cHBvcnRlZCBieSBJT0EKKyAqIElPQURMU19JTlRFUk5BTCAgOiBudW1iZXIgb2YgaW9hZGxzIGluY2x1ZGVkIGFzIHBhcnQgb2YgSU9BUkNCLgorICogSU9BRExTX0VYVEVSTkFMICA6IG51bWJlciBvZiBpb2FkbHMgYWxsb2NhdGVkIGV4dGVybmFsIHRvIElPQVJDQgorICovCisjZGVmaW5lIFBNQ1JBSURfSU9BRExTX0lOVEVSTkFMCQkJIDI3CisjZGVmaW5lIFBNQ1JBSURfSU9BRExTX0VYVEVSTkFMCQkJIDM3CisjZGVmaW5lIFBNQ1JBSURfTUFYX0lPQURMUwkJCSBQTUNSQUlEX0lPQURMU19JTlRFUk5BTAorCisvKiBIUlJRX0VOVFJZX1NJWkUgIDogc2l6ZSBvZiBocnJxIGJ1ZmZlcgorICogSU9BUkNCX0FMSUdOTUVOVCA6IGFsaWdubWVudCByZXF1aXJlZCBmb3IgSU9BUkNCCisgKiBJT0FETF9BTElHTk1FTlQgIDogYWxpZ25tZW50IHJlcXVpcmVtZW50IGZvciBJT0FETHMKKyAqIE1TSVhfVkVDVE9SUyAgICAgOiBudW1iZXIgb2YgTVNJWCB2ZWN0b3JzIHN1cHBvcnRlZAorICovCisjZGVmaW5lIEhSUlFfRU5UUllfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKF9fbGUzMikKKyNkZWZpbmUgUE1DUkFJRF9JT0FSQ0JfQUxJR05NRU5UICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBQTUNSQUlEX0lPQURMX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFBNQ1JBSURfSU9BU0FfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBQTUNSQUlEX05VTV9NU0lYX1ZFQ1RPUlMgICAgICAgICAgICAgICAgIDEKKworLyogdmFyaW91cyBvdGhlciBsaW1pdHMgKi8KKyNkZWZpbmUgUE1DUkFJRF9WRU5ET1JfSURfTEVOICAgICAgICAgICAJIDgKKyNkZWZpbmUgUE1DUkFJRF9QUk9EVUNUX0lEX0xFTiAgICAgICAgICAgIAkgMTYKKyNkZWZpbmUgUE1DUkFJRF9TRVJJQUxfTlVNX0xFTiAgICAgICAgICAJIDgKKyNkZWZpbmUgUE1DUkFJRF9MVU5fTEVOCQkJICAgICAgICAgOAorI2RlZmluZSBQTUNSQUlEX01BWF9DREJfTEVOICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFBNQ1JBSURfREVWSUNFX0lEX0xFTgkJCSA4CisjZGVmaW5lIFBNQ1JBSURfU0VOU0VfREFUQV9MRU4JCQkgMjU2CisjZGVmaW5lIFBNQ1JBSURfQUREX0NNRF9QQVJBTV9MRU4JCSA0OAorCisjZGVmaW5lIFBNQ1JBSURfTUFYX0JVU19UT19TQ0FOICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQTUNSQUlEX01BWF9OVU1fVEFSR0VUU19QRVJfQlVTICAgICAgICAgIDI1NgorI2RlZmluZSBQTUNSQUlEX01BWF9OVU1fTFVOU19QRVJfVEFSR0VUICAgICAgICAgIDgKKworLyogSU9BIGJ1cy90YXJnZXQvbHVuIG51bWJlciBvZiBJT0EgcmVzb3VyY2VzICovCisjZGVmaW5lIFBNQ1JBSURfSU9BX0JVU19JRCAgICAgICAgICAgICAgICAgICAgICAgMHhmZQorI2RlZmluZSBQTUNSQUlEX0lPQV9UQVJHRVRfSUQgICAgICAgICAgICAgICAgICAgIDB4ZmYKKyNkZWZpbmUgUE1DUkFJRF9JT0FfTFVOX0lEICAgICAgICAgICAgICAgICAgICAgICAweGZmCisjZGVmaW5lIFBNQ1JBSURfVlNFVF9CVVNfSUQgICAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIFBNQ1JBSURfVlNFVF9MVU5fSUQgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIFBNQ1JBSURfUEhZU19CVVNfSUQgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIFBNQ1JBSURfVklSVFVBTF9FTkNMX0JVU19JRCAgICAgICAgICAgICAgMHg4CisjZGVmaW5lIFBNQ1JBSURfTUFYX1ZTRVRfVEFSR0VUUyAgICAgICAgICAgICAgICAgMjQwCisjZGVmaW5lIFBNQ1JBSURfTUFYX1ZTRVRfTFVOU19QRVJfVEFSR0VUICAgICAgICAgOAorCisjZGVmaW5lIFBNQ1JBSURfSU9BX01BWF9TRUNUT1JTICAgICAgICAgICAgICAgICAgMzI3NjcKKyNkZWZpbmUgUE1DUkFJRF9WU0VUX01BWF9TRUNUT1JTICAgICAgICAgICAgICAgICA1MTIKKyNkZWZpbmUgUE1DUkFJRF9NQVhfQ01EX1BFUl9MVU4gICAgICAgICAgICAgICAgICAyNTQKKworLyogTnVtYmVyIG9mIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcyAocmVzb3VyY2VzKSAqLworI2RlZmluZSBQTUNSQUlEX01BWF9OVU1fT0ZfVlNFVFMgICAgICAgICAgICAgICAgIDI0MAorCisvKiBUb2RvIDogQ2hlY2sgbWF4IGxpbWl0IGZvciBQaGFzZSAxICovCisjZGVmaW5lIFBNQ1JBSURfTUFYX05VTV9PRl9QSFlfREVWUyAgICAgICAgICAgICAgMjU2CisKKy8qIE1BWF9OVU1fT0ZfREVWUyBpbmNsdWRlcyAxIEZQLCAxIER1bW15IEVuY2xvc3VyZSBkZXZpY2UgKi8KKyNkZWZpbmUgUE1DUkFJRF9NQVhfTlVNX09GX0RFVlMgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKFBNQ1JBSURfTUFYX05VTV9PRl9WU0VUUyArIFBNQ1JBSURfTUFYX05VTV9PRl9QSFlfREVWUyArIDIpCisKKyNkZWZpbmUgUE1DUkFJRF9NQVhfUkVTT1VSQ0VTICAgICAgICAgICAgICAgICAgICBQTUNSQUlEX01BWF9OVU1fT0ZfREVWUworCisvKiBBZGFwdGVyIENvbW1hbmRzIHVzZWQgYnkgZHJpdmVyICovCisjZGVmaW5lIFBNQ1JBSURfUVVFUllfUkVTT1VSQ0VfU1RBVEUgICAgICAgICAgICAgMHhDMgorI2RlZmluZSBQTUNSQUlEX1JFU0VUX0RFVklDRSAgICAgICAgICAgICAgICAgICAgIDB4QzMKKy8qIG9wdGlvbnMgdG8gc2VsZWN0IHJlc2V0IHRhcmdldCAqLworI2RlZmluZSBFTkFCTEVfUkVTRVRfTU9ESUZJRVIgICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgUkVTRVRfREVWSUNFX0xVTiAgICAgICAgICAgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIFJFU0VUX0RFVklDRV9UQVJHRVQgICAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBSRVNFVF9ERVZJQ0VfQlVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKKworI2RlZmluZSBQTUNSQUlEX0lERU5USUZZX0hSUlEgICAgICAgICAgICAgICAgICAgIDB4QzQKKyNkZWZpbmUgUE1DUkFJRF9RVUVSWV9JT0FfQ09ORklHICAgICAgICAgICAgICAgICAweEM1CisjZGVmaW5lIFBNQ1JBSURfUVVFUllfQ01EX1NUQVRVUwkJIDB4Q0IKKyNkZWZpbmUgUE1DUkFJRF9BQk9SVF9DTUQgICAgICAgICAgICAgICAgICAgICAgICAweEM3CisKKy8qIENBTkNFTCBBTEwgY29tbWFuZCwgcHJvdmlkZXMgb3B0aW9uIGZvciBzZXR0aW5nIFNZTkNfQ09NUExFVEUKKyAqIG9uIHRoZSB0YXJnZXQgcmVzb3VyY2VzIGZvciB3aGljaCBjb21tYW5kcyBnb3QgY2FuY2VsbGVkCisgKi8KKyNkZWZpbmUgUE1DUkFJRF9DQU5DRUxfQUxMX1JFUVVFU1RTCQkgMHhDRQorI2RlZmluZSBQTUNSQUlEX1NZTkNfQ09NUExFVEVfQUZURVJfQ0FOQ0VMICAgICAgIFBNQ19CSVQ4KDApCisKKy8qIEhDQU0gY29tbWFuZCBhbmQgdHlwZXMgb2YgSENBTSBzdXBwb3J0ZWQgYnkgSU9BICovCisjZGVmaW5lIFBNQ1JBSURfSE9TVF9DT05UUk9MTEVEX0FTWU5DICAgICAgICAgICAgMHhDRgorI2RlZmluZSBQTUNSQUlEX0hDQU1fQ09ERV9DT05GSUdfQ0hBTkdFICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUE1DUkFJRF9IQ0FNX0NPREVfTE9HX0RBVEEgICAgICAgICAgICAgICAweDAyCisKKy8qIElPQSBzaHV0ZG93biBjb21tYW5kIGFuZCB2YXJpb3VzIHNodXRkb3duIHR5cGVzICovCisjZGVmaW5lIFBNQ1JBSURfSU9BX1NIVVRET1dOICAgICAgICAgICAgICAgICAgICAgMHhGNworI2RlZmluZSBQTUNSQUlEX1NIVVRET1dOX05PUk1BTCAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgUE1DUkFJRF9TSFVURE9XTl9QUkVQQVJFX0ZPUl9OT1JNQUwgICAgICAweDQwCisjZGVmaW5lIFBNQ1JBSURfU0hVVERPV05fTk9ORSAgICAgICAgICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgUE1DUkFJRF9TSFVURE9XTl9BQkJSRVYgICAgICAgICAgICAgICAgICAweDgwCisKKy8qIFNFVCBTVVBQT1JURUQgREVWSUNFUyBjb21tYW5kIGFuZCB0aGUgb3B0aW9uIHRvIHNlbGVjdCBhbGwgdGhlCisgKiBkZXZpY2VzIHRvIGJlIHN1cHBvcnRlZAorICovCisjZGVmaW5lIFBNQ1JBSURfU0VUX1NVUFBPUlRFRF9ERVZJQ0VTICAgICAgICAgICAgMHhGQgorI2RlZmluZSBBTExfREVWSUNFU19TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgIFBNQ19CSVQ4KDApCisKKy8qIFRoaXMgb3B0aW9uIGlzIHVzZWQgd2l0aCBTQ1NJIFdSSVRFX0JVRkZFUiBjb21tYW5kICovCisjZGVmaW5lIFBNQ1JBSURfV1JfQlVGX0RPV05MT0FEX0FORF9TQVZFICAgICAgICAgMHgwNQorCisvKiBJT0FTQyBDb2RlcyB1c2VkIGJ5IGRyaXZlciAqLworI2RlZmluZSBQTUNSQUlEX0lPQVNDX1NFTlNFX01BU0sgICAgICAgICAgICAgICAgIDB4RkZGRkZGMDAKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19TRU5TRV9LRVkoaW9hc2MpICAgICAgICAgICAoKGlvYXNjKSA+PiAyNCkKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19TRU5TRV9DT0RFKGlvYXNjKSAgICAgICAgICAoKChpb2FzYykgJiAweDAwZmYwMDAwKSA+PiAxNikKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19TRU5TRV9RVUFMKGlvYXNjKSAgICAgICAgICAoKChpb2FzYykgJiAweDAwMDBmZjAwKSA+PiA4KQorI2RlZmluZSBQTUNSQUlEX0lPQVNDX1NFTlNFX1NUQVRVUyhpb2FzYykgICAgICAgICgoaW9hc2MpICYgMHgwMDAwMDBmZikKKworI2RlZmluZSBQTUNSQUlEX0lPQVNDX0dPT0RfQ09NUExFVElPTgkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19OUl9JTklUX0NNRF9SRVFVSVJFRAkJMHgwMjA0MDIwMAorI2RlZmluZSBQTUNSQUlEX0lPQVNDX05SX0lPQV9SRVNFVF9SRVFVSVJFRAkJMHgwMjA0ODAwMAorI2RlZmluZSBQTUNSQUlEX0lPQVNDX05SX1NZTkNfUkVRVUlSRUQJCQkweDAyM0YwMDAwCisjZGVmaW5lIFBNQ1JBSURfSU9BU0NfTUVfUkVBRF9FUlJPUl9OT19SRUFMTE9DCQkweDAzMTEwQzAwCisjZGVmaW5lIFBNQ1JBSURfSU9BU0NfSFdfQ0FOTk9UX0NPTU1VTklDQVRFCQkweDA0MDUwMDAwCisjZGVmaW5lIFBNQ1JBSURfSU9BU0NfSFdfREVWSUNFX1RJTUVPVVQJCQkweDA0MDgwMTAwCisjZGVmaW5lIFBNQ1JBSURfSU9BU0NfSFdfREVWSUNFX0JVU19TVEFUVVNfRVJST1IJMHgwNDQ0ODUwMAorI2RlZmluZSBQTUNSQUlEX0lPQVNDX0hXX0lPQV9SRVNFVF9SRVFVSVJFRAkJMHgwNDQ0ODYwMAorI2RlZmluZSBQTUNSQUlEX0lPQVNDX0lSX0lOVkFMSURfUkVTT1VSQ0VfSEFORExFICAgICAgICAweDA1MjUwMDAwCisjZGVmaW5lIFBNQ1JBSURfSU9BU0NfQUNfVEVSTUlOQVRFRF9CWV9IT1NUCQkweDBCNUEwMDAwCisjZGVmaW5lIFBNQ1JBSURfSU9BU0NfVUFfQlVTX1dBU19SRVNFVCAgICAgICAgICAgCTB4MDYyOTAwMDAKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19VQV9CVVNfV0FTX1JFU0VUX0JZX09USEVSICAJMHgwNjI5ODAwMAorCisvKiBEcml2ZXIgZGVmaW5lZCBJT0FTQ3MgKi8KKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19JT0FfV0FTX1JFU0VUICAgICAgICAgICAgICAJMHgxMDAwMDAwMQorI2RlZmluZSBQTUNSQUlEX0lPQVNDX1BDSV9BQ0NFU1NfRVJST1IgICAgICAgICAgIAkweDEwMDAwMDAyCisKKy8qIFZhcmlvdXMgdGltZW91dCB2YWx1ZXMgKGluIG1pbGxpc2Vjb25kcykgdXNlZC4gSWYgYW55IG9mIHRoZXNlIGFyZSBjaGlwCisgKiBzcGVjaWZpYywgbW92ZSB0aGVtIHRvIHBtY3JhaWRfY2hpcF9kZXRhaWxzIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBQTUNSQUlEX1BDSV9ERUFTU0VSVF9USU1FT1VUCQkyMDAwCisjZGVmaW5lIFBNQ1JBSURfQklTVF9USU1FT1VUCQkJMjAwMAorI2RlZmluZSBQTUNSQUlEX0FFTldBSVRfVElNRU9VVAkJCTUwMDAKKyNkZWZpbmUgUE1DUkFJRF9UUkFOU09QX1RJTUVPVVQJCQk2MDAwMAorCisjZGVmaW5lIFBNQ1JBSURfUkVTRVRfVElNRU9VVAkJCSgyICogSFopCisjZGVmaW5lIFBNQ1JBSURfQ0hFQ0tfRk9SX1JFU0VUX1RJTUVPVVQJCSgoSFogLyAxMCkpCisjZGVmaW5lIFBNQ1JBSURfVlNFVF9JT19USU1FT1VUCQkJKDYwICogSFopCisjZGVmaW5lIFBNQ1JBSURfSU5URVJOQUxfVElNRU9VVAkJKDYwICogSFopCisjZGVmaW5lIFBNQ1JBSURfU0hVVERPV05fVElNRU9VVAkJKDE1MCAqIEhaKQorI2RlZmluZSBQTUNSQUlEX1JFU0VUX0JVU19USU1FT1VUCQkoNjAgKiBIWikKKyNkZWZpbmUgUE1DUkFJRF9SRVNFVF9IT1NUX1RJTUVPVVQJCSgxNTAgKiBIWikKKyNkZWZpbmUgUE1DUkFJRF9SRVFVRVNUX1NFTlNFX1RJTUVPVVQJCSgzMCAqIEhaKQorI2RlZmluZSBQTUNSQUlEX1NFVF9TVVBfREVWX1RJTUVPVVQJCSgyICogNjAgKiBIWikKKworLyogc3RydWN0dXJlIHRvIHJlcHJlc2VudCBhIHNjYXR0ZXItZ2F0aGVyIGVsZW1lbnQgKElPQURMIGRlc2NyaXB0b3IpICovCitzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjIHsKKwlfX2xlNjQgYWRkcmVzczsKKwlfX2xlMzIgZGF0YV9sZW47CisJX191OCAgcmVzZXJ2ZWRbM107CisJX191OCAgZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZChQTUNSQUlEX0lPQURMX0FMSUdOTUVOVCkpKTsKKworLyogcG1jcmFpZF9pb2FkbF9kZXNjLmZsYWdzIHZhbHVlcyAqLworI2RlZmluZSBJT0FETF9GTEFHU19DSEFJTkVEICAgICAgUE1DX0JJVDgoMCkKKyNkZWZpbmUgSU9BRExfRkxBR1NfTEFTVF9ERVNDICAgIFBNQ19CSVQ4KDEpCisjZGVmaW5lIElPQURMX0ZMQUdTX1JFQURfTEFTVCAgICBQTUNfQklUOCgxKQorI2RlZmluZSBJT0FETF9GTEFHU19XUklURV9MQVNUICAgUE1DX0JJVDgoMSkKKworCisvKiBhZGRpdGlvbmFsIElPQVJDQiBkYXRhIHdoaWNoIGNhbiBiZSBDREIgb3IgYWRkaXRpb25hbCByZXF1ZXN0IHBhcmFtZXRlcnMKKyAqIG9yIGxpc3Qgb2YgSU9BRExzLiBGaXJtd2FyZSBzdXBwb3J0cyBtYXggb2YgNTEyIGJ5dGVzIGZvciBJT0FSQ0IsIGhlbmNlIHRoZW4KKyAqIG51bWJlciBvZiBJT0FETHMgYXJlIGxpbXRlZCB0byAyNy4gSW4gY2FzZSB0aGV5IGFyZSBtb3JlIHRoYW4gMjcsIHRoZXkgd2lsbAorICogYmUgdXNlZCBpbiBjaGFpbmVkIGZvcm0KKyAqLworc3RydWN0IHBtY3JhaWRfaW9hcmNiX2FkZF9kYXRhIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBwbWNyYWlkX2lvYWRsX2Rlc2MgaW9hZGxbUE1DUkFJRF9JT0FETFNfSU5URVJOQUxdOworCQlfX3U4IGFkZF9jbWRfcGFyYW1zW1BNQ1JBSURfQUREX0NNRF9QQVJBTV9MRU5dOworCX0gdTsKK307CisKKy8qCisgKiBJT0EgUmVxdWVzdCBDb250cm9sIEJsb2NrCisgKi8KK3N0cnVjdCBwbWNyYWlkX2lvYXJjYiB7CisJX19sZTY0IGlvYXJjYl9idXNfYWRkcjsKKwlfX2xlMzIgcmVzb3VyY2VfaGFuZGxlOworCV9fbGUzMiByZXNwb25zZV9oYW5kbGU7CisJX19sZTY0IGlvYWRsX2J1c19hZGRyOworCV9fbGUzMiBpb2FkbF9sZW5ndGg7CisJX19sZTMyIGRhdGFfdHJhbnNmZXJfbGVuZ3RoOworCV9fbGU2NCBpb2FzYV9idXNfYWRkcjsKKwlfX2xlMTYgaW9hc2FfbGVuOworCV9fbGUxNiBjbWRfdGltZW91dDsKKwlfX2xlMTYgYWRkX2NtZF9wYXJhbV9vZmZzZXQ7CisJX19sZTE2IGFkZF9jbWRfcGFyYW1fbGVuZ3RoOworCV9fbGUzMiByZXNlcnZlZDFbMl07CisJX19sZTMyIHJlc2VydmVkMjsKKwlfX3U4ICByZXF1ZXN0X3R5cGU7CisJX191OCAgcmVxdWVzdF9mbGFnczA7CisJX191OCAgcmVxdWVzdF9mbGFnczE7CisJX191OCAgaHJycV9pZDsKKwlfX3U4ICBjZGJbUE1DUkFJRF9NQVhfQ0RCX0xFTl07CisJc3RydWN0IHBtY3JhaWRfaW9hcmNiX2FkZF9kYXRhIGFkZF9kYXRhOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoUE1DUkFJRF9JT0FSQ0JfQUxJR05NRU5UKSkpOworCisvKiB3ZWxsIGtub3duIHJlc291cmNlIGhhbmRsZSB2YWx1ZXMgKi8KKyNkZWZpbmUgUE1DUkFJRF9JT0FfUkVTX0hBTkRMRSAgICAgICAgMHhmZmZmZmZmZgorI2RlZmluZSBQTUNSQUlEX0lOVkFMSURfUkVTX0hBTkRMRSAgICAwCisKKy8qIHBtY3JhaWRfaW9hcmNiLnJlcXVlc3RfdHlwZSB2YWx1ZXMgKi8KKyNkZWZpbmUgUkVRX1RZUEVfU0NTSSAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBSRVFfVFlQRV9JT0FDTUQgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFJFUV9UWVBFX0hDQU0gICAgICAgICAgICAgICAgIDB4MDIKKworLyogcG1jcmFpZF9pb2FyY2IuZmxhZ3MwIHZhbHVlcyAqLworI2RlZmluZSBUUkFOU0ZFUl9ESVJfV1JJVEUgICAgICAgICAgICBQTUNfQklUOCgwKQorI2RlZmluZSBJTkhJQklUX1VMX0NIRUNLICAgICAgICAgICAgICBQTUNfQklUOCgyKQorI2RlZmluZSBTWU5DX09WRVJSSURFICAgICAgICAgICAgICAgICBQTUNfQklUOCgzKQorI2RlZmluZSBTWU5DX0NPTVBMRVRFICAgICAgICAgICAgICAgICBQTUNfQklUOCg0KQorI2RlZmluZSBOT19MSU5LX0RFU0NTICAgICAgICAgICAgICAgICBQTUNfQklUOCg1KQorCisvKiBwbWNyYWlkX2lvYXJjYi5mbGFnczEgdmFsdWVzICovCisjZGVmaW5lIERFTEFZX0FGVEVSX1JFU0VUICAgICAgICAgICAgIFBNQ19CSVQ4KDApCisjZGVmaW5lIFRBU0tfVEFHX1NJTVBMRSAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgVEFTS19UQUdfT1JERVJFRCAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBUQVNLX1RBR19RVUVVRV9IRUFEICAgICAgICAgICAweDMwCisKKy8qIHRvZ2dsZSBiaXQgb2Zmc2V0IGluIHJlc3BvbnNlIGhhbmRsZSAqLworI2RlZmluZSBIUlJRX1RPR0dMRV9CSVQgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEhSUlFfUkVTUE9OU0VfQklUICAgICAgICAgICAgIDB4MDIKKworLyogSU9BIFN0YXR1cyBBcmVhICovCitzdHJ1Y3QgcG1jcmFpZF9pb2FzYV92c2V0IHsKKwlfX2xlMzIgZmFpbGluZ19sYmFfaGk7CisJX19sZTMyIGZhaWxpbmdfbGJhX2xvOworCV9fbGUzMiByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7CisKK3N0cnVjdCBwbWNyYWlkX2lvYXNhIHsKKwlfX2xlMzIgaW9hc2M7CisJX19sZTE2IHJldHVybmVkX3N0YXR1c19sZW5ndGg7CisJX19sZTE2IGF2YWlsYWJsZV9zdGF0dXNfbGVuZ3RoOworCV9fbGUzMiByZXNpZHVhbF9kYXRhX2xlbmd0aDsKKwlfX2xlMzIgaWxpZDsKKwlfX2xlMzIgZmRfaW9hc2M7CisJX19sZTMyIGZkX3Jlc19hZGRyZXNzOworCV9fbGUzMiBmZF9yZXNfaGFuZGxlOworCV9fbGUzMiByZXNlcnZlZDsKKworCS8qIHJlc291cmNlIHNwZWNpZmljIHNlbnNlIGluZm9ybWF0aW9uICovCisJdW5pb24geworCQlzdHJ1Y3QgcG1jcmFpZF9pb2FzYV92c2V0IHZzZXQ7CisJfSB1OworCisJLyogSU9BIGF1dG9zZW5zZSBkYXRhICovCisJX19sZTE2IGF1dG9fc2Vuc2VfbGVuZ3RoOworCV9fbGUxNiBlcnJvcl9kYXRhX2xlbmd0aDsKKwlfX3U4ICBzZW5zZV9kYXRhW1BNQ1JBSURfU0VOU0VfREFUQV9MRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKKworI2RlZmluZSBQTUNSQUlEX0RSSVZFUl9JTElEICAgICAgICAgICAweGZmZmZmZmZmCisKKy8qIENvbmZpZyBUYWJsZSBFbnRyeSBwZXIgUmVzb3VyY2UgKi8KK3N0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeSB7CisJX191OCAgcmVzb3VyY2VfdHlwZTsKKwlfX3U4ICBidXNfcHJvdG9jb2w7CisJX19sZTE2IGFycmF5X2lkOworCV9fdTggIGNvbW1vbl9mbGFnczA7CisJX191OCAgY29tbW9uX2ZsYWdzMTsKKwlfX3U4ICB1bmlxdWVfZmxhZ3MwOworCV9fdTggIHVuaXF1ZV9mbGFnczE7CS8qYWxzbyB1c2VkIGFzIHZzZXQgdGFyZ2V0X2lkICovCisJX19sZTMyIHJlc291cmNlX2hhbmRsZTsKKwlfX2xlMzIgcmVzb3VyY2VfYWRkcmVzczsKKwlfX3U4ICBkZXZpY2VfaWRbUE1DUkFJRF9ERVZJQ0VfSURfTEVOXTsKKwlfX3U4ICBsdW5bUE1DUkFJRF9MVU5fTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7CisKKy8qIHJlc291cmNlIHR5cGVzIChjb25maWdfdGFibGVfZW50cnkucmVzb3VyY2VfdHlwZSB2YWx1ZXMpICovCisjZGVmaW5lIFJFU19UWVBFX0FGX0RBU0QgICAgIDB4MDAKKyNkZWZpbmUgUkVTX1RZUEVfR1NDU0kgICAgICAgMHgwMQorI2RlZmluZSBSRVNfVFlQRV9WU0VUICAgICAgICAweDAyCisjZGVmaW5lIFJFU19UWVBFX0lPQV9GUCAgICAgIDB4RkYKKworI2RlZmluZSBSRVNfSVNfSU9BKHJlcykgICAgICAoKHJlcykucmVzb3VyY2VfdHlwZSA9PSBSRVNfVFlQRV9JT0FfRlApCisjZGVmaW5lIFJFU19JU19HU0NTSShyZXMpICAgICgocmVzKS5yZXNvdXJjZV90eXBlID09IFJFU19UWVBFX0dTQ1NJKQorI2RlZmluZSBSRVNfSVNfVlNFVChyZXMpICAgICAoKHJlcykucmVzb3VyY2VfdHlwZSA9PSBSRVNfVFlQRV9WU0VUKQorI2RlZmluZSBSRVNfSVNfQUZEQVNEKHJlcykgICAoKHJlcykucmVzb3VyY2VfdHlwZSA9PSBSRVNfVFlQRV9BRl9EQVNEKQorCisvKiBidXNfcHJvdG9jb2wgdmFsdWVzIHVzZWQgYnkgZHJpdmVyICovCisjZGVmaW5lIFJFU19UWVBFX1ZFTkNMT1NVUkUgIDB4OAorCisvKiBjb25maWdfdGFibGVfZW50cnkuY29tbW9uX2ZsYWdzMCAqLworI2RlZmluZSBNVUxUSVBBVEhfUkVTT1VSQ0UgICBQTUNfQklUMzIoMCkKKworLyogdW5pcXVlX2ZsYWdzMSAqLworI2RlZmluZSBJTVBPUlRfTU9ERV9NQU5VQUwgICBQTUNfQklUOCgwKQorCisvKiB3ZWxsIGtub3duIHJlc291cmNlIGhhbmRsZSB2YWx1ZXMgKi8KKyNkZWZpbmUgUkVTX0hBTkRMRV9JT0EgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBSRVNfSEFORExFX05PTkUgICAgICAweDAwMDAwMDAwCisKKy8qIHdlbGwga25vd24gcmVzb3VyY2UgYWRkcmVzcyB2YWx1ZXMgKi8KKyNkZWZpbmUgUkVTX0FERFJFU1NfSU9BRlAgICAgMHhGRUZGRkZGRgorI2RlZmluZSBSRVNfQUREUkVTU19JTlZBTElEICAweEZGRkZGRkZGCisKKy8qIEJVUy9UQVJHRVQvTFVOIHZhbHVlcyBmcm9tIHJlc291cmNlX2FkZHJyICovCisjZGVmaW5lIFJFU19CVVMocmVzX2FkZHIpICAgIChsZTMyX3RvX2NwdShyZXNfYWRkcikgJiAweEZGKQorI2RlZmluZSBSRVNfVEFSR0VUKHJlc19hZGRyKSAoKGxlMzJfdG9fY3B1KHJlc19hZGRyKSA+PiAxNikgJiAweEZGKQorI2RlZmluZSBSRVNfTFVOKHJlc19hZGRyKSAgICAweDAKKworLyogY29uZmlndXJhdGlvbiB0YWJsZSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZSB7CisJX19sZTE2IG51bV9lbnRyaWVzOworCV9fdTggIHRhYmxlX2Zvcm1hdDsKKwlfX3U4ICByZXNlcnZlZDE7CisJX191OCAgZmxhZ3M7CisJX191OCAgcmVzZXJ2ZWQyWzExXTsKKwlzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGVfZW50cnkgZW50cmllc1tQTUNSQUlEX01BWF9SRVNPVVJDRVNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKKworLyogY29uZmlnX3RhYmxlLmZsYWdzIHZhbHVlICovCisjZGVmaW5lIE1JQ1JPQ09ERV9VUERBVEVfUkVRVUlSRUQJCVBNQ19CSVQzMigwKQorCisvKgorICogSENBTSBmb3JtYXQKKyAqLworI2RlZmluZSBQTUNSQUlEX0hPU1RSQ0JfTEROU0laRSAJCTQwNTYKKworLyogRXJyb3IgbG9nIG5vdGlmaWNhdGlvbiBmb3JtYXQgKi8KK3N0cnVjdCBwbWNyYWlkX2hvc3RyY2JfZXJyb3IgeworCV9fbGUzMiBmZF9pb2FzYzsKKwlfX2xlMzIgZmRfcmE7CisJX19sZTMyIGZkX3JoOworCV9fbGUzMiBwcmM7CisJdW5pb24geworCQlfX3U4IGRhdGFbUE1DUkFJRF9IT1NUUkNCX0xETlNJWkVdOworCX0gdTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCwgYWxpZ25lZCg0KSkpOworCitzdHJ1Y3QgcG1jcmFpZF9oY2FtX2hkciB7CisJX191OCAgb3BfY29kZTsKKwlfX3U4ICBub3RpZmljYXRpb25fdHlwZTsKKwlfX3U4ICBub3RpZmljYXRpb25fbG9zdDsKKwlfX3U4ICBmbGFnczsKKwlfX3U4ICBvdmVybGF5X2lkOworCV9fdTggIHJlc2VydmVkMVszXTsKKwlfX2xlMzIgaWxpZDsKKwlfX2xlMzIgdGltZXN0YW1wMTsKKwlfX2xlMzIgdGltZXN0YW1wMjsKKwlfX2xlMzIgZGF0YV9sZW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOworCisjZGVmaW5lIFBNQ1JBSURfQUVOX0dST1VQCTB4MworCitzdHJ1Y3QgcG1jcmFpZF9oY2FtX2NjbiB7CisJc3RydWN0IHBtY3JhaWRfaGNhbV9oZHIgaGVhZGVyOworCXN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeSBjZmdfZW50cnk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOworCitzdHJ1Y3QgcG1jcmFpZF9oY2FtX2xkbiB7CisJc3RydWN0IHBtY3JhaWRfaGNhbV9oZHIgaGVhZGVyOworCXN0cnVjdCBwbWNyYWlkX2hvc3RyY2JfZXJyb3IgZXJyb3JfbG9nOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKKworLyogcG1jcmFpZF9oY2FtLm9wX2NvZGUgdmFsdWVzICovCisjZGVmaW5lIEhPU1RSQ0JfVFlQRV9DQ04JCQkweEUxCisjZGVmaW5lIEhPU1RSQ0JfVFlQRV9MRE4JCQkweEUyCisKKy8qIHBtY3JhaWRfaGNhbS5ub3RpZmljYXRpb25fdHlwZSB2YWx1ZXMgKi8KKyNkZWZpbmUgTk9USUZJQ0FUSU9OX1RZUEVfRU5UUllfQ0hBTkdFRAkJMHgwCisjZGVmaW5lIE5PVElGSUNBVElPTl9UWVBFX0VOVFJZX05FVwkJMHgxCisjZGVmaW5lIE5PVElGSUNBVElPTl9UWVBFX0VOVFJZX0RFTEVURUQJCTB4MgorI2RlZmluZSBOT1RJRklDQVRJT05fVFlQRV9FUlJPUl9MT0cJCTB4MTAKKyNkZWZpbmUgTk9USUZJQ0FUSU9OX1RZUEVfSU5GT1JNQVRJT05fTE9HCTB4MTEKKworI2RlZmluZSBIT1NUUkNCX05PVElGSUNBVElPTlNfTE9TVAkJUE1DX0JJVDgoMCkKKworLyogcG1jcmFpZF9oY2FtLmZsYWdzIHZhbHVlcyAqLworI2RlZmluZSBIT1NUUkNCX0lOVEVSTkFMX09QX0VSUk9SCQlQTUNfQklUOCgwKQorI2RlZmluZSBIT1NUUkNCX0VSUk9SX1JFU1BPTlNFX1NFTlQJCVBNQ19CSVQ4KDEpCisKKy8qIHBtY3JhaWRfaGNhbS5vdmVybGF5X2lkIHZhbHVlcyAqLworI2RlZmluZSBIT1NUUkNCX09WRVJMQVlfSURfMDgJCQkweDA4CisjZGVmaW5lIEhPU1RSQ0JfT1ZFUkxBWV9JRF8wOQkJCTB4MDkKKyNkZWZpbmUgSE9TVFJDQl9PVkVSTEFZX0lEXzExCQkJMHgxMQorI2RlZmluZSBIT1NUUkNCX09WRVJMQVlfSURfMTIJCQkweDEyCisjZGVmaW5lIEhPU1RSQ0JfT1ZFUkxBWV9JRF8xMwkJCTB4MTMKKyNkZWZpbmUgSE9TVFJDQl9PVkVSTEFZX0lEXzE0CQkJMHgxNAorI2RlZmluZSBIT1NUUkNCX09WRVJMQVlfSURfMTYJCQkweDE2CisjZGVmaW5lIEhPU1RSQ0JfT1ZFUkxBWV9JRF8xNwkJCTB4MTcKKyNkZWZpbmUgSE9TVFJDQl9PVkVSTEFZX0lEXzIwCQkJMHgyMAorI2RlZmluZSBIT1NUUkNCX09WRVJMQVlfSURfRkYJCQkweEZGCisKKy8qIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIGNhcmQgZGV0YWlscyAqLworc3RydWN0IHBtY3JhaWRfY2hpcF9kZXRhaWxzIHsKKwkvKiBoYXJkd2FyZSByZWdpc3RlciBvZmZzZXRzICovCisJdW5zaWduZWQgbG9uZyAgaW9hc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgIGlvYXJyaW47CisJdW5zaWduZWQgbG9uZyAgbWFpbGJveDsKKwl1bnNpZ25lZCBsb25nICBnbG9iYWxfaW50cl9tYXNrOworCXVuc2lnbmVkIGxvbmcgIGlvYV9ob3N0X2ludHI7CisJdW5zaWduZWQgbG9uZyAgaW9hX2hvc3RfaW50cl9jbHI7CisJdW5zaWduZWQgbG9uZyAgaW9hX2hvc3RfbWFzazsKKwl1bnNpZ25lZCBsb25nICBpb2FfaG9zdF9tYXNrX2NscjsKKwl1bnNpZ25lZCBsb25nICBob3N0X2lvYV9pbnRyOworCXVuc2lnbmVkIGxvbmcgIGhvc3RfaW9hX2ludHJfY2xyOworCisJLyogdGltZW91dCB1c2VkIGR1cmluZyB0cmFuc2l0aW9uYWwgdG8gb3BlcmF0aW9uYWwgc3RhdGUgKi8KKwl1bnNpZ25lZCBsb25nIHRyYW5zb3BfdGltZW91dDsKK307CisKKy8qIElPQSB0byBIT1NUIGRvb3JiZWxscyAoaW50ZXJydXB0cykgKi8KKyNkZWZpbmUgSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTAkJUE1DX0JJVDMyKDApCisjZGVmaW5lIElOVFJTX0lPQVJDQl9UUkFOU0ZFUl9GQUlMRUQJCVBNQ19CSVQzMigzKQorI2RlZmluZSBJTlRSU19JT0FfVU5JVF9DSEVDSwkJCVBNQ19CSVQzMig0KQorI2RlZmluZSBJTlRSU19OT19IUlJRX0ZPUl9DTURfUkVTUE9OU0UJCVBNQ19CSVQzMig1KQorI2RlZmluZSBJTlRSU19DUklUSUNBTF9PUF9JTl9QUk9HUkVTUwkJUE1DX0JJVDMyKDYpCisjZGVmaW5lIElOVFJTX0lPX0RFQlVHX0FDSwkJCVBNQ19CSVQzMig3KQorI2RlZmluZSBJTlRSU19JT0FSUklOX0xPU1QJCQlQTUNfQklUMzIoMjcpCisjZGVmaW5lIElOVFJTX1NZU1RFTV9CVVNfTU1JT19FUlJPUgkJUE1DX0JJVDMyKDI4KQorI2RlZmluZSBJTlRSU19JT0FfUFJPQ0VTU09SX0VSUk9SCQlQTUNfQklUMzIoMjkpCisjZGVmaW5lIElOVFJTX0hSUlFfVkFMSUQJCQlQTUNfQklUMzIoMzApCisjZGVmaW5lIElOVFJTX09QRVJBVElPTkFMX1NUQVRVUwkJUE1DX0JJVDMyKDApCisKKy8qIEhvc3QgdG8gSU9BIERvb3JiZWxscyAqLworI2RlZmluZSBET09SQkVMTF9SVU5USU1FX1JFU0VUCQkJUE1DX0JJVDMyKDEpCisjZGVmaW5lIERPT1JCRUxMX0lPQV9SRVNFVF9BTEVSVAkJUE1DX0JJVDMyKDcpCisjZGVmaW5lIERPT1JCRUxMX0lPQV9ERUJVR19BTEVSVAkJUE1DX0JJVDMyKDkpCisjZGVmaW5lIERPT1JCRUxMX0VOQUJMRV9ERVNUUlVDVElWRV9ESUFHUwlQTUNfQklUMzIoOCkKKyNkZWZpbmUgRE9PUkJFTExfSU9BX1NUQVJUX0JJU1QJCQlQTUNfQklUMzIoMjMpCisjZGVmaW5lIERPT1JCRUxMX1JFU0VUX0lPQQkJCVBNQ19CSVQzMigzMSkKKworLyogR2xvYmFsIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyIHZhbHVlICovCisjZGVmaW5lIEdMT0JBTF9JTlRFUlJVUFRfTUFTSwkJCTB4NFVMTAorCisjZGVmaW5lIFBNQ1JBSURfRVJST1JfSU5URVJSVVBUUwkoSU5UUlNfSU9BUkNCX1RSQU5TRkVSX0ZBSUxFRCB8IFwKKwkJCQkJIElOVFJTX0lPQV9VTklUX0NIRUNLIHwgXAorCQkJCQkgSU5UUlNfTk9fSFJSUV9GT1JfQ01EX1JFU1BPTlNFIHwgXAorCQkJCQkgSU5UUlNfSU9BUlJJTl9MT1NUIHwgXAorCQkJCQkgSU5UUlNfU1lTVEVNX0JVU19NTUlPX0VSUk9SIHwgXAorCQkJCQkgSU5UUlNfSU9BX1BST0NFU1NPUl9FUlJPUikKKworI2RlZmluZSBQTUNSQUlEX1BDSV9JTlRFUlJVUFRTCQkoUE1DUkFJRF9FUlJPUl9JTlRFUlJVUFRTIHwgXAorCQkJCQkgSU5UUlNfSFJSUV9WQUxJRCB8IFwKKwkJCQkJIElOVFJTX0NSSVRJQ0FMX09QX0lOX1BST0dSRVNTIHxcCisJCQkJCSBJTlRSU19UUkFOU0lUSU9OX1RPX09QRVJBVElPTkFMKQorCisvKiBjb250cm9sX2Jsb2NrLCBhc3NvY2lhdGVkIHdpdGggZWFjaCBvZiB0aGUgY29tbWFuZHMgY29udGFpbnMgSU9BUkNCLCBJT0FETHMKKyAqIG1lbW9yeSBmb3IgSU9BU0EuIEFkZGl0aW9uYWwgMyAqIDE2IGJ5dGVzIGFyZSBhbGxvY2F0ZWQgaW4gb3JkZXIgdG8gc3VwcG9ydAorICogYWRkaXRpb25hbCByZXF1ZXN0IHBhcmFtZXRlcnMgKG9mIG1heCBzaXplIDQ4KSBhbnkgY29tbWFuZC4KKyAqLworc3RydWN0IHBtY3JhaWRfY29udHJvbF9ibG9jayB7CisJc3RydWN0IHBtY3JhaWRfaW9hcmNiIGlvYXJjYjsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjIGlvYWRsW1BNQ1JBSURfSU9BRExTX0VYVEVSTkFMICsgM107CisJc3RydWN0IHBtY3JhaWRfaW9hc2EgaW9hc2E7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsIGFsaWduZWQoUE1DUkFJRF9JT0FSQ0JfQUxJR05NRU5UKSkpOworCisvKiBwbWNyYWlkX3NnbGlzdCAtIFNjYXR0ZXItZ2F0aGVyIGxpc3QgYWxsb2NhdGVkIGZvciBwYXNzdGhyb3VnaCBpb2N0bHMKKyAqLworc3RydWN0IHBtY3JhaWRfc2dsaXN0IHsKKwl1MzIgb3JkZXI7CisJdTMyIG51bV9zZzsKKwl1MzIgbnVtX2RtYV9zZzsKKwl1MzIgYnVmZmVyX2xlbjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2NhdHRlcmxpc3RbMV07Cit9OworCisvKiBwbWNyYWlkX2NtZCAtIExMRCByZXByZXNlbnRhdGlvbiBvZiBTQ1NJIGNvbW1hbmQgKi8KK3N0cnVjdCBwbWNyYWlkX2NtZCB7CisKKwkvKiBQdHIgYW5kIGJ1cyBhZGRyZXNzIG9mIERNQS5hYmxlIGNvbnRyb2wgYmxvY2sgZm9yIHRoaXMgY29tbWFuZCAqLworCXN0cnVjdCBwbWNyYWlkX2NvbnRyb2xfYmxvY2sgKmlvYV9jYjsKKwlkbWFfYWRkcl90IGlvYV9jYl9idXNfYWRkcjsKKworCS8qIHNlbnNlIGJ1ZmZlciBmb3IgUkVRVUVTVCBTRU5TRSBjb21tYW5kIGlmIGZpcm13YXJlIGlzIG5vdCBzZW5kaW5nCisJICogYXV0byBzZW5zZSBkYXRhCisJICovCisJZG1hX2FkZHJfdCBzZW5zZV9idWZmZXJfZG1hOworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwl1OCAqc2Vuc2VfYnVmZmVyOworCisJLyogcG9pbnRlciB0byBtaWQgbGF5ZXIgc3RydWN0dXJlIG9mIFNDU0kgY29tbWFuZHMgKi8KKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtZDsKKworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OworCXN0cnVjdCBjb21wbGV0aW9uIHdhaXRfZm9yX2NvbXBsZXRpb247CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CS8qIG5lZWRlZCBmb3IgaW50ZXJuYWwgY29tbWFuZHMgKi8KKwl1MzIgdGltZW91dDsJCQkvKiBjdXJyZW50IHRpbWVvdXQgdmFsdWUgKi8KKwl1MzIgaW5kZXg7CQkJLyogaW5kZXggaW50byB0aGUgY29tbWFuZCBsaXN0ICovCisJdTggY29tcGxldGlvbl9yZXE7CQkvKiBmb3IgaGFuZGxpbmcgaW50ZXJuYWwgY29tbWFuZHMgKi8KKwl1OCByZWxlYXNlOwkJCS8qIGZvciBoYW5kbGluZyBjb21wbGV0aW9ucyAqLworCisJdm9pZCAoKmNtZF9kb25lKSAoc3RydWN0IHBtY3JhaWRfY21kICopOworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpkcnZfaW5zdDsKKworCXN0cnVjdCBwbWNyYWlkX3NnbGlzdCAqc2dsaXN0OyAvKiB1c2VkIGZvciBwYXNzdGhyb3VnaCBJT0NUTHMgKi8KKworCS8qIHNjcmF0Y2ggdXNlZCBkdXJpbmcgcmVzZXQgc2VxdWVuY2UgKi8KKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcgdGltZV9sZWZ0OworCQlzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqcmVzOworCX0gdTsKK307CisKKy8qCisgKiBJbnRlcnJ1cHQgcmVnaXN0ZXJzIG9mIElPQQorICovCitzdHJ1Y3QgcG1jcmFpZF9pbnRlcnJ1cHRzIHsKKwl2b2lkIF9faW9tZW0gKmlvYV9ob3N0X2ludGVycnVwdF9yZWc7CisJdm9pZCBfX2lvbWVtICppb2FfaG9zdF9pbnRlcnJ1cHRfY2xyX3JlZzsKKwl2b2lkIF9faW9tZW0gKmlvYV9ob3N0X2ludGVycnVwdF9tYXNrX3JlZzsKKwl2b2lkIF9faW9tZW0gKmlvYV9ob3N0X2ludGVycnVwdF9tYXNrX2Nscl9yZWc7CisJdm9pZCBfX2lvbWVtICpnbG9iYWxfaW50ZXJydXB0X21hc2tfcmVnOworCXZvaWQgX19pb21lbSAqaG9zdF9pb2FfaW50ZXJydXB0X3JlZzsKKwl2b2lkIF9faW9tZW0gKmhvc3RfaW9hX2ludGVycnVwdF9jbHJfcmVnOworfTsKKworLyogSVNSIHBhcmFtZXRlcnMgTExEIGFsbG9jYXRlcyAob25lIGZvciBlYWNoIE1TSS1YIGlmIGVuYWJsZWQpIHZlY3RvcnMgKi8KK3N0cnVjdCBwbWNyYWlkX2lzcl9wYXJhbSB7CisJdTggaHJycV9pZDsJCQkvKiBocnJxIGVudHJ5IGluZGV4ICovCisJdTE2IHZlY3RvcjsJCQkvKiBhbGxvY2F0ZWQgbXNpLXggdmVjdG9yICovCisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKmRydl9pbnN0OworfTsKKworLyogQUVOIG1lc3NhZ2UgaGVhZGVyIHNlbnQgYXMgcGFydCBvZiBldmVudCBkYXRhIHRvIGFwcGxpY2F0aW9ucyAqLworc3RydWN0IHBtY3JhaWRfYWVuX21zZyB7CisJdTMyIGhvc3RubzsKKwl1MzIgbGVuZ3RoOworCXU4ICByZXNlcnZlZFs4XTsKKwl1OCAgZGF0YVswXTsKK307CisKK3N0cnVjdCBwbWNyYWlkX2hvc3RyY2IgeworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpkcnZfaW5zdDsKKwlzdHJ1Y3QgcG1jcmFpZF9hZW5fbXNnICptc2c7CisJc3RydWN0IHBtY3JhaWRfaGNhbV9oZHIgKmhjYW07CS8qIHBvaW50ZXIgdG8gaGNhbSBidWZmZXIgKi8KKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgICpjbWQ7ICAgICAgIC8qIHBvaW50ZXIgdG8gY29tbWFuZCBibG9jayB1c2VkICovCisJZG1hX2FkZHJfdCBiYWRkcjsJCS8qIHN5c3RlbSBhZGRyZXNzIG9mIGhjYW0gYnVmZmVyICovCisJYXRvbWljX3QgaWdub3JlOwkJLyogcHJvY2VzcyBIQ0FNIHJlc3BvbnNlID8gKi8KK307CisKKyNkZWZpbmUgUE1DUkFJRF9BRU5fSERSX1NJWkUJc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2Flbl9tc2cpCisKKworCisvKgorICogUGVyIGFkYXB0ZXIgc3RydWN0dXJlIG1haW50YWluZWQgYnkgTExECisgKi8KK3N0cnVjdCBwbWNyYWlkX2luc3RhbmNlIHsKKwkvKiBBcnJheSBvZiBhbGxvd2VkLXRvLWJlLWV4cG9zZWQgcmVzb3VyY2VzLCBpbml0aWFsaXplZCBmcm9tCisJICogQ29uZmlndXRhdGlvbiBUYWJsZSwgbGF0ZXIgdXBkYXRlZCB3aXRoIENDTnMKKwkgKi8KKwlzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqcmVzX2VudHJpZXM7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfcmVzX3E7CS8qIHJlc19lbnRyaWVzIGxpc3RzIGZvciBlYXN5IGxvb2t1cCAqLworCXN0cnVjdCBsaXN0X2hlYWQgdXNlZF9yZXNfcTsJLyogTGlzdCBvZiB0byBiZSBleHBvc2VkIHJlc291cmNlcyAqLworCXNwaW5sb2NrX3QgcmVzb3VyY2VfbG9jazsJLyogc3BpbmxvY2sgdG8gcHJvdGVjdCByZXNvdXJjZSBsaXN0ICovCisKKwl2b2lkIF9faW9tZW0gKm1hcHBlZF9kbWFfYWRkcjsKKwl2b2lkIF9faW9tZW0gKmlvYV9zdGF0dXM7CS8qIElvbWFwcGVkIElPQSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwl2b2lkIF9faW9tZW0gKm1haWxib3g7CQkvKiBJb21hcHBlZCBtYWlsYm94IHJlZ2lzdGVyICovCisJdm9pZCBfX2lvbWVtICppb2FycmluOwkJLyogSU9tYXBwZWQgSU9BUlIgSU4gcmVnaXN0ZXIgKi8KKworCXN0cnVjdCBwbWNyYWlkX2ludGVycnVwdHMgaW50X3JlZ3M7CisJc3RydWN0IHBtY3JhaWRfY2hpcF9kZXRhaWxzICpjaGlwX2NmZzsKKworCS8qIEhvc3RSQ0JzIG5lZWRlZCBmb3IgSENBTSAqLworCXN0cnVjdCBwbWNyYWlkX2hvc3RyY2IgbGRuOworCXN0cnVjdCBwbWNyYWlkX2hvc3RyY2IgY2NuOworCisKKwkvKiBCdXMgYWRkcmVzcyBvZiBzdGFydCBvZiBIUlJRICovCisJZG1hX2FkZHJfdCBocnJxX3N0YXJ0X2J1c19hZGRyW1BNQ1JBSURfTlVNX01TSVhfVkVDVE9SU107CisKKwkvKiBQb2ludGVyIHRvIDFzdCBlbnRyeSBvZiBIUlJRICovCisJX19iZTMyICpocnJxX3N0YXJ0W1BNQ1JBSURfTlVNX01TSVhfVkVDVE9SU107CisKKwkvKiBQb2ludGVyIHRvIGxhc3QgZW50cnkgb2YgSFJSUSAqLworCV9fYmUzMiAqaHJycV9lbmRbUE1DUkFJRF9OVU1fTVNJWF9WRUNUT1JTXTsKKworCS8qIFBvaW50ZXIgdG8gY3VycmVudCBwb2ludGVyIG9mIGhycnEgKi8KKwlfX2JlMzIgKmhycnFfY3VycltQTUNSQUlEX05VTV9NU0lYX1ZFQ1RPUlNdOworCisJLyogTG9jayBmb3IgSFJSUSBhY2Nlc3MgKi8KKwlzcGlubG9ja190IGhycnFfbG9ja1tQTUNSQUlEX05VTV9NU0lYX1ZFQ1RPUlNdOworCisJLyogRXhwZWN0ZWQgdG9nZ2xlIGJpdCBhdCBob3N0ICovCisJdTggaG9zdF90b2dnbGVfYml0W1BNQ1JBSURfTlVNX01TSVhfVkVDVE9SU107CisKKwkvKiBObyBvZiBSZXNldCBJT0EgcmV0cmllcyAuIElPQSBtYXJrZWQgZGVhZCBpZiB0aHJlc2hvbGQgZXhjZWVkcyAqLworCXU4IGlvYV9yZXNldF9hdHRlbXB0czsKKyNkZWZpbmUgUE1DUkFJRF9SRVNFVF9BVFRFTVBUUyAzCisKKwkvKiBXYWl0IFEgZm9yICB0aHJlYWRzIHRvIHdhaXQgZm9yIFJlc2V0IElPQSBjb21wbGV0aW9uICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzZXRfd2FpdF9xOworCXN0cnVjdCBwbWNyYWlkX2NtZCAqcmVzZXRfY21kOworCisJLyogc3RydWN0dXJlcyBmb3Igc3VwcG9ydGluZyBTSUdJTyBiYXNlZCBBRU4uICovCisJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmFlbl9xdWV1ZTsKKwlzdHJ1Y3QgbXV0ZXggYWVuX3F1ZXVlX2xvY2s7CS8qIGxvY2sgZm9yIGFlbiBzdWJzY3JpYmVycyBsaXN0ICovCisJc3RydWN0IGNkZXYgY2RldjsKKworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CS8qIG1pZCBsYXllciBpbnRlcmZhY2Ugc3RydWN0dXJlIGhhbmRsZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwkvKiBQQ0kgZGV2aWNlIHN0cnVjdHVyZSBoYW5kbGUgKi8KKworCXU4ICBjdXJyZW50X2xvZ19sZXZlbDsJLyogZGVmYXVsdCBsZXZlbCBmb3IgbG9nZ2luZyBJT0FTQyBlcnJvcnMgKi8KKworCXU4ICBudW1faHJycTsJCS8qIE51bWJlciBvZiBpbnRlcnJ1cHQgdmVjdG9ycyBhbGxvY2F0ZWQgKi8KKwlkZXZfdCBkZXY7CQkvKiBNYWpvci1NaW5vciBudW1iZXJzIGZvciBDaGFyIGRldmljZSAqLworCisJLyogVXNlZCBhcyBJU1IgaGFuZGxlciBhcmd1bWVudCAqLworCXN0cnVjdCBwbWNyYWlkX2lzcl9wYXJhbSBocnJxX3ZlY3RvcltQTUNSQUlEX05VTV9NU0lYX1ZFQ1RPUlNdOworCisJLyogY29uZmlndXJhdGlvbiB0YWJsZSAqLworCXN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZSAqY2ZnX3RhYmxlOworCWRtYV9hZGRyX3QgY2ZnX3RhYmxlX2J1c19hZGRyOworCisJLyogc3RydWN0dXJlcyByZWxhdGVkIHRvIGNvbW1hbmQgYmxvY2tzICovCisJc3RydWN0IGttZW1fY2FjaGUgKmNtZF9jYWNoZXA7CQkvKiBjYWNoZSBmb3IgY21kIGJsb2NrcyAqLworCXN0cnVjdCBwY2lfcG9vbCAqY29udHJvbF9wb29sOwkJLyogcG9vbCBmb3IgY29udHJvbCBibG9ja3MgKi8KKwljaGFyICAgY21kX3Bvb2xfbmFtZVs2NF07CQkvKiBuYW1lIG9mIGNtZCBjYWNoZSAqLworCWNoYXIgICBjdGxfcG9vbF9uYW1lWzY0XTsJCS8qIG5hbWUgb2YgY29udHJvbCBjYWNoZSAqLworCisJc3RydWN0IHBtY3JhaWRfY21kICpjbWRfbGlzdFtQTUNSQUlEX01BWF9DTURdOworCisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2NtZF9wb29sOworCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19jbWRfcG9vbDsKKwlzcGlubG9ja190IGZyZWVfcG9vbF9sb2NrOwkgCS8qIGZyZWUgcG9vbCBsb2NrICovCisJc3BpbmxvY2tfdCBwZW5kaW5nX3Bvb2xfbG9jazsJIAkvKiBwZW5kaW5nIHBvb2wgbG9jayAqLworCisJLyogTm8gb2YgSU8gY29tbWFuZHMgcGVuZGluZyB3aXRoIEZXICovCisJYXRvbWljX3Qgb3V0c3RhbmRpbmdfY21kczsKKworCS8qIHNob3VsZCBhZGQvZGVsZXRlIHJlc291cmNlcyB0byBtaWQtbGF5ZXIgbm93ID8qLworCWF0b21pY190IGV4cG9zZV9yZXNvdXJjZXM7CisKKwkvKiBUYXNrbGV0IHRvIGhhbmRsZSBkZWZlcnJlZCBwcm9jZXNzaW5nICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGlzcl90YXNrbGV0W1BNQ1JBSURfTlVNX01TSVhfVkVDVE9SU107CisKKwkvKiBXb3JrLXF1ZXVlIChTaGFyZWQpIGZvciBkZWZlcnJlZCByZXNldCBwcm9jZXNzaW5nICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtlcl9xOworCisKKwl1MzIgaW9hX3N0YXRlOjQ7CS8qIEZvciBJT0EgUmVzZXQgc2VxdWVuY2UgRlNNICovCisjZGVmaW5lIElPQV9TVEFURV9PUEVSQVRJT05BTCAgICAgICAweDAKKyNkZWZpbmUgSU9BX1NUQVRFX1VOS05PV04gICAgICAgICAgIDB4MQorI2RlZmluZSBJT0FfU1RBVEVfREVBRCAgICAgICAgICAgICAgMHgyCisjZGVmaW5lIElPQV9TVEFURV9JTl9TT0ZUX1JFU0VUICAgICAweDMKKyNkZWZpbmUgSU9BX1NUQVRFX0lOX0hBUkRfUkVTRVQgICAgIDB4NAorI2RlZmluZSBJT0FfU1RBVEVfSU5fUkVTRVRfQUxFUlQgICAgMHg1CisjZGVmaW5lIElPQV9TVEFURV9JTl9CUklOR0RPV04gICAgICAweDYKKyNkZWZpbmUgSU9BX1NUQVRFX0lOX0JSSU5HVVAgICAgICAgIDB4NworCisJdTMyIGlvYV9yZXNldF9pbl9wcm9ncmVzczoxOyAvKiB0cnVlIGlmIElPQSByZXNldCBpcyBpbiBwcm9ncmVzcyAqLworCXUzMiBpb2FfaGFyZF9yZXNldDoxOwkvKiBUUlVFIGlmIEhhcmQgUmVzZXQgaXMgbmVlZGVkICovCisJdTMyIGlvYV91bml0X2NoZWNrOjE7CS8qIEluZGljYXRlcyBVbml0IENoZWNrIGNvbmRpdGlvbiAqLworCXUzMiBpb2FfYnJpbmdkb3duOjE7CS8qIHdoZXRoZXIgSU9BIG5lZWRzIHRvIGJlIGJyb3VnaHQgZG93biAqLworCXUzMiBmb3JjZV9pb2FfcmVzZXQ6MTsgIC8qIGZvcmNlIGFkYXB0ZXIgcmVzZXQgPyAqLworCXUzMiByZWluaXRfY2ZnX3RhYmxlOjE7IC8qIHJlaW5pdCBjb25maWcgdGFibGUgZHVlIHRvIGxvc3QgQ0NOICovCisJdTMyIGlvYV9zaHV0ZG93bl90eXBlOjI7Lyogc2h1dGRvd24gdHlwZSB1c2VkIGR1cmluZyByZXNldCAqLworI2RlZmluZSBTSFVURE9XTl9OT05FICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIFNIVVRET1dOX05PUk1BTCAgICAgICAgICAgICAweDEKKyNkZWZpbmUgU0hVVERPV05fQUJCUkVWICAgICAgICAgICAgIDB4MgorCit9OworCisvKiBMTEQgbWFpbnRhaW5lZCByZXNvdXJjZSBlbnRyeSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlOwkvKiBsaW5rIHRvICJ0byBiZSBleHBvc2VkIiByZXNvdXJjZXMgKi8KKwlzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGVfZW50cnkgY2ZnX2VudHJ5OworCXN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXY7CS8qIExpbmsgc2NzaV9kZXZpY2Ugc3RydWN0dXJlICovCisJYXRvbWljX3QgcmVhZF9mYWlsdXJlczsJCS8qIGNvdW50IG9mIGZhaWxlZCBSRUFEIGNvbW1hbmRzICovCisJYXRvbWljX3Qgd3JpdGVfZmFpbHVyZXM7CS8qIGNvdW50IG9mIGZhaWxlZCBXUklURSBjb21tYW5kcyAqLworCisJLyogVG8gaW5kaWNhdGUgYWRkL2RlbGV0ZS9tb2RpZnkgZHVyaW5nIENDTiAqLworCXU4IGNoYW5nZV9kZXRlY3RlZDsKKyNkZWZpbmUgUkVTX0NIQU5HRV9BREQgICAgICAgICAgMHgxCS8qIGFkZCB0aGlzIHRvIG1pZC1sYXllciAqLworI2RlZmluZSBSRVNfQ0hBTkdFX0RFTCAgICAgICAgICAweDIJLyogcmVtb3ZlIHRoaXMgZnJvbSBtaWQtbGF5ZXIgKi8KKworCXU4IHJlc2V0X3Byb2dyZXNzOyAgICAgIC8qIERldmljZSBpcyByZXNldHRpbmcgKi8KKworCS8qCisJICogV2hlbiBJT0EgYXNrcyBmb3Igc3luYyAoaS5lLiBJT0FTQyA9IE5vdCBSZWFkeSwgU3luYyBSZXF1aXJlZCksIHRoaXMKKwkgKiBmbGFnIHdpbGwgYmUgc2V0LCBtaWQgbGF5ZXIgd2lsbCBiZSBhc2tlZCB0byByZXRyeS4gSW4gdGhlIG5leHQKKwkgKiBhdHRlbXB0LCB0aGlzIGZsYWcgd2lsbCBiZSBjaGVja2VkIGluIHF1ZXVlY29tbWFuZCgpIHRvIHNldAorCSAqIFNZTkNfQ09NUExFVEUgZmxhZyBpbiBJT0FSQ0IgKGZsYWdfMCkuCisJICovCisJdTggc3luY19yZXFkOworCisJLyogdGFyZ2V0IGluZGljYXRlcyB0aGUgbWFwcGVkIHRhcmdldF9pZCBhc3NpZ25lZCB0byB0aGlzIHJlc291cmNlIGlmCisJICogdGhpcyBpcyBWU0VUIHJlc291cmNlLiBGb3Igbm9uLVZTRVQgcmVzb3VyY2VzIHRoaXMgd2lsbCBiZSB1bi11c2VkCisJICogb3IgemVybworCSAqLworCXU4IHRhcmdldDsKK307CisKKy8qIERhdGEgc3RydWN0dXJlcyB1c2VkIGluIElPQVNDIGVycm9yIGNvZGUgbG9nZ2luZyAqLworc3RydWN0IHBtY3JhaWRfaW9hc2NfZXJyb3IgeworCXUzMiBpb2FzY19jb2RlOwkJLyogSU9BU0MgY29kZSAqLworCXU4IGxvZ19sZXZlbDsJCS8qIGRlZmF1bHQgbG9nIGxldmVsIGFzc2lnbm1lbnQuICovCisJY2hhciAqZXJyb3Jfc3RyaW5nOworfTsKKworLyogSW5pdGlhbCBsb2dfbGV2ZWwgYXNzaWdubWVudHMgZm9yIHZhcmlvdXMgSU9BU0NzICovCisjZGVmaW5lIElPQVNDX0xPR19MRVZFTF9OT05FCSAgICAweDAgLyogbm8gbG9nZ2luZyAqLworI2RlZmluZSBJT0FTQ19MT0dfTEVWRUxfTVVTVCAgICAgICAgMHgxCS8qIG11c3QgbG9nOiBhbGwgaGlnaC1zZXZlcml0eSBlcnJvcnMgKi8KKyNkZWZpbmUgSU9BU0NfTE9HX0xFVkVMX0hBUkQgICAgICAgIDB4MgkvKiBvcHRpb25hbCDigJMgbG93IHNldmVyaXR5IGVycm9ycyAqLworCisvKiBFcnJvciBpbmZvcm1hdGlvbiBtYWludGFpbmVkIGJ5IExMRC4gTExEIGluaXRpYWxpemVzIHRoZSBwbWNyYWlkX2Vycm9yX3RhYmxlCisgKiBzdGF0aWNhbGx5LgorICovCitzdGF0aWMgc3RydWN0IHBtY3JhaWRfaW9hc2NfZXJyb3IgcG1jcmFpZF9pb2FzY19lcnJvcl90YWJsZVtdID0geworCXsweDAxMTgwNjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIlJlY292ZXJlZCBFcnJvciwgc29mdCBtZWRpYSBlcnJvciwgc2VjdG9yIHJlYXNzaWdubWVudCBzdWdnZXN0ZWQifSwKKwl7MHgwMTVEMDAwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJSZWNvdmVyZWQgRXJyb3IsIGZhaWx1cmUgcHJlZGljdGlvbiB0aHJlc29sZCBleGNlZWRlZCJ9LAorCXsweDAxNUQ5MjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIlJlY292ZXJlZCBFcnJvciwgc29mdCBDYWNoZSBDYXJkIEJhdHRlcnkgZXJyb3IgdGhyZXNvbGQifSwKKwl7MHgwMTVEOTIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJSZWNvdmVyZWQgRXJyb3IsIHNvZnQgQ2FjaGUgQ2FyZCBCYXR0ZXJ5IGVycm9yIHRocmVzb2xkIn0sCisJezB4MDIwNDgwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiTm90IFJlYWR5LCBJT0EgUmVzZXQgUmVxdWlyZWQifSwKKwl7MHgwMjQwODUwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJOb3QgUmVhZHksIElPQSBtaWNyb2NvZGUgZG93bmxvYWQgcmVxdWlyZWQifSwKKwl7MHgwMzExMEIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJNZWRpdW0gRXJyb3IsIGRhdGEgdW5yZWFkYWJsZSwgcmVhc3NpZ25tZW50IHN1Z2dlc3RlZCJ9LAorCXsweDAzMTEwQzAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIk1lZGl1bSBFcnJvciwgZGF0YSB1bnJlYWRhYmxlIGRvIG5vdCByZWFzc2lnbiJ9LAorCXsweDAzMzEwMDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIk1lZGl1bSBFcnJvciwgbWVkaWEgY29ycnVwdGVkIn0sCisJezB4MDQwNTAwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIElPQSBjYW4ndCBjb21tdW5pY2F0ZSB3aXRoIGRldmljZSJ9LAorCXsweDA0MDgwMDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBkZXZpY2UgYnVzIGVycm9yIn0sCisJezB4MDQwODAwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIGRldmljZSBidXMgaXMgbm90IGZ1bmN0aW9uaW5nIn0sCisJezB4MDQxMTgwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIElPQSByZXNlcnZlZCBhcmVhIGRhdGEgY2hlY2sifSwKKwl7MHgwNDExODEwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgSU9BIHJlc2VydmVkIGFyZWEgaW52YWxpZCBkYXRhIHBhdHRlcm4ifSwKKwl7MHgwNDExODIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgSU9BIHJlc2VydmVkIGFyZWEgTFJDIGVycm9yIn0sCisJezB4MDQzMjAwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIHJlYXNzaWdubWVudCBzcGFjZSBleGhhdXN0ZWQifSwKKwl7MHgwNDMzMDAwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgZGF0YSB0cmFuc2ZlciB1bmRlcmxlbmd0aCBlcnJvciJ9LAorCXsweDA0MzMwMDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBkYXRhIHRyYW5zZmVyIG92ZXJsZW5ndGggZXJyb3IifSwKKwl7MHgwNDQxODAwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgUENJIGJ1cyBlcnJvciJ9LAorCXsweDA0NDQwMDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBkZXZpY2UgZXJyb3IifSwKKwl7MHgwNDQ0ODMwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgdW5kZWZpbmVkIGRldmljZSByZXNwb25zZSJ9LAorCXsweDA0NDQ4NDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBJT0EgbWljcm9jb2RlIGVycm9yIn0sCisJezB4MDQ0NDg2MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIElPQSByZXNldCByZXF1aXJlZCJ9LAorCXsweDA0NDQ5MjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBoYXJkIENhY2hlIEZlYXJ1ZWUgQ2FyZCBCYXR0ZXJ5IGVycm9yIn0sCisJezB4MDQ0NEEwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIGZhaWxlZCBkZXZpY2UgYWx0ZXJlZCJ9LAorCXsweDA0NDRBMjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBkYXRhIGNoZWNrIGFmdGVyIHJlYXNzaWdubWVudCJ9LAorCXsweDA0NDRBMzAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBMUkMgZXJyb3IgYWZ0ZXIgcmVhc3NpZ25tZW50In0sCisJezB4MDQ0QTAwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIGRldmljZSBidXMgZXJyb3IgKG1zZy9jbWQgcGhhc2UpIn0sCisJezB4MDQ2NzA0MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIG5ldyBkZXZpY2UgY2FuJ3QgYmUgdXNlZCJ9LAorCXsweDA0Njc4MDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBpbnZhbGlkIG11bHRpYWRhcHRlciBjb25maWd1cmF0aW9uIn0sCisJezB4MDQ2NzgxMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIGluY29ycmVjdCBjb25uZWN0aW9uIGJldHdlZW4gZW5jbG9zdXJlcyJ9LAorCXsweDA0Njc4MjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBjb25uZWN0aW9ucyBleGNlZWQgSU9BIGRlc2lnbiBsaW1pdHMifSwKKwl7MHgwNDY3ODMwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgaW5jb3JyZWN0IG11bHRpcGF0aCBjb25uZWN0aW9uIn0sCisJezB4MDQ2NzkwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIGNvbW1hbmQgdG8gTFVOIGZhaWxlZCJ9LAorCXsweDA2NEM4MDAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKKwkgIlVuaXQgQXR0ZW50aW9uLCBjYWNoZSBleGlzdHMgZm9yIG1pc3NpbmcvZmFpbGVkIGRldmljZSJ9LAorCXsweDA2NjcwMTAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKKwkgIlVuaXQgQXR0ZW50aW9uLCBpbmNvbXBhdGlibGUgZXhwb3NlZCBtb2RlIGRldmljZSJ9LAorCXsweDA2NjcwNjAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKKwkgIlVuaXQgQXR0ZW50aW9uLCBhdHRhY2htZW50IG9mIGxvZ2ljYWwgdW5pdCBmYWlsZWQifSwKKwl7MHgwNjY3ODAwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJVbml0IEF0dGVudGlvbiwgY2FibGVzIGV4Y2VlZCBjb25uZWN0aXZlIGRlc2lnbiBsaW1pdCJ9LAorCXsweDA2Njc4MzAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIlVuaXQgQXR0ZW50aW9uLCBpbmNvbXBsZXRlIG11bHRpcGF0aCBjb25uZWN0aW9uIGJldHdlZW4iIFwKKwkgIklPQSBhbmQgZW5jbG9zdXJlIn0sCisJezB4MDY2Nzg0MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiVW5pdCBBdHRlbnRpb24sIGluY29tcGxldGUgbXVsdGlwYXRoIGNvbm5lY3Rpb24gYmV0d2VlbiIgXAorCSAiZGV2aWNlIGFuZCBlbmNsb3N1cmUifSwKKwl7MHgwNjY3ODUwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJVbml0IEF0dGVudGlvbiwgaW5jb21wbGV0ZSBtdWx0aXBhdGggY29ubmVjdGlvbiBiZXR3ZWVuIiBcCisJICJJT0EgYW5kIHJlbW90ZSBJT0EifSwKKwl7MHgwNjY3ODYwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCisJICJVbml0IEF0dGVudGlvbiwgbWlzc2luZyByZW1vdGUgSU9BIn0sCisJezB4MDY2NzkxMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAorCSAiVW5pdCBBdHRlbnRpb24sIGVuY2xvc3VyZSBkb2Vzbid0IHN1cHBvcnQgcmVxdWlyZWQgbXVsdGlwYXRoIiBcCisJICJmdW5jdGlvbiJ9LAorCXsweDA2Njk4MjAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKKwkgIlVuaXQgQXR0ZW50aW9uLCBjb3JydXB0IGFycmF5IHBhcml0eSBkZXRlY3RlZCBvbiBkZXZpY2UifSwKKwl7MHgwNjZCMDIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJVbml0IEF0dGVudGlvbiwgYXJyYXkgZXhwb3NlZCJ9LAorCXsweDA2NkI4MjAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKKwkgIlVuaXQgQXR0ZW50aW9uLCBleHBvc2VkIGFycmF5IGlzIHN0aWxsIHByb3RlY3RlZCJ9LAorCXsweDA2NkI5MjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIlVuaXQgQXR0ZW50aW9uLCBNdWx0aXBhdGggcmVkdW5kYW5jeSBsZXZlbCBnb3Qgd29yc2UifSwKKwl7MHgwNzI3MDAwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCisJICJEYXRhIFByb3RlY3QsIGRldmljZSBpcyByZWFkL3dyaXRlIHByb3RlY3RlZCBieSBJT0EifSwKKwl7MHgwNzI3ODAwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCisJICJEYXRhIFByb3RlY3QsIElPQSBkb2Vzbid0IHN1cHBvcnQgZGV2aWNlIGF0dHJpYnV0ZSJ9LAorCXsweDA3Mjc4MTAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKKwkgIkRhdGEgUHJvdGVjdCwgTlZSQU0gbWlycm9yaW5nIHByb2hpYml0ZWQifSwKKwl7MHgwNzI3ODQwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJEYXRhIFByb3RlY3QsIGFycmF5IGlzIHNob3J0IDIgb3IgbW9yZSBkZXZpY2VzIn0sCisJezB4MDcyNzg2MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiRGF0YSBQcm90ZWN0LCBleHBvc2VkIGFycmF5IGlzIHNob3J0IGEgcmVxdWlyZWQgZGV2aWNlIn0sCisJezB4MDcyNzg3MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiRGF0YSBQcm90ZWN0LCBhcnJheSBtZW1iZXJzIG5vdCBhdCByZXF1aXJlZCBhZGRyZXNzZXMifSwKKwl7MHgwNzI3ODgwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJEYXRhIFByb3RlY3QsIGV4cG9zZWQgbW9kZSBkZXZpY2UgcmVzb3VyY2UgYWRkcmVzcyBjb25mbGljdCJ9LAorCXsweDA3Mjc4OTAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkRhdGEgUHJvdGVjdCwgaW5jb3JyZWN0IHJlc291cmNlIGFkZHJlc3Mgb2YgZXhwb3NlZCBtb2RlIGRldmljZSJ9LAorCXsweDA3Mjc4QTAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkRhdGEgUHJvdGVjdCwgQXJyYXkgaXMgbWlzc2luZyBhIGRldmljZSBhbmQgcGFyaXR5IGlzIG91dCBvZiBzeW5jIn0sCisJezB4MDcyNzhCMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiRGF0YSBQcm90ZWN0LCBtYXhpbXVtIG51bWJlciBvZiBhcnJheXMgYWxyZWFkeSBleGlzdCJ9LAorCXsweDA3Mjc4QzAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKKwkgIkRhdGEgUHJvdGVjdCwgY2Fubm90IGxvY2F0ZSBjYWNoZSBkYXRhIGZvciBkZXZpY2UifSwKKwl7MHgwNzI3OEQwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCisJICJEYXRhIFByb3RlY3QsIGNhY2hlIGRhdGEgZXhpdHMgZm9yIGEgY2hhbmdlZCBkZXZpY2UifSwKKwl7MHgwNzI3OTEwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJEYXRhIFByb3RlY3QsIGRldGVjdGlvbiBvZiBhIGRldmljZSByZXF1aXJpbmcgZm9ybWF0In0sCisJezB4MDcyNzkyMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiRGF0YSBQcm90ZWN0LCBJT0EgZXhjZWVkcyBtYXhpbXVtIG51bWJlciBvZiBkZXZpY2VzIn0sCisJezB4MDcyNzk2MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiRGF0YSBQcm90ZWN0LCBtaXNzaW5nIGFycmF5LCB2b2x1bWUgc2V0IGlzIG5vdCBmdW5jdGlvbmFsIn0sCisJezB4MDcyNzk3MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiRGF0YSBQcm90ZWN0LCBzaW5nbGUgZGV2aWNlIGZvciBhIHZvbHVtZSBzZXQifSwKKwl7MHgwNzI3OTgwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJEYXRhIFByb3RlY3QsIG1pc3NpbmcgbXVsdGlwbGUgZGV2aWNlcyBmb3IgYSB2b2x1bWUgc2V0In0sCisJezB4MDcyNzk5MDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAorCSAiRGF0YSBQcm90ZWN0LCBtYXhpbXVtIG51bWJlciBvZiB2b2x1bWVudCBzZXRzIGFscmVhZHkgZXhpc3RzIn0sCisJezB4MDcyNzlBMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiRGF0YSBQcm90ZWN0LCBvdGhlciB2b2x1bWUgc2V0IHByb2JsZW0ifSwKK307CisKKy8qIG1hY3JvcyB0byBoZWxwIGluIGRlYnVnZ2luZyAqLworI2RlZmluZSBwbWNyYWlkX2VyciguLi4pICBcCisJcHJpbnRrKEtFUk5fRVJSICJNYXhSQUlEOiAiX19WQV9BUkdTX18pCisKKyNkZWZpbmUgcG1jcmFpZF9pbmZvKC4uLikgXAorCWlmIChwbWNyYWlkX2RlYnVnX2xvZykgXAorCQlwcmludGsoS0VSTl9JTkZPICJNYXhSQUlEOiAiX19WQV9BUkdTX18pCisKKy8qIGNoZWNrIGlmIGdpdmVuIGNvbW1hbmQgaXMgYSBTQ1NJIFJFQUQgb3IgU0NTSSBXUklURSBjb21tYW5kICovCisjZGVmaW5lIFNDU0lfUkVBRF9DTUQgICAgICAgICAgIDB4MQkvKiBhbnkgb2YgU0NTSSBSRUFEIGNvbW1hbmRzICovCisjZGVmaW5lIFNDU0lfV1JJVEVfQ01EICAgICAgICAgIDB4MgkvKiBhbnkgb2YgU0NTSSBXUklURSBjb21tYW5kcyAqLworI2RlZmluZSBTQ1NJX0NNRF9UWVBFKG9wY29kZSkgXAorKHsgIHU4IG9wID0gb3Bjb2RlOyB1OCBfX3R5cGUgPSAwO1wKKwlpZiAob3AgPT0gUkVBRF82IHx8IG9wID09IFJFQURfMTAgfHwgb3AgPT0gUkVBRF8xMiB8fCBvcCA9PSBSRUFEXzE2KVwKKwkJX190eXBlID0gU0NTSV9SRUFEX0NNRDtcCisJZWxzZSBpZiAob3AgPT0gV1JJVEVfNiB8fCBvcCA9PSBXUklURV8xMCB8fCBvcCA9PSBXUklURV8xMiB8fCBcCisJCSBvcCA9PSBXUklURV8xNilcCisJCV9fdHlwZSA9IFNDU0lfV1JJVEVfQ01EO1wKKwlfX3R5cGU7XAorfSkKKworI2RlZmluZSBJU19TQ1NJX1JFQURfV1JJVEUob3Bjb2RlKSBcCisoewl1OCBfX3R5cGUgPSBTQ1NJX0NNRF9UWVBFKG9wY29kZSk7IFwKKwkoX190eXBlID09IFNDU0lfUkVBRF9DTUQgfHwgX190eXBlID09IFNDU0lfV1JJVEVfQ01EKSA/IDEgOiAwO1wKK30pCisKKworLyoKKyAqIHBtY3JhaWRfaW9jdGxfaGVhZGVyIC0gZGVmaW5pdGlvbiBvZiBoZWFkZXIgc3RydWN0dXJlIHRoYXQgcHJlY2VlZHMgYWxsIHRoZQorICogYnVmZmVycyBnaXZlbiBhcyBpb2N0bCBhcmd1ZW1lbnRzLgorICoKKyAqIC5zaWduYXR1cmUgICAgICAgICAgIDogYWx3YXlzIEFTQ0lJIHN0cmluZywgIlBNQ1JBSUQiCisgKiAucmVzZXJ2ZWQgICAgICAgICAgICA6IG5vdCB1c2VkCisgKiAuYnVmZmVyX2xlbmd0aCAgICAgICA6IGxlbmd0aCBvZiB0aGUgYnVmZmVyIGZvbGxvd2luZyB0aGUgaGVhZGVyCisgKi8KK3N0cnVjdCBwbWNyYWlkX2lvY3RsX2hlYWRlciB7CisJdTggIHNpZ25hdHVyZVs4XTsKKwl1MzIgcmVzZXJ2ZWQ7CisJdTMyIGJ1ZmZlcl9sZW5ndGg7Cit9OworCisjZGVmaW5lIFBNQ1JBSURfSU9DVExfU0lHTkFUVVJFICAgICAgIlBNQ1JBSUQiCisKKworLyoKKyAqIHBtY3JhaWRfZXZlbnRfZGV0YWlscyAtIGRlZmluZXMgQUVOIGRldGFpbHMgdGhhdCBhcHBzIGNhbiByZXRyaWV2ZSBmcm9tIExMRAorICoKKyAqIC5yY2JfY2NuIC0gY29tcGxldGUgUkNCIG9mIENDTgorICogLnJjYl9sZG4gLSBjb21wbGV0ZSBSQ0Igb2YgQ0NOCisgKi8KK3N0cnVjdCBwbWNyYWlkX2V2ZW50X2RldGFpbHMgeworCXN0cnVjdCBwbWNyYWlkX2hjYW1fY2NuIHJjYl9jY247CisJc3RydWN0IHBtY3JhaWRfaGNhbV9sZG4gcmNiX2xkbjsKK307CisKKy8qCisgKiBwbWNyYWlkX2RyaXZlcl9pb2N0bF9idWZmZXIgLSBzdHJ1Y3R1cmUgcGFzc2VkIGFzIGFyZ3VtZW50IHRvIG1vc3Qgb2YgdGhlCisgKiBQTUMgZHJpdmVyIGhhbmRsZWQgaW9jdGxzLgorICovCitzdHJ1Y3QgcG1jcmFpZF9kcml2ZXJfaW9jdGxfYnVmZmVyIHsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2N0bF9oZWFkZXIgaW9jdGxfaGVhZGVyOworCXN0cnVjdCBwbWNyYWlkX2V2ZW50X2RldGFpbHMgZXZlbnRfZGV0YWlsczsKK307CisKKy8qCisgKiBwbWNyYWlkX3Bhc3N0aHJvdWdoX2lvY3RsX2J1ZmZlciAtIHN0cnVjdHVyZSBnaXZlbiBhcyBhcmd1bWVudCB0bworICogcGFzc3Rocm91Z2gob3IgZmlybXdhcmUgaGFuZGxlZCkgSU9DVEwgY29tbWFuZHMuIE5vdGUgdGhhdCBpb2FyY2IgcmVxdWlyZXMKKyAqIDMyLWJ5dGUgYWxpZ25tZW50IHNvLCBpdCBpcyBuZWNlc3NhcnkgdG8gcGFjayB0aGlzIHN0cnVjdHVyZSB0byBhdm9pZCBhbnkKKyAqIGhvbGVzIGJldHdlZW4gaW9jdGxfaGVhZGVyIGFuZCBwYXNzdGhyb3VnaCBidWZmZXIKKyAqCisgKiAuaW9hY3RsX2hlYWRlciA6IGlvY3RsIGhlYWRlcgorICogLmlvYXJjYiAgICAgICAgOiBmaWxsZWQtdXAgaW9hcmNiIGJ1ZmZlciwgZHJpdmVyIGFsd2F5cyByZWFkcyB0aGlzIGJ1ZmZlcgorICogLmlvYXNhICAgICAgICAgOiBidWZmZXIgZm9yIGlvYXNhLCBkcml2ZXIgZmlsbHMgdGhpcyB3aXRoIElPQVNBIGZyb20gZmlybXdhcmUKKyAqIC5yZXF1ZXN0X2J1ZmZlcjogVGhlIEkvTyBidWZmZXIgKGZsYXQpLCBkcml2ZXIgcmVhZHMvd3JpdGVzIHRvIHRoaXMgYmFzZWQgb24KKyAqICAgICAgICAgICAgICAgICAgdGhlIHRyYW5zZmVyIGRpcmVjdGlvbnMgcGFzc2VkIGluIGlvYXJjYi5mbGFnczAuIENvbnRlbnRzCisgKiAgICAgICAgICAgICAgICAgIG9mIHRoaXMgYnVmZmVyIGFyZSB2YWxpZCBvbmx5IHdoZW4gaW9hcmNiLmRhdGFfdHJhbnNmZXJfbGVuCisgKiAgICAgICAgICAgICAgICAgIGlzIG5vdCB6ZXJvLgorICovCitzdHJ1Y3QgcG1jcmFpZF9wYXNzdGhyb3VnaF9pb2N0bF9idWZmZXIgeworCXN0cnVjdCBwbWNyYWlkX2lvY3RsX2hlYWRlciBpb2N0bF9oZWFkZXI7CisJc3RydWN0IHBtY3JhaWRfaW9hcmNiIGlvYXJjYjsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FzYSAgaW9hc2E7CisJdTggIHJlcXVlc3RfYnVmZmVyWzFdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBrZXlzIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBkcml2ZXIgaGFuZGxlZCBJT0NUTHMgYW5kIHBhc3N0aHJvdWdoCisgKiBJT0NUTHMgcGFzc2VkIHRvIElPQS4gZHJpdmVyIGRldGVybWluZXMgdGhlIGlvY3RsIHR5cGUgdXNpbmcgbWFjcm8KKyAqIF9JT0NfVFlQRQorICovCisjZGVmaW5lIFBNQ1JBSURfRFJJVkVSX0lPQ1RMICAgICAgICAgJ0QnCisjZGVmaW5lIFBNQ1JBSURfUEFTU1RIUk9VR0hfSU9DVEwgICAgJ0YnCisKKyNkZWZpbmUgRFJWX0lPQ1RMKG4sIHNpemUpIFwKKyAgICBfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCBQTUNSQUlEX0RSSVZFUl9JT0NUTCwgKG4pLCAoc2l6ZSkpCisKKyNkZWZpbmUgRk1XX0lPQ1RMKG4sIHNpemUpIFwKKyAgICBfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCBQTUNSQUlEX1BBU1NUSFJPVUdIX0lPQ1RMLCAgKG4pLCAoc2l6ZSkpCisKKy8qCisgKiBfQVJHU0laRTogbWFjcm8gdGhhdCBnaXZlcyBzaXplIG9mIHRoZSBhcmd1bWVudCB0eXBlIHBhc3NlZCB0byBhbiBJT0NUTCBjbWQuCisgKiBUaGlzIGlzIHRvIGZhY2lsaXRhdGUgYXBwbGljYXRpb25zIGF2b2lkaW5nIHVuLW5lY2Vzc2FyeSBtZW1vcnkgYWxsb2NhdGlvbnMuCisgKiBGb3IgZXhhbXBsZSwgbW9zdCBvZiBkcml2ZXIgaGFuZGxlZCBpb2N0bHMgZG8gbm90IHJlcXVpcmUgaW9hcmNiLCBpb2FzYS4KKyAqLworI2RlZmluZSBfQVJHU0laRShhcmcpIChzaXplb2Yoc3RydWN0IHBtY3JhaWRfaW9jdGxfaGVhZGVyKSArIHNpemVvZihhcmcpKQorCisvKiBEcml2ZXIgaGFuZGxlZCBJT0NUTCBjb21tYW5kIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgUE1DUkFJRF9JT0NUTF9SRVNFVF9BREFQVEVSICAgICAgICAgIFwKKwlEUlZfSU9DVEwoNSwgc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2lvY3RsX2hlYWRlcikpCisKKy8qIHBhc3N0aHJvdWdoL2Zpcm13YXJlIGhhbmRsZWQgY29tbWFuZHMgKi8KKyNkZWZpbmUgUE1DUkFJRF9JT0NUTF9QQVNTVEhST1VHSF9DT01NQU5EICAgICAgICAgXAorCUZNV19JT0NUTCgxLCBzaXplb2Yoc3RydWN0IHBtY3JhaWRfcGFzc3Rocm91Z2hfaW9jdGxfYnVmZmVyKSkKKworI2RlZmluZSBQTUNSQUlEX0lPQ1RMX0RPV05MT0FEX01JQ1JPQ09ERSAgICAgXAorCUZNV19JT0NUTCgyLCBzaXplb2Yoc3RydWN0IHBtY3JhaWRfcGFzc3Rocm91Z2hfaW9jdGxfYnVmZmVyKSkKKworCisjZW5kaWYgLyogX1BNQ1JBSURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKaW5kZXggMGY4Nzk2Mi4uZmJjYjgyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCkBAIC0xNjcwLDcgKzE2NzAsNyBAQAogCiAJcWxhMjR4eF92cG9ydF9kaXNhYmxlKGZjX3Zwb3J0LCBkaXNhYmxlKTsKIAotCWlmIChxbDJ4bXVsdGlxdWVfdGFnKSB7CisJaWYgKGhhLT5mbGFncy5jcHVfYWZmaW5pdHlfZW5hYmxlZCkgewogCQlyZXEgPSBoYS0+cmVxX3FfbWFwWzFdOwogCQlnb3RvIHZwb3J0X3F1ZXVlOwogCX0gZWxzZSBpZiAocWwyeG1heHF1ZXVlcyA9PSAxIHx8ICFoYS0+bnBpdl9pbmZvKQpAQCAtMTczNiw2ICsxNzM2LDExIEBACiAKIAlxbGEyNHh4X2RlYWxsb2NhdGVfdnBfaWQodmhhKTsKIAorCW11dGV4X2xvY2soJmhhLT52cG9ydF9sb2NrKTsKKwloYS0+Y3VyX3Zwb3J0X2NvdW50LS07CisJY2xlYXJfYml0KHZoYS0+dnBfaWR4LCBoYS0+dnBfaWR4X21hcCk7CisJbXV0ZXhfdW5sb2NrKCZoYS0+dnBvcnRfbG9jayk7CisKIAlpZiAodmhhLT50aW1lcl9hY3RpdmUpIHsKIAkJcWxhMngwMF92cF9zdG9wX3RpbWVyKHZoYSk7CiAJCURFQlVHMTUocHJpbnRrICgic2NzaSglbGQpOiB0aW1lciBmb3IgdGhlIHZwb3J0WyVkXSA9ICVwICIKQEAgLTE3NDMsNyArMTc0OCw3IEBACiAJCSAgICB2aGEtPmhvc3Rfbm8sIHZoYS0+dnBfaWR4LCB2aGEpKTsKICAgICAgICAgfQogCi0JaWYgKHZoYS0+cmVxLT5pZCAmJiAhcWwyeG11bHRpcXVlX3RhZykgeworCWlmICh2aGEtPnJlcS0+aWQgJiYgIWhhLT5mbGFncy5jcHVfYWZmaW5pdHlfZW5hYmxlZCkgewogCQlpZiAocWxhMjV4eF9kZWxldGVfcmVxX3F1ZSh2aGEsIHZoYS0+cmVxKSAhPSBRTEFfU1VDQ0VTUykKIAkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKIAkJCQkiUXVldWUgZGVsZXRlIGZhaWxlZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCmluZGV4IDAwYWE0OGQuLjIxNTA2MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKQEAgLTE4OSw2ICsxODksNyBAQAogICovCiB0eXBlZGVmIHN0cnVjdCBzcmIgewogCXN0cnVjdCBmY19wb3J0ICpmY3BvcnQ7CisJdWludDMyX3QgaGFuZGxlOwogCiAJc3RydWN0IHNjc2lfY21uZCAqY21kOwkJLyogTGludXggU0NTSSBjb21tYW5kIHBrdCAqLwogCkBAIC0xOTYsNiArMTk3LDggQEAKIAogCXVpbnQzMl90IHJlcXVlc3Rfc2Vuc2VfbGVuZ3RoOwogCXVpbnQ4X3QgKnJlcXVlc3Rfc2Vuc2VfcHRyOworCisJdm9pZCAqY3R4OwogfSBzcmJfdDsKIAogLyoKQEAgLTIwNCw2ICsyMDcsMjggQEAKICNkZWZpbmUgU1JCX0RNQV9WQUxJRAkJQklUXzAJLyogQ29tbWFuZCBzZW50IHRvIElTUCAqLwogCiAvKgorICogU1JCIGV4dGVuc2lvbnMuCisgKi8KK3N0cnVjdCBzcmJfY3R4IHsKKyNkZWZpbmUgU1JCX0xPR0lOX0NNRAkxCisjZGVmaW5lIFNSQl9MT0dPVVRfQ01ECTIKKwl1aW50MTZfdCB0eXBlOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCisJdm9pZCAoKmZyZWUpKHNyYl90ICpzcCk7CisJdm9pZCAoKnRpbWVvdXQpKHNyYl90ICpzcCk7Cit9OworCitzdHJ1Y3Qgc3JiX2xvZ2lvIHsKKwlzdHJ1Y3Qgc3JiX2N0eCBjdHg7CisKKyNkZWZpbmUgU1JCX0xPR0lOX1JFVFJJRUQJQklUXzAKKyNkZWZpbmUgU1JCX0xPR0lOX0NPTkRfUExPR0kJQklUXzEKKyNkZWZpbmUgU1JCX0xPR0lOX1NLSVBfUFJMSQlCSVRfMgorCXVpbnQxNl90IGZsYWdzOworfTsKKworLyoKICAqIElTUCBJL08gUmVnaXN0ZXIgU2V0IHN0cnVjdHVyZSBkZWZpbml0aW9ucy4KICAqLwogc3RydWN0IGRldmljZV9yZWdfMnh4eCB7CkBAIC0xNDgyLDcgKzE1MDcsNyBAQAogCQl1aW50OF90IGRvbWFpbjsKIAkJdWludDhfdCBhcmVhOwogCQl1aW50OF90IGFsX3BhOwotI2VsaWYgX19MSVRUTEVfRU5ESUFOCisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAkJdWludDhfdCBhbF9wYTsKIAkJdWludDhfdCBhcmVhOwogCQl1aW50OF90IGRvbWFpbjsKQEAgLTE1NjUsNiArMTU5MCw3IEBACiAjZGVmaW5lIEZDRl9GQUJSSUNfREVWSUNFCUJJVF8wCiAjZGVmaW5lIEZDRl9MT0dJTl9ORUVERUQJQklUXzEKICNkZWZpbmUgRkNGX1RBUEVfUFJFU0VOVAlCSVRfMgorI2RlZmluZSBGQ0ZfRkNQMl9ERVZJQ0UJCUJJVF8zCiAKIC8qIE5vIGxvb3AgSUQgZmxhZy4gKi8KICNkZWZpbmUgRkNfTk9fTE9PUF9JRAkJMHgxMDAwCkBAIC0yMDkzLDYgKzIxMTksMTAgQEAKIGVudW0gcWxhX3dvcmtfdHlwZSB7CiAJUUxBX0VWVF9BRU4sCiAJUUxBX0VWVF9JRENfQUNLLAorCVFMQV9FVlRfQVNZTkNfTE9HSU4sCisJUUxBX0VWVF9BU1lOQ19MT0dJTl9ET05FLAorCVFMQV9FVlRfQVNZTkNfTE9HT1VULAorCVFMQV9FVlRfQVNZTkNfTE9HT1VUX0RPTkUsCiB9OwogCiAKQEAgLTIxMTEsNiArMjE0MSwxMSBAQAogI2RlZmluZSBRTEFfSURDX0FDS19SRUdTCTcKIAkJCXVpbnQxNl90IG1iW1FMQV9JRENfQUNLX1JFR1NdOwogCQl9IGlkY19hY2s7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgZmNfcG9ydCAqZmNwb3J0OworI2RlZmluZSBRTEFfTE9HSU9fTE9HSU5fUkVUUklFRAlCSVRfMAorCQkJdTE2IGRhdGFbMl07CisJCX0gbG9naW87CiAJfSB1OwogfTsKIApAQCAtMjIyNCw2ICsyMjU5LDcgQEAKIAkJdWludDMyX3QJY2hpcF9yZXNldF9kb25lCQk6MTsKIAkJdWludDMyX3QJcG9ydDAJCQk6MTsKIAkJdWludDMyX3QJcnVubmluZ19nb2xkX2Z3CQk6MTsKKwkJdWludDMyX3QJY3B1X2FmZmluaXR5X2VuYWJsZWQJOjE7CiAJfSBmbGFnczsKIAogCS8qIFRoaXMgc3BpbmxvY2sgaXMgdXNlZCB0byBwcm90ZWN0ICJpbyB0cmFuc2FjdGlvbnMiLCB5b3UgbXVzdApAQCAtMjM1MCw2ICsyMzg2LDcgQEAKIAkJCQkoaGEpLT5mbGFncy5tc2l4X2VuYWJsZWQpCiAjZGVmaW5lIElTX0ZBQ19SRVFVSVJFRChoYSkJKElTX1FMQTgxWFgoaGEpKQogI2RlZmluZSBJU19OT0NBQ0hFX1ZQRF9UWVBFKGhhKQkoSVNfUUxBODFYWChoYSkpCisjZGVmaW5lIElTX0FMT0dJT19DQVBBQkxFKGhhKQkoSVNfUUxBMjNYWChoYSkgfHwgSVNfRldJMl9DQVBBQkxFKGhhKSkKIAogI2RlZmluZSBJU19JSURNQV9DQVBBQkxFKGhhKSAgICAoKGhhKS0+ZGV2aWNlX3R5cGUgJiBEVF9JSURNQSkKICNkZWZpbmUgSVNfRldJMl9DQVBBQkxFKGhhKSAgICAgKChoYSktPmRldmljZV90eXBlICYgRFRfRldJMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKaW5kZXggZGZkZTJkZC4uNjZhOGRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKQEAgLTExMjYsNyArMTEyNiw3IEBACiAJdWludDE2X3QgaWQ7CiAJdWludDE2X3QgcmVzZXJ2ZWRfNDsKIAl1aW50MTZfdCBob3BjdDsKLQl1aW50OF90IHJlc2VydmVkXzU7CisJdWludDhfdCByZXNlcnZlZF81WzJdOwogfTsKIAogI2RlZmluZSBWUF9SUFRfSURfSU9DQl9UWVBFCTB4MzIJLyogUmVwb3J0IElEIEFjcXVpc2l0aW9uIGVudHJ5LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCmluZGV4IDY1YjEyZDguLmYzZDFkMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKQEAgLTUyLDYgKzUyLDE0IEBACiAKIGV4dGVybiB2b2lkIHFsYTg0eHhfcHV0X2NoaXAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CiAKK2V4dGVybiBpbnQgcWxhMngwMF9hc3luY19sb2dpbihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBmY19wb3J0X3QgKiwKKyAgICB1aW50MTZfdCAqKTsKK2V4dGVybiBpbnQgcWxhMngwMF9hc3luY19sb2dvdXQoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgZmNfcG9ydF90ICopOworZXh0ZXJuIGludCBxbGEyeDAwX2FzeW5jX2xvZ2luX2RvbmUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgZmNfcG9ydF90ICosCisgICAgdWludDE2X3QgKik7CitleHRlcm4gaW50IHFsYTJ4MDBfYXN5bmNfbG9nb3V0X2RvbmUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgZmNfcG9ydF90ICosCisgICAgdWludDE2X3QgKik7CisKIC8qCiAgKiBHbG9iYWwgRGF0YSBpbiBxbGFfb3MuYyBzb3VyY2UgZmlsZS4KICAqLwpAQCAtNzYsNiArODQsMTUgQEAKIGV4dGVybiBpbnQgcWxhMngwMF9wb3N0X2Flbl93b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIGVudW0KICAgICBmY19ob3N0X2V2ZW50X2NvZGUsIHUzMik7CiBleHRlcm4gaW50IHFsYTJ4MDBfcG9zdF9pZGNfYWNrX3dvcmsoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgdWludDE2X3QgKik7CitleHRlcm4gaW50IHFsYTJ4MDBfcG9zdF9hc3luY19sb2dpbl93b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIGZjX3BvcnRfdCAqLAorICAgIHVpbnQxNl90ICopOworZXh0ZXJuIGludCBxbGEyeDAwX3Bvc3RfYXN5bmNfbG9naW5fZG9uZV93b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosCisgICAgZmNfcG9ydF90ICosIHVpbnQxNl90ICopOworZXh0ZXJuIGludCBxbGEyeDAwX3Bvc3RfYXN5bmNfbG9nb3V0X3dvcmsoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgZmNfcG9ydF90ICosCisgICAgdWludDE2X3QgKik7CitleHRlcm4gaW50IHFsYTJ4MDBfcG9zdF9hc3luY19sb2dvdXRfZG9uZV93b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosCisgICAgZmNfcG9ydF90ICosIHVpbnQxNl90ICopOworCiBleHRlcm4gaW50IHFsYTgxeHhfcmVzdGFydF9tcGlfZmlybXdhcmUoc2NzaV9xbGFfaG9zdF90ICopOwogCiBleHRlcm4gdm9pZCBxbGEyeDAwX2Fib3J0X2ZjcG9ydF9jbWRzKGZjX3BvcnRfdCAqKTsKQEAgLTgzLDYgKzEwMCw4IEBACiAJc3RydWN0IHFsYV9od19kYXRhICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9mcmVlX2hvc3Qoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CiBleHRlcm4gdm9pZCBxbGEyeDAwX3JlbG9naW4oc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CitleHRlcm4gdm9pZCBxbGEyeDAwX2RvX3dvcmsoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CisKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb25zIGluIHFsYV9taWQuYyBzb3VyY2UgZmlsZS4KICAqLwpAQCAtMTM1LDYgKzE1NCw3IEBACiAJCQkJCQl1aW50MTZfdCwgdWludDE2X3QsIHVpbnQ4X3QpOwogaW50IF9fcWxhMngwMF9tYXJrZXIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgc3RydWN0IHJlcV9xdWUgKiwgc3RydWN0IHJzcF9xdWUgKiwKIAkJCQkJCXVpbnQxNl90LCB1aW50MTZfdCwgdWludDhfdCk7CitleHRlcm4gaW50IHFsYTJ4MDBfc3RhcnRfc3Aoc3JiX3QgKik7CiAKIC8qCiAgKiBHbG9iYWwgRnVuY3Rpb24gUHJvdG90eXBlcyBpbiBxbGFfbWJ4LmMgc291cmNlIGZpbGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ncy5jCmluZGV4IDkxNzUzNGIuLjQ2NDcwMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ncy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ncy5jCkBAIC0xNjc0LDYgKzE2NzQsMTAgQEAKIHFsYTJ4MDBfZmRtaV9yZWdpc3RlcihzY3NpX3FsYV9ob3N0X3QgKnZoYSkKIHsKIAlpbnQgcnZhbDsKKyAgICAgICBzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKworCWlmIChJU19RTEEyMTAwKGhhKSB8fCBJU19RTEEyMjAwKGhhKSkKKwkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKIAlydmFsID0gcWxhMngwMF9tZ210X3N2cl9sb2dpbih2aGEpOwogCWlmIChydmFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKaW5kZXggZjJjZThlMy4uOWUzZWFhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCkBAIC00MCw2ICs0MCwyMTAgQEAKIHN0YXRpYyBpbnQgcWxhODR4eF9pbml0X2NoaXAoc2NzaV9xbGFfaG9zdF90ICopOwogc3RhdGljIGludCBxbGEyNXh4X2luaXRfcXVldWVzKHN0cnVjdCBxbGFfaHdfZGF0YSAqKTsKIAorLyogU1JCIEV4dGVuc2lvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZAorcWxhMngwMF9jdHhfc3BfdGltZW91dCh1bnNpZ25lZCBsb25nIF9fZGF0YSkKK3sKKwlzcmJfdCAqc3AgPSAoc3JiX3QgKilfX2RhdGE7CisJc3RydWN0IHNyYl9jdHggKmN0eDsKKwlmY19wb3J0X3QgKmZjcG9ydCA9IHNwLT5mY3BvcnQ7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IGZjcG9ydC0+dmhhLT5odzsKKwlzdHJ1Y3QgcmVxX3F1ZSAqcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlyZXEgPSBoYS0+cmVxX3FfbWFwWzBdOworCXJlcS0+b3V0c3RhbmRpbmdfY21kc1tzcC0+aGFuZGxlXSA9IE5VTEw7CisJY3R4ID0gc3AtPmN0eDsKKwljdHgtPnRpbWVvdXQoc3ApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisKKwljdHgtPmZyZWUoc3ApOworfQorCitzdGF0aWMgdm9pZAorcWxhMngwMF9jdHhfc3BfZnJlZShzcmJfdCAqc3ApCit7CisJc3RydWN0IHNyYl9jdHggKmN0eCA9IHNwLT5jdHg7CisKKwlrZnJlZShjdHgpOworCW1lbXBvb2xfZnJlZShzcCwgc3AtPmZjcG9ydC0+dmhhLT5ody0+c3JiX21lbXBvb2wpOworfQorCitpbmxpbmUgc3JiX3QgKgorcWxhMngwMF9nZXRfY3R4X3NwKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBmY19wb3J0X3QgKmZjcG9ydCwgc2l6ZV90IHNpemUsCisgICAgdW5zaWduZWQgbG9uZyB0bW8pCit7CisJc3JiX3QgKnNwOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXN0cnVjdCBzcmJfY3R4ICpjdHg7CisKKwlzcCA9IG1lbXBvb2xfYWxsb2MoaGEtPnNyYl9tZW1wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNwKQorCQlnb3RvIGRvbmU7CisJY3R4ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eCkgeworCQltZW1wb29sX2ZyZWUoc3AsIGhhLT5zcmJfbWVtcG9vbCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwltZW1zZXQoc3AsIDAsIHNpemVvZigqc3ApKTsKKwlzcC0+ZmNwb3J0ID0gZmNwb3J0OworCXNwLT5jdHggPSBjdHg7CisJY3R4LT5mcmVlID0gcWxhMngwMF9jdHhfc3BfZnJlZTsKKworCWluaXRfdGltZXIoJmN0eC0+dGltZXIpOworCWlmICghdG1vKQorCQlnb3RvIGRvbmU7CisJY3R4LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIHRtbyAqIEhaOworCWN0eC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXNwOworCWN0eC0+dGltZXIuZnVuY3Rpb24gPSBxbGEyeDAwX2N0eF9zcF90aW1lb3V0OworCWFkZF90aW1lcigmY3R4LT50aW1lcik7Citkb25lOgorCXJldHVybiBzcDsKK30KKworLyogQXN5bmNocm9ub3VzIExvZ2luL0xvZ291dCBSb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEVMU19UTU9fMl9SQVRPVihoYSkgKChoYSktPnJfYV90b3YgLyAxMCAqIDIpCisKK3N0YXRpYyB2b2lkCitxbGEyeDAwX2FzeW5jX2xvZ2lvX3RpbWVvdXQoc3JiX3QgKnNwKQoreworCWZjX3BvcnRfdCAqZmNwb3J0ID0gc3AtPmZjcG9ydDsKKwlzdHJ1Y3Qgc3JiX2xvZ2lvICpsaW8gPSBzcC0+Y3R4OworCisJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKKwkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtJXMgdGltZW91dC5cbiIsCisJICAgIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLAorCSAgICBsaW8tPmN0eC50eXBlID09IFNSQl9MT0dJTl9DTUQgPyAibG9naW4iOiAibG9nb3V0IikpOworCisJaWYgKGxpby0+Y3R4LnR5cGUgPT0gU1JCX0xPR0lOX0NNRCkKKwkJcWxhMngwMF9wb3N0X2FzeW5jX2xvZ291dF93b3JrKGZjcG9ydC0+dmhhLCBmY3BvcnQsIE5VTEwpOworfQorCitpbnQKK3FsYTJ4MDBfYXN5bmNfbG9naW4oc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwgZmNfcG9ydF90ICpmY3BvcnQsCisgICAgdWludDE2X3QgKmRhdGEpCit7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisJc3JiX3QgKnNwOworCXN0cnVjdCBzcmJfbG9naW8gKmxpbzsKKwlpbnQgcnZhbDsKKworCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOworCXNwID0gcWxhMngwMF9nZXRfY3R4X3NwKHZoYSwgZmNwb3J0LCBzaXplb2Yoc3RydWN0IHNyYl9sb2dpbyksCisJICAgIEVMU19UTU9fMl9SQVRPVihoYSkgKyAyKTsKKwlpZiAoIXNwKQorCQlnb3RvIGRvbmU7CisKKwlsaW8gPSBzcC0+Y3R4OworCWxpby0+Y3R4LnR5cGUgPSBTUkJfTE9HSU5fQ01EOworCWxpby0+Y3R4LnRpbWVvdXQgPSBxbGEyeDAwX2FzeW5jX2xvZ2lvX3RpbWVvdXQ7CisJbGlvLT5mbGFncyB8PSBTUkJfTE9HSU5fQ09ORF9QTE9HSTsKKwlpZiAoZGF0YVsxXSAmIFFMQV9MT0dJT19MT0dJTl9SRVRSSUVEKQorCQlsaW8tPmZsYWdzIHw9IFNSQl9MT0dJTl9SRVRSSUVEOworCXJ2YWwgPSBxbGEyeDAwX3N0YXJ0X3NwKHNwKTsKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKKwkJZ290byBkb25lX2ZyZWVfc3A7CisKKwlERUJVRzIocHJpbnRrKEtFUk5fREVCVUcKKwkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtbG9naW4gLSBsb29wLWlkPSV4IHBvcnRpZD0lMDJ4JTAyeCUwMnggIgorCSAgICAicmV0cmllcz0lZC5cbiIsIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCBmY3BvcnQtPmxvb3BfaWQsCisJICAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwgZmNwb3J0LT5kX2lkLmIuYWxfcGEsCisJICAgIGZjcG9ydC0+bG9naW5fcmV0cnkpKTsKKwlyZXR1cm4gcnZhbDsKKworZG9uZV9mcmVlX3NwOgorCWRlbF90aW1lcl9zeW5jKCZsaW8tPmN0eC50aW1lcik7CisJbGlvLT5jdHguZnJlZShzcCk7Citkb25lOgorCXJldHVybiBydmFsOworfQorCitpbnQKK3FsYTJ4MDBfYXN5bmNfbG9nb3V0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsIGZjX3BvcnRfdCAqZmNwb3J0KQoreworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXNyYl90ICpzcDsKKwlzdHJ1Y3Qgc3JiX2xvZ2lvICpsaW87CisJaW50IHJ2YWw7CisKKwlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKKwlzcCA9IHFsYTJ4MDBfZ2V0X2N0eF9zcCh2aGEsIGZjcG9ydCwgc2l6ZW9mKHN0cnVjdCBzcmJfbG9naW8pLAorCSAgICBFTFNfVE1PXzJfUkFUT1YoaGEpICsgMik7CisJaWYgKCFzcCkKKwkJZ290byBkb25lOworCisJbGlvID0gc3AtPmN0eDsKKwlsaW8tPmN0eC50eXBlID0gU1JCX0xPR09VVF9DTUQ7CisJbGlvLT5jdHgudGltZW91dCA9IHFsYTJ4MDBfYXN5bmNfbG9naW9fdGltZW91dDsKKwlydmFsID0gcWxhMngwMF9zdGFydF9zcChzcCk7CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCisJCWdvdG8gZG9uZV9mcmVlX3NwOworCisJREVCVUcyKHByaW50ayhLRVJOX0RFQlVHCisJICAgICJzY3NpKCVsZDoleCk6IEFzeW5jLWxvZ291dCAtIGxvb3AtaWQ9JXggcG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsCisJICAgIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCBmY3BvcnQtPmxvb3BfaWQsCisJICAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwgZmNwb3J0LT5kX2lkLmIuYWxfcGEpKTsKKwlyZXR1cm4gcnZhbDsKKworZG9uZV9mcmVlX3NwOgorCWRlbF90aW1lcl9zeW5jKCZsaW8tPmN0eC50aW1lcik7CisJbGlvLT5jdHguZnJlZShzcCk7Citkb25lOgorCXJldHVybiBydmFsOworfQorCitpbnQKK3FsYTJ4MDBfYXN5bmNfbG9naW5fZG9uZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhLCBmY19wb3J0X3QgKmZjcG9ydCwKKyAgICB1aW50MTZfdCAqZGF0YSkKK3sKKwlpbnQgcnZhbDsKKwl1aW50OF90IG9wdHMgPSAwOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBNQlNfQ09NTUFORF9DT01QTEVURToKKwkJaWYgKGZjcG9ydC0+ZmxhZ3MgJiBGQ0ZfVEFQRV9QUkVTRU5UKQorCQkJb3B0cyB8PSBCSVRfMTsKKwkJcnZhbCA9IHFsYTJ4MDBfZ2V0X3BvcnRfZGF0YWJhc2UodmhhLCBmY3BvcnQsIG9wdHMpOworCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKKwkJCXFsYTJ4MDBfbWFya19kZXZpY2VfbG9zdCh2aGEsIGZjcG9ydCwgMSwgMCk7CisJCWVsc2UKKwkJCXFsYTJ4MDBfdXBkYXRlX2ZjcG9ydCh2aGEsIGZjcG9ydCk7CisJCWJyZWFrOworCWNhc2UgTUJTX0NPTU1BTkRfRVJST1I6CisJCWlmIChkYXRhWzFdICYgUUxBX0xPR0lPX0xPR0lOX1JFVFJJRUQpCisJCQlzZXRfYml0KFJFTE9HSU5fTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQllbHNlCisJCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QodmhhLCBmY3BvcnQsIDEsIDApOworCQlicmVhazsKKwljYXNlIE1CU19QT1JUX0lEX1VTRUQ6CisJCWZjcG9ydC0+bG9vcF9pZCA9IGRhdGFbMV07CisJCXFsYTJ4MDBfcG9zdF9hc3luY19sb2dpbl93b3JrKHZoYSwgZmNwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBNQlNfTE9PUF9JRF9VU0VEOgorCQlmY3BvcnQtPmxvb3BfaWQrKzsKKwkJcnZhbCA9IHFsYTJ4MDBfZmluZF9uZXdfbG9vcF9pZCh2aGEsIGZjcG9ydCk7CisJCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QodmhhLCBmY3BvcnQsIDEsIDApOworCQkJYnJlYWs7CisJCX0KKwkJcWxhMngwMF9wb3N0X2FzeW5jX2xvZ2luX3dvcmsodmhhLCBmY3BvcnQsIE5VTEwpOworCQlicmVhazsKKwl9CisJcmV0dXJuIFFMQV9TVUNDRVNTOworfQorCitpbnQKK3FsYTJ4MDBfYXN5bmNfbG9nb3V0X2RvbmUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwgZmNfcG9ydF90ICpmY3BvcnQsCisgICAgdWludDE2X3QgKmRhdGEpCit7CisJcWxhMngwMF9tYXJrX2RldmljZV9sb3N0KHZoYSwgZmNwb3J0LCAxLCAwKTsKKwlyZXR1cm4gUUxBX1NVQ0NFU1M7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgUUxvZ2ljIElTUDJ4MDAgSGFyZHdhcmUgU3VwcG9ydCBGdW5jdGlvbnMuICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTk4Nyw3ICsxMTkxLDYgQEAKIAkJCQkgICAgaGEtPnBoeV92ZXJzaW9uKTsKIAkJCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKIAkJCQkJZ290byBmYWlsZWQ7Ci0KIAkJCQloYS0+ZmxhZ3MubnBpdl9zdXBwb3J0ZWQgPSAwOwogCQkJCWlmIChJU19RTEEyWFhYX01JRFRZUEUoaGEpICYmCiAJCQkJCSAoaGEtPmZ3X2F0dHJpYnV0ZXMgJiBCSVRfMikpIHsKQEAgLTE1OTEsNyArMTc5NCw4IEBACiAJY2hhciAqc3QsICplbjsKIAl1aW50MTZfdCBpbmRleDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKLQlpbnQgdXNlX3RibCA9ICFJU19RTEEyNVhYKGhhKSAmJiAhSVNfUUxBODFYWChoYSk7CisJaW50IHVzZV90YmwgPSAhSVNfUUxBMjRYWF9UWVBFKGhhKSAmJiAhSVNfUUxBMjVYWChoYSkgJiYKKwkgICAgIUlTX1FMQTgxWFgoaGEpOwogCiAJaWYgKG1lbWNtcChtb2RlbCwgQklOWkVSTywgbGVuKSAhPSAwKSB7CiAJCXN0cm5jcHkoaGEtPm1vZGVsX251bWJlciwgbW9kZWwsIGxlbik7CkBAIC0xOTc4LDcgKzIxODIsNyBAQAogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7CiAKIAlzcGluX2xvY2tfaXJxKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2spOwotCXJwb3J0ID0gZmNwb3J0LT5kcnBvcnQ7CisJcnBvcnQgPSBmY3BvcnQtPmRycG9ydCA/IGZjcG9ydC0+ZHJwb3J0OiBmY3BvcnQtPnJwb3J0OwogCWZjcG9ydC0+ZHJwb3J0ID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnEoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jayk7CiAJaWYgKHJwb3J0KQpAQCAtMjM0NSw4ICsyNTQ5LDcgQEAKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCi0JaWYgKGZjcG9ydC0+ZHJwb3J0KQotCQlxbGEyeDAwX3Jwb3J0X2RlbChmY3BvcnQpOworCXFsYTJ4MDBfcnBvcnRfZGVsKGZjcG9ydCk7CiAKIAlycG9ydF9pZHMubm9kZV9uYW1lID0gd3duX3RvX3U2NChmY3BvcnQtPm5vZGVfbmFtZSk7CiAJcnBvcnRfaWRzLnBvcnRfbmFtZSA9IHd3bl90b191NjQoZmNwb3J0LT5wb3J0X25hbWUpOwpAQCAtMzAzOSw2ICszMjQyLDEyIEBACiAJcnZhbCA9IFFMQV9TVUNDRVNTOwogCXJldHJ5ID0gMDsKIAorCWlmIChJU19BTE9HSU9fQ0FQQUJMRShoYSkpIHsKKwkJcnZhbCA9IHFsYTJ4MDBfcG9zdF9hc3luY19sb2dpbl93b3JrKHZoYSwgZmNwb3J0LCBOVUxMKTsKKwkJaWYgKCFydmFsKQorCQkJcmV0dXJuIHJ2YWw7CisJfQorCiAJcnZhbCA9IHFsYTJ4MDBfZmFicmljX2xvZ2luKHZoYSwgZmNwb3J0LCBuZXh0X2xvb3BpZCk7CiAJaWYgKHJ2YWwgPT0gUUxBX1NVQ0NFU1MpIHsKIAkJLyogU2VuZCBhbiBBRElTQyB0byB0YXBlIGRldmljZXMuKi8KQEAgLTMxMzMsNyArMzM0Miw3IEBACiAJCQl9IGVsc2UgewogCQkJCWZjcG9ydC0+cG9ydF90eXBlID0gRkNUX1RBUkdFVDsKIAkJCQlpZiAobWJbMV0gJiBCSVRfMSkgewotCQkJCQlmY3BvcnQtPmZsYWdzIHw9IEZDRl9UQVBFX1BSRVNFTlQ7CisJCQkJCWZjcG9ydC0+ZmxhZ3MgfD0gRkNGX0ZDUDJfREVWSUNFOwogCQkJCX0KIAkJCX0KIApAQCAtMzI0NCw3ICszNDUzLDcgQEAKIAlzdHJ1Y3QgcmVxX3F1ZSAqcmVxOwogCXN0cnVjdCByc3BfcXVlICpyc3A7CiAKLQlpZiAocWwyeG11bHRpcXVlX3RhZykKKwlpZiAodmhhLT5ody0+ZmxhZ3MuY3B1X2FmZmluaXR5X2VuYWJsZWQpCiAJCXJlcSA9IHZoYS0+aHctPnJlcV9xX21hcFswXTsKIAllbHNlCiAJCXJlcSA9IHZoYS0+cmVxOwpAQCAtMzI4NiwxNSArMzQ5NSwxNyBAQAogfQogCiB2b2lkCi1xbGEyeDAwX3VwZGF0ZV9mY3BvcnRzKHNjc2lfcWxhX2hvc3RfdCAqdmhhKQorcWxhMngwMF91cGRhdGVfZmNwb3J0cyhzY3NpX3FsYV9ob3N0X3QgKmJhc2VfdmhhKQogewogCWZjX3BvcnRfdCAqZmNwb3J0OworCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICp0dnAsICp2aGE7CiAKIAkvKiBHbyB3aXRoIGRlZmVycmVkIHJlbW92YWwgb2YgcnBvcnQgcmVmZXJlbmNlcy4gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZjcG9ydCwgJnZoYS0+dnBfZmNwb3J0cywgbGlzdCkKLQkJaWYgKGZjcG9ydCAmJiBmY3BvcnQtPmRycG9ydCAmJgotCQkgICAgYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpICE9IEZDU19VTkNPTkZJR1VSRUQpCi0JCQlxbGEyeDAwX3Jwb3J0X2RlbChmY3BvcnQpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2aGEsIHR2cCwgJmJhc2VfdmhhLT5ody0+dnBfbGlzdCwgbGlzdCkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShmY3BvcnQsICZ2aGEtPnZwX2ZjcG9ydHMsIGxpc3QpCisJCQlpZiAoZmNwb3J0ICYmIGZjcG9ydC0+ZHJwb3J0ICYmCisJCQkgICAgYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpICE9IEZDU19VTkNPTkZJR1VSRUQpCisJCQkJcWxhMngwMF9ycG9ydF9kZWwoZmNwb3J0KTsKIH0KIAogLyoKQEAgLTMzMzEsOCArMzU0Miw2IEBACiAJCWlmIChhdG9taWNfcmVhZCgmdmhhLT5sb29wX3N0YXRlKSAhPSBMT09QX0RPV04pIHsKIAkJCWF0b21pY19zZXQoJnZoYS0+bG9vcF9zdGF0ZSwgTE9PUF9ET1dOKTsKIAkJCXFsYTJ4MDBfbWFya19hbGxfZGV2aWNlc19sb3N0KHZoYSwgMCk7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodnAsIHR2cCwgJmhhLT52cF9saXN0LCBsaXN0KQotCQkJICAgICAgIHFsYTJ4MDBfbWFya19hbGxfZGV2aWNlc19sb3N0KHZwLCAwKTsKIAkJfSBlbHNlIHsKIAkJCWlmICghYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9kb3duX3RpbWVyKSkKIAkJCQlhdG9taWNfc2V0KCZ2aGEtPmxvb3BfZG93bl90aW1lciwKQEAgLTQyNjQsNyArNDQ3Myw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcnZhbCA9IHFsYTJ4MDBfZndfcmVhZHkoYmFzZV92aGEpOwotCWlmIChxbDJ4bXVsdGlxdWVfdGFnKQorCWlmIChoYS0+ZmxhZ3MuY3B1X2FmZmluaXR5X2VuYWJsZWQpCiAJCXJlcSA9IGhhLT5yZXFfcV9tYXBbMF07CiAJZWxzZQogCQlyZXEgPSB2aGEtPnJlcTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCmluZGV4IDEzMzk2YmUuLmM1Y2NhYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwpAQCAtMzUwLDYgKzM1MCw3IEBACiAJLyogQnVpbGQgY29tbWFuZCBwYWNrZXQgKi8KIAlyZXEtPmN1cnJlbnRfb3V0c3RhbmRpbmdfY21kID0gaGFuZGxlOwogCXJlcS0+b3V0c3RhbmRpbmdfY21kc1toYW5kbGVdID0gc3A7CisJc3AtPmhhbmRsZSA9IGhhbmRsZTsKIAlzcC0+Y21kLT5ob3N0X3NjcmliYmxlID0gKHVuc2lnbmVkIGNoYXIgKikodW5zaWduZWQgbG9uZyloYW5kbGU7CiAJcmVxLT5jbnQgLT0gcmVxX2NudDsKIApAQCAtNzc4LDYgKzc3OSw3IEBACiAJLyogQnVpbGQgY29tbWFuZCBwYWNrZXQuICovCiAJcmVxLT5jdXJyZW50X291dHN0YW5kaW5nX2NtZCA9IGhhbmRsZTsKIAlyZXEtPm91dHN0YW5kaW5nX2NtZHNbaGFuZGxlXSA9IHNwOworCXNwLT5oYW5kbGUgPSBoYW5kbGU7CiAJc3AtPmNtZC0+aG9zdF9zY3JpYmJsZSA9ICh1bnNpZ25lZCBjaGFyICopKHVuc2lnbmVkIGxvbmcpaGFuZGxlOwogCXJlcS0+Y250IC09IHJlcV9jbnQ7CiAKQEAgLTg1Miw5ICs4NTQsMjExIEBACiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHNwLT5mY3BvcnQtPnZoYS0+aHc7CiAJaW50IGFmZmluaXR5ID0gY21kLT5yZXF1ZXN0LT5jcHU7CiAKLQlpZiAocWwyeG11bHRpcXVlX3RhZyAmJiBhZmZpbml0eSA+PSAwICYmCisJaWYgKGhhLT5mbGFncy5jcHVfYWZmaW5pdHlfZW5hYmxlZCAmJiBhZmZpbml0eSA+PSAwICYmCiAJCWFmZmluaXR5IDwgaGEtPm1heF9yc3BfcXVldWVzIC0gMSkKIAkJKnJzcCA9IGhhLT5yc3BfcV9tYXBbYWZmaW5pdHkgKyAxXTsKIAkgZWxzZQogCQkqcnNwID0gaGEtPnJzcF9xX21hcFswXTsKIH0KKworLyogR2VuZXJpYyBDb250cm9sLVNSQiBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLiAqLworCitzdGF0aWMgdm9pZCAqCitxbGEyeDAwX2FsbG9jX2lvY2JzKHNyYl90ICpzcCkKK3sKKwlzY3NpX3FsYV9ob3N0X3QJKnZoYSA9IHNwLT5mY3BvcnQtPnZoYTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlzdHJ1Y3QgcmVxX3F1ZSAqcmVxID0gaGEtPnJlcV9xX21hcFswXTsKKwlkZXZpY2VfcmVnX3QgX19pb21lbSAqcmVnID0gSVNQX1FVRV9SRUcoaGEsIHJlcS0+aWQpOworCXVpbnQzMl90IGluZGV4LCBoYW5kbGU7CisJcmVxdWVzdF90ICpwa3Q7CisJdWludDE2X3QgY250LCByZXFfY250OworCisJcGt0ID0gTlVMTDsKKwlyZXFfY250ID0gMTsKKworCS8qIENoZWNrIGZvciByb29tIGluIG91dHN0YW5kaW5nIGNvbW1hbmQgbGlzdC4gKi8KKwloYW5kbGUgPSByZXEtPmN1cnJlbnRfb3V0c3RhbmRpbmdfY21kOworCWZvciAoaW5kZXggPSAxOyBpbmRleCA8IE1BWF9PVVRTVEFORElOR19DT01NQU5EUzsgaW5kZXgrKykgeworCQloYW5kbGUrKzsKKwkJaWYgKGhhbmRsZSA9PSBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFMpCisJCQloYW5kbGUgPSAxOworCQlpZiAoIXJlcS0+b3V0c3RhbmRpbmdfY21kc1toYW5kbGVdKQorCQkJYnJlYWs7CisJfQorCWlmIChpbmRleCA9PSBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFMpCisJCWdvdG8gcXVldWluZ19lcnJvcjsKKworCS8qIENoZWNrIGZvciByb29tIG9uIHJlcXVlc3QgcXVldWUuICovCisJaWYgKHJlcS0+Y250IDwgcmVxX2NudCkgeworCQlpZiAoaGEtPm1xZW5hYmxlKQorCQkJY250ID0gUkRfUkVHX0RXT1JEKCZyZWctPmlzcDI1bXEucmVxX3Ffb3V0KTsKKwkJZWxzZSBpZiAoSVNfRldJMl9DQVBBQkxFKGhhKSkKKwkJCWNudCA9IFJEX1JFR19EV09SRCgmcmVnLT5pc3AyNC5yZXFfcV9vdXQpOworCQllbHNlCisJCQljbnQgPSBxbGEyeDAwX2RlYm91bmNlX3JlZ2lzdGVyKAorCQkJICAgIElTUF9SRVFfUV9PVVQoaGEsICZyZWctPmlzcCkpOworCisJCWlmICAocmVxLT5yaW5nX2luZGV4IDwgY250KQorCQkJcmVxLT5jbnQgPSBjbnQgLSByZXEtPnJpbmdfaW5kZXg7CisJCWVsc2UKKwkJCXJlcS0+Y250ID0gcmVxLT5sZW5ndGggLQorCQkJICAgIChyZXEtPnJpbmdfaW5kZXggLSBjbnQpOworCX0KKwlpZiAocmVxLT5jbnQgPCByZXFfY250KQorCQlnb3RvIHF1ZXVpbmdfZXJyb3I7CisKKwkvKiBQcmVwIHBhY2tldCAqLworCXJlcS0+Y3VycmVudF9vdXRzdGFuZGluZ19jbWQgPSBoYW5kbGU7CisJcmVxLT5vdXRzdGFuZGluZ19jbWRzW2hhbmRsZV0gPSBzcDsKKwlyZXEtPmNudCAtPSByZXFfY250OworCisJcGt0ID0gcmVxLT5yaW5nX3B0cjsKKwltZW1zZXQocGt0LCAwLCBSRVFVRVNUX0VOVFJZX1NJWkUpOworCXBrdC0+ZW50cnlfY291bnQgPSByZXFfY250OworCXBrdC0+aGFuZGxlID0gaGFuZGxlOworCXNwLT5oYW5kbGUgPSBoYW5kbGU7CisKK3F1ZXVpbmdfZXJyb3I6CisJcmV0dXJuIHBrdDsKK30KKworc3RhdGljIHZvaWQKK3FsYTJ4MDBfc3RhcnRfaW9jYnMoc3JiX3QgKnNwKQoreworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSBzcC0+ZmNwb3J0LT52aGEtPmh3OworCXN0cnVjdCByZXFfcXVlICpyZXEgPSBoYS0+cmVxX3FfbWFwWzBdOworCWRldmljZV9yZWdfdCBfX2lvbWVtICpyZWcgPSBJU1BfUVVFX1JFRyhoYSwgcmVxLT5pZCk7CisJc3RydWN0IGRldmljZV9yZWdfMnh4eCBfX2lvbWVtICppb3JlZyA9ICZoYS0+aW9iYXNlLT5pc3A7CisKKwkvKiBBZGp1c3QgcmluZyBpbmRleC4gKi8KKwlyZXEtPnJpbmdfaW5kZXgrKzsKKwlpZiAocmVxLT5yaW5nX2luZGV4ID09IHJlcS0+bGVuZ3RoKSB7CisJCXJlcS0+cmluZ19pbmRleCA9IDA7CisJCXJlcS0+cmluZ19wdHIgPSByZXEtPnJpbmc7CisJfSBlbHNlCisJCXJlcS0+cmluZ19wdHIrKzsKKworCS8qIFNldCBjaGlwIG5ldyByaW5nIGluZGV4LiAqLworCWlmIChoYS0+bXFlbmFibGUpIHsKKwkJV1JUX1JFR19EV09SRCgmcmVnLT5pc3AyNW1xLnJlcV9xX2luLCByZXEtPnJpbmdfaW5kZXgpOworCQlSRF9SRUdfRFdPUkQoJmlvcmVnLT5oY2NyKTsKKwl9IGVsc2UgaWYgKElTX0ZXSTJfQ0FQQUJMRShoYSkpIHsKKwkJV1JUX1JFR19EV09SRCgmcmVnLT5pc3AyNC5yZXFfcV9pbiwgcmVxLT5yaW5nX2luZGV4KTsKKwkJUkRfUkVHX0RXT1JEX1JFTEFYRUQoJnJlZy0+aXNwMjQucmVxX3FfaW4pOworCX0gZWxzZSB7CisJCVdSVF9SRUdfV09SRChJU1BfUkVRX1FfSU4oaGEsICZyZWctPmlzcCksIHJlcS0+cmluZ19pbmRleCk7CisJCVJEX1JFR19XT1JEX1JFTEFYRUQoSVNQX1JFUV9RX0lOKGhhLCAmcmVnLT5pc3ApKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitxbGEyNHh4X2xvZ2luX2lvY2Ioc3JiX3QgKnNwLCBzdHJ1Y3QgbG9naW9fZW50cnlfMjR4eCAqbG9naW8pCit7CisJc3RydWN0IHNyYl9sb2dpbyAqbGlvID0gc3AtPmN0eDsKKworCWxvZ2lvLT5lbnRyeV90eXBlID0gTE9HSU5PVVRfUE9SVF9JT0NCX1RZUEU7CisJbG9naW8tPmNvbnRyb2xfZmxhZ3MgPSBjcHVfdG9fbGUxNihMQ0ZfQ09NTUFORF9QTE9HSSk7CisJaWYgKGxpby0+ZmxhZ3MgJiBTUkJfTE9HSU5fQ09ORF9QTE9HSSkKKwkJbG9naW8tPmNvbnRyb2xfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoTENGX0NPTkRfUExPR0kpOworCWlmIChsaW8tPmZsYWdzICYgU1JCX0xPR0lOX1NLSVBfUFJMSSkKKwkJbG9naW8tPmNvbnRyb2xfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoTENGX1NLSVBfUFJMSSk7CisJbG9naW8tPm5wb3J0X2hhbmRsZSA9IGNwdV90b19sZTE2KHNwLT5mY3BvcnQtPmxvb3BfaWQpOworCWxvZ2lvLT5wb3J0X2lkWzBdID0gc3AtPmZjcG9ydC0+ZF9pZC5iLmFsX3BhOworCWxvZ2lvLT5wb3J0X2lkWzFdID0gc3AtPmZjcG9ydC0+ZF9pZC5iLmFyZWE7CisJbG9naW8tPnBvcnRfaWRbMl0gPSBzcC0+ZmNwb3J0LT5kX2lkLmIuZG9tYWluOworCWxvZ2lvLT52cF9pbmRleCA9IHNwLT5mY3BvcnQtPnZwX2lkeDsKK30KKworc3RhdGljIHZvaWQKK3FsYTJ4MDBfbG9naW5faW9jYihzcmJfdCAqc3AsIHN0cnVjdCBtYnhfZW50cnkgKm1ieCkKK3sKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gc3AtPmZjcG9ydC0+dmhhLT5odzsKKwlzdHJ1Y3Qgc3JiX2xvZ2lvICpsaW8gPSBzcC0+Y3R4OworCXVpbnQxNl90IG9wdHM7CisKKwltYngtPmVudHJ5X3R5cGUgPSBNQlhfSU9DQl9UWVBFOzsKKwlTRVRfVEFSR0VUX0lEKGhhLCBtYngtPmxvb3BfaWQsIHNwLT5mY3BvcnQtPmxvb3BfaWQpOworCW1ieC0+bWIwID0gY3B1X3RvX2xlMTYoTUJDX0xPR0lOX0ZBQlJJQ19QT1JUKTsKKwlvcHRzID0gbGlvLT5mbGFncyAmIFNSQl9MT0dJTl9DT05EX1BMT0dJID8gQklUXzA6IDA7CisJb3B0cyB8PSBsaW8tPmZsYWdzICYgU1JCX0xPR0lOX1NLSVBfUFJMSSA/IEJJVF8xOiAwOworCWlmIChIQVNfRVhURU5ERURfSURTKGhhKSkgeworCQltYngtPm1iMSA9IGNwdV90b19sZTE2KHNwLT5mY3BvcnQtPmxvb3BfaWQpOworCQltYngtPm1iMTAgPSBjcHVfdG9fbGUxNihvcHRzKTsKKwl9IGVsc2UgeworCQltYngtPm1iMSA9IGNwdV90b19sZTE2KChzcC0+ZmNwb3J0LT5sb29wX2lkIDw8IDgpIHwgb3B0cyk7CisJfQorCW1ieC0+bWIyID0gY3B1X3RvX2xlMTYoc3AtPmZjcG9ydC0+ZF9pZC5iLmRvbWFpbik7CisJbWJ4LT5tYjMgPSBjcHVfdG9fbGUxNihzcC0+ZmNwb3J0LT5kX2lkLmIuYXJlYSA8PCA4IHwKKwkgICAgc3AtPmZjcG9ydC0+ZF9pZC5iLmFsX3BhKTsKKwltYngtPm1iOSA9IGNwdV90b19sZTE2KHNwLT5mY3BvcnQtPnZwX2lkeCk7Cit9CisKK3N0YXRpYyB2b2lkCitxbGEyNHh4X2xvZ291dF9pb2NiKHNyYl90ICpzcCwgc3RydWN0IGxvZ2lvX2VudHJ5XzI0eHggKmxvZ2lvKQoreworCWxvZ2lvLT5lbnRyeV90eXBlID0gTE9HSU5PVVRfUE9SVF9JT0NCX1RZUEU7CisJbG9naW8tPmNvbnRyb2xfZmxhZ3MgPQorCSAgICBjcHVfdG9fbGUxNihMQ0ZfQ09NTUFORF9MT0dPfExDRl9JTVBMX0xPR08pOworCWxvZ2lvLT5ucG9ydF9oYW5kbGUgPSBjcHVfdG9fbGUxNihzcC0+ZmNwb3J0LT5sb29wX2lkKTsKKwlsb2dpby0+cG9ydF9pZFswXSA9IHNwLT5mY3BvcnQtPmRfaWQuYi5hbF9wYTsKKwlsb2dpby0+cG9ydF9pZFsxXSA9IHNwLT5mY3BvcnQtPmRfaWQuYi5hcmVhOworCWxvZ2lvLT5wb3J0X2lkWzJdID0gc3AtPmZjcG9ydC0+ZF9pZC5iLmRvbWFpbjsKKwlsb2dpby0+dnBfaW5kZXggPSBzcC0+ZmNwb3J0LT52cF9pZHg7Cit9CisKK3N0YXRpYyB2b2lkCitxbGEyeDAwX2xvZ291dF9pb2NiKHNyYl90ICpzcCwgc3RydWN0IG1ieF9lbnRyeSAqbWJ4KQoreworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSBzcC0+ZmNwb3J0LT52aGEtPmh3OworCisJbWJ4LT5lbnRyeV90eXBlID0gTUJYX0lPQ0JfVFlQRTs7CisJU0VUX1RBUkdFVF9JRChoYSwgbWJ4LT5sb29wX2lkLCBzcC0+ZmNwb3J0LT5sb29wX2lkKTsKKwltYngtPm1iMCA9IGNwdV90b19sZTE2KE1CQ19MT0dPVVRfRkFCUklDX1BPUlQpOworCW1ieC0+bWIxID0gSEFTX0VYVEVOREVEX0lEUyhoYSkgPworCSAgICBjcHVfdG9fbGUxNihzcC0+ZmNwb3J0LT5sb29wX2lkKToKKwkgICAgY3B1X3RvX2xlMTYoc3AtPmZjcG9ydC0+bG9vcF9pZCA8PCA4KTsKKwltYngtPm1iMiA9IGNwdV90b19sZTE2KHNwLT5mY3BvcnQtPmRfaWQuYi5kb21haW4pOworCW1ieC0+bWIzID0gY3B1X3RvX2xlMTYoc3AtPmZjcG9ydC0+ZF9pZC5iLmFyZWEgPDwgOCB8CisJICAgIHNwLT5mY3BvcnQtPmRfaWQuYi5hbF9wYSk7CisJbWJ4LT5tYjkgPSBjcHVfdG9fbGUxNihzcC0+ZmNwb3J0LT52cF9pZHgpOworCS8qIEltcGxpY2l0OiBtYngtPm1ieDEwID0gMC4gKi8KK30KKworaW50CitxbGEyeDAwX3N0YXJ0X3NwKHNyYl90ICpzcCkKK3sKKwlpbnQgcnZhbDsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gc3AtPmZjcG9ydC0+dmhhLT5odzsKKwl2b2lkICpwa3Q7CisJc3RydWN0IHNyYl9jdHggKmN0eCA9IHNwLT5jdHg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOworCXNwaW5fbG9ja19pcnFzYXZlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCXBrdCA9IHFsYTJ4MDBfYWxsb2NfaW9jYnMoc3ApOworCWlmICghcGt0KQorCQlnb3RvIGRvbmU7CisKKwlydmFsID0gUUxBX1NVQ0NFU1M7CisJc3dpdGNoIChjdHgtPnR5cGUpIHsKKwljYXNlIFNSQl9MT0dJTl9DTUQ6CisJCUlTX0ZXSTJfQ0FQQUJMRShoYSkgPworCQkgICAgcWxhMjR4eF9sb2dpbl9pb2NiKHNwLCBwa3QpOgorCQkgICAgcWxhMngwMF9sb2dpbl9pb2NiKHNwLCBwa3QpOworCQlicmVhazsKKwljYXNlIFNSQl9MT0dPVVRfQ01EOgorCQlJU19GV0kyX0NBUEFCTEUoaGEpID8KKwkJICAgIHFsYTI0eHhfbG9nb3V0X2lvY2Ioc3AsIHBrdCk6CisJCSAgICBxbGEyeDAwX2xvZ291dF9pb2NiKHNwLCBwa3QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwl3bWIoKTsKKwlxbGEyeDAwX3N0YXJ0X2lvY2JzKHNwKTsKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcnZhbDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwppbmRleCAyNDVlN2FmLi5iMjBhNzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCkBAIC01OTgsOSArNTk4LDU0IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNQkFfUE9SVF9VUERBVEU6CQkvKiBQb3J0IGRhdGFiYXNlIHVwZGF0ZSAqLwotCQkvKiBPbmx5IGhhbmRsZSBTQ05zIGZvciBvdXIgVnBvcnQgaW5kZXguICovCi0JCWlmICh2aGEtPnZwX2lkeCAmJiB2aGEtPnZwX2lkeCAhPSAobWJbM10gJiAweGZmKSkKKwkJLyoKKwkJICogSGFuZGxlIG9ubHkgZ2xvYmFsIGFuZCB2bi1wb3J0IHVwZGF0ZSBldmVudHMKKwkJICoKKwkJICogUmVsZXZhbnQgaW5wdXRzOgorCQkgKiBtYlsxXSA9IE5fUG9ydCBoYW5kbGUgb2YgY2hhbmdlZCBwb3J0CisJCSAqIE9SIDB4ZmZmZiBmb3IgZ2xvYmFsIGV2ZW50CisJCSAqIG1iWzJdID0gTmV3IGxvZ2luIHN0YXRlCisJCSAqIDcgPSBQb3J0IGxvZ2dlZCBvdXQKKwkJICogbWJbM10gPSBMU0IgaXMgdnBfaWR4LCAweGZmID0gYWxsIHZwcworCQkgKgorCQkgKiBTa2lwIHByb2Nlc3NpbmcgaWY6CisJCSAqICAgICAgIEV2ZW50IGlzIGdsb2JhbCwgdnBfaWR4IGlzIE5PVCBhbGwgdnBzLAorCQkgKiAgICAgICAgICAgdnBfaWR4IGRvZXMgbm90IG1hdGNoCisJCSAqICAgICAgIEV2ZW50IGlzIG5vdCBnbG9iYWwsIHZwX2lkeCBkb2VzIG5vdCBtYXRjaAorCQkgKi8KKwkJaWYgKChtYlsxXSA9PSAweGZmZmYgJiYgKG1iWzNdICYgMHhmZikgIT0gMHhmZikKKwkJCXx8IChtYlsxXSAhPSAweGZmZmYpKSB7CisJCQlpZiAodmhhLT52cF9pZHggIT0gKG1iWzNdICYgMHhmZikpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBHbG9iYWwgZXZlbnQgLS0gcG9ydCBsb2dvdXQgb3IgcG9ydCB1bmF2YWlsYWJsZS4gKi8KKwkJaWYgKG1iWzFdID09IDB4ZmZmZiAmJiBtYlsyXSA9PSAweDcpIHsKKwkJCURFQlVHMihwcmludGsoInNjc2koJWxkKTogQXN5bmNocm9ub3VzIFBPUlQgVVBEQVRFLlxuIiwKKwkJCSAgICB2aGEtPmhvc3Rfbm8pKTsKKwkJCURFQlVHKHByaW50ayhLRVJOX0lORk8KKwkJCSAgICAic2NzaSglbGQpOiBQb3J0IHVuYXZhaWxhYmxlICUwNHggJTA0eCAlMDR4LlxuIiwKKwkJCSAgICB2aGEtPmhvc3Rfbm8sIG1iWzFdLCBtYlsyXSwgbWJbM10pKTsKKworCQkJaWYgKGF0b21pY19yZWFkKCZ2aGEtPmxvb3Bfc3RhdGUpICE9IExPT1BfRE9XTikgeworCQkJCWF0b21pY19zZXQoJnZoYS0+bG9vcF9zdGF0ZSwgTE9PUF9ET1dOKTsKKwkJCQlhdG9taWNfc2V0KCZ2aGEtPmxvb3BfZG93bl90aW1lciwKKwkJCQkgICAgTE9PUF9ET1dOX1RJTUUpOworCQkJCXZoYS0+ZGV2aWNlX2ZsYWdzIHw9IERGTEdfTk9fQ0FCTEU7CisJCQkJcWxhMngwMF9tYXJrX2FsbF9kZXZpY2VzX2xvc3QodmhhLCAxKTsKKwkJCX0KKworCQkJaWYgKHZoYS0+dnBfaWR4KSB7CisJCQkJYXRvbWljX3NldCgmdmhhLT52cF9zdGF0ZSwgVlBfRkFJTEVEKTsKKwkJCQlmY192cG9ydF9zZXRfc3RhdGUodmhhLT5mY192cG9ydCwKKwkJCQkgICAgRkNfVlBPUlRfRkFJTEVEKTsKKwkJCQlxbGEyeDAwX21hcmtfYWxsX2RldmljZXNfbG9zdCh2aGEsIDEpOworCQkJfQorCisJCQl2aGEtPmZsYWdzLm1hbmFnZW1lbnRfc2VydmVyX2xvZ2dlZF9pbiA9IDA7CisJCQloYS0+bGlua19kYXRhX3JhdGUgPSBQT1JUX1NQRUVEX1VOS05PV047CiAJCQlicmVhazsKKwkJfQogCiAJCS8qCiAJCSAqIElmIFBPUlQgVVBEQVRFIGlzIGdsb2JhbCAocmVjZWl2ZWQgTElQX09DQ1VSUkVEL0xJUF9SRVNFVApAQCAtNjQwLDggKzY4NSw5IEBACiAJCWlmICh2aGEtPnZwX2lkeCAmJiB0ZXN0X2JpdChWUF9TQ1JfTkVFREVELCAmdmhhLT52cF9mbGFncykpCiAJCQlicmVhazsKIAkJLyogT25seSBoYW5kbGUgU0NOcyBmb3Igb3VyIFZwb3J0IGluZGV4LiAqLwotCQlpZiAodmhhLT52cF9pZHggJiYgdmhhLT52cF9pZHggIT0gKG1iWzNdICYgMHhmZikpCisJCWlmIChoYS0+ZmxhZ3MubnBpdl9zdXBwb3J0ZWQgJiYgdmhhLT52cF9pZHggIT0gKG1iWzNdICYgMHhmZikpCiAJCQlicmVhazsKKwogCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEFzeW5jaHJvbm91cyBSU0NSIFVQREFURS5cbiIsCiAJCSAgICB2aGEtPmhvc3Rfbm8pKTsKIAkJREVCVUcocHJpbnRrKEtFUk5fSU5GTwpAQCAtODc0LDYgKzkyMCwyNDkgQEAKIAl9CiB9CiAKK3N0YXRpYyBzcmJfdCAqCitxbGEyeDAwX2dldF9zcF9mcm9tX2hhbmRsZShzY3NpX3FsYV9ob3N0X3QgKnZoYSwgY29uc3QgY2hhciAqZnVuYywKKyAgICBzdHJ1Y3QgcmVxX3F1ZSAqcmVxLCB2b2lkICppb2NiKQoreworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXN0c19lbnRyeV90ICpwa3QgPSBpb2NiOworCXNyYl90ICpzcCA9IE5VTEw7CisJdWludDE2X3QgaW5kZXg7CisKKwlpbmRleCA9IExTVyhwa3QtPmhhbmRsZSk7CisJaWYgKGluZGV4ID49IE1BWF9PVVRTVEFORElOR19DT01NQU5EUykgeworCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiJXM6IEludmFsaWQgY29tcGxldGlvbiBoYW5kbGUgKCV4KS5cbiIsIGZ1bmMsIGluZGV4KTsKKwkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQlnb3RvIGRvbmU7CisJfQorCXNwID0gcmVxLT5vdXRzdGFuZGluZ19jbWRzW2luZGV4XTsKKwlpZiAoIXNwKSB7CisJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICIlczogSW52YWxpZCBjb21wbGV0aW9uIGhhbmRsZSAoJXgpIC0tIHRpbWVkLW91dC5cbiIsIGZ1bmMsCisJCSAgICBpbmRleCk7CisJCXJldHVybiBzcDsKKwl9CisJaWYgKHNwLT5oYW5kbGUgIT0gaW5kZXgpIHsKKwkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgIiVzOiBTUkIgaGFuZGxlICgleCkgbWlzbWF0Y2ggJXguXG4iLCBmdW5jLCBzcC0+aGFuZGxlLAorCQkgICAgaW5kZXgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmVxLT5vdXRzdGFuZGluZ19jbWRzW2luZGV4XSA9IE5VTEw7Citkb25lOgorCXJldHVybiBzcDsKK30KKworc3RhdGljIHZvaWQKK3FsYTJ4MDBfbWJ4X2lvY2JfZW50cnkoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHN0cnVjdCByZXFfcXVlICpyZXEsCisgICAgc3RydWN0IG1ieF9lbnRyeSAqbWJ4KQoreworCWNvbnN0IGNoYXIgZnVuY1tdID0gIk1CWC1JT0NCIjsKKwljb25zdCBjaGFyICp0eXBlOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCWZjX3BvcnRfdCAqZmNwb3J0OworCXNyYl90ICpzcDsKKwlzdHJ1Y3Qgc3JiX2xvZ2lvICpsaW87CisJdWludDE2X3QgZGF0YVsyXTsKKworCXNwID0gcWxhMngwMF9nZXRfc3BfZnJvbV9oYW5kbGUodmhhLCBmdW5jLCByZXEsIG1ieCk7CisJaWYgKCFzcCkKKwkJcmV0dXJuOworCisJdHlwZSA9IE5VTEw7CisJbGlvID0gc3AtPmN0eDsKKwlzd2l0Y2ggKGxpby0+Y3R4LnR5cGUpIHsKKwljYXNlIFNSQl9MT0dJTl9DTUQ6CisJCXR5cGUgPSAibG9naW4iOworCQlicmVhazsKKwljYXNlIFNSQl9MT0dPVVRfQ01EOgorCQl0eXBlID0gImxvZ291dCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICIlczogVW5yZWNvZ25pemVkIFNSQjogKCVwKSB0eXBlPSVkLlxuIiwgZnVuYywgc3AsCisJCSAgICBsaW8tPmN0eC50eXBlKTsKKwkJcmV0dXJuOworCX0KKworCWRlbF90aW1lcigmbGlvLT5jdHgudGltZXIpOworCWZjcG9ydCA9IHNwLT5mY3BvcnQ7CisKKwlkYXRhWzBdID0gZGF0YVsxXSA9IDA7CisJaWYgKG1ieC0+ZW50cnlfc3RhdHVzKSB7CisJCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBlcnJvciBlbnRyeSAtIGVudHJ5LXN0YXR1cz0leCAiCisJCSAgICAic3RhdHVzPSV4IHN0YXRlLWZsYWc9JXggc3RhdHVzLWZsYWdzPSV4LlxuIiwKKwkJICAgIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLAorCQkgICAgbWJ4LT5lbnRyeV9zdGF0dXMsIGxlMTZfdG9fY3B1KG1ieC0+c3RhdHVzKSwKKwkJICAgIGxlMTZfdG9fY3B1KG1ieC0+c3RhdGVfZmxhZ3MpLAorCQkgICAgbGUxNl90b19jcHUobWJ4LT5zdGF0dXNfZmxhZ3MpKSk7CisJCURFQlVHMihxbGEyeDAwX2R1bXBfYnVmZmVyKCh1aW50OF90ICopbWJ4LCBzaXplb2YoKm1ieCkpKTsKKworCQlkYXRhWzBdID0gTUJTX0NPTU1BTkRfRVJST1I7CisJCWRhdGFbMV0gPSBsaW8tPmZsYWdzICYgU1JCX0xPR0lOX1JFVFJJRUQgPworCQkgICAgUUxBX0xPR0lPX0xPR0lOX1JFVFJJRUQ6IDA7CisJCWdvdG8gZG9uZV9wb3N0X2xvZ2lvX2RvbmVfd29yazsKKwl9CisKKwlpZiAoIW1ieC0+c3RhdHVzICYmIGxlMTZfdG9fY3B1KG1ieC0+bWIwKSA9PSBNQlNfQ09NTUFORF9DT01QTEVURSkgeworCQlERUJVRzIocHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICJzY3NpKCVsZDoleCk6IEFzeW5jLSVzIGNvbXBsZXRlIC0gbWJ4MT0leC5cbiIsCisJCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKKwkJICAgIGxlMTZfdG9fY3B1KG1ieC0+bWIxKSkpOworCisJCWRhdGFbMF0gPSBNQlNfQ09NTUFORF9DT01QTEVURTsKKwkJaWYgKGxpby0+Y3R4LnR5cGUgPT0gU1JCX0xPR0lOX0NNRCAmJiBsZTE2X3RvX2NwdShtYngtPm1iMSkgJiBCSVRfMSkKKwkJCWZjcG9ydC0+ZmxhZ3MgfD0gRkNGX0ZDUDJfREVWSUNFOworCisJCWdvdG8gZG9uZV9wb3N0X2xvZ2lvX2RvbmVfd29yazsKKwl9CisKKwlkYXRhWzBdID0gbGUxNl90b19jcHUobWJ4LT5tYjApOworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgTUJTX1BPUlRfSURfVVNFRDoKKwkJZGF0YVsxXSA9IGxlMTZfdG9fY3B1KG1ieC0+bWIxKTsKKwkJYnJlYWs7CisJY2FzZSBNQlNfTE9PUF9JRF9VU0VEOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYXRhWzBdID0gTUJTX0NPTU1BTkRfRVJST1I7CisJCWRhdGFbMV0gPSBsaW8tPmZsYWdzICYgU1JCX0xPR0lOX1JFVFJJRUQgPworCQkgICAgUUxBX0xPR0lPX0xPR0lOX1JFVFJJRUQ6IDA7CisJCWJyZWFrOworCX0KKworCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCisJICAgICJzY3NpKCVsZDoleCk6IEFzeW5jLSVzIGZhaWxlZCAtIHN0YXR1cz0leCBtYjA9JXggbWIxPSV4IG1iMj0leCAiCisJICAgICJtYjY9JXggbWI3PSV4LlxuIiwKKwkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsIGxlMTZfdG9fY3B1KG1ieC0+c3RhdHVzKSwKKwkgICAgbGUxNl90b19jcHUobWJ4LT5tYjApLCBsZTE2X3RvX2NwdShtYngtPm1iMSksCisJICAgIGxlMTZfdG9fY3B1KG1ieC0+bWIyKSwgbGUxNl90b19jcHUobWJ4LT5tYjYpLAorCSAgICBsZTE2X3RvX2NwdShtYngtPm1iNykpKTsKKworZG9uZV9wb3N0X2xvZ2lvX2RvbmVfd29yazoKKwlsaW8tPmN0eC50eXBlID09IFNSQl9MT0dJTl9DTUQgPworCSAgICBxbGEyeDAwX3Bvc3RfYXN5bmNfbG9naW5fZG9uZV93b3JrKGZjcG9ydC0+dmhhLCBmY3BvcnQsIGRhdGEpOgorCSAgICBxbGEyeDAwX3Bvc3RfYXN5bmNfbG9nb3V0X2RvbmVfd29yayhmY3BvcnQtPnZoYSwgZmNwb3J0LCBkYXRhKTsKKworCWxpby0+Y3R4LmZyZWUoc3ApOworfQorCitzdGF0aWMgdm9pZAorcWxhMjR4eF9sb2dpb19lbnRyeShzY3NpX3FsYV9ob3N0X3QgKnZoYSwgc3RydWN0IHJlcV9xdWUgKnJlcSwKKyAgICBzdHJ1Y3QgbG9naW9fZW50cnlfMjR4eCAqbG9naW8pCit7CisJY29uc3QgY2hhciBmdW5jW10gPSAiTE9HSU8tSU9DQiI7CisJY29uc3QgY2hhciAqdHlwZTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlmY19wb3J0X3QgKmZjcG9ydDsKKwlzcmJfdCAqc3A7CisJc3RydWN0IHNyYl9sb2dpbyAqbGlvOworCXVpbnQxNl90IGRhdGFbMl07CisJdWludDMyX3QgaW9wWzJdOworCisJc3AgPSBxbGEyeDAwX2dldF9zcF9mcm9tX2hhbmRsZSh2aGEsIGZ1bmMsIHJlcSwgbG9naW8pOworCWlmICghc3ApCisJCXJldHVybjsKKworCXR5cGUgPSBOVUxMOworCWxpbyA9IHNwLT5jdHg7CisJc3dpdGNoIChsaW8tPmN0eC50eXBlKSB7CisJY2FzZSBTUkJfTE9HSU5fQ01EOgorCQl0eXBlID0gImxvZ2luIjsKKwkJYnJlYWs7CisJY2FzZSBTUkJfTE9HT1VUX0NNRDoKKwkJdHlwZSA9ICJsb2dvdXQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiJXM6IFVucmVjb2duaXplZCBTUkI6ICglcCkgdHlwZT0lZC5cbiIsIGZ1bmMsIHNwLAorCQkgICAgbGlvLT5jdHgudHlwZSk7CisJCXJldHVybjsKKwl9CisKKwlkZWxfdGltZXIoJmxpby0+Y3R4LnRpbWVyKTsKKwlmY3BvcnQgPSBzcC0+ZmNwb3J0OworCisJZGF0YVswXSA9IGRhdGFbMV0gPSAwOworCWlmIChsb2dpby0+ZW50cnlfc3RhdHVzKSB7CisJCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBlcnJvciBlbnRyeSAtIGVudHJ5LXN0YXR1cz0leC5cbiIsCisJCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKKwkJICAgIGxvZ2lvLT5lbnRyeV9zdGF0dXMpKTsKKwkJREVCVUcyKHFsYTJ4MDBfZHVtcF9idWZmZXIoKHVpbnQ4X3QgKilsb2dpbywgc2l6ZW9mKCpsb2dpbykpKTsKKworCQlkYXRhWzBdID0gTUJTX0NPTU1BTkRfRVJST1I7CisJCWRhdGFbMV0gPSBsaW8tPmZsYWdzICYgU1JCX0xPR0lOX1JFVFJJRUQgPworCQkgICAgUUxBX0xPR0lPX0xPR0lOX1JFVFJJRUQ6IDA7CisJCWdvdG8gZG9uZV9wb3N0X2xvZ2lvX2RvbmVfd29yazsKKwl9CisKKwlpZiAobGUxNl90b19jcHUobG9naW8tPmNvbXBfc3RhdHVzKSA9PSBDU19DT01QTEVURSkgeworCQlERUJVRzIocHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICJzY3NpKCVsZDoleCk6IEFzeW5jLSVzIGNvbXBsZXRlIC0gaW9wMD0leC5cbiIsCisJCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKKwkJICAgIGxlMzJfdG9fY3B1KGxvZ2lvLT5pb19wYXJhbWV0ZXJbMF0pKSk7CisKKwkJZGF0YVswXSA9IE1CU19DT01NQU5EX0NPTVBMRVRFOworCQlpZiAobGlvLT5jdHgudHlwZSA9PSBTUkJfTE9HT1VUX0NNRCkKKwkJCWdvdG8gZG9uZV9wb3N0X2xvZ2lvX2RvbmVfd29yazsKKworCQlpb3BbMF0gPSBsZTMyX3RvX2NwdShsb2dpby0+aW9fcGFyYW1ldGVyWzBdKTsKKwkJaWYgKGlvcFswXSAmIEJJVF80KSB7CisJCQlmY3BvcnQtPnBvcnRfdHlwZSA9IEZDVF9UQVJHRVQ7CisJCQlpZiAoaW9wWzBdICYgQklUXzgpCisJCQkJZmNwb3J0LT5mbGFncyB8PSBGQ0ZfRkNQMl9ERVZJQ0U7CisJCX0KKwkJaWYgKGlvcFswXSAmIEJJVF81KQorCQkJZmNwb3J0LT5wb3J0X3R5cGUgPSBGQ1RfSU5JVElBVE9SOworCQlpZiAobG9naW8tPmlvX3BhcmFtZXRlcls3XSB8fCBsb2dpby0+aW9fcGFyYW1ldGVyWzhdKQorCQkJZmNwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyB8PSBGQ19DT1NfQ0xBU1MyOworCQlpZiAobG9naW8tPmlvX3BhcmFtZXRlcls5XSB8fCBsb2dpby0+aW9fcGFyYW1ldGVyWzEwXSkKKwkJCWZjcG9ydC0+c3VwcG9ydGVkX2NsYXNzZXMgfD0gRkNfQ09TX0NMQVNTMzsKKworCQlnb3RvIGRvbmVfcG9zdF9sb2dpb19kb25lX3dvcms7CisJfQorCisJaW9wWzBdID0gbGUzMl90b19jcHUobG9naW8tPmlvX3BhcmFtZXRlclswXSk7CisJaW9wWzFdID0gbGUzMl90b19jcHUobG9naW8tPmlvX3BhcmFtZXRlclsxXSk7CisJc3dpdGNoIChpb3BbMF0pIHsKKwljYXNlIExTQ19TQ09ERV9QT1JUSURfVVNFRDoKKwkJZGF0YVswXSA9IE1CU19QT1JUX0lEX1VTRUQ7CisJCWRhdGFbMV0gPSBMU1coaW9wWzFdKTsKKwkJYnJlYWs7CisJY2FzZSBMU0NfU0NPREVfTlBPUlRfVVNFRDoKKwkJZGF0YVswXSA9IE1CU19MT09QX0lEX1VTRUQ7CisJCWJyZWFrOworCWNhc2UgTFNDX1NDT0RFX0NNRF9GQUlMRUQ6CisJCWlmICgoaW9wWzFdICYgMHhmZikgPT0gMHgwNSkgeworCQkJZGF0YVswXSA9IE1CU19OT1RfTE9HR0VEX0lOOworCQkJYnJlYWs7CisJCX0KKwkJLyogRmFsbCB0aHJvdWdoLiAqLworCWRlZmF1bHQ6CisJCWRhdGFbMF0gPSBNQlNfQ09NTUFORF9FUlJPUjsKKwkJZGF0YVsxXSA9IGxpby0+ZmxhZ3MgJiBTUkJfTE9HSU5fUkVUUklFRCA/CisJCSAgICBRTEFfTE9HSU9fTE9HSU5fUkVUUklFRDogMDsKKwkJYnJlYWs7CisJfQorCisJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKKwkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtJXMgZmFpbGVkIC0gY29tcD0leCBpb3AwPSV4IGlvcDE9JXguXG4iLAorCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKKwkgICAgbGUxNl90b19jcHUobG9naW8tPmNvbXBfc3RhdHVzKSwKKwkgICAgbGUzMl90b19jcHUobG9naW8tPmlvX3BhcmFtZXRlclswXSksCisJICAgIGxlMzJfdG9fY3B1KGxvZ2lvLT5pb19wYXJhbWV0ZXJbMV0pKSk7CisKK2RvbmVfcG9zdF9sb2dpb19kb25lX3dvcms6CisJbGlvLT5jdHgudHlwZSA9PSBTUkJfTE9HSU5fQ01EID8KKwkgICAgcWxhMngwMF9wb3N0X2FzeW5jX2xvZ2luX2RvbmVfd29yayhmY3BvcnQtPnZoYSwgZmNwb3J0LCBkYXRhKToKKwkgICAgcWxhMngwMF9wb3N0X2FzeW5jX2xvZ291dF9kb25lX3dvcmsoZmNwb3J0LT52aGEsIGZjcG9ydCwgZGF0YSk7CisKKwlsaW8tPmN0eC5mcmVlKHNwKTsKK30KKwogLyoqCiAgKiBxbGEyeDAwX3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUoKSAtIFByb2Nlc3MgcmVzcG9uc2UgcXVldWUgZW50cmllcy4KICAqIEBoYTogU0NTSSBkcml2ZXIgSEEgY29udGV4dApAQCAtOTM1LDYgKzEyMjQsOSBAQAogCQljYXNlIFNUQVRVU19DT05UX1RZUEU6CiAJCQlxbGEyeDAwX3N0YXR1c19jb250X2VudHJ5KHJzcCwgKHN0c19jb250X2VudHJ5X3QgKilwa3QpOwogCQkJYnJlYWs7CisJCWNhc2UgTUJYX0lPQ0JfVFlQRToKKwkJCXFsYTJ4MDBfbWJ4X2lvY2JfZW50cnkodmhhLCByc3AtPnJlcSwKKwkJCSAgICAoc3RydWN0IG1ieF9lbnRyeSAqKXBrdCk7CiAJCWRlZmF1bHQ6CiAJCQkvKiBUeXBlIE5vdCBTdXBwb3J0ZWQuICovCiAJCQlERUJVRzQocHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMTIyMyw2ICsxNTE1LDcgQEAKIAkJCQkJY3AtPmRldmljZS0+aWQsIGNwLT5kZXZpY2UtPmx1biwgcmVzaWQsCiAJCQkJCXNjc2lfYnVmZmxlbihjcCkpKTsKIAorCQkJCXNjc2lfc2V0X3Jlc2lkKGNwLCByZXNpZCk7CiAJCQkJY3AtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTE1NDQsNiArMTgzNywxMCBAQAogCQkJcWxhMjR4eF9yZXBvcnRfaWRfYWNxdWlzaXRpb24odmhhLAogCQkJICAgIChzdHJ1Y3QgdnBfcnB0X2lkX2VudHJ5XzI0eHggKilwa3QpOwogCQkJYnJlYWs7CisJCWNhc2UgTE9HSU5PVVRfUE9SVF9JT0NCX1RZUEU6CisJCQlxbGEyNHh4X2xvZ2lvX2VudHJ5KHZoYSwgcnNwLT5yZXEsCisJCQkgICAgKHN0cnVjdCBsb2dpb19lbnRyeV8yNHh4ICopcGt0KTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogVHlwZSBOb3QgU3VwcG9ydGVkLiAqLwogCQkJREVCVUc0KHByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTE3MjMsOCArMjAyMCwxMCBAQAogCiAJdmhhID0gcWxhMjV4eF9nZXRfaG9zdChyc3ApOwogCXFsYTI0eHhfcHJvY2Vzc19yZXNwb25zZV9xdWV1ZSh2aGEsIHJzcCk7Ci0JV1JUX1JFR19EV09SRCgmcmVnLT5oY2NyLCBIQ0NSWF9DTFJfUklTQ19JTlQpOwotCisJaWYgKCFoYS0+bXFlbmFibGUpIHsKKwkJV1JUX1JFR19EV09SRCgmcmVnLT5oY2NyLCBIQ0NSWF9DTFJfUklTQ19JTlQpOworCQlSRF9SRUdfRFdPUkRfUkVMQVhFRCgmcmVnLT5oY2NyKTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxKCZoYS0+aGFyZHdhcmVfbG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKaW5kZXggZmU2OWYzMC4uYjYyMDJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwpAQCAtMTUwNyw3ICsxNTA3LDcgQEAKIAogCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwogCi0JaWYgKHFsMnhtdWx0aXF1ZV90YWcpCisJaWYgKGhhLT5mbGFncy5jcHVfYWZmaW5pdHlfZW5hYmxlZCkKIAkJcmVxID0gaGEtPnJlcV9xX21hcFswXTsKIAllbHNlCiAJCXJlcSA9IHZoYS0+cmVxOwpAQCAtMjMyNCw3ICsyMzI0LDcgQEAKIAl2aGEgPSBmY3BvcnQtPnZoYTsKIAloYSA9IHZoYS0+aHc7CiAJcmVxID0gdmhhLT5yZXE7Ci0JaWYgKHFsMnhtdWx0aXF1ZV90YWcpCisJaWYgKGhhLT5mbGFncy5jcHVfYWZmaW5pdHlfZW5hYmxlZCkKIAkJcnNwID0gaGEtPnJzcF9xX21hcFt0YWcgKyAxXTsKIAllbHNlCiAJCXJzcCA9IHJlcS0+cnNwOwpAQCAtMjc0Niw3ICsyNzQ2LDggQEAKIAlpZiAocnB0aWRfZW50cnktPmZvcm1hdCA9PSAwKSB7CiAJCURFQlVHMTUocHJpbnRrKCIlczpmb3JtYXQgMCA6IHNjc2koJWxkKSBudW1iZXIgb2YgVlBzIHNldHVwICVkLCIKIAkJCSIgbnVtYmVyIG9mIFZQcyBhY3F1aXJlZCAlZFxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubywKLQkJCU1TQihycHRpZF9lbnRyeS0+dnBfY291bnQpLCBMU0IocnB0aWRfZW50cnktPnZwX2NvdW50KSkpOworCQkJTVNCKGxlMTZfdG9fY3B1KHJwdGlkX2VudHJ5LT52cF9jb3VudCkpLAorCQkJTFNCKGxlMTZfdG9fY3B1KHJwdGlkX2VudHJ5LT52cF9jb3VudCkpKSk7CiAJCURFQlVHMTUocHJpbnRrKCIlcyBwcmltYXJ5IHBvcnQgaWQgJTAyeCUwMnglMDJ4XG4iLCBfX2Z1bmNfXywKIAkJCXJwdGlkX2VudHJ5LT5wb3J0X2lkWzJdLCBycHRpZF9lbnRyeS0+cG9ydF9pZFsxXSwKIAkJCXJwdGlkX2VudHJ5LT5wb3J0X2lkWzBdKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKaW5kZXggY2Q3OGM1MC4uNDJiNzk5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYwpAQCAtNDIsNyArNDIsNiBAQAogCiAJc2V0X2JpdCh2cF9pZCwgaGEtPnZwX2lkeF9tYXApOwogCWhhLT5udW1fdmhvc3RzKys7Ci0JaGEtPmN1cl92cG9ydF9jb3VudCsrOwogCXZoYS0+dnBfaWR4ID0gdnBfaWQ7CiAJbGlzdF9hZGRfdGFpbCgmdmhhLT5saXN0LCAmaGEtPnZwX2xpc3QpOwogCW11dGV4X3VubG9jaygmaGEtPnZwb3J0X2xvY2spOwpAQCAtNTgsNyArNTcsNiBAQAogCW11dGV4X2xvY2soJmhhLT52cG9ydF9sb2NrKTsKIAl2cF9pZCA9IHZoYS0+dnBfaWR4OwogCWhhLT5udW1fdmhvc3RzLS07Ci0JaGEtPmN1cl92cG9ydF9jb3VudC0tOwogCWNsZWFyX2JpdCh2cF9pZCwgaGEtPnZwX2lkeF9tYXApOwogCWxpc3RfZGVsKCZ2aGEtPmxpc3QpOwogCW11dGV4X3VubG9jaygmaGEtPnZwb3J0X2xvY2spOwpAQCAtMjM1LDcgKzIzMywxMSBAQAogCQkJYXRvbWljX3NldCgmdmhhLT5sb29wX2Rvd25fdGltZXIsIExPT1BfRE9XTl9USU1FKTsKIAl9CiAKLQkvKiBUbyBleGNsdXNpdmVseSByZXNldCB2cG9ydCwgd2UgbmVlZCB0byBsb2cgaXQgb3V0IGZpcnN0LiovCisJLyoKKwkgKiBUbyBleGNsdXNpdmVseSByZXNldCB2cG9ydCwgd2UgbmVlZCB0byBsb2cgaXQgb3V0IGZpcnN0LiAgTm90ZTogdGhpcworCSAqIGNvbnRyb2xfdnAgY2FuIGZhaWwgaWYgSVNQIHJlc2V0IGlzIGFscmVhZHkgaXNzdWVkLCB0aGlzIGlzCisJICogZXhwZWN0ZWQsIGFzIHRoZSB2cCB3b3VsZCBiZSBhbHJlYWR5IGxvZ2dlZCBvdXQgZHVlIHRvIElTUCByZXNldC4KKwkgKi8KIAlpZiAoIXRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZ2aGEtPmRwY19mbGFncykpCiAJCXFsYTI0eHhfY29udHJvbF92cCh2aGEsIFZDRV9DT01NQU5EX0RJU0FCTEVfVlBTX0xPR09fQUxMKTsKIApAQCAtMjQ3LDE4ICsyNDksMTEgQEAKIHN0YXRpYyBpbnQKIHFsYTJ4MDBfZG9fZHBjX3ZwKHNjc2lfcWxhX2hvc3RfdCAqdmhhKQogewotCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwotCXNjc2lfcWxhX2hvc3RfdCAqYmFzZV92aGEgPSBwY2lfZ2V0X2RydmRhdGEoaGEtPnBkZXYpOworCXFsYTJ4MDBfZG9fd29yayh2aGEpOwogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChWUF9JRFhfQUNRVUlSRUQsICZ2aGEtPnZwX2ZsYWdzKSkgewogCQkvKiBWUCBhY3F1aXJlZC4gY29tcGxldGUgcG9ydCBjb25maWd1cmF0aW9uICovCi0JCWlmIChhdG9taWNfcmVhZCgmYmFzZV92aGEtPmxvb3Bfc3RhdGUpID09IExPT1BfUkVBRFkpIHsKLQkJCXFsYTI0eHhfY29uZmlndXJlX3ZwKHZoYSk7Ci0JCX0gZWxzZSB7Ci0JCQlzZXRfYml0KFZQX0lEWF9BQ1FVSVJFRCwgJnZoYS0+dnBfZmxhZ3MpOwotCQkJc2V0X2JpdChWUF9EUENfTkVFREVELCAmYmFzZV92aGEtPmRwY19mbGFncyk7Ci0JCX0KLQorCQlxbGEyNHh4X2NvbmZpZ3VyZV92cCh2aGEpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTMwOSw2ICszMDQsOSBAQAogCiAJY2xlYXJfYml0KFZQX0RQQ19ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAKKwlpZiAoIShoYS0+Y3VycmVudF90b3BvbG9neSAmIElTUF9DRkdfRikpCisJCXJldHVybjsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cCwgdHZwLCAmaGEtPnZwX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHZwLT52cF9pZHgpCiAJCQlyZXQgPSBxbGEyeDAwX2RvX2RwY192cCh2cCk7CkBAIC00MTMsNiArNDExLDExIEBACiAKIAl2aGEtPmZsYWdzLmluaXRfZG9uZSA9IDE7CiAKKwltdXRleF9sb2NrKCZoYS0+dnBvcnRfbG9jayk7CisJc2V0X2JpdCh2aGEtPnZwX2lkeCwgaGEtPnZwX2lkeF9tYXApOworCWhhLT5jdXJfdnBvcnRfY291bnQrKzsKKwltdXRleF91bmxvY2soJmhhLT52cG9ydF9sb2NrKTsKKwogCXJldHVybiB2aGE7CiAKIGNyZWF0ZV92aG9zdF9mYWlsZWQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IGYwMzk2ZTcuLmI3OWZjYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC0yODcsOSArMjg3LDEyIEBACiAJaW50IHF1ZXMsIHJlcSwgcmV0OwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCisJaWYgKCEoaGEtPmZ3X2F0dHJpYnV0ZXMgJiBCSVRfNikpIHsKKwkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJIkZpcm13YXJlIGlzIG5vdCBtdWx0aS1xdWV1ZSBjYXBhYmxlXG4iKTsKKwkJZ290byBmYWlsOworCX0KIAlpZiAocWwyeG11bHRpcXVlX3RhZykgewotCQkvKiBDUFUgYWZmaW5pdHkgbW9kZSAqLwotCQloYS0+d3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJxbGEyeHh4X3dxIik7CiAJCS8qIGNyZWF0ZSBhIHJlcXVlc3QgcXVldWUgZm9yIElPICovCiAJCW9wdGlvbnMgfD0gQklUXzc7CiAJCXJlcSA9IHFsYTI1eHhfY3JlYXRlX3JlcV9xdWUoaGEsIG9wdGlvbnMsIDAsIDAsIC0xLApAQCAtMjk5LDYgKzMwMiw3IEBACiAJCQkJIkNhbid0IGNyZWF0ZSByZXF1ZXN0IHF1ZXVlXG4iKTsKIAkJCWdvdG8gZmFpbDsKIAkJfQorCQloYS0+d3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJxbGEyeHh4X3dxIik7CiAJCXZoYS0+cmVxID0gaGEtPnJlcV9xX21hcFtyZXFdOwogCQlvcHRpb25zIHw9IEJJVF8xOwogCQlmb3IgKHF1ZXMgPSAxOyBxdWVzIDwgaGEtPm1heF9yc3BfcXVldWVzOyBxdWVzKyspIHsKQEAgLTMwOSw2ICszMTMsOCBAQAogCQkJCWdvdG8gZmFpbDI7CiAJCQl9CiAJCX0KKwkJaGEtPmZsYWdzLmNwdV9hZmZpbml0eV9lbmFibGVkID0gMTsKKwogCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAogCQkJIkNQVSBhZmZpbml0eSBtb2RlIGVuYWJsZWQsIG5vLiBvZiByZXNwb25zZSIKIAkJCSIgcXVldWVzOiVkLCBuby4gb2YgcmVxdWVzdCBxdWV1ZXM6JWRcbiIsCkBAIC0zMTcsOCArMzIzLDEzIEBACiAJcmV0dXJuIDA7CiBmYWlsMjoKIAlxbGEyNXh4X2RlbGV0ZV9xdWV1ZXModmhhKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShoYS0+d3EpOworCWhhLT53cSA9IE5VTEw7CiBmYWlsOgogCWhhLT5tcWVuYWJsZSA9IDA7CisJa2ZyZWUoaGEtPnJlcV9xX21hcCk7CisJa2ZyZWUoaGEtPnJzcF9xX21hcCk7CisJaGEtPm1heF9yZXFfcXVldWVzID0gaGEtPm1heF9yc3BfcXVldWVzID0gMTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNDYyLDYgKzQ3Myw3IEBACiAJc3AtPmZsYWdzID0gMDsKIAlDTURfU1AoY21kKSA9ICh2b2lkICopc3A7CiAJY21kLT5zY3NpX2RvbmUgPSBkb25lOworCXNwLT5jdHggPSBOVUxMOwogCiAJcmV0dXJuIHNwOwogfQpAQCAtNTU2LDExICs1NjgsOCBAQAogCXVuc2lnbmVkIGxvbmcgd2FpdF9pdGVyID0gQUJPUlRfV0FJVF9JVEVSOwogCWludCByZXQgPSBRTEFfU1VDQ0VTUzsKIAotCXdoaWxlIChDTURfU1AoY21kKSkgeworCXdoaWxlIChDTURfU1AoY21kKSAmJiB3YWl0X2l0ZXItLSkgewogCQltc2xlZXAoQUJPUlRfUE9MTElOR19QRVJJT0QpOwotCi0JCWlmICgtLXdhaXRfaXRlcikKLQkJCWJyZWFrOwogCX0KIAlpZiAoQ01EX1NQKGNtZCkpCiAJCXJldCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CkBAIC02OTgsNiArNzA3LDggQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoc3AtPmZjcG9ydCAhPSBmY3BvcnQpCiAJCQljb250aW51ZTsKKwkJaWYgKHNwLT5jdHgpCisJCQljb250aW51ZTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwogCQlpZiAoaGEtPmlzcF9vcHMtPmFib3J0X2NvbW1hbmQoc3ApKSB7CkBAIC03ODMsNyArNzk0LDggQEAKIAogCQlpZiAoc3AgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwotCisJCWlmIChzcC0+Y3R4KQorCQkJY29udGludWU7CiAJCWlmIChzcC0+Y21kICE9IGNtZCkKIAkJCWNvbnRpbnVlOwogCkBAIC04NDgsNyArODYwLDggQEAKIAkJc3AgPSByZXEtPm91dHN0YW5kaW5nX2NtZHNbY250XTsKIAkJaWYgKCFzcCkKIAkJCWNvbnRpbnVlOwotCisJCWlmIChzcC0+Y3R4KQorCQkJY29udGludWU7CiAJCWlmICh2aGEtPnZwX2lkeCAhPSBzcC0+ZmNwb3J0LT52aGEtPnZwX2lkeCkKIAkJCWNvbnRpbnVlOwogCQltYXRjaCA9IDA7CkBAIC0xMTA2LDggKzExMTksNyBAQAogCXN0cnVjdCBmY19wb3J0ICpmY3BvcnQ7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAKLQlpZiAoaGEtPmZsYWdzLmVuYWJsZV9saXBfZnVsbF9sb2dpbiAmJiAhdmhhLT52cF9pZHggJiYKLQkgICAgIUlTX1FMQTgxWFgoaGEpKSB7CisJaWYgKGhhLT5mbGFncy5lbmFibGVfbGlwX2Z1bGxfbG9naW4gJiYgIUlTX1FMQTgxWFgoaGEpKSB7CiAJCXJldCA9IHFsYTJ4MDBfZnVsbF9sb2dpbl9saXAodmhhKTsKIAkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgewogCQkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ6ICIKQEAgLTExMjAsNyArMTEzMiw3IEBACiAJCXFsYTJ4MDBfd2FpdF9mb3JfbG9vcF9yZWFkeSh2aGEpOwogCX0KIAotCWlmIChoYS0+ZmxhZ3MuZW5hYmxlX2xpcF9yZXNldCAmJiAhdmhhLT52cF9pZHgpIHsKKwlpZiAoaGEtPmZsYWdzLmVuYWJsZV9saXBfcmVzZXQpIHsKIAkJcmV0ID0gcWxhMngwMF9saXBfcmVzZXQodmhhKTsKIAkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgewogCQkJREVCVUcyXzMocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ6ICIKQEAgLTExNTQsNiArMTE2Niw3IEBACiAJaW50IHF1ZSwgY250OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3JiX3QgKnNwOworCXN0cnVjdCBzcmJfY3R4ICpjdHg7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IHJlcV9xdWUgKnJlcTsKIApAQCAtMTE2Niw4ICsxMTc5LDE0IEBACiAJCQlzcCA9IHJlcS0+b3V0c3RhbmRpbmdfY21kc1tjbnRdOwogCQkJaWYgKHNwKSB7CiAJCQkJcmVxLT5vdXRzdGFuZGluZ19jbWRzW2NudF0gPSBOVUxMOwotCQkJCXNwLT5jbWQtPnJlc3VsdCA9IHJlczsKLQkJCQlxbGEyeDAwX3NwX2NvbXBsKGhhLCBzcCk7CisJCQkJaWYgKCFzcC0+Y3R4KSB7CisJCQkJCXNwLT5jbWQtPnJlc3VsdCA9IHJlczsKKwkJCQkJcWxhMngwMF9zcF9jb21wbChoYSwgc3ApOworCQkJCX0gZWxzZSB7CisJCQkJCWN0eCA9IHNwLT5jdHg7CisJCQkJCWRlbF90aW1lcl9zeW5jKCZjdHgtPnRpbWVyKTsKKwkJCQkJY3R4LT5mcmVlKHNwKTsKKwkJCQl9CiAJCQl9CiAJCX0KIAl9CkBAIC0xMTkzLDYgKzEyMTIsNyBAQAogCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzZGV2LT5zZGV2X3RhcmdldCk7CisJZmNfcG9ydF90ICpmY3BvcnQgPSAqKGZjX3BvcnRfdCAqKilycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgcmVxX3F1ZSAqcmVxID0gdmhhLT5yZXE7CiAKIAlpZiAoc2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCkKQEAgLTEyMDEsNiArMTIyMSw4IEBACiAJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgcmVxLT5tYXhfcV9kZXB0aCk7CiAKIAlycG9ydC0+ZGV2X2xvc3NfdG1vID0gaGEtPnBvcnRfZG93bl9yZXRyeV9jb3VudDsKKwlpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX1RBUEUpCisJCWZjcG9ydC0+ZmxhZ3MgfD0gRkNGX1RBUEVfUFJFU0VOVDsKIAogCXJldHVybiAwOwogfQpAQCAtMTkyMyw2ICsxOTQ1LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIHByb2JlX2luaXRfZmFpbGVkOwogCS8qIEFsbG9jIGFycmF5cyBvZiByZXF1ZXN0IGFuZCByZXNwb25zZSByaW5nIHB0cnMgKi8KK3F1ZV9pbml0OgogCWlmICghcWxhMngwMF9hbGxvY19xdWV1ZXMoaGEpKSB7CiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKIAkJIltFUlJPUl0gRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcXVldWUiCkBAIC0xOTU5LDExICsxOTgyLDE0IEBACiAJCWdvdG8gcHJvYmVfZmFpbGVkOwogCX0KIAotCWlmIChoYS0+bXFlbmFibGUpCi0JCWlmIChxbGEyNXh4X3NldHVwX21vZGUoYmFzZV92aGEpKQorCWlmIChoYS0+bXFlbmFibGUpIHsKKwkJaWYgKHFsYTI1eHhfc2V0dXBfbW9kZShiYXNlX3ZoYSkpIHsKIAkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKIAkJCQkiQ2FuJ3QgY3JlYXRlIHF1ZXVlcywgZmFsbGluZyBiYWNrIHRvIHNpbmdsZSIKIAkJCQkiIHF1ZXVlIG1vZGVcbiIpOworCQkJZ290byBxdWVfaW5pdDsKKwkJfQorCX0KIAogCWlmIChoYS0+ZmxhZ3MucnVubmluZ19nb2xkX2Z3KQogCQlnb3RvIHNraXBfZHBjOwpAQCAtMjE1NSwxNyArMjE4MSwxOSBAQAogICAgIGludCBkZWZlcikKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OworCXNjc2lfcWxhX2hvc3RfdCAqYmFzZV92aGE7CiAKIAlpZiAoIWZjcG9ydC0+cnBvcnQpCiAJCXJldHVybjsKIAogCXJwb3J0ID0gZmNwb3J0LT5ycG9ydDsKIAlpZiAoZGVmZXIpIHsKKwkJYmFzZV92aGEgPSBwY2lfZ2V0X2RydmRhdGEodmhhLT5ody0+cGRldik7CiAJCXNwaW5fbG9ja19pcnEodmhhLT5ob3N0LT5ob3N0X2xvY2spOwogCQlmY3BvcnQtPmRycG9ydCA9IHJwb3J0OwogCQlzcGluX3VubG9ja19pcnEodmhhLT5ob3N0LT5ob3N0X2xvY2spOwotCQlzZXRfYml0KEZDUE9SVF9VUERBVEVfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwotCQlxbGEyeHh4X3dha2VfZHBjKHZoYSk7CisJCXNldF9iaXQoRkNQT1JUX1VQREFURV9ORUVERUQsICZiYXNlX3ZoYS0+ZHBjX2ZsYWdzKTsKKwkJcWxhMnh4eF93YWtlX2RwYyhiYXNlX3ZoYSk7CiAJfSBlbHNlCiAJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShycG9ydCk7CiB9CkBAIC0yMjM3LDggKzIyNjUsOSBAQAogCWZjX3BvcnRfdCAqZmNwb3J0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmY3BvcnQsICZ2aGEtPnZwX2ZjcG9ydHMsIGxpc3QpIHsKLQkJaWYgKHZoYS0+dnBfaWR4ICE9IGZjcG9ydC0+dnBfaWR4KQorCQlpZiAodmhhLT52cF9pZHggIT0gMCAmJiB2aGEtPnZwX2lkeCAhPSBmY3BvcnQtPnZwX2lkeCkKIAkJCWNvbnRpbnVlOworCiAJCS8qCiAJCSAqIE5vIHBvaW50IGluIG1hcmtpbmcgdGhlIGRldmljZSBhcyBsb3N0LCBpZiB0aGUgZGV2aWNlIGlzCiAJCSAqIGFscmVhZHkgREVBRC4KQEAgLTIyNDYsMTAgKzIyNzUsMTIgQEAKIAkJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSA9PSBGQ1NfREVWSUNFX0RFQUQpCiAJCQljb250aW51ZTsKIAkJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSA9PSBGQ1NfT05MSU5FKSB7Ci0JCQlhdG9taWNfc2V0KCZmY3BvcnQtPnN0YXRlLCBGQ1NfREVWSUNFX0xPU1QpOwotCQkJcWxhMngwMF9zY2hlZHVsZV9ycG9ydF9kZWwodmhhLCBmY3BvcnQsIGRlZmVyKTsKLQkJfSBlbHNlCi0JCQlhdG9taWNfc2V0KCZmY3BvcnQtPnN0YXRlLCBGQ1NfREVWSUNFX0xPU1QpOworCQkJaWYgKGRlZmVyKQorCQkJCXFsYTJ4MDBfc2NoZWR1bGVfcnBvcnRfZGVsKHZoYSwgZmNwb3J0LCBkZWZlcik7CisJCQllbHNlIGlmICh2aGEtPnZwX2lkeCA9PSBmY3BvcnQtPnZwX2lkeCkKKwkJCQlxbGEyeDAwX3NjaGVkdWxlX3Jwb3J0X2RlbCh2aGEsIGZjcG9ydCwgZGVmZXIpOworCQl9CisJCWF0b21pY19zZXQoJmZjcG9ydC0+c3RhdGUsIEZDU19ERVZJQ0VfTE9TVCk7CiAJfQogfQogCkBAIC0yNTk4LDcgKzI2MjksMzEgQEAKIAlyZXR1cm4gcWxhMngwMF9wb3N0X3dvcmsodmhhLCBlKTsKIH0KIAotc3RhdGljIHZvaWQKKyNkZWZpbmUgcWxhMngwMF9wb3N0X2FzeW5jX3dvcmsobmFtZSwgdHlwZSkJXAoraW50IHFsYTJ4MDBfcG9zdF9hc3luY18jI25hbWUjI193b3JrKAkJXAorICAgIHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsCQkJXAorICAgIGZjX3BvcnRfdCAqZmNwb3J0LCB1aW50MTZfdCAqZGF0YSkJCVwKK3sJCQkJCQlcCisJc3RydWN0IHFsYV93b3JrX2V2dCAqZTsJCQlcCisJCQkJCQlcCisJZSA9IHFsYTJ4MDBfYWxsb2Nfd29yayh2aGEsIHR5cGUpOwlcCisJaWYgKCFlKQkJCQkJXAorCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsJXAorCQkJCQkJXAorCWUtPnUubG9naW8uZmNwb3J0ID0gZmNwb3J0OwkJXAorCWlmIChkYXRhKSB7CQkJCVwKKwkJZS0+dS5sb2dpby5kYXRhWzBdID0gZGF0YVswXTsJXAorCQllLT51LmxvZ2lvLmRhdGFbMV0gPSBkYXRhWzFdOwlcCisJfQkJCQkJXAorCXJldHVybiBxbGEyeDAwX3Bvc3Rfd29yayh2aGEsIGUpOwlcCit9CisKK3FsYTJ4MDBfcG9zdF9hc3luY193b3JrKGxvZ2luLCBRTEFfRVZUX0FTWU5DX0xPR0lOKTsKK3FsYTJ4MDBfcG9zdF9hc3luY193b3JrKGxvZ2luX2RvbmUsIFFMQV9FVlRfQVNZTkNfTE9HSU5fRE9ORSk7CitxbGEyeDAwX3Bvc3RfYXN5bmNfd29yayhsb2dvdXQsIFFMQV9FVlRfQVNZTkNfTE9HT1VUKTsKK3FsYTJ4MDBfcG9zdF9hc3luY193b3JrKGxvZ291dF9kb25lLCBRTEFfRVZUX0FTWU5DX0xPR09VVF9ET05FKTsKKwordm9pZAogcWxhMngwMF9kb193b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEpCiB7CiAJc3RydWN0IHFsYV93b3JrX2V2dCAqZSwgKnRtcDsKQEAgLTI2MjAsNiArMjY3NSwyMSBAQAogCQljYXNlIFFMQV9FVlRfSURDX0FDSzoKIAkJCXFsYTgxeHhfaWRjX2Fjayh2aGEsIGUtPnUuaWRjX2Fjay5tYik7CiAJCQlicmVhazsKKwkJY2FzZSBRTEFfRVZUX0FTWU5DX0xPR0lOOgorCQkJcWxhMngwMF9hc3luY19sb2dpbih2aGEsIGUtPnUubG9naW8uZmNwb3J0LAorCQkJICAgIGUtPnUubG9naW8uZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBRTEFfRVZUX0FTWU5DX0xPR0lOX0RPTkU6CisJCQlxbGEyeDAwX2FzeW5jX2xvZ2luX2RvbmUodmhhLCBlLT51LmxvZ2lvLmZjcG9ydCwKKwkJCSAgICBlLT51LmxvZ2lvLmRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgUUxBX0VWVF9BU1lOQ19MT0dPVVQ6CisJCQlxbGEyeDAwX2FzeW5jX2xvZ291dCh2aGEsIGUtPnUubG9naW8uZmNwb3J0KTsKKwkJCWJyZWFrOworCQljYXNlIFFMQV9FVlRfQVNZTkNfTE9HT1VUX0RPTkU6CisJCQlxbGEyeDAwX2FzeW5jX2xvZ291dF9kb25lKHZoYSwgZS0+dS5sb2dpby5mY3BvcnQsCisJCQkgICAgZS0+dS5sb2dpby5kYXRhKTsKKwkJCWJyZWFrOwogCQl9CiAJCWlmIChlLT5mbGFncyAmIFFMQV9FVlRfRkxBR19GUkVFKQogCQkJa2ZyZWUoZSk7CkBAIC0yNjM1LDYgKzI3MDUsNyBAQAogCWludCBzdGF0dXM7CiAJdWludDE2X3QgICAgICAgIG5leHRfbG9vcGlkID0gMDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwl1aW50MTZfdCBkYXRhWzJdOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmY3BvcnQsICZ2aGEtPnZwX2ZjcG9ydHMsIGxpc3QpIHsKIAkvKgpAQCAtMjY0NCw2ICsyNzE1LDcgQEAKIAkJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSAhPQogCQkJRkNTX09OTElORSAmJiBmY3BvcnQtPmxvZ2luX3JldHJ5KSB7CiAKKwkJCWZjcG9ydC0+bG9naW5fcmV0cnktLTsKIAkJCWlmIChmY3BvcnQtPmZsYWdzICYgRkNGX0ZBQlJJQ19ERVZJQ0UpIHsKIAkJCQlpZiAoZmNwb3J0LT5mbGFncyAmIEZDRl9UQVBFX1BSRVNFTlQpCiAJCQkJCWhhLT5pc3Bfb3BzLT5mYWJyaWNfbG9nb3V0KHZoYSwKQEAgLTI2NTIsMTMgKzI3MjQsMjIgQEAKIAkJCQkJCQlmY3BvcnQtPmRfaWQuYi5hcmVhLAogCQkJCQkJCWZjcG9ydC0+ZF9pZC5iLmFsX3BhKTsKIAotCQkJCXN0YXR1cyA9IHFsYTJ4MDBfZmFicmljX2xvZ2luKHZoYSwgZmNwb3J0LAotCQkJCQkJCSZuZXh0X2xvb3BpZCk7CisJCQkJaWYgKElTX0FMT0dJT19DQVBBQkxFKGhhKSkgeworCQkJCQlkYXRhWzBdID0gMDsKKwkJCQkJZGF0YVsxXSA9IFFMQV9MT0dJT19MT0dJTl9SRVRSSUVEOworCQkJCQlzdGF0dXMgPSBxbGEyeDAwX3Bvc3RfYXN5bmNfbG9naW5fd29yaygKKwkJCQkJICAgIHZoYSwgZmNwb3J0LCBkYXRhKTsKKwkJCQkJaWYgKHN0YXR1cyA9PSBRTEFfU1VDQ0VTUykKKwkJCQkJCWNvbnRpbnVlOworCQkJCQkvKiBBdHRlbXB0IGEgcmV0cnkuICovCisJCQkJCXN0YXR1cyA9IDE7CisJCQkJfSBlbHNlCisJCQkJCXN0YXR1cyA9IHFsYTJ4MDBfZmFicmljX2xvZ2luKHZoYSwKKwkJCQkJICAgIGZjcG9ydCwgJm5leHRfbG9vcGlkKTsKIAkJCX0gZWxzZQogCQkJCXN0YXR1cyA9IHFsYTJ4MDBfbG9jYWxfZGV2aWNlX2xvZ2luKHZoYSwKIAkJCQkJCQkJZmNwb3J0KTsKIAotCQkJZmNwb3J0LT5sb2dpbl9yZXRyeS0tOwogCQkJaWYgKHN0YXR1cyA9PSBRTEFfU1VDQ0VTUykgewogCQkJCWZjcG9ydC0+b2xkX2xvb3BfaWQgPSBmY3BvcnQtPmxvb3BfaWQ7CiAKQEAgLTI4MzEsNiArMjkxMiw5IEBACiAJICovCiAJaGEtPmRwY19hY3RpdmUgPSAwOwogCisJLyogQ2xlYW51cCBhbnkgcmVzaWR1YWwgQ1RYIFNSQnMuICovCisJcWxhMngwMF9hYm9ydF9hbGxfY21kcyhiYXNlX3ZoYSwgRElEX05PX0NPTk5FQ1QgPDwgMTYpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5NzEsNiArMzA1NSw4IEBACiAJCQkJCXNwID0gcmVxLT5vdXRzdGFuZGluZ19jbWRzW2luZGV4XTsKIAkJCQkJaWYgKCFzcCkKIAkJCQkJCWNvbnRpbnVlOworCQkJCQlpZiAoc3AtPmN0eCkKKwkJCQkJCWNvbnRpbnVlOwogCQkJCQlzZmNwID0gc3AtPmZjcG9ydDsKIAkJCQkJaWYgKCEoc2ZjcC0+ZmxhZ3MgJiBGQ0ZfVEFQRV9QUkVTRU5UKSkKIAkJCQkJCWNvbnRpbnVlOwpAQCAtMjk4Nyw4ICszMDczLDcgQEAKIAogCQkvKiBpZiB0aGUgbG9vcCBoYXMgYmVlbiBkb3duIGZvciA0IG1pbnV0ZXMsIHJlaW5pdCBhZGFwdGVyICovCiAJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ2aGEtPmxvb3BfZG93bl90aW1lcikgIT0gMCkgewotCQkJaWYgKCEodmhhLT5kZXZpY2VfZmxhZ3MgJiBERkxHX05PX0NBQkxFKSAmJgotCQkJICAgICF2aGEtPnZwX2lkeCkgeworCQkJaWYgKCEodmhhLT5kZXZpY2VfZmxhZ3MgJiBERkxHX05PX0NBQkxFKSkgewogCQkJCURFQlVHKHByaW50aygic2NzaSglbGQpOiBMb29wIGRvd24gLSAiCiAJCQkJICAgICJhYm9ydGluZyBJU1AuXG4iLAogCQkJCSAgICB2aGEtPmhvc3Rfbm8pKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCmluZGV4IDg0MzY5NzAuLmFjMTA3YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaApAQCAtNyw3ICs3LDcgQEAKIC8qCiAgKiBEcml2ZXIgdmVyc2lvbgogICovCi0jZGVmaW5lIFFMQTJYWFhfVkVSU0lPTiAgICAgICI4LjAzLjAxLWs0IgorI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMy4wMS1rNiIKIAogI2RlZmluZSBRTEFfRFJJVkVSX01BSk9SX1ZFUgk4CiAjZGVmaW5lIFFMQV9EUklWRVJfTUlOT1JfVkVSCTMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pc3IuYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pc3IuYwppbmRleCA4MDI1ZWUxLi5jMTk2ZDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jCkBAIC0yMjcsMTEgKzIyNywxMSBAQAogCWNhc2UgU0NTX0RBVEFfVU5ERVJSVU46CiAJY2FzZSBTQ1NfREFUQV9PVkVSUlVOOgogCQlpZiAoKHN0c19lbnRyeS0+aXNjc2lGbGFncyAmIElTQ1NJX0ZMQUdfUkVTSURVQUxfT1ZFUikgfHwKLQkJCShzdHNfZW50cnktPmNvbXBsZXRpb25TdGF0dXMgPT0gU0NTX0RBVEFfT1ZFUlJVTikpIHsKLQkJCURFQlVHMihwcmludGsoInNjc2klbGQ6JWQ6JWQ6JWQ6ICVzOiAiICJEYXRhIG92ZXJydW4sICIKLQkJCQkgICAgICAicmVzaWR1YWwgPSAweCV4XG4iLCBoYS0+aG9zdF9ubywKKwkJICAgICAoc3RzX2VudHJ5LT5jb21wbGV0aW9uU3RhdHVzID09IFNDU19EQVRBX09WRVJSVU4pKSB7CisJCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiVkOiVkOiVkOiAlczogIiAiRGF0YSBvdmVycnVuXG4iLAorCQkJCSAgICAgIGhhLT5ob3N0X25vLAogCQkJCSAgICAgIGNtZC0+ZGV2aWNlLT5jaGFubmVsLCBjbWQtPmRldmljZS0+aWQsCi0JCQkJICAgICAgY21kLT5kZXZpY2UtPmx1biwgX19mdW5jX18sIHJlc2lkdWFsKSk7CisJCQkJICAgICAgY21kLT5kZXZpY2UtPmx1biwgX19mdW5jX18pKTsKIAogCQkJY21kLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IDJkZTVmM2EuLmI2ZTAzMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtOTk0LDcgKzk5NCw3IEBACiAJICogYWxsIHRoZSBleGlzdGluZyB1c2VycyB0cmllZCB0aGlzIGhhcmQuCiAJICovCiAJcmVzdWx0ID0gc2NzaV9leGVjdXRlX3JlcShzZGV2LCBjbWQsIERNQV9GUk9NX0RFVklDRSwgYnVmZmVyLAotCQkJCSAgbGVuICsgNCwgTlVMTCwgMzAgKiBIWiwgMywgTlVMTCk7CisJCQkJICBsZW4sIE5VTEwsIDMwICogSFosIDMsIE5VTEwpOwogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CiAKQEAgLTEwMjEsMTMgKzEwMjEsMTQgQEAKIHsKIAlpbnQgaSwgcmVzdWx0OwogCXVuc2lnbmVkIGludCBsZW47Ci0JdW5zaWduZWQgY2hhciAqYnVmID0ga21hbGxvYygyNTksIEdGUF9LRVJORUwpOworCWNvbnN0IHVuc2lnbmVkIGludCBpbml0X3ZwZF9sZW4gPSAyNTU7CisJdW5zaWduZWQgY2hhciAqYnVmID0ga21hbGxvYyhpbml0X3ZwZF9sZW4sIEdGUF9LRVJORUwpOwogCiAJaWYgKCFidWYpCiAJCXJldHVybiBOVUxMOwogCiAJLyogQXNrIGZvciBhbGwgdGhlIHBhZ2VzIHN1cHBvcnRlZCBieSB0aGlzIGRldmljZSAqLwotCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCAwLCAyNTUpOworCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCAwLCBpbml0X3ZwZF9sZW4pOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gZmFpbDsKIApAQCAtMTA1MCwxMiArMTA1MSwxMiBAQAogCSAqIFNvbWUgcGFnZXMgYXJlIGxvbmdlciB0aGFuIDI1NSBieXRlcy4gIFRoZSBhY3R1YWwgbGVuZ3RoIG9mCiAJICogdGhlIHBhZ2UgaXMgcmV0dXJuZWQgaW4gdGhlIGhlYWRlci4KIAkgKi8KLQlsZW4gPSAoYnVmWzJdIDw8IDgpIHwgYnVmWzNdOwotCWlmIChsZW4gPD0gMjU1KQorCWxlbiA9ICgoYnVmWzJdIDw8IDgpIHwgYnVmWzNdKSArIDQ7CisJaWYgKGxlbiA8PSBpbml0X3ZwZF9sZW4pCiAJCXJldHVybiBidWY7CiAKIAlrZnJlZShidWYpOwotCWJ1ZiA9IGttYWxsb2MobGVuICsgNCwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCBwYWdlLCBsZW4pOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCmluZGV4IGExNjg5MzUuLjg3NzIwNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwpAQCAtMzgyLDkgKzM4MiwxMyBAQAogCQkgKiB3aG8ga25vd3M/ICBGSVhNRShlcmljKQogCQkgKi8KIAkJcmV0dXJuIFNVQ0NFU1M7CisJY2FzZSBSRVNFUlZBVElPTl9DT05GTElDVDoKKwkJLyoKKwkJICogbGV0IGlzc3VlciBkZWFsIHdpdGggdGhpcywgaXQgY291bGQgYmUganVzdCBmaW5lCisJCSAqLworCQlyZXR1cm4gU1VDQ0VTUzsKIAljYXNlIEJVU1k6CiAJY2FzZSBRVUVVRV9GVUxMOgotCWNhc2UgUkVTRVJWQVRJT05fQ09ORkxJQ1Q6CiAJZGVmYXVsdDoKIAkJcmV0dXJuIEZBSUxFRDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IGYzYzQwODkuLjU5ODdkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC04OTYsOSArODk2LDEyIEBACiAJCQlzY3NpX3ByaW50X3Jlc3VsdChjbWQpOwogCQkJaWYgKGRyaXZlcl9ieXRlKHJlc3VsdCkgJiBEUklWRVJfU0VOU0UpCiAJCQkJc2NzaV9wcmludF9zZW5zZSgiIiwgY21kKTsKKwkJCXNjc2lfcHJpbnRfY29tbWFuZChjbWQpOwogCQl9Ci0JCWJsa19lbmRfcmVxdWVzdF9hbGwocmVxLCAtRUlPKTsKLQkJc2NzaV9uZXh0X2NvbW1hbmQoY21kKTsKKwkJaWYgKGJsa19lbmRfcmVxdWVzdF9lcnIocmVxLCAtRUlPKSkKKwkJCXNjc2lfcmVxdWV1ZV9jb21tYW5kKHEsIGNtZCk7CisJCWVsc2UKKwkJCXNjc2lfbmV4dF9jb21tYW5kKGNtZCk7CiAJCWJyZWFrOwogCWNhc2UgQUNUSU9OX1JFUFJFUDoKIAkJLyogVW5wcmVwIHRoZSByZXF1ZXN0IGFuZCBwdXQgaXQgYmFjayBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IDI5MmMwMmYuLmI5ODg4NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC0yOTEsNyArMjkxLDcgQEAKICNkZWZpbmUgRkNfU1RBUkdFVF9OVU1fQVRUUlMgCTMKICNkZWZpbmUgRkNfUlBPUlRfTlVNX0FUVFJTCTEwCiAjZGVmaW5lIEZDX1ZQT1JUX05VTV9BVFRSUwk5Ci0jZGVmaW5lIEZDX0hPU1RfTlVNX0FUVFJTCTIxCisjZGVmaW5lIEZDX0hPU1RfTlVNX0FUVFJTCTIyCiAKIHN0cnVjdCBmY19pbnRlcm5hbCB7CiAJc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlIHQ7CkBAIC0zNDMyLDcgKzM0MzIsNyBAQAogCiAvKioKICAqIGZjX2JzZ19zb2Z0aXJxX2RvbmUgLSBzb2Z0aXJxIGRvbmUgcm91dGluZSBmb3IgZGVzdHJveWluZyB0aGUgYnNnIHJlcXVlc3RzCi0gKiBAcmVxOiAgICAgICAgQlNHIHJlcXVlc3QgdGhhdCBob2xkcyB0aGUgam9iIHRvIGJlIGRlc3Ryb3llZAorICogQHJxOiAgICAgICAgQlNHIHJlcXVlc3QgdGhhdCBob2xkcyB0aGUgam9iIHRvIGJlIGRlc3Ryb3llZAogICovCiBzdGF0aWMgdm9pZCBmY19ic2dfc29mdGlycV9kb25lKHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKaW5kZXggYjQ3MjQwYy4uYWQ4OTdkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKQEAgLTM2LDYgKzM2LDM4IEBACiAKICNkZWZpbmUgSVNDU0lfVFJBTlNQT1JUX1ZFUlNJT04gIjIuMC04NzAiCiAKK3N0YXRpYyBpbnQgZGJnX3Nlc3Npb247Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWdfc2Vzc2lvbiwgZGJnX3Nlc3Npb24sIGludCwKKwkJICAgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19zZXNzaW9uLAorCQkgIlR1cm4gb24gZGVidWdnaW5nIGZvciBzZXNzaW9ucyBpbiBzY3NpX3RyYW5zcG9ydF9pc2NzaSAiCisJCSAibW9kdWxlLiBTZXQgdG8gMSB0byB0dXJuIG9uLCBhbmQgemVybyB0byB0dXJuIG9mZi4gRGVmYXVsdCAiCisJCSAiaXMgb2ZmLiIpOworCitzdGF0aWMgaW50IGRiZ19jb25uOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX2Nvbm4sIGRiZ19jb25uLCBpbnQsCisJCSAgIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWdfY29ubiwKKwkJICJUdXJuIG9uIGRlYnVnZ2luZyBmb3IgY29ubmVjdGlvbnMgaW4gc2NzaV90cmFuc3BvcnRfaXNjc2kgIgorCQkgIm1vZHVsZS4gU2V0IHRvIDEgdG8gdHVybiBvbiwgYW5kIHplcm8gdG8gdHVybiBvZmYuIERlZmF1bHQgIgorCQkgImlzIG9mZi4iKTsKKworI2RlZmluZSBJU0NTSV9EQkdfVFJBTlNfU0VTU0lPTihfc2Vzc2lvbiwgZGJnX2ZtdCwgYXJnLi4uKQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKGRiZ19zZXNzaW9uKQkJCQkJXAorCQkJaXNjc2lfY2xzX3Nlc3Npb25fcHJpbnRrKEtFUk5fSU5GTywgX3Nlc3Npb24sCVwKKwkJCQkJCSAiJXM6ICIgZGJnX2ZtdCwJXAorCQkJCQkJIF9fZnVuY19fLCAjI2FyZyk7CVwKKwl9IHdoaWxlICgwKTsKKworI2RlZmluZSBJU0NTSV9EQkdfVFJBTlNfQ09OTihfY29ubiwgZGJnX2ZtdCwgYXJnLi4uKQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChkYmdfY29ubikJCQkJCQlcCisJCQlpc2NzaV9jbHNfY29ubl9wcmludGsoS0VSTl9JTkZPLCBfY29ubiwJCVwKKwkJCQkJICAgICAgIiVzOiAiIGRiZ19mbXQsCQlcCisJCQkJCSAgICAgIF9fZnVuY19fLCAjI2FyZyk7CVwKKwl9IHdoaWxlICgwKTsKKwogc3RydWN0IGlzY3NpX2ludGVybmFsIHsKIAlzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgdDsKIAlzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICppc2NzaV90cmFuc3BvcnQ7CkBAIC0zNzcsNiArNDA5LDcgQEAKIAogCXNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uKTsKIAlzY3NpX2hvc3RfcHV0KHNob3N0KTsKKwlJU0NTSV9EQkdfVFJBTlNfU0VTU0lPTihzZXNzaW9uLCAiQ29tcGxldGluZyBzZXNzaW9uIHJlbGVhc2VcbiIpOwogCWtmcmVlKHNlc3Npb24pOwogfQogCkBAIC00NDEsNiArNDc0LDkgQEAKIAkJcmV0dXJuIDA7CiAKIAlzZXNzaW9uID0gaXNjc2lfZGV2X3RvX3Nlc3Npb24oZGV2KTsKKworCUlTQ1NJX0RCR19UUkFOU19TRVNTSU9OKHNlc3Npb24sICJTY2FubmluZyBzZXNzaW9uXG4iKTsKKwogCXNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uKTsKIAlpaG9zdCA9IHNob3N0LT5zaG9zdF9kYXRhOwogCkBAIC00NDgsOCArNDg0LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOwogCWlmIChzZXNzaW9uLT5zdGF0ZSAhPSBJU0NTSV9TRVNTSU9OX0xPR0dFRF9JTikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7Ci0JCW11dGV4X3VubG9jaygmaWhvc3QtPm11dGV4KTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gdXNlcl9zY2FuX2V4aXQ7CiAJfQogCWlkID0gc2Vzc2lvbi0+dGFyZ2V0X2lkOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlc3Npb24tPmxvY2ssIGZsYWdzKTsKQEAgLTQ2Miw3ICs0OTcsMTAgQEAKIAkJCXNjc2lfc2Nhbl90YXJnZXQoJnNlc3Npb24tPmRldiwgMCwgaWQsCiAJCQkJCSBzY2FuX2RhdGEtPmx1biwgMSk7CiAJfQorCit1c2VyX3NjYW5fZXhpdDoKIAltdXRleF91bmxvY2soJmlob3N0LT5tdXRleCk7CisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIkNvbXBsZXRlZCBzZXNzaW9uIHNjYW5cbiIpOwogCXJldHVybiAwOwogfQogCkBAIC01MjIsNyArNTYwLDkgQEAKIAlpZiAoc2Vzc2lvbi0+dHJhbnNwb3J0LT5zZXNzaW9uX3JlY292ZXJ5X3RpbWVkb3V0KQogCQlzZXNzaW9uLT50cmFuc3BvcnQtPnNlc3Npb25fcmVjb3ZlcnlfdGltZWRvdXQoc2Vzc2lvbik7CiAKKwlJU0NTSV9EQkdfVFJBTlNfU0VTU0lPTihzZXNzaW9uLCAiVW5ibG9ja2luZyBTQ1NJIHRhcmdldFxuIik7CiAJc2NzaV90YXJnZXRfdW5ibG9jaygmc2Vzc2lvbi0+ZGV2KTsKKwlJU0NTSV9EQkdfVFJBTlNfU0VTU0lPTihzZXNzaW9uLCAiQ29tcGxldGVkIHVuYmxvY2tpbmcgU0NTSSB0YXJnZXRcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2lzY3NpX3VuYmxvY2tfc2Vzc2lvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC01MzQsNiArNTc0LDcgQEAKIAlzdHJ1Y3QgaXNjc2lfY2xzX2hvc3QgKmlob3N0ID0gc2hvc3QtPnNob3N0X2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCUlTQ1NJX0RCR19UUkFOU19TRVNTSU9OKHNlc3Npb24sICJVbmJsb2NraW5nIHNlc3Npb25cbiIpOwogCS8qCiAJICogVGhlIHJlY292ZXJ5IGFuZCB1bmJsb2NrIHdvcmsgZ2V0IHJ1biBmcm9tIHRoZSBzYW1lIHdvcmtxdWV1ZSwKIAkgKiBzbyB0cnkgdG8gY2FuY2VsIGl0IGlmIGl0IHdhcyBnb2luZyB0byBydW4gYWZ0ZXIgdGhpcyB1bmJsb2NrLgpAQCAtNTUzLDYgKzU5NCw3IEBACiAJCWlmIChzY3NpX3F1ZXVlX3dvcmsoc2hvc3QsICZzZXNzaW9uLT5zY2FuX3dvcmspKQogCQkJYXRvbWljX2luYygmaWhvc3QtPm5yX3NjYW5zKTsKIAl9CisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIkNvbXBsZXRlZCB1bmJsb2NraW5nIHNlc3Npb25cbiIpOwogfQogCiAvKioKQEAgLTU3OSwxMCArNjIxLDEyIEBACiAJCQkJICAgICBibG9ja193b3JrKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIkJsb2NraW5nIHNlc3Npb25cbiIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7CiAJc2Vzc2lvbi0+c3RhdGUgPSBJU0NTSV9TRVNTSU9OX0ZBSUxFRDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7CiAJc2NzaV90YXJnZXRfYmxvY2soJnNlc3Npb24tPmRldik7CisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIkNvbXBsZXRlZCBTQ1NJIHRhcmdldCBibG9ja2luZ1xuIik7CiAJcXVldWVfZGVsYXllZF93b3JrKGlzY3NpX2VoX3RpbWVyX3dvcmtxLCAmc2Vzc2lvbi0+cmVjb3Zlcnlfd29yaywKIAkJCSAgIHNlc3Npb24tPnJlY292ZXJ5X3RtbyAqIEhaKTsKIH0KQEAgLTYwMiw2ICs2NDYsOCBAQAogCXN0cnVjdCBpc2NzaV9jbHNfaG9zdCAqaWhvc3QgPSBzaG9zdC0+c2hvc3RfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIlVuYmluZGluZyBzZXNzaW9uXG4iKTsKKwogCS8qIFByZXZlbnQgbmV3IHNjYW5zIGFuZCBtYWtlIHN1cmUgc2Nhbm5pbmcgaXMgbm90IGluIHByb2dyZXNzICovCiAJbXV0ZXhfbG9jaygmaWhvc3QtPm11dGV4KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOwpAQCAtNjE2LDYgKzY2Miw3IEBACiAKIAlzY3NpX3JlbW92ZV90YXJnZXQoJnNlc3Npb24tPmRldik7CiAJaXNjc2lfc2Vzc2lvbl9ldmVudChzZXNzaW9uLCBJU0NTSV9LRVZFTlRfVU5CSU5EX1NFU1NJT04pOworCUlTQ1NJX0RCR19UUkFOU19TRVNTSU9OKHNlc3Npb24sICJDb21wbGV0ZWQgdGFyZ2V0IHJlbW92YWxcbiIpOwogfQogCiBzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKgpAQCAtNjQ3LDYgKzY5NCw4IEBACiAJZGV2aWNlX2luaXRpYWxpemUoJnNlc3Npb24tPmRldik7CiAJaWYgKGRkX3NpemUpCiAJCXNlc3Npb24tPmRkX2RhdGEgPSAmc2Vzc2lvblsxXTsKKworCUlTQ1NJX0RCR19UUkFOU19TRVNTSU9OKHNlc3Npb24sICJDb21wbGV0ZWQgc2Vzc2lvbiBhbGxvY2F0aW9uXG4iKTsKIAlyZXR1cm4gc2Vzc2lvbjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2FsbG9jX3Nlc3Npb24pOwpAQCAtNzEyLDYgKzc2MSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vzc2xvY2ssIGZsYWdzKTsKIAogCWlzY3NpX3Nlc3Npb25fZXZlbnQoc2Vzc2lvbiwgSVNDU0lfS0VWRU5UX0NSRUFURV9TRVNTSU9OKTsKKwlJU0NTSV9EQkdfVFJBTlNfU0VTU0lPTihzZXNzaW9uLCAiQ29tcGxldGVkIHNlc3Npb24gYWRkaW5nXG4iKTsKIAlyZXR1cm4gMDsKIAogcmVsZWFzZV9ob3N0OgpAQCAtNzUyLDYgKzgwMiw3IEBACiAJc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uID0gaXNjc2lfZGV2X3RvX2Nvbm4oZGV2KTsKIAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBjb25uLT5kZXYucGFyZW50OwogCisJSVNDU0lfREJHX1RSQU5TX0NPTk4oY29ubiwgIlJlbGVhc2luZyBjb25uXG4iKTsKIAlrZnJlZShjb25uKTsKIAlwdXRfZGV2aWNlKHBhcmVudCk7CiB9CkBAIC03NzQsNiArODI1LDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAKKwlJU0NTSV9EQkdfVFJBTlNfU0VTU0lPTihzZXNzaW9uLCAiUmVtb3Zpbmcgc2Vzc2lvblxuIik7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2Vzc2xvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmc2Vzc2lvbi0+c2Vzc19saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXNzbG9jaywgZmxhZ3MpOwpAQCAtODA3LDEyICs4NjAsMTUgQEAKIAkJCQkJICJmb3Igc2Vzc2lvbi4gRXJyb3IgJWQuXG4iLCBlcnIpOwogCiAJdHJhbnNwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKCZzZXNzaW9uLT5kZXYpOworCisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIkNvbXBsZXRpbmcgc2Vzc2lvbiByZW1vdmFsXG4iKTsKIAlkZXZpY2VfZGVsKCZzZXNzaW9uLT5kZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfcmVtb3ZlX3Nlc3Npb24pOwogCiB2b2lkIGlzY3NpX2ZyZWVfc2Vzc2lvbihzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24pCiB7CisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIkZyZWVpbmcgc2Vzc2lvblxuIik7CiAJaXNjc2lfc2Vzc2lvbl9ldmVudChzZXNzaW9uLCBJU0NTSV9LRVZFTlRfREVTVFJPWV9TRVNTSU9OKTsKIAlwdXRfZGV2aWNlKCZzZXNzaW9uLT5kZXYpOwogfQpAQCAtODI4LDYgKzg4NCw3IEBACiBpbnQgaXNjc2lfZGVzdHJveV9zZXNzaW9uKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlpc2NzaV9yZW1vdmVfc2Vzc2lvbihzZXNzaW9uKTsKKwlJU0NTSV9EQkdfVFJBTlNfU0VTU0lPTihzZXNzaW9uLCAiQ29tcGxldGluZyBzZXNzaW9uIGRlc3RydWN0aW9uXG4iKTsKIAlpc2NzaV9mcmVlX3Nlc3Npb24oc2Vzc2lvbik7CiAJcmV0dXJuIDA7CiB9CkBAIC04ODUsNiArOTQyLDggQEAKIAlsaXN0X2FkZCgmY29ubi0+Y29ubl9saXN0LCAmY29ubmxpc3QpOwogCWNvbm4tPmFjdGl2ZSA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubmxvY2ssIGZsYWdzKTsKKworCUlTQ1NJX0RCR19UUkFOU19DT05OKGNvbm4sICJDb21wbGV0ZWQgY29ubiBjcmVhdGlvblxuIik7CiAJcmV0dXJuIGNvbm47CiAKIHJlbGVhc2VfcGFyZW50X3JlZjoKQEAgLTkxMiw2ICs5NzEsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm5sb2NrLCBmbGFncyk7CiAKIAl0cmFuc3BvcnRfdW5yZWdpc3Rlcl9kZXZpY2UoJmNvbm4tPmRldik7CisJSVNDU0lfREJHX1RSQU5TX0NPTk4oY29ubiwgIkNvbXBsZXRpbmcgY29ubiBkZXN0cnVjdGlvblxuIik7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJmNvbm4tPmRldik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjAwLDYgKzEyNjAsOSBAQAogCQkJCQkgIkNhbm5vdCBub3RpZnkgdXNlcnNwYWNlIG9mIHNlc3Npb24gIgogCQkJCQkgImV2ZW50ICV1LiBDaGVjayBpc2NzaSBkYWVtb25cbiIsCiAJCQkJCSBldmVudCk7CisKKwlJU0NTSV9EQkdfVFJBTlNfU0VTU0lPTihzZXNzaW9uLCAiQ29tcGxldGVkIGhhbmRsaW5nIGV2ZW50ICVkIHJjICVkXG4iLAorCQkJCWV2ZW50LCByYyk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfc2Vzc2lvbl9ldmVudCk7CkBAIC0xMjIxLDYgKzEyODQsOCBAQAogCXNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uKTsKIAlldi0+ci5jX3Nlc3Npb25fcmV0Lmhvc3Rfbm8gPSBzaG9zdC0+aG9zdF9ubzsKIAlldi0+ci5jX3Nlc3Npb25fcmV0LnNpZCA9IHNlc3Npb24tPnNpZDsKKwlJU0NTSV9EQkdfVFJBTlNfU0VTU0lPTihzZXNzaW9uLAorCQkJCSJDb21wbGV0ZWQgY3JlYXRpbmcgdHJhbnNwb3J0IHNlc3Npb25cbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjQ2LDYgKzEzMTEsOCBAQAogCiAJZXYtPnIuY19jb25uX3JldC5zaWQgPSBzZXNzaW9uLT5zaWQ7CiAJZXYtPnIuY19jb25uX3JldC5jaWQgPSBjb25uLT5jaWQ7CisKKwlJU0NTSV9EQkdfVFJBTlNfQ09OTihjb25uLCAiQ29tcGxldGVkIGNyZWF0aW5nIHRyYW5zcG9ydCBjb25uXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI1OCw4ICsxMzI1LDEwIEBACiAJaWYgKCFjb25uKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCUlTQ1NJX0RCR19UUkFOU19DT05OKGNvbm4sICJEZXN0cm95aW5nIHRyYW5zcG9ydCBjb25uXG4iKTsKIAlpZiAodHJhbnNwb3J0LT5kZXN0cm95X2Nvbm4pCiAJCXRyYW5zcG9ydC0+ZGVzdHJveV9jb25uKGNvbm4pOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYwppbmRleCAwODk1ZDNjLi5mZDQ3Y2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCkBAIC0xNjkyLDEwICsxNjkyLDYgQEAKIAlpLT5mID0gZnQ7CiAKIAljb3VudCA9IDA7Ci0JU0VUVVBfUE9SVF9BVFRSSUJVVEUobnVtX3BoeXMpOwotCWktPmhvc3RfYXR0cnNbY291bnRdID0gTlVMTDsKLQotCWNvdW50ID0gMDsKIAlTRVRVUF9QSFlfQVRUUklCVVRFKGluaXRpYXRvcl9wb3J0X3Byb3RvY29scyk7CiAJU0VUVVBfUEhZX0FUVFJJQlVURSh0YXJnZXRfcG9ydF9wcm90b2NvbHMpOwogCVNFVFVQX1BIWV9BVFRSSUJVVEUoZGV2aWNlX3R5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCBiN2I5ZmVjLi5hODljNDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMjAyMSw2ICsyMDIxLDcgQEAKIAogCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIkF0dGFjaGVkIFNDU0kgJXNkaXNrXG4iLAogCQkgIHNkcC0+cmVtb3ZhYmxlID8gInJlbW92YWJsZSAiIDogIiIpOworCXB1dF9kZXZpY2UoJnNka3AtPmRldik7CiB9CiAKIC8qKgpAQCAtMjEwNiw2ICsyMTA3LDcgQEAKIAogCWdldF9kZXZpY2UoJnNkcC0+c2Rldl9nZW5kZXYpOwogCisJZ2V0X2RldmljZSgmc2RrcC0+ZGV2KTsJLyogcHJldmVudCByZWxlYXNlIGJlZm9yZSBhc3luY19zY2hlZHVsZSAqLwogCWFzeW5jX3NjaGVkdWxlKHNkX3Byb2JlX2FzeW5jLCBzZGtwKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Nlcy5jIGIvZHJpdmVycy9zY3NpL3Nlcy5jCmluZGV4IDRmNjE4ZjQuLjU1YjAzNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZXMuYworKysgYi9kcml2ZXJzL3Njc2kvc2VzLmMKQEAgLTM0Nyw2ICszNDcsOTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBJTklUX0FMTE9DX1NJWkUgMzIKKworc3RhdGljIHZvaWQgc2VzX2VuY2xvc3VyZV9kYXRhX3Byb2Nlc3Moc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYsCisJCQkJICAgICAgIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwKKwkJCQkgICAgICAgaW50IGNyZWF0ZSkKK3sKKwl1MzIgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEwsICp0eXBlX3B0ciwgKmRlc2NfcHRyLCAqYWRkbF9kZXNjX3B0ciA9IE5VTEw7CisJaW50IGksIGosIHBhZ2U3X2xlbiwgbGVuLCBjb21wb25lbnRzOworCXN0cnVjdCBzZXNfZGV2aWNlICpzZXNfZGV2ID0gZWRldi0+c2NyYXRjaDsKKwlpbnQgdHlwZXMgPSBzZXNfZGV2LT5wYWdlMVsxMF07CisJdW5zaWduZWQgY2hhciAqaGRyX2J1ZiA9IGt6YWxsb2MoSU5JVF9BTExPQ19TSVpFLCBHRlBfS0VSTkVMKTsKKworCWlmICghaGRyX2J1ZikKKwkJZ290byBzaW1wbGVfcG9wdWxhdGU7CisKKwkvKiByZS1yZWFkIHBhZ2UgMTAgKi8KKwlpZiAoc2VzX2Rldi0+cGFnZTEwKQorCQlzZXNfcmVjdl9kaWFnKHNkZXYsIDEwLCBzZXNfZGV2LT5wYWdlMTAsIHNlc19kZXYtPnBhZ2UxMF9sZW4pOworCS8qIFBhZ2UgNyBmb3IgdGhlIGRlc2NyaXB0b3JzIGlzIG9wdGlvbmFsICovCisJcmVzdWx0ID0gc2VzX3JlY3ZfZGlhZyhzZGV2LCA3LCBoZHJfYnVmLCBJTklUX0FMTE9DX1NJWkUpOworCWlmIChyZXN1bHQpCisJCWdvdG8gc2ltcGxlX3BvcHVsYXRlOworCisJcGFnZTdfbGVuID0gbGVuID0gKGhkcl9idWZbMl0gPDwgOCkgKyBoZHJfYnVmWzNdICsgNDsKKwkvKiBhZGQgMSBmb3IgdHJhaWxpbmcgJ1wwJyB3ZSdsbCB1c2UgKi8KKwlidWYgPSBremFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlnb3RvIHNpbXBsZV9wb3B1bGF0ZTsKKwlyZXN1bHQgPSBzZXNfcmVjdl9kaWFnKHNkZXYsIDcsIGJ1ZiwgbGVuKTsKKwlpZiAocmVzdWx0KSB7Cisgc2ltcGxlX3BvcHVsYXRlOgorCQlrZnJlZShidWYpOworCQlidWYgPSBOVUxMOworCQlkZXNjX3B0ciA9IE5VTEw7CisJCWxlbiA9IDA7CisJCXBhZ2U3X2xlbiA9IDA7CisJfSBlbHNlIHsKKwkJZGVzY19wdHIgPSBidWYgKyA4OworCQlsZW4gPSAoZGVzY19wdHJbMl0gPDwgOCkgKyBkZXNjX3B0clszXTsKKwkJLyogc2tpcCBwYXN0IG92ZXJhbGwgZGVzY3JpcHRvciAqLworCQlkZXNjX3B0ciArPSBsZW4gKyA0OworCQlpZiAoc2VzX2Rldi0+cGFnZTEwKQorCQkJYWRkbF9kZXNjX3B0ciA9IHNlc19kZXYtPnBhZ2UxMCArIDg7CisJfQorCXR5cGVfcHRyID0gc2VzX2Rldi0+cGFnZTEgKyAxMiArIHNlc19kZXYtPnBhZ2UxWzExXTsKKwljb21wb25lbnRzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgdHlwZXM7IGkrKywgdHlwZV9wdHIgKz0gNCkgeworCQlmb3IgKGogPSAwOyBqIDwgdHlwZV9wdHJbMV07IGorKykgeworCQkJY2hhciAqbmFtZSA9IE5VTEw7CisJCQlzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXA7CisKKwkJCWlmIChkZXNjX3B0cikgeworCQkJCWlmIChkZXNjX3B0ciA+PSBidWYgKyBwYWdlN19sZW4pIHsKKwkJCQkJZGVzY19wdHIgPSBOVUxMOworCQkJCX0gZWxzZSB7CisJCQkJCWxlbiA9IChkZXNjX3B0clsyXSA8PCA4KSArIGRlc2NfcHRyWzNdOworCQkJCQlkZXNjX3B0ciArPSA0OworCQkJCQkvKiBBZGQgdHJhaWxpbmcgemVybyAtIHB1c2hlcyBpbnRvCisJCQkJCSAqIHJlc2VydmVkIHNwYWNlICovCisJCQkJCWRlc2NfcHRyW2xlbl0gPSAnXDAnOworCQkJCQluYW1lID0gZGVzY19wdHI7CisJCQkJfQorCQkJfQorCQkJaWYgKHR5cGVfcHRyWzBdID09IEVOQ0xPU1VSRV9DT01QT05FTlRfREVWSUNFIHx8CisJCQkgICAgdHlwZV9wdHJbMF0gPT0gRU5DTE9TVVJFX0NPTVBPTkVOVF9BUlJBWV9ERVZJQ0UpIHsKKworCQkJCWlmIChjcmVhdGUpCisJCQkJCWVjb21wID0JZW5jbG9zdXJlX2NvbXBvbmVudF9yZWdpc3RlcihlZGV2LAorCQkJCQkJCQkJICAgICBjb21wb25lbnRzKyssCisJCQkJCQkJCQkgICAgIHR5cGVfcHRyWzBdLAorCQkJCQkJCQkJICAgICBuYW1lKTsKKwkJCQllbHNlCisJCQkJCWVjb21wID0gJmVkZXYtPmNvbXBvbmVudFtjb21wb25lbnRzKytdOworCisJCQkJaWYgKCFJU19FUlIoZWNvbXApICYmIGFkZGxfZGVzY19wdHIpCisJCQkJCXNlc19wcm9jZXNzX2Rlc2NyaXB0b3IoZWNvbXAsCisJCQkJCQkJICAgICAgIGFkZGxfZGVzY19wdHIpOworCQkJfQorCQkJaWYgKGRlc2NfcHRyKQorCQkJCWRlc2NfcHRyICs9IGxlbjsKKworCQkJaWYgKGFkZGxfZGVzY19wdHIpCisJCQkJYWRkbF9kZXNjX3B0ciArPSBhZGRsX2Rlc2NfcHRyWzFdICsgMjsKKworCQl9CisJfQorCWtmcmVlKGJ1Zik7CisJa2ZyZWUoaGRyX2J1Zik7Cit9CisKIHN0YXRpYyB2b2lkIHNlc19tYXRjaF90b19lbmNsb3N1cmUoc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYsCiAJCQkJICAgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewpAQCAtMzYxLDYgKzQ1Miw4IEBACiAJaWYgKCFidWYpCiAJCXJldHVybjsKIAorCXNlc19lbmNsb3N1cmVfZGF0YV9wcm9jZXNzKGVkZXYsIHRvX3Njc2lfZGV2aWNlKGVkZXYtPmVkZXYucGFyZW50KSwgMCk7CisKIAl2cGRfbGVuID0gKChidWZbMl0gPDwgOCkgfCBidWZbM10pICsgNDsKIAogCWRlc2MgPSBidWYgKyA0OwpAQCAtMzk1LDI4ICs0ODgsMjYgQEAKIAlrZnJlZShidWYpOwogfQogCi0jZGVmaW5lIElOSVRfQUxMT0NfU0laRSAzMgotCiBzdGF0aWMgaW50IHNlc19pbnRmX2FkZChzdHJ1Y3QgZGV2aWNlICpjZGV2LAogCQkJc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShjZGV2LT5wYXJlbnQpOwogCXN0cnVjdCBzY3NpX2RldmljZSAqdG1wX3NkZXY7Ci0JdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTCwgKmhkcl9idWYsICp0eXBlX3B0ciwgKmRlc2NfcHRyID0gTlVMTCwKLQkJKmFkZGxfZGVzY19wdHIgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEwsICpoZHJfYnVmLCAqdHlwZV9wdHI7CiAJc3RydWN0IHNlc19kZXZpY2UgKnNlc19kZXY7CiAJdTMyIHJlc3VsdDsKLQlpbnQgaSwgaiwgdHlwZXMsIGxlbiwgcGFnZTdfbGVuID0gMCwgY29tcG9uZW50cyA9IDA7CisJaW50IGksIHR5cGVzLCBsZW4sIGNvbXBvbmVudHMgPSAwOwogCWludCBlcnIgPSAtRU5PTUVNOwogCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2OwogCXN0cnVjdCBzZXNfY29tcG9uZW50ICpzY29tcCA9IE5VTEw7CiAKIAlpZiAoIXNjc2lfZGV2aWNlX2VuY2xvc3VyZShzZGV2KSkgewogCQkvKiBub3QgYW4gZW5jbG9zdXJlLCBidXQgbWlnaHQgYmUgaW4gb25lICovCi0JCWVkZXYgPSBlbmNsb3N1cmVfZmluZCgmc2Rldi0+aG9zdC0+c2hvc3RfZ2VuZGV2KTsKLQkJaWYgKGVkZXYpIHsKKwkJc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKnByZXYgPSBOVUxMOworCisJCXdoaWxlICgoZWRldiA9IGVuY2xvc3VyZV9maW5kKCZzZGV2LT5ob3N0LT5zaG9zdF9nZW5kZXYsIHByZXYpKSAhPSBOVUxMKSB7CiAJCQlzZXNfbWF0Y2hfdG9fZW5jbG9zdXJlKGVkZXYsIHNkZXYpOwotCQkJcHV0X2RldmljZSgmZWRldi0+ZWRldik7CisJCQlwcmV2ID0gZWRldjsKIAkJfQogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC01MDAsNiArNTkxLDcgQEAKIAkJc2VzX2Rldi0+cGFnZTEwX2xlbiA9IGxlbjsKIAkJYnVmID0gTlVMTDsKIAl9CisJa2ZyZWUoaGRyX2J1Zik7CiAKIAlzY29tcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXNfY29tcG9uZW50KSAqIGNvbXBvbmVudHMsIEdGUF9LRVJORUwpOwogCWlmICghc2NvbXApCkBAIC01MTYsNzIgKzYwOCw3IEBACiAJZm9yIChpID0gMDsgaSA8IGNvbXBvbmVudHM7IGkrKykKIAkJZWRldi0+Y29tcG9uZW50W2ldLnNjcmF0Y2ggPSBzY29tcCArIGk7CiAKLQkvKiBQYWdlIDcgZm9yIHRoZSBkZXNjcmlwdG9ycyBpcyBvcHRpb25hbCAqLwotCXJlc3VsdCA9IHNlc19yZWN2X2RpYWcoc2RldiwgNywgaGRyX2J1ZiwgSU5JVF9BTExPQ19TSVpFKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIHNpbXBsZV9wb3B1bGF0ZTsKLQotCXBhZ2U3X2xlbiA9IGxlbiA9IChoZHJfYnVmWzJdIDw8IDgpICsgaGRyX2J1ZlszXSArIDQ7Ci0JLyogYWRkIDEgZm9yIHRyYWlsaW5nICdcMCcgd2UnbGwgdXNlICovCi0JYnVmID0ga3phbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikKLQkJZ290byBzaW1wbGVfcG9wdWxhdGU7Ci0JcmVzdWx0ID0gc2VzX3JlY3ZfZGlhZyhzZGV2LCA3LCBidWYsIGxlbik7Ci0JaWYgKHJlc3VsdCkgewotIHNpbXBsZV9wb3B1bGF0ZToKLQkJa2ZyZWUoYnVmKTsKLQkJYnVmID0gTlVMTDsKLQkJZGVzY19wdHIgPSBOVUxMOwotCQlhZGRsX2Rlc2NfcHRyID0gTlVMTDsKLQl9IGVsc2UgewotCQlkZXNjX3B0ciA9IGJ1ZiArIDg7Ci0JCWxlbiA9IChkZXNjX3B0clsyXSA8PCA4KSArIGRlc2NfcHRyWzNdOwotCQkvKiBza2lwIHBhc3Qgb3ZlcmFsbCBkZXNjcmlwdG9yICovCi0JCWRlc2NfcHRyICs9IGxlbiArIDQ7Ci0JCWlmIChzZXNfZGV2LT5wYWdlMTApCi0JCQlhZGRsX2Rlc2NfcHRyID0gc2VzX2Rldi0+cGFnZTEwICsgODsKLQl9Ci0JdHlwZV9wdHIgPSBzZXNfZGV2LT5wYWdlMSArIDEyICsgc2VzX2Rldi0+cGFnZTFbMTFdOwotCWNvbXBvbmVudHMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCB0eXBlczsgaSsrLCB0eXBlX3B0ciArPSA0KSB7Ci0JCWZvciAoaiA9IDA7IGogPCB0eXBlX3B0clsxXTsgaisrKSB7Ci0JCQljaGFyICpuYW1lID0gTlVMTDsKLQkJCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICplY29tcDsKLQotCQkJaWYgKGRlc2NfcHRyKSB7Ci0JCQkJaWYgKGRlc2NfcHRyID49IGJ1ZiArIHBhZ2U3X2xlbikgewotCQkJCQlkZXNjX3B0ciA9IE5VTEw7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbGVuID0gKGRlc2NfcHRyWzJdIDw8IDgpICsgZGVzY19wdHJbM107Ci0JCQkJCWRlc2NfcHRyICs9IDQ7Ci0JCQkJCS8qIEFkZCB0cmFpbGluZyB6ZXJvIC0gcHVzaGVzIGludG8KLQkJCQkJICogcmVzZXJ2ZWQgc3BhY2UgKi8KLQkJCQkJZGVzY19wdHJbbGVuXSA9ICdcMCc7Ci0JCQkJCW5hbWUgPSBkZXNjX3B0cjsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAodHlwZV9wdHJbMF0gPT0gRU5DTE9TVVJFX0NPTVBPTkVOVF9ERVZJQ0UgfHwKLQkJCSAgICB0eXBlX3B0clswXSA9PSBFTkNMT1NVUkVfQ09NUE9ORU5UX0FSUkFZX0RFVklDRSkgewotCi0JCQkJZWNvbXAgPQllbmNsb3N1cmVfY29tcG9uZW50X3JlZ2lzdGVyKGVkZXYsCi0JCQkJCQkJICAgICBjb21wb25lbnRzKyssCi0JCQkJCQkJICAgICB0eXBlX3B0clswXSwKLQkJCQkJCQkgICAgIG5hbWUpOwotCi0JCQkJaWYgKCFJU19FUlIoZWNvbXApICYmIGFkZGxfZGVzY19wdHIpCi0JCQkJCXNlc19wcm9jZXNzX2Rlc2NyaXB0b3IoZWNvbXAsCi0JCQkJCQkJICAgICAgIGFkZGxfZGVzY19wdHIpOwotCQkJfQotCQkJaWYgKGRlc2NfcHRyKQotCQkJCWRlc2NfcHRyICs9IGxlbjsKLQotCQkJaWYgKGFkZGxfZGVzY19wdHIpCi0JCQkJYWRkbF9kZXNjX3B0ciArPSBhZGRsX2Rlc2NfcHRyWzFdICsgMjsKLQotCQl9Ci0JfQotCWtmcmVlKGJ1Zik7Ci0Ja2ZyZWUoaGRyX2J1Zik7CisJc2VzX2VuY2xvc3VyZV9kYXRhX3Byb2Nlc3MoZWRldiwgc2RldiwgMSk7CiAKIAkvKiBzZWUgaWYgdGhlcmUgYXJlIGFueSBkZXZpY2VzIG1hdGNoaW5nIGJlZm9yZQogCSAqIHdlIGZvdW5kIHRoZSBlbmNsb3N1cmUgKi8KQEAgLTYxNSwxNyArNjQyLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNlc19pbnRmX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpjZGV2LAotCQkJICAgIHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKmludGYpCitzdGF0aWMgdm9pZCBzZXNfaW50Zl9yZW1vdmVfY29tcG9uZW50KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShjZGV2LT5wYXJlbnQpOworCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2LCAqcHJldiA9IE5VTEw7CisKKwl3aGlsZSAoKGVkZXYgPSBlbmNsb3N1cmVfZmluZCgmc2Rldi0+aG9zdC0+c2hvc3RfZ2VuZGV2LCBwcmV2KSkgIT0gTlVMTCkgeworCQlwcmV2ID0gZWRldjsKKwkJaWYgKCFlbmNsb3N1cmVfcmVtb3ZlX2RldmljZShlZGV2LCAmc2Rldi0+c2Rldl9nZW5kZXYpKQorCQkJYnJlYWs7CisJfQorCWlmIChlZGV2KQorCQlwdXRfZGV2aWNlKCZlZGV2LT5lZGV2KTsKK30KKworc3RhdGljIHZvaWQgc2VzX2ludGZfcmVtb3ZlX2VuY2xvc3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CiAJc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXY7CiAJc3RydWN0IHNlc19kZXZpY2UgKnNlc19kZXY7CiAKLQlpZiAoIXNjc2lfZGV2aWNlX2VuY2xvc3VyZShzZGV2KSkKLQkJcmV0dXJuOwotCi0JZWRldiA9IGVuY2xvc3VyZV9maW5kKGNkZXYtPnBhcmVudCk7CisJLyogIGV4YWN0IG1hdGNoIHRvIHRoaXMgZW5jbG9zdXJlICovCisJZWRldiA9IGVuY2xvc3VyZV9maW5kKCZzZGV2LT5zZGV2X2dlbmRldiwgTlVMTCk7CiAJaWYgKCFlZGV2KQogCQlyZXR1cm47CiAKQEAgLTY0Myw2ICs2NzksMTcgQEAKIAllbmNsb3N1cmVfdW5yZWdpc3RlcihlZGV2KTsKIH0KIAorc3RhdGljIHZvaWQgc2VzX2ludGZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmNkZXYsCisJCQkgICAgc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShjZGV2LT5wYXJlbnQpOworCisJaWYgKCFzY3NpX2RldmljZV9lbmNsb3N1cmUoc2RldikpCisJCXNlc19pbnRmX3JlbW92ZV9jb21wb25lbnQoc2Rldik7CisJZWxzZQorCQlzZXNfaW50Zl9yZW1vdmVfZW5jbG9zdXJlKHNkZXYpOworfQorCiBzdGF0aWMgc3RydWN0IGNsYXNzX2ludGVyZmFjZSBzZXNfaW50ZXJmYWNlID0gewogCS5hZGRfZGV2CT0gc2VzX2ludGZfYWRkLAogCS5yZW1vdmVfZGV2CT0gc2VzX2ludGZfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuYwppbmRleCA5MjMwNDAyLi40OTY4YzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYworKysgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtMTgxMSw3ICsxODExLDcgQEAKIAlyZXR1cm4gMDsKIG91dDoKIAlmb3IgKGkgPSAwOyBpIDwgazsgaSsrKQotCQlfX2ZyZWVfcGFnZXMoc2NocC0+cGFnZXNba10sIG9yZGVyKTsKKwkJX19mcmVlX3BhZ2VzKHNjaHAtPnBhZ2VzW2ldLCBvcmRlcik7CiAKIAlpZiAoLS1vcmRlciA+PSAwKQogCQlnb3RvIHJldHJ5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N0ZXguYyBiL2RyaXZlcnMvc2NzaS9zdGV4LmMKaW5kZXggOGQyYTk1Yy4uMDlmYTg4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0ZXguYworKysgYi9kcml2ZXJzL3Njc2kvc3RleC5jCkBAIC01NSw2ICs1NSw3IEBACiAJT0lTCT0gMHgzMCwJLyogTVVfT1VUQk9VTkRfSU5URVJSVVBUX1NUQVRVUyAqLwogCU9JTQk9IDB4M2MsCS8qIE1VX09VVEJPVU5EX0lOVEVSUlVQVF9NQVNLICovCiAKKwlZSU9BX1NUQVRVUwkJCQk9IDB4MDAsCiAJWUgySV9JTlQJCQkJPSAweDIwLAogCVlJTlRfRU4JCQkJCT0gMHgzNCwKIAlZSTJIX0lOVAkJCQk9IDB4OWMsCkBAIC0xMDgsNiArMTA5LDEwIEBACiAKIAlTU19IRUFEX0hBTkRTSEFLRQkJCT0gMHg4MCwKIAorCVNTX0gySV9JTlRfUkVTRVQJCQk9IDB4MTAwLAorCisJU1NfTVVfT1BFUkFUSU9OQUwJCQk9IDB4ODAwMDAwMDAsCisKIAlTVEVYX0NEQl9MRU5HVEgJCQkJPSAxNiwKIAlTVEFUVVNfVkFSX0xFTgkJCQk9IDEyOCwKIApAQCAtODg0LDcgKzg4OSw3IEBACiAJCXRhZyA9ICh1MTYpdmFsdWU7CiAJCWlmICh1bmxpa2VseSh0YWcgPj0gaGJhLT5ob3N0LT5jYW5fcXVldWUpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCQkJCSIoJXMpOiBpbnZhbGlkIHRhZ1xuIiwgcGNpX25hbWUoaGJhLT5wZGV2KSk7CisJCQkJIiglcyk6IGludmFsaWQgdGFnXG4iLCBwY2lfbmFtZShoYmEtPnBkZXYpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTEwNDAsMTYgKzEwNDUsMjcgQEAKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBoYmEtPm1taW9fYmFzZTsKIAlzdHJ1Y3Qgc3RfbXNnX2hlYWRlciAqbXNnX2g7CiAJc3RydWN0IGhhbmRzaGFrZV9mcmFtZSAqaDsKLQlfX2xlMzIgKnNjcmF0Y2ggPSBoYmEtPnNjcmF0Y2g7CisJX19sZTMyICpzY3JhdGNoOwogCXUzMiBkYXRhOwogCXVuc2lnbmVkIGxvbmcgYmVmb3JlOwogCWludCByZXQgPSAwOwogCi0JaCA9IChzdHJ1Y3QgaGFuZHNoYWtlX2ZyYW1lICopKGhiYS0+YWxsb2NfcnEoaGJhKSk7Ci0JbXNnX2ggPSAoc3RydWN0IHN0X21zZ19oZWFkZXIgKiloIC0gMTsKKwliZWZvcmUgPSBqaWZmaWVzOworCXdoaWxlICgocmVhZGwoYmFzZSArIFlJT0FfU1RBVFVTKSAmIFNTX01VX09QRVJBVElPTkFMKSA9PSAwKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGJlZm9yZSArIE1VX01BWF9ERUxBWSAqIEhaKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkJIiglcyk6IGZpcm13YXJlIG5vdCBvcGVyYXRpb25hbFxuIiwKKwkJCQlwY2lfbmFtZShoYmEtPnBkZXYpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQltc2xlZXAoMSk7CisJfQorCisJbXNnX2ggPSAoc3RydWN0IHN0X21zZ19oZWFkZXIgKiloYmEtPmRtYV9tZW07CiAJbXNnX2gtPmhhbmRsZSA9IGNwdV90b19sZTY0KGhiYS0+ZG1hX2hhbmRsZSk7CiAJbXNnX2gtPmZsYWcgPSBTU19IRUFEX0hBTkRTSEFLRTsKIAorCWggPSAoc3RydWN0IGhhbmRzaGFrZV9mcmFtZSAqKShtc2dfaCArIDEpOwogCWgtPnJiX3BoeSA9IGNwdV90b19sZTY0KGhiYS0+ZG1hX2hhbmRsZSk7CiAJaC0+cmVxX3N6ID0gY3B1X3RvX2xlMTYoaGJhLT5ycV9zaXplKTsKIAloLT5yZXFfY250ID0gY3B1X3RvX2xlMTYoaGJhLT5ycV9jb3VudCsxKTsKQEAgLTEyMDUsNiArMTIyMSwxMyBAQAogCQkJaGJhLT5wZGV2LT5zYXZlZF9jb25maWdfc3BhY2VbaV0pOwogfQogCitzdGF0aWMgdm9pZCBzdGV4X3NzX3Jlc2V0KHN0cnVjdCBzdF9oYmEgKmhiYSkKK3sKKwl3cml0ZWwoU1NfSDJJX0lOVF9SRVNFVCwgaGJhLT5tbWlvX2Jhc2UgKyBZSDJJX0lOVCk7CisJcmVhZGwoaGJhLT5tbWlvX2Jhc2UgKyBZSDJJX0lOVCk7CisJc3NsZWVwKDUpOworfQorCiBzdGF0aWMgaW50IHN0ZXhfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCXN0cnVjdCBzdF9oYmEgKmhiYTsKQEAgLTEyMjEsNiArMTI0NCw4IEBACiAKIAlpZiAoaGJhLT5jYXJkdHlwZSA9PSBzdF9zaGFzdGEpCiAJCXN0ZXhfaGFyZF9yZXNldChoYmEpOworCWVsc2UgaWYgKGhiYS0+Y2FyZHR5cGUgPT0gc3RfeWVsKQorCQlzdGV4X3NzX3Jlc2V0KGhiYSk7CiAKIAlpZiAoaGJhLT5jYXJkdHlwZSAhPSBzdF95b3NlbWl0ZSkgewogCQlpZiAoc3RleF9oYW5kc2hha2UoaGJhKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKaW5kZXggNjU1MzgzMy4uMDM0MjJjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC00NTksNyArNDU5LDcgQEAKIAlpbnQKIAlkZXBlbmRzIG9uIEFSTSAmJiBQTEFUX1MzQwogCWRlZmF1bHQgMiBpZiBBUkNIX1MzQzI0MDAKLQlkZWZhdWx0IDQgaWYgQVJDSF9TM0M2NFhYIHx8IENQVV9TM0MyNDQzCisJZGVmYXVsdCA0IGlmIEFSQ0hfUzVQQzFYWCB8fCBBUkNIX1MzQzY0WFggfHwgQ1BVX1MzQzI0NDMKIAlkZWZhdWx0IDMKIAloZWxwCiAJICBTZWxlY3QgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgVUFSVCBwb3J0cyBmb3IgdGhlIFNhbXN1bmcgUzNDCkBAIC01MzMsNiArNTMzLDEzIEBACiAJICBTZXJpYWwgcG9ydCBzdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBTM0M2NDAwIGFuZCBTM0M2NDEwCiAJICBTb0NzCiAKK2NvbmZpZyBTRVJJQUxfUzVQQzEwMAorCXRyaXN0YXRlICJTYW1zdW5nIFM1UEMxMDAgU2VyaWFsIHBvcnQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNFUklBTF9TQU1TVU5HICYmIENQVV9TNVBDMTAwCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2VyaWFsIHBvcnQgc3VwcG9ydCBmb3IgdGhlIFNhbXN1bmcgUzVQQzEwMCBTb0NzCisKIGNvbmZpZyBTRVJJQUxfTUFYMzEwMAogCXRyaXN0YXRlICJNQVgzMTAwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTUEkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKaW5kZXggZDVhMjk5OC4uOTdmNmZjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKQEAgLTQzLDYgKzQzLDcgQEAKIG9iai0kKENPTkZJR19TRVJJQUxfUzNDMjQ0MCkgKz0gczNjMjQ0MC5vCiBvYmotJChDT05GSUdfU0VSSUFMX1MzQzI0QTApICs9IHMzYzI0YTAubwogb2JqLSQoQ09ORklHX1NFUklBTF9TM0M2NDAwKSArPSBzM2M2NDAwLm8KK29iai0kKENPTkZJR19TRVJJQUxfUzVQQzEwMCkgKz0gczNjNjQwMC5vCiBvYmotJChDT05GSUdfU0VSSUFMX01BWDMxMDApICs9IG1heDMxMDAubwogb2JqLSQoQ09ORklHX1NFUklBTF9JUDIyX1pJTE9HKSArPSBpcDIyemlsb2cubwogb2JqLSQoQ09ORklHX1NFUklBTF9NVVgpICs9IG11eC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKaW5kZXggYmY4MmUyOC4uNzJiYTBjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYwpAQCAtODI2LDYgKzgyNiwyOCBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHBsMDExX3N1c3BlbmQoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCA9IGFtYmFfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICghdWFwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB1YXJ0X3N1c3BlbmRfcG9ydCgmYW1iYV9yZWcsICZ1YXAtPnBvcnQpOworfQorCitzdGF0aWMgaW50IHBsMDExX3Jlc3VtZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCA9IGFtYmFfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICghdWFwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB1YXJ0X3Jlc3VtZV9wb3J0KCZhbWJhX3JlZywgJnVhcC0+cG9ydCk7Cit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBhbWJhX2lkIHBsMDExX2lkc1tdIF9faW5pdGRhdGEgPSB7CiAJewogCQkuaWQJPSAweDAwMDQxMDExLApAQCAtODQ3LDYgKzg2OSwxMCBAQAogCS5pZF90YWJsZQk9IHBsMDExX2lkcywKIAkucHJvYmUJCT0gcGwwMTFfcHJvYmUsCiAJLnJlbW92ZQkJPSBwbDAxMV9yZW1vdmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBwbDAxMV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcGwwMTFfcmVzdW1lLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBwbDAxMV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pbXguYyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCmluZGV4IDVkN2I1OGYuLjc0ODVhZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lteC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCkBAIC02NywyMSArNjcsOCBAQAogI2RlZmluZSBVQklSICAweGE0IC8qIEJSTSBJbmNyZW1lbnRhbCBSZWdpc3RlciAqLwogI2RlZmluZSBVQk1SICAweGE4IC8qIEJSTSBNb2R1bGF0b3IgUmVnaXN0ZXIgKi8KICNkZWZpbmUgVUJSQyAgMHhhYyAvKiBCYXVkIFJhdGUgQ291bnQgUmVnaXN0ZXIgKi8KLSNpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMyB8fCBkZWZpbmVkIENPTkZJR19BUkNIX01YMgotI2RlZmluZSBPTkVNUyAweGIwIC8qIE9uZSBNaWxsaXNlY29uZCByZWdpc3RlciAqLwotI2RlZmluZSBVVFMgICAweGI0IC8qIFVBUlQgVGVzdCBSZWdpc3RlciAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgxCi0jZGVmaW5lIEJJUFIxIDB4YjAgLyogSW5jcmVtZW50YWwgUHJlc2V0IFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgQklQUjIgMHhiNCAvKiBJbmNyZW1lbnRhbCBQcmVzZXQgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSBCSVBSMyAweGI4IC8qIEluY3JlbWVudGFsIFByZXNldCBSZWdpc3RlciAzICovCi0jZGVmaW5lIEJJUFI0IDB4YmMgLyogSW5jcmVtZW50YWwgUHJlc2V0IFJlZ2lzdGVyIDQgKi8KLSNkZWZpbmUgQk1QUjEgMHhjMCAvKiBCUk0gTW9kdWxhdG9yIFJlZ2lzdGVyIDEgKi8KLSNkZWZpbmUgQk1QUjIgMHhjNCAvKiBCUk0gTW9kdWxhdG9yIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgQk1QUjMgMHhjOCAvKiBCUk0gTW9kdWxhdG9yIFJlZ2lzdGVyIDMgKi8KLSNkZWZpbmUgQk1QUjQgMHhjYyAvKiBCUk0gTW9kdWxhdG9yIFJlZ2lzdGVyIDQgKi8KLSNkZWZpbmUgVVRTICAgMHhkMCAvKiBVQVJUIFRlc3QgUmVnaXN0ZXIgKi8KLSNlbmRpZgorI2RlZmluZSBNWDJfT05FTVMgMHhiMCAvKiBPbmUgTWlsbGlzZWNvbmQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVRTIChjcHVfaXNfbXgxKCkgPyAweGQwIDogMHhiNCkgLyogVUFSVCBUZXN0IFJlZ2lzdGVyICovCiAKIC8qIFVBUlQgQ29udHJvbCBSZWdpc3RlciBCaXQgRmllbGRzLiovCiAjZGVmaW5lICBVUlhEX0NIQVJSRFkgICAgKDE8PDE1KQpAQCAtMTAxLDEyICs4OCw3IEBACiAjZGVmaW5lICBVQ1IxX1JUU0RFTiAgICAgKDE8PDUpCSAvKiBSVFMgZGVsdGEgaW50ZXJydXB0IGVuYWJsZSAqLwogI2RlZmluZSAgVUNSMV9TTkRCUksgICAgICgxPDw0KQkgLyogU2VuZCBicmVhayAqLwogI2RlZmluZSAgVUNSMV9URE1BRU4gICAgICgxPDwzKQkgLyogVHJhbnNtaXR0ZXIgcmVhZHkgRE1BIGVuYWJsZSAqLwotI2lmZGVmIENPTkZJR19BUkNIX01YMQotI2RlZmluZSAgVUNSMV9VQVJUQ0xLRU4gICgxPDwyKQkgLyogVUFSVCBjbG9jayBlbmFibGVkICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMyB8fCBkZWZpbmVkIENPTkZJR19BUkNIX01YMgotI2RlZmluZSAgVUNSMV9VQVJUQ0xLRU4gICgwKQkgLyogbm90IHByZXNlbnQgb24gbXgyL214MyAqLwotI2VuZGlmCisjZGVmaW5lICBNWDFfVUNSMV9VQVJUQ0xLRU4gICgxPDwyKQkgLyogVUFSVCBjbG9jayBlbmFibGVkLCBteDEgb25seSAqLwogI2RlZmluZSAgVUNSMV9ET1pFICAgICAgICgxPDwxKQkgLyogRG96ZSAqLwogI2RlZmluZSAgVUNSMV9VQVJURU4gICAgICgxPDwwKQkgLyogVUFSVCBlbmFibGVkICovCiAjZGVmaW5lICBVQ1IyX0VTQ0kgICAgIAkgKDE8PDE1KSAvKiBFc2NhcGUgc2VxIGludGVycnVwdCBlbmFibGUgKi8KQEAgLTEzMiwxMyArMTE0LDkgQEAKICNkZWZpbmUgIFVDUjNfUlhEU0VOCSAoMTw8NikgIC8qIFJlY2VpdmUgc3RhdHVzIGludGVycnVwdCBlbmFibGUgKi8KICNkZWZpbmUgIFVDUjNfQUlSSU5URU4gICAoMTw8NSkgIC8qIEFzeW5jIElSIHdha2UgaW50ZXJydXB0IGVuYWJsZSAqLwogI2RlZmluZSAgVUNSM19BV0FLRU4JICgxPDw0KSAgLyogQXN5bmMgd2FrZSBpbnRlcnJ1cHQgZW5hYmxlICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgxCi0jZGVmaW5lICBVQ1IzX1JFRjI1IAkgKDE8PDMpICAvKiBSZWYgZnJlcSAyNSBNSHosIG9ubHkgb24gbXgxICovCi0jZGVmaW5lICBVQ1IzX1JFRjMwIAkgKDE8PDIpICAvKiBSZWYgRnJlcSAzMCBNSHosIG9ubHkgb24gbXgxICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMiB8fCBkZWZpbmVkIENPTkZJR19BUkNIX01YMwotI2RlZmluZSAgVUNSM19SWERNVVhTRUwJICgxPDwyKSAgLyogUlhEIE11eGVkIElucHV0IFNlbGVjdCwgb24gbXgyL214MyAqLwotI2VuZGlmCisjZGVmaW5lICBNWDFfVUNSM19SRUYyNSAJICgxPDwzKSAgLyogUmVmIGZyZXEgMjUgTUh6LCBvbmx5IG9uIG14MSAqLworI2RlZmluZSAgTVgxX1VDUjNfUkVGMzAgCSAoMTw8MikgIC8qIFJlZiBGcmVxIDMwIE1Ieiwgb25seSBvbiBteDEgKi8KKyNkZWZpbmUgIE1YMl9VQ1IzX1JYRE1VWFNFTAkgKDE8PDIpICAvKiBSWEQgTXV4ZWQgSW5wdXQgU2VsZWN0LCBvbiBteDIvbXgzICovCiAjZGVmaW5lICBVQ1IzX0lOVlQgIAkgKDE8PDEpICAvKiBJbnZlcnRlZCBJbmZyYXJlZCB0cmFuc21pc3Npb24gKi8KICNkZWZpbmUgIFVDUjNfQlBFTiAgCSAoMTw8MCkgIC8qIFByZXNldCByZWdpc3RlcnMgZW5hYmxlICovCiAjZGVmaW5lICBVQ1I0X0NUU1RMXzMyICAgKDMyPDwxMCkgLyogQ1RTIHRyaWdnZXIgbGV2ZWwgKDMyIGNoYXJzKSAqLwpAQCAtMTg2LDEyICsxNjQsMTAgQEAKICNkZWZpbmUgIFVUU19TT0ZUUlNUCSAoMTw8MCkJIC8qIFNvZnR3YXJlIHJlc2V0ICovCiAKIC8qIFdlJ3ZlIGJlZW4gYXNzaWduZWQgYSByYW5nZSBvbiB0aGUgIkxvdy1kZW5zaXR5IHNlcmlhbCBwb3J0cyIgbWFqb3IgKi8KLSNpZmRlZiBDT05GSUdfQVJDSF9NWEMKICNkZWZpbmUgU0VSSUFMX0lNWF9NQUpPUiAgICAgICAgMjA3CiAjZGVmaW5lIE1JTk9SX1NUQVJUCSAgICAgICAgMTYKICNkZWZpbmUgREVWX05BTUUJCSJ0dHlteGMiCiAjZGVmaW5lIE1BWF9JTlRFUk5BTF9JUlEJTVhDX0lOVEVSTkFMX0lSUVMKLSNlbmRpZgogCiAvKgogICogVGhpcyBkZXRlcm1pbmVzIGhvdyBvZnRlbiB3ZSBjaGVjayB0aGUgbW9kZW0gc3RhdHVzIHNpZ25hbHMKQEAgLTcwNiwxMSArNjgyLDExIEBACiAJCX0KIAl9CiAKLSNpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMiB8fCBkZWZpbmVkIENPTkZJR19BUkNIX01YMwotCXRlbXAgPSByZWFkbChzcG9ydC0+cG9ydC5tZW1iYXNlICsgVUNSMyk7Ci0JdGVtcCB8PSBVQ1IzX1JYRE1VWFNFTDsKLQl3cml0ZWwodGVtcCwgc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjMpOwotI2VuZGlmCisJaWYgKCFjcHVfaXNfbXgxKCkpIHsKKwkJdGVtcCA9IHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1IzKTsKKwkJdGVtcCB8PSBNWDJfVUNSM19SWERNVVhTRUw7CisJCXdyaXRlbCh0ZW1wLCBzcG9ydC0+cG9ydC5tZW1iYXNlICsgVUNSMyk7CisJfQogCiAJaWYgKFVTRV9JUkRBKHNwb3J0KSkgewogCQl0ZW1wID0gcmVhZGwoc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjQpOwpAQCAtOTQyLDkgKzkxOCw5IEBACiAJd3JpdGVsKG51bSwgc3BvcnQtPnBvcnQubWVtYmFzZSArIFVCSVIpOwogCXdyaXRlbChkZW5vbSwgc3BvcnQtPnBvcnQubWVtYmFzZSArIFVCTVIpOwogCi0jaWZkZWYgT05FTVMKLQl3cml0ZWwoc3BvcnQtPnBvcnQudWFydGNsayAvIGRpdiAvIDEwMDAsIHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBPTkVNUyk7Ci0jZW5kaWYKKwlpZiAoIWNwdV9pc19teDEoKSkKKwkJd3JpdGVsKHNwb3J0LT5wb3J0LnVhcnRjbGsgLyBkaXYgLyAxMDAwLAorCQkJCXNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBNWDJfT05FTVMpOwogCiAJd3JpdGVsKG9sZF91Y3IxLCBzcG9ydC0+cG9ydC5tZW1iYXNlICsgVUNSMSk7CiAKQEAgLTEwNzQsMTcgKzEwNTAsMjAgQEAKIGlteF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGNvdW50KQogewogCXN0cnVjdCBpbXhfcG9ydCAqc3BvcnQgPSBpbXhfcG9ydHNbY28tPmluZGV4XTsKLQl1bnNpZ25lZCBpbnQgb2xkX3VjcjEsIG9sZF91Y3IyOworCXVuc2lnbmVkIGludCBvbGRfdWNyMSwgb2xkX3VjcjIsIHVjcjE7CiAKIAkvKgogCSAqCUZpcnN0LCBzYXZlIFVDUjEvMiBhbmQgdGhlbiBkaXNhYmxlIGludGVycnVwdHMKIAkgKi8KLQlvbGRfdWNyMSA9IHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1IxKTsKKwl1Y3IxID0gb2xkX3VjcjEgPSByZWFkbChzcG9ydC0+cG9ydC5tZW1iYXNlICsgVUNSMSk7CiAJb2xkX3VjcjIgPSByZWFkbChzcG9ydC0+cG9ydC5tZW1iYXNlICsgVUNSMik7CiAKLQl3cml0ZWwoKG9sZF91Y3IxIHwgVUNSMV9VQVJUQ0xLRU4gfCBVQ1IxX1VBUlRFTikgJgotCQl+KFVDUjFfVFhNUFRZRU4gfCBVQ1IxX1JSRFlFTiB8IFVDUjFfUlRTREVOKSwKLQkJc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjEpOworCWlmIChjcHVfaXNfbXgxKCkpCisJCXVjcjEgfD0gTVgxX1VDUjFfVUFSVENMS0VOOworCXVjcjEgfD0gVUNSMV9VQVJURU47CisJdWNyMSAmPSB+KFVDUjFfVFhNUFRZRU4gfCBVQ1IxX1JSRFlFTiB8IFVDUjFfUlRTREVOKTsKKworCXdyaXRlbCh1Y3IxLCBzcG9ydC0+cG9ydC5tZW1iYXNlICsgVUNSMSk7CiAKIAl3cml0ZWwob2xkX3VjcjIgfCBVQ1IyX1RYRU4sIHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1IyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2tzODY5NS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2tzODY5NS5jCmluZGV4IGUwNjY1NjMuLjUyZGI1Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9rczg2OTUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMKQEAgLTExMCw3ICsxMTAsMTEgQEAKIHN0YXRpYyB2b2lkIGtzODY5NXVhcnRfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmICh0eF9lbmFibGVkKHBvcnQpKSB7Ci0JCWRpc2FibGVfaXJxKEtTODY5NV9JUlFfVUFSVF9UWCk7CisJCS8qIHVzZSBkaXNhYmxlX2lycV9ub3N5bmMoKSBhbmQgbm90IGRpc2FibGVfaXJxKCkgdG8gYXZvaWQgc2VsZgorCQkgKiBpbXBvc2VkIGRlYWRsb2NrIGJ5IG5vdCB3YWl0aW5nIGZvciBpcnEgaGFuZGxlciB0byBlbmQsCisJCSAqIHNpbmNlIHRoaXMga3M4Njk1dWFydF9zdG9wX3R4KCkgaXMgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisJCSAqLworCQlkaXNhYmxlX2lycV9ub3N5bmMoS1M4Njk1X0lSUV9VQVJUX1RYKTsKIAkJdHhfZW5hYmxlKHBvcnQsIDApOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYyBiL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYwppbmRleCBkYTc2Nzk3Li5jMGY5NTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKKysrIGIvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCkBAIC0zOCwxNCArMzgsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDAyMi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogLyoKICAqIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkZWZpbmUgc29tZSByZWdpc3RlciBkZWZhdWx0IHZhbHVlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL0tjb25maWcgYi9kcml2ZXJzL3NzYi9LY29uZmlnCmluZGV4IDU0MGEyOTQuLjJkOGNjNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL0tjb25maWcKKysrIGIvZHJpdmVycy9zc2IvS2NvbmZpZwpAQCAtNjYsNiArNjYsMjAgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTgogCitjb25maWcgU1NCX1NESU9IT1NUX1BPU1NJQkxFCisJYm9vbAorCWRlcGVuZHMgb24gU1NCICYmIChNTUMgPSB5IHx8IE1NQyA9IFNTQikKKwlkZWZhdWx0IHkKKworY29uZmlnIFNTQl9TRElPSE9TVAorCWJvb2wgIlN1cHBvcnQgZm9yIFNTQiBvbiBTRElPLWJ1cyBob3N0IgorCWRlcGVuZHMgb24gU1NCX1NESU9IT1NUX1BPU1NJQkxFCisJaGVscAorCSAgU3VwcG9ydCBmb3IgYSBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUgb24gdG9wCisJICBvZiBhIFNESU8gZGV2aWNlLgorCisJICBJZiB1bnN1cmUsIHNheSBOCisKIGNvbmZpZyBTU0JfU0lMRU5UCiAJYm9vbCAiTm8gU1NCIGtlcm5lbCBtZXNzYWdlcyIKIAlkZXBlbmRzIG9uIFNTQiAmJiBFTUJFRERFRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvTWFrZWZpbGUgYi9kcml2ZXJzL3NzYi9NYWtlZmlsZQppbmRleCBjZmJiNzRmLi42NTZlNThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NzYi9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAKICMgaG9zdCBzdXBwb3J0CiBzc2ItJChDT05GSUdfU1NCX1BDSUhPU1QpCQkrPSBwY2kubyBwY2lob3N0X3dyYXBwZXIubwogc3NiLSQoQ09ORklHX1NTQl9QQ01DSUFIT1NUKQkJKz0gcGNtY2lhLm8KK3NzYi0kKENPTkZJR19TU0JfU0RJT0hPU1QpCQkrPSBzZGlvLm8KIAogIyBidWlsdC1pbiBkcml2ZXJzCiBzc2IteQkJCQkJKz0gZHJpdmVyX2NoaXBjb21tb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbl9wbXUuYwppbmRleCA0YWFkZGVlLi42NGFiZDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbl9wbXUuYworKysgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbl9wbXUuYwpAQCAtMjgsNiArMjgsMjEgQEAKIAljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTExDVExfREFUQSwgdmFsdWUpOwogfQogCitzdGF0aWMgdm9pZCBzc2JfY2hpcGNvX3JlZ2N0bF9tYXNrc2V0KHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsCisJCQkJICAgdTMyIG9mZnNldCwgdTMyIG1hc2ssIHUzMiBzZXQpCit7CisJdTMyIHZhbHVlOworCisJY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19SRUdDVExfQUREUik7CisJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUkVHQ1RMX0FERFIsIG9mZnNldCk7CisJY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19SRUdDVExfQUREUik7CisJdmFsdWUgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1JFR0NUTF9EQVRBKTsKKwl2YWx1ZSAmPSBtYXNrOworCXZhbHVlIHw9IHNldDsKKwljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19SRUdDVExfREFUQSwgdmFsdWUpOworCWNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUkVHQ1RMX0RBVEEpOworfQorCiBzdHJ1Y3QgcG11MF9wbGx0YWJfZW50cnkgewogCXUxNiBmcmVxOwkvKiBDcnlzdGFsIGZyZXF1ZW5jeSBpbiBrSHouKi8KIAl1OCB4ZjsJCS8qIENyeXN0YWwgZnJlcXVlbmN5IHZhbHVlIGZvciBQTVUgY29udHJvbCAqLwpAQCAtNTA2LDMgKzUyMSw4MiBAQAogCXNzYl9wbXVfcGxsX2luaXQoY2MpOwogCXNzYl9wbXVfcmVzb3VyY2VzX2luaXQoY2MpOwogfQorCit2b2lkIHNzYl9wbXVfc2V0X2xkb192b2x0YWdlKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsCisJCQkgICAgIGVudW0gc3NiX3BtdV9sZG9fdm9sdF9pZCBpZCwgdTMyIHZvbHRhZ2UpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGNjLT5kZXYtPmJ1czsKKwl1MzIgYWRkciwgc2hpZnQsIG1hc2s7CisKKwlzd2l0Y2ggKGJ1cy0+Y2hpcF9pZCkgeworCWNhc2UgMHg0MzI4OgorCWNhc2UgMHg1MzU0OgorCQlzd2l0Y2ggKGlkKSB7CisJCWNhc2UgTERPX1ZPTFQxOgorCQkJYWRkciA9IDI7CisJCQlzaGlmdCA9IDI1OworCQkJbWFzayA9IDB4RjsKKwkJCWJyZWFrOworCQljYXNlIExET19WT0xUMjoKKwkJCWFkZHIgPSAzOworCQkJc2hpZnQgPSAxOworCQkJbWFzayA9IDB4RjsKKwkJCWJyZWFrOworCQljYXNlIExET19WT0xUMzoKKwkJCWFkZHIgPSAzOworCQkJc2hpZnQgPSA5OworCQkJbWFzayA9IDB4RjsKKwkJCWJyZWFrOworCQljYXNlIExET19QQVJFRjoKKwkJCWFkZHIgPSAzOworCQkJc2hpZnQgPSAxNzsKKwkJCW1hc2sgPSAweDNGOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlTU0JfV0FSTl9PTigxKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4NDMxMjoKKwkJaWYgKFNTQl9XQVJOX09OKGlkICE9IExET19QQVJFRikpCisJCQlyZXR1cm47CisJCWFkZHIgPSAwOworCQlzaGlmdCA9IDIxOworCQltYXNrID0gMHgzRjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCXNzYl9jaGlwY29fcmVnY3RsX21hc2tzZXQoY2MsIGFkZHIsIH4obWFzayA8PCBzaGlmdCksCisJCQkJICAodm9sdGFnZSAmIG1hc2spIDw8IHNoaWZ0KTsKK30KKwordm9pZCBzc2JfcG11X3NldF9sZG9fcGFyZWYoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgYm9vbCBvbikKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gY2MtPmRldi0+YnVzOworCWludCBsZG87CisKKwlzd2l0Y2ggKGJ1cy0+Y2hpcF9pZCkgeworCWNhc2UgMHg0MzEyOgorCQlsZG8gPSBTU0JfUE1VUkVTXzQzMTJfUEFfUkVGX0xETzsKKwkJYnJlYWs7CisJY2FzZSAweDQzMjg6CisJCWxkbyA9IFNTQl9QTVVSRVNfNDMyOF9QQV9SRUZfTERPOworCQlicmVhazsKKwljYXNlIDB4NTM1NDoKKwkJbGRvID0gU1NCX1BNVVJFU181MzU0X1BBX1JFRl9MRE87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwlpZiAob24pCisJCWNoaXBjb19zZXQzMihjYywgU1NCX0NISVBDT19QTVVfTUlOUkVTX01TSywgMSA8PCBsZG8pOworCWVsc2UKKwkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfTUlOUkVTX01TSywgfigxIDw8IGxkbykpOworCWNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUE1VX01JTlJFU19NU0spOyAvL1NQRUMgRklYTUUgZm91bmQgdmlhIG1taW90cmFjZSAtIGR1bW15IHJlYWQ/Cit9CisKK0VYUE9SVF9TWU1CT0woc3NiX3BtdV9zZXRfbGRvX3ZvbHRhZ2UpOworRVhQT1JUX1NZTUJPTChzc2JfcG11X3NldF9sZG9fcGFyZWYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvbWFpbi5jIGIvZHJpdmVycy9zc2IvbWFpbi5jCmluZGV4IDY1YTFlZDkuLjU3OWIxMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL21haW4uYworKysgYi9kcml2ZXJzL3NzYi9tYWluLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiX2RyaXZlcl9naWdlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19mdW5jLmg+CiAKICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KQEAgLTg4LDYgKzg5LDI1IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NTQl9QQ01DSUFIT1NUICovCiAKKyNpZmRlZiBDT05GSUdfU1NCX1NESU9IT1NUCitzdHJ1Y3Qgc3NiX2J1cyAqc3NiX3NkaW9fZnVuY190b19idXMoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzOworCisJc3NiX2J1c2VzX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJmJ1c2VzLCBsaXN0KSB7CisJCWlmIChidXMtPmJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfU0RJTyAmJgorCQkgICAgYnVzLT5ob3N0X3NkaW8gPT0gZnVuYykKKwkJCWdvdG8gZm91bmQ7CisJfQorCWJ1cyA9IE5VTEw7Citmb3VuZDoKKwlzc2JfYnVzZXNfdW5sb2NrKCk7CisKKwlyZXR1cm4gYnVzOworfQorI2VuZGlmIC8qIENPTkZJR19TU0JfU0RJT0hPU1QgKi8KKwogaW50IHNzYl9mb3JfZWFjaF9idXNfY2FsbCh1bnNpZ25lZCBsb25nIGRhdGEsCiAJCQkgIGludCAoKmZ1bmMpKHN0cnVjdCBzc2JfYnVzICpidXMsIHVuc2lnbmVkIGxvbmcgZGF0YSkpCiB7CkBAIC00NjksNiArNDg5LDEyIEBACiAJCQlkZXYtPnBhcmVudCA9ICZidXMtPmhvc3RfcGNtY2lhLT5kZXY7CiAjZW5kaWYKIAkJCWJyZWFrOworCQljYXNlIFNTQl9CVVNUWVBFX1NESU86CisjaWZkZWYgQ09ORklHX1NTQl9TRElPCisJCQlzZGV2LT5pcnEgPSBidXMtPmhvc3Rfc2Rpby0+ZGV2LmlycTsKKwkJCWRldi0+cGFyZW50ID0gJmJ1cy0+aG9zdF9zZGlvLT5kZXY7CisjZW5kaWYKKwkJCWJyZWFrOwogCQljYXNlIFNTQl9CVVNUWVBFX1NTQjoKIAkJCWRldi0+ZG1hX21hc2sgPSAmZGV2LT5jb2hlcmVudF9kbWFfbWFzazsKIAkJCWJyZWFrOwpAQCAtNzI0LDEyICs3NTAsMTggQEAKIAllcnIgPSBzc2JfcGNpX3h0YWwoYnVzLCBTU0JfR1BJT19YVEFMIHwgU1NCX0dQSU9fUExMLCAxKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKKworCS8qIEluaXQgU0RJTy1ob3N0IGRldmljZSAoaWYgYW55KSwgYmVmb3JlIHRoZSBzY2FuICovCisJZXJyID0gc3NiX3NkaW9faW5pdChidXMpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2Rpc2FibGVfeHRhbDsKKwogCXNzYl9idXNlc19sb2NrKCk7CiAJYnVzLT5idXNudW1iZXIgPSBuZXh0X2J1c251bWJlcjsKIAkvKiBTY2FuIGZvciBkZXZpY2VzIChjb3JlcykgKi8KIAllcnIgPSBzc2JfYnVzX3NjYW4oYnVzLCBiYXNlYWRkcik7CiAJaWYgKGVycikKLQkJZ290byBlcnJfZGlzYWJsZV94dGFsOworCQlnb3RvIGVycl9zZGlvX2V4aXQ7CiAKIAkvKiBJbml0IFBDSS1ob3N0IGRldmljZSAoaWYgYW55KSAqLwogCWVyciA9IHNzYl9wY2lfaW5pdChidXMpOwpAQCAtNzc2LDYgKzgwOCw4IEBACiAJc3NiX3BjaV9leGl0KGJ1cyk7CiBlcnJfdW5tYXA6CiAJc3NiX2lvdW5tYXAoYnVzKTsKK2Vycl9zZGlvX2V4aXQ6CisJc3NiX3NkaW9fZXhpdChidXMpOwogZXJyX2Rpc2FibGVfeHRhbDoKIAlzc2JfYnVzZXNfdW5sb2NrKCk7CiAJc3NiX3BjaV94dGFsKGJ1cywgU1NCX0dQSU9fWFRBTCB8IFNTQl9HUElPX1BMTCwgMCk7CkBAIC04MjUsNiArODU5LDI4IEBACiBFWFBPUlRfU1lNQk9MKHNzYl9idXNfcGNtY2lhYnVzX3JlZ2lzdGVyKTsKICNlbmRpZiAvKiBDT05GSUdfU1NCX1BDTUNJQUhPU1QgKi8KIAorI2lmZGVmIENPTkZJR19TU0JfU0RJT0hPU1QKK2ludCBzc2JfYnVzX3NkaW9idXNfcmVnaXN0ZXIoc3RydWN0IHNzYl9idXMgKmJ1cywgc3RydWN0IHNkaW9fZnVuYyAqZnVuYywKKwkJCSAgICAgdW5zaWduZWQgaW50IHF1aXJrcykKK3sKKwlpbnQgZXJyOworCisJYnVzLT5idXN0eXBlID0gU1NCX0JVU1RZUEVfU0RJTzsKKwlidXMtPmhvc3Rfc2RpbyA9IGZ1bmM7CisJYnVzLT5vcHMgPSAmc3NiX3NkaW9fb3BzOworCWJ1cy0+cXVpcmtzID0gcXVpcmtzOworCisJZXJyID0gc3NiX2J1c19yZWdpc3RlcihidXMsIHNzYl9zZGlvX2dldF9pbnZhcmlhbnRzLCB+MCk7CisJaWYgKCFlcnIpIHsKKwkJc3NiX3ByaW50ayhLRVJOX0lORk8gUEZYICJTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUgZm91bmQgb24gIgorCQkJICAgIlNESU8gZGV2aWNlICVzXG4iLCBzZGlvX2Z1bmNfaWQoZnVuYykpOworCX0KKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHNzYl9idXNfc2Rpb2J1c19yZWdpc3Rlcik7CisjZW5kaWYgLyogQ09ORklHX1NTQl9QQ01DSUFIT1NUICovCisKIGludCBzc2JfYnVzX3NzYmJ1c19yZWdpc3RlcihzdHJ1Y3Qgc3NiX2J1cyAqYnVzLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgYmFzZWFkZHIsCiAJCQkgICAgc3NiX2ludmFyaWFudHNfZnVuY190IGdldF9pbnZhcmlhbnRzKQpAQCAtMTM1OCw4ICsxNDE0LDEwIEBACiAJc3NiX2J1c2VzX2xvY2soKTsKIAllcnIgPSBzc2JfYXR0YWNoX3F1ZXVlZF9idXNlcygpOwogCXNzYl9idXNlc191bmxvY2soKTsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKIAkJYnVzX3VucmVnaXN0ZXIoJnNzYl9idXN0eXBlKTsKKwkJZ290byBvdXQ7CisJfQogCiAJZXJyID0gYjQzX3BjaV9zc2JfYnJpZGdlX2luaXQoKTsKIAlpZiAoZXJyKSB7CkBAIC0xMzc1LDcgKzE0MzMsNyBAQAogCQkvKiBkb24ndCBmYWlsIFNTQiBpbml0IGJlY2F1c2Ugb2YgdGhpcyAqLwogCQllcnIgPSAwOwogCX0KLQorb3V0OgogCXJldHVybiBlcnI7CiB9CiAvKiBzc2IgbXVzdCBiZSBpbml0aWFsaXplZCBhZnRlciBQQ0kgYnV0IGJlZm9yZSB0aGUgc3NiIGRyaXZlcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY2kuYyBiL2RyaXZlcnMvc3NiL3BjaS5jCmluZGV4IDQwZWE0MTcuLmY4NTNkNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3BjaS5jCisrKyBiL2RyaXZlcnMvc3NiL3BjaS5jCkBAIC0xNjksOCArMTY5LDE0IEBACiAvKiBHZXQgdGhlIHdvcmQtb2Zmc2V0IGZvciBhIFNTQl9TUFJPTV9YWFggZGVmaW5lLiAqLwogI2RlZmluZSBTUE9GRihvZmZzZXQpCSgoKG9mZnNldCkgLSBTU0JfU1BST01fQkFTRSkgLyBzaXplb2YodTE2KSkKIC8qIEhlbHBlciB0byBleHRyYWN0IHNvbWUgX29mZnNldCwgd2hpY2ggaXMgb25lIG9mIHRoZSBTU0JfU1BST01fWFhYIGRlZmluZXMuICovCi0jZGVmaW5lIFNQRVgoX291dHZhciwgX29mZnNldCwgX21hc2ssIF9zaGlmdCkJXAorI2RlZmluZSBTUEVYMTYoX291dHZhciwgX29mZnNldCwgX21hc2ssIF9zaGlmdCkJXAogCW91dC0+X291dHZhciA9ICgoaW5bU1BPRkYoX29mZnNldCldICYgKF9tYXNrKSkgPj4gKF9zaGlmdCkpCisjZGVmaW5lIFNQRVgzMihfb3V0dmFyLCBfb2Zmc2V0LCBfbWFzaywgX3NoaWZ0KQlcCisJb3V0LT5fb3V0dmFyID0gKCgoKHUzMilpbltTUE9GRigoX29mZnNldCkrMildIDw8IDE2IHwgXAorCQkJICAgaW5bU1BPRkYoX29mZnNldCldKSAmIChfbWFzaykpID4+IChfc2hpZnQpKQorI2RlZmluZSBTUEVYKF9vdXR2YXIsIF9vZmZzZXQsIF9tYXNrLCBfc2hpZnQpIFwKKwlTUEVYMTYoX291dHZhciwgX29mZnNldCwgX21hc2ssIF9zaGlmdCkKKwogCiBzdGF0aWMgaW5saW5lIHU4IHNzYl9jcmM4KHU4IGNyYywgdTggZGF0YSkKIHsKQEAgLTQ3NCwxMiArNDgwLDE0IEBACiAKIAkvKiBleHRyYWN0IHRoZSBNQUMgYWRkcmVzcyAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJdiA9IGluW1NQT0ZGKFNTQl9TUFJPTTFfSUwwTUFDKSArIGldOworCQl2ID0gaW5bU1BPRkYoU1NCX1NQUk9NOF9JTDBNQUMpICsgaV07CiAJCSooKChfX2JlMTYgKilvdXQtPmlsMG1hYykgKyBpKSA9IGNwdV90b19iZTE2KHYpOwogCX0KIAlTUEVYKGNvdW50cnlfY29kZSwgU1NCX1NQUk9NOF9DQ09ERSwgMHhGRkZGLCAwKTsKIAlTUEVYKGJvYXJkZmxhZ3NfbG8sIFNTQl9TUFJPTThfQkZMTE8sIDB4RkZGRiwgMCk7CiAJU1BFWChib2FyZGZsYWdzX2hpLCBTU0JfU1BST004X0JGTEhJLCAweEZGRkYsIDApOworCVNQRVgoYm9hcmRmbGFnczJfbG8sIFNTQl9TUFJPTThfQkZMMkxPLCAweEZGRkYsIDApOworCVNQRVgoYm9hcmRmbGFnczJfaGksIFNTQl9TUFJPTThfQkZMMkhJLCAweEZGRkYsIDApOwogCVNQRVgoYW50X2F2YWlsYWJsZV9hLCBTU0JfU1BST004X0FOVEFWQUlMLCBTU0JfU1BST004X0FOVEFWQUlMX0EsCiAJICAgICBTU0JfU1BST004X0FOVEFWQUlMX0FfU0hJRlQpOwogCVNQRVgoYW50X2F2YWlsYWJsZV9iZywgU1NCX1NQUk9NOF9BTlRBVkFJTCwgU1NCX1NQUk9NOF9BTlRBVkFJTF9CRywKQEAgLTQ5MCwxMiArNDk4LDU1IEBACiAJU1BFWChtYXhwd3JfYSwgU1NCX1NQUk9NOF9NQVhQX0EsIFNTQl9TUFJPTThfTUFYUF9BX01BU0ssIDApOwogCVNQRVgoaXRzc2lfYSwgU1NCX1NQUk9NOF9NQVhQX0EsIFNTQl9TUFJPTThfSVRTU0lfQSwKIAkgICAgIFNTQl9TUFJPTThfSVRTU0lfQV9TSElGVCk7CisJU1BFWChtYXhwd3JfYWgsIFNTQl9TUFJPTThfTUFYUF9BSEwsIFNTQl9TUFJPTThfTUFYUF9BSF9NQVNLLCAwKTsKKwlTUEVYKG1heHB3cl9hbCwgU1NCX1NQUk9NOF9NQVhQX0FITCwgU1NCX1NQUk9NOF9NQVhQX0FMX01BU0ssCisJICAgICBTU0JfU1BST004X01BWFBfQUxfU0hJRlQpOwogCVNQRVgoZ3BpbzAsIFNTQl9TUFJPTThfR1BJT0EsIFNTQl9TUFJPTThfR1BJT0FfUDAsIDApOwogCVNQRVgoZ3BpbzEsIFNTQl9TUFJPTThfR1BJT0EsIFNTQl9TUFJPTThfR1BJT0FfUDEsCiAJICAgICBTU0JfU1BST004X0dQSU9BX1AxX1NISUZUKTsKIAlTUEVYKGdwaW8yLCBTU0JfU1BST004X0dQSU9CLCBTU0JfU1BST004X0dQSU9CX1AyLCAwKTsKIAlTUEVYKGdwaW8zLCBTU0JfU1BST004X0dQSU9CLCBTU0JfU1BST004X0dQSU9CX1AzLAogCSAgICAgU1NCX1NQUk9NOF9HUElPQl9QM19TSElGVCk7CisJU1BFWCh0cmkyZywgU1NCX1NQUk9NOF9UUkkyNUcsIFNTQl9TUFJPTThfVFJJMkcsIDApOworCVNQRVgodHJpNWcsIFNTQl9TUFJPTThfVFJJMjVHLCBTU0JfU1BST004X1RSSTVHLAorCSAgICAgU1NCX1NQUk9NOF9UUkk1R19TSElGVCk7CisJU1BFWCh0cmk1Z2wsIFNTQl9TUFJPTThfVFJJNUdITCwgU1NCX1NQUk9NOF9UUkk1R0wsIDApOworCVNQRVgodHJpNWdoLCBTU0JfU1BST004X1RSSTVHSEwsIFNTQl9TUFJPTThfVFJJNUdILAorCSAgICAgU1NCX1NQUk9NOF9UUkk1R0hfU0hJRlQpOworCVNQRVgocnhwbzJnLCBTU0JfU1BST004X1JYUE8sIFNTQl9TUFJPTThfUlhQTzJHLCAwKTsKKwlTUEVYKHJ4cG81ZywgU1NCX1NQUk9NOF9SWFBPLCBTU0JfU1BST004X1JYUE81RywKKwkgICAgIFNTQl9TUFJPTThfUlhQTzVHX1NISUZUKTsKKwlTUEVYKHJzc2lzbWYyZywgU1NCX1NQUk9NOF9SU1NJUEFSTTJHLCBTU0JfU1BST004X1JTU0lTTUYyRywgMCk7CisJU1BFWChyc3Npc21jMmcsIFNTQl9TUFJPTThfUlNTSVBBUk0yRywgU1NCX1NQUk9NOF9SU1NJU01DMkcsCisJICAgICBTU0JfU1BST004X1JTU0lTTUMyR19TSElGVCk7CisJU1BFWChyc3Npc2F2MmcsIFNTQl9TUFJPTThfUlNTSVBBUk0yRywgU1NCX1NQUk9NOF9SU1NJU0FWMkcsCisJICAgICBTU0JfU1BST004X1JTU0lTQVYyR19TSElGVCk7CisJU1BFWChieGEyZywgU1NCX1NQUk9NOF9SU1NJUEFSTTJHLCBTU0JfU1BST004X0JYQTJHLAorCSAgICAgU1NCX1NQUk9NOF9CWEEyR19TSElGVCk7CisJU1BFWChyc3Npc21mNWcsIFNTQl9TUFJPTThfUlNTSVBBUk01RywgU1NCX1NQUk9NOF9SU1NJU01GNUcsIDApOworCVNQRVgocnNzaXNtYzVnLCBTU0JfU1BST004X1JTU0lQQVJNNUcsIFNTQl9TUFJPTThfUlNTSVNNQzVHLAorCSAgICAgU1NCX1NQUk9NOF9SU1NJU01DNUdfU0hJRlQpOworCVNQRVgocnNzaXNhdjVnLCBTU0JfU1BST004X1JTU0lQQVJNNUcsIFNTQl9TUFJPTThfUlNTSVNBVjVHLAorCSAgICAgU1NCX1NQUk9NOF9SU1NJU0FWNUdfU0hJRlQpOworCVNQRVgoYnhhNWcsIFNTQl9TUFJPTThfUlNTSVBBUk01RywgU1NCX1NQUk9NOF9CWEE1RywKKwkgICAgIFNTQl9TUFJPTThfQlhBNUdfU0hJRlQpOworCVNQRVgocGEwYjAsIFNTQl9TUFJPTThfUEEwQjAsIDB4RkZGRiwgMCk7CisJU1BFWChwYTBiMSwgU1NCX1NQUk9NOF9QQTBCMSwgMHhGRkZGLCAwKTsKKwlTUEVYKHBhMGIyLCBTU0JfU1BST004X1BBMEIyLCAweEZGRkYsIDApOworCVNQRVgocGExYjAsIFNTQl9TUFJPTThfUEExQjAsIDB4RkZGRiwgMCk7CisJU1BFWChwYTFiMSwgU1NCX1NQUk9NOF9QQTFCMSwgMHhGRkZGLCAwKTsKKwlTUEVYKHBhMWIyLCBTU0JfU1BST004X1BBMUIyLCAweEZGRkYsIDApOworCVNQRVgocGExbG9iMCwgU1NCX1NQUk9NOF9QQTFMT0IwLCAweEZGRkYsIDApOworCVNQRVgocGExbG9iMSwgU1NCX1NQUk9NOF9QQTFMT0IxLCAweEZGRkYsIDApOworCVNQRVgocGExbG9iMiwgU1NCX1NQUk9NOF9QQTFMT0IyLCAweEZGRkYsIDApOworCVNQRVgocGExaGliMCwgU1NCX1NQUk9NOF9QQTFISUIwLCAweEZGRkYsIDApOworCVNQRVgocGExaGliMSwgU1NCX1NQUk9NOF9QQTFISUIxLCAweEZGRkYsIDApOworCVNQRVgocGExaGliMiwgU1NCX1NQUk9NOF9QQTFISUIyLCAweEZGRkYsIDApOworCVNQRVgoY2NrMmdwbywgU1NCX1NQUk9NOF9DQ0syR1BPLCAweEZGRkYsIDApOworCVNQRVgzMihvZmRtMmdwbywgU1NCX1NQUk9NOF9PRkRNMkdQTywgMHhGRkZGRkZGRiwgMCk7CisJU1BFWDMyKG9mZG01Z2xwbywgU1NCX1NQUk9NOF9PRkRNNUdMUE8sIDB4RkZGRkZGRkYsIDApOworCVNQRVgzMihvZmRtNWdwbywgU1NCX1NQUk9NOF9PRkRNNUdQTywgMHhGRkZGRkZGRiwgMCk7CisJU1BFWDMyKG9mZG01Z2hwbywgU1NCX1NQUk9NOF9PRkRNNUdIUE8sIDB4RkZGRkZGRkYsIDApOwogCiAJLyogRXh0cmFjdCB0aGUgYW50ZW5uYSBnYWluIHZhbHVlcy4gKi8KIAlTUEVYKGFudGVubmFfZ2Fpbi5naHoyNC5hMCwgU1NCX1NQUk9NOF9BR0FJTjAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2Ivc2Nhbi5jIGIvZHJpdmVycy9zc2Ivc2Nhbi5jCmluZGV4IDYzZWU1Y2YuLmI3NDIxMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3NjYW4uYworKysgYi9kcml2ZXJzL3NzYi9zY2FuLmMKQEAgLTE3NSw2ICsxNzUsOSBAQAogCQl9IGVsc2UKIAkJCXNzYl9wY21jaWFfc3dpdGNoX3NlZ21lbnQoYnVzLCAwKTsKIAkJYnJlYWs7CisJY2FzZSBTU0JfQlVTVFlQRV9TRElPOgorCQlvZmZzZXQgKz0gY3VycmVudF9jb3JlaWR4ICogU1NCX0NPUkVfU0laRTsKKwkJcmV0dXJuIHNzYl9zZGlvX3NjYW5fcmVhZDMyKGJ1cywgb2Zmc2V0KTsKIAl9CiAJcmV0dXJuIHJlYWRsKGJ1cy0+bW1pbyArIG9mZnNldCk7CiB9CkBAIC0xODgsNiArMTkxLDggQEAKIAkJcmV0dXJuIHNzYl9wY2lfc3dpdGNoX2NvcmVpZHgoYnVzLCBjb3JlaWR4KTsKIAljYXNlIFNTQl9CVVNUWVBFX1BDTUNJQToKIAkJcmV0dXJuIHNzYl9wY21jaWFfc3dpdGNoX2NvcmVpZHgoYnVzLCBjb3JlaWR4KTsKKwljYXNlIFNTQl9CVVNUWVBFX1NESU86CisJCXJldHVybiBzc2Jfc2Rpb19zY2FuX3N3aXRjaF9jb3JlaWR4KGJ1cywgY29yZWlkeCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjA2LDYgKzIxMSw4IEBACiAJCVNTQl9CVUdfT04oMSk7IC8qIENhbid0IHJlYWNoIHRoaXMgY29kZS4gKi8KICNlbmRpZgogCQlicmVhazsKKwljYXNlIFNTQl9CVVNUWVBFX1NESU86CisJCWJyZWFrOwogCX0KIAlidXMtPm1taW8gPSBOVUxMOwogCWJ1cy0+bWFwcGVkX2RldmljZSA9IE5VTEw7CkBAIC0yMzAsNiArMjM3LDEwIEBACiAJCVNTQl9CVUdfT04oMSk7IC8qIENhbid0IHJlYWNoIHRoaXMgY29kZS4gKi8KICNlbmRpZgogCQlicmVhazsKKwljYXNlIFNTQl9CVVNUWVBFX1NESU86CisJCS8qIE5vdGhpbmcgdG8gaW9yZW1hcCBpbiB0aGUgU0RJTyBjYXNlLCBqdXN0IGZha2UgaXQgKi8KKwkJbW1pbyA9ICh2b2lkIF9faW9tZW0gKiliYXNlYWRkcjsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIG1taW87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9zZGlvLmMgYi9kcml2ZXJzL3NzYi9zZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0MDUxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3NiL3NkaW8uYwpAQCAtMCwwICsxLDYxMCBAQAorLyoKKyAqIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorICogU0RJTy1Ib3N0YnVzIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IDIwMDkgQWxiZXJ0IEhlcnJhbnogPGFsYmVydF9oZXJyYW56QHlhaG9vLmVzPgorICoKKyAqIEJhc2VkIG9uIGRyaXZlcnMvc3NiL3BjbWNpYS5jCisgKiBDb3B5cmlnaHQgMjAwNiBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2IuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19mdW5jLmg+CisKKyNpbmNsdWRlICJzc2JfcHJpdmF0ZS5oIgorCisvKiBEZWZpbmUgdGhlIGZvbGxvd2luZyB0byAxIHRvIGVuYWJsZSBhIHByaW50ayBvbiBlYWNoIGNvcmVzd2l0Y2guICovCisjZGVmaW5lIFNTQl9WRVJCT1NFX1NESU9DT1JFU1dJVENIX0RFQlVHCQkxCisKKworLyogSGFyZHdhcmUgaW52YXJpYW50cyBDSVMgdHVwbGVzICovCisjZGVmaW5lIFNTQl9TRElPX0NJUwkJCTB4ODAKKyNkZWZpbmUgIFNTQl9TRElPX0NJU19TUk9NUkVWCQkweDAwCisjZGVmaW5lICBTU0JfU0RJT19DSVNfSUQJCTB4MDEKKyNkZWZpbmUgIFNTQl9TRElPX0NJU19CT0FSRFJFVgkJMHgwMgorI2RlZmluZSAgU1NCX1NESU9fQ0lTX1BBCQkweDAzCisjZGVmaW5lICAgU1NCX1NESU9fQ0lTX1BBX1BBMEIwX0xPCTAKKyNkZWZpbmUgICBTU0JfU0RJT19DSVNfUEFfUEEwQjBfSEkJMQorI2RlZmluZSAgIFNTQl9TRElPX0NJU19QQV9QQTBCMV9MTwkyCisjZGVmaW5lICAgU1NCX1NESU9fQ0lTX1BBX1BBMEIxX0hJCTMKKyNkZWZpbmUgICBTU0JfU0RJT19DSVNfUEFfUEEwQjJfTE8JNAorI2RlZmluZSAgIFNTQl9TRElPX0NJU19QQV9QQTBCMl9ISQk1CisjZGVmaW5lICAgU1NCX1NESU9fQ0lTX1BBX0lUU1NJCQk2CisjZGVmaW5lICAgU1NCX1NESU9fQ0lTX1BBX01BWFBPVwk3CisjZGVmaW5lICBTU0JfU0RJT19DSVNfT0VNTkFNRQkJMHgwNAorI2RlZmluZSAgU1NCX1NESU9fQ0lTX0NDT0RFCQkweDA1CisjZGVmaW5lICBTU0JfU0RJT19DSVNfQU5URU5OQQkJMHgwNgorI2RlZmluZSAgU1NCX1NESU9fQ0lTX0FOVEdBSU4JCTB4MDcKKyNkZWZpbmUgIFNTQl9TRElPX0NJU19CRkxBR1MJCTB4MDgKKyNkZWZpbmUgIFNTQl9TRElPX0NJU19MRURTCQkweDA5CisKKyNkZWZpbmUgQ0lTVFBMX0ZVTkNFX0xBTl9OT0RFX0lEICAgICAgICAweDA0CS8qIHNhbWUgYXMgaW4gUENNQ0lBICovCisKKworLyoKKyAqIEZ1bmN0aW9uIDEgbWlzY2VsbGFuZW91cyByZWdpc3RlcnMuCisgKgorICogRGVmaW5pdGlvbnMgbWF0Y2ggc3JjL2luY2x1ZGUvc2JzZGlvLmggZnJvbSB0aGUKKyAqIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogaHR0cDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvP3A9cGxhdGZvcm0vc3lzdGVtL3dsYW4vYnJvYWRjb20uZ2l0CisgKgorICovCisjZGVmaW5lIFNCU0RJT19GVU5DMV9TQkFERFJMT1cJMHgxMDAwYQkvKiBTQiBBZGRyZXNzIHdpbmRvdyBMb3cgKGIxNSkgKi8KKyNkZWZpbmUgU0JTRElPX0ZVTkMxX1NCQUREUk1JRAkweDEwMDBiCS8qIFNCIEFkZHJlc3Mgd2luZG93IE1pZCAoYjIzLWIxNikgKi8KKyNkZWZpbmUgU0JTRElPX0ZVTkMxX1NCQUREUkhJR0gJMHgxMDAwYwkvKiBTQiBBZGRyZXNzIHdpbmRvdyBIaWdoIChiMjQtYjMxKSAqLworCisvKiB2YWxpZCBiaXRzIGluIFNCU0RJT19GVU5DMV9TQkFERFJ4eHggcmVncyAqLworI2RlZmluZSBTQlNESU9fU0JBRERSTE9XX01BU0sJMHg4MAkvKiBWYWxpZCBhZGRyZXNzIGJpdHMgaW4gU0JBRERSTE9XICovCisjZGVmaW5lIFNCU0RJT19TQkFERFJNSURfTUFTSwkweGZmCS8qIFZhbGlkIGFkZHJlc3MgYml0cyBpbiBTQkFERFJNSUQgKi8KKyNkZWZpbmUgU0JTRElPX1NCQUREUkhJR0hfTUFTSwkweGZmCS8qIFZhbGlkIGFkZHJlc3MgYml0cyBpbiBTQkFERFJISUdIICovCisKKyNkZWZpbmUgU0JTRElPX1NCX09GVF9BRERSX01BU0sJMHg3RkZGCS8qIHNiIG9mZnNldCBhZGRyIGlzIDw9IDE1IGJpdHMsIDMyayAqLworCisvKiBSRVZJU0lUOiB0aGlzIGZsYWcgZG9lc24ndCBzZWVtIHRvIG1hdHRlciAqLworI2RlZmluZSBTQlNESU9fU0JfQUNDRVNTXzJfNEJfRkxBRwkweDgwMDAJLyogZm9yY2VzIDMyLWJpdCBTQiBhY2Nlc3MgKi8KKworCisvKgorICogQWRkcmVzcyBtYXAgd2l0aGluIHRoZSBTRElPIGZ1bmN0aW9uIGFkZHJlc3Mgc3BhY2UgKDEyOEspLgorICoKKyAqICAgU3RhcnQgICBFbmQgICAgIERlc2NyaXB0aW9uCisgKiAgIC0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgMHgwMDAwMCAweDBmZmZmIHNlbGVjdGVkIGJhY2twbGFuZSBhZGRyZXNzIHdpbmRvdyAoNjRLKQorICogICAweDEwMDAwIDB4MWZmZmYgYmFja3BsYW5lIGNvbnRyb2wgcmVnaXN0ZXJzIChtYXggNjRLKQorICoKKyAqIFRoZSBjdXJyZW50IGFkZHJlc3Mgd2luZG93IGlzIGNvbmZpZ3VyZWQgYnkgd3JpdGluZyB0byByZWdpc3RlcnMKKyAqIFNCQUREUkxPVywgU0JBRERSTUlEIGFuZCBTQkFERFJISUdILgorICoKKyAqIEluIG9yZGVyIHRvIGFjY2VzcyB0aGUgY29udGVudHMgb2YgYSAzMi1iaXQgU2lsaWNvbiBCYWNrcGxhbmUgYWRkcmVzcworICogdGhlIGJhY2twbGFuZSBhZGRyZXNzIHdpbmRvdyBtdXN0IGJlIGZpcnN0IGxvYWRlZCB3aXRoIHRoZSBoaWdoZXN0CisgKiAxNiBiaXRzIG9mIHRoZSB0YXJnZXQgYWRkcmVzcy4gVGhlbiwgYW4gYWNjZXNzIG11c3QgYmUgZG9uZSB0byB0aGUKKyAqIFNESU8gZnVuY3Rpb24gYWRkcmVzcyBzcGFjZSB1c2luZyB0aGUgbG93ZXIgMTUgYml0cyBvZiB0aGUgYWRkcmVzcy4KKyAqIEJpdCAxNSBvZiB0aGUgYWRkcmVzcyBtdXN0IGJlIHNldCB3aGVuIGRvaW5nIDMyIGJpdCBhY2Nlc3Nlcy4KKyAqCisgKiAxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMAorICogV1dXV1dXV1dXV1dXV1dXV1cgICAgICAgICAgICAgICAgIFNCIEFkZHJlc3MgV2luZG93CisgKiAgICAgICAgICAgICAgICAgT09PT09PT09PT09PT09PTyAgT2Zmc2V0IHdpdGhpbiBTQiBBZGRyZXNzIFdpbmRvdworICogICAgICAgICAgICAgICAgIGEgICAgICAgICAgICAgICAgIDMyLWJpdCBhY2Nlc3MgZmxhZworICovCisKKworLyoKKyAqIFNTQiBJL08gdmlhIFNESU8uCisgKgorICogTk9URTogU0RJTyBhZGRyZXNzIEBhZGRyIGlzIDE3IGJpdHMgbG9uZyAoU0RJTyBhZGRyZXNzIHNwYWNlIGlzIDEyOEspLgorICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqc3NiX3NkaW9fZGV2KHN0cnVjdCBzc2JfYnVzICpidXMpCit7CisJcmV0dXJuICZidXMtPmhvc3Rfc2Rpby0+ZGV2OworfQorCisvKiBob3N0IGNsYWltZWQgKi8KK3N0YXRpYyBpbnQgc3NiX3NkaW9fd3JpdGViKHN0cnVjdCBzc2JfYnVzICpidXMsIHVuc2lnbmVkIGludCBhZGRyLCB1OCB2YWwpCit7CisJaW50IGVycm9yID0gMDsKKworCXNkaW9fd3JpdGViKGJ1cy0+aG9zdF9zZGlvLCB2YWwsIGFkZHIsICZlcnJvcik7CisJaWYgKHVubGlrZWx5KGVycm9yKSkgeworCQlkZXZfZGJnKHNzYl9zZGlvX2RldihidXMpLCAiJTA4WCA8LSAlMDJ4LCBlcnJvciAlZFxuIiwKKwkJCWFkZHIsIHZhbCwgZXJyb3IpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworI2lmIDAKK3N0YXRpYyB1OCBzc2Jfc2Rpb19yZWFkYihzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwl1OCB2YWw7CisJaW50IGVycm9yID0gMDsKKworCXZhbCA9IHNkaW9fcmVhZGIoYnVzLT5ob3N0X3NkaW8sIGFkZHIsICZlcnJvcik7CisJaWYgKHVubGlrZWx5KGVycm9yKSkgeworCQlkZXZfZGJnKHNzYl9zZGlvX2RldihidXMpLCAiJTA4WCAtPiAlMDJ4LCBlcnJvciAlZFxuIiwKKwkJCWFkZHIsIHZhbCwgZXJyb3IpOworCX0KKworCXJldHVybiB2YWw7Cit9CisjZW5kaWYKKworLyogaG9zdCBjbGFpbWVkICovCitzdGF0aWMgaW50IHNzYl9zZGlvX3NldF9zYmFkZHJfd2luZG93KHN0cnVjdCBzc2JfYnVzICpidXMsIHUzMiBhZGRyZXNzKQoreworCWludCBlcnJvcjsKKworCWVycm9yID0gc3NiX3NkaW9fd3JpdGViKGJ1cywgU0JTRElPX0ZVTkMxX1NCQUREUkxPVywKKwkJCQkoYWRkcmVzcyA+PiA4KSAmIFNCU0RJT19TQkFERFJMT1dfTUFTSyk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKwllcnJvciA9IHNzYl9zZGlvX3dyaXRlYihidXMsIFNCU0RJT19GVU5DMV9TQkFERFJNSUQsCisJCQkJKGFkZHJlc3MgPj4gMTYpICYgU0JTRElPX1NCQUREUk1JRF9NQVNLKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCWVycm9yID0gc3NiX3NkaW9fd3JpdGViKGJ1cywgU0JTRElPX0ZVTkMxX1NCQUREUkhJR0gsCisJCQkJKGFkZHJlc3MgPj4gMjQpICYgU0JTRElPX1NCQUREUkhJR0hfTUFTSyk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKwlidXMtPnNkaW9fc2JhZGRyID0gYWRkcmVzczsKK291dDoKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2RiZyhzc2Jfc2Rpb19kZXYoYnVzKSwgImZhaWxlZCB0byBzZXQgYWRkcmVzcyB3aW5kb3ciCisJCQkiIHRvIDB4JTA4eCwgZXJyb3IgJWRcbiIsIGFkZHJlc3MsIGVycm9yKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIGZvciBlbnVtZXJhdGlvbiB1c2Ugb25seSAqLwordTMyIHNzYl9zZGlvX3NjYW5fcmVhZDMyKHN0cnVjdCBzc2JfYnVzICpidXMsIHUxNiBvZmZzZXQpCit7CisJdTMyIHZhbDsKKwlpbnQgZXJyb3I7CisKKwlzZGlvX2NsYWltX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworCXZhbCA9IHNkaW9fcmVhZGwoYnVzLT5ob3N0X3NkaW8sIG9mZnNldCwgJmVycm9yKTsKKwlzZGlvX3JlbGVhc2VfaG9zdChidXMtPmhvc3Rfc2Rpbyk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkgeworCQlkZXZfZGJnKHNzYl9zZGlvX2RldihidXMpLCAiJTA0WDolMDRYID4gJTA4eCwgZXJyb3IgJWRcbiIsCisJCQlidXMtPnNkaW9fc2JhZGRyID4+IDE2LCBvZmZzZXQsIHZhbCwgZXJyb3IpOworCX0KKworCXJldHVybiB2YWw7Cit9CisKKy8qIGZvciBlbnVtZXJhdGlvbiB1c2Ugb25seSAqLworaW50IHNzYl9zZGlvX3NjYW5fc3dpdGNoX2NvcmVpZHgoc3RydWN0IHNzYl9idXMgKmJ1cywgdTggY29yZWlkeCkKK3sKKwl1MzIgc2JhZGRyOworCWludCBlcnJvcjsKKworCXNiYWRkciA9IChjb3JlaWR4ICogU1NCX0NPUkVfU0laRSkgKyBTU0JfRU5VTV9CQVNFOworCXNkaW9fY2xhaW1faG9zdChidXMtPmhvc3Rfc2Rpbyk7CisJZXJyb3IgPSBzc2Jfc2Rpb19zZXRfc2JhZGRyX3dpbmRvdyhidXMsIHNiYWRkcik7CisJc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKHNzYl9zZGlvX2RldihidXMpLCAiZmFpbGVkIHRvIHN3aXRjaCB0byBjb3JlICV1LCIKKwkJCSIgZXJyb3IgJWRcbiIsIGNvcmVpZHgsIGVycm9yKTsKKwkJZ290byBvdXQ7CisJfQorb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworLyogaG9zdCBtdXN0IGJlIGFscmVhZHkgY2xhaW1lZCAqLworaW50IHNzYl9zZGlvX3N3aXRjaF9jb3JlKHN0cnVjdCBzc2JfYnVzICpidXMsIHN0cnVjdCBzc2JfZGV2aWNlICpkZXYpCit7CisJdTggY29yZWlkeCA9IGRldi0+Y29yZV9pbmRleDsKKwl1MzIgc2JhZGRyOworCWludCBlcnJvciA9IDA7CisKKwlzYmFkZHIgPSAoY29yZWlkeCAqIFNTQl9DT1JFX1NJWkUpICsgU1NCX0VOVU1fQkFTRTsKKwlpZiAodW5saWtlbHkoYnVzLT5zZGlvX3NiYWRkciAhPSBzYmFkZHIpKSB7CisjaWYgU1NCX1ZFUkJPU0VfU0RJT0NPUkVTV0lUQ0hfREVCVUcKKwkJZGV2X2luZm8oc3NiX3NkaW9fZGV2KGJ1cyksCisJCQkgICAic3dpdGNoaW5nIHRvICVzIGNvcmUsIGluZGV4ICVkXG4iLAorCQkJICAgc3NiX2NvcmVfbmFtZShkZXYtPmlkLmNvcmVpZCksIGNvcmVpZHgpOworI2VuZGlmCisJCWVycm9yID0gc3NiX3NkaW9fc2V0X3NiYWRkcl93aW5kb3coYnVzLCBzYmFkZHIpOworCQlpZiAoZXJyb3IpIHsKKwkJCWRldl9kYmcoc3NiX3NkaW9fZGV2KGJ1cyksICJmYWlsZWQgdG8gc3dpdGNoIHRvIgorCQkJCSIgY29yZSAldSwgZXJyb3IgJWRcbiIsIGNvcmVpZHgsIGVycm9yKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWJ1cy0+bWFwcGVkX2RldmljZSA9IGRldjsKKwl9CisKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB1OCBzc2Jfc2Rpb19yZWFkOChzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB1MTYgb2Zmc2V0KQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmJ1czsKKwl1OCB2YWwgPSAweGZmOworCWludCBlcnJvciA9IDA7CisKKwlzZGlvX2NsYWltX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworCWlmICh1bmxpa2VseShzc2Jfc2Rpb19zd2l0Y2hfY29yZShidXMsIGRldikpKQorCQlnb3RvIG91dDsKKwlvZmZzZXQgfD0gYnVzLT5zZGlvX3NiYWRkciAmIDB4ZmZmZjsKKwlvZmZzZXQgJj0gU0JTRElPX1NCX09GVF9BRERSX01BU0s7CisJdmFsID0gc2Rpb19yZWFkYihidXMtPmhvc3Rfc2Rpbywgb2Zmc2V0LCAmZXJyb3IpOworCWlmIChlcnJvcikgeworCQlkZXZfZGJnKHNzYl9zZGlvX2RldihidXMpLCAiJTA0WDolMDRYID4gJTAyeCwgZXJyb3IgJWRcbiIsCisJCQlidXMtPnNkaW9fc2JhZGRyID4+IDE2LCBvZmZzZXQsIHZhbCwgZXJyb3IpOworCX0KK291dDoKKwlzZGlvX3JlbGVhc2VfaG9zdChidXMtPmhvc3Rfc2Rpbyk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdTE2IHNzYl9zZGlvX3JlYWQxNihzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB1MTYgb2Zmc2V0KQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmJ1czsKKwl1MTYgdmFsID0gMHhmZmZmOworCWludCBlcnJvciA9IDA7CisKKwlzZGlvX2NsYWltX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworCWlmICh1bmxpa2VseShzc2Jfc2Rpb19zd2l0Y2hfY29yZShidXMsIGRldikpKQorCQlnb3RvIG91dDsKKwlvZmZzZXQgfD0gYnVzLT5zZGlvX3NiYWRkciAmIDB4ZmZmZjsKKwlvZmZzZXQgJj0gU0JTRElPX1NCX09GVF9BRERSX01BU0s7CisJdmFsID0gc2Rpb19yZWFkdyhidXMtPmhvc3Rfc2Rpbywgb2Zmc2V0LCAmZXJyb3IpOworCWlmIChlcnJvcikgeworCQlkZXZfZGJnKHNzYl9zZGlvX2RldihidXMpLCAiJTA0WDolMDRYID4gJTA0eCwgZXJyb3IgJWRcbiIsCisJCQlidXMtPnNkaW9fc2JhZGRyID4+IDE2LCBvZmZzZXQsIHZhbCwgZXJyb3IpOworCX0KK291dDoKKwlzZGlvX3JlbGVhc2VfaG9zdChidXMtPmhvc3Rfc2Rpbyk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdTMyIHNzYl9zZGlvX3JlYWQzMihzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB1MTYgb2Zmc2V0KQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmJ1czsKKwl1MzIgdmFsID0gMHhmZmZmZmZmZjsKKwlpbnQgZXJyb3IgPSAwOworCisJc2Rpb19jbGFpbV9ob3N0KGJ1cy0+aG9zdF9zZGlvKTsKKwlpZiAodW5saWtlbHkoc3NiX3NkaW9fc3dpdGNoX2NvcmUoYnVzLCBkZXYpKSkKKwkJZ290byBvdXQ7CisJb2Zmc2V0IHw9IGJ1cy0+c2Rpb19zYmFkZHIgJiAweGZmZmY7CisJb2Zmc2V0ICY9IFNCU0RJT19TQl9PRlRfQUREUl9NQVNLOworCW9mZnNldCB8PSBTQlNESU9fU0JfQUNDRVNTXzJfNEJfRkxBRzsJLyogMzIgYml0IGRhdGEgYWNjZXNzICovCisJdmFsID0gc2Rpb19yZWFkbChidXMtPmhvc3Rfc2Rpbywgb2Zmc2V0LCAmZXJyb3IpOworCWlmIChlcnJvcikgeworCQlkZXZfZGJnKHNzYl9zZGlvX2RldihidXMpLCAiJTA0WDolMDRYID4gJTA4eCwgZXJyb3IgJWRcbiIsCisJCQlidXMtPnNkaW9fc2JhZGRyID4+IDE2LCBvZmZzZXQsIHZhbCwgZXJyb3IpOworCX0KK291dDoKKwlzZGlvX3JlbGVhc2VfaG9zdChidXMtPmhvc3Rfc2Rpbyk7CisKKwlyZXR1cm4gdmFsOworfQorCisjaWZkZWYgQ09ORklHX1NTQl9CTE9DS0lPCitzdGF0aWMgdm9pZCBzc2Jfc2Rpb19ibG9ja19yZWFkKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHZvaWQgKmJ1ZmZlciwKKwkJCQkgIHNpemVfdCBjb3VudCwgdTE2IG9mZnNldCwgdTggcmVnX3dpZHRoKQoreworCXNpemVfdCBzYXZlZF9jb3VudCA9IGNvdW50OworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmJ1czsKKwlpbnQgZXJyb3IgPSAwOworCisJc2Rpb19jbGFpbV9ob3N0KGJ1cy0+aG9zdF9zZGlvKTsKKwlpZiAodW5saWtlbHkoc3NiX3NkaW9fc3dpdGNoX2NvcmUoYnVzLCBkZXYpKSkgeworCQllcnJvciA9IC1FSU87CisJCW1lbXNldChidWZmZXIsIDB4ZmYsIGNvdW50KTsKKwkJZ290byBlcnJfb3V0OworCX0KKwlvZmZzZXQgfD0gYnVzLT5zZGlvX3NiYWRkciAmIDB4ZmZmZjsKKwlvZmZzZXQgJj0gU0JTRElPX1NCX09GVF9BRERSX01BU0s7CisKKwlzd2l0Y2ggKHJlZ193aWR0aCkgeworCWNhc2Ugc2l6ZW9mKHU4KTogeworCQllcnJvciA9IHNkaW9fcmVhZHNiKGJ1cy0+aG9zdF9zZGlvLCBidWZmZXIsIG9mZnNldCwgY291bnQpOworCQlicmVhazsKKwl9CisJY2FzZSBzaXplb2YodTE2KTogeworCQlTU0JfV0FSTl9PTihjb3VudCAmIDEpOworCQllcnJvciA9IHNkaW9fcmVhZHNiKGJ1cy0+aG9zdF9zZGlvLCBidWZmZXIsIG9mZnNldCwgY291bnQpOworCQlicmVhazsKKwl9CisJY2FzZSBzaXplb2YodTMyKTogeworCQlTU0JfV0FSTl9PTihjb3VudCAmIDMpOworCQlvZmZzZXQgfD0gU0JTRElPX1NCX0FDQ0VTU18yXzRCX0ZMQUc7CS8qIDMyIGJpdCBkYXRhIGFjY2VzcyAqLworCQllcnJvciA9IHNkaW9fcmVhZHNiKGJ1cy0+aG9zdF9zZGlvLCBidWZmZXIsIG9mZnNldCwgY291bnQpOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJU1NCX1dBUk5fT04oMSk7CisJfQorCWlmICghZXJyb3IpCisJCWdvdG8gb3V0OworCitlcnJfb3V0OgorCWRldl9kYmcoc3NiX3NkaW9fZGV2KGJ1cyksICIlMDRYOiUwNFggKHdpZHRoPSV1LCBsZW49JXUpLCBlcnJvciAlZFxuIiwKKwkJYnVzLT5zZGlvX3NiYWRkciA+PiAxNiwgb2Zmc2V0LCByZWdfd2lkdGgsIHNhdmVkX2NvdW50LCBlcnJvcik7CitvdXQ6CisJc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworfQorI2VuZGlmIC8qIENPTkZJR19TU0JfQkxPQ0tJTyAqLworCitzdGF0aWMgdm9pZCBzc2Jfc2Rpb193cml0ZTgoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgdTE2IG9mZnNldCwgdTggdmFsKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmJ1czsKKwlpbnQgZXJyb3IgPSAwOworCisJc2Rpb19jbGFpbV9ob3N0KGJ1cy0+aG9zdF9zZGlvKTsKKwlpZiAodW5saWtlbHkoc3NiX3NkaW9fc3dpdGNoX2NvcmUoYnVzLCBkZXYpKSkKKwkJZ290byBvdXQ7CisJb2Zmc2V0IHw9IGJ1cy0+c2Rpb19zYmFkZHIgJiAweGZmZmY7CisJb2Zmc2V0ICY9IFNCU0RJT19TQl9PRlRfQUREUl9NQVNLOworCXNkaW9fd3JpdGViKGJ1cy0+aG9zdF9zZGlvLCB2YWwsIG9mZnNldCwgJmVycm9yKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2RiZyhzc2Jfc2Rpb19kZXYoYnVzKSwgIiUwNFg6JTA0WCA8ICUwMngsIGVycm9yICVkXG4iLAorCQkJYnVzLT5zZGlvX3NiYWRkciA+PiAxNiwgb2Zmc2V0LCB2YWwsIGVycm9yKTsKKwl9CitvdXQ6CisJc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworfQorCitzdGF0aWMgdm9pZCBzc2Jfc2Rpb193cml0ZTE2KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQsIHUxNiB2YWwpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+YnVzOworCWludCBlcnJvciA9IDA7CisKKwlzZGlvX2NsYWltX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworCWlmICh1bmxpa2VseShzc2Jfc2Rpb19zd2l0Y2hfY29yZShidXMsIGRldikpKQorCQlnb3RvIG91dDsKKwlvZmZzZXQgfD0gYnVzLT5zZGlvX3NiYWRkciAmIDB4ZmZmZjsKKwlvZmZzZXQgJj0gU0JTRElPX1NCX09GVF9BRERSX01BU0s7CisJc2Rpb193cml0ZXcoYnVzLT5ob3N0X3NkaW8sIHZhbCwgb2Zmc2V0LCAmZXJyb3IpOworCWlmIChlcnJvcikgeworCQlkZXZfZGJnKHNzYl9zZGlvX2RldihidXMpLCAiJTA0WDolMDRYIDwgJTA0eCwgZXJyb3IgJWRcbiIsCisJCQlidXMtPnNkaW9fc2JhZGRyID4+IDE2LCBvZmZzZXQsIHZhbCwgZXJyb3IpOworCX0KK291dDoKKwlzZGlvX3JlbGVhc2VfaG9zdChidXMtPmhvc3Rfc2Rpbyk7Cit9CisKK3N0YXRpYyB2b2lkIHNzYl9zZGlvX3dyaXRlMzIoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgdTE2IG9mZnNldCwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CisJaW50IGVycm9yID0gMDsKKworCXNkaW9fY2xhaW1faG9zdChidXMtPmhvc3Rfc2Rpbyk7CisJaWYgKHVubGlrZWx5KHNzYl9zZGlvX3N3aXRjaF9jb3JlKGJ1cywgZGV2KSkpCisJCWdvdG8gb3V0OworCW9mZnNldCB8PSBidXMtPnNkaW9fc2JhZGRyICYgMHhmZmZmOworCW9mZnNldCAmPSBTQlNESU9fU0JfT0ZUX0FERFJfTUFTSzsKKwlvZmZzZXQgfD0gU0JTRElPX1NCX0FDQ0VTU18yXzRCX0ZMQUc7CS8qIDMyIGJpdCBkYXRhIGFjY2VzcyAqLworCXNkaW9fd3JpdGVsKGJ1cy0+aG9zdF9zZGlvLCB2YWwsIG9mZnNldCwgJmVycm9yKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2RiZyhzc2Jfc2Rpb19kZXYoYnVzKSwgIiUwNFg6JTA0WCA8ICUwOHgsIGVycm9yICVkXG4iLAorCQkJYnVzLT5zZGlvX3NiYWRkciA+PiAxNiwgb2Zmc2V0LCB2YWwsIGVycm9yKTsKKwl9CisJaWYgKGJ1cy0+cXVpcmtzICYgU1NCX1FVSVJLX1NESU9fUkVBRF9BRlRFUl9XUklURTMyKQorCQlzZGlvX3JlYWRsKGJ1cy0+aG9zdF9zZGlvLCAwLCAmZXJyb3IpOworb3V0OgorCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+aG9zdF9zZGlvKTsKK30KKworI2lmZGVmIENPTkZJR19TU0JfQkxPQ0tJTworc3RhdGljIHZvaWQgc3NiX3NkaW9fYmxvY2tfd3JpdGUoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCSAgIHNpemVfdCBjb3VudCwgdTE2IG9mZnNldCwgdTggcmVnX3dpZHRoKQoreworCXNpemVfdCBzYXZlZF9jb3VudCA9IGNvdW50OworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmJ1czsKKwlpbnQgZXJyb3IgPSAwOworCisJc2Rpb19jbGFpbV9ob3N0KGJ1cy0+aG9zdF9zZGlvKTsKKwlpZiAodW5saWtlbHkoc3NiX3NkaW9fc3dpdGNoX2NvcmUoYnVzLCBkZXYpKSkgeworCQllcnJvciA9IC1FSU87CisJCW1lbXNldCgodm9pZCAqKWJ1ZmZlciwgMHhmZiwgY291bnQpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCW9mZnNldCB8PSBidXMtPnNkaW9fc2JhZGRyICYgMHhmZmZmOworCW9mZnNldCAmPSBTQlNESU9fU0JfT0ZUX0FERFJfTUFTSzsKKworCXN3aXRjaCAocmVnX3dpZHRoKSB7CisJY2FzZSBzaXplb2YodTgpOgorCQllcnJvciA9IHNkaW9fd3JpdGVzYihidXMtPmhvc3Rfc2Rpbywgb2Zmc2V0LAorCQkJCSAgICAgKHZvaWQgKilidWZmZXIsIGNvdW50KTsKKwkJYnJlYWs7CisJY2FzZSBzaXplb2YodTE2KToKKwkJU1NCX1dBUk5fT04oY291bnQgJiAxKTsKKwkJZXJyb3IgPSBzZGlvX3dyaXRlc2IoYnVzLT5ob3N0X3NkaW8sIG9mZnNldCwKKwkJCQkgICAgICh2b2lkICopYnVmZmVyLCBjb3VudCk7CisJCWJyZWFrOworCWNhc2Ugc2l6ZW9mKHUzMik6CisJCVNTQl9XQVJOX09OKGNvdW50ICYgMyk7CisJCW9mZnNldCB8PSBTQlNESU9fU0JfQUNDRVNTXzJfNEJfRkxBRzsJLyogMzIgYml0IGRhdGEgYWNjZXNzICovCisJCWVycm9yID0gc2Rpb193cml0ZXNiKGJ1cy0+aG9zdF9zZGlvLCBvZmZzZXQsCisJCQkJICAgICAodm9pZCAqKWJ1ZmZlciwgY291bnQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlTU0JfV0FSTl9PTigxKTsKKwl9CisJaWYgKCFlcnJvcikKKwkJZ290byBvdXQ7CisKK2Vycl9vdXQ6CisJZGV2X2RiZyhzc2Jfc2Rpb19kZXYoYnVzKSwgIiUwNFg6JTA0WCAod2lkdGg9JXUsIGxlbj0ldSksIGVycm9yICVkXG4iLAorCQlidXMtPnNkaW9fc2JhZGRyID4+IDE2LCBvZmZzZXQsIHJlZ193aWR0aCwgc2F2ZWRfY291bnQsIGVycm9yKTsKK291dDoKKwlzZGlvX3JlbGVhc2VfaG9zdChidXMtPmhvc3Rfc2Rpbyk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU1NCX0JMT0NLSU8gKi8KKworLyogTm90ICJzdGF0aWMiLCBhcyBpdCdzIHVzZWQgaW4gbWFpbi5jICovCitjb25zdCBzdHJ1Y3Qgc3NiX2J1c19vcHMgc3NiX3NkaW9fb3BzID0geworCS5yZWFkOAkJPSBzc2Jfc2Rpb19yZWFkOCwKKwkucmVhZDE2CQk9IHNzYl9zZGlvX3JlYWQxNiwKKwkucmVhZDMyCQk9IHNzYl9zZGlvX3JlYWQzMiwKKwkud3JpdGU4CQk9IHNzYl9zZGlvX3dyaXRlOCwKKwkud3JpdGUxNgk9IHNzYl9zZGlvX3dyaXRlMTYsCisJLndyaXRlMzIJPSBzc2Jfc2Rpb193cml0ZTMyLAorI2lmZGVmIENPTkZJR19TU0JfQkxPQ0tJTworCS5ibG9ja19yZWFkCT0gc3NiX3NkaW9fYmxvY2tfcmVhZCwKKwkuYmxvY2tfd3JpdGUJPSBzc2Jfc2Rpb19ibG9ja193cml0ZSwKKyNlbmRpZgorfTsKKworI2RlZmluZSBHT1RPX0VSUk9SX09OKGNvbmRpdGlvbiwgZGVzY3JpcHRpb24pIGRvIHsJXAorCWlmICh1bmxpa2VseShjb25kaXRpb24pKSB7CQkJXAorCQllcnJvcl9kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwlcCisJCWdvdG8gZXJyb3I7CQkJCVwKKwl9CQkJCQkJXAorICB9IHdoaWxlICgwKQorCitpbnQgc3NiX3NkaW9fZ2V0X2ludmFyaWFudHMoc3RydWN0IHNzYl9idXMgKmJ1cywKKwkJCSAgICBzdHJ1Y3Qgc3NiX2luaXRfaW52YXJpYW50cyAqaXYpCit7CisJc3RydWN0IHNzYl9zcHJvbSAqc3Byb20gPSAmaXYtPnNwcm9tOworCXN0cnVjdCBzc2JfYm9hcmRpbmZvICpiaSA9ICZpdi0+Ym9hcmRpbmZvOworCWNvbnN0IGNoYXIgKmVycm9yX2Rlc2NyaXB0aW9uID0gIm5vbmUiOworCXN0cnVjdCBzZGlvX2Z1bmNfdHVwbGUgKnR1cGxlOworCXZvaWQgKm1hYzsKKworCW1lbXNldChzcHJvbSwgMHhGRiwgc2l6ZW9mKCpzcHJvbSkpOworCXNwcm9tLT5ib2FyZGZsYWdzX2xvID0gMDsKKwlzcHJvbS0+Ym9hcmRmbGFnc19oaSA9IDA7CisKKwl0dXBsZSA9IGJ1cy0+aG9zdF9zZGlvLT50dXBsZXM7CisJd2hpbGUgKHR1cGxlKSB7CisJCXN3aXRjaCAodHVwbGUtPmNvZGUpIHsKKwkJY2FzZSAweDIyOiAvKiBleHRlbmRlZCBmdW5jdGlvbiAqLworCQkJc3dpdGNoICh0dXBsZS0+ZGF0YVswXSkgeworCQkJY2FzZSBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQ6CisJCQkJR09UT19FUlJPUl9PTigodHVwbGUtPnNpemUgIT0gNykgJiYKKwkJCQkJICAgICAgKHR1cGxlLT5kYXRhWzFdICE9IDYpLAorCQkJCQkgICAgICAibWFjIHRwbCBzaXplIik7CisJCQkJLyogZmV0Y2ggdGhlIE1BQyBhZGRyZXNzLiAqLworCQkJCW1hYyA9IHR1cGxlLT5kYXRhICsgMjsKKwkJCQltZW1jcHkoc3Byb20tPmlsMG1hYywgbWFjLCBFVEhfQUxFTik7CisJCQkJbWVtY3B5KHNwcm9tLT5ldDFtYWMsIG1hYywgRVRIX0FMRU4pOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDB4ODA6IC8qIHZlbmRvciBzcGVjaWZpYyB0dXBsZSAqLworCQkJc3dpdGNoICh0dXBsZS0+ZGF0YVswXSkgeworCQkJY2FzZSBTU0JfU0RJT19DSVNfU1JPTVJFVjoKKwkJCQlHT1RPX0VSUk9SX09OKHR1cGxlLT5zaXplICE9IDIsCisJCQkJCSAgICAgICJzcm9tcmV2IHRwbCBzaXplIik7CisJCQkJc3Byb20tPnJldmlzaW9uID0gdHVwbGUtPmRhdGFbMV07CisJCQkJYnJlYWs7CisJCQljYXNlIFNTQl9TRElPX0NJU19JRDoKKwkJCQlHT1RPX0VSUk9SX09OKCh0dXBsZS0+c2l6ZSAhPSA1KSAmJgorCQkJCQkgICAgICAodHVwbGUtPnNpemUgIT0gNyksCisJCQkJCSAgICAgICJpZCB0cGwgc2l6ZSIpOworCQkJCWJpLT52ZW5kb3IgPSB0dXBsZS0+ZGF0YVsxXSB8CisJCQkJCSAgICAgKHR1cGxlLT5kYXRhWzJdPDw4KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1NCX1NESU9fQ0lTX0JPQVJEUkVWOgorCQkJCUdPVE9fRVJST1JfT04odHVwbGUtPnNpemUgIT0gMiwKKwkJCQkJICAgICAgImJvYXJkcmV2IHRwbCBzaXplIik7CisJCQkJc3Byb20tPmJvYXJkX3JldiA9IHR1cGxlLT5kYXRhWzFdOworCQkJCWJyZWFrOworCQkJY2FzZSBTU0JfU0RJT19DSVNfUEE6CisJCQkJR09UT19FUlJPUl9PTigodHVwbGUtPnNpemUgIT0gOSkgJiYKKwkJCQkJICAgICAgKHR1cGxlLT5zaXplICE9IDEwKSwKKwkJCQkJICAgICAgInBhIHRwbCBzaXplIik7CisJCQkJc3Byb20tPnBhMGIwID0gdHVwbGUtPmRhdGFbMV0gfAorCQkJCQkgKCh1MTYpdHVwbGUtPmRhdGFbMl0gPDwgOCk7CisJCQkJc3Byb20tPnBhMGIxID0gdHVwbGUtPmRhdGFbM10gfAorCQkJCQkgKCh1MTYpdHVwbGUtPmRhdGFbNF0gPDwgOCk7CisJCQkJc3Byb20tPnBhMGIyID0gdHVwbGUtPmRhdGFbNV0gfAorCQkJCQkgKCh1MTYpdHVwbGUtPmRhdGFbNl0gPDwgOCk7CisJCQkJc3Byb20tPml0c3NpX2EgPSB0dXBsZS0+ZGF0YVs3XTsKKwkJCQlzcHJvbS0+aXRzc2lfYmcgPSB0dXBsZS0+ZGF0YVs3XTsKKwkJCQlzcHJvbS0+bWF4cHdyX2EgPSB0dXBsZS0+ZGF0YVs4XTsKKwkJCQlzcHJvbS0+bWF4cHdyX2JnID0gdHVwbGUtPmRhdGFbOF07CisJCQkJYnJlYWs7CisJCQljYXNlIFNTQl9TRElPX0NJU19PRU1OQU1FOgorCQkJCS8qIE5vdCBwcmVzZW50ICovCisJCQkJYnJlYWs7CisJCQljYXNlIFNTQl9TRElPX0NJU19DQ09ERToKKwkJCQlHT1RPX0VSUk9SX09OKHR1cGxlLT5zaXplICE9IDIsCisJCQkJCSAgICAgICJjY29kZSB0cGwgc2l6ZSIpOworCQkJCXNwcm9tLT5jb3VudHJ5X2NvZGUgPSB0dXBsZS0+ZGF0YVsxXTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1NCX1NESU9fQ0lTX0FOVEVOTkE6CisJCQkJR09UT19FUlJPUl9PTih0dXBsZS0+c2l6ZSAhPSAyLAorCQkJCQkgICAgICAiYW50IHRwbCBzaXplIik7CisJCQkJc3Byb20tPmFudF9hdmFpbGFibGVfYSA9IHR1cGxlLT5kYXRhWzFdOworCQkJCXNwcm9tLT5hbnRfYXZhaWxhYmxlX2JnID0gdHVwbGUtPmRhdGFbMV07CisJCQkJYnJlYWs7CisJCQljYXNlIFNTQl9TRElPX0NJU19BTlRHQUlOOgorCQkJCUdPVE9fRVJST1JfT04odHVwbGUtPnNpemUgIT0gMiwKKwkJCQkJICAgICAgImFudGcgdHBsIHNpemUiKTsKKwkJCQlzcHJvbS0+YW50ZW5uYV9nYWluLmdoejI0LmEwID0gdHVwbGUtPmRhdGFbMV07CisJCQkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHoyNC5hMSA9IHR1cGxlLT5kYXRhWzFdOworCQkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6MjQuYTIgPSB0dXBsZS0+ZGF0YVsxXTsKKwkJCQlzcHJvbS0+YW50ZW5uYV9nYWluLmdoejI0LmEzID0gdHVwbGUtPmRhdGFbMV07CisJCQkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHo1LmEwID0gdHVwbGUtPmRhdGFbMV07CisJCQkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHo1LmExID0gdHVwbGUtPmRhdGFbMV07CisJCQkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHo1LmEyID0gdHVwbGUtPmRhdGFbMV07CisJCQkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHo1LmEzID0gdHVwbGUtPmRhdGFbMV07CisJCQkJYnJlYWs7CisJCQljYXNlIFNTQl9TRElPX0NJU19CRkxBR1M6CisJCQkJR09UT19FUlJPUl9PTigodHVwbGUtPnNpemUgIT0gMykgJiYKKwkJCQkJICAgICAgKHR1cGxlLT5zaXplICE9IDUpLAorCQkJCQkgICAgICAiYmZsIHRwbCBzaXplIik7CisJCQkJc3Byb20tPmJvYXJkZmxhZ3NfbG8gPSB0dXBsZS0+ZGF0YVsxXSB8CisJCQkJCQkgKCh1MTYpdHVwbGUtPmRhdGFbMl0gPDwgOCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNTQl9TRElPX0NJU19MRURTOgorCQkJCUdPVE9fRVJST1JfT04odHVwbGUtPnNpemUgIT0gNSwKKwkJCQkJICAgICAgImxlZHMgdHBsIHNpemUiKTsKKwkJCQlzcHJvbS0+Z3BpbzAgPSB0dXBsZS0+ZGF0YVsxXTsKKwkJCQlzcHJvbS0+Z3BpbzEgPSB0dXBsZS0+ZGF0YVsyXTsKKwkJCQlzcHJvbS0+Z3BpbzIgPSB0dXBsZS0+ZGF0YVszXTsKKwkJCQlzcHJvbS0+Z3BpbzMgPSB0dXBsZS0+ZGF0YVs0XTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCXR1cGxlID0gdHVwbGUtPm5leHQ7CisJfQorCisJcmV0dXJuIDA7CitlcnJvcjoKKwlkZXZfZXJyKHNzYl9zZGlvX2RldihidXMpLCAiZmFpbGVkIHRvIGZldGNoIGRldmljZSBpbnZhcmlhbnRzOiAlc1xuIiwKKwkJZXJyb3JfZGVzY3JpcHRpb24pOworCXJldHVybiAtRU5PREVWOworfQorCit2b2lkIHNzYl9zZGlvX2V4aXQoc3RydWN0IHNzYl9idXMgKmJ1cykKK3sKKwlpZiAoYnVzLT5idXN0eXBlICE9IFNTQl9CVVNUWVBFX1NESU8pCisJCXJldHVybjsKKwkvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovCit9CisKK2ludCBzc2Jfc2Rpb19pbml0KHN0cnVjdCBzc2JfYnVzICpidXMpCit7CisJaWYgKGJ1cy0+YnVzdHlwZSAhPSBTU0JfQlVTVFlQRV9TRElPKQorCQlyZXR1cm4gMDsKKworCWJ1cy0+c2Rpb19zYmFkZHIgPSB+MDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaCBiL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmgKaW5kZXggNTdmYTQ4Mi4uMjU0MzM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaAorKysgYi9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oCkBAIC0xMTQsNiArMTE0LDQ2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NTQl9QQ01DSUFIT1NUICovCiAKKy8qIHNkaW8uYyAqLworI2lmZGVmIENPTkZJR19TU0JfU0RJT0hPU1QKK2V4dGVybiBpbnQgc3NiX3NkaW9fZ2V0X2ludmFyaWFudHMoc3RydWN0IHNzYl9idXMgKmJ1cywKKwkJCQkgICAgIHN0cnVjdCBzc2JfaW5pdF9pbnZhcmlhbnRzICppdik7CisKK2V4dGVybiB1MzIgc3NiX3NkaW9fc2Nhbl9yZWFkMzIoc3RydWN0IHNzYl9idXMgKmJ1cywgdTE2IG9mZnNldCk7CitleHRlcm4gaW50IHNzYl9zZGlvX3N3aXRjaF9jb3JlKHN0cnVjdCBzc2JfYnVzICpidXMsIHN0cnVjdCBzc2JfZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBzc2Jfc2Rpb19zY2FuX3N3aXRjaF9jb3JlaWR4KHN0cnVjdCBzc2JfYnVzICpidXMsIHU4IGNvcmVpZHgpOworZXh0ZXJuIGludCBzc2Jfc2Rpb19oYXJkd2FyZV9zZXR1cChzdHJ1Y3Qgc3NiX2J1cyAqYnVzKTsKK2V4dGVybiB2b2lkIHNzYl9zZGlvX2V4aXQoc3RydWN0IHNzYl9idXMgKmJ1cyk7CitleHRlcm4gaW50IHNzYl9zZGlvX2luaXQoc3RydWN0IHNzYl9idXMgKmJ1cyk7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3NiX2J1c19vcHMgc3NiX3NkaW9fb3BzOworI2Vsc2UgLyogQ09ORklHX1NTQl9TRElPSE9TVCAqLworc3RhdGljIGlubGluZSB1MzIgc3NiX3NkaW9fc2Nhbl9yZWFkMzIoc3RydWN0IHNzYl9idXMgKmJ1cywgdTE2IG9mZnNldCkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHNzYl9zZGlvX3N3aXRjaF9jb3JlKHN0cnVjdCBzc2JfYnVzICpidXMsCisJCQkJCSBzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgc3NiX3NkaW9fc2Nhbl9zd2l0Y2hfY29yZWlkeChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1OCBjb3JlaWR4KQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgc3NiX3NkaW9faGFyZHdhcmVfc2V0dXAoc3RydWN0IHNzYl9idXMgKmJ1cykKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzc2Jfc2Rpb19leGl0KHN0cnVjdCBzc2JfYnVzICpidXMpCit7Cit9CitzdGF0aWMgaW5saW5lIGludCBzc2Jfc2Rpb19pbml0KHN0cnVjdCBzc2JfYnVzICpidXMpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1NTQl9TRElPSE9TVCAqLworCiAKIC8qIHNjYW4uYyAqLwogZXh0ZXJuIGNvbnN0IGNoYXIgKnNzYl9jb3JlX25hbWUodTE2IGNvcmVpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC94bWl0LmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC94bWl0LmMKaW5kZXggMGUwMzQwOC4uNDJkYjQxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuYwpAQCAtMzg0LDcgKzM4NCw4IEBACiAvKgkJCWR1bXBfaWVlZTgwMjExX2hkcigoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGEsICJSWCBHIik7ICovCiAJCX0gZWxzZQogCQkJYWdueF9idWcoIlVua25vd24gcGFja2V0cyB0eXBlIik7Ci0JCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCBza2IsICZzdGF0dXMpOworCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKwkJaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHNrYik7CiAJCXJ4X2Rlc2NfcmVpbml0KHByaXYsIGkpOwogCiAJfSB3aGlsZSAocHJpdi0+cnguaWR4KyspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuYwppbmRleCAzZjMwM2FlLi5jMTY1YzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuYwpAQCAtMzEzNCw3ICszMTM0LDcgQEAKIAkJICAgICAgIG5ldGRldi0+bmFtZSwgX19mdW5jX18pOwogCQkvKiBza2lwIHRoaXMgcGFja2V0ICovCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJaWYgKHByaXYtPnR4X3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgewpAQCAtMzE0MiwxNCArMzE0MiwxNCBAQAogCQkgICAgICAgbmV0ZGV2LT5uYW1lLCBfX2Z1bmNfXyk7CiAJCS8qIHNraXAgdGhpcyBwYWNrZXQgKi8KIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlpZiAoc2tiLT5sZW4gPCBFVEhfSExFTikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogc2tiIHRvbyBzaG9ydCAoJWQpXG4iLAogCQkgICAgICAgbmV0ZGV2LT5uYW1lLCBfX2Z1bmNfXywgc2tiLT5sZW4pOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCWF0NzZfbGVkdHJpZ190eF9hY3Rpdml0eSgpOwkvKiB0ZWxsIGxlZHRyaWdnZXIgd2Ugc2VuZCBhIHBhY2tldCAqLwpAQCAtMzE3Myw3ICszMTczLDcgQEAKIAkJCSAgICAgICBza2ItPmRhdGFbRVRIX0hMRU4gKyAxXSwKIAkJCSAgICAgICBza2ItPmRhdGFbRVRIX0hMRU4gKyAyXSk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBhZGQgUkZDIDEwNDIgaGVhZGVyIGluIGZyb250ICovCkBAIC0zMzk2LDcgKzMzOTYsNyBAQAogCXJldHVybiBwcml2LT5tYWNfc3RhdGUgPT0gTUFDX0NPTk5FQ1RFRDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBhdDc2X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBhdDc2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IGF0NzZfZXRodG9vbF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsgPSBhdDc2X2V0aHRvb2xfZ2V0X2xpbmssCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCmluZGV4IDlkN2M5OTMuLjY0MGY2NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKQEAgLTE3NTIsMTIgKzE3NTIsMTIgQEAKIAltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAlpZiAoZGV2LT5hdHRhY2hlZCkKIAkJZ290byBvazsKLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19NT0RVTEUpICYmIGRldi0+aW5fcmVxdWVzdF9tb2R1bGUpIHsKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikgJiYgZGV2LT5pbl9yZXF1ZXN0X21vZHVsZSkgewogCQlEUFJJTlRLKCJpbiByZXF1ZXN0IG1vZHVsZVxuIik7CiAJCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpZiAoY2FwYWJsZShDQVBfU1lTX01PRFVMRSkgJiYgZGV2LT5pbl9yZXF1ZXN0X21vZHVsZSkKKwlpZiAoY2FwYWJsZShDQVBfTkVUX0FETUlOKSAmJiBkZXYtPmluX3JlcXVlc3RfbW9kdWxlKQogCQlnb3RvIG9rOwogCiAJZGV2LT5pbl9yZXF1ZXN0X21vZHVsZSA9IDE7CkBAIC0xNzcwLDggKzE3NzAsOCBAQAogCiAJZGV2LT5pbl9yZXF1ZXN0X21vZHVsZSA9IDA7CiAKLQlpZiAoIWRldi0+YXR0YWNoZWQgJiYgIWNhcGFibGUoQ0FQX1NZU19NT0RVTEUpKSB7Ci0JCURQUklOVEsoIm5vdCBhdHRhY2hlZCBhbmQgbm90IENBUF9TWVNfTU9EVUxFXG4iKTsKKwlpZiAoIWRldi0+YXR0YWNoZWQgJiYgIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJRFBSSU5USygibm90IGF0dGFjaGVkIGFuZCBub3QgQ0FQX05FVF9BRE1JTlxuIik7CiAJCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYwppbmRleCBmYWQyNWI3Li5hYzg1NzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jCkBAIC0xMTIsOCArMTEyLDkgQEAKIAkJICogSSB3b3JrZWQgd2l0aC4KIAkJICoKIAkJICogRW1wdHkgYmFycmllcnMgYXJlIG5vdCBhbGxvd2VkIGFueXdheSwgc2VlIDUxZmQ3N2JkOWY1MTIKLQkJICogZm9yIGV4YW1wbGUsIGFsdGhvdWdoIGxhdGVyIGl0IHdhcyBjaGFuZ2VkIHRvIGJpb19kaXNjYXJkKCkKLQkJICogb25seSwgd2hpY2ggZG9lcyBub3Qgd29yayBpbiB0aGlzIGNhc2UuCisJCSAqIGZvciBleGFtcGxlLCBhbHRob3VnaCBsYXRlciBpdCB3YXMgY2hhbmdlZCB0bworCQkgKiBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19ESVNDQVJEKSBvbmx5LCB3aGljaCBkb2VzIG5vdAorCQkgKiB3b3JrIGluIHRoaXMgY2FzZS4KIAkJICovCiAJCS8vZXJyID0gLUVPUE5PVFNVUFA7CiAJCWVyciA9IDA7CkBAIC04NDYsMTAgKzg0Nyw5IEBACiAvKgogICogQ29uZmlndXJhdGlvbiBwYXJzZXIuCiAgKi8KLXN0YXRpYyB2b2lkIGNuX2RzdF9jYWxsYmFjayh2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgY25fZHN0X2NhbGxiYWNrKHN0cnVjdCBjbl9tc2cgKm1zZykKIHsKIAlzdHJ1Y3QgZHN0X2N0bCAqY3RsOwotCXN0cnVjdCBjbl9tc2cgKm1zZyA9IGRhdGE7CiAJaW50IGVycjsKIAlzdHJ1Y3QgZHN0X2N0bF9hY2sgYWNrOwogCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IE5VTEwsICp0bXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL1ZpcnR1YWxFdGhlcm5ldExpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1ZpcnR1YWxFdGhlcm5ldExpbnV4LmMKaW5kZXggMDc3NzI0YS4uN2I3Y2NlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9WaXJ0dWFsRXRoZXJuZXRMaW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvVmlydHVhbEV0aGVybmV0TGludXguYwpAQCAtMjIzLDcgKzIyMyw3IEBACiAJfQogCiAgICAgICBFeGl0OgotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYwppbmRleCA5M2NhYjBhLi40MjIzMGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RydWN0IGV0aHRvb2xfb3BzIGN2bV9vY3RfZXRodG9vbF9vcHMgPSB7CitzdHJ1Y3QgY29uc3QgZXRodG9vbF9vcHMgY3ZtX29jdF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBjdm1fb2N0X2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MgPSBjdm1fb2N0X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gY3ZtX29jdF9zZXRfc2V0dGluZ3MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCmluZGV4IDYzMTQxNDEuLmIzMzI4YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCkBAIC00MSw2ICs0MSw2IEBACiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KICNlbmRpZiAvKiBDT05GSUdfWEZSTSAqLwogCi1leHRlcm4gc3RydWN0IGV0aHRvb2xfb3BzIGN2bV9vY3RfZXRodG9vbF9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGN2bV9vY3RfZXRodG9vbF9vcHM7CiBpbnQgY3ZtX29jdF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIGludCBjdm1fb2N0X21kaW9fc2V0dXBfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvdXNiZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYwppbmRleCA1NDBjYmJiLi43Y2Q4N2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYwpAQCAtNjU5LDcgKzY1OSw3IEBACiAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKICAgICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKQEAgLTc5NiwxMyArNzk2LDEzIEBACiAgICAgaWYgKHZhcElkID49IFpNX1ZBUF9QT1JUX05VTUJFUikKICAgICB7CiAgICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTkVUREVWX1RYX09LOwogICAgIH0KICNpZiAxCiAgICAgaWYgKHZhcFt2YXBJZF0ub3BlbkZsYWcgPT0gMCkKICAgICB7CiAgICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTkVUREVWX1RYX09LOwogICAgIH0KICNlbmRpZgogCkBAIC04MTksNyArODE5LDcgQEAKICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogICAgIH0KIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmFwX25ldGRldl9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX3BrdC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF9wa3QuYwppbmRleCA1ZGIwMDA0Li44OWE2YjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX3BrdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfcGt0LmMKQEAgLTE1NiwxMCArMTU2LDcgQEAKICAgICBzd2l0Y2gobmV0aWZfcngoYnVmKSkKICNlbmRpZgogICAgIHsKLSAgICBjYXNlIE5FVF9SWF9CQUQ6CiAgICAgY2FzZSBORVRfUlhfRFJPUDoKLSAgICBjYXNlIE5FVF9SWF9DTl9NT0Q6Ci0gICAgY2FzZSBORVRfUlhfQ05fSElHSDoKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIG1hY3AtPmRydl9zdGF0cy5uZXRfc3RhdHMucnhfcGFja2V0cysrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYwppbmRleCA3YjYwNTc5Li5kMDA0YTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYwpAQCAtOTIxLDE2ICs5MjEsMTYgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9vdXRfdW5sb2NrOwogCi0JcmV0ID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soJmtpb2NiLCAmaW92LCAxLCBwb3MpOworCXJldCA9IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZSgma2lvY2IsICZpb3YsIDEsICZraW9jYi5raV9wb3MpOwogCSpwcG9zID0ga2lvY2Iua2lfcG9zOwogCiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJV0FSTl9PTihyZXQgPCAwKTsKIAotCWlmIChyZXQgPiAwICYmICgoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7CisJaWYgKHJldCA+IDApIHsKIAkJc3NpemVfdCBlcnI7CiAKLQkJZXJyID0gc3luY19wYWdlX3JhbmdlKGlub2RlLCBtYXBwaW5nLCBwb3MsIHJldCk7CisJCWVyciA9IGdlbmVyaWNfd3JpdGVfc3luYyhmaWxlLCBwb3MsIHJldCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0ID0gZXJyOwogCQlXQVJOX09OKHJldCA8IDApOwpAQCAtMTk1MCwxNCArMTk1MCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBvaG1lbGZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewotCQkuc3luY19tb2RlCT0gV0JfU1lOQ19BTEwsCi0JCS5yYW5nZV9zdGFydAk9IDAsCi0JCS5yYW5nZV9lbmQJPSBMTE9OR19NQVgsCi0JCS5ucl90b193cml0ZQk9IExPTkdfTUFYLAotCX07Ci0JZ2VuZXJpY19zeW5jX3NiX2lub2RlcyhzYiwgJndiYyk7Ci0KKwlzeW5jX2lub2Rlc19zYihzYik7CiAJa2lsbF9hbm9uX3N1cGVyKHNiKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCmluZGV4IGYyOThiOWIuLjM1YzU5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X21haW5fZGV2LmMKQEAgLTg2Miw3ICs4NjIsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gc2tiLT5kZXY7CiAJUFJUTVBfQURBUFRFUiBwQWQgPSBuZXRfZGV2LT5tbF9wcml2OwotCWludCBzdGF0dXMgPSAwOworCWludCBzdGF0dXMgPSBORVRERVZfVFhfT0s7CiAJUE5ESVNfUEFDS0VUIHBQYWNrZXQgPSAoUE5ESVNfUEFDS0VUKSBza2I7CiAKIAl7CkBAIC04OTIsNyArODkyLDcgQEAKIAogCVNUQVNlbmRQYWNrZXRzKChORElTX0hBTkRMRSlwQWQsIChQUE5ESVNfUEFDS0VUKSAmcFBhY2tldCwgMSk7CiAKLQlzdGF0dXMgPSAwOworCXN0YXR1cyA9IE5FVERFVl9UWF9PSzsKIGRvbmU6CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtOTIzLDcgKzkyMyw3IEBACiAJaWYgKCEobmV0X2Rldi0+ZmxhZ3MgJiBJRkZfVVApKQogCXsKIAkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIChQTkRJU19QQUNLRVQpc2tiX3AsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlOZGlzWmVyb01lbW9yeSgoUFVDSEFSKSZza2JfcC0+Y2JbQ0JfT0ZGXSwgMTUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCAxMjk0ZTA1Li4xYjc3NDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwpAQCAtODAyLDEzICs4MDIsMTMgQEAKIAkJCWlmICgoKmllZWUtPmhhcmRfc3RhcnRfeG1pdCkodHhiLCBkZXYpID09IDApIHsKIAkJCQlzdGF0cy0+dHhfcGFja2V0cysrOwogCQkJCXN0YXRzLT50eF9ieXRlcyArPSB0eGItPnBheWxvYWRfc2l6ZTsKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJfQogCQkJaWVlZTgwMjExX3R4Yl9mcmVlKHR4Yik7CiAJCX0KIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAgZmFpbGVkOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKaW5kZXggN2UyZmVjYS4uMjZhNTkxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKQEAgLTMwNDAsNyArMzA0MCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2xvY2ssZmxhZ3MpOwogCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCXJ0bDgxODBfdHgoZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBwcmlvcml0eSwKQEAgLTMwNTEsNyArMzA1MSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jayxmbGFncyk7CiAKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8vIGxvbmdwcmUgMTQ0KzQ4IHNob3J0cHJlIDcyKzI0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMKaW5kZXggZWQ0N2RiNS4uYjAxYTI4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYwpAQCAtODQ1LDcgKzg0NSw3IEBACiAJCQkJIGhjbWQtPnBhZGRyaCwgRE9OVF9GTFVTSCk7CiAJfQogeG1pdF9kb25lOgotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB4bWl0X2ZhaWw6CiAJc2xpY194bWl0X2ZhaWwoYWRhcHRlciwgc2tiLCBvZmZsb2FkY21kLCBza2J0eXBlLCBzdGF0dXMpOwogCWdvdG8geG1pdF9kb25lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYwppbmRleCBhMTM3Yzc4Li4xMmQ0MTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYwpAQCAtMTQyOSw3ICsxNDI5LDggQEAKIAlzdGxjNDV4eF9kZWJ1ZyhERUJVR19SWCwgInJ4IGRhdGEgMHglcCAlZCBCIiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAJc3RsYzQ1eHhfZHVtcChERUJVR19SWF9DT05URU5ULCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAotCWllZWU4MDIxMV9yeChzdGxjLT5odywgc2tiLCAmc3RhdHVzKTsKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKwlpZWVlODAyMTFfcngoc3RsYy0+aHcsIHNrYik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5oCmluZGV4IGYwN2FhNzAuLjExMDA5NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuaApAQCAtNzgyLDYgKzc4Miw2IEBACiAjZGVmaW5lIFNJT0NTTElDU0VUSU5UQUdHICAgICAgICAoU0lPQ0RFVlBSSVZBVEUrMTApCiAjZGVmaW5lIFNJT0NTTElDVFJBQ0VEVU1QICAgICAgICAoU0lPQ0RFVlBSSVZBVEUrMTEpCiAKLWV4dGVybiBzdHJ1Y3QgZXRodG9vbF9vcHMgc3hnX25pY19ldGh0b29sX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc3hnX25pY19ldGh0b29sX29wczsKICNkZWZpbmUgU1hHX0NPTVBMRVRFX1NMT1dfU0VORF9MSU1JVAkxMjgKICNlbmRpZiAvKiAgX19TWEdfRFJJVkVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdfZXRodG9vbC5jIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdfZXRodG9vbC5jCmluZGV4IGFkODljYjguLmY1YTA3MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19ldGh0b29sLmMKQEAgLTMwMCw3ICszMDAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZXRodG9vbF9vcHMgc3hnX25pY19ldGh0b29sX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzeGdfbmljX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBzeGdfbmljX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gc3hnX25pY19zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvID0gc3hnX25pY19nZXRfZHJ2aW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyeC5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4LmMKaW5kZXggM2U4Y2YwOC4uYjkwNWU3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4LmMKQEAgLTQwLDcgKzQwLDggQEAKIAlyeF9zdGF0dXMucGh5bW9kZSA9IE1PREVfSUVFRTgwMjExQjsKICovCiAKLQlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiLCAmcnhfc3RhdHVzKTsKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgV2IzNVJ4X2FkanVzdChQREVTQ1JJUFRPUiBwUnhEZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCmluZGV4IDkwZjQ5OWUuLmMyNzNjMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCkBAIC0zNTQsNyArMzU0LDcgQEAKIAlwODAyMTFfbWV0YXdlcF90IHA4MDIxMV93ZXA7CiAKIAlpZiAoc2tiID09IE5VTEwpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAJaWYgKHdsYW5kZXYtPnN0YXRlICE9IFdMQU5fREVWSUNFX09QRU4pIHsKIAkJcmVzdWx0ID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKaW5kZXggOTZmYjExOC4uZDJkZTEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKQEAgLTM1LDYgKzM1LDEwIEBACiAjaW5jbHVkZSAidV9waG9uZXQuaCIKIAogI2RlZmluZSBQTl9NRURJQV9VU0IJMHgxQgorI2RlZmluZSBNQVhQQUNLRVQJNTEyCisjaWYgKFBBR0VfU0laRSAlIE1BWFBBQ0tFVCkKKyNlcnJvciBNQVhQQUNLRVQgbXVzdCBkaXZpZGUgUEFHRV9TSVpFIQorI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTQ1LDYgKzQ5LDEwIEBACiAKIHN0cnVjdCBmX3Bob25ldCB7CiAJc3RydWN0IHVzYl9mdW5jdGlvbgkJZnVuY3Rpb247CisJc3RydWN0IHsKKwkJc3RydWN0IHNrX2J1ZmYJCSpza2I7CisJCXNwaW5sb2NrX3QJCWxvY2s7CisJfSByeDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkJKmRldjsKIAlzdHJ1Y3QgdXNiX2VwCQkJKmluX2VwLCAqb3V0X2VwOwogCkBAIC01Miw3ICs2MCw3IEBACiAJc3RydWN0IHVzYl9yZXF1ZXN0CQkqb3V0X3JlcXZbMF07CiB9OwogCi1zdGF0aWMgaW50IHBob25ldF9yeHFfc2l6ZSA9IDI7CitzdGF0aWMgaW50IHBob25ldF9yeHFfc2l6ZSA9IDE3OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmX3Bob25ldCAqZnVuY190b19wbihzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQogewpAQCAtMTM4LDcgKzE0Niw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KE1BWFBBQ0tFVCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCkBAIC0yNTYsMjUgKzI2NCwxNSBAQAogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IHBuX25ldF9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7Ci0Jc3RydWN0IHBob25ldF9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnIgPSAtRUJVU1k7Ci0KIAlpZiAoKG5ld19tdHUgPCBQSE9ORVRfTUlOX01UVSkgfHwgKG5ld19tdHUgPiBQSE9ORVRfTUFYX01UVSkpCiAJCXJldHVybiAtRUlOVkFMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewotCQlkZXYtPm10dSA9IG5ld19tdHU7Ci0JCWVyciA9IDA7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gZXJyOworCWRldi0+bXR1ID0gbmV3X210dTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwbl9uZXRkZXZfb3BzID0gewpAQCAtMzA4LDIxICszMDYsMjEgQEAKIHN0YXRpYyBpbnQKIHBuX3J4X3N1Ym1pdChzdHJ1Y3QgZl9waG9uZXQgKmZwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewotCXN0cnVjdCBza19idWZmICpza2I7Ci0JY29uc3Qgc2l6ZV90IHNpemUgPSBmcC0+ZGV2LT5tdHU7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGZwLT5kZXY7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IGVycjsKIAotCXNrYiA9IGFsbG9jX3NrYihzaXplLCBnZnBfZmxhZ3MpOwotCWlmICghc2tiKQorCXBhZ2UgPSBfX25ldGRldl9hbGxvY19wYWdlKGRldiwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIXBhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmVxLT5idWYgPSBza2ItPmRhdGE7Ci0JcmVxLT5sZW5ndGggPSBzaXplOwotCXJlcS0+Y29udGV4dCA9IHNrYjsKKwlyZXEtPmJ1ZiA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwlyZXEtPmxlbmd0aCA9IFBBR0VfU0laRTsKKwlyZXEtPmNvbnRleHQgPSBwYWdlOwogCiAJZXJyID0gdXNiX2VwX3F1ZXVlKGZwLT5vdXRfZXAsIHJlcSwgZ2ZwX2ZsYWdzKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJbmV0ZGV2X2ZyZWVfcGFnZShkZXYsIHBhZ2UpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTMzMCwyNSArMzI4LDM3IEBACiB7CiAJc3RydWN0IGZfcGhvbmV0ICpmcCA9IGVwLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZnAtPmRldjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmVxLT5jb250ZXh0OworCXN0cnVjdCBwYWdlICpwYWdlID0gcmVxLT5jb250ZXh0OworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3RhdHVzID0gcmVxLT5zdGF0dXM7CiAKIAlzd2l0Y2ggKHN0YXR1cykgewogCWNhc2UgMDoKLQkJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKGRldikpKQotCQkJYnJlYWs7Ci0JCWlmICh1bmxpa2VseShyZXEtPmFjdHVhbCA8IDEpKQotCQkJYnJlYWs7Ci0JCXNrYl9wdXQoc2tiLCByZXEtPmFjdHVhbCk7Ci0JCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9QSE9ORVQpOwotCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCQlfX3NrYl9wdWxsKHNrYiwgMSk7Ci0JCXNrYi0+ZGV2ID0gZGV2OwotCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmZwLT5yeC5sb2NrLCBmbGFncyk7CisJCXNrYiA9IGZwLT5yeC5za2I7CisJCWlmICghc2tiKQorCQkJc2tiID0gZnAtPnJ4LnNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCAxMik7CisJCWlmIChyZXEtPmFjdHVhbCA8IHJlcS0+bGVuZ3RoKSAvKiBMYXN0IGZyYWdtZW50ICovCisJCQlmcC0+cnguc2tiID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnAtPnJ4LmxvY2ssIGZsYWdzKTsKIAotCQluZXRpZl9yeChza2IpOwotCQlza2IgPSBOVUxMOworCQlpZiAodW5saWtlbHkoIXNrYikpCisJCQlicmVhazsKKwkJc2tiX2FkZF9yeF9mcmFnKHNrYiwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncywgcGFnZSwgMCwKKwkJCQlyZXEtPmFjdHVhbCk7CisJCXBhZ2UgPSBOVUxMOworCisJCWlmIChyZXEtPmFjdHVhbCA8IHJlcS0+bGVuZ3RoKSB7IC8qIExhc3QgZnJhZ21lbnQgKi8KKwkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9QSE9ORVQpOworCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwkJCXBza2JfcHVsbChza2IsIDEpOworCQkJc2tiLT5kZXYgPSBkZXY7CisJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwkJCW5ldGlmX3J4KHNrYik7CisJCX0KIAkJYnJlYWs7CiAKIAkvKiBEbyBub3QgcmVzdWJtaXQgaW4gdGhlc2UgY2FzZXM6ICovCkBAIC0zNjYsOCArMzc2LDggQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHNrYikKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwlpZiAocGFnZSkKKwkJbmV0ZGV2X2ZyZWVfcGFnZShkZXYsIHBhZ2UpOwogCWlmIChyZXEpCiAJCXBuX3J4X3N1Ym1pdChmcCwgcmVxLCBHRlBfQVRPTUlDKTsKIH0KQEAgLTM4NSw2ICszOTUsMTAgQEAKIAogCXVzYl9lcF9kaXNhYmxlKGZwLT5vdXRfZXApOwogCXVzYl9lcF9kaXNhYmxlKGZwLT5pbl9lcCk7CisJaWYgKGZwLT5yeC5za2IpIHsKKwkJZGV2X2tmcmVlX3NrYl9pcnEoZnAtPnJ4LnNrYik7CisJCWZwLT5yeC5za2IgPSBOVUxMOworCX0KIH0KIAogc3RhdGljIGludCBwbl9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsIHVuc2lnbmVkIGludGYsIHVuc2lnbmVkIGFsdCkKQEAgLTU4Myw2ICs1OTcsNyBAQAogCWZwLT5mdW5jdGlvbi5zZXRfYWx0ID0gcG5fc2V0X2FsdDsKIAlmcC0+ZnVuY3Rpb24uZ2V0X2FsdCA9IHBuX2dldF9hbHQ7CiAJZnAtPmZ1bmN0aW9uLmRpc2FibGUgPSBwbl9kaXNjb25uZWN0OworCXNwaW5fbG9ja19pbml0KCZmcC0+cngubG9jayk7CiAKIAllcnIgPSB1c2JfYWRkX2Z1bmN0aW9uKGMsICZmcC0+ZnVuY3Rpb24pOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYwppbmRleCAwMTZmNjNiLi5jNjY1MjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKQEAgLTE4MSw3ICsxODEsNyBAQAogICogICAtIC4uLiBwcm9iYWJseSBtb3JlIGV0aHRvb2wgb3BzCiAgKi8KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBldGhfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CkBAIC00NjUsNyArNDY1LDggQEAKIAlyZXR1cm4gY2RjX2ZpbHRlciAmIFVTQl9DRENfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVM7CiB9CiAKLXN0YXRpYyBpbnQgZXRoX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3N0YXRpYyBuZXRkZXZfdHhfdCBldGhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCBldGhfZGV2CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQlsZW5ndGggPSBza2ItPmxlbjsKQEAgLTQ4Nyw3ICs0ODgsNyBAQAogCiAJaWYgKCFpbikgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAkvKiBhcHBseSBvdXRnb2luZyBDREMgb3IgUk5ESVMgZmlsdGVycyAqLwpAQCAtNTA2LDcgKzUwNyw3IEBACiAJCQkJdHlwZSA9IFVTQl9DRENfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVDsKIAkJCWlmICghKGNkY19maWx0ZXIgJiB0eXBlKSkgewogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJCX0KIAkJfQogCQkvKiBpZ25vcmVzIFVTQl9DRENfUEFDS0VUX1RZUEVfRElSRUNURUQgKi8KQEAgLTU4Niw3ICs1ODcsNyBAQAogCQlsaXN0X2FkZCgmcmVxLT5saXN0LCAmZGV2LT50eF9yZXFzKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5yZXFfbG9jaywgZmxhZ3MpOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggYzdjMWNhMC4uMWQyNmJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC0yMTY3LDggKzIxNjcsOSBAQAogCiAjaWZkZWYJQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgbXVzYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQorc3RhdGljIGludCBtdXNiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCXN0cnVjdCBtdXNiCSptdXNiID0gZGV2X3RvX211c2IoJnBkZXYtPmRldik7CiAKQEAgLTIxOTUsOCArMjE5Niw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXVzYl9yZXN1bWVfZWFybHkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgbXVzYl9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbXVzYgkqbXVzYiA9IGRldl90b19tdXNiKCZwZGV2LT5kZXYpOwogCiAJaWYgKCFtdXNiLT5jbG9jaykKQEAgLTIyMTQsOSArMjIxNiwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgbXVzYl9kZXZfcG1fb3BzID0geworCS5zdXNwZW5kCT0gbXVzYl9zdXNwZW5kLAorCS5yZXN1bWVfbm9pcnEJPSBtdXNiX3Jlc3VtZV9ub2lycSwKK307CisKKyNkZWZpbmUgTVVTQl9ERVZfUE1fT1BTICgmbXVzYl9kZXZfcG1fb3BzKQogI2Vsc2UKLSNkZWZpbmUJbXVzYl9zdXNwZW5kCU5VTEwKLSNkZWZpbmUJbXVzYl9yZXN1bWVfZWFybHkJTlVMTAorI2RlZmluZQlNVVNCX0RFVl9QTV9PUFMJTlVMTAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG11c2JfZHJpdmVyID0gewpAQCAtMjIyNCwxMSArMjIzMSwxMCBAQAogCQkubmFtZQkJPSAoY2hhciAqKW11c2JfZHJpdmVyX25hbWUsCiAJCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wbQkJPSBNVVNCX0RFVl9QTV9PUFMsCiAJfSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG11c2JfcmVtb3ZlKSwKIAkuc2h1dGRvd24JPSBtdXNiX3NodXRkb3duLAotCS5zdXNwZW5kCT0gbXVzYl9zdXNwZW5kLAotCS5yZXN1bWVfZWFybHkJPSBtdXNiX3Jlc3VtZV9lYXJseSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL2kxNDgwdS13bHAuaCBiL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvaTE0ODB1LXdscC5oCmluZGV4IDM0MjFkMzMuLjJlMzFmNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvaTE0ODB1LXdscC5oCisrKyBiL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvaTE0ODB1LXdscC5oCkBAIC0yNjcsNyArMjY3LDggQEAKIC8qIG5ldGRldiBpbnRlcmZhY2UgKi8KIGV4dGVybiBpbnQgaTE0ODB1X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKik7CiBleHRlcm4gaW50IGkxNDgwdV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICopOwotZXh0ZXJuIGludCBpMTQ4MHVfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworZXh0ZXJuIG5ldGRldl90eF90IGkxNDgwdV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwKKwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgaTE0ODB1X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBleHRlcm4gaW50IGkxNDgwdV9zZXRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBpZm1hcCAqKTsKIGV4dGVybiBpbnQgaTE0ODB1X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvdHguYyBiL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvdHguYwppbmRleCAyNmJhY2MwLi4zZGIzNDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL3R4LmMKKysrIGIvZHJpdmVycy91d2IvaTE0ODAvaTE0ODB1LXdscC90eC5jCkBAIC01MDMsNyArNTAzLDggQEAKICAqCiAgKiBAbmV0X2Rldi0+eG1pdF9sb2NrIGlzIGhlbGQKICAqLwotaW50IGkxNDgwdV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCituZXRkZXZfdHhfdCBpMTQ4MHVfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKIHsKIAlpbnQgcmVzdWx0OwogCXN0cnVjdCBpMTQ4MHUgKmkxNDgwdSA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IGEwZDllZTEuLmNlZjNlMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTkzNyw3ICs5MzcsNyBAQAogCiBjb25maWcgRkJfQVRNRUwKIAl0cmlzdGF0ZSAiQVQ5MS9BVDMyIExDRCBDb250cm9sbGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBGQiAmJiAoQVJDSF9BVDkxU0FNOTI2MSB8fCBBUkNIX0FUOTFTQU05MjYzIHx8IEFSQ0hfQVQ5MVNBTTlSTCB8fCBBUkNIX0FUOTFDQVA5IHx8IEFWUjMyKQorCWRlcGVuZHMgb24gRkIgJiYgKEFSQ0hfQVQ5MVNBTTkyNjEgfHwgQVJDSF9BVDkxU0FNOUcxMCB8fCBBUkNIX0FUOTFTQU05MjYzIHx8IEFSQ0hfQVQ5MVNBTTlSTCB8fCBBUkNIX0FUOTFTQU05RzQ1IHx8IEFSQ0hfQVQ5MUNBUDkgfHwgQVZSMzIpCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVApAQCAtOTUzLDcgKzk1Myw3IEBACiAKIGNvbmZpZyBGQl9BVE1FTF9TVE4KIAlib29sICJVc2UgYSBTVE4gZGlzcGxheSB3aXRoIEFUOTEvQVQzMiBMQ0QgQ29udHJvbGxlciIKLQlkZXBlbmRzIG9uIEZCX0FUTUVMICYmIE1BQ0hfQVQ5MVNBTTkyNjFFSworCWRlcGVuZHMgb24gRkJfQVRNRUwgJiYgKE1BQ0hfQVQ5MVNBTTkyNjFFSyB8fCBNQUNIX0FUOTFTQU05RzEwRUspCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFNUTiBMQ0QgZGlzcGxheSB0byB0aGUgQVQ5MS9BVDMyIExDRApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jIGIvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCmluZGV4IGRhMDVmMDguLjI4MzBmZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKQEAgLTE4Miw3ICsxODIsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAKLQlpZiAoIShjcHVfaXNfYXQ5MXNhbTkyNjEoKSB8fCBjcHVfaXNfYXQzMmFwNzAwMCgpKSkKKwlpZiAoIShjcHVfaXNfYXQ5MXNhbTkyNjEoKSB8fCBjcHVfaXNfYXQ5MXNhbTlnMTAoKQorCQl8fCBjcHVfaXNfYXQzMmFwNzAwMCgpKSkKIAkJcmV0dXJuIHhyZXM7CiAKIAl2YWx1ZSA9IHhyZXM7CkBAIC04MjQsNyArODI1LDggQEAKIAlpbmZvLT5maXggPSBhdG1lbF9sY2RmYl9maXg7CiAKIAkvKiBFbmFibGUgTENEQyBDbG9ja3MgKi8KLQlpZiAoY3B1X2lzX2F0OTFzYW05MjYxKCkgfHwgY3B1X2lzX2F0MzJhcDcwMDAoKSkgeworCWlmIChjcHVfaXNfYXQ5MXNhbTkyNjEoKSB8fCBjcHVfaXNfYXQ5MXNhbTlnMTAoKQorCSB8fCBjcHVfaXNfYXQzMmFwNzAwMCgpKSB7CiAJCXNpbmZvLT5idXNfY2xrID0gY2xrX2dldChkZXYsICJoY2sxIik7CiAJCWlmIChJU19FUlIoc2luZm8tPmJ1c19jbGspKSB7CiAJCQlyZXQgPSBQVFJfRVJSKHNpbmZvLT5idXNfY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCmluZGV4IGY5ZDE5YmUuLjkwODYxY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZwpAQCAtMTEwLDcgKzExMCw3IEBACiBjb25maWcgQkFDS0xJR0hUX0FUTUVMX0xDREMKIAlib29sICJBdG1lbCBMQ0RDIENvbnRyYXN0LWFzLUJhY2tsaWdodCBjb250cm9sIgogCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBGQl9BVE1FTAotCWRlZmF1bHQgeSBpZiBNQUNIX1NBTTkyNjFFSyB8fCBNQUNIX1NBTTkyNjNFSworCWRlZmF1bHQgeSBpZiBNQUNIX1NBTTkyNjFFSyB8fCBNQUNIX1NBTTlHMTBFSyB8fCBNQUNIX1NBTTkyNjNFSwogCWhlbHAKIAkgIFRoaXMgcHJvdmlkZXMgYSBiYWNrbGlnaHQgY29udHJvbCBpbnRlcm5hbCB0byB0aGUgQXRtZWwgTENEQwogCSAgZHJpdmVyLiAgSWYgdGhlIExDRCAiY29udHJhc3QgY29udHJvbCIgb24geW91ciBib2FyZCBpcyB3aXJlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5jIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCmluZGV4IDE1YTBlZTYuLjMwYWUzMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KIAogI2luY2x1ZGUgPG1hY2gvaW14ZmIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIC8qCiAgKiBDb21wbGFpbiBpZiBWQVIgaXMgb3V0IG9mIHJhbmdlLgpAQCAtMTI5LDYgKzEzMCwxMCBAQAogI2RlZmluZSBMQ0RJU1JfRU9GCSgxPDwxKQogI2RlZmluZSBMQ0RJU1JfQk9GCSgxPDwwKQogCisvKiBVc2VkIGZiLW1vZGUuIENhbiBiZSBzZXQgb24ga2VybmVsIGNvbW1hbmQgbGluZSwgdGhlcmVmb3JlIGZpbGUtc3RhdGljLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKmZiX21vZGU7CisKKwogLyoKICAqIFRoZXNlIGFyZSB0aGUgYml0ZmllbGRzIGZvciBlYWNoCiAgKiBkaXNwbGF5IGRlcHRoIHRoYXQgd2Ugc3VwcG9ydC4KQEAgLTE0NSwxMCArMTUwLDYgQEAKIAl2b2lkIF9faW9tZW0JCSpyZWdzOwogCXN0cnVjdCBjbGsJCSpjbGs7CiAKLQl1X2ludAkJCW1heF9icHA7Ci0JdV9pbnQJCQltYXhfeHJlczsKLQl1X2ludAkJCW1heF95cmVzOwotCiAJLyoKIAkgKiBUaGVzZSBhcmUgdGhlIGFkZHJlc3NlcyB3ZSBtYXBwZWQKIAkgKiB0aGUgZnJhbWVidWZmZXIgbWVtb3J5IHJlZ2lvbiB0by4KQEAgLTE3Miw2ICsxNzMsOSBAQAogCQkJCWNtYXBfc3RhdGljOjEsCiAJCQkJdW51c2VkOjMwOwogCisJc3RydWN0IGlteF9mYl92aWRlb21vZGUgKm1vZGU7CisJaW50CQkJbnVtX21vZGVzOworCiAJdm9pZCAoKmxjZF9wb3dlcikoaW50KTsKIAl2b2lkICgqYmFja2xpZ2h0X3Bvd2VyKShpbnQpOwogfTsKQEAgLTI5OCw2ICszMDIsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteF9mYl92aWRlb21vZGUgKmlteGZiX2ZpbmRfbW9kZShzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpKQoreworCXN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlICptOworCWludCBpOworCisJZm9yIChpID0gMCwgbSA9ICZmYmktPm1vZGVbMF07IGkgPCBmYmktPm51bV9tb2RlczsgaSsrLCBtKyspIHsKKwkJaWYgKCFzdHJjbXAobS0+bW9kZS5uYW1lLCBmYl9tb2RlKSkKKwkJCXJldHVybiBtOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogLyoKICAqICBpbXhmYl9jaGVja192YXIoKToKICAqICAgIFJvdW5kIHVwIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6IGJpdHNfcGVyX3BpeGVsLCB4cmVzLApAQCAtMzA4LDM1ICszMjQsODEgQEAKIHsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwogCXN0cnVjdCBpbXhmYl9yZ2IgKnJnYjsKKwljb25zdCBzdHJ1Y3QgaW14X2ZiX3ZpZGVvbW9kZSAqaW14ZmJfbW9kZTsKKwl1bnNpZ25lZCBsb25nIGxjZF9jbGs7CisJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKKwl1MzIgcGNyID0gMDsKIAogCWlmICh2YXItPnhyZXMgPCBNSU5fWFJFUykKIAkJdmFyLT54cmVzID0gTUlOX1hSRVM7CiAJaWYgKHZhci0+eXJlcyA8IE1JTl9ZUkVTKQogCQl2YXItPnlyZXMgPSBNSU5fWVJFUzsKLQlpZiAodmFyLT54cmVzID4gZmJpLT5tYXhfeHJlcykKLQkJdmFyLT54cmVzID0gZmJpLT5tYXhfeHJlczsKLQlpZiAodmFyLT55cmVzID4gZmJpLT5tYXhfeXJlcykKLQkJdmFyLT55cmVzID0gZmJpLT5tYXhfeXJlczsKLQl2YXItPnhyZXNfdmlydHVhbCA9IG1heCh2YXItPnhyZXNfdmlydHVhbCwgdmFyLT54cmVzKTsKLQl2YXItPnlyZXNfdmlydHVhbCA9IG1heCh2YXItPnlyZXNfdmlydHVhbCwgdmFyLT55cmVzKTsKKworCWlteGZiX21vZGUgPSBpbXhmYl9maW5kX21vZGUoZmJpKTsKKwlpZiAoIWlteGZiX21vZGUpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFyLT54cmVzCQk9IGlteGZiX21vZGUtPm1vZGUueHJlczsKKwl2YXItPnlyZXMJCT0gaW14ZmJfbW9kZS0+bW9kZS55cmVzOworCXZhci0+Yml0c19wZXJfcGl4ZWwJPSBpbXhmYl9tb2RlLT5icHA7CisJdmFyLT5waXhjbG9jawkJPSBpbXhmYl9tb2RlLT5tb2RlLnBpeGNsb2NrOworCXZhci0+aHN5bmNfbGVuCQk9IGlteGZiX21vZGUtPm1vZGUuaHN5bmNfbGVuOworCXZhci0+bGVmdF9tYXJnaW4JPSBpbXhmYl9tb2RlLT5tb2RlLmxlZnRfbWFyZ2luOworCXZhci0+cmlnaHRfbWFyZ2luCT0gaW14ZmJfbW9kZS0+bW9kZS5yaWdodF9tYXJnaW47CisJdmFyLT52c3luY19sZW4JCT0gaW14ZmJfbW9kZS0+bW9kZS52c3luY19sZW47CisJdmFyLT51cHBlcl9tYXJnaW4JPSBpbXhmYl9tb2RlLT5tb2RlLnVwcGVyX21hcmdpbjsKKwl2YXItPmxvd2VyX21hcmdpbgk9IGlteGZiX21vZGUtPm1vZGUubG93ZXJfbWFyZ2luOworCXZhci0+c3luYwkJPSBpbXhmYl9tb2RlLT5tb2RlLnN5bmM7CisJdmFyLT54cmVzX3ZpcnR1YWwJPSBtYXgodmFyLT54cmVzX3ZpcnR1YWwsIHZhci0+eHJlcyk7CisJdmFyLT55cmVzX3ZpcnR1YWwJPSBtYXgodmFyLT55cmVzX3ZpcnR1YWwsIHZhci0+eXJlcyk7CiAKIAlwcl9kZWJ1ZygidmFyLT5iaXRzX3Blcl9waXhlbD0lZFxuIiwgdmFyLT5iaXRzX3Blcl9waXhlbCk7CisKKwlsY2RfY2xrID0gY2xrX2dldF9yYXRlKGZiaS0+Y2xrKTsKKworCXRtcCA9IHZhci0+cGl4Y2xvY2sgKiAodW5zaWduZWQgbG9uZyBsb25nKWxjZF9jbGs7CisKKwlkb19kaXYodG1wLCAxMDAwMDAwKTsKKworCWlmIChkb19kaXYodG1wLCAxMDAwMDAwKSA+IDUwMDAwMCkKKwkJdG1wKys7CisKKwlwY3IgPSAodW5zaWduZWQgaW50KXRtcDsKKworCWlmICgtLXBjciA+IDB4M0YpIHsKKwkJcGNyID0gMHgzRjsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTXVzdCBsaW1pdCBwaXhlbCBjbG9jayB0byAlbHVIelxuIiwKKwkJCQlsY2RfY2xrIC8gcGNyKTsKKwl9CisKIAlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDMyOgorCQlwY3IgfD0gUENSX0JQSVhfMTg7CiAJCXJnYiA9ICZkZWZfcmdiXzE4OwogCQlicmVhazsKIAljYXNlIDE2OgogCWRlZmF1bHQ6Ci0JCWlmIChmYmktPnBjciAmIFBDUl9URlQpCisJCWlmIChjcHVfaXNfbXgxKCkpCisJCQlwY3IgfD0gUENSX0JQSVhfMTI7CisJCWVsc2UKKwkJCXBjciB8PSBQQ1JfQlBJWF8xNjsKKworCQlpZiAoaW14ZmJfbW9kZS0+cGNyICYgUENSX1RGVCkKIAkJCXJnYiA9ICZkZWZfcmdiXzE2X3RmdDsKIAkJZWxzZQogCQkJcmdiID0gJmRlZl9yZ2JfMTZfc3RuOwogCQlicmVhazsKIAljYXNlIDg6CisJCXBjciB8PSBQQ1JfQlBJWF84OwogCQlyZ2IgPSAmZGVmX3JnYl84OwogCQlicmVhazsKIAl9CiAKKwkvKiBhZGQgc3luYyBwb2xhcml0aWVzICovCisJcGNyIHw9IGlteGZiX21vZGUtPnBjciAmIH4oMHgzZiB8ICg3IDw8IDI1KSk7CisKKwlmYmktPnBjciA9IHBjcjsKKwogCS8qCiAJICogQ29weSB0aGUgUkdCIHBhcmFtZXRlcnMgZm9yIHRoaXMgZGlzcGxheQogCSAqIGZyb20gdGhlIG1hY2hpbmUgc3BlY2lmaWMgcGFyYW1ldGVycy4KQEAgLTM5MywxMCArNDU1LDYgQEAKIAogCXdyaXRlbChmYmktPnNjcmVlbl9kbWEsIGZiaS0+cmVncyArIExDRENfU1NBKTsKIAotCS8qIHBoeXNpY2FsIHNjcmVlbiBzdGFydCBhZGRyZXNzCSAgICAqLwotCXdyaXRlbChWUFdfVlBXKGZiaS0+bWF4X3hyZXMgKiBmYmktPm1heF9icHAgLyA4IC8gNCksCi0JCWZiaS0+cmVncyArIExDRENfVlBXKTsKLQogCS8qIHBhbm5pbmcgb2Zmc2V0IDAgKDAgcGl4ZWwgb2Zmc2V0KSAgICAgICAgKi8KIAl3cml0ZWwoMHgwMDAwMDAwMCwgZmJpLT5yZWdzICsgTENEQ19QT1MpOwogCkBAIC00NjgsOCArNTI2LDYgQEAKIHN0YXRpYyBpbnQgaW14ZmJfYWN0aXZhdGVfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwotCXVuc2lnbmVkIGludCBwY3IsIGxjZF9jbGs7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKIAogCXByX2RlYnVnKCJ2YXI6IHhyZXM9JWQgaHNsZW49JWQgbG09JWQgcm09JWRcbiIsCiAJCXZhci0+eHJlcywgdmFyLT5oc3luY19sZW4sCkBAIC01MDUsNiArNTYxLDEwIEBACiAJCQlpbmZvLT5maXguaWQsIHZhci0+bG93ZXJfbWFyZ2luKTsKICNlbmRpZgogCisJLyogcGh5c2ljYWwgc2NyZWVuIHN0YXJ0IGFkZHJlc3MJICAgICovCisJd3JpdGVsKFZQV19WUFcodmFyLT54cmVzICogdmFyLT5iaXRzX3Blcl9waXhlbCAvIDggLyA0KSwKKwkJZmJpLT5yZWdzICsgTENEQ19WUFcpOworCiAJd3JpdGVsKEhDUl9IX1dJRFRIKHZhci0+aHN5bmNfbGVuIC0gMSkgfAogCQlIQ1JfSF9XQUlUXzEodmFyLT5yaWdodF9tYXJnaW4gLSAxKSB8CiAJCUhDUl9IX1dBSVRfMih2YXItPmxlZnRfbWFyZ2luIC0gMyksCkBAIC01MTgsMjIgKzU3OCw3IEBACiAJd3JpdGVsKFNJWkVfWE1BWCh2YXItPnhyZXMpIHwgU0laRV9ZTUFYKHZhci0+eXJlcyksCiAJCQlmYmktPnJlZ3MgKyBMQ0RDX1NJWkUpOwogCi0JbGNkX2NsayA9IGNsa19nZXRfcmF0ZShmYmktPmNsayk7Ci0JdG1wID0gdmFyLT5waXhjbG9jayAqICh1bnNpZ25lZCBsb25nIGxvbmcpbGNkX2NsazsKLQlkb19kaXYodG1wLCAxMDAwMDAwKTsKLQlpZiAoZG9fZGl2KHRtcCwgMTAwMDAwMCkgPiA1MDAwMDApCi0JCXRtcCsrOwotCXBjciA9ICh1bnNpZ25lZCBpbnQpdG1wOwotCWlmICgtLXBjciA+IDB4M0YpIHsKLQkJcGNyID0gMHgzRjsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTXVzdCBsaW1pdCBwaXhlbCBjbG9jayB0byAldUh6XG4iLAotCQkJCWxjZF9jbGsgLyBwY3IpOwotCX0KLQotCS8qIGFkZCBzeW5jIHBvbGFyaXRpZXMgKi8KLQlwY3IgfD0gZmJpLT5wY3IgJiB+MHgzRjsKLQotCXdyaXRlbChwY3IsIGZiaS0+cmVncyArIExDRENfUENSKTsKKwl3cml0ZWwoZmJpLT5wY3IsIGZiaS0+cmVncyArIExDRENfUENSKTsKIAl3cml0ZWwoZmJpLT5wd21yLCBmYmktPnJlZ3MgKyBMQ0RDX1BXTVIpOwogCXdyaXRlbChmYmktPmxzY3IxLCBmYmktPnJlZ3MgKyBMQ0RDX0xTQ1IxKTsKIAl3cml0ZWwoZmJpLT5kbWFjciwgZmJpLT5yZWdzICsgTENEQ19ETUFDUik7CkBAIC01NzUsNiArNjIwLDggQEAKIAlzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CiAJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgaW14X2ZiX3ZpZGVvbW9kZSAqbTsKKwlpbnQgaTsKIAogCXByX2RlYnVnKCIlc1xuIixfX2Z1bmNfXyk7CiAKQEAgLTYwMywzNSArNjUwLDE4IEBACiAJaW5mby0+ZmJvcHMJCQk9ICZpbXhmYl9vcHM7CiAJaW5mby0+ZmxhZ3MJCQk9IEZCSU5GT19GTEFHX0RFRkFVTFQgfAogCQkJCQkgIEZCSU5GT19SRUFEU19GQVNUOwotCi0JZmJpLT5tYXhfeHJlcwkJCT0gcGRhdGEtPnhyZXM7Ci0JaW5mby0+dmFyLnhyZXMJCQk9IHBkYXRhLT54cmVzOwotCWluZm8tPnZhci54cmVzX3ZpcnR1YWwJCT0gcGRhdGEtPnhyZXM7Ci0JZmJpLT5tYXhfeXJlcwkJCT0gcGRhdGEtPnlyZXM7Ci0JaW5mby0+dmFyLnlyZXMJCQk9IHBkYXRhLT55cmVzOwotCWluZm8tPnZhci55cmVzX3ZpcnR1YWwJCT0gcGRhdGEtPnlyZXM7Ci0JZmJpLT5tYXhfYnBwCQkJPSBwZGF0YS0+YnBwOwotCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbAk9IHBkYXRhLT5icHA7Ci0JaW5mby0+dmFyLm5vbnN0ZAkJPSBwZGF0YS0+bm9uc3RkOwotCWluZm8tPnZhci5waXhjbG9jawkJPSBwZGF0YS0+cGl4Y2xvY2s7Ci0JaW5mby0+dmFyLmhzeW5jX2xlbgkJPSBwZGF0YS0+aHN5bmNfbGVuOwotCWluZm8tPnZhci5sZWZ0X21hcmdpbgkJPSBwZGF0YS0+bGVmdF9tYXJnaW47Ci0JaW5mby0+dmFyLnJpZ2h0X21hcmdpbgkJPSBwZGF0YS0+cmlnaHRfbWFyZ2luOwotCWluZm8tPnZhci52c3luY19sZW4JCT0gcGRhdGEtPnZzeW5jX2xlbjsKLQlpbmZvLT52YXIudXBwZXJfbWFyZ2luCQk9IHBkYXRhLT51cHBlcl9tYXJnaW47Ci0JaW5mby0+dmFyLmxvd2VyX21hcmdpbgkJPSBwZGF0YS0+bG93ZXJfbWFyZ2luOwotCWluZm8tPnZhci5zeW5jCQkJPSBwZGF0YS0+c3luYzsKIAlpbmZvLT52YXIuZ3JheXNjYWxlCQk9IHBkYXRhLT5jbWFwX2dyZXlzY2FsZTsKIAlmYmktPmNtYXBfaW52ZXJzZQkJPSBwZGF0YS0+Y21hcF9pbnZlcnNlOwogCWZiaS0+Y21hcF9zdGF0aWMJCT0gcGRhdGEtPmNtYXBfc3RhdGljOwotCWZiaS0+cGNyCQkJPSBwZGF0YS0+cGNyOwogCWZiaS0+bHNjcjEJCQk9IHBkYXRhLT5sc2NyMTsKIAlmYmktPmRtYWNyCQkJPSBwZGF0YS0+ZG1hY3I7CiAJZmJpLT5wd21yCQkJPSBwZGF0YS0+cHdtcjsKIAlmYmktPmxjZF9wb3dlcgkJCT0gcGRhdGEtPmxjZF9wb3dlcjsKIAlmYmktPmJhY2tsaWdodF9wb3dlcgkJPSBwZGF0YS0+YmFja2xpZ2h0X3Bvd2VyOwotCWluZm8tPmZpeC5zbWVtX2xlbgkJPSBmYmktPm1heF94cmVzICogZmJpLT5tYXhfeXJlcyAqCi0JCQkJCSAgZmJpLT5tYXhfYnBwIC8gODsKKworCWZvciAoaSA9IDAsIG0gPSAmcGRhdGEtPm1vZGVbMF07IGkgPCBwZGF0YS0+bnVtX21vZGVzOyBpKyssIG0rKykKKwkJaW5mby0+Zml4LnNtZW1fbGVuID0gbWF4X3Qoc2l6ZV90LCBpbmZvLT5maXguc21lbV9sZW4sCisJCQkJbS0+bW9kZS54cmVzICogbS0+bW9kZS55cmVzICogbS0+YnBwIC8gOCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY0Miw5ICs2NzIsOSBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCXN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCi0JcHJpbnRrKCJpLk1YIEZyYW1lYnVmZmVyIGRyaXZlclxuIik7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgImkuTVggRnJhbWVidWZmZXIgZHJpdmVyXG4iKTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpCkBAIC02NjIsNiArNjkyLDkgQEAKIAogCWZiaSA9IGluZm8tPnBhcjsKIAorCWlmICghZmJfbW9kZSkKKwkJZmJfbW9kZSA9IHBkYXRhLT5tb2RlWzBdLm1vZGUubmFtZTsKKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCiAJcmV0ID0gaW14ZmJfaW5pdF9mYmluZm8ocGRldik7CkBAIC02ODQsNyArNzE3LDcgQEAKIAogCWZiaS0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoZmJpLT5yZWdzID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIkNhbm5vdCBtYXAgZnJhbWUgYnVmZmVyIHJlZ2lzdGVyc1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBtYXAgZnJhbWUgYnVmZmVyIHJlZ2lzdGVyc1xuIik7CiAJCWdvdG8gZmFpbGVkX2lvcmVtYXA7CiAJfQogCkBAIC03MTksNiArNzUyLDEzIEBACiAJCQlnb3RvIGZhaWxlZF9wbGF0Zm9ybV9pbml0OwogCX0KIAorCWZiaS0+bW9kZSA9IHBkYXRhLT5tb2RlOworCWZiaS0+bnVtX21vZGVzID0gcGRhdGEtPm51bV9tb2RlczsKKworCUlOSVRfTElTVF9IRUFEKCZpbmZvLT5tb2RlbGlzdCk7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fbW9kZXM7IGkrKykKKwkJZmJfYWRkX3ZpZGVvbW9kZSgmcGRhdGEtPm1vZGVbaV0ubW9kZSwgJmluZm8tPm1vZGVsaXN0KTsKKwogCS8qCiAJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb3VyIGNvbG91ciBiaXRmaWVsZAogCSAqIGRlc2NyaXB0b3JzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGlzZWQuCkBAIC03NTQsNyArNzk0LDcgQEAKIGZhaWxlZF9nZXRjbG9jazoKIAlpb3VubWFwKGZiaS0+cmVncyk7CiBmYWlsZWRfaW9yZW1hcDoKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIGZhaWxlZF9yZXE6CiAJa2ZyZWUoaW5mby0+cHNldWRvX3BhbGV0dGUpOwogZmFpbGVkX2luaXQ6CkBAIC03ODUsNyArODI1LDcgQEAKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCiAJaW91bm1hcChmYmktPnJlZ3MpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAljbGtfZGlzYWJsZShmYmktPmNsayk7CiAJY2xrX3B1dChmYmktPmNsayk7CiAKQEAgLTgxMSw4ICs4NTEsMzQgQEAKIAl9LAogfTsKIAorc3RhdGljIGludCBpbXhmYl9zZXR1cCh2b2lkKQoreworI2lmbmRlZiBNT0RVTEUKKwljaGFyICpvcHQsICpvcHRpb25zID0gTlVMTDsKKworCWlmIChmYl9nZXRfb3B0aW9ucygiaW14ZmIiLCAmb3B0aW9ucykpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKG9wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgeworCQlpZiAoISpvcHQpCisJCQljb250aW51ZTsKKwkJZWxzZQorCQkJZmJfbW9kZSA9IG9wdDsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKwogaW50IF9faW5pdCBpbXhmYl9pbml0KHZvaWQpCiB7CisJaW50IHJldCA9IGlteGZiX3NldHVwKCk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmlteGZiX2RyaXZlciwgaW14ZmJfcHJvYmUpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMKaW5kZXggYzBhZjYzOC4uOWMwMTQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wczNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHMzZmIuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9hYnNfYWRkci5oPgotI2luY2x1ZGUgPGFzbS9pb21tdS5oPgorI2luY2x1ZGUgPGFzbS9jZWxsLXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vbHYxY2FsbC5oPgogI2luY2x1ZGUgPGFzbS9wczNhdi5oPgogI2luY2x1ZGUgPGFzbS9wczNmYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jIGIvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCmluZGV4IDEwZGRhZDguLmNkYWE4NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKQEAgLTY2LDcgKzY2LDcgQEAKICAqCS0gRnJhbWVCdWZmZXIgbWVtb3J5IGlzIG5vdyBhbGxvY2F0ZWQgYXQgcnVuLXRpbWUgd2hlbiB0aGUKICAqCSAgZHJpdmVyIGlzIGluaXRpYWxpemVkLiAgICAKICAqCi0gKiAyMDAwLzA0LzEwOiBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiAyMDAwLzA0LzEwOiBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgogICoJLSBCaWcgY2xlYW51cCBmb3IgZHluYW1pYyBzZWxlY3Rpb24gb2YgbWFjaGluZSB0eXBlIGF0IHJ1biB0aW1lLgogICoKICAqIDIwMDAvMDcvMTk6IEphbWV5IEhpY2tzIDxqYW1leUBjcmwuZGVjLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKaW5kZXggY2E1YjQ2NC4uZTk4YmFmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby91dmVzYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKQEAgLTY3LDkgKzY3LDggQEAKICAqIGZpbmQgdGhlIGtlcm5lbCBwYXJ0IG9mIHRoZSB0YXNrIHN0cnVjdCwgY29weSB0aGUgcmVnaXN0ZXJzIGFuZAogICogdGhlIGJ1ZmZlciBjb250ZW50cyBhbmQgdGhlbiBjb21wbGV0ZSB0aGUgdGFzay4KICAqLwotc3RhdGljIHZvaWQgdXZlc2FmYl9jbl9jYWxsYmFjayh2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgdXZlc2FmYl9jbl9jYWxsYmFjayhzdHJ1Y3QgY25fbXNnICptc2cpCiB7Ci0Jc3RydWN0IGNuX21zZyAqbXNnID0gZGF0YTsKIAlzdHJ1Y3QgdXZlc2FmYl90YXNrICp1dGFzazsKIAlzdHJ1Y3QgdXZlc2FmYl9rdGFzayAqdGFzazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MV9uZXRsaW5rLmMgYi9kcml2ZXJzL3cxL3cxX25ldGxpbmsuYwppbmRleCBmZGY3Mjg1Li41MmNjYjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX25ldGxpbmsuYworKysgYi9kcml2ZXJzL3cxL3cxX25ldGxpbmsuYwpAQCAtMzA2LDkgKzMwNiw4IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgdm9pZCB3MV9jbl9jYWxsYmFjayh2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgdzFfY25fY2FsbGJhY2soc3RydWN0IGNuX21zZyAqbXNnKQogewotCXN0cnVjdCBjbl9tc2cgKm1zZyA9IGRhdGE7CiAJc3RydWN0IHcxX25ldGxpbmtfbXNnICptID0gKHN0cnVjdCB3MV9uZXRsaW5rX21zZyAqKShtc2cgKyAxKTsKIAlzdHJ1Y3QgdzFfbmV0bGlua19jbWQgKmNtZDsKIAlzdHJ1Y3QgdzFfc2xhdmUgKnNsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vTWFrZWZpbGUgYi9kcml2ZXJzL3hlbi9NYWtlZmlsZQppbmRleCBlYzJhMzliLi43YzI4NDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3hlbi9NYWtlZmlsZQpAQCAtMSw2ICsxLDkgQEAKIG9iai15CSs9IGdyYW50LXRhYmxlLm8gZmVhdHVyZXMubyBldmVudHMubyBtYW5hZ2Uubwogb2JqLXkJKz0geGVuYnVzLwogCitub3N0YWNrcCA6PSAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvcikKK0NGTEFHU19mZWF0dXJlcy5vCQkJOj0gJChub3N0YWNrcCkKKwogb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkrPSBjcHVfaG90cGx1Zy5vCiBvYmotJChDT05GSUdfWEVOX1hFTkNPTU0pCSs9IHhlbmNvbW0ubwogb2JqLSQoQ09ORklHX1hFTl9CQUxMT09OKQkrPSBiYWxsb29uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2V2ZW50cy5jIGIvZHJpdmVycy94ZW4vZXZlbnRzLmMKaW5kZXggYWJhZDcxYi4uMmY1NzI3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZXZlbnRzLmMKKysrIGIvZHJpdmVycy94ZW4vZXZlbnRzLmMKQEAgLTQ3LDEwICs0NywxMCBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfbWFwcGluZ191cGRhdGVfbG9jayk7CiAKIC8qIElSUSA8LT4gVklSUSBtYXBwaW5nLiAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgdmlycV90b19pcnFbTlJfVklSUVNdKSA9IHtbMCAuLi4gTlJfVklSUVMtMV0gPSAtMX07CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50IFtOUl9WSVJRU10sIHZpcnFfdG9faXJxKSA9IHtbMCAuLi4gTlJfVklSUVMtMV0gPSAtMX07CiAKIC8qIElSUSA8LT4gSVBJIG1hcHBpbmcgKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGlwaV90b19pcnFbWEVOX05SX0lQSVNdKSA9IHtbMCAuLi4gWEVOX05SX0lQSVMtMV0gPSAtMX07CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50IFtYRU5fTlJfSVBJU10sIGlwaV90b19pcnEpID0ge1swIC4uLiBYRU5fTlJfSVBJUy0xXSA9IC0xfTsKIAogLyogSW50ZXJydXB0IHR5cGVzLiAqLwogZW51bSB4ZW5faXJxX3R5cGUgewpAQCAtNjAyLDYgKzYwMiw4IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQsIHhlZF9uZXN0aW5nX2NvdW50KTsKKwogLyoKICAqIFNlYXJjaCB0aGUgQ1BVcyBwZW5kaW5nIGV2ZW50cyBiaXRtYXNrcy4gIEZvciBlYWNoIG9uZSBmb3VuZCwgbWFwCiAgKiB0aGUgZXZlbnQgbnVtYmVyIHRvIGFuIGlycSwgYW5kIGZlZWQgaXQgaW50byBkb19JUlEoKSBmb3IKQEAgLTYxNyw3ICs2MTksNiBAQAogCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKIAlzdHJ1Y3Qgc2hhcmVkX2luZm8gKnMgPSBIWVBFUlZJU09SX3NoYXJlZF9pbmZvOwogCXN0cnVjdCB2Y3B1X2luZm8gKnZjcHVfaW5mbyA9IF9fZ2V0X2NwdV92YXIoeGVuX3ZjcHUpOwotCXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCwgbmVzdGluZ19jb3VudCk7CiAgCXVuc2lnbmVkIGNvdW50OwogCiAJZXhpdF9pZGxlKCk7CkBAIC02MjgsNyArNjI5LDcgQEAKIAogCQl2Y3B1X2luZm8tPmV2dGNobl91cGNhbGxfcGVuZGluZyA9IDA7CiAKLQkJaWYgKF9fZ2V0X2NwdV92YXIobmVzdGluZ19jb3VudCkrKykKKwkJaWYgKF9fZ2V0X2NwdV92YXIoeGVkX25lc3RpbmdfY291bnQpKyspCiAJCQlnb3RvIG91dDsKIAogI2lmbmRlZiBDT05GSUdfWDg2IC8qIE5vIG5lZWQgZm9yIGEgYmFycmllciAtLSBYQ0hHIGlzIGEgYmFycmllciBvbiB4ODYuICovCkBAIC02NTMsOCArNjU0LDggQEAKIAogCQlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKLQkJY291bnQgPSBfX2dldF9jcHVfdmFyKG5lc3RpbmdfY291bnQpOwotCQlfX2dldF9jcHVfdmFyKG5lc3RpbmdfY291bnQpID0gMDsKKwkJY291bnQgPSBfX2dldF9jcHVfdmFyKHhlZF9uZXN0aW5nX2NvdW50KTsKKwkJX19nZXRfY3B1X3Zhcih4ZWRfbmVzdGluZ19jb3VudCkgPSAwOwogCX0gd2hpbGUoY291bnQgIT0gMSk7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL01ha2VmaWxlIGIvZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggNjIxZGU4ZS4uODc4MzI5YyAxMDA2NDQKLS0tIGEvZmlybXdhcmUvTWFrZWZpbGUKKysrIGIvZmlybXdhcmUvTWFrZWZpbGUKQEAgLTMyLDE2ICszMiwyMCBAQAogCQkJCQkgYWRhcHRlYy9zdGFyZmlyZV90eC5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfQVRBUklfRFNQNTZLKSArPSBkc3A1NmsvYm9vdHN0cmFwLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19BVE1fQU1CQVNTQURPUikgKz0gYXRtc2FyMTEuZncKLWZ3LXNoaXBwZWQtJChDT05GSUdfQk5YMlgpICs9IGJueDJ4LWUxLTQuOC41My4wLmZ3IGJueDJ4LWUxaC00LjguNTMuMC5mdwotZnctc2hpcHBlZC0kKENPTkZJR19CTlgyKSArPSBibngyL2JueDItbWlwcy0wOS00LjYuMTcuZncgXAotCQkJICAgICBibngyL2JueDItcnYycC0wOS00LjYuMTUuZncgXAotCQkJICAgICBibngyL2JueDItbWlwcy0wNi00LjYuMTYuZncgXAotCQkJICAgICBibngyL2JueDItcnYycC0wNi00LjYuMTYuZncKK2Z3LXNoaXBwZWQtJChDT05GSUdfQk5YMlgpICs9IGJueDJ4LWUxLTUuMC4yMS4wLmZ3IGJueDJ4LWUxaC01LjAuMjEuMC5mdworZnctc2hpcHBlZC0kKENPTkZJR19CTlgyKSArPSBibngyL2JueDItbWlwcy0wOS01LjAuMC5qMy5mdyBcCisJCQkgICAgIGJueDIvYm54Mi1ydjJwLTA5LTUuMC4wLmozLmZ3IFwKKwkJCSAgICAgYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMy5mdyBcCisJCQkgICAgIGJueDIvYm54Mi1taXBzLTA2LTUuMC4wLmozLmZ3IFwKKwkJCSAgICAgYm54Mi9ibngyLXJ2MnAtMDYtNS4wLjAuajMuZncKIGZ3LXNoaXBwZWQtJChDT05GSUdfQ0FTU0lOSSkgKz0gc3VuL2Nhc3NpbmkuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0NPTVBVVE9ORSkgKz0gaW50ZWxsaXBvcnQyLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19DSEVMU0lPX1QzKSArPSBjeGdiMy90M2JfcHNyYW0tMS4xLjAuYmluIFwKIAkJCQkgICBjeGdiMy90M2NfcHNyYW0tMS4xLjAuYmluIFwKLQkJCQkgICBjeGdiMy90M2Z3LTcuNC4wLmJpbgorCQkJCSAgIGN4Z2IzL3QzZnctNy40LjAuYmluIFwKKwkJCQkgICBjeGdiMy9hZWwyMDA1X29wdF9lZGMuYmluIFwKKwkJCQkgICBjeGdiMy9hZWwyMDA1X3R3eF9lZGMuYmluIFwKKwkJCQkgICBjeGdiMy9hZWwyMDIwX3R3eF9lZGMuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0RWQl9BVjcxMTApICs9IGF2NzExMC9ib290Y29kZS5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfRFZCX1RUVVNCX0JVREdFVCkgKz0gdHR1c2ItYnVkZ2V0L2RzcGJvb3Rjb2RlLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19FMTAwKSArPSBlMTAwL2QxMDFtX3Vjb2RlLmJpbiBlMTAwL2QxMDFzX3Vjb2RlLmJpbiBcCmRpZmYgLS1naXQgYS9maXJtd2FyZS9XSEVOQ0UgYi9maXJtd2FyZS9XSEVOQ0UKaW5kZXggMGY1NjQ5YS4uZDllM2E5NCAxMDA2NDQKLS0tIGEvZmlybXdhcmUvV0hFTkNFCisrKyBiL2Zpcm13YXJlL1dIRU5DRQpAQCAtNDE4LDYgKzQxOCwyMyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitEcml2ZXI6IGN4Z2IzIC0gQ2hlbHNpbyBUZXJtaW5hdG9yIDMgMUcvMTBHIEV0aGVybmV0IGFkYXB0ZXIKKworRmlsZTogY3hnYjMvYWVsMjAwNV9vcHRfZWRjLmJpbi5paGV4CitGaWxlOiBjeGdiMy9hZWwyMDA1X3R3eF9lZGMuYmluLmloZXgKK0ZpbGU6IGN4Z2IzL2FlbDIwMjBfdHd4X2VkYy5iaW4uaWhleAorCitMaWNlbmNlOgorICoJQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgTmV0TG9naWMgTWljcm9zeXN0ZW1zLCBJbmMuCisgKgorICoJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlCisgKglkYXRhIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodAorICoJbm90aWNlIGlzIGFjY29tcGFueWluZyBpdC4KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogRHJpdmVyOiBlMTAwIC0tIEludGVsIFBSTy8xMDAgRXRoZXJuZXQgTklDCiAKIEZpbGU6IGUxMDAvZDEwMW1fdWNvZGUuYmluCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wNi00LjYuMTYuZncuaWhleCBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA2LTQuNi4xNi5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGYxMGI1Li4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA2LTQuNi4xNi5mdy5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsNTgwNSArMCwwIEBACi06MTAwMDAwMDAwODAwMDBGODA4MDAwMDAwMDAwMDREQTQwMDAwMDBDODJGCi06MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNERBNEU3Ci06MTAwMDIwMDAwMDAwMDAxNDAwMDA0RTZDMDgwMDAwODAwODAwMDAwMDcyCi06MTAwMDMwMDAwMDAwNTZDQzAwMDA0RTgwMDgwMDU4MjAwMDAwMDA4NENDCi06MTAwMDQwMDAwMDAwQTU0QzA4MDA1NkNDMDAwMDAxMzQwMDAwQTVEMEVCCi06MTAwMDUwMDAwODAwMzFEODA4MDAwMDAwMDAwMDcwREMwMDAwQTcwNDkwCi06MTAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNzBEQzNDCi06MTAwMDcwMDAwMDAwMDAyNDAwMDExN0UwMDgwMDA0ODgwODAwMDQwMEM0Ci06MTAwMDgwMDAwMDAwMTc1QzAwMDExODA0MDAwMDAwMDAwMDAwMDAwMEUwCi06MTAwMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTAwMEEwMDAwODAwMDA5ODA4MDAwMDAwMDAwMDNBNzQwMDAxMkY2MDZBCi06MTAwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MDgwMEMwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLTowODAwQzgwMDBBMDAwMDNFMDAwMDAwMDBFOAotOjEwMDBEMDAwMDAwMDAwMDAwMDAwMDAwRDYzNkY2RDM0MkUzNjJFMzFERAotOjEwMDBFMDAwMzYwMDAwMDAwNDA2MTAwMjAwMDAwMDAwMDAwMDAwMDNCQgotOjEwMDBGMDAwMDAwMDAwMTQwMDAwMDAzMjAwMDAwMDAzMDAwMDAwMDBCNwotOjEwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwMDExMDAwMDAwMDAwMTAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDE0RAotOjEwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNwotOjEwMDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwMDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwMDE2MDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDA1RgotOjEwMDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwMDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwMDFDMDAwMDAwMDAwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwRgotOjEwMDFEMDAwMDAwMDAwMEQzQzAyMDgwMDI0NDI0REUwM0MwMzA4MDBGMgotOjEwMDFFMDAwMjQ2MzRFRDRBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQ1QwotOjEwMDFGMDAwMjQ0MjAwMDQzQzFEMDgwMDM3QkQ3RkZDMDNBMEYwMjExMQotOjEwMDIwMDAwM0MxMDA4MDAyNjEwMDBGODNDMUMwODAwMjc5QzRERTAxQwotOjEwMDIxMDAwMEUwMDAyQUEwMDAwMDAwMDAwMDAwMDBEM0MwMzYwMTA2OAotOjEwMDIyMDAwOEM2NDUwMDAyNDAyRkY3RjNDMUE4MDAwMDA4MjIwMjQ0RQotOjEwMDIzMDAwMzQ4NDM4MEMyNDAyMDAzN0FDNjQ1MDAwQUY0MjAwMDgwQwotOjEwMDI0MDAwMjQwMjBDODBBRjQyMDAyNDNDMUI4MDA4M0MwNjA4MDBCRQotOjEwMDI1MDAwMjRDNjA3OUMzQzAyMDgwMDI0NDI0RTE4MjQwNDAwMUJCQwotOjEwMDI2MDAwMjQ4NEZGRkZBQzQ2MDAwMDA0ODFGRkZEMjQ0MjAwMDQwQgotOjEwMDI3MDAwM0MwMjA4MDAyNDQyMDM4MDNDMDEwODAwQUMyMjRFMjBDRQotOjEwMDI4MDAwM0MwMjA4MDAyNDQyMDY4MDNDMDEwODAwQUMyMjRFMjRCNwotOjEwMDI5MDAwM0MwMjA4MDAyNDQyMEQ4MDNDMDEwODAwQUMyMjRFNjA2NAotOjEwMDJBMDAwM0MwMjA4MDAyNDQyMEExMDNDMDMwODAwMjQ2MzA5MDhBOQotOjEwMDJCMDAwM0MwNDA4MDAyNDg0MDk0NDNDMDUwODAwMjRBNTNDMjQ4RgotOjEwMDJDMDAwM0MwMTA4MDBBQzIyNEU2ODNDMDIwODAwMjQ0MjA1NzA0NAotOjEwMDJEMDAwM0MwMTA4MDBBQzI2NEU2NDNDMDEwODAwQUMyNTRFNzQ3RAotOjEwMDJFMDAwM0MwMTA4MDBBQzIzNEU3QzNDMDEwODAwQUMyMjRFODA0RgotOjEwMDJGMDAwM0MwMTA4MDBBQzI0NEU4NDNDMDEwODAwQUMyMzRFMUM5OQotOjEwMDMwMDAwM0MwMTA4MDBBQzIwNEUyODNDMDEwODAwQUMyMDRFMkNEQgotOjEwMDMxMDAwM0MwMTA4MDBBQzIwNEUzMDNDMDEwODAwQUMyMDRFMzRCQgotOjEwMDMyMDAwM0MwMTA4MDBBQzIwNEUzODNDMDEwODAwQUMyMDRFM0M5QgotOjEwMDMzMDAwM0MwMTA4MDBBQzIwNEU0MDNDMDEwODAwQUMyNDRFNDQ3NwotOjEwMDM0MDAwM0MwMTA4MDBBQzIwNEU0ODNDMDEwODAwQUMyMDRFNEM1QgotOjEwMDM1MDAwM0MwMTA4MDBBQzIwNEU1MDNDMDEwODAwQUMyMDRFNTQzQgotOjEwMDM2MDAwM0MwMTA4MDBBQzIwNEU1ODNDMDEwODAwQUMyNjRFNUMxNQotOjEwMDM3MDAwM0MwMTA4MDBBQzIwNEU2QzNDMDEwODAwQUMyNTRFNzBERQotOjEwMDM4MDAwM0MwMTA4MDBBQzIzNEU3ODBBMDAwNkY0MDAwMDAwMDA4RgotOjEwMDM5MDAwM0MwMzA4MDA4QzYzMDAyMDhGODIwMDA4MTA0MzAwMDM5OAotOjEwMDNBMDAwMDAwMDAwMDAwQTAwMDUyQ0FGODMwMDA4MDNFMDAwMDhFRAotOjEwMDNCMDAwMDAwMDAwMDAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQ4MQotOjEwMDNDMDAwMjc1MDAxMDA5MjAyMDAwOTEwNDAwMDFBMjQwMzAwMDE4NgotOjEwMDNEMDAwM0MwMjA4MDA4QzQyMDAyMDEwNDAwMDE2MDAwMDE4MjE0QQotOjEwMDNFMDAwMEUwMDA1NjQwMDAwMDAwMDk2MDMwMDA4M0MwNjA4MDBBQgotOjEwMDNGMDAwOTRDNjRFOTY4RTA0MDAxODhGODIwMDIwOTYwNTAwMEMzRAotOjEwMDQwMDAwMDAwMzFDMDAwMDY2MTgyNUFDNDQwMDAwQUM0NTAwMDQ0NQotOjEwMDQxMDAwMjQwNDAwMDFBQzQwMDAwOEFDNDAwMDBDQUM0MDAwMTBDQgotOjEwMDQyMDAwQUM0MDAwMTRBQzQwMDAxODBFMDAwNTg5QUM0MzAwMUMyMQotOjEwMDQzMDAwMDAwMDE4MjE4RkJGMDAxNDhGQjAwMDEwMDA2MDEwMjE0MQotOjEwMDQ0MDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkU4QUZCRjAwMTA3QwotOjEwMDQ1MDAwOTc0MjAxMDgzMDQzNzAwMDI0MDIyMDAwMTA2MjAwMEExNQotOjEwMDQ2MDAwMjg2NDIwMDE1NDgwMDAxMjhGQkYwMDEwMjQwMjQwMDAzNQotOjEwMDQ3MDAwMTA2MjAwMDgyNDAyNjAwMDEwNjIwMDBBOEZCRjAwMTBBMgotOjEwMDQ4MDAwMEEwMDAwRkIwMDAwMTAyMThGQkYwMDEwMEEwMDAwQkIxMwotOjEwMDQ5MDAwMjdCRDAwMTgwRTAwMDNGNjAwMDAwMDAwMEEwMDAwRkE1NQotOjEwMDRBMDAwOEZCRjAwMTAwRTAwMEZCNjAwMDAwMDAwOEZCRjAwMTBCRAotOjEwMDRCMDAwMDAwMDEwMjEwM0UwMDAwODI3QkQwMDE4M0MwMjA4MDBERQotOjEwMDRDMDAwOEM0MjAwMjAyN0JERkZFODEwNDAwMDI3QUZCRjAwMTA3RQotOjEwMDREMDAwMEUwMDA1NjQwMDAwMDAwMDk3NDIwMTA4OTc0MzAxMENEQwotOjEwMDRFMDAwOEY4NTAwMjAzMDQyMDAzRTMwNjNGRkZGMDAwMjE0MDA4MQotOjEwMDRGMDAwMDA0MzEwMjVBQ0EyMDAwMDhGNDIwMTAwM0MwNjA4MDAxQQotOjEwMDUwMDAwOTRDNjRFOTY4RkJGMDAxMEFDQTIwMDA0OTc0MzAxMTYwQwotOjEwMDUxMDAwOTc0NDAxMEUzQzAyMjAwMDAwMDMxQzAwMzA4NEZGRkZDMgotOjEwMDUyMDAwMDA2NDE4MjVBQ0EzMDAwODAwQzIzMDI1OTc0MjAxMTBEMgotOjEwMDUzMDAwOTc0MzAxMTIyNDA0MDAwMTAwMDIxNDAwMzA2M0ZGRkZGRQotOjEwMDU0MDAwMDA0MzEwMjVBQ0EyMDAwQzk3NDIwMTE0MjdCRDAwMThFRgotOjEwMDU1MDAwMzA0MkZGRkZBQ0EyMDAxMEFDQTAwMDE0QUNBMDAwMTgwOQotOjEwMDU2MDAwMEEwMDA1ODlBQ0E2MDAxQzhGQkYwMDEwMDNFMDAwMDgzQwotOjEwMDU3MDAwMjdCRDAwMTgzQzAyMDgwMDhDNDIwMDIwMjdCREZGRTg4MAotOjEwMDU4MDAwMTA0MDAwMkFBRkJGMDAxMDBFMDAwNTY0MDAwMDAwMDBGQwotOjEwMDU5MDAwOTc0MjAxMDg5NzQzMDEwQzhGODUwMDIwMzA0MjAwM0VBRQotOjEwMDVBMDAwMzA2M0ZGRkYwMDAyMTQwMDAwNDMxMDI1QUNBMjAwMDBERQotOjEwMDVCMDAwOEY0MjAxMDAzQzA2MDgwMDk0QzY0RTk2OEZCRjAwMTA4MwotOjEwMDVDMDAwQUNBMjAwMDQ5NzQzMDExNjk3NDQwMTBFM0MwMjIwMDBBMAotOjEwMDVEMDAwMDAwMzFDMDAzMDg0RkZGRjAwNjQxODI1QUNBMzAwMDg1MgotOjEwMDVFMDAwMDBDMjMwMjU5NzQyMDExMDk3NDMwMTEyMjQwNDAwMDFGNAotOjEwMDVGMDAwMDAwMjE0MDAzMDYzRkZGRjAwNDMxMDI1QUNBMjAwMEM4MgotOjEwMDYwMDAwOTc0MjAxMTQyN0JEMDAxODMwNDJGRkZGQUNBMjAwMTAzMgotOjEwMDYxMDAwOEY0MjAxMThBQ0EyMDAxNDkzNDIwMTBCMzA0MjAwRkYzQwotOjEwMDYyMDAwQUNBMjAwMTgwQTAwMDU4OUFDQTYwMDFDOEZCRjAwMTAwMAotOjEwMDYzMDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkUwQUZCMDAwMTBBMQotOjEwMDY0MDAwQUZCRjAwMThBRkIxMDAxNDI3NTAwMTAwOTIwMzAwMEI5OAotOjEwMDY1MDAwMjQwMjAwMUE5NjExMDAwODE0NjIwMDM1MDAwMDIwMjFCRgotOjEwMDY2MDAwMzIyMjAwMDExMDQwMDAwOTAwMDAwMDAwOEUwMjAwMDA0QwotOjEwMDY3MDAwOTYwMzAwMTQwMDAyMTFDMjAwMDIxMDQwMDA1QTEwMjExQgotOjEwMDY4MDAwQTQ0MzAwODAwQTAwMDE3OTMyMjIwMDAyMEUwMDAxMkJFRgotOjEwMDY5MDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMDQwMjQ0MjAwMDE5RgotOjEwMDZBMDAwM0MwMTA4MDBBQzIyMDA0MDMyMjIwMDAyMDAwMjIwMkI1NAotOjEwMDZCMDAwM0MwMjA4MDA4QzQyMDA0NDMyMjMwMDA0MjQ0MjAwMDEyMgotOjEwMDZDMDAwM0MwMTA4MDBBQzIyMDA0NDEwNjAwMDFBOEZCRjAwMThFMwotOjEwMDZEMDAwOEY0MjAyQjgwNDQxMDAwODI0MDQwMDAxM0MwMjA4MDBEMwotOjEwMDZFMDAwOEM0MjAwNjAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjAwMgotOjEwMDZGMDAwMEEwMDAxOUM4RkIxMDAxNDhFMDIwMDIwOTYwMzAwMTZBMAotOjEwMDcwMDAwMDAwMDIwMjFBRjQyMDI4MDhFMDIwMDA0QTc0MzAyODQzMQotOjEwMDcxMDAwQUY0MjAyODgzQzAyMTAwMEFGNDIwMkI4M0MwMjA4MDAxRgotOjEwMDcyMDAwOEM0MjAwNUMyNDQyMDAwMTNDMDEwODAwQUMyMjAwNUNDOQotOjEwMDczMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjFGRgotOjEwMDc0MDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkUwQUZCMDAwMTA4OAotOjEwMDc1MDAwQUZCRjAwMThBRkIxMDAxNDI3NTAwMTAwOTIwMzAwMEI4NwotOjEwMDc2MDAwMjQwMjAwMDM5NjExMDAwODE0NjIwMDM1MDAwMDIwMjFDNQotOjEwMDc3MDAwMzIyMjAwMDExMDQwMDAwOTAwMDAwMDAwOEUwMjAwMDAzQgotOjEwMDc4MDAwOTYwMzAwMTQwMDAyMTFDMjAwMDIxMDQwMDA1QTEwMjEwQQotOjEwMDc5MDAwQTQ0MzAwODAwQTAwMDFCRDMyMjIwMDAyMEUwMDAwRkRDOQotOjEwMDdBMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMDQwMjQ0MjAwMDE4RQotOjEwMDdCMDAwM0MwMTA4MDBBQzIyMDA0MDMyMjIwMDAyMDAwMjIwMkI0MwotOjEwMDdDMDAwM0MwMjA4MDA4QzQyMDA0NDMyMjMwMDA0MjQ0MjAwMDExMQotOjEwMDdEMDAwM0MwMTA4MDBBQzIyMDA0NDEwNjAwMDFBOEZCRjAwMThEMgotOjEwMDdFMDAwOEY0MjAyQjgwNDQxMDAwODI0MDQwMDAxM0MwMjA4MDBDMgotOjEwMDdGMDAwOEM0MjAwNjAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjBGMQotOjEwMDgwMDAwMEEwMDAxRTA4RkIxMDAxNDhFMDIwMDIwOTYwMzAwMTY0QQotOjEwMDgxMDAwMDAwMDIwMjFBRjQyMDI4MDhFMDIwMDA0QTc0MzAyODQyMAotOjEwMDgyMDAwQUY0MjAyODgzQzAyMTAwMEFGNDIwMkI4M0MwMjA4MDAwRQotOjEwMDgzMDAwOEM0MjAwNUMyNDQyMDAwMTNDMDEwODAwQUMyMjAwNUNCOAotOjEwMDg0MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjFFRQotOjEwMDg1MDAwMDNFMDAwMDgyN0JEMDAyMDkzNjIwMDAwMDNFMDAwMDhDOQotOjEwMDg2MDAwQUY4MDAwMDQwM0UwMDAwODAwMDAxMDIxMjdCREZGRTg2RQotOjEwMDg3MDAwQUZCRjAwMTRBRkIwMDAxMDhGNDIwMTAwQUY0MjAwMjBBNAotOjEwMDg4MDAwOEY0MjAxMDRBRjQyMDBBODkzNTAwMTBCMEUwMDAxRTQxNwotOjEwMDg5MDAwMzIxMDAwRkYzQzAyMDgwMDI0NDI0RTE4MDAxMDE4ODA1RAotOjEwMDhBMDAwMkUxMDAwMUMxNjAwMDAwNDAwNjIxMDIxMEUwMDAxRTc0QgotOjEwMDhCMDAwMEEwMDAxRkYwMDAwMDAwMDhDNDIwMDAwMDA0MEY4MDkxRgotOjEwMDhDMDAwMDAwMDAwMDAxMDQwMDAwNTNDMDI0MDAwOEY0MzAxMDQ3RQotOjEwMDhEMDAwM0MwMjYwMjBBQzQzMDAxNDNDMDI0MDAwQUY0MjAxMzhBRgotOjEwMDhFMDAwM0MwMjA4MDA4QzQyMDAzNDhGQkYwMDE0OEZCMDAwMTAwRgotOjEwMDhGMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDM0MDNFMDAwMDg1RgotOjEwMDkwMDAwMjdCRDAwMTgyN0JERkZFOEFGQkYwMDEwOEY0MjAxNDA5MAotOjEwMDkxMDAwMEUwMDAxRTRBRjQyMDAyMDBFMDAwMzgwMDAwMDAwMDA0MgotOjEwMDkyMDAwM0MwMjQwMDBBRjQyMDE3ODNDMDMwODAwMjQ2MzAwMzhEOQotOjEwMDkzMDAwOEM2MjAwMDA4RkJGMDAxMDI3QkQwMDE4MjQ0MjAwMDEwOAotOjEwMDk0MDAwMDNFMDAwMDhBQzYyMDAwMDI3QkRGRkU4QUZCRjAwMTA2NQotOjEwMDk1MDAwOEY0MjAxODAwRTAwMDFFNEFGNDIwMDIwOEY0MzAxODBFRQotOjEwMDk2MDAwMjQwMjBGMDAxNDYyMDAwNTAwMDAwMDAwOEY0MjAxODg3RAotOjEwMDk3MDAwQTc0MjAwOUMwQTAwMDIzOTNDMDI0MDAwOTM2MjAwMDAzQQotOjEwMDk4MDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDA4M0MwMjQwMDBBMgotOjEwMDk5MDAwMEUwMDAzNjQwMDAwMDAwMDE0NDAwMDA0M0MwMjQwMDAwQwotOjEwMDlBMDAwMEUwMDBFNDIwMDAwMDAwMDNDMDI0MDAwQUY0MjAxQjhDMQotOjEwMDlCMDAwM0MwMjA4MDA4QzQyMDAzQzhGQkYwMDEwMjQ0MjAwMDEyMgotOjEwMDlDMDAwM0MwMTA4MDBBQzIyMDAzQzAzRTAwMDA4MjdCRDAwMThGMQotOjEwMDlEMDAwMDNFMDAwMDgwMDAwMTAyMThGNDMwMTA0OEY4MjAwMTAwMwotOjEwMDlFMDAwMTA0MzAwMDgwMDAwMDAwMDNDMDIwODAwOEM0MjAwODQxNAotOjEwMDlGMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDg0OEY0MjAxMDQyMwotOjEwMEEwMDAwQUY4MjAwMTAwM0UwMDAwODAwMDAwMDAwMjdCREZGRThFRgotOjEwMEExMDAwQUZCRjAwMTAyNzQ0MDEwMDk0ODIwMDA4MzA0MzAwMDI1OQotOjEwMEEyMDAwMzA0MjAwMDQxMDQwMDAxQjAwMDAwMDAwOEY0MjAyQjg1QQotOjEwMEEzMDAwMDQ0MTAwMDgyNDA1MDAwMTNDMDIwODAwOEM0MjAwNjBDQgotOjEwMEE0MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDYwMEEwMDAyODEzRgotOjEwMEE1MDAwOEZCRjAwMTA4QzgyMDAyMDk0ODMwMDE2MDAwMDI4MjE5NAotOjEwMEE2MDAwQUY0MjAyODA4QzgyMDAwNEE3NDMwMjg0QUY0MjAyODgxNgotOjEwMEE3MDAwM0MwMjEwMDBBRjQyMDJCODNDMDIwODAwOEM0MjAwNUMwRAotOjEwMEE4MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDVDMEEwMDAyODEwMwotOjEwMEE5MDAwOEZCRjAwMTAxMDYwMDAwODI0MDUwMDAxM0MwMjA4MDAxMAotOjEwMEFBMDAwOEM0MjAwODQyNDQyMDAwMTNDMDEwODAwQUMyMjAwODRGNgotOjEwMEFCMDAwMEEwMDAyODE4RkJGMDAxMDhGNDQwMTAwMEUwMDAyNDQyMwotOjEwMEFDMDAwMDAwMDAwMDAwMDAwMjgyMThGQkYwMDEwMDBBMDEwMjFBRQotOjEwMEFEMDAwMDNFMDAwMDgyN0JEMDAxODNDMDIwODAwOEM0MjAwODg5MwotOjEwMEFFMDAwMjc0MzAxMDA5NDY1MDAwQzI0NDIwMDAxM0MwMTA4MDBFQQotOjEwMEFGMDAwQUMyMjAwODg4QzY0MDAxODAzNDUxMDIxOTA0NTQwMDAwQQotOjEwMEIwMDAwQUY0NDAwMzg4QzYyMDAxQzI0MDNGRkY4MDAwNTJFMDA1RgotOjEwMEIxMDAwMDA0MzEwMjQzNDQyMDAwNEFGNDIwMDNDM0MwMjAwMDU3NAotOjEwMEIyMDAwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAotOjEwMEIzMDAwQUY0NTA0MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQotOjEwMEI0MDAwM0MwMjAwMDYzNDQyMDAwMUFGNDIwMDMwMDAwMDAwMDBDOQotOjEwMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDhGNDIwMDAwMzA0MjAwMTA0MgotOjEwMEI2MDAwMTA0MEZGRkQwMDAwMTAyMTAzRTAwMDA4MDAwMDAwMDAxRAotOjEwMEI3MDAwMjdCREZGRTBBRkJGMDAxOEFGQjEwMDE0MEUwMDAwNTU1NQotOjEwMEI4MDAwQUZCMDAwMTAzQzAyODAwMDM0NDIwMDcwOEM0MjAwMDA4NAotOjEwMEI5MDAwQUY4MjAwMTQwRTAwMDBCMjAwMDAwMDAwM0MwMjgwMDA5MgotOjEwMEJBMDAwMzQ0NjAwNzAzQzAzMDgwMDhDNjMwMEEwM0MwMjA4MDAzRgotOjEwMEJCMDAwOEM0MjAwQTQxMDQzMDAwNDhGODQwMDE0M0MwMTA4MDAwMAotOjEwMEJDMDAwQUMyMzAwQTRBNzQzMDA5RThDQ0EwMDAwM0MwMzA4MDA4RAotOjEwMEJEMDAwOEM2MzAwQkMzQzAyMDgwMDhDNDIwMEI4MDE0NDIwMjMxNgotOjEwMEJFMDAwMDA2NDE4MjEwMDAwNDAyMTAwNjQyMDJCMDA0ODEwMjFERgotOjEwMEJGMDAwMDA0NDEwMjEzQzAxMDgwMEFDMjMwMEJDM0MwMTA4MDA2QgotOjEwMEMwMDAwQUMyMjAwQjg4RjUxMDAwMDMyMjIwMDA3MTA0MEZGRTFGMwotOjEwMEMxMDAwQUY4QTAwMTQ4Q0M2MDAwMDNDMDUwODAwOENBNTAwQkNGRgotOjEwMEMyMDAwM0MwNDA4MDA4Qzg0MDBCODAwQ0EzMDIzMDBBNjI4MjFBOAotOjEwMEMzMDAwMDAwMDEwMjEwMEE2MzAyQjAwODIyMDIxMDA4NjIwMjFGOAotOjEwMEM0MDAwMzIyNzAwMDEzQzAxMDgwMEFDMjUwMEJDM0MwMTA4MDAzMwotOjEwMEM1MDAwQUMyNDAwQjgxMEUwMDAyMTMyMjIwMDAyOEY0MjAxMDBEMwotOjEwMEM2MDAwQUY0MjAwMjA4RjQyMDEwNEFGNDIwMEE4OTM0MjAxMEIyMwotOjEwMEM3MDAwMEUwMDAxRTQzMDUwMDBGRjJFMDIwMDFDNTQ0MDAwMDQxRQotOjEwMEM4MDAwMDAxMDEwODAwRTAwMDFFNzBBMDAwMkY4MDAwMDAwMDBDQQotOjEwMEM5MDAwM0MwMzA4MDAyNDYzNEUxODAwNDMxMDIxOEM0MjAwMDBERQotOjEwMENBMDAwMDA0MEY4MDkwMDAwMDAwMDEwNDAwMDA1M0MwMjQwMDAzMAotOjEwMENCMDAwOEY0MzAxMDQzQzAyNjAyMEFDNDMwMDE0M0MwMjQwMDAxRQotOjEwMENDMDAwQUY0MjAxMzgzQzAyMDgwMDhDNDIwMDM0MjQ0MjAwMDE0QgotOjEwMENEMDAwM0MwMTA4MDBBQzIyMDAzNDMyMjIwMDAyMTA0MDAwMEUxOQotOjEwMENFMDAwMzIyMjAwMDQ4RjQyMDE0MDBFMDAwMUU0QUY0MjAwMjA5NgotOjEwMENGMDAwMEUwMDAzODAwMDAwMDAwMDNDMDI0MDAwQUY0MjAxNzg3QgotOjEwMEQwMDAwM0MwMjA4MDA4QzQyMDAzODI0NDIwMDAxM0MwMTA4MDBFQgotOjEwMEQxMDAwQUMyMjAwMzgzMjIyMDAwNDEwNDBGRjlCM0MwMjgwMDBDRAotOjEwMEQyMDAwOEY0MjAxODAwRTAwMDFFNEFGNDIwMDIwOEY0MzAxODAxQQotOjEwMEQzMDAwMjQwMjBGMDAxNDYyMDAwNTAwMDAwMDAwOEY0MjAxODhBOQotOjEwMEQ0MDAwQTc0MjAwOUMwQTAwMDMyRDNDMDI0MDAwOTM2MjAwMDA3MQotOjEwMEQ1MDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDA4M0MwMjQwMDBDRQotOjEwMEQ2MDAwMEUwMDAzNjQwMDAwMDAwMDU0NDAwMDA0M0MwMjQwMDBGOAotOjEwMEQ3MDAwMEUwMDBFNDIwMDAwMDAwMDNDMDI0MDAwQUY0MjAxQjhFRAotOjEwMEQ4MDAwM0MwMjA4MDA4QzQyMDAzQzI0NDIwMDAxM0MwMTA4MDA2NwotOjEwMEQ5MDAwQUMyMjAwM0MwQTAwMDJCMDNDMDI4MDAwM0MwMjkwMDAwMQotOjEwMERBMDAwMzQ0MjAwMDEwMDgyMjAyNUFGNDQwMDIwOEY0MjAwMjAwMQotOjEwMERCMDAwMDQ0MEZGRkUwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAwNwotOjEwMERDMDAwM0MwMjgwMDAzNDQyMDAwMTAwODIyMDI1MDNFMDAwMDgzQwotOjEwMEREMDAwQUY0NDAwMjAyN0JERkZFMEFGQjEwMDE0QUZCMDAwMTA1QQotOjEwMERFMDAwMDA4MDg4MjFBRkJGMDAxODBFMDAwMzM1MzBCMDAwRkYyRgotOjEwMERGMDAwOTM2MjAwN0QwMjIwMjAyMTAyMDI4MDI1QTM3MDAwN0RFNQotOjEwMEUwMDAwOEY3MDAwNzQzQzAyODAwMDBFMDAwMzNFMDIwMjgwMjRCQQotOjEwMEUxMDAwMTYwMDAwMDk4RkJGMDAxODhGNDIwMUY4MDQ0MEZGRkU0MgotOjEwMEUyMDAwMjQwMjAwMDJBRjUxMDFDMEEzNDIwMUM0M0MwMjEwMDBFMQotOjEwMEUzMDAwQUY0MjAxRjg4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBCRgotOjEwMEU0MDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkQwMDAwMDEwMjFDRgotOjEwMEU1MDAwMDNFMDAwMDgyN0JEMDAzMDI3QkRGRkU4QUZCRjAwMTA0QQotOjEwMEU2MDAwOTc0MjAxODQzMDQyMDIwMDEwNDAwMDA1MDAwMDIwMjExQQotOjEwMEU3MDAwMEUwMDEwNzkwMDAwMDAwMDBBMDAwMzc4MjQwNDAwMDEyRAotOjEwMEU4MDAwOEY0MjAxODgwNDQwMDAwOThGQkYwMDEwOEY0MjAxODgwMwotOjEwMEU5MDAwM0MwM0ZGMDAwMDQzMTAyNDNDMDMwNDAwMTQ0MzAwMDMwMAotOjEwMEVBMDAwMjQwNDAwMDE5MzYyMDAzRThGQkYwMDEwMDA4MDEwMjFENwotOjEwMEVCMDAwMDNFMDAwMDgyN0JEMDAxOEEzNjAwMDIyOEY0NDAxNDAxMgotOjEwMEVDMDAwMEEwMDAzNDMyNDA1MDAwMTI3QkRGRkU4QUZCRjAwMTQ1QgotOjEwMEVEMDAwQUZCMDAwMTA5MzYyMDAwMDI0MDMwMDIwMzA0MjAwRkZGNgotOjEwMEVFMDAwMTA0MzAwMEIwMDAwMDAwMDkzNjIwMDAwMjQwMzAwMzA1OAotOjEwMEVGMDAwMzA0MjAwRkYxMDQzMDAwNjAwMDAwMDAwOTM2MjAwMDAzMwotOjEwMEYwMDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDYyOEZCRjAwMTRERQotOjEwMEYxMDAwOTM0MjAxNDgzMDQyMDBGRjI0NDNGRkZGMkM2MjAwMDU0QQotOjEwMEYyMDAwMTA0MDAwNUM4RkJGMDAxNDAwMDMxMDgwM0MwMzA4MDBEOQotOjEwMEYzMDAwMjQ2MzREQTQwMDQzMTAyMThDNDIwMDAwMDA0MDAwMDhBRgotOjEwMEY0MDAwMDAwMDAwMDAwRTAwMDMzNThGNDQwMTQwOEY3MDAwMEMzQwotOjEwMEY1MDAwOEY0MjAxNDQxNjAyMDAwMjI0MDIwMDAxQUY2MjAwMEMxRAotOjEwMEY2MDAwMEUwMDAzM0U4RjQ0MDE0MDhGNDIwMTQ0MTQ1MDAwMDRBMAotOjEwMEY3MDAwOEZCRjAwMTQ4RkIwMDAxMDBBMDAwRkVEMjdCRDAwMThCRQotOjEwMEY4MDAwOEY2MjAwMEMwQTAwMDNFQzAwMDAwMDAwOTc2MjAwMTA2MgotOjEwMEY5MDAwOEY0MzAxNDQzMDQyRkZGRjE0NjIwMDA5MDAwMDAwMDA0QgotOjEwMEZBMDAwMjQwMjAwMDFBNzYyMDAxMDhGNDIwMTQwQUY0MjAyMDBGQwotOjEwMEZCMDAwM0MwMjEwMDBBRjQyMDIzODBBMDAwM0YzOEZCRjAwMTQ1NgotOjEwMEZDMDAwOTc2MjAwMTAwQTAwMDNFQzAwMDAwMDAwMEUwMDAzMzVEOQotOjEwMEZEMDAwOEY0NDAxNDA5NzYyMDAxMjhGNDMwMTQ0MzA1MEZGRkY1RAotOjEwMEZFMDAwMTYwMzAwMDIyNDAyMDAwMUE3NjIwMDEyMEUwMDAzM0U1NQotOjEwMEZGMDAwOEY0NDAxNDA4RjQyMDE0NDE2MDIwMDA0OEZCRjAwMTQ0OQotOjEwMTAwMDAwOEZCMDAwMTAwQTAwMDM3QzI3QkQwMDE4OTc2MjAwMTIwMQotOjEwMTAxMDAwMEEwMDAzRUMwMDAwMDAwMDk3NjIwMDE0OEY0MzAxNDRCMwotOjEwMTAyMDAwMzA0MkZGRkYxNDYyMDAwNjhGQkYwMDE0MjQwMjAwMDE0QgotOjEwMTAzMDAwOEZCMDAwMTBBNzYyMDAxNDBBMDAxMzE5MjdCRDAwMTgxMgotOjEwMTA0MDAwOTc2MjAwMTQwQTAwMDNFQzAwMDAwMDAwOTc2MjAwMTY4QgotOjEwMTA1MDAwOEY0MzAxNDQzMDQyRkZGRjE0NjIwMDA2MjQwMjAwMDE2NgotOjEwMTA2MDAwOEZCRjAwMTQ4RkIwMDAxMEE3NjIwMDE2MEEwMDBCRTBCQgotOjEwMTA3MDAwMjdCRDAwMTg5NzYyMDAxNjE0NDAwMDA2OEZCRjAwMTRBOQotOjEwMTA4MDAwM0MwMjA4MDA4QzQyMDA3MDI0NDIwMDAxM0MwMTA4MDAzMAotOjEwMTA5MDAwQUMyMjAwNzA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMThEQwotOjEwMTBBMDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwOTM0MzAxMDlBNAotOjEwMTBCMDAwMjQwMjAwMUY4RjUwMDEwMDEwNjIwMEE1Mjg2MjAwMjA0QQotOjEwMTBDMDAwMTA0MDAwMTgyNDAyMDAzODI4NjIwMDBBMTA0MDAwMEM2QQotOjEwMTBEMDAwMjQwMjAwMEIyODYyMDAwODEwNDAwMDJDMDAwMDAwMDBEMQotOjEwMTBFMDAwMDQ2MDAwRTcyODYyMDAwMjE0NDAwMDI4MjQwMjAwMDY4MQotOjEwMTBGMDAwMTA2MjAwMjY4RkJGMDAxNDBBMDAwNEYwOEZCMDAwMTBBOQotOjEwMTEwMDAwMTA2MjAwNUUyODYyMDAwQjE0NDAwMERFOEZCRjAwMTRFNgotOjEwMTExMDAwMjQwMjAwMEUxMDYyMDA3MzhGQjAwMDEwMEEwMDA0RjA2OQotOjEwMTEyMDAwMDAwMDAwMDAxMDYyMDBDMjI4NjIwMDM5MTA0MDAwMEE2RQotOjEwMTEzMDAwMjQwMjAwODAyNDAyMDAzNjEwNjIwMENDMjg2MjAwMzdBRQotOjEwMTE0MDAwMTA0MDAwQjYyNDAyMDAzNTEwNjIwMEMzOEZCRjAwMTRBNwotOjEwMTE1MDAwMEEwMDA0RjA4RkIwMDAxMDEwNjIwMDJCMjg2MjAwODE5QQotOjEwMTE2MDAwMTA0MDAwMDYyNDAyMDBDODI0MDIwMDM5MTA2MjAwQjZCNAotOjEwMTE3MDAwOEZCRjAwMTQwQTAwMDRGMDhGQjAwMDEwMTA2MjAwOTlCNQotOjEwMTE4MDAwOEZCRjAwMTQwQTAwMDRGMDhGQjAwMDEwM0MwMjA4MDA2QQotOjEwMTE5MDAwOEM0MjAwMjAxMDQwMDBCQjhGQkYwMDE0MEUwMDA1NjQ3RAotOjEwMTFBMDAwMDAwMDAwMDA4RjQyMDEwMDhGODMwMDIwOTc0NTAxMEM1MgotOjEwMTFCMDAwOTc0NjAxMDhBQzYyMDAwMDhGNDIwMTA0M0MwNDA4MDAxRAotOjEwMTFDMDAwOTQ4NDRFOTYwMDA1MkMwMEFDNjIwMDA0OEY0MjAxMThGNgotOjEwMTFEMDAwMDAwNjM0MDAwMEM0MzAyNUFDNjIwMDA4OEY0MjAxMUNCOAotOjEwMTFFMDAwMjQwNDAwMDFBQzYyMDAwQzkzNDIwMTBBMDBBMjI4MjVFRAotOjEwMTFGMDAwQUM2NTAwMTBBQzYwMDAxNEFDNjAwMDE4QUM2NjAwMUM1QwotOjEwMTIwMDAwMEEwMDA0QzQ4RkJGMDAxNDNDMDIwODAwOEM0MjAwMjA3NgotOjEwMTIxMDAwMTA0MDAwOUM4RkJGMDAxNDBFMDAwNTY0MDAwMDAwMDAwOQotOjEwMTIyMDAwOTc0NDAxMDgzQzAzMDgwMDk0NjM0RTk2OTc0NTAxMENDRgotOjEwMTIzMDAwMDAwNDIyMDI5NzQ2MDEwRThGODIwMDIwMDAwNDI2MDAzRgotOjEwMTI0MDAwMDA4MzIwMjUwMDA1MkMwMDNDMDMwMDgwMDBBNjI4MjVGMwotOjEwMTI1MDAwMDA4MzIwMjVBQzQwMDAwMEFDNDAwMDA0QUM0MDAwMDhGNgotOjEwMTI2MDAwQUM0MDAwMENBQzQ1MDAxMEFDNDAwMDE0QUM0MDAwMTg4MQotOjEwMTI3MDAwQUM0NDAwMUMwQTAwMDRDMzI0MDQwMDAxOTc0MjAxMEM4MgotOjEwMTI4MDAwMTQ0MDAwMTUwMDAwMDAwMDkzNjIwMDA1MzA0MjAwMTA3OQotOjEwMTI5MDAwMTQ0MDAwMTEwMDAwMDAwMDBFMDAwMzM1MDIwMDIwMjE2MAotOjEwMTJBMDAwOTM2MjAwMDUwMjAwMjAyMTM0NDIwMDEwMEUwMDAzM0UyQwotOjEwMTJCMDAwQTM2MjAwMDU5MzYyMDAwMDI0MDMwMDIwMzA0MjAwRkY3NwotOjEwMTJDMDAwMTA0MzAwNkYwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTA2OAotOjEwMTJEMDAwMEEwMDEwOEYyN0JEMDAxODAwMDAwMDBEMEEwMDA0RUY1RgotOjEwMTJFMDAwOEZCRjAwMTQzQzAyMDgwMDhDNDIwMDIwMTA0MDAwNjVCMwotOjEwMTJGMDAwOEZCRjAwMTQwRTAwMDU2NDAwMDAwMDAwOEY0MjAxMDQzRgotOjEwMTMwMDAwOEY4MzAwMjA5NzQ0MDEwQzNDMDUwODAwOTRBNTRFOTY1RAotOjEwMTMxMDAwQUM2MjAwMDA5NzYyMDAyQzAwMDQyNDAwMzA0MkZGRkYwMgotOjEwMTMyMDAwMDA4MjIwMjUzQzAyNDAwRTAwQTIyODI1QUM2NDAwMDQ2NwotOjEwMTMzMDAwQUM2MDAwMDhBQzYwMDAwQ0FDNjAwMDEwQUM2MDAwMTQ0NQotOjEwMTM0MDAwQUM2MDAwMThBQzY1MDAxQzBBMDAwNEMzMjQwNDAwMDE1MgotOjEwMTM1MDAwMEUwMDAzMzUwMjAwMjAyMUE3NjAwMDA4MEUwMDAzM0VBNgotOjEwMTM2MDAwMDIwMDIwMjEwMjAwMjAyMTBFMDAwMzQzMjQwNTAwMDE3OQotOjEwMTM3MDAwM0MwMjA4MDA4QzQyMDAyMDEwNDAwMDQyOEZCRjAwMTQ0NQotOjEwMTM4MDAwMEUwMDA1NjQwMDAwMDAwMDk3NDIwMTBDOEY4MzAwMjBDRQotOjEwMTM5MDAwM0MwNTA4MDA5NEE1NEU5NjAwMDIxNDAwQUM3MDAwMDBCNQotOjEwMTNBMDAwQUM2MjAwMDRBQzYwMDAwODhGNjQwMDRDM0MwMjQwMUYzQgotOjEwMTNCMDAwMDBBMjI4MjVBQzY0MDAwQzhGNjIwMDUwMjQwNDAwMDFCOAotOjEwMTNDMDAwQUM2MjAwMTA4RjYyMDA1NEFDNjIwMDE0QUM2MDAwMTg3NAotOjEwMTNEMDAwQUM2NTAwMUM4RkJGMDAxNDhGQjAwMDEwMEEwMDA1ODk5NwotOjEwMTNFMDAwMjdCRDAwMTg5MzYyMDAwMDI0MDMwMDIwMzA0MjAwRkY1NAotOjEwMTNGMDAwMTA0MzAwMjQ4RkJGMDAxNDBFMDAwRkQ3MDIwMDIwMjFERAotOjEwMTQwMDAwMTA0MDAwMjA4RkJGMDAxNDAyMDAyMDIxOEZCMDAwMTA3OAotOjEwMTQxMDAwMDAwMDI4MjEwQTAwMDM0MzI3QkQwMDE4MDIwMDIwMjFGNAotOjEwMTQyMDAwOEZCRjAwMTQ4RkIwMDAxMDBBMDAwNjUxMjdCRDAwMThBRQotOjEwMTQzMDAwOTc0NTAxMEMwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTBDRgotOjEwMTQ0MDAwMEEwMDA2NzEyN0JEMDAxODAyMDAyMDIxOEZCMDAwMTA4RAotOjEwMTQ1MDAwMEEwMDA2OTYyN0JEMDAxODkzNDUwMTBEMDIwMDIwMjFDMQotOjEwMTQ2MDAwOEZCMDAwMTAwQTAwMDZFMDI3QkQwMDE4MDIwMDIwMjFGRQotOjEwMTQ3MDAwOEZCRjAwMTQ4RkIwMDAxMDBBMDAwNkJDMjdCRDAwMThGMwotOjEwMTQ4MDAwOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMThDNAotOjEwMTQ5MDAwOEY0MjAyNzgwNDQwRkZGRTM0ODIwMDgwQUY0MjAyNDA1NwotOjEwMTRBMDAwMjQwMjAwMDJBMzQyMDI0NDNDMDIxMDAwMDNFMDAwMDhCMAotOjEwMTRCMDAwQUY0MjAyNzgzQzA0MDgwMDk0ODQ0RUEyM0MwMjA4MDAyQgotOjEwMTRDMDAwOEM0MjRFQUMzMDgzRkZGRjAwMDMxOEMwMDA0MzEwMjE1NAotOjEwMTREMDAwQUY0MjAwM0MzQzAyMDgwMDhDNDI0RUE4QUY0MjAwMzhBQwotOjEwMTRFMDAwM0MwMjAwNTAzNDQyMDAwOEFGNDIwMDMwMDAwMDAwMDBDRgotOjEwMTRGMDAwMDAwMDAwMDAwMDAwMDAwMDhGNDIwMDAwMzA0MjAwMjA4OQotOjEwMTUwMDAwMTA0MEZGRkQwMDAwMDAwMDhGNDIwNDAwM0MwMTA4MDA3NQotOjEwMTUxMDAwQUMyMjRFOTg4RjQyMDQwNDNDMDEwODAwQUMyMjRFOUM0MQotOjEwMTUyMDAwM0MwMjAwMjBBRjQyMDAzMDAwMDAwMDAwM0MwMjA4MDBGNgotOjEwMTUzMDAwOTQ0MjRFQTAzQzAzMDgwMDk0NjM0RUE0M0MwNTA4MDA2RQotOjEwMTU0MDAwOTRBNTRFQTYyNDg0MDAwMTAwNDMxMDIxMzA4M0ZGRkZBMAotOjEwMTU1MDAwM0MwMTA4MDBBNDIyNEVBMDNDMDEwODAwQTQyNDRFQTI5NQotOjEwMTU2MDAwMTQ2NTAwMDMwMDAwMDAwMDNDMDEwODAwQTQyMDRFQTIwNgotOjEwMTU3MDAwMDNFMDAwMDgwMDAwMDAwMDNDMDUwMDBBMjdCREZGRTg2QQotOjEwMTU4MDAwMDM0NTI4MjEzQzA0MDgwMDI0ODQ0RTg4QUZCRjAwMTA4NgotOjEwMTU5MDAwMEUwMDA1RUUyNDA2MDAwQTNDMDIwODAwOTQ0MjRFOEEyMgotOjEwMTVBMDAwM0MwMzA4MDA5NDYzNEVBNjMwNDIwMDBGMjQ0MjAwMDMxRgotOjEwMTVCMDAwMDA0MzE4MDQyNDAyN0ZGRjAwNDMxMDJCMTA0MDAwMDI1OAotOjEwMTVDMDAwQUY4MzAwMUMwMDAwMDAwRDBFMDAwNEZCMDAwMDAwMDBCMwotOjEwMTVEMDAwM0MwMjA4MDA5NDQyNEU5MjhGQkYwMDEwMjdCRDAwMThCNQotOjEwMTVFMDAwMDNFMDAwMDhBNzQyMDBBMjNDMDIwMDBBMDM0MjEwMjFDNwotOjEwMTVGMDAwOTQ0MzAwMDYzQzAyMDgwMDk0NDI0RTkyM0MwMTA4MDBDRAotOjEwMTYwMDAwQTQyMzRFOEUwMDQzMTAyMzhGODMwMDFDMDAwMjE0MDA3RAotOjEwMTYxMDAwMDAwMjE0MDMwMDQzMTAyQjAzRTAwMDA4Mzg0MjAwMDFDRAotOjEwMTYyMDAwMjdCREZGRThBRkJGMDAxMDNDMDIwMDBBMDM0MjEwMjFCMwotOjEwMTYzMDAwOTQ0MjAwMDYzQzAxMDgwMEE0MjI0RThFMEUwMDA1NDg4QwotOjEwMTY0MDAwMDAwMDAwMDA1NDQwRkZGOTNDMDIwMDBBOEZCRjAwMTA2OAotOjEwMTY1MDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkU4QUZCRjAwMTA1QQotOjEwMTY2MDAwMEUwMDA1NDgwMDAwMDAwMDEwNDAwMDAzMDAwMDAwMDBDQwotOjEwMTY3MDAwMEUwMDA1NTYwMDAwMDAwMDNDMDIwODAwOEM0MjRFOTgwNwotOjEwMTY4MDAwOEZCRjAwMTAyNzQzMDQwMEFGNDIwMDM4M0MwMjA4MDAxRgotOjEwMTY5MDAwOEM0MjRFOUMyN0JEMDAxOEFGODMwMDIwQUY0MjAwM0MxNwotOjEwMTZBMDAwM0MwMjAwMDVBRjQyMDAzMDAzRTAwMDA4QUY4MDAwMThBNAotOjEwMTZCMDAwOEY4MjAwMTgzQzAzMDAwNjAwMDIxMTQwMDA0MzEwMjVGMQotOjEwMTZDMDAwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQotOjEwMTZEMDAwOEY0MjAwMDAzMDQyMDAxMDEwNDBGRkZEMjc0MjA0MDBGRQotOjEwMTZFMDAwQUY4MjAwMjAwM0UwMDAwOEFGODAwMDE4M0MwNjA4MDAyRAotOjEwMTZGMDAwOENDNjRFOUM4Rjg1MDAxODhGODMwMDIwM0MwMjA4MDAwQQotOjEwMTcwMDAwOTQ0MjRFOTIyN0JERkZFMDI0QTUwMDAxMjQ2MzAwMjBFRgotOjEwMTcxMDAwMjQ0MjAwMDEyNEM3MDAyMEFGQjEwMDE0QUZCMDAwMTA3NAotOjEwMTcyMDAwQUZCRjAwMThBRjg1MDAxOEFGODMwMDIwM0MwMTA4MDA1MAotOjEwMTczMDAwQTQyMjRFOTIzMDkwMDBGRjNDMDEwODAwQUMyNzRFOUM0MgotOjEwMTc0MDAwMDRDMTAwMDgwMDAwODgyMTA0RTAwMDA2MDAwMDAwMDAzOQotOjEwMTc1MDAwM0MwMjA4MDA4QzQyNEU5ODI0NDIwMDAxM0MwMTA4MDBFMwotOjEwMTc2MDAwQUMyMjRFOTgzQzAyMDgwMDk0NDI0RTkyM0MwMzA4MDA4MgotOjEwMTc3MDAwOTQ2MzRFQTAwMDEwMjAyQjAwNDMxMDI2MkM0MjAwMDE0MQotOjEwMTc4MDAwMDA0NDEwMjUxNDQwMDAwNDhGODMwMDE4MjQwMjAwMTAyOAotOjEwMTc5MDAwMTQ2MjAwMEYwMDAwMDAwMDBFMDAwNTdBMjQxMTAwMDEwMQotOjEwMTdBMDAwM0MwMzA4MDA5NDYzNEU5MjNDMDIwODAwOTQ0MjRFQTAxMQotOjEwMTdCMDAwMTQ2MjAwMDMwMDAwMDAwMDBFMDAwNEZCMDAwMDAwMDBBMwotOjEwMTdDMDAwMTYwMDAwMDMwMDAwMDAwMDBFMDAwNTY0MDAwMDAwMDA4OQotOjEwMTdEMDAwM0MwMzA4MDA5NDYzNEU5NjNDMDIwODAwOTQ0MjRFOTRFOQotOjEwMTdFMDAwMjQ2MzAwMDEzMDY0RkZGRjNDMDEwODAwQTQyMzRFOTZFRgotOjEwMTdGMDAwMTQ4MjAwMDMwMDAwMDAwMDNDMDEwODAwQTQyMDRFOTY2MwotOjEwMTgwMDAwMTIwMDAwMDYwMDAwMDAwMDNDMDIwODAwOTQ0MjRFOTJDNAotOjEwMTgxMDAwQTc0MjAwQTIwQTAwMDVEQzAyMjAxMDIxMEUwMDA1NDhBNAotOjEwMTgyMDAwMDAwMDAwMDAxMDQwMDAwNDAyMjAxMDIxMEUwMDA1NTZBOAotOjEwMTgzMDAwMDAwMDAwMDAwMjIwMTAyMThGQkYwMDE4OEZCMTAwMTQ5QgotOjEwMTg0MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMzA4NEZGRkZBOAotOjEwMTg1MDAwMzBBNUZGRkYwMDAwMTgyMTEwODAwMDA3MDAwMDAwMDBFNQotOjEwMTg2MDAwMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjE2RgotOjEwMTg3MDAwMEEwMDA1RTQwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjE4QwotOjEwMTg4MDAwMTBDMDAwMDYyNEM2RkZGRjhDQTIwMDAwMjRBNTAwMDQ5RgotOjEwMTg5MDAwQUM4MjAwMDAwQTAwMDVFRTI0ODQwMDA0MDNFMDAwMDg4NgotOjEwMThBMDAwMDAwMDAwMDAxMEEwMDAwODI0QTNGRkZGQUM4NjAwMDA4OQotOjEwMThCMDAwMDAwMDAwMDAwMDAwMDAwMDI0MDJGRkZGMjQ2M0ZGRkY3RgotOjEwMThDMDAwMTQ2MkZGRkEyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAxMgotOjEwMThEMDAwMjQwMjAwMDFBRjYyMDAwQ0E3NjIwMDEwQTc2MjAwMTI5MAotOjEwMThFMDAwQTc2MjAwMTQwM0UwMDAwOEE3NjIwMDE2MzA4MjAwN0ZBMAotOjEwMThGMDAwMDM0MjEwMjEzQzA4MDAwRTAwNDgxODIxM0MwMjA4MDA1OQotOjEwMTkwMDAwOEM0MjAwMjAyN0JERkZEODI0MDdGRjgwQUZCMzAwMUMwNgotOjEwMTkxMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjBERAotOjEwMTkyMDAwMDA4MDgwMjEzMEIxMDBGRjAwODcyMDI0MzBEMjAwRkZFQQotOjEwMTkzMDAwMTA0MDAwMkYwMDAwOTgyMUFGNDQwMDJDOTA2MjAwMDA1RQotOjEwMTk0MDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDBFMDAwMDAwMDA0QQotOjEwMTk1MDAwM0MwMjA4MDA4QzQyMDBFMDAyMDIxMDIxMDA0NzEwMjRFMwotOjEwMTk2MDAwQUY0MjAwMkMzQzAyMDgwMDhDNDIwMEUwMDIwMjEwMjEzMQotOjEwMTk3MDAwMzA0MjAwN0YwMzQyMTAyMTAwNDgxMDIxOTQ0MjAwRDRERAotOjEwMTk4MDAwMzA1M0ZGRkYwRTAwMDU2NDAwMDAwMDAwM0MwMjA4MDAxOQotOjEwMTk5MDAwOTQ0MjRFOTY4RjgzMDAyMDAwMTEzNDAwMDBDMjMwMjVGRgotOjEwMTlBMDAwMDAxMjJDMDAzQzAyNDAwMDAwQzIzMDI1MzRBNTAwMDE4QQotOjEwMTlCMDAwQUM3MDAwMDA4RkJGMDAyMEFDNjAwMDA0OEZCMjAwMTgzNAotOjEwMTlDMDAwQUM3MzAwMDg4RkIxMDAxNEFDNjAwMDBDOEZCMzAwMUMyNgotOjEwMTlEMDAwQUM2NTAwMTA4RkIwMDAxMEFDNjAwMDE0MjQwNDAwMDE0RQotOjEwMTlFMDAwQUM2MDAwMTgyN0JEMDAyODBBMDAwNTg5QUM2NjAwMUMwMQotOjEwMTlGMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ2RQotOjEwMUEwMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4OTM0MzAxMEZBQQotOjEwMUExMDAwMjQwMjAwMTAxMDYyMDAwRTI4NjUwMDExMTBBMDAwMDdCQgotOjEwMUEyMDAwMjQwMjAwMTIyNDAyMDAwODI0MDUwMDNBMTA2MjAwMDY3NQotOjEwMUEzMDAwMDAwMDMwMjEwM0UwMDAwODAwMDAwMDAwMjQwNTAwMzUwQwotOjEwMUE0MDAwMTQ2MkZGRkMwMDAwMzAyMTBBMDAwNjA5MDAwMDAwMDBCQgotOjEwMUE1MDAwOEY0MjAwNzQyNDQyMEZBMDAzRTAwMDA4QUY2MjAwMEMyNAotOjEwMUE2MDAwMjdCREZGRThBRkJGMDAxMDBFMDAwMzQzMjQwNTAwMDFBRgotOjEwMUE3MDAwOEZCRjAwMTAyNDAyMDAwMUE3NjIwMDEyMjdCRDAwMThDQQotOjEwMUE4MDAwMjQwMjAwMDEwM0UwMDAwOEEzNjAwMDIyMjdCREZGRTA1QwotOjEwMUE5MDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDE4MzBCMUZGRkZGRQotOjEwMUFBMDAwMEUwMDAzMzUwMDgwODAyMTkzNjIwMDNGMjQwMzAwMDQ3MAotOjEwMUFCMDAwMzA0MjAwRkYxNDQzMDAwQzAyMDAyMDIxMTIyMDAwMDhENQotOjEwMUFDMDAwMjQwMjAwMEEwRTAwMDYwMjAwMDAwMDAwOTM2MjAwMDVENgotOjEwMUFEMDAwMjQwM0ZGRkUwMDQzMTAyNEEzNjIwMDA1MjQwMjAwMTIyOQotOjEwMUFFMDAwQTM2MjAwM0YwMjAwMjAyMTBFMDAwMzNFQTM2MDAwODE5QwotOjEwMUFGMDAwMTYyMDAwMDMwMjAwMjAyMTBFMDAwNjY2MDAwMDAwMDBGMAotOjEwMUIwMDAwMDIwMDIwMjEzMjI2MDBGRjhGQkYwMDE4OEZCMTAwMTQ4MQotOjEwMUIxMDAwOEZCMDAwMTAyNDA1MDAzODBBMDAwNjA5MjdCRDAwMjBGOAotOjEwMUIyMDAwMjdCREZGRTBBRkJGMDAxQ0FGQjIwMDE4QUZCMTAwMTQ3QgotOjEwMUIzMDAwQUZCMDAwMTAwRTAwMDMzNTAwODA4MDIxMEUwMDA2MDJCOQotOjEwMUI0MDAwMDAwMDAwMDA5MzYyMDAzRjI0MTIwMDE4MzA1MTAwRkY5MwotOjEwMUI1MDAwMTIzMjAwMDMwMjAwMjAyMTI0MDIwMDEyQTM2MjAwM0Y3RgotOjEwMUI2MDAwOTM2MjAwMDUyNDAzRkZGRTAwNDMxMDI0MEUwMDAzM0U5MQotOjEwMUI3MDAwQTM2MjAwMDUwMjAwMjAyMTI0MDUwMDIwMTYzMjAwMDc4MAotOjEwMUI4MDAwMDAwMDMwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRFRAotOjEwMUI5MDAwOEZCMDAwMTAwQTAwMDM0MzI3QkQwMDIwOEZCRjAwMUMzOAotOjEwMUJBMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzlENwotOjEwMUJCMDAwMEEwMDA2MDkyN0JEMDAyMDI3QkRGRkU4QUZCMDAwMTBDRQotOjEwMUJDMDAwQUZCRjAwMTQ5NzQyMDEwQzI0MDUwMDM2MDA4MDgwMjEyRAotOjEwMUJEMDAwMTQ0MDAwMTAzMDQ2MDBGRjBFMDAwMzM1MDAwMDAwMDBFNgotOjEwMUJFMDAwMjQwMjAwMTJBMzYyMDAzRjkzNjIwMDA1MzQ0MjAwMTBGOQotOjEwMUJGMDAwMEUwMDA2MDJBMzYyMDAwNTBFMDAwMzNFMDIwMDIwMjEzMwotOjEwMUMwMDAwMDIwMDIwMjEwRTAwMDM0MzI0MDUwMDIwMEEwMDA2RDUwRgotOjEwMUMxMDAwMDAwMDAwMDAwRTAwMDYwOTAwMDAwMDAwMEUwMDAzMzU2MQotOjEwMUMyMDAwMDIwMDIwMjE5MzYyMDAyMzI0MDNGRjlGMDIwMDIwMjE1MQotOjEwMUMzMDAwMDA0MzEwMjQ4RkJGMDAxNDhGQjAwMDEwQTM2MjAwMjM1NAotOjEwMUM0MDAwMEEwMDAzM0UyN0JEMDAxODI3QkRGRkUwQUZCRjAwMTgwNAotOjEwMUM1MDAwQUZCMTAwMTRBRkIwMDAxMDMwQjEwMEZGMEUwMDAzMzU3QgotOjEwMUM2MDAwMDA4MDgwMjEyNDAyMDAxMjBFMDAwNjAyQTM2MjAwM0ZDMQotOjEwMUM3MDAwMEUwMDAzM0UwMjAwMjAyMTAyMDAyMDIxMDIyMDMwMjExQwotOjEwMUM4MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzVFRAotOjEwMUM5MDAwMEEwMDA2MDkyN0JEMDAyMEEzODAwMDJDMDNFMDAwMDhFRAotOjEwMUNBMDAwQTM4MDAwMkQ4RjQyMDI3ODA0NDBGRkZFOEY4MjAwMzQxMwotOjEwMUNCMDAwQUY0MjAyNDAyNDAyMDAwMkEzNDIwMjQ0M0MwMjEwMDA1MAotOjEwMUNDMDAwMDNFMDAwMDhBRjQyMDI3ODNDMDM2MDAwOEM2MjU0MDBERAotOjEwMUNEMDAwMzA0MjAwMDgxNDQwRkZGRDAwMDAwMDAwOEM2MjU0MDhGMAotOjEwMUNFMDAwQUY4MjAwMDAyNDAyMDA1MkFDNjA1NDA4QUM2NDU0MzA0RgotOjEwMUNGMDAwQUM2MjU0MzQyNDAyMDAwODAzRTAwMDA4QUM2MjU0MDBEMwotOjEwMUQwMDAwM0MwMjYwMDA4QzQyNTQwMDMwNDIwMDA4MTA0MDAwMDU0NAotOjEwMUQxMDAwM0MwMzYwMDA4QzYyNTQwMDMwNDIwMDA4MTQ0MEZGRkQxOAotOjEwMUQyMDAwMDAwMDAwMDA4RjgzMDAwMDNDMDI2MDAwMDNFMDAwMDgxOAotOjEwMUQzMDAwQUM0MzU0MDg5MEEzMDAwMDI0MDIwMDA1MDA4MDQwMjExOQotOjEwMUQ0MDAwMzA2MzAwM0YwMDAwNDgyMTE0NjIwMDA1MDAwMDUwMjE2QwotOjEwMUQ1MDAwOTBBMjAwMUM5NEEzMDAxRTMwNDkwMEZGMzA2QUZGRkZEMAotOjEwMUQ2MDAwQUQwMDAwMENBRDAwMDAxMEFEMDAwMDI0OTUwMjAwMTQ4MQotOjEwMUQ3MDAwOEQwNTAwMUM4RDA0MDAxODMwNDJGRkZGMDA0OTEwMjMyMAotOjEwMUQ4MDAwMDAwMjExMDAwMDAyMzdDMzAwNDAzODIxMDA4NjIwMjNFMgotOjEwMUQ5MDAwMDBBMjEwMkIwMDgyMjAyMzAwQTcyODIzQUQwNTAwMUNFMQotOjEwMURBMDAwQUQwNDAwMThBNTA5MDAxNEE1MDkwMDIwQTUwQTAwMTYxNQotOjEwMURCMDAwMDNFMDAwMDhBNTBBMDAyMjhGNDIwMUY4MDQ0MEZGRkU1QwotOjEwMURDMDAwMjQwMjAwMDJBRjQ0MDFDMEEzNDIwMUM0M0MwMjEwMDAzRgotOjEwMUREMDAwMDNFMDAwMDhBRjQyMDFGODNDMDIwODAwOEM0MjAwQjQ2NgotOjEwMURFMDAwMjdCREZGRThBRkJGMDAxNDI0NDIwMDAxQUZCMDAwMTBEMAotOjEwMURGMDAwM0MwMTA4MDBBQzIyMDBCNDhGNDMwMDI0M0MwMjAwMUZDOQotOjEwMUUwMDAwMzBBQTAwRkYzNDQyRkY4MDMwRDgwMEZGMDA2MjgwMjRGNwotOjEwMUUxMDAwMDA4MEY4MjEzMEVGMDBGRjExNTgwMDNCMDE0MDU4MjFBRAotOjEwMUUyMDAwMjQwQ0ZGODAzQzE5MDAwQTMxNjMwMDdGMDAwMzEwQzBCRQotOjEwMUUzMDAwMDAwMzE5NDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwRENCQgotOjEwMUU0MDAwMjU2ODAwMDEzMTBEMDA3RjAzRTIxMDIxMDA0MzEwMjFCRAotOjEwMUU1MDAwMzA0MzAwN0YwMzQzMTgyMTAwNEMxMDI0MDA3OTQ4MjFBRgotOjEwMUU2MDAwQUY0MjAwMjQ4RDIyMDAyNDAxNkMxODI0MDA2QzcwMjZERgotOjEwMUU3MDAwQUQyMjAwMEM4RDIyMDAyNDMxMDgwMEZGQUQyMjAwMTA5RAotOjEwMUU4MDAwOTUyMjAwMTQ5NTIzMDAyMDhEMjcwMDFDMzA0MkZGRkY2RgotOjEwMUU5MDAwMzA2M0ZGRkY4RDI2MDAxODAwNDMxMDIzMDAwMjExMDA1RAotOjEwMUVBMDAwMDAwMjI3QzMwMDQwMjgyMTAwQzQzMDIzMDBFMjEwMkI4OQotOjEwMUVCMDAwMDBDMjMwMjMwMEU1MzgyM0FEMjcwMDFDQUQyNjAwMThGMgotOjEwMUVDMDAwOTUyMjAwMjBBNTIyMDAxNDk1MjIwMDIyMTU0QjAwMEExRAotOjEwMUVEMDAwQTUyMjAwMTY4RDIzMDAyNDhEMjIwMDA4MjU0NjAwMDEyRQotOjEwMUVFMDAwMzE0NTAwODAxNDYyMDAwNDMwQzQwMDdGMTA4RjAwMDI2RQotOjEwMUVGMDAwMzhBQTAwODAwMEMwNTAyMTUxQUYwMDAxMzFDODAwRkY1NgotOjEwMUYwMDAwMTUxOEZGQzkwMTAwNTgyMThGODQwMDM0MzA4MjAwN0ZFQQotOjEwMUYxMDAwMDM0MjE4MjEzQzAyMDAwQTAwNjIxODIxMjQwMkZGODBCQgotOjEwMUYyMDAwMDA4MjIwMjRBRjQ0MDAyNEEwNkEwMDc5QTA2QTAwODNDNAotOjEwMUYzMDAwOEM2MjAwNTA4Rjg0MDAzNEFDNjIwMDcwOEM2NTAwNzQzOQotOjEwMUY0MDAwM0MwMjdGRkYzNDQyRkZGRjAwQTIyODI0MEUwMDA3M0MyMgotOjEwMUY1MDAwQUM2NTAwNzRBRjUwMDAyNDhGQkYwMDE0OEZCMDAwMTAyOAotOjEwMUY2MDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkMwQUZCRTAwMzg0MgotOjEwMUY3MDAwQUZCNzAwMzRBRkI1MDAyQ0FGQjIwMDIwQUZCMTAwMUMzQQotOjEwMUY4MDAwQUZCMDAwMThBRkJGMDAzQ0FGQjYwMDMwQUZCNDAwMjgxMAotOjEwMUY5MDAwQUZCMzAwMjQ4RjQ1MDAyNDhGNDYwMDI4OEY0MzAwMkNDOAotOjEwMUZBMDAwM0MwMjAwMUYzNDQyRkY4MDAwNjIxODI0MDBDMjMwMjQyQgotOjEwMUZCMDAwMDA4MEE4MjFBRkEzMDAxNDAwQTJGMDI0MEUwMDA3MDBBNwotOjEwMUZDMDAwQUZBNjAwMTAzQzAyMDgwMDhDNDIwMEUwMjQxMEZGODAwNQotOjEwMUZEMDAwMDM2MDg4MjEwMkEyMTAyMTAwNTAxMDI0QUY0MjAwMjQ4NwotOjEwMUZFMDAwM0MwMjA4MDA4QzQyMDBFMDAyQTIxMDIxMzA0MjAwN0YzNwotOjEwMUZGMDAwMDM0MjE4MjEzQzAyMDAwQTAwNjI5MDIxOTI0MjAwRDI2MgotOjEwMjAwMDAwOTM2MzAwODQzMDU3MDBGRjMwNjMwMEZGMjQwMjAwMDExNwotOjEwMjAxMDAwMTA2MjAwMzQwMzYwMjAyMTI0MDIwMDAyMTQ2MjAwMzZBMgotOjEwMjAyMDAwMDAwMDAwMDAwRTAwMTJFNTAyNDAyODIxOTIyMzAwODNFOAotOjEwMjAzMDAwOTIyMjAwODMzMDYzMDA3RjMwNDIwMDdGMDAwMjEwQzA5NAotOjEwMjA0MDAwMDAwMzE5NDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwRENBOQotOjEwMjA1MDAwMDJBMjEwMjEwMDQzMzgyMTAwRjAxMDI0QUY0MjAwMjhEMgotOjEwMjA2MDAwOTIyNTAwNzg5MjI0MDA4MzMwRTIwMDdGMDM0MjE4MjFGOQotOjEwMjA3MDAwM0MwMjAwMEMxNDg1MDAwNzAwNjI4MDIxMjQwMkZGRkY0RgotOjEwMjA4MDAwQTI0MjAwRjEyNDAyRkZGRkE2NDIwMEYyMEEwMDA3Rjg3NAotOjEwMjA5MDAwMjQwMkZGRkY5NjAyMDAyMEEyNDIwMEYxOTYwMjAwMjJENQotOjEwMjBBMDAwQTY0MjAwRjI4RTAyMDAyNEFFNDIwMEY0OTIyMjAwODM4NwotOjEwMjBCMDAwQTI0MjAwRjA4RTQyMDBDOEFFNDIwMEZDOEU0MjAwQzQzNAotOjEwMjBDMDAwQUU0MjAwRjg4RTIyMDA1MEFFNDIwMTAwOEU0MjAwQ0M5QgotOjEwMjBEMDAwQUU0MjAxMDQ5MjIyMDA4NTMwNDIwMDNGMEEwMDA4NTNCQwotOjEwMjBFMDAwMzQ0MjAwNDAwRTAwMTMwODAyNDAyODIxOTIyMjAwODU0RAotOjEwMjBGMDAwMEEwMDA4NTMzMDQyMDAzRjkzNjIwMDg1MjQwM0ZGREY0QgotOjEwMjEwMDAwMzA0MjAwM0ZBMzYyMDA4NTkzNjIwMDg1MDA0MzEwMjRBMwotOjEwMjExMDAwQTM2MjAwODU5MzYzMDA4MzkzNjIwMDc4MzA3NDAwRkZBQwotOjEwMjEyMDAwMzA0MjAwRkYxMDU0MDAzNjI0MEFGRjgwM0MwQzAwMENBMwotOjEwMjEzMDAwMzI4MzAwN0YwMDAzMTBDMDAwMDMxOTQwMDA2MjE4MjFBMQotOjEwMjE0MDAwM0MwMjA4MDA4QzQyMDBEQzI2ODgwMDAxMzEwOTAwN0YzNwotOjEwMjE1MDAwMDJBMjEwMjEwMDQzMzgyMTMwRTIwMDdGMDM0MjE4MjFGRgotOjEwMjE2MDAwMDBFQTEwMjRBRjQyMDAyODAwNkM4MDIxOEUwMjAwMjQ3NwotOjEwMjE3MDAwMDI4QTE4MjQwMDZBNTgyNkFFMDIwMDBDOEUwMjAwMjQzRgotOjEwMjE4MDAwMzEwODAwRkZBRTAyMDAxMDk2MDIwMDE0OTYwMzAwMjBGMgotOjEwMjE5MDAwOEUwNzAwMUMzMDQyRkZGRjMwNjNGRkZGOEUwNjAwMThFMQotOjEwMjFBMDAwMDA0MzEwMjMwMDAyMTEwMDAwMDIyN0MzMDA0MDI4MjEzMQotOjEwMjFCMDAwMDBDNDMwMjMwMEUyMTAyQjAwQzIzMDIzMDBFNTM4MjM5NgotOjEwMjFDMDAwQUUwNzAwMUNBRTA2MDAxODk2MDIwMDIwQTYwMjAwMTRGRQotOjEwMjFEMDAwOTYwMjAwMjJBNjAyMDAxNjkyMjIwMDc5MzA0MjAwRkZFOQotOjEwMjFFMDAwMTA1NDAwMDcwMDAwMDAwMDUxMzcwMDAxMzE2ODAwRkY2MwotOjEwMjFGMDAwOTIyMjAwNzgzMDQyMDBGRjE0NDhGRkNEMDEwMEEwMjE1OAotOjEwMjIwMDAwOTIyMjAwODNBMjIyMDA3OThFMjIwMDUwMEEwMDA4QjM5NQotOjEwMjIxMDAwQUUyMjAwNzBBMjIyMDA4NThFMjIwMDRDMjQwNUZGODA5MQotOjEwMjIyMDAwQUU0MjAxMEM5MjIyMDA4NTM0NDIwMDIwQTIyMjAwODU5OQotOjEwMjIzMDAwOTI0MjAwRDEzQzAzMDgwMDhDNjMwMERDMzA1NDAwRkY2NAotOjEwMjI0MDAwM0MwMjA4MDA4QzQyMDBFNDAwMTQzMTQwMDAxNDIwQzAxRAotOjEwMjI1MDAwMDJBMzE4MjEwMEM0MjAyMTAyQTIxMDIxMDA2NDM4MjEwOQotOjEwMjI2MDAwMDA0NjEwMjEwMDQ1MTgyNDAwRTUyODI0QUY0NTAwMjgyOQotOjEwMjI3MDAwQUY0MzAwMkMzMDQyMDA3RjkyNDQwMEQwMzBFMzAwN0YxNwotOjEwMjI4MDAwMDM0MjI4MjEwMzQzMTgyMTNDMDIwMDBDMDA2MjgwMjFGNAotOjEwMjI5MDAwM0MwMjAwMEUzMDk2MDBGRjAwQTI5ODIxMTI5NjAwMkEwMAotOjEwMjJBMDAwMDAwMDAwMDA4RTAyMDAwQzAyMDAyMDIxMDI2MDI4MjFBNAotOjEwMjJCMDAwMTA0MDAwMjUyNjEwMDAyODBFMDAwNzFCMDAwMDAwMDAxQgotOjEwMjJDMDAwOTI2MjAwMEQyNjgzMDAwMTMwNzQwMEZGMzA0MjAwN0ZDRgotOjEwMjJEMDAwQTI2MjAwMEQyNDA0RkY4MDE2OTdGRkYwMjY3MzAwMjBGMQotOjEwMjJFMDAwM0MwMjA4MDA4QzQyMDBEQzAwMDBBMDIxMDJBMjEwMjE2OAotOjEwMjJGMDAwMDA0NDEwMjRBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQ1NQotOjEwMjMwMDAwM0MwMzA4MDA4QzYzMDBEQzAyQTIxMDIxMDA0NDEwMjQ2RQotOjEwMjMxMDAwQUY0MjAwMkMzQzAyMDgwMDhDNDIwMEU0MDJBMzE4MjFDQQotOjEwMjMyMDAwMzA2MzAwN0YwMkEyMTAyMTMwNDIwMDdGMDM0MjIwMjE0RgotOjEwMjMzMDAwMDM0MzE4MjEzQzAyMDAwQzAwNjI4MDIxM0MwMjAwMEU4NQotOjEwMjM0MDAwMEEwMDA4NzUwMDgyOTgyMThFNDIwMEQ4QUUyMjAwNTAwMwotOjEwMjM1MDAwOEU0MjAwRDhBRTIyMDA3MDkyMjUwMDgzOTI0NjAwRDFCMgotOjEwMjM2MDAwOTIyMzAwODM5MjQ0MDBEMTI0MDJGRjgwMDBBMjI4MjRGQgotOjEwMjM3MDAwMzA2MzAwN0YzMDg0MDBGRjAwQTYyODI1MDA2NDE4MkFGRgotOjEwMjM4MDAwMTA2MDAwMDIzMEE1MDBGRjM4QTUwMDgwQTIyNTAwODM2MAotOjEwMjM5MDAwQTIyNTAwNzkwRTAwMDcwRTAwMDAwMDAwOTIyMjAwN0VBOAotOjEwMjNBMDAwMDJBMDIwMjFBMjIyMDA3QThFMjMwMDc0M0MwMjdGRkYyQgotOjEwMjNCMDAwMzQ0MkZGRkYwMDYyMTgyNDBFMDAwNzNDQUUyMzAwNzQ3NQotOjEwMjNDMDAwOEZBMjAwMTBBRjVFMDAyNDhGQkYwMDNDQUY0MjAwMjhGOAotOjEwMjNEMDAwOEZCRTAwMzg4RkEyMDAxNDhGQjcwMDM0OEZCNjAwMzA0NAotOjEwMjNFMDAwOEZCNTAwMkM4RkI0MDAyODhGQjMwMDI0OEZCMjAwMjA0QgotOjEwMjNGMDAwOEZCMTAwMUM4RkIwMDAxODI3QkQwMDQwMDNFMDAwMDgxQgotOjEwMjQwMDAwQUY0MjAwMkM5MEEyMDAwMDI0NDIwMDAxQTBBMjAwMDBENAotOjEwMjQxMDAwM0MwMzA4MDA4QzYzMDBGNDMwNDIwMEZGMTQ0MzAwMEZCQgotOjEwMjQyMDAwMDA4MDMwMjFBMEEwMDAwMDNDMDIwODAwOEM0MjAwRTRBMwotOjEwMjQzMDAwOEY4NDAwMzQwMDgyMjAyMTMwODIwMDdGMDM0MjE4MjFFMwotOjEwMjQ0MDAwM0MwMjAwMEMwMDYyMTgyMTI0MDJGRjgwMDA4MjIwMjQzQwotOjEwMjQ1MDAwQUNDMzAwMDAwM0UwMDAwOEFGNDQwMDI4OEM4MjAwMDBGOQotOjEwMjQ2MDAwMjQ0MjAwMjAwM0UwMDAwOEFDODIwMDAwOTRDMjAwMDA3NwotOjEwMjQ3MDAwM0MwODA4MDA5NTA4MDBDQTMwRTdGRkZGMDA4MDQ4MjFBQgotOjEwMjQ4MDAwMDEwMjEwMjFBNEMyMDAwMDk0QzIwMDAwMzA0MkZGRkZFQwotOjEwMjQ5MDAwMDBFMjEwMkI1NDQwMDAwMUE0QzcwMDAwOTRBMjAwMDBFOQotOjEwMjRBMDAwM0MwMzA4MDA4QzYzMDBDQzI0NDIwMDAxQTRBMjAwMDA3RAotOjEwMjRCMDAwOTRBMjAwMDAzMDQyRkZGRjU0NDMwMDA3OEY4NjAwMjg5QgotOjEwMjRDMDAwMDEwNzEwMkJBNEEwMDAwMDU0NDAwMDAxMDEwMDM4MjE5NgotOjEwMjREMDAwQTRDNzAwMDA4Rjg2MDAyODhDQzQwMDFDQUY0NDAwM0NCOQotOjEwMjRFMDAwOTRBMjAwMDA4RjQzMDAzQzMwNDJGRkZGMDAwMjEwQzA2NgotOjEwMjRGMDAwMDA2MjE4MjFBRjQzMDAzQzhGNDIwMDNDMDA4MjIwMjM0MQotOjEwMjUwMDAwMTg4MDAwMDQwMDAwMDAwMDhDQzIwMDE4MEEwMDA5MTRBMgotOjEwMjUxMDAwMjQ0MjAwMDE4Q0MyMDAxOEFGNDIwMDM4M0MwMjAwNTAzNwotOjEwMjUyMDAwMzQ0MjAwMTBBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDAwNAotOjEwMjUzMDAwMDAwMDAwMDA4RjQyMDAwMDMwNDIwMDIwMTA0MEZGRkRFQwotOjEwMjU0MDAwMDAwMDAwMDA4RjQyMDQwNEFEMjIwMDA0OEY0MjA0MDAwQQotOjEwMjU1MDAwQUQyMjAwMDAzQzAyMDAyMEFGNDIwMDMwMDNFMDAwMDg0MgotOjEwMjU2MDAwMDAwMDAwMDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRCQgotOjEwMjU3MDAwQUZCMDAwMTBBRkJGMDAxQzk0QzIwMDAwMDBDMDgwMjFBQgotOjEwMjU4MDAwM0MxMjA4MDA5NjUyMDBDNjI0NDIwMDAxQTYwMjAwMDAzOAotOjEwMjU5MDAwOTYwMzAwMDA5NEUyMDAwMDAwRTAzMDIxMTQ0MzAwMDU5RgotOjEwMjVBMDAwOEZCMTAwMzAwRTAwMDhFOTAyNDAzODIxMEEwMDA5NDZDOAotOjEwMjVCMDAwMDAwMDAwMDA4QzgzMDAwNDhDODIwMDA0MjQ0MjAwNDA1MAotOjEwMjVDMDAwMDQ2MTAwMDdBQzgyMDAwNDhDODIwMDA0MDQ0MDAwMDQxMwotOjEwMjVEMDAwMDAwMDAwMDA4QzgyMDAwMDI0NDIwMDAxQUM4MjAwMDA1OAotOjEwMjVFMDAwOTYwMjAwMDAzMDQyRkZGRjUwNTIwMDAxQTYwMDAwMDA5QQotOjEwMjVGMDAwOTYyMjAwMDAyNDQyMDAwMUE2MjIwMDAwOEY4MjAwMjhCQgotOjEwMjYwMDAwOTYyMzAwMDA5NDQyMDAxNjE0NDMwMDA0OEZCRjAwMUM2MAotOjEwMjYxMDAwMjQwMjAwMDFBNjIyMDAwMDhGQkYwMDFDOEZCMjAwMTgwOAotOjEwMjYyMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAxOAotOjEwMjYzMDAwOEY4OTAwMjgyN0JERkZFMEFGQkYwMDE4OEQyMjAwMjgzQQotOjEwMjY0MDAwMjc0ODA0MDAzMEU3MDBGRkFGNDIwMDM4OEQyMjAwMkNGRAotOjEwMjY1MDAwQUY4ODAwMzBBRjQyMDAzQzNDMDIwMDA1QUY0MjAwMzA4MgotOjEwMjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQotOjEwMjY3MDAwMDAwMDAwMDAwMDAwMDAwMDhDODIwMDBDOEM4MjAwMEMyNgotOjEwMjY4MDAwQUQwMjAwMDA4QzgyMDAxMEFEMDIwMDA0OEM4MjAwMThBNAotOjEwMjY5MDAwQUQwMjAwMDg4QzgyMDAxQ0FEMDIwMDBDOENBMjAwMTQ1QwotOjEwMjZBMDAwQUQwMjAwMTA4QzgyMDAyMEFEMDIwMDE0OTA4MjAwMDU2MwotOjEwMjZCMDAwMzA0MjAwRkYwMDAyMTIwMEFEMDIwMDE4OENBMjAwMTg4OAotOjEwMjZDMDAwQUQwMjAwMUM4Q0EyMDAwQ0FEMDIwMDIwOENBMjAwMTBGOAotOjEwMjZEMDAwQUQwMjAwMjQ4Q0EyMDAxQ0FEMDIwMDI4OENBMjAwMjBCOAotOjEwMjZFMDAwQUQwMjAwMkNBRDA2MDAzMEFEMDAwMDM0OTc4MzAwMjYwQgotOjEwMjZGMDAwMzQwMkZGRkYxNDYyMDAwMjAwNjAyMDIxMzQwNEZGRkY1NwotOjEwMjcwMDAwMTBFMDAwMTFBRDA0MDAzODk1MjMwMDM2OTUyNDAwMzYwMgotOjEwMjcxMDAwMjQwMjAwMDEzMDYzRkZGRjAwMDMxOEMyMDA2OTE4MjE4MgotOjEwMjcyMDAwOTA2NTAwNDAzMDg0MDAwNzAwODIxMDA0MDA0NTEwMjVBOQotOjEwMjczMDAwQTA2MjAwNDA4RjgyMDAyODk0NDIwMDU2MzA0MkZGRkY4MgotOjEwMjc0MDAwMEEwMDA5QURBRDAyMDAzQzk1MjMwMDM2OTUyNDAwMzYwMQotOjEwMjc1MDAwMjQwMjAwMDEzMDYzRkZGRjAwMDMxOEMyMDA2OTE4MjE0MgotOjEwMjc2MDAwOTA2NTAwNDAzMDg0MDAwNzAwODIxMDA0MDAwMjEwMjdBQQotOjEwMjc3MDAwMDA0NTEwMjRBMDYyMDA0MEFEMDAwMDNDMDAwMDAwMDBCNQotOjEwMjc4MDAwMDAwMDAwMDAwMDAwMDAwMDNDMDIwMDA2MzQ0MjAwNDA0RgotOjEwMjc5MDAwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAotOjEwMjdBMDAwOEY0MjAwMDAzMDQyMDAxMDEwNDBGRkZEOEY4NjAwMjg0RAotOjEwMjdCMDAwQUY4ODAwMzAyNEMyMDA1NjI0QzcwMDNDMjRDNDAwMjgzRgotOjEwMjdDMDAwMjRDNTAwMzIyNEM2MDAzNjBFMDAwOTI3QUZBMjAwMTAyRgotOjEwMjdEMDAwOEZCRjAwMTgwM0UwMDAwODI3QkQwMDIwOEY4MzAwMjQ2RQotOjEwMjdFMDAwM0MwNTA4MDA4Q0E1MDBFODhGODIwMDM0MzA2MzNGRkY3MQotOjEwMjdGMDAwMDAwMzE5ODAwMDQ1MTAyMTAwNDMxMDIxMjQwM0ZGODBBRAotOjEwMjgwMDAwMzA0NTAwN0YwMDQzMTAyNEFGNDIwMDI4MDM0NTE4MjFDMwotOjEwMjgxMDAwM0MwMjAwMEMwMDYyMzAyMTkwQzIwMDBEMDAwMDM4MjEwMwotOjEwMjgyMDAwMzQ0MjAwMTBBMEMyMDAwRDhGODkwMDI4OEY4QTAwMjQzNgotOjEwMjgzMDAwOTUyMzAwMzYwMDBBMTM4MjMwNDgwMDAzMjQwMjAwMDE2OQotOjEwMjg0MDAwQTRDMzAwMEUxMTAyMDAwQjI5MDIwMDAyMTA0MDAwMDU3MwotOjEwMjg1MDAwMjQwMjAwMDIxMTAwMDAwQzI0MDMwMDAxMEEwMDA5RjAwOAotOjEwMjg2MDAwMDAwMDE4MjExMTAyMDAwNjAwMDAwMDAwMEEwMDA5RjAxMwotOjEwMjg3MDAwMDAwMDE4MjE4Q0MyMDAyQzBBMDAwOUYwMjQ0MzAwMDEzQQotOjEwMjg4MDAwOENDMjAwMTQyNDQzMDAwMThDQzIwMDE4MDA0MzEwMkI5QQotOjEwMjg5MDAwMTQ0MDAwMDMwMDAwMDAwMDBBMDAwOUY5MjQwNzAwMDFBOQotOjEwMjhBMDAwOTUyMjAwM0UyNDQyMDAwMUE1MjIwMDNFMDAwQTEzODIyOAotOjEwMjhCMDAwMzA0MzAwMDMyQzYyMDAwMjEwNDAwMDA5MDA4MDI4MjFGMAotOjEwMjhDMDAwMTQ2MDAwMDQwMDAwMDAwMDk0QzIwMDM2MEEwMDBBMDlFNwotOjEwMjhEMDAwMzA0NkZGRkY4Q0M2MDAzODBBMDAwQTA5MDA4MDI4MjExNAotOjEwMjhFMDAwMDAwMDMwMjEzQzA0MDgwMDI0ODQ0RUIwMEEwMDA5NUEzQwotOjEwMjhGMDAwMDAwMDAwMDAyNzQ5MDEwMDhEMjIwMDBDOTUyMzAwMDZFRQotOjEwMjkwMDAwMDEyMDIwMjEwMDAyMTYwMjMwNDUwMDNGMzA2M0ZGRkYwNgotOjEwMjkxMDAwMjQwMjAwMjcyOEE2MDAyODEwQTIwMDBFQUY4MzAwMjQ1RQotOjEwMjkyMDAwMTBDMDAwMDgyNDAyMDAzMTI0MDIwMDIxMTBBMjAwMDk3NgotOjEwMjkzMDAwMjQwMjAwMjUxMEEyMDAwNzkzODIwMDJEMEEwMDBBMjcxNgotOjEwMjk0MDAwMDAwMDAwMDAxMEEyMDAwNTkzODIwMDJEMEEwMDBBMjc1MwotOjEwMjk1MDAwMDAwMDAwMDAwQTAwMDlDNTAwMDAwMDAwMEEwMDA2Rjc5OAotOjEwMjk2MDAwMDAwMDAwMDA5NTIzMDAwNjkxMjQwMDA1OEQyNTAwMEMzMQotOjEwMjk3MDAwOEQyNjAwMTA4RDI3MDAxODhEMjgwMDFDOEQyOTAwMjAyMQotOjEwMjk4MDAwMjQ0MjAwMDEzQzAxMDgwMEE0MjM0RUI2M0MwMTA4MDA4QgotOjEwMjk5MDAwQTAyNDRFQjUzQzAxMDgwMEFDMjU0RUJDM0MwMTA4MDAwQgotOjEwMjlBMDAwQUMyNjRFQzAzQzAxMDgwMEFDMjc0RUM4M0MwMTA4MDBENAotOjEwMjlCMDAwQUMyODRFQ0MzQzAxMDgwMEFDMjk0RUQwMDNFMDAwMDgwNgotOjEwMjlDMDAwQTM4MjAwMkQ4Rjg3MDAyODI3QkRGRkMwQUZCMzAwMzQzRQotOjEwMjlEMDAwQUZCMjAwMzBBRkIxMDAyQ0FGQjAwMDI4QUZCRjAwMzhBRAotOjEwMjlFMDAwM0MwMjA4MDA4QzQyMDBEMDk0RTMwMDMwMzBCMEZGRkY3RQotOjEwMjlGMDAwMDA1MDEwMDczMDQ1RkZGRjMwNjNGRkZGMDBDMDk4MjFGMwotOjEwMkEwMDAwQTdBMjAwMTAzQzExMDgwMDk2MzEwMEM2MTRBMzAwMDZDRQotOjEwMkExMDAwMzA5MkZGRkY4Q0UyMDAyNDI0NDIwMDMwQUY0MjAwM0NBMQotOjEwMkEyMDAwMEEwMDBBNjA4Q0UyMDAyMDk0RTIwMDMyMzA0MkZGRkY4QwotOjEwMkEzMDAwNTRBMjAwMDgyN0E0MDAxODhDRTIwMDJDMjQ0MjAwMzA4NQotOjEwMkE0MDAwQUY0MjAwM0M4Q0UyMDAyOEFGNDIwMDM4MEEwMDBBNkUxOAotOjEwMkE1MDAwOEY4NDAwMjgyN0E1MDAxMDI3QTYwMDIwMDIyMDM4MjFGNwotOjEwMkE2MDAwMEUwMDA4RTlBN0EwMDAyMDhGQTIwMDE4MjQ0MjAwMzAyMQotOjEwMkE3MDAwQUY0MjAwMzg4RkEyMDAxQ0FGNDIwMDNDOEY4NDAwMjg3OAotOjEwMkE4MDAwM0MwMjAwMDVBRjQyMDAzMDk0ODIwMDM0Mjc0MzA0MDAyQQotOjEwMkE5MDAwMzA0MkZGRkYwMjAyMTAyQjE0NDAwMDA3QUY4MzAwMzBDQQotOjEwMkFBMDAwOTQ4MjAwNTQ5NDgzMDAzNDAyMDIxMDIxMDA0MzEwMjNDNgotOjEwMkFCMDAwMEEwMDBBODIzMDQzRkZGRjk0ODMwMDU0OTQ4MjAwMzQ1QQotOjEwMkFDMDAwMDIyMzE4MjEwMDUwMTAyMzAwNjIxODIzMzA2M0ZGRkZGNwotOjEwMkFEMDAwOTQ4MjAwMTYzMDQyRkZGRjE0NDMwMDAzMDAwMDAwMDAwMAotOjEwMkFFMDAwMEEwMDBBOTAyNDAzMDAwMTk0ODIwMDE2MzA0MkZGRkY3RQotOjEwMkFGMDAwMDA0MzEwMkIxMDQwMDAwNThGODIwMDMwOTQ4MjAwMTY5NgotOjEwMkIwMDAwMDA2MjEwMjMzMDQzRkZGRjhGODIwMDMwQUM1MzAwMDA3RgotOjEwMkIxMDAwQUM0MDAwMDRBQzUyMDAwOEFDNDMwMDBDM0MwMjAwMDY4MAotOjEwMkIyMDAwMzQ0MjAwMTBBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDBGRQotOjEwMkIzMDAwMDAwMDAwMDA4RjQyMDAwMDMwNDIwMDEwMTA0MEZGRkRGNgotOjEwMkI0MDAwMDAxMDE4QzIwMDY0MTgyMTkwNjUwMDQwMzIwNDAwMDc4QwotOjEwMkI1MDAwMjQwMjAwMDE4RkJGMDAzODhGQjMwMDM0OEZCMjAwMzBFMQotOjEwMkI2MDAwOEZCMTAwMkM4RkIwMDAyODAwODIxMDA0MDA0NTEwMjU4MgotOjEwMkI3MDAwMjdCRDAwNDAwM0UwMDAwOEEwNjIwMDQwMjdCREZGQTg3OQotOjEwMkI4MDAwQUZCNjAwNTBBRkI1MDA0Q0FGQjQwMDQ4QUZCMzAwNDQ4RgotOjEwMkI5MDAwQUZCMTAwM0NBRkJGMDA1NEFGQjIwMDQwQUZCMDAwMzg5RgotOjEwMkJBMDAwOEM5MDAwMDAzQzAyMDgwMDhDNDIwMEU4OEY4NjAwMzRDNAotOjEwMkJCMDAwOTYwMzAwMDIyNDEzRkY4MDAwQzIzMDIxMzA2MzNGRkZFMAotOjEwMkJDMDAwMDAwMzE5ODAwMEMzMzgyMTAwRjMxMDI0OTBCMjAwMDBFNAotOjEwMkJEMDAwQUY0MjAwMkM5MjAzMDAwMjMwRTIwMDdGMDM0MjMwMjExQQotOjEwMkJFMDAwM0MwMjAwMEUwMEMyODgyMTMwNjMwMEMwMjQwMjAwNDA3NQotOjEwMkJGMDAwMDA4MEE4MjEwMEEwQjAyMTE0NjIwMDI2MDAwMEEwMjFCRQotOjEwMkMwMDAwOEUzNDAwMzg4RTIyMDAxODE0NDAwMDAyMjQwMjAwMDE4NQotOjEwMkMxMDAwQUUyMjAwMTg5MjAyMDAwRDMwNDIwMDIwMTQ0MDAwMTUzMAotOjEwMkMyMDAwOEY4MjAwMzQzQzAzMDgwMDhDNjMwMERDMDAxMjM4QzA0MwotOjEwMkMzMDAwMDAxMjMxNDAwMDQzMTAyMTAwQzczMDIxMDA0NjM4MjFFNgotOjEwMkM0MDAwMzBFMzAwMDczQzAyMDA4MDMwRTYwMDc4MDBDMjMwMjUwNwotOjEwMkM1MDAwMDM0MzE4MjEwMEYzMTAyNEFGNDIwODAwMjQ2MzA5MDA0NQotOjEwMkM2MDAwQUY0NjA4MTA4RTIyMDAxODhDNjMwMDA4MDA0MzEwMjEyNAotOjEwMkM3MDAwQUUyMjAwMTg4RTIyMDAyQzhFMjMwMDE4MjQ0MjAwMDE2MAotOjEwMkM4MDAwMDA2MjE4MkIxMDYwMDAzRDAwMDAwMDAwMEEwMDBCNDQ5OQotOjEwMkM5MDAwMDAwMDAwMDA5MjAzMDAwMjI0MDJGRkMwMDA0MzEwMjQ0MQotOjEwMkNBMDAwMzA0MjAwRkYxNDQwMDAwNTI0MDIwMDAxQUUyMjAwMTg0QgotOjEwMkNCMDAwOTYyMjAwMzYwQTAwMEIyRDMwNTRGRkZGOEUyMjAwMTQ5RQotOjEwMkNDMDAwMjQ0MjAwMDFBRTIyMDAxODkyMDIwMDAwMDAwMjE2MDAwOQotOjEwMkNEMDAwMDAwMjE2MDMwNDQxMDAyOTAwMDAwMDAwOTYwMjAwMDJEMQotOjEwMkNFMDAwMjdBNDAwMTAwMDgwMjgyMUE3QTIwMDE2OTYwMjAwMDI0NwotOjEwMkNGMDAwMjQwNzAwMDEwMDAwMzAyMTMwNDJGRkZGQUY4MjAwMjQ5MgotOjEwMkQwMDAwMEUwMDA5NUFBRkEwMDAxQzk2MDMwMDAyM0MwNDA4MDAwNAotOjEwMkQxMDAwOEM4NDAwRTg4RjgyMDAzNDMwNjMzRkZGMDAwMzE5ODAwOQotOjEwMkQyMDAwMDA0NDEwMjEwMDQzMTAyMTMwNDMwMDdGM0MwNTAwMEM3QgotOjEwMkQzMDAwMDA1MzEwMjQwMzQzMTgyMUFGNDIwMDI4MDA2NTE4MjFENgotOjEwMkQ0MDAwOTA2MjAwMEQwMDEyMjE0MDMwNDIwMDdGQTA2MjAwMEQxMQotOjEwMkQ1MDAwM0MwMzA4MDA4QzYzMDBFNDhGODIwMDM0MDA0MzEwMjFBMAotOjEwMkQ2MDAwMDA0NDM4MjEzMEUyMDA3RjAzNDIxMDIxMDA0NTEwMjE0OQotOjEwMkQ3MDAwMDBGMzE4MjRBRjQzMDAyOEFFQTIwMDAwOTIyMjAwMERGOQotOjEwMkQ4MDAwMzA0MjAwMTAxMDQwMDAxMzAyQTAyMDIxOEY4MzAwMjg0MQotOjEwMkQ5MDAwOEVBNDAwMDAwMjgwMzAyMTk0NjIwMDNFMjQ0MkZGRkY5NgotOjEwMkRBMDAwQTQ2MjAwM0U5NDg0MDAwMjk2MjUwMDBFMzA4NEZGRkY0QQotOjEwMkRCMDAwMEUwMDBBM0YzMEE1RkZGRjhGODIwMDI4OTQ0MzAwMzRBNQotOjEwMkRDMDAwOTYyMjAwMEUxNDQzMDAwMzAyQTAyMDIxMjQwMjAwMDFEOQotOjEwMkREMDAwQTM4MjAwMkMwMkMwMjgyMTBFMDAwOENGMDAwMDAwMDBCMgotOjEwMkRFMDAwOEZCRjAwNTQ4RkI2MDA1MDhGQjUwMDRDOEZCNDAwNDg5MQotOjEwMkRGMDAwOEZCMzAwNDQ4RkIyMDA0MDhGQjEwMDNDOEZCMDAwMzhEOQotOjEwMkUwMDAwMDNFMDAwMDgyN0JEMDA1ODhGODUwMDI4MjdCREZGRDBBQwotOjEwMkUxMDAwQUZCNDAwMjhBRkIyMDAyMEFGQkYwMDJDQUZCMzAwMjQ4NgotOjEwMkUyMDAwQUZCMTAwMUNBRkIwMDAxODkwQTgwMEQwOTBBNjAwRDFBMAotOjEwMkUzMDAwM0MwMjA4MDA4QzQyMDBFNDhGODMwMDM0MzBDNzAwRkY1RQotOjEwMkU0MDAwQTNBNjAwMTAwMDYyMTgyMTAwMDcxMTQwMDA2MjE4MjE5QgotOjEwMkU1MDAwMzA2MjAwN0YwMzQyMjAyMTNDMDIwMDBDMDA4MjIwMjFDRQotOjEwMkU2MDAwMjQwMkZGODAwMDYyMTgyNDMxMTIwMEZGOENCMTAwRDhDOAotOjEwMkU3MDAwQUZBNDAwMTQ4Q0IzMDBEQzAwMDBBMDIxQUY0MzAwMjhGNQotOjEwMkU4MDAwMTBGMjAwMUYyNDAyMDAwMThGQTYwMDE0MjdBNDAwMTREMgotOjEwMkU5MDAwMjdBNTAwMTA4Q0MyMDAwNDAyMjI4MDIxMDI3MDEwMjM5QQotOjEwMkVBMDAwMDQ0MDAwMTcyNDAyMDAwMTkwQzMwMDBEMjQwMkZGODA5QgotOjEwMkVCMDAwMDA0MzEwMjQzMDQyMDBGRjE0NDAwMDA3MDIwMDg4MjEyNAotOjEwMkVDMDAwOTBDMjAwMEQzNDQyMDA0MDBFMDAwOENGQTBDMjAwMEQ5OQotOjEwMkVEMDAwMEEwMDBCOEI5M0EyMDAxMDBFMDAwQUFEMjQxNDAwMDEwRgotOjEwMkVFMDAwOEY4MzAwMjhBQzcwMDBEODkzQTIwMDEwQTA2MjAwRDE5QwotOjEwMkVGMDAwOTNBMjAwMTAxNDUyRkZFNThGQTYwMDE0MjQwMjAwMDFEMwotOjEwMkYwMDAwMTY4MjAwMDQ4RkJGMDAyQzBFMDAwNkY3MDAwMDAwMDBBMAotOjEwMkYxMDAwOEZCRjAwMkM4RkI0MDAyODhGQjMwMDI0OEZCMjAwMjAwNQotOjEwMkYyMDAwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4MjdCRDAwMzBFRgotOjEwMkYzMDAwMjdCREZGRDhBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTQ2QgotOjEwMkY0MDAwQUZCMDAwMTBBRkJGMDAyMDAwODA5ODIxMDBFMDgwMjFDQQotOjEwMkY1MDAwMzBCMUZGRkYwRTAwMDU2NDMwRDIwMEZGMDAwMDAwMDAxQQotOjEwMkY2MDAwMDAwMDAwMDAwMDAwMDAwMDhGODIwMDIwQUM1MTAwMDAzMwotOjEwMkY3MDAwQUM1MjAwMDRBQzUzMDAwOEFDNDAwMDBDQUM0MDAwMTA1NAotOjEwMkY4MDAwQUM0MDAwMTRBQzQwMDAxODNDMDMwODAwOTQ2MzRFOTYxQgotOjEwMkY5MDAwMDIwMzgwMjVBQzUwMDAxQzAwMDAwMDAwMDAwMDAwMDA2RgotOjEwMkZBMDAwMDAwMDAwMDAyNDA0MDAwMThGQkYwMDIwOEZCMzAwMUMyQwotOjEwMkZCMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDA1ODk3RAotOjEwMkZDMDAwMjdCRDAwMjgyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQzOQotOjEwMkZEMDAwMzBBNUZGRkYzMEM2MDBGRjAwODA4MDIxMjQwMjBDODA1NgotOjEwMkZFMDAwQUY0MjAwMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQwotOjEwMkZGMDAwMDAwMDAwMDAwMDAwMDAwMDBFMDAwQjlBMDAwMDAwMDAxRQotOjEwMzAwMDAwM0MwNDA4MDAyNDg0MDBFMDhDODIwMDAwMjQwM0ZGODAzQwotOjEwMzAxMDAwOEZCRjAwMTQwMjAyMTAyMTAwNDMxMDI0QUY0MjAwMjQ4RAotOjEwMzAyMDAwOEM4MjAwMDAzQzAzMDAwQTAyMDI4MDIxMzIxMDAwN0ZFMwotOjEwMzAzMDAwMDM1MDEwMjE4RkIwMDAxMDAwNDMxMDIxMjdCRDAwMTg0RAotOjEwMzA0MDAwMDNFMDAwMDhBRjgyMDAyODI3QkRGRkU4QUZCRjAwMTBGMwotOjEwMzA1MDAwOEY0NDAxNDAzQzAzMDgwMDhDNjMwMEUwMjQwMkZGODBBMQotOjEwMzA2MDAwQUY4NDAwMzQwMDgzMTgyMTAwNjIxMDI0QUY0MjAwMjQ5MgotOjEwMzA3MDAwM0MwMjAwMDgwMzQyNDAyMTk1MDUwMDAyMzA2MzAwN0ZCNgotOjEwMzA4MDAwM0MwMjAwMEEwMzQzMTgyMTAwNjIxODIxMzBBNUZGRkYwQgotOjEwMzA5MDAwMzQwMkZGRkYwMDAwMzAyMTNDMDc2MDIwMTBBMjAwMDYzMAotOjEwMzBBMDAwQUY4MzAwMjgyNDAyRkZGRkE1MDIwMDAyOTQ2NTAwRDQyQwotOjEwMzBCMDAwMEUwMDBCQkYzMEE1RkZGRjhGQkYwMDEwMjQwMjBDODA1NQotOjEwMzBDMDAwMjdCRDAwMTgwM0UwMDAwOEFGNDIwMDI0M0MwMjAwMDhCRQotOjEwMzBEMDAwMDM0MjQwMjE5NTAyMDAwMjNDMEEwODAwOTU0QTAwQzZCRQotOjEwMzBFMDAwMzA0NkZGRkYxNEMwMDAwNzM0MDJGRkZGOEY4MjAwMjgyNAotOjEwMzBGMDAwOEY4NDAwMzQzQzA3NjAyMDk0NDUwMEQ0MEEwMDBDMjhEQgotOjEwMzEwMDAwMzBBNUZGRkYxMEMyMDAyNDhGODcwMDI4OTRFMjAwNTRFRQotOjEwMzExMDAwOTRFNDAwMTYzMDQ1RkZGRjAwQTYxMDIzMDBBNjE4MkJFQwotOjEwMzEyMDAwMzA4OUZGRkYxMDYwMDAwNDMwNDRGRkZGMDBDNTEwMjMwQQotOjEwMzEzMDAwMDEyMjEwMjMzMDQ0RkZGRjAwOEExMDJCMTA0MDAwMENBNgotOjEwMzE0MDAwMDEyQTEwMjMyNDAyMDAwMUE1MDIwMDE2MjQwMkZGRkYxOQotOjEwMzE1MDAwQTUwMjAwMDI5NEU1MDBENDhGODQwMDM0MDAwMDMwMjFFMQotOjEwMzE2MDAwMzBBNUZGRkYzQzA3NjAyMDBBMDAwQkJGMDAwMDAwMDBGNQotOjEwMzE3MDAwMDA0NDEwMkExMDQwMDAwODAwMDAwMDAwOTUwMjAwMTZDQwotOjEwMzE4MDAwMzA0MjAwMDExMDQwMDAwNDAwMDAwMDAwOTc0MjAwN0UyMQotOjEwMzE5MDAwMjQ0MjAwMTRBNTAyMDAxNjAzRTAwMDA4MDAwMDAwMDAwRAotOjEwMzFBMDAwOEY4NDAwMjgyN0JERkZFMEFGQkYwMDE4OTQ4MjAwMzQ1MQotOjEwMzFCMDAwOTQ4MzAwM0UxMDYwMDAxQTMwNDhGRkZGOTM4MzAwMkM3OAotOjEwMzFDMDAwMjQwMjAwMDExNDYyMDAyNzhGQkYwMDE4OEY4MjAwMjg5QwotOjEwMzFEMDAwMDAwODE4QzIzMTA4MDAwNzAwNjIxODIxMjQ0NzAwM0E4RAotOjEwMzFFMDAwMjQ0OTAwNTQyNDQ0MDAyMDI0NDUwMDMwMjQ0NjAwMzQ1RgotOjEwMzFGMDAwOTA2MjAwNDAzMDQyMDBGRjAxMDIxMDA3MzA0MjAwMDE5RgotOjEwMzIwMDAwMTA0MDAwMTY4RkJGMDAxODBFMDAwOTI3QUZBOTAwMTA0QwotOjEwMzIxMDAwOEY4MjAwMjg5NDQyMDAzNDBBMDAwQzQxMzA0OEZGRkY5RQotOjEwMzIyMDAwOTQ4MzAwMzY5NDgyMDAzNDEwNDMwMDBFOEZCRjAwMTg0MAotOjEwMzIzMDAwOTQ4MjAwMzZBNDgyMDAzNDk0ODIwMDU2QTQ4MjAwNTQwMgotOjEwMzI0MDAwOEM4MjAwMkNBQzgyMDAyNDk0ODIwMDMyQTQ4MjAwMzA1NAotOjEwMzI1MDAwOTQ4MjAwM0NBNDgyMDAzQThGQkYwMDE4MEEwMDBDMDEzRgotOjEwMzI2MDAwMjdCRDAwMjAwM0UwMDAwODI3QkQwMDIwMjdCREZGRThBMAotOjEwMzI3MDAwQUZCRjAwMTA4RjRBMDEwMDNDMDUwODAwOENBNTAwRTA5QwotOjEwMzI4MDAwM0MwMjA4MDA5MDQyNEVCQzNDMEMwODAwOTU4QzRFQjZBNwotOjEwMzI5MDAwMDE0NTI4MjEzMDRCMDAzRjMwQTIwMDdGMDM0MjQwMjFFRQotOjEwMzJBMDAwMzk2OTAwMzIzQzAyMDAwQTM5NjMwMDNGMkM2MzAwMDE5NwotOjEwMzJCMDAwMDEwMjQwMjEyRDI5MDAwMTI0MDJGRjgwMDBBMjI4MjRDMAotOjEwMzJDMDAwMDEyMzQ4MjVBRjhBMDAzNDAwODAxODIxQUY0NTAwMjQyRgotOjEwMzJEMDAwMDAwMDMwMjEwMDgwMjgyMTI0MDcwMDAxQUY4ODAwMjg0OQotOjEwMzJFMDAwM0MwNDA4MDAyNDg0NEVCMEFGOEMwMDI0MTUyMDAwMDY1NgotOjEwMzJGMDAwQTM4MDAwMkQyNDAyMDAyMDE1NjIwMDBFMzQwMkZGRkY3RgotOjEwMzMwMDAwMTU4MjAwMEMwMDAwMDAwMDI0MDIwMDIwMTU2MjAwMDU1OAotOjEwMzMxMDAwMDAwMDAwMDA4QzYzMDAxNDI0MDJGRkZGMTA2MjAwMDcwRAotOjEwMzMyMDAwMDAwMDAwMDAwRTAwMDk1QTAwMDAwMDAwMEEwMDBDOUQ3OQotOjEwMzMzMDAwMDAwMDAwMDAwRTAwMDlDNTAwNjAyMDIxMEUwMDBDMzZDMAotOjEwMzM0MDAwMDAwMDAwMDA4RkJGMDAxMDI0MDIwQzgwMjdCRDAwMTg3MQotOjEwMzM1MDAwMDNFMDAwMDhBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTA3OQotOjEwMzM2MDAwMjdCREZGQTBBRkIxMDAzQzAwODIxMDIxMjQxMUZGODBENwotOjEwMzM3MDAwQUZCRTAwNThBRkI3MDA1NEFGQjIwMDQwQUZCMDAwMzg5NgotOjEwMzM4MDAwQUZCRjAwNUNBRkI2MDA1MEFGQjUwMDRDQUZCNDAwNDg2MwotOjEwMzM5MDAwQUZCMzAwNDQwMDUxMTAyNDhGNDgwMDI0OEY0OTAwMjgwNwotOjEwMzNBMDAwOEY0NzAwMjhBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTAxNgotOjEwMzNCMDAwMDA4MDkwMjEyNDA2MDAwNjAwODIxMDIxMzA0MjAwN0YwOAotOjEwMzNDMDAwMDM0MjE4MjEzQzAyMDAwQTAwNjI4MDIxM0MwMjAwMUZENwotOjEwMzNEMDAwMzQ0MkZGODAwMEUyMzgyNDI3QTQwMDEwMjYwNTAwRjBDNAotOjEwMzNFMDAwMDEyMkYwMjQwMTAyQjgyNDBFMDAwNUVFQUZBNzAwMzA0MAotOjEwMzNGMDAwOEZBMjAwMThBRTAyMDBDNDhGQTIwMDFDQUUwMjAwQzg0QgotOjEwMzQwMDAwOEZBMjAwMjRBRTAyMDBDQzkzQTQwMDEwOTIwMzAwRDEzRQotOjEwMzQxMDAwMjQwMkZGODAwMDgyMTAyNDAwNDMxMDI1MzA0OTAwRkY2MQotOjEwMzQyMDAwMzA4MzAwN0YzMTIyMDA3RjAwNjIxMDJBMTA0MDAwMDRBOAotOjEwMzQzMDAwMDAwMzEwQzAwMTMxMTAyNjMwNDkwMEZGMDAwMzEwQzAwNgotOjEwMzQ0MDAwMDAwMzE5NDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREM5NQotOjEwMzQ1MDAwOTIwNDAwRDIwMjQyMTAyMTAwNDMxMDIxMDA1MTEwMjQ5NgotOjEwMzQ2MDAwQUY0MjAwMjg5M0EzMDAxMDMwNjMwMDdGMDAwMzEwQzAxOAotOjEwMzQ3MDAwMDAwMzE5NDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREM2NQotOjEwMzQ4MDAwMDI0MjEwMjEwMDQzMTAyMTMwNDIwMDdGMDM0MjE4MjFFNAotOjEwMzQ5MDAwM0MwMjAwMEMwMDYyNDAyMThGQTMwMDE0MjQwMkZGRkZCNQotOjEwMzRBMDAwMTA2MjAwMzAzMDk1MDBGRjkzQTIwMDExOTUwMzAwMTRDNAotOjEwMzRCMDAwMzA0NDAwRkYzMDYzRkZGRjAwNjQxODJCMTA2MDAwMERFNAotOjEwMzRDMDAwMDAwMDAwMDA5NTA0MDAxNDhEMDcwMDFDOEQwNjAwMThGNAotOjEwMzREMDAwMzA4NEZGRkYwMDQ0MjAyMzAwMDQyMTAwMDAwMDEwMjE1RAotOjEwMzRFMDAwMDBFNDM4MjEwMEU0MjAyQjAwQzIzMDIxMEEwMDBEMTcyRgotOjEwMzRGMDAwMDBDNDMwMjE5NTA0MDAxNDhEMDcwMDFDOEQwNjAwMThBRgotOjEwMzUwMDAwMzA4NEZGRkYwMDgyMjAyMzAwMDQyMTAwMDAwMDEwMjFFRQotOjEwMzUxMDAwMDA4MDE4MjEwMEMyMzAyMzAwRTQyMDJCMDBDNDMwMjM5NwotOjEwMzUyMDAwMDBFMzM4MjNBRDA3MDAxQ0FEMDYwMDE4OTNBMjAwMTE3QwotOjEwMzUzMDAwQTUwMjAwMTQ5N0EyMDAxMkE1MDIwMDE2OEZBMjAwMTQ4MwotOjEwMzU0MDAwQUQwMjAwMTA4RkEyMDAxNEFEMDIwMDBDOTNBMjAwMTE3NgotOjEwMzU1MDAwQTUwMjAwMjA5N0EyMDAxMkE1MDIwMDIyOEZBMjAwMTQ0QgotOjEwMzU2MDAwQUQwMjAwMjQyNDA2RkY4MDAyNDYxMDI0MzI1NjAwN0Y1QwotOjEwMzU3MDAwQUY0MjAwMjQwMzU2MTgyMTNDMDIwMDBBMDA2MjgwMjE1OQotOjEwMzU4MDAwOEUwMjAwNEM4RkEyMDAyMDMxMjQwMDdGMDAwNDI4QzA0RQotOjEwMzU5MDAwQUUwMjAwNTA4RkEyMDAyMDAwMDQyMTQwMDA4NTI4MjFBNwotOjEwMzVBMDAwQUUwMjAwNzA5M0EyMDAxMDAxMjA4ODIxQTIwMjAwODNDNQotOjEwMzVCMDAwOTNBMjAwMTBBMjAyMDA3OTkyMDIwMDg1MzA0MjAwM0ZERgotOjEwMzVDMDAwQTIwMjAwODUzQzAyMDgwMDhDNDIwMERDMDI0MjEwMjE2RAotOjEwMzVEMDAwMDA0NTEwMjEwMDQ2MTAyNEFGNDIwMDJDM0MwMjA4MDA5OAotOjEwMzVFMDAwOEM0MjAwRTQzQzAzMDgwMDhDNjMwMERDMDI0MjEwMjFBMgotOjEwMzVGMDAwMDA0NDEwMjEwMDQ2MTAyNEFGNDIwMDI4M0MwMjA4MDA3RAotOjEwMzYwMDAwOEM0MjAwRTQwMjQzMTgyMTAwNjUxODIxMDI0MjEwMjE3NwotOjEwMzYxMDAwMDA0NDEwMjEzMDQyMDA3RjMwNjMwMDdGOTNBNTAwMTBFQQotOjEwMzYyMDAwMDM0MjIwMjEwMzQzMTgyMTNDMDIwMDBFMDA2MjQwMjE4NgotOjEwMzYzMDAwM0MwMjAwMEMxMEIxMDA4QzAwODI0ODIxMzIzMzAwN0YyNAotOjEwMzY0MDAwMTY2MDAwMTkyNDA0RkY4MDNDMDIwODAwOEM0MjAwREM1NAotOjEwMzY1MDAwMDI0MjEwMjEwMDQ0MTAyNEFGNDIwMDJDM0MwMjA4MDAxQQotOjEwMzY2MDAwOEM0MjAwRTQzQzAzMDgwMDhDNjMwMERDMDI0MjEwMjEyMQotOjEwMzY3MDAwMDA0NDEwMjRBRjQyMDAyODNDMDIwODAwOEM0MjAwRTRDMQotOjEwMzY4MDAwMDI0MzE4MjEzMDYzMDA3RjAyNDIxMDIxMzA0MjAwN0Y0NAotOjEwMzY5MDAwMDM0MjIwMjEwMzQzMTgyMTNDMDIwMDBFMDA2MjQwMjExNgotOjEwMzZBMDAwM0MwMjAwMEMwMDgyNDgyMTkxMjQwMDBEMjQxNEZGODA2QwotOjEwMzZCMDAwMDAwMDEwMjEwMDk0MjAyNUExMjQwMDBEOTUwNDAwMDI5MwotOjEwMzZDMDAwOTUwNTAwMTQ4RDA3MDAxQzMwODRGRkZGMzBBNUZGRkYxNwotOjEwMzZEMDAwOEQwNjAwMTgwMDg1MjAyMzAwMDQyMTAwMDBFNDM4MjExNQotOjEwMzZFMDAwMDBDMjMwMjEwMEU0MjAyQjAwQzQzMDIxQUQwNzAwMUNCMwotOjEwMzZGMDAwQUQwNjAwMTg5NTAyMDAwMkE1MDIwMDE0QTUwMDAwMTZGMAotOjEwMzcwMDAwOEQwMjAwMDhBRDAyMDAxMDhEMDIwMDA4QUQwMjAwMEMxMQotOjEwMzcxMDAwOTUwMjAwMDJBNTAyMDAyMEE1MDAwMDIyOEQwMjAwMDhFQgotOjEwMzcyMDAwQUQwMjAwMjQ5MTIyMDAwRDMwNDIwMDQwMTA0MDAwNDJDMgotOjEwMzczMDAwMjYyMjAwMDEzQzAyMDgwMDhDNDIwMEUwQTNCMzAwMjhDRQotOjEwMzc0MDAwM0MxMDAwMEEwMjQyMTAyMTAwNTQxMDI0QUY0MjAwMjQxMQotOjEwMzc1MDAwM0MwMjA4MDA4QzQyMDBFMEEzODAwMDJDMjdBNDAwMkMyRgotOjEwMzc2MDAwMDI0MjEwMjEzMDQyMDA3RjAzNDIxODIxMDA3MDE4MjFDQwotOjEwMzc3MDAwOEM2MjAwRDg4RDI2MDAwNDI3QTUwMDI4QUZBOTAwMkM1NAotOjEwMzc4MDAwMDA0NjEwMjFBQzYyMDBEODBFMDAwQUFEQUY4MzAwMjhCRAotOjEwMzc5MDAwOTNBMzAwMjg4RjgyMDAyODBFMDAwNkY3QTA0MzAwRDFEMwotOjEwMzdBMDAwMEUwMDBDMzYwMDAwMDAwMDAyNTQxMDI0QUY0MjAwMjQyQQotOjEwMzdCMDAwM0MwMjA4MDA4QzQyMDBEQzAwMTMyOTQwMDAxMzIwQzBBQQotOjEwMzdDMDAwMDBBNDIwMjEwMjQyMTAyMTAwNDQxMDIxMDA1NDEwMjRBMgotOjEwMzdEMDAwQUY0MjAwMkMzQzAyMDgwMDhDNDIwMEU0M0MwMzA4MDA4RAotOjEwMzdFMDAwOEM2MzAwREMwMzU2MzAyMTAyNDIxMDIxMDA0NTEwMjE3OQotOjEwMzdGMDAwMDA1NDEwMjRBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQzMAotOjEwMzgwMDAwMDI0MzE4MjEwMDY0MTgyMTAyNDIxMDIxMDA0NTEwMjFCMgotOjEwMzgxMDAwMzA0MjAwN0YzMDYzMDA3RjAzNDIyMDIxMDM0MzE4MjFBMAotOjEwMzgyMDAwM0MwMjAwMEUwMDYyNDAyMTNDMDIwMDBDMDBEMDgwMjFDRQotOjEwMzgzMDAwMDA4MjQ4MjEyNjIyMDAwMTMwNDMwMDdGMTQ3NTAwMDVENAotOjEwMzg0MDAwMzA0NDAwRkYyNDAzRkY4MDAyMjMxMDI0MDA0MzEwMjY4RAotOjEwMzg1MDAwMzA0NDAwRkY5M0EyMDAxMDAwODA4ODIxMjUwODAwMjgzMgotOjEwMzg2MDAwMTQ0NEZGNzYyNTI5MDAyMDkzQTQwMDEwOEZBMzAwMTQ5MAotOjEwMzg3MDAwMjQwMkZGRkYxMDYyMDAwQTMwODkwMEZGMjQ4MjAwMDE0OQotOjEwMzg4MDAwMjQ4MzAwMDEzMDQyMDA3RjE0NTUwMDA1MzA2OTAwRkY5OQotOjEwMzg5MDAwMjQwM0ZGODAwMDgzMTAyNDAwNDMxMDI2MzA0OTAwRkZEQQotOjEwMzhBMDAwOTIwMjAwNzgzMDUzMDBGRjExMzMwMDMyMDEyMDg4MjE0QQotOjEwMzhCMDAwM0MwMjA4MDA4QzQyMDBEQzMyMjUwMDdGMDAwNTIwQzA1RAotOjEwMzhDMDAwMDAwNTI5NDAwMEE0MjAyMTAyNDIxMDIxMjQwNkZGODA4NwotOjEwMzhEMDAwMDA0NDEwMjEwMDQ2MTAyNEFGNDIwMDJDM0MwMzA4MDA5NQotOjEwMzhFMDAwOEM2MzAwREMzQzAyMDgwMDhDNDIwMEU0MDI0MzE4MjE5NwotOjEwMzhGMDAwMDI0MjEwMjEwMDQ1MTAyMTAwNjQxODIxMDA0NjEwMjRDNgotOjEwMzkwMDAwMzA2MzAwN0ZBRjQyMDAyODAzNDMxODIxM0MwMjAwMEVDMQotOjEwMzkxMDAwMDA2MjQwMjEzQzAyMDgwMDhDNDIwMEU0OEQwNjAwMEM0RAotOjEwMzkyMDAwMDEwMDIwMjEwMjQyMTAyMTAwNDUxMDIxMzA0MjAwN0Y3OQotOjEwMzkzMDAwMDM0MjE4MjEzQzAyMDAwQzAwNjI0ODIxMTBDMDAwMEQxNwotOjEwMzk0MDAwMDEyMDI4MjEwRTAwMDcxQjAwMDAwMDAwMjQwMkZGODAzOAotOjEwMzk1MDAwMDIyMjE4MjQyNjI0MDAwMTAwNjIyODI2MzA4MjAwN0ZEQgotOjEwMzk2MDAwMTQ1NTAwMDIzMDgzMDBGRjMwQTMwMEZGMTQ3M0ZGRDAxMgotOjEwMzk3MDAwMDA2MDg4MjE4RTAzMDA3NDNDMDI3RkZGMzQ0MkZGRkYwOQotOjEwMzk4MDAwMDA2MjE4MjRBRTAzMDA3NDBFMDAwNzNDMDI0MDIwMjFBMAotOjEwMzk5MDAwQUY1NzAwMjQ4RkEyMDAzMEFGNUUwMDI4OEZCRjAwNUNCRAotOjEwMzlBMDAwOEZCRTAwNTg4RkI3MDA1NDhGQjYwMDUwOEZCNTAwNENCMwotOjEwMzlCMDAwOEZCNDAwNDg4RkIzMDA0NDhGQjIwMDQwOEZCMTAwM0NGOQotOjEwMzlDMDAwOEZCMDAwMzgyN0JEMDA2MDAzRTAwMDA4QUY0MjAwMkMzNAotOjEwMzlEMDAwMjdCREZGRDhBRkIxMDAxQ0FGQkYwMDIwQUZCMDAwMThBQgotOjEwMzlFMDAwMjc1MTAxODg5MjIyMDAwMzI0MDhGRjgwM0MwMzAwMEEyQgotOjEwMzlGMDAwMzA0NzAwN0ZBM0E3MDAxMDhGNDYwMTgwM0MwMjA4MDBEQgotOjEwM0EwMDAwOEM0MjAwRTBBRjg2MDAzNDAwQzIyODIxMDBBODEwMjRCOAotOjEwM0ExMDAwQUY0MjAwMjQ5MjI0MDAwMDMwQTIwMDdGMDM0MjEwMjExNAotOjEwM0EyMDAwMDA0MzEwMjFBRjgyMDAyODMwODQwMDdGMjQwMjAwMDI2RQotOjEwM0EzMDAwMTQ4MjAwMjUwMDA3MTk0MDNDMDIwODAwOEM0MjAwRTQ3MwotOjEwM0E0MDAwMDBDMjEwMjEwMDQzMjgyMTMwQTIwMDdGMDM0MjE4MjEyOAotOjEwM0E1MDAwMDBBODEwMjRBRjQyMDAyODNDMDIwMDBDMDA2MjE4MjE4QwotOjEwM0E2MDAwOTA2MjAwMERBRkEzMDAxNDAwNDgxMDI1QTA2MjAwMEQ2NQotOjEwM0E3MDAwOEZBMzAwMTQ5MDYyMDAwRDMwNDIwMDQwNTA0MDAwNkE1NQotOjEwM0E4MDAwOEZCRjAwMjA4Rjg2MDAyOEEzODAwMDJDMjdBNDAwMTQ1RAotOjEwM0E5MDAwOENDMjAwRDg4QzYzMDAwNDI3QTUwMDEwMDA0MzEwMjFCRAotOjEwM0FBMDAwMEUwMDBBQURBQ0MyMDBEODkzQTMwMDEwOEY4MjAwMjg4QwotOjEwM0FCMDAwMEUwMDA2RjdBMDQzMDBEMTBFMDAwQzM2MDAwMDAwMDBGNwotOjEwM0FDMDAwMEEwMDBFRDg4RkJGMDAyMDBFMDAwNzAwMDBDMDIwMjE4MgotOjEwM0FEMDAwMEUwMDA3MEUwMDAwMDAwMDNDMDIwMDA4MDM0MjgwMjE5NwotOjEwM0FFMDAwOTIyMzAwMDE5MjAyMDA3QjE0NDMwMDRGOEZCRjAwMjBGRAotOjEwM0FGMDAwOTIyMjAwMDAzMDQ0MDA3RjI0MDIwMDA0MTA4MjAwMTc0QwotOjEwM0IwMDAwMjg4MjAwMDUxMDQwMDAwNjI0MDIwMDA1MjQwMjAwMDM1QwotOjEwM0IxMDAwMTA4MjAwMDc4RkIxMDAxQzBBMDAwRUQ5MDAwMDAwMDBCRgotOjEwM0IyMDAwMTA4MjAwMTI4RkJGMDAyMDBBMDAwRUQ5OEZCMTAwMUMzNgotOjEwM0IzMDAwOTIwNTAwODM5MjA2MDA3ODhFMDcwMDc0OEY4NDAwMzQwQgotOjEwM0I0MDAwMzBBNTAwRkYwMDA3M0UwMjMwQzYwMEZGMEUwMDA3NDQwQwotOjEwM0I1MDAwMzBFNzAwN0YwQTAwMEVEODhGQkYwMDIwMEUwMDBDQTRCMwotOjEwM0I2MDAwOEY4NDAwMzQwQTAwMEVEODhGQkYwMDIwMjQwMjBDODBGRQotOjEwM0I3MDAwQUY0MjAwMjQ5MjAyMDAzRTMwNDIwMDQwMTA0MDAwMjAzQwotOjEwM0I4MDAwMDAwMDAwMDA5MjAyMDAzRTAwMDIxNjAwMDAwMjE2MDMzMAotOjEwM0I5MDAwMDQ0MTAwMDYwMDAwMDAwMDhGODQwMDM0MEUwMDA2NzEwRQotOjEwM0JBMDAwMjQwNTAwOTMwQTAwMEVEODhGQkYwMDIwOTIwMjAwM0YyOAotOjEwM0JCMDAwMjQwMzAwMTgzMDQyMDBGRjE0NDMwMDBDOEY4NDAwMzRBQgotOjEwM0JDMDAwMjQwNTAwMzkwRTAwMDYwOTAwMDAzMDIxMEUwMDAzMzVERgotOjEwM0JEMDAwOEY4NDAwMzQyNDAyMDAxMkEyMDIwMDNGMEUwMDAzM0UzNAotOjEwM0JFMDAwOEY4NDAwMzQwQTAwMEVEODhGQkYwMDIwMjQwNTAwMzZEMQotOjEwM0JGMDAwMEUwMDA2MDkwMDAwMzAyMTBBMDAwRUQ4OEZCRjAwMjBGOQotOjEwM0MwMDAwMEUwMDAzMzU4Rjg0MDAzNDkyMDIwMDA1MzQ0MjAwMjBGOAotOjEwM0MxMDAwQTIwMjAwMDUwRTAwMDMzRThGODQwMDM0MEUwMDEwOEZCOAotOjEwM0MyMDAwOEY4NDAwMzQ4RkJGMDAyMDhGQjEwMDFDOEZCMDAwMTgyQwotOjEwM0MzMDAwMjQwMjBDODAyN0JEMDAyODAzRTAwMDA4QUY0MjAwMjRDNgotOjEwM0M0MDAwMjdCREZGRThBRkIwMDAxMEFGQkYwMDE0Mjc0MzAxMDA0RAotOjEwM0M1MDAwOTQ2MjAwMDgwMDAyMTQwMDAwMDIxNDAzMDQ0MTAwMDJGMAotOjEwM0M2MDAwMDAwMDgwMjEyNDEwMDAwMTk0NjIwMDA4MzA0MjAwODA4RQotOjEwM0M3MDAwMTA0MDAwMUEwMjAwMTAyMTk0NjIwMDA4MzA0MjIwMDAxNwotOjEwM0M4MDAwMTA0MDAwMTYwMjAwMTAyMThDNjMwMDE4M0MwMjFDMkQwRAotOjEwM0M5MDAwMzQ0MjE5RUQyNDA2MDAwNjEwNjIwMDBGM0MwNzYwMjEzMwotOjEwM0NBMDAwM0MwMjA4MDA4QzQyMDBENDEwNDAwMDA3OEY4MjAwMjg5QwotOjEwM0NCMDAwOEY4MzAwMjg5MDYyMDA2MjMwNDIwMDBGMzQ0MjAwNDAzRgotOjEwM0NDMDAwQTA2MjAwNjI4RjgyMDAyODhGODQwMDM0OTQ0NTAwRDQ2MwotOjEwM0NEMDAwMEUwMDBCQkYzMEE1RkZGRjAyMDAxMDIxOEZCRjAwMTRBNAotOjEwM0NFMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTBEQgotOjEwM0NGMDAwQUZCMTAwMTRBRkIwMDAxMEEzODAwMDJDQUZCRjAwMTgwQwotOjEwM0QwMDAwOEY0NTAxMDAzQzAzMDgwMDhDNjMwMEUwMjQwMkZGODAyMwotOjEwM0QxMDAwQUY4NTAwMzQwMEEzMTgyMTMwNjQwMDdGMDM0NDIwMjFDNAotOjEwM0QyMDAwMDA2MjE4MjQzQzAyMDAwQTAwODIyMDIxQUY0MzAwMjRENAotOjEwM0QzMDAwMjc1MDAxMDA4RTAyMDAxNDhDODMwMERDQUY4NDAwMjgyMQotOjEwM0Q0MDAwMDA0MzEwMjMxODQwMDAwNDAwMDA4ODIxOEUwMjAwMTQ1NAotOjEwM0Q1MDAwMEUwMDBCNTBBQzgyMDBEQzkyMDIwMDBCMjQwMzAwMDIyOAotOjEwM0Q2MDAwMzA0MjAwRkYxNDQzMDAyRjAwMDAwMDAwOTYwMjAwMDhCQwotOjEwM0Q3MDAwMzA0MzAwRkYyNDAyMDA4MjE0NjIwMDA1MjQwMjAwODQwNAotOjEwM0Q4MDAwMEUwMDBBMEIwMDAwMDAwMDBBMDAwRjY0MDAwMDAwMDA5MwotOjEwM0Q5MDAwMTQ2MjAwMDkyNDAyMDA4MThGODIwMDI4OEY4NDAwMzQ3RAotOjEwM0RBMDAwM0MwNzYwMjE5NDQ1MDBENDkyMDYwMDA1MzBBNUZGRkYzMgotOjEwM0RCMDAwMEEwMDBGNTMzMEM2MDBGRjE0NjIwMDI3MDAwMDAwMDAwNQotOjEwM0RDMDAwOTIwMjAwMEEzMDQzMDBGRjMwNjIwMDIwMTA0MDAwMDRERAotOjEwM0REMDAwMzA2MjAwNDA4Rjg0MDAzNDBBMDAwRjRGMjQwNjAwNDBGOAotOjEwM0RFMDAwMTA0MDAwMDQwMDAzMTYwMDhGODQwMDM0MEEwMDBGNEZCNwotOjEwM0RGMDAwMjQwNjAwNDEwMDAyMTYwMzA0NDEwMDE3OEY4NDAwMzQ5QQotOjEwM0UwMDAwMjQwNjAwNDI4RjgyMDAyODNDMDc2MDE5OTQ0NTAwRDRBNAotOjEwM0UxMDAwMzBBNUZGRkYwRTAwMEJCRjAwMDAwMDAwMEEwMDBGNjQ3QQotOjEwM0UyMDAwMDAwMDAwMDA5MjAyMDAwQjI0MDMwMDE2MzA0MjAwRkY0NQotOjEwM0UzMDAwMTA0MzAwMDYwMDAwMDAwMDkyMDIwMDBCMjQwMzAwMTc0QwotOjEwM0U0MDAwMzA0MjAwRkYxNDQzMDAwNDAwMDAwMDAwMEUwMDBFREVBQwotOjEwM0U1MDAwMDAwMDAwMDAwMDQwODgyMTBFMDAwQzM2MDAwMDAwMDAyOQotOjEwM0U2MDAwOTIwMjAwMEEzMDQyMDAwODEwNDAwMDA2MjQwMjBDODAzMgotOjEwM0U3MDAwOEY4NTAwMjgzQzA0MDAwODBFMDAxMkJEMDM0NDIwMjE1OQotOjEwM0U4MDAwMjQwMjBDODBBRjQyMDAyNDhGQkYwMDE4MDIyMDEwMjFCMgotOjEwM0U5MDAwOEZCMDAwMTA4RkIxMDAxNDAzRTAwMDA4MjdCRDAwMjA5MAotOjEwM0VBMDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwOEY1MDAwMjQ1MwotOjEwM0VCMDAwM0MwMzA4MDA4QzYzMDBFMDhGNDUwMTAwMjQwMkZGODA3MgotOjEwM0VDMDAwMDBBMzE4MjEzMDY0MDA3RjAzNDQyMDIxMDA2MjE4MjRERAotOjEwM0VEMDAwM0MwMjAwMEEwMDgyMjAyMUFGODUwMDM0QUY0MzAwMjQ1OQotOjEwM0VFMDAwOTA4MjAwNjJBRjg0MDAyODMwNDIwMDBGMzQ0MjAwNTBCQwotOjEwM0VGMDAwQTA4MjAwNjIzQzAyMDAxRjM0NDJGRjgwMEUwMDA2RjdFMQotOjEwM0YwMDAwMDIwMjgwMjRBRjUwMDAyNDhGQkYwMDE0OEZCMDAwMTAzNQotOjEwM0YxMDAwMDNFMDAwMDgyN0JEMDAxODNDMDIwODAwOEM0MjAwMjA4NgotOjEwM0YyMDAwMTA0MDAwMUQyNzQ1MDEwMDkwQTMwMDA5M0MwMjAwMDgzNQotOjEwM0YzMDAwMDM0MjIwMjEyNDAyMDAxODU0NjIwMDAzM0MwMjAwMDhCRQotOjEwM0Y0MDAwMEEwMDBGQTUyNDAyMDAwODAzNDIyMDIxMjQwMjAwMTZDMwotOjEwM0Y1MDAwMTQ2MjAwMDUyNDAyMDAxNzI0MDIwMDEyQTA4MjAwM0YxMAotOjEwM0Y2MDAwMEEwMDBGQUY5NEE3MDAwODU0NjIwMDA2OTRBNzAwMDg0NwotOjEwM0Y3MDAwOTM2MjAwMDUyNDAzRkZGRTAwNDMxMDI0QTM2MjAwMDVBMgotOjEwM0Y4MDAwOTRBNzAwMDg5MEE2MDAxQjhDQTQwMDAwOTRBNTAwMDYyRQotOjEwM0Y5MDAwMEEwMDBCOUEwMDA3M0MwMDAzRTAwMDA4MDAwMDAwMDA0NAotOjEwM0ZBMDAwMjc0NDAxMDA5NDgyMDAwODMwNDUwMEZGMzhBMzAwODJCNgotOjEwM0ZCMDAwMzhBMjAwODQyQzYzMDAwMTJDNDIwMDAxMDA2MjE4MjUwNQotOjEwM0ZDMDAwMTA2MDAwMDYyNDAyMDA4MzkzODIwMDJEMTA0MDAwMEQzMwotOjEwM0ZEMDAwMDAwMDAwMDAwQTAwMEM2OTAwMDAwMDAwMTRBMjAwMDVBNwotOjEwM0ZFMDAwMjRBMkZGODA4RjQzMDEwNDNDMDI2MDIwMDNFMDAwMDgwQwotOjEwM0ZGMDAwQUM0MzAwMTQzMDQyMDBGRjJDNDIwMDAyMTA0MDAwMDM4QQotOjEwNDAwMDAwMjQwMjAwMjIwQTAwMEYwOTAwMDAwMDAwMTRBMjAwMDM4RAotOjEwNDAxMDAwMDAwMDAwMDAwQTAwMEY3NjAwMDAwMDAwMEEwMDBGOTQ2NAotOjEwNDAyMDAwMDAwMDAwMDA5MzYzMDA3RTkzNjIwMDdBMTQ0MzAwMDk0RAotOjEwNDAzMDAwMDAwMDIwMjE5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkY2MgotOjEwNDA0MDAwMTQ0MzAwMDQyNDA0MDAwMTkzNjIwMDdFMjQ0MjAwMDExMgotOjEwNDA1MDAwQTM2MjAwN0UwM0UwMDAwODAwODAxMDIxOEY0MjAxRjg3NwotOjEwNDA2MDAwMDQ0MEZGRkUyNDAyMDAwMkFGNDQwMUMwQTM0MjAxQzQ4OQotOjEwNDA3MDAwM0MwMjEwMDAwM0UwMDAwOEFGNDIwMUY4MjdCREZGRTg1MgotOjEwNDA4MDAwQUZCRjAwMTA5MzYyMDAzRjI0MDMwMDBBMzA0MjAwRkZEQwotOjEwNDA5MDAwMTQ0MzAwNDYwMDAwMDAwMDhGNjMwMDU0OEY2MjAwNEMwMAotOjEwNDBBMDAwMTA2MjAwN0YwMzYwMzAyMTkzNjIwMDAwMjQwMzAwNTBGRgotOjEwNDBCMDAwMzA0MjAwRkYxNDQzMDAyRjAwMDAwMDAwOEY0NDAxNDBGNQotOjEwNDBDMDAwM0MwMjA4MDA4QzQyMDBFMDI0MDNGRjgwMDA4MjEwMjFBMwotOjEwNDBEMDAwMDA0MzEwMjRBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTA2MAotOjEwNDBFMDAwOEY2NTAwNTQzQzAzMDAwQTAwODIyMDIxMzA4NDAwN0Y0OQotOjEwNDBGMDAwMDM0NDEwMjEwMDQzMTAyMUFDNDUwMTA4OTc2MjAwM0NBNQotOjEwNDEwMDAwOEY2MzAwNEMzMDQyRkZGRjAwMDIxMDQwMDA2MjE4MjExNAotOjEwNDExMDAwQUY2MzAwNUM4RjYzMDA1NDhGNjQwMDRDOTc2MjAwM0M3NwotOjEwNDEyMDAwMDA2NDE4MjMzMDQyRkZGRjAwMDMxODQzMDAwMjEwNDBEMAotOjEwNDEzMDAwMDA0MzEwMkExMDQwMDAwNjAwMDAwMDAwOEY2MjAwNTQ2NwotOjEwNDE0MDAwOEY2MzAwNEMwMDQzMTAyMzBBMDAxMDI1MDAwMjEwNDMyNwotOjEwNDE1MDAwOTc2MjAwM0MzMDQyRkZGRjAwMDIxMDQwQUNDMjAwNjQ5NgotOjEwNDE2MDAwMjQwMjAwMDFBMEMwMDA3Q0EwQzIwMDg0MjQwMjBDODBCNAotOjEwNDE3MDAwQUY0MjAwMjQwRTAwMEZENzhGNDQwMTQwMTA0MDAwNDk4OQotOjEwNDE4MDAwOEZCRjAwMTA4RjQzMDE0MDhGNDIwMUY4MDQ0MEZGRkVCMwotOjEwNDE5MDAwMjQwMjAwMDJBRjQzMDFDMEEzNDIwMUM0M0MwMjEwMDA0QwotOjEwNDFBMDAwQUY0MjAxRjgwQTAwMTA3NzhGQkYwMDEwOTM2MjAwM0YwMgotOjEwNDFCMDAwMjQwMzAwMTAzMDQyMDBGRjE0NDMwMDA0MDAwMDAwMDBGQwotOjEwNDFDMDAwOEY0NDAxNDAwQTAwMTA2MzAwMDAyODIxOTM2MjAwM0ZFMQotOjEwNDFEMDAwMjQwMzAwMTYzMDQyMDBGRjE0NDMwMDA0MjQwMjAwMTQ5QwotOjEwNDFFMDAwQTM2MjAwM0YwQTAwMTA3MTAwMDAwMDAwOEY2MjAwNENDMwotOjEwNDFGMDAwOEY2MzAwNTAwMDQzMTAyMzA0NDEwMDJBOEZCRjAwMTAzQQotOjEwNDIwMDAwOTM2MjAwODEyNDQyMDAwMUEzNjIwMDgxOTM2MjAwODFENQotOjEwNDIxMDAwM0MwMzA4MDA4QzYzMDBDMDMwNDIwMEZGMTQ0MzAwMTBEMAotOjEwNDIyMDAwMDAwMDAwMDA5MzYyMDAzRjI0MDMwMDA0MzA0MjAwRkZCRQotOjEwNDIzMDAwMTQ0MzAwMDYwMDAwMDAwMDhGNDQwMTQwOEZCRjAwMTBBRgotOjEwNDI0MDAwMjQwNTAwOTMwQTAwMDY3MTI3QkQwMDE4OEY0NDAxNDAyMQotOjEwNDI1MDAwMjQwNTAwOTM4RkJGMDAxMDBBMDAwNkUwMjdCRDAwMTg1OAotOjEwNDI2MDAwOEY0NDAxNDAwRTAwMDMzNTAwMDAwMDAwOEY2MjAwNTRBRgotOjEwNDI3MDAwMjQ0MkZGRkZBRjYyMDA1NDhGNjIwMDUwMjQ0MkZGRkZEMAotOjEwNDI4MDAwQUY2MjAwNTAwRTAwMDMzRThGNDQwMTQwOEY0NDAxNDA1NgotOjEwNDI5MDAwOEZCRjAwMTAyNDA1MDAwNDBBMDAwMzQzMjdCRDAwMTg0NwotOjEwNDJBMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4OEY0MjAxODg2RgotOjEwNDJCMDAwOTM2MzAwN0UwMDAyMTQwMjMwNDQwMEZGMzA2MzAwRkY2RAotOjEwNDJDMDAwMTQ2NDAwMEQwMDAwMDAwMDkzNjIwMDgwMzA0MjAwRkY4MwotOjEwNDJEMDAwMTA0NDAwMDkwMDAwMDAwMEEzNjQwMDgwOTM2MjAwMDAwNQotOjEwNDJFMDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDA0MDAwMDAwMDA4QgotOjEwNDJGMDAwMEEwMDA3QTg4RjQ0MDE4MEEzNjQwMDgwMDNFMDAwMDgzRgotOjEwNDMwMDAwMDAwMDAwMDAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTRGMQotOjEwNDMxMDAwOTM2MjAwMDUyNDAzMDAzMDMwNDIwMDMwMTQ0MzAwODlDQQotOjEwNDMyMDAwMDA4MDgwMjEzQzAyMDgwMDhDNDIwMDIwMTA0MDAwODA2OAotOjEwNDMzMDAwMDIwMDIwMjEwRTAwMDU2NDAwMDAwMDAwOEY4NTAwMjA4RgotOjEwNDM0MDAwQUNCMDAwMDA5MzYyMDAzRTkzNjMwMDNGMzA0MjAwRkYzOAotOjEwNDM1MDAwMDAwMjEyMDAzMDYzMDBGRjAwNDMxMDI1QUNBMjAwMDRFRAotOjEwNDM2MDAwOTM2MjAwODIwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMDU1OQotOjEwNDM3MDAwMDAwMDAwMDAzQzAzMDgwMDhDNjMwMDQ4MEEwMDEwQjVGMAotOjEwNDM4MDAwMDAwMDAwMDA5MzYyMDAzRTMwNDIwMDQwMTQ0MDAwMDNGMQotOjEwNDM5MDAwMDAwMDE4MjE5MzYyMDA4MTMwNDMwMEZGOTM2MjAwODI4NQotOjEwNDNBMDAwMDAwMzFFMDAzMDQyMDBGRjAwMDIxNDAwMDA2MjE4MjVDNgotOjEwNDNCMDAwQUNBMzAwMDg4RjYyMDA0MEFDQTIwMDBDOEY2MjAwNDhFMgotOjEwNDNDMDAwQUNBMjAwMTA4RjYyMDA0Q0FDQTIwMDE0OEY2MjAwNTBBRgotOjEwNDNEMDAwOEY2MzAwNEMwMDQzMTAyMzA0NDEwMDAzMDAwMDAwMDBFMQotOjEwNDNFMDAwMEEwMDEwQzk4RjYyMDA0QzhGNjIwMDUwQUNBMjAwMTgwNgotOjEwNDNGMDAwM0MwMjA4MDA5NDQyNEU5NjNDMDNDMDBCMDAwMDIwMjE3MgotOjEwNDQwMDAwMDA0MzEwMjUwRTAwMDU4OUFDQTIwMDFDOEY2MjAwNTRFOQotOjEwNDQxMDAwOEY4NDAwMjBBQzgyMDAwMDhGNjIwMDU4QUM4MjAwMDRDMAotOjEwNDQyMDAwOEY2MjAwNUNBQzgyMDAwODhGNjIwMDYwOEY0MzAwNzQ3MgotOjEwNDQzMDAwMDA0MzEwMjFBQzgyMDAwQzhGNjIwMDY0QUM4MjAwMTAzQgotOjEwNDQ0MDAwOTc2MzAwNjg5NzYyMDA2QTAwMDMxQzAwMzA0MkZGRkYxOAotOjEwNDQ1MDAwMDA2MjE4MjVBQzgzMDAxNDkzNjIwMDgyMjQwMzAwODA1QwotOjEwNDQ2MDAwMzA0MjAwRkYxNDQzMDAwMzAwMDAwMDAwMEEwMDEwRkQ2QQotOjEwNDQ3MDAwQUM4MDAwMTg4RjYzMDAwQzI0MDIwMDAxMTA2MjAwMEU1MwotOjEwNDQ4MDAwMjQwMkZGRkY5MzYyMDAzRTMwNDIwMDQwMTQ0MDAwMEFDNQotOjEwNDQ5MDAwMjQwMkZGRkY4RjYzMDAwQzhGNDIwMDc0MDA2MjE4MjMxOAotOjEwNDRBMDAwM0MwMjA4MDAwMDYyMTAyNDE0NDAwMDAyMDAwMDI4MjE5MQotOjEwNDRCMDAwMDA2MDI4MjEwMDA1MTA0M0FDODIwMDE4M0MwMjA4MDA2RgotOjEwNDRDMDAwOTQ0MjRFOTYzQzAzQzAwQzAwMDAyMDIxMDA0MzEwMjU2RQotOjEwNDREMDAwOEY4MzAwMjAwRTAwMDU4OUFDNjIwMDFDOEY2MjAwMThEQgotOjEwNDRFMDAwOEY4MzAwMjAzQzA1MDgwMDk0QTU0RTk2MjQwNDAwMDEwQgotOjEwNDRGMDAwQUM2MjAwMDBBQzYwMDAwNDhGNjYwMDZDM0MwMjQwMERCMgotOjEwNDUwMDAwMDBBMjI4MjVBQzY2MDAwODhGNjIwMERDQUM2MjAwMENCQgotOjEwNDUxMDAwQUM2MDAwMTA5MzYyMDAwNTAwMDIxNjAwQUM2MjAwMTQ0QgotOjEwNDUyMDAwQUM2MDAwMTgwRTAwMDU4OUFDNjUwMDFDMDIwMDIwMjE1QgotOjEwNDUzMDAwOEZCRjAwMTQ4RkIwMDAxMEEzNjAwMDA1MEEwMDA0RjJDMgotOjEwNDU0MDAwMjdCRDAwMTg4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhEMwotOjEwNDU1MDAwMjdCRDAwMTg5NzQyMDA3QzMwQzYwMEZGQTA4NjAwODQ2QgotOjEwNDU2MDAwMzA0N0ZGRkYyNDAyMDAwNTE0QzIwMDBCMjRFMzQ2NTAyRAotOjEwNDU3MDAwOTBBMjAxMTIyQzQyMDAwNzEwNDAwMDA3MjRFMzBBMDAxOQotOjEwNDU4MDAwOTBBMzAxMTIyNDAyMDAxNDAwNjIxMDA0MDBFMjEwMjEyMgotOjEwNDU5MDAwMEEwMDExMzUzMDQ3RkZGRjMwNjdGRkZGMDNFMDAwMDhENgotOjEwNDVBMDAwQTQ4NzAwMTRBQzg3MDA0QzhDQTIwMTA4MDA4MDQwMjEzNQotOjEwNDVCMDAwMDBBMDQ4MjEwMEUyMTAyMzMwQzYwMEZGMTg0MDAwMDM4RAotOjEwNDVDMDAwOTNBQTAwMTMyNEUyRkZGQ0FDQTIwMTA4MzBDMjAwMDE1MAotOjEwNDVEMDAwMTA0MDAwMDgwMDAwMDAwMDhEMDIwMDUwMDBFMjEwMjM4RgotOjEwNDVFMDAwMDQ0MTAwMTMyNDA2MDAwNThEMDIwMDU0MTBFMjAwMTA1RgotOjEwNDVGMDAwMDAwMDAwMDA4RDAyMDA1NDE0RTIwMDFBMDAwMDAwMDBDOAotOjEwNDYwMDAwM0MwMjA4MDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMEFEMgotOjEwNDYxMDAwMjQwMjAwMDE5MTAzMDA3ODkxMDIwMDgzMTQ0MzAwMDZGNAotOjEwNDYyMDAwMjQwMjAwMDEwMTAwMjAyMTAxMjAyODIxMjQwNjAwMDQ4OQotOjEwNDYzMDAwMEEwMDExMjMwMDAwMDAwMEExMDAwMDg0MTE0MDAwMDlCRAotOjEwNDY0MDAwQTUwMjAwMTQ4RjQzMDEwMDhGNDIwMUY4MDQ0MEZGRkVEMQotOjEwNDY1MDAwMjQwMjAwMDJBRjQzMDFDMEEzNDIwMUM0M0MwMjEwMDA4NwotOjEwNDY2MDAwQUY0MjAxRjgwM0UwMDAwODAwMDAwMDAwMjdCREZGRThBQQotOjEwNDY3MDAwOEZBOTAwMjhBRkJGMDAxMDAwODA0MDIxMDBFOTE4MjM1NwotOjEwNDY4MDAwMTg2MDAwNzMzMEM2MDBGRkEwODAwMDdDQTA4MDAwODEwRAotOjEwNDY5MDAwOENBMjAxMDgwMEUyMTAyMzA0NDAwMDREMDAwMDAwMDAzRAotOjEwNDZBMDAwOEM4MjAwNTA5NDgzMDAzQzhDODQwMDY0MDA0NzQ4MjMzMwotOjEwNDZCMDAwMzA2M0ZGRkYwMTIzMTgyMTAwODMyMDJCMTA4MDAwMDRBQQotOjEwNDZDMDAwMDAwMDAwMDA4RDAyMDA2NDBBMDAxMTg2MDBFMjEwMjE0MwotOjEwNDZEMDAwOTUwMjAwM0MzMDQyRkZGRjAxMjIxMDIxMDBFMjEwMjEzMAotOjEwNDZFMDAwQUQwMjAwNUM5NTAyMDAzQzhEMDMwMDVDMzA0MkZGRkY5MAotOjEwNDZGMDAwMDAwMjEwNDAwMEUyMTAyMTAwNDMxMDJCMTA0MDAwMDM4NAotOjEwNDcwMDAwMDAwMDAwMDAwQTAwMTE5NThEMDIwMDVDOTUwMjAwM0MzQgotOjEwNDcxMDAwMzA0MkZGRkYwMDAyMTA0MDAwRTIxMDIxQUQwMjAwNUNCOQotOjEwNDcyMDAwQTEwMDAwODRBRDA3MDA0QzhDQTIwMTA4MDBFMjEwMjMxOAotOjEwNDczMDAwMTg0MDAwMDIyNEUyRkZGQ0FDQTIwMTA4MzBDMjAwMDFENAotOjEwNDc0MDAwMTA0MDAwMEEwMDAwMDAwMDhEMDIwMDUwMDBFMjEwMjMxQgotOjEwNDc1MDAwMDQ0MTAwMDQwMTAwMjAyMThEMDIwMDU0MTRFMjAwMDNGMgotOjEwNDc2MDAwMDAwMDAwMDAwQTAwMTFCNzI0MDYwMDA1OEQwMjAwNTQ2NQotOjEwNDc3MDAwMTRFMjAwNDc4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDhCMgotOjEwNDc4MDAwMzA0MjAwMjAxMDQwMDAwQTI0MDIwMDAxOTEwMzAwNzgwQQotOjEwNDc5MDAwOTEwMjAwODMxNDQzMDAwNjI0MDIwMDAxMDEwMDIwMjEzRAotOjEwNDdBMDAwMjQwNjAwMDQ4RkJGMDAxMDBBMDAxMTIzMjdCRDAwMTg0MwotOjEwNDdCMDAwQTEwMDAwODRBNTAyMDAxNDhGNDMwMTAwOEY0MjAxRjg3QwotOjEwNDdDMDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxMURDMDAwMDAwMDA4OQotOjEwNDdEMDAwOEM4MjAwNUMwMDQ5MTAyMzAwNDMxMDJCNTQ0MDAwMDFFMAotOjEwNDdFMDAwQUM4NzAwNUM5NTAyMDAzQzMwNDJGRkZGMDA2MjEwMkI1QQotOjEwNDdGMDAwMTQ0MDAwMDcyNDAyMDAwMjk1MDIwMDNDOEQwMzAwNUM3NwotOjEwNDgwMDAwMzA0MkZGRkYwMDYyMTgyMUFEMDMwMDVDMjQwMjAwMDI2OQotOjEwNDgxMDAwQUQwNzAwNENBMTAyMDA4NDBFMDAwRkQ3OEY0NDAxMDBBOQotOjEwNDgyMDAwMTA0MDAwMUI4RkJGMDAxMDhGNDMwMTAwOEY0MjAxRjgyMgotOjEwNDgzMDAwMDQ0MEZGRkUyNDAyMDAwMkFGNDMwMUMwQTM0MjAxQzRCMgotOjEwNDg0MDAwM0MwMjEwMDBBRjQyMDFGODBBMDAxMUYyOEZCRjAwMTBDNQotOjEwNDg1MDAwMzBDMjAwMTAxMDQwMDAwRThGQkYwMDEwOEM4MzAwNUMyRgotOjEwNDg2MDAwOTQ4MjAwM0MwMDY5MTgyMzMwNDJGRkZGMDA2MjE4MjE0NwotOjEwNDg3MDAwM0MwMjNGRkYzNDQ0RkZGRjAwODMxMDJCNTQ0MDAwMDFGMwotOjEwNDg4MDAwMDA4MDE4MjEwMTIzMTAyMUFEMDIwMDVDOEZCRjAwMTBCMQotOjEwNDg5MDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkU4OEZBQTAwMjgwNQotOjEwNDhBMDAwQUZCRjAwMTAwMDgwNDAyMTAwRUE0ODIzMTkyMDAwMjFGQQotOjEwNDhCMDAwMzBDNjAwRkY4QzgzMDA1QzhDODIwMDY0MDA2QTE4MjM4MQotOjEwNDhDMDAwMDA0MzEwMkI1MDQwMDAxMDAwNjkxODIxOTRBMjAxMTBFMQotOjEwNDhEMDAwMDEyMjEwMjFBNEEyMDExMDk0QTIwMTEwMzA0MkZGRkY3NgotOjEwNDhFMDAwMDA0MzEwMkIxNDQwMDAwQTNDMDIzRkZGOTRBMjAxMTAyOQotOjEwNDhGMDAwMDA0MzEwMjNBNEEyMDExMDk0ODIwMDNDMzA0MkZGRkYyOQotOjEwNDkwMDAwMEEwMDEyMTEwMDYyMTgyMUE0QTAwMTEwM0MwMjNGRkYwRQotOjEwNDkxMDAwMzQ0NEZGRkYwMDgzMTAyQjU0NDAwMDAxMDA4MDE4MjExNQotOjEwNDkyMDAwMDA2NzEwMjFBRDAyMDA1Q0ExMDAwMDdDMEEwMDEyNTk1MgotOjEwNDkzMDAwQTEwMDAwODEzMEMyMDAxMDEwNDAwMDNDMDAwMDAwMDBDNwotOjEwNDk0MDAwOEM4MjAwNTAwMDRBMTAyMzE4NDAwMDM4MDAwMDAwMDBGQwotOjEwNDk1MDAwOTA4MjAwN0MyNDQyMDAwMUEwODIwMDdDOTA4MjAwN0MzNgotOjEwNDk2MDAwM0MwMzA4MDA4QzYzMDAyNDMwNDIwMEZGMDA0MzEwMkJGRQotOjEwNDk3MDAwMTQ0MDAwNUM4RkJGMDAxMDhDQTIwMTA4MDBFMjEwMjNERAotOjEwNDk4MDAwMTg0MDAwNTgwMDAwMDAwMDhDODMwMDU0OTQ4MjAwM0NDMgotOjEwNDk5MDAwMDA2QTE4MjMzMDQyRkZGRjAwMDMxODQzMDAwMjEwNDA1MgotOjEwNDlBMDAwMDA0MzEwMkExMDQwMDAwNTAwMDAwMDAwOEM4MjAwNTREMwotOjEwNDlCMDAwMDA0QTEwMjMwQTAwMTI0MDAwMDIxMDQzOTQ4MjAwM0M3NwotOjEwNDlDMDAwMzA0MkZGRkYwMDAyMTA0MEFEMDIwMDY0OTUwMjAwM0MzRgotOjEwNDlEMDAwOEQwNDAwNjQ5NTAzMDAzQzMwNDJGRkZGMDAwMjEwNDA0QwotOjEwNDlFMDAwMDA4MjIwMjEzMDYzRkZGRjAwODMxODIxMDE0MzEwMjE0MgotOjEwNDlGMDAwQUQwMjAwNUM4RDAyMDA1NEFDQTIwMTA4MjQwMjAwMDI0QQotOjEwNEEwMDAwQTEwMjAwODQwRTAwMEZENzhGNDQwMTAwMTA0MDAwMzUzMgotOjEwNEExMDAwOEZCRjAwMTA4RjQzMDEwMDhGNDIwMUY4MDQ0MEZGRkU1QQotOjEwNEEyMDAwMjQwMjAwMDIwQTAwMTI4MjAwMDAwMDAwQUQwNzAwNENDMAotOjEwNEEzMDAwOENBMjAxMDgwMEUyMTAyMzE4NDAwMDAyMjRFMkZGRkNDRgotOjEwNEE0MDAwQUNBMjAxMDgzMEMyMDAwMTEwNDAwMDBBMDAwMDAwMDBDMgotOjEwNEE1MDAwOEQwMjAwNTAwMEUyMTAyMzA0NDEwMDA0MDEwMDIwMjFENwotOjEwNEE2MDAwOEQwMjAwNTQxNEUyMDAwMzAwMDAwMDAwMEEwMDEyNzlENQotOjEwNEE3MDAwMjQwNjAwMDU4RDAyMDA1NDE0RTIwMDFBOEZCRjAwMTBCNgotOjEwNEE4MDAwM0MwMjA4MDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMEE0RQotOjEwNEE5MDAwMjQwMjAwMDE5MTAzMDA3ODkxMDIwMDgzMTQ0MzAwMDY3MAotOjEwNEFBMDAwMjQwMjAwMDEwMTAwMjAyMTI0MDYwMDA0OEZCRjAwMTAxMQotOjEwNEFCMDAwMEEwMDExMjMyN0JEMDAxOEExMDAwMDg0QTUwMjAwMTREQwotOjEwNEFDMDAwOEY0MzAxMDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDJFMAotOjEwNEFEMDAwQUY0MzAxQzBBMzQyMDFDNDNDMDIxMDAwQUY0MjAxRjg0MQotOjEwNEFFMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4OEZBQTAwMTAzOAotOjEwNEFGMDAwOEM4MjAwNTAwMDgwNDAyMTMwQzYwMEZGMDA0QTEwMjMwNQotOjEwNEIwMDAwMDBBMDQ4MjExODQwMDAwNzAwRTAxODIxMjQwMjAwMDFGRAotOjEwNEIxMDAwQTA4MDAwODRBMEEwMDExMkE0ODIwMDE0MEEwMDExRjQ1NQotOjEwNEIyMDAwQUZBQTAwMTBBMDgwMDA4MUFEMDcwMDRDOENBMjAxMDg0NAotOjEwNEIzMDAwMDBFMjEwMjMxODQwMDAwMjI0RTJGRkZDQUNBMjAxMDhBRQotOjEwNEI0MDAwMzBDMjAwMDExMDQwMDAwODAwMDAwMDAwOEQwMjAwNTAzQgotOjEwNEI1MDAwMDA2MjEwMjMwNDQxMDAxMzI0MDYwMDA1OEQwMjAwNTQ1NgotOjEwNEI2MDAwMTA2MjAwMTAwMDAwMDAwMDhEMDIwMDU0MTQ2MjAwMTE1OQotOjEwNEI3MDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjBCNwotOjEwNEI4MDAwMTA0MDAwMEEyNDAyMDAwMTkxMDMwMDc4OTEwMjAwODM4MgotOjEwNEI5MDAwMTQ0MzAwMDYyNDAyMDAwMTAxMDAyMDIxMDEyMDI4MjFFNQotOjEwNEJBMDAwMjQwNjAwMDQwQTAwMTEyMzAwMDAwMDAwQTEwMDAwODQ3NAotOjEwNEJCMDAwQTUwMjAwMTQwM0UwMDAwODAwMDAwMDAwMjdCREZGRTA4QwotOjEwNEJDMDAwQUZCRjAwMTgyNzQyMDEwMDkwNDYwMDBBOEM0ODAwMTQyRAotOjEwNEJEMDAwOEM4QjAwNEM5MDgyMDA4NDMwQzkwMEZGMDE2ODE4MjM0MAotOjEwNEJFMDAwMzA0QTAwRkYxQzYwMDAxQTJENDYwMDA2MjQwMjAwMDExNgotOjEwNEJGMDAwMDE0MjEwMDQxMEMwMDAxNjMwNDMwMDAzMDEyMDMwMjE5MAotOjEwNEMwMDAwMDEwMDM4MjExNDYwMDAwNzMwNEMwMDBDMTU4MDAwMDlBOQotOjEwNEMxMDAwMzA0MjAwMzAxNDQwMDAwQjhGQkYwMDE4MEEwMDEyRTMyRQotOjEwNEMyMDAwMDAwMDAwMDAwRTAwMTFGNEFGQUIwMDEwMEEwMDEyRTMwOAotOjEwNEMzMDAwOEZCRjAwMTgwRTAwMTE2OUFGQUIwMDEwMEEwMDEyRTMxRAotOjEwNEM0MDAwOEZCRjAwMThBRkFCMDAxMDBFMDAxMjg5QUZBQTAwMTQ3RQotOjEwNEM1MDAwOEZCRjAwMTgwM0UwMDAwODI3QkQwMDIwMjQwMjAwMDNENgotOjEwNEM2MDAwQTA4MjAwODQ4QzgyMDA1NDAzRTAwMDA4QUNBMjAxMDhGQQotOjEwNEM3MDAwM0MwMjAwMDgwMzQyMTgyMTkwNjIwMDgxMjQwNjAwNDM5MAotOjEwNEM4MDAwM0MwNzYwMTkyNDQyMDAwMUEwNjIwMDgxOTA2MzAwODEwQQotOjEwNEM5MDAwM0MwMjA4MDA4QzQyMDBDMDMwNjMwMEZGMTQ2MjAwMTAyOAotOjEwNENBMDAwMjQwM0ZGODAzQzAyMDgwMDhDNDIwMEUwMDA4MjEwMjFCNwotOjEwNENCMDAwMDA0MzEwMjRBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTA3NAotOjEwNENDMDAwM0MwMzAwMEEwMDgyMTAyMTMwNDIwMDdGMDM0MjEwMjE4MQotOjEwNENEMDAwMDA0MzEwMjE5NDQ1MDBENDBBMDAwQkJGMzBBNUZGRkYwQwotOjEwNENFMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwQUZCRjAwMTg5MAotOjEwNENGMDAwQUZCMTAwMTRBRkIwMDAxMDhGNDIwMTgwMDA4MDgwMjE1RQotOjEwNEQwMDAwMDBBMDg4MjEwRTAwMTJFQTAwNDAyMDIxQTIwMDAwODRBOQotOjEwNEQxMDAwOEUwMjAwNTQ4RkJGMDAxODhGQjAwMDEwQUUyMjAxMDgyMQotOjEwNEQyMDAwOEZCMTAwMTQwM0UwMDAwODI3QkQwMDIwMjdCREZGRTA3RAotOjEwNEQzMDAwM0MwMjAwMDhBRkIwMDAxMEFGQkYwMDE4QUZCMTAwMTRDNAotOjEwNEQ0MDAwMDM0MjgwMjE4RjUxMDE0MDkyMDMwMDg0OEUwNDAwNTA2MQotOjEwNEQ1MDAwOEUwMjAwNEMxNDgyMDA0MDMwNjYwMEZGM0MwMjA4MDBDNgotOjEwNEQ2MDAwOEM0MjAwRTAyNDAzRkY4MDAyMjIxMDIxMDA0MzEwMjQyMwotOjEwNEQ3MDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwOTc0NDAwN0NEMwotOjEwNEQ4MDAwOTIwNTAwODEwMjIyMTAyMTMwNDIwMDdGMDM0MjE4MjE0NwotOjEwNEQ5MDAwM0MwMjAwMEEwMDYyMTgyMTE0QTAwMDBCMzA4NEZGRkZCRgotOjEwNERBMDAwMjQwMjAwMDU1NEMyMDAxNDI0ODIwNURDOTA2MjAxMTIyMgotOjEwNERCMDAwMjQ0MjAwMDFBMDYyMDExMjI0MDIwQzgwQUY0MjAwMjRCMAotOjEwNERDMDAwMEEwMDEzNDIyNDAyMDAwNUEwNjAwMTEyMjQwMjAwMDUxQgotOjEwNEREMDAwMTRDMjAwMDkyNDgyMDVEQzkyMDIwMDgxMkM0MjAwMDdFMwotOjEwNERFMDAwNTA0MDAwMDUyNDgyMEEwMDkyMDMwMDgxMjQwMjAwMTQyRQotOjEwNERGMDAwMDA2MjEwMDQwMDgyMTAyMTMwNDRGRkZGQTYwNDAwMTQ1QQotOjEwNEUwMDAwMEUwMDEyRUEwMjIwMjAyMTk2MDIwMDNDOEUwMzAwNEM4NAotOjEwNEUxMDAwMDIyMDIwMjEzMDQyRkZGRjAwMDIxMDQwMDA2MjE4MjFEMgotOjEwNEUyMDAwMEUwMDAzMzVBRTAzMDA1QzkyMDIwMDdEMDIyMDIwMjFCQgotOjEwNEUzMDAwMzQ0MjAwNDAwRTAwMDMzRUEyMDIwMDdEOEY0MjAxRjg4MgotOjEwNEU0MDAwMDQ0MEZGRkUyNDAyMDAwMkFGNTEwMUMwQTM0MjAxQzQ4RQotOjEwNEU1MDAwM0MwMjEwMDBBRjQyMDFGODhGQkYwMDE4OEZCMTAwMTQ2MAotOjBDNEU2MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMDgKLTowNDRFNkMwMDA4MDAwRTdDQjAKLToxMDRFNzAwMDA4MDAwRUM0MDgwMDBGMDQwODAwMEY1MDA4MDAwRjg0M0IKLToxMDRFODAwMDBBMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERUIKLToxMDRFOTAwMDYzNzAzNDJFMzYyRTMxMzYwMDAwMDAwMDA0MDYxMDA0RjQKLToxMDRFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMDRFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMDRFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwQzIKLToxMDRFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMDRFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMDRFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDJCODYKLToxMDRGMDAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMDAwMDAwMDBEODEKLToxMDRGMTAwMDAwMDAwMDBEM0MwMjA4MDAyNDQyNThBNDNDMDMwODAwOTUKLToxMDRGMjAwMDI0NjM1RjcwQUM0MDAwMDAwMDQzMjAyQjE0ODBGRkZEMjEKLToxMDRGMzAwMDI0NDIwMDA0M0MxRDA4MDAzN0JEN0ZGQzAzQTBGMDIxODMKLToxMDRGNDAwMDNDMTAwODAwMjYxMDAwODAzQzFDMDgwMDI3OUM1OEE0MzgKLToxMDRGNTAwMDBFMDAwMTlDMDAwMDAwMDAwMDAwMDAwRDI3QkRGRkU4Q0UKLToxMDRGNjAwMDNDMDk2MDE4QUZCRjAwMTA4RDJDNTAwMDI0MERGRjdGNEUKLToxMDRGNzAwMDI0MDgwMDMxMDE4RDU4MjQzNTZBMzgwQzI0MDcwQzAwQjAKLToxMDRGODAwMDNDMUE4MDAwQUQyQTUwMDAzQzA0ODAwQUFGNDgwMDA4NUIKLToxMDRGOTAwMDNDMUI4MDA4QUY0NzAwMjQwRTAwMDkyNEFGODQwMDEwOUEKLToxMDRGQTAwMDBFMDAwOEU3MDAwMDAwMDAwRTAwMDgzNDAwMDAwMDAwQkEKLToxMDRGQjAwMDBFMDAxMjVFMDAwMDAwMDAzQzA0NjAxNjhDODUwMDAwQUMKLToxMDRGQzAwMDNDMDZGRkZGM0MwMjUzNTMwMEE2MTgyNDEwNjIwMDNGMkEKLToxMDRGRDAwMDM0ODY3QzAwOTRDMjAxRjJBNzgwMDAyQzEwNDAwMDAzQUMKLToxMDRGRTAwMEE3ODAwMENDMzg1ODFFMUVBNzk4MDAyQzk0QzIwMUY4NDgKLToxMDRGRjAwMDEwNDAwMDA0OTc4MzAwQ0MzODU5MUUxRUE3OTkwMENDOUUKLToxMDUwMDAwMDk3ODMwMENDMkM3RjAwNjc1M0UwMDAwMTI0MDMwMDY2RTcKLToxMDUwMTAwMDk3ODQwMDJDMkM4MjA0MDExNDQwMDAwMjAwNjAyODIxOTcKLToxMDUwMjAwMDI0MDQwNDAwM0MwNzYwMDA4Q0U5MDQzODI0MDMxMDNDOEQKLToxMDUwMzAwMDMxMjhGRkZGMTEwMzAwMTczMEI5RkZGRjU3MjAwMDBDODQKLToxMDUwNDAwMEEzODAwMENFMjQwMjAwNTBBMzgyMDBDRTkzOUYwMENFMDYKLToxMDUwNTAwMDEzRTAwMDBBOEZCRjAwMTAyN0JEMDAxOEE3ODAwMENDMDYKLToxMDUwNjAwMEE3ODAwMDJDQTc4MDAwMzQwM0UwMDAwOEE3ODAwMEU2OUEKLToxMDUwNzAwMDkzOUYwMENFMTdFMEZGRjg4RkJGMDAxMDI3QkQwMDE4RTgKLToxMDUwODAwMEE3ODUwMENDQTc4NDAwMkNBNzgwMDAzNDAzRTAwMDA4OEIKLToxMDUwOTAwMEE3ODAwMEU2QTM4MDAwQ0U4Q0NCMDAzQzMxNkEwMDAxRTMKLToxMDUwQTAwMDExNDAwMDBFMDAwMDAwMDAzMEE3RkZGRjEwRTBGRkU2RjcKLToxMDUwQjAwMDI0MDIwMDUwOENDQzAwQzgzMTg2MDAwMTE0QzBGRkU0RUIKLToxMDUwQzAwMDkzOUYwMENFMEEwMDAwNzIyNDAyMDA1MThDOEYwMDA0Q0UKLToxMDUwRDAwMDNDMEU2MDAwMEEwMDAwNTUwMUVFMzAyMThDRUYwODA4RkMKLToxMDUwRTAwMDI0MEQ1NzA4MDAwRjc0MDIxMUNEMDAwNDMwQjhGRkZGRTMKLToxMDUwRjAwMDI0MDUwMDY2MEEwMDAwNzMyNDA0MDQwMDE3MDBGRkQ0OEUKLToxMDUxMDAwMDkzOUYwMENFMEEwMDAwNzIyNDAyMDA1MDhGODYwMDEwODgKLToxMDUxMTAwMDMwODlGRkZGMDAwOTM5NDA4Q0MzMDAxMDNDMDgwMDUwNjMKLToxMDUxMjAwMDAwRTgyMDI1QUY0MzAwMzg4Q0M1MDAxNDI3NDIwNDAwNTYKLToxMDUxMzAwMEFGODIwMDFDQUY0NTAwM0NBRjQ0MDAzMDAwMDAwMDAwQ0YKLToxMDUxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMDUxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNEIwMDAwNzUKLToxMDUxNjAwMDMxNkEwMDIwMTE0MEZGRkQwMDAwMDAwMDAzRTAwMDA4NEMKLToxMDUxNzAwMDAwMDAwMDAwOEY4NDAwMTA5NDhBMDAxQThDODcwMDI0OUQKLToxMDUxODAwMDMxNDlGRkZGMDAwOTQwQzAwMEU4MzAyMUFGNDYwMDNDMzQKLToxMDUxOTAwMDhDODUwMDI0OEY0MzAwM0MwMEEzMTAyMzE4NDAwMDI5NzUKLToxMDUxQTAwMDAwMDAwMDAwOEM4QjAwMjAyNTYyMDAwMTNDMEQwMDUwQTcKLToxMDUxQjAwMDM1QUMwMDA4QUY0MjAwMzhBRjRDMDAzMDAwMDAwMDAwQjIKLToxMDUxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMDUxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNEYwMDAwRjEKLToxMDUxRTAwMDMxRUUwMDIwMTFDMEZGRkQwMDAwMDAwMDhGNEEwNDAwRDYKLToxMDUxRjAwMDNDMDgwMDIwQUM4QTAwMTA4RjQ5MDQwNEFDODkwMDE0REMKLToxMDUyMDAwMEFGNDgwMDMwMDAwMDAwMDA5NDg2MDAxODk0ODcwMDFDMEUKLToxMDUyMTAwMDAwQzcxODIxQTQ4MzAwMTg5NDg1MDAxQTI0QTIwMDAxNTUKLToxMDUyMjAwMEE0ODIwMDFBOTQ5ODAwMUE5NDk5MDAxRTEzMzgwMDAzNUYKLToxMDUyMzAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDAzRTAwMDA4OTgKLToxMDUyNDAwMEE0ODAwMDFBOEM4MjAwMjAwQTAwMDBDQzNDMEQwMDUwODMKLToxMDUyNTAwMDBBMDAwMEJEMDAwMDAwMDAzQzAzMDgwMDhDNjMwMDIwMzEKLToxMDUyNjAwMDhGODIwMDE4MjdCREZGRTgxMDYyMDAwOEFGQkYwMDEwNTIKLToxMDUyNzAwMDBFMDAwMEY0QUY4MzAwMTgzQzAzMDgwMDhDNjMwMDIwOEMKLToxMDUyODAwMDI0MDQwMDAxMTA2NDAwMDQ4Rjg5MDAxMDhGQkYwMDEwRjcKLToxMDUyOTAwMDAzRTAwMDA4MjdCRDAwMTg4RkJGMDAxMDNDMDc2MDEyMTQKLToxMDUyQTAwMEE1MjAwMDBBOTUyODAwMEEzNEU1MDAxMDI3QkQwMDE4NDMKLToxMDUyQjAwMDMxMDZGRkZGMDNFMDAwMDhBQ0E2MDA5MDNDMDIwODAwQTYKLToxMDUyQzAwMDhDNDIwMDIwMjdCREZGQzhBRkJGMDAzNEFGQkUwMDMwMDYKLToxMDUyRDAwMEFGQjcwMDJDQUZCNjAwMjhBRkI1MDAyNEFGQjQwMDIwQTQKLToxMDUyRTAwMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNDEwNDAwMDUwQjMKLToxMDUyRjAwMEFGQjAwMDEwOEY4NDAwMTA5NDg2MDAwNjk0ODMwMDBBREIKLToxMDUzMDAwMDAwQzMyODIzMzBCNkZGRkYxMkMwMDA0QThGQkYwMDM0MEQKLToxMDUzMTAwMDk0ODkwMDE4OTQ4QTAwMEEwMTJBNDAyMzMxMDJGRkZGNzEKLToxMDUzMjAwMDAyQzIzODJCMTRFMDAwMDIwMkMwMjAyMTAwNDAyMDIxREMKLToxMDUzMzAwMDJDOEMwMDA1MTU4MDAwMDIwMDgwQTAyMTI0MTQwMDA0OUMKLToxMDUzNDAwMDBFMDAwMEEzMDI4MDIwMjE4Rjg3MDAxMDAyODA5ODIxODgKLToxMDUzNTAwMEFGODAwMDE0OTRFRDAwMEEwMjgwODgyMTEyODAwMDRFNzQKLToxMDUzNjAwMDMxQjJGRkZGM0MxNzcwMDAzQzE1NDAwMDNDMUU2MDAwNEUKLToxMDUzNzAwMDhGOEYwMDFDOERFRTAwMDAwMUQ3MTgyNDUwNzUwMDUwNEYKLToxMDUzODAwMDAyMjAyMDIxMDJBMzgwMkIxNjAwMDAzNTNDMTgyMDAwQUIKLToxMDUzOTAwMDUwNzgwMDQ3MDIyMDIwMjEyNDEwMDAwMThGODMwMDE0NDAKLToxMDUzQTAwMDE0NjAwMDM5MDI5MTU4MjMwMjMwRjgyMzAyNTBDODIxQkEKLToxMDUzQjAwMDMzRjFGRkZGMTYyMEZGRUUzMzMyRkZGRjhGODcwMDEwMUYKLToxMDUzQzAwMDNDMTEwMDIwQUY1MTAwMzAwMDAwMDAwMDk0RTYwMDBBQkMKLToxMDUzRDAwMDNDMUU2MDEyMzdENTAwMTAwMjY2MjgyMUE0RTUwMDBBQTEKLToxMDUzRTAwMDk0RTIwMDBBOTRGMjAwMEE5NEY0MDAxODMwNTdGRkZGODgKLToxMDUzRjAwMDEyOTIwMDNCQUVCNzAwOTA4Q0VEMDAxNDhDRTQwMDEwQ0MKLToxMDU0MDAwMDAwMTM3MTQwMDFBRTQwMjEwMDBFNUZDMzAxMEU1MDJCMEUKLToxMDU0MTAwMDAwOEI0ODIxMDEyQTE4MjFBQ0U4MDAxNEFDRTMwMDEwRUQKLToxMDU0MjAwMDAyRDMzODIzMzBGNkZGRkYxNkMwRkZCOThGODQwMDEwNzcKLToxMDU0MzAwMDhGQkYwMDM0OEZCRTAwMzA4RkI3MDAyQzhGQjYwMDI4OEUKLToxMDU0NDAwMDhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4REEKLToxMDU0NTAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDM4QTIKLToxMDU0NjAwMDEwN0UwMDFCMDAwMDAwMDAxNDc3RkZDQzI0MTAwMDAxMDgKLToxMDU0NzAwMDBFMDAxNUE5MDAwMDAwMDA4RjgzMDAxNDEwNjBGRkNCMDAKLToxMDU0ODAwMDAyMzBGODIzMDI5MTU4MjM4Rjg3MDAxMDAxNzAyMDIxRTkKLToxMDU0OTAwMDBBMDAwMTg3MzA5M0ZGRkY4RjgzMDAxNDE0NjBGRkNCNTUKLToxMDU0QTAwMDNDMTEwMDIwQUY1MTAwMzAwQTAwMDE1MzAwMDAwMDAwMDEKLToxMDU0QjAwMDBFMDAwNzlCMDI0MDI4MjEwQTAwMDE0NzAwNDA4MDIxN0UKLToxMDU0QzAwMDBFMDAwMzQxMDI0MDI4MjEwQTAwMDE0NzAwNDA4MDIxQ0MKLToxMDU0RDAwMDBFMDAxNDcxMDIyMDIwMjEwQTAwMDE0NzAwNDA4MDIxQTMKLToxMDU0RTAwMDBFMDAwMEJEMDAwMDAwMDAwQTAwMDE2OTAyRDMzODIzNEQKLToxMDU0RjAwMDI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDBFMDAwMDM3QUIKLToxMDU1MDAwMDAwMDAwMDAwM0MwMjgwMDAzNDUwMDA3MDBBMDAwMUFBMzQKLToxMDU1MTAwMDhFMDYwMDAwOEY0RjAwMDAzOUVFMDAwMTMxQzIwMDAxRkQKLToxMDU1MjAwMDEwNDAwMDI0OEY4NjAwQTg4RTA3MDAwMDNDMEMwODAwNjUKLToxMDU1MzAwMDhEOEMwMDNDM0MwOTA4MDA4RDI5MDAzODAwRTY2ODIzNkEKLToxMDU1NDAwMDAxOEQyODIxMDAwMDUwMjEwMEFEMzAyQjAxMkE0MDIxN0YKLToxMDU1NTAwMDAxMDYyMDIxM0MwMTA4MDBBQzI1MDAzQ0FGODcwMEE4RDMKLToxMDU1NjAwMDNDMDEwODAwQUMyNDAwMzgwRTAwMDBGNjAwMDAwMDAwRUEKLToxMDU1NzAwMDNDMDMwODAwOEM2MzAwNzAxMDYwRkZFNjAwNjAyMDIxOEYKLToxMDU1ODAwMDNDMDUwODAwOENBNTAwNjgzQzA2MDgwMDhDQzYwMDZDMzEKLToxMDU1OTAwMDBFMDAxNTM4MDAwMDAwMDAzQzAxMDgwMEFDMjAwMDcwMkYKLToxMDU1QTAwMDhGNEYwMDAwMzlFRTAwMDEzMUMyMDAwMTE0NDBGRkRFRDAKLToxMDU1QjAwMDhGODYwMEE4OEUwQTAwMDA4RjhCMDBBODNDMDUwODAwOEIKLToxMDU1QzAwMDhDQTUwMDNDM0MwNDA4MDA4Qzg0MDAzODAxNEI0ODIzMjcKLToxMDU1RDAwMDAwQTkzODIxMDA4MjE4MjEwMEU5NDAyQjAwNjgxMDIxMjEKLToxMDU1RTAwMDNDMDEwODAwQUMyNzAwM0MzQzAxMDgwMEFDMjIwMDM4MUMKLToxMDU1RjAwMDhGNUYwMTAwMjQxOUZGMDAyNDE4MEMwMDAzRjkyMDI0RjgKLToxMDU2MDAwMDEwOTgwMDEyQUY4NDAwMDBBRjQ0MDAyMDkzNkQwMDAwOUEKLToxMDU2MTAwMDI0MEMwMDIwMzFBNjAwRkYxMENDMDAxMjI0MEUwMDUwRjQKLToxMDU2MjAwMDEwQ0UwMDA0M0MxOTQwMDBBRjU5MDEzODBBMDAwMUEzMTQKLToxMDU2MzAwMDAwMDAwMDAwMEUwMDExRDQwMDAwMDAwMDNDMTk0MDAwRTIKLToxMDU2NDAwMEFGNTkwMTM4MEEwMDAxQTMwMDAwMDAwMDBFMDAwMTBGNEQKLToxMDU2NTAwMDAwMDAwMDAwM0MxOTQwMDBBRjU5MDEzODBBMDAwMUEzQzYKLToxMDU2NjAwMDAwMDAwMDAwOEY1ODAxMDAwMDgwMjgyMTMzMEYwMEZGNDgKLToxMDU2NzAwMDAxRTAyMDIxMEUwMDAyRUVBRjhGMDAwNDNDMTk0MDAwMzMKLToxMDU2ODAwMEFGNTkwMTM4MEEwMDAxQTMwMDAwMDAwMDAwQTQxMDJCNEMKLToxMDU2OTAwMDI0MDMwMDAxMTA0MDAwMDkwMDAwMzAyMTAwMDUyODQwQ0IKLToxMDU2QTAwMDAwQTQxMDJCMDRBMDAwMDMwMDAzMTg0MDU0NDBGRkZDOEEKLToxMDU2QjAwMDAwMDUyODQwNTA2MDAwMEEwMDA0MTgyQjAwODUzODJCOTQKLToxMDU2QzAwMDU0RTAwMDA0MDAwMzE4NDIwMEMzMzAyNTAwODUyMDIzNjUKLToxMDU2RDAwMDAwMDMxODQyMTQ2MEZGRjkwMDA1Mjg0MjAwMDQxODJCNEIKLToxMDU2RTAwMDAzRTAwMDA4MDBDMzEwMjEzMDg0RkZGRjMwQTVGRkZGNTYKLToxMDU2RjAwMDhGNDIwMUI4MDQ0MEZGRkUzQzA3NDA4MDAwODczMDI1MDAKLToxMDU3MDAwMDNDMDMxMDAwQUY0MDAxODBBRjQ1MDE4NEFGNDYwMTg4RTMKLToxMDU3MTAwMDAzRTAwMDA4QUY0MzAxQjgzMDg0RkZGRjhGNDIwMUI4QjcKLToxMDU3MjAwMDA0NDBGRkZFM0MwNzQwMzg4Q0E2MDAwMDAwODcyODI1NzcKLToxMDU3MzAwMDNDMDMxMDAwQUY0NjAxODBBRjQ1MDE4ODAzRTAwMDA4M0MKLToxMDU3NDAwMEFGNDMwMUI4OEY4MzAwMzg4Rjg2MDAzMDEwNjYwMDBCOUUKLToxMDU3NTAwMDAwODA0MDIxM0MwNzA4MDAyNEU3NUExODAwMDMyOEMwQjUKLToxMDU3NjAwMDAwQTcxMDIxOEM0NDAwMDAyNDYzMDAwMTEwODgwMDA1NkMKLToxMDU3NzAwMDMwNjMwMDBGNTQ2NkZGRkEwMDAzMjhDMDAzRTAwMDA4RkUKLToxMDU3ODAwMDAwMDAxMDIxM0MwNzA4MDAyNEU3NUExQzAwQTczMDIxMjQKLToxMDU3OTAwMDAzRTAwMDA4OENDMjAwMDAzQzAzOTAwMDM0NjIwMDAxNkEKLToxMDU3QTAwMDAwODIyMDI1QUY0NDAwMjA4RjQ1MDAyMDA0QTBGRkZFOEEKLToxMDU3QjAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDM4MDAwM0YKLToxMDU3QzAwMDM0NjIwMDAxMDA4MjIwMjUwM0UwMDAwOEFGNDQwMDIwN0QKLToxMDU3RDAwMDI3QkRGRkUwQUZCMTAwMTQzMDkxRkZGRkFGQjAwMDEwNjQKLToxMDU3RTAwMEFGQkYwMDE4MTIyMDAwMTUwMEEwODAyMThDQTUwMDAwN0EKLToxMDU3RjAwMDEwQTAwMDEzMjQwNDAwMDIwRTAwMEM2QjI0MDYwMTQwQ0MKLToxMDU4MDAwMEFFMDAwMDAwOEY0MjAxQjgwNDQwMDAwRDAwMDAyODIxQzYKLToxMDU4MTAwMDNDMDY0MDAwMDIyNjIwMjU4RkJGMDAxODhGQjEwMDE0REYKLToxMDU4MjAwMDhGQjAwMDEwM0MwMzEwMDAyN0JEMDAyMEFGNDUwMTgwNjEKLToxMDU4MzAwMEFGNDQwMTg4MDNFMDAwMDhBRjQzMDFCODhDQTUwMDAwMjUKLToxMDU4NDAwMDhGNDIwMUI4MDQ0MEZGRkUzQzA2NDAwMDAyMjYyMDI1OUUKLToxMDU4NTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDNDMDMxMDAwRjAKLToxMDU4NjAwMDI3QkQwMDIwQUY0NTAxODBBRjQ0MDE4ODAzRTAwMDA4NTgKLToxMDU4NzAwMEFGNDMwMUI4MzA4NkZGRkY4RjQyMDFCODA0NDBGRkZFRkUKLToxMDU4ODAwMDNDMDk0MDA2OENBODAwMDAwMEM5MzgyNUFGNDgwMTgwQkIKLToxMDU4OTAwMDhDQTQwMDA0M0MwMzEwMDBBRjQ0MDE4NEFGNDcwMTg4OEUKLToxMDU4QTAwMDAzRTAwMDA4QUY0MzAxQjgyN0JERkZFMEFGQjAwMDEwMzAKLToxMDU4QjAwMEFGQkYwMDE4QUZCMTAwMTQ5MzYzMDAzRTAwODA4MDIxOTkKLToxMDU4QzAwMDAwODAyODIxMzA2MjAwNDAwMDAwMjAyMTEwNDAwMDBGOUQKLToxMDU4RDAwMDhFMTEwMDAwMEUwMDA4NjAwMjIwMjAyMTkzNjcwMDAwNTYKLToxMDU4RTAwMDI0MDQwMDUwMzBFNTAwRkY1MEE0MDAxMjhFMEYwMDAwODkKLToxMDU4RjAwMDAyMjAyMDIxOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwM0MKLToxMDU5MDAwMEE3NjIwMTNDMEEwMDA5MjAyN0JEMDAyMDBFMDAwMjdEOEQKLToxMDU5MTAwMDAwMDAwMDAwMEUwMDA4NjAwMjIwMjAyMTkzNjcwMDAwQjQKLToxMDU5MjAwMDI0MDQwMDUwMzBFNTAwRkYxNEE0RkZGMjAyMjAyMDIxREYKLToxMDU5MzAwMDhFMEYwMDAwM0MxMDA4MDA4RTEwMDA1MDNDMEQwMDBDMzMKLToxMDU5NDAwMDI0MEJGRjgwMDFGMDUwMjEzMTRFMDA3RjAxREE2MDIxRUQKLToxMDU5NTAwMDAxOEQ0MDIxMDE0QjQ4MjRBRjQ5MDAyODAyMjAyMDIxMUQKLToxMDU5NjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEE1MDIwMEQ2QjEKLToxMDU5NzAwMDI3QkQwMDIwMEEwMDA5MjBBRjg4MDBEMDI3QkRGRkUwMjYKLToxMDU5ODAwMEFGQkYwMDE4QUZCMTAwMTRBRkIwMDAxMDkzNjYwMDAxQjQKLToxMDU5OTAwMDAwODA4MDIxMEUwMDAyNDYzMEQxMDAwNDkzNjQwMDA1OEYKLToxMDU5QTAwMDAwMTAyOUMyQTc2NTAwMDAzNDgzMDA0MEEzNjMwMDA1RUUKLToxMDU5QjAwMDBFMDAwMjRGMDIwMDIwMjEwRTAwMDkyMjAyMDAyMDIxQzkKLToxMDU5QzAwMDI0MDIwMDAxQUY2MjAwMEMwMjAwMjgyMUE3NjIwMDEwMkYKLToxMDU5RDAwMDI0MDQwMDAyQTc2MjAwMTIyNDA2MDE0MEE3NjIwMDE0RkEKLToxMDU5RTAwMDBFMDAwQzZCQTc2MjAwMTYxNjIwMDAwRjhGQkYwMDE4NjgKLToxMDU5RjAwMDk3OEMwMDM0M0MwQjA4MDA4RDZCMDA3ODI1ODhGRkZGRTYKLToxMDVBMDAwMDMxMDlGRkZGMjU2QTAwMDEwMTJBMzgyQjEwRTAwMDA2NEEKLToxMDVBMTAwMEE3ODgwMDM0M0MwRjYwMDYyNDBFMDAxNjM1RUQwMDEwRjgKLToxMDVBMjAwMEFEQUUwMDUwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQzIKLToxMDVBMzAwMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFMEFGQjEwMDE0NDAKLToxMDVBNDAwMEFGQkYwMDE4QUZCMDAwMTAwMEEwODgyMTEwODAwMDBBN0UKLToxMDVBNTAwMDNDMDM2MDAwMjQwMjAwODAxMDgyMDAxMjAwMDAwMDAwNUQKLToxMDVBNjAwMDAwMDAwMDBEOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMjAKLToxMDVBNzAwMDAzRTAwMDA4MjdCRDAwMjA4QzY4MkJGODA1MDBGRkZFMUUKLToxMDVBODAwMDAwMDAwMDAwQUM3MTJCQzA4RkJGMDAxODhGQjEwMDE0NTQKLToxMDVBOTAwMDhGQjAwMDEwM0MwOTEwMDAyN0JEMDAyMDAzRTAwMDA4NzMKLToxMDVBQTAwMEFDNjkyQkY4MEUwMDAyNDYwMEEwMjAyMTkzNjUwMDA1OEEKLToxMDVBQjAwMDAyMjAyMDIxMEUwMDAyNEYzMEIwMDBGRjI0MDMwMDNFRTAKLToxMDVBQzAwMDE2MDNGRkU3MDAwMDAwMDA4RjQ0MDE3ODA0ODBGRkZFMEEKLToxMDVBRDAwMDI0MDcwMDA3M0MwNjEwMDBBRjUxMDE0MDAyMjAyMDIxOUUKLToxMDVBRTAwMEEzNDcwMTQ0OEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwN0UKLToxMDVBRjAwMEFGNDYwMTc4MEEwMDAyQkYyN0JEMDAyMDI3QkRGRkU4OUUKLToxMDVCMDAwMEFGQkYwMDE0QUZCMDAwMTA4RjUwMDAyMDAwMDAwMDAwQTUKLToxMDVCMTAwMDBFMDAwOTIyQUY0NDAwMjBBRjUwMDAyMDhGQkYwMDE0QjgKLToxMDVCMjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODMwODRGRkZGOEQKLToxMDVCMzAwMDhGNDIwMUI4MDQ0MEZGRkUzQzA3NDAzNTAwODczMDI1MDYKLToxMDVCNDAwMDNDMDMxMDAwQUY0NTAxODBBRjQwMDE4NEFGNDYwMTg4OUYKLToxMDVCNTAwMDAzRTAwMDA4QUY0MzAxQjgzMDg0RkZGRjhGNDIwMUI4NzMKLToxMDVCNjAwMDA0NDBGRkZFM0MwNzQwMzYwMDg3MzAyNTNDMDMxMDAwMTAKLToxMDVCNzAwMEFGNDUwMTgwQUY0MDAxODRBRjQ2MDE4ODAzRTAwMDA4RDMKLToxMDVCODAwMEFGNDMwMUI4MjdCREZGRDBBRkIzMDAxQzMwOTNGRkZGNzgKLToxMDVCOTAwMEFGQjUwMDI0QUZCMjAwMThBRkJGMDAyOEFGQjQwMDIwRUIKLToxMDVCQTAwMEFGQjEwMDE0QUZCMDAwMTAzMEI1RkZGRjEyNjAwMDI3OTYKLToxMDVCQjAwMDAwMDA5MDIxOEY5MDAwMUM4RTAzMDAwMDNDMDY4MDAwQTYKLToxMDVCQzAwMDI0MDIwMDQwMDAwMzNFMDIwMDAzMkMwMjMwRTQwMDdGNjgKLToxMDVCRDAwMDAwNjY4ODI0MTQ4MjAwMUQzMEE1MDBGRjhGODMwMDI4RjIKLToxMDVCRTAwMDJDNjgwMDBBNTEwMDAwMTA4RjkxMDAxNDAwMDM1ODgwQTcKLToxMDVCRjAwMDNDMEMwODAwMjU4QzU2Q0MwMTZDNTAyMThENDkwMDAwQ0UKLToxMDVDMDAwMDAxMjAwMDA4MDAwMDAwMDAwMkIyMTgyMTMwNjVGRkZGRUIKLToxMDVDMTAwMDBFMDAwMjFBMjQwNDAwODQxNjIwMDAwMjhGOTAwMDFDM0IKLToxMDVDMjAwMEFGODAwMDI4OEY5MTAwMTQyNjBDMDAyMDI2NEIwMDAxMjUKLToxMDVDMzAwMDAxODA4MDIxMzE3MkZGRkYxNjIwMDAwNEFGOEMwMDFDMTAKLToxMDVDNDAwMDAyNTM0MDJCMTUwMEZGREMwMDAwMDAwMDAyNDAxMDIxMzEKLToxMDVDNTAwMDhGQkYwMDI4OEZCNTAwMjQ4RkI0MDAyMDhGQjMwMDFDQTUKLToxMDVDNjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4NEQKLToxMDVDNzAwMDI3QkQwMDMwMjQwRDAwMzQxNEFEMDBGNjAwMDAwMDAwRjQKLToxMDVDODAwMDkyMEIwMDBFMjQwQTE2ODAzQzA3MDAwQ0EzNkIwMDIxMjcKLToxMDVDOTAwMDkyMDMwMDBEMDM0N0Y4MjEzQzA2NjAwMEEzNjMwMDIwMzcKLToxMDVDQTAwMDk2MTEwMDEyM0MwODdGRkYzNTBDRkZGRkE3NzEwMDNDRTYKLToxMDVDQjAwMDk2MDIwMDEwMjQwQjAwMDUzMDU0RkZGRkFGNzQwMDg0REYKLToxMDVDQzAwMDhFMTkwMDFDQUY0QTAwMjg4RkY4MDAwMDhDQ0Y0NDQ4ODIKLToxMDVDRDAwMDAzMTk3MDI2MDFFRTMwMjFBRjY2MDA0QzhGNjkwMDRDMkQKLToxMDVDRTAwMDI0Q0QwMDAxM0MxOTdGMDBBRjY5MDA1MDhGNjQwMDUwNDMKLToxMDVDRjAwMEFGNjQwMDU0QUY2NjAwNzBBRjZEMDA1ODhGNjUwMDU4RjgKLToxMDVEMDAwMDI0MDQwMDUwQUY2NTAwNUNBMzYwMDAyM0FGNkMwMDY0MDYKLToxMDVEMTAwMEEzNkIwMDM3OEUwMzAwMTRBRjYzMDA0ODhGNzEwMDQ4RjcKLToxMDVEMjAwMEFGNzEwMDI0OEUwMjAwMThBRjYyMDA2QzkyMTQwMDBDNTgKLToxMDVEMzAwMEEzNzQwMDM2OTM2QTAwM0UzNTVGMDAyMEEzN0YwMDNFQzcKLToxMDVENDAwMDhGNzgwMDc0MDMxOTc4MjQzNUVFNDAwMEFGNkUwMDc0MkMKLToxMDVENTAwMDkzNzAwMDAwMzIwOTAwRkYxMTI0MDIzMzI0MThGRjgwRTEKLToxMDVENjAwMDNDMDQwODAwMjQ4NDVBOTgwRTAwMDI4QTAwMDAwMDAwQjcKLToxMDVENzAwMDI0MDYwMDA0MjQwNzAwMDEzQzA0MDgwMDhDODQ1QTk4N0YKLToxMDVEODAwMEEzNjYwMDdEQTM2NzAwMDU4RjRBMDE3ODA1NDBGRkZFRUEKLToxMDVEOTAwMDI0MDIwMDAyQUY0NDAxNDBBMzQyMDE0NDhGOTAwMDFDNDIKLToxMDVEQTAwMDNDMTQxMDAwQUY1NDAxNzgwQTAwMDM2OUFGODAwMDI4NEEKLToxMDVEQjAwMDJDQUQwMDM3NTFBMEZGOUM4RjkxMDAxNDAwMDVBMDgwRUUKLToxMDVEQzAwMDNDMTgwODAwMjcxODU2RjQwMjk4NzgyMThERUUwMDAwNDAKLToxMDVERDAwMDAxQzAwMDA4MDAwMDAwMDAyNDA2MDAwNjE0QTYwMDExRkYKLToxMDVERTAwMDAwMDAwMDAwM0MxRjA4MDA4RkZGNUE5ODI0MDQwMDA1QTMKLToxMDVERjAwMEFGNUYwMDIwOEUxOTAwMThBRjc5MDAxODhGNzgwMDRDMjMKLToxMDVFMDAwMEFGNzgwMDFDOEY2RjAwNTAxMjIwMDBDMkFGNkYwMDcwN0YKLToxMDVFMTAwMDBBMDAwMzY5QUY4NDAwMjgyNDBBMDAwNzEwQUEwMDg0M0UKLToxMDVFMjAwMDI0MDMwMDA2M0MwNTA4MDAyNEE1NUE5ODBFMDAwMjU0REQKLToxMDVFMzAwMDI0MDQwMDgxOEY5MDAwMUMwMDExMTAyQjBBMDAwMzY5QkMKLToxMDVFNDAwMEFGODIwMDI4MjQwQTAwMDQxNEFBRkZGNjI0MDMwMDUwOUQKLToxMDVFNTAwMDNDMEUwODAwOERDRTVBOThBRjRFMDAyMDhFMDkwMDA4RTcKLToxMDVFNjAwMEFGNjkwMDQwOEUwNjAwMDhBRjY2MDA0NDhFMDcwMDBDNDQKLToxMDVFNzAwMEFGNjcwMDQ4OEUwNDAwMTBBRjY0MDA0QzhFMEQwMDEwMTgKLToxMDVFODAwMEFGNkQwMDg0OEUwODAwMTRBRjY4MDA1MDhFMDUwMDE4QjYKLToxMDVFOTAwMEFGNjUwMDU0OEUwQzAwMUNBRjZDMDA1ODkzNkIwMDAwNzMKLToxMDVFQTAwMDMxNzQwMEZGMTI4MzAxRjUwMDAwMDAwMDhGNjQwMDQ4ODgKLToxMDVFQjAwMDhGNjYwMDQwMDA4NjM4MjMwNEUwMDAwNDI0MDQwMDhDMzAKLToxMDVFQzAwMDE2MjBGRkRFMjQwMjAwMDMyNDA0MDA4MjNDMDUwODAwQTMKLToxMDVFRDAwMDI0QTU1QTk4MEUwMDAyN0QwMDAwMDAwMDhGOTAwMDFDM0YKLToxMDVFRTAwMDAwMDAxMDIxMEEwMDAzNjlBRjgyMDAyODI0MDkwMDA1ODAKLToxMDVFRjAwMDE0QTlGRkNDMjQwNTIwMDAzQzBBMDgwMDhENEE1QTk4QkEKLToxMDVGMDAwMEFGNEEwMDIwOEUxRjAwMDRBRjdGMDA1QzkyMTkwMDA4OEEKLToxMDVGMTAwMDI0MTAwMDA4QTM3OTAwMjE4Rjk4MDAxQzkzMEYwMDA5MUEKLToxMDVGMjAwMEEzNkYwMDIwOEY4NjAwMUM5MENFMDAwQTMxQzQwMEZGQjIKLToxMDVGMzAwMDEwOTAwMDEwMjg4MzAwMDkxNDYwMDA2QzI0MDIwMDAyRjUKLToxMDVGNDAwMDI0MDgwMDIwMTA4ODAwMEIzNDA1ODAwMDI4ODUwMDIxREIKLToxMDVGNTAwMDE0QTAwMDA4MjQwNTQwMDAyNDBEMDA0MDEwOEQwMDA1MDkKLToxMDVGNjAwMDNDMDUwMDAxMjQwNzAwODAxMDg3MDAwMjNDMDUwMDAyNjgKLToxMDVGNzAwMDI0MDU0MDAwOEY2RTAwNzQzQzBGRkYwMDAxQ0Y4MDI0ODkKLToxMDVGODAwMDAyMDU0ODI1QUY2OTAwNzQ5MEM0MDAwQkEzNjQwMDgxMkEKLToxMDVGOTAwMDhGODQwMDFDOTQ4NjAwMEMxMEMwMDE5QjAwMDAwMDAwNDAKLToxMDVGQTAwMDk0OEUwMDBDMjQxRkZGQkYyNDA2MDAwNEE3NkUwMDNDNDMKLToxMDVGQjAwMDkwOTAwMDBFQTM3MDAwM0U4Rjg5MDAxQzkxMjQwMDBGNkEKLToxMDVGQzAwMEEzNjQwMDNGOEY5NDAwMUM4RThEMDAxMDhGNDcwMDc0RDcKLToxMDVGRDAwMDAxQTcyODIzQUY2NTAwNjA4RTg4MDAxNEFGNjgwMDY0QjUKLToxMDVGRTAwMDk2OEMwMDE4QTc2QzAwNjg5NjhCMDAxQUE3NkIwMDZBNDUKLToxMDVGRjAwMDhFODIwMDFDQUY2MjAwNkM5NjgzMDAwMkE3NjMwMTNFOTQKLToxMDYwMDAwMDkyOEEwMDBFQTM2QTAwM0U5Mzc5MDAzRTAzM0ZDMDI0QUIKLToxMDYwMTAwMDEyMjAwMTZBQTM3ODAwM0U4RjkwMDAxQzBBMDAwMzY5RDkKLToxMDYwMjAwMEFGODYwMDI4MjQxNDAwMjIxNEI0RkY3RTI0MDMwMDA3NDYKLToxMDYwMzAwMDNDMDIwODAwOEM0MjVBOTgxMjIwMDAwQ0FGNDIwMDIwMEIKLToxMDYwNDAwMDBBMDAwMzY5QUY4MzAwMjgyNDBDMDAzMzEwQUMwMDE0NEQKLToxMDYwNTAwMDI0MDgwMDI4M0MwNTA4MDAyNEE1NUE5ODBFMDAwMjI2QjIKLToxMDYwNjAwMDI0MDQwMDgxMEEwMDAzRUU4RjkwMDAxQzNDMDQwODAwMDkKLToxMDYwNzAwMDI0ODQ1QTk4MEUwMDAyOEEwMDAwMDAwMDkzNkIwMDAwRUUKLToxMDYwODAwMDI0MTEwMDUwMzE2MzAwRkYxMDcxMDE1NDAwMDAwMDAwMjIKLToxMDYwOTAwMDhGOTAwMDFDMDAwMDE4MjEwQTAwMDM2OUFGODMwMDI4QkMKLToxMDYwQTAwMDNDMDUwODAwOENBNTVBOTgyNDA0MDA4MUFGNDUwMDIwQzcKLToxMDYwQjAwMEEzNjgwMDM0M0MwNTA4MDAyNEE1NUE5ODBFMDAwMjI2NjcKLToxMDYwQzAwMDAwMDAwMDAwOEY5MDAwMUMyNDAyMDAwOTBBMDAwMzY5RjAKLToxMDYwRDAwMEFGODIwMDI4MDJCMjg4MjEzMjI1RkZGRjBFMDAwMjFBOEIKLToxMDYwRTAwMDI0MDQwMDg0MEEwMDAzNjk4RjkwMDAxQzEwODJGRkExMjEKLToxMDYwRjAwMDI0MDUwNDAwMjg5NDAwMDMxMjgwMDE3NjI0MEMwMDA0NzcKLToxMDYxMDAwMDI0MEIwMDAxNTQ4QkZGOUIyNDA1NDAwMDBBMDAwNDNEMzIKLToxMDYxMTAwMDI0MDUwMTAwM0MwNDA4MDAyNDg0NUE5ODhGNjIwMDRDMzYKLToxMDYxMjAwMDBFMDAwMjhBOEY2MzAwNTA4RjkwMDAxQzAwMDAyMDIxMTcKLToxMDYxMzAwMDBBMDAwMzY5QUY4NDAwMjg4RTEwMDAwNDI0MDQwMDhBM0EKLToxMDYxNDAwMEFGNTAwMDIwOTM2RTAwMDUzMUM5MDAwMjE1MjAwMTY1OTMKLToxMDYxNTAwMDAyMDAyODIxOTM3ODAwMjMwMjAwMjgyMTMzMEYwMDIwMTkKLToxMDYxNjAwMDE1RTAwMTYwMjQwNDAwOEQ5MzYyMDAzRjI0MTkwMDEyQTEKLToxMDYxNzAwMDMwNUYwMEZGMTNGOTAxNUIyNDA0MDA4MTBFMDAwMjQ2MkEKLToxMDYxODAwMDAyMDAyMDIxOTM3NDAwMjMyNDBBMDAwNDAyMDAyMDIxMkQKLToxMDYxOTAwMDM2ODMwMDQyQTM2MzAwMjMwRTAwMDI0RkEzNkEwMDdERjIKLToxMDYxQTAwMDhGNEIwMTc4MDU2MEZGRkUyNDA1MDAwMkFGNTAwMTQwQ0YKLToxMDYxQjAwMEEzNDUwMTQ0OEY5MDAwMUMzQzBDMTAwMEFGNEMwMTc4QUIKLToxMDYxQzAwMDBBMDAwM0VGMDAxMTEwMkI4RTEwMDAwNDI0MDQwMDhBMzMKLToxMDYxRDAwMEFGNTAwMDIwOTM2RDAwMDUzMUE4MDAwMjE1MDAwMDE5OTIKLToxMDYxRTAwMDAyMDAyODIxOTM2NzAwM0YyNDE0MDAxMjMwRTQwMEZGQ0UKLToxMDYxRjAwMDEwOTQwMTAxMDAwMDAwMDA5MzZFMDAzRjI0MDYwMDA0OEIKLToxMDYyMDAwMDMxQzkwMEZGMTEyNjAwRkMwMDAwMDAwMDBFMDAwMjQ2MEMKLToxMDYyMTAwMDAyMDAyMDIxOTM2MjAwMjMyNDE5RkZGRTAyMDAyMDIxQTYKLToxMDYyMjAwMDM0NUYwMDIwQTM3RjAwMjNBMzc0MDAzRjkzNzgwMDA1MTAKLToxMDYyMzAwMDAzMTk3ODI0MEUwMDAyNEZBMzZGMDAwNTAyMDAyODIxRTUKLToxMDYyNDAwMDAwMDAyMDIxMEUwMDAzMzYwMDAwMDAwMDBBMDAwM0VFQ0IKLToxMDYyNTAwMDhGOTAwMDFDOEUwNTAwMDQzQzBGMDAwODAzNEY0MDIxNjYKLToxMDYyNjAwMEFGNDUwMDIwOTEwRTAwMDAyNDA2MDA1MDMxQzkwMEZGMDgKLToxMDYyNzAwMDExMjYwMTdBMjQwNDAwODg4RjU5MDFCODA3MjBGRkZFRjcKLToxMDYyODAwMDNDMEM0MDBFMDA4QzU4MjUzQzAzMTAwMEFGNDUwMTgwQUIKLToxMDYyOTAwMEFGNDAwMTg0QUY0QjAxODhBRjQzMDFCODkxMDIwMDAwQzkKLToxMDYyQTAwMDI0MEFGRjgwMjQwNDAwMDQwMDRBRjgyNUExMUYwMDAwRUUKLToxMDYyQjAwMDBFMDAwQzZCMjQwNjAwMzAwQTAwMDNFRThGOTAwMDFDQzkKLToxMDYyQzAwMDhFMDQwMDFDMEUwMDAyMzEwMDAwMDAwMDEwNDAwMTRDNDIKLToxMDYyRDAwMDAwNDA0ODIxOEY5MDAwMUMyNDA1MDA4OThGNEQwMUI4OTMKLToxMDYyRTAwMDA1QTBGRkZFMDAwMDAwMDBBRjQ5MDE4MDhFMEYwMDFDREEKLToxMDYyRjAwMDNDMTQ0MDAxMDAxMTcwMkIwMEI0NDgyNTNDMTExMDAwRTMKLToxMDYzMDAwMEFGNEYwMTg0QUY4RTAwMjhBRjQ5MDE4OEFGNTEwMUI4NkIKLToxMDYzMTAwMDBBMDAwMzZBOEY5MTAwMTQ5NjE5MDAwMjNDMTQwODAwQzkKLToxMDYzMjAwMDI2OTQ1QTk4MzMzODAwMDQxMzAwMDBGMjNDMDI2MDAwQUYKLToxMDYzMzAwMDhFMUYwMDFDM0MwMTA4MDBBQzNGNUE5OEFGNUYwMDIwNDQKLToxMDYzNDAwMDkyMEMwMDEwMjQwQjAwMTQzMTg0MDBGRjE0OEIwMTFDRUMKLToxMDYzNTAwMDAwMDAwMDAwOTYwOTAwMDIzMTJEMDAwMTE1QTAwMUIyRDUKLToxMDYzNjAwMDAwMDAwMDAwOEUwMjAwMDRBRTgyMDAwODNDMEUwODAwMEYKLToxMDYzNzAwMDhEQ0U1QUEwMTFDMDAxQTgwMDAwMDAwMDhGNjkwMDc0RTIKLToxMDYzODAwMDNDMEU4MDAwMjQwNDAwMDEwMTJFNjgyNUFGNkQwMDc0Q0UKLToxMDYzOTAwMEEzNjAwMDA1QUY2NDAwMEMzQzBDMDgwMDhEOEM1QUEwNzMKLToxMDYzQTAwMDhGODgwMDFDQTc2NDAwMTAwMDBDNTlDMkE3NjQwMDEyNUIKLToxMDYzQjAwMEE3NjQwMDE0QTc2NDAwMTZBNzZCMDAwODhEMDMwMDA4RUIKLToxMDYzQzAwMDI0MDQwMDAyQUY2MzAwMkM4RDBBMDAwQ0FGNkEwMDMwNzkKLToxMDYzRDAwMDkxMDcwMDEwQTM2NzAwMzQ4RjgyMDAxQzkwNDUwMDExQzQKLToxMDYzRTAwMEEzNjUwMDM1OEY4NjAwMUM5MEQwMDAxMkEzNzAwMDM2ODQKLToxMDYzRjAwMDhGOUYwMDFDOTNGOTAwMTNBMzc5MDAzNzhGOTAwMDFDMjYKLToxMDY0MDAwMDk2MTgwMDE0QTc3ODAwMzg5NjE0MDAxNkE3NzQwMDNBNUUKLToxMDY0MTAwMDhFMEYwMDE4QUY2RjAwMjQ1NjIwRkUwMkFGODQwMDI4QjQKLToxMDY0MjAwMDNDMDUwODAwMjRBNTVBOTgwRTAwMDI1NDAwMDAyMDIxQzMKLToxMDY0MzAwMDhGOTAwMDFDMEEwMDA0QUMwMDAwMjAyMThFMEYwMDA0ODUKLToxMDY0NDAwMDNDMTQwODAwMjY5NDVBOTgzQzAxMDgwMEFDMkY1QTk4MzYKLToxMDY0NTAwMEFGNEYwMDIwOTIwRTAwMDMzMUM5MDAwNDExMjAwMDAyNEEKLToxMDY0NjAwMDI0MDIwMDEyMjQwMjAwMDZBMzYyMDAzRjkyMDMwMDFCRDQKLToxMDY0NzAwMDI0MEFGRkMwMzA2MjAwM0YwMDRBRjgyNUEzN0YwMDNFOTcKLToxMDY0ODAwMDkyMTkwMDAzMzMzODAwMDExNzAwMDBDMTAwMDAwMDAwMUEKLToxMDY0OTAwMDhFMDIwMDA4QUU4MjAwMDgzQzAyMDgwMDhDNDI1QUEwMUUKLToxMDY0QTAwMDEwNDAwMEMwMDAwMDAwMDAwMDAyMjFDMkE3NjQwMDA4RTQKLToxMDY0QjAwMDhFMEQwMDBDMjQwQjAwMDEyNDE0MDAxNEFGNkQwMDJDNzEKLToxMDY0QzAwMDhFMDgwMDEwQUY2ODAwMzA5NjA1MDAxNkE3NjUwMDM4RUEKLToxMDY0RDAwMDk2MEMwMDE0QTc2QzAwM0FBRjZCMDAwQ0E3NkIwMDEwNzEKLToxMDY0RTAwMEE3NkIwMDEyQTc2QjAwMTRBNzZCMDAxNjEyMjAwMEVCMUQKLToxMDY0RjAwMEEzNzQwMDM0OTIwNjAwMDMzMEM3MDAwMjJDRjAwMDAxQTAKLToxMDY1MDAwMDI2MDIwMDA4OEY5MDAwMUMwQTAwMDM2OUFGODIwMDI4NTEKLToxMDY1MTAwMDhFMTQwMDA0MjQwMzAwODFBRjU0MDAyMDkzNjgwMDIzRUMKLToxMDY1MjAwMDMxMDUwMDEwMTBBMDAwQUMwMDAwMDAwMDhGNDQwMUI4M0QKLToxMDY1MzAwMDA0ODBGRkZFM0MwNjQwMUYwMDExMzgyQjAwNjYxMDI1MkEKLToxMDY1NDAwMDNDMTExMDAwQUY1NDAxODBBRjg3MDAyOEFGNDAwMTg0OTgKLToxMDY1NTAwMEFGNDIwMTg4QUY1MTAxQjgwQTAwMDM2QThGOTEwMDE0NUQKLToxMDY1NjAwMDhFMDYwMDA0M0MxOTAwMDgwMzU5MjAyMUFGNDYwMDIwODQKLToxMDY1NzAwMDhFMDcwMDA4OTA5ODAwMDAyNDBGMDA1MDMzMTQwMEZGOEQKLToxMDY1ODAwMDEyOEYwMEE3MjQwNTAwODg4RjQ0MDFCODA0ODBGRkZFMDUKLToxMDY1OTAwMDNDMEQ0MDA5MDAxMTYwMkIwMEFEMTAyNTNDMTExMDAwOEUKLToxMDY1QTAwMEFGNDYwMTgwQUY4QzAwMjhBRjQ3MDE4NEFGNDIwMTg4MUQKLToxMDY1QjAwMEFGNTEwMUI4MEEwMDAzNkE4RjkxMDAxNDNDMDUwODAwMkUKLToxMDY1QzAwMDI0QTU1QTk4MEUwMDAyN0QyNDA0MDA4MjhGOTAwMDFDOUUKLToxMDY1RDAwMDAwMDAzMDIxMEEwMDAzNjlBRjg2MDAyODNDMDQwODAwNEYKLToxMDY1RTAwMDhDODQ1QTk4MEUwMDE0RjYwMDAwMDAwMDhGOTAwMDFDNTYKLToxMDY1RjAwMDBBMDAwNDg2MDAwMDE4MjEwRTAwMDMzNjI0MDQwMDgxREUKLToxMDY2MDAwMDBBMDAwM0VFOEY5MDAwMUMzQzA1MDgwMDI0QTU1QTk4NTAKLToxMDY2MTAwMDBFMDAwMjdEMjQwNDAwOEI4RjkwMDAxQzAwMTEzMDJCOTMKLToxMDY2MjAwMDBBMDAwMzY5QUY4NjAwMjgzQzE5MDgwMDhGMzk1QTk4ODAKLToxMDY2MzAwMDNDMUYwODAwOEZGRjAwNTAyNENDRkZGRTAzM0Y3ODIxNTEKLToxMDY2NDAwMDAxRjg3MDI0QUY0RTAwMjgzQzA0MDgwMDhDODQ1QTk4NEUKLToxMDY2NTAwMDNDMDkwODAwOEQyOTAwNTAwMDg5NjgyMTMxQTUwMDdGODAKLToxMDY2NjAwMDAwQkE0MDIxMDEwNzgwMjFBRTA2MDBEOEFGOTAwMEQwQ0IKLToxMDY2NzAwMEFFMDAwMERDMEEwMDAzQjhBRTBDMDEwOEFGNjAwMDg0NzUKLToxMDY2ODAwMDNDMDgwODAwOEQwODVBOTgzQzBEMDgwMDhEQUQwMDUwNUMKLToxMDY2OTAwMDI0MDVGRjgwM0MwMjAwMEMwMTBENTgyMTAxNjU2MDI0OTcKLToxMDY2QTAwMEFGNEMwMDI4OEUwQTAwMTQzMTc0MDA3RjAyOUExODIxMjIKLToxMDY2QjAwMDAwNjI3ODIxQURFQTAwRDg4RTFGMDAxNEFGOEYwMEQwQTEKLToxMDY2QzAwMEFERkYwMERDOEUxOTAwMTAyNzM4RkZGRTBBMDAwNDBCMTYKLToxMDY2RDAwMEFERjgwMTA4NTQ4Q0ZFMjcyNDA1NDAwMDBBMDAwNDNENTMKLToxMDY2RTAwMDI0MDUxMDAwMEUwMDAzMkIwMDAwMDAwMDBBMDAwM0VFM0EKLToxMDY2RjAwMDhGOTAwMDFDOEM0NjQ0MkMzQzA1NkM2MjM0QjA3OTcwNDEKLToxMDY3MDAwMDNDMDEwODAwQUMyMDVBOTgxNEQwMDAwODI0MDQwMDAyNzAKLToxMDY3MTAwMDk3ODgwMDM0OTc4QTAwMkMwMjgwMjgyMTAxMEEzODJCQTAKLToxMDY3MjAwMDEwRTAwMDExMjQwNDAwOTIyNDA0MDAwMjBFMDAwQzg5RTEKLToxMDY3MzAwMDI0MDUwMTQwM0MwMTA4MDBBQzIyNUE5OEFGNDIwMDIwRDkKLToxMDY3NDAwMDNDMDMwODAwOEM2MzVBOTgxMDYwMDAwNTI0MDQwMDgzMDEKLToxMDY3NTAwMDBFMDAwODU0MDAwMDAwMDAxMDQwMDAwOTI0MDQwMDgzQ0IKLToxMDY3NjAwMDNDMDUwODAwMjRBNTVBOTgwRTAwMDI1NDAwMDAwMDAwQzEKLToxMDY3NzAwMDhGOTAwMDFDMDAxMTIwMkIwQTAwMDM2OUFGODQwMDI4QjEKLToxMDY3ODAwMDBFMDAwODU4MDAwMDAwMDAwQTAwMDUzMDhGOTAwMDFDMjEKLToxMDY3OTAwMDhFMDQwMDA4MEUwMDAyMzEwMDAwMDAwMDBBMDAwNTg2ODkKLToxMDY3QTAwMEFFODIwMDA4M0MwNTA4MDAyNEE1NUE5ODBFMDAwMjI2NzcKLToxMDY3QjAwMDI0MDQwMDg3OEY5MDAwMUMwQTAwMDVBMjAwMTExMDJCRjIKLToxMDY3QzAwMDBFMDAwODVDMDAwMDAwMDAzQzA1MDgwMDI0QTU1QTk4NTMKLToxMDY3RDAwMDBBMDAwNjNBMjQwNDAwOEIwRTAwMDI0NjAyODAyMDIxQTMKLToxMDY3RTAwMDkzNzAwMDIzMDI4MDIwMjEzNjBEMDAxMDBFMDAwMjRGMEUKLToxMDY3RjAwMEEzNkQwMDIzOEY5MDAwMUMwQTAwMDVBQjAwMDAxODIxMzgKLToxMDY4MDAwMDI0MDQwMDA0MEUwMDBDODkyNDA1MDAzMDE0NDAwMDJBRTIKLToxMDY4MTAwMDAwNDA0ODIxOEY5MDAwMUMwQTAwMDUxNzI0MDUwMDgzQzIKLToxMDY4MjAwMDkyMDUwMDBDMzBCRjAwMDExM0UwMDAwMzAwMDAwMDAwREYKLToxMDY4MzAwMDk2MDIwMDBFQTQ4MjAwMkM5MjBBMDAwQzMxNDgwMDAyM0QKLToxMDY4NDAwMDExMDBGRjUxMDAwMDI4MjE5NjBCMDAxMjhFMDMwMDE0NDYKLToxMDY4NTAwMEE0OEIwMDFBMEEwMDA1QzJBQzgzMDAxQzhGODMwMDM4ODkKLToxMDY4NjAwMDhGODcwMDMwMTA2N0ZFODQwMDAwMjAyMTNDMDkwODAwNUIKLToxMDY4NzAwMDI1Mjk1QTFDMDAwMzIwQzAwMDg5MzAyMThDRDQwMDAwMzcKLToxMDY4ODAwMDEyODUwMDVFMjQ3ODAwMDEzMzAzMDAwRjU0NjdGRkZBN0QKLToxMDY4OTAwMDAwMDMyMEMwMEEwMDA0RkUwMDAwMjAyMTNDMDUwODAwN0YKLToxMDY4QTAwMDI0QTU1QTk4MEUwMDAyN0QyNDA0MDA4MjhGOTAwMDFDQkIKLToxMDY4QjAwMDBBMDAwNUEyMDAwMDEwMjEzQzBCMDAwODAzNEIyMDIxMTgKLToxMDY4QzAwMDI0MDMwMDUwMjQwQTAwMDFBRjQyMDAyMEEwODMwMDAwRUUKLToxMDY4RDAwMEEwOEEwMDAxOEY4ODAwMUM5MTA3MDAwNEEwODcwMDE4N0YKLToxMDY4RTAwMDhGODIwMDFDOTA0NTAwMDVBMDg1MDAxOThGODYwMDFDMzIKLToxMDY4RjAwMDkwREYwMDA2QTA5RjAwMUE4Rjk5MDAxQzkzMzgwMDA3QjQKLToxMDY5MDAwMEEwOTgwMDFCOEY5NDAwMUM5MjhGMDAwOEEwOEYwMDFDODEKLToxMDY5MTAwMDhGOTAwMDFDOTIwRTAwMDlBMDhFMDAxRDhGOEQwMDFDMTAKLToxMDY5MjAwMDkxQUMwMDBBQTA4QzAwMUU4RjhCMDAxQzNDMEMwODAwNTAKLToxMDY5MzAwMDI1OEM1QTFDOTE2MzAwMEIzQzBCMDgwMDI1NkI1QTE4RTAKLToxMDY5NDAwMEEwODMwMDFGOEY4QTAwMUM5MTQ4MDAwQ0EwODgwMDIwQTMKLToxMDY5NTAwMDhGODcwMDFDOTBFNTAwMERBMDg1MDAyMThGODIwMDFDMTAKLToxMDY5NjAwMDI0MDU0NjQ2OTA0NjAwMEVBMDg2MDAyMjhGOUYwMDFDRkMKLToxMDY5NzAwMDkzRjkwMDBGQTA5OTAwMjM4Rjk4MDAxQzkzMTQwMDEwMjYKLToxMDY5ODAwMEEwOTQwMDI0OEY4RjAwMUM5MUYwMDAxMUEwOTAwMDI1OEUKLToxMDY5OTAwMDhGOTAwMDFDOEY4RTAwMzA4Rjk5MDAzODk2MEQwMDE0NTgKLToxMDY5QTAwMDAwMEUxOEMwMjVDODAwMDFBNDhEMDAyODk2MEEwMDE2MDQKLToxMDY5QjAwMDAwNkMzMDIxMDA2QkY4MjFBNDhBMDAyQTk2MDcwMDE4ODkKLToxMDY5QzAwMDMxMDgwMDBGQTQ4NzAwMkNBNDg1MDAyRThFMDIwMDFDMjUKLToxMDY5RDAwMEFDQzkwMDAwQUY4ODAwMzAxMTE5MDAwM0FGRTIwMDAwMUQKLToxMDY5RTAwMDBBMDAwNTE3MDAwMDI4MjEyNTBDMDAwMTMxODQwMDBGNDIKLToxMDY5RjAwMDAwMDAyODIxMEEwMDA1MTdBRjg0MDAzODNDMDcwODAwNzIKLToxMDZBMDAwMDI0RTc1QTE4MDA4NzgwMjEwMDAwMjAyMUFDQzAwMDAwMzQKLToxMDZBMTAwMDBBMDAwNEZFQUUwMDAwMDAzQzA1MDgwMDI0QTU1QTk4QjgKLToxMDZBMjAwMDBBMDAwNjNBMjQwNDAwODc4RTA0MDAwNDBFMDAwMjMxOTYKLToxMDZBMzAwMDAwMDAwMDAwMEEwMDA1M0JBRTgyMDAwODMwODRGRkZGMjIKLToxMDZBNDAwMDMwQzYwMEZGOEY0MjAxQjgwNDQwRkZGRTAwMDY0NDAwM0MKLToxMDZBNTAwMDAxMDQzMDI1M0MwNzIwMDAwMEM3MjAyNTNDMDMxMDAwMUUKLToxMDZBNjAwMEFGNDAwMTgwQUY0NTAxODRBRjQ0MDE4ODAzRTAwMDA4RDYKLToxMDZBNzAwMEFGNDMwMUI4MjdCREZGRThBRkIwMDAxMEFGQkYwMDE0QUYKLToxMDZBODAwMDNDMDc2MDAwMjQwNjAwMDIxMDgwMDAwNjAwQTA4MDIxNjAKLToxMDZBOTAwMDAwMTAxMDJCOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4MEYKLToxMDZBQTAwMDI3QkQwMDE4M0MwOTYwMEVBRDIwMDAzNDhDRTUyMDFDODkKLToxMDZBQjAwMDhGODIwMDFDMjQwOEZGRkMwMEE4MTgyNEFDRTMyMDFDRDMKLToxMDZBQzAwMDBFMDAwNkVGOEM0NTAwMEMwMDEwMTAyQjhGQkYwMDE0MzkKLToxMDZBRDAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODNDMDI2MDBFRDQKLToxMDZBRTAwMDM0NDcwMTAwMjQwOTAwMTgyNzRBMDQwMDAwMDAwMDAwNzAKLToxMDZBRjAwMDAwMDAwMDAwMDAwMDAwMDAzQzA2MDA1MDM0QzMwMjAwMEIKLToxMDZCMDAwMEFGNDQwMDM4QUY0NTAwM0NBRjQzMDAzMDAxNDAxODIxOEUKLToxMDZCMTAwMDhGNEIwMDAwMzE2ODAwMjAxMTAwRkZGRDI0MDYwMDdGMkMKLToxMDZCMjAwMDI0MDhGRkZGOEM2QzAwMDAyNEM2RkZGRjI0NjMwMDA0RDAKLToxMDZCMzAwMEFDRUMwMDAwMTRDOEZGRkIyNEU3MDAwNDAwMDAwMDAwRDgKLToxMDZCNDAwMDAwMDAwMDAwMDAwMDAwMDAzQzBGMDAyMEFGNEYwMDMwQUMKLToxMDZCNTAwMDAwMDAwMDAwMjRBRDAyMDAwMUE1NzAyQjI1MjlGRkZGRDUKLToxMDZCNjAwMDAwOEUyMDIxMTUyMEZGRTEwMUEwMjgyMTAzRTAwMDA4NkMKLToxMDZCNzAwMDAwMDAwMDAwMjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4NTgKLToxMDZCODAwMEFGQjAwMDEwM0MwNTYwMEU4Q0EyMDAzNDAwODA4ODIxNUMKLToxMDZCOTAwMDE0NDAwMDA2M0MwNDYwMDA4Qzg3MjAxQzI0MDhGRkZDODUKLToxMDZCQTAwMDAwRTgzMDI0MzRDMzAwMDFBQzgzMjAxQzhGOEIwMDFDMTAKLToxMDZCQjAwMDI0MDkwMDAxQUNBOTAwMzQ5NTY5MDAwMjhENjUwMDE0MTgKLToxMDZCQzAwMDhENzAwMDBDMkQyNDAwODE4RDY3MDAwNDhENjYwMDA4RjcKLToxMDZCRDAwMDEwODAwMDA3OEQ2QTAwMTAyRDJDMDAwNDE1ODAwMDBFMTcKLToxMDZCRTAwMDMwQ0UwMDA3MzEyRDAwMDMxMUEwMDAwQjAwMDAwMDAwODMKLToxMDZCRjAwMDI0MDQwMDhCMDIwMDI4MjEwRTAwMDZFRjI0MDYwMDAzNjcKLToxMDZDMDAwMDAwMTExMDJCOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMkYKLToxMDZDMTAwMDAzRTAwMDA4MjdCRDAwMjAxNUMwRkZGNjI0MDQwMDhCMDgKLToxMDZDMjAwMDNDMDMwMDIwQUY0MzAwMzAwMDAwMDAwMDI0MDIwMDAxQkMKLToxMDZDMzAwMEFGODIwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMDZDNDAwMDNDMUYwMTUwMDEzRkM4MjUyNTM4MDAwMzNDMEY2MDBFNTIKLToxMDZDNTAwMEFGNDcwMDM4MDAxODE4ODJBRjQ2MDAzQzM1RTgwMDNDQ0EKLToxMDZDNjAwMEFGNTkwMDMwMjc0NzA0MDA4RjQ0MDAwMDMwODYwMDIwRDEKLToxMDZDNzAwMDEwQzBGRkZEMDAwMDAwMDAxMDYwMDAwODI0NjZGRkZGNDgKLToxMDZDODAwMDI0MDNGRkZGOENFQjAwMDAyNEM2RkZGRjI0RTcwMDA0NzEKLToxMDZDOTAwMEFEMEIwMDAwMTRDM0ZGRkIyNTA4MDAwNDNDMDg2MDBFODgKLToxMDZDQTAwMEFEMDkwMDM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMDZDQjAwMDNDMDcwMDIwQUY0NzAwMzAwMDAwMDAwMDBFMDAwNzE3MUYKLToxMDZDQzAwMDAxNDAyMDIxMDIwMDI4MjEwMDAwMjAyMTBFMDAwNkVGQjMKLToxMDZDRDAwMDI0MDYwMDAzMDAxMTEwMkI4RkJGMDAxODhGQjEwMDE0ODEKLToxMDZDRTAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkQ4QUIKLToxMDZDRjAwMEFGQjIwMDE4MzA5MkZGRkZBRkIxMDAxNEFGQkYwMDIwNTkKLToxMDZEMDAwMEFGQjMwMDFDQUZCMDAwMTAxMjQwMDAyQzAwMDA4ODIxNkYKLToxMDZEMTAwMDBBMDAwN0FGMjQxMzAwMDE1MEIzMDAzQzhDRTUwMDBDQkYKLToxMDZEMjAwMDAwMDAwMDBEMjYyRDAwMDEzMUIxRkZGRjI0RUMwMDIwRjIKLToxMDZEMzAwMDAyMzIzODJCMTBFMDAwMjFBRjhDMDAxQzhGODIwMDE0MkYKLToxMDZENDAwMDE0NDAwMDFFOEY4NzAwMUMzQzA2NzAwMDNDMDMyMDAwOEUKLToxMDZENTAwMDhDRTQwMDAwMDA4NjI4MjQxNEEzMDAxODhGODUwMDNDRDIKLToxMDZENjAwMDAwMDQ0NDAyM0MwOTgwMDAwMDg5ODAyNDE0QTBGRkVBNEEKLToxMDZENzAwMDMxMDYwMEZGMjQwNDAwMDIxMEM0MDAxRjI4Q0EwMDAzQ0IKLToxMDZEODAwMDExNDAwMDE2MjQwQjAwMDMxNEQzRkZFNzI2MkQwMDAxNDkKLToxMDZEOTAwMDAyMDAyODIxMEUwMDA2RkQyNDA0MDAwMThGODcwMDFDM0MKLToxMDZEQTAwMEFGODIwMDNDMjYyRDAwMDEzMUIxRkZGRjI0RUMwMDIwMTIKLToxMDZEQjAwMDAyMzIzODJCMTRFMEZGRTFBRjhDMDAxQzAyMjAxMDIxQkUKLToxMDZEQzAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0NEEKLToxMDZERDAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODE0Q0JGRkQyQkQKLToxMDZERTAwMDI2MkQwMDAxMEUwMDA3M0QwMjAwMjAyMThGODcwMDFDODgKLToxMDZERjAwMDBBMDAwN0M5QUY4MjAwM0MwMjAwMjgyMTBFMDAwNkZERjAKLToxMDZFMDAwMDAwMDAyMDIxMEEwMDA3Qzg4Rjg3MDAxQzBFMDAwNkVGMzMKLToxMDZFMTAwMDI0MDQwMDg0MTYwMEZGQzM4Rjg3MDAxQzBBMDAwN0E5MDIKLToxMDZFMjAwMEFGODAwMDNDMzA4MkZGRkYxNDQwMDAwMzAwMDAxODIxQjcKLToxMDZFMzAwMDAwMDQyNDAyMjQwMzAwMTAzMDg1MDBGRjE0QTAwMDA1ODQKLToxMDZFNDAwMDMwODcwMDBGMjQ2NjAwMDgwMDA0MjIwMjMwQzMwMEZGRDAKLToxMDZFNTAwMDMwODcwMDBGMTRFMDAwMDUzMDg5MDAwMzI0NjgwMDA0MjcKLToxMDZFNjAwMDAwMDQyMTAyMzEwMzAwRkYzMDg5MDAwMzE1MjAwMDA1RDIKLToxMDZFNzAwMDM4OEIwMDAxMjQ2QTAwMDIwMDA0MjA4MjMxNDMwMEZGQTUKLToxMDZFODAwMDM4OEIwMDAxMzE2NDAwMDExMDgwMDAwMjI0NkMwMDAxODUKLToxMDZFOTAwMDMxODMwMEZGMDNFMDAwMDgwMDYwMTAyMTMwOEJGRkZGMEEKLToxMDZFQTAwMDAwMEIzOTQyMzBFNjAwRkYzQzA5MDgwMDI1Mjk1OTk4QkIKLToxMDZFQjAwMDAwMDY0MDgwMDEwOTYwMjE4RDg3MDAwMDMxNjQwMDFGQjkKLToxMDZFQzAwMDI0MEEwMDAxMDA4QTE4MDQzMEE1MDBGRjAwRTMyMDI1RjEKLToxMDZFRDAwMDE0QTAwMDAyMDAwMzEwMjcwMEUyMjAyNDI0MEYwMDAxNjgKLToxMDZFRTAwMDAwQ0Y3MDA0MDEwOTY4MjEwMDBFMjgyNzE0ODAwMDA1RDYKLToxMDZFRjAwMEFEQTQwMDAwOEY4NjAwMEMwMEE2MTAyNDAzRTAwMDA4NUIKLToxMDZGMDAwMEFGODIwMDBDOEY4ODAwMEMwMUM4MTAyNTAzRTAwMDA4MzgKLToxMDZGMTAwMEFGODIwMDBDM0MwNjAwMUYzQzAzNjAwMDMwODRGRkZGODIKLToxMDZGMjAwMDM0QzVGRjgwMjQwMjAwMjBBQzYwMjAwOEFDNjAyMDBDMzcKLToxMDZGMzAwMEFDNjAyMDEwQUM2NTIwMTRBQzY0MjAxOEFDNjIyMDAwNUEKLToxMDZGNDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwNTYKLToxMDZGNTAwMDI3QkRGRkU4MjQwMkZGRkZBRkJGMDAxMEFGODIwMDBDODcKLToxMDZGNjAwMDAwMDAyMDIxM0MwNjA4MDAyNEM2NTk5ODI0MDVGRkZGOTQKLToxMDZGNzAwMDI0ODkwMDAxMDAwNDQwODAzMTI0RkZGRjAxMDYxODIxMEMKLToxMDZGODAwMDJDODcwMDIwMTRFMEZGRkFBQzY1MDAwMDBFMDAwODI1RjUKLToxMDZGOTAwMDAwMDAyMDIxMjQwMjAwMDEzQzA0NjAwMDI0MDUwMDIwQTAKLToxMDZGQTAwMEFDODIyMDE4QUM4NTIwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMDZGQjAwMDAwMDAwMDAwMjQ0QTAwMDEzMTQyRkZGRjJDNDYwNDAwN0IKLToxMDZGQzAwMDE0QzBGRkY3OEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4QjIKLToxMDZGRDAwMDhGODMwMDA4MkM2MjA0MDAwM0UwMDAwODM4NDIwMDAxOUYKLToxMDZGRTAwMDhGODMwMDA4MjQ2MjAwMDEwM0UwMDAwOEFGODIwMDA4REMKLToxMDZGRjAwMDhGODMwMDA4MjQ2MkZGRkYwM0UwMDAwOEFGODIwMDA4Q0YKLToxMDcwMDAwMDI3QkRGRkUwQUZCMTAwMTRBRkJGMDAxOEFGQjAwMDEwNTQKLToxMDcwMTAwMDhGNkIwMDMwM0MwNjYwMDAwMDgwODgyMUFDQ0IyMDA4REMKLToxMDcwMjAwMDhGNkEwMDJDM0MwMjgwMDAyNDAzMDAwOEFDQ0EyMDBDQUMKLToxMDcwMzAwMDk3NjkwMDNBOTc2ODAwMzgwMDA5MkMwMDMxMDdGRkZGNzQKLToxMDcwNDAwMDAwQTcyMDI1QUNDNDIwMTBBQ0MyMjAxNEFDQzMyMDAwODMKLToxMDcwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDM2MDAwOTEKLToxMDcwNjAwMDhDNkQyMDAwMzFBQzAwMDgxNTgwRkZGOTAwMDAwMDAwOTUKLToxMDcwNzAwMDhDNkUyMDE0MDVDMDAwMjAwMDAwMDAwMDBFMDAwN0U5RkYKLToxMDcwODAwMDhGODQwMDBDMDAwMjQwODAzQzA5MDgwMDI1Mjk1OTk4OTMKLToxMDcwOTAwMDAxMDkzODIxOENFNDAwMDAwRTAwMDdFOTAwMDI4MTQwNUMKLToxMDcwQTAwMDAyMDIyMDIxMzA5MEZGRkYwMjAwMjAyMTBFMDAwODA3N0QKLToxMDcwQjAwMDAwMDAyODIxM0MwQzgwMDAwMjJDNTgyNTMyMTBGRkZGRDQKLToxMDcwQzAwMDNDMTE2MDAwMjQwQTAwMjBBRTJCMjAxNEFFMzAyMDE4QTIKLToxMDcwRDAwMEFFMkEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMDcwRTAwMDAyMDAxMDIxOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwNjQKLToxMDcwRjAwMDAzRTAwMDA4MjdCRDAwMjA4QzY2MjAxNDNDMDIwMDFGMUUKLToxMDcxMDAwMDM0NDNGRjgwM0MxRkZGRTgwMEMzQzAyNDM3RjkwODAwNjgKLToxMDcxMTAwMDAzMTk4MDIxMDAxMDc5QzIzQzBDODAwMDAyMkM1ODI1RjQKLToxMDcxMjAwMDMxRjBGRkZGM0MxMTYwMDAyNDBBMDAyMEFFMkIyMDE0MzgKLToxMDcxMzAwMEFFMzAyMDE4QUUyQTIwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMDcxNDAwMDAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxODhGQjEwMDE0NTIKLToxMDcxNTAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkU4MjYKLToxMDcxNjAwMEFGQjAwMDEwMzQwMkZGRkYzMDkwRkZGRkFGQkYwMDE0M0MKLToxMDcxNzAwMDEyMDIwMDA2MDIwMDIwMjEwRTAwMDgyNTAwMDAwMDAwNzcKLToxMDcxODAwMDAyMDAyMDIxMEUwMDA4MDcyNDA1MDAwMThGODQwMDA4NUEKLToxMDcxOTAwMDhGQkYwMDE0OEZCMDAwMTAyNDgzRkZGRjI3QkQwMDE4OUQKLToxMDcxQTAwMDAzRTAwMDA4QUY4MzAwMDgwMDA0MzlDMjMwRTYwMDNGNjYKLToxMDcxQjAwMDAwMDQzQjQyMDAwNzE4NDAyNDAyMTAwMDJDQzQwMDIwQTkKLToxMDcxQzAwMDI0QzhGRkUwQUY0MjAwMkMyNDYzMDAwMTE0ODAwMDAzQjgKLToxMDcxRDAwMDMwQTkwMEZGMDAwNzE4NDAzMTA2MDBGRjAwMDM2MDgwNUYKLToxMDcxRTAwMDI0MDgwMDAxMDE5QTU4MjEzQzBBMDAwRTAwQzgyODA0MTYKLToxMDcxRjAwMDAxNkEzODIxMTEyMDAwMDUwMDA1MzAyNzhDRTkwMDAwQzQKLToxMDcyMDAwMDAxMjUzMDI1MDNFMDAwMDhBQ0U2MDAwMDhDRUUwMDAwMEMKLToxMDcyMTAwMDAxQzY2ODI0MDNFMDAwMDhBQ0VEMDAwMDI3QkRGRkU4Q0MKLToxMDcyMjAwMEFGQkYwMDE0QUZCMDAwMTAzQzA0NjAwMDhDODUwODA4QUMKLToxMDcyMzAwMDM0MDNGMDAwMzBBMkYwMDA1MDQzMDAwNjI0MDIwMDAxQTUKLToxMDcyNDAwMDhDODcwODA4MzQwNEUwMDAzMEU2RjAwMDEwQzQwMDFFMEIKLToxMDcyNTAwMDI0MDIwMDAyQUY4MjAwNDAzQzEwNjAwMDNDMEEwMjAwQTEKLToxMDcyNjAwMEFFMEEwODE0MjQwOTEwMDAzQzA4MDAwRThFMDM0NDAwRTYKLToxMDcyNzAwMDAzNDgyMDIxQUY0OTAwMkMyNDA1MDEyMDBFMDAwQ0NGMkIKLToxMDcyODAwMDAwMDAzMDIxOEY4MzAwNDAxMDYwMDAwNDNDMDIxNjkxMDIKLToxMDcyOTAwMDI0MEIwMDAxMTA2QjAwMEUzQzAyM0Q2QzM0NEYwMDkwM0IKLToxMDcyQTAwMEFFMEY0NDA4OEZCRjAwMTQ4RkIwMDAxMDNDMEM2MDAwN0MKLToxMDcyQjAwMDI0MEUxMDAwM0MwRDAyMDAyN0JEMDAxOEFEOEU0NDIwQTYKLToxMDcyQzAwMDAzRTAwMDA4QUQ4RDA4MTAwQTAwMDhGNkFGODAwMDQwMEEKLToxMDcyRDAwMDNDMDIxOERBMzQ0RjAwOTBBRTBGNDQwODhGQkYwMDE0MDAKLToxMDcyRTAwMDhGQjAwMDEwM0MwQzYwMDAyNDBFMTAwMDNDMEQwMjAwMUEKLToxMDcyRjAwMDI3QkQwMDE4QUQ4RTQ0MjAwM0UwMDAwOEFEOEQwODEwQjYKLToxMDczMDAwMDBBMDAwOENBMjQwNTAwMDEwQTAwMDhDQTAwMDAyODIxNTIKLToxMDczMTAwMDNDMDgwODAwMjUwODVEQTQyNDA0RkZGRjAxMDAxODIxOTMKLToxMDczMjAwMDI0MDIwMDFFMjQ0MkZGRkZBQzY0MDAwMDA0NDFGRkZENjQKLToxMDczMzAwMDI0NjMwMDA0M0MwNzA4MDAyNEU3NUUyMDhDRTVGRkZDODIKLToxMDczNDAwMDI0MDQwMDFDMjQwNjAwMDEzMDhBMDAxRjAxNDY0ODA0NjIKLToxMDczNTAwMDI0ODQwMDAxMDAwOTEwMjcyQzgzMDAyMDE0NjBGRkZBMDgKLToxMDczNjAwMDAwQTIyODI0QUNFNUZGRkMzQzA1NjY2NjM0QTQ2MTZFRUYKLToxMDczNzAwMDNDMDYwODAwMjRDNjVFRTBBRjg0MDA1OEFGODgwMDlDM0QKLToxMDczODAwMDI0MDRGRkZGMDBDMDE4MjEyNDAyMDAxRjI0NDJGRkZGMzUKLToxMDczOTAwMEFDNjQwMDAwMDQ0MUZGRkQyNDYzMDAwNDNDMDc2NjY2MDIKLToxMDczQTAwMDNDMDUwODAwMjRBNTVFQTBBRjg2MDA0ODM0RTY2MTZFNjcKLToxMDczQjAwMEFGODYwMDk4MjQwNEZGRkYwMEEwMTgyMTI0MDIwMDBGQ0MKLToxMDczQzAwMDI0NDJGRkZGQUM2NDAwMDAwNDQxRkZGRDI0NjMwMDA0N0QKLToxMDczRDAwMDNDMEI2NjY2M0MwNjA4MDAyNEM2NUUyMDM1Njg2MTZFN0MKLToxMDczRTAwMEFGODUwMEE0QUY4ODAwNzAyNDA0RkZGRjAwQzAxODIxRkYKLToxMDczRjAwMDI0MDIwMDFGMjQ0MkZGRkZBQzY0MDAwMDA0NDFGRkZEOTMKLToxMDc0MDAwMDI0NjMwMDA0M0MwRDY2NjYzQzBBMDgwMDI1NEE1RjYwNjAKLToxMDc0MTAwMDM1QUM2MTZFQUY4NjAwOTBBRjhDMDA1QzI0MDRGRkZGM0EKLToxMDc0MjAwMDAxNDAxODIxMjQwMjAwMDMyNDQyRkZGRkFDNjQwMDAwNDUKLToxMDc0MzAwMDA0NDFGRkZEMjQ2MzAwMDQzQzA5MDgwMDI1Mjk1RjcwMTYKLToxMDc0NDAwMDhEMjdGRkZDMjQwNDAwMDYyNDA1MDAwMTMwOTkwMDFGNEQKLToxMDc0NTAwMDAzMjVDMDA0MjQ4NDAwMDEwMDE4NzgyNzJDOEUwMDIwMDYKLToxMDc0NjAwMDE1QzBGRkZBMDBFRjM4MjRBRDI3RkZGQzNDMDk2NjY2MjMKLToxMDc0NzAwMDI0MDMwNDAwMjQwNDAzREMyNDA1MDIwMDI0MDYwMDY2MUYKLToxMDc0ODAwMDM1MjI2MTZFM0MwODA4MDAyNTA4NUFBNEFGODIwMDc0QkEKLToxMDc0OTAwMEFGODMwMDQ0QUY4MzAwNkNBRjgzMDA1MEFGODMwMDg0QTAKLToxMDc0QTAwMEFGOEEwMDhDQUY4NDAwNjRBRjg1MDA0Q0FGODYwMDU0NzcKLToxMDc0QjAwMEFGODQwMDc4QUY4NTAwNjBBRjg2MDA4MDAxMDAxODIxOUUKLToxMDc0QzAwMDI0MDIwMDAyMjQ0MkZGRkZBQzYwMDAwMDA0NDFGRkZERTMKLToxMDc0RDAwMDI0NjMwMDA0MjQwNDAwMDMyNDAzMDAwQzNDMEEwODAwNzUKLToxMDc0RTAwMDI1NEE1QUIwQUY4QTAwNjgwQTAwMDk5RDI0MDVGRkZGQUIKLToxMDc0RjAwMDAwMDQxODgwMjQ4NDAwMDEwMDY4NTgyMTJDODcwMEMwRjMKLToxMDc1MDAwMDE0RTBGRkZCQUQ2NTAwMDAzQzBFNjY2NjM1Q0Q2MTZFOTQKLToxMDc1MTAwMDI0MEMxN0EwMjQwODE4MDBBRjhEMDA4OEFGOEMwMDk0QUQKLToxMDc1MjAwMDAzRTAwMDA4QUY4ODAwN0MyNDg0MDA3RjAwMDQyMUMyQUYKLToxMDc1MzAwMDAwMDA0MDIxMDAwMDMwMjEwMDAwMzgyMTAwMDAyODIxRjcKLToxMDc1NDAwMDBBMDAwOUI0QUY4NDAwQTAxMDYwMDAwNjI0RTcwMDAxMUYKLToxMDc1NTAwMDAwQzQzMDIxMjRBNTAwMDEyQ0MyMEJGNTE0NDBGRkZBMTEKLToxMDc1NjAwMDJDQTMwMDY2M0MwOTA4MDAyNTI5NUY2MDAxMjAxODIxMzIKLToxMDc1NzAwMDI0MDIwMDAzMjQ0MkZGRkZBQzYwMDAwMDA0NDFGRkZEMzEKLToxMDc1ODAwMDI0NjMwMDA0MTBFMDAwMUEyNEUzRkZGRjAwMDMyOTQyRjMKLToxMDc1OTAwMDEwQTAwMDBBMDAwMDIwMjEyNDA2RkZGRjNDMDMwODAwODEKLToxMDc1QTAwMDI0NjM1RjYwMjQ4NDAwMDEwMDg1NTAyQkFDNjYwMDAwREEKLToxMDc1QjAwMDI1MDgwMDAxMTU0MEZGRkIyNDYzMDAwNDMwRTIwMDFGOTIKLToxMDc1QzAwMDEwNDAwMDA4MDAwODY4ODAyNDBDMDAwMTAwNEMzODA0QkEKLToxMDc1RDAwMDAwMDg1ODgwMDE2OTI4MjEyNEU2RkZGRjAzRTAwMDA4MjUKLToxMDc1RTAwMEFDQTYwMDAwMDFBOTQwMjEyNDA5RkZGRkFEMDkwMDAwNUQKLToxMDc1RjAwMDAzRTAwMDA4MDAwMDAwMDBBRjQ0MDAyODNDMDQwMDBDMzkKLToxMDc2MDAwMDAzNDQyMDIxMDAwNTI4ODIwQTAwMENDRjAwMDAzMDIxMEQKLToxMDc2MTAwMDAwMDQyMTgwM0MwMzYwMDBBQzY0MTAwODAwMDAwMDAwRkUKLToxMDc2MjAwMDAwMDUyOTgwQUM2NTEwMEMwMDAwMDAwMDAzRTAwMDA4OTQKLToxMDc2MzAwMDhDNjIxMDBDMjdCREZGRTgwMDgwMjgyMTI0MDQwMDM4NEMKLToxMDc2NDAwMEFGQkYwMDE0MEUwMDA5RTRBRkIwMDAxMDI0MDQwRTAwMTgKLToxMDc2NTAwMEFGNDQwMDI4M0MxMDAwMEMwMzUwMjAyMTI0MDUwMDEwRUEKLToxMDc2NjAwMDBFMDAwQ0NGMDAwMDMwMjEwMzUwMTAyMUFDNDAwMDAwNzAKLToxMDc2NzAwMEFDNDAwMDA0MjQwNDAwMzg4RkJGMDAxNDhGQjAwMDEwMDkKLToxMDc2ODAwMDI0MDUzRkZGMjdCRDAwMTgwQTAwMDlFNDhDNDMwMDAwRDEKLToxMDc2OTAwMDAwMDQyMTgwM0MwMzYwMDBBQzY0MTAwODAwMDAwMDAwN0UKLToxMDc2QTAwMDhDNjIxMDBDMDNFMDAwMDgwMDAyMTE4MjI3QkRGRkM4QTUKLToxMDc2QjAwMEFGQjQwMDIwOEY5NDAwNjhBRkJFMDAzMEFGQjcwMDJDOEQKLToxMDc2QzAwMEFGQjYwMDI4MDAwMEI4MjEwMDgwQjAyMTI0MUUwMEMwMDEKLToxMDc2RDAwMEFGQkYwMDM0QUZCNTAwMjRBRkIzMDAxQ0FGQjIwMDE4ODkKLToxMDc2RTAwMEFGQjEwMDE0QUZCMDAwMTAwQTAwMEEyMUFGQTUwMDNDRjIKLToxMDc2RjAwMDUwNDAwMDAxOEY5NDAwNjgyN0RFRkZGRjEzQzAwMDI4NzAKLToxMDc3MDAwMDI2OTQwMDA0OEU5MjAwMDAzQzAzMDgwMDI0NjM1REEwRDAKLToxMDc3MTAwMDEyNDBGRkY3MDI4MzEwMkIzQzA0MDgwMDI0ODQ1QUE0NzMKLToxMDc3MjAwMDAyODQxMDIzMDAwMkE4QzAwMDAwOTgyMTBBMDAwQTMwMzkKLToxMDc3MzAwMDI0MTEwMDAxMDAxMTg4NDAxMjIwMDAyNjAwMDAwMDAwRTIKLToxMDc3NDAwMDAyQjM4MDIxMDI1MTI4MjQwMjAwMjAyMTEwQTBGRkY5NTkKLToxMDc3NTAwMDI2NzMwMDAxMEUwMDA5RUQwMDAwMDAwMDAwMTY2ODQwQ0QKLToxMDc3NjAwMDMyRUMwMDAxMDFBQzIwMjEwRTAwMDlFNDAyMDAyODIxQzYKLToxMDc3NzAwMDhGODkwMDk0MjZGNzAwMDE4RkE2MDAzQzNBRUIwMDAxQTgKLToxMDc3ODAwMDMxNkEwMDAxMjUyOEZGRkYwMDExMzgyNzAyQ0FCMDIxMDUKLToxMDc3OTAwMEFGODgwMDk0MTZFNkZGRTcwMjQ3OTAyNEFFOTIwMDAwRkYKLToxMDc3QTAwMDAyRTAxMDIxOEZCRjAwMzQ4RkJFMDAzMDhGQjcwMDJDNTUKLToxMDc3QjAwMDhGQjYwMDI4OEZCNTAwMjQ4RkI0MDAyMDhGQjMwMDFDMzMKLToxMDc3QzAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4RDIKLToxMDc3RDAwMDI3QkQwMDM4M0MwRTA4MDAyNUNFNURBMDAyOEUxMDJCODAKLToxMDc3RTAwMDBBMDAwQTFDQUU5MjAwMDAyN0JERkZEOEFGQjEwMDE0RkEKLToxMDc3RjAwMEFGQjAwMDEwQUZCRjAwMjBBRkIzMDAxQ0FGQjIwMDE4OTUKLToxMDc4MDAwMDAwQTA4ODIxMTBBMDAwMUYwMDA0ODA0MDNDMTMwODAwNDUKLToxMDc4MTAwMDI2NzM1QUE0MEEwMDBBNjkyNDEyMDAwMTEyMjAwMDE5RDIKLToxMDc4MjAwMDI2MTAwMDAxMEUwMDBBMDQwMjAwMjAyMTAwMDIzMTQyNEQKLToxMDc4MzAwMDI0NDRGRkEwMDAwNjE4ODAzMDQ1MDAxRjJDODIxN0ExQTkKLToxMDc4NDAwMDAwNzMxODIxMjYzMUZGRkYxMDQwRkZGNDAwQjIzMDA0MEUKLToxMDc4NTAwMDhDNjkwMDAwMDIwMDIwMjEyNDA1M0ZGRjAxMjY0MDI0RkUKLToxMDc4NjAwMDE1MDBGRkVFMDEyNjM4MjUwRTAwMDlFNEFDNjcwMDAwODQKLToxMDc4NzAwMDhGOEEwMDk0MjYxMDAwMDEyNTQ3MDAwMTE2MjBGRkU5OTkKLToxMDc4ODAwMEFGODcwMDk0OEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4MDkKLToxMDc4OTAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4NEUKLToxMDc4QTAwMDhGODUwMDlDMDA4MDU4MjEwMDAwNDAyMTAwMDA0ODIxNjUKLToxMDc4QjAwMDI0MEEwMDFGM0MwQzA4MDAyNThDNUUxQzNDMEQwODAwQUYKLToxMDc4QzAwMDI1QUQ1REE0OENBNjAwMDA1MEMwMDAxNDAwMDA0MDIxMkUKLToxMDc4RDAwMDAwQUQxMDIzMDAwMjM4QzAyNDAzMDAwMTBBMDAwQUEyRjAKLToxMDc4RTAwMDAwMDAyMDIxMTUwMDAwMDMwMEU0MTAyMTI0NDgyMDI0N0EKLToxMDc4RjAwMDAwMDA0ODIxMjUyOTAwMDE1MTJCMDAxMzI1MDZERkRDNUIKLToxMDc5MDAwMDEwNjAwMDA2MjQ4NDAwMDEwMEMzNzAyNDE1QzBGRkY1MzgKLToxMDc5MTAwMDAwMDMxODQwMEEwMDBBQTAwMDAwNDAyMTEwQUMwMDI2MTUKLToxMDc5MjAwMDI0QTMwMDA0MDA2MDI4MjEyNTRBRkZGRjE1NDBGRkU1M0QKLToxMDc5MzAwMEFGODUwMDlDNTEyQjAwMDQyNTA2REZEQzAwMDA0MDIxQjAKLToxMDc5NDAwMDAzRTAwMDA4MDEwMDEwMjEwMDA2NjE0MjMwQzUwMDFGNUQKLToxMDc5NTAwMDAwMEM1MDgwM0MwNzA4MDAyNEU3NURBNDI0MDQwMDAxQ0IKLToxMDc5NjAwMDAxNDczMDIxMTEyMDAwMEYwMEE0MjAwNDNDMDUwODAwMkQKLToxMDc5NzAwMDI0QTU1RTIwMTQ4MDAwMDUyNTI5RkZGRjI0QzYwMDA0RUQKLToxMDc5ODAwMDEwQzUwMDExMDAwMDAwMDAyNDA0MDAwMThDQ0YwMDAwOEQKLToxMDc5OTAwMDAwMDRDMDI3MDAwNDIwNDAwMUY4NjgyNDE1MjBGRkY1RUEKLToxMDc5QTAwMEFDQ0QwMDAwOEY5OTAwNzgwMTAwMTAyMTAzMkI0ODIzRjMKLToxMDc5QjAwMDAzRTAwMDA4QUY4OTAwNzgzQzA1MDgwMDI0QTU1REE0MTkKLToxMDc5QzAwMDBBMDAwQUFBMDAwMDQwMjEzQzA2MDgwMDI0QzY1REE0NjMKLToxMDc5RDAwMDBBMDAwQUMzMjQwNDAwMDEzMDg4MDBGRjI0MDIwMDAyQzgKLToxMDc5RTAwMDExMDIwMDBBMjQwMzAwMDMxMTAzMDA1QzhGODkwMEE0MjQKLToxMDc5RjAwMDI0MDQwMDA0MTEwNDAwNUYyNDA1MDAwNTExMDUwMDY3M0MKLToxMDdBMDAwMDAwMDAxODIxMDNFMDAwMDgwMDYwMTAyMThGODkwMDQ4NjEKLToxMDdBMTAwMDNDMEMwODAwMjU4QzVFRTAzQzA0MDgwMDI0ODQ1RjYwNzgKLToxMDdBMjAwMDI0MDMwMDIwMTA2MDAwMEYwMDAwNTgyMTI0MEQwMDAyRTQKLToxMDdBMzAwMDI0MEUwMDAzM0MwRjA4MDAyNUVGNUVFMDhEMjcwMDAwQjgKLToxMDdBNDAwMDE0RTAwMDBCMzBGOUZGRkYyNTI5MDAwNDAxMjRDMDJCQUUKLToxMDdBNTAwMDUzMDAwMDAxMDE4MDQ4MjEyNDYzRkZGRjU0NjBGRkY4QjgKLToxMDdBNjAwMDhEMjcwMDAwMDE2MDE4MjEwM0UwMDAwODAwNjAxMDIxNEMKLToxMDdBNzAwMDEzMjAwMDMyM0MwNTAwRkYzMEUyMDBGRjAwNDAzMDIxQkYKLToxMDdBODAwMDEwNDAwMDQyMDAwMDUwMjEyNDA1MDAwMTAwMDAyMDIxODgKLToxMDdBOTAwMDAwMDVDODQwMDBBNkMwMjQxNzAwMDAwMzMzMjUwMEZGREUKLToxMDdBQTAwMDE0QTBGRkZCMjQ4NDAwMDEwMTJDQzAyMzAwMTgyOEMwNkYKLToxMDdBQjAwMDAwQUE2MDIxMDA4QzUwMjEzMTQ0MDAxRjI0MEMwMDAxRDkKLToxMDdBQzAwMDAwOEMxODA0MDAwMzEwMjcwMEUyMzAyNDExMEQwMDQxM0YKLToxMDdBRDAwMEFEMjYwMDAwMTEwRTAwNEMwMDBBMTg0MDExMEQwMDM2QjIKLToxMDdBRTAwMDhGODcwMDZDNTEwRTAwNTY4RjhDMDA2MDI0MEQwMDA0QUYKLToxMDdBRjAwMDExMEQwMDVBOEY4RTAwODQyNDBFMDAwNTE1MEVGRkRBM0EKLToxMDdCMDAwMDAxNjAxODIxMjQwQjE0MzAxMTQwMDAwNjAwMDAxODIxRDgKLToxMDdCMTAwMDhGODQwMEEwMjQ2MzAwMDEwMDZBNDAyQjE1MDBGRkZENDQKLToxMDdCMjAwMDAxNjQ1ODIxOEY4QTAwODBBRjg5MDA4QzAxNjAxODIxODAKLToxMDdCMzAwMDI1NDlGRkZGMEEwMDBBRkFBRjg5MDA4MDAwRTUyMDI0RUEKLToxMDdCNDAwMDAwMDczNjAyMTA4MEZGRDAyNDBBMDAxODAwMDc1NDAyRjQKLToxMDdCNTAwMDMxNDYwMEZGMEEwMDBCMDIyNDBBMDAxMDNDMEMwODAwMEEKLToxMDdCNjAwMDI1OEM1RUEwM0MwNDA4MDAyNDg0NUVFMDBBMDAwQUU5M0IKLToxMDdCNzAwMDI0MDMwMDEwM0MwQzA4MDAyNThDNUUyMDNDMDQwODAwMDcKLToxMDdCODAwMDI0ODQ1RUEwMEEwMDBBRTg4Rjg5MDA5MDAwMDcxQTAyODgKLToxMDdCOTAwMDMwNjYwMEZGMEEwMDBCMDIyNDBBMDAwODhGODkwMDhDNUYKLToxMDdCQTAwMDNDMEMwODAwMjU4QzVGNjAzQzA0MDgwMDI0ODQ1RjcwNTYKLToxMDdCQjAwMDBBMDAwQUU5MjQwMzAwMDQwMDBBNDA4MDI1MEIwMDMwNzMKLToxMDdCQzAwMDI0RTZGRkZGMDE2MDE4MjFBRjg5MDA0ODBBMDAwQUZBODUKLToxMDdCRDAwMEFGODYwMDZDMDAwQUM5ODIwMDE5Nzg4MDNDMDcwODAwNTMKLToxMDdCRTAwMDI0RTc1RUEwMDFFNzIwMjEwMDBBMTg0MjhDOEYwMDAwRTQKLToxMDdCRjAwMDMwNzkwMDFGMDMyQzM4MDQwMDA3QzAyNzAxRjg2MDI0RTcKLToxMDdDMDAwMDBBMDAwQjE3QUM4QzAwMDAwMDAzMzE0MjAwMDYyODgwRUMKLToxMDdDMTAwMDAwQUYyODIxMzA2MjAwMUY4Q0I4MDAwMDI0NjMwMDAxRUYKLToxMDdDMjAwMDAwNENDODA0MDAwMzIxNDIwMDE5MzgyNzAwMDQxMDgwQ0EKLToxMDdDMzAwMDAzMDczMDI0MDA0RjIwMjEwQTAwMEI1QkFDQTYwMDAwOTQKLToxMDdDNDAwMDAwMEE2OEMwMjVBQjAwMzIyNThBRkZGRjAxNjAxODIxQjkKLToxMDdDNTAwMEFGODkwMEE0MEEwMDBBRkFBRjhBMDA2MDI1NEIxMDMwRjEKLToxMDdDNjAwMEFGODkwMDkwMDE2MDE4MjEyNUM5RkZGRjBBMDAwQUZBQjgKLToxMDdDNzAwMEFGODkwMDg0MzA4NjAwMDcyQ0MyMDAwNjEwNDAwMDE0MzMKLToxMDdDODAwMDAwMDAwMDAwMDAwNjQwODAzQzAzMDgwMDI0NjM1N0QwMzkKLToxMDdDOTAwMDAxMDMzODIxOENFNDAwMDAwMDgwMDAwODAwMDAwMDAwOEYKLToxMDdDQTAwMDI0MDkwMDAzMTBBOTAwMEUwMDAwMDAwMDI0MEEwMDA1QUEKLToxMDdDQjAwMDEwQUEwMDBCMDAwMDAwMDAyNDBCMDAwMTEwQUIwMDA4MEMKLToxMDdDQzAwMDAwMDAwMDAwOEY4QzAwQTAxMEFDMDAwNTAwMDAwMDAwMzgKLToxMDdDRDAwMDAzRTAwMDA4MDAwMDEwMjEwQTAwMEE4ODAwQTAyMDIxMEIKLToxMDdDRTAwMDBBMDAwQUQ2MDBDMDIwMjEyN0JERkZFODMwODQwMEZGMkIKLToxMDdDRjAwMDI0MDMwMDAyMTA4MzAwMEJBRkJGMDAxMDI0MDYwMDAzMTIKLToxMDdEMDAwMDEwODYwMDNBMjQwODAwMDQxMDg4MDA2ODI0MEUwMDA1M0MKLToxMDdEMTAwMDEwOEUwMDdGMkNBRjE0MzA4RkJGMDAxMDAzRTAwMDA4REUKLToxMDdEMjAwMDI3QkQwMDE4MkNBMjAwMzAxNDQwRkZGQzhGQkYwMDEwQUMKLToxMDdEMzAwMDI0QTVGRkQwMDAwNTMxQzIwMDA2Njg4MDNDMDcwODAwN0EKLToxMDdENDAwMDI0RTc1RUUwMDFBNzMwMjE4Q0M5MDAwMDAwMDUyODgyRUQKLToxMDdENTAwMDMwQUMwMDFGMjQwQjAwMDEwMThCNTAwNDhGODQwMDQ4QkQKLToxMDdENjAwMDAxMkE0MDI1QUNDODAwMDA4QzgzMDAwMDUwNjAwMDAxNEYKLToxMDdENzAwMEFGODYwMDQ4OEY5ODAwNkMzMEFFMDAwMTI0QTZGRkZGNEMKLToxMDdEODAwMDI3MEYwMDAxMTVDMDAwMDJBRjhGMDA2QzI0QTYwMDAxNzAKLToxMDdEOTAwMDAwMDY0MTQyMDAwODIwODAwMDg3MTgyMThDNzkwMDAwRUQKLToxMDdEQTAwMDMwQzIwMDFGMjQwNjAwMDEwMDQ2RjgwNDAzM0YzODI0QjcKLToxMDdEQjAwMDEwRTBGRkRBOEZCRjAwMTAwMDA1QzE4MjAwMTg3MDgwNEMKLToxMDdEQzAwMDNDMEYwODAwMjVFRjVFQTAwMUNGNDgyMThEMkIwMDAwNUQKLToxMDdERDAwMDAwMDU2ODQyMzFBNTAwMUYwMEE2NjAwNDAxNkM1MDI1MTMKLToxMDdERTAwMDI3QkQwMDE4MDNFMDAwMDhBRDJBMDAwMDJDQTcwMDMwRDIKLToxMDdERjAwMDE0RTBGRkNBOEZCRjAwMTAzMEI5MDAwNzE3MjNGRkM3NzgKLToxMDdFMDAwMDI0QThGRkNFMDAwODZBMDIwMDBENjA4MDNDMEIwODAwMjkKLToxMDdFMTAwMDI1NkI1RUEwMDE4QjMwMjE4Q0M0MDAwMDAwMDgyOEMyQjUKLToxMDdFMjAwMDMwQUEwMDFGMjQwODAwMDEwMTQ4NDgwNDhGODIwMEE0RTIKLToxMDdFMzAwMDAwODkxODI1QUNDMzAwMDA4QzVGMDAwMDUzRTAwMDAxRUUKLToxMDdFNDAwMEFGODYwMEE0MDAwNTcwNDAwMDBFNzk0MjAwMEYyODgwMjQKLToxMDdFNTAwMDNDMDQwODAwMjQ4NDVFRTAwMEE0MTgyMThDNkIwMDAwMjAKLToxMDdFNjAwMDI1REYwMDAxMzFDRDAwMUYwMDFGNTE0MjAxQTg2MDA0MzEKLToxMDdFNzAwMDAxNkM0ODI1MDAwQTEwODBBQzY5MDAwMDAwNDQyODIxRUMKLToxMDdFODAwMDhDQTYwMDAwOEY5ODAwNjAzM0Y5MDAxRjhGQkYwMDEwOTAKLToxMDdFOTAwMDAzMjgzODA0MDBDNzc4MjUyNzBFMDAwMTI3QkQwMDE4RTUKLToxMDdFQTAwMEFDQUYwMDAwMDNFMDAwMDhBRjhFMDA2MDI0QTVFRkQwNjcKLToxMDdFQjAwMDJDQjgwNDAwMTMwMEZGOTk4RkJGMDAxMDAwMDUzMTQyNTkKLToxMDdFQzAwMDAwMDY1ODgwM0MwQTA4MDAyNTRBNUUyMDAxNkEzMDIxREQKLToxMDdFRDAwMDhDQzQwMDAwMzBBMzAwMUYyNDA5MDAwMTAwNjkxMDA0QjUKLToxMDdFRTAwMDhGOTkwMDkwMDA4MkY4MjVBQ0RGMDAwMDhGMjcwMDAwRkEKLToxMDdFRjAwMDUwRTAwMDAxQUY4NjAwOTA4RjhEMDA4NDhGQkYwMDEwOEUKLToxMDdGMDAwMDI3QkQwMDE4MjVBQzAwMDEwM0UwMDAwOEFGOEMwMDg0RjkKLToxMDdGMTAwMDE1RTBGRjgyOEZCRjAwMTA4Rjg2MDBBMDAwMDYxMDQwODIKLToxMDdGMjAwMDAwNDZGODIxMDAxRjIxMDAwM0U0QzgyMTAwMTkzODQwNTEKLToxMDdGMzAwMDI0RjgxNDMwMDBCODQwMkIxMTAwRkY3ODhGQkYwMDEwRDgKLToxMDdGNDAwMDI0QTRFQkQwMEUwMDAyMDMwMEMwMjgyMTAwMDI3OTQyRDUKLToxMDdGNTAwMDAwMEY3MDgwM0MwRDA4MDAyNUFENUY2MDAxQ0QyMDIxMzEKLToxMDdGNjAwMDhDOEIwMDAwMzA0QzAwMUYyNDA2MDAwMTAxODYxODA0OTEKLToxMDdGNzAwMDhGODkwMDhDMDE2MzUwMjVBQzhBMDAwMDhEMjUwMDAwOUMKLToxMDdGODAwMDUwQTAwMDAxQUY4NDAwOEM4Rjk4MDA4MDhGQkYwMDEwM0MKLToxMDdGOTAwMDI3QkQwMDE4MjcwODAwMDEwM0UwMDAwOEFGODgwMDgwMTMKLToxMDdGQTAwMDMwQTUwMDA3MjQwMzAwMDMxMEEzMDAxMDI4QTIwMDA0M0EKLToxMDdGQjAwMDE0NDAwMDA4MjQwNzAwMDIyNDAzMDAwNDEwQTMwMDE1NDUKLToxMDdGQzAwMDI0MDgwMDA1MTBBODAwMEY4Rjg1MDBBMDAzRTAwMDA4MUEKLToxMDdGRDAwMDAwMDAwMDAwMTRBN0ZGRkQwMDgwMjgyMTE0QzNGRkZCNTAKLToxMDdGRTAwMDI0MDQwMDAyMEEwMDBCOUEwMDAwMDAwMDI0MDkwMDA1ODYKLToxMDdGRjAwMDAwODAyODIxMTBDOUZGRkIyNDA0MDAwMzAzRTAwMDA4Q0YKLToxMDgwMDAwMDAwMDAwMDAwMTRDNUZGRjEwMDgwMjgyMTBBMDAwQjlBMkYKLToxMDgwMTAwMDI0MDQwMDA1MjQwQTAwMDEwMDgwMjgyMTEwQ0FGRkYxNzEKLToxMDgwMjAwMDI0MDQwMDA0MDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwNzYKLToxMDgwMzAwMEFGQjAwMDEwMDAwNTgxQzIyNjAzRkZEMDI0QzUwMDNGNjkKLToxMDgwNDAwMDJDNjIyM0QwMjRDNjAwN0ZBRkIyMDAxOEFGQjEwMDE0NTkKLToxMDgwNTAwMEFGQkYwMDFDMzA5MTAwRkYwMDA2OTFDMjAwMDUyOTgyQ0QKLToxMDgwNjAwMDAyMDAyMDIxMTA0MDAwMDgyNDAzRkZGRjBFMDAwQTVBREUKLToxMDgwNzAwMDAwMDAwMDAwMDIwMDIwMjEwMjIwMjgyMTBFMDAwQzQ4RjAKLToxMDgwODAwMDAyNDAzMDIxMDAwMDE4MjE4RkJGMDAxQzhGQjIwMDE4NjEKLToxMDgwOTAwMDhGQjEwMDE0OEZCMDAwMTAwMDYwMTAyMTAzRTAwMDA4QzEKLToxMDgwQTAwMDI3QkQwMDIwMjdCREZGRDgyNEEyMDA3RkFGQjMwMDFDNEUKLToxMDgwQjAwMEFGQjIwMDE4MDAwMjk5QzIzMDkyMDBGRjI0QTMwMDNGMjMKLToxMDgwQzAwMDAyNDAyMDIxMDI2MDI4MjFBRkIxMDAxNEFGQjAwMDEwOUYKLToxMDgwRDAwMEFGQkYwMDIwMEUwMDBCN0QwMDAzODk4MjAwNDA4MDIxOEQKLToxMDgwRTAwMDAwNDAyMDIxMDIyMDI4MjExNDQwMDAwOTAwMDAxODIxMEUKLToxMDgwRjAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MDcKLToxMDgxMDAwMDhGQjAwMDEwMDA2MDEwMjEwM0UwMDAwODI3QkQwMDI4OTgKLToxMDgxMTAwMDBFMDAwQTBCMDAwMDAwMDAwMDQwMjgyMTAyMDAyMDIxNzAKLToxMDgxMjAwMDEwNTFGRkYzMDAxMDE5QzAwRTAwMEE1QTAwMDAwMDAwQTEKLToxMDgxMzAwMDAyMDAyMDIxMDI0MDI4MjEwRTAwMEM0ODAyNjAzMDIxNUMKLToxMDgxNDAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0QjYKLToxMDgxNTAwMDhGQjAwMDEwMDAwMDE4MjEwMDYwMTAyMTAzRTAwMDA4MUIKLToxMDgxNjAwMDI3QkQwMDI4MzA4NEZGRkYzMEE1RkZGRjEwODAwMDA3RTcKLToxMDgxNzAwMDAwMDAxODIxMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyNUIKLToxMDgxODAwMDAwNjUxODIxMTQ4MEZGRkIwMDA1Mjg0MDAzRTAwMDA4NkIKLToxMDgxOTAwMDAwNjAxMDIxMTBDMDAwMDcwMDAwMDAwMDhDQTIwMDAwNDkKLToxMDgxQTAwMDI0QzZGRkZGMjRBNTAwMDRBQzgyMDAwMDE0QzBGRkZCMUUKLToxMDgxQjAwMDI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4NzAKLToxMDgxQzAwMDI0QTNGRkZGQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMDgxRDAwMDI0MDJGRkZGMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0REIKLToxMDgxRTAwMDAzRTAwMDA4MDAwMDAwMDAzMEE1RkZGRjhGNDIwMUI4NDcKLToxMDgxRjAwMDA0NDBGRkZFM0MwNzYwMTUwMEE3MzAyNTNDMDMxMDAwM0IKLToxMDgyMDAwMEFGNDQwMTgwQUY0MDAxODRBRjQ2MDE4ODAzRTAwMDA4MUQKLToxMDgyMTAwMEFGNDMwMUI4OEY4NTAwRDAyQzg2NDAwMDAwODAxODIxMjQKLToxMDgyMjAwMDhDQTcwMDg0MDA4NzEwMkIxNDQwMDAxMDAwMDAwMDAwNzEKLToxMDgyMzAwMDhDQTgwMDg0MkQwNjQwMDA1MEMwMDAwRjI0MDM0MDAwOEQKLToxMDgyNDAwMDhDQUEwMDg0MDA4QTQ4MkI1MTIwMDAwMThDQTMwMDg0NTIKLToxMDgyNTAwMDAwMDM1QTQyMDAwQjIwODAzQzA1MDgwMDI0QTU1ODIwNEEKLToxMDgyNjAwMDAwODUxODIxMDNFMDAwMDg4QzYyMDAwMDE0QzBGRkY0QjAKLToxMDgyNzAwMDAwMDAwMDAwMjQwMzQwMDAwMDAzNUE0MjAwMEIyMDgwNEQKLToxMDgyODAwMDNDMDUwODAwMjRBNTU4MjAwMDg1MTgyMTAzRTAwMDA4QkIKLToxMDgyOTAwMDhDNjIwMDAwOEY4MzAwRDA5MDY2MDBEMDI0QzUwMDAxNUUKLToxMDgyQTAwMEEwNjUwMEQwOEY4NTAwRDA5MDY0MDBEMDkwQTIwMEQyNEQKLToxMDgyQjAwMDEwNDQwMDE3MDAwMDAwMDA5MzZDMDA3ODhGOEIwMEJDMDYKLToxMDgyQzAwMDMxOEEwMEZGQTE2QTAwMEMyNTQ5MDAwMTkzODcwMEM0OTAKLToxMDgyRDAwMDMxMjIwMEZGMzA0ODAwN0YxMTA3MDAwQjAwMDI2ODI3QTEKLToxMDgyRTAwMEEzNjIwMDc4OEY0RTAxNzgwNUMwRkZGRThGOTkwMEIwMjEKLToxMDgyRjAwMDI0MTgwMDAyM0MwRjEwMDBBRjU5MDE0MEEzNTgwMTQ0NUMKLToxMDgzMDAwMDAzRTAwMDA4QUY0RjAxNzgwQTAwMEQxODMxQTIwMDgwODkKLToxMDgzMTAwMEEwQTAwMEQwMEEwMDBEMEUwMDAwMDAwMDhGODcwMEQwNDIKLToxMDgzMjAwMDI3QkRGRkM4QUZCRjAwMzBBRkI3MDAyQ0FGQjYwMDI4RTUKLToxMDgzMzAwMEFGQjUwMDI0QUZCNDAwMjBBRkIzMDAxQ0FGQjIwMDE4M0IKLToxMDgzNDAwMEFGQjEwMDE0QUZCMDAwMTA5NEUzMDBFMDk0RTIwMEUyOUIKLToxMDgzNTAwMDEwNDMwMEQ3MjQwNUZGRkYzQzA0N0ZGRjM0OTdGRkZGNDUKLToxMDgzNjAwMDI0MTVGRjgwMEEwMDBERkYzQzE2MDAwRTEwOEEwMEQxNzQKLToxMDgzNzAwMDhGQkYwMDMwOEY5MTAwQjAzQzE4MDgwMDhGMTgwMDVDNTAKLToxMDgzODAwMDAwMTIzMEMwMDAxMjkxNDAwMzExNzAyMTAxRDU3ODI0RjEKLToxMDgzOTAwMEFGNEYwMDJDOTRFQzAwRTIzMUNEMDA3RjAxQkE1ODIxQTAKLToxMDgzQTAwMDMxOEE3RkZGMDE3NjQ4MjEwMDBBODA0MDAyMDkxMDIxQUUKLToxMDgzQjAwMDk0NTMwMDAwM0MwODA4MDA4RDA4MDA1ODAyNDZDMDIxNzQKLToxMDgzQzAwMDMyNzMzRkZGMDAxMzE5ODAwMTAzMjAyMTAyMjQyODIxNkEKLToxMDgzRDAwMDMwQkYwMDdGMDNGQUM4MjEwMEI1QTAyNEFGNTQwMDJDQTEKLToxMDgzRTAwMDAzMzZBMDIxOEU4NzAwMTA4RThGMDAzMDAzNzg1ODIxMkQKLToxMDgzRjAwMDI1NkQwMDg4MDBFRjcwMjMyNDBDMDAwMkFFOEUwMDEwNjMKLToxMDg0MDAwMEFGOEQwMEFDQTE2QzAwODg5NzZBMDAzQzhFODQwMDMwNzAKLToxMDg0MTAwMDhGOTEwMEFDMEUwMDBDRTUzMTUwRkZGRjAwMDI0QjgwNDUKLToxMDg0MjAwMDAyMDk0MDI1M0MwMjQyMDAwMTAyMjAyNUFFMjQwMDA0M0UKLToxMDg0MzAwMDhFODMwMDA0OEY4RDAwQUM4RTg2MDAwMDI0MEUwMDA4MTEKLToxMDg0NDAwMEFEQTMwMDFDQURBNjAwMThBREEwMDAwQ0FEQTAwMDEwOUYKLToxMDg0NTAwMDkyOUYwMDBBMzNGOTAwRkZBNUI5MDAxNDk2ODUwMDA4MjEKLToxMDg0NjAwMDNDMUYwMDBDQTVBNTAwMTY5Mjk4MDAwQTMzMTEwMEZGQ0UKLToxMDg0NzAwMEE1QjEwMDIwOTY5MDAwMDgyNDE4MDAwNUE1QjAwMDIyQTAKLToxMDg0ODAwMEFEQTAwMDI0OTI4RjAwMEIyNDEwQzAwMDMxRTcwMEZGNDQKLToxMDg0OTAwMEE1QTcwMDAyQTFBRTAwMDE4RThDMDAzMDhGOEIwMEFDMkUKLToxMDg0QTAwMDhGODQwMEIwQUQ2QzAwMDgzQzBBMDgwMDhENEEwMDU0NkYKLToxMDg0QjAwMDAxNDQ0ODIxMDEzNTQwMjRBRjQ4MDAyODNDMDIwODAwMEYKLToxMDg0QzAwMDhDNDIwMDU0MDA0NDMwMjEzMEMzMDA3RjAwN0FDODIxMjAKLToxMDg0RDAwMDAzM0YyODIxMDI0NTg4MjFBRjkxMDBCQ0FGODUwMEMwMzEKLToxMDg0RTAwMEEyMzgwMDAwOEY4QTAwQkMyNDAzRkZCRjI0MThGRkRGREUKLToxMDg0RjAwMDk1NEYwMDAyMDFGMDM4MjQwMEYzNzAyNUE1NEUwMDAyQ0MKLToxMDg1MDAwMDkxNEQwMDAyMzFBQzAwM0YzNThCMDA0MEExNEIwMDAyODEKLToxMDg1MTAwMDhGODYwMEJDOEY4OTAwRDBBQ0MwMDAwNDhEMjgwMDdDMDEKLToxMDg1MjAwMDNDMDk4MDAwQUNDODAwMDg5MEM0MDAwRDMwODIwMDdGNzgKLToxMDg1MzAwMEEwQzIwMDBEOEY4NTAwQkM5MEJGMDAwRDAzRTNDODI0Q0UKLToxMDg1NDAwMEEwQjkwMDBEOEY5MTAwQkM5MjMzMDAwRDAyNzg5MDI0RTkKLToxMDg1NTAwMEEyMzIwMDBEOEU5MDAwMzQ4RjhCMDBCQ0FENzAwMDEwRTUKLToxMDg1NjAwMDhFODcwMDJDOEU4RjAwMzAwMEVGNzAyM0FENkUwMDE0Q0MKLToxMDg1NzAwMDkxNkQwMDE4MzFBQzAwN0ZBMTZDMDAxODhGOUYwMEJDN0EKLToxMDg1ODAwMDhFOEEwMDMwOEZFODAwMTgwMTU3MjAyNDAxMDkzMDI0MUEKLToxMDg1OTAwMDAwQzQxMDI1QUZFMjAwMTg5MjgzMDAwQUEzRTMwMDFDNzgKLToxMDg1QTAwMDk2OTkwMDA4OEY4NTAwQkM4Rjk4MDBEMEE0QjkwMDFFNTIKLToxMDg1QjAwMDhFOTAwMDMwOEU4NDAwMzAwRTAwMDIwMzhGMDUwMDg0MDAKLToxMDg1QzAwMDhGODUwMEQwMDAwMjkxNDAwMDAyOTkwMDkwQUYwMEJDNUUKLToxMDg1RDAwMDAyNTM4ODIxMDA0MDMwMjEzMUU3MDAwMjEwRTAwMDAzRkYKLToxMDg1RTAwMDAyMTE4MDIxMDAwMjkwODAwMjEyODAyMTkwQjkwMEJDMEIKLToxMDg1RjAwMDMzMjcwMDA0MTBFMDAwMDIwMDA2Rjg4MDAyMUY4MDIxRUIKLToxMDg2MDAwMDhFOTgwMDMwOEY4QjAwQkMyNDA2ODAwMDMzMEYwMDAzNEYKLToxMDg2MTAwMDAwMEY3MDIzMzFDRDAwMDMwMjBENjAyMUFENkMwMDA0MEEKLToxMDg2MjAwMDk0QTQwMEUyOTRBQTAwRTI5NEIwMDBFMjMxNDk3RkZGRjIKLToxMDg2MzAwMDI1MjIwMDAxMzA1MzdGRkYwMjA2MTgyNDAwNzM0MDI1RDUKLToxMDg2NDAwMEE0QTgwMEUyOTRBNDAwRTIzQzE0MDgwMDhFOTQwMDYwMDgKLToxMDg2NTAwMDMwOTE3RkZGMTIzNDAwMjIwMDAwMDAwMDBFMDAwRDA1NTMKLToxMDg2NjAwMDAwMDAwMDAwOEY4NzAwRDAwMDAwMjgyMTk0RjMwMEUwNzQKLToxMDg2NzAwMDk0RjAwMEUyMTIxMzAwMEY4RkJGMDAzMDkwRTkwMEQwOTkKLToxMDg2ODAwMDkwRTgwMEQxMzEzMjAwRkYzMTA0MDBGRjAyNDQzMDJCNkEKLToxMDg2OTAwMDE0QzBGRjM2MjY0QTAwMDE5MEVFMDBEMjI2NEIwMDAxOUUKLToxMDg2QTAwMDMxQ0QwMEZGMDA4RDYwMjExNThCRkYzMzhGOTEwMEIwMUQKLToxMDg2QjAwMDhGQkYwMDMwOEZCNzAwMkM4RkI2MDAyODhGQjUwMDI0RjUKLToxMDg2QzAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0M0MKLToxMDg2RDAwMDhGQjAwMDEwMDBBMDEwMjEwM0UwMDAwODI3QkQwMDM4NzMKLToxMDg2RTAwMDk0QTMwMEUyMDA2NjQwMjRBNEE4MDBFMjkwQTQwMEUyNjMKLToxMDg2RjAwMDkwQjkwMEUyMzA5MTAwRkYwMDExQTFDMjAwMTRGODI3RTgKLToxMDg3MDAwMDAwMUYzOUMwMzMzMjAwN0YwMjQ3MzAyNTBBMDAwREY3QzEKLToxMDg3MTAwMEEwQTYwMEUyMzA4NEZGRkYzMEE1RkZGRkFGNDQwMDE4QTEKLToxMDg3MjAwMEFGNDUwMDFDMDNFMDAwMDg4RjQyMDAxNDI3QkRGRkI4Q0UKLToxMDg3MzAwMEFGQjAwMDIwOEY5MDAwRDAzMDg0RkZGRkFGQTQwMDEwQjYKLToxMDg3NDAwMEFGQkYwMDQ0QUZCRTAwNDBBRkI3MDAzQ0FGQjYwMDM4OEIKLToxMDg3NTAwMEFGQjUwMDM0QUZCNDAwMzBBRkIzMDAyQ0FGQjIwMDI4RDcKLToxMDg3NjAwMEFGQjEwMDI0QTdBMDAwMTg5MjA2MDBEMTkyMDUwMEQwNTYKLToxMDg3NzAwMDMwQzQwMEZGMzBBMzAwRkYwMDY0MTAyQjEwNDAwMTIyMjIKLToxMDg3ODAwMEFGQTAwMDE0OTIwOTAwRDA4RkI1MDAxMDMxMjgwMEZGNkYKLToxMDg3OTAwMDAwODgzODIzMjRGNEZGRkYwMDE0ODgyQjAwMTU5ODJCNDEKLToxMDg3QTAwMDAyMzM5MDI0NTI0MDAxMjY4RkI0MDAxNDk2MUUwMDEyMEEKLToxMDg3QjAwMDk2MUYwMDEwOEZCNzAwMTAwM0RGQzgyMzAwMTcxNDAwQTYKLToxMDg3QzAwMDAwMTlDNDAwMDAwMjI0MDMwMDE4MTQwMzAyRTJCMDJBQjYKLToxMDg3RDAwMDUyQzAwMDAxMDA0MDIwMjEwMjg0MjgyQjEwQTAwMDAyN0EKLToxMDg3RTAwMDAwODAxODIxMDI4MDE4MjEwMDAzM0MwMDAwMDcxQzAzQjAKLToxMDg3RjAwMDMwNjRGRkZGMkM4NjAwMDkxNEMwMDAwMjAwNjBCODIxMUQKLToxMDg4MDAwMDI0MTcwMDA4OEUwQTAwMDgwMDE3Njk4MDhFMDkwMDBDRTIKLToxMDg4MTAwMDMxQUJGRkZGM0MwQzAwMTAwMTZDNDAyNTI3NTIwNDAwRDcKLToxMDg4MjAwMEFGNEEwMDM4QUY5MjAwQjhBRjQ5MDAzQ0FGNDgwMDMwQzMKLToxMDg4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMDg4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMDg4NTAwMDhGNEYwMDAwMzFFRTAwMjAxMUMwRkZGRDAwMTc5ODJBNTUKLToxMDg4NjAwMDAyNzExMDI0MEEwMDBFOTIwMDAwQjAyMTU1RTAwMTAxQUYKLToxMDg4NzAwMDkyNTgwMDAxMzExMzAwODAxMjYwMDFDRjAxMjAyMDIxQTUKLToxMDg4ODAwMDk2NTUwMDEyMzJBNUZGRkYwRTAwMENEQUE3QjUwMDE4QUUKLToxMDg4OTAwMDhGOTAwMEQwMDI5MUEwMjMyNkM4MDAwMThGOTEwMEI4Q0MKLToxMDg4QTAwMDAwMDhCNDAwMDAxNkI0MDMyNjJDMDA0MDAyRDc3ODJBMzIKLToxMDg4QjAwMDAwMTQ4ODJCMjQwQjAwMDEwMTgwOTAyMTAxRjExMDI0NjkKLToxMDg4QzAwMEFGOEMwMEI4QUZBQjAwMTQxMDQwMDFCQzhGODkwMEIwNzIKLToxMDg4RDAwMDNDMEMwODAwOEQ4QzAwNTQyNDBCRkY4MDkyMUUwMEQwQUQKLToxMDg4RTAwMDAxODk1MDIxMDE0QjI4MjQ5MjE5MDBEMEFGNDUwMDI4NUUKLToxMDg4RjAwMDhFNDcwMDEwM0MwODA4MDA4RDA4MDA1ODNDMTgwODAwRkUKLToxMDg5MDAwMDhGMTgwMDU0MzBFMzNGRkYwMDAzMjE4MDAxMDQzMDIxMjEKLToxMDg5MTAwMDAxMjY1ODIxMjQwMkZGODAwMTYyRjgyNDkyMEMwMEQwMjUKLToxMDg5MjAwMEFGNUYwMDJDOTI0ODAwMDAzM0QxMDBGRjMzMzUwMEZGQzkKLToxMDg5MzAwMDAzMDk5ODIxMDAxMTcxNDAwMDE1NzhDMDMyNkQwMDdGNDUKLToxMDg5NDAwMDAxQ0YzODIxMDFCQTI4MjEzMTgzMDBGRjMxNjQwMDdGMzMKLToxMDg5NTAwMDNDMEEwMDBDMDBBQTg4MjEwMzY3RjAyMTAwMDMzMTQwODMKLToxMDg5NjAwMDAwOUExMDIxMzEwODAwM0YzQzFGMDAwRTAwRDFDMDIxQTkKLToxMDg5NzAwMDAwNUY5ODIxMjdEOTAwODgyRDE1MDAwOEFGOTEwMEMwMEQKLToxMDg5ODAwMEFGOTkwMEFDQUY5ODAwQkNBRjkzMDBCNDEyQTAwMThBQkQKLToxMDg5OTAwMDAwMDA4ODIxMjQwRTAwMDEwMTBFNDAwNDMxMEQwMDVEMEQKLToxMDg5QTAwMDExQTBGRkIyMzEwRjAwMDI4RTRBMDAyODNDMDMwMDgwNjQKLToxMDg5QjAwMDNDMDRGRkVGQUU2QTAwMDA4RTQ1MDAyNEEyNjAwMDBBNkUKLToxMDg5QzAwMDM0ODhGRkZGQUU2NTAwMDQ5MjQ3MDAyQzNDMUZGRjlGRDgKLToxMDg5RDAwMDM3RkVGRkZGQTI2NzAwMEM4RTYyMDAwQzNDMTgwMDQwQkYKLToxMDg5RTAwMEEyNjcwMDBCMDA0MzMwMjUwMEM4QzgyNDAzM0U4ODI0M0EKLToxMDg5RjAwMDAyMzhBODI1QUU3NTAwMEM4RTQ5MDAwNEFFNjAwMDE4NDAKLToxMDhBMDAwMDNDMEYwMEZGQUU2OTAwMTQ4RTREMDAyQzM1RUVGRkZGQzkKLToxMDhBMTAwMDhGOEIwMEIwMDFBRTYwMjRBRTZDMDAxMDhFNDcwMDA4NTIKLToxMDhBMjAwMEE2NjAwMDA4OTY0NTAwMTJBRTY3MDAyMDhFNDIwMDBDM0EKLToxMDhBMzAwMDMwQjAzRkZGMDAxMDUxODBBRTYyMDAyNDhFNUUwMDE0MDMKLToxMDhBNDAwMDAxNEIxODIxMzBBNDAwMDFBRTdFMDAyODhFNTkwMDE4NzkKLToxMDhBNTAwMDAwMDMzMUMyMDAwNDQzODBBRTc5MDAyQzhFNTEwMDFDMEIKLToxMDhBNjAwMDAwQzhGODIxQTY3RjAwMUNBRTcxMDAzMDk2NTgwMDAyQTUKLToxMDhBNzAwMDhFNTUwMDIwQTY3ODAwMUVBRTc1MDAzNDkyNDkwMDMzNTIKLToxMDhBODAwMDMxMzAwMDA0NTYwMDAwMDU5MjUwMDAwMDhGOEMwMEQwNTkKLToxMDhBOTAwMDhEOEIwMDdDQUU2QjAwMzA5MjUwMDAwMDhGOEYwMEJDM0QKLToxMDhBQTAwMEExRjAwMDAwOTI0RTAwMzMzMUNEMDAwMjUxQTAwMDA3MkEKLToxMDhBQjAwMDkyNUUwMDAxOEY4OTAwQkMyNDE4RkY4MDkxMzEwMDAwNzQKLToxMDhBQzAwMDAzMTFBODI1QTEzNTAwMDA5MjVFMDAwMThGOTkwMEJDMUEKLToxMDhBRDAwMDI0MDlGRkJGMjQwQkZGREZBMzNFMDAwMThGOTUwMEJDREMKLToxMDhBRTAwMDkyQjgwMDBEMzMxMTAwN0ZBMkIxMDAwRDhGOEUwMEJDMzMKLToxMDhBRjAwMDkxRDAwMDBEMDIwOTc4MjRBMUNGMDAwRDhGODgwMEJDMTEKLToxMDhCMDAwMDhFNkQwMDE0OTEwQTAwMEQyREFDMDAwMTAwMEMyOTQwNUYKLToxMDhCMTAwMDAxNEIzODI0MDBFNTE4MjVBMTAzMDAwRDk2NDIwMDEyRjAKLToxMDhCMjAwMDhGODgwMEJDOEY4NzAwRDBBNTAyMDAwMjhFNDUwMDA0MEMKLToxMDhCMzAwMDkwRkYwMEJDMzBBNDAwMDMwMDA0MzAyMzMwREUwMDAzQUIKLToxMDhCNDAwMDAwQkUxMDIxMzNGOTAwMDIxNzIwMDAwMjI0NDQwMDM0MzMKLToxMDhCNTAwMDI0NDQwMDMwOTBFMjAwQkMwMEEyMzAyNDMwREYwMDA0NDYKLToxMDhCNjAwMDE3RTAwMDAyMjQ4MzAwMDQwMDgwMTgyMThGOEYwMEFDREUKLToxMDhCNzAwMDI0MDkwMDAyQUQwMzAwMDRBMUU5MDAwMDkyNEUwMDNGNjkKLToxMDhCODAwMDhGOEQwMEFDQTFBRTAwMDE4Rjk1MDBBQzkyNEMwMDNGRTAKLToxMDhCOTAwMDhFNDQwMDA0QTZBQzAwMDI5NzZCMDAzQzBFMDAwQ0U1NkUKLToxMDhCQTAwMDMxNzBGRkZGMDAwMjUzODAwMjBBMzgyNTNDMDU0MjAwNjUKLToxMDhCQjAwMDAwRTUxODI1QUVBMzAwMDQ4Rjg2MDBBQzhFNDgwMDM4NkYKLToxMDhCQzAwMEFDQzgwMDE4OEU0NDAwMzRBQ0M0MDAxQ0FDQzAwMDBDMEYKLToxMDhCRDAwMEFDQzAwMDEwQTRDMDAwMTRBNEMwMDAxNkE0QzAwMDIwQTMKLToxMDhCRTAwMEE0QzAwMDIyQUNDMDAwMjQ4RTY0MDAxNDUwODAwMDAxOTgKLToxMDhCRjAwMDI0MDQwMDAxQUNDNDAwMDgwRTAwMEQwNTI0MTEwMDAxN0UKLToxMDhDMDAwMDBBMDAwRTg1OEY5MDAwRDA5MjBGMDBEMjkyMEUwMEQwRjUKLToxMDhDMTAwMDhGQjUwMDEwMzFFQjAwRkYzMUNEMDBGRjAwOEQ2MDIzRDgKLToxMDhDMjAwMDAxNkM1MDIxMjU1NEZGRkYwMDE0ODgyQjAwMTU5ODJCNTAKLToxMDhDMzAwMDAyMzM5MDI0MTY0MEZFREQwMDAwMDAwMDhGQjQwMDE0QzMKLToxMDhDNDAwMDhGQkYwMDQ0OEZCRTAwNDAzQTgyMDAwMThGQjcwMDNDQzYKLToxMDhDNTAwMDhGQjYwMDM4OEZCNTAwMzQ4RkI0MDAzMDhGQjMwMDJDM0UKLToxMDhDNjAwMDhGQjIwMDI4OEZCMTAwMjQ4RkIwMDAyMDAzRTAwMDA4RUQKLToxMDhDNzAwMDI3QkQwMDQ4MzMxMTAwMjAxMjIwMDBFRTI0MTUwMDAxMEEKLToxMDhDODAwMDkyMUUwMEJDMjQxRjAwMDEwMDAwQTgyMTMzRDkwMDAxNUUKLToxMDhDOTAwMDEzMjAwMDBEQUZCRjAwMUM4RTQ0MDAxNDhFMDgwMDg0MEEKLToxMDhDQTAwMDAwODgxMDJCMTQ0MDAwMDIwMDgwMzAyMThFMDYwMDg0QzIKLToxMDhDQjAwMDhFMDMwMDY0MDBDM0E4MkIxNkEwMDAwMjAwQzAyMDIxNzAKLToxMDhDQzAwMDhFMDQwMDY0MDA4MEE4MjE4RTQ3MDAxNDhFMDUwMDY0ODUKLToxMDhDRDAwMDAwRTUzMDJCMTRDMDAwMDIwMEUwMjAyMThFMDQwMDY0NjcKLToxMDhDRTAwMDAwOTVGMDIzMTNDMDAwMDQ4RkFDMDAxQzI0MEEwMDAyN0UKLToxMDhDRjAwMEFGQUEwMDFDOEZBQzAwMUMwMjhDNTgyQjE1NjAwMEE4N0EKLToxMDhEMDAwMDAwMDAxODIxOEU0RjAwMzg4RTZEMDAwQzNDMEUwMDgwNDQKLToxMDhEMTAwMEFFNkYwMDAwOEU0QTAwMzQzQzEwRkY5RjAxQUU1ODI1MTQKLToxMDhEMjAwMEFFNkEwMDA0OTI0NjAwM0YzNjBDRkZGRjAxNkMzODI0MDcKLToxMDhEMzAwMDNDMDUwMDIwM0MwM0ZGRUZBMjY2MDAwQjAwRTUxMDI1NzgKLToxMDhENDAwMDM0NjhGRkZGOEY4NzAwQjgwMDQ4RjgyNDNDMDQwMDA4MEYKLToxMDhENTAwMDAzRTRDODI1QUU3OTAwMEM4Q0Y4MDAxNEFFNjAwMDE4NEUKLToxMDhENjAwMDAyQkU3ODIxQUU3ODAwMTQ4Q0YxMDAxOEFFNzEwMDFDQTAKLToxMDhENzAwMDhDRTkwMDA4QUU2OTAwMjQ4Q0VFMDAwQ0FFNkYwMDJDNkMKLToxMDhEODAwMEFFNjAwMDI4QUU2RTAwMjBBNjYwMDAzOEE2NjAwMDNBRjMKLToxMDhEOTAwMDhDRUQwMDE0MDFCNTgwMjMwMjFFOTAyMzEyNDAwMDExQjcKLToxMDhEQTAwMEFFNzIwMDEwOTBFQTAwM0Q4RTY1MDAwNDhFNjQwMDAwRjMKLToxMDhEQjAwMDAwMEEzMTAwMDBBNkM4MjEwMDAwMTAyMTAzMjY0MDJCMjQKLToxMDhEQzAwMDAwODJGODIxMDNFOEMwMjFBRTc5MDAwNEFFNzgwMDAwRUIKLToxMDhERDAwMDkwRjEwMDNEQTI3MTAwMEE4Rjg5MDBCODk1MzIwMDA2MUIKLToxMDhERTAwMEE2NzIwMDA4OEY5ODAwQUMyNDE5MDAwMjAyQTAyMDIxNkUKLToxMDhERjAwMEEzMTkwMDAwOTc2OTAwM0M4RjkyMDBBQzBFMDAwQ0U1QUYKLToxMDhFMDAwMDMxMzFGRkZGMDAwMjdCODA4Rjg1MDBCODAyMkY2ODI1N0IKLToxMDhFMTAwMDNDMEU0MjAwMDFBRTgwMjVBRTUwMDAwNDhGODQwMEFDQjEKLToxMDhFMjAwMDhDQUMwMDM4QUM4QzAwMTg4Q0FCMDAzNEFDOEIwMDFDQzQKLToxMDhFMzAwMEFDODAwMDBDQUM4MDAwMTBBNDgwMDAxNEE0ODAwMDE2NEMKLToxMDhFNDAwMEE0ODAwMDIwQTQ4MDAwMjJBQzgwMDAyNDkwQTcwMDNGRDIKLToxMDhFNTAwMEE0ODcwMDAyMTJBMDAxMzQyNDAzMDAwMTUzQzAwMDAyQzEKLToxMDhFNjAwMDkwQTIwMDNEOTBBMjAwM0UyNDQ4MDAwMUEwODgwMDAxOEQKLToxMDhFNzAwMDhGOUYwMEFDQUZGNTAwMDg4RjgzMDBEMDI0MDcwMDM0MkIKLToxMDhFODAwMDkwNjYwMEJDMzBDNTAwMDI1MEEwMDAwMTI0MDcwMDMwRUQKLToxMDhFOTAwMDhGOTIwMEI4OEY4QTAwQkM5MDZEMDBCQzkyNEIwMDAwOEUKLToxMDhFQTAwMDI0MTJDMDAwMzJBNTAwMDNBMTRCMDAwMDhGODYwMEI4MzkKLToxMDhFQjAwMDhGODgwMEJDMjQwMjAwMDQ5MEM0MDAwMTAwNDUxODIzRTAKLToxMDhFQzAwMDMwNzkwMDAzQTEwNDAwMDE4RjhBMDBCQzhGOUYwMEI4OTUKLToxMDhFRDAwMDAwRjUzODIxOTU1ODAwMDI5N0U5MDAxMjAwRjkzODIxNzEKLToxMDhFRTAwMDAzMTI4ODI0MzEyRjNGRkYwMjJGNzAyNUE1NEUwMDAyNjgKLToxMDhFRjAwMDkxNTAwMDAyMzFBODAwMDQzMjBDMDAzRjM1OEIwMDQwMzUKLToxMDhGMDAwMEExNEIwMDAyMTJBMDAwMDI4Rjg1MDBCQzAwRTgzODIxQUUKLToxMDhGMTAwMDhGOEUwMEQwQUNBNzAwMDQyNDBCRkZCRjhEQ0QwMDdDNEEKLToxMDhGMjAwMDJFQTQwMDAxMjQwM0ZGREZBQ0FEMDAwODkwQjAwMDBEQkIKLToxMDhGMzAwMDAwMDQ0MTQwMzIwQzAwN0ZBMEFDMDAwRDhGODYwMEJDQzUKLToxMDhGNDAwMDkwQ0EwMDBEMDE0QjEwMjRBMEMyMDAwRDhGODcwMEJDRjkKLToxMDhGNTAwMDkwRTUwMDBEMDBBM0Y4MjQwM0U4QzgyNUEwRjkwMDBENTIKLToxMDhGNjAwMDhGOTEwMEI4OEY4RDAwQkM4RTM4MDAyMEFEQjgwMDEwRjYKLToxMDhGNzAwMDhFMjkwMDI0QURBOTAwMTQ4RTJGMDAyOEFEQUYwMDE4NTMKLToxMDhGODAwMDhFMkUwMDJDMEUwMDBEMDVBREFFMDAxQzhGQjAwMDFDMDcKLToxMDhGOTAwMDI0MEMwMDAyMTIwQzAwRUQ4RjkwMDBEMDhGQTMwMDFDNTcKLToxMDhGQTAwMDAwNjA4ODIxMTQ2MDAwMDIwMDYwQTgyMTAwMDBBMDIxNTgKLToxMDhGQjAwMDU2QTBGRTM5MDI5MUEwMjMwMDE0ODgyQjhGQUUwMDEwMUEKLToxMDhGQzAwMDk2MDcwMDEwM0MwQTAwMjAwMUQ2RjAyMzAyQzdDMDIxRkEKLToxMDhGRDAwMDMzRDJGRkZGQTYxODAwMTBBRkIyMDAxMEFGNEEwMDMwMjYKLToxMDhGRTAwMDAwMDAwMDAwOTYxNzAwMTA5NjEzMDAxMjEyNzcwMDhFRjIKLToxMDhGRjAwMDAwMTY0MTgwOEUxNjAwMEM4RTBGMDAwODAwMDgxN0MzNjMKLToxMDkwMDAwMDAyQzgyODIxMDBBODU4MkIwMUUyQTgyMTAyQUIxODIxOTAKLToxMDkwMTAwMEFFMDUwMDBDQUUwMzAwMDg4RkIzMDAxMDAwMTNCODJCOTAKLToxMDkwMjAwMDAyMzc4MDI0MTIwMEZGMDU4RjkwMDBEMDBBMDAwRTRCRkIKLToxMDkwMzAwMDAwMDAwMDAwOEU0ODAwMzhBNjYwMDAwODI0MEYwMDAzREUKLToxMDkwNDAwMEFFNjgwMDAwOEU0QzAwMzRBMjYwMDAwQThGOTAwMEI4MTkKLToxMDkwNTAwMEFFNkMwMDA0M0MwNTAwODA5MjBCMDAzRkEyNkYwMDBDMzgKLToxMDkwNjAwMDhFNjIwMDBDM0MxMUZGOUZBMjZCMDAwQjAwNDU2ODI1MkYKLToxMDkwNzAwMDM2MjNGRkZGM0MwNEZGRUY4RjhDMDBCODAxQTMzMDI0QTAKLToxMDkwODAwMDM0OUZGRkZGMDBERkM4MjRBRTc5MDAwQzhEODkwMDE0RTcKLToxMDkwOTAwMDk1OUUwMDEyOEY5ODAwQjBBRTY5MDAxMDhEOEUwMDE0NUUKLToxMDkwQTAwMEFFNjAwMDE4QUU2MDAwMjBBRTZFMDAxNEFFNjAwMDI0MEEKLToxMDkwQjAwMDhEODcwMDE4MzNDRTNGRkYwMDBFNTE4MEFFNjcwMDI4MjkKLToxMDkwQzAwMDhEODgwMDA4MDE1ODkwMjEzM0QwMDAwMUFFNjgwMDMwMkYKLToxMDkwRDAwMDhEOTEwMDBDOEY4RDAwQUMwMDEyNTlDMjAwMTA3QjgwNjYKLToxMDkwRTAwMDAxNkYyODIxMjQwMjAwMDJBNjY1MDAxQ0E2NjAwMDM2M0MKLToxMDkwRjAwMEFFNzEwMDJDQTFBMjAwMDA5NzYzMDAzQzhGOTgwMEFDRDkKLToxMDkxMDAwMDNDMDQ0MjAwMzA3RkZGRkYwM0U0MzAyNUFGMDYwMDA0M0IKLToxMDkxMTAwMDhGOTkwMEI4MjQwNzAwMDEyNDBCQzAwMDhGMzMwMDM4NUEKLToxMDkxMjAwMDI0MDYwMDM0QUYxMzAwMTg4RjI5MDAzNEFGMDkwMDFDNDcKLToxMDkxMzAwMEFGMDAwMDBDQUYwMDAwMTBBNzAwMDAxNEE3MDAwMDE2M0QKLToxMDkxNDAwMEE3MDAwMDIwQTcwMDAwMjJBRjAwMDAyNEE3MTUwMDAyRkUKLToxMDkxNTAwMEEzMDcwMDAxOEY4QTAwQUM4RjlFMDBCODhGOEMwMEJDRTMKLToxMDkxNjAwMEFENTUwMDA4OTNDODAwMDBBMTg4MDAwMDhGOTIwMEI4OTgKLToxMDkxNzAwMDhGOEYwMEJDOTI1MDAwMDFBMUYwMDAwMThGODQwMEJDRDEKLToxMDkxODAwMDk0OTEwMDAyMDIyQjI4MjQwMEFFMTAyNUE0ODIwMDAyMzQKLToxMDkxOTAwMDkwOEQwMDAyMzFBMzAwM0ZBMDgzMDAwMjhGODMwMEQwOTYKLToxMDkxQTAwMDhGODQwMEJDOTA3RjAwQkMzM0YzMDAwMjUyNjAwMDAxNEEKLToxMDkxQjAwMDI0MDYwMDMwQUM4NjAwMDQ4QzY1MDA3QzI0MERGRkJGQzMKLToxMDkxQzAwMDAyQTA4ODIxQUM4NTAwMDg5MDgyMDAwRDMwNDMwMDdGMEEKLToxMDkxRDAwMEEwODMwMDBEOEY4NjAwQkM5MEM0MDAwRDAwOERGODI0ODQKLToxMDkxRTAwMEEwREYwMDBEOEY4RTAwQkM5MUQ5MDAwRDM3MjkwMDIwMjMKLToxMDkxRjAwMEExQzkwMDBEOEY5RTAwQjg4RjkzMDBCQzhGQzcwMDIwQkYKLToxMDkyMDAwMEFFNjcwMDEwOEZEODAwMjRBRTc4MDAxNDhGQ0EwMDI4RjMKLToxMDkyMTAwMEFFNkEwMDE4OEZEMjAwMkMwRTAwMEQwNUFFNzIwMDFDMzUKLToxMDkyMjAwMDBBMDAxMDRDOEY5MDAwRDA5NjAyMDAxNDhFMDQwMDA0QTcKLToxMDkyMzAwMDMwNDNGRkZGMDAwMzY4QzAwMDhERjgyMUFGNUYwMDNDQTIKLToxMDkyNDAwMDhFMTkwMDA0OEY0NjAwM0MwMzI2NDgyMzE5MjAwMDNDNTkKLToxMDkyNTAwMDAwMDAwMDAwOEUwNTAwMDAyNEEyMDAwMTNDMEIwMDEwNUQKLToxMDkyNjAwMDM1NzUwMDA4QUY0MjAwMzhBRjU1MDAzMDAwMDAwMDAwRUYKLToxMDkyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMDkyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNEMwMDAwMDMKLToxMDkyOTAwMDMxOEYwMDIwMTFFMEZGRkQwMDAwMDAwMDhGNTMwNDAwMUIKLToxMDkyQTAwMDNDMDgwMDIwQUUxMzAwMDg4RjU3MDQwNEFFMTcwMDBDRDIKLToxMDkyQjAwMEFGNDgwMDMwMDAwMDAwMDAzQzA2MDgwMDhDQzYwMDQ0QTcKLToxMDkyQzAwMDI0MTYwMDAxMTBENjAwQkIwMDAwMDAwMDk2MTkwMDEyMDEKLToxMDkyRDAwMDNDMDUwODAwOENBNTAwNDAwMEI5NDgyMUE2MDkwMDEyRjEKLToxMDkyRTAwMDk2MEUwMDE0MjVDNzAwMDFBNjA3MDAxNDk2MTgwMDE0NTYKLToxMDkyRjAwMDMzMDRGRkZGNTQ4NkZGNDk4RkIzMDAxMEE2MDAwMDE0MEIKLToxMDkzMDAwMDBFMDAwRTI1MzBBNUZGRkYzQzA0MDgwMDhDODQwMDI0Q0QKLToxMDkzMTAwMDk2MUYwMDEyMDA0NDY4MjMwM0VEMzAyM0E2MDYwMDEyQjYKLToxMDkzMjAwMDBBMDAxMDY3OEZCMzAwMTBBMDgzMDAwMThGODIwMEFDODkKLToxMDkzMzAwMDI0MDQwMDAxQUM0NDAwMDgwQTAwMEZGRjhGODMwMEQwMTIKLToxMDkzNDAwMDhFMDIwMDAwMEEwMDEwRjgzQzBCMDAxMDhGOUYwMEMwMzYKLToxMDkzNTAwMDhGQjgwMDFDOTIwRjAwRDA5MjBCMDBEMDkyMEQwMEQwNUQKLToxMDkzNjAwMDMxRjEwMEZGMzE2RTAwRkYwMDBFMjhDMDAwMTExMTQwRTYKLToxMDkzNzAwMDAwNDUxODIxMzFBNjAwRkYwMzYzNTAyMTAwMDZDOTQwQjMKLToxMDkzODAwMDAzM0YzODIxMjU0OTAwODhBRjg5MDBBQ0FGODcwMEJDNzYKLToxMDkzOTAwMEExNTgwMDg4OTc2ODAwM0MwM0MwMjAyMThGOTEwMEFDNDEKLToxMDkzQTAwMDBFMDAwQ0U1MzExMEZGRkYwMDAyNjM4MDAyMEM3ODI1RUYKLToxMDkzQjAwMDNDMDQ0MjAwOEY4QzAwQjgwMUU0NTgyNUFFMkIwMDA0MTkKLToxMDkzQzAwMDhEOTEwMDM4OEY4QjAwQUMwMDAwNjgyMTAwMEQxMTAwREEKLToxMDkzRDAwMEFENzEwMDE4OEQ4RTAwMzQzQzA4N0ZGRjM1MDRGRkZGMEYKLToxMDkzRTAwMEFENkUwMDFDOTE4MzAwM0U4RDY1MDAxQzhENzkwMDE4QzgKLToxMDkzRjAwMDAwMDMzMTAwMDAwMzg3MDIwMEE2QzAyMTAwNTBGODI1QjkKLToxMDk0MDAwMDAzMDY0ODJCMDMzRjM4MjEwMEU5NTAyMUFENzgwMDFDQUEKLToxMDk0MTAwMEFENkEwMDE4QUQ2MDAwMENBRDYwMDAxMDkxOEYwMDNFODkKLToxMDk0MjAwMDI0MDUwMDA1MDNDNDUwMjRBNTZGMDAxNDk1OTEwMDA0ODEKLToxMDk0MzAwMDAzQzAyMDIxQTU3MTAwMTY5MThFMDAzRUE1NkUwMDIwNkMKLToxMDk0NDAwMDk1OEQwMDA0QTU2RDAwMjJBRDYwMDAyNDkxOTAwMDNGMzEKLToxMDk0NTAwMEE1NzAwMDAyOTE4MjAwM0QyNDQzMDAwMUExNjMwMDAxMzgKLToxMDk0NjAwMDhGODYwMEFDOEY5RjAwQkNBQ0RFMDAwOEEzRTUwMDAwMzcKLToxMDk0NzAwMDhGOTAwMEJDOEY5OTAwQjgyNDA1RkZCRjk2MDcwMDAyQUIKLToxMDk0ODAwMDk3MzgwMDEyMDI0Nzc4MjQzMzA5M0ZGRjAxRTk4ODI1MDUKLToxMDk0OTAwMEE2MTEwMDAyOTIxMjAwMDIyNDE4RkZERjMyNEUwMDNGOTQKLToxMDk0QTAwMDM1Q0QwMDQwQTIwRDAwMDI4Rjg2MDBCQzhGOEMwMEQwMEQKLToxMDk0QjAwMDI0MTJGRkZGQUNDMDAwMDQ4RDhCMDA3QzNDMEM4MDAwQUMKLToxMDk0QzAwMEFDQ0IwMDA4OTBDMjAwMEQzMDQzMDA3RkEwQzMwMDBENUMKLToxMDk0RDAwMDhGODcwMEJDOTBGRjAwMEQwM0U1QzgyNEEwRjkwMDBEQTQKLToxMDk0RTAwMDhGOTEwMEJDOTIyOTAwMEQwMTM4NzgyNEEyMkYwMDBEMjUKLToxMDk0RjAwMDhGOTAwMEJDQUUxMjAwMTBBRTE1MDAxNDkyMEUwMDE4MzIKLToxMDk1MDAwMDI0MTVGRjgwMDJBRTY4MjVBMjBEMDAxODhGODUwMEJDQ0YKLToxMDk1MTAwMDhGODMwMEI4OENBQjAwMTgwMTZDMTAyNDAwNEEzMDI1RjIKLToxMDk1MjAwMEFDQTYwMDE4OTA2ODAwM0VBMEE4MDAxQzhGOUYwMEI4NTEKLToxMDk1MzAwMDhGODcwMEJDOEY5ODAwRDA5N0Y5MDAwNEE0RjkwMDFFMTMKLToxMDk1NDAwMDBFMDAwMjAzOEYwNTAwODQ4Rjg2MDBEMDAwMDI3OTQwNTAKLToxMDk1NTAwMDAwMDI0OTAwOTBEMjAwQkMwMUU5ODgyMTAwNDAyODIxODYKLToxMDk1NjAwMDMyNTUwMDAyMTJBMDAwMDMwM0QxMjAyMTAwMDJBODgwN0UKLToxMDk1NzAwMDAwOTUyMDIxOTBDQzAwQkMzMTkyMDAwNDEyNDAwMDAzRTEKLToxMDk1ODAwMDMzQzkwMDAzMDAwNTQwODAwMDg4MjAyMTI0MTkwMDA0MEQKLToxMDk1OTAwMDhGOUUwMEJDMDMyOTM4MjMzMEY4MDAwMzAwOTg1MDIxMjcKLToxMDk1QTAwMEFGQ0EwMDA0MEUwMDBEMDVBNjY1MDAzODBBMDAxMDQ3N0EKLToxMDk1QjAwMDhGOTAwMEQwOTYwQTAwMTIzQzFFMDgwMDhGREUwMDI0MTcKLToxMDk1QzAwMDAzQ0E5MDIxQTYxMjAwMTIwQTAwMTA2NzhGQjMwMDEwODAKLToxMDk1RDAwMDI3QkRGRkUwM0MxODA4MDA4RjE4MDA1MEFGQjAwMDEwMDYKLToxMDk1RTAwMEFGQkYwMDE4QUZCMTAwMTRBRjg0MDBCMDkzNzEwMDc0MjYKLToxMDk1RjAwMDAzMDQ3ODIxMjQxMEZGODAzMUVFMDA3RjMyMjUwMDdGQTQKLToxMDk2MDAwMDAxRjA1ODI0MDFEQTY4MjEzQzBDMDAwQUEzODUwMEM0NEIKLToxMDk2MTAwMDAxQUMyODIxQUY0QjAwMjQ5NEE5MDAxMDk3NjgwMDA2RTQKLToxMDk2MjAwMDkwQTYwMDYyMDA4MDM4MjEyNDAyMDAzMDAxMDkyMDIzMjYKLToxMDk2MzAwMDMwQzMwMEYwQUY4NTAwRDAxMDYyMDAxOTMwOTBGRkZGRkEKLToxMDk2NDAwMDkwQUUwMDYyMjQwREZGRjAyNDBBMDA1MDAxQUU2MDI0QTkKLToxMDk2NTAwMDMxOEIwMEZGMTE2QTAwMkYwMDAwMDAwMDE2MDAwMDA3ODgKLToxMDk2NjAwMDI0MUYwQzAwQUY1RjAwMjQ4RkIxMDAxNDhGQkYwMDE4QkYKLToxMDk2NzAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDBFMDAwRTJCNjUKLToxMDk2ODAwMDAyMDAyMDIxMjQxRjBDMDBBRjVGMDAyNDhGQjEwMDE0QzIKLToxMDk2OTAwMDhGQkYwMDE4OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMjYKLToxMDk2QTAwMDk0QTIwMEUwOTRBNDAwRTI5MEJGMDExMzAwODIxODI2NjcKLToxMDk2QjAwMDMwNzlGRkZGMzNFNzAwQzAxNEUwMDAwOTJGMzEwMDAxQ0IKLToxMDk2QzAwMDE2MDAwMDM4MDAwMDAwMDA1NjIwRkZFNjI0MUYwQzAwQTIKLToxMDk2RDAwMDBFMDAwRDI3MDAwMDAwMDAwQTAwMTFGOTI0MUYwQzAwRTUKLToxMDk2RTAwMDE2MjBGRkRFMDAwMDAwMDAwRTAwMEQyNzAwMDAwMDAwMjUKLToxMDk2RjAwMDE0NDBGRkRDMjQxRjBDMDAxNjAwMDAyMjhGODMwMEQwRDIKLToxMDk3MDAwMDkwNjkwMTEzMzEyMjAwM0ZBMDYyMDExMzBBMDAxMUY5OTAKLToxMDk3MTAwMDI0MUYwQzAwOTRBRjAwRDQ4Rjg2MDBENDAwRTAyODIxRDEKLToxMDk3MjAwMDI0MDQwMDA1MEUwMDBDNkIzMUYwRkZGRjE0NDAwMDA1MEYKLToxMDk3MzAwMDI0MDMwMDAzOTc5MTAwRTYwMDAwMTgyMTI2MjVGRkZGNkYKLToxMDk3NDAwMEE3ODUwMEU2OEY1ODAxQjgwNzAwRkZGRTNDMTk2MDEzOUIKLToxMDk3NTAwMEFGNDAwMTgwMjQxRjBDMDBBRjUwMDE4NDAwNzkzODI1RjAKLToxMDk3NjAwMDNDMTAxMDAwQUY0NzAxODg4RkIxMDAxNEFGNTAwMUI4MTIKLToxMDk3NzAwMEFGNUYwMDI0OEZCMDAwMTA4RkJGMDAxODAzRTAwMDA4MTcKLToxMDk3ODAwMDI3QkQwMDIwMEUwMDBFMkIwMjAwMjAyMTUwNDBGRkI1MDcKLToxMDk3OTAwMDI0MUYwQzAwOEY4MzAwRDA5MDY5MDExMzBBMDAxMjIyNEQKLToxMDk3QTAwMDMxMjIwMDNGMEUwMDBFMkIwMjAwMjAyMTE0NDBGRkFEOUQKLToxMDk3QjAwMDI0MUYwQzAwMTIyMDAwMDc4RjgzMDBEMDkwNjgwMTEzMzMKLToxMDk3QzAwMDMxMDYwMDNGMzRDMjAwNDBBMDYyMDExMzBBMDAxMUY5QzMKLToxMDk3RDAwMDI0MUYwQzAwMEUwMDBEMjcwMDAwMDAwMDUwNDBGRkExQzgKLToxMDk3RTAwMDI0MUYwQzAwOEY4MzAwRDA5MDY4MDExMzMxMDYwMDNGQzYKLToxMDk3RjAwMDBBMDAxMjUyMzRDMjAwNDBBRjlCMDBDODAzRTAwMDA4QzgKLToxMDk4MDAwMEFGODAwMEVDMzA4OUZGRkYwMDA5NDA0MjJEMDIwMDQxOEIKLToxMDk4MTAwMDAwMDkyOTgwMTQ0MDAwMDIwMDA5NTA0MDI0MDgwMDQwM0IKLToxMDk4MjAwMDAwMDg3OTQwMDAwOEMwQzAwMUY4NTgyMTI1NjcwMUE4NDgKLToxMDk4MzAwMDAwRUY3MDIxMjVDQzAwN0YyNDBERkY4MDAxOEQxODI0QkUKLToxMDk4NDAwMDAwNjUzMDIxMDBDQTI4MjEyNTY0MDA4ODI0MEEwMDg4ODgKLToxMDk4NTAwMDNDMDEwODAwQUMyQTAwNEMzQzAxMDgwMEFDMjQwMDUwM0MKLToxMDk4NjAwMEFGODUwMEQ0M0MwMTA4MDBBQzI5MDA2MDNDMDEwODAwMzEKLToxMDk4NzAwMEFDMjgwMDY0M0MwMTA4MDBBQzI3MDA1NDNDMDEwODAwRkYKLToxMDk4ODAwMEFDMjMwMDU4M0MwMTA4MDBBQzI2MDA1QzAzRTAwMDA4NTMKLToxMDk4OTAwMDAwMDAwMDAwMzA4MzAwRkYzMEM2RkZGRjMwRTQwMEZGMEYKLToxMDk4QTAwMDhGNDIwMUI4MDQ0MEZGRkUwMDAzNEMwMDAxMjQzODI1MUMKLToxMDk4QjAwMDNDMDg2MDAwMDBFODIwMjUzQzAzMTAwMEFGNDUwMTgwMTMKLToxMDk4QzAwMEFGNDYwMTg0QUY0NDAxODgwM0UwMDAwOEFGNDMwMUI4MEMKLToxMDk4RDAwMDhGODYwMDFDM0MwOTYwMTIzNTI3MDAxMDhDQ0IwMDA0RDkKLToxMDk4RTAwMDNDMEM2MDBFMzU4NTAwMTAzMTZBMDAwNjJENDgwMDAxRTEKLToxMDk4RjAwMEFDRTgwMEM0OENDNDAwMDRBQ0E0MzE4MDhDQzIwMDA4NjUKLToxMDk5MDAwMDk0QzMwMDAyQUNBMjMxODQwM0UwMDAwOEE3ODMwMEU0MDIKLToxMDk5MTAwMDNDMDMwODAwOEM2MzAwNTA4Rjg0MDBFODhGODYwMDFDOTUKLToxMDk5MjAwMDI0MDJGRjgwMDA2NEMwMjEwMzAyQzgyNEFGNTkwMDI4MkMKLToxMDk5MzAwMDhDQ0QwMDA0MzMwNTAwN0YwMEJBNzgyMTNDMEUwMDBDNkEKLToxMDk5NDAwMDAxRUUyODIxQUNBRDAwNTg4Q0M4MDAwOEFGODUwMEQwQ0UKLToxMDk5NTAwMDNDMDc2MDEyQUNBODAwNUM4Q0NDMDAxMDM0RTgwMDEwMEUKLToxMDk5NjAwMEFDQUMwMDBDOENDQjAwMENBQ0FCMDAwODk0QUEwMDE0N0YKLToxMDk5NzAwMDNDMDIwODAwOEM0MjAwNDQyNTQ5MDAwMUE0QTkwMDE0QkYKLToxMDk5ODAwMDk0QTQwMDE0MzA4M0ZGRkYxMDYyMDAxNzhGODQwMEQwNkUKLToxMDk5OTAwMDNDMEEwODAwOEQ0QTAwNDBBNEFBMDAxMjhDQ0UwMDE4OTAKLToxMDk5QTAwMEFDOEUwMDI0OENDRDAwMTRBQzhEMDAyMDhDQzcwMDE4MjgKLToxMDk5QjAwMEFDODcwMDJDOENDQzAwMTQyNDA2MDAwMUFDOEMwMDI4NTEKLToxMDk5QzAwMDhEMEIwMEJDNTE2NjAwMUE4RDAyMDBCNDhEMDIwMEI4RTgKLToxMDk5RDAwMEE0ODIwMDNBOTQ4RjAwM0FBNDhGMDAzQzk0ODgwMEQ0NkIKLToxMDk5RTAwMDAzRTAwMDA4MzEwMkZGRkYzQzA5MDgwMDhEMjkwMDI0MzQKLToxMDk5RjAwMEE0QTAwMDE0OEY4NDAwRDBBNEE5MDAxMjhDQ0UwMDE4NUIKLToxMDlBMDAwMEFDOEUwMDI0OENDRDAwMTRBQzhEMDAyMDhDQzcwMDE4QzcKLToxMDlBMTAwMEFDODcwMDJDOENDQzAwMTQyNDA2MDAwMUFDOEMwMDI4RjAKLToxMDlBMjAwMDhEMEIwMEJDNTU2NkZGRUE4RDAyMDBCODhEMDIwMEI0QjQKLToxMDlBMzAwMEE0ODIwMDNBOTQ4RjAwM0FBNDhGMDAzQzk0ODgwMEQ0MEEKLToxMDlBNDAwMDAzRTAwMDA4MzEwMkZGRkY4Rjg2MDAxQzNDMEMwODAwNzkKLToxMDlBNTAwMDhEOEMwMDUwMjQwQkZGODA4Q0NEMDAwODNDMDMwMDBDNDMKLToxMDlBNjAwMDAwMEQ1MUMwMDE4QTQwMjEwMTBCNDgyNEFGOEEwMEU4NTMKLToxMDlBNzAwMEFGNDkwMDI4OTBDNzAwMDczMTA1MDA3RjAwQkExMDIxQzgKLToxMDlBODAwMDAwNDMyODIxMzBFNDAwMDQxMDgwMDAyRkFGODUwMEQwNkYKLToxMDlBOTAwMDkwQ0YwMDA3MzFFRTAwMDgxMUMwMDAzQzAwMDAwMDAwMkMKLToxMDlBQTAwMDhDRDkwMDBDOENDNDAwMTQwMzI0QzAyQjEzMDAwMDI2OTYKLToxMDlBQjAwMDAwMDAwMDAwOENDMjAwMENBQ0EyMDA2NDhDQ0QwMDE4MjkKLToxMDlBQzAwMDI0MDJGRkY4QUNBRDAwNjg4Q0NDMDAxMEFDQUMwMDgwNzgKLToxMDlBRDAwMDhDQ0IwMDBDQUNBQjAwODQ4Q0NBMDAxQ0FDQUEwMDdDMDQKLToxMDlBRTAwMDkwQTkwMEJDMDEyMjQwMjRBMEE4MDBCQzkwQzMwMDA3OUMKLToxMDlBRjAwMDMwNjcwMDA4MTBFMDAwMDQ4Rjg1MDBEMDkwQUYwMEJDRjQKLToxMDlCMDAwMDM1RUUwMDAxQTBBRTAwQkM5MEQ5MDAwNzMzMzgwMDAxNEIKLToxMDlCMTAwMDEzMDAwMDBGOEY4NDAwRDAyNDA3MDAyMDkwODIwMEJDMjcKLToxMDlCMjAwMDM0NDkwMDAyQTA4OTAwQkM4Rjg0MDBEMDkwODgwMDYyNzQKLToxMDlCMzAwMDMxMDMwMEYwMTQ2NzAwMDYyNDBBMDAzNEFDOEEwMEMwMjgKLToxMDlCNDAwMDBBMDAxMzM0MDAwMDAwMDAwQTAwMTMwRThDQzIwMDE0MzcKLToxMDlCNTAwMDkwQ0IwMDA3MzE2NjAwMDIxMEMwMDAwNTAwMDAwMDAwMzUKLToxMDlCNjAwMDkwOEQwMEJDMzVBQzAwMDRBMDhDMDBCQzhGODQwMEQwNkMKLToxMDlCNzAwMDkwOTgwMTEzMzMwRjAwM0ZBMDhGMDExMzhGOEUwMEQwRjgKLToxMDlCODAwMDk1QzUwMEQ0MDNFMDAwMDgzMEEyRkZGRkFDQTAwMDY0M0MKLToxMDlCOTAwMDBBMDAxMzBGMDAwMDAwMDAyN0JERkZEOEFGQjAwMDEwNkYKLToxMDlCQTAwMDhGOTAwMDFDQUZCRjAwMjRBRkI0MDAyMEFGQjIwMDE4RUMKLToxMDlCQjAwMEFGQjEwMDE0QUZCMzAwMUM5NjEzMDAwRTNDMDc2MDBBNEYKLToxMDlCQzAwMDNDMTQ2MDA2MzI2NEZGRkYzNjkzMDAxMDBFMDAxMjYxRjEKLToxMDlCRDAwMDM0RjQwNDEwOEY4NDAwRDQzQzExNjAwRTBFMDAwOUFBRTYKLToxMDlCRTAwMDM2MzEwMDEwOTIwRTAwMTUzQzA3MDgwMDhDRTcwMDYwMkIKLToxMDlCRjAwMDNDMTI2MDEyMzFDRDAwMEZBMzhEMDBGMDhFMEUwMDA0RDgKLToxMDlDMDAwMDhFMEQwMDA4OTYwODAwMTI5NjFGMDAxMDk2MTkwMDFBNzMKLToxMDlDMTAwMDk2MTgwMDFFOTYwRjAwMUMzMTBDRkZGRjMzRUJGRkZGNjAKLToxMDlDMjAwMDMzMkFGRkZGMzMwOUZGRkYzMUU2RkZGRjNDMDEwODAwNDUKLToxMDlDMzAwMEFDMkIwMDQwM0MwMTA4MDBBQzJDMDAyNDNDMDEwODAwODcKLToxMDlDNDAwMEFDMkEwMDQ0QUUyOTMxNzhBRTI2MzE3QzkyMDIwMDE1NTAKLToxMDlDNTAwMDk2MDMwMDE2MzY1MjAwMTAzMDQ0MDBGRjMwNjVGRkZGQjcKLToxMDlDNjAwMDNDMDYwODAwOENDNjAwNjRBRTI0MzE4OEFFNDUwMEI0QzIKLToxMDlDNzAwMDkyMDgwMDE0OTYxOTAwMTgyNDFGMDAwMTAxMUZDMDA0NDcKLToxMDlDODAwMDMzMkZGRkZGM0MwNTA4MDA4Q0E1MDA1OEFFNTgwMEI4RTQKLToxMDlDOTAwMEFFNEYwMEJDOTIwQzAwMTRBRjhFMDBEOEFGOEQwMERDMkMKLToxMDlDQTAwMDMxOEIwMEZGQUU0QjAwQzA5MjBBMDAxNUFFNjcwMDQ4MzIKLToxMDlDQjAwMEFFNjYwMDRDMzE0OTAwRkZBRTQ5MDBDOEFFNjUwMDdDN0QKLToxMDlDQzAwMDNDMDMwODAwOEM2MzAwNTAzQzA0MDgwMDhDODQwMDRDNkEKLToxMDlDRDAwMDNDMDgwODAwOEQwODAwNTQzQzAyMDgwMDhDNDIwMDVDREYKLToxMDlDRTAwMDhGQkYwMDI0QUU2MzAwODA4RkIwMDAxMEFFODMwMDc0N0QKLToxMDlDRjAwMDhGQjMwMDFDQUUyMjMxOUNBRTQyMDBEQ0FFMjczMUEwRjcKLToxMDlEMDAwMEFFMjYzMUE0QUUyNDMxOENBRTIzMzE5MEFFMjgzMTk0RUUKLToxMDlEMTAwMEFFMjUzMTk4QUU4NzAwNTBBRTg2MDA1NEFFODUwMDcwRjcKLToxMDlEMjAwMDhGQjEwMDE0QUU0NzAwRTBBRTQ2MDBFNEFFNDQwMENDNzQKLToxMDlEMzAwMEFFNDMwMEQwQUU0ODAwRDRBRTQ1MDBEODhGQjQwMDIwNkEKLToxMDlENDAwMDhGQjIwMDE4MDNFMDAwMDgyN0JEMDAyODI3QkRGRkUwMDAKLToxMDlENTAwMEFGQjEwMDE0QUZCRjAwMTgyNDExMDAwMTBFMDAwODU0NjkKLToxMDlENjAwMEFGQjAwMDEwMTA1MTAwMDU5Nzg0MDBFNjk3ODMwMENDMzcKLToxMDlENzAwMDAwODMxMDJCMTQ0MDAwMDg4Rjg1MDBENDI0MDcwMDAyQjQKLToxMDlEODAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwRTAxMDIxQjkKLToxMDlEOTAwMDAzRTAwMDA4MjdCRDAwMjAwRTAwMEM4OTI0MDQwMDA1MDQKLToxMDlEQTAwMEFGODIwMEU4MTA0MEZGRjYyNDA3MDAwMjBFMDAwODU4QkEKLToxMDlEQjAwMDhGOTAwMDFDOTc5RjAwRTY4Rjk5MDBFODhGOEQwMEM4NTgKLToxMDlEQzAwMDI3RUYwMDAxMjQwRTAwNTBBRjU5MDAyMEE3OEYwMEU2QjYKLToxMDlERDAwMEExQUUwMDAwM0MwQzA4MDA4RDhDMDA2NDhGODYwMEM4OEEKLToxMDlERTAwMDI0MEE4MDAwMDAwQzVFMDBBQ0NCMDA3NEE0QzAwMDA2MDYKLToxMDlERjAwMDk0QzkwMDBBMjQxRkZGODAzQzBEMDAwQzAxMkFDMDI0RDYKLToxMDlFMDAwMEE0RDgwMDBBOTBDODAwMEEyNDE4MjAwMDAxMUYxODI1QjEKLToxMDlFMTAwMEEwQzMwMDBBOEY4NzAwQzhBMEUwMDA3ODhGODUwMEM4MjMKLToxMDlFMjAwMDAwMDAzODIxQTBBMDAwODMzQzAyMDgwMDhDNDIwMDUwQjIKLToxMDlFMzAwMDhGODQwMEU4MDA0NDc4MjEwMUZGQzgyNEFGNTkwMDI4MkUKLToxMDlFNDAwMDk2MEIwMDAyMzFFRTAwN0YwMURBNjAyMTAxOEQzMDIxOTYKLToxMDlFNTAwMEE0Q0IwMEQ0OTYwQTAwMDJBRjg2MDBEMDNDMEUwMDA0Q0EKLToxMDlFNjAwMDI1NDkyNDAxQTRDOTAwRTY4RTA4MDAwNEFDQzgwMDA0RkEKLToxMDlFNzAwMDhFMDMwMDA4QUNDMzAwMDBBNEMwMDAxMEE0QzAwMDE0RUUKLToxMDlFODAwMEEwQzAwMEQwOEY4NTAwRDAyNDAzRkZCRkEwQTAwMEQxQzgKLToxMDlFOTAwMDNDMDQwODAwOEM4NDAwNjQ4RjgyMDBEMEEwNDQwMEQyNkYKLToxMDlFQTAwMDhFMUYwMDBDOEY4QTAwRDA5NzhGMDBFNEFENUYwMDFDREUKLToxMDlFQjAwMDhFMTkwMDEwMjQxMDAwMzBBRDU5MDAxOEE1NDAwMDMwNTQKLToxMDlFQzAwMEE1NTEwMDU0QTU1MTAwNTZBNTRGMDAxNkFENEUwMDY4OEYKLToxMDlFRDAwMEFENTgwMDgwQUQ1ODAwODQ5MTREMDA2MjMxQUMwMDBGNDgKLToxMDlFRTAwMDM1OEIwMDEwQTE0QjAwNjI4Rjg2MDBEMDkwQzkwMDYzQjMKLToxMDlFRjAwMDMxMjgwMDdGQTBDODAwNjM4Rjg0MDBEMDI0MDZGRkZGQjQKLToxMDlGMDAwMDkwODUwMDYzMDBBMzEwMjRBMDgyMDA2MzhGOTEwMEQwOEQKLToxMDlGMTAwMDAwRTAxMDIxOTIzRjAwQkMzN0Y5MDAwMUEyMzkwMEJDREIKLToxMDlGMjAwMDhGOEEwMEQwOTM4RjAwRjBBRDU4MDA2NEFENTAwMEMwMTAKLToxMDlGMzAwMDkxNEUwMEQzMDAwRjY5MDAzMUNDMDAwRjAxOEQ1ODI1RTAKLToxMDlGNDAwMEExNEIwMEQzOEY4NTAwRDA4Rjg5MDBEQ0FDQTkwMEU4M0QKLToxMDlGNTAwMDhGODgwMEQ4OEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDkKLToxMDlGNjAwMDI3QkQwMDIwQUNBODAwRUNBNEE2MDBENkE0QTAwMEUwNjkKLToxMDlGNzAwMEE0QTAwMEUyMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwMEQKLToxMDlGODAwMEFGQjAwMDEwOEY5MDAwMUNBRkIxMDAxNEFGQkYwMDE4MkQKLToxMDlGOTAwMDhFMTkwMDA0M0MxODA4MDA4RjE4MDA1MDI0MEZGRjgwMTEKLToxMDlGQTAwMDAwMTk4OUMwMDIzODcwMjEzMUNEMDA3RjAxQ0Y2MDI0QjMKLToxMDlGQjAwMDAxQkE1MDIxM0MwQjAwMENBRjRDMDAyODAxNEI0MDIxNTIKLToxMDlGQzAwMDk1MDkwMEQ0OTUwNDAwRDY4RTA3MDAwNDMxMzFGRkZGQjcKLToxMDlGRDAwMEFGODgwMEQwMEUwMDA5MjIwMDA3MjFDMDhFMDYwMDA0QzEKLToxMDlGRTAwMDhGODMwMEM4MDAwNjI5QzBBRjQ1MDAyMDkwNjQwMDNFNjIKLToxMDlGRjAwMDMwODIwMDQwMTQ0MDAwMDY4Rjg0MDBEMDM0MUZGRkZGRTEKLToxMEEwMDAwMDk0ODMwMEQ2MzA2MkZGRkYxNDVGMDAwNDAwMDAwMDAwNUMKLToxMEEwMTAwMDk0ODQwMEQ2MEUwMDA4QjczMDg0RkZGRjhFMDUwMDA0M0MKLToxMEEwMjAwMDAyMjAzMDIxOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQjQKLToxMEEwMzAwMDI0MDQwMDIyMDAwMDM4MjEwMDA1MjlDMDBBMDAxMjg1RUUKLToxMEEwNDAwMDI3QkQwMDIwMjdCREZGRTBBRkIxMDAxNDMwOTFGRkZGMTYKLToxMEEwNTAwMEFGQjAwMDEwQUZCRjAwMTgxMjIwMDAxRDAwMDA4MDIxMUIKLToxMEEwNjAwMDhGODYwMDFDOENDNTAwMDAyNDAzMDAwNjAwMDUzRjAyRkIKLToxMEEwNzAwMDAwMDUxNDAyMzBFNDAwMDcxNDgzMDAxNTMwNDUwMEZGOEEKLToxMEEwODAwMDJDQTgwMDA2MTEwMDAwNEQwMDA1NTg4MDNDMEMwODAwNkIKLToxMEEwOTAwMDI1OEM1N0U4MDE2QzUwMjE4RDQ5MDAwMDAxMjAwMDA4RjMKLToxMEEwQTAwMDAwMDAwMDAwOEY4RTAwRUMyNDBEMDAwMTExQ0QwMDU5M0UKLToxMEEwQjAwMDAwMDAwMDAwMjYwQjAwMDEzMTcwRkZGRjI0Q0EwMDIwQzEKLToxMEEwQzAwMDAyMTEyMDJCMDE0MDMwMjExNDgwRkZFNkFGOEEwMDFDRDIKLToxMEEwRDAwMDAyMDAxMDIxOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwNDQKLToxMEEwRTAwMDAzRTAwMDA4MjdCRDAwMjA5Mzg3MDBDRTE0RTAwMDM4NkQKLToxMEEwRjAwMDI0MDQwMDE0MEUwMDEzNDYwMDAwMDAwMDhGODYwMDFDOEMKLToxMEExMDAwMDI0MDIwMDAxMEEwMDE0OERBRjgyMDBFQzhGODkwMEVDNUMKLToxMEExMTAwMDI0MDgwMDAyMTEyODAwM0IyNDA0MDAxMzAwMDAyODIxMTkKLToxMEExMjAwMDAwMDAzMDIxMjQwNzAwMDEwRTAwMTI4NTAwMDAwMDAwMEQKLToxMEExMzAwMDBBMDAxNDhEOEY4NjAwMUM4Rjg3MDBFQzI0MDUwMDAyMTYKLToxMEExNDAwMDE0RTVGRkY2MjQwNDAwMTIwRTAwMTJGMjAwMDAwMDAwRDUKLToxMEExNTAwMDhGODUwMEU4MDA0MDMwMjEyNDA0MDAxMjBFMDAxMjg1OTMKLToxMEExNjAwMDAwMDAzODIxMEEwMDE0OEQ4Rjg2MDAxQzhGODMwMEVDQkMKLToxMEExNzAwMDI0MUYwMDAzMTQ3RkZGRDAyNjBCMDAwMTBFMDAxMkE0NDEKLToxMEExODAwMDAwMDAwMDAwOEY4NTAwRTgwMDQwMzAyMTI0MDIwMDAyMUEKLToxMEExOTAwMDI0MDQwMDEwMDAwMDM4MjFBRjgyMDBFQzBFMDAxMjg1NkMKLToxMEExQTAwMDAwMDAwMDAwMEEwMDE0OEQ4Rjg2MDAxQzhGOEYwMEVDQzkKLToxMEExQjAwMDI0MDYwMDAyMTFFNjAwMEIwMDAwMDAwMDI0MDQwMDEwMzkKLToxMEExQzAwMDAwMDAyODIxMDAwMDMwMjEwQTAwMTRBQTI0MDcwMDAxMDEKLToxMEExRDAwMDAwMDAyODIxMEUwMDEyODUwMDAwMzAyMTBBMDAxNDhEOTUKLToxMEExRTAwMDhGODYwMDFDMEUwMDEzQjMwMDAwMDAwMDE0NDAwMDEyMDQKLToxMEExRjAwMDhGOTkwMDFDOEY4NjAwMUMyNDAyMDAwMzBBMDAxNDhEMTYKLToxMEEyMDAwMEFGODIwMEVDMEUwMDE0M0YwMDAwMDAwMDBBMDAxNDhEMjUKLToxMEEyMTAwMDhGODYwMDFDMEUwMDEyOTQwMDAwMDAwMDI0MDIwMDAyMzEKLToxMEEyMjAwMDI0MDQwMDE0MDAwMDI4MjEwMDAwMzAyMTAwMDAzODIxRkYKLToxMEEyMzAwMDBBMDAxNEM3QUY4MjAwRUMwMDQwMzgyMTI0MDQwMDEwNEIKLToxMEEyNDAwMDk3MzgwMDAyMDAwMDI4MjEwRTAwMTI4NTMzMDZGRkZGMTgKLToxMEEyNTAwMDBBMDAxNDhEOEY4NjAwMUM4Rjg0MDBDODNDMDc3RkZGODYKLToxMEEyNjAwMDM0RTZGRkZGOEM4NTAwNzQyNDAyMDAwMTAwQTYxODI0NDgKLToxMEEyNzAwMEFDODMwMDc0MDNFMDAwMDhBMDgyMDAwNTEwQTAwMDM2NDMKLToxMEEyODAwMDJDQTIwMDgwMjc0QTA0MDAzQzBCMDAwNTI0MDkwMDgwMTIKLToxMEEyOTAwMDEwNDAwMDA3MjQwODAwODAzMEE2MDAwRjAwQzU0MDIxQjAKLToxMEEyQTAwMDJEMDMwMDgxMTQ2MDAwMDIwMEEwNDgyMTI0MDgwMDgwRDIKLToxMEEyQjAwMEFGNEIwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMEEyQzAwMDExMDAwMDA5MDAwMDM4MjEwMTQwMzAyMThDOEQwMDAwNzAKLToxMEEyRDAwMDI0RTcwMDA0MDBFODYwMkJBQ0NEMDAwMDI0ODQwMDA0RDcKLToxMEEyRTAwMDE1ODBGRkZBMjRDNjAwMDQwMDAwMDAwMDAwMDAwMDAwRjIKLToxMEEyRjAwMDAwMDAwMDAwM0MwRTAwMDYwMTBFMzgyNUFGNDcwMDMwN0MKLToxMEEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNEYwMDAwNkYKLToxMEEzMTAwMDMxRTgwMDEwMTEwMEZGRkQwMDAwMDAwMDhGNDIwMDNDRkEKLToxMEEzMjAwMDhGNDMwMDNDMDA0OUM4MjEwMzIzQzAyQjEzMDAwMDA0QzUKLToxMEEzMzAwMDAwMDAwMDAwOEY0QzAwMzgyNTg2MDAwMUFGNDYwMDM4MzEKLToxMEEzNDAwMDhGNDcwMDNDMDBBOTI4MjMwMEU5NjgyMUFGNEQwMDNDNUQKLToxMEEzNTAwMDE0QTBGRkNFMkNBMjAwODAwM0UwMDAwODAwMDAwMDAwNDMKLToxMEEzNjAwMDI3QkRGRkQwM0MwMjAwMDJBRkIxMDAxNDNDMTEwMDBDMkQKLToxMEEzNzAwMEFGNDUwMDM4QUZCMzAwMUNBRjQ2MDAzQzAwODA5ODIxQzkKLToxMEEzODAwMEFGNDIwMDMwMjQwNTAwODhBRjQ0MDAyODAzNTEyMDIxNEIKLToxMEEzOTAwMEFGQkYwMDI4QUZCNTAwMjRBRkI0MDAyMEFGQjIwMDE4QTMKLToxMEEzQTAwMDBFMDAxNEZGQUZCMDAwMTAzQzFGMDgwMDhGRkYwMDRDRTAKLToxMEEzQjAwMDNDMTgwODAwOEYxODAwNjQyNDEwRkY4MDAzRjNBODIxQzQKLToxMEEzQzAwMDMyQjkwMDdGMDJCMDc4MjQwMDE4QTBDMDAzM0E3MDIxOEYKLToxMEEzRDAwMDAwMTg5MTQwMDFEMTIwMjFBRjRGMDAyODBFMDAxNEZGM0EKLToxMEEzRTAwMDAyNTQyODIxM0MwRDA4MDA4REFEMDA1MDI0MDUwMTIwQTkKLToxMEEzRjAwMDAxQjM1ODIxMzE2QzAwN0YwMTcwNTAyNDAxOUE0ODIxMkIKLToxMEE0MDAwMDAxMzEyMDIxMEUwMDE0RkZBRjRBMDAyODNDMDgwODAwNEIKLToxMEE0MTAwMDhEMDgwMDU0M0MwNTA4MDA4Q0E1MDA2NDAxMTMzODIxMDgKLToxMEE0MjAwMDMwRTYwMDdGMDBGMDE4MjQwMERBMjAyMTAwOTEyMDIxN0UKLToxMEE0MzAwMEFGNDMwMDI4MEUwMDE0RkYwMDA1Mjk0MDNDMDIwODAwMkQKLToxMEE0NDAwMDhDNDIwMDU4M0MxMDA4MDA4RTEwMDA2MDEyMDAwMDFDNjYKLToxMEE0NTAwMDAwNTM4ODIxMjQxNUZGODAwQTAwMTU4MjNDMTQwMDBDNEIKLToxMEE0NjAwMDMyMjYwMDdGMDIzNTE4MjQwMERBMjAyMTAyNDAyODIxRkMKLToxMEE0NzAwMEFGNDMwMDI4MDA5NDIwMjEwRTAwMTRGRjI2MTBGRkMwRDcKLToxMEE0ODAwMDEyMDAwMDBGMDIzMjg4MjEyRTA1MDA0MTEwQTBGRkY0QjcKLToxMEE0OTAwMDI0MTIxMDAwMzIyNjAwN0YwMDEwOTE4MDAyMzUxODI0MEIKLToxMEE0QTAwMDAwREEyMDIxMDI0MDI4MjFBRjQzMDAyODAwOTQyMDIxMTcKLToxMEE0QjAwMDBFMDAxNEZGMDAwMDgwMjExNjAwRkZGMzAyMzI4ODIxRjUKLToxMEE0QzAwMDNDMEIwODAwOEQ2QjAwNUMyNDBBRkY4MDI0MDUwMDAyMTEKLToxMEE0RDAwMDAxNzM0MDIxMDEwQTQ4MjRBRjQ5MDAyODNDMDQwODAwQzgKLToxMEE0RTAwMDk0ODQwMDYyMzExMDAwN0YwMjFBODgyMTNDMDcwMDBDMUUKLToxMEE0RjAwMDBFMDAwQ0I5MDIyNzk4MjEwMDQwMjgyMTAyNjAyMDIxN0IKLToxMEE1MDAwMDhGQkYwMDI4OEZCNTAwMjQ4RkI0MDAyMDhGQjMwMDFDQUMKLToxMEE1MTAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDBBMDAxNEZGMjIKLToxMEE1MjAwMDI3QkQwMDMwOEY4MzAwMUM4QzYyMDAwNDEwNDAwMDAzQTQKLToxMEE1MzAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDhDNjQwMDEwMzAKLTowQ0E1NDAwMDhDNjUwMDA4MEEwMDE1Mzg4QzY2MDAwQ0MxCi06MDRBNTRDMDAwMDAwMDAwMDBCCi06MTBBNTUwMDAwMDAwMDAxQjAwMDAwMDBGMDAwMDAwMEEwMDAwMDAwOEJGCi06MTBBNTYwMDAwMDAwMDAwNjAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNEQ3Ci06MTBBNTcwMDAwMDAwMDAwNDAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwM0NFCi06MTBBNTgwMDAwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDIwMDAwMDAwMkMxCi06MTBBNTkwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMkIzCi06MTBBNUEwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMkEzCi06MTBBNUIwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjkzCi06MTBBNUMwMDAwMDAwMDAwMjAwMDAwMDAxMDAwMDAwMDEwMDAwMDAwMTg2Ci06MTBBNUQwMDAwODAwMEYzMDA4MDAwRDg4MDgwMDBGQzQwODAwMTA2QzM4Ci06MTBBNUUwMDAwODAwMEY1ODA4MDAwRjk4MDgwMDExQTQwODAwMERBNEQ3Ci06MTBBNUYwMDAwODAwMTFDODA4MDAwREY0MDgwMDE0OTgwODAwMTQ0MDYxCi06MTBBNjAwMDAwODAwMERBNDA4MDAwREE0MDgwMDBEQTQwODAwMTI1NEIxCi06MTBBNjEwMDAwODAwMTI1NDA4MDAwREE0MDgwMDBEQTQwODAwMTZFMDVDCi06MTBBNjIwMDAwODAwMERBNDA4MDAwREE0MDgwMDBEQTQwODAwMERBNDQ2Ci06MTBBNjMwMDAwODAwMTNENDA4MDAwREE0MDgwMDBEQTQwODAwMERBNDAwCi06MTBBNjQwMDAwODAwMERBNDA4MDAwREE0MDgwMDBEQTQwODAwMERBNDI2Ci06MTBBNjUwMDAwODAwMERBNDA4MDAwREE0MDgwMDBEQTQwODAwMERBNDE2Ci06MTBBNjYwMDAwODAwMERBNDA4MDAwREE0MDgwMDBEQTQwODAwMEZCOEYwCi06MTBBNjcwMDAwODAwMERBNDA4MDAwREE0MDgwMDE2OTAwODAwMERBNDAxCi06MTBBNjgwMDAwODAwMERBNDA4MDAwREE0MDgwMDBEQTQwODAwMERBNEU2Ci06MTBBNjkwMDAwODAwMERBNDA4MDAwREE0MDgwMDBEQTQwODAwMERBNEQ2Ci06MTBBNkEwMDAwODAwMERBNDA4MDAwREE0MDgwMDBEQTQwODAwMERBNEM2Ci06MTBBNkIwMDAwODAwMERBNDA4MDAwREE0MDgwMDBEQTQwODAwMERBNEI2Ci06MTBBNkMwMDAwODAwMTVCQzA4MDAwREE0MDgwMDBEQTQwODAwMTM0OERDCi06MTBBNkQwMDAwODAwMTJCODA4MDAyRTUwMDgwMDJFNTgwODAwMkUyMDNFCi06MTBBNkUwMDAwODAwMkUyQzA4MDAyRTM4MDgwMDJFNDQwODAwNTMyQzk5Ci06MTBBNkYwMDAwODAwNTJFQzA4MDA1MkI4MDgwMDUyOEMwODAwNTI2ODVBCi06MDRBNzAwMDAwODAwNTIyNEQ3Ci06MENBNzA0MDAwQTAwMEM3NjAwMDAwMDAwMDAwMDAwMDBCRAotOjEwQTcxMDAwMDAwMDAwMEQ3Mjc4NzAzNDJFMzYyRTMxMzYwMDAwMDBBNQotOjEwQTcyMDAwMDQwNjEwMDMwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwQgotOjEwQTczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQotOjEwQTc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQotOjEwQTc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQotOjEwQTc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQotOjEwQTc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQotOjEwQTc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQotOjEwQTc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQotOjEwQTdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQotOjEwQTdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQotOjEwQTdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQotOjEwQTdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQotOjEwQTdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQotOjEwQTdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQotOjEwQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAotOjEwQTgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAotOjEwQTgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAotOjEwQTgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAotOjEwQTg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAotOjEwQTg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAotOjEwQTg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAotOjEwQTg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAotOjEwQTg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAotOjEwQTg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAotOjEwQThBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAotOjEwQThCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAotOjEwQThDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAotOjEwQThEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAotOjEwQThFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAotOjEwQThGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAotOjEwQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NwotOjEwQTkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNwotOjEwQTkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNwotOjEwQTkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNwotOjEwQTk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNwotOjEwQTk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNwotOjEwQTk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNwotOjEwQTk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENwotOjEwQTk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNwotOjEwQTk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNwotOjEwQTlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNwotOjEwQTlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NwotOjEwQTlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NwotOjEwQTlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotOjEwQTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NwotOjEwQTlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NwotOjEwQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgotOjEwQUExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgotOjEwQUEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgotOjEwQUEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgotOjEwQUE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgotOjEwQUE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgotOjEwQUE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgotOjEwQUE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgotOjEwQUE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgotOjEwQUE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgotOjEwQUFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgotOjEwQUFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgotOjEwQUFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgotOjEwQUFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgotOjEwQUFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgotOjEwQUFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgotOjEwQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQotOjEwQUIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQotOjEwQUIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQotOjEwQUIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQotOjEwQUI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotOjEwQUI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQotOjEwQUI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQotOjEwQUI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQotOjEwQUI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQotOjEwQUI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQotOjEwQUJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQotOjEwQUJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQotOjEwQUJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQotOjEwQUJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQotOjEwQUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQotOjEwQUJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQotOjEwQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAotOjEwQUMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAotOjEwQUMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAotOjEwQUMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAotOjEwQUM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAotOjEwQUM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAotOjEwQUM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAotOjEwQUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAotOjEwQUM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAotOjEwQUM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAotOjEwQUNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAotOjEwQUNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAotOjEwQUNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAotOjEwQUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAotOjEwQUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAotOjEwQUNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAotOjEwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MwotOjEwQUQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMwotOjEwQUQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMwotOjEwQUQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMwotOjEwQUQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMwotOjEwQUQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMwotOjEwQUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMwotOjEwQUQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMwotOjEwQUQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMwotOjEwQUQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMwotOjEwQURBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMwotOjEwQURCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MwotOjEwQURDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MwotOjEwQUREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MwotOjEwQURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MwotOjEwQURGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MwotOjEwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgotOjEwQUUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgotOjEwQUUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgotOjEwQUUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgotOjEwQUU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgotOjEwQUU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgotOjEwQUU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgotOjEwQUU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgotOjEwQUU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgotOjEwQUU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgotOjEwQUVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgotOjEwQUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgotOjEwQUVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgotOjEwQUVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgotOjEwQUVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgotOjEwQUVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgotOjEwQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQotOjEwQUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQotOjEwQUYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQotOjEwQUYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQotOjEwQUY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotOjEwQUY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQotOjEwQUY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQotOjEwQUY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQotOjEwQUY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQotOjEwQUY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQotOjEwQUZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQotOjEwQUZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQotOjEwQUZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQotOjEwQUZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQotOjEwQUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQotOjEwQUZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQotOjEwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAotOjEwQjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAotOjEwQjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAotOjEwQjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAotOjEwQjA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotOjEwQjA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAotOjEwQjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwQjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAotOjEwQjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAotOjEwQjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAotOjEwQjBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAotOjEwQjBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAotOjEwQjBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAotOjEwQjBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAotOjEwQjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAotOjEwQjBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAotOjEwQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwQjExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgotOjEwQjEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgotOjEwQjEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgotOjEwQjE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgotOjEwQjE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwQjE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgotOjEwQjE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgotOjEwQjE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwQjE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwQjFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwQjFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgotOjEwQjFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwQjFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgotOjEwQjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwQjFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQotOjEwQjIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQotOjEwQjIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQotOjEwQjIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwQjI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQotOjEwQjI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQotOjEwQjI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQotOjEwQjI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQotOjEwQjI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQotOjEwQjI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQotOjEwQjJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQotOjEwQjJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQotOjEwQjJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQotOjEwQjJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQotOjEwQjJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQotOjEwQjJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQotOjEwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAotOjEwQjMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAotOjEwQjMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAotOjEwQjMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAotOjEwQjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAotOjEwQjM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAotOjEwQjM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAotOjEwQjM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAotOjEwQjM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAotOjEwQjM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAotOjEwQjNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAotOjEwQjNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwQjNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAotOjEwQjNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAotOjEwQjNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAotOjEwQjNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAotOjEwQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQwotOjEwQjQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQwotOjEwQjQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQwotOjEwQjQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQwotOjEwQjQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQwotOjEwQjQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQwotOjEwQjQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQwotOjEwQjQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQwotOjEwQjQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQwotOjEwQjQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQwotOjEwQjRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QwotOjEwQjRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QwotOjEwQjRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QwotOjEwQjREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QwotOjEwQjRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QwotOjEwQjRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QwotOjEwQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgotOjEwQjUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgotOjEwQjUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgotOjEwQjUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgotOjEwQjU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgotOjEwQjU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgotOjEwQjU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgotOjEwQjU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgotOjEwQjU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgotOjEwQjU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgotOjEwQjVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgotOjEwQjVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgotOjEwQjVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgotOjEwQjVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgotOjEwQjVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgotOjEwQjVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgotOjEwQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQotOjEwQjYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQotOjEwQjYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQotOjEwQjYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQotOjEwQjY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQotOjEwQjY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQotOjEwQjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQotOjEwQjY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQotOjEwQjY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQotOjEwQjY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQotOjEwQjZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQotOjEwQjZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQotOjEwQjZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQotOjEwQjZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQotOjEwQjZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQotOjEwQjZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQotOjEwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQotOjEwQjcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQotOjEwQjcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQotOjEwQjczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQotOjEwQjc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQotOjEwQjc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQotOjEwQjc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQotOjEwQjc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQotOjEwQjc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQotOjEwQjc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQotOjEwQjdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQotOjEwQjdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQotOjEwQjdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQotOjEwQjdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQotOjEwQjdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQotOjEwQjdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQotOjEwQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAotOjEwQjgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAotOjEwQjgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAotOjEwQjgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAotOjEwQjg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAotOjEwQjg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAotOjEwQjg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAotOjEwQjg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAotOjEwQjg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAotOjEwQjg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAotOjEwQjhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAotOjEwQjhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAotOjEwQjhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAotOjEwQjhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAotOjEwQjhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAotOjEwQjhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAotOjEwQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNwotOjEwQjkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNwotOjEwQjkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNwotOjEwQjkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNwotOjEwQjk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNwotOjEwQjk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNwotOjEwQjk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENwotOjEwQjk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNwotOjEwQjk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNwotOjEwQjk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNwotOjEwQjlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NwotOjEwQjlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NwotOjEwQjlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotOjEwQjlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NwotOjEwQjlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NwotOjEwQjlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NwotOjEwQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgotOjEwQkExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgotOjEwQkEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgotOjEwQkEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgotOjEwQkE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgotOjEwQkE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgotOjEwQkE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgotOjEwQkE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgotOjEwQkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgotOjEwQkE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgotOjEwQkFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgotOjEwQkFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgotOjEwQkFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgotOjEwQkFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgotOjEwQkFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgotOjEwQkFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgotOjEwQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQotOjEwQkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQotOjEwQkIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQotOjEwQkIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotOjEwQkI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQotOjEwQkI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQotOjEwQkI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQotOjEwQkI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQotOjEwQkI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQotOjEwQkI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQotOjEwQkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQotOjEwQkJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQotOjEwQkJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQotOjEwQkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQotOjEwQkJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQotOjEwQkJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQotOjEwQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAotOjEwQkMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAotOjEwQkMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAotOjEwQkMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAotOjEwQkM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAotOjEwQkM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAotOjEwQkM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAotOjEwQkM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAotOjEwQkM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAotOjEwQkM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAotOjEwQkNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAotOjEwQkNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAotOjEwQkNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAotOjEwQkNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAotOjEwQkNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAotOjEwQkNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAotOjEwQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMwotOjEwQkQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMwotOjEwQkQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMwotOjEwQkQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMwotOjEwQkQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMwotOjEwQkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMwotOjEwQkQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMwotOjEwQkQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMwotOjEwQkQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMwotOjEwQkQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMwotOjEwQkRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MwotOjEwQkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MwotOjEwQkRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MwotOjEwQkREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MwotOjEwQkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MwotOjEwQkRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MwotOjEwQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgotOjEwQkUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgotOjEwQkUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgotOjEwQkUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgotOjEwQkU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgotOjEwQkU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgotOjEwQkU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgotOjEwQkU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgotOjEwQkU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgotOjEwQkU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgotOjEwQkVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgotOjEwQkVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgotOjEwQkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgotOjEwQkVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgotOjEwQkVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgotOjEwQkVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgotOjEwQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQotOjEwQkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQotOjEwQkYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQotOjEwQkYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotOjEwQkY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQotOjEwQkY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQotOjEwQkY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQotOjEwQkY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQotOjEwQkY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQotOjEwQkY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQotOjEwQkZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQotOjEwQkZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQotOjEwQkZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQotOjEwQkZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQotOjEwQkZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQotOjEwQkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQotOjEwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAotOjEwQzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAotOjEwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAotOjEwQzAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotOjEwQzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAotOjEwQzA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwQzA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAotOjEwQzA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAotOjEwQzA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAotOjEwQzA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAotOjEwQzBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAotOjEwQzBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAotOjEwQzBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAotOjEwQzBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAotOjEwQzBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAotOjEwQzBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAotOjEwQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgotOjEwQzExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgotOjEwQzEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgotOjEwQzEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgotOjEwQzE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwQzE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgotOjEwQzE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgotOjEwQzE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwQzE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwQzE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwQzFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgotOjEwQzFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwQzFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgotOjEwQzFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwQzFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwQzFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQotOjEwQzIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQotOjEwQzIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwQzIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQotOjEwQzI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQotOjEwQzI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQotOjEwQzI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQotOjEwQzI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQotOjEwQzI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQotOjEwQzI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQotOjEwQzJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQotOjEwQzJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQotOjEwQzJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQotOjEwQzJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQotOjEwQzJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQotOjEwQzJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQotOjEwQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAotOjEwQzMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAotOjEwQzMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAotOjEwQzMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAotOjEwQzM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAotOjEwQzM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAotOjEwQzM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAotOjEwQzM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAotOjEwQzM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAotOjEwQzM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAotOjEwQzNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwQzNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAotOjEwQzNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAotOjEwQzNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAotOjEwQzNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAotOjEwQzNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAotOjEwQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQwotOjEwQzQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQwotOjEwQzQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQwotOjEwQzQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQwotOjEwQzQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQwotOjEwQzQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQwotOjEwQzQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQwotOjEwQzQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQwotOjEwQzQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQwotOjEwQzQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QwotOjEwQzRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QwotOjEwQzRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QwotOjEwQzRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QwotOjEwQzREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QwotOjEwQzRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QwotOjEwQzRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQwotOjEwQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgotOjEwQzUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgotOjEwQzUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgotOjEwQzUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgotOjEwQzU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgotOjEwQzU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgotOjEwQzU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgotOjEwQzU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgotOjEwQzU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgotOjEwQzU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgotOjEwQzVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgotOjEwQzVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgotOjEwQzVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgotOjEwQzVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgotOjEwQzVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgotOjEwQzVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgotOjEwQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQotOjEwQzYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQotOjEwQzYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQotOjEwQzYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQotOjEwQzY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQotOjEwQzY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQotOjEwQzY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQotOjEwQzY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQotOjEwQzY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQotOjEwQzY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQotOjEwQzZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQotOjEwQzZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQotOjEwQzZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQotOjEwQzZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQotOjEwQzZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQotOjEwQzZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQotOjEwQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQotOjEwQzcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQotOjEwQzcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQotOjEwQzczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQotOjEwQzc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQotOjEwQzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQotOjEwQzc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQotOjEwQzc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQotOjEwQzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQotOjEwQzc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQotOjEwQzdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQotOjEwQzdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQotOjEwQzdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQotOjEwQzdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQotOjEwQzdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQotOjEwQzdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQotOjEwQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAotOjEwQzgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAotOjEwQzgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAotOjEwQzgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAotOjEwQzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAotOjEwQzg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAotOjEwQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAotOjEwQzg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAotOjEwQzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAotOjEwQzg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAotOjEwQzhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAotOjEwQzhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAotOjEwQzhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAotOjEwQzhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAotOjEwQzhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAotOjEwQzhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAotOjEwQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNwotOjEwQzkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNwotOjEwQzkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNwotOjEwQzkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNwotOjEwQzk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNwotOjEwQzk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENwotOjEwQzk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNwotOjEwQzk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNwotOjEwQzk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNwotOjEwQzk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NwotOjEwQzlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NwotOjEwQzlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotOjEwQzlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NwotOjEwQzlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NwotOjEwQzlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NwotOjEwQzlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNwotOjEwQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgotOjEwQ0ExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgotOjEwQ0EyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgotOjEwQ0EzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgotOjEwQ0E0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgotOjEwQ0E1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgotOjEwQ0E2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgotOjEwQ0E3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgotOjEwQ0E4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgotOjEwQ0E5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgotOjEwQ0FBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgotOjEwQ0FCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgotOjEwQ0FDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgotOjEwQ0FEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgotOjEwQ0FFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgotOjEwQ0FGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgotOjEwQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQotOjEwQ0IxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQotOjEwQ0IyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotOjEwQ0IzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQotOjEwQ0I0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQotOjEwQ0I1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQotOjEwQ0I2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQotOjEwQ0I3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQotOjEwQ0I4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQotOjEwQ0I5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQotOjEwQ0JBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQotOjEwQ0JCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQotOjEwQ0JDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQotOjEwQ0JEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQotOjEwQ0JFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQotOjEwQ0JGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQotOjEwQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAotOjEwQ0MxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAotOjEwQ0MyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAotOjEwQ0MzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAotOjEwQ0M0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAotOjEwQ0M1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAotOjEwQ0M2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAotOjEwQ0M3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAotOjEwQ0M4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAotOjEwQ0M5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAotOjEwQ0NBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAotOjEwQ0NCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAotOjEwQ0NDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAotOjEwQ0NEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAotOjEwQ0NFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAotOjEwQ0NGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAotOjEwQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMwotOjEwQ0QxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMwotOjEwQ0QyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMwotOjEwQ0QzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMwotOjEwQ0Q0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMwotOjEwQ0Q1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMwotOjEwQ0Q2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMwotOjEwQ0Q3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMwotOjEwQ0Q4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMwotOjEwQ0Q5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MwotOjEwQ0RBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MwotOjEwQ0RCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MwotOjEwQ0RDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MwotOjEwQ0REMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MwotOjEwQ0RFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MwotOjEwQ0RGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMwotOjEwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgotOjEwQ0UxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgotOjEwQ0UyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgotOjEwQ0UzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgotOjEwQ0U0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgotOjEwQ0U1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgotOjEwQ0U2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgotOjEwQ0U3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgotOjEwQ0U4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgotOjEwQ0U5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgotOjEwQ0VBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgotOjEwQ0VCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgotOjEwQ0VDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgotOjEwQ0VEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgotOjEwQ0VFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgotOjEwQ0VGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgotOjEwQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQotOjEwQ0YxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQotOjEwQ0YyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotOjEwQ0YzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQotOjEwQ0Y0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQotOjEwQ0Y1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQotOjEwQ0Y2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQotOjEwQ0Y3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQotOjEwQ0Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQotOjEwQ0Y5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQotOjEwQ0ZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQotOjEwQ0ZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQotOjEwQ0ZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQotOjEwQ0ZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQotOjEwQ0ZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQotOjEwQ0ZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQotOjEwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAotOjEwRDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAotOjEwRDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotOjEwRDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAotOjEwRDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwRDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAotOjEwRDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAotOjEwRDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAotOjEwRDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAotOjEwRDA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAotOjEwRDBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAotOjEwRDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAotOjEwRDBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAotOjEwRDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAotOjEwRDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAotOjEwRDBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAotOjEwRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgotOjEwRDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgotOjEwRDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgotOjEwRDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwRDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgotOjEwRDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgotOjEwRDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwRDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwRDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwRDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgotOjEwRDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwRDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgotOjEwRDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwRDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwRDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwRDFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgotOjEwRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQotOjEwRDIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwRDIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQotOjEwRDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQotOjEwRDI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQotOjEwRDI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQotOjEwRDI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQotOjEwRDI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQotOjEwRDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQotOjEwRDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQotOjEwRDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQotOjEwRDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQotOjEwRDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQotOjEwRDJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQotOjEwRDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQotOjEwRDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQotOjEwRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAotOjEwRDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAotOjEwRDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAotOjEwRDMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAotOjEwRDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAotOjEwRDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAotOjEwRDM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAotOjEwRDM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAotOjEwRDM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAotOjEwRDM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwRDNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAotOjEwRDNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAotOjEwRDNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAotOjEwRDNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAotOjEwRDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAotOjEwRDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAotOjEwRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQwotOjEwRDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQwotOjEwRDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQwotOjEwRDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQwotOjEwRDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQwotOjEwRDQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQwotOjEwRDQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQwotOjEwRDQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQwotOjEwRDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QwotOjEwRDQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QwotOjEwRDRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QwotOjEwRDRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QwotOjEwRDRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QwotOjEwRDREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QwotOjEwRDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQwotOjEwRDRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQwotOjEwRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgotOjEwRDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgotOjEwRDUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgotOjEwRDUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgotOjEwRDU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgotOjEwRDU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgotOjEwRDU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgotOjEwRDU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgotOjEwRDU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgotOjEwRDU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgotOjEwRDVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgotOjEwRDVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgotOjEwRDVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgotOjEwRDVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgotOjEwRDVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgotOjEwRDVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgotOjEwRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQotOjEwRDYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQotOjEwRDYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQotOjEwRDYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQotOjEwRDY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQotOjEwRDY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQotOjEwRDY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQotOjEwRDY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQotOjEwRDY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQotOjEwRDY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQotOjEwRDZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQotOjEwRDZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQotOjEwRDZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQotOjEwRDZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQotOjEwRDZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQotOjEwRDZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQotOjEwRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQotOjEwRDcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQotOjEwRDcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQotOjEwRDczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQotOjEwRDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQotOjEwRDc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQotOjEwRDc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQotOjEwRDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQotOjEwRDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQotOjEwRDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQotOjEwRDdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQotOjEwRDdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQotOjEwRDdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQotOjEwRDdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQotOjEwRDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQotOjEwRDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQotOjEwRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAotOjEwRDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAotOjEwRDgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAotOjEwRDgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAotOjEwRDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAotOjEwRDg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAotOjEwRDg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAotOjEwRDg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAotOjEwRDg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAotOjEwRDg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAotOjEwRDhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAotOjEwRDhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAotOjEwRDhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAotOjEwRDhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAotOjEwRDhFMDAwMTAwMDAwMDMwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMEQwQgotOjEwRDhGMDAwM0MwMjA4MDAyNDQyNzEyMDNDMDMwODAwMjQ2Mzc1QzhFMAotOjEwRDkwMDAwQUM0MDAwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDRBMwotOjEwRDkxMDAwM0MxRDA4MDAzN0JEN0ZGQzAzQTBGMDIxM0MxMDA4MDAyRgotOjEwRDkyMDAwMjYxMDMxRDgzQzFDMDgwMDI3OUM3MTIwMEUwMDExNjQ4MQotOjEwRDkzMDAwMDAwMDAwMDAwMDAwMDAwRDMwQTVGRkZGMzBDNjAwRkYxMgotOjEwRDk0MDAwMjc0MzAxODA4RjQyMDFCODA0NDBGRkZFMjQwMjAwMDJGOQotOjEwRDk1MDAwQUM2NDAwMDBBNDY1MDAwOEEwNjYwMDBBQTA2MjAwMEI4OQotOjEwRDk2MDAwM0MwMjEwMDBBQzY3MDAxODAzRTAwMDA4QUY0MjAxQjhBOQotOjEwRDk3MDAwM0MwMzYwMDA4QzYyNEZGODA0NDBGRkZFM0MwMjAyMDA1MgotOjEwRDk4MDAwQUM2NDRGQzBBQzYyNEZDNDNDMDIxMDAwMDNFMDAwMDgxRQotOjEwRDk5MDAwQUM2MjRGRjgyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTA3NgotOjEwRDlBMDAwMEUwMDExQjMwMDgwODAyMTkzNjIwMDA1MjQwM0ZGRkU2NgotOjEwRDlCMDAwMDIwMDIwMjEwMDQzMTAyNDhGQkYwMDE0OEZCMDAwMTBGQwotOjEwRDlDMDAwQTM2MjAwMDUwQTAwMTFCQzI3QkQwMDE4MjdCREZGRThBRgotOjEwRDlEMDAwQUZCMDAwMTBBRkJGMDAxNDBFMDAwRUE0MDA4MDgwMjE3NQotOjEwRDlFMDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDRGRgotOjEwRDlGMDAwMjQwMjAxMDBBRjQyMDE4MDBBMDAwQ0MxMDIwMDIwMjE3NAotOjEwREEwMDAwQUY0MDAxODAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTBCMgotOjEwREExMDAwMEEwMDBGN0QyN0JEMDAxODI3QkRGRjk4QUZCRTAwNjAyQwotOjEwREEyMDAwQUZCNzAwNUNBRkIyMDA0OEFGQkYwMDY0QUZCNjAwNThGQwotOjEwREEzMDAwQUZCNTAwNTRBRkI0MDA1MEFGQjMwMDRDQUZCMTAwNDQyOQotOjEwREE0MDAwQUZCMDAwNDA4RjUwMDEyODkzNjMwMDNGOTM2MjAwMDUwMAotOjEwREE1MDAwMDAwMEYwMjEzMDcyMDBGRjAwMDIxMDI3MzA0MjAwMDE2OAotOjEwREE2MDAwMDAwMEI4MjExNDQwMDA2NkFGQTAwMDM4OTM0MjAxMTZCMAotOjEwREE3MDAwOTM0MzAxMTIzMDQyMDBGRjMwNjMwMEZGMDM0MjIwMjEzNAotOjEwREE4MDAwMDM0MzEwMjEyNDQ1NDAwMDhGODIwMDAwMTA0MDAwMThGRAotOjEwREE5MDAwMjQ4ODQwMDA4RjQyMDEwNDNDMDMwMDAxMDA0MzEwMjQwRAotOjEwREFBMDAwMTA0MDAwMTMwMDAwMDAwMDhDQTMwMDBDOEY2MjAwMzBCNwotOjEwREFCMDAwMTQ2MjAxQTIyNDAyMDAwMThDQTMwMDEwOEY2MjAwMkNDQQotOjEwREFDMDAwMTQ2MjAxOUUyNDAyMDAwMTk3NjIwMDNBOTQ4MzQwMDA5MAotOjEwREFEMDAwMzA0MkZGRkYxNDYyMDE5OTI0MDIwMDAxOTc2MjAwMzg2RQotOjEwREFFMDAwOTUwMzAwMDIzMDQyRkZGRjE0NjIwMTk0MjQwMjAwMDFGQQotOjEwREFGMDAwOTM2MjAwMDAzMDQzMDBGRjI0MDIwMDIwMTA2MjAwMDUwMgotOjEwREIwMDAwMjQwMjAwNTAxMDYyMDAwNjAwMDAwMDAwMEEwMDBEMEIwNQotOjEwREIxMDAwMDAwMDAwMDAwMDAwMDAwRDBBMDAwRDE0QUZBMDAwMzA0RQotOjEwREIyMDAwM0MxRTA4MDAyN0RFNzE4ODBBMDAwRDE0QUZBMDAwMzBFQgotOjEwREIzMDAwM0MwMjA4MDA4QzQyMDBEQzI0NDIwMDAxM0MwMTA4MDA0OQotOjEwREI0MDAwQUMyMjAwREMwRTAwMTI3RDAwMDAwMDAwMEEwMDBFOEZFNwotOjEwREI1MDAwOEZCRjAwNjQ4RjQyMDEwNDNDMDMwMDIwOTExMzAwMEQyRAotOjEwREI2MDAwMDA0MzEwMjQwMDAyMjAyQjAwMDQyMTQwQUZBNDAwMzAwOQotOjEwREI3MDAwOEY0MzAxMDQzQzAyMDA0MDAwNjIxODI0MTQ2MDAwMDIzQwotOjEwREI4MDAwMzQ4NzAwNDAwMDgwMzgyMTMyNjIwMDIwQUZBNzAwMzA4NwotOjEwREI5MDAwMTQ0MDAwMDIzNEU2MDA4MDAwRTAzMDIxMTBDMDAwMEI4OQotOjEwREJBMDAwQUZBNjAwMzA5M0M1MDAwODhGNjcwMDRDMDIwMDIwMjEwQgotOjEwREJCMDAwMDAwNTJCMDAzNEE1MDA4MTMwQTVGMDgxMEUwMDBDOERFRQotOjEwREJDMDAwMzBDNjAwRkYwQTAwMEU4QzAwMDAwMDAwOTM2MjAwM0U4OQotOjEwREJEMDAwMzA0MjAwNDAxMDQwMDAwRTI0MDIwMDA0NTY0MjAwMDY2RAotOjEwREJFMDAwMjQwMjAwMTIwMjAwMjAyMTBFMDAxM0RBMDEwMDMwMjE2RAotOjEwREJGMDAwMEEwMDBFOEY4RkJGMDA2NDE2NDIwMDA1MDAwMDAwMDA2RgotOjEwREMwMDAwMEUwMDBDQjIwMDAwMjAyMTBBMDAwRThGOEZCRjAwNjRBRQotOjEwREMxMDAwOTc0MjAxMUE5NTA0MDAwRTkzNjMwMDM1MzI2NTAwMDRBMwotOjEwREMyMDAwMzA1NUZGRkYwMDY0MjAwNEFGQTQwMDNDOEQxMTAwMDRCOAotOjEwREMzMDAwMTBBMDAwMTU4RDE0MDAwODkzNjIwMDNFMzA0MjAwNDA5MQotOjEwREM0MDAwMTA0MDAwMDcwMDAwMDAwMDBFMDAxMzNCMDIyMDIwMjFCRQotOjEwREM1MDAwMTA0MDAwMEQwMDAwMDAwMDBBMDAwRThDMDAwMDAwMDBDMwotOjEwREM2MDAwOEY2MjAwNDQwMjIyMTAyMzA0NDAwMTMyMDAwMDAwMDBCMQotOjEwREM3MDAwOEY2MjAwNDgwMjIyMTAyMzA0NDEwMTJFMjQwNDAwMTY2MgotOjEwREM4MDAwMEEwMDBEQTI4RkMyMDAwNDhGNjIwMDQ4MDIyMjEwMjNGNgotOjEwREM5MDAwMDQ0MDAwMDgwMDAwMDAwMDNDMDIwODAwOEM0MjMxMDBGMwotOjEwRENBMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIzMTAwMEEwMDBFODEzMAotOjEwRENCMDAwMDAwMDAwMDA4RjYyMDA0MDAyMjIxMDIzMTg0MDAwMDk3QgotOjEwRENDMDAwMjQwMjAwMEMzQzAyMDgwMDhDNDIzMTAwMzI3MzAwRkMzQwotOjEwRENEMDAwMDAwMEE4MjEyNDQyMDAwMTNDMDEwODAwQUMyMjMxMDBEMAotOjEwRENFMDAwMjQwMjAwMENBRkEyMDAzMDhGNjIwMDQwMDA1MTE4MjNDNAotOjEwRENGMDAwMTg2MDAwMEQwMkEzMTAyQTE0NDAwMTAzMDAwMDAwMDA2OAotOjEwREQwMDAwMTQ3NTAwMDYwMkEzMTAyMzNBNjIwMDAxMzA0MjAwMDE5QwotOjEwREQxMDAwMTQ0MDAwRkQwMDAwMDAwMDAyQTMxMDIzMDIyMzg4MjEwQwotOjEwREQyMDAwMEEwMDBEOEEzMDU1RkZGRjAwMDAxODIxMzI2MjAwMDIwMAotOjEwREQzMDAwMTA0MDAwMUEzMjYyMDAxMDkzNjIwMDNFMzA0MjAwNDBGMAotOjEwREQ0MDAwNTA0MDAwMTE4RkMyMDAwNDBFMDAxMUIzMDIwMDIwMjFDOAotOjEwREQ1MDAwMjQwMjAwMThBMzYyMDAzRjkzNjIwMDA1MjQwM0ZGRkUyMwotOjEwREQ2MDAwMDIwMDIwMjEwMDQzMTAyNDBFMDAxMUJDQTM2MjAwMDUxNAotOjEwREQ3MDAwMjQwNDAwMzkwMDAwMjgyMTBFMDAxMzI0MjQwNjAwMTg3MgotOjEwREQ4MDAwMEEwMDBFOEUyNDAyMDAwMTI0MDQwMDE3MDA0MEY4MDk0NgotOjEwREQ5MDAwMDAwMDAwMDAwQTAwMEU4RTI0MDIwMDAxMTA0MDAwRTU4MQotOjEwRERBMDAwMDAwMDAwMDA4RjY0MDA0QzhGNjIwMDU0MDI4MjEwMjMzOAotOjEwRERCMDAwMUM0MDAwRTAwMjg0MTAyMzA0NDIwMDAxMDA4MEEwMjFFNgotOjEwRERDMDAwQUZBMzAwMThBRkIxMDAxMEFGQjUwMDE0OTM0MjAxMjAwQgotOjEwREREMDAwOEY2NjAwNDA5NzY0MDAzQzMwNDIwMEZGMDM0MjI4MjFEOAotOjEwRERFMDAwOEZBMjAwM0MwMEEzMjgyMThGQTMwMDMwMzA4NEZGRkZDNgotOjEwRERGMDAwMDA0NDIwMkI4RkMyMDAwMDAwNjQxODI1MjRBNTQwMDA5OQotOjEwREUwMDAwQUZBNTAwMjBBRkE2MDAyOEFGQTMwMDMwQUZBNjAwMjQyNgotOjEwREUxMDAwQUZBMDAwMkNBRkI0MDAzNDAwNDBGODA5MjdBNDAwMTBENAotOjEwREUyMDAwOEZBMjAwMzAzMDQyMDAwMjU0NDAwMDAxMzI3MzAwRkVFNQotOjEwREUzMDAwOTM2MjAwM0UzMDQyMDA0MDEwNDAwMDM3OEZBMzAwMTQzMAotOjEwREU0MDAwOEY2MjAwNTQxNjgyMDAxQTMyNjIwMDAxMjQwMjAwMTQwQwotOjEwREU1MDAwMTI0MjAwMTAyQTQyMDAxNTEwNDAwMDA2MjQwMjAwMTY0QgotOjEwREU2MDAwMjQwMjAwMEMxMjQyMDAwNzMyNjIwMDAxMEEwMDBERUI4RQotOjEwREU3MDAwMDAwMDAwMDAxMjQyMDAwNTMyNjIwMDAxMEEwMDBERUJCMgotOjEwREU4MDAwMDAwMDAwMDAwQTAwMERFNjI0MTcwMDBFMEEwMDBERTY0RgotOjEwREU5MDAwMjQxNzAwMTAwQTAwMERFQTI0MTcwMDEyOTM2MjAwMjNEMQotOjEwREVBMDAwMjQwM0ZGQkQwMDQzMTAyNEEzNjIwMDIzMzI2MjAwMDE1QgotOjEwREVCMDAwMTA0MDAwMTk4RkEzMDAxNDI0MDIwMDBDMTI0MjAwMEUxRgotOjEwREVDMDAwMkE0MjAwMEQxMDQwMDAwNjI0MDIwMDBFMjQwMjAwMEExRgotOjEwREVEMDAwMTI0MjAwMDc4RkEyMDAyNDBBMDAwRTAzMjQ0MjAwMDExMAotOjEwREVFMDAwMTI0MjAwMDg4RkEyMDAyNDBBMDAwRTAzMjQ0MjAwMDFGRgotOjEwREVGMDAwMEEwMDBFMDEyNDE3MDAwODI0MDIwMDBFMTZFMjAwMDI5OAotOjEwREYwMDAwMjQxNzAwMTYyNDE3MDAxMDhGQTIwMDI0MjQ0MjAwMDFCOQotOjEwREYxMDAwQUZBMjAwMjQ4RkEzMDAxNDhGQTIwMDI0OEY3NjAwNDBBQwotOjEwREYyMDAwMDA0MzEwMjFBRjYyMDA0MDhGQTIwMDNDOTM2NDAwMzY5MgotOjEwREYzMDAwOEY2MzAwNDAwMjgyOTAyMTM0MDJGRkZGMDA4MjEwMDRCMAotOjEwREY0MDAwMDA2MjE4MjFBRjYzMDA0ODhGQTYwMDMwMzBDMjAwMDg3RAotOjEwREY1MDAwMTA0MDAwMEUwMDAwMDAwMDhGNjIwMDU4MTY0MjAwMDRCRQotOjEwREY2MDAwMzBDNjAwRkY5NzQyMDExQTUwNDAwMDAxMzRDNjAwMTAyRAotOjEwREY3MDAwOTNDNTAwMDg4RkE3MDAzNDAyMDAyMDIxMDAwNTJCMDA2NAotOjEwREY4MDAwMzRBNTAwODAwRTAwMEM4RDMwQTVGMDgwOEY2MjAwNDAxQgotOjEwREY5MDAwMDA1NjEwMjMxODQwMDAxNzhGQTIwMDE4M0MwMjA4MDBGQQotOjEwREZBMDAwOEM0MjMxOTgzMDQyMDAxMDEwNDAwMDA5MjQwMjAwMDFEOAotOjEwREZCMDAwOTc2MjAwNjgxNDQwMDAwNjI0MDIwMDAxQTc2MjAwNjgwRQotOjEwREZDMDAwOTc0MjAwN0EyNDQyMDAwQTBBMDAwRTQ3QTc2MjAwMTIxNAotOjEwREZEMDAwQTc2MjAwMTIwRTAwMTFCMzAyMDAyMDIxOTM2MjAwN0Q5RgotOjEwREZFMDAwMjQwMzAwMDEwMjAwMjAyMTM0NDIwMDAxMEEwMDBFNDVGMgotOjEwREZGMDAwQUZBMzAwMzgxODQwMDAwQTAwMDAwMDAwMEUwMDExQjM2MwotOjEwRTAwMDAwMDIwMDIwMjE5MzYyMDA3RDI0MDMwMDAxMDIwMDIwMjFGMAotOjEwRTAxMDAwQUZBMzAwMzgzNDQyMDAwNDBFMDAxMUJDQTM2MjAwN0Q5RgotOjEwRTAyMDAwOTM2MjAwM0UzMDQyMDA0MDE0NDAwMDBDMzI2MjAwMDExNgotOjEwRTAzMDAwMTA0MDAwMEEwMDAwMDAwMDhGNjMwMDQwOEZDMjAwMDRGRgotOjEwRTA0MDAwMjQwNDAwMTgyNDYzMDAwMTAwNDBGODA5QUY2MzAwNDA3NQotOjEwRTA1MDAwOEZBMjAwMzAwQTAwMEU4RTMwNDIwMDA0OEY2MjAwNThGQQotOjEwRTA2MDAwMTA1MjAwMTAwMDAwMDAwMDhGNjIwMDE4MDIyMjEwMjNERQotOjEwRTA3MDAwMUM0MDAwMDgyNDAyMDAwMThGNjIwMDE4MTYyMjAwMDlDQgotOjEwRTA4MDAwMDAwMDAwMDA4RjYyMDAxQzAyODIxMDIzMDQ0MDAwMDU4MwotOjEwRTA5MDAwMjQwMjAwMDFBRjcyMDA1OEFGQTIwMDM4QUY3MTAwMTgxRgotOjEwRTBBMDAwQUY3NDAwMUMxMkUwMDAwQjhGQTMwMDM4MEUwMDExQjNGOAotOjEwRTBCMDAwMDIwMDIwMjFBMzc3MDAzRjBFMDAxMUJDMDIwMDIwMjFBNgotOjEwRTBDMDAwMDJFMDMwMjEyNDA0MDAzNzBFMDAxMzI0MDAwMDI4MjEzMAotOjEwRTBEMDAwOEZBMzAwMzgxMDYwMDAwMzAwMDAwMDAwMEUwMDBDOUJBRQotOjEwRTBFMDAwMDIwMDIwMjExMkEwMDAwNTAwMDAxODIxOEZBMjAwMzA5QwotOjEwRTBGMDAwMzA0MjAwMDQ1MDQwMDAxMTAwNjAxMDIxMjQwMzAwMDE1MAotOjEwRTEwMDAwMEEwMDBFOEUwMDYwMTAyMTBFMDAxMUIzMDIwMDIwMjFDMwotOjEwRTExMDAwOTM2MjAwN0QwMjAwMjAyMTM0NDIwMDA0MEUwMDExQkNGNQotOjEwRTEyMDAwQTM2MjAwN0QwRTAwMEM5QjAyMDAyMDIxMEEwMDBFOEVDRgotOjEwRTEzMDAwMjQwMjAwMDFBRjQwMDA0NDI0MDIwMDAxOEZCRjAwNjRBQwotOjEwRTE0MDAwOEZCRTAwNjA4RkI3MDA1QzhGQjYwMDU4OEZCNTAwNTQ0QgotOjEwRTE1MDAwOEZCNDAwNTA4RkIzMDA0QzhGQjIwMDQ4OEZCMTAwNDQ5MQotOjEwRTE2MDAwOEZCMDAwNDAwM0UwMDAwODI3QkQwMDY4OEM4NzAwMDRFMgotOjEwRTE3MDAwOEM4NjAwMDAwMDAwMTAyMTAwRTUzODIxMDBFNTI4MkJFNgotOjEwRTE4MDAwMDBDMjMwMjEwMEM1MzAyMUFDODcwMDA0MDNFMDAwMDg0NAotOjEwRTE5MDAwQUM4NjAwMDA4RjQyMDFCODA0NDBGRkZFMjQwMjA4MDA1NAotOjEwRTFBMDAwQUY0MjAxQjgwM0UwMDAwODAwMDAwMDAwM0MwMjAwMDg5NAotOjEwRTFCMDAwMDM0MjI4MjE5NEEyMDA0ODMwODRGRkZGMTA0MDAwMUIzNgotOjEwRTFDMDAwMjQ4NDAwMTI5NEEyMDA0ODMwNDJGRkZGMDA0NDEwMkEyOQotOjEwRTFEMDAwMTA0MDAwMTcyNDAyMDAwMzI0MDIwMDFBOTM0MzAxMjA3OAotOjEwRTFFMDAwQTM0MjAxOEI4RjgyMDAwODMwNjMwMEZGMzA0MjQwMDA2MQotOjEwRTFGMDAwMTA0MDAwMDkyNDYzRkZGRTk0QTIwMDQ4MzA0MkZGRkY1NAotOjEwRTIwMDAwMDA0MzEwMkIxNDQwMDAwNThGODIwMDE0QTc0MzAxOTQ5MwotOjEwRTIxMDAwMEEwMDBFQzgzNDQyMDAwMThGODIwMDE0MjQwM0ZGRkU1RQotOjEwRTIyMDAwMDA0MzEwMjQwM0UwMDAwOEFGODIwMDE0MjQwMjAwMDMxRQotOjEwRTIzMDAwMDNFMDAwMDhBMzQyMDE4QjI3QkRGRkUwQUZCMjAwMTg0NgotOjEwRTI0MDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDMzBCMUZGRkY4MgotOjEwRTI1MDAwMzBEMEZGRkYzMEYyRkZGRjhGNDIwMUI4MDQ0MEZGRkVENQotOjEwRTI2MDAwMDAwMDAwMDBBRjQ0MDE4MEFGNDQwMDIwMEUwMDBFQUE2MQotOjEwRTI3MDAwMDIwMDIwMjE4RjgzMDAwODhGODQwMDE0QTc1MTAxOEM5NQotOjEwRTI4MDAwQTc1MDAxOEVBNzQzMDE5MDhGODMwMDA0MzA4MjgwMDA0NQotOjEwRTI5MDAwQUY0MzAxQThBNzUyMDE4ODEwNDAwMDBFOEY4MjAwMTRERQotOjEwRTJBMDAwOTM0MjAxMTYzMDQyMDBGQzI0NDIwMDA0MDA1QTEwMjExRgotOjEwRTJCMDAwOEM0MjQwMDAzMDQyRkZGRjE0NDAwMDA2OEY4MjAwMTQ2MQotOjEwRTJDMDAwM0MwMkZGRkYzNDQyN0ZGRjAwODIxMDI0QUY4MjAwMTQyMwotOjEwRTJEMDAwOEY4MjAwMTQyNDAzQkZGRjAwNDMxMDI0QTc0MjAxQTYyRAotOjEwRTJFMDAwOTc0MzAxMEM4RjQyMDEwNDAwMDMxQzAwMzA0MkZGRkZFMgotOjEwRTJGMDAwMDA2MjE4MjVBRjQzMDFBQzNDMDIxMDAwQUY0MjAxQjhFOAotOjEwRTMwMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBBNwotOjEwRTMxMDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkUwQUZCMjAwMThEMgotOjEwRTMyMDAwMzBEMkZGRkZBRjQ0MDE4MEFGNDQwMDIwMDI0MDIwMjFFMwotOjEwRTMzMDAwQUZCMTAwMTRBRkIwMDAxMDMwRjFGRkZGQUZCRjAwMUM1MQotOjEwRTM0MDAwMEUwMDBFQUEzMEIwRkZGRjhGODMwMDE0MjQwMkJGRkYxRgotOjEwRTM1MDAwQTc1MDAxOEMwMDYyMTgyNDhGODIwMDA4QTc1MjAxOEVGQQotOjEwRTM2MDAwQTc1MTAxODhBNzQzMDFBNkE3NDIwMTkwM0MwMjEwMDBEMwotOjEwRTM3MDAwQUY0MjAxQjg4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTREQwotOjEwRTM4MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMjc0MzAxODA2NAotOjEwRTM5MDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIyMDAwQTQ2MjAwMDg1RQotOjEwRTNBMDAwMjQwMjAwMDJBMDYyMDAwQkE0NjAwMDEwM0MwMjEwMDBENgotOjEwRTNCMDAwQUY0MjAxQjgwM0UwMDAwODAwMDAwMDAwOEY0NzAwNzA4MgotOjEwRTNDMDAwOTM0MjAxMTI4RjgzMDAwODI3QkRGRkYwMzA0MjAwRkYwNwotOjEwRTNEMDAwMDAwMjI4ODIzMDYyMDEwMDAwMDAzMDIxMTA0MDAwNDMxQQotOjEwRTNFMDAwMjRBNDAwMDMzMDYyNDAwMDEwNDAwMDEwMzA2MjIwMDA3RQotOjEwRTNGMDAwMDAwNDEwODAwMDVBMTAyMThDNDM0MDAwMjRBNDAwMDQyMwotOjEwRTQwMDAwMDAwNDEwODBBRkEzMDAwMDAwNUExMDIxOEM0MjQwMDA4RAotOjEwRTQxMDAwQUZBMjAwMDQ5MzQyMDExNjMwNDIwMEZDMDA1QTEwMjFDMgotOjEwRTQyMDAwOEM0MjQwMDAwQTAwMEY1NkFGQTIwMDA4MTA0MDAwMkY5NwotOjEwRTQzMDAwMDAwMDMwMjEwMDA0MTA4MDAwNUExMDIxOEM0MzQwMDA1RAotOjEwRTQ0MDAwMjRBNDAwMDQwMDA0MTA4MEFGQTMwMDAwMDA1QTEwMjE4RgotOjEwRTQ1MDAwOEM0MjQwMDBBRkEwMDAwOEFGQTIwMDA0OEZBODAwMDhDMwotOjEwRTQ2MDAwMDAwMDMwMjEwMDAwMjAyMTI0MEEwMDA4M0MwOTA4MDA5NwotOjEwRTQ3MDAwMjUyOTAxMDAwM0E0MTAyMTE0OEEwMDAzMDAwNDJBMDBBNgotOjEwRTQ4MDAwMTEwMDAwMEEwMDAwMDAwMDkwNDIwMDAwMjQ4NDAwMDFGNgotOjEwRTQ5MDAwMkM4MzAwMEMwMEEyMTAyMTAwMDIxMDgwMDA0OTEwMjFFMgotOjEwRTRBMDAwOEM0MjAwMDAxNDYwRkZGMzAwQzIzMDI2M0MwNDA4MDBEOAotOjEwRTRCMDAwOEM4NDMxMDQ4RjQyMDA3MDJDODMwMDIwMTA2MDAwMDk4RQotOjEwRTRDMDAwMDA0NzM4MjMzQzAzMDgwMDI0NjMzMTA4MDAwNDEwODAwRgotOjEwRTREMDAwMDA0MzEwMjEyNDgzMDAwMUFDNDcwMDAwM0MwMTA4MDBFOAotOjEwRTRFMDAwQUMyMzMxMDRBRjg2MDAwNDI0MDYwMDAxMDBDMDEwMjFEMwotOjEwRTRGMDAwMDNFMDAwMDgyN0JEMDAxMDNDMDIwODAwOEM0MjAwMzhGMQotOjEwRTUwMDAwMjdCREZGRDBBRkI1MDAyNEFGQjMwMDFDQUZCRjAwMjhCQwotOjEwRTUxMDAwQUZCNDAwMjBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAxQwotOjEwRTUyMDAwM0MxNTA4MDAyNkI1MDAzODE0NDAwMDAyMjQ1M0ZGRkZCNAotOjEwRTUzMDAwMDAwMDk4MjE4Rjg0MDAwODMwODI0MDAwMTA0MDAwMEFCQgotOjEwRTU0MDAwMzA4MjgwMDAzQzAyMDAyMDAwODIxMDI0NTA0MDAwMDZFRgotOjEwRTU1MDAwMzA4MjgwMDA4RjgyMDAxNDI0MDNCRkZGMDA4MzE4MjRDMAotOjEwRTU2MDAwMEEwMDBGQTIzNDQyMTAwMDEwNDAwMDBBM0MwMjAwMjBCMgotOjEwRTU3MDAwMDA4MjEwMjQxMDQwMDAwNzhGODIwMDE0M0MwM0ZGRkYyQwotOjEwRTU4MDAwMzQ2MzdGRkYwMDgzMTgyNDM0NDI4MDAwQUY4MjAwMTQ3QwotOjEwRTU5MDAwQUY4MzAwMDgwRTAwMEYyRTAwMDAwMDAwMTQ0MDAwMDg5QQotOjEwRTVBMDAwOEY4NDAwMDg5NzQzMDExRTk3NDIwMTFDMzA2M0ZGRkZEMAotOjEwRTVCMDAwMDAwMjE0MDAwMDYyMTgyNUFGODMwMDA0OEY4NDAwMDg1NQotOjEwRTVDMDAwOTc0MjAxMEMzMDgzMTAwMDEwNjAwMDExMzA0NkZGRkZBRAotOjEwRTVEMDAwMzA4MjAwMjAxNDQwMDAwRjI0MTIwMDA1M0MwMjEwMDA3RAotOjEwRTVFMDAwMDA4MjEwMjQxMDQwMDAwQjI0MTIwMDAxM0MwMzBFMDA5NgotOjEwRTVGMDAwM0MwMjBERkYwMDgzMTgyNDM0NDJGRkZGMDA0MzEwMkIyMAotOjEwRTYwMDAwMTA0MDAwMDQwMDAwMDAwMDBBMDAwRkM0MjQxMjAwMDU5RQotOjEwRTYxMDAwMjQxMjAwMDEzQzA1MDgwMDhDQTUwMDM0NTRBMDAwMTkwOAotOjEwRTYyMDAwOEY4NDAwMDg4RjgyMDAxQzU0NDAwMDE2OEY4NDAwMDhERAotOjEwRTYzMDAwOEY4MjAwMTQzMDQyNDAwMDU0NDAwMDEyOEY4NDAwMDg0MgotOjEwRTY0MDAwM0MwMjFGMDEwMDgyMTAyNDNDMDMxMDAwMTQ0MzAwMEQwMwotOjEwRTY1MDAwOEY4NDAwMDgzMEMyMDIwMDE0NDAwMDBCM0MwMjAwMDEwRAotOjEwRTY2MDAwOTc0NjAxMEUzNjQ3MDAwMjAwMDAyMDIxMjRDNjAwMDQxMAotOjEwRTY3MDAwMzBDNkZGRkYwRTAwMEYwNTI0MDUwMDAyMEEwMDEwOERCMgotOjEwRTY4MDAwOEZCRjAwMjgzQzAyMDAwMTAwODIxMDI0MTA0MDAwMENDMwotOjEwRTY5MDAwOEY4MzAwMTQzQzAyMDgwMDhDNDIwMEQ4OTc0NjAxMEU3QwotOjEwRTZBMDAwMjQwNDAwODAyNDQyMDAwMTMwQzZGRkZGMjQwNTAwMDIzQwotOjEwRTZCMDAwM0MwMTA4MDBBQzIyMDBEODBBMDAxMDhBMjQwNzAwMDM5RAotOjEwRTZDMDAwMzA2MjQwMDAxMDQwMDAwNjNDMDIxMDAwM0MwMjBGMDA4NwotOjEwRTZEMDAwMDA4MjEwMjQ1MDQwMDAwMTkzNDIwMTE2M0MwMjEwMDBCOQotOjEwRTZFMDAwMDA4MjEwMjQxMDQwMDA0NDAwMDAwMDAwM0MwMjA4MDA5QQotOjEwRTZGMDAwOEM0MjAwMzAxMDQwMDAwQzMwNjI0MDAwMTA0MDAwMEE5NAotOjEwRTcwMDAwM0MwMzBGMDAwMDgzMTgyNDNDMDIwMTAwMDA0MzEwMkIzRgotOjEwRTcxMDAwMTQ0MDAwMDUwMDAwMDAwMDk3NDYwMTBFMzY0NzAwMDIzNQotOjEwRTcyMDAwMEEwMDEwODcyNDA0MDA4MDEwQTAwMDBEMzA4MjAxMDAzMAotOjEwRTczMDAwMTA0MDAwMEIzQzAyMEYwMDAwODIxMDI0M0MwMzAyMDAzQQotOjEwRTc0MDAwMTA0MzAwMDc4RjgyMDAwNDAwNTMxMDI0MDA1NTEwMjE0RAotOjEwRTc1MDAwOTA0MjAwMDQyNDQyMDAwNDBBMDAxMDNBMDAwMjIxQzA0MgotOjEwRTc2MDAwMDAwMDAwMDA4Rjg2MDAwODNDMDUwODAwOENBNTAwRDA0MgotOjEwRTc3MDAwMDAwNjE2MDIzMDUwMDAwRjM4QTIwMDAxMkM0MjAwMDFBMgotOjEwRTc4MDAwMkUwMzAwMEMwMDQzMTAyNDE0NDAwMDE4MDAxMDIxQzA3OAotOjEwRTc5MDAwMjYwMkZGRkMyQzQyMDAwNDU0NDAwMDE0MDAwMDIwMjFGQgotOjEwRTdBMDAwMzhBMjAwMDIyQzQyMDAwMTAwNDMxMDI0MTA0MDAwMDM1NAotOjEwRTdCMDAwMDAwNjEyNDIwQTAwMTAzQTAwMDAyMDIxMDAxMDE4MkIxNwotOjEwRTdDMDAwMDA0MzEwMjQ1MDQwMDAwOTAwMTAyMUMwOTc0NjAxMEU1QwotOjEwRTdEMDAwMDAwMDIwMjEyNDA1MDAwMjI0QzYwMDA0MzBDNkZGRkZFQgotOjEwRTdFMDAwMEUwMDBFQ0QzMjQ3RkZGQjAwMTAyMUMwOTc0NjAxMEVGMAotOjEwRTdGMDAwMEEwMDEwODczNjQ3MDAwMjhGNDI0MDAwM0MxMTA4MDA5MwotOjEwRTgwMDAwOEUzMTAwMjQzMDQyMDEwMDEwNDAwMDQwMzIyMjAwMDFDRAotOjEwRTgxMDAwMDIyMDgwMjExMEEwMDAxNzMyNTQwMDA0MzA4MjAxMDAzMQotOjEwRTgyMDAwMTA0MDAwMTUyNDAyMDAwMTNDMDIwRjAwMDA4MjEwMjQ1OQotOjEwRTgzMDAwM0MwMzAyMDAxMDQzMDAwRjhGODIwMDA0OTc0NjAxMEUzNAotOjEwRTg0MDAwMDI0MDM4MjEwMDUzMTAyNDAwNTUxMDIxOTA0NDAwMDQ0OAotOjEwRTg1MDAwMjRDNjAwMDQzMEM2RkZGRjI0ODQwMDA0MDAwNDIxQzA0NQotOjEwRTg2MDAwMEUwMDBFQ0QyNDA1MDAwMjI0MDJGRkZFMDIyMjgwMjRBOQotOjEwRTg3MDAwMzI1MkZGRkIyNDAyMDAwMTE2MDIwMDA3MzIwMjAwMDE5RgotOjEwRTg4MDAwMzI0MjAwMDQ1MDQwMDAwMTM2NTIwMDAyOTc0NjAxMEUwOQotOjEwRTg5MDAwMEEwMDEwODYwMjQwMzgyMTEwNDAwMDBBMzIwMjAwMDRBQgotOjEwRThBMDAwOTc0NjAxMEUwMjQwMzgyMTAwMDAyMDIxMjRDNjAwMDRCMgotOjEwRThCMDAwMzBDNkZGRkYwRTAwMEVDRDI0MDUwMDAyMzI1MkZGRkJEMgotOjEwRThDMDAwMzIwMjAwMDQxMDQwMDAwQjhGODIwMDA4MzA0MjA4MDAyMgotOjEwRThEMDAwMTA0MDAwMDgwMDAwMDAwMDk3NDYwMTBFMDI0MDM4MjE1OQotOjEwRThFMDAwMjQwNDAxMDAyNEM2MDAwNDMwQzZGRkZGMEUwMDBFQ0QzNAotOjEwRThGMDAwMjQwNTAwMDI1NjgwMDAxMDhGQkYwMDI4MEUwMDBGMjI1MgotOjEwRTkwMDAwMDAwMDAwMDAwQTAwMTA4RDhGQkYwMDI4MTA0MDAwMEE5MAotOjEwRTkxMDAwOEZCRjAwMjg5NzQ2MDEwRTM2NDcwMDAyMDAwMDIwMjFENQotOjEwRTkyMDAwMjRDNjAwMDQzMEM2RkZGRjI0MDUwMDAyMEUwMDBFQ0RGMQotOjEwRTkzMDAwMDAwMDAwMDA4RkJGMDAyODhGQjUwMDI0OEZCNDAwMjA5NgotOjEwRTk0MDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA2RAotOjEwRTk1MDAwMDAwMDEwMjEwM0UwMDAwODI3QkQwMDMwMjc0MzAxODA5QwotOjEwRTk2MDAwOEY0MjAxQjgwNDQwRkZGRTAwMDAwMDAwOEY0MjAxNDhDMgotOjEwRTk3MDAwMDAwMjE0MDJBNDYyMDAwODI0MDIwMDAyQTA2MjAwMEIzQwotOjEwRTk4MDAwOEY0MjAxNDhBNDYyMDAxMDhGNDIwMTQ0QUM2MjAwMjQwRgotOjEwRTk5MDAwM0MwMjEwMDAwM0UwMDAwOEFGNDIwMUI4MjdCREZGRThDOQotOjEwRTlBMDAwQUZCMDAwMTAzQzA0NjAwQ0FGQkYwMDE0OEM4MjUwMDA2QwotOjEwRTlCMDAwMjQwM0ZGN0YzQzFBODAwMDAwNDMxMDI0MzQ0MjM4MENBQgotOjEwRTlDMDAwQUM4MjUwMDAyNDAyMDAwMzNDMTA2MDAwQUY0MjAwMDhGQgotOjEwRTlEMDAwOEUwMjA4MDgzQzFCODAwODNDMDEwODAwQUMyMDAwMjA4NwotOjEwRTlFMDAwMzA0MkZGRjAzODQyMDAxMDJDNDIwMDAxMEUwMDFCMzk2QgotOjEwRTlGMDAwQUY4MjAwMDAzQzA0RkZGRjNDMDIwNDAwMzQ4MzA4MDZBMQotOjEwRUEwMDAwMzQ0MjAwMENBRTAyMTk0OEFFMDMxOTRDM0MwNTYwMTZBNgotOjEwRUExMDAwOEUwMjE5ODA4Q0EzMDAwMDM0NDIwMjAwMDA2NDE4MjQ4NgotOjEwRUEyMDAwQUUwMjE5ODAzQzAyNTM1MzE0NjIwMDAzMzRBNDdDMDBFQwotOjEwRUEzMDAwOENBMjAwMDQwMDUwMjAyMThDODIwMDdDOEM4MzAwNzgwMgotOjEwRUE0MDAwOEZCRjAwMTQ4RkIwMDAxMDI3QkQwMDE4QUY4MjAwMThEMAotOjEwRUE1MDAwMDNFMDAwMDhBRjgzMDAxMDI3QkRGRkU4QUZCRjAwMTA0MAotOjEwRUE2MDAwOEY0MzQwMDAzNDAyRkZGRjNDMDQwODAwMjQ4NDAwRjA4MAotOjEwRUE3MDAwMTA2MjAwMDcwMDAwMDAwMDhGNDI0MDAwM0MwNDA4MDBDNAotOjEwRUE4MDAwMjQ4NDAwRTgzMDQyMDEwMDEwNDAwMDA5MDAwMDAwMDAyQQotOjEwRUE5MDAwOTc0NTAxMEUwRTAwMEU5QTMwQTVGRkZGOTc0NTAxMEUxNwotOjEwRUFBMDAwM0MwNDA4MDAyNDg0MzFDODBBMDAxMEZDOEZCRjAwMTAwOQotOjEwRUFCMDAwOEY0MzQwMDA4RjgyMDAxMDNDMDQwODAwMjQ4NDAwRTA1MwotOjEwRUFDMDAwMTQ2MjAwMEEwMDAwMDAwMDhGNDM0MDA0OEY4MjAwMTg4NwotOjEwRUFEMDAwMTQ2MjAwMDYwMDAwMDAwMDk3NDUwMTBFM0MwNDA4MDA4NwotOjEwRUFFMDAwMjQ4NDMxQjgwQTAwMTBGQzhGQkYwMDEwOTc0NTAxMEUzNgotOjEwRUFGMDAwOEZCRjAwMTAzMEE1RkZGRjBBMDAwRTlBMjdCRDAwMTgzNwotOjEwRUIwMDAwMjdCREZGRThBRkJGMDAxMDhGNDIwMTI4QUY0MjAwMjBCMQotOjEwRUIxMDAwOEY0MjAxMDQ4RjQzMDEwMEFGODIwMDA4MEUwMDBFQTQ1MwotOjEwRUIyMDAwQUY4MzAwMTQwRTAwMTBENTAwMDAwMDAwM0MwMjA4MDA2NgotOjEwRUIzMDAwOEM0MjAwQzAxMDQwMDAwODhGODQwMDA4M0MwMjA4MDA4RQotOjEwRUI0MDAwOEM0MjAwQzQyNDQyMDAwMTNDMDEwODAwQUMyMjAwQzRGNQotOjEwRUI1MDAwMEEwMDExMzUwMDAwMDAwMDNDMDIwMDEwMDA4MjEwMjQ2MQotOjEwRUI2MDAwMTQ0MDAwMEE4RjgzMDAxNDNDMDIwODAwOEM0MjAwMjBFRAotOjEwRUI3MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDIwMEUwMDBGN0Q2MQotOjEwRUI4MDAwMDAwMDIwMjEwQTAwMTEzMzAwMDAwMDAwMjQwMkJGRkYxMgotOjEwRUI5MDAwMDA2MjEwMjQxMDQwMDAwODAwMDAwMDAwMjQwMjg3RkZEQgotOjEwRUJBMDAwMDA2MjEwMjQxNDQwMDAwODNDMDIwMDYwMDA4MjEwMjQxRgotOjEwRUJCMDAwMTA0MDAwMDUwMDAwMDAwMDBFMDAwQ0M1MDAwMDAwMDAyMQotOjEwRUJDMDAwMEEwMDExMzMwMDAwMDAwMDBFMDAxMTlEMDAwMDAwMDAzQgotOjEwRUJEMDAwMTA0MDAwMDYzQzAyNDAwMDhGNDMwMTI0M0MwMjYwMjBBQwotOjEwRUJFMDAwQUM0MzAwMTQwMDAwMDAwMDNDMDI0MDAwQUY0MjAxMzg3QQotOjEwRUJGMDAwMDAwMDAwMDA4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMThEMAotOjEwRUMwMDAwMjdCREZGRThBRkJGMDAxMDhGNDIwMTQwM0MwNDQwMDAyOQotOjEwRUMxMDAwQUY0MjAwMjA4RjQzMDE0ODNDMDI3MDAwMDA2MjE4MjQ3QwotOjEwRUMyMDAwMTA2NDAwMTAwMDgzMTAyQjE0NDAwMDA2M0MwMjYwMDBBQQotOjEwRUMzMDAwM0MwMjIwMDAxMDYyMDAwNzAwMDAwMDAwMEEwMDExNUY4MwotOjEwRUM0MDAwM0MwMjQwMDAxMDYyMDAwQjNDMDI0MDAwMEEwMDExNUZEMQotOjEwRUM1MDAwMDAwMDAwMDAwRTAwMTA5NjAwMDAwMDAwMEEwMDExNUY4NgotOjEwRUM2MDAwM0MwMjQwMDAwRTAwMTFDMTAwMDAwMDAwMEEwMDExNUZDQwotOjEwRUM3MDAwM0MwMjQwMDAwRTAwMUI0NjAwMDAwMDAwM0MwMjQwMDAyOQotOjEwRUM4MDAwQUY0MjAxNzgwMDAwMDAwMDhGQkYwMDEwMDNFMDAwMDhEMQotOjEwRUM5MDAwMjdCRDAwMTgyN0JERkZFOEFGQkYwMDE0MEUwMDEwQTY2NwotOjEwRUNBMDAwQUZCMDAwMTAzQzAyODAwMDM0NDIwMDcwOEM0MzAwMDA4MgotOjEwRUNCMDAwMDA0MDM4MjFBRjgzMDAyMDAwNjAzMDIxOENFODAwMDA0NAotOjEwRUNDMDAwM0MwNTA4MDA4Q0E1MDBGQzNDMDQwODAwOEM4NDAwRjg3RQotOjEwRUNEMDAwMDEwNjMwMjMwMDAwMTAyMTAwQTYyODIxMDBBNjMwMkJCOQotOjEwRUNFMDAwMDA4MjIwMjEwMDg2MjAyMTNDMDEwODAwQUMyNTAwRkM4OAotOjEwRUNGMDAwM0MwMTA4MDBBQzI0MDBGODhGNTAwMDAwMzIwMjAwMDNGMQotOjEwRUQwMDAwMTA0MEZGRUUwMTAwMzAyMThDRTYwMDAwM0MwNTA4MDBCOQotOjEwRUQxMDAwOENBNTAwRkMzQzA0MDgwMDhDODQwMEY4MDBDODMwMjM1QgotOjEwRUQyMDAwMDBBNjI4MjEwMDAwMTAyMTAwQTYzMDJCMDA4MjIwMjFGRgotOjEwRUQzMDAwMDA4NjIwMjEzMjA3MDAwMTNDMDEwODAwQUMyNTAwRkNDMAotOjEwRUQ0MDAwQUY4ODAwMjAzQzAxMDgwMEFDMjQwMEY4MTBFMDAwMDQ2QgotOjEwRUQ1MDAwMzIwMjAwMDIwRTAwMTBGRjAwMDAwMDAwMzIwMjAwMDIyQQotOjEwRUQ2MDAwNTA0MEZGRDEzQzAyODAwMDBFMDAxMTNGMDAwMDAwMDAyNwotOjEwRUQ3MDAwMEEwMDExNjkzQzAyODAwMDhGNDIwMTAwMzA0MjAwM0VDRgotOjEwRUQ4MDAwMTQ0MDAwMTEyNDAyMDAwMUFGNDAwMDQ4OEY0MjAxMDBFRQotOjEwRUQ5MDAwMzA0MjA3QzAxMDQwMDAwNTAwMDAwMDAwQUY0MDAwNENBQQotOjEwRURBMDAwQUY0MDAwNTAwM0UwMDAwODI0MDIwMDAxQUY0MDAwNTRDRgotOjEwRURCMDAwQUY0MDAwNDA4RjQyMDEwMDMwNDIzODAwNTQ0MDAwMDExMwotOjEwRURDMDAwQUY0MDAwNDQyNDAyMDAwMTAzRTAwMDA4MDAwMDAwMDBGRQotOjEwRUREMDAwM0MwMjkwMDAzNDQyMDAwMTAwODIyMDI1QUY0NDAwMjAxNAotOjEwRURFMDAwOEY0MjAwMjAwNDQwRkZGRTAwMDAwMDAwMDNFMDAwMDgwNgotOjEwRURGMDAwMDAwMDAwMDAzQzAyODAwMDM0NDIwMDAxMDA4MjIwMjUxNwotOjEwRUUwMDAwMDNFMDAwMDhBRjQ0MDAyMDI3QkRGRkUwQUZCMjAwMThDOAotOjEwRUUxMDAwQUZCRjAwMUNBRkIxMDAxNEFGQjAwMDEwOEY1MDAxNDA2NQotOjEwRUUyMDAwOEY1MTAxNDgzQzAyODAwMDAwMTE5NDAyMDIyMjIwMjRFQwotOjEwRUUzMDAwMzI0MzAwRkYyNDAyMDAwRTEwNjIwMDhBMjg2MjAwMEY5NQotOjEwRUU0MDAwMTA0MDAwMTIyODYyMDAzNzI0MDIwMDA2MTA2MjAwM0JDNgotOjEwRUU1MDAwMjg2MjAwMDcxMDQwMDAwNzI0MDIwMDA5MTA2MDAwMUExMQotOjEwRUU2MDAwMjQwMjAwMDExMDYyMDAyNTAwMDAwMDAwMEEwMDEyNzY1MgotOjEwRUU3MDAwMDAwMDAwMDAxMDYyMDA3QjI0MDIwMDBCMTA2MjAwNUJBNwotOjEwRUU4MDAwMzIyMkZGRkYwQTAwMTI3NjAwMDAwMDAwMTA0MDAwMDg0NgotOjEwRUU5MDAwMjQwMjAwMzgyODYyMDAzNTEwNDAwMDgwMjQwMjAwMUY0MAotOjEwRUVBMDAwMTA2MjAwN0UwMDAwMDAwMDBBMDAxMjc2MDAwMDAwMDBFMAotOjEwRUVCMDAwMTA2MjAwN0EyNDAyMDA4MDEwNjIwMDQyMDAwMDAwMDAwQwotOjEwRUVDMDAwMEEwMDEyNzYwMDAwMDAwMDhGNDIwMUI4MDQ0MEZGRkVFNQotOjEwRUVEMDAwMjQwMjAwMDFBRjUwMDE4MEFGNDAwMTg0QTc1MjAxODg5NQotOjEwRUVFMDAwQTM0MjAxOEEyNDAyMDAwMkEzNDIwMThCQTc1MTAxOTA5MAotOjEwRUVGMDAwOEY0MjAxNDQwQTAwMTI3MUFGNDIwMUE0MTA4MDAwMEEzRgotOjEwRUYwMDAwMjQwMjAwMDIzQzAxMDgwMEEwMjI3MTc4M0MwMTA4MDBBNAotOjEwRUYxMDAwQUMzMDcxODA4RjQyMDE0NDNDMDEwODAwQUMyMjcxN0MwRQotOjEwRUYyMDAwMEEwMDEyNzg4RkJGMDAxQzhGNDIwMUI4MDQ0MEZGRkUxOAotOjEwRUYzMDAwMjQwMjAwMDIwQTAwMTI1QjAwMDAwMDAwOEY0MjAxQjhBOAotOjEwRUY0MDAwMDQ0MEZGRkUwMDAwMDAwMEFGNTAwMTgwM0MwMjA4MDBCQQotOjEwRUY1MDAwOTA0MjcxNzgxMDQwMDAwMzAwMDAxODIxM0MwMzA4MDAyMwotOjEwRUY2MDAwOEM2MzcxODBBRjQzMDE4NEE3NTIwMTg4M0MwMjA4MDA4MgotOjEwRUY3MDAwOTA0MjcxNzgwMDAwMTgyMTM0NDIwMDAxQTM0MjAxOEFCNgotOjEwRUY4MDAwMjQwMjAwMDJBMzQyMDE4QkE3NTEwMTkwOEY0MjAxNDQ0OQotOjEwRUY5MDAwQUY0MjAxQTQzQzAyMDgwMDkwNDI3MTc4MTA0MDAwMDM4NwotOjEwRUZBMDAwM0MwMjEwMDAzQzAzMDgwMDhDNjM3MTdDQUY0MzAxQTg1NQotOjEwRUZCMDAwQUY0MjAxQjgzQzAxMDgwMEEwMjA3MTc4MEEwMDEyNzgyNQotOjEwRUZDMDAwOEZCRjAwMUM4RjQyMDFCODA0NDBGRkZFMjQwMjAwMDJFNAotOjEwRUZEMDAwQTM0MjAxOEJBNzUyMDE4OEE3NTEwMTkwOEY0MjAxNDQ5RgotOjEwRUZFMDAwQTc0MjAxOTIwQTAwMTI3MzNDMDIxMDAwMTQ0MDAwMUQ1NwotOjEwRUZGMDAwMDAwMDAwMDA5MzYyMDAwNTMwNDIwMDA0MTQ0MDAwMzcxNgotOjEwRjAwMDAwMDAwMDAwMDAwRTAwMTFCMzAyMDAyMDIxOTM2MjAwMDVGMQotOjEwRjAxMDAwMDIwMDIwMjEzNDQyMDAwNDBFMDAxMUJDQTM2MjAwMDU0RQotOjEwRjAyMDAwOTM2MjAwMDUzMDQyMDAwNDE0NDAwMDAyMDAwMDAwMDAxQQotOjEwRjAzMDAwMDAwMDAwMEQ5MzYyMDAwMDI0MDMwMDIwMzA0MjAwRkYxNgotOjEwRjA0MDAwMTQ0MzAwMDgwMDAwMDAwMDhGNDIwMUI4MDQ0MEZGRkU5NgotOjEwRjA1MDAwMjQwMjAwMDVBRjUwMDE4MEEzNDIwMThCM0MwMjEwMDA0NgotOjEwRjA2MDAwQUY0MjAxQjg4RjQyMDFCODA0NDBGRkZFMjQwMjAwMDIwMwotOjEwRjA3MDAwQUY0MDAxODBBRjUwMDE4NEE3NTIwMTg4QTM0MjAxOEFBQQotOjEwRjA4MDAwQTM0MjAxOEJBNzUxMDE5MEFGNDAwMUE0OEY0MjAxNDREQwotOjEwRjA5MDAwQUY0MjAxQTgwQTAwMTI3MzNDMDIxMDAwOEY0MjAxQjg2RgotOjEwRjBBMDAwMDQ0MEZGRkUyNDAyMDAwMUFGNTAwMTgwQUY0MDAxODQwNAotOjEwRjBCMDAwQTc1MjAxODhBMzQyMDE4QTI0MDIwMDAyQTM0MjAxOEJDNQotOjEwRjBDMDAwQTc1MTAxOTBBRjQwMDFBNEFGNDAwMUE4M0MwMjEwMDAzRAotOjEwRjBEMDAwQUY0MjAxQjgwQTAwMTI3ODhGQkYwMDFDMDAwMDAwMEQ3QgotOjEwRjBFMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBCQQotOjEwRjBGMDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkU4QUZCRjAwMTBEOAotOjEwRjEwMDAwMEUwMDBFQTQwMDAwMDAwMEFGNDAwMTgwOEZCRjAwMTA3MQotOjEwRjExMDAwMDAwMDIwMjEwQTAwMEY3RDI3QkQwMDE4MzA4NEZGRkY2QQotOjEwRjEyMDAwMzBBNUZGRkYwMDAwMTgyMTEwODAwMDA3MDAwMDAwMDAzQwotOjEwRjEzMDAwMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjFDNgotOjEwRjE0MDAwMEEwMDEyODkwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjEzMQotOjEwRjE1MDAwMTBDMDAwMDYyNEM2RkZGRjhDQTIwMDAwMjRBNTAwMDRGNgotOjEwRjE2MDAwQUM4MjAwMDAwQTAwMTI5MzI0ODQwMDA0MDNFMDAwMDgyQgotOjEwRjE3MDAwMDAwMDAwMDAxMEEwMDAwODI0QTNGRkZGQUM4NjAwMDBFMAotOjEwRjE4MDAwMDAwMDAwMDAwMDAwMDAwMDI0MDJGRkZGMjQ2M0ZGRkZENgotOjEwRjE5MDAwMTQ2MkZGRkEyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDA2OQotOjEwRjFBMDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA0MAotOjEwRjFCMDAwQUZCRjAwMUM5NDgyMDAwQzAwQTA4ODIxMjQ5MDAwMTQ5MgotOjEwRjFDMDAwMDAwMjEzMDIwMDAyMTA4MDAwODI5MDIxMDAwMDMwMjExMgotOjEwRjFEMDAwMDBBMDIwMjEwRTAwMTI5QzI0MDUwMDA1MDIxMjEwMkIxNQotOjEwRjFFMDAwMTA0MDAwNTcwMDAwMTAyMTkyMDMwMDAwMkM2MjAwMDkxQgotOjEwRjFGMDAwNTA0MDAwNTE5MjAyMDAwMTAwMDMxMDgwM0MwMzA4MDBCRgotOjEwRjIwMDAwMjQ2MzcwREMwMDQzMTAyMThDNDIwMDAwMDA0MDAwMDhBMQotOjEwRjIxMDAwMDAwMDAwMDA5MjAzMDAwMTI0MDIwMDBDMTQ2MjAwNDg2OAotOjEwRjIyMDAwMjQwMjAwMDEwMjUwMTAyMzJDNDIwMDBBMTQ0MDAwMzYzMAotOjEwRjIzMDAwMjYxMDAwMDI4RTIyMDAwMDM0NDIwMTAwQUUyMjAwMDA5RgotOjEwRjI0MDAwOTIwMjAwMDA5MjAzMDAwMTkyMDQwMDAyOTIwNTAwMDM2MgotOjEwRjI1MDAwMDAwMzFDMDAwMDAyMTYwMDAwNDMxMDI1MDAwNDIyMDBEOQotOjEwRjI2MDAwMDA0NDEwMjUwMDQ1MTAyNTI2MTAwMDA0QUUyMjAwMDQ5RAotOjEwRjI3MDAwOTIwMjAwMDA5MjAzMDAwMTkyMDQwMDAyOTIwNTAwMDMzMgotOjEwRjI4MDAwMDAwMjE2MDAwMDAzMUMwMDAwNDMxMDI1MDAwNDIyMDBBOQotOjEwRjI5MDAwMDA0NDEwMjUwMDQ1MTAyNTI2MTAwMDA0MEEwMDEyQjY2RgotOjEwRjJBMDAwQUUyMjAwMDg5MjAzMDAwMTI0MDIwMDA0MTQ2MjAwMTYzQQotOjEwRjJCMDAwMjYxMDAwMDI5MjAyMDAwMDkyMDQwMDAxOEUyMzAwMDAzQQotOjEwRjJDMDAwMDAwMjEyMDAwMDQ0MTAyNTM0NjMwMDA0MjYxMDAwMDJERQotOjEwRjJEMDAwQUUyMjAwMEMwQTAwMTJCNkFFMjMwMDAwOTIwMzAwMDExOQotOjEwRjJFMDAwMjQwMjAwMDMxNDYyMDAwODI2MTAwMDAyOEUyMjAwMDA4RgotOjEwRjJGMDAwOTIwMzAwMDAyNjEwMDAwMTM0NDIwMDA4QTIyMzAwMTBFRgotOjEwRjMwMDAwMEEwMDEyQjZBRTIyMDAwMDBBMDAxMzBGMjQwMjAwMDEwOAotOjEwRjMxMDAwOTIwMzAwMDEyNDAyMDAwMjEwNjIwMDAyMjYwNDAwMDI4RgotOjEwRjMyMDAwMDI0MDIwMjEwQTAwMTJCNjAwODA4MDIxMEEwMDEyQjY5NQotOjEwRjMzMDAwMjYxMDAwMDE5MjAyMDAwMTBBMDAxMkI2MDIwMjgwMjE4QQotOjEwRjM0MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA1NwotOjEwRjM1MDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkU4QUZCRjAwMTQ3MQotOjEwRjM2MDAwQUZCMDAwMTAwRTAwMTFCMzAwODA4MDIxOTM2MjAwN0RDOQotOjEwRjM3MDAwMDIwMDIwMjEzNDQyMDAyMDBFMDAxMUJDQTM2MjAwN0Q1NwotOjEwRjM4MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEEwMDBDOUJEOAotOjEwRjM5MDAwMjdCRDAwMTgzMDgzMDBGRjMwQTUwMEZGMzBDNjAwRkZGNgotOjEwRjNBMDAwMjc0NzAxODA4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDBBMwotOjEwRjNCMDAwOEY0MjAxMjgzNDYzNDAwMEFDRTIwMDAwMjQwMjAwMDFDNwotOjEwRjNDMDAwQUNFMDAwMDRBNEUzMDAwOEEwRTIwMDBBMjQwMjAwMDI2QQotOjEwRjNEMDAwQTBFMjAwMEIzQzAyMTAwMEE0RTUwMDEwQUNFMDAwMjQwOQotOjEwRjNFMDAwQUNFMDAwMjhBNEU2MDAxMjAzRTAwMDA4QUY0MjAxQjgzOAotOjEwRjNGMDAwMjdCREZGRThBRkJGMDAxMDkzNjIwMDNGMjQwMzAwMTI1NwotOjEwRjQwMDAwMzA0MjAwRkYxMDQzMDAwRDAwODAzMDIxOEY2MjAwNDQyNQotOjEwRjQxMDAwMDA4MjEwMjMwNDQwMDAwQThGQkYwMDEwOEY2MjAwNDg1MgotOjEwRjQyMDAwMjQwNDAwMzkwMDAwMjgyMTAwQzIxMDIzMDQ0MTAwMDRGNAotOjEwRjQzMDAwMjQwNjAwMTIwRTAwMTMyNDAwMDAwMDAwOEZCRjAwMTBFRAotOjEwRjQ0MDAwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDE4MjdCREZGQzgwMwotOjEwRjQ1MDAwQUZCMTAwMkMwMEEwODgyMUFGQjIwMDMwMjdBNTAwMTA2QQotOjEwRjQ2MDAwMDA4MDkwMjEwMjIwMjAyMUFGQkYwMDM0MEUwMDEyQTc5RgotOjEwRjQ3MDAwQUZCMDAwMjgxMDQwMDAwOTAyNDAyMDIxOEUyMjAwMDg3MQotOjEwRjQ4MDAwQUY2MjAwODQwRTAwMTMxNUFGNjAwMDQwMjQwNDAwMzgwMgotOjEwRjQ5MDAwMjQwNTAwOEQwQTAwMTNEMTI0MDYwMDEyOTM2MjAwMzQ2MwotOjEwRjRBMDAwOTM2MzAwMzc4RjY0MDA4NDMwNDIwMEZGMzA2MzAwRkZCNQotOjEwRjRCMDAwMDA0MzI4MjEwMEE0MjAyQjEwODAwMDBCMDAwMDAwMDAzNgotOjEwRjRDMDAwOTc2MzAwM0M4RjYyMDA4NDMwNjNGRkZGMDA0NTEwMjM4OAotOjEwRjREMDAwMDA2MjE4MkIxNDYwMDAwNDAwMDAwMDAwOEY2MjAwODQ5QQotOjEwRjRFMDAwMEEwMDEzN0IwMDQ1ODAyMzk3NjIwMDNDMzA1MEZGRkZFOQotOjEwRjRGMDAwOEZBMzAwMTAzMDYyMDAwNDUwNDAwMDAzMkUwMjAyMTg1NwotOjEwRjUwMDAwOEZBMjAwMUMwMjAyMTAyQjE0NDAwMDA1MDIwMDIwMjFEMwotOjEwRjUxMDAwMzA2MjAwMDQxMDQwMDAwMjI0MDQwMjE4OEZBNDAwMUM3MgotOjEwRjUyMDAwMkM4MjAwODAxMDQwMDAwMjAwODA4MDIxMjQxMDAwODA4NgotOjEwRjUzMDAwMEUwMDExQjMwMjQwMjAyMTI0MDIwMDAxQUY2MjAwMEMzMgotOjEwRjU0MDAwOTM2MjAwM0UwMDEwMjA0MDMwNDIwMDdGQTM2MjAwM0VFNAotOjEwRjU1MDAwOEUyMjAwMDQyNDQyMDAwMUFGNjIwMDQwQTc3MDAwM0NFQwotOjEwRjU2MDAwOEY2MjAwNTA5NjIzMDAwRTAwNDMxMDIxQUY2MjAwNThCNgotOjEwRjU3MDAwOEY2MjAwNTAwMDQ0MTAyMUFGNjIwMDVDOEUyMjAwMDRCNAotOjEwRjU4MDAwQUY2MjAwMTg4RTIyMDAwOEFGNjIwMDFDOEZBMjAwMTAyQwotOjEwRjU5MDAwMzA0MjAwMDg1NDQwMDAwQTkzQTIwMDIwQTM2MDAwMzZDNQotOjEwRjVBMDAwOTM2MjAwMzYyNDAzRkZERkEzNjIwMDM1OTM2MjAwM0VCRQotOjEwRjVCMDAwMDA0MzEwMjRBMzYyMDAzRTBBMDAxM0IxOEUyMjAwMDgwQgotOjEwRjVDMDAwQTM2MjAwMzU4RTIyMDAwOEFGNjIwMDRDOEY2MjAwMjRENwotOjEwRjVEMDAwOEY2MzAwNDAwMDQzMTAyMUFGNjIwMDQ4OTM2MjAwMDAzNwotOjEwRjVFMDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDEyMjQwM0ZGODAyNAotOjEwRjVGMDAwM0MwMjA4MDA4QzQyMzFBMDAyNDIxMDIxMDA0MzEwMjQzQQotOjEwRjYwMDAwQUY0MjAwMjgzQzAyMDgwMDhDNDIzMUEwOEUyNDAwMDg0MgotOjEwRjYxMDAwM0MwMzAwMEMwMjQyMTAyMTMwNDIwMDdGMDM0MjEwMjFDMwotOjEwRjYyMDAwMDA0MzEwMjFBQzQ0MDBEODhFMjMwMDA4QUY4MjAwMjg4QwotOjEwRjYzMDAwQUM0MzAwREMwRTAwMTFCQzAyNDAyMDIxMjQwNDAwMzg0MQotOjEwRjY0MDAwMDAwMDI4MjEyNDA2MDAwQTBFMDAxMzI0MDAwMDAwMDBGOAotOjEwRjY1MDAwOEZCRjAwMzQ4RkIyMDAzMDhGQjEwMDJDOEZCMDAwMjhFNAotOjEwRjY2MDAwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDM4MjdCREZGRThBMQotOjEwRjY3MDAwQUZCRjAwMTA5MEM3MDAwRDAwQzAyODIxMzBFNjAwMTA3OQotOjEwRjY4MDAwMTBDMDAwMEEzMEUyMDAwNDhDQTMwMDA4OEY2MjAwNTQwRQotOjEwRjY5MDAwMTA2MjAwMDYzMEUyMDAwNDE0NDAwMDE3OEZCRjAwMTAxMwotOjEwRjZBMDAwMDAwMDIwMjEwQTAwMENCMjI3QkQwMDE4MTA0MDAwMERGOAotOjEwRjZCMDAwMzBFMzAwMTIxMEMwMDAxMDhGQkYwMDEwOENBMzAwMDhCMAotOjEwRjZDMDAwOEY2MjAwNTQxNDYyMDAwRDI0MDIwMDAxMjQwNDAwMzhFQgotOjEwRjZEMDAwMjQwNTAwOEQwRTAwMTMyNDI0MDYwMDEyMEEwMDEzRkREOQotOjEwRjZFMDAwOEZCRjAwMTAyNDAyMDAxMjE0NjIwMDAzOEZCRjAwMTBBRAotOjEwRjZGMDAwMEEwMDEzNTIyN0JEMDAxODI0MDIwMDAxMDNFMDAwMDg4RAotOjEwRjcwMDAwMjdCRDAwMTgyN0JERkZGODI3NDIwMTgwQUZBMjAwMDBFNwotOjEwRjcxMDAwMzA4QTAwRkY4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDA2NQotOjEwRjcyMDAwOEY0NjAxMjgzQzAyMDgwMDhDNDIzMUEwMjQwM0ZGODA1MAotOjEwRjczMDAwQUY4NjAwNTAwMEMyMTAyMTAwNDMxMDI0QUY0MjAwMjRDNQotOjEwRjc0MDAwM0MwMjA4MDA4QzQyMzFBMDhGQTkwMDAwOEZBODAwMDA2NQotOjEwRjc1MDAwMDBDMjEwMjEzMDQyMDA3RjAzNDIxODIxM0MwMjAwMEFGRgotOjEwRjc2MDAwMDA2MjE4MjE5NDY0MDBENDhGQTcwMDAwOEZBNTAwMDBDOAotOjEwRjc3MDAwMjQwMjAwMDJBRjgzMDAyOEEwQTIwMDBCOEZBMzAwMDA4OAotOjEwRjc4MDAwMzU0MjYwMDAzMDg0RkZGRkE0RTIwMDA4M0MwMjEwMDAxNAotOjEwRjc5MDAwQUQyNjAwMDBBRDA0MDAwNEFDNjAwMDI0MjdCRDAwMDhDNQotOjEwRjdBMDAwQUY0MjAxQjgwM0UwMDAwODI0MDIwMDAxOEM4MjAwMDQ4QgotOjEwRjdCMDAwOEY4MzAwMjgwMDQ1MTAyM0FDODIwMDA0OTA2MjAwNjMxMAotOjEwRjdDMDAwMzA0MjAwN0ZBMDYyMDA2MzhDODIwMDIwOTM4MzAwMzA2RgotOjEwRjdEMDAwOEY4NTAwMjgzNDQyMDAwMkFGODMwMDQ0QTc4MDAwNDI5NgotOjEwRjdFMDAwQUM4MjAwMjBBNEEwMDBFNDkwQTIwMDYzMjQwM0ZGQkYyOQotOjEwRjdGMDAwMDA0MzEwMjQwM0UwMDAwOEEwQTIwMDYzMjc0MzAxODAxNwotOjEwRjgwMDAwOEY0MjAxQjgwNDQwRkZGRThGODIwMDUwQUM2MjAwMDBCRQotOjEwRjgxMDAwOEY0MjAxMjRBQzYyMDAwNDI0MDI2MDgzQTQ2MjAwMDhDOQotOjEwRjgyMDAwMjQwMjAwMDJBMDYyMDAwQjNDMDIxMDAwMDNFMDAwMDg2QQotOjEwRjgzMDAwQUY0MjAxQjg4Rjg4MDA0NDkzODIwMDMwOEY4MzAwMjg0NAotOjEwRjg0MDAwM0MwNzA4MDAyNEU3NzU5NDAwNDgxMDIzMzA0MjAwRkY2RAotOjEwRjg1MDAwMzA0OTAwRkMyNDY1MDA4ODhGODYwMDQ4MzA0QTAwMDM0OAotOjEwRjg2MDAwMTEyMDAwMDkwMDAwMjAyMTI0ODIwMDA0OENBMzAwMDA0NAotOjEwRjg3MDAwMzA0NDAwRkYwMDg5MTAyQUFDRTMwMDAwMjRBNTAwMDRGNgotOjEwRjg4MDAwMTQ0MEZGRjkyNEU3MDAwNDExNDAwMDA5MDAwMDIwMjE4MgotOjEwRjg5MDAwMjQ4MjAwMDE5MEEzMDAwMDMwNDQwMEZGMDA4QTEwMkI1NgotOjEwRjhBMDAwQTBFMzAwMDAyNEE1MDAwMTE0NDBGRkY5MjRFNzAwMDFCMwotOjEwRjhCMDAwMzBDMjAwMDMxNDQwMDAwNDhGODUwMDQ0MzEwMjAwMDM2RAotOjEwRjhDMDAwMTA0MDAwMEQwMDAwMDAwMDEwQTAwMDA5MDAwMDIwMjFFMQotOjEwRjhEMDAwMjQ4MjAwMDE5MEMzMDAwMDMwNDQwMEZGMDA4NTEwMkJGQgotOjEwRjhFMDAwQTBFMzAwMDAyNEM2MDAwMTE0NDBGRkY5MjRFNzAwMDE1MgotOjEwRjhGMDAwMDNFMDAwMDgwMDAwMDAwMDExMDBGRkZEMDAwMDIwMjFDRgotOjEwRjkwMDAwMjQ4MjAwMDQ4Q0MzMDAwMDMwNDQwMEZGMDA4ODEwMkJDOAotOjEwRjkxMDAwQUNFMzAwMDAyNEM2MDAwNDE0NDBGRkY5MjRFNzAwMDQwRgotOjEwRjkyMDAwMDNFMDAwMDgwMDAwMDAwMDhGODMwMDQ0OTM4MjAwMzA1MQotOjEwRjkzMDAwMzBDNjAwRkYzMEE1MDBGRjAwNDMxMDIzMzA0MzAwRkYxNgotOjEwRjk0MDAwOEY4MjAwMjgwMDgwMzgyMTAwNDMxMDIxMTRDMDAwMDI1QgotOjEwRjk1MDAwMjQ0ODAwODgwMDgzMzgyMTMwRTIwMDAzMTQ0MDAwMDU2OQotOjEwRjk2MDAwMzBBMjAwMDMxNDQwMDAwMzMwNjIwMDAzMTA0MDAwMEQ3OQotOjEwRjk3MDAwMDAwMDAwMDAxMEEwMDAwOTAwMDAyMDIxMjQ4MjAwMDFFNgotOjEwRjk4MDAwOTBFMzAwMDAzMDQ0MDBGRjAwODUxMDJCQTEwMzAwMDAyRAotOjEwRjk5MDAwMjRFNzAwMDExNDQwRkZGOTI1MDgwMDAxMDNFMDAwMDhGNgotOjEwRjlBMDAwMDAwMDAwMDAxMEEwRkZGRDAwMDAyMDIxMjQ4MjAwMDRDMAotOjEwRjlCMDAwOENFMzAwMDAzMDQ0MDBGRjAwODUxMDJCQUQwMzAwMDBGNQotOjEwRjlDMDAwMjRFNzAwMDQxNDQwRkZGOTI1MDgwMDA0MDNFMDAwMDhDMAotOjEwRjlEMDAwMDAwMDAwMDAyN0JERkZGODI0MDJGRkZGQUZBMjAwMDBENwotOjEwRjlFMDAwMDA4MDM4MjEyNDA1MDAyRjNDMDkwODAwMjUyOTcxOTQ0NgotOjEwRjlGMDAwMjQwODAwRkYyNDA2RkZGRjkwRTIwMDAwMjRBM0ZGRkY3RAotOjEwRkEwMDAwMDAwNjIyMDIwMEMyMTAyNjMwNDIwMEZGMDAwMjEwODBEMQotOjEwRkExMDAwMDA0OTEwMjE4QzQyMDAwMDMwNjUwMEZGMjRFNzAwMDFGRQotOjEwRkEyMDAwMTRBOEZGRjUwMDgyMzAyNjAwMDYxMDI3QUZBMjAwMDRCQwotOjEwRkEzMDAwQUZBMjAwMDAwMDAwMjgyMTI3QTYwMDA0MDBDNTEwMjM2MwotOjEwRkE0MDAwOTA0NDAwMDMyNEEyMDAwMTAwQkQxODIxMzA0NTAwRkZBRQotOjEwRkE1MDAwMkNBMjAwMDQxNDQwRkZGOUEwNjQwMDAwOEZBMjAwMDA1MwotOjEwRkE2MDAwMDNFMDAwMDgyN0JEMDAwODAwODA0ODIxMzBBQUZGRkZGRQotOjEwRkE3MDAwMzBDNjAwRkYzMEU3RkZGRjI3NDgwMTgwOEY0MjAxQjgwMgotOjEwRkE4MDAwMDQ0MEZGRkU4RjgyMDA1MEFEMDIwMDAwOEY0MjAxMjQyRgotOjEwRkE5MDAwQUQwMjAwMDQ4RDIyMDAyMEE1MDcwMDA4QTEwMjAwMEE4MwotOjEwRkFBMDAwMjQwMjAwMTZBMTAyMDAwQjkzNDMwMTIwOEQyMjAwMDhCRQotOjEwRkFCMDAwOEQyNDAwMDQzMDYzMDBGRjAwNDMxMDIxOTc4MzAwNDIyRgotOjEwRkFDMDAwMDA0NDEwMjE4RDI1MDAyNDAwNDMxMDIzM0MwMzA4MDAyRQotOjEwRkFEMDAwOEM2MzMxQTA4Rjg0MDAyOEE1MDIwMDBDMjQ2MzAwRTgwOQotOjEwRkFFMDAwMjQwMkZGRkZBNTBBMDAwRUE1MDMwMDEwQTUwNjAwMTJDMAotOjEwRkFGMDAwQUQwNTAwMThBRDAyMDAyNDk0ODIwMTE0MjQwM0ZGRjcyMQotOjEwRkIwMDAwMzA0MkZGRkZBRDAyMDAyODhDODIwMTE4QUQwMjAwMkNBQwotOjEwRkIxMDAwM0MwMjEwMDBBRDAwMDAzMEFGNDIwMUI4OEQyMjAwMjA0MQotOjEwRkIyMDAwMDA0MzEwMjQwM0UwMDAwOEFEMjIwMDIwOEY4MjAwMjg0QgotOjEwRkIzMDAwMzBFN0ZGRkYwMDgwNDgyMTkwNDIwMEQzMzBBNUZGRkY0RgotOjEwRkI0MDAwMzBDNjAwRkYwMDAyMTEwMDMwNDIwRjAwMDBFMjM4MjVFRAotOjEwRkI1MDAwMjc0ODAxODA4RjQyMDFCODA0NDBGRkZFOEY4MjAwNTA4OQotOjEwRkI2MDAwQUQwMjAwMDA4RjQyMDEyNEFEMDIwMDA0OEQyMjAwMjA2RQotOjEwRkI3MDAwQTUwNzAwMDhBMTAyMDAwQTI0MDIwMDE3QTEwMjAwMEIzOQotOjEwRkI4MDAwOTM0MzAxMjA4RDIyMDAwODhEMjQwMDA0MzA2MzAwRkY4MAotOjEwRkI5MDAwMDA0MzEwMjE5NzgzMDA0MjAwNDQxMDIxOEY4NDAwMjhFNQotOjEwRkJBMDAwMDA0MzEwMjMzQzAzMDgwMDhDNjMzMUEwQTUwMjAwMEMyNQotOjEwRkJCMDAwQTUwNTAwMEUyNDYzMDBFOEE1MDMwMDEwQTUwNjAwMTJBOQotOjEwRkJDMDAwQUQwMDAwMTQ4RDIyMDAyNEFEMDIwMDE4OEM4MjAwNUM3MAotOjEwRkJEMDAwQUQwMjAwMUM4QzgyMDA1OEFEMDIwMDIwMjQwMkZGRkYwMQotOjEwRkJFMDAwQUQwMjAwMjQ5NDgyMDBFNjMwNDJGRkZGQUQwMjAwMjhGRgotOjEwRkJGMDAwOTQ4MjAwNjA5NDgzMDBCRTMwNDI3RkZGMzA2M0ZGRkYzOQotOjEwRkMwMDAwMDAwMjEyMDAwMDQzMTAyMUFEMDIwMDJDM0MwMjEwMDA0MwotOjEwRkMxMDAwQUQwMDAwMzBBRjQyMDFCODk0ODIwMEJFMjQwM0ZGRjc2QwotOjEwRkMyMDAwMDBBMjEwMjFBNDgyMDBCRThEMjIwMDIwMDA0MzEwMjRENwotOjEwRkMzMDAwMDNFMDAwMDhBRDIyMDAyMDI3NDMwMTgwOEY0MjAxQjg3NQotOjEwRkM0MDAwMDQ0MEZGRkUyNDAyMDAxOEFDNjQwMDAwQTA2MjAwMEIxOAotOjEwRkM1MDAwOEY4MjAwMjg5NDQyMDBFNkE0NjIwMDEwM0MwMjEwMDA0QgotOjEwRkM2MDAwQUM2MDAwMzAwM0UwMDAwOEFGNDIwMUI4Mjc0MzAxODBEOAotOjEwRkM3MDAwOEY0MjAxQjgwNDQwRkZGRThGODIwMDJDOTQ0MjAwMUM4QQotOjEwRkM4MDAwMzA0MkZGRkYwMDAyMTFDMEFDNjIwMDAwMjQwMjAwMTlFNAotOjEwRkM5MDAwQTA2MjAwMEIzQzAyMTAwMEFDNjAwMDMwMDNFMDAwMDhFMgotOjEwRkNBMDAwQUY0MjAxQjg4Rjg3MDAzNDMwQzMwMEZGOEY0MjAxQjhFNAotOjEwRkNCMDAwMDQ0MEZGRkU4RjgyMDA1MDM0NjM2MDAwQUNBMjAwMDA1RAotOjEwRkNDMDAwOTM4MjAwNENBMEEyMDAwNThDRTIwMDEwQTRBMjAwMDZDMgotOjEwRkNEMDAwQTRBMzAwMDg4QzgyMDAyMDI0MDNGRkY3QTBBMjAwMEEzRQotOjEwRkNFMDAwMjQwMjAwMDJBMEEyMDAwQjhDRTIwMDAwQUNBMjAwMTBEMwotOjEwRkNGMDAwOENFMjAwMDRBQ0EyMDAxNDhDRTIwMDFDQUNBMjAwMjQzNAotOjEwRkQwMDAwOENFMjAwMjBBQ0EyMDAyODhDRTIwMDJDQUNBMjAwMkNEQgotOjEwRkQxMDAwOEM4MjAwMjRBQ0EyMDAxODNDMDIxMDAwQUY0MjAxQjg1MwotOjEwRkQyMDAwOEM4MjAwMjAwMDQzMTAyNDAzRTAwMDA4QUM4MjAwMjBGNQotOjEwRkQzMDAwOTM4MjAwNEMyNDAzMDAwMTI3QkRGRkU4MDA0MzMwMDRGOAotOjEwRkQ0MDAwMkM0MjAwMjBBRkIwMDAxMEFGQkYwMDE0MjQxMEZGRkUwMwotOjEwRkQ1MDAwMTA0MDAwMDUyNzQ1MDE4MDNDMDIwODAwOEM0MjMxOTA4QwotOjEwRkQ2MDAwMEEwMDE1OUMwMDQ2MTAyNDNDMDIwODAwOEM0MjMxOTQ4NQotOjEwRkQ3MDAwMDA0NjEwMjQxNDQwMDAwNzI0MDYwMDg0OEY4MzAwMjhDNgotOjEwRkQ4MDAwMjQxMEZGRkY5MDYyMDA2MjMwNDIwMDBGMzQ0MjAwNDBCNgotOjEwRkQ5MDAwQTA2MjAwNjIwRTAwMTU2ODAwMDAwMDAwMDIwMDEwMjE0MQotOjEwRkRBMDAwOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMThCQgotOjEwRkRCMDAwOEY4MzAwMkMyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTQ1NQotOjEwRkRDMDAwQUZCMDAwMTBBRkJGMDAxQzkwNjIwMDBEMDBBMDkwMjFFQQotOjEwRkREMDAwMzBEMTAwRkYzMDQyMDA3RkEwNjIwMDBEOEY4NTAwMjhFNwotOjEwRkRFMDAwOEU0MzAwMTgwMDgwODAyMThDQTIwMDdDMTQ2MjAwMDVFNAotOjEwRkRGMDAwMjQwMjAwMEU5MEEyMDA2MzM0NDIwMDIwMEEwMDE1QzVDMAotOjEwRkUwMDAwQTBBMjAwNjMwRTAwMTU4QkEzODIwMDRDMjQwM0ZGRkYwOQotOjEwRkUxMDAwMTA0MzAwNDcyNDA0RkZGRjUyMjAwMDQ1MDAwMDIwMjEyQQotOjEwRkUyMDAwOEU0MzAwMDAzQzAyMDAxMDAwNjIxMDI0NTA0MDAwMDQ4OQotOjEwRkUzMDAwM0MwMjAwMDgwMjAwMjAyMTBBMDAxNUQ0MjQwMjAwMTUwQgotOjEwRkU0MDAwMDA2MjEwMjQ1MDQwMDAwOThFNDUwMDAwMDIwMDIwMjE2RAotOjEwRkU1MDAwMjQwMjAwMTQwRTAwMTU4QkEzODIwMDRDMjQwM0ZGRkYyNAotOjEwRkU2MDAwMTA0MzAwMzMyNDA0RkZGRjhFNDUwMDAwM0MwMjAwMDJEMwotOjEwRkU3MDAwMDBBMjEwMjQxMDQwMDAxNjNDMDIwMDA0OEY4NjAwMkNDMwotOjEwRkU4MDAwOENDMjAwMTQ4Q0MzMDAxMDhDQzQwMDE0MDA0MzEwMjNENwotOjEwRkU5MDAwMDA0NDEwMkI1MDQwMDAwNTAyMDAyMDIxOEU0MzAwMkMwRQotOjEwRkVBMDAwOENDMjAwMTAxMDYyMDAwMzAyMDAyMDIxMEEwMDE2MDUxNwotOjEwRkVCMDAwMjQwMjAwMTIzQzAyMDAwNDAwQTIxMDI0NTA0MDAwMUM0NgotOjEwRkVDMDAwMDAwMDIwMjEwMjAwMjAyMTBBMDAxNjA1MjQwMjAwMTM1MAotOjEwRkVEMDAwMDBBMjEwMjQxMDQwMDAwNjhGODMwMDJDOEM2MjAwMTBCQQotOjEwRkVFMDAwNTA0MDAwMTMwMDAwMjAyMTBBMDAxNUZGMDIwMDIwMjFDRAotOjEwRkVGMDAwOEM2MjAwMTA1MDQwMDAwNDhFNDIwMDJDMDIwMDIwMjEzMQotOjEwRkYwMDAwMEEwMDE2MDUyNDAyMDAxMTUwNDAwMDA5MDAwMDIwMjFCQgotOjEwRkYxMDAwMDIwMDIwMjEyNDAyMDAxNzBFMDAxNThCQTM4MjAwNEM0MgotOjEwRkYyMDAwMjQwM0ZGRkYxMDQzMDAwMjI0MDRGRkZGMDAwMDIwMjFGMAotOjEwRkYzMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA1QgotOjEwRkY0MDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwOTM4MzAwMzBDQgotOjEwRkY1MDAwMjdCREZGRTAyNDAyMDAzNEFGQjIwMDE4QUZCMTAwMTQ5NwotOjEwRkY2MDAwQUZCRjAwMUNBRkIwMDAxMDAwODA4ODIxMTQ2MjAwMENFRAotOjEwRkY3MDAwMDBBMDkwMjE4Rjg0MDAzNDBFMDAxNEI0OEM5MDAwMzBDNwotOjEwRkY4MDAwMTIwMjAwMDcyNDAyMDAwNTAyMjAyMDIxMEUwMDE1OEIxQQotOjEwRkY5MDAwQTM4MjAwNEMyNDAzRkZGRjEwNDMwMDVGMjQwNEZGRkZGMwotOjEwRkZBMDAwOTI0MjAwMDQxMDQwMDAwOThGODIwMDI4MDIyMDIwMjE4NAotOjEwRkZCMDAwMjQwMjAwMEMwRTAwMTU4QkEzODIwMDRDMjQwM0ZGRkZDQgotOjEwRkZDMDAwMTA0MzAwNTUyNDA0RkZGRjhGODIwMDI4QTM4MDAwMjRFMwotOjEwRkZEMDAwOEU0MzAwMDQ4QzQ0MDA4MDNDMDIwMEZGMzQ0MkZGRkY0QgotOjEwRkZFMDAwMDA2MjE4MjQwMDgzMjAyQjEwODAwMDA4QUY4MzAwM0M5RgotOjEwRkZGMDAwMDIyMDIwMjEyNDAyMDAxOTBFMDAxNThCQTM4MjAwNEM0MAotOjAyMDAwMDA0MDAwMUY5Ci06MTAwMDAwMDAyNDAzRkZGRjEwNDMwMDQ0MjQwNEZGRkY5NzgyMDA0MkIzCi06MTAwMDEwMDA4Rjg3MDA0NDhGODgwMDNDMDA0NzEwMjMxMTAwMDAzOTZGCi06MTAwMDIwMDBBNzgyMDA0MjhGODYwMDI4MzA0NUZGRkY4Rjg0MDA1MDUyCi06MTAwMDMwMDA5MEMzMDBCQzNDMDIwODAwOEM0MjMxQTAwMDAzMTg4MjJGCi06MTAwMDQwMDAzMDcwMDAwMTAwODIyMDIxMDAxMDEwODAwMTAyMTAyMTc4Ci06MTAwMDUwMDAwMEEyMjgyQjEwQTAwMDEwMjQ4MjAwODg4Rjg0MDAzNDc2Ci06MTAwMDYwMDAxMDgyMDAwRDNDMDMzRjAxOEU0MjAwMDAwMDQzMTAyNDJCCi06MTAwMDcwMDAzQzAzMjUwMDE0NDMwMDA2MzBFNTAwRkY4QzgyMDAwMDlECi06MTAwMDgwMDBBQ0MyMDA4ODhDODIwMDEwMEEwMDE2NjVBQ0MyMDA5OEQxCi06MTAwMDkwMDAwRTAwMTQ4OTAwMDAzMDIxOEY4NTAwM0M5MzgzMDAyNERBCi06MTAwMEEwMDA4Rjg2MDAyODMwQTIwMDAzMDAwMjEwMjMzMDQyMDAwMzk0Ci06MTAwMEIwMDAwMDQzMzgyMUEzODcwMDI0OTRDNDAwRTQwMEEyMjgyMTJGCi06MTAwMEMwMDA4RjgzMDA0NDhGODIwMDQ4MzQ4NDEwMDBBNEM0MDBFNDZECi06MTAwMEQwMDAwMDQzMTAyMUFGODIwMDQ4MTIwMDAwMEVBRjg1MDA0NDlCCi06MTAwMEUwMDAyNEUyMDAwNEEzODIwMDI0OTRDMjAwRTQyNEEzMDAwNEI4Ci06MTAwMEYwMDBBRjgzMDA0NDM0NDIyMDAwQTRDMjAwRTQwQTAwMTY4NTA1Ci06MTAwMTAwMDAwMDAwMjAyMThGODIwMDQ4QUY4MDAwNDQwMDQ3MTAyMTZBCi06MTAwMTEwMDBBRjgyMDA0ODAwMDAyMDIxOEZCRjAwMUM4RkIyMDAxODYyCi06MTAwMTIwMDA4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODkwCi06MTAwMTMwMDAyN0JEMDAyMDhGODYwMDI4MjdCREZGRThBRkJGMDAxNDMxCi06MTAwMTQwMDBBRkIwMDAxMDkwQzIwMDYzMzA0MjAwMjAxMDQwMDAwOEExCi06MTAwMTUwMDAzMEE1MDBGRjhDQzIwMDdDMjQwM0ZGREYyNDQyMDAwMTk1Ci06MTAwMTYwMDBBQ0MyMDA3QzkwQzIwMDYzMDA0MzEwMjRBMEMyMDA2M0I0Ci06MTAwMTcwMDAxMEEwMDAyMzhGODMwMDI4Mjc1MDAxODAwMjAwMjgyMTJGCi06MTAwMTgwMDAwRTAwMTU2ODI0MDYwMDgyOEY4MjAwMjg5MDQyMDA2M0NBCi06MTAwMTkwMDAzMDQyMDA0MDUwNDAwMDE5QTM4MDAwNEM4RjgzMDAzNDRGCi06MTAwMUEwMDA4RjQyMDFCODA0NDBGRkZFOEY4MjAwNTBBRTAyMDAwMDczCi06MTAwMUIwMDAyNDAyNjA4MkE2MDIwMDA4MjQwMjAwMDJBMjAyMDAwQkIwCi06MTAwMUMwMDA4QzYyMDAwOEFFMDIwMDEwOEM2MjAwMENBRTAyMDAxNEJCCi06MTAwMUQwMDA4QzYyMDAxNEFFMDIwMDE4OEM2MjAwMThBRTAyMDAyNDdCCi06MTAwMUUwMDA4QzYyMDAyNEFFMDIwMDI4OEM2MjAwMjhBRTAyMDAyQzMzCi06MTAwMUYwMDAzQzAyMTAwMEFGNDIwMUI4QTM4MDAwNEM4RjgzMDAyODVFCi06MTAwMjAwMDA4RkJGMDAxNDhGQjAwMDEwOTA2MjAwNjMyN0JEMDAxOEVDCi06MTAwMjEwMDAzMDQyMDA3RkEwNjIwMDYzOTc4MjAwNDI4Rjg2MDA0NEQ0Ci06MTAwMjIwMDA4Rjg1MDAyODkzODMwMDMwMDA0NjEwMjNBNzgyMDA0MjY4Ci06MTAwMjMwMDBBNEEwMDBFNDkwQTQwMDYzOEY4MjAwNDhBRjgzMDA0NDMwCi06MTAwMjQwMDAyNDAzRkZCRjAwNDYxMDIxMDA4MzIwMjRBRjgyMDA0ODEyCi06MTAwMjUwMDBBMEE0MDA2MzhGODIwMDI4QTA0MDAwQkQ4RjgyMDAyOEU4Ci06MTAwMjYwMDAwM0UwMDAwOEE0NDAwMEJFOEY4QTAwMjgyN0JERkZFMEZECi06MTAwMjcwMDBBRkIxMDAxNEFGQjAwMDEwOEY4ODAwNDRBRkJGMDAxOEJBCi06MTAwMjgwMDA5Mzg5MDAyNDk1NDIwMEU0MzBEMTAwRkYwMTA5MTgyQjI2Ci06MTAwMjkwMDAwMDgwODAyMTMwQUMwMEZGMzA0N0ZGRkYwMDAwNTgyMTc0Ci06MTAwMkEwMDAxNDYwMDAwMzMxMDYwMEZGMDEyMDMwMjEwMTA5NTgyM0FBCi06MTAwMkIwMDA5NzgzMDA0MjAwNjgxMDJCMTQ0MDAwMzIwMDAwMDAwMEI5Ci06MTAwMkMwMDAxNDY4MDAwNzI0MDIwMDAxOEUwMjAwMjAyNDAzRkZGQkIzCi06MTAwMkQwMDAzNEU3ODAwMDAwNDMxMDI0QUUwMjAwMjAyNDAyMDAwMTE1Ci06MTAwMkUwMDAzNEU3MDg4MDE1ODIwMDA1MzE2NUZGRkYwRTAwMTREOTQwCi06MTAwMkYwMDAwMjAwMjAyMTBBMDAxNzFBMDIwMDIwMjEwRTAwMTUwQTEwCi06MTAwMzAwMDAwMjAwMjAyMTBFMDAxNTREOEY4NDAwNTA4Rjg0MDAyODlDCi06MTAwMzEwMDA5NDgyMDA2MDI0NDIwMDAxQTQ4MjAwNjA5NDgyMDA2MDA0Ci06MTAwMzIwMDAzQzAzMDgwMDhDNjMzMTg4MzA0MjdGRkY1NDQzMDAwRjQ4Ci06MTAwMzMwMDAwMjAwMjAyMTk0ODIwMDYwMjQwMzgwMDAwMDQzMTAyNEU2Ci06MTAwMzQwMDBBNDgyMDA2MDkwODIwMDYwOTA4MzAwNjAzMDQyMDBGRkQxCi06MTAwMzUwMDAwMDAyMTFDMjAwMDIxMDI3MDAwMjExQzAzMDYzMDA3RkFBCi06MTAwMzYwMDAwMDYyMTgyNUEwODMwMDYwMDIwMDIwMjEwMjIwMjgyMUJECi06MTAwMzcwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMTY4Q0M4Ci06MTAwMzgwMDAyN0JEMDAyMDkxNDIwMDYzMjQwM0ZGODAwMDQzMTAyNTE1Ci06MTAwMzkwMDBBMTQyMDA2Mzk3ODIwMDQyMzA0OEZGRkYxMTAwMDAyMDE1Ci06MTAwM0EwMDA5MzgzMDAyNDhGODQwMDI4MDA0QjEwMjMzMDQ2MDBGRkU1Ci06MTAwM0IwMDA5NDgzMDBFNDI0MDJFRkZGMDE2ODI4MkIwMDYyMTgyNEQ0Ci06MTAwM0MwMDBBNDgzMDBFNDE0QTAwMDAzOEUwMjAwMjAwMTAwNTgyMTQxCi06MTAwM0QwMDAwMDAwMzAyMTI0MDNGRkZCMzRFNzgwMDAwMDQzMTAyNDk5Ci06MTAwM0UwMDBBRTAyMDAyMDI0MDIwMDAxMTU4MjAwMDUzMTY1RkZGRkU2Ci06MTAwM0YwMDAwRTAwMTREOTAyMDAyMDIxMEEwMDE3NDI5NzgzMDA0MjAwCi06MTAwNDAwMDAwRTAwMTUwQTAyMDAyMDIxOTc4MzAwNDI4RjgyMDA0NENCCi06MTAwNDEwMDBBNzgwMDA0MjAwNDMxMDIzQUY4MjAwNDQ5MzgzMDAyNDRFCi06MTAwNDIwMDA4RjgyMDAyODhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDhBCi06MTAwNDMwMDAyN0JEMDAyMDAzRTAwMDA4QTA0MzAwQkQ4RjgyMDAyOEY0Ci06MTAwNDQwMDA5MDQzMDA4ODkwNDUwMEJEMjQ0OTAwODgzMDYzMDAzRkY4Ci06MTAwNDUwMDAyNDYzRkZFMDI0MDIwMDAxMDA2MjM4MDQyQzYzMDAyMEMyCi06MTAwNDYwMDAzMEU4MDAxOUEzODUwMDI0MTA2MDAwMTBBRjg5MDAzNDIzCi06MTAwNDcwMDAzQzAyODAwMDM0NDIwMDAyMjQwNTAwMDEyNDA2MDAwMUYxCi06MTAwNDgwMDAxNTAwMDAwODAwRTIxODI0MDAwMDI4MjExNDYwMDAwNTZGCi06MTAwNDkwMDAzMEUyMDAyMDEwNDAwMDA1MjQwNTAwMDE5MTI2MDAwMUYzCi06MTAwNEEwMDAzMEM2MDAwMTBBMDAxNkQ5MDAwMDAwMDAwM0UwMDAwODcxCi06MTAwNEIwMDAwMDAwMDAwMDI3QkRGRkQ4QUZCMDAwMTA4RjkwMDAzNEJGCi06MTAwNEMwMDBBRkI0MDAyMEFGQjEwMDE0QUZCRjAwMjRBRkIzMDAxQzI1Ci06MTAwNEQwMDBBRkIyMDAxODhFMDUwMDEwM0MwMjA4MDA4QzQyMzFCMDBCCi06MTAwNEUwMDA4Rjg2MDAzODMwQTMzRkZGMDA2MjE4MkI4Q0QzMDAxNDk2Ci06MTAwNEYwMDAwMDgwODgyMThDRDIwMDIwMTA2MDAwNzgwMDAwQTAyMUFDCi06MTAwNTAwMDA5MEMzMDAwRDI0MDJGRjgwMDA0MzEwMjQzMDQyMDBGRkZFCi06MTAwNTEwMDA1MDQwMDA3MzAyMjAyMDIxMDAwNTEzODIzMDQyMDAwMzY2Ci06MTAwNTIwMDA1NDQwMDA2RjAyMjAyMDIxOTRDMzAwMUM4RjgyMDAyOEI5Ci06MTAwNTMwMDA4RTA1MDAyOEE0NDMwMTE0OENDMjAwMTAwMjYyMTgyMzA3Ci06MTAwNTQwMDAxNDY1MDAwNzI0MDIwMDFGOEY4MjAwM0MwMDYyMTAyMTA2Ci06MTAwNTUwMDAwMjYyMTAyQjEwNDAwMDA4OEY4MzAwMkMyNDAyMDAxODI4Ci06MTAwNTYwMDAwRTAwMTU4QkEzODIwMDRDMjQwM0ZGRkYxMDQzMDA2Rjg1Ci06MTAwNTcwMDAyNDA0RkZGRjhGODMwMDJDOEY4NDAwM0M4QzYyMDAxMENBCi06MTAwNTgwMDAwMjQ0OTAyMTAwNDQxMDIzQUM2MjAwMTA4RjgyMDAyOEE2Ci06MTAwNTkwMDBBQzcyMDAyMDhDNDIwMDY4MDA1MjEwMkIxMDQwMDAwOTAxCi06MTAwNUEwMDA4RjgzMDAzODAyMjAyMDIxMjQwMjAwMUQwRTAwMTU4QkFECi06MTAwNUIwMDBBMzgyMDA0QzI0MDNGRkZGMTA0MzAwNUMyNDA0RkZGRkQwCi06MTAwNUMwMDA4RjgzMDAzODhFMDIwMDI0OEM2MzAwMjQxMDQzMDAwN0MwCi06MTAwNUQwMDAwMjIwMjAyMTI0MDIwMDFDMEUwMDE1OEJBMzgyMDA0QzU3Ci06MTAwNUUwMDAyNDAzRkZGRjEwNDMwMDUxMjQwNEZGRkY4Rjg0MDAyQ0RECi06MTAwNUYwMDA4QzgyMDAyNDI0NDIwMDAxQUM4MjAwMjQxMjUzMDAwNEE3Ci06MTAwNjAwMDA4RjgyMDAyODhDNDIwMDY4NTY0MjAwMEU4RTAyMDAwMDQ1Ci06MTAwNjEwMDA4RTAyMDAwMDNDMDMwMDgwMDA0MzEwMjQxNDQwMDAwREIzCi06MTAwNjIwMDAyNDAyMDAxQTAyMjAyMDIxMEUwMDE1OEJBMzgyMDA0QzA4Ci06MTAwNjMwMDAyNDAzRkZGRjEwNDMwMDNEMjQwNEZGRkYwQTAwMTdENkU4Ci06MTAwNjQwMDA4RTAyMDAxNDNDMDMwMDgwMDA0MzEwMjQ1MDQwMDAwMzNECi06MTAwNjUwMDA4RTAyMDAxNEFDODAwMDIwOEUwMjAwMTQyNDEyRkZGRkQyCi06MTAwNjYwMDAxMDUyMDAwNjI0MDIwMDFCMDIyMDIwMjEwRTAwMTU4QkQwCi06MTAwNjcwMDBBMzgyMDA0QzEwNTIwMDJEMjQwNEZGRkY4RTAzMDAwMEMzCi06MTAwNjgwMDAzQzAyMDAwMTAwNjIxMDI0MTA0MDAwMUYzQzAyMDA4MDY4Ci06MTAwNjkwMDAwMDYyMTAyNDE0NDAwMDA4MDIyMDIwMjEyNDAyMDAxQUM1Ci06MTAwNkEwMDAwRTAwMTU4QkEzODIwMDRDMjQwM0ZGRkYxMDQzMDAxRjk0Ci06MTAwNkIwMDAyNDA0RkZGRjAyMjAyMDIxMDIwMDI4MjEwRTAwMTVBQjk4Ci06MTAwNkMwMDAyNDA2MDAwMTI0MDNGRkZGMjQwNEZGRkYxNDQzMDAwRTRGCi06MTAwNkQwMDAyNDE0MDAwMTBBMDAxODBCOEZCRjAwMjQwMjIwMjAyMURGCi06MTAwNkUwMDAyNDAyMDAwRDhGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQ0E0Ci06MTAwNkYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyOEYyCi06MTAwNzAwMDAwQTAwMTU4QkEzODIwMDRDOEY4MzAwMkMwMjIwMjAyMTJECi06MTAwNzEwMDAwMjgwMzAyMTk0NjIwMDM2MjQwNTAwMDEyNDQyMDAwMTQ5Ci06MTAwNzIwMDAwRTAwMTZEOUE0NjIwMDM2MDAwMDIwMjE4RkJGMDAyNERECi06MTAwNzMwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDRCCi06MTAwNzQwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyOEIyCi06MTAwNzUwMDA4RjgzMDAyODI3QkRGRkQ4QUZCNDAwMjBBRkIzMDAxQ0EzCi06MTAwNzYwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyNDlCCi06MTAwNzcwMDA5MDYyMDA2MzhGOTEwMDM0MjQxMkZGRkYzNDQyMDA0MEU2Ci06MTAwNzgwMDA5MjI1MDAwMEEwNjIwMDYzOEUyMjAwMTAwMDgwOTgyMTU0Ci06MTAwNzkwMDAzMEIwMDAzRjEwNTIwMDA2MDM2MEEwMjEyNDAyMDAwRDdCCi06MTAwN0EwMDAwRTAwMTU4QkEzODIwMDRDMTA1MjAwNTIyNDA0RkZGRjUwCi06MTAwN0IwMDA4RjgzMDAyODhFMjIwMDE4OEM2MzAwN0MxMDQzMDAwNzcyCi06MTAwN0MwMDAwMjYwMjAyMTI0MDIwMDBFMEUwMDE1OEJBMzgyMDA0QzMzCi06MTAwN0QwMDAyNDAzRkZGRjEwNDMwMDQ3MjQwNEZGRkYyNDA0MDAyMEVDCi06MTAwN0UwMDAxMjA0MDAwNDhGODMwMDI4OTA2MjAwNjMzNDQyMDAyMENBCi06MTAwN0YwMDBBMDYyMDA2MzhGODUwMDNDMTBBMDAwMUUwMDAwMDAwMDc2Ci06MTAwODAwMDA1NjA0MDAwNDhGODIwMDI4MDI2MDIwMjEwQTAwMTg1NTM3Ci06MTAwODEwMDAyNDAyMDAwQTk2ODMwMDBBMjQwNEZGRkQ5NDQyMDA2MDJCCi06MTAwODIwMDAzMDQyRkZGRjEwNDMwMDM0OEZCRjAwMjQzQzAyMDgwMDE5Ci06MTAwODMwMDA4QzQyMzE4QzAwNDUxMDJCMTQ0MDAwMDYwMjYwMjAyMUIwCi06MTAwODQwMDAwMDAwMjgyMTBFMDAxNkQ5MjQwNjAwMDEwQTAwMTg3Qzk5Ci06MTAwODUwMDAwMDAwMjAyMTI0MDIwMDJEMEUwMDE1OEJBMzgyMDA0Q0U1Ci06MTAwODYwMDAyNDAzRkZGRjEwNDMwMDIzMjQwNEZGRkYwQTAwMTg3QzI5Ci06MTAwODcwMDAwMDAwMjAyMTE2MDQwMDA1OEY4NDAwMjg4RTIzMDAxNDE4Ci06MTAwODgwMDAyNDAyRkZGRjUwNjIwMDE4MDI2MDIwMjE5NDgyMDA2MDYxCi06MTAwODkwMDAyNDQyMDAwMUE0ODIwMDYwOTQ4MjAwNjAzQzAzMDgwMEFFCi06MTAwOEEwMDA4QzYzMzE4ODMwNDI3RkZGNTQ0MzAwMEYwMjYwMjAyMTY3Ci06MTAwOEIwMDA5NDgyMDA2MDI0MDM4MDAwMDA0MzEwMjRBNDgyMDA2MDFFCi06MTAwOEMwMDA5MDgyMDA2MDkwODMwMDYwMzA0MjAwRkYwMDAyMTFDMkZECi06MTAwOEQwMDAwMDAyMTAyNzAwMDIxMUMwMzA2MzAwN0YwMDYyMTgyNTVCCi06MTAwOEUwMDBBMDgzMDA2MDAyNjAyMDIxMEUwMDE2OEMyNDA1MDAwMTA4Ci06MTAwOEYwMDAwMDAwMjAyMThGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzg0Ci06MTAwOTAwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTNBCi06MTAwOTEwMDAwM0UwMDAwODI3QkQwMDI4OEY4MzAwMjgyN0JERkZFOERCCi06MTAwOTIwMDBBRkIwMDAxMEFGQkYwMDE0OTA2MjAwNjM4Rjg3MDAzNDM3Ci06MTAwOTMwMDAwMDgwODAyMTM0NDIwMDQwOENFNjAwMTBBMDYyMDA2M0Y5Ci06MTAwOTQwMDAzQzAzMDgwMDhDNjMzMUIwMzBDMjNGRkYwMDQzMTAyQkUyCi06MTAwOTUwMDAxMDQwMDA0RThGODUwMDM4MjQwMkZGODA5MEEzMDAwREM4Ci06MTAwOTYwMDAwMDQzMTAyNDMwNDIwMEZGNTA0MDAwNDkwMjAwMjAyMTgzCi06MTAwOTcwMDAwMDA2MTM4MjMwNDgwMDAzMjQwMjAwMDI1NTAyMDA0NDlFCi06MTAwOTgwMDAwMjAwMjAyMTk0QTIwMDFDOEY4NTAwMjgyNDAzMDAyMzRDCi06MTAwOTkwMDBBNEEyMDExNDhDRTYwMDAwMDAwNjE2MDIzMDQyMDAzRkJCCi06MTAwOUEwMDAxMDQzMDAxMDNDMDMwMDgzOENFMzAwMTg4Q0EyMDA3Q0YxCi06MTAwOUIwMDAxMDYyMDAwNjI0MDIwMDBFMEUwMDE1OEJBMzgyMDA0QzZDCi06MTAwOUMwMDAyNDAzRkZGRjEwNDMwMDM4MjQwNEZGRkY4RjgzMDAyODE3Ci06MTAwOUQwMDA5MDYyMDA2MzM0NDIwMDIwQTA2MjAwNjMwQTAwMThDMUU0Ci06MTAwOUUwMDA4RjgzMDAyQzAwQzMxMDI0MTQ0MzAwMDc4RjgzMDAyQzM2Ci06MTAwOUYwMDA5MEEyMDA2MjMwNDIwMDBGMzQ0MjAwMjBBMEEyMDA2MkE4Ci06MTAwQTAwMDBBMzg4MDA0MDhGODMwMDJDOTA2MjAwMEQzMDQyMDA3RjRECi06MTAwQTEwMDBBMDYyMDAwRDhGODMwMDNDMTA2MDAwMTgwMjAwMjAyMUFFCi06MTAwQTIwMDA4Rjg0MDAzODhDODIwMDEwMDA0MzEwMkIxMDQwMDAwOTg2Ci06MTAwQTMwMDAyNDAyMDAxODAyMDAyMDIxMEUwMDE1OEJBMzgyMDA0QzE2Ci06MTAwQTQwMDAyNDAzRkZGRjEwNDMwMDE4MjQwNEZGRkYwQTAwMThFOUU1Ci06MTAwQTUwMDAwMDAwMjAyMThDODIwMDEwMjQwNTAwMDEwMjAwMjAyMUNBCi06MTAwQTYwMDAwMDQzMTAyMzhGODMwMDJDMjQwNjAwMDEwRTAwMTZEOUFBCi06MTAwQTcwMDBBQzYyMDAxMDBBMDAxOEU5MDAwMDIwMjEwRTAwMTY4QzVDCi06MTAwQTgwMDAyNDA1MDAwMTBBMDAxOEU5MDAwMDIwMjEwMjAwMjAyMUFECi06MTAwQTkwMDAyNDAyMDAwRDhGQkYwMDE0OEZCMDAwMTAyN0JEMDAxODc2Ci06MTAwQUEwMDAwQTAwMTU4QkEzODIwMDRDOEZCRjAwMTQ4RkIwMDAxMDdBCi06MTAwQUIwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMTgyN0JERkZEOEUzCi06MTAwQUMwMDBBRkIwMDAxMDhGOTAwMDM0QUZCMzAwMUNBRkJGMDAyMDU4Ci06MTAwQUQwMDBBRkIyMDAxOEFGQjEwMDE0OEUxMjAwMTAzQzAzMDgwMDMyCi06MTAwQUUwMDA4QzYzMzFCMDMyNDIzRkZGMDA0MzEwMkIxMDQwMDA3QzNBCi06MTAwQUYwMDAwMDgwOTgyMThGODUwMDM4MjQwMkZGODA5MEEzMDAwRDhDCi06MTAwQjAwMDAwMDQzMTAyNDMwNDIwMEZGNTA0MDAwNzYwMjYwMjAyMTU0Ci06MTAwQjEwMDAwMDEyMTM4MjMwNDIwMDAzMjQwMzAwMDE1NDQzMDA3MTg5Ci06MTAwQjIwMDAwMjYwMjAyMTkwQTIwMDBEMzA0MjAwMDg1NDQwMDAwM0QyCi06MTAwQjMwMDA4RjgyMDAzQzBBMDAxOTE5MjQwMjAwMjQ1MDQwMDAwMzRGCi06MTAwQjQwMDA4RTAzMDAwQzBBMDAxOTE5MjQwMjAwMjc4Q0EyMDAyMDMxCi06MTAwQjUwMDAxNDYyMDAwNTI0MDIwMDIwOEUwMzAwMDg4Q0EyMDAyNEU5Ci06MTAwQjYwMDAxMDYyMDAwODI0MDIwMDIwMEUwMDE1OEJBMzgyMDA0Q0E2Ci06MTAwQjcwMDAyNDAzRkZGRjEwNDMwMDZBMjQwNEZGRkYwQTAwMTk0NDA2Ci06MTAwQjgwMDA4Rjg0MDAyQzhFMDIwMDE0MjQxMUZGRkYxNDUxMDAwM0U3Ci06MTAwQjkwMDA4Rjg3MDAyODBBMDAxOTNGMjQwMjAwMjU4RTAzMDAxOEMxCi06MTAwQkEwMDA4Q0UyMDA3QzE0NjIwMDE2MjQwMjAwMEU4RTAzMDAyNEU2Ci06MTAwQkIwMDA4Q0EyMDAyODE0NjIwMDEyMjQwMjAwMjE4RTA2MDAyODU0Ci06MTAwQkMwMDA4Q0EyMDAyQzE0QzIwMDBFMjQwMjAwMUY4RTAzMDAyQ0U1Ci06MTAwQkQwMDAxMDYwMDAwQjI0MDIwMDIzOENFMjAwNjgwMDQzMTAyQkZECi06MTAwQkUwMDAxNDQwMDAwNzI0MDIwMDI2OENBMjAwMTQwMDY2MTgyMTdECi06MTAwQkYwMDAwMDQzMTAyQjUwNDAwMDA3OEY4NDAwMkMyNDAyMDAyMjU5Ci06MTAwQzAwMDAwRTAwMTU4QkEzODIwMDRDMTA1MTAwNDUyNDA0RkZGRkY5Ci06MTAwQzEwMDA4Rjg0MDAyQzI0MDNGRkY3OTA4MjAwMEQwMDQzMTAyNEUyCi06MTAwQzIwMDBBMDgyMDAwRDhGODYwMDI4M0MwMzA4MDA4QzYzMzFBQzQ1Ci06MTAwQzMwMDA4RjgyMDA1MDk0QzQwMEUwOEY4NTAwMkMwMDQzMTAyMTY3Ci06MTAwQzQwMDAzMDg0N0ZGRjAwMDQyMDQwMDA0NDEwMjEzMDQzMDA3RkE3Ci06MTAwQzUwMDAwMzQzMjAyMTNDMDMwMDBFMDA4MzIwMjEyNDAzRkY4MDU2Ci06MTAwQzYwMDAwMDQzMTAyNEFGNDIwMDJDQTQ5MjAwMDA4Q0EyMDAyODY0Ci06MTAwQzcwMDAyNDQyMDAwMUFDQTIwMDI4OENBMjAwMkM4RTAzMDAyQzgwCi06MTAwQzgwMDAwMDQzMTAyMUFDQTIwMDJDOEUwMjAwMkNBQ0EyMDAzMDNDCi06MTAwQzkwMDA4RTAyMDAxNEFDQTIwMDM0OTRBMjAwM0EyNDQyMDAwMTU3Ci06MTAwQ0EwMDBBNEEyMDAzQTk0QzYwMEUwM0MwMjA4MDA4QzQyMzFCMDk1Ci06MTAwQ0IwMDAyNEM0MDAwMTMwODM3RkZGMTQ2MjAwMTMwMDgwMzAyMUMwCi06MTAwQ0MwMDAyNDAyODAwMDAwODIzMDI0MzBDMkZGRkYwMDAyMTNDMkUxCi06MTAwQ0QwMDAzMDQyMDBGRjAwMDIxMDI3MEEwMDE5ODEwMDAyMzNDMEQxCi06MTAwQ0UwMDAwMjYwMjAyMTI0MDIwMDBEOEZCRjAwMjA4RkIzMDAxQzYyCi06MTAwQ0YwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyOEVDCi06MTAwRDAwMDAwQTAwMTU4QkEzODIwMDRDOEY4MjAwMjgwMjYwMjAyMUVDCi06MTAwRDEwMDAyNDA1MDAwMTBFMDAxNjhDQTQ0NjAwRTAwMDAwMjAyMUVFCi06MTAwRDIwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDRBCi06MTAwRDMwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyOEJDCi06MTAwRDQwMDAyN0JERkZFMEFGQjEwMDE0OEY5MTAwMzRBRkIwMDAxMEE5Ci06MTAwRDUwMDBBRkJGMDAxODhFMjYwMDEwM0MwMzA4MDA4QzYzMzFCMDMyCi06MTAwRDYwMDAzMEMyM0ZGRjAwNDMxMDJCMTA0MDAwNUUwMDgwODAyMTA2Ci06MTAwRDcwMDA4Rjg1MDAzODI0MDJGRjgwOTBBMzAwMEQwMDQzMTAyNENCCi06MTAwRDgwMDAzMDQyMDBGRjUwNDAwMDU4MDIwMDIwMjE4RjgyMDAzQzdBCi06MTAwRDkwMDAxMDQwMDAwODAwMDYxMzgyOEY4MjAwMjg5NzYzMDAwQTIzCi06MTAwREEwMDAyNDA0RkZGRDk0NDIwMDYwMzA0MkZGRkYxMDQzMDA1NUQxCi06MTAwREIwMDAwMDA2MTM4MjMwNDIwMDAzMTQ0MDAwMEUwMDAwMDAwMEMxCi06MTAwREMwMDA5MjIyMDAwMjEwNDAwMDA1OEUyMzAwMjQ1MDYwMDAxNTdFCi06MTAwREQwMDA5MjIzMDAwMzBBMDAxOUJBMDIwMDIwMjE4Q0EyMDAyNEU5Ci06MTAwREUwMDA1MDYyMDAxMDkyMjMwMDAzMDIwMDIwMjEwQTAwMTlDMjYxCi06MTAwREYwMDAyNDAyMDAwRjkwQTIwMDBEMzA0MjAwMDg1NDQwMDAwOTY4Ci06MTAwRTAwMDA5MjIzMDAwMzAyMDAyMDIxMjQwMjAwMTAwRTAwMTU4QjAzCi06MTAwRTEwMDBBMzgyMDA0QzI0MDNGRkZGMTA0MzAwM0EyNDA0RkZGRjg5Ci06MTAwRTIwMDA5MjIzMDAwMzI0MDIwMDAyNTQ2MjAwMEM5MjIyMDAwMzY5Ci06MTAwRTMwMDA4RjgyMDAzQzU0NDAwMDA5OTIyMjAwMDMwMjAwMjAyMUNFCi06MTAwRTQwMDAyNDAyMDAyQzBFMDAxNThCQTM4MjAwNEMyNDAzRkZGRjBDCi06MTAwRTUwMDAxMDQzMDAyQzI0MDRGRkZGOTIyMjAwMDMwMjIwMjgyMUNCCi06MTAwRTYwMDAwMjAwMjAyMTM4NDYwMDEwMkNDNjAwMDEyQzQyMDAwMTRGCi06MTAwRTcwMDAwRTAwMTVBQjAwNDYzMDI1MjQxMUZGRkYxMDUxMDAyMTU0Ci06MTAwRTgwMDAyNDA0RkZGRjhGODMwMDNDMTA2MDAwMTIwMjAwMjAyMTI5Ci06MTAwRTkwMDAzQzAyMDgwMDhDNDIzMThDMDA0MzEwMkIxNDQwMDAwNkE5Ci06MTAwRUEwMDAwMDAwMDAwMDAwMDAyODIxMEUwMDE2RDkyNDA2MDAwMUQxCi06MTAwRUIwMDAwQTAwMUEwMDAwMDAyMDIxMjQwMjAwMkQwRTAwMTU4QkNDCi06MTAwRUMwMDBBMzgyMDA0QzEwNTEwMDBGMjQwNEZGRkYwQTAwMUEwMEY3Ci06MTAwRUQwMDAwMDAwMjAyMTBFMDAxNjhDMjQwNTAwMDEwQTAwMUEwMEQzCi06MTAwRUUwMDAwMDAwMjAyMTAyMDAyMDIxMjQwMjAwMEQ4RkJGMDAxOEU1Ci06MTAwRUYwMDA4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjAwQTAwMTU4QkExCi06MTAwRjAwMDBBMzgyMDA0QzhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDY3Ci06MTAwRjEwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjA5MzgzMDA0MERCCi06MTAwRjIwMDAyN0JERkZFMDI0MDIwMDAyQUZCMTAwMTRBRkIwMDAxMEYzCi06MTAwRjMwMDAwMDgwODgyMUFGQkYwMDE4MDAwMDgwMjExMDYyMDA4QzYzCi06MTAwRjQwMDAyNDA0RkZGRDk3ODUwMDQyOEY4MzAwNDQzMEEyRkZGRkY5Ci06MTAwRjUwMDAwMDQzMTAyQjU0NDAwMDdEOEY4NDAwNDgwRTAwMTQ0QzM5Ci06MTAwRjYwMDAwMDAwMDAwMDNDMDIwODAwMjQ0Mjc1OTQwMjIwMjAyMTY5Ci06MTAwRjcwMDAwMDQwMjgyMTBFMDAxNjEyQUY4MjAwMzQyNDA5RkZGRjIyCi06MTAwRjgwMDAxMDQ5MDA3QjI0MDRGRkZGM0MwODA4MDA4RDA4NzVBNDZECi06MTAwRjkwMDAzQzAyMDgwMDhDNDIzMUIwM0MwMzA4MDA5MDYzNzU5NDE5Ci06MTAwRkEwMDAzMTA0M0ZGRjAwODIxMDJCMTA0MDAwMUIzMDY3MDAzRkQwCi06MTAwRkIwMDAzQzAyMDgwMDhDNDIzMUE4OEY4MzAwNTAwMDA0MjE4MDNECi06MTAwRkMwMDAwMDYyMTgyMTAwNjQxODIxMzA2MjAwN0YwMzQyMjgyMTRBCi06MTAwRkQwMDAzQzAyMDAwQzAwQTIyODIxM0MwMjAwODAzNDQyMDAwMUE3Ci06MTAwRkUwMDAzMDY2MDA3ODAwQzIzMDI1MjQwMkZGODAwMDYyMTAyNEExCi06MTAwRkYwMDBBRjQyMDAyODMwNjQwMDA3QUY0MjA4MDQ4RjgyMDAyODA3Ci06MTAxMDAwMDAwMzQ0MjAyMTI0ODQwOTQwQUY0NjA4MTRBRjg1MDAyQ0Y2Ci06MTAxMDEwMDBBRjg0MDAzOEFDNDMwMTE4OTM4MzAwNDAyNDAyMDAwM0RFCi06MTAxMDIwMDAxNDYyMDAzQjI0MDIwMDAxMjQwMjAwMjYxMEUyMDAzRDZECi06MTAxMDMwMDAyOEUyMDAyNzEwNDAwMDEzMjQwMjAwMzIyNDAyMDAyMjdDCi06MTAxMDQwMDAxMEUyMDAzODI4RTIwMDIzMTA0MDAwMDgyNDAyMDAyNEE3Ci06MTAxMDUwMDAyNDAyMDAyMDEwRTIwMDI0MjQwMjAwMjExMEUyMDAxRURECi06MTAxMDYwMDAwMjIwMjAyMTBBMDAxQTdGMjQwMjAwMEIxMEUyMDAyRDJBCi06MTAxMDcwMDAyNDAyMDAyNTEwRTIwMDEwMDIyMDIwMjEwQTAwMUE3RjFECi06MTAxMDgwMDAyNDAyMDAwQjEwRTIwMDFBMjhFMjAwMzMxMDQwMDAwNjkwCi06MTAxMDkwMDAyNDAyMDAzRjI0MDIwMDMxMTBFMjAwMEIwMjIwMjAyMTM0Ci06MTAxMEEwMDAwQTAwMUE3RjI0MDIwMDBCMTBFMjAwMTEwMjIwMjAyMTA2Ci06MTAxMEIwMDAwQTAwMUE3RjI0MDIwMDBCMEUwMDE3NkMwMjIwMjAyMTY4Ci06MTAxMEMwMDAwQTAwMUE5QTAwNDA4MDIxMEUwMDE4RUUwMjIwMjAyMTBBCi06MTAxMEQwMDAwQTAwMUE5QTAwNDA4MDIxMEUwMDE5OEYwMjIwMjAyMTU4Ci06MTAxMEUwMDAwQTAwMUE5QTAwNDA4MDIxMTUwOTAwMEUwMDAwMDAwMDM1Ci06MTAxMEYwMDAwRTAwMTgxMzAyMjAyMDIxMEEwMDFBOUEwMDQwODAyMUI1Ci06MTAxMTAwMDAwRTAwMTU4QkEzODIwMDRDMEEwMDFBOUEwMDQwODAyMTIxCi06MTAxMTEwMDAxNDYyMDAxNzAyMDAyMDIxMjQwMjAwMjMxNEUyMDAwNUJCCi06MTAxMTIwMDAyNDAyMDAwQjBFMDAxODg1MDIyMDIwMjEwQTAwMUE5QUMyCi06MTAxMTMwMDAwMDQwODAyMTAyMjAyMDIxQTM4MjAwNEMwRTAwMTU4QjRDCi06MTAxMTQwMDAyNDEwRkZGRjBBMDAxQTlCMDIwMDIwMjEzMEE1MDBGRjk3Ci06MTAxMTUwMDAwRTAwMTQ4OTI0MDYwMDAxOTc4MzAwNDI4RjgyMDA0NDA4Ci06MTAxMTYwMDBBNzgwMDA0MjAwNDMxMDIzQUY4MjAwNDQwMjAwMjAyMUU4Ci06MTAxMTcwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMUI1Ci06MTAxMTgwMDAwM0UwMDAwODI3QkQwMDIwMjdCREZGRTBBRkIxMDAxNDM5Ci06MTAxMTkwMDBBRkJGMDAxOEFGQjAwMDEwOEY0NjAxMjgzQzAzMDgwMDE1Ci06MTAxMUEwMDA4QzYzMzFBMDI0MDJGRjgwQUY4NjAwNTAwMEMzMTgyMTU5Ci06MTAxMUIwMDAzMDY1MDA3RjAzNDUyODIxMDA2MjE4MjQzQzAyMDAwQUE0Ci06MTAxMUMwMDBBRjQzMDAyNDAwQTIyODIxOTBBMjAwNjIwMDgwODgyMTYxCi06MTAxMUQwMDBBRjg1MDAyODMwNDIwMEZGMDAwMjExMDJBMzgyMDA0MEM4Ci06MTAxMUUwMDA5MEEyMDBCQzMwNDIwMDAyMTQ0MDAwMDIyNDAzMDAzNEVDCi06MTAxMUYwMDAyNDAzMDAzMDhGODIwMDI4QTM4MzAwMzA5MzgzMDA0MEIzCi06MTAxMjAwMDA4QzQyMDBDMEEzODAwMDRDQUY4MjAwNDQyNDAyMDAwNDQyCi06MTAxMjEwMDAxMDYyMDAzMDhGODQwMDQ0OEUyNDAwMDQ1MDgwMDAyRDIyCi06MTAxMjIwMDA4Rjg0MDA0NDhFMjIwMDEwMzA4M0ZGRkZBNzg0MDA0Mjg5Ci06MTAxMjMwMDAxMDYwMDAxRkFGODIwMDQ4OEY4MzAwMjgyNDA1RkY4MEM0Ci06MTAxMjQwMDAwMjIwMjAyMTkwNjIwMDYzMDBBMjEwMjQzMDQyMDBGRjlGCi06MTAxMjUwMDAxNDQwMDAwRDAwMDAwMDAwMEUwMDFBMDY5NzkwMDA0Mjk2Ci06MTAxMjYwMDAxMDQwMDAxMDAwNDAxODIxMjQwMkZGRkQ1NDYyMDAxMUJDCi06MTAxMjcwMDA4RTIzMDAyMDAyMDAyODIxMEUwMDE0MkEwMjIwMjAyMUEzCi06MTAxMjgwMDAwQTAwMUFFQzhFMjMwMDIwOTA2MjAwNjMwMEEyMTAyNDUyCi06MTAxMjkwMDAzMDQyMDBGRjEwNDAwMDAzMDIyMDIwMjEwRTAwMTc0RUI0Ci06MTAxMkEwMDAwMDAwMDAwMDk3ODIwMDQyMTQ0MEZGRTQ4RjgzMDAyODcyCi06MTAxMkIwMDA4RTIzMDAyMDMwNjIwMDA0MTA0MDAwMDY4Rjg0MDA0NDFBCi06MTAxMkMwMDAyNDAyRkZGQjAwNjIxMDI0MEUwMDE0M0VBRTIyMDAyMDE4Ci06MTAxMkQwMDA4Rjg0MDA0NDhGODMwMDI4OEZCRjAwMTg4RkIxMDAxNEMzCi06MTAxMkUwMDA4RkIwMDAxMDI0MDIwMDAxMjdCRDAwMjAwM0UwMDAwODk5Ci06MTAxMkYwMDBBQzY0MDBDMDMwQTUwMEZGMjQwMzAwMDEyNEE5MDAwMTU0Ci06MTAxMzAwMDAwMDY5MTAyQjEwNDAwMDBDMDAwMDQwMjEyNDBBMDAwMTRECi06MTAxMzEwMDAwMEEzMTAyMzAwNEEzODA0MjQ2MzAwMDEzMDgyMDAwMTM2Ci06MTAxMzIwMDAwMDY5MzAyQjEwNDAwMDAyMDAwNDIwNDIwMTA3NDAyNUQ0Ci06MTAxMzMwMDA1NEMwRkZGODAwQTMxMDIzMDNFMDAwMDgwMTAwMTAyMUFGCi06MTAxMzQwMDAyN0JERkZFMDNDMDIxRURDQUZCMjAwMThBRkIxMDAxNEI1Ci06MTAxMzUwMDBBRkJGMDAxQ0FGQjAwMDEwMzQ1MjZGNDEwMDAwODgyMUI1Ci06MTAxMzYwMDAyNDA1MDAwODBFMDAxQUZDMDIyMDIwMjEwMDExODA4MEI0Ci06MTAxMzcwMDAzQzA3MDgwMDI0RTc3MTk0MDAwMjE2MDAwMjA3MTgyMUI4Ci06MTAxMzgwMDBBQzYyMDAwMDAwMDAyODIxMjRBMjAwMDEzMDQ1RkZGRkNDCi06MTAxMzkwMDA4QzYyMDAwMDJDQTYwMDA4MDQ0MTAwMDIwMDAyMjA0MERDCi06MTAxM0EwMDAwMDkyMjAyNjE0QzBGRkY4QUM2NDAwMDAwMjA3ODAyMUUwCi06MTAxM0IwMDA4RTA0MDAwMDBFMDAxQUZDMjQwNTAwMjAyNjIzMDAwMUU0Ci06MTAxM0MwMDAzMDcxRkZGRjJFMjMwMTAwMTQ2MEZGRTVBRTAyMDAwMDI0Ci06MTAxM0QwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEE3Ci06MTAxM0UwMDAwM0UwMDAwODI3QkQwMDIwM0MwMjA4MDAyNDQyNkE4NDc0Ci06MTAxM0YwMDAzQzAxMDgwMEFDMjI3MTg4M0MwMjA4MDAyNDQyNTAwMEU1Ci06MTAxNDAwMDAzQzAxMDgwMEFDMjI3MThDMjQwMjAwMDYzQzAxMDgwMDVCCi06MTAxNDEwMDBBMDIyNzE5MDBBMDAxQjBGMDAwMDAwMDAyN0JERkZEODFBCi06MTAxNDIwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCRjAwMjBBRkIxMDAxNEMzCi06MTAxNDMwMDBBRkIwMDAxMDhGNTEwMTQwOEY0ODAxNDgwMDA4OTQwMjVFCi06MTAxNDQwMDAzMjQzMDBGRjMxMTMwMEZGOEY0MjAxQjgwNDQwRkZGRTFBCi06MTAxNDUwMDAyNzUwMDE4MEFFMTEwMDAwOEY0MjAxNDRBRTAyMDAwNDBCCi06MTAxNDYwMDAyNDAyMDAwMkE2MTIwMDA4QTIwMjAwMEIyNDAyMDAxNEFCCi06MTAxNDcwMDBBRTEzMDAyNDEwNjIwMDI1Mjg2MjAwMTUxMDQwMDAwOEY5Ci06MTAxNDgwMDAyNDAyMDAxNTI0MDIwMDEwMTA2MjAwMzAyNDAyMDAxMjExCi06MTAxNDkwMDAxMDYyMDAwOThGQkYwMDIwMEEwMDFDMzA4RkIzMDAxQ0FGCi06MTAxNEEwMDAxMDYyMDA2NzI0MDIwMDIyMTA2MjAwMzc4RkJGMDAyMDA0Ci06MTAxNEIwMDAwQTAwMUMzMDhGQjMwMDFDM0MwMjA4MDA4QzQyMzFBMDkzCi06MTAxNEMwMDAyNDAzRkY4MDAyMjIxMDIxMDA0MzEwMjRBRjQyMDAyNDk1Ci06MTAxNEQwMDAzQzAyMDgwMDhDNDIzMUEwMDIyMjEwMjEzMDQyMDA3RkUxCi06MTAxNEUwMDAwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjExNjYwMDBCMzcyCi06MTAxNEYwMDBBRjgzMDAyODkwNjIwMDYyMzA0MjAwMEYzNDQyMDAzMDE3Ci06MTAxNTAwMDBBMDYyMDA2MjBBMDAxQzJGOEZCRjAwMjAzQzA0NjAwMDE0Ci06MTAxNTEwMDA4QzgzMkMwODNDMDJGMDAzMzQ0MkZGRkYwMDYyMTgyNDQ1Ci06MTAxNTIwMDBBQzgzMkMwODNDMDIwODAwOEM0MjMxQTA4QzgzMkMwODMwCi06MTAxNTMwMDAyNDQyMDA3NDAwMDIxMDgyMDAwMjE0ODAwMDYyMTgyNTA4Ci06MTAxNTQwMDBBQzgzMkMwODBBMDAxQzJGOEZCRjAwMjAzQzAyMDgwMDJGCi06MTAxNTUwMDA4QzQyMzFBMDI0MDNGRjgwMDIyMjEwMjEwMDQzMTAyNDdBCi06MTAxNTYwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjMxQTAzQzAzMDAwQTM4Ci06MTAxNTcwMDAwMjIyMTAyMTMwNDIwMDdGMDM0MjEwMjEwMDQzMTAyMTNCCi06MTAxNTgwMDAwQTAwMUMyRUFGODIwMDI4M0MwMjA4MDA4QzQyMzFBMEM5Ci06MTAxNTkwMDAyNDA0RkY4MDAyMjIxMDIxMDA0NDEwMjRBRjQyMDAyNEMyCi06MTAxNUEwMDAzQzAyMDgwMDhDNDIzMUEwMDIyMjEwMjEzMDQyMDA3RjEwCi06MTAxNUIwMDAwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjE5MDYyMDA2Mzc1Ci06MTAxNUMwMDAwMDgyMTAyNDMwNDIwMEZGMTA0MDAwN0NBRjgzMDAyOENFCi06MTAxNUQwMDAyNDYyMDA4ODk0NDMwMDEyM0MwMjA4MDA4QzQyMzFBODI3Ci06MTAxNUUwMDAzMDYzM0ZGRjAwMDMxOTgwMDIyMjEwMjEwMDQzMTAyMUM1Ci06MTAxNUYwMDAzMDQzMDA3RjAzNDMxODIxMDA0NDEwMjQzQzA0MDAwQ0I2Ci06MTAxNjAwMDAwMDY0MTgyMUFGNDIwMDI4MEUwMDE1NUFBRjgzMDAyQzQ5Ci06MTAxNjEwMDA4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDBBRTExMDAwMDQwCi06MTAxNjIwMDA4RjQyMDE0NEFFMDIwMDA0MjQwMjAwMDJBNjEyMDAwODA4Ci06MTAxNjMwMDBBMjAyMDAwQkFFMTMwMDI0MEEwMDFDMkY4RkJGMDAyMDUzCi06MTAxNjQwMDAyNDA2RkY4MDAyMjYxMDI0QUY0MjAwMjAzQzAyMDgwMDNFCi06MTAxNjUwMDA4QzQyMzFBMDMxMDQzRkZGMDAwNDIxODAwMjIyMTAyMTdFCi06MTAxNjYwMDAwMDQ2MTAyNEFGNDIwMDI0M0MwMzA4MDA4QzYzMzFBOERDCi06MTAxNjcwMDAzQzAyMDgwMDhDNDIzMUEwMzIyNzAwN0YwMjIzMTgyMTRGCi06MTAxNjgwMDAwMjIyMTAyMTAwNjQxODIxMzA0MjAwN0YzMDY0MDA3RjY0Ci06MTAxNjkwMDAwMzQyMjgyMTNDMDIwMDBBMDA2NjE4MjQwMEEyMjgyMUU3Ci06MTAxNkEwMDAwMzQ0MjAyMTNDMDIwMDBDMDA4MjIwMjFBRjQzMDAyODhCCi06MTAxNkIwMDAzQzAyMDAwODAzNDcxODIxMDA2MjkwMjFBRjg1MDAyOEYyCi06MTAxNkMwMDBBRjg0MDAyQzBFMDAxNTVBMDEwMDgwMjE4RjQyMDFCODEyCi06MTAxNkQwMDAwNDQwRkZGRThGODIwMDJDOEY4NDAwMjgyNzQ1MDE4MDY0Ci06MTAxNkUwMDA5MDQyMDAwREFDQjEwMDAwQTRCMDAwMDYwMDAyMTYwMDRDCi06MTAxNkYwMDAwMDAyMTYwMzAwMDIxMDI3MDAwMjM3QzIxNEMwMDAxNkIxCi06MTAxNzAwMDAyNDgyMDA4ODk0NDIwMDEyMzIwMzNGRkYzMDQyM0ZGRkEwCi06MTAxNzEwMDAxNDQzMDAxMjI0MDI2MDgyOTA4MzAwNjMyNDAyRkY4MDNECi06MTAxNzIwMDAwMDQzMTAyNDMwNDIwMEZGNTA0MDAwMEMyNDAyNjA4MjJECi06MTAxNzMwMDA5MDgyMDA2MjMwNDIwMDBGMzQ0MjAwNDBBMDgyMDA2MjdBCi06MTAxNzQwMDAyNDAyNjA4NEE0QTIwMDA4MjQwMjAwMERBMEEyMDAwNUM3Ci06MTAxNzUwMDAwQTAwMUMxOTNDMDIyNzAwMjQwMjYwODJBNEEyMDAwODhGCi06MTAxNzYwMDBBMEEwMDAwNTNDMDIyNzAwMDAwNjFDMDAwMDYyMTgyNTBFCi06MTAxNzcwMDAyNDAyMDAwMkEwQTIwMDBCQUNBMzAwMTBBQ0EwMDAxNDM1Ci06MTAxNzgwMDBBQ0EwMDAyNEFDQTAwMDI4QUNBMDAwMkM4RTQyMDA0Q0UxCi06MTAxNzkwMDA4Rjg0MDAyQ0FDQTIwMDE4OTA4MzAwMEQyNDAyRkY4MERGCi06MTAxN0EwMDAwMDQzMTAyNDMwNDIwMEZGMTA0MDAwMDU4RkJGMDAyMDhFCi06MTAxN0IwMDA5MDgyMDAwRDMwNDIwMDdGQTA4MjAwMEQ4RkJGMDAyMDdDCi06MTAxN0MwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEJGCi06MTAxN0QwMDAzQzAyMTAwMDI3QkQwMDI4MDNFMDAwMDhBRjQyMDFCODFBCi06MTAxN0UwMDAwODAwNEMyODA4MDA0QzI4MDgwMDRCQTAwODAwNEJEOEUzCi06MTAxN0YwMDAwODAwNEMwQzA4MDA0QzMwMDgwMDRDMzAwODAwNEMzMEZECi06MDQxODAwMDAwODAwNEIxMDgxCi06MEMxODA0MDAwQTAwMDEyMjAwMDAwMDAwMDAwMDAwMDBBQgotOjEwMTgxMDAwMDAwMDAwMEQ3NDcwNjEzNDJFMzYyRTMxMzYwMDAwMDA0OQotOjEwMTgyMDAwMDQwNjEwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAotOjEwMTgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAotOjEwMTg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAotOjEwMTg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAotOjEwMTg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAotOjEwMTg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAotOjEwMTg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAotOjEwMTg5MDAwMTAwMDAwMDMwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMEQxQgotOjEwMThBMDAwM0MwMjA4MDAyNDQyMUI4MDNDMDMwODAwMjQ2MzIwMTRFRgotOjEwMThCMDAwQUM0MDAwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDRCNAotOjEwMThDMDAwM0MxRDA4MDAzN0JEMkZGQzAzQTBGMDIxM0MxMDA4MDA5MAotOjEwMThEMDAwMjYxMDA0ODgzQzFDMDgwMDI3OUMxQjgwMEUwMDAxNUExRgotOjEwMThFMDAwMDAwMDAwMDAwMDAwMDAwRDMwODRGRkZGMzA4MjAwMDc4MAotOjEwMThGMDAwOEY4NTAwMTgxMDQwMDAwMjI0ODMwMDA3MzA2NEZGRjgzMQotOjEwMTkwMDAwMDA4NTMwMjEzMEM0MUZGRjAzNDQxODIxMjQ3QjQwMDA5MAotOjEwMTkxMDAwQUY4NTAwMUNBRjg0MDAxODAzRTAwMDA4QUY0NDAwODRDQQotOjEwMTkyMDAwMzA4NEZGRkYzMDgyMDAwNzhGODUwMDIwOEY4NjAwMjhEQgotOjEwMTkzMDAwMTA0MDAwMDIyNDgzMDAwNzMwNjRGRkY4MDA4NTIwMjE1NgotOjEwMTk0MDAwMDA4NjE4MkIxNDYwMDAwMkFGODUwMDI0MDA4NjIwMjMzNwotOjEwMTk1MDAwMDM0NDI4MjEzNDA2ODAwMEFGODQwMDIwQUY0NDAwODA3NwotOjEwMTk2MDAwMDBBNjIwMjEwM0UwMDAwOEFGODQwMDM4MjdCREZGRDg3RgotOjEwMTk3MDAwQUZCMzAwMUNBRkIyMDAxOEFGQjAwMDEwQUZCRjAwMjQ2RgotOjEwMTk4MDAwQUZCNDAwMjBBRkIxMDAxNDNDMDg2MDA4OEQxNDUwMDBDMwotOjEwMTk5MDAwMjQxOEZGN0YzQzFBODAwMDAyOTg5ODI0MzY3MjM4MEM3NQotOjEwMTlBMDAwQUQxMjUwMDA4RjUxMDAwODNDMDc2MDFDM0MwODYwMDBERAotOjEwMTlCMDAwMzYzMDAwMDFBRjUwMDAwOEFGODAwMDE4QUY0MDAwODAwMwotOjEwMTlDMDAwQUY0MDAwODQ4Q0U2MDAwODhEMEYwODA4M0MwNzYwMTZDNQotOjEwMTlEMDAwOENFQzAwMDAzMUVFRkZGMDM5Q0EwMDEwM0MwREZGRkYyNwotOjEwMTlFMDAwMzQwQjgwMDAzQzAzMDA4MDAzNEI0ODIxMkQ0NDAwMDE1MAotOjEwMTlGMDAwMDE4RDI4MjQzQzAyNTM1MzNDMDEwODAwQUMyMzA0MjBGMQotOjEwMUEwMDAwQUY4OTAwMzhBRjg2MDAyOEFGODQwMDEwMjc1QjQwMDAwNAotOjEwMUExMDAwMTRBMjAwMDMzNEUzN0MwMDhDRjkwMDA0MDMyODE4MjE4RAotOjEwMUEyMDAwOEM3RjAwN0M4QzY1MDA3ODNDMDI4MDAwMzQ1MjAwNzAxMgotOjEwMUEzMDAwQUY4NTAwM0NBRjlGMDA0MDNDMTMwODAwMjY3MzFCQzREOQotOjEwMUE0MDAwMDI0MEEwMjE4RTQ4MDAwMDhGNDYwMDAwMzhDMzAwMDFFQwotOjEwMUE1MDAwMzA2NDAwMDExMDgwMDAxN0FGODgwMDM0MDI4MDQ4MjFGNAotOjEwMUE2MDAwOEQyRDAwMDAzQzE5MDgwMDhGMzkwNDVDM0MxMTA4MDBFMgotOjEwMUE3MDAwOEUzMTA0NTgwMUE4RjgyMzAzM0Y3ODIxMDAwMDQwMjE0QgotOjEwMUE4MDAwMDIyODM4MjEwMUZGODAyQjAwRjA3MDIxM0MwMTA4MDA2MgotOjEwMUE5MDAwQUMyRjA0NUMzQzAxMDgwMEFDMkUwNDU4OEY0QzAwMDBCNQotOjEwMUFBMDAwMzk4QjAwMDEzMTZBMDAwMTE1NDBGRkVEMDFBMDQwMjE5MgotOjEwMUFCMDAwQUY4RDAwMzQ4RTRFMDAwMDNDMEMwODAwOEQ4QzA0NUMxMQotOjEwMUFDMDAwM0MwQTA4MDA4RDRBMDQ1ODAxQzg2ODIzMDE4RDI4MjE2QQotOjEwMUFEMDAwMDAwMDU4MjEwMEFEMzAyQjAxNEIyMDIxMDA4NjEwMjE0MQotOjEwMUFFMDAwM0MwMTA4MDBBQzI1MDQ1QzNDMDEwODAwQUMyMjA0NTgxMQotOjEwMUFGMDAwOEY0NTAxMDg4RjQ0MDEwMDMwQTkyMDAwQUY4NTAwMDAwOAotOjEwMUIwMDAwQUY4NDAwMEMxMTIwMDAwQTAwQTAzMDIxM0MwNzA4MDAxRgotOjEwMUIxMDAwOENFNzA0MkMyNEVGMDAwMTNDMDEwODAwQUMyRjA0MkNCRQotOjEwMUIyMDAwM0MxMDQwMDBBRjUwMDEzODBBMDAwMTkwMDAwMDAwMDA1NgotOjEwMUIzMDAwMzBCMDAyMDAxNjAwMDAxNDI0MTEwRjAwMTA5MTAwMTJBMgotOjEwMUI0MDAwMjQwNzBEMDAxMDg3MDIzMzMwQjAwMDA2NTIwMEZGRjU2NQotOjEwMUI1MDAwM0MxMDQwMDA5MzZEMDAwMDI0MEMwMDEwMzFBNjAwRjBGMgotOjEwMUI2MDAwMTBDQzAyNjkyNDBFMDA3MDEwQ0UwMkREOEY4QjAwMTRBMQotOjEwMUI3MDAwMjU2NzAwMDFBRjg3MDAxNDNDMTA0MDAwQUY1MDAxMzhDQQotOjEwMUI4MDAwMEEwMDAxOTAwMDAwMDAwMDk3NDgwMTA0MTEwMEZGRTVFMQotOjEwMUI5MDAwM0MxMDQwMDAzMEI4NDAwMDE3MDAwMEEyMDAwMDAwMDBEOAotOjEwMUJBMDAwOEY1OTAxNzgwNzIwRkZGRThGODcwMDM4MjQwOTAwMDgyRAotOjEwMUJCMDAwMjQwNTA4MDA4Q0UzMDAwOEFGNDUwMTc4QTc0OTAxNDBERgotOjEwMUJDMDAwQTc0MDAxNDI5NzQyMDEwNDhGODYwMDAwMzA0OUZGRkY4MQotOjEwMUJEMDAwMzBERjAwMDExM0UwMDJENTAxMjA0MDIxMjUyNEZGRkU2MwotOjEwMUJFMDAwMjQwQTAwMDJBNzRBMDE0NjMwODhGRkZGQTc0NDAxNDhBMwotOjEwMUJGMDAwM0MwQjA4MDA4RDZCMDQzQzE1NjAwMkM0OEY4RjAwMENGOQotOjEwMUMwMDAwMzBDMzAwMjAxNDYwMDAwMjI0MDQwMDA5MjQwNDAwMDFGMQotOjEwMUMxMDAwMzBDRDBDMDAyNDBDMDQwMDUxQUMwMDAxMzQ4NDAwMDRDRAotOjEwMUMyMDAwQTc0NDAxNEEzQzA1MDgwMDhDQTUwNDIwM0MwMjAwNDg1QQotOjEwMUMzMDAwM0MxOTAwMDEwMEEyRjgyNTMwRDgwMDAyMDNGOTI4MjUzQwotOjEwMUM0MDAwMTMwMDAwMDQwMDAwMTgyMTNDMDQwMTAwMDBBNDI4MjUxMgotOjEwMUM1MDAwMjQwMzAwMDEzMENBMDAwNDUxNDAwMDA1QUY4MzAwMDg4RQotOjEwMUM2MDAwM0MwNjAwMTAwMEE2MjgyNTI0MDMwMDAxQUY4MzAwMDhDRAotOjEwMUM3MDAwQUY0NTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAotOjEwMUM4MDAwMDAwMDAwMDA4RjgzMDAwODEwNjAwMDIzMDAwMDAwMDBBNwotOjEwMUM5MDAwOEY0QjEwMDAwNTYxRkZGRTAwMDAwMDAwMTA2MDAwMUU2OQotOjEwMUNBMDAwMDAwMDAwMDA4RjREMTAwMDNDMDMwMDIwMDFBMzYwMjRDMQotOjEwMUNCMDAwMTE4MDAwMTk4RjhGMDAwMDMxRUUwMDAyMTFDMDAwMTY1NAotOjEwMUNDMDAwMDAwMDAwMDA5NzUwMTAxNDE2MDAwMDEzMDAwMDAwMDBFMAotOjEwMUNEMDAwOTc0NTEwMDgzMEJGRkZGRjI3RjgwMDA2MDAxOEM4ODI5QwotOjEwMUNFMDAwMDAxOTMwODAwMEM3MjgyMTMzMTEwMDAxMzMwMzAwMDM5RAotOjEwMUNGMDAwMTIyMDAzMjA4Q0EyMDAwMDAwMDAwMDBEMDBDN0Y4MjE3NAotOjEwMUQwMDAwQUZFMjAwMDAzQzE5MDgwMDhGMzkwNDMwMjcyNjAwMDE5QgotOjEwMUQxMDAwM0MwMTA4MDBBQzI2MDQzMDhGNkEwMDAwMzQwNUZGRkY0OAotOjEwMUQyMDAwQUY4QTAwMDQ4Q0UyMDAwMDEwNDUwMjlBMDAwMDIwMjFENgotOjEwMUQzMDAwOENFNTAwMDAzMEJGMDEwMDEzRTAwMjdFMDEwMDIwMjE4RAotOjEwMUQ0MDAwM0MwNzA4MDA4Q0U3MDQ3NDNDMTAwODAwOEUxMDA0NEMxQgotOjEwMUQ1MDAwMDBFODU4MjEzQzE4MDgwMDhGMTgwNDcwMDE2ODg4MkI4RgotOjEwMUQ2MDAwM0MwODA4MDA4RDA4MDQ0ODAwMDA3ODIxMDIwNDYwMjEyNgotOjEwMUQ3MDAwMDMwRjE4MjEwMTg0NzAyQjAxMEY2ODIxMDA3MTUwMjE3RAotOjEwMUQ4MDAwMDFBRTEwMjEzQzAxMDgwMEFDMkMwNDRDM0MwMTA4MDBDMQotOjEwMUQ5MDAwQUMyMjA0NDgzQzAxMDgwMEFDMkIwNDc0M0MwMTA4MDA1MAotOjEwMURBMDAwQUMyQTA0NzA4RjhEMDAxODAxMjAzMDIxMzEyOTAwMDdFMgotOjEwMURCMDAwMjVBRTAwMDgzMUMyMUZGRjAzNDI2MDIxQUY4RDAwMUMxOQotOjEwMURDMDAwQUY4MjAwMTgyNTlCNDAwMEFGNDIwMDg0MTEyMDAwMDMyMQotOjEwMUREMDAwOEY5MDAwMjAyNEM4MDAwNzMxMDZGRkY4OEY4NDAwMjg2OAotOjEwMURFMDAwMDBEMDI4MjEwMEE0NzgyQjE1RTAwMDAyQUY5MDAwMjQzOQotOjEwMURGMDAwMDBBNDI4MjMwMzQ1MjAyMTM0MDM4MDAwMDA4MzEwMjEwMAotOjEwMUUwMDAwM0MwNjEwMDBBRjg1MDAyMEFGODIwMDM4QUY0NTAwODA0RgotOjEwMUUxMDAwQUY0NjAxNzg4RjhCMDAxNDI1NjcwMDAxMEEwMDAxRERCMQotOjEwMUUyMDAwQUY4NzAwMTQ4RjYyMDAwODhGNjcwMDAwMjQxMTAwMzAxNAotOjEwMUUzMDAwMDAwN0M2MDIzMzAzMDBGMDEwNzEwMEEyMjQxOTAwNDAwRAotOjEwMUU0MDAwMTQ3OUZGNEI4RjhCMDAxNDhGNEEwMTc4MDU0MEZGRkVGOQotOjEwMUU1MDAwMzBBNzAyMDAxNEUwMDAwMzAwMDUxMjgyMDAwMDAwMEQwQwotOjEwMUU2MDAwMDAwNTEyODIzMDUwMDAwMzAwMTA0OTAwMDEzMDcwMjEzQgotOjEwMUU3MDAwMDAwRTY4ODAwMUIwNjAyMTAwMEM1ODgwMDE3MzgwMjE0MQotOjEwMUU4MDAwOEUwODAwMDAxNTAwMDAwMjAwMDAwMDAwMDAwMDAwMEQ5OAotOjEwMUU5MDAwOEY2RjAwMDQwNUUyMDJCMTkyMDMwMDA2OTIwNzAwMDU2RAotOjEwMUVBMDAwOTIwRjAwMDQzQzAyMDAwMTAwMDcyODgwMDBCMDYwMjE2RQotOjEwMUVCMDAwOEQ4OTAwMTgyNzcxMDAwODI1RUUwMDA1MDEyMjY4MjE5MAotOjEwMUVDMDAwMDAwRTMwODJBRDhEMDAxODAyMjAyMDIxMEUwMDA1ODAwQQotOjEwMUVEMDAwMjYwNTAwMTQ5MjBCMDAwNjhGN0YwMDA0M0MwODdGRkY0QwotOjEwMUVFMDAwMDAwQjIwODAwMDkxMzAyMThDQzMwMDA0MzUwQUZGRkZENQotOjEwMUVGMDAwMDNFQUM4MjQwMDc5QzAyMUFDRDgwMDA0OTIwNzAwMDU4OQotOjEwMUYwMDAwOTIwOTAwMDQ5NjBEMDAwODAwMDcyODgwMDBCMUY4MjEwRQotOjEwMUYxMDAwOEZFRjAwMDA5NzQyMDEwNDNDMDdGRkZGMDFFNzUwMjRDOAotOjEwMUYyMDAwMzA0RUZGRkYwMUM5NjAyMTAxOEQ1ODIzMzE2OEZGRkY0QQotOjEwMUYzMDAwMDE0ODIwMjVBRkU0MDAwMDkyMDMwMDA3MjQxOTAwMDFBNgotOjEwMUY0MDAwMTA3OTAyNjkyNDA2MDAwMzEwNjYwMjc5MDAwMDAwMDA3RgotOjEwMUY1MDAwOEUxOTAwMTAyNDFGMDAwQUE3NUYwMTQwQTc1OTAxNDJGMwotOjEwMUY2MDAwOTIwMzAwMDQ4Rjg2MDAwMDI0MDcwMDAxQTc0MzAxNDQ2OAotOjEwMUY3MDAwQTc0MDAxNDY5NzU4MDEwNDMwRDEwMDAyM0MwNTAwNDFCQQotOjEwMUY4MDAwQTc1ODAxNDgwMDAwMTgyMUE3NDcwMTRBMTIyMDAwMDM2MgotOjEwMUY5MDAwMzBDQTAwMDQzQzA1MDE0MTI0MDMwMDAxNTE0MDAwMDUwMgotOjEwMUZBMDAwQUY4MzAwMDgzQzA4MDAxMDAwQTgyODI1MjQwMzAwMDE4NgotOjEwMUZCMDAwQUY4MzAwMDhBRjQ1MTAwMDAwMDAwMDAwMDAwMDAwMDBFMwotOjEwMUZDMDAwMDAwMDAwMDAwMDAwMDAwMDhGOEIwMDA4MTE2MDAwMDQ3QQotOjEwMUZEMDAwMDAwMDAwMDA4RjQ0MTAwMDA0ODFGRkZFMDAwMDAwMDA5QwotOjEwMUZFMDAwOEY2QTAwMDA5MjA3MDAwNDNDMDUwODAwOENBNTA0NDQ5OQotOjEwMUZGMDAwQUY4QTAwMDQ5NzVGMDEwNDNDMEYwODAwOERFRjA0NDA5NgotOjEwMjAwMDAwMzBFMzAwRkYzM0Y5RkZGRjAwNzlDMDIxMDBCODY4MjFGOQotOjEwMjAxMDAwMDAwMDEwMjEyNEU2MDAwQTMwQzhGRkZGMDFCODQ4MkI1OQotOjEwMjAyMDAwMDFFMjcwMjEwMUM5NjAyMTMxMTAwMDA3M0MwMTA4MDA2NAotOjEwMjAzMDAwQUMyRDA0NDQzQzAxMDgwMEFDMkMwNDQwMTIwMDAwMDMwOQotOjEwMjA0MDAwOEY4RDAwMTgyNTBCMDAwNzMxNjhGRkY4MDEwRDcwMjFGNgotOjEwMjA1MDAwMzFDQzFGRkZBRjhEMDAxQ0FGOEMwMDE4QUY0QzAwODQzQgotOjEwMjA2MDAwOTc0NDAxMDQwMzRDODAyMTMwODRGRkZGMzA4ODAwMDcyRgotOjEwMjA3MDAwMTEwMDAwMDMyNjFCNDAwMDI0ODkwMDA3MzEyNEZGRjhDQgotOjEwMjA4MDAwOEY4MjAwMjA4Rjg1MDAyODAwODIyMDIxMDA4NTc4MkJGOAotOjEwMjA5MDAwMTVFMDAwMDJBRjgyMDAyNDAwODUyMDIzMDM0NDg4MjEzQwotOjEwMjBBMDAwMzQwNTgwMDAwMjI1MTAyMTNDMDYxMDAwQUY4NDAwMjA3QQotOjEwMjBCMDAwQUY4MjAwMzhBRjQ0MDA4MEFGNDYwMTc4MEEwMDAyODU0NQotOjEwMjBDMDAwOEY4QjAwMTQ4RjVGMDE3ODA3RTBGRkZFMzBBQTAyMDBCQgotOjEwMjBEMDAwMTU0MDAwMDMwMDA1NDI4MjAwMDAwMDBEMDAwNTQyODIwOQotOjEwMjBFMDAwMzEwMjAwMDMwMDAyNzEwMDAxQzI2ODIxMDAwRDYwODAwRQotOjEwMjBGMDAwMDE4MjQ4MjEwMDA5Mjg4MDAwQjM4MDIxOEUwQjAwMDA1NgotOjEwMjEwMDAwMTE2MDAwMDIwMDAwMDAwMDAwMDAwMDBEOEY2RjAwMEM0NQotOjEwMjExMDAwMDVFMDAxRjM4Rjg3MDAzODI0MTkwMDAxQUUxOTAwMDA5MwotOjEwMjEyMDAwOENFMzAwMDhBMjAwMDAwNzhGNzgwMDA0MDAxODFDMDI0RQotOjEwMjEzMDAwMzA2NjAwRkYyNEQxMDAwNTAwMTEzMDgzMkNDNDAwNDExQgotOjEwMjE0MDAwMTQ4MDAwMDJBMjAzMDAwNDAwMDAwMDBEOEY2QjAwMDQ0NQotOjEwMjE1MDAwM0MwRUZGRkYwMEUwMjgyMTMxNjRGRkZGMjQ4RjAwMEJCRAotOjEwMjE2MDAwMDAwRjQwODIwMDA4MTA4MDAwNDc0ODIxOEQyRDAwMDA5QwotOjEwMjE3MDAwMjYwNDAwMTRBNjBCMDAwODAxQUU2MDI0MEUwMDA1ODBBMgotOjEwMjE4MDAwQUQyQzAwMDA4RjVGMDEwODNDMEExMDAwMDNFQTM4MjRFMAotOjEwMjE5MDAwMTBFMDAxQTMwMDAwMDAwMDk3NDYwMTA0OTIwMzAwMDcyRAotOjEwMjFBMDAwMjREMUZGRUMzNDY1MDAwMjMyMjRGRkZGQTIwNTAwMDdCMgotOjEwMjFCMDAwOTYwNjAwMDgyQ0M3MDAxMzU0RTAwMDA1OTIwMzAwMDdBMAotOjEwMjFDMDAwOTIwQTAwMDczNTVGMDAwMUEyMUYwMDA3OTIwMzAwMDc3MwotOjEwMjFEMDAwMjQwQjAwMDExMDZCMDFCQTI0MDkwMDAzMTA2OTAxQ0QyMgotOjEwMjFFMDAwOEY4ODAwMzgzMENGRkZGRjI1RTQwMDAyMDAwNEM4ODM0OQotOjEwMjFGMDAwMzMzRjAwRkYwMDFGMjg4MEEyMTkwMDA1MDBBODU4MjFDNgotOjEwMjIwMDAwOEQ3ODAwMDA5NzUxMDEwNDNDMDNGRkZGMDMwMzYwMjQxNQotOjEwMjIxMDAwMzIyMkZGRkYwMDRGNzAyMzI1Q0RGRkZFMDE4RDQ4MjVBMAotOjEwMjIyMDAwQUQ2OTAwMDA5MjA2MDAwNTNDMDJGRkY2MzQ0RUZGRkY0OAotOjEwMjIzMDAwMzBDQTAwRkYwMDBBMzg4MDAwRjAyMDIxOTA5OTAwMTQ3NQotOjEwMjI0MDAwM0MxRkZGN0YzN0U3RkZGRjMzMjMwMDBGMDA2Njc4MjEzNQotOjEwMjI1MDAwMzFGODAwRkYwMDE4Mjg4MDAwQjA4ODIxOEUyRDAwMjA2MgotOjEwMjI2MDAwMDBBODYwMjFBMjBGMDAwNjAxQUU0ODI0QUUwRDAwMENBQwotOjEwMjI3MDAwQUQ4OTAwMEM5MjBCMDAwNjhFMDQwMDBDMDEyN0Y4MjQ5NwotOjEwMjI4MDAwMDAwQjUwODAwMTUwQzgyMTk3MjYwMDI2MDE0OEMwMjEyQwotOjEwMjI5MDAwMDA4NzQwMjRBRjI2MDAyNEFFMDgwMDBDQUYzRjAwMjA4QQotOjEwMjJBMDAwQUYwNjAwMTA4Rjg2MDAwMDI0MEMwMDEwMjQwOTAwMDJFNQotOjEwMjJCMDAwQTc0QzAxNDBBNzQwMDE0MkE3NDAwMTQ0QTc0OTAxNDY1RAotOjEwMjJDMDAwOTc0QjAxMDQyNDA3MDAwMTMwQzgwMDAyMjU2QUZGRkU3NQotOjEwMjJEMDAwQTc0QTAxNDgzQzA1MDAwOUE3NDcwMTRBMTEwMDAwMDMyRAotOjEwMjJFMDAwMDAwMDE4MjEzQzA1MDEwOTI0MDMwMDAxMzBDRDAwMDQ0MQotOjEwMjJGMDAwNTFBMDAwMDVBRjgzMDAwODNDMDYwMDEwMDBBNjI4MjU2OQotOjEwMjMwMDAwMjQwMzAwMDFBRjgzMDAwOEFGNDUxMDAwMDAwMDAwMDA2NwotOjEwMjMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIxODAwMDQwRgotOjEwMjMyMDAwMjcxMTAwMDIzMjJGMDAwNzAwMEYxMDIzMzA0RTAwMDc0NAotOjEwMjMzMDAwQUUwRTAwMTA4RjkwMDAwODEyMDAwMDA0MDAwMDAwMDA5NAotOjEwMjM0MDAwOEY0MzEwMDAwNDYxRkZGRTAwMDAwMDAwOEY3ODAwMDA0MgotOjEwMjM1MDAwOEY4RjAwMTgzQzEwMDgwMDhFMTAwNDQ0QUY5ODAwMDRDMgotOjEwMjM2MDAwOTc1MTAxMDQyNUU2MDAxMDMwQ0ExRkZGMzIyMkZGRkZGQgotOjEwMjM3MDAwQUY4RjAwMUNBRjhBMDAxOEFGNEEwMDg0MjQ0OUZGRkVDQgotOjEwMjM4MDAwM0MwQjA4MDA4RDZCMDQ0MDk3NEUwMTA0MDEyMDY4MjEyRQotOjEwMjM5MDAwMDAwOTY3QzMwMjBEMjgyMTMxQzlGRkZGMDBBRDQwMkJBMgotOjEwMjNBMDAwMDE2QzM4MjEwMEU4MjAyMTAzNEFGODIxMzEzOTAwMDc2NwotOjEwMjNCMDAwM0MwMTA4MDBBQzI1MDQ0NDNDMDEwODAwQUMyNDA0NDA2NgotOjEwMjNDMDAwMTMyMDAwMDMyN0ZCNDAwMDI1MjMwMDA3MzA2OUZGRjg5NgotOjEwMjNEMDAwOEY5RjAwMjA4Rjg0MDAyODAxM0YzODIxMDBFNEM4MkIwNAotOjEwMjNFMDAwMTcyMDAwMDJBRjlGMDAyNDAwRTQzODIzMDM0NzIwMjE3OAotOjEwMjNGMDAwMzQwNTgwMDAwMDg1MTAyMTNDMDYxMDAwQUY4NzAwMjBDNgotOjEwMjQwMDAwQUY4MjAwMzhBRjQ3MDA4MEFGNDYwMTc4MEEwMDAyODVFRQotOjEwMjQxMDAwOEY4QjAwMTQ5NzU4MDEwNDEzMDBGREMyM0MxMDQwMDAzQwotOjEwMjQyMDAwOEY0MzAxNzgwNDYwRkZGRTMwQjk0MDAwMTMyMDAwMDNBMQotOjEwMjQzMDAwM0MwNDAwMDgwMDAwMDAwRDNDMDQwMDA4QUY0NDAxNDBDQgotOjEwMjQ0MDAwMjQwODA4MDBBRjQ4MDE3ODhGOEIwMDAwOTc0QTAxMDRFOAotOjEwMjQ1MDAwMzE3RjAwMDExM0UwMDBFOTMxNDZGRkZGMjREMEZGRkU4OQotOjEwMjQ2MDAwMjQwQzAwMDJBNzRDMDE0NkE3NTAwMTQ4OEY4RjAwMTg4QQotOjEwMjQ3MDAwMjQwNTAwMERBNzQ1MDE0QThGNzEwMDAwMjVFMjAwMDhFMAotOjEwMjQ4MDAwMzA0OTFGRkYwMzQ5NzAyMTMwQ0QwMDA3QUY5MTAwMDQ5MAotOjEwMjQ5MDAwQUY4RjAwMUNBRjg5MDAxODAwQzAzODIxQUY0OTAwODRGRAotOjEwMjRBMDAwMTFBMDAwMDMyNURCNDAwMDI0QzYwMDA3MzBDN0ZGRjg1OQotOjEwMjRCMDAwOEY5ODAwMjA4Rjg0MDAyODAwRjgzMDIxMDBDNDM4MkIyQQotOjEwMjRDMDAwMTRFMDAwMDJBRjk4MDAyNDAwQzQzMDIzOEY4QTAwMTQ2NwotOjEwMjREMDAwMDM0NjU4MjEzNDA4ODAwMDAxNjhGODIxMjU1OTAwMDE3RAotOjEwMjRFMDAwM0MwMzEwMDAzQzEwNDAwMEFGODYwMDIwQUY5RjAwMzgzNgotOjEwMjRGMDAwQUY0NjAwODBBRjQzMDE3OEFGOTkwMDE0QUY1MDAxMzg2OAotOjEwMjUwMDAwMEEwMDAxOTAwMDAwMDAwMDhGNjkwMDAwOTc0NDAxMDQ1OAotOjEwMjUxMDAwMzEyN0ZGRkYzMDg4RkZGRjhGNEYwMTc4MDVFMEZGRkU3NgotOjEwMjUyMDAwMzBGRjAwMDcwMDFGMTgyMzMwNzgwMDA3MjRFNkZGRkU2NQotOjEwMjUzMDAwMjQxOTAwMEFBNzU5MDE0MEE3NTgwMTQyQTc0NjAxNDQ5RgotOjEwMjU0MDAwQTc0MDAxNDZBNzQ4MDE0ODhGNDIwMTA4MzA1MTAwMjBBQQotOjEwMjU1MDAwMTYyMDAwMDIyNDAzMDAwOTI0MDMwMDAxMzBBQTAwMDIwRgotOjEwMjU2MDAwQTc0MzAxNEEzQzA0MDA0MTExNDAwMDAzMDAwMDE4MjEyOAotOjEwMjU3MDAwM0MwNDAxNDEyNDAzMDAwMTMwQUIwMDA0NTE2MDAwMDUxQwotOjEwMjU4MDAwQUY4MzAwMDgzQzA1MDAxMDAwODUyMDI1MjQwMzAwMDFDRQotOjEwMjU5MDAwQUY4MzAwMDhBRjQ0MTAwMDAwMDAwMDAwMDAwMDAwMDBGRQotOjEwMjVBMDAwMDAwMDAwMDAwMDAwMDAwMDhGOTAwMDA4MTIwMDAwMDRFRQotOjEwMjVCMDAwMDAwMDAwMDA4RjRDMTAwMDA1ODFGRkZFMDAwMDAwMDBBRAotOjEwMjVDMDAwOEY3ODAwMDAyNzYyMDAwODhGOEQwMDNDQUY5ODAwMDREMAotOjEwMjVEMDAwOTQ0NjAwMDg5NDUxMDAwQTk0NEYwMDBDMzBDRUZGRkYzRgotOjEwMjVFMDAwMDAxMTI0MDAzMUU5RkZGRjExQ0QwMEEyMDA4OTIwMjU1MAotOjEwMjVGMDAwM0MwMzA4MDA4QzYzMDQ0NDNDMTgwODAwOEYxODA0NDAxNgotOjEwMjYwMDAwMDBFODUwMjEyNTVGRkZGRTAwN0Y3ODIxMDAwMDEwMjFBNwotOjEwMjYxMDAwMDFGRjMwMkIwMzAyODgyMTAyMjY0ODIxM0MwMTA4MDBEQgotOjEwMjYyMDAwQUMyRjA0NDQzQzAxMDgwMEFDMjkwNDQwMjRFQjAwMDgxMgotOjEwMjYzMDAwMzE2MkZGRkYzMDQ3MDAwNzEwRTAwMDAzOEY4NTAwMTg2QwotOjEwMjY0MDAwMjQ1MDAwMDczMjAyRkZGODMxMDZGRkZGMzBDODAwMDdCMAotOjEwMjY1MDAwMDA0NTcwMjEzMUNEMUZGRjAzNEQ2MDIxQUY4NTAwMUM2NwotOjEwMjY2MDAwQUY4RDAwMTgyNTlCNDAwMEFGNEQwMDg0MTEwMDAwMDM4MgotOjEwMjY3MDAwOEY4RjAwMjAyNEM0MDAwNzMwODZGRkY4OEY4NDAwMjg0NQotOjEwMjY4MDAwMDBDRjI4MjEwMEE0NDgyQjE1MjAwMDAyQUY4RjAwMjQ4MgotOjEwMjY5MDAwMDBBNDI4MjNBRjg1MDAyMEFGNDUwMDgwM0MxMTA4MDAyRQotOjEwMjZBMDAwOEUzMTA0MzQwMzQ1QzAyMTM0MDI4MDAwMDMwMjMwMjFGRQotOjEwMjZCMDAwMTIyMDAwMDVBRjg2MDAzODkzODMwMDE3MjQxOTAwMEVGRQotOjEwMjZDMDAwMTA3OTAwMEQyNDFGMDQzRjNDMEExMDAwQUY0QTAxNzgyNgotOjEwMjZEMDAwOEY4QjAwMTQyNTY3MDAwMTBBMDAwMUREQUY4NzAwMTQwRAotOjEwMjZFMDAwMEUwMDA1QTYzQzEwNDAwMDhGOEIwMDE0MjU2NzAwMDFFQQotOjEwMjZGMDAwMEEwMDAxREVBRjg3MDAxNDNDMEExMDAwQTc1RjAxNDgwMgotOjEwMjcwMDAwQUY0QTAxNzgwQTAwMDRCNDhGOEIwMDE0MjQwRTBGMDAyNgotOjEwMjcxMDAwMTFFRTAwM0QzMEQxMDAyMDE2MjAwMDAyMjQwMzAwMDlGNAotOjEwMjcyMDAwMjQwMzAwMDEwQTAwMDIwOEE3NDMwMTRBMEEwMDAxRkIzMgotOjEwMjczMDAwQTc0MDAxNDY5NEU1MDAwODk0RTIwMDBBOTRFQjAwMENERgotOjEwMjc0MDAwOEY4NjAwM0MwMDAyRkMwMDMxNkFGRkZGMzBCOUZGRkZCQQotOjEwMjc1MDAwMTMyNjAwMzcwM0VBMjAyNTNDMDUwODAwOENBNTA0NDQxNQotOjEwMjc2MDAwM0MxRjA4MDA4RkZGMDQ0MDAwMDA1MDIxMDBBODM4MjFDMgotOjEwMjc3MDAwMDBFODMwMkIwM0VBQzgyMTAzMjZDMDIxM0MwMTA4MDBGMQotOjEwMjc4MDAwQUMyNzA0NDQzQzAxMDgwMEFDMzgwNDQwMEEwMDAyNjk0QwotOjEwMjc5MDAwOEY4RDAwMTgzQzE5MDgwMDhGMzkwNDdDM0MwMzA4MDAxOQotOjEwMjdBMDAwOEM2MzA0NTQzQzA2MDgwMDhDQzYwNDc4M0MwRjA4MDA3NwotOjEwMjdCMDAwOERFRjA0NTAwMzI4MzgyMTAwNjg2ODIxMDBFOEMwMkIwMQotOjEwMjdDMDAwMDBDNDg4MjEwMUE4NDAyQjAxRTQ3MDIxMDIzODU4MjE1RgotOjEwMjdEMDAwMDFDODYwMjEzQzAxMDgwMEFDMkQwNDU0M0MwMTA4MDBGNAotOjEwMjdFMDAwQUMyQzA0NTAzQzAxMDgwMEFDMjcwNDdDM0MwMTA4MDBFMAotOjEwMjdGMDAwQUMyQjA0NzgwQTAwMDI2OThGOEQwMDE4QTc0MDAxNDZBRgotOjEwMjgwMDAwMEEwMDA0MUI4RjhGMDAxODMwRDAwMDIwMTYwMEZGQzU2RgotOjEwMjgxMDAwMjQwMzAwMEQyNDAzMDAwNTBBMDAwMjA4QTc0MzAxNEEwRgotOjEwMjgyMDAwOTc1OTAxMDQyNzM4RkZGMDBBMDAwMzZCMzMwNEZGRkZCOAotOjEwMjgzMDAwOEY4QzAwNDAxNDhDRkZDODAwMDA4MDIxM0MxMTA4MDBFMAotOjEwMjg0MDAwOEUzMTA0NkMzQzA0MDgwMDhDODQwNDY4MDIyODcwMjFEQQotOjEwMjg1MDAwMDFDODc4MkIwMDkwNDAyMTAxMEY2ODIxM0MwMTA4MDAzRAotOjEwMjg2MDAwQUMyRTA0NkMzQzAxMDgwMEFDMkQwNDY4MEEwMDAyNjkxRgotOjEwMjg3MDAwOEY4RDAwMTg4Rjk5MDA0MDE0OTlGRjVEMDAwMDYwMjEzMgotOjEwMjg4MDAwM0MwNTA4MDA4Q0E1MDQ2QzNDMTAwODAwOEUxMDA0NjgwMAotOjEwMjg5MDAwMDBFODIwMjEyNDhFRkZGRTAwQUVGODIxMDNFRTU4MkIyNQotOjEwMjhBMDAwMDIwQzUwMjEwMTRCMTgyMTNDMDEwODAwQUMzRjA0NkM4NAotOjEwMjhCMDAwM0MwMTA4MDBBQzIzMDQ2ODBBMDAwNDhCMjRFQjAwMDhFOAotOjEwMjhDMDAwOEY4ODAwMzgzQzAyRkZGRjhEMEUwMDBDMDFDMjY4MjQ4NwotOjEwMjhEMDAwMDFBNDYwMjVBRDBDMDAwQzBBMDAwMzc5MzBDRkZGRkY4NgotOjEwMjhFMDAwMEEwMDAzQTlBRTAwMDAwMDk3NEIwMTA0OTIwNDAwMDQwMwotOjEwMjhGMDAwOEUyQTAwMEMwMTY0NDAyMTI1MUZGRkYyMDE0NzE4MjQ5NQotOjEwMjkwMDAwMzNGOUZGRkYwMDc5QzAyNUFFMzgwMDBDMEEwMDAyRDQ2RAotOjEwMjkxMDAwOEUxOTAwMTAzQzAzRkZGRjhEMTEwMDEwMDIyMzI4MjRBNAotOjEwMjkyMDAwMDBBNDc4MjVBRDBGMDAxMDBBMDAwMzc5MzBDRkZGRkYxNwotOjEwMjkzMDAwOTc0NTAxMDQ5MjA2MDAwNDhFMkYwMDEwMDBBNjEwMjE3NgotOjEwMjk0MDAwMjQ0OUZGRUUwMUU3NjgyNDMxMkVGRkZGMDFBRTYwMjUyOAotOjEwMjk1MDAwQUUyQzAwMTAwQTAwMDJENDhFMTkwMDEwOEUwNjAwMEM1NgotOjEwMjk2MDAwQUUwMDAwMDAwMDAzQzA4MDAzMTA4ODIxMEEwMDAyQTYwOAotOjEwMjk3MDAwQUUyNjAwMjAxNDYwMDAwRDMwNTBGRkZGM0MwNEZGRkYyNgotOjEwMjk4MDAwMDA0NDYwMjQwMTg0NjgyNjAwMEQ1ODJCMDAwQzUwMkI1NQotOjEwMjk5MDAwMDE0QjEwMjQxMDQwMDAwMjAwMDAwMDAwMDAwMDAwMEQ1OAotOjEwMjlBMDAwOENBMzAwMDAwQTAwMDIzRTAwNjQxMDI1M0ExMUZGRkZDQwotOjEwMjlCMDAwMDAxMTc4MkIwMDEwNzAyQjAxQ0YyMDI0MTA4MDAwMDIxMgotOjEwMjlDMDAwMDAwMDAwMDAwMDAwMDAwRDhDQjgwMDAwMEEwMDAyM0U2QwotOjEwMjlEMDAwMzcwMkZGRkYzMDg0RkZGRjMwQTVGRkZGMTA4MDAwMDdBNAotOjEwMjlFMDAwMDAwMDE4MjEzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDI0MwotOjEwMjlGMDAwMDA2NTE4MjExNDgwRkZGQjAwMDUyODQwMDNFMDAwMDg1MwotOjEwMkEwMDAwMDA2MDEwMjExMEMwMDAwNzAwMDAwMDAwOENBMjAwMDAzMAotOjEwMkExMDAwMjRDNkZGRkYyNEE1MDAwNEFDODIwMDAwMTRDMEZGRkIwNQotOjEwMkEyMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDg1NwotOjEwMkEzMDAwMjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwMkE0MDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDRDMgotOjEwMkE1MDAwMDNFMDAwMDgwMDAwMDAwMDMwOEVGRkZGMzBEOEZGRkZDOQotOjEwMkE2MDAwMDAwNTdDMDAwMUY4NjAyNTM5Q0RGRkZGMDFBQzUwMjE0NQotOjEwMkE3MDAwMDE0QzU4MkIwMTRCNDgyMTAwMDk0NDAyMzEyN0ZGRkYyQwotOjEwMkE4MDAwMDBFODMwMjEwMDA2MjQwMjMwQzVGRkZGMDBBNDE4MjExMQotOjEwMkE5MDAwMzg2MkZGRkYwM0UwMDAwODMwNDJGRkZGM0MwQzA4MDBGMwotOjEwMkFBMDAwOEQ4QzA0ODQyNDBCRkY4MDI3QkRGRkQwMDE4NDUwMjEyRQotOjEwMkFCMDAwMDE0QjQ4MjRBRjQ5MDAyMDNDMDgwODAwOEQwODA0ODRERAotOjEwMkFDMDAwQUZCMjAwMjBBRkIwMDAxOEFGQkYwMDI4QUZCMzAwMjRGMgotOjEwMkFEMDAwQUZCMTAwMUM5MzY2MDAwNDAxMDQzODIxMzBFNDAwN0Y4QwotOjEwMkFFMDAwMDA5QTEwMjEzQzAzMDAwODAwNDM5MDIxMzBDNTAwMjBDQgotOjEwMkFGMDAwMDM2MDgwMjEzQzA4MDExMTI3N0IwMDA4MTRBMDAwMDIxQwotOjEwMkIwMDAwMjY0NjAwNzAyNjQ2MDA2QzkyMTMwMDA0OTc1MTAxMDQ3QgotOjEwMkIxMDAwOTIwRjAwMDQzMjY3MDAwRjMyMkVGRkZGMzFFRDAwNDBBQwotOjEwMkIyMDAwMDFDNzI4MjMxMUEwMDAwNTAwMDA0ODIxOTI1OTAwQkNDQwotOjEwMkIzMDAwMzMzODAwMDQxNzAwMDA5MDAwMDAwMDAwOTI0MzAwQkNFRQotOjEwMkI0MDAwMzA3RjAwMDQxM0UwMDAwRjAwMDAwMDAwMTBBMDAwMEQxMwotOjEwMkI1MDAwMDAwMDAwMDA5NjBFMDAwMjI0MEFGRjgwMDBBNzYwMjFGQQotOjEwMkI2MDAwMjVDREZGRkVBNzREMTAxNjkyMEIwMDA0MDE0QjIwMjQyQgotOjEwMkI3MDAwMzA4MjAwRkYxMDQwMDA4NTAxMEM0MDI1M0MwRjA0MDAwRQotOjEwMkI4MDAwMDEwRjQwMjU4RjUzMDE3ODA2NjBGRkZFMjQwNDAwMEFFMAotOjEwMkI5MDAwQTc0NDAxNDA5NjBEMDAwMjI0MDQwMDA5MzFBQzAwMDc0RgotOjEwMkJBMDAwMDAwQzU4MjMzMTZBMDAwN0E3NEEwMTQyOTYwMjAwMDIyRQotOjEwMkJCMDAwMjQ0M0ZGRkVBNzQzMDE0NEE3NDAwMTQ2OTc1RjAxMDQ1OQotOjEwMkJDMDAwQTc1RjAxNDg4RjU5MDEwODMzMzgwMDIwNTMwMDAwMDFFNgotOjEwMkJEMDAwMjQwNDAwMDE5MjBGMDAwNDMxRUUwMDEwMTVDMDAwMDIyMQotOjEwMkJFMDAwMzQ4MzAwMTAwMDgwMTgyMUE3NDMwMTRBMDAwMDAwMDAzMAotOjEwMkJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUY0ODEwMDBDRQotOjEwMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAotOjEwMkMxMDAwOEY1MTEwMDAwNjIxRkZGRTMxMTNGRkZGMTI2MDAwMDNFOQotOjEwMkMyMDAwMDAwMDAwMDA4RjQ4MTAxOEFDQzgwMDAwOTYwMzAwMDY5MgotOjEwMkMzMDAwMzA3RkZGRkYyN0Y5MDAwMjAwMTk5ODgyMDAxMzg4ODA3NwotOjEwMkM0MDAwMDIzQjMwMjE4Q0Q4MDAwMDE1MjAwMDU3MDAxODM0MDJCOAotOjEwMkM1MDAwOTIwMzAwMDQyNDA1RkY4MDAwQTNGODI0MzNGMTAwRkY1MQotOjEwMkM2MDAwMTIyMDAwMkMwMDAwMDAwMDkyNDcwMEJDMzBGMjAwMDI0RAotOjEwMkM3MDAwMTI0MDAwMjgwMDAwMDAwMDk3NEIxMDBDMjU2MkZGRkU1OAotOjEwMkM4MDAwQTc0MjEwMTYwMDAwMDAwMDNDMEEwNDAwMzU0OTAwMzAzRAotOjEwMkM5MDAwQUY0OTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQwotOjEwMkNBMDAwMDAwMDAwMDA4RjRDMTAwMDA1ODFGRkZFMDAwMDAwMDBCNgotOjEwMkNCMDAwOTc0OTEwMEM4RjUxMTAxQzAwQzAyMDIxMzEyN0ZGRkZCNQotOjEwMkNDMDAwMjRGMjAwMzAwMDEyMTg4MjAwMDMyODgwMDBCQkY4MjE5MwotOjEwMkNEMDAwMzIyNkZGRkZBRkYxMDAwMDBFMDAwNTk1MDAxMTJDMDIxNwotOjEwMkNFMDAwMDAxM0M4ODAwMzNCOTgyMThFNzgwMDAwMDAwMjc0MDAxNgotOjEwMkNGMDAwQUZCODAwMTA4RkE4MDAxMDMxMEZGRkZGQUZBRjAwMTA2QQotOjEwMkQwMDAwOEZBNDAwMTAwMUM0NjgyNUFGQUQwMDEwOEZBNjAwMTA3RAotOjEwMkQxMDAwQUU2NjAwMDA5NzczMDAwODk3NkQwMDBBOTc2NjAwMEM3NgotOjEwMkQyMDAwOEY4QTAwM0MwMDBENUMwMDMwQ0NGRkZGMzI2MkZGRkY1OQotOjEwMkQzMDAwMTA0QTAwMzYwMTZDMjAyNTk2MDYwMDAyM0MxMDEwMDA1NwotOjEwMkQ0MDAwMjREMzAwMDgwRTAwMDEzOTMyNjRGRkZGOTc0QzAxMDRDMAotOjEwMkQ1MDAwMEUwMDAxNDczMTg0RkZGRkFGNTAwMTc4OEZCRjAwMjg3QwotOjEwMkQ2MDAwOEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMThFOQotOjEwMkQ3MDAwMDNFMDAwMDgyN0JEMDAzMDEwQTBGRjcwMDAwMDAwMDAzNQotOjEwMkQ4MDAwMjRBNUZGRkMwQTAwMDVDRTI0MDkwMDA0OENEMTAwMDAxNAotOjEwMkQ5MDAwQUY1MTEwMTg4RjUzMDE3ODA2NjBGRjdBMjQwNDAwMEE5RgotOjEwMkRBMDAwMEEwMDA1RTMwMDAwMDAwMDAwQTdDODIxOEY4ODAwMzg1MgotOjEwMkRCMDAwOEY0RTEwMUMwMDE5QzA4MjAwMTg3ODgwMDFFODIwMjE3NQotOjEwMkRDMDAwQUM4RTAwMDAwMDBFMkMwMjAwQzAyMDIxMEUwMDA1OTVFNAotOjEwMkREMDAwMzFDNkZGRkYwMjNCMjgyMThDQUQwMDAwMDAwMjU0MDBFOQotOjEwMkRFMDAwMDA0MDMwMjFBRkFEMDAxMDhGQUMwMDEwMzE4QkZGRkZFMQotOjEwMkRGMDAwQUZBQjAwMTA4RkEyMDAxMDAxNDI0ODI1QUZBOTAwMTAxMAotOjEwMkUwMDAwOEZBNzAwMTAwQTAwMDYxM0FDQTcwMDAwOEY4RjAwNDBBOAotOjEwMkUxMDAwMTQ4RkZGQzkwMDAwMDAwMDk3NDIwMTA0OTYwQjAwMDJDNgotOjEwMkUyMDAwM0MwNTA4MDA4Q0E1MDQ2QzMwNDlGRkZGMzE2QUZGRkZBOAotOjEwMkUzMDAwM0MxMTA4MDA4RTMxMDQ2ODAxMkEzODIxMjRGMkZGRkU3QgotOjEwMkU0MDAwMDBCMjQwMjEwMDEyRkZDMzAxMTJDODJCMDIzRkMwMjE3MwotOjEwMkU1MDAwMDMxOTIwMjEzQzAxMDgwMEFDMjgwNDZDM0MwMTA4MDA0NwotOjEwMkU2MDAwQUMyNDA0NjgwQTAwMDY0RDAwMDAwMDAwMDBBNDEwMkJFQQotOjEwMkU3MDAwMTA0MDAwMDkyNDAzMDAwMTAwMDUyODQwMDBBNDEwMkI4NQotOjEwMkU4MDAwMDRBMDAwMDMwMDAzMTg0MDU0NDBGRkZDMDAwNTI4NDA0NAotOjEwMkU5MDAwMTA2MDAwMDcwMDAwMDAwMDAwODUzMDJCMTRDMDAwMDIwNQotOjEwMkVBMDAwMDAwMzE4NDIwMDg1MjAyMzE0NjBGRkZCMDAwNTI4NDIyMAotOjEwMkVCMDAwMDNFMDAwMDgwMDgwMTAyMThGODUwMDJDMjdCREZGRTg2QgotOjEwMkVDMDAwMDAwNTMwMjcyQ0MzMDAwMTJDQTQwMDAyMDA4MzEwMjUyQwotOjEwMkVEMDAwMTA0MDAwMDNBRkJGMDAxMDI0MDUwMDdGQUY4NTAwMkMxOQotOjEwMkVFMDAwMDAwNTI4MjczMEE1RkZGRjBFMDAwNTc0MjQwNDI2RjVGMQotOjEwMkVGMDAwOEY4MzAwMzAyNDA0MDJCRDAwNDAzMDIxMDA4MzM4MkIzMgotOjEwMkYwMDAwMTBFMDAwMDkyNDA1MDAwMTAwMDQyMDQwMDA4MzEwMkI3QwotOjEwMkYxMDAwMDQ4MDAwMDMwMDA1Mjg0MDU0NDBGRkZDMDAwNDIwNDBDQQotOjEwMkYyMDAwMTBBMDAwMDgwMEMzNTAyMTAwNjQ0MDJCMTUwMDAwMDJDRgotOjEwMkYzMDAwMDAwNTI4NDIwMDY0MTgyMzE0QTBGRkZCMDAwNDIwNDI2RgotOjEwMkY0MDAwMDBDMzUwMjE4RkJGMDAxMDAwMEE0QzAyMzEyMjAwRkY0NQotOjEwMkY1MDAwMjdCRDAwMThBRjhBMDAyQzAzRTAwMDA4QUY4OTAwMzBCRAotOjEwMkY2MDAwMEEwMDAwMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyNAotOjEwMkY3MDAwNzQ3ODcwMzQyRTM2MkUzMTM2MDAwMDAwMDQwNjEwMDBBRQotOjEwMkY4MDAwMDAwMDAwMEEwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDBCNgotOjEwMkY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQotOjEwMkZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQotOjEwMkZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQotOjEwMkZDMDAwMDAwMDAwMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAotOjEwMkZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQotOjEwMkZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQotOjEwMkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDNCRQotOjEwMzAwMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDA2MAotOjEwMzAxMDAwMjQ0MjNBQTAzQzAzMDgwMDI0NjMzQzU0QUM0MDAwMDAyNgotOjEwMzAyMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDBCNwotOjEwMzAzMDAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDAwOTg0QgotOjEwMzA0MDAwM0MxQzA4MDAyNzlDM0FBMDBFMDAwMzA1MDAwMDAwMDA2RAotOjEwMzA1MDAwMDAwMDAwMEQ4RjgzMDAzODNDMDg4MDAwMzUwNzAwNzBBOQotOjEwMzA2MDAwOENFNTAwMDAwMDgzMzAyNTNDMDI5MDAwMDBDMjIwMjU0MgotOjEwMzA3MDAwQUY4NTAwMzBBRjQ0MDAyMDhGNDkwMDIwMDUyMEZGRkVCRgotOjEwMzA4MDAwM0MwMzgwMDAzNDYyMDA3MDhDNDUwMDAwOEY4NjAwMzA2NQotOjEwMzA5MDAwM0MxOTA4MDA4RjM5MDA3QzNDMEUwODAwOERDRTAwNzg2QQotOjEwMzBBMDAwMDBBNjIwMjMwMzI0NTgyMTAwMDA3ODIxMDE2NDY4MkIwNgotOjEwMzBCMDAwMDFDRjYwMjEwMThENTAyMTNDMDEwODAwQUMyQjAwN0MyOAotOjEwMzBDMDAwM0MwMTA4MDBBQzJBMDA3ODAzRTAwMDA4MDAwMDAwMDA4MgotOjEwMzBEMDAwMEEwMDAwM0QyNDA0MDAwMThGODQwMDM4M0MwNTgwMDA3NAotOjEwMzBFMDAwMzRBMjAwMDEwMDgyMTgyNTAzRTAwMDA4QUY0MzAwMjA0RAotOjEwMzBGMDAwMDNFMDAwMDgwMDAwMTAyMTMwODRGRkZGMzBBNUZGRkYyRgotOjEwMzEwMDAwMTA4MDAwMDcwMDAwMTgyMTMwODIwMDAxMTA0MDAwMDJFQQotOjEwMzExMDAwMDAwNDIwNDIwMDY1MTgyMTE0ODBGRkZCMDAwNTI4NDBCMAotOjEwMzEyMDAwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA3MDAwMDAwMDA0QwotOjEwMzEzMDAwOENBMjAwMDAyNEM2RkZGRjI0QTUwMDA0QUM4MjAwMDA3RQotOjEwMzE0MDAwMTRDMEZGRkIyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAxQQotOjEwMzE1MDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDBDMAotOjEwMzE2MDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkE0NwotOjEwMzE3MDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMzA4QUZGRkYwMAotOjEwMzE4MDAwOTNBODAwMTNBNzRBMDE0NDk3NDkwRTE2MzBDNjAwRkZDMgotOjEwMzE5MDAwM0MwMjEwMDBBNzQ5MDE0NkFGNDUwMTQ4QTM0NjAxNTIzMQotOjEwMzFBMDAwQTc0ODAxNUFBRjQ3MDE2MDhGQTQwMDE4OEZBMzAwMTRFRAotOjEwMzFCMDAwQTc0NDAxNThBRjQzMDE1NDAzRTAwMDA4QUY0MjAxNzgyRgotOjEwMzFDMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDM4MDAwMzQ2MjAwNzA0RgotOjEwMzFEMDAwOEM0OTAwMDA4Rjg4MDAzQzI0ODQwMDA3MjdCREZGRjgzRAotOjEwMzFFMDAwMzA4NEZGRjhBRjg5MDAzMDk3NEQwMDhBMzFBQ0ZGRkY4MwotOjEwMzFGMDAwQUZBQzAwMDA4RkFCMDAwMDAxNjg1MDIzMjU0N0ZGRkZGNAotOjEwMzIwMDAwMzBFNjFGRkYwMEM0MjgyQjE0QTBGRkY3M0MwQzgwMDAwMQotOjEwMzIxMDAwMzU4QjAwNzA4RDZBMDAwMDNDMDcwODAwOENFNzAwODQ0NQotOjEwMzIyMDAwM0MwNjA4MDA4Q0M2MDA4MDAwMDgxMDgyMDE0OTE4MjM2MwotOjEwMzIzMDAwMDAwMjc4ODAwMEUzNzAyMTAwMDAyMDIxMDFDM0M4MkIyOAotOjEwMzI0MDAwMDBDNEMwMjEwMUZBNDAyMTAzMTk0ODIxMjUwMjQwMDA5MQotOjEwMzI1MDAwMjdCRDAwMDgzQzAxMDgwMEFDMkUwMDg0M0MwMTA4MDA5QQotOjEwMzI2MDAwQUMyOTAwODAwM0UwMDAwODAwMDAwMDAwOEY4MjAwM0NEMQotOjEwMzI3MDAwMjQ4NjAwMDczMEM1RkZGODAwQTIxODIxMzA2NDFGRkYyNAotOjEwMzI4MDAwMDNFMDAwMDhBRjg0MDAzQzNDMEUyMEZGMjdCREZGRTBCOAotOjEwMzI5MDAwM0MxQTgwMDAzQzBGODAwODM1Q0RGRkZEQUZCRjAwMTgwMQotOjEwMzJBMDAwQUZCMTAwMTRBRkIwMDAxMEFGOEYwMDQ0QUY0RDBFMDBBRgotOjEwMzJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwMzJDMDAwMDAwMDAwMDAzQzBDMDBGRjM1OEJGRkZEQUY0QjBFMDBGMwotOjEwMzJEMDAwM0MwNjYwMDQ4Q0M5NTAwMDI0MEFGRjdGM0MxMTYwMDA0QQotOjEwMzJFMDAwMDEyQTQwMjQzNTA3MzgwQ0FDQzc1MDAwOEUyNDA0MzgxRQotOjEwMzJGMDAwMjQwNTAwMDlBRjQ1MDAwODMwODNGRkZGMzg2MjJGNzFCNQotOjEwMzMwMDAwMjQ1MEMwQjNBRjgwMDA0QzBFMDAwMDY0QUY4MDAwM0M3RQotOjEwMzMxMDAwNTIwMDAwMDFBRTIwNDQyQzBFMDAwNDYwMDAwMDAwMDBBQQotOjEwMzMyMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDBFNzcwNQotOjEwMzMzMDAwMjdCRDAwMjAyN0JERkZEMEFGQjIwMDI4QUZCMTAwMjRDOQotOjEwMzM0MDAwQUZCRjAwMkNBRkIwMDAyMDkzNjIwMDA4MDA4MDkwMjEzNgotOjEwMzM1MDAwMDBBMDg4MjExNDQwMDAyRDI0MDQwMDEwMEUwMDAwOUFDMwotOjEwMzM2MDAwMDAwMDAwMDA4RjhFMDA0QzNDMTAzMjAwMzFDNjAwRkY4MAotOjEwMzM3MDAwMDAwNjdDMDAwMUYwNjAyNTI1Q0QwMDAxQUY4RDAwNENEQQotOjEwMzM4MDAwQUM0QzAwMDA5MzZCMDAwOTkzNjkwMDBBMzE2QTAwRkY5RQotOjEwMzM5MDAwMDAwQTNDMDAzMTI4MDBGRjAwRTgyMDI1QUM0NDAwMDQ2RQotOjEwMzNBMDAwOEY4MzAwNEMwNjQwMDA0M0FDNDMwMDA4QUM0MDAwMEM0NwotOjEwMzNCMDAwOTc5ODAwNDAzMzA1MDAwODE0QTAwMDAyMjYyODAwMDY1NAotOjEwMzNDMDAwMjYyODAwMDI5NzQyMEUxNDhGNDUwRTFDOEY2NzAwMDRCQQotOjEwMzNEMDAwOTM3RjAwMDIzMDQ0RkZGRjMzRjkwMEZGQUZCOTAwMTBDNAotOjEwMzNFMDAwOEY3MTAwMTRBRkE4MDAxODBFMDAwMDg3QUZCMTAwMTQ1MQotOjEwMzNGMDAwOEZCRjAwMkM4RkIyMDAyODhGQjEwMDI0OEZCMDAwMjAyNwotOjEwMzQwMDAwMjQwNDAwMTAwQTAwMDBDMzI3QkQwMDMwOTM2OTAwMDk5RQotOjEwMzQxMDAwOTM2ODAwMEIzMTIzMDBGRjMxMDIwMEZGMDA2MjgwMjExRQotOjEwMzQyMDAwMjYxRjAwMEEzM0YwRkZGRjBFMDAwMDlBMDIwMDIwMjE0MQotOjEwMzQzMDAwOEY4NjAwNEMzQzBENDEwMDI0RDkwMDAxQUY5OTAwNEMwRgotOjEwMzQ0MDAwOTM3ODAwMDkzMEM2MDBGRjAwMDY3NDAwMzMwNTAwRkZDMgotOjEwMzQ1MDAwMjRBRjAwMDIwMUNGNjAyNTAxOEQ1ODI1QUM0QjAwMDA0MAotOjEwMzQ2MDAwOEY2QTAwMEM5NzQ0MEUxNDAxNTIzODI1QUM0NzAwMDRCMwotOjEwMzQ3MDAwOEY0NTBFMUM4RjY3MDAwNDkzNjkwMDAyMzA4NEZGRkZBNAotOjEwMzQ4MDAwMzEyODAwRkZBRkE4MDAxMDhGNjMwMDE0QUZCMTAwMThGRgotOjEwMzQ5MDAwMEUwMDAwODdBRkEzMDAxNDAyMDAyMDIxOEZCRjAwMkM3NAotOjEwMzRBMDAwOEZCMjAwMjg4RkIxMDAyNDhGQjAwMDIwMEEwMDAwQzMyMwotOjEwMzRCMDAwMjdCRDAwMzAzQzEyODAwMDBBMDAwMTE0QUM1MjAwMEMwMQotOjEwMzRDMDAwMjdCREZGRDhBRkIzMDAxQ0FGQkYwMDIwQUZCMjAwMThCQwotOjEwMzREMDAwQUZCMTAwMTRBRkIwMDAxMDkzNjIwMDA4MTQ0MDAwODEzNwotOjEwMzRFMDAwMDA4MDk4MjFBRjYwMDAwQzk3ODUwMDQwMzBBNDQwMDAxOAotOjEwMzRGMDAwMTA4MDAwOEIyNDAzMDAxNjI0MTA0MDA3QTM2MzAwMEFFOQotOjEwMzUwMDAwQUY3MDAwMTQ5MzhGMDA0MjhGNkMwMDE0MzFFRTAwMDdFRgotOjEwMzUxMDAwMDAwRTZBNDAwMThENTgyNUFGNkIwMDE0OTc4QTAwNDA1OQotOjEwMzUyMDAwOEY2ODAwMTQzMTQ5MDAxMDAxMDkzODI1QUY2NzAwMTQ3NQotOjEwMzUzMDAwOTc4NjAwNDAzMEMzMDAwODUwNjAwMDhEMDAwMDI4MjFBRAotOjEwMzU0MDAwOEY2NjAwMTQzQzAzMTAwMDNDMDI4MTAwMDBDMzI4MjU1NAotOjEwMzU1MDAwQUY2NTAwMTQ5NzQ0MEUwQTI0MTgwMDBFMzQwNUZGRkNEMgotOjEwMzU2MDAwMzA5RkZGRkYwM0UyQzgyNUFGNzkwMDA0QTM3ODAwMDI3MwotOjEwMzU3MDAwOTM3MjAwMEEyNjUxMDAwNEEzNzEwMDBBOTc4MzAwNDA0OQotOjEwMzU4MDAwOTM2NDAwMEEzMDY2MUYwMDAwMDYxMTgzMDA0NEY4MjE4RQotOjEwMzU5MDAwMjdGOTAwMjhBMzc5MDAwOTk3NTgwRTBDQTc3ODAwMTA4NgotOjEwMzVBMDAwOTM3MjAwMDkyNjUxMDAwMjMyMzAwMDA3MDAxMDc4MjM4MAotOjEwMzVCMDAwMzFFRTAwMDdBMzZFMDAwQjkzNkQwMDA5OTc2QzAwMTBBRAotOjEwMzVDMDAwOEY5MDAwMzQ5Nzg5MDA0MDMxQUIwMEZGMDE2QzUwMjE4RgotOjEwMzVEMDAwMDE0NTQwMjEzMTI3MDA0MDEwRTAwMDA1MzEwNUZGRkY4MwotOjEwMzVFMDAwMDBCMDM4MkIzQzA2ODAwMDEwRTAwMDE0MDAwMDg4MjE1OQotOjEwMzVGMDAwMDIwNTQwMkIxNTAwMDAzMzAwMDAyMDIxOEY0QTBFMTRENQotOjEwMzYwMDAwQUY0QTBFMTA4RjQ5MEUxQ0FGNDkwRTE4QUY0NTBFMDA4MQotOjEwMzYxMDAwOEY0QzAwMDAzMThCMDAwODExNjBGRkZEMDAwMDAwMDA5RQotOjEwMzYyMDAwOTc0RDBFMDgwMEEwODAyMTAwMDAzMDIxQTc4RDAwNDA5QQotOjEwMzYzMDAwOEY0NTBFMDQyNDExMDAwMUFGODUwMDM0OTc2RTAwMTBGMQotOjEwMzY0MDAwMzFEMkZGRkY4RTY0MDAwMDAwOTAxMDIzMTQ0MDAwMDk2NwotOjEwMzY1MDAwQUU2MjAwMDA4RjZBMDAxNDhGODcwMDQ4MzU0OTAwNDAzMQotOjEwMzY2MDAwQUY2OTAwMTQ4RjQ4MEUxMEFDRTgwMDIwOEY0MzBFMTg4RAotOjEwMzY3MDAwQUNFMzAwMjQwMEMwMjAyMTBFMDAwMEY1MDIwMDI4MjE0OAotOjEwMzY4MDAwOEU2NjAwMDAxNEMwMDAwNTAwMDAwMDAwOEY2QjAwMTQ1RgotOjEwMzY5MDAwMjQwQ0ZGQkYwMTZDOTgyNEFGNzMwMDE0OEY2RDAwMENENQotOjEwMzZBMDAwMDFCMjI4MjFBRjY1MDAwQzkzNzIwMDA4MTY0MDAwMDM5OAotOjEwMzZCMDAwMDAwMDAwMDAxNjIwMDAzMTAwMDAwMDAwQTM3MTAwMDg4NwotOjEwMzZDMDAwMDIwMDIwMjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg5MgotOjEwMzZEMDAwOEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDhBQgotOjEwMzZFMDAwMjdCRDAwMjg4RjkwMDAzNDk3OTEwMDQwM0MwNjgwMDA1MQotOjEwMzZGMDAwMDIwMDkwMjEzMjJGMDA0MDE1RTBGRkQyMDAwMDg4MjEwNwotOjEwMzcwMDAwOTc3RjAwMTA4Rjk4MDAzNDMzRjlGRkZGMTczOEZGRUREMwotOjEwMzcxMDAwMDAwMDIwMjEwMDAwMzAyMTBBMDAwMUI5MjQxMTAwMDExRAotOjEwMzcyMDAwMjQwMzAwMEUyNDEwNDAwN0EzNjMwMDBBQUY3MDAwMTRBNgotOjEwMzczMDAwOTM4RjAwNDI4RjZDMDAxNDMxRUUwMDA3MDAwRTZBNDAzOAotOjEwMzc0MDAwMDE4RDU4MjVBRjZCMDAxNDk3OEEwMDQwOEY2ODAwMTRENAotOjEwMzc1MDAwMzE0OTAwMTAwMTA5MzgyNUFGNjcwMDE0OTc4NjAwNDBGMQotOjEwMzc2MDAwMzBDMzAwMDgxNDYwRkY3NjAwMDAwMDAwMDAwMDI4MjEyQwotOjEwMzc3MDAwQUY2MDAwMDQwQTAwMDE4N0EzNjAwMDAyOEY2RjAwMTQ4RAotOjEwMzc4MDAwM0MxOUVGRkYzNzM4RkZGRTAxRjg3MDI0MEEwMDAxRDcxQgotOjEwMzc5MDAwQUY2RTAwMTQ4Rjg3MDAzODhGOEEwMDQ0MjdCREZGRTA4QQotOjEwMzdBMDAwOEY4NjAwNDhBRkIwMDAxOEFGQkYwMDFDOEY0NTAxMDRFMgotOjEwMzdCMDAwOEQ0OTAwQUNBRjQ3MDA4MDhDQzgwMDIwMDBBOTM4MjM5OQotOjEwMzdDMDAwMDAwMDgwMjFBRjQ4MEUxMDhGNDQwRTEwMDAwMDQ4MjFFOQotOjEwMzdEMDAwQUY0NDBFMTQ4Q0MyMDAyNEFGNDIwRTE4OEY0MzBFMTg1MwotOjEwMzdFMDAwQUY0MzBFMUMxMEUwMDAzNjJEMzkwMDAxOTM2QjAwMDgyQQotOjEwMzdGMDAwMTE2MDAwNEYwMDAwMDAwMDk3NkUwMDEwMzFDREZGRkZGOAotOjEwMzgwMDAwMDBFRDYwMkIxNTgwMDA0QTAwMDAwMDAwOTc3ODAwMTA0MgotOjEwMzgxMDAwMzMwRkZGRkZBRjRGMEUwMDhGNUYwMDAwMzNGOTAwMDgzQQotOjEwMzgyMDAwMTMyMEZGRkQwMDAwMDAwMDk3NDIwRTA4OEY0NjBFMDQ5MwotOjEwMzgzMDAwMzA0NUZGRkYzMEEzMDAwMTEwNjAwMDhBMDAwMDAwMDA0NwotOjEwMzg0MDAwMDAwMDAwMEQzMEE4QTA0MDI0MDQwMDQwMTEwNDAwM0JGQgotOjEwMzg1MDAwMzBBOUEwMDAxMTIwMDA4NTAwMDAwMDAwOTM2QzAwMDgzMgotOjEwMzg2MDAwNTE4MDAwMDkyN0E0MDAxMDk3NkYwMDEwMzFFRUZGRkY3MAotOjEwMzg3MDAwMDBDRTY4MkIxMUEwMDAwNDI3QTQwMDEwMzBCODAwNDAyRgotOjEwMzg4MDAwMTMwMDAwN0EwMDAwMDAwMEFGQTcwMDEwQTc4NTAwNDBEOQotOjEwMzg5MDAwQUY4NjAwMzQwRTAwMDE1ODAwMDAwMDAwMDA0MDQ4MjFBRgotOjEwMzhBMDAwMTQ0MEZGRDA4RkE3MDAxMDhGNDIwRTE0OEY4NDAwNDg2MQotOjEwMzhCMDAwQUM4MjAwMjA4RjQ3MEUxQ0FDODcwMDI0MkQzOTAwMDFGQwotOjEwMzhDMDAwMDMzMDMwMjUxMEMwMDAxNzhGQkYwMDFDOEY4NDAwMzhENAotOjEwMzhEMDAwMjQxMDBGMDAxMDkwMDA4NTAwMDAwMDAwOEY0RjAxNzgyOQotOjEwMzhFMDAwMDVFMEZGRkUyNDE4MEYwMDEwOTgwMDZGMDAwMDAwMDA5NAotOjEwMzhGMDAwOEY0NzBFMTQyNDAyMDI0MDNDMTAxMDAwQUY0NzAxNDREMQotOjEwMzkwMDAwOEY0OTBFMUNBRjQ5MDE0OEEzNDAwMTUyQTc0MDAxNUFGQwotOjEwMzkxMDAwQUY0MDAxNjBBNzQwMDE1OEFGNDIwMTU0QUY1MDAxNzg1OQotOjEwMzkyMDAwOEZCRjAwMUM4RkIwMDAxODAzRTAwMDA4MjdCRDAwMjBFNwotOjEwMzkzMDAwQUY0NzBFMDAwQTAwMDIyRTAwMDAwMDAwOEY0OTAxNzhGOAotOjEwMzk0MDAwMDUyMEZGRkUyNDBBMDgwMDhGODQwMDNDQUY0QTAxNzg1RQotOjEwMzk1MDAwOTc1ODAwOEEzMzBGRkZGRjAxRTQ3MDIzMjVDREZGRkY0NgotOjEwMzk2MDAwMzFBQzFGRkYyRDhCMDAwODE1NjBGRkY5MDAwMDAwMDAyRgotOjEwMzk3MDAwOEY4MzAwNEM4RjlGMDAzODAwQzA0ODIxMDM0NDIwMjFEMgotOjEwMzk4MDAwMjQ2NjAwMDEyNDE5MEYwMEFGODYwMDRDMzA2QTAwRkY0NgotOjEwMzk5MDAwMDBFOTM4MjMyNDg2NDAwMDEzRjkwMDA1MjQwODAwMDFCQgotOjEwMzlBMDAwOTM4QjAwNDIzMTY4MDAwNzAwMDgxMjQwMzQ0ODAwMDE0MAotOjEwMzlCMDAwMDAwQTdDMDAzQzE4MDEwMDAxRjg3MDI1QUM4RTQwMDAyNAotOjEwMzlDMDAwOEY4RDAwNEMzMEFDMDAzNjMwQTQwMDA4QUNDRDAwMDQyNAotOjEwMzlEMDAwMTA4MDAwMkUwMTBDMzAyNTk3NEQwRTBBOEY4QzAwM0M3NAotOjEwMzlFMDAwM0MwMjgxMDAzMUE0RkZGRjI1OEIwMDA4MDA4MjQwMjVBNgotOjEwMzlGMDAwM0MwMzEwMDAzMTY1MUZGRjI1MzkwMDA2MjQxRjAwMEUwRgotOjEwM0EwMDAwQUY0ODAxNjAwMEMzMzAyNUE3NUYwMTVBQUY4NTAwM0M3NQotOjEwM0ExMDAwQTc1OTAxNTgxNEUwMDAwQThGOUYwMDM4MjQwNTBGMDBCMQotOjEwM0EyMDAwNTNFNTAwMDIyNDEwMDAwMTM0QzYwMDQwOEY0MzBFMTBGRAotOjEwM0EzMDAwOEY4ODAwNDhBRDAzMDAyMDhGNEIwRTE4QUQwQjAwMjQ3QgotOjEwM0E0MDAwOEY0MjBFMTRBRjQyMDE0NDhGNDQwRTFDQUY0NDAxNDgxNAotOjEwM0E1MDAwQTM0QTAxNTIzQzBBMTAwMEFGNDYwMTU0MEEwMDAyMjE1OQotOjEwM0E2MDAwQUY0QTAxNzgxNEMwRkY3ODMwQThBMDQwOEY0MjBFMTRFRQotOjEwM0E3MDAwOEY4NDAwNDgwMDAwNDgyMUFDODIwMDIwOEY0NzBFMUMzNAotOjEwM0E4MDAwQUM4NzAwMjQwQTAwMDI1ODJEMzkwMDAxOEY5ODAwM0NCMQotOjEwM0E5MDAwMjUzOTAwMDJBNzU5MDE1ODI3MEYwMDA4MzFFRTFGRkZGMgotOjEwM0FBMDAwMEEwMDAyQURBRjhFMDAzQ0FGNDAwMTRDMTEyMDAwMkM0QgotOjEwM0FCMDAwMDAwMDAwMDA4RjQ2MEUxMEFGNDYwMTQ0OEY0MzBFMThFMQotOjEwM0FDMDAwMjQwMjAwNDAzQzEwMTAwMEFGNDMwMTQ4QTM0MDAxNTJDMwotOjEwM0FEMDAwQTc0MDAxNUFBRjQwMDE2MEE3NDAwMTU4QUY0MjAxNTRDRQotOjEwM0FFMDAwQUY1MDAxNzgwQTAwMDI3MThGQkYwMDFDMTEyMDAwMDY0MAotOjEwM0FGMDAwMDAwMDAwMDA5NzVGMEUwODMzRTUwMDQwMTRBMDAwMDJBQwotOjEwM0IwMDAwMDAwMDAwMDAwMDAwMDAwRDhGNDgwMTc4MDUwMEZGRkU1NgotOjEwM0IxMDAwMDAwMDAwMDA5NzRFMEUxMDNDMEQwNTAwMjQwMzIwMDAwRAotOjEwM0IyMDAwMzFDQ0ZGRkYwMThEMTAyNUFGNDIwMTRDOEY0NDBFMTRBNAotOjEwM0IzMDAwM0MwQjEwMDBBRjQ0MDE0NDhGNEEwRTFDQUY0QTAxNDhCMQotOjEwM0I0MDAwQTM0MDAxNTI4Rjg0MDAzOEE3NDAwMTVBQUY0MDAxNjA2MgotOjEwM0I1MDAwQTc0MDAxNThBRjQzMDE1NDBBMDAwMjVGQUY0QjAxNzgwMAotOjEwM0I2MDAwOEY1OTBFMTRBRjU5MDE0NDhGNDMwRTFDMEEwMDAyRDkxRAotOjEwM0I3MDAwMjQwMjAwNDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTQyRgotOjEwM0I4MDAwQUZCMDAwMTBBRkJGMDAxQzBFMDAwMENBMDAwMDAwMDA2NAotOjEwM0I5MDAwM0MwMjgwMDA4RjhBMDA0NDM0NTAwMDcwM0MxMjA4MDBDMAotOjEwM0JBMDAwMjY1MjNCNzAwMjAwODgyMThFMDgwMDAwOEY0NTAwMDBERAotOjEwM0JCMDAwMzhBNDAwMDEzMDgzMDAwMTEwNjAwMDE3QUY4ODAwMzA4NgotOjEwM0JDMDAwMDIyMDQ4MjE4RDJDMDAwMDNDMDIwODAwOEM0MjAwNkMzMQotOjEwM0JEMDAwM0MxODA4MDA4RjE4MDA2ODAxODgxODIzMDA0MzY4MjFFQQotOjEwM0JFMDAwMDAwMEM4MjEwMUEzNzgyQjAzMTk3MDIxMDFDRjQwMjFDNwotOjEwM0JGMDAwM0MwMTA4MDBBQzJEMDA2QzNDMDEwODAwQUMyODAwNjhCQQotOjEwM0MwMDAwOEY0QjAwMDAzOTY3MDAwMTMwRTYwMDAxMTRDMEZGRUQ2MgotOjEwM0MxMDAwMDE4MDQwMjFBRjhDMDAzMDhFMTgwMDAwM0MwRTA4MDA1RgotOjEwM0MyMDAwOERDRTAwNkMzQzBDMDgwMDhEOEMwMDY4MDMwODc4MjM1NgotOjEwM0MzMDAwMDFDRjI4MjEwMDAwNDAyMTAwQUYzMDJCMDE4ODU4MjFGRQotOjEwM0M0MDAwMDE2NjIwMjEzQzAxMDgwMEFDMjUwMDZDM0MwMTA4MDAwNQotOjEwM0M1MDAwQUMyNDAwNjg4RjQ5MDEwMDI1NDcwMDg4QUY4NzAwNDhFMQotOjEwM0M2MDAwQUY4OTAwMzhBRjQ5MDAyMDhFMDcwMDAwQUY4NzAwMzBEMQotOjEwM0M3MDAwOEY1OTAxNzgwNzIwRkZGRTAwMDAwMDAwOEUwRjAwMDAyMgotOjEwM0M4MDAwM0MwRDA4MDA4REFEMDA3NDNDMEMwODAwOEQ4QzAwNzA1QwotOjEwM0M5MDAwMDFFNzcwMjMwMUFFMjgyMTAwMDAzMDIxMDBBRTU4MkIyRgotOjEwM0NBMDAwMDE4NjIwMjEwMDhCMzgyMTI0MDkwODAwM0MwMTA4MDBFRQotOjEwM0NCMDAwQUMyNTAwNzQzQzAxMDgwMEFDMjcwMDcwQUY0OTAxNzhDNgotOjEwM0NDMDAwOTM0MzAxMDhBMzgzMDA0MjkzODIwMDQyMzA1RjAwMDFDNgotOjEwM0NEMDAwMTdFMDAwMTU4RjgzMDAzODI0MUYwRDAwMTA3RjAwMTk5NgotOjEwM0NFMDAwMjQwMjBGMDAxMDYyMDAxRDAwMDAwMDAwOTE0NzAwMDAzOAotOjEwM0NGMDAwMjQwMzAwNTAzMEU5MDBGRjExMjMwMDA0M0MwNTQwMDA3QwotOjEwM0QwMDAwQUY0NTAxMzgwQTAwMDMxMjAwMDAwMDAwMEUwMDA4REE3NwotOjEwM0QxMDAwMDAwMDAwMDA4RjhBMDA0NDNDMDU0MDAwQUY0NTAxMzg5OAotOjEwM0QyMDAwMEEwMDAzMTIwMDAwMDAwMDkzOTkwMDQyMzMzODAwMDY5NQotOjEwM0QzMDAwMDAxODUxMDAwRTAwMDIwRDAxNTJEODIxMEEwMDAzNkUzNgotOjEwM0Q0MDAwOEY4QTAwNDQzQzFCMDgwMDI3N0IzQkYwMEUwMDAyMERDRAotOjEwM0Q1MDAwMDAwMDAwMDAwQTAwMDM2RThGOEEwMDQ0M0MxQjA4MDAyQwotOjEwM0Q2MDAwMjc3QjNDMTAwRTAwMDIwRDAwMDAwMDAwMEEwMDAzNkVDRAotOjEwM0Q3MDAwOEY4QTAwNDQ5MEFBMDAwMThGQUIwMDEwOENBQzAwMTAxOQotOjEwM0Q4MDAwM0MwMzAwRkY4RDY4MDAwNEFENkMwMDIwOENBRDAwMTQ3NgotOjEwM0Q5MDAwMDBFMDYwMjEzNDYyRkZGRkFENkQwMDI0OENBNzAwMThBNQotOjEwM0RBMDAwM0MwOUZGMDAwMTA5QzAyNEFENjcwMDI4OENBRTAwMUM0RgotOjEwM0RCMDAwMDE4MkM4MjQwMzE5NzgyNUFENkYwMDA0QUQ2RTAwMkM3NAotOjEwM0RDMDAwOENBRDAwMDgzMTRBMDBGRkFENkQwMDFDOTRBOTAwMDJDMwotOjEwM0REMDAwMzEyOEZGRkZBRDY4MDAxMDkwQTcwMDAwQTU2MDAwMDIyOQotOjEwM0RFMDAwQTE2MDAwMDRBMTY3MDAwMDkwQTMwMDAyMzA2MjAwRkYwMAotOjEwM0RGMDAwMDAwMjE5ODIxMDYwMDAwNTI0MDUwMDAxMTA2NTAwMEUwNAotOjEwM0UwMDAwMDAwMDAwMDAwM0UwMDAwOEExNkEwMDAxOENEODAwMjgyRgotOjEwM0UxMDAwMzU0QTAwODBBRDc4MDAxODhDQ0YwMDE0QUQ2RjAwMTRDNwotOjEwM0UyMDAwOENDRTAwMzBBRDZFMDAwODhDQzQwMDJDQTE2QTAwMDE1RAotOjEwM0UzMDAwMDNFMDAwMDhBRDY0MDAwQzhDQ0QwMDFDQUQ2RDAwMThEMwotOjEwM0U0MDAwOENDOTAwMTRBRDY5MDAxNDhDQzgwMDI0QUQ2ODAwMDg0QQotOjEwM0U1MDAwOENDNzAwMjBBRDY3MDAwQzhDQzIwMDE0OEM4MzAwNjRGQQotOjEwM0U2MDAwMDA0M0M4MkIxMzIwMDAwNzAwMDAwMDAwOENDMjAwMTQ4MAotOjEwM0U3MDAwMTQ0Q0ZGRTQwMDAwMDAwMDM1NEEwMDgwMDNFMDAwMDgxNQotOjEwM0U4MDAwQTE2QTAwMDE4QzgyMDA2NDBBMDAwM0M0MDAwMDAwMDBFMwotOjEwM0U5MDAwOTBBQTAwMDAyN0JERkZGODhGQTkwMDFDQTNBQTAwMDA2QwotOjEwM0VBMDAwOEZBRTAwMDAzQzBGRkY4MDhGQTgwMDE4MzVFMkZGRkZBNwotOjEwM0VCMDAwOENDRDAwMkMwMUMyNjAyNEFGQUMwMDAwQTEyMDAwMDQxNgotOjEwM0VDMDAwMDBFMDYwMjFBN0EwMDAwMjhGQjgwMDAwOEQyNzAwMDQ0OQotOjEwM0VEMDAwMDE4ODE4MjEwMEEwNTgyMTAwQzA1MDIxMDA2RDI4MjYxQgotOjEwM0VFMDAwM0MwNkZGN0YzQzBGMDBGRjJDQUQwMDAxMzVFRUZGRkZDRAotOjEwM0VGMDAwMzREOUZGRkYzQzAyRkYwMDAzMTkzMDI0MDAwRDFEQzAyMAotOjEwM0YwMDAwMDEwRUM4MjQwMEUyQzAyNDAwQzM3MDI1MDMxOTc4MjVERgotOjEwM0YxMDAwQUQyRTAwMDBBRDJGMDAwNDhENDUwMDI0QUZBRTAwMDA5MwotOjEwM0YyMDAwQUQyNTAwMDg4RDREMDAyMDI0MDVGRkZGQUQyRDAwMENCMAotOjEwM0YzMDAwOTU2ODAwMDIzMTA3RkZGRkFEMjcwMDEwOTE2NjAwMTg1OQotOjEwM0Y0MDAwMzBDMjAwRkYwMDAyMTlDMjUwNjAwMDAxOEQ0NTAwMzRFQwotOjEwM0Y1MDAwQUQyNTAwMTQ4RDY3MDAwODI3QkQwMDA4QUQyNzAwMUNBMwotOjEwM0Y2MDAwOEM4QjAwQ0NBRDJDMDAyOEFEMjAwMDJDQUQyQjAwMjQ3OAotOjEwM0Y3MDAwQUQyMDAwMTgwM0UwMDAwOEFEMjAwMDIwMjdCREZGRTBDMQotOjEwM0Y4MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUM0QgotOjEwM0Y5MDAwOTA5ODAwMDAwMEMwODgyMTNDMEQwMEZGMzMwRjAwN0Y4NwotOjEwM0ZBMDAwQTBDRjAwMDA5MDhFMDAwMTM1QUNGRkZGM0MwQUZGMDA1RgotOjEwM0ZCMDAwQTBDRTAwMDE5NEE2MDAxRUEyMjAwMDA0OENBQjAwMTQyOQotOjEwM0ZDMDAwOEUyOTAwMDQwMEEwODAyMTAxNkMyODI0MDEyQTQwMjRBRAotOjEwM0ZEMDAwMDA4MDkwMjEwMTA1MjAyNUE2MjYwMDAyQUUyNDAwMDRDMQotOjEwM0ZFMDAwMjYwNTAwMjAyNjI0MDAwODBFMDAwMDcyMjQwNjAwMDI4OAotOjEwM0ZGMDAwOTI0NzAwMDAyNjA1MDAyODI2MjQwMDE0MDAwNzFFMDAxMgotOjEwNDAwMDAwMDAwMzE2MDMyNDA2MDAwNDA0NDAwMDAzMjQwM0ZGRkZGQQotOjEwNDAxMDAwOTY1OTAwMDIzMzIzRkZGRjBFMDAwMDcyQUUyMzAwMTBGQQotOjEwNDAyMDAwMjYyNDAwMjQ4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQwQgotOjEwNDAzMDAwOEZCMDAwMTAyNDA1MDAwMzAwMDAzMDIxMEEwMDAwN0MyRQotOjEwNDA0MDAwMjdCRDAwMjAyN0JERkZEOEFGQjEwMDFDQUZCMDAwMThCRQotOjEwNDA1MDAwQUZCRjAwMjA5MEE4MDAwMDI0MDIwMDAxOEZCMDAwM0NGOAotOjEwNDA2MDAwMzEwMzAwM0YwMDgwODgyMTEwNjIwMDE0OEZBQTAwMzhCRAotOjEwNDA3MDAwMjQwQjAwMDU1MDZCMDAxNkFGQUEwMDEwMDBBMDIwMjFGMQotOjEwNDA4MDAwMDBDMDI4MjEwRTAwMDQwNzAyMDAzMDIxOTIyNDAwQkM0OQotOjEwNDA5MDAwMzA4MzAwMDIxMDYwMDAwMzI2MDYwMDMwQUNDMDAwMDAzMAotOjEwNDBBMDAwMjRDNjAwMDQ4RkJGMDAyMDhGQjEwMDFDOEZCMDAwMTgwMQotOjEwNDBCMDAwMDBDMDEwMjEwM0UwMDAwODI3QkQwMDI4MDE0MDM4MjE3RQotOjEwNDBDMDAwMEUwMDAzODVBRkIwMDAxMDBBMDAwNDRCMDAwMDAwMDA5MgotOjEwNDBEMDAwMEUwMDAzQ0NBRkIwMDAxNDBBMDAwNDRCMDAwMDAwMDAzNwotOjEwNDBFMDAwM0MwMjAwMEEwMzQyMTgyMTNDMDQwODAwMjQ4NDNCMDhENwotOjEwNDBGMDAwMjQwNTAwMUEwMDAwMzAyMTBBMDAwMDdDQUY4MzAwMkM0OAotOjEwNDEwMDAwM0MwMzgwMDAzNDYyMDA3MDhDNDgwMDAwMDBBMDU4MjFGRAotOjEwNDExMDAwMDBDMDQ4MjEzMDhBMDBGRkFGODgwMDMwOEY0NDAxNzgwQQotOjEwNDEyMDAwMDQ4MEZGRkUzQzBDODAwMDM1ODYwMDcwOENDNTAwMDBDQQotOjEwNDEzMDAwM0MwMzA4MDA4QzYzMDA3NDNDMTgwODAwOEYxODAwNzA2MgotOjEwNDE0MDAwMDBBODIwMjMwMDY0NjgyMTAwMDBDODIxMDFBNDc4MkI2NgotOjEwNDE1MDAwMDMxOTcwMjEwMUNGNjAyMTNDMDEwODAwQUMyRDAwNzRDRgotOjEwNDE2MDAwM0MwMTA4MDBBQzJDMDA3MDhGNDgwRTE0QUY0ODAxNDQ4RAotOjEwNDE3MDAwQUY0NzAxNENBMzRBMDE1MkE3NEIwMTU4OTM0NjAxMDg4RgotOjEwNDE4MDAwMzBDNTAwMDg1NEEwMDAwMTM1MjkxMDAwOTM0QjA5MDBFOAotOjEwNDE5MDAwMjQwNzAwNTAzMTZBMDBGRjExNDcwMDA3MDAwMDAwMDBBQgotOjEwNDFBMDAwOEY0NTBFMUNBRjQ1MDE0OEFGNDkwMTU0M0MwOTEwMDAzMgotOjEwNDFCMDAwMDNFMDAwMDhBRjQ5MDE3ODkzNEQwMTA4MzFBODAwMDhEOQotOjEwNDFDMDAwMTEwMDAwMTAwMDAwMDAwMDkzNEYwMTA4MzFFRTAwMTBCNAotOjEwNDFEMDAwNTFDMDAwMDEzNTI5MDAwODNDMDQwODAwOTA4NDNCNkM2NAotOjEwNDFFMDAwQTM0NDAxNTA4RjQzMDlBNEFGNDMwMTQ4OEY0MjA5QTA2MwotOjEwNDFGMDAwQUY0MjAxNDRBRjQ5MDE1NDNDMDkxMDAwMDNFMDAwMDhGQwotOjEwNDIwMDAwQUY0OTAxNzgzQzE5MDgwMDhGMzkzQjI4MzMzODAwMDg0MgotOjEwNDIxMDAwNTcwMEZGRjEzNTI5MDAwODBBMDAwNDlFMDAwMDAwMDA0NQotOjEwNDIyMDAwMjQwNzAwNDBBRjQ3MDgxNEFGNDAwODEwOEY0MjA5NDRFQwotOjEwNDIzMDAwOEY0MzA5NTA4RjQ0MDk1NDhGNDUwOTVDOEY0NjA5NENDMAotOjEwNDI0MDAwQUY4MjAwNjRBRjgzMDA1NEFGODQwMDUwQUY4NTAwNUM0MAotOjEwNDI1MDAwMDNFMDAwMDhBRjg2MDA2MDkzNDYwMTA5MzBDNTAwN0Y4NwotOjEwNDI2MDAwMDAwNTE4QzAwMDA1MjE0MDAwODMxMDIxMDNFMDAwMDg2QwotOjEwNDI3MDAwMjQ0MjAwODgzQzBBMDgwMDkxNEEzQjJEM0MwOTA4MDA3MgotOjEwNDI4MDAwOTUyOTNCMjYzQzA1MTEwMDAwMEEzQzAwMjUyODAwMDIyOAotOjEwNDI5MDAwMDBFODMwMjUwMEM1MTgyNTI0ODIwMDA4QUM4MzAwMDAwMgotOjEwNDJBMDAwMDNFMDAwMDhBQzgwMDAwNDhGNEEwMDJDOTc0RDA5MDhGOQotOjEwNDJCMDAwM0MwRTAwMEUwMzRFMzgyMTMxQUNGRkZGMDAwQzQxQzAxNAotOjEwNDJDMDAwQUY0ODAwMkM5NzQzMDkwODk0RUIwMDFBMDA4MDQwMjE2NgotOjEwNDJEMDAwMjQwMjAwMDEzMTY5RkZGRkFDODkwMDAwOENFNjAwMUM1QwotOjEwNDJFMDAwMDBBMDU4MjFBQzg2MDAwNDhDRTQwMDIwQUQwNDAwMDgzNgotOjEwNDJGMDAwOTBFMzAwMTkzMDYzMDAwMzEwNjIwMDNFMDAwMDAwMDBFQwotOjEwNDMwMDAwMjg2NTAwMDIxNEEwMDA3MTI0MEYwMDAyMTA2RjAwNENGOQotOjEwNDMxMDAwMDAwMDAwMDAyNDE4MDAwMzEwNzgwMDU1MDAwMDAwMDA4MQotOjEwNDMyMDAwM0MwOTA4MDA5NTI5M0IxQzkzNDMwOTM0OTM0RjA5MjEwQwotOjEwNDMzMDAwM0MwNTA4MDA5NEE1M0IyMjMwNjQwMEZGOTRFRTAwMkE1RgotOjEwNDM0MDAwMDAwNDY4ODIzMUVDMDBGRjk3OEYwMDU4MDAwREM2MDAxMgotOjEwNDM1MDAwMDAwQ0NDMDAzMTI3RkZGRjAzMTkxMDI1MDBBNzMwMjFFNgotOjEwNDM2MDAwMDA0NjIwMjUwMUNGNjgyMTNDMDM0MDAwMDA4MzYwMjVFMgotOjEwNDM3MDAwMDAwRDRDMDBBRDA5MDAwNEFEMEMwMDAwOTM1OTA5MjA1QwotOjEwNDM4MDAwM0MxODAwMDYyNTA5MDAxNDAwMTkzRTAwMDBGODI4MjVGNQotOjEwNDM5MDAwQUQwNTAwMDg4RjRFMDkyQzI1RTYwMDAxMzBDMjdGRkZENQotOjEwNDNBMDAwQUQwRTAwMEM4RjQ0MDkzMEE3ODIwMDU4MjUwMjAwMjg2QQotOjEwNDNCMDAwQUQwNDAwMTA4RjREMDkzOEFEMEQwMDE0QUQyQjAwMDQ3NQotOjEwNDNDMDAwOEY0QzA5NDBBRDJDMDAwODkzNDMwOTM3M0MxOTA4MDA3NQotOjEwNDNEMDAwOTMzOTNCMkNBRDIwMDAxMDAwMDM0NzAwMDAxOUM0MDBBNgotOjEwNDNFMDAwMDExODU4MjUzNTY3RkZGRkFEMjcwMDBDMDNFMDAwMDhEMgotOjEwNDNGMDAwQUY0QTAwMkMzQzA5MDgwMDk1MjkzQjFDM0MwRDA4MDBFNQotOjEwNDQwMDAwOTVBRDNCMjYzQzBDMDgwMDk1OEMzQjE4OTRFNDAwMjRBOQotOjEwNDQxMDAwMzEyRUZGRkYwMUFFMzAyMTAwQ0MxODIzMDAwNENDMDA2OAotOjEwNDQyMDAwMjQ2MkZGRjIwMzIyQzAyNTI0MEYwODAwQUQxODAwMENGRgotOjEwNDQzMDAwQUQwRjAwMTRBRDAwMDAxMDBBMDAwNEYyMjUwODAwMThBQQotOjEwNDQ0MDAwOTRFNTAwMjQ5NEVFMDAyODNDMDkwODAwOTUyOTNCMUNDMwotOjEwNDQ1MDAwMDAwNTZDMDAwMDBFNjQwMDM1QTY4MTAwMzU4NDA4MDA1QwotOjEwNDQ2MDAwQUQwNjAwMENBRDA0MDAxMDBBMDAwNEYyMjUwODAwMTQ4QgotOjEwNDQ3MDAwM0MwOTA4MDA5NTI5M0IxQzNDMEYwODAwOTVFRjNCMjZBMgotOjEwNDQ4MDAwM0MwNjA4MDA5NEM2M0IxODk0RTQwMDI0MzEyNUZGRkY0NQotOjEwNDQ5MDAwOTRFRDAwMjgwMUU1NzAyMTAxQzY2MDIzMDAwNENDMDBFMgotOjEwNDRBMDAwMDAwRDFDMDAyNTgyRkZFRTAwNjI3ODI1MzczODgxMDA2MAotOjEwNDRCMDAwMjQwNTA4MDBBRDE4MDAwQ0FEMEYwMDEwQUQwNTAwMTg2NAotOjEwNDRDMDAwQUQwMDAwMTQwQTAwMDRGMjI1MDgwMDFDMTQ2MEZGOTREQgotOjEwNDREMDAwMDAwMDAwMDA5NEUzMDAyNDNDMDkwODAwOTUyOTNCMUNERgotOjEwNDRFMDAwMDAwMzE0MDAzNDU5MDgwMEFEMTkwMDBDMEEwMDA0RjI0RQotOjEwNDRGMDAwMjUwODAwMTAwM0UwMDAwODI0MDIwMUY0MjdCREZGRThBRQotOjEwNDUwMDAwQUZCMDAwMTBBRkJGMDAxNDBFMDAwMDVDMDA4MDgwMjEyRgotOjEwNDUxMDAwMjQwNTAwNDBBRjQ1MDgxNDhGODMwMDU0OEY4NDAwNTA1OQotOjEwNDUyMDAwOEY4NTAwNUMwMDcwMTgyMTAwNjQxMDIzMTg0MDAwMDQ3RgotOjEwNDUzMDAwQUY4MzAwNTRBRjYzMDA1NDhGNjYwMDU0QUY4NjAwNTBDMQotOjEwNDU0MDAwMTIwMDAwMEMwMDAwMDAwMDhGNDQwMDc0OTM2ODAwODE4QQotOjEwNDU1MDAwMzQwOUZBMDAyRDA3MDAwNzEwRTAwMDA1MDA4OTEwMjEzQQotOjEwNDU2MDAwOTM2QzAwODEyNDBCMDFGNDAxOEI1MDA0MDE0NDEwMjE1MQotOjEwNDU3MDAwQUY2MjAwMEM4RjRFMDk1QzAxQzU2ODIzMTlBMDAwMDRDRQotOjEwNDU4MDAwOEZCRjAwMTQ4RjRGMDk1Q0FGOEYwMDVDOEZCRjAwMTQ4QQotOjEwNDU5MDAwOEZCMDAwMTAwQTAwMDA1RTI3QkQwMDE4OEY4NDAwNjRGMQotOjEwNDVBMDAwOEY4MzAwNTQ4RjgyMDA1MEFGNjQwMDQ0QUY2MzAwNTA4QgotOjEwNDVCMDAwMDNFMDAwMDhBRjYyMDA1NDNDMDM4MDAwMzQ2MjAwNzBFNgotOjEwNDVDMDAwOEM0MzAwMDAyN0JERkZGODMwODcwMEZGMzBBOTAwRkZCMwotOjEwNDVEMDAwMzBDODAwRkZBRjgzMDAzMDhGNDQwMTc4MDQ4MEZGRkVCNQotOjEwNDVFMDAwM0MwMjgwMDAzNDU5MDA3MDhGMzgwMDAwQTNBNzAwMDNGQwotOjEwNDVGMDAwM0MwNzA4MDA4Q0U3MDA3NDhGQUMwMDAwM0MwNjA4MDAwNAotOjEwNDYwMDAwOENDNjAwNzAwMzAzNzgyMzNDMEU3RkZGMDBFRkM4MjFBNwotOjEwNDYxMDAwMzVDREZGRkYwMDAwNTAyMTAxOEQyODI0MDBDQTE4MjE0QwotOjEwNDYyMDAwMDAwODQ3QzAwMzJGMjAyQjAwQTgxMDI1MDA2NEMwMjFEQwotOjEwNDYzMDAwQUZBMjAwMDAzQzAxMDgwMEFDMzkwMDc0M0MwMTA4MDA0NgotOjEwNDY0MDAwQUMzODAwNzA5MzRGMDEwQUEzQTAwMDAyM0MwRTgwRkYxQgotOjEwNDY1MDAwQTNBRjAwMDE4RkFDMDAwMDMxMkIwMDdGMzVDREZGRkZGMQotOjEwNDY2MDAwMDE4RDQ4MjQwMDBCNTYwMDAxMkE0MDI1MjQwNzMwMDAwNAotOjEwNDY3MDAwMjQwNkZGODAzQzA1MTAwMDI3QkQwMDA4QUY0ODAxNEMxMAotOjEwNDY4MDAwQUY0NzAxNTRBNzQwMDE1OEEzNDYwMTUyMDNFMDAwMDg3OAotOjEwNDY5MDAwQUY0NTAxNzgyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTBGMQotOjEwNDZBMDAwOEY2NTAwNzQzQzA2ODAwMDMwOTAwMEZGMDBBNjIwMjUzNgotOjEwNDZCMDAwMEUwMDAwNUNBRjY0MDA3NDkzNjMwMDA1MzQ2MjAwMDg3MAotOjEwNDZDMDAwMEUwMDAwNUVBMzYyMDAwNTAyMDAyMDIxOEZCRjAwMTRDRgotOjEwNDZEMDAwOEZCMDAwMTAyNDA1MDAwNTI0MDYwMDAxMEEwMDA1OTY4RAotOjEwNDZFMDAwMjdCRDAwMTgyN0JERkZFMDNDMDM4MDAwQUZCMDAwMTBERAotOjEwNDZGMDAwQUZCRjAwMThBRkIxMDAxNDM0NjIwMDcwOEM0NzAwMDBFNwotOjEwNDcwMDAwMzA5MDAwRkYzMEE4MDBGRkFGODcwMDMwOEY0NDAxNzg2MQotOjEwNDcxMDAwMDQ4MEZGRkUzQzE4ODAwMDM3MTEwMDcwOEUyRjAwMDBDRgotOjEwNDcyMDAwM0MwRDA4MDA4REFEMDA3NDNDMEEwODAwOEQ0QTAwNzBGNQotOjEwNDczMDAwMDFFNzcwMjMwMUFFMjgyMTAwMDA1ODIxMDBBRTMwMkI4NAotOjEwNDc0MDAwMDE0QjQ4MjEwMTI2MzgyMTNDMDEwODAwQUMyNTAwNzRBQQotOjEwNDc1MDAwMDAwMDg4MjEzQzAxMDgwMEFDMjcwMDcwMTEwMDAwMEYwOAotOjEwNDc2MDAwMDAwMDAwMDA4RjYyMDA3NDI2MTlGRkZGMzIwODAwN0ZFRQotOjEwNDc3MDAwMDAwMkZFMDIzM0U1MDA3RjE1MDAwMDA2MzMyMjAwRkYzMQotOjEwNDc4MDAwMjQwN0ZGODAwMjA3MjAyNjI0QTNGRkZGMDA4MzgwMjU0MwotOjEwNDc5MDAwMzIwMjAwRkYwMDQwODAyMTI0MTExMDA4MEUwMDAwNUM0RQotOjEwNDdBMDAwMDAwMDAwMDA4RjQ5MDgxODMxMjUwMDA0MTRBMEZGRkQwNwotOjEwNDdCMDAwMzIxODAwN0YwMDE4NzhDMDAwMTg3MTQwMDFDRjY4MjFCRQotOjEwNDdDMDAwMjVBQzAwODhBRjRDMDgxODI3NEEwOTgwOEQ0QjAwMjA4MwotOjEwNDdEMDAwQUY0QjAxNDQ4RDQ2MDAyNEFGNDYwMTQ4QTM1MDAxNTAyMQotOjEwNDdFMDAwMEUwMDAwNUVBNzQwMDE1ODAyMjAxMDIxOEZCRjAwMTg2NAotOjEwNDdGMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAyNwotOjEwNDgwMDAwMjdCREZGRTgzMDg0MDBGRkFGQkYwMDEwMEUwMDA1RTFCOAotOjEwNDgxMDAwMzBBNTAwRkY4RjgzMDA1NDhGQkYwMDEwMzQ0NTAwNDA0NwotOjEwNDgyMDAwMjQwNEZGOTAzQzAyMTAwMDI3QkQwMDE4QUY0MzAxNEM0OAotOjEwNDgzMDAwQTM0NDAxNTJBRjQ1MDE1NDAzRTAwMDA4QUY0MjAxNzhBMAotOjEwNDg0MDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwOTM0NTA5M0Y4QwotOjEwNDg1MDAwMjQwMjAwMDYzQzA4MDgwMDk1MDgzQjIyMzBBMzAwRkYxNAotOjEwNDg2MDAwMjQ4N0ZGRDgyNDA1MDAwNDEwNjIwMDM2MjQwNjAwMDJDNQotOjEwNDg3MDAwOTc0RTA5M0MzQzBEMDIwNDAwMDYzNDAwMzFDQ0ZGRkY4QQotOjEwNDg4MDAwMDE4RDU4MjVBQzhCMDAwMDkzNEEwOTNFMzE0OTAwMjAyOAotOjEwNDg5MDAwMTEyMDAwMDgwMDAwMDAwMDkzNUYwOTM2M0MxOTAxMDM1NQotOjEwNDhBMDAwMzczODAzMDAzM0YwMDBGRjAyMTg3ODI1MjQwNTAwMDg4QwotOjEwNDhCMDAwQUM4RjAwMDQ5MzU4MDkzNDkzNEQwOTIxM0MxMDQwMDBGQgotOjEwNDhDMDAwMzMwRTAwRkYwMDBFNjA4MjMxQUIwMEZGMDAwQzU2MDA3QgotOjEwNDhEMDAwMDAwQjE0MDAwMTQyMTgyNTAwNjhGODI1MDNGMEM4MjVENAotOjEwNDhFMDAwQUM5OUZGRDg5MzU4MDkzNzhGNEMwOTQ4OEY0RDA5NDAzMAotOjEwNDhGMDAwMDAwNTc4ODIzMzBFMDBGRjAxQ0Y1ODIxMDE4RDI4MjM1NwotOjEwNDkwMDAwMDAwQjU3MDAwMTQ2MTAyNTMwQTNGRkZGMDA0MzQwMjU1MAotOjEwNDkxMDAwMDAwRjQ4ODAwMTI3MzAyMUFDRTgwMDIwMEUwMDAwNUMyOQotOjEwNDkyMDAwMjREMDAwMjgyNDA0MDAwNDBFMDAwMDVFQTM2NDAwM0Y4RAotOjEwNDkzMDAwMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhBOAotOjEwNDk0MDAwMjdCRDAwMTgwQTAwMDY0NDI0MDYwMDEyMjdCREZGRDAyOAotOjEwNDk1MDAwMjQwOTAwMTBBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUM5MQotOjEwNDk2MDAwQUZCMTAwMTRBRkIwMDAxMDNDMDEwODAwQTAyOTNCMkNFRgotOjEwNDk3MDAwQUZCRjAwMjhBRkIyMDAxODk3NDgwOTA4MzA5NDAwRkY3NQotOjEwNDk4MDAwM0MwMjAwMEUzMTA3RkZGRjAwMDczMUMwQUY0NjAwMkM4QwotOjEwNDk5MDAwOTc0NDA5MDg5MzQ0MDEwQjMwQjMwMEZGMDM0MjgwMjE4MAotOjEwNDlBMDAwMzA4MzAwMzAwMDAwQTgyMTEwNjAwMEU0MDAwMDg4MjE1RQotOjEwNDlCMDAwMjQwQzAwMDQzQzAxMDgwMEEwMkMzQjJDOTM0QjA5M0UyNgotOjEwNDlDMDAwMDAwQjU2MDAwMDBBMkUwMzA0QTAwMTMxMDAwMDAwMDA3NQotOjEwNDlEMDAwQUY0MDAwNDg5MzUyMDEwQjMyNEYwMDIwMTFFMDAwMDYxNwotOjEwNDlFMDAwMDAwMDAwMDA5MzVGMDkzRTAwMUZDRTAwMDAxOUM2MDNCRgotOjEwNDlGMDAwMDcwMDAxNDgwMDAwMDAwMDkzNDYwMTBCMzBDMjAwNDA1MAotOjEwNEEwMDAwMTA0MDAwMDM4RjkyMDA1NDhGODcwMDU0MjRGMkZGRkY2MAotOjEwNEExMDAwOTYwQTAwMkM5MzQ1MDkzNDkzNDkwOTM3QTc4QTAwNTgxMAotOjEwNEEyMDAwMzBBNjAwRkYzMTI3MDBGRjAwMDcxMDgwMDA0NjIwMjEzQwotOjEwNEEzMDAwMDA5MUY4MjEzQzAxMDgwMEE0M0YzQjIyOTIwMzAwMTg5QQotOjEwNEE0MDAwM0MwMTA4MDBBNDIwM0IxQzNDMDEwODAwQTQyMDNCMThBQQotOjEwNEE1MDAwMzA3MDAwRkYwM0YwNDAyMTI1MEIwMDBBMzE3MEZGRkY4QQotOjEwNEE2MDAwM0MwMTA4MDBBNDI4M0IyNDNDMDEwODAwQTQyODNCMjY2NAotOjEwNEE3MDAwMEUwMDAwOUEwMjAwMjAyMTBFMDAwNEM1MDA0MDIwMjFGMwotOjEwNEE4MDAwOEY0QjAwMkM5NzU4MDkwODNDMTkwMDBFMDM1OTQwMjEwMAotOjEwNEE5MDAwMzMwRkZGRkYwMDBGNzFDMEFGNEUwMDJDOTc0MzA5MDg4MgotOjEwNEFBMDAwOTUwRDAwMUEyNDExMDAwMTAwNDAzODIxMzFBQ0ZGRkZBMAotOjEwNEFCMDAwQUM0QzAwMDA4RDBBMDAxQ0FDNEEwMDA0OEQwNTAwMjA5RgotOjEwNEFDMDAwQUM0NTAwMDg5MTA5MDAxOTMxMjMwMDAzMTA3MTAwQkRBNQotOjEwNEFEMDAwMjg3MTAwMDIxNjIwMDEwMzI0MEMwMDAyMTA2QzAwRjU1RQotOjEwNEFFMDAwMjQwRDAwMDMxMDZEMDBDQTAwMDAwMDAwM0MwOTA4MDBGRQotOjEwNEFGMDAwOTUyOTNCMUM5MzQzMDkzNDkzNTgwOTIxM0MwQTA4MDAyQgotOjEwNEIwMDAwOTU0QTNCMjIzMDY0MDBGRjk1MEMwMDJBMDAwNEY4ODI4RAotOjEwNEIxMDAwMzMxOTAwRkY5Nzk4MDA1ODAwMUY3NjAwMDAxOTdDMDA5OQotOjEwNEIyMDAwMzEyNkZGRkYwMUNGNDAyNTAxNDY2ODIxMDEwRDg4MjU3MAotOjEwNEIzMDAwMDE5ODI4MjEzQzA4NDAwMDAyMjgxMDI1MDAwNTRDMDA1RgotOjEwNEI0MDAwQUNFOTAwMDRBQ0UyMDAwMDkzNDMwOTIwM0MwNDAwMDZGOQotOjEwNEI1MDAwMjRFOTAwMTQwMDAzRkUwMDAzRTRDODI1QUNGOTAwMDhCMgotOjEwNEI2MDAwOEY0RTA5MkMyNzBGMDAwMTMxRTY3RkZGQUNFRTAwMENDMQotOjEwNEI3MDAwOEY0RDA5MzBBNzg2MDA1ODI0RTYwMDI4QUNFRDAwMTBDMAotOjEwNEI4MDAwOEY0QzA5MzhBQ0VDMDAxNEFEMzIwMDA0OEY1MTA5NDA1MQotOjEwNEI5MDAwQUQzMTAwMDg5MzQyMDkzNzNDMDUwODAwOTBBNTNCMkMzNQotOjEwNEJBMDAwQUQyMDAwMTAwMDAyMjcwMDAwMDUxQzAwMDA4M0Y4MjUzRQotOjEwNEJCMDAwMzdGMkZGRkZBRDMyMDAwQ0FGNEIwMDJDMTJBMDAwMzNEOAotOjEwNEJDMDAwMDAwMDAwMDA5MzUyMDkzRjI0MTUwMDA2MjQwNTAwMDQ0QwotOjEwNEJEMDAwMzI0QjAwRkYxMTc1MDBDRDI0MDkwMDAyOTc0RjA5M0NBQwotOjEwNEJFMDAwM0MwRTAyMDQzMUVERkZGRjAxQUU2MDI1QUNFQzAwMjg2NQotOjEwNEJGMDAwOTM1MTA5M0UzMjIyMDAyMDEwNDAwMDA4MDAwMDAwMDBCRQotOjEwNEMwMDAwOTM0NDA5MzYzQzE4MDEwMzM3MUYwMzAwMzA5OTAwRkYxNQotOjEwNEMxMDAwMDMzRjI4MjVBQ0M1MDAwNDI0MDUwMDA4OTM1MjA5MzQzRAotOjEwNEMyMDAwOTM0MzA5MjEwMDA1NjA4MjMyNEIwMEZGMDAwQkE4ODJFQwotOjEwNEMzMDAwMzA2NDAwRkYwMDE1RkUwMDAwMDRDNDAwMDNGOEM4MjUxRQotOjEwNEM0MDAwMDMyQTc4MjUwMUU4NzAyNUFDQ0VGRkQ4OTM0RDA5MzdBQgotOjEwNEM1MDAwOEY1MjA5NDg4RjQyMDk0MDMxQjEwMEZGMDIyQzU4MjE4MAotOjEwNEM2MDAwMDI0MjMwMjMwMDBCMUYwMDAwMDlBQzAwMDA3NTQ4MjVFQwotOjEwNEM3MDAwMzBDOEZGRkYwMTI4NTAyNTBFMDAwMDVDQUNFQTAwMjA4MAotOjEwNEM4MDAwMjQwNzAwMDQwRTAwMDA1RUEzNjcwMDNGMEUwMDAwQzM2RgotOjEwNEM5MDAwMDIwMDIwMjEzQzA1MDgwMDkwQTUzQjJDMzBCMDAwMDMwOQotOjEwNENBMDAwMTIwMDAwMEYwMjgwMjAyMThGODgwMDU0MjUwOTAwMDE4NgotOjEwNENCMDAwQUY4OTAwNTRBRjY5MDA1MDhGNkEwMDU0MDE0OTM4MjMwRQotOjEwNENDMDAwMThFMDAwMDIwMTIwMjAyMThGNjQwMDU0QUY2NDAwNTREQQotOjEwNENEMDAwOEY0MjAwNzQyNDQ2MDFGNEFGNjYwMDBDMDI4MDIwMjE0QwotOjEwNENFMDAwMDI2MDI4MjFBNzYwMDA2ODBFMDAwNUUxM0MxMzEwMDA1NwotOjEwNENGMDAwOEY4RTAwNTQzNDU0MDAwNkFGNEUwMTRDOEY4RDAwNEMwMwotOjEwNEQwMDAwOEZCRjAwMjg4RkI1MDAyNDMxQjEwMEZGMjVBQzAwMDExMgotOjEwNEQxMDAwQUY4QzAwNEM4RkIyMDAxOEEzNTEwMTUyOEZCMDAwMTAxRAotOjEwNEQyMDAwQUY1NDAxNTQ4RkIxMDAxNEFGNTMwMTc4OEZCNDAwMjBGOQotOjEwNEQzMDAwOEZCMzAwMUMwM0UwMDAwODI3QkQwMDMwOTM1OTA5M0VFMwotOjEwNEQ0MDAwMDAxOUM2MDAwMDE4OTYwMzA2NDIwMDQ4MjQxMTAwMDIwQwotOjEwNEQ1MDAwOTM0MjA5MjMzMDQ0MDAwMjEwODBGRjFFOEY4NzAwNjBCOQotOjEwNEQ2MDAwOEY4NjAwNTQxNEU2RkYxQjAwMDAwMDAwMEUwMDAwNUM1QwotOjEwNEQ3MDAwMDAwMDAwMDA5MzY1MDAzRjI0MDgwMDE2MzBBOTAwRkZFMgotOjEwNEQ4MDAwMTEyODAwMEMyNDBBMDAwODNDMEQwODAwOTFBRDNCMkNCMgotOjEwNEQ5MDAwMzVBQzAwMDEzQzAxMDgwMEEwMkMzQjJDOTM2QjAwM0Y3QwotOjEwNERBMDAwMzE2MzAwRkYxMDZBMDA2NTI0MEUwMDBBMTA2RTAwNUU3OQotOjEwNERCMDAwMjQwMjAwMEMwRTAwMDA1RTAwMDAwMDAwMEEwMDA2OURBOAotOjEwNERDMDAwMDAwMDAwMDAzQzA5MDgwMDk1MjkzQjFDM0MxOTA4MDAyNAotOjEwNEREMDAwOTczOTNCMjYzQzE4MDgwMDk3MTgzQjE4OTUwRTAwMjQ3RAotOjEwNERFMDAwMzEzRkZGRkYwMzNGNzgyMTAxRjg2ODIzMDAwRThDMDA1QwotOjEwNERGMDAwMjVBQ0ZGRjIwMjJDNTAyNTI0MDUwODAwMjQ0NzAwMTg5QQotOjEwNEUwMDAwQUM0QTAwMENBQzQ1MDAxNDBBMDAwNkU1QUM0MDAwMTBBQQotOjEwNEUxMDAwM0MwOTA4MDA5NTI5M0IxQzNDMTgwODAwOTcxODNCMjZDNAotOjEwNEUyMDAwM0MwRjA4MDA5NUVGM0IxODk1MEQwMDI0MzEzOUZGRkYyQQotOjEwNEUzMDAwOTUwQzAwMjgwMzE5NzAyMTAxQ0Y4ODIzMDAwRDJDMDA0OAotOjEwNEU0MDAwMDAwQzU0MDAyNjIyRkZFRTAxNDIzMDI1MzRBNDgxMDBEQwotOjEwNEU1MDAwMjQwMzA4MDBBQ0U0MDAwQ0FDRTYwMDEwQUNFMzAwMTgzRQotOjEwNEU2MDAwQUNFMDAwMTQwQTAwMDZFNTI0RTcwMDFDM0MwMTA4MDA0MQotOjEwNEU3MDAwQTAzMTNCMkM5MzQzMDkzRTI0MTUwMDAxMzA3RjAwMjBENAotOjEwNEU4MDAwMTdFMEZFRDQyNDExMDAwODBBMDAwNjlEMjQxMTAwMDQzNgotOjEwNEU5MDAwOEY2RTAwODQ4RjREMDk0MDExQTBGRUNEQUY4RTAwNTQ1RgotOjEwNEVBMDAwMjQwRjAwMTQzQzAxMDgwMEEwMkYzQjJDMEEwMDA2OUM5NAotOjEwNEVCMDAwMDAwMDAwMDA5NTAyMDAyNDk1MDYwMDI4M0MwOTA4MDAyNwotOjEwNEVDMDAwOTUyOTNCMUMwMDAyMjQwMDAwMDYxQzAwMzQ5RjgxMDAzMQotOjEwNEVEMDAwMzQ3OTA4MDBBQ0ZGMDAwQ0FDRjkwMDEwMEEwMDA2RTVCQwotOjEwNEVFMDAwMjRFNzAwMTQxNDYwRkYwMTAwMDAwMDAwOTUxODAwMjQ1RQotOjEwNEVGMDAwM0MwOTA4MDA5NTI5M0IxQzI0NDcwMDEwMDAxODdDMDA0MQotOjEwNEYwMDAwMzVFRTA4MDAwQTAwMDZFNUFDNEUwMDBDMEEwMDA3MUY0QgotOjEwNEYxMDAwMjQwOTAwMTI4RjY0MDA0Q0FGNjQwMDU0OEY2MzAwNTQ2NgotOjEwNEYyMDAwMEEwMDA2QTZBRjYzMDA1MEEzNjIwMDNGMEUwMDAwNUVCOQotOjEwNEYzMDAwMDAwMDAwMDAwQTAwMDY5RDAwMDAwMDAwMjQwMjAwMTQ4QQotOjEwNEY0MDAwMEEwMDA3RjNBMzYyMDAzRjI3QkRGRkU4MzA4NDAwRkY5QgotOjEwNEY1MDAwQUZCRjAwMTAwRTAwMDVFMTMwQTUwMEZGOTM3ODAwN0U4MgotOjEwNEY2MDAwOTM3OTAwN0Y5MzZFMDA4MDkzNjgwMDdBMzMyRjAwRkY1RgotOjEwNEY3MDAwMDAxODY2MDAwMDBGNkMwMDMxQ0IwMEZGMDE4RDQ4MjU0MgotOjEwNEY4MDAwMDAwQjUyMDA4RkJGMDAxMDAxMkEzODI1MzEwNjAwRkZBOAotOjEwNEY5MDAwMzQ0NDcwMDAwMEU2MjgyNTI0MDJGRjgxM0MwMzEwMDAwMQotOjEwNEZBMDAwMjdCRDAwMThBRjQ1MDE0Q0FGNDQwMTU0QTM0MjAxNTI0NAotOjEwNEZCMDAwMDNFMDAwMDhBRjQzMDE3ODI3QkRGRkQ4QUZCMjAwMTg2NwotOjEwNEZDMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwQUZCMzAwMUNGMgotOjEwNEZEMDAwOTM0MjAxMDkzMDg2MDBGRjMwQjAwMEZGMDAwNjE4QzI3RQotOjEwNEZFMDAwMzIwNDAwMDIzMDcxMDAwMTE0ODAwMDA1MzA1MjAwRkZDRAotOjEwNEZGMDAwOTM2NzAwMDUzMEU1MDAwODEwQTAwMDBEMzBDODAwMTBEMAotOjEwNTAwMDAwMDI0MDIwMjEwRTAwMDVDRDAyMjAyODIxMjQwNDAwMDFBOQotOjEwNTAxMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQxNwotOjEwNTAyMDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjg4OQotOjEwNTAzMDAwMTUwMDAwMzIwMDAwMDAwMDkzNDMwMTA5MDAwMDI4MjEwMAotOjEwNTA0MDAwMzA2MjAwN0YwMDAyMjBDMDAwMDJGOTQwMDNFNDk4MjE5MgotOjEwNTA1MDAwMjY3OTAwODgwMzNCOTgyMThFNzgwMDI0OEU2RjAwMDgwMwotOjEwNTA2MDAwMTMwRjAwNDYwMDAwMDAwMDhGNjQwMDg0MjQxODAwMDIyMwotOjEwNTA3MDAwMDAwNEZEODIzM0Y5MDAwMzEzMzgwMDdDMDAwMDAwMDBCNwotOjEwNTA4MDAwOTM2NjAwODM5MzRBMDEwOTUxNDYwMDA0MzIwNTAwN0M2RgotOjEwNTA5MDAwMTBBMDAwNjAwMDAwMDAwMDMyMDUwMDdDMTRBMDAwNTM0NgotOjEwNTBBMDAwMDI0MDIwMjExNjIwMDAwNjMyMDQwMDAxOEU3RjAwMjREOQotOjEwNTBCMDAwOEY1OTAxMDQxN0Y5RkZENjAwMDAyMDIxMzIwNDAwMDFBNgotOjEwNTBDMDAwMTA4MDAwMEEwMjQwMjAyMThGNDIwOTQwOEY5MzAwNjQyMwotOjEwNTBEMDAwMTA1MzAwMDYwMDAwMDAwMDBFMDAwNjdCMDIyMDI4MjE2RAotOjEwNTBFMDAwOEY0MzA5NDBBRjYzMDA0NDAyNDAyMDIxMEUwMDA2Mjg5MAotOjEwNTBGMDAwMDIyMDI4MjEwQTAwMDgyQzI0MDQwMDAxM0MwOTA4MDA5MQotOjEwNTEwMDAwOEQyOTAwNjQyNTI2MDAwMTNDMDEwODAwQUMyNjAwNjRCRQotOjEwNTExMDAwMTYwMDAwMTIwMDAwMDAwMDhGNkQwMDg0M0MwRTAwQzBERAotOjEwNTEyMDAwMDFBRTYwMjQxNTgwMDAwNTAyNDAyMDIxMEUwMDA3RkEyMAotOjEwNTEzMDAwMDIyMDI4MjEwQTAwMDgyQzI0MDQwMDAxMjQwNTAwMDQ3MAotOjEwNTE0MDAwMEUwMDA1OTYyNDA2MDAwMTAyNDAyMDIxMEUwMDA3RkFGOQotOjEwNTE1MDAwMDIyMDI4MjEwQTAwMDgyQzI0MDQwMDAxMEUwMDAwM0QzMgotOjEwNTE2MDAwMjQwNDAwMDE5MzZCMDA3RDAyMEI1MDI1MEUwMDAwNUVBRAotOjEwNTE3MDAwQTM2QTAwN0QwQTAwMDg2RjhGNkQwMDg0OEY2NjAwNzQzQgotOjEwNTE4MDAwOEY0ODAxMDQ4RTY3MDAyNDAwMDY0RTAyMTUwN0ZGQjYwMwotOjEwNTE5MDAwMzEyNjAwN0Y5MzZCMDA4MzI2NDQwMDAxMzA4QTAwN0YxNAotOjEwNTFBMDAwMTE0NjAwNDMzMTYzMDBGRjU0NjRGRkIwOEY2NDAwODRGNAotOjEwNTFCMDAwMjY0NTAwMDEzMEIxMDA3RjMwQTIwMEZGMTIyNjAwMDQxNgotOjEwNTFDMDAwMjQwNTAwMDEwMDQwOTAyMTBBMDAwODQyMjQxMTAwMDEzQQotOjEwNTFEMDAwMjQwRkZGODAwMjRGNzAyNDAxQ0Y5MDI2MzI0MjAwRkYzRgotOjEwNTFFMDAwMDA0MDkwMjEwQTAwMDg0MjI0MTEwMDAxMEUwMDA2N0JCNQotOjEwNTFGMDAwMDIyMDI4MjEzMjE4MDAzMDEzMDBGRkFBMzIxMDAwODI0QQotOjEwNTIwMDAwMDI0MDIwMjEwRTAwMDVDRDAyMjAyODIxMEEwMDA4MkM5MgotOjEwNTIxMDAwMjQwNDAwMDE4RjZFMDA3NDNDMEY4MDAwMjQwNTAwMDNGRAotOjEwNTIyMDAwMDFDRjkwMjVBRjcyMDA3NDkzNzEwMDgzMjQwNjAwMDFCMgotOjEwNTIzMDAwMEUwMDA1OTYzMjI0MDBGRjBFMDAwMDNEMjQwNDAwMDFGQwotOjEwNTI0MDAwOTM2RDAwN0QwMjBENjAyNTBFMDAwMDVFQTM2QzAwN0Q1NQotOjEwNTI1MDAwM0MwQjA4MDA4RDZCMDA1NDI1NzAwMDAxM0MwMTA4MDBEOAotOjEwNTI2MDAwQUMzMDAwNTQwQTAwMDgyQzI0MDQwMDAxOEY2ODAwNzQzQwotOjEwNTI3MDAwM0MwOTgwMDAyNDA1MDAwNDAxMDkzODI1QUY2NzAwNzQ0QgotOjEwNTI4MDAwOTM2MzAwODMyNDA2MDAwMTBFMDAwNTk2MzA2NDAwRkYzRQotOjEwNTI5MDAwMEUwMDAwM0QyNDA0MDAwMTkzNjIwMDdEMDIwMjk4MjU2NwotOjEwNTJBMDAwMEUwMDAwNUVBMzczMDA3RDBBMDAwODJDMjQwNDAwMDE5OAotOjEwNTJCMDAwMzI0RDAwODAzOUFDMDA4MDU0NkNGRjZDOEY2NDAwODRFOAotOjEwNTJDMDAwMEEwMDA4OTUyNjQ1MDAwMTI3QkRGRkQwM0MwQTAwMDhDQQotOjEwNTJEMDAwQUZCRjAwMkNBRkI0MDAyOEFGQjMwMDI0QUZCMjAwMjBBMgotOjEwNTJFMDAwQUZCMTAwMUNBRkIwMDAxODAzNEFEODIxMjQwOTAwNDAxOAotOjEwNTJGMDAwQUY0OTA4MTRBRjQwMDgxMDhGNDIwOTQ0OEY0MzA5NTA0QQotOjEwNTMwMDAwOEY0NjA5NTQ4RjQ3MDk1QzhGNDgwOTRDOTM0NDAxMDgyNAotOjEwNTMxMDAwOTM0NTAxMEJBRjgyMDA2NDMwODQwMEZGMzBBNTAwRkY4RAotOjEwNTMyMDAwQUY4MzAwNTRBRjg2MDA1MEFGODcwMDVDMEUwMDA4MTZCNAotOjEwNTMzMDAwQUY4ODAwNjAxNDQwMDE1QThGQkYwMDJDQTc2MDAwNjgzRQotOjEwNTM0MDAwOTM0RDA5MDAyNDBCMDA1MDNDMTQwODAwMjY5NDNDMzA3NwotOjEwNTM1MDAwMzFBQzAwRkYzQzEyMDgwMDI2NTIzQzQwMTE4QjAwMDM4OAotOjEwNTM2MDAwMDAwMDAwMDAwMDAwQTAyMTAwMDA5MDIxOTM0RjAxMDlERgotOjEwNTM3MDAwOEY4ODAwNTQyNDAyMDAxMDMxRjEwMDdGMDAxMTcwQzBBQQotOjEwNTM4MDAwMDAxMTY5NDAwMUFFMjgyMTI0QjgwMDg4QUY1ODA4MThFMAotOjEwNTM5MDAwOEY0QTAxMDQ4RjRCMDlBNDNDMEMwMDBFMDM0Q0M4MjExQQotOjEwNTNBMDAwMDE0QjQ4MjMzQzAxMDgwMEFDMjkzQjA4OEY0NDA5NThCNQotOjEwNTNCMDAwM0MwMTA4MDBBMDIyM0IyQzk3NDYwOTA4MDA4ODE4MjNDRQotOjEwNTNDMDAwM0MwMTA4MDBBQzIzM0IwQzMwQzdGRkZGMDAwN0Y5QzBDRAotOjEwNTNEMDAwM0MwMTA4MDBBQzI4M0IzMEFGNUYwMDJDOTc0MjA5MDgyNQotOjEwNTNFMDAwOTczMDAwMkM4RTkxMDAwMDkzMkYwMDE4MDM3ODk4MjE5RAotOjEwNTNGMDAwQTc5MDAwNThBRjkzMDA0ODAyMjBGODA5MzFGMDAwRkY1MQotOjEwNTQwMDAwMzA0RTAwMDIxNUMwMDE4RTMwNTMwMDAxMTI2MDAxNDI3RgotOjEwNTQxMDAwMDAwMDAwMDA4RjRGMDlBNDI0MTMwMDAxM0MwMTA4MDA4NAotOjEwNTQyMDAwQUMyRjNCMzQ5MzUxMDkzNDkzNEUwOTM3MzIyNTAwRkY5QQotOjEwNTQzMDAwMzFDRDAwRkYwMDBENjA4MDAxODU1MDIxMDE1MDU4MjFDMQotOjEwNTQ0MDAwM0MwMTA4MDBBNDJCM0IyNDNDMDEwODAwQTQyQTNCMjI3OQotOjEwNTQ1MDAwOTM0OTA5MzQzMTIyMDBGRjAyMDIyMDIxMjQ5MDAwMTBEOAotOjEwNTQ2MDAwM0MwMTA4MDBBNDMwM0IyMDI0MDgwMDA2OEY5OTAwNTQxQQotOjEwNTQ3MDAwM0MwMTA4MDBBQzI4M0IyODhGOUYwMDVDOEY1ODA5NThERQotOjEwNTQ4MDAwMDAwMDgwMjEwM0Y5MjgyMzA0QTAwMTNDMDMxOTIwMjNGNAotOjEwNTQ5MDAwMDQ4MDAxM0EwMEE0MzgyQjEwRTAwMTNDMDAwMDAwMDAxOQotOjEwNTRBMDAwM0MwMTA4MDBBQzI1M0IwQzhFNDIwMDAwMDA0MEY4MDk4RQotOjEwNTRCMDAwMDAwMDAwMDAzMDQ2MDAwMjE0QzAwMEREMDA0MDg4MjFEQQotOjEwNTRDMDAwMzA0MzAwMDE1NDYwMDAxMDhFNDIwMDA0M0MwNDA4MDA4OAotOjEwNTREMDAwOEM4NDNCMTAzQzA5QzAwMDAwODk4MDI1QUY1MDBFMDAzMQotOjEwNTRFMDAwOEY0QjAwMDAzMTZBMDAwODExNDBGRkZEMDAwMDAwMDBGMgotOjEwNTRGMDAwOTc0NTBFMDgyNDEwMDAwMUE3ODUwMDQwOEY0QzBFMDQyQwotOjEwNTUwMDAwQUY4QzAwMzQ4RTQyMDAwNDAwNDBGODA5MDAwMDAwMDAxNwotOjEwNTUxMDAwMDIyMjg4MjUzMjJEMDAwMjE1QTAwMTU5MDAwMDAwMDA0QQotOjEwNTUyMDAwM0MwOTA4MDA5NTI5M0IxODNDMDYwODAwOTRDNjNCMjQxQQotOjEwNTUzMDAwM0MwNDA4MDA5NDg0M0IxQTNDMTkwODAwOEYzOTNCMTA0NgotOjEwNTU0MDAwMDEyNjU4MjEzQzE4MDgwMDhGMTgzQjM0M0MxRjA4MDBFNgotOjEwNTU1MDAwOTdGRjNCMkUwMTY0MTgyMThGNEUwOTQwMDMyOTI4MjExMwotOjEwNTU2MDAwMjQ2RjAwMDIwMzE5NjgyMTAwQkY2MDIxM0MwMTA4MDA3QwotOjEwNTU3MDAwQTQyQjNCMjZBRjhFMDA2NDNDMDEwODAwQUMyRDNCMzRDRAotOjEwNTU4MDAwM0MwMTA4MDBBNDJDM0IxQzBFMDAwMDlBMzFFNEZGRkZGNAotOjEwNTU5MDAwOEY4NzAwNEMwMDQwMjAyMTNDMDEwODAwQTAyNzNCMkRCNAotOjEwNTVBMDAwOEU0MjAwMDgyNEU4MDAwMUFGODgwMDRDMDA0MEY4MDk1MgotOjEwNTVCMDAwMDAwMDAwMDA4RjRCMDAyQzk3NDkwOTA4M0MwQTAwMEVBMAotOjEwNTVDMDAwMDM0QTM4MjEzMTI0RkZGRjAwMDQxOUMwOEY4QTAwNTQ5OAotOjEwNTVEMDAwQUY0MzAwMkM5NzQzMDkwODk0RTYwMDFBMDA0MDQwMjE4RAotOjEwNTVFMDAwMzBERkZGRkZBQzVGMDAwMDhDRjkwMDFDQUM1OTAwMDRGOQotOjEwNTVGMDAwOENGODAwMjBBQzU4MDAwODkwRUYwMDE5MzFFMzAwMDM0QwotOjEwNTYwMDAwMTA3MzAwRTYwMDAwMDAwMDI4NjIwMDAyMTQ0MDAxMDI0RQotOjEwNTYxMDAwMjQwQzAwMDIxMDZDMDBGNDI0MEQwMDAzMTA2RDAwQTc5MAotOjEwNTYyMDAwMDAwMDAwMDAzQzA5MDgwMDk1MjkzQjFDOTM0NTA5MzQwMwotOjEwNTYzMDAwOTM0QzA5MjEzQzBGMDgwMDk1RUYzQjIyMzBCRjAwRkYzRgotOjEwNTY0MDAwOTRFRTAwMkEwMDFGNjg4MjMxOTkwMEZGOTc4QzAwNTg2MQotOjEwNTY1MDAwMDAwRDE2MDAwMDE5QzQwMDMxMjRGRkZGMDFFNDMwMjFDMQotOjEwNTY2MDAwMDA1ODQ4MjUwMTI2MzgyNTAxQ0MyODIxM0MwMzQwMDA1QwotOjEwNTY3MDAwMDBFM0Y4MjUwMDA1NkMwMEFEMEQwMDA0QUQxRjAwMDAyRgotOjEwNTY4MDAwOTM1OTA5MjAzQzE4MDAwNjI1MEQwMDE0MDAxOTdFMDBDRQotOjEwNTY5MDAwMDFGODcwMjVBRDBFMDAwODhGNDIwOTJDMjU4NjAwMDEwNwotOjEwNTZBMDAwOEU0QzAwMENBRDAyMDAwQzhGNDQwOTMwMzBDOTdGRkZENgotOjEwNTZCMDAwQTc4OTAwNThBRDA0MDAxMDhGNDcwOTM4MjUwNDAwMjgzOQotOjEwNTZDMDAwQUQwNzAwMTRBREFBMDAwNDhGNDUwOTQwQURBNTAwMDg0MAotOjEwNTZEMDAwOTM0MzA5MzczQzFGMDgwMDkzRkYzQjJDQURBMDAwMTBGQgotOjEwNTZFMDAwMDAwM0M3MDAwMDFGQ0MwMDAzMTk3ODI1MzVFRUZGRkYyQgotOjEwNTZGMDAwQURBRTAwMENBRjRCMDAyQzAxODBGODA5MDAwMDAwMDA5QgotOjEwNTcwMDAwM0MwNjA4MDA5NEM2M0IyNjNDMDIwODAwOTQ0MjNCMUEyMwotOjEwNTcxMDAwMDBDMjQ4MjEyNTJCMDAwMjBFMDAwMEMzMzE2NEZGRkZBOAotOjEwNTcyMDAwM0MwODA4MDA4RDA4M0IwODNDMDcwODAwOENFNzNCMTA0QwotOjEwNTczMDAwMDEwNzUwMjMzQzAxMDgwMEFDMkEzQjA4MTU0MDAwMDYzNQotOjEwNTc0MDAwMDAwMDAwMDAzQzA4MDgwMDhEMDgzQjI4MzUwQTAwNDA5NgotOjEwNTc1MDAwM0MwMTA4MDBBQzJBM0IyODEyMDAwMDg0OEY4MzAwNDhEQgotOjEwNTc2MDAwOEY0NzBFMTA4RjkwMDA0OEFFMDcwMDIwOEY0QjBFMTgwOQotOjEwNTc3MDAwQUUwQjAwMjQzQzEwMDgwMDk2MTAzQjFDMEUwMDAwNUM5MQotOjEwNTc4MDAwMDAwMDAwMDAyNDBGMDA0MEFGNEYwODE0OEY4NjAwNTQyMwotOjEwNTc5MDAwOEY4OTAwNTAwMEQwMTgyMTAwNjk3MDIzMTlDMDAwMDRCRgotOjEwNTdBMDAwQUY4MzAwNTRBRjYzMDA1NDhGNjQwMDU0QUY4NDAwNTA0MwotOjEwNTdCMDAwMTIwMDAwMEMwMDAwMDAwMDhGNDQwMDc0OTM3ODAwODFGOAotOjEwNTdDMDAwMzQxOUZBMDAyRjAyMDAwNzEwNDAwMDA1MDA5OTE4MjEzMwotOjEwNTdEMDAwOTM3RjAwODEyNDBDMDFGNDAzRUM2ODA0MDFBNDE4MjFEOAotOjEwNTdFMDAwQUY2MzAwMEM4RjRBMDk1QzhGODgwMDVDMDE0ODI4MjM1NgotOjEwNTdGMDAwMThBMDAwMDMwMDAwMDAwMDhGNTAwOTVDQUY5MDAwNUMwRgotOjEwNTgwMDAwMEUwMDAwNUUwMDAwMDAwMDhGODMwMDU0OEU0NzAwMTBFMQotOjEwNTgxMDAwM0MwMTA4MDBBQzIzM0IzMDAwRTBGODA5MDAwMDAwMDAyOAotOjEwNTgyMDAwM0MwQjA4MDA4RDZCM0IwODE1NjBGRjEwMjQwODAwMDYzOAotOjEwNTgzMDAwOEY1OTAwMjQ5NzVGMDkwODhGODkwMDY0OEY4RTAwNTQ2OAotOjEwNTg0MDAwM0MwQzAwMUY5Nzg0MDA1ODhGOEYwMDJDOEY5MzAwNTBDMgotOjEwNTg1MDAwMzNGOEZGRkYzNThERkY4MDAzMkQzMDI0MDAxODExQzA3MQotOjEwNTg2MDAwMzIzMjAwMTBBRjQyMDAyNEE1RTQwMDJDQUY0NjAwMjRFMQotOjEwNTg3MDAwQUY2OTAwNDRBRjZFMDA1MEFGNzMwMDU0NTY0MDAwN0NENwotOjEwNTg4MDAwOEU4NTAwMDQzMjJBMDA0MDU1NDAwMDMxOEU5MTAwMDg3OAotOjEwNTg5MDAwOEU4ODAwMEMwMTAwRjgwOTAwMDAwMDAwOEZCRjAwMkM2QQotOjEwNThBMDAwOEZCNDAwMjg4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUM2QQotOjEwNThCMDAwOEZCMDAwMTgwM0UwMDAwODI3QkQwMDMwM0MwOTA4MDA0NQotOjEwNThDMDAwOTUyOTNCMUMzQzAzMDgwMDk0NjMzQjI2M0MwNDA4MDBEQwotOjEwNThEMDAwOTQ4NDNCMTg5NEY5MDAyNDMxMjVGRkZGOTRGODAwMjhBNAotOjEwNThFMDAwMDA2NUY4MjEwM0U0NzgyMzAwMTk2NDAwMDAxODZDMDBCNwotOjEwNThGMDAwMjVFRUZGRUUwMUFFMzAyNTM1ODI4MTAwMjQwMzA4MDAzRAotOjEwNTkwMDAwQUQwMjAwMENBRDA2MDAxMEFEMDMwMDE4QUQwMDAwMTQ5MAotOjEwNTkxMDAwMEEwMDA5QjMyNTA4MDAxQzkzNDMwMTA5OEY4NjAwMzg0QgotOjEwNTkyMDAwMDAwMzNFMDAwMEU2NDAyNUFGNDgwMDgwOEY1RjA5QTBERAotOjEwNTkzMDAwOEY1ODA5QTRBRkJGMDAxMEFGNUYwRTE0OEZCOTAwMTBDRAotOjEwNTk0MDAwQUY1OTBFMTBBRjU4MEUxQzBBMDAwOTJEQUY1ODBFMTg5MwotOjEwNTk1MDAwMDIyMEY4MDkwMDAwMDAwMDhFODgwMDBDMDEwMEY4MDkwMAotOjEwNTk2MDAwMDAwMDAwMDAwQTAwMEE1MDhGQkYwMDJDQTQ2MDAwMjAzNQotOjEwNTk3MDAwQTQ3MzAwMjIwQTAwMEEwNUFDNzMwMDI0M0MwMTA4MDA0RAotOjEwNTk4MDAwQUMyMDNCMEMwQTAwMDk1MzhFNDIwMDAwM0MwMTA4MDA4OQotOjEwNTk5MDAwQUMyNDNCMEMwQTAwMDk1MzhFNDIwMDAwM0MwOTA4MDA2RAotOjEwNTlBMDAwOTUyOTNCMUMzQzFGMDgwMDk3RkYzQjI2M0MwNTA4MDAzRgotOjEwNTlCMDAwOTRBNTNCMTg5NEY4MDAyNDMxMjRGRkZGMDNFNEM4MjE4OAotOjEwNTlDMDAwMDMyNTc4MjMwMDE4NkMwMDI1RUVGRkYyMDFBRTYwMjU1OAotOjEwNTlEMDAwQUM0QzAwMEMyNDAyMDgwMEFEMDIwMDE0QUQwMDAwMTAxNQotOjEwNTlFMDAwMEEwMDA5QjMyNTA4MDAxODk0RTYwMDI0OTRFMzAwMjg2RgotOjEwNTlGMDAwM0MwOTA4MDA5NTI5M0IxQzAwMDYyNDAwMDAwM0ZDMDAxQwotOjEwNUEwMDAwMzQ4NTgxMDAzN0Y5MDgwMEFEMDUwMDBDQUQxOTAwMTA5MAotOjEwNUExMDAwMEEwMDA5QjMyNTA4MDAxNDE0NjBGRjAyMDAwMDAwMDAwQQotOjEwNUEyMDAwOTRGODAwMjQzQzA5MDgwMDk1MjkzQjFDMDAxODdDMDBEMAotOjEwNUEzMDAwMzVFRTA4MDBBRDBFMDAwQzBBMDAwOUIzMjUwODAwMTA3MQotOjEwNUE0MDAwOTM1MjAxMDkwMDAwMjgyMTBFMDAwNjI4MzI0NDAwRkY2RAotOjEwNUE1MDAwOEZCRjAwMkM4RkI0MDAyODhGQjMwMDI0OEZCMjAwMjA5QQotOjEwNUE2MDAwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4MjdCRDAwMzA4NAotOjEwNUE3MDAwMDBBMEY4MDkwMDAwMDAwMDBBMDAwQTRBMzIyQTAwNDA4QgotOjEwNUE4MDAwMTIwMEZGNkIwMDAwMDAwMDhGNEUwRTE0OEY5MjAwNDgzMgotOjEwNUE5MDAwQUU0RTAwMjA4RjUzMEUxQzBBMDAwQTM0QUU1MzAwMjQ3MQotOjEwNUFBMDAwOEY4MjAwMTgwMDgwNDAyMTNDMDQwMTAwOTA0NzAwODU0RgotOjEwNUFCMDAwMzBFMzAwMjAxMDYwMDAwOTAwMDAwMDAwM0MwNzA4MDBFRgotOjEwNUFDMDAwOENFNzNCMzA4RjgzMDAxNDAwRTMyMDIzMDQ4MDAwMDgyMAotOjEwNUFEMDAwOTM4OTAwMDAxNEUzMDAwMzAxMDAyMDIxMDNFMDAwMDg4MwotOjEwNUFFMDAwMDA4MDEwMjEzQzA0MDEwMDAzRTAwMDA4MDA4MDEwMjEyOAotOjEwNUFGMDAwMTEyMDAwMEIwMDY3MzgyMzhGOEMwMDFDMjQwOTAwMzQxMAotOjEwNUIwMDAwOTE4QjAwQkMzMTZBMDAwMjUxNDAwMDAxMjQwOTAwMzAzMQotOjEwNUIxMDAwMDBFOTY4MkIxNUEwRkZGMTAxMDAyMDIxMDBFOTM4MjNERQotOjEwNUIyMDAwMjQxOUZGRkMwMEI5QzAyNDAwRjk3ODI0MDBGODcwMkI3OAotOjEwNUIzMDAwMTVDMEZGRUEwMUU4MjAyMTMwQzIwMDAzMDAwMjE4MjM0QgotOjEwNUI0MDAwMTRDMDAwMTIzMDY5MDAwMzAwMDAzMDIxMDBBOTcwMjE0OAotOjEwNUI1MDAwMDFDNjY4MjEwMEVENjAyQjExODBGRkUwM0MwNDAxMDBDQwotOjEwNUI2MDAwMkQyRjAwMDEwMDA2NDgyQjAxMDUzODIxMDFFOTMwMjRDMgotOjEwNUI3MDAwMTRDMEZGREEyNEU0RkZGQzI0MTlGRkZDMDBCOUMwMjRBMAotOjEwNUI4MDAwMDMwODIwMjEwM0UwMDAwODAwODAxMDIxOEY4QjAwMUNGNwotOjEwNUI5MDAwMjQwNjAwMDQ5MTZBMDBCQzMxNDQwMDA0MTQ4MEZGRUMyOAotOjEwNUJBMDAwMDBBOTcwMjEwQTAwMEFGQzAwMDAzMDIxMjdCREZGRTg4RgotOjEwNUJCMDAwQUZCRjAwMTA4RjQ2MDEwMDkzNEEwMTA5M0MxRjA4MDA0NwotOjEwNUJDMDAwOEZGRjAwOTAyNDA3RkY4MDMxNEYwMEZGMzFFODAwN0ZGNgotOjEwNUJEMDAwMDAwODYxNDAwM0U2QzgyMTAzMkNDMDIxMjcwOTAxMjBFOQotOjEwNUJFMDAwMDEyNzcwMjQzQzAxMDgwMEEwMkYzQjZDQUY0RTA4MEMyRAotOjEwNUJGMDAwM0MwRDA4MDA4REFEMDA5MDNDMDQwMDgwMzQ4MjAwMDMxMQotOjEwNUMwMDAwMDFBNjU4MjEwMTZDMTgyMTI0NjUwMTIwMzBBQTAwNzhEMgotOjEwNUMxMDAwMDE0MjQwMjVBRjQ4MDgxQzNDMUYwODAwOEZGRjAwOTA0MAotOjEwNUMyMDAwOEY4ODAwNDQwM0U2QzAyMTMzMTkwMDA3MDMwNzQ4MjQ4NgotOjEwNUMzMDAwMDMzQTc4MjFBRjQ5MDAyODI1RTkwOUMwOTUyRTAwMDJEMgotOjEwNUM0MDAwM0MwRDA4MDA4REFEMDA4QzNDMEEwODAwOEQ0QTAwOTA4OAotOjEwNUM1MDAwMzFDQzNGRkYwMUE2MTgyMTAwMEM1OTgwMDA2QjI4MjE5MAotOjEwNUM2MDAwMDBBNzIwMjRBRjQ0MDAyQzk1MjIwMDAyM0MxRjA4MDAwRQotOjEwNUM3MDAwOEZGRjAwOEM5MTA3MDA4NTMwNTkzRkZGMDNFNjc4MjFBNAotOjEwNUM4MDAwMDAxOUMxODAwMTQ2NzAyMTAxRjg2ODIxMzFDQzAwN0ZFNAotOjEwNUM5MDAwMzFBQjAwN0YwMTlBMjgyMTAxN0E1MDIxM0MwMzAwMEM4RQotOjEwNUNBMDAwM0MwNDAwMEUwMEEzMjgyMTAxNDQxMDIxMzBFNjAwMjAwRQotOjEwNUNCMDAwMjc0NzA5ODBBRjgyMDAyOEFGODgwMDE4QUY4OTAwMjBFRAotOjEwNUNDMDAwQUY4NTAwMUMxMEMwMDAwNkFGODcwMDI0OEQwMjAwNTA3NQotOjEwNUNEMDAwOENBNDAxMEMwMDQ0MzAyMzE4QzAwMDc3MDAwMDAwMDBBMQotOjEwNUNFMDAwOTEwQzAwODUyNDBERkZERjAxOEQzODI0QTEwNzAwODU2QwotOjEwNUNGMDAwOEY4QjAwMTg4Rjg5MDAyMDhGODcwMDI0OEQ2NTAwNENDMgotOjEwNUQwMDAwQUY4NTAwMTQ5MTJGMDAwRDMxRUUwMDIwMTFDMDAwMTc1NwotOjEwNUQxMDAwMDAwMDAwMDAyNDA5MDAwMUEzODkwMDAwQUY4MDAwMDhGMgotOjEwNUQyMDAwOENFNDAwMjQ4Rjg1MDAwODI0MEEwMDA4QUY4MDAwMDQ1QQotOjEwNUQzMDAwQUY4MDAwMEMzQzAxMDgwMEE0MkEzQjFBM0MwMTA4MDA3QgotOjEwNUQ0MDAwQTQyMDNCMkUwRTAwMEFEMDAwMDAzMDIxOEY4NTAwMjBCOQotOjEwNUQ1MDAwOEZCRjAwMTBBRjgyMDAxMDkwQTgwMDBEMjdCRDAwMTg2MwotOjEwNUQ2MDAwMDAwODM5NDIwM0UwMDAwODMwRTIwMDAxOTEzRjAwMDJFMAotOjEwNUQ3MDAwMjQxODAwMDEzM0Y5MDBGRjAwMTkyMTgyMTA5ODAwMzkxRQotOjEwNUQ4MDAwMjQwODAwMDIxMDg4MDA1QjhGODYwMDI4OENFNTAwMjQyMAotOjEwNUQ5MDAwMTRBMDAwMUI4RjlGMDAxQzkxMjIwMDAwMjQwQTAwMDUwNAotOjEwNURBMDAwMzA0NjAwM0YxMENBMDA0NzI0MDQwMDAxOEY4NjAwMDREQgotOjEwNURCMDAwQTM4NDAwMDBBRjg2MDAwQ0FGODYwMDA4OENFNDAwMjRBQQotOjEwNURDMDAwOEY4NTAwMDgyNDBBMDAwODNDMDEwODAwQTQyQTNCMUExOQotOjEwNUREMDAwM0MwMTA4MDBBNDIwM0IyRTBFMDAwQUQwMDAwMDAwMDA2OQotOjEwNURFMDAwOEY4NTAwMjA4RkJGMDAxMEFGODIwMDEwOTBBODAwMEQ5QgotOjEwNURGMDAwMjdCRDAwMTgwMDA4Mzk0MjAzRTAwMDA4MzBFMjAwMDEyNgotOjEwNUUwMDAwOENGODAwMDg4Q0Y5MDAyNDhGRUUwMEM0QTM4MDAwMDBGOQotOjEwNUUxMDAwOENFNDAwMjRBRjhFMDAwODhGODUwMDA4OEY4NjAwMDQ3NAotOjEwNUUyMDAwMDMxOTc4MjMyNDBBMDAwOEFGOEYwMDBDM0MwMTA4MDBGNgotOjEwNUUzMDAwQTQyQTNCMUEzQzAxMDgwMEE0MjAzQjJFMEUwMDBBRDBFNQotOjEwNUU0MDAwMDAwMDAwMDA4Rjg1MDAyMDhGQkYwMDEwQUY4MjAwMTA3RgotOjEwNUU1MDAwOTBBODAwMEQyN0JEMDAxODAwMDgzOTQyMDNFMDAwMDg5MwotOjEwNUU2MDAwMzBFMjAwMDE5MTIzMDAwMDMwNjIwMDNGMTA0NDAwMjcxRgotOjEwNUU3MDAwOEY4NTAwMUM4Q0U0MDAyNDE0ODAwMDIxMDAwMDAwMDBBOQotOjEwNUU4MDAwOEQyRTAwMTgzQzE4N0ZGRjhGODUwMDFDMzcwRkZGRkZGOQotOjEwNUU5MDAwMDFDRjE4MjRBRjgzMDAwNDhGOUYwMDA0OENBODAwODRENgotOjEwNUVBMDAwMDNFOEM4MkIxNzIwMDAwMjAzRTAyMDIxOENBNDAwODQwMwotOjEwNUVCMDAwMEEwMDBCOEJBRjg0MDAwNDhDQTMwMTBDMEEwMDBCNjk1MQotOjEwNUVDMDAwQUY4MzAwMTQ4RDJDMDAxODhGODYwMDA0M0MwRDdGRkZEQgotOjEwNUVEMDAwOEY4OTAwMUMzNUEzRkZGRjAxODM1ODI0MjQwNDAwMDE4RgotOjEwNUVFMDAwQUY4QjAwMENBRDIwMDBDQ0EzODQwMDAwMEEwMDBCOTcwMAotOjEwNUVGMDAwQUY4NjAwMDg4Q0NBMDAxNDBBMDAwQjhCQUY4QTAwMDQxRQotOjEwNUYwMDAwOENBMzAwQzgwQTAwMEJDRUFGODMwMDA0OEY4NDAwMjg0NgotOjEwNUYxMDAwOENBQzAwNjQ4QzhEMDAxNDAxOEQ1ODJCMTE2MDAwMDQzMgotOjEwNUYyMDAwMDAwMDAwMDA4Q0EyMDA2NDBBMDAwQkNFQUY4MjAwMDRDNwotOjEwNUYzMDAwOEM4MjAwMTQwQTAwMEJDRUFGODIwMDA0OEY4NTAwMDgwQgotOjEwNUY0MDAwMjdCREZGRTBBRkJGMDAxOEFGQjEwMDE0MTRBMDAwMDdEOQotOjEwNUY1MDAwQUZCMDAwMTA4Rjg2MDAyMDI0MDIwMDA1OTBDNDAwMDAxRQotOjEwNUY2MDAwMzA4MzAwM0YxMDYyMDBCNjhGODQwMDFDOEY5MTAwMDRDNAotOjEwNUY3MDAwMDBBMDgwMjE4RjhDMDAyNDNDMDUwODAwOENBNTNCMENFMAotOjEwNUY4MDAwOEQ4QjAwMDQzMTY2M0ZGRjAwQzU1MDJCNTU0MDAwMDE0QQotOjEwNUY5MDAwMDBDMDI4MjE5MzhEMDAwMDExQTAwMDczMDBCMEY4MkJFMQotOjEwNUZBMDAwOEY5ODAwMUMyNDA0MDAzNDkzMEYwMEJDMzFFRTAwMDJEMwotOjEwNUZCMDAwNTFDMDAwMDEyNDA0MDAzMDAwQTRDODJCMTcyMDAwRDFEOAotOjEwNUZDMDAwMDAwMDAwMDAwMEE0MjgyMzAwQjBGODJCM0MwMTA4MDBDQQotOjEwNUZEMDAwQTQyNDNCMTgxN0UwMDA2ODAyMDAyMDIxM0MwMzA4MDBCRAotOjEwNUZFMDAwOEM2MzNCMDgwMDgzMTAyQjU0NDAwMDAxMDA4MDE4MjE3MwotOjEwNUZGMDAwOEY4ODAwMjAzQzAxMDgwMEFDMjMzQjEwMDAwMDQ4MjFBMgotOjEwNjAwMDAwOTEwNDAwMEQzMDgzMDAyMDUwNjAwMDAxOEY0OTBFMTg2QwotOjEwNjAxMDAwOEY4MzAwMTAwMTIzMzgyQjEwRTAwMDU5MDAwMDAwMDA4RQotOjEwNjAyMDAwM0MwNDA4MDA4Qzg0M0IxMDAwODk1ODIxMDA2QjUwMkJFNQotOjEwNjAzMDAwMTE0MDAwNTYwMDkwNjAyQjAwNjkzMDIzMDBDMDIwMjFFMQotOjEwNjA0MDAwM0MwMTA4MDBBQzI2M0IxMDEyMDAwMDAzMjQxRkZGRkM5QgotOjEwNjA1MDAwMTA5MDAwOEEzMjI3MDAwMzAwOUZDODI0M0MwMTA4MDBFQQotOjEwNjA2MDAwQUMzOTNCMTAzQzAxMDgwMEE0MjAzQjJFOEY4NDAwMDg3MwotOjEwNjA3MDAwMTIwNDAwMDc4RjgzMDAxQ0FGOTEwMDA0MDIwMDIwMjE0RQotOjEwNjA4MDAwOEM3MTAwQ0NBRjkwMDAwODI2MzAwMDAxQUM3MDAwQ0NDMQotOjEwNjA5MDAwM0MwMjA4MDA4QzQyM0IxMDhGOEEwMDBDMjQwNzAwMTgzOQotOjEwNjBBMDAwMDA4MjIwMjMwMTQyMjgyM0FGODQwMDA4MTA4MDAwMDJEMAotOjEwNjBCMDAwQUY4NTAwMEMyNDA3MDAxMDhGODYwMDE4M0MwMTA4MDBGMwotOjEwNjBDMDAwQTAyNzNCMkMyNDA3MDA0MDkwQ0MwMDg1MzE4QjAwQzBEQQotOjEwNjBEMDAwMTE2NzAwNDA4RjhEMDAxMDE0QTAwMDE1MDAwMDIwMjFEMgotOjEwNjBFMDAwOTM0QTAxMDk4RjQyMDk3NDMxNDUwMEZGMDAwMjI2MDJEQwotOjEwNjBGMDAwMjRBMzAwMDEzMDkwMDA3RjMwNzEwMDdGMTIzMDAwN0FCRAotOjEwNjEwMDAwMjQwN0ZGODBBMEMzMDA4MzNDMDkwODAwOEQyOTNCMjg5OQotOjEwNjExMDAwOEY4ODAwMjAyNDBEMDAwMjM1MkMwMDA4M0MwMTA4MDA2NwotOjEwNjEyMDAwQTAyRDNCNkQzQzAxMDgwMEFDMkMzQjI4MjQwNDAwMTA0MgotOjEwNjEzMDAwOTEwRTAwMEQzMUM2MDAyMDEwQzAwMDA1MDA4MDE4MjEwRQotOjEwNjE0MDAwMjQwODAwMDEzQzAxMDgwMEFDMjgzQjEwMzQ4MzAwMDEwNgotOjEwNjE1MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA2MDEwMjFBNQotOjEwNjE2MDAwMDNFMDAwMDgyN0JEMDAyMDNDMDEwODAwQTQyMDNCMThFNAotOjEwNjE3MDAwMTNFMEZGOUEwMjAwMjAyMTBBMDAwQzFGMDBBMDIwMjEzQQotOjEwNjE4MDAwM0MwNDA4MDA4Qzg0M0IxMDAwOTA2MDJCMTE4MEZGQUUxMwotOjEwNjE5MDAwMDAwMDAwMDAzQzBGMDgwMDk1RUYzQjE4MDFFNDcwMjE1RgotOjEwNjFBMDAwMDFDNjY4MkIxMUEwMDAwNzJDODIwMDA0M0MxRjYwMDA3MAotOjEwNjFCMDAwOEZGOTU0MDQzMzM4MDAzRjE3MDBGRkU1MjQwMzAwNDJGMQotOjEwNjFDMDAwMkM4MjAwMDQxMDQwRkZBMDI0MDMwMDQyMEEwMDBDN0QzMgotOjEwNjFEMDAwOEZCRjAwMTgxNTJERkZDMDAwMDAwMDAwOENERjAwNzQ3OQotOjEwNjFFMDAwM0MwMzgwMDAyNDA1RkY4MDAzRTNDODI1QUNEOTAwNzQ3QwotOjEwNjFGMDAwOTBEODAwODUyNDBFMDAwNDI0MDQwMDEwMzMwRjAwM0ZDMwotOjEwNjIwMDAwMDFFNTQwMjVBMEM4MDA4NThGODgwMDIwM0MwMTA4MDBEQQotOjEwNjIxMDAwQTAyRTNCNkQyNDAzMDAwMTkxMDYwMDBEMzBDOTAwMjAyMwotOjEwNjIyMDAwMTUyMDAwMDMwMDAwMDAwMDNDMDMwODAwOEM2MzNCMTBCNQotOjEwNjIzMDAwM0MwMTA4MDBBQzIzM0IwODBBMDAwQzc0MDAwMDAwMDA3RAotOjEwNjI0MDAwOEY4NzAwMEM4Qzg4MDA4NDAwRTgyODJCMTRBMDAwMDJBMwotOjEwNjI1MDAwMDBFMDg4MjE4QzkxMDA4NDI0MDkwMDAxQTM4OTAwMDBCQQotOjEwNjI2MDAwOEY0NDBFMTgwMjIwMjgyMTBFMDAwQUQwMDIyMDMwMjE2RgotOjEwNjI3MDAwMDIyMDgwMjEwQTAwMEMwNUFGODIwMDEwMDAwNzE4MjNCRAotOjEwNjI4MDAwMzA2NjAwMDMzQzAxMDgwMEE0MjYzQjJFMTIyMDAwMDVDNgotOjEwNjI5MDAwOEY4QzAwMUM5MThCMDBCQzMxNkEwMDA0MTU0MDAwMTVFNgotOjEwNjJBMDAwMjRDRDAwMDQzQzBGMDgwMDk1RUYzQjJFMDFFNDcwMjE0MwotOjEwNjJCMDAwMDBBRTMwMkI1MEMwRkY2RThGODQwMDA4MkM4NTAwMDU4NwotOjEwNjJDMDAwMTRBMEZGQTMyNDAzMDA0MjMwOTgwMDAzMTcwMDAwMDIyQgotOjEwNjJEMDAwMDA5ODE4MjMyNDgzRkZGQzNDMDEwODAwQUMyMzNCMTBFQQotOjEwNjJFMDAwMEEwMDBDNDEwMDAwMDAwMDAwQTc1ODI0MEEwMDBDNjlCNQotOjEwNjJGMDAwMDE2NzE4MjYzQzAxMDgwMEE0MkQzQjJFMEEwMDBDRDE5MgotOjEwNjMwMDAwMDAwMDAwMDAzQzAxMDgwMEFDMjAzQjEwMEEwMDBDN0M5RgotOjEwNjMxMDAwMjQwMzAwNDI4RjgzMDAwQzE0NjAwMDA3MDAwMDEwMjE0QQotOjEwNjMyMDAwOEY4ODAwMjAyNDA1MDAwNTkxMDYwMDAwMzBDNDAwRkY3RQotOjEwNjMzMDAwMTA4NTAwMDMwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDBEQQotOjEwNjM0MDAwOTEwQTAwMTgzMTQ5MDBGRjAwMDkzOUMyMTRFMEZGRkEzMAotOjEwNjM1MDAwOEY4NTAwMTgzQzA0MDgwMDk0ODQzQjE4M0MwMzA4MDAxNwotOjEwNjM2MDAwOEM2MzNCMzAzQzE5MDgwMDhGMzkzQjEwM0MwRjA4MDAxMAotOjEwNjM3MDAwOTVFRjNCMkUwMDY0QzAyMThDQUQwMDU0MDMxOTcwMjFCMQotOjEwNjM4MDAwMDFDRjYwMjEwMThENTgyMzE5NjAwMDFEMDAwMDAwMDAxRAotOjEwNjM5MDAwOTEwRTAwMUM4RjhDMDAyODk3NEIwRTEwMzFDRDAwRkYwMgotOjEwNjNBMDAwOEQ4NTAwMDQwMTZEMzAyMzhEODgwMDAwMzBDRUZGRkYwNQotOjEwNjNCMDAwMDAwRTUxMDAwMEFBQzgyMTAwMDAzODIxMDEwNzIwMjE0OQotOjEwNjNDMDAwMDMyQTE4MkIwMDgzQzAyMUFEOTkwMDA0QUQ5ODAwMDA2QQotOjEwNjNEMDAwOTE4RjAwMEEwMUNGNjgyMUExOEQwMDBBOEY4ODAwMjhDMwotOjEwNjNFMDAwOTc0QjBFMTJBNTBCMDAwODk1MEEwMDM4MjU0OTAwMDFBRAotOjEwNjNGMDAwQTUwOTAwMzg5MTA3MDAwRDM0RTYwMDA4QTEwNjAwMEQzQwotOjEwNjQwMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwOTM4NzAwMDBDNAotOjEwNjQxMDAwOEY4RjAwMjA4RkFEMDAxNDNDMEU3RkZGOEY4OTAwMDgwNgotOjEwNjQyMDAwMzVDOEZGRkZBRkJGMDAxQ0FGQjAwMDE4MDFBODE4MjQ4QgotOjEwNjQzMDAwOTFFQTAwMEQwMDA3MTdDMDNDMUZCRkZGMDA2MjU4MjVGRQotOjEwNjQ0MDAwMkQyRTAwMDE4RjkwMDAxNDM3RjlGRkZGM0MxODA4MDAzMwotOjEwNjQ1MDAwOEYxODNCMzAzQzBGMDgwMDk1RUYzQjI2MDE3OTY4MjRFQwotOjEwNjQ2MDAwMDAwRTQ3ODAzQzA3RUZGRjNDMDVGMEZGMDFBODE4MjUxMAotOjEwNjQ3MDAwMzE0OTAwMjAzNEUyRkZGRjM0QUNGRkZGMDMxMDU4MjMwMgotOjEwNjQ4MDAwMjdBNTAwMTAyNDA2MDAwMjI1RUEwMDAyMDA2MjE4MjQ1NQotOjEwNjQ5MDAwMDA4MDgwMjExNTIwMDAwMjAwMDA0MDIxOEY0ODBFMUM0MgotOjEwNjRBMDAwQTdBQTAwMTIwNTYwMDAzNzI0MDcwMDAwMzBGRjAwRkY5NAotOjEwNjRCMDAwMDAxRkNGMDA4RjhCMDAxODAwNzkzODI1QUZBNzAwMTQ3QwotOjEwNjRDMDAwOTE2RjAwODUzQzA4MDgwMDkxMDgzQjJEM0MxOERGRkZDOAotOjEwNjREMDAwMzFFRTAwQzAzNzBBRkZGRjAwMEUxODJCM0MxRjA4MDBFQQotOjEwNjRFMDAwOTdGRjNCMjAwMEVBNjgyNEEzQTgwMDExMDAwMzE3NDA4RgotOjEwNjRGMDAwMDFBMjQ4MjU4RkI5MDAxMEFGQTkwMDE0M0MwQTA4MDA3QQotOjEwNjUwMDAwOTE0QTNCMkZBN0JGMDAxNjhGQTgwMDE0MDMyQ0MwMjQ2QwotOjEwNjUxMDAwM0MwQjAxMDAzQzBGMEZGRjAzMEIxODI1MzE0NzAwMDMxNAotOjEwNjUyMDAwMzVFRUZGRkYwMTBDNjgyNDAwMDcxNjAwMDA2RUY4MjQwQQotOjEwNjUzMDAwM0MwOTcwMDAwMUEyQzgyNTAzRTk1ODI1QUZCOTAwMTQzMQotOjEwNjU0MDAwQUZBQjAwMTAwRTAwMDA3MkEzQTAwMDE1OEY4QzAwMjBDRQotOjEwNjU1MDAwMjYwMjAwMDg5MTg2MDAwRDMwQzQwMDIwMTA4MDAwMDYzRAotOjEwNjU2MDAwOEZCRjAwMUMzQzA1MDgwMDk0QTUzQjFDMjRCMEZGRkYxNgotOjEwNjU3MDAwM0MwMTA4MDBBNDMwM0IxQzhGQjAwMDE4MDNFMDAwMDg2OQotOjEwNjU4MDAwMjdCRDAwMjA4Rjk4MDAxMDAxMTg1MDJCNTU0MEZGQzdFMQotOjEwNjU5MDAwMjQwNzAwMDEwQTAwMEQ1NDMwRkYwMEZGOTM4MjAwMDAyMQotOjEwNjVBMDAwMjdCREZGRTBBRkJGMDAxODEwNDAwMDBGMDA4MDUwMjE1MgotOjEwNjVCMDAwOEY4ODAwMjAyNDBCMDAwNThGODkwMDA0OTEwNzAwMDBCQwotOjEwNjVDMDAwOEY4NDAwMUMwMTAwMjgyMTMwRTMwMDNGOEY4NjAwMjhDMwotOjEwNjVEMDAwMTA2QjAwMDgwMDAwMzgyMUFGQTkwMDEwMEUwMDA0MzkyQwotOjEwNjVFMDAwQUZBQTAwMTRBMzgwMDAwMDhGQkYwMDE4MDNFMDAwMDhDQQotOjEwNjVGMDAwMjdCRDAwMjA4RDE5MDAxODNDMEYwODAwOERFRjNCMTBCRgotOjEwNjYwMDAwOEY5ODAwMEMzQzAyN0ZGRjhEMDgwMDE0MzQ1RkZGRkY2MQotOjEwNjYxMDAwMDMzRjY4MjQwMUY4NzAyMTAxQUU2MDIzMDE4ODM4MjEwRQotOjEwNjYyMDAwQUZBOTAwMTAwRTAwMDQzOUFGQUEwMDE0MEEwMDBEQTI5MQotOjEwNjYzMDAwQTM4MDAwMDA4Rjg3MDAyMDNDMDUwODAwOTRBNTNCMkUxNgotOjEwNjY0MDAwM0MwMjA4MDA4QzQyM0IyODkwRTYwMDBEMDAwNTI0MDAyNwotOjEwNjY1MDAwMzBDMzAwMjAxMDYwMDAyQzAwNDQ0MDI1OEY4NTAwMThCNgotOjEwNjY2MDAwMDAwMDYwMjEyNDBCMDAwMTkwQTMwMDg1MDAwMDQ4MjE1OAotOjEwNjY3MDAwMjQwQTAwMDEzQzBGODAwMDM1RUUwMDcwOERDNzAwMDAzOQotOjEwNjY4MDAwQUY4NzAwMzA4RjU4MDE3ODA3MDBGRkZFM0MwMzgwMDA4MQotOjEwNjY5MDAwMzQ3OTAwNzA4RjM4MDAwMDNDMDUwODAwOENBNTAwNzQyOAotOjEwNjZBMDAwM0MwRDA4MDA4REFEMDA3MDAzMDc3ODIzMDBBRjM4MjE0MgotOjEwNjZCMDAwMDAwMDEwMjEwMEVGMzAyQjAxQTIyMDIxMDA4NjE4MjFCQwotOjEwNjZDMDAwM0MwMTA4MDBBQzI3MDA3NDNDMDEwODAwQUMyMzAwNzBCQQotOjEwNjZEMDAwQUY0QjAxNDgzQzE5MDgwMDhGMzkzQjMwQTc0OTAxNDRCMgotOjEwNjZFMDAwQTc0QTAxNDZBRjU5MDE0QzNDMEIwODAwOTE2QjNCMkQ2QQotOjEwNjZGMDAwQTM0QjAxNTJBRjQ4MDE1NDNDMDgxMDAwQTc0QzAxNTg2RAotOjEwNjcwMDAwMDNFMDAwMDhBRjQ4MDE3ODhGNEIwRTFDM0MwQTA4MDBEQwotOjEwNjcxMDAwOEQ0QTNCMTA5NzQ5MEUxNjk3NEQwRTE0MDE0NTYwMjE4NgotOjEwNjcyMDAwMzEyQUZGRkYwQTAwMERDNTMxQTlGRkZGOEY4MzAwMjAyQQotOjEwNjczMDAwOTA2NDAwMEQzMDgyMDAyMDEwNDAwMDI5MDAwMDAwMDAwRAotOjEwNjc0MDAwMDAwMDQ4MjEwMDAwNTAyMTAwMDA0MDIxM0MwNzgwMDA0QgotOjEwNjc1MDAwMzRFQjAwNzA4RDY3MDAwMEFGODcwMDMwOEY0QzAxNzhGQwotOjEwNjc2MDAwMDU4MEZGRkUzQzBEODAwMDM1QUMwMDcwOEQ4QjAwMDA3NQotOjEwNjc3MDAwM0MwNTA4MDA4Q0E1MDA3NDNDMDQwODAwOEM4NDAwNzA2MwotOjEwNjc4MDAwMDE2NzMwMjMwMEE2NzgyMTAwMDAxMDIxMDFFNkM4MkIwNAotOjEwNjc5MDAwMDA4MkMwMjEwMzE5NzAyMTNDMDEwODAwQUMyRjAwNzQ1NQotOjEwNjdBMDAwM0MwMTA4MDBBQzJFMDA3MEFGNDkwMTQ4M0MwRDA4MDBDOAotOjEwNjdCMDAwOERBRDNCMzBBNzQ4MDE0NDI0MDkwMDQwQTc0QTAxNDY1QgotOjEwNjdDMDAwM0MwODEwMDAyNDBBRkY5MUFGNEQwMTRDQTM0QTAxNTIyRQotOjEwNjdEMDAwQUY0OTAxNTRBNzQwMDE1ODAzRTAwMDA4QUY0ODAxNzhEMQotOjEwNjdFMDAwOEY0OTBFMTg5NzQ2MEUxMjk3NDUwRTEwMzBDQUZGRkZCQwotOjEwNjdGMDAwMEEwMDBERkIzMEE4RkZGRjhGODMwMDIwMjdCREZGRjhBNAotOjEwNjgwMDAwOTA2NDAwMEQzMDgyMDAyMDEwNDAwMDNBMDAwMDAwMDAyQgotOjEwNjgxMDAwMjQwQjAwMDEwMDAwNDgyMTI0MEEwMDAxM0MwODgwMDBFQwotOjEwNjgyMDAwMzUwNzAwNzA4Q0UzMDAwMEFGODMwMDMwOEY0QzAxNzg5NwotOjEwNjgzMDAwMDU4MEZGRkUzQzBFODAwMDNDMDQwODAwOTA4NDNCNkMwOQotOjEwNjg0MDAwMzVDNzAwNzA4Q0VDMDAwMDNDMDUwODAwOENBNTAwNzQ3NgotOjEwNjg1MDAwQTNBNDAwMDMzQzE5MDgwMDhGMzkwMDcwOEZBRDAwMDAxRAotOjEwNjg2MDAwMDE4MzMwMjMwMEE2MzgyMTAwMDAxMDIxMDMyMjc4MjE2MwotOjEwNjg3MDAwMDBFNkMwMkIwMUY4NjAyMTAxQUU0MDI1QUZBODAwMDA2MgotOjEwNjg4MDAwM0MwMTA4MDBBQzI3MDA3NDNDMDEwODAwQUMyQzAwNzBFRgotOjEwNjg5MDAwOTM0NjAxMEEzQzA0MDgwMDkwODQzQjZEQTNBMDAwMDJDQgotOjEwNjhBMDAwQTNBNjAwMDE4RkEzMDAwMDNDMDU4MEZGMzA5OTAwN0Y2NAotOjEwNjhCMDAwMzRBMkZGRkYwMDYyNzgyNDAwMTlDNjAwMDFGODcwMjU5OQotOjEwNjhDMDAwMjQwRDMwMDBBRjRFMDE0QzI3QkQwMDA4QUY0RDAxNTRFMAotOjEwNjhEMDAwQTc0MDAxNThBRjRCMDE0OEE3NDkwMTQ0QTc0QTAxNDZDOAotOjEwNjhFMDAwM0MwOTEwMDAyNDBBRkY4MEEzNEEwMTUyMDNFMDAwMDg3QgotOjEwNjhGMDAwQUY0OTAxNzg4RjRCMEUxODk3NDYwRTEyOTc0NTBFMTAzMAotOjEwNjkwMDAwMzBDQUZGRkYwQTAwMEUyRjMwQTlGRkZGOEY4NTAwMTg0NQotOjEwNjkxMDAwMjQwMjAwODA5MEE0MDA4NTMwODMwMEMwMTA2MjAwMDUyRQotOjEwNjkyMDAwOEY4NjAwMUM4Rjg4MDAwNDhGODcwMDA4QUNDODAwQzhDMQotOjEwNjkzMDAwQUNDNzAwQzQwM0UwMDAwODAwMDAwMDAwM0MwQTA4MDBFNwotOjEwNjk0MDAwMjU0QTM3Q0MzQzA5MDgwMDI1MjkzODk4M0MwODA4MDAxRQotOjEwNjk1MDAwMjUwODJDNEMzQzA3MDgwMDI0RTczOUFDM0MwNjA4MDAwRAotOjEwNjk2MDAwMjRDNjM2M0MzQzA1MDgwMDI0QTUzM0I0M0MwNDA4MDA4QQotOjEwNjk3MDAwMjQ4NDJGREMzQzAzMDgwMDI0NjMzNkQ0M0MwMjA4MDA0NgotOjEwNjk4MDAwMjQ0MjM0QTgzQzAxMDgwMEFDMkEzQzM4M0MwMTA4MDBGMQotOjEwNjk5MDAwQUMyOTNDMzQzQzAxMDgwMEFDMjgzQzMwM0MwMTA4MDBFOAotOjEwNjlBMDAwQUMyNzNDM0MzQzAxMDgwMEFDMjYzQzRDM0MwMTA4MDBCOAotOjEwNjlCMDAwQUMyNTNDNDQzQzAxMDgwMEFDMjQzQzQwM0MwMTA4MDBCMAotOjEwNjlDMDAwQUMyMzNDNTAzQzAxMDgwMEFDMjIzQzQ4MDNFMDAwMDhFQQotOjA0NjlEMDAwMDAwMDAwMDBDMwotOjAwMDAwMDAxRkYKLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKLSAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCi0gKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCi0gKiBhY2NvbXBhbnlpbmcgaXQuCi0gKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA2LTUuMC4wLmozLmZ3LmloZXggYi9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wNi01LjAuMC5qMy5mdy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MmU2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wNi01LjAuMC5qMy5mdy5paGV4CkBAIC0wLDAgKzEsNTg0MSBAQAorOjEwMDAwMDAwMDgwMDAxMTAwODAwMDAwMDAwMDA0Q0M4MDAwMDAwQzhGMworOjEwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDRDQzhDNAorOjEwMDAyMDAwMDAwMDAwMTQwMDAwNEQ5MDA4MDAwMDg4MDgwMDAwMDA0NworOjEwMDAzMDAwMDAwMDU4RDAwMDAwNERBNDA4MDA1QTQwMDAwMDAwODQ4MQorOjEwMDA0MDAwMDAwMEE2NzQwODAwNThEMDAwMDAwMTU0MDAwMEE2Rjg3MworOjEwMDA1MDAwMDgwMDMxRDgwODAwMDAwMDAwMDA3MEYwMDAwMEE4NEMzMworOjEwMDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDcwRjAyOAorOjEwMDA3MDAwMDAwMDAwMjQwMDAxMTkzQzA4MDAwNDg4MDgwMDA0MDA2NgorOjEwMDA4MDAwMDAwMDE3NUMwMDAxMTk2MDAwMDAwMDAwMDAwMDAwMDA4MworOjEwMDA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwMDBBMDAwMDgwMDAwQTgwODAwMDAwMDAwMDAzQjM4MDAwMTMwQkMzOAorOjEwMDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjA4MDBDMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MDgwMEM4MDAwQTAwMDA0NDAwMDAwMDAwRTIKKzoxMDAwRDAwMDAwMDAwMDAwMDAwMDAwMEQ2MzZGNkQzNTJFMzAyRTMwRTMKKzoxMDAwRTAwMDZBMzMwMDAwMDUwMDAwMDIwMDAwMDAwMDAwMDAwMDAzNjkKKzoxMDAwRjAwMDAwMDAwMDE0MDAwMDAwMzIwMDAwMDAwMzAwMDAwMDAwQjcKKzoxMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDAxMTAwMDAwMDAwMDEwMDAwMDAxMzYwMDAwRUE2MDAwMDAwMDA1NDkKKzoxMDAxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QzcKKzoxMDAxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMDAxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDAxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDAxNjAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDAxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDAxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwNUYKKzoxMDAxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDAxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDAxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDAxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDAxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAzMEMKKzoxMDAxRTAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDNDMDIwODAwQUYKKzoxMDAxRjAwMDI0NDI0RDAwM0MwMzA4MDAyNDYzNERGQ0FDNDAwMDAwNDkKKzoxMDAyMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNDNDMUQwODAwMDUKKzoxMDAyMTAwMDM3QkQ3RkZDMDNBMEYwMjEzQzEwMDgwMDI2MTAwMTEwMjAKKzoxMDAyMjAwMDNDMUMwODAwMjc5QzREMDAwRTAwMDIxNDAwMDAwMDAwM0EKKzoxMDAyMzAwMDAwMDAwMDBEMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwRjUKKzoxMDAyNDAwMDk3NDIwMTA4MzA0MzcwMDAyNDAyMjAwMDEwNjIwMDBCMjYKKzoxMDAyNTAwMDI4NjIyMDAxMTQ0MDAwMkYwMDAwMTAyMTI0MDI0MDAwRDkKKzoxMDAyNjAwMDEwNjIwMDI1MDAwMDAwMDAyNDAyNjAwMDEwNjIwMDI2RDkKKzoxMDAyNzAwMDAwMDAxMDIxMEEwMDAwOTQ4RkJGMDAxNDI3NTAwMTAwRDUKKzoxMDAyODAwMDkyMDIwMDA5MTA0MDAwMUEyNDAzMDAwMTNDMDIwODAwRjkKKzoxMDAyOTAwMDhDNDIwMDIwMTA0MDAwMTYwMDAwMTgyMTBFMDAwNTJCOTMKKzoxMDAyQTAwMDAwMDAwMDAwOTYwMzAwMDgzQzA2MDgwMDk0QzY0REJFRkUKKzoxMDAyQjAwMDhFMDQwMDE4OEY4MjAwMjA5NjA1MDAwQzAwMDMxQzAwOUQKKzoxMDAyQzAwMDAwNjYxODI1QUM0NDAwMDBBQzQ1MDAwNDI0MDQwMDAxN0QKKzoxMDAyRDAwMEFDNDAwMDA4QUM0MDAwMENBQzQwMDAxMEFDNDAwMDE0MzYKKzoxMDAyRTAwMEFDNDAwMDE4MEUwMDA1NTBBQzQzMDAxQzAwMDAxODIxNjMKKzoxMDAyRjAwMDBBMDAwMDkzMDA2MDEwMjEwRTAwMDNCRDAwMDAwMDAwMDIKKzoxMDAzMDAwMDBBMDAwMDkzMDAwMDEwMjEwRTAwMEY4MTAwMDAwMDAwODEKKzoxMDAzMTAwMDAwMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4MTAKKzoxMDAzMjAwMDI3QkQwMDE4MjdCREZGRTBBRkIwMDAxMEFGQkYwMDE4MTkKKzoxMDAzMzAwMEFGQjEwMDE0Mjc1MDAxMDA5MjAzMDAwQjI0MDIwMDFBRjEKKzoxMDAzNDAwMDk2MTEwMDA4MTQ2MjAwNUIwMDAwMjgyMTMyMjIwMDAxOEYKKzoxMDAzNTAwMDEwNDAwMDA4MDAwMDAwMDA4RTAyMDAwMDk2MDMwMDE0MDgKKzoxMDAzNjAwMDAwMDIxMUMyMDAwMjEwNDAwMDVBMTAyMTBBMDAwMERCRjYKKzoxMDAzNzAwMEE0NDMwMDgwM0MwMjA4MDA4QzQyMDAyMDEwNDAwMDI4NkEKKzoxMDAzODAwMDAwMDAwMDAwMEUwMDA1MkIwMDAwMDAwMDk3NDIwMTA4NEQKKzoxMDAzOTAwMDk3NDMwMTBDOEY4NTAwMjAzMDQyMDAzRTMwNjNGRkZGMDEKKzoxMDAzQTAwMDAwMDIxNDAwMDA0MzEwMjVBQ0EyMDAwMDhGNDIwMTAwOUYKKzoxMDAzQjAwMDNDMDYwODAwOTRDNjREQkVBQ0EyMDAwNDk3NDMwMTE2NEIKKzoxMDAzQzAwMDk3NDQwMTBFM0MwMjIwMDAwMDAzMUMwMDMwODRGRkZGMTQKKzoxMDAzRDAwMDAwNjQxODI1QUNBMzAwMDgwMEMyMzAyNTk3NDIwMTEwMjQKKzoxMDAzRTAwMDk3NDMwMTEyMjQwNDAwMDEwMDAyMTQwMDMwNjNGRkZGNTAKKzoxMDAzRjAwMDAwNDMxMDI1QUNBMjAwMEM5NzQyMDExNDMwNDJGRkZGQ0QKKzoxMDA0MDAwMEFDQTIwMDEwOEY0MjAxMThBQ0EyMDAxNDkzNDIwMTBCNjEKKzoxMDA0MTAwMDMwNDIwMEZGQUNBMjAwMTgwRTAwMDU1MEFDQTYwMDFDMzQKKzoxMDA0MjAwMDNDMDIwODAwOEM0MjAwNDAyNDQyMDAwMTNDMDEwODAwQ0MKKzoxMDA0MzAwMEFDMjIwMDQwM0MwMzA4MDA4QzYzMDA0NDMyMjIwMDAyREUKKzoxMDA0NDAwMDMyMjQwMDA0MjQ2MzAwMDEzQzAxMDgwMEFDMjMwMDQ0NzIKKzoxMDA0NTAwMDEwODAwMDE4MDAwMjI4MkI4RjQyMDJCODA0NDMwMDA4QzUKKzoxMDA0NjAwMDhFMDIwMDIwM0MwMjA4MDA4QzQyMDA2MDI0NDIwMDAxMDEKKzoxMDA0NzAwMDNDMDEwODAwQUMyMjAwNjAwQTAwMDBGQjI0MDUwMDAxREEKKzoxMDA0ODAwMDk2MDMwMDE2MDAwMDI4MjFBRjQyMDI4MDhFMDIwMDA0NkQKKzoxMDA0OTAwMEE3NDMwMjg0QUY0MjAyODgzQzAyMTAwMEFGNDIwMkI4NzgKKzoxMDA0QTAwMDNDMDIwODAwOEM0MjAwNUMyNDQyMDAwMTNDMDEwODAwMzAKKzoxMDA0QjAwMEFDMjIwMDVDOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDkKKzoxMDA0QzAwMDAwQTAxMDIxMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkUwQTkKKzoxMDA0RDAwMEFGQjAwMDEwQUZCRjAwMThBRkIxMDAxNDI3NTAwMTAwM0IKKzoxMDA0RTAwMDkyMDMwMDBCMjQwMjAwMDM5NjExMDAwODE0NjIwMDZEQjEKKzoxMDA0RjAwMDAwMDAyMDIxMzIyMjAwMDExMDQwMDAwODAwMDAwMDAwMEUKKzoxMDA1MDAwMDhFMDIwMDAwOTYwMzAwMTQwMDAyMTFDMjAwMDIxMDQwODcKKzoxMDA1MTAwMDAwNUExMDIxMEEwMDAxNDJBNDQzMDA4MDNDMDIwODAwNTYKKzoxMDA1MjAwMDhDNDIwMDIwMTA0MDAwMjUwMDAwMDAwMDBFMDAwNTJCMkEKKzoxMDA1MzAwMDAwMDAwMDAwOTc0MjAxMDg5NzQzMDEwQzhGODUwMDIwQkUKKzoxMDA1NDAwMDMwNDIwMDNFMzA2M0ZGRkYwMDAyMTQwMDAwNDMxMDI1REMKKzoxMDA1NTAwMEFDQTIwMDAwOEY0MjAxMDAzQzA2MDgwMDk0QzY0REJFQ0MKKzoxMDA1NjAwMEFDQTIwMDA0OTc0MzAxMTY5NzQ0MDEwRTNDMDIyMDAwMDAKKzoxMDA1NzAwMDAwMDMxQzAwMzA4NEZGRkYwMDY0MTgyNUFDQTMwMDA4QjIKKzoxMDA1ODAwMDAwQzIzMDI1OTc0MjAxMTA5NzQzMDExMjI0MDQwMDAxNTQKKzoxMDA1OTAwMDAwMDIxNDAwMzA2M0ZGRkYwMDQzMTAyNUFDQTIwMDBDRTIKKzoxMDA1QTAwMDk3NDIwMTE0MzA0MkZGRkZBQ0EyMDAxMEFDQTAwMDE0MkYKKzoxMDA1QjAwMEFDQTAwMDE4MEUwMDA1NTBBQ0E2MDAxQzNDMDIwODAwQzAKKzoxMDA1QzAwMDhDNDIwMDQwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDQwNjMKKzoxMDA1RDAwMDNDMDIwODAwOEM0MjAwNDQzMjIzMDAwNDI0NDIwMDAxMDMKKzoxMDA1RTAwMDNDMDEwODAwQUMyMjAwNDQxMDYwMDAxQTMyMjIwMDAyRDQKKzoxMDA1RjAwMDhGNDIwMkI4MDQ0MzAwMDg4RTAyMDAyMDNDMDIwODAwMkIKKzoxMDA2MDAwMDhDNDIwMDYwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDYwRTIKKzoxMDA2MTAwMDBBMDAwMTc3MjQwNDAwMDE5NjAzMDAxNjAwMDAyMDIxM0YKKzoxMDA2MjAwMEFGNDIwMjgwOEUwMjAwMDRBNzQzMDI4NEFGNDIwMjg4RDgKKzoxMDA2MzAwMDNDMDIxMDAwQUY0MjAyQjgzQzAyMDgwMDhDNDIwMDVDNTEKKzoxMDA2NDAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA1QzBBMDAwMTc4NTEKKzoxMDA2NTAwMDhGQkYwMDE4MTA0MDAwMTMwMDAwMjAyMThGNDMwMTA0QjkKKzoxMDA2NjAwMDNDMDI2MDIwQUM0MzAwMTQ4QzQyMDAwNDI0MDMwMUZFRDEKKzoxMDA2NzAwMDMwNDIwM0ZGMTQ0MzAwMEIwMDAwMjAyMThGNDIwMTAwOTEKKzoxMDA2ODAwMDAwMDIxMUMwMjQ0MkZGRkMyQzQyMDAwODEwNDAwMDAyNkUKKzoxMDA2OTAwMDI0MDMwMDAyMDAwMzFGNDAzQzAyNjAwMEFDNDM2OTE0QzUKKzoxMDA2QTAwMDAwMDAyMDIxOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDAKKzoxMDA2QjAwMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyMDhGNDMwMTAwQzcKKzoxMDA2QzAwMDI0MDIwMTAwNTA2MjAwMDMwMDAzMTFDMjAwMDAwMDBENkIKKzoxMDA2RDAwMDAwMDMxMUMyMDAwMjEwNDAwMDVBMTAyMUE0NDAwMDgwMDMKKzoxMDA2RTAwMDAzRTAwMDA4MDAwMDEwMjE5MzYyMDAwMDAzRTAwMDA4MEUKKzoxMDA2RjAwMEFGODAwMDAwMDNFMDAwMDgwMDAwMTAyMTAzRTAwMDA4QzQKKzoxMDA3MDAwMDAwMDAxMDIxMjQwMjAxMDAxNDgyMDAwODAwMDAwMDAwRjMKKzoxMDA3MTAwMDNDMDIwODAwOEM0MjAwRkMyNDQyMDAwMTNDMDEwODAwMUQKKzoxMDA3MjAwMEFDMjIwMEZDMEEwMDAxOUYzMEEyMDAyMDNDMDIwODAwMUQKKzoxMDA3MzAwMDhDNDIwMDg0MjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDg0NjkKKzoxMDA3NDAwMDMwQTIwMDIwMTA0MDAwMDgzMEEzMDAxMDNDMDIwODAwMzYKKzoxMDA3NTAwMDhDNDIwMTA4MjQ0MjAwMDEzQzAxMDgwMEFDMjIwMTA4M0YKKzoxMDA3NjAwMDAzRTAwMDA4MDAwMDAwMDAxMDYwMDAwODAwMDAwMDAwMjYKKzoxMDA3NzAwMDNDMDIwODAwOEM0MjAxMDQyNDQyMDAwMTNDMDEwODAwQjQKKzoxMDA3ODAwMEFDMjIwMTA0MDNFMDAwMDgwMDAwMDAwMDNDMDIwODAwNjUKKzoxMDA3OTAwMDhDNDIwMTAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMTAwMEYKKzoxMDA3QTAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFOEFGQkYwMDEwMTUKKzoxMDA3QjAwMDI3NDQwMTAwOTQ4MzAwMDgzMDYyMDAwNDEwNDAwMDFCQUQKKzoxMDA3QzAwMDMwNjYwMDAyOEY0MjAyQjgwNDQxMDAwODI0MDUwMDAxOEYKKzoxMDA3RDAwMDNDMDIwODAwOEM0MjAwNjAyNDQyMDAwMTNDMDEwODAwRjkKKzoxMDA3RTAwMEFDMjIwMDYwMEEwMDAxRUI4RkJGMDAxMDhDODIwMDIwNTkKKzoxMDA3RjAwMDk0ODMwMDE2MDAwMDI4MjFBRjQyMDI4MDhDODIwMDA0RkUKKzoxMDA4MDAwMEE3NDMwMjg0QUY0MjAyODgzQzAyMTAwMEFGNDIwMkI4MDQKKzoxMDA4MTAwMDNDMDIwODAwOEM0MjAwNUMyNDQyMDAwMTNDMDEwODAwQkMKKzoxMDA4MjAwMEFDMjIwMDVDMEEwMDAxRUI4RkJGMDAxMDEwQzAwMDA2NzQKKzoxMDA4MzAwMDAwNjAyODIxOEY0NDAxMDAwRTAwMDE4RjAwMDAwMDAwOUQKKzoxMDA4NDAwMDBBMDAwMUVBMjQwNTAwMDE4RjgyMDAwODhGNDMwMTA0OTkKKzoxMDA4NTAwMDUwNDMwMDA3MDAwMDI4MjE4RjQ0MDEwMDBFMDAwMThGNDMKKzoxMDA4NjAwMDAwMDAwMDAwOEY0MjAxMDRBRjgyMDAwODAwMDAyODIxMzAKKzoxMDA4NzAwMDhGQkYwMDEwMDBBMDEwMjEwM0UwMDAwODI3QkQwMDE4NjIKKzoxMDA4ODAwMDNDMDIwODAwOEM0MjAwODgyNzQzMDEwMDk0NjUwMDBDNUMKKzoxMDA4OTAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA4ODhDNjQwMDE4NEUKKzoxMDA4QTAwMDAzNDUxMDIxOTA0NTQwMDBBRjQ0MDAzODhDNjIwMDFDODUKKzoxMDA4QjAwMDI0MDNGRkY4MDAwNTJFMDAwMDQzMTAyNDM0NDIwMDA0RjYKKzoxMDA4QzAwMEFGNDIwMDNDM0MwMjAwMDVBRjQyMDAzMDAwMDAwMDAwOTcKKzoxMDA4RDAwMDAwMDAwMDAwMDAwMDAwMDBBRjQ1MDQwNDAwMDAwMDAwMUMKKzoxMDA4RTAwMDAwMDAwMDAwMDAwMDAwMDAzQzAyMDAwNjM0NDIwMDAxNEQKKzoxMDA4RjAwMEFGNDIwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMDA5MDAwMDhGNDIwMDAwMzA0MjAwMTAxMDQwRkZGRDAwMDAxMDIxMTcKKzoxMDA5MTAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMEFGQjIwMDE4QjAKKzoxMDA5MjAwMDNDMDM2MDEwQUZCRjAwMUNBRkIxMDAxNEFGQjAwMDEwQUIKKzoxMDA5MzAwMDhDNjQ1MDAwMjQwMkZGN0YzQzFBODAwMDAwODIyMDI0MzcKKzoxMDA5NDAwMDM0ODQzODBDMjQwMjAwMzdBQzY0NTAwMDNDMTIwODAwOTgKKzoxMDA5NTAwMDI2NTI0RDM4QUY0MjAwMDgyNDAyMEM4MEFGNDIwMDI0REEKKzoxMDA5NjAwMDNDMUI4MDA4M0MwNjA4MDAyNEM2MDYyQzAyNDAxMDIxQ0YKKzoxMDA5NzAwMDI0MDQwMDFDMjQ4NEZGRkZBQzQ2MDAwMDA0ODFGRkZEMUEKKzoxMDA5ODAwMDI0NDIwMDA0M0MwMjA4MDAyNDQyMDE2QzNDMDEwODAwOUYKKzoxMDA5OTAwMEFDMjI0RDQwM0MwMjA4MDAyNDQyMDQwNDNDMDEwODAwMDMKKzoxMDA5QTAwMEFDMjI0RDQ0M0MwMjA4MDAyNDQyMDdCODNDMDEwODAwMzgKKzoxMDA5QjAwMEFDMjI0RDg4M0MwMjA4MDAyNDQyMDI1QzNDMDMwODAwNDMKKzoxMDA5QzAwMDI0NjMwNjM0M0MwNDA4MDAyNDg0MDZFMDNDMDUwODAwNDcKKzoxMDA5RDAwMDI0QTUzQjUwM0MwMTA4MDBBQzIyNERBMDNDMDIwODAwN0QKKzoxMDA5RTAwMDI0NDIwNUY0M0MwMTA4MDBBQzI2NEQ4NDNDMDEwODAwN0IKKzoxMDA5RjAwMEFDMjU0RDk0M0MwMTA4MDBBQzIzNEQ5QzNDMDEwODAwMDMKKzoxMDBBMDAwMEFDMjQ0REE0M0MwMTA4MDBBQzIyNERBODNDMDEwODAwRDgKKzoxMDBBMTAwMEFDMjM0RDNDM0MwMTA4MDBBQzIwNEQ0ODNDMDEwODAwOTMKKzoxMDBBMjAwMEFDMjA0RDRDM0MwMTA4MDBBQzIwNEQ1MDNDMDEwODAwNkUKKzoxMDBBMzAwMEFDMjA0RDU0M0MwMTA4MDBBQzIwNEQ1ODNDMDEwODAwNEUKKzoxMDBBNDAwMEFDMjA0RDVDM0MwMTA4MDBBQzIwNEQ2MDNDMDEwODAwMkUKKzoxMDBBNTAwMEFDMjQ0RDY0M0MwMTA4MDBBQzIwNEQ2ODNDMDEwODAwMEEKKzoxMDBBNjAwMEFDMjA0RDZDM0MwMTA4MDBBQzIwNEQ3MDNDMDEwODAwRUUKKzoxMDBBNzAwMEFDMjA0RDc0M0MwMTA4MDBBQzIwNEQ3ODNDMDEwODAwQ0UKKzoxMDBBODAwMEFDMjY0RDdDM0MwMTA4MDBBQzI2NEQ4MDNDMDEwODAwQTIKKzoxMDBBOTAwMEFDMjA0RDhDM0MwMTA4MDBBQzI1NEQ5MDNDMDEwODAwNzkKKzoxMDBBQTAwMEFDMjM0RDk4MEUwMDA2QkIwMDAwMDAwMDNDMDI4MDAwMDUKKzoxMDBBQjAwMDM0NDIwMDcwOEM0MjAwMDBBRjgyMDAxNDNDMDMwODAwRjYKKzoxMDBBQzAwMDhDNjMwMDIwOEY4MjAwMDQxMDQzMDAwNDNDMDI4MDAwRUQKKzoxMDBBRDAwMDBFMDAwNEYzQUY4MzAwMDQzQzAyODAwMDM0NDYwMDcwMzMKKzoxMDBBRTAwMDNDMDMwODAwOEM2MzAwQTAzQzAyMDgwMDhDNDIwMEE0NzgKKzoxMDBBRjAwMDEwNDMwMDA0OEY4NDAwMTQzQzAxMDgwMEFDMjMwMEE0QzAKKzoxMDBCMDAwMEE3NDMwMDlFOENDQTAwMDAzQzAzMDgwMDhDNjMwMEJDMTUKKzoxMDBCMTAwMDNDMDIwODAwOEM0MjAwQjgwMTQ0MjAyMzAwNjQxODIxRTQKKzoxMDBCMjAwMDAwMDA0MDIxMDA2NDIwMkIwMDQ4MTAyMTAwNDQxMDIxQzcKKzoxMDBCMzAwMDNDMDEwODAwQUMyMzAwQkMzQzAxMDgwMEFDMjIwMEI4MUEKKzoxMDBCNDAwMDhGNTEwMDAwMzIyMjAwMDcxMDQwRkZEQ0FGOEEwMDE0RjIKKzoxMDBCNTAwMDhDQzYwMDAwM0MwNTA4MDA4Q0E1MDBCQzNDMDQwODAwQzUKKzoxMDBCNjAwMDhDODQwMEI4MDBDQTMwMjMwMEE2MjgyMTAwMDAxMDIxODAKKzoxMDBCNzAwMDAwQTYzMDJCMDA4MjIwMjEwMDg2MjAyMTMyMjcwMDAxOTAKKzoxMDBCODAwMDNDMDEwODAwQUMyNTAwQkMzQzAxMDgwMEFDMjQwMEI4QzYKKzoxMDBCOTAwMDEwRTAwMDFGMzIyMjAwMDI4RjQyMDEwMEFGNDIwMDIwMEQKKzoxMDBCQTAwMDhGNDIwMTA0QUY0MjAwQTg5MzQyMDEwQjBFMDAwMTg4NUUKKzoxMDBCQjAwMDMwNTAwMEZGMkUwMjAwMUQ1NDQwMDAwNDAwMTAxMDgwMzEKKzoxMDBCQzAwMDBFMDAwMThCMEEwMDAyQzUwMDAwMDAwMDAwNTIxMDIxMzcKKzoxMDBCRDAwMDhDNDIwMDAwMDA0MEY4MDkwMDAwMDAwMDEwNDAwMDA1QjEKKzoxMDBCRTAwMDNDMDI0MDAwOEY0MzAxMDQzQzAyNjAyMEFDNDMwMDE0RUYKKzoxMDBCRjAwMDNDMDI0MDAwQUY0MjAxMzgzQzAyMDgwMDhDNDIwMDM0MDUKKzoxMDBDMDAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDAzNDMyMjIwMDAyRTAKKzoxMDBDMTAwMDEwNDAwMDBFMzIyMjAwMDQ4RjQyMDE0MDBFMDAwMTg4NzUKKzoxMDBDMjAwMEFGNDIwMDIwMEUwMDAzNEIwMDAwMDAwMDNDMDI0MDAwRDkKKzoxMDBDMzAwMEFGNDIwMTc4M0MwMjA4MDA4QzQyMDAzODI0NDIwMDAxOTcKKzoxMDBDNDAwMDNDMDEwODAwQUMyMjAwMzgzMjIyMDAwNDEwNDBGRjk4MUEKKzoxMDBDNTAwMDNDMDI4MDAwOEY0MjAxODAwRTAwMDE4OEFGNDIwMDIwREMKKzoxMDBDNjAwMDhGNDMwMTgwMjQwMjBGMDAxNDYyMDAwNTAwMDAwMDAwODEKKzoxMDBDNzAwMDhGNDIwMTg4QTc0MjAwOUMwQTAwMDJGQTNDMDI0MDAwMTEKKzoxMDBDODAwMDkzNjIwMDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDA4MjgKKzoxMDBDOTAwMDNDMDI0MDAwMEUwMDAzMkQwMDAwMDAwMDU0NDAwMDA0MDAKKzoxMDBDQTAwMDNDMDI0MDAwMEUwMDBFMEQwMDAwMDAwMDNDMDI0MDAwMUYKKzoxMDBDQjAwMEFGNDIwMUI4M0MwMjA4MDA4QzQyMDAzQzI0NDIwMDAxRDMKKzoxMDBDQzAwMDNDMDEwODAwQUMyMjAwM0MwQTAwMDI3QTNDMDI4MDAwOTEKKzoxMDBDRDAwMDNDMDI5MDAwMzQ0MjAwMDEwMDgyMjAyNUFGNDQwMDIwRjUKKzoxMDBDRTAwMDhGNDIwMDIwMDQ0MEZGRkUwMDAwMDAwMDAzRTAwMDA4RTcKKzoxMDBDRjAwMDAwMDAwMDAwM0MwMjgwMDAzNDQyMDAwMTAwODIyMDI1RjgKKzoxMDBEMDAwMDAzRTAwMDA4QUY0NDAwMjAyN0JERkZFMEFGQjEwMDE0QUUKKzoxMDBEMTAwMEFGQjAwMDEwMDA4MDg4MjFBRkJGMDAxODBFMDAwMzAyQTIKKzoxMDBEMjAwMDMwQjAwMEZGOTM2MjAwN0QwMjIwMjAyMTAyMDI4MDI1NjYKKzoxMDBEMzAwMEEzNzAwMDdEOEY3MDAwNzQzQzAyODAwMDBFMDAwMzBCRDYKKzoxMDBENDAwMDAyMDI4MDI0MTYwMDAwMDk4RkJGMDAxODhGNDIwMUY4QUMKKzoxMDBENTAwMDA0NDBGRkZFMjQwMjAwMDJBRjUxMDFDMEEzNDIwMUM0QkYKKzoxMDBENjAwMDNDMDIxMDAwQUY0MjAxRjg4RkJGMDAxODhGQjEwMDE0OTEKKzoxMDBENzAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkU4NkEKKzoxMDBEODAwMEFGQkYwMDEwOTc0MjAxODQzMDQyMDIwMDEwNDAwMDA1QkUKKzoxMDBEOTAwMDAwMDAyMDIxMEUwMDEwNDIwMDAwMDAwMDBBMDAwMzQxNjQKKzoxMDBEQTAwMDI0MDQwMDAxOEY0MjAxODgwNDQwMDAwOThGQkYwMDEwMTUKKzoxMDBEQjAwMDhGNDIwMTg4M0MwM0ZGMDAwMDQzMTAyNDNDMDMwNDAwRTEKKzoxMDBEQzAwMDE0NDMwMDAzMjQwNDAwMDE5MzYyMDAzRThGQkYwMDEwMEYKKzoxMDBERDAwMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAxODI0MDIwMDAxNTQKKzoxMDBERTAwMEEzNjAwMDIyQTc2MjAwMTY4RjQ0MDE0MDBBMDAwMzEwOEUKKzoxMDBERjAwMDI0MDUwMDAxMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwMEQKKzoxMDBFMDAwMDkzNjIwMDAwMzA0NDAwRkYzODgzMDAyMDM4ODIwMDMwQjUKKzoxMDBFMTAwMDAwMDMxODJCMDAwMjEwMkIwMDYyMTgyNDEwNjAwMDAzM0UKKzoxMDBFMjAwMDI0MDIwMDUwMTQ4MjAwNjI4RkJGMDAxNDkzNDIwMTQ4RDQKKzoxMDBFMzAwMDMwNDIwMEZGMjQ0M0ZGRkYyQzYyMDAwNTEwNDAwMDVDOUQKKzoxMDBFNDAwMDhGQkYwMDE0MDAwMzEwODAzQzAzMDgwMDI0NjM0Q0M4Q0IKKzoxMDBFNTAwMDAwNDMxMDIxOEM0MjAwMDAwMDQwMDAwODAwMDAwMDAwMDgKKzoxMDBFNjAwMDBFMDAwMzAyOEY0NDAxNDA4RjcwMDAwQzhGNDIwMTQ0M0EKKzoxMDBFNzAwMDE2MDIwMDAyMjQwMjAwMDFBRjYyMDAwQzBFMDAwMzBCRjgKKzoxMDBFODAwMDhGNDQwMTQwOEY0MjAxNDQxNDUwMDAwNDhGQkYwMDE0NkUKKzoxMDBFOTAwMDhGQjAwMDEwMEEwMDBGQjgyN0JEMDAxODhGNjIwMDBDMzkKKzoxMDBFQTAwMDBBMDAwM0IzMDAwMDAwMDA5NzYyMDAxMDhGNDMwMTQ0NjIKKzoxMDBFQjAwMDMwNDJGRkZGMTQ2MjAwMDkwMDAwMDAwMDI0MDIwMDAxMUMKKzoxMDBFQzAwMEE3NjIwMDEwOEY0MjAxNDBBRjQyMDIwMDNDMDIxMDAwQjYKKzoxMDBFRDAwMEFGNDIwMjM4MEEwMDAzQkE4RkJGMDAxNDk3NjIwMDEwQjUKKzoxMDBFRTAwMDBBMDAwM0IzMDAwMDAwMDAwRTAwMDMwMjhGNDQwMTQwMUIKKzoxMDBFRjAwMDk3NjIwMDEyOEY0MzAxNDQzMDUwRkZGRjE2MDMwMDAyMzcKKzoxMDBGMDAwMDI0MDIwMDAxQTc2MjAwMTIwRTAwMDMwQjhGNDQwMTQwNkYKKzoxMDBGMTAwMDhGNDIwMTQ0MTYwMjAwMDQ4RkJGMDAxNDhGQjAwMDEwRUUKKzoxMDBGMjAwMDBBMDAwMzQ1MjdCRDAwMTg5NzYyMDAxMjBBMDAwM0IzQTgKKzoxMDBGMzAwMDAwMDAwMDAwOTc2MjAwMTQ4RjQzMDE0NDMwNDJGRkZGMUQKKzoxMDBGNDAwMDE0NjIwMDA2OEZCRjAwMTQyNDAyMDAwMThGQjAwMDEwNEQKKzoxMDBGNTAwMEE3NjIwMDE0MEEwMDEyRTIyN0JEMDAxODk3NjIwMDE0NkQKKzoxMDBGNjAwMDBBMDAwM0IzMDAwMDAwMDA5NzYyMDAxNjhGNDMwMTQ0OUIKKzoxMDBGNzAwMDMwNDJGRkZGMTQ2MjAwMDYyNDAyMDAwMThGQkYwMDE0RkMKKzoxMDBGODAwMDhGQjAwMDEwQTc2MjAwMTYwQTAwMEJBQTI3QkQwMDE4MzgKKzoxMDBGOTAwMDk3NjIwMDE2MTQ0MDAwMDY4RkJGMDAxNDNDMDIwODAwNDAKKzoxMDBGQTAwMDhDNDIwMDcwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDcwMTkKKzoxMDBGQjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkU4MzAKKzoxMDBGQzAwMEFGQkYwMDE0QUZCMDAwMTA4RjUwMDEwMDkzNjIwMDAwNUIKKzoxMDBGRDAwMDkzNDMwMTA5MzA0NDAwRkYyNDAyMDAxRjEwNjIwMEE1NjIKKzoxMDBGRTAwMDI4NjIwMDIwMTA0MDAwMTgyNDAyMDAzODI4NjIwMDBBRkQKKzoxMDBGRjAwMDEwNDAwMDBDMjQwMjAwMEIyODYyMDAwODEwNDAwMDJDNTYKKzoxMDEwMDAwMDAwMDAwMDAwMDQ2MDAwRTUyODYyMDAwMjE0NDAwMDI4OEYKKzoxMDEwMTAwMDI0MDIwMDA2MTA2MjAwMjY4RkJGMDAxNDBBMDAwNEI3RTUKKzoxMDEwMjAwMDhGQjAwMDEwMTA2MjAwNUUyODYyMDAwQjE0NDAwMERDREMKKzoxMDEwMzAwMDhGQkYwMDE0MjQwMjAwMEUxMDYyMDA3MzhGQjAwMDEwRTYKKzoxMDEwNDAwMDBBMDAwNEI3MDAwMDAwMDAxMDYyMDBDMDI4NjIwMDM5RTYKKzoxMDEwNTAwMDEwNDAwMDBBMjQwMjAwODAyNDAyMDAzNjEwNjIwMENBRjgKKzoxMDEwNjAwMDI4NjIwMDM3MTA0MDAwQjQyNDAyMDAzNTEwNjIwMEMxMkQKKzoxMDEwNzAwMDhGQkYwMDE0MEEwMDA0Qjc4RkIwMDAxMDEwNjIwMDJCNUQKKzoxMDEwODAwMDI4NjIwMDgxMTA0MDAwMDYyNDAyMDBDODI0MDIwMDM5QjIKKzoxMDEwOTAwMDEwNjIwMEI0OEZCRjAwMTQwQTAwMDRCNzhGQjAwMDEwQjQKKzoxMDEwQTAwMDEwNjIwMDk5OEZCRjAwMTQwQTAwMDRCNzhGQjAwMDEwQkYKKzoxMDEwQjAwMDNDMDIwODAwOEM0MjAwMjAxMDQwMDBCOThGQkYwMDE0OTEKKzoxMDEwQzAwMDBFMDAwNTJCMDAwMDAwMDA4RjQyMDEwMDhGODMwMDIwREUKKzoxMDEwRDAwMDk3NDUwMTBDOTc0NjAxMDhBQzYyMDAwMDhGNDIwMTA0NUQKKzoxMDEwRTAwMDNDMDQwODAwOTQ4NDREQkUwMDA1MkMwMEFDNjIwMDA0NTIKKzoxMDEwRjAwMDhGNDIwMTE4MDAwNjM0MDAwMEM0MzAyNUFDNjIwMDA4OUQKKzoxMDExMDAwMDhGNDIwMTFDMjQwNDAwMDFBQzYyMDAwQzkzNDIwMTBBQ0UKKzoxMDExMTAwMDAwQTIyODI1QUM2NTAwMTBBQzYwMDAxNEFDNjAwMDE4N0IKKzoxMDExMjAwMEFDNjYwMDFDMEEwMDA0OEQ4RkJGMDAxNDNDMDIwODAwNEUKKzoxMDExMzAwMDhDNDIwMDIwMTA0MDAwOUE4RkJGMDAxNDBFMDAwNTJCMzcKKzoxMDExNDAwMDAwMDAwMDAwOTc0NDAxMDgzQzAzMDgwMDk0NjM0REJFNzIKKzoxMDExNTAwMDk3NDUwMTBDMDAwNDIyMDI5NzQ2MDEwRThGODIwMDIwNjEKKzoxMDExNjAwMDAwMDQyNjAwMDA4MzIwMjUwMDA1MkMwMDNDMDMwMDgwOUQKKzoxMDExNzAwMDAwQTYyODI1MDA4MzIwMjVBQzQwMDAwMEFDNDAwMDA0RDgKKzoxMDExODAwMEFDNDAwMDA4QUM0MDAwMENBQzQ1MDAxMEFDNDAwMDE0NzIKKzoxMDExOTAwMEFDNDAwMDE4QUM0NDAwMUMwQTAwMDQ4QzI0MDQwMDAxN0MKKzoxMDExQTAwMDk3NDIwMTBDMTQ0MDAwMTUwMDAwMDAwMDkzNjIwMDA1RjYKKzoxMDExQjAwMDMwNDIwMDEwMTQ0MDAwMTEwMDAwMDAwMDBFMDAwMzAyMzUKKzoxMDExQzAwMDAyMDAyMDIxOTM2MjAwMDUwMjAwMjAyMTM0NDIwMDEwMTkKKzoxMDExRDAwMDBFMDAwMzBCQTM2MjAwMDU5MzYyMDAwMDI0MDMwMDIwQUQKKzoxMDExRTAwMDMwNDIwMEZGMTA0MzAwNkQwMjAwMjAyMThGQkYwMDE0MjkKKzoxMDExRjAwMDhGQjAwMDEwMEEwMDEwNTgyN0JEMDAxODAwMDAwMDBEMjUKKzoxMDEyMDAwMDBBMDAwNEI2OEZCRjAwMTQzQzAyMDgwMDhDNDIwMDIwODQKKzoxMDEyMTAwMDEwNDAwMDYzOEZCRjAwMTQwRTAwMDUyQjAwMDAwMDAwN0IKKzoxMDEyMjAwMDhGNDIwMTA0OEY4MzAwMjA5NzQ0MDEwQzNDMDUwODAwODUKKzoxMDEyMzAwMDk0QTU0REJFQUM2MjAwMDA5NzYyMDAyQzAwMDQyNDAwMEYKKzoxMDEyNDAwMDMwNDJGRkZGMDA4MjIwMjUzQzAyNDAwRTAwQTIyODI1RUMKKzoxMDEyNTAwMEFDNjQwMDA0QUM2MDAwMDhBQzYwMDAwQ0FDNjAwMDEwMzIKKzoxMDEyNjAwMEFDNjAwMDE0QUM2MDAwMThBQzY1MDAxQzBBMDAwNDhDNzMKKzoxMDEyNzAwMDI0MDQwMDAxMEUwMDAzMDIwMjAwMjAyMUE3NjAwMDA4RTAKKzoxMDEyODAwMDBFMDAwMzBCMDIwMDIwMjEwMjAwMjAyMTBFMDAwMzEwOUIKKzoxMDEyOTAwMDI0MDUwMDAxM0MwMjA4MDA4QzQyMDAyMDEwNDAwMDQwNjAKKzoxMDEyQTAwMDhGQkYwMDE0MEUwMDA1MkIwMDAwMDAwMDk3NDIwMTBDQjgKKzoxMDEyQjAwMDhGODMwMDIwM0MwNTA4MDA5NEE1NERCRTAwMDIxNDAwNTkKKzoxMDEyQzAwMEFDNzAwMDAwQUM2MjAwMDRBQzYwMDAwODhGNjQwMDRDOUQKKzoxMDEyRDAwMDNDMDI0MDFGMDBBMjI4MjVBQzY0MDAwQzhGNjIwMDUwMjUKKzoxMDEyRTAwMDI0MDQwMDAxQUM2MjAwMTA4RjYyMDA1NEFDNjIwMDE0NTAKKzoxMDEyRjAwMEFDNjAwMDE4QUM2NTAwMUM4RkJGMDAxNDhGQjAwMDEwRUMKKzoxMDEzMDAwMDBBMDAwNTUwMjdCRDAwMTgyNDAyMDAyMDUwODIwMDI1NDUKKzoxMDEzMTAwMDhGQjAwMDEwMEUwMDBGQTIwMjAwMjAyMTEwNDAwMDIwMEMKKzoxMDEzMjAwMDhGQkYwMDE0MDIwMDIwMjE4RkIwMDAxMDAwMDAyODIxODAKKzoxMDEzMzAwMDBBMDAwMzEwMjdCRDAwMTgwMjAwMjAyMThGQkYwMDE0RUYKKzoxMDEzNDAwMDhGQjAwMDEwMEEwMDA2MTgyN0JEMDAxODk3NDUwMTBDNDEKKzoxMDEzNTAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDBBMDAwNjM4NTEKKzoxMDEzNjAwMDI3QkQwMDE4MDIwMDIwMjE4RkIwMDAxMDBBMDAwNjVEODIKKzoxMDEzNzAwMDI3QkQwMDE4OTM0NTAxMEQwMjAwMjAyMThGQjAwMDEwRjkKKzoxMDEzODAwMDBBMDAwNkE3MjdCRDAwMTgwMjAwMjAyMThGQkYwMDE0MDUKKzoxMDEzOTAwMDhGQjAwMDEwMEEwMDA2ODMyN0JEMDAxODhGQkYwMDE0MEQKKzoxMDEzQTAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODhGNDIwMjc4QkMKKzoxMDEzQjAwMDA0NDBGRkZFMjQwMjAwMDIzNDg0MDA4MEFGNDQwMjQwNTcKKzoxMDEzQzAwMEEzNDIwMjQ0M0MwMjEwMDAwM0UwMDAwOEFGNDIwMjc4NEUKKzoxMDEzRDAwMDNDMDQwODAwOTQ4NDREQ0EzQzAyMDgwMDhDNDI0REQ0NjEKKzoxMDEzRTAwMDMwODNGRkZGMDAwMzE4QzAwMDQzMTAyMUFGNDIwMDNDRDAKKzoxMDEzRjAwMDNDMDIwODAwOEM0MjRERDBBRjQyMDAzODNDMDIwMDUwMDUKKzoxMDE0MDAwMDM0NDIwMDA4QUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDE0MTAwMDAwMDAwMDAwOEY0MjAwMDAzMDQyMDAyMDEwNDBGRkZEMUQKKzoxMDE0MjAwMDAwMDAwMDAwOEY0MjA0MDAzQzAxMDgwMEFDMjI0REMwQzcKKzoxMDE0MzAwMDhGNDIwNDA0M0MwMTA4MDBBQzIyNERDNDNDMDIwMDIwNTEKKzoxMDE0NDAwMEFGNDIwMDMwMDAwMDAwMDAzQzAyMDgwMDk0NDI0REM4NEEKKzoxMDE0NTAwMDNDMDMwODAwOTQ2MzREQ0MzQzA1MDgwMDk0QTU0RENFOTgKKzoxMDE0NjAwMDI0ODQwMDAxMDA0MzEwMjEzMDgzRkZGRjNDMDEwODAwNjkKKzoxMDE0NzAwMEE0MjI0REM4M0MwMTA4MDBBNDI0NERDQTE0NjUwMDAzRjEKKzoxMDE0ODAwMDAwMDAwMDAwM0MwMTA4MDBBNDIwNERDQTAzRTAwMDA4NTEKKzoxMDE0OTAwMDAwMDAwMDAwM0MwNTAwMEEyN0JERkZFODAzNDUyODIxQTUKKzoxMDE0QTAwMDNDMDQwODAwMjQ4NDREQjBBRkJGMDAxMDBFMDAwNUI1MDkKKzoxMDE0QjAwMDI0MDYwMDBBM0MwMjA4MDA5NDQyNERCMjNDMDMwODAwOTYKKzoxMDE0QzAwMDk0NjM0RENFMzA0MjAwMEYyNDQyMDAwMzAwNDMxODA0QzEKKzoxMDE0RDAwMDI0MDI3RkZGMDA0MzEwMkIxMDQwMDAwMkFGODMwMDFDNEEKKzoxMDE0RTAwMDAwMDAwMDBEMEUwMDA0QzIwMDAwMDAwMDNDMDIwODAwRDUKKzoxMDE0RjAwMDk0NDI0REJBOEZCRjAwMTAyN0JEMDAxODAzRTAwMDA4Q0EKKzoxMDE1MDAwMEE3NDIwMEEyM0MwMjAwMEEwMzQyMTAyMTk0NDMwMDA2QjUKKzoxMDE1MTAwMDNDMDIwODAwOTQ0MjREQkEzQzAxMDgwMEE0MjM0REI2OTkKKzoxMDE1MjAwMDAwNDMxMDIzOEY4MzAwMUMwMDAyMTQwMDAwMDIxNDAzRTgKKzoxMDE1MzAwMDAwNDMxMDJCMDNFMDAwMDgzODQyMDAwMTI3QkRGRkU4RkMKKzoxMDE1NDAwMEFGQkYwMDEwM0MwMjAwMEEwMzQyMTAyMTk0NDIwMDA2ODMKKzoxMDE1NTAwMDNDMDEwODAwQTQyMjREQjYwRTAwMDUwRjAwMDAwMDAwNUIKKzoxMDE1NjAwMDU0NDBGRkY5M0MwMjAwMEE4RkJGMDAxMDAzRTAwMDA4NUUKKzoxMDE1NzAwMDI3QkQwMDE4MjdCREZGRThBRkJGMDAxMDBFMDAwNTBGMDQKKzoxMDE1ODAwMDAwMDAwMDAwMTA0MDAwMDMwMDAwMDAwMDBFMDAwNTFERDgKKzoxMDE1OTAwMDAwMDAwMDAwM0MwMjA4MDA4QzQyNERDMDhGQkYwMDEwQ0MKKzoxMDE1QTAwMDI3NDMwNDAwQUY0MjAwMzgzQzAyMDgwMDhDNDI0REM0N0YKKzoxMDE1QjAwMDI3QkQwMDE4QUY4MzAwMjBBRjQyMDAzQzNDMDIwMDA1NkQKKzoxMDE1QzAwMEFGNDIwMDMwMDNFMDAwMDhBRjgwMDAxODhGODIwMDE4OUYKKzoxMDE1RDAwMDNDMDMwMDA2MDAwMjExNDAwMDQzMTAyNUFGNDIwMDMwREEKKzoxMDE1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNDIwMDAwMkEKKzoxMDE1RjAwMDMwNDIwMDEwMTA0MEZGRkQyNzQyMDQwMEFGODIwMDIwNUYKKzoxMDE2MDAwMDAzRTAwMDA4QUY4MDAwMTgzQzA2MDgwMDhDQzY0REM0RkIKKzoxMDE2MTAwMDhGODUwMDE4OEY4MzAwMjAzQzAyMDgwMDk0NDI0REJBNDkKKzoxMDE2MjAwMDI3QkRGRkUwMjRBNTAwMDEyNDYzMDAyMDI0NDIwMDAxMUYKKzoxMDE2MzAwMDI0QzcwMDIwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDE4MzYKKzoxMDE2NDAwMEFGODUwMDE4QUY4MzAwMjAzQzAxMDgwMEE0MjI0REJBRUEKKzoxMDE2NTAwMDMwOTAwMEZGM0MwMTA4MDBBQzI3NERDNDA0QzEwMDA4RDUKKzoxMDE2NjAwMDAwMDA4ODIxMDRFMDAwMDYwMDAwMDAwMDNDMDIwODAwQTEKKzoxMDE2NzAwMDhDNDI0REMwMjQ0MjAwMDEzQzAxMDgwMEFDMjI0REMwMDgKKzoxMDE2ODAwMDNDMDIwODAwOTQ0MjREQkEzQzAzMDgwMDk0NjM0REM4RTQKKzoxMDE2OTAwMDAwMTAyMDJCMDA0MzEwMjYyQzQyMDAwMTAwNDQxMDI1OEUKKzoxMDE2QTAwMDE0NDAwMDA0OEY4MzAwMTgyNDAyMDAxMDE0NjIwMDBGRkQKKzoxMDE2QjAwMDAwMDAwMDAwMEUwMDA1NDEyNDExMDAwMTNDMDMwODAwNTkKKzoxMDE2QzAwMDk0NjM0REJBM0MwMjA4MDA5NDQyNERDODE0NjIwMDAzNzIKKzoxMDE2RDAwMDAwMDAwMDAwMEUwMDA0QzIwMDAwMDAwMDE2MDAwMDAzMUQKKzoxMDE2RTAwMDAwMDAwMDAwMEUwMDA1MkIwMDAwMDAwMDNDMDMwODAwNzUKKzoxMDE2RjAwMDk0NjM0REJFM0MwMjA4MDA5NDQyNERCQzI0NjMwMDAxM0IKKzoxMDE3MDAwMDMwNjRGRkZGM0MwMTA4MDBBNDIzNERCRTE0ODIwMDAzOTcKKzoxMDE3MTAwMDAwMDAwMDAwM0MwMTA4MDBBNDIwNERCRTEyMDAwMDA2OUQKKzoxMDE3MjAwMDAwMDAwMDAwM0MwMjA4MDA5NDQyNERCQUE3NDIwMEEyMEIKKzoxMDE3MzAwMDBBMDAwNUEzMDIyMDEwMjEwRTAwMDUwRjAwMDAwMDAwODIKKzoxMDE3NDAwMDEwNDAwMDA0MDIyMDEwMjEwRTAwMDUxRDAwMDAwMDAwQzIKKzoxMDE3NTAwMDAyMjAxMDIxOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMkQKKzoxMDE3NjAwMDAzRTAwMDA4MjdCRDAwMjAzMDg0RkZGRjMwQTVGRkZGMDUKKzoxMDE3NzAwMDAwMDAxODIxMTA4MDAwMDcwMDAwMDAwMDMwODIwMDAxRTYKKzoxMDE3ODAwMDEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTBBMDAwNUFCNDkKKzoxMDE3OTAwMDAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA2OEEKKzoxMDE3QTAwMDI0QzZGRkZGOENBMjAwMDAyNEE1MDAwNEFDODIwMDAwMjgKKzoxMDE3QjAwMDBBMDAwNUI1MjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwQ0UKKzoxMDE3QzAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwNkEKKzoxMDE3RDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBRjEKKzoxMDE3RTAwMDI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDI0MDIwMDAxM0IKKzoxMDE3RjAwMEFGNjIwMDBDQTc2MjAwMTBBNzYyMDAxMkE3NjIwMDE0N0IKKzoxMDE4MDAwMDAzRTAwMDA4QTc2MjAwMTYzMDgyMDA3RjAzNDIxMDIxMjcKKzoxMDE4MTAwMDNDMDgwMDBFMDA0ODE4MjEzQzAyMDgwMDhDNDIwMDIwQzEKKzoxMDE4MjAwMDI3QkRGRkQ4MjQwN0ZGODBBRkIzMDAxQ0FGQjIwMDE4NUMKKzoxMDE4MzAwMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMDAwODA4MDIxMTYKKzoxMDE4NDAwMDMwQjEwMEZGMDA4NzIwMjQzMEQyMDBGRjEwNDAwMDJGNkQKKzoxMDE4NTAwMDAwMDA5ODIxQUY0NDAwMkM5MDYyMDAwMDI0MDMwMDUwNDcKKzoxMDE4NjAwMDMwNDIwMEZGMTQ0MzAwMEUwMDAwMDAwMDNDMDIwODAwNUMKKzoxMDE4NzAwMDhDNDIwMEUwMDIwMjEwMjEwMDQ3MTAyNEFGNDIwMDJDRUQKKzoxMDE4ODAwMDNDMDIwODAwOEM0MjAwRTAwMjAyMTAyMTMwNDIwMDdGM0UKKzoxMDE4OTAwMDAzNDIxMDIxMDA0ODEwMjE5NDQyMDBENDMwNTNGRkZGMkUKKzoxMDE4QTAwMDBFMDAwNTJCMDAwMDAwMDAzQzAyMDgwMDk0NDI0REJFRDMKKzoxMDE4QjAwMDhGODMwMDIwMDAxMTM0MDAwMEMyMzAyNTAwMTIyQzAwNUMKKzoxMDE4QzAwMDNDMDI0MDAwMDBDMjMwMjUzNEE1MDAwMUFDNzAwMDAwOEQKKzoxMDE4RDAwMDhGQkYwMDIwQUM2MDAwMDQ4RkIyMDAxOEFDNzMwMDA4MEEKKzoxMDE4RTAwMDhGQjEwMDE0QUM2MDAwMEM4RkIzMDAxQ0FDNjUwMDEwMEQKKzoxMDE4RjAwMDhGQjAwMDEwQUM2MDAwMTQyNDA0MDAwMUFDNjAwMDE4MkMKKzoxMDE5MDAwMDI3QkQwMDI4MEEwMDA1NTBBQzY2MDAxQzhGQkYwMDIwRDAKKzoxMDE5MTAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwNkQKKzoxMDE5MjAwMDAzRTAwMDA4MjdCRDAwMjg5MzQzMDEwRjI0MDIwMDEwQTQKKzoxMDE5MzAwMDEwNjIwMDBFMjg2NTAwMTExMEEwMDAwNzI0MDIwMDEyOUEKKzoxMDE5NDAwMDI0MDIwMDA4MjQwNTAwM0ExMDYyMDAwNjAwMDAzMDIxM0QKKzoxMDE5NTAwMDAzRTAwMDA4MDAwMDAwMDAyNDA1MDAzNTE0NjJGRkZDQ0QKKzoxMDE5NjAwMDAwMDAzMDIxMEEwMDA1RDAwMDAwMDAwMDhGNDIwMDc0MDIKKzoxMDE5NzAwMDI0NDIwRkEwMDNFMDAwMDhBRjYyMDAwQzI3QkRGRkU4N0YKKzoxMDE5ODAwMEFGQkYwMDEwMEUwMDAzMTAyNDA1MDAwMThGQkYwMDEwMzAKKzoxMDE5OTAwMDI0MDIwMDAxQTc2MjAwMTIyN0JEMDAxODI0MDIwMDAxRTIKKzoxMDE5QTAwMDAzRTAwMDA4QTM2MDAwMjIyN0JERkZFMEFGQjEwMDE0RjAKKzoxMDE5QjAwMEFGQjAwMDEwQUZCRjAwMTgzMEIxRkZGRjBFMDAwMzAyNDAKKzoxMDE5QzAwMDAwODA4MDIxOTM2MjAwM0YyNDAzMDAwNDMwNDIwMEZGMjYKKzoxMDE5RDAwMDE0NDMwMDBDMDIwMDIwMjExMjIwMDAwODI0MDIwMDBBRjcKKzoxMDE5RTAwMDBFMDAwNUM5MDAwMDAwMDA5MzYyMDAwNTI0MDNGRkZFRkQKKzoxMDE5RjAwMDAwNDMxMDI0QTM2MjAwMDUyNDAyMDAxMkEzNjIwMDNGRUEKKzoxMDFBMDAwMDAyMDAyMDIxMEUwMDAzMEJBMzYwMDA4MTE2MjAwMDAzQkEKKzoxMDFBMTAwMDAyMDAyMDIxMEUwMDA2MkQwMDAwMDAwMDAyMDAyMDIxRkYKKzoxMDFBMjAwMDMyMjYwMEZGOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwNTYKKzoxMDFBMzAwMDI0MDUwMDM4MEEwMDA1RDAyN0JEMDAyMDI3QkRGRkUwOUYKKzoxMDFBNDAwMEFGQkYwMDFDQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQjAKKzoxMDFBNTAwMDBFMDAwMzAyMDA4MDgwMjEwRTAwMDVDOTAwMDAwMDAwNzYKKzoxMDFBNjAwMDkzNjIwMDNGMjQxMjAwMTgzMDUxMDBGRjEyMzIwMDAzMkQKKzoxMDFBNzAwMDAyMDAyMDIxMjQwMjAwMTJBMzYyMDAzRjkzNjIwMDA1QUQKKzoxMDFBODAwMDI0MDNGRkZFMDA0MzEwMjQwRTAwMDMwQkEzNjIwMDA1OTUKKzoxMDFBOTAwMDAyMDAyMDIxMjQwNTAwMjAxNjMyMDAwNzAwMDAzMDIxMUEKKzoxMDFBQTAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwRDAKKzoxMDFBQjAwMDBBMDAwMzEwMjdCRDAwMjA4RkJGMDAxQzhGQjIwMDE4NDIKKzoxMDFBQzAwMDhGQjEwMDE0OEZCMDAwMTAyNDA1MDAzOTBBMDAwNUQwMzIKKzoxMDFBRDAwMDI3QkQwMDIwMjdCREZGRThBRkIwMDAxMEFGQkYwMDE0NDYKKzoxMDFBRTAwMDk3NDIwMTBDMjQwNTAwMzYwMDgwODAyMTE0NDAwMDEwMkMKKzoxMDFBRjAwMDMwNDYwMEZGMEUwMDAzMDIwMDAwMDAwMDI0MDIwMDEyMjYKKzoxMDFCMDAwMEEzNjIwMDNGOTM2MjAwMDUzNDQyMDAxMDBFMDAwNUM5MzUKKzoxMDFCMTAwMEEzNjIwMDA1MEUwMDAzMEIwMjAwMjAyMTAyMDAyMDIxMTkKKzoxMDFCMjAwMDBFMDAwMzEwMjQwNTAwMjAwQTAwMDY5QzAwMDAwMDAwOUYKKzoxMDFCMzAwMDBFMDAwNUQwMDAwMDAwMDAwRTAwMDMwMjAyMDAyMDIxNkMKKzoxMDFCNDAwMDkzNjIwMDIzMjQwM0ZGOUYwMjAwMjAyMTAwNDMxMDI0RkUKKzoxMDFCNTAwMDhGQkYwMDE0OEZCMDAwMTBBMzYyMDAyMzBBMDAwMzBCOTQKKzoxMDFCNjAwMDI3QkQwMDE4MjdCREZGRTBBRkJGMDAxOEFGQjEwMDE0QkMKKzoxMDFCNzAwMEFGQjAwMDEwMzBCMTAwRkYwRTAwMDMwMjAwODA4MDIxRTIKKzoxMDFCODAwMDI0MDIwMDEyMEUwMDA1QzlBMzYyMDAzRjBFMDAwMzBCRTEKKzoxMDFCOTAwMDAyMDAyMDIxMDIwMDIwMjEwMjIwMzAyMThGQkYwMDE4RTYKKzoxMDFCQTAwMDhGQjEwMDE0OEZCMDAwMTAyNDA1MDAzNTBBMDAwNUQwNTUKKzoxMDFCQjAwMDI3QkQwMDIwQTM4MDAwMkMwM0UwMDAwOEEzODAwMDJEOTcKKzoxMDFCQzAwMDhGNDIwMjc4MDQ0MEZGRkU4RjgyMDAzNEFGNDIwMjQwMTEKKzoxMDFCRDAwMDI0MDIwMDAyQTM0MjAyNDQzQzAyMTAwMDAzRTAwMDA4NzkKKzoxMDFCRTAwMEFGNDIwMjc4M0MwMzYwMDA4QzYyNTQwMDMwNDIwMDA4MkYKKzoxMDFCRjAwMDE0NDBGRkZEMDAwMDAwMDA4QzYyNTQwOEFGODIwMDBDMEUKKzoxMDFDMDAwMDI0MDIwMDUyQUM2MDU0MDhBQzY0NTQzMEFDNjI1NDM0Q0EKKzoxMDFDMTAwMDI0MDIwMDA4MDNFMDAwMDhBQzYyNTQwMDNDMDI2MDAwQUIKKzoxMDFDMjAwMDhDNDI1NDAwMzA0MjAwMDgxMDQwMDAwNTNDMDM2MDAwMjQKKzoxMDFDMzAwMDhDNjI1NDAwMzA0MjAwMDgxNDQwRkZGRDAwMDAwMDAwOTgKKzoxMDFDNDAwMDhGODMwMDBDM0MwMjYwMDAwM0UwMDAwOEFDNDM1NDA4QTIKKzoxMDFDNTAwMDkwQTMwMDAwMjQwMjAwMDUwMDgwNDAyMTMwNjMwMDNGNzMKKzoxMDFDNjAwMDAwMDA0ODIxMTQ2MjAwMDUwMDAwNTAyMTkwQTIwMDFDRDEKKzoxMDFDNzAwMDk0QTMwMDFFMzA0OTAwRkYzMDZBRkZGRkFEMDAwMDBDNDYKKzoxMDFDODAwMEFEMDAwMDEwQUQwMDAwMjQ5NTAyMDAxNDhEMDUwMDFDNkQKKzoxMDFDOTAwMDhEMDQwMDE4MzA0MkZGRkYwMDQ5MTAyMzAwMDIxMTAwOUMKKzoxMDFDQTAwMDAwMDIzN0MzMDA0MDM4MjEwMDg2MjAyMzAwQTIxMDJCRjkKKzoxMDFDQjAwMDAwODIyMDIzMDBBNzI4MjNBRDA1MDAxQ0FEMDQwMDE4RDYKKzoxMDFDQzAwMEE1MDkwMDE0QTUwOTAwMjBBNTBBMDAxNjAzRTAwMDA4RDQKKzoxMDFDRDAwMEE1MEEwMDIyOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyMDAKKzoxMDFDRTAwMEFGNDQwMUMwQTM0MjAxQzQzQzAyMTAwMDAzRTAwMDA4NUQKKzoxMDFDRjAwMEFGNDIwMUY4M0MwMjA4MDA4QzQyMDBCNDI3QkRGRkU4NjcKKzoxMDFEMDAwMEFGQkYwMDE0MjQ0MjAwMDFBRkIwMDAxMDNDMDEwODAwMzYKKzoxMDFEMTAwMEFDMjIwMEI0OEY0MzAwMjQzQzAyMDAxRjMwQUEwMEZGMTUKKzoxMDFEMjAwMDM0NDJGRjgwMzBEODAwRkYwMDYyODAyNDAwODBGODIxMTgKKzoxMDFEMzAwMDMwRUYwMEZGMTE1ODAwM0IwMTQwNTgyMTI0MENGRjgwNzgKKzoxMDFENDAwMDNDMTkwMDBBMzE2MzAwN0YwMDAzMTBDMDAwMDMxOTQwRjIKKzoxMDFENTAwMDAwNjIxODIxM0MwMjA4MDA4QzQyMDBEQzI1NjgwMDAxNkEKKzoxMDFENjAwMDMxMEQwMDdGMDNFMjEwMjEwMDQzMTAyMTMwNDMwMDdGM0EKKzoxMDFENzAwMDAzNDMxODIxMDA0QzEwMjQwMDc5NDgyMUFGNDIwMDI0NkQKKzoxMDFEODAwMDhEMjIwMDI0MDE2QzE4MjQwMDZDNzAyNkFEMjIwMDBDRkEKKzoxMDFEOTAwMDhEMjIwMDI0MzEwODAwRkZBRDIyMDAxMDk1MjIwMDE0OEUKKzoxMDFEQTAwMDk1MjMwMDIwOEQyNzAwMUMzMDQyRkZGRjMwNjNGRkZGOEEKKzoxMDFEQjAwMDhEMjYwMDE4MDA0MzEwMjMwMDAyMTEwMDAwMDIyN0MzRTMKKzoxMDFEQzAwMDAwNDAyODIxMDBDNDMwMjMwMEUyMTAyQjAwQzIzMDIzNDEKKzoxMDFERDAwMDAwRTUzODIzQUQyNzAwMUNBRDI2MDAxODk1MjIwMDIwMTEKKzoxMDFERTAwMEE1MjIwMDE0OTUyMjAwMjIxNTRCMDAwQUE1MjIwMDE2RjgKKzoxMDFERjAwMDhEMjMwMDI0OEQyMjAwMDgyNTQ2MDAwMTMxNDUwMDgwRjYKKzoxMDFFMDAwMDE0NjIwMDA0MzBDNDAwN0YxMDhGMDAwMjM4QUEwMDgwRTIKKzoxMDFFMTAwMDAwQzA1MDIxNTFBRjAwMDEzMUM4MDBGRjE1MThGRkM5QTMKKzoxMDFFMjAwMDAxMDA1ODIxOEY4NDAwMzQzMDgyMDA3RjAzNDIxODIxNDIKKzoxMDFFMzAwMDNDMDIwMDBBMDA2MjE4MjEyNDAyRkY4MDAwODIyMDI0NTQKKzoxMDFFNDAwMEFGNDQwMDI0QTA2QTAwNzlBMDZBMDA4MzhDNjIwMDUwMkQKKzoxMDFFNTAwMDhGODQwMDM0QUM2MjAwNzA4QzY1MDA3NDNDMDI3RkZGOUMKKzoxMDFFNjAwMDM0NDJGRkZGMDBBMjI4MjQwRTAwMDcwM0FDNjUwMDc0NzMKKzoxMDFFNzAwMEFGNTAwMDI0OEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4QTMKKzoxMDFFODAwMDI3QkQwMDE4MjdCREZGQzBBRkJFMDAzOEFGQjcwMDM0NzQKKzoxMDFFOTAwMEFGQjUwMDJDQUZCMjAwMjBBRkIxMDAxQ0FGQjAwMDE4M0UKKzoxMDFFQTAwMEFGQkYwMDNDQUZCNjAwMzBBRkI0MDAyOEFGQjMwMDI0RTIKKzoxMDFFQjAwMDhGNDUwMDI0OEY0NjAwMjg4RjQzMDAyQzNDMDIwMDFGRDIKKzoxMDFFQzAwMDM0NDJGRjgwMDA2MjE4MjQwMEMyMzAyNDAwODBBODIxMjAKKzoxMDFFRDAwMEFGQTMwMDE0MDBBMkYwMjQwRTAwMDZDN0FGQTYwMDEwQTYKKzoxMDFFRTAwMDNDMDIwODAwOEM0MjAwRTAyNDEwRkY4MDAzNjA4ODIxM0YKKzoxMDFFRjAwMDAyQTIxMDIxMDA1MDEwMjRBRjQyMDAyNDNDMDIwODAwMkUKKzoxMDFGMDAwMDhDNDIwMEUwMDJBMjEwMjEzMDQyMDA3RjAzNDIxODIxREYKKzoxMDFGMTAwMDNDMDIwMDBBMDA2MjkwMjE5MjQyMDBEMjkzNjMwMDg0NDYKKzoxMDFGMjAwMDMwNTcwMEZGMzA2MzAwRkYyNDAyMDAwMTEwNjIwMDM0Q0MKKzoxMDFGMzAwMDAzNjAyMDIxMjQwMjAwMDIxNDYyMDAzNjAwMDAwMDAwMjkKKzoxMDFGNDAwMDBFMDAxMkFFMDI0MDI4MjE5MjIzMDA4MzkyMjIwMDgzQzkKKzoxMDFGNTAwMDMwNjMwMDdGMzA0MjAwN0YwMDAyMTBDMDAwMDMxOTQwNTAKKzoxMDFGNjAwMDAwNjIxODIxM0MwMjA4MDA4QzQyMDBEQzAyQTIxMDIxMTEKKzoxMDFGNzAwMDAwNDMzODIxMDBGMDEwMjRBRjQyMDAyODkyMjUwMDc4NTkKKzoxMDFGODAwMDkyMjQwMDgzMzBFMjAwN0YwMzQyMTgyMTNDMDIwMDBDQkYKKzoxMDFGOTAwMDE0ODUwMDA3MDA2MjgwMjEyNDAyRkZGRkEyNDIwMEYxQTUKKzoxMDFGQTAwMDI0MDJGRkZGQTY0MjAwRjIwQTAwMDdCRjI0MDJGRkZGM0YKKzoxMDFGQjAwMDk2MDIwMDIwQTI0MjAwRjE5NjAyMDAyMkE2NDIwMEYyMDAKKzoxMDFGQzAwMDhFMDIwMDI0QUU0MjAwRjQ5MjIyMDA4M0EyNDIwMEYwNkUKKzoxMDFGRDAwMDhFNDIwMEM4QUU0MjAwRkM4RTQyMDBDNEFFNDIwMEY4MDEKKzoxMDFGRTAwMDhFMjIwMDUwQUU0MjAxMDA4RTQyMDBDQ0FFNDIwMTA0NkYKKzoxMDFGRjAwMDkyMjIwMDg1MzA0MjAwM0YwQTAwMDgxQTM0NDIwMDQwMTUKKzoxMDIwMDAwMDBFMDAxMkQxMDI0MDI4MjE5MjIyMDA4NTBBMDAwODFBRUYKKzoxMDIwMTAwMDMwNDIwMDNGOTM2MjAwODUyNDAzRkZERjMwNDIwMDNGREYKKzoxMDIwMjAwMEEzNjIwMDg1OTM2MjAwODUwMDQzMTAyNEEzNjIwMDg1QUIKKzoxMDIwMzAwMDkzNjMwMDgzOTM2MjAwNzgzMDc0MDBGRjMwNDIwMEZGQTYKKzoxMDIwNDAwMDEwNTQwMDM2MjQwQUZGODAzQzBDMDAwQzMyODMwMDdGQzEKKzoxMDIwNTAwMDAwMDMxMEMwMDAwMzE5NDAwMDYyMTgyMTNDMDIwODAwNzAKKzoxMDIwNjAwMDhDNDIwMERDMjY4ODAwMDEzMTA5MDA3RjAyQTIxMDIxODkKKzoxMDIwNzAwMDAwNDMzODIxMzBFMjAwN0YwMzQyMTgyMTAwRUExMDI0OTcKKzoxMDIwODAwMEFGNDIwMDI4MDA2QzgwMjE4RTAyMDAyNDAyOEExODI0QUUKKzoxMDIwOTAwMDAwNkE1ODI2QUUwMjAwMEM4RTAyMDAyNDMxMDgwMEZGQjAKKzoxMDIwQTAwMEFFMDIwMDEwOTYwMjAwMTQ5NjAzMDAyMDhFMDcwMDFDNUEKKzoxMDIwQjAwMDMwNDJGRkZGMzA2M0ZGRkY4RTA2MDAxODAwNDMxMDIzRkQKKzoxMDIwQzAwMDAwMDIxMTAwMDAwMjI3QzMwMDQwMjgyMTAwQzQzMDIzNzEKKzoxMDIwRDAwMDAwRTIxMDJCMDBDMjMwMjMwMEU1MzgyM0FFMDcwMDFDQkQKKzoxMDIwRTAwMEFFMDYwMDE4OTYwMjAwMjBBNjAyMDAxNDk2MDIwMDIyRjYKKzoxMDIwRjAwMEE2MDIwMDE2OTIyMjAwNzkzMDQyMDBGRjEwNTQwMDA3MTkKKzoxMDIxMDAwMDAwMDAwMDAwNTEzNzAwMDEzMTY4MDBGRjkyMjIwMDc4ODIKKzoxMDIxMTAwMDMwNDIwMEZGMTQ0OEZGQ0QwMTAwQTAyMTkyMjIwMDgzMkQKKzoxMDIxMjAwMEEyMjIwMDc5OEUyMjAwNTAwQTAwMDg3QUFFMjIwMDcwQTYKKzoxMDIxMzAwMEEyMjIwMDg1OEUyMjAwNEMyNDA1RkY4MEFFNDIwMTBDQjUKKzoxMDIxNDAwMDkyMjIwMDg1MzQ0MjAwMjBBMjIyMDA4NTkyNDIwMEQxRDIKKzoxMDIxNTAwMDNDMDMwODAwOEM2MzAwREMzMDU0MDBGRjNDMDIwODAwQTQKKzoxMDIxNjAwMDhDNDIwMEU0MDAxNDMxNDAwMDE0MjBDMDAyQTMxODIxNjYKKzoxMDIxNzAwMDAwQzQyMDIxMDJBMjEwMjEwMDY0MzgyMTAwNDYxMDIxNTEKKzoxMDIxODAwMDAwNDUxODI0MDBFNTI4MjRBRjQ1MDAyOEFGNDMwMDJDNjMKKzoxMDIxOTAwMDMwNDIwMDdGOTI0NDAwRDAzMEUzMDA3RjAzNDIyODIxODgKKzoxMDIxQTAwMDAzNDMxODIxM0MwMjAwMEMwMDYyODAyMTNDMDIwMDBFMTcKKzoxMDIxQjAwMDMwOTYwMEZGMDBBMjk4MjExMjk2MDAyQTAwMDAwMDAwMkQKKzoxMDIxQzAwMDhFMDIwMDBDMDIwMDIwMjEwMjYwMjgyMTEwNDAwMDI1MTAKKzoxMDIxRDAwMDI2MTAwMDI4MEUwMDA2RTIwMDAwMDAwMDkyNjIwMDBEQUEKKzoxMDIxRTAwMDI2ODMwMDAxMzA3NDAwRkYzMDQyMDA3RkEyNjIwMDBEQTAKKzoxMDIxRjAwMDI0MDRGRjgwMTY5N0ZGRjAyNjczMDAyMDNDMDIwODAwOUQKKzoxMDIyMDAwMDhDNDIwMERDMDAwMEEwMjEwMkEyMTAyMTAwNDQxMDI0MTYKKzoxMDIyMTAwMEFGNDIwMDI4M0MwMjA4MDA4QzQyMDBFNDNDMDMwODAwNjYKKzoxMDIyMjAwMDhDNjMwMERDMDJBMjEwMjEwMDQ0MTAyNEFGNDIwMDJDNzkKKzoxMDIyMzAwMDNDMDIwODAwOEM0MjAwRTQwMkEzMTgyMTMwNjMwMDdGQjYKKzoxMDIyNDAwMDAyQTIxMDIxMzA0MjAwN0YwMzQyMjAyMTAzNDMxODIxQzMKKzoxMDIyNTAwMDNDMDIwMDBDMDA2MjgwMjEzQzAyMDAwRTBBMDAwODNDOTcKKzoxMDIyNjAwMDAwODI5ODIxOEU0MjAwRDhBRTIyMDA1MDhFNDIwMEQ4QzMKKzoxMDIyNzAwMEFFMjIwMDcwOTIyNTAwODM5MjQ2MDBEMTkyMjMwMDgzMDMKKzoxMDIyODAwMDkyNDQwMEQxMjQwMkZGODAwMEEyMjgyNDMwNjMwMDdGMDIKKzoxMDIyOTAwMDMwODQwMEZGMDBBNjI4MjUwMDY0MTgyQTEwNjAwMDAyODAKKzoxMDIyQTAwMDMwQTUwMEZGMzhBNTAwODBBMjI1MDA4M0EyMjUwMDc5NzMKKzoxMDIyQjAwMDBFMDAwNkQ1MDAwMDAwMDA5MjIyMDA3RTAyQTAyMDIxMjAKKzoxMDIyQzAwMEEyMjIwMDdBOEUyMzAwNzQzQzAyN0ZGRjM0NDJGRkZGN0IKKzoxMDIyRDAwMDAwNjIxODI0MEUwMDA3MDNBRTIzMDA3NDhGQTIwMDEwQzIKKzoxMDIyRTAwMEFGNUUwMDI0OEZCRjAwM0NBRjQyMDAyODhGQkUwMDM4OTUKKzoxMDIyRjAwMDhGQTIwMDE0OEZCNzAwMzQ4RkI2MDAzMDhGQjUwMDJDM0EKKzoxMDIzMDAwMDhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDM0YKKzoxMDIzMTAwMDhGQjAwMDE4MjdCRDAwNDAwM0UwMDAwOEFGNDIwMDJDM0EKKzoxMDIzMjAwMDkwQTIwMDAwMjQ0MjAwMDFBMEEyMDAwMDNDMDMwODAwOEIKKzoxMDIzMzAwMDhDNjMwMEY0MzA0MjAwRkYxNDQzMDAwRjAwODAzMDIxMTIKKzoxMDIzNDAwMEEwQTAwMDAwM0MwMjA4MDA4QzQyMDBFNDhGODQwMDM0MEUKKzoxMDIzNTAwMDAwODIyMDIxMzA4MjAwN0YwMzQyMTgyMTNDMDIwMDBDQzEKKzoxMDIzNjAwMDAwNjIxODIxMjQwMkZGODAwMDgyMjAyNEFDQzMwMDAwRjgKKzoxMDIzNzAwMDAzRTAwMDA4QUY0NDAwMjg4QzgyMDAwMDI0NDIwMDIwQzMKKzoxMDIzODAwMDAzRTAwMDA4QUM4MjAwMDA5NEMyMDAwMDNDMDgwODAwOTIKKzoxMDIzOTAwMDk1MDgwMENBMzBFN0ZGRkYwMDgwNDgyMTAxMDIxMDIxQTQKKzoxMDIzQTAwMEE0QzIwMDAwOTRDMjAwMDAzMDQyRkZGRjAwRTIxMDJCRTQKKzoxMDIzQjAwMDU0NDAwMDAxQTRDNzAwMDA5NEEyMDAwMDNDMDMwODAwQTAKKzoxMDIzQzAwMDhDNjMwMENDMjQ0MjAwMDFBNEEyMDAwMDk0QTIwMDAwNkYKKzoxMDIzRDAwMDMwNDJGRkZGNTQ0MzAwMDc4Rjg2MDAyODAxMDcxMDJCNkYKKzoxMDIzRTAwMEE0QTAwMDAwNTQ0MDAwMDEwMTAwMzgyMUE0QzcwMDAwNEYKKzoxMDIzRjAwMDhGODYwMDI4OENDNDAwMUNBRjQ0MDAzQzk0QTIwMDAwQ0YKKzoxMDI0MDAwMDhGNDMwMDNDMzA0MkZGRkYwMDAyMTBDMDAwNjIxODIxRTEKKzoxMDI0MTAwMEFGNDMwMDNDOEY0MjAwM0MwMDgyMjAyMzE4ODAwMDA0MjAKKzoxMDI0MjAwMDAwMDAwMDAwOENDMjAwMTgwQTAwMDhEQjI0NDIwMDAxRjIKKzoxMDI0MzAwMDhDQzIwMDE4QUY0MjAwMzgzQzAyMDA1MDM0NDIwMDEwRjkKKzoxMDI0NDAwMEFGNDIwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDI0NTAwMDhGNDIwMDAwMzA0MjAwMjAxMDQwRkZGRDAwMDAwMDAwQ0QKKzoxMDI0NjAwMDhGNDIwNDA0QUQyMjAwMDQ4RjQyMDQwMEFEMjIwMDAwMUMKKzoxMDI0NzAwMDNDMDIwMDIwQUY0MjAwMzAwM0UwMDAwODAwMDAwMDAwRjIKKzoxMDI0ODAwMDI3QkRGRkUwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwMkQKKzoxMDI0OTAwMEFGQkYwMDFDOTRDMjAwMDAwMEMwODAyMTNDMTIwODAwQTUKKzoxMDI0QTAwMDk2NTIwMEM2MjQ0MjAwMDFBNjAyMDAwMDk2MDMwMDAwRDYKKzoxMDI0QjAwMDk0RTIwMDAwMDBFMDMwMjExNDQzMDAwNThGQjEwMDMwQTkKKzoxMDI0QzAwMDBFMDAwOEIwMDI0MDM4MjEwQTAwMDkwRDAwMDAwMDAwOEIKKzoxMDI0RDAwMDhDODMwMDA0OEM4MjAwMDQyNDQyMDA0MDA0NjEwMDA3QzUKKzoxMDI0RTAwMEFDODIwMDA0OEM4MjAwMDQwNDQwMDAwNDAwMDAwMDAwNjAKKzoxMDI0RjAwMDhDODIwMDAwMjQ0MjAwMDFBQzgyMDAwMDk2MDIwMDAwQTEKKzoxMDI1MDAwMDMwNDJGRkZGNTA1MjAwMDFBNjAwMDAwMDk2MjIwMDAwNUEKKzoxMDI1MTAwMDI0NDIwMDAxQTYyMjAwMDA4RjgyMDAyODk2MjMwMDAwOUEKKzoxMDI1MjAwMDk0NDIwMDE2MTQ0MzAwMDQ4RkJGMDAxQzI0MDIwMDAxRDMKKzoxMDI1MzAwMEE2MjIwMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0QkMKKzoxMDI1NDAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDhGODkwMDI4MEQKKzoxMDI1NTAwMDI3QkRGRkUwQUZCRjAwMTg4RDIyMDAyODI3NDgwNDAwRTgKKzoxMDI1NjAwMDMwRTcwMEZGQUY0MjAwMzg4RDIyMDAyQ0FGODgwMDMwRUEKKzoxMDI1NzAwMEFGNDIwMDNDM0MwMjAwMDVBRjQyMDAzMDAwMDAwMDAwQ0EKKzoxMDI1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKKzoxMDI1OTAwMDAwMDAwMDAwOEM4MjAwMEM4QzgyMDAwQ0FEMDIwMDAwNTgKKzoxMDI1QTAwMDhDODIwMDEwQUQwMjAwMDQ4QzgyMDAxOEFEMDIwMDA4N0QKKzoxMDI1QjAwMDhDODIwMDFDQUQwMjAwMEM4Q0EyMDAxNEFEMDIwMDEwMzUKKzoxMDI1QzAwMDhDODIwMDIwQUQwMjAwMTQ5MDgyMDAwNTMwNDIwMEZGOTIKKzoxMDI1RDAwMDAwMDIxMjAwQUQwMjAwMTg4Q0EyMDAxOEFEMDIwMDFDMEYKKzoxMDI1RTAwMDhDQTIwMDBDQUQwMjAwMjA4Q0EyMDAxMEFEMDIwMDI0RDEKKzoxMDI1RjAwMDhDQTIwMDFDQUQwMjAwMjg4Q0EyMDAyMEFEMDIwMDJDOTEKKzoxMDI2MDAwMEFEMDYwMDMwQUQwMDAwMzQ5NzgzMDAyNjM0MDJGRkZGOTIKKzoxMDI2MTAwMDE0NjIwMDAyMDA2MDIwMjEzNDA0RkZGRjEwRTAwMDExNkEKKzoxMDI2MjAwMEFEMDQwMDM4OTUyMzAwMzY5NTI0MDAzNjI0MDIwMDAxQkQKKzoxMDI2MzAwMDMwNjNGRkZGMDAwMzE4QzIwMDY5MTgyMTkwNjUwMDQwNTUKKzoxMDI2NDAwMDMwODQwMDA3MDA4MjEwMDQwMDQ1MTAyNUEwNjIwMDQwN0QKKzoxMDI2NTAwMDhGODIwMDI4OTQ0MjAwNTYzMDQyRkZGRjBBMDAwOTc0MUUKKzoxMDI2NjAwMEFEMDIwMDNDOTUyMzAwMzY5NTI0MDAzNjI0MDIwMDAxN0IKKzoxMDI2NzAwMDMwNjNGRkZGMDAwMzE4QzIwMDY5MTgyMTkwNjUwMDQwMTUKKzoxMDI2ODAwMDMwODQwMDA3MDA4MjEwMDQwMDAyMTAyNzAwNDUxMDI0NDcKKzoxMDI2OTAwMEEwNjIwMDQwQUQwMDAwM0MwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDI2QTAwMDAwMDAwMDAwM0MwMjAwMDYzNDQyMDA0MEFGNDIwMDMwMEYKKzoxMDI2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNDIwMDAwNDkKKzoxMDI2QzAwMDMwNDIwMDEwMTA0MEZGRkQ4Rjg2MDAyOEFGODgwMDMwOTgKKzoxMDI2RDAwMDI0QzIwMDU2MjRDNzAwM0MyNEM0MDAyODI0QzUwMDMyNkMKKzoxMDI2RTAwMDI0QzYwMDM2MEUwMDA4RUVBRkEyMDAxMDhGQkYwMDE4RkYKKzoxMDI2RjAwMDAzRTAwMDA4MjdCRDAwMjA4RjgzMDAyNDNDMDYwODAwNkIKKzoxMDI3MDAwMDhDQzYwMEU4OEY4MjAwMzQzMDYzM0ZGRjAwMDMxOTgwREQKKzoxMDI3MTAwMDAwNDYxMDIxMDA0MzEwMjEyNDAzRkY4MDMwNDYwMDdGMzMKKzoxMDI3MjAwMDAwNDMxMDI0QUY0MjAwMjgwMzQ2MTgyMTNDMDIwMDBDNEQKKzoxMDI3MzAwMDAwNjIzMDIxOTBDMjAwMEQzMEE1MDBGRjAwMDAzODIxNUEKKzoxMDI3NDAwMDM0NDIwMDEwQTBDMjAwMEQ4Rjg5MDAyODhGOEEwMDI0MTcKKzoxMDI3NTAwMDk1MjMwMDM2MDAwQTEzODIzMDQ4MDAwMzI0MDIwMDAxNEEKKzoxMDI3NjAwMEE0QzMwMDBFMTEwMjAwMEIyOTAyMDAwMjEwNDAwMDA1NTQKKzoxMDI3NzAwMDI0MDIwMDAyMTEwMDAwMEMyNDAzMDAwMTBBMDAwOUI4MjEKKzoxMDI3ODAwMDAwMDAxODIxMTEwMjAwMDYwMDAwMDAwMDBBMDAwOUI4MkMKKzoxMDI3OTAwMDAwMDAxODIxOENDMjAwMkMwQTAwMDlCODI0NDMwMDAxNTMKKzoxMDI3QTAwMDhDQzIwMDE0MjQ0MzAwMDE4Q0MyMDAxODAwNDMxMDJCN0IKKzoxMDI3QjAwMDUwNDAwMDA5MjQwNzAwMDEyNDAyMDAyNzE0QTIwMDAzNEUKKzoxMDI3QzAwMDAwMDAwMDAwMEEwMDA5QzQyNDA3MDAwMTk1MjIwMDNFMTEKKzoxMDI3RDAwMDI0NDIwMDAxQTUyMjAwM0UwMDBBMTM4MjMwNDMwMDAzNzgKKzoxMDI3RTAwMDJDNjIwMDAyMTA0MDAwMDkwMDgwMjgyMTE0NjAwMDA0QkYKKzoxMDI3RjAwMDAwMDAwMDAwOTRDMjAwMzYwQTAwMDlENDMwNDZGRkZGRjIKKzoxMDI4MDAwMDhDQzYwMDM4MEEwMDA5RDQwMDgwMjgyMTAwMDAzMDIxM0QKKzoxMDI4MTAwMDNDMDQwODAwMjQ4NDRERDgwQTAwMDkyMTAwMDAwMDAwNkYKKzoxMDI4MjAwMDI3NDkwMTAwOEQyMjAwMEM5NTIzMDAwNjAxMjAyMDIxNUMKKzoxMDI4MzAwMDAwMDIxNjAyMzA0NjAwM0YzMDYzRkZGRjI0MDIwMDI3RUIKKzoxMDI4NDAwMDAwQzAyODIxMjhDNzAwMjgxMEMyMDAwRUFGODMwMDI0MzIKKzoxMDI4NTAwMDEwRTAwMDA4MjQwMjAwMzEyNDAyMDAyMTEwQzIwMDA5MDcKKzoxMDI4NjAwMDI0MDIwMDI1MTBDMjAwMDc5MzgyMDAyRDBBMDAwOUYzRkMKKzoxMDI4NzAwMDAwMDAwMDAwMTBDMjAwMDU5MzgyMDAyRDBBMDAwOUYzMzkKKzoxMDI4ODAwMDAwMDAwMDAwMEEwMDA5OEMwMDAwMDAwMDBBMDAwNkJFREIKKzoxMDI4OTAwMDAwMDAwMDAwOTUyMzAwMDY5MTI0MDAwNThEMjUwMDBDMDIKKzoxMDI4QTAwMDhEMjYwMDEwOEQyNzAwMTg4RDI4MDAxQzhEMjkwMDIwRjIKKzoxMDI4QjAwMDI0NDIwMDAxM0MwMTA4MDBBNDIzNERERTNDMDEwODAwMzUKKzoxMDI4QzAwMEEwMjQ0REREM0MwMTA4MDBBQzI1NERFNDNDMDEwODAwOEUKKzoxMDI4RDAwMEFDMjY0REU4M0MwMTA4MDBBQzI3NERGMDNDMDEwODAwNTcKKzoxMDI4RTAwMEFDMjg0REY0M0MwMTA4MDBBQzI5NERGODAzRTAwMDA4ODkKKzoxMDI4RjAwMEEzODIwMDJEOEY4NzAwMjgyN0JERkZDMEFGQjMwMDM0MEYKKzoxMDI5MDAwMEFGQjIwMDMwQUZCMTAwMkNBRkIwMDAyOEFGQkYwMDM4N0QKKzoxMDI5MTAwMDNDMDIwODAwOEM0MjAwRDA5NEUzMDAzMDMwQjBGRkZGNEUKKzoxMDI5MjAwMDAwNTAxMDA3MzA0NUZGRkYzMDYzRkZGRjAwQzA5ODIxQzMKKzoxMDI5MzAwMEE3QTIwMDEwM0MxMTA4MDA5NjMxMDBDNjE0QTMwMDA2OUYKKzoxMDI5NDAwMDMwOTJGRkZGOENFMjAwMjQyNDQyMDAzMEFGNDIwMDNDNzIKKzoxMDI5NTAwMDBBMDAwQTJDOENFMjAwMjA5NEUyMDAzMjMwNDJGRkZGOTEKKzoxMDI5NjAwMDU0QTIwMDA4MjdBNDAwMTg4Q0UyMDAyQzI0NDIwMDMwNTYKKzoxMDI5NzAwMEFGNDIwMDNDOENFMjAwMjhBRjQyMDAzODBBMDAwQTNBMUQKKzoxMDI5ODAwMDhGODQwMDI4MjdBNTAwMTAyN0E2MDAyMDAyMjAzODIxQzgKKzoxMDI5OTAwMDBFMDAwOEIwQTdBMDAwMjA4RkEyMDAxODI0NDIwMDMwMkIKKzoxMDI5QTAwMEFGNDIwMDM4OEZBMjAwMUNBRjQyMDAzQzhGODQwMDI4NDkKKzoxMDI5QjAwMDNDMDIwMDA1QUY0MjAwMzA5NDgyMDAzNDI3NDMwNDAwRkIKKzoxMDI5QzAwMDMwNDJGRkZGMDIwMjEwMkIxNDQwMDAwN0FGODMwMDMwOUIKKzoxMDI5RDAwMDk0ODIwMDU0OTQ4MzAwMzQwMjAyMTAyMTAwNDMxMDIzOTcKKzoxMDI5RTAwMDBBMDAwQTRFMzA0M0ZGRkY5NDgzMDA1NDk0ODIwMDM0NUYKKzoxMDI5RjAwMDAyMjMxODIxMDA1MDEwMjMwMDYyMTgyMzMwNjNGRkZGQzgKKzoxMDJBMDAwMDk0ODIwMDE2MzA0MkZGRkYxNDQzMDAwMzAwMDAwMDAwRDAKKzoxMDJBMTAwMDBBMDAwQTVDMjQwMzAwMDE5NDgyMDAxNjMwNDJGRkZGODIKKzoxMDJBMjAwMDAwNDMxMDJCMTA0MDAwMDU4RjgyMDAzMDk0ODIwMDE2NjYKKzoxMDJBMzAwMDAwNjIxMDIzMzA0M0ZGRkY4RjgyMDAzMEFDNTMwMDAwNTAKKzoxMDJBNDAwMEFDNDAwMDA0QUM1MjAwMDhBQzQzMDAwQzNDMDIwMDA2NTEKKzoxMDJBNTAwMDM0NDIwMDEwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDJBNjAwMDAwMDAwMDAwOEY0MjAwMDAzMDQyMDAxMDEwNDBGRkZEQzcKKzoxMDJBNzAwMDAwMTAxOEMyMDA2NDE4MjE5MDY1MDA0MDMyMDQwMDA3NUQKKzoxMDJBODAwMDI0MDIwMDAxOEZCRjAwMzg4RkIzMDAzNDhGQjIwMDMwQjIKKzoxMDJBOTAwMDhGQjEwMDJDOEZCMDAwMjgwMDgyMTAwNDAwNDUxMDI1NTMKKzoxMDJBQTAwMDI3QkQwMDQwMDNFMDAwMDhBMDYyMDA0MDI3QkRGRkE4NEEKKzoxMDJBQjAwMEFGQjYwMDUwQUZCNTAwNENBRkI0MDA0OEFGQjMwMDQ0NjAKKzoxMDJBQzAwMEFGQjEwMDNDQUZCRjAwNTRBRkIyMDA0MEFGQjAwMDM4NzAKKzoxMDJBRDAwMDhDOTAwMDAwM0MwMjA4MDA4QzQyMDBFODhGODYwMDM0OTUKKzoxMDJBRTAwMDk2MDMwMDAyMjQxM0ZGODAwMEMyMzAyMTMwNjMzRkZGQjEKKzoxMDJBRjAwMDAwMDMxOTgwMDBDMzM4MjEwMEYzMTAyNDkwQjIwMDAwQjUKKzoxMDJCMDAwMEFGNDIwMDJDOTIwMzAwMDIzMEUyMDA3RjAzNDIzMDIxRUEKKzoxMDJCMTAwMDNDMDIwMDBFMDBDMjg4MjEzMDYzMDBDMDI0MDIwMDQwNDUKKzoxMDJCMjAwMDAwODBBODIxMDBBMEIwMjExNDYyMDAyNjAwMDBBMDIxOEUKKzoxMDJCMzAwMDhFMzQwMDM4OEUyMjAwMTgxNDQwMDAwMjI0MDIwMDAxNTYKKzoxMDJCNDAwMEFFMjIwMDE4OTIwMjAwMEQzMDQyMDAyMDE0NDAwMDE1MDEKKzoxMDJCNTAwMDhGODIwMDM0M0MwMzA4MDA4QzYzMDBEQzAwMTIzOEMwMTQKKzoxMDJCNjAwMDAwMTIzMTQwMDA0MzEwMjEwMEM3MzAyMTAwNDYzODIxQjcKKzoxMDJCNzAwMDMwRTMwMDA3M0MwMjAwODAzMEU2MDA3ODAwQzIzMDI1RDgKKzoxMDJCODAwMDAzNDMxODIxMDBGMzEwMjRBRjQyMDgwMDI0NjMwOTAwMTYKKzoxMDJCOTAwMEFGNDYwODEwOEUyMjAwMTg4QzYzMDAwODAwNDMxMDIxRjUKKzoxMDJCQTAwMEFFMjIwMDE4OEUyMjAwMkM4RTIzMDAxODI0NDIwMDAxMzEKKzoxMDJCQjAwMDAwNjIxODJCMTA2MDAwM0QwMDAwMDAwMDBBMDAwQjEwOUUKKzoxMDJCQzAwMDAwMDAwMDAwOTIwMzAwMDIyNDAyRkZDMDAwNDMxMDI0MTIKKzoxMDJCRDAwMDMwNDIwMEZGMTQ0MDAwMDUyNDAyMDAwMUFFMjIwMDE4MUMKKzoxMDJCRTAwMDk2MjIwMDM2MEEwMDBBRjkzMDU0RkZGRjhFMjIwMDE0QTQKKzoxMDJCRjAwMDI0NDIwMDAxQUUyMjAwMTg5MjAyMDAwMDAwMDIxNjAwREEKKzoxMDJDMDAwMDAwMDIxNjAzMDQ0MTAwMjkwMDAwMDAwMDk2MDIwMDAyQTEKKzoxMDJDMTAwMDI3QTQwMDEwMDA4MDI4MjFBN0EyMDAxNjk2MDIwMDAyMTcKKzoxMDJDMjAwMDI0MDcwMDAxMDAwMDMwMjEzMDQyRkZGRkFGODIwMDI0NjIKKzoxMDJDMzAwMDBFMDAwOTIxQUZBMDAwMUM5NjAzMDAwMjNDMDQwODAwMEUKKzoxMDJDNDAwMDhDODQwMEU4OEY4MjAwMzQzMDYzM0ZGRjAwMDMxOTgwREEKKzoxMDJDNTAwMDAwNDQxMDIxMDA0MzEwMjEzMDQzMDA3RjNDMDUwMDBDNEMKKzoxMDJDNjAwMDAwNTMxMDI0MDM0MzE4MjFBRjQyMDAyODAwNjUxODIxQTcKKzoxMDJDNzAwMDkwNjIwMDBEMDAxMjIxNDAzMDQyMDA3RkEwNjIwMDBERTIKKzoxMDJDODAwMDNDMDMwODAwOEM2MzAwRTQ4RjgyMDAzNDAwNDMxMDIxNzEKKzoxMDJDOTAwMDAwNDQzODIxMzBFMjAwN0YwMzQyMTAyMTAwNDUxMDIxMUEKKzoxMDJDQTAwMDAwRjMxODI0QUY0MzAwMjhBRUEyMDAwMDkyMjIwMDBEQ0EKKzoxMDJDQjAwMDMwNDIwMDEwMTA0MDAwMTMwMkEwMjAyMThGODMwMDI4MTIKKzoxMDJDQzAwMDhFQTQwMDAwMDI4MDMwMjE5NDYyMDAzRTI0NDJGRkZGNjcKKzoxMDJDRDAwMEE0NjIwMDNFOTQ4NDAwMDI5NjI1MDAwRTMwODRGRkZGMUIKKzoxMDJDRTAwMDBFMDAwQTBCMzBBNUZGRkY4RjgyMDAyODk0NDMwMDM0QUEKKzoxMDJDRjAwMDk2MjIwMDBFMTQ0MzAwMDMwMkEwMjAyMTI0MDIwMDAxQUEKKzoxMDJEMDAwMEEzODIwMDJDMDJDMDI4MjEwRTAwMDg5NjAwMDAwMDAwQkIKKzoxMDJEMTAwMDhGQkYwMDU0OEZCNjAwNTA4RkI1MDA0QzhGQjQwMDQ4NjEKKzoxMDJEMjAwMDhGQjMwMDQ0OEZCMjAwNDA4RkIxMDAzQzhGQjAwMDM4QTkKKzoxMDJEMzAwMDAzRTAwMDA4MjdCRDAwNTg4RjgyMDAyODI3QkRGRkQwODAKKzoxMDJENDAwMEFGQjQwMDI4QUZCMjAwMjBBRkJGMDAyQ0FGQjMwMDI0NTcKKzoxMDJENTAwMEFGQjEwMDFDQUZCMDAwMTg5MDQ0MDBEMDkwNDMwMEQxMzgKKzoxMDJENjAwMDAwMDBBMDIxMzA5MjAwRkZBM0EzMDAxMDMwNjMwMEZGRjkKKzoxMDJENzAwMDhDNTEwMEQ4OEM1MzAwREMxMDcyMDAyQjI0MDIwMDAxMEYKKzoxMDJEODAwMDNDMDMwODAwOEM2MzAwRTQ5M0E0MDAxMDhGODIwMDM0OUQKKzoxMDJEOTAwMDI0MDZGRjgwMDAwNDIxNDAwMDQzMTAyMTAwNDQxMDIxM0MKKzoxMDJEQTAwMDMwNDMwMDdGMDA0NjEwMjRBRjQyMDAyODAzNDMxODIxMUYKKzoxMDJEQjAwMDNDMDIwMDBDMDA2MjE4MjE4QzYyMDAwNDI3QTQwMDE0NUQKKzoxMDJEQzAwMDI3QTUwMDEwMDIyMjgwMjEwMjcwMTAyMzA0NDAwMDE1NjQKKzoxMDJERDAwMEFGQTMwMDE0OTA2MjAwMEQwMEMyMTAyNDMwNDIwMEZGMjcKKzoxMDJERTAwMDE0NDAwMDA3MDIwMDg4MjE5MDYyMDAwRDM0NDIwMDQwMjgKKzoxMDJERjAwMDBFMDAwODk2QTA2MjAwMEQwQTAwMEI1NTkzQTIwMDEwNjkKKzoxMDJFMDAwMDBFMDAwQTc5MjQxNDAwMDE4RjgzMDAyOEFDNzAwMEQ4Q0EKKzoxMDJFMTAwMDkzQTIwMDEwQTA2MjAwRDE5M0EyMDAxMDE0NTJGRkQ4MTgKKzoxMDJFMjAwMDAwMDAwMDAwMjQwMjAwMDExNjgyMDAwNDhGQkYwMDJDNjUKKzoxMDJFMzAwMDBFMDAwNkJFMDAwMDAwMDA4RkJGMDAyQzhGQjQwMDI4REIKKzoxMDJFNDAwMDhGQjMwMDI0OEZCMjAwMjA4RkIxMDAxQzhGQjAwMDE4MDgKKzoxMDJFNTAwMDAzRTAwMDA4MjdCRDAwMzAyN0JERkZEOEFGQjMwMDFDM0EKKzoxMDJFNjAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwNzgKKzoxMDJFNzAwMDAwODA5ODIxMDBFMDgwMjEzMEIxRkZGRjBFMDAwNTJCN0IKKzoxMDJFODAwMDMwRDIwMEZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDJFOTAwMDhGODIwMDIwQUM1MTAwMDBBQzUyMDAwNEFDNTMwMDA4RkIKKzoxMDJFQTAwMEFDNDAwMDBDQUM0MDAwMTBBQzQwMDAxNEFDNDAwMDE4MkEKKzoxMDJFQjAwMDNDMDMwODAwOTQ2MzREQkUwMjAzODAyNUFDNTAwMDFDMDcKKzoxMDJFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0MDQwMDAxRDkKKzoxMDJFRDAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0NzkKKzoxMDJFRTAwMDhGQjAwMDEwMEEwMDA1NTAyN0JEMDAyODI3QkRGRkU4NUQKKzoxMDJFRjAwMEFGQjAwMDEwQUZCRjAwMTQzMEE1RkZGRjMwQzYwMEZGMTkKKzoxMDJGMDAwMDAwODA4MDIxMjQwMjBDODBBRjQyMDAyNDAwMDAwMDAwRDkKKzoxMDJGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMDJGMjAwMDBFMDAwQjY0MDAwMDAwMDAzQzA0MDgwMDI0ODQwMEUwNTQKKzoxMDJGMzAwMDhDODIwMDAwMjQwM0ZGODA4RkJGMDAxNDAyMDIxMDIxNDYKKzoxMDJGNDAwMDAwNDMxMDI0QUY0MjAwMjQ4QzgyMDAwMDNDMDMwMDBBOUUKKzoxMDJGNTAwMDAyMDI4MDIxMzIxMDAwN0YwMzUwMTAyMThGQjAwMDEwMzgKKzoxMDJGNjAwMDAwNDMxMDIxMjdCRDAwMTgwM0UwMDAwOEFGODIwMDI4QUQKKzoxMDJGNzAwMDI3QkRGRkU4QUZCRjAwMTA4RjQ0MDE0MDNDMDMwODAwQUQKKzoxMDJGODAwMDhDNjMwMEUwMjQwMkZGODBBRjg0MDAzNDAwODMxODIxQUEKKzoxMDJGOTAwMDAwNjIxMDI0QUY0MjAwMjQzQzAyMDAwODAzNDI0MDIxOUEKKzoxMDJGQTAwMDk1MDUwMDAyMzA2MzAwN0YzQzAyMDAwQTAzNDMxODIxQUMKKzoxMDJGQjAwMDAwNjIxODIxMzBBNUZGRkYzNDAyRkZGRjAwMDAzMDIxMUUKKzoxMDJGQzAwMDNDMDc2MDIwMTBBMjAwMDZBRjgzMDAyODI0MDJGRkZGMDgKKzoxMDJGRDAwMEE1MDIwMDAyOTQ2NTAwRDQwRTAwMEI4OTMwQTVGRkZGMDYKKzoxMDJGRTAwMDhGQkYwMDEwMjQwMjBDODAyN0JEMDAxODAzRTAwMDA4RUEKKzoxMDJGRjAwMEFGNDIwMDI0M0MwMjAwMDgwMzQyNDAyMTk1MDIwMDAyMzcKKzoxMDMwMDAwMDNDMEEwODAwOTU0QTAwQzYzMDQ2RkZGRjE0QzAwMDA3N0UKKzoxMDMwMTAwMDM0MDJGRkZGOEY4MjAwMjg4Rjg0MDAzNDNDMDc2MDIwMzkKKzoxMDMwMjAwMDk0NDUwMEQ0MEEwMDBCRjIzMEE1RkZGRjEwQzIwMDI0MjMKKzoxMDMwMzAwMDhGODcwMDI4OTRFMjAwNTQ5NEU0MDAxNjMwNDVGRkZGODcKKzoxMDMwNDAwMDAwQTYxMDIzMDBBNjE4MkIzMDg5RkZGRjEwNjAwMDA0OTMKKzoxMDMwNTAwMDMwNDRGRkZGMDBDNTEwMjMwMTIyMTAyMzMwNDRGRkZGM0UKKzoxMDMwNjAwMDAwOEExMDJCMTA0MDAwMEMwMTJBMTAyMzI0MDIwMDAxQkEKKzoxMDMwNzAwMEE1MDIwMDE2MjQwMkZGRkZBNTAyMDAwMjk0RTUwMEQ0NzkKKzoxMDMwODAwMDhGODQwMDM0MDAwMDMwMjEzMEE1RkZGRjNDMDc2MDIwMTIKKzoxMDMwOTAwMDBBMDAwQjg5MDAwMDAwMDAwMDQ0MTAyQTEwNDAwMDA4QkMKKzoxMDMwQTAwMDAwMDAwMDAwOTUwMjAwMTYzMDQyMDAwMTEwNDAwMDA0QUMKKzoxMDMwQjAwMDAwMDAwMDAwOTc0MjAwN0UyNDQyMDAxNEE1MDIwMDE2ODIKKzoxMDMwQzAwMDAzRTAwMDA4MDAwMDAwMDA4Rjg0MDAyODI3QkRGRkUwMTcKKzoxMDMwRDAwMEFGQkYwMDE4OTQ4MjAwMzQ5NDgzMDAzRTEwNjAwMDFBNDEKKzoxMDMwRTAwMDMwNDhGRkZGOTM4MzAwMkMyNDAyMDAwMTE0NjIwMDI3NjQKKzoxMDMwRjAwMDhGQkYwMDE4OEY4MjAwMjgwMDA4MThDMjMxMDgwMDA3MEYKKzoxMDMxMDAwMDAwNjIxODIxMjQ0NzAwM0EyNDQ5MDA1NDI0NDQwMDIwMzYKKzoxMDMxMTAwMDI0NDUwMDMwMjQ0NjAwMzQ5MDYyMDA0MDMwNDIwMEZGRDUKKzoxMDMxMjAwMDAxMDIxMDA3MzA0MjAwMDExMDQwMDAxNjhGQkYwMDE4NDYKKzoxMDMxMzAwMDBFMDAwOEVFQUZBOTAwMTA4RjgyMDAyODk0NDIwMDM0RTAKKzoxMDMxNDAwMDBBMDAwQzBCMzA0OEZGRkY5NDgzMDAzNjk0ODIwMDM0NTEKKzoxMDMxNTAwMDEwNDMwMDBFOEZCRjAwMTg5NDgyMDAzNkE0ODIwMDM0MDIKKzoxMDMxNjAwMDk0ODIwMDU2QTQ4MjAwNTQ4QzgyMDAyQ0FDODIwMDI0RUQKKzoxMDMxNzAwMDk0ODIwMDMyQTQ4MjAwMzA5NDgyMDAzQ0E0ODIwMDNBRkYKKzoxMDMxODAwMDhGQkYwMDE4MEEwMDBCQ0IyN0JEMDAyMDAzRTAwMDA4MEEKKzoxMDMxOTAwMDI3QkQwMDIwMjdCREZGRThBRkJGMDAxMDhGNEEwMTAwMDgKKzoxMDMxQTAwMDNDMDUwODAwOENBNTAwRTAzQzAyMDgwMDkwNDI0REU0N0MKKzoxMDMxQjAwMDNDMEMwODAwOTU4QzREREUwMTQ1MjgyMTMwNEIwMDNGMkEKKzoxMDMxQzAwMDMwQTIwMDdGMDM0MjQwMjEzOTY5MDAzMjNDMDIwMDBBRUMKKzoxMDMxRDAwMDM5NjMwMDNGMkM2MzAwMDEwMTAyNDAyMTJEMjkwMDAxQzkKKzoxMDMxRTAwMDI0MDJGRjgwMDBBMjI4MjQwMTIzNDgyNUFGOEEwMDM0NEUKKzoxMDMxRjAwMDAwODAxODIxQUY0NTAwMjQwMDAwMzAyMTAwODAyODIxRTQKKzoxMDMyMDAwMDI0MDcwMDAxQUY4ODAwMjgzQzA0MDgwMDI0ODQ0REQ4MUUKKzoxMDMyMTAwMEFGOEMwMDI0MTUyMDAwMDdBMzgwMDAyRDI0MDIwMDIwN0QKKzoxMDMyMjAwMDU1NjIwMDBGMDA2MDIwMjEzNDAyRkZGRjU1ODIwMDBDMjAKKzoxMDMyMzAwMDAwNjAyMDIxMjQwMjAwMjAxNTYyMDAwNTAwMDAwMDAwMkIKKzoxMDMyNDAwMDhDNjMwMDE0MjQwMkZGRkYxMDYyMDAwNzAwMDAwMDAwREUKKzoxMDMyNTAwMDBFMDAwOTIxMDAwMDAwMDAwQTAwMEM2ODAwMDAwMDAwQjgKKzoxMDMyNjAwMDBFMDAwOThDMDE2MDI4MjEwRTAwMEMwMDAwMDAwMDAwRjcKKzoxMDMyNzAwMDhGQkYwMDEwMjQwMjBDODAyN0JEMDAxODAzRTAwMDA4NTcKKzoxMDMyODAwMEFGNDIwMDI0M0MwMjA4MDA4QzQyMDBFMDI3QkRGRkEwQjIKKzoxMDMyOTAwMEFGQjEwMDNDMDA4MjEwMjEyNDExRkY4MEFGQkUwMDU4NjYKKzoxMDMyQTAwMEFGQjcwMDU0QUZCMjAwNDBBRkIwMDAzOEFGQkYwMDVDNjIKKzoxMDMyQjAwMEFGQjYwMDUwQUZCNTAwNENBRkI0MDA0OEFGQjMwMDQ0NTgKKzoxMDMyQzAwMDAwNTExMDI0OEY0ODAwMjQ4RjQ5MDAyODhGNDcwMDI4ODAKKzoxMDMyRDAwMEFGNDIwMDI0M0MwMjA4MDA4QzQyMDBFMDAwODA5MDIxQjQKKzoxMDMyRTAwMDI0MDYwMDA2MDA4MjEwMjEzMDQyMDA3RjAzNDIxODIxOEMKKzoxMDMyRjAwMDNDMDIwMDBBMDA2MjgwMjEzQzAyMDAxRjM0NDJGRjgwMzEKKzoxMDMzMDAwMDAwRTIzODI0MjdBNDAwMTAyNjA1MDBGMDAxMjJGMDI0NTIKKzoxMDMzMTAwMDAxMDJCODI0MEUwMDA1QjVBRkE3MDAzMDhGQTIwMDE4MzcKKzoxMDMzMjAwMEFFMDIwMEM0OEZBMjAwMUNBRTAyMDBDODhGQTIwMDI0MEYKKzoxMDMzMzAwMEFFMDIwMENDOTNBNDAwMTA5MjAzMDBEMTI0MDJGRjgwQkYKKzoxMDMzNDAwMDAwODIxMDI0MDA0MzEwMjUzMDQ5MDBGRjMwODMwMDdGQTUKKzoxMDMzNTAwMDMxMjIwMDdGMDA2MjEwMkExMDQwMDAwNDAwMDMxMEMwRDgKKzoxMDMzNjAwMDAxMzExMDI2MzA0OTAwRkYwMDAzMTBDMDAwMDMxOTQwNEUKKzoxMDMzNzAwMDAwNjIxODIxM0MwMjA4MDA4QzQyMDBEQzkyMDQwMEQyNUEKKzoxMDMzODAwMDAyNDIxMDIxMDA0MzEwMjEwMDUxMTAyNEFGNDIwMDI4QjYKKzoxMDMzOTAwMDkzQTMwMDEwMzA2MzAwN0YwMDAzMTBDMDAwMDMxOTQwQTYKKzoxMDMzQTAwMDAwNjIxODIxM0MwMjA4MDA4QzQyMDBEQzAyNDIxMDIxMUQKKzoxMDMzQjAwMDAwNDMxMDIxMzA0MjAwN0YwMzQyMTgyMTNDMDIwMDBDRTAKKzoxMDMzQzAwMDAwNjI0MDIxOEZBMzAwMTQyNDAyRkZGRjEwNjIwMDMwMkUKKzoxMDMzRDAwMDMwOTUwMEZGOTNBMjAwMTE5NTAzMDAxNDMwNDQwMEZGQzQKKzoxMDMzRTAwMDMwNjNGRkZGMDA2NDE4MkIxMDYwMDAwRDAwMDAwMDAwMjgKKzoxMDMzRjAwMDk1MDQwMDE0OEQwNzAwMUM4RDA2MDAxODMwODRGRkZGMTMKKzoxMDM0MDAwMDAwNDQyMDIzMDAwNDIxMDAwMDAwMTAyMTAwRTQzODIxQTIKKzoxMDM0MTAwMDAwRTQyMDJCMDBDMjMwMjEwQTAwMENFMjAwQzQzMDIxNUQKKzoxMDM0MjAwMDk1MDQwMDE0OEQwNzAwMUM4RDA2MDAxODMwODRGRkZGRTIKKzoxMDM0MzAwMDAwODIyMDIzMDAwNDIxMDAwMDAwMTAyMTAwODAxODIxQjgKKzoxMDM0NDAwMDAwQzIzMDIzMDBFNDIwMkIwMEM0MzAyMzAwRTMzODIzRTMKKzoxMDM0NTAwMEFEMDcwMDFDQUQwNjAwMTg5M0EyMDAxMUE1MDIwMDE0RDAKKzoxMDM0NjAwMDk3QTIwMDEyQTUwMjAwMTY4RkEyMDAxNEFEMDIwMDEwNTAKKzoxMDM0NzAwMDhGQTIwMDE0QUQwMjAwMEM5M0EyMDAxMUE1MDIwMDIwM0YKKzoxMDM0ODAwMDk3QTIwMDEyQTUwMjAwMjI4RkEyMDAxNEFEMDIwMDI0MTAKKzoxMDM0OTAwMDI0MDZGRjgwMDI0NjEwMjQzMjU2MDA3RkFGNDIwMDI0RUIKKzoxMDM0QTAwMDAzNTYxODIxM0MwMjAwMEEwMDYyODAyMThFMDIwMDRDNjMKKzoxMDM0QjAwMDhGQTIwMDIwMzEyNDAwN0YwMDA0MjhDMEFFMDIwMDUwRkIKKzoxMDM0QzAwMDhGQTIwMDIwMDAwNDIxNDAwMDg1MjgyMUFFMDIwMDcwNTgKKzoxMDM0RDAwMDkzQTIwMDEwMDEyMDg4MjFBMjAyMDA4MzkzQTIwMDEwNzEKKzoxMDM0RTAwMEEyMDIwMDc5OTIwMjAwODUzMDQyMDAzRkEyMDIwMDg1Q0MKKzoxMDM0RjAwMDNDMDIwODAwOEM0MjAwREMwMjQyMTAyMTAwNDUxMDIxRjEKKzoxMDM1MDAwMDAwNDYxMDI0QUY0MjAwMkMzQzAyMDgwMDhDNDIwMEU0MkMKKzoxMDM1MTAwMDNDMDMwODAwOEM2MzAwREMwMjQyMTAyMTAwNDQxMDIxQUYKKzoxMDM1MjAwMDAwNDYxMDI0QUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0MTAKKzoxMDM1MzAwMDAyNDMxODIxMDA2NTE4MjEwMjQyMTAyMTAwNDQxMDIxODUKKzoxMDM1NDAwMDMwNDIwMDdGMzA2MzAwN0Y5M0E1MDAxMDAzNDIyMDIxQUEKKzoxMDM1NTAwMDAzNDMxODIxM0MwMjAwMEUwMDYyNDAyMTNDMDIwMDBDOTMKKzoxMDM1NjAwMDEwQjEwMDhDMDA4MjQ4MjEzMjMzMDA3RjE2NjAwMDE5QjAKKzoxMDM1NzAwMDI0MDRGRjgwM0MwMjA4MDA4QzQyMDBEQzAyNDIxMDIxM0YKKzoxMDM1ODAwMDAwNDQxMDI0QUY0MjAwMkMzQzAyMDgwMDhDNDIwMEU0QUUKKzoxMDM1OTAwMDNDMDMwODAwOEM2MzAwREMwMjQyMTAyMTAwNDQxMDI0MkMKKzoxMDM1QTAwMEFGNDIwMDI4M0MwMjA4MDA4QzQyMDBFNDAyNDMxODIxOEMKKzoxMDM1QjAwMDMwNjMwMDdGMDI0MjEwMjEzMDQyMDA3RjAzNDIyMDIxMEQKKzoxMDM1QzAwMDAzNDMxODIxM0MwMjAwMEUwMDYyNDAyMTNDMDIwMDBDMjMKKzoxMDM1RDAwMDAwODI0ODIxOTEyNDAwMEQyNDE0RkY4MDAwMDAxMDIxNTYKKzoxMDM1RTAwMDAwOTQyMDI1QTEyNDAwMEQ5NTA0MDAwMjk1MDUwMDE0RTcKKzoxMDM1RjAwMDhEMDcwMDFDMzA4NEZGRkYzMEE1RkZGRjhEMDYwMDE4RUIKKzoxMDM2MDAwMDAwODUyMDIzMDAwNDIxMDAwMEU0MzgyMTAwQzIzMDIxN0QKKzoxMDM2MTAwMDAwRTQyMDJCMDBDNDMwMjFBRDA3MDAxQ0FEMDYwMDE4Q0IKKzoxMDM2MjAwMDk1MDIwMDAyQTUwMjAwMTRBNTAwMDAxNjhEMDIwMDA4RjQKKzoxMDM2MzAwMEFEMDIwMDEwOEQwMjAwMDhBRDAyMDAwQzk1MDIwMDAyRTAKKzoxMDM2NDAwMEE1MDIwMDIwQTUwMDAwMjI4RDAyMDAwOEFEMDIwMDI0ODIKKzoxMDM2NTAwMDkxMjIwMDBEMzA0MjAwNDAxMDQwMDA0MjI2MjIwMDAxMUQKKzoxMDM2NjAwMDNDMDIwODAwOEM0MjAwRTBBM0IzMDAyODNDMTAwMDBBOTIKKzoxMDM2NzAwMDAyNDIxMDIxMDA1NDEwMjRBRjQyMDAyNDNDMDIwODAwRjIKKzoxMDM2ODAwMDhDNDIwMEUwQTM4MDAwMkMyN0E0MDAyQzAyNDIxMDIxRDEKKzoxMDM2OTAwMDMwNDIwMDdGMDM0MjE4MjEwMDcwMTgyMThDNjIwMEQ4NEMKKzoxMDM2QTAwMDhEMjYwMDA0MjdBNTAwMjhBRkE5MDAyQzAwNDYxMDIxNzQKKzoxMDM2QjAwMEFDNjIwMEQ4MEUwMDBBNzlBRjgzMDAyODkzQTMwMDI4REIKKzoxMDM2QzAwMDhGODIwMDI4MEUwMDA2QkVBMDQzMDBEMTBFMDAwQzAwMjEKKzoxMDM2RDAwMDAwMDAwMDAwMDI1NDEwMjRBRjQyMDAyNDNDMDIwODAwMDUKKzoxMDM2RTAwMDhDNDIwMERDMDAxMzI5NDAwMDEzMjBDMDAwQTQyMDIxREMKKzoxMDM2RjAwMDAyNDIxMDIxMDA0NDEwMjEwMDU0MTAyNEFGNDIwMDJDM0IKKzoxMDM3MDAwMDNDMDIwODAwOEM0MjAwRTQzQzAzMDgwMDhDNjMwMERDQUYKKzoxMDM3MTAwMDAzNTYzMDIxMDI0MjEwMjEwMDQ1MTAyMTAwNTQxMDI0OEMKKzoxMDM3MjAwMEFGNDIwMDI4M0MwMjA4MDA4QzQyMDBFNDAyNDMxODIxMEEKKzoxMDM3MzAwMDAwNjQxODIxMDI0MjEwMjEwMDQ1MTAyMTMwNDIwMDdGMTAKKzoxMDM3NDAwMDMwNjMwMDdGMDM0MjIwMjEwMzQzMTgyMTNDMDIwMDBFMTYKKzoxMDM3NTAwMDAwNjI0MDIxM0MwMjAwMEMwMEQwODAyMTAwODI0ODIxMDAKKzoxMDM3NjAwMDI2MjIwMDAxMzA0MzAwN0YxNDc1MDAwNTMwNDQwMEZGMUQKKzoxMDM3NzAwMDI0MDNGRjgwMDIyMzEwMjQwMDQzMTAyNjMwNDQwMEZGNUUKKzoxMDM3ODAwMDkzQTIwMDEwMDA4MDg4MjEyNTA4MDAyODE0NDRGRjc2QTkKKzoxMDM3OTAwMDI1MjkwMDIwOTNBNDAwMTA4RkEzMDAxNDI0MDJGRkZGMEEKKzoxMDM3QTAwMDEwNjIwMDBBMzA4OTAwRkYyNDgyMDAwMTI0ODMwMDAxOTYKKzoxMDM3QjAwMDMwNDIwMDdGMTQ1NTAwMDUzMDY5MDBGRjI0MDNGRjgwNkMKKzoxMDM3QzAwMDAwODMxMDI0MDA0MzEwMjYzMDQ5MDBGRjkyMDIwMDc4NDUKKzoxMDM3RDAwMDMwNTMwMEZGMTEzMzAwMzIwMTIwODgyMTNDMDIwODAwRTEKKzoxMDM3RTAwMDhDNDIwMERDMzIyNTAwN0YwMDA1MjBDMDAwMDUyOTQwMDYKKzoxMDM3RjAwMDAwQTQyMDIxMDI0MjEwMjEyNDA2RkY4MDAwNDQxMDIxNTEKKzoxMDM4MDAwMDAwNDYxMDI0QUY0MjAwMkMzQzAzMDgwMDhDNjMwMERDMEYKKzoxMDM4MTAwMDNDMDIwODAwOEM0MjAwRTQwMjQzMTgyMTAyNDIxMDIxQkQKKzoxMDM4MjAwMDAwNDUxMDIxMDA2NDE4MjEwMDQ2MTAyNDMwNjMwMDdGRjkKKzoxMDM4MzAwMEFGNDIwMDI4MDM0MzE4MjEzQzAyMDAwRTAwNjI0MDIxRTEKKzoxMDM4NDAwMDNDMDIwODAwOEM0MjAwRTQ4RDA2MDAwQzAxMDAyMDIxOUYKKzoxMDM4NTAwMDAyNDIxMDIxMDA0NTEwMjEzMDQyMDA3RjAzNDIxODIxMEUKKzoxMDM4NjAwMDNDMDIwMDBDMDA2MjQ4MjExMEMwMDAwRDAxMjAyODIxRkMKKzoxMDM4NzAwMDBFMDAwNkUyMDAwMDAwMDAyNDAyRkY4MDAyMjIxODI0NEQKKzoxMDM4ODAwMDI2MjQwMDAxMDA2MjI4MjYzMDgyMDA3RjE0NTUwMDAyQTEKKzoxMDM4OTAwMDMwODMwMEZGMzBBMzAwRkYxNDczRkZEMDAwNjA4ODIxNDUKKzoxMDM4QTAwMDhFMDMwMDc0M0MwMjdGRkYzNDQyRkZGRjAwNjIxODI0NDUKKzoxMDM4QjAwMEFFMDMwMDc0MEUwMDA3MDMwMjQwMjAyMUFGNTcwMDI0MUUKKzoxMDM4QzAwMDhGQTIwMDMwQUY1RTAwMjg4RkJGMDA1QzhGQkUwMDU4MTMKKzoxMDM4RDAwMDhGQjcwMDU0OEZCNjAwNTA4RkI1MDA0QzhGQjQwMDQ4OUUKKzoxMDM4RTAwMDhGQjMwMDQ0OEZCMjAwNDA4RkIxMDAzQzhGQjAwMDM4REUKKzoxMDM4RjAwMDI3QkQwMDYwMDNFMDAwMDhBRjQyMDAyQzI3QkRGRkQ4QzEKKzoxMDM5MDAwMEFGQjEwMDFDQUZCRjAwMjBBRkIwMDAxODI3NTEwMTg4MzUKKzoxMDM5MTAwMDkyMjIwMDAzMjQwOEZGODAzQzAzMDAwQTMwNDcwMDdGMDYKKzoxMDM5MjAwMEEzQTcwMDEwOEY0NjAxODAzQzAyMDgwMDhDNDIwMEUwRjMKKzoxMDM5MzAwMEFGODYwMDM0MDBDMjI4MjEwMEE4MTAyNEFGNDIwMDI0MjIKKzoxMDM5NDAwMDkyMjQwMDAwMzBBMjAwN0YwMzQyMTAyMTAwNDMxMDIxODYKKzoxMDM5NTAwMEFGODIwMDI4MzA4NDAwN0YyNDAyMDAwMjE0ODIwMDI1RjgKKzoxMDM5NjAwMDAwMDcxOTQwM0MwMjA4MDA4QzQyMDBFNDAwQzIxMDIxMEMKKzoxMDM5NzAwMDAwNDMyODIxMzBBMjAwN0YwMzQyMTgyMTAwQTgxMDI0MTAKKzoxMDM5ODAwMEFGNDIwMDI4M0MwMjAwMEMwMDYyMTgyMTkwNjIwMDBEM0EKKzoxMDM5OTAwMEFGQTMwMDE0MDA0ODEwMjVBMDYyMDAwRDhGQTMwMDE0RUYKKzoxMDM5QTAwMDkwNjIwMDBEMzA0MjAwNDA1MDQwMDA2QThGQkYwMDIwRkUKKzoxMDM5QjAwMDhGODYwMDI4QTM4MDAwMkMyN0E0MDAxNDhDQzIwMEQ4NzYKKzoxMDM5QzAwMDhDNjMwMDA0MjdBNTAwMTAwMDQzMTAyMTBFMDAwQTc5MjMKKzoxMDM5RDAwMEFDQzIwMEQ4OTNBMzAwMTA4RjgyMDAyODBFMDAwNkJFNTAKKzoxMDM5RTAwMEEwNDMwMEQxMEUwMDBDMDAwMDAwMDAwMDBBMDAwRUEzNEUKKzoxMDM5RjAwMDhGQkYwMDIwMEUwMDA2QzcwMEMwMjAyMTBFMDAwNkQ1OTQKKzoxMDNBMDAwMDAwMDAwMDAwM0MwMjAwMDgwMzQyODAyMTkyMjMwMDAxRDQKKzoxMDNBMTAwMDkyMDIwMDdCMTQ0MzAwNEY4RkJGMDAyMDkyMjIwMDAwQ0YKKzoxMDNBMjAwMDMwNDQwMDdGMjQwMjAwMDQxMDgyMDAxNzI4ODIwMDA1MjEKKzoxMDNBMzAwMDEwNDAwMDA2MjQwMjAwMDUyNDAyMDAwMzEwODIwMDA3NDMKKzoxMDNBNDAwMDhGQjEwMDFDMEEwMDBFQTQwMDAwMDAwMDEwODIwMDEyQkEKKzoxMDNBNTAwMDhGQkYwMDIwMEEwMDBFQTQ4RkIxMDAxQzkyMDUwMDgzQzYKKzoxMDNBNjAwMDkyMDYwMDc4OEUwNzAwNzQ4Rjg0MDAzNDMwQTUwMEZGMjIKKzoxMDNBNzAwMDAwMDczRTAyMzBDNjAwRkYwRTAwMDcwQjMwRTcwMDdGNTQKKzoxMDNBODAwMDBBMDAwRUEzOEZCRjAwMjAwRTAwMEM2RjhGODQwMDM0M0QKKzoxMDNBOTAwMDBBMDAwRUEzOEZCRjAwMjAyNDAyMEM4MEFGNDIwMDI0MzYKKzoxMDNBQTAwMDkyMDIwMDNFMzA0MjAwNDAxMDQwMDAyMDAwMDAwMDAwMjIKKzoxMDNBQjAwMDkyMDIwMDNFMDAwMjE2MDAwMDAyMTYwMzA0NDEwMDA2QjYKKzoxMDNBQzAwMDAwMDAwMDAwOEY4NDAwMzQwRTAwMDYzODI0MDUwMDkzQTcKKzoxMDNBRDAwMDBBMDAwRUEzOEZCRjAwMjA5MjAyMDAzRjI0MDMwMDE4QUIKKzoxMDNBRTAwMDMwNDIwMEZGMTQ0MzAwMEM4Rjg0MDAzNDI0MDUwMDM5NTkKKzoxMDNBRjAwMDBFMDAwNUQwMDAwMDMwMjEwRTAwMDMwMjhGODQwMDM0MzgKKzoxMDNCMDAwMDI0MDIwMDEyQTIwMjAwM0YwRTAwMDMwQjhGODQwMDM0MzcKKzoxMDNCMTAwMDBBMDAwRUEzOEZCRjAwMjAyNDA1MDAzNjBFMDAwNUQwM0EKKzoxMDNCMjAwMDAwMDAzMDIxMEEwMDBFQTM4RkJGMDAyMDBFMDAwMzAyMDgKKzoxMDNCMzAwMDhGODQwMDM0OTIwMjAwMDUzNDQyMDAyMEEyMDIwMDA1NjYKKzoxMDNCNDAwMDBFMDAwMzBCOEY4NDAwMzQwRTAwMTA1ODhGODQwMDM0NTUKKzoxMDNCNTAwMDhGQkYwMDIwOEZCMTAwMUM4RkIwMDAxODI0MDIwQzgwOTIKKzoxMDNCNjAwMDI3QkQwMDI4MDNFMDAwMDhBRjQyMDAyNDI3QkRGRkU4N0UKKzoxMDNCNzAwMEFGQjAwMDEwQUZCRjAwMTQyNzQzMDEwMDk0NjIwMDA4RUIKKzoxMDNCODAwMDAwMDIxNDAwMDAwMjE0MDMwNDQxMDAwMjAwMDA4MDIxMUUKKzoxMDNCOTAwMDI0MTAwMDAxOTQ2MjAwMDgzMDQyMDA4MDEwNDAwMDFBOTYKKzoxMDNCQTAwMDAyMDAxMDIxOTQ2MjAwMDgzMDQyMjAwMDEwNDAwMDE2RUMKKzoxMDNCQjAwMDAyMDAxMDIxOEM2MzAwMTgzQzAyMUMyRDM0NDIxOUVEQzgKKzoxMDNCQzAwMDI0MDYwMDA2MTA2MjAwMEYzQzA3NjAyMTNDMDIwODAwM0EKKzoxMDNCRDAwMDhDNDIwMEQ0MTA0MDAwMDc4RjgyMDAyODhGODMwMDI4NzkKKzoxMDNCRTAwMDkwNjIwMDYyMzA0MjAwMEYzNDQyMDA0MEEwNjIwMDYyRTYKKzoxMDNCRjAwMDhGODIwMDI4OEY4NDAwMzQ5NDQ1MDBENDBFMDAwQjg5RjYKKzoxMDNDMDAwMDMwQTVGRkZGMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwRkQKKzoxMDNDMTAwMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZFMEFGQjEwMDE0ODYKKzoxMDNDMjAwMEFGQjAwMDEwQTM4MDAwMkNBRkJGMDAxODhGNDUwMTAwN0IKKzoxMDNDMzAwMDNDMDMwODAwOEM2MzAwRTAyNDAyRkY4MEFGODUwMDM0NjEKKzoxMDNDNDAwMDAwQTMxODIxMzA2NDAwN0YwMzQ0MjAyMTAwNjIxODI0NUYKKzoxMDNDNTAwMDNDMDIwMDBBMDA4MjIwMjFBRjQzMDAyNDI3NTAwMTAwQ0IKKzoxMDNDNjAwMDhFMDIwMDE0OEM4MzAwRENBRjg0MDAyODAwNDMxMDIzRjQKKzoxMDNDNzAwMDE4NDAwMDA0MDAwMDg4MjE4RTAyMDAxNDBFMDAwQjFDNjYKKzoxMDNDODAwMEFDODIwMERDOTIwMjAwMEIyNDAzMDAwMjMwNDIwMEZGRjEKKzoxMDNDOTAwMDE0NDMwMDJGMDAwMDAwMDA5NjAyMDAwODMwNDMwMEZGOEMKKzoxMDNDQTAwMDI0MDIwMDgyMTQ2MjAwMDUyNDAyMDA4NDBFMDAwOUQ2NUEKKzoxMDNDQjAwMDAwMDAwMDAwMEEwMDBGMkYwMDAwMDAwMDE0NjIwMDA5M0QKKzoxMDNDQzAwMDI0MDIwMDgxOEY4MjAwMjg4Rjg0MDAzNDNDMDc2MDIxMDkKKzoxMDNDRDAwMDk0NDUwMEQ0OTIwNjAwMDUzMEE1RkZGRjBBMDAwRjFFOTAKKzoxMDNDRTAwMDMwQzYwMEZGMTQ2MjAwMjcwMDAwMDAwMDkyMDIwMDBBQTQKKzoxMDNDRjAwMDMwNDMwMEZGMzA2MjAwMjAxMDQwMDAwNDMwNjIwMDQwN0EKKzoxMDNEMDAwMDhGODQwMDM0MEEwMDBGMUEyNDA2MDA0MDEwNDAwMDA0N0IKKzoxMDNEMTAwMDAwMDMxNjAwOEY4NDAwMzQwQTAwMEYxQTI0MDYwMDQxQTUKKzoxMDNEMjAwMDAwMDIxNjAzMDQ0MTAwMTc4Rjg0MDAzNDI0MDYwMDQyNjkKKzoxMDNEMzAwMDhGODIwMDI4M0MwNzYwMTk5NDQ1MDBENDMwQTVGRkZGMEUKKzoxMDNENDAwMDBFMDAwQjg5MDAwMDAwMDAwQTAwMEYyRjAwMDAwMDAwODkKKzoxMDNENTAwMDkyMDIwMDBCMjQwMzAwMTYzMDQyMDBGRjEwNDMwMDA2QkQKKzoxMDNENjAwMDAwMDAwMDAwOTIwMjAwMEIyNDAzMDAxNzMwNDIwMEZGMDUKKzoxMDNENzAwMDE0NDMwMDA0MDAwMDAwMDAwRTAwMEVBOTAwMDAwMDAwMjMKKzoxMDNEODAwMDAwNDA4ODIxMEUwMDBDMDAwMDAwMDAwMDkyMDIwMDBBOTIKKzoxMDNEOTAwMDMwNDIwMDA4MTA0MDAwMDYyNDAyMEM4MDhGODUwMDI4NjUKKzoxMDNEQTAwMDNDMDQwMDA4MEUwMDEyODYwMzQ0MjAyMTI0MDIwQzgwRUIKKzoxMDNEQjAwMEFGNDIwMDI0OEZCRjAwMTgwMjIwMTAyMThGQjAwMDEwRTYKKzoxMDNEQzAwMDhGQjEwMDE0MDNFMDAwMDgyN0JEMDAyMDI3QkRGRkU4RTUKKzoxMDNERDAwMEFGQkYwMDE0QUZCMDAwMTA4RjUwMDAyNDNDMDMwODAwQTgKKzoxMDNERTAwMDhDNjMwMEUwOEY0NTAxMDAyNDAyRkY4MDAwQTMxODIxQUUKKzoxMDNERjAwMDMwNjQwMDdGMDM0NDIwMjEwMDYyMTgyNDNDMDIwMDBBNDIKKzoxMDNFMDAwMDAwODIyMDIxQUY4NTAwMzRBRjQzMDAyNDkwODIwMDYyRkQKKzoxMDNFMTAwMEFGODQwMDI4MzA0MjAwMEYzNDQyMDA1MEEwODIwMDYyN0MKKzoxMDNFMjAwMDNDMDIwMDFGMzQ0MkZGODAwRTAwMDZCRTAyMDI4MDI0QzYKKzoxMDNFMzAwMEFGNTAwMDI0OEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4QzMKKzoxMDNFNDAwMDI3QkQwMDE4M0MwMjA4MDA4QzQyMDAyMDEwNDAwMDFERDUKKzoxMDNFNTAwMDI3NDUwMTAwOTBBMzAwMDkzQzAyMDAwODAzNDIyMDIxRUQKKzoxMDNFNjAwMDI0MDIwMDE4NTQ2MjAwMDMzQzAyMDAwODBBMDAwRjcwOEMKKzoxMDNFNzAwMDI0MDIwMDA4MDM0MjIwMjEyNDAyMDAxNjE0NjIwMDA1RDcKKzoxMDNFODAwMDI0MDIwMDE3MjQwMjAwMTJBMDgyMDAzRjBBMDAwRjdBQzkKKzoxMDNFOTAwMDk0QTcwMDA4NTQ2MjAwMDY5NEE3MDAwODkzNjIwMDA1RTYKKzoxMDNFQTAwMDI0MDNGRkZFMDA0MzEwMjRBMzYyMDAwNTk0QTcwMDA4MkEKKzoxMDNFQjAwMDkwQTYwMDFCOENBNDAwMDA5NEE1MDAwNjBBMDAwQjY0QzkKKzoxMDNFQzAwMDAwMDczQzAwMDNFMDAwMDgwMDAwMDAwMDI3NDQwMTAwNTgKKzoxMDNFRDAwMDk0ODIwMDA4MzA0NTAwRkYzOEEzMDA4MjM4QTIwMDg0OTUKKzoxMDNFRTAwMDJDNjMwMDAxMkM0MjAwMDEwMDYyMTgyNTEwNjAwMDA2QkUKKzoxMDNFRjAwMDI0MDIwMDgzOTM4MjAwMkQxMDQwMDAwRDAwMDAwMDAwN0EKKzoxMDNGMDAwMDBBMDAwQzMzMDAwMDAwMDAxNEEyMDAwNTI0QTJGRjgwNjgKKzoxMDNGMTAwMDhGNDMwMTA0M0MwMjYwMjAwM0UwMDAwOEFDNDMwMDE0MUUKKzoxMDNGMjAwMDMwNDIwMEZGMkM0MjAwMDIxMDQwMDAwMzI0MDIwMDIyMTUKKzoxMDNGMzAwMDBBMDAwRUQ0MDAwMDAwMDAxNEEyMDAwMzAwMDAwMDAwREMKKzoxMDNGNDAwMDBBMDAwRjQxMDAwMDAwMDAwQTAwMEY1RjAwMDAwMDAwOUYKKzoxMDNGNTAwMDkzNjMwMDdFOTM2MjAwN0ExNDQzMDAwOTAwMDAyMDIxREQKKzoxMDNGNjAwMDkzNjIwMDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDA0MTkKKzoxMDNGNzAwMDI0MDQwMDAxOTM2MjAwN0UyNDQyMDAwMUEzNjIwMDdFQkIKKzoxMDNGODAwMDAzRTAwMDA4MDA4MDEwMjE4RjQyMDFGODA0NDBGRkZFOEEKKzoxMDNGOTAwMDI0MDIwMDAyQUY0NDAxQzBBMzQyMDFDNDNDMDIxMDAwNEQKKzoxMDNGQTAwMDAzRTAwMDA4QUY0MjAxRjgyN0JERkZFOEFGQkYwMDEwRjMKKzoxMDNGQjAwMDkzNjIwMDNGMjQwMzAwMEEzMDQyMDBGRjE0NDMwMDQ2OEUKKzoxMDNGQzAwMDAwMDAwMDAwOEY2MzAwNTQ4RjYyMDA0QzEwNjIwMDdEN0YKKzoxMDNGRDAwMDAzNjAzMDIxOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGNTAKKzoxMDNGRTAwMDE0NDMwMDJGMDAwMDAwMDA4RjQ0MDE0MDNDMDIwODAwRjEKKzoxMDNGRjAwMDhDNDIwMEUwMjQwM0ZGODAwMDgyMTAyMTAwNDMxMDI0NDMKKzoxMDQwMDAwMEFGNDIwMDI0M0MwMjA4MDA4QzQyMDBFMDhGNjUwMDU0NUYKKzoxMDQwMTAwMDNDMDMwMDBBMDA4MjIwMjEzMDg0MDA3RjAzNDQxMDIxRTkKKzoxMDQwMjAwMDAwNDMxMDIxQUM0NTAxMDg5NzYyMDAzQzhGNjMwMDRDQUYKKzoxMDQwMzAwMDMwNDJGRkZGMDAwMjEwNDAwMDYyMTgyMUFGNjMwMDVDQjUKKzoxMDQwNDAwMDhGNjMwMDU0OEY2NDAwNEM5NzYyMDAzQzAwNjQxODIzMTcKKzoxMDQwNTAwMDMwNDJGRkZGMDAwMzE4NDMwMDAyMTA0MDAwNDMxMDJBQzMKKzoxMDQwNjAwMDEwNDAwMDA2MDAwMDAwMDA4RjYyMDA1NDhGNjMwMDRDNzcKKzoxMDQwNzAwMDAwNDMxMDIzMEEwMDBGRjAwMDAyMTA0Mzk3NjIwMDNDMzcKKzoxMDQwODAwMDMwNDJGRkZGMDAwMjEwNDBBQ0MyMDA2NDI0MDIwMDAxNzUKKzoxMDQwOTAwMEEwQzAwMDdDQTBDMjAwODQyNDAyMEM4MEFGNDIwMDI0OTcKKzoxMDQwQTAwMDBFMDAwRkEyOEY0NDAxNDAxMDQwMDA0NzhGQkYwMDEwNDgKKzoxMDQwQjAwMDhGNDMwMTQwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyQkEKKzoxMDQwQzAwMEFGNDMwMUMwQTM0MjAxQzQzQzAyMTAwMEFGNDIwMUY4NUIKKzoxMDQwRDAwMDBBMDAxMDQwOEZCRjAwMTA5MzYyMDAzRjI0MDMwMDEwQkQKKzoxMDQwRTAwMDMwNDIwMEZGMTQ0MzAwMDQwMDAwMDAwMDhGNDQwMTQwRjAKKzoxMDQwRjAwMDBBMDAxMDJDMDAwMDI4MjE5MzYyMDAzRjI0MDMwMDE2QzAKKzoxMDQxMDAwMDMwNDIwMEZGMTQ0MzAwMDQyNDAyMDAxNEEzNjIwMDNGNjUKKzoxMDQxMTAwMDBBMDAxMDNBMDAwMDAwMDA4RjYyMDA0QzhGNjMwMDUwQ0MKKzoxMDQxMjAwMDAwNDMxMDIzMDQ0MTAwMjg4RkJGMDAxMDkzNjIwMDgxRDgKKzoxMDQxMzAwMDI0NDIwMDAxQTM2MjAwODE5MzYyMDA4MTJDNDIwMDA0QUEKKzoxMDQxNDAwMDE0NDAwMDEwMDAwMDAwMDA5MzYyMDAzRjI0MDMwMDA0QUMKKzoxMDQxNTAwMDMwNDIwMEZGMTQ0MzAwMDYwMDAwMDAwMDhGNDQwMTQwN0QKKzoxMDQxNjAwMDhGQkYwMDEwMjQwNTAwOTMwQTAwMDYzODI3QkQwMDE4RjEKKzoxMDQxNzAwMDhGNDQwMTQwMjQwNTAwOTM4RkJGMDAxMDBBMDAwNkE3NUEKKzoxMDQxODAwMDI3QkQwMDE4OEY0NDAxNDAwRTAwMDMwMjAwMDAwMDAwMEMKKzoxMDQxOTAwMDhGNjIwMDU0MjQ0MkZGRkZBRjYyMDA1NDhGNjIwMDUwRDAKKzoxMDQxQTAwMDI0NDJGRkZGQUY2MjAwNTAwRTAwMDMwQjhGNDQwMTQwMUEKKzoxMDQxQjAwMDhGNDQwMTQwOEZCRjAwMTAyNDA1MDAwNDBBMDAwMzEwNDMKKzoxMDQxQzAwMDI3QkQwMDE4OEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4QUUKKzoxMDQxRDAwMDhGNDIwMTg4OTM2MzAwN0UwMDAyMTQwMjMwNDQwMEZGODYKKzoxMDQxRTAwMDMwNjMwMEZGMTQ2NDAwMEQwMDAwMDAwMDkzNjIwMDgwNDMKKzoxMDQxRjAwMDMwNDIwMEZGMTA0NDAwMDkwMDAwMDAwMEEzNjQwMDgwNkEKKzoxMDQyMDAwMDkzNjIwMDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDA0NzYKKzoxMDQyMTAwMDAwMDAwMDAwMEEwMDA3NkY4RjQ0MDE4MEEzNjQwMDgwNDMKKzoxMDQyMjAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFOEFGQjAwMDEwNjkKKzoxMDQyMzAwMEFGQkYwMDE0OTM2MjAwMDUyNDAzMDAzMDMwNDIwMDMwMDkKKzoxMDQyNDAwMDE0NDMwMDg5MDA4MDgwMjEzQzAyMDgwMDhDNDIwMDIwMzkKKzoxMDQyNTAwMDEwNDAwMDgwMDIwMDIwMjEwRTAwMDUyQjAwMDAwMDAwMEQKKzoxMDQyNjAwMDhGODUwMDIwQUNCMDAwMDA5MzYyMDAzRTkzNjMwMDNGNTYKKzoxMDQyNzAwMDMwNDIwMEZGMDAwMjEyMDAzMDYzMDBGRjAwNDMxMDI1QUYKKzoxMDQyODAwMEFDQTIwMDA0OTM2MjAwODIwMDAyMTYwMDAwMDIxNjAzMzIKKzoxMDQyOTAwMDA0NDEwMDA1MDAwMDAwMDAzQzAzMDgwMDhDNjMwMDQ4NTYKKzoxMDQyQTAwMDBBMDAxMDdFMDAwMDAwMDA5MzYyMDAzRTMwNDIwMDQwOTEKKzoxMDQyQjAwMDE0NDAwMDAzMDAwMDE4MjE5MzYyMDA4MTMwNDMwMEZGODYKKzoxMDQyQzAwMDkzNjIwMDgyMDAwMzFFMDAzMDQyMDBGRjAwMDIxNDAwQ0YKKzoxMDQyRDAwMDAwNjIxODI1QUNBMzAwMDg4RjYyMDA0MEFDQTIwMDBDNUQKKzoxMDQyRTAwMDhGNjIwMDQ4QUNBMjAwMTA4RjYyMDA0Q0FDQTIwMDE0OTgKKzoxMDQyRjAwMDhGNjIwMDUwOEY2MzAwNEMwMDQzMTAyMzA0NDEwMDAzODEKKzoxMDQzMDAwMDAwMDAwMDAwMEEwMDEwOTI4RjYyMDA0QzhGNjIwMDUwODMKKzoxMDQzMTAwMEFDQTIwMDE4M0MwMjA4MDA5NDQyNERCRTNDMDNDMDBCMDYKKzoxMDQzMjAwMDAwMDAyMDIxMDA0MzEwMjUwRTAwMDU1MEFDQTIwMDFDMDcKKzoxMDQzMzAwMDhGNjIwMDU0OEY4NDAwMjBBQzgyMDAwMDhGNjIwMDU4OEUKKzoxMDQzNDAwMEFDODIwMDA0OEY2MjAwNUNBQzgyMDAwODhGNjIwMDYwNjcKKzoxMDQzNTAwMDhGNDMwMDc0MDA0MzEwMjFBQzgyMDAwQzhGNjIwMDY0MTQKKzoxMDQzNjAwMEFDODIwMDEwOTc2MzAwNjg5NzYyMDA2QTAwMDMxQzAwMkIKKzoxMDQzNzAwMDMwNDJGRkZGMDA2MjE4MjVBQzgzMDAxNDkzNjIwMDgyNzQKKzoxMDQzODAwMDI0MDMwMDgwMzA0MjAwRkYxNDQzMDAwMzAwMDAwMDAwQkIKKzoxMDQzOTAwMDBBMDAxMEM2QUM4MDAwMTg4RjYzMDAwQzI0MDIwMDAxRDQKKzoxMDQzQTAwMDEwNjIwMDBFMjQwMkZGRkY5MzYyMDAzRTMwNDIwMDQwODQKKzoxMDQzQjAwMDE0NDAwMDBBMjQwMkZGRkY4RjYzMDAwQzhGNDIwMDc0MzgKKzoxMDQzQzAwMDAwNjIxODIzM0MwMjA4MDAwMDYyMTAyNDE0NDAwMDAyMUUKKzoxMDQzRDAwMDAwMDAyODIxMDA2MDI4MjEwMDA1MTA0M0FDODIwMDE4NEQKKzoxMDQzRTAwMDNDMDIwODAwOTQ0MjREQkUzQzAzQzAwQzAwMDAyMDIxNUEKKzoxMDQzRjAwMDAwNDMxMDI1OEY4MzAwMjAwRTAwMDU1MEFDNjIwMDFDODYKKzoxMDQ0MDAwMDhGNjIwMDE4OEY4MzAwMjAzQzA1MDgwMDk0QTU0REJFRTQKKzoxMDQ0MTAwMDI0MDQwMDAxQUM2MjAwMDBBQzYwMDAwNDhGNjYwMDZDRjQKKzoxMDQ0MjAwMDNDMDI0MDBEMDBBMjI4MjVBQzY2MDAwODhGNjIwMERDMkIKKzoxMDQ0MzAwMEFDNjIwMDBDQUM2MDAwMTA5MzYyMDAwNTAwMDIxNjAwMzQKKzoxMDQ0NDAwMEFDNjIwMDE0QUM2MDAwMTgwRTAwMDU1MEFDNjUwMDFDOTYKKzoxMDQ0NTAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMEEzNjAwMDA1NjAKKzoxMDQ0NjAwMDBBMDAwNEI5MjdCRDAwMTg4RkJGMDAxNDhGQjAwMDEwRDgKKzoxMDQ0NzAwMDAzRTAwMDA4MjdCRDAwMTg5NzQyMDA3QzMwQzYwMEZGMEIKKzoxMDQ0ODAwMEEwODYwMDg0MzA0N0ZGRkYyNDAyMDAwNTE0QzIwMDBCMDEKKzoxMDQ0OTAwMDI0RTM0NjUwOTBBMjAxMTIyQzQyMDAwNzEwNDAwMDA3NkUKKzoxMDQ0QTAwMDI0RTMwQTAwOTBBMzAxMTIyNDAyMDAxNDAwNjIxMDA0MDUKKzoxMDQ0QjAwMDAwRTIxMDIxMEEwMDEwRkUzMDQ3RkZGRjMwNjdGRkZGQzcKKzoxMDQ0QzAwMDAzRTAwMDA4QTQ4NzAwMTRBQzg3MDA0QzhDQTIwMTA4MEMKKzoxMDQ0RDAwMDAwODA0MDIxMDBBMDQ4MjEwMEUyMTAyMzMwQzYwMEZGRTgKKzoxMDQ0RTAwMDE4NDAwMDAzOTNBQTAwMTMyNEUyRkZGQ0FDQTIwMTA4QzkKKzoxMDQ0RjAwMDMwQzIwMDAxMTA0MDAwMDgwMDAwMDAwMDhEMDIwMDUwOTIKKzoxMDQ1MDAwMDAwRTIxMDIzMDQ0MTAwMTMyNDA2MDAwNThEMDIwMDU0MkMKKzoxMDQ1MTAwMDEwRTIwMDEwMDAwMDAwMDA4RDAyMDA1NDE0RTIwMDFBQTYKKzoxMDQ1MjAwMDAwMDAwMDAwM0MwMjA4MDA4QzQyMDBEODMwNDIwMDIwMEQKKzoxMDQ1MzAwMDEwNDAwMDBBMjQwMjAwMDE5MTAzMDA3ODkxMDIwMDgzRDgKKzoxMDQ1NDAwMDE0NDMwMDA2MjQwMjAwMDEwMTAwMjAyMTAxMjAyODIxM0IKKzoxMDQ1NTAwMDI0MDYwMDA0MEEwMDEwRUMwMDAwMDAwMEExMDAwMDg0MDIKKzoxMDQ1NjAwMDExNDAwMDA5QTUwMjAwMTQ4RjQzMDEwMDhGNDIwMUY4OTkKKzoxMDQ1NzAwMDA0NDBGRkZFMjQwMjAwMDJBRjQzMDFDMEEzNDIwMUM0NzUKKzoxMDQ1ODAwMDNDMDIxMDAwQUY0MjAxRjgwM0UwMDAwODAwMDAwMDAwMDgKKzoxMDQ1OTAwMDI3QkRGRkU4OEZBOTAwMjhBRkJGMDAxMDAwODA0MDIxOTEKKzoxMDQ1QTAwMDAwRTkxODIzMTg2MDAwNzMzMEM2MDBGRkEwODAwMDdDNkIKKzoxMDQ1QjAwMEEwODAwMDgxOENBMjAxMDgwMEUyMTAyMzA0NDAwMDREN0QKKzoxMDQ1QzAwMDAwMDAwMDAwOEM4MjAwNTA5NDgzMDAzQzhDODQwMDY0QzYKKzoxMDQ1RDAwMDAwNDc0ODIzMzA2M0ZGRkYwMTIzMTgyMTAwODMyMDJCNkQKKzoxMDQ1RTAwMDEwODAwMDA0MDAwMDAwMDA4RDAyMDA2NDBBMDAxMTRGREEKKzoxMDQ1RjAwMDAwRTIxMDIxOTUwMjAwM0MzMDQyRkZGRjAxMjIxMDIxMTEKKzoxMDQ2MDAwMDAwRTIxMDIxQUQwMjAwNUM5NTAyMDAzQzhEMDMwMDVDQ0QKKzoxMDQ2MTAwMDMwNDJGRkZGMDAwMjEwNDAwMEUyMTAyMTAwNDMxMDJCNDcKKzoxMDQ2MjAwMDEwNDAwMDAzMDAwMDAwMDAwQTAwMTE1RThEMDIwMDVDRDMKKzoxMDQ2MzAwMDk1MDIwMDNDMzA0MkZGRkYwMDAyMTA0MDAwRTIxMDIxRDIKKzoxMDQ2NDAwMEFEMDIwMDVDQTEwMDAwODRBRDA3MDA0QzhDQTIwMTA4MDMKKzoxMDQ2NTAwMDAwRTIxMDIzMTg0MDAwMDIyNEUyRkZGQ0FDQTIwMTA4OTMKKzoxMDQ2NjAwMDMwQzIwMDAxMTA0MDAwMEEwMDAwMDAwMDhEMDIwMDUwMUUKKzoxMDQ2NzAwMDAwRTIxMDIzMDQ0MTAwMDQwMTAwMjAyMThEMDIwMDU0QjcKKzoxMDQ2ODAwMDE0RTIwMDAzMDAwMDAwMDAwQTAwMTE4MDI0MDYwMDA1NjcKKzoxMDQ2OTAwMDhEMDIwMDU0MTRFMjAwNDc4RkJGMDAxMDNDMDIwODAwNTYKKzoxMDQ2QTAwMDhDNDIwMEQ4MzA0MjAwMjAxMDQwMDAwQTI0MDIwMDAxNTEKKzoxMDQ2QjAwMDkxMDMwMDc4OTEwMjAwODMxNDQzMDAwNjI0MDIwMDAxNTQKKzoxMDQ2QzAwMDAxMDAyMDIxMjQwNjAwMDQ4RkJGMDAxMDBBMDAxMEVDMTYKKzoxMDQ2RDAwMDI3QkQwMDE4QTEwMDAwODRBNTAyMDAxNDhGNDMwMTAwMkIKKzoxMDQ2RTAwMDhGNDIwMUY4MDQ0MEZGRkUyNDAyMDAwMjBBMDAxMUE1RDcKKzoxMDQ2RjAwMDAwMDAwMDAwOEM4MjAwNUMwMDQ5MTAyMzAwNDMxMDJCNTYKKzoxMDQ3MDAwMDU0NDAwMDAxQUM4NzAwNUM5NTAyMDAzQzMwNDJGRkZGNDIKKzoxMDQ3MTAwMDAwNjIxMDJCMTQ0MDAwMDcyNDAyMDAwMjk1MDIwMDNDQTYKKzoxMDQ3MjAwMDhEMDMwMDVDMzA0MkZGRkYwMDYyMTgyMUFEMDMwMDVDODYKKzoxMDQ3MzAwMDI0MDIwMDAyQUQwNzAwNENBMTAyMDA4NDBFMDAwRkEyNkIKKzoxMDQ3NDAwMDhGNDQwMTAwMTA0MDAwMUI4RkJGMDAxMDhGNDMwMTAwRjkKKzoxMDQ3NTAwMDhGNDIwMUY4MDQ0MEZGRkUyNDAyMDAwMkFGNDMwMUMwNzMKKzoxMDQ3NjAwMEEzNDIwMUM0M0MwMjEwMDBBRjQyMDFGODBBMDAxMUJCOTEKKzoxMDQ3NzAwMDhGQkYwMDEwMzBDMjAwMTAxMDQwMDAwRThGQkYwMDEwMUQKKzoxMDQ3ODAwMDhDODMwMDVDOTQ4MjAwM0MwMDY5MTgyMzMwNDJGRkZGNTgKKzoxMDQ3OTAwMDAwNjIxODIxM0MwMjNGRkYzNDQ0RkZGRjAwODMxMDJCQ0UKKzoxMDQ3QTAwMDU0NDAwMDAxMDA4MDE4MjEwMTIzMTAyMUFEMDIwMDVDNUIKKzoxMDQ3QjAwMDhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkU4RTkKKzoxMDQ3QzAwMDhGQUEwMDI4QUZCRjAwMTAwMDgwNDAyMTAwRUE0ODIzRDQKKzoxMDQ3RDAwMDE5MjAwMDIxMzBDNjAwRkY4QzgzMDA1QzhDODIwMDY0QUQKKzoxMDQ3RTAwMDAwNkExODIzMDA0MzEwMkI1MDQwMDAxMDAwNjkxODIxNjQKKzoxMDQ3RjAwMDk0QTIwMTEwMDEyMjEwMjFBNEEyMDExMDk0QTIwMTEwODAKKzoxMDQ4MDAwMDMwNDJGRkZGMDA0MzEwMkIxNDQwMDAwQTNDMDIzRkZGRTAKKzoxMDQ4MTAwMDk0QTIwMTEwMDA0MzEwMjNBNEEyMDExMDk0ODIwMDNDMzIKKzoxMDQ4MjAwMDMwNDJGRkZGMEEwMDExREEwMDYyMTgyMUE0QTAwMTEwMzMKKzoxMDQ4MzAwMDNDMDIzRkZGMzQ0NEZGRkYwMDgzMTAyQjU0NDAwMDAxMzMKKzoxMDQ4NDAwMDAwODAxODIxMDA2NzEwMjFBRDAyMDA1Q0ExMDAwMDdDRUYKKzoxMDQ4NTAwMDBBMDAxMjIyQTEwMDAwODEzMEMyMDAxMDEwNDAwMDNDNkEKKzoxMDQ4NjAwMDAwMDAwMDAwOEM4MjAwNTAwMDRBMTAyMzE4NDAwMDM4REQKKzoxMDQ4NzAwMDAwMDAwMDAwOTA4MjAwN0MyNDQyMDAwMUEwODIwMDdDQTUKKzoxMDQ4ODAwMDkwODIwMDdDM0MwMzA4MDA4QzYzMDAyNDMwNDIwMEZGQ0YKKzoxMDQ4OTAwMDAwNDMxMDJCMTQ0MDAwNUM4RkJGMDAxMDhDQTIwMTA4NTUKKzoxMDQ4QTAwMDAwRTIxMDIzMTg0MDAwNTgwMDAwMDAwMDhDODMwMDU0RTAKKzoxMDQ4QjAwMDk0ODIwMDNDMDA2QTE4MjMzMDQyRkZGRjAwMDMxODQzMzMKKzoxMDQ4QzAwMDAwMDIxMDQwMDA0MzEwMkExMDQwMDAwNTAwMDAwMDAwQzQKKzoxMDQ4RDAwMDhDODIwMDU0MDA0QTEwMjMwQTAwMTIwOTAwMDIxMDQzN0YKKzoxMDQ4RTAwMDk0ODIwMDNDMzA0MkZGRkYwMDAyMTA0MEFEMDIwMDY0QTEKKzoxMDQ4RjAwMDk1MDIwMDNDOEQwNDAwNjQ5NTAzMDAzQzMwNDJGRkZGQUMKKzoxMDQ5MDAwMDAwMDIxMDQwMDA4MjIwMjEzMDYzRkZGRjAwODMxODIxNDUKKzoxMDQ5MTAwMDAxNDMxMDIxQUQwMjAwNUM4RDAyMDA1NEFDQTIwMTA4REQKKzoxMDQ5MjAwMDI0MDIwMDAyQTEwMjAwODQwRTAwMEZBMjhGNDQwMTAwQTUKKzoxMDQ5MzAwMDEwNDAwMDM1OEZCRjAwMTA4RjQzMDEwMDhGNDIwMUY4RjcKKzoxMDQ5NDAwMDA0NDBGRkZFMjQwMjAwMDIwQTAwMTI0QjAwMDAwMDAwOTcKKzoxMDQ5NTAwMEFEMDcwMDRDOENBMjAxMDgwMEUyMTAyMzE4NDAwMDAyQjEKKzoxMDQ5NjAwMDI0RTJGRkZDQUNBMjAxMDgzMEMyMDAwMTEwNDAwMDBBQTIKKzoxMDQ5NzAwMDAwMDAwMDAwOEQwMjAwNTAwMEUyMTAyMzA0NDEwMDA0RkEKKzoxMDQ5ODAwMDAxMDAyMDIxOEQwMjAwNTQxNEUyMDAwMzAwMDAwMDAwMDkKKzoxMDQ5OTAwMDBBMDAxMjQyMjQwNjAwMDU4RDAyMDA1NDE0RTIwMDFBOTcKKzoxMDQ5QTAwMDhGQkYwMDEwM0MwMjA4MDA4QzQyMDBEODMwNDIwMDIwMkIKKzoxMDQ5QjAwMDEwNDAwMDBBMjQwMjAwMDE5MTAzMDA3ODkxMDIwMDgzNTQKKzoxMDQ5QzAwMDE0NDMwMDA2MjQwMjAwMDEwMTAwMjAyMTI0MDYwMDA0RjMKKzoxMDQ5RDAwMDhGQkYwMDEwMEEwMDEwRUMyN0JEMDAxOEExMDAwMDg0NTIKKzoxMDQ5RTAwMEE1MDIwMDE0OEY0MzAxMDA4RjQyMDFGODA0NDBGRkZFMkUKKzoxMDQ5RjAwMDI0MDIwMDAyQUY0MzAxQzBBMzQyMDFDNDNDMDIxMDAwRTQKKzoxMDRBMDAwMEFGNDIwMUY4OEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4NzcKKzoxMDRBMTAwMDhGQUEwMDEwOEM4MjAwNTAwMDgwNDAyMTMwQzYwMEZGMTkKKzoxMDRBMjAwMDAwNEExMDIzMDBBMDQ4MjExODQwMDAwNzAwRTAxODIxODgKKzoxMDRBMzAwMDI0MDIwMDAxQTA4MDAwODRBMEEwMDExMkE0ODIwMDE0MUUKKzoxMDRBNDAwMDBBMDAxMUJEQUZBQTAwMTBBMDgwMDA4MUFEMDcwMDRDODQKKzoxMDRBNTAwMDhDQTIwMTA4MDBFMjEwMjMxODQwMDAwMjI0RTJGRkZDQUYKKzoxMDRBNjAwMEFDQTIwMTA4MzBDMjAwMDExMDQwMDAwODAwMDAwMDAwQTQKKzoxMDRBNzAwMDhEMDIwMDUwMDA2MjEwMjMwNDQxMDAxMzI0MDYwMDA1M0IKKzoxMDRBODAwMDhEMDIwMDU0MTA2MjAwMTAwMDAwMDAwMDhEMDIwMDU0REUKKzoxMDRBOTAwMDE0NjIwMDExMDAwMDAwMDAzQzAyMDgwMDhDNDIwMEQ4QTMKKzoxMDRBQTAwMDMwNDIwMDIwMTA0MDAwMEEyNDAyMDAwMTkxMDMwMDc4RTcKKzoxMDRBQjAwMDkxMDIwMDgzMTQ0MzAwMDYyNDAyMDAwMTAxMDAyMDIxMUEKKzoxMDRBQzAwMDAxMjAyODIxMjQwNjAwMDQwQTAwMTBFQzAwMDAwMDAwNDgKKzoxMDRBRDAwMEExMDAwMDg0QTUwMjAwMTQwM0UwMDAwODAwMDAwMDAwMEIKKzoxMDRBRTAwMDI3QkRGRkUwQUZCRjAwMTgyNzQyMDEwMDkwNDYwMDBBMzMKKzoxMDRBRjAwMDhDNDgwMDE0OEM4QjAwNEM5MDgyMDA4NDMwQzkwMEZGREQKKzoxMDRCMDAwMDAxNjgxODIzMzA0QTAwRkYxQzYwMDAxQTJENDYwMDA2NzkKKzoxMDRCMTAwMDI0MDIwMDAxMDE0MjEwMDQxMEMwMDAxNjMwNDMwMDAzQkIKKzoxMDRCMjAwMDAxMjAzMDIxMDEwMDM4MjExNDYwMDAwNzMwNEMwMDBDQjYKKzoxMDRCMzAwMDE1ODAwMDA5MzA0MjAwMzAxNDQwMDAwQjhGQkYwMDE4NzAKKzoxMDRCNDAwMDBBMDAxMkFDMDAwMDAwMDAwRTAwMTFCREFGQUIwMDEwNTcKKzoxMDRCNTAwMDBBMDAxMkFDOEZCRjAwMTgwRTAwMTEzMkFGQUIwMDEwNkMKKzoxMDRCNjAwMDBBMDAxMkFDOEZCRjAwMThBRkFCMDAxMDBFMDAxMjUyM0IKKzoxMDRCNzAwMEFGQUEwMDE0OEZCRjAwMTgwM0UwMDAwODI3QkQwMDIwNzMKKzoxMDRCODAwMDI0MDIwMDAzQTA4MjAwODQ4QzgyMDA1NDAzRTAwMDA4MDkKKzoxMDRCOTAwMEFDQTIwMTA4M0MwMjAwMDgwMzQyMTgyMTkwNjIwMDgxODcKKzoxMDRCQTAwMDI0MDYwMDQzM0MwNzYwMTkyNDQyMDAwMUEwNjIwMDgxRjIKKzoxMDRCQjAwMDkwNjMwMDgxM0MwMjA4MDA4QzQyMDBDMDMwNjMwMEZGMUIKKzoxMDRCQzAwMDE0NjIwMDEwMjQwM0ZGODAzQzAyMDgwMDhDNDIwMEUwQzUKKzoxMDRCRDAwMDAwODIxMDIxMDA0MzEwMjRBRjQyMDAyNDNDMDIwODAwNTAKKzoxMDRCRTAwMDhDNDIwMEUwM0MwMzAwMEEwMDgyMTAyMTMwNDIwMDdGMkEKKzoxMDRCRjAwMDAzNDIxMDIxMDA0MzEwMjE5NDQ1MDBENDBBMDAwQjg5ODAKKzoxMDRDMDAwMDMwQTVGRkZGMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwMjMKKzoxMDRDMTAwMEFGQkYwMDE4QUZCMTAwMTRBRkIwMDAxMDhGNDIwMTgwRDkKKzoxMDRDMjAwMDAwODA4MDIxMDBBMDg4MjEwRTAwMTJCMzAwNDAyMDIxQzYKKzoxMDRDMzAwMEEyMDAwMDg0OEUwMjAwNTQ4RkJGMDAxODhGQjAwMDEwQjUKKzoxMDRDNDAwMEFFMjIwMTA4OEZCMTAwMTQwM0UwMDAwODI3QkQwMDIwNDgKKzoxMDRDNTAwMDI3QkRGRkUwM0MwMjAwMDhBRkIwMDAxMEFGQkYwMDE4NTYKKzoxMDRDNjAwMEFGQjEwMDE0MDM0MjgwMjE4RjUxMDE0MDkyMDMwMDg0QjAKKzoxMDRDNzAwMDhFMDQwMDUwOEUwMjAwNEMxNDgyMDA0MDMwNjYwMEZGMEIKKzoxMDRDODAwMDNDMDIwODAwOEM0MjAwRTAyNDAzRkY4MDAyMjIxMDIxMzUKKzoxMDRDOTAwMDAwNDMxMDI0QUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwOTQKKzoxMDRDQTAwMDk3NDQwMDdDOTIwNTAwODEwMjIyMTAyMTMwNDIwMDdGNEYKKzoxMDRDQjAwMDAzNDIxODIxM0MwMjAwMEEwMDYyMTgyMTE0QTAwMDBCRDQKKzoxMDRDQzAwMDMwODRGRkZGMjQwMjAwMDU1NEMyMDAxNDI0ODIwNURDNTYKKzoxMDRDRDAwMDkwNjIwMTEyMjQ0MjAwMDFBMDYyMDExMjI0MDIwQzgwQTEKKzoxMDRDRTAwMEFGNDIwMDI0MEEwMDEzMEIyNDAyMDAwNUEwNjAwMTEyNDkKKzoxMDRDRjAwMDI0MDIwMDA1MTRDMjAwMDkyNDgyMDVEQzkyMDIwMDgxMEUKKzoxMDREMDAwMDJDNDIwMDA3NTA0MDAwMDUyNDgyMEEwMDkyMDMwMDgxRDMKKzoxMDREMTAwMDI0MDIwMDE0MDA2MjEwMDQwMDgyMTAyMTMwNDRGRkZGQkUKKzoxMDREMjAwMEE2MDQwMDE0MEUwMDEyQjMwMjIwMjAyMTk2MDIwMDNDQkIKKzoxMDREMzAwMDhFMDMwMDRDMDIyMDIwMjEzMDQyRkZGRjAwMDIxMDQwNzEKKzoxMDRENDAwMDAwNjIxODIxMEUwMDAzMDJBRTAzMDA1QzkyMDIwMDdEOTcKKzoxMDRENTAwMDAyMjAyMDIxMzQ0MjAwNDAwRTAwMDMwQkEyMDIwMDdERkQKKzoxMDRENjAwMDhGNDIwMUY4MDQ0MEZGRkUyNDAyMDAwMkFGNTEwMUMwNEYKKzoxMDRENzAwMEEzNDIwMUM0M0MwMjEwMDBBRjQyMDFGODhGQkYwMDE4RUIKKzoxMDREODAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwOTEKKzoxMDREOTAwMDA4MDAwRDk4MDgwMDBERTAwODAwMEUyMDA4MDAwRTZDQjkKKzowNDREQTAwMDA4MDAwRUEwNTkKKzowQzREQTQwMDBBMDAwMDIyMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTA0REIwMDAwMDAwMDAwRDYzNzAzNTJFMzAyRTMwNkEzMzAwMDAwMDg1Cis6MTA0REMwMDAwNTAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTA0REQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTA0REUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMEEzCis6MTA0REYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTA0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTA0RTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkxCis6MTA0RTIwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTA0RTMwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDQ1Cis6MTA0RTQwMDAzQzAyMDgwMDI0NDI1QUM0M0MwMzA4MDAyNDYzNjE5MEQ5Cis6MTA0RTUwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNERFCis6MTA0RTYwMDAzQzFEMDgwMDM3QkQ3RkZDMDNBMEYwMjEzQzEwMDgwMDZBCis6MTA0RTcwMDAyNjEwMDA4ODNDMUMwODAwMjc5QzVBQzQwRTAwMDFBNjdFCis6MTA0RTgwMDAwMDAwMDAwMDAwMDAwMDBEMjdCREZGRTgzQzA5NjAxODhECis6MTA0RTkwMDBBRkJGMDAxMDhEMkM1MDAwMjQwREZGN0YyNDA4MDAzMTdGCis6MTA0RUEwMDAwMThENTgyNDM1NkEzODBDMjQwNzBDMDAzQzFBODAwMDA4Cis6MTA0RUIwMDBBRDJBNTAwMDNDMDQ4MDBBQUY0ODAwMDgzQzFCODAwODIzCis6MTA0RUMwMDBBRjQ3MDAyNDBFMDAwOTM4QUY4NDAwMTAwRTAwMDhGQjI1Cis6MTA0RUQwMDAwMDAwMDAwMDBFMDAwODQ4MDAwMDAwMDAwRTAwMTJERjc1Cis6MTA0RUUwMDAwMDAwMDAwMDNDMDQ2MDE2OEM4NTAwMDAzQzA2RkZGRkJCCis6MTA0RUYwMDAzQzAyNTM1MzAwQTYxODI0MTA2MjAwNDczNDg2N0MwMEZECis6MTA0RjAwMDA5NEMyMDFGMkE3ODAwMDJDMTA0MDAwMDNBNzgwMDBDQ0JGCis6MTA0RjEwMDAzODU4MUUxRUE3OTgwMDJDOTRDMjAxRjgxMDQwMDAwNEI3Cis6MTA0RjIwMDA5NzgzMDBDQzM4NTkxRTFFQTc5OTAwQ0M5NzgzMDBDQ0RDCis6MTA0RjMwMDAyQzdGMDA2NzUzRTAwMDAxMjQwMzAwNjY5Nzg0MDAyQzU3Cis6MTA0RjQwMDAyQzgyMDQwMTE0NDAwMDAyMDA2MDI4MjEyNDA0MDQwMDgzCis6MTA0RjUwMDAzQzA3NjAwMDhDRTkwNDM4MjQwMzEwM0MzMTI4RkZGRjMzCis6MTA0RjYwMDAxMTAzMDAxRjMwQjlGRkZGNTcyMDAwMTBBMzgwMDBDRUFGCis6MTA0RjcwMDAyNDAyMDA1MEEzODIwMENFOTM5RjAwQ0U1M0UwMDAwRjg2Cis6MTA0RjgwMDBBNzg1MDBDQ0E3ODAwMENDOTc4NTAwQ0M4RkJGMDAxMEYwCis6MTA0RjkwMDBBNzgwMDAyQ0E3ODAwMDM0QTc4MDAwRTYzQzAxMDgwMDExCis6MTA0RkEwMDBBQzI1MDA4MDAzRTAwMDA4MjdCRDAwMTg5MzlGMDBDRUM5Cis6MTA0RkIwMDA1N0UwRkZGNUE3ODAwMENDQTc4NTAwQ0M5Nzg1MDBDQ0YzCis6MTA0RkMwMDA4RkJGMDAxMEE3ODQwMDJDQTc4MDAwMzRBNzgwMDBFNkM0Cis6MTA0RkQwMDAzQzAxMDgwMEFDMjUwMDgwMDNFMDAwMDgyN0JEMDAxODU0Cis6MTA0RkUwMDBBMzgwMDBDRThDQ0IwMDNDMzE2QTAwMDExMTQwMDAwRTQyCis6MTA0RkYwMDAwMDAwMDAwMDMwQTdGRkZGMTBFMEZGREUyNDAyMDA1MDk5Cis6MTA1MDAwMDA4Q0NDMDBDODMxODYwMDAxMTRDMEZGREM5MzlGMDBDRTE5Cis6MTA1MDEwMDAwQTAwMDA3NDI0MDIwMDUxOEM4RjAwMDQzQzBFNjAwMEQyCis6MTA1MDIwMDAwQTAwMDA1NzAxRUUzMDIxOENFRjA4MDgyNDBENTcwOEM0Cis6MTA1MDMwMDAwMDBGNzQwMjExQ0QwMDA0MzBCOEZGRkYyNDA1MDA2Njk0Cis6MTA1MDQwMDAwQTAwMDA3NTI0MDQwNDAwMTcwMEZGQ0M5MzlGMDBDRUQzCis6MTA1MDUwMDAwQTAwMDA3NDI0MDIwMDUwOEY4NjAwMTAzMDg5RkZGRjgwCis6MTA1MDYwMDAwMDA5Mzk0MDhDQzMwMDEwM0MwODAwNTAwMEU4MjAyNTlFCis6MTA1MDcwMDBBRjQzMDAzODhDQzUwMDE0Mjc0MjA0MDBBRjgyMDAxQ0U3Cis6MTA1MDgwMDBBRjQ1MDAzQ0FGNDQwMDMwMDAwMDAwMDAwMDAwMDAwMENECis6MTA1MDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTA1MEEwMDAwMDAwMDAwMDAwMDAwMDAwOEY0QjAwMDAzMTZBMDAyMDZCCis6MTA1MEIwMDAxMTQwRkZGRDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMEI4Cis6MTA1MEMwMDA4Rjg0MDAxMDk0OEEwMDFBOEM4NzAwMjQzMTQ5RkZGRkQ2Cis6MTA1MEQwMDAwMDA5NDBDMDAwRTgzMDIxQUY0NjAwM0M4Qzg1MDAyNDI4Cis6MTA1MEUwMDA4RjQzMDAzQzAwQTMxMDIzMTg0MDAwMjkwMDAwMDAwMDVCCis6MTA1MEYwMDA4QzhCMDAyMDI1NjIwMDAxM0MwRDAwNTAzNUFDMDAwODZGCis6MTA1MTAwMDBBRjQyMDAzOEFGNEMwMDMwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTA1MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTA1MTIwMDAwMDAwMDAwMDAwMDAwMDAwOEY0RjAwMDAzMUVFMDAyMDYyCis6MTA1MTMwMDAxMUMwRkZGRDAwMDAwMDAwOEY0QTA0MDAzQzA4MDAyMDYxCis6MTA1MTQwMDBBQzhBMDAxMDhGNDkwNDA0QUM4OTAwMTRBRjQ4MDAzMEM5Cis6MTA1MTUwMDAwMDAwMDAwMDk0ODYwMDE4OTQ4NzAwMUMwMEM3MTgyMUU2Cis6MTA1MTYwMDBBNDgzMDAxODk0ODUwMDFBMjRBMjAwMDFBNDgyMDAxQUM2Cis6MTA1MTcwMDA5NDk4MDAxQTk0OTkwMDFFMTMzODAwMDMwMDAwMDAwMDUwCis6MTA1MTgwMDAwM0UwMDAwODAwMDAwMDAwMDNFMDAwMDhBNDgwMDAxQTBCCis6MTA1MTkwMDA4QzgyMDAyMDBBMDAwMEQ2M0MwRDAwNTAwQTAwMDBDNzk3Cis6MTA1MUEwMDAwMDAwMDAwMDNDMDMwODAwOEM2MzAwMjA4RjgyMDAxODgwCis6MTA1MUIwMDAyN0JERkZFODEwNjIwMDA4QUZCRjAwMTAwRTAwMDBGRTIwCis6MTA1MUMwMDBBRjgzMDAxODNDMDMwODAwOEM2MzAwMjAyNDA0MDAwMTE2Cis6MTA1MUQwMDAxMDY0MDAwNDhGODkwMDEwOEZCRjAwMTAwM0UwMDAwOEU2Cis6MTA1MUUwMDAyN0JEMDAxODhGQkYwMDEwM0MwNzYwMTJBNTIwMDAwQUUxCis6MTA1MUYwMDA5NTI4MDAwQTM0RTUwMDEwMjdCRDAwMTgzMTA2RkZGRjhFCis6MTA1MjAwMDAwM0UwMDAwOEFDQTYwMDkwM0MwMjA4MDA4QzQyMDAyMDlECis6MTA1MjEwMDAyN0JERkZDOEFGQkYwMDM0QUZCRTAwMzBBRkI3MDAyQzEyCis6MTA1MjIwMDBBRkI2MDAyOEFGQjUwMDI0QUZCNDAwMjBBRkIzMDAxQzY4Cis6MTA1MjMwMDBBRkIyMDAxOEFGQjEwMDE0MTA0MDAwNTBBRkIwMDAxMDcyCis6MTA1MjQwMDA4Rjg0MDAxMDk0ODYwMDA2OTQ4MzAwMEEwMEMzMjgyM0VDCis6MTA1MjUwMDAzMEI2RkZGRjEyQzAwMDRBOEZCRjAwMzQ5NDg5MDAxODk3Cis6MTA1MjYwMDA5NDhBMDAwQTAxMkE0MDIzMzEwMkZGRkYwMkMyMzgyQjMwCis6MTA1MjcwMDAxNEUwMDAwMjAyQzAyMDIxMDA0MDIwMjEyQzhDMDAwNUY3Cis6MTA1MjgwMDAxNTgwMDAwMjAwODBBMDIxMjQxNDAwMDQwRTAwMDBBRDRGCis6MTA1MjkwMDAwMjgwMjAyMThGODcwMDEwMDI4MDk4MjFBRjgwMDAxNEE3Cis6MTA1MkEwMDA5NEVEMDAwQTAyODA4ODIxMTI4MDAwNEUzMUIyRkZGRjg3Cis6MTA1MkIwMDAzQzE3NzAwMDNDMTU0MDAwM0MxRTYwMDA4RjhGMDAxQ0E2Cis6MTA1MkMwMDA4REVFMDAwMDAxRDcxODI0NTA3NTAwNTAwMjIwMjAyMUQ3Cis6MTA1MkQwMDAwMkEzODAyQjE2MDAwMDM1M0MxODIwMDA1MDc4MDA0N0IwCis6MTA1MkUwMDAwMjIwMjAyMTI0MTAwMDAxOEY4MzAwMTQxNDYwMDAzOTUzCis6MTA1MkYwMDAwMjkxNTgyMzAyMzBGODIzMDI1MEM4MjEzM0YxRkZGRkY2Cis6MTA1MzAwMDAxNjIwRkZFRTMzMzJGRkZGOEY4NzAwMTAzQzExMDAyMDg0Cis6MTA1MzEwMDBBRjUxMDAzMDAwMDAwMDAwOTRFNjAwMEEzQzFFNjAxMjBECis6MTA1MzIwMDAzN0Q1MDAxMDAyNjYyODIxQTRFNTAwMEE5NEUyMDAwQTlECis6MTA1MzMwMDA5NEYyMDAwQTk0RjQwMDE4MzA1N0ZGRkYxMjkyMDAzQkQ5Cis6MTA1MzQwMDBBRUI3MDA5MDhDRUQwMDE0OENFNDAwMTAwMDEzNzE0MDk3Cis6MTA1MzUwMDAwMUFFNDAyMTAwMEU1RkMzMDEwRTUwMkIwMDhCNDgyMThGCis6MTA1MzYwMDAwMTJBMTgyMUFDRTgwMDE0QUNFMzAwMTAwMkQzMzgyMzYyCis6MTA1MzcwMDAzMEY2RkZGRjE2QzBGRkI5OEY4NDAwMTA4RkJGMDAzNEQ2Cis6MTA1MzgwMDA4RkJFMDAzMDhGQjcwMDJDOEZCNjAwMjg4RkI1MDAyNDU5Cis6MTA1MzkwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDlGCis6MTA1M0EwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMzgxMDdFMDAxQkZFCis6MTA1M0IwMDAwMDAwMDAwMDE0NzdGRkNDMjQxMDAwMDEwRTAwMTYyQTE0Cis6MTA1M0MwMDAwMDAwMDAwMDhGODMwMDE0MTA2MEZGQ0IwMjMwRjgyMzMwCis6MTA1M0QwMDAwMjkxNTgyMzhGODcwMDEwMDE3MDIwMjEwQTAwMDE5MTRCCis6MTA1M0UwMDAzMDkzRkZGRjhGODMwMDE0MTQ2MEZGQ0IzQzExMDAyMDJCCis6MTA1M0YwMDBBRjUxMDAzMDBBMDAwMTVEMDAwMDAwMDAwRTAwMDdBMTVGCis6MTA1NDAwMDAwMjQwMjgyMTBBMDAwMTUxMDA0MDgwMjEwRTAwMDM0Qjc4Cis6MTA1NDEwMDAwMjQwMjgyMTBBMDAwMTUxMDA0MDgwMjEwRTAwMTRGMkIwCis6MTA1NDIwMDAwMjIwMjAyMTBBMDAwMTUxMDA0MDgwMjEwRTAwMDBDNzA3Cis6MTA1NDMwMDAwMDAwMDAwMDBBMDAwMTczMDJEMzM4MjMyN0JERkZFOEYzCis6MTA1NDQwMDBBRkIwMDAxMEFGQkYwMDE0MEUwMDAwMzkwMDAwMDAwMDI0Cis6MTA1NDUwMDAzQzAyODAwMDM0NTAwMDcwMEEwMDAxQjQ4RTA2MDAwMDQ3Cis6MTA1NDYwMDA4RjRGMDAwMDM5RUUwMDAxMzFDMjAwMDExMDQwMDAyNENFCis6MTA1NDcwMDA4Rjg2MDBBODhFMDcwMDAwM0MwQzA4MDA4RDhDMDAzQzM1Cis6MTA1NDgwMDAzQzA5MDgwMDhEMjkwMDM4MDBFNjY4MjMwMThEMjgyMTk5Cis6MTA1NDkwMDAwMDAwNTAyMTAwQUQzMDJCMDEyQTQwMjEwMTA2MjAyMUJGCis6MTA1NEEwMDAzQzAxMDgwMEFDMjUwMDNDQUY4NzAwQTgzQzAxMDgwMDg3Cis6MTA1NEIwMDBBQzI0MDAzODBFMDAwMTAwMDAwMDAwMDAzQzAzMDgwMDhFCis6MTA1NEMwMDA4QzYzMDA3MDEwNjBGRkU2MDA2MDIwMjEzQzA1MDgwMDNFCis6MTA1NEQwMDA4Q0E1MDA2ODNDMDYwODAwOENDNjAwNkMwRTAwMTVCOTRGCis6MTA1NEUwMDAwMDAwMDAwMDNDMDEwODAwQUMyMDAwNzA4RjRGMDAwMDVECis6MTA1NEYwMDAzOUVFMDAwMTMxQzIwMDAxMTQ0MEZGREU4Rjg2MDBBOEEyCis6MTA1NTAwMDA4RTBBMDAwMDhGOEIwMEE4M0MwNTA4MDA4Q0E1MDAzQzhCCis6MTA1NTEwMDAzQzA0MDgwMDhDODQwMDM4MDE0QjQ4MjMwMEE5MzgyMTQyCis6MTA1NTIwMDAwMDgyMTgyMTAwRTk0MDJCMDA2ODEwMjEzQzAxMDgwMDhFCis6MTA1NTMwMDBBQzI3MDAzQzNDMDEwODAwQUMyMjAwMzg4RjVGMDEwMDIyCis6MTA1NTQwMDAyNDE5RkYwMDI0MTgwQzAwMDNGOTIwMjQxMDk4MDAxMkRECis6MTA1NTUwMDBBRjg0MDAwMEFGNDQwMDIwOTM2RDAwMDAyNDBDMDAyMEI1Cis6MTA1NTYwMDAzMUE2MDBGRjEwQ0MwMDEyMjQwRTAwNTAxMENFMDAwNDEzCis6MTA1NTcwMDAzQzE5NDAwMEFGNTkwMTM4MEEwMDAxQUQwMDAwMDAwMDlECis6MTA1NTgwMDAwRTAwMTI1NTAwMDAwMDAwM0MxOTQwMDBBRjU5MDEzOEQwCis6MTA1NTkwMDAwQTAwMDFBRDAwMDAwMDAwMEUwMDAxMTkwMDAwMDAwMDJCCis6MTA1NUEwMDAzQzE5NDAwMEFGNTkwMTM4MEEwMDAxQUQwMDAwMDAwMDZECis6MTA1NUIwMDA4RjU4MDEwMDAwODAyODIxMzMwRjAwRkYwMUUwMjAyMUQ3Cis6MTA1NUMwMDAwRTAwMDJGOEFGOEYwMDA0M0MxOTQwMDBBRjU5MDEzOEJCCis6MTA1NUQwMDAwQTAwMDFBRDAwMDAwMDAwMDBBNDEwMkIyNDAzMDAwMTBDCis6MTA1NUUwMDAxMDQwMDAwOTAwMDAzMDIxMDAwNTI4NDAwMEE0MTAyQkM1Cis6MTA1NUYwMDAwNEEwMDAwMzAwMDMxODQwNTQ0MEZGRkMwMDA1Mjg0MEFECis6MTA1NjAwMDA1MDYwMDAwQTAwMDQxODJCMDA4NTM4MkI1NEUwMDAwNDc5Cis6MTA1NjEwMDAwMDAzMTg0MjAwQzMzMDI1MDA4NTIwMjMwMDAzMTg0MkYwCis6MTA1NjIwMDAxNDYwRkZGOTAwMDUyODQyMDAwNDE4MkIwM0UwMDAwODZECis6MTA1NjMwMDAwMEMzMTAyMTMwODRGRkZGMzBBNUZGRkY4RjQyMDFCODY3Cis6MTA1NjQwMDAwNDQwRkZGRTNDMDc0MDgwMDA4NzMwMjUzQzAzMTAwMEVCCis6MTA1NjUwMDBBRjQwMDE4MEFGNDUwMTg0QUY0NjAxODgwM0UwMDAwOEY4Cis6MTA1NjYwMDBBRjQzMDFCODMwODRGRkZGOEY0MjAxQjgwNDQwRkZGRTEyCis6MTA1NjcwMDAzQzA3NDAzODhDQTYwMDAwMDA4NzI4MjUzQzAzMTAwMDFBCis6MTA1NjgwMDBBRjQ2MDE4MEFGNDUwMTg4MDNFMDAwMDhBRjQzMDFCODkxCis6MTA1NjkwMDA4RjgzMDAzODhGODYwMDMwMTA2NjAwMEIwMDgwNDAyMTE5Cis6MTA1NkEwMDAzQzA3MDgwMDI0RTc1QzM4MDAwMzI4QzAwMEE3MTAyMTRECis6MTA1NkIwMDA4QzQ0MDAwMDI0NjMwMDAxMTA4ODAwMDUzMDYzMDAwRjUzCis6MTA1NkMwMDA1NDY2RkZGQTAwMDMyOEMwMDNFMDAwMDgwMDAwMTAyMTIwCis6MTA1NkQwMDAzQzA3MDgwMDI0RTc1QzNDMDBBNzMwMjEwM0UwMDAwOEY5Cis6MTA1NkUwMDA4Q0MyMDAwMDNDMDM5MDAwMzQ2MjAwMDEwMDgyMjAyNTNGCis6MTA1NkYwMDBBRjQ0MDAyMDhGNDUwMDIwMDRBMEZGRkUwMDAwMDAwMDAyCis6MTA1NzAwMDAwM0UwMDAwODAwMDAwMDAwM0MwMzgwMDAzNDYyMDAwMTU4Cis6MTA1NzEwMDAwMDgyMjAyNTAzRTAwMDA4QUY0NDAwMjAyN0JERkZFMDAxCis6MTA1NzIwMDBBRkIxMDAxNDMwOTFGRkZGQUZCMDAwMTBBRkJGMDAxODUxCis6MTA1NzMwMDAxMjIwMDAxNTAwQTA4MDIxOENBNTAwMDAxMEEwMDAxM0VECis6MTA1NzQwMDAyNDA0MDAwMjBFMDAwQzdGMjQwNjAxNDBBRTAwMDAwMDdECis6MTA1NzUwMDA4RjQyMDFCODA0NDAwMDBEMDAwMDI4MjEzQzA2NDAwMEEzCis6MTA1NzYwMDAwMjI2MjAyNThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEMzCis6MTA1NzcwMDAzQzAzMTAwMDI3QkQwMDIwQUY0NTAxODBBRjQ0MDE4OEU1Cis6MTA1NzgwMDAwM0UwMDAwOEFGNDMwMUI4OENBNTAwMDA4RjQyMDFCOEM4Cis6MTA1NzkwMDAwNDQwRkZGRTNDMDY0MDAwMDIyNjIwMjU4RkJGMDAxODczCis6MTA1N0EwMDA4RkIxMDAxNDhGQjAwMDEwM0MwMzEwMDAyN0JEMDAyMDAzCis6MTA1N0IwMDBBRjQ1MDE4MEFGNDQwMTg4MDNFMDAwMDhBRjQzMDFCODYyCis6MTA1N0MwMDAzMDg2RkZGRjhGNDIwMUI4MDQ0MEZGRkUzQzA5NDAwNkNGCis6MTA1N0QwMDA4Q0E4MDAwMDAwQzkzODI1QUY0ODAxODA4Q0E0MDAwNEMzCis6MTA1N0UwMDAzQzAzMTAwMEFGNDQwMTg0QUY0NzAxODgwM0UwMDAwODg4Cis6MTA1N0YwMDBBRjQzMDFCODI3QkRGRkUwQUZCMDAwMTBBRkJGMDAxODQ2Cis6MTA1ODAwMDBBRkIxMDAxNDkzNjMwMDNFMDA4MDgwMjEwMDgwMjgyMTA2Cis6MTA1ODEwMDAzMDYyMDA0MDAwMDAyMDIxMTA0MDAwMEY4RTExMDAwMDc3Cis6MTA1ODIwMDAwRTAwMDg3NDAyMjAyMDIxOTM2NzAwMDAyNDA0MDA1MDE5Cis6MTA1ODMwMDAzMEU1MDBGRjUwQTQwMDEyOEUwRjAwMDAwMjIwMjAyMTRFCis6MTA1ODQwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBBNzYyMDEzQzA5Cis6MTA1ODUwMDAwQTAwMDkzNDI3QkQwMDIwMEUwMDAyODcwMDAwMDAwMDY2Cis6MTA1ODYwMDAwRTAwMDg3NDAyMjAyMDIxOTM2NzAwMDAyNDA0MDA1MEQ5Cis6MTA1ODcwMDAzMEU1MDBGRjE0QTRGRkYyMDIyMDIwMjE4RTBGMDAwMDZCCis6MTA1ODgwMDAzQzEwMDgwMDhFMTAwMDUwM0MwRDAwMEMyNDBCRkY4MEQzCis6MTA1ODkwMDAwMUYwNTAyMTMxNEUwMDdGMDFEQTYwMjEwMThENDAyMTVECis6MTA1OEEwMDAwMTRCNDgyNEFGNDkwMDI4MDIyMDIwMjE4RkJGMDAxODU3Cis6MTA1OEIwMDA4RkIxMDAxNDhGQjAwMDEwQTUwMjAwRDYyN0JEMDAyMEM0Cis6MTA1OEMwMDAwQTAwMDkzNEFGODgwMEQwMjdCREZGRTBBRkJGMDAxODQxCis6MTA1OEQwMDBBRkIxMDAxNEFGQjAwMDEwOTM2NjAwMDEwMDgwODAyMUNBCis6MTA1OEUwMDAwRTAwMDI1MDMwRDEwMDA0OTM2NDAwMDUwMDEwMjlDMjVDCis6MTA1OEYwMDBBNzY1MDAwMDM0ODMwMDQwQTM2MzAwMDUwRTAwMDI1OTMxCis6MTA1OTAwMDAwMjAwMjAyMTBFMDAwOTM2MDIwMDIwMjEyNDAyMDAwMTlECis6MTA1OTEwMDBBRjYyMDAwQzAyMDAyODIxQTc2MjAwMTAyNDA0MDAwMkRDCis6MTA1OTIwMDBBNzYyMDAxMjI0MDYwMTQwQTc2MjAwMTQwRTAwMEM3RjNCCis6MTA1OTMwMDBBNzYyMDAxNjE2MjAwMDBGOEZCRjAwMTg5NzhDMDAzNDQ2Cis6MTA1OTQwMDAzQzBCMDgwMDhENkIwMDc4MjU4OEZGRkYzMTA5RkZGRkI1Cis6MTA1OTUwMDAyNTZBMDAwMTAxMkEzODJCMTBFMDAwMDZBNzg4MDAzNEQwCis6MTA1OTYwMDAzQzBGNjAwNjI0MEUwMDE2MzVFRDAwMTBBREFFMDA1MDYxCis6MTA1OTcwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODMzCis6MTA1OTgwMDAyN0JEMDAyMDI3QkRGRkUwQUZCMTAwMTRBRkJGMDAxODU2Cis6MTA1OTkwMDBBRkIwMDAxMDAwQTA4ODIxMTA4MDAwMEEzQzAzNjAwMDE2Cis6MTA1OUEwMDAyNDAyMDA4MDEwODIwMDEyMDAwMDAwMDAwMDAwMDAwREEwCis6MTA1OUIwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwOEYzCis6MTA1OUMwMDAyN0JEMDAyMDhDNjgyQkY4MDUwMEZGRkUwMDAwMDAwMEJBCis6MTA1OUQwMDBBQzcxMkJDMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEI2Cis6MTA1OUUwMDAzQzA5MTAwMDI3QkQwMDIwMDNFMDAwMDhBQzY5MkJGODNCCis6MTA1OUYwMDAwRTAwMDI1MDAwQTAyMDIxOTM2NTAwMDUwMjIwMjAyMTA2Cis6MTA1QTAwMDAwRTAwMDI1OTMwQjAwMEZGMjQwMzAwM0UxNjAzRkZFN0VBCis6MTA1QTEwMDAwMDAwMDAwMDhGNDQwMTc4MDQ4MEZGRkUyNDA3MDAwNzg3Cis6MTA1QTIwMDAzQzA2MTAwMEFGNTEwMTQwMDIyMDIwMjFBMzQ3MDE0NDUxCis6MTA1QTMwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBBRjQ2MDE3OEVGCis6MTA1QTQwMDAwQTAwMDJDOTI3QkQwMDIwMjdCREZGRThBRkJGMDAxNDMwCis6MTA1QTUwMDBBRkIwMDAxMDhGNTAwMDIwMDAwMDAwMDAwRTAwMDkzNjhCCis6MTA1QTYwMDBBRjQ0MDAyMEFGNTAwMDIwOEZCRjAwMTQ4RkIwMDAxMDUzCis6MTA1QTcwMDAwM0UwMDAwODI3QkQwMDE4MzA4NEZGRkY4RjQyMDFCODAzCis6MTA1QTgwMDAwNDQwRkZGRTNDMDc0MDM1MDA4NzMwMjUzQzAzMTAwMEYyCis6MTA1QTkwMDBBRjQ1MDE4MEFGNDAwMTg0QUY0NjAxODgwM0UwMDAwOEI0Cis6MTA1QUEwMDBBRjQzMDFCODMwODRGRkZGOEY0MjAxQjgwNDQwRkZGRUNFCis6MTA1QUIwMDAzQzA3NDAzNjAwODczMDI1M0MwMzEwMDBBRjQ1MDE4MDhECis6MTA1QUMwMDBBRjQwMDE4NEFGNDYwMTg4MDNFMDAwMDhBRjQzMDFCODRFCis6MTA1QUQwMDAyN0JERkZEMEFGQjMwMDFDMzA5M0ZGRkZBRkI1MDAyNDRDCis6MTA1QUUwMDBBRkIyMDAxOEFGQkYwMDI4QUZCNDAwMjBBRkIxMDAxNEIwCis6MTA1QUYwMDBBRkIwMDAxMDMwQjVGRkZGMTI2MDAwMjcwMDAwOTAyMTBBCis6MTA1QjAwMDA4RjkwMDAxQzhFMDMwMDAwM0MwNjgwMDAyNDAyMDA0MEExCis6MTA1QjEwMDAwMDAzM0UwMjAwMDMyQzAyMzBFNDAwN0YwMDY2ODgyNDZDCis6MTA1QjIwMDAxNDgyMDAxRDMwQTUwMEZGOEY4MzAwMjgyQzY4MDAwQTE2Cis6MTA1QjMwMDA1MTAwMDAxMDhGOTEwMDE0MDAwMzU4ODAzQzBDMDgwMEE1Cis6MTA1QjQwMDAyNThDNThEMDAxNkM1MDIxOEQ0OTAwMDAwMTIwMDAwODlGCis6MTA1QjUwMDAwMDAwMDAwMDAyQjIxODIxMzA2NUZGRkYwRTAwMDIyNDkxCis6MTA1QjYwMDAyNDA0MDA4NDE2MjAwMDAyOEY5MDAwMUNBRjgwMDAyOEJGCis6MTA1QjcwMDA4RjkxMDAxNDI2MEMwMDIwMjY0QjAwMDEwMTgwODAyMTBCCis6MTA1QjgwMDAzMTcyRkZGRjE2MjAwMDA0QUY4QzAwMUMwMjUzMjgyQjNCCis6MTA1QjkwMDAxNEEwRkZEQzAwMDAwMDAwMDI0MDEwMjE4RkJGMDAyODhECis6MTA1QkEwMDA4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODczCis6MTA1QkIwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzMDQzCis6MTA1QkMwMDAyNDBEMDAzNDE0QUQwMEY2MDAwMDAwMDA5MjBCMDAwRTBFCis6MTA1QkQwMDAyNDBBMTY4MDNDMDcwMDBDQTM2QjAwMjE5MjAzMDAwREUxCis6MTA1QkUwMDAwMzQ3RjgyMTNDMDY2MDAwQTM2MzAwMjA5NjExMDAxMkQxCis6MTA1QkYwMDAzQzA1N0ZGRjM0QUNGRkZGQTc3MTAwM0M5NjAyMDAxMDBDCis6MTA1QzAwMDAyNDBCMDAwNTMwNTRGRkZGQUY3NDAwODQ4RTE5MDAxQzc0Cis6MTA1QzEwMDBBRjRBMDAyODhGRjgwMDAwOENDRjQ0NDgwMzE5NzAyNjQzCis6MTA1QzIwMDAwMUVFMzAyMUFGNjYwMDRDOEY2OTAwNEMyNENEMDAwMTlECis6MTA1QzMwMDAzQzE5N0YwMEFGNjkwMDUwOEY2NDAwNTBBRjY0MDA1NDdFCis6MTA1QzQwMDBBRjY2MDA3MEFGNkQwMDU4OEY2ODAwNTgyNDA0MDA1MDk0Cis6MTA1QzUwMDBBRjY4MDA1Q0EzNjAwMDIzQUY2QzAwNjRBMzZCMDAzN0U3Cis6MTA1QzYwMDA4RTAzMDAxNEFGNjMwMDQ4OEY3MTAwNDhBRjcxMDAyNEE5Cis6MTA1QzcwMDA4RTAyMDAxOEFGNjIwMDZDOTIxNDAwMENBMzc0MDAzNjAwCis6MTA1QzgwMDA5MzZBMDAzRTM1NUYwMDIwQTM3RjAwM0U4Rjc4MDA3NDRBCis6MTA1QzkwMDAwMzE5NzgyNDM1RUU0MDAwQUY2RTAwNzQ5MzY5MDAwMDVDCis6MTA1Q0EwMDAzMTMwMDBGRjEyMDQwMjJCMjQxOEZGODAzQzA0MDgwMDRFCis6MTA1Q0IwMDAyNDg0NUNCODBFMDAwMjk0MDAwMDAwMDAyNDA2MDAwNDU2Cis6MTA1Q0MwMDAyNDA3MDAwMTNDMDQwODAwOEM4NDVDQjhBMzY2MDA3REI2Cis6MTA1Q0QwMDBBMzY3MDAwNThGNEEwMTc4MDU0MEZGRkUyNDAyMDAwMkY5Cis6MTA1Q0UwMDBBRjQ0MDE0MEEzNDIwMTQ0OEY5MDAwMUMzQzE0MTAwMEJCCis6MTA1Q0YwMDBBRjU0MDE3ODBBMDAwMzczQUY4MDAwMjgyQ0FEMDAzNzQxCis6MTA1RDAwMDA1MUEwRkY5QzhGOTEwMDE0MDAwNUEwODAzQzE4MDgwMDUyCis6MTA1RDEwMDAyNzE4NThGODAyOTg3ODIxOERFRTAwMDAwMUMwMDAwODdECis6MTA1RDIwMDAwMDAwMDAwMDI0MDYwMDA2MTRBNjAwMTEwMDAwMDAwMDc4Cis6MTA1RDMwMDAzQzFGMDgwMDhGRkY1Q0I4MjQwNDAwMDVBRjVGMDAyMDAzCis6MTA1RDQwMDA4RTE5MDAxOEFGNzkwMDE4OEY3ODAwNENBRjc4MDAxQ0JFCis6MTA1RDUwMDA4RjZGMDA1MDEyMjAwMEMyQUY2RjAwNzAwQTAwMDM3M0YzCis6MTA1RDYwMDBBRjg0MDAyODI0MEEwMDA3MTBBQTAwODQyNDAzMDAwNjM4Cis6MTA1RDcwMDAzQzA1MDgwMDI0QTU1Q0I4MEUwMDAyNUUyNDA0MDA4MUU2Cis6MTA1RDgwMDA4RjkwMDAxQzAwMTExMDJCMEEwMDAzNzNBRjgyMDAyOEIzCis6MTA1RDkwMDAyNDAyMDAwNDE0QTJGRkY2MjQwQTAwNTAzQzA5MDgwMDYzCis6MTA1REEwMDA4RDI5NUNCOEFGNDkwMDIwOEUwNDAwMDhBRjY0MDA0MDI0Cis6MTA1REIwMDA4RTA2MDAwOEFGNjYwMDQ0OEUwNzAwMENBRjY3MDA0OEVGCis6MTA1REMwMDA4RTBEMDAxMEFGNkQwMDRDOEUwODAwMTBBRjY4MDA4NDdGCis6MTA1REQwMDA4RTA1MDAxNEFGNjUwMDUwOEUwQzAwMThBRjZDMDA1NDk3Cis6MTA1REUwMDA4RTBCMDAxQ0FGNkIwMDU4OTM3NDAwMDAzMjgzMDBGRkQxCis6MTA1REYwMDAxMDZBMDFFRDAwMDAwMDAwOEY2NzAwNDg4RjY2MDA0MEM4Cis6MTA1RTAwMDAwMEU2NjgyMzA1QTAwMDA0MjQwNDAwOEMxNjIwRkZERUIxCis6MTA1RTEwMDAyNDAyMDAwMzI0MDQwMDgyM0MwNTA4MDAyNEE1NUNCODg5Cis6MTA1RTIwMDAwRTAwMDI4NzAwMDAwMDAwOEY5MDAwMUMwMDAwMTAyMTZGCis6MTA1RTMwMDAwQTAwMDM3M0FGODIwMDI4MjQwNDAwMDUxNEE0RkZDQ0Q5Cis6MTA1RTQwMDAyNDA1MjAwMDNDMUYwODAwOEZGRjVDQjhBRjVGMDAyMEQ2Cis6MTA1RTUwMDA4RTE5MDAwNEFGNzkwMDVDOTIxODAwMDgyNDEwMDAwODI1Cis6MTA1RTYwMDBBMzc4MDAyMThGOEYwMDFDOTFFRTAwMDlBMzZFMDAyMDAzCis6MTA1RTcwMDA4Rjg2MDAxQzkwQzkwMDBBMzEyNDAwRkYxMDkwMDAxMDhBCis6MTA1RTgwMDAyODhBMDAwOTE1NDAwMDZDMjQwMjAwMDIyNDBDMDAyMDFFCis6MTA1RTkwMDAxMDhDMDAwQjM0MDU4MDAwMjg4NTAwMjExNEEwMDAwODE4Cis6MTA1RUEwMDAyNDA1NDAwMDI0MDgwMDQwMTA4ODAwMDUzQzA1MDAwMTNFCis6MTA1RUIwMDAyNDBEMDA4MDEwOEQwMDAyM0MwNTAwMDIyNDA1NDAwMEU2Cis6MTA1RUMwMDA4RjZFMDA3NDNDMEZGRjAwMDFDRjQ4MjQwMTI1ODAyNTEwCis6MTA1RUQwMDBBRjcwMDA3NDkwQzQwMDBCQTM2NDAwODE4Rjg0MDAxQzE5Cis6MTA1RUUwMDA5NDg3MDAwQzEwRTAwMTkzMDAwMDAwMDA5NDhFMDAwQ0Q5Cis6MTA1RUYwMDAyNDFGRkZCRjI0MDYwMDA0QTc2RTAwM0M5MDg5MDAwRUZCCis6MTA1RjAwMDBBMzY5MDAzRThGOTAwMDFDOTIwNDAwMEZBMzY0MDAzRjIxCis6MTA1RjEwMDA4Rjk0MDAxQzhFOEQwMDEwOEY0NzAwNzQwMUE3NDAyM0MyCis6MTA1RjIwMDBBRjY4MDA2MDhFODUwMDE0QUY2NTAwNjQ5NjhDMDAxODIxCis6MTA1RjMwMDBBNzZDMDA2ODk2OEIwMDFBQTc2QjAwNkE4RTgzMDAxQzAyCis6MTA1RjQwMDBBRjYzMDA2Qzk2ODIwMDAyQTc2MjAxM0U5MjhBMDAwRTQ3Cis6MTA1RjUwMDBBMzZBMDAzRTkzNzkwMDNFMDMzRkMwMjQxMjIwMDE2NkVECis6MTA1RjYwMDBBMzc4MDAzRThGOTAwMDFDMEEwMDAzNzNBRjg2MDAyOEMwCis6MTA1RjcwMDAyNDE0MDAyMjE0QjRGRjdFMjQwMzAwMDczQzAyMDgwMDBFCis6MTA1RjgwMDA4QzQyNUNCODEyMjAwMDBDQUY0MjAwMjAwQTAwMDM3MzYwCis6MTA1RjkwMDBBRjgzMDAyODI0MEMwMDMzMTBBQzAwMTQyNDA1MDAyODIzCis6MTA1RkEwMDAzQzA1MDgwMDI0QTU1Q0I4MEUwMDAyMzAyNDA0MDA4MUUyCis6MTA1RkIwMDAwQTAwMDNGODhGOTAwMDFDM0MwNDA4MDAyNDg0NUNCODlECis6MTA1RkMwMDAwRTAwMDI5NDAwMDAwMDAwOTM2QjAwMDAyNDExMDA1MEFBCis6MTA1RkQwMDAzMTYzMDBGRjEwNzEwMTUwMDAwMDAwMDA4RjkwMDAxQzIxCis6MTA1RkUwMDAwMDAwMTgyMTBBMDAwMzczQUY4MzAwMjgzQzA4MDgwMDUyCis6MTA1RkYwMDA4RDA4NUNCODI0MDQwMDgxQUY0ODAwMjBBMzY1MDAzNEZDCis6MTA2MDAwMDAzQzA1MDgwMDI0QTU1Q0I4MEUwMDAyMzAwMDAwMDAwMDJBCis6MTA2MDEwMDA4RjkwMDAxQzI0MDIwMDA5MEEwMDAzNzNBRjgyMDAyODNECis6MTA2MDIwMDAwMkIyODgyMTMyMjVGRkZGMEUwMDAyMjQyNDA0MDA4NERFCis6MTA2MDMwMDAwQTAwMDM3MzhGOTAwMDFDMTA4MkZGQTEyNDA1MDQwMDQ2Cis6MTA2MDQwMDAyODgzMDAwMzEwNjAwMTZFMjQwQjAwMDQyNDE0MDAwMTU3Cis6MTA2MDUwMDA1NDk0RkY5QjI0MDU0MDAwMEEwMDA0NDcyNDA1MDEwMEQ2Cis6MTA2MDYwMDAzQzA0MDgwMDI0ODQ1Q0I4OEY2MjAwNEMwRTAwMDI5NDRCCis6MTA2MDcwMDA4RjYzMDA1MDhGOTAwMDFDMDAwMDIwMjEwQTAwMDM3M0UyCis6MTA2MDgwMDBBRjg0MDAyODhFMTAwMDA0MjQwNDAwOEFBRjUwMDAyMDQyCis6MTA2MDkwMDA5MzZFMDAwNTMxQzkwMDAyMTUyMDAxNUQwMjAwMjgyMTIwCis6MTA2MEEwMDA5Mzc4MDAyMzAyMDAyODIxMzMwRjAwMjAxNUUwMDE1OEM3Cis6MTA2MEIwMDAyNDA0MDA4RDkzNjIwMDNGMjQxOTAwMTIzMDVGMDBGRjFBCis6MTA2MEMwMDAxM0Y5MDE1MzI0MDQwMDgxMEUwMDAyNTAwMjAwMjAyMTI0Cis6MTA2MEQwMDA5Mzc0MDAyMzI0MEEwMDA0MDIwMDIwMjEzNjgzMDA0MjI2Cis6MTA2MEUwMDBBMzYzMDAyMzBFMDAwMjU5QTM2QTAwN0Q4RjRCMDE3ODQxCis6MTA2MEYwMDAwNTYwRkZGRTI0MDUwMDAyQUY1MDAxNDBBMzQ1MDE0NEE2Cis6MTA2MTAwMDA4RjkwMDAxQzNDMEMxMDAwQUY0QzAxNzgwQTAwMDNGOTgyCis6MTA2MTEwMDAwMDExMTAyQjhFMTAwMDA0QUY1MDAwMjA5MzZEMDAwNTZECis6MTA2MTIwMDAzMUE4MDAwMjU1MDAwMTc4MjQwNDAwOEE5MzY0MDAzRkRFCis6MTA2MTMwMDAyNDA3MDAwNDAyMDAyODIxMzA4NjAwRkYxMEM3MDAxMDQ5Cis6MTA2MTQwMDAyNDA0MDA4MTBFMDAwMjUwMDIwMDIwMjE5MzdGMDAyM0NFCis6MTA2MTUwMDAyNDE4MDAxMjI0MEZGRkZFMzdGOTAwMjBBMzc5MDAyMzMyCis6MTA2MTYwMDBBMzc4MDAzRjkzNkUwMDA1MDIwMDIwMjEwMUNGNDgyNDUwCis6MTA2MTcwMDAwRTAwMDI1OUEzNjkwMDA1MDIwMDI4MjEwMDAwMjAyMTE5Cis6MTA2MTgwMDAwRTAwMDM0MDAwMDAwMDAwMEEwMDAzRjg4RjkwMDAxQzdFCis6MTA2MTkwMDA4RTA1MDAwNDNDMEYwMDA4MDM0RjQwMjFBRjQ1MDAyMDRFCis6MTA2MUEwMDA5MTBFMDAwMDI0MDYwMDUwMzFDOTAwRkYxMTI2MDE3QTJCCis6MTA2MUIwMDAyNDA0MDA4ODhGNTkwMUI4MDcyMEZGRkUzQzBDNDAwRUQ0Cis6MTA2MUMwMDAwMDhDNTgyNTNDMDMxMDAwQUY0NTAxODBBRjQwMDE4NDhFCis6MTA2MUQwMDBBRjRCMDE4OEFGNDMwMUI4OTEwMjAwMDAyNDBBRkY4MDUxCis6MTA2MUUwMDAyNDA0MDAwNDAwNEFGODI1QTExRjAwMDAwRTAwMEM3RkMzCis6MTA2MUYwMDAyNDA2MDAzMDBBMDAwM0Y4OEY5MDAwMUM4RTBGMDAwNDY0Cis6MTA2MjAwMDAzQzE0MDgwMDI2OTQ1Q0I4M0MwMTA4MDBBQzJGNUNCODM0Cis6MTA2MjEwMDBBRjRGMDAyMDkyMEUwMDAzMzFDOTAwMDQxMTIwMDAwMjhDCis6MTA2MjIwMDAyNDAyMDAxMjI0MDIwMDA2QTM2MjAwM0Y5MjAzMDAxQjE2Cis6MTA2MjMwMDAyNDBBRkZDMDMwNjIwMDNGMDA0QUY4MjVBMzdGMDAzRUQ5Cis6MTA2MjQwMDA5MjE5MDAwMzMzMzgwMDAxMTcwMDAxMjIwMDAwMDAwMEZBCis6MTA2MjUwMDA4RTAyMDAwOEFFODIwMDA4M0MwMjA4MDA4QzQyNUNDMDNFCis6MTA2MjYwMDAxMDQwMDEyRDAwMDAwMDAwMDAwMjIxQzJBNzY0MDAwOEI4Cis6MTA2MjcwMDA4RTBEMDAwQzI0MEIwMDAxMjQxNDAwMTRBRjZEMDAyQ0IzCis6MTA2MjgwMDA4RTA4MDAxMEFGNjgwMDMwOTYwNTAwMTZBNzY1MDAzODJDCis6MTA2MjkwMDA5NjBDMDAxNEE3NkMwMDNBQUY2QjAwMENBNzZCMDAxMEIzCis6MTA2MkEwMDBBNzZCMDAxMkE3NkIwMDE0QTc2QjAwMTYxMjIwMDE0QUZGCis6MTA2MkIwMDBBMzc0MDAzNDkyMDYwMDAzMzBDNzAwMDIyQ0YwMDAwMUUyCis6MTA2MkMwMDAyNjAyMDAwODhGOTAwMDFDMEEwMDAzNzNBRjgyMDAyODhBCis6MTA2MkQwMDA4RTE0MDAwNDI0MDMwMDgxQUY1NDAwMjA5MzY4MDAyMzJGCis6MTA2MkUwMDAzMTA1MDAxMDEwQTAwMTEzMDAwMDAwMDA4RjQ0MDFCODE4Cis6MTA2MkYwMDAwNDgwRkZGRTNDMDY0MDFGMDAxMTM4MkIwMDY2MTAyNTZECis6MTA2MzAwMDAzQzExMTAwMEFGNTQwMTgwQUY4NzAwMjhBRjQwMDE4NERBCis6MTA2MzEwMDBBRjQyMDE4OEFGNTEwMUI4MEEwMDAzNzQ4RjkxMDAxNDk1Cis6MTA2MzIwMDA4RTA2MDAwNDNDMTkwMDA4MDM1OTIwMjFBRjQ2MDAyMEM2Cis6MTA2MzMwMDA4RTA3MDAwODkwOTgwMDAwMjQwRjAwNTAzMzE0MDBGRkNGCis6MTA2MzQwMDAxMjhGMDEwNjI0MDUwMDg4OEY0NDAxQjgwNDgwRkZGRUU3Cis6MTA2MzUwMDAzQzBENDAwOTAwMTE2MDJCMDBBRDEwMjUzQzExMTAwMEQwCis6MTA2MzYwMDBBRjQ2MDE4MEFGOEMwMDI4QUY0NzAxODRBRjQyMDE4ODVGCis6MTA2MzcwMDBBRjUxMDFCODBBMDAwMzc0OEY5MTAwMTQ4RTA0MDAxQzAxCis6MTA2MzgwMDAwRTAwMDIzQjAwMDAwMDAwMTA0MDAwRDcwMDQwNDgyMUYyCis6MTA2MzkwMDA4RjkwMDAxQzI0MDUwMDg5OEY0RDAxQjgwNUEwRkZGRUQ5Cis6MTA2M0EwMDAwMDAwMDAwMEFGNDkwMTgwOEUwRjAwMUMzQzE0NDAwMTJBCis6MTA2M0IwMDAwMDExNzAyQjAwQjQ0ODI1M0MxMTEwMDBBRjRGMDE4NDMwCis6MTA2M0MwMDBBRjhFMDAyOEFGNDkwMTg4QUY1MTAxQjgwQTAwMDM3NEFECis6MTA2M0QwMDA4RjkxMDAxNDk2MTkwMDAyM0MxNDA4MDAyNjk0NUNCOEIyCis6MTA2M0UwMDAzMzM4MDAwNDEzMDAwMDhFM0MwMjYwMDA4RTFGMDAxQzM2Cis6MTA2M0YwMDAzQzAxMDgwMEFDM0Y1Q0I4QUY1RjAwMjA5MjBDMDAxMDdECis6MTA2NDAwMDAyNDBCMDAxNDMxODQwMEZGMTQ4QjAwQUMwMDAwMDAwMDRBCis6MTA2NDEwMDA5NjA5MDAwMjMxMkQwMDAxMTVBMDAxNTIwMDAwMDAwMDc0Cis6MTA2NDIwMDA4RTAyMDAwNEFFODIwMDA4M0MwRTA4MDA4RENFNUNDMEQ3Cis6MTA2NDMwMDAxMUMwMDE0ODAwMDAwMDAwOEY2OTAwNzQzQzBFODAwMDBDCis6MTA2NDQwMDAyNDA0MDAwMTAxMkU2ODI1QUY2RDAwNzRBMzYwMDAwNUNGCis6MTA2NDUwMDBBRjY0MDAwQzNDMEMwODAwOEQ4QzVDQzA4Rjg4MDAxQzY1Cis6MTA2NDYwMDBBNzY0MDAxMDAwMEM1OUMyQTc2NDAwMTJBNzY0MDAxNEFFCis6MTA2NDcwMDBBNzY0MDAxNkE3NkIwMDA4OEQwMzAwMDgyNDA0MDAwMjFGCis6MTA2NDgwMDBBRjYzMDAyQzhEMEEwMDBDQUY2QTAwMzA5MTA3MDAxMDNBCis6MTA2NDkwMDBBMzY3MDAzNDhGODIwMDFDOTA0NTAwMTFBMzY1MDAzNTZFCis6MTA2NEEwMDA4Rjg2MDAxQzkwRDAwMDEyQTM3MDAwMzY4RjlGMDAxQ0I2Cis6MTA2NEIwMDA5M0Y5MDAxM0EzNzkwMDM3OEY5MDAwMUM5NjE4MDAxNEVECis6MTA2NEMwMDBBNzc4MDAzODk2MTQwMDE2QTc3NDAwM0E4RTBGMDAxOEFCCis6MTA2NEQwMDBBRjZGMDAyNDU2MjBGREE2QUY4NDAwMjgzQzA1MDgwMEJECis6MTA2NEUwMDAyNEE1NUNCODBFMDAwMjVFMDAwMDIwMjE4RjkwMDAxQ0U1Cis6MTA2NEYwMDAwQTAwMDRCNjAwMDAyMDIxM0MwNTA4MDAyNEE1NUNCODcxCis6MTA2NTAwMDAwRTAwMDI4NzI0MDQwMDgyOEY5MDAwMUMwMDAwMzAyMUJFCis6MTA2NTEwMDAwQTAwMDM3M0FGODYwMDI4M0MwNDA4MDA4Qzg0NUNCODMyCis6MTA2NTIwMDAwRTAwMTU3NzAwMDAwMDAwOEY5MDAwMUMwQTAwMDQ5MEY4Cis6MTA2NTMwMDAwMDAwMTgyMTNDMDUwODAwMjRBNTVDQjgwRTAwMDI4NzY1Cis6MTA2NTQwMDAyNDA0MDA4QjhGOTAwMDFDMDAxMTMwMkIwQTAwMDM3MzcxCis6MTA2NTUwMDBBRjg2MDAyODNDMTkwODAwOEYzOTVDQjgzQzFGMDgwMDQyCis6MTA2NTYwMDA4RkZGMDA1MDI0Q0NGRkZFMDMzRjc4MjEwMUY4NzAyNEY4Cis6MTA2NTcwMDBBRjRFMDAyODNDMDQwODAwOEM4NDVDQjgzQzA5MDgwMDNECis6MTA2NTgwMDA4RDI5MDA1MDAwODk2ODIxMzFBODAwN0YwMTFBMjgyMTM3Cis6MTA2NTkwMDAwMEE3ODAyMUFFMDYwMEQ4QUY5MDAwRDBBRTAwMDBEQzhFCis6MTA2NUEwMDAwQTAwMDNDMkFFMEMwMTA4QUY2MDAwODQzQzA1MDgwMDdECis6MTA2NUIwMDA4Q0E1NUNCODNDMDgwODAwOEQwODAwNTAyNDBDRkY4MEI2Cis6MTA2NUMwMDAzQzAyMDAwQzAwQThBMDIxMDI4QzU4MjRBRjRCMDAyOEVDCis6MTA2NUQwMDA4RTFGMDAxNDMyODMwMDdGMDA3QTUwMjEwMTQyNzAyMTA3Cis6MTA2NUUwMDBBRERGMDBEODhFMTkwMDE0QUY4RTAwRDBBREQ5MDBEQzFECis6MTA2NUYwMDA4RTE4MDAxMDI3MEZGRkZFMEEwMDA0MTVBRENGMDEwODBBCis6MTA2NjAwMDA1NDhCRkUyRjI0MDU0MDAwMEEwMDA0NDcyNDA1MTAwMDg3Cis6MTA2NjEwMDAwRTAwMDMzNTAwMDAwMDAwMEEwMDAzRjg4RjkwMDAxQ0Y0Cis6MTA2NjIwMDA4QzQ2NDQyQzNDMDU2QzYyMzRCMDc5NzAzQzAxMDgwMDA3Cis6MTA2NjMwMDBBQzIwNUNCODE0RDAwMDA4MjQwNDAwMDI5Nzg4MDAzNDExCis6MTA2NjQwMDA5NzhBMDAyQzAyODAyODIxMDEwQTM4MkIxMEUwMDAxMUMzCis6MTA2NjUwMDAyNDA0MDA5MjI0MDQwMDAyMEUwMDBDOUQyNDA1MDE0MDM1Cis6MTA2NjYwMDAzQzAxMDgwMEFDMjI1Q0I4QUY0MjAwMjAzQzAzMDgwMEFCCis6MTA2NjcwMDA4QzYzNUNCODEwNjAwMDA1MjQwNDAwODMwRTAwMDg2ODc5Cis6MTA2NjgwMDAwMDAwMDAwMDEwNDAwMDA5MjQwNDAwODMzQzA1MDgwMEJECis6MTA2NjkwMDAyNEE1NUNCODBFMDAwMjVFMDAwMDAwMDA4RjkwMDAxQzc0Cis6MTA2NkEwMDAwMDExMjAyQjBBMDAwMzczQUY4NDAwMjgwRTAwMDg2QzMxCis6MTA2NkIwMDAwMDAwMDAwMDBBMDAwNTk2OEY5MDAwMUMwRTAwMDg3MDc0Cis6MTA2NkMwMDAwMDAwMDAwMDNDMDUwODAwMjRBNTVDQjgwQTAwMDYzQzU4Cis6MTA2NkQwMDAyNDA0MDA4QjhFMDQwMDA4MEUwMDAyM0IwMDAwMDAwMDIyCis6MTA2NkUwMDAwQTAwMDUyREFFODIwMDA4MjQwNDAwMDQwRTAwMEM5RDUzCis6MTA2NkYwMDAyNDA1MDAzMDE0NDAwMDNGMDA0MDQ4MjE4RjkwMDAxQ0NBCis6MTA2NzAwMDAwQTAwMDU3RDI0MDUwMDgzMEUwMDAzNDAwMjAwMjgyMUI1Cis6MTA2NzEwMDAwQTAwMDRFMjAwMDAwMDAwM0MwNTA4MDAyNEE1NUNCODYzCis6MTA2NzIwMDAwRTAwMDIzMDI0MDQwMDg3OEY5MDAwMUMwQTAwMDU0OUU3Cis6MTA2NzMwMDAwMDExMTAyQjBFMDAwMjUwMDI4MDIwMjE5MzcwMDAyM0M0Cis6MTA2NzQwMDAwMjgwMjAyMTM2MEQwMDEwMEUwMDAyNTlBMzZEMDAyMzk3Cis6MTA2NzUwMDA4RjkwMDAxQzBBMDAwNTUyMDAwMDE4MjE5MjA1MDAwQ0MxCis6MTA2NzYwMDAzMEJGMDAwMTEzRTAwMDAzMDAwMDAwMDA5NjAyMDAwRTlECis6MTA2NzcwMDBBNDgyMDAyQzkyMEEwMDBDMzE0ODAwMDIxMTAwRkVGMkEzCis6MTA2NzgwMDAwMDAwMjgyMTk2MEIwMDEyOEUwMzAwMTRBNDhCMDAxQTFGCis6MTA2NzkwMDAwQTAwMDU2OUFDODMwMDFDOEY4MzAwMzg4Rjg3MDAzMEE2Cis6MTA2N0EwMDAxMDY3RkU4NDAwMDAyMDIxM0MwOTA4MDAyNTI5NUMzQzdDCis6MTA2N0IwMDAwMDAzMjBDMDAwODkzMDIxOENENDAwMDAxMjg1MDA1RUM3Cis6MTA2N0MwMDAyNDc4MDAwMTMzMDMwMDBGNTQ2N0ZGRkEwMDAzMjBDMDUwCis6MTA2N0QwMDAwQTAwMDUwNDAwMDAyMDIxM0MwNTA4MDAyNEE1NUNCODNGCis6MTA2N0UwMDAwRTAwMDI4NzI0MDQwMDgyOEY5MDAwMUMwQTAwMDU0OUQ1Cis6MTA2N0YwMDAwMDAwMTAyMTNDMEIwMDA4MDM0QjIwMjEyNDAzMDA1MDEzCis6MTA2ODAwMDAyNDBBMDAwMUFGNDIwMDIwQTA4MzAwMDBBMDhBMDAwMUZBCis6MTA2ODEwMDA4Rjg4MDAxQzkxMDcwMDA0QTA4NzAwMTg4RjgyMDAxQzNECis6MTA2ODIwMDA5MDQ1MDAwNUEwODUwMDE5OEY4NjAwMUM5MERGMDAwNkFBCis6MTA2ODMwMDBBMDlGMDAxQThGOTkwMDFDOTMzODAwMDdBMDk4MDAxQjk2Cis6MTA2ODQwMDA4Rjk0MDAxQzkyOEYwMDA4QTA4RjAwMUM4RjkwMDAxQzVBCis6MTA2ODUwMDA5MjBFMDAwOUEwOEUwMDFEOEY4RDAwMUM5MUFDMDAwQUM1Cis6MTA2ODYwMDBBMDhDMDAxRThGOEIwMDFDM0MwQzA4MDAyNThDNUMzQzBGCis6MTA2ODcwMDA5MTYzMDAwQjNDMEIwODAwMjU2QjVDMzhBMDgzMDAxRjY0Cis6MTA2ODgwMDA4RjhBMDAxQzkxNDgwMDBDQTA4ODAwMjA4Rjg3MDAxQzc0Cis6MTA2ODkwMDA5MEU1MDAwREEwODUwMDIxOEY4MjAwMUMyNDA1NDY0NjRFCis6MTA2OEEwMDA5MDQ2MDAwRUEwODYwMDIyOEY5RjAwMUM5M0Y5MDAwRkQ3Cis6MTA2OEIwMDBBMDk5MDAyMzhGOTgwMDFDOTMxNDAwMTBBMDk0MDAyNDJBCis6MTA2OEMwMDA4RjhGMDAxQzkxRjAwMDExQTA5MDAwMjU4RjkwMDAxQzZDCis6MTA2OEQwMDA4RjhFMDAzMDhGOTkwMDM4OTYwRDAwMTQwMDBFMThDMDZFCis6MTA2OEUwMDAyNUM4MDAwMUE0OEQwMDI4OTYwQTAwMTYwMDZDMzAyMUVFCis6MTA2OEYwMDAwMDZCRjgyMUE0OEEwMDJBOTYwNzAwMTgzMTA4MDAwRkJGCis6MTA2OTAwMDBBNDg3MDAyQ0E0ODUwMDJFOEUwMjAwMUNBQ0M5MDAwMEI4Cis6MTA2OTEwMDBBRjg4MDAzMDExMTkwMDAzQUZFMjAwMDAwQTAwMDU3REM2Cis6MTA2OTIwMDAwMDAwMjgyMTI1MEMwMDAxMzE4NDAwMEYwMDAwMjgyMURGCis6MTA2OTMwMDAwQTAwMDU3REFGODQwMDM4M0MwNzA4MDAyNEU3NUMzODc2Cis6MTA2OTQwMDAwMDg3ODAyMTAwMDAyMDIxQUNDMDAwMDAwQTAwMDUwNDVGCis6MTA2OTUwMDBBRTAwMDAwMDNDMDUwODAwMjRBNTVDQjgwQTAwMDYzQzE3Cis6MTA2OTYwMDAyNDA0MDA4NzhFMDQwMDA0MEUwMDAyM0IwMDAwMDAwMDk3Cis6MTA2OTcwMDAwQTAwMDVBMUFFODIwMDA4MzA4NEZGRkYzMEM2MDBGRjg4Cis6MTA2OTgwMDA4RjQyMDFCODA0NDBGRkZFMDAwNjQ0MDAwMTA0MzAyNTk4Cis6MTA2OTkwMDAzQzA3MjAwMDAwQzcyMDI1M0MwMzEwMDBBRjQwMDE4MEM5Cis6MTA2OUEwMDBBRjQ1MDE4NEFGNDQwMTg4MDNFMDAwMDhBRjQzMDFCODVDCis6MTA2OUIwMDAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQzQzA3NjAwMDc4Cis6MTA2OUMwMDAyNDA2MDAwMjEwODAwMDA2MDBBMDgwMjEwMDEwMTAyQjc5Cis6MTA2OUQwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODFGCis6MTA2OUUwMDAzQzA5NjAwRUFEMjAwMDM0OENFNTIwMUM4RjgyMDAxQzE5Cis6MTA2OUYwMDAyNDA4RkZGQzAwQTgxODI0QUNFMzIwMUMwRTAwMDZGNUI4Cis6MTA2QTAwMDA4QzQ1MDAwQzAwMTAxMDJCOEZCRjAwMTQ4RkIwMDAxMEFECis6MTA2QTEwMDAwM0UwMDAwODI3QkQwMDE4M0MwMjYwMEUzNDQ3MDEwMDY3Cis6MTA2QTIwMDAyNDA5MDAxODI3NEEwNDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTA2QTMwMDAwMDAwMDAwMDNDMDYwMDUwMzRDMzAyMDBBRjQ0MDAzOEEwCis6MTA2QTQwMDBBRjQ1MDAzQ0FGNDMwMDMwMDE0MDE4MjE4RjRCMDAwMEEwCis6MTA2QTUwMDAzMTY4MDAyMDExMDBGRkZEMjQwNjAwN0YyNDA4RkZGRjlECis6MTA2QTYwMDA4QzZDMDAwMDI0QzZGRkZGMjQ2MzAwMDRBQ0VDMDAwMDIzCis6MTA2QTcwMDAxNEM4RkZGQjI0RTcwMDA0MDAwMDAwMDAwMDAwMDAwMDMxCis6MTA2QTgwMDAwMDAwMDAwMDNDMEYwMDIwQUY0RjAwMzAwMDAwMDAwMDZECis6MTA2QTkwMDAyNEFEMDIwMDAxQTU3MDJCMjUyOUZGRkYwMDhFMjAyMUM3Cis6MTA2QUEwMDAxNTIwRkZFMTAxQTAyODIxMDNFMDAwMDgwMDAwMDAwMEZDCis6MTA2QUIwMDAyN0JERkZFMEFGQjEwMDE0QUZCRjAwMThBRkIwMDAxMEFBCis6MTA2QUMwMDAzQzA1NjAwRThDQTIwMDM0MDA4MDg4MjExNDQwMDAwNjMyCis6MTA2QUQwMDAzQzA0NjAwMDhDODcyMDFDMjQwOEZGRkMwMEU4MzAyNDY0Cis6MTA2QUUwMDAzNEMzMDAwMUFDODMyMDFDOEY4QjAwMUMyNDA5MDAwMURGCis6MTA2QUYwMDBBQ0E5MDAzNDk1NjkwMDAyOEQ2NTAwMTQ4RDcwMDAwQ0ZFCis6MTA2QjAwMDAyRDI0MDA4MThENjcwMDA0OEQ2NjAwMDgxMDgwMDAwNzI5Cis6MTA2QjEwMDA4RDZBMDAxMDJEMkMwMDA0MTU4MDAwMEUzMENFMDAwNzY5Cis6MTA2QjIwMDAzMTJEMDAwMzExQTAwMDBCMDAwMDAwMDAyNDA0MDA4Qjk1Cis6MTA2QjMwMDAwMjAwMjgyMTBFMDAwNkY1MjQwNjAwMDMwMDExMTAyQjg4Cis6MTA2QjQwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODUxCis6MTA2QjUwMDAyN0JEMDAyMDE1QzBGRkY2MjQwNDAwOEIzQzAzMDAyMDU1Cis6MTA2QjYwMDBBRjQzMDAzMDAwMDAwMDAwMjQwMjAwMDFBRjgyMDAxNDk3Cis6MTA2QjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzFGMDE1MDY5Cis6MTA2QjgwMDAwMTNGQzgyNTI1MzgwMDAzM0MwRjYwMEVBRjQ3MDAzODkxCis6MTA2QjkwMDAwMDE4MTg4MkFGNDYwMDNDMzVFODAwM0NBRjU5MDAzMDgxCis6MTA2QkEwMDAyNzQ3MDQwMDhGNDQwMDAwMzA4NjAwMjAxMEMwRkZGREZFCis6MTA2QkIwMDAwMDAwMDAwMDEwNjAwMDA4MjQ2NkZGRkYyNDAzRkZGRkIwCis6MTA2QkMwMDA4Q0VCMDAwMDI0QzZGRkZGMjRFNzAwMDRBRDBCMDAwMDlGCis6MTA2QkQwMDAxNEMzRkZGQjI1MDgwMDA0M0MwODYwMEVBRDA5MDAzODEzCis6MTA2QkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzA3MDAyMDQyCis6MTA2QkYwMDBBRjQ3MDAzMDAwMDAwMDAwMEUwMDA3MUQwMTQwMjAyMUJCCis6MTA2QzAwMDAwMjAwMjgyMTAwMDAyMDIxMEUwMDA2RjUyNDA2MDAwM0MyCis6MTA2QzEwMDAwMDExMTAyQjhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDFGCis6MTA2QzIwMDAwM0UwMDAwODI3QkQwMDIwMjdCREZGRDhBRkIyMDAxODQxCis6MTA2QzMwMDAzMDkyRkZGRkFGQjEwMDE0QUZCRjAwMjBBRkIzMDAxQzE0Cis6MTA2QzQwMDBBRkIwMDAxMDEyNDAwMDJDMDAwMDg4MjEwQTAwMDdCNUU4Cis6MTA2QzUwMDAyNDEzMDAwMTUwQjMwMDQwOENFNTAwMEMwMDAwMDAwRDJGCis6MTA2QzYwMDAyNjM5MDAwMTMzMzFGRkZGMjRGODAwMjAwMjMyMzgyQjhGCis6MTA2QzcwMDAxMEUwMDAyMUFGOTgwMDFDOEY4MjAwMTQxNDQwMDAxRTA5Cis6MTA2QzgwMDA4Rjg3MDAxQzNDMDY3MDAwM0MwMzIwMDA4Q0U0MDAwMDUxCis6MTA2QzkwMDAwMDg2MjgyNDE0QTMwMDE4OEY4NTAwM0MwMDA0NDQwMkI5Cis6MTA2Q0EwMDAzQzA5ODAwMDAwODk4MDI0MTRBMEZGRUEzMTA2MDBGRjFGCis6MTA2Q0IwMDAyNDBBMDAwMjEwQ0EwMDJFMjhDQjAwMDMxMTYwMDAxNjFGCis6MTA2Q0MwMDAyNDBDMDAwMzE0RDNGRkU3MjYzOTAwMDEwMjAwMjgyMTE5Cis6MTA2Q0QwMDAwRTAwMDcwMzI0MDQwMDAxOEY4NzAwMUNBRjgyMDAzQ0Q0Cis6MTA2Q0UwMDAyNjM5MDAwMTMzMzFGRkZGMjRGODAwMjAwMjMyMzgyQjBGCis6MTA2Q0YwMDAxNEUwRkZFMUFGOTgwMDFDMDIyMDEwMjE4RkJGMDAyMDlDCis6MTA2RDAwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDI5Cis6MTA2RDEwMDAwM0UwMDAwODI3QkQwMDI4MTBDQzAwMUEyNDBEMDAwNDUxCis6MTA2RDIwMDAxNENERkZEMDI2MzkwMDAxMzA4RUZGRkYwMDBFMTlDMEIwCis6MTA2RDMwMDA4RjQ0MDFCODA0ODBGRkZFM0MwRjEwMDAzQzEwMjAwNDdCCis6MTA2RDQwMDBBRjQzMDE4MEFGNDAwMTg0QUY1MDAxODhBRjRGMDFCODFECis6MTA2RDUwMDAwQTAwMDdCMDI2MzkwMDAxMEUwMDA2RjUyNDA0MDA4NDVECis6MTA2RDYwMDAxNjAwRkZCRjhGODcwMDFDMEEwMDA3QUZBRjgwMDAzQ0YyCis6MTA2RDcwMDAwMjAwMjgyMTBFMDAwNzAzMDAwMDIwMjEwQTAwMDdDRTkwCis6MTA2RDgwMDA4Rjg3MDAxQzBFMDAwNzQzMDIwMDIwMjE4Rjg3MDAxQzA0Cis6MTA2RDkwMDAwQTAwMDdDRkFGODIwMDNDMzA4MkZGRkYxNDQwMDAwMzlGCis6MTA2REEwMDAwMDAwMTgyMTAwMDQyNDAyMjQwMzAwMTAzMDg1MDBGRjk1Cis6MTA2REIwMDAxNEEwMDAwNTMwODcwMDBGMjQ2NjAwMDgwMDA0MjIwMjlBCis6MTA2REMwMDAzMEMzMDBGRjMwODcwMDBGMTRFMDAwMDUzMDg5MDAwMzU2Cis6MTA2REQwMDAyNDY4MDAwNDAwMDQyMTAyMzEwMzAwRkYzMDg5MDAwMzBECis6MTA2REUwMDAxNTIwMDAwNTM4OEIwMDAxMjQ2QTAwMDIwMDA0MjA4MjZGCis6MTA2REYwMDAzMTQzMDBGRjM4OEIwMDAxMzE2NDAwMDExMDgwMDAwMjM0Cis6MTA2RTAwMDAyNDZDMDAwMTMxODMwMEZGMDNFMDAwMDgwMDYwMTAyMUMyCis6MTA2RTEwMDAzMDhCRkZGRjAwMEIzOTQyMzBFNjAwRkYzQzA5MDgwMEQxCis6MTA2RTIwMDAyNTI5NUJCODAwMDY0MDgwMDEwOTYwMjE4RDg3MDAwMDlDCis6MTA2RTMwMDAzMTY0MDAxRjI0MEEwMDAxMDA4QTE4MDQzMEE1MDBGRkY1Cis6MTA2RTQwMDAwMEUzMjAyNTE0QTAwMDAyMDAwMzEwMjcwMEUyMjAyNDA0Cis6MTA2RTUwMDAyNDBGMDAwMTAwQ0Y3MDA0MDEwOTY4MjEwMDBFMjgyN0NCCis6MTA2RTYwMDAxNDgwMDAwNUFEQTQwMDAwOEY4NjAwMEMwMEE2MTAyNDNECis6MTA2RTcwMDAwM0UwMDAwOEFGODIwMDBDOEY4ODAwMEMwMUM4MTAyNUM5Cis6MTA2RTgwMDAwM0UwMDAwOEFGODIwMDBDM0MwNjAwMUYzQzAzNjAwMERBCis6MTA2RTkwMDAzMDg0RkZGRjM0QzVGRjgwMjQwMjAwMjBBQzYwMjAwODRFCis6MTA2RUEwMDBBQzYwMjAwQ0FDNjAyMDEwQUM2NTIwMTRBQzY0MjAxOEUxCis6MTA2RUIwMDBBQzYyMjAwMDAwMDAwMDAwMDAwMDAwMDAwM0UwMDAwOEI5Cis6MTA2RUMwMDAwMDAwMDAwMDI3QkRGRkU4MjQwMkZGRkZBRkJGMDAxMDU1Cis6MTA2RUQwMDBBRjgyMDAwQzAwMDAyMDIxM0MwNjA4MDAyNEM2NUJCOEVECis6MTA2RUUwMDAyNDA1RkZGRjI0ODkwMDAxMDAwNDQwODAzMTI0RkZGRkI2Cis6MTA2RUYwMDAwMTA2MTgyMTJDODcwMDIwMTRFMEZGRkFBQzY1MDAwMDgxCis6MTA2RjAwMDAwRTAwMDgzOTAwMDAyMDIxMjQwMjAwMDEzQzA0NjAwMDJBCis6MTA2RjEwMDAyNDA1MDAyMEFDODIyMDE4QUM4NTIwMDAwMDAwMDAwMDcxCis6MTA2RjIwMDAwMDAwMDAwMDAwMDAwMDAwMjQ0QTAwMDEzMTQyRkZGRjgxCis6MTA2RjMwMDAyQzQ2MDQwMDE0QzBGRkY3OEZCRjAwMTAwM0UwMDAwOEM4Cis6MTA2RjQwMDAyN0JEMDAxODhGODMwMDA4MkM2MjA0MDAwM0UwMDAwOEFFCis6MTA2RjUwMDAzODQyMDAwMThGODMwMDA4MjQ2MjAwMDEwM0UwMDAwODJBCis6MTA2RjYwMDBBRjgyMDAwODhGODMwMDA4MjQ2MkZGRkYwM0UwMDAwODVGCis6MTA2RjcwMDBBRjgyMDAwODI3QkRGRkUwQUZCMTAwMTRBRkJGMDAxODFCCis6MTA2RjgwMDBBRkIwMDAxMDhGNkIwMDMwM0MwNjYwMDAwMDgwODgyMTlECis6MTA2RjkwMDBBQ0NCMjAwODhGNkEwMDJDM0MwMjgwMDAyNDAzMDAwODQwCis6MTA2RkEwMDBBQ0NBMjAwQzk3NjkwMDNBOTc2ODAwMzgwMDA5MkMwMDk5Cis6MTA2RkIwMDAzMTA3RkZGRjAwQTcyMDI1QUNDNDIwMTBBQ0MyMjAxNDZECis6MTA2RkMwMDBBQ0MzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTA2RkQwMDAzQzAzNjAwMDhDNkQyMDAwMzFBQzAwMDgxNTgwRkZGOTg3Cis6MTA2RkUwMDAwMDAwMDAwMDhDNkUyMDE0MDVDMDAwMjAwMDAwMDAwMDhFCis6MTA2RkYwMDAwRTAwMDdGRDhGODQwMDBDMDAwMjQwODAzQzA5MDgwMDUxCis6MTA3MDAwMDAyNTI5NUJCODAxMDkzODIxOENFNDAwMDAwRTAwMDdGRDNBCis6MTA3MDEwMDAwMDAyODE0MDAyMDIyMDIxMzA5MEZGRkYwMjAwMjAyMTY3Cis6MTA3MDIwMDAwRTAwMDgxQjAwMDAyODIxM0MwQzgwMDAwMjJDNTgyNTczCis6MTA3MDMwMDAzMjEwRkZGRjNDMTE2MDAwMjQwQTAwMjBBRTJCMjAxNDA4Cis6MTA3MDQwMDBBRTMwMjAxOEFFMkEyMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTA3MDUwMDAwMDAwMDAwMDAyMDAxMDIxOEZCRjAwMTg4RkIxMDAxNDQzCis6MTA3MDYwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA4QzY2MjAxNEJDCis6MTA3MDcwMDAzQzAyMDAxRjM0NDNGRjgwM0MxRkZGRTgwMEMzQzAyNEQ0Cis6MTA3MDgwMDAzN0Y5MDgwMDAzMTk4MDIxMDAxMDc5QzIzQzBDODAwMEY4Cis6MTA3MDkwMDAwMjJDNTgyNTMxRjBGRkZGM0MxMTYwMDAyNDBBMDAyMDJCCis6MTA3MEEwMDBBRTJCMjAxNEFFMzAyMDE4QUUyQTIwMDAwMDAwMDAwMEM1Cis6MTA3MEIwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxODM3Cis6MTA3MEMwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDJFCis6MTA3MEQwMDAyN0JERkZFOEFGQjAwMDEwMzQwMkZGRkYzMDkwRkZGRjg0Cis6MTA3MEUwMDBBRkJGMDAxNDEyMDIwMDA2MDIwMDIwMjEwRTAwMDgzOTcyCis6MTA3MEYwMDAwMDAwMDAwMDAyMDAyMDIxMEUwMDA4MUIyNDA1MDAwMUYyCis6MTA3MTAwMDA4Rjg0MDAwODhGQkYwMDE0OEZCMDAwMTAyNDgzRkZGRjBFCis6MTA3MTEwMDAyN0JEMDAxODAzRTAwMDA4QUY4MzAwMDgwMDA0MzlDMjRGCis6MTA3MTIwMDAzMEU2MDAzRjAwMDQzQjQyMDAwNzE4NDAyNDAyMTAwMEY0Cis6MTA3MTMwMDAyQ0M0MDAyMDI0QzhGRkUwQUY0MjAwMkMyNDYzMDAwMUNGCis6MTA3MTQwMDAxNDgwMDAwMzMwQTkwMEZGMDAwNzE4NDAzMTA2MDBGRjNCCis6MTA3MTUwMDAwMDAzNjA4MDI0MDgwMDAxMDE5QTU4MjEzQzBBMDAwRUI3Cis6MTA3MTYwMDAwMEM4MjgwNDAxNkEzODIxMTEyMDAwMDUwMDA1MzAyN0Q1Cis6MTA3MTcwMDA4Q0U5MDAwMDAxMjUzMDI1MDNFMDAwMDhBQ0U2MDAwMEEyCis6MTA3MTgwMDA4Q0VFMDAwMDAxQzY2ODI0MDNFMDAwMDhBQ0VEMDAwMEFFCis6MTA3MTkwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAzQzA0NjAwMDkzCis6MTA3MUEwMDA4Qzg1MDgwODM0MDNGMDAwMzBBMkYwMDA1MDQzMDAwNjNDCis6MTA3MUIwMDAyNDAyMDAwMThDODcwODA4MzQwNEUwMDAzMEU2RjAwMDY3Cis6MTA3MUMwMDAxMEM0MDAxRTI0MDIwMDAyQUY4MjAwNDAzQzEwNjAwMDg4Cis6MTA3MUQwMDAzQzBBMDIwMEFFMEEwODE0MjQwOTEwMDAzQzA4MDAwRTA0Cis6MTA3MUUwMDA4RTAzNDQwMDAzNDgyMDIxQUY0OTAwMkMyNDA1MDEyMEQwCis6MTA3MUYwMDAwRTAwMENFMzAwMDAzMDIxOEY4MzAwNDAxMDYwMDAwNDdCCis6MTA3MjAwMDAzQzAyMTY5MTI0MEIwMDAxMTA2QjAwMEUzQzAyM0Q2Q0Y5Cis6MTA3MjEwMDAzNDRGMDA5MEFFMEY0NDA4OEZCRjAwMTQ4RkIwMDAxMEExCis6MTA3MjIwMDAzQzBDNjAwMDI0MEUxMDAwM0MwRDAyMDAyN0JEMDAxODJECis6MTA3MjMwMDBBRDhFNDQyMDAzRTAwMDA4QUQ4RDA4MTAwQTAwMDkwQTU1Cis6MTA3MjQwMDBBRjgwMDA0MDNDMDIxOERBMzQ0RjAwOTBBRTBGNDQwODgzCis6MTA3MjUwMDA4RkJGMDAxNDhGQjAwMDEwM0MwQzYwMDAyNDBFMTAwMDkzCis6MTA3MjYwMDAzQzBEMDIwMDI3QkQwMDE4QUQ4RTQ0MjAwM0UwMDAwODRECis6MTA3MjcwMDBBRDhEMDgxMDBBMDAwOERFMjQwNTAwMDEwQTAwMDhERUIyCis6MTA3MjgwMDAwMDAwMjgyMTNDMDgwODAwMjUwODVGQzQyNDA0RkZGRkYzCis6MTA3MjkwMDAwMTAwMTgyMTI0MDIwMDFFMjQ0MkZGRkZBQzY0MDAwMEZDCis6MTA3MkEwMDAwNDQxRkZGRDI0NjMwMDA0M0MwNzA4MDAyNEU3NjA0MDFDCis6MTA3MkIwMDA4Q0U1RkZGQzI0MDQwMDFDMjQwNjAwMDEzMDhBMDAxRjFBCis6MTA3MkMwMDAwMTQ2NDgwNDI0ODQwMDAxMDAwOTEwMjcyQzgzMDAyMDczCis6MTA3MkQwMDAxNDYwRkZGQTAwQTIyODI0QUNFNUZGRkMzQzA1NjY2NkJBCis6MTA3MkUwMDAzNEE0NjE2RTNDMDYwODAwMjRDNjYxMDBBRjg0MDA1OEQ3Cis6MTA3MkYwMDBBRjg4MDA5QzI0MDRGRkZGMDBDMDE4MjEyNDAyMDAxRjU3Cis6MTA3MzAwMDAyNDQyRkZGRkFDNjQwMDAwMDQ0MUZGRkQyNDYzMDAwNDNECis6MTA3MzEwMDAzQzA3NjY2NjNDMDUwODAwMjRBNTYwQzBBRjg2MDA0OEFGCis6MTA3MzIwMDAzNEU2NjE2RUFGODYwMDk4MjQwNEZGRkYwMEEwMTgyMUE4Cis6MTA3MzMwMDAyNDAyMDAwRjI0NDJGRkZGQUM2NDAwMDAwNDQxRkZGRDYzCis6MTA3MzQwMDAyNDYzMDAwNDNDMEI2NjY2M0MwNjA4MDAyNEM2NjA0MENCCis6MTA3MzUwMDAzNTY4NjE2RUFGODUwMEE0QUY4ODAwNzAyNDA0RkZGRjFDCis6MTA3MzYwMDAwMEMwMTgyMTI0MDIwMDFGMjQ0MkZGRkZBQzY0MDAwMDZCCis6MTA3MzcwMDAwNDQxRkZGRDI0NjMwMDA0M0MwRDY2NjYzQzBBMDgwMERFCis6MTA3MzgwMDAyNTRBNjE4MDM1QUM2MTZFQUY4NjAwOTBBRjhDMDA1Q0ExCis6MTA3MzkwMDAyNDA0RkZGRjAxNDAxODIxMjQwMjAwMDMyNDQyRkZGRkMwCis6MTA3M0EwMDBBQzY0MDAwMDA0NDFGRkZEMjQ2MzAwMDQzQzA5MDgwMEI0Cis6MTA3M0IwMDAyNTI5NjE5MDhEMjdGRkZDMjQwNDAwMDYyNDA1MDAwMTg3Cis6MTA3M0MwMDAzMDk5MDAxRjAzMjVDMDA0MjQ4NDAwMDEwMDE4NzgyNzg5Cis6MTA3M0QwMDAyQzhFMDAyMDE1QzBGRkZBMDBFRjM4MjRBRDI3RkZGQ0VCCis6MTA3M0UwMDAzQzA5NjY2NjI0MDMwNDAwMjQwNDAzREMyNDA1MDIwMDJGCis6MTA3M0YwMDAyNDA2MDA2NjM1MjI2MTZFM0MwODA4MDAyNTA4NUNDNDNFCis6MTA3NDAwMDBBRjgyMDA3NEFGODMwMDQ0QUY4MzAwNkNBRjgzMDA1MDQxCis6MTA3NDEwMDBBRjgzMDA4NEFGOEEwMDhDQUY4NDAwNjRBRjg1MDA0Q0RBCis6MTA3NDIwMDBBRjg2MDA1NEFGODQwMDc4QUY4NTAwNjBBRjg2MDA4MERGCis6MTA3NDMwMDAwMTAwMTgyMTI0MDIwMDAyMjQ0MkZGRkZBQzYwMDAwMDdBCis6MTA3NDQwMDAwNDQxRkZGRDI0NjMwMDA0MjQwNDAwMDMyNDAzMDAwQzEyCis6MTA3NDUwMDAzQzBBMDgwMDI1NEE1Q0QwQUY4QTAwNjgwQTAwMDlCMURFCis6MTA3NDYwMDAyNDA1RkZGRjAwMDQxODgwMjQ4NDAwMDEwMDY4NTgyMUNGCis6MTA3NDcwMDAyQzg3MDBDMDE0RTBGRkZCQUQ2NTAwMDAzQzBFNjY2NjgzCis6MTA3NDgwMDAzNUNENjE2RTI0MEMxN0EwMjQwODE4MDBBRjhEMDA4ODNDCis6MTA3NDkwMDBBRjhDMDA5NDAzRTAwMDA4QUY4ODAwN0MyNDg0MDA3RjU4Cis6MTA3NEEwMDAwMDA0MjFDMjAwMDA0MDIxMDAwMDMwMjEwMDAwMzgyMUVBCis6MTA3NEIwMDAwMDAwMjgyMTBBMDAwOUM4QUY4NDAwQTAxMDYwMDAwNjVGCis6MTA3NEMwMDAyNEU3MDAwMTAwQzQzMDIxMjRBNTAwMDEyQ0MyMEJGNUUzCis6MTA3NEQwMDAxNDQwRkZGQTJDQTMwMDY2M0MwOTA4MDAyNTI5NjE4MEFFCis6MTA3NEUwMDAwMTIwMTgyMTI0MDIwMDAzMjQ0MkZGRkZBQzYwMDAwMEE5Cis6MTA3NEYwMDAwNDQxRkZGRDI0NjMwMDA0MTBFMDAwMUEyNEUzRkZGRkIxCis6MTA3NTAwMDAwMDAzMjk0MjEwQTAwMDBBMDAwMDIwMjEyNDA2RkZGRkVBCis6MTA3NTEwMDAzQzAzMDgwMDI0NjM2MTgwMjQ4NDAwMDEwMDg1NTAyQjEzCis6MTA3NTIwMDBBQzY2MDAwMDI1MDgwMDAxMTU0MEZGRkIyNDYzMDAwNDQxCis6MTA3NTMwMDAzMEUyMDAxRjEwNDAwMDA4MDAwODY4ODAyNDBDMDAwMUExCis6MTA3NTQwMDAwMDRDMzgwNDAwMDg1ODgwMDE2OTI4MjEyNEU2RkZGRjE4Cis6MTA3NTUwMDAwM0UwMDAwOEFDQTYwMDAwMDFBOTQwMjEyNDA5RkZGRkI4Cis6MTA3NTYwMDBBRDA5MDAwMDAzRTAwMDA4MDAwMDAwMDBBRjQ0MDAyODVGCis6MTA3NTcwMDAzQzA0MDAwQzAzNDQyMDIxMDAwNTI4ODIwQTAwMENFMzhGCis6MTA3NTgwMDAwMDAwMzAyMTAwMDQyMTgwM0MwMzYwMDBBQzY0MTAwODNFCis6MTA3NTkwMDAwMDAwMDAwMDAwMDUyOTgwQUM2NTEwMEMwMDAwMDAwMDEwCis6MTA3NUEwMDAwM0UwMDAwODhDNjIxMDBDMjdCREZGRTgwMDgwMjgyMTUyCis6MTA3NUIwMDAyNDA0MDAzOEFGQkYwMDE0MEUwMDA5RjhBRkIwMDAxMDZCCis6MTA3NUMwMDAyNDA0MEUwMEFGNDQwMDI4M0MxMDAwMEMwMzUwMjAyMTdFCis6MTA3NUQwMDAyNDA1MDAxMDBFMDAwQ0UzMDAwMDMwMjEwMzUwMTAyMUEwCis6MTA3NUUwMDBBQzQwMDAwMEFDNDAwMDA0MjQwNDAwMzg4RkJGMDAxNEZECis6MTA3NUYwMDA4RkIwMDAxMDI0MDUzRkZGMjdCRDAwMTgwQTAwMDlGOENFCis6MTA3NjAwMDA4QzQzMDAwMDAwMDQyMTgwM0MwMzYwMDBBQzY0MTAwODNGCis6MTA3NjEwMDAwMDAwMDAwMDhDNjIxMDBDMDNFMDAwMDgwMDAyMTE4MkUwCis6MTA3NjIwMDAyN0JERkZDOEFGQjQwMDIwOEY5NDAwNjhBRkJFMDAzMDA0Cis6MTA3NjMwMDBBRkI3MDAyQ0FGQjYwMDI4MDAwMEI4MjEwMDgwQjAyMTAxCis6MTA3NjQwMDAyNDFFMDBDMEFGQkYwMDM0QUZCNTAwMjRBRkIzMDAxQzkwCis6MTA3NjUwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAwQTAwMEEzNTg1Cis6MTA3NjYwMDBBRkE1MDAzQzUwNDAwMDAxOEY5NDAwNjgyN0RFRkZGRjZCCis6MTA3NjcwMDAxM0MwMDAyODI2OTQwMDA0OEU5MjAwMDAzQzAzMDgwMEVBCis6MTA3NjgwMDAyNDYzNUZDMDEyNDBGRkY3MDI4MzEwMkIzQzA0MDgwMDA0Cis6MTA3NjkwMDAyNDg0NUNDNDAyODQxMDIzMDAwMkE4QzAwMDAwOTgyMTQ2Cis6MTA3NkEwMDAwQTAwMEE0NDI0MTEwMDAxMDAxMTg4NDAxMjIwMDAyNjFCCis6MTA3NkIwMDAwMDAwMDAwMDAyQjM4MDIxMDI1MTI4MjQwMjAwMjAyMTkyCis6MTA3NkMwMDAxMEEwRkZGOTI2NzMwMDAxMEUwMDBBMDEwMDAwMDAwMDVGCis6MTA3NkQwMDAwMDE2Njg0MDMyRUMwMDAxMDFBQzIwMjEwRTAwMDlGOEQwCis6MTA3NkUwMDAwMjAwMjgyMThGODkwMDk0MjZGNzAwMDE4RkE2MDAzQzE0Cis6MTA3NkYwMDAzQUVCMDAwMTMxNkEwMDAxMjUyOEZGRkYwMDExMzgyNzBECis6MTA3NzAwMDAwMkNBQjAyMUFGODgwMDk0MTZFNkZGRTcwMjQ3OTAyNDMyCis6MTA3NzEwMDBBRTkyMDAwMDAyRTAxMDIxOEZCRjAwMzQ4RkJFMDAzMDE3Cis6MTA3NzIwMDA4RkI3MDAyQzhGQjYwMDI4OEZCNTAwMjQ4RkI0MDAyMEFGCis6MTA3NzMwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEVGCis6MTA3NzQwMDAwM0UwMDAwODI3QkQwMDM4M0MwRTA4MDAyNUNFNUZDMENFCis6MTA3NzUwMDAwMjhFMTAyQjBBMDAwQTMwQUU5MjAwMDAyN0JERkZEODFGCis6MTA3NzYwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjBBRkIzMDAxQzJBCis6MTA3NzcwMDBBRkIyMDAxODAwQTA4ODIxMTBBMDAwMUYwMDA0ODA0MEI0Cis6MTA3NzgwMDAzQzEzMDgwMDI2NzM1Q0M0MEEwMDBBN0QyNDEyMDAwMTIxCis6MTA3NzkwMDAxMjIwMDAxOTI2MTAwMDAxMEUwMDBBMTgwMjAwMjAyMUY0Cis6MTA3N0EwMDAwMDAyMzE0MjI0NDRGRkEwMDAwNjE4ODAzMDQ1MDAxRjJCCis6MTA3N0IwMDAyQzgyMTdBMTAwNzMxODIxMjYzMUZGRkYxMDQwRkZGNDFGCis6MTA3N0MwMDAwMEIyMzAwNDhDNjkwMDAwMDIwMDIwMjEyNDA1M0ZGRjM0Cis6MTA3N0QwMDAwMTI2NDAyNDE1MDBGRkVFMDEyNjM4MjUwRTAwMDlGODg5Cis6MTA3N0UwMDBBQzY3MDAwMDhGOEEwMDk0MjYxMDAwMDEyNTQ3MDAwMTM1Cis6MTA3N0YwMDAxNjIwRkZFOUFGODcwMDk0OEZCRjAwMjA4RkIzMDAxQ0Q1Cis6MTA3ODAwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODkxCis6MTA3ODEwMDAyN0JEMDAyODhGODUwMDlDMDA4MDU4MjEwMDAwNDAyMTUyCis6MTA3ODIwMDAwMDAwNDgyMTI0MEEwMDFGM0MwQzA4MDAyNThDNjAzQzA1Cis6MTA3ODMwMDAzQzBEMDgwMDI1QUQ1RkM0OENBNjAwMDA1MEMwMDAxNEFDCis6MTA3ODQwMDAwMDAwNDAyMTAwQUQxMDIzMDAwMjM4QzAyNDAzMDAwMUQ1Cis6MTA3ODUwMDAwQTAwMEFCNjAwMDAyMDIxMTUwMDAwMDMwMEU0MTAyMUYwCis6MTA3ODYwMDAyNDQ4MjAyNDAwMDA0ODIxMjUyOTAwMDE1MTJCMDAxMzIxCis6MTA3ODcwMDAyNTA2REZEQzEwNjAwMDA2MjQ4NDAwMDEwMEMzNzAyNEFDCis6MTA3ODgwMDAxNUMwRkZGNTAwMDMxODQwMEEwMDBBQjQwMDAwNDAyMUFCCis6MTA3ODkwMDAxMEFDMDAyNjI0QTMwMDA0MDA2MDI4MjEyNTRBRkZGRjI1Cis6MTA3OEEwMDAxNTQwRkZFNUFGODUwMDlDNTEyQjAwMDQyNTA2REZEQzY5Cis6MTA3OEIwMDAwMDAwNDAyMTAzRTAwMDA4MDEwMDEwMjEwMDA2NjE0MkExCis6MTA3OEMwMDAzMEM1MDAxRjAwMEM1MDgwM0MwNzA4MDAyNEU3NUZDNDRGCis6MTA3OEQwMDAyNDA0MDAwMTAxNDczMDIxMTEyMDAwMEYwMEE0MjAwNERFCis6MTA3OEUwMDAzQzA1MDgwMDI0QTU2MDQwMTQ4MDAwMDUyNTI5RkZGRjAxCis6MTA3OEYwMDAyNEM2MDAwNDEwQzUwMDExMDAwMDAwMDAyNDA0MDAwMThCCis6MTA3OTAwMDA4Q0NGMDAwMDAwMDRDMDI3MDAwNDIwNDAwMUY4NjgyNDQ4Cis6MTA3OTEwMDAxNTIwRkZGNUFDQ0QwMDAwOEY5OTAwNzgwMTAwMTAyMUYzCis6MTA3OTIwMDAwMzJCNDgyMzAzRTAwMDA4QUY4OTAwNzgzQzA1MDgwMERBCis6MTA3OTMwMDAyNEE1NUZDNDBBMDAwQUJFMDAwMDQwMjEzQzA2MDgwMERFCis6MTA3OTQwMDAyNEM2NUZDNDBBMDAwQUQ3MjQwNDAwMDEzMDg4MDBGRjVGCis6MTA3OTUwMDAyNDAyMDAwMjExMDIwMDBBMjQwMzAwMDMxMTAzMDA1QzQ4Cis6MTA3OTYwMDA4Rjg5MDBBNDI0MDQwMDA0MTEwNDAwNUYyNDA1MDAwNThECis6MTA3OTcwMDAxMTA1MDA2NzAwMDAxODIxMDNFMDAwMDgwMDYwMTAyMUQ1Cis6MTA3OTgwMDA4Rjg5MDA0ODNDMEMwODAwMjU4QzYxMDAzQzA0MDgwMEVECis6MTA3OTkwMDAyNDg0NjE4MDI0MDMwMDIwMTA2MDAwMEYwMDAwNTgyMTFGCis6MTA3OUEwMDAyNDBEMDAwMjI0MEUwMDAzM0MwRjA4MDAyNUVGNjEwMEE3Cis6MTA3OUIwMDA4RDI3MDAwMDE0RTAwMDBCMzBGOUZGRkYyNTI5MDAwNDlCCis6MTA3OUMwMDAwMTI0QzAyQjUzMDAwMDAxMDE4MDQ4MjEyNDYzRkZGRkU0Cis6MTA3OUQwMDA1NDYwRkZGODhEMjcwMDAwMDE2MDE4MjEwM0UwMDAwOEMzCis6MTA3OUUwMDAwMDYwMTAyMTEzMjAwMDMyM0MwNTAwRkYzMEUyMDBGRjUwCis6MTA3OUYwMDAwMDQwMzAyMTEwNDAwMDQyMDAwMDUwMjEyNDA1MDAwMUM5Cis6MTA3QTAwMDAwMDAwMjAyMTAwMDVDODQwMDBBNkMwMjQxNzAwMDAwMzg0Cis6MTA3QTEwMDAzMzI1MDBGRjE0QTBGRkZCMjQ4NDAwMDEwMTJDQzAyM0E4Cis6MTA3QTIwMDAwMDE4MjhDMDAwQUE2MDIxMDA4QzUwMjEzMTQ0MDAxRjlBCis6MTA3QTMwMDAyNDBDMDAwMTAwOEMxODA0MDAwMzEwMjcwMEUyMzAyNEZECis6MTA3QTQwMDAxMTBEMDA0MUFEMjYwMDAwMTEwRTAwNEMwMDBBMTg0MDM3Cis6MTA3QTUwMDAxMTBEMDAzNjhGODcwMDZDNTEwRTAwNTY4RjhDMDA2MDIwCis6MTA3QTYwMDAyNDBEMDAwNDExMEQwMDVBOEY4RTAwODQyNDBFMDAwNTkxCis6MTA3QTcwMDAxNTBFRkZEQTAxNjAxODIxMjQwQjE0MzAxMTQwMDAwNkE2Cis6MTA3QTgwMDAwMDAwMTgyMThGODQwMEEwMjQ2MzAwMDEwMDZBNDAyQkFECis6MTA3QTkwMDAxNTAwRkZGRDAxNjQ1ODIxOEY4QTAwODBBRjg5MDA4QzlBCis6MTA3QUEwMDAwMTYwMTgyMTI1NDlGRkZGMEEwMDBCMEVBRjg5MDA4MEY1Cis6MTA3QUIwMDAwMEU1MjAyNDAwMDczNjAyMTA4MEZGRDAyNDBBMDAxOEI5Cis6MTA3QUMwMDAwMDA3NTQwMjMxNDYwMEZGMEEwMDBCMTYyNDBBMDAxMDdBCis6MTA3QUQwMDAzQzBDMDgwMDI1OEM2MEMwM0MwNDA4MDAyNDg0NjEwMDM0Cis6MTA3QUUwMDAwQTAwMEFGRDI0MDMwMDEwM0MwQzA4MDAyNThDNjA0MEFECis6MTA3QUYwMDAzQzA0MDgwMDI0ODQ2MEMwMEEwMDBBRkM4Rjg5MDA5MEJFCis6MTA3QjAwMDAwMDA3MUEwMjMwNjYwMEZGMEEwMDBCMTYyNDBBMDAwODVDCis6MTA3QjEwMDA4Rjg5MDA4QzNDMEMwODAwMjU4QzYxODAzQzA0MDgwMDk3Cis6MTA3QjIwMDAyNDg0NjE5MDBBMDAwQUZEMjQwMzAwMDQwMDBBNDA4MEI2Cis6MTA3QjMwMDAyNTBCMDAzMDI0RTZGRkZGMDE2MDE4MjFBRjg5MDA0OEMzCis6MTA3QjQwMDAwQTAwMEIwRUFGODYwMDZDMDAwQUM5ODIwMDE5Nzg4MDBCCis6MTA3QjUwMDAzQzA3MDgwMDI0RTc2MEMwMDFFNzIwMjEwMDBBMTg0MjIyCis6MTA3QjYwMDA4QzhGMDAwMDMwNzkwMDFGMDMyQzM4MDQwMDA3QzAyN0Q5Cis6MTA3QjcwMDAwMUY4NjAyNDBBMDAwQjJCQUM4QzAwMDAwMDAzMzE0MjlBCis6MTA3QjgwMDAwMDA2Mjg4MDAwQUYyODIxMzA2MjAwMUY4Q0I4MDAwMDVBCis6MTA3QjkwMDAyNDYzMDAwMTAwNENDODA0MDAwMzIxNDIwMDE5MzgyNzY3Cis6MTA3QkEwMDAwMDA0MTA4MDAzMDczMDI0MDA0RjIwMjEwQTAwMEI2RkNGCis6MTA3QkIwMDBBQ0E2MDAwMDAwMEE2OEMwMjVBQjAwMzIyNThBRkZGRjkyCis6MTA3QkMwMDAwMTYwMTgyMUFGODkwMEE0MEEwMDBCMEVBRjhBMDA2MDgzCis6MTA3QkQwMDAyNTRCMTAzMEFGODkwMDkwMDE2MDE4MjEyNUM5RkZGRkE3Cis6MTA3QkUwMDAwQTAwMEIwRUFGODkwMDg0MzA4NjAwMDcyQ0MyMDAwNjA1Cis6MTA3QkYwMDAxMDQwMDAxNDAwMDAwMDAwMDAwNjQwODAzQzAzMDgwMDE0Cis6MTA3QzAwMDAyNDYzNTlENDAxMDMzODIxOENFNDAwMDAwMDgwMDAwODZCCis6MTA3QzEwMDAwMDAwMDAwMDI0MDkwMDAzMTBBOTAwMEUwMDAwMDAwMDZECis6MTA3QzIwMDAyNDBBMDAwNTEwQUEwMDBCMDAwMDAwMDAyNDBCMDAwMTJDCis6MTA3QzMwMDAxMEFCMDAwODAwMDAwMDAwOEY4QzAwQTAxMEFDMDAwNTA1Cis6MTA3QzQwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDEwMjEwQTAwMEE5QzY4Cis6MTA3QzUwMDAwMEEwMjAyMTBBMDAwQUVBMDBDMDIwMjEyN0JERkZFODc5Cis6MTA3QzYwMDAzMDg0MDBGRjI0MDMwMDAyMTA4MzAwMEJBRkJGMDAxMDFDCis6MTA3QzcwMDAyNDA2MDAwMzEwODYwMDNBMjQwODAwMDQxMDg4MDA2OEQ3Cis6MTA3QzgwMDAyNDBFMDAwNTEwOEUwMDdGMkNBRjE0MzA4RkJGMDAxMDIzCis6MTA3QzkwMDAwM0UwMDAwODI3QkQwMDE4MkNBMjAwMzAxNDQwRkZGQ0IwCis6MTA3Q0EwMDA4RkJGMDAxMDI0QTVGRkQwMDAwNTMxQzIwMDA2Njg4MEY4Cis6MTA3Q0IwMDAzQzA3MDgwMDI0RTc2MTAwMDFBNzMwMjE4Q0M5MDAwMEJGCis6MTA3Q0MwMDAwMDA1Mjg4MjMwQUMwMDFGMjQwQjAwMDEwMThCNTAwNEZBCis6MTA3Q0QwMDA4Rjg0MDA0ODAxMkE0MDI1QUNDODAwMDA4QzgzMDAwMDM2Cis6MTA3Q0UwMDA1MDYwMDAwMUFGODYwMDQ4OEY5ODAwNkMzMEFFMDAwMUY0Cis6MTA3Q0YwMDAyNEE2RkZGRjI3MEYwMDAxMTVDMDAwMDJBRjhGMDA2QzA0Cis6MTA3RDAwMDAyNEE2MDAwMTAwMDY0MTQyMDAwODIwODAwMDg3MTgyMUI3Cis6MTA3RDEwMDA4Qzc5MDAwMDMwQzIwMDFGMjQwNjAwMDEwMDQ2RjgwNEUwCis6MTA3RDIwMDAwMzNGMzgyNDEwRTBGRkRBOEZCRjAwMTAwMDA1QzE4MjQ2Cis6MTA3RDMwMDAwMDE4NzA4MDNDMEYwODAwMjVFRjYwQzAwMUNGNDgyMTdCCis6MTA3RDQwMDA4RDJCMDAwMDAwMDU2ODQyMzFBNTAwMUYwMEE2NjAwNENECis6MTA3RDUwMDAwMTZDNTAyNTI3QkQwMDE4MDNFMDAwMDhBRDJBMDAwMDgzCis6MTA3RDYwMDAyQ0E3MDAzMDE0RTBGRkNBOEZCRjAwMTAzMEI5MDAwNzA1Cis6MTA3RDcwMDAxNzIzRkZDNzI0QThGRkNFMDAwODZBMDIwMDBENjA4MDA5Cis6MTA3RDgwMDAzQzBCMDgwMDI1NkI2MEMwMDE4QjMwMjE4Q0M0MDAwMEM3Cis6MTA3RDkwMDAwMDA4MjhDMjMwQUEwMDFGMjQwODAwMDEwMTQ4NDgwNDM2Cis6MTA3REEwMDA4RjgyMDBBNDAwODkxODI1QUNDMzAwMDA4QzVGMDAwMEZFCis6MTA3REIwMDA1M0UwMDAwMUFGODYwMEE0MDAwNTcwNDAwMDBFNzk0MjM4Cis6MTA3REMwMDAwMDBGMjg4MDNDMDQwODAwMjQ4NDYxMDAwMEE0MTgyMUNFCis6MTA3REQwMDA4QzZCMDAwMDI1REYwMDAxMzFDRDAwMUYwMDFGNTE0MkQ4Cis6MTA3REUwMDAwMUE4NjAwNDAxNkM0ODI1MDAwQTEwODBBQzY5MDAwMEZECis6MTA3REYwMDAwMDQ0MjgyMThDQTYwMDAwOEY5ODAwNjAzM0Y5MDAxRkYyCis6MTA3RTAwMDA4RkJGMDAxMDAzMjgzODA0MDBDNzc4MjUyNzBFMDAwMTEzCis6MTA3RTEwMDAyN0JEMDAxOEFDQUYwMDAwMDNFMDAwMDhBRjhFMDA2MDgzCis6MTA3RTIwMDAyNEE1RUZEMDJDQjgwNDAwMTMwMEZGOTk4RkJGMDAxMEQ5Cis6MTA3RTMwMDAwMDA1MzE0MjAwMDY1ODgwM0MwQTA4MDAyNTRBNjA0MDhGCis6MTA3RTQwMDAwMTZBMzAyMThDQzQwMDAwMzBBMzAwMUYyNDA5MDAwMTA2Cis6MTA3RTUwMDAwMDY5MTAwNDhGOTkwMDkwMDA4MkY4MjVBQ0RGMDAwMEMzCis6MTA3RTYwMDA4RjI3MDAwMDUwRTAwMDAxQUY4NjAwOTA4RjhEMDA4NEM2Cis6MTA3RTcwMDA4RkJGMDAxMDI3QkQwMDE4MjVBQzAwMDEwM0UwMDAwOEVCCis6MTA3RTgwMDBBRjhDMDA4NDE1RTBGRjgyOEZCRjAwMTA4Rjg2MDBBMEFBCis6MTA3RTkwMDAwMDA2MTA0MDAwNDZGODIxMDAxRjIxMDAwM0U0QzgyMTFECis6MTA3RUEwMDAwMDE5Mzg0MDI0RjgxNDMwMDBCODQwMkIxMTAwRkY3ODM2Cis6MTA3RUIwMDA4RkJGMDAxMDI0QTRFQkQwMEUwMDAyMEQwMEMwMjgyMUJCCis6MTA3RUMwMDAwMDAyNzk0MjAwMEY3MDgwM0MwRDA4MDAyNUFENjE4MEYyCis6MTA3RUQwMDAwMUNEMjAyMThDOEIwMDAwMzA0QzAwMUYyNDA2MDAwMUI2Cis6MTA3RUUwMDAwMTg2MTgwNDhGODkwMDhDMDE2MzUwMjVBQzhBMDAwMDNDCis6MTA3RUYwMDA4RDI1MDAwMDUwQTAwMDAxQUY4NDAwOEM4Rjk4MDA4MDc5Cis6MTA3RjAwMDA4RkJGMDAxMDI3QkQwMDE4MjcwODAwMDEwM0UwMDAwOEZDCis6MTA3RjEwMDBBRjg4MDA4MDMwQTUwMDA3MjQwMzAwMDMxMEEzMDAxMEUxCis6MTA3RjIwMDAyOEEyMDAwNDE0NDAwMDA4MjQwNzAwMDIyNDAzMDAwNENGCis6MTA3RjMwMDAxMEEzMDAxNTI0MDgwMDA1MTBBODAwMEY4Rjg1MDBBMENECis6MTA3RjQwMDAwM0UwMDAwODAwMDAwMDAwMTRBN0ZGRkQwMDgwMjgyMUM2Cis6MTA3RjUwMDAxNEMzRkZGQjI0MDQwMDAyMEEwMDBCQUUwMDAwMDAwMDYzCis6MTA3RjYwMDAyNDA5MDAwNTAwODAyODIxMTBDOUZGRkIyNDA0MDAwMzE4Cis6MTA3RjcwMDAwM0UwMDAwODAwMDAwMDAwMTRDNUZGRjEwMDgwMjgyMTg0Cis6MTA3RjgwMDAwQTAwMEJBRTI0MDQwMDA1MjQwQTAwMDEwMDgwMjgyMTA5Cis6MTA3RjkwMDAxMENBRkZGMTI0MDQwMDA0MDNFMDAwMDgwMDAwMDAwMDAwCis6MTA3RkEwMDAyN0JERkZFMEFGQjAwMDEwMDAwNTgxQzIyNjAzRkZEMDVGCis6MTA3RkIwMDAyNEM1MDAzRjJDNjIyM0QwMjRDNjAwN0ZBRkIyMDAxODM2Cis6MTA3RkMwMDBBRkIxMDAxNEFGQkYwMDFDMzA5MTAwRkYwMDA2OTFDMjlBCis6MTA3RkQwMDAwMDA1Mjk4MjAyMDAyMDIxMTA0MDAwMDgyNDAzRkZGRjMxCis6MTA3RkUwMDAwRTAwMEE2RTAwMDAwMDAwMDIwMDIwMjEwMjIwMjgyMTVECis6MTA3RkYwMDAwRTAwMEM1QzAyNDAzMDIxMDAwMDE4MjE4RkJGMDAxQ0Q1Cis6MTA4MDAwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwMDYwMTAyMUUzCis6MTA4MDEwMDAwM0UwMDAwODI3QkQwMDIwMjdCREZGRDgyNEEyMDA3RjcxCis6MTA4MDIwMDBBRkIzMDAxQ0FGQjIwMDE4MDAwMjk5QzIzMDkyMDBGRjNCCis6MTA4MDMwMDAyNEEzMDAzRjAyNDAyMDIxMDI2MDI4MjFBRkIxMDAxNDk4Cis6MTA4MDQwMDBBRkIwMDAxMEFGQkYwMDIwMEUwMDBCOTEwMDAzODk4MjdCCis6MTA4MDUwMDAwMDQwODAyMTAwNDAyMDIxMDIyMDI4MjExNDQwMDAwOUY2Cis6MTA4MDYwMDAwMDAwMTgyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxOEIyCis6MTA4MDcwMDA4RkIxMDAxNDhGQjAwMDEwMDA2MDEwMjEwM0UwMDAwOEUxCis6MTA4MDgwMDAyN0JEMDAyODBFMDAwQTFGMDAwMDAwMDAwMDQwMjgyMTI0Cis6MTA4MDkwMDAwMjAwMjAyMTEwNTFGRkYzMDAxMDE5QzAwRTAwMEE2RURCCis6MTA4MEEwMDAwMDAwMDAwMDAyMDAyMDIxMDI0MDI4MjEwRTAwMEM1QzhDCis6MTA4MEIwMDAwMjYwMzAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxOEU4Cis6MTA4MEMwMDA4RkIxMDAxNDhGQjAwMDEwMDAwMDE4MjEwMDYwMTAyMTQzCis6MTA4MEQwMDAwM0UwMDAwODI3QkQwMDI4MzA4NEZGRkYzMEE1RkZGRjI0Cis6MTA4MEUwMDAxMDgwMDAwNzAwMDAxODIxMzA4MjAwMDExMDQwMDAwMkJCCis6MTA4MEYwMDAwMDA0MjA0MjAwNjUxODIxMTQ4MEZGRkIwMDA1Mjg0MDgxCis6MTA4MTAwMDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDcwMDAwMDAwMDFDCis6MTA4MTEwMDA4Q0EyMDAwMDI0QzZGRkZGMjRBNTAwMDRBQzgyMDAwMDRFCis6MTA4MTIwMDAxNEMwRkZGQjI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMEVBCis6MTA4MTMwMDAxMEEwMDAwODI0QTNGRkZGQUM4NjAwMDAwMDAwMDAwMDkwCis6MTA4MTQwMDAwMDAwMDAwMDI0MDJGRkZGMjQ2M0ZGRkYxNDYyRkZGQTE3Cis6MTA4MTUwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAzMEE1RkZGRkI1Cis6MTA4MTYwMDA4RjQyMDFCODA0NDBGRkZFM0MwNzYwMTUwMEE3MzAyNTkwCis6MTA4MTcwMDAzQzAzMTAwMEFGNDQwMTgwQUY0MDAxODRBRjQ2MDE4ODRBCis6MTA4MTgwMDAwM0UwMDAwOEFGNDMwMUI4OEY4NTAwRDAyQzg2NDAwMDgzCis6MTA4MTkwMDAwMDgwMTgyMThDQTcwMDg0MDA4NzEwMkIxNDQwMDAxMDQ5Cis6MTA4MUEwMDAwMDAwMDAwMDhDQTgwMDg0MkQwNjQwMDA1MEMwMDAwRjg1Cis6MTA4MUIwMDAyNDAzNDAwMDhDQUEwMDg0MDA4QTQ4MkI1MTIwMDAwMTJGCis6MTA4MUMwMDA4Q0EzMDA4NDAwMDM1QTQyMDAwQjIwODAzQzA1MDgwMDY5Cis6MTA4MUQwMDAyNEE1NUE0MDAwODUxODIxMDNFMDAwMDg4QzYyMDAwMEE1Cis6MTA4MUUwMDAxNEMwRkZGNDAwMDAwMDAwMjQwMzQwMDAwMDAzNUE0MkMyCis6MTA4MUYwMDAwMDBCMjA4MDNDMDUwODAwMjRBNTVBNDAwMDg1MTgyMTZBCis6MTA4MjAwMDAwM0UwMDAwODhDNjIwMDAwOEY4MzAwRDA5MDY2MDBEMEVECis6MTA4MjEwMDAyNEM1MDAwMUEwNjUwMEQwOEY4NTAwRDA5MDY0MDBEMEY3Cis6MTA4MjIwMDA5MEEyMDBEMjEwNDQwMDE3MDAwMDAwMDA5MzZDMDA3ODY4Cis6MTA4MjMwMDA4RjhCMDBCQzMxOEEwMEZGQTE2QTAwMEMyNTQ5MDAwMTI4Cis6MTA4MjQwMDA5Mzg3MDBDNDMxMjIwMEZGMzA0ODAwN0YxMTA3MDAwQkU0Cis6MTA4MjUwMDAwMDAyNjgyN0EzNjIwMDc4OEY0RTAxNzgwNUMwRkZGRUY4Cis6MTA4MjYwMDA4Rjk5MDBCMDI0MTgwMDAyM0MwRjEwMDBBRjU5MDE0MDU0Cis6MTA4MjcwMDBBMzU4MDE0NDAzRTAwMDA4QUY0RjAxNzgwQTAwMEQyQzE5Cis6MTA4MjgwMDAzMUEyMDA4MEEwQTAwMEQwMEEwMDBEMjIwMDAwMDAwMDUyCis6MTA4MjkwMDAyN0JERkZEOEFGQjIwMDE4OEY5MjAwQjhBRkJGMDAyMDQzCis6MTA4MkEwMDBBRkIzMDAxQ0FGQjAwMDEwQUZCMTAwMTQ4RjkzMDBCNDk3Cis6MTA4MkIwMDA4RTU5MDAyODNDMTAwMDgwM0MwRUZGRUZBRTc5MDAwMDg0Cis6MTA4MkMwMDA4RTU4MDAyNEEyNjAwMDBBMzVDREZGRkZBRTc4MDAwNDZFCis6MTA4MkQwMDA5MjUxMDAyQzNDMEJGRjlGMzU2QUZGRkZBMjcxMDAwQ0VFCis6MTA4MkUwMDA4RTZGMDAwQzNDMDgwMDQwQTI3MTAwMEIwMUYwNjAyNTZECis6MTA4MkYwMDAwMThENDgyNDAxMkEzODI0MDBFODMwMjVBRTY2MDAwQ0EwCis6MTA4MzAwMDA4RTQ1MDAwNEFFNjAwMDE4M0MwNDAwRkZBRTY1MDAxNDBBCis6MTA4MzEwMDA4RTQzMDAyQzM0ODJGRkZGQTY2MDAwMDgwMDYyRjgyNDIwCis6MTA4MzIwMDBBRTdGMDAxMDhFNTkwMDA4OEY5MDAwQjA5NjRFMDAxMjVDCis6MTA4MzMwMDBBRTc5MDAyMDhFNTEwMDBDMzFEODNGRkYwMDE4Nzk4MEIzCis6MTA4MzQwMDBBRTcxMDAyNDhFNEQwMDE0MDFGMDYwMjEzMUNCMDAwMThDCis6MTA4MzUwMDBBRTZEMDAyODhFNEEwMDE4MDAwQzQxQzIwMDBCNEI4MDA1Cis6MTA4MzYwMDBBRTZBMDAyQzhFNDYwMDFDMDEwOTM4MjFBNjY3MDAxQzRECis6MTA4MzcwMDBBRTY2MDAzMDk2NDUwMDAyOEU0NDAwMjBBNjY1MDAxRUMxCis6MTA4MzgwMDBBRTY0MDAzNDkyNDMwMDMzMzA2MjAwMDQ1NDQwMDAwNTcwCis6MTA4MzkwMDA5MjQ2MDAwMDhGODMwMEQwOEM3RjAwN0NBRTdGMDAzMDNGCis6MTA4M0EwMDA5MjQ2MDAwMDhGODUwMEJDQTBBNjAwMDA5MjQ0MDAzM0Q2Cis6MTA4M0IwMDAzMDgyMDAwMjUwNDAwMDA3OTI0RTAwMDE4Rjg3MDBCQ0JGCis6MTA4M0MwMDAyNDBBRkY4MDkwRTkwMDAwMDEyQTQwMjVBMEU4MDAwMDZGCis6MTA4M0QwMDA5MjRFMDAwMThGOEQwMEJDMjQwOUZGQkYyNDA0RkZERkYzCis6MTA4M0UwMDBBMUFFMDAwMThGOEEwMEJDOTE0QzAwMEQzMThCMDA3RjQzCis6MTA4M0YwMDBBMTRCMDAwRDhGODYwMEJDOTBDODAwMEQwMTA5MzgyNEU4Cis6MTA4NDAwMDBBMEM3MDAwRDhGOTEwMEJDOEU2NTAwMTQ5MjIzMDAwRDUzCis6MTA4NDEwMDAyQ0EyMDAwMTAwMDJGOTQwMDA2NEM4MjQwMzNGQzAyNURCCis6MTA4NDIwMDBBMjM4MDAwRDhGODgwMEJDOTY1MDAwMTI4Rjg3MDBEMEI0Cis6MTA4NDMwMDBBNTEwMDAwMjhFNDUwMDA0OTBFRDAwQkMzMEFGMDAwMzkzCis6MTA4NDQwMDAwMDBGNzAyMzMxQ0MwMDAzMDBBQzEwMjEzMUFCMDAwMkNGCis6MTA4NDUwMDAxNTYwMDAwMjI0NDQwMDM0MjQ0NDAwMzA5MEYxMDBCQzM0Cis6MTA4NDYwMDAwMEIxODAyNDMyMEYwMDA0MTVFMDAwMDIyNDgzMDAwNEQwCis6MTA4NDcwMDAwMDgwMTgyMThGODkwMEFDMjQwQTAwMDJBRDAzMDAwNDlCCis6MTA4NDgwMDBBMTJBMDAwMDkyNDgwMDNGOEY4NzAwQUNBMEU4MDAwMUJECis6MTA4NDkwMDA4RjkxMDBBQzkyNDYwMDNGOEU0NDAwMDRBNjI2MDAwMjU1Cis6MTA4NEEwMDA5NzY1MDAzQzBFMDAwQ0Y5MzBCMEZGRkYwMDAyMTM4MDBFCis6MTA4NEIwMDAwMDUwMjAyNTNDMDM0MjAwMDA4M0Y4MjVBRTNGMDAwNDE1Cis6MTA4NEMwMDA4Rjg1MDBBQzhFNTkwMDM4QUNCOTAwMTg4RTU4MDAzNDM2Cis6MTA4NEQwMDBBQ0I4MDAxQ0FDQTAwMDBDQUNBMDAwMTBBNEEwMDAxNDEwCis6MTA4NEUwMDBBNEEwMDAxNkE0QTAwMDIwQTRBMDAwMjJBQ0EwMDAyNEY4Cis6MTA4NEYwMDA4RTYyMDAxNDUwNDAwMDAxMjQwMjAwMDE4RkJGMDAyMDUyCis6MTA4NTAwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDExCis6MTA4NTEwMDBBQ0EyMDAwODBBMDAwRDE5MjdCRDAwMjg4Rjg2MDBEMEU0Cis6MTA4NTIwMDAyN0JERkZEMEFGQkYwMDJDQUZCNjAwMjhBRkI1MDAyNEU5Cis6MTA4NTMwMDBBRkI0MDAyMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNDRECis6MTA4NTQwMDBBRkIwMDAxMDk0QzMwMEUwOTRDMjAwRTIxMDQzMDA0MUI5Cis6MTA4NTUwMDAyNDA1RkZGRjNDMTYwMDBFOTBDNDAwRDA5MEM4MDBEMTQ3Cis6MTA4NTYwMDAzMDkyMDBGRjMxMDQwMEZGMDI0NDM4MkIxMEUwMDA0NDM5Cis6MTA4NTcwMDAyNjQ5MDAwMTEwODkwMDM3OEY5ODAwQjAzQzA1MDgwMDlCCis6MTA4NTgwMDA4Q0E1MDA1QzI0MTRGRjgwMDBCODYwMjEwMTk0NjgyNDRECis6MTA4NTkwMDBBRjREMDAyQzk0Q0EwMEUyMzE4QjAwN0YwMTdBNDgyMTU0Cis6MTA4NUEwMDAzMTQ0N0ZGRjAxMzY0MDIxMDAwNDEwNDAwMDQ4QTgyMURCCis6MTA4NUIwMDA5NkE3MDAwMDNDMUYwODAwOEZGRjAwNTgzMEY1M0ZGRkQyCis6MTA4NUMwMDAwMDE1MTk4MDAzRTNDODIxMDMxOTg4MjEzMjMzMDA3Rjg1Cis6MTA4NUQwMDAwMjdBNzgyMTAyMzQ4MDI0QUY1MDAwMkMwMUY2OTgyMUQxCis6MTA4NUUwMDA5MjZFMDAwRDMxQzUwMDA0MTBBMDAwNDgwMDAwMDAwMDhDCis6MTA4NUYwMDA5NEMzMDBFMjk0QzMwMEUyOTREODAwRTIyNDA0ODAwMDEzCis6MTA4NjAwMDAzMDdGN0ZGRjI3RjkwMDAxMzMzMTdGRkYwMzA0ODAyNDhGCis6MTA4NjEwMDAwMjExNzgyNUE0Q0YwMEUyOTRDRTAwRTIzQzEyMDgwMEJCCis6MTA4NjIwMDA4RTUyMDA2MDMxRDQ3RkZGMTI5MjAwREYwMDAwMDAwMDA0Cis6MTA4NjMwMDA4RTcyMDAxODAwMDAyODIxMjY0NkZGRkZBRTY2MDAyQzJGCis6MTA4NjQwMDA4Rjg2MDBEMDk0QzgwMEUwOTRDOTAwRTIxNTI4RkZDMkNDCis6MTA4NjUwMDAwMDAwMDAwMDhGQkYwMDJDOEZCNjAwMjg4RkI1MDAyNENCCis6MTA4NjYwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDlDCis6MTA4NjcwMDA4RkIwMDAxMDAwQTAxMDIxMDNFMDAwMDgyN0JEMDAzMERCCis6MTA4NjgwMDA5MENEMDBEMjI2NEEwMDAxMzFBQzAwRkYwMDhDNTgyMTY5Cis6MTA4NjkwMDAxMTZBRkZGMDhGOTgwMEIwM0MwNTA4MDA4Q0E1MDA1Q0MzCis6MTA4NkEwMDAyNDE0RkY4MDAwQjg2MDIxMDE5NDY4MjRBRjREMDAyQzkxCis6MTA4NkIwMDA5NENBMDBFMjMxOEIwMDdGMDE3QTQ4MjEzMTQ0N0ZGRjY4Cis6MTA4NkMwMDAwMTM2NDAyMTAwMDQxMDQwMDA0OEE4MjE5NkE3MDAwMDcwCis6MTA4NkQwMDAzQzFGMDgwMDhGRkYwMDU4MzBGNTNGRkYwMDE1MTk4MDQwCis6MTA4NkUwMDAwM0UzQzgyMTAzMTk4ODIxMzIzMzAwN0YwMjdBNzgyMUZECis6MTA4NkYwMDAwMjM0ODAyNEFGNTAwMDJDMDFGNjk4MjE5MjZFMDAwREI4Cis6MTA4NzAwMDAzMUM1MDAwNDE0QTBGRkJBMDAwMDAwMDA4RTY2MDAxMEZFCis6MTA4NzEwMDAwMDEyQzBDMDhFNkUwMDMwMDAxMjkxNDAwMjU4NzgyMUM1Cis6MTA4NzIwMDAwMzZGNTgyMTAwQ0U2ODIzMjU2QzAwODgyNDAyMDAwMkM0Cis6MTA4NzMwMDBBRTZEMDAxMEFGOEMwMEFDQTE2MjAwODg5NzZBMDAzQzVGCis6MTA4NzQwMDA4RTY0MDAzMDhGOTEwMEFDMEUwMDBDRjkzMTUwRkZGRkE5Cis6MTA4NzUwMDAwMDAyMjM4MDAwOTA0ODI1M0MwMzQyMDAwMTIzNDAyNTZECis6MTA4NzYwMDBBRTI4MDAwNDhFNjcwMDA0OEY4QzAwQUM4RTdGMDAwMDYyCis6MTA4NzcwMDAyNDBEMDAwOEFEODcwMDFDQUQ5RjAwMThBRDgwMDAwQ0QzCis6MTA4NzgwMDBBRDgwMDAxMDkyNjUwMDBBMzBCOTAwRkZBNTk5MDAxNDcxCis6MTA4NzkwMDA5Njc4MDAwODNDMDUwMDBDQTU5ODAwMTY5MjcxMDAwQTE2Cis6MTA4N0EwMDAzMjJGMDBGRkE1OEYwMDIwOTY3MDAwMDgyNDExMDAwNUNECis6MTA4N0IwMDBBNTkwMDAyMkFEODAwMDI0OTI2RTAwMEIyNDEwQzAwMDEyCis6MTA4N0MwMDAzMUM2MDBGRkE1ODYwMDAyQTE4RDAwMDE4RTZCMDAzMDJFCis6MTA4N0QwMDA4RjgyMDBBQzhGODgwMEIwQUM0QjAwMDgzQzBBMDgwMEM4Cis6MTA4N0UwMDA4RDRBMDA1NDAxNDgyMDIxMDA5NDQ4MjRBRjQ5MDAyOEI0Cis6MTA4N0YwMDAzQzAzMDgwMDhDNjMwMDU0MDA2ODM4MjEzMEZGMDA3RjgwCis6MTA4ODAwMDAwM0ZBQzgyMTAzMjVDMDIxMDI1ODc4MjFBRjhGMDBCQzhDCis6MTA4ODEwMDBBRjk4MDBDMEExRjEwMDAwOEY4QjAwQkMyNDAzRkZCRjA0Cis6MTA4ODIwMDAyNDA1RkZERjk1NkUwMDAyMDFEMEEwMjQwMjk1OTAyNTVCCis6MTA4ODMwMDBBNTcyMDAwMjkxNjYwMDAyMzBDRDAwM0YzNUFDMDA0MEM5Cis6MTA4ODQwMDBBMTZDMDAwMjhGODgwMEJDOEY4MjAwRDAzQzBDN0ZGRjlGCis6MTA4ODUwMDBBRDAwMDAwNDhDNEEwMDdDMzU4QkZGRkYzQzAyODAwMDk5Cis6MTA4ODYwMDBBRDBBMDAwODkxMDQwMDBEMzA4OTAwN0ZBMTA5MDAwREI4Cis6MTA4ODcwMDA4RjlGMDBCQzkzRjUwMDBEMDJBMzM4MjRBM0U3MDAwREUxCis6MTA4ODgwMDA4RjkxMDBCQzkyMzkwMDBEMDMyNUMwMjRBMjM4MDAwRDQxCis6MTA4ODkwMDA4RTZGMDAzNDhGOEQwMEJDQURBRjAwMTA4RTZFMDAyQzNCCis6MTA4OEEwMDA4RTcwMDAzMDAxRDBBMDIzQURCNDAwMTQ5MUIyMDAxODM2Cis6MTA4OEIwMDAzMjQ2MDA3RkExQTYwMDE4OEY4NzAwQkM4RTZBMDAzMDY4Cis6MTA4OEMwMDA4Q0U0MDAxODAxNEI0ODI0MDA4MjQwMjQwMTA5QTgyNUFCCis6MTA4OEQwMDBBQ0Y1MDAxODkyNjMwMDBBQTBFMzAwMUM5NjdGMDAwODI0Cis6MTA4OEUwMDA4Rjg1MDBCQzhGOTkwMEQwQTRCRjAwMUU4RTcwMDAzMDExCis6MTA4OEYwMDA4RTY0MDAzMDBFMDAwMjBEOEYyNTAwODQ4Rjg1MDBEMDFECis6MTA4OTAwMDAwMDAyODk0MDAwMDJDMTAwOTBBRTAwQkMwMjM4NzgyMTBDCis6MTA4OTEwMDAwMDQwMzAyMTMxRDQwMDAyMTI4MDAwMDMwMjBGODAyMTc4Cis6MTA4OTIwMDAwMDAyQTg4MDAyMTU4MDIxOTBCMjAwQkMzMjU0MDAwNERECis6MTA4OTMwMDAxMjgwMDAwMjAwMDZDODgwMDIxOTgwMjE4RTZGMDAzMDZDCis6MTA4OTQwMDA4RjhCMDBCQzI0MDY4MDAwMzFFRTAwMDMwMDBFNjgyM0VDCis6MTA4OTUwMDAzMUFDMDAwMzAyMEMxMDIxQUQ2MjAwMDQ5NEE0MDBFMkNCCis6MTA4OTYwMDA5NEFBMDBFMjk0QTMwMEUyMzE1MDdGRkYyNjA0MDAwMUE0Cis6MTA4OTcwMDAzMDg5N0ZGRjAwNjY0MDI0MDEwOTg4MjVBNEIxMDBFMjA4Cis6MTA4OTgwMDA5NEE3MDBFMjNDMTMwODAwOEU3MzAwNjAzMEZGN0ZGRjY1Cis6MTA4OTkwMDAxM0YzMDAxMjAwMDAwMDAwMEUwMDBEMTkwMDAwMDAwMDhCCis6MTA4OUEwMDAwQTAwMEUyNzAwMDAyODIxOTRDRDAwRTIwMUE0NjAyNEQzCis6MTA4OUIwMDBBNENDMDBFMjkwQ0IwMEUyOTBDMjAwRTIzMTZBMDBGRjVBCis6MTA4OUMwMDAwMDBBNDlDMjAwMDkyMDI3MDAwNDQxQzAzMDU1MDA3RjM5Cis6MTA4OUQwMDAwMkE4MzgyNTBBMDAwRTIzQTBDNzAwRTI5NEIxMDBFMkU1Cis6MTA4OUUwMDAwMjI2MzgyNEE0QTcwMEUyOTBCRjAwRTI5MEI0MDBFMjdGCis6MTA4OUYwMDAzM0YzMDBGRjAwMTNDOUMyMDAxOTkwMjczMjk4MDA3RjlCCis6MTA4QTAwMDAwMDEyQTlDMDAzMTUzMDI1MEUwMDBEMTlBMEE2MDBFMjIyCis6MTA4QTEwMDAwQTAwMEUyNzAwMDAyODIxMzA4NEZGRkYzMEE1RkZGRjQ5Cis6MTA4QTIwMDBBRjQ0MDAxOEFGNDUwMDFDMDNFMDAwMDg4RjQyMDAxNDVCCis6MTA4QTMwMDAyN0JERkZCMEFGQjAwMDI4OEY5MDAwRDBBRkI0MDAzODkyCis6MTA4QTQwMDBBRkJGMDA0Q0FGQkUwMDQ4QUZCNzAwNDRBRkI2MDA0MDY4Cis6MTA4QTUwMDBBRkI1MDAzQ0FGQjMwMDM0QUZCMjAwMzBBRkIxMDAyQ0MzCis6MTA4QTYwMDBBN0EwMDAxNDkyMDYwMEQxOTIwNTAwRDAzMDk0RkZGRjE5Cis6MTA4QTcwMDAzMEM0MDBGRjMwQTMwMEZGMDA2NDEwMkJBN0EwMDAxRTJECis6MTA4QTgwMDAxMDQwMDA3MUFGQTAwMDEwOTIwOTAwRDAwMDE0OTgyQjg0Cis6MTA4QTkwMDAzMTI4MDBGRjAwODgzODIzMjRGMkZGRkYwMDEyODgyQkMyCis6MTA4QUEwMDAwMjMzNzgyNDUxRTAwMDc1OEZCMjAwMTA5NjE4MDAxMjNFCis6MTA4QUIwMDA5NjE5MDAxMDAwMTRGNDAwMDMxOUI4MjMwMDE3QjQwMDJECis6MTA4QUMwMDAwMDE2MTQwMzAyODJBODJBMTZBMDAwMDIwMDFFMjQwMzI2Cis6MTA4QUQwMDAwMDQwMjAyMTAyNDRGODJCMTNFMDAwMDIwMDgwMTgyMUZFCis6MTA4QUUwMDAwMjQwMTgyMTAwMDMzNDAwMDAwNjFDMDMzMDY1RkZGRjFDCis6MTA4QUYwMDAyQ0EyMDAwOTE0NDAwMDAyMDA2MDk4MjEyNDEzMDAwOEYxCis6MTA4QjAwMDA4RTA5MDAwODAwMTM1OTgwOEUwODAwMEMzMTY0RkZGRkE1Cis6MTA4QjEwMDAzQzBBMDAxMDAwOEEzODI1Mjc0QTA0MDBBRjQ5MDAzODczCis6MTA4QjIwMDBBRjhBMDBCOEFGNDgwMDNDQUY0NzAwMzAwMDAwMDAwMEZCCis6MTA4QjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTA4QjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjREMDAwMDQ5Cis6MTA4QjUwMDAzMUFDMDAyMDExODBGRkZEMDAxMzcwMkEwMUQxMTAyNEQ4Cis6MTA4QjYwMDAwMDAwQTgyMTEwNDAwMUMwMDAwMDAwMDA4Rjk4MDBCMDU0Cis6MTA4QjcwMDAzQzBCMDgwMDhENkIwMDU0MjQxMUZGODA5MjFFMDBEMDI2Cis6MTA4QjgwMDAwMTc4MjAyMTAwOTExMDI0OTIxOTAwRDBBRjQyMDAyOEQyCis6MTA4QjkwMDA4RDQ1MDAxMDNDMDYwODAwOENDNjAwNTgzQzE3MDgwMEE0Cis6MTA4QkEwMDA4RUY3MDA1NDMwQTczRkZGMDAwNzE5ODAwMEMzNDAyMTEzCis6MTA4QkIwMDAwMzA4MjAyMTAwOTFGODI0OTIwQjAwRDBBRjVGMDAyQzE1Cis6MTA4QkMwMDA5MTQ4MDAwMDMzRDYwMEZGMzMyRjAwRkYwMkY4NzAyMUQ4Cis6MTA4QkQwMDAwMDE2NjE0MDAwMEY2OEMwMzFDOTAwN0YwMThEMzgyMTQ3Cis6MTA4QkUwMDAwMTNBMjgyMTMxNjMwMEZGMzA4NjAwN0YzQzAyMDAwQ0VGCis6MTA4QkYwMDAwMEEyQjAyMTAwMDM4OTQwMDM2N0M4MjEwMERBRjgyMUYwCis6MTA4QzAwMDAzMTA4MDAzRjNDMUUwMDBFMDIzNkI4MjEyNzM4MDA4ODhDCis6MTA4QzEwMDAwM0ZFODgyMTJEMEYwMDA4QUY5ODAwQUNBRjk3MDBCQzcxCis6MTA4QzIwMDBBRjk2MDBDMDExRTAwMThGQUY5MTAwQjQwMDA4Njg4MERBCis6MTA4QzMwMDAzQzBFMDgwMDI1Q0U1OUVDMDFBRTYwMjE4RDg5MDAwMDY0Cis6MTA4QzQwMDAwMTIwMDAwODAwMDAwMDAwOTIwRTAwRDI5MjBEMDBEMDFBCis6MTA4QzUwMDAwMDE0OTgyQjMxQ0EwMEZGMzFBQzAwRkYwMDhDNTgyMzYwCis6MTA4QzYwMDAwMTRCMjAyMTI0OTJGRkZGMDAxMjg4MkIwMjMzNzgyNDJECis6MTA4QzcwMDAxNUUwRkY4RTAwMDAwMDAwOEZCMjAwMTA4RkJGMDA0Qzg3Cis6MTA4QzgwMDA4RkJFMDA0ODNBNDIwMDAxOEZCNzAwNDQ4RkI2MDA0MEMzCis6MTA4QzkwMDA4RkI1MDAzQzhGQjQwMDM4OEZCMzAwMzQ4RkIyMDAzMEYyCis6MTA4Q0EwMDA4RkIxMDAyQzhGQjAwMDI4MDNFMDAwMDgyN0JEMDA1MEQyCis6MTA4Q0IwMDA5MTU4MDAwMTMzMTcwMDIwMTJFMDAyMDQyNDE2MDAwMTJECis6MTA4Q0MwMDA5MjFGMDBCQzAwMDBCMDIxMzNGOTAwMDExMzIwMDAwREY5Cis6MTA4Q0QwMDAyNDFFMDAwMThENDgwMDE0OEUwMzAwODQwMTAzQjAyQjc0Cis6MTA4Q0UwMDAxNkMwMDAwMjAxMDAzMDIxOEUwNjAwODQ4RTA1MDA2NDRCCis6MTA4Q0YwMDAwMEM1MzgyQjE0RTAwMDAyMDBDMDIwMjE4RTA0MDA2NDVGCis6MTA4RDAwMDAwMDgwQjAyMThENDIwMDE0OEUwQjAwNjQwMDRCMzAyQjhDCis6MTA4RDEwMDAxNEMwMDAwMjAwNDAyMDIxOEUwNDAwNjQwMDk2QjgyMzk1Cis6MTA4RDIwMDA1NkUwMDAwMTI0MUUwMDAyMDI1RTIwMkIxNDgwMDE0ODQwCis6MTA4RDMwMDAwMDAwMTgyMThENTkwMDM4OEUyRjAwMEMzQzE4MDA4MDNGCis6MTA4RDQwMDBBRTM5MDAwMDhENTAwMDM0M0MwRUZGOUYwMUY4NjAyNUM1Cis6MTA4RDUwMDBBRTMwMDAwNDkxNDkwMDNGMzVDREZGRkYwMThEMjAyNDQ2Cis6MTA4RDYwMDAzQzBBMDAyMDNDMEJGRkVGQTIyOTAwMEIwMDhBMzgyNUFCCis6MTA4RDcwMDAzNTYyRkZGRjAwRTIyODI0M0MwNjAwMDg4Rjg3MDBCODE4Cis6MTA4RDgwMDAwMEE2QzgyNUFFMzkwMDBDOENFMzAwMTRBRTIwMDAxOEY0Cis6MTA4RDkwMDAzQzA4RkZGQkFFMjMwMDE0OENGODAwMTgzNTFGRkZGRkMyCis6MTA4REEwMDAwMzNGNzAyNEFFMzgwMDFDOENFRjAwMDgwMkQ3ODAyMUVFCis6MTA4REIwMDBBRTJGMDAyNDhDRUQwMDBDQUUzMDAwMkNBRTJFMDAwQzNCCis6MTA4REMwMDBBRTJEMDAyMEFFMjAwMDI4QTYyMDAwMzhBNjIwMDAzQUI0Cis6MTA4REQwMDA4Q0VDMDAxNDAxOTY0ODIzMDEzNzUwMjMxMTQwMDAxMUY4Cis6MTA4REUwMDBBRTJBMDAxMDkwRUUwMDNEOEUyQzAwMDQ4RTI0MDAwMDcwCis6MTA4REYwMDAwMDBFNjkwMDAxOEQyODIxMDAwMDUwMjEwMEFEMzAyQkFDCis6MTA4RTAwMDAwMDhBNTgyMTAxNjYxMDIxQUUyNTAwMDRBRTIyMDAwMDIwCis6MTA4RTEwMDA5MEUzMDAzREEyMjMwMDBBOEY4ODAwQjg5NTFGMDAwNjRBCis6MTA4RTIwMDBBNjNGMDAwODhGOEIwMEFDMjQwNjAwMDIwMkMwMjAyMTYwCis6MTA4RTMwMDBBMTY2MDAwMDk3NjUwMDNDOEY5MDAwQUMzMEEyRkZGRjU4Cis6MTA4RTQwMDAwRTAwMENGOUFGQTIwMDIwOEZBMzAwMjAwMDAyNDM4MDg3Cis6MTA4RTUwMDA4Rjg1MDBCODAxMDNDODI1M0MxRjQyMDAwMzNGQzAyNTkxCis6MTA4RTYwMDBBRTE4MDAwNDhGODQwMEFDOENBRjAwMzhBQzhGMDAxOEIzCis6MTA4RTcwMDA4Q0IwMDAzNEFDOTAwMDFDQUM4MDAwMENBQzgwMDAxMEI2Cis6MTA4RTgwMDBBNDgwMDAxNEE0ODAwMDE2QTQ4MDAwMjBBNDgwMDAyMkU2Cis6MTA4RTkwMDBBQzgwMDAyNDkwQTcwMDNGQTQ4NzAwMDIxMkMwMDIxMEZCCis6MTA4RUEwMDAyNDBEMDAwMTUyRTAwMDAyOTBBMjAwM0Q5MEEyMDAzRTdECis6MTA4RUIwMDAyNDRBMDAwMUEwOEEwMDAxOEY4NDAwQUNBQzk2MDAwODBGCis6MTA4RUMwMDA4RjgzMDBEMDI0MDcwMDM0OTA2RjAwQkMzMUVFMDAwMjg1Cis6MTA4RUQwMDA1MUMwMDAwMTI0MDcwMDMwOEY4MjAwQjg4Rjk5MDBCQzc4Cis6MTA4RUUwMDA5MDY4MDBCQzkwNUYwMDAwMjQxMDAwMDQzMkNGMDAwM0EzCis6MTA4RUYwMDBBMzNGMDAwMDhGOTgwMEI4OEY4QzAwQkMwMjBGNzAyMzM2Cis6MTA4RjAwMDA5MzBEMDAwMTI0MDVDMDAwMzFDQTAwMDNBMThEMDAwMUFBCis6MTA4RjEwMDA4RjkwMDBCQzhGODkwMEI4MDBGNjM4MjE5NjA0MDAwMkJCCis6MTA4RjIwMDA5NTI2MDAxMjAwRUEzODIxMDA4NTU4MjQzMEMzM0ZGRkZGCis6MTA4RjMwMDAwMTYzMTAyNUE2MDIwMDAyOTIxRjAwMDIzMTA4MDAwNEZFCis6MTA4RjQwMDAzM0Y5MDAzRjM3MzgwMDQwQTIxODAwMDIxMkMwMDAwMjc3Cis6MTA4RjUwMDA4Rjg1MDBCQzAwRTgzODIxOEY4NjAwRDBBQ0E3MDAwNEM0Cis6MTA4RjYwMDAyNDFGRkZCRjhDQzMwMDdDMkVDQjAwMDEyNDBGRkZERjJBCis6MTA4RjcwMDBBQ0EzMDAwODkwQTgwMDBEMDAwQjY5NDAzMTAyMDA3RkVGCis6MTA4RjgwMDBBMEEyMDAwRDhGOTAwMEJDOTIxOTAwMEQwMzNGQzAyNEQ5Cis6MTA4RjkwMDBBMjE4MDAwRDhGOEEwMEJDOTE0RTAwMEQwMUNGNjAyNEY1Cis6MTA4RkEwMDAwMThENDgyNUExNDkwMDBEOEY4NjAwQjg4RjhCMDBCQzJDCis6MTA4RkIwMDA4Q0M3MDAyMEFENjcwMDEwOENDNTAwMjRBRDY1MDAxNDdGCis6MTA4RkMwMDA4Q0M0MDAyOEFENjQwMDE4OENDMzAwMkMwRTAwMEQxOTUxCis6MTA4RkQwMDBBRDYzMDAxQzI0MDgwMDAyNTdDODAwOUM4RjkwMDBEMDhECis6MTA4RkUwMDA4RjhGMDBEMDhGOEEwMEMwMDJFMDIwMjE5MUU4MDBEMDRFCis6MTA4RkYwMDA5MUVCMDBEMDkxRTcwMEQwMzExMDAwRkYzMTZFMDBGRkZGCis6MTA5MDAwMDAwMDEwNjk0MDAwMEUyOEMwMDFBNTE4MjEzMEU5MDBGRkJBCis6MTA5MDEwMDAwMzYzQzgyMTAwMDkzMTQwMDBDQUY4MjEyNzIyMDA4OEQzCis6MTA5MDIwMDBBRjgyMDBBQ0FGOUYwMEJDQTMzRTAwODgwRTAwMENGOURECis6MTA5MDMwMDA4RjkwMDBBQzhGQjgwMDIwMDAwMjYzODAzQzBGNDIwMDhDCis6MTA5MDQwMDAwMTk4NDAyNThGOEMwMEI4MDEwRjU4MjVBRTBCMDAwNDA1Cis6MTA5MDUwMDA4RDg0MDAzODhGOEIwMEFDMDAwMDI4MjEwMDA1MzkwMDdBCis6MTA5MDYwMDBBRDY0MDAxODhEOEUwMDM0M0MwRjdGRkYzNUU4RkZGRkE0Cis6MTA5MDcwMDBBRDZFMDAxQzkxODMwMDNFOEQ2OTAwMUM4RDY2MDAxODRBCis6MTA5MDgwMDAwMDAzNTEwMDAwMDM2RjAyMDEyQUMwMjEwMEVEMTAyNUVBCis6MTA5MDkwMDAwMzBBRjgyQjAwQzJDODIxMDMzRjgwMjFBRDc4MDAxQ0QxCis6MTA5MEEwMDBBRDcwMDAxOEFENjAwMDBDQUQ2MDAwMTA5MTg0MDAzRTAyCis6MTA5MEIwMDAyNDFGMDAwNTI0MTBDMDAwQTU2NDAwMTQ5NThFMDAwNDMwCis6MTA5MEMwMDAwMkU4NDAyNDAyRTAyMDIxQTU2RTAwMTY5MTg1MDAzRUIyCis6MTA5MEQwMDBBNTY1MDAyMDk1OEQwMDA0QTU2RDAwMjJBRDYwMDAyNERCCis6MTA5MEUwMDA5MTg3MDAzRkE1NjcwMDAyOTE4MzAwM0U5MTg5MDAzRDcyCis6MTA5MEYwMDAwMTIzNTAyMzI1NDYwMDAxQTE2NjAwMDE4RjgyMDBBQ0E4Cis6MTA5MTAwMDA4Rjk5MDBCQ0FDNTcwMDA4QTMzRjAwMDA4RjhBMDBCQ0I5Cis6MTA5MTEwMDA4Rjk4MDBCODk1NEYwMDAyOTcwRTAwMTIyNDE4RkZCRkQ5Cis6MTA5MTIwMDAwMjBGNjgyNDMxQzUzRkZGMDFBNTM4MjVBNTQ3MDAwMjdECis6MTA5MTMwMDA5MTRDMDAwMjI0MDVGRkRGMzE4OTAwM0YzNTIzMDA0MEI4Cis6MTA5MTQwMDBBMTQzMDAwMjhGOTkwMEJDOEY4NjAwRDAyNDA5RkZGRjQ1Cis6MTA5MTUwMDBBRjIwMDAwNDhDQ0IwMDdDMjQwM0ZGODBBRjJCMDAwOEUxCis6MTA5MTYwMDA5MzIyMDAwRDNDMEI4MDAwMzA1RjAwN0ZBMzNGMDAwRDc5Cis6MTA5MTcwMDA4RjhFMDBCQzkxRDAwMDBEMDIxODc4MjRBMUNGMDAwRDc1Cis6MTA5MTgwMDA4RjhDMDBCQzkxOEQwMDBEMDFBNTM4MjRBMTg3MDAwREE2Cis6MTA5MTkwMDA4Rjg2MDBCQ0FDQzkwMDEwQUNENjAwMTQ5MENBMDAxODcxCis6MTA5MUEwMDAwMTQzQjAyNUEwRDYwMDE4OEY4RjAwQkM4Rjk4MDBCODVGCis6MTA5MUIwMDA4REUyMDAxODAwNEJGODI0MDNFOEM4MjVBREY5MDAxODJCCis6MTA5MUMwMDA5MzEwMDAzRUExRjAwMDFDOEY4RTAwQjg4RjhEMDBCQzY0Cis6MTA5MUQwMDA4Rjg3MDBEMDk1QzUwMDA0QTVBNTAwMUUwRTAwMDIwREM2Cis6MTA5MUUwMDA4Q0U1MDA4NDhGODcwMEQwMDAwMjYxNDAwMDAyMjEwMERFCis6MTA5MUYwMDA5MEVBMDBCQzAxODQ0ODIxMDA0MDI4MjEzMTU2MDAwMjM5Cis6MTA5MjAwMDAxMkMwMDAwMzAyRTkzMDIxMDAwMkIwODAwMEQ2MzAyMUY0Cis6MTA5MjEwMDA5MEVDMDBCQzMxODQwMDA0MTA4MDAwMDMzMkVBMDAwM0FCCis6MTA5MjIwMDAwMDA1QzA4MDAwRDgzMDIxMjQwOTAwMDQ4Rjk3MDBCQ0JECis6MTA5MjMwMDAwMTJBMTAyMzMwNUYwMDAzMDBERkM4MjFBRUY5MDAwNENCCis6MTA5MjQwMDAwRTAwMEQxOUE2MjUwMDM4OEY5MDAwRDAwM0MwMTgyMUZDCis6MTA5MjUwMDAxNDYwMDAwMjAwNjBCMDIxMDAwMDkwMjE1NkMwMDA4NjFBCis6MTA5MjYwMDA4Rjk3MDBCODAwMTI4ODJCOTYwOTAwMTAwMjk1NTAyM0EyCis6MTA5MjcwMDAzQzE0MDAyMDAyQTkxMDIxQTYwMjAwMTBBRjU0MDAzMEI3Cis6MTA5MjgwMDAzMTU0RkZGRjAwMDAwMDAwOTYxMzAwMTA5NjFGMDAxMkRCCis6MTA5MjkwMDAxM0YzMDAxMTAwMDAwMDAwOEUxNzAwMEM4RTBDMDAwODY0Cis6MTA5MkEwMDAwMDE1Qzk4MDAyRjk0MDIxMDAxOTI3QzMwMTE5QjAyQjBDCis6MTA5MkIwMDAwMTg0NzgyMTAxRjY1ODIxQUUwODAwMENBRTBCMDAwODlECis6MTA5MkMwMDAwMDE0QTgyQjAyMzU4MDI0MTIwMEZFNkI4RjkwMDBEMDcyCis6MTA5MkQwMDAwQTAwMEY0MjAwMDAwMDAwOTYwQjAwMTQ4RTA1MDAwNEU3Cis6MTA5MkUwMDAzMTYzRkZGRjAwMDM3MEMwMDBBRTM4MjFBRjQ3MDAzQzgwCis6MTA5MkYwMDA4RTA2MDAwNDhGNEQwMDNDMDBDREYwMjMxQkMwMDAzNkNECis6MTA5MzAwMDAwMDAwMDAwMDhFMDgwMDAwMjUwMjAwMDEzQzE2MDAxMDNECis6MTA5MzEwMDAzNkNGMDAwOEFGNDIwMDM4QUY0RjAwMzAwMDAwMDAwMEU5Cis6MTA5MzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTA5MzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjQ0MDAwMDVBCis6MTA5MzQwMDAzMDhDMDAyMDExODBGRkZEMDAwMDAwMDA4RjU5MDQwMEM4Cis6MTA5MzUwMDAzQzE3MDAyMEFFMTkwMDA4OEY1NTA0MDRBRTE1MDAwQzEwCis6MTA5MzYwMDBBRjU3MDAzMDAwMDAwMDAwM0MwNjA4MDA4Q0M2MDA0NEU3Cis6MTA5MzcwMDAyNDE4MDAwMTEwRDgwMEQzMDAwMDAwMDA5NjA3MDAxMjQ2Cis6MTA5MzgwMDAzQzA1MDgwMDhDQTUwMDQwMDBBNzY4MjFBNjBEMDAxMjJFCis6MTA5MzkwMDA5NjFFMDAxNDI3QzkwMDAxQTYwOTAwMTQ5NjAyMDAxNEE1Cis6MTA5M0EwMDAzMDQ0RkZGRjU0ODZGRkM3MDAxNEE4MkIzMEE1RkZGRkYxCis6MTA5M0IwMDAwRTAwMEYxREE2MDAwMDE0M0MwMzA4MDA4QzYzMDAyNDVGCis6MTA5M0MwMDA5NjA1MDAxMjAwNDM3MDIzMDBBRTMwMjNBNjA2MDAxMjVCCis6MTA5M0QwMDAwQTAwMTE0ODAwMTRBODJCOEUwMjAwMDAwQTAwMTE1QjNECis6MTA5M0UwMDAzQzE2MDAxMDkxNTYwMDAxMjQxMDAwMDEwMDE2Nzg0MjJFCis6MTA5M0YwMDAxNUYwMDAxQzk3QTgwMDFFOEQ1RjAwMTQyNDExQzAwMEZBCis6MTA5NDAwMDAzM0ZFM0ZGRjAxMTFDODI0M0MxODA4MDA4RjE4MDA2MDhDCis6MTA5NDEwMDAwMzNFQjgyNTMyRTUzRkZGMDBCODUwMkIxMTQwMDAxMTQ0Cis6MTA5NDIwMDBBN0I3MDAxRTNDMTAwODAwOEUxMDAwNTg4RjhGMDBCMEE4Cis6MTA5NDMwMDAwMDA1NzE4MDI0MENGRjgwMDIwRjY4MjEwMUFFNDgyMUQ1Cis6MTA5NDQwMDAzMTI0MDA3RjAxMkM1ODI0MDA5QTI4MjEzQzAyMDAwRTcwCis6MTA5NDUwMDBBRjRCMDAyQzAwQTIzMDIxOTBDNzAwMEQzNEUzMDAwNDc0Cis6MTA5NDYwMDBBMEMzMDAwRDBFMDAwRDNCMDAwMDAwMDA4RjkwMDBEMDQ3Cis6MTA5NDcwMDAyNDAzMDAwMThGOTcwMEI4MjZCOTAwMDEwMDE5QUMwMDQxCis6MTA5NDgwMDAwMjQzOTAyMzAwMTVBQzAzMjZGODAwNDAwMkIzMjAyQUMzCis6MTA5NDkwMDAwMDEyODgyQjI0MEMwMDAxMDMwMDUwMjEwMDkxMTAyNDlECis6MTA5NEEwMDBBRjk4MDBCODBBMDAwRjcwQUZBQzAwMTA5NTU2MDAxMkNDCis6MTA5NEIwMDA4Rjg0MDBCMDMyQzVGRkZGMEUwMDBDRUVBN0I2MDAxNDdCCis6MTA5NEMwMDA4RjkwMDBEMDBBMDAxMUI0MDAwMDE4MjE4RDU5MDAzODg3Cis6MTA5NEQwMDBBNjIwMDAwODI0MDQwMDAzQUUzOTAwMDA4RDU3MDAzNDk0Cis6MTA5NEUwMDBBMjIwMDAwQThGOTgwMEI4QUUzNzAwMDQzQzBGMDA4MDFECis6MTA5NEYwMDA5MzBDMDAzRkEyMjQwMDBDOEUyODAwMEMzQzBCRkY5RjE1Cis6MTA5NTAwMDBBMjJDMDAwQjAxMEYxODI1MzU2RUZGRkYzQzA1RkZFRjY1Cis6MTA5NTEwMDA4Rjk3MDBCODAwNkU2ODI0MzRBN0ZGRkYwMUE3MzAyNDlFCis6MTA5NTIwMDBBRTI2MDAwQzhFRkUwMDE0OTZGRjAwMTI4RjgyMDBCMDUzCis6MTA5NTMwMDBBRTNFMDAxMDhFRjAwMDE0QUUyMDAwMThBRTIwMDAyMEM5Cis6MTA5NTQwMDBBRTMwMDAxNEFFMjAwMDI0OEVFOTAwMTgzM0YwM0ZGRjQ3Cis6MTA5NTUwMDAwMDEwNTE4MEFFMjkwMDI4OEVGOTAwMDgwMTQyQzAyMTc4Cis6MTA5NTYwMDAzM0VDMDAwMUFFMzkwMDMwOEVFQjAwMEM4Rjg1MDBBQzdGCis6MTA5NTcwMDAwMDE4NzlDMjAwMEMyMzgwMDFFNDQwMjEyNDBFMDAwMjZGCis6MTA5NTgwMDBBNjI4MDAxQ0E2MjAwMDM2QUUyQjAwMkNBMEFFMDAwMEEyCis6MTA5NTkwMDA5NzY3MDAzQzhGOEEwMEFDM0MwMzQyMDAzMEVERkZGRjMwCis6MTA5NUEwMDAwMUEzMzAyNUFENDYwMDA0OEY5RTAwQjgyNDAyMDAwMUJGCis6MTA5NUIwMDAyNDA4QzAwMDhGRDEwMDM4MjQwNjAwMzRBRDUxMDAxOEIzCis6MTA5NUMwMDA4RkM5MDAzNEFENDkwMDFDQUQ0MDAwMENBRDQwMDAxMDA3Cis6MTA5NUQwMDBBNTQwMDAxNEE1NDAwMDE2QTU0MDAwMjBBNTQwMDAyMjhCCis6MTA5NUUwMDBBRDQwMDAyNEE1NTYwMDAyQTE0MjAwMDE4RjlGMDBBQ0FGCis6MTA5NUYwMDA4Rjk5MDBCODhGOTgwMEJDQUZGNjAwMDg5MzM3MDAwMDMxCis6MTA5NjAwMDBBMzE3MDAwMDhGOEMwMEI4OEY4RjAwQkM5MTg0MDAwMURECis6MTA5NjEwMDBBMUU0MDAwMThGOEQwMEJDOTVBQjAwMDIwMTY4NzAyNEFECis6MTA5NjIwMDAwMUQwMjgyNUE1QTUwMDAyOTFBNzAwMDIzMEUzMDAzRjQ0Cis6MTA5NjMwMDBBMUEzMDAwMjhGODMwMEQwOEY4NDAwQkM5MDcxMDBCQzc2Cis6MTA5NjQwMDAzMjNFMDAwMjUzQzAwMDAxMjQwNjAwMzBBQzg2MDAwNDA0Cis6MTA5NjUwMDA4QzZGMDA3QzI0MDNGRkJGQUM4RjAwMDg5MDg4MDAwRDQ2Cis6MTA5NjYwMDAzMTBCMDA3RkEwOEIwMDBEOEY4NzAwQkM5MEVFMDAwREFBCis6MTA5NjcwMDAwMUMzMjgyNEEwRTUwMDBEOEY5RTAwQkM5M0NEMDAwREYyCis6MTA5NjgwMDAzNUE2MDAyMEEzQzYwMDBEOEY4QTAwQjg4RjkxMDBCQ0JDCis6MTA5NjkwMDA4RDUwMDAyMEFFMzAwMDEwOEQ0OTAwMjRBRTI5MDAxNEZBCis6MTA5NkEwMDA4RDQyMDAyOEFFMjIwMDE4OEQ1RjAwMkNBRTNGMDAxQ0JBCis6MTA5NkIwMDAwRTAwMEQxOTAwMDAwMDAwOEY5MDAwRDAwQTAwMTEyRTNFCis6MTA5NkMwMDAwMkMwMTgyMTk2MEEwMDEyM0MxRjA4MDA4RkZGMDAyNEQ4Cis6MTA5NkQwMDAwM0VBOTgyMUE2MTMwMDEyMEEwMDExNDgwMDE0QTgyQkNGCis6MTA5NkUwMDBBMDhEMDAwMThGODkwMEFDMjQwQzAwMDFBRDJDMDAwODc2Cis6MTA5NkYwMDAwQTAwMTA0ODhGODMwMEQwMjdCREZGRTAzQzE4MDgwMDA3Cis6MTA5NzAwMDA4RjE4MDA1MEFGQjAwMDEwQUZCRjAwMThBRkIxMDAxNEY5Cis6MTA5NzEwMDBBRjg0MDBCMDkzNzEwMDc0MDMwNDc4MjEyNDEwRkY4MDlCCis6MTA5NzIwMDAzMUVFMDA3RjMyMjUwMDdGMDFGMDU4MjQwMURBNjgyMUY0Cis6MTA5NzMwMDAzQzBDMDAwQUEzODUwMEM0MDFBQzI4MjFBRjRCMDAyNEQ3Cis6MTA5NzQwMDA5NEE5MDAxMDk3NjgwMDA2OTBBNjAwNjIwMDgwMzgyMTU2Cis6MTA5NzUwMDAyNDAyMDAzMDAxMDkyMDIzMzBDMzAwRjBBRjg1MDBEMDdGCis6MTA5NzYwMDAxMDYyMDAxOTMwOTBGRkZGOTBBRTAwNjIyNDBERkZGMEYwCis6MTA5NzcwMDAyNDBBMDA1MDAxQUU2MDI0MzE4QjAwRkYxMTZBMDAyRkQzCis6MTA5NzgwMDAwMDAwMDAwMDE2MDAwMDA3MjQxRjBDMDBBRjVGMDAyNDNCCis6MTA5NzkwMDA4RkIxMDAxNDhGQkYwMDE4OEZCMDAwMTAwM0UwMDAwOEQ1Cis6MTA5N0EwMDAyN0JEMDAyMDBFMDAwRjIzMDIwMDIwMjEyNDFGMEMwMEUzCis6MTA5N0IwMDBBRjVGMDAyNDhGQjEwMDE0OEZCRjAwMTg4RkIwMDAxMDZFCis6MTA5N0MwMDAwM0UwMDAwODI3QkQwMDIwOTRBMjAwRTA5NEE0MDBFMjdBCis6MTA5N0QwMDA5MEJGMDExMzAwODIxODI2MzA3OUZGRkYzM0U3MDBDMEU1Cis6MTA5N0UwMDAxNEUwMDAwOTJGMzEwMDAxMTYwMDAwMzgwMDAwMDAwMENECis6MTA5N0YwMDA1NjIwRkZFNjI0MUYwQzAwMEUwMDBEREUwMDAwMDAwMEM2Cis6MTA5ODAwMDAwQTAwMTI3QTI0MUYwQzAwMTYyMEZGREUwMDAwMDAwMDYwCis6MTA5ODEwMDAwRTAwMERERTAwMDAwMDAwMTQ0MEZGREMyNDFGMEMwMEQxCis6MTA5ODIwMDAxNjAwMDAyMjhGODMwMEQwOTA2OTAxMTMzMTIyMDAzRjdGCis6MTA5ODMwMDBBMDYyMDExMzBBMDAxMjdBMjQxRjBDMDA5NEFGMDBENDE2Cis6MTA5ODQwMDA4Rjg2MDBENDAwRTAyODIxMjQwNDAwMDUwRTAwMEM3RjQwCis6MTA5ODUwMDAzMUYwRkZGRjE0NDAwMDA1MjQwMzAwMDM5NzkxMDBFNjU4Cis6MTA5ODYwMDAwMDAwMTgyMTI2MjVGRkZGQTc4NTAwRTY4RjU4MDFCOEM0Cis6MTA5ODcwMDAwNzAwRkZGRTNDMTk2MDEzQUY0MDAxODAyNDFGMEMwMDVECis6MTA5ODgwMDBBRjUwMDE4NDAwNzkzODI1M0MxMDEwMDBBRjQ3MDE4OEEzCis6MTA5ODkwMDA4RkIxMDAxNEFGNTAwMUI4QUY1RjAwMjQ4RkIwMDAxMDNCCis6MTA5OEEwMDA4RkJGMDAxODAzRTAwMDA4MjdCRDAwMjAwRTAwMEYyMzIzCis6MTA5OEIwMDAwMjAwMjAyMTUwNDBGRkI1MjQxRjBDMDA4RjgzMDBEMEYwCis6MTA5OEMwMDA5MDY5MDExMzBBMDAxMkEzMzEyMjAwM0YwRTAwMEYyM0ZBCis6MTA5OEQwMDAwMjAwMjAyMTE0NDBGRkFEMjQxRjBDMDAxMjIwMDAwN0JECis6MTA5OEUwMDA4RjgzMDBEMDkwNjgwMTEzMzEwNjAwM0YzNEMyMDA0MERFCis6MTA5OEYwMDBBMDYyMDExMzBBMDAxMjdBMjQxRjBDMDAwRTAwMERERTc0Cis6MTA5OTAwMDAwMDAwMDAwMDUwNDBGRkExMjQxRjBDMDA4RjgzMDBEMEY2Cis6MTA5OTEwMDA5MDY4MDExMzMxMDYwMDNGMEEwMDEyRDMzNEMyMDA0MEEwCis6MTA5OTIwMDBBRjlCMDBDODAzRTAwMDA4QUY4MDAwRUMzMDg5RkZGRjY4Cis6MTA5OTMwMDAwMDA5NDA0MjJEMDIwMDQxMDAwOTI5ODAxNDQwMDAwMjI0Cis6MTA5OTQwMDAwMDA5NTA0MDI0MDgwMDQwMDAwODc5NDAwMDA4QzBDMEM5Cis6MTA5OTUwMDAwMUY4NTgyMTI1NjcwMUE4MDBFRjcwMjEyNUNDMDA3RjcwCis6MTA5OTYwMDAyNDBERkY4MDAxOEQxODI0MDA2NTMwMjEwMENBMjgyMUI0Cis6MTA5OTcwMDAyNTY0MDA4ODI0MEEwMDg4M0MwMTA4MDBBQzJBMDA0Q0I5Cis6MTA5OTgwMDAzQzAxMDgwMEFDMjQwMDUwQUY4NTAwRDQzQzAxMDgwMDI1Cis6MTA5OTkwMDBBQzI5MDA2MDNDMDEwODAwQUMyODAwNjQzQzAxMDgwMEQwCis6MTA5OUEwMDBBQzI3MDA1NDNDMDEwODAwQUMyMzAwNTgzQzAxMDgwMERGCis6MTA5OUIwMDBBQzI2MDA1QzAzRTAwMDA4MDAwMDAwMDAzMDgzMDBGRkRDCis6MTA5OUMwMDAzMEM2RkZGRjMwRTQwMEZGOEY0MjAxQjgwNDQwRkZGRUM1Cis6MTA5OUQwMDAwMDAzNEMwMDAxMjQzODI1M0MwODYwMDAwMEU4MjAyNUU1Cis6MTA5OUUwMDAzQzAzMTAwMEFGNDUwMTgwQUY0NjAxODRBRjQ0MDE4OEJECis6MTA5OUYwMDAwM0UwMDAwOEFGNDMwMUI4OEY4NjAwMUMzQzA5NjAxMkU5Cis6MTA5QTAwMDAzNTI3MDAxMDhDQ0IwMDA0M0MwQzYwMEUzNTg1MDAxMDBGCis6MTA5QTEwMDAzMTZBMDAwNjJENDgwMDAxQUNFODAwQzQ4Q0M0MDAwNDgzCis6MTA5QTIwMDBBQ0E0MzE4MDhDQzIwMDA4OTRDMzAwMDJBQ0EyMzE4NDgzCis6MTA5QTMwMDAwM0UwMDAwOEE3ODMwMEU0M0MwMzA4MDA4QzYzMDA1MEE3Cis6MTA5QTQwMDA4Rjg0MDBFODhGODYwMDFDMjQwMkZGODAwMDY0QzAyMTAwCis6MTA5QTUwMDAwMzAyQzgyNEFGNTkwMDI4OENDRDAwMDQzMzA1MDA3RkQxCis6MTA5QTYwMDAwMEJBNzgyMTNDMEUwMDBDMDFFRTI4MjFBQ0FEMDA1ODY0Cis6MTA5QTcwMDA4Q0M4MDAwOEFGODUwMEQwM0MwNzYwMTJBQ0E4MDA1QzIxCis6MTA5QTgwMDA4Q0NDMDAxMDM0RTgwMDEwQUNBQzAwMEM4Q0NCMDAwQzdCCis6MTA5QTkwMDBBQ0FCMDAwODk0QUEwMDE0M0MwMjA4MDA4QzQyMDA0NEJECis6MTA5QUEwMDAyNTQ5MDAwMUE0QTkwMDE0OTRBNDAwMTQzMDgzRkZGRkU5Cis6MTA5QUIwMDAxMDYyMDAxNzhGODQwMEQwM0MwQTA4MDA4RDRBMDA0MEQ1Cis6MTA5QUMwMDBBNEFBMDAxMjhDQ0UwMDE4QUM4RTAwMjQ4Q0NEMDAxNEY5Cis6MTA5QUQwMDBBQzhEMDAyMDhDQzcwMDE4QUM4NzAwMkM4Q0NDMDAxNEY3Cis6MTA5QUUwMDAyNDA2MDAwMUFDOEMwMDI4OEQwQjAwQkM1MTY2MDAxQUM2Cis6MTA5QUYwMDA4RDAyMDBCNDhEMDIwMEI4QTQ4MjAwM0E5NDhGMDAzQTFGCis6MTA5QjAwMDBBNDhGMDAzQzk0ODgwMEQ0MDNFMDAwMDgzMTAyRkZGRkRBCis6MTA5QjEwMDAzQzA5MDgwMDhEMjkwMDI0QTRBMDAwMTQ4Rjg0MDBEMEUzCis6MTA5QjIwMDBBNEE5MDAxMjhDQ0UwMDE4QUM4RTAwMjQ4Q0NEMDAxNDk5Cis6MTA5QjMwMDBBQzhEMDAyMDhDQzcwMDE4QUM4NzAwMkM4Q0NDMDAxNDk2Cis6MTA5QjQwMDAyNDA2MDAwMUFDOEMwMDI4OEQwQjAwQkM1NTY2RkZFQTkyCis6MTA5QjUwMDA4RDAyMDBCODhEMDIwMEI0QTQ4MjAwM0E5NDhGMDAzQUJFCis6MTA5QjYwMDBBNDhGMDAzQzk0ODgwMEQ0MDNFMDAwMDgzMTAyRkZGRjdBCis6MTA5QjcwMDA4Rjg2MDAxQzNDMEMwODAwOEQ4QzAwNTAyNDBCRkY4MDRECis6MTA5QjgwMDA4Q0NEMDAwODNDMDMwMDBDMDAwRDUxQzAwMThBNDAyMTFGCis6MTA5QjkwMDAwMTBCNDgyNEFGOEEwMEU4QUY0OTAwMjg5MEM3MDAwN0FFCis6MTA5QkEwMDAzMTA1MDA3RjAwQkExMDIxMDA0MzI4MjEzMEU0MDAwNDcxCis6MTA5QkIwMDAxMDgwMDAyRkFGODUwMEQwOTBDRjAwMDczMUVFMDAwODU1Cis6MTA5QkMwMDAxMUMwMDAzQzAwMDAwMDAwOENEOTAwMEM4Q0M0MDAxNEIzCis6MTA5QkQwMDAwMzI0QzAyQjEzMDAwMDI2MDAwMDAwMDA4Q0MyMDAwQ0UwCis6MTA5QkUwMDBBQ0EyMDA2NDhDQ0QwMDE4MjQwMkZGRjhBQ0FEMDA2ODc0Cis6MTA5QkYwMDA4Q0NDMDAxMEFDQUMwMDgwOENDQjAwMENBQ0FCMDA4NEU3Cis6MTA5QzAwMDA4Q0NBMDAxQ0FDQUEwMDdDOTBBOTAwQkMwMTIyNDAyNDk0Cis6MTA5QzEwMDBBMEE4MDBCQzkwQzMwMDA3MzA2NzAwMDgxMEUwMDAwNDUzCis6MTA5QzIwMDA4Rjg1MDBEMDkwQUYwMEJDMzVFRTAwMDFBMEFFMDBCQzI3Cis6MTA5QzMwMDA5MEQ5MDAwNzMzMzgwMDAxMTMwMDAwMEY4Rjg0MDBEMDQzCis6MTA5QzQwMDAyNDA3MDAyMDkwODIwMEJDMzQ0OTAwMDJBMDg5MDBCQzk3Cis6MTA5QzUwMDA4Rjg0MDBEMDkwODgwMDYyMzEwMzAwRjAxNDY3MDAwNjAyCis6MTA5QzYwMDAyNDBBMDAzNEFDOEEwMEMwMEEwMDEzQjUwMDAwMDAwMENBCis6MTA5QzcwMDAwQTAwMTM4RjhDQzIwMDE0OTBDQjAwMDczMTY2MDAwMkRCCis6MTA5QzgwMDAxMEMwMDAwNTAwMDAwMDAwOTA4RDAwQkMzNUFDMDAwNDQxCis6MTA5QzkwMDBBMDhDMDBCQzhGODQwMEQwOTA5ODAxMTMzMzBGMDAzRjNDCis6MTA5Q0EwMDBBMDhGMDExMzhGOEUwMEQwOTVDNTAwRDQwM0UwMDAwODZCCis6MTA5Q0IwMDAzMEEyRkZGRkFDQTAwMDY0MEEwMDEzOTAwMDAwMDAwMDc3Cis6MTA5Q0MwMDAyN0JERkZEOEFGQjAwMDEwOEY5MDAwMUNBRkJGMDAyNDlECis6MTA5Q0QwMDBBRkI0MDAyMEFGQjIwMDE4QUZCMTAwMTRBRkIzMDAxQzk2Cis6MTA5Q0UwMDA5NjEzMDAwRTNDMDc2MDBBM0MxNDYwMDYzMjY0RkZGRkM2Cis6MTA5Q0YwMDAzNjkzMDAxMDBFMDAxMkUyMzRGNDA0MTA4Rjg0MDBENDY2Cis6MTA5RDAwMDAzQzExNjAwRTBFMDAwOUJFMzYzMTAwMTA5MjBFMDAxNTk3Cis6MTA5RDEwMDAzQzA3MDgwMDhDRTcwMDYwM0MxMjYwMTIzMUNEMDAwRjU4Cis6MTA5RDIwMDBBMzhEMDBGMDhFMEUwMDA0OEUwRDAwMDg5NjA4MDAxMjIwCis6MTA5RDMwMDA5NjFGMDAxMDk2MTkwMDFBOTYxODAwMUU5NjBGMDAxQzA4Cis6MTA5RDQwMDAzMTBDRkZGRjMzRUJGRkZGMzMyQUZGRkYzMzA5RkZGRjI3Cis6MTA5RDUwMDAzMUU2RkZGRjNDMDEwODAwQUMyQjAwNDAzQzAxMDgwMDRECis6MTA5RDYwMDBBQzJDMDAyNDNDMDEwODAwQUMyQTAwNDRBRTI5MzE3ODE4Cis6MTA5RDcwMDBBRTI2MzE3QzkyMDIwMDE1OTYwMzAwMTYzNjUyMDAxMDcyCis6MTA5RDgwMDAzMDQ0MDBGRjMwNjVGRkZGM0MwNjA4MDA4Q0M2MDA2NENECis6MTA5RDkwMDBBRTI0MzE4OEFFNDUwMEI0OTIwODAwMTQ5NjE5MDAxODFDCis6MTA5REEwMDAyNDFGMDAwMTAxMUZDMDA0MzMyRkZGRkYzQzA1MDgwMEUyCis6MTA5REIwMDA4Q0E1MDA1OEFFNTgwMEI4QUU0RjAwQkM5MjBDMDAxNEYxCis6MTA5REMwMDBBRjhFMDBEOEFGOEQwMERDMzE4QjAwRkZBRTRCMDBDMEYyCis6MTA5REQwMDA5MjBBMDAxNUFFNjcwMDQ4QUU2NjAwNEMzMTQ5MDBGRjlDCis6MTA5REUwMDBBRTQ5MDBDOEFFNjUwMDdDM0MwMzA4MDA4QzYzMDA1MDlGCis6MTA5REYwMDAzQzA0MDgwMDhDODQwMDRDM0MwODA4MDA4RDA4MDA1NDhBCis6MTA5RTAwMDAzQzAyMDgwMDhDNDIwMDVDOEZCRjAwMjRBRTYzMDA4MERGCis6MTA5RTEwMDA4RkIwMDAxMEFFODMwMDc0OEZCMzAwMUNBRTIyMzE5QzUzCis6MTA5RTIwMDBBRTQyMDBEQ0FFMjczMUEwQUUyNjMxQTRBRTI0MzE4Qzg4Cis6MTA5RTMwMDBBRTIzMzE5MEFFMjgzMTk0QUUyNTMxOThBRTg3MDA1MEQ0Cis6MTA5RTQwMDBBRTg2MDA1NEFFODUwMDcwOEZCMTAwMTRBRTQ3MDBFMEJFCis6MTA5RTUwMDBBRTQ2MDBFNEFFNDQwMENDQUU0MzAwRDBBRTQ4MDBENEUxCis6MTA5RTYwMDBBRTQ1MDBEODhGQjQwMDIwOEZCMjAwMTgwM0UwMDAwODgwCis6MTA5RTcwMDAyN0JEMDAyODI3QkRGRkUwQUZCMTAwMTRBRkJGMDAxODE5Cis6MTA5RTgwMDAyNDExMDAwMTBFMDAwODY4QUZCMDAwMTAxMDUxMDAwNTQ5Cis6MTA5RTkwMDA5Nzg0MDBFNjk3ODMwMENDMDA4MzEwMkIxNDQwMDAwOEMxCis6MTA5RUEwMDA4Rjg1MDBENDI0MDcwMDAyOEZCRjAwMTg4RkIxMDAxNEUzCis6MTA5RUIwMDA4RkIwMDAxMDAwRTAxMDIxMDNFMDAwMDgyN0JEMDAyMDUzCis6MTA5RUMwMDAwRTAwMEM5RDI0MDQwMDA1QUY4MjAwRTgxMDQwRkZGNjUwCis6MTA5RUQwMDAyNDA3MDAwMjBFMDAwODZDOEY5MDAwMUM5NzlGMDBFNjdDCis6MTA5RUUwMDA4Rjk5MDBFODhGOEQwMEM4MjdFRjAwMDEyNDBFMDA1MEU1Cis6MTA5RUYwMDBBRjU5MDAyMEE3OEYwMEU2QTFBRTAwMDAzQzBDMDgwMDdGCis6MTA5RjAwMDA4RDhDMDA2NDhGODYwMEM4MjQwQTgwMDAwMDBDNUUwMERGCis6MTA5RjEwMDBBQ0NCMDA3NEE0QzAwMDA2OTRDOTAwMEEyNDFGRkY4MEMzCis6MTA5RjIwMDAzQzBEMDAwQzAxMkFDMDI0QTREODAwMEE5MEM4MDAwQUU1Cis6MTA5RjMwMDAyNDE4MjAwMDAxMUYxODI1QTBDMzAwMEE4Rjg3MDBDODFECis6MTA5RjQwMDBBMEUwMDA3ODhGODUwMEM4MDAwMDM4MjFBMEEwMDA4MzIxCis6MTA5RjUwMDAzQzAyMDgwMDhDNDIwMDUwOEY4NDAwRTgwMDQ0NzgyMUM1Cis6MTA5RjYwMDAwMUZGQzgyNEFGNTkwMDI4OTYwQjAwMDIzMUVFMDA3Rjk0Cis6MTA5RjcwMDAwMURBNjAyMTAxOEQzMDIxQTRDQjAwRDQ5NjBBMDAwMkMxCis6MTA5RjgwMDBBRjg2MDBEMDNDMEUwMDA0MjU0OTI0MDFBNEM5MDBFNjk4Cis6MTA5RjkwMDA4RTA4MDAwNEFDQzgwMDA0OEUwMzAwMDhBQ0MzMDAwMEE3Cis6MTA5RkEwMDBBNEMwMDAxMEE0QzAwMDE0QTBDMDAwRDA4Rjg1MDBEMEIxCis6MTA5RkIwMDAyNDAzRkZCRkEwQTAwMEQxM0MwNDA4MDA4Qzg0MDA2NEVGCis6MTA5RkMwMDA4RjgyMDBEMEEwNDQwMEQyOEUxRjAwMEM4RjhBMDBEMDU4Cis6MTA5RkQwMDA5NzhGMDBFNEFENUYwMDFDOEUxOTAwMTAyNDEwMDAzMDM0Cis6MTA5RkUwMDBBRDU5MDAxOEE1NDAwMDMwQTU1MTAwNTRBNTUxMDA1NkE4Cis6MTA5RkYwMDBBNTRGMDAxNkFENEUwMDY4QUQ1ODAwODBBRDU4MDA4NEU2Cis6MTBBMDAwMDA5MTREMDA2MjMxQUMwMDBGMzU4QjAwMTBBMTRCMDA2MjA2Cis6MTBBMDEwMDA4Rjg2MDBEMDkwQzkwMDYzMzEyODAwN0ZBMEM4MDA2M0ZDCis6MTBBMDIwMDA4Rjg0MDBEMDI0MDZGRkZGOTA4NTAwNjMwMEEzMTAyNEQ2Cis6MTBBMDMwMDBBMDgyMDA2MzhGOTEwMEQwMDBFMDEwMjE5MjNGMDBCQzBECis6MTBBMDQwMDAzN0Y5MDAwMUEyMzkwMEJDOEY4QTAwRDA5MzhGMDBGMDRECis6MTBBMDUwMDBBRDU4MDA2NEFENTAwMEMwOTE0RTAwRDMwMDBGNjkwMEIwCis6MTBBMDYwMDAzMUNDMDAwRjAxOEQ1ODI1QTE0QjAwRDM4Rjg1MDBEMDM2Cis6MTBBMDcwMDA4Rjg5MDBEQ0FDQTkwMEU4OEY4ODAwRDg4RkJGMDAxODVBCis6MTBBMDgwMDA4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjBBQ0E4MDBFQ0U5Cis6MTBBMDkwMDBBNEE2MDBENkE0QTAwMEUwQTRBMDAwRTIwM0UwMDAwODZCCis6MTBBMEEwMDAwMDAwMDAwMDI3QkRGRkUwQUZCMDAwMTA4RjkwMDAxQzQzCis6MTBBMEIwMDBBRkIxMDAxNEFGQkYwMDE4OEUxOTAwMDQzQzE4MDgwMDlGCis6MTBBMEMwMDA4RjE4MDA1MDI0MEZGRjgwMDAxOTg5QzAwMjM4NzAyMUJBCis6MTBBMEQwMDAzMUNEMDA3RjAxQ0Y2MDI0MDFCQTUwMjEzQzBCMDAwQzMwCis6MTBBMEUwMDBBRjRDMDAyODAxNEI0MDIxOTUwOTAwRDQ5NTA0MDBENkJGCis6MTBBMEYwMDA4RTA3MDAwNDMxMzFGRkZGQUY4ODAwRDAwRTAwMDkzNjEzCis6MTBBMTAwMDAwMDA3MjFDMDhFMDYwMDA0OEY4MzAwQzgwMDA2MjlDMDA2Cis6MTBBMTEwMDBBRjQ1MDAyMDkwNjQwMDNFMzA4MjAwNDAxNDQwMDAwNkFECis6MTBBMTIwMDA4Rjg0MDBEMDM0MUZGRkZGOTQ4MzAwRDYzMDYyRkZGRjdFCis6MTBBMTMwMDAxNDVGMDAwNDAwMDAwMDAwOTQ4NDAwRDYwRTAwMDhDQkQ5Cis6MTBBMTQwMDAzMDg0RkZGRjhFMDUwMDA0MDIyMDMwMjE4RkJGMDAxOEVECis6MTBBMTUwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNDAwMjIwMDAwMzgyMUI5Cis6MTBBMTYwMDAwMDA1MjlDMDBBMDAxMzA2MjdCRDAwMjAyN0JERkZFMDE3Cis6MTBBMTcwMDBBRkIxMDAxNDMwOTFGRkZGQUZCMDAwMTBBRkJGMDAxOEI3Cis6MTBBMTgwMDAxMjIwMDAxRDAwMDA4MDIxOEY4NjAwMUM4Q0M1MDAwMDVECis6MTBBMTkwMDAyNDAzMDAwNjAwMDUzRjAyMDAwNTE0MDIzMEU0MDAwNzE2Cis6MTBBMUEwMDAxNDgzMDAxNTMwNDUwMEZGMkNBODAwMDYxMTAwMDA0RDU3Cis6MTBBMUIwMDAwMDA1NTg4MDNDMEMwODAwMjU4QzVBMEMwMTZDNTAyMTdECis6MTBBMUMwMDA4RDQ5MDAwMDAxMjAwMDA4MDAwMDAwMDA4RjhFMDBFQzg3Cis6MTBBMUQwMDAyNDBEMDAwMTExQ0QwMDU5MDAwMDAwMDAyNjBCMDAwMUU0Cis6MTBBMUUwMDAzMTcwRkZGRjI0Q0EwMDIwMDIxMTIwMkIwMTQwMzAyMUQyCis6MTBBMUYwMDAxNDgwRkZFNkFGOEEwMDFDMDIwMDEwMjE4RkJGMDAxOEY4Cis6MTBBMjAwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMEJDCis6MTBBMjEwMDA5Mzg3MDBDRTE0RTAwMDM4MjQwNDAwMTQwRTAwMTNDNzA2Cis6MTBBMjIwMDAwMDAwMDAwMDhGODYwMDFDMjQwMjAwMDEwQTAwMTUwRUE5Cis6MTBBMjMwMDBBRjgyMDBFQzhGODkwMEVDMjQwODAwMDIxMTI4MDAzQjVCCis6MTBBMjQwMDAyNDA0MDAxMzAwMDAyODIxMDAwMDMwMjEyNDA3MDAwMTBECis6MTBBMjUwMDAwRTAwMTMwNjAwMDAwMDAwMEEwMDE1MEU4Rjg2MDAxQzc5Cis6MTBBMjYwMDA4Rjg3MDBFQzI0MDUwMDAyMTRFNUZGRjYyNDA0MDAxMjk5Cis6MTBBMjcwMDAwRTAwMTM3MzAwMDAwMDAwOEY4NTAwRTgwMDQwMzAyMUJECis6MTBBMjgwMDAyNDA0MDAxMjBFMDAxMzA2MDAwMDM4MjEwQTAwMTUwRUU3Cis6MTBBMjkwMDA4Rjg2MDAxQzhGODMwMEVDMjQxRjAwMDMxNDdGRkZEMEU3Cis6MTBBMkEwMDAyNjBCMDAwMTBFMDAxMzI1MDAwMDAwMDA4Rjg1MDBFODNBCis6MTBBMkIwMDAwMDQwMzAyMTI0MDIwMDAyMjQwNDAwMTAwMDAwMzgyMTU0Cis6MTBBMkMwMDBBRjgyMDBFQzBFMDAxMzA2MDAwMDAwMDAwQTAwMTUwRTFECis6MTBBMkQwMDA4Rjg2MDAxQzhGOEYwMEVDMjQwNjAwMDIxMUU2MDAwQjE1Cis6MTBBMkUwMDAwMDAwMDAwMDI0MDQwMDEwMDAwMDI4MjEwMDAwMzAyMTlDCis6MTBBMkYwMDAwQTAwMTUyQjI0MDcwMDAxMDAwMDI4MjEwRTAwMTMwNjc4Cis6MTBBMzAwMDAwMDAwMzAyMTBBMDAxNTBFOEY4NjAwMUMwRTAwMTQzNDQ4Cis6MTBBMzEwMDAwMDAwMDAwMDE0NDAwMDEyOEY5OTAwMUM4Rjg2MDAxQzYyCis6MTBBMzIwMDAyNDAyMDAwMzBBMDAxNTBFQUY4MjAwRUMwRTAwMTRDMEQ4Cis6MTBBMzMwMDAwMDAwMDAwMDBBMDAxNTBFOEY4NjAwMUMwRTAwMTMxNTg5Cis6MTBBMzQwMDAwMDAwMDAwMDI0MDIwMDAyMjQwNDAwMTQwMDAwMjgyMTYwCis6MTBBMzUwMDAwMDAwMzAyMTAwMDAzODIxMEEwMDE1NDhBRjgyMDBFQ0NGCis6MTBBMzYwMDAwMDQwMzgyMTI0MDQwMDEwOTczODAwMDIwMDAwMjgyMTAyCis6MTBBMzcwMDAwRTAwMTMwNjMzMDZGRkZGMEEwMDE1MEU4Rjg2MDAxQzIxCis6MTBBMzgwMDA4Rjg0MDBDODNDMDc3RkZGMzRFNkZGRkY4Qzg1MDA3NDk0Cis6MTBBMzkwMDAyNDAyMDAwMTAwQTYxODI0QUM4MzAwNzQwM0UwMDAwODI2Cis6MTBBM0EwMDBBMDgyMDAwNTEwQTAwMDM2MkNBMjAwODAyNzRBMDQwMERECis6MTBBM0IwMDAzQzBCMDAwNTI0MDkwMDgwMTA0MDAwMDcyNDA4MDA4MEExCis6MTBBM0MwMDAzMEE2MDAwRjAwQzU0MDIxMkQwMzAwODExNDYwMDAwMjVCCis6MTBBM0QwMDAwMEEwNDgyMTI0MDgwMDgwQUY0QjAwMzAwMDAwMDAwMDlFCis6MTBBM0UwMDAwMDAwMDAwMDAwMDAwMDAwMTEwMDAwMDkwMDAwMzgyMUZBCis6MTBBM0YwMDAwMTQwMzAyMThDOEQwMDAwMjRFNzAwMDQwMEU4NjAyQjMwCis6MTBBNDAwMDBBQ0NEMDAwMDI0ODQwMDA0MTU4MEZGRkEyNEM2MDAwNEFCCis6MTBBNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzBFMDAwNkVDCis6MTBBNDIwMDAwMTBFMzgyNUFGNDcwMDMwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBBNDMwMDAwMDAwMDAwMDhGNEYwMDAwMzFFODAwMTAxMTAwRkZGRDA4Cis6MTBBNDQwMDAwMDAwMDAwMDhGNDIwMDNDOEY0MzAwM0MwMDQ5QzgyMUJGCis6MTBBNDUwMDAwMzIzQzAyQjEzMDAwMDA0MDAwMDAwMDA4RjRDMDAzOEMxCis6MTBBNDYwMDAyNTg2MDAwMUFGNDYwMDM4OEY0NzAwM0MwMEE5MjgyMzBECis6MTBBNDcwMDAwMEU5NjgyMUFGNEQwMDNDMTRBMEZGQ0UyQ0EyMDA4MDYzCis6MTBBNDgwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRDAzQzAyMDAwMkVFCis6MTBBNDkwMDBBRkIxMDAxNDNDMTEwMDBDQUY0NTAwMzhBRkIzMDAxQzQ1Cis6MTBBNEEwMDBBRjQ2MDAzQzAwODA5ODIxQUY0MjAwMzAyNDA1MDA4ODcwCis6MTBBNEIwMDBBRjQ0MDAyODAzNTEyMDIxQUZCRjAwMjhBRkI1MDAyNENFCis6MTBBNEMwMDBBRkI0MDAyMEFGQjIwMDE4MEUwMDE1ODBBRkIwMDAxMDdFCis6MTBBNEQwMDAzQzFGMDgwMDhGRkYwMDRDM0MxODA4MDA4RjE4MDA2NEQ4Cis6MTBBNEUwMDAyNDEwRkY4MDAzRjNBODIxMzJCOTAwN0YwMkIwNzgyNDQyCis6MTBBNEYwMDAwMDE4QTBDMDAzM0E3MDIxMDAxODkxNDAwMUQxMjAyMTFBCis6MTBBNTAwMDBBRjRGMDAyODBFMDAxNTgwMDI1NDI4MjEzQzBEMDgwMDkyCis6MTBBNTEwMDA4REFEMDA1MDI0MDUwMTIwMDFCMzU4MjEzMTZDMDA3RjFFCis6MTBBNTIwMDAwMTcwNTAyNDAxOUE0ODIxMDEzMTIwMjEwRTAwMTU4MDJDCis6MTBBNTMwMDBBRjRBMDAyODNDMDgwODAwOEQwODAwNTQzQzA1MDgwMDdDCis6MTBBNTQwMDA4Q0E1MDA2NDAxMTMzODIxMzBFNjAwN0YwMEYwMTgyNDQ4Cis6MTBBNTUwMDAwMERBMjAyMTAwOTEyMDIxQUY0MzAwMjgwRTAwMTU4MDUxCis6MTBBNTYwMDAwMDA1Mjk0MDNDMDIwODAwOEM0MjAwNTgzQzEwMDgwMEJECis6MTBBNTcwMDA4RTEwMDA2MDEyMDAwMDFDMDA1Mzg4MjEyNDE1RkY4MEZCCis6MTBBNTgwMDAwQTAwMTYwMzNDMTQwMDBDMzIyNjAwN0YwMjM1MTgyNDAyCis6MTBBNTkwMDAwMERBMjAyMTAyNDAyODIxQUY0MzAwMjgwMDk0MjAyMTI2Cis6MTBBNUEwMDAwRTAwMTU4MDI2MTBGRkMwMTIwMDAwMEYwMjMyODgyMTE1Cis6MTBBNUIwMDAyRTA1MDA0MTEwQTBGRkY0MjQxMjEwMDAzMjI2MDA3RjY3Cis6MTBBNUMwMDAwMDEwOTE4MDAyMzUxODI0MDBEQTIwMjEwMjQwMjgyMTUxCis6MTBBNUQwMDBBRjQzMDAyODAwOTQyMDIxMEUwMDE1ODAwMDAwODAyMTQ4Cis6MTBBNUUwMDAxNjAwRkZGMzAyMzI4ODIxM0MwQjA4MDA4RDZCMDA1Q0UzCis6MTBBNUYwMDAyNDBBRkY4MDI0MDUwMDAyMDE3MzQwMjEwMTBBNDgyNDM3Cis6MTBBNjAwMDBBRjQ5MDAyODNDMDQwODAwOTQ4NDAwNjIzMTEwMDA3RkE4Cis6MTBBNjEwMDAwMjFBODgyMTNDMDcwMDBDMEUwMDBDQ0QwMjI3OTgyMTVECis6MTBBNjIwMDAwMDQwMjgyMTAyNjAyMDIxOEZCRjAwMjg4RkI1MDAyNDIwCis6MTBBNjMwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEFDCis6MTBBNjQwMDA4RkIwMDAxMDBBMDAxNTgwMjdCRDAwMzA4RjgzMDAxQ0RBCis6MTBBNjUwMDA4QzYyMDAwNDEwNDAwMDAzMDAwMDAwMDAwM0UwMDAwOENBCis6MTBBNjYwMDAwMDAwMDAwMDhDNjQwMDEwOEM2NTAwMDgwQTAwMTVCOTE5Cis6MDRBNjcwMDA4QzY2MDAwQ0U4Cis6MENBNjc0MDAwMDAwMDAwMDAwMDAwMDFCMDAwMDAwMEZCMAorOjEwQTY4MDAwMDAwMDAwMEEwMDAwMDAwODAwMDAwMDA2MDAwMDAwMDVBRAorOjEwQTY5MDAwMDAwMDAwMDUwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDNBQQorOjEwQTZBMDAwMDAwMDAwMDMwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDM5RQorOjEwQTZCMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI5MgorOjEwQTZDMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI4MgorOjEwQTZEMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI3MgorOjEwQTZFMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDE2MworOjA4QTZGMDAwMDAwMDAwMDEwMDAwMDAwMTYwCis6MDhBNkY4MDAwODAwMEY1ODA4MDAwREIwMjYKKzoxMEE3MDAwMDA4MDAwRkVDMDgwMDEwOTQwODAwMEY4MDA4MDAwRkMwMkMKKzoxMEE3MTAwMDA4MDAxMUNDMDgwMDBEQ0MwODAwMTFGMDA4MDAwRTFDMzgKKzoxMEE3MjAwMDA4MDAxNjMwMDgwMDE1RDgwODAwMERDQzA4MDAwRENDMjQKKzoxMEE3MzAwMDA4MDAwRENDMDgwMDEyN0MwODAwMTI3QzA4MDAwRENDMkIKKzoxMEE3NDAwMDA4MDAwRENDMDgwMDE1N0MwODAwMERDQzA4MDAwRENDQ0QKKzoxMEE3NTAwMDA4MDAwRENDMDgwMDBEQ0MwODAwMTNFQzA4MDAwRENDNEYKKzoxMEE3NjAwMDA4MDAwRENDMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDNjUKKzoxMEE3NzAwMDA4MDAwRENDMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDNTUKKzoxMEE3ODAwMDA4MDAwRENDMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDNDUKKzoxMEE3OTAwMDA4MDAwRENDMDgwMDBGRTAwODAwMERDQzA4MDAwRENDMUYKKzoxMEE3QTAwMDA4MDAxNTJDMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDQkQKKzoxMEE3QjAwMDA4MDAwRENDMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMTUKKzoxMEE3QzAwMDA4MDAwRENDMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDUKKzoxMEE3RDAwMDA4MDAwRENDMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDRjUKKzoxMEE3RTAwMDA4MDAwRENDMDgwMDBEQ0MwODAwMTQ1ODA4MDAwRENDNTIKKzoxMEE3RjAwMDA4MDAwRENDMDgwMDEzNzAwODAwMTJFMDA4MDAyRUEwMUQKKzoxMEE4MDAwMDA4MDAyRUE4MDgwMDJFNzAwODAwMkU3QzA4MDAyRTg4NTQKKzoxMEE4MTAwMDA4MDAyRTk0MDgwMDQ2QzAwODAwM0YwQzA4MDA0NjQwN0YKKzoxMEE4MjAwMDA4MDA0NkMwMDgwMDQ2QzAwODAwNDRDMDA4MDA0NkMwRjIKKzoxMEE4MzAwMDA4MDA0NzA4MDgwMDU1MzAwODAwNTRGMDA4MDA1NEJDRDAKKzowQ0E4NDAwMDA4MDA1NDkwMDgwMDU0NkMwODAwNTQyOEQ0Cis6MDRBODRDMDAwQTAwMEM3NjdDCis6MTBBODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Mjc4NzAzNTVDCis6MTBBODYwMDAyRTMwMkUzMDZBMzMwMDAwMDUwMDAwMDMwMDAwMDAwMDg3Cis6MTBBODcwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBBODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBBODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBBOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBBOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBBOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBBOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBBOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBBOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBBOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBBOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBBOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBBOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBBOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBBOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBBOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBBOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBBOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBBOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBBOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBBOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBBOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBBOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBBQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBBQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBBQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBBQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBBQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBBQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBBQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBBQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBBQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBBQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBBQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBBQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBBQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBBQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBBQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBBQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBBQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBBQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBBQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBBQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBBQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBBQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBBQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBBQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBBQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBBQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBBQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBBQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBBQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBBQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBBQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBBQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBBQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBBQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBBQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBBQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBBQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBBQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBBQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBBQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBBQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBBQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBBRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBBRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBBRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBBRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBBRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBBRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBBRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBBRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBBREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBBREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBBREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBBREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBBREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBBREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBBRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBBRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBBRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBBRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBBRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBBRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBBRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBBRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBBRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBBRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBBRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBBRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBBRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBBRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBBRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBBRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBBRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBBRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBBRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBBRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBBRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBBRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBBRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBBRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBBRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBBRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBBRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBBRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBBRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBCMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBCMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBCMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBCMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBCMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBCMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBCMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBCMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBCMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBCMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBCMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBCMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBCMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBCMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBCMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBCMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBCMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBCMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBCMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBCMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBCMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBCMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBCMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBCMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBCMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBCMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBCMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBCMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBCMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBCMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBCMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBCMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBCMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBCMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBCMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBCMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBCMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBCMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBCMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBCMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBCMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBCMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBCMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBCMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBCMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBCMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBCMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBCMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBCMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBCMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBCMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBCMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBCMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBCMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBCM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBCM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBCM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBCM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBCM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBCM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBCNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBCNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBCNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBCNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBCNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBCNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBCNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBCNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBCNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBCNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBCNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBCNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBCNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBCNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBCNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBCNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBCNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBCNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBCNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBCNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBCNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBCNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBCNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBCNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBCNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBCNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBCNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBCNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBCNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBCNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBCNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBCNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBCNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBCNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBCNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBCNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBCNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBCNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBCNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBCNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBCNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBCNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBCNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBCNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBCNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBCNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBCNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBCNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBCNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBCNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBCNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBCNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBCNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBCNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBCN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBCN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBCN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBCN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBCN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBCN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBCODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBCODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBCODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBCODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBCODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBCODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBCODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBCODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBCODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBCOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBCOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBCOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBCOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBCOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBCOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBCOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBCOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBCOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBCOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBCOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBCOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBCOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBCOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBCOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBCOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBCOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBCOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBCOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBCOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBCOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBCQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBCQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBCQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBCQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBCQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBCQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBCQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBCQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBCQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBCQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBCQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBCQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBCQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBCQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBCQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBCQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBCQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBCQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBCQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBCQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBCQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBCQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBCQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBCQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBCQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBCQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBCQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBCQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBCQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBCQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBCQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBCQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBCQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBCQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBCQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBCQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBCQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBCQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBCQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBCQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBCQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBCQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBCQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBCQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBCQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBCRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBCRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBCRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBCRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBCRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBCRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBCRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBCRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBCRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBCREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBCREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBCREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBCREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBCREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBCREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBCRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBCRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBCRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBCRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBCRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBCRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBCRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBCRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBCRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBCRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBCRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBCRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBCRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBCRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBCRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBCRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBCRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBCRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBCRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBCRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBCRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBCRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBCRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBCRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBCRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBCRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBCRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBCRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBCRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBCRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBDMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBDMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBDMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBDMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBDMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBDMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBDMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBDMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBDMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBDMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBDMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBDMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBDMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBDMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBDMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBDMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBDMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBDMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBDMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBDMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBDMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBDMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBDMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBDMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBDMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBDMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBDMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBDMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBDMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBDMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBDMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBDMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBDMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBDMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBDMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBDMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBDMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBDMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBDMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBDMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBDMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBDMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBDMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBDMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBDMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBDMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBDMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBDMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBDMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBDMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBDMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBDMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBDMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBDM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBDM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBDM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBDM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBDM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBDM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBDNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBDNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBDNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBDNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBDNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBDNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBDNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBDNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBDNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBDNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBDNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBDNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBDNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBDNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBDNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBDNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBDNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBDNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBDNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBDNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBDNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBDNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBDNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBDNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBDNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBDNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBDNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBDNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBDNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBDNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBDNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBDNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBDNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBDNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBDNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBDNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBDNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBDNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBDNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBDNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBDNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBDNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBDNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBDNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBDNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBDNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBDNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBDNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBDNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBDNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBDNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBDNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBDNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBDNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBDN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBDN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBDN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBDN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBDN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBDN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBDODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBDODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBDODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBDODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBDODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBDODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBDODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBDODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBDOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBDOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBDOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBDOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBDOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBDOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBDOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBDOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBDOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBDOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBDOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBDOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBDOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBDOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBDOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBDOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBDOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBDOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBDOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBDOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBDOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBDQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBDQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBDQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBDQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBDQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBDQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBDQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBDQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBDQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBDQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBDQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBDQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBDQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBDQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBDQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBDQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBDQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBDQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBDQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBDQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBDQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBDQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBDQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBDQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBDQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBDQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBDQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBDQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBDQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBDQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBDQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBDQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBDQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBDQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBDQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBDQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBDQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBDQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBDQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBDQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBDQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBDQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBDQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBDQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBDQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBDRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBDRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBDRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBDRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBDRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBDRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBDRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBDRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBDRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBDREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBDREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBDREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBDREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBDREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBDREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBDRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBDRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBDRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBDRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBDRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBDRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBDRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBDRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBDRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBDRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBDRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBDRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBDRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBDRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBDRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBDRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBDRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBDRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBDRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBDRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBDRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBDRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBDRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBDRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBDRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBDRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBDRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBDRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBDRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBDRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBEMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBEMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBEMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBEMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBEMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBEMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBEMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBEMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBEMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBEMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBEMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBEMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBEMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBEMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBEMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBEMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBEMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBEMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBEMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBEMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBEMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBEMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBEMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBEMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBEMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBEMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBEMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBEMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBEMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBEMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBEMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBEMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBEMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBEMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBEMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBEMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBEMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBEMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBEMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBEMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBEMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBEMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBEMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBEMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBEMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBEMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBEMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBEMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBEMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBEMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBEMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBEMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBEMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBEMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBEM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBEM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBEM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBEM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBEM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBEM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBENDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBENDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBENDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBENDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBENDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBENDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBENDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBENDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBENDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBENEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBENEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBENEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBENEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBENEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBENEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBENTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBENTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBENTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBENTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBENTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBENTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBENTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBENTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBENTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBENUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBENUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBENUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBENUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBENUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBENUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBENjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBENjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBENjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBENjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBENjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBENjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBENjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBENjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBENjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBENkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBENkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBENkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBENkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBENkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBENkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBENzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBENzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBENzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBENzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBENzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBENzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBENzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBENzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBENzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBEN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBEN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBEN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBEN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBEN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBEN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBEODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBEODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBEODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBEODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBEODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBEODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBEODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBEODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBEODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBEOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBEOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBEOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBEOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBEOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBEOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBEOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBEOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBEOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBEOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBEOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBEOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBEOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBEOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBEOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBEOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBEOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBEOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBEOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBEOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBEOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBEQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBEQTIwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMEUzCis6MTBEQTMwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDAyNDQyNzE0MDZGCis6MTBEQTQwMDAzQzAzMDgwMDI0NjM3NUUwQUM0MDAwMDAwMDQzMjAyQjM5Cis6MTBEQTUwMDAxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAzN0JEN0ZGQ0ZDCis6MTBEQTYwMDAwM0EwRjAyMTNDMTAwODAwMjYxMDMxRDgzQzFDMDgwMDBGCis6MTBEQTcwMDAyNzlDNzE0MDBFMDAxMEVEMDAwMDAwMDAwMDAwMDAwRDFBCis6MTBEQTgwMDAzMEE1RkZGRjMwQzYwMEZGMjc0MzAxODA4RjQyMDFCODU5Cis6MTBEQTkwMDAwNDQwRkZGRTI0MDIwMDAyQUM2NDAwMDBBNDY1MDAwOEZDCis6MTBEQUEwMDBBMDY2MDAwQUEwNjIwMDBCM0MwMjEwMDBBQzY3MDAxOEUwCis6MTBEQUIwMDAwM0UwMDAwOEFGNDIwMUI4M0MwMzYwMDA4QzYyNEZGOEZECis6MTBEQUMwMDAwNDQwRkZGRTNDMDIwMjAwQUM2NDRGQzBBQzYyNEZDNDk1Cis6MTBEQUQwMDAzQzAyMTAwMDAzRTAwMDA4QUM2MjRGRjg5NDgyMDAwQzk2Cis6MTBEQUUwMDAyNDg2MDAxNDAwQTAzODIxMDAwMjEzMDIwMDAyMTA4MEQ2Cis6MTBEQUYwMDAwMDgyNDAyMTAwQzgxMDJCMTA0MDAwNTcwMDAwMDAwMDk5Cis6MTBEQjAwMDA5MEMzMDAwMDJDNjIwMDA5NTA0MDAwNTE5MEMyMDAwMUY3Cis6MTBEQjEwMDAwMDAzMTA4MDNDMDMwODAwMjQ2MzcwRjAwMDQzMTAyMUQwCis6MTBEQjIwMDA4QzQyMDAwMDAwNDAwMDA4MDAwMDAwMDA5MEMzMDAwMThCCis6MTBEQjMwMDAyNDAyMDAwQTE0NjIwMDNBMDAwMDAwMDAwMTA2MTAyM0NCCis6MTBEQjQwMDAyQzQyMDAwQTE0NDAwMDM2MjRDNjAwMDI4Q0UyMDAwMDc5Cis6MTBEQjUwMDAzNDQyMDEwMEFDRTIwMDAwOTBDMjAwMDA5MEMzMDAwMTFBCis6MTBEQjYwMDA5MEM0MDAwMjkwQzUwMDAzMDAwMzFDMDAwMDAyMTYwMEQwCis6MTBEQjcwMDAwMDQzMTAyNTAwMDQyMjAwMDA0NDEwMjUwMDQ1MTAyNTE0Cis6MTBEQjgwMDAyNEM2MDAwNEFDRTIwMDA0OTBDMjAwMDA5MEMzMDAwMTZGCis6MTBEQjkwMDA5MEM0MDAwMjkwQzUwMDAzMDAwMjE2MDAwMDAzMUMwMEEwCis6MTBEQkEwMDAwMDQzMTAyNTAwMDQyMjAwMDA0NDEwMjUwMDQ1MTAyNUU0Cis6MTBEQkIwMDAyNEM2MDAwNDBBMDAwQ0FBQUNFMjAwMDg5MEMzMDAwMUNECis6MTBEQkMwMDAyNDAyMDAwNDE0NjIwMDE2MjRDNjAwMDI5MEMyMDAwMDYxCis6MTBEQkQwMDA5MEM0MDAwMThDRTMwMDAwMDAwMjEyMDAwMDQ0MTAyNUY0Cis6MTBEQkUwMDAzNDYzMDAwNDI0QzYwMDAyQUNFMjAwMEMwQTAwMENBQTU0Cis6MTBEQkYwMDBBQ0UzMDAwMDkwQzMwMDAxMjQwMjAwMDMxNDYyMDAwODlCCis6MTBEQzAwMDAyNEM2MDAwMjhDRTIwMDAwOTBDMzAwMDAyNEM2MDAwMTdDCis6MTBEQzEwMDAzNDQyMDAwOEEwRTMwMDEwMEEwMDBDQUFBQ0UyMDAwMEE1Cis6MTBEQzIwMDAwM0UwMDAwODI0MDIwMDAxOTBDMzAwMDEyNDAyMDAwMjY2Cis6MTBEQzMwMDAxMDYyMDAwMjI0QzQwMDAyMDEwMDIwMjEwQTAwMENBQTg0Cis6MTBEQzQwMDAwMDgwMzAyMTBBMDAwQ0FBMjRDNjAwMDE5MEMyMDAwMTA1Cis6MTBEQzUwMDAwQTAwMENBQTAwQzIzMDIxMDNFMDAwMDgwMDAwMTAyMUQ1Cis6MTBEQzYwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAwRTAwMTFGRURCCis6MTBEQzcwMDAwMDgwODAyMTkzNjIwMDA1MjQwM0ZGRkUwMjAwMjAyMTIyCis6MTBEQzgwMDAwMDQzMTAyNDhGQkYwMDE0OEZCMDAwMTBBMzYyMDAwNTYyCis6MTBEQzkwMDAwQTAwMTIwNzI3QkQwMDE4MjdCREZGRThBRkIwMDAxMDJCCis6MTBEQ0EwMDBBRkJGMDAxNDBFMDAwRjE4MDA4MDgwMjE5MzYyMDAwMEE3Cis6MTBEQ0IwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDQyNDAyMDEwMEZBCis6MTBEQ0MwMDBBRjQyMDE4MDBBMDAwRDIyMDIwMDIwMjFBRjQwMDE4MEY2Cis6MTBEQ0QwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTAwQTAwMEY3OUJFCis6MTBEQ0UwMDAyN0JEMDAxODI3QkRGRjgwQUZCRTAwNzhBRkI3MDA3NDE2Cis6MTBEQ0YwMDBBRkIzMDA2NEFGQkYwMDdDQUZCNjAwNzBBRkI1MDA2Q0NGCis6MTBERDAwMDBBRkI0MDA2OEFGQjIwMDYwQUZCMTAwNUNBRkIwMDA1ODE0Cis6MTBERDEwMDA4RjUwMDEyODkzNjMwMDNGOTM2MjAwMDUwMDAwRjAyMUJCCis6MTBERDIwMDAzMDczMDBGRjAwMDIxMDI3MzA0MjAwMDEwMDAwQjgyMUNDCis6MTBERDMwMDAxNDQwMDA2NkFGQTAwMDUwOTM0MjAxMTY5MzQzMDExMkI1Cis6MTBERDQwMDAzMDQyMDBGRjMwNjMwMEZGMDM0MjIwMjEwMzQzMTAyMUQzCis6MTBERDUwMDAyNDQ1NDAwMDhGODIwMDE4MTA0MDAwMTgyNDkxNDAwMDk0Cis6MTBERDYwMDA4RjQyMDEwNDNDMDMwMDAxMDA0MzEwMjQxMDQwMDAxM0MzCis6MTBERDcwMDAwMDAwMDAwMDhDQTMwMDBDOEY2MjAwMzAxNDYyMDFCNTFCCis6MTBERDgwMDAyNDAyMDAwMThDQTMwMDEwOEY2MjAwMkMxNDYyMDFCMUU4Cis6MTBERDkwMDAyNDAyMDAwMTk3NjIwMDNBOTQ4MzQwMDAzMDQyRkZGRjYyCis6MTBEREEwMDAxNDYyMDFBQzI0MDIwMDAxOTc2MjAwMzg5NjIzMDAwMjNECis6MTBEREIwMDAzMDQyRkZGRjE0NjIwMUE3MjQwMjAwMDE5MzYyMDAwMEI5Cis6MTBEREMwMDAzMDQzMDBGRjI0MDIwMDIwMTA2MjAwMDUyNDAyMDA1MEFFCis6MTBEREQwMDAxMDYyMDAwNjAwMDAwMDAwMEEwMDBENkMwMDAwMDAwMDQ4Cis6MTBEREUwMDAwMDAwMDAwRDBBMDAwRDc1QUZBMDAwMzAzQzFFMDgwMEI5Cis6MTBEREYwMDAyN0RFNzFBMDBBMDAwRDc1QUZBMDAwMzAzQzAyMDgwMEJDCis6MTBERTAwMDA4QzQyMDBEQzI0NDIwMDAxM0MwMTA4MDBBQzIyMDBEQzEyCis6MTBERTEwMDAwRTAwMTJDODAwMDAwMDAwMEEwMDBGMDM4RkJGMDA3QzM0Cis6MTBERTIwMDA4RjQyMDEwNDNDMDMwMDIwOTIzNDAwMEQwMDQzMTAyNDczCis6MTBERTMwMDAwMDAyMjAyQjAwMDQyMTQwQUZBNDAwMzA4RjQzMDEwNEQ2Cis6MTBERTQwMDAzQzAyMDA0MDAwNjIxODI0MTQ2MDAwMDIzNDg3MDA0MDQ1Cis6MTBERTUwMDAwMDgwMzgyMTMyODIwMDIwQUZBNzAwMzAxNDQwMDAwMjM5Cis6MTBERTYwMDAzNEU2MDA4MDAwRTAzMDIxMTBDMDAwMEJBRkE2MDAzMDg3Cis6MTBERTcwMDA5M0M1MDAwODhGNjcwMDRDMDIwMDIwMjEwMDA1MkIwMDhECis6MTBERTgwMDAzNEE1MDA4MTMwQTVGMDgxMEUwMDBDOEQzMEM2MDBGRjU2Cis6MTBERTkwMDAwQTAwMEYwMDAwMDAwMDAwOTM2MjAwM0UzMDQyMDA0MDg0Cis6MTBERUEwMDAxMDQwMDAwRTI0MDIwMDA0NTY2MjAwMDYyNDAyMDAxMkY0Cis6MTBERUIwMDAwMjAwMjAyMTBFMDAxM0Q2MDIyMDMwMjEwQTAwMEYwMzk5Cis6MTBERUMwMDA4RkJGMDA3QzE2NjIwMDA1MDAwMDAwMDAwRTAwMEQxM0RECis6MTBERUQwMDAwMDAwMjAyMTBBMDAwRjAzOEZCRjAwN0M5NzQzMDExQTI2Cis6MTBERUUwMDA5NjI0MDAwRTkzNjIwMDM1MzI4NTAwMDQzMDc2RkZGRkUxCis6MTBERUYwMDAwMDQ0MjAwNEFGQTQwMDU0OEUzMjAwMDQxMEEwMDAxNThBCis6MTBERjAwMDA4RTM1MDAwODkzNjIwMDNFMzA0MjAwNDAxMDQwMDAwNzBBCis6MTBERjEwMDAwMDAwMDAwMDBFMDAxMzE4MDI0MDIwMjExMDQwMDAwREU4Cis6MTBERjIwMDAwMDAwMDAwMDBBMDAwRjAwMDAwMDAwMDA4RjYyMDA0NEEzCis6MTBERjMwMDAwMjQyMTAyMzA0NDAwMTQ1MDAwMDAwMDA4RjYyMDA0OEE3Cis6MTBERjQwMDAwMjQyMTAyMzA0NDEwMTQxMjQwNDAwMTYwQTAwMEUwMzdBCis6MTBERjUwMDA4RkMyMDAwNDhGNjIwMDQ4MDI0MjEwMjMwNDQwMDAwODcwCis6MTBERjYwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjMxMDAyNDQyMDAwMTA1Cis6MTBERjcwMDAzQzAxMDgwMEFDMjIzMTAwMEEwMDBFRjUwMDAwMDAwMDUwCis6MTBERjgwMDA4RjYyMDA0MDAyNDIxMDIzMTg0MDAwMDkyNDAyMDAwQzU2Cis6MTBERjkwMDAzQzAyMDgwMDhDNDIzMTAwMzI5NDAwRkMwMDAwQjAyMUE5Cis6MTBERkEwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjMxMDAyNDAyMDAwQzk0Cis6MTBERkIwMDBBRkEyMDAzMDhGNjIwMDQwMDA1MjIwMjMxODgwMDAwRDc1Cis6MTBERkMwMDAwMkM0MTAyQTE0NDAwMTE2MDAwMDAwMDAxNDk2MDAwNjM2Cis6MTBERkQwMDAwMkM0MTAyMzNBODIwMDAxMzA0MjAwMDExNDQwMDExMEIzCis6MTBERkUwMDAwMDAwMDAwMDAyQzQxMDIzMDI0NDkwMjEwQTAwMERFQjNGCis6MTBERkYwMDAzMDU2RkZGRjAwMDAyMDIxMzI4MjAwMDIxMDQwMDAxQTNDCis6MTBFMDAwMDAzMjgyMDAxMDkzNjIwMDNFMzA0MjAwNDA1MDQwMDAxMUM2Cis6MTBFMDEwMDA4RkMyMDAwNDBFMDAxMUZFMDIwMDIwMjEyNDAyMDAxODBECis6MTBFMDIwMDBBMzYyMDAzRjkzNjIwMDA1MjQwM0ZGRkUwMjAwMjAyMTRCCis6MTBFMDMwMDAwMDQzMTAyNDBFMDAxMjA3QTM2MjAwMDUyNDA0MDAzOUQ3Cis6MTBFMDQwMDAwMDAwMjgyMTBFMDAxMzAxMjQwNjAwMTgwQTAwMEYwMjA4Cis6MTBFMDUwMDAyNDAyMDAwMTI0MDQwMDE3MDA0MEY4MDkwMDAwMDAwMDE5Cis6MTBFMDYwMDAwQTAwMEYwMjI0MDIwMDAxMTA0MDAwRjgwMDAwMDAwMDI2Cis6MTBFMDcwMDA4RjYzMDA0QzhGNjIwMDU0MDJBMjEwMjMxQzQwMDBGM0Y3Cis6MTBFMDgwMDAwMkEzMTAyMzA0NDIwMDAxMDA2MEE4MjFBRkE0MDAxOERECis6MTBFMDkwMDBBRkIyMDAxMEFGQjYwMDE0OTM0MjAxMjA4RjY1MDA0MDZDCis6MTBFMEEwMDA5NzYzMDAzQzMwNDIwMEZGMDM0MjEwMjEwMDQ0MTAyMURFCis6MTBFMEIwMDA4RkE0MDA1NDMwNjNGRkZGMjQ0MjQwMDAwMDgzMTgyQkRDCis6MTBFMEMwMDA4RkE0MDAzMEFGQTIwMDIwQUZBNTAwMjgwMDgzMjAyNTM4Cis6MTBFMEQwMDBBRkE0MDAzMEFGQTUwMDI0QUZBMDAwMkNBRkI1MDAzNDMyCis6MTBFMEUwMDA5MzYyMDAzRTMwNDIwMDA4NTA0MDAwMTE4RkMyMDAwMDkxCis6MTBFMEYwMDAwMjIwMjAyMTI3QTUwMDM4MEUwMDBDQTRBRkEwMDAzODc0Cis6MTBFMTAwMDA1NDQwMDAwQjhGQzIwMDAwOEZBMjAwMzgzMDQyMDEwMDQzCis6MTBFMTEwMDA1MDQwMDAwNzhGQzIwMDAwOEZBMzAwM0M4RjYyMDA2MDU4Cis6MTBFMTIwMDAwMDYyMTAyMzA0NDMwMDAxQUY2MzAwNjA4RkMyMDAwMDRGCis6MTBFMTMwMDAwMDQwRjgwOTI3QTQwMDEwOEZBMjAwMzAzMDQyMDAwMkVFCis6MTBFMTQwMDA1NDQwMDAwMTMyOTQwMEZFOTM2MjAwM0UzMDQyMDA0MDkxCis6MTBFMTUwMDAxMDQwMDAzNzhGQTMwMDE0OEY2MjAwNTQxNkEyMDAxQURCCis6MTBFMTYwMDAzMjgyMDAwMTI0MDIwMDE0MTI2MjAwMTAyQTYyMDAxNTlCCis6MTBFMTcwMDAxMDQwMDAwNjI0MDIwMDE2MjQwMjAwMEMxMjYyMDAwNzYwCis6MTBFMTgwMDAzMjgyMDAwMTBBMDAwRTVGMDAwMDAwMDAxMjYyMDAwNUVBCis6MTBFMTkwMDAzMjgyMDAwMTBBMDAwRTVGMDAwMDAwMDAwQTAwMEU1QUUxCis6MTBFMUEwMDAyNDE3MDAwRTBBMDAwRTVBMjQxNzAwMTAwQTAwMEU1RUYzCis6MTBFMUIwMDAyNDE3MDAxMjkzNjIwMDIzMjQwM0ZGQkQwMDQzMTAyNEEwCis6MTBFMUMwMDBBMzYyMDAyMzMyODIwMDAxMTA0MDAwMTk4RkEzMDAxNEMzCis6MTBFMUQwMDAyNDAyMDAwQzEyNjIwMDBFMkE2MjAwMEQxMDQwMDAwNjlDCis6MTBFMUUwMDAyNDAyMDAwRTI0MDIwMDBBMTI2MjAwMDc4RkEyMDAyNEZCCis6MTBFMUYwMDAwQTAwMEU3NzI0NDIwMDAxMTI2MjAwMDg4RkEyMDAyNDU4Cis6MTBFMjAwMDAwQTAwMEU3NzI0NDIwMDAxMEEwMDBFNzUyNDE3MDAwODQ4Cis6MTBFMjEwMDAyNDAyMDAwRTE2RTIwMDAyMjQxNzAwMTYyNDE3MDAxMDM0Cis6MTBFMjIwMDA4RkEyMDAyNDI0NDIwMDAxQUZBMjAwMjQ4RkEzMDAxNDc3Cis6MTBFMjMwMDA4RkEyMDAyNDhGNzMwMDQwMDA0MzEwMjFBRjYyMDA0MDgyCis6MTBFMjQwMDA4RkEyMDA1NDkzNjQwMDM2OEY2MzAwNDAwMkEyODgyMTlECis6MTBFMjUwMDAzNDAyRkZGRjAwODIxMDA0MDA2MjE4MjFBRjYzMDA0OEZGCis6MTBFMjYwMDA4RkE2MDAzMDMwQzIwMDA4MTA0MDAwMEUwMDAwMDAwMEYxCis6MTBFMjcwMDA4RjYyMDA1ODE2MjIwMDA0MzBDNjAwRkY5NzQyMDExQTMwCis6MTBFMjgwMDA1MDQwMDAwMTM0QzYwMDEwOTNDNTAwMDg4RkE3MDAzNDI5Cis6MTBFMjkwMDAwMjAwMjAyMTAwMDUyQjAwMzRBNTAwODAwRTAwMEM4RDBCCis6MTBFMkEwMDAzMEE1RjA4MDhGNjIwMDQwMDA1MzEwMjMxODQwMDAxNzAzCis6MTBFMkIwMDA4RkEyMDAxODNDMDIwODAwOEM0MjMxOTgzMDQyMDAxMEI2Cis6MTBFMkMwMDAxMDQwMDAwOTI0MDIwMDAxOTc2MjAwNjgxNDQwMDAwNjEzCis6MTBFMkQwMDAyNDAyMDAwMUE3NjIwMDY4OTc0MjAwN0EyNDQyMDAwQUUzCis6MTBFMkUwMDAwQTAwMEVCQkE3NjIwMDEyQTc2MjAwMTIwRTAwMTFGRTA4Cis6MTBFMkYwMDAwMjAwMjAyMTkzNjIwMDdEMjQwMzAwMDEwMjAwMjAyMUZFCis6MTBFMzAwMDAzNDQyMDAwMTBBMDAwRUI5QUZBMzAwNTAxODQwMDAwQUMxCis6MTBFMzEwMDAwMDAwMDAwMDBFMDAxMUZFMDIwMDIwMjE5MzYyMDA3RDJCCis6MTBFMzIwMDAyNDAzMDAwMTAyMDAyMDIxQUZBMzAwNTAzNDQyMDAwNDY2Cis6MTBFMzMwMDAwRTAwMTIwN0EzNjIwMDdEOTM2MjAwM0UzMDQyMDA0MDRGCis6MTBFMzQwMDAxNDQwMDAwQzMyODIwMDAxMTA0MDAwMEEwMDAwMDAwMDVFCis6MTBFMzUwMDA4RjYzMDA0MDhGQzIwMDA0MjQwNDAwMTgyNDYzMDAwMTZFCis6MTBFMzYwMDAwMDQwRjgwOUFGNjMwMDQwOEZBMjAwMzAwQTAwMEYwMjlFCis6MTBFMzcwMDAzMDQyMDAwNDhGNjIwMDU4MTA1MTAwMTAwMDAwMDAwMDZECis6MTBFMzgwMDA4RjYyMDAxODAyNDIxMDIzMUM0MDAwMDgyNDA0MDAwMTgwCis6MTBFMzkwMDA4RjYyMDAxODE2NDIwMDA5MDAwMDAwMDA4RjYyMDAxQzA2Cis6MTBFM0EwMDAwMkEyMTAyMzA0NDAwMDA1MDAwMDAwMDBBRjcxMDA1OEQ1Cis6MTBFM0IwMDBBRkE0MDA1MEFGNzIwMDE4QUY3NTAwMUMxMkUwMDAwQjQ0Cis6MTBFM0MwMDA4RkEyMDA1MDBFMDAxMUZFMDIwMDIwMjFBMzc3MDAzRjEzCis6MTBFM0QwMDAwRTAwMTIwNzAyMDAyMDIxMDJFMDMwMjEyNDA0MDAzNzQxCis6MTBFM0UwMDAwRTAwMTMwMTAwMDAyODIxOEZBMjAwNTAxMDQwMDAwM0VFCis6MTBFM0YwMDAwMDAwMDAwMDBFMDAwQzlCMDIwMDIwMjExMkMwMDAwNTRFCis6MTBFNDAwMDAwMDAwMTgyMThGQTIwMDMwMzA0MjAwMDQ1MDQwMDAxMTVCCis6MTBFNDEwMDAwMDYwMTAyMTI0MDMwMDAxMEEwMDBGMDIwMDYwMTAyMTk3Cis6MTBFNDIwMDAwRTAwMTFGRTAyMDAyMDIxOTM2MjAwN0QwMjAwMjAyMUQ3Cis6MTBFNDMwMDAzNDQyMDAwNDBFMDAxMjA3QTM2MjAwN0QwRTAwMEM5QjA0Cis6MTBFNDQwMDAwMjAwMjAyMTBBMDAwRjAyMjQwMjAwMDFBRjQwMDA0NDE0Cis6MTBFNDUwMDAyNDAyMDAwMThGQkYwMDdDOEZCRTAwNzg4RkI3MDA3NDRDCis6MTBFNDYwMDA4RkI2MDA3MDhGQjUwMDZDOEZCNDAwNjg4RkIzMDA2NEY2Cis6MTBFNDcwMDA4RkIyMDA2MDhGQjEwMDVDOEZCMDAwNTgwM0UwMDAwOERECis6MTBFNDgwMDAyN0JEMDA4MDhDODcwMDA0OEM4NjAwMDAwMDAwMTAyMUNFCis6MTBFNDkwMDAwMEU1MzgyMTAwRTUyODJCMDBDMjMwMjEwMEM1MzAyMURECis6MTBFNEEwMDBBQzg3MDAwNDAzRTAwMDA4QUM4NjAwMDA4RjQyMDFCODhFCis6MTBFNEIwMDAwNDQwRkZGRTI0MDIwODAwQUY0MjAxQjgwM0UwMDAwODU4Cis6MTBFNEMwMDAwMDAwMDAwMDNDMDIwMDA4MDM0MjI4MjE5NEEyMDA0OEZBCis6MTBFNEQwMDAzMDg0RkZGRjEwNDAwMDFCMjQ4NDAwMTI5NEEyMDA0OEU3Cis6MTBFNEUwMDAzMDQyRkZGRjAwNDQxMDJBMTA0MDAwMTcyNDAyMDAwM0FFCis6MTBFNEYwMDAyNDAyMDAxQTkzNDMwMTIwQTM0MjAxOEI4RjgyMDAwMDYzCis6MTBFNTAwMDAzMDYzMDBGRjMwNDI0MDAwMTA0MDAwMDkyNDYzRkZGRUVBCis6MTBFNTEwMDA5NEEyMDA0ODMwNDJGRkZGMDA0MzEwMkIxNDQwMDAwNTM2Cis6MTBFNTIwMDA4RjgyMDAwNEE3NDMwMTk0MEEwMDBGM0MzNDQyMDAwMThCCis6MTBFNTMwMDA4RjgyMDAwNDI0MDNGRkZFMDA0MzEwMjQwM0UwMDAwODQwCis6MTBFNTQwMDBBRjgyMDAwNDI0MDIwMDAzMDNFMDAwMDhBMzQyMDE4QjExCis6MTBFNTUwMDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDlDCis6MTBFNTYwMDBBRkJGMDAxQzMwQjFGRkZGMzBEMEZGRkYzMEYyRkZGRjI0Cis6MTBFNTcwMDA4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDBBRjQ0MDE4MDVDCis6MTBFNTgwMDBBRjQ0MDAyMDBFMDAwRjFFMDIwMDIwMjE4RjgzMDAwMEU4Cis6MTBFNTkwMDA4Rjg0MDAwNEE3NTEwMThDQTc1MDAxOEVBNzQzMDE5MERFCis6MTBFNUEwMDA4RjgzMDAwODMwODI4MDAwQUY0MzAxQThBNzUyMDE4ODAyCis6MTBFNUIwMDAxMDQwMDAwRThGODIwMDA0OTM0MjAxMTYzMDQyMDBGQzhFCis6MTBFNUMwMDAyNDQyMDAwNDAwNUExMDIxOEM0MjQwMDAzMDQyRkZGRkQ4Cis6MTBFNUQwMDAxNDQwMDAwNjhGODIwMDA0M0MwMkZGRkYzNDQyN0ZGRjlDCis6MTBFNUUwMDAwMDgyMTAyNEFGODIwMDA0OEY4MjAwMDQyNDAzQkZGRjQ2Cis6MTBFNUYwMDAwMDQzMTAyNEE3NDIwMUE2OTc0MzAxMEM4RjQyMDEwNDU3Cis6MTBFNjAwMDAwMDAzMUMwMDMwNDJGRkZGMDA2MjE4MjVBRjQzMDFBQzNECis6MTBFNjEwMDAzQzAyMTAwMEFGNDIwMUI4OEZCRjAwMUM4RkIyMDAxODNGCis6MTBFNjIwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDU4Cis6MTBFNjMwMDAzQzAyMDgwMDhDNDIwMDM4MjdCREZGQzhBRkIyMDAyODVBCis6MTBFNjQwMDBBRkJGMDAzMEFGQjMwMDJDQUZCMTAwMjRBRkIwMDAyMDlCCis6MTBFNjUwMDAwMDAwOTAyMTNDMEUwODAwMjVDRTAwMzgxNDQwMDAwMjM2Cis6MTBFNjYwMDAyNDRERkZGRjAwMDA2ODIxOEY4NDAwMDAzMDgyNDAwMEFECis6MTBFNjcwMDAxMDQwMDAwQTMwODI4MDAwM0MwMjAwMjAwMDgyMTAyNEZBCis6MTBFNjgwMDA1MDQwMDAwNjMwODI4MDAwOEY4MjAwMDQyNDAzQkZGRkM4Cis6MTBFNjkwMDAwMDgzMTgyNDBBMDAwRjlEMzQ0MjEwMDAxMDQwMDAwQTI1Cis6MTBFNkEwMDAzQzAyMDAyMDAwODIxMDI0MTA0MDAwMDc4RjgyMDAwNEVBCis6MTBFNkIwMDAzQzAzRkZGRjM0NjM3RkZGMDA4MzE4MjQzNDQyODAwMDUzCis6MTBFNkMwMDBBRjgyMDAwNEFGODMwMDAwOEY0ODAwNzA5MzQyMDExMkI0Cis6MTBFNkQwMDA4Rjg2MDAwMDMwNDIwMEZGMDAwMjI4ODIzMEMyMDEwMDE1Cis6MTBFNkUwMDAxMDQwMDA0MzI0QTQwMDAzMzBDMjQwMDAxMDQwMDAxMDNBCis6MTBFNkYwMDAzMEMyMjAwMDAwMDQxMDgwMDA1QTEwMjE4QzQzNDAwMERBCis6MTBFNzAwMDAyNEE0MDAwNDAwMDQxMDgwQUZBMzAwMTAwMDVBMTAyMUJDCis6MTBFNzEwMDA4QzQyNDAwMEFGQTIwMDE0OTM0MjAxMTYzMDQyMDBGQzJDCis6MTBFNzIwMDAwMDVBMTAyMThDNDI0MDAwMEEwMDBGQzRBRkEyMDAxODBBCis6MTBFNzMwMDAxMDQwMDAyRjAwMDQxMDgwMDA1QTEwMjE4QzQzNDAwMDJDCis6MTBFNzQwMDAyNEE0MDAwNDAwMDQxMDgwQUZBMzAwMTAwMDVBMTAyMTdDCis6MTBFNzUwMDA4QzQyNDAwMEFGQTAwMDE4QUZBMjAwMTQ4RkE5MDAxODhGCis6MTBFNzYwMDAwMDAwMzgyMTAwMDAyMDIxMjQwQzAwMDgyN0FCMDAxMEY1Cis6MTBFNzcwMDAzQzBBMDgwMDI1NEEwMTAwMDE2NDEwMjExNDhDMDAwM0EyCis6MTBFNzgwMDAwMDA0MkEwMDExMjAwMDBBMDAwMDAwMDA5MDQyMDAwMDRFCis6MTBFNzkwMDAyNDg0MDAwMTJDODMwMDBDMDBBMjEwMjEwMDAyMTA4MEIwCis6MTBFN0EwMDAwMDRBMTAyMThDNDIwMDAwMTQ2MEZGRjMwMEUyMzgyNjdBCis6MTBFN0IwMDAzQzA0MDgwMDhDODQzMTA0OEY0MjAwNzAyQzgzMDAyMEJDCis6MTBFN0MwMDAxMDYwMDAwOTAwNDg0MDIzM0MwMzA4MDAyNDYzMzEwODFFCis6MTBFN0QwMDAwMDA0MTA4MDAwNDMxMDIxMjQ4MzAwMDFBQzQ4MDAwMDk1Cis6MTBFN0UwMDAzQzAxMDgwMEFDMjMzMTA0MEEwMDBGRUZBRjg3MDAwODlBCis6MTBFN0YwMDA5NzQzMDExRTk3NDIwMTFDMzA2M0ZGRkYwMDAyMTQwMDgzCis6MTBFODAwMDAwMDYyMTgyNUFGODMwMDA4OTc0MjAxMEM4RjQzNDAwMDM3Cis6MTBFODEwMDAzMDQ0RkZGRjM0MDJGRkZGMTQ2MjAwMDMwMDAwMDAwMEQ5Cis6MTBFODIwMDAwQTAwMEZGQjI0MTIwMDIwOEY0MjQwMDAzMDQyMDEwMEZBCis6MTBFODMwMDA1NDQwMDAwMTI0MTIwMDEwMzBDMjEwMDA1MDQwMDAxNDU3Cis6MTBFODQwMDAzNjUyMDAwMTMwQzIwMDIwMTQ0MDAwMEIzQzAyMTAwMDgwCis6MTBFODUwMDAwMEMyMTAyNDUwNDAwMDBFMzY1MjAwMDEzQzAzMEUwMDRFCis6MTBFODYwMDAzQzAyMERGRjAwQzMxODI0MzQ0MkZGRkYwMDQzMTAyQjZECis6MTBFODcwMDA1MDQwMDAwNzM2NTIwMDAxM0MwMjA4MDA4QzQyMDAyQzM4Cis6MTBFODgwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwMkMzNjUyMDAwNTU1Cis6MTBFODkwMDAzQzA1MDgwMDhDQTUwMDM0NTRBMDAwMjQ4Rjg0MDAwMDlGCis6MTBFOEEwMDA4RjgyMDAwQzU0NDAwMDIxOEY4NDAwMDA4RjgyMDAwNDZFCis6MTBFOEIwMDAzMDQyNDAwMDU0NDAwMDFEOEY4NDAwMDAzQzAyMUYwMTg0Cis6MTBFOEMwMDAwMEMyODgyNDNDMDIxMDAwNTYyMjAwMTg4Rjg0MDAwMEU5Cis6MTBFOEQwMDAzMDgyMDIwMDE0NDAwMDE1OEY4NDAwMDA5NzUwMDEwRTEyCis6MTBFOEUwMDBBRjQwMDE4MEFGNDAwMDIwMjYxMDAwMDQzMjEwRkZGRjJGCis6MTBFOEYwMDAwRTAwMEYxRTAyMDAyMDIxOEY4MzAwMDQyNDAyQkZGRkEwCis6MTBFOTAwMDAzNjQ0MDAwMjAwNjIxODI0MjQwMjAwMDJBNzQyMDE4QzRGCis6MTBFOTEwMDA4RjgyMDAwMEE3NTAwMThFQTc0NDAxODhBNzQzMDFBNjVCCis6MTBFOTIwMDBBNzQyMDE5MEFGNTEwMUI4MEEwMDEwRDkzQzAyMDAwMTgyCis6MTBFOTMwMDAwMDgyMTAyNDEwNDAwMDBDM0MwMjEwMDAzQzAyMDgwMDMxCis6MTBFOTQwMDA4QzQyMDBEODk3NDYwMTBFMjQwNDAwODAyNDQyMDAwMTI2Cis6MTBFOTUwMDAzMEM2RkZGRjI0MDUwMDAyM0MwMTA4MDBBQzIyMDBEOEFECis6MTBFOTYwMDAwQTAwMTBFMzI0MDcwMDAzMDA4MjEwMjQxMDQwMDA0NTMxCis6MTBFOTcwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwMzAxMDQwMDAwREY2Cis6MTBFOTgwMDA4RjgyMDAwNDMwNDI0MDAwMTA0MDAwMEEzQzAzMEYwMDE4Cis6MTBFOTkwMDAwMDgzMTgyNDNDMDIwMTAwMDA0MzEwMkIxNDQwMDAwNUEyCis6MTBFOUEwMDAwMDAwMDAwMDk3NDYwMTBFMzY0NzAwMDIwQTAwMTBFMDAyCis6MTBFOUIwMDAyNDA0MDA4MDEwQTAwMDBEMzA4MjAxMDAxMDQwMDAwQkU0Cis6MTBFOUMwMDAzQzAyMEYwMDAwODIxMDI0M0MwMzAyMDAxMDQzMDAwN0E5Cis6MTBFOUQwMDA4RjgyMDAwODAwNEQxMDI0MDA0RTEwMjE5MDQyMDAwNDQ4Cis6MTBFOUUwMDAyNDQyMDAwNDBBMDAxMDhCMDAwMjIxQzAwMDAwMDAwMDM1Cis6MTBFOUYwMDA4Rjg2MDAwMDNDMDUwODAwOENBNTAwRDAwMDA2MTYwMjlBCis6MTBFQTAwMDAzMDUwMDAwRjM4QTIwMDAxMkM0MjAwMDEyRTAzMDAwQ0YwCis6MTBFQTEwMDAwMDQzMTAyNDE0NDAwMDE4MDAxMDIxQzAyNjAyRkZGQ0ZGCis6MTBFQTIwMDAyQzQyMDAwNDU0NDAwMDE0MDAwMDIwMjEzOEEyMDAwMkFGCis6MTBFQTMwMDAyQzQyMDAwMTAwNDMxMDI0MTA0MDAwMDMwMDA2MTI0MjQzCis6MTBFQTQwMDAwQTAwMTA4QjAwMDAyMDIxMDAxMDE4MkIwMDQzMTAyNDE2Cis6MTBFQTUwMDA1MDQwMDAwOTAwMTAyMUMwOTc0NjAxMEUwMDAwMjAyMUZGCis6MTBFQTYwMDAyNDA1MDAwMjI0QzYwMDA0MzBDNkZGRkYwRTAwMEY0MTNCCis6MTBFQTcwMDAzMjQ3RkZGQjAwMTAyMUMwOTc0NjAxMEUwQTAwMTBFMDRDCis6MTBFQTgwMDAzNjQ3MDAwMjhGNDI0MDAwM0MxMTA4MDA4RTMxMDAyNEJFCis6MTBFQTkwMDAzMDQyMDEwMDEwNDAwMDQ4MzIyMjAwMDEwMjIwODAyMTUzCis6MTBFQUEwMDAxMEEwMDAxNzMyNTMwMDA0MzA4MjAxMDAxMDQwMDAxNUZFCis6MTBFQUIwMDAyNDAyMDAwMTNDMDIwRjAwMDA4MjEwMjQzQzAzMDIwMEVCCis6MTBFQUMwMDAxMDQzMDAwRjhGODIwMDA4OTc0NjAxMEUwMjQwMzgyMTQ0Cis6MTBFQUQwMDAwMDREMTAyNDAwNEUxMDIxOTA0NDAwMDQyNEM2MDAwNDcwCis6MTBFQUUwMDAzMEM2RkZGRjI0ODQwMDA0MDAwNDIxQzAwRTAwMEY0MTQzCis6MTBFQUYwMDAyNDA1MDAwMjI0MDJGRkZFMDIyMjgwMjQzMjUyRkZGQjgyCis6MTBFQjAwMDAyNDAyMDAwMTE2MDIwMDA3MzIwMjAwMDEzMjQyMDAwNDEyCis6MTBFQjEwMDA1MDQwMDAwMTM2NTIwMDAyOTc0NjAxMEUwQTAwMTBERkY1Cis6MTBFQjIwMDAwMjQwMzgyMTEwNDAwMDBBMzIwMjAwMDQ5NzQ2MDEwRUNDCis6MTBFQjMwMDAwMjQwMzgyMTAwMDAyMDIxMjRDNjAwMDQzMEM2RkZGRjE3Cis6MTBFQjQwMDAwRTAwMEY0MTI0MDUwMDAyMzI1MkZGRkIzMjAyMDAwNDg2Cis6MTBFQjUwMDAxMDQwMDAwQjhGODIwMDAwMzA0MjA4MDAxMDQwMDAwODc3Cis6MTBFQjYwMDAwMDAwMDAwMDk3NDYwMTBFMDI0MDM4MjEyNDA0MDEwMEY1Cis6MTBFQjcwMDAyNEM2MDAwNDMwQzZGRkZGMEUwMDBGNDEyNDA1MDAwMjJBCis6MTBFQjgwMDAxNjYwMDAxODhGQkYwMDMwMjc0MzAxODA4RjQyMDFCODA0Cis6MTBFQjkwMDAwNDQwRkZGRTI0MDIyMDAwQTQ2MjAwMDgyNDAyMDAwMkI4Cis6MTBFQkEwMDBBMDYyMDAwQkE0NjAwMDEwM0MwMjEwMDBBRjQyMDFCODRDCis6MTBFQkIwMDAwQTAwMTBFNjhGQkYwMDMwMTA0MDAwMEE4RkJGMDAzMEZGCis6MTBFQkMwMDA5NzQ2MDEwRTM2NDcwMDAyMDAwMDIwMjEyNEM2MDAwNEFCCis6MTBFQkQwMDAzMEM2RkZGRjI0MDUwMDAyMEUwMDBGNDEwMDAwMDAwMEI4Cis6MTBFQkUwMDA4RkJGMDAzMDhGQjMwMDJDOEZCMjAwMjg4RkIxMDAyNDZDCis6MTBFQkYwMDA4RkIwMDAyMDAwMDAxMDIxMDNFMDAwMDgyN0JEMDAzODdFCis6MTBFQzAwMDAyN0JERkZFOEFGQjAwMDEwM0MwNDYwMENBRkJGMDAxNDlDCis6MTBFQzEwMDA4QzgyNTAwMDI0MDNGRjdGM0MxQTgwMDAwMDQzMTAyNEE0Cis6MTBFQzIwMDAzNDQyMzgwQ0FDODI1MDAwMjQwMjAwMDMzQzEwNjAwMEQ3Cis6MTBFQzMwMDBBRjQyMDAwODhFMDIwODA4M0MxQjgwMDgzQzAxMDgwMDE3Cis6MTBFQzQwMDBBQzIwMDAyMDMwNDJGRkYwMzg0MjAwMTAyQzQyMDAwMTdFCis6MTBFQzUwMDAwRTAwMUIzNUFGODIwMDE4M0MwNEZGRkYzQzAyMDQwMDhECis6MTBFQzYwMDAzNDgzMDgwNjM0NDIwMDBDQUUwMjE5NDhBRTAzMTk0QzM2Cis6MTBFQzcwMDAzQzA1NjAxNjhFMDIxOTgwOENBMzAwMDAzNDQyMDIwMDBECis6MTBFQzgwMDAwMDY0MTgyNEFFMDIxOTgwM0MwMjUzNTMxNDYyMDAwMzNFCis6MTBFQzkwMDAzNEE0N0MwMDhDQTIwMDA0MDA1MDIwMjE4QzgyMDA3Q0QzCis6MTBFQ0EwMDA4QzgzMDA3OEFGODIwMDE0QUY4MzAwMTAzQzAyODAwMDk4Cis6MTBFQ0IwMDAzNDQyMDA3MDhDNDMwMDAwMDA0MDM4MjFBRjgzMDAxQ0I4Cis6MTBFQ0MwMDAwMDYwMzAyMThDRTgwMDAwM0MwNTA4MDA4Q0E1MDBGQ0E5Cis6MTBFQ0QwMDAzQzA0MDgwMDhDODQwMEY4MDEwNjMwMjMwMDAwMTAyMTU5Cis6MTBFQ0UwMDAwMEE2MjgyMTAwQTYzMDJCMDA4MjIwMjEwMDg2MjAyMUFBCis6MTBFQ0YwMDAzQzAxMDgwMEFDMjUwMEZDM0MwMTA4MDBBQzI0MDBGOEY1Cis6MTBFRDAwMDA4RjUwMDAwMDMyMDIwMDAzMTA0MEZGRUUwMTAwMzAyMTVFCis6MTBFRDEwMDA4Q0U2MDAwMDNDMDUwODAwOENBNTAwRkMzQzA0MDgwMEMzCis6MTBFRDIwMDA4Qzg0MDBGODAwQzgzMDIzMDBBNjI4MjEwMDAwMTAyMUEwCis6MTBFRDMwMDAwMEE2MzAyQjAwODIyMDIxMDA4NjIwMjEzMjA3MDAwMTBFCis6MTBFRDQwMDAzQzAxMDgwMEFDMjUwMEZDQUY4ODAwMUMzQzAxMDgwMDE5Cis6MTBFRDUwMDBBQzI0MDBGODEwRTAwMDY0MzIwMjAwMDI4RjQyMDEyODY3Cis6MTBFRDYwMDBBRjQyMDAyMDhGNDIwMTA0OEY0MzAxMDBBRjgyMDAwMEI4Cis6MTBFRDcwMDAwRTAwMEYxOEFGODMwMDA0OEY0MzQwMDAzNDAyRkZGRkUyCis6MTBFRDgwMDAxNDYyMDAwNjAwMDAwMDAwOTc0NTAxMEUzQzA0MDgwMEQ0Cis6MTBFRDkwMDAyNDg0MDBGMDBBMDAxMTVCMDAwMDAwMDA4RjQyNDAwMDU0Cis6MTBFREEwMDAzMDQyMDEwMDEwNDAwMDBCMDAwMDAwMDA5NzQ1MDEwRUFBCis6MTBFREIwMDAzQzA0MDgwMDI0ODQwMEU4MEUwMDBGMEUzMEE1RkZGRjdECis6MTBFREMwMDA5NzQ1MDEwRTNDMDQwODAwMjQ4NDMxQzgwQTAwMTE3MkUyCis6MTBFREQwMDAwMDAwMDAwMDhGNDM0MDAwOEY4MjAwMTAxNDYyMDAwQTgwCis6MTBFREUwMDAwMDAwMDAwMDhGNDM0MDA0OEY4MjAwMTQxNDYyMDAwNjZDCis6MTBFREYwMDAwMDAwMDAwMDk3NDUwMTBFM0MwNDA4MDAyNDg0MzFCODRGCis6MTBFRTAwMDAwQTAwMTE3MjAwMDAwMDAwOTc0NTAxMEUzQzA0MDgwMDQyCis6MTBFRTEwMDAyNDg0MDBFMDBFMDAwRjBFMzBBNUZGRkYzQzAyMDgwMDI2Cis6MTBFRTIwMDA4QzQyMDBDMDEwNDAwMDA4OEY4NDAwMDAzQzAyMDgwMEEzCis6MTBFRTMwMDA4QzQyMDBDNDI0NDIwMDAxM0MwMTA4MDBBQzIyMDBDNDAyCis6MTBFRTQwMDAwQTAwMTE5RjAwMDAwMDAwM0MwMjAwMTAwMDgyMTAyNDA0Cis6MTBFRTUwMDAxNDQwMDAwQThGODMwMDA0M0MwMjA4MDA4QzQyMDAyMDBBCis6MTBFRTYwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwMjAwRTAwMEY3OTcyCis6MTBFRTcwMDAwMDAwMjAyMTBBMDAxMTlEMDAwMDAwMDAyNDAyQkZGRkI1Cis6MTBFRTgwMDAwMDYyMTAyNDEwNDAwMDA4MDAwMDAwMDAyNDAyODdGRkU4Cis6MTBFRTkwMDAwMDYyMTAyNDE0NDAwMDA4M0MwMjAwNjAwMDgyMTAyNDJDCis6MTBFRUEwMDAxMDQwMDAwNTAwMDAwMDAwMEUwMDBEMjYwMDAwMDAwMENDCis6MTBFRUIwMDAwQTAwMTE5RDAwMDAwMDAwMEUwMDExRTgwMDAwMDAwMDkzCis6MTBFRUMwMDAxMDQwMDAwNjNDMDI0MDAwOEY0MzAxMjQzQzAyNjAyMEI5Cis6MTBFRUQwMDBBQzQzMDAxNDAwMDAwMDAwM0MwMjQwMDBBRjQyMDEzODg3Cis6MTBFRUUwMDAwMDAwMDAwMDMyMDIwMDAyMTA0MEZGNzEzQzAyODAwMDZFCis6MTBFRUYwMDA4RjQyMDE0MDNDMDQ0MDAwQUY0MjAwMjA4RjQzMDE0ODU0Cis6MTBFRjAwMDAzQzAyNzAwMDAwNjIxODI0MTA2NDAwMkQwMDAwMDAwMDE0Cis6MTBFRjEwMDAwMDgzMTAyQjE0NDAwMDA2M0MwMjYwMDAzQzAyMjAwMERECis6MTBFRjIwMDAxMDYyMDAwNzNDMDI0MDAwMEEwMDExRTQwMDAwMDAwMEVCCis6MTBFRjMwMDAxMDYyMDAyNzAwMDAwMDAwMEEwMDExRTQzQzAyNDAwMEJCCis6MTBFRjQwMDA4RjQyMDE0ODI0MDMwMDA0MDAwMjE0MDIzMDQyMDBGRkYzCis6MTBFRjUwMDAxNDQzMDAwQjI3NDQwMTgwOEY0MzAxNDA4RjQyMDFCOEM2Cis6MTBFRjYwMDAwNDQwRkZGRTI0MDIwMDFDQUM4MzAwMDBBMDgyMDAwQkMyCis6MTBFRjcwMDAzQzAyMTAwMEFGNDIwMUI4MEEwMDExRTQzQzAyNDAwMDFDCis6MTBFRjgwMDA4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDA4RjQyMDE0ODlDCis6MTBFRjkwMDAwMDAyMTQwMkE0ODIwMDA4MjQwMjAwMDJBMDgyMDAwQkQ2Cis6MTBFRkEwMDA4RjQyMDE0OEE0ODIwMDEwOEY0MjAxNDRBQzgyMDAyNEE5Cis6MTBFRkIwMDAzQzAyMTAwMEFGNDIwMUI4MEEwMDExRTQzQzAyNDAwMERDCis6MTBFRkMwMDAwRTAwMTIwQzAwMDAwMDAwMEEwMDExRTQzQzAyNDAwMDk4Cis6MTBFRkQwMDAwRTAwMUI0MjAwMDAwMDAwM0MwMjQwMDBBRjQyMDE3OERFCis6MTBFRkUwMDAwMDAwMDAwMDBBMDAxMTE5M0MwMjgwMDA4RjQyMDEwMDVECis6MTBFRkYwMDAzMDQyMDAzRTE0NDAwMDExMjQwMjAwMDFBRjQwMDA0ODlFCis6MTBGMDAwMDA4RjQyMDEwMDMwNDIwN0MwMTA0MDAwMDUwMDAwMDAwMEEwCis6MTBGMDEwMDBBRjQwMDA0Q0FGNDAwMDUwMDNFMDAwMDgyNDAyMDAwMTY0Cis6MTBGMDIwMDBBRjQwMDA1NEFGNDAwMDQwOEY0MjAxMDAzMDQyMzgwMEYyCis6MTBGMDMwMDA1NDQwMDAwMUFGNDAwMDQ0MjQwMjAwMDEwM0UwMDAwOEY2Cis6MTBGMDQwMDAwMDAwMDAwMDNDMDI5MDAwMzQ0MjAwMDEwMDgyMjAyNUI0Cis6MTBGMDUwMDBBRjQ0MDAyMDhGNDIwMDIwMDQ0MEZGRkUwMDAwMDAwMDZCCis6MTBGMDYwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDAzNDQyMDAwMTgwCis6MTBGMDcwMDAwMDgyMjAyNTAzRTAwMDA4QUY0NDAwMjAyN0JERkZFMDA4Cis6MTBGMDgwMDBBRkIyMDAxOEFGQkYwMDFDQUZCMTAwMTRBRkIwMDAxMDlBCis6MTBGMDkwMDA4RjUwMDE0MDhGNTEwMTQ4M0MwMjgwMDAwMDExOTQwMkMyCis6MTBGMEEwMDAwMjIyMjAyNDMyNDMwMEZGMjQwMjAwMEUxMDYyMDA4QTU0Cis6MTBGMEIwMDAyODYyMDAwRjEwNDAwMDEyMjg2MjAwMzcyNDAyMDAwNjY4Cis6MTBGMEMwMDAxMDYyMDAzQjI4NjIwMDA3MTA0MDAwMDcyNDAyMDAwOTdDCis6MTBGMEQwMDAxMDYwMDAxQTI0MDIwMDAxMTA2MjAwMjUwMDAwMDAwMEU4Cis6MTBGMEUwMDAwQTAwMTJDMTAwMDAwMDAwMTA2MjAwN0IyNDAyMDAwQjI1Cis6MTBGMEYwMDAxMDYyMDA1QjMyMjJGRkZGMEEwMDEyQzEwMDAwMDAwMDE0Cis6MTBGMTAwMDAxMDQwMDAwODI0MDIwMDM4Mjg2MjAwMzUxMDQwMDA4MEJBCis6MTBGMTEwMDAyNDAyMDAxRjEwNjIwMDdFMDAwMDAwMDAwQTAwMTJDMURECis6MTBGMTIwMDAwMDAwMDAwMDEwNjIwMDdBMjQwMjAwODAxMDYyMDA0Mjk5Cis6MTBGMTMwMDAwMDAwMDAwMDBBMDAxMkMxMDAwMDAwMDA4RjQyMDFCODY4Cis6MTBGMTQwMDAwNDQwRkZGRTI0MDIwMDAxQUY1MDAxODBBRjQwMDE4NDYzCis6MTBGMTUwMDBBNzUyMDE4OEEzNDIwMThBMjQwMjAwMDJBMzQyMDE4QjI0Cis6MTBGMTYwMDBBNzUxMDE5MDhGNDIwMTQ0MEEwMDEyQkNBRjQyMDFBNDkyCis6MTBGMTcwMDAxMDgwMDAwQTI0MDIwMDAyM0MwMTA4MDBBMDIyNzE5MEM1Cis6MTBGMTgwMDAzQzAxMDgwMEFDMzA3MTk4OEY0MjAxNDQzQzAxMDgwMEZBCis6MTBGMTkwMDBBQzIyNzE5NDBBMDAxMkMzOEZCRjAwMUM4RjQyMDFCOEM5Cis6MTBGMUEwMDAwNDQwRkZGRTI0MDIwMDAyMEEwMDEyQTYwMDAwMDAwMDM0Cis6MTBGMUIwMDA4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDBBRjUwMDE4MDA0Cis6MTBGMUMwMDAzQzAyMDgwMDkwNDI3MTkwMTA0MDAwMDMwMDAwMTgyMTlBCis6MTBGMUQwMDAzQzAzMDgwMDhDNjM3MTk4QUY0MzAxODRBNzUyMDE4OEY3Cis6MTBGMUUwMDAzQzAyMDgwMDkwNDI3MTkwMDAwMDE4MjEzNDQyMDAwMTU2Cis6MTBGMUYwMDBBMzQyMDE4QTI0MDIwMDAyQTM0MjAxOEJBNzUxMDE5MDdECis6MTBGMjAwMDA4RjQyMDE0NEFGNDIwMUE0M0MwMjA4MDA5MDQyNzE5MDM5Cis6MTBGMjEwMDAxMDQwMDAwMzNDMDIxMDAwM0MwMzA4MDA4QzYzNzE5NDEyCis6MTBGMjIwMDBBRjQzMDFBOEFGNDIwMUI4M0MwMTA4MDBBMDIwNzE5MDkzCis6MTBGMjMwMDAwQTAwMTJDMzhGQkYwMDFDOEY0MjAxQjgwNDQwRkZGRUJBCis6MTBGMjQwMDAyNDAyMDAwMkEzNDIwMThCQTc1MjAxODhBNzUxMDE5MDFBCis6MTBGMjUwMDA4RjQyMDE0NEE3NDIwMTkyMEEwMDEyQkUzQzAyMTAwMEY0Cis6MTBGMjYwMDAxNDQwMDAxRDAwMDAwMDAwOTM2MjAwMDUzMDQyMDAwNEJECis6MTBGMjcwMDAxNDQwMDAzNzAwMDAwMDAwMEUwMDExRkUwMjAwMjAyMUEzCis6MTBGMjgwMDA5MzYyMDAwNTAyMDAyMDIxMzQ0MjAwMDQwRTAwMTIwN0EwCis6MTBGMjkwMDBBMzYyMDAwNTkzNjIwMDA1MzA0MjAwMDQxNDQwMDAwMjlFCis6MTBGMkEwMDAwMDAwMDAwMDAwMDAwMDBEOTM2MjAwMDAyNDAzMDAyMDE1Cis6MTBGMkIwMDAzMDQyMDBGRjE0NDMwMDA4MDAwMDAwMDA4RjQyMDFCOEY0Cis6MTBGMkMwMDAwNDQwRkZGRTI0MDIwMDA1QUY1MDAxODBBMzQyMDE4QkUxCis6MTBGMkQwMDAzQzAyMTAwMEFGNDIwMUI4OEY0MjAxQjgwNDQwRkZGRTZCCis6MTBGMkUwMDAyNDAyMDAwMkFGNDAwMTgwQUY1MDAxODRBNzUyMDE4ODgwCis6MTBGMkYwMDBBMzQyMDE4QUEzNDIwMThCQTc1MTAxOTBBRjQwMDFBNDEwCis6MTBGMzAwMDA4RjQyMDE0NEFGNDIwMUE4MEEwMDEyQkUzQzAyMTAwMDI1Cis6MTBGMzEwMDA4RjQyMDFCODA0NDBGRkZFMjQwMjAwMDFBRjUwMDE4MDdCCis6MTBGMzIwMDBBRjQwMDE4NEE3NTIwMTg4QTM0MjAxOEEyNDAyMDAwMjRGCis6MTBGMzMwMDBBMzQyMDE4QkE3NTEwMTkwQUY0MDAxQTRBRjQwMDFBOEE3Cis6MTBGMzQwMDAzQzAyMTAwMEFGNDIwMUI4MEEwMDEyQzM4RkJGMDAxQzdDCis6MTBGMzUwMDAwMDAwMDAwRDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDg5Cis6MTBGMzYwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFODk0Cis6MTBGMzcwMDBBRkJGMDAxMDBFMDAwRjE4MDAwMDAwMDBBRjQwMDE4MDZBCis6MTBGMzgwMDA4RkJGMDAxMDAwMDAyMDIxMEEwMDBGNzkyN0JEMDAxODUwCis6MTBGMzkwMDAzMDg0RkZGRjMwQTVGRkZGMDAwMDE4MjExMDgwMDAwNzE4Cis6MTBGM0EwMDAwMDAwMDAwMDMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MkYyCis6MTBGM0IwMDAwMDY1MTgyMTBBMDAxMkQ0MDAwNTI4NDAwM0UwMDAwODY3Cis6MTBGM0MwMDAwMDYwMTAyMTEwQzAwMDA2MjRDNkZGRkY4Q0EyMDAwMEMwCis6MTBGM0QwMDAyNEE1MDAwNEFDODIwMDAwMEEwMDEyREUyNDg0MDAwNDhDCis6MTBGM0UwMDAwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkI1Cis6MTBGM0YwMDBBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRkI3Cis6MTBGNDAwMDAyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODcxCis6MTBGNDEwMDAwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDMwCis6MTBGNDIwMDAwRTAwMTFGRTAwODA4MDIxOTM2MjAwN0QwMjAwMjAyMUU5Cis6MTBGNDMwMDAzNDQyMDAyMDBFMDAxMjA3QTM2MjAwN0QwMjAwMjAyMTRBCis6MTBGNDQwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDBDOUIyN0JEMDAxODVFCis6MTBGNDUwMDAzMDgzMDBGRjMwQTUwMEZGMzBDNjAwRkYyNzQ3MDE4MDQyCis6MTBGNDYwMDA4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDA4RjQyMDEyOEQ3Cis6MTBGNDcwMDAzNDYzNDAwMEFDRTIwMDAwMjQwMjAwMDFBQ0UwMDAwNDcwCis6MTBGNDgwMDBBNEUzMDAwOEEwRTIwMDBBMjQwMjAwMDJBMEUyMDAwQkFDCis6MTBGNDkwMDAzQzAyMTAwMEE0RTUwMDEwQUNFMDAwMjRBQ0UwMDAyODIxCis6MTBGNEEwMDBBNEU2MDAxMjAzRTAwMDA4QUY0MjAxQjgyN0JERkZFODYwCis6MTBGNEIwMDBBRkJGMDAxMDkzNjIwMDNGMjQwMzAwMTIzMDQyMDBGRkYwCis6MTBGNEMwMDAxMDQzMDAwRDAwODAzMDIxOEY2MjAwNDQwMDgyMTAyMzIxCis6MTBGNEQwMDAwNDQwMDAwQThGQkYwMDEwOEY2MjAwNDgyNDA0MDAzOUU2Cis6MTBGNEUwMDAwMDAwMjgyMTAwQzIxMDIzMDQ0MTAwMDQyNDA2MDAxMjU5Cis6MTBGNEYwMDAwRTAwMTMwMTAwMDAwMDAwOEZCRjAwMTAyNDAyMDAwMTY1Cis6MTBGNTAwMDAwM0UwMDAwODI3QkQwMDE4MjdCREZGQzhBRkIxMDAyQ0RECis6MTBGNTEwMDAwMEEwODgyMUFGQjIwMDMwMjdBNTAwMTAwMDgwOTAyMTA0Cis6MTBGNTIwMDAwMjIwMjAyMUFGQkYwMDM0QUZCMDAwMjgwRTAwMENBNDkxCis6MTBGNTMwMDBBRkEwMDAxMDEwNDAwMDA5MDI0MDIwMjE4RTIyMDAwOEQ4Cis6MTBGNTQwMDBBRjYyMDA4NDBFMDAxMkYyQUY2MDAwNDAyNDA0MDAzODY1Cis6MTBGNTUwMDAyNDA1MDA4RDBBMDAxM0NEMjQwNjAwMTI5MzYyMDAzRTlDCis6MTBGNTYwMDAzMDQyMDAwODEwNDAwMDBGOEZBMjAwMTAzMDQyMDEwMDBFCis6MTBGNTcwMDAxMDQwMDAwNzhGQTMwMDE0OEY2MjAwNjAwMDYyMTAyMzA4Cis6MTBGNTgwMDAwNDQzMDAwOEFGNjMwMDYwMEEwMDEzNTYwMDAwMDAwMDQ3Cis6MTBGNTkwMDBBRjYwMDA2MDkzNjIwMDNFMjQwM0ZGRjcwMDQzMTAyNDM1Cis6MTBGNUEwMDBBMzYyMDAzRTkzNjIwMDNFMzA0MjAwMDgxNDQwMDAwMjE1Cis6MTBGNUIwMDAyNDA2MDAwMzAwMDAzMDIxOTM2MjAwMzQ5MzYzMDAzNzc3Cis6MTBGNUMwMDA4RjY0MDA4NDMwNDIwMEZGMzA2MzAwRkYwMDY2MTgyMTIyCis6MTBGNUQwMDAwMDAzMTg4MDAwNDMyODIxMDBBNDIwMkIxMDgwMDAwQjdBCis6MTBGNUUwMDAwMDAwMDAwMDk3NjMwMDNDOEY2MjAwODQzMDYzRkZGRkRGCis6MTBGNUYwMDAwMDQ1MTAyMzAwNjIxODJCMTQ2MDAwMDQwMDAwMDAwMDc2Cis6MTBGNjAwMDA4RjYyMDA4NDBBMDAxMzcyMDA0NTgwMjM5NzYyMDAzQ0Q5Cis6MTBGNjEwMDAzMDUwRkZGRjhGQTMwMDEwMzA2MjAwMDQxMDQwMDAwNDQwCis6MTBGNjIwMDAwMDA2Mjg4MDhGQTIwMDFDMEEwMDEzN0EwMjAyMTAyQjA5Cis6MTBGNjMwMDAyRTAyMDIxODUwNDAwMDAzMjQwMjAyMTgwQTAwMTM4MzBECis6MTBGNjQwMDAwMjA1MTAyMzMwNjMwMDA0MTA2MDAwMDMwMDQ1MTAyM0ZFCis6MTBGNjUwMDA4RkEyMDAxQzAwNDUxMDIzMDA0MDgwMjEyQzQyMDA4MDE2Cis6MTBGNjYwMDA1NDQwMDAwMTI0MTAwMDgwMEUwMDExRkUwMjQwMjAyMUIxCis6MTBGNjcwMDAyNDAyMDAwMUFGNjIwMDBDOTM2MjAwM0UwMDEwMjA0MEEzCis6MTBGNjgwMDAzMDQyMDA3RkEzNjIwMDNFOEUyMjAwMDQyNDQyMDAwMTJCCis6MTBGNjkwMDBBRjYyMDA0MEE3NzAwMDNDOEY2MjAwNTA5NjIzMDAwRUJFCis6MTBGNkEwMDAwMDQzMTAyMUFGNjIwMDU4OEY2MjAwNTAwMDQ0MTAyMUM3Cis6MTBGNkIwMDBBRjYyMDA1QzhFMjIwMDA0QUY2MjAwMTg4RTIyMDAwODQ4Cis6MTBGNkMwMDBBRjYyMDAxQzhGQTIwMDEwMzA0MjAwMDg1NDQwMDAwQUI0Cis6MTBGNkQwMDA5M0EyMDAyMEEzNjAwMDM2OTM2MjAwMzYyNDAzRkZERjZDCis6MTBGNkUwMDBBMzYyMDAzNTkzNjIwMDNFMDA0MzEwMjRBMzYyMDAzRUYzCis6MTBGNkYwMDAwQTAwMTNBRDhFMjIwMDA4QTM2MjAwMzU4RTIyMDAwODk2Cis6MTBGNzAwMDBBRjYyMDA0QzhGNjIwMDI0OEY2MzAwNDAwMDQzMTAyMUUxCis6MTBGNzEwMDBBRjYyMDA0ODkzNjIwMDAwMjQwMzAwNTAzMDQyMDBGRkIzCis6MTBGNzIwMDAxNDQzMDAxMjI0MDNGRjgwM0MwMjA4MDA4QzQyMzFBMEU1Cis6MTBGNzMwMDAwMjQyMTAyMTAwNDMxMDI0QUY0MjAwMjgzQzAyMDgwMDdFCis6MTBGNzQwMDA4QzQyMzFBMDhFMjQwMDA4M0MwMzAwMEMwMjQyMTAyMUEwCis6MTBGNzUwMDAzMDQyMDA3RjAzNDIxMDIxMDA0MzEwMjFBQzQ0MDBEODA2Cis6MTBGNzYwMDA4RTIzMDAwOEFGODIwMDI0QUM0MzAwREMwRTAwMTIwNzk5Cis6MTBGNzcwMDAwMjQwMjAyMTI0MDQwMDM4MDAwMDI4MjEyNDA2MDAwQTI5Cis6MTBGNzgwMDAwRTAwMTMwMTAwMDAwMDAwOEZCRjAwMzQ4RkIyMDAzMDY0Cis6MTBGNzkwMDA4RkIxMDAyQzhGQjAwMDI4MjQwMjAwMDEwM0UwMDAwODg0Cis6MTBGN0EwMDAyN0JEMDAzODI3QkRGRkU4QUZCRjAwMTA5MEM3MDAwRDkwCis6MTBGN0IwMDAwMEMwMjgyMTMwRTYwMDEwMTBDMDAwMEEzMEUyMDAwNDJBCis6MTBGN0MwMDA4Q0EzMDAwODhGNjIwMDU0MTA2MjAwMDYzMEUyMDAwNDJGCis6MTBGN0QwMDAxNDQwMDAxNzhGQkYwMDEwMDAwMDIwMjEwQTAwMEQxM0Y1Cis6MTBGN0UwMDAyN0JEMDAxODEwNDAwMDBEMzBFMzAwMTIxMEMwMDAxMEJCCis6MTBGN0YwMDA4RkJGMDAxMDhDQTMwMDA4OEY2MjAwNTQxNDYyMDAwREFDCis6MTBGODAwMDAyNDAyMDAwMTI0MDQwMDM4MjQwNTAwOEQwRTAwMTMwMTk5Cis6MTBGODEwMDAyNDA2MDAxMjBBMDAxM0Y5OEZCRjAwMTAyNDAyMDAxMjAwCis6MTBGODIwMDAxNDYyMDAwMzhGQkYwMDEwMEEwMDEzMkYyN0JEMDAxOEI5Cis6MTBGODMwMDAyNDAyMDAwMTAzRTAwMDA4MjdCRDAwMTgyN0JERkZGOERGCis6MTBGODQwMDAyNzQyMDE4MEFGQTIwMDAwMzA4QTAwRkY4RjQyMDFCODNBCis6MTBGODUwMDAwNDQwRkZGRTAwMDAwMDAwOEY0NjAxMjgzQzAyMDgwMDIzCis6MTBGODYwMDA4QzQyMzFBMDI0MDNGRjgwQUY4NjAwNEMwMEMyMTAyMURGCis6MTBGODcwMDAwMDQzMTAyNEFGNDIwMDI0M0MwMjA4MDA4QzQyMzFBMDE3Cis6MTBGODgwMDA4RkE5MDAwMDhGQTgwMDAwMDBDMjEwMjEzMDQyMDA3RjI1Cis6MTBGODkwMDAwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjE5NDY0MDBENDNCCis6MTBGOEEwMDA4RkE3MDAwMDhGQTUwMDAwMjQwMjAwMDJBRjgzMDAyNDcwCis6MTBGOEIwMDBBMEEyMDAwQjhGQTMwMDAwMzU0MjYwMDAzMDg0RkZGRjQwCis6MTBGOEMwMDBBNEUyMDAwODNDMDIxMDAwQUQyNjAwMDBBRDA0MDAwNEQ0Cis6MTBGOEQwMDBBQzYwMDAyNDI3QkQwMDA4QUY0MjAxQjgwM0UwMDAwODc3Cis6MTBGOEUwMDAyNDAyMDAwMThDODIwMDA0OEY4MzAwMjQwMDQ1MTAyMzMxCis6MTBGOEYwMDBBQzgyMDAwNDkwNjIwMDYzMzA0MjAwN0ZBMDYyMDA2MzJCCis6MTBGOTAwMDA4QzgyMDAyMDkzODMwMDJDOEY4NTAwMjQzNDQyMDAwMkQ3Cis6MTBGOTEwMDBBRjgzMDA0MEE3ODAwMDNFQUM4MjAwMjBBNEEwMDBFNDlBCis6MTBGOTIwMDA5MEEyMDA2MzI0MDNGRkJGMDA0MzEwMjQwM0UwMDAwOEZCCis6MTBGOTMwMDBBMEEyMDA2MzI3NDMwMTgwOEY0MjAxQjgwNDQwRkZGRTZDCis6MTBGOTQwMDA4RjgyMDA0Q0FDNjIwMDAwOEY0MjAxMjRBQzYyMDAwNDQ0Cis6MTBGOTUwMDAyNDAyNjA4M0E0NjIwMDA4MjQwMjAwMDJBMDYyMDAwQjVCCis6MTBGOTYwMDAzQzAyMTAwMDAzRTAwMDA4QUY0MjAxQjg4Rjg4MDA0MDVECis6MTBGOTcwMDA5MzgyMDAyQzhGODMwMDI0M0MwNzA4MDAyNEU3NzVBQzk5Cis6MTBGOTgwMDAwMDQ4MTAyMzMwNDIwMEZGMzA0OTAwRkMyNDY1MDA4ODA1Cis6MTBGOTkwMDA4Rjg2MDA0NDMwNEEwMDAzMTEyMDAwMDkwMDAwMjAyMTE2Cis6MTBGOUEwMDAyNDgyMDAwNDhDQTMwMDAwMzA0NDAwRkYwMDg5MTAyQTQ4Cis6MTBGOUIwMDBBQ0UzMDAwMDI0QTUwMDA0MTQ0MEZGRjkyNEU3MDAwNDkwCis6MTBGOUMwMDAxMTQwMDAwOTAwMDAyMDIxMjQ4MjAwMDE5MEEzMDAwMEMyCis6MTBGOUQwMDAzMDQ0MDBGRjAwOEExMDJCQTBFMzAwMDAyNEE1MDAwMUEyCis6MTBGOUUwMDAxNDQwRkZGOTI0RTcwMDAxMzBDMjAwMDMxNDQwMDAwNDcyCis6MTBGOUYwMDA4Rjg1MDA0MDMxMDIwMDAzMTA0MDAwMEQwMDAwMDAwMDIwCis6MTBGQTAwMDAxMEEwMDAwOTAwMDAyMDIxMjQ4MjAwMDE5MEMzMDAwMDAyCis6MTBGQTEwMDAzMDQ0MDBGRjAwODUxMDJCQTBFMzAwMDAyNEM2MDAwMTQ1Cis6MTBGQTIwMDAxNDQwRkZGOTI0RTcwMDAxMDNFMDAwMDgwMDAwMDAwMDkzCis6MTBGQTMwMDAxMTAwRkZGRDAwMDAyMDIxMjQ4MjAwMDQ4Q0MzMDAwMDdGCis6MTBGQTQwMDAzMDQ0MDBGRjAwODgxMDJCQUNFMzAwMDAyNEM2MDAwNDAzCis6MTBGQTUwMDAxNDQwRkZGOTI0RTcwMDA0MDNFMDAwMDgwMDAwMDAwMDYwCis6MTBGQTYwMDA4RjgzMDA0MDkzODIwMDJDMzBDNjAwRkYzMEE1MDBGRjNBCis6MTBGQTcwMDAwMDQzMTAyMzMwNDMwMEZGOEY4MjAwMjQwMDgwMzgyMTkwCis6MTBGQTgwMDAwMDQzMTAyMTE0QzAwMDAyMjQ0ODAwODgwMDgzMzgyMTVDCis6MTBGQTkwMDAzMEUyMDAwMzE0NDAwMDA1MzBBMjAwMDMxNDQwMDAwM0NDCis6MTBGQUEwMDAzMDYyMDAwMzEwNDAwMDBEMDAwMDAwMDAxMEEwMDAwOUFCCis6MTBGQUIwMDAwMDAwMjAyMTI0ODIwMDAxOTBFMzAwMDAzMDQ0MDBGRjc4Cis6MTBGQUMwMDAwMDg1MTAyQkExMDMwMDAwMjRFNzAwMDExNDQwRkZGOTdBCis6MTBGQUQwMDAyNTA4MDAwMTAzRTAwMDA4MDAwMDAwMDAxMEEwRkZGRDYxCis6MTBGQUUwMDAwMDAwMjAyMTI0ODIwMDA0OENFMzAwMDAzMDQ0MDBGRjQ5Cis6MTBGQUYwMDAwMDg1MTAyQkFEMDMwMDAwMjRFNzAwMDQxNDQwRkZGOTNCCis6MTBGQjAwMDAyNTA4MDAwNDAzRTAwMDA4MDAwMDAwMDAyN0JERkZGOEZFCis6MTBGQjEwMDAyNDAyRkZGRkFGQTIwMDAwMDA4MDM4MjEyNDA1MDAyRjNGCis6MTBGQjIwMDAzQzA5MDgwMDI1Mjk3MUFDMjQwODAwRkYyNDA2RkZGRkNBCis6MTBGQjMwMDA5MEUyMDAwMDI0QTNGRkZGMDAwNjIyMDIwMEMyMTAyNjZDCis6MTBGQjQwMDAzMDQyMDBGRjAwMDIxMDgwMDA0OTEwMjE4QzQyMDAwMDZBCis6MTBGQjUwMDAzMDY1MDBGRjI0RTcwMDAxMTRBOEZGRjUwMDgyMzAyNjdECis6MTBGQjYwMDAwMDA2MTAyN0FGQTIwMDA0QUZBMjAwMDAwMDAwMjgyMTY5Cis6MTBGQjcwMDAyN0E2MDAwNDAwQzUxMDIzOTA0NDAwMDMyNEEyMDAwMTFFCis6MTBGQjgwMDAwMEJEMTgyMTMwNDUwMEZGMkNBMjAwMDQxNDQwRkZGOUVECis6MTBGQjkwMDBBMDY0MDAwMDhGQTIwMDAwMDNFMDAwMDgyN0JEMDAwODU5Cis6MTBGQkEwMDAwMDgwNDgyMTMwQUFGRkZGMzBDNjAwRkYzMEU3RkZGRjhBCis6MTBGQkIwMDAyNzQ4MDE4MDhGNDIwMUI4MDQ0MEZGRkU4RjgyMDA0QzJECis6MTBGQkMwMDBBRDAyMDAwMDhGNDIwMTI0QUQwMjAwMDQ4RDIyMDAyMDBFCis6MTBGQkQwMDBBNTA3MDAwOEExMDIwMDBBMjQwMjAwMTZBMTAyMDAwQkRBCis6MTBGQkUwMDA5MzQzMDEyMDhEMjIwMDA4OEQyNDAwMDQzMDYzMDBGRjIwCis6MTBGQkYwMDAwMDQzMTAyMTk3ODMwMDNFMDA0NDEwMjE4RDI1MDAyNEVFCis6MTBGQzAwMDAwMDQzMTAyMzNDMDMwODAwOEM2MzMxQTA4Rjg0MDAyNDQwCis6MTBGQzEwMDBBNTAyMDAwQzI0NjMwMEU4MjQwMkZGRkZBNTBBMDAwRUUxCis6MTBGQzIwMDBBNTAzMDAxMEE1MDYwMDEyQUQwNTAwMThBRDAyMDAyNEMyCis6MTBGQzMwMDA5NDgyMDExNDI0MDNGRkY3MzA0MkZGRkZBRDAyMDAyODM1Cis6MTBGQzQwMDA4QzgyMDExOEFEMDIwMDJDM0MwMjEwMDBBRDAwMDAzMDg3Cis6MTBGQzUwMDBBRjQyMDFCODhEMjIwMDIwMDA0MzEwMjQwM0UwMDAwOEM5Cis6MTBGQzYwMDBBRDIyMDAyMDhGODIwMDI0MzBFN0ZGRkYwMDgwNDgyMTcyCis6MTBGQzcwMDA5MDQyMDBEMzMwQTVGRkZGMzBDNjAwRkYwMDAyMTEwMDA0Cis6MTBGQzgwMDAzMDQyMEYwMDAwRTIzODI1Mjc0ODAxODA4RjQyMDFCODNBCis6MTBGQzkwMDAwNDQwRkZGRThGODIwMDRDQUQwMjAwMDA4RjQyMDEyNDIxCis6MTBGQ0EwMDBBRDAyMDAwNDhEMjIwMDIwQTUwNzAwMDhBMTAyMDAwQTcxCis6MTBGQ0IwMDAyNDAyMDAxN0ExMDIwMDBCOTM0MzAxMjA4RDIyMDAwOEFCCis6MTBGQ0MwMDA4RDI0MDAwNDMwNjMwMEZGMDA0MzEwMjE5NzgzMDAzRTIxCis6MTBGQ0QwMDAwMDQ0MTAyMThGODQwMDI0MDA0MzEwMjMzQzAzMDgwMEJCCis6MTBGQ0UwMDA4QzYzMzFBMEE1MDIwMDBDQTUwNTAwMEUyNDYzMDBFODdBCis6MTBGQ0YwMDBBNTAzMDAxMEE1MDYwMDEyQUQwMDAwMTQ4RDIyMDAyNEZCCis6MTBGRDAwMDBBRDAyMDAxODhDODIwMDVDQUQwMjAwMUM4QzgyMDA1ODkxCis6MTBGRDEwMDBBRDAyMDAyMDI0MDJGRkZGQUQwMjAwMjQ5NDgyMDBFNjIxCis6MTBGRDIwMDAzMDQyRkZGRkFEMDIwMDI4OTQ4MjAwNjA5NDgzMDBCRTQxCis6MTBGRDMwMDAzMDQyN0ZGRjMwNjNGRkZGMDAwMjEyMDAwMDQzMTAyMUJBCis6MTBGRDQwMDBBRDAyMDAyQzNDMDIxMDAwQUQwMDAwMzBBRjQyMDFCODAzCis6MTBGRDUwMDA5NDgyMDBCRTI0MDNGRkY3MDBBMjEwMjFBNDgyMDBCRUZCCis6MTBGRDYwMDA4RDIyMDAyMDAwNDMxMDI0MDNFMDAwMDhBRDIyMDAyMDczCis6MTBGRDcwMDAyNzQzMDE4MDhGNDIwMUI4MDQ0MEZGRkUyNDAyMDAxODhGCis6MTBGRDgwMDBBQzY0MDAwMEEwNjIwMDBCOEY4MjAwMjQ5NDQyMDBFNjY1Cis6MTBGRDkwMDBBNDYyMDAxMDNDMDIxMDAwQUM2MDAwMzAwM0UwMDAwOEQ4Cis6MTBGREEwMDBBRjQyMDFCODI3NDMwMTgwOEY0MjAxQjgwNDQwRkZGRUYzCis6MTBGREIwMDA4RjgyMDAyODk0NDIwMDFDMzA0MkZGRkYwMDAyMTFDMEQ1Cis6MTBGREMwMDBBQzYyMDAwMDI0MDIwMDE5QTA2MjAwMEIzQzAyMTAwMDhCCis6MTBGREQwMDBBQzYwMDAzMDAzRTAwMDA4QUY0MjAxQjg4Rjg3MDAzMDBDCis6MTBGREUwMDAzMEMzMDBGRjhGNDIwMUI4MDQ0MEZGRkU4RjgyMDA0Q0Y5Cis6MTBGREYwMDAzNDYzNjAwMEFDQTIwMDAwOTM4MjAwNDhBMEEyMDAwNTFBCis6MTBGRTAwMDA4Q0UyMDAxMEE0QTIwMDA2QTRBMzAwMDg4QzgyMDAyMEFCCis6MTBGRTEwMDAyNDAzRkZGN0EwQTIwMDBBMjQwMjAwMDJBMEEyMDAwQjA0Cis6MTBGRTIwMDA4Q0UyMDAwMEFDQTIwMDEwOENFMjAwMDRBQ0EyMDAxNDMyCis6MTBGRTMwMDA4Q0UyMDAxQ0FDQTIwMDI0OENFMjAwMjBBQ0EyMDAyOEMyCis6MTBGRTQwMDA4Q0UyMDAyQ0FDQTIwMDJDOEM4MjAwMjRBQ0EyMDAxODA2Cis6MTBGRTUwMDAzQzAyMTAwMEFGNDIwMUI4OEM4MjAwMjAwMDQzMTAyNDA1Cis6MTBGRTYwMDAwM0UwMDAwOEFDODIwMDIwOTM4MjAwNDgyNDAzMDAwMUQ0Cis6MTBGRTcwMDAyN0JERkZFODAwNDMzMDA0MkM0MjAwMjBBRkIwMDAxMDQzCis6MTBGRTgwMDBBRkJGMDAxNDI0MTBGRkZFMTA0MDAwMDUyNzQ1MDE4MDdECis6MTBGRTkwMDAzQzAyMDgwMDhDNDIzMTkwMEEwMDE1OTgwMDQ2MTAyNDVDCis6MTBGRUEwMDAzQzAyMDgwMDhDNDIzMTk0MDA0NjEwMjQxNDQwMDAwN0E0Cis6MTBGRUIwMDAyNDA2MDA4NDhGODMwMDI0MjQxMEZGRkY5MDYyMDA2MkQ4Cis6MTBGRUMwMDAzMDQyMDAwRjM0NDIwMDQwQTA2MjAwNjIwRTAwMTU2NDEwCis6MTBGRUQwMDAwMDAwMDAwMDAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMDNFCis6MTBGRUUwMDAwM0UwMDAwODI3QkQwMDE4OEY4MzAwMjgyN0JERkZFMDJFCis6MTBGRUYwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzFDCis6MTBGRjAwMDA5MDYyMDAwRDAwQTA5MDIxMzBEMTAwRkYzMDQyMDA3RkIwCis6MTBGRjEwMDBBMDYyMDAwRDhGODUwMDI0OEU0MzAwMTgwMDgwODAyMTkwCis6MTBGRjIwMDA4Q0EyMDA3QzE0NjIwMDA1MjQwMjAwMEU5MEEyMDA2M0UzCis6MTBGRjMwMDAzNDQyMDAyMDBBMDAxNUMxQTBBMjAwNjMwRTAwMTU4N0ZDCis6MTBGRjQwMDBBMzgyMDA0ODI0MDNGRkZGMTA0MzAwNDcyNDA0RkZGRjVGCis6MTBGRjUwMDA1MjIwMDA0NTAwMDAyMDIxOEU0MzAwMDAzQzAyMDAxMDhBCis6MTBGRjYwMDAwMDYyMTAyNDUwNDAwMDA0M0MwMjAwMDgwMjAwMjAyMURFCis6MTBGRjcwMDAwQTAwMTVEMDI0MDIwMDE1MDA2MjEwMjQ1MDQwMDAwOTI4Cis6MTBGRjgwMDA4RTQ1MDAwMDAyMDAyMDIxMjQwMjAwMTQwRTAwMTU4Nzc3Cis6MTBGRjkwMDBBMzgyMDA0ODI0MDNGRkZGMTA0MzAwMzMyNDA0RkZGRjIzCis6MTBGRkEwMDA4RTQ1MDAwMDNDMDIwMDAyMDBBMjEwMjQxMDQwMDAxNjAyCis6MTBGRkIwMDAzQzAyMDAwNDhGODYwMDI4OENDMjAwMTQ4Q0MzMDAxMDAxCis6MTBGRkMwMDA4Q0M0MDAxNDAwNDMxMDIzMDA0NDEwMkI1MDQwMDAwNTQzCis6MTBGRkQwMDAwMjAwMjAyMThFNDMwMDJDOENDMjAwMTAxMDYyMDAwMzBFCis6MTBGRkUwMDAwMjAwMjAyMTBBMDAxNjAxMjQwMjAwMTIzQzAyMDAwNDMzCis6MTBGRkYwMDAwMEEyMTAyNDUwNDAwMDFDMDAwMDIwMjEwMjAwMjAyMUZCCis6MDIwMDAwMDQwMDAxRjkKKzoxMDAwMDAwMDBBMDAxNjAxMjQwMjAwMTMwMEEyMTAyNDEwNDAwMDA2NkEKKzoxMDAwMTAwMDhGODMwMDI4OEM2MjAwMTA1MDQwMDAxMzAwMDAyMDIxQzQKKzoxMDAwMjAwMDBBMDAxNUZCMDIwMDIwMjE4QzYyMDAxMDUwNDAwMDA0RTEKKzoxMDAwMzAwMDhFNDIwMDJDMDIwMDIwMjEwQTAwMTYwMTI0MDIwMDExMjkKKzoxMDAwNDAwMDUwNDAwMDA5MDAwMDIwMjEwMjAwMjAyMTI0MDIwMDE3NTYKKzoxMDAwNTAwMDBFMDAxNTg3QTM4MjAwNDgyNDAzRkZGRjEwNDMwMDAyMEYKKzoxMDAwNjAwMDI0MDRGRkZGMDAwMDIwMjE4RkJGMDAxQzhGQjIwMDE4NjYKKzoxMDAwNzAwMDhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4NDEKKzoxMDAwODAwMDI3QkQwMDIwOTM4MzAwMkMyN0JERkZFMDI0MDIwMDM0MEQKKzoxMDAwOTAwMEFGQjIwMDE4QUZCMTAwMTRBRkJGMDAxQ0FGQjAwMDEwN0EKKzoxMDAwQTAwMDAwODA4ODIxMTQ2MjAwMEMwMEEwOTAyMThGODQwMDMwMTEKKzoxMDAwQjAwMDBFMDAxNEIwOEM5MDAwMzAxMjAyMDAwNzI0MDIwMDA1REMKKzoxMDAwQzAwMDAyMjAyMDIxMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGOTEKKzoxMDAwRDAwMDEwNDMwMDVGMjQwNEZGRkY5MjQyMDAwNDEwNDAwMDA5MTcKKzoxMDAwRTAwMDhGODIwMDI0MDIyMDIwMjEyNDAyMDAwQzBFMDAxNTg3OUMKKzoxMDAwRjAwMEEzODIwMDQ4MjQwM0ZGRkYxMDQzMDA1NTI0MDRGRkZGQTAKKzoxMDAxMDAwMDhGODIwMDI0QTM4MDAwMjA4RTQzMDAwNDhDNDQwMDgwNTIKKzoxMDAxMTAwMDNDMDIwMEZGMzQ0MkZGRkYwMDYyMTgyNDAwODMyMDJCQzIKKzoxMDAxMjAwMDEwODAwMDA4QUY4MzAwMzgwMjIwMjAyMTI0MDIwMDE5MkIKKzoxMDAxMzAwMDBFMDAxNTg3QTM4MjAwNDgyNDAzRkZGRjEwNDMwMDQ0RUMKKzoxMDAxNDAwMDI0MDRGRkZGOTc4MjAwM0U4Rjg3MDA0MDhGODgwMDM4OEQKKzoxMDAxNTAwMDAwNDcxMDIzMTEwMDAwMzlBNzgyMDAzRThGODYwMDI0M0IKKzoxMDAxNjAwMDMwNDVGRkZGOEY4NDAwNEM5MEMzMDBCQzNDMDIwODAwNjgKKzoxMDAxNzAwMDhDNDIzMUEwMDAwMzE4ODIzMDcwMDAwMTAwODIyMDIxREYKKzoxMDAxODAwMDAwMTAxMDgwMDEwMjEwMjEwMEEyMjgyQjEwQTAwMDEwRTYKKzoxMDAxOTAwMDI0ODIwMDg4OEY4NDAwMzAxMDgyMDAwRDNDMDMzRjAxRDAKKzoxMDAxQTAwMDhFNDIwMDAwMDA0MzEwMjQzQzAzMjUwMDE0NDMwMDA2NDcKKzoxMDAxQjAwMDMwRTUwMEZGOEM4MjAwMDBBQ0MyMDA4ODhDODIwMDEwMDkKKzoxMDAxQzAwMDBBMDAxNjYxQUNDMjAwOTgwRTAwMTQ4NTAwMDAzMDIxQjAKKzoxMDAxRDAwMDhGODUwMDM4OTM4MzAwMjA4Rjg2MDAyNDMwQTIwMDAzOEYKKzoxMDAxRTAwMDAwMDIxMDIzMzA0MjAwMDMwMDQzMzgyMUEzODcwMDIwN0YKKzoxMDAxRjAwMDk0QzQwMEU0MDBBMjI4MjE4RjgzMDA0MDhGODIwMDQ0MzEKKzoxMDAyMDAwMDM0ODQxMDAwQTRDNDAwRTQwMDQzMTAyMUFGODIwMDQ0RjEKKzoxMDAyMTAwMDEyMDAwMDBFQUY4NTAwNDAyNEUyMDAwNEEzODIwMDIwRkIKKzoxMDAyMjAwMDk0QzIwMEU0MjRBMzAwMDRBRjgzMDA0MDM0NDIyMDAwQzEKKzoxMDAyMzAwMEE0QzIwMEU0MEEwMDE2ODEwMDAwMjAyMThGODIwMDQ0M0QKKzoxMDAyNDAwMEFGODAwMDQwMDA0NzEwMjFBRjgyMDA0NDAwMDAyMDIxMTEKKzoxMDAyNTAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMzgKKzoxMDAyNjAwMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyMDhGODYwMDI0QjUKKzoxMDAyNzAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDkwQzIwMDYzMEQKKzoxMDAyODAwMDMwNDIwMDIwMTA0MDAwMDgzMEE1MDBGRjhDQzIwMDdDRTYKKzoxMDAyOTAwMDI0MDNGRkRGMjQ0MjAwMDFBQ0MyMDA3QzkwQzIwMDYzNTMKKzoxMDAyQTAwMDAwNDMxMDI0QTBDMjAwNjMxMEEwMDAyMzhGODMwMDI0MDkKKzoxMDAyQjAwMDI3NTAwMTgwMDIwMDI4MjEwRTAwMTU2NDI0MDYwMDgyQzgKKzoxMDAyQzAwMDhGODIwMDI0OTA0MjAwNjMzMDQyMDA0MDUwNDAwMDE5NjkKKzoxMDAyRDAwMEEzODAwMDQ4OEY4MzAwMzA4RjQyMDFCODA0NDBGRkZFQTYKKzoxMDAyRTAwMDhGODIwMDRDQUUwMjAwMDAyNDAyNjA4MkE2MDIwMDA4NDkKKzoxMDAyRjAwMDI0MDIwMDAyQTIwMjAwMEI4QzYyMDAwOEFFMDIwMDEwNzEKKzoxMDAzMDAwMDhDNjIwMDBDQUUwMjAwMTQ4QzYyMDAxNEFFMDIwMDE4NjUKKzoxMDAzMTAwMDhDNjIwMDE4QUUwMjAwMjQ4QzYyMDAyNEFFMDIwMDI4MTkKKzoxMDAzMjAwMDhDNjIwMDI4QUUwMjAwMkMzQzAyMTAwMEFGNDIwMUI4RTMKKzoxMDAzMzAwMEEzODAwMDQ4OEY4MzAwMjQ4RkJGMDAxNDhGQjAwMDEwNkIKKzoxMDAzNDAwMDkwNjIwMDYzMjdCRDAwMTgzMDQyMDA3RkEwNjIwMDYzMDYKKzoxMDAzNTAwMDk3ODIwMDNFOEY4NjAwNDA4Rjg1MDAyNDkzODMwMDJDNzcKKzoxMDAzNjAwMDAwNDYxMDIzQTc4MjAwM0VBNEEwMDBFNDkwQTQwMDYzRUUKKzoxMDAzNzAwMDhGODIwMDQ0QUY4MzAwNDAyNDAzRkZCRjAwNDYxMDIxNUEKKzoxMDAzODAwMDAwODMyMDI0QUY4MjAwNDRBMEE0MDA2MzhGODIwMDI0NTUKKzoxMDAzOTAwMEEwNDAwMEJEOEY4MjAwMjQwM0UwMDAwOEE0NDAwMEJFRkUKKzoxMDAzQTAwMDhGOEEwMDI0MjdCREZGRTBBRkIxMDAxNEFGQjAwMDEwNkEKKzoxMDAzQjAwMDhGODgwMDQwQUZCRjAwMTg5Mzg5MDAyMDk1NDIwMEU0NjkKKzoxMDAzQzAwMDMwRDEwMEZGMDEwOTE4MkIwMDgwODAyMTMwQUMwMEZGRTQKKzoxMDAzRDAwMDMwNDdGRkZGMDAwMDU4MjExNDYwMDAwMzMxMDYwMEZGODIKKzoxMDAzRTAwMDAxMjAzMDIxMDEwOTU4MjM5NzgzMDAzRTAwNjgxMDJCMUIKKzoxMDAzRjAwMDE0NDAwMDMyMDAwMDAwMDAxNDY4MDAwNzI0MDIwMDAxQ0QKKzoxMDA0MDAwMDhFMDIwMDIwMjQwM0ZGRkIzNEU3ODAwMDAwNDMxMDI0MDkKKzoxMDA0MTAwMEFFMDIwMDIwMjQwMjAwMDEzNEU3MDg4MDE1ODIwMDA1QTYKKzoxMDA0MjAwMDMxNjVGRkZGMEUwMDE0RDUwMjAwMjAyMTBBMDAxNzE2QzcKKzoxMDA0MzAwMDAyMDAyMDIxMEUwMDE1MDYwMjAwMjAyMTBFMDAxNTQ5QTEKKzoxMDA0NDAwMDhGODQwMDRDOEY4NDAwMjQ5NDgyMDA2MDI0NDIwMDAxMzkKKzoxMDA0NTAwMEE0ODIwMDYwOTQ4MjAwNjAzQzAzMDgwMDhDNjMzMTg4QjEKKzoxMDA0NjAwMDMwNDI3RkZGNTQ0MzAwMEYwMjAwMjAyMTk0ODIwMDYwM0QKKzoxMDA0NzAwMDI0MDM4MDAwMDA0MzEwMjRBNDgyMDA2MDkwODIwMDYwNjYKKzoxMDA0ODAwMDkwODMwMDYwMzA0MjAwRkYwMDAyMTFDMjAwMDIxMDI3N0EKKzoxMDA0OTAwMDAwMDIxMUMwMzA2MzAwN0YwMDYyMTgyNUEwODMwMDYwNTUKKzoxMDA0QTAwMDAyMDAyMDIxMDIyMDI4MjE4RkJGMDAxODhGQjEwMDE0RTQKKzoxMDA0QjAwMDhGQjAwMDEwMEEwMDE2ODgyN0JEMDAyMDkxNDIwMDYzMEIKKzoxMDA0QzAwMDI0MDNGRjgwMDA0MzEwMjVBMTQyMDA2Mzk3ODIwMDNFNzEKKzoxMDA0RDAwMDMwNDhGRkZGMTEwMDAwMjA5MzgzMDAyMDhGODQwMDI0MDgKKzoxMDA0RTAwMDAwNEIxMDIzMzA0NjAwRkY5NDgzMDBFNDI0MDJFRkZGMEEKKzoxMDA0RjAwMDAxNjgyODJCMDA2MjE4MjRBNDgzMDBFNDE0QTAwMDAzRTAKKzoxMDA1MDAwMDhFMDIwMDIwMDEwMDU4MjEwMDAwMzAyMTI0MDNGRkZCNEYKKzoxMDA1MTAwMDM0RTc4MDAwMDA0MzEwMjRBRTAyMDAyMDI0MDIwMDAxRDIKKzoxMDA1MjAwMDE1ODIwMDA1MzE2NUZGRkYwRTAwMTRENTAyMDAyMDIxNjEKKzoxMDA1MzAwMDBBMDAxNzNFOTc4MzAwM0UwRTAwMTUwNjAyMDAyMDIxOTgKKzoxMDA1NDAwMDk3ODMwMDNFOEY4MjAwNDBBNzgwMDAzRTAwNDMxMDIzMjcKKzoxMDA1NTAwMEFGODIwMDQwOTM4MzAwMjA4RjgyMDAyNDhGQkYwMDE4NTkKKzoxMDA1NjAwMDhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyMDAzRTAwMDA4RjkKKzoxMDA1NzAwMEEwNDMwMEJEOEY4MjAwMjQ5MDQzMDA4ODkwNDUwMEJEQjkKKzoxMDA1ODAwMDI0NDkwMDg4MzA2MzAwM0YyNDYzRkZFMDI0MDIwMDAxMTcKKzoxMDA1OTAwMDAwNjIzODA0MkM2MzAwMjAzMEU4MDAxOUEzODUwMDIwOTUKKzoxMDA1QTAwMDEwNjAwMDEwQUY4OTAwMzAzQzAyODAwMDM0NDIwMDAyMkQKKzoxMDA1QjAwMDI0MDUwMDAxMjQwNjAwMDExNTAwMDAwODAwRTIxODI0QUIKKzoxMDA1QzAwMDAwMDAyODIxMTQ2MDAwMDUzMEUyMDAyMDEwNDAwMDA1RTIKKzoxMDA1RDAwMDI0MDUwMDAxOTEyNjAwMDEzMEM2MDAwMTBBMDAxNkQ1NEQKKzoxMDA1RTAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkQ4NjUKKzoxMDA1RjAwMEFGQjAwMDEwOEY5MDAwMzBBRkI0MDAyMEFGQjEwMDE0NDYKKzoxMDA2MDAwMEFGQkYwMDI0QUZCMzAwMUNBRkIyMDAxODhFMDUwMDEwQkUKKzoxMDA2MTAwMDNDMDIwODAwOEM0MjMxQjA4Rjg2MDAzNDMwQTMzRkZGOEIKKzoxMDA2MjAwMDAwNjIxODJCOENEMzAwMTQwMDgwODgyMThDRDIwMDIwMEIKKzoxMDA2MzAwMDEwNjAwMDc4MDAwMEEwMjE5MEMzMDAwRDI0MDJGRjgwMEMKKzoxMDA2NDAwMDAwNDMxMDI0MzA0MjAwRkY1MDQwMDA3MzAyMjAyMDIxNUMKKzoxMDA2NTAwMDAwMDUxMzgyMzA0MjAwMDM1NDQwMDA2RjAyMjAyMDIxMjUKKzoxMDA2NjAwMDk0QzMwMDFDOEY4MjAwMjQ4RTA1MDAyOEE0NDMwMTE0MkIKKzoxMDA2NzAwMDhDQzIwMDEwMDI2MjE4MjMxNDY1MDAwNzI0MDIwMDFGQjgKKzoxMDA2ODAwMDhGODIwMDM4MDA2MjEwMjEwMjYyMTAyQjEwNDAwMDA4OTcKKzoxMDA2OTAwMDhGODMwMDI4MjQwMjAwMTgwRTAwMTU4N0EzODIwMDQ4Q0IKKzoxMDA2QTAwMDI0MDNGRkZGMTA0MzAwNkYyNDA0RkZGRjhGODMwMDI4MDMKKzoxMDA2QjAwMDhGODQwMDM4OEM2MjAwMTAwMjQ0OTAyMTAwNDQxMDIzODMKKzoxMDA2QzAwMEFDNjIwMDEwOEY4MjAwMjRBQzcyMDAyMDhDNDIwMDY4NjMKKzoxMDA2RDAwMDAwNTIxMDJCMTA0MDAwMDk4RjgzMDAzNDAyMjAyMDIxOEIKKzoxMDA2RTAwMDI0MDIwMDFEMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGOEIKKzoxMDA2RjAwMDEwNDMwMDVDMjQwNEZGRkY4RjgzMDAzNDhFMDIwMDI0MkIKKzoxMDA3MDAwMDhDNjMwMDI0MTA0MzAwMDcwMjIwMjAyMTI0MDIwMDFDRDcKKzoxMDA3MTAwMDBFMDAxNTg3QTM4MjAwNDgyNDAzRkZGRjEwNDMwMDUxRjkKKzoxMDA3MjAwMDI0MDRGRkZGOEY4NDAwMjg4QzgyMDAyNDI0NDIwMDAxQ0YKKzoxMDA3MzAwMEFDODIwMDI0MTI1MzAwMDQ4RjgyMDAyNDhDNDIwMDY4OTMKKzoxMDA3NDAwMDU2NDIwMDBFOEUwMjAwMDA4RTAyMDAwMDNDMDMwMDgwMjQKKzoxMDA3NTAwMDAwNDMxMDI0MTQ0MDAwMEQyNDAyMDAxQTAyMjAyMDIxMUUKKzoxMDA3NjAwMDBFMDAxNTg3QTM4MjAwNDgyNDAzRkZGRjEwNDMwMDNEQkQKKzoxMDA3NzAwMDI0MDRGRkZGMEEwMDE3RDI4RTAyMDAxNDNDMDMwMDgwRkQKKzoxMDA3ODAwMDAwNDMxMDI0NTA0MDAwMDM4RTAyMDAxNEFDODAwMDIwNkYKKzoxMDA3OTAwMDhFMDIwMDE0MjQxMkZGRkYxMDUyMDAwNjI0MDIwMDFCRDgKKzoxMDA3QTAwMDAyMjAyMDIxMEUwMDE1ODdBMzgyMDA0ODEwNTIwMDJENDAKKzoxMDA3QjAwMDI0MDRGRkZGOEUwMzAwMDAzQzAyMDAwMTAwNjIxMDI0QUQKKzoxMDA3QzAwMDEwNDAwMDFGM0MwMjAwODAwMDYyMTAyNDE0NDAwMDA4MEEKKzoxMDA3RDAwMDAyMjAyMDIxMjQwMjAwMUEwRTAwMTU4N0EzODIwMDQ4NUYKKzoxMDA3RTAwMDI0MDNGRkZGMTA0MzAwMUYyNDA0RkZGRjAyMjAyMDIxRTkKKzoxMDA3RjAwMDAyMDAyODIxMEUwMDE1QTcyNDA2MDAwMTI0MDNGRkZGOTQKKzoxMDA4MDAwMDI0MDRGRkZGMTQ0MzAwMEUyNDE0MDAwMTBBMDAxODA3RkIKKzoxMDA4MTAwMDhGQkYwMDI0MDIyMDIwMjEyNDAyMDAwRDhGQkYwMDI0NUUKKzoxMDA4MjAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0NUEKKzoxMDA4MzAwMDhGQjAwMDEwMjdCRDAwMjgwQTAwMTU4N0EzODIwMDQ4NEEKKzoxMDA4NDAwMDhGODMwMDI4MDIyMDIwMjEwMjgwMzAyMTk0NjIwMDM2MEMKKzoxMDA4NTAwMDI0MDUwMDAxMjQ0MjAwMDEwRTAwMTZENUE0NjIwMDM2RDIKKzoxMDA4NjAwMDAwMDAyMDIxOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDMTQKKzoxMDA4NzAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxQ0IKKzoxMDA4ODAwMDAzRTAwMDA4MjdCRDAwMjg4RjgzMDAyNDI3QkRGRkQ4ODAKKzoxMDA4OTAwMEFGQjQwMDIwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0NkEKKzoxMDA4QTAwMEFGQjAwMDEwQUZCRjAwMjQ5MDYyMDA2MzhGOTEwMDMwQTIKKzoxMDA4QjAwMDI0MTJGRkZGMzQ0MjAwNDA5MjI1MDAwMEEwNjIwMDYzMzIKKzoxMDA4QzAwMDhFMjIwMDEwMDA4MDk4MjEzMEIwMDAzRjEwNTIwMDA2QTgKKzoxMDA4RDAwMDAzNjBBMDIxMjQwMjAwMEQwRTAwMTU4N0EzODIwMDQ4QUEKKzoxMDA4RTAwMDEwNTIwMDUyMjQwNEZGRkY4RjgzMDAyNDhFMjIwMDE4MzAKKzoxMDA4RjAwMDhDNjMwMDdDMTA0MzAwMDcwMjYwMjAyMTI0MDIwMDBFNUMKKzoxMDA5MDAwMDBFMDAxNTg3QTM4MjAwNDgyNDAzRkZGRjEwNDMwMDQ3MTEKKzoxMDA5MTAwMDI0MDRGRkZGMjQwNDAwMjAxMjA0MDAwNDhGODMwMDI0MTkKKzoxMDA5MjAwMDkwNjIwMDYzMzQ0MjAwMjBBMDYyMDA2MzhGODUwMDM4MkIKKzoxMDA5MzAwMDEwQTAwMDFFMDAwMDAwMDA1NjA0MDAwNDhGODIwMDI0NTYKKzoxMDA5NDAwMDAyNjAyMDIxMEEwMDE4NTEyNDAyMDAwQTk2ODMwMDBBM0UKKzoxMDA5NTAwMDI0MDRGRkZEOTQ0MjAwNjAzMDQyRkZGRjEwNDMwMDM0NDYKKzoxMDA5NjAwMDhGQkYwMDI0M0MwMjA4MDA4QzQyMzE4QzAwNDUxMDJCQzQKKzoxMDA5NzAwMDE0NDAwMDA2MDI2MDIwMjEwMDAwMjgyMTBFMDAxNkQ1MzgKKzoxMDA5ODAwMDI0MDYwMDAxMEEwMDE4NzgwMDAwMjAyMTI0MDIwMDJEMEUKKzoxMDA5OTAwMDBFMDAxNTg3QTM4MjAwNDgyNDAzRkZGRjEwNDMwMDIzQTUKKzoxMDA5QTAwMDI0MDRGRkZGMEEwMDE4NzgwMDAwMjAyMTE2MDQwMDA1MjcKKzoxMDA5QjAwMDhGODQwMDI0OEUyMzAwMTQyNDAyRkZGRjUwNjIwMDE4NEQKKzoxMDA5QzAwMDAyNjAyMDIxOTQ4MjAwNjAyNDQyMDAwMUE0ODIwMDYwMjEKKzoxMDA5RDAwMDk0ODIwMDYwM0MwMzA4MDA4QzYzMzE4ODMwNDI3RkZGQzIKKzoxMDA5RTAwMDU0NDMwMDBGMDI2MDIwMjE5NDgyMDA2MDI0MDM4MDAwQTEKKzoxMDA5RjAwMDAwNDMxMDI0QTQ4MjAwNjA5MDgyMDA2MDkwODMwMDYwMTUKKzoxMDBBMDAwMDMwNDIwMEZGMDAwMjExQzIwMDAyMTAyNzAwMDIxMUMwOTQKKzoxMDBBMTAwMDMwNjMwMDdGMDA2MjE4MjVBMDgzMDA2MDAyNjAyMDIxRkYKKzoxMDBBMjAwMDBFMDAxNjg4MjQwNTAwMDEwMDAwMjAyMThGQkYwMDI0M0QKKzoxMDBBMzAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0NDgKKzoxMDBBNDAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDI4QUYKKzoxMDBBNTAwMDhGODMwMDI0MjdCREZGRThBRkIwMDAxMEFGQkYwMDE0QTQKKzoxMDBBNjAwMDkwNjIwMDYzOEY4NzAwMzAwMDgwODAyMTM0NDIwMDQwMTQKKzoxMDBBNzAwMDhDRTYwMDEwQTA2MjAwNjMzQzAzMDgwMDhDNjMzMUIwNzgKKzoxMDBBODAwMDMwQzIzRkZGMDA0MzEwMkIxMDQwMDA0RThGODUwMDM0RDIKKzoxMDBBOTAwMDI0MDJGRjgwOTBBMzAwMEQwMDQzMTAyNDMwNDIwMEZGODkKKzoxMDBBQTAwMDUwNDAwMDQ5MDIwMDIwMjEwMDA2MTM4MjMwNDgwMDAzMTQKKzoxMDBBQjAwMDI0MDIwMDAyNTUwMjAwNDQwMjAwMjAyMTk0QTIwMDFDREUKKzoxMDBBQzAwMDhGODUwMDI0MjQwMzAwMjNBNEEyMDExNDhDRTYwMDAwRDcKKzoxMDBBRDAwMDAwMDYxNjAyMzA0MjAwM0YxMDQzMDAxMDNDMDMwMDgzMjIKKzoxMDBBRTAwMDhDRTMwMDE4OENBMjAwN0MxMDYyMDAwNjI0MDIwMDBFMjkKKzoxMDBBRjAwMDBFMDAxNTg3QTM4MjAwNDgyNDAzRkZGRjEwNDMwMDM4MkYKKzoxMDBCMDAwMDI0MDRGRkZGOEY4MzAwMjQ5MDYyMDA2MzM0NDIwMDIwOUUKKzoxMDBCMTAwMEEwNjIwMDYzMEEwMDE4QkQ4RjgzMDAyODAwQzMxMDI0NjAKKzoxMDBCMjAwMDE0NDMwMDA3OEY4MzAwMjg5MEEyMDA2MjMwNDIwMDBGMTgKKzoxMDBCMzAwMDM0NDIwMDIwQTBBMjAwNjJBMzg4MDAzQzhGODMwMDI4REEKKzoxMDBCNDAwMDkwNjIwMDBEMzA0MjAwN0ZBMDYyMDAwRDhGODMwMDM4NUMKKzoxMDBCNTAwMDEwNjAwMDE4MDIwMDIwMjE4Rjg0MDAzNDhDODIwMDEwNjUKKzoxMDBCNjAwMDAwNDMxMDJCMTA0MDAwMDkyNDAyMDAxODAyMDAyMDIxMkQKKzoxMDBCNzAwMDBFMDAxNTg3QTM4MjAwNDgyNDAzRkZGRjEwNDMwMDE4Q0UKKzoxMDBCODAwMDI0MDRGRkZGMEEwMDE4RTUwMDAwMjAyMThDODIwMDEwRDkKKzoxMDBCOTAwMDI0MDUwMDAxMDIwMDIwMjEwMDQzMTAyMzhGODMwMDI4MzgKKzoxMDBCQTAwMDI0MDYwMDAxMEUwMDE2RDVBQzYyMDAxMDBBMDAxOEU1RkMKKzoxMDBCQjAwMDAwMDAyMDIxMEUwMDE2ODgyNDA1MDAwMTBBMDAxOEU1MTcKKzoxMDBCQzAwMDAwMDAyMDIxMDIwMDIwMjEyNDAyMDAwRDhGQkYwMDE0MEMKKzoxMDBCRDAwMDhGQjAwMDEwMjdCRDAwMTgwQTAwMTU4N0EzODIwMDQ4QjcKKzoxMDBCRTAwMDhGQkYwMDE0OEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4QjgKKzoxMDBCRjAwMDI3QkQwMDE4MjdCREZGRDhBRkIwMDAxMDhGOTAwMDMwODAKKzoxMDBDMDAwMEFGQjMwMDFDQUZCRjAwMjBBRkIyMDAxOEFGQjEwMDE0RUIKKzoxMDBDMTAwMDhFMTIwMDEwM0MwMzA4MDA4QzYzMzFCMDMyNDIzRkZGNUIKKzoxMDBDMjAwMDAwNDMxMDJCMTA0MDAwN0MwMDgwOTgyMThGODUwMDM0RjkKKzoxMDBDMzAwMDI0MDJGRjgwOTBBMzAwMEQwMDQzMTAyNDMwNDIwMEZGRTcKKzoxMDBDNDAwMDUwNDAwMDc2MDI2MDIwMjEwMDEyMTM4MjMwNDIwMDAzREYKKzoxMDBDNTAwMDI0MDMwMDAxNTQ0MzAwNzEwMjYwMjAyMTkwQTIwMDBEODIKKzoxMDBDNjAwMDMwNDIwMDA4NTQ0MDAwMDM4RjgyMDAzODBBMDAxOTE1RjIKKzoxMDBDNzAwMDI0MDIwMDI0NTA0MDAwMDM4RTAzMDAwQzBBMDAxOTE1QzIKKzoxMDBDODAwMDI0MDIwMDI3OENBMjAwMjAxNDYyMDAwNTI0MDIwMDIwMDgKKzoxMDBDOTAwMDhFMDMwMDA4OENBMjAwMjQxMDYyMDAwODI0MDIwMDIwQTkKKzoxMDBDQTAwMDBFMDAxNTg3QTM4MjAwNDgyNDAzRkZGRjEwNDMwMDZBNEIKKzoxMDBDQjAwMDI0MDRGRkZGMEEwMDE5NDA4Rjg0MDAyODhFMDIwMDE0Q0MKKzoxMDBDQzAwMDI0MTFGRkZGMTQ1MTAwMDM4Rjg3MDAyNDBBMDAxOTNCRjEKKzoxMDBDRDAwMDI0MDIwMDI1OEUwMzAwMTg4Q0UyMDA3QzE0NjIwMDE2QUEKKzoxMDBDRTAwMDI0MDIwMDBFOEUwMzAwMjQ4Q0EyMDAyODE0NjIwMDEyM0QKKzoxMDBDRjAwMDI0MDIwMDIxOEUwNjAwMjg4Q0EyMDAyQzE0QzIwMDBFQjMKKzoxMDBEMDAwMDI0MDIwMDFGOEUwMzAwMkMxMDYwMDAwQjI0MDIwMDIzMUQKKzoxMDBEMTAwMDhDRTIwMDY4MDA0MzEwMkIxNDQwMDAwNzI0MDIwMDI2RDgKKzoxMDBEMjAwMDhDQTIwMDE0MDA2NjE4MjEwMDQzMTAyQjUwNDAwMDA3Q0QKKzoxMDBEMzAwMDhGODQwMDI4MjQwMjAwMjIwRTAwMTU4N0EzODIwMDQ4MTkKKzoxMDBENDAwMDEwNTEwMDQ1MjQwNEZGRkY4Rjg0MDAyODI0MDNGRkY3N0YKKzoxMDBENTAwMDkwODIwMDBEMDA0MzEwMjRBMDgyMDAwRDhGODYwMDI0OTUKKzoxMDBENjAwMDNDMDMwODAwOEM2MzMxQUM4RjgyMDA0Qzk0QzQwMEUwREIKKzoxMDBENzAwMDhGODUwMDI4MDA0MzEwMjEzMDg0N0ZGRjAwMDQyMDQwMkQKKzoxMDBEODAwMDAwNDQxMDIxMzA0MzAwN0YwMzQzMjAyMTNDMDMwMDBFMjgKKzoxMDBEOTAwMDAwODMyMDIxMjQwM0ZGODAwMDQzMTAyNEFGNDIwMDJDNTUKKzoxMDBEQTAwMEE0OTIwMDAwOENBMjAwMjgyNDQyMDAwMUFDQTIwMDI4REEKKzoxMDBEQjAwMDhDQTIwMDJDOEUwMzAwMkMwMDQzMTAyMUFDQTIwMDJDMkUKKzoxMDBEQzAwMDhFMDIwMDJDQUNBMjAwMzA4RTAyMDAxNEFDQTIwMDM0QzMKKzoxMDBERDAwMDk0QTIwMDNBMjQ0MjAwMDFBNEEyMDAzQTk0QzYwMEUwODIKKzoxMDBERTAwMDNDMDIwODAwOEM0MjMxQjAyNEM0MDAwMTMwODM3RkZGRjQKKzoxMDBERjAwMDE0NjIwMDEzMDA4MDMwMjEyNDAyODAwMDAwODIzMDI0MUQKKzoxMDBFMDAwMDMwQzJGRkZGMDAwMjEzQzIzMDQyMDBGRjAwMDIxMDI3NzEKKzoxMDBFMTAwMDBBMDAxOTdEMDAwMjMzQzAwMjYwMjAyMTI0MDIwMDBENjcKKzoxMDBFMjAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0NDkKKzoxMDBFMzAwMDhGQjAwMDEwMjdCRDAwMjgwQTAwMTU4N0EzODIwMDQ4NDQKKzoxMDBFNDAwMDhGODIwMDI0MDI2MDIwMjEyNDA1MDAwMTBFMDAxNjg4RjQKKzoxMDBFNTAwMEE0NDYwMEUwMDAwMDIwMjE4RkJGMDAyMDhGQjMwMDFDQkIKKzoxMDBFNjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxRDUKKzoxMDBFNzAwMDAzRTAwMDA4MjdCRDAwMjgyN0JERkZFMEFGQjEwMDE0NDQKKzoxMDBFODAwMDhGOTEwMDMwQUZCMDAwMTBBRkJGMDAxODhFMjYwMDEwNTkKKzoxMDBFOTAwMDNDMDMwODAwOEM2MzMxQjAzMEMyM0ZGRjAwNDMxMDJCOEQKKzoxMDBFQTAwMDEwNDAwMDVFMDA4MDgwMjE4Rjg1MDAzNDI0MDJGRjgwODYKKzoxMDBFQjAwMDkwQTMwMDBEMDA0MzEwMjQzMDQyMDBGRjUwNDAwMDU4MjIKKzoxMDBFQzAwMDAyMDAyMDIxOEY4MjAwMzgxMDQwMDAwODAwMDYxMzgyQTMKKzoxMDBFRDAwMDhGODIwMDI0OTc2MzAwMEEyNDA0RkZGRDk0NDIwMDYwN0YKKzoxMDBFRTAwMDMwNDJGRkZGMTA0MzAwNTUwMDA2MTM4MjMwNDIwMDAzREEKKzoxMDBFRjAwMDE0NDAwMDBFMDAwMDAwMDA5MjIyMDAwMjEwNDAwMDA1ODUKKzoxMDBGMDAwMDhFMjMwMDI0NTA2MDAwMTU5MjIzMDAwMzBBMDAxOUI2QjYKKzoxMDBGMTAwMDAyMDAyMDIxOENBMjAwMjQ1MDYyMDAxMDkyMjMwMDAzQzIKKzoxMDBGMjAwMDAyMDAyMDIxMEEwMDE5QkUyNDAyMDAwRjkwQTIwMDBEMjkKKzoxMDBGMzAwMDMwNDIwMDA4NTQ0MDAwMDk5MjIzMDAwMzAyMDAyMDIxOUYKKzoxMDBGNDAwMDI0MDIwMDEwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMkYKKzoxMDBGNTAwMDEwNDMwMDNBMjQwNEZGRkY5MjIzMDAwMzI0MDIwMDAyRkUKKzoxMDBGNjAwMDU0NjIwMDBDOTIyMjAwMDM4RjgyMDAzODU0NDAwMDA5MjIKKzoxMDBGNzAwMDkyMjIwMDAzMDIwMDIwMjEyNDAyMDAyQzBFMDAxNTg3N0IKKzoxMDBGODAwMEEzODIwMDQ4MjQwM0ZGRkYxMDQzMDAyQzI0MDRGRkZGMkEKKzoxMDBGOTAwMDkyMjIwMDAzMDIyMDI4MjEwMjAwMjAyMTM4NDYwMDEwNUUKKzoxMDBGQTAwMDJDQzYwMDAxMkM0MjAwMDEwRTAwMTVBNzAwNDYzMDI1N0EKKzoxMDBGQjAwMDI0MTFGRkZGMTA1MTAwMjEyNDA0RkZGRjhGODMwMDM4MEMKKzoxMDBGQzAwMDEwNjAwMDEyMDIwMDIwMjEzQzAyMDgwMDhDNDIzMThDOEIKKzoxMDBGRDAwMDAwNDMxMDJCMTQ0MDAwMDYwMDAwMDAwMDAwMDAyODIxRjAKKzoxMDBGRTAwMDBFMDAxNkQ1MjQwNjAwMDEwQTAwMTlGQzAwMDAyMDIxN0QKKzoxMDBGRjAwMDI0MDIwMDJEMEUwMDE1ODdBMzgyMDA0ODEwNTEwMDBGMTcKKzoxMDEwMDAwMDI0MDRGRkZGMEEwMDE5RkMwMDAwMjAyMTBFMDAxNjg4QUUKKzoxMDEwMTAwMDI0MDUwMDAxMEEwMDE5RkMwMDAwMjAyMTAyMDAyMDIxMDMKKzoxMDEwMjAwMDI0MDIwMDBEOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwODQKKzoxMDEwMzAwMDI3QkQwMDIwMEEwMDE1ODdBMzgyMDA0ODhGQkYwMDE4MzMKKzoxMDEwNDAwMDhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4NjEKKzoxMDEwNTAwMDI3QkQwMDIwOTM4MzAwM0MyN0JERkZFMDI0MDIwMDAyNEYKKzoxMDEwNjAwMEFGQjEwMDE0QUZCMDAwMTAwMDgwODgyMUFGQkYwMDE4RUUKKzoxMDEwNzAwMDAwMDA4MDIxMTA2MjAwOEMyNDA0RkZGRDk3ODUwMDNFNTMKKzoxMDEwODAwMDhGODMwMDQwMzBBMkZGRkYwMDQzMTAyQjU0NDAwMDdEQUYKKzoxMDEwOTAwMDhGODQwMDQ0MEUwMDE0NDgwMDAwMDAwMDNDMDIwODAwNDkKKzoxMDEwQTAwMDI0NDI3NUFDMDIyMDIwMjEwMDQwMjgyMTBFMDAxNjBFOUIKKzoxMDEwQjAwMEFGODIwMDMwMjQwOUZGRkYxMDQ5MDA3QjI0MDRGRkZGQUEKKzoxMDEwQzAwMDNDMDgwODAwOEQwODc1QkMzQzAyMDgwMDhDNDIzMUIwMTkKKzoxMDEwRDAwMDNDMDMwODAwOTA2Mzc1QUMzMTA0M0ZGRjAwODIxMDJCODUKKzoxMDEwRTAwMDEwNDAwMDFCMzA2NzAwM0YzQzAyMDgwMDhDNDIzMUE4RDIKKzoxMDEwRjAwMDhGODMwMDRDMDAwNDIxODAwMDYyMTgyMTAwNjQxODIxQjUKKzoxMDExMDAwMDMwNjIwMDdGMDM0MjI4MjEzQzAyMDAwQzAwQTIyODIxMEIKKzoxMDExMTAwMDNDMDIwMDgwMzQ0MjAwMDEzMDY2MDA3ODAwQzIzMDI1NzUKKzoxMDExMjAwMDI0MDJGRjgwMDA2MjEwMjRBRjQyMDAyODMwNjQwMDA3RDAKKzoxMDExMzAwMEFGNDIwODA0OEY4MjAwMjQwMzQ0MjAyMTI0ODQwOTQwMDQKKzoxMDExNDAwMEFGNDYwODE0QUY4NTAwMjhBRjg0MDAzNEFDNDMwMTE4QzMKKzoxMDExNTAwMDkzODMwMDNDMjQwMjAwMDMxNDYyMDAzQjI0MDIwMDAxM0MKKzoxMDExNjAwMDI0MDIwMDI2MTBFMjAwM0QyOEUyMDAyNzEwNDAwMDEzNzAKKzoxMDExNzAwMDI0MDIwMDMyMjQwMjAwMjIxMEUyMDAzODI4RTIwMDIzNzgKKzoxMDExODAwMDEwNDAwMDA4MjQwMjAwMjQyNDAyMDAyMDEwRTIwMDI0NjEKKzoxMDExOTAwMDI0MDIwMDIxMTBFMjAwMUUwMjIwMjAyMTBBMDAxQTdCRjYKKzoxMDExQTAwMDI0MDIwMDBCMTBFMjAwMkQyNDAyMDAyNTEwRTIwMDEwQTIKKzoxMDExQjAwMDAyMjAyMDIxMEEwMDFBN0IyNDAyMDAwQjEwRTIwMDFBRjAKKzoxMDExQzAwMDI4RTIwMDMzMTA0MDAwMDYyNDAyMDAzRjI0MDIwMDMxRDAKKzoxMDExRDAwMDEwRTIwMDBCMDIyMDIwMjEwQTAwMUE3QjI0MDIwMDBCREYKKzoxMDExRTAwMDEwRTIwMDExMDIyMDIwMjEwQTAwMUE3QjI0MDIwMDBCQzkKKzoxMDExRjAwMDBFMDAxNzY4MDIyMDIwMjEwQTAwMUE5NjAwNDA4MDIxNjQKKzoxMDEyMDAwMDBFMDAxOEVBMDIyMDIwMjEwQTAwMUE5NjAwNDA4MDIxRDAKKzoxMDEyMTAwMDBFMDAxOThCMDIyMDIwMjEwQTAwMUE5NjAwNDA4MDIxMUUKKzoxMDEyMjAwMDE1MDkwMDBFMDAwMDAwMDAwRTAwMTgwRjAyMjAyMDIxRkEKKzoxMDEyMzAwMDBBMDAxQTk2MDA0MDgwMjEwRTAwMTU4N0EzODIwMDQ4RkMKKzoxMDEyNDAwMDBBMDAxQTk2MDA0MDgwMjExNDYyMDAxNzAyMDAyMDIxMzMKKzoxMDEyNTAwMDI0MDIwMDIzMTRFMjAwMDUyNDAyMDAwQjBFMDAxODgxNzIKKzoxMDEyNjAwMDAyMjAyMDIxMEEwMDFBOTYwMDQwODAyMTAyMjAyMDIxMUQKKzoxMDEyNzAwMEEzODIwMDQ4MEUwMDE1ODcyNDEwRkZGRjBBMDAxQTk3NkEKKzoxMDEyODAwMDAyMDAyMDIxMzBBNTAwRkYwRTAwMTQ4NTI0MDYwMDAxNzUKKzoxMDEyOTAwMDk3ODMwMDNFOEY4MjAwNDBBNzgwMDAzRTAwNDMxMDIzQ0EKKzoxMDEyQTAwMEFGODIwMDQwMDIwMDIwMjE4RkJGMDAxODhGQjEwMDE0RDAKKzoxMDEyQjAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwM0YKKzoxMDEyQzAwMDI3QkRGRkUwQUZCMTAwMTRBRkJGMDAxOEFGQjAwMDEwRjIKKzoxMDEyRDAwMDhGNDYwMTI4M0MwMzA4MDA4QzYzMzFBMDI0MDJGRjgwNjQKKzoxMDEyRTAwMEFGODYwMDRDMDBDMzE4MjEzMDY1MDA3RjAzNDUyODIxREMKKzoxMDEyRjAwMDAwNjIxODI0M0MwMjAwMEFBRjQzMDAyNDAwQTIyODIxMDcKKzoxMDEzMDAwMDkwQTIwMDYyMDA4MDg4MjFBRjg1MDAyNDMwNDIwMEZGNTcKKzoxMDEzMTAwMDAwMDIxMTAyQTM4MjAwM0M5MEEyMDBCQzMwNDIwMDAyRjUKKzoxMDEzMjAwMDE0NDAwMDAyMjQwMzAwMzQyNDAzMDAzMDhGODIwMDI0ODAKKzoxMDEzMzAwMEEzODMwMDJDOTM4MzAwM0M4QzQyMDBDMEEzODAwMDQ4MTAKKzoxMDEzNDAwMEFGODIwMDQwMjQwMjAwMDQxMDYyMDAzMDhGODQwMDQwMEQKKzoxMDEzNTAwMDhFMjQwMDA0NTA4MDAwMkQ4Rjg0MDA0MDhFMjIwMDEwQzcKKzoxMDEzNjAwMDMwODNGRkZGQTc4NDAwM0UxMDYwMDAxRkFGODIwMDQ0NUYKKzoxMDEzNzAwMDhGODMwMDI0MjQwNUZGODAwMjIwMjAyMTkwNjIwMDYzRDcKKzoxMDEzODAwMDAwQTIxMDI0MzA0MjAwRkYxNDQwMDAwRDAwMDAwMDAwQjUKKzoxMDEzOTAwMDBFMDAxQTAyOTc5MDAwM0UxMDQwMDAxMDAwNDAxODIxRTUKKzoxMDEzQTAwMDI0MDJGRkZENTQ2MjAwMTE4RTIzMDAyMDAyMDAyODIxMzgKKzoxMDEzQjAwMDBFMDAxNDI2MDIyMDIwMjEwQTAwMUFFODhFMjMwMDIwQTUKKzoxMDEzQzAwMDkwNjIwMDYzMDBBMjEwMjQzMDQyMDBGRjEwNDAwMDAzMkUKKzoxMDEzRDAwMDAyMjAyMDIxMEUwMDE3NEEwMDAwMDAwMDk3ODIwMDNFRTQKKzoxMDEzRTAwMDE0NDBGRkU0OEY4MzAwMjQ4RTIzMDAyMDMwNjIwMDA0MjkKKzoxMDEzRjAwMDEwNDAwMDA2OEY4NDAwNDAyNDAyRkZGQjAwNjIxMDI0OEUKKzoxMDE0MDAwMDBFMDAxNDNBQUUyMjAwMjA4Rjg0MDA0MDhGODMwMDI0MDcKKzoxMDE0MTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDIwMDAxOUMKKzoxMDE0MjAwMDI3QkQwMDIwMDNFMDAwMDhBQzY0MDBDMDMwQTUwMEZGMjkKKzoxMDE0MzAwMDI0MDMwMDAxMjRBOTAwMDEwMDY5MTAyQjEwNDAwMDBDQjYKKzoxMDE0NDAwMDAwMDA0MDIxMjQwQTAwMDEwMEEzMTAyMzAwNEEzODA0QjAKKzoxMDE0NTAwMDI0NjMwMDAxMzA4MjAwMDEwMDY5MzAyQjEwNDAwMDAyM0IKKzoxMDE0NjAwMDAwMDQyMDQyMDEwNzQwMjU1NEMwRkZGODAwQTMxMDIzQzgKKzoxMDE0NzAwMDAzRTAwMDA4MDEwMDEwMjEyN0JERkZFMDNDMDIxRURDNTQKKzoxMDE0ODAwMEFGQjIwMDE4QUZCMTAwMTRBRkJGMDAxQ0FGQjAwMDEwNzYKKzoxMDE0OTAwMDM0NTI2RjQxMDAwMDg4MjEyNDA1MDAwODBFMDAxQUY4MUMKKzoxMDE0QTAwMDAyMjAyMDIxMDAxMTgwODAzQzA3MDgwMDI0RTc3MUFDNTUKKzoxMDE0QjAwMDAwMDIxNjAwMDIwNzE4MjFBQzYyMDAwMDAwMDAyODIxN0IKKzoxMDE0QzAwMDI0QTIwMDAxMzA0NUZGRkY4QzYyMDAwMDJDQTYwMDA4MUEKKzoxMDE0RDAwMDA0NDEwMDAyMDAwMjIwNDAwMDkyMjAyNjE0QzBGRkY4QzAKKzoxMDE0RTAwMEFDNjQwMDAwMDIwNzgwMjE4RTA0MDAwMDBFMDAxQUY4OTAKKzoxMDE0RjAwMDI0MDUwMDIwMjYyMzAwMDEzMDcxRkZGRjJFMjMwMTAwNjgKKzoxMDE1MDAwMDE0NjBGRkU1QUUwMjAwMDA4RkJGMDAxQzhGQjIwMDE4MTAKKzoxMDE1MTAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMzkKKzoxMDE1MjAwMDNDMDIwODAwMjQ0MjZBNzQzQzAxMDgwMEFDMjI3MUEwMEQKKzoxMDE1MzAwMDNDMDIwODAwMjQ0MjRGRjAzQzAxMDgwMEFDMjI3MUE0OTgKKzoxMDE1NDAwMDI0MDIwMDA2M0MwMTA4MDBBMDIyNzFBODBBMDAxQjBCMUYKKzoxMDE1NTAwMDAwMDAwMDAwMjdCREZGRDhBRkIzMDAxQ0FGQjIwMDE4RDkKKzoxMDE1NjAwMEFGQkYwMDIwQUZCMTAwMTRBRkIwMDAxMDhGNTEwMTQwRTkKKzoxMDE1NzAwMDhGNDgwMTQ4MDAwODk0MDIzMjQzMDBGRjMxMTMwMEZGRjYKKzoxMDE1ODAwMDhGNDIwMUI4MDQ0MEZGRkUyNzUwMDE4MEFFMTEwMDAwRDkKKzoxMDE1OTAwMDhGNDIwMTQ0QUUwMjAwMDQyNDAyMDAwMkE2MTIwMDA4OTkKKzoxMDE1QTAwMEEyMDIwMDBCMjQwMjAwMTRBRTEzMDAyNDEwNjIwMDI1RDYKKzoxMDE1QjAwMDI4NjIwMDE1MTA0MDAwMDgyNDAyMDAxNTI0MDIwMDEwQzMKKzoxMDE1QzAwMDEwNjIwMDMwMjQwMjAwMTIxMDYyMDAwOThGQkYwMDIwNTgKKzoxMDE1RDAwMDBBMDAxQzM1OEZCMzAwMUMxMDYyMDA3MDI0MDIwMDIyMjgKKzoxMDE1RTAwMDEwNjIwMDM3OEZCRjAwMjAwQTAwMUMzNThGQjMwMDFDMkIKKzoxMDE1RjAwMDNDMDIwODAwOEM0MjMxQTAyNDAzRkY4MDAyMjIxMDIxMEIKKzoxMDE2MDAwMDAwNDMxMDI0QUY0MjAwMjQzQzAyMDgwMDhDNDIzMUEwNjkKKzoxMDE2MTAwMDAyMjIxMDIxMzA0MjAwN0YwMzQyMTgyMTNDMDIwMDBBQkUKKzoxMDE2MjAwMDAwNjIxODIxMTY2MDAwQkNBRjgzMDAyNDkwNjIwMDYyNDMKKzoxMDE2MzAwMDMwNDIwMDBGMzQ0MjAwMzBBMDYyMDA2MjBBMDAxQzM0QzUKKzoxMDE2NDAwMDhGQkYwMDIwM0MwNDYwMDA4QzgzMkMwODNDMDJGMDAzMTgKKzoxMDE2NTAwMDM0NDJGRkZGMDA2MjE4MjRBQzgzMkMwODNDMDIwODAwQ0YKKzoxMDE2NjAwMDhDNDIzMUEwOEM4MzJDMDgyNDQyMDA3NDAwMDIxMDgyMkEKKzoxMDE2NzAwMDAwMDIxNDgwMDA2MjE4MjVBQzgzMkMwODBBMDAxQzM0NzgKKzoxMDE2ODAwMDhGQkYwMDIwM0MwMjA4MDA4QzQyMzFBMDI0MDNGRjgwNjEKKzoxMDE2OTAwMDAyMjIxMDIxMDA0MzEwMjRBRjQyMDAyNDNDMDIwODAwMjMKKzoxMDE2QTAwMDhDNDIzMUEwM0MwMzAwMEEwMjIyMTAyMTMwNDIwMDdGMEMKKzoxMDE2QjAwMDAzNDIxMDIxMDA0MzEwMjEwQTAwMUMzM0FGODIwMDI0OTIKKzoxMDE2QzAwMDNDMDIwODAwOEM0MjMxQTAyNDA1RkY4MDAyMjIxMDIxMzgKKzoxMDE2RDAwMDAwNDUxMDI0QUY0MjAwMjQzQzAyMDgwMDhDNDIzMUEwOTcKKzoxMDE2RTAwMDAyMjIxMDIxMzA0MjAwN0YwMzQyMTgyMTNDMDIwMDBBRUUKKzoxMDE2RjAwMDAwNjIxODIxOTA2MjAwNjMwMEEyMTAyNDMwNDIwMEZGQjMKKzoxMDE3MDAwMDEwNDAwMDg1QUY4MzAwMjQyNDYyMDA4ODk0NDMwMDEyQjcKKzoxMDE3MTAwMDNDMDIwODAwOEM0MjMxQTgzMDYzM0ZGRjAwMDMxOTgwNkYKKzoxMDE3MjAwMDAyMjIxMDIxMDA0MzEwMjEzMDQzMDA3RjAzNDMyMDIxNzcKKzoxMDE3MzAwMDAwNDUxMDI0M0MwMzAwMEMwMDgzMjAyMUFGNDIwMDI4MDgKKzoxMDE3NDAwMDkwODIwMDBEMDBBMjEwMjQzMDQyMDBGRjEwNDAwMDcyNzEKKzoxMDE3NTAwMEFGODQwMDI4OTA4MjAwMEQzMDQyMDAxMDE0NDAwMDZGQ0EKKzoxMDE3NjAwMDhGQkYwMDIwMEUwMDE1NTYwMDAwMDAwMDhGNDIwMUI4MDgKKzoxMDE3NzAwMDA0NDBGRkZFMDAwMDAwMDBBRTExMDAwMDhGNDIwMTQ0NTMKKzoxMDE3ODAwMEFFMDIwMDA0MjQwMjAwMDJBNjEyMDAwOEEyMDIwMDBCMEUKKzoxMDE3OTAwMEFFMTMwMDI0MEEwMDFDMzQ4RkJGMDAyMDI0MDZGRjgwRjMKKzoxMDE3QTAwMDAyMjYxMDI0QUY0MjAwMjAzQzAyMDgwMDhDNDIzMUEwRTcKKzoxMDE3QjAwMDMxMDQzRkZGMDAwNDIxODAwMjIyMTAyMTAwNDYxMDI0NDIKKzoxMDE3QzAwMEFGNDIwMDI0M0MwMzA4MDA4QzYzMzFBODNDMDIwODAwQUYKKzoxMDE3RDAwMDhDNDIzMUEwMzIyNzAwN0YwMjIzMTgyMTAyMjIxMDIxREYKKzoxMDE3RTAwMDAwNjQxODIxMzA0MjAwN0YzMDY0MDA3RjAzNDIyODIxQ0EKKzoxMDE3RjAwMDNDMDIwMDBBMDA2NjE4MjQwMEEyMjgyMTAzNDQyMDIxOEMKKzoxMDE4MDAwMDNDMDIwMDBDMDA4MjIwMjFBRjQzMDAyODNDMDIwMDA4NkIKKzoxMDE4MTAwMDAzNDcxODIxMDA2MjkwMjFBRjg1MDAyNEFGODQwMDI4N0YKKzoxMDE4MjAwMDBFMDAxNTU2MDEwMDgwMjE4RjQyMDFCODA0NDBGRkZFRDIKKzoxMDE4MzAwMDhGODIwMDI4OEY4NDAwMjQyNzQ1MDE4MDkwNDIwMDBENkMKKzoxMDE4NDAwMEFDQjEwMDAwQTRCMDAwMDYwMDAyMTYwMDAwMDIxNjAzQUUKKzoxMDE4NTAwMDAwMDIxMDI3MDAwMjM3QzIxNEMwMDAxNjI0ODIwMDg4M0MKKzoxMDE4NjAwMDk0NDIwMDEyMzIwMzNGRkYzMDQyM0ZGRjE0NDMwMDEyMDQKKzoxMDE4NzAwMDI0MDI2MDgyOTA4MzAwNjMyNDAyRkY4MDAwNDMxMDI0Q0UKKzoxMDE4ODAwMDMwNDIwMEZGNTA0MDAwMEMyNDAyNjA4MjkwODIwMDYyQ0YKKzoxMDE4OTAwMDMwNDIwMDBGMzQ0MjAwNDBBMDgyMDA2MjI0MDI2MDg0ODMKKzoxMDE4QTAwMEE0QTIwMDA4MjQwMjAwMERBMEEyMDAwNTBBMDAxQzFFMkMKKzoxMDE4QjAwMDNDMDIyNzAwMjQwMjYwODJBNEEyMDAwOEEwQTAwMDA1MjgKKzoxMDE4QzAwMDNDMDIyNzAwMDAwNjFDMDAwMDYyMTgyNTI0MDIwMDAyQ0EKKzoxMDE4RDAwMEEwQTIwMDBCQUNBMzAwMTBBQ0EwMDAxNEFDQTAwMDI0OEMKKzoxMDE4RTAwMEFDQTAwMDI4QUNBMDAwMkM4RTQyMDA0QzhGODQwMDI4QjUKKzoxMDE4RjAwMEFDQTIwMDE4OTA4MzAwMEQyNDAyRkY4MDAwNDMxMDI0NDYKKzoxMDE5MDAwMDMwNDIwMEZGMTA0MDAwMDU4RkJGMDAyMDkwODIwMDBEODQKKzoxMDE5MTAwMDMwNDIwMDdGQTA4MjAwMEQ4RkJGMDAyMDhGQjMwMDFDREIKKzoxMDE5MjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDNDMDIxMDAwNkQKKzowQzE5MzAwMDI3QkQwMDI4MDNFMDAwMDhBRjQyMDFCODBBCis6MDQxOTNDMDAwODAwMzNGODc0Cis6MTAxOTQwMDAwODAwMzNGODA4MDAzMzcwMDgwMDMzQTgwODAwMzNEQ0JGCis6MTAxOTUwMDAwODAwMzQwMDA4MDAzNDAwMDgwMDM0MDAwODAwMzJFMEI5Cis6MTAxOTYwMDAwQTAwMDEyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDNECis6MTAxOTcwMDA3NDcwNjEzNTJFMzAyRTMwNkEzMzAwMDAwNTAwMDAwMThFCis6MTAxOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTAxOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTAxOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAxOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTAxOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTAxOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTAxOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwM0U0Cis6MTAxOUYwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMEQzQzAyMDgwMDg3Cis6MTAxQTAwMDAyNDQyMUI4MDNDMDMwODAwMjQ2MzIwMTRBQzQwMDAwMEU3Cis6MTAxQTEwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDQzQzFEMDgwMERECis6MTAxQTIwMDAzN0JEMkZGQzAzQTBGMDIxM0MxMDA4MDAyNjEwMDQ4OENECis6MTAxQTMwMDAzQzFDMDgwMDI3OUMxQjgwMEUwMDAxNUEwMDAwMDAwMDdGCis6MTAxQTQwMDAwMDAwMDAwRDMwODRGRkZGMzA4MjAwMDc4Rjg1MDAxOEYyCis6MTAxQTUwMDAxMDQwMDAwMjI0ODMwMDA3MzA2NEZGRjgwMDg1MzAyMTI1Cis6MTAxQTYwMDAzMEM0MUZGRjAzNDQxODIxMjQ3QjQwMDBBRjg1MDAxQ0I1Cis6MTAxQTcwMDBBRjg0MDAxODAzRTAwMDA4QUY0NDAwODQzMDg0RkZGRjA3Cis6MTAxQTgwMDAzMDgyMDAwNzhGODUwMDIwOEY4NjAwMjgxMDQwMDAwMkRBCis6MTAxQTkwMDAyNDgzMDAwNzMwNjRGRkY4MDA4NTIwMjEwMDg2MTgyQjdFCis6MTAxQUEwMDAxNDYwMDAwMkFGODUwMDI0MDA4NjIwMjMwMzQ0MjgyMTBGCis6MTAxQUIwMDAzNDA2ODAwMEFGODQwMDIwQUY0NDAwODAwMEE2MjAyMUJGCis6MTAxQUMwMDAwM0UwMDAwOEFGODQwMDM4MjdCREZGRDhBRkIzMDAxQzg3Cis6MTAxQUQwMDBBRkIyMDAxOEFGQjAwMDEwQUZCRjAwMjRBRkI0MDAyMDA5Cis6MTAxQUUwMDBBRkIxMDAxNDNDMDg2MDA4OEQxNDUwMDAyNDE4RkY3RjJCCis6MTAxQUYwMDAzQzFBODAwMDAyOTg5ODI0MzY3MjM4MENBRDEyNTAwMEJGCis6MTAxQjAwMDA4RjUxMDAwODNDMDc2MDFDM0MwODYwMDAzNjMwMDAwMTIzCis6MTAxQjEwMDBBRjUwMDAwOEFGODAwMDE4QUY0MDAwODBBRjQwMDA4NDk1Cis6MTAxQjIwMDA4Q0U2MDAwODhEMEYwODA4M0MwNzYwMTY4Q0VDMDAwMDVFCis6MTAxQjMwMDAzMUVFRkZGMDM5Q0EwMDEwM0MwREZGRkYzNDBCODAwMDdFCis6MTAxQjQwMDAzQzAzMDA4MDAzNEI0ODIxMkQ0NDAwMDEwMThEMjgyNEQzCis6MTAxQjUwMDAzQzAyNTM1MzNDMDEwODAwQUMyMzA0MjBBRjg5MDAzOEY5Cis6MTAxQjYwMDBBRjg2MDAyOEFGODQwMDEwMjc1QjQwMDAxNEEyMDAwMzVBCis6MTAxQjcwMDAzNEUzN0MwMDhDRjkwMDA0MDMyODE4MjE4QzdGMDA3QzVFCis6MTAxQjgwMDA4QzY1MDA3ODNDMDI4MDAwMzQ1MjAwNzBBRjg1MDAzQ0M4Cis6MTAxQjkwMDBBRjlGMDA0MDNDMTMwODAwMjY3MzFCQzQwMjQwQTAyMUU1Cis6MTAxQkEwMDA4RTQ4MDAwMDhGNDYwMDAwMzhDMzAwMDEzMDY0MDAwMUY5Cis6MTAxQkIwMDAxMDgwMDAxN0FGODgwMDM0MDI4MDQ4MjE4RDJEMDAwMDZFCis6MTAxQkMwMDAzQzE5MDgwMDhGMzkwNDVDM0MxMTA4MDA4RTMxMDQ1ODIwCis6MTAxQkQwMDAwMUE4RjgyMzAzM0Y3ODIxMDAwMDQwMjEwMjI4MzgyMTgyCis6MTAxQkUwMDAwMUZGODAyQjAwRjA3MDIxM0MwMTA4MDBBQzJGMDQ1QzQ5Cis6MTAxQkYwMDAzQzAxMDgwMEFDMkUwNDU4OEY0QzAwMDAzOThCMDAwMUNBCis6MTAxQzAwMDAzMTZBMDAwMTE1NDBGRkVEMDFBMDQwMjFBRjhEMDAzNDg1Cis6MTAxQzEwMDA4RTRFMDAwMDNDMEMwODAwOEQ4QzA0NUMzQzBBMDgwMEQxCis6MTAxQzIwMDA4RDRBMDQ1ODAxQzg2ODIzMDE4RDI4MjEwMDAwNTgyMURECis6MTAxQzMwMDAwMEFEMzAyQjAxNEIyMDIxMDA4NjEwMjEzQzAxMDgwMDEzCis6MTAxQzQwMDBBQzI1MDQ1QzNDMDEwODAwQUMyMjA0NTg4RjQ1MDEwODE3Cis6MTAxQzUwMDA4RjQ0MDEwMDMwQTkyMDAwQUY4NTAwMDBBRjg0MDAwQzQ0Cis6MTAxQzYwMDAxMTIwMDAwQTAwQTAzMDIxM0MwNzA4MDA4Q0U3MDQyQzVBCis6MTAxQzcwMDAyNEVGMDAwMTNDMDEwODAwQUMyRjA0MkMzQzEwNDAwMDc0Cis6MTAxQzgwMDBBRjUwMDEzODBBMDAwMTkwMDAwMDAwMDAzMEIwMDIwMDlGCis6MTAxQzkwMDAxNjAwMDAxNDI0MTEwRjAwMTA5MTAwMTIyNDA3MEQwMEVCCis6MTAxQ0EwMDAxMDg3MDIzMzMwQjAwMDA2NTIwMEZGRjUzQzEwNDAwMEIwCis6MTAxQ0IwMDA5MzZEMDAwMDI0MEMwMDEwMzFBNjAwRjAxMENDMDI2OUQ2Cis6MTAxQ0MwMDAyNDBFMDA3MDEwQ0UwMkREOEY4QjAwMTQyNTY3MDAwMUZBCis6MTAxQ0QwMDBBRjg3MDAxNDNDMTA0MDAwQUY1MDAxMzgwQTAwMDE5MDVCCis6MTAxQ0UwMDAwMDAwMDAwMDk3NDgwMTA0MTEwMEZGRTUzQzEwNDAwMDhGCis6MTAxQ0YwMDAzMEI4NDAwMDE3MDAwMEEyMDAwMDAwMDA4RjU5MDE3OEEyCis6MTAxRDAwMDAwNzIwRkZGRThGODcwMDM4MjQwOTAwMDgyNDA1MDgwMEZCCis6MTAxRDEwMDA4Q0UzMDAwOEFGNDUwMTc4QTc0OTAxNDBBNzQwMDE0Mjg0Cis6MTAxRDIwMDA5NzQyMDEwNDhGODYwMDAwMzA0OUZGRkYzMERGMDAwMTM5Cis6MTAxRDMwMDAxM0UwMDJENTAxMjA0MDIxMjUyNEZGRkUyNDBBMDAwMkUxCis6MTAxRDQwMDBBNzRBMDE0NjMwODhGRkZGQTc0NDAxNDgzQzBCMDgwMDIyCis6MTAxRDUwMDA4RDZCMDQzQzE1NjAwMkM0OEY4RjAwMEMzMEMzMDAyMEQzCis6MTAxRDYwMDAxNDYwMDAwMjI0MDQwMDA5MjQwNDAwMDEzMENEMEMwMDlBCis6MTAxRDcwMDAyNDBDMDQwMDUxQUMwMDAxMzQ4NDAwMDRBNzQ0MDE0QTNGCis6MTAxRDgwMDAzQzA1MDgwMDhDQTUwNDIwM0MwMjAwNDgzQzE5MDAwMUQ5Cis6MTAxRDkwMDAwMEEyRjgyNTMwRDgwMDAyMDNGOTI4MjUxMzAwMDAwNDFBCis6MTAxREEwMDAwMDAwMTgyMTNDMDQwMTAwMDBBNDI4MjUyNDAzMDAwMUEwCis6MTAxREIwMDAzMENBMDAwNDUxNDAwMDA1QUY4MzAwMDgzQzA2MDAxMDAzCis6MTAxREMwMDAwMEE2MjgyNTI0MDMwMDAxQUY4MzAwMDhBRjQ1MTAwMEJBCis6MTAxREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTAxREUwMDA4RjgzMDAwODEwNjAwMDIzMDAwMDAwMDA4RjRCMTAwMDVDCis6MTAxREYwMDAwNTYxRkZGRTAwMDAwMDAwMTA2MDAwMUUwMDAwMDAwMEYyCis6MTAxRTAwMDA4RjREMTAwMDNDMDMwMDIwMDFBMzYwMjQxMTgwMDAxOUI1Cis6MTAxRTEwMDA4RjhGMDAwMDMxRUUwMDAyMTFDMDAwMTYwMDAwMDAwMDlDCis6MTAxRTIwMDA5NzUwMTAxNDE2MDAwMDEzMDAwMDAwMDA5NzQ1MTAwODhBCis6MTAxRTMwMDAzMEJGRkZGRjI3RjgwMDA2MDAxOEM4ODIwMDE5MzA4MDY1Cis6MTAxRTQwMDAwMEM3MjgyMTMzMTEwMDAxMzMwMzAwMDMxMjIwMDMyMEFGCis6MTAxRTUwMDA4Q0EyMDAwMDAwMDAwMDBEMDBDN0Y4MjFBRkUyMDAwMEQ2Cis6MTAxRTYwMDAzQzE5MDgwMDhGMzkwNDMwMjcyNjAwMDEzQzAxMDgwMDg2Cis6MTAxRTcwMDBBQzI2MDQzMDhGNkEwMDAwMzQwNUZGRkZBRjhBMDAwNEVGCis6MTAxRTgwMDA4Q0UyMDAwMDEwNDUwMjlBMDAwMDIwMjE4Q0U1MDAwMDQxCis6MTAxRTkwMDAzMEJGMDEwMDEzRTAwMjdFMDEwMDIwMjEzQzA3MDgwMDUyCis6MTAxRUEwMDA4Q0U3MDQ3NDNDMTAwODAwOEUxMDA0NEMwMEU4NTgyMUE0Cis6MTAxRUIwMDAzQzE4MDgwMDhGMTgwNDcwMDE2ODg4MkIzQzA4MDgwMDQzCis6MTAxRUMwMDA4RDA4MDQ0ODAwMDA3ODIxMDIwNDYwMjEwMzBGMTgyMUM2Cis6MTAxRUQwMDAwMTg0NzAyQjAxMEY2ODIxMDA3MTUwMjEwMUFFMTAyMTg3Cis6MTAxRUUwMDAzQzAxMDgwMEFDMkMwNDRDM0MwMTA4MDBBQzIyMDQ0ODI2Cis6MTAxRUYwMDAzQzAxMDgwMEFDMkIwNDc0M0MwMTA4MDBBQzJBMDQ3MEJGCis6MTAxRjAwMDA4RjhEMDAxODAxMjAzMDIxMzEyOTAwMDcyNUFFMDAwOEVGCis6MTAxRjEwMDAzMUMyMUZGRjAzNDI2MDIxQUY4RDAwMUNBRjgyMDAxODQ5Cis6MTAxRjIwMDAyNTlCNDAwMEFGNDIwMDg0MTEyMDAwMDM4RjkwMDAyMEM5Cis6MTAxRjMwMDAyNEM4MDAwNzMxMDZGRkY4OEY4NDAwMjgwMEQwMjgyMTJDCis6MTAxRjQwMDAwMEE0NzgyQjE1RTAwMDAyQUY5MDAwMjQwMEE0MjgyMzAxCis6MTAxRjUwMDAwMzQ1MjAyMTM0MDM4MDAwMDA4MzEwMjEzQzA2MTAwMDNCCis6MTAxRjYwMDBBRjg1MDAyMEFGODIwMDM4QUY0NTAwODBBRjQ2MDE3OEQyCis6MTAxRjcwMDA4RjhCMDAxNDI1NjcwMDAxMEEwMDAxRERBRjg3MDAxNDc0Cis6MTAxRjgwMDA4RjYyMDAwODhGNjcwMDAwMjQxMTAwMzAwMDA3QzYwMjJFCis6MTAxRjkwMDAzMzAzMDBGMDEwNzEwMEEyMjQxOTAwNDAxNDc5RkY0QkE0Cis6MTAxRkEwMDA4RjhCMDAxNDhGNEEwMTc4MDU0MEZGRkUzMEE3MDIwMDk2Cis6MTAxRkIwMDAxNEUwMDAwMzAwMDUxMjgyMDAwMDAwMEQwMDA1MTI4MkVCCis6MTAxRkMwMDAzMDUwMDAwMzAwMTA0OTAwMDEzMDcwMjEwMDBFNjg4MDdECis6MTAxRkQwMDAwMUIwNjAyMTAwMEM1ODgwMDE3MzgwMjE4RTA4MDAwMDQwCis6MTAxRkUwMDAxNTAwMDAwMjAwMDAwMDAwMDAwMDAwMEQ4RjZGMDAwNENCCis6MTAxRkYwMDAwNUUyMDJCMTkyMDMwMDA2OTIwNzAwMDU5MjBGMDAwNDY5Cis6MTAyMDAwMDAzQzAyMDAwMTAwMDcyODgwMDBCMDYwMjE4RDg5MDAxODgzCis6MTAyMDEwMDAyNzcxMDAwODI1RUUwMDA1MDEyMjY4MjEwMDBFMzA4MjlDCis6MTAyMDIwMDBBRDhEMDAxODAyMjAyMDIxMEUwMDA1ODAyNjA1MDAxNDI5Cis6MTAyMDMwMDA5MjBCMDAwNjhGN0YwMDA0M0MwODdGRkYwMDBCMjA4MDdFCis6MTAyMDQwMDAwMDkxMzAyMThDQzMwMDA0MzUwQUZGRkYwM0VBQzgyNDQ1Cis6MTAyMDUwMDAwMDc5QzAyMUFDRDgwMDA0OTIwNzAwMDU5MjA5MDAwNDYxCis6MTAyMDYwMDA5NjBEMDAwODAwMDcyODgwMDBCMUY4MjE4RkVGMDAwMENFCis6MTAyMDcwMDA5NzQyMDEwNDNDMDdGRkZGMDFFNzUwMjQzMDRFRkZGRjY5Cis6MTAyMDgwMDAwMUM5NjAyMTAxOEQ1ODIzMzE2OEZGRkYwMTQ4MjAyNUQ3Cis6MTAyMDkwMDBBRkU0MDAwMDkyMDMwMDA3MjQxOTAwMDExMDc5MDI2OURGCis6MTAyMEEwMDAyNDA2MDAwMzEwNjYwMjc5MDAwMDAwMDA4RTE5MDAxMDVCCis6MTAyMEIwMDAyNDFGMDAwQUE3NUYwMTQwQTc1OTAxNDI5MjAzMDAwNEIwCis6MTAyMEMwMDA4Rjg2MDAwMDI0MDcwMDAxQTc0MzAxNDRBNzQwMDE0NjcyCis6MTAyMEQwMDA5NzU4MDEwNDMwRDEwMDAyM0MwNTAwNDFBNzU4MDE0ODNGCis6MTAyMEUwMDAwMDAwMTgyMUE3NDcwMTRBMTIyMDAwMDMzMENBMDAwNDRCCis6MTAyMEYwMDAzQzA1MDE0MTI0MDMwMDAxNTE0MDAwMDVBRjgzMDAwODY1Cis6MTAyMTAwMDAzQzA4MDAxMDAwQTgyODI1MjQwMzAwMDFBRjgzMDAwODI0Cis6MTAyMTEwMDBBRjQ1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTAyMTIwMDAwMDAwMDAwMDhGOEIwMDA4MTE2MDAwMDQwMDAwMDAwMDE4Cis6MTAyMTMwMDA4RjQ0MTAwMDA0ODFGRkZFMDAwMDAwMDA4RjZBMDAwMDQxCis6MTAyMTQwMDA5MjA3MDAwNDNDMDUwODAwOENBNTA0NDRBRjhBMDAwNEYzCis6MTAyMTUwMDA5NzVGMDEwNDNDMEYwODAwOERFRjA0NDAzMEUzMDBGRjVGCis6MTAyMTYwMDAzM0Y5RkZGRjAwNzlDMDIxMDBCODY4MjEwMDAwMTAyMTc5Cis6MTAyMTcwMDAyNEU2MDAwQTMwQzhGRkZGMDFCODQ4MkIwMUUyNzAyMUI1Cis6MTAyMTgwMDAwMUM5NjAyMTMxMTAwMDA3M0MwMTA4MDBBQzJEMDQ0NDU2Cis6MTAyMTkwMDAzQzAxMDgwMEFDMkMwNDQwMTIwMDAwMDM4RjhEMDAxODk1Cis6MTAyMUEwMDAyNTBCMDAwNzMxNjhGRkY4MDEwRDcwMjEzMUNDMUZGRkFFCis6MTAyMUIwMDBBRjhEMDAxQ0FGOEMwMDE4QUY0QzAwODQ5NzQ0MDEwNDE1Cis6MTAyMUMwMDAwMzRDODAyMTMwODRGRkZGMzA4ODAwMDcxMTAwMDAwMzlBCis6MTAyMUQwMDAyNjFCNDAwMDI0ODkwMDA3MzEyNEZGRjg4RjgyMDAyMDRECis6MTAyMUUwMDA4Rjg1MDAyODAwODIyMDIxMDA4NTc4MkIxNUUwMDAwMkQxCis6MTAyMUYwMDBBRjgyMDAyNDAwODUyMDIzMDM0NDg4MjEzNDA1ODAwMDE5Cis6MTAyMjAwMDAwMjI1MTAyMTNDMDYxMDAwQUY4NDAwMjBBRjgyMDAzODY4Cis6MTAyMjEwMDBBRjQ0MDA4MEFGNDYwMTc4MEEwMDAyODU4RjhCMDAxNDFFCis6MTAyMjIwMDA4RjVGMDE3ODA3RTBGRkZFMzBBQTAyMDAxNTQwMDAwMzJGCis6MTAyMjMwMDAwMDA1NDI4MjAwMDAwMDBEMDAwNTQyODIzMTAyMDAwM0M5Cis6MTAyMjQwMDAwMDAyNzEwMDAxQzI2ODIxMDAwRDYwODAwMTgyNDgyMUY2Cis6MTAyMjUwMDAwMDA5Mjg4MDAwQjM4MDIxOEUwQjAwMDAxMTYwMDAwMjZECis6MTAyMjYwMDAwMDAwMDAwMDAwMDAwMDBEOEY2RjAwMEMwNUUwMDFGMzdFCis6MTAyMjcwMDA4Rjg3MDAzODI0MTkwMDAxQUUxOTAwMDA4Q0UzMDAwODk0Cis6MTAyMjgwMDBBMjAwMDAwNzhGNzgwMDA0MDAxODFDMDIzMDY2MDBGRkNGCis6MTAyMjkwMDAyNEQxMDAwNTAwMTEzMDgyMkNDNDAwNDExNDgwMDAwMkJBCis6MTAyMkEwMDBBMjAzMDAwNDAwMDAwMDBEOEY2QjAwMDQzQzBFRkZGRjMyCis6MTAyMkIwMDAwMEUwMjgyMTMxNjRGRkZGMjQ4RjAwMEIwMDBGNDA4MkQzCis6MTAyMkMwMDAwMDA4MTA4MDAwNDc0ODIxOEQyRDAwMDAyNjA0MDAxNENFCis6MTAyMkQwMDBBNjBCMDAwODAxQUU2MDI0MEUwMDA1ODBBRDJDMDAwMEE2Cis6MTAyMkUwMDA4RjVGMDEwODNDMEExMDAwMDNFQTM4MjQxMEUwMDFBM0M0Cis6MTAyMkYwMDAwMDAwMDAwMDk3NDYwMTA0OTIwMzAwMDcyNEQxRkZFQzgwCis6MTAyMzAwMDAzNDY1MDAwMjMyMjRGRkZGQTIwNTAwMDc5NjA2MDAwODhDCis6MTAyMzEwMDAyQ0M3MDAxMzU0RTAwMDA1OTIwMzAwMDc5MjBBMDAwNzNGCis6MTAyMzIwMDAzNTVGMDAwMUEyMUYwMDA3OTIwMzAwMDcyNDBCMDAwMTg0Cis6MTAyMzMwMDAxMDZCMDFCQTI0MDkwMDAzMTA2OTAxQ0Q4Rjg4MDAzOEExCis6MTAyMzQwMDAzMENGRkZGRjI1RTQwMDAyMDAwNEM4ODMzMzNGMDBGRkM1Cis6MTAyMzUwMDAwMDFGMjg4MEEyMTkwMDA1MDBBODU4MjE4RDc4MDAwMEQwCis6MTAyMzYwMDA5NzUxMDEwNDNDMDNGRkZGMDMwMzYwMjQzMjIyRkZGRjY3Cis6MTAyMzcwMDAwMDRGNzAyMzI1Q0RGRkZFMDE4RDQ4MjVBRDY5MDAwMDdCCis6MTAyMzgwMDA5MjA2MDAwNTNDMDJGRkY2MzQ0RUZGRkYzMENBMDBGRjA0Cis6MTAyMzkwMDAwMDBBMzg4MDAwRjAyMDIxOTA5OTAwMTQzQzFGRkY3RjM0Cis6MTAyM0EwMDAzN0U3RkZGRjMzMjMwMDBGMDA2Njc4MjEzMUY4MDBGRjg1Cis6MTAyM0IwMDAwMDE4Mjg4MDAwQjA4ODIxOEUyRDAwMjAwMEE4NjAyMTAwCis6MTAyM0MwMDBBMjBGMDAwNjAxQUU0ODI0QUUwRDAwMENBRDg5MDAwQzMyCis6MTAyM0QwMDA5MjBCMDAwNjhFMDQwMDBDMDEyN0Y4MjQwMDBCNTA4MDlECis6MTAyM0UwMDAwMTUwQzgyMTk3MjYwMDI2MDE0OEMwMjEwMDg3NDAyNEJCCis6MTAyM0YwMDBBRjI2MDAyNEFFMDgwMDBDQUYzRjAwMjBBRjA2MDAxMDRGCis6MTAyNDAwMDA4Rjg2MDAwMDI0MEMwMDEwMjQwOTAwMDJBNzRDMDE0MDE0Cis6MTAyNDEwMDBBNzQwMDE0MkE3NDAwMTQ0QTc0OTAxNDY5NzRCMDEwNDQ4Cis6MTAyNDIwMDAyNDA3MDAwMTMwQzgwMDAyMjU2QUZGRkVBNzRBMDE0OEMwCis6MTAyNDMwMDAzQzA1MDAwOUE3NDcwMTRBMTEwMDAwMDMwMDAwMTgyMUNDCis6MTAyNDQwMDAzQzA1MDEwOTI0MDMwMDAxMzBDRDAwMDQ1MUEwMDAwNTIyCis6MTAyNDUwMDBBRjgzMDAwODNDMDYwMDEwMDBBNjI4MjUyNDAzMDAwMUQ1Cis6MTAyNDYwMDBBRjgzMDAwOEFGNDUxMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTAyNDcwMDAwMDAwMDAwMDAwMDAwMDAwOTIxODAwMDQyNzExMDAwMjc0Cis6MTAyNDgwMDAzMjJGMDAwNzAwMEYxMDIzMzA0RTAwMDdBRTBFMDAxMDUxCis6MTAyNDkwMDA4RjkwMDAwODEyMDAwMDA0MDAwMDAwMDA4RjQzMTAwMDFECis6MTAyNEEwMDAwNDYxRkZGRTAwMDAwMDAwOEY3ODAwMDA4RjhGMDAxODhECis6MTAyNEIwMDAzQzEwMDgwMDhFMTAwNDQ0QUY5ODAwMDQ5NzUxMDEwNEFBCis6MTAyNEMwMDAyNUU2MDAxMDMwQ0ExRkZGMzIyMkZGRkZBRjhGMDAxQzJECis6MTAyNEQwMDBBRjhBMDAxOEFGNEEwMDg0MjQ0OUZGRkUzQzBCMDgwMDc1Cis6MTAyNEUwMDA4RDZCMDQ0MDk3NEUwMTA0MDEyMDY4MjEwMDA5NjdDM0U5Cis6MTAyNEYwMDAwMjBEMjgyMTMxQzlGRkZGMDBBRDQwMkIwMTZDMzgyMUFFCis6MTAyNTAwMDAwMEU4MjAyMTAzNEFGODIxMzEzOTAwMDczQzAxMDgwMDg2Cis6MTAyNTEwMDBBQzI1MDQ0NDNDMDEwODAwQUMyNDA0NDAxMzIwMDAwMzEzCis6MTAyNTIwMDAyN0ZCNDAwMDI1MjMwMDA3MzA2OUZGRjg4RjlGMDAyMDFDCis6MTAyNTMwMDA4Rjg0MDAyODAxM0YzODIxMDBFNEM4MkIxNzIwMDAwMkI3Cis6MTAyNTQwMDBBRjlGMDAyNDAwRTQzODIzMDM0NzIwMjEzNDA1ODAwMDk2Cis6MTAyNTUwMDAwMDg1MTAyMTNDMDYxMDAwQUY4NzAwMjBBRjgyMDAzOEI0Cis6MTAyNTYwMDBBRjQ3MDA4MEFGNDYwMTc4MEEwMDAyODU4RjhCMDAxNEM4Cis6MTAyNTcwMDA5NzU4MDEwNDEzMDBGREMyM0MxMDQwMDA4RjQzMDE3OEJFCis6MTAyNTgwMDAwNDYwRkZGRTMwQjk0MDAwMTMyMDAwMDMzQzA0MDAwODQzCis6MTAyNTkwMDAwMDAwMDAwRDNDMDQwMDA4QUY0NDAxNDAyNDA4MDgwMDdFCis6MTAyNUEwMDBBRjQ4MDE3ODhGOEIwMDAwOTc0QTAxMDQzMTdGMDAwMTBBCis6MTAyNUIwMDAxM0UwMDBFOTMxNDZGRkZGMjREMEZGRkUyNDBDMDAwMkE3Cis6MTAyNUMwMDBBNzRDMDE0NkE3NTAwMTQ4OEY4RjAwMTgyNDA1MDAwRDI1Cis6MTAyNUQwMDBBNzQ1MDE0QThGNzEwMDAwMjVFMjAwMDgzMDQ5MUZGRjFFCis6MTAyNUUwMDAwMzQ5NzAyMTMwQ0QwMDA3QUY5MTAwMDRBRjhGMDAxQzZDCis6MTAyNUYwMDBBRjg5MDAxODAwQzAzODIxQUY0OTAwODQxMUEwMDAwMzQyCis6MTAyNjAwMDAyNURCNDAwMDI0QzYwMDA3MzBDN0ZGRjg4Rjk4MDAyMDY0Cis6MTAyNjEwMDA4Rjg0MDAyODAwRjgzMDIxMDBDNDM4MkIxNEUwMDAwMjE5Cis6MTAyNjIwMDBBRjk4MDAyNDAwQzQzMDIzOEY4QTAwMTQwMzQ2NTgyMTM5Cis6MTAyNjMwMDAzNDA4ODAwMDAxNjhGODIxMjU1OTAwMDEzQzAzMTAwMDhFCis6MTAyNjQwMDAzQzEwNDAwMEFGODYwMDIwQUY5RjAwMzhBRjQ2MDA4MEFFCis6MTAyNjUwMDBBRjQzMDE3OEFGOTkwMDE0QUY1MDAxMzgwQTAwMDE5MEUwCis6MTAyNjYwMDAwMDAwMDAwMDhGNjkwMDAwOTc0NDAxMDQzMTI3RkZGRjNDCis6MTAyNjcwMDAzMDg4RkZGRjhGNEYwMTc4MDVFMEZGRkUzMEZGMDAwNzM1Cis6MTAyNjgwMDAwMDFGMTgyMzMwNzgwMDA3MjRFNkZGRkUyNDE5MDAwQUYzCis6MTAyNjkwMDBBNzU5MDE0MEE3NTgwMTQyQTc0NjAxNDRBNzQwMDE0NjU3Cis6MTAyNkEwMDBBNzQ4MDE0ODhGNDIwMTA4MzA1MTAwMjAxNjIwMDAwMjNGCis6MTAyNkIwMDAyNDAzMDAwOTI0MDMwMDAxMzBBQTAwMDJBNzQzMDE0QUIxCis6MTAyNkMwMDAzQzA0MDA0MTExNDAwMDAzMDAwMDE4MjEzQzA0MDE0MTdBCis6MTAyNkQwMDAyNDAzMDAwMTMwQUIwMDA0NTE2MDAwMDVBRjgzMDAwODAzCis6MTAyNkUwMDAzQzA1MDAxMDAwODUyMDI1MjQwMzAwMDFBRjgzMDAwODZECis6MTAyNkYwMDBBRjQ0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTAyNzAwMDAwMDAwMDAwMDhGOTAwMDA4MTIwMDAwMDQwMDAwMDAwMDhDCis6MTAyNzEwMDA4RjRDMTAwMDA1ODFGRkZFMDAwMDAwMDA4Rjc4MDAwMDQ0Cis6MTAyNzIwMDAyNzYyMDAwODhGOEQwMDNDQUY5ODAwMDQ5NDQ2MDAwODkzCis6MTAyNzMwMDA5NDUxMDAwQTk0NEYwMDBDMzBDRUZGRkYwMDExMjQwMDhBCis6MTAyNzQwMDAzMUU5RkZGRjExQ0QwMEEyMDA4OTIwMjUzQzAzMDgwMERDCis6MTAyNzUwMDA4QzYzMDQ0NDNDMTgwODAwOEYxODA0NDAwMEU4NTAyMUEyCis6MTAyNzYwMDAyNTVGRkZGRTAwN0Y3ODIxMDAwMDEwMjEwMUZGMzAyQjQ0Cis6MTAyNzcwMDAwMzAyODgyMTAyMjY0ODIxM0MwMTA4MDBBQzJGMDQ0NEIyCis6MTAyNzgwMDAzQzAxMDgwMEFDMjkwNDQwMjRFQjAwMDgzMTYyRkZGRjQzCis6MTAyNzkwMDAzMDQ3MDAwNzEwRTAwMDAzOEY4NTAwMTgyNDUwMDAwNzIxCis6MTAyN0EwMDAzMjAyRkZGODMxMDZGRkZGMzBDODAwMDcwMDQ1NzAyMUY0Cis6MTAyN0IwMDAzMUNEMUZGRjAzNEQ2MDIxQUY4NTAwMUNBRjhEMDAxODg4Cis6MTAyN0MwMDAyNTlCNDAwMEFGNEQwMDg0MTEwMDAwMDM4RjhGMDAyMDM3Cis6MTAyN0QwMDAyNEM0MDAwNzMwODZGRkY4OEY4NDAwMjgwMENGMjgyMTBBCis6MTAyN0UwMDAwMEE0NDgyQjE1MjAwMDAyQUY4RjAwMjQwMEE0MjgyMzRBCis6MTAyN0YwMDBBRjg1MDAyMEFGNDUwMDgwM0MxMTA4MDA4RTMxMDQzNEM1Cis6MTAyODAwMDAwMzQ1QzAyMTM0MDI4MDAwMDMwMjMwMjExMjIwMDAwNTVDCis6MTAyODEwMDBBRjg2MDAzODkzODMwMDE3MjQxOTAwMEUxMDc5MDAwRDNECis6MTAyODIwMDAyNDFGMDQzRjNDMEExMDAwQUY0QTAxNzg4RjhCMDAxNDJDCis6MTAyODMwMDAyNTY3MDAwMTBBMDAwMUREQUY4NzAwMTQwRTAwMDVBNjIwCis6MTAyODQwMDAzQzEwNDAwMDhGOEIwMDE0MjU2NzAwMDEwQTAwMDFERTU4Cis6MTAyODUwMDBBRjg3MDAxNDNDMEExMDAwQTc1RjAxNDhBRjRBMDE3ODE3Cis6MTAyODYwMDAwQTAwMDRCNDhGOEIwMDE0MjQwRTBGMDAxMUVFMDAzREZCCis6MTAyODcwMDAzMEQxMDAyMDE2MjAwMDAyMjQwMzAwMDkyNDAzMDAwMUE3Cis6MTAyODgwMDAwQTAwMDIwOEE3NDMwMTRBMEEwMDAxRkJBNzQwMDE0NkNCCis6MTAyODkwMDA5NEU1MDAwODk0RTIwMDBBOTRFQjAwMEM4Rjg2MDAzQzVCCis6MTAyOEEwMDAwMDAyRkMwMDMxNkFGRkZGMzBCOUZGRkYxMzI2MDAzNzNBCis6MTAyOEIwMDAwM0VBMjAyNTNDMDUwODAwOENBNTA0NDQzQzFGMDgwMEMxCis6MTAyOEMwMDA4RkZGMDQ0MDAwMDA1MDIxMDBBODM4MjEwMEU4MzAyQjgxCis6MTAyOEQwMDAwM0VBQzgyMTAzMjZDMDIxM0MwMTA4MDBBQzI3MDQ0NEI4Cis6MTAyOEUwMDAzQzAxMDgwMEFDMzgwNDQwMEEwMDAyNjk4RjhEMDAxOEQyCis6MTAyOEYwMDAzQzE5MDgwMDhGMzkwNDdDM0MwMzA4MDA4QzYzMDQ1NEE1Cis6MTAyOTAwMDAzQzA2MDgwMDhDQzYwNDc4M0MwRjA4MDA4REVGMDQ1MDhDCis6MTAyOTEwMDAwMzI4MzgyMTAwNjg2ODIxMDBFOEMwMkIwMEM0ODgyMTAyCis6MTAyOTIwMDAwMUE4NDAyQjAxRTQ3MDIxMDIzODU4MjEwMUM4NjAyMTIwCis6MTAyOTMwMDAzQzAxMDgwMEFDMkQwNDU0M0MwMTA4MDBBQzJDMDQ1MEIwCis6MTAyOTQwMDAzQzAxMDgwMEFDMjcwNDdDM0MwMTA4MDBBQzJCMDQ3ODU3Cis6MTAyOTUwMDAwQTAwMDI2OThGOEQwMDE4QTc0MDAxNDYwQTAwMDQxQjc3Cis6MTAyOTYwMDA4RjhGMDAxODMwRDAwMDIwMTYwMEZGQzUyNDAzMDAwRDAzCis6MTAyOTcwMDAyNDAzMDAwNTBBMDAwMjA4QTc0MzAxNEE5NzU5MDEwNEVECis6MTAyOTgwMDAyNzM4RkZGMDBBMDAwMzZCMzMwNEZGRkY4RjhDMDA0MEYxCis6MTAyOTkwMDAxNDhDRkZDODAwMDA4MDIxM0MxMTA4MDA4RTMxMDQ2Q0FCCis6MTAyOUEwMDAzQzA0MDgwMDhDODQwNDY4MDIyODcwMjEwMUM4NzgyQjNDCis6MTAyOUIwMDAwMDkwNDAyMTAxMEY2ODIxM0MwMTA4MDBBQzJFMDQ2Q0ZFCis6MTAyOUMwMDAzQzAxMDgwMEFDMkQwNDY4MEEwMDAyNjk4RjhEMDAxOEQ0Cis6MTAyOUQwMDA4Rjk5MDA0MDE0OTlGRjVEMDAwMDYwMjEzQzA1MDgwMEJDCis6MTAyOUUwMDA4Q0E1MDQ2QzNDMTAwODAwOEUxMDA0NjgwMEU4MjAyMUJGCis6MTAyOUYwMDAyNDhFRkZGRTAwQUVGODIxMDNFRTU4MkIwMjBDNTAyMTZFCis6MTAyQTAwMDAwMTRCMTgyMTNDMDEwODAwQUMzRjA0NkMzQzAxMDgwMDVDCis6MTAyQTEwMDBBQzIzMDQ2ODBBMDAwNDhCMjRFQjAwMDg4Rjg4MDAzODdDCis6MTAyQTIwMDAzQzAyRkZGRjhEMEUwMDBDMDFDMjY4MjQwMUE0NjAyNTRBCis6MTAyQTMwMDBBRDBDMDAwQzBBMDAwMzc5MzBDRkZGRkYwQTAwMDNBOTk4Cis6MTAyQTQwMDBBRTAwMDAwMDk3NEIwMTA0OTIwNDAwMDQ4RTJBMDAwQzkzCis6MTAyQTUwMDAwMTY0NDAyMTI1MUZGRkYyMDE0NzE4MjQzM0Y5RkZGRkNECis6MTAyQTYwMDAwMDc5QzAyNUFFMzgwMDBDMEEwMDAyRDQ4RTE5MDAxMDdGCis6MTAyQTcwMDAzQzAzRkZGRjhEMTEwMDEwMDIyMzI4MjQwMEE0NzgyNUI5Cis6MTAyQTgwMDBBRDBGMDAxMDBBMDAwMzc5MzBDRkZGRkY5NzQ1MDEwNDE2Cis6MTAyQTkwMDA5MjA2MDAwNDhFMkYwMDEwMDBBNjEwMjEyNDQ5RkZFRTlDCis6MTAyQUEwMDAwMUU3NjgyNDMxMkVGRkZGMDFBRTYwMjVBRTJDMDAxMDM3Cis6MTAyQUIwMDAwQTAwMDJENDhFMTkwMDEwOEUwNjAwMENBRTAwMDAwMDMxCis6MTAyQUMwMDAwMDAzQzA4MDAzMTA4ODIxMEEwMDAyQTZBRTI2MDAyMDYxCis6MTAyQUQwMDAxNDYwMDAwRDMwNTBGRkZGM0MwNEZGRkYwMDQ0NjAyNEYxCis6MTAyQUUwMDAwMTg0NjgyNjAwMEQ1ODJCMDAwQzUwMkIwMTRCMTAyNDNDCis6MTAyQUYwMDAxMDQwMDAwMjAwMDAwMDAwMDAwMDAwMEQ4Q0EzMDAwMDQ4Cis6MTAyQjAwMDAwQTAwMDIzRTAwNjQxMDI1M0ExMUZGRkYwMDExNzgyQkU1Cis6MTAyQjEwMDAwMDEwNzAyQjAxQ0YyMDI0MTA4MDAwMDIwMDAwMDAwMDY0Cis6MTAyQjIwMDAwMDAwMDAwRDhDQjgwMDAwMEEwMDAyM0UzNzAyRkZGRkQzCis6MTAyQjMwMDAzMDg0RkZGRjMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTQwCis6MTAyQjQwMDAzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTdDCis6MTAyQjUwMDAxNDgwRkZGQjAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMUZFCis6MTAyQjYwMDAxMEMwMDAwNzAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjc4Cis6MTAyQjcwMDAyNEE1MDAwNEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNEUwCis6MTAyQjgwMDAwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkRECis6MTAyQjkwMDBBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRkRGCis6MTAyQkEwMDAyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODlBCis6MTAyQkIwMDAwMDAwMDAwMDMwOEVGRkZGMzBEOEZGRkYwMDA1N0MwMEQyCis6MTAyQkMwMDAwMUY4NjAyNTM5Q0RGRkZGMDFBQzUwMjEwMTRDNTgyQjk1Cis6MTAyQkQwMDAwMTRCNDgyMTAwMDk0NDAyMzEyN0ZGRkYwMEU4MzAyMTYyCis6MTAyQkUwMDAwMDA2MjQwMjMwQzVGRkZGMDBBNDE4MjEzODYyRkZGRjUxCis6MTAyQkYwMDAwM0UwMDAwODMwNDJGRkZGM0MwQzA4MDA4RDhDMDQ4NDg5Cis6MTAyQzAwMDAyNDBCRkY4MDI3QkRGRkQwMDE4NDUwMjEwMTRCNDgyNEI1Cis6MTAyQzEwMDBBRjQ5MDAyMDNDMDgwODAwOEQwODA0ODRBRkIyMDAyMEIyCis6MTAyQzIwMDBBRkIwMDAxOEFGQkYwMDI4QUZCMzAwMjRBRkIxMDAxQzk1Cis6MTAyQzMwMDA5MzY2MDAwNDAxMDQzODIxMzBFNDAwN0YwMDlBMTAyMURCCis6MTAyQzQwMDAzQzAzMDAwODAwNDM5MDIxMzBDNTAwMjAwMzYwODAyMTMwCis6MTAyQzUwMDAzQzA4MDExMTI3N0IwMDA4MTRBMDAwMDIyNjQ2MDA3MEUyCis6MTAyQzYwMDAyNjQ2MDA2QzkyMTMwMDA0OTc1MTAxMDQ5MjBGMDAwNDUxCis6MTAyQzcwMDAzMjY3MDAwRjMyMkVGRkZGMzFFRDAwNDAwMUM3MjgyM0RECis6MTAyQzgwMDAxMUEwMDAwNTAwMDA0ODIxOTI1OTAwQkMzMzM4MDAwNDBGCis6MTAyQzkwMDAxNzAwMDA5MDAwMDAwMDAwOTI0MzAwQkMzMDdGMDAwNDQ5Cis6MTAyQ0EwMDAxM0UwMDAwRjAwMDAwMDAwMTBBMDAwMEQwMDAwMDAwMDY1Cis6MTAyQ0IwMDA5NjBFMDAwMjI0MEFGRjgwMDBBNzYwMjEyNUNERkZGRUFBCis6MTAyQ0MwMDBBNzREMTAxNjkyMEIwMDA0MDE0QjIwMjQzMDgyMDBGRjA4Cis6MTAyQ0QwMDAxMDQwMDA4NTAxMEM0MDI1M0MwRjA0MDAwMTBGNDAyNUU5Cis6MTAyQ0UwMDA4RjUzMDE3ODA2NjBGRkZFMjQwNDAwMEFBNzQ0MDE0MEM4Cis6MTAyQ0YwMDA5NjBEMDAwMjI0MDQwMDA5MzFBQzAwMDcwMDBDNTgyMzkzCis6MTAyRDAwMDAzMTZBMDAwN0E3NEEwMTQyOTYwMjAwMDIyNDQzRkZGRUVGCis6MTAyRDEwMDBBNzQzMDE0NEE3NDAwMTQ2OTc1RjAxMDRBNzVGMDE0ODBDCis6MTAyRDIwMDA4RjU5MDEwODMzMzgwMDIwNTMwMDAwMDEyNDA0MDAwMUFBCis6MTAyRDMwMDA5MjBGMDAwNDMxRUUwMDEwMTVDMDAwMDIzNDgzMDAxMDIxCis6MTAyRDQwMDAwMDgwMTgyMUE3NDMwMTRBMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTAyRDUwMDAwMDAwMDAwMDAwMDAwMDAwQUY0ODEwMDAwMDAwMDAwMDZDCis6MTAyRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjUxMTAwMDczCis6MTAyRDcwMDAwNjIxRkZGRTMxMTNGRkZGMTI2MDAwMDMwMDAwMDAwMDc4Cis6MTAyRDgwMDA4RjQ4MTAxOEFDQzgwMDAwOTYwMzAwMDYzMDdGRkZGRjg0Cis6MTAyRDkwMDAyN0Y5MDAwMjAwMTk5ODgyMDAxMzg4ODAwMjNCMzAyMTM1Cis6MTAyREEwMDA4Q0Q4MDAwMDE1MjAwMDU3MDAxODM0MDI5MjAzMDAwNDRDCis6MTAyREIwMDAyNDA1RkY4MDAwQTNGODI0MzNGMTAwRkYxMjIwMDAyQzJCCis6MTAyREMwMDAwMDAwMDAwMDkyNDcwMEJDMzBGMjAwMDIxMjQwMDAyOEQwCis6MTAyREQwMDAwMDAwMDAwMDk3NEIxMDBDMjU2MkZGRkVBNzQyMTAxNjYyCis6MTAyREUwMDAwMDAwMDAwMDNDMEEwNDAwMzU0OTAwMzBBRjQ5MTAwMEUzCis6MTAyREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTAyRTAwMDA4RjRDMTAwMDA1ODFGRkZFMDAwMDAwMDA5NzQ5MTAwQzU4Cis6MTAyRTEwMDA4RjUxMTAxQzAwQzAyMDIxMzEyN0ZGRkYyNEYyMDAzMDA5Cis6MTAyRTIwMDAwMDEyMTg4MjAwMDMyODgwMDBCQkY4MjEzMjI2RkZGRjIxCis6MTAyRTMwMDBBRkYxMDAwMDBFMDAwNTk1MDAxMTJDMDIwMDEzQzg4MEIwCis6MTAyRTQwMDAwMzNCOTgyMThFNzgwMDAwMDAwMjc0MDBBRkI4MDAxMDk4Cis6MTAyRTUwMDA4RkE4MDAxMDMxMEZGRkZGQUZBRjAwMTA4RkE0MDAxMDNDCis6MTAyRTYwMDAwMUM0NjgyNUFGQUQwMDEwOEZBNjAwMTBBRTY2MDAwMDRCCis6MTAyRTcwMDA5NzczMDAwODk3NkQwMDBBOTc2NjAwMEM4RjhBMDAzQ0Q0Cis6MTAyRTgwMDAwMDBENUMwMDMwQ0NGRkZGMzI2MkZGRkYxMDRBMDAzNkJECis6MTAyRTkwMDAwMTZDMjAyNTk2MDYwMDAyM0MxMDEwMDAyNEQzMDAwODg3Cis6MTAyRUEwMDAwRTAwMDEzOTMyNjRGRkZGOTc0QzAxMDQwRTAwMDE0NzA4Cis6MTAyRUIwMDAzMTg0RkZGRkFGNTAwMTc4OEZCRjAwMjg4RkIzMDAyNDBCCis6MTAyRUMwMDA4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwODAzCis6MTAyRUQwMDAyN0JEMDAzMDEwQTBGRjcwMDAwMDAwMDAyNEE1RkZGQ0ZCCis6MTAyRUUwMDAwQTAwMDVDRTI0MDkwMDA0OENEMTAwMDBBRjUxMTAxODRGCis6MTAyRUYwMDA4RjUzMDE3ODA2NjBGRjdBMjQwNDAwMEEwQTAwMDVFMzc0Cis6MTAyRjAwMDAwMDAwMDAwMDAwQTdDODIxOEY4ODAwMzg4RjRFMTAxQ0Q5Cis6MTAyRjEwMDAwMDE5QzA4MjAwMTg3ODgwMDFFODIwMjFBQzhFMDAwMEUyCis6MTAyRjIwMDAwMDBFMkMwMjAwQzAyMDIxMEUwMDA1OTUzMUM2RkZGRkM3Cis6MTAyRjMwMDAwMjNCMjgyMThDQUQwMDAwMDAwMjU0MDAwMDQwMzAyMUVCCis6MTAyRjQwMDBBRkFEMDAxMDhGQUMwMDEwMzE4QkZGRkZBRkFCMDAxMEE2Cis6MTAyRjUwMDA4RkEyMDAxMDAxNDI0ODI1QUZBOTAwMTA4RkE3MDAxMEQyCis6MTAyRjYwMDAwQTAwMDYxM0FDQTcwMDAwOEY4RjAwNDAxNDhGRkZDOTIyCis6MTAyRjcwMDAwMDAwMDAwMDk3NDIwMTA0OTYwQjAwMDIzQzA1MDgwMDg3Cis6MTAyRjgwMDA4Q0E1MDQ2QzMwNDlGRkZGMzE2QUZGRkYzQzExMDgwMDNCCis6MTAyRjkwMDA4RTMxMDQ2ODAxMkEzODIxMjRGMkZGRkUwMEIyNDAyMTVDCis6MTAyRkEwMDAwMDEyRkZDMzAxMTJDODJCMDIzRkMwMjEwMzE5MjAyMUM4Cis6MTAyRkIwMDAzQzAxMDgwMEFDMjgwNDZDM0MwMTA4MDBBQzI0MDQ2ODA3Cis6MTAyRkMwMDAwQTAwMDY0RDAwMDAwMDAwMDBBNDEwMkIxMDQwMDAwOTZDCis6MTAyRkQwMDAyNDAzMDAwMTAwMDUyODQwMDBBNDEwMkIwNEEwMDAwM0Q2Cis6MTAyRkUwMDAwMDAzMTg0MDU0NDBGRkZDMDAwNTI4NDAxMDYwMDAwNzEzCis6MTAyRkYwMDAwMDAwMDAwMDAwODUzMDJCMTRDMDAwMDIwMDAzMTg0MkJFCis6MTAzMDAwMDAwMDg1MjAyMzE0NjBGRkZCMDAwNTI4NDIwM0UwMDAwODMwCis6MTAzMDEwMDAwMDgwMTAyMThGODUwMDJDMjdCREZGRTgwMDA1MzAyNzk4Cis6MTAzMDIwMDAyQ0MzMDAwMTJDQTQwMDAyMDA4MzEwMjUxMDQwMDAwM0QzCis6MTAzMDMwMDBBRkJGMDAxMDI0MDUwMDdGQUY4NTAwMkMwMDA1MjgyN0I2Cis6MTAzMDQwMDAzMEE1RkZGRjBFMDAwNTc0MjQwNDI2RjU4RjgzMDAzMEExCis6MTAzMDUwMDAyNDA0MDJCRDAwNDAzMDIxMDA4MzM4MkIxMEUwMDAwOTE5Cis6MTAzMDYwMDAyNDA1MDAwMTAwMDQyMDQwMDA4MzEwMkIwNDgwMDAwMzhECis6MTAzMDcwMDAwMDA1Mjg0MDU0NDBGRkZDMDAwNDIwNDAxMEEwMDAwODM4Cis6MTAzMDgwMDAwMEMzNTAyMTAwNjQ0MDJCMTUwMDAwMDIwMDA1Mjg0MkI3Cis6MTAzMDkwMDAwMDY0MTgyMzE0QTBGRkZCMDAwNDIwNDIwMEMzNTAyMTQ5Cis6MTAzMEEwMDA4RkJGMDAxMDAwMEE0QzAyMzEyMjAwRkYyN0JEMDAxODFDCis6MEMzMEIwMDBBRjhBMDAyQzAzRTAwMDA4QUY4OTAwMzA1QworOjA0MzBCQzAwMEEwMDAwMkFEQworOjEwMzBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENzQ3ODcwMzU2MgorOjEwMzBEMDAwMkUzMDJFMzA2QTMzMDAwMDA1MDAwMDAwMDAwMDAwMEE4OAorOjEwMzBFMDAwMDAwMDAxMzYwMDAwRUE2MDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMzBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwMzExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTY5OQorOjEwMzEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwMzEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwMzE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMzE1MDAwMDAwMDAwMDAwMDAwMTM4ODAwMDAwMDAwMDAwMDA1RENGMworOjEwMzE2MDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAzMDAwMDAwMDA0QworOjEwMzE3MDAwMDAwMDAwMEQwMDAwMDAwRDNDMDIwODAwMjQ0MjNCNjBFRQorOjEwMzE4MDAwM0MwMzA4MDAyNDYzM0QxNEFDNDAwMDAwMDA0MzIwMkJBNgorOjEwMzE5MDAwMTQ4MEZGRkQyNDQyMDAwNDNDMUQwODAwMzdCRDdGRkM2NQorOjEwMzFBMDAwMDNBMEYwMjEzQzEwMDgwMDI2MTAwMEE4M0MxQzA4MDBEOQorOjEwMzFCMDAwMjc5QzNCNjAwRTAwMDJCQTAwMDAwMDAwMDAwMDAwMEREQQorOjEwMzFDMDAwOEY4MzAwMzgzQzA4ODAwMDM1MDcwMDcwOENFNTAwMDBENAorOjEwMzFEMDAwMDA4MzMwMjUzQzAyOTAwMDAwQzIyMDI1QUY4NTAwMzBERQorOjEwMzFFMDAwQUY0NDAwMjA4RjQ5MDAyMDA1MjBGRkZFM0MwMzgwMDBGMworOjEwMzFGMDAwMzQ2MjAwNzA4QzQ1MDAwMDhGODYwMDMwM0MxOTA4MDA1NgorOjEwMzIwMDAwOEYzOTAwN0MzQzBFMDgwMDhEQ0UwMDc4MDBBNjIwMjM2QworOjEwMzIxMDAwMDMyNDU4MjEwMDAwNzgyMTAxNjQ2ODJCMDFDRjYwMjEyQworOjEwMzIyMDAwMDE4RDUwMjEzQzAxMDgwMEFDMkIwMDdDM0MwMTA4MDBDMgorOjEwMzIzMDAwQUMyQTAwNzgwM0UwMDAwODAwMDAwMDAwMEEwMDAwNDEwQQorOjEwMzI0MDAwMjQwNDAwMDE4Rjg0MDAzODNDMDU4MDAwMzRBMjAwMDE3MgorOjEwMzI1MDAwMDA4MjE4MjUwM0UwMDAwOEFGNDMwMDIwMDNFMDAwMDhDNworOjEwMzI2MDAwMDAwMDEwMjEzMDg0RkZGRjMwQTVGRkZGMTA4MDAwMDcxMQorOjEwMzI3MDAwMDAwMDE4MjEzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDJBQQorOjEwMzI4MDAwMDA2NTE4MjExNDgwRkZGQjAwMDUyODQwMDNFMDAwMDhCQQorOjEwMzI5MDAwMDA2MDEwMjExMEMwMDAwNzAwMDAwMDAwOENBMjAwMDA5OAorOjEwMzJBMDAwMjRDNkZGRkYyNEE1MDAwNEFDODIwMDAwMTRDMEZGRkI2RAorOjEwMzJCMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDhCRgorOjEwMzJDMDAwMjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwMzJEMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDQyQQorOjEwMzJFMDAwMDNFMDAwMDgwMDAwMDAwMDMwOEFGRkZGOTNBODAwMTNFRAorOjEwMzJGMDAwQTc0QTAxNDQ5NzQ5MEUxNjMwQzYwMEZGM0MwMjEwMDA1MQorOjEwMzMwMDAwQTc0OTAxNDZBRjQ1MDE0OEEzNDYwMTUyQTc0ODAxNUFDMworOjEwMzMxMDAwQUY0NzAxNjA4RkE0MDAxODhGQTMwMDE0QTc0NDAxNTg4MQorOjEwMzMyMDAwQUY0MzAxNTQwM0UwMDAwOEFGNDIwMTc4MDNFMDAwMDgxNgorOjEwMzMzMDAwMDAwMDAwMDAzQzAzODAwMDM0NjIwMDcwOEM0OTAwMDBGMworOjEwMzM0MDAwOEY4ODAwMDAyNDg0MDAwNzI3QkRGRkY4MzA4NEZGRjgzMQorOjEwMzM1MDAwQUY4OTAwMzA5NzREMDA4QTMxQUNGRkZGQUZBQzAwMDA2MQorOjEwMzM2MDAwOEZBQjAwMDAwMTY4NTAyMzI1NDdGRkZGMzBFNjFGRkZBOQorOjEwMzM3MDAwMDBDNDI4MkIxNEEwRkZGNzNDMEM4MDAwMzU4QjAwNzA5NAorOjEwMzM4MDAwOEQ2QTAwMDAzQzA3MDgwMDhDRTcwMDg0M0MwNjA4MDBCQQorOjEwMzM5MDAwOENDNjAwODAwMDA4MTA4MjAxNDkxODIzMDAwMjc4ODA0MgorOjEwMzNBMDAwMDBFMzcwMjEwMDAwMjAyMTAxQzNDODJCMDBDNEMwMjEwQworOjEwMzNCMDAwMDFGQTQwMjEwMzE5NDgyMTI1MDI0MDAwMjdCRDAwMDhEOQorOjEwMzNDMDAwM0MwMTA4MDBBQzJFMDA4NDNDMDEwODAwQUMyOTAwODBDMAorOjEwMzNEMDAwMDNFMDAwMDgwMDAwMDAwMDhGODIwMDAwMjQ4NjAwMDc0MAorOjEwMzNFMDAwMzBDNUZGRjgwMEEyMTgyMTMwNjQxRkZGMDNFMDAwMDg3OQorOjEwMzNGMDAwQUY4NDAwMDA4Rjg3MDAzODhGOEEwMDQwMjdCREZGQjg1OAorOjEwMzQwMDAwOEY4NjAwNDRBRkI2MDA0MEFGQkYwMDQ0QUZCNTAwM0M2QworOjEwMzQxMDAwQUZCNDAwMzhBRkIzMDAzNEFGQjIwMDMwQUZCMTAwMkM1RQorOjEwMzQyMDAwQUZCMDAwMjg4RjQ1MDEwNDhENDkwMEFDQUY0NzAwODA0NAorOjEwMzQzMDAwOENDODAwMjAwMEE5MzgyMzAwMDBCMDIxQUY0ODBFMTAyRQorOjEwMzQ0MDAwOEY0NDBFMTAwMDAwNDgyMUFGNDQwRTE0OENDMjAwMjQ5QgorOjEwMzQ1MDAwQUY0MjBFMTg4RjQzMEUxOEFGNDMwRTFDMTBFMDAxMjUyQgorOjEwMzQ2MDAwMkQyMzAwMDE5MzZCMDAwODExNjAwMEQ0MDAwMDAwMDBDMAorOjEwMzQ3MDAwOTc2RTAwMTAzMUNERkZGRjAwRUQ2MDJCMTU4MDAwQ0Y1RgorOjEwMzQ4MDAwMDAwMDAwMDA5NzcwMDAxMDMyMEZGRkZGQUY0RjBFMDBEQQorOjEwMzQ5MDAwOEY1MjAwMDAzMjUxMDAwODEyMjBGRkZEMDAwMDAwMDA5MgorOjEwMzRBMDAwOTc1NDBFMDg4RjQ2MEUwNDMyODVGRkZGMzBCMzAwMDE5QgorOjEwMzRCMDAwMTI2MDAxMzIwMDAwMDAwMDAwMDAwMDBEMzBCOEEwNDA5MgorOjEwMzRDMDAwMjQxNTAwNDAxMzE1MDBDMDMwQTlBMDAwMTEyMDAxMkRDMworOjEwMzREMDAwMDAwMDAwMDA5MzdGMDAwODEzRTAwMDA4MDAwMDAwMDBENworOjEwMzRFMDAwOTc2MzAwMTAzMDZCRkZGRjAwQ0I0MDJCMTEwMDAwMDNFRgorOjEwMzRGMDAwMzBBQzAwNDAxMTgwMDEyMzAwMDAwMDAwQTc4NTAwM0M5MworOjEwMzUwMDAwQUY4NjAwMzQ5MzY2MDAwODAwRTAyODIxQUZBNzAwMjBCMgorOjEwMzUxMDAwMTRDMDAxMjQyN0IzMDAyMEFGNjAwMDBDOTc4MjAwM0M0OAorOjEwMzUyMDAwMzA0NzQwMDAxNEUwMDAwMjI0MDMwMDE2MjQwMzAwMEU3QworOjEwMzUzMDAwMjQxOTQwMDdBMzYzMDAwQUFGNzkwMDE0OTM4QTAwM0U2MAorOjEwMzU0MDAwOEY3NDAwMTQzMTU4MDAwNzAwMThBQTQwMDI5NTkwMjU4NgorOjEwMzU1MDAwQUY3MjAwMTQ5Nzg0MDAzQzhGNzAwMDE0MzA5MTAwMTBGQgorOjEwMzU2MDAwMDIxMTc4MjVBRjZGMDAxNDk3OEUwMDNDMzFDRDAwMDgxMgorOjEwMzU3MDAwMTFBMDAxNDcwMDAwMjgyMThGNjcwMDE0M0MwMjEwMDBCMQorOjEwMzU4MDAwM0MwQzgxMDAwMEUyMjgyNUFGNjUwMDE0OTc0NjBFMEEyNgorOjEwMzU5MDAwMjQwODAwMEUzNDA1RkZGQzMwQzNGRkZGMDA2QzU4MjVFMworOjEwMzVBMDAwQUY2QjAwMDRBMzY4MDAwMjkzN0YwMDBBMjdFOTAwMDRDMAorOjEwMzVCMDAwQTM2OTAwMEE5Nzg2MDAzQzkzNjMwMDBBMzBDQzFGMDA4MQorOjEwMzVDMDAwMDAwQzU5ODMwMTYzNDAyMTI1MUYwMDI4QTM3RjAwMDlCNworOjEwMzVEMDAwOTc0OTBFMENBNzY5MDAxMDkzNzkwMDA5MjcyQTAwMDI2OQorOjEwMzVFMDAwMzE1ODAwMDcwMDE4QTgyMzMyQjEwMDA3QTM3MTAwMEI1RgorOjEwMzVGMDAwOTM3NDAwMDk5NzY0MDAxMDhGOTEwMDM0OTc4RjAwM0NGQQorOjEwMzYwMDAwMzI5MjAwRkYwMjQ0ODAyMTAyMDU3MDIxMzFFRDAwNDAxQQorOjEwMzYxMDAwMTFBMDAwMDUzMUM0RkZGRjAwOTEyODJCM0MxMjgwMDA0RgorOjEwMzYyMDAwMTBBMDAwMTQwMDAwQTAyMTAyMjQzODJCMTRFMDAxMUI3QworOjEwMzYzMDAwOEZBNTAwMjA4RjREMEUxNEFGNEQwRTEwOEY0MjBFMUMyMworOjEwMzY0MDAwQUY0MjBFMThBRjQ0MEUwMDhGNEYwMDAwMzFFRTAwMDg1RAorOjEwMzY1MDAwMTFDMEZGRkQwMDAwMDAwMDk3NTQwRTA4MDA4MDg4MjE3MworOjEwMzY2MDAwMDAwMDkwMjFBNzk0MDAzQzhGNTAwRTA0MjQxNDAwMDEwOAorOjEwMzY3MDAwQUY5MDAwMzQ5NzY0MDAxMDMwOTVGRkZGOEU2ODAwMDAxMworOjEwMzY4MDAwMDExMUY4MjMxN0UwMDAwOUFFN0YwMDAwOEY2NTAwMTREOAorOjEwMzY5MDAwOEY4QjAwNDQzNEE2MDA0MEFGNjYwMDE0OEY0QzBFMTA5MAorOjEwMzZBMDAwQUQ2QzAwMjA4RjQzMEUxOEFENjMwMDI0OTM2NzAwMDhCMworOjEwMzZCMDAwMTRFMDAwRDIwMDAwMDAwMDBFMDAwMDlFMjQwNDAwMTA2MAorOjEwMzZDMDAwOEY4OTAwNDgzQzA4MzIwMDAwNDAyODIxMzEyNjAwRkY0NQorOjEwMzZEMDAwMDAwNkZDMDAwM0U4NTAyNTI1MzkwMDAxQUY5OTAwNDg5OQorOjEwMzZFMDAwQUM0QTAwMDA5Mzc4MDAwOTkzNzAwMDBBMzMwNDAwRkY4RAorOjEwMzZGMDAwMDAwNDc0MDAzMjBGMDBGRjAxQ0Y2ODI1QUM0RDAwMDRCOAorOjEwMzcwMDAwOEY4MjAwNDgwNjQwMDBFQUFDQTIwMDA4QUNBMDAwMEM4MgorOjEwMzcxMDAwOTc4MzAwM0MzMDZCMDAwODE1NjAwMDAyMjYyODAwMDZFNQorOjEwMzcyMDAwMjYyODAwMDI5NzRFMEUxNDhGNDUwRTFDOEY2NzAwMDQ0QQorOjEwMzczMDAwOTM2RDAwMDIzMUM0RkZGRjMxQTIwMEZGQUZBMjAwMTA2MQorOjEwMzc0MDAwOEY2QzAwMTRBRkE4MDAxODBFMDAwMDhCQUZBQzAwMTRGMworOjEwMzc1MDAwMjQwNDAwMTAwRTAwMDBDNzAwMDAwMDAwOEU3MjAwMDA1QworOjEwMzc2MDAwMTY0MDAwMDUwMDAwMDAwMDhGNjQwMDE0MjQwNUZGQkYxMAorOjEwMzc3MDAwMDA4NTk4MjRBRjczMDAxNDhGNzkwMDBDMDMzNTM4MjEyRAorOjEwMzc4MDAwQUY2NzAwMEM5Mzc1MDAwODE2QTAwMDA4MDAwMDAwMDA0OQorOjEwMzc5MDAwMTI4MDAwMDYwMDAwMDAwMDhGN0YwMDE0M0MwQkVGRkYzQQorOjEwMzdBMDAwMzU2OEZGRkUwM0U4NDgyNEFGNjkwMDE0QTM3NDAwMDhERAorOjEwMzdCMDAwOEZBNTAwMjAwQTAwMDI0NjAyMjAyMDIxQUY0NzBFMDBGQworOjEwMzdDMDAwMEEwMDAwRjUwMDAwMDAwMDhGNTkwMTc4MDcyMEZGRkU3NQorOjEwMzdEMDAwMjQxRjA4MDA4Rjg0MDAwMEFGNUYwMTc4OTc0QjAwOEE5OAorOjEwMzdFMDAwMzE2QUZGRkYwMTQ0NDgyMzI1MjhGRkZGMzEwMjFGRkZGNAorOjEwMzdGMDAwMkM0MzAwMDgxNDYwRkZGOTAwMDAwMDAwOEY4RTAwNDg4MQorOjEwMzgwMDAwOEY4RDAwMzgwMEMwNDgyMTAzNDQyMDIxMjVDNjAwMDFDNworOjEwMzgxMDAwMjQwQzBGMDBBRjg2MDA0ODAwRTkzODIzMjQ4NjQwMDBCRQorOjEwMzgyMDAwMzFDQTAwRkYxMUFDMDAwNTI0MDgwMDAxOTM5MTAwM0U0RAorOjEwMzgzMDAwMzIzMDAwMDcwMDEwN0E0MDM1RTgwMDAxMDAwQUFDMDA4MQorOjEwMzg0MDAwM0MxODAxMDAwMkI4QTAyNUFDOTQ0MDAwOEY5MzAwNDhCQQorOjEwMzg1MDAwMzBCMjAwMzYzMEE0MDAwOEFDRDMwMDA0MTA4MDAwOTdDQQorOjEwMzg2MDAwMDExMjMwMjU5NzRFMEUwQThGOEQwMDAwM0MwMjgxMDAxOAorOjEwMzg3MDAwMzFDQ0ZGRkYyNUFCMDAwODAxODI0MDI1M0MwMzEwMDAzRQorOjEwMzg4MDAwMzE2NTFGRkYyNTM5MDAwNjI0MUYwMDBFQUY0ODAxNjA3NworOjEwMzg5MDAwMDBDMzMwMjVBNzVGMDE1QUFGODUwMDAwQTc1OTAxNTgyMgorOjEwMzhBMDAwMTRFMDAwMEE4RjkzMDAzODI0MTIwRjAwNTI3MjAwMDJCNQorOjEwMzhCMDAwMjQxNjAwMDEzNEM2MDA0MDhGNTgwRTEwOEY5NDAwNDQyNworOjEwMzhDMDAwQUU5ODAwMjA4RjU1MEUxOEFFOTUwMDI0OEY0NTBFMTQyQgorOjEwMzhEMDAwQUY0NTAxNDQ4RjU5MEUxQ0FGNTkwMTQ4QTM0QTAxNTIwQworOjEwMzhFMDAwM0MwQTEwMDBBRjQ2MDE1NEFGNEEwMTc4MTRFMEZFRERGNworOjEwMzhGMDAwMkQyMzAwMDEwMDc2QTAyNTEyODAwMDE3OEZCRjAwNDQwMQorOjEwMzkwMDAwOEY4NDAwMzgyNDE2MEYwMDEwOTYwMDg0MDAwMDAwMDBGOQorOjEwMzkxMDAwOEY0NTAxNzgwNEEwRkZGRTI0MTUwRjAwMTA5NTAwNkU1RQorOjEwMzkyMDAwMDAwMDAwMDA4RjQ3MEUxNDI0MDIwMjQwM0MxRjEwMDBDQworOjEwMzkzMDAwQUY0NzAxNDQ4RjQ0MEUxQ0FGNDQwMTQ4QTM0MDAxNTJERAorOjEwMzk0MDAwQTc0MDAxNUFBRjQwMDE2MEE3NDAwMTU4QUY0MjAxNTQ1RgorOjEwMzk1MDAwQUY1RjAxNzg4RkJGMDA0NDhGQjYwMDQwOEZCNTAwM0M0OQorOjEwMzk2MDAwOEZCNDAwMzg4RkIzMDAzNDhGQjIwMDMwOEZCMTAwMkM4OQorOjEwMzk3MDAwOEZCMDAwMjgwM0UwMDAwODI3QkQwMDQ4MTRDMEZFRDAyNworOjEwMzk4MDAwMzBCOEEwNDA4RjQyMEUxNDhGODQwMDQ0MDAwMDQ4MjFCQworOjEwMzk5MDAwQUM4MjAwMjA4RjUxMEUxQ0FDOTEwMDI0MEEwMDAyMEU1NAorOjEwMzlBMDAwMkQyMzAwMDE4RjkxMDAzNDk3OEEwMDNDM0MxMjgwMDA0NworOjEwMzlCMDAwMDIyMEE4MjEzMTU4MDA0MDE3MDBGRjMwMDAwMEEwMjE0QworOjEwMzlDMDAwOTc2OTAwMTA4RjkyMDAzNDMxMzlGRkZGMTMzMjAwMzVCMAorOjEwMzlEMDAwMDAwMDIwMjEwMDgwNDgyMTE0ODBGRUEwMDBBMDM4MjE5MgorOjEwMzlFMDAwOEY0MjBFMTQ4Rjg0MDA0NEFDODIwMDIwOEY1MTBFMUMzNQorOjEwMzlGMDAwQUM5MTAwMjQwQTAwMDIwRTJEMjMwMDAxOTM2QTAwMDlGNQorOjEwM0EwMDAwOTM3ODAwMEIzMTUwMDBGRjMzMEYwMEZGMDIwRjcwMjEzRAorOjEwM0ExMDAwMjVDMjAwMEEzMDUwRkZGRjBFMDAwMDlFMDIwMDIwMjE0OAorOjEwM0EyMDAwOEY4NjAwNDgzQzFGNDEwMDI0Q0QwMDAxQUY4RDAwNDgyNworOjEwM0EzMDAwOTM2QzAwMDkzMEM2MDBGRjAwMDY0NDAwMzE4MzAwRkY4QworOjEwM0E0MDAwMjQ2QjAwMDIwMTBCNDgyNTAxM0ZDODI1QUM1OTAwMDAzQQorOjEwM0E1MDAwOEY2NzAwMEM5NzQ0MEUxNDAwRjIyODI1QUM0NTAwMDQzMworOjEwM0E2MDAwOEY0NTBFMUM4RjY3MDAwNDkzNkEwMDAyMzA4NEZGRkZBRAorOjEwM0E3MDAwMzE1ODAwRkZBRkI4MDAxMDhGNkYwMDE0QUZCMTAwMThCRAorOjEwM0E4MDAwMEUwMDAwOEJBRkFGMDAxNDBBMDAwMUE2MDIwMDIwMjEzNworOjEwM0E5MDAwQUY2MDAwMDQwQTAwMDEzRUEzNjAwMDAyMEEwMDAyNDY3MworOjEwM0FBMDAwMDAwMDIwMjEwMDAwOTAyMTBBMDAwMTcwMjQxNDAwMDE3MAorOjEwM0FCMDAwM0MxMjgwMDAwQTAwMDE5NUFDQjIwMDBDOEY5MTAwMDAwRQorOjEwM0FDMDAwMjUyNDAwMDJBNzQ0MDE1ODI2MzAwMDA4MzIwRjFGRkZBQQorOjEwM0FEMDAwMEEwMDAxRjlBRjhGMDAwMEFGNDAwMTRDMTEyMDAwMkMwQgorOjEwM0FFMDAwMDAwMDAwMDA4RjU5MEUxMEFGNTkwMTQ0OEY0MzBFMTg4QgorOjEwM0FGMDAwMjQwMjAwNDAzQzFGMTAwMEFGNDMwMTQ4QTM0MDAxNTI4NAorOjEwM0IwMDAwQTc0MDAxNUFBRjQwMDE2MEE3NDAwMTU4QUY0MjAxNTQ5RAorOjEwM0IxMDAwQUY1RjAxNzgwQTAwMDIyNzhGQkYwMDQ0MTEyMDAwMDYyMgorOjEwM0IyMDAwMDAwMDAwMDA5NzQ2MEUwODMwQ0MwMDQwMTU4MDAwMDJDRgorOjEwM0IzMDAwMDAwMDAwMDAwMDAwMDAwRDhGNEQwMTc4MDVBMEZGRkU4MQorOjEwM0I0MDAwMDAwMDAwMDA5NzUzMEUxMDNDMTIwNTAwMjQwRTIwMDBDOAorOjEwM0I1MDAwMzI2QUZGRkYwMTUyQzAyNUFGNTgwMTRDOEY0RjBFMTQzRgorOjEwM0I2MDAwM0MwMjEwMDBBRjRGMDE0NDhGNTAwRTFDQUY1MDAxNDg3MworOjEwM0I3MDAwQTM0MDAxNTI4Rjg0MDAzOEE3NDAwMTVBQUY0MDAxNjAzMgorOjEwM0I4MDAwQTc0MDAxNThBRjRFMDE1NDBBMDAwMjE1QUY0MjAxNzgxOAorOjEwM0I5MDAwOEY0OTBFMTRBRjQ5MDE0NDhGNDMwRTFDMEEwMDAyOEU1OAorOjEwM0JBMDAwMjQwMjAwNDAzQzBFMjBGRjI3QkRGRkUwM0MxQTgwMDBBRAorOjEwM0JCMDAwM0MwRjgwMDgzNUNERkZGREFGQkYwMDFDQUZCMjAwMTgzMQorOjEwM0JDMDAwQUZCMTAwMTRBRkIwMDAxMEFGOEYwMDQwQUY0RDBFMDA4QQorOjEwM0JEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwM0JFMDAwMDAwMDAwMDAzQzBDMDBGRjM1OEJGRkZEQUY0QjBFMDBDQQorOjEwM0JGMDAwM0MwNjYwMDQ4Q0M5NTAwMDI0MEFGRjdGM0MxMTYwMDAyMQorOjEwM0MwMDAwMDEyQTQwMjQzNTA3MzgwQ0FDQzc1MDAwOEUyNDA0MzhGNAorOjEwM0MxMDAwMjQwNTAwMDlBRjQ1MDAwODMwODNGRkZGMzg2MjJGNzE4QgorOjEwM0MyMDAwMjQ1MEMwQjNBRjgwMDA0ODBFMDAwMDY4QUY4MDAwMDA5MQorOjEwM0MzMDAwNTIwMDAwMDFBRTIwNDQyQzBFMDAwNDM1M0MxMTgwMDBERgorOjEwM0M0MDAwMEUwMDBFQTgzNjMwMDA3MDhGOEEwMDQwM0MxMjA4MDAyQgorOjEwM0M1MDAwMjY1MjNCQzgwMjAwODgyMThFMDgwMDAwOEY1RjAwMDBCQQorOjEwM0M2MDAwM0JGOTAwMDEzMzM4MDAwMTEzMDAwMDE3QUY4ODAwMzAyMgorOjEwM0M3MDAwMDIyMDQ4MjE4RDI3MDAwMDNDMEYwODAwOERFRjAwNkNDQQorOjEwM0M4MDAwM0MwQzA4MDA4RDhDMDA2ODAwRThDMDIzMDFGODI4MjE1NgorOjEwM0M5MDAwMDAwMDY4MjEwMEI4MzAyQjAxOEQ1ODIxMDE2NjQwMjFCOQorOjEwM0NBMDAwM0MwMTA4MDBBQzI1MDA2QzNDMDEwODAwQUMyODAwNjgxMQorOjEwM0NCMDAwOEY0NDAwMDAzODgzMDAwMTMwNjIwMDAxMTQ0MEZGRURBMgorOjEwM0NDMDAwMDBFMDQwMjFBRjg3MDAzMDhFMEMwMDAwM0MwNTA4MDA2QQorOjEwM0NEMDAwOENBNTAwNkMzQzA0MDgwMDhDODQwMDY4MDE4ODMwMjNBQgorOjEwM0NFMDAwMDBBNjM4MjEwMDAwMTAyMTAwRTY0MDJCMDA4MjE4MjE5OAorOjEwM0NGMDAwMDA2OEY4MjEzQzAxMDgwMEFDMjcwMDZDM0MwMTA4MDA3QQorOjEwM0QwMDAwQUMzRjAwNjg4RjQ5MDEwMDI1NTkwMDg4QUY5OTAwNDRGNQorOjEwM0QxMDAwQUY4OTAwMzhBRjQ5MDAyMDhFMDcwMDAwQUY4NzAwMzAyMAorOjEwM0QyMDAwOEY0RDAxNzgwNUEwRkZGRTAwMDAwMDAwOEUwNjAwMDAwOAorOjEwM0QzMDAwM0MwQjA4MDA4RDZCMDA3NDNDMDQwODAwOEM4NDAwNzAwMAorOjEwM0Q0MDAwMDBDNzI4MjMwMTY1RjgyMTAwMDAxMDIxMDNFNTQwMkI1RQorOjEwM0Q1MDAwMDA4MjM4MjEwMEU4QzgyMTI0MDkwODAwM0MwMTA4MDAzRAorOjEwM0Q2MDAwQUMzRjAwNzQzQzAxMDgwMEFDMzkwMDcwQUY0OTAxNzhFOQorOjEwM0Q3MDAwOTM1ODAxMDhBMzk4MDAzRTkzOEYwMDNFMzFFRTAwMDE1NgorOjEwM0Q4MDAwMTVDMDAwMTU4RjgzMDAzODI0MEUwRDAwMTA2RTAwMTkyOQorOjEwM0Q5MDAwMjQwRjBGMDAxMDZGMDAxRDAwMDAwMDAwOTE1OTAwMDA1QgorOjEwM0RBMDAwMjQxODAwNTAzMzI5MDBGRjExMzgwMDA0M0MxRjQwMDA0NAorOjEwM0RCMDAwQUY1RjAxMzgwQTAwMDJFNzAwMDAwMDAwMEUwMDA4RUVDNQorOjEwM0RDMDAwMDAwMDAwMDA4RjhBMDA0MDNDMUY0MDAwQUY1RjAxMzhCOAorOjEwM0REMDAwMEEwMDAyRTcwMDAwMDAwMDkzOEQwMDNFMzFBQzAwMDZBRgorOjEwM0RFMDAwMDAwQzUxMDAwRTAwMDBDRTAxNTJEODIxMEEwMDAzNDNGRQorOjEwM0RGMDAwOEY4QTAwNDAzQzFCMDgwMDI3N0IzQzQ4MEUwMDAwQ0UwOQorOjEwM0UwMDAwMDAwMDAwMDAwQTAwMDM0MzhGOEEwMDQwM0MxQjA4MDBBQQorOjEwM0UxMDAwMjc3QjNDNjgwRTAwMDBDRTAwMDAwMDAwMEEwMDAzNDMzMAorOjEwM0UyMDAwOEY4QTAwNDA5MEFBMDAwMThGQUIwMDEwOENBQzAwMTA2QworOjEwM0UzMDAwM0MwMzAwRkY4RDY4MDAwNEFENkMwMDIwOENBRDAwMTRDNQorOjEwM0U0MDAwMDBFMDYwMjEzNDYyRkZGRkFENkQwMDI0OENBNzAwMThGNAorOjEwM0U1MDAwM0MwOUZGMDAwMTA5QzAyNEFENjcwMDI4OENBRTAwMUM5RQorOjEwM0U2MDAwMDE4MkM4MjQwMzE5NzgyNUFENkYwMDA0QUQ2RTAwMkNDMworOjEwM0U3MDAwOENBRDAwMDgzMTRBMDBGRkFENkQwMDFDOTRBOTAwMDIxMgorOjEwM0U4MDAwMzEyOEZGRkZBRDY4MDAxMDkwQTcwMDAwQTU2MDAwMDI3OAorOjEwM0U5MDAwQTE2MDAwMDRBMTY3MDAwMDkwQTMwMDAyMzA2MjAwRkY0RgorOjEwM0VBMDAwMDAwMjE5ODIxMDYwMDAwNTI0MDUwMDAxMTA2NTAwMEU1MworOjEwM0VCMDAwMDAwMDAwMDAwM0UwMDAwOEExNkEwMDAxOENEODAwMjg3RgorOjEwM0VDMDAwMzU0QTAwODBBRDc4MDAxODhDQ0YwMDE0QUQ2RjAwMTQxNworOjEwM0VEMDAwOENDRTAwMzBBRDZFMDAwODhDQzQwMDJDQTE2QTAwMDFBRAorOjEwM0VFMDAwMDNFMDAwMDhBRDY0MDAwQzhDQ0QwMDFDQUQ2RDAwMTgyMworOjEwM0VGMDAwOENDOTAwMTRBRDY5MDAxNDhDQzgwMDI0QUQ2ODAwMDg5QQorOjEwM0YwMDAwOENDNzAwMjBBRDY3MDAwQzhDQzIwMDE0OEM4MzAwNjQ0OQorOjEwM0YxMDAwMDA0M0M4MkIxMzIwMDAwNzAwMDAwMDAwOENDMjAwMTRDRgorOjEwM0YyMDAwMTQ0Q0ZGRTQwMDAwMDAwMDM1NEEwMDgwMDNFMDAwMDg2NAorOjEwM0YzMDAwQTE2QTAwMDE4QzgyMDA2NDBBMDAwMzk5MDAwMDAwMDA1RAorOjEwM0Y0MDAwOTBBQTAwMDAyN0JERkZGODhGQTkwMDFDQTNBQTAwMDBCQgorOjEwM0Y1MDAwOEZBRTAwMDAzQzBGRkY4MDhGQTgwMDE4MzVFMkZGRkZGNgorOjEwM0Y2MDAwOENDRDAwMkMwMUMyNjAyNEFGQUMwMDAwQTEyMDAwMDQ2NQorOjEwM0Y3MDAwMDBFMDYwMjFBN0EwMDAwMjhGQjgwMDAwOEQyNzAwMDQ5OAorOjEwM0Y4MDAwMDE4ODE4MjEwMEEwNTgyMTAwQzA1MDIxMDA2RDI4MjY2QQorOjEwM0Y5MDAwM0MwNkZGN0YzQzBGMDBGRjJDQUQwMDAxMzVFRUZGRkYxQworOjEwM0ZBMDAwMzREOUZGRkYzQzAyRkYwMDAzMTkzMDI0MDAwRDFEQzA2RgorOjEwM0ZCMDAwMDEwRUM4MjQwMEUyQzAyNDAwQzM3MDI1MDMxOTc4MjUyRgorOjEwM0ZDMDAwQUQyRTAwMDBBRDJGMDAwNDhENDUwMDI0QUZBRTAwMDBFMworOjEwM0ZEMDAwQUQyNTAwMDg4RDREMDAyMDI0MDVGRkZGQUQyRDAwMEMwMAorOjEwM0ZFMDAwOTU2ODAwMDIzMTA3RkZGRkFEMjcwMDEwOTE2NjAwMThBOQorOjEwM0ZGMDAwMzBDMjAwRkYwMDAyMTlDMjUwNjAwMDAxOEQ0NTAwMzQzQworOjEwNDAwMDAwQUQyNTAwMTQ4RDY3MDAwODI3QkQwMDA4QUQyNzAwMUNGMgorOjEwNDAxMDAwOEM4QjAwQ0NBRDJDMDAyOEFEMjAwMDJDQUQyQjAwMjRDNworOjEwNDAyMDAwQUQyMDAwMTgwM0UwMDAwOEFEMjAwMDIwMjdCREZGRTAxMAorOjEwNDAzMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUM5QQorOjEwNDA0MDAwOTA5ODAwMDAwMEMwODgyMTNDMEQwMEZGMzMwRjAwN0ZENgorOjEwNDA1MDAwQTBDRjAwMDA5MDhFMDAwMTM1QUNGRkZGM0MwQUZGMDBBRQorOjEwNDA2MDAwQTBDRTAwMDE5NEE2MDAxRUEyMjAwMDA0OENBQjAwMTQ3OAorOjEwNDA3MDAwOEUyOTAwMDQwMEEwODAyMTAxNkMyODI0MDEyQTQwMjRGQworOjEwNDA4MDAwMDA4MDkwMjEwMTA1MjAyNUE2MjYwMDAyQUUyNDAwMDQxMAorOjEwNDA5MDAwMjYwNTAwMjAyNjI0MDAwODBFMDAwMDc2MjQwNjAwMDJEMworOjEwNDBBMDAwOTI0NzAwMDAyNjA1MDAyODI2MjQwMDE0MDAwNzFFMDA2MQorOjEwNDBCMDAwMDAwMzE2MDMyNDA2MDAwNDA0NDAwMDAzMjQwM0ZGRkY0QQorOjEwNDBDMDAwOTY1OTAwMDIzMzIzRkZGRjBFMDAwMDc2QUUyMzAwMTA0NgorOjEwNDBEMDAwMjYyNDAwMjQ4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ1QgorOjEwNDBFMDAwOEZCMDAwMTAyNDA1MDAwMzAwMDAzMDIxMEEwMDAwODA3QQorOjEwNDBGMDAwMjdCRDAwMjAyN0JERkZEOEFGQjEwMDFDQUZCMDAwMTgwRQorOjEwNDEwMDAwQUZCRjAwMjA5MEE4MDAwMDI0MDIwMDAxOEZCMDAwM0M0NworOjEwNDExMDAwMzEwMzAwM0YwMDgwODgyMTEwNjIwMDE0OEZBQTAwMzgwQworOjEwNDEyMDAwMjQwQjAwMDU1MDZCMDAxNkFGQUEwMDEwMDBBMDIwMjE0MAorOjEwNDEzMDAwMDBDMDI4MjEwRTAwMDNEQzAyMDAzMDIxOTIyNDAwQkNDNAorOjEwNDE0MDAwMzA4MzAwMDIxMDYwMDAwMzI2MDYwMDMwQUNDMDAwMDA3RgorOjEwNDE1MDAwMjRDNjAwMDQ4RkJGMDAyMDhGQjEwMDFDOEZCMDAwMTg1MAorOjEwNDE2MDAwMDBDMDEwMjEwM0UwMDAwODI3QkQwMDI4MDE0MDM4MjFDRAorOjEwNDE3MDAwMEUwMDAzNUFBRkIwMDAxMDBBMDAwNDIwMDAwMDAwMDAzNworOjEwNDE4MDAwMEUwMDAzQTFBRkIwMDAxNDBBMDAwNDIwMDAwMDAwMDBEQworOjEwNDE5MDAwM0MwMjAwMEEwMzQyMTgyMTNDMDQwODAwMjQ4NDNDQUM4MQorOjEwNDFBMDAwMjQwNTAwMUEwMDAwMzAyMTBBMDAwMDgwQUY4MzAwNTQ2QgorOjEwNDFCMDAwM0MwMzgwMDAzNDYyMDA3MDhDNDgwMDAwMDBBMDU4MjE0RAorOjEwNDFDMDAwMDBDMDQ4MjEzMDhBMDBGRkFGODgwMDMwOEY0NDAxNzg1QQorOjEwNDFEMDAwMDQ4MEZGRkUzQzBDODAwMDM1ODYwMDcwOENDNTAwMDAxQQorOjEwNDFFMDAwM0MwMzA4MDA4QzYzMDA3NDNDMTgwODAwOEYxODAwNzBCMgorOjEwNDFGMDAwMDBBODIwMjMwMDY0NjgyMTAwMDBDODIxMDFBNDc4MkJCNgorOjEwNDIwMDAwMDMxOTcwMjEwMUNGNjAyMTNDMDEwODAwQUMyRDAwNzQxRQorOjEwNDIxMDAwM0MwMTA4MDBBQzJDMDA3MDhGNDgwRTE0QUY0ODAxNDREQworOjEwNDIyMDAwQUY0NzAxNENBMzRBMDE1MkE3NEIwMTU4OTM0NjAxMDhERQorOjEwNDIzMDAwMzBDNTAwMDg1NEEwMDAwMTM1MjkxMDAwOTM0QjA5MDAzNworOjEwNDI0MDAwMjQwNzAwNTAzMTZBMDBGRjExNDcwMDA3MDAwMDAwMDBGQQorOjEwNDI1MDAwOEY0NTBFMUNBRjQ1MDE0OEFGNDkwMTU0M0MwOTEwMDA4MQorOjEwNDI2MDAwMDNFMDAwMDhBRjQ5MDE3ODkzNEQwMTA4MzFBODAwMDgyOAorOjEwNDI3MDAwMTEwMDAwMTAwMDAwMDAwMDkzNEYwMTA4MzFFRTAwMTAwMworOjEwNDI4MDAwNTFDMDAwMDEzNTI5MDAwODNDMDQwODAwOTA4NDNEMTAwRAorOjEwNDI5MDAwQTM0NDAxNTA4RjQzMDlBNEFGNDMwMTQ4OEY0MjA5QTBCMgorOjEwNDJBMDAwQUY0MjAxNDRBRjQ5MDE1NDNDMDkxMDAwMDNFMDAwMDg0QgorOjEwNDJCMDAwQUY0OTAxNzgzQzE5MDgwMDhGMzkzQ0NDMzMzODAwMDhFRAorOjEwNDJDMDAwNTcwMEZGRjEzNTI5MDAwODBBMDAwNDczMDAwMDAwMDBDMAorOjEwNDJEMDAwMjQwNzAwNDBBRjQ3MDgxNEFGNDAwODEwOEY0MjA5NDQzQworOjEwNDJFMDAwOEY0MzA5NTA4RjQ0MDk1NDhGNDUwOTVDOEY0NjA5NEMxMAorOjEwNDJGMDAwQUY4MjAwNjRBRjgzMDA1MEFGODQwMDRDQUY4NTAwNUM5OAorOjEwNDMwMDAwMDNFMDAwMDhBRjg2MDA2MDkzNDYwMTA5MzBDNTAwN0ZENgorOjEwNDMxMDAwMDAwNTE4QzAwMDA1MjE0MDAwODMxMDIxMDNFMDAwMDhCQgorOjEwNDMyMDAwMjQ0MjAwODgzQzBBMDgwMDkxNEEzQ0QxM0MwOTA4MDAxQworOjEwNDMzMDAwOTUyOTNDQ0EzQzA1MTEwMDAwMEEzQzAwMjUyODAwMDJEMgorOjEwNDM0MDAwMDBFODMwMjUwMEM1MTgyNTI0ODIwMDA4QUM4MzAwMDA1MQorOjEwNDM1MDAwMDNFMDAwMDhBQzgwMDAwNDhGNEEwMDJDOTc0RTA5MDg0NworOjEwNDM2MDAwM0MwRjAwMEUwMzRGMzgyMTMxQ0RGRkZGMDAwRDQxQzAzRgorOjEwNDM3MDAwQUY0ODAwMkM5NzQzMDkwODk0RUMwMDFBMDA4MDQwMjFCNAorOjEwNDM4MDAwMjQwMjAwMDEzMThCRkZGRkFDOEIwMDAwOENFOTAwMUM4NAorOjEwNDM5MDAwMDBBMDU4MjEwMEMwNjAyMUFDODkwMDA0OENFNDAwMjBGQQorOjEwNDNBMDAwQUQwNDAwMDg5MEUzMDAxOTMwNjMwMDAzMTA2MjAwNDA4MAorOjEwNDNCMDAwMDAwMDAwMDAyODY1MDAwMjE0QTAwMDczMjQwNjAwMDIxQgorOjEwNDNDMDAwMTA2NjAwNEUwMDAwMDAwMDI0MTgwMDAzMTA3ODAwNTcwQgorOjEwNDNEMDAwMDAwMDAwMDAzQzA5MDgwMDk1MjkzQ0MwOTM0NTA5MzRDMQorOjEwNDNFMDAwOTM0NjA5MjEzQzBFMDgwMDk1Q0UzQ0M2MzBBMjAwRkY0MgorOjEwNDNGMDAwMDAwMkM4ODI5NEU1MDAyQTMwQzQwMEZGOTc4NzAwNTg2NQorOjEwNDQwMDAwMDAxOUM2MDAwMDA0MUMwMDMxMkZGRkZGMDMwMzEwMjUxNAorOjEwNDQxMDAwMDFDRjY4MjEwMDREQzgyNTAwQTcyMDIxM0MwNjQwMDA5RgorOjEwNDQyMDAwMDMyNkMwMjUwMDA0NEMwMEFEMDkwMDA0QUQxODAwMDBBRgorOjEwNDQzMDAwOTM0RjA5MjAzQzAzMDAwNjI1MDkwMDE0MDAwRjc2MDA2NQorOjEwNDQ0MDAwMDFDMzY4MjVBRDBEMDAwODhGNDIwOTJDMjRFNTAwMDE0OQorOjEwNDQ1MDAwMzBBNjdGRkZBRDAyMDAwQzhGNTkwOTMwMjUwMjAwMjhERAorOjEwNDQ2MDAwQTc4NjAwNThBRDE5MDAxMDhGNDQwOTM4QUQwNDAwMTQxOAorOjEwNDQ3MDAwQUQyQjAwMDQ4RjU4MDk0MEFEMzgwMDA4OTM0RjA5MzcyMQorOjEwNDQ4MDAwM0MwRDA4MDA5MUFEM0NEMEFEMjAwMDEwMzFFRTAwRkY5NgorOjEwNDQ5MDAwMDFDQzE4MjEwMDAzNjcwMDAwMEQ0NDAwMDE4ODU4MjU1NQorOjEwNDRBMDAwMzU2N0ZGRkZBRDI3MDAwQzAzRTAwMDA4QUY0QTAwMkM4MgorOjEwNDRCMDAwM0MwOTA4MDA5NTI5M0NDMDNDMDUwODAwOTRBNTNDQ0E2RAorOjEwNDRDMDAwM0MwRjA4MDA5NUVGM0NCQzk0RTQwMDI0MzEyNkZGRkYyQworOjEwNDREMDAwMDBBNjcwMjEwMUNGNjgyMzAwMDQxQzAwMjVBMkZGRjI3MgorOjEwNDRFMDAwMDA2MkM4MjUyNDE4MDgwMEFEMTkwMDBDQUQxODAwMTQ4RQorOjEwNDRGMDAwQUQwMDAwMTAwQTAwMDRDODI1MDgwMDE4OTRFNjAwMjQ0NgorOjEwNDUwMDAwOTRFNTAwMjgzQzA5MDgwMDk1MjkzQ0MwMDAwNjdDMDA4MQorOjEwNDUxMDAwMDAwNTc0MDAzNUVEODEwMDM1QzQwODAwQUQwRDAwMENCOAorOjEwNDUyMDAwQUQwNDAwMTAwQTAwMDRDODI1MDgwMDE0M0MwOTA4MDA2NgorOjEwNDUzMDAwOTUyOTNDQzAzQzAyMDgwMDk0NDIzQ0NBM0MwNjA4MDA1NQorOjEwNDU0MDAwOTRDNjNDQkM5NEU0MDAyNDMxMjVGRkZGOTRGODAwMjg3NQorOjEwNDU1MDAwMDA0NUM4MjEwMzI2NzgyMzAwMTgxQzAwMDAwNDZDMDBDNQorOjEwNDU2MDAwMjVFRUZGRUUwMDZFQzgyNTM1QTI4MTAwMjQxODA4MDA1NAorOjEwNDU3MDAwQUQwMjAwMENBRDE5MDAxMEFEMTgwMDE4QUQwMDAwMTQwQworOjEwNDU4MDAwMEEwMDA0QzgyNTA4MDAxQzE0NjBGRjkyMDAwMDAwMDAwNworOjEwNDU5MDAwOTRFMzAwMjQzQzA5MDgwMDk1MjkzQ0MwMDAwMzE0MDA2MgorOjEwNDVBMDAwMzQ1OTA4MDBBRDE5MDAwQzBBMDAwNEM4MjUwODAwMTA5MQorOjEwNDVCMDAwMDNFMDAwMDgyNDAyMDFGNDI3QkRGRkU4QUZCMDAwMTBCQgorOjEwNDVDMDAwQUZCRjAwMTQwRTAwMDA2MDAwODA4MDIxMjQwNTAwNDA3MQorOjEwNDVEMDAwQUY0NTA4MTQ4RjgzMDA1MDhGODQwMDRDOEY4NTAwNUM5QQorOjEwNDVFMDAwMDA3MDE4MjEwMDY0MTAyMzE4NDAwMDA0QUY4MzAwNTBBRAorOjEwNDVGMDAwQUY2MzAwNTQ4RjY2MDA1NEFGODYwMDRDMTIwMDAwMEM2RAorOjEwNDYwMDAwMDAwMDAwMDA4RjQ0MDA3NDkzNjgwMDgxMzQwOUZBMDBCMAorOjEwNDYxMDAwMkQwNzAwMDcxMEUwMDAwNTAwODkxMDIxOTM2QzAwODEzMAorOjEwNDYyMDAwMjQwQjAxRjQwMThCNTAwNDAxNDQxMDIxQUY2MjAwMENGMworOjEwNDYzMDAwOEY0RTA5NUMwMUM1NjgyMzE5QTAwMDA0OEZCRjAwMTRDOAorOjEwNDY0MDAwOEY0RjA5NUNBRjhGMDA1QzhGQkYwMDE0OEZCMDAwMTBEQworOjEwNDY1MDAwMEEwMDAwNjIyN0JEMDAxODhGODQwMDY0OEY4MzAwNTAxOQorOjEwNDY2MDAwOEY4MjAwNENBRjY0MDA0NEFGNjMwMDUwMDNFMDAwMDg0OQorOjEwNDY3MDAwQUY2MjAwNTQzQzAzODAwMDM0NjIwMDcwOEM0MzAwMDA0MQorOjEwNDY4MDAwMjdCREZGRjgzMDg3MDBGRjMwQTkwMEZGMzBDODAwRkZDQQorOjEwNDY5MDAwQUY4MzAwMzA4RjQ0MDE3ODA0ODBGRkZFM0MwMjgwMDAyRAorOjEwNDZBMDAwMzQ1OTAwNzA4RjM4MDAwMEEzQTcwMDAzM0MwNzA4MDBBRQorOjEwNDZCMDAwOENFNzAwNzQ4RkFDMDAwMDNDMDYwODAwOENDNjAwNzBDQworOjEwNDZDMDAwMDMwMzc4MjMzQzBFN0ZGRjAwRUZDODIxMzVDREZGRkZBOQorOjEwNDZEMDAwMDAwMDUwMjEwMThEMjgyNDAwQ0ExODIxMDAwODQ3QzA3RAorOjEwNDZFMDAwMDMyRjIwMkIwMEE4MTAyNTAwNjRDMDIxQUZBMjAwMDBEQQorOjEwNDZGMDAwM0MwMTA4MDBBQzM5MDA3NDNDMDEwODAwQUMzODAwNzA4MworOjEwNDcwMDAwOTM0RjAxMEFBM0EwMDAwMjNDMEU4MEZGQTNBRjAwMDE1QgorOjEwNDcxMDAwOEZBQzAwMDAzMTJCMDA3RjM1Q0RGRkZGMDE4RDQ4MjQ4OQorOjEwNDcyMDAwMDAwQjU2MDAwMTJBNDAyNTI0MDczMDAwMjQwNkZGODA5NAorOjEwNDczMDAwM0MwNTEwMDAyN0JEMDAwOEFGNDgwMTRDQUY0NzAxNTRBRAorOjEwNDc0MDAwQTc0MDAxNThBMzQ2MDE1MjAzRTAwMDA4QUY0NTAxNzg5NQorOjEwNDc1MDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwOEY2NTAwNzQzNQorOjEwNDc2MDAwM0MwNjgwMDAzMDkwMDBGRjAwQTYyMDI1MEUwMDAwNjA2RgorOjEwNDc3MDAwQUY2NDAwNzQ5MzYzMDAwNTM0NjIwMDA4MEUwMDAwNjJBOQorOjEwNDc4MDAwQTM2MjAwMDUwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTAyQgorOjEwNDc5MDAwMjQwNTAwMDUyNDA2MDAwMTBBMDAwNTZFMjdCRDAwMTg0NworOjEwNDdBMDAwMjdCREZGRTAzQzAzODAwMEFGQjAwMDEwQUZCRjAwMTg5MgorOjEwNDdCMDAwQUZCMTAwMTQzNDYyMDA3MDhDNDcwMDAwMzA5MDAwRkZFRAorOjEwNDdDMDAwMzBBODAwRkZBRjg3MDAzMDhGNDQwMTc4MDQ4MEZGRkVERgorOjEwNDdEMDAwM0MxODgwMDAzNzExMDA3MDhFMkYwMDAwM0MwRDA4MDAzRgorOjEwNDdFMDAwOERBRDAwNzQzQzBBMDgwMDhENEEwMDcwMDFFNzcwMjMwQgorOjEwNDdGMDAwMDFBRTI4MjEwMDAwNTgyMTAwQUUzMDJCMDE0QjQ4MjE4QQorOjEwNDgwMDAwMDEyNjM4MjEzQzAxMDgwMEFDMjUwMDc0MDAwMDg4MjFGNQorOjEwNDgxMDAwM0MwMTA4MDBBQzI3MDA3MDExMDAwMDBGMDAwMDAwMDBGMAorOjEwNDgyMDAwOEY2MjAwNzQyNjE5RkZGRjMyMDgwMDdGMDAwMkZFMDIyQgorOjEwNDgzMDAwMzNFNTAwN0YxNTAwMDAwNjMzMjIwMEZGMjQwN0ZGODBDOAorOjEwNDg0MDAwMDIwNzIwMjYyNEEzRkZGRjAwODM4MDI1MzIwMjAwRkZGOQorOjEwNDg1MDAwMDA0MDgwMjEyNDExMTAwODBFMDAwMDYwMDAwMDAwMDBCQworOjEwNDg2MDAwOEY0OTA4MTgzMTI1MDAwNDE0QTBGRkZEMzIxODAwN0Y3RAorOjEwNDg3MDAwMDAxODc4QzAwMDE4NzE0MDAxQ0Y2ODIxMjVBQzAwODg2RAorOjEwNDg4MDAwQUY0QzA4MTgyNzRBMDk4MDhENEIwMDIwQUY0QjAxNDREQworOjEwNDg5MDAwOEQ0NjAwMjRBRjQ2MDE0OEEzNTAwMTUwMEUwMDAwNjIyRgorOjEwNDhBMDAwQTc0MDAxNTgwMjIwMTAyMThGQkYwMDE4OEZCMTAwMTRCQgorOjEwNDhCMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMjdCREZGRThFRgorOjEwNDhDMDAwMzA4NDAwRkZBRkJGMDAxMDBFMDAwNUI5MzBBNTAwRkYxNworOjEwNDhEMDAwOEY4MzAwNTA4RkJGMDAxMDM0NDUwMDQwMjQwNEZGOTBBOAorOjEwNDhFMDAwM0MwMjEwMDAyN0JEMDAxOEFGNDMwMTRDQTM0NDAxNTIwNQorOjEwNDhGMDAwQUY0NTAxNTQwM0UwMDAwOEFGNDIwMTc4OTM0MzA5M0VGRAorOjEwNDkwMDAwMzA2MjAwMDgxMDQwMDAwRDNDMDkwMTAxMzUyODA4MEFGQQorOjEwNDkxMDAwQUM4ODAwMDA4RjQ3MDA3NEFDODcwMDA0M0MwNjA4MDA5OAorOjEwNDkyMDAwOTBDNjNDRDAzMEM1MDAxMDUwQTAwMDA2QUM4MDAwMDhGNgorOjEwNDkzMDAwOEY2QTAwNjBBQzhBMDAwODI0ODQwMDBDMDNFMDAwMDg0MQorOjEwNDk0MDAwMDA4MDEwMjEwQTAwMDYyMDI0ODQwMDBDMjdCREZGRTgwNworOjEwNDk1MDAwQUZCRjAwMTRBRkIwMDAxMDkzNDYwOTNGMDBBMDUwMjEzNAorOjEwNDk2MDAwMDAwNTI4ODAwMDg1MzgyMzMwQzIwMEZGMjQwMzAwMDY5QworOjEwNDk3MDAwM0MwOTA4MDA5NTI5M0NDNjI0RThGRkQ4MjQwNTAwMDQxQQorOjEwNDk4MDAwMTA0MzAwMzcyNDA2MDAwMjk3NTAwOTNDM0MwRjAyMDRGNAorOjEwNDk5MDAwMDAwNjM0MDAzMjBFRkZGRjAxQ0Y2ODI1QUM4RDAwMDAwOQorOjEwNDlBMDAwOTM0QzA5M0UzMThCMDAyMDExNjAwMDA4MDAwMDAwMDA4QworOjEwNDlCMDAwOTM0MzA5MzYzQzAyMDEwMzM0NUYwMzAwMzA3OTAwRkY2MgorOjEwNDlDMDAwMDMzRkMwMjUyNDA1MDAwOEFDOTgwMDA0OTM0MzA5MzQzNAorOjEwNDlEMDAwOTM1OTA5MjEwMDA1Rjg4MjMwNjIwMEZGMDAwMkMwODI2RAorOjEwNDlFMDAwMzMyRjAwRkYwMDE4NkUwMDAwMEY3NDAwMDFBRTYwMjUyOQorOjEwNDlGMDAwMDE4OTIwMjUzQzA5NDAwMDAwODk4MDI1QUNGMEZGRDhDMgorOjEwNEEwMDAwOTM0MzA5Mzc4RjRGMDk0ODhGNTgwOTQwMzA2MjAwRkZBMAorOjEwNEExMDAwMDA0QUM4MjEwMzNGNzAyMTAxRjg2MDIzMDAwRTZGMDA5NworOjEwNEEyMDAwMDFBNjUwMjUzMTg1RkZGRjAwMUY1ODgwMDE0NTQ4MjUwQworOjEwNEEzMDAwMDE2ODM4MjFBRDA5MDAyMDBFMDAwMDYwMjRGMDAwMjgzNAorOjEwNEE0MDAwMjQwNDAwMDQwRTAwMDA2MkEzNjQwMDNGMDIwMDEwMjE1MQorOjEwNEE1MDAwOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMThCRQorOjEwNEE2MDAwMEEwMDA2MzMyNDA2MDAxMjI3QkRGRkQwMjQwOTAwMTBENworOjEwNEE3MDAwQUZCNjAwMjhBRkI1MDAyNEFGQjQwMDIwQUZCMTAwMTQyQQorOjEwNEE4MDAwQUZCMDAwMTAzQzAxMDgwMEEwMjkzQ0QwQUZCRjAwMkMwMworOjEwNEE5MDAwQUZCMzAwMUNBRkIyMDAxODk3NDgwOTA4MzA5NTAwRkY2QgorOjEwNEFBMDAwM0MwMjAwMEUzMTA3RkZGRjAwMDczMUMwQUY0NjAwMkM2QgorOjEwNEFCMDAwOTc0NDA5MDg5MzQ0MDEwQjMwQjQwMEZGMDM0MjgwMjE1RQorOjEwNEFDMDAwMzA4MzAwMzAwMDAwQjAyMTEwNjAwMTA3MDAwMDg4MjExMQorOjEwNEFEMDAwMjQwQzAwMDQzQzAxMDgwMEEwMkMzQ0QwOTM0QjA5M0U2MAorOjEwNEFFMDAwMDAwQjU2MDAwMDBBMkUwMzA0QTAwMTRCMDAwMDAwMDAzQQorOjEwNEFGMDAwQUY0MDAwNDg5MzRGMDEwQjMxRUUwMDIwMTFDMDAwMDY3QgorOjEwNEIwMDAwMDAwMDAwMDA5MzU4MDkzRTAwMTg5RTAwMDAxMzk2MDMxMQorOjEwNEIxMDAwMDY0MDAxNkIwMDAwMDAwMDkzNDQwMTBCMzA4MzAwNDAwRAorOjEwNEIyMDAwMTA2MDAwMDM4RjkzMDA1MDhGODIwMDUwMjQ1M0ZGRkZDQQorOjEwNEIzMDAwOTM0NzA5M0UzMEU2MDAwODE0QzAwMDAyMjQxMjAwMDMyNworOjEwNEI0MDAwMDAwMDkwMjE5NjE5MDAyQzkzNTgwOTM0OTM0RjA5Mzc4RgorOjEwNEI1MDAwQTc5OTAwNTgzMzBDMDBGRjMxRUUwMEZGMDI0RTY4MjE4OAorOjEwNEI2MDAwMDAwRDU4ODAwMTZDNTAyMTAxNTE0MDIxM0MwMTA4MDA4QQorOjEwNEI3MDAwQTQyODNDQzY5MjA1MDAxODMwQTkwMEZGMDEwOTE4MjE5RAorOjEwNEI4MDAwM0MwMTA4MDBBNDIzM0NDODkyMTEwMDE4MTYyMDAwMDMyMQorOjEwNEI5MDAwMjQ2NzAwMEEwMDAwMDAwRDI0NjcwMDBBMzBGMEZGRkZDMAorOjEwNEJBMDAwM0MwMTA4MDBBNDIzM0NDQTNDMDEwODAwQTQyMDNDQzBFRQorOjEwNEJCMDAwM0MwMTA4MDBBNDIwM0NCQzBFMDAwMDlFMDIwMDIwMjEwNQorOjEwNEJDMDAwMEUwMDA0OUEwMDQwMjAyMThGNEIwMDJDOTc0QTA5MDhDMAorOjEwNEJEMDAwM0MwQzAwMEUwMzRDMzgyMTMxNDVGRkZGMDAwNTQ5QzA1NQorOjEwNEJFMDAwQUY0OTAwMkM5NzQzMDkwODk0RjEwMDFBMDA0MDQwMjE3NgorOjEwNEJGMDAwMjQxRjAwMDEzMjI2RkZGRkFDNDYwMDAwOENFMjAwMUM5RgorOjEwNEMwMDAwQUQwMjAwMDQ4Q0U0MDAyMEFEMDQwMDA4OTBFMzAwMTkxQworOjEwNEMxMDAwMzA2MzAwMDMxMDdGMDBENjI4NkQwMDAyMTVBMDAxMUMzMAorOjEwNEMyMDAwMjQwRTAwMDIxMDZFMDEwRTI0MEYwMDAzMTA2RjAwRTMyQgorOjEwNEMzMDAwMDAwMDAwMDAzQzA5MDgwMDk1MjkzQ0MwOTM0RTA5MzQ0RgorOjEwNEM0MDAwOTM1MTA5MjEzQzBBMDgwMDk1NEEzQ0M2MzFDRDAwRkYyQQorOjEwNEM1MDAwOTRGOTAwMkEwMDBEMTg4Mjk3ODcwMDU4MzIyQzAwRkYyMworOjEwNEM2MDAwMDAwMzJFMDAwMDBDMjQwMDMxMjZGRkZGMzE0MkZGRkYxRAorOjEwNEM3MDAwMDBBNEY4MjUwMDQ2NDgyMTAzRTk3ODI1MDMyNzcwMjE4MAorOjEwNEM4MDAwM0MxODQwMDAwMUY4NjgyNTAwMEU4QzAwQUQwRDAwMDBCNgorOjEwNEM5MDAwQUQxMTAwMDQ5MzRDMDkyMDNDMDMwMDA2MjUxMTAwMTRCQgorOjEwNENBMDAwMDAwQzJFMDAwMEEzMTAyNUFEMDIwMDA4OEY0OTA5MkMyRQorOjEwNENCMDAwMjRFNDAwMDEzMDlGN0ZGRkFEMDkwMDBDOEY0NjA5MzBDRQorOjEwNENDMDAwMjUwOTAwMjhBNzlGMDA1OEFEMDYwMDEwOEY1OTA5MzgwNAorOjEwNENEMDAwMDEyMDMwMjFBRDE5MDAxNEFFMzMwMDA0OEY1ODA5NDA3MworOjEwNENFMDAwQUUzODAwMDg5MzRGMDkzNzNDMEMwODAwOTE4QzNDRDAzQgorOjEwNENGMDAwQUUyMDAwMTAzMUVFMDBGRjAxRDI2ODIxMDAwRDJGMDAyMAorOjEwNEQwMDAwMDAwQzFDMDAwMEEzMTAyNTM0NDdGRkZGQUUyNzAwMEM0OQorOjEwNEQxMDAwQUY0QjAwMkM5MzRCMDkzRTMxNzMwMDA4MTI2MDAwMEQxRAorOjEwNEQyMDAwM0MwRjAxMDEzNUU3MDgwQUFEMDcwMDI4OEY0QjAwNzRERQorOjEwNEQzMDAwQUQyQjAwMDQzQzEzMDgwMDkyNzMzQ0QwMzI2ODAwMTA4NQorOjEwNEQ0MDAwNTEwMDAwMDNBRDIwMDAwODhGNzgwMDYwQUQzODAwMDhFNgorOjEwNEQ1MDAwMjUyNjAwMEMxMkMwMDAzODAwMDAwMDAwOTM1RjA5M0ZCOAorOjEwNEQ2MDAwMjQxNjAwMDYyNDA3MDAwNDMzRjkwMEZGMTMzNjAwRDI4RQorOjEwNEQ3MDAwMjQwODAwMDI5NzQzMDkzQzNDMEMwMjA0MzA2NEZGRkYwNgorOjEwNEQ4MDAwMDA4QzI4MjVBQ0M1MDAwMDkzNDIwOTNFMzA0OTAwMjAyNAorOjEwNEQ5MDAwMTEyMDAwMDgwMDAwMDAwMDkzNEIwOTM2M0MxMzAxMDM2QQorOjEwNERBMDAwMzY2RTAzMDAzMTZEMDBGRjAxQUU4ODI1QUNEMTAwMDRFMgorOjEwNERCMDAwMjQwNzAwMDg5MzQ5MDkzNDkzNTkwOTIxMzE0QkZGRkYxNworOjEwNERDMDAwMzEzRjAwRkYwMDFGQjA4MjMzMzgwMEZGMDAxNjU2MDA0RAorOjEwNEREMDAwMDAxODdDMDAwMTRGOTgyNTAwMTIyODgwMDI2QjY4MjU3RQorOjEwNERFMDAwM0MwRTQwMDAwMEM1NTAyMzAxQUU4ODI1QUQ1MUZGRDhEMAorOjEwNERGMDAwOTM0MzA5Mzc4RjVGMDk0ODhGNDkwOTQwMzA2QzAwRkZBMgorOjEwNEUwMDAwMDE5MjEwMjEwMDA3MjA4MjAwNDRDODIxMDNFOTc4MjM4MQorOjEwNEUxMDAwMDAxOUM3MDAwMDA4QjQwMDAzMTY0MDI1MzFFN0ZGRkY2MgorOjEwNEUyMDAwMDEwNzMwMjUwRTAwMDA2MEFENDZGRkY4MjQxMjAwMDQ5MworOjEwNEUzMDAwMEUwMDAwNjJBMzcyMDAzRjBFMDAwMEM3MDIwMDIwMjE5NgorOjEwNEU0MDAwM0MxMjA4MDA5MjUyM0NEMDMyNTAwMDAzMTIwMDAwMEY3NgorOjEwNEU1MDAwMDJBMDIwMjE4RjgyMDA1MDI0NDcwMDAxQUY4NzAwNTAxQworOjEwNEU2MDAwQUY2NzAwNTA4RjY4MDA1NDAxMDczMDIzMThDMDAwMDI1QworOjEwNEU3MDAwMDBFMDIwMjE4RjY0MDA1NEFGNjQwMDU0OEY0QzAwNzQxNAorOjEwNEU4MDAwMjU4NDAxRjRBRjY0MDAwQzAyQTAyMDIxMDI4MDI4MjFCNworOjEwNEU5MDAwQTc2MDAwNjgwRTAwMDVCOTNDMTQxMDAwOEY4RDAwNTAwQgorOjEwNEVBMDAwMzQ1NTAwMDZBRjREMDE0QzhGOTEwMDQ4OEZCRjAwMkM0OAorOjEwNEVCMDAwOEZCNjAwMjgyNjIzMDAwMUFGODMwMDQ4OEZCMzAwMUM2MworOjEwNEVDMDAwQTM1MTAxNTI4RkIyMDAxOEFGNTUwMTU0OEZCMTAwMTQ5NQorOjEwNEVEMDAwQUY1NDAxNzg4RkI1MDAyNDhGQjQwMDIwOEZCMDAwMTAzQworOjEwNEVFMDAwMDNFMDAwMDgyN0JEMDAzMDkzNTgwOTNFMDAxODlFMDBEQgorOjEwNEVGMDAwMDAxMzk2MDMwNjQyMDA1MTI0MTEwMDAyOTM0NDA5MjMzMworOjEwNEYwMDAwMzA4MzAwMDIxMDYwRkVGQjhGODYwMDYwOEY4MjAwNTBBRAorOjEwNEYxMDAwMTRDMkZFRjgwMDAwMDAwMDBFMDAwMDYwMDAwMDAwMDA1NworOjEwNEYyMDAwOTM2OTAwM0YyNDA3MDAxNjMxMjgwMEZGMTEwNzAwMEM4OQorOjEwNEYzMDAwMjQwNTAwMDgzQzBDMDgwMDkxOEMzQ0QwMzU4QjAwMDEwNgorOjEwNEY0MDAwM0MwMTA4MDBBMDJCM0NEMDkzNkEwMDNGMzE0MzAwRkY5NgorOjEwNEY1MDAwMTA2NTAwNjUyNDBEMDAwQTEwNkQwMDVFMjQwMjAwMEMyRgorOjEwNEY2MDAwMEUwMDAwNjIwMDAwMDAwMDBBMDAwNjhFMDAwMDAwMDAzMworOjEwNEY3MDAwM0MwOTA4MDA5NTI5M0NDMDNDMDQwODAwOTQ4NDNDQ0FDNAorOjEwNEY4MDAwM0MxRjA4MDA5N0ZGM0NCQzk0RjgwMDI0MzEyM0ZGRkYyRQorOjEwNEY5MDAwMDA4M0M4MjEwMzNGNzgyMzAwMTg2QzAwMjVFRUZGRjI0MAorOjEwNEZBMDAwMDFBRTYwMjUyNDBBMDgwMEFEMEMwMDBDQUQwQTAwMTQwNworOjEwNEZCMDAwQUQwMDAwMTAwQTAwMDZFMDI1MDgwMDE4M0MwOTA4MDBCMgorOjEwNEZDMDAwOTUyOTNDQzAzQzFGMDgwMDk3RkYzQ0NBM0MxOTA4MDBDQgorOjEwNEZEMDAwOTczOTNDQkM5NEVGMDAyNDMxMjRGRkZGOTRFRTAwMjg2NQorOjEwNEZFMDAwMDNFNEMwMjEwMzE5NjgyMzAwMEYyQzAwMDAwRTU0MDBCNQorOjEwNEZGMDAwMjVBQ0ZGRUUwMTRDODgyNTM0QTI4MTAwMjQwNjA4MDA3MAorOjEwNTAwMDAwQUQwMjAwMENBRDExMDAxMEFEMDYwMDE4QUQwMDAwMTQ4QgorOjEwNTAxMDAwMEEwMDA2RTAyNTA4MDAxQzhGNkUwMDg0OEY0RDA5NDBCMQorOjEwNTAyMDAwMTFBMEZFQjNBRjhFMDA1MDI0MEYwMDE0M0MwMTA4MDAwNQorOjEwNTAzMDAwQTAyRjNDRDAwQTAwMDY4RDAwMDAwMDAwM0MwMTA4MDBCMworOjEwNTA0MDAwQTAzMTNDRDA5MzVGMDkzRTI0MTYwMDAxMzNGOTAwMjBDMworOjEwNTA1MDAwMTcyMEZFQTgyNDExMDAwODBBMDAwNjhFMjQxMTAwMDQ1RgorOjEwNTA2MDAwOTRFNTAwMjQ5NEYxMDAyODNDMDkwODAwOTUyOTNDQzBFRgorOjEwNTA3MDAwMDAwNTE0MDAwMDExMzQwMDM0NDQ4MTAwMzRDMzA4MDBEQQorOjEwNTA4MDAwQUQwNDAwMENBRDAzMDAxMDBBMDAwNkUwMjUwODAwMTQ3MgorOjEwNTA5MDAwMTQ2MEZFRTgwMDAwMDAwMDk0RkYwMDI0M0MwOTA4MDBCMgorOjEwNTBBMDAwOTUyOTNDQzAwMDFGQ0MwMDM3MzgwODAwQUQxODAwMEMxMworOjEwNTBCMDAwMEEwMDA2RTAyNTA4MDAxMDBBMDAwNzJFMjQwODAwMTI0NgorOjEwNTBDMDAwOEY3RjAwNENBRjdGMDA1NDhGNzkwMDU0MEEwMDA2OTcwMQorOjEwNTBEMDAwQUY3OTAwNTBBMzYyMDAzRjBFMDAwMDYyMDAwMDAwMDBBNAorOjEwNTBFMDAwMEEwMDA2OEUwMDAwMDAwMDI0MDIwMDE0MEEwMDA4MDdDRgorOjEwNTBGMDAwQTM2MjAwM0YyN0JERkZFODMwODQwMEZGQUZCRjAwMTA3MAorOjEwNTEwMDAwMEUwMDA1QjkzMEE1MDBGRjkzNzgwMDdFOTM3OTAwN0ZFQgorOjEwNTExMDAwOTM2RTAwODA5MzY4MDA3QTMzMkYwMEZGMDAxODY2MDBCQQorOjEwNTEyMDAwMDAwRjZDMDAzMUNCMDBGRjAxOEQ0ODI1MDAwQjUyMDBCMQorOjEwNTEzMDAwOEZCRjAwMTAwMTJBMzgyNTMxMDYwMEZGMzQ0NDcwMDA2QgorOjEwNTE0MDAwMDBFNjI4MjUyNDAyRkY4MTNDMDMxMDAwMjdCRDAwMTgzQgorOjEwNTE1MDAwQUY0NTAxNENBRjQ0MDE1NEEzNDIwMTUyMDNFMDAwMDhBMworOjEwNTE2MDAwQUY0MzAxNzgyN0JERkZEOEFGQjIwMDE4QUZCMTAwMTQyQworOjEwNTE3MDAwQUZCMDAwMTBBRkJGMDAyMEFGQjMwMDFDOTM0MjAxMDlENQorOjEwNTE4MDAwMzA4NjAwRkYzMEIwMDBGRjAwMDYxOEMyMzIwNDAwMDI3MworOjEwNTE5MDAwMzA3MTAwMDExNDgwMDAwNTMwNTIwMEZGOTM2NzAwMDU1NAorOjEwNTFBMDAwMzBFNTAwMDgxMEEwMDAwRDMwQzgwMDEwMDI0MDIwMjE5QQorOjEwNTFCMDAwMEUwMDA1QTUwMjIwMjgyMTI0MDQwMDAxOEZCRjAwMjAzNQorOjEwNTFDMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA4NQorOjEwNTFEMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDI4MTUwMDAwMzJFMAorOjEwNTFFMDAwMDAwMDAwMDA5MzQzMDEwOTAwMDAyODIxMzA2MjAwN0Y4NQorOjEwNTFGMDAwMDAwMjIwQzAwMDAyRjk0MDAzRTQ5ODIxMjY3OTAwODhDQgorOjEwNTIwMDAwMDMzQjk4MjE4RTc4MDAyNDhFNkYwMDA4MTMwRjAwNDYxMAorOjEwNTIxMDAwMDAwMDAwMDA4RjY0MDA4NDI0MTgwMDAyMDAwNEZEODI1NgorOjEwNTIyMDAwMzNGOTAwMDMxMzM4MDA3QzAwMDAwMDAwOTM2NjAwODMwQworOjEwNTIzMDAwOTM0QTAxMDk1MTQ2MDAwNDMyMDUwMDdDMTBBMDAwNjAyOQorOjEwNTI0MDAwMDAwMDAwMDAzMjA1MDA3QzE0QTAwMDUzMDI0MDIwMjEyMQorOjEwNTI1MDAwMTYyMDAwMDYzMjA0MDAwMThFN0YwMDI0OEY1OTAxMDRCRAorOjEwNTI2MDAwMTdGOUZGRDYwMDAwMjAyMTMyMDQwMDAxMTA4MDAwMEE0NworOjEwNTI3MDAwMDI0MDIwMjE4RjQyMDk0MDhGOTMwMDY0MTA1MzAwMDZBMgorOjEwNTI4MDAwMDAwMDAwMDAwRTAwMDY2QjAyMjAyODIxOEY0MzA5NDAxOQorOjEwNTI5MDAwQUY2MzAwNDQwMjQwMjAyMTBFMDAwNjAwMDIyMDI4MjFCNgorOjEwNTJBMDAwMEEwMDA4NDAyNDA0MDAwMTNDMDkwODAwOEQyOTAwNjQxQworOjEwNTJCMDAwMjUyNjAwMDEzQzAxMDgwMEFDMjYwMDY0MTYwMDAwMTJGRgorOjEwNTJDMDAwMDAwMDAwMDA4RjZEMDA4NDNDMEUwMEMwMDFBRTYwMjQyMQorOjEwNTJEMDAwMTU4MDAwMDUwMjQwMjAyMTBFMDAwODBFMDIyMDI4MjEyMgorOjEwNTJFMDAwMEEwMDA4NDAyNDA0MDAwMTI0MDUwMDA0MEUwMDA1NkU5NQorOjEwNTJGMDAwMjQwNjAwMDEwMjQwMjAyMTBFMDAwODBFMDIyMDI4MjE3MQorOjEwNTMwMDAwMEEwMDA4NDAyNDA0MDAwMTBFMDAwMDQxMjQwNDAwMDFBQQorOjEwNTMxMDAwOTM2QjAwN0QwMjBCNTAyNTBFMDAwMDYyQTM2QTAwN0Q5NgorOjEwNTMyMDAwMEEwMDA4ODM4RjZEMDA4NDhGNjYwMDc0OEY0ODAxMDQyMworOjEwNTMzMDAwOEU2NzAwMjQwMDA2NEUwMjE1MDdGRkI2MzEyNjAwN0Y1NworOjEwNTM0MDAwOTM2QjAwODMyNjQ0MDAwMTMwOEEwMDdGMTE0NjAwNDM5RQorOjEwNTM1MDAwMzE2MzAwRkY1NDY0RkZCMDhGNjQwMDg0MjY0NTAwMDE3MAorOjEwNTM2MDAwMzBCMTAwN0YzMEEyMDBGRjEyMjYwMDA0MjQwNTAwMDFBNgorOjEwNTM3MDAwMDA0MDkwMjEwQTAwMDg1NjI0MTEwMDAxMjQwRkZGODBFQworOjEwNTM4MDAwMDI0RjcwMjQwMUNGOTAyNjMyNDIwMEZGMDA0MDkwMjE0RQorOjEwNTM5MDAwMEEwMDA4NTYyNDExMDAwMTBFMDAwNjZCMDIyMDI4MjE4NQorOjEwNTNBMDAwMzIxODAwMzAxMzAwRkZBQTMyMTAwMDgyMDI0MDIwMjE4MAorOjEwNTNCMDAwMEUwMDA1QTUwMjIwMjgyMTBBMDAwODQwMjQwNDAwMDE0RgorOjEwNTNDMDAwOEY2RTAwNzQzQzBGODAwMDI0MDUwMDAzMDFDRjkwMjVGMAorOjEwNTNEMDAwQUY3MjAwNzQ5MzcxMDA4MzI0MDYwMDAxMEUwMDA1NkUwNQorOjEwNTNFMDAwMzIyNDAwRkYwRTAwMDA0MTI0MDQwMDAxOTM2RDAwN0Q3MworOjEwNTNGMDAwMDIwRDYwMjUwRTAwMDA2MkEzNkMwMDdEM0MwQjA4MDBDRQorOjEwNTQwMDAwOEQ2QjAwNTQyNTcwMDAwMTNDMDEwODAwQUMzMDAwNTQ0NQorOjEwNTQxMDAwMEEwMDA4NDAyNDA0MDAwMThGNjgwMDc0M0MwOTgwMDBFMQorOjEwNTQyMDAwMjQwNTAwMDQwMTA5MzgyNUFGNjcwMDc0OTM2MzAwODNFNQorOjEwNTQzMDAwMjQwNjAwMDEwRTAwMDU2RTMwNjQwMEZGMEUwMDAwNDFERQorOjEwNTQ0MDAwMjQwNDAwMDE5MzYyMDA3RDAyMDI5ODI1MEUwMDAwNjI5MAorOjEwNTQ1MDAwQTM3MzAwN0QwQTAwMDg0MDI0MDQwMDAxMzI0RDAwODAzRgorOjEwNTQ2MDAwMzlBQzAwODA1NDZDRkY2QzhGNjQwMDg0MEEwMDA4QTk3QQorOjEwNTQ3MDAwMjY0NTAwMDEyN0JERkZDODNDMEEwMDA4QUZCRjAwMzAyOQorOjEwNTQ4MDAwQUZCNTAwMkNBRkI0MDAyOEFGQjMwMDI0QUZCMjAwMjBGQQorOjEwNTQ5MDAwQUZCMTAwMUNBRkIwMDAxODAzNEFEODIxMjQwOTAwNDA2NgorOjEwNTRBMDAwQUY0OTA4MTRBRjQwMDgxMDhGNDIwOTQ0OEY0MzA5NTA5OAorOjEwNTRCMDAwOEY0NjA5NTQ4RjQ3MDk1QzhGNDgwOTRDOTM0NDAxMDg3MworOjEwNTRDMDAwOTM0NTAxMEJBRjgyMDA2NDMwODQwMEZGMzBBNTAwRkZEQworOjEwNTREMDAwQUY4MzAwNTBBRjg2MDA0Q0FGODcwMDVDMEUwMDA4MkFGNworOjEwNTRFMDAwQUY4ODAwNjAxNDQwMDE3NDhGQkYwMDMwQTc2MDAwNjg2RgorOjEwNTRGMDAwOTM0RDA5MDAyNDBCMDA1MDNDMTUwODAwMjZCNTNDODg0QworOjEwNTUwMDAwMzFBQzAwRkYzQzEyMDgwMDI2NTIzQzk4MTE4QjAwMDM3RQorOjEwNTUxMDAwMDAwMDAwMDAwMDAwQTgyMTAwMDA5MDIxOTM1MTAxMDkyMworOjEwNTUyMDAwOEY5RjAwNTAyNDA0MDAxMDMyMkUwMDdGMDAwRTY4QzBCMAorOjEwNTUzMDAwMDAwRTYxNDAwMThEMjgyMTI0QjQwMDg4QUY1NDA4MTg2MgorOjEwNTU0MDAwOEY0OTAxMDQ4RjRBMDlBNDNDMEIwMDBFMDM0QkMwMjE3NAorOjEwNTU1MDAwMDEyQTEwMjMzQzAxMDgwMEFDMjIzQ0FDOEY0MzA5NThCRgorOjEwNTU2MDAwM0MwMTA4MDBBMDI0M0NEMDk3NDcwOTA4MDA3RjMwMjM2NQorOjEwNTU3MDAwM0MwMTA4MDBBQzI2M0NCMDMwRThGRkZGMDAwOEM5QzA4MQorOjEwNTU4MDAwM0MwMTA4MDBBQzNGM0NENEFGNTkwMDJDOTc0MjA5MDhCRAorOjEwNTU5MDAwOTcxMDAwMkM4RUIxMDAwMDkzMEYwMDE4MDM3NDk4MjEwRgorOjEwNTVBMDAwQTc5MDAwNThBRjkzMDA0NDAyMjBGODA5MzFGMDAwRkZBMworOjEwNTVCMDAwMzA0RTAwMDIxNUMwMDFBOTMwNEYwMDAxMTFFMDAxNUQxRAorOjEwNTVDMDAwMDAwMDAwMDA5MzQzMDkzRTMwNjYwMDA4MTRDMDAwMDI0QQorOjEwNTVEMDAwMjQxNDAwMDMwMDAwQTAyMThGNTgwOUE0MjQxMzAwMDEwMworOjEwNTVFMDAwM0MwMTA4MDBBQzM4M0NEODkzNEYwOTM0OTM1MTA5MzczQgorOjEwNTVGMDAwMzFFQzAwRkYzMjJFMDBGRjAyOEU2ODIxMDAwRDI4ODA2MgorOjEwNTYwMDAwMDBBQzUwMjEwMTUwNTgyMTNDMDEwODAwQTQyQjNDQzg5QgorOjEwNTYxMDAwM0MwMTA4MDBBNDJBM0NDNjkzNDkwOTM0MzEyMjAwRkYwQQorOjEwNTYyMDAwMDIwMjIwMjEyNDkwMDAxMDNDMDEwODAwQTQzMDNDQzQ1OAorOjEwNTYzMDAwMjQwNzAwMDY4RjlGMDA1MDNDMDEwODAwQUMyNzNDQ0M5QgorOjEwNTY0MDAwOEY4ODAwNUM4RjU5MDk1ODAwMDA4MDIxMDExRjI4MjM5MgorOjEwNTY1MDAwMDRBMDAxNTEwMzNGMjAyMzA0ODAwMTRGMDBBNDMwMkJGQworOjEwNTY2MDAwMTBDMDAxNTEwMDAwMDAwMDNDMDEwODAwQUMyNTNDQjAxNgorOjEwNTY3MDAwOEU0MjAwMDAwMDQwRjgwOTAwMDAwMDAwMzA0MzAwMDJBNAorOjEwNTY4MDAwMTQ2MDAwRjEwMDQwODgyMTMwNDQwMDAxNTQ4MDAwMTA3MworOjEwNTY5MDAwOEU0MjAwMDQzQzA5MDgwMDhEMjkzQ0I0M0MwQUMwMDAzRAorOjEwNTZBMDAwMDEyQTgwMjVBRjUwMEUwMDhGNDUwMDAwMzBBQjAwMDg2NgorOjEwNTZCMDAwMTE2MEZGRkQwMDAwMDAwMDk3NEQwRTA4MjQxMDAwMDE0RQorOjEwNTZDMDAwQTc4RDAwM0M4RjRDMEUwNEFGOEMwMDM0OEU0MjAwMDQzQQorOjEwNTZEMDAwMDA0MEY4MDkwMDAwMDAwMDAyMjI4ODI1MzIyRTAwMDI1NgorOjEwNTZFMDAwMTVDMDAxNkYwMDAwMDAwMDNDMDkwODAwOTUyOTNDQkM3MgorOjEwNTZGMDAwM0MwNjA4MDA5NEM2M0NDODNDMDQwODAwOTQ4NDNDQkVBOAorOjEwNTcwMDAwM0MxODA4MDA4RjE4M0NCNDAxMjY1ODIxM0MwRjA4MDBCMworOjEwNTcxMDAwOERFRjNDRDgzQzFGMDgwMDk3RkYzQ0QyMDE2NDE4MjE1NAorOjEwNTcyMDAwOEY0RDA5NDAwMzA5QzgyMTI0NkUwMDAyMDMzRjI4MjE0MAorOjEwNTczMDAwMDFGODYwMjEzQzAxMDgwMEE0MkIzQ0NBQUY4RDAwNjQzNQorOjEwNTc0MDAwM0MwMTA4MDBBQzJDM0NEODNDMDEwODAwQTQyNTNDQzAxRQorOjEwNTc1MDAwMEUwMDAwOUUzMUM0RkZGRjhGODcwMDQ4MDA0MDIwMjFDQgorOjEwNTc2MDAwM0MwMTA4MDBBMDI3M0NEMThFNDIwMDA4MjRFODAwMDEzQgorOjEwNTc3MDAwQUY4ODAwNDgwMDQwRjgwOTAwMDAwMDAwOEY0QjAwMkM2MworOjEwNTc4MDAwOTc0OTA5MDgzQzBBMDAwRTAzNEEzODIxMzEyNEZGRkZEQgorOjEwNTc5MDAwMDAwNDE5QzA4RjhBMDA1MEFGNDMwMDJDOTc0MzA5MDhCQQorOjEwNTdBMDAwOTRFNjAwMUEwMDQwNDAyMTMwREZGRkZGQUM1RjAwMDBBQworOjEwNTdCMDAwOENGOTAwMUNBQzU5MDAwNDhDRjgwMDIwQUM1ODAwMDg4RgorOjEwNTdDMDAwOTBFRjAwMTkzMUUzMDAwMzEwNzMwMEZCMDAwMDAwMDBBQworOjEwNTdEMDAwMjg2MjAwMDIxNDQwMDExNzI0MDUwMDAyMTA2NTAxMDkyNworOjEwNTdFMDAwMjQwQzAwMDMxMDZDMDBCQzAwMDAwMDAwM0MwOTA4MDAwMQorOjEwNTdGMDAwOTUyOTNDQzA5MzVGMDkzNDkzNEMwOTIxM0MwRDA4MDA2NgorOjEwNTgwMDAwOTVBRDNDQzYzM0Y5MDBGRjk0RTUwMDJBMDAxOUMwODIyQgorOjEwNTgxMDAwMzE4RjAwRkY5NzhDMDA1ODAwMTgxNjAwMDAwRjc0MDA5RAorOjEwNTgyMDAwMzEyNEZGRkYwMDRFMzgyNTAxQTQzMDIxMDBFNkY4MjU4MQorOjEwNTgzMDAwMDBBQ0M4MjEzQzAzNDAwMDAzRTNDMDI1MDAxOTRDMDAyNAorOjEwNTg0MDAwQUQxODAwMDBBRDA5MDAwNDkzNEYwOTIwM0MwRTAwMDY3RQorOjEwNTg1MDAwMjUwOTAwMTQwMDBGNkUwMDAxQUUyODI1QUQwNTAwMDhEMworOjEwNTg2MDAwOEY0NjA5MkMyNTgyMDAwMTMwNDc3RkZGQUQwNjAwMENEMgorOjEwNTg3MDAwOEY0NDA5MzBBNzg3MDA1ODI1MDYwMDI4QUQwNDAwMTA4MgorOjEwNTg4MDAwOEY0MzA5MzgwMEMwMjAyMUFEMDMwMDE0QUQyQTAwMDQ2NQorOjEwNTg5MDAwOEY1RjA5NDBBRDNGMDAwODkzNTkwOTM3M0MwRTA4MDA1RgorOjEwNThBMDAwOTFDRTNDRDBBRDIwMDAxMDMzMzgwMEZGMDMxNDc4MjE5NgorOjEwNThCMDAwMDAwRjY3MDAwMDBFNkMwMDAxOEQyODI1MzRBMkZGRkY0OQorOjEwNThDMDAwQUQyMjAwMENBRjRCMDAyQzkzNDcwOTNFMzBFQTAwMDg5NAorOjEwNThEMDAwNTE0MDAwMEY4RTU4MDAwQzNDMDMwMTAxMzQ2OTA4MEE0NgorOjEwNThFMDAwQUQwOTAwMjg4RjRBMDA3NEFDQ0EwMDA0M0MwQjA4MDBDNAorOjEwNThGMDAwOTE2QjNDRDAzMTY4MDAxMDUxMDAwMDAzQUNDMDAwMDgyRgorOjEwNTkwMDAwOEY2NTAwNjBBQ0M1MDAwODI0QzQwMDBDOEU1ODAwMENFNAorOjEwNTkxMDAwMDMwMEY4MDkwMDAwMDAwMDNDMEYwODAwOTVFRjNDQ0FBNgorOjEwNTkyMDAwM0MwMjA4MDA5NDQyM0NCRTAxRTI3MDIxMjVDNDAwMDIwMgorOjEwNTkzMDAwMEUwMDAwQzczMDg0RkZGRjNDMDYwODAwOENDNjNDQUM1QworOjEwNTk0MDAwM0MwRDA4MDA4REFEM0NCNDAwQ0QzODIzM0MwMTA4MDA2RgorOjEwNTk1MDAwQUMyNzNDQUMxNEUwMDAwNjAwMDAwMDAwM0MxOTA4MDAzNQorOjEwNTk2MDAwOEYzOTNDQ0MzNzJDMDA0MDNDMDEwODAwQUMyQzNDQ0M5RgorOjEwNTk3MDAwMTIwMDAwODU4RjhCMDA0NDhGNDgwRTEwOEY5MDAwNDREQQorOjEwNTk4MDAwQUUwODAwMjA4RjVGMEUxOEFFMUYwMDI0M0MxMDA4MDBFOAorOjEwNTk5MDAwOTYxMDNDQzAwRTAwMDA2MDAwMDAwMDAwMjQwNTAwNDA4RQorOjEwNTlBMDAwQUY0NTA4MTQ4RjgzMDA1MDhGODkwMDRDMDA3MDE4MjE3OAorOjEwNTlCMDAwMDA2OTUwMjMxOTQwMDAwNEFGODMwMDUwQUY2MzAwNTRDNgorOjEwNTlDMDAwOEY2NzAwNTRBRjg3MDA0QzEyMDAwMDBDMDAwMDAwMDBFRAorOjEwNTlEMDAwOEY0NDAwNzQ5MzZEMDA4MTM0MEVGQTAwMkRBNjAwMDdFOQorOjEwNTlFMDAwMTBDMDAwMDUwMDhFMTgyMTkzNzgwMDgxMjQwMjAxRjQ3NAorOjEwNTlGMDAwMDMwMjc4MDQwMUU0MTgyMUFGNjMwMDBDOEY0QzA5NUNBQQorOjEwNUEwMDAwOEY5OTAwNUMwMTk5MjAyMzE4ODAwMDAzMDAwMDAwMDA5QQorOjEwNUExMDAwOEY1MDA5NUNBRjkwMDA1QzBFMDAwMDYyMDAwMDAwMDAzNworOjEwNUEyMDAwOEY4QjAwNTA4RTQ4MDAxMDNDMDEwODAwQUMyQjNDRDRGQQorOjEwNUEzMDAwMDEwMEY4MDkwMDAwMDAwMDNDMUYwODAwOEZGRjNDQUM4QgorOjEwNUE0MDAwMTdFMEZFRkMyNDA3MDAwNjhGNDUwMDI0OTc0MjA5MDg1MgorOjEwNUE1MDAwOEY4QTAwNjQ4Rjk0MDA1MDNDMEYwMDFGOTc4NzAwNTg3NgorOjEwNUE2MDAwOEY4MzAwNTQ4RjkzMDA0QzMwNERGRkZGMzVFRUZGODA0NQorOjEwNUE3MDAwMDBBRTQ4MjQwMDBEMzFDMDMyMzIwMDEwQUY0NjAwMjQ4MQorOjEwNUE4MDAwQTQ2NzAwMkNBRjQ5MDAyNEFGNkEwMDQ0QUY3NDAwNTBGMworOjEwNUE5MDAwQUY3MzAwNTQ1NjQwMDA3RThFQjgwMDA0MzIyNDAwNDA5QworOjEwNUFBMDAwNTQ4MDAwMzI4RUIxMDAwODhFQUMwMDBDMDE4MEY4MDlFMQorOjEwNUFCMDAwMDAwMDAwMDA4RkJGMDAzMDhGQjUwMDJDOEZCNDAwMjg4RAorOjEwNUFDMDAwOEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTg1QworOjEwNUFEMDAwMDNFMDAwMDgyN0JEMDAzODNDMDkwODAwOTUyOTNDQzBCOAorOjEwNUFFMDAwM0MwNDA4MDA5NDg0M0NDQTNDMUYwODAwOTdGRjNDQkM1RgorOjEwNUFGMDAwOTRGODAwMjQzMTIzRkZGRjk0RUYwMDI4MDA4M0M4MjE4RAorOjEwNUIwMDAwMDMzRjcwMjMwMDE4MkMwMDAwMEY2NDAwMjVDREZGRUUyQQorOjEwNUIxMDAwMDE4RDMwMjUzNEEyODEwMDI0MDMwODAwQUQwMjAwMEM2MQorOjEwNUIyMDAwQUQwNjAwMTBBRDAzMDAxOEFEMDAwMDE0MEEwMDA5Q0U0OAorOjEwNUIzMDAwMjUwODAwMUM5MzQ3MDEwOThGODgwMDM4MDAwN0ZFMDBFNAorOjEwNUI0MDAwMDNFOEM4MjVBRjU5MDA4MDhGNTgwOUEwOEY1MzA5QTRENgorOjEwNUI1MDAwQUZCODAwMTBBRjU4MEUxNDhGQjQwMDEwQUY1NDBFMTAzMQorOjEwNUI2MDAwQUY1MzBFMUMwQTAwMDk0MkFGNTMwRTE4MDIyMEY4MDk2OQorOjEwNUI3MDAwMDAwMDAwMDA4RUFDMDAwQzAxODBGODA5MDAwMDAwMDA1RAorOjEwNUI4MDAwMEEwMDBBN0Y4RkJGMDAzMEE1NjAwMDIwQTU3MzAwMjJBNQorOjEwNUI5MDAwMEEwMDBBMzRBRDczMDAyNDNDMDEwODAwQUMyMDNDQjA3QworOjEwNUJBMDAwMEEwMDA5NkU4RTQyMDAwMDNDMDEwODAwQUMyNDNDQjBBMworOjEwNUJCMDAwMEEwMDA5NkU4RTQyMDAwMDNDMDkwODAwOTUyOTNDQzA4RAorOjEwNUJDMDAwM0MxRjA4MDA5N0ZGM0NDQTNDMTkwODAwOTczOTNDQkNCMQorOjEwNUJEMDAwOTRFRjAwMjQzMTI0RkZGRjAzRTRDMDIxMDMxOTcwMjM1NAorOjEwNUJFMDAwMDAwRjY0MDAyNUNERkZGMjAxOEQyODI1QUM0NTAwMEM4NworOjEwNUJGMDAwMjQwMjA4MDBBRDAyMDAxNEFEMDAwMDEwMEEwMDA5Q0UxNgorOjEwNUMwMDAwMjUwODAwMTg5NEU2MDAyNDk0RTMwMDI4M0MwOTA4MDBDNQorOjEwNUMxMDAwOTUyOTNDQzAwMDA2MjQwMDAwMDNGQzAwMzQ5OTgxMDA1MworOjEwNUMyMDAwMzdGODA4MDBBRDE5MDAwQ0FEMTgwMDEwMEEwMDA5Q0VCNQorOjEwNUMzMDAwMjUwODAwMTQxNDYwRkVFRDAwMDAwMDAwOTRFRjAwMjQxRAorOjEwNUM0MDAwM0MwOTA4MDA5NTI5M0NDMDAwMEY3NDAwMzVDRDA4MDBDMAorOjEwNUM1MDAwQUQwRDAwMEMwQTAwMDlDRTI1MDgwMDEwOTM1MjAxMDk3MQorOjEwNUM2MDAwMDAwMDI4MjEwRTAwMDYwMDMyNDQwMEZGOEZCRjAwMzBFNAorOjEwNUM3MDAwOEZCNTAwMkM4RkI0MDAyODhGQjMwMDI0OEZCMjAwMjA4MgorOjEwNUM4MDAwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4MjdCRDAwMzg1QQorOjEwNUM5MDAwMDMwMEY4MDkwMDAwMDAwMDBBMDAwQTc5MzIyNDAwNDBERAorOjEwNUNBMDAwMTIwMEZGNjkwMDAwMDAwMDhGNTQwRTE0OEY5MjAwNDQxMAorOjEwNUNCMDAwQUU1NDAwMjA4RjUzMEUxQzBBMDAwQTYzQUU1MzAwMjQxQQorOjEwNUNDMDAwOEY4MjAwMUMwMDgwNDAyMTNDMDQwMTAwOTA0NzAwODUyOQorOjEwNUNEMDAwMzBFMzAwMjAxMDYwMDAwOTAwMDAwMDAwM0MwNzA4MDBDRAorOjEwNUNFMDAwOENFNzNDRDQ4RjgzMDAxODAwRTMyMDIzMDQ4MDAwMDg1NQorOjEwNUNGMDAwOTM4OTAwMDQxNEUzMDAwMzAxMDAyMDIxMDNFMDAwMDg1RAorOjEwNUQwMDAwMDA4MDEwMjEzQzA0MDEwMDAzRTAwMDA4MDA4MDEwMjEwNQorOjEwNUQxMDAwMTEyMDAwMEIwMDY3MzgyMzhGOEMwMDIwMjQwOTAwMzRFOQorOjEwNUQyMDAwOTE4QjAwQkMzMTZBMDAwMjUxNDAwMDAxMjQwOTAwMzAwRgorOjEwNUQzMDAwMDBFOTY4MkIxNUEwRkZGMTAxMDAyMDIxMDBFOTM4MjNCQworOjEwNUQ0MDAwMjQxOUZGRkMwMEI5QzAyNDAwRjk3ODI0MDBGODcwMkI1NgorOjEwNUQ1MDAwMTVDMEZGRUEwMUU4MjAyMTMwQzIwMDAzMDAwMjE4MjMyOQorOjEwNUQ2MDAwMTRDMDAwMTIzMDY5MDAwMzAwMDAzMDIxMDBBOTcwMjEyNgorOjEwNUQ3MDAwMDFDNjY4MjEwMEVENjAyQjExODBGRkUwM0MwNDAxMDBBQQorOjEwNUQ4MDAwMkQyRjAwMDEwMDA2NDgyQjAxMDUzODIxMDFFOTMwMjRBMAorOjEwNUQ5MDAwMTRDMEZGREEyNEU0RkZGQzI0MTlGRkZDMDBCOUMwMjQ3RQorOjEwNURBMDAwMDMwODIwMjEwM0UwMDAwODAwODAxMDIxOEY4QjAwMjBEMQorOjEwNURCMDAwMjQwNjAwMDQ5MTZBMDBCQzMxNDQwMDA0MTQ4MEZGRUMwNgorOjEwNURDMDAwMDBBOTcwMjEwQTAwMEIyRDAwMDAzMDIxMjdCREZGRTgzQgorOjEwNUREMDAwQUZCRjAwMTA4RjQ2MDEwMDkzNEEwMTA5M0MxRjA4MDAyNQorOjEwNURFMDAwOEZGRjAwOTAyNDA3RkY4MDMxNEYwMEZGMzFFODAwN0ZENAorOjEwNURGMDAwMDAwODYxNDAwM0U2QzgyMTAzMkNDMDIxMjcwOTAxMjBDNworOjEwNUUwMDAwMDEyNzcwMjQzQzAxMDgwMEEwMkYzRDEwQUY0RTA4MEM2NAorOjEwNUUxMDAwM0MwRDA4MDA4REFEMDA5MDNDMDQwMDgwMzQ4MjAwMDNFRQorOjEwNUUyMDAwMDFBNjU4MjEwMTZDMTgyMTI0NjUwMTIwMzBBQTAwNzhCMAorOjEwNUUzMDAwMDE0MjQwMjVBRjQ4MDgxQzNDMUYwODAwOEZGRjAwOTAxRQorOjEwNUU0MDAwOEY4ODAwNDAwM0U2QzAyMTMzMTkwMDA3MDMwNzQ4MjQ2OAorOjEwNUU1MDAwMDMzQTc4MjFBRjQ5MDAyODI1RTkwOUMwOTUyRTAwMDJCMAorOjEwNUU2MDAwM0MwRDA4MDA4REFEMDA4QzNDMEEwODAwOEQ0QTAwOTA2NgorOjEwNUU3MDAwMzFDQzNGRkYwMUE2MTgyMTAwMEM1OTgwMDA2QjI4MjE2RQorOjEwNUU4MDAwMDBBNzIwMjRBRjQ0MDAyQzk1MjIwMDAyM0MxRjA4MDBFQworOjEwNUU5MDAwOEZGRjAwOEM5MTA3MDA4NTMwNTkzRkZGMDNFNjc4MjE4MgorOjEwNUVBMDAwMDAxOUMxODAwMTQ2NzAyMTAxRjg2ODIxMzFDQzAwN0ZDMgorOjEwNUVCMDAwMzFBQjAwN0YwMTlBMjgyMTAxN0E1MDIxM0MwMzAwMEM2QworOjEwNUVDMDAwM0MwNDAwMEUwMEEzMjgyMTAxNDQxMDIxMzBFNjAwMjBFQworOjEwNUVEMDAwMjc0NzA5ODBBRjgyMDAyQ0FGODgwMDFDQUY4OTAwMjRCRgorOjEwNUVFMDAwQUY4NTAwMjAxMEMwMDAwNkFGODcwMDI4OEQwMjAwNTA0QgorOjEwNUVGMDAwOENBNDAxMEMwMDQ0MzAyMzE4QzAwMDc3MDAwMDAwMDA3RgorOjEwNUYwMDAwOTEwQzAwODUyNDBERkZERjAxOEQzODI0QTEwNzAwODU0OQorOjEwNUYxMDAwOEY4QjAwMUM4Rjg5MDAyNDhGODcwMDI4OEQ2NTAwNEM5MworOjEwNUYyMDAwQUY4NTAwMTg5MTJGMDAwRDMxRUUwMDIwMTFDMDAwMTczMQorOjEwNUYzMDAwMDAwMDAwMDAyNDA5MDAwMUEzODkwMDA0QUY4MDAwMENDOAorOjEwNUY0MDAwOENFNDAwMjQ4Rjg1MDAwQzI0MEEwMDA4QUY4MDAwMDgzMAorOjEwNUY1MDAwQUY4MDAwMTAzQzAxMDgwMEE0MkEzQ0JFM0MwMTA4MDBCMAorOjEwNUY2MDAwQTQyMDNDRDIwRTAwMEIwMTAwMDAzMDIxOEY4NTAwMjRCQworOjEwNUY3MDAwOEZCRjAwMTBBRjgyMDAxNDkwQTgwMDBEMjdCRDAwMTgzRAorOjEwNUY4MDAwMDAwODM5NDIwM0UwMDAwODMwRTIwMDAxOTEzRjAwMDJCRQorOjEwNUY5MDAwMjQxODAwMDEzM0Y5MDBGRjAwMTkyMTgyMTA5ODAwMzlGQworOjEwNUZBMDAwMjQwODAwMDIxMDg4MDA1QjhGODYwMDJDOENFNTAwMjRGQQorOjEwNUZCMDAwMTRBMDAwMUI4RjlGMDAyMDkxMjIwMDAwMjQwQTAwMDVERQorOjEwNUZDMDAwMzA0NjAwM0YxMENBMDA0NzI0MDQwMDAxOEY4NjAwMDhCNQorOjEwNUZEMDAwQTM4NDAwMDRBRjg2MDAxMEFGODYwMDBDOENFNDAwMjQ3QworOjEwNUZFMDAwOEY4NTAwMEMyNDBBMDAwODNDMDEwODAwQTQyQTNDQkU0RQorOjEwNUZGMDAwM0MwMTA4MDBBNDIwM0NEMjBFMDAwQjAxMDAwMDAwMDA3MAorOjEwNjAwMDAwOEY4NTAwMjQ4RkJGMDAxMEFGODIwMDE0OTBBODAwMEQ3MAorOjEwNjAxMDAwMjdCRDAwMTgwMDA4Mzk0MjAzRTAwMDA4MzBFMjAwMDEwMworOjEwNjAyMDAwOENGODAwMDg4Q0Y5MDAyNDhGRUUwMEM0QTM4MDAwMDREMworOjEwNjAzMDAwOENFNDAwMjRBRjhFMDAwQzhGODUwMDBDOEY4NjAwMDg0NgorOjEwNjA0MDAwMDMxOTc4MjMyNDBBMDAwOEFGOEYwMDEwM0MwMTA4MDBEMAorOjEwNjA1MDAwQTQyQTNDQkUzQzAxMDgwMEE0MjAzQ0QyMEUwMDBCMDE0NworOjEwNjA2MDAwMDAwMDAwMDA4Rjg1MDAyNDhGQkYwMDEwQUY4MjAwMTQ1NQorOjEwNjA3MDAwOTBBODAwMEQyN0JEMDAxODAwMDgzOTQyMDNFMDAwMDg3MQorOjEwNjA4MDAwMzBFMjAwMDE5MTIzMDAwMDMwNjIwMDNGMTA0NDAwMjdGRAorOjEwNjA5MDAwOEY4NTAwMjA4Q0U0MDAyNDE0ODAwMDIxMDAwMDAwMDA4MworOjEwNjBBMDAwOEQyRTAwMTgzQzE4N0ZGRjhGODUwMDIwMzcwRkZGRkZEMworOjEwNjBCMDAwMDFDRjE4MjRBRjgzMDAwODhGOUYwMDA4OENBODAwODRBQworOjEwNjBDMDAwMDNFOEM4MkIxNzIwMDAwMjAzRTAyMDIxOENBNDAwODRFMQorOjEwNjBEMDAwMEEwMDBCQkNBRjg0MDAwODhDQTMwMTBDMEEwMDBCOUFDOQorOjEwNjBFMDAwQUY4MzAwMTg4RDJDMDAxODhGODYwMDA4M0MwRDdGRkZCMQorOjEwNjBGMDAwOEY4OTAwMjAzNUEzRkZGRjAxODM1ODI0MjQwNDAwMDE2OQorOjEwNjEwMDAwQUY4QjAwMTBBRDIwMDBDQ0EzODQwMDA0MEEwMDBCQzhBNAorOjEwNjExMDAwQUY4NjAwMEM4Q0NBMDAxNDBBMDAwQkJDQUY4QTAwMDhDMgorOjEwNjEyMDAwOENBMzAwQzgwQTAwMEJGRkFGODMwMDA4OEY4NDAwMkNFQgorOjEwNjEzMDAwOENBQzAwNjQ4QzhEMDAxNDAxOEQ1ODJCMTE2MDAwMDQxMAorOjEwNjE0MDAwMDAwMDAwMDA4Q0EyMDA2NDBBMDAwQkZGQUY4MjAwMDg3MAorOjEwNjE1MDAwOEM4MjAwMTQwQTAwMEJGRkFGODIwMDA4OEY4NTAwMENCMAorOjEwNjE2MDAwMjdCREZGRTBBRkJGMDAxOEFGQjEwMDE0MTRBMDAwMDdCNworOjEwNjE3MDAwQUZCMDAwMTA4Rjg2MDAyNDI0MDIwMDA1OTBDNDAwMDBGOAorOjEwNjE4MDAwMzA4MzAwM0YxMDYyMDBCNjhGODQwMDIwOEY5MTAwMDg5QQorOjEwNjE5MDAwMDBBMDgwMjE4RjhDMDAyODNDMDUwODAwOENBNTNDQjAxNQorOjEwNjFBMDAwOEQ4QjAwMDQzMTY2M0ZGRjAwQzU1MDJCNTU0MDAwMDEyOAorOjEwNjFCMDAwMDBDMDI4MjE5MzhEMDAwNDExQTAwMDczMDBCMEY4MkJCQgorOjEwNjFDMDAwOEY5ODAwMjAyNDA0MDAzNDkzMEYwMEJDMzFFRTAwMDJBRAorOjEwNjFEMDAwNTFDMDAwMDEyNDA0MDAzMDAwQTRDODJCMTcyMDAwRDFCNgorOjEwNjFFMDAwMDAwMDAwMDAwMEE0MjgyMzAwQjBGODJCM0MwMTA4MDBBOAorOjEwNjFGMDAwQTQyNDNDQkMxN0UwMDA2ODAyMDAyMDIxM0MwMzA4MDBGNgorOjEwNjIwMDAwOEM2MzNDQUMwMDgzMTAyQjU0NDAwMDAxMDA4MDE4MjFBQgorOjEwNjIxMDAwOEY4ODAwMjQzQzAxMDgwMEFDMjMzQ0I0MDAwMDQ4MjFENgorOjEwNjIyMDAwOTEwNDAwMEQzMDgzMDAyMDUwNjAwMDAxOEY0OTBFMTg0QQorOjEwNjIzMDAwOEY4MzAwMTQwMTIzMzgyQjEwRTAwMDU5MDAwMDAwMDA2OAorOjEwNjI0MDAwM0MwNDA4MDA4Qzg0M0NCNDAwODk1ODIxMDA2QjUwMkIxRQorOjEwNjI1MDAwMTE0MDAwNTYwMDkwNjAyQjAwNjkzMDIzMDBDMDIwMjFCRgorOjEwNjI2MDAwM0MwMTA4MDBBQzI2M0NCNDEyMDAwMDAzMjQxRkZGRkNENAorOjEwNjI3MDAwMTA5MDAwOEEzMjI3MDAwMzAwOUZDODI0M0MwMTA4MDBDOAorOjEwNjI4MDAwQUMzOTNDQjQzQzAxMDgwMEE0MjAzQ0QyOEY4NDAwMEMwMworOjEwNjI5MDAwMTIwNDAwMDc4RjgzMDAyMEFGOTEwMDA4MDIwMDIwMjEyNAorOjEwNjJBMDAwOEM3MTAwQ0NBRjkwMDAwQzI2MzAwMDAxQUM3MDAwQ0M5QgorOjEwNjJCMDAwM0MwMjA4MDA4QzQyM0NCNDhGOEEwMDEwMjQwNzAwMTg2RQorOjEwNjJDMDAwMDA4MjIwMjMwMTQyMjgyM0FGODQwMDBDMTA4MDAwMDJBQQorOjEwNjJEMDAwQUY4NTAwMTAyNDA3MDAxMDhGODYwMDFDM0MwMTA4MDBDOQorOjEwNjJFMDAwQTAyNzNDRDAyNDA3MDA0MDkwQ0MwMDg1MzE4QjAwQzAxMworOjEwNjJGMDAwMTE2NzAwNDA4RjhEMDAxNDE0QTAwMDE1MDAwMDIwMjFBQworOjEwNjMwMDAwOTM0QTAxMDk4RjQyMDk3NDMxNDUwMEZGMDAwMjI2MDJCOQorOjEwNjMxMDAwMjRBMzAwMDEzMDkwMDA3RjMwNzEwMDdGMTIzMDAwN0E5QQorOjEwNjMyMDAwMjQwN0ZGODBBMEMzMDA4MzNDMDkwODAwOEQyOTNDQ0NEMgorOjEwNjMzMDAwOEY4ODAwMjQyNDBEMDAwMjM1MkMwMDA4M0MwMTA4MDA0MQorOjEwNjM0MDAwQTAyRDNEMTEzQzAxMDgwMEFDMkMzQ0NDMjQwNDAwMTBENQorOjEwNjM1MDAwOTEwRTAwMEQzMUM2MDAyMDEwQzAwMDA1MDA4MDE4MjFFQworOjEwNjM2MDAwMjQwODAwMDEzQzAxMDgwMEFDMjgzQ0I0MzQ4MzAwMDEzRgorOjEwNjM3MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA2MDEwMjE4MworOjEwNjM4MDAwMDNFMDAwMDgyN0JEMDAyMDNDMDEwODAwQTQyMDNDQkMxRAorOjEwNjM5MDAwMTNFMEZGOUEwMjAwMjAyMTBBMDAwQzUwMDBBMDIwMjFFNworOjEwNjNBMDAwM0MwNDA4MDA4Qzg0M0NCNDAwOTA2MDJCMTE4MEZGQUU0QworOjEwNjNCMDAwMDAwMDAwMDAzQzBGMDgwMDk1RUYzQ0JDMDFFNDcwMjE5OAorOjEwNjNDMDAwMDFDNjY4MkIxMUEwMDAwNzJDODIwMDA0M0MxRjYwMDA0RQorOjEwNjNEMDAwOEZGOTU0MDQzMzM4MDAzRjE3MDBGRkU1MjQwMzAwNDJDRgorOjEwNjNFMDAwMkM4MjAwMDQxMDQwRkZBMDI0MDMwMDQyMEEwMDBDQUVERgorOjEwNjNGMDAwOEZCRjAwMTgxNTJERkZDMDAwMDAwMDAwOENERjAwNzQ1NworOjEwNjQwMDAwM0MwMzgwMDAyNDA1RkY4MDAzRTNDODI1QUNEOTAwNzQ1OQorOjEwNjQxMDAwOTBEODAwODUyNDBFMDAwNDI0MDQwMDEwMzMwRjAwM0ZBMAorOjEwNjQyMDAwMDFFNTQwMjVBMEM4MDA4NThGODgwMDI0M0MwMTA4MDBCNAorOjEwNjQzMDAwQTAyRTNEMTEyNDAzMDAwMTkxMDYwMDBEMzBDOTAwMjA1QgorOjEwNjQ0MDAwMTUyMDAwMDMwMDAwMDAwMDNDMDMwODAwOEM2MzNDQjRFRQorOjEwNjQ1MDAwM0MwMTA4MDBBQzIzM0NBQzBBMDAwQ0E1MDAwMDAwMDA4NQorOjEwNjQ2MDAwOEY4NzAwMTA4Qzg4MDA4NDAwRTgyODJCMTRBMDAwMDI3RAorOjEwNjQ3MDAwMDBFMDg4MjE4QzkxMDA4NDI0MDkwMDAxQTM4OTAwMDQ5NAorOjEwNjQ4MDAwOEY0NDBFMTgwMjIwMjgyMTBFMDAwQjAxMDIyMDMwMjExQgorOjEwNjQ5MDAwMDIyMDgwMjEwQTAwMEMzNkFGODIwMDE0MDAwNzE4MjM2NgorOjEwNjRBMDAwMzA2NjAwMDMzQzAxMDgwMEE0MjYzQ0QyMTIyMDAwMDVGRgorOjEwNjRCMDAwOEY4QzAwMjA5MThCMDBCQzMxNkEwMDA0MTU0MDAwMTVDMAorOjEwNjRDMDAwMjRDRDAwMDQzQzBGMDgwMDk1RUYzQ0QyMDFFNDcwMjE3QworOjEwNjREMDAwMDBBRTMwMkI1MEMwRkY2RThGODQwMDBDMkM4NTAwMDU2MQorOjEwNjRFMDAwMTRBMEZGQTMyNDAzMDA0MjMwOTgwMDAzMTcwMDAwMDIwOQorOjEwNjRGMDAwMDA5ODE4MjMyNDgzRkZGQzNDMDEwODAwQUMyMzNDQjQyMworOjEwNjUwMDAwMEEwMDBDNzIwMDAwMDAwMDAwQTc1ODI0MEEwMDBDOUEzMAorOjEwNjUxMDAwMDE2NzE4MjYzQzAxMDgwMEE0MkQzQ0QyMEEwMDBEMDI5OAorOjEwNjUyMDAwMDAwMDAwMDAzQzAxMDgwMEFDMjAzQ0I0MEEwMDBDQURBNworOjEwNjUzMDAwMjQwMzAwNDI4RjgzMDAxMDE0NjAwMDA3MDAwMDEwMjEyNAorOjEwNjU0MDAwOEY4ODAwMjQyNDA1MDAwNTkxMDYwMDAwMzBDNDAwRkY1OAorOjEwNjU1MDAwMTA4NTAwMDMwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDBCOAorOjEwNjU2MDAwOTEwQTAwMTgzMTQ5MDBGRjAwMDkzOUMyMTRFMEZGRkEwRQorOjEwNjU3MDAwOEY4NTAwMUMzQzA0MDgwMDk0ODQzQ0JDM0MwMzA4MDA0QworOjEwNjU4MDAwOEM2MzNDRDQzQzE5MDgwMDhGMzkzQ0I0M0MwRjA4MDBBNAorOjEwNjU5MDAwOTVFRjNDRDIwMDY0QzAyMThDQUQwMDU0MDMxOTcwMjFFQQorOjEwNjVBMDAwMDFDRjYwMjEwMThENTgyMzE5NjAwMDFEMDAwMDAwMDBGQgorOjEwNjVCMDAwOTEwRTAwMUM4RjhDMDAyQzk3NEIwRTEwMzFDRDAwRkZEQworOjEwNjVDMDAwOEQ4NTAwMDQwMTZEMzAyMzhEODgwMDAwMzBDRUZGRkZFMworOjEwNjVEMDAwMDAwRTUxMDAwMEFBQzgyMTAwMDAzODIxMDEwNzIwMjEyNworOjEwNjVFMDAwMDMyQTE4MkIwMDgzQzAyMUFEOTkwMDA0QUQ5ODAwMDA0OAorOjEwNjVGMDAwOTE4RjAwMEEwMUNGNjgyMUExOEQwMDBBOEY4ODAwMkM5RAorOjEwNjYwMDAwOTc0QjBFMTJBNTBCMDAwODk1MEEwMDM4MjU0OTAwMDE4QQorOjEwNjYxMDAwQTUwOTAwMzg5MTA3MDAwRDM0RTYwMDA4QTEwNjAwMEQxOQorOjEwNjYyMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwOTM4NzAwMDQ5RQorOjEwNjYzMDAwOEY4RjAwMjQ4RkFEMDAxNDNDMEU3RkZGOEY4OTAwMENEQworOjEwNjY0MDAwMzVDOEZGRkZBRkJGMDAxQ0FGQjAwMDE4MDFBODE4MjQ2OQorOjEwNjY1MDAwOTFFQTAwMEQwMDA3MTdDMDNDMUZCRkZGMDA2MjU4MjVEQworOjEwNjY2MDAwMkQyRTAwMDE4RjkwMDAxODM3RjlGRkZGM0MxODA4MDAwRAorOjEwNjY3MDAwOEYxODNDRDQzQzBGMDgwMDk1RUYzQ0NBMDE3OTY4MjQ4MAorOjEwNjY4MDAwMDAwRTQ3ODAzQzA3RUZGRjNDMDVGMEZGMDFBODE4MjVFRQorOjEwNjY5MDAwMzE0OTAwMjAzNEUyRkZGRjM0QUNGRkZGMDMxMDU4MjNFMAorOjEwNjZBMDAwMjdBNTAwMTAyNDA2MDAwMjI1RUEwMDAyMDA2MjE4MjQzMworOjEwNjZCMDAwMDA4MDgwMjExNTIwMDAwMjAwMDA0MDIxOEY0ODBFMUMyMAorOjEwNjZDMDAwQTdBQTAwMTIwNTYwMDAzNzI0MDcwMDAwMzBGRjAwRkY3MgorOjEwNjZEMDAwMDAxRkNGMDA4RjhCMDAxQzAwNzkzODI1QUZBNzAwMTQ1NgorOjEwNjZFMDAwOTE2RjAwODUzQzA4MDgwMDkxMDgzQ0QxM0MxOERGRkYwMQorOjEwNjZGMDAwMzFFRTAwQzAzNzBBRkZGRjAwMEUxODJCM0MxRjA4MDBDOAorOjEwNjcwMDAwOTdGRjNDQzQwMEVBNjgyNEEzQTgwMDExMDAwMzE3NDBDNworOjEwNjcxMDAwMDFBMjQ4MjU4RkI5MDAxMEFGQTkwMDE0M0MwQTA4MDA1NworOjEwNjcyMDAwOTE0QTNDRDNBN0JGMDAxNjhGQTgwMDE0MDMyQ0MwMjRBNQorOjEwNjczMDAwM0MwQjAxMDAzQzBGMEZGRjAzMEIxODI1MzE0NzAwMDNGMgorOjEwNjc0MDAwMzVFRUZGRkYwMTBDNjgyNDAwMDcxNjAwMDA2RUY4MjRFOAorOjEwNjc1MDAwM0MwOTcwMDAwMUEyQzgyNTAzRTk1ODI1QUZCOTAwMTQwRgorOjEwNjc2MDAwQUZBQjAwMTAwRTAwMDA3NkEzQTAwMDE1OEY4QzAwMjRBNAorOjEwNjc3MDAwMjYwMjAwMDg5MTg2MDAwRDMwQzQwMDIwMTA4MDAwMDYxQgorOjEwNjc4MDAwOEZCRjAwMUMzQzA1MDgwMDk0QTUzQ0MwMjRCMEZGRkY0RgorOjEwNjc5MDAwM0MwMTA4MDBBNDMwM0NDMDhGQjAwMDE4MDNFMDAwMDhBMgorOjEwNjdBMDAwMjdCRDAwMjA4Rjk4MDAxNDAxMTg1MDJCNTU0MEZGQzdCQgorOjEwNjdCMDAwMjQwNzAwMDEwQTAwMEQ4NTMwRkYwMEZGOTM4MjAwMDRDQQorOjEwNjdDMDAwMjdCREZGRTBBRkJGMDAxODEwNDAwMDBGMDA4MDUwMjEzMAorOjEwNjdEMDAwOEY4ODAwMjQyNDBCMDAwNThGODkwMDA4OTEwNzAwMDA5MgorOjEwNjdFMDAwOEY4NDAwMjAwMTAwMjgyMTMwRTMwMDNGOEY4NjAwMkM5OQorOjEwNjdGMDAwMTA2QjAwMDgwMDAwMzgyMUFGQTkwMDEwMEUwMDA0MEUzNQorOjEwNjgwMDAwQUZBQTAwMTRBMzgwMDAwNDhGQkYwMDE4MDNFMDAwMDhBMworOjEwNjgxMDAwMjdCRDAwMjA4RDE5MDAxODNDMEYwODAwOERFRjNDQjRGNworOjEwNjgyMDAwOEY5ODAwMTAzQzAyN0ZGRjhEMDgwMDE0MzQ1RkZGRkYzQgorOjEwNjgzMDAwMDMzRjY4MjQwMUY4NzAyMTAxQUU2MDIzMDE4ODM4MjFFQworOjEwNjg0MDAwQUZBOTAwMTAwRTAwMDQwRUFGQUEwMDE0MEEwMDBERDM2OQorOjEwNjg1MDAwQTM4MDAwMDQ4Rjg3MDAyNDNDMDUwODAwOTRBNTNDRDI0NworOjEwNjg2MDAwM0MwMjA4MDA4QzQyM0NDQzkwRTYwMDBEMDAwNTI0MDA2MAorOjEwNjg3MDAwMzBDMzAwMjAxMDYwMDAyQzAwNDQ0MDI1OEY4NTAwMUM5MAorOjEwNjg4MDAwMDAwMDYwMjEyNDBCMDAwMTkwQTMwMDg1MDAwMDQ4MjEzNgorOjEwNjg5MDAwMjQwQTAwMDEzQzBGODAwMDM1RUUwMDcwOERDNzAwMDAxNworOjEwNjhBMDAwQUY4NzAwMzA4RjU4MDE3ODA3MDBGRkZFM0MwMzgwMDA1RgorOjEwNjhCMDAwMzQ3OTAwNzA4RjM4MDAwMDNDMDUwODAwOENBNTAwNzQwNgorOjEwNjhDMDAwM0MwRDA4MDA4REFEMDA3MDAzMDc3ODIzMDBBRjM4MjEyMAorOjEwNjhEMDAwMDAwMDEwMjEwMEVGMzAyQjAxQTIyMDIxMDA4NjE4MjE5QQorOjEwNjhFMDAwM0MwMTA4MDBBQzI3MDA3NDNDMDEwODAwQUMyMzAwNzA5OAorOjEwNjhGMDAwQUY0QjAxNDgzQzE5MDgwMDhGMzkzQ0Q0QTc0OTAxNDRFQgorOjEwNjkwMDAwQTc0QTAxNDZBRjU5MDE0QzNDMEIwODAwOTE2QjNDRDFBMgorOjEwNjkxMDAwQTM0QjAxNTJBRjQ4MDE1NDNDMDgxMDAwQTc0QzAxNTg0QQorOjEwNjkyMDAwMDNFMDAwMDhBRjQ4MDE3ODhGNEIwRTFDM0MwQTA4MDBCQQorOjEwNjkzMDAwOEQ0QTNDQjQ5NzQ5MEUxNjk3NEQwRTE0MDE0NTYwMjFCRgorOjEwNjk0MDAwMzEyQUZGRkYwQTAwMERGNjMxQTlGRkZGOEY4MzAwMjREMworOjEwNjk1MDAwOTA2NDAwMEQzMDgyMDAyMDEwNDAwMDI5MDAwMDAwMDBFQgorOjEwNjk2MDAwMDAwMDQ4MjEwMDAwNTAyMTAwMDA0MDIxM0MwNzgwMDAyOQorOjEwNjk3MDAwMzRFQjAwNzA4RDY3MDAwMEFGODcwMDMwOEY0QzAxNzhEQQorOjEwNjk4MDAwMDU4MEZGRkUzQzBEODAwMDM1QUMwMDcwOEQ4QjAwMDA1MworOjEwNjk5MDAwM0MwNTA4MDA4Q0E1MDA3NDNDMDQwODAwOEM4NDAwNzA0MQorOjEwNjlBMDAwMDE2NzMwMjMwMEE2NzgyMTAwMDAxMDIxMDFFNkM4MkJFMgorOjEwNjlCMDAwMDA4MkMwMjEwMzE5NzAyMTNDMDEwODAwQUMyRjAwNzQzMworOjEwNjlDMDAwM0MwMTA4MDBBQzJFMDA3MEFGNDkwMTQ4M0MwRDA4MDBBNgorOjEwNjlEMDAwOERBRDNDRDRBNzQ4MDE0NDI0MDkwMDQwQTc0QTAxNDY5NAorOjEwNjlFMDAwM0MwODEwMDAyNDBBRkY5MUFGNEQwMTRDQTM0QTAxNTIwQworOjEwNjlGMDAwQUY0OTAxNTRBNzQwMDE1ODAzRTAwMDA4QUY0ODAxNzhBRgorOjEwNkEwMDAwOEY0OTBFMTg5NzQ2MEUxMjk3NDUwRTEwMzBDQUZGRkY5OQorOjEwNkExMDAwMEEwMDBFMkMzMEE4RkZGRjhGODMwMDI0MjdCREZGRjg0QgorOjEwNkEyMDAwOTA2NDAwMEQzMDgyMDAyMDEwNDAwMDNBMDAwMDAwMDAwOQorOjEwNkEzMDAwMjQwQjAwMDEwMDAwNDgyMTI0MEEwMDAxM0MwODgwMDBDQQorOjEwNkE0MDAwMzUwNzAwNzA4Q0UzMDAwMEFGODMwMDMwOEY0QzAxNzg3NQorOjEwNkE1MDAwMDU4MEZGRkUzQzBFODAwMDNDMDQwODAwOTA4NDNEMTA0MQorOjEwNkE2MDAwMzVDNzAwNzA4Q0VDMDAwMDNDMDUwODAwOENBNTAwNzQ1NAorOjEwNkE3MDAwQTNBNDAwMDMzQzE5MDgwMDhGMzkwMDcwOEZBRDAwMDBGQgorOjEwNkE4MDAwMDE4MzMwMjMwMEE2MzgyMTAwMDAxMDIxMDMyMjc4MjE0MQorOjEwNkE5MDAwMDBFNkMwMkIwMUY4NjAyMTAxQUU0MDI1QUZBODAwMDA0MAorOjEwNkFBMDAwM0MwMTA4MDBBQzI3MDA3NDNDMDEwODAwQUMyQzAwNzBDRAorOjEwNkFCMDAwOTM0NjAxMEEzQzA0MDgwMDkwODQzRDExQTNBMDAwMDIwMworOjEwNkFDMDAwQTNBNjAwMDE4RkEzMDAwMDNDMDU4MEZGMzA5OTAwN0Y0MgorOjEwNkFEMDAwMzRBMkZGRkYwMDYyNzgyNDAwMTlDNjAwMDFGODcwMjU3NworOjEwNkFFMDAwMjQwRDMwMDBBRjRFMDE0QzI3QkQwMDA4QUY0RDAxNTRCRQorOjEwNkFGMDAwQTc0MDAxNThBRjRCMDE0OEE3NDkwMTQ0QTc0QTAxNDZBNgorOjEwNkIwMDAwM0MwOTEwMDAyNDBBRkY4MEEzNEEwMTUyMDNFMDAwMDg1OAorOjEwNkIxMDAwQUY0OTAxNzg4RjRCMEUxODk3NDYwRTEyOTc0NTBFMTAwRAorOjEwNkIyMDAwMzBDQUZGRkYwQTAwMEU2MDMwQTlGRkZGOEY4NTAwMUNFRQorOjEwNkIzMDAwMjQwMjAwODA5MEE0MDA4NTMwODMwMEMwMTA2MjAwMDUwQworOjEwNkI0MDAwOEY4NjAwMjA4Rjg4MDAwODhGODcwMDBDQUNDODAwQzg5MworOjEwNkI1MDAwQUNDNzAwQzQwM0UwMDAwODAwMDAwMDAwM0MwQTA4MDBDNQorOjEwNkI2MDAwMjU0QTM4OTAzQzA5MDgwMDI1MjkzOTVDM0MwODA4MDA3MgorOjEwNkI3MDAwMjUwODJEMTAzQzA3MDgwMDI0RTczQTcwM0MwNjA4MDA2MQorOjEwNkI4MDAwMjRDNjM3MDAzQzA1MDgwMDI0QTUzNDc4M0MwNDA4MDBERQorOjEwNkI5MDAwMjQ4NDMwQTAzQzAzMDgwMDI0NjMzNzk4M0MwMjA4MDA5QQorOjEwNkJBMDAwMjQ0MjM1NkMzQzAxMDgwMEFDMkEzQzkwM0MwMTA4MDBCMgorOjEwNkJCMDAwQUMyOTNDOEMzQzAxMDgwMEFDMjgzQzg4M0MwMTA4MDAxNgorOjEwNkJDMDAwQUMyNzNDOTQzQzAxMDgwMEFDMjYzQ0E0M0MwMTA4MDBFNgorOjEwNkJEMDAwQUMyNTNDOUMzQzAxMDgwMEFDMjQzQzk4M0MwMTA4MDBERQorOjEwNkJFMDAwQUMyMzNDQTgzQzAxMDgwMEFDMjIzQ0EwMDNFMDAwMDgxOAorOjA0NkJGMDAwMDAwMDAwMDBBMQorOjAwMDAwMDAxRkYKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKKyAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgKiBhY2NvbXBhbnlpbmcgaXQuCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTQuNi4xNy5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDktNC42LjE3LmZ3LmloZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NjdjNjYuLjAwMDAwMDAKLS0tIGEvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDktNC42LjE3LmZ3LmloZXgKKysrIC9kZXYvbnVsbApAQCAtMSw1ODE2ICswLDAgQEAKLToxMDAwMDAwMDA4MDAwMEY4MDgwMDAwMDAwMDAwNEFDODAwMDAwMEM4MEUKLToxMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA0QUM4QzYKLToxMDAwMjAwMDAwMDAwMDMwMDAwMDRCOTAwODAwMDA4MDA4MDAwMDAwMzUKLToxMDAwMzAwMDAwMDA1M0E4MDAwMDRCQzAwODAwNTU0MDAwMDAwMDg0OTkKLToxMDAwNDAwMDAwMDA5RjY4MDgwMDUzQTgwMDAwMDE2QzAwMDA5RkVDQUUKLToxMDAwNTAwMDA4MDAzMUQ4MDgwMDAwMDAwMDAwNzkwODAwMDBBMTU4MEQKLToxMDAwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA3OTA4MDcKLToxMDAwNzAwMDAwMDAwMTI0MDAwMTFBNjAwODAwMDQ4ODA4MDAwNDAwNDAKLToxMDAwODAwMDAwMDAxM0E0MDAwMTFCODQwMDAwMDAwMDAwMDAwMDAwMTkKLToxMDAwOTAwMDAwMDAwMDAwMDgwMDE3QTQwMDAwMDAwNDAwMDEyRjI4NDEKLToxMDAwQTAwMDA4MDAwMDk4MDgwMDAwMDAwMDAwM0FGQzAwMDEyRjJDMTYKLToxMDAwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAzQUZDMDIKLTowODAwQzAwMDAwMDAwMDMwMDAwMTZBMjg3NQotOjA4MDBDODAwMEEwMDAwM0UwMDAwMDAwMEU4Ci06MTAwMEQwMDAwMDAwMDAwMDAwMDAwMDBENjM2RjZEMzQyRTM2MkUzMURECi06MTAwMEUwMDAzNjAwMDAwMDA0MDYxMDAyMDAwMDAwMDAwMDAwMDAwM0JCCi06MTAwMEYwMDAwMDAwMDAxNDAwMDAwMDMyMDAwMDAwMDMwMDAwMDAwMEI3Ci06MTAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTAwMTEwMDAwMDAwMDAxMDAwMDAwMTM2MDAwMEVBNjAwMDAwMDAwMTRECi06MTAwMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEM3Ci06MTAwMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTAwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTAwMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTAwMTYwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTAwMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTAwMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDVGCi06MTAwMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTAwMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTAwMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTAwMUMwMDAwMDAwMDAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDBGCi06MTAwMUQwMDAwMDAwMDAwRDNDMDIwODAwMjQ0MjRCMjAzQzAzMDgwMEI0Ci06MTAwMUUwMDAyNDYzNEMxOEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDFBCi06MTAwMUYwMDAyNDQyMDAwNDNDMUQwODAwMzdCRDlGRkMwM0EwRjAyMUYxCi06MTAwMjAwMDAzQzEwMDgwMDI2MTAwMEY4M0MxQzA4MDAyNzlDNEIyMERFCi06MTAwMjEwMDAwRTAwMDI3MzAwMDAwMDAwMDAwMDAwMEQyN0JERkZFODgzCi06MTAwMjIwMDAzQzAyODAwMEFGQjAwMDEwQUZCRjAwMTQzNDUwMDEwMDlBCi06MTAwMjMwMDA5MjAyMDAwOTEwNDAwMDFBMjQwMzAwMDEzQzAyMDgwMDQ5Ci06MTAwMjQwMDA4QzQyMDAyMDEwNDAwMDE2MDAwMDE4MjEwRTAwMEQ3MTk1Ci06MTAwMjUwMDAwMDAwMDAwMDk2MDMwMDA4M0MwNjA4MDA5NEM2NEJGRTEwCi06MTAwMjYwMDA4RTA0MDAxODhGODIwMDJDOTYwNTAwMEMwMDAzMUMwMEUxCi06MTAwMjcwMDAwMDY2MTgyNUFDNDQwMDAwQUM0NTAwMDQyNDA0MDAwMUNECi06MTAwMjgwMDBBQzQwMDAwOEFDNDAwMDBDQUM0MDAwMTBBQzQwMDAxNDg2Ci06MTAwMjkwMDBBQzQwMDAxODBFMDAwRDk4QUM0MzAwMUMwMDAwMTgyMTYzCi06MTAwMkEwMDA4RkJGMDAxNDhGQjAwMDEwMDA2MDEwMjEwM0UwMDAwODIxCi06MTAwMkIwMDAyN0JEMDAxODI3QkRGRkU4QUZCRjAwMTAzQzAyODAwMDNCCi06MTAwMkMwMDA5NDQyMDEwODMwNDM3MDAwMjQwMjIwMDAxMDYyMDAwQUFBCi06MTAwMkQwMDAyODY0MjAwMTU0ODAwMDEyOEZCRjAwMTAyNDAyNDAwMEM3Ci06MTAwMkUwMDAxMDYyMDAwODI0MDI2MDAwMTA2MjAwMEE4RkJGMDAxMDM0Ci06MTAwMkYwMDAwQTAwMDA5NzAwMDAxMDIxOEZCRjAwMTAwQTAwMDA1NTZGCi06MTAwMzAwMDAyN0JEMDAxODBFMDAwNDMzMDAwMDAwMDAwQTAwMDA5NjBDCi06MTAwMzEwMDA4RkJGMDAxMDBFMDAwQzgxMDAwMDAwMDA4RkJGMDAxMDg2Ci06MTAwMzIwMDAwMDAwMTAyMTAzRTAwMDA4MjdCRDAwMTgzQzAyMDgwMDZGCi06MTAwMzMwMDA4QzQyMDAyMDI3QkRGRkU4MTA0MDAwMjhBRkJGMDAxMDBFCi06MTAwMzQwMDAwRTAwMEQ3MTAwMDAwMDAwM0MwNTgwMDA5NEEyMDEwODIxCi06MTAwMzUwMDA5NEEzMDEwQzhGODYwMDJDMzA0MjAwM0UzMDYzRkZGRkQ3Ci06MTAwMzYwMDAwMDAyMTQwMDAwNDMxMDI1QUNDMjAwMDA4Q0EyMDEwMDYyCi06MTAwMzcwMDAzQzA3MDgwMDk0RTc0QkZFOEZCRjAwMTBBQ0MyMDAwNDlFCi06MTAwMzgwMDA5NEEzMDExNjk0QTQwMTBFM0MwMjIwMDAwMDAzMUMwMDVCCi06MTAwMzkwMDAzMDg0RkZGRjAwNjQxODI1QUNDMzAwMDgwMEUyMzgyNTU0Ci06MTAwM0EwMDA5NEEyMDExMDk0QTMwMTEyMjQwNDAwMDEwMDAyMTQwMDdECi06MTAwM0IwMDAzMDYzRkZGRjAwNDMxMDI1QUNDMjAwMEM5NEEyMDExNDZGCi06MTAwM0MwMDAyN0JEMDAxODMwNDJGRkZGQUNDMjAwMTBBQ0MwMDAxNEMzCi06MTAwM0QwMDBBQ0MwMDAxODBBMDAwRDk4QUNDNzAwMUM4RkJGMDAxMEZECi06MTAwM0UwMDAwM0UwMDAwODI3QkQwMDE4M0MwNjgwMDA4Q0MyMDJCODVDCi06MTAwM0YwMDAyNDAzMDAwMTA0NDEwMDA4MDA4MDI4MjEzQzAyMDgwMDc5Ci06MTAwNDAwMDA4QzQyMDA2MDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA2MEU0Ci06MTAwNDEwMDAwM0UwMDAwODAwNjAxMDIxOEM4MzAwMjA5NDgyMDAxNjA1Ci06MTAwNDIwMDBBQ0MzMDI4MDI0NDJGRkZDQTRDMjAyODQzQzAyMDgwMDQ4Ci06MTAwNDMwMDA4QzQyMDA1QzhDODQwMDA0OTRBMzAwMEUyNDQyMDAwMUQyCi06MTAwNDQwMDAzQzAxMDgwMEFDMjIwMDVDM0MwMjEwMDBBNEMzMDI4NjAwCi06MTAwNDUwMDBBQ0M0MDI4ODAwMDAxODIxQUNDMjAyQjgwM0UwMDAwODU2Ci06MTAwNDYwMDAwMDYwMTAyMTNDMDIwODAwOEM0MjAwMjAyN0JERkZFOEZDCi06MTAwNDcwMDAxMDQwMDAyQkFGQkYwMDEwMEUwMDBENzEwMDAwMDAwMEY3Ci06MTAwNDgwMDAzQzA1ODAwMDk0QTIwMTA4OTRBMzAxMEM4Rjg2MDAyQ0U3Ci06MTAwNDkwMDAzMDQyMDAzRTMwNjNGRkZGMDAwMjE0MDAwMDQzMTAyNThECi06MTAwNEEwMDBBQ0MyMDAwMDhDQTIwMTAwM0MwNzA4MDA5NEU3NEJGRUEwCi06MTAwNEIwMDA4RkJGMDAxMEFDQzIwMDA0OTRBMzAxMTY5NEE0MDEwRUQ3Ci06MTAwNEMwMDAzQzAyMjAwMDAwMDMxQzAwMzA4NEZGRkYwMDY0MTgyNTVDCi06MTAwNEQwMDBBQ0MzMDAwODAwRTIzODI1OTRBMjAxMTA5NEEzMDExMkQ1Ci06MTAwNEUwMDAyNDA0MDAwMTAwMDIxNDAwMzA2M0ZGRkYwMDQzMTAyNUM0Ci06MTAwNEYwMDBBQ0MyMDAwQzk0QTIwMTE0MjdCRDAwMTgzMDQyRkZGRkNCCi06MTAwNTAwMDBBQ0MyMDAxMDhDQTIwMTE4QUNDMjAwMTQ5MEEyMDEwQjY2Ci06MTAwNTEwMDAzMDQyMDBGRkFDQzIwMDE4MEEwMDBEOThBQ0M3MDAxQ0E2Ci06MTAwNTIwMDA4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZFMEMzCi06MTAwNTMwMDBBRkIwMDAxMDNDMTA4MDAwQUZCMjAwMThBRkJGMDAxQzdECi06MTAwNTQwMDBBRkIxMDAxNDM2MTIwMTAwOTI0MzAwMEIyNDAyMDAxQUNFCi06MTAwNTUwMDA5NjUxMDAwODE0NjIwMDVCMDAwMDI4MjEzMjIyMDAwMTNECi06MTAwNTYwMDAxMDQwMDAxODAwMDAwMDAwOEU0MjAwMDAwMDAyMjM0MEVFCi06MTAwNTcwMDAzQzAyMDAzRjM0NDJGRkZGMDA0NDEwMkIxMDQwMDAwNEI3Ci06MTAwNTgwMDAzQzAzMDA0MDk2NDIwMDE0MEEwMDAxM0IwMDgzMjAyMUY2Ci06MTAwNTkwMDA4RTAzMDEwMDI0MDIwMTAwNTQ2MjAwMDY5NjQyMDAxNEZBCi06MTAwNUEwMDAzQzAyODAwODk0NDIwMDA0MzA0MjAwMEYwMDAyMjUwMDAzCi06MTAwNUIwMDA5NjQyMDAxNDAwODIxMDI1QUUwMjAwODAwQTAwMDE2RkVFCi06MTAwNUMwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwMjAxMDQwMDAyODdGCi06MTAwNUQwMDAwMDAwMDAwMDBFMDAwRDcxMDAwMDAwMDA5NjAyMDEwOEVFCi06MTAwNUUwMDA5NjAzMDEwQzhGODUwMDJDMzA0MjAwM0UzMDYzRkZGRkU0Ci06MTAwNUYwMDAwMDAyMTQwMDAwNDMxMDI1QUNBMjAwMDA4RTAyMDEwMDhFCi06MTAwNjAwMDAzQzA2MDgwMDk0QzY0QkZFQUNBMjAwMDQ5NjAzMDExNkZCCi06MTAwNjEwMDA5NjA0MDEwRTNDMDIyMDAwMDAwMzFDMDAzMDg0RkZGRjAyCi06MTAwNjIwMDAwMDY0MTgyNUFDQTMwMDA4MDBDMjMwMjU5NjAyMDExMDEyCi06MTAwNjMwMDA5NjAzMDExMjI0MDQwMDAxMDAwMjE0MDAzMDYzRkZGRjNFCi06MTAwNjQwMDAwMDQzMTAyNUFDQTIwMDBDOTYwMjAxMTQzMDQyRkZGRkJCCi06MTAwNjUwMDBBQ0EyMDAxMDhFMDIwMTE4QUNBMjAwMTQ5MjAyMDEwQjkxCi06MTAwNjYwMDAzMDQyMDBGRkFDQTIwMDE4MEUwMDBEOThBQ0E2MDAxQzkyCi06MTAwNjcwMDAzQzAyMDgwMDhDNDIwMDQwMjQ0MjAwMDEzQzAxMDgwMDdBCi06MTAwNjgwMDBBQzIyMDA0MDNDMDMwODAwOEM2MzAwNDQzMjIyMDAwMjhDCi06MTAwNjkwMDAzMjI0MDAwNDI0NjMwMDAxM0MwMTA4MDBBQzIzMDA0NDIwCi06MTAwNkEwMDAxMDgwMDAwODAwMDIyODJCMDI0MDIwMjE4RkJGMDAxQzcwCi06MTAwNkIwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMDBDODZDCi06MTAwNkMwMDAyN0JEMDAyMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDBGCi06MTAwNkQwMDA4RkIwMDAxMDAwQTAxMDIxMDNFMDAwMDgyN0JEMDAyMDBCCi06MTAwNkUwMDAyN0JERkZFMDNDMDU4MDAwQUZCMTAwMTRBRkJGMDAxODhDCi06MTAwNkYwMDBBRkIwMDAxMDM0QjEwMTAwOTIyMzAwMEIyNDAyMDAwM0JDCi06MTAwNzAwMDAxNDYyMDA0Mzk2MzAwMDA4MzIwMjAwMDExMDQwMDAxNkM3Ci06MTAwNzEwMDAzQzAyMDAzRjhFMjMwMDAwMzQ0MkZGRkYwMDAzMjM0MEQxCi06MTAwNzIwMDAwMDQ0MTAyQjUwNDAwMDA1MjQwMjAxMDA5NjIyMDAxNEMyCi06MTAwNzMwMDAzQzAzMDA0MDBBMDAwMUE0MDA4MzIwMjE1NDYyMDAwNjBCCi06MTAwNzQwMDA5NjIyMDAxNDNDMDI4MDA4OTQ0MjAwMDQzMDQyMDAwRkJDCi06MTAwNzUwMDAwMDAyMjUwMDk2MjIwMDE0MDA4MjEwMjVBQ0EyMDA4MDIxCi06MTAwNzYwMDAwQTAwMDFBRjAwMDAwMDAwMEUwMDAwOTkwMDAwMDAwMDI4Ci06MTAwNzcwMDAzQzAyMDgwMDhDNDIwMDQwMjQ0MjAwMDEzQzAxMDgwMDc5Ci06MTAwNzgwMDBBQzIyMDA0MDNDMDIwODAwOEM0MjAwNDQzMjAzMDAwNENBCi06MTAwNzkwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNDQxMDYwMDAwNzI0Ci06MTAwN0EwMDAzMjAyMDAwMjAyMjAyMDIxOEZCRjAwMTg4RkIxMDAxNEY2Ci06MTAwN0IwMDA4RkIwMDAxMDBBMDAwMEM4MjdCRDAwMjAxMDQwMDAxNUFGCi06MTAwN0MwMDA4RkJGMDAxODNDMDQ4MDAwOEM4MzAxMDQzQzAyNjAyMDMxCi06MTAwN0QwMDBBQzQzMDAxNDhDNDIwMDA0MjQwMzAxRkUzMDQyMDNGRkFBCi06MTAwN0UwMDAxNDQzMDAwQzhGQkYwMDE4OEM4MjAxMDAwMDAyMTlDMjU0Ci06MTAwN0YwMDAyNDYyRkZGQzJDNDIwMDA4MTA0MDAwMDMyNDA0MDAwMjg1Ci06MTAwODAwMDAyNDYyRkZGRDAwNDQyMDA0M0MwMjYwMDBBQzQ0NjkxNEYzCi06MTAwODEwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMDAwMTAyMTlFCi06MTAwODIwMDAwM0UwMDAwODI3QkQwMDIwM0MwNDgwMDA4QzgzMDEwMDA5Ci06MTAwODMwMDAyNDAyMDEwMDUwNjIwMDAzM0MwMjgwMDgwMDAwMDAwRDA5Ci06MTAwODQwMDAzQzAyODAwODk0NDMwMDA0MDAwMDEwMjEzMDYzMDAwRjM0Ci06MTAwODUwMDAwMDAzMUQwMDAzRTAwMDA4QUM4MzAwODAzQzAyODAwODE4Ci06MTAwODYwMDAzNDQyMDA4MDkwNDIwMDAwMDNFMDAwMDhBRjgwMDAwMEE2Ci06MTAwODcwMDAwM0UwMDAwODAwMDAxMDIxMjdCREZGRTgzQzAyODAwMEQzCi06MTAwODgwMDBBRkJGMDAxNEFGQjAwMDEwOEM0MzAxMDBBQzQzMDAyMDk4Ci06MTAwODkwMDA4QzQzMDEwNEFDNDMwMEE4OTA1MDAxMEIwRTAwMDFFNTBECi06MTAwOEEwMDAzMjEwMDBGRjNDMDIwODAwMjQ0MjRCNTgwMDEwMTg4MDEwCi06MTAwOEIwMDAyRTEwMDAxRDE2MDAwMDA1MDA2MjEwMjEwRTAwMDFFQTM2Ci06MTAwOEMwMDAwMDQwMTgyMTBBMDAwMjA1MDAwMDAwMDA4QzQyMDAwMEQwCi06MTAwOEQwMDAwMDQwRjgwOTAwMDAwMDAwMDA0MDE4MjEzQzAyMDgwMDE4Ci06MTAwOEUwMDA4QzQyMDAzNDEwNjAwMDA1MjQ0NDAwMDEzQzAyODAwMDZBCi06MTAwOEYwMDA4QzQzMDEwNDNDMDI2MDIwQUM0MzAwMTQ4RkJGMDAxNDAxCi06MTAwOTAwMDA4RkIwMDAxMDNDMDM0MDAwM0MwMjgwMDAyN0JEMDAxODVGCi06MTAwOTEwMDBBQzQzMDEzODNDMDEwODAwQUMyNDAwMzQwM0UwMDAwODdCCi06MTAwOTIwMDAwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDBCCi06MTAwOTMwMDAzQzEwODAwMDhFMDIwMTQwMEUwMDAxRTVBRTAyMDAyMDU2Ci06MTAwOTQwMDAwRTAwMDM5OTAwMDAwMDAwM0MwNDA4MDAyNDg0MDAzOEQ1Ci06MTAwOTUwMDA4QzgyMDAwMDNDMDM0MDAwQUUwMzAxNzg4RkJGMDAxNDdFCi06MTAwOTYwMDA4RkIwMDAxMDI0NDIwMDAxMjdCRDAwMTgwM0UwMDAwOEVBCi06MTAwOTcwMDBBQzgyMDAwMDI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDhECi06MTAwOTgwMDAzQzEwODAwMDhFMDIwMTgwMEUwMDAxRTVBRTAyMDAyMEM2Ci06MTAwOTkwMDA4RTAzMDE4MDI0MDIwRjAwNTQ2MjAwMDgzQzAyODAwODhDCi06MTAwOUEwMDA4RTAyMDE4ODNDMDMwMEUwMzA0MkZGRkYwMDQzMTAyNTI3Ci06MTAwOUIwMDBBRTAyMDA4MDBBMDAwMjRBM0MwMjgwMDAzNDQyMDA4MEZECi06MTAwOUMwMDA5MDQyMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwODBFCi06MTAwOUQwMDAzQzAyODAwMDBFMDAwMzc5MDAwMDAwMDAxNDQwMDAwNDc3Ci06MTAwOUUwMDAzQzAyODAwMDBFMDAwOTY3MDAwMDAwMDAzQzAyODAwMDBECi06MTAwOUYwMDAzQzAzNDAwMEFDNDMwMUI4M0MwMjA4MDA4QzQyMDAzQzgwCi06MTAwQTAwMDA4RkJGMDAxNDhGQjAwMDEwMjQ0MjAwMDEzQzAxMDgwMDg5Ci06MTAwQTEwMDBBQzIyMDAzQzAzRTAwMDA4MjdCRDAwMTgwM0UwMDAwOEZBCi06MTAwQTIwMDAwMDAwMTAyMTNDMDU4MDAwMzRBNDAxMDA5NDgyMDAwOERECi06MTAwQTMwMDAzMDQzMDAwMjMwNDIwMDA0MTA0MDAwMDMwMDAwMDAwMDc4Ci06MTAwQTQwMDAwQTAwMDBDODAwMDAwMDAwMTA2MDAwMDUyNDA0MDAwMTM2Ci06MTAwQTUwMDAzQzAyMDgwMDhDNDIwMDg0MEEwMDAyNkYyNDQyMDAwMTFDCi06MTAwQTYwMDA4Q0EzMDEwNDhGODIwMDBDMTA0MzAwMDgwMDAwMjAyMTk5Ci06MTAwQTcwMDA4Q0EzMDEwNDNDMDIwODAwOEM0MjAwODRBRjgzMDAwQzZDCi06MTAwQTgwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwODQwM0UwMDAwODdECi06MTAwQTkwMDAwMDgwMTAyMTI3QkRGRkU4M0MwMzYwMTBBRkJGMDAxNEE5Ci06MTAwQUEwMDBBRkIwMDAxMDhDNjU1MDAwMjQwMkZGN0YzQzA0ODAwMDMyCi06MTAwQUIwMDAwMEEyMjgyNDM0QTUzODBDMjQwMjAwMzdBQzY1NTAwMDZECi06MTAwQUMwMDBBQzgyMDAwODI0MDIwQzgwQUM4MjAwMjQzQzA2MDgwMEEyCi06MTAwQUQwMDAyNEM2MDdBODNDMDIwODAwMjQ0MjRCNTgyNDA1MDAxQ0U5Ci06MTAwQUUwMDAyNEE1RkZGRkFDNDYwMDAwMDRBMUZGRkQyNDQyMDAwNDQyCi06MTAwQUYwMDAzQzAyMDgwMDI0NDIwMUVDM0MwMTA4MDBBQzIyNEI2MDlGCi06MTAwQjAwMDAzQzAyMDgwMDI0NDIwNjE4M0MwMTA4MDBBQzIyNEI2NDU5Ci06MTAwQjEwMDAzQzAyMDgwMDI0NDIwRDEwM0MwMTA4MDBBQzIyNEJBMDBFCi06MTAwQjIwMDAzQzAyMDgwMDI0NDIwNDY0M0MwMzA4MDAyNDYzMDk1NDg2Ci06MTAwQjMwMDAzQzA0MDgwMDI0ODQwOTVDM0MwNTA4MDAyNEE1MkM5NDhFCi06MTAwQjQwMDAzQzAxMDgwMEFDMjI0QkMwM0MwMjA4MDAyNDQyMDc2MDc0Ci06MTAwQjUwMDAzQzAxMDgwMEFDMjY0QkE4M0MwMTA4MDBBQzI1NEJCNDc2Ci06MTAwQjYwMDAzQzAxMDgwMEFDMjM0QkJDM0MwMTA4MDBBQzI0NEJDNDQ2Ci06MTAwQjcwMDAzQzAxMDgwMEFDMjI0QkM4M0MwMTA4MDBBQzIzNEI1Qzk0Ci06MTAwQjgwMDAzQzAxMDgwMEFDMjA0QjY4M0MwMTA4MDBBQzIwNEI2Q0Q5Ci06MTAwQjkwMDAzQzAxMDgwMEFDMjA0QjcwM0MwMTA4MDBBQzIwNEI3NEI5Ci06MTAwQkEwMDAzQzAxMDgwMEFDMjA0Qjc4M0MwMTA4MDBBQzIwNEI3Qzk5Ci06MTAwQkIwMDAzQzAxMDgwMEFDMjA0QjgwM0MwMTA4MDBBQzI0NEI4NDc1Ci06MTAwQkMwMDAzQzAxMDgwMEFDMjA0Qjg4M0MwMTA4MDBBQzIwNEI4QzU5Ci06MTAwQkQwMDAzQzAxMDgwMEFDMjA0QjkwM0MwMTA4MDBBQzIwNEI5NDM5Ci06MTAwQkUwMDAzQzAxMDgwMEFDMjA0Qjk4M0MwMTA4MDBBQzI2NEI5QzEzCi06MTAwQkYwMDAzQzAxMDgwMEFDMjY0QkE0M0MwMTA4MDBBQzIwNEJBQ0U3Ci06MTAwQzAwMDAzQzAxMDgwMEFDMjU0QkIwM0MwMTA4MDBBQzIzNEJCOEJDCi06MTAwQzEwMDAwRTAwMDU1QTAwMDAwMDAwM0MwMjgwMDAzNDQyMDA3MEMzCi06MTAwQzIwMDA4QzQyMDAwMEFGODIwMDEwM0MwMzA4MDA4QzYzMDAyMDVGCi06MTAwQzMwMDA4RjgyMDAwNDEwNDMwMDA0M0MwNTgwMDAwRTAwMEQzNzM1Ci06MTAwQzQwMDBBRjgzMDAwNDNDMDU4MDAwMzRBOTAwNzA4RDI4MDAwMEFCCi06MTAwQzUwMDA4Rjg0MDAxMDNDMDcwODAwOENFNzAwQkMzQzA2MDgwMEFECi06MTAwQzYwMDA4Q0M2MDBCODAxMDQyMDIzMDAwMDEwMjEwMEU0MzgyMUM0Ci06MTAwQzcwMDAwMEMyMzAyMTAwRTQyMDJCMDBDNDMwMjEzQzAxMDgwMEQ4Ci06MTAwQzgwMDBBQzI3MDBCQzNDMDEwODAwQUMyNjAwQjg4Q0IwMDAwMENBCi06MTAwQzkwMDAzMjAyMDAwNzEwNDBGRkU0QUY4ODAwMTA4RDI2MDAwMEVDCi06MTAwQ0EwMDAzQzA1MDgwMDhDQTUwMEJDM0MwNDA4MDA4Qzg0MDBCOEZFCi06MTAwQ0IwMDAwMEM4MzAyMzAwQTYyODIxMDAwMDEwMjEwMEE2MzAyQkY4Ci06MTAwQ0MwMDAwMDgyMjAyMTAwODYyMDIxMzIwNzAwMDEzQzAxMDgwMDFCCi06MTAwQ0QwMDBBQzI1MDBCQzNDMDEwODAwQUMyNDAwQjgxMEUwMDAwNEM2Ci06MTAwQ0UwMDAzMjAyMDAwMjBFMDAwMUVDMDAwMDAwMDAzMjAyMDAwMjlECi06MTAwQ0YwMDAxMDQwMDAwNDMyMDIwMDA0MEUwMDAyMTcwMDAwMDAwMDQxCi06MTAwRDAwMDAzMjAyMDAwNDUwNDBGRkM1M0MwMjgwMDAwRTAwMDIyQjVFCi06MTAwRDEwMDAwMDAwMDAwMDBBMDAwMkQ1M0MwMjgwMDAzQzAyOTAwMDY2Ci06MTAwRDIwMDAzNDQyMDAwMTAwODIyMDI1M0MwMjgwMDBBQzQ0MDAyMEI3Ci06MTAwRDMwMDAzQzAzODAwMDhDNjIwMDIwMDQ0MEZGRkUwMDAwMDAwMEE1Ci06MTAwRDQwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDAzNDQzMDAwMTgyCi06MTAwRDUwMDAwMDgzMjAyNTAzRTAwMDA4QUM0NDAwMjAyN0JERkZFMDBECi06MTAwRDYwMDBBRkIxMDAxNEFGQjAwMDEwMDA4MDg4MjFBRkJGMDAxOEYxCi06MTAwRDcwMDAwRTAwMDMxNTMwQjAwMEZGOEY4M0ZGQUMwMjIwMjAyMTRFCi06MTAwRDgwMDA5MDYyMDAyNTAyMDI4MDI1QTA3MDAwMjU4QzcwMDAxODVBCi06MTAwRDkwMDAzQzAyODAwMDBFMDAwMzIwMDIwMjgwMjQxNjAwMDAwQTlDCi06MTAwREEwMDA4RkJGMDAxODNDMDM4MDAwOEM2MjAxRjgwNDQwRkZGRUY2Ci06MTAwREIwMDAyNDAyMDAwMkFDNzEwMUMwQTA2MjAxQzQzQzAyMTAwMDE4Ci06MTAwREMwMDBBQzYyMDFGODhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDEzCi06MTAwREQwMDAwM0UwMDAwODI3QkQwMDIwMjdCREZGQjhBRkJGMDA0NEQ3Ci06MTAwREUwMDBBRkIwMDA0MDNDMDc4MDAwOENFNjAxMDQ4RjgyRkZBODcyCi06MTAwREYwMDBBRkE2MDAyODhDNDUwMDIwQUZBNTAwMkM4QzQ0MDAzQ0Y5Ci06MTAwRTAwMDBBRkE0MDAzMDhDNDMwMDQwQUZBMzAwMzQ4QzQyMDA0Q0IwCi06MTAwRTEwMDBBRkE2MDAxMEFGQTUwMDE0QUZBMjAwMjBBRkEyMDAzODBCCi06MTAwRTIwMDAzQzAyMDgwMDhDNDIwMDIwQUZBNDAwMThBRkEzMDAxQ0I1Ci06MTAwRTMwMDA4Q0YwMDEwMDEwNDAwMDE5OEZCRjAwNDQwRTAwMEQ3MUFFCi06MTAwRTQwMDAwMDAwMDAwMDhGODMwMDJDM0MwNTA4MDA5NEE1NEJGRTk5Ci06MTAwRTUwMDAzQzAyNDAxOEFDNzAwMDAwMDBBMjI4MjU4RkEyMDAxMEIwCi06MTAwRTYwMDAyNDA0MDAwMUFDNjIwMDA0OEZBMjAwMTRBQzYyMDAwOEVDCi06MTAwRTcwMDA4RkEyMDAxOEFDNjIwMDBDOEZBMjAwMUNBQzYyMDAxMEE0Ci06MTAwRTgwMDA4RkEyMDAyMEFDNjIwMDE0OEZBMjAwMjRBQzYyMDAxODc0Ci06MTAwRTkwMDAwRTAwMEQ5OEFDNjUwMDFDOEZCRjAwNDQ4RkIwMDA0MDYxCi06MTAwRUEwMDAwMDAwMTAyMTAzRTAwMDA4MjdCRDAwNDgyN0JERkZFODJGCi06MTAwRUIwMDBBRkJGMDAxMDNDMDM4MDAwOTQ2MjAxODQzMDQyMDIwMDA2Ci06MTAwRUMwMDAxMDQwMDAwNTAwMDAyMDIxMEUwMDBGRTMwMDAwMDAwMDhDCi06MTAwRUQwMDAwQTAwMDM4RjI0MDQwMDAxOEM2MjAxODgwNDQwMDAwQTg4Ci06MTAwRUUwMDA4RkJGMDAxMDhDNjIwMTg4M0MwM0ZGMDAwMDQzMTAyNDc4Ci06MTAwRUYwMDAzQzAzMDQwMDE0NDMwMDA0MjQwNDAwMDE4RjgyRkZBQzZGCi06MTAwRjAwMDA5MDQyMDAwODhGQkYwMDEwMDA4MDEwMjEwM0UwMDAwODBECi06MTAwRjEwMDAyN0JEMDAxODhGODJGRkIwMjQwNTAwMDFBMDQwMDAxQUYxCi06MTAwRjIwMDAzQzAyODAwMDBBMDAwMzI1OEM0NDAxNDAyN0JERkZFMEZECi06MTAwRjMwMDBBRkIxMDAxNDhGOTFGRkFDQUZCRjAwMUNBRkIyMDAxODZGCi06MTAwRjQwMDBBRkIwMDAxMDkyMjIwMDAwMjQwMzAwMjAzMDQyMDBGRkM2Ci06MTAwRjUwMDAxMDQzMDAwQzNDMDI4MDAwOTIyMjAwMDAyNDAzMDAzMDY5Ci06MTAwRjYwMDAzMDQyMDBGRjEwNDMwMDA3M0MwMjgwMDA5MjIyMDAwMDQ0Ci06MTAwRjcwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwODE4RkJGMDAxQzQ3Ci06MTAwRjgwMDAzQzAyODAwMDkwNDIwMTQ4MzA0MjAwRkYyNDQzRkZGRkIyCi06MTAwRjkwMDAyQzYyMDAwNTEwNDAwMDdBOEZCRjAwMUMwMDAzMTA4MEY3Ci06MTAwRkEwMDAzQzAzMDgwMDI0NjM0QUQ4MDA0MzEwMjE4QzQyMDAwMDBGCi06MTAwRkIwMDAwMDQwMDAwODAwMDAwMDAwM0MxMTgwMDA4RTI0MDE0MDI5Ci06MTAwRkMwMDAwRTAwMDMxNThGOTJGRkFDOEU1MDAwMEM4RTIyMDE0NDUwCi06MTAwRkQwMDAxNjAyMDAwMjI0MDIwMDAxQUU0MjAwMEMwRTAwMDMyMEEzCi06MTAwRkUwMDA4RTI0MDE0MDhFMjIwMTQ0MTQ1MDAwMDY4RkJGMDAxQzQ1Ci06MTAwRkYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMEY1MThCCi06MTAxMDAwMDAyN0JEMDAyMDhFNDIwMDBDMEEwMDA0MjcwMDAwMDAwMENCCi06MTAxMDEwMDA5NjIyMDAxMDNDMDQ4MDAwOEM4MzAxNDQzMDQyRkZGRjg0Ci06MTAxMDIwMDAxNDYyMDAwOTAwMDAwMDAwMjQwMjAwMDFBNjIyMDAxMDQyCi06MTAxMDMwMDA4QzgyMDE0MEFDODIwMjAwM0MwMjEwMDBBQzgyMDIzODdCCi06MTAxMDQwMDAwQTAwMDQyRThGQkYwMDFDOTYyMjAwMTAwQTAwMDQyN0ZECi06MTAxMDUwMDAwMDAwMDAwMDkyMjIwMDAwMjQwMzAwMjAzMDQyMDBGRjI0Ci06MTAxMDYwMDAxNDQzMDAwQjNDMTI4MDAwOTYyMjAwMTIzQzAzODAwMEM3Ci06MTAxMDcwMDA4QzYzMDE0NDMwNDJGRkZGMTQ2MjAwMTgwMDAwMDAwMDNFCi06MTAxMDgwMDAyNDAyMDAwMUE2MjIwMDEyMEEwMDA0MDA4RkJGMDAxQ0U3Ci06MTAxMDkwMDA4RTQ0MDE0MDBFMDAwMzE1MDAwMDAwMDA5NjIyMDAxMjRECi06MTAxMEEwMDA4RTQzMDE0NDMwNTBGRkZGMTYwMzAwMDIyNDAyMDAwMTZBCi06MTAxMEIwMDBBNjIyMDAxMjBFMDAwMzIwOEU0NDAxNDA4RTQyMDE0NEZECi06MTAxMEMwMDAxNjAyMDAwNjhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEVCCi06MTAxMEQwMDA4RkIwMDAxMDBBMDAwMzkzMjdCRDAwMjA5NjIyMDAxMjUzCi06MTAxMEUwMDAwQTAwMDQyNzAwMDAwMDAwOTYyMjAwMTQzQzAzODAwMDQwCi06MTAxMEYwMDA4QzYzMDE0NDMwNDJGRkZGMTQ2MjAwMDkwMDAwMDAwMENECi06MTAxMTAwMDAyNDAyMDAwMUE2MjIwMDE0OEZCRjAwMUM4RkIyMDAxODE5Ci06MTAxMTEwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDEyNjgyN0JEMDAyMEE0Ci06MTAxMTIwMDA5NjIyMDAxNDBBMDAwNDI3MDAwMDAwMDA5NjIyMDAxNkYwCi06MTAxMTMwMDAzQzAzODAwMDhDNjMwMTQ0MzA0MkZGRkYxNDYyMDAwOENFCi06MTAxMTQwMDAyNDAyMDAwMUE2MjIwMDE2OEZCRjAwMUM4RkIyMDAxOEQ3Ci06MTAxMTUwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBCMEIyN0JEMDAyMEM4Ci06MTAxMTYwMDA5NjIyMDAxNjE0NDAwMDA2OEZCRjAwMUMzQzAyMDgwMEE3Ci06MTAxMTcwMDA4QzQyMDA3MDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA3MDQ3Ci06MTAxMTgwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODc4Ci06MTAxMTkwMDAyN0JEMDAyMDI3QkRGRkUwM0MwMjgwMDBBRkIxMDAxNDU2Ci06MTAxMUEwMDBBRkJGMDAxQ0FGQjIwMDE4QUZCMDAwMTAzNDUxMDEwMDQ3Ci06MTAxMUIwMDA5MjIzMDAwOThDNTAwMTAwMjQwMjAwMUYxMDYyMDBBQTMzCi06MTAxMUMwMDAyODYyMDAyMDEwNDAwMDE4MjQwMjAwMzgyODYyMDAwQTFCCi06MTAxMUQwMDAxMDQwMDAwQzI0MDIwMDBCMjg2MjAwMDgxMDQwMDAyQzc0Ci06MTAxMUUwMDAwMDAwMDAwMDA0NjAwMTAwMjg2MjAwMDIxNDQwMDAyODkyCi06MTAxMUYwMDAyNDAyMDAwNjEwNjIwMDI2OEZCRjAwMUMwQTAwMDU0QTY4Ci06MTAxMjAwMDA4RkIyMDAxODEwNjIwMDYwMjg2MjAwMEIxNDQwMDBGN0QzCi06MTAxMjEwMDA4RkJGMDAxQzI0MDIwMDBFMTA2MjAwNzc4RkIyMDAxOEVFCi06MTAxMjIwMDAwQTAwMDU0QTAwMDAwMDAwMTA2MjAwRDMyODYyMDAzOTVECi06MTAxMjMwMDAxMDQwMDAwQTI0MDIwMDgwMjQwMjAwMzYxMDYyMDBFM0ZECi06MTAxMjQwMDAyODYyMDAzNzEwNDAwMEM1MjQwMjAwMzUxMDYyMDBEODIzCi06MTAxMjUwMDA4RkJGMDAxQzBBMDAwNTRBOEZCMjAwMTgxMDYyMDAyREQzCi06MTAxMjYwMDAyODYyMDA4MTEwNDAwMDA2MjQwMjAwQzgyNDAyMDAzOUQwCi06MTAxMjcwMDAxMDYyMDBDOThGQkYwMDFDMEEwMDA1NEE4RkIyMDAxODE3Ci06MTAxMjgwMDAxMDYyMDBBMjhGQkYwMDFDMEEwMDA1NEE4RkIyMDAxODJFCi06MTAxMjkwMDAzQzAyMDgwMDhDNDIwMDIwMTA0MDAwRDQ4RkJGMDAxQzhDCi06MTAxMkEwMDAwRTAwMEQ3MTAwMDAwMDAwM0MwMjgwMDAzNDQyMDEwMDdECi06MTAxMkIwMDA4QzQ0MDAwMDhGODMwMDJDOTQ0NzAwMDgzQzA1MDgwMEY0Ci06MTAxMkMwMDA5NEE1NEJGRUFDNjQwMDAwOEM0NDAwMDQwMDA3M0MwMDc1Ci06MTAxMkQwMDAwMEU1MzgyNUFDNjQwMDA0OEM0NDAwMTg5NDQ2MDAwQ0VBCi06MTAxMkUwMDBBQzY0MDAwODhDNDUwMDFDMDAwNjM0MDAyNDA0MDAwMTk2Ci06MTAxMkYwMDBBQzY1MDAwQzkwNDIwMDBBMDBDMjMwMjVBQzY2MDAxMEJDCi06MTAxMzAwMDBBQzYwMDAxNEFDNjAwMDE4QUM2NzAwMUMwQTAwMDUwQzRGCi06MTAxMzEwMDA4RkJGMDAxQzNDMDIwODAwOEM0MjAwMjAxMDQwMDBCMzJDCi06MTAxMzIwMDA4RkJGMDAxQzBFMDAwRDcxMDAwMDAwMDA5NjI0MDAwODA1Ci06MTAxMzMwMDAzQzAzMDgwMDk0NjM0QkZFOTYyNTAwMEMwMDA0MjIwMjM3Ci06MTAxMzQwMDA5NjI2MDAwRThGODIwMDJDMDAwNDI2MDAwMDgzMjAyNUE0Ci06MTAxMzUwMDAwMDA1MkMwMDNDMDMwMDgwMDBBNjI4MjUwMDgzMjAyNUUyCi06MTAxMzYwMDBBQzQwMDAwMEFDNDAwMDA0QUM0MDAwMDhBQzQwMDAwQ0I1Ci06MTAxMzcwMDBBQzQ1MDAxMEFDNDAwMDE0QUM0MDAwMThBQzQ0MDAxQzVDCi06MTAxMzgwMDAwQTAwMDUwQjI0MDQwMDAxOTYyMjAwMEMxNDQwMDAxN0VCCi06MTAxMzkwMDA4RjkxRkZBQzkyMjIwMDA1MzA0MjAwMTAxNDQwMDAxM0UwCi06MTAxM0EwMDAwMDAwMDAwMDBFMDAwMzE1MDIwMDIwMjE5MjIyMDAwNTFCCi06MTAxM0IwMDAwMjAwMjAyMTM0NDIwMDEwMEUwMDAzMjBBMjIyMDAwNTZBCi06MTAxM0MwMDA5MjIyMDAwMDI0MDMwMDIwMzA0MjAwRkYxMDQzMDA4NkQ4Ci06MTAxM0QwMDAwMjAwMjAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEIzCi06MTAxM0UwMDA4RkIwMDAxMDBBMDAxMDRDMjdCRDAwMjAwMDAwMDAwRDM3Ci06MTAxM0YwMDAwQTAwMDU0OThGQkYwMDFDM0MwMjA4MDA4QzQyMDAyMEY3Ci06MTAxNDAwMDAxMDQwMDA3QThGQkYwMDFDMEUwMDBENzEwMDAwMDAwMDFDCi06MTAxNDEwMDA4RTIyMDAwNDhGODMwMDJDOTYyNDAwMEMzQzA1MDgwMENCCi06MTAxNDIwMDA5NEE1NEJGRUFDNjIwMDAwM0MwMjgwMDg5NDQyMDAyQzY0Ci06MTAxNDMwMDAwMDA0MjQwMDMwNDJGRkZGMDA4MjIwMjUzQzAyNDAwRUMxCi06MTAxNDQwMDAwMEEyMjgyNUFDNjQwMDA0QUM2MDAwMDhBQzYwMDAwQzZECi06MTAxNDUwMDBBQzYwMDAxMEFDNjAwMDE0QUM2MDAwMThBQzY1MDAxQ0ZGCi06MTAxNDYwMDAwQTAwMDUwQjI0MDQwMDAxMEUwMDAzMTUwMjAwMjAyMUQwCi06MTAxNDcwMDA4RjkyRkZCMDAyMDAyMDIxMEUwMDAzMjBBNjQwMDAwQzM2Ci06MTAxNDgwMDAwMjAwMjAyMTBFMDAwMzI1MjQwNTAwMDEzQzAyMDgwMDczCi06MTAxNDkwMDA4QzQyMDAyMDEwNDAwMDU1OEZCRjAwMUMwRTAwMEQ3MUMzCi06MTAxNEEwMDAwMDAwMDAwMDk2MjIwMDBDOEY4MzAwMkM4Rjg0RkZBQzdDCi06MTAxNEIwMDAwMDAyMTQwMEFDNzAwMDAwQUM2MjAwMDRBQzYwMDAwOEQ0Ci06MTAxNEMwMDA4QzgyMDAzODNDMDUwODAwOTRBNTRCRkVBQzYyMDAwQ0YxCi06MTAxNEQwMDA4Qzg2MDAzQzNDMDI0MDFGMDBBMjI4MjVBQzY2MDAxMDEwCi06MTAxNEUwMDA4RTQyMDAwNDI0MDQwMDAxQUM2MjAwMTRBQzYwMDAxOEI5Ci06MTAxNEYwMDBBQzY1MDAxQzhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEE4Ci06MTAxNTAwMDA4RkIwMDAxMDBBMDAwRDk4MjdCRDAwMjA4RjgyRkZBQzFECi06MTAxNTEwMDAyNDAzMDAyMDkwNDIwMDAwMzA0MjAwRkYxMDQzMDAzM0JCCi06MTAxNTIwMDA4RkJGMDAxQzBFMDAwRjM3MDAwMDAwMDAxMDQwMDAyRjdFCi06MTAxNTMwMDA4RkJGMDAxQzNDMDM4MDAwOEM2MjAxRjgwNDQwRkZGRTVBCi06MTAxNTQwMDAyNDAyMDAwMkFDNzAwMUMwQTA2MjAxQzQzQzAyMTAwMDgxCi06MTAxNTUwMDBBQzYyMDFGODBBMDAwNTQ5OEZCRjAwMUMwMjAwMjAyMTdGCi06MTAxNTYwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDE1Ci06MTAxNTcwMDAwQTAwMEU4MDI3QkQwMDIwOTYyNTAwMEMwMjAwMjAyMUM1Ci06MTAxNTgwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEY1Ci06MTAxNTkwMDAwQTAwMEVBNTI3QkQwMDIwMDIwMDIwMjE4RkIyMDAxOEVFCi06MTAxNUEwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBFRDAyN0JEMDAyMEFDCi06MTAxNUIwMDA5MjI1MDAwRDAyMDAyMDIxOEZCMjAwMTg4RkIxMDAxNDc3Ci06MTAxNUMwMDA4RkIwMDAxMDBBMDAwRjIxMjdCRDAwMjAwMjAwMjAyMTRCCi06MTAxNUQwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEE1Ci06MTAxNUUwMDAwQTAwMEVGODI3QkQwMDIwOEZCRjAwMUM4RkIyMDAxODI0Ci06MTAxNUYwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDU5Ci06MTAxNjAwMDAzQzAzODAwMDhDNjIwMjc4MDQ0MEZGRkUyNDAyMDAwMjRBCi06MTAxNjEwMDBBQzY0MDI0MEEwNjIwMjQ0M0MwMjEwMDAwM0UwMDAwOEY3Ci06MTAxNjIwMDBBQzYyMDI3ODAwMDQxMUMwMDNFMDAwMDgyNDQyMDI0MENBCi06MTAxNjMwMDBBMzgwMDAxODAzRTAwMDA4QTM4MDAwMTkzQzAzODAwMDg5Ci06MTAxNjQwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMUNBQzYyMDI0MDc0Ci06MTAxNjUwMDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDAwM0UwMDAwOEUxCi06MTAxNjYwMDBBQzYyMDI3ODAzRTAwMDA4MDAwMDAwMDA5MDgzMDAzMEM0Ci06MTAxNjcwMDAyNDAyMDAwNTAwODA0MDIxMzA2MzAwM0YwMDAwNDgyMTIzCi06MTAxNjgwMDAxNDYyMDAwNTAwMDA1MDIxOTA4MjAwNEM5NDgzMDA0RUFCCi06MTAxNjkwMDAzMDQ5MDBGRjMwNkFGRkZGQUQwMDAwMENBRDAwMDAxMEM0Ci06MTAxNkEwMDBBRDAwMDAyNDk1MDIwMDE0OEQwNTAwMUM4RDA0MDAxODY3Ci06MTAxNkIwMDAzMDQyRkZGRjAwNDkxMDIzMDAwMjExMDAwMDAyMzdDMzJGCi06MTAxNkMwMDAwMDQwMzgyMTAwODYyMDIzMDBBMjEwMkIwMDgyMjAyMzE2Ci06MTAxNkQwMDAwMEE3MjgyM0FEMDUwMDFDQUQwNDAwMThBNTA5MDAxNEJGCi06MTAxNkUwMDBBNTA5MDAyMEE1MEEwMDE2MDNFMDAwMDhBNTBBMDAyMkFCCi06MTAxNkYwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRDhBRkIyMDAxOENCCi06MTAxNzAwMDAzQzEyODAwOEFGQjQwMDIwQUZCMzAwMUNBRkIxMDAxNDhFCi06MTAxNzEwMDBBRkJGMDAyNEFGQjAwMDEwMzY1MTAxMDA5MjIyMDAwQzgwCi06MTAxNzIwMDAzQzE0MDgwMDkyOTQwMEY3MzA0MzAwRkYyNDAyMDAwMUFCCi06MTAxNzMwMDAxMDYyMDAzMTAwODA5ODIxMjQwMjAwMDIxNDYyMDAzNEZCCi06MTAxNzQwMDAzNjUwMDA4MDBFMDAxMjQyMDAwMDAwMDA5MjA0MDA0QzRGCi06MTAxNzUwMDAwRTAwMDU1NzMwODQwMDdGMDI2MjEwMjEyNDAzRkY4MEIxCi06MTAxNzYwMDAwMDQzMTgyNDNDMDQ4MDAwQUM4MzAwOTQ5MjQ1MDAwODk4Ci06MTAxNzcwMDA5MjA0MDA0QzMwNDIwMDdGM0MwMzgwMDYxNDg1MDAwNzMxCi06MTAxNzgwMDAwMDQzODAyMTI0MDJGRkZGQTIyMjAwMTEyNDAyRkZGRjU4Ci06MTAxNzkwMDBBNjIyMDAxMjBBMDAwNUJBMjQwMkZGRkY5NjAyMDAyMENBCi06MTAxN0EwMDBBMjIyMDAxMTk2MDIwMDIyQTYyMjAwMTI4RTAyMDAyNDFDCi06MTAxN0IwMDAzQzA0ODAwOEFFMjIwMDE0MzQ4NTAwODA5MEEyMDA0Q0M2Ci06MTAxN0MwMDAzNDgzMDEwMEEwNjIwMDEwOENBMjAwM0NBQzYyMDAxOEJGCi06MTAxN0QwMDA4QzgyMDA2OEFDNjIwMEU0OEM4MjAwNjRBQzYyMDBFMDQxCi06MTAxN0UwMDA4QzgyMDA2Q0FDNjIwMEU4MjQwMjAwMDFBMEEyMDA2OEI4Ci06MTAxN0YwMDAwQTAwMDVENjNDMDQ4MDA4MEUwMDEyNUIwMDAwMDAwMEMxCi06MTAxODAwMDAzNjQyMDA4MEEwNDAwMDY4MEEwMDA1RDYzQzA0ODAwOEVCCi06MTAxODEwMDBBMjAwMDA2OEEyMDAwMDY5MEEwMDA2MTIzQzAyODAwOENCCi06MTAxODIwMDAzNDgzMDA4MDhDNjIwMDM4MzQ4NTAxMDBBQzYyMDA2QzI3Ci06MTAxODMwMDAyNDAyMDAwMUEwNjIwMDY5OTBBMjAwQzU5MDgzMDAwODA0Ci06MTAxODQwMDAzMDUxMDBGRjMwNzIwMDdGMTIzMjAwMUIzQzA4ODAwOENDCi06MTAxODUwMDAwRTAwMDU1NzAyMjAyMDIxMDI2MjEwMjEyNDAzRkY4MDgwCi06MTAxODYwMDAwMDQzMTgyNDNDMDQ4MDAwQUM4MzAwOTQzMDQyMDA3Rjg1Ci06MTAxODcwMDAzQzAzODAwNjAwNDM4MDIxOEUwMjAwMEMxMDQwMDAwREM2Ci06MTAxODgwMDAwMjAwMjAyMTBFMDAwNTY5MDAwMDAwMDAyNjIyMDAwMTUwCi06MTAxODkwMDAzMDUxMDBGRjkyMDMwMDNDMDIzNDEwMjYwMDAyMTAyQjRFCi06MTAxOEEwMDAwMDAyMTAyMzMwNjMwMDdGMDIyMjg4MjQwQTAwMDVFMDMyCi06MTAxOEIwMDBBMjAzMDAzQzNDMDg4MDA4MzUwNDAxMDA4QzgyMDBEMDYzCi06MTAxOEMwMDAzNTA3MDA4MEFDRTIwMDNDOEM4MjAwRDBBRDAyMDAwMDA1Ci06MTAxOEQwMDA5MEU1MDA0QzkwODYwMEM1OTBFMzAwNEM5MDg0MDBDNUQ0Ci06MTAxOEUwMDAyNDAyRkY4MDAwQTIyODI0MzA2MzAwN0YzMDg0MDBGRkEwCi06MTAxOEYwMDAwMEE2MjgyNTAwNjQxODJBMTA2MDAwMDIzMEE1MDBGRjA5Ci06MTAxOTAwMDAzOEE1MDA4MEEwRTUwMDRDQTEwNTAwMDkzQzAyODAwODM0Ci06MTAxOTEwMDA5MDQzMDAwRTM0NDQwMDgwM0MwNTgwMDBBMDQzMDAwQTQwCi06MTAxOTIwMDA4QzgzMDAxODNDMDI3RkZGMzQ0MkZGRkYwMDYyMTgyNEMyCi06MTAxOTMwMDBBQzgzMDAxODhDQTIwMUY4MDQ0MEZGRkUwMDAwMDAwMEY4Ci06MTAxOTQwMDBBQ0IzMDFDMDhGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzQ0Ci06MTAxOTUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDAyMDAwMjYzCi06MTAxOTYwMDBBMEEyMDFDNDI3QkQwMDI4M0MwMjEwMDAwM0UwMDAwODJCCi06MTAxOTcwMDBBQ0EyMDFGODkwQTIwMDAwMjdCREZGRTBBRkIyMDAxOEIyCi06MTAxOTgwMDAyNDQyMDAwMUEwQTIwMDAwM0MwMzA4MDA4QzYzMDBGNDg0Ci06MTAxOTkwMDAzMDQyMDBGRkFGQjEwMDE0QUZCRjAwMUNBRkIwMDAxMDY5Ci06MTAxOUEwMDAwMEEwODgyMTE0NDMwMDAyMDA4MDkwMjFBMEEwMDAwMDI0Ci06MTAxOUIwMDAwRTAwMDU1NzkyMjQwMDAwOEY5MDAwMUMyNDAzRkY4MDI2Ci06MTAxOUMwMDAwMjAyMTAyMTAwNDMxMDI0M0MwMzgwMDBBQzYyMDAyNDdBCi06MTAxOUQwMDAwRTAwMDU1NzkyMjQwMDAwMDIwMjgwMjEzMjEwMDA3RjgxCi06MTAxOUUwMDAzQzAyODAwQTAyMDI4MDIxQUU1MDAwMDA4RkJGMDAxQzIyCi06MTAxOUYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODAwCi06MTAxQTAwMDAyN0JEMDAyMDk0ODIwMDA2OTA4MzAwMDU4Qzg1MDAwQzgxCi06MTAxQTEwMDA4Qzg2MDAxMDhDODcwMDE4OEM4ODAwMUM4Qzg0MDAyMDE5Ci06MTAxQTIwMDAzQzAxMDgwMEE0MjI0QkQyM0MwMTA4MDBBMDIzNEJEMTZBCi06MTAxQTMwMDAzQzAxMDgwMEFDMjU0QkQ4M0MwMTA4MDBBQzI2NEJEQzJGCi06MTAxQTQwMDAzQzAxMDgwMEFDMjc0QkU0M0MwMTA4MDBBQzI4NEJFODAzCi06MTAxQTUwMDAzQzAxMDgwMEFDMjQ0QkVDMDNFMDAwMDgwMDAwMDAwMDRGCi06MTAxQTYwMDAzQzAyODAwODM0NDIwMTAwOEM0NDAwMzQzQzAzODAwMDc2Ci06MTAxQTcwMDAzNDY1MDQwMEFDNjQwMDM4OEM0MjAwMzhBRjg1MDAzMDE3Ci06MTAxQTgwMDBBQzYyMDAzQzNDMDIwMDA1QUM2MjAwMzAwMDAwMDAwMDhCCi06MTAxQTkwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAzQzAyMDAwNjE3Ci06MTAxQUEwMDAzMDg0MDBGRjAwODIyMDI1M0MwMjgwMDBBQzQ0MDAzMERFCi06MTAxQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzAzODAwMDY3Ci06MTAxQUMwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkQzNDYyMDQwMEMwCi06MTAxQUQwMDAwM0UwMDAwOEFGODIwMDMwOTRDMjAwMDAzQzA4MDgwMDE4Ci06MTAxQUUwMDA5NTA4MDBDQTMwRTdGRkZGMDA4MDQ4MjEwMTAyMTAyMTVECi06MTAxQUYwMDBBNEMyMDAwMDk0QzIwMDAwMzA0MkZGRkYwMEUyMTAyQjlECi06MTAxQjAwMDA1NDQwMDAwMUE0QzcwMDAwOTRBMjAwMDAzQzAzMDgwMDU4Ci06MTAxQjEwMDA4QzYzMDBDQzI0NDIwMDAxQTRBMjAwMDA5NEEyMDAwMDI3Ci06MTAxQjIwMDAzMDQyRkZGRjE0NDMwMDA3M0MwMjgwMDgwMTA3MTAyQkRFCi06MTAxQjMwMDBBNEEwMDAwMDU0NDAwMDAxMDEwMDM4MjFBNEM3MDAwMDA3Ci06MTAxQjQwMDAzQzAyODAwODM0NDYwMTAwOENDMzAwMjg5NEEyMDAwMEE3Ci06MTAxQjUwMDAzQzA0ODAwMDMwNDJGRkZFMDAwMjEwQzAwMDYyMTAyMUYxCi06MTAxQjYwMDBBQzgyMDAzQzhDODIwMDNDMDA2MjE4MjMxODYwMDAwNEE4Ci06MTAxQjcwMDAwMDAwMDAwMDhDQzIwMDI0MEEwMDA2QUYyNDQyMDAwMUNECi06MTAxQjgwMDA4Q0MyMDAyNEFDODIwMDM4M0MwMjAwNTAzNDQyMDAxMDY5Ci06MTAxQjkwMDAzQzAzODAwMEFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTAxQkEwMDAwMDAwMDAwMDhDNjIwMDAwMzA0MjAwMjAxMDQwRkZGRDY5Ci06MTAxQkIwMDAwMDAwMDAwMDk0QTIwMDAwM0MwNDgwMDAzMDQyMDAwMUJDCi06MTAxQkMwMDAwMDAyMTBDMDAwNDQxMDIxOEM0MzA0MDBBRDIzMDAwMDJCCi06MTAxQkQwMDA4QzQyMDQwNEFEMjIwMDA0M0MwMjAwMjAwM0UwMDAwODEzCi06MTAxQkUwMDBBQzgyMDAzMDI3QkRGRkUwQUZCMjAwMThBRkIxMDAxNEU3Ci06MTAxQkYwMDBBRkIwMDAxMEFGQkYwMDFDOTRDMjAwMDAwMEMwODAyMTM1Ci06MTAxQzAwMDAzQzEyMDgwMDk2NTIwMEM2MjQ0MjAwMDFBNjAyMDAwMEMxCi06MTAxQzEwMDA5NjAzMDAwMDk0RTIwMDAwMDBFMDMwMjExNDQzMDAwNTI4Ci06MTAxQzIwMDA4RkIxMDAzMDBFMDAwNjg0MDI0MDM4MjEwQTAwMDZFNjFCCi06MTAxQzMwMDAwMDAwMDAwMDhDODMwMDA0OEM4MjAwMDQyNDQyMDA0MEQ5Ci06MTAxQzQwMDAwNDYxMDAwN0FDODIwMDA0OEM4MjAwMDQwNDQwMDAwNDlDCi06MTAxQzUwMDAwMDAwMDAwMDhDODIwMDAwMjQ0MjAwMDFBQzgyMDAwMEUxCi06MTAxQzYwMDA5NjAyMDAwMDMwNDJGRkZGNTA1MjAwMDFBNjAwMDAwMDIzCi06MTAxQzcwMDA5NjIyMDAwMDI0NDIwMDAxQTYyMjAwMDAzQzAyODAwOEI3Ci06MTAxQzgwMDAzNDQyMDEwMDk2MjMwMDAwOTQ0MjAwM0MxNDQzMDAwNEI3Ci06MTAxQzkwMDA4RkJGMDAxQzI0MDIwMDAxQTYyMjAwMDA4RkJGMDAxQzgxCi06MTAxQ0EwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODRECi06MTAxQ0IwMDAyN0JEMDAyMDI3QkRGRkUwM0MwMjgwMDhBRkJGMDAxODExCi06MTAxQ0MwMDAzNDQyMDEwMDhDNDgwMDM0M0MwMzgwMDAzNDY5MDQwMDM1Ci06MTAxQ0QwMDBBQzY4MDAzODhDNDIwMDM4MzBFNzAwRkZBRjg5MDAzMDM0Ci06MTAxQ0UwMDBBQzYyMDAzQzNDMDIwMDA1QUM2MjAwMzAwMDAwMDAwMDI5Ci06MTAxQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTAxRDAwMDAwMDAwMDAwMDhDODIwMDBDOEM4MjAwMEM5NzgzMDAxNjZGCi06MTAxRDEwMDBBRDIyMDAwMDhDODIwMDEwMDA2MDQwMjFBRDIyMDAwNDQyCi06MTAxRDIwMDA4QzgyMDAxOEFEMjIwMDA4OEM4MjAwMUNBRDIyMDAwQ0IxCi06MTAxRDMwMDA4Q0EyMDAxNEFEMjIwMDEwOEM4MjAwMjBBRDIyMDAxNDcxCi06MTAxRDQwMDA5MDgyMDAwNTMwNDIwMEZGMDAwMjEyMDBBRDIyMDAxODEwCi06MTAxRDUwMDA4Q0EyMDAxOEFEMjIwMDFDOENBMjAwMENBRDIyMDAyMDI5Ci06MTAxRDYwMDA4Q0EyMDAxMEFEMjIwMDI0OENBMjAwMUNBRDIyMDAyODAxCi06MTAxRDcwMDA4Q0EyMDAyMEFEMjIwMDJDMzQwMkZGRkZBRDI2MDAzMEUzCi06MTAxRDgwMDBBRDIwMDAzNDUwNjIwMDAxMzQwOEZGRkZBRDI4MDAzODU4Ci06MTAxRDkwMDA1MEUwMDAxMTNDMDI4MDA4M0MwNDgwMDgzNDg0MDEwMEJCCi06MTAxREEwMDA5NDgyMDA1MDMwNDJGRkZGQUQyMjAwM0M5NDgzMDA0NEY3Ci06MTAxREIwMDA5NDg1MDA0NDI0MDIwMDAxMzA2M0ZGRkYwMDAzMThDMjMxCi06MTAxREMwMDAwMDY0MTgyMTkwNjQwMDU0MzBBNTAwMDcwMEEyMTAwNDlDCi06MTAxREQwMDAwQTAwMDc1MTAwNDQxMDI1MzQ0MjAxMDBBRDIwMDAzQ0E4Ci06MTAxREUwMDA5NDQzMDA0NDk0NDQwMDQ0MzA2M0ZGRkYwMDAzMThDMjRFCi06MTAxREYwMDAwMDYyMTgyMTMwODQwMDA3OTA2NTAwNTQyNDAyMDAwMTFECi06MTAxRTAwMDAwMDgyMTAwNDAwMDIxMDI3MDA0NTEwMjRBMDYyMDA1NDM0Ci06MTAxRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzAyMDAwNjdFCi06MTAxRTIwMDAzNDQyMDA0MDNDMDM4MDAwQUM2MjAwMzAwMDAwMDAwMEZGCi06MTAxRTMwMDAwMDAwMDAwMDAwMDAwMDAwOEM2MjAwMDAzMDQyMDAxMDMyCi06MTAxRTQwMDAxMDQwRkZGRDNDMDY4MDA4MzRDMjAxNTAzNDYzMDQwMDlBCi06MTAxRTUwMDAzNEM3MDE0QTM0QzQwMTM0MzRDNTAxNDAzNEM2MDE0NDk2Ci06MTAxRTYwMDBBRkEyMDAxMDBFMDAwNkM3QUY4MzAwMzA4RkJGMDAxODZFCi06MTAxRTcwMDAwM0UwMDAwODI3QkQwMDIwOEY4MzAwMTQzQzA1MDgwMDA0Ci06MTAxRTgwMDA4Q0E1MDBFODhGODIwMDFDMzA2MzNGRkYwMDAzMTk4MDlGCi06MTAxRTkwMDAwMDQ1MTAyMTAwNDMxMDIxMjQwM0ZGODAwMDQzMTgyNDMzCi06MTAxRUEwMDAzQzA1ODAwMEFDQTMwMDI4MzA0MjAwN0YzQzAzODAwQzNFCi06MTAxRUIwMDAwMDQzMzAyMTkwQzIwMDBEMDAwMDM4MjEzNDQyMDAxMDUwCi06MTAxRUMwMDBBMEMyMDAwRDhGODkwMDE0M0MwMjgwMDgzNDQyMDEwMDNBCi06MTAxRUQwMDA5NDQzMDA0NDAwMDkxMzgyMzA0ODAwMDMyNDAyMDAwMUE3Ci06MTAxRUUwMDBBNEMzMDAwRTExMDIwMDBCMjkwMjAwMDIxMDQwMDAwNURECi06MTAxRUYwMDAyNDAyMDAwMjExMDAwMDBDMjQwMzAwMDEwQTAwMDc5OENDCi06MTAxRjAwMDAwMDAwMTgyMTExMDIwMDA2MDAwMDAwMDAwQTAwMDc5OEQ2Ci06MTAxRjEwMDAwMDAwMTgyMThDQzIwMDJDMEEwMDA3OTgyNDQzMDAwMUZECi06MTAxRjIwMDA4Q0MyMDAxNDI0NDMwMDAxOENDMjAwMTgwMDQzMTAyQjAzCi06MTAxRjMwMDAxNDQwMDAwMzNDMDM4MDA4MEEwMDA3QTIyNDA3MDAwMUE0Ci06MTAxRjQwMDAzNDYzMDEwMDk0NjIwMDRDMjQ0MjAwMDFBNDYyMDA0Q0ZFCi06MTAxRjUwMDAwMDA5MTM4MjMwNDMwMDAzMkM2MjAwMDIxMDQwMDAwOTg0Ci06MTAxRjYwMDAwMDgwMjgyMTE0NjAwMDA0MDAwMDAwMDA5NEMyMDAzNEE2Ci06MTAxRjcwMDAwQTAwMDdCMjMwNDZGRkZGOENDNjAwMzgwQTAwMDdCMkRECi06MTAxRjgwMDAwMDgwMjgyMTAwMDAzMDIxM0MwNDA4MDAyNDg0NEJDQzMwCi06MTAxRjkwMDAwQTAwMDZGQjAwMDAwMDAwMjdCREZGOTBBRkI2MDA2OEY2Ci06MTAxRkEwMDBBRkI1MDA2NEFGQjQwMDYwQUZCMzAwNUNBRkIyMDA1ODJGCi06MTAxRkIwMDBBRkIxMDA1NEFGQkYwMDZDQUZCMDAwNTA4QzkwMDAwMEM4Ci06MTAxRkMwMDAwMDgwQjAyMTNDMDIwODAwOEM0MjAwRTg5NjA0MDAzMkY4Ci06MTAxRkQwMDA4RjgzMDAxQzI0MTRGRjgwMzA4NDNGRkYwMDYyMTgyMThGCi06MTAxRkUwMDAwMDA0MjE4MDAwNjQxODIxMDA3NDEwMjQzQzEzODAwMDM4Ci06MTAxRkYwMDAwMEEwOTAyMTkwQTUwMDAwQUU2MjAwMjg5MjA0MDAzMjVCCi06MTAyMDAwMDAzQzAyODAwQzMwNjMwMDdGMDA2Mjg4MjEzMDg0MDBDMDc1Ci06MTAyMDEwMDAyNDAyMDA0MDE0ODIwMDJEMDAwMEE4MjE4RTM1MDAzOEQzCi06MTAyMDIwMDA4RTIyMDAxODE0NDAwMDAyMjQwMjAwMDFBRTIyMDAxODgzCi06MTAyMDMwMDA5MjAyMDAzQzMwNDIwMDIwMTQ0MDAwMEYwMDAwMDAwMERCCi06MTAyMDQwMDAwRTAwMDU1NzAwQTAyMDIxOEY4MzAwMUMwMDYyMTgyMTdDCi06MTAyMDUwMDAzMDY0MDA3ODNDMDIwMDgwMDA4MjIwMjUwMDc0MTgyNDNGCi06MTAyMDYwMDBBRTYzMDgwMEFFNjQwODEwOEUyMjAwMTg4RTAzMDAwOENDCi06MTAyMDcwMDAwMDQzMTAyMUFFMjIwMDE4OEUyMjAwMkM4RTIzMDAxODVGCi06MTAyMDgwMDAyNDQyMDAwMTAwNjIxODJCMTA2MDAwM0QwMDAwMDAwMDk3Ci06MTAyMDkwMDA5MjQyMDAwMDI0NDIwMDAxQTI0MjAwMDAzQzAzMDgwMERBCi06MTAyMEEwMDA4QzYzMDBGNDMwNDIwMEZGNTA0MzAwMDFBMjQwMDAwMDY2Ci06MTAyMEIwMDAwRTAwMDU1NzkyNDQwMDAwOEY5MDAwMUMwMjAyMTAyMTcwCi06MTAyMEMwMDAwMDU0MTAyNDBBMDAwOEI4QUU2MjAwMjQ5MjAzMDAzMkMzCi06MTAyMEQwMDAyNDAyRkZDMDAwNDMxMDI0MzA0MjAwRkYxNDQwMDAwNURBCi06MTAyMEUwMDAyNDAyMDAwMUFFMjIwMDE4OTYyMjAwMzQwQTAwMDgyRUI1Ci06MTAyMEYwMDAzMDU1RkZGRjhFMjIwMDE0MjQ0MjAwMDFBRTIyMDAxODRBCi06MTAyMTAwMDA5MjAyMDAzMDAwMDIxNjAwMDAwMjE2MDMwNDQxMDAxQzc3Ci06MTAyMTEwMDAwMDAwMDAwMDk2MDIwMDMyMjdBNDAwMTAwMDgwMjgyMTUxCi06MTAyMTIwMDBBN0EyMDAxNjk2MDIwMDMyMDAwMDMwMjEyNDA3MDAwMTA5Ci06MTAyMTMwMDAzMDQyRkZGRkFGODIwMDE0MEUwMDA2RkJBRkEwMDAxQzcwCi06MTAyMTQwMDA5NjAyMDAzMjhGODMwMDFDM0MwNDA4MDA4Qzg0MDBFODU3Ci06MTAyMTUwMDAzMDQyM0ZGRjAwMDIxMTgwMDA2NDE4MjEwMDYyMTgyMTA0Ci06MTAyMTYwMDAwMDc0MTAyNEFFNjIwMDJDMzA2MzAwN0YzQzAyODAwRUFECi06MTAyMTcwMDAwMDYyMTgyMTkwNjIwMDBEMzA0MjAwN0ZBMDYyMDAwREM1Ci06MTAyMTgwMDA5MjIyMDAwRDMwNDIwMDEwNTA0MDAwNzg5MjQyMDAwMDMwCi06MTAyMTkwMDAzQzAyODAwODM0NDQwMTAwOTQ4MjAwNEM4RUMzMDAwMDRECi06MTAyMUEwMDAzQzEzMDgwMDk2NzMwMEM2MjQ0MkZGRkZBNDgyMDA0QzMzCi06MTAyMUIwMDA5NDYyMDAzMjk2MjMwMDBFMzA1NEZGRkYzMDcwRkZGRjEwCi06MTAyMUMwMDAzQzAzMDgwMDhDNjMwMEQwMDA3MDE4MDdBN0EzMDAzOEY4Ci06MTAyMUQwMDA5NDgyMDAzRTMwNjNGRkZGMzA0MkZGRkYxNDYyMDAwNzJECi06MTAyMUUwMDAwMDAwMDAwMDhDODIwMDMwM0MwMzgwMDAyNDQyMDAzMDVDCi06MTAyMUYwMDBBQzYyMDAzQzBBMDAwODU2OEM4MjAwMkM5NDgyMDA0MDlECi06MTAyMjAwMDAzMDQyRkZGRjU0NjIwMDA5MjdBNDAwNDA4QzgyMDAzODRFCi06MTAyMjEwMDAzQzAzODAwMDI0NDIwMDMwQUM2MjAwM0M4QzgyMDAzNERECi06MTAyMjIwMDBBQzYyMDAzODBBMDAwODY1M0MwMzgwMDAyN0E1MDAzODJFCi06MTAyMjMwMDAyN0E2MDA0ODAyNjAzODIxMEUwMDA2ODRBN0EwMDA0OEE3Ci06MTAyMjQwMDA4RkEzMDA0MDNDMDI4MDAwMjQ2MzAwMzBBQzQzMDAzODgwCi06MTAyMjUwMDA4RkEzMDA0NEFDNDMwMDNDM0MwMzgwMDAzQzAyMDAwNURCCi06MTAyMjYwMDBBQzYyMDAzMDNDMDI4MDA4MzQ0NDAxMDA5NDgyMDA0Mjk5Ci06MTAyMjcwMDAzNDYzMDQwMDMwNDJGRkZGMDIwMjEwMkIxNDQwMDAwN0I5Ci06MTAyMjgwMDBBRjgzMDAzMDk0ODIwMDRFOTQ4MzAwNDIwMjAyMTAyMUZBCi06MTAyMjkwMDAwMDQzMTAyMzBBMDAwODdCMzA0M0ZGRkY5NDgzMDA0RTY1Ci06MTAyMkEwMDA5NDgyMDA0MjAyNjMxODIxMDA1MDEwMjMwMDYyMTgyMzE4Ci06MTAyMkIwMDAzMDYzRkZGRjNDMDI4MDA4MzQ0NDAxMDA5NDgyMDAzQ0ZDCi06MTAyMkMwMDAzMDQyRkZGRjE0NDMwMDAzMDAwMDAwMDAwQTAwMDg4QkE3Ci06MTAyMkQwMDAyNDAzMDAwMTk0ODIwMDNDMzA0MkZGRkYwMDYyMTAyQjc3Ci06MTAyMkUwMDAxNDQwMDAwNThGODIwMDMwOTQ4MjAwM0MwMDYyMTAyMzZECi06MTAyMkYwMDAzMDQzRkZGRjhGODIwMDMwQUM1NTAwMDBBQzQwMDAwNDNCCi06MTAyMzAwMDBBQzU0MDAwOEFDNDMwMDBDM0MwMjAwMDYzNDQyMDAxMDAwCi06MTAyMzEwMDAzQzAzODAwMEFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTAyMzIwMDAwMDAwMDAwMDhDNjIwMDAwMzA0MjAwMTAxMDQwRkZGREYxCi06MTAyMzMwMDAzQzA0ODAwODM0ODQwMTAwMDAxMDE4QzIwMDY0MTgyMTk1Ci06MTAyMzQwMDA5MDY1MDA1NDMyMDIwMDA3MjQwNjAwMDEwMDQ2MTAwNDg0Ci06MTAyMzUwMDAwMDQ1MTAyNUEwNjIwMDU0OTQ4MzAwNDI5NjIyMDAwRThFCi06MTAyMzYwMDA1MDQzMDAwMUEzODYwMDE4OTI0MjAwMDAyNDQyMDAwMTVECi06MTAyMzcwMDBBMjQyMDAwMDNDMDMwODAwOEM2MzAwRjQzMDQyMDBGRkRFCi06MTAyMzgwMDA1MDQzMDAwMUEyNDAwMDAwMEUwMDA1NTc5MjQ0MDAwMDk3Ci06MTAyMzkwMDA4RjkwMDAxQzI0MDNGRjgwMDIwMjEwMjEwMDQzMTAyNEIwCi06MTAyM0EwMDAzQzAzODAwMEFDNjIwMDI0MEUwMDA1NTc5MjQ0MDAwMEZDCi06MTAyM0IwMDAwMjAyODAyMTMyMTAwMDdGM0MwMjgwMEEwMjAyODAyMTRBCi06MTAyM0MwMDBBRUQwMDAwMDhGQkYwMDZDOEZCNjAwNjg4RkI1MDA2NDgwCi06MTAyM0QwMDA4RkI0MDA2MDhGQjMwMDVDOEZCMjAwNTg4RkIxMDA1NDhGCi06MTAyM0UwMDA4RkIwMDA1MDAzRTAwMDA4MjdCRDAwNzAyN0JERkZEODY0Ci06MTAyM0YwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDAzCi06MTAyNDAwMDBBRkJGMDAyMDAwODA5ODIxMDBFMDgwMjEzMEIxRkZGRkE1Ci06MTAyNDEwMDAwRTAwMEQ3MTMwRDIwMEZGMDAwMDAwMDAwMDAwMDAwMDJGCi06MTAyNDIwMDAwMDAwMDAwMDhGODIwMDJDQUM1MTAwMDBBQzUyMDAwNDcwCi06MTAyNDMwMDBBQzUzMDAwOEFDNDAwMDBDQUM0MDAwMTBBQzQwMDAxNEExCi06MTAyNDQwMDBBQzQwMDAxODNDMDMwODAwOTQ2MzRCRkUwMjAzODAyNTU3Ci06MTAyNDUwMDBBQzUwMDAxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTAyNDYwMDAyNDA0MDAwMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODFFCi06MTAyNDcwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBEOTgyN0JEMDAyOEZFCi06MTAyNDgwMDAzMEE1RkZGRjMwQzYwMEZGMjQwMzBDODAzQzAyODAwMDEzCi06MTAyNDkwMDBBQzQzMDAyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTAyNEEwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDA4QzkwMDAwMDAwMDUxCi06MTAyNEIwMDAzQzAyODAwODM0NDMwMTAwOTQ2MjAwMEUzQzA4MDgwMDhFCi06MTAyNEMwMDA5NTA4MDBDNjMwNDZGRkZGMTRDMDAwMDQzNDAyRkZGRjI5Ci06MTAyNEQwMDA5NDY1MDBEQTBBMDAwOTFGOEY4NDAwMUMxMEMyMDAyN0NGCi06MTAyNEUwMDAwMDAwMDAwMDk0NjIwMDRFOTQ2NDAwM0MzMDQ1RkZGRjAxCi06MTAyNEYwMDAwMEE2MTAyMzAwQTYxODJCMzA4N0ZGRkYxMDYwMDAwNEYxCi06MTAyNTAwMDAzMDQ0RkZGRjAwQzUxMDIzMDBFMjEwMjMzMDQ0RkZGRkRBCi06MTAyNTEwMDAwMDg4MTAyQjEwNDAwMDBFMDBFODEwMjMzQzAyODAwOEI5Ci06MTAyNTIwMDAzNDQ0MDEwMDI0MDMwMDAxMzQ0MjAwODBBNDQzMDAxNjE3Ci06MTAyNTMwMDAyNDAyRkZGRkE0ODIwMDBFOTQ4NTAwREE4Rjg0MDAxQzIxCi06MTAyNTQwMDAwMDAwMzAyMTMwQTVGRkZGMEEwMDA4RUUzQzA3NjAyMEE0Ci06MTAyNTUwMDAwMDQ0MTAyQTEwNDAwMDA5M0MwMjgwMDgzNDQzMDA4MEU3Ci06MTAyNTYwMDA5NDYyMDAxNjMwNDIwMDAxMTA0MDAwMDQzQzAyODAwMERBCi06MTAyNTcwMDA5NDQyMDA3RTI0NDIwMDE0QTQ2MjAwMTYwM0UwMDAwODg2Ci06MTAyNTgwMDAwMDAwMDAwMDI3QkRGRkUwM0MwMjgwMDhBRkJGMDAxQzM4Ci06MTAyNTkwMDBBRkIwMDAxODM0NDIwMTAwOTQ0MzAwNDI5NDQyMDA0QzEyCi06MTAyNUEwMDAxMDQwMDAxOTMwNjhGRkZGOTM4MzAwMTgyNDAyMDAwMUQ3Ci06MTAyNUIwMDAxNDYyMDAyOThGQkYwMDFDM0MwNjgwMDgzNEQwMDEwMDQzCi06MTAyNUMwMDAwMDA4MTBDMjAwNTAxMDIxOTA0MjAwNTQzMTAzMDAwNzRGCi06MTAyNUQwMDAzNEM3MDE0ODMwNDIwMEZGMDA2MjEwMDczMDQyMDAwMTVBCi06MTAyNUUwMDAzNEM5MDE0RTM0QzQwMTJDMzRDNTAxM0UxMDQwMDAxNkRDCi06MTAyNUYwMDAzNEM2MDE0MjBFMDAwNkM3QUZBOTAwMTA5NjAyMDA0MjgxCi06MTAyNjAwMDAwQTAwMDkzQzMwNDhGRkZGM0MwMjgwMDgzNDQ0MDEwMEM2Ci06MTAyNjEwMDA5NDgzMDA0NDk0ODIwMDQyMTA0MzAwMEY4RkJGMDAxQzNCCi06MTAyNjIwMDA5NDgyMDA0NEE0ODIwMDQyOTQ4MjAwNTBBNDgyMDA0RTBFCi06MTAyNjMwMDA4QzgyMDAzOEFDODIwMDMwOTQ4MjAwNDBBNDgyMDAzRTNDCi06MTAyNjQwMDA5NDgyMDA0QUE0ODIwMDQ4OEZCRjAwMUM4RkIwMDAxOEZCCi06MTAyNjUwMDAwQTAwMDhGQTI3QkQwMDIwOEZCMDAwMTgwM0UwMDAwODI4Ci06MTAyNjYwMDAyN0JEMDAyMDI3QkRGRkEwQUZCMTAwNEMzQzExODAwMDZBCi06MTAyNjcwMDBBRkJGMDA1OEFGQjMwMDU0QUZCMjAwNTBBRkIwMDA0ODg2Ci06MTAyNjgwMDAzNjI2MDE4ODkwQzIwMDAzMzA0NDAwN0ZBM0E0MDAxMEM2Ci06MTAyNjkwMDA4RTMyMDE4MDkwQzIwMDAwMzA0MzAwN0YyNDAyMDAwMzhDCi06MTAyNkEwMDAxMDYyMDAzQkFGOTIwMDFDMjg2MjAwMDQxMDQwMDAwNjNDCi06MTAyNkIwMDAyNDAyMDAwNDI0MDIwMDAyMTA2MjAwMDk4RkJGMDA1OEE3Ci06MTAyNkMwMDAwQTAwMEIwMzhGQjMwMDU0MTA2MjAwNEIyNDAyMDAwNTc0Ci06MTAyNkQwMDAxMDYyMDE0QzhGQkYwMDU4MEEwMDBCMDM4RkIzMDA1NEU3Ci06MTAyNkUwMDAwMDA0MTFDMDAyNDIxMDIxMjQwNEZGODAyNDQyMDI0MDUxCi06MTAyNkYwMDAwMDQ0MTAyNDI2NDMwMDQwQUUyMjAwMjQzMDYzMDA3RkIzCi06MTAyNzAwMDAzQzAyODAwQTAwNjIxODIxOTA2MjAwM0NBRkEzMDAzQ0FBCi06MTAyNzEwMDAwMDQ0MTAyNUEwNjIwMDNDOEZBMzAwM0M5MDYyMDAzQzY2Ci06MTAyNzIwMDAzMDQyMDA0MDEwNDAwMTZBOEZCRjAwNTgzQzEwODAwOEMyCi06MTAyNzMwMDBBMzgwMDAxODM2MTAwMTAwOEUwMjAwRDA4QzYzMDAzNDk0Ci06MTAyNzQwMDAyN0E0MDAzQzI3QTUwMDEwMDA0MzEwMjEwRTAwMDdCNDY5Ci06MTAyNzUwMDBBRTAyMDBEMDkzQTIwMDEwM0MwMzgwMDBBMjAyMDBDNThDCi06MTAyNzYwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMUNBQzYyMDI0MDQzCi06MTAyNzcwMDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDBBQzYyMDI3ODEzCi06MTAyNzgwMDAwRTAwMDkyRjAwMDAwMDAwMEEwMDBCMDI4RkJGMDA1ODQ2Ci06MTAyNzkwMDAzQzA1ODAwODkwQzMwMDAxOTBBMjAwMEIxNDQzMDE0QzNCCi06MTAyN0EwMDA4RkJGMDA1ODM0QTQwMDgwOEM4MjAwMTg5MDgyMDA0Q0E3Ci06MTAyN0IwMDA5MEEyMDAwODhDODMwMDE4M0MwMjdGRkYzNDQyRkZGRjg4Ci06MTAyN0MwMDAwMDYyMTgyNDNDMDIwODAwOEM0MjAwQjRBQzgzMDAxODVDCi06MTAyN0QwMDAzQzAzODAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDBCNDBDCi06MTAyN0UwMDA4QzYyMDFGODA0NDBGRkZFOEY4MjAwMUNBQzYyMDFDMEM1Ci06MTAyN0YwMDAwQTAwMEFDQTI0MDIwMDAyM0MxMDgwMDg5MEMzMDAwMUFCCi06MTAyODAwMDA5MjAyMDAwQjE0NDMwMTMyOEZCRjAwNTgzNjA1MDExMEFECi06MTAyODEwMDAyN0E0MDAxODBFMDAwRTIwMjQwNjAwMDMyN0E0MDAyODc5Ci06MTAyODIwMDAzNjA1MDFFMDBFMDAwRTIwMjQwNjAwMDM4RkEyMDAyOENBCi06MTAyODMwMDAzNjAzMDEwMEFFMDIwMDY0OEZBMjAwMkNBRTAyMDA2OEQ1Ci06MTAyODQwMDA4RkEyMDAzMEFFMDIwMDZDOTNBNDAwMTg5MDYzMDBDNTA0Ci06MTAyODUwMDAyNDAyRkY4MDAwODIxMDI0MDA0MzEwMjUzMDUwMDBGRjI2Ci06MTAyODYwMDAzMDg0MDA3RjMyMDIwMDdGMDA4MjEwMkE1NDQwMDAwMTMxCi06MTAyODcwMDAzQTEwMDA4MDBFMDAwNTU3MDAwMDAwMDAwMjQyMTAyMUFGCi06MTAyODgwMDAyNDAzRkY4MDAwNDMxMDI0QUUyMjAwOTQ5M0E0MDAxODc4Ci06MTAyODkwMDAzQzEzMDgwMDkyNzMwMEY3MEUwMDA1NTczMDg0MDA3RjQ4Ci06MTAyOEEwMDAwMjQyMTAyMTMwNDIwMDdGM0MwMzgwMDYwMDQzNDAyMTU5Ci06MTAyOEIwMDA4RkEzMDAxQzI0MDJGRkZGMTA2MjAwMzRBRkE4MDA0MDY5Ci06MTAyOEMwMDA5M0EyMDAxOTk1MDMwMDE0MzA0NDAwRkYzMDYzRkZGRjBBCi06MTAyOEQwMDAwMDY0MTgyQjEwNjAwMDEwMDAwMDAwMDA5NTA0MDAxNDI0Ci06MTAyOEUwMDA4RDA3MDAxQzhEMDYwMDE4MzA4NEZGRkYwMDQ0MjAyMzU0Ci06MTAyOEYwMDAwMDA0MjEwMDAwRTQzODIxMDAwMDEwMjEwMEU0MjAyQjE2Ci06MTAyOTAwMDAwMEMyMzAyMTAwQzQzMDIxQUQwNzAwMUNBRDA2MDAxODA0Ci06MTAyOTEwMDAwQTAwMEEyMzkzQTIwMDE5OTUwNDAwMTQ4RDA3MDAxQ0Q1Ci06MTAyOTIwMDA4RDA2MDAxODMwODRGRkZGMDA4MjIwMjMwMDA0MjEwMDYwCi06MTAyOTMwMDAwMDAwMTAyMTAwODAxODIxMDBDMjMwMjMwMEU0MjAyQjY5Ci06MTAyOTQwMDAwMEM0MzAyMzAwRTMzODIzQUQwNzAwMUNBRDA2MDAxODk3Ci06MTAyOTUwMDA5M0EyMDAxOThGQTMwMDQwQTQ2MjAwMTQ5N0EyMDAxQTRBCi06MTAyOTYwMDBBNDYyMDAxNjhGQTIwMDFDQUM2MjAwMTA4RkEyMDAxQzkzCi06MTAyOTcwMDBBQzYyMDAwQzkzQTIwMDE5QTQ2MjAwMjA5N0EyMDAxQTc2Ci06MTAyOTgwMDBBNDYyMDAyMjhGQTIwMDFDQUM2MjAwMjQzQzA0ODAwOEQ4Ci06MTAyOTkwMDAzNDgzMDA4MDhDNjIwMDM4OEZBMjAwMjAwMjAwODgyMURFCi06MTAyOUEwMDBBQzYyMDAzQzhGQTIwMDIwQUM4MjAwMDA5M0EyMDAxODExCi06MTAyOUIwMDBBMDYyMDA0QzkzQTIwMDE4QTA4MjAwMDlBMDYwMDA2OEU5Ci06MTAyOUMwMDA5M0EyMDAxODEwNTEwMDUyOTNBNDAwMTgzMjMwMDA3RkQ3Ci06MTAyOUQwMDAwRTAwMDU1NzAyMDAyMDIxMDI0MjEwMjEyNDA3RkY4MDJCCi06MTAyOUUwMDAzMDQ2MDA3RjNDMDM4MDAwMDA0NzEwMjRBQzYyMDA5NDE2Ci06MTAyOUYwMDAzQzAyODAwNjAwQzIzMDIxOTBDMjAwM0NBRkE2MDA0MERECi06MTAyQTAwMDAwMDAwMjAyMTAwNDcxMDI1QTBDMjAwM0M4RkE4MDA0MEY0Ci06MTAyQTEwMDA5NTAyMDAwMjk1MDMwMDE0OEQwNzAwMUMzMDQyRkZGRjUxCi06MTAyQTIwMDAzMDYzRkZGRjhEMDYwMDE4MDA0MzEwMjMwMDAyMTEwMEUxCi06MTAyQTMwMDAwMEUyMzgyMTAwRTIxMDJCMDBDNDMwMjEwMEMyMzAyMTE2Ci06MTAyQTQwMDBBRDA3MDAxQ0FEMDYwMDE4OTUwMjAwMDJBNTAyMDAxNDk3Ci06MTAyQTUwMDBBNTAwMDAxNjhEMDIwMDA4QUQwMjAwMTA4RDAyMDAwOENFCi06MTAyQTYwMDBBRDAyMDAwQzk1MDIwMDAyQTUwMjAwMjBBNTAwMDAyMjg0Ci06MTAyQTcwMDA4RDAyMDAwOEFEMDIwMDI0OTEwMjAwM0MzMDQyMDA0MDZCCi06MTAyQTgwMDAxMDQwMDAxQTI2MjIwMDAxQTNCMDAwMzgzQzEwODAwODM0Ci06MTAyQTkwMDBBMzgwMDAxODM2MTAwMTAwOEUwMjAwRDA4RDAzMDAzNDkwCi06MTAyQUEwMDAyN0E0MDA0MDI3QTUwMDM4MDA0MzEwMjEwRTAwMDdCNERBCi06MTAyQUIwMDBBRTAyMDBEMDkzQTIwMDM4M0MwMzgwMDBBMjAyMDBDNTAxCi06MTAyQUMwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMUNBQzYyMDI0MEUwCi06MTAyQUQwMDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDBBQzYyMDI3OEIwCi06MTAyQUUwMDAwRTAwMDkyRjAwMDAwMDAwMjYyMjAwMDEzMDQzMDA3RjY1Ci06MTAyQUYwMDAxNDczMDAwNDAwNDAyMDIxMjQwM0ZGODAwMjIzMTAyNENCCi06MTAyQjAwMDAwMDQzMjAyNjkzQTIwMDE4MEEwMDBBM0YzMDkxMDBGRkRDCi06MTAyQjEwMDA4RkEzMDAxQzI0MDJGRkZGMTA2MjAwMEEzMDkwMDBGRjA4Ci06MTAyQjIwMDAyNDgyMDAwMTI0ODMwMDAxMzA0MjAwN0YxNDUzMDAwNUY5Ci06MTAyQjMwMDAzMDcwMDBGRjI0MDNGRjgwMDA4MzEwMjQwMDQzMTAyNjIwCi06MTAyQjQwMDAzMDUwMDBGRjNDMDI4MDA4OTA0MjAwMDgwMjAwODgyMUJCCi06MTAyQjUwMDAzMDUwMDBGRjEyMzAwMDE5MzIyMjAwN0YwMDAyMTFDMEY1Ci06MTAyQjYwMDAwMjQyMTAyMTI0NDIwMjQwMjQwM0ZGODAwMDQzMTgyNDIzCi06MTAyQjcwMDAzQzA0ODAwMEFDODMwMDk0MzA0MjAwN0YzQzAzODAwNjFDCi06MTAyQjgwMDAwMDQzMTAyMThDNDMwMDBDMDA0MDIwMjExMDYwMDAwQkZBCi06MTAyQjkwMDBBRkEyMDA0MDBFMDAwNTY5MDAwMDAwMDAyNjIzMDAwMURFCi06MTAyQkEwMDAyNDA1RkY4MDMwNjIwMDdGMTQ1MzAwMDIwMjI1MjAyNDk4Ci06MTAyQkIwMDAwMDg1MTgyNjBBMDAwQUEzMzA3MTAwRkYzQzA0ODAwODMzCi06MTAyQkMwMDAzNDg0MDA4MDhDODMwMDE4M0MwMjdGRkYzNDQyRkZGRjc2Ci06MTAyQkQwMDAwMDYyMTgyNEFDODMwMDE4M0MwMzgwMDA4QzYyMDFGODZBCi06MTAyQkUwMDAwNDQwRkZGRTAwMDAwMDAwQUM3MjAxQzAyNDAyMDAwMjlECi06MTAyQkYwMDBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwQTAwMEIwMkEyCi06MTAyQzAwMDA4RkJGMDA1ODNDMDQ4MDA4OTBDMzAwMDE5MDgyMDAwQkU1Ci06MTAyQzEwMDAxNDQzMDAyRjhGQkYwMDU4MzQ5MDAwODA5MjAyMDAwOEE4Ci06MTAyQzIwMDAzMDQyMDA0MDEwNDAwMDIwMDAwMDAwMDA5MjAyMDAwOEU2Ci06MTAyQzMwMDAwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMDUwMjQwMjAyMTk0Ci06MTAyQzQwMDAwRTAwMEVBNTI0MDUwMDkzMEEwMDBCMDI4RkJGMDA1ODRBCi06MTAyQzUwMDA5MjAyMDAwOTI0MDMwMDE4MzA0MjAwRkYxNDQzMDAwREMzCi06MTAyQzYwMDAwMjQwMjAyMTI0MDUwMDM5MEUwMDBFM0QwMDAwMzAyMUQ1Ci06MTAyQzcwMDAwRTAwMDMxNThGODQwMDFDOEY4MkZGQUMyNDAzMDAxMjBBCi06MTAyQzgwMDBBMDQzMDAwOTBFMDAwMzIwOEY4NDAwMUMwQTAwMEIwMkUxCi06MTAyQzkwMDA4RkJGMDA1ODI0MDUwMDM2MEUwMDBFM0QwMDAwMzAyMTg1Ci06MTAyQ0EwMDAwQTAwMEIwMjhGQkYwMDU4MEUwMDAzMTUwMjQwMjAyMUJFCi06MTAyQ0IwMDA5MjAyMDAwNThGODQwMDFDMzQ0MjAwMjAwRTAwMDMyMDg1Ci06MTAyQ0MwMDBBMjAyMDAwNTBFMDAxMDRDOEY4NDAwMUM4RkJGMDA1ODFDCi06MTAyQ0QwMDA4RkIzMDA1NDhGQjIwMDUwOEZCMTAwNEM4RkIwMDA0OEJBCi06MTAyQ0UwMDAyNDAzMEM4MDNDMDI4MDAwMjdCRDAwNjAwM0UwMDAwODQ0Ci06MTAyQ0YwMDBBQzQzMDAyNDI3QkRGRkU4M0MwMjgwMDhBRkIwMDAxMEMxCi06MTAyRDAwMDBBRkJGMDAxNDM0NDUwMTAwM0MxMDgwMDA4RTAyMDE0MDJBCi06MTAyRDEwMDA5NEEzMDAwRTAwMDAzMDIxMDA0MDIwMjFBRjgyMDAxQzRGCi06MTAyRDIwMDAzMDYzRkZGRjM0MDJGRkZGMTA2MjAwMDYzQzA3NjAyMEEzCi06MTAyRDMwMDAyNDAyRkZGRkE0QTIwMDBFOTRBNTAwREEwRTAwMDhFRTA0Ci06MTAyRDQwMDAzMEE1RkZGRjI0MDIwQzgwQUUwMjAwMjQ4RkJGMDAxNEM4Ci06MTAyRDUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZDMDlBCi06MTAyRDYwMDAzQzA5ODAwMDNDMDU4MDA4QUZCNzAwMzRBRkIyMDAyMEJBCi06MTAyRDcwMDBBRkJGMDAzOEFGQjYwMDMwQUZCNTAwMkNBRkI0MDAyOEZECi06MTAyRDgwMDBBRkIzMDAyNEFGQjEwMDFDQUZCMDAwMTgzNTMyMDEwMDYyCi06MTAyRDkwMDAzNEE4MDEwMDhEMjcwMTAwOEU0MjAwMTQ4RDAzMDBENDU5Ci06MTAyREEwMDAwMDAwQjgyMUEzODAwMDE4MDA0MzEwMjMxODQwMDA1NUVDCi06MTAyREIwMDBBRjg3MDAxQzhFNDIwMDE0MjQwM0ZGODAyNEU0MDA0MEVGCi06MTAyREMwMDBBRDAyMDBENDkwQTYwMDA4OTEwNTAwQzUzMDg0MDA3RkI0Ci06MTAyREQwMDAzMEQzMDA3RjMwQTIwMEZGMDAwMjExQzAwMEUyMTAyMUJBCi06MTAyREUwMDAyNDQyMDI0MEEzQTUwMDEwMDA0MzEwMjQ4RDE0MDBEMEZCCi06MTAyREYwMDA4RDE1MDBENEFEMjIwMDI0OTNBMzAwMTAzQzAyODAwQTVDCi06MTAyRTAwMDAwMDgyMjAyMUFGQTQwMDE0MTA3MzAwMzMwMDAwQjAyMTExCi06MTAyRTEwMDA4RkEzMDAxNDI3QTQwMDE0MjdBNTAwMTA4QzYyMDAzNDhGCi06MTAyRTIwMDAwMjgyODAyMTAyQjAxMDIzMDQ0MDAwMkIyNDExRkY4MDc1Ci06MTAyRTMwMDA5MDYyMDAzQzAyMjIxMDI0MzA0MjAwRkYxNDQwMDAxQjJDCi06MTAyRTQwMDAwMjAwQTAyMTkwNjIwMDNDMzQ0MjAwNDBBMDYyMDAzQzlECi06MTAyRTUwMDA5M0EyMDAxMDI0NDIwMDAxMzA0MzAwRkZBM0EyMDAxMEZGCi06MTAyRTYwMDAzQzAyMDgwMDhDNDIwMEY0NTA2MjAwMDFBM0EwMDAxMDU0Ci06MTAyRTcwMDAwRTAwMDU1NzkzQTQwMDEwOEY5MDAwMUMzQzAzODAwMEE3Ci06MTAyRTgwMDAwMjAyMTAyMTAwNTExMDI0QUM2MjAwMjQwRTAwMDU1N0VDCi06MTAyRTkwMDA5M0E0MDAxMDAyMDI4MDIxMzIxMDAwN0YzQzAyODAwQUJECi06MTAyRUEwMDAwMjAyODAyMTBBMDAwQjgxQUZCMDAwMTQwRTAwMDdCNEFCCi06MTAyRUIwMDAwMDAwMDAwMDNDMDI4MDA4MzQ0MjAxMDBBQzUwMDBEMDA5Ci06MTAyRUMwMDA5M0EzMDAxMDI0MTYwMDAxQTA0MzAwQzU5M0EyMDAxMDk0Ci06MTAyRUQwMDAxNDUzRkZEMDhGQTMwMDE0MjQwMjAwMDExNkMyMDAwOTZFCi06MTAyRUUwMDAzQzAzODAwMDhDNjIwMjc4MDQ0MEZGRkU4RjgyMDAxQzRECi06MTAyRUYwMDBBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDQzQzAyMTAwMEM0Ci06MTAyRjAwMDBBQzYyMDI3ODkyNDIwMDBCMjQwMzAwMDIzMDQyMDBGRkMwCi06MTAyRjEwMDAxNDQzMDA3MjAwMDAwMDAwOTY0MjAwMDgzMDQzMDBGRjk2Ci06MTAyRjIwMDAyNDAyMDA4MjE0NjIwMDQwMjQwMjAwODQzQzAyODAwMERCCi06MTAyRjMwMDAzNDQ5MDEwMDhEMjIwMDBDOTUyMzAwMDYwMDAyMTYwMjgwCi06MTAyRjQwMDAzMDYzRkZGRjMwNDQwMDNGMjQwMjAwMjcxMDgyMDAwRjRGCi06MTAyRjUwMDBBRjgzMDAxNDI4ODIwMDI4MTA0MDAwMDgyNDAyMDAzMUFBCi06MTAyRjYwMDAyNDAyMDAyMTEwODIwMDA5MjQwMjAwMjUxMDgyMDAwNzlCCi06MTAyRjcwMDA5MzgyMDAxOTBBMDAwQkMwMDAwMDAwMDAxMDgyMDAwN0I1Ci06MTAyRjgwMDA5MzgyMDAxOTBBMDAwQkMwMDAwMDAwMDAwRTAwMDc2Q0JECi06MTAyRjkwMDAwMTIwMjAyMTBBMDAwQzQwMDAwMDAwMDAzQzAzODAwMEJBCi06MTAyRkEwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMUNBQzYyMDI0MEZCCi06MTAyRkIwMDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDBBQzYyMDI3OENCCi06MTAyRkMwMDAwQTAwMEM0MDAwMDAwMDAwOTUyMzAwMDY5MTI0MDAwNTMzCi06MTAyRkQwMDA4RDI1MDAwQzhEMjYwMDEwOEQyNzAwMTg4RDI4MDAxQ0QzCi06MTAyRkUwMDA4RDI5MDAyMDI0NDIwMDAxM0MwMTA4MDBBNDIzNEJEMjdCCi06MTAyRkYwMDAzQzAxMDgwMEEwMjQ0QkQxM0MwMTA4MDBBQzI1NEJEODczCi06MTAzMDAwMDAzQzAxMDgwMEFDMjY0QkRDM0MwMTA4MDBBQzI3NEJFNDNCCi06MTAzMDEwMDAzQzAxMDgwMEFDMjg0QkU4M0MwMTA4MDBBQzI5NEJFQzEzCi06MTAzMDIwMDAwQTAwMEM0MEEzODIwMDE5MTQ2MjAwMEEyNDAyMDA4MUU1Ci06MTAzMDMwMDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwREE5MjQ2MDAwNUMzCi06MTAzMDQwMDA4Rjg0MDAxQzMwQTVGRkZGMzBDNjAwRkYwQTAwMEMwMTcyCi06MTAzMDUwMDAzQzA3NjAyMTE0NjIwMDVDMDAwMDAwMDA5MjQyMDAwQUZDCi06MTAzMDYwMDAzMDQzMDBGRjMwNjIwMDIwMTA0MDAwMDczMDYyMDA0MDEzCi06MTAzMDcwMDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwREE4Rjg0MDAxQzMxCi06MTAzMDgwMDAwQTAwMEJGRjI0MDYwMDQwMTA0MDAwMDcwMDAzMTYwMDUyCi06MTAzMDkwMDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwREE4Rjg0MDAxQzExCi06MTAzMEEwMDAwQTAwMEJGRjI0MDYwMDQxMDAwMjE2MDMwNDQxMDA0NkZCCi06MTAzMEIwMDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwREE4Rjg0MDAxQ0YxCi06MTAzMEMwMDAyNDA2MDA0MjMwQTVGRkZGM0MwNzYwMTkwRTAwMDhFRTAxCi06MTAzMEQwMDAwMDAwMDAwMDBBMDAwQzQwMDAwMDAwMDA5MjQyMDAwQkJCCi06MTAzMEUwMDAyNDA0MDAxNjMwNDIwMEZGMTA0NDAwMDYzQzA2ODAwMDE1Ci06MTAzMEYwMDA5MjQyMDAwQjI0MDMwMDE3MzA0MjAwRkYxNDQzMDAzMkI5Ci06MTAzMTAwMDAwMDAwMDAwMDM0QzUwMTAwOTBBMjAwMEIzMDQyMDBGRjE3Ci06MTAzMTEwMDAxNDQ0MDAwQjAwMDA4MDIxOENBMjAwMjA4Q0E0MDAyMDBECi06MTAzMTIwMDAyNDAzRkY4MDAwNDMxMDI0MDAwMjExNDAzMDg0MDA3RkZDCi06MTAzMTMwMDAwMDQ0MTAyNTNDMDMyMDAwMDA0MzEwMjVBQ0MyMDgzMDk5Ci06MTAzMTQwMDA5NEEyMDAwODAwMDIxNDAwMDAwMjE0MDMwNDQyMDAwMUNCCi06MTAzMTUwMDAyNDEwMDAwMTk0QTIwMDA4MzA0MjAwODA1MDQwMDAxQTYwCi06MTAzMTYwMDAwMjAwQjgyMTk0QTIwMDA4MzA0MjIwMDA1MDQwMDAxNjBFCi06MTAzMTcwMDAwMjAwQjgyMThDQTMwMDE4M0MwMjFDMkQzNDQyMTlFRDJBCi06MTAzMTgwMDAxMDYyMDAxMTAyMDBCODIxM0MwMjA4MDA4QzQyMDBENEY5Ci06MTAzMTkwMDAxMDQwMDAwNTNDMDI4MDA4MjQwMzAwMDQzNDQyMDEwMDcyCi06MTAzMUEwMDBBMDQzMDBFQzNDMDI4MDA4MzQ0MjAxMDA5NDQ1MDBEQTYwCi06MTAzMUIwMDA4Rjg0MDAxQzI0MDYwMDA2MzBBNUZGRkYwRTAwMDhFRUQ5Ci06MTAzMUMwMDAzQzA3NjAyMTAyMDBCODIxMEUwMDA5MkYwMDAwMDAwMDFBCi06MTAzMUQwMDA5MjQyMDAwQTMwNDIwMDA4MTA0MDAwMDQzQzAyODAwMDg1Ci06MTAzMUUwMDAwRTAwMTIxRjAwMDAwMDAwM0MwMjgwMDAyNDAzMEM4MDJGCi06MTAzMUYwMDBBQzQzMDAyNDhGQkYwMDM4MDJFMDEwMjE4RkI2MDAzMEFFCi06MTAzMjAwMDA4RkI3MDAzNDhGQjUwMDJDOEZCNDAwMjg4RkIzMDAyNDAzCi06MTAzMjEwMDA4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwOEFGCi06MTAzMjIwMDAyN0JEMDA0MDI0MDJGRjgwMDA4MjIwMjQzQzAyOTAwMDQxCi06MTAzMjMwMDAzNDQyMDAwNzAwODIyMDI1M0MwMjgwMDBBQzQ0MDAyMDdDCi06MTAzMjQwMDAzQzAzODAwMDhDNjIwMDIwMDQ0MEZGRkUwMDAwMDAwMDcwCi06MTAzMjUwMDAwM0UwMDAwODAwMDAwMDAwM0MwMzgwMDAyNDAyRkY4MDFGCi06MTAzMjYwMDAwMDgyMjAyNDM0NjIwMDA3MDA4MjIwMjVBQzY0MDAyMDA0Ci06MTAzMjcwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDAwM0UwMDAwODE0Ci06MTAzMjgwMDAwMDAwMDAwMDNDMDI4MDA4MjQwMzAwMDUzNDQyMDEwMEQ1Ci06MTAzMjkwMDBBMDQzMDBFQzNDMDI4MDAwOEM0MjAxMDAzQzAzODAwMDEzCi06MTAzMkEwMDBBRjgyMDAxQzhDNjIwMjc4MDQ0MEZGRkU4RjgyMDAxQ0ZCCi06MTAzMkIwMDBBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDQzQzAyMTAwMDAwCi06MTAzMkMwMDBBQzYyMDI3ODAzRTAwMDA4MDAwMDAwMDAyN0JERkZFOEMwCi06MTAzMkQwMDAzQzA2ODAwMEFGQkYwMDEwMzRDNTAxMDA5NEEyMDAwODc2Ci06MTAzMkUwMDAzMDQ0MDBGRjM4ODMwMDgyMzg4MjAwODQyQzYzMDAwMTYwCi06MTAzMkYwMDAyQzQyMDAwMTAwNjIxODI1MTA2MDAwMzAyNDAyMDA4Mzc3Ci06MTAzMzAwMDA5MzgyMDAxOTUwNDAwMDM5OEZCRjAwMTAzQzAyMDgwMDIyCi06MTAzMzEwMDA5MDQyNEJEODhDQzQwMTAwM0MwNzA4MDA5NEU3NEJEMjg0Ci06MTAzMzIwMDAzMDQ2MDAzRjM4QzMwMDMyMzhDMjAwM0YyQzYzMDAwMUYyCi06MTAzMzMwMDAyQzQyMDAwMTAwNjIxODI1QUY4NDAwMUNBRjg3MDAxNEU2Ci06MTAzMzQwMDBBMzgwMDAxOTE0NjAwMDA2MDBBMDIwMjEyNDAyMDAyMEEwCi06MTAzMzUwMDAxNEMyMDAxMTM0MDJGRkZGMTRFMjAwMEYwMDAwMDAwMDRECi06MTAzMzYwMDAyNDAyMDAyMDE0QzIwMDA1MDAwMDAwMDA4Q0EzMDAxNEY5Ci06MTAzMzcwMDAyNDAyRkZGRjEwNjIwMDBBMDAwMDAwMDAzQzA0MDgwMDY1Ci06MTAzMzgwMDAyNDg0NEJDQzAwMDAzMDIxMEUwMDA2RkIyNDA3MDAwMUYyCi06MTAzMzkwMDAwQTAwMENCNjAwMDAwMDAwMEUwMDA3NkMwMDAwMDAwMEUwCi06MTAzM0EwMDAwRTAwMDkyRjAwMDAwMDAwMjQwMzBDODAzQzAyODAwMDY2Ci06MTAzM0IwMDBBQzQzMDAyNDBBMDAwQ0VGOEZCRjAwMTAxNDgyMDAwNkZCCi06MTAzM0MwMDAyNDgyRkY4MDhDQzMwMTA0M0MwMjYwMjBBQzQzMDAxNEMzCi06MTAzM0QwMDAwQTAwMENFRjhGQkYwMDEwMzA0MjAwRkYyQzQyMDAwMkE5Ci06MTAzM0UwMDAxMDQwMDAwNDI0MDIwMDIyOEZCRjAwMTAwQTAwMEIyNUE5Ci06MTAzM0YwMDAyN0JEMDAxODE0ODIwMDAzOEZCRjAwMTAwQTAwMEM2RjU1Ci06MTAzNDAwMDAyN0JEMDAxODNDMDIwODAwOEM0MjAwMjAxMDQwMDAxRDFGCi06MTAzNDEwMDAyNDAyMDAxODkwQTMwMDA5MTQ2MjAwMDMyNDAyMDAxNjdECi06MTAzNDIwMDAwQTAwMENEQjI0MDMwMDA4MTQ2MjAwMDcyNDAyMDAxN0MyCi06MTAzNDMwMDAyNDAzMDAxMjNDMDI4MDA4MzQ0MjAwODBBMDQzMDAwOUFCCi06MTAzNDQwMDAwQTAwMENFODk0QTcwMDA4NTQ2MjAwMDc5NEE3MDAwODNCCi06MTAzNDUwMDA4RjgyRkZBQzI0MDRGRkZFOTA0MzAwMDUwMDY0MTgyNDEzCi06MTAzNDYwMDBBMDQzMDAwNTk0QTcwMDA4OTBBNjAwMUI4Q0E0MDAwMEIwCi06MTAzNDcwMDA5NEE1MDAwNjhGQkYwMDEwMDAwNzNDMDAwQTAwMDhDOTkxCi06MTAzNDgwMDAyN0JEMDAxODAzRTAwMDA4MjdCRDAwMTgzQzA1MDgwMDEwCi06MTAzNDkwMDA5NEE1NEMwQTNDMDMwODAwOEM2MzRDMTQzQzA0ODAwMDQ3Ci06MTAzNEEwMDAzMEEyRkZGRjAwMDIzMEMwMjQwMkZGRjAwMEMyMTAyNDRGCi06MTAzNEIwMDAwMDYyMTgyMUFDODMwMDNDM0MwMjA4MDA4QzQyNEMxMDk2Ci06MTAzNEMwMDAzQzAzODAwMEFDODIwMDM4M0MwMjAwNTAzNDQyMDAxMEMzCi06MTAzNEQwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCi06MTAzNEUwMDA4QzYyMDAwMDMwNDIwMDIwMTA0MEZGRkQzMEMyMDAwODE2Ci06MTAzNEYwMDAxMDQwMDAwOTNDMDI4MDAwOEM2MjA0MDg4QzYzMDQwQ0JDCi06MTAzNTAwMDAzQzAxMDgwMEFDMjI0QzAwM0MwMTA4MDBBQzIzNEMwNEY4Ci06MTAzNTEwMDAwQTAwMEQxQjNDMDMwMDIwOEM0MzA0MDA4QzQyMDQwNDcxCi06MTAzNTIwMDAzQzAxMDgwMEFDMjM0QzAwM0MwMTA4MDBBQzIyNEMwNEQ4Ci06MTAzNTMwMDAzQzAzMDAyMDNDMDI4MDAwQUM0MzAwMzAzQzA3ODAwMDhDCi06MTAzNTQwMDA4Q0UyMDAzMDAwNDMxMDI0MTQ0MEZGRkQwMDAwMDAwMDE2Ci06MTAzNTUwMDAzQzAzMDgwMDk0NjM0QzA4M0MwMjA4MDA5NDQyNEMwQzY1Ci06MTAzNTYwMDAzQzA2MDgwMDk0QzY0QzBFMjRBNTAwMDEwMDYyMTgyMUY4Ci06MTAzNTcwMDAzMEE0RkZGRjNDMDIwMDQwQUNFMjAwMzAzQzAxMDgwMEY4Ci06MTAzNTgwMDBBNDIzNEMwODNDMDEwODAwQTQyNTRDMEExNDg2MDAwMzFGCi06MTAzNTkwMDAwMDAwMDAwMDNDMDEwODAwQTQyMDRDMEEwM0UwMDAwOEUxCi06MTAzNUEwMDAwMDAwMDAwMDI3QkRGRkU4M0MwNDA4MDAyNDg0NEJGMDI1Ci06MTAzNUIwMDAzQzA1ODAwQUFGQkYwMDEwMEUwMDBFMjAyNDA2MDAwQTUyCi06MTAzNUMwMDAzQzAyMDgwMDk0NDI0QkYyM0MwMzA4MDA5NDYzNEMwRTBBCi06MTAzNUQwMDAzMDQyMDAwRjI0NDIwMDAzMDA0MzE4MDQyNDAyN0ZGRkZFCi06MTAzNUUwMDAwMDQzMTAyQjEwNDAwMDAyQUY4MzAwMjgwMDAwMDAwREE0Ci06MTAzNUYwMDAwRTAwMENGMTAwMDAwMDAwM0MwMjA4MDA5NDQyNEJGNDY1Ci06MTAzNjAwMDAzQzAzMDgwMDk0NjM0QkZBOEZCRjAwMTAzMDQyMDAwRjU4Ci06MTAzNjEwMDAwMDAyMTUwMDAwNjIxODI1MjdCRDAwMTgzQzAyODAwMDNBCi06MTAzNjIwMDAwM0UwMDAwOEFDNDMwMEEwM0MwMjgwMEE5NDQzMDAwNjdCCi06MTAzNjMwMDAzQzAyMDgwMDk0NDI0QkZBM0MwMTA4MDBBNDIzNEJGNkRDCi06MTAzNjQwMDAwMDQzMTAyMzhGODMwMDI4MzA0MkZGRkYwMDQzMTAyQkRDCi06MTAzNjUwMDAwM0UwMDAwODM4NDIwMDAxMjdCREZGRThBRkJGMDAxMEJCCi06MTAzNjYwMDAzQzAyODAwQTk0NDIwMDA2M0MwMTA4MDBBNDIyNEJGNjZBCi06MTAzNjcwMDAwRTAwMEQ1ODAwMDAwMDAwNTQ0MEZGRkEzQzAyODAwQTgyCi06MTAzNjgwMDA4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZFODJBCi06MTAzNjkwMDBBRkJGMDAxMDBFMDAwRDU4MDAwMDAwMDAxMDQwMDAwM0U2Ci06MTAzNkEwMDAwMDAwMDAwMDBFMDAwRDY0MDAwMDAwMDAzQzAyMDgwMDU1Ci06MTAzNkIwMDA4QzQyNEMwMDNDMDM4MDAwOEZCRjAwMTBBQzYyMDAzODhECi06MTAzNkMwMDAzQzAyMDgwMDhDNDI0QzA0MzQ2NDA0MDAyN0JEMDAxOEZFCi06MTAzNkQwMDBBQzYyMDAzQzNDMDIwMDA1QUM2MjAwMzBBRjg0MDAyQ0MwCi06MTAzNkUwMDAwM0UwMDAwOEFGODAwMDI0OEY4MjAwMjQzQzAzMDAwNjIyCi06MTAzNkYwMDAwMDAyMTE0MDAwNDMxMDI1M0MwMzgwMDBBQzYyMDAzMDAyCi06MTAzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QzYyMDAwMENCCi06MTAzNzEwMDAzMDQyMDAxMDEwNDBGRkZEMzQ2MjA0MDBBRjgyMDAyQ0U0Ci06MTAzNzIwMDAwM0UwMDAwOEFGODAwMDI0M0MwNjA4MDA4Q0M2NEMwNDZGCi06MTAzNzMwMDA4Rjg1MDAyNDhGODMwMDJDM0MwMjA4MDA5NDQyNEJGQUIyCi06MTAzNzQwMDAyN0JERkZFMDI0QTUwMDAxMjQ2MzAwMjAyNDQyMDAwMURFCi06MTAzNzUwMDAyNEM3MDAyMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxOEY1Ci06MTAzNzYwMDBBRjg1MDAyNEFGODMwMDJDM0MwMTA4MDBBNDIyNEJGQTUzCi06MTAzNzcwMDAzMDkwMDBGRjNDMDEwODAwQUMyNzRDMDQwNEMxMDAwODU1Ci06MTAzNzgwMDAwMDAwODgyMTA0RTAwMDA2MDAwMDAwMDAzQzAyMDgwMDYwCi06MTAzNzkwMDA4QzQyNEMwMDI0NDIwMDAxM0MwMTA4MDBBQzIyNEMwMDQ5Ci06MTAzN0EwMDAzQzA0MDgwMDk0ODQ0QzA4M0MwMjA4MDA5NDQyNEJGQTA0Ci06MTAzN0IwMDAyRTAzMDAwMTAwNDQxMDI2MkM0NDAwMDEwMDgzMTgyNDJECi06MTAzN0MwMDAxMDYwMDAwNDAwMTAxMDJCMjQwMjAwMDFBRjgyMDAyMEMyCi06MTAzN0QwMDAwMDEwMTAyQjAwODIxMDI1MTQ0MDAwMDY4RjgyMDAyMDVDCi06MTAzN0UwMDAxNDQwMDAwNDhGODMwMDI0MjQwMjAwMTAxNDYyMDAwRjkwCi06MTAzN0YwMDAwMDAwMDAwMDBFMDAwRDg4MjQxMTAwMDEzQzAzMDgwMEE5Ci06MTAzODAwMDA5NDYzNEJGQTNDMDIwODAwOTQ0MjRDMDgxNDYyMDAwMzkzCi06MTAzODEwMDAwMDAwMDAwMDBFMDAwQ0YxMDAwMDAwMDAxNjAwMDAwMzg0Ci06MTAzODIwMDAwMDAwMDAwMDBFMDAwRDcxMDAwMDAwMDAzQzAzMDgwMEM1Ci06MTAzODMwMDA5NDYzNEJGRTNDMDIwODAwOTQ0MjRCRkMyNDYzMDAwMTVECi06MTAzODQwMDAzMDY0RkZGRjNDMDEwODAwQTQyMzRCRkUxNDgyMDAwM0Y4Ci06MTAzODUwMDAwMDAwMDAwMDNDMDEwODAwQTQyMDRCRkUxMjAwMDAwQkY5Ci06MTAzODYwMDAwMDAwMDAwMDNDMDIwODAwOTQ0MjRCRjQzQzAzMDgwMEI2Ci06MTAzODcwMDA5NDYzNEJGQTAwMDIxNTAwMDA2MjE4MjUzQzAyODAwMDk4Ci06MTAzODgwMDBBQzQzMDBBMDBBMDAwREY3QUY4MDAwMjAwRTAwMEQ1OEQ5Ci06MTAzODkwMDAwMDAwMDAwMDEwNDAwMDA0MDIyMDEwMjEwRTAwMEQ2NDAyCi06MTAzOEEwMDAwMDAwMDAwMDAyMjAxMDIxOEZCRjAwMTg4RkIxMDAxNDBCCi06MTAzOEIwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAwM0UwMDAwOERGCi06MTAzOEMwMDAwMDAwMDAwMDhGODIwMDM0M0MwMzAwMDYwMDAyMTE0MDFCCi06MTAzOEQwMDAwMDQzMTAyNTNDMDM4MDAwQUM2MjAwMzAwMDAwMDAwMDczCi06MTAzOEUwMDAwMDAwMDAwMDAwMDAwMDAwOEM2MjAwMDAzMDQyMDAxMDY4Ci06MTAzOEYwMDAxMDQwRkZGRDM0NjIwNDAwQUY4MjAwMzAwM0UwMDAwODk2Ci06MTAzOTAwMDBBRjgwMDAzNDAzRTAwMDA4MDAwMDEwMjEwM0UwMDAwODRECi06MTAzOTEwMDAwMDAwMDAwMDMwODRGRkZGMzBBNUZGRkYwMDAwMTgyMUU5Ci06MTAzOTIwMDAxMDgwMDAwNzAwMDAwMDAwMzA4MjAwMDExMDQwMDAwMkZCCi06MTAzOTMwMDAwMDA0MjA0MjAwNjUxODIxMEEwMDBFMTYwMDA1Mjg0MEU4Ci06MTAzOTQwMDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDYyNEM2RkZGRjNECi06MTAzOTUwMDA4Q0EyMDAwMDI0QTUwMDA0QUM4MjAwMDAwQTAwMEUyMDA2Ci06MTAzOTYwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwODA4Ci06MTAzOTcwMDAyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCi06MTAzOTgwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNDczCi06MTAzOTkwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDgzNDQyMDA4MDgwCi06MTAzOUEwMDAyNDAzMDAwMUFDNDMwMDBDQTQ0MzAwMTBBNDQzMDAxMjA0Ci06MTAzOUIwMDBBNDQzMDAxNDAzRTAwMDA4QTQ0MzAwMTYyN0JERkZEODY5Ci06MTAzOUMwMDAyNDgyMDA4MDI0MDdGRjgwMzA0MzAwN0ZBRkIwMDAxMEM2Ci06MTAzOUQwMDAwMDgwODAyMTAwNDcyMDI0M0MwMjA4MDA4QzQyMDAyMDA3Ci06MTAzOUUwMDAzQzA4ODAwRUFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNDlBCi06MTAzOUYwMDBBRkJGMDAyMDNDMDk4MDAwMDA2ODE4MjEzMEIxMDBGRkYzCi06MTAzQTAwMDAzMEQyMDBGRjEwNDAwMDI5MDAwMDk4MjEyNjAyMDEwMDVBCi06MTAzQTEwMDBBRDI0MDAyQzAwNDcyODI0MzA0MjAwN0YwMDQ4MjAyMTlDCi06MTAzQTIwMDA5MDYyMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNDYxCi06MTAzQTMwMDAwMDAwMDAwMEFEMjUwMDJDOTQ4MjAwREEzMDUzRkZGRjE3Ci06MTAzQTQwMDAwRTAwMEQ3MTAwMDAwMDAwM0MwMzA4MDA5NDYzNEJGRTYzCi06MTAzQTUwMDA4RjgyMDAyQzAwMTEyQzAwMDBBMzI4MjUwMDEyMjQwMEM2Ci06MTAzQTYwMDAzQzAzNDAwMDM0ODQwMDAxMDBBMzI4MjVBQzUwMDAwMDMyCi06MTAzQTcwMDA4RkJGMDAyMEFDNDAwMDA0OEZCMjAwMThBQzUzMDAwODg4Ci06MTAzQTgwMDA4RkIxMDAxNEFDNDAwMDBDOEZCMzAwMUNBQzQ0MDAxMDhDCi06MTAzQTkwMDA4RkIwMDAxMEFDNDAwMDE0MjQwNDAwMDFBQzQwMDAxOEFBCi06MTAzQUEwMDAyN0JEMDAyODBBMDAwRDk4QUM0NTAwMUM4RkJGMDAyMEUwCi06MTAzQUIwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEFDCi06MTAzQUMwMDAwM0UwMDAwODI3QkQwMDI4M0MwNjgwMDAzNEMyMDEwMDQ2Ci06MTAzQUQwMDA5MDQzMDAwRjI0MDIwMDEwMTA2MjAwMEUyODY1MDAxMUIwCi06MTAzQUUwMDAxMEEwMDAwNzI0MDIwMDEyMjQwMjAwMDgyNDA1MDAzQTU2Ci06MTAzQUYwMDAxMDYyMDAwNjAwMDAzMDIxMDNFMDAwMDgwMDAwMDAwMDEyCi06MTAzQjAwMDAyNDA1MDAzNTE0NjJGRkZDMDAwMDMwMjEwQTAwMEUzRDQwCi06MTAzQjEwMDAwMDAwMDAwMDhDQzIwMDc0OEY4M0ZGQUMyNDQyMEZBMDExCi06MTAzQjIwMDAwM0UwMDAwOEFDNjIwMDBDMjdCREZGRThBRkJGMDAxMDQ3Ci06MTAzQjMwMDAwRTAwMDMyNTI0MDUwMDAxM0MwNDgwMDg4RkJGMDAxMEZGCi06MTAzQjQwMDAyNDAyMDAwMTM0ODMwMDgwQTQ2MjAwMTIyN0JEMDAxODAzCi06MTAzQjUwMDAyNDAyMDAwMTAzRTAwMDA4QTA4MDAwMUEyN0JERkZFMDU2Ci06MTAzQjYwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzZGCi06MTAzQjcwMDAzMEIyRkZGRjBFMDAwMzE1MDA4MDg4MjEzQzAyODAwODUwCi06MTAzQjgwMDAzNDUwMDA4MDkyMDIwMDA5MjQwMzAwMDQzMDQyMDBGRkY4Ci06MTAzQjkwMDAxNDQzMDAwQzNDMDI4MDA4MTI0MDAwMDgyNDAyMDAwQTcyCi06MTAzQkEwMDAwRTAwMEUzNDAwMDAwMDAwOTIwMjAwMDUyNDAzRkZGRTA4Ci06MTAzQkIwMDAwMDQzMTAyNEEyMDIwMDA1MjQwMjAwMTJBMjAyMDAwOTAwCi06MTAzQkMwMDAzQzAyODAwODM0NDIwMDgwMDIyMDIwMjEwRTAwMDMyMEE1Ci06MTAzQkQwMDBBMDQwMDAyNzE2NDAwMDAzMDIyMDIwMjEwRTAwMEU5ODZFCi06MTAzQkUwMDAwMDAwMDAwMDAyMjAyMDIxMzI0NjAwRkY4RkJGMDAxQzkxCi06MTAzQkYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAzODY4Ci06MTAzQzAwMDAwQTAwMEUzRDI3QkQwMDIwMjdCREZGRTBBRkJGMDAxQzBFCi06MTAzQzEwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAwRTAwMDMxNTIyCi06MTAzQzIwMDAwMDgwODAyMTBFMDAwRTM0MDAwMDAwMDAzQzAyODAwODVECi06MTAzQzMwMDAzNDQ1MDA4MDkwQTIwMDA5MjQxMjAwMTgzMDUxMDBGRjgyCi06MTAzQzQwMDAxMjMyMDAwMzAyMDAyMDIxMjQwMjAwMTJBMEEyMDAwOTY3Ci06MTAzQzUwMDA5MEEyMDAwNTI0MDNGRkZFMDA0MzEwMjQwRTAwMDMyMDYxCi06MTAzQzYwMDBBMEEyMDAwNTAyMDAyMDIxMjQwNTAwMjAxNjMyMDAwNzMyCi06MTAzQzcwMDAwMDAwMzAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNERDCi06MTAzQzgwMDA4RkIwMDAxMDBBMDAwMzI1MjdCRDAwMjA4RkJGMDAxQzQ1Ci06MTAzQzkwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAzOUM2Ci06MTAzQ0EwMDAwQTAwMEUzRDI3QkQwMDIwMjdCREZGRTgzQzAyODAwMDMyCi06MTAzQ0IwMDBBRkIwMDAxMEFGQkYwMDE0MzQ0MjAxMDA5NDQyMDAwQ0JBCi06MTAzQ0MwMDAyNDA1MDAzNjAwODA4MDIxMTQ0MDAwMTIzMDQ2MDBGRjk5Ci06MTAzQ0QwMDAwRTAwMDMxNTAwMDAwMDAwM0MwMjgwMDgzNDQyMDA4MDAyCi06MTAzQ0UwMDAyNDAzMDAxMkEwNDMwMDA5OTA0MzAwMDUzNDYzMDAxMDMwCi06MTAzQ0YwMDAwRTAwMEUzNEEwNDMwMDA1MEUwMDAzMjAwMjAwMjAyMTE4Ci06MTAzRDAwMDAwMjAwMjAyMTBFMDAwMzI1MjQwNTAwMjAwQTAwMEYxNUMzCi06MTAzRDEwMDAwMDAwMDAwMDBFMDAwRTNEMDAwMDAwMDAwRTAwMDMxNTI0Ci06MTAzRDIwMDAwMjAwMjAyMTNDMDI4MDA4OTA0MzAwMUIyNDA1RkY5RkQ1Ci06MTAzRDMwMDAwMjAwMjAyMTAwNjUxODI0OEZCRjAwMTQ4RkIwMDAxMEVFCi06MTAzRDQwMDBBMDQzMDAxQjBBMDAwMzIwMjdCRDAwMTgyN0JERkZFMDg5Ci06MTAzRDUwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTAzMEIxMDBGRjFBCi06MTAzRDYwMDAwRTAwMDMxNTAwODA4MDIxM0MwMjgwMDgyNDAzMDAxMjBECi06MTAzRDcwMDAzNDQyMDA4MDBFMDAwRTM0QTA0MzAwMDkwRTAwMDMyMEUwCi06MTAzRDgwMDAwMjAwMjAyMTAyMDAyMDIxMDIyMDMwMjE4RkJGMDAxOEQ0Ci06MTAzRDkwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzUwQTAwMEUzRENECi06MTAzREEwMDAyN0JEMDAyMDNDMDQ4MDA4OTA4MzAwMEU5MDgyMDAwQTBBCi06MTAzREIwMDAxNDQzMDAwQjAwMDAyODIxOEY4MkZGQUMyNDAzMDA1MDI1Ci06MTAzREMwMDAyNDA1MDAwMTkwNDIwMDAwMzA0MjAwRkYxNDQzMDAwNDJCCi06MTAzREQwMDAwMDAwMDAwMDkwODIwMDBFMjQ0MjAwMDFBMDgyMDAwRTJDCi06MTAzREUwMDAwM0UwMDAwODAwQTAxMDIxM0MwMzgwMDA4QzYyMDFGODcxCi06MTAzREYwMDAwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzBBMDYyMDFDNEMyCi06MTAzRTAwMDAzQzAyMTAwMDAzRTAwMDA4QUM2MjAxRjgyN0JERkZFMEFGCi06MTAzRTEwMDBBRkIyMDAxODNDMTI4MDA4QUZCMTAwMTRBRkJGMDAxQzU1Ci06MTAzRTIwMDBBRkIwMDAxMDM2NTEwMDgwOTIyMjAwMDkyNDAzMDAwQTJFCi06MTAzRTMwMDAzMDQyMDBGRjE0NDMwMDNBMDAwMDAwMDA4RTQzMDAwNEFCCi06MTAzRTQwMDA4RTIyMDAzODUwNjIwMDdFOEZCRjAwMUM5MjIyMDAwMDNDCi06MTAzRTUwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMjUzQzAyODAwMDQwCi06MTAzRTYwMDA4QzQyMDE0MDhFNDMwMDA0MzY0MjAxMDAwMjIwMjgyMThBCi06MTAzRTcwMDBBQzQzMDAxQzk2MjIwMDVDOEUyMzAwMzgzMDQyRkZGRkNBCi06MTAzRTgwMDAwMDAyMTA0MDAwNjIxODIxQUUyMzAwMUM4RTQzMDAwNDgzCi06MTAzRTkwMDA4RTI0MDAzODk2MjIwMDVDMDA2NDE4MjMzMDQyRkZGRjE1Ci06MTAzRUEwMDAwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkExMDQwMDAwNjhGCi06MTAzRUIwMDAwMDAwMDAwMDhFNDIwMDA0OEUyMzAwMzgwMDQzMTAyM0NGCi06MTAzRUMwMDAwQTAwMEY4MzAwMDIyMDQzOTYyMjAwNUMzMDQyRkZGRjZECi06MTAzRUQwMDAwMDAyMjA0MDNDMDI4MDA4MzQ0MzAxMDAzNDQyMDA4MDRDCi06MTAzRUUwMDBBQ0E0MDAyQ0EwNDAwMDI0MjQwMjAwMDFBMDYyMDAwQzFECi06MTAzRUYwMDAwRTAwMEYzNzAwMDAwMDAwMTA0MDAwNTE4RkJGMDAxQzYzCi06MTAzRjAwMDAzQzAyODAwMDhDNDQwMTQwOEZCRjAwMUM4RkIyMDAxODFGCi06MTAzRjEwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBGNDgyN0JEMDAyMDk5Ci06MTAzRjIwMDA5MjIyMDAwOTI0MDMwMDEwMzA0MjAwRkYxNDQzMDAwNEQxCi06MTAzRjMwMDAzQzAyODAwMDhDNDQwMTQwMEEwMDBGQzUwMDAwMjgyMThCCi06MTAzRjQwMDA5MjIyMDAwOTI0MDMwMDE2MzA0MjAwRkYxNDQzMDAwNkE5Ci06MTAzRjUwMDAyNDAyMDAxNEEyMjIwMDA5M0MwMjgwMDA4QzQ0MDE0MDhCCi06MTAzRjYwMDAwQTAwMEZEODhGQkYwMDFDOEUyMjAwMzg4RTIzMDAzQzIxCi06MTAzRjcwMDAwMDQzMTAyMzA0NDEwMDMyOEZCRjAwMUM5MjIyMDAyNzBGCi06MTAzRjgwMDAyNDQyMDAwMUEyMjIwMDI3OTIyMjAwMjczQzAzMDgwMEJECi06MTAzRjkwMDA4QzYzMDA0ODMwNDIwMEZGMTQ0MzAwMTYzQzEwODAwMDQwCi06MTAzRkEwMDA5MjIyMDAwOTI0MDMwMDA0MzA0MjAwRkYxNDQzMDAwOTU4Ci06MTAzRkIwMDAzQzAyODAwMDhDNDQwMTQwOEZCRjAwMUM4RkIyMDAxODZGCi06MTAzRkMwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNTAwOTMwQTAwMEVBNUQ1Ci06MTAzRkQwMDAyN0JEMDAyMDhDNDQwMTQwMjQwNTAwOTM4RkJGMDAxQ0E2Ci06MTAzRkUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMEYyMTlCCi06MTAzRkYwMDAyN0JEMDAyMDhFMDQwMTQwMEUwMDAzMTUwMDAwMDAwMEM0Ci06MTA0MDAwMDA4RTQyMDAwNDI0NDJGRkZGQUU0MjAwMDQ4RTIyMDAzQzk4Ci06MTA0MDEwMDAyNDQyRkZGRkFFMjIwMDNDMEUwMDAzMjA4RTA0MDE0MDJDCi06MTA0MDIwMDA4RTA0MDE0MDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEE2Ci06MTA0MDMwMDA4RkIwMDAxMDI0MDUwMDA0MEEwMDAzMjUyN0JEMDAyMENFCi06MTA0MDQwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODg5Ci06MTA0MDUwMDAyN0JEMDAyMDNDMDY4MDAwOENDMjAxODgzQzAzODAwOEZDCi06MTA0MDYwMDAzNDY1MDA4MDkwNjMwMDBFMDAwMjE0MDIzMDQ0MDBGRkFCCi06MTA0MDcwMDAzMDYzMDBGRjE0NjQwMDBFM0MwMjgwMDg5MEEyMDAyNjBBCi06MTA0MDgwMDAzMDQyMDBGRjEwNDQwMDA5OEY4MkZGQUNBMEE0MDAyNjNDCi06MTA0MDkwMDAyNDAzMDA1MDkwNDIwMDAwMzA0MjAwRkYxNDQzMDAwNjA5Ci06MTA0MEEwMDAwMDAwMDAwMDBBMDAwNThDOENDNDAxODAzQzAyODAwOERFCi06MTA0MEIwMDAzNDQyMDA4MEEwNDQwMDI2MDNFMDAwMDgwMDAwMDAwMDE1Ci06MTA0MEMwMDAyN0JERkZFMDMwRTcwMEZGQUZCMjAwMThBRkJGMDAxQzE0Ci06MTA0MEQwMDBBRkIxMDAxNEFGQjAwMDEwMDA4MDkwMjExNEUwMDAwNkQyCi06MTA0MEUwMDAzMEM2MDBGRjAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMENFCi06MTA0MEYwMDAwQTAwMTAzNzI0MDAwMTE3M0MwMzgwMDg5MDYyMDAwRTZDCi06MTA0MTAwMDAzMDQyMDBGRjE0NDYwMDIzMzQ2MjAwODA5MDQyMDAyNkIzCi06MTA0MTEwMDAzMDQyMDBGRjE0NDYwMDFGMDAwMDAwMDA5MDYyMDAwRkI0Ci06MTA0MTIwMDAzMDQyMDBGRjE0NDYwMDFCMDAwMDAwMDA5MDYyMDAwQUFECi06MTA0MTMwMDAzMDQyMDBGRjE0NDYwMDAzOEY5MEZGQUMwMDAwMDAwRERBCi06MTA0MTQwMDA4RjkwRkZBQzhGODJGRkIwM0MxMTgwMDBBRTA1MDAzQzI5Ci06MTA0MTUwMDBBQzQ1MDAwMEEwNjYwMDBBMEUwMDAzMTU4RTI0MDEwMDg1Ci06MTA0MTYwMDBBMjAwMDAyNDBFMDAwMzIwOEUyNDAxMDAzQzAzODAwMEU2Ci06MTA0MTcwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDJBQzcyMDFDMDEwCi06MTA0MTgwMDBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwQTAwMTAzOEMxCi06MTA0MTkwMDA4RkJGMDAxQzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMEE4Ci06MTA0MUEwMDAyNDAwMDE0MDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDkzCi06MTA0MUIwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA4RjgzRkZBQzA0Ci06MTA0MUMwMDAzQzAyODAwMDhDNDQwMTAwMzQ0MjAxMDA4QzY1MDAzQ0JDCi06MTA0MUQwMDA5MDQ2MDAxQjBBMDAwRkZFMjQwNzAwMDEzQzAyODAwOEU1Ci06MTA0MUUwMDA5MDQzMDAwRTkwNDIwMDBBMDA0MzEwMjYzMDQyMDBGRjI4Ci06MTA0MUYwMDAwM0UwMDAwODAwMDIxMDJCMjdCREZGRTAzQzAyODAwODBFCi06MTA0MjAwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMTgzNDUwMDA4MDQxCi06MTA0MjEwMDA5MjAyMDAwNTI0MDMwMDMwMzA0MjAwMzAxNDQzMDA4NDMxCi06MTA0MjIwMDAwMDgwODgyMTNDMDIwODAwOEM0MjAwMjAxMDQwMDA4MTYwCi06MTA0MjMwMDA4RkJGMDAxODBFMDAwRDcxMDAwMDAwMDA4Rjg2MDAyQzRCCi06MTA0MjQwMDBBQ0QxMDAwMDkyMDIwMDA4OTIwMzAwMDkzMDQyMDBGRjQ2Ci06MTA0MjUwMDAwMDAyMTIwMDMwNjMwMEZGMDA0MzEwMjVBQ0MyMDAwNENFCi06MTA0MjYwMDA5MjAyMDA0RDAwMDIxNjAwMDAwMjE2MDMwNDQxMDAwNUYwCi06MTA0MjcwMDAwMDAwMDAwMDNDMDMwODAwOEM2MzAwNDgwQTAwMTA3NjMwCi06MTA0MjgwMDAzQzEwODAwODkyMDIwMDA4MzA0MjAwNDAxNDQwMDAwM0I1Ci06MTA0MjkwMDAwMDAwMTgyMTkyMDIwMDI3MzA0MzAwRkYzQzEwODAwOEU0Ci06MTA0MkEwMDAzNjExMDA4MDkyMjIwMDREMDAwMzFFMDAzQzA1MDgwMERDCi06MTA0MkIwMDA5NEE1NEJGRTMwNDIwMEZGMDAwMjE0MDAwMDYyMTgyNTU2Ci06MTA0MkMwMDBBQ0MzMDAwODhFMjMwMDMwM0MwMkMwMEIwMEEyMjgyNTlFCi06MTA0MkQwMDBBQ0MzMDAwQzhFMjIwMDM0MDAwMDIwMjFBQ0MyMDAxMEMwCi06MTA0MkUwMDA4RTIyMDAzOEFDQzIwMDE0OEUyMjAwM0NBQ0MyMDAxOEYyCi06MTA0MkYwMDAwRTAwMEQ5OEFDQzUwMDFDOEUwMjAwMDQ4Rjg0MDAyQ0FCCi06MTA0MzAwMDAzQzA1ODAwMEFDODIwMDAwOEUyMjAwMjBBQzgyMDAwNEJDCi06MTA0MzEwMDA4RTIyMDAxQ0FDODIwMDA4OEUyMjAwNTg4Q0EzMDA3NEYwCi06MTA0MzIwMDAwMDQzMTAyMUFDODIwMDBDOEUyMjAwMkNBQzgyMDAxMEM1Ci06MTA0MzMwMDA4RTIyMDA0MDhFMjMwMDQ0MDAwMjE0MDAwMDQzMTAyNTBBCi06MTA0MzQwMDBBQzgyMDAxNDkyMjIwMDREMjQwMzAwODAzMDQyMDBGRjEyCi06MTA0MzUwMDAxNDQzMDAwMzAwMDAwMDAwMEEwMDEwQjhBQzgwMDAxOEVECi06MTA0MzYwMDA4RTIzMDAwQzI0MDIwMDAxMTA2MjAwMEUyNDAyRkZGRkM1Ci06MTA0MzcwMDA5MjIyMDAwODMwNDIwMDQwMTQ0MDAwMEEyNDAyRkZGRjRECi06MTA0MzgwMDA4RTIzMDAwQzhDQTIwMDc0MDA2MjE4MjMzQzAyMDgwMEVCCi06MTA0MzkwMDAwMDYyMTAyNDE0NDAwMDAyMDAwMDI4MjEwMDYwMjgyMTNGCi06MTA0M0EwMDAwMDA1MTA0M0FDODIwMDE4M0MwMjA4MDA5NDQyNEJGRTBBCi06MTA0M0IwMDAzQzAzQzAwQzAwMDAyMDIxMDA0MzEwMjU4RjgzMDAyQ0ZCCi06MTA0M0MwMDAwRTAwMEQ5OEFDNjIwMDFDM0MwNDgwMDgzNDgyMDEwMDkxCi06MTA0M0QwMDA4QzQyMDAwMDhGODMwMDJDMzQ4NDAwODAzQzA2MDgwMDRGCi06MTA0M0UwMDA5NEM2NEJGRUFDNjIwMDAwQUM2MDAwMDQ4Qzg1MDA0OEIzCi06MTA0M0YwMDAzQzAyNDAwRDAwQzIzMDI1QUM2NTAwMDhBQzYwMDAwQ0VBCi06MTA0NDAwMDBBQzYwMDAxMDkwODIwMDA1OEZCRjAwMTg4RkIxMDAxNEJGCi06MTA0NDEwMDAwMDAyMTYwMEFDNjIwMDE0OEZCMDAwMTBBQzYwMDAxOEVGCi06MTA0NDIwMDAyNDA0MDAwMUFDNjYwMDFDMEEwMDBEOTgyN0JEMDAyMDgyCi06MTA0NDMwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODg4Ci06MTA0NDQwMDAyN0JEMDAyMDNDMDI4MDAwOTQ0MzAwN0MzQzAyODAwODkxCi06MTA0NDUwMDAzNDQ2MDEwMDMwODQwMEZGMzA2NUZGRkYyNDAyMDAwNTcwCi06MTA0NDYwMDAyNEEzNDY1MEEwQzQwMDBDNTQ4MjAwMEMzMDY1RkZGRjBBCi06MTA0NDcwMDA5MEMyMDAwRDJDNDIwMDA3MTA0MDAwMDcyNEEzMEEwMDQwCi06MTA0NDgwMDA5MEMzMDAwRDI0MDIwMDE0MDA2MjEwMDQwMEEyMTAyMTQ5Ci06MTA0NDkwMDAwQTAwMTBGNTMwNDVGRkZGMzA2NUZGRkYzQzAyODAwODQxCi06MTA0NEEwMDAzNDQyMDA4MDAzRTAwMDA4QTQ0NTAwMTQzQzAzODAwODY3Ci06MTA0NEIwMDAzNDY4MDA4MEFEMDUwMDM4MzQ2NzAxMDA4Q0UyMDAxQ0QwCi06MTA0NEMwMDAzMDg0MDBGRjAwQTIxMDIzMTg0MDAwMDMzMEM2MDBGRjE0Ci06MTA0NEQwMDAyNEEyRkZGQ0FDRTIwMDFDMzA4MjAwMDE1MDQwMDAwODI2Ci06MTA0NEUwMDAzQzAzODAwODhEMDIwMDNDMDBBMjEwMjMwNDQxMDAxMjBFCi06MTA0NEYwMDAyNDA0MDAwNThDNjIwMDA0MTBBMjAwMEYzQzAzODAwODE1Ci06MTA0NTAwMDA4QzYyMDAwNDE0QTIwMDE4MDAwMDAwMDAzQzAyMDgwMEE1Ci06MTA0NTEwMDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMDkzQzAyODAwODQ0Ci06MTA0NTIwMDAzNDYyMDA4MDkwNjMwMDA4OTA0MjAwNEMxNDQzMDAwNDAxCi06MTA0NTMwMDAzQzAyODAwODI0MDQwMDA0MEEwMDEwREYwMDAwMDAwMDkwCi06MTA0NTQwMDAzNDQzMDA4MDM0NDIwMTAwQTA0MDAwMEMyNDAyMDAwMUVBCi06MTA0NTUwMDBBNDYyMDAxNDEwQzAwMDA0M0MwMjgwMDA4QzQ0MDEwMERFCi06MTA0NTYwMDAwQTAwMEY0ODAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMEZGCi06MTA0NTcwMDAyN0JERkZFODAwQTYxODIzQUZCRjAwMTAxODYwMDA0RTRCCi06MTA0NTgwMDAzMDg4MDBGRjNDMDI4MDA4MzQ0NzAwODBBMEUwMDAyNDBGCi06MTA0NTkwMDAzNDQ0MDEwMEEwRTAwMDI3OEM4MjAwMUMwMEEyMTAyM0ZDCi06MTA0NUEwMDAwNDQwMDAyQjAwMDAwMDAwOENFMjAwM0M5NEUzMDA1QzFGCi06MTA0NUIwMDA4Q0U0MDAyQzAwNDUzMDIzMzA2M0ZGRkYwMEMzMTgyMTNBCi06MTA0NUMwMDAwMDgzMjAyQjEwODAwMDA0MDBFMDE4MjE4Q0UyMDAyQ0Q2Ci06MTA0NUQwMDAwQTAwMTE0ODAwQTIxMDIxOTRFMjAwNUMzMDQyRkZGRjYzCi06MTA0NUUwMDAwMEMyMTAyMTAwQTIxMDIxQUM2MjAwMUMzQzAyODAwODE1Ci06MTA0NUYwMDAzNDQ3MDA4MDk0RTIwMDVDOENFMzAwMUMzMDQyRkZGRkYzCi06MTA0NjAwMDAwMDAyMTA0MDAwQTIxMDIxMDA0MzEwMkIxMDQwMDAwM0I0Ci06MTA0NjEwMDAwMDAwMDAwMDBBMDAxMTU5OENFMjAwMUM5NEUyMDA1Q0NBCi06MTA0NjIwMDAzMDQyRkZGRjAwMDIxMDQwMDBBMjEwMjFBQ0UyMDAxQzRCCi06MTA0NjMwMDAzQzAyODAwODM0NDIwMTAwOEZCRjAwMTAwMTAwMjAyMTlECi06MTA0NjQwMDAyNDA2MDAwMUEwNDAwMDBDMEEwMDEwRjkyN0JEMDAxODQ0Ci06MTA0NjUwMDA4Q0UyMDAxQzAwNDYxMDIzMDA0MzEwMkI1NDQwMDAwMTQ0Ci06MTA0NjYwMDBBQ0U1MDAxQzk0RTIwMDVDMzA0MkZGRkYwMDYyMTAyQkJFCi06MTA0NjcwMDAxNDQwMDAwNzI0MDIwMDAyOTRFMjAwNUM4Q0UzMDAxQzVBCi06MTA0NjgwMDAzMDQyRkZGRjAwNjIxODIxQUNFMzAwMUMyNDAyMDAwMjRDCi06MTA0NjkwMDBBQ0U1MDAzODBFMDAwRjM3QTA4MjAwMEMxMDQwMDAxODY3Ci06MTA0NkEwMDA4RkJGMDAxMDNDMDI4MDAwOEM0NDAxMDA4RkJGMDAxMEJGCi06MTA0NkIwMDAwQTAwMEY0ODI3QkQwMDE4MzEwMjAwMTAxMDQwMDAxMEZBCi06MTA0NkMwMDA4RkJGMDAxMDNDMDI4MDA4MzQ0NTAwODA4Q0EzMDAxQzgyCi06MTA0NkQwMDA5NEEyMDA1QzAwNjYxODIzMzA0MkZGRkYwMDYyMTgyMTlDCi06MTA0NkUwMDAzQzAyM0ZGRjM0NDRGRkZGMDA4MzEwMkI1NDQwMDAwMTg1Ci06MTA0NkYwMDAwMDgwMTgyMTAwQzMxMDIxQUNBMjAwMUM4RkJGMDAxMDQ1Ci06MTA0NzAwMDAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTgwMEMwNDAyMUQ2Ci06MTA0NzEwMDAwMEE2MzAyM0FGQkYwMDEwMThDMDAwMjYzMDhBMDBGRjZCCi06MTA0NzIwMDAzQzAyODAwODM0NDkwMDgwOEQyNDAwMUM4RDIzMDAyQzFECi06MTA0NzMwMDAwMDg4MjAyMzAwNjQxODJCMTA2MDAwMEYzNDQ3MDEwMDBDCi06MTA0NzQwMDA4Q0UyMDAyMDAwNDYxMDIxQUNFMjAwMjA4Q0UyMDAyMDI4Ci06MTA0NzUwMDAwMDQ0MTAyQjE0NDAwMDBCM0MwMjNGRkY4Q0UyMDAyMDcxCi06MTA0NzYwMDAwMDQ0MTAyM0FDRTIwMDIwOTUyMjAwNUMzMDQyRkZGRkExCi06MTA0NzcwMDAwQTAwMTFBRTAwODIyMDIxQUNFMDAwMjAwMDg2MjAyMTNBCi06MTA0NzgwMDAzQzAyM0ZGRjM0NDNGRkZGMDA2NDEwMkI1NDQwMDAwMTA0Ci06MTA0NzkwMDAwMDYwMjAyMTNDMDI4MDA4MzQ0MjAwODAwMDg1MTgyMUZFCi06MTA0N0EwMDBBQzQzMDAxQ0EwNDAwMDI0QTA0MDAwMjcwQTAwMTFGRERCCi06MTA0N0IwMDA4RkJGMDAxMDMxNDIwMDEwMTA0MDAwNDA4RkJGMDAxMDJBCi06MTA0N0MwMDAzQzA2ODAwODM0QzQwMDgwOEM4MjAwM0MwMDQ4MTAyM0UyCi06MTA0N0QwMDA1ODQwMDAzQjAxNDAyMDIxOTA4MjAwMjQyNDQyMDAwMUU3Ci06MTA0N0UwMDBBMDgyMDAyNDkwODIwMDI0M0MwMzA4MDA4QzYzMDAyNEYzCi06MTA0N0YwMDAzMDQyMDBGRjAwNDMxMDJCNTQ0MDAwMzQ4RkJGMDAxMEE0Ci06MTA0ODAwMDAzNEMyMDEwMDhDNDIwMDFDMDBBMjEwMjMxODQwMDAyRjZCCi06MTA0ODEwMDA4RkJGMDAxMDhDQzMwMDA0OTQ4MjAwNUMwMDY4MTgyM0QyCi06MTA0ODIwMDAzMDQyRkZGRjAwMDMxODQzMDAwMjEwNDAwMDQzMTAyQUVCCi06MTA0ODMwMDAxMDQwMDAwNTAwMDAwMDAwOENDMjAwMDQwMDQ4MTAyMzU2Ci06MTA0ODQwMDAwQTAwMTFFMzAwMDIxMDQzOTQ4MjAwNUMzMDQyRkZGRjMzCi06MTA0ODUwMDAwMDAyMTA0MDNDMDY4MDA4QUM4MjAwMkMzNEM1MDA4MDY5Ci06MTA0ODYwMDA5NEEyMDA1QzhDQTQwMDJDOTRBMzAwNUMzMDQyRkZGRjU3Ci06MTA0ODcwMDAwMDAyMTA0MDAwODIyMDIxMzA2M0ZGRkYwMDgzMjAyMUNFCi06MTA0ODgwMDAwMTA0MTAyMUFDQTIwMDFDOENDMjAwMDQzNEM2MDEwMDNCCi06MTA0ODkwMDBBQ0MyMDAxQzI0MDIwMDAyMEUwMDBGMzdBMEMyMDAwQ0E0Ci06MTA0OEEwMDAxMDQwMDAwQThGQkYwMDEwM0MwMjgwMDA4QzQ0MDEwMEMxCi06MTA0OEIwMDA4RkJGMDAxMDBBMDAwRjQ4MjdCRDAwMTgwMTQwMjAyMUJCCi06MTA0OEMwMDAyNDA2MDAwMTBBMDAxMEY5MjdCRDAwMTgwM0UwMDAwOEMzCi06MTA0OEQwMDAyN0JEMDAxODNDMDk4MDA4MzUyQTAwODA4RDQyMDAzQzI1Ci06MTA0OEUwMDAzMDgzMDBGRjM1MkIwMTAwMDA0NjEwMjMzMEU3MDBGRjI2Ci06MTA0OEYwMDAxODQwMDAwNjAwNjAyMDIxMjQwMjAwMDFBMTYwMDAwQzg1Ci06MTA0OTAwMDBBMTYwMDAwRDBBMDAxMTkwQTU0MjAwMTQyNDAyMDAwNUM4Ci06MTA0OTEwMDAzNTI5MDEwMDAwMDAzMDIxMTRFMjAwMDhBMTQwMDAyN0UxCi06MTA0OTIwMDA5MTIyMDAwRDJDNDIwMDA2MTA0MDAwMDQwMDAwMDAwMEZGCi06MTA0OTMwMDA5MTIyMDAwRDI0NDIwMDAxQTEyMjAwMEQwQTAwMTBGOTZECi06MTA0OTQwMDAwMDAwMDAwMDNDMDM4MDA4M0MwMjgwMDAzNDQyMDEwMDZCCi06MTA0OTUwMDAzNDY0MDA4MDM0NjMwMTAwOTA0NTAwMEE4QzQ4MDAxNEUwCi06MTA0OTYwMDA4Qzg5MDAzODkwNjIwMDBDMzBBQTAwRkYwMTI4MTgyM0JGCi06MTA0OTcwMDAzMDQ3MDBGRjFDNjAwMDBFMkNFNDAwMDYyNDAyMDAwMUZBCi06MTA0OTgwMDAwMEUyMTAwNDEwODAwMDBBMzA0MzAwMDMwMTQwMjAyMTlGCi06MTA0OTkwMDAwMTAwMjgyMTAxMjAzMDIxMTQ2MDAwMDczMDRCMDAwQzU5Ci06MTA0OUEwMDAxNTYwMDAwNzMwNDIwMDMwMTQ0MDAwMDcwMDAwMDAwMDhFCi06MTA0OUIwMDAwM0UwMDAwODAwMDAwMDAwMEEwMDExOTAwMDAwMDAwMDYxCi06MTA0OUMwMDAwQTAwMTEyQTAwMDAwMDAwMEEwMDEyMDMwMDAwMDAwMDgzCi06MTA0OUQwMDAzQzAzODAwODM0NjQwMTAwMjQwMjAwMDNBMDgyMDAwQzIwCi06MTA0OUUwMDA4QzYyMDAwNDAzRTAwMDA4QUM4MjAwMUMzQzA1ODAwOEQ3Ci06MTA0OUYwMDAzNEEzMDA4MDkwNjIwMDI3MzRBNTAxMDAyNDA2MDA0MzAwCi06MTA0QTAwMDAyNDQyMDAwMUEwNjIwMDI3OTA2MzAwMjczQzAyMDgwMEI2Ci06MTA0QTEwMDA4QzQyMDA0ODMwNjMwMEZGMTQ2MjAwMDQzQzA3NjAyMUIwCi06MTA0QTIwMDA5NEE1MDBEQTBBMDAwOEVFMzBBNUZGRkYwM0UwMDAwOEI1Ci06MTA0QTMwMDAwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTAzQzAyODAwMDZGCi06MTA0QTQwMDAwRTAwMTI0OThDNDQwMTgwM0MwMjgwMDgzNDQzMDEwMDZFCi06MTA0QTUwMDBBMDYwMDAwQzhDNDIwMDA0OEZCRjAwMTAyN0JEMDAxODFFCi06MTA0QTYwMDAwM0UwMDAwOEFDNjIwMDFDMjdCREZGRTAzQzAyODAwOEE4Ci06MTA0QTcwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTAzNDQ1MDA4MEQ0Ci06MTA0QTgwMDAzNDQ2MDEwMDNDMDg4MDAwOEQwOTAxNDA5MEMzMDAwQ0IxCi06MTA0QTkwMDA4Q0E0MDAzQzhDQTIwMDM4MTQ4MjAwMzgzMDY3MDBGRkUwCi06MTA0QUEwMDA5NTAyMDA3QzkwQTMwMDI3MTQ2MDAwMDkzMDQ1RkZGRkE5Ci06MTA0QUIwMDAyNDAyMDAwNTU0RTIwMDA4M0MwNDgwMDg5MEMyMDAwRDY2Ci06MTA0QUMwMDAyNDQyMDAwMUEwQzIwMDBEMEEwMDEyODQzQzA0ODAwOEE4Ci06MTA0QUQwMDBBMEMwMDAwRDNDMDQ4MDA4MzQ4MjAxMDA5MDQyMDAwQzBDCi06MTA0QUUwMDAyNDAzMDAwNTMwNDIwMEZGMTQ0MzAwMEEyNEEyMDVEQzIxCi06MTA0QUYwMDAzNDgzMDA4MDkwNjIwMDI3MkM0MjAwMDc1MDQwMDAwNTVDCi06MTA0QjAwMDAyNEEyMEEwMDkwNjMwMDI3MjQwMjAwMTQwMDYyMTAwNDBCCi06MTA0QjEwMDAwMEEyMTAyMTNDMTA4MDA4MzYxMDAwODAzMDQ1RkZGRkI1Ci06MTA0QjIwMDAwMTIwMjAyMTBFMDAxMjQ5QTYwNTAwMTQ5NjAyMDA1QzA3Ci06MTA0QjMwMDA4RTAzMDAzODNDMTE4MDAwMzA0MkZGRkYwMDAyMTA0MDFECi06MTA0QjQwMDAwMDYyMTgyMUFFMDMwMDFDMEUwMDAzMTU4RTI0MDE0MEU0Ci06MTA0QjUwMDA5MjAyMDAyNTM0NDIwMDQwQTIwMjAwMjUwRTAwMDMyMEVDCi06MTA0QjYwMDA4RTI0MDE0MDhFMjQwMTQwOEZCRjAwMTg4RkIxMDAxNEE1Ci06MTA0QjcwMDA4RkIwMDAxMDBBMDAwRjQ4MjdCRDAwMjA4RkJGMDAxODFCCi06MTA0QjgwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDkzCi06MTA0QjkwMDA4MDA4MDEwMDgwMDgwMDgwODAwODAwMDA4MDA4MDI0MDMyCi06MTA0QkEwMDAwODAwMEVGMDA4MDAwRjQ4MDgwMDBGOEMwODAwMTAyMEM1Ci06MTA0QkIwMDAwODAwMTA2NDgwMDgwMTAwODAwODAwODA4MDA4MDAwMDYwCi06MTA0QkMwMDAwQTAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREFFCi06MTA0QkQwMDA2MzcwMzQyRTM2MkUzMTM3MDAwMDAwMDAwNDA2MTEwNEI1Ci06MTA0QkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTA0QkYwMDAwMDAwMDAwMDM4MDAzQzAwMDAwMDAwMDAwMDAwMDAwMDQxCi06MTA0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDg0Ci06MTA0QzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Ci06MTA0QzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Ci06MTA0QzMwMDAwMDAwMDAwMDIxMDAzODAwMDAwMDAwMDEwMDAwMDAyQkVGCi06MTA0QzQwMDAwMDAwMDAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDQ0Ci06MTA0QzUwMDAwMDAwMDAwRDNDMDIwODAwMjQ0MjU1QzQzQzAzMDgwMDNCCi06MTA0QzYwMDAyNDYzNTdGNEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDY4Ci06MTA0QzcwMDAyNDQyMDAwNDNDMUQwODAwMzdCRDlGRkMwM0EwRjAyMTI2Ci06MTA0QzgwMDAzQzEwMDgwMDI2MTAwMDgwM0MxQzA4MDAyNzlDNTVDNERFCi06MTA0QzkwMDAwRTAwMDI2QTAwMDAwMDAwMDAwMDAwMEQwMEEwMTgyMUI0Ci06MTA0Q0EwMDAwMDgwMTAyMTAwODAyODIxM0MwNDYwMDAzQzA3NjAwMDQ3Ci06MTA0Q0IwMDAyNDA2MDAwODEwNjAwMDA2MzQ4NDIwNzg4QzQyMDAwMDJFCi06MTA0Q0MwMDBBQ0UyMjAwODhDNjMwMDAwMDNFMDAwMDhBQ0UzMjAwQzk5Ci06MTA0Q0QwMDAwQTAwMEUxQzAwMDAwMDAwMjQwMzAwNDAzQzAyNjAwMDlCCi06MTA0Q0UwMDAwM0UwMDAwOEFDNDMyMDAwM0MwNzYwMDA4Rjg2MDAwMDEyCi06MTA0Q0YwMDA4Q0U1MjA3NDAwODYxMDIxMDBBMjE4MkIxNDYwMDAwNzk4Ci06MTA0RDAwMDAwMDAwMjgyMThGOEFGREVDMjQwNTAwMDFBMTQ0MDAxMzM2Ci06MTA0RDEwMDA4Rjg5MDAwMDAxMjQ0MDIxQUY4ODAwMDAwM0UwMDAwOEQzCi06MTA0RDIwMDAwMEEwMTAyMThGODRGREVDOEY4NTAwMDA5MDg2MDAxMzc5Ci06MTA0RDMwMDAzMEMzMDBGRjAwQTMxMDIzQUY4MjAwMDAwM0UwMDAwODhGCi06MTA0RDQwMDBBMDgwMDAxMzhGODRGREVDMjdCREZGRThBRkIwMDAxMEZBCi06MTA0RDUwMDBBRkJGMDAxNDkwODkwMDExOTA4NzAwMTEyNDAyMDAyODMxCi06MTA0RDYwMDAzMTI4MDBGRjM5MDYwMDI4MzBFMzAwRkYyNDg1MDAyQzlECi06MTA0RDcwMDAyQ0QwMDAwMTEwNjIwMDE2MjQ4NDAwMUMwRTAwMDAzN0E1Ci06MTA0RDgwMDAwMDAwMDAwMDhGOEZGREVDM0MwNTYwMDAyNDAyMDIwNDRGCi06MTA0RDkwMDA5NUVFMDAzRTk1RUQwMDNDMDAwRTVDMDAzMUFDRkZGRjRGCi06MTA0REEwMDAwMTZDNTAyNUFDQUEyMDEwNTIwMDAwMDEyNDAyMDAwNDFFCi06MTA0REIwMDBBQ0EyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTA0REMwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODRCCi06MTA0REQwMDAwQTAwMDA2RjAwMDAyODIxOEY4NUZERUMyN0JERkZEODU5Ci06MTA0REUwMDBBRkJGMDAyMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNENBCi06MTA0REYwMDBBRkIwMDAxMDAwODA5ODIxOTBBNDAwMTEyNEIwMDAxQ0Q2Ci06MTA0RTAwMDAyNEIxMDAyQzMwODMwMEZGMzg2MjAwMjgwRTAwMDA1OUM2Ci06MTA0RTEwMDAyQzUyMDAwMTBFMDAwMDYxMDAwMDAwMDAwMjAwMjAyMTYxCi06MTA0RTIwMDAxMjQwMDAwMjAyMjAyODIxMDAwMDI4MjEwRTAwMDAzNzM1Ci06MTA0RTMwMDAwMDAwMDAwMDhGOERGREVDM0MwODgwMDAzQzA1NjAwMDA4Ci06MTA0RTQwMDA5NUFDMDAzRTk1QUIwMDNDMDI2ODMwMjUwMDBDNEMwMDUwCi06MTA0RTUwMDAzMTZBRkZGRjAxMkEzODI1QUNBNzIwMTAyNDAyMDIwMjg0Ci06MTA0RTYwMDBBQ0E2MjAxNDUyNDAwMDAxMjQwMjAwMDI4RkJGMDAyMDkzCi06MTA0RTcwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEQ4Ci06MTA0RTgwMDAyN0JEMDAyODAzRTAwMDA4QUNBMjIwMDAyN0JERkZFMEZBCi06MTA0RTkwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzJDCi06MTA0RUEwMDAzQzExNjAwMDhFMjMyMDc0OEY4MjAwMDAzMEQwRkZGRjAxCi06MTA0RUIwMDAzMEYyRkZGRjEwNjIwMDBDMjQwNjAwOEYwRTAwMDAzNzU2Ci06MTA0RUMwMDAwMDAwMDAwMDNDMDY4MDFGMDAxMDQ0MDAzNEM1RkYwMEI1Ci06MTA0RUQwMDAwMTEyMzgyNTI0MDQwMDAyQUUyNzIwMTAwMDAwMzAyMUUyCi06MTA0RUUwMDBBRTI1MjAxNEFFMjQyMDAwOEZCRjAwMUM4RkIyMDAxODA2Ci06MTA0RUYwMDA4RkIxMDAxNDhGQjAwMDEwMDBDMDEwMjEwM0UwMDAwODMzCi06MTA0RjAwMDAyN0JEMDAyMDI3QkRGRkUwQUZCMDAwMTAzMEQwRkZGRjZECi06MTA0RjEwMDBBRkJGMDAxOEFGQjEwMDE0MEUwMDAwMzczMEYxRkZGRjMzCi06MTA0RjIwMDAwMDEwMjQwMDAwOTE4MDI1M0MwMzYwMDBBQzcwMjAxMDJDCi06MTA0RjMwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyNDAyMDAwNDNFCi06MTA0RjQwMDBBQzYyMjAwMDI3QkQwMDIwMDNFMDAwMDgwMDAwMTAyMTEzCi06MTA0RjUwMDAyN0JERkZFODNDMEM2MDE4QUZCRjAwMTA4RDk4NTAwMEQzCi06MTA0RjYwMDAyNDE5RkY3RjNDMDg4MDAwMDMxOTc4MjQzNUVFMzgwQ0EzCi06MTA0RjcwMDAzNDBEODA3MTI0MEEwMDMxMjQwOTBDMDBBRDhFNTAwMERDCi06MTA0RjgwMDAzQzBCODAwQUFEOEQ1M0JDQUQwQTAwMDhBRDA5MDAyNDZFCi06MTA0RjkwMDAwRTAwMDQ4REFGOEIwMDJDMEUwMDA0NEIwMDAwMDAwMEFGCi06MTA0RkEwMDAwRTAwMDA0NjAwMDAwMDAwM0MwNzYwMDA4Q0U1MDgwODg5Ci06MTA0RkIwMDAyNDA2RkZGMDNDMDM1NzA5MDBBNjIwMjQzNDYyRjAwMEM5Ci06MTA0RkMwMDAxMDgyMDA0ODI0MUYwMDAxQUY4MDAwMzgwRTAwMEJBRTk1Ci06MTA0RkQwMDAwMDAwMDAwMDNDMDY2MDE2OENDNzAwMDAzQzA4NjAxNDBFCi06MTA0RkUwMDA4RDA1MDBBMDNDMDNGRkZGMDBFMzIwMjQzQzAyNTM1MzQ3Ci06MTA0RkYwMDAwMDA1MUZDMjEwODIwMDM1MzRDNTdDMDA5NEEyMDFGMjY2Ci06MTA1MDAwMDBBNzgwMDA1MDEwNDAwMDAzQTc4MDAwNjAzODRDMUUxRThGCi06MTA1MDEwMDBBNzhDMDA1MDk0QTIwMUY4MTA0MDAwMDQ4RjhFMDAzODM1Ci06MTA1MDIwMDAzODREMUUxRUE3OEQwMDYwOEY4RTAwMzgxMUMwMDAwNDAxCi06MTA1MDMwMDA5Nzg0MDA2MDI0MEYwMDIwQTc4RjAwNTA5Nzg0MDA2MEExCi06MTA1MDQwMDAyQzk4MDA4MTUzMDAwMDAxMjQwNDAwODA5Nzg1MDA1MEIzCi06MTA1MDUwMDAyQ0I5MDQwMTUzMjAwMDAxMjQwNTA0MDAzQzAzNjAwMDI2Ci06MTA1MDYwMDA4QzY3MDQzODI0MUYxMDNDMzBFMkZGRkYxMDVGMDAwMzAwCi06MTA1MDcwMDAzMDg4RkZGRjUxMDAwMDBCMjQwNjAwNTBBMzgwMDA2MjFGCi06MTA1MDgwMDA5Mzg5MDA2MjExMjAwMDBCOEZCRjAwMTAyN0JEMDAxODBDCi06MTA1MDkwMDBBNzgwMDA2MEE3ODAwMDUwQTc4MDAwNTgwM0UwMDAwOEE4Ci06MTA1MEEwMDBBNzgwMDA3NkEzODYwMDYyOTM4OTAwNjIxNTIwRkZGNzJGCi06MTA1MEIwMDA4RkJGMDAxMDI3QkQwMDE4QTc4NDAwNjBBNzg1MDA1MDhGCi06MTA1MEMwMDBBNzgwMDA1ODAzRTAwMDA4QTc4MDAwNzYwMDAzNTg4MEZFCi06MTA1MEQwMDAwMTY2NTAyMThENDkwMDA0M0MwNjYwMDAwQTAwMDEwRjYyCi06MTA1MEUwMDAwMTI2MjgyMTBBMDAwMTAzQUY5RjAwMzgzMDgzRkZGRjBCCi06MTA1MEYwMDA4Rjg4MDAyQzhGODcwMDI4MDAwMzIxNDAzQzA1ODAwMDBBCi06MTA1MTAwMDAzQzAyMDA1MDAwODI0ODI1M0MwNjYwMDAzQzBBMDEwMDM5Ci06MTA1MTEwMDAzNEFDMDQwMDhDQ0QwOEUwMDFBQTU4MjQxMTYwMDAwNUNECi06MTA1MTIwMDAwMDAwMDAwMDhDQ0YwOEUwMjRFNzAwMDEwMUVBNzAyNUIwCi06MTA1MTMwMDBBQ0NFMDhFMDhEMTkwMDEwMDE4MDU4MjFBQ0I5MDAzOEMwCi06MTA1MTQwMDA4RDE4MDAxNEFDQjgwMDNDQUNBOTAwMzAwMDAwMDAwMDgxCi06MTA1MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTA1MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzAzODAwMDgwCi06MTA1MTcwMDA4QzY0MDAwMDMwODIwMDIwMTA0MEZGRkQzQzBGNjAwMDc2Ci06MTA1MTgwMDA4REVEMDhFMDNDMEUwMTAwMDFBRTE4MjQxNDYwRkZFMTMzCi06MTA1MTkwMDAwMDAwMDAwMEFGODcwMDI4MDNFMDAwMDhBRjhCMDAzQzUwCi06MTA1MUEwMDA4Rjg1MDAyQzI0MEJGRkYwM0MwNjgwMDA5NEE3MDAxQThBCi06MTA1MUIwMDA4Q0E5MDAyNDMwRUNGRkZGMDAwQzM4QzAwMEVCNTAyNDE5Ci06MTA1MUMwMDAwMTJBNDAyMUFDQzgwMDNDOENBNDAwMjQ4Q0MzMDAzQ0M0Ci06MTA1MUQwMDAwMDgzMTAyMzE4NDAwMDMzMDAwMDAwMDA4Q0FEMDAyMDM1Ci06MTA1MUUwMDAyNUEyMDAwMTNDMEYwMDUwQUNDMjAwMzgzNUVFMDAxMDgzCi06MTA1MUYwMDAzQzA2ODAwMEFDQ0UwMDMwMDAwMDAwMDAwMDAwMDAwMDQzCi06MTA1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTA1MjEwMDAwMDAwMDAwMDAwMDAwMDAwM0MwNDgwMDA4Qzk5MDAwMEE5Ci06MTA1MjIwMDAzMzM4MDAyMDEzMDBGRkZEMzBFMjAwMDgxMDQwMDAxNzYzCi06MTA1MjMwMDAzQzA5ODAwMDhDODgwNDA4QUNBODAwMTA4QzgzMDQwQzA2Ci06MTA1MjQwMDBBQ0EzMDAxNDNDMTkwMDIwM0MxODgwMDBBRjE5MDAzMEJBCi06MTA1MjUwMDA5NEFFMDAxODk0QUYwMDFDMDFDRjMwMjFBNEE2MDAxODEyCi06MTA1MjYwMDA5NEFEMDAxQTI1QTcwMDAxQTRBNzAwMUE5NEFCMDAxQTU4Ci06MTA1MjcwMDA5NEFDMDAxRTExOEIwMDAzMDAwMDAwMDAwM0UwMDAwODQ2Ci06MTA1MjgwMDAwMDAwMDAwMDAzRTAwMDA4QTRBMDAwMUE4RDJBMDQwMDFBCi06MTA1MjkwMDBBQ0FBMDAxMDhEMjQwNDA0QUNBNDAwMTQwQTAwMDFBMkRFCi06MTA1MkEwMDAzQzE5MDAyMDhDQTIwMDIwMEEwMDAxOEEzQzBGMDA1MDBCCi06MTA1MkIwMDAwQTAwMDE3ODAwMDAwMDAwM0MwMzA4MDA4QzYzMDAyMDE1Ci06MTA1MkMwMDA4RjgyMDAzNDI3QkRGRkU4MTA2MjAwMDhBRkJGMDAxMEQ2Ci06MTA1MkQwMDAwRTAwMDFCQ0FGODMwMDM0M0MwMzA4MDA4QzYzMDAyMDQ3Ci06MTA1MkUwMDAyNDA0MDAwMTEwNjQwMDA0OEY4QzAwMkM4RkJGMDAxMDc4Ci06MTA1MkYwMDAwM0UwMDAwODI3QkQwMDE4OEZCRjAwMTAzQzA1ODAwMEE4Ci06MTA1MzAwMDBBNTgwMDAwQTk1OEIwMDBBOTU4QTAwMDQyN0JEMDAxODI1Ci06MTA1MzEwMDAzMTY3RkZGRjMxNDkwMDBGMDAwOTQ1MDAwMEU4MzAyNUUzCi06MTA1MzIwMDAwM0UwMDAwOEFDQTYwMDgwM0MwMjA4MDA4QzQyMDAyMDhDCi06MTA1MzMwMDAyN0JERkZDOEFGQkYwMDM0QUZCRTAwMzBBRkI3MDAyQ0YxCi06MTA1MzQwMDBBRkI2MDAyOEFGQjUwMDI0QUZCNDAwMjBBRkIzMDAxQzQ3Ci06MTA1MzUwMDBBRkIyMDAxOEFGQjEwMDE0MTA0MDAwNTNBRkIwMDAxMDRFCi06MTA1MzYwMDA4Rjg0MDAyQzk0ODYwMDA2OTQ4MzAwMEEwMEMzMjgyM0FGCi06MTA1MzcwMDAzMEI2RkZGRjEyQzAwMDREOEZCRjAwMzQ5NDg5MDAxODczCi06MTA1MzgwMDA5NDhBMDAwQTAxMkE0MDIzMzEwMkZGRkYwMkMyMzgyQjBGCi06MTA1MzkwMDAxNEUwMDAwMjAyQzAyMDIxMDA0MDIwMjEyQzhDMDAwNUQ2Ci06MTA1M0EwMDAxNTgwMDAwMjAwODBBMDIxMjQxNDAwMDQwRTAwMDE0QjhGCi06MTA1M0IwMDAwMjgwMjAyMThGODcwMDJDMDI4MDk4MjFBRjgwMDAzMDRFCi06MTA1M0MwMDA5NEVEMDAwQTAyODA4ODIxMTI4MDAwNTEzMUIyRkZGRjYzCi06MTA1M0QwMDAzQzE3NzAwMDNDMTU0MDAwM0MxRTYwMDA4RjhGMDAzQzY1Ci06MTA1M0UwMDA4REVFMDAwMDAxRDcxODI0NTA3NTAwNTMwMjIwMjAyMUIzCi06MTA1M0YwMDAwMkEzODAyQjE2MDAwMDM4M0MxODIwMDAxMDc4MDA0QUM5Ci06MTA1NDAwMDAwMDAwMDAwMDI0MTAwMDAxOEY4MzAwMzAxNDYwMDAzQzc1Ci06MTA1NDEwMDAwMjkxNTgyMzAyMzBGODIzMDI1MEM4MjEzM0YxRkZGRkQ0Ci06MTA1NDIwMDAxNjIwRkZFRTMzMzJGRkZGOEY4NzAwMkMzQzEyMDAyMDQ2Ci06MTA1NDMwMDAzQzExODAwMEFFMzIwMDMwOTRFQTAwMEEzQzE3ODAwMDM0Ci06MTA1NDQwMDAwMjZBNDgyMUE0RTkwMDBBOTRFMzAwMEE5NEU4MDAwNEVGCi06MTA1NDUwMDAzMDY1RkZGRjMxMDYwMDBGMDAwNjE1MDAwMEEyRjAyNUExCi06MTA1NDYwMDBBRUZFMDA4MDk0RjQwMDBBOTRGNTAwMTgxMkI0MDAzQURECi06MTA1NDcwMDAwMDEzQzk0MDhDRjgwMDE0OENFRTAwMTAwMzE5NTgyMTU5Ci06MTA1NDgwMDAwMDAwNzgyMTAxNzk2ODJCMDFDRjYwMjEwMThEMjAyMTU2Ci06MTA1NDkwMDBBQ0VCMDAxNEFDRTQwMDEwMDJEMzM4MjMzMEY2RkZGRjZECi06MTA1NEEwMDAxNkMwRkZCNjhGODQwMDJDOEZCRjAwMzQ4RkJFMDAzMDMzCi06MTA1NEIwMDA4RkI3MDAyQzhGQjYwMDI4OEZCNTAwMjQ4RkI0MDAyMDQyCi06MTA1NEMwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDgyCi06MTA1NEQwMDAwM0UwMDAwODI3QkQwMDM4MTA3RTAwMUIwMDAwMDAwMDFDCi06MTA1NEUwMDAxNDc3RkZDOTI0MTAwMDAxMEUwMDE0RTAwMDAwMDAwMDMyCi06MTA1NEYwMDA4RjgzMDAzMDEwNjBGRkM4MDIzMEY4MjMwMjkxNTgyM0Q4Ci06MTA1NTAwMDA4Rjg3MDAyQzAxNzAyMDIxMEEwMDAyNTUzMDkzRkZGRjg1Ci06MTA1NTEwMDA4RjgzMDAzMDE0NjBGRkM4M0MxMjAwMjAzQzExODAwMEQzCi06MTA1NTIwMDAwQTAwMDIxRUFFMzIwMDMwMEUwMDAzQ0UwMjIwMjAyMUZGCi06MTA1NTMwMDAwQTAwMDIxMjAwNDA4MDIxMEUwMDA3QzYwMjQwMjgyMTA2Ci06MTA1NTQwMDAwQTAwMDIxMjAwNDA4MDIxMEUwMDBEN0QwMjIwMjAyMTYxCi06MTA1NTUwMDAwQTAwMDIxMjAwNDA4MDIxMEUwMDAxNzgwMDAwMDAwMEM1Ci06MTA1NTYwMDAwQTAwMDIzNzAyRDMzODIzMjdCREZGRDBBRkI1MDAyNDhECi06MTA1NTcwMDBBRkI0MDAyMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNDNECi06MTA1NTgwMDBBRkIwMDAxMEFGQkYwMDI4MEUwMDAwRTQzQzE0ODAwMDU0Ci06MTA1NTkwMDAzQzAyODAwODNDMDMyMDAwM0MwMTA4MDBBQzIwMDA3MDY1Ci06MTA1NUEwMDAzNDU1MDA4MDM0NzIwMDAzMjQxMzAwMDEzNjkwMDA3MERCCi06MTA1NUIwMDAyNDExRkY4MDBBMDAwMjg1OEUwNjAwMDAzQzE5ODAwMDNECi06MTA1NUMwMDA4RjM4MDAwMDNCMEYwMDAxMzFFMjAwMDExMDQwMDAyNTQwCi06MTA1NUQwMDA4Rjg2MDA4NDhFMDcwMDAwM0MwRDA4MDA4REFEMDAzQ0Q2Ci06MTA1NUUwMDAzQzBBMDgwMDhENEEwMDM4MDBFNjcwMjMwMUFFNDAyMUQ1Ci06MTA1NUYwMDAwMDAwNTgyMTAxMEUzMDJCMDE0QjQ4MjEwMTI2MjAyMUFCCi06MTA1NjAwMDAzQzAxMDgwMEFDMjgwMDNDQUY4NzAwODQzQzAxMDgwMDQ2Ci06MTA1NjEwMDBBQzI0MDAzODBFMDAwMUJFMDAwMDAwMDAzQzA1MDgwMDZDCi06MTA1NjIwMDA4Q0E1MDA3MDEwQTBGRkU1MDBBMDIwMjEzQzA1MDgwMDFCCi06MTA1NjMwMDA4Q0E1MDA2ODNDMDYwODAwOENDNjAwNkMwRTAwMTQ4MzI0Ci06MTA1NjQwMDAwMDAwMDAwMDNDMDEwODAwQUMyMDAwNzAzQzE5ODAwMDA0Ci06MTA1NjUwMDA4RjM4MDAwMDNCMEYwMDAxMzFFMjAwMDExNDQwRkZEREY0Ci06MTA1NjYwMDA4Rjg2MDA4NDhFMEMwMDAwOEY4RDAwODQzQzA3MDgwMDFDCi06MTA1NjcwMDA4Q0U3MDAzQzNDMDYwODAwOENDNjAwMzgwMThENTgyMzlFCi06MTA1NjgwMDAwMEVCMjgyMTAwQUIyMDJCMDBDMjQ4MjEwMTI0MTAyMTZGCi06MTA1NjkwMDAzQzAxMDgwMEFDMjUwMDNDM0MwODgwMDAzQzAxMDgwMEFGCi06MTA1NkEwMDBBQzIyMDAzODhEMDMwMTAwMjQxRjBDMDAxMDdGMDAyNjVGCi06MTA1NkIwMDAwMDAwMDAwMDhEMTgwMTAwMjQwRTAwMjBBRDE4MDAyMDBECi06MTA1NkMwMDA5MkFGMDAwMDMxRTMwMEZGMTA2RTAwMjMyNDE5MDA1MDU4Ci06MTA1NkQwMDAxMDc5MDAyNjAwMDAwMDAwM0MwNDgwMDA4Qzg4MDEwMDQ2Ci06MTA1NkUwMDAxNTAwMDAwMzAwMDAwMDAwNTY2MDAwMTQzQzA0NDAwMDU4Ci06MTA1NkYwMDA4Qzk5MDEwMDhDOEYwMTAwMDAwMDk4MjEwMzMxQzAyNDk3Ci06MTA1NzAwMDAwMDE4Njk0MDMxRUUwMDdGMDFBRTYwMjUwMTkyNTgyNUY2Ci06MTA1NzEwMDBBQzhCMDgzMDhDODcwMTAwOEM4OTAxMDAyNEVBMDEwMEUxCi06MTA1NzIwMDAwMTUxMzAyNDAwMDYyOTQwMzEyMzAwN0YwMEEzMTAyNUI5Ci06MTA1NzMwMDAwMDUyRjgyNUFDOUYwODMwM0MwNDQwMDBBRTg0MDEzODhDCi06MTA1NzQwMDAwQTAwMDI3RDAwMDAwMDAwMEUwMDAxREEwMDAwMDAwMEU3Ci06MTA1NzUwMDAwQTAwMDJDNzNDMDQ4MDAwOEQwNDAxMDAwRTAwMDc3RjkwCi06MTA1NzYwMDAwMDAwMDAwMDBBMDAwMkM3M0MwNDgwMDA4RDA0MDEwMDE0Ci06MTA1NzcwMDAwRTAwMTM5QjAwMDAwMDAwMEEwMDAyQzczQzA0ODAwMERBCi06MTA1NzgwMDAwMEE0MTAyQjI0MDMwMDAxMTA0MDAwMDkwMDAwMzAyMTY4Ci06MTA1NzkwMDAwMDA1Mjg0MDAwQTQxMDJCMDRBMDAwMDMwMDAzMTg0MEJCCi06MTA1N0EwMDA1NDQwRkZGQzAwMDUyODQwNTA2MDAwMEEwMDA0MTgyQkZDCi06MTA1N0IwMDAwMDg1MzgyQjU0RTAwMDA0MDAwMzE4NDIwMEMzMzAyNTU0Ci06MTA1N0MwMDAwMDg1MjAyMzAwMDMxODQyMTQ2MEZGRjkwMDA1Mjg0MkQ5Ci06MTA1N0QwMDAwMDA0MTgyQjAzRTAwMDA4MDBDMzEwMjEzMDg0RkZGRkYxCi06MTA1N0UwMDAzMEM2MDBGRjNDMDc4MDAwOENFMjAxQjgwNDQwRkZGRTk5Ci06MTA1N0YwMDAwMDA2NEMwMDAxMjQzMDI1M0MwODIwMDAwMEM4MjAyNTZDCi06MTA1ODAwMDAzQzAzMTAwMEFDRTAwMTgwQUNFNTAxODRBQ0U0MDE4ODBECi06MTA1ODEwMDAwM0UwMDAwOEFDRTMwMUI4M0MwNjYwMDA4Q0M1MjAxQzI2Ci06MTA1ODIwMDAyNDAyRkZGMDMwODMwMjAwMzA4NjAxMDAxMDYwMDAwRTc5Ci06MTA1ODMwMDAwMEEyMjgyNDM0QTUwMDAxMzA4NzMwMDAxMEUwMDAwNUM0Ci06MTA1ODQwMDAzMDgzMEMwMDM0QTUwMDA0M0MwNDYwMDAwM0UwMDAwODMxCi06MTA1ODUwMDBBQzg1MjAxQzEwNjBGRkZEM0MwNDYwMDAzNEE1MDAwOEVFCi06MTA1ODYwMDAwM0UwMDAwOEFDODUyMDFDNTRDMEZGRjMzNEE1MDAwMkZGCi06MTA1ODcwMDAwQTAwMDMxRjMwODczMDAwMjdCREZGRThBRkIwMDAxMERCCi06MTA1ODgwMDBBRkJGMDAxNDNDMDc2MDAwMjQwNjAwMDIxMDgwMDAxMTI2Ci06MTA1ODkwMDAwMEEwODAyMThGODMwMDNDMEUwMDAzMTY4QzY0MDAxODRBCi06MTA1OEEwMDA4RjgyMDAzQzAwMDAyMDIxMjQwNjAwMDE4QzQ1MDAwQzYyCi06MTA1OEIwMDAwRTAwMDMwNzAwMDAwMDAwMTYwMDAwMDIyNDAyMDAwMzhGCi06MTA1OEMwMDAwMDAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODBCCi06MTA1OEQwMDAyN0JEMDAxODhDRTgyMDFDMjQwOUZGRjAwMTA5MjgyNEFBCi06MTA1OEUwMDBBQ0U1MjAxQzhGODcwMDNDMEEwMDAzM0M4Q0U1MDAwQ0QzCi06MTA1OEYwMDAzQzAyNjAwRTAwODA0MDIxMzQ0NjAxMDAyNDA5MDAxODVCCi06MTA1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzBBMDA1MDAxCi06MTA1OTEwMDAzQzAzODAwMDM1NDcwMjAwQUM2ODAwMzgzNDY0MDQwMDYyCi06MTA1OTIwMDBBQzY1MDAzQ0FDNjcwMDMwOEM2QzAwMDAzMThCMDAyMDEzCi06MTA1OTMwMDAxMTYwRkZGRDI0MDdGRkZGMjQwMzAwN0Y4QzhEMDAwMDEyCi06MTA1OTQwMDAyNDYzRkZGRjI0ODQwMDA0QUNDRDAwMDAxNDY3RkZGQjM4Ci06MTA1OTUwMDAyNEM2MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Ci06MTA1OTYwMDAyNEE0MDIwMDAwODUyODJCM0MwMzAwMjAzQzBFODAwMDZDCi06MTA1OTcwMDAyNTI5RkZGRjAxMDU0MDIxQURDMzAwMzAxNTIwRkZFMEMwCi06MTA1OTgwMDAwMDgwMjgyMTAzRTAwMDA4MDAwMDAwMDA4RjgyMDAzQzE2Ci06MTA1OTkwMDAyN0JERkZEOEFGQjMwMDFDQUZCRjAwMjBBRkIyMDAxOEM3Ci06MTA1OUEwMDBBRkIxMDAxNEFGQjAwMDEwOTQ0NjAwMDIwMDgwOTgyMUZGCi06MTA1OUIwMDA4QzUyMDAxODJDQzMwMDgxOEM0ODAwMDQ4QzQ3MDAwOENFCi06MTA1OUMwMDA4QzUxMDAwQzhDNDkwMDEwMTA2MDAwMDc4QzRBMDAxNEE4Ci06MTA1OUQwMDAyQ0M0MDAwNDE0ODAwMDEzMzBFQjAwMDczMEM1MDAwMzEyCi06MTA1OUUwMDAxMEEwMDAxMDAwMDAwMDAwMjQxMDAwOEIwMjAwMjAyMUY1Ci06MTA1OUYwMDAwMjIwMjgyMTBFMDAwMzA3MjQwNjAwMDMxNjYwMDAwMjdGCi06MTA1QTAwMDAyNDAyMDAwMzAwMDAxMDIxOEZCRjAwMjA4RkIzMDAxQzcwCi06MTA1QTEwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODlGCi06MTA1QTIwMDAyN0JEMDAyODE1NjBGRkYxMjQxMDAwOEIzQzBDODAwMDdFCi06MTA1QTMwMDAzQzAzMDAyMDI0MUYwMDAxQUQ4MzAwMzBBRjlGMDAzMEU1Ci06MTA1QTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNDE5RkZGMDJBCi06MTA1QTUwMDAyNEQ4MDAwRjAzMTk3ODI0M0MxMDAwRDBBRDg4MDAzOEZBCi06MTA1QTYwMDAwMUYwNzAyNTI0Q0QwMDAzM0MwODYwMEVBRDg3MDAzQzlBCi06MTA1QTcwMDAzNTg1MDQwMEFEOEUwMDMwMDAwRDM4ODIzNTA0MDAzQ0MxCi06MTA1QTgwMDAzQzAzODAwMDhDNkIwMDAwMzE2MjAwMjAxMDQwRkZGRDYxCi06MTA1QTkwMDAwMDAwMDAwMDEwRTAwMDA4MjRFM0ZGRkYyNDA3RkZGRkUwCi06MTA1QUEwMDA4Q0E4MDAwMDI0NjNGRkZGMjRBNTAwMDRBQzg4MDAwMDNDCi06MTA1QUIwMDAxNDY3RkZGQjI0ODQwMDA0M0MwNDYwMEVBQzg2MDAzOEFECi06MTA1QUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzA3MDAyMDczCi06MTA1QUQwMDAzQzA2ODAwMDAxMjAyMDIxMDE0MDI4MjFBQ0M3MDAzMDc1Ci06MTA1QUUwMDAwRTAwMDM0QzAwMDA4MDIxMEUwMDAzMTYwMjQwMjAyMTBFCi06MTA1QUYwMDAwQTAwMDM4QzAyMDAyMDIxMjdCREZGRDhBRkIyMDAxODk2Ci06MTA1QjAwMDAzMDkyRkZGRkFGQjEwMDE0QUZCRjAwMjBBRkIzMDAxQzU1Ci06MTA1QjEwMDBBRkIwMDAxMDEyNDAwMDJEMDAwMDg4MjEwQTAwMDNFMkZGCi06MTA1QjIwMDAyNDEzMDAwMzUwQjMwMDQyOENFNTAwMEMwMDAwMDAwRDZDCi06MTA1QjMwMDAyNjM5MDAwMTMzMzFGRkZGMjRGODAwMjAwMjMyMzgyQkQwCi06MTA1QjQwMDAxMEUwMDAyMkFGOTgwMDNDOEY4MjAwMzAxNDQwMDAxRjBDCi06MTA1QjUwMDA4Rjg3MDAzQzNDMDY3MDAwM0MwMzIwMDA4Q0U0MDAwMDcyCi06MTA1QjYwMDAwMDg2MjgyNDE0QTMwMDE5OEY4NTAwNDQwMDA0NDQwMkYxCi06MTA1QjcwMDAzQzA5ODAwMDAwODk4MDI0MTRBMEZGRUEzMTA2MDBGRjYwCi06MTA1QjgwMDAyNDBBMDAwMjEwQ0EwMDMwMjhDQjAwMDMxMTYwMDAxNzVECi06MTA1QjkwMDAwMDAwMDAwMDI0MDQwMDAxMTRDNEZGRTYyNjM5MDAwMUJGCi06MTA1QkEwMDAwMjAwMjgyMTBFMDAwMzJFMjQwNDAwMDE4Rjg3MDAzQ0YwCi06MTA1QkIwMDBBRjgyMDA0NDI2MzkwMDAxMzMzMUZGRkYyNEY4MDAyMDcyCi06MTA1QkMwMDAwMjMyMzgyQjE0RTBGRkUwQUY5ODAwM0MwMjIwMTAyMTk1Ci06MTA1QkQwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDRDCi06MTA1QkUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgxMEQzMDAxQjcxCi06MTA1QkYwMDAyNDBDMDAwNDE0Q0NGRkNGMjYzOTAwMDEzMDhERkZGRkE4Ci06MTA1QzAwMDAwMDBEMTlDMDNDMDQ4MDAwOEM4RTAxQjgwNUMwRkZGRTU5Ci06MTA1QzEwMDAzQzBGMTAwMDNDMTAyMDA0QUM4MzAxODBBQzgwMDE4NDU4Ci06MTA1QzIwMDBBQzkwMDE4OEFDOEYwMUI4MEEwMDAzREQyNjM5MDAwMTcxCi06MTA1QzMwMDAwRTAwMDMwNzI0MDQwMDg0MTYwMEZGQkQ4Rjg3MDAzQzdDCi06MTA1QzQwMDAwQTAwMDNEQ0FGODAwMDQ0MDIwMDI4MjEwRTAwMDMyRTZFCi06MTA1QzUwMDAwMDAwMjAyMTBBMDAwM0ZDOEY4NzAwM0MwRTAwMDM3MzI0Ci06MTA1QzYwMDAwMjAwMjAyMThGODcwMDNDMEEwMDAzRkRBRjgyMDA0NDIwCi06MTA1QzcwMDAwMDA0NDlDMjMxMjcwMDNGMDAwNDQzNDIzQzAyODAwMDM3Ci06MTA1QzgwMDAwMDA4MjA0MDI0MDMxNjgwMkNFNjAwMjBBQzQzMDAyQ0EyCi06MTA1QzkwMDAyNEVBRkZFMDI0ODIwMDAxMTRDMDAwMDMzMEE5MDBGRkMxCi06MTA1Q0EwMDAwMDgwMTAyMTMxNDcwMEZGMDAwMjYwODAzQzBEODAwMDIxCi06MTA1Q0IwMDAyNDBBMDAwMTAxOEQyMDIxM0MwQjAwMEUwMEVBMjgwNDdCCi06MTA1Q0MwMDAwMDhCMzAyMTExMjAwMDA1MDAwNTM4Mjc4Q0NFMDAwMDA0Ci06MTA1Q0QwMDAwMUM1MzgyNTAzRTAwMDA4QUNDNzAwMDA4Q0Q4MDAwMERGCi06MTA1Q0UwMDAwMzA3NzgyNDAzRTAwMDA4QUNDRjAwMDAyN0JERkZFMEU1Ci06MTA1Q0YwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMTgzQzA3NjAwMDk4Ci06MTA1RDAwMDA4Q0U0MDgwODM0MDJGMDAwM0MxMTYwMDAzMDgzRjAwMDlECi06MTA1RDEwMDAyNDA1MDFDMDNDMDQ4MDBFMDAwMDMwMjExMDYyMDAwNjAyCi06MTA1RDIwMDAyNDEwMDAwMThDRUEwODA4MzE0OUYwMDAzOTI4RTAwMDBECi06MTA1RDMwMDAwMDA4MzgyQjAwMDc4MDQwM0MwRDAyMDBBRTJEMDgxNEVGCi06MTA1RDQwMDAyNDBDMTY4MDNDMEI4MDAwOEUyNzQ0MDAwRTAwMEUyNjhCCi06MTA1RDUwMDBBRDZDMDAyQzEyMDAwMDA0M0MwMjE2OTEyNDA1MDAwMUQ5Ci06MTA1RDYwMDAxMjA1MDAxMDNDMDIzRDZDMzQ1ODAwRTBBRTM4NDQwODg3Ci06MTA1RDcwMDAzQzExMDgwMDhFMzEwMDdDOEZCRjAwMTgzQzA2NjAwMDhCCi06MTA1RDgwMDAwMDExODU0MDM2MEYxNjgwOEZCMTAwMTQ4RkIwMDAxMEJGCi06MTA1RDkwMDAzQzBFMDIwMDI3QkQwMDIwQUNDRjQ0MjAwM0UwMDAwOEU5Ci06MTA1REEwMDBBQ0NFMDgxMDNDMDIxOERBMzQ1ODAwRTBBRTM4NDQwODkzCi06MTA1REIwMDAzQzExMDgwMDhFMzEwMDdDOEZCRjAwMTgzQzA2NjAwMDRCCi06MTA1REMwMDAwMDExODU0MDM2MEYxNjgwOEZCMTAwMTQ4RkIwMDAxMDdGCi06MTA1REQwMDAzQzBFMDIwMDI3QkQwMDIwQUNDRjQ0MjAwM0UwMDAwOEE5Ci06MTA1REUwMDBBQ0NFMDgxMDBBMDAwNDJDMjQwNTAwMDEwQTAwMDQyQzgzCi06MTA1REYwMDAwMDAwMjgyMTI0MDIwNDAwQTc4MjAwMENBNzgwMDAwNEQwCi06MTA1RTAwMDAwMDAwMjAyMTNDMDYwODAwMjRDNjU2NTgyNDA1RkZGRjQ4Ci06MTA1RTEwMDAyNDg5MDAwMTAwMDQ0MDgwMzEyNEZGRkYwMTA2MTgyMTdECi06MTA1RTIwMDAyQzg3MDAyMDE0RTBGRkZBQUM2NTAwMDAyNDA0MDQwMDc1Ci06MTA1RTMwMDBBNzg0MDAwRUE3ODAwMDA2MDAwMDIwMjEzQzA2MDgwMDcxCi06MTA1RTQwMDAyNEM2NTZEODI0MDVGRkZGMjQ4RDAwMDEwMDA0NjA4MDdECi06MTA1RTUwMDAzMUE0RkZGRjAxODY1ODIxMkM4QTAwMjAxNTQwRkZGQTRCCi06MTA1RTYwMDBBRDY1MDAwMEE3ODAwMDEwQTc4MDAwMDhBNzgwMDAwQTg5Ci06MTA1RTcwMDAwMDAwMjAyMTNDMDYwODAwMjRDNjU3NTgyNDA1RkZGRkQ3Ci06MTA1RTgwMDAyNDk5MDAwMTAwMDRDMDgwMzMyNEZGRkYwMzA2NzgyMTE5Ci06MTA1RTkwMDAyQzhFMDAwNDE1QzBGRkZBQURFNTAwMDAzQzA1NjAwMDQzCi06MTA1RUEwMDA4Q0E3M0QwMDI0MDNFMDhGMDBFMzEwMjQzNDQ2MDE0MDFBCi06MTA1RUIwMDAwM0UwMDAwOEFDQTYzRDAwMjQ4NzAwN0YwMDA3MzFDMjQ0Ci06MTA1RUMwMDAyNEM1RkZGRjAwMDUxOEMyMjQ2NDAwMDEzMDgyRkZGRkQzCi06MTA1RUQwMDAwMDAyMzhDMEE3ODQwMDE4M0MwMTA4MDBBQzI3MDAzMDNECi06MTA1RUUwMDBBRjgwMDAxNDAwMDAyODIxMDAwMDIwMjEwMDAwMzAyMTk0Ci06MTA1RUYwMDAyNDg5MDAwMTAwQTcyODIxMzEyNEZGRkYyQ0E4MTcwMUM1Ci06MTA1RjAwMDAxMTAwMDAwMzJDODMwMDgwMTQ2MEZGRjkyNEM2MDAwMUY3Ci06MTA1RjEwMDAwMEMwMjgyMUFGODYwMDE0MTBDMDAwMURBNzg2MDAxMjAzCi06MTA1RjIwMDAyNENBRkZGRjAwMEExMTQyM0MwODA4MDAyNTA4NTc1ODAwCi06MTA1RjMwMDAxMDQwMDAwQTAwMDAyMDIxMDA0MDMwMjEyNDA3RkZGRjBDCi06MTA1RjQwMDAyNDhFMDAwMTAwMDQ2ODgwMzFDNEZGRkYwMUE4NjAyMTk1Ci06MTA1RjUwMDAwMDg2NTgyQjE1NjBGRkZBQUQ4NzAwMDAzMEEyMDAxRkE1Ci06MTA1RjYwMDA1MDQwMDAwODAwMDQzMDgwMjQwMzAwMDEwMDQzQzgwNEFFCi06MTA1RjcwMDAwMDA0MTA4MDAwNDg3ODIxMjczOEZGRkYwM0UwMDAwODY0Ci06MTA1RjgwMDBBREY4MDAwMDAwQzgyMDIxMjQwNUZGRkZBQzg1MDAwMDBCCi06MTA1RjkwMDAwM0UwMDAwODAwMDAwMDAwMzBBNUZGRkYzMEM2RkZGRjRGCi06MTA1RkEwMDAzMEE4MDAxRjAwODA2MDIxMzBFNzAwRkYwMDA1Mjk0MjczCi06MTA1RkIwMDAwMDAwNTAyMTEwQzAwMDFEMjQwOTAwMDEyNDBCMDAwMTI1Ci06MTA1RkMwMDAyNTE4MDAwMTAxMEIyMDA0MzMwODAwRkYwMTI2NzgyNjY0Ci06MTA1RkQwMDAzOTBFMDAyMDJERUQwMDAxMkRDMjAwMDEwMUEyMTgyNTZGCi06MTA1RkUwMDAxMDYwMDAwRDAxNDQ1MDI1MDAwNUM4ODAwMzJDNDAyMTlECi06MTA1RkYwMDAwMTAwMTgyMTEwRTAwMDBGMDAwQTIwMjc4RDA0MDAwMDg2Ci06MTA2MDAwMDAwMDhBMTgyNUFEMDMwMDAwMjRBRDAwMDEwMDAwNDAyMUU2Ci06MTA2MDEwMDAwMDAwNTAyMTMxQTVGRkZGMjUyRTAwMDEzMUM5RkZGRkVGCi06MTA2MDIwMDAwMEM5MTAyQjEwNDBGRkU3MjUxODAwMDEwM0UwMDAwODBECi06MTA2MDMwMDAwMDAwMDAwMDhEMEEwMDAwMDE0NDQwMjQwQTAwMDUxMkZGCi06MTA2MDQwMDBBQzY4MDAwMDI3QkRGRkU4MzBBNUZGRkYzMEM2RkZGRkFBCi06MTA2MDUwMDBBRkIwMDAxMEFGQkYwMDE0MzBFN0ZGRkYwMDAwNTAyMUM5Ci06MTA2MDYwMDAzNDEwRkZGRjAwMDA2MDIxMjRBRjAwMUYwMEMwNDgyMTUyCi06MTA2MDcwMDAyNDE4MDAwMTI0MTkwMDIwMDVFMDAwMTYwMUUwMTAyMTc5Ci06MTA2MDgwMDAwMDAyRjk0MzAxOUY2ODJBMDAwOTcwMkIwMUFFNDAyNEU5Ci06MTA2MDkwMDAxMTAwMDAxNzAwMEMxODgwMDA2NDEwMjExMEUwMDAwNUFBCi06MTA2MEEwMDA4QzRCMDAwMDAwRjg0MDA0MDAwODM4MjMwMTY3NTgyNDk2Ci06MTA2MEIwMDAwMDAwMzgyMTE1NDAwMDQxMDAwMDQwMjE1NTYwMDAxNkM1Ci06MTA2MEMwMDAzMTY5RkZGRjI1OEIwMDAxMzE2Q0ZGRkYwNUUxRkZFQzFCCi06MTA2MEQwMDAwMUUwMTAyMTI0QTIwMDNFMDAwMkY5NDMwMTlGNjgyQTNBCi06MTA2MEUwMDAwMDA5NzAyQjAxQUU0MDI0MTUwMEZGRUIwMDBDMTg4MDU2Ci06MTA2MEYwMDAxNTQ2MDAwNTM0MDJGRkZGMDIwMDI4MjEwRTAwMDRGNkI5Ci06MTA2MTAwMDAwMDAwMzgyMTAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMDUyCi06MTA2MTEwMDAwM0UwMDAwODI3QkQwMDE4MTUyMDAwMDMwMTYwMTgyMUM2Ci06MTA2MTIwMDAwMDBCMUMwMjI0MDgwMDEwMzA2QTAwRkYxNTQwMDAwNTE3Ci06MTA2MTMwMDAzMDZFMDAwRjI1MEQwMDA4MDAwMzFBMDIzMUE4MDBGRjgxCi06MTA2MTQwMDAzMDZFMDAwRjE1QzAwMDA1MzA3RjAwMDMyNTEwMDAwNERECi06MTA2MTUwMDAwMDAzMTkwMjMyMDgwMEZGMzA3RjAwMDMxN0UwMDAwNTNBCi06MTA2MTYwMDAzODY5MDAwMTI1MDIwMDAyMDAwMzE4ODIzMDQ4MDBGRjUwCi06MTA2MTcwMDAzODY5MDAwMTMxMjMwMDAxMTA2MDAwMDQzMTAzMDBGRjgxCi06MTA2MTgwMDAyNTBBMDAwMTMxNDgwMEZGMzEwMzAwRkYwMDBDNjk0MDdGCi06MTA2MTkwMDAwMUEzNDAyMTI0MEEwMDAxMTBDQUZGRDUzMTEwRkZGRkRFCi06MTA2MUEwMDAyNDZFMDAwMTMxQzgwMEZGMTExOUZGQzYzOEM5MDAwMTczCi06MTA2MUIwMDAyRDFGMDAyMDUzRTAwMDFDMjU4QjAwMDEyNDBEMDAwMTQxCi06MTA2MUMwMDAwQTAwMDU4OTI0MEUwMDIwNTE0NjAwMTcyNThCMDAwMTg2Ci06MTA2MUQwMDAyNTA5MDAwMTMxMjgwMEZGMkQwOTAwMjA1MTIwMDAxMjVGCi06MTA2MUUwMDAyNThCMDAwMTI1NDMwMDAxMDEwRDUwMDQwMTRCMTAyNEIzCi06MTA2MUYwMDAyNTA5MDAwMTE0NDBGRkY0MzA2QUZGRkYzMTI3RkZGRjNCCi06MTA2MjAwMDAxMEVFMDAwQzI1ODJGRkZGMzA0Q0ZGRkYwMDAwNTAyMUY0Ci06MTA2MjEwMDAzNDEwRkZGRjMxMjgwMEZGMkQwOTAwMjA1NTIwRkZGMjI4Ci06MTA2MjIwMDAyNTQzMDAwMTI1OEIwMDAxMDE0NjQ4MjYwQTAwMDU0MzRECi06MTA2MjMwMDAzMTZDRkZGRjAwMDAzODIxMDAwMDUwMjEwQTAwMDU5NTU1Ci06MTA2MjQwMDAzNDEwRkZGRjI3QkRGRkQ4QUZCMDAwMTAzMEYwRkZGRkM0Ci06MTA2MjUwMDBBRkIxMDAxNDAwMTAzOTQyMzIxMUZGRTAwMDA3MTA4MDg2Ci06MTA2MjYwMDBBRkIzMDAxQzAwQjEyODIzMzBEM0ZGRkZBRkIyMDAxODNBCi06MTA2MjcwMDAzMEE1RkZGRjAwODA5MDIxMDI2MDMwMjEwMDQ0MjAyMUUyCi06MTA2MjgwMDBBRkJGMDAyMDBFMDAwNTIxMzIwNzAwMUYwMjIyODgyMTI3Ci06MTA2MjkwMDAzNDAzRkZGRjAyNDAyMDIxMDIwMDI4MjEwMjYwMzAyMTQ4Ci06MTA2MkEwMDAwMDAwMzgyMTEwNDMwMDA5MzIzMUZGRkYwMjIwMTAyMTg1Ci06MTA2MkIwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDY1Ci06MTA2MkMwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgwRTAwMDUyMTU0Ci06MTA2MkQwMDAwMDAwMDAwMDAwNDA4ODIxMDIyMDEwMjE4RkJGMDAyMDE0Ci06MTA2MkUwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDU0Ci06MTA2MkYwMDAwM0UwMDAwODI3QkQwMDI4MDAwNDI0MDAzQzAzNjAwMEUwCi06MTA2MzAwMDBBQzYwM0QwODEwQTAwMDAyMzQ4MjEwMDYzNDgyMTAxNkUyCi06MTA2MzEwMDAwM0UwMDAwOEFDNjIzRDA0MjdCREZGRTBBRkIwMDAxMDExCi06MTA2MzIwMDAzMDkwMDBGRjJFMDIwMDA2QUZCRjAwMTgxMDQwMDAwODlBCi06MTA2MzMwMDBBRkIxMDAxNDAwMTAzMDgwM0MwMzA4MDAyNDYzNTNCNDU0Ci06MTA2MzQwMDAwMEMzMjgyMThDQTQwMDAwMDA4MDAwMDgwMDAwMDAwMDg5Ci06MTA2MzUwMDAwMDAwMjAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEYzCi06MTA2MzYwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjA5NzkxMDAxMjUzCi06MTA2MzcwMDAxNjIwMDA1MTAwMDAyMDIxM0MwMjA4MDA5MDQyMDAzMzBBCi06MTA2MzgwMDAwQTAwMDVGQzAwMDAwMDAwOTc4RDAwMEUxNUEwMDAzMUVBCi06MTA2MzkwMDAwMDAwMjAyMTBBMDAwNUZDMjQwMjAwMDg5Nzg3MDAwQzU5Ci06MTA2M0EwMDAxNEUwMDAxQTAwMDAxODIxMDA2MDIwMjEyNDAyMDAwMURFCi06MTA2M0IwMDAxMDgwRkZFOThGQkYwMDE4MDAwNDI5QzIwMDQ1MzAyMTdBCi06MTA2M0MwMDAwMEE2NTgyQjExNjBGRkU0M0MwODgwMDAzQzA3MjAwMDI5Ci06MTA2M0QwMDAwMDA1NjlDMDAxQTc2MDI1QUQwQzAwMjAzQzAzODAwOEMyCi06MTA2M0UwMDAyNDAyMDAxRjI0NDJGRkZGQUM2MDAwMDAwNDQxRkZGREI3Ci06MTA2M0YwMDAyNDYzMDAwNDI0QTUwMDAxMDBBNjcwMkIxNUMwRkZGNTNFCi06MTA2NDAwMDAwMDA1NjlDMDBBMDAwNUU2OEZCRjAwMTg5Nzg3MDAwNEUxCi06MTA2NDEwMDAzQzA0MDgwMDI0ODQ1NjU4MjQwNTA0MDAwRTAwMDVBMUZECi06MTA2NDIwMDAyNDA2MDAwMTk3OEIwMDBDMjQ0NDAwMDEzMDhBRkZGRkYyCi06MTA2NDMwMDAyNTY5RkZGRjJENDgwNDAwMDA0MDI4MjExNTAwMDA0MDc5Ci06MTA2NDQwMDBBNzg5MDAwQzI0QUMzODAwMDAwQzE5QzAwQTAwMDVGQTFBCi06MTA2NDUwMDBBNzgwMDAwNDk3ODcwMDA2M0MwNDA4MDAyNDg0NTZEOENGCi06MTA2NDYwMDAyNDA1MDQwMDBFMDAwNUExMjQwNjAwMDE5Nzk5MDAwRUUyCi06MTA2NDcwMDAyNDQ0MDAwMTMwOThGRkZGMjcyRkZGRkYyRjBFMDQwMDU4Ci06MTA2NDgwMDAwMDQwODgyMTE1QzAwMDJDQTc4RjAwMEVBNzgwMDAwNkIxCi06MTA2NDkwMDAzQTAyMDAwMzI2MjQwMTAwMzA4NEZGRkYwRTAwMDVDRURGCi06MTA2NEEwMDAyQzQ1MDAwMTAwMTFGOEMwMjdGMDAxMDAwMDEwMjFDMEE4Ci06MTA2NEIwMDAwQTAwMDVGQzI0MDIwMDA4OTc4NTAwMTY5Nzg3MDAwQTQ5Ci06MTA2NEMwMDAzQzA0MDgwMDI0ODQ1NzU4MEUwMDA1QTEyNDA2MDAwMTRFCi06MTA2NEQwMDA5Nzg3MDAxMjhGODkwMDE0MjQ0NTAwMDEzMEE4RkZGRjIwCi06MTA2NEUwMDAyNEUzRkZGRjAxMDkzMDJCMDA0MDgwMjExNEMwMDAxODc1Ci06MTA2NEYwMDBBNzgzMDAxMkE3ODAwMDBBOTc4NTAwMTgwRTAwMEUxMENGCi06MTA2NTAwMDAwMjAwMjAyMTI0NEEwNTAwMzE0NEZGRkYwRTAwMDVDRTgxCi06MTA2NTEwMDAyNDA1MDAwMTNDMDUwODAwOTRBNTAwMzIwRTAwMEUxMDcxCi06MTA2NTIwMDAwMjAwMjAyMTI0NDUyMTAwM0MwMjA4MDA5MDQyMDAzMzUzCi06MTA2NTMwMDAwQTAwMDVGQzAwMDUyMUMwMEEwMDA2MzRBNzg0MDAwNkY1Ci06MTA2NTQwMDAyNEFDMzgwMDAwMEMxOUMwMEEwMDA1RkFBNzg0MDAwNDI2Ci06MTA2NTUwMDAwQTAwMDY0RUE3ODUwMDBBMzA4NDAwRkYyN0JERkZFODI5Ci06MTA2NTYwMDAyQzgyMDAwNkFGQkYwMDE0QUZCMDAwMTAxMDQwMDAxNTIxCi06MTA2NTcwMDAwMEEwMzgyMTAwMDQ0MDgwM0MwMzA4MDAyNDYzNTNDQzcxCi06MTA2NTgwMDAwMTAzMjgyMThDQTQwMDAwMDA4MDAwMDgwMDAwMDAwMDA2Ci06MTA2NTkwMDAyNENDMDA3RjAwMDc1MUMyMDAwQzU5QzIzMTcwRkZGRkFDCi06MTA2NUEwMDAyNTQ3QzQwMDMwRTVGRkZGMjc4NDAwMDQwMjAwMzAyMUE2Ci06MTA2NUIwMDAwRTAwMDRGNjI0MDcwMDAxOTc4NjAwMTAwMjA2MjAyMTMxCi06MTA2NUMwMDBBNzg0MDAxMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEY0Ci06MTA2NUQwMDAyN0JEMDAxODNDMDUwODAwOENBNTAwMzAwMDA3NzlDMkQzCi06MTA2NUUwMDAwRTAwMDJGMDI1RTRERjAwMzA0NUZGRkYzQzA0MDgwMDA4Ci06MTA2NUYwMDAyNDg0NTc1ODI0MDYwMDAxMEUwMDA0RjYyNDA3MDAwMUU1Ci06MTA2NjAwMDA5NzhFMDAxMjhGQkYwMDE0OEZCMDAwMTAyNUNEMDAwMUFGCi06MTA2NjEwMDAyN0JEMDAxODAzRTAwMDA4QTc4RDAwMTIwMDA3QzlDMkJCCi06MTA2NjIwMDAyNzM4RkYwMDAwMTg3OEMyMzFGMEZGRkYzQzA0MDgwMDUzCi06MTA2NjMwMDAyNDg0NTZEODAyMDAyODIxMjQwNjAwMDEwRTAwMDRGNjA2Ci06MTA2NjQwMDAyNDA3MDAwMTk3OEQwMDBFMjYwRTAxMDAwMDBFODQwMDI1Ci06MTA2NjUwMDAyNUFDMDAwMTNDMEI2MDAwQTc4QzAwMEVBRDYwM0QwODJFCi06MTA2NjYwMDAzNjA0MDAwNjAwMDAzMDIxM0MwNzYwMDA4Q0UyM0QwNDQ3Ci06MTA2NjcwMDAzMDVGMDAwNjE3RTBGRkZEMjRDOTAwMDEwMDA2MUIwMDgzCi06MTA2NjgwMDAzMTI2MDBGRjAwNjQ0MDI1MkNDNTAwMDRBQ0U4M0QwNDIxCi06MTA2NjkwMDAxNEEwRkZGNjhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEI1Ci06MTA2NkEwMDAyN0JEMDAxODAwMDc1MUMyMjU0OUM4MDAyNDA2MDAwMTczCi06MTA2NkIwMDAyNDA3MDAwMTNDMDQwODAwMjQ4NDU2NTgwRTAwMDRGNjA4Ci06MTA2NkMwMDAzMTI1RkZGRjk3ODcwMDBDOEZCRjAwMTQ4RkIwMDAxMDlCCi06MTA2NkQwMDAyNEU2MDAwMTI3QkQwMDE4MDNFMDAwMDhBNzg2MDAwQzhGCi06MTA2NkUwMDAzMDg0RkZGRjMwQTVGRkZGM0MwNjgwMDA4Q0MyMDFCODVDCi06MTA2NkYwMDAwNDQwRkZGRTNDMDg0MDgwMDA4ODM4MjUzQzAzMTAwMDIxCi06MTA2NzAwMDBBQ0MwMDE4MEFDQzUwMTg0QUNDNzAxODgwM0UwMDAwOEJGCi06MTA2NzEwMDBBQ0MzMDFCODMwODRGRkZGM0MwNjgwMDA4Q0MyMDFCOEQ2Ci06MTA2NzIwMDAwNDQwRkZGRTNDMDg0MDM4OENBNzAwMDAwMDg4MjgyNTY0Ci06MTA2NzMwMDAzQzAzMTAwMEFDQzcwMTgwQUNDNTAxODgwM0UwMDAwODMxCi06MTA2NzQwMDBBQ0MzMDFCODhGODMwMDVDOEY4NjAwNTQxMDY2MDAwQkM5Ci06MTA2NzUwMDAwMDgwNDAyMTNDMDcwODAwMjRFNzU3NjgwMDAzMjhDMDU4Ci06MTA2NzYwMDAwMEE3MTAyMThDNDQwMDAwMjQ2MzAwMDExMDg4MDAwNTVDCi06MTA2NzcwMDAzMDYzMDAwRjU0NjZGRkZBMDAwMzI4QzAwM0UwMDAwOEVFCi06MTA2NzgwMDAwMDAwMTAyMTNDMDcwODAwMjRFNzU3NkMwMEE3MzAyMUM3Ci06MTA2NzkwMDAwM0UwMDAwODhDQzIwMDAwM0MwMzkwMDAzNDYyMDAwMTVBCi06MTA2N0EwMDAwMDgyMjAyNTNDMDM4MDAwQUM2NDAwMjA4QzY1MDAyMDIyCi06MTA2N0IwMDAwNEEwRkZGRTAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDRECi06MTA2N0MwMDAzQzAyODAwMDM0NDMwMDAxMDA4MzIwMjUwM0UwMDAwOEUwCi06MTA2N0QwMDBBQzQ0MDAyMDI3QkRGRkUwQUZCMTAwMTQzMDkxRkZGRkIzCi06MTA2N0UwMDBBRkIwMDAxMEFGQkYwMDE4MTIyMDAwMTIwMEEwODAyMTJGCi06MTA2N0YwMDA4Q0E1MDAwMDE0QTAwMDExMjQwNDAwMDIzQzA2ODAwMEI3Ci06MTA2ODAwMDA4Q0MyMDFCODA0NDBGRkZFM0MwNzQwMDAwMjI3MjAyNTRGCi06MTA2ODEwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAzQzAzMTAwMDIwCi06MTA2ODIwMDAyN0JEMDAyMEFDQzUwMTgwQUNDNDAxODgwM0UwMDAwODhFCi06MTA2ODMwMDBBQ0MzMDFCODBBMDAwNzBGOENBNTAwMDAwRTAwMDY2NjY1Ci06MTA2ODQwMDAyNDA2MDIwMDAwMDAyODIxMEEwMDA3MEZBRTAwMDAwMDA1Ci06MTA2ODUwMDAzMDg3RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTc5Ci06MTA2ODYwMDAzQzBBNDAwNjhDQTkwMDAwMDBFQTQwMjVBQ0M5MDE4MDIyCi06MTA2ODcwMDA4Q0E0MDAwNDNDMDMxMDAwQUNDNDAxODRBQ0M4MDE4OEEzCi06MTA2ODgwMDAwM0UwMDAwOEFDQzMwMUI4OEY4M0ZERTgyN0JERkZFODMzCi06MTA2ODkwMDBBRkJGMDAxNEFGQjAwMDEwOTA2NzAwMDgwMDgwMTAyMTU3Ci06MTA2OEEwMDAwMDgwMjgyMTMwRTYwMDQwMDAwMDIwMjExMEMwMDAwOEIwCi06MTA2OEIwMDA4QzUwMDAwMDBFMDAwMDg2MDIwMDIwMjEwMjAwMjAyMUUyCi06MTA2OEMwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDA0ODkyN0JEMDAxODg0Ci06MTA2OEQwMDAwRTAwMDcyNDAwMDAwMDAwMEUwMDAwODYwMjAwMjAyMUE4Ci06MTA2OEUwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTAwQTAwMDQ4OTFECi06MTA2OEYwMDAyN0JEMDAxODI3QkRGRkUwQUZCMDAwMTA4RjkwRkRFODY2Ci06MTA2OTAwMDBBRkJGMDAxQ0FGQjIwMDE4QUZCMTAwMTQ5MjA2MDAwMTc3Ci06MTA2OTEwMDAwMDgwODgyMTBFMDAwNkY2MzBEMjAwMDQ5MjA0MDAwNUEzCi06MTA2OTIwMDAwMDExMjlDMkE2MDUwMDAwMzQ4MzAwNDBBMjAzMDAwNTFGCi06MTA2OTMwMDAwRTAwMDcwMDAyMjAyMDIxMEUwMDA0OEIwMjIwMjAyMURGCi06MTA2OTQwMDAyNDAyMDAwMUFFMDIwMDBDMDIyMDI4MjFBNjAyMDAxMDQxCi06MTA2OTUwMDAyNDA0MDAwMkE2MDIwMDEyMjQwNjAyMDBBNjAyMDAxNDZCCi06MTA2OTYwMDAwRTAwMDY2NkE2MDIwMDE2MTY0MDAwMEY4RkJGMDAxQzIwCi06MTA2OTcwMDA5NzhDMDA1ODNDMEIwODAwOEQ2QjAwNzgyNTg4RkZGRjMyCi06MTA2OTgwMDAzMTA5RkZGRjI1NkEwMDAxMDEyQTM4MkIxMEUwMDAwNkJCCi06MTA2OTkwMDBBNzg4MDA1ODNDMEY2MDA2MjQwRTAwMTYzNUVEMDAxMDQ1Ci06MTA2OUEwMDBBREFFMDA1MDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDI1Ci06MTA2OUIwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFMEQ2Ci06MTA2OUMwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTAwRTAwMDZGNjU0Ci06MTA2OUQwMDAwMDgwODgyMThGODVGREU4MDIyMDIwMjE5MEEzMDAwNUZBCi06MTA2OUUwMDAwRTAwMDcwMDMwNzAwMEZGMjQwMjAwM0UxMjAyMDAwNTc2Ci06MTA2OUYwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwOEEzCi06MTA2QTAwMDAyN0JEMDAyMDNDMDU4MDAwOENBNDAxNzgwNDgwRkZGRTk3Ci06MTA2QTEwMDAyNDA3MDAwNzNDMDYxMDAwQUNCMTAxNDAwMjIwMjAyMUYxCi06MTA2QTIwMDBBMEE3MDE0NDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEQxCi06MTA2QTMwMDBBQ0E2MDE3ODBBMDAwNzREMjdCRDAwMjAyN0JERkZFMDY2Ci06MTA2QTQwMDBBRkIwMDAxMEFGQkYwMDE4QUZCMTAwMTQzQzEwODAwMDExCi06MTA2QTUwMDA4RTExMDAyMDAwMDAwMDAwMEUwMDA0OEJBRTA0MDAyMDA4Ci06MTA2QTYwMDBBRTExMDAyMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDNFCi06MTA2QTcwMDAwM0UwMDAwODI3QkQwMDIwMzA4NEZGRkYzQzA2ODAwMEIzCi06MTA2QTgwMDA4Q0MyMDFCODA0NDBGRkZFM0MwODQwMzUwMDg4MzgyNTIwCi06MTA2QTkwMDAzQzAzMTAwMEFDQzUwMTgwQUNDMDAxODRBQ0M3MDE4OEM4Ci06MTA2QUEwMDAwM0UwMDAwOEFDQzMwMUI4MzA4NEZGRkYzQzA2ODAwMDVGCi06MTA2QUIwMDA4Q0MyMDFCODA0NDBGRkZFM0MwODQwMzYwMDg4MzgyNUVGCi06MTA2QUMwMDAzQzAzMTAwMEFDQzUwMTgwQUNDMDAxODRBQ0M3MDE4ODk4Ci06MTA2QUQwMDAwM0UwMDAwOEFDQzMwMUI4MjdCREZGRDBBRkI1MDAyNDY4Ci06MTA2QUUwMDAzMDk1RkZGRkFGQjYwMDI4QUZCNDAwMjBBRkJGMDAyQzM5Ci06MTA2QUYwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEJDCi06MTA2QjAwMDAzMEI2RkZGRjEyQTAwMDI3MDAwMEEwMjE4RjkyMDAzQ0FBCi06MTA2QjEwMDA4RTQzMDAwMDNDMDY4MDAwMjQwMjAwNDAwMDAzM0UwMjM5Ci06MTA2QjIwMDAwMDAzMkMwMjMwRTQwMDdGMDA2Njk4MjQxNDgyMDAxRENDCi06MTA2QjMwMDAzMEE1MDBGRjhGODMwMDRDMkM2ODAwMEE1MTAwMDAxMDI0Ci06MTA2QjQwMDA4Rjg2MDAzMDAwMDM1ODgwM0MwQzA4MDAyNThDNTNFOEU5Ci06MTA2QjUwMDAwMTZDNTAyMThENDkwMDAwMDEyMDAwMDgwMDAwMDAwMDU4Ci06MTA2QjYwMDAwMkQ0NDgyMTMxMjVGRkZGMEUwMDA2QzgyNDA0MDA4NDBBCi06MTA2QjcwMDAxNjYwMDAwMjhGOTIwMDNDQUY4MDAwNEM4Rjg2MDAzMDgwCi06MTA2QjgwMDAyNjU4MDAyMDI2OEYwMDAxMDMwMDkwMjEzMUY0RkZGRkRBCi06MTA2QjkwMDAxNEMwMDAwNEFGOTgwMDNDMDI5NTI4MkIxNEEwRkZEQzIxCi06MTA2QkEwMDAwMDAwMDAwMDAyODAxMDIxOEZCRjAwMkM4RkI2MDAyODRCCi06MTA2QkIwMDA4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODUzCi06MTA2QkMwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzMDIzCi06MTA2QkQwMDAyNDA3MDAzNDE0QTcwMTQ2MDAwMDAwMDA5MjQ3MDAwRTZECi06MTA2QkUwMDA4Rjk5RkRFQzhGOTBGREU4MjQxODE2MDBBMzI3MDAxOTVCCi06MTA2QkYwMDA5MjRBMDAwRDNDMDg4MDAwM0MwNzgwMENBMzJBMDAxODM0Ci06MTA2QzAwMDA5NjQ0MDAxMjNDMEY2MDAwM0MxMTdGRkZBNjA0MDA1QzFDCi06MTA2QzEwMDA5NjVGMDAxMDM2MjJGRkZGMjQwQTAwMDUzM0U1RkZGRkQwCi06MTA2QzIwMDBBRTA1MDA1NDhFNDYwMDFDQUQxODAwMjg4Q0U5MDAwMDBCCi06MTA2QzMwMDA4REVFNDQ0ODAxMjY2ODI2MDFDRDMwMjFBRTA2MDAzODhECi06MTA2QzQwMDA4RTAzMDAzODI0Q0IwMDAxM0MwRTdGMDBBRTAzMDAzQ0Q1Ci06MTA2QzUwMDA4RTBDMDAzQ0FGMkMwMDA0QUUwQjAwMjA4RTEzMDAyMEU1Ci06MTA2QzYwMDBBRTEzMDAxQ0EzMjAwMDFCQUUwMjAwMkNBMzJBMDAxMkFFCi06MTA2QzcwMDA4RTQ0MDAxNDI0MTMwMDUwQUUwNDAwMzQ4RTFGMDAzNEUwCi06MTA2QzgwMDBBRjNGMDAxNDhFNDUwMDE4QUUwNTAwNDg5MjU4MDAwQzI2Ci06MTA2QzkwMDBBMjE4MDA0RTkyMEYwMDA4MzVFOTAwMjBBMjA5MDAwODUyCi06MTA2Q0EwMDA4RTBEMDAxODAxQUUxODI0MzQ2QzQwMDBBRTBDMDAxODk0Ci06MTA2Q0IwMDA5MjBCMDAwMDMxNzIwMEZGMTI1MzAyQUQyNDEzRkY4MENCCi06MTA2Q0MwMDAzQzA0MDgwMDI0ODQ1N0U4MEUwMDA3MzIwMDAwMDAwMDRFCi06MTA2Q0QwMDAyNDAzMDAwNDI0MDgwMDAxM0MwNTA4MDA4Q0E1NTdFOEEzCi06MTA2Q0UwMDAzQzA0ODAwMEEyMDMwMDI1QTIwODAwMDU4QzkwMDE3OEQ2Ci06MTA2Q0YwMDAwNjAwRkZGRThGOTIwMDNDMjQwRTAwMDIzQzBEMTAwMEE3Ci06MTA2RDAwMDBBQzg1MDE0MEEwOEUwMTQ0QUM4RDAxNzgwQTAwMDdFRkVDCi06MTA2RDEwMDBBRjgwMDA0QzJDQUQwMDM3MTFBMEZGOTk4Rjg2MDAzMDVBCi06MTA2RDIwMDAwMDA1ODA4MDNDMTEwODAwMjYzMTU0MTAwMjExNzgyMUEyCi06MTA2RDMwMDA4REVFMDAwMDAxQzAwMDA4MDAwMDAwMDAyNDEwMDAwNEQ3Ci06MTA2RDQwMDAxNEIwMDA4RTNDMDc4MDAwM0MwQzA4MDA4RDhDNTdFODg2Ci06MTA2RDUwMDA4Rjg2RkRFOEFDRUMwMDIwOEU0QjAwMDg4Rjk4RkRFQzkwCi06MTA2RDYwMDAyNDA5MDA1MEFDQ0IwMDMwOEU0MzAwMDhBQ0MzMDA1MDY3Ci06MTA2RDcwMDA4RTQyMDAwQ0FDQzIwMDM0OEU0QTAwMTBBQ0NBMDAzOEZGCi06MTA2RDgwMDA4RTQ0MDAxMEFDQzQwMDU0OEU1RjAwMTRBQ0RGMDAzQzk1Ci06MTA2RDkwMDA4RTU5MDAxOEFGMTkwMDA0OEU0RjAwMUNBQ0NGMDAyMDk0Ci06MTA2REEwMDA5MEQxMDAwMDMyMjUwMEZGMTBBOTAyN0QwMDAwMDAwMEY0Ci06MTA2REIwMDA4Q0QxMDAzNDhDQ0YwMDMwMDIyRjMwMjMwNEMwMDBGMzdDCi06MTA2REMwMDAyNDA0MDA4QzEyNjAwMEYwMjQwMjAwMDMwQTAwMDdFRjg0Ci06MTA2REQwMDBBRjgyMDA0QzI0MTgwMDA1MTRCODAwNjgzQzBCODAwMEZBCi06MTA2REUwMDAzQzBDMDgwMDhEOEM1N0U4OEY4NkZERThBRDZDMDAyMEM4Ci06MTA2REYwMDA4RTQzMDAwNDhGOUZGREVDMjQwNzIwMDBBQ0MzMDAxQ0QxCi06MTA2RTAwMDA5MjQyMDAwODI0MTIwMDA4QTNFMjAwMTk4RjhBMDAzQzc1Ci06MTA2RTEwMDA5MTQ0MDAwOUEzRTQwMDE4OEY4NTAwM0M5MEI5MDAwQTUyCi06MTA2RTIwMDAzMzI0MDBGRjEwOTIwMDEwMjg4ODAwMDkxNTAwMDBCQ0QwCi06MTA2RTMwMDAyNDBEMDAwMjI0MDkwMDIwMTA4OTAwMEIzNDA3ODAwMDczCi06MTA2RTQwMDAyODkxMDAyMTE2MjAwMDA4MjQwNzQwMDAyNDBGMDA0MDRDCi06MTA2RTUwMDAxMDhGMDAwNTNDMDcwMDAxMjQxODAwODAxMDk4MDAwMkU0Ci06MTA2RTYwMDAzQzA3MDAwMjI0MDc0MDAwOENDNDAwMTgzQzBBRkYwMEM1Ci06MTA2RTcwMDAwMDhBRjgyNDAzRTdDODI1QUNEOTAwMTg5MEIyMDAwQkFCCi06MTA2RTgwMDBBMEQyMDAyNzhGODMwMDNDOTQ2NTAwMEMxMEEwMDIzMTMzCi06MTA2RTkwMDAwMDAwMDAwMDk0NjcwMDBDM0MxRjgwMDBBNEM3MDA1QzQ5Ci06MTA2RUEwMDA5MDYyMDAwRTI0MDNGRkJGMjQwNzAwMDRBMEMyMDAwODY0Ci06MTA2RUIwMDA4RjhBMDAzQzkxNDQwMDBGQTBDNDAwMDk4Rjg4MDAzQ0Q5Ci06MTA2RUMwMDA4RDEyMDAxMDhGRjkwMDc0MDI1OTI4MjNBQ0M1MDA1OEE4Ci06MTA2RUQwMDA4RDE4MDAxNEFDRDgwMDJDOTUwRjAwMTgzMUYxRkZGRjZECi06MTA2RUUwMDBBQ0QxMDA0MDk1MDkwMDFBMzEzMEZGRkZBQ0QwMDA0NDBFCi06MTA2RUYwMDA4RDBFMDAxQ0FDQ0UwMDQ4OTUwRDAwMDJBNENEMDA3ODhDCi06MTA2RjAwMDA5MTBDMDAwRUEwQ0MwMDA4OTBDQjAwMDgwMTYzMTAyNDY3Ci06MTA2RjEwMDAxMjYwMDFEN0EwQzIwMDA4OEY5MjAwM0MwQTAwMDdFRjYwCi06MTA2RjIwMDBBRjg3MDA0QzI0MDYwMDA2MTRBNjAwMTQzQzBFODAwMDE3Ci06MTA2RjMwMDAzQzEwMDgwMDhFMTA1N0U4OEY4Q0ZERTRBREQwMDAyMDg3Ci06MTA2RjQwMDA4RTREMDAxODhGODZGREU4OEY4QkZERUNBRDhEMDAwMDE3Ci06MTA2RjUwMDA4Q0M4MDAzODI0MDQwMDA1QUQ4ODAwMDQ4Q0MzMDAzQ0I0Ci06MTA2RjYwMDAxMjYwMDA4MUFENjMwMDAwMEEwMDA3RUZBRjg0MDA0QzlGCi06MTA2RjcwMDAyNDA5MDAwNzEwQTkwMDRCMjQwNDAwMDYzQzA1MDgwMDYyCi06MTA2RjgwMDAyNEE1NTdFODBFMDAwNzA1MjQwNDAwODE4RjkyMDAzQ0Q5Ci06MTA2RjkwMDAwMDEzMTAyQjBBMDAwN0VGQUY4MjAwNEMyNDFGMDAyM0MwCi06MTA2RkEwMDAxNEJGRkZGNjNDMEM4MDAwM0MwMzA4MDA4QzYzNTdFOERDCi06MTA2RkIwMDA4RjhCRkRFQ0FEODMwMDIwOEY5MUZERTg4RTQ2MDAwNEExCi06MTA2RkMwMDAyNTY0MDAyMDI2NDUwMDE0QUUyNjAwMjgyNDA2MDAwMzcwCi06MTA2RkQwMDAwRTAwMEUxQzI1NzAwMDMwOEY4NzAwM0MwMjAwMjAyMTFGCi06MTA2RkUwMDAyNDA2MDAwMzBFMDAwRTFDMjRFNTAwMDgzQzA0MDgwMEUzCi06MTA2RkYwMDAyNDg0NTdFODBFMDAwNzMyMDAwMDAwMDA5MjIyMDAwMEFGCi06MTA3MDAwMDAyNDA0MDA1MDMwNEEwMEZGNTU0NEZGRTE4RjkyMDAzQ0I5Ci06MTA3MDEwMDAwRTAwMEUwNzAwMDAwMDAwMEEwMDA4RjQ4RjkyMDAzQ0VBCi06MTA3MDIwMDAyNDA4MDAzMzE0QTgwMDMyM0MwMjgwMDAzQzExMDgwMDAwCi06MTA3MDMwMDA4RTMxNTdFODhGODlGREVDQUM1MTAwMjA4RTRBMDAwODU0Ci06MTA3MDQwMDAyNDBGMDAyODhGOERGREU4QUQyQTAwMzA4RTQ0MDAwQ0ZGCi06MTA3MDUwMDAyNDA2MDAwOUFEMjQwMDM0OEU1RjAwMTBBRDNGMDAzOEQ3Ci06MTA3MDYwMDA4RTU5MDAxNEFEMzkwMDIwOEU0NTAwMThBRDI1MDAyNDNFCi06MTA3MDcwMDA4RTU4MDAxQ0FEMzgwMDI4QTEyRjAwMTE4RTRFMDAwNDQwCi06MTA3MDgwMDAxMjYwMDAzMUFEQUUwMDI4OEY5MjAwM0MwQTAwMDdFRjdECi06MTA3MDkwMDBBRjg2MDA0QzI0MTEwMDIyMTRCMUZGQjgwMDAwMDAwMDlDCi06MTA3MEEwMDAyNDA0MDAwNzNDMTgwODAwOEYxODU3RTgzQzBGODAwMEE0Ci06MTA3MEIwMDBBREY4MDAyMDU2NjBGRUIxQUY4NDAwNEMzQzA0MDgwMERGCi06MTA3MEMwMDAyNDg0NTdFODBFMDAwNzMyMjQxMzAwNTA4Rjk5RkRFOEZFCi06MTA3MEQwMDA5MzMyMDAwMDMyNDUwMEZGMTBCMzAxNkMwMDAwMDAwMDQ1Ci06MTA3MEUwMDA4RjkyMDAzQzAwMDAyMDIxMEEwMDA3RUZBRjg0MDA0QzgzCi06MTA3MEYwMDAzQzA1MDgwMDI0QTU1N0U4MEUwMDA2RDUyNDA0MDA4MUFECi06MTA3MTAwMDAwQTAwMDhGNDhGOTIwMDNDMDJENDk4MjEzMjY1RkZGRkY4Ci06MTA3MTEwMDAwRTAwMDZDODI0MDQwMDg0MEEwMDA3RUY4RjkyMDAzQzhBCi06MTA3MTIwMDAxMDhERkY1MTI0MDcwNDAwMjg4NzAwMDMxMEUwMDFBQUY2Ci06MTA3MTMwMDAyNDEwMDAwNDI0MEUwMDAxNTQ4RUZGNEIyNDA3NDAwMDRECi06MTA3MTQwMDAwQTAwMDhBQTI0MDcwMTAwM0MwNTA4MDAyNEE1NTdFODA2Ci06MTA3MTUwMDAwRTAwMDcyNDI0MDQwMDgyOEY5MjAwM0MwMDAwMzAyMTlFCi06MTA3MTYwMDAwQTAwMDdFRkFGODYwMDRDM0MwNDA4MDAyNDg0NTdFODZGCi06MTA3MTcwMDA4Q0MyMDAzODBFMDAwNzMyOENDMzAwM0M4RjkyMDAzQzVBCi06MTA3MTgwMDAwQTAwMDk0QTAwMDAyMDIxMjQwNDAwODIzQzA1MDgwMDZFCi06MTA3MTkwMDAyNEE1NTdFODBFMDAwNzI0MDAwMDAwMDA4RjkyMDAzQzUxCi06MTA3MUEwMDAwMDAwMTAyMTBBMDAwN0VGQUY4MjAwNEM4RTUwMDAwNDRGCi06MTA3MUIwMDA4RjkxRkRFODNDMEE4MDAwQUQ1MDAwMjA5MjIyMDAwNTJFCi06MTA3MUMwMDAwMjAwMjgyMTMwNDYwMDAyMTRDMDAxODcyNDA0MDA4QUVFCi06MTA3MUQwMDA4RjkyRkRFQzAyMDAyODIxMjQwNDAwOEQ5MjRCMDAxQkFECi06MTA3MUUwMDAzMTYzMDAyMDE0NjAwMTgwMDAwMDAwMDA5MjJEMDAwOTJFCi06MTA3MUYwMDAyNDBDMDAxMjMxQTgwMEZGMTEwQzAxN0IyNDA0MDA4MTMzCi06MTA3MjAwMDAwRTAwMDZGNjAyMDAyMDIxOTI0NTAwMUIyNDBFMDAwNDA5Ci06MTA3MjEwMDAwMjAwMjAyMTM0QTkwMDQyQTI0OTAwMUIwRTAwMDcwMEYxCi06MTA3MjIwMDBBMjJFMDAyNTNDMDQ4MDAwOEM5MTAxNzgwNjIwRkZGRUYwCi06MTA3MjMwMDAyNDE4MDAwMkFDOTAwMTQwQTA5ODAxNDQ4RjkyMDAzQ0I5Ci06MTA3MjQwMDAzQzBGMTAwMEFDOEYwMTc4MEEwMDA4RjUwMDEzMTAyQkRBCi06MTA3MjUwMDA4RTUwMDAwNDhGOTFGREU4M0MxRjgwMDBBRkYwMDAyMEFECi06MTA3MjYwMDA5MjM5MDAwNTAyMDAyODIxMzMyNzAwMDIxNEUwMDAxQTk5Ci06MTA3MjcwMDAyNDA0MDA4QTkyMjYwMDA5MjQxMjAwMTIzMEM0MDBGRjYwCi06MTA3MjgwMDAxMDkyMDExMTAwMDAwMDAwOTIyMzAwMDkyNDBBMDAwNDVBCi06MTA3MjkwMDAzMDYyMDBGRjEwNEEwMTBDMDAwMDAwMDAwRTAwMDZGNkVDCi06MTA3MkEwMDAwMjAwMjAyMThGODhGREVDMjQwQ0ZGRkUwMjAwMjAyMTJCCi06MTA3MkIwMDA5MTBFMDAxQjM1Q0QwMDIwQTEwRDAwMUJBMjMyMDAwOTRDCi06MTA3MkMwMDA5MjJCMDAwNTAxNkM5MDI0MEUwMDA3MDBBMjMyMDAwNUVECi06MTA3MkQwMDAwMjAwMjgyMTAwMDAyMDIxMEUwMDA3QkEwMDAwMDAwMDUzCi06MTA3MkUwMDAwQTAwMDhGNDhGOTIwMDNDOEU1MTAwMDQzQzAyODAwMDlBCi06MTA3MkYwMDAzQzEwMDgwMDI2MTA1N0U4QUM1MTAwMjAzQzAxMDgwMDYzCi06MTA3MzAwMDBBQzMxNTdFODkyNDYwMDAzMzBDNDAwMDQxMDgwMDE2OTk0Ci06MTA3MzEwMDA4Rjg0RkRFODI0MDIwMDA2QTA4MjAwMDk5MjREMDAxQjI0Ci06MTA3MzIwMDAyNDA4RkZDMDMxQUMwMDNGMDE4ODU4MjVBMDhCMDAwODFECi06MTA3MzMwMDA5MjQzMDAwMzMwNkEwMDAxMTU0MDAxNjAwMDAwMDAwMDI0Ci06MTA3MzQwMDA4RTQyMDAwOEFFMDIwMDA4M0MwMjA4MDA4QzQyNTdGMDUyCi06MTA3MzUwMDAxMDQwMDE1RjhGOEVGREVDMDAwMjgxQzI4Rjg1RkRFODM5Ci06MTA3MzYwMDBBNUQwMDAwQzhFNUYwMDBDMjQwRjAwMDEyNDA5MDAxNDJFCi06MTA3MzcwMDBBRERGMDAyQzhFNTkwMDEwQUREOTAwMUM5NjQ3MDAxNkM5Ci06MTA3MzgwMDBBNUM3MDAzQzk2NTgwMDE0QTVEODAwM0VBQ0FGMDAwQzMxCi06MTA3MzkwMDBBNEFGMDAxMEE0QUYwMDEyQTRBRjAwMTRBNEFGMDAxNjU1Ci06MTA3M0EwMDAxMjYwMDE2M0ExQzkwMDExOTI0NDAwMDMzMDkyMDAwMkVGCi06MTA3M0IwMDAyRTUzMDAwMThGOTIwMDNDMjY2MjAwMDgwQTAwMDdFRjVFCi06MTA3M0MwMDBBRjgyMDA0QzhFNDYwMDA0M0MwNTgwMDAzQzA0ODAwOERGCi06MTA3M0QwMDBBQ0E2MDAyMDhFNDcwMDA4OTA4OTAwMDAyNDExMDA1MEMwCi06MTA3M0UwMDAzMTIyMDBGRjEwNTEwMEJDMjQwNTAwODgzQzA0ODAwMEJECi06MTA3M0YwMDA4QzhGMDFCODA1RTBGRkZFMDAxMzgwMkIzQzE4NDAwOTdDCi06MTA3NDAwMDAwMEI4MTAyNUFGOTAwMDRDM0MxMDEwMDBBQzg2MDE4MEY1Ci06MTA3NDEwMDBBQzg3MDE4NEFDODIwMTg4QUM5MDAxQjgwQTAwMDdGMDA3Ci06MTA3NDIwMDA4Rjg2MDAzMDhFNDUwMDA0M0MwNjgwMDAzQzA5ODAwOEIxCi06MTA3NDMwMDBBQ0M1MDAyMDkxM0YwMDAwMjQwNDAwNTAzM0Y5MDBGRjQ4Ci06MTA3NDQwMDAxMzI0MDBCNDI0MDYwMDg4M0MwNDgwMDA4QzhBMDFCODEwCi06MTA3NDUwMDAwNTQwRkZGRTNDMEU0MDBFMDBDRTY4MjUzQzA4MTAwMEEzCi06MTA3NDYwMDBBQzg1MDE4MEFDODAwMTg0QUM4RDAxODhBQzg4MDFCODBBCi06MTA3NDcwMDA5MTJCMDAwMDI0MENGRjgwMjQwNDAwMDQwMTZDMTgyNUNCCi06MTA3NDgwMDAyNDA2MDAzMDBFMDAwNjY2QTEyMzAwMDAwQTAwMDhGNDVFCi06MTA3NDkwMDA4RjkyMDAzQzhFNTAwMDA0OEY5MUZERUMzQzBGODAwMEQ5Ci06MTA3NEEwMDBBREYwMDAyMDkyMjUwMDFCMzBBOTAwMTAxMTIwMDA3Q0I3Ci06MTA3NEIwMDAyNDAzMDA4MTNDMDQ4MDAwOEM4NzAxQjgwNEUwRkZGRUI3Ci06MTA3NEMwMDAzQzFGNDAxRkFDOTAwMTgwMDA3RjEwMjUwMDEzQzgyQjhCCi06MTA3NEQwMDAzQzEwMTAwMEFDODAwMTg0QUY5OTAwNENBQzgyMDE4ODU0Ci06MTA3NEUwMDBBQzkwMDFCODBBMDAwN0YwOEY4NjAwMzA4RTQ0MDAxQzczCi06MTA3NEYwMDAwRTAwMDZFMTAwMDAwMDAwMTA0MDAwRkMwMDQwMzgyMUIyCi06MTA3NTAwMDA4RjkyMDAzQzI0MDYwMDg5M0MwNTgwMDA4Q0FFMDFCOEI3Ci06MTA3NTEwMDAwNUMwRkZGRTAwMDAwMDAwQUNBNzAxODA4RTUwMDAxQ0RCCi06MTA3NTIwMDAzQzExNDAwMTAwMTM3ODJCMDBEMTM4MjUzQzEzMTAwMDhBCi06MTA3NTMwMDBBQ0IwMDE4NEFGOEYwMDRDQUNBNzAxODhBQ0IzMDFCOEVDCi06MTA3NTQwMDAwQTAwMDdGMDhGODYwMDMwOTY1OTAwMDIzQzEwMDgwMEIwCi06MTA3NTUwMDAyNjEwNTdFODMzMzgwMDA0MTMwMDAwQTczQzA0NjAwMEVECi06MTA3NTYwMDA4RTVGMDAxQzNDMDY4MDAwQUNERjAwMjAzQzAxMDgwMDYwCi06MTA3NTcwMDBBQzNGNTdFODk2NEYwMDAyMzFFNzAwMDExNEUwMDBFNzA2Ci06MTA3NTgwMDAwMDAwMDAwMDhFNDIwMDA0QUUwMjAwMDgzQzEwMDgwMDFCCi06MTA3NTkwMDA4RTEwNTdGMDEyMDAwMEREM0MwNjgwMDA4Rjg1RkRFODVDCi06MTA3NUEwMDAyNDEwMDAwMThDQkYwMDE4OEY5MUZERUM4Rjg5RkRFNDQxCi06MTA3NUIwMDAwM0U2QzgyNUFDQjkwMDE4QTBBMDAwMDVBQ0IwMDAwQ0NCCi06MTA3NUMwMDAzQzE4MDgwMDhGMTg1N0YwOEY4NzAwM0NBNEIwMDAxMEJCCi06MTA3NUQwMDAwMDE4NzlDMkE0QjAwMDEyQTRCMDAwMTRBNEIwMDAxNjIwCi06MTA3NUUwMDBBNjJGMDAwQzhDRUUwMDA4OEY4RDAwM0M4RjhDMDAzQzg5Ci06MTA3NUYwMDBBRTJFMDAyQzhEQTgwMDBDMjQwNzAwMDJBRTI4MDAxQzIzCi06MTA3NjAwMDA5MThCMDAxMEEyMkIwMDExOEY4MzAwM0M5MDZBMDAxMTE3Ci06MTA3NjEwMDBBMTJBMDAwODhGODIwMDNDOTA0NDAwMTJBMEE0MDA0RUQyCi06MTA3NjIwMDA4RjkyMDAzQzkyNDYwMDEzQTIyNjAwMTI4RjkyMDAzQ0RCCi06MTA3NjMwMDA5NjVGMDAxNEE2M0YwMDNDOTY1OTAwMTZBNjM5MDAzRUZFCi06MTA3NjQwMDA4RTU4MDAxOEFFMzgwMDE0NTY2MEZENENBRjg3MDA0Q0MxCi06MTA3NjUwMDAzQzA1MDgwMDI0QTU1N0U4MEUwMDA3MDUwMDAwMjAyMTdFCi06MTA3NjYwMDA4RjkyMDAzQzAwMDAzODIxMEEwMDA3RUZBRjg3MDA0Q0UyCi06MTA3NjcwMDAzQzA1MDgwMDI0QTU1N0U4MEUwMDA3MjQyNDA0MDA4MkQ2Ci06MTA3NjgwMDA4RjkyMDAzQzBBMDAwOEQ3MDAwMDM4MjEwRTAwMEUwNzM4Ci06MTA3NjkwMDAwMDAwMDAwMDhGOTIwMDNDMEEwMDA5NEEwMDAwMjAyMUVGCi06MTA3NkEwMDAwRTAwMDZGNjAyMDAyMDIxOTIzMjAwMUIwMjAwMjAyMTZCCi06MTA3NkIwMDAzNjU4MDAxMDBFMDAwNzAwQTIzODAwMUI4RjkyMDAzQ0M1Ci06MTA3NkMwMDAwQTAwMEEzRDAwMDAxODIxMEUwMDA3QkEyNDA0MDA4MUI4Ci06MTA3NkQwMDAwQTAwMDhGNDhGOTIwMDNDOTI0MzAwMEMzMDZBMDAwMUNCCi06MTA3NkUwMDAxMTQwMDAwMzAwMDAwMDAwOTY0QjAwMEVBNDhCMDAyQ0ZDCi06MTA3NkYwMDA5MjQ4MDAwQzMxMEMwMDAyMTE4MEZGM0MwMDAwMjgyMTUwCi06MTA3NzAwMDA5NjRFMDAxMjhFNEQwMDE0QTQ4RTAwMUEwQTAwMEEwQjI5Ci06MTA3NzEwMDBBQzhEMDAxQzhGODMwMDVDOEY4NzAwNTQxMDY3RkY0QTdDCi06MTA3NzIwMDAwMDAwMzAyMTNDMDgwODAwMjUwODU3NkMwMDAzMjBDMEU5Ci06MTA3NzMwMDAwMDg4MzAyMThDRDEwMDAwMTIyNTAwQzgyNDYyMDAwMThECi06MTA3NzQwMDAzMDQzMDAwRjE0NjdGRkZBMDAwMzIwQzAwQTAwMEEyMjJBCi06MTA3NzUwMDAwMDAwMzAyMTNDMDUwODAwMjRBNTU3RTgwRTAwMDcyNDRFCi06MTA3NzYwMDAyNDA0MDA4QjhGOTIwMDNDMEEwMDA4RDcwMDEzMzgyQkFBCi06MTA3NzcwMDAzQzBDMDgwMDhEOEM1N0U4MjREOUZGRkUyNTkxMDEwMEIwCi06MTA3NzgwMDAzMjJCMDA3RjAxNjc5MDIxMDIzMzEwMjRBRDAyMDAyOEM0Ci06MTA3NzkwMDBBRTQ2MDBEMEFFNDAwMEQ0MEEwMDA4NDBBRTU5MDAxQ0VFCi06MTA3N0EwMDBBQ0MwMDA1NDNDMDkwODAwOEQyOTU3RTgzQzA1ODAwQzBBCi06MTA3N0IwMDAzNEE4MDEwMEFDRTkwMDI4OEU1MDAwMTRBRDEwMDBEMEIwCi06MTA3N0MwMDA4RTRFMDAxNEFEMEUwMEQ0OEU0RDAwMTAyNUE3RkZGRTg2Ci06MTA3N0QwMDAwQTAwMDg3Q0FEMDcwMDFDNTQ5MEZEQTMyNDA3NDAwMDVDCi06MTA3N0UwMDAwQTAwMDhBQTI0MDcxMDAwMEUwMDA3QUUwMDAwMDAwMERGCi06MTA3N0YwMDAwQTAwMDhGNDhGOTIwMDNDOEM4MzQ0MkMzQzA1REVBRERCCi06MTA3ODAwMDAzNEIyQkVFRjNDMDEwODAwQUMyMDU3RTgxMDcyMDA0RkM0Ci06MTA3ODEwMDAwMDAwMDAwMDNDMDQ2QzYyMzQ4Mjc5NzAxNDYyMDAwODNECi06MTA3ODIwMDAyNDA0MDAwMjk3OEEwMDU4OTc4MzAwNTAwMjAwMjgyMTAwCi06MTA3ODMwMDAwMTQzNDgyQjExMjAwMDE5MjQwNDAwOTIyNDA0MDAwMjYzCi06MTA3ODQwMDAwRTAwMDVENjI0MDUwMjAwM0MwQjgwMDBBRDYyMDAyMDJFCi06MTA3ODUwMDAzQzAxMDgwMEFDMjI1N0U4MTA0MDAwMEQ4RjhFMDAzQzIwCi06MTA3ODYwMDAyNDBDMDAyODI0MDQwMDAzOTFDRDAwMTAzMUE4MDBGRjRGCi06MTA3ODcwMDA1NTBDMDAwMTI0MDQwMDAxMEUwMDAwNEEwMDAwMDAwMDI1Ci06MTA3ODgwMDAxMDQwMDAwNDI0MDQwMDgzMEEwMDBBNkQ4RjkyMDAzQzFCCi06MTA3ODkwMDAyNDA0MDA4MzNDMDUwODAwMjRBNTU3RTgwRTAwMDcwNUQyCi06MTA3OEEwMDAwMDAwMDAwMDhGOTIwMDNDMDAxMzM4MkIwQTAwMDdFRjA1Ci06MTA3OEIwMDBBRjg3MDA0QzBBMDAwOUQ2MjQwMjAwMTI4RTQ0MDAwODRCCi06MTA3OEMwMDAwRTAwMDZFMTAwMDAwMDAwMEEwMDA5RTJBRTAyMDAwODE2Ci06MTA3OEQwMDAzQzA1MDgwMDI0QTU1N0U4MEUwMDA2RDUyNDA0MDA4N0JGCi06MTA3OEUwMDA4RjkyMDAzQzBBMDAwOUZGMDAxMzEwMkIyNDA0MDAwNEFGCi06MTA3OEYwMDAwRTAwMDVENjI0MDUwMDMwMTQ0MDAwMTcwMDQwMzgyMTQyCi06MTA3OTAwMDA4RjkyMDAzQzBBMDAwQTUyMjQwNjAwODMzQzA1MDgwMEJFCi06MTA3OTEwMDAyNEE1NTdFODBBMDAwQjM3MjQwNDAwODc4RTQ0MDAwNDhFCi06MTA3OTIwMDAwRTAwMDZFMTAwMDAwMDAwMEEwMDBBNzNBRTAyMDAwODIzCi06MTA3OTMwMDAzQzA1MDgwMDI0QTU1N0U4MEUwMDA3MjQyNDA0MDA4MjEzCi06MTA3OTQwMDA4RjkyMDAzQzBBMDAwOUZGMDAwMDEwMjE4QzgzNDQyQzE4Ci06MTA3OTUwMDAwQTAwMEIxNjNDMDQ2QzYyOEY5MjAwM0MzQzA4ODAwOEM1Ci06MTA3OTYwMDAzQzBDODAwMDI0MEIwMDUwMjQwQTAwMDFBRDgyMDAyMDUyCi06MTA3OTcwMDBBMTBCMDAwMEExMEEwMDAxOTI0OTAwMDRBMTA5MDAxODBFCi06MTA3OTgwMDA5MjQ0MDAwNUExMDQwMDE5OTI0MzAwMDYzQzA0MDgwMDNCCi06MTA3OTkwMDAyNDg0NTc2Q0ExMDMwMDFBOTI0MjAwMDczQzAzMDgwMDlDCi06MTA3OUEwMDAyNDYzNTc2OEExMDIwMDFCOTI0NTAwMDhBMTA1MDAxQzMyCi06MTA3OUIwMDA5MjQ2MDAwOUExMDYwMDFEOTI1RjAwMEFBMTFGMDAxRTQ5Ci06MTA3OUMwMDA5MjU5MDAwQkExMTkwMDFGOTI1ODAwMENBMTE4MDAyMDE5Ci06MTA3OUQwMDA5MjUxMDAwREExMTEwMDIxOTI1MDAwMEVBMTEwMDAyMjIxCi06MTA3OUUwMDA5MjRGMDAwRkExMEYwMDIzOTI0RTAwMTBBMTBFMDAyNDExCi06MTA3OUYwMDA5MjREMDAxMUExMEQwMDI1OTY0QzAwMTRBNTBDMDAyOEY1Ci06MTA3QTAwMDA5NjRCMDAxNjhGOEEwMDU0OEY5ODAwNUNBNTBCMDAyQUI1Ci06MTA3QTEwMDA5NjQ5MDAxODAwMEExMEMwMjU0NTAwMDFBNTA5MDAyQzUwCi06MTA3QTIwMDA4RTQ2MDAxQzAwNDRDODIxMDA0M0Y4MjEzMEE1MDAwRkY5Ci06MTA3QTMwMDBBRkU2MDAwMEFGMjcwMDAwMTBCODAwMDNBRjg1MDA1NDg4Ci06MTA3QTQwMDAwQTAwMEE1MjAwMDAzMDIxMjRBRDAwMDEzMUE4MDAwRkM1Ci06MTA3QTUwMDAwMDAwMzAyMTBBMDAwQTUyQUY4ODAwNUMzQzA3MDgwMDkxCi06MTA3QTYwMDAyNEU3NTc2ODAwODc5MDIxQUNDMDAwMDAwMDAwMzAyMTU3Ci06MTA3QTcwMDAwQTAwMEEyMkFFNDAwMDAwM0MwNDgyMDEzQzAzNjAwMDgwCi06MTA3QTgwMDAzNDgyMEUwMkFDNjAzRDY4QUY4MDAwN0MwM0UwMDAwOEU5Ci06MTA3QTkwMDBBQzYyM0Q2QzI3QkRGRkU4QUZCMDAwMTAzMDkwRkZGRjM3Ci06MTA3QUEwMDAwMDEwMTg0MjJDNjIwMDQxQUZCRjAwMTQxNDQwMDAwMkM1Ci06MTA3QUIwMDAyNDA0MDA4MDI0MDMwMDQwM0MwMTA4MDBBQzMwMDA2MDM2Ci06MTA3QUMwMDAzQzAxMDgwMEFDMjMwMDY0MEUwMDBFMTAwMDYwMjgyMTY5Ci06MTA3QUQwMDAyNDQ4MDJCRjI0MDlGRjgwMDEwOTI4MjQwMDEwMzk4MEFFCi06MTA3QUUwMDAwMDEwMzA0MDhGQkYwMDE0OEZCMDAwMTAwMEE3MjAyMTdECi06MTA3QUYwMDAwMDg2MTgyMUFGODMwMDY0M0MwMTA4MDBBQzI1MDA1OEMzCi06MTA3QjAwMDAzQzAxMDgwMEFDMjQwMDVDMDNFMDAwMDgyN0JEMDAxODFECi06MTA3QjEwMDAzMDgzMDBGRjMwQzZGRkZGMzBFNDAwRkYzQzA4ODAwMEU4Ci06MTA3QjIwMDA4RDAyMDFCODA0NDBGRkZFMDAwMzU0MDAwMTQ0MzgyNUQzCi06MTA3QjMwMDAzQzA5NjAwMDAwRTkyMDI1M0MwMzEwMDBBRDA1MDE4MEYwCi06MTA3QjQwMDBBRDA2MDE4NEFEMDQwMTg4MDNFMDAwMDhBRDAzMDFCODZGCi06MTA3QjUwMDA4Rjg2MDAzQzNDMDk2MDEyMzUyNzAwMTA4Q0NCMDAwNDU2Ci06MTA3QjYwMDAzQzBDNjAwRTM1ODUwMDEwMzE2QTAwMDYyRDQ4MDAwMTdFCi06MTA3QjcwMDBBQ0U4MDBDNDhDQzQwMDA0QUNBNDMxODA4Q0MyMDAwODAyCi06MTA3QjgwMDA5NEMzMDAwMkFDQTIzMTg0MDNFMDAwMDhBNzgzMDA3NDEwCi06MTA3QjkwMDA4Rjg1MDAzQzhGODdGRjQwOEY4NkZGNDg4Q0FFMDAwNEE2Ci06MTA3QkEwMDAzQzBGNjAxMjM1RTgwMDEwQUNFRTAwNjg4Q0FEMDAwOEE4Ci06MTA3QkIwMDBBQ0VEMDA2QzhDQUMwMDEwQUNDQzAwNEM4Q0FCMDAwQzcxCi06MTA3QkMwMDBBQ0NCMDA0ODk0Q0EwMDU0M0MwMjA4MDA4QzQyMDA0NEVDCi06MTA3QkQwMDAyNTQ5MDAwMUE0QzkwMDU0OTRDNDAwNTQzMDgzRkZGRjE4Ci06MTA3QkUwMDAxMDYyMDAxNzAwMDAwMDAwM0MwMjA4MDA4QzQyMDA0MEI4Ci06MTA3QkYwMDBBNEMyMDA1MjhDQTMwMDE4QUNFMzAwMzA4Q0EyMDAxNDg1Ci06MTA3QzAwMDBBQ0UyMDAyQzhDQjkwMDE4QUNGOTAwMzg4Q0I4MDAxNDI4Ci06MTA3QzEwMDAyNDA1MDAwMUFDRjgwMDM0OEQwNjAwQkM1MEM1MDAxOUU1Ci06MTA3QzIwMDA4RDAyMDBCNDhEMDIwMEI4QTRFMjAwNDg5NEU0MDA0ODNDCi06MTA3QzMwMDBBNEU0MDA0QTk0RTgwMERBMDNFMDAwMDgzMTAyRkZGRjAwCi06MTA3QzQwMDAzQzAyMDgwMDhDNDIwMDI0QTRDMDAwNTRBNEMyMDA1MjhDCi06MTA3QzUwMDA4Q0EzMDAxOEFDRTMwMDMwOENBMjAwMTRBQ0UyMDAyQzIyCi06MTA3QzYwMDA4Q0I5MDAxOEFDRjkwMDM4OENCODAwMTQyNDA1MDAwMTU4Ci06MTA3QzcwMDBBQ0Y4MDAzNDhEMDYwMEJDNTRDNUZGRUI4RDAyMDBCODkzCi06MTA3QzgwMDA4RDAyMDBCNEE0RTIwMDQ4OTRFNDAwNDhBNEU0MDA0QTUxCi06MTA3QzkwMDA5NEU4MDBEQTAzRTAwMDA4MzEwMkZGRkY4Rjg2MDAzQzIxCi06MTA3Q0EwMDAzQzA0ODAwMDhDQzkwMDA4OENDODAwMDgwMDA5MjlDMDY5Ci06MTA3Q0IwMDAwMDA4MzlDMEFDODcwMDIwOTBDMzAwMDczMDYyMDAwNDgwCi06MTA3Q0MwMDAxMDQwMDAzQUFGODUwMDc4OTBDQjAwMDczMTZBMDAwODc5Ci06MTA3Q0QwMDAxMTQwMDAzOThGODdGRjQ0OENDRDAwMEM4Q0NFMDAxNEVFCi06MTA3Q0UwMDAwMUFFNjAyQjExODAwMDMyMDAwMDAwMDA4Q0MyMDAwQzNECi06MTA3Q0YwMDBBQ0UyMDA3MDhDQ0IwMDE4OEY4NUZGNDA4Rjg4RkY0ODY2Ci06MTA3RDAwMDBBQ0VCMDA3NDhDQ0EwMDEwMjQwMkZGRjhBQ0FBMDBDOEM3Ci06MTA3RDEwMDA4Q0M5MDAwQ0FEMDkwMDYwOENDNDAwMUNBQ0E0MDBDMDcwCi06MTA3RDIwMDA5MEUzMDA3QzAwNjJDODI0QTBGOTAwN0M5MEQ4MDAwNzkyCi06MTA3RDMwMDAzMzBGMDAwODExRTAwMDA0MDAwMDAwMDA5MEVEMDA3QzBCCi06MTA3RDQwMDAzNUFDMDAwMUEwRUMwMDdDOTBDRjAwMDczMUVFMDAwMUMzCi06MTA3RDUwMDAxMUMwMDAwOTAwMDAwMDAwOTBFNDAwN0MyNDE4MDAwMjFCCi06MTA3RDYwMDAzNDgyMDAwMkEwRTIwMDdDOTBBMzAwRUMzMDc5MDBGRjk2Ci06MTA3RDcwMDAxMzM4MDAxMzI0MDgwMDM0OTBDOTAwMDczMTI2MDAwMjhDCi06MTA3RDgwMDAxMEMwMDAwNDAwMDAwMDAwOTBFQjAwN0MzNTZBMDAwNDg1Ci06MTA3RDkwMDBBMEVBMDA3QzkwRUQwMDdEMzFBQzAwM0ZBMEVDMDA3REJFCi06MTA3REEwMDA5NEE3MDBEQTAzRTAwMDA4MzBFMkZGRkY4Rjg3RkY0NDZBCi06MTA3REIwMDAwQTAwMEM0QzhDQzIwMDE0MEEwMDBDNERBQ0UwMDA3MEEwCi06MTA3REMwMDAwQTAwMEM2RUFDQTgwMENDOEY4QzAwM0MyN0JERkZEOEZECi06MTA3REQwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMDAwMTBBRkJGMDAyMEFGCi06MTA3REUwMDBBRkIxMDAxNDkxOEYwMDE1M0MxMzYwMEUzNjczMDAxMDc0Ci06MTA3REYwMDAzMUVCMDAwRkEzOEIwMDgwOEQ4RjAwMDQ4RDhCMDAwODZBCi06MTA3RTAwMDA5NTlGMDAxMjk1OTkwMDEwOTU4NDAwMUE5NTk4MDAxRTcwCi06MTA3RTEwMDA5NThFMDAxQzMzRURGRkZGMzMyQUZGRkYzMDg5RkZGRkYzCi06MTA3RTIwMDAzMzA4RkZGRjMxQzdGRkZGM0MwMTA4MDBBQzJEMDAyNEUxCi06MTA3RTMwMDAzQzAxMDgwMEFDMjkwMDQ0M0MwMTA4MDBBQzJBMDA0MDg5Ci06MTA3RTQwMDBBRTY4MzE3OEFFNjczMTdDOTE4NTAwMTU5NTkxMDAxNjRBCi06MTA3RTUwMDAzQzEyNjAxMjM2NTIwMDEwMzBBMjAwRkYzMjMwRkZGRjk5Ci06MTA3RTYwMDBBRTYyMzE4OEFFNTAwMEI0OTE4MzAwMTQ5NTlGMDAxODIzCi06MTA3RTcwMDAyNDA2MDAwMTAwNjZDODA0MzNGOEZGRkZBRTU5MDBCOEJECi06MTA3RTgwMDBBRTU4MDBCQzkxOEUwMDE0QUY4RjAwNjgzQzA4NjAwNkFECi06MTA3RTkwMDAzMUNEMDBGRkFFNEQwMEMwOTE4QTAwMTU5NTg0MDAwRUQzCi06MTA3RUEwMDAzQzA3NjAwQTMxNDkwMEZGQUY4QjAwNkMzMDg0RkZGRjU0Ci06MTA3RUIwMDBBRTQ5MDBDODM1MTEwMDEwMEUwMDBCQjUzNEYwMDQxMEE3Ci06MTA3RUMwMDAzQzAyMDgwMDhDNDIwMDYwM0MwMzA4MDA4QzYzMDA2NEE0Ci06MTA3RUQwMDAzQzA2MDgwMDhDQzYwMDU4M0MwNTA4MDA4Q0E1MDA1Q0Q4Ci06MTA3RUUwMDA4Rjg0MDA2NDhGQkYwMDIwQUUyMzAwNENBRTY1MzE5Q0IwCi06MTA3RUYwMDBBRTAzMDA1NEFFNDUwMERDQUU2MjMxQTBBRTYzMzFBNEU3Ci06MTA3RjAwMDBBRTY2MzE5OEFFMjIwMDQ4OEZCMzAwMUNBRTAyMDA1MDFFCi06MTA3RjEwMDA4RkIxMDAxNEFFNDIwMEUwQUU0MzAwRTRBRTQ2MDBEODlDCi06MTA3RjIwMDA4RkIwMDAxMDhGQjIwMDE4MEEwMDA0QkUyN0JEMDAyOEQxCi06MTA3RjMwMDA5Nzg1MDA3Njk3ODMwMDYwMjdCREZGRThBRkIwMDAxMEZCCi06MTA3RjQwMDAwMEEzMTAyQkFGQkYwMDE0MjQwNDAwMDU4RjkwMDAzQzQ5Ci06MTA3RjUwMDAxMDQwMDA1NTI0MDkwMDAyMEUwMDA1RDY4Rjg1MDA2NEVDCi06MTA3RjYwMDBBRjgyMDA3ODI0MDQwMDAzMTA0MDAwNEYyNDA5MDAwMjZGCi06MTA3RjcwMDAzQzA2ODAwMDBFMDAwMDRBQUNDMjAwMjAyNDA3MDAwMTJECi06MTA3RjgwMDAyNDA4MjAwMDEwNDAwMDREMjQwNDAwMDU5NzhFMDA3NjQwCi06MTA3RjkwMDA4RjhBRkY0NDI0MDkwMDUwMjVDNTAwMDFBNzg1MDA3NjdCCi06MTA3RkEwMDBBMTQ5MDAwMDNDMEQwODAwOERBRDAwNjQyNDAzODAwMDUxCi06MTA3RkIwMDA4Rjg0RkY0MDAwMEQ2NjAwQUQ0QzAwMThBNTQwMDAwNjAwCi06MTA3RkMwMDA5NTRCMDAwQThGODVGRjQ4MjQwMkZGODAwMTYzMzAyNDBGCi06MTA3RkQwMDBBNTQ2MDAwQTkxNUYwMDBBMDAwMDQ4MjEwM0UyQzgyNTc3Ci06MTA3RkUwMDBBMTU5MDAwQUEwQTAwMDA4QTE0MDAwNENBMDgwMDBDNTMzCi06MTA3RkYwMDA5NjE4MDAwMjk3ODMwMDc0M0MwMjAwMDRBNDk4MDBEQUVCCi06MTA4MDAwMDA5NjBGMDAwMjI0MThGRkJGMjVFRTI0MDFBNDhFMDBBRUI3Ci06MTA4MDEwMDA4RTBEMDAwNEFDQUQwMDQ0OEUwQzAwMDhBQ0FDMDA0MEVBCi06MTA4MDIwMDBBNEEwMDA1MEE0QTAwMDU0OEUwQjAwMEMyNDBDMDAzMDFGCi06MTA4MDMwMDBBQzhCMDAyODhFMDYwMDEwQUM4NjAwMjRBNDgwMDAzRTg1Ci06MTA4MDQwMDBBNDg3MDA0RUE0ODcwMDUwQTQ4MzAwM0NBRDQyMDA3NDc2Ci06MTA4MDUwMDBBQzg4MDBDOEFDQTgwMDYwQTA4NzAwRUM5MDlGMDBDNDZBCi06MTA4MDYwMDAzM0Y5MDA3RkEwOTkwMEM0OTA5MDAwQzQwMjE4NzgyNENFCi06MTA4MDcwMDBBMDhGMDBDNDkxNEUwMDdDMzVDRDAwMDFBMTREMDA3QzQ1Ci06MTA4MDgwMDA5MzhCMDA4MEFENDgwMDcwQUM4QzAwQ0NBMDhCMDBDNkY4Ci06MTA4MDkwMDA4Rjg4MDA2QzhGODcwMDY4QUM4ODAwQjRBQzg3MDBCODBDCi06MTA4MEEwMDBBNTQwMDA3OEE1NDAwMDdBOEZCRjAwMTQ4RkIwMDAxMDYzCi06MTA4MEIwMDAwMTIwMTAyMTAzRTAwMDA4MjdCRDAwMTg4Rjg1MDA3OEZCCi06MTA4MEMwMDAwRTAwMDY2NjhGODYwMDY0MEEwMDBEM0EyNDA5MDAwMjNECi06MTA4MEQwMDAyN0JERkZFMEFGQjAwMDEwOEY5MDAwM0NBRkIxMDAxNDlGCi06MTA4MEUwMDBBRkJGMDAxODhFMDkwMDA0MEUwMDA0OEIwMDA5MjFDMEU4Ci06MTA4MEYwMDA4RTA4MDAwNDhGODRGRjQwOEY4MkZGNDgwMDA4MzlDMDNCCi06MTA4MTAwMDAzQzA2ODAwMEFDQzcwMDIwOTQ4NTAwREE5MDQzMDAxMzQxCi06MTA4MTEwMDAxNDYwMDAxQzMwQjFGRkZGOEY4Q0ZGNDQ5MThCMDAwODZFCi06MTA4MTIwMDAzMTZBMDA0MDE1NDAwMDBCMDAwMDAwMDA4RTBEMDAwNDc1Ci06MTA4MTMwMDAwMjIwMzAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEMzCi06MTA4MTQwMDAyNDA0MDAyMjAwMDAzODIxMDAwRDI5QzAwQTAwMEJENEFECi06MTA4MTUwMDAyN0JEMDAyMDBFMDAwMDYxMDAwMDAwMDA4RTBEMDAwNDBECi06MTA4MTYwMDAwMjIwMzAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDkzCi06MTA4MTcwMDAyNDA0MDAyMjAwMDAzODIxMDAwRDI5QzAwQTAwMEJENDdECi06MTA4MTgwMDAyN0JEMDAyMDBFMDAwMDU5MDAwMDAwMDA4RTBEMDAwNEU1Ci06MTA4MTkwMDAwMjIwMzAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDYzCi06MTA4MUEwMDAyNDA0MDAyMjAwMDAzODIxMDAwRDI5QzAwQTAwMEJENDRECi06MTA4MUIwMDAyN0JEMDAyMDI3QkRGRkUwQUZCMjAwMTgzMDkyRkZGRkJGCi06MTA4MUMwMDBBRkIwMDAxMEFGQkYwMDFDQUZCMTAwMTQxMjQwMDAxRUQyCi06MTA4MUQwMDAwMDAwODAyMThGODYwMDNDOENDNTAwMDAyNDAzMDAwNjJGCi06MTA4MUUwMDAwMDA1M0YwMjAwMDUxNDAyMzBFNDAwMDcxNDgzMDAxNjY2Ci06MTA4MUYwMDAzMDQ1MDBGRjJDQTgwMDA2MTEwMDAwNDAwMDA1NTg4MDAzCi06MTA4MjAwMDAzQzBDMDgwMDI1OEM1NEVDMDE2QzUwMjE4RDQ5MDAwMDc5Ci06MTA4MjEwMDAwMTIwMDAwODAwMDAwMDAwOEY4RTAwN0MyNDBEMDAwMTZBCi06MTA4MjIwMDAxMUNEMDA1MDI0MDIwMDAyQUY4MjAwN0MyNjA5MDAwMTFCCi06MTA4MjMwMDAzMTMwRkZGRjI0QzgwMDIwMDIxMjIwMkIwMTAwMzAyMTIyCi06MTA4MjQwMDAxNDgwRkZFNUFGODgwMDNDMDIwMDEwMjE4RkJGMDAxQ0E2Ci06MTA4MjUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODM3Ci06MTA4MjYwMDAyN0JEMDAyMDkzODcwMDYyNTRFMDAwMzQwMDAwMzAyMUQ1Ci06MTA4MjcwMDAwRTAwMEM4MjAwMDAwMDAwOEY4NjAwM0MwQTAwMEQ5QTYwCi06MTA4MjgwMDAyNDAyMDAwMThGODcwMDdDMjQwNTAwMDIxMEU1MDAzMUU0Ci06MTA4MjkwMDAyNDA0MDAxMzAwMDAyODIxMDAwMDMwMjEyNDA3MDAwMURECi06MTA4MkEwMDAwRTAwMEJENDAwMDAwMDAwMEEwMDBEOUI4Rjg2MDAzQ0RFCi06MTA4MkIwMDA4RjgzMDA3QzI0MDIwMDAyMTQ2MkZGRjYyNDA0MDAxMjYzCi06MTA4MkMwMDAwRTAwMEMzNzAwMDAwMDAwOEY4NTAwNzgwMDQwMzAyMTQwCi06MTA4MkQwMDAyNDA0MDAxMjBFMDAwQkQ0MDAwMDM4MjEwQTAwMEQ5QjZDCi06MTA4MkUwMDA4Rjg2MDAzQzhGODMwMDdDMjQxMTAwMDMxMDcxMDAyOUNECi06MTA4MkYwMDAyNDFGMDAwMjEwN0ZGRkNFMjYwOTAwMDEyNDA0MDAxMDc1Ci06MTA4MzAwMDAwMDAwMjgyMTAwMDAzMDIxMEEwMDBEQjgyNDA3MDAwMUQ4Ci06MTA4MzEwMDA4RjkxMDA3QzI0MDYwMDAyMTYyNkZGRjkyNDA0MDAxMDI5Ci06MTA4MzIwMDAwRTAwMENEQzAwMDAwMDAwMTQ0MDAwMjM4Rjk4MDAzQzdECi06MTA4MzMwMDA4Rjg2MDAzQzBBMDAwRDlBMjQwMjAwMDMyNDA0MDAxNEQ2Ci06MTA4MzQwMDAwRTAwMEJENDAwMDAyODIxOEY4NjAwM0MwQTAwMEQ5QUY1Ci06MTA4MzUwMDAyNDAyMDAwMjBFMDAwRDQ0MDAwMDAwMDAwQTAwMEQ5QkU0Ci06MTA4MzYwMDA4Rjg2MDAzQzBFMDAwQkU0MDAwMDAwMDAyNDE5MDAwMjgwCi06MTA4MzcwMDAyNDA0MDAxNDAwMDAyODIxMDAwMDMwMjEwMDAwMzgyMUNFCi06MTA4MzgwMDBBRjk5MDA3QzBFMDAwQkQ0MDAwMDAwMDAwQTAwMEQ5QjhBCi06MTA4MzkwMDA4Rjg2MDAzQzBFMDAwQkY0MDAwMDAwMDA4Rjg1MDA3OEYzCi06MTA4M0EwMDAyNDE5MDAwMjAwNDAzMDIxMjQwNDAwMTAwMDAwMzgyMTZDCi06MTA4M0IwMDAwQTAwMERGMUFGOTkwMDdDMDA0MDM4MjEyNDA0MDAxMDIwCi06MTA4M0MwMDA5NzBGMDAwMjAwMDAyODIxMEUwMDBCRDQzMUU2RkZGRkJBCi06MTA4M0QwMDA4Rjg2MDAzQzBBMDAwRDlCQUY5MTAwN0M4Rjg0RkY0NDg4Ci06MTA4M0UwMDAzQzA3N0ZGRjM0RTZGRkZGOEM4NTAwMTgyNDAyMDAwMTY0Ci06MTA4M0YwMDAwMEE2MTgyNEFDODMwMDE4MDNFMDAwMDhBMDgyMDAwNTQyCi06MTA4NDAwMDAzMDg0RkZGRjMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTE3Ci06MTA4NDEwMDAzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTUzCi06MTA4NDIwMDAxNDgwRkZGQjAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMUQ1Ci06MTA4NDMwMDAxMEMwMDAwNzAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjRGCi06MTA4NDQwMDAyNEE1MDAwNEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNEI3Ci06MTA4NDUwMDAwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkI0Ci06MTA4NDYwMDBBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRkI2Ci06MTA4NDcwMDAyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODcxCi06MTA4NDgwMDAwMDAwMDAwMDAwMDQxMUMwMDNFMDAwMDgyNDQyMDI0MDg0Ci06MTA4NDkwMDAyN0JERkZFOEFGQjAwMDEwMDA4MDgwMjFBRkJGMDAxNEZGCi06MTA4NEEwMDAwRTAwMEUzMTAwQTAyMDIxMDA1MDQ4MjEyNDBBRkY4MDM4Ci06MTA4NEIwMDA4RkJGMDAxNDhGQjAwMDEwMDEyQTMwMjQzMTI3MDA3RkI1Ci06MTA4NEMwMDAzQzA4ODAwQTNDMDQyMTAwMDBFODEwMjEwMEM0MjgyNTUzCi06MTA4NEQwMDAzQzAzODAwMDI3QkQwMDE4QUM2NTAwMjRBRjgyMDAyMDVCCi06MTA4NEUwMDBBQzQwMDAwMEFDNjUwMDI0MDNFMDAwMDhBQzQwMDA0MDU0Ci06MTA4NEYwMDAzQzBEMDgwMDhEQUQwMDU4MDAwNTYxODAyNDBBRkY4MDA2Ci06MTA4NTAwMDAwMUE0NTgyMTAxNkM0ODIxMDEyQTMwMjQzMTI3MDA3RjIxCi06MTA4NTEwMDAzQzA4ODAwQzNDMDQyMTAwMDBFODEwMjEwMEM0MjgyNTAwCi06MTA4NTIwMDAzQzAzODAwMEFDNjUwMDI4QUY4MjAwMUMwM0UwMDAwODFCCi06MTA4NTMwMDBBQzQwMDAyNDMwQTVGRkZGM0MwNjgwMDA4Q0MyMDFCODhGCi06MTA4NTQwMDAwNDQwRkZGRTNDMDg2MDE1MDBBODM4MjUzQzAzMTAwMERECi06MTA4NTUwMDBBQ0M0MDE4MEFDQzAwMTg0QUNDNzAxODgwM0UwMDAwODUyCi06MTA4NTYwMDBBQ0MzMDFCODNDMEQwODAwOERBRDAwNTgwMDA1NjE4MDFBCi06MTA4NTcwMDAyNDBBRkY4MDAxQTQ1ODIxMDE2QzQwMjEwMTBBNDgyNEVCCi06MTA4NTgwMDAwMDA5MzE0MDMxMDcwMDdGMDBDNzI4MjUzQzA0MjAwMDQ2Ci06MTA4NTkwMDAwMEE0MTgyNTNDMDI4MDAwQUM0MzA4MzAwM0UwMDAwODJBCi06MTA4NUEwMDBBRjgwMDAxQzI3QkRGRkU4QUZCMDAwMTAwMDgwODAyMTI1Ci06MTA4NUIwMDBBRkJGMDAxNDBFMDAwRTMxMDBBMDIwMjEwMDUwNDgyMTUyCi06MTA4NUMwMDAyNDBCRkY4MDAxMkI1MDI0MDAwQTM5NDAzMTI4MDA3RjAyCi06MTA4NUQwMDAzQzA2MjAwMDhGQkYwMDE0OEZCMDAwMTAwMEU4MjgyNTUzCi06MTA4NUUwMDAzNEMyMDAwMTAwQTIxODI1M0MwNDgwMDAyN0JEMDAxOEY5Ci06MTA4NUYwMDBBQzgzMDgzMDAzRTAwMDA4QUY4MDAwMjAzQzA1ODAwODExCi06MTA4NjAwMDA4Q0E3MDA2MDNDMDY4MDA4MDA4NzEwMkIxNDQwMDAxMUU2Ci06MTA4NjEwMDAyQzgzNDAwMDhDQTgwMDYwMkQwMzQwMDAxMDYwMDAwRkU4Ci06MTA4NjIwMDAyNDAzNDAwMDhDQzkwMDYwMDA4OTI4MkIxNEEwMDAwMjlDCi06MTA4NjMwMDAwMDgwMTgyMThDQzMwMDYwMDAwMzVBNDIwMDBCMzA4MDc4Ci06MTA4NjQwMDAzQzBBMDgwMDI1NEE1NTQwMDBDQTIwMjEwM0UwMDAwOEUyCi06MTA4NjUwMDA4QzgyMDAwMDE0NjBGRkYzMjQwMzQwMDAwMDAzNUE0MkEwCi06MTA4NjYwMDAwMDBCMzA4MDNDMEEwODAwMjU0QTU1NDAwMENBMjAyMUYyCi06MTA4NjcwMDAwM0UwMDAwODhDODIwMDAwM0MwNTgwMDg5MEE2MDAwOEZBCi06MTA4NjgwMDA5Mzg0MDA5MDI0QzIwMDAxMzA0MjAwRkYzMDQzMDA3RkY5Ci06MTA4NjkwMDAxMDY0MDAwQzAwMDIzODI3QTBBMjAwMDgzQzA0ODAwMEVGCi06MTA4NkEwMDA4Qzg1MDE3ODA0QTBGRkZFOEY4QTAwODgyNDA5MDAwMkNGCi06MTA4NkIwMDAzQzA4MTAwMEFDOEEwMTQwQTA4OTAxNDQwM0UwMDAwODk2Ci06MTA4NkMwMDBBQzg4MDE3ODBBMDAwRUI2MzBFMjAwODAyN0JERkZDOEYyCi06MTA4NkQwMDAzQzA1ODAwODM0QTQwMDgwQUZCRjAwMzRBRkJFMDAzMDNBCi06MTA4NkUwMDBBRkI3MDAyQ0FGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMDYwCi06MTA4NkYwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEEwCi06MTA4NzAwMDA5NDgzMDA3ODk0ODIwMDdBMTA0MzAwQ0QyNDA1RkZGRjAzCi06MTA4NzEwMDAzQzFFODAwODAwODBCODIxMEEwMDBGOTIzQzE2ODAwMEExCi06MTA4NzIwMDAxMDhBMDBDODhGQkYwMDM0OEY4NDAwODgzQzBCMDgwMDdCCi06MTA4NzMwMDA4RDZCMDA1QzI0MEFGRjgwM0MwNzgwMEUwMTY0NDAyMUExCi06MTA4NzQwMDAwMTBBNDgyNEFFQzkwMDJDOTZFNjAwN0EzMTAyMDA3RjY3Ci06MTA4NzUwMDAwMDQ3MTgyMTMwQzU3RkZGMDAwNTgwNDAwMjAzQTgyMTkzCi06MTA4NzYwMDA5NkJGMDAwMDNDMTkwODAwOEYzOTAwNTgyNDBGRkY4MDg1Ci06MTA4NzcwMDAzM0Y1M0ZGRjAzMjQ4ODIxMDAxNUMxODAwMjM4OTAyMTgyCi06MTA4NzgwMDAwMjRGNTgyNDNDMEMwMTAwMDE2QzUwMjUzMjRFMDA3RkYyCi06MTA4NzkwMDAzQzBEODAwQzAxQ0Q5MDIxMDI4MDI4MjEwRTAwMEUzNDZBCi06MTA4N0EwMDBBRUNBMDAyODhFNDgwMDEwOEU0OTAwMzA4Rjg2MDAyMDA3Ci06MTA4N0IwMDAyNDAyMDAwMjAxMDkzODIzQUU0NzAwMTBBMEMyMDAwMEM1Ci06MTA4N0MwMDA5NkUzMDA1QzhFNDQwMDMwOEY5MTAwMjAwRTAwMEU4RkU3Ci06MTA4N0QwMDAzMDcwRkZGRjAwMDIyQjgwMDIwNUM4MjUzQzFGNDIwMEJECi06MTA4N0UwMDAwMzNGQzAyNUFFMzgwMDA0OEU1MTAwMDQ4Rjg3MDAyMDVGCi06MTA4N0YwMDA4RTRGMDAwMDI0MDgwMDA4QUNGMTAwMUNBQ0VGMDAxOEZDCi06MTA4ODAwMDBBQ0UwMDAwQ0FDRTAwMDEwOTI1MDAwMEEyNDA2MDAwNTE5Ci06MTA4ODEwMDAyNDA1QzAwMDMyMEUwMEZGQTRFRTAwMTQ5NjREMDAwODlGCi06MTA4ODIwMDAwMkUwOTgyMUE0RUQwMDE2OTI0QzAwMEEzQzBEODAwODRECi06MTA4ODMwMDAzMThCMDBGRkE0RUIwMDIwOTY0NDAwMDgzNUFDMDEwMDBBCi06MTA4ODQwMDBBNEU0MDAyMkFDRTAwMDI0OTI0QTAwMEIzMTQ5MDBGRjZFCi06MTA4ODUwMDBBNEU5MDAwMkEwRTgwMDAxOEU0MjAwMzA4RjgzMDAyMENFCi06MTA4ODYwMDAyNDA4RkZCRkFDNjIwMDA4QTA2NjAwMzA4RjhFMDAyMDk1Ci06MTA4ODcwMDAyNDAzRkZERjk1REYwMDMyMDNFNUM4MjQwMzM1QzAyNTVDCi06MTA4ODgwMDBBNUQ4MDAzMjkxRDEwMDMyMzIyRjAwM0YzNUYwMDA0MEEwCi06MTA4ODkwMDBBMUQwMDAzMjhGODkwMDIwQUQyMDAwMzQ4RDhCMDBDMDI0Ci06MTA4OEEwMDBBRDJCMDAzODkxMjQwMDNDM0MwQjdGRkYzMDhBMDA3RkM5Ci06MTA4OEIwMDBBMTJBMDAzQzhGODYwMDIwMzU2NEZGRkY5MEM3MDAzQzUyCi06MTA4OEMwMDAwMEU4MTAyNEEwQzIwMDNDOEY5OTAwMjA5MzI1MDAzQ0IyCi06MTA4OEQwMDAwMEEzRjgyNEEzM0YwMDNDOEU1ODAwMzQ4RjhDMDAyMDY2Ci06MTA4OEUwMDBBRDk4MDA0MDhFNEYwMDJDOEU1MTAwMzAwMUYxODAyMzU2Ci06MTA4OEYwMDBBRDkwMDA0NDkxOEUwMDQ4MzFDRDAwN0ZBMThEMDA0ODlECi06MTA4OTAwMDA4Rjg1MDAyMDhFNEEwMDMwOENBOTAwNDgwMTQ0NDAyNDA1Ci06MTA4OTEwMDAwMTM2MzgyNDAwRTgzMDI1QUNBNjAwNDg5MjQyMDAwQTBGCi06MTA4OTIwMDBBMEEyMDA0Qzk2NDMwMDA4OEY5RjAwMjBBN0UzMDA0RUIyCi06MTA4OTMwMDA4RTUwMDAzMDhFNDQwMDMwMEUwMDAyRjA4RkM1MDA2MDczCi06MTA4OTQwMDA5MkYxMDA3QzAwMDJDMTQwMDAwMkM5MDAwMzE5NzgyMUE1Ci06MTA4OTUwMDAzMjJFMDAwMjAwNDAyODIxMTFDMDAwMDMwMjBGODAyMUE2Ci06MTA4OTYwMDAwMDAyMjA4MDAyMDQ4MDIxOTI2RDAwN0MzMUFDMDAwNDYyCi06MTA4OTcwMDAxMTgwMDAwMjAwMDU3MDgwMDIwRTgwMjE4RTQ0MDAzMEJDCi06MTA4OTgwMDA4Rjg3MDAyMDI0MDU4MDAwMzA4QjAwMDMwMDBCNTAyM0NDCi06MTA4OTkwMDAzMTQ5MDAwMzAyMDk0MDIxQUNFODAwMzQ5NjY0MDA3QUIyCi06MTA4OUEwMDA5NjYyMDA3QTk2NzAwMDdBMzA0NjdGRkYyNEMzMDAwMUY5Ci06MTA4OUIwMDAzMDdGN0ZGRjAyMDVDODI0MDMzRkMwMjVBNjc4MDA3QUQ4Ci06MTA4OUMwMDA5NjcxMDA3QTNDMTIwODAwOEU1MjAwNjAzMjJGN0ZGRkIxCi06MTA4OUQwMDAxMUYyMDAyODAwMDAwMDAwOEY4NDAwODgwRTAwMEU2OTRDCi06MTA4OUUwMDAwMkEwMjgyMThGODQwMDg4MEUwMDBFNzkwMjgwMjgyMUExCi06MTA4OUYwMDAwRTAwMEVBRTAwMDAwMDAwOTZGMzAwNzg5NkY0MDA3QUE4Ci06MTA4QTAwMDAxMjkzMDAwRjAwMDAyODIxM0MwOTgwMDgzNTI0MDEwMDQyCi06MTA4QTEwMDA5M0M4MDAwODkwODcwMEM1MzExNDAwN0YzMEU0MDBGRjQwCi06MTA4QTIwMDAwMjg0MzAyQjE0QzBGRjNFMjY4QTAwMDE5MzhEMDA5MEYzCi06MTA4QTMwMDAyNjhCMDAwMTAwOEQ2MDIxMTU4QkZGM0M4Rjg0MDA4ODAwCi06MTA4QTQwMDA4RkJGMDAzNDhGQkUwMDMwOEZCNzAwMkM4RkI2MDAyODQ4Ci06MTA4QTUwMDA4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODk0Ci06MTA4QTYwMDA4RkIxMDAxNDhGQjAwMDEwMDBBMDEwMjEwM0UwMDAwOEE3Ci06MTA4QTcwMDAyN0JEMDAzODk2N0YwMDdBMDNFNUM4MjRBNjc5MDA3QURFCi06MTA4QTgwMDA5Mjc4MDA3QTkyNkUwMDdBMzMxMTAwRkYwMDExNzlDMjU5Ci06MTA4QTkwMDAwMDBGOTAyNzAwMTI2OUMwMzFDQzAwN0YwMThEMjgyNTdFCi06MTA4QUEwMDBBMjY1MDA3QTBBMDAwRjg3OEY4NDAwODgzQzAzODAwMDRCCi06MTA4QUIwMDAzMDg0RkZGRjMwQTVGRkZGQUM2NDAwMThBQzY1MDAxQ0RDCi06MTA4QUMwMDAwM0UwMDAwODhDNjIwMDE0MjdCREZGQTgzQzA2ODAwODY0Ci06MTA4QUQwMDBBRkJGMDA1NEFGQkUwMDUwQUZCNzAwNENBRkI2MDA0OEI4Ci06MTA4QUUwMDBBRkI1MDA0NEFGQjQwMDQwQUZCMzAwM0NBRkIyMDAzODA0Ci06MTA4QUYwMDBBRkIxMDAzNEFGQjAwMDMwMzRDODAxMDA5MTA1MDBDNUZCCi06MTA4QjAwMDA5MEM3MDAwODMwODRGRkZGMzBBNTAwRkYzMEUyMDA3RkVGCi06MTA4QjEwMDAwMDQ1MTgyQUFGQTQwMDEwQTdBMDAwMTgxMDYwMDA5QzAwCi06MTA4QjIwMDBBRkEwMDAxNDkwQ0EwMDA4MzE0OTAwN0YwMEE5MzAyMzhCCi06MTA4QjMwMDAyNEQ0RkZGRjAwMTQ4ODJCOEZCMzAwMTAwMDEzOTAyQjU4Ci06MTA4QjQwMDAwMjMyODAyNDUyMDAwMDg1OEZCNDAwMTQzQzAzODAwODU4Ci06MTA4QjUwMDA5NDc5MDA1Mjk0N0UwMDUwOEZCNjAwMTAwMzNFQzAyM0RCCi06MTA4QjYwMDAwMDE4QkMwMDAwMTcxNDAzMDAxNkZDMDAwMkMyQTgyQTVCCi06MTA4QjcwMDAxNkEwMDAwMjAwMUYyQzAzMDA0MDI4MjEwMDE0M0MwMDE2Ci06MTA4QjgwMDAwMDA3MjQwMzAwQTQxMDJBNTQ0MDAwMDEwMEEwMjAyMTYzCi06MTA4QjkwMDAyODg1MDAwOTE0QTAwMDAyMDA4MEIwMjEyNDE2MDAwOEQ2Ci06MTA4QkEwMDAzQzBDODAwODhEODYwMDQ4MDAxNjU5ODA4RDg4MDA0QzRBCi06MTA4QkIwMDAzQzAzODAwMDMxNjlGRkZGM0MwQTAwMTAwMTJBMjAyNTk4Ci06MTA4QkMwMDAzNDcwMDQwMEFDNjYwMDM4QUY5MDAwOENBQzY4MDAzQzk4Ci06MTA4QkQwMDBBQzY0MDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTA4QkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTA4QkYwMDAwMDAwMDAwMDhDNkUwMDAwMzFDRDAwMjAxMUEwRkZGREIwCi06MTA4QzAwMDAwMDE2OTAyQTAyNTE3ODI0MTFFMDAwMzYwMDAwQjgyMUE1Ci06MTA4QzEwMDAzQzE1ODAwMDNDMTE4MDA4OTIyMjAwMDg4RUE0MDEwMEJGCi06MTA4QzIwMDAwMDAwODgyMTMwNUUwMDdGMEUwMDBFMzQwM0MwMjgyMTMyCi06MTA4QzMwMDA4RTFGMDAxMDhFQTQwMTAwMzNGOTNGRkYwMzIwMjgyMTZFCi06MTA4QzQwMDAwRTAwMEU0Q0FGQjkwMDFDOTIxODAwMDAzMzAyMDAzRjFBCi06MTA4QzUwMDAyQzUzMDAwODUyNjAwMDBEMDAwMDgwMjEyNDA1MDAwMTAzCi06MTA4QzYwMDAwMDQ1MTgwNDMwNjcwMDVEMTRFMDAwQjE4RjkyMDA4QzVECi06MTA4QzcwMDAzMDY0MDAwMjE0ODAwMTREOEY4NjAwOEMzMDY4MDA4MEMzCi06MTA4QzgwMDA1NTAwMDA0QTk2MTgwMDEyMDAwMDgwMjE4RUE0MDEwMEIxCi06MTA4QzkwMDAwRTAwMEU2OThGQTUwMDFDOEVBNDAxMDAwRTAwMEU3OTM3Ci06MTA4Q0EwMDAwM0MwMjgyMTEyMDAwMDRGM0MwNzgwMDgyNkU0MDAwMTgxCi06MTA4Q0IwMDA4RjhDMDA4QzAwMDRCQzAwMDI5MUEwMjMwMDE3QkMwMzIxCi06MTA4Q0MwMDAwMkY2MzAyQTAwMTQ4ODJCMjU5RjAwNDAyNDEyMDAwMTUwCi06MTA4Q0QwMDAwMEQxRjAyNDAzRTA4MDIxQUY5RjAwOEMxN0MwRkZDREFFCi06MTA4Q0UwMDBBRkIyMDAxNDNDMDc4MDA4OTRFODAwNTA4RkIzMDAxMDI2Ci06MTA4Q0YwMDAzQzA1ODAwMDAyRTgxMDIxM0MwRDAwMjBBNEUyMDA1MDU5Ci06MTA4RDAwMDBBQ0FEMDAzMDk0RjUwMDUwOTRGNjAwNTIwMjc3NTAyMzM5Ci06MTA4RDEwMDAzMTQ5RkZGRjEyRDUwMDQxQUZBOTAwMTA4Q0Y2MDA0QzdECi06MTA4RDIwMDAwMDE3NDk4MDhDRjcwMDQ4MDJDOUY4MjEwMDAwMjAyMTczCi06MTA4RDMwMDAwM0U5MzAyQjAyRTQ2MDIxMDE4NjgwMjFBQ0ZGMDA0QzY2Ci06MTA4RDQwMDBBQ0YwMDA0ODhGQjMwMDEwMDAxMzkwMkIwMjMyODAyNDQ3Ci06MTA4RDUwMDAxNjAwRkY3RjNDMDM4MDA4OEZCNDAwMTQ4RkJGMDA1NEJGCi06MTA4RDYwMDA4RkJFMDA1MDNBODIwMDAxOEZCNzAwNEM4RkI2MDA0ODhBCi06MTA4RDcwMDA4RkI1MDA0NDhGQjQwMDQwOEZCMzAwM0M4RkIyMDAzOEYxCi06MTA4RDgwMDA4RkIxMDAzNDhGQjAwMDMwMDNFMDAwMDgyN0JEMDA1OEQ5Ci06MTA4RDkwMDA5MENGMDAwODkzOEMwMDkwMzFFRTAwN0YwMEFFNjgyM0U2Ci06MTA4REEwMDAwMThENTgyMTBBMDAwRkREMjU3NEZGRkY4Rjg0MDA4ODk0Ci06MTA4REIwMDAyNDEwMDAwMUE3QjgwMDE4MEUwMDBFNUQ5N0E1MDAxODNBCi06MTA4REMwMDA4RUE0MDEwMDBFMDAwRTY5OEZBNTAwMUM4RUE0MDEwMDY4Ci06MTA4REQwMDAwRTAwMEU3OTAzQzAyODIxMTYwMEZGQjUyNkU0MDAwMTFECi06MTA4REUwMDAzQzA3ODAwODk0RTgwMDUwOEZCMzAwMTAzQzA1ODAwMEQ5Ci06MTA4REYwMDAwMkU4MTAyMTNDMEQwMDIwQTRFMjAwNTBBQ0FEMDAzMDkwCi06MTA4RTAwMDA5NEY1MDA1MDk0RjYwMDUyMDI3NzUwMjMzMTQ5RkZGRjQ5Ci06MTA4RTEwMDAwMDE0ODgyQjE2RDVGRkMxQUZBOTAwMTA5NEZFMDA1NDkyCi06MTA4RTIwMDA4Q0YwMDA0NDMzRDhGRkZFMDAxODc4QzAwMjBGNzAyMTg4Ci06MTA4RTMwMDBBQ0FFMDAzQzhDRjkwMDQ0OENBMzAwM0MwMzIzNTgyM0M3Ci06MTA4RTQwMDAxOTYwMDJFQTAwMDAwMDAwOENGMjAwNDAyNjQyMDAwMTk2Ci06MTA4RTUwMDBBQ0EyMDAzODNDMDUwMDUwMzRBNzAwMTAzQzAzODAwMDUxCi06MTA4RTYwMDBBQzY3MDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTA4RTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTA4RTgwMDAwMDAwMDAwMDhDN0YwMDAwMzNFNjAwMjAxMEMwRkZGREQyCi06MTA4RTkwMDAzQzEwODAwODk2MEQwMDU0M0MxNzgwMDAzQzA2ODAwODZBCi06MTA4RUEwMDAzMUIzMDAwMTAwMTM1MEMwMDE1N0IwMjE4RUM5MDQwMDM2Ci06MTA4RUIwMDAzQzA3MDgwMDhDRTcwMDQ0M0MwNDAwMjBBQ0M5MDA0ODkzCi06MTA4RUMwMDA4RUQ1MDQwNDI0MEMwMDAxQUNENTAwNEMxMEVDMDJEMDZCCi06MTA4RUQwMDBBRUU0MDAzMDk2MTgwMDUyM0MwNTA4MDA4Q0E1MDA0MDE2Ci06MTA4RUUwMDAwMEI4NzgyMUE2MEYwMDUyOTYwRTAwNTQyNUMzMDAwMTQ5Ci06MTA4RUYwMDBBNjAzMDA1NDk2MTkwMDU0MzMyNEZGRkY1NDg3RkYwRjM0Ci06MTA4RjAwMDA4RkIzMDAxMDMwQTVGRkZGMEUwMDBGQkJBNjAwMDA1NDZBCi06MTA4RjEwMDAzQzA1MDgwMDhDQTUwMDI0OTYxMjAwNTIwMDQ1MzgyMzE5Ci06MTA4RjIwMDAwMjQ3RjAyM0E2MUUwMDUyMEEwMDBGREY4RkIzMDAxMDg1Ci06MTA4RjMwMDA4RjkzMDAxQzNDMDcwMDgwOEU0NDAwMjgzQzFGRkZFRkVECi06MTA4RjQwMDAzN0Y5RkZGRkFFNjQwMDAwOEU0MjAwMjRBMjYwMDAwQUUxCi06MTA4RjUwMDAzQzBGRkY5RkFFNjIwMDA0OTI0NTAwMkMzNUVFRkZGRkYwCi06MTA4RjYwMDAzQzBDMDA0MEEyNjUwMDBDOEU3MTAwMENBMjY1MDAwQjQ5Ci06MTA4RjcwMDAzQzA2MDBGRjAyMjdDMDI1MDMxOTY4MjQwMUFFNTgyNENGCi06MTA4RjgwMDAwMTZDNTAyNUFFNkEwMDBDOEU0OTAwMDRBRTYwMDAxOERBCi06MTA4RjkwMDAzNEQwRkZGRkFFNjkwMDE0OEU0ODAwMkM4RjgyMDA4ODA5Ci06MTA4RkEwMDBBNjYwMDAwODAxMTAyMDI0QUU2NDAwMTA4RTUxMDAwODU1Ci06MTA4RkIwMDA5NjQ3MDAxMkFFNzEwMDIwOEU1ODAwMEMzMEUzM0ZGRjQwCi06MTA4RkMwMDAwMDAzMjk4MEFFNzgwMDI0OEU0QzAwMTQwMEEyRjgyMTAyCi06MTA4RkQwMDAzMEY5MDAwMUFFNkMwMDI4OEU0QjAwMTgwMDFGNzFDMkUyCi06MTA4RkUwMDAwMDE5N0I4MEFFNkIwMDJDOEU0OTAwMUMwMUNGNjgyMURDCi06MTA4RkYwMDBBNjZEMDAxQ0FFNjkwMDMwOTY0QTAwMDI4RTQ2MDAyMDI1Ci06MTA5MDAwMDBBNjZBMDAxRUFFNjYwMDM0OTI0MzAwMzMzMDcwMDAwNDNFCi06MTA5MDEwMDA1NjAwMDAwNjkyNEIwMDAwM0MwNjgwMDgzNEQwMDEwMDQ4Ci06MTA5MDIwMDA4RTA4MDBDMEFFNjgwMDMwOTI0QjAwMDA4RjhBMDAyMDhFCi06MTA5MDMwMDBBMTRCMDAzMDkyNDkwMDMzMzEyMzAwMDI1MDYwMDAwN0Y5Ci06MTA5MDQwMDA5MjQ0MDAwMThGOEMwMDIwMjQwRkZGODA5MThFMDAzMDBECi06MTA5MDUwMDAwMUNGNjgyNUExOEQwMDMwOTI0NDAwMDE4RjgyMDAyMDRECi06MTA5MDYwMDAyNDE4RkZCRjI0MEFGRkRGQTA0NDAwMzE4Rjk5MDAyMDlECi06MTA5MDcwMDAzQzA4ODAwODM1MDQwMDgwOTMzMTAwM0MzMjNGMDA3RjdCCi06MTA5MDgwMDBBMzNGMDAzQzhGOEQwMDIwOTFBRjAwM0MwMUY4NzAyNDdECi06MTA5MDkwMDBBMUFFMDAzQzhGODcwMDIwOEU2QzAwMTQ5MEUzMDAzQzUyCi06MTA5MEEwMDAyRDhCMDAwMTAwMEI0OTQwMDA2QTMwMjQwMEM5ODAyNTQ3Ci06MTA5MEIwMDBBMEYwMDAzQzk2NDUwMDEyOEY4NzAwMjBBNEU1MDAzMjA2Ci06MTA5MEMwMDA4RTQ1MDAwNDkwOUYwMDdDMzBBMjAwMDMwMDAyODgyMzlDCi06MTA5MEQwMDAzMjM5MDAwMzAwQjkxMDIxMzNGODAwMDIxNzAwMDAwMkYyCi06MTA5MEUwMDAyNDQ0MDAzNDI0NDQwMDMwM0MwMzgwMDgzNDY2MDA4MDZCCi06MTA5MEYwMDA5MEM5MDA3QzAwQTk4MDI0MzIwODAwMDQxNTAwMDAwMkY5Ci06MTA5MTAwMDAyNDgzMDAwNDAwODAxODIxOEY4NDAwMjAyNDA4MDAwMjlBCi06MTA5MTEwMDBBQ0UzMDAzNEEwODgwMDAwOTI0MjAwM0Y4RjlGMDAyMDAzCi06MTA5MTIwMDAzQzE4ODAwODM3MEYwMDgwQTNFMjAwMDE4RjkxMDAyMEQ3Ci06MTA5MTMwMDA5MjU5MDAzRjhFNDQwMDA0QTYzOTAwMDI5NUVFMDA1QzZGCi06MTA5MTQwMDAwRTAwMEU4RjMxRDBGRkZGMDAwMjZCODAwMjBENTgyNUZDCi06MTA5MTUwMDAzQzBDNDIwMDAxNkMyODI1QUUyNTAwMDQ4RTRBMDAzOEU0Ci06MTA5MTYwMDA4Rjg1MDAyMEFDQUEwMDE4OEU0NzAwMzRBQ0E3MDAxQ0U1Ci06MTA5MTcwMDBBQ0EwMDAwQ0FDQTAwMDEwQTRBMDAwMTRBNEEwMDAxNjg5Ci06MTA5MTgwMDBBNEEwMDAyMEE0QTAwMDIyQUNBMDAwMjQ4RTYyMDAxNEExCi06MTA5MTkwMDA1MDQwMDAwMTI0MDIwMDAxQUNBMjAwMDgwRTAwMEVBRUY3Ci06MTA5MUEwMDAyNDExMDAwMTBBMDAxMDMzMjQxMDAwMDE5MEQzMDAwMUEzCi06MTA5MUIwMDAzMjcyMDAyMDEyNDAwMThBMjQxMDAwMDEzQzBBODAwODBCCi06MTA5MUMwMDAzNTQ3MDA4MDkwRTMwMDdDOEY5MzAwMUNBRkEwMDAyNDAzCi06MTA5MUQwMDAzMDY5MDAwMTExMjAwMDExQUZCMDAwMjAzQzA1ODAwODZCCi06MTA5MUUwMDA4Q0NCMDAxNDhDQUMwMDYwMDE2Qzg4MkIxNjIwMDAwMzIzCi06MTA5MUYwMDAwMTYwMjgyMTNDMTA4MDA4OEUwNTAwNjAzQzBGODAwODJCCi06MTA5MjAwMDAzNUUzMDA4MDhDNkUwMDcwMDBBRTY4MkIxNUEwMDAwMjY0Ci06MTA5MjEwMDAwMEEwMjAyMThDNjQwMDcwQUZBNDAwMjQ4RjgyRkY0QzNBCi06MTA5MjIwMDA4Q0M0MDAxNDhDNTkwMDcwMDA5OUMwMkI1MzAwMDAwMUFECi06MTA5MjMwMDA4QzQ0MDA3MDhGQTIwMDI0MDA4MkY4MjMxM0UwMDAwMzA2Ci06MTA5MjQwMDBBRkJGMDAyODI0MDQwMDAyQUZBNDAwMjA4RkIyMDAyMDhBCi06MTA5MjUwMDAwMjkyNDAyQjE1MDAwMTVCMDAwMDE4MjE4Q0M1MDAzOERDCi06MTA5MjYwMDA4RTZCMDAwQzNDMEMwMDgwQUU2NTAwMDA4Q0M5MDAzNDk1Ci06MTA5MjcwMDAzQzExRkY5RjAxNkM1MDI1QUU2OTAwMDQ5MEM4MDAzRjZGCi06MTA5MjgwMDAzNjIzRkZGRjAxNDMxMDI0M0MxMjAwMjAzQzA0RkZFRjczCi06MTA5MjkwMDBBMjY4MDAwQjAwNTIzODI1MzQ5RkZGRkYwMEZGQzAyNDU2Ci06MTA5MkEwMDAzQzE5MDAwODhGODcwMDhDMDMxOTc4MjVBRTZGMDAwQ0RECi06MTA5MkIwMDA4Q0VEMDAxNEFFNjAwMDE4OEZCMTAwMjRBRTZEMDAxNDY4Ci06MTA5MkMwMDA4Q0YwMDAxODhGQUUwMDI4QUU3MDAwMUM4Q0U1MDAwOEYyCi06MTA5MkQwMDAwMjJFNjAyMUFFNjUwMDI0OENFQjAwMENBNjYwMDAzOEU1Ci06MTA5MkUwMDBBNjYwMDAzQUFFNkMwMDJDQUU2MDAwMjhBRTZCMDAyMDg5Ci06MTA5MkYwMDA4Q0VBMDAxNDhGQTMwMDI4MDE1MTQ4MjMwMTIzMzAyMzU2Ci06MTA5MzAwMDAxMEMwMDAxMUFFNjYwMDEwOTBFOTAwM0Q4RTYyMDAwNEFFCi06MTA5MzEwMDA4RTdGMDAwMDAwMDk5MTAwMDA1Mjc4MjEwMDAwMjAyMTdBCi06MTA5MzIwMDAwMUYyQzgyQjAzRTRDMDIxMDMxOTcwMjFBRTZGMDAwNEMxCi06MTA5MzMwMDBBRTZFMDAwMDkwRUQwMDNEQTI2RDAwMEE4RjkwMDA4QzkzCi06MTA5MzQwMDA5NjA2MDAwNkE2NjYwMDA4OEY5ODAwMjAyNDE5MDAwMkUxCi06MTA5MzUwMDAzQzBGODAwODhGQTQwMDI0MzVFRTAwODBBMzE5MDAwMDg0Ci06MTA5MzYwMDA5NUNEMDA1QzhGOTIwMDIwMEUwMDBFOEYzMUIwRkZGRjc0Ci06MTA5MzcwMDAwMDAyMkI4MDAyMDU2MDI1M0MwNjQyMDA4Rjg1MDA4QzkwCi06MTA5MzgwMDAwMTg2NTgyNUFFNEIwMDA0OEY4NDAwMjA4Q0IxMDAzODM0Ci06MTA5MzkwMDBBQzkxMDAxODhDQTMwMDM0QUM4MzAwMUNBQzgwMDAwQzkyCi06MTA5M0EwMDBBQzgwMDAxMEE0ODAwMDE0QTQ4MDAwMTZBNDgwMDAyMENCCi06MTA5M0IwMDBBNDgwMDAyMkFDODAwMDI0OTBBQTAwM0Y4RkE3MDAyNDQ0Ci06MTA5M0MwMDBBNDhBMDAwMjEwRTAwMDBDMjQwOTAwMDE4RkJGMDAyOENECi06MTA5M0QwMDA1M0UwMDE4ODkwQTIwMDNEOTBBMjAwM0UyNDQ4MDAwMTg1Ci06MTA5M0UwMDBBMDg4MDAwMThGODUwMDIwOEZBNDAwMjRBQ0E0MDAwODcxCi06MTA5M0YwMDAwQTAwMTIxMzNDMTE4MDA4QTA4OTAwMDE4Rjg1MDAyMDBCCi06MTA5NDAwMDAyNDAyMDAwMUFDQTIwMDA4M0MxMTgwMDgzNjIzMDA4MDMxCi06MTA5NDEwMDA5MDZBMDA3QzMxNDcwMDAyMTRFMDAwMDIyNDA2MDAzNDA4Ci06MTA5NDIwMDAyNDA2MDAzMDhGOEQwMDhDM0MwRjgwMDgzNUVFMDA4MEM0Ci06MTA5NDMwMDA5MUFDMDAwMDkxQzgwMDdDOEZCMDAwMjRBMEFDMDAzMDNCCi06MTA5NDQwMDA4RjkxMDA4QzhGODIwMDIwOEZBQTAwMjQ5MjI3MDAwMTI4Ci06MTA5NDUwMDAzMjEyMDAwMzI0MEIwMDA0QTA0NzAwMzEwMTcyMTgyM0NDCi06MTA5NDYwMDA4Rjg0MDA4QzhGOEIwMDIwMjQxRkMwMDA5NDk4MDAxMkUyCi06MTA5NDcwMDA5NTc5MDAzMjMwNjkwMDAzMzMwRjNGRkYwMzNGNzAyNEJBCi06MTA5NDgwMDAwMUNGNjgyNUE1NkQwMDMyOTE2NTAwMzIwMENBMzAyMUY4Ci06MTA5NDkwMDAwMEM5MzAyMTMwQjAwMDNGMzYwQzAwNDBBMTZDMDAzMkQyCi06MTA5NEEwMDA4RkIyMDAyNDMxMDcwMDA0MTI0MDAwMDI4Rjg1MDAyMDkzCi06MTA5NEIwMDAwMEM3MzAyMTNDMDQ4MDA4QUNBNjAwMzQzNDg4MDEwMDg5Ci06MTA5NEMwMDA4RDE5MDBDMDhGQkYwMDI0MjQwREZGQkZBQ0I5MDAzODM4Ci06MTA5NEQwMDA5MEFGMDAzQzJGRjgwMDAxMjQxMkZGREYzMUVFMDA3RjM3Ci06MTA5NEUwMDBBMEFFMDAzQzhGOEIwMDIwMDAxODg5NDA5MTcwMDAzQzlBCi06MTA5NEYwMDAwMjBENjAyNEExNkMwMDNDOEY4NzAwMjA5MEUzMDAzQ0FCCi06MTA5NTAwMDAwMDcyNTAyNDAxNTExMDI1QTBFMjAwM0M4Rjg4MDA4QzhECi06MTA5NTEwMDA4Rjk5MDAyMDhEMDkwMDIwQUYyOTAwNDA4RDA2MDAyNDdFCi06MTA5NTIwMDBBRjI2MDA0NDhEMDQwMDI4QUYyNDAwNDg4RDFGMDAyQzc2Ci06MTA5NTMwMDBBRjNGMDA0QzBFMDAwRUFFMDAwMDAwMDA4RkI4MDAyMEMwCi06MTA5NTQwMDAyNDA1MDAwMjU3MDUwMDlGOEZBMzAwMjAzQzFGODAwMEM4Ci06MTA5NTUwMDAzQzEyODAwODhGRTQwMTAwOTI1ODAwMDg4RjkyRkY0QzYzCi06MTA5NTYwMDAwRTAwMEUzNDMzMDUwMDdGOEY4RTAwMjA4RkFGMDAyMDU5Ci06MTA5NTcwMDA4RkE0MDAyOEExQ0YwMDAwOTY1OTAwNUM4RjkxMDAyMDk1Ci06MTA5NTgwMDAwRTAwMEU4RjMzMzBGRkZGMDAwMjVCODAwMjBCNjgyNTU4Ci06MTA5NTkwMDAzQzA4NDIwMDhGOEIwMDhDMDFBODMwMjVBRTI2MDAwNEM5Ci06MTA5NUEwMDA4RDcwMDAzODhGODYwMDIwMDAwMDI4MjEwMDA1MTEwMEYyCi06MTA5NUIwMDBBQ0QwMDAxODhENkMwMDM0M0MwNDdGRkYzNDg4RkZGRjcyCi06MTA5NUMwMDBBQ0NDMDAxQzkxNzEwMDNFOENDQTAwMUM4Q0RGMDAxOEQyCi06MTA5NUQwMDAwMDExMzkwMDAwMTExRjAyMDE0NzcwMjEwMDQzNDgyNTg2Ci06MTA5NUUwMDAwMUM3QzAyQjAzRTk3ODIxMDFGOEM4MjFBQ0NFMDAxQ0NCCi06MTA5NUYwMDBBQ0Q5MDAxOEFDQzAwMDBDQUNDMDAwMTA5MTZEMDAzRTlFCi06MTA5NjAwMDA4RkFBMDAyODI0MDcwMDA1QTRDRDAwMTQ5NTcwMDAwNDNCCi06MTA5NjEwMDAyNDE4QzAwMDAxNDhDODI0QTREMDAwMTY5MTZDMDAzRTU0Ci06MTA5NjIwMDAwMTQwMjAyMUE0Q0MwMDIwOTU2NTAwMDRBNEM1MDAyMjlGCi06MTA5NjMwMDBBQ0MwMDAyNDkxNjMwMDNGQTRDMzAwMDI5MTcxMDAzREJGCi06MTA5NjQwMDAyNjIyMDAwMUEwQzIwMDAxOEY4OTAwMjAzQzAyODAwODcwCi06MTA5NjUwMDAzNDQ2MDEwMEFEMkEwMDA4QTEyNzAwMzA4RjkxMDAyMDc4Ci06MTA5NjYwMDA4RjlGMDA4QzI0MDJGRjgwOTYyRjAwMzI5N0VFMDAxMjBECi06MTA5NjcwMDAwMzBGODAyNDMxQ0QzRkZGMDIwRDYwMjVBNjJDMDAzMjYwCi06MTA5NjgwMDA5MjI1MDAzMjI0MThGRkJGMjQxMEZGREYzMEFCMDAzRkNCCi06MTA5NjkwMDAzNTYzMDA0MEEyMjMwMDMyOEY5RjAwMjAyNDAzRkZGRjg4Ci06MTA5NkEwMDBBRkUwMDAzNDhDQ0EwMEMwQUZFQTAwMzg5M0U3MDAzQzVBCi06MTA5NkIwMDAzMEU5MDA3RkEzRTkwMDNDOEY4RDAwMjAzQzA5ODAwMDQ5Ci06MTA5NkMwMDA5MUFGMDAzQzAxRjg3MDI0QTFBRTAwM0M4RjhCMDAyMENDCi06MTA5NkQwMDA5MTZDMDAzQzAxOTAyODI0QTE2NTAwM0M4Rjg3MDAyMEZDCi06MTA5NkUwMDBBQ0UzMDA0MDhGQjEwMDI0M0MwMzgwMDhBQ0YxMDA0NDlGCi06MTA5NkYwMDA5MEVBMDA0ODAxNDIzMDI1QTBFNjAwNDg4RjkwMDAyMDAzCi06MTA5NzAwMDA4RjhFMDA4QzhFMUYwMDQ4MDNFOUMwMjQwMzE5NzgyNTMyCi06MTA5NzEwMDBBRTBGMDA0ODkxQ0QwMDNFQTIwRDAwNEM4RjhDMDA4QzA2Ci06MTA5NzIwMDA4RjhCMDAyMDk1ODUwMDA0QTU2NTAwNEUwRTAwMDJGMDg5Ci06MTA5NzMwMDA4QzY1MDA2MDkyNEEwMDdDMDA0MDI4MjE4RkE2MDAyODlBCi06MTA5NzQwMDAwMDAyMTE0MDAwMDU4OTAwMDA1MTM4MjEzMTQ5MDAwMjEyCi06MTA5NzUwMDAxMTIwMDAwMzAwQzcxODIxMDAwNTIwODAwMDY0MTgyMTkzCi06MTA5NzYwMDAzQzAyODAwODM0NEEwMDgwOTE0NzAwN0MzMEU5MDAwNEM0Ci06MTA5NzcwMDAxMTIwMDAwMzhGQjkwMDI4MDAwNTYwODAwMDZDMTgyMUJCCi06MTA5NzgwMDAyNDBCMDAwNDhGOTEwMDIwMzMzMDAwMDMwMTcwNDAyMzJDCi06MTA5NzkwMDAzMTBEMDAwMzAwNkQzMDIxQUUyNjAwMzQzQzAzODAwOEZCCi06MTA5N0EwMDBBNjY1MDAzODNDMDU4MDAwOENBNDAxMDA5MDczMDAwODc5Ci06MTA5N0IwMDAwRTAwMEU3OTMyNjUwMDdGMEUwMDBFQUUwMDAwMDAwMDM0Ci06MTA5N0MwMDA4RkEzMDAyMDAwMDM3ODJCMDAwRjgwMjMwMjkwQTAyNDk5Ci06MTA5N0QwMDAwMDYwODAyMTAwNjA4ODIxMEEwMDEwMzMwMDEwODAyQjc3Ci06MTA5N0UwMDA4RjkxMDAxQzhDRDgwMDM4MjQxOTAwMDNBNjIwMDAwODkzCi06MTA5N0YwMDBBRTM4MDAwMDhDQ0YwMDM0QTIyMDAwMEE4RjhFMDA4QzdGCi06MTA5ODAwMDBBRTJGMDAwNDNDMDUwMDgwOTFDQjAwM0ZBMjM5MDAwQzM0Ci06MTA5ODEwMDA4RTI4MDAwQzNDMERGRjlGQTIyQjAwMEIwMTA1MTAyNThDCi06MTA5ODIwMDAzNUEzRkZGRjNDMTNGRkVGOEY4RTAwOEMwMDQzMzgyNERECi06MTA5ODMwMDAzNjZBRkZGRjAwRUE0ODI0QUUyOTAwMEM4REM0MDAxNEVDCi06MTA5ODQwMDA5NUQ4MDAxMjhGODYwMDg4QUUyNDAwMTA4RENDMDAxNEFECi06MTA5ODUwMDBBRTIwMDAxOEFFMjAwMDIwQUUyQzAwMTRBRTIwMDAyNDU0Ci06MTA5ODYwMDA4RERGMDAxODMzMEMzRkZGMDAwQzkxODBBRTNGMDAyOEM1Ci06MTA5ODcwMDA4RENGMDAwODAyNDZDODIxMzMwQjAwMDFBRTJGMDAzMDA3Ci06MTA5ODgwMDA4REMzMDAwQzhGOTMwMDIwMDAxOTQxQzIwMDBCMkI4MDY4Ci06MTA5ODkwMDAwMTA1NjgyMTI0MDIwMDAyM0MwQTgwMDhBNjJEMDAxQzU0Ci06MTA5OEEwMDBBNjIwMDAzNEFFMjMwMDJDMzU0NzAwODBBMjYyMDAwMEMxCi06MTA5OEIwMDA5NEU5MDA1QzhGOTkwMDIwM0MwNDQyMDAzMTNGRkZGRjk3Ci06MTA5OEMwMDAwM0U0MzAyNUFGMjYwMDA0OEY5ODAwOEMyNDBFMDAwMTlECi06MTA5OEQwMDAyNDAyQzAwMDhGMTIwMDM4MjQwNjAwMzRBRjMyMDAxODcyCi06MTA5OEUwMDA4RjBGMDAzNDNDMTI4MDA4MzY1ODAwODBBRjJGMDAxQ0M4Ci06MTA5OEYwMDBBRjIwMDAwQ0FGMjAwMDEwQTcyMDAwMTRBNzIwMDAxNkY2Ci06MTA5OTAwMDBBNzIwMDAyMEE3MjAwMDIyQUYyMDAwMjRBNzMwMDAwMkJCCi06MTA5OTEwMDBBMzJFMDAwMThGOEQwMDIwOEY4QjAwOENBREIwMDAwODJFCi06MTA5OTIwMDA5MTY4MDAwMEExQTgwMDMwOEY5MTAwOEM4RjgzMDAyMEU3Ci06MTA5OTMwMDA5MjI1MDAwMUEwNjUwMDMxOEY5RjAwMjA5N0YzMDAzMjJGCi06MTA5OTQwMDAwMjYyNTAyNDAxNEMzODI1QTdFNzAwMzI5M0U5MDAzMjI3Ci06MTA5OTUwMDAzMTI0MDAzRkEzRTQwMDMyOTMwRjAwN0MzMUVFMDAwMjdCCi06MTA5OTYwMDAxNUMwMDAwMjhGODQwMDIwMjQwNjAwMzAzQzBFODAwOEMxCi06MTA5OTcwMDBBQzg2MDAzNDM1RDEwMTAwOEUzOTAwQzAyNDAzRkZCRjBFCi06MTA5OTgwMDAwMjAwODgyMUFDOTkwMDM4OTA4QjAwM0MwMDEwODAyQjlECi06MTA5OTkwMDAzMTY1MDA3RkEwODUwMDNDOEY4RDAwMjA5MUE4MDAzQ0EwCi06MTA5OUEwMDAwMTAzMTAyNEExQTIwMDNDOEY4NzAwMjA5MEYzMDAzQzBCCi06MTA5OUIwMDAzNjZBMDAyMEEwRUEwMDNDOEY5RjAwOEM4RjkyMDAyMDI2Ci06MTA5OUMwMDA4RkU5MDAyMEFFNDkwMDQwOEZFNDAwMjRBRTQ0MDA0NEZCCi06MTA5OUQwMDA4RkVDMDAyOEFFNEMwMDQ4OEZFNjAwMkMwRTAwMEVBRTM3Ci06MTA5OUUwMDBBRTQ2MDA0QzBBMDAxMDMzMDAwMDAwMDAwQTAwMTBBNDJDCi06MTA5OUYwMDA4Q0UyMDA0MDI0NDgwMDAxQTA4ODAwMDE4Rjg1MDAyMEVGCi06MTA5QTAwMDA4RkE0MDAyNEFDQTQwMDA4MEEwMDEyMTMzQzExODAwOEEzCi06MTA5QTEwMDA5NENCMDA1MjNDMDgwODAwOEQwODAwMjQwMTBCMTAyMTUzCi06MTA5QTIwMDBBNEMyMDA1MjBBMDAwRkRGOEZCMzAwMTAyN0JERkZFMDcxCi06MTA5QTMwMDAzQzBEODAwOEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAxQ0UzCi06MTA5QTQwMDBBRkIxMDAxNDM1QjIwMDgwOEU0QzAwMTgzNUE4MDEwMDZCCi06MTA5QTUwMDA5NjRCMDAwNjk1QTcwMDUwOTEwOTAwRUMwMDBDNTYwMkE5Ci06MTA5QTYwMDAwMTY3MjgyMzMxNDMwMDdGMzEyNjAwRkYyNDAyMDAwM0QxCi06MTA5QTcwMDBBMzgzMDA5MEFGODQwMDg4MTBDMjAwMUIzMEIwRkZGRkFBCi06MTA5QTgwMDA5MTA2MDBFQzI0MTIwMDA1MzBDMjAwRkYxMDUyMDAzMzkyCi06MTA5QTkwMDAwMDAwMDAwMDE2MDAwMDA5OEZCRjAwMUM4RkIyMDAxOEU0Ci06MTA5QUEwMDA4RkIxMDAxNDhGQjAwMDEwMjQwRDBDMDAzQzBDODAwMDBFCi06MTA5QUIwMDAyN0JEMDAyMDAzRTAwMDA4QUQ4RDAwMjQwRTAwMEZDMjdBCi06MTA5QUMwMDAwMjAwMjAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDNDCi06MTA5QUQwMDA4RkIwMDAxMDI0MEQwQzAwM0MwQzgwMDAyN0JEMDAyMDJFCi06MTA5QUUwMDAwM0UwMDAwOEFEOEQwMDI0OTY1ODAwNzg5NjUxMDA3QTY2Ci06MTA5QUYwMDA5MjRFMDA3RDAyMzg3ODI2MzFFOEZGRkYzMUM0MDBDMDY1Ci06MTA5QjAwMDAxNDgwMDAwOTJEMTEwMDAxMTYwMDAwMzcwMDAwMDAwMDJDCi06MTA5QjEwMDA1NjIwRkZFMjhGQkYwMDFDMEUwMDBFQzMwMDAwMDAwMEE1Ci06MTA5QjIwMDAwQTAwMTNCNzhGQkYwMDFDMTYyMEZGREEwMDAwMDAwMEU4Ci06MTA5QjMwMDAwRTAwMEVDMzAwMDAwMDAwMTQ0MEZGRDg4RkJGMDAxQ0IxCi06MTA5QjQwMDAxNjAwMDAyMjAwMDAwMDAwOTI1RjAwN0QzM0UyMDAzRjFCCi06MTA5QjUwMDBBMjQyMDA3RDBBMDAxM0I3OEZCRjAwMUM5NTA5MDBEQUVFCi06MTA5QjYwMDA4Rjg2MDA2NDAwODAyODIxMjQwNDAwMDUwRTAwMDY2NjBDCi06MTA5QjcwMDAzMTMwRkZGRjk3ODMwMDc2M0MwNDgwMDAyNDY1RkZGRkFGCi06MTA5QjgwMDBBNzg1MDA3NjhDOEEwMUI4MDU0MEZGRkUwMDAwMDAwMDIyCi06MTA5QjkwMDBBQzgwMDE4MDhGQkYwMDFDQUM5MDAxODQ4RkIyMDAxODk0Ci06MTA5QkEwMDA4RkIxMDAxNDhGQjAwMDEwM0MwNzYwMTMzQzBCMTAwMDA1Ci06MTA5QkIwMDAyNDBEMEMwMDNDMEM4MDAwMjdCRDAwMjBBQzg3MDE4OEUwCi06MTA5QkMwMDBBQzhCMDFCODAzRTAwMDA4QUQ4RDAwMjQwRTAwMEZDMjdECi06MTA5QkQwMDAwMjAwMjAyMTUwNDBGRkIxOEZCRjAwMUM5MjVGMDA3RDJBCi06MTA5QkUwMDAwQTAwMTNFNDMzRTIwMDNGMEUwMDBGQzIwMjAwMjAyMUZFCi06MTA5QkYwMDAxNDQwRkZBQThGQkYwMDFDMTIyMDAwMDcwMDAwMDAwMEM1Ci06MTA5QzAwMDA5MjU5MDA3RDMzMzAwMDNGMzYwMjAwNDBBMjQyMDA3RDcxCi06MTA5QzEwMDAwQTAwMTNCNzhGQkYwMDFDMEUwMDBFQzMwMDAwMDAwMDI3Ci06MTA5QzIwMDA1MDQwRkY5RThGQkYwMDFDOTI1OTAwN0QzMzMwMDAzRjkzCi06MTA5QzMwMDAwQTAwMTQxMzM2MDIwMDQwMDAwNDExQzAwM0UwMDAwOEJCCi06MTA5QzQwMDAyNDQyMDI0MDNDMDUwMDA2MDA4NTEwMjUzQzAzODAwMEFDCi06MTA5QzUwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTA5QzYwMDAzQzA1ODAwMDhDQTcwMDAwMzBFNjAwMTAxMEMwRkZGRDBFCi06MTA5QzcwMDAwMDAwMDAwMDhDQUIwMDNDOENBQTAwM0MwMTY0NDgyMTMxCi06MTA5QzgwMDAwMTJBNDAyQjExMDAwMDA0M0MwNjgwMDA4Q0FEMDAzOEY2Ci06MTA5QzkwMDAyNUFDMDAwMUFDQUMwMDM4OENDRjAwM0MwMUU0NzAyMTU1Ci06MTA5Q0EwMDAwM0UwMDAwOEFDQ0UwMDNDMjdCREZGRDBBRkIyMDAxOEU3Ci06MTA5Q0IwMDBBRkIwMDAxMEFGQkYwMDI4QUZCNTAwMjRBRkI0MDAyMDk0Ci06MTA5Q0MwMDBBRkIzMDAxQ0FGQjEwMDE0MDBBMDkwMjExNEEwMDAxMjhCCi06MTA5Q0QwMDAwMDgwODAyMThGODIwMDI0MDAwMjE4ODAxNDYwMDAzN0U5Ci06MTA5Q0UwMDAyNDA0MDAxMDBFMDAxNDIxMDAwMDAwMDA4RkJGMDAyODgzCi06MTA5Q0YwMDA4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxOEUyCi06MTA5RDAwMDA4RkIxMDAxNDhGQjAwMDEwMDAwMDEwMjEyN0JEMDAzMDZCCi06MTA5RDEwMDAwM0UwMDAwOEFGODAwMDI0MTBBMDAwMUUwMDAwODgyMThFCi06MTA5RDIwMDAzQzEzODAwMDI0MTQwMDIwMEEwMDE0NjAzQzE1MDAwNTM4Ci06MTA5RDMwMDAyNjMxMDAwNDAyMzI1MDJCMTE0MDAwMTcwMjQwMTAyMTNFCi06MTA5RDQwMDA4Rjg4MDAyNDhFMDcwMDAwMjQwNDAwODAwMDA4NDg4MENCCi06MTA5RDUwMDAwMTMzMTgyMTI1MDYwMDAxQUM2NzA0MDAyNjEwMDAwNDE5Ci06MTA5RDYwMDAxNEQ0RkZGM0FGODYwMDI0MEUwMDE0MjEwMDAwMDAwMDdECi06MTA5RDcwMDBBRTc1MDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTA5RDgwMDAwMDAwMDAwMDI2MzEwMDA0MDIzMjUwMkIxNTQwRkZFQzg5Ci06MTA5RDkwMDBBRjgwMDAyNDAyNDAxMDIxOEZCRjAwMjg4RkI1MDAyNDFGCi06MTA5REEwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDQ1Ci06MTA5REIwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMzAwMDAzMjAyMzBGCi06MTA5REMwMDAzMDg1MDAwRjBBMDAxNDQ5MDA2NTIwMjEyN0JERkZEODA3Ci06MTA5REQwMDAzQzAzODAwMDAwQTAzODIxQUM2NzAwMzhBRkIxMDAxNDBDCi06MTA5REUwMDBBQzY2MDAzQzAwODA4ODIxM0MwNjAwMjJBQzY2MDAzMDU2Ci06MTA5REYwMDBBRkIwMDAxMEFDNzEwMDI4M0MxMDgwMEMzQzA0ODAwQzBCCi06MTA5RTAwMDAyNDA1MDA3MEFGQkYwMDI0QUZCNDAwMjBBRkIzMDAxQzI2Ci06MTA5RTEwMDAwRTAwMTQzQUFGQjIwMDE4MjYwNDAwODAwRTAwMTQzQTY3Ci06MTA5RTIwMDAyNDA1MDA4MDI2MDQwMTAwMEUwMDE0M0EyNDA1MDBGMEU5Ci06MTA5RTMwMDAzQzAyMDgwMDhDNDIwMDY0MTA0MDAwMTMwMDAwODAyMUE2Ci06MTA5RTQwMDAzQzE0ODAwMDI0MTNGRjgwM0MxMjgwMEMwRTAwMTQxRTcyCi06MTA5RTUwMDAwMjAwMjAyMTAwNTE0ODIxMzEyQTAwN0YwMTMzNDAyNDkzCi06MTA5RTYwMDAwMTUyMjAyMTI0MDUwMDUwQUU4ODAwMjgwRTAwMTQzQTJCCi06MTA5RTcwMDAyNjEwMDAwMTNDMDUwODAwOENBNTAwNjQwMjA1MjAyQjdCCi06MTA5RTgwMDAxNDgwRkZGMjAwMDAwMDAwM0MwNjA4MDA4Q0M2MDA2MDUxCi06MTA5RTkwMDAxMEMwMDAxNTAwMDA4MDIxM0MxNDgwMDAyNDEzRkY4MEI2Ci06MTA5RUEwMDAzQzEyODAwQzNDMTkwODAwOEYzOTAwNTgwMDEwQzE4MDBBCi06MTA5RUIwMDAyNDA1MDA0MDAzMzE3ODIxMDFGODY4MjEzMUFFMDA3RjhDCi06MTA5RUMwMDAwMUIzNjAyNDAxRDIyMDIxQUU4QzAwMjgwRTAwMTQzQTg4Ci06MTA5RUQwMDAyNjEwMDAwMTNDMDYwODAwOENDNjAwNjAwMjA2NTgyQkM0Ci06MTA5RUUwMDAxNTYwRkZGMDAwMDAwMDAwM0MxMDA4MDA4RTEwMDA1Q0MwCi06MTA5RUYwMDAyNDE0RkY4MDNDMUY4MDBDMDIxMTk4MjEwMjc0OTAyNENFCi06MTA5RjAwMDAzMjYyMDA3RjNDMTE4MDAwMDA1RjIwMjFBRTMyMDAyOEM5Ci06MTA5RjEwMDAwRTAwMTQzQTAwMDYyODQwOEZCRjAwMjQ4RkI0MDAyMEEyCi06MTA5RjIwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEQ3Ci06MTA5RjMwMDAwMDAwMjAyMTAwMDAyODIxMEEwMDE0M0EyN0JEMDAyODMzCi06MTA5RjQwMDA4RjgzMDAzQzhDNjIwMDA0MTA0MDAwMDMwMDAwMDAwMDdFCi06MTA5RjUwMDAwM0UwMDAwODAwMDAwMDAwOEM2NDAwMTA4QzY1MDAwODFECi06MDg5RjYwMDAwQTAwMTQ4MzhDNjYwMDBDNUEKLTowODlGNjgwMDAwMDAwMDAwMDAwMDAwMUJENgotOjEwOUY3MDAwMDAwMDAwMEYwMDAwMDAwQTAwMDAwMDA4MDAwMDAwMDZCQQotOjEwOUY4MDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA0MDAwMDAwMDRCRgotOjEwOUY5MDAwMDAwMDAwMDMwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDNCNQotOjEwOUZBMDAwMDAwMDAwMDMwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDJBOAotOjEwOUZCMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI5OQotOjEwOUZDMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI4OQotOjEwOUZEMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI3OQotOjBDOUZFMDAwMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAxNzIKLTowNDlGRUMwMDgwMDgwMTAwRTgKLToxMDlGRjAwMDgwMDgwMDgwODAwODAwMDAwODAwMTc5MDA4MDAxNzkwNzMKLToxMEEwMDAwMDA4MDAxN0M4MDgwMDE3QzgwODAwMTdEQzA4MDAxN0FDQkMKLToxMEEwMTAwMDA4MDAxQTA0MDgwMDE5RDAwODAwMUE1QzA4MDAxQTVDMkQKLToxMEEwMjAwMDA4MDAxQUU0MDgwMDFBMTQ4MDA4MDI0MDA4MDAyMTU0QUQKLToxMEEwMzAwMDA4MDAxRkEwMDgwMDIxN0MwODAwMjIxNDA4MDAyMzY0RTcKLToxMEEwNDAwMDA4MDAyM0IwMDgwMDI0RDQwODAwMjNEQzA4MDAyNDYwQTIKLToxMEEwNTAwMDA4MDAyMDEwMDgwMDI5ODgwODAwMjkyQzA4MDAxRkJDQ0YKLToxMEEwNjAwMDA4MDAxRkJDMDgwMDFGQkMwODAwMjU0ODA4MDAyNTQ4NDAKLToxMEEwNzAwMDA4MDAxRkJDMDgwMDFGQkMwODAwMjgwNDA4MDAxRkJDMDMKLToxMEEwODAwMDA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQzA4MDAyODY0OTMKLToxMEEwOTAwMDA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQzA4MDAxRkJDMzQKLToxMEEwQTAwMDA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQzA4MDAxRkJDMjQKLToxMEEwQjAwMDA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQzA4MDAxRkJDMTQKLToxMEEwQzAwMDA4MDAxRkJDMDgwMDFGQkMwODAwMjNEMDA4MDAxRkJDRUMKLToxMEEwRDAwMDA4MDAxRkJDMDgwMDI4RDQwODAwMUZCQzA4MDAxRkJDRDMKLToxMEEwRTAwMDA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQzA4MDAxRkJDRTQKLToxMEEwRjAwMDA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQzA4MDAxRkJDRDQKLToxMEExMDAwMDA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQzA4MDAxRkJDQzMKLToxMEExMTAwMDA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQzA4MDAyNzI4M0YKLToxMEExMjAwMDA4MDAxRkJDMDgwMDFGQkMwODAwMjY5MDA4MDAyNUVDOTIKLToxMEExMzAwMDA4MDAzNzUwMDgwMDM3MjQwODAwMzZGMDA4MDAzNkM0RkQKLToxMEExNDAwMDA4MDAzNkE0MDgwMDM2NTg4MDA4MDEwMDgwMDgwMDgwMDYKLTowOEExNTAwMDgwMDgwMDAwODAwODAwODA3NwotOjA4QTE1ODAwMEEwMDBDNzYwMDAwMDAwMDczCi06MTBBMTYwMDAwMDAwMDAwMDAwMDAwMDBENzI3ODcwMzQyRTM2MkUzMTkxCi06MTBBMTcwMDAzNjAwMDAwMDA0MDYxMDAzMDAwMDAwMDAwMDAwMDAwMThCCi06MTBBMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCi06MTBBMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTBBMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTBBMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTBBMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTBBMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTBBMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTBBMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTBBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTBBMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTBBMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTBBMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTBBMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTBBMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTBBMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTBBMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCi06MTBBMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCi06MTBBMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCi06MTBBMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCi06MTBBMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTBBMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCi06MTBBMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCi06MTBBMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTBBMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTBBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECi06MTBBMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTBBMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTBBMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTBBMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTBBMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTBBMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTBBMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTBBMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECi06MTBBMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTBBM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTBBM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTBBM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTBBM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTBBM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTBBM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTBBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCi06MTBBNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCi06MTBBNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCi06MTBBNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCi06MTBBNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCi06MTBBNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCi06MTBBNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTBBNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTBBNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCi06MTBBNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCi06MTBBNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCi06MTBBNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCi06MTBBNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCi06MTBBNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCi06MTBBNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCi06MTBBNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCi06MTBBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCi06MTBBNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCi06MTBBNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCi06MTBBNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCi06MTBBNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCi06MTBBNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCi06MTBBNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCi06MTBBNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCi06MTBBNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCi06MTBBNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCi06MTBBNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCi06MTBBNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCi06MTBBNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCi06MTBBNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCi06MTBBNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCi06MTBBNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCi06MTBBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCi06MTBBNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCi06MTBBNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCi06MTBBNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCi06MTBBNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCi06MTBBNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCi06MTBBNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCi06MTBBNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCi06MTBBNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCi06MTBBNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCi06MTBBNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCi06MTBBNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCi06MTBBNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCi06MTBBNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCi06MTBBNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCi06MTBBNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCi06MTBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Ci06MTBBNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Ci06MTBBNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTBBNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Ci06MTBBNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci06MTBBNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTBBNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Ci06MTBBNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Ci06MTBBNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Ci06MTBBNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Ci06MTBBN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Ci06MTBBN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Ci06MTBBN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Ci06MTBBN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Ci06MTBBN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Ci06MTBBN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Ci06MTBBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTBBODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MTBBODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTBBODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Ci06MTBBODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Ci06MTBBODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTBBODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Ci06MTBBODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Ci06MTBBODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Ci06MTBBODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTBBOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MTBBOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Ci06MTBBOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTBBOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Ci06MTBBOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Ci06MTBBOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Ci06MTBBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Ci06MTBBOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Ci06MTBBOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Ci06MTBBOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Ci06MTBBOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci06MTBBOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Ci06MTBBOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Ci06MTBBOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Ci06MTBBOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Ci06MTBBOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Ci06MTBBOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Ci06MTBBOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTBBOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Ci06MTBBOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci06MTBBOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Ci06MTBBOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Ci06MTBBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Ci06MTBBQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Ci06MTBBQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTBBQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTBBQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci06MTBBQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTBBQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Ci06MTBBQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTBBQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTBBQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTBBQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTBBQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTBBQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTBBQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTBBQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTBBQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Ci06MTBBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Ci06MTBBQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Ci06MTBBQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Ci06MTBBQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Ci06MTBBQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTBBQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Ci06MTBBQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTBBQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTBBQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTBBQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTBBQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Ci06MTBBQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Ci06MTBBQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTBBQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Ci06MTBBQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTBBQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Ci06MTBBQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Ci06MTBBQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Ci06MTBBQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Ci06MTBBQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci06MTBBQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Ci06MTBBQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTBBQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTBBQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Ci06MTBBQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Ci06MTBBQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Ci06MTBBQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Ci06MTBBQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Ci06MTBBQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTBBQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTBBQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Ci06MTBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCi06MTBBRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCi06MTBBRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCi06MTBBRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCi06MTBBRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCi06MTBBRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCi06MTBBRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCi06MTBBRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCi06MTBBRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCi06MTBBRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCi06MTBBREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCi06MTBBREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTBBREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTBBREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCi06MTBBREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCi06MTBBREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCi06MTBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTBBRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCi06MTBBRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCi06MTBBRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi06MTBBRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi06MTBBRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTBBRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTBBRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCi06MTBBRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTBBRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCi06MTBBRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCi06MTBBRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCi06MTBBRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCi06MTBBRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCi06MTBBRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCi06MTBBRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCi06MTBBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCi06MTBBRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCi06MTBBRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCi06MTBBRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi06MTBBRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi06MTBBRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCi06MTBBRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTBBRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCi06MTBBRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTBBRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTBBRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCi06MTBBRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCi06MTBBRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCi06MTBBRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCi06MTBBRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTBBRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCi06MTBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MTBCMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCi06MTBCMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCi06MTBCMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi06MTBCMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi06MTBCMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCi06MTBCMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTBCMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTBCMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTBCMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTBCMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTBCMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTBCMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTBCMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCi06MTBCMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTBCMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCi06MTBCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTBCMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTBCMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCi06MTBCMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCi06MTBCMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTBCMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTBCMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCi06MTBCMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCi06MTBCMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTBCMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTBCMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTBCMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTBCMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTBCMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTBCMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTBCMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTBCMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTBCMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTBCMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTBCMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTBCMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTBCMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCi06MTBCMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCi06MTBCMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCi06MTBCMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCi06MTBCMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTBCMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCi06MTBCMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCi06MTBCMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTBCMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTBCMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTBCMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTBCMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTBCMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTBCMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTBCMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTBCMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTBCMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECi06MTBCMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTBCMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTBCM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTBCM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTBCM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTBCM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTBCM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTBCM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECi06MTBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCi06MTBCNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCi06MTBCNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCi06MTBCNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCi06MTBCNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCi06MTBCNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTBCNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTBCNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCi06MTBCNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCi06MTBCNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCi06MTBCNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCi06MTBCNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCi06MTBCNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCi06MTBCNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCi06MTBCNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCi06MTBCNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCi06MTBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCi06MTBCNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCi06MTBCNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCi06MTBCNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCi06MTBCNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCi06MTBCNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCi06MTBCNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCi06MTBCNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCi06MTBCNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCi06MTBCNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCi06MTBCNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCi06MTBCNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCi06MTBCNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCi06MTBCNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCi06MTBCNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCi06MTBCNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCi06MTBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCi06MTBCNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCi06MTBCNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCi06MTBCNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCi06MTBCNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCi06MTBCNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCi06MTBCNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCi06MTBCNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCi06MTBCNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCi06MTBCNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCi06MTBCNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCi06MTBCNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCi06MTBCNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCi06MTBCNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCi06MTBCNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCi06MTBCNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCi06MTBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Ci06MTBCNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTBCNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Ci06MTBCNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci06MTBCNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTBCNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Ci06MTBCNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Ci06MTBCNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Ci06MTBCNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Ci06MTBCNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Ci06MTBCN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Ci06MTBCN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Ci06MTBCN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Ci06MTBCN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Ci06MTBCN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Ci06MTBCN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Ci06MTBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MTBCODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTBCODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Ci06MTBCODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Ci06MTBCODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTBCODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Ci06MTBCODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Ci06MTBCODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Ci06MTBCODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTBCODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MTBCOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Ci06MTBCOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTBCOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Ci06MTBCOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Ci06MTBCOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Ci06MTBCOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTBCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Ci06MTBCOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Ci06MTBCOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Ci06MTBCOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci06MTBCOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Ci06MTBCOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Ci06MTBCOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Ci06MTBCOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Ci06MTBCOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Ci06MTBCOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Ci06MTBCOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTBCOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Ci06MTBCOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci06MTBCOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Ci06MTBCOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Ci06MTBCOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Ci06MTBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Ci06MTBCQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTBCQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTBCQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci06MTBCQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTBCQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Ci06MTBCQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTBCQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTBCQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTBCQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTBCQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTBCQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTBCQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTBCQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTBCQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Ci06MTBCQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Ci06MTBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Ci06MTBCQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Ci06MTBCQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Ci06MTBCQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTBCQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Ci06MTBCQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTBCQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTBCQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTBCQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTBCQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Ci06MTBCQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Ci06MTBCQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTBCQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Ci06MTBCQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTBCQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTBCQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Ci06MTBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Ci06MTBCQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Ci06MTBCQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Ci06MTBCQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci06MTBCQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Ci06MTBCQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTBCQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTBCQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Ci06MTBCQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Ci06MTBCQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Ci06MTBCQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Ci06MTBCQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Ci06MTBCQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTBCQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTBCQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Ci06MTBCQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Ci06MTBCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCi06MTBCRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCi06MTBCRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCi06MTBCRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCi06MTBCRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCi06MTBCRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCi06MTBCRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCi06MTBCRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCi06MTBCRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCi06MTBCRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCi06MTBCREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTBCREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTBCREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCi06MTBCREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCi06MTBCREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCi06MTBCREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCi06MTBCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCi06MTBCRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCi06MTBCRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi06MTBCRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi06MTBCRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTBCRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTBCRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCi06MTBCRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTBCRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCi06MTBCRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCi06MTBCRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCi06MTBCRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCi06MTBCRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCi06MTBCRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCi06MTBCRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCi06MTBCRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCi06MTBCRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCi06MTBCRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi06MTBCRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi06MTBCRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCi06MTBCRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTBCRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCi06MTBCRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTBCRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTBCRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCi06MTBCRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCi06MTBCRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCi06MTBCRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCi06MTBCRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTBCRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCi06MTBCRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCi06MTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCi06MTBDMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCi06MTBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi06MTBDMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi06MTBDMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCi06MTBDMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTBDMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTBDMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTBDMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTBDMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTBDMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTBDMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTBDMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCi06MTBDMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTBDMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCi06MTBDMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MTBDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTBDMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCi06MTBDMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCi06MTBDMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTBDMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTBDMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCi06MTBDMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCi06MTBDMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTBDMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTBDMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTBDMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTBDMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTBDMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTBDMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTBDMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTBDMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTBDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTBDMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTBDMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTBDMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTBDMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTBDMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCi06MTBDMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCi06MTBDMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCi06MTBDMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCi06MTBDMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTBDMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCi06MTBDMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCi06MTBDMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTBDMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTBDMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTBDMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTBDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECi06MTBDMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTBDMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTBDMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTBDMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTBDMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECi06MTBDMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECi06MTBDMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTBDMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECi06MTBDMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECi06MTBDM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTBDM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECi06MTBDM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECi06MTBDM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECi06MTBDM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECi06MTBDM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECi06MTBDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCi06MTBDNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCi06MTBDNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCi06MTBDNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCi06MTBDNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCi06MTBDNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCi06MTBDNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCi06MTBDNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCi06MTBDNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCi06MTBDNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCi06MTBDNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCi06MTBDNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCi06MTBDNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCi06MTBDNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCi06MTBDNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCi06MTBDNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCi06MTBDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCi06MTBDNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCi06MTBDNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCi06MTBDNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCi06MTBDNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCi06MTBDNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCi06MTBDNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCi06MTBDNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCi06MTBDNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCi06MTBDNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCi06MTBDNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCi06MTBDNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCi06MTBDNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCi06MTBDNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCi06MTBDNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCi06MTBDNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCi06MTBDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCi06MTBDNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCi06MTBDNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCi06MTBDNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCi06MTBDNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCi06MTBDNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCi06MTBDNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCi06MTBDNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCi06MTBDNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCi06MTBDNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCi06MTBDNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCi06MTBDNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCi06MTBDNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCi06MTBDNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCi06MTBDNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCi06MTBDNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCi06MTBDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTBDNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Ci06MTBDNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci06MTBDNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTBDNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Ci06MTBDNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Ci06MTBDNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Ci06MTBDNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Ci06MTBDNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Ci06MTBDNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Ci06MTBDN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Ci06MTBDN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Ci06MTBDN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Ci06MTBDN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Ci06MTBDN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Ci06MTBDN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Ci06MTBDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTBDODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Ci06MTBDODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Ci06MTBDODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTBDODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Ci06MTBDODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Ci06MTBDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Ci06MTBDODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTBDODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MTBDODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Ci06MTBDOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Ci06MTBDOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Ci06MTBDOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Ci06MTBDOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Ci06MTBDOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Ci06MTBDOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MTBDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Ci06MTBDOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Ci06MTBDOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci06MTBDOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Ci06MTBDOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Ci06MTBDOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Ci06MTBDOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Ci06MTBDOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Ci06MTBDOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Ci06MTBDOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTBDOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Ci06MTBDOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci06MTBDOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Ci06MTBDOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Ci06MTBDOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Ci06MTBDOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Ci06MTBDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTBDQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTBDQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci06MTBDQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTBDQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Ci06MTBDQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTBDQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTBDQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTBDQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTBDQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTBDQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTBDQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTBDQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTBDQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Ci06MTBDQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Ci06MTBDQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Ci06MTBDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Ci06MTBDQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Ci06MTBDQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTBDQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Ci06MTBDQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTBDQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTBDQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTBDQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTBDQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Ci06MTBDQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Ci06MTBDQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTBDQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Ci06MTBDQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTBDQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTBDQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Ci06MTBDQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Ci06MTBDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Ci06MTBDQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Ci06MTBDQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci06MTBDQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Ci06MTBDQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTBDQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTBDQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Ci06MTBDQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Ci06MTBDQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Ci06MTBDQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Ci06MTBDQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Ci06MTBDQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTBDQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Ci06MTBDQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Ci06MTBDQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Ci06MTBDQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Ci06MTBDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCi06MTBDRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCi06MTBDRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCi06MTBDRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCi06MTBDRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCi06MTBDRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCi06MTBDRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCi06MTBDRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCi06MTBDRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCi06MTBDRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTBDREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTBDREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCi06MTBDREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCi06MTBDREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCi06MTBDREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCi06MTBDREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCi06MTBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCi06MTBDRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi06MTBDRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi06MTBDRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTBDRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTBDRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCi06MTBDRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTBDRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCi06MTBDRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCi06MTBDRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCi06MTBDRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCi06MTBDRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCi06MTBDRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCi06MTBDRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCi06MTBDRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTBDRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCi06MTBDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCi06MTBDRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi06MTBDRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi06MTBDRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCi06MTBDRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCi06MTBDRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCi06MTBDRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTBDRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCi06MTBDRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCi06MTBDRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCi06MTBDRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCi06MTBDRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCi06MTBDRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTBDRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCi06MTBDRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCi06MTBDRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCi06MTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCi06MTBEMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi06MTBEMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi06MTBEMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCi06MTBEMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTBEMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTBEMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTBEMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTBEMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCi06MTBEMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCi06MTBEMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCi06MTBEMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCi06MTBEMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTBEMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCi06MTBEMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MTBEMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCi06MTBEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCi06MTBEMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCi06MTBEMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCi06MTBEMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTBEMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCi06MTBEMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCi06MTBEMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTBEMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTBEMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTBEMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTBEMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTBEMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCi06MTBEMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTBEMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTBEMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTBEMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTBEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTBEMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCi06MTBEMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTBEMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTBEMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCi06MTBEMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCi06MTBEMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCi06MTBEMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCi06MTBEMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCi06MTBEMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCi06MTBEMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCi06MTBEMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCi06MTBEMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCi06MTBEMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCi06MTBEMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTBEMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTBEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECi06MTBEMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECi06MTBEMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECi06MTBEMzMwMDAwMDAwMDAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRENECi06MTBEMzQwMDAwMDAwMDAwRDNDMDIwODAwMjQ0MjdBNjAzQzAzMDgwMDAzCi06MTBEMzUwMDAyNDYzN0FEOEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGREVBCi06MTBEMzYwMDAyNDQyMDAwNDNDMUQwODAwMzdCRDlGRkMwM0EwRjAyMUFGCi06MTBEMzcwMDAzQzEwMDgwMDI2MTAzMUQ4M0MxQzA4MDAyNzlDN0E2MDFECi06MTBEMzgwMDAwRTAwMTI1MzAwMDAwMDAwMDAwMDAwMEQzQzAyODAwMDVGCi06MTBEMzkwMDAzMEE1RkZGRjMwQzYwMEZGMzQ0MzAxODAzQzA4ODAwMDA5Ci06MTBEM0EwMDA4RDA5MDFCODA1MjBGRkZFMDAwMDAwMDBBQzY0MDAwMEZDCi06MTBEM0IwMDAyNDA0MDAwMkE0NjUwMDA4QTA2NjAwMEFBMDY0MDAwQjEzCi06MTBEM0MwMDBBQzY3MDAxODNDMDMxMDAwMDNFMDAwMDhBRDAzMDFCODhGCi06MTBEM0QwMDAzQzA1NjAwMDhDQTI0RkY4MDQ0MEZGRkUwMDAwMDAwMEY2Ci06MTBEM0UwMDBBQ0E0NEZDMDNDMDMxMDAwM0MwNDAyMDBBQ0E0NEZDNEVBCi06MTBEM0YwMDAwM0UwMDAwOEFDQTM0RkY4MjdCREZGRThBRkJGMDAxNDVGCi06MTBENDAwMDBBRkIwMDAxMDBFMDAxMkE1MDA4MDgwMjEzQzA0ODAwOEZGCi06MTBENDEwMDAzNDg1MDA4MDkwQTYwMDA1MjQwM0ZGRkUwMjAwMjAyMTMxCi06MTBENDIwMDAwMEMzMTAyNDhGQkYwMDE0OEZCMDAwMTBBMEEyMDAwNTBECi06MTBENDMwMDAwQTAwMTJBRjI3QkQwMDE4MjdCREZGRThBRkIwMDAxMEVCCi06MTBENDQwMDBBRkJGMDAxNDBFMDAwRUQ2MDA4MDgwMjEzQzA2ODAwODdECi06MTBENDUwMDAzNEM1MDA4MDkwQTQwMDAwMjQwMjAwNTAzMDgzMDBGRkY3Ci06MTBENDYwMDAxMDYyMDAwNzNDMDk4MDAwMDIwMDIwMjE4RkJGMDAxNEQ5Ci06MTBENDcwMDA4RkIwMDAxMEFEMjAwMTgwMEEwMDBGQzUyN0JEMDAxODM1Ci06MTBENDgwMDAyNDA4MDEwMDNDMDc4MDAwMDIwMDIwMjE4RkJGMDAxNDA3Ci06MTBENDkwMDA4RkIwMDAxMEFDRTgwMTgwMEEwMDBGQzUyN0JEMDAxODRFCi06MTBENEEwMDAyN0JERkY4ODNDMDg4MDA4QUZCRTAwNzBBRkI2MDA2ODlCCi06MTBENEIwMDBBRkI0MDA2MEFGQjAwMDUwQUZCRjAwNzRBRkI3MDA2QzQ2Ci06MTBENEMwMDBBRkI1MDA2NEFGQjMwMDVDQUZCMjAwNThBRkIxMDA1NDY5Ci06MTBENEQwMDAzNTA1MDA4MDNDMDc4MDAwOENGMTAxMjg5MEE0MDAwOUVDCi06MTBENEUwMDBBQ0UwMDA4NDkwQTYwMDA1MzA5MDAwRkYwMDAwQTAyMTcxCi06MTBENEYwMDAwMDA2MTgyNzMwNjIwMDAxMDAwMEIwMjExNDQwMDA2N0M4Ci06MTBENTAwMDAwMDAwRjAyMTkwQTkwMDAwMjQwNTAwMjAzMTI0MDBGRjM0Ci06MTBENTEwMDAxMDg1MDAxNjI0MEEwMDUwMTA4QTAwOEQwMDAwMDAwMEJCCi06MTBENTIwMDAzQzBDMDgwMDhEOEMwMERDMjU4QjAwMDEzQzAxMDgwMEMwCi06MTBENTMwMDBBQzJCMDBEQzBFMDAxMzlCMDAwMDAwMDA4RkJGMDA3NEJBCi06MTBENTQwMDA4RkJFMDA3MDhGQjcwMDZDOEZCNjAwNjg4RkI1MDA2NDE3Ci06MTBENTUwMDA4RkI0MDA2MDhGQjMwMDVDOEZCMjAwNTg4RkIxMDA1NDVECi06MTBENTYwMDA4RkIwMDA1MDAzRTAwMDA4MjdCRDAwNzgwMDAwMDAwREQ4Ci06MTBENTcwMDAzQzE1ODAwMEFGQTAwMDMwOTZBMjAxMTY4RUI5MDEwNEMwCi06MTBENTgwMDAzQzFGMDAyMDM2QjIwQzAwMDMzRkMwMjQwMDE4QjgyQjBCCi06MTBENTkwMDAwMDE3MzE0MEFGQTYwMDMwOEVBRTAxMDQzMDUzRkZGRkJDCi06MTBENUEwMDAzQzBGMDA0MDAyNzIzODIxMDFDRjY4MjQ5MEYyMDAwRDM4Ci06MTBENUIwMDAxMUEwMDA0ODM0QzQwMDQwMzI0MzAwMjAxNDYwMDAwMjJGCi06MTBENUMwMDAzNDg2MDA4MDAwODAzMDIxMTRDMDAwOTRBRkE2MDAzMDYzCi06MTBENUQwMDAzQzA5ODAwODM1MjUwMDgwOTBBODAwMDgzMTA2MDA0MEVECi06MTBENUUwMDA1MEMwMDAwNjNDMDg4MDA4MjQwQTAwMDQxMjBBMDBBMzY4Ci06MTBENUYwMDAyNDBCMDAxMjEyMEIwMDI5M0MwODgwMDgzNTE1MDEwMDhECi06MTBENjAwMDAzQzE3ODAwMDk2RjMwMTFBOTRFRTAwMEU5MkFGMDAwOENBCi06MTBENjEwMDAzMjRDMDAwNDMyNzVGRkZGMDFFRTY4MDRBRkFEMDAzQ0YwCi06MTBENjIwMDA4Q0YzMDAwNDExODAwMDMxOENGNzAwMDgzNTAzMDA4MDcyCi06MTBENjMwMDA5MDc4MDAwODMzMDcwMDQwMTRFMDAwMjgwMDAwMDAwMDQ0Ci06MTBENjQwMDA4QzcyMDA1MDAyNzI4ODIzMDYyMDAwMDYzQzA2ODAwMDdGCi06MTBENjUwMDA4QzdGMDAzNDAyN0ZDODIzMDcyMjAwODQ4RTgyMDAwODVBCi06MTBENjYwMDAzQzA2ODAwMEFDQzAwMDQ0MjQwMjAwMDE4RkJGMDA3NDVGCi06MTBENjcwMDA4RkJFMDA3MDhGQjcwMDZDOEZCNjAwNjg4RkI1MDA2NEU2Ci06MTBENjgwMDA4RkI0MDA2MDhGQjMwMDVDOEZCMjAwNTg4RkIxMDA1NDJDCi06MTBENjkwMDA4RkIwMDA1MDAzRTAwMDA4MjdCRDAwNzgwRTAwMENCOEUyCi06MTBENkEwMDAwMDAwMjAyMThGQkYwMDc0OEZCRTAwNzA4RkI3MDA2QzA4Ci06MTBENkIwMDA4RkI2MDA2ODhGQjUwMDY0OEZCNDAwNjA4RkIzMDA1Q0Q0Ci06MTBENkMwMDA4RkIyMDA1ODhGQjEwMDU0OEZCMDAwNTAwM0UwMDAwOEIzCi06MTBENkQwMDAyN0JEMDA3ODBBMDAwRDE4MDBDMDIwMjEwRTAwMTQ2QzMwCi06MTBENkUwMDAwMjYwMjAyMTE0NDBGRkRGM0MwNjgwMDAzQzAzODAwOERDCi06MTBENkYwMDAzNDYzMDA4MDhDNjQwMDM0MDI2NDEwMjMwNDQwMDAxOEZBCi06MTBENzAwMDAwMDAwMDAwMDNDMTQwODAwOEU5NDMxMDAyNjkwMDAwMUI3Ci06MTBENzEwMDAzQzAxMDgwMEFDMzAzMTAwMEUwMDEyQTUwMjIwMjAyMThGCi06MTBENzIwMDAzQzA0ODAwODM0OUYwMDgwOTNGRTAwMjUwMjIwMjAyMUM1Ci06MTBENzMwMDAzN0M5MDAwNEEzRTkwMDI1MEUwMDEyQUYwMDAwMDAwMDY1Ci06MTBENzQwMDAwRTAwMEM5RTAyMjAyMDIxMEEwMDBENDUyNDAyMDAwMTNCCi06MTBENzUwMDAzQzE0MDgwMDI2OTQ3QUM4MEEwMDBEMDczQzE1ODAwMDg2Ci06MTBENzYwMDA4QzY4MDAzMDAyNjgzMDIzMThDMDAwMDgyNDBCMDAwQ0JECi06MTBENzcwMDAzQzA5MDgwMDhEMjkzMTAwMzI1MjAwRkMwMDAwQTgyMTJDCi06MTBENzgwMDAyNTI1MDAwMTNDMDEwODAwQUMyNTMxMDBBRkFCMDAzMDdECi06MTBENzkwMDA4QzZBMDAzMDAxNTM0MDIzMTkwMDAwRTAwMkE4NjAyQTdGCi06MTBEN0EwMDAxNTgwRkZERDAwMDAwMDAwMTJBODAwMkEwMkE4NzgyM0RGCi06MTBEN0IwMDAwMjY4OTgyMTMxRjVGRkZGMzI0NzAwMDIxMEUwMDAzNDgzCi06MTBEN0MwMDAzMjU5MDAxMDNDMTM4MDA4MzY3MDAwODA5MjFFMDAwODA5Ci06MTBEN0QwMDAzM0Q2MDA0MDUyQzAwMEQzOEU4MjAwMDgwMjIwMjAyMUEwCi06MTBEN0UwMDAwRTAwMTJBNTI0MTIwMDE4QTIxMjAwMDk5MjE3MDAwNUJCCi06MTBEN0YwMDAyNDE4RkZGRTAyMjAyMDIxMDJGOEE4MjQwRTAwMTJBRkY4Ci06MTBEODAwMDBBMjE1MDAwNTI0MDQwMDM5MDAwMDI4MjEwRTAwMTQ0NzQ5Ci06MTBEODEwMDAyNDA2MDAxODBBMDAwRDQ1MjQwMjAwMDE5Mjk2MDAwQzBGCi06MTBEODIwMDAzQzA0ODAwODM0OUUwMDgwOEZDNzAwMzgwMDE2QTMwMDk3Ci06MTBEODMwMDAzNjkwMDA4MTMwQzYwMEZGMDIyMDIwMjEwRTAwMEM4REEyCi06MTBEODQwMDAzMjA1RjA4MTNDMDY4MDAwQUNDMDAwNDQwQTAwMEQ0NTYyCi06MTBEODUwMDAyNDAyMDAwMTNBNEUwMDAxMzFDRDAwMDExNUEwRkZBRUI3Ci06MTBEODYwMDAwMjY4OTgyMTBBMDAwRDk3MDAwMDAwMDAwMDQwRjgwOUE2Ci06MTBEODcwMDAyNDA0MDAxNjBBMDAwRDQ1MjQwMjAwMDEwMjIwMjAyMTg0Ci06MTBEODgwMDAwRTAwMTUyOTAwRTAyODIxMEEwMDBDRkE4RkJGMDA3NDUxCi06MTBEODkwMDAxMzIwRkY3MzNDMDQ4MDA4MzQ4OTAwODA4RDIzMDAzOEY2Ci06MTBEOEEwMDA4QzgyMDAwNDAyRTJGODIzMUZFMEZGNkUzQzA2ODAwMDM5Ci06MTBEOEIwMDAwMkUzMzAyMzA0QzIwMDAxMDA2MEI4MjFBRkE4MDAxOEMxCi06MTBEOEMwMDAzQzE5ODAwMEFGQjMwMDEwQUZCNTAwMTQ5NzI2MDEyMEJCCi06MTBEOEQwMDA4RDJBMDAzMDk1MjQwMDVDOEZCODAwM0M4RkFEMDAzMDVECi06MTBEOEUwMDAzMDg3RkZGRjMwREZGRkZGMDNFODcwMjEzNzJGNDAwMDU0Ci06MTBEOEYwMDAwMzA3MjgyQjhFODIwMDA0MDFDRjYwMjEwMUE1NTgyNTQzCi06MTBEOTAwMDBBRkE5MDA0OEFGQUMwMDIwQUZBQTAwMjhBRkFCMDAzMEYxCi06MTBEOTEwMDBBRkFBMDAyNEFGQTAwMDJDQUZCNzAwMzQwMDQwRjgwOTM0Ci06MTBEOTIwMDAyN0E0MDAxMDhGQTgwMDMwMzEwMzAwMDIxMDYwMDAwMjBECi06MTBEOTMwMDA4RkE5MDA0ODMyNTIwMEZFOTEyMzAwMDgzMDY5MDA0MDUwCi06MTBEOTQwMDA1MTIwMDAxMzhGQTQwMDI0M0MwMjgwMDg4QzQ4MDAwNDVFCi06MTBEOTUwMDAxMTE3MDBBNDI0MEEwMDE0MzI1ODAwMDE1MzAwMDAwQ0NGCi06MTBEOTYwMDA4RkE0MDAyNDI0MTkwMDBDMTIxOTAwQzAyQTFGMDAwREQ2Ci06MTBEOTcwMDAxM0UwMDBCQTI0MDYwMDBFMjQwNDAwMEE1MjA0MDAwMTM5Ci06MTBEOTgwMDAyNDE2MDAwODhGQTkwMDI0MjUyNDAwMDFBRkE0MDAyNDM4Ci06MTBEOTkwMDAzQzE4ODAwODM3MDUwMDgwOEZBNzAwMTQ4Q0FGMDAzMDNBCi06MTBEOUEwMDAzNDBDRkZGRjAwODc3MDIxQUNBRTAwMzBBRkFGMDAzODAxCi06MTBEOUIwMDA5MEFEMDA0RThDQUIwMDMwOEZBODAwM0MwMUFDMTAwNDQxCi06MTBEOUMwMDAwMTYyNTAyMUFDQUEwMDM0OEZBNjAwMzAwMkU4MjAyMTY5Ci06MTBEOUQwMDAzMEMzMDAwODEwNjAwMDBCQUZBNDAwNDA4Q0I5MDAyMEQ5Ci06MTBEOUUwMDAxMzI0MDA4RjMwQzYwMEZGOTI4OTAwMEM4RkE3MDAzNEVCCi06MTBEOUYwMDAwMDA5ODMwMDM2MDQwMDgwMzA4NUYwODAwRTAwMEM4RDE1Ci06MTBEQTAwMDAwMjIwMjAyMTNDMEE4MDA4MzU1MDAwODA4RTAzMDAzMDFGCi06MTBEQTEwMDA4RkE4MDAzODAwNjgzMDIzMThDMDAwNjUyNjJGMDA4MENBCi06MTBEQTIwMDAzQzBFMDgwMDhEQ0UzMTk4MjQwN0ZGODAwMUU3NjgyNDYyCi06MTBEQTMwMDAzMUVDMDA3RjNDMDY4MDAwM0MwMjgwMDQzMUNCMDAxMEJBCi06MTBEQTQwMDBBQ0NEMDA5MDExNjAwMDNCMDE4MjI4MjE5MEI4MDA2QkEyCi06MTBEQTUwMDA1NzAwMDAzOTNDMDQ4MDA4MjQxRjAwMDFBMEJGMDA2QjYwCi06MTBEQTYwMDA5NEM1MDA3QTI0QjkwMDBBQTYxOTAwMTIzQzBBODAwODVECi06MTBEQTcwMDAzNTQ1MDA4MDkwQTgwMDA4MzExMDAwNDAxNjAwMDAwNEQxCi06MTBEQTgwMDAzQzAzODAwODMyNEIwMDAxMTU2MDAwNkIwMDAwMDAwMDcxCi06MTBEQTkwMDAzNDY0MDA4MDhDOEMwMDIwOEZCMjAwNDAxMTkyMDAwOTA5Ci06MTBEQUEwMDAzNDYzMDEwMDhDNkQwMDAwMDI2RDEwMjMxODQwMDAxMkQ5Ci06MTBEQUIwMDA4RkI4MDA0MDI0MUUwMDAxQUM5ODAwMjBBQzczMDAwMDE5Ci06MTBEQUMwMDBBQzc3MDAwNDE2QzAwMDJEMDAwMDAwMDAxN0MwMDAyNzJFCi06MTBEQUQwMDAwMDAwMDAwMDEyQTAwMDA1MDAwMDE4MjE4RkE1MDAzMEYyCi06MTBEQUUwMDAzMEI1MDAwNDUyQTBGRTk1MDA2MDEwMjEyNDAzMDAwMTBGCi06MTBEQUYwMDAwQTAwMENGOTAwNjAxMDIxOEM2RTAwMDAxNUQzRkZGMUI0Ci06MTBEQjAwMDAwMDAwMDAwMDhDNjcwMDA0MDJFNzc4MjMwNUUxRkZFOUNDCi06MTBEQjEwMDA4RkI4MDA0MDBBMDAwRTVCMDAwMDAwMDAwQTAwMEQ5ODVDCi06MTBEQjIwMDAwMDAwNDAyMTAwNDBGODA5MjQwNDAwMTcwQTAwMEQ0NUI4Ci06MTBEQjMwMDAyNDAyMDAwMTNDMDQ4MDA4MzQ5MDAwODAyNDFFMDAwMTZGCi06MTBEQjQwMDAwMjIwMjAyMTBFMDAxMkE1QTYxRTAwMTI5MjA5MDAyNTE3Ci06MTBEQjUwMDAwMjIwMjAyMTI0MUUwMDAxMzUyMjAwMDEwRTAwMTJBRkY4Ci06MTBEQjYwMDBBMjAyMDAyNTBBMDAwRTQ2M0MwQTgwMDgwRTAwMEM5RTA4Ci06MTBEQjcwMDAwMjIwMjAyMTBBMDAwRTVGMDAwMDAwMDAwRTAwMTJBNTA2Ci06MTBEQjgwMDAwMjIwMjAyMTNDMTk4MDA4MzczNzAwODAwMjIwMjAyMTA0Ci06MTBEQjkwMDAwRTAwMTJBRkEyRjYwMDA5MDJDMDMwMjEyNDA0MDAzN0EzCi06MTBEQkEwMDAwRTAwMTQ0NzAwMDAyODIxMEEwMDBFNUQwMDAwMDAwMDRFCi06MTBEQkIwMDA4RkE2MDAxODU4QzBGRkFFM0MwQTgwMDgwRTAwMTJBNUMwCi06MTBEQkMwMDAwMjIwMjAyMTkyMDMwMDI1MDIyMDIwMjEyNDFFMDAwMTkyCi06MTBEQkQwMDAzNDYyMDAwNDBFMDAxMkFGQTIwMjAwMjUwQTAwMEU0NkI1Ci06MTBEQkUwMDAzQzBBODAwODEyMEEwMDMwMkEwQjAwMTUxMTYwMDAyNDNDCi06MTBEQkYwMDAyNDBEMDAxNjI0MEMwMDBDNTYwQ0ZGNTgzMjU4MDAwMTVFCi06MTBEQzAwMDAzQzA1ODAwODkwQUYwMDFCMjQwN0ZGQkQyNDE2MDAwRUMyCi06MTBEQzEwMDAwMUU3NzAyNEEwQUUwMDFCMEEwMDBFMDEzMjU4MDAwMTdCCi06MTBEQzIwMDAzQzFGODAwMDk3RTUwMTFBNTBBMEZGNkYzNEM2MDAxMDFBCi06MTBEQzMwMDAwQTAwMEUyNTkyODkwMDBDOENCMzAwMzA4RTk2MDAwOEU1Ci06MTBEQzQwMDAyNDA0MDAxODI2NzQwMDAxMDJDMEY4MDlBQ0I0MDAzMEE2Ci06MTBEQzUwMDA4RkIxMDAzMDBBMDAwQ0Y5MzIyMjAwMDQxNjA2RkY0QTg4Ci06MTBEQzYwMDA4RkE5MDAyNDBBMDAwRTBDMjQxNjAwMTAyNDEwMDAwRUE4Ci06MTBEQzcwMDA1MkQwRkY0NDI0MTYwMDEwMEEwMDBFMEIyNDE2MDAxNjgyCi06MTBEQzgwMDA1NjBERkYzNjMyNTgwMDAxM0MwNTgwMDg5MEFGMDAxQjRFCi06MTBEQzkwMDAyNDA3RkZCRDI0MTYwMDEwMDFFNzcwMjRBMEFFMDAxQjZFCi06MTBEQ0EwMDAwQTAwMEUwMTMyNTgwMDAxMEEwMDBFMDAyNDE2MDAxMjZDCi06MTBEQ0IwMDAzQzAzODAwMDhDNjIwMUI4MDQ0MEZGRkUyNDA0MDgwMDhECi06MTBEQ0MwMDBBQzY0MDFCODAzRTAwMDA4MDAwMDAwMDAzQzA1ODAwOEQ3Ci06MTBEQ0QwMDA5NEEyMDA0ODMwODRGRkZGMTA0MDAwMTkyNDg0MDAxMkYxCi06MTBEQ0UwMDA5NEE5MDA0ODNDMDM4MDAwMzEyOEZGRkYwMTA0MzgyQTMyCi06MTBEQ0YwMDAxMEUwMDAxMzM0NjYwMTgwOTQ2RDAxMjA4RjhDMDAwNEM1Ci06MTBERDAwMDAyNDBCMDAxQTMxQUFGRkZGMzE4MzQwMDBBMENCMDAwQjg3Ci06MTBERDEwMDAxMDYwMDAxMDI1NDRGRkZFOTRBRjAwNDgzMUVFRkZGRjc1Ci06MTBERDIwMDAwMUM0MjgyQjE0QTAwMDBDOEY5ODAwMENBNEM0MDAxNDZDCi06MTBERDMwMDA4Rjg2MDAwQzM0QzIwMDAxMDNFMDAwMDhBRjgyMDAwQ0EzCi06MTBERDQwMDAzQzA3ODAwMDI0MDQwMDAzMzRFMjAxODAwM0UwMDAwODYzCi06MTBERDUwMDBBMDQ0MDAwQjhGOTgwMDBDMjQxOUZGRkUwMzE5MTAyNDE3Ci06MTBERDYwMDAwM0UwMDAwOEFGODIwMDBDMjdCREZGRDhBRkI0MDAyMDRECi06MTBERDcwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkJGMDAyNEE2Ci06MTBERDgwMDBBRkIwMDAxMDAwODAxODIxMzBCM0ZGRkYzMEQyRkZGRjhBCi06MTBERDkwMDAzMEY0RkZGRjNDMTE4MDAwOEUyMjAxQjgwNDQwRkZGRUVBCi06MTBEREEwMDAzNjMwMDE4MEFFMDMwMDAwMDI0MDIwMjEwRTAwMEVERDVGCi06MTBEREIwMDBBRTIzMDAyMDhGODYwMDBDOEY4NTAwMDQ4RjgzMDAwMDI3Ci06MTBEREMwMDAzMEM0ODAwMEE2MTMwMDBDQTYxMjAwMEVBNjA1MDAxMDk5Ci06MTBEREQwMDBBRTAzMDAyOEE2MTQwMDA4MTA4MDAwMEUzQzBGODAwMDNGCi06MTBEREUwMDA5NjJDMDExNjMxOEJGRkZDMjU2QTAwMDQwMTUxNDgyMTU1Ci06MTBEREYwMDA4RDI4NDAwMDMxMDdGRkZGMTRFMDAwMDcyNDE0QkZGRjA3Ci06MTBERTAwMDAzQzBFRkZGRjM1Q0Q3RkZGMDBDRDMwMjRBRjg2MDAwQ0U4Ci06MTBERTEwMDAzQzBGODAwMDI0MTRCRkZGMzVGMTAxODAwMEQ0OTgyNDBBCi06MTBERTIwMDBBNjMzMDAyNjhERjIwMTA0QUUzMjAwMkMzQzA2MTAwMDExCi06MTBERTMwMDBBREU2MDFCODhGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzYzCi06MTBERTQwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwOEVCCi06MTBERTUwMDAyN0JEMDAyODI3QkRGRkQ4QUZCMTAwMTQzQzExODAwMEJBCi06MTBERTYwMDAwMDgwNDAyMUFGQjQwMDIwQUZCMDAwMTAzMEQ0RkZGRkRECi06MTBERTcwMDAzNjMwMDE4MDAyODAyMDIxQUUwODAwMDBBRTI4MDAyMDRDCi06MTBERTgwMDBBRkIzMDAxQ0FGQjIwMDE4MzBGM0ZGRkZBRkJGMDAyNEU4Ci06MTBERTkwMDAwRTAwMEVERDMwQjJGRkZGOEY4NTAwMEM4RjgzMDAwNDczCi06MTBERUEwMDAyNDA2QkZGRjAwQTYyMDI0QTYxMjAwMENBNjE0MDAwRTE0Ci06MTBERUIwMDBBNjEzMDAwOEE2MDQwMDI2QTYwMzAwMTAzQzAyMTAwMENBCi06MTBERUMwMDBBRTIyMDFCODhGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzk2Ci06MTBERUQwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODVCCi06MTBERUUwMDAyN0JEMDAyODNDMDI4MDAwMzQ0NTAxODAzQzA0ODAwMEFFCi06MTBERUYwMDA4QzgzMDFCODA0NjBGRkZFMjQwNzIwMDAyNDA2MDAwMjgyCi06MTBERjAwMDBBNEE3MDAwOEEwQTYwMDBCQTRBMDAwMTAzQzA1MTAwMEM4Ci06MTBERjEwMDBBQzg1MDFCODAzRTAwMDA4MDAwMDAwMDAzQzA1ODAwMDZCCi06MTBERjIwMDAzNEE0MDA3MDhDOEEwMDAwOTBBNjAxMTI4Rjg0MDAwNDMzCi06MTBERjMwMDAyN0JERkZGMDMwQzMwMEZGMDAwMzE4ODIzMDgyMDEwMENDCi06MTBERjQwMDAwMDAwMzgyMTEwNDAwMDM5MjQ2NjAwMDMzMDg3NDAwMDZCCi06MTBERjUwMDA1MEUwMDAzOTMwODgyMDAwMDAwNjEwODAwMDQ1QzgyMUJDCi06MTBERjYwMDA4RjJGNDAwMDI0NzgwMDA0MDAxODcwODBBRkFGMDAwMEFECi06MTBERjcwMDAwMUM1NjgyMThEQUM0MDAwQUZBQzAwMDQ5NEFCMDExNjI0Ci06MTBERjgwMDAzMTY5RkZGQzAxMjU0MDIxOEQwNTQwMDBBRkE1MDAwODQ3Ci06MTBERjkwMDA4RkE5MDAwODAwMDAzMDIxMDAwMDI4MjEzQzA3MDgwMDVDCi06MTBERkEwMDAyNEU3MDEwMDBBMDAwRjlFMjQwODAwMDg5MDQyMDAwMEE4Ci06MTBERkIwMDAyNEE1MDAwMTJDQUQwMDBDMDA2MkM4MjEwMDE5QzA4MDBFCi06MTBERkMwMDAwMzA3NzgyMThERUUwMDAwMTFBMDAwMDYwMENFMzAyNjU4Ci06MTBERkQwMDAwM0E1MTAyMTE0QThGRkY1MDAwNTFBMDA1NTIwRkZGNDMxCi06MTBERkUwMDA5MDQyMDAwMDNDMDQ4MDAwMzQ4NzAwNzAzQzA1MDgwMDJCCi06MTBERkYwMDA4Q0E1MzEwNDhDRTMwMDAwMkNBODAwMjAxMTAwMDAwOTNFCi06MTBFMDAwMDAwMDZBMzgyMzAwMDU1ODgwM0MwQzA4MDAyNThDMzEwODM0Ci06MTBFMDEwMDAwMTZDNDgyMTI0QUEwMDAxQUQyNzAwMDAzQzAxMDgwMDQyCi06MTBFMDIwMDBBQzJBMzEwNEFGODYwMDAwMjQwNzAwMDEwMEUwMTAyMTczCi06MTBFMDMwMDAwM0UwMDAwODI3QkQwMDEwMTEwMEZGRkMwMDAwMzgyMTlDCi06MTBFMDQwMDAwMDA2NjA4MDAxODU1ODIxOEQ2NDQwMDAyNDY5MDAwNDI5Ci06MTBFMDUwMDAwMDA5Mzg4MEFGQTQwMDAwMDBFNTE4MjE4QzY2NDAwMDVDCi06MTBFMDYwMDBBRkEwMDAwODBBMDAwRjhFQUZBNjAwMDQzQzAyMDgwMDEzCi06MTBFMDcwMDA4QzQyMDAzODI3QkRGRkQ4QUZCNDAwMjBBRkIyMDAxOEUzCi06MTBFMDgwMDBBRkJGMDAyNEFGQjMwMDFDQUZCMTAwMTRBRkIwMDAxMDlECi06MTBFMDkwMDAzQzE0MDgwMDI2OTQwMDM4MTQ0MDAwMDIyNDUyRkZGRjZDCi06MTBFMEEwMDAwMDAwOTAyMThGODUwMDA0MzBBMzQwMDAxMDYwMDAwRjE1Ci06MTBFMEIwMDAzMEE5ODAwMDNDMDYwMDIwMDBBNjIwMjQxMDgwMDAwQjIwCi06MTBFMEMwMDA4Rjg3MDAwQzI0MDhCRkZGMDBBODI4MjQzNEUzMTAwMDI5Ci06MTBFMEQwMDBBRjg1MDAwNDMwQUYyMDAwMTVFMDAwMEEzQzExMDAwNEI5Ci06MTBFMEUwMDAyNDEzRkZCRjBBMDAwRkVGMDA3MzEwMjQxNTIwMDA2MkY1Ci06MTBFMEYwMDAzQzBCMDAyMDMwQUYyMDAwMTFFMEZGRjk4RjgzMDAwQ0IzCi06MTBFMTAwMDAzQzExMDAwNDAwQjE4MDI0MTIwMEZGRjYyNDEzRkZCRjZECi06MTBFMTEwMDAzNDYyMDA0MDMwQjgwMTAwMTMwMDAwMEZBRjgyMDAwQ0UxCi06MTBFMTIwMDAzQzFGMDAyMDAwQkZDODI0MTMyMDAwMDUzQzBBODAwMENCCi06MTBFMTMwMDAzQzAzMDAwNDAwQTMxMDI0MTA0MDAwQzgwMDAwMDAwMEFECi06MTBFMTQwMDA5NTQ5MDExRTk1NDgwMTFDMzEyNkZGRkYwMDA4M0MwMDNGCi06MTBFMTUwMDAwMEM3MjAyNUFGODQwMDAwM0MwRDgwMDA5NUFDMDEwQzY5Ci06MTBFMTYwMDAzMEFCMTAwMDExNjAwMDA4MzE4NkZGRkYzMEFFMDAyMDk4Ci06MTBFMTcwMDAxNUMwMDAwNjI0MTEwMDA1M0MxMDEwMDAwMEIwNzgyNEUyCi06MTBFMTgwMDAxNUUwMDA3MzNDMUYwQzAwMjQxMTAwMDEzMEEyMDEwMEI3Ci06MTBFMTkwMDA1NDQwMDAwOTNDMEMwMDAxOEY4MzAwMTQ1NDYwMDAwNkI5Ci06MTBFMUEwMDAzQzBDMDAwMThGODcwMDBDMzBFNDQwMDAxMDgwMDA5QTg2Ci06MTBFMUIwMDAzQzBBMUYwMTNDMEMwMDAxMDBBQzMwMjQxNEMwMDA2QzcwCi06MTBFMUMwMDAzQzEwODAwMDhGODQwMDBDMzA5MzQwMDAxMjYwMDAwNkU5Ci06MTBFMUQwMDAzQzAzMTAwMDNDMTkwRjAwMDBCOUMwMjQxMzAwMDA4QjUxCi06MTBFMUUwMDAzQzFGODAwMDNDMDMxMDAwMDBBMzEwMjQxMDQwMDAyQ0IyCi06MTBFMUYwMDAzQzA2ODAwMDNDMDcwODAwOENFNzAwMzAxNEUwMDA3MzA4Ci06MTBFMjAwMDAzMDg4NDAwMDMwQTYwMTAwMTBDMDAwOTgzQzBFMEYwMDdFCi06MTBFMjEwMDAwMEFFNjgyNDNDMEMwMjAwMTFBQzAwOTQ4RjkzMDAwMDA3Ci06MTBFMjIwMDAwMjcyODAyNDAyMTQ3ODIxOTFGNDAwMDQyNjkyMDAwNEUyCi06MTBFMjMwMDAwMDEyMjFDMDNDMEU4MDAwOTVDNjAxMEUzNjI3MDAwMjU4Ci06MTBFMjQwMDAyNEQ0MDAwNDMyODZGRkZGMjQwNTAwMDIwRTAwMEYwNEQwCi06MTBFMjUwMDAwMDAwMDAwMDhGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzhCCi06MTBFMjYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwMDAwMTAyMTgxCi06MTBFMjcwMDAwM0UwMDAwODI3QkQwMDI4MDBBQjUwMjQxMTQwRkY5RTlBCi06MTBFMjgwMDAzMEFGMjAwMDhGOEMwMDBDM0MwRUZGRkYzNUNEN0ZGRkEwCi06MTBFMjkwMDAwMEFEMjgyNDM1ODM4MDAwMEEwMDBGREZBRjg1MDAwNDFECi06MTBFMkEwMDA4Q0QwNDAwMDMyMEYwMTAwMTFFMDAwM0MzMEI4MDEwMDdBCi06MTBFMkIwMDAzQzEwMDgwMDhFMTAwMDI0MTMwMDAwMTQzMjMzMDAwNEI4Ci06MTBFMkMwMDAzQzAyMEYwMDAwQTJGODI0M0MxOTAyMDAxM0Y5MDAwRkQxCi06MTBFMkQwMDA4RjgzMDAwMDk0QzkwMTBFMDIyMDM4MjEwMDcyNTgyNDU3Ci06MTBFMkUwMDAwMTc0NTAyMTkxNDgwMDA0MjUyNDAwMDQzMDg2RkZGRjZBCi06MTBFMkYwMDAyNTE0MDAwNDAwMTQyMUMwMjQwNTAwMDIwRTAwMEYwNEEwCi06MTBFMzAwMDAyNDEyRkZGRTAyMTI4MDI0MzIzMUZGRkIyNDA3MDAwMTk5Ci06MTBFMzEwMDAxMjA3MDA2RjMyMDYwMDAxMTRDMDAwOTAzQzBFODAwMDBFCi06MTBFMzIwMDAzMjBGMDAwNDExRTAwMDA0OEY5ODAwMDQzMzEwMDgwMDNECi06MTBFMzMwMDAxNjAwMDA3ODNDMUY4MDAwNTY2MEZGQzc4RkJGMDAyNDg2Ci06MTBFMzQwMDAwRTAwMEY2MzAwMDAwMDAwMEEwMDEwNDA4RkJGMDAyNDgxCi06MTBFMzUwMDAzQzE5MEJGRjAwQkZDMDI0MzczM0ZGRkYwMjc4ODgyQjI2Ci06MTBFMzYwMDA1MjIwRkY4QTI0MTEwMDAxMEEwMDEwMEQyNDExMDAwNTFCCi06MTBFMzcwMDAzQzBFMDgwMDhEQ0UwMEQ4OTYwRjAxMEUyNDA0MDA4MEJDCi06MTBFMzgwMDAyNUNEMDAwMTMxRTZGRkZGMjQwNTAwMDIzQzAxMDgwMDE1Ci06MTBFMzkwMDBBQzJEMDBEODBBMDAxMDNEMjQwNzAwMDMzQzEyMDgwMEYxCi06MTBFM0EwMDA4RTUyMDAyNDMyNDIwMDAxMTA0MEZGQUI4RkJGMDAyNDg4Ci06MTBFM0IwMDA5NEM2MDEwRTM2MjcwMDAyMDAwMDIwMjEyNEQ0MDAwNDU4Ci06MTBFM0MwMDAzMjg2RkZGRjBBMDAxMDNEMjQwNTAwMDIxMTAwRkY4RTc3Ci06MTBFM0QwMDAzMEE2MDEwMDNDMEIwRjAwMDBBQjUwMjQzQzA5MDEwMEFCCi06MTBFM0UwMDAwMTJBMjAyQjE0ODBGRjg4MDAwMDAwMDAzQzA1ODAwMERCCi06MTBFM0YwMDA5NEE2MDEwRTM2MjcwMDAyMjQwNDAwODAyNEQ0MDAwNEQxCi06MTBFNDAwMDAzMjg2RkZGRjBBMDAxMDNEMjQwNTAwMDI5N0UzMDExNjQzCi06MTBFNDEwMDAwQTAwMTAyNDNDMDMxMDAwMDBBQTQ4MjQzQzA4MTAwMDA1Ci06MTBFNDIwMDAxNTI4RkY2NTNDMEMwMDAxMzBDQjAyMDAxNTYwRkY2MzJFCi06MTBFNDMwMDAwMEFDMzAyNDNDMTQ4MDAwOTY5MjAxMEUzNjI3MDAwMjc2Ci06MTBFNDQwMDAwMDAwMjAyMTI2NDUwMDA0MzBBNkZGRkYwRTAwMEYzRkVDCi06MTBFNDUwMDAyNDA1MDAwMjBBMDAxMDQwOEZCRjAwMjQwRTAwMEY3MTM3Ci06MTBFNDYwMDAwMDAwMDAwMDBBMDAxMDAwOEY4NTAwMDQwMDAwMDAwMDdBCi06MTBFNDcwMDAzQzA2MDgwMDhDQzYwMEQwMDAwNTE2MDIzMDUwMDAwRjg0Ci06MTBFNDgwMDAzOERGMDAwMTJGRjkwMDAxMkUwMzAwMEMwMzIzQzAyNDA0Ci06MTBFNDkwMDAxNzAwRkY2ODAwMTAyMUMwMjYwOEZGRkMyRDA3MDAwNEFDCi06MTBFNEEwMDAxNEUwMDAwNzNDMEU4MDAwMzhDQTAwMDIyRDQ5MDAwMTJDCi06MTBFNEIwMDAwMTIzMjAyNDUwODAwMDBFMDAwNTMyNDIzQzBFODAwMEQzCi06MTBFNEMwMDA5NUM2MDEwRTAwMDAyMDIxMEEwMDEwM0EzNjI3MDAwMkVFCi06MTBFNEQwMDAzMjMzMDAwNDUyNjAwMDAxMzYzMTAwMDIzQzBDODAwMEVGCi06MTBFNEUwMDA5NTg2MDEwRTAyMjAzODIxMEEwMDEwOTkwMDAwMjAyMTkzCi06MTBFNEYwMDAwMDEwMTgyQjAwQzM1ODI0MTU2MDAwMEYzQzA1ODAwMDQ1Ci06MTBFNTAwMDAwMDEwMjFDMDNDMEU4MDAwOTVDNjAxMEUwQTAwMTAzQTkyCi06MTBFNTEwMDAzNjI3MDAwMjk3RjkwMTBFMDIyMDM4MjEyNDA0MDEwMDU5Ci06MTBFNTIwMDAyNzMxMDAwNDMyMjZGRkZGMEUwMDBGMDQyNDA1MDAwMkVECi06MTBFNTMwMDAwQTAwMTA3ODAwMDAwMDAwOTRBRDAxMEUwMDAwMjAyMUI4Ci06MTBFNTQwMDAyNDA1MDAwMjI1QUMwMDA0MzE4NkZGRkYwRTAwMEYwNEY1Ci06MTBFNTUwMDAzMjI3RkZGQjBBMDAxMEVCMDAxMDIxQzA5NUM1MDEwRTA5Ci06MTBFNTYwMDAwMjIwMzgyMTAwMDAyMDIxMjRBRDAwMDQzMUE2RkZGRjQ1Ci06MTBFNTcwMDAwRTAwMEYwNDI0MDUwMDAyMEEwMDEwNzIzMjMxRkZGQjY2Ci06MTBFNTgwMDAzQzA1ODAwMDhDQTcwMTQ4MjQwMzAwMDQzNEE2MDE4MEM4Ci06MTBFNTkwMDAwMDA3MjQwMjMwODIwMEZGMTA0MzAwMTAzQzA0ODAwMDdBCi06MTBFNUEwMDA4Qzg5MDFCODA1MjBGRkZFMDAwMDAwMDA4QzhGMDE0ODE3Ci06MTBFNUIwMDAyNDBEMDAwMjNDMEExMDAwMDAwRjc0MDJBNENFMDAwOEQzCi06MTBFNUMwMDBBMENEMDAwQjhDOEMwMTQ4QTRDQzAwMTA4QzhCMDE0NDk2Ci06MTBFNUQwMDBBQ0NCMDAyNDAzRTAwMDA4QUM4QTAxQjg4Q0E0MDE0MDU1Ci06MTBFNUUwMDAzQzAzODAwMDAwQzAyODIxOEM2NjAxQjgwNEMwRkZGRUY3Ci06MTBFNUYwMDAyNDA4MDAxQ0FDQTQwMDAwQTBBODAwMEIzQzA1MTAwMERGCi06MTBFNjAwMDBBQzY1MDFCODAzRTAwMDA4MDAwMDAwMDAyN0JERkZFODhBCi06MTBFNjEwMDBBRkIwMDAxMEFGQkYwMDE0M0MxMDYwMEM4RTBENTAwMDY2Ci06MTBFNjIwMDAyNDBFRkY3RjI0MDYwMDAzMDFBRTYwMjQzNTg4MzgwQ0Q5Ci06MTBFNjMwMDAzQzA1ODAwMEFFMDg1MDAwQUNBNjAwMDgzQzAxMDgwMDc0Ci06MTBFNjQwMDBBQzIwMDAyMDBFMDAxNTU1MDAwMDAwMDAzQzA4NjAxNkFDCi06MTBFNjUwMDA4RDBBMDAwMDNDMEJGRkZGM0MwOTAwMTAzNTIzODA1MTYwCi06MTBFNjYwMDAzQzA0NjAwMDAxNEIzODI0M0MwMjUzNTNBRTAzNTM3Q0ZFCi06MTBFNjcwMDAzNDg0MjAyMDNDMDUwODAwMjRBNTc5MDgyNDA2MDAwQURCCi06MTBFNjgwMDAxMEUyMDAwOTM1MDM3QzAwOEM3RjAwN0M4Qzc5MDA3OEQ3Ci06MTBFNjkwMDA4RkIwMDAxMEFGOUYwMDEwOEZCRjAwMTQyN0JEMDAxODZGCi06MTBFNkEwMDAwQTAwMTNCMUFGOTkwMDA4OEQwRjAwMDQzQzE4NjAwMEY4Ci06MTBFNkIwMDA4RkIwMDAxMDAxRjgxODIxOEM3RjAwN0M4Qzc5MDA3OEQ1Ci06MTBFNkMwMDBBRjlGMDAxMDhGQkYwMDE0MjdCRDAwMTgwQTAwMTNCMUMwCi06MTBFNkQwMDBBRjk5MDAwODNDMDQ4MDAwOEM4MzQwMDAzNDAyRkZGRkE3Ci06MTBFNkUwMDAxMDYyMDAzQTAwMDAwMDAwOEM4NzQwMDAzMEU1MDEwMDE1Ci06MTBFNkYwMDAxMEEwMDAyMTAwMDAwMDAwOTQ4NzAxMEUzQzAyMDgwMEQ5Ci06MTBFNzAwMDA4QzQyMDBFQzk0ODUwMTBFM0MwRDA4MDA4REFEMzFDQzlGCi06MTBFNzEwMDAzMEUzRkZGRjNDMTgwODAwOEYxODAwRTgzQzA5MDgwMEIwCi06MTBFNzIwMDA4RDI5MzFDODAwNDM2MDIxMzBBQkZGRkYwMTgzNzgyQjc2Ci06MTBFNzMwMDAwMDAwQzgyMTAxQUIxODIxMDAwMDUwMjEwMzE5NzAyMUVECi06MTBFNzQwMDAwMDZCMzAyQjAxMkE0MDIxMDFDRjIwMjEwMTA2MTAyMTJFCi06MTBFNzUwMDAzQzAxMDgwMEFDMkMwMEVDM0MwMTA4MDBBQzI0MDBFOEIzCi06MTBFNzYwMDAzQzAxMDgwMEFDMjMzMUNDM0MwMTA4MDBBQzIyMzFDODhDCi06MTBFNzcwMDAwM0UwMDAwODAwMDAwMDAwOEM4ODQwMDA4RjhDMDAwODM3Ci06MTBFNzgwMDAxMTBDMDAzMjNDMEQ4MDAwOTVBQjAxMEUzQzBBMDgwMEQ0Ci06MTBFNzkwMDA4RDRBMDBFNDNDMDgwODAwOEQwODAwRTAzMTY5RkZGRjY1Ci06MTBFN0EwMDAwMTQ5MjgyMTAwMDAzMDIxMDBBOTYwMkIwMTA2MzgyMUYxCi06MTBFN0IwMDAwMEVDMTAyMTNDMDEwODAwQUMyNTAwRTQzQzAxMDgwMEZECi06MTBFN0MwMDBBQzIyMDBFMDAzRTAwMDA4MDAwMDAwMDA5NDgzMDEwRThBCi06MTBFN0QwMDA5NDgyMDEwRTNDMTkwODAwOEYzOTAwRjQzQzA5MDgwMEFFCi06MTBFN0UwMDA4RDI5MzFDQzNDMEUwODAwOERDRTAwRjAzQzA4MDgwMDhECi06MTBFN0YwMDA4RDA4MzFDODMwNzhGRkZGMzA0QkZGRkYwMzM4MjgyMUU4Ci06MTBFODAwMDAwMTJCMTgyMTAwMDA3ODIxMDAwMDUwMjEwMEI4NjgyQjRFCi06MTBFODEwMDAwMUNGNjAyMTAwNkIzMDJCMDEwQTM4MjEwMThEMjAyMUFFCi06MTBFODIwMDAwMEU2MTAyMTNDMDEwODAwQUMyNTAwRjQzQzAxMDgwMDgyCi06MTBFODMwMDBBQzI0MDBGMDNDMDEwODAwQUMyMzMxQ0MzQzAxMDgwMEMyCi06MTBFODQwMDBBQzIyMzFDODAzRTAwMDA4MDAwMDAwMDA4Qzg5NDAwNEJECi06MTBFODUwMDA4Rjg2MDAxMDE1MjZGRkNDM0MwRDgwMDA5NDgzMDEwRTlFCi06MTBFODYwMDAzQzE5MDgwMDhGMzkzMUJDM0MwRTA4MDA4RENFMzFCODAwCi06MTBFODcwMDAzMDc4RkZGRjAzMzg1ODIxMDAwMDc4MjEwMTc4MjAyQkUxCi06MTBFODgwMDAwMUNGNjgyMTAxQTQ1MDIxM0MwMTA4MDBBQzJCMzFCQzEwCi06MTBFODkwMDAzQzAxMDgwMEFDMkEzMUI4MDNFMDAwMDgwMDAwMDAwMDg5Ci06MTBFOEEwMDAyN0JERkZFODNDMDU4MDAwQUZCRjAwMTRBRkIwMDAxMEVCCi06MTBFOEIwMDA4Q0IwMDEyOEFDQjAwMDIwOENBMzAxMDQ4Q0E0MDEwMDEyCi06MTBFOEMwMDBBRjgzMDAwNDBFMDAwRUQ2QUY4NDAwMEMwRTAwMTE1RjYzCi06MTBFOEQwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwQzAxMDQwMDAyNkVFCi06MTBFOEUwMDA4Rjg0MDAwNDNDMDcwODAwOENFNzAwQzQyNEU2MDAwMTg0Ci06MTBFOEYwMDAzQzAxMDgwMEFDMjYwMEM0M0MwMjgwMDA4QzQ0MDEyNDhBCi06MTBFOTAwMDAzQzFGNjAyMEFGRTQwMDE0MDAwMDAwMDAzQzA2ODAwMEMzCi06MTBFOTEwMDAzQzAzNDAwMEFDQzMwMTM4MDAwMDAwMDAxMjAwMDAxM0FCCi06MTBFOTIwMDA4RkJGMDAxNDI2MEYwMTQwMjYxOTAwODAyNDA0RkY4MEE5Ci06MTBFOTMwMDAwMUU0QzAyNDAzMjRGODI0MDAxRjY5NDAzMzJFMDA3RjIzCi06MTBFOTQwMDAwMDE4NTk0MDMxRUMwMDdGM0MwQTIwMDAzNTQ4MDAwMjk1Ci06MTBFOTUwMDAwMUFFMzgyNTAxNkM0ODI1MDEyODgwMjUwMEU4MjgyNUNFCi06MTBFOTYwMDBBQ0M1MDgzMEFDRDAwODMwOEZCRjAwMTQ4RkIwMDAxMDk5Ci06MTBFOTcwMDAwM0UwMDAwODI3QkQwMDE4M0MwOTAwMTAwMDg5NDAyNDZFCi06MTBFOTgwMDAxMTAwMDAwRjhGODMwMDBDMjQwREJGRkYwMDZENjAyNDY5Ci06MTBFOTkwMDAxMTgwMDAwNzI0MEY4N0ZGMDA2RjcwMjQxNUMwMDAxMzNCCi06MTBFOUEwMDAzQzE5MDA2MDAwOTlDMDI0MTMwMDAwMTAwMDAwMDAwMDEyCi06MTBFOUIwMDAwRTAwMENEMjAwMDAwMDAwMEEwMDEyMjEwMDAwMDAwMDJFCi06MTBFOUMwMDAzQzBCMDgwMDhENkIwMDIwMjU2QTAwMDEzQzAxMDgwMDBCCi06MTBFOUQwMDBBQzJBMDAyMDBFMDAwRkM1MDAwMDIwMjExMDQwRkZDQzAzCi06MTBFOUUwMDAzQzA2ODAwMDBBMDAxMUU5M0MwMjgwMDAwRTAwMTI4RUY1Ci06MTBFOUYwMDAwMDAwMDAwMDBBMDAxMjIxMDAwMDAwMDAyN0JERkZFODBGCi06MTBFQTAwMDAzQzAyODAwMEFGQkYwMDEwOEM0NjAxNDAzQzAzNzAwMDA4Ci06MTBFQTEwMDAzQzA1NDAwMEFDNDYwMDIwOEM0NDAxNDgwMDgzMjAyNDgzCi06MTBFQTIwMDAxMDg1MDAxMzAwQTQxMDJCMTA0MDAwMEIzQzA3MjAwMEExCi06MTBFQTMwMDAzQzA4NjAwMDEwODgwMDE3MDAwMDAwMDAzQzBBNDAwMEZECi06MTBFQTQwMDAzQzA5ODAwMEFEMkEwMTc4MDAwMDAwMDA4RkJGMDAxMDUzCi06MTBFQTUwMDAwM0UwMDAwODI3QkQwMDE4NTQ4N0ZGRjkzQzBBNDAwMDc2Ci06MTBFQTYwMDAwRTAwMTEwQTAwMDAwMDAwMEEwMDEyM0EzQzBBNDAwMEExCi06MTBFQTcwMDAwRTAwMTJCNDAwMDAwMDAwM0MwQTQwMDAzQzA5ODAwMDc3Ci06MTBFQTgwMDBBRDJBMDE3ODAwMDAwMDAwOEZCRjAwMTAwM0UwMDAwOEVECi06MTBFQTkwMDAyN0JEMDAxODBFMDAxRDZGMDAwMDAwMDAwQTAwMTIzQThBCi06MTBFQUEwMDAzQzBBNDAwMDI3QkRGRkUwQUZCMjAwMTgzQzEyODAwMEQ2Ci06MTBFQUIwMDBBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTAwRTAwMTEyRDlECi06MTBFQUMwMDAzNjUxMDA3MDhFMjYwMDAwQUY4NjAwMTg4RTI4MDAwMDk4Ci06MTBFQUQwMDAzQzBCMDgwMDhENkIwMEZDM0MwNzA4MDA4Q0U3MDBGODNECi06MTBFQUUwMDAwMTA2NjAyMzAxNkMyODIxMDAwMDQ4MjEwMEFDMzAyQjc2Ci06MTBFQUYwMDAwMEU5MTgyMTAwNjYyMDIxM0MwMTA4MDBBQzI1MDBGQzNCCi06MTBFQjAwMDAzQzAxMDgwMEFDMjQwMEY4OEU1MDAwMDAzMjAyMDAwM0UzCi06MTBFQjEwMDAxMDQwRkZFRTAxMDAzMDIxOEUyNjAwMDAzQzA1MDgwMDY5Ci06MTBFQjIwMDA4Q0E1MDBGQzNDMUYwODAwOEZGRjAwRjgwMEM4MTgyM0NDCi06MTBFQjMwMDAwMEEzNzgyMTAwMDAxMDIxMDFFM0M4MkIwM0UyQzAyMUNCCi06MTBFQjQwMDAwMzE5NzAyMTMyMEQwMDAxM0MwMTA4MDBBQzJGMDBGQ0JDCi06MTBFQjUwMDBBRjg4MDAxODNDMDEwODAwQUMyRTAwRjgxNUEwMDAwODkyCi06MTBFQjYwMDAwMDAwMDAwMDMyMDgwMDAyMTEwMEZGRDYwMDAwMDAwMDgzCi06MTBFQjcwMDAwRTAwMTIyOTAwMDAwMDAwMEEwMDEyNUIwMDAwMDAwMEQ1Ci06MTBFQjgwMDAwRTAwMTFEMjAwMDAwMDAwMEEwMDEyODQzMjA4MDAwMkI4Ci06MTBFQjkwMDAzQzAzODAwMDhDNjQwMTAwMzA4MjAwM0UxNDQwMDAwODc5Ci06MTBFQkEwMDAwMDAwMDAwMEFDNjAwMDQ4OEM2NjAxMDAzMEM1MDdDMDYyCi06MTBFQkIwMDAxMEEwMDAwNTAwMDAwMDAwQUM2MDAwNENBQzYwMDA1MEVDCi06MTBFQkMwMDAwM0UwMDAwODI0MDIwMDAxQUM2MDAwNTRBQzYwMDA0MDg3Ci06MTBFQkQwMDA4QzY4MDEwMDMxMDczODAwMTBFMEZGRjkwMDAwMDAwMEU4Ci06MTBFQkUwMDAyNDAyMDAwMTAzRTAwMDA4QUM2MDAwNDQzQzAzOTAwMEY0Ci06MTBFQkYwMDAzNDYyMDAwMTAwODIyMDI1M0MwMzgwMDBBQzY0MDAyMEM4Ci06MTBFQzAwMDA4QzY1MDAyMDA0QTBGRkZFMDAwMDAwMDAwM0UwMDAwODY3Ci06MTBFQzEwMDAwMDAwMDAwMDNDMDI4MDAwMzQ0MzAwMDEwMDgzMjAyNUY2Ci06MTBFQzIwMDAwM0UwMDAwOEFDNDQwMDIwMjdCREZGRDhBRkIxMDAxNEJBCi06MTBFQzMwMDAzQzA0ODAwMEFGQkYwMDIwQUZCMzAwMUNBRkIyMDAxODhGCi06MTBFQzQwMDBBRkIwMDAxMDhDOTIwMTQwOEM5MDAxNDgyNDAyMDAwRTVECi06MTBFQzUwMDAwMDEwOEMwMjMyMjMwMEZGMTA2MjAwNTkwMjA0MjgyNEE1Ci06MTBFQzYwMDAyODY2MDAwRjEwQzAwMDEzMjg2QTAwMzcyNDA3MDAwNjJBCi06MTBFQzcwMDAxMDY3MDA4RTI4NjgwMDA3NTEwMDAwMkQyNDA0MDAwOTQ5Ci06MTBFQzgwMDAxMDYwMDA3ODNDMDY4MDAwMjQwOTAwMDExMDY5MDBCMDgzCi06MTBFQzkwMDAwMDAwMDAwMDAwMDAwMDBEOEZCRjAwMjA4RkIzMDAxQzlCCi06MTBFQ0EwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODdECi06MTBFQ0IwMDAyN0JEMDAyODExNDAwMDU5MjQwRDAwMzgyODZCMDAzNTZECi06MTBFQ0MwMDAxMTYwMDAwNTNDMDU4MDAwMjQwQzAwMUYxNDZDRkZGMTRFCi06MTBFQ0QwMDAwMDAwMDAwMDNDMDU4MDAwOENCODAxQjgwNzAwRkZGRTcyCi06MTBFQ0UwMDAzNEI5MDE4MEFGMzIwMDAwMjQxRjAwMDEyNDEyMDAwMjU5Ci06MTBFQ0YwMDAzQzAyMTAwMEFGMjAwMDA0QTczMTAwMDhBMzNGMDAwQTI3Ci06MTBFRDAwMDBBMzMyMDAwQkE3MzAwMDEwQUYyMDAwMjRBRjIwMDAyODUyCi06MTBFRDEwMDBBQ0EyMDFCODhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxOEM3Ci06MTBFRDIwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODQ5Ci06MTBFRDMwMDAxMDY0MDAyMzI0MDUwMDBCMTQ2NUZGRDYzMjE4RkZGRjcyCi06MTBFRDQwMDAxNzAwMDAyMDNDMDU4MDAwOEY5M0ZFRDQ5MjdGMDAwNUMxCi06MTBFRDUwMDAzM0Y5MDAwNDE3MjBGRkNGMDAwMDAwMDAwRTAwMTJBNUI5Ci06MTBFRDYwMDAwMjQwMjAyMTkyNjkwMDA1MDI0MDIwMjEzNTI4MDAwNDNDCi06MTBFRDcwMDAwRTAwMTJBRkEyNjgwMDA1OTI2NzAwMDUzMEUyMDAwNEExCi06MTBFRDgwMDAxNDQwMDAwMjAwMDAwMDAwMDAwMDAwMEQ5MjZCMDAwMDIzCi06MTBFRDkwMDAyNDA2MDAyMDMxNkEwMEZGMTU0NjAwMEEzQzA1ODAwMDY5Ci06MTBFREEwMDA4Q0E0MDFCODA0ODBGRkZFMzRBRDAxODAyNDBFMDAwNTYwCi06MTBFREIwMDAzQzBDMTAwMEFEQjIwMDAwQTFBRTAwMEJBQ0FDMDFCODMxCi06MTBFREMwMDAzQzA1ODAwMDhDQTMwMUI4MDQ2MEZGRkUzNEFGMDE4MEQ1Ci06MTBFREQwMDAyNDEzMDAwMkFERTAwMDAwQURGMjAwMDRBNUYxMDAwODJDCi06MTBFREUwMDBBMUYzMDAwQUExRjMwMDBCQTVGMDAwMTBBREUwMDAyNDkwCi06MTBFREYwMDA4Q0IxMDE0NDNDMTAxMDAwQURGMTAwMjhBQ0IwMDFCODVBCi06MTBFRTAwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDg5Ci06MTBFRTEwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgxMDZERkZBRDgzCi06MTBFRTIwMDAyNDBFMDA4MDE0NkVGRjlCMDAwMDAwMDAzQzA1ODAwMDUzCi06MTBFRTMwMDA4Q0EzMDFCODA0NjBGRkZFMzRBRjAxODAyNDEyMDAwMkVECi06MTBFRTQwMDBBMUYyMDAwQkE1RjEwMDA4QTVGMDAwMTA4Q0IzMDE0NDVECi06MTBFRTUwMDAzQzAyMTAwMEE1RjMwMDEyQUNBMjAxQjgwQTAwMTJGMEE3Ci06MTBFRTYwMDA4RkJGMDAyMDhDQzMwMUI4MDQ2MEZGRkUzNEQzMDE4MDQzCi06MTBFRTcwMDBBRTcyMDAwMEFFNjAwMDA0MjQxMjAwMDFBNjcxMDAwODBBCi06MTBFRTgwMDAyNDExMDAwMkEyNzIwMDBBQTI3MTAwMEJBNjcwMDAxMEU5Ci06MTBFRTkwMDA4Q0QwMDE0NDNDMEYxMDAwQUU3MDAwMjRBRTYwMDAyOEZFCi06MTBFRUEwMDBBQ0NGMDFCODBBMDAxMzJCOEZCRjAwMjAzQzAzODAwMEI5Ci06MTBFRUIwMDA4QzY2MDFCODA0QzBGRkZFMzQ2MjAxODAzQzA2MDgwMDg1Ci06MTBFRUMwMDA5MEM2N0FCOEFDNTIwMDAwMTBDMDAwMDMwMDAwMzgyMTkwCi06MTBFRUQwMDAzQzA3MDgwMDhDRTc3QUMwM0MwNTgwMDAzNEFBMDE4MDFBCi06MTBFRUUwMDAyNDA0MDAwMjM0Q0MwMDAxQUM0NzAwMDRBNTUxMDAwODAyCi06MTBFRUYwMDBBMTRDMDAwQUExNDQwMDBCQTU1MDAwMTA4Q0FCMDE0NEFBCi06MTBFRjAwMDAwMDAwMjAyMTAxNDAyODIxQUQ0QjAwMjQxMEMwMDAwMzQ3Ci06MTBFRjEwMDA4RkJGMDAyMDNDMDQwODAwOEM4NDdBQkM4RkIzMDAxQzk3Ci06MTBFRjIwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAzQzBFMTAwMDhCCi06MTBFRjMwMDAzQzBEODAwMDI3QkQwMDI4QUNBNDAwMjhBREFFMDFCODcwCi06MTBFRjQwMDAzQzAxMDgwMEEwMjA3QUI4MDNFMDAwMDgwMDAwMDAwMDlGCi06MTBFRjUwMDAxMEEwMDAwQjNDMDY4MDAwOEM5ODAxNDQyNDE5MDAwMjhDCi06MTBFRjYwMDAzQzAxMDgwMEEwMzk3QUI4M0MwMTA4MDBBQzMyN0FDMEY0Ci06MTBFRjcwMDAzQzAxMDgwMEFDMzg3QUJDMEEwMDEzMkI4RkJGMDAyMDdDCi06MTBFRjgwMDA4Q0RGMDFCODA3RTBGRkZFMzRDNzAxODAyNDA5MDAwMkNFCi06MTBFRjkwMDBBQ0UwMDAwMEFDRjIwMDA0QTRGMTAwMDhBMEU5MDAwQTEzCi06MTBFRkEwMDBBMEU5MDAwQkE0RjAwMDEwQUNFMDAwMjQ4Q0M4MDE0NEUwCi06MTBFRkIwMDAzQzAyMTAwMEFDRTgwMDI4QUNDMjAxQjgwQTAwMTMyQkQ4Ci06MTBFRkMwMDA4RkJGMDAyMDI3QkRGRkU4QUZCRjAwMTAwRTAwMEVENjk4Ci06MTBFRkQwMDAwMDAwMDAwMDNDMDI4MDAwOEZCRjAwMTAwMDAwMjAyMUQ0Ci06MTBFRkUwMDBBQzQwMDE4MDBBMDAwRkM1MjdCRDAwMTgzMDg0RkZGRjI4Ci06MTBFRkYwMDAzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMUJCCi06MTBGMDAwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQjFDCi06MTBGMDEwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNzMwCi06MTBGMDIwMDAwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNEZECi06MTBGMDMwMDBBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwODNECi06MTBGMDQwMDAwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDExCi06MTBGMDUwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjA3Ci06MTBGMDYwMDAxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDlBCi06MTBGMDcwMDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDcxCi06MTBGMDgwMDBBRkJGMDAxQzk0ODYwMDBDMDBBMDkwMjEyNDkwMDAxNEI3Ci06MTBGMDkwMDAwMDA2MUIwMjAwMDMxMDgwMDA0NDg4MjEwMDAwMzAyMTdDCi06MTBGMEEwMDAwMEEwMjAyMTBFMDAxM0JCMjQwNTAwMDUwMjExMjAyQjE3Ci06MTBGMEIwMDAxMDgwMDAxMjAwMDAxMDIxOTIwMzAwMDAyQzY1MDAwOTRFCi06MTBGMEMwMDA1MEEwMDAwOTkyMDIwMDAxMDAwMzQ4ODAzQzBBMDgwMDk5Ci06MTBGMEQwMDAyNTRBNzkzQzAxMkE0MDIxOEQwNzAwMDAwMEUwMDAwODA0Ci06MTBGMEUwMDAwMDAwMDAwMDkyMDIwMDAxMDIwMjgwMjEwMjExMjAyQjg4Ci06MTBGMEYwMDA1NDgwRkZGMjkyMDMwMDAwMDAwMDEwMjE4RkJGMDAxQzFCCi06MTBGMTAwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODE4Ci06MTBGMTEwMDAyN0JEMDAyMDBBMDAxM0Q1MjYxMDAwMDE5MjBDMDAwMTIzCi06MTBGMTIwMDAyNDBCMDAwQzE1OEIwMDQwMDIzMDcwMjMyRENEMDAwQUZCCi06MTBGMTMwMDAxNUEwMDAzRDI2MDgwMDA2OEU0MzAwMDAyNjAyMDAwMkFFCi06MTBGMTQwMDAzNDY0MDEwMEFFNDQwMDAwOTIxRjAwMDI5MDU5MDAwMTk3Ci06MTBGMTUwMDA5MDRFMDAwMjkwNEIwMDAzMDAxRjdFMDAwMDE5QzQwMDc3Ci06MTBGMTYwMDAwMUY4NjAyNTAwMEU2QTAwMDE4RDUwMjUwMTRCNDgyNUVECi06MTBGMTcwMDBBRTQ5MDAwNDkyMDcwMDA2OTEwNTAwMDE5MTA0MDAwMkM3Ci06MTBGMTgwMDA5MTE5MDAwMzAwMDcxRTAwMDAwNTM0MDAwMDY2RjgyNUYxCi06MTBGMTkwMDAwMDA0MTIwMDAzRTJDMDI1MDMxOTc4MjUyNjEwMDAwQTk2Ci06MTBGMUEwMDAwQTAwMTNENUFFNEYwMDA4OTIxRjAwMDEyNjA0MDAwMjhBCi06MTBGMUIwMDAyNDEwMDAwMjU3RjAwMDAxMDIyMDIwMjEwQTAwMTNENTdDCi06MTBGMUMwMDAwMDgwODAyMTkyMEUwMDAxMjQwRDAwMDMxNUNERkZDQjlECi06MTBGMUQwMDAyNDAyMDAwMThFNTkwMDAwOTIxODAwMDIyNjEwMDAwMzNDCi06MTBGMUUwMDAzNzJGMDAwOEEyNTgwMDEwMEEwMDEzRDVBRTRGMDAwMEI4Ci06MTBGMUYwMDA5MjA1MDAwMTI0MDYwMDA0MTRBNkZGQzAyNDAyMDAwMUE5Ci06MTBGMjAwMDA5MjBDMDAwMjkyMEIwMDAzOEU0OTAwMDAwMDBDNTIwMDg5Ci06MTBGMjEwMDAwMTRCNDAyNTM1MjcwMDA0MjYxMDAwMDRBRTQ4MDAwQ0ExCi06MTBGMjIwMDAwQTAwMTNENUFFNDcwMDAwMEEwMDEzRTkyNDAyMDAwMUNBCi06MTBGMjMwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAwRTAwMTJBNTRECi06MTBGMjQwMDAwMDgwODAyMTNDMDQ4MDA4MzQ4MzAwODA5MDY1MDAyNTg0Ci06MTBGMjUwMDAwMjAwMjAyMTM0QTIwMDIwMEUwMDEyQUZBMDYyMDAyNTdGCi06MTBGMjYwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTAwQTAwMEM5RUY2Ci06MTBGMjcwMDAyN0JEMDAxODNDMDM4MDAwMjdCREZGRjgzNDYyMDE4MEUxCi06MTBGMjgwMDBBRkEyMDAwMDMwOEMwMEZGMzBBRDAwRkYzMENFMDBGRjk5Ci06MTBGMjkwMDAzQzBCODAwMDhENjQwMUI4MDQ4MEZGRkUwMDAwMDAwMDdDCi06MTBGMkEwMDA4RkE5MDAwMDhENjgwMTI4OEZBQTAwMDA4RkE3MDAwMDk5Ci06MTBGMkIwMDA4RkE0MDAwMDI0MDUwMDAxMjQwMjAwMDJBMDg1MDAwQTlBCi06MTBGMkMwMDA4RkEzMDAwMDM1OTk0MDAwM0MwNTEwMDBBMDYyMDAwQkEwCi06MTBGMkQwMDA4RkI4MDAwMDhGQUMwMDAwOEZBNjAwMDA4RkFGMDAwMDM5Ci06MTBGMkUwMDAyN0JEMDAwOEFEMjgwMDAwQUQ0MDAwMDRBRDgwMDAyNDFCCi06MTBGMkYwMDBBQ0MwMDAyOEE0RjkwMDA4QTcwRDAwMTBBNUVFMDAxMjZDCi06MTBGMzAwMDAwM0UwMDAwOEFENjUwMUI4M0MwNjgwMDgyN0JERkZFOEIyCi06MTBGMzEwMDAzNEM1MDA4MEFGQkYwMDEwOTBBNzAwMDkyNDAyMDAxMjdFCi06MTBGMzIwMDAzMEUzMDBGRjEwNjIwMDBCMDA4MDMwMjE4Q0E4MDA1MEY5Ci06MTBGMzMwMDAwMDg4MjAyMzA0ODAwMDA4OEZCRjAwMTA4Q0FBMDAzNEFFCi06MTBGMzQwMDAyNDA0MDAzOTAwMDAyODIxMDBDQTQ4MjMwNTIwMDAwNUI0Ci06MTBGMzUwMDAyNDA2MDAxMjhGQkYwMDEwMjQwMjAwMDEwM0UwMDAwODAxCi06MTBGMzYwMDAyN0JEMDAxODBFMDAxNDQ3MDAwMDAwMDA4RkJGMDAxMERBCi06MTBGMzcwMDAyNDAyMDAwMTAzRTAwMDA4MjdCRDAwMTgyN0JERkZDOEQ0Ci06MTBGMzgwMDBBRkIxMDAyQzAwQTA4ODIxQUZCMjAwMzAyN0E1MDAxMDNCCi06MTBGMzkwMDAwMDgwOTAyMTAyMjAyMDIxQUZCRjAwMzQwRTAwMTNDNjUwCi06MTBGM0EwMDBBRkIwMDAyODE0NDAwMDgxM0MwQzgwMDg5MThCMDAxMTA0Ci06MTBGM0IwMDA5MThBMDAxMjM1ODYwMDgwOENDODAwNTQzMTY1MDBGRkE4Ci06MTBGM0MwMDAzMTQ5MDBGRjAwQTkyODIxMDBBODM4MkIxNEUwMDA0Rjg0Ci06MTBGM0QwMDA4RkEzMDAxMDk0REYwMDVDMzA2NjAwMDQxMEMwMDA1NjVDCi06MTBGM0UwMDAzM0U0RkZGRjhGQTIwMDFDMDA4MjEwMkI1NDQwMDAwNTY1Ci06MTBGM0YwMDAyQzgzMDA4MDMwNjcwMDA0MTRFMDAwN0UyNDA0MDIxODhGCi06MTBGNDAwMDAyQzgzMDA4MDEwNjAwMDAyMDA4MDgwMjEyNDEwMDA4MDg2Ci06MTBGNDEwMDAwRTAwMTJBNTAyNDAyMDIxM0MwMzgwMDgzNDY2MDA4MEMzCi06MTBGNDIwMDAyNDA3MDAwMUFDQzcwMDBDOTBDMjAwMDgwMDEwNjA0MDI3Ci06MTBGNDMwMDAzNDY3MDEwMDMwNUYwMDdGQTBERjAwMDg4RTM5MDAwNEQwCi06MTBGNDQwMDAyNzM4MDAwMUFDRDgwMDMwQTREMDAwNUM4Q0NFMDAzQzQyCi06MTBGNDUwMDA5NjJGMDAwRTAxQ0Y2ODIxQUNDRDAwMjA4Q0NCMDAzQzU0Ci06MTBGNDYwMDAwMTZDNTAyMUFDQ0EwMDFDOEUyOTAwMDRBQ0U5MDAwMERDCi06MTBGNDcwMDA4RTI1MDAwOEFDRTUwMDA0OEZBODAwMTAzMTA0MDAwOEI4Ci06MTBGNDgwMDA1NDgwMDAyRjkzQTYwMDIwQTBDMDAwNEU5MEM1MDA0RUNGCi06MTBGNDkwMDAyNDA4RkZERjNDMTg4MDA4QTBFNTAwMDg5MEM0MDAwODlECi06MTBGNEEwMDAzNzBDMDA4MDI0MDkwMDUwMDA4ODgwMjRBMEQwMDAwODc4Ci06MTBGNEIwMDA4RTM5MDAwOEFEOTkwMDM4OEYwRTAwMTQ4RDhGMDAzMDAyCi06MTBGNEMwMDAwMUNGNjgyMUFEOEQwMDM0OTE4QjAwMDAzMTZBMDBGRkJGCi06MTBGNEQwMDAxMTQ5MDAyOTI2NDgwMTAwMEUwMDEyQUYwMjQwMjAyMUU4Ci06MTBGNEUwMDAyNDA0MDAzODAwMDAyODIxMEUwMDE0NDcyNDA2MDAwQUQ2Ci06MTBGNEYwMDA4RkJGMDAzNDhGQjIwMDMwOEZCMTAwMkM4RkIwMDAyODQ2Ci06MTBGNTAwMDAyNDAyMDAwMTAzRTAwMDA4MjdCRDAwMzg5NEQ4MDA1QzA1Ci06MTBGNTEwMDA4Q0QwMDA1NDMzMEVGRkZGMDIwNTc4MjMwMUNGNjgyQkY3Ci06MTBGNTIwMDAxNUEwRkZBQzhGQTMwMDEwOENEOTAwNTQzMDY2MDAwNEU2Ci06MTBGNTMwMDAxNEMwRkZBQzAzMjUyMDIzMEEwMDE0QTUyQzgyMDIxODU2Ci06MTBGNTQwMDAzQzE4ODAwODM3MEMwMDgwQTBFNjAwMDg4RTM5MDAwOEJGCi06MTBGNTUwMDAyNDA5MDA1MEFEOTkwMDM4OEYwRTAwMTQ4RDhGMDAzMEIzCi06MTBGNTYwMDAwMUNGNjgyMUFEOEQwMDM0OTE4QjAwMDAzMTZBMDBGRjFFCi06MTBGNTcwMDAxNTQ5RkZEOTI2NDgwMTAwMjQwNkZGODAwMTA2MjgyNEVBCi06MTBGNTgwMDAzQzA0ODAwMEFDODUwMDI4OEUyNzAwMDgzMTAzMDA3RkYyCi06MTBGNTkwMDAzQzEwODAwQzAwNzBGODIxQUZFNzAwRDA4RTIyMDAwOEVDCi06MTBGNUEwMDBBRjlGMDAyNDBBMDAxNEUwQUZFMjAwRDQ4RTIzMDAwOENECi06MTBGNUIwMDAzQzA0ODAwODM0ODIwMDgwQUM0MzAwNTQwMjQwMjAyMTg3Ci06MTBGNUMwMDAwRTAwMTQzNkFDNDAwMDMwMjQwNDAwMzgyNDA1MDA4REIxCi06MTBGNUQwMDAwRTAwMTQ0NzI0MDYwMDEyOEZCRjAwMzQ4RkIyMDAzMDkzCi06MTBGNUUwMDA4RkIxMDAyQzhGQjAwMDI4MjQwMjAwMDEwM0UwMDAwODM2Ci06MTBGNUYwMDAyN0JEMDAzODBBMDAxNEFBOEZBNDAwMUMyN0JERkZFODBECi06MTBGNjAwMDBBRkJGMDAxMDkwQTYwMDBEMzBDNzAwMTAxMEUwMDAwQzM2Ci06MTBGNjEwMDAwMDgwNDAyMTNDMDI4MDA4OEM0NDAwMDQ4Q0EzMDAwODM4Ci06MTBGNjIwMDAxMDY0MDAwODMwQzkwMDA0MzBDNTAwMDQxMEEwMDAxQzlDCi06MTBGNjMwMDA4RkJGMDAxMDI0MDIwMDAxMDNFMDAwMDgyN0JEMDAxODVFCi06MTBGNjQwMDAzMEM5MDAwNDExMjAwMDEwMzBDQjAwMTIxMEUwRkZGOTg3Ci06MTBGNjUwMDA4RkJGMDAxMDNDMDg4MDA4OENBNzAwMDg4RDA2MDAwNEFFCi06MTBGNjYwMDAxNEU2RkZGNTI0MDIwMDAxMjQwNDAwMzgyNDA1MDA4RDZGCi06MTBGNjcwMDAwRTAwMTQ0NzI0MDYwMDEyOEZCRjAwMTAyNDAyMDAwMTYwCi06MTBGNjgwMDAwM0UwMDAwODI3QkQwMDE4MjQwQTAwMTIxNTZBRkZFOUVDCi06MTBGNjkwMDA4RkJGMDAxMDAxMDAyMDIxMEEwMDE0ODkyN0JEMDAxODI3Ci06MTBGNkEwMDAwMDAwMjAyMTBBMDAwQ0I4MjdCRDAwMTgzQzA1MDgwMDA2Ci06MTBGNkIwMDAyNEE1NTU5ODNDMDQwODAwMjQ4NDczNTgzQzAyMDgwMDkzCi06MTBGNkMwMDAyNDQyNTVBMDI0MDMwMDA2M0MwMTA4MDBBQzI1N0FDODVBCi06MTBGNkQwMDAzQzAxMDgwMEFDMjQ3QUNDM0MwMTA4MDBBQzIyN0FEMDcyCi06MTBGNkUwMDAzQzAxMDgwMEEwMjM3QUQ0MDNFMDAwMDgwMDAwMDAwMEQ5Ci06MTBGNkYwMDAwM0UwMDAwODI0MDIwMDAxM0MwMjgwMDAzMDg4MDBGRjgzCi06MTBGNzAwMDAzNDQ3MDE4MDNDMDY4MDAwOENDMzAxQjgwNDYwRkZGRUQyCi06MTBGNzEwMDAwMDAwMDAwMDhDQzUwMTI4MjQxOEZGODAzQzBEODAwQUUxCi06MTBGNzIwMDAyNEFGMDEwMDAxRjg3MDI0MzFFQzAwN0ZBQ0NFMDAyNDNFCi06MTBGNzMwMDAwMThEMjAyMUFDRTUwMDAwOTQ4QjAwREEzNTA5NjAwMEQyCi06MTBGNzQwMDAyNDA4MDAwMjMxNkFGRkZGQUNFQTAwMDQyNDAyMDAwMTMxCi06MTBGNzUwMDBBNEU5MDAwOEEwRTgwMDBCQUNFMDAwMjQzQzA3MTAwMDdFCi06MTBGNzYwMDBBQ0M3MDFCOEFGODQwMDI0MDNFMDAwMDhBRjg1MDA1NEEzCi06MTBGNzcwMDA4Qzk5MDAwNDhGOEQwMDI0MjQwOUZGQkYwMzI1QzAyMzJBCi06MTBGNzgwMDBBQzk4MDAwNDkxQUYwMEM0MjQwM0ZGRUYzMUVFMDA3RjdBCi06MTBGNzkwMDBBMUFFMDBDNDhDOEMwMDIwOTM4QjAwMzA4Rjg2MDAyNDk3Ci06MTBGN0EwMDAzNThBMDAwMkFGOEIwMDQ4QTc4MDAwNDRBQzhBMDAyMDU1Ci06MTBGN0IwMDBBNEMwMDBBQzkwQzgwMEM0MDEwOTM4MjRBMEM3MDBDNDhDCi06MTBGN0MwMDA4Rjg0MDAyNEFDODAwMERDOTA4NTAwQzQwMEEzMTAyNDRBCi06MTBGN0QwMDAwM0UwMDAwOEEwODIwMEM0M0MwMjgwMDAzNDQ1MDE4MEEwCi06MTBGN0UwMDAzQzA0ODAwMDhDODMwMUI4MDQ2MEZGRkU4Rjg5MDA1NEM0Ci06MTBGN0YwMDAyNDA3NjA4MzI0MDYwMDAyQUNBOTAwMDA4Qzg4MDEyNDQxCi06MTBGODAwMDBBQ0E4MDAwNEE0QTcwMDA4QTBBNjAwMEIzQzA1MTAwMEFCCi06MTBGODEwMDAwM0UwMDAwOEFDODUwMUI4OTM4ODAwMzA4Rjg5MDA0ODY4Ci06MTBGODIwMDA4RjgyMDAyNDMwQzYwMEZGMDEwOTM4MjMzMEU5MDBGRjMxCi06MTBGODMwMDAwMTIyMTgyMTMwQTUwMEZGMjQ2ODAwNzgxMEMwMDAwMkMyCi06MTBGODQwMDAwMTI0MzgyMTAwODAzODIxMzBFNDAwMDMxNDgwMDAwM0IzCi06MTBGODUwMDAzMEFBMDAwMzExNDAwMDBEMzEyQjAwMDMxMEEwMDAwOTU1Ci06MTBGODYwMDAwMDAwMTAyMTkwRUQwMDAwMjQ0RTAwMDEzMUMyMDBGRjg1Ci06MTBGODcwMDAwMDQ1NjAyQkExMEQwMDAwMjRFNzAwMDExNTgwRkZGOTcxCi06MTBGODgwMDAyNTA4MDAwMTAzRTAwMDA4MDAwMDAwMDAxNTYwRkZGM0Y4Ci06MTBGODkwMDAwMDAwMDAwMDEwQTBGRkZCMDAwMDEwMjE4Q0Y4MDAwMDA5Ci06MTBGOEEwMDAyNDU5MDAwNDMzMjIwMEZGMDA0NTc4MkJBRDE4MDAwMEQ2Ci06MTBGOEIwMDAyNEU3MDAwNDE1RTBGRkY5MjUwODAwMDQwM0UwMDAwODMwCi06MTBGOEMwMDAwMDAwMDAwMDkzODUwMDMwOTM4ODAwNDA4Rjg3MDA0ODM3Ci06MTBGOEQwMDAwMDA0MzIwMDMxMDMwMDdGMDBFNTEwMkIzMEM0N0YwMEFDCi06MTBGOEUwMDAxMDQwMDAwRjAwNjQyODI1OEY4NDAwMjQzQzA5ODAwMDBDCi06MTBGOEYwMDA4QzhBMDBEQ0FEMkEwMEE0M0MwMzgwMDAwMEEzNTgyNUJDCi06MTBGOTAwMDBBQzZCMDBBMDhDNkMwMEEwMDU4MEZGRkUwMDAwMDAwMDI2Ci06MTBGOTEwMDA4QzZEMDBBQ0FDOEQwMERDMDNFMDAwMDg4QzYyMDBBOEFDCi06MTBGOTIwMDAwQTAwMTVFODhGODQwMDI0OTM4ODAwNDEzQzAyODAwMDdGCi06MTBGOTMwMDAwMDgwNTAyMTMxMDMwMEZFQTM4MzAwNDEzMEFCRkZGRjY0Ci06MTBGOTQwMDAzMENDMDBGRjMwRTdGRkZGMzQ0ODAxODAzQzA5ODAwMEU1Ci06MTBGOTUwMDA4RDI0MDFCODA0ODBGRkZFOEY4RDAwNTQyNDE4MDAxNkZBCi06MTBGOTYwMDBBRDBEMDAwMDhEMjIwMTI0OEY4RDAwMjRBRDAyMDAwNDE2Ci06MTBGOTcwMDA4RDU5MDAyMEE1MDcwMDA4MjQwMjAxQjRBMTE5MDAwQTJFCi06MTBGOTgwMDBBMTE4MDAwQjk1MkYwMTIwOEQ0RTAwMDg4RDQ3MDAwNDEzCi06MTBGOTkwMDA5NzgzMDA0NDhENTkwMDI0MDFDRjMwMjEwMEM3MjgyMUNFCi06MTBGOUEwMDAwMEEzMjAyMzI0MThGRkZGQTUwNDAwMENBNTBCMDAwRUM0Ci06MTBGOUIwMDBBNTAyMDAxMEE1MEMwMDEyQUQxOTAwMThBRDE4MDAyNDA2Ci06MTBGOUMwMDA5NUFGMDBEODNDMEIxMDAwMjQwN0ZGRjczMUVFRkZGRjg2Ci06MTBGOUQwMDBBRDBFMDAyODhEQUMwMDc0QUQwQzAwMkNBRDJCMDFCODIxCi06MTBGOUUwMDA4RDQ2MDAyMDAwQzcyODI0MDNFMDAwMDhBRDQ1MDAyMDE0Ci06MTBGOUYwMDA4Rjg4MDAyNDAwODA1ODIxMzBFN0ZGRkY5MTA5MDBDNjVFCi06MTBGQTAwMDAzQzAyODAwMDMwQTVGRkZGMzEyNDAwRkYwMDA0MUEwMEYzCi06MTBGQTEwMDAwMDY3NTAyNTMwQzYwMEZGMzQ0NzAxODAzQzA5ODAwMDU0Ci06MTBGQTIwMDA4RDJDMDFCODA1ODBGRkZFOEY4MjAwNTQyNDBGMDAxNzMzCi06MTBGQTMwMDBBQ0UyMDAwMDhEMzkwMTI0QUNGOTAwMDQ4RDc4MDAyMDdGCi06MTBGQTQwMDBBNEVBMDAwODI0MTkwMUI0QTBGODAwMEFBMEVGMDAwQkYyCi06MTBGQTUwMDA5NTIzMDEyMDhENkUwMDA4OEQ2RDAwMDQ5Nzg0MDA0NDZECi06MTBGQTYwMDAwMUMzNTAyMTAxNEQ2MDIxMDE4NDEwMjNBNEUyMDAwQzQ4Ci06MTBGQTcwMDBBNEU1MDAwRUE0RjkwMDEwQTRFNjAwMTJBQ0UwMDAxNDA2Ci06MTBGQTgwMDA4RDc4MDAyNDI0MERGRkZGQUNGODAwMTg4RDBGMDA2QzVBCi06MTBGQTkwMDBBQ0VGMDAxQzhEMEUwMDY4M0MwRjEwMDBBQ0VFMDAyMDk3Ci06MTBGQUEwMDBBQ0VEMDAyNDk1MEEwMEFFMjQwREZGRjczMTQ2RkZGRkIwCi06MTBGQUIwMDBBQ0U2MDAyODk1MEMwMDcwOTUwNDAwNzIzMTgzN0ZGRjNFCi06MTBGQUMwMDAwMDAzQ0EwMDMwODJGRkZGMDMyMkMwMjFBQ0Y4MDAyQ0UzCi06MTBGQUQwMDBBRDJGMDFCODk1MEUwMDcyOEQ2QTAwMjAwMEFFMzAyMTY2Ci06MTBGQUUwMDAwMTREMjgyNEE1MDYwMDcyMDNFMDAwMDhBRDY1MDAyMDQyCi06MTBGQUYwMDAzQzAyODAwMDM0NDYwMTgwM0MwNTgwMDA4Q0EzMDFCOEE0Ci06MTBGQjAwMDAwNDYwRkZGRTI0MDkwMDE4QUNDNDAwMDBBMEM5MDAwQjZCCi06MTBGQjEwMDA4Rjg4MDAyNDNDMDQxMDAwOTUwNzAwQUVBNEM3MDAxMDk1Ci06MTBGQjIwMDBBQ0MwMDAzMDAzRTAwMDA4QUNBNDAxQjgzQzAyODAwMDg3Ci06MTBGQjMwMDAzNDQ1MDE4MDNDMDQ4MDAwOEM4MzAxQjgwNDYwRkZGRUUyCi06MTBGQjQwMDA4RjhBMDAyQzI0MDYwMDE5OTU0OTAwMUMzMTI4RkZGRkRDCi06MTBGQjUwMDAwMDA4MzlDMEFDQTcwMDAwQTBBNjAwMEIzQzA1MTAwMEFGCi06MTBGQjYwMDAwM0UwMDAwOEFDODUwMUI4OEY4NzAwMzQwMDgwNDAyMTk1Ci06MTBGQjcwMDAzMEM0MDBGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTg4Ci06MTBGQjgwMDA4Rjg5MDA1NDkzODMwMDUwMzQ5OTYwMDBBQ0E5MDAwMDIxCi06MTBGQjkwMDBBMEEzMDAwNThDRTIwMDEwMjQwRjAwMDIyNDAzRkZGNzRECi06MTBGQkEwMDBBNEEyMDAwNkE0QjkwMDA4OEQxODAwMjBBMEI4MDAwQTdECi06MTBGQkIwMDBBMEFGMDAwQjhDRUUwMDAwQUNBRTAwMTA4Q0VEMDAwNDhBCi06MTBGQkMwMDBBQ0FEMDAxNDhDRUMwMDFDQUNBQzAwMjQ4Q0VCMDAyMDIxCi06MTBGQkQwMDBBQ0FCMDAyODhDRUEwMDJDM0MwNzEwMDBBQ0FBMDAyQzJGCi06MTBGQkUwMDA4RDA5MDAyNEFDQTkwMDE4QUNDNzAxQjg4RDA1MDAyMDEwCi06MTBGQkYwMDAwMEEzMjAyNDAzRTAwMDA4QUQwNDAwMjA5Mzg1MDA1MEZBCi06MTBGQzAwMDAyNDAzMDAwMTI3QkRGRkU4MDBBMzMwMDQyQ0EyMDAyMDNDCi06MTBGQzEwMDBBRkIwMDAxMEFGQkYwMDE0MDBDMDE4MjExMDQwMDAxMzk3Ci06MTBGQzIwMDAyNDEwRkZGRTNDMDcwODAwOENFNzMxOTAwMEU2MTAyNDBBCi06MTBGQzMwMDAzQzA4ODAwMDM1MDUwMTgwMTQ0MDAwMDUyNDA2MDA4NDNFCi06MTBGQzQwMDA4Rjg5MDAyNDI0MEEwMDA0MjQxMEZGRkZBMTJBMDBFQzVECi06MTBGQzUwMDAwRTAwMTY4NDAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxNDY3Ci06MTBGQzYwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgzQzA2MDgwMDE0Ci06MTBGQzcwMDA4Q0M2MzE5NDBBMDAxNkI2MDBDMzEwMjQ4Rjg3MDAyQzVFCi06MTBGQzgwMDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDU1Ci06MTBGQzkwMDBBRkJGMDAxQzMwRDAwMEZGOTBFNjAwMEQwMEEwODgyMTBGCi06MTBGQ0EwMDAwMDgwOTAyMTMwQzUwMDdGQTBFNTAwMEQ4Rjg1MDAyNEU1Ci06MTBGQ0IwMDA4RTIzMDAxODhDQTIwMEMwMTA2MjAwMkUyNDBBMDAwRUIxCi06MTBGQ0MwMDAwRTAwMTZBOUEzOEEwMDUwMjQwOUZGRkYxMDQ5MDAyMjQ0Ci06MTBGQ0QwMDAyNDA0RkZGRjUyMDAwMDIwMDAwMDIwMjE4RTI2MDAwMDk3Ci06MTBGQ0UwMDAzQzBDMDAxMDAwQ0M1ODI0MTU2MDAwMzkzQzBFMDAwODc0Ci06MTBGQ0YwMDAwMENFNjgyNDU1QTAwMDNGMDI0MDIwMjEzQzE4MDAwMjlECi06MTBGRDAwMDAwMEQ4ODAyNDEyMDAwMDFGM0MwQTAwMDQ4Rjg3MDAyQ0JBCi06MTBGRDEwMDA4Q0UyMDAxNDhDRTMwMDEwOENFNTAwMTQwMDQzRjgyM0ZGCi06MTBGRDIwMDAwM0U1QzgyQjEzMjAwMDA1MDI0MDIwMjE4RTI0MDAyQzVGCi06MTBGRDMwMDA4Q0YxMDAxMDEwOTEwMDMxMDI0MDIwMjEyNDAyMDAxMkE5Ci06MTBGRDQwMDBBMzgyMDA1MDBFMDAxNkE5MjQxMkZGRkYxMDUyMDAwMkQ5Ci06MTBGRDUwMDAyNDA0RkZGRjAwMDAyMDIxOEZCRjAwMUM4RkIyMDAxODc5Ci06MTBGRDYwMDA4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODU0Ci06MTBGRDcwMDAyN0JEMDAyMDkwQTgwMEM0MzUwNDAwMjAwQTAwMTZERjJCCi06MTBGRDgwMDBBMEE0MDBDNDAwQ0E0ODI0MTUyMDAwMEI4RjhCMDAyQ0FGCi06MTBGRDkwMDA4RjhEMDAyQzhEQUMwMDEwMTU4MDAwMEIwMjQwMjAyMUFGCi06MTBGREEwMDA4RTJFMDAyQzUxQzBGRkVDMDAwMDIwMjEwMjQwMjAyMUFCCi06MTBGREIwMDAwQTAwMTZGQTI0MDIwMDE3OEQ2NjAwMTA1MEMwRkZFNkY0Ci06MTBGREMwMDAwMDAwMjAyMTAyNDAyMDIxMEEwMDE2RkEyNDAyMDAxMTFFCi06MTBGREQwMDAwMjQwMjAyMTI0MDIwMDE1MEUwMDE2QTlBMzgyMDA1MDIzCi06MTBGREUwMDAyNDBGRkZGRjEwNEZGRkRDMjQwNEZGRkYwQTAwMTZFOTc5Ci06MTBGREYwMDA4RTI2MDAwMDBBMDAxNzIwMjQwMjAwMTQzQzA4MDAwNDhDCi06MTBGRTAwMDAwMEM4MzgyNDUwRTBGRkQ0MDAwMDIwMjEwMjQwMjAyMTA3Ci06MTBGRTEwMDAwQTAwMTZGQTI0MDIwMDEzOEY4NjAwMjQyN0JERkZFMDkzCi06MTBGRTIwMDBBRkIxMDAxNEFGQkYwMDE4QUZCMDAwMTA5MEMzMDBDNDUyCi06MTBGRTMwMDAzMEE1MDBGRjMwNjIwMDIwMTA0MDAwMDgwMDgwODgyMUJCCi06MTBGRTQwMDA4Q0NCMDBDMDI0MDlGRkRGMjU2QTAwMDFBQ0NBMDBDMENBCi06MTBGRTUwMDA5MEM4MDBDNDAxMDkzODI0QTBDNzAwQzQxNEEwMDA0MDAxCi06MTBGRTYwMDAzQzBDODAwMDhGODQwMDI0OTA4NzAwQzQyNDE4RkZCRkJFCi06MTBGRTcwMDAyNDA2RkZFRjMwRTMwMDdGQTA4MzAwQzQ5NzlGMDA0NDc3Ci06MTBGRTgwMDA4RjgyMDA0ODhGOEQwMDI0MDNFMkM4MjNBNzk5MDA0NDg1Ci06MTBGRTkwMDBBNUEwMDBBQzkxQUYwMEM0MDFGODcwMjRBMUFFMDBDNENECi06MTBGRUEwMDA4RjhDMDAyNEExODAwMEM3OEY4QTAwMjRBNTQwMDA3Mjk3Ci06MTBGRUIwMDBBRDQwMDBEQzkxNDUwMEM0MDBBNjU4MjRBMTRCMDBDNDBECi06MTBGRUMwMDA4RjkwMDAyMDhGODQwMDQ4OTc4NjAwNDQwMjA0MjgyMUU4Ci06MTBGRUQwMDAxMEMwMDAwRkFGODUwMDIwQTM4MDAwNDAzQzA3ODAwMEM5Ci06MTBGRUUwMDA4RTJDMDAwODk0RUQwMTIwOEUyQjAwMDQwMThENTAyMUYyCi06MTBGRUYwMDAwMTRCODAyMTAyMDYyMDIzMzA4NkZGRkYzMEM4MDAwRjBGCi06MTBGRjAwMDAzOTA5MDAwMTMxMzEwMDAxMTYyMDAwMDlBMzg4MDA0MEExCi06MTBGRjEwMDA5Mzg2MDAzMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDhGCi06MTBGRjIwMDAyN0JEMDAyMEFGODUwMDRDMDNFMDAwMDhBRjg2MDA0OEU1Ci06MTBGRjMwMDAwMEM4NzAyMzhGQkYwMDE4OTM4NjAwMzA4RkIxMDAxNDYzCi06MTBGRjQwMDA4RkIwMDAxMDM0RUYwQzAwMDEwRjI4MjEyN0JEMDAyMEQ2Ci06MTBGRjUwMDBBQ0VFMDA4NEFGODUwMDRDMDNFMDAwMDhBRjg2MDA0ODlCCi06MTBGRjYwMDAzNTkwMDE4MDAyMDAyODIxMEUwMDE2ODQyNDA2MDA4MkFDCi06MTBGRjcwMDA4Rjg0MDAyNDkwODYwMEM0MzBDNTAwNDA1MEEwRkZCQTkyCi06MTBGRjgwMDBBMzgwMDA1MDhGODUwMDM0M0MwNjgwMDA4Q0NEMDFCOEUyCi06MTBGRjkwMDAwNUEwRkZGRThGODkwMDU0MjQwODYwODIyNDA3MDAwMjE4Ci06MTBGRkEwMDBBRTA5MDAwMEE2MDgwMDA4QTIwNzAwMEI4Q0EzMDAwOEY5Ci06MTBGRkIwMDAzQzBFMTAwMEFFMDMwMDEwOENBMjAwMENBRTAyMDAxNDI4Ci06MTBGRkMwMDA4Q0JGMDAxNEFFMUYwMDE4OENCOTAwMThBRTE5MDAyNEE1Ci06MTBGRkQwMDA4Q0I4MDAyNEFFMTgwMDI4OENBRjAwMjhBRTBGMDAyQzdGCi06MTBGRkUwMDBBQ0NFMDFCODBBMDAxNzQ0QTM4MDAwNTA4RjhBMDAyNEM5Ci06MTBGRkYwMDAyN0JERkZFMEFGQjEwMDE0QUZCMDAwMTA4Rjg4MDA0OEZDCi06MDIwMDAwMDQwMDAxRjkKLToxMDAwMDAwMEFGQkYwMDE4OTM4OTAwMjg5NTQyMDBBQzMwRDEwMEZGQTMKLToxMDAwMTAwMDAxMDkxODJCMDA4MDgwMjEzMEFDMDBGRjMwNDdGRkZGMjIKLToxMDAwMjAwMDAwMDA1ODIxMTQ2MDAwMDMzMTA2MDBGRjAxMjAzMDIxMzgKLToxMDAwMzAwMDAxMDk1ODIzOTc4MzAwNDQwMDY4MjAyQjE0ODAwMDFCN0IKLToxMDAwNDAwMDAwMDAwMDAwMTA2ODAwNDMyNDBBMDAwMTExOEEwMDQ4RTMKLToxMDAwNTAwMDM0RTcwODgwMzE2NUZGRkYwRTAwMTYyNjAyMDAyMDIxREMKLToxMDAwNjAwMDBFMDAxNjY2OEY4NDAwNTQ4Rjg0MDAyNDk0OEQwMDcwRDcKLToxMDAwNzAwMDI1QUMwMDAxQTQ4QzAwNzA5NDhCMDA3MDNDMDYwODAwMzUKLToxMDAwODAwMDhDQzYzMTg4MzE2NzdGRkYxMEU2MDA0RjAwMDAwMDAwMEEKLToxMDAwOTAwMDAyMDAyMDIxMDIyMDI4MjE4RkJGMDAxODhGQjEwMDE0RjgKLToxMDAwQTAwMDhGQjAwMDEwMEEwMDE3MzAyN0JEMDAyMDkxNDQwMEM0MTMKLToxMDAwQjAwMDI0MDZGRjgwMDA4Njg4MjVBMTUxMDBDNDk3ODQwMDQ0NEYKLToxMDAwQzAwMDMwODhGRkZGMTEwMDAwMUM5Mzg5MDAyODhGOEUwMDI0QzgKLToxMDAwRDAwMDI0MTlFRkZGMDA4QkY4MjM5NUQ4MDBBQzAxNjg2ODJCM0EKLToxMDAwRTAwMDMzRTkwMEZGMDMxOTc4MjRBNUNGMDBBQzUxQTAwMDJBMDIKLToxMDAwRjAwMDAxMDA1ODIxOEUwNTAwMjAyNDA4RkZGQjI0MDMwMDAxODUKLToxMDAxMDAwMDAwQTgxMDI0QUUwMjAwMjAxMTgzMDAyNTM0RTc4MDAwRUYKLToxMDAxMTAwMDAyMDAyMDIxMzE2NUZGRkYwRTAwMTYyNjAxMjAzMDIxNEMKLToxMDAxMjAwMDk3OEIwMDQ0OEY4NzAwNDhBNzgwMDA0NDAwRUI4MDIzMTIKLToxMDAxMzAwMEFGOTAwMDQ4OTM4OTAwMjg4RjhDMDAyNDhGQkYwMDE4NEYKLToxMDAxNDAwMDhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyMDAzRTAwMDA4MUQKLToxMDAxNTAwMEExODkwMEM3OEUwODAwMjAyNDA5RkZGQjM0RTc4MDAwMzYKLToxMDAxNjAwMDAxMDkyODI0QUUwNTAwMjAxNThBRkZCQTM0RTcwODgwNkIKLToxMDAxNzAwMDAyMDAyMDIxMEUwMDE1RjQzMTY1RkZGRjAyMDAyMDIxNEUKLToxMDAxODAwMDAyMjAyODIxOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwRkIKLToxMDAxOTAwMDBBMDAxNzMwMjdCRDAwMjAwQTAwMTdFNzAwMDA0ODIxOTkKLToxMDAxQTAwMDAyMDAyMDIxMzE2NUZGRkYwRTAwMTVGNDAxMjAzMDIxRUYKLToxMDAxQjAwMDk3OEIwMDQ0OEY4NzAwNDhBNzgwMDA0NDAwRUI4MDIzODIKLToxMDAxQzAwMDBBMDAxN0Y3QUY5MDAwNDg5NDg5MDA3MDI0MEE4MDAwNTUKLToxMDAxRDAwMDAxMkE0MDI0QTQ4ODAwNzA5MDg1MDA3MDkwOTkwMDcwRDYKLToxMDAxRTAwMDMwQTIwMEZGMDAwMjE5QzIwMDAzRjgyNzAwMUZDMUMwOUYKLToxMDAxRjAwMDMzMkYwMDdGMDFGODcwMjVBMDhFMDA3MDBBMDAxN0NGMDIKLToxMDAyMDAwMDAyMDAyMDIxOEY4ODAwMjQyNDAzMDAwMTkxMEEwMDc4MzUKLToxMDAyMTAwMDkxMDUwMEM3MjUwOTAwNzgzMTQ3MDAzRjI0RTZGRkUwM0IKLToxMDAyMjAwMDAwQzMxODA0MkNDMjAwMjAzMDY3MDAxOUEzODUwMDI4RTEKLToxMDAyMzAwMDEwNDAwMDFBQUY4OTAwMzQzQzBBODAwMDM1NEIwMDAyQTAKLToxMDAyNDAwMDI0MDUwMDAxMjQwNjAwMDExNEUwMDAxNjAwNkIxMDI0QjAKLToxMDAyNTAwMDAwMDAyODIxMTQ0MDAwMEYzMDYzMDAyMDEwNjAwMDBGQzAKLToxMDAyNjAwMDI0MDUwMDAxOEQwNjAwNzQ4RDE5MDA3NDI0MDNGRjgwOUQKLToxMDAyNzAwMDAwQzMxMDI0MDAwMjc5NDAzMzM4MDA3RjAxRjg2ODI1NUMKLToxMDAyODAwMDNDMEUxMDAwMDFBRTYwMjVBRDRDMDgzMDkxMjgwMDAxRjUKLToxMDAyOTAwMDMxMDYwMDAxMEEwMDE3QTUwMDAwMDAwMDAzRTAwMDA4NzUKLToxMDAyQTAwMDAwMDAwMDAwOEQwRjAwNzQ4RDBEMDA3NDI0MThGRjgwNzUKLToxMDAyQjAwMDAxRjg3MDI0MDAwRTQxNDAzMUFDMDA3RjAxMEM1MDI1NDQKLToxMDAyQzAwMDNDMEIxMDAwMDE0QjM4MjUzQzA5ODAwMDBBMDAxN0E1QTMKLToxMDAyRDAwMEFEMjcwODMwMjdCREZGRDhBRkIwMDAxMDhGOTAwMDM0OTUKLToxMDAyRTAwMEFGQjQwMDIwQUZCMTAwMTRBRkJGMDAyNEFGQjMwMDFDMDcKLToxMDAyRjAwMEFGQjIwMDE4OEUwNTAwMTAzQzAyMDgwMDhDNDIzMUIwRUQKLToxMDAzMDAwMDhGODYwMDM4MzBBNzNGRkYwMEUyMTgyQjhDRDIwMDE0RjQKLToxMDAzMTAwMDAwODA4ODIxOENEMzAwMjAxMDYwMDAwNzAwMDBBMDIxRkQKLToxMDAzMjAwMDkwQ0IwMDBEMjQwQUZGODAwMTRCNDgyNDMxMjgwMEZGQTgKLToxMDAzMzAwMDE1MDAwMDBDMDAwNTYzODIwMjIwMjAyMTI0MTEwMDBEMEQKLToxMDAzNDAwMEEzOTEwMDUwOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDRjYKLToxMDAzNTAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDBBMDAxNkE5RDgKLToxMDAzNjAwMDI3QkQwMDI4MzE4NTAwMDM1NEEwRkZGNDAyMjAyMDIxN0UKLToxMDAzNzAwMDk0Q0YwMDFDOEY4RTAwMjQ4RTA3MDAyOEE1Q0YwMEQ4QjQKLToxMDAzODAwMDhDQ0QwMDEwMDI0RDMwMjMxMEU2MDA1QzI0MDIwMDFGQ0IKLToxMDAzOTAwMDBFMDAxNkE5QTM4MjAwNTAyNDFGRkZGRjEwNUYwMDRFMUQKLToxMDAzQTAwMDI0MDRGRkZGOEY4MzAwM0M4Rjg4MDAyQzAyNjM5ODIxNzgKLToxMDAzQjAwMDhEMDkwMDEwMDEyMzEwMjM4RjgzMDAxQ0FEMDIwMDEwNTMKLToxMDAzQzAwMEFEMTMwMDIwOEM2NzAwNzQwMEYzMjAyQjE0ODAwMDYyQjIKLToxMDAzRDAwMDAyMjAyMDIxOEY4NjAwMzg4RTBDMDAyNDhDQzUwMDI0M0EKLToxMDAzRTAwMDExODUwMDA3MDIyMDIwMjEyNDBFMDAxQzBFMDAxNkE5RjIKLToxMDAzRjAwMEEzOEUwMDUwMjQwREZGRkYxMDREMDAzNzI0MDRGRkZGOTMKLToxMDA0MDAwMDhGODQwMDJDOEM5ODAwMjQyNzBGMDAwMUFDOEYwMDI0Q0YKLToxMDA0MTAwMDEyNzIwMDQ0OEY5OTAwMUM4RjMyMDA3NDEyNTMwMDQxRjUKLToxMDA0MjAwMDNDMEEwMDgwOEUwOTAwMDAwMTJBMTAyNDE0NDAwMDNBODIKLToxMDA0MzAwMDAwMDAwMDAwOEUwNDAwMTQyNDEyRkZGRjEwOTIwMDA2M0EKLToxMDA0NDAwMDI0MEIwMDFCMDIyMDIwMjEwRTAwMTZBOUEzOEIwMDUwQjQKLToxMDA0NTAwMDEwNTIwMDIxMjQwNEZGRkY4RTAzMDAwMDNDMEMwMDAxMTkKLToxMDA0NjAwMDAwNkMyODI0MTBBMDAwMTMzQzA2MDA4MDAwNjZBMDI0MjUKLToxMDA0NzAwMDE2ODAwMDA5MDIwMDI4MjEwMjIwMjAyMTI0MEUwMDFBRTMKLToxMDA0ODAwMDBFMDAxNkE5QTM4RTAwNTAyNDBERkZGRjEwNEQwMDEyODAKLToxMDA0OTAwMDI0MDRGRkZGMDIwMDI4MjEwMjIwMjAyMTBFMDAxNkM5OUIKLToxMDA0QTAwMDI0MDYwMDAxMjQxMEZGRkYyNDA0RkZGRjEwNTAwMDBBNUYKLToxMDA0QjAwMDI0MTQwMDAxOEY4RjAwMkMwMjIwMjAyMTAyODAzMDIxODMKLToxMDA0QzAwMDk1RjIwMDM0MjQwNTAwMDEyNjU4MDAwMTBFMDAxN0E1RkUKLToxMDA0RDAwMEE1RjgwMDM0MDAwMDIwMjE4RkJGMDAyNDhGQjQwMDIwMzUKLToxMDA0RTAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwQjIKLToxMDA0RjAwMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyODhGODMwMDNDMDYKLToxMDA1MDAwMDAwRTNDODIxMDI1OUMwMkIxMzAwRkZBODhGODgwMDJDREMKLToxMDA1MTAwMDBBMDAxODhFMjQwMjAwMThBQzgwMDAyMDBBMDAxOEI4QzcKLToxMDA1MjAwMDhFMDQwMDE0OEUxRjAwMDAzQzA3MDA4MDAzRTc5ODI0MEYKLToxMDA1MzAwMDE2NjBGRkY5MjQwODAwMUEwMjIwMjAyMTBFMDAxNkE5RDcKLToxMDA1NDAwMEEzODgwMDUwMjQwM0ZGRkYxNDQzRkZCQTI0MDRGRkZGRDUKLToxMDA1NTAwMDBBMDAxOEUxOEZCRjAwMjQyNDBCMDAxRDBFMDAxNkE5MEQKLToxMDA1NjAwMEEzOEIwMDUwMjQwQUZGRkYxNDRBRkY5QTI0MDRGRkZGQzQKLToxMDA1NzAwMDBBMDAxOEUxOEZCRjAwMjQ4Rjg1MDAyNDI3QkRGRkQ4MTMKLToxMDA1ODAwMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwOTEKLToxMDA1OTAwMEFGQkYwMDIwOTBBNzAwQzQ4RjkwMDAzNDI0MTJGRkZGNEIKLToxMDA1QTAwMDM0RTIwMDQwOTIwNjAwMDBBMEEyMDBDNDhFMDMwMDEwQjYKLToxMDA1QjAwMDAwODA5ODIxMTA3MjAwMDYzMEQxMDAzRjI0MDgwMDBEMDEKLToxMDA1QzAwMDBFMDAxNkE5QTM4ODAwNTAxMDUyMDAyNjI0MDZGRkZGMzMKLToxMDA1RDAwMDhGOEEwMDI0OEUwOTAwMTg4RDQ0MDBDMDExMjQwMDA3NjIKLToxMDA1RTAwMDI0MEMwMDBFMDI2MDIwMjEwRTAwMTZBOUEzOEMwMDUwREUKLToxMDA1RjAwMDI0MEJGRkZGMTA0QjAwMUIyNDA2RkZGRjI0MDQwMDIwRTgKLToxMDA2MDAwMDEyMjQwMDA0OEY4RDAwMjQ5MUFGMDBDNDM1RUUwMDIwMjkKLToxMDA2MTAwMEExQUUwMEM0OEY4NTAwM0MxMEEwMDAxQTAwMDAwMDAwQUQKLToxMDA2MjAwMDEyMjQwMDRCOEY5ODAwMjQ4RjkyRkVENDI0MDZGRkZERTUKLToxMDA2MzAwMDk3MTAwMDcwOTY1MTAwMEExMjMwMDAwQjhGQkYwMDIwRjcKLToxMDA2NDAwMDNDMUYwODAwOEZGRjMxOEMwM0U1QzgyQjE3MjAwMDFFQ0MKLToxMDA2NTAwMDAyNjAyMDIxMDAwMDI4MjEwRTAwMTdBNTI0MDYwMDAxQjkKLToxMDA2NjAwMDAwMDAzMDIxOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4MTQKLToxMDA2NzAwMDhGQjEwMDE0OEZCMDAwMTAwMEMwMTAyMTAzRTAwMDA4RkIKLToxMDA2ODAwMDI3QkQwMDI4NTIyNDAwMkE4RTAzMDAxNDhGODQwMDI0RTIKLToxMDA2OTAwMDk0ODkwMDcwMjUyODAwMDFBNDg4MDA3MDk0ODcwMDcwNTgKLToxMDA2QTAwMDNDMDUwODAwOENBNTMxODgzMEUyN0ZGRjEwNDUwMDBFMjQKLToxMDA2QjAwMDAwMDAwMDAwMDI2MDIwMjEwRTAwMTczMDI0MDUwMDAxMTgKLToxMDA2QzAwMDBBMDAxOTQzMDAwMDMwMjEyNDAyMDAyREEzODIwMDUwQUIKLToxMDA2RDAwMDBFMDAxNkE5MjQxM0ZGRkYxNDUzRkZFMTI0MDZGRkZGQTkKLToxMDA2RTAwMDBBMDAxOTQ0OEZCRjAwMjA5NDk4MDA3MDI0MTk4MDAwREMKLToxMDA2RjAwMDI0MDUwMDAxMDMxOTkwMjRBNDkyMDA3MDkwOTEwMDcwQzkKLToxMDA3MDAwMDkwOEQwMDcwMzIzMDAwRkYwMDEwNzlDMjAwMEY3MDI3MEEKLToxMDA3MTAwMDAwMEU2MUMwMzFBQjAwN0YwMTZDNTAyNUEwOEEwMDcwRDMKLToxMDA3MjAwMDBFMDAxNzMwMDI2MDIwMjEwQTAwMTk0MzAwMDAzMDIxMUEKLToxMDA3MzAwMDI0MDZGRkZGMTQ2NkZGRDY4Rjg0MDAyNDAyNjAyMDIxNjgKLToxMDA3NDAwMDBFMDAxNzMwMjQwNTAwMDEwQTAwMTk0MzAwMDAzMDIxNzMKLToxMDA3NTAwMDAyNjAyMDIxMEEwMDE5NUQyNDAyMDAwQThGODgwMDI0MEIKLToxMDA3NjAwMDI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDkxMEEwMEM0NkUKLToxMDA3NzAwMDhGODcwMDM0MDA4MDgwMjEzNTQ5MDA0MDhDRTYwMDEwQ0UKLToxMDA3ODAwMEExMDkwMEM0M0MwMjA4MDA4QzQyMzFCMDMwQzUzRkZGRDMKLToxMDA3OTAwMDAwQTIxODJCMTA2MDAwMDc4Rjg1MDAzODI0MERGRjgwMDEKLToxMDA3QTAwMDkwQUUwMDBEMDFBRTYwMjQzMThCMDBGRjE1NjAwMDA4OTMKLToxMDA3QjAwMDAwMDZDMzgyMDIwMDIwMjEyNDAzMDAwRDhGQkYwMDE0MTUKLToxMDA3QzAwMDhGQjAwMDEwMjdCRDAwMTgwQTAwMTZBOUEzODMwMDUwOUYKLToxMDA3RDAwMDMzMDYwMDAzMjQwRjAwMDI1NENGRkZGNzAyMDAyMDIxNEMKLToxMDA3RTAwMDk0QTIwMDFDOEY4NTAwMjQyNDE5MDAyM0E0QTIwMEQ4MDEKLToxMDA3RjAwMDhDRTgwMDAwMDAwODFFMDIzMDdGMDAzRjEzRjkwMDM1MkUKLToxMDA4MDAwMDNDMEEwMDgzOENFODAwMTg4Q0E2MDBDMDExMDYwMDA4ODIKLToxMDA4MTAwMDAwMDAwMDAwMjQwNTAwMEUwRTAwMTZBOUEzODUwMDUwNUMKLToxMDA4MjAwMDI0MDdGRkZGMTA0NzAwMTgyNDA0RkZGRjhGODUwMDI0RDIKLToxMDA4MzAwMDkwQTkwMEM0MzUyNDAwMjBBMEE0MDBDNDhGOEMwMDJDRjMKLToxMDA4NDAwMDkxOEUwMDBEMzFDRDAwN0ZBMThEMDAwRDhGODMwMDNDNzYKLToxMDA4NTAwMDEwNjAwMDFDMDIwMDIwMjE4Rjg0MDAzODhDOTgwMDEwNEEKLToxMDA4NjAwMDAzMDM3ODJCMTFFMDAwMEQyNDE5MDAxODAyMDAyMDIxNDkKLToxMDA4NzAwMEEzOTkwMDUwMEUwMDE2QTkyNDEwRkZGRjEwNTAwMDAyOEIKLToxMDA4ODAwMDI0MDRGRkZGMDAwMDIwMjE4RkJGMDAxNDhGQjAwMDEwNTAKLToxMDA4OTAwMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAxODhDODYwMDEwOUUKLToxMDA4QTAwMDhGOUYwMDJDMDIwMDIwMjEwMEMzMTAyM0FGRTIwMDEwMTQKLToxMDA4QjAwMDI0MDUwMDAxMEUwMDE3QTUyNDA2MDAwMTBBMDAxOUNDMkEKLToxMDA4QzAwMDAwMDAyMDIxMEUwMDE3MzAyNDA1MDAwMTBBMDAxOUNDNzkKLToxMDA4RDAwMDAwMDAyMDIxMDEwQTU4MjQxNTZBRkZEOThGOEMwMDJDQjIKLToxMDA4RTAwMEEwQTYwMEVDMEEwMDE5QjlBMzg2MDA0MjI3QkRGRkQ4RDQKLToxMDA4RjAwMEFGQjAwMDEwOEY5MDAwMzRBRkIyMDAxOEFGQkYwMDIwMkYKLToxMDA5MDAwMEFGQjMwMDFDQUZCMTAwMTQ4RTExMDAxMDNDMDMwODAwRkYKLToxMDA5MTAwMDhDNjMzMUIwMzIyNTNGRkYwMEEzMTAyQjEwNDAwMDA4M0MKLToxMDA5MjAwMDAwODA5MDIxOEY4NjAwMzgyNDA5RkY4MDkwQ0EwMDBEMzYKLToxMDA5MzAwMDAxMkE0MDI0MzEwNzAwRkYxNEUwMDAwQjAwMTE2QjgyRjQKLToxMDA5NDAwMDAyNDAyMDIxMjQxMjAwMERBMzkyMDA1MDhGQkYwMDIwRUUKLToxMDA5NTAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwM0QKLToxMDA5NjAwMDBBMDAxNkE5MjdCRDAwMjgzMUFDMDAwMzI0MEIwMDAxQTIKLToxMDA5NzAwMDU1OEJGRkY0MDI0MDIwMjE5MENGMDAwRDMxRUUwMDA4OEUKLToxMDA5ODAwMDExQzAwMDYwOEY5MzAwM0MxNjYwMDAwOTI0MDIwMDI3MEMKLToxMDA5OTAwMDhFMTkwMDBDOENEODAwMjAxNzM4MDAwNTI0MDIwMDIwODYKLToxMDA5QTAwMDhFMDIwMDA4OENERjAwMjQxMDVGMDA0MDI0MDIwMDIwMkIKLToxMDA5QjAwMDBFMDAxNkE5QTM4MjAwNTAyNDA2RkZGRjEwNDYwMDMzNDQKLToxMDA5QzAwMDI0MDRGRkZGOEY5OTAwMkMyNDBBRkZGNzNDMTM4MDBFQUMKLToxMDA5RDAwMDkzMjkwMDBEMjQwNEZGODAzQzBEODAwMDAxMkFGODI0OTcKLToxMDA5RTAwMEEzM0YwMDBEOEY5OTAwMUMzQzA4MDgwMDhEMDgzMUFDMTYKLToxMDA5RjAwMDhGODMwMDU0OTcyNzAwNzg4RjlGMDAyQzAxMDMxMDIxQ0MKLToxMDBBMDAwMDMwRTU3RkZGMDAwNTMwNDAwMDQ2NzgyMTMxRjgwMDdGNTcKLToxMDBBMTAwMDAzMTM2MDIxMDFFNDcwMjRBREFFMDAyQ0E1OTEwMDAwMDkKLToxMDBBMjAwMDhGRUIwMDI4MjU2QTAwMDFBRkVBMDAyODhGRTMwMDJDMzUKLToxMDBBMzAwMDhFMDkwMDJDMDA2OTQwMjFBRkU4MDAyQzhFMDcwMDJDQTUKLToxMDBBNDAwMEFGRTcwMDMwOEUwNTAwMTRBRkU1MDAzNDk3RTYwMDNBQkEKLToxMDBBNTAwMDI0QzIwMDAxQTdFMjAwM0E5NzMzMDA3ODNDMTAwODAwNTYKLToxMDBBNjAwMDhFMTAzMUIwMjY2MzAwMDEzMDcxN0ZGRjEyMzAwMDI3RjUKLToxMDBBNzAwMDAwNjAzMDIxOEY4RjAwMUMwMjQwMjAyMTI0MDUwMDAxREUKLToxMDBBODAwMDBFMDAxNzMwQTVFNjAwNzgwMDAwMjAyMThGQkYwMDIwNUYKLToxMDBBOTAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwRkMKLToxMDBBQTAwMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyODhFMDUwMDE0RjcKLToxMDBBQjAwMDI0MTNGRkZGMTBCMzAwMUQ4RjgzMDAyNDhFMDgwMDE4M0QKLToxMDBBQzAwMDhDNjcwMEMwMTUwNzAwMDkyNDAyMDAwRThFMEEwMDI0NUUKLToxMDBBRDAwMDhDQzkwMDI4MTU0OTAwMDUyNDAyMDAyMThFMDcwMDI4MzIKLToxMDBBRTAwMDhDQ0IwMDJDMTBFQjAwMTMyNDAyMDAxRjBFMDAxNkE5NjMKLToxMDBBRjAwMEEzODIwMDUwMTQ1M0ZGQjMyNDA0RkZGRjBBMDAxQTRFRDAKLToxMDBCMDAwMDhGQkYwMDIwMEEwMDFBMTYyNDAyMDAyNDI0MEU4MDAwNDEKLToxMDBCMTAwMDAwNkU2ODI0MzFBQ0ZGRkYwMDBDNUJDMjMxNzEwMEZGMzYKLToxMDBCMjAwMDAwMTE4MDI3MEEwMDFBNDcwMDEwMzNDMDBBMDAxQTY1MTYKLToxMDBCMzAwMDI0MDIwMDI1OEUwNTAwMkMxMEEwRkZFQzI0MDIwMDIzQzcKLToxMDBCNDAwMDhGOEUwMDFDOERDRDAwNzQwMUE1NjAyQjE1ODBGRkU3RjIKLToxMDBCNTAwMDI0MDIwMDI2OENDRjAwMTQwMEE3QzAyMTAxRjgyMDJCMEUKLToxMDBCNjAwMDEwODBGRjk5OEY5OTAwMkMwMjQwMjAyMTBBMDAxQTY1RkQKLToxMDBCNzAwMDI0MDIwMDIyMjdCREZGRTBBRkIwMDAxMDhGOTAwMDM0QTgKLToxMDBCODAwMEFGQjEwMDE0QUZCRjAwMTg4RTA1MDAxMDNDMDMwODAwODEKLToxMDBCOTAwMDhDNjMzMUIwMDA4MDg4MjEzMEE0M0ZGRjAwODMxMDJCOEMKLToxMDBCQTAwMDEwNDAwMDA3OEY4NjAwMzgyNDA5RkY4MDkwQ0EwMDBEOEUKLToxMDBCQjAwMDAxMkE0MDI0MzEwNzAwRkYxNEUwMDAwOThGOEIwMDNDMUMKLToxMDBCQzAwMDI0MTAwMDBEMDIyMDIwMjFBMzkwMDA1MDhGQkYwMDE4OTgKLToxMDBCRDAwMDhGQjEwMDE0OEZCMDAwMTAwQTAwMTZBOTI3QkQwMDIwQTUKLToxMDBCRTAwMDExNjAwMDA4MDAwNUMzODI4RjhGMDAyNDhGOEVGRUQ0MTEKLToxMDBCRjAwMDI0MDdGRkZEOTVFQzAwNzA5NUNEMDAwQTExQUMwMDM4N0MKLToxMDBDMDAwMDhGQkYwMDE4MzMwNTAwMDMxNEEwMDAxMDAwMDAwMDAwN0YKLToxMDBDMTAwMDkyMTkwMDAyMTMyMDAwNDEwMDAwMDAwMDhFMDYwMDI0RkIKLToxMDBDMjAwMDUwQzAwMDBGOTIwNDAwMDMwMjIwMjAyMTI0MDIwMDBGNzQKLToxMDBDMzAwMDBFMDAxNkE5QTM4MjAwNTAyNDA4RkZGRjE0NDgwMDA3RTUKLToxMDBDNDAwMDI0MDdGRkZGMEEwMDFBRTI4RkJGMDAxODkwQzMwMDBEQUYKLToxMDBDNTAwMDMwNjQwMDA4MTA4MDAwMzcwMjIwMjAyMTkyMDQwMDAzMzUKLToxMDBDNjAwMDI0MDcwMDAyMzA4OTAwRkYxNTI3MDAwNTMwOEYwMEZGQTAKLToxMDBDNzAwMDhGOEEwMDNDMTE0MDAwMzEyNDBDMDAyQzMwOEYwMEZGODMKLToxMDBDODAwMDM5RTUwMDEwMkNBRDAwMDEyREVFMDAwMTAyMDAyODIxRjUKLToxMDBDOTAwMDAxQ0QzMDI1MEUwMDE2QzkwMjIwMjAyMTI0MTBGRkZGQUYKLToxMDBDQTAwMDEwNTAwMDBFMjQwN0ZGRkY4RjgzMDAzQzEwNjAwMDE3RDgKLToxMDBDQjAwMDAyMjAyMDIxM0MxOTA4MDA4RjM5MzE4QzAzMjNDMDJCREUKLToxMDBDQzAwMDU3MDAwMDBDMjQxMTAwMkQwMjIwMjAyMTAwMDAyODIxQjMKLToxMDBDRDAwMDBFMDAxN0E1MjQwNjAwMDEwMDAwMzgyMThGQkYwMDE4NjAKLToxMDBDRTAwMDhGQjEwMDE0OEZCMDAwMTAwMEUwMTAyMTAzRTAwMDA4NjUKLToxMDBDRjAwMDI3QkQwMDIwMEUwMDE2QTlBMzkxMDA1MDE0NTBGRkY2NDYKLToxMDBEMDAwMDI0MDdGRkZGMEEwMDFBRTI4RkJGMDAxODBFMDAxNzMwRjkKLToxMDBEMTAwMDI0MDUwMDAxMEEwMDFBRTEwMDAwMzgyMThDREYwMDI0QkMKLToxMDBEMjAwMDhFMDIwMDI0NTQ1RkZGQzEwMjIwMjAyMTBBMDAxQUMyNTMKLToxMDBEMzAwMDkyMDQwMDAzMEEwMDFBQjYyNDAyMDAxMDAyMjAyMDIxQTcKLToxMDBENDAwMDBFMDAxNkE5QTM4QzAwNTAyNDBCRkZGRjEwNEJGRkUzRUQKLToxMDBENTAwMDI0MDdGRkZGMEEwMDFBQzk5MjA0MDAwMzMwQTUwMEZGMTAKLToxMDBENjAwMDI0MDYwMDAxMjRBOTAwMDEwMEM5MTAyQjEwNDAwMDBDMkEKLToxMDBENzAwMDAwMDA0MDIxMjQwQTAwMDEwMEE2MTgyMzMwOEIwMDAxNDYKLToxMDBEODAwMDI0QzYwMDAxMDA2QTM4MDQwMDA0MjA0MjExNjAwMDAyRjkKLToxMDBEOTAwMDAwQzkxODJCMDEwNzQwMjUxNDYwRkZGODAwQTYxODIzOEUKLToxMDBEQTAwMDAzRTAwMDA4MDEwMDEwMjEyN0JERkZEOEFGQjAwMDE4RjQKLToxMDBEQjAwMDhGOTAwMDM0QUZCMTAwMUNBRkJGMDAyMDI0MDNGRkZGQjEKLToxMDBEQzAwMDI0MTEwMDJGQUZBMzAwMTA5MjA2MDAwMDI0MDUwMDA4OTQKLToxMDBERDAwMDI2MTAwMDAxMDA2NjIwMjYwRTAwMUIwMTMwODQwMEZGNTMKLToxMDBERTAwMDAwMDIxRTAwM0MwMjFFREMzNDQ2NkY0MTBBMDAxQjI5MzMKLToxMDBERjAwMDAwMDAxMDIxMTBBMDAwMDkwMDgwMTgyMTI0NDUwMDAxRTYKLToxMDBFMDAwMDMwQTJGRkZGMkM0NTAwMDgwNDYxRkZGQTAwMDMyMDQwRDgKLToxMDBFMTAwMDAwODYyMDI2MTRBMEZGRjkwMDgwMTgyMTBFMDAxQjAxNzcKLToxMDBFMjAwMDI0MDUwMDIwOEZBMzAwMTAyNjI5RkZGRjMxMzEwMEZGODkKLToxMDBFMzAwMDAwMDM0MjAyMjQwNzAwRkYxNjI3RkZFMjAxMDIxODI2RTIKLToxMDBFNDAwMDAwMDM1MDI3QUZBQTAwMTRBRkFBMDAxMDAwMDAzMDIxMDEKLToxMDBFNTAwMDI3QTgwMDEwMjdBNzAwMTQwMEU2NzgyMzkxRUQwMDAzQ0YKLToxMDBFNjAwMDI0Q0UwMDAxMDBDODYwMjEzMUM2MDBGRjJDQ0IwMDA0NTUKLToxMDBFNzAwMDE1NjBGRkY5QTE4RDAwMDA4RkEyMDAxMDhGQkYwMDIwMjgKLToxMDBFODAwMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwODI3QkQwMDI4QjgKLToxMDBFOTAwMDkzODMwMDMwMjdCREZGRTAyNDAyMDAzNEFGQjEwMDE0N0IKLToxMDBFQTAwMEFGQjAwMDEwQUZCRjAwMUNBRkIyMDAxODAwODA4ODIxQTcKLToxMDBFQjAwMDEwNjIwMDYyMDBBMDgwMjE5MjA0MDAwNDE0ODAwMDQ1QUEKLToxMDBFQzAwMDhGODgwMDI0QTM4MDAwMjg4RTA1MDAwNDhEMDYwMEM4QUEKLToxMDBFRDAwMDNDMDcwMEZGMzRFM0ZGRkYwMEEzMjgyNDAwQzUxMDJCQ0MKLToxMDBFRTAwMDE0NDAwMDREQUY4NTAwM0M5NzhBMDA0NDhGODcwMDQ4MkUKLToxMDBFRjAwMDAxNDcxMDIzMTBBMDAwMzJBNzgyMDA0NDhGOTgwMDFDRTUKLToxMDBGMDAwMDMwNENGRkZGOTMxMjAwN0MwMDEyNzg4MjMxRjEwMDAxMTcKLToxMDBGMTAwMDAwMTE3MDgwMDFDNTY4MjEwMThENTgyQjExNjAwMDYxOUUKLToxMDBGMjAwMDhGODYwMDI0OEY4OTAwMjA4Rjg0MDA0QzEwODkwMDVFRkEKLToxMDBGMzAwMDNDMDIzRjAxOEUxRjAwMDAzQzEwMjUwMDAzRTJDODI0NDQKLToxMDBGNDAwMDE3MzAwMDdBOEY4NDAwMzQ4Rjg3MDAzNDhGODYwMDI0MTYKLToxMDBGNTAwMDhDRTMwMDAwQUNDMzAwNzg4Q0U1MDAxMEFDQzUwMDg4QzEKLToxMDBGNjAwMDhGODcwMDQ4OEY4NTAwM0M5MzhEMDAyODMwQUUwMDAzQUEKLToxMDBGNzAwMDAwMEU0MDIzMzEwQTAwMDMwMTRENDAyMUEzODgwMDI4QzAKLToxMDBGODAwMDk0Q0IwMEFDMDEyNzYwMjFBRjhDMDAyMDM1NjkxMDAwQTQKLToxMDBGOTAwMEE0QzkwMEFDMTYyMDAwNTEwMTQ1MjAyMUFGODQwMDQ4QUYKLToxMDBGQTAwMDAwMDAyMDIxOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0RTkKLToxMDBGQjAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwNDIKLToxMDBGQzAwMDhGODQwMDIwQUY4MDAwNDgwMDg3MzAyMTBBMDAxQjkyRTgKLToxMDBGRDAwMEFGODYwMDIwMjQxRjAwMENBMzlGMDA1MDBFMDAxNkE5MEUKLToxMDBGRTAwMDAyMjAyMDIxMjQxOUZGRkYxMDU5RkZFRTI0MDRGRkZGRTcKLToxMDBGRjAwMDhGODgwMDI0QTM4MDAwMjg4RTA1MDAwNDhEMDYwMEM4NzkKLToxMDEwMDAwMDNDMDcwMEZGMzRFM0ZGRkYwMEEzMjgyNDAwQzUxMDJCOUEKLToxMDEwMTAwMDEwNDBGRkI1QUY4NTAwM0MwMjIwMjAyMTI0MDkwMDE5QjMKLToxMDEwMjAwMEEzODkwMDUwMEUwMDE2QTkyNDExRkZGRjEwNTFGRkREMDcKLToxMDEwMzAwMDI0MDRGRkZGMEEwMDFCNjQ4Rjg1MDAzQzhGODQwMDI0N0EKLToxMDEwNDAwMDhGODcwMDM0OENGMjAwMzA5MDg2MDBDNDMwQzUwMDEwQzkKLToxMDEwNTAwMDE0QTAwMDEwOEY4MzAwNDgyQzY4MDAwNTE1MDAwMDI4OUMKLToxMDEwNjAwMDAwMDAwMDAwOTA4QTAwQzQyNDZCRkZGQzMxNDkwMDEwOEUKLToxMDEwNzAwMDE1MjAwMDA4MzE2NDAwRkY4RjhEMDA0QzhGOEMwMDIwRkMKLToxMDEwODAwMDExQUMwMDA0Mzg4RjAwMDEzMUVFMDAwMTE1QzAwMDJGQjMKLToxMDEwOTAwMDAwMDAwMDAwMEUwMDFCMTQwMDAwMDAwMDBBMDAxQkVCMDMKLToxMDEwQTAwMDAwMDAwMDAwOEY4OTAwMjA5MzhEMDAyODMwQUUwMDAzREYKLToxMDEwQjAwMDAwMEU0MDIzMzEwQTAwMDMwMTRENDAyMUEzODgwMDI4N0YKLToxMDEwQzAwMDk0Q0IwMEFDMDEyNzYwMjFBRjhDMDAyMDM1NjkxMDAwNjMKLToxMDEwRDAwMEE0QzkwMEFDMTIyMEZGQjEwMTQ1MjAyMTI1MTgwMDA0NEQKLToxMDEwRTAwMEEzOTgwMDI4OTRDRjAwQUMyNDkyMDAwNEFGOTIwMDQ4NEIKLToxMDEwRjAwMDM1RjEyMDAwQTREMTAwQUMwQTAwMUI5MzAwMDAyMDIxOTAKLToxMDExMDAwMDhDODIwMERDMTI0MkZGNkMwMjIwMjAyMTI0MTgwMDA1OTIKLToxMDExMTAwMEEzOTgwMDUwMEUwMDE2QTkyNDEyRkZGRjE0NTJGRjY2NzgKLToxMDExMjAwMDI0MDRGRkZGMEEwMDFCOTQ4RkJGMDAxQzMwRTUwMEZGNjIKLToxMDExMzAwMDBFMDAxNUIwMDAwMDMwMjE4Rjg2MDAyNDhGODcwMDQ4RjQKLToxMDExNDAwMDhGODkwMDIwMEEwMDFCODQ4Rjg1MDAzQzBFMDAxNURCNzAKLToxMDExNTAwMDAwMDAwMDAwMEEwMDFCRUIwMDAwMDAwMDkzODMwMDQyMjcKLToxMDExNjAwMDI3QkRGRkUwMjQwMjAwMDJBRkIyMDAxOEFGQjEwMDE0QTcKLToxMDExNzAwMEFGQkYwMDFDMDA4MDg4MjFBRkIwMDAxMDAwMDA5MDIxOUMKLToxMDExODAwMDEwNjIwMDU1MjQwNEZGRkQ5NzgzMDA0NDhGODUwMDQ4QkEKLToxMDExOTAwMDMwNjZGRkZGMDBDNTIwMkIxNDgwMDA1QjkzODcwMDMwNzIKLToxMDExQTAwMDNDMDg4MDAwOTUwNDAxMjAxMEU1MDA1MjhGOEEwMDIwNDEKLToxMDExQjAwMDhGODQwMDRDMzBBNTAwRkYwRTAwMTVCMDI0MDYwMDAxRkUKLToxMDExQzAwMDhGOUYwMDU0M0MwNTgwMDAzQzE5NDA4MDI3RUQwMTc4M0EKLToxMDExRDAwMDMxQjAwMDc4MjQwRUZGODAwMjE5NTgyNTM0QUYwOTAwODEKLToxMDExRTAwMDMxQjgwMDA3MDFBRTYwMjRBQ0FDMDgwMDAzMEY4MDIxQzkKLToxMDExRjAwMEFDQUIwODEwMDIyMDIwMjEwMjAwMjgyMTBFMDAxQjRFNUIKLToxMDEyMDAwMEFGOTAwMDM0MjQwM0ZGRkYxMDQzMDAzMzI0MDRGRkZGOUEKLToxMDEyMTAwMDhFMEMwMDEwM0MwNzA4MDA4Q0U3MzFCMDkyMDYwMDAwRUQKLToxMDEyMjAwMDMxODQzRkZGMDA4NzEwMkIxMDQwMDAyMzMwQ0QwMDNGNUEKLToxMDEyMzAwMDhGOTgwMDU0MDAwNDcxODAzQzA0MDgwMDhDODQzMUE4MEQKLToxMDEyNDAwMDI0MDlGRjgwOTM5MDAwNDEwMDk4NDAyMTAxMEUyMDIxNDUKLToxMDEyNTAwMDAwODk3MDI0MDAwRTUxNDAzQzA5ODAwMDMwOTkwMDdGQzUKLToxMDEyNjAwMDNDMEYwMDgwOEY4ODAwMjQzNTI1MDk0MDM1RTIwMDAxQkQKLToxMDEyNzAwMDAxNTkzODI1MzA4QjAwNzgzMDg2MDAwNzNDMDMxMDAwNzgKLToxMDEyODAwMDNDMUY4MDBDMDBDNUMwMjEwMTYyNTgyNTAwRTM1MDI1OTkKLToxMDEyOTAwMDAzM0Y3ODIxMzYwNTAwMDFBRDJFMDgwNEFGOTgwMDM4RDEKLToxMDEyQTAwMEFEMkIwODE0QUY4RjAwMkNBRDJFMDAyOEFEMDQwMDc0QjgKLToxMDEyQjAwMEFEMkEwODMwQTM4NTAwNDE5MzgzMDA0MjI0MTAwMDAzMjcKLToxMDEyQzAwMDUwNzAwMDI3MjVBM0ZGRTAyNDBDMDAwMTEwNkMwMDFDQzcKLToxMDEyRDAwMDI0MDYwMDIzMDI0MDIwMjE4RkJGMDAxQzhGQjIwMDE4N0IKLToxMDEyRTAwMDhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4QkYKLToxMDEyRjAwMDI3QkQwMDIwMzE0OTAwMDM1NTIwRkZBRThGODQwMDRDRUMKLToxMDEzMDAwMDBBMDAxQzI3OEY5MDAwNEM4Rjg0MDA0QzMwNjUwMEZGMzIKLToxMDEzMTAwMDBFMDAxNUIwMjQwNjAwMDE5MzhCMDAzMDI0MDUwMDM0MjQKLToxMDEzMjAwMDExNjUwMDE4OTc4MzAwNDQ4Rjg1MDA0ODMwNjJGRkZGRTUKLToxMDEzMzAwMDAwQTI1ODIzQUY4QjAwNDgwQTAwMUM1RkE3ODAwMDQ0MUUKLToxMDEzNDAwMDExQTYwMDM3MDAwMDAwMDAwMjIwMjAyMTI0MTEwMDBCMEMKLToxMDEzNTAwMDBFMDAxNkE5QTM5MTAwNTAwQTAwMUM1RjAwNDA5MDIxQzYKLToxMDEzNjAwMDJDNzIwMDIwMTI0MEZGRjgwMDAzRjg4MDNDMDcwODAwQjAKLToxMDEzNzAwMDI0RTc3OTYwMDNFN0M4MjE4RjJEMDAwMDAxQTAwMDA4NTEKLToxMDEzODAwMDAwMDAwMDAwOEY4NTAwNDgyQ0EyMDAwNTU0NDAwMDFEN0QKLToxMDEzOTAwMEE3ODAwMDQ0OTc4QTAwNDQzMTQ4RkZGRjAwQTg0ODIzRjMKLToxMDEzQTAwMDJEMkYwMDA1MTFFMDAwMDMzMTQ0MDBGRjI0QUVGRkZDQTcKLToxMDEzQjAwMDMxQzQwMEZGOEY5MDAwNEM4Rjk4MDAyMDEyMTgwMDA0NTkKLToxMDEzQzAwMDM4OTkwMDAxMzMyRDAwMDExNUEwMDAyOTAwMDAwMDAwMEMKLToxMDEzRDAwMDhGOTEwMDI0OTIyNTAwQzQzNEEzMDAxMEEyMjMwMEM0REUKLToxMDEzRTAwMDk3ODMwMDQ0OEY4NTAwNDg4Rjg0MDAyNDMwNjJGRkZGN0MKLToxMDEzRjAwMDAwQTI1ODIzQUM4MDAwRENBNzgwMDA0NDBBMDAxQzVGRDgKLToxMDE0MDAwMEFGOEIwMDQ4MzA2MkZGRkYwMEEyNTgyMzBBMDAxQzVGMjgKLToxMDE0MTAwMEFGOEIwMDQ4MjQwM0ZGRkYxMTgzMDAwNTAwMDAwMDAwOEMKLToxMDE0MjAwMDBFMDAxOTgxMDIyMDIwMjEwQTAwMUM1RjAwNDA5MDIxM0IKLToxMDE0MzAwMDBFMDAxOTA4MDIyMDIwMjEwQTAwMUM1RjAwNDA5MDIxQTQKLToxMDE0NDAwMDBFMDAxOUU1MDIyMDIwMjEwQTAwMUM1RjAwNDA5MDIxQjcKLToxMDE0NTAwMDBFMDAxODVGMDIyMDIwMjEwQTAwMUM1RjAwNDA5MDIxMkUKLToxMDE0NjAwMDBFMDAxQTg3MDIyMDIwMjEwQTAwMUM1RjAwNDA5MDIxRjQKLToxMDE0NzAwMDBFMDAxNURCMDAwMDAwMDA5NzgzMDA0NDhGODUwMDQ4QjQKLToxMDE0ODAwMDMwNkNGRkZGMDBBQzM4MjMyQ0ZGMDAwNTUzRTBGRkE4QjEKLToxMDE0OTAwMDMwNjJGRkZGOEY4NjAwMjRBNzgwMDA0NEFDQzIwMERDQ0UKLToxMDE0QTAwMDMwNjJGRkZGMDBBMjU4MjMwQTAwMUM1RkFGOEIwMDQ4ODgKLToxMDE0QjAwMDI3QkRGRkQwQUZCMjAwMThBRkIwMDAxMEFGQkYwMDI4RkIKLToxMDE0QzAwMEFGQjUwMDI0QUZCNDAwMjBBRkIzMDAxQ0FGQjEwMDE0MUYKLToxMDE0RDAwMDNDMEM4MDAwOEQ4ODAxMjgyNDBGRkY4MDNDMDc4MDBBODcKLToxMDE0RTAwMDI1MTAwMTAwMjUwQjAwODAwMjBGNjgyNDMyMDUwMDdGQzMKLToxMDE0RjAwMDAxNkY3MDI0QUQ4RTAwOTAwMEE3MjgyMUFEOEQwMDI0Q0YKLToxMDE1MDAwMDkwQTcwMEVDMzE2OTAwN0YzQzBBODAwNDAxMkExODIxNzEKLToxMDE1MTAwMEEzODcwMDQyOTA2NjAwN0MwMDgwOTAyMUFGODMwMDFDNkUKLToxMDE1MjAwMDMwQzIwMDAyQUY4ODAwNTRBRjg1MDAyNDAwQTAxODIxMEIKLToxMDE1MzAwMDE0NDAwMDAyMjQwNDAwMzQyNDA0MDAzMEEzODQwMDMwNEEKLToxMDE1NDAwMDhDNjYwMENDMzBGMTAwRkYyNDA0MDAwNEFGODYwMDQ4MTQKLToxMDE1NTAwMDEyMjQwMDA0QTM4MDAwNTA4RTUzMDAwNDE2NjAwMDFENjYKLToxMDE1NjAwMDNDMDg4MDAwOTM4NzAwNDEzMEYyMDAwMTEyNDAwMDBGRDgKLToxMDE1NzAwMDhGQkYwMDI4OENCODAwNzQ4Q0E0MDA3NDI0MTlGRjgwREQKLToxMDE1ODAwMDAzMTk4ODI0MDAxMTcxNDAzMDhGMDA3RjAxQ0Y2MDI1M0UKLToxMDE1OTAwMDNDMEQyMDAwMDE4RDU4MjUzMEY1MDBGRTNDMEE4MDAwRUUKLToxMDE1QTAwMEFENEIwODMwQTM5NTAwNDE4RkJGMDAyODhGQjUwMDI0QjQKLToxMDE1QjAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0QkQKLToxMDE1QzAwMDhGQjAwMDEwMjQwMjAwMDEyN0JEMDAzMDAzRTAwMDA4QTYKLToxMDE1RDAwMEFDQTYwMENDOEU1OTAwMDg5NTFGMDEyMDhFNDYwMDEwNDUKLToxMDE1RTAwMDAzM0ZDMDIxMzMwN0ZGRkYzMEY1MDAwRjMyQjQwMDAxODUKLToxMDE1RjAwMEFGODYwMDIwMTY4MDAwM0JBMzk1MDA0MDM1MDYwQzAwMDYKLToxMDE2MDAwMDAyQTYxMDIxMDBGNTE4MjNBRDAzMDA4NEFGODIwMDRDMjAKLToxMDE2MTAwMDhFNDkwMDA0MzEyOEZGRkYxMTAwMDAyQkE3ODkwMDQ0RTgKLToxMDE2MjAwMDI0MTBGRjgwM0MxNTgwMDAzQzE0MjAwMDBBMDAxRDRENTIKLToxMDE2MzAwMDI0MTNGRkZFOTBBRTAwQzQwMjBFNjgyNDMxQUMwMEZGRkMKLToxMDE2NDAwMDE1ODAwMDJBMDI0MDIwMjE5Mzg0MDA0MTk3ODYwMDQ0OUYKLToxMDE2NTAwMDMwOEYwMDAxMTFFMDAwMEIwMjY0MjgyNDhGODkwMDI0RTAKLToxMDE2NjAwMDhEMjMwMDc0OEQyODAwNzRBMzg1MDA0MTAwNzAxMDI0MjAKLToxMDE2NzAwMDAwMDJDOTQwMzExRjAwN0YwMzNGQzAyNTAzMTQ4ODI1QTUKLToxMDE2ODAwMEFFQjEwODMwMTBDMDAwMTA4Rjg1MDAyNDkwQTcwMEM0QjAKLToxMDE2OTAwMDAyMDc1ODI0MzE2QTAwRkYxNTQwRkZFNjAyNDAyMDIxNkUKLToxMDE2QTAwMDBFMDAxQzAxOTc5MTAwNDQxMDQwRkZFODkzODQwMDQxMTQKLToxMDE2QjAwMDI0MDVGRkZENTQ0NTAwMDU4RTQzMDAyMDAyMjAyODIxMEIKLToxMDE2QzAwMDBFMDAxNTg2MDI0MDIwMjE4RTQzMDAyMDMwNzAwMDA0NTkKLToxMDE2RDAwMDE2MDAwMDBBMjQxNEZGRkI4Rjg1MDAyNDBBMDAxRDAzNTYKLToxMDE2RTAwMDhGODYwMDQ4MEEwMDFEMkVBRjg2MDA0QzBFMDAxODJCNzYKLToxMDE2RjAwMDAwMDAwMDAwMEEwMDFEM0Q5Mzg0MDA0MTAwNzQ5ODI0RkUKLToxMDE3MDAwMDBFMDAxNUEwQUU1MzAwMjA4Rjg1MDAyNDBBMDAxRDAzOTMKLToxMDE3MTAwMDhGODYwMDQ4MjdCREZGRDhBRkIzMDAxQ0FGQjEwMDE0QkYKLToxMDE3MjAwMEFGQkYwMDIwQUZCMjAwMThBRkIwMDAxMDNDMDI4MDAwODUKLToxMDE3MzAwMDhDNTIwMTQwOEM0QjAxNDgzQzA0ODAwMDAwMEI4QzAyMTEKLToxMDE3NDAwMDMyMjMwMEZGMzE3MzAwRkY4Qzg1MDFCODA0QTBGRkZFMzcKLToxMDE3NTAwMDM0OTAwMTgwQUUxMjAwMDA4Qzg3MDE0NDI0NjRGRkYwQjUKLToxMDE3NjAwMDI0MDYwMDAyMkM4MzAwMTNBRTA3MDAwNEE2MTEwMDA4MTMKLToxMDE3NzAwMEEyMDYwMDBCQUUxMzAwMjQxMDYwMDA0RjhGQkYwMDIwQTQKLToxMDE3ODAwMDAwMDQ0ODgwM0MwQTA4MDAyNTRBNzlFMDAxMkE0MDIxRUIKLToxMDE3OTAwMDhEMDQwMDAwMDA4MDAwMDgwMDAwMDAwMDNDMTAwODAwREMKLToxMDE3QTAwMDhFMTAzMUE4MzE3MzNGRkYwMDEzODk4MDAyMTIyODIxNjcKLToxMDE3QjAwMDI0MENGRjgwMDBCMTIwMjEyNjREMDEwMDI2NDcwMDgwMjcKLToxMDE3QzAwMDNDMEY4MDAwM0MwMzgwMDQzMUE4MDA3RjMwRTkwMDdGOUIKLToxMDE3RDAwMDMwOEEwMDdGM0MwRTgwMEEzQzAyODAwQzAwOENDMDI0QzIKLToxMDE3RTAwMDAxQUMzMDI0MDBFQ0M4MjQwMTIzOTgyMTAxNDI4MDIxNUYKLToxMDE3RjAwMEFERTYwMDI0MDEwRUY4MjFBREY5MDA5MEFERjgwMDI4MDcKLToxMDE4MDAwMEFGOTAwMDJDQUY5RjAwMjRBRjkzMDAxQzBFMDAxNjc1MDQKLToxMDE4MTAwMDAxNjA4MDIxM0MwMzgwMDA4QzZCMDFCODA1NjBGRkZFRjUKLToxMDE4MjAwMDhGODcwMDJDOEY4NjAwMjQzNDY1MDE4MDkwRjkwMDBEOEQKLToxMDE4MzAwMEFDQjIwMDAwMjRDMjAwNzgwMDE5QzYwMDAwMTg3RTAzNzQKLToxMDE4NDAwMDAwMEY5MDI3MDAxMjI3QzJBNEIwMDAwNjEwODAwMDcwN0QKLToxMDE4NTAwMDI0MEU2MDgyQTRBRTAwMDhBMEEwMDAwNTI0MEYwMDAyQTAKLToxMDE4NjAwMEEwQUYwMDBCMDAwNEM0MDA4RjhCMDAxQzNDMTkyNzAwQTQKLToxMDE4NzAwMDAzMTk5MDI1QUNCMjAwMTBBQ0EwMDAxNEFDQTAwMDI0NTkKLToxMDE4ODAwMEFDQTAwMDI4QUNBMDAwMkM4RDczMDAzODI0MTFGRjgwODAKLToxMDE4OTAwMEFDQjMwMDE4OTBGMDAwMEQwMjMwMjgyNDMwQTQwMEZGRjMKLToxMDE4QTAwMDEwODAwMDA1OEZCRjAwMjA5MEVDMDAwRDMxOUYwMDdGNUQKLToxMDE4QjAwMEEwRkYwMDBEOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4NTcKLToxMDE4QzAwMDhGQjEwMDE0OEZCMDAwMTAzQzBBMTAwMDNDMEQ4MDAwNTYKLToxMDE4RDAwMDI3QkQwMDI4MDNFMDAwMDhBREFBMDFCODI2NUYwMTAwN0IKLToxMDE4RTAwMDI0MDVGRjgwMzNGODAwN0YzQzA2ODAwMDAzRTU3ODI0NjAKLToxMDE4RjAwMDNDMTk4MDBBMDMxOTIwMjFBQ0NGMDAyNDkwOEUwMEM0MkIKLToxMDE5MDAwMDAwQUU2ODI0MzFBQzAwRkYxMTgwRkZFQUFGODQwMDI0RjAKLToxMDE5MTAwMDI0OEUwMDc4OTVDRDAwMTIzQzBDMDgwMDhEOEMzMUE4RTcKLToxMDE5MjAwMDNDMDM4MDBDMzFBQjNGRkYwMTkyNDgyMTAwMEI1MTgwRkEKLToxMDE5MzAwMDAxMkE0MDIxMzEwNDAwN0YwMTA1MTAyNDAwODMzODIxNTEKLToxMDE5NDAwMEFDQzIwMDI4MEUwMDE2NzVBRjg3MDAyQzNDMDM4MDAwNDcKLToxMDE5NTAwMDhDNjUwMUI4MDRBMEZGRkUwMDAwMDAwMEFFMTIwMDAwN0MKLToxMDE5NjAwMDhDNzIwMTQ0QUUxMjAwMDRBNjExMDAwODI0MTEwMDAyN0EKLToxMDE5NzAwMEEyMTEwMDBCQUUxMzAwMjQwQTAwMUREODhGQkYwMDIwNTcKLToxMDE5ODAwMDNDMTI2MDAwOEU0NTJDMDgzQzAzRjAwMzM0NjJGRkZGREMKLToxMDE5OTAwMDAwQTJGODI0QUU1RjJDMDg4RTU4MkMwODNDMTkwMUIwMjgKLToxMDE5QTAwMDAzMTk5ODI1QUU1MzJDMDgwQTAwMUREODhGQkYwMDIwQkMKLToxMDE5QjAwMDI2NEQwMTAwMzFBRjAwN0YzQzEwODAwQTI0MEVGRjgwQ0QKLToxMDE5QzAwMDAxRjAyODIxMDFBRTYwMjQzQzBCODAwMEFENkMwMDI0QTYKLToxMDE5RDAwMDE2NjBGRkI4QUY4NTAwMjQyNDExMDAwM0EwQjEwMEVDMEQKLToxMDE5RTAwMDBBMDAxREQ4OEZCRjAwMjAyNjQ4MDEwMDMxMEEwMDdGNjEKLToxMDE5RjAwMDNDMEI4MDBBMjQwOUZGODAwMTRCMzAyMTAxMDkyMDI0N0YKLToxMDFBMDAwMDNDMDc4MDAwQUNFNDAwMjQwQTAwMUREN0FGODYwMDI0MDgKLToxMDFBMTAwMDk0NEQwMDEyMzIxRjNGRkYzMUFDM0ZGRjE1OUZGRjhERTkKLToxMDFBMjAwMDI0MEU2MDgyOTBDMzAwQzQyNDA5RkY4MDAxMjMxMDI0ODcKLToxMDFBMzAwMDMwNEEwMEZGMTE0MEZGODcwMDAwMDAwMDI0MDcwMDA0MjcKLToxMDFBNDAwMEEwQzcwMEVDOEY4NzAwMkMyNDA4NjA4NDI0MDYwMDBEQkEKLToxMDFBNTAwMEE0QTgwMDA4QTBBNjAwMDUwQTAwMURDMjI0MEYwMDAyQzkKLToxMDFBNjAwMDVGODY1NDM3RTRBQzYyQ0M1MDEwM0E0NTM2NjIxOTg1MzMKLToxMDFBNzAwMEJGMTRDMEU4MUJDMjdBMUU4NEY0QjU1NjA5NEVBNkZFRjgKLToxMDFBODAwMDdEREEwMUU3QzA0RDc0ODE4MDA4MDEwMDgwMDgwMDgwODQKLToxMDFBOTAwMDgwMDgwMDAwMDgwMDRGQkMwODAwNEZCQzA4MDA1MDk4QTgKLToxMDFBQTAwMDA4MDA1MDZDMDgwMDUwNTAwODAwNEY4QzA4MDA0RjhDMDQKLToxMDFBQjAwMDA4MDA0RjhDMDgwMDRGQzQwODAwNzJCQzA4MDA3MzA4NkYKLToxMDFBQzAwMDA4MDA3MkM4MDgwMDcxRjAwODAwNzJDODA4MDA3MkY4QjcKLToxMDFBRDAwMDA4MDA3MkM4MDgwMDcxRjAwODAwNzFGMDA4MDA3MUYwODkKLToxMDFBRTAwMDA4MDA3MUYwMDgwMDcxRjAwODAwNzFGMDA4MDA3MUYwNTIKLToxMDFBRjAwMDA4MDA3MUYwMDgwMDcxRjAwODAwNzFGMDA4MDA3MkU4NDkKLToxMDFCMDAwMDA4MDA3MkQ4MDgwMDcxRjAwODAwNzFGMDA4MDA3MUYwNDgKLToxMDFCMTAwMDA4MDA3MUYwMDgwMDcxRjAwODAwNzFGMDA4MDA3MUYwMjEKLToxMDFCMjAwMDA4MDA3MUYwMDgwMDcxRjAwODAwNzFGMDA4MDA3MUYwMTEKLToxMDFCMzAwMDA4MDA3MUYwMDgwMDcyRDgwODAwNzg5MDA4MDA3NzVDRkYKLToxMDFCNDAwMDA4MDA3ODU4MDgwMDc3NUMwODAwNzgyODA4MDA3NjQ0NzgKLToxMDFCNTAwMDA4MDA3NzVDMDgwMDc3NUMwODAwNzc1QzA4MDA3NzVDMTkKLToxMDFCNjAwMDA4MDA3NzVDMDgwMDc3NUMwODAwNzc1QzA4MDA3NzVDMDkKLToxMDFCNzAwMDA4MDA3NzVDMDgwMDc3NUMwODAwNzc1QzA4MDA3NzVDRjkKLTowNDFCODAwMDA4MDA3Nzg0NUUKLTowQzFCODQwMDBBMDAwMTIyMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTAxQjkwMDAwMDAwMDAwRDc0NzA2MTM0MkUzNjJFMzEzNTAwMDAwMEM3Ci06MTAxQkEwMDAwNDA2MEYwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCi06MTAxQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Ci06MTAxQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Ci06MTAxQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTAxQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Ci06MTAxQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTAxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTAxQzEwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDk3Ci06MTAxQzIwMDAzQzAyMDgwMDI0NDIxN0MwM0MwMzA4MDAyNDYzMkFCNDg1Ci06MTAxQzMwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNDMwCi06MTAxQzQwMDAzQzFEMDgwMDM3QkQyRkZDMDNBMEYwMjEzQzEwMDgwMDBDCi06MTAxQzUwMDAyNjEwMDQ4ODNDMUMwODAwMjc5QzE3QzAwRTAwMDI1RTVBCi06MTAxQzYwMDAwMDAwMDAwMDAwMDAwMDBEMjQwMkZGODAyN0JERkZFMEZGCi06MTAxQzcwMDAwMDgyMTAyNEFGQjAwMDEwQUY0MjAwMjBBRkJGMDAxOEE4Ci06MTAxQzgwMDBBRkIxMDAxNDkzNjUwMDA0MzA4NDAwN0YwMzQ0MTgyMTMxCi06MTAxQzkwMDAzQzAyMDAwODAwNjIxODIxMzBBNTAwMjAwMzYwODAyMTZBCi06MTAxQ0EwMDAzQzA4MDExMTI3N0IwMDA4MTRBMDAwMDIyNDY2MDA1Qzk4Ci06MTAxQ0IwMDAyNDY2MDA1ODkyMDIwMDA0OTc0MzAxMDQ5MjA0MDAwNDMxCi06MTAxQ0MwMDAzMDQ3MDAwRjMwNjNGRkZGMzA4NDAwNDAwMDY3MjgyMzU3Ci06MTAxQ0QwMDAxMDgwMDAwOTAwMDA0ODIxOTIwMjAwMDUzMDQyMDAwNEYzCi06MTAxQ0UwMDAxMDQwMDAwNTAwMDAwMDAwMTBBMDAwMDMwMDAwMDAwMEVDCi06MTAxQ0YwMDAyNEE1RkZGQzI0MDkwMDA0OTIwMjAwMDUzMDQyMDAwNEUwCi06MTAxRDAwMDAxMDQwMDAxMjAwMDAwMDAwMTBBMDAwMTAwMDAwMDAwMEIxCi06MTAxRDEwMDA5NjAyMDAwMjAwQTcyMDIxMDEwNDQwMjUyNDQyRkZGRTc0Ci06MTAxRDIwMDBBNzQyMTAxNjkyMDMwMDA0MjQwMkZGODAwMDQzMTAyNEVGCi06MTAxRDMwMDAzMDQyMDBGRjEwNDAwMDAzM0MwMjA0MDAwQTAwMDE3MjIwCi06MTAxRDQwMDAwMTAyNDAyNThDQzIwMDAwQUY0MjEwMTg4RjQyMDE3ODdBCi06MTAxRDUwMDAwNDQwRkZGRTI0MDIwMDBBQTc0MjAxNDA5NjAyMDAwMjRFCi06MTAxRDYwMDAyNDA0MDAwOTMwNDIwMDA3MDAwMjEwMjMzMDQyMDAwNzFCCi06MTAxRDcwMDBBNzQyMDE0Mjk2MDIwMDAyMjQ0MkZGRkVBNzQyMDE0NDBDCi06MTAxRDgwMDBBNzQwMDE0Njk3NDIwMTA0QTc0MjAxNDg4RjQyMDEwODNCCi06MTAxRDkwMDAzMDQyMDAyMDUwNDAwMDAxMjQwNDAwMDE5MjAyMDAwNDVGCi06MTAxREEwMDAzMDQyMDAxMDE0NDAwMDAyMzQ4MzAwMTAwMDgwMTgyMURCCi06MTAxREIwMDBBNzQzMDE0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTAxREMwMDAwMDAwMDAwMEFGNDgxMDAwMDAwMDAwMDAwMDAwMDAwMDBDCi06MTAxREQwMDAwMDAwMDAwMDAwMDAwMDAwOEY0MjEwMDAwNDQxRkZGRUUwCi06MTAxREUwMDAzMTAyRkZGRjEwNDAwMDA3MDAwMDAwMDA5MjAyMDAwNEQzCi06MTAxREYwMDAzMDQyMDA0MDE0NDAwMDAzMDAwMDAwMDA4RjQyMTAxOEUxCi06MTAxRTAwMDBBQ0MyMDAwMDk2MDIwMDA2MzA0MkZGRkYyNDQyMDAwMkVFCi06MTAxRTEwMDAwMDAyMTA0MzAwMDIxMDQwMDM2Mjg4MjE5NjIyMDAwMDU1Ci06MTAxRTIwMDAxMTIwMDAwRDMwNDRGRkZGMDBBNzEwMjE4RjgzMDAzQ0RDCi06MTAxRTMwMDA4RjQ1MTAxQzAwMDIxMDgyMDAwMjEwODAwMDQzMTAyMTA4Ci06MTAxRTQwMDBBQzQ1MDAwMDMwQTZGRkZGMEUwMDA1QjcwMDA1MkMwMkQwCi06MTAxRTUwMDAwMDQwMjAyMUE2MjIwMDAwOTIwMzAwMDQyNDAyRkY4MEZCCi06MTAxRTYwMDAwMDQzMTAyNDMwNDIwMEZGMTA0MDAwMUYwMDAwMDAwMDFCCi06MTAxRTcwMDA5MjAyMDAwNTMwNDIwMDAyMTA0MDAwMUIwMDAwMDAwMEVBCi06MTAxRTgwMDA5NzQyMTAwQzI0NDJGRkZFQTc0MjEwMTYwMDAwMDAwMEVCCi06MTAxRTkwMDAzQzAyMDQwMDM0NDIwMDMwQUY0MjEwMDAwMDAwMDAwMDU5Ci06MTAxRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMTAwMDUxCi06MTAxRUIwMDAwNDQxRkZGRTAwMDAwMDAwOTc0MjEwMEM4RjQ1MTAxQ0VCCi06MTAxRUMwMDAzMDQyRkZGRjI0NDIwMDMwMDAwMjEwODIwMDAyMTA4MEU2Ci06MTAxRUQwMDAwMDVCMTAyMUFDNDUwMDAwMzBBNkZGRkYwRTAwMDVCN0U3Ci06MTAxRUUwMDAwMDA1MkMwMkE2MjIwMDAwOTYwNDAwMDIyNDg0MDAwOEFCCi06MTAxRUYwMDAwRTAwMDFFNzMwODRGRkZGOTc0NDAxMDQwRTAwMDFGNTU2Ci06MTAxRjAwMDAzMDg0RkZGRjhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDE2Ci06MTAxRjEwMDAzQzAyMTAwMDI3QkQwMDIwMDNFMDAwMDhBRjQyMDE3ODFBCi06MTAxRjIwMDAzMDg0RkZGRjMwODIwMDA3OEY4NTAwMjQxMDQwMDAwMkJDCi06MTAxRjMwMDAyNDgzMDAwNzMwNjRGRkY4MDBBNDEwMjEzMDQyMUZGRjAzCi06MTAxRjQwMDAwMzQyMTgyMTI0N0I0MDAwQUY4NTAwMjhBRjgyMDAyNDgzCi06MTAxRjUwMDAwM0UwMDAwOEFGNDIwMDg0MzA4NEZGRkYzMDgyMDAwRkFFCi06MTAxRjYwMDA4Rjg1MDAyQzhGODYwMDM0MTA0MDAwMDIyNDgzMDAwRkUwCi06MTAxRjcwMDAzMDY0RkZGMDAwQTQxMDIxMDA0NjE4MkJBRjg1MDAzMDFDCi06MTAxRjgwMDAwMDQ2MjAyMzE0NjAwMDAyQUY4MjAwMkNBRjg0MDAyQzk2Ci06MTAxRjkwMDA4RjgyMDAyQzM0MDQ4MDAwMDM0MjE4MjEwMDY0MTgyMTMxCi06MTAxRkEwMDBBRjgzMDAzQzAzRTAwMDA4QUY0MjAwODA4RjgyMDAxNDQyCi06MTAxRkIwMDAxMDQwMDAwODhGODIwMDA0OEY4MkZGRTQxNDQwMDAwNTY3Ci06MTAxRkMwMDA4RjgyMDAwNDNDMDJGRkJGMzQ0MkZGRkYwMDgyMjAyNEM2Ci06MTAxRkQwMDA4RjgyMDAwNDMwNDMwMDA2MjQwMjAwMDIxMDYyMDAwRkNBCi06MTAxRkUwMDAzQzAyMDEwMTJDNjIwMDAzNTA0MDAwMDUyNDAyMDAwNDYxCi06MTAxRkYwMDAxMDYwMDAwRjNDMDIwMDAxMEEwMDAyMkUwMDAwMDAwMEU5Ci06MTAyMDAwMDAxMDYyMDAwNTI0MDIwMDA2MTQ2MjAwMEMzQzAyMDExMTVCCi06MTAyMDEwMDAwQTAwMDIyNzAwODIxMDI1M0MwMjAwMTEwMDgyMTAyNUQwCi06MTAyMDIwMDBBRjQyMTAwMDI0MDIwMDAxMEEwMDAyMkVBRjgyMDAwQzExCi06MTAyMDMwMDAwMDgyMTAyNUFGNDIxMDAwQUY4MDAwMEMwMDAwMDAwMEFECi06MTAyMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMEE1Ci06MTAyMDUwMDA4RjgyMDAwQzEwNDAwMDA0MDAwMDAwMDA4RjQyMTAwMDJFCi06MTAyMDYwMDAwNDQxRkZGRTAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDQzCi06MTAyMDcwMDA4RjgyMDAxMDAwMDIyOUMyMjRBM0ZGRjAwMDAzMTg0MjNGCi06MTAyMDgwMDAyNDQ0RjgwMDAwMDMxMTQwMDA0MzEwMjEwMDAyMTA4MDk2Ci06MTAyMDkwMDAwMDQzMTAyMTAwMDIxMDgwM0MwMzA4MDAyNDYzMTgwMDU0Ci06MTAyMEEwMDAyQzg0MDMwMTE0ODAwMDEzMDA0MzMwMjE4Rjg0MDAxODE2Ci06MTAyMEIwMDAwMEE0MTAyQjE0NDAwMDBGMDAwMDMwMjEwMEE0MTAyM0I2Ci06MTAyMEMwMDAwMDAyMTk0MDAwNjIxODIxMDAwMzE4ODAwMDYyMTgyMUU0Ci06MTAyMEQwMDA4RjgyMDAxQzAwODIxMDIxMjQ0MkZGRkYwMDQ1MTAyQjNDCi06MTAyMEUwMDAxNDQwMDAwNDAwMDMxODgwM0MwMjA4MDAyNDQyMUExNDIzCi06MTAyMEYwMDAwMDYyMzAyMTAzRTAwMDA4MDBDMDEwMjEyN0JERkZFMDhFCi06MTAyMTAwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTAzQzA0NjAwOEJFCi06MTAyMTEwMDA4QzgyNTAwMDI0MDNGRjdGM0MwNjYwMDAwMDQzMTAyNEEzCi06MTAyMTIwMDAzNDQyMzgwQ0FDODI1MDAwOENDMjRDMUMzQzFBODAwMEVCCi06MTAyMTMwMDAwMDAyMTYwMjMwNDIwMDBGMTA0MDAwMDdBRjgyMDAxQzYwCi06MTAyMTQwMDA4Q0MzNEMxQzNDMDIwMDFGMzQ0MkZDMDAwMDYyMTgyNDZCCi06MTAyMTUwMDAwMDAzMTlDMkFGODMwMDE4OEY0MjAwMDgyNzVCNDAwMEJDCi06MTAyMTYwMDAzNDQyMDAwMUFGNDIwMDA4QUY4MDAwMjQzQzAyNjAxQ0YyCi06MTAyMTcwMDBBRjQwMDA4MEFGNDAwMDg0OEM0NTAwMDg4Q0MzMDgwODQ1Ci06MTAyMTgwMDAzNDAyODAwMDAzNDIyMDIxMjQwMkZGRjAwMDYyMTgyNDYwCi06MTAyMTkwMDAzQzAyMDA4MDNDMDEwODAwQUMyMjA0MjAzQzAyNTcwOUFDCi06MTAyMUEwMDBBRjg0MDAzQzE0NjIwMDA0QUY4NTAwMzQyNDAyMDAwMUI3Ci06MTAyMUIwMDAwQTAwMDI4RUFGODIwMDE0QUY4MDAwMTQzQzAyODAwMDNGCi06MTAyMUMwMDAzNDQ0MDA3MDhDODMwMDAwOEY0MjAwMDAzODQyMDAwMUNDCi06MTAyMUQwMDAzMDQyMDAwMTEwNDAwMDE4QUY4MzAwMzgwMDgwNDAyMUQ5Ci06MTAyMUUwMDAwMDYwMzAyMThEMDcwMDAwM0MwNTA4MDA4Q0E1MDQ1Q0QwCi06MTAyMUYwMDAzQzA0MDgwMDhDODQwNDU4MDBFNjMwMjMwMDAwMTAyMUMxCi06MTAyMjAwMDAwMEE2MjgyMTAwQTYzMDJCMDA4MjIwMjEwMDg2MjAyMTU0Ci06MTAyMjEwMDAzQzAxMDgwMEFDMjUwNDVDM0MwMTA4MDBBQzI0MDQ1OEQ3Ci06MTAyMjIwMDA4RjQyMDAwMDM4NDIwMDAxMzA0MjAwMDExNDQwRkZFREFGCi06MTAyMjMwMDAwMEUwMzAyMUFGODcwMDM4M0MwMjgwMDAzNDQyMDA3MDVCCi06MTAyMjQwMDA4QzQ3MDAwMDhGODYwMDM4M0MwNTA4MDA4Q0E1MDQ1Qzk0Ci06MTAyMjUwMDAzQzA0MDgwMDhDODQwNDU4MDBFNjM4MjMwMDAwMTAyMTU4Ci06MTAyMjYwMDAwMEE3MjgyMTAwODIyMDIxOEY4MjAwMTQwMEE3MzAyQjk0Ci06MTAyMjcwMDAwMDg2MjAyMTNDMDEwODAwQUMyNTA0NUMzQzAxMDgwMERDCi06MTAyMjgwMDBBQzI0MDQ1ODEwNDAwMDE2MDAwMDAwMDA5NzQyMDEwNERFCi06MTAyMjkwMDAxMDQwMDAwNThGODMwMDAwMTQ2MDAwMDcyNDYyRkZGRkQ4Ci06MTAyMkEwMDAwQTAwMDJEMDJDNjIwMDBBMkM2MjAwMTA1MDQwMDAwNDg4Ci06MTAyMkIwMDA4RjgzMDAwMDI0NjIwMDAxQUY4MjAwMDA4RjgzMDAwMDQyCi06MTAyMkMwMDAyQzYyMDAwQTE0NDAwMDAzMkM2MjAwMDcwQTAwMDJEN0E3Ci06MTAyMkQwMDBBRjgwRkZFNDEwNDAwMDAyMjQwMjAwMDFBRjgyRkZFNDVGCi06MTAyMkUwMDA4RjQzMDEwODhGNDQwMTAwMzA2MjIwMDBBRjgzMDAwNDU3Ci06MTAyMkYwMDAxMDQwMDAwOEFGODQwMDEwM0MwMjA4MDA4QzQyMDQyQ0ZGCi06MTAyMzAwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjA0MkMwQTAwMDVCMzYxCi06MTAyMzEwMDAzQzAyNDAwMDMwNjUwMjAwMTRBMDAwMDMyNDAyMEYwMEJDCi06MTAyMzIwMDAxNDgyMDI2MDI0MDIwRDAwOTc0MjAxMDQxMDQwMDJDODhBCi06MTAyMzMwMDAzQzAyNDAwMDMwNjI0MDAwMTQ0MDAwQUQ4RjgyMDAzQ0ZGCi06MTAyMzQwMDA4QzQ0MDAwODhGNDIwMTc4MDQ0MEZGRkUyNDAyMDgwMEZDCi06MTAyMzUwMDBBRjQyMDE3ODI0MDIwMDA4QTc0MjAxNDBBNzQwMDE0MjkxCi06MTAyMzYwMDA5NzQyMDEwNDhGODQwMDA0MzA1MUZGRkYzMDgyMDAwMTQ2Ci06MTAyMzcwMDAxMDQwMDAwNzAyMjA4MDIxMjYyM0ZGRkUyNDAyMDAwMkQ1Ci06MTAyMzgwMDAzMDcwRkZGRkE3NDIwMTQ2MEEwMDAzMDRBNzQzMDE0ODNCCi06MTAyMzkwMDBBNzQwMDE0NjNDMDIwODAwOEM0MjA0M0MxNDQwMDAwRDVBCi06MTAyM0EwMDA4RjgzMDAxMDMwODIwMDIwMTQ0MDAwMDIyNDAzMDAwOUIzCi06MTAyM0IwMDAyNDAzMDAwMTAwNjAyMDIxOEY4MzAwMTAyNDAyMDkwMDAzCi06MTAyM0MwMDA1MDYyMDAwMTM0ODQwMDA0QTc0NDAxNEEwQTAwMDMxRjNDCi06MTAyM0QwMDAwMDAwMDAwMDI0MDIwRjAwMTQ2MjAwMDUzMDgyMDAyMDdCCi06MTAyM0UwMDAxNDQwMDAwNjI0MDMwMDBEMEEwMDAzMUUyNDAzMDAwNTA4Ci06MTAyM0YwMDAxNDQwMDAwMjI0MDMwMDA5MjQwMzAwMDFBNzQzMDE0QUZBCi06MTAyNDAwMDAzQzAyMDgwMDhDNDIwNDIwM0MwNDAwNDgwRTAwMDIwQUYyCi06MTAyNDEwMDAwMDQ0MjAyNTBFMDAwMjMzMDAwMDAwMDA4RjgyMDAwQ0QzCi06MTAyNDIwMDAxMDQwMDAzRTAwMDAwMDAwOEY0MjEwMDAzQzAzMDAyMERFCi06MTAyNDMwMDAwMDQzMTAyNDEwNDAwMDM5OEY4MjAwMDQzMDQyMDAwMjEzCi06MTAyNDQwMDAxMDQwMDAzNjAwMDAwMDAwOTc0MjEwMTQxNDQwMDAzMzgyCi06MTAyNDUwMDAwMDAwMDAwMDk3NDIxMDA4OEY4ODAwM0MzMDQyRkZGRkM4Ci06MTAyNDYwMDAyNDQyMDAwNjAwMDIxODgyMDAwMzM4ODAwMEU4MzAyMTcwCi06MTAyNDcwMDAzMDQzMDAwMThDQzQwMDAwMTA2MDAwMDQzMDQyMDAwM0FGCi06MTAyNDgwMDAwMDAwMDAwRDBBMDAwMzYwMDBFODEwMjE1NDQwMDAxMDE1Ci06MTAyNDkwMDAzMDg0RkZGRjNDMDVGRkZGMDA4NTIwMjQwMDg1MTgyNkJGCi06MTAyNEEwMDAwMDAzMTgyQjAwMDQxMDJCMDA0MzEwMjQxMDQwMDAwNURCCi06MTAyNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDBGCi06MTAyNEMwMDAyNDAwMDFDQjhDQzIwMDAwMEEwMDAzNUYwMDQ1MjAyNUQ4Ci06MTAyNEQwMDAzODgzRkZGRjAwMDMxODJCMDAwNDEwMkIwMDQzMTAyNDQ3Ci06MTAyNEUwMDAxMDQwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDhBCi06MTAyNEYwMDAwMDAwMDAwMDI0MDAwMUQ0OENDMjAwMDAzNDQ0RkZGRjFGCi06MTAyNTAwMDAwMEU4MTAyMUFDNDQwMDAwM0MwMjA4MDA4QzQyMDQzMDdBCi06MTAyNTEwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjA0MzA4RjYyMDAwMDFDCi06MTAyNTIwMDA4Rjg0MDAzQ0FGODIwMDA4OEM4MzAwMDAzNDAyRkZGRkUwCi06MTAyNTMwMDAxNDYyMDAwRjAwMDAxMDIxM0MwNTA4MDA4Q0E1MDQ1NDEzCi06MTAyNTQwMDAzQzA0MDgwMDhDODQwNDUwMDBCMDI4MjEwMEIwMzAyQkRCCi06MTAyNTUwMDAwMDgyMjAyMTAwODYyMDIxM0MwMTA4MDBBQzI1MDQ1NDgzCi06MTAyNTYwMDAzQzAxMDgwMEFDMjQwNDUwMEEwMDA1QTkyNDA0MDAwODFBCi06MTAyNTcwMDA4QzgyMDAwMDMwNDIwMTAwMTA0MDAwMEYwMDAwMTAyMTRBCi06MTAyNTgwMDAzQzA1MDgwMDhDQTUwNDRDM0MwNDA4MDA4Qzg0MDQ0OERECi06MTAyNTkwMDAwMEIwMjgyMTAwQjAzMDJCMDA4MjIwMjEwMDg2MjAyMUFECi06MTAyNUEwMDAzQzAxMDgwMEFDMjUwNDRDM0MwMTA4MDBBQzI0MDQ0ODY0Ci06MTAyNUIwMDAwQTAwMDVBOTI0MDQwMDA4M0MwNTA4MDA4Q0E1MDQ0NDcxCi06MTAyNUMwMDAzQzA0MDgwMDhDODQwNDQwMDBCMDI4MjEwMEIwMzAyQjZCCi06MTAyNUQwMDAwMDgyMjAyMTAwODYyMDIxM0MwMTA4MDBBQzI1MDQ0NDEzCi06MTAyNUUwMDAzQzAxMDgwMEFDMjQwNDQwMEEwMDA1QTkyNDA0MDAwOEFBCi06MTAyNUYwMDA4RjYyMDAwODhGNjIwMDAwMDAwMjE2MDIzMDQzMDBGMDc0Ci06MTAyNjAwMDAyNDAyMDAzMDEwNjIwMDA1MjQwMjAwNDAxMDYyMDBFMDQ1Ci06MTAyNjEwMDA4RjgyMDAyMDBBMDAwNUIxMjQ0MjAwMDExNEEwMDAwNUE5Ci06MTAyNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDlECi06MTAyNjMwMDAyNDAwMDFGRThGNDIwMTc4MDQ0MEZGRkUwMDAwMDAwMEVDCi06MTAyNjQwMDAwRTAwMDIzQjAwMDAwMDAwMTQ0MDAwMDUwMDQwODAyMTA1Ci06MTAyNjUwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDIwNTQyCi06MTAyNjYwMDA4RTAyMDAwMDEwNDAwMDA1MDAwMDAwMDAwMDAwMDAwMDg1Ci06MTAyNjcwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAyMDg4RjYyMDAwQzIyCi06MTAyNjgwMDAwNDQzMDAwMzI0MDIwMDAxMEEwMDA0NTdBRTAwMDAwMEM2Ci06MTAyNjkwMDBBRTAyMDAwMDhGODIwMDNDOEM0ODAwMDhBMjAwMDAwN0I4Ci06MTAyNkEwMDA4RjY1MDAwQzhGNjQwMDA0MzBBM0ZGRkYwMDA0MjQwMjM4Ci06MTAyNkIwMDAwMDg1MjAyMzMwODIwMEZGMDA0MzEwMjEyNDQyMDAwNUMyCi06MTAyNkMwMDAwMDAyMzA4MzJDQzIwMDgxQTYwNTAwMEExNDQwMDAwNUQ4Ci06MTAyNkQwMDBBMjA0MDAwNDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDQzCi06MTAyNkUwMDAyNDAwMDIyMDhGODUwMDNDMEUwMDA1RDUyNjA0MDAxNDJFCi06MTAyNkYwMDA4RjYyMDAwNDhGNDMwMTA4QTYwMjAwMDgzQzAyMTAwMDBDCi06MTAyNzAwMDAwMDYyMTgyNDEwNjAwMDA4MDAwMDAwMDA5NzQyMDEwNEQ1Ci06MTAyNzEwMDA5MjAzMDAwNzI0NDJGRkVDMzQ2MzAwMDIzMDQ1RkZGRkMwCi06MTAyNzIwMDAwQTAwMDNFQ0EyMDMwMDA3OTc0MjAxMDQyNDQyRkZGMEQxCi06MTAyNzMwMDAzMDQ1RkZGRjk2MDYwMDA4MkNDMjAwMTM1NDQwMDAwNUU4Ci06MTAyNzQwMDA5MjAzMDAwNzkyMDIwMDA3MzQ0MjAwMDFBMjAyMDAwNzMwCi06MTAyNzUwMDA5MjAzMDAwNzI0MDIwMDAxMTA2MjAwMDUyNDAyMDAwMzE2Ci06MTAyNzYwMDAxMDYyMDAwQjhGODIwMDNDMEEwMDA0MDkzMEM2RkZGRjk0Ci06MTAyNzcwMDA4RjgyMDAzQzNDMDRGRkZGOEM0MzAwMEMwMDY0MTgyNDUzCi06MTAyNzgwMDAwMDY1MTgyNUFDNDMwMDBDMEEwMDA0MDkzMEM2RkZGRkExCi06MTAyNzkwMDAzQzA0RkZGRjhDNDMwMDEwMDA2NDE4MjQwMDY1MTgyNURBCi06MTAyN0EwMDBBQzQzMDAxMDMwQzZGRkZGMjRDMjAwMDIwMDAyMTA4M0I5Ci06MTAyN0IwMDBBMjAyMDAwNThGODMwMDNDMzA0MjAwRkYwMDAyMTA4MDFGCi06MTAyN0MwMDAwMDQzMjgyMThDQTgwMDAwOENBMjAwMDAyNDAzMDAwNEYwCi06MTAyN0QwMDAwMDAyMTcwMjE0NDMwMDEyMDAwMDAwMDA5NzQyMDEwNDk3Ci06MTAyN0UwMDAzQzAzRkZGRjAxMDMxODI0MzA0MkZGRkYwMDQ2MTAyMzgzCi06MTAyN0YwMDAyNDQyRkZGRTAwNjI0MDI1QUNBODAwMDA5MjAzMDAwNUMxCi06MTAyODAwMDAzMDYyMDBGRjAwMDIxMDgwMDA1MDEwMjE5MDQyMDAxNDNFCi06MTAyODEwMDAzMDQyMDAwRjAwNDMxMDIxMEEwMDA0M0VBMjAyMDAwNkNECi06MTAyODIwMDA4Q0E0MDAwNDk3NDIwMTA0OTYwMzAwMEEzMDg4RkZGRjNECi06MTAyODMwMDAzMDQyRkZGRjAwNDYxMDIzMjQ0MkZGRDYwMDAyMTQwMDVFCi06MTAyODQwMDAwMTAyNDAyNUFDQTgwMDA0OTIwMjAwMDc5MjA0MDAwNTkyCi06MTAyODUwMDAyNDYzMDAyODAwMDMxODgzMDA2NDE4MjEzNDQyMDAwNDE0Ci06MTAyODYwMDBBMjAzMDAwNkEyMDIwMDA3OEY4MjAwMDQyNDAzRkZGQkRDCi06MTAyODcwMDAzNDQyMDAwMjAwNDMxMDI0QUY4MjAwMDQ5MjAzMDAwNjk5Ci06MTAyODgwMDA4Rjg3MDAzQzAwMDMxODgwMDA3MDEwMjE4QzQ0MDAyMENBCi06MTAyODkwMDAzQzAyRkZGNjM0NDJGRkZGMDA4MjQwMjQwMDY3MTgyMTBCCi06MTAyOEEwMDBBRTA0MDAwQ0FDNjgwMDBDOTIwNTAwMDYzQzAzRkY3RkYwCi06MTAyOEIwMDA4RTAyMDAwQzAwMDUyODgwMDBCMDIwMjEzNDYzRkZGRjQ5Ci06MTAyOEMwMDAwMTAzMzAyNDk0ODgwMDI2MDBBNzI4MjEwMDQzMTAyNDA3Ci06MTAyOEQwMDBBRTAyMDAwQ0FDODYwMDIwQUM4ODAwMjRBQ0E4MDAxMDJFCi06MTAyOEUwMDAyNDAyMDAxMEE3NDIwMTQwMjQwMjAwMDJBNzQwMDE0MjM2Ci06MTAyOEYwMDBBNzQwMDE0NEE3NDIwMTQ2OTc0MjAxMDQzQzA0MDAwODU2Ci06MTAyOTAwMDAyNDQyRkZGRUE3NDIwMTQ4MjQwMjAwMDEwRTAwMDIwQUYxCi06MTAyOTEwMDBBNzQyMDE0QTk2MDMwMDBBOTIwMjAwMDQwMDQzMTAyMUQ0Ci06MTAyOTIwMDAyNDQyMDAwMjMwNDIwMDA3MDAwMjEwMjMzMDQyMDAwNzE4Ci06MTAyOTMwMDAwRTAwMDIzM0FFMDIwMDEwOEY2MjAwMDAzQzAzMDgwMDVDCi06MTAyOTQwMDA4QzYzMDQ0NDI0MDQwMDEwQUY4MjAwMDg5NzQyMDEwNDAxCi06MTAyOTUwMDAzMDQyRkZGRjI0NDJGRkZFMDA0MDM4MjEwMDAyMzdDMzBGCi06MTAyOTYwMDAzQzAyMDgwMDhDNDIwNDQwMDA2NzE4MjEwMDY3MjgyQkI1Ci06MTAyOTcwMDAwMDQ2MTAyMTAwNDUxMDIxM0MwMTA4MDBBQzIzMDQ0NDBFCi06MTAyOTgwMDAzQzAxMDgwMEFDMjIwNDQwMEEwMDA1M0UwMDAwMDAwMEEzCi06MTAyOTkwMDAxNEEwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcxCi06MTAyOUEwMDAwMDAwMDAwMDI0MDAwMjlFOEY0MjAxNzgwNDQwRkZGRUQ4Ci06MTAyOUIwMDAwMDAwMDAwMDBFMDAwMjNCMDAwMDAwMDAxNDQwMDAwNTczCi06MTAyOUMwMDAwMDQwODAyMTAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDE5Ci06MTAyOUQwMDAyNDAwMDJBNThFMDIwMDAwNTQ0MDAwMDY5MjAyMDAwNzY3Ci06MTAyOUUwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDJBODBDCi06MTAyOUYwMDA5MjAyMDAwNzMwNDIwMDA0MTA0MDAwMDU4RjgyMDAwNDVDCi06MTAyQTAwMDAyNDAzRkZGQjM0NDIwMDAyMDA0MzEwMjRBRjgyMDAwNDgxCi06MTAyQTEwMDA4RjYyMDAwNDA0NDMwMDA4OTIwMjAwMDc5MjAyMDAwNjNECi06MTAyQTIwMDA4RTAzMDAwQ0FFMDAwMDAwMDAwMjEwODAwMDUwMTAyMTQ4Ci06MTAyQTMwMDBBQzQzMDAyMDkyMDIwMDA3MzA0MjAwMDQ1NDQwMDAwOUQ5Ci06MTAyQTQwMDA5NjAyMDAwQTkyMDIwMDA1M0MwMzAwMDEwMDAyMTA4MDc5Ci06MTAyQTUwMDAwMDUwMTAyMThDNDYwMDE4MDBDMzMwMjFBQzQ2MDAxOEVECi06MTAyQTYwMDA5NjAyMDAwQTkyMDYwMDA0Mjc3MTAwMDgwMjIwMjAyMTI1Ci06MTAyQTcwMDAwMEMyMzAyMTI0QzYwMDA1MjYwNTAwMTQwRTAwMDVENTJECi06MTAyQTgwMDAwMDA2MzA4MjkyMDQwMDA2OEY2NTAwMDQzQzAyN0ZGRjNFCi06MTAyQTkwMDAwMDA0MjA4MDAwOTEyMDIxOEM4MzAwMDQzNDQyRkZGRjM5Ci06MTAyQUEwMDAwMEEyMjgyNDAwNjUxODIxQUM4MzAwMDQ5MjAyMDAwN0NDCi06MTAyQUIwMDA5MjA0MDAwNTkyMDMwMDA0MzA0MjAwMDQxMDQwMDAxNDA4Ci06MTAyQUMwMDA5NjA3MDAwODMwODQwMEZGMDAwNDIwODAwMDkxMjAyMTM4Ci06MTAyQUQwMDA4Qzg2MDAwNDk3NDIwMTA0OTYwNTAwMEEzMDYzMDBGRkNCCi06MTAyQUUwMDAzMDQyRkZGRjAwNDMxMDIxMDA0NTEwMjEzMEUzRkZGRjdCCi06MTAyQUYwMDAwMDQzMTAyMzI0NDJGRkQ4MzBDNkZGRkYwMDAyMTQwMDE5Ci06MTAyQjAwMDAwMEMyMzAyNUFDODYwMDA0MEEwMDA0RjI5MjAzMDAwN0RDCi06MTAyQjEwMDAzMDg1MDBGRjAwMDUyODgwMDBCMTI4MjE4Q0E0MDAwMDJBCi06MTAyQjIwMDA5NzQyMDEwNDMwNjMwMEZGMzA0MkZGRkYwMDQzMTAyMTUxCi06MTAyQjMwMDAwMDQ3MTAyMzNDMDNGRkZGMDA4MzIwMjQzMDQyRkZGRkE3Ci06MTAyQjQwMDAwMDgyMjAyNUFDQTQwMDAwOTIwMzAwMDcyNDAyMDAwMUFCCi06MTAyQjUwMDAxMDYyMDAwNjAwMDAwMDAwMjQwMjAwMDMxMDYyMDAxMTUxCi06MTAyQjYwMDAwMDAwMDAwMDBBMDAwNTE1OEUwMzAwMTA5NzQyMDEwNEMyCi06MTAyQjcwMDA5MjAzMDAwNDk2MDUwMDBBOEUyNDAwMEMwMDQzMTAyMUU1Ci06MTAyQjgwMDAwMDQ1MTAyMTI0NDJGRkYyM0MwM0ZGRkYwMDgzMjAyNDc0Ci06MTAyQjkwMDAzMDQyRkZGRjAwODIyMDI1QUUyNDAwMEMwQTAwMDUxNUZDCi06MTAyQkEwMDA4RTAzMDAxMDk3NDIwMTA0OTIwMzAwMDQ5NjA1MDAwQTY4Ci06MTAyQkIwMDA4RTI0MDAxMDAwNDMxMDIxMDA0NTEwMjEyNDQyRkZFRTE2Ci06MTAyQkMwMDAzQzAzRkZGRjAwODMyMDI0MzA0MkZGRkYwMDgyMjAyNUNBCi06MTAyQkQwMDBBRTI0MDAxMDhFMDMwMDEwMjQwMjAwMEFBNzQyMDE0MDE4Ci06MTAyQkUwMDBBNzQzMDE0Mjk2MDMwMDBBOTIwMjAwMDQzQzA0MDA0MEZECi06MTAyQkYwMDAwMDQzMTAyMUE3NDIwMTQ0QTc0MDAxNDY5NzQyMDEwNDI3Ci06MTAyQzAwMDBBNzQyMDE0ODI0MDIwMDAxMEUwMDAyMEFBNzQyMDE0QTFECi06MTAyQzEwMDAwRTAwMDIzMzAwMDAwMDAwOEY2MjAwMDA5MjAzMDAwNEU3Ci06MTAyQzIwMDAwMDAwMjAyMUFGODIwMDA4OTc0MjAxMDQ5NjA2MDAwQUE2Ci06MTAyQzMwMDAzMDQyRkZGRjAwNjIxODIxMDA2MDI4MjEzQzAzMDgwMDk5Ci06MTAyQzQwMDA4QzYzMDQ0NDNDMDIwODAwOEM0MjA0NDAwMDY1MTgyMTU3Ci06MTAyQzUwMDAwMDQ0MTAyMTAwNjUzODJCMDA0NzEwMjEzQzAxMDgwMDdBCi06MTAyQzYwMDBBQzIzMDQ0NDNDMDEwODAwQUMyMjA0NDA5MjA0MDAwNDVDCi06MTAyQzcwMDAwMDg2MjAyMTI0ODQwMDBBMzA4NEZGRkYwRTAwMDFFNzMzCi06MTAyQzgwMDAwMDAwMDAwMDk3NDQwMTA0MzA4NEZGRkYwRTAwMDFGNUFFCi06MTAyQzkwMDAwMDAwMDAwMDNDMDIxMDAwQUY0MjAxNzgwQTAwMDVCMEJECi06MTAyQ0EwMDA4RjgyMDAyMDE0ODIwMDI3MzA2MjAwMDY5NzQyMDEwNEMwCi06MTAyQ0IwMDAxMDQwMDA2NzNDMDI0MDAwMzA2MjQwMDAxMDQwMDAwNUI4Ci06MTAyQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMEY3Ci06MTAyQ0QwMDAyNDAwMDM5NjhGNDIwMTc4MDQ0MEZGRkUyNDAyMDgwMDdFCi06MTAyQ0UwMDBBRjQyMDE3ODI0MDIwMDA4QTc0MjAxNDBBNzQwMDE0MkY4Ci06MTAyQ0YwMDA4RjgyMDAwNDk3NDMwMTA0MzA0MjAwMDExMDQwMDAwNzE2Ci06MTAyRDAwMDAzMDcwRkZGRjI2MDNGRkZFMjQwMjAwMDJBNzQyMDE0NkE3Ci06MTAyRDEwMDBBNzQzMDE0ODBBMDAwNTY4MjQwMjAwMERBNzQwMDE0NkE4Ci06MTAyRDIwMDAyNDAyMDAwREE3NDIwMTRBOEY2MjAwMDAyNDA0MDAwODFCCi06MTAyRDMwMDBBRjgyMDAwODBFMDAwMUU3MDAwMDAwMDAwQTAwMDU0MjEzCi06MTAyRDQwMDAwMjAwMjAyMTEwNDAwMDQyM0MwMjQwMDA5MzYyMDAwMDNCCi06MTAyRDUwMDAzMDQzMDBGMDI0MDIwMDEwMTA2MjAwMDUyNDAyMDA3MENECi06MTAyRDYwMDAxMDYyMDAzNTAwMDAwMDAwMEEwMDA1QjA4RjgyMDAyMENDCi06MTAyRDcwMDA4RjYyMDAwMDk3NDMwMTA0MzA1MEZGRkYzMDcxRkZGRjY2Ci06MTAyRDgwMDA4RjQyMDE3ODA0NDBGRkZFMzIwMjAwMDcwMDAyMTAyMzQ4Ci06MTAyRDkwMDAzMDQyMDAwNzI0MDMwMDBBMjYwNEZGRkVBNzQzMDE0MDM3Ci06MTAyREEwMDBBNzQyMDE0MkE3NDQwMTQ0QTc0MDAxNDZBNzUxMDE0ODU4Ci06MTAyREIwMDA4RjQyMDEwODMwNDIwMDIwMTQ0MDAwMDIyNDAzMDAwOTIxCi06MTAyREMwMDAyNDAzMDAwMUE3NDMwMTRBMEUwMDAyMEEzQzA0MDA0MDBDCi06MTAyREQwMDAwRTAwMDIzMzAwMDAwMDAwM0MwNzA4MDA4Q0U3MDQ0NEFBCi06MTAyREUwMDAwMjExMTAyMTI0NDJGRkZFM0MwNjA4MDA4Q0M2MDQ0MDVDCi06MTAyREYwMDAwMDQwMTgyMTAwRTMzODIxMDAwMDEwMjE4RjY1MDAwMEY5Ci06MTAyRTAwMDAwMEUzNDAyQjAwQzIzMDIxMjYwNDAwMDgwMEM4MzAyMTE2Ci06MTAyRTEwMDAzMDg0RkZGRkFGODUwMDA4M0MwMTA4MDBBQzI3MDQ0NDY0Ci06MTAyRTIwMDAzQzAxMDgwMEFDMjYwNDQwMEUwMDAxRTcwMDAwMDAwMDUxCi06MTAyRTMwMDAwQTAwMDU0MjAyMjAyMDIxMEUwMDAxMzkwMDAwMDAwMDk2Ci06MTAyRTQwMDA4RjgyMDAyMDI0NDIwMDAxQUY4MjAwMjAzQzAyNDAwMDFCCi06MTAyRTUwMDBBRjQyMDEzODAwMDAwMDAwMEEwMDAyOEYzQzAyODAwMEVGCi06MTAyRTYwMDAzMDg0RkZGRjMwQzZGRkZGMDAwNTJDMDAwMEE2MjgyNTk4Ci06MTAyRTcwMDAzODgyRkZGRjAwNDUxMDIxMDA0NTI4MkIwMDQ1MTAyMTE2Ci06MTAyRTgwMDAwMDAyMUMwMjMwNDJGRkZGMDA0MzEwMjEwMDAyMUMwMjFFCi06MTAyRTkwMDAzMDQyRkZGRjAwNDMxMDIxMzg0MkZGRkYwM0UwMDAwOEVCCi06MTAyRUEwMDAzMDQyRkZGRjMwODRGRkZGMzBBNUZGRkYwMDAwMTgyMUY0Ci06MTAyRUIwMDAxMDgwMDAwNzAwMDAwMDAwMzA4MjAwMDExMDQwMDAwMjc2Ci06MTAyRUMwMDAwMDA0MjA0MjAwNjUxODIxMEEwMDA1Q0IwMDA1Mjg0MEI3Ci06MTAyRUQwMDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDYyNEM2RkZGRkI4Ci06MTAyRUUwMDA4Q0EyMDAwMDI0QTUwMDA0QUM4MjAwMDAwQTAwMDVENUQ1Ci06MTAyRUYwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwODgzCi06MTAyRjAwMDAyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMENBCi06MTAyRjEwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNEVECi06MDgyRjIwMDAwM0UwMDAwODAwMDAwMDAwQkUKLTowNDJGMjgwMDAwMDAwMDAxQTQKLTowNDJGMkMwMDBBMDAwMDI2NzEKLToxMDJGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDc0Nzg3MDM0RjQKLToxMDJGNDAwMDJFMzYyRTMxMzYwMDAwMDAwNDA2MTAwMDAwMDAwMDBBNjQKLToxMDJGNTAwMDAwMDAwMTM2MDAwMEVBNjAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMDJGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMDJGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMDJGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFEMjQKLToxMDJGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMDJGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMDJGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMDJGQzAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMzAwMDAwMDAwRUUKLToxMDJGRDAwMDAwMDAwMDBEMDAwMDAwMEQzQzAyMDgwMDI0NDIzQjYwOTAKLToxMDJGRTAwMDNDMDMwODAwMjQ2MzNFMThBQzQwMDAwMDAwNDMyMDJCNDMKLToxMDJGRjAwMDE0ODBGRkZEMjQ0MjAwMDQzQzFEMDgwMDM3QkQ3RkZDMDcKLToxMDMwMDAwMDAzQTBGMDIxM0MxMDA4MDAyNjEwMDA5ODNDMUMwODAwOEEKLToxMDMwMTAwMDI3OUMzQjYwMEUwMDA0QUUwMDAwMDAwMDAwMDAwMDBEODUKLToxMDMwMjAwMDNDMDU4MDAwOEY4MzAwMzAzNEE4MDA3MDhEMDcwMDAwQkQKLToxMDMwMzAwMDAwODMzMDI1M0MwMjkwMDAwMEMyMjAyNUFDQTQwMDIwNzMKLToxMDMwNDAwMEFGODcwMDI0M0MwNDgwMDA4Qzg5MDAyMDA1MjBGRkZFMEYKLToxMDMwNTAwMDAwMDAwMDAwMzQ4NDAwNzA4Qzg1MDAwMDNDMTgwODAwREIKLToxMDMwNjAwMDhGMTgwMDdDM0MwRDA4MDA4REFEMDA3ODAwQTdDODIzQTgKLToxMDMwNzAwMDAzMTk1MDIxMDAwMDcwMjEwMTU5NjAyQjAxQUU1ODIxMjUKLToxMDMwODAwMDAxNkMzODIxM0MwMTA4MDBBQzJBMDA3QzNDMDEwODAwOUUKLToxMDMwOTAwMEFDMjcwMDc4MDNFMDAwMDgwMDAwMDAwMDBBMDAwMDNEQjMKLToxMDMwQTAwMDI0MDQwMDAxOEY4NTAwMzAzQzA0ODAwMDM0ODMwMDAxM0IKLToxMDMwQjAwMDAwQTMxMDI1MDNFMDAwMDhBQzgyMDAyMDAzRTAwMDA4MTQKLToxMDMwQzAwMDAwMDAxMDIxMzA4NEZGRkYzMEE1RkZGRjEwODAwMDA3QjMKLToxMDMwRDAwMDAwMDAxODIxMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyNEMKLToxMDMwRTAwMDAwNjUxODIxMTQ4MEZGRkIwMDA1Mjg0MDAzRTAwMDA4NUMKLToxMDMwRjAwMDAwNjAxMDIxMTBDMDAwMDcwMDAwMDAwMDhDQTIwMDAwM0EKLToxMDMxMDAwMDI0QzZGRkZGMjRBNTAwMDRBQzgyMDAwMDE0QzBGRkZCMEUKLToxMDMxMTAwMDI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4NjAKLToxMDMxMjAwMDI0QTNGRkZGQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMDMxMzAwMDI0MDJGRkZGMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0Q0IKLToxMDMxNDAwMDAzRTAwMDA4MDAwMDAwMDA5MEFBMDAzMThGQUIwMDEwREYKLToxMDMxNTAwMDhDQUMwMDQwM0MwMzAwRkY4RDY4MDAwNEFENkMwMDIwODcKLToxMDMxNjAwMDhDQUQwMDQ0MDBFMDYwMjEzNDYyRkZGRkFENkQwMDI0QUYKLToxMDMxNzAwMDhDQTcwMDQ4M0MwOUZGMDAwMTA5QzAyNEFENjcwMDI4NjYKLToxMDMxODAwMDhDQUUwMDRDMDE4MkM4MjQwMzE5NzgyNUFENkYwMDA0NzEKLToxMDMxOTAwMEFENkUwMDJDOENBRDAwMzgzMTRBMDBGRkFENkQwMDFDQzcKLToxMDMxQTAwMDk0QTkwMDMyMzEyOEZGRkZBRDY4MDAxMDkwQTcwMDMwQ0QKLToxMDMxQjAwMEE1NjAwMDAyQTE2MDAwMDRBMTY3MDAwMDkwQTMwMDMyOTYKLToxMDMxQzAwMDMwNjIwMEZGMDAwMjE5ODIxMDYwMDAwNTI0MDUwMDAxMzIKLToxMDMxRDAwMDEwNjUwMDBFMDAwMDAwMDAwM0UwMDAwOEExNkEwMDAxNzUKLToxMDMxRTAwMDhDRDgwMDI4MzU0QTAwODBBRDc4MDAxODhDQ0YwMDE0QTgKLToxMDMxRjAwMEFENkYwMDE0OENDRTAwMzBBRDZFMDAwODhDQzQwMDJDNzYKLToxMDMyMDAwMEExNkEwMDAxMDNFMDAwMDhBRDY0MDAwQzhDQ0QwMDFDMzUKLToxMDMyMTAwMEFENkQwMDE4OENDOTAwMTRBRDY5MDAxNDhDQzgwMDI0NzEKLToxMDMyMjAwMEFENjgwMDA4OENDNzAwMjBBRDY3MDAwQzhDQzIwMDE0OEMKLToxMDMyMzAwMDhDODMwMDcwMDA0M0M4MkIxMzIwMDAwNzAwMDAwMDAwOUYKLToxMDMyNDAwMDhDQzIwMDE0MTQ0Q0ZGRTQwMDAwMDAwMDM1NEEwMDgwREEKLToxMDMyNTAwMDAzRTAwMDA4QTE2QTAwMDE4QzgyMDA3MDBBMDAwMEM2MjkKLToxMDMyNjAwMDAwMDAwMDAwOTA4OTAwMzAyN0JERkZGODhGQTgwMDFDRTcKLToxMDMyNzAwMEEzQTkwMDAwOEZBMzAwMDAzQzBERkY4MDM1QTJGRkZGMzMKLToxMDMyODAwMDhDQUMwMDJDMDA2MjU4MjRBRkFCMDAwMEExMDAwMDA0RkQKLToxMDMyOTAwMDAwQzA1ODIxQTdBMDAwMDI4RDA2MDAwNDAwQTA0ODIxMEMKLToxMDMyQTAwMDAxNjdDODIxOEZBNTAwMDAwMDgwNTAyMTNDMThGRjdGRDYKLToxMDMyQjAwMDAzMkMyMDI2M0MwRTAwRkYyQzhDMDAwMTM3MEZGRkZGNTMKLToxMDMyQzAwMDM1Q0RGRkZGM0MwMkZGMDAwMEFGQzgyNDAwRURDMDI0NTUKLToxMDMyRDAwMDAwQzI3ODI0MDAwQzFEQzAwMzIzNjgyNTAxRjg3MDI1NjYKLToxMDMyRTAwMEFEMEQwMDAwQUQwRTAwMDQ4RDI0MDAyNEFGQUQwMDAwMzQKLToxMDMyRjAwMEFEMDQwMDA4OEQyQzAwMjAyNDA0RkZGRkFEMEMwMDBDNTEKLToxMDMzMDAwMDk1NDcwMDMyMzBFNkZGRkZBRDA2MDAxMDkxNDUwMDQ4QkEKLToxMDMzMTAwMDMwQTIwMEZGMDAwMjE5QzI1MDYwMDAwMThEMjQwMDM0NjkKLToxMDMzMjAwMEFEMDQwMDE0OEQ0NzAwMzg4RkFBMDAxODI3QkQwMDA4OEYKLToxMDMzMzAwMEFEMEIwMDI4QUQwQTAwMjRBRDA3MDAxQ0FEMDAwMDJDMjkKLToxMDMzNDAwMEFEMDAwMDE4MDNFMDAwMDhBRDAwMDAyMDI3QkRGRkUwM0QKLToxMDMzNTAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDODcKLToxMDMzNjAwMDkwOTgwMDMwMDBDMDg4MjEzQzBEMDBGRjMzMEYwMDdGOTMKLToxMDMzNzAwMEEwQ0YwMDAwOTA4RTAwMzEzNUFDRkZGRjNDMEFGRjAwNkIKLToxMDMzODAwMEEwQ0UwMDAxOTRBNjAwMUVBMjIwMDAwNDhDQUIwMDE0NjUKLToxMDMzOTAwMDhFMjkwMDA0MDBBMDgwMjEwMTZDMjgyNDAxMkE0MDI0RTkKLToxMDMzQTAwMDAwODA5MDIxMDEwNTIwMjVBNjI2MDAwMkFFMjQwMDA0RkQKLToxMDMzQjAwMDI2MDUwMDIwMjYyNDAwMDgwRTAwMDA3MjI0MDYwMDAyQzQKLToxMDMzQzAwMDkyNDcwMDMwMjYwNTAwMjgyNjI0MDAxNDAwMDcxRTAwMUUKLToxMDMzRDAwMDAwMDMxNjAzMjQwNjAwMDQwNDQwMDAwMzI0MDNGRkZGMzcKLToxMDMzRTAwMDk2NTkwMDMyMzMyM0ZGRkYwRTAwMDA3MkFFMjMwMDEwMDcKLToxMDMzRjAwMDI2MjQwMDI0OEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0NDgKLToxMDM0MDAwMDhGQjAwMDEwMjQwNTAwMDMwMDAwMzAyMTBBMDAwMDdDNkEKLToxMDM0MTAwMDI3QkQwMDIwMjdCREZGRDhBRkIxMDAxQ0FGQjAwMDE4RkEKLToxMDM0MjAwMEFGQkYwMDIwOTBBOTAwMzAyNDAyMDAwMTAwRTA1MDIxMkQKLToxMDM0MzAwMDMxMjMwMDNGMDBBMDQwMjE4RkIwMDA0MDAwODA4ODIxNTAKLToxMDM0NDAwMDAwQzA0ODIxMTA2MjAwMTQ4RkE3MDAzODI0MEIwMDA1MkIKLToxMDM0NTAwMDAwQTAyMDIxMDBDMDI4MjExMDZCMDAxMzAyMDAzMDIxQTEKLToxMDM0NjAwMDBFMDAwMTA4MDAwMDAwMDA5MjI1MDA3QzMwQTQwMDAyM0MKLToxMDM0NzAwMDEwODAwMDAzMjYwMzAwMzBBRTAwMDAzMDI2MDMwMDM0MjUKLToxMDM0ODAwMDhGQkYwMDIwOEZCMTAwMUM4RkIwMDAxODAwNjAxMDIxOEEKLToxMDM0OTAwMDAzRTAwMDA4MjdCRDAwMjgwRTAwMDA4N0FGQjAwMDEwMzEKLToxMDM0QTAwMDBBMDAwMTRGMDAwMDAwMDA4RkEzMDAzQzAxMDAyMDIxMTIKLToxMDM0QjAwMDAxMjAyODIxMDE0MDMwMjFBRkEzMDAxMDBFMDAwMENFRDIKLToxMDM0QzAwMEFGQjAwMDE0MEEwMDAxNEYwMDAwMDAwMDhGODIwMDUwQ0UKLToxMDM0RDAwMDI0NDMwMDAxMzA0MjAwRkZBRjgzMDA1MDAzRTAwMDA4QTYKLToxMDM0RTAwMDAwMDAwMDAwM0MwNTgwMDA4Q0EzMEUxMDhGODQwMDQ0NzcKLToxMDM0RjAwMEFDODMwMDIwOENBMjBFMTgwM0UwMDAwOEFDODIwMDI0RUMKLToxMDM1MDAwMDNDMDU4MDAwOENBMzBFMTQ4Rjg0MDA0NEFDODMwMDIwMDMKLToxMDM1MTAwMDhDQTIwRTFDMDNFMDAwMDhBQzgyMDAyNDkzODIwMDM4QzkKLToxMDM1MjAwMDEwNDAwMDFCMjQ4MzAwMEYyNDA0RkZGMDAwNjQzODI0QTMKLToxMDM1MzAwMDEwRTAwMDE5OTc4QjAwMkM5Nzg0MDA0QzkzODkwMDJFODMKLToxMDM1NDAwMDNDMEE2MDFDMEEwMDAxOTAwMTY0NDAyMzAxMDM3MDIxQzEKLToxMDM1NTAwMDAwNjQyODIzMTEyNjAwMDIzMUMyRkZGRjMwQTJGRkZGQzIKLToxMDM1NjAwMDAwNDczMDJCNTBDMDAwMEUwMEU0NDgyMThENEQwMDBDNjgKLToxMDM1NzAwMDMxQTNGRkZGMDAwMzY0MDAwMDBDMkMwMzA0QTFGRkYzNDAKLToxMDM1ODAwMDAwMDAzMDIxMzA2MzdGRkYwQTAwMDE4ODI0MDYwMDAxMUIKLToxMDM1OTAwMDAzRTAwMDA4MDAwMDAwMDA5Nzg0MDA0QzAwRTQ0ODIxOEMKLToxMDM1QTAwMDMxMjNGRkZGMzE2OEZGRkYwMDY4MzgyQjU0RTBGRkY4M0MKLToxMDM1QjAwMEE3ODMwMDRDOTM4QTAwMkUxMTQwMDAwNTI0MEYwMDAxQzAKLToxMDM1QzAwMDAwNkJDMDIzQTM4MDAwMkUwM0UwMDAwOEE3OTgwMDRDRTYKLToxMDM1RDAwMDAwNkJDMDIzQTM4RjAwMkUwM0UwMDAwOEE3OTgwMDRDQzcKLToxMDM1RTAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFOEFGQjAwMDEwQjYKLToxMDM1RjAwMDMwODRGRkZGM0MxMDgwMDA5M0E4MDAyQkFGQkYwMDE0NjUKLToxMDM2MDAwMEE2MDQwMTQ0OTYwQTBFMTYzMEM2MDBGRjhGQTkwMDMwQUEKLToxMDM2MTAwMEE2MEEwMTQ2QUUwNTAxNDhBMjA2MDE1MkE2MDgwMTVBQjMKLToxMDM2MjAwMEFFMDcwMTYwOEZBMzAwMkNBNjA5MDE1ODAxMjAyMDIxQkMKLToxMDM2MzAwMDBFMDAwMTdDQUUwMzAxNTQzQzAyMTAwMEFFMDIwMTc4ODIKLToxMDM2NDAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4RTIKLToxMDM2NTAwMDNDMDM4MDAwMzQ2MjAwNzA4QzQ5MDAwMDhGODcwMDNDN0UKLToxMDM2NjAwMDI0ODQwMDA3MjdCREZGRjgzMDg0RkZGOEFGODkwMDI0QzkKLToxMDM2NzAwMDNDMDg4MDAwOTUwRTAwOEEzMUNERkZGRkFGQUQwMDAwMDEKLToxMDM2ODAwMDhGQUMwMDAwMDE4NzU4MjMyNTZBRkZGRjMxNDYxRkZGREEKLToxMDM2OTAwMDAwQzQyODJCMTRBMEZGRjczNTBEMDA3MDhEQUMwMDAwN0UKLToxMDM2QTAwMDNDMDUwODAwOENBNTAwODQzQzBBMDgwMDhENEEwMDgwNzcKLToxMDM2QjAwMDAxODk1ODIzMDAwMDEwMjEwMEFCQzAyMTAwMDdDODgyRjcKLToxMDM2QzAwMDAxNDIyMDIxMDMwQjMwMkIwMDE5Mzg4MDM1MDk0MDAwQkUKLToxMDM2RDAwMDAwODY3ODIxMDBFOTEwMjEyN0JEMDAwODNDMDEwODAwODAKLToxMDM2RTAwMEFDMzgwMDg0M0MwMTA4MDBBQzJGMDA4MDAzRTAwMDA4RTcKLToxMDM2RjAwMDAwMDAwMDAwOEY4MjAwM0MyNDg2MDAwNzMwQzVGRkY4RTAKLToxMDM3MDAwMDAwQTIxODIxMzA2NDFGRkYwM0UwMDAwOEFGODQwMDNDRDIKLToxMDM3MTAwMDNDMDMyMEZGMjdCREZGRTgzQzA3NjAwMDNDMDg4MDAwMTkKLToxMDM3MjAwMDI0MDUwMDEwMzQ2NEZGRkRBQ0U1MzAwOEFGQkYwMDEwODUKLToxMDM3MzAwMEFEMDQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMDM3NDAwMDAwMDAwMDAwMDAwMDAwMDAzQzAyMDBGRjM0NUZGRkZEQUQKLToxMDM3NTAwMEFEMUYwRTAwM0MwQjYwMDQ4RDc4NTAwMDI0MTlGRjdGRDQKLToxMDM3NjAwMDNDMEUwMDAyMDMxOTc4MjQzNUVDMzgwQzM1Q0QwMTA5RTQKLToxMDM3NzAwMEFDRUQ0QzE4MjQwNjAwMDlBRDZDNTAwMDhDRUEwNDM4RkUKLToxMDM3ODAwMEFEMDYwMDA4QUQwMDAwMTQ4Q0U5NEMxQzMxNDVGRkZGNkMKLToxMDM3OTAwMDNDMDY1NzA5MDAwOTFFMDIzOEE0MkY3MTMwNjIwMDBGNDEKLToxMDM3QTAwMDM0QzgwMDEwQUY4MjAwNDgxMDQwMDAwNzI0ODVDMEIzMjEKLToxMDM3QjAwMDhDRUI0QzFDM0MwRDAwMUYzNUFDRkMwMDAxNkM1MDI0MDQKLToxMDM3QzAwMDAwMEE0OUMyQUY4OTAwMzQ4Q0Y5MDgwODI0MUZGMDAwQjAKLToxMDM3RDAwMDAzM0ZDMDI0MDMwODcwMjYwMzA2NzgyNjJERTgwMDAxNjUKLToxMDM3RTAwMDJEQzYwMDAxMDEwNjM4MjU1MEUwMDAwOUEzODAwMDM4RUQKLToxMDM3RjAwMDNDMDk2MDFDOEQyNDAwMDgyNDAzMDAwMUEzODMwMDM4QzkKLToxMDM4MDAwMDMwODI3QzAwQTc4MDAwNENBMzgwMDAyRUE3ODIwMDJDNzEKLToxMDM4MTAwMEFGODAwMDUwMTRBMDAwMDNBRjgwMDAzQzNDMDU2MDAwNjYKLToxMDM4MjAwMEFDQTA0NDJDMEUwMDA1NTkwMDAwMDAwMDhGQkYwMDEwMTIKLToxMDM4MzAwMDBBMDAwRTk5MjdCRDAwMTgyN0JERkZDOEFGQjMwMDJDQTIKLToxMDM4NDAwMEFGQjIwMDI4QUZCRjAwMzBBRkIxMDAyNEFGQjAwMDIwNEUKLToxMDM4NTAwMDkzNjIwMDA4MDA4MDk4MjEwMEEwOTAyMTE0NDAwMDM1NTgKLToxMDM4NjAwMDI0MDQwMDEwMEUwMDAxQzkwMDAwMDAwMDBFMDAwMTY4RDEKLToxMDM4NzAwMDAwNDA4MDIxMDAwMkM0MDAzQzE5MzIwMDAzMTk4ODI1NTEKLToxMDM4ODAwMEFFMTEwMDAwOTM2RjAwMDk5NzZFMDAxMjkzNkEwMDBBNTAKLToxMDM4OTAwMDMxRUMwMEZGMzFDREZGRkYwMThENTgyMTAwMEI0NDAwQkEKLToxMDM4QTAwMDMxNDkwMEZGMDEwOTM4MjVBRTA3MDAwNDhGODUwMDUwMUIKLToxMDM4QjAwMDk3ODQwMDQwMDA0MDMwMjEzMDgzMjAwMDE0NjAwMDREODgKLToxMDM4QzAwMEFFMDUwMDA4QUUwMDAwMEMzQzA1ODAwMDk3ODQwMDQwNjcKLToxMDM4RDAwMDA2NjIwMDRGOEUwMzAwMEMzMDkwMDAwODE2MDAwMDAyQjQKLToxMDM4RTAwMDI2NDgwMDA2MjY0ODAwMDI5NEE0MEUxNDhDQTUwRTFDM0YKLToxMDM4RjAwMDhGNjcwMDA0OTM2QTAwMDIzMDg0RkZGRjMxNDkwMEZGQTQKLToxMDM5MDAwMEFGQTkwMDEwOEY3MjAwMTRBRkE4MDAxODBFMDAwMUFGMEQKLToxMDM5MTAwMEFGQjIwMDE0OEZCRjAwMzA4RkIzMDAyQzhGQjIwMDI4REQKLToxMDM5MjAwMDhGQjEwMDI0OEZCMDAwMjAyNDA0MDAxMDBBMDAwMUYyOUYKLToxMDM5MzAwMDI3QkQwMDM4OTM2NTAwMDk5NzcxMDAxMjkzNkMwMDBCNDYKLToxMDM5NDAwMDMwQUQwMEZGMDFCMTMwMjEzMThCMDBGRjAwQ0I4MDIxNzEKLToxMDM5NTAwMDI2MDIwMDBBMzA1MEZGRkYwRTAwMDFDOTAyMDAyMDIxOUMKLToxMDM5NjAwMDBFMDAwMTY4MDA0MDg4MjE5MzY4MDAwOTk3NjQwMDEyRTYKLToxMDM5NzAwMDAwMDJGQzAwMzEwOTAwRkYzMDhBRkZGRjAxMkEzODIxRDQKLToxMDM5ODAwMDI0RTMwMDAyMDNFM0MwMjUzQzE5NDEwMDAzMTk3ODI1MTQKLToxMDM5OTAwMEFFMkYwMDAwOEY2RTAwMEMzQzBEODAwMDk1QUMwRTE0MTUKLToxMDM5QTAwMDAxRDMyODI1QUUyNTAwMDQ4REE1MEUxQzhGNjcwMDA0QzkKLToxMDM5QjAwMDkzNkIwMDAyMzE4NEZGRkYzMTY2MDBGRkFGQTYwMDEwNTkKLToxMDM5QzAwMDhGNjgwMDE0MDA0MDMwMjFBRkIyMDAxODBFMDAwMUFGMjQKLToxMDM5RDAwMEFGQTgwMDE0MDIwMDIwMjE4RkJGMDAzMDhGQjMwMDJDNEQKLToxMDM5RTAwMDhGQjIwMDI4OEZCMTAwMjQ4RkIwMDAyMDBBMDAwMUYyQUUKLToxMDM5RjAwMDI3QkQwMDM4OTc2MjAwMTIzQzA1ODAwMDk3ODQwMDQwODQKLToxMDNBMDAwMDMwNUZGRkZGMDY2MUZGQjRBRTFGMDAwQzhFMDMwMDBDOTkKLToxMDNBMTAwMDNDMDc4MDAwMDA2Nzk4MjUwQTAwMDI2QkFFMTMwMDBDN0IKLToxMDNBMjAwMDI3QkRGRkQ4QUZCNDAwMjBBRkJGMDAyNEFGQjMwMDFDNDgKLToxMDNBMzAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDkzNjIwMDA4MkQKLToxMDNBNDAwMDE0NDAwMDk0MDA4MEEwMjFBRjYwMDAwQzk3ODUwMDQwRDYKLToxMDNBNTAwMDMwQTQ0MDAwMTA4MDAwOUUyNDAzMDAxNjI0MTA0MDA3NkMKLToxMDNBNjAwMEEzNjMwMDBBQUY3MDAwMTQ5MzhGMDA0MjhGNkMwMDE0QTAKLToxMDNBNzAwMDMxRUUwMDAxMDAwRTZBNDAwMThENTgyNUFGNkIwMDE0MzUKLToxMDNBODAwMDk3OEEwMDQwOEY2ODAwMTQzMTQ5MDAxMDAxMDkzODI1RDkKLToxMDNBOTAwMEFGNjcwMDE0OTc4NjAwNDAzMEMzMDAwODEwNjAwMDlGOTUKLToxMDNBQTAwMDAwMDAwMDAwOEY2NjAwMTQzQzAzMTAwMDNDMDQ4MDAwRkUKLToxMDNBQjAwMDAwQzMyODI1QUY2NTAwMTQ5NDgyMEUwQTNDMUY4MTAwQzQKLToxMDNBQzAwMDI0MTMwMDBFMzA1OUZGRkYwMzNGQzAyNUFGNzgwMDA0RDgKLToxMDNBRDAwMEEzNzMwMDAyOTM3MjAwMEEzNDA2RkZGQzI2NTEwMDA0MEYKLToxMDNBRTAwMEEzNzEwMDBBOTc4ODAwNDAzMTA3MjAwMDEwRTAwMDkxODAKLToxMDNBRjAwMDAwMDAwMDAwM0MwQjgwMDA5Nzg5MDA0MDk1NjgwRTBDODgKLToxMDNCMDAwMDk3ODQwMDQwMDAwOTE4NDIzMTA3QzAwMDMwNjUwMDAzNjcKLToxMDNCMTAwMDAwMDcxMzAzMzA5RjEwMDAwMEEyQzAyNTAwMUZDQTAzMzYKLToxMDNCMjAwMDAzMTk5ODI1MDAxMzkwQzBBNzcyMDAxMjk3OTEwMDQwQzYKLToxMDNCMzAwMDkzNkYwMDBBMDAxMTgxODIzMjBFMDAzQzAxQ0Y2ODIxOTAKLToxMDNCNDAwMDI1QUMwMDNDQTM2QzAwMDk5NTZBMEUwQzMxNDkzRkZGN0YKLToxMDNCNTAwMEE3NjkwMDEwOTc2RDAwMTI5MzZDMDAwOTAxOEQ1ODIxMjAKLToxMDNCNjAwMDI1NkEwMDAyMzE0OTAwMDcwMDA5NDAyMzMxMDMwMDA3OUMKLToxMDNCNzAwMEEzNjMwMDBCOTM2NzAwMDk5NzY0MDAxMjk3NjUwMDEwMTgKLToxMDNCODAwMDMwRTIwMEZGOEY5MDAwMjg5Nzk4MDA0MDAwNDRGODIxMTEKLToxMDNCOTAwMDAzRTVDODIxMDMyNjk4MjEzMzEyMDA0MDEyNDAwMDA1OTYKLToxMDNCQTAwMDMyNjZGRkZGMDBEMDcwMkIzQzExODAwMDExQzAwMDE2NjAKLToxMDNCQjAwMDAwMDA5MDIxMDIwNjc4MkIxNUUwMDAyRDAwMDAyMDIxNDYKLToxMDNCQzAwMDNDMTA4MDAwOEUxMjBFMTQzQzA1ODAwMEFFMTIwRTEwQzgKLToxMDNCRDAwMDhFMTEwRTFDQUUxMTBFMThBRTA2MEUwMDhDQjgwMDAwMzEKLToxMDNCRTAwMDMzMTMwMDA4MTI2MEZGRkQwMDAwMDAwMDk0QjkwRTA4QjYKLToxMDNCRjAwMDAwQzA4MDIxMDAwMDg4MjFBNzk5MDA0MDhDQTYwRTA0RjcKLToxMDNDMDAwMDI0MTIwMDAxQUY4NjAwMjg5NzdGMDAxMDMzRjNGRkZGRDYKLToxMDNDMTAwMDhFODkwMDAwMDEzMDIwMjMxMDgwMDA1OEFFODQwMDAwRkYKLToxMDNDMjAwMDAyMjAyMDIxMEUwMDAyNDMwMjAwMjgyMThFOEMwMDAwNzkKLToxMDNDMzAwMDE1ODAwMDA1MDAwMDAwMDA4RjZEMDAxNDI0MEVGRkJGRUEKLToxMDNDNDAwMDAxQUVBMDI0QUY3NDAwMTQ4Rjc4MDAwQzAzMTM4ODIxRjgKLToxMDNDNTAwMEFGNzEwMDBDOTM2RjAwMDgxNUUwMDAwMzAwMDAwMDAwMzYKLToxMDNDNjAwMDE2NDAwMDQwMDAwMDAwMDBBMzcyMDAwODAyMDAyMDIxNUUKLToxMDNDNzAwMDhGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4QjgKLToxMDNDODAwMDhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4RjUKLToxMDNDOTAwMDI3QkQwMDI4OEY5MDAwMjg5NzgyMDA0MDNDMTE4MDAwQUIKLToxMDNDQTAwMDAyMDA5ODIxMzA0NTAwNDAxNEEwRkZEOTAwMDA5MDIxNjcKLToxMDNDQjAwMDk3NjgwMDEwOEY4NzAwMjgzMTAzRkZGRjE0NjdGRkVDMUYKLToxMDNDQzAwMDAwMDAyMDIxMDAwMDg4MjEwQTAwMDMzOTI0MTIwMDAxOEQKLToxMDNDRDAwMDI0MDMwMDBFMjQxMDQwMDdBMzYzMDAwQUFGNzAwMDE0RjEKLToxMDNDRTAwMDkzOEYwMDQyOEY2QzAwMTQzMUVFMDAwMTAwMEU2QTQwODkKLToxMDNDRjAwMDAxOEQ1ODI1QUY2QjAwMTQ5NzhBMDA0MDhGNjgwMDE0MUYKLToxMDNEMDAwMDMxNDkwMDEwMDEwOTM4MjVBRjY3MDAxNDk3ODYwMDQwM0IKLToxMDNEMTAwMDMwQzMwMDA4MTQ2MEZGNjMwMDAwMDAwMEFGNjAwMDA0QkYKLToxMDNEMjAwMEEzNjAwMDAyOTc4ODAwNDAzMTA3MjAwMDE0RTBGRjcxNzMKLToxMDNEMzAwMDAwMDAzMDIxQTc2MDAwMTI5NzkxMDA0MDkzNkYwMDBBQTUKLToxMDNENDAwMDNDMEI4MDAwMzIzMDFGMDAwMDEwNzE4MzAxQ0Y2ODIxQ0UKLToxMDNENTAwMDI1QUMwMDI4QTM2QzAwMDk5NTZBMEUwQzBBMDAwMzBBMjIKLToxMDNENjAwMEE3NkEwMDEwOEY2NjAwMTQzQzFGRUZGRjM3RjlGRkZFQjMKLToxMDNENzAwMDAwRDk5ODI0MEEwMDAzNEZBRjczMDAxNDhGNkIwMDE0MEUKLToxMDNEODAwMDM1NkEwMDQwMEUwMDAxNkVBRjZBMDAxNDBBMDAwMzNFNUYKLToxMDNEOTAwMDAyMjAyMDIxOEY4NTAwNDQ4RjhBMDAzMDI3QkRGRkMwN0MKLToxMDNEQTAwMDNDMDQ4MDAwQUZCNzAwMzRBRkI0MDAyOEFGQjEwMDFDQjIKLToxMDNEQjAwMEFGQkYwMDM4QUZCNjAwMzBBRkI1MDAyQ0FGQjMwMDI0QjIKLToxMDNEQzAwMEFGQjIwMDIwQUZCMDAwMTg4Qzg3MDEwNDhDQTkwMDI0OEEKLToxMDNERDAwMEFDOEEwMDgwOENBODAwMjAwMEU5ODgyMzAwMDBCODIxNkMKLToxMDNERTAwMEFDODgwRTEwOENBNjAwMjQwMDAwQTAyMUFDODYwRTE4MTIKLToxMDNERjAwMDhDODIwRTEwQUM4MjBFMTQ4QzgzMEUxOEFDODMwRTFDQjkKLToxMDNFMDAwMDEyMjAwMDMzM0MxNjgwMDA5MzZCMDAwODExNjAwMDU0QjAKLToxMDNFMTAwMDAwMDAwMDAwOTc2RTAwMTAzMUNERkZGRjAyMkQ2MDJCRDcKLToxMDNFMjAwMDE1ODAwMDRGMDAwMDAwMDA5NzcwMDAxMDMyMEZGRkZGNTgKLToxMDNFMzAwMEFFQ0YwRTAwM0MwNTgwMDA4Q0IzMDAwMDMyNzIwMDA4NEIKLToxMDNFNDAwMDEyNDBGRkZEMDAwMDAwMDA5NEI1MEUwODhDQTUwRTA0ODIKLToxMDNFNTAwMDMyQjBGRkZGMzIxNDAwMDExMjgwMDA0NDAwMDAwMDAwNjUKLToxMDNFNjAwMDAwMDAwMDBEMzIxOUEwNDAyNDE4MDA0MDEzMzgwMDQ1MEUKLToxMDNFNzAwMDMyMTRBMDAwMTI4MDAwM0YwMDAwMDAwMDkzNzMwMDA4N0QKLToxMDNFODAwMDEyNjAwMDA5MjdBNDAwMTA5NzYyMDAxMDMwNUZGRkZGNDYKLToxMDNFOTAwMDAwQkZDODJCNTMyMDAwMDVBRkIxMDAxMDMyMDgwMDQwMEUKLToxMDNFQTAwMDExMDAwMDM0MDAwMDAwMDBBRkIxMDAxMEE3OTAwMDQwRTYKLToxMDNFQjAwMEFGODUwMDI4MEUwMDAyQkQwMDAwMDAwMDAwNDBBMDIxRDgKLToxMDNFQzAwMDEwNDAwMEJFOEZCMTAwMTAxNjIwRkZDRjAwMDAwMDAwOTAKLToxMDNFRDAwMDJFOTYwMDAxMDJENzg4MjUxMjIwMDAxNzhGQkYwMDM4QzgKLToxMDNFRTAwMDhGODUwMDMwMjQxNzBGMDAxMEI3MDA3MTNDMDQ4MDAwNEMKLToxMDNFRjAwMDhDOEYwMTc4MDVFMEZGRkUyNDE4MEYwMDUwQjgwMDhGNkEKLToxMDNGMDAwMDNDMDQ4MDAwOEM5OTBFMTQyNDE0MDI0MDNDMDUxMDAwREYKLToxMDNGMTAwMEFDOTkwMTQ0OEM5MzBFMUNBQzkzMDE0OEEwODAwMTUyRDMKLToxMDNGMjAwMEE0ODAwMTVBQUM4MDAxNjBBNDgwMDE1OEFDOTQwMTU0NzMKLToxMDNGMzAwMEFDODUwMTc4OEZCRjAwMzg4RkI3MDAzNDhGQjYwMDMwNjIKLToxMDNGNDAwMDhGQjUwMDJDOEZCNDAwMjg4RkIzMDAyNDhGQjIwMDIwQ0YKLToxMDNGNTAwMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwODI3QkQwMDQwOUYKLToxMDNGNjAwMEFFRDEwRTAwMEEwMDAzQzMzQzA1ODAwMDE0QTBGRkJFQzIKLToxMDNGNzAwMDMyMTlBMDQwMEUwMDAxNzUwMDAwQTAyMTBBMDAwM0VBREEKLToxMDNGODAwMDJFOTYwMDAxM0MwMzgwMDA4QzdGMDE3ODA3RTBGRkZFNDUKLToxMDNGOTAwMDI0MDIwODAwOEY4NDAwM0NBQzYyMDE3ODNDMDM4MDAwNUUKLToxMDNGQTAwMDk0NkIwMDhBMzE2QUZGRkYwMTQ0MzgyMzI0RTlGRkZGNDQKLToxMDNGQjAwMDMxMjgxRkZGMkQwNjAwMDgxNEMwRkZGOTM0NkM0MDAwQTMKLToxMDNGQzAwMDAwQTBBMDIxMEUwMDAxNjgwMDhDOTAyMThGODMwMDMwOUEKLToxMDNGRDAwMDI0MDQwRjAwMDA0MEE4MjEwMjM0ODgyMzNDMDY4MDAwRkUKLToxMDNGRTAwMDEwNjQwMDA1MjQwNTAwMDE5MzhFMDA0MjMxQzUwMDAxRDQKLToxMDNGRjAwMDAwMDU2QTQwMzVBNTAwMDEwMDE1RkMwMDNDMDIwMTAwRTcKLToxMDQwMDAwMDAzRTJDODI1QUU1OTAwMDA4RjkzMDA1MDMyMTgwMDM2RTUKLToxMDQwMTAwMDMyMEYwMDA4QUU1MzAwMDQxMUUwMDA0MTAwQjg5ODI1QUIKLToxMDQwMjAwMDk0QzMwRTBBOEY4NDAwM0MzQzBCODEwMDMwNkFGRkZGNzIKLToxMDQwMzAwMDI0OTIwMDA4MzI0ODFGRkYwMTRCNDgyNTNDMDcxMDAwMUUKLToxMDQwNDAwMDI2OTIwMDA2MjQxMDAwMEVBQ0M5MDE2MDAyNjc5ODI1NzQKLToxMDQwNTAwMEE0RDAwMTVBQUY4ODAwM0NBNEQyMDE1ODE2MjAwMDA4MTEKLToxMDQwNjAwMDNDMTA4MDAwOEY4RTAwMzAyNDA1MEYwMDUxQzUwMDAyRTcKLToxMDQwNzAwMDI0MTcwMDAxMzY3MzAwNDAwRTAwMDE2RTNDMTA4MDAwRDIKLToxMDQwODAwMDhFMTgwRTE0MDI0MDIwMjFBRTE4MDE0NDhFMEYwRTFDMTMKLToxMDQwOTAwMEFFMEYwMTQ4QTIxNTAxNTJBRTEzMDE1NDBFMDAwMTdDNkYKLToxMDQwQTAwMDNDMTUxMDAwQUUxNTAxNzgwQTAwMDNFNzAwMDAwMDAwN0YKLToxMDQwQjAwMDEyODAwMDA1M0MwNzgwMDA5NEYyMEUwODMyNDkwMDQwNEYKLToxMDQwQzAwMDExMjAwMDQyMDAwMDAwMDA4QzhBMDE3ODA1NDBGRkZFQUMKLToxMDQwRDAwMDAwMDAwMDAwOTQ5NTBFMTAzQzEwMDUwMDI0MDMyMDAwMDEKLToxMDQwRTAwMDMyQUVGRkZGMDFEMDY4MjVBQzhEMDE0QzhDOEMwRTE0RDQKLToxMDQwRjAwMDNDMEIxMDAwQUM4QzAxNDQ4Qzg2MEUxQ0FDODYwMTQ4MzUKLToxMDQxMDAwMEEwODAwMTUyQTQ4MDAxNUFBQzgwMDE2MEE0ODAwMTU4QjMKLToxMDQxMTAwMEFDODMwMTU0QUM4QjAxNzgwQTAwMDNGMTNDMDQ4MDAwQUQKLToxMDQxMjAwMDhGOEQwMDNDMjY5MjAwMDJBNEQyMDE1ODI1QUMwMDA4RDUKLToxMDQxMzAwMDMxODYxRkZGMEEwMDA0NENBRjg2MDAzQ0FDODAwMTRDNjYKLToxMDQxNDAwMDEyODAwMDE5MDAwMDAwMDA4QzlGMEUxMEFDOUYwMTQ0RUIKLToxMDQxNTAwMDhDODMwRTE4M0MwODgwMDAyNDExMDA0MEFDODMwMTQ4NzkKLToxMDQxNjAwMDhGQkYwMDM4QTEwMDAxNTI4RkI3MDAzNEE1MDAwMTVBNUIKLToxMDQxNzAwMDhGQjYwMDMwQUQwMDAxNjA4RkI1MDAyQ0E1MDAwMTU4NEUKLToxMDQxODAwMDhGQjQwMDI4QUQxMTAxNTQ4RkIzMDAyNDhGQjIwMDIwRUEKLToxMDQxOTAwMDhGQjEwMDFDOEZCMDAwMTgzQzA0MTAwMDI3QkQwMDQwRjgKLToxMDQxQTAwMDAzRTAwMDA4QUQwNDAxNzg4QzgyMEUxNEFDODIwMTQ0NTcKLToxMDQxQjAwMDhDODMwRTFDMEEwMDA0OEIzQzA4ODAwMDBFMDAwMTc1RTUKLToxMDQxQzAwMDJFOTYwMDAxMEEwMDAzRUIwMkQ3ODgyNTAwMDAwMDAwQUMKLToxMDQxRDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDMzQTBBMDAwNDY3RkMKLToxMDQxRTAwMDNDMDQ4MDAwMjdCREZGRDhBRkIxMDAxNDNDMTE4MDAwMTMKLToxMDQxRjAwMEFGQjAwMDEwQUZCNDAwMjBBRkIzMDAxQ0FGQjIwMDE4RDYKLToxMDQyMDAwMEFGQkYwMDI0M0MxMzA4MDAyNjczM0MzNDBFMDAwMUY5QjQKLToxMDQyMTAwMDM2MzAwMDcwM0MxNDA4MDAyNjk0M0NCNDAyMDA5MDIxMTMKLToxMDQyMjAwMDhFMDgwMDAwOEUyNDAwMDAzODgzMDAwMTMwNjIwMDAxRjcKLToxMDQyMzAwMDEwNDAwMDE2M0MwQTgwMDAwMjQwNDgyMThEMjcwMDAwRjMKLToxMDQyNDAwMDNDMUYwODAwOEZGRjAwNkMzQzBGMDgwMDhERUYwMDY4REEKLToxMDQyNTAwMDAwRTgxMDIzMDNFMjYwMjEwMDAwQzAyMTAxODI3MDJCREUKLToxMDQyNjAwMDAxRjg2ODIxMDFBRTQwMjEzQzAxMDgwMEFDMkMwMDZDMzMKLToxMDQyNzAwMDNDMDEwODAwQUMyODAwNjg4RDRCMDAwMDM5NjYwMDAxNDUKLToxMDQyODAwMDMwQzUwMDAxMTRBMEZGRUQwMEUwNDAyMThFMUYwMDAwQUEKLToxMDQyOTAwMDNDMTgwODAwOEYxODAwNkMzQzBEMDgwMDhEQUQwMDY4QkMKLToxMDQyQTAwMDAzRThDODIzMDMxOTM4MjEwMDAwNzAyMTAwRjk2MDJCQUUKLToxMDQyQjAwMDAxQUU0MDIxMDEwQzU4MjEzQzAxMDgwMEFDMjcwMDZDRTQKLToxMDQyQzAwMDNDMDEwODAwQUMyQjAwNjg4RTI4MDEwMDI0MDZGRjgwMEEKLToxMDQyRDAwMDNDMDQ4MDBBMjUwNTAyNDAwMEE2NDgyNEFFMjgwMDIwQTAKLToxMDQyRTAwMEFFMjkwMDI0OEUwOTAwMDAzMEEzMDA3RjAwNjQ1MDIxMTUKLToxMDQyRjAwMDNDMDc4MDAwQUY4QTAwNDRBRjg4MDAzMEFGODkwMDI0QkIKLToxMDQzMDAwMDhDRTIwMTc4MDQ0MEZGRkUwMDAwMDAwMDhFMUYwMDAwRDgKLToxMDQzMTAwMDNDMTgwODAwOEYxODAwNzQzQzBEMDgwMDhEQUQwMDcwMkIKLToxMDQzMjAwMDAzRTlDODIzMDMxOTU4MjEwMDAwNzAyMTAxNzkzMDJCQkIKLToxMDQzMzAwMDAxQUU2MDIxMDE4NjQ4MjEyNDA1MDgwMDNDMDEwODAwRTcKLToxMDQzNDAwMEFDMkIwMDc0M0MwMTA4MDBBQzI5MDA3MEFDRTUwMTc4OEUKLToxMDQzNTAwMDkwRTQwMTA4QTM4NDAwNDI5MzgzMDA0MjMwNkEwMDAxODQKLToxMDQzNjAwMDExNDAwMDBGMjQwRTBEMDAyNTAyRjgwMDJDNDcwMzAxMTgKLToxMDQzNzAwMDEwRTAwMDFDMDAwODE5QzIyNDY0RkZGMDAwMDQ1MDQyNDEKLToxMDQzODAwMDAwMEE0MTQwMEUwMDAzOUEwMTEzRDgyMTNDMEE0MDAwNjQKLToxMDQzOTAwMDNDMDg4MDAwQUQwQTAxMzgwQTAwMDRCRDAwMDAwMDAwOUUKLToxMDQzQTAwMDExMEUwMDI2MjQwRjBGMDAxMTBGMDAyQTNDMDI4MDA4NzYKLToxMDQzQjAwMDM0NDcwMDgwOTBGRjAwMDAyNDE4MDA1MDMzRjkwMEZGQkMKLToxMDQzQzAwMDE3MzhGRkYzM0MwQTQwMDAwRTAwMDlBMzAwMDAwMDAwNkMKLToxMDQzRDAwMDNDMEE0MDAwM0MwODgwMDBBRDBBMDEzODBBMDAwNEJERDgKLToxMDQzRTAwMDAwMDAwMDAwOEY4NDAwMzQwMDY0MjgyQjE0QTAwMDBCMTAKLToxMDQzRjAwMDhGODYwMDQ4MDA4NjYwMjEyNThCRkZGRjAxNjM0ODJCRDQKLToxMDQ0MDAwMDE1MjAwMDA2MDA2NDY4MjMwMDBEMTk0MDBFMDAwMzlBNzEKLToxMDQ0MTAwMDAwNzREODIxMEEwMDA1MTkzQzBBNDAwMDAwMDAwMDAwODEKLToxMDQ0MjAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDNBRDBFMDAwMzlBMDAKLToxMDQ0MzAwMDAwMDAwMDAwMEEwMDA1MTkzQzBBNDAwMDNDMUIwODAwNkYKLToxMDQ0NDAwMDI3N0IzREI0MEUwMDAzOUEwMDAwMDAwMDBBMDAwNTE5MDYKLToxMDQ0NTAwMDNDMEE0MDAwM0MxQjA4MDAyNzdCM0RENDBFMDAwMzlBMTkKLToxMDQ0NjAwMDAwMDAwMDAwMEEwMDA1MTkzQzBBNDAwMDhGODIwMDUwM0QKLToxMDQ0NzAwMDI0NDMwMDAxMzA0MjAwRkZBRjgzMDA1MDAzRTAwMDA4RjYKLToxMDQ0ODAwMDAwMDAwMDAwMDAwNDExQzAwM0UwMDAwODI0NDIwMjQwQzQKLToxMDQ0OTAwMDNDMDQwODAwMjQ4NDNCQ0MyNDA1MDAxQTBBMDAwMDdDNUMKLToxMDQ0QTAwMDAwMDAzMDIxMjdCREZGRTBBRkJGMDAxQ0FGQjIwMDE4RjUKLToxMDQ0QjAwMEFGQjEwMDE0QUZCMDAwMTAzQzEwODAwMDkyMEIwMTA5QTYKLToxMDQ0QzAwMDI0MTJGRjgwMEUwMDA1NTYzMTY0MDA3RjhGOTEwMDMwNkEKLToxMDQ0RDAwMDAwNTE1MDIxMDE1MjQwMjRBRTA4MDAyNDkyMDMwMTA5RUEKLToxMDQ0RTAwMDBFMDAwNTU2MzA2NDAwN0YyNDA2MDA4MDI0MDcwMEMwQkIKLToxMDQ0RjAwMDI0MDQwMDQwQUUwMDA4MTBBRTA0MDgxNEFFMDYwODE4RUMKLToxMDQ1MDAwMEFFMDcwODFDOTIwQzAxMDkwMDUxRjgyMTMzRjgwMDdGMTYKLToxMDQ1MTAwMDNDMTk4MDBBMDMxOTEwMjEzMTg0MDA3RjBFMDAwNTU2RDIKLToxMDQ1MjAwMEFGODIwMDQ0OEUxMTAxMDAzQzBDMDA4MDM1ODUwMDAxRjMKLToxMDQ1MzAwMDAyMjI3ODIxMDFGMjQ4MjRBRTA5MDgwNDhFMEUwMTAwRkYKLToxMDQ1NDAwMDM1OTgwMDAyMzYwOTA5MDAwMUMyNjgyMTMxQUIwMDc4QjQKLToxMDQ1NTAwMDAxNjU1MDI1QUUwQTA4MjA4RTA1MDEwMDhFMDgwMTAwNzUKLToxMDQ1NjAwMDM2MDUwOTgwMDEwMjE4MjEyNDY0MDA0MDAwOTIzMDI0OUQKLToxMDQ1NzAwMEFFMDYwODA4OEUwNzAxMDAwMEUyRjgyMTI3RjkwMDQwODYKLToxMDQ1ODAwMDMzMzIwMDc4MDI1ODg4MjVBRTExMDgyNDhFMDQwMTAwQzkKLToxMDQ1OTAwMDk1MkYwMDBDOEZCRjAwMUM4RkIyMDAxODMxRUVGRkZGNkIKLToxMDQ1QTAwMDAwMEU2OUMwQUUwRDA4MDBBRTBDMDgyODk1MkIwMDBDNUIKLToxMDQ1QjAwMDhGQjEwMDE0MzE2QUZGRkYwMDBBNDFDMEFFMDgwMDJDMjEKLToxMDQ1QzAwMDhDQTMwMDUwOEZCMDAwMTA4Q0EyMDAzQzhEMjQwMDA0RkUKLToxMDQ1RDAwMDhDQTYwMDFDOENBNzAwMzgyN0JEMDAyMEFGODMwMDY4ODQKLToxMDQ1RTAwMEFGODIwMDU4QUY4NDAwNTRBRjg2MDA2MDAzRTAwMDA4M0IKLToxMDQ1RjAwMEFGODcwMDY0M0MwQTA4MDA5MTRBM0JGMTNDMDkwODAwN0YKLToxMDQ2MDAwMDk1MjkzQkVBM0MwNTExMDAwMDBBM0MwMDI1MjgwMDAyRTAKLToxMDQ2MTAwMDAwRTgzMDI1MDBDNTE4MjUyNDgyMDAwOEFDODMwMDAwN0UKLToxMDQ2MjAwMDAzRTAwMDA4QUM4MDAwMDQzQzA4ODAwMDM1MDcwOTAwNjYKLToxMDQ2MzAwMDkwRTYwMDExMjQwMjAwMjgwMDgwNTAyMTMwQzMwMEZGQzIKLToxMDQ2NDAwMDAwQTA2MDIxMTA2MjAwMDIzNDBCODZERDI0MEIwODAwRkMKLToxMDQ2NTAwMDNDMDc4MDAwMzRFMjBBOUE5NDU5MDAwMDM0RUYwQTlDMjcKLToxMDQ2NjAwMDM0RUQwQUEwMzMzOEZGRkZBRDU4MDAwMDhERUUwMDAwOTYKLToxMDQ2NzAwMDM0RTgwQTgwMjQwNDAwMDFBRDRFMDAwNDhEQTkwMDAwMzYKLToxMDQ2ODAwMEFENDkwMDA4OTEwNTAwMTkzMEEzMDAwMzEwNjQwMDQzRjAKLToxMDQ2OTAwMDI4NjYwMDAyMTRDMDAwQjAyNDA0MDAwMjEwNjQwMDhCREQKLToxMDQ2QTAwMDI0MDUwMDAzMTA2NTAwOTYzNEU2MEFBNDNDMDkwODAwQkUKLToxMDQ2QjAwMDk1MjkzQkUwMjQwMjA4MDA1MTYyMDA0RDNDMEU4MDAwMjkKLToxMDQ2QzAwMDNDMEU4MDAwMzVDNTA5MDA5MEE2MDAxMjkwQjkwMDE5NzMKLToxMDQ2RDAwMDM1Q0IwOTgwOEQ2ODAwMjgzMEM3MDBGRjAwMDc3ODgwM0YKLToxMDQ2RTAwMDMxMzhGRkZGMzMyMzAwRkYwMUY4MTAyMTAwMDMyNTAwQkMKLToxMDQ2RjAwMDAwODg3MDI1MDAwMjVDMDAzQzBENjAwMDAxQ0QzMDI1NzMKLToxMDQ3MDAwMDM1NjkwNkZGQUQ0OTAwMDRBRDQ2MDAwMDhDQTcwMDJDQkEKLToxMDQ3MTAwMDI1NDkwMDI4QUQ0NzAwMDg4Q0I5MDAzMEFENTkwMDBDODAKLToxMDQ3MjAwMDhDQjgwMDM0QUQ1ODAwMTA4Q0FGMDAzOEFENEYwMDE0NzkKLToxMDQ3MzAwMDhDQTMwMDFDQUQ0MzAwMTg4Q0E4MDAyMDNDMDM4MDAwMTMKLToxMDQ3NDAwMDM0NjIwOTNDQUQ0ODAwMUM4Q0E0MDAyNDM0NkYwOTAwN0QKLToxMDQ3NTAwMEFENDQwMDIwOENBRDAwMjhBRDREMDAyNDhDNTkwMDAwRTQKLToxMDQ3NjAwMEFEMkMwMDA0MjUyMjAwMTRBRDM5MDAwMDhDNzgwMTBDMUEKLToxMDQ3NzAwMEFEMzgwMDA4OTFFODAwMTIzQzA0MDgwMDkwODQzQkYwM0EKLToxMDQ3ODAwMEFEMjAwMDEwMDAwODJGMDAwMDA0NkMwMDAwQUQ2MDI1NzMKLToxMDQ3OTAwMDM1OEFGRkZGMDNFMDAwMDhBRDJBMDAwQzNDMDkwODAwNDEKLToxMDQ3QTAwMDk1MjkzQkUwM0MwRjA4MDA5NUVGM0JFQTM0RjkwQUE0NTkKLToxMDQ3QjAwMDNDMEUwODAwOTVDRTNCREM5NzI4MDAwMDMxMzhGRkZGMDcKLToxMDQ3QzAwMDAxRjg2ODIxMDFBRTM4MjMwMDA4MkMwMDI0RTNGRkYyMzEKLToxMDQ3RDAwMDAwQTMyMDI1MjQwMjA4MDBBRDQ0MDAwQ0FENDAwMDEwQzkKLToxMDQ3RTAwMEFENEIwMDE0MTU2MkZGQjYyNTRBMDAxODNDMEU4MDAwNDAKLToxMDQ3RjAwMDM1Q0QwOTAwOTFBMjAwMTE5MUE3MDAxOTNDMDUwODAwRDAKLToxMDQ4MDAwMDk0QTUzQkU2MzA0NjAwRkYzNUNCMEE4MDk1NkUwMDJBMjIKLToxMDQ4MTAwMDAwMDZDODgyMzBGODAwRkY5Nzg3MDA1QzAwMTkxRTAwNzAKLToxMDQ4MjAwMDAwMTg3QzAwMzEyOEZGRkYwMEE4MjAyMTAwNkY0ODI1RDgKLToxMDQ4MzAwMDAxMjQxMDI1MDFDNzMwMjEzQzBCNDAwMDAwNEJDODI1NDYKLToxMDQ4NDAwMDAwMDZDNDAwQUQ1OTAwMDBBRDU4MDAwNDkxQUYwMDE4MzcKLToxMDQ4NTAwMDNDMDMwMDA2MjRFOTAwMDEwMDBGNDYwMDAxMDM3MDI1MTcKLToxMDQ4NjAwMEFENEUwMDA4OERBNTAwMkMzQzAzODAwMDM0NjIwOTNDNEQKLToxMDQ4NzAwMEFENDUwMDBDOERBQjAwMUMzMTI0N0ZGRjI1NDkwMDE0OTEKLToxMDQ4ODAwMEFENEIwMDEwOEM1OTAwMDBBRDJDMDAwNDM0NkYwOTAwQjIKLToxMDQ4OTAwMEFEMzkwMDAwOEM3ODAxMENBNzg0MDA1QzI1MjIwMDE0M0YKLToxMDQ4QTAwMEFEMzgwMDA4OTFFODAwMTIzQzA0MDgwMDkwODQzQkYwMDkKLToxMDQ4QjAwMEFEMjAwMDEwMDAwODJGMDAwMDA0NkMwMDAwQUQ2MDI1NDIKLToxMDQ4QzAwMDM1OEFGRkZGMDNFMDAwMDhBRDJBMDAwQzM0RTIwQUE0OTkKLToxMDQ4RDAwMDk0NDYwMDAwOTUxOTAwMjgzQzA5MDgwMDk1MjkzQkUwMDIKLToxMDQ4RTAwMDAwMDZDNDAwMDAxOTdDMDAzNzBFODEwMDAxRUI2ODI1MkEKLToxMDQ4RjAwMEFENEUwMDBDQUQ0RDAwMTAwQTAwMDVFMjI1NEEwMDE0MzMKLToxMDQ5MDAwMDNDMDkwODAwOTUyOTNCRTAzQzE4MDgwMDk3MTgzQkVBNTEKLToxMDQ5MTAwMDNDMEYwODAwOTVFRjNCREM5NENFMDAwMDMxMzlGRkZGREYKLToxMDQ5MjAwMDk1MEQwMDI4MDMxOTQwMjEwMTBGMzgyMzAwMEUyNDAwQTMKLToxMDQ5MzAwMDAwMEQyQzAwMjRFM0ZGRUUwMEEzMzAyNTM0ODI4MTAwMUIKLToxMDQ5NDAwMEFENDIwMDBDQUQ0NjAwMTBBRDQwMDAxNEFENEIwMDE4NTgKLToxMDQ5NTAwMDBBMDAwNUUyMjU0QTAwMUMxNDYwRkY1NDM0RTkwQUE0NDkKLToxMDQ5NjAwMDk1MjgwMDAwM0MwOTA4MDA5NTI5M0JFMDAwMDgzQzAwMjAKLToxMDQ5NzAwMDAwRUIxODI1QUQ0MzAwMEMwQTAwMDVFMjI1NEEwMDEwQTMKLToxMDQ5ODAwMDAzRTAwMDA4MjQwMjA3RDAyN0JERkZFMEFGQjIwMDE4MDMKLToxMDQ5OTAwMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzBFMDAwMDVDNDAKLToxMDQ5QTAwMDAwODA4ODIxOEY4ODAwNTg4Rjg3MDA1NDNDMDU4MDA4M0MKLToxMDQ5QjAwMDM0QjIwMDgwMDExMTI4MjEzQzEwODAwMDI0MDIwMDgwQzQKLToxMDQ5QzAwMDI0MDMwMEMwMDBBNzIwMjNBRTAyMDgxODNDMDY4MDA4N0MKLToxMDQ5RDAwMEFFMDMwODFDMTg4MDAwMDRBRjg1MDA1OEFDQzUwMDA0NjUKLToxMDQ5RTAwMDhDQzkwMDA0QUY4OTAwNTQxMjIwMDAwOTM2MDQwOTgwRTQKLToxMDQ5RjAwMDBFMDAwNjk1MDAwMDAwMDA5MjRDMDAyNzhFMEIwMDc0RkMKLToxMDRBMDAwMDAxODI1MDA0MDE0QjMwMjFBRTQ2MDAwQzM2MDQwOTgwNkYKLToxMDRBMTAwMDhDOEUwMDFDOEY4RjAwNjAwMUNGNjgyMzE5QTAwMDA0Q0EKLToxMDRBMjAwMDhGQkYwMDFDOEM5MDAwMUNBRjkwMDA2MDhGQkYwMDFDREIKLToxMDRBMzAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDBBMDAwMDVFMTIKLToxMDRBNDAwMDI3QkQwMDIwOEY4NjAwNjg4RjgzMDA1ODhGODIwMDU0MTYKLToxMDRBNTAwMDNDMDU4MDA4MzRBNDAwODBBQzg2MDA1MEFDODMwMDNDNDgKLToxMDRBNjAwMDAzRTAwMDA4QUNBMjAwMDQzQzAzODAwMDM0NjcwMDcwM0YKLToxMDRBNzAwMDhDRTMwMDAwMzA4NzAwRkYzQzA0MDgwMDhDODQwMDU0NjUKLToxMDRBODAwMDI3QkRGRkY4MzBBQTAwRkYyNDgyMDAwMTNDMDEwODAwODYKLToxMDRBOTAwMEFDMjIwMDU0MzBDODAwRkZBRjgzMDAyNDNDMDk4MDAwRTIKLToxMDRBQTAwMDhEMjUwMTc4MDRBMEZGRkUzNTJCMDA3MDhENjUwMDAwNzgKLToxMDRBQjAwMEEzQTcwMDAzM0MxODA4MDA4RjE4MDA3NDhGQjkwMDAwRUEKLToxMDRBQzAwMDNDMEQwODAwOERBRDAwNzAwMEEzMzgyMzNDMDQ3RkZGMkYKLToxMDRBRDAwMDAwRTA3ODIxMzQ4MkZGRkYwMzA3MzgyMTAwMDA3MDIxQjUKLToxMDRBRTAwMDAzMjI1ODI0MDFBRTMwMjEwMEVGNjAyQjAwMDg0N0MwOUMKLToxMDRBRjAwMDAwQ0MxODIxMDE2ODI4MjVBRkE1MDAwMDNDMDEwODAwNjIKLToxMDRCMDAwMEFDMjcwMDc0M0MwMTA4MDBBQzIzMDA3MDkxMjQwMTBBMUEKLToxMDRCMTAwMEEzQTAwMDAyM0MwMjgwRkZBM0E0MDAwMThGQjgwMDAwMDQKLToxMDRCMjAwMDMxNEYwMDdGMzQ1OUZGRkYwMzE5NjgyNDAwMEY3NjAwQ0UKLToxMDRCMzAwMDNDMEIwMDIwMDFBRTYwMjUzNTZBMjAwMDI0MDhGRjgwNzAKLToxMDRCNDAwMDNDMDYxMDAwMjdCRDAwMDhBRDJDMDE0Q0FEMkEwMTU0RDUKLToxMDRCNTAwMEE1MjAwMTU4QTEyODAxNTIwM0UwMDAwOEFEMjYwMTc4RTQKLToxMDRCNjAwMDNDMDM4MDAwMzQ2MjAwNzA4QzQ4MDAwMDMwOEEwMEZGRjMKLToxMDRCNzAwMDMwQTkwMEZGQUY4ODAwMjQzQzA0ODAwMDhDODUwMTc4QjgKLToxMDRCODAwMDA0QTBGRkZFMzQ4NzAwNzA4Q0VCMDAwMDNDMDUwODAwOTkKLToxMDRCOTAwMDhDQTUwMDc0M0MxOTA4MDA4RjM5MDA3MDAxNjgyMDIzMkYKLToxMDRCQTAwMDAwQTQ3MDIxMDAwMDEwMjEwMUM0QzAyQjAzMjI3ODIxMzEKLToxMDRCQjAwMDNDMDc4MDAwMDFGODY4MjEzQzAxMDgwMEFDMkUwMDc0MUQKLToxMDRCQzAwMDM0RTYwQTAwM0MwMTA4MDBBQzJEMDA3MDhDQ0MwMDIwQkIKLToxMDRCRDAwMDAwMDk1ODJCMzRFODA5ODBBQ0VDMDE0NDhDQzkwMDI0NEUKLToxMDRCRTAwMDAwMEIxNTQwQUNFOTAxNDhBMEVBMDE1MDkxMDQwMDRDQ0IKLToxMDRCRjAwMEEwRTQwMTZEMDNFMDAwMDhBNEUwMDE1ODI3QkRGRkU4MzAKLToxMDRDMDAwMDMwODQwMEZGQUZCRjAwMTAwRTAwMDcwRDMwQTUwMEZGN0QKLToxMDRDMTAwMDhGODMwMDU4OEZCRjAwMTAzQzA1ODAwMDM0NDYwMDQwNTEKLToxMDRDMjAwMDI0MDRGRjkwM0MwMjEwMDAyN0JEMDAxOEFDQTMwMTRDRTcKLToxMDRDMzAwMEEwQTQwMTUyQUNBNjAxNTQwM0UwMDAwOEFDQTIwMTc4ODQKLToxMDRDNDAwMDI3QkRGRkUwM0MwODgwMDhBRkJGMDAxQ0FGQjIwMDE4RDIKLToxMDRDNTAwMEFGQjEwMDE0QUZCMDAwMTAzNTEwMDA4MDhFMDYwMDE4MDAKLToxMDRDNjAwMDNDMDc4MDAwMzA5MjAwRkYwMEM3MjAyNUFFMDQwMDE4RUEKLToxMDRDNzAwMDBFMDAwMDVDMzBCMTAwRkY5MjAzMDAwNTM0NjIwMDA4QjIKLToxMDRDODAwMDBFMDAwMDVFQTIwMjAwMDUwMjQwMjAyMTBFMDAwNzM0NDMKLToxMDRDOTAwMDAyMjAyODIxMDI0MDIwMjE4RkJGMDAxQzhGQjIwMDE4NjMKLToxMDRDQTAwMDhGQjEwMDE0OEZCMDAwMTAyNDA1MDAwNTI0MDYwMDAxMDgKLToxMDRDQjAwMDBBMDAwNkNGMjdCRDAwMjAzQzA4ODAwMDI3QkRGRkU4ODIKLToxMDRDQzAwMEFGQjAwMDEwMzUwNTA5ODBBRkJGMDAxNDkwQTcwMDA5RjAKLToxMDRDRDAwMDI0MDIwMDA2MzUwNjA5MDAzMEUzMDBGRjI0MTAwMDA0MUEKLToxMDRDRTAwMDEwNjIwMDcyMjQwODAwMDI5NEFFMDA1QzNDMEQwMjA0QzUKLToxMDRDRjAwMDMxQ0NGRkZGMDE4RDU4MjVBQzhCMDAwMDkwQUEwMDA4MzUKLToxMDREMDAwMDMxNDkwMDIwMTEyMDAwMDgwMDAwMDAwMDkwQkYwMDRFMzMKLToxMDREMTAwMDNDMTkwMTAzMzczODAzMDAzM0VGMDBGRjAxRjgyODI1NjEKLToxMDREMjAwMDI0MTAwMDA4QUM4NTAwMDQ5MENDMDAxMTkwQzkwMDExM0IKLToxMDREMzAwMDMxOEEwMEZGMDAwQTU4ODIzMTI3MDBGRjI1NkEwMDA1RUEKLToxMDRENDAwMDAwMEExMDgwMzhFMzAwMjgxNDYwMDAyOTAwODI0ODIzRkMKLToxMDRENTAwMDkwQ0YwMDEyM0MxOTgwMDAzNzIyMDkwMDMxRTUwMEZGOTYKLToxMDRENjAwMDAwMDU3MDgwMDFEMDY4MjEwMDBEMzQwMDM0QzQwNkZGQjYKLToxMDRENzAwMEFEMjQwMDA0OTA0QzAwMTE5MDU4MDAxMjM3M0YwOTgwNzgKLToxMDREODAwMDhGRTQwMDM0OEYyRjAxMEMwMDEwNTg4MjMzMDUwMEZGOTAKLToxMDREOTAwMDAwQUI3MDIxMDAwODM0MDAwMDhGMTgyMzAwMEU2RjAwNTQKLToxMDREQTAwMDAxQTYxMDI1MzE5RjAwRkMzMDY3RkZGRjAzRTlDMDIxRjkKLToxMDREQjAwMDAwNDdDODI1MDE0Qjc4MjEwMDBGMjg4MEFGMTkwMDBDNEYKLToxMDREQzAwMDBFMDAwMDVDMDEyNTgwMjEzQzBBODAwODI0MDkwMDA0QjMKLToxMDRERDAwMDM1NDgwMDgwMEUwMDAwNUVBMTA5MDAwOTAyMDAxMDIxODQKLToxMDRERTAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MkIKLToxMDRERjAwMDkwQ0UwMDExOTBDRDAwMTkzQzA3MDgwMDk0RTczQkU2RTcKLToxMDRFMDAwMDMxQzYwMEZGMDAwNjIwODIzMUFDMDBGRjAwMDQ1RTAwQzYKLToxMDRFMTAwMDAwMEMxQzAwMDE2MzEwMjUwMDQ3QzgyNTNDMUY0MDAwMDIKLToxMDRFMjAwMDAzM0ZDMDI1M0MxOTgwMDBBRDM4MDAwMDM3MjIwOTAwM0YKLToxMDRFMzAwMDkwNEMwMDExOTA1ODAwMTIzNzNGMDk4MDhGRTQwMDM0RTUKLToxMDRFNDAwMDhGMkYwMTBDMDAxMDU4ODIzMzA1MDBGRjAwQUI3MDIxM0EKLToxMDRFNTAwMDAwMDgzNDAwMDA4RjE4MjMwMDBFNkYwMDAxQTYxMDI1RjMKLToxMDRFNjAwMDMxOUYwMEZDMzA2N0ZGRkYwM0U5QzAyMTAwNDdDODI1RTAKLToxMDRFNzAwMDAxNEI3ODIxMDAwRjI4ODBBRjE5MDAwQzBFMDAwMDVDNTgKLToxMDRFODAwMDAxMjU4MDIxM0MwQTgwMDgyNDA5MDAwNDM1NDgwMDgwNUYKLToxMDRFOTAwMDBFMDAwMDVFQTEwOTAwMDkwMjAwMTAyMThGQkYwMDE0NUUKLToxMDRFQTAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODBBMDAwNzZGNEMKLToxMDRFQjAwMDI0MDgwMDEyMjdCREZGRDhBRkI0MDAyMEFGQjMwMDFDRjgKLToxMDRFQzAwMEFGQjIwMDE4QUZCMTAwMTRBRkJGMDAyNEFGQjAwMDEwRjQKLToxMDRFRDAwMDNDMDY4MDAwOTBDMzAxMEIzMDkyMDBGRjMwQjMwMEZGMEUKLToxMDRFRTAwMDMwNjIwMDMwMDAwMEEwMjExMDQwMDA3MDAwMDA4ODIxRDYKLToxMDRFRjAwMDM0QzQwOTgwOTA4ODAwMDgwMDA4M0UwMDAwMDcyRTAzOTMKLToxMDRGMDAwMDA0QTAwMDk3MjQwNDAwMDQ4Rjg4MDA1ODNDMDEwODAwODYKLToxMDRGMTAwMEEwMjQzQkYwM0MwQzgwMDBBRDgwMDA0ODNDMDM4MDAwQTYKLToxMDRGMjAwMDkwNkUwMTBCMzFDNTAwMjAxMEEwMDAwNzNDMDI4MDAwRUMKLToxMDRGMzAwMDM0NzkwOTgwOTMzODAwMDgwMDE4ODYwMDAwMTA3RTAzMzkKLToxMDRGNDAwMDA1RTIwMDlDM0MwMjgwMDgzNDUwMDkwMDM0NDcwQTgwODYKLToxMDRGNTAwMDkwNEQwMTBCOTRFQjAwMkM5MjAzMDAxMTkyMUYwMDEyNTQKLToxMDRGNjAwMDkwRTUwMDE4MzA3ODAwRkYzM0Y5MDBGRjAwMTk3ODgwRDEKLToxMDRGNzAwMDAxRjg3MDIxMDFEMTUwMjEzMEIxMDBGRjAxNTE0ODIxQzkKLToxMDRGODAwMDI1MjQwMDBBMzFBQzAwNDAzMDkxRkZGRjAwMEMzMDJCOEIKLToxMDRGOTAwMDAyMjAyMDIxQTc4QjAwNUMzQzAxMDgwMEE0MkEzQkU2RUMKLToxMDRGQTAwMDNDMDEwODAwQTQyOTNCRTgzQzAxMDgwMEE0MjkzQkVBOTUKLToxMDRGQjAwMDNDMDEwODAwQTQyMDNCRTAzQzAxMDgwMEE0MjAzQkRDQUQKLToxMDRGQzAwMDBFMDAwMUM5MDEwNjgwMjMwRTAwMDVCMjAwNDAyMDIxMTkKLToxMDRGRDAwMDAwNDAyMDIxMEUwMDA1QkYwMjAwMjgyMTE2ODAwMDVDNDEKLToxMDRGRTAwMDAwMDAwMDAwMEUwMDAxRjIwMjIwMjAyMTNDMDgwODAwMTEKLToxMDRGRjAwMDkxMDgzQkYwMzExNDAwMDMxMjgwMDAxNjNDMUY4MDA4MUEKLToxMDUwMDAwMDhGODQwMDU4M0MwQzgwMDgzNTg2MDA4MDI0OEIwMDAxN0EKLToxMDUwMTAwMEFDQ0IwMDNDM0MwNTgwMDg4Q0FBMDAwNDAxNjAyMDIxMzgKLToxMDUwMjAwMDAxNEI0ODIzMTkyMDAwMDJBRjhCMDA1ODhDQTQwMDA0QzgKLToxMDUwMzAwMDBFMDAwNjk1QUNBNDAwMDQzQzBGODAwMDhERUUwMDc0QjkKLToxMDUwNDAwMDNDMDU4MDA4MzRBRDAwODAwMDRFODgyMUFEQjEwMDBDRDUKLToxMDUwNTAwMDNDMUY4MDA4MzdGOTAwODAwMjQwMjAyMTAyNjAyODIxOEYKLToxMDUwNjAwMEEzMjAwMDZCMEUwMDA3MEQzQzEyODAwMDhGOTgwMDU4QTMKLToxMDUwNzAwMDM0NTAwMDA2QUU1ODAxNEMwRTAwMDU1MDNDMTMxMDAwOTEKLToxMDUwODAwMEEyNDIwMTUyOEZCRjAwMjRBRTUwMDE1NDhGQjQwMDIwQzEKLToxMDUwOTAwMEFFNTMwMTc4OEZCMTAwMTQ4RkIzMDAxQzhGQjIwMDE4OEIKLToxMDUwQTAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODM0QzMwOTgwM0EKLToxMDUwQjAwMDkwNkYwMDA4MDAwRjc2MDAwMDBFNkUwMzA1QTAwMDMzMEQKLToxMDUwQzAwMDM0QzIwOTAwOTA1OTAwMUIyNDFGMDAxMDNDMDEwODAwNDUKLToxMDUwRDAwMEEwM0YzQkYwMzMzODAwMDIxMzAwRkY5MDhGODgwMDU4NDgKLToxMDUwRTAwMDhGODMwMDY0MTQ2OEZGOEUzQzAzODAwMDBFMDAwMDVDMTgKLToxMDUwRjAwMDAwMDAwMDAwM0MwOTgwMDgzNTI1MDA4MDkwQTQwMDA5Q0MKLToxMDUxMDAwMDI0MDcwMDE2MzA4ODAwRkYxMTA3MDAwRDAwMDAwMDAwODIKLToxMDUxMTAwMDkwQTYwMDA5M0MwQzA4MDA5MThDM0JGMDI0MEEwMDA4ODIKLToxMDUxMjAwMDMwQzQwMEZGMzU4QjAwMDEzQzAxMDgwMEEwMkIzQkYwOTAKLToxMDUxMzAwMDEwOEEwMDJGMjQwRDAwMEExMDhEMDAyODI0MDIwMDBDNzQKLToxMDUxNDAwMDBFMDAwMDVFMDAwMDAwMDAwQTAwMDdGQzhGODgwMDU4NzcKLToxMDUxNTAwMDBFMDAwNzYzMDA0MDIwMjEwQTAwMDgyRTAwMDAwMDAwMTYKLToxMDUxNjAwMDNDMEI4MDA4MzU2QTAwODA4RDQ4MDA1NDhDQzkwMTBDQzYKLToxMDUxNzAwMDExMjBGRjY2QUY4ODAwNTgyNDA2MDAxNDNDMDEwODAwODcKLToxMDUxODAwMEEwMjYzQkYwMEEwMDA3RkIzQzBDODAwMDkwNzEwMDA4NTEKLToxMDUxOTAwMDI0MTQwMDAyM0MwMTA4MDBBMDM0M0JGMDMyMzAwMDIwMEYKLToxMDUxQTAwMDEyMDAwMDBCMjQxNDAwMDE4Rjg4MDA1ODBBMDAwN0ZDMkQKLToxMDUxQjAwMDI0MTEwMDA4MzQ1RjAwODA4RkU3MDAzOEFDNDcwMDA0RkEKLToxMDUxQzAwMDhDNDMwMDA0QUZFMzAwM0MwQTAwMDgwNzNDMDI4MDAwNjcKLToxMDUxRDAwMDhGODgwMDU4MEEwMDA3RkMyNDExMDAwNEEwQTIwMDA5Q0YKLToxMDUxRTAwMDBFMDAwMDVFMDAwMDAwMDAwQTAwMDdGQzhGODgwMDU4RDcKLToxMDUxRjAwMDI0MDIwMDE0MEEwMDA4QURBMEEyMDAwOTI3QkRGRkU4QTAKLToxMDUyMDAwMEFGQkYwMDE0QUZCMDAwMTAzQzEwODAwMDkyMDIwMTA5NDMKLToxMDUyMTAwMDI0MDUwMDAxMEUwMDA3MEQzMDQ0MDBGRjNDMUY4MDA4RUMKLToxMDUyMjAwMDkzRjgwMDBFMzdFMzAwODA5M0Y5MDAwRjkwNkUwMDI2OEMKLToxMDUyMzAwMDkzRTkwMDBBMzMyRjAwRkYwMDE4NjYwMDAwMEY2QzAwOEUKLToxMDUyNDAwMDMxQ0IwMEZGMDE4RDUwMjUwMDBCMzIwMDAxNDYzODI1N0YKLToxMDUyNTAwMDMxMjgwMEZGMzQ0NTYwMDAwMEU4MjAyNTI0MDJGRjgxNEEKLToxMDUyNjAwMDNDMDMxMDAwQUUwNDAxNEM4RkJGMDAxNEFFMDUwMTU0ODYKLToxMDUyNzAwMEEyMDIwMTUyQUUwMzAxNzg4RkIwMDAxMDAzRTAwMDA4RDMKLToxMDUyODAwMDI3QkQwMDE4MjdCREZGRTgzMDg0MDBGRkFGQkYwMDEwMjYKLToxMDUyOTAwMDBFMDAwNzBEMzBBNTAwRkYzNDQ2MDA0MDNDMDQ4MDAwOUUKLToxMDUyQTAwMDI0MDVGRjkyQUM4NjAxNTRBMDg1MDE1MjhGODMwMDU4REIKLToxMDUyQjAwMDhGQkYwMDEwM0MwMjEwMDAyN0JEMDAxOEFDODMwMTRDQ0EKLToxMDUyQzAwMDAzRTAwMDA4QUM4MjAxNzgyN0JERkZEOEFGQjIwMDE4MTgKLToxMDUyRDAwMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMEFGQjMwMDFDREYKLToxMDUyRTAwMDNDMDc4MDAwOTBFMjAxMDkzMDg2MDBGRjMwQjAwMEZGRUIKLToxMDUyRjAwMDAwMDYxOEMyMzIwNDAwMDIzMDcxMDAwMTE0ODAwMDA3NTkKLToxMDUzMDAwMDMwNTIwMEZGM0MwOTgwMDgzNTMzMDA4MDkyNjgwMDA1NjgKLToxMDUzMTAwMDMxMDUwMDA4MTBBMDAwMEMzMENBMDAxMDAyNDAyMDIxMDYKLToxMDUzMjAwMDBFMDAwNzQ1MDIyMDI4MjEyNDAyMDAwMThGQkYwMDIwMjMKLToxMDUzMzAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMTMKLToxMDUzNDAwMDAzRTAwMDA4MjdCRDAwMjgxNTQwMDAzMDM0RTUwQTAwQkUKLToxMDUzNTAwMDhDQjkwMDI0OENCODAwMDgxMzM4MDA0NzAwMDA0MDIxQTUKLToxMDUzNjAwMDNDMEU4MDA4MzVEMzAwODA5MjZEMDA2ODI0MEIwMDAyNEIKLToxMDUzNzAwMDMxQUMwMEZGMTE4QjAwODAzQzA2ODAwMDkyN0YwMDRDMTYKLToxMDUzODAwMDkwQzQwMTA5NTA5RjAwMDQzMjEzMDA3QzExMDAwMDY3OTMKLToxMDUzOTAwMDAwMDAwMDAwMzIxMzAwN0MxNjYwMDA1QTAyNDAyMDIxRjkKLToxMDUzQTAwMDE2MjAwMDA4MzIwQzAwMDEzQzA3ODAwMDM0RUIwQTAwOTQKLToxMDUzQjAwMDhENjUwMDI0OENFODAxMDQxNEE4RkZEQzAwMDAxMDIxOTYKLToxMDUzQzAwMDMyMEMwMDAxMTE4MDAwMEQwMjQwMjAyMTNDMTA4MDAwQjEKLToxMDUzRDAwMDhFMEUwMTBDOEY4RDAwNjgxMUNEMDAwODAwMDAwMDAwQkEKLToxMDUzRTAwMDBFMDAwN0UyMDIyMDI4MjE4RTBGMDEwQzNDMTg4MDA4RDUKLToxMDUzRjAwMDM3MTAwMDgwQUUwRjAwNTAwMjQwMjAyMTBFMDAwNzM0MEQKLToxMDU0MDAwMDAyMjAyODIxMEEwMDA5MDAyNDAyMDAwMTNDMDcwODAwQUMKLToxMDU0MTAwMDhDRTcwMDY0MjRFNjAwMDEzQzAxMDgwMEFDMjYwMDY0MkYKLToxMDU0MjAwMDE2MDAwMDBEMDAwMDAwMDAwMjIwMjgyMTBFMDAwNzM0QTUKLToxMDU0MzAwMDAyNDAyMDIxOTI2RjAwNjgyNDBEMDAwMjMxRUUwMEZGMkYKLToxMDU0NDAwMDExQ0QwMDIyMDI0MDIwMjEwRTAwMDhCNDAwMDAwMDAwMEYKLToxMDU0NTAwMDBBMDAwOTAwMjQwMjAwMDEwRTAwMDAzRDI0MDQwMDAxOUUKLToxMDU0NjAwMDkyNkMwMDI1MDIwQzU4MjUwRTAwMDA1RUEyNkIwMDI1RjAKLToxMDU0NzAwMDBBMDAwOTQwMDIyMDI4MjE4RTYzMDAxODhDRTQwMTA0RjAKLToxMDU0ODAwMDhDQkYwMDI0MDAwMzE2MDIxNDlGRkZCNTMwNDUwMDdGMzcKLToxMDU0OTAwMDkyNjkwMDRDMjY0NDAwMDEzMDkzMDA3RjEyNjUwMDQwNjEKLToxMDU0QTAwMDMxMjMwMEZGMTQ2NEZGQUYzQzBFODAwODI2NDgwMDAxNDIKLToxMDU0QjAwMDMxMTEwMDdGMzEwMjAwRkYxMjI1MDAwQjI0MDgwMDAxOEEKLToxMDU0QzAwMDAwNDA5MDIxMEEwMDA5MEQyNDExMDAwMTI0MDUwMDA0NjgKLToxMDU0RDAwMDBFMDAwNkNGMjQwNjAwMDEwRTAwMDhCNDAwMDAwMDAwRjQKLToxMDU0RTAwMDBBMDAwOTAwMjQwMjAwMDEyNDA3RkY4MDAyNDcyODI0NDMKLToxMDU0RjAwMDAwQTc5MDI2MzI0MjAwRkYwMDQwOTAyMTBBMDAwOTBEQ0IKLToxMDU1MDAwMDI0MTEwMDAxMEUwMDA3RTIwMjIwMjgyMTMyMDYwMDMwOUIKLToxMDU1MTAwMDEwQzBGRkEzMzIxMDAwODIwMjQwMjAyMTBFMDAwNzQ1NzgKLToxMDU1MjAwMDAyMjAyODIxMEEwMDA5MDAyNDAyMDAwMThFNjMwMDE4Q0QKLToxMDU1MzAwMDAyNDAyMDIxMDIyMDI4MjEwMDY2MTAyNTBFMDAwOEQ2RjYKLToxMDU1NDAwMEFFNjIwMDE4OTI2NDAwNEMyNDA1MDAwMzI0MDYwMDAxOUEKLToxMDU1NTAwMDBFMDAwNkNGMzA4NDAwRkYwRTAwMDAzRDI0MDQwMDAxNDEKLToxMDU1NjAwMDkyNkEwMDI1MDIwQTQ4MjUwRTAwMDA1RUEyNjkwMDI1MDUKLToxMDU1NzAwMDBBMDAwOTAwMjQwMjAwMDE4RTc4MDAxODNDMTk4MDAwRkUKLToxMDU1ODAwMDAyNDAyMDIxMDMxOTc4MjUwMjIwMjgyMTBFMDAwNzM0MkIKLToxMDU1OTAwMEFFNkYwMDE4OTI2NDAwNEMwQTAwMDk4ODI0MDUwMDA0Q0MKLToxMDU1QTAwMDMyNDYwMDgwMzhDQTAwODAxNDZBRkY2RTNDMEU4MDA4QzQKLToxMDU1QjAwMDBBMDAwOTYxMjY0ODAwMDEyN0JERkZDMEFGQjAwMDE4RUUKLToxMDU1QzAwMDNDMTA4MDAwQUZCRjAwMzhBRkI3MDAzNEFGQjYwMDMwM0EKLToxMDU1RDAwMEFGQjUwMDJDQUZCNDAwMjhBRkIzMDAyNEFGQjIwMDIwQTkKLToxMDU1RTAwMDBFMDAwNTVFQUZCMTAwMUM5MjA0MDEwODkyMDUwMTBCOEMKLToxMDU1RjAwMDMwODQwMEZGMEUwMDA4RTczMEE1MDBGRjE0NDAwMEQ2RkQKLToxMDU2MDAwMDhGQkYwMDM4M0MwOTgwMDgzNTI4MDA4MEExMDAwMDZCNUUKLToxMDU2MTAwMDM2MDcwOTgwOTBFNjAwMDAyNDAyMDA1MDNDMTcwODAwN0QKLToxMDU2MjAwMDI2RjczREY0MzBDMzAwRkYzQzE0MDgwMDI2OTQzRTA0RTYKLToxMDU2MzAwMDEwNjIwMDAzM0MxMDgwMDAwMDAwQjgyMTAwMDBBMDIxOEYKLToxMDU2NDAwMDI0MUYwMDEwMzYxMTBBMDAzNjEzMDk4MDhFMTYwMTA0M0IKLToxMDU2NTAwMDhGOEQwMDU4OEUzODAwMjQzNjE5MEE4MDhFNzIwMDIwRjMKLToxMDU2NjAwMDNDMDEwODAwQTAzRjNCRjA5NzJDMDAyQzhFRjUwMDAwNzkKLToxMDU2NzAwMDkzMkIwMDE4MDI0RDcwMjMwMkQ4NzgyMzNDMDEwODAwQjgKLToxMDU2ODAwMEFDMkYzQkNDM0MwMTA4MDBBQzJFM0JEMDNDMDEwODAwQzkKLToxMDU2OTAwMEFDMkQzQkY0QTc4QzAwNUMwMkEwRjgwOTMxNzIwMEZGMkUKLToxMDU2QTAwMDMwNEEwMDAyMTU0MDAwREEzMDQ1MDAwMTEwQTAwMEI0NzUKLToxMDU2QjAwMDAwMDAwMDAwMzYwNTA5MDA4RTJCMDAyNDkwQkYwMDExNjkKLToxMDU2QzAwMDkwQjkwMDEyOTBCNjAwMTEzM0VGMDBGRjMzMzgwMEZGOUQKLToxMDU2RDAwMDMyQ0QwMEZGMDAxODcwODAwMUNGODAyMTAyNEQ2MDIxODMKLToxMDU2RTAwMDAyMTJBODIxMjU4QTAwMTAzQzAxMDgwMEE0MzUzQkU4REQKLToxMDU2RjAwMDNDMDEwODAwQUMyQjNCRjgzQzAxMDgwMEE0MkEzQkU0MjkKLToxMDU3MDAwMDNDMDEwODAwQTQzMDNCRTYwMjYwQjAyMTNDMTU4MDAwNUIKLToxMDU3MTAwMDhGOTIwMDU4OEY4NDAwNjA4RUQzMDAyMDI0MTEwMDA2RTEKLToxMDU3MjAwMDAwOTIzMDIzMDI3MjI4MjMzQzAxMDgwMEFDMzEzQkVDOEMKLToxMDU3MzAwMDA0QzAwMEFGMDAwMDk4MjEwNEEwMDBBRDAwQzUxMDJCRUMKLToxMDU3NDAwMDEwNDAwMEFGMDAwMDAwMDAzQzAxMDgwMEFDMjYzQkQwMzgKLToxMDU3NTAwMDhFOTAwMDAwMDIwMEY4MDkwMDAwMDAwMDMwNDMwMDAyQjMKLToxMDU3NjAwMDE0NjAwMDZGMDA0MDg4MjEzMDQ2MDAwMTU0QzAwMDExRDEKLToxMDU3NzAwMDhFOTIwMDA0M0MwODA4MDA4RDA4M0JENDNDMDlDMDAwMTAKLToxMDU3ODAwMDNDMDQ4MDAwMDEwOTM4MjVBRUE3MEUwMDhDOEIwMDAwNzgKLToxMDU3OTAwMDMxNkEwMDA4MTE0MEZGRkQwMDAwMDAwMDk0OEQwRTA4RTIKLToxMDU3QTAwMDI0MTMwMDAxQTc4RDAwNDA4QzhDMEUwNEFGOEMwMDI4QzAKLToxMDU3QjAwMDhFOTIwMDA0MDI0MEY4MDkwMDAwMDAwMDAyMjI4ODI1QjEKLToxMDU3QzAwMDMyMkUwMDAyMTVDMDAwQTUwMDAwMDAwMDNDMTgwODAwQTEKLToxMDU3RDAwMDk3MTgzQkRDM0MxMjA4MDA5NjUyM0JFODNDMTkwODAwNDUKLToxMDU3RTAwMDk3MzkzQkRFM0MwNzA4MDA4Q0U3M0JENDAzMTI0MDIxOEQKLToxMDU3RjAwMDNDMEIwODAwOEQ2QjNCRjgzQzBFMDgwMDk1Q0UzQkYyNEQKLToxMDU4MDAwMDNDMTI4MDAwMDExOTc4MjE4RTQ2MDEwQzAwRjg2ODIxQjUKLToxMDU4MTAwMDI1RUMwMDAyMDFBRTQ4MjEwMTY3NTAyMUFGODYwMDY4RTcKLToxMDU4MjAwMDNDMDEwODAwQUMyQTNCRjgzQzAxMDgwMEE0MjkzQkUwRkQKLToxMDU4MzAwMDNDMDEwODAwQTQyODNCRUEwRTAwMDFDOTMxODRGRkZGQTcKLToxMDU4NDAwMDBFMDAwNTUwMDA0MDgwMjEzQzAxMDgwMEEwMjIzQkYxRTEKLToxMDU4NTAwMDhFODIwMDA4MDA0MEY4MDkwMjAwMjAyMThGODUwMDU4NDAKLToxMDU4NjAwMDBFMDAwNUJGMDA0MDIwMjE4RTkwMDAwQzAyMDBGODA5QjgKLToxMDU4NzAwMDAwNDAyMDIxM0MwMzA4MDA5NDYzM0JFQTNDMDIwODAwRkUKLToxMDU4ODAwMDk0NDIzQkRFMDA2MjIwMjEyNDg1MDAwMjBFMDAwMUYyREEKLToxMDU4OTAwMDMwQTRGRkZGM0MxOTA4MDA4RjM5M0JDQzNDMUYwODAwQTcKLToxMDU4QTAwMDhGRkYzQkQ0MDMzRkMwMjMzQzAxMDgwMEFDMzgzQkNDMDYKLToxMDU4QjAwMDE3MDAwMDA2MDAwMDAwMDAzQzA1MDgwMDhDQTUzQkVDMkEKLToxMDU4QzAwMDM0QkYwMDQwM0MwMTA4MDBBQzNGM0JFQzEyNjAwMDQyOUEKLToxMDU4RDAwMDhGODIwMDQ0OEU0MzBFMTA4RjkzMDA0NEFFNjMwMDIwRUQKLToxMDU4RTAwMDhFNDQwRTE4QUU2NDAwMjQzQzA0MDgwMDk0ODQzQkUwMEYKLToxMDU4RjAwMDBFMDAwNjk3MDAwMDAwMDA4Rjg2MDA1ODhFOEEwMDEwNjgKLToxMDU5MDAwMDNDMDEwODAwQUMyNjNCRjQwMTQwRjgwOTAwMDAwMDAwMEYKLToxMDU5MTAwMDNDMDkwODAwOEQyOTNCQ0MxNTIwRkY3RThGOTIwMDU4NTIKLToxMDU5MjAwMDk3OTYwMDVDM0MxNDgwMEUzMjM1MDAxMDBFMDAwNkM2QkYKLToxMDU5MzAwMEE2OTYwMDJDNTZBMDAwNDU4RUVCMDAwNDMyMjcwMDQwQUUKLToxMDU5NDAwMDU0RTAwMDFFOEVGMTAwMDg4RUVDMDAwQzAxODBGODA5NzYKLToxMDU5NTAwMDAwMDAwMDAwOEZCRjAwMzg4RkI3MDAzNDhGQjYwMDMwRDIKLToxMDU5NjAwMDhGQjUwMDJDOEZCNDAwMjg4RkIzMDAyNDhGQjIwMDIwOTUKLToxMDU5NzAwMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwODI3QkQwMDQwNjUKLToxMDU5ODAwMDkyMDkwMTA5OEY4ODAwMzAwMDA5M0UwMDAwRTgzMDI1QTcKLToxMDU5OTAwMEFFMDYwMDgwOEUyMzAwMjA4RTI0MDAyNEFGQTMwMDEwQ0EKLToxMDU5QTAwMEFFMDMwRTE0OEZBMjAwMTBBRTAyMEUxMEFFMDQwRTFDMzkKLToxMDU5QjAwMEFFMDQwRTE4MEEwMDA5RTMzNjA1MDkwMDAyMjBGODA5QjIKLToxMDU5QzAwMDAwMDAwMDAwOEVFQzAwMEMwMTgwRjgwOTAwMDAwMDAwQ0YKLToxMDU5RDAwMDBBMDAwQThCOEZCRjAwMzgyNDA4MDAwMTI0MTAwMDAxNDAKLToxMDU5RTAwMEE0NDAwMDIwQTQ0ODAwMjIwQTAwMEE2RkFDNTAwMDI0MDIKLToxMDU5RjAwMDNDMDEwODAwQUMyMDNCRDAwQTAwMEEwQThFOTAwMDAwNEYKLToxMDVBMDAwMDNDMDEwODAwQUMyNTNCRDAwQTAwMEEwQThFOTAwMDAwMzkKLToxMDVBMTAwMDkyMTEwMTA5MDAwMDI4MjEwRTAwMDczNDMyMjQwMEZGRjIKLToxMDVBMjAwMDhGQkYwMDM4OEZCNzAwMzQ4RkI2MDAzMDhGQjUwMDJDOTEKLToxMDVBMzAwMDhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDRDgKLToxMDVBNDAwMDhGQjAwMDE4MDNFMDAwMDgyN0JEMDA0MDAxNjBGODA5OEUKLToxMDVBNTAwMDAwMDAwMDAwMEEwMDBBODUzMjI3MDA0MDUyNjBGRkIxQjIKLToxMDVBNjAwMDk3OTYwMDVDOEVCNjBFMTQ4Rjk0MDA0NEFFOTYwMDIwN0MKLToxMDVBNzAwMDhFQUYwRTFDQUU4RjAwMjQwQTAwMEE3RTk3OTYwMDVDNDMKLToxMDVBODAwMDhGODIwMDAwMDAwNDIxODAwM0UwMDAwODAwODIxMDIxQzIKLToxMDVBOTAwMDNDMDc4MDA4MzRFMjAwODA5MDQzMDA2OTAwODA0MDIxODgKLToxMDVBQTAwMDEwNjAwMDA5M0MwNDAxMDAzQzA3MDgwMDhDRTczQkY0NEYKLToxMDVBQjAwMDhGODMwMDFDMDBFMzIwMjMwNDgwMDAwODkzODkwMDA4RTIKLToxMDVBQzAwMDE0RTMwMDAzMDEwMDIwMjEwM0UwMDAwODAwODAxMDIxRkUKLToxMDVBRDAwMDNDMDQwMTAwMDNFMDAwMDgwMDgwMTAyMTExMjAwMDBCQUQKLToxMDVBRTAwMDAwNjczODIzM0MwRDgwMDAzNUFDMDk4MDkxOEIwMDdDMjkKLToxMDVBRjAwMDMxNkEwMDAyMTE0MDAwMjAyNDA5MDAzNDAwRTk3MDJCQjMKLToxMDVCMDAwMDE1QzBGRkYxMDEwMDIwMjEwMEU5MzgyMzI0MDNGRkZDMjgKLToxMDVCMTAwMDAwQTNDODI0MDBFM0MwMjQwMEY5NzgyQjE1RTBGRkVBQjUKLToxMDVCMjAwMDAzMDgyMDIxMzBDNDAwMDMwMDA0MTAyMzE0QzAwMDE0MTMKLToxMDVCMzAwMDMwNDkwMDAzMDAwMDMwMjEwMEE5NzgyMTAxRTY3MDIxREUKLToxMDVCNDAwMDAwRUU2ODJCMTFBMEZGRTAzQzA0MDEwMDJEMzgwMDAxOUQKLToxMDVCNTAwMDAwMDZDODJCMDEwNTQ4MjEwMzE5MzgyNDE0RTBGRkRBOTgKLToxMDVCNjAwMDI1MjRGRkZDMjQwMkZGRkMwMEEyMTgyNDAwNjgyMDIxNDkKLToxMDVCNzAwMDAzRTAwMDA4MDA4MDEwMjEwQTAwMEFGNDI0MDkwMDMwMjQKLToxMDVCODAwMDNDMEM4MDAwMzU4NjA5ODA5MENCMDA3QzMxNkEwMDA0OTMKLToxMDVCOTAwMDE1NDBGRkU5MjQwNjAwMDQwQTAwMEIwMzAwMDAzMDIxMzEKLToxMDVCQTAwMDNDMDMwODAwOEM2MzAwNUM4RjgyMDAwNDI3QkRGRkU4ODMKLToxMDVCQjAwMEFGQkYwMDE0MTA2MjAwMDVBRkIwMDAxMDAwMDMyOUMwOTEKLToxMDVCQzAwMDI0QTQwMjgwQUY4NDAwMDBBRjgzMDAwNDNDMTA4MDAwNTYKLToxMDVCRDAwMDM2MDMwQTAwOTQ2NTAwMzIwRTAwMEFENTMwQTQzRkZGNTgKLToxMDVCRTAwMDhFMDQwMTAwM0MxODAwODAzNzBGMDAwMzAwODJDODIxOUEKLToxMDVCRjAwMDI0MDJGRjgwMDMyMjYwMjQzMzI5MDA3RjAwMENGOTQwMzcKLToxMDVDMDAwMDAzRTk0MDI1MzMyRTAwNzgzQzBEMTAwMDAxMEQ1MDI1OEUKLToxMDVDMTAwMDAxQ0Y1ODI1QUUwQzAwMjgzNjA4MDk4MEFFMEMwODBDQzAKLToxMDVDMjAwMEFFMEIwODJDQUUwQTA4MzA5MTAzMDA2OTNDMDY4MDBDQ0MKLToxMDVDMzAwMDAxMjYzODIxMTA2MDAwMDZBRjg3MDAyMDhEMDkwMDNDNDYKLToxMDVDNDAwMDhEMDYwMDZDMDEyNjM4MjMxOEUwMDA3RjAwMDAwMDAwNUMKLToxMDVDNTAwMDNDMEM4MDA4MzU4QjAwODAzQzBBODAwMEExNjAwMDY5MDQKLToxMDVDNjAwMDM1NTAwOTgwOEUwMjAwMzgzQzA2ODAwMDM0QzUwQTAwOTkKLToxMDVDNzAwMDkwQUQwMDNDMzFBODAwMjAxMTAwMDAxOUFGODIwMDFDM0IKLToxMDVDODAwMDI0MEUwMDAxM0MxOTgwMDAzNzMwMEEwMEEzOEUwMDA4NjIKLToxMDVDOTAwMEFGODAwMDEwOEUwNDAwMjQ4Rjg1MDAxMDI0MTgwMDA4QTcKLToxMDVDQTAwMEFGODAwMDBDQUY4MDAwMTQzQzAxMDgwMEE0MzgzQkRFM0MKLToxMDVDQjAwMDNDMDEwODAwQTQyMDNCRjIwRTAwMEFEOTAwMDAzMDIxNkMKLToxMDVDQzAwMDkyMEYwMDNDOEZCRjAwMTQ4RkIwMDAxMDAwMEY3MTQyODQKLToxMDVDRDAwMEFGODIwMDE4MjdCRDAwMTgwM0UwMDAwODMxQzIwMDAxQTAKLToxMDVDRTAwMDkwQjkwMDMyMjQwRjAwMDEzMzM4MDBGRjAwMTgyMTgyRTAKLToxMDVDRjAwMDEwOEYwMDNGMjQxRjAwMDIxMDlGMDA2MjM0QzIwQUMwQjAKLToxMDVEMDAwMDNDMDM4MDAwMzQ2NDBBMDA4Qzk5MDAyNDE3MjAwMDFEOTUKLToxMDVEMTAwMDM0NjYwOTAwOTA4MzAwMzAyNDFGMDAwNTMwNjIwMDNGODQKLToxMDVEMjAwMDEwNUYwMDRDMjQwNTAwMDE4Rjg2MDAwQ0EzODUwMDA4M0QKLToxMDVEMzAwMEFGODYwMDE0QUY4NjAwMTAzQzE5ODAwMDM3MzAwQTAwOEYKLToxMDVENDAwMDhFMDQwMDI0OEY4NTAwMTAyNDE4MDAwODNDMDEwODAwRjAKLToxMDVENTAwMEE0MzgzQkRFM0MwMTA4MDBBNDIwM0JGMjBFMDAwQUQ5MjcKLToxMDVENjAwMDAwMDAwMDAwOTIwRjAwM0M4RkJGMDAxNDhGQjAwMDEwQTUKLToxMDVENzAwMDAwMEY3MTQyQUY4MjAwMTgyN0JEMDAxODAzRTAwMDA4MzEKLToxMDVEODAwMDMxQzIwMDAxOEM4ODAwMDg4QzhEMDAyNDhDQ0IwMDY0MEIKLToxMDVEOTAwMDNDMTk4MDAwMzczMDBBMDBBRjhCMDAxMEEzODAwMDA4NDgKLToxMDVEQTAwMDhFMDQwMDI0OEY4NjAwMEM4Rjg1MDAxMDAxMEQ2MDIzNjcKLToxMDVEQjAwMDI0MTgwMDA4QUY4QzAwMTQzQzAxMDgwMEE0MzgzQkRFMTYKLToxMDVEQzAwMDNDMDEwODAwQTQyMDNCRjIwRTAwMEFEOTAwMDAwMDAwQUMKLToxMDVERDAwMDkyMEYwMDNDOEZCRjAwMTQ4RkIwMDAxMDAwMEY3MTQyNzMKLToxMDVERTAwMEFGODIwMDE4MjdCRDAwMTgwM0UwMDAwODMxQzIwMDAxOEYKLToxMDVERjAwMDkwQTcwMDMwMzBFMzAwM0Y1MDY0MDAyODM0QzUwQUMwNEIKLToxMDVFMDAwMDhDQUEwMDI0MTU0MDAwMjIzNEM4MDkwMDhDQUIwMDQ4M0QKLToxMDVFMTAwMDNDMEM3RkZGMzU4NUZGRkYwMTY1MTAyNDNDMTg4MDAwOTYKLToxMDVFMjAwMEFGODIwMDBDMzcwNTA5MDA4RjhFMDAwQzhDQUYwMDYwMkMKLToxMDVFMzAwMDAxQ0Y2ODJCMTVBMDAwMDIwMUMwMjAyMThDQTQwMDYwQjYKLToxMDVFNDAwMDBBMDAwQjc1QUY4NDAwMEM4RDAyMDA2QzBBMDAwQjUwMjkKLToxMDVFNTAwMDNDMDY4MDAwOEM4OTAwNDg4Rjg2MDAwQzNDMEE3RkZGM0UKLToxMDVFNjAwMDM1NTBGRkZGMDEzMDM4MjQzQzA0ODAwODI0MDUwMDAxMzAKLToxMDVFNzAwMEFGODcwMDE0QUM4MDAwNkNBMzg1MDAwODBBMDAwQjgzNzgKLToxMDVFODAwMEFGODYwMDEwOEM0NDAwMTQwQTAwMEI3NUFGODQwMDBDMjAKLToxMDVFOTAwMDhEMDIwMDY4MEEwMDBCQkQzQzE4ODAwMDM0QzQwOTgwRTQKLToxMDVFQTAwMDhDODYwMDcwOENCMDAwMTQwMEQwNDgyQjExMjAwMDA0QTgKLToxMDVFQjAwMDAwMDAwMDAwOEM4MjAwNzAwQTAwMEJCRDNDMTg4MDAwQkUKLToxMDVFQzAwMDhDQTIwMDE0MEEwMDBCQkQzQzE4ODAwMDhGODUwMDEwQzYKLToxMDVFRDAwMDI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNDE0QTAwMDA4NDkKLToxMDVFRTAwMEFGQjAwMDEwM0MwNDgwMDAzNDg3MEEwMDkwRTYwMDMwMTgKLToxMDVFRjAwMDI0MDIwMDA1MzBDMzAwM0YxMDYyMDBCNzM0ODQwOTAwNUIKLToxMDVGMDAwMDhGOTEwMDBDMDBBMDgwMjEzQzA0ODAwMDM0OEUwQTAwOTgKLToxMDVGMTAwMDhEQ0QwMDA0M0MwNjA4MDA4Q0M2M0JEMDMxQTczRkZGNjYKLToxMDVGMjAwMDAwRTY2MDJCNTU4MDAwMDEwMEUwMzAyMTkzOEYwMDA4Q0YKLToxMDVGMzAwMDExRTAwMDc2MDBEMDEwMkIzNDk5MDk4MDkzMzgwMDdDNTIKLToxMDVGNDAwMDMzMDQwMDAyMTA4MDAwNzcyNDAzMDAzNDAwQzNGODJCRDAKLToxMDVGNTAwMDE3RTAwMEQ2MDBDMzMwMjMwMEQwMTAyQjNDMDEwODAwMEUKLToxMDVGNjAwMEE0MjMzQkRDMTQ0MDAwNkQwMjAwMTgyMTNDMDQwODAwMEYKLToxMDVGNzAwMDhDODQzQkNDMDA2NDI4MkI1NEEwMDAwMTAwNjAyMDIxQkQKLToxMDVGODAwMDNDMDU4MDAwMzRBOTBBMDA5MTI4MDAzQzNDMDEwODAwMkYKLToxMDVGOTAwMEFDMjQzQkQ0MzEwMzAwMjAxNDYwMDAwMjAwMDA0ODIxRUYKLToxMDVGQTAwMDhDQTkwRTE4OEY4ODAwMTgwMTI4NTAyQjExNDAwMDVGMTMKLToxMDVGQjAwMDAwMDAwMDAwM0MwNTA4MDA4Q0E1M0JENDAwQTk2MDIxMkUKLToxMDVGQzAwMDAxMEM1ODJCMTE2MDAwNUMwMEIwNjgyQjAxMDkzODIzQ0MKLToxMDVGRDAwMDAwRTAyODIxM0MwMTA4MDBBQzI3M0JENDEyMDAwMDAzNUMKLToxMDVGRTAwMDI0MDJGRkZDMTBCMDAwOEMzMjJBMDAwMzAwQTJGODI0MjcKLToxMDVGRjAwMDNDMDEwODAwQTQyMDNCRjIzQzAxMDgwMEFDM0YzQkQ0MkMKLToxMDYwMDAwMDAzRTAyODIxOEY4NDAwMTAxMjA0MDAwNjNDMDM4MDA4NUUKLToxMDYwMTAwMDhDNkEwMDZDMDIwMDIwMjFBRjkxMDAwQzI1NTAwMDAxMTkKLToxMDYwMjAwMEFDNzAwMDZDOEY4QjAwMTQwMDg1ODgyM0FGOTEwMDEwM0EKLToxMDYwMzAwMDAxNjUyMDIzQUY4NDAwMTQxMjIwMDAwMjI0MDcwMDE4RjkKLToxMDYwNDAwMDI0MDcwMDEwM0MwRTgwMDgzNUM2MDA4MDkwQ0QwMDY4MDMKLToxMDYwNTAwMDI0MEMwMDAxM0MwMTA4MDBBMDI3M0JGMDMxQTcwMEZGMDEKLToxMDYwNjAwMDEwRUMwMDQ3MDAwMDAwMDAxNDgwMDAxODAwMDAyODIxRjgKLToxMDYwNzAwMDNDMEI4MDAwOTE2NTAxMDkzNTcxMDk4MDhFMjMwMDE4NjEKLToxMDYwODAwMDMwQTUwMEZGMDAwMzU2MDIyNEEzMDAwMTMxNDYwMDdGMjMKLToxMDYwOTAwMDMwNzAwMDdGMTIwNjAwN0UyNDBDRkY4MDNDMEY4MDA4QzkKLToxMDYwQTAwMDM1RTkwMDgwQTEyMzAwNEMzQzA4MDgwMDhEMDgzQkVDM0EKLToxMDYwQjAwMDI0MEUwMDAyM0MwMTA4MDBBMDJFM0MzMTM1MEQwMDA4RTIKLToxMDYwQzAwMDNDMDEwODAwQUMyRDNCRUMyNDA1MDAxMDNDMUY4MDAwNzcKLToxMDYwRDAwMDM3RTQwQTAwOTA5OTAwM0MzMzM4MDAyMDEzMDAwMDA1OTMKLToxMDYwRTAwMDAwQTAyMDIxMjQwMjAwMDEzQzAxMDgwMEFDMjIzQkQ0ODYKLToxMDYwRjAwMDM0QTQwMDAxOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQkUKLToxMDYxMDAwMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyMDNDMDEwODAwQUEKLToxMDYxMTAwMEE0MjAzQkRDMTA0MEZGOTUwMjAwMTgyMTBBMDAwQzEwNUYKLToxMDYxMjAwMDAwQzAxODIxMEEwMDBDMDgyNDAzMDAzMDNDMDUwODAwQjgKLToxMDYxMzAwMDhDQTUzQkQ0MDBCMDY4MkIxMUEwRkZBODAwMDAwMDAwODQKLToxMDYxNDAwMDNDMDQwODAwOTQ4NDNCREMwMDg1NzgyMTAxRTc3MDJCMzcKLToxMDYxNTAwMDExQzAwMDA3MkNBMjAwMDQzQzFGNjAwMDhGRjk1NDA0RkEKLToxMDYxNjAwMDMzMzgwMDNGMTcwMEZGRTMyNDA0MDA0MjJDQTIwMDA0NTAKLToxMDYxNzAwMDEwNDBGRjlBMjQwNDAwNDIwQTAwMEM3MzhGQkYwMDE4REQKLToxMDYxODAwMDE1MjhGRkI5MDAwMDAwMDA4Q0MyMDAxODNDMTg4MDAwRTAKLToxMDYxOTAwMDI0MTkwMDAyMDA1OEY4MjVBQ0RGMDAxODM3MDQwQTAwNjMKLToxMDYxQTAwMEEwRDkwMDY4OTA4OTAwM0MyNDBGMDAwNDAwQTAxMDIxQjEKLToxMDYxQjAwMDMxMjgwMDIwM0MwMTA4MDBBMDJGM0MzMTExMDAwMDAyRDIKLToxMDYxQzAwMDI0MDUwMDEwMjQwMjAwMDEzQzAxMDgwMEFDMjIzQkNDNTUKLToxMDYxRDAwMDBBMDAwQzY5M0MxRjgwMDA4Rjg4MDAxNDhDODkwMDYwQzUKLToxMDYxRTAwMDAxMDkyODJCMTRBMDAwMDIwMTAwODgyMThDOTEwMDYwNzUKLToxMDYxRjAwMDNDMEI4MDAwOEQ2NDBFMTgyNDBBMDAwMTAyMjAyODIxMjcKLToxMDYyMDAwMDAyMjAzMDIxQTM4QTAwMDgwRTAwMEFEOTAyMjA4MDIxMzIKLToxMDYyMTAwMDBBMDAwQkY3QUY4MjAwMTgwMDBBMTgyMzEyMjAwMDA3QUIKLToxMDYyMjAwMDMwNjQwMDAzM0MwRDgwMDAzNUE3MDk4MDkwRUMwMDdDQjEKLToxMDYyMzAwMDMxOEIwMDA0MTU2MDAwMTkyNDhFMDAwNDNDMDEwODAwMTUKLToxMDYyNDAwMEE0MjQzQkYyM0MxODA4MDA5NzE4M0JGMjAzMDUyMDIxRDgKLToxMDYyNTAwMDAwQzQ3ODJCMTFFMEZGNkM4Rjg0MDAxMDJDQTYwMDA1ODEKLToxMDYyNjAwMDE0QzBGRkE0MjQwNDAwNDIzMEI5MDAwMzE3MjAwMDAyMjgKLToxMDYyNzAwMDAwQjkxODIzMjRBM0ZGRkMzQzAxMDgwMEFDMjMzQkQ0NDUKLToxMDYyODAwMDNDMDEwODAwQTQyMDNCRjIwQTAwMEMzNjAwNjAyODIxRTMKLToxMDYyOTAwMDAwQUMzODI0MEEwMDBDNUMwMEVDMTgyNjNDMDEwODAwMTUKLToxMDYyQTAwMEE0MkUzQkYyMEEwMDBDQzYwMDAwMDAwMDNDMDEwODAwQ0UKLToxMDYyQjAwMEFDMjAzQkQ0MEEwMDBDNzIyNDA0MDA0MjhGODMwMDE0RUIKLToxMDYyQzAwMDNDMEI4MDAwMzU2QTBBMDAxNDYwMDAwNjAwMDAxMDIxQjMKLToxMDYyRDAwMDkxNDYwMDMwMjQwNTAwMDUzMEM0MDBGRjEwODUwMDAzRkUKLToxMDYyRTAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDkxNDkwMDQ4QTEKLToxMDYyRjAwMDMxMjgwMEZGMDAwODM5QzIxNEUwRkZGQTNDMDQ4MDA4OEUKLToxMDYzMDAwMDNDMDYwODAwOTRDNjNCREMzQzAzMDgwMDhDNjMzQkY0NkQKLToxMDYzMTAwMDNDMDUwODAwOENBNTNCRDQzQzE4MDgwMDk3MTgzQkYyQkMKLToxMDYzMjAwMDAwNjZDODIxOEM4RTAwMDQwMzI1NzgyMTAxRjg2ODIxQkQKLToxMDYzMzAwMDAxQUU2MDIzMTk4MDAwMUQwMDAwMDAwMDkxNTgwMDRDNDAKLToxMDYzNDAwMDhGOEQwMDIwOTU2RTBFMTAzMzBGMDBGRjhEQTkwMDA0NzUKLToxMDYzNTAwMDAxQ0YzMDIzOERBQTAwMDAzMENGRkZGRjAwMEY2MTAwNzYKLToxMDYzNjAwMDAxMkMyODIxMDAwMDM4MjEwMTQ3MjAyMTAwQUMxODJCRTYKLToxMDYzNzAwMDAwODNDODIxQURBNTAwMDRBREI5MDAwMDkxQjgwMDBBQTIKLToxMDYzODAwMDAxRjg3MDIxQTFBRTAwMEE5NTZDMEUxMjhGOEEwMDIwRDAKLToxMDYzOTAwMEE1NEMwMDA4OTU0OTAwMzgyNTI4MDAwMUE1NDgwMDM4N0IKLToxMDYzQTAwMDkxNDcwMDBEMzRFQjAwMDhBMTRCMDAwRDAzRTAwMDA4RkQKLToxMDYzQjAwMDAwMDAwMDAwMjdCREZGRDhBRkIwMDAxODkzOEYwMDA4ODEKLToxMDYzQzAwMDhGQjAwMDE0M0MwODdGRkY4Rjg3MDAxMDNDMEM4MDAwQ0EKLToxMDYzRDAwMDM1MThGRkZGQUZCRjAwMjBBRkIxMDAxQzM1OTkwQTAwOTAKLToxMDYzRTAwMDAyMTgxODI0OTMyQTAwM0MwMDBGNUZDMDNDMDJCRkZGMzQKLToxMDYzRjAwMDJDRjAwMDAxMzQ0OUZGRkYwMDZCRjgyNTNDMDgwODAwMzEKLToxMDY0MDAwMDhEMDgzQkY0OEY5OTAwMUMzQzE4MDgwMDk3MTgzQkVBNTQKLToxMDY0MTAwMDAzRTk1ODI0MDAxMDdGODAzQzA3RUZGRjNDMDVGMEZGQTQKLToxMDY0MjAwMDAxNkYxODI1M0MxMTgwMDAzMTQ5MDAyMDM0RTJGRkZGNDQKLToxMDY0MzAwMDM0QURGRkZGMzYyRTA5ODAyN0E1MDAxMDI0MDYwMDAyODgKLToxMDY0NDAwMDAxMTk0MDIzMjcwQTAwMDIwMDYyMTgyNDAwODA4MDIxREQKLToxMDY0NTAwMDE1MjAwMDAyMDAwMDU4MjE4RDhCMEUxQ0E3QUEwMDEyRTcKLToxMDY0NjAwMDA1MDAwMDNBMjQwNzAwMDAzMEVGMDBGRjAwMEYzRjAwNTYKLToxMDY0NzAwMDAwNjc0MDI1M0MwMjgwMDhBRkE4MDAxNDM0NEIwMDgwMjAKLToxMDY0ODAwMDkxNkEwMDY4M0MwRjA4MDA5MUVGM0JGMTNDMDlERkZGODcKLToxMDY0OTAwMDM1M0ZGRkZGMDAwQTYwMkIzQzAyMDgwMDk0NDIzQkU0QkEKLToxMDY0QTAwMEEzQUYwMDExMDExRkMwMjQwMDBDQ0Y0MDAzMTkxODI1MTEKLToxMDY0QjAwMDhGQTcwMDEwQUZBMzAwMTQzQzFGMDgwMDkzRkYzQkYzMEQKLToxMDY0QzAwMEE3QTIwMDE2OEZBODAwMTQwMEVENDgyNDNDMEIwMTAwODEKLToxMDY0RDAwMDNDMEEwRkZGMDEyQkM4MjUzM0Y4MDAwMzM1NENGRkZGQTIKLToxMDY0RTAwMDAxMEQ3ODI0M0MwMjcwMDAwMzJDMzgyNDAwMTgxRTAwOTMKLToxMDY0RjAwMDAwRTI0ODI1MDFFMzU4MjVBRkFCMDAxNEFGQTkwMDEwMTYKLToxMDY1MDAwMDkxREYwMDdDQTNCRjAwMTUwRTAwMDA3MjAwMDAwMDAwQTgKLToxMDY1MTAwMDM2MkQwQTAwOTFBNjAwM0MzMEM0MDAyMDEwODAwMDA2RjEKLToxMDY1MjAwMDI2MDIwMDA4M0MxMTA4MDA5NjMxM0JFMDI2MkVGRkZGQjIKLToxMDY1MzAwMDNDMDEwODAwQTQyRTNCRTA4RkJGMDAyMDhGQjEwMDFDNUYKLToxMDY1NDAwMDhGQjAwMDE4MDNFMDAwMDgyN0JEMDAyODhGOEEwMDE4Q0MKLToxMDY1NTAwMDAxNkE2MDJCNTU4MEZGQzQyNDA3MDAwMTBBMDAwRDUwMUEKLToxMDY1NjAwMDMwRUYwMEZGOTM4MzAwMDgzQzAyODAwMDI3QkRGRkQ4NzYKLToxMDY1NzAwMDM0NDgwQTAwMDA4MDUwMjFBRkJGMDAyMDM0NDYwQUMwRDIKLToxMDY1ODAwMDAxMDAyODIxMTA2MDAwMEUzNDQ0MDk4MDkxMDcwMDMwN0EKLToxMDY1OTAwMDI0MEIwMDA1OEY4OTAwMEMzMEVDMDAzRjExOEIwMDBCQTEKLToxMDY1QTAwMDAwMDAzODIxQUZBOTAwMTAzQzBCODAwODhENjkwMDZDRjkKLToxMDY1QjAwMEFGQUEwMDE4MEUwMDAxM0FBRkE5MDAxNEEzODAwMDA4OEEKLToxMDY1QzAwMDhGQkYwMDIwMDNFMDAwMDgyN0JEMDAyODhEMUYwMDQ4NzIKLToxMDY1RDAwMDNDMTgwODAwOEYxODNCRDQ4Rjk5MDAxNDNDMDI3RkZGQjEKLToxMDY1RTAwMDhEMDgwMDQ0MzQ0M0ZGRkZBRkE5MDAxMDNDMEI4MDA4MjYKLToxMDY1RjAwMDhENjkwMDZDMDNFMzcwMjQwMzE5NzgyMTAxQ0Y2ODIzQUYKLToxMDY2MDAwMDAxQTgzODIxQUZBQTAwMTgwRTAwMDEzQUFGQTkwMDE0NjIKLToxMDY2MTAwMDBBMDAwREE1QTM4MDAwMDgzQzA1ODAwMDM0QTYwQTAwRUUKLToxMDY2MjAwMDkwQzcwMDNDM0MwNjA4MDA5NEM2M0JGMjNDMDIwODAwQzAKLToxMDY2MzAwMDhDNDIzQkVDMzBFMzAwMjAwMDA2MjQwMDEwNjAwMDMxNjcKLToxMDY2NDAwMDAwNDQ0ODI1M0MwODgwMDgzNTA1MDA4MDkwQTMwMDY4NzgKLToxMDY2NTAwMDAwMDA2ODIxMjQwQzAwMDEwMDAwNTAyMTI0MEIwMDAxREYKLToxMDY2NjAwMDNDMTg4MDAwMzcwRjAwNzA4REU4MDAwMDNDMDc4MDAwNjgKLToxMDY2NzAwMEFGODgwMDI0OENGOTAxNzgwNzIwRkZGRTM0RTUwMDcwMTQKLToxMDY2ODAwMDhDQTIwMDAwM0MwMzA4MDA4QzYzMDA3NDNDMEYwODAwREYKLToxMDY2OTAwMDhERUYwMDcwMDA0ODIwMjMwMDY0MjgyMTAwMDBDMDIxRjUKLToxMDY2QTAwMDAwQTQzMDJCMDFGODcwMjEwMUM2NDAyMTNDMDEwODAwRjQKLToxMDY2QjAwMEFDMjUwMDc0M0MwMTA4MDBBQzI4MDA3MEFDRUMwMTQ4MkIKLToxMDY2QzAwMDNDMDIwODAwOEM0MjNCRjRBNEVBMDE0NEE0RUIwMTQ2REUKLToxMDY2RDAwMEFDRTIwMTRDM0MwNDA4MDA5MDg0M0JGMTNDMDM4MDA4OTAKLToxMDY2RTAwMEEwRTQwMTUyQUNFOTAxNTRBNEVEMDE1ODM0NkQwMDgwREUKLToxMDY2RjAwMDkxQUMwMDRDM0MwOTEwMDBBMEVDMDE2RDAzRTAwMDA4RDcKLToxMDY3MDAwMEFDRTkwMTc4OENBQzBFMUMzQzBCMDgwMDhENkIzQkQ0QzMKLToxMDY3MTAwMDk0QUEwRTE2OTRBRTBFMTQwMTY2NjgyMTMxNEJGRkZGNDkKLToxMDY3MjAwMDBBMDAwRENEMzFDQUZGRkYzQzA0ODAwMDM0ODMwQTAwMEIKLToxMDY3MzAwMDkwNjUwMDNDMzBBMjAwMjAxMDQwMDAyQjAwMDAwMDAwQkIKLToxMDY3NDAwMDAwMDA1ODIxMDAwMDUwMjEwMDAwNDgyMTNDMDg4MDAwMzIKLToxMDY3NTAwMDM1MDQwMDcwOEM4ODAwMDAzQzA3ODAwMEFGODgwMDI0NUUKLToxMDY3NjAwMDhDRUMwMTc4MDU4MEZGRkUzNEVFMDA3MDhEQ0QwMDAwQ0EKLToxMDY3NzAwMDNDMDUwODAwOENBNTAwNzQzQzA0MDgwMDhDODQwMDcwNjMKLToxMDY3ODAwMDAxQTg2MDIzMDBBQ0MwMjEwMDAwMTAyMTAzMEMzMDJCQjUKLToxMDY3OTAwMDAwODJDODIxMDMyNjc4MjEzQzAxMDgwMEFDMzgwMDc0MkYKLToxMDY3QTAwMDNDMDEwODAwQUMyRjAwNzBBQ0VCMDE0ODNDMEUwODAwMjcKLToxMDY3QjAwMDhEQ0UzQkY0MjQwREZGOTEyNDBCMDA0MEE0RTkwMTQ0NEQKLToxMDY3QzAwMEE0RUEwMTQ2QUNFRTAxNENBMEVEMDE1MkFDRUIwMTU0NDEKLToxMDY3RDAwMEE0RTAwMTU4OTBFQTAxMDkzQzA5MTAwMEEwRUEwMTZEMEIKLToxMDY3RTAwMDAzRTAwMDA4QUNFOTAxNzg4QzhCMEUxODk0ODcwRTEyMzgKLToxMDY3RjAwMDk0ODYwRTEwMzBFQUZGRkYwQTAwMEUwODMwQzlGRkZGMzIKLToxMDY4MDAwMDNDMDQ4MDAwMzQ4MzBBMDA5MDY1MDAzQzMwQTIwMDIwRTQKLToxMDY4MTAwMDEwNDAwMDM5MjdCREZGRjgyNDBDMDAwMTAwMDA1MDIxNzIKLToxMDY4MjAwMDI0MEIwMDAxM0MwODgwMDAzNTA0MDA3MDhDODkwMDAwQjYKLToxMDY4MzAwMDNDMDg4MDAwQUY4OTAwMjQ4RDBEMDE3ODA1QTBGRkZFODMKLToxMDY4NDAwMDM1MEUwMDcwOERDNzAwMDAzQzA1MDgwMDhDQTUwMDc0NTMKLToxMDY4NTAwMDNDMDQwODAwOEM4NDAwNzAwMEU5NjgyMzAwQURDMDIxNkUKLToxMDY4NjAwMDAwMDAxMDIxMDMwRDMwMkIwMDgyQzgyMTAzMjY3ODIxNUYKLToxMDY4NzAwMDNDMDEwODAwQUMzODAwNzQzQzAxMDgwMEFDMkYwMDcwRUIKLToxMDY4ODAwMDkxMDkwMTA5M0MwRTA4MDA5MUNFM0MzMTNDMDM4MEZGODgKLToxMDY4OTAwMEEzQTkwMDAzOEZBRDAwMDAzMUM3MDA3RjM0NjJGRkZGNjIKLToxMDY4QTAwMDAxQTgyMDI1QUZBNDAwMDA5MTA2MDEwQUEzQTAwMDAyQzAKLToxMDY4QjAwMDAwMDdDRTAwQTNBNjAwMDE4RkE1MDAwMDI0MEUzMDAwMjMKLToxMDY4QzAwMDNDMDkxMDAwMDBBMkMwMjQwMzE5NzgyNUFEMEYwMTRDMkIKLToxMDY4RDAwMDI3QkQwMDA4QUQwRTAxNTRBNTAwMDE1OEFEMEMwMTQ4QkMKLToxMDY4RTAwMEE1MEEwMTQ0MjQwQUZGODBBNTBCMDE0NkExMEEwMTUyMTIKLToxMDY4RjAwMDAzRTAwMDA4QUQwOTAxNzg4QzhDMEUxODk0ODcwRTEyMDUKLToxMDY5MDAwMDk0ODYwRTEwMzBFQkZGRkYwQTAwMEUzRTMwQ0FGRkZGRTgKLToxMDY5MTAwMDI3QkRGRkU4QUZCMDAwMTAzQzEwODAwMEFGQkYwMDE0RUYKLToxMDY5MjAwMDM2MTgwQTAwOTcwRjAwMzIwRTAwMEFENTMxRTQzRkZGRjcKLToxMDY5MzAwMDhFMEUwMTAwMjQwREZGODAzQzA0MjAwMDAxQzI1ODIxNkUKLToxMDY5NDAwMDAxNkQ2MDI0MDAwQzQ5NDAzMTZBMDA3RjAxMkE0MDI1MTYKLToxMDY5NTAwMDAxMDQzODI1M0MwNDgwMDhBRTA3MDgzMDM0ODYwMDgwRTYKLToxMDY5NjAwMDkwQzUwMDY4MjQwMzAwMDIzMEEyMDBGRjEwNDMwMDA0MTkKLToxMDY5NzAwMDhGOUYwMDBDOEY5OTAwMTBBQzlGMDA2OEFDOTkwMDY0NDkKLToxMDY5ODAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4NkYKLToxMDY5OTAwMDNDMEEwODAwMjU0QTM3RkMzQzA5MDgwMDI1MjkzOEQ0NjAKLToxMDY5QTAwMDNDMDgwODAwMjUwODJDNzQzQzA3MDgwMDI0RTczOUU0NUIKLToxMDY5QjAwMDNDMDYwODAwMjRDNjM2MzgzQzA1MDgwMDI0QTUzMzkwNjAKLToxMDY5QzAwMDNDMDQwODAwMjQ4NDJGQTAzQzAzMDgwMDI0NjMzNkVDMTgKLToxMDY5RDAwMDNDMDIwODAwMjQ0MjM0ODgzQzAxMDgwMEFDMkEzREZDRkIKLToxMDY5RTAwMDNDMDEwODAwQUMyOTNERjgzQzAxMDgwMEFDMjgzREY0MEUKLToxMDY5RjAwMDNDMDEwODAwQUMyNzNFMDAzQzAxMDgwMEFDMjYzRTEwREMKLToxMDZBMDAwMDNDMDEwODAwQUMyNTNFMDgzQzAxMDgwMEFDMjQzRTA0RDMKLToxMDZBMTAwMDNDMDEwODAwQUMyMzNFMTQzQzAxMDgwMEFDMjIzRTBDQjMKLTowODZBMjAwMDAzRTAwMDA4MDAwMDAwMDA4MwotOjA4NkEyODAwODAwMDA5NDA4MDAwMDkwMDE0Ci06MTA2QTMwMDA4MDA4MDEwMDgwMDgwMDgwODAwODAwMDA4MDBFMDAwMEFGCi06MTA2QTQwMDA4MDA4MDA4MDgwMDgwMDAwODAwMDBBODA4MDAwMEEwMDIyCi06MDg2QTUwMDA4MDAwMDk4MDgwMDAwOTAwQUMKLTowMDAwMDAwMUZGCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCi0gKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQotICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcwotICogYWNjb21wYW55aW5nIGl0LgotICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wOS01LjAuMC5qMy5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajMuZncuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmUyMjA0Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajMuZncuaWhleApAQCAtMCwwICsxLDYwNTEgQEAKKzoxMDAwMDAwMDA4MDAwMTEwMDgwMDAwMDAwMDAwNTFDNDAwMDAwMEM4RjIKKzoxMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA1MUM0QzMKKzoxMDAwMjAwMDAwMDAwMDM4MDAwMDUyOEMwODAwMDA4ODA4MDAwMDAwMjIKKzoxMDAwMzAwMDAwMDA1MUI0MDAwMDUyQzQwODAwNTNBMDAwMDAwMDg0MjYKKzoxMDAwNDAwMDAwMDBBNDc4MDgwMDUxQjQwMDAwMDFDMDAwMDBBNEZDMjYKKzoxMDAwNTAwMDA4MDAzMUQ4MDgwMDAwMDAwMDAwODBFNDAwMDBBNkJDQzEKKzoxMDAwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA4MEU0MjQKKzoxMDAwNzAwMDAwMDAwMTI0MDAwMTI3QTAwODAwMDQ4ODA4MDAwNDAwRjMKKzoxMDAwODAwMDAwMDAxN0VDMDAwMTI4QzQwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDAwOTAwMDAwMDAwMDAwMDgwMDFCRUMwMDAwMDAwNDAwMDE0MEIwNUMKKzoxMDAwQTAwMDA4MDAwMEE4MDgwMDAwMDAwMDAwMzgxNDAwMDE0MEI0NTcKKzoxMDAwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAzODE0RUMKKzowODAwQzAwMDAwMDAwMDMwMDAwMTc4QzhDNworOjA4MDBDODAwMEEwMDAwNDQwMDAwMDAwMEUyCis6MTAwMEQwMDAwMDAwMDAwMDAwMDAwMDBENjM2RjZEMzUyRTMwMkUzMEUzCis6MTAwMEUwMDA2QTMzMDAwMDA1MDAwMDAyMDAwMDAwMDAwMDAwMDAwMzY5Cis6MTAwMEYwMDAwMDAwMDAxNDAwMDAwMDMyMDAwMDAwMDMwMDAwMDAwMEI3Cis6MTAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAwMTEwMDAwMDAwMDAxMDAwMDAwMTM2MDAwMEVBNjAwMDAwMDAwNTQ5Cis6MTAwMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEM3Cis6MTAwMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTAwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAwMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTAwMTYwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAwMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAwMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDVGCis6MTAwMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTAwMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTAwMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTAwMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTAwMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMzBDCis6MTAwMUUwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMEQzQzAyMDgwMEFGCis6MTAwMUYwMDAyNDQyNTIyMDNDMDMwODAwMjQ2MzUzNTRBQzQwMDAwMEM2Cis6MTAwMjAwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDQzQzFEMDgwMDA1Cis6MTAwMjEwMDAzN0JEOUZGQzAzQTBGMDIxM0MxMDA4MDAyNjEwMDExMDAwCis6MTAwMjIwMDAzQzFDMDgwMDI3OUM1MjIwMEUwMDAyNUYwMDAwMDAwMENBCis6MTAwMjMwMDAwMDAwMDAwRDI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNEY0Cis6MTAwMjQwMDBBRkIwMDAxMDNDMDQ4MDAwOTQ4MjAxMDgzMDQzNzAwMDdECis6MTAwMjUwMDAyNDAyMjAwMDEwNjIwMDBCMjg2MjIwMDExNDQwMDAzNkE2Cis6MTAwMjYwMDAwMDAwMTAyMTI0MDI0MDAwMTA2MjAwMkMwMDAwMDAwMDU5Cis6MTAwMjcwMDAyNDAyNjAwMDEwNjIwMDJEMDAwMDEwMjEwQTAwMDA5RDgxCis6MTAwMjgwMDA4RkJGMDAxODM0OTEwMTAwOTIyNDAwMDk4RTMwMDAxOEFECis6MTAwMjkwMDAxMDgwMDAyMDI0MDMwMDAxMjQwMjAwMDkxNDgyMDAwNkJCCis6MTAwMkEwMDA4RjgyMDAxQzNDMDI4MDA4OTQ0MjAwMUEwMDAyMTQwMDU1Cis6MTAwMkIwMDAwMjAyODAyNThGODIwMDFDOEM0MjAwMEMxMDQwMDAxNTI5Cis6MTAwMkMwMDAwMDAwMTgyMTBFMDAwRDQ1MDAwMDAwMDA4RjgzMDAxQzY3Cis6MTAwMkQwMDA5NjI0MDAwODhGODIwMDE4OTQ2MzAwMUU5NjI1MDAwQzU3Cis6MTAwMkUwMDAwMDA0MjQwMDAwODMyMDI1QUM1MDAwMDBBQzQ1MDAwNDJECis6MTAwMkYwMDBBQzQwMDAwOEFDNDAwMDBDQUM0MDAwMTBBQzQwMDAxNDE2Cis6MTAwMzAwMDBBQzQwMDAxOEFDNDQwMDFDMEUwMDBENzkyNDA0MDAwMTIwCis6MTAwMzEwMDAwMDAwMTgyMTBBMDAwMDlDMDA2MDEwMjEwRTAwMDQyRTJECis6MTAwMzIwMDAwMDAwMDAwMDBBMDAwMDlDMDAwMDEwMjEwRTAwMEM2NTc3Cis6MTAwMzMwMDAwMDAwMDAwMDAwMDAxMDIxOEZCRjAwMTg4RkIxMDAxNEQyCis6MTAwMzQwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA4RjgyMDAxQzQyCis6MTAwMzUwMDAyN0JERkZFMEFGQjAwMDEwQUZCRjAwMThBRkIxMDAxNDcxCis6MTAwMzYwMDA4QzQyMDAwQzNDMTA4MDAwOEUxMTAxMDAxMDQwMDAzNEMzCis6MTAwMzcwMDA4RkJGMDAxODBFMDAwRDQ1MDAwMDAwMDA4Rjg1MDAxODhCCis6MTAwMzgwMDAyNDA0N0ZGRjAwOTEyMDJCQUNCMTAwMDA4RTAzMDEwNEY4Cis6MTAwMzkwMDA5NjAyMDEwODAwMDMxQzAwMzA0MkZGRkYwMDYyMTgyNThFCis6MTAwM0EwMDBBQ0EzMDAwNDkyMDIwMTBBOTYwMzAxMTQzMDQyMDBGRjNDCis6MTAwM0IwMDAzMDYzRkZGRjAwMDIxNDAwMDA0MzEwMjVBQ0EyMDAwOEM4Cis6MTAwM0MwMDA5NjAzMDEwQzk2MDIwMTBFMDAwMzFDMDAzMDQyRkZGRjUxCis6MTAwM0QwMDAwMDYyMTgyNUFDQTMwMDBDOTYwMzAxMTA5NjAyMDExMkNFCis6MTAwM0UwMDAwMDAzMUMwMDMwNDJGRkZGMDA2MjE4MjVBQ0EzMDAxMDgwCis6MTAwM0YwMDA4RTAyMDExOEFDQTIwMDE0OEUwMjAxMUNBQ0EyMDAxOERGCis6MTAwNDAwMDAxNDgwMDAwODhGODIwMDFDOTc4MjAwMDAzQzA0MjAwNUE1Cis6MTAwNDEwMDAwMDQ0MTgyNTI0NDIwMDAxQUNBMzAwMUMwQTAwMDBEQkE0Cis6MTAwNDIwMDBBNzgyMDAwMDNDMDM0MDE4OTQ0MjAwMUUwMDQzMTAyNUEwCis6MTAwNDMwMDBBQ0EyMDAxQzBFMDAwRDc5MjQwNDAwMDE4RkJGMDAxODJGCis6MTAwNDQwMDA4RkIxMDAxNDhGQjAwMDEwMDAwMDEwMjEwM0UwMDAwOEVECis6MTAwNDUwMDAyN0JEMDAyMDNDMDY4MDAwOENDMjAyQjgyNDAzMDAwMUE2Cis6MTAwNDYwMDAwNDQxMDAwODAwODAyODIxM0MwMjA4MDA4QzQyMDA2MDAyCis6MTAwNDcwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjAwM0UwMDAwOEI3Cis6MTAwNDgwMDAwMDYwMTAyMThDODMwMDIwOTQ4MjAwMTZBQ0MzMDI4MDhGCis6MTAwNDkwMDAyNDQyRkZGQ0E0QzIwMjg0M0MwMjA4MDA4QzQyMDA1QzlGCis6MTAwNEEwMDA4Qzg0MDAwNDk0QTMwMDBFMjQ0MjAwMDEzQzAxMDgwMDQ3Cis6MTAwNEIwMDBBQzIyMDA1QzNDMDIxMDAwQTRDMzAyODZBQ0M0MDI4OERCCis6MTAwNEMwMDAwMDAwMTgyMUFDQzIwMkI4MDNFMDAwMDgwMDYwMTAyMTRGCis6MTAwNEQwMDAyN0JERkZFMEFGQjAwMDEwM0MxMDgwMDBBRkIyMDAxOEE1Cis6MTAwNEUwMDBBRkJGMDAxQ0FGQjEwMDE0MzYxMjAxMDA5MjQzMDAwQkU1Cis6MTAwNEYwMDAyNDAyMDAxQTk2NTEwMDA4MTQ2MjAwNUEwMDAwMjgyMUI0Cis6MTAwNTAwMDAzMjIyMDAwMTEwNDAwMDE4OEY4MjAwMUM4RTQyMDAwMDMxCis6MTAwNTEwMDAwMDAyMjM0MDNDMDIwMDNGMzQ0MkZGRkYwMDQ0MTAyQjA2Cis6MTAwNTIwMDAxMDQwMDAwNDNDMDMwMDQwOTY0MjAwMTQwQTAwMDEyNERECis6MTAwNTMwMDAwMDgzMjAyMThFMDMwMTAwMjQwMjAxMDA1NDYyMDAwNjgyCis6MTAwNTQwMDA5NjQyMDAxNDNDMDI4MDA4OTA0MjAwMDQzMDQyMDAwRkEyCis6MTAwNTUwMDAwMDAyMjUwMDk2NDIwMDE0MDA4MjEwMjVBRTAyMDA4MEExCis6MTAwNTYwMDAwQTAwMDE1NzAwMDAwMDAwOEM0MjAwMEMxMDQwMDAyOEQ3Cis6MTAwNTcwMDAwMDAwMDAwMDBFMDAwRDQ1MDAwMDAwMDA5NjAyMDEwODdBCis6MTAwNTgwMDA5NjAzMDEwQzhGODUwMDE4MzA0MjAwM0UzMDYzRkZGRjU4Cis6MTAwNTkwMDAwMDAyMTQwMDAwNDMxMDI1QUNBMjAwMDA4RTAyMDEwMEVFCis6MTAwNUEwMDBBQ0EyMDAwNDk2MDMwMTE2OTYwNDAxMEU4RjgyMDAxQzczCis6MTAwNUIwMDAwMDAzMUMwMDMwODRGRkZGMDA2NDE4MjVBQ0EzMDAwODcyCis6MTAwNUMwMDA5NjAzMDExMDk2MDQwMTEyOTQ0NjAwMUUwMDAzMUMwMEJECis6MTAwNUQwMDAzMDg0RkZGRjAwNjQxODI1QUNBMzAwMEMzQzAyMjAwMDBGCis6MTAwNUUwMDAwMEMyMzAyNTk2MDIwMTE0MjQwNDAwMDEzMDQyRkZGRkFFCis6MTAwNUYwMDBBQ0EyMDAxMDhFMDIwMTE4QUNBMjAwMTQ5MjAyMDEwQkYyCis6MTAwNjAwMDAzMDQyMDBGRkFDQTIwMDE4MEUwMDBENzlBQ0E2MDAxQzExCis6MTAwNjEwMDAzQzAyMDgwMDhDNDIwMDQwMjQ0MjAwMDEzQzAxMDgwMERBCis6MTAwNjIwMDBBQzIyMDA0MDNDMDMwODAwOEM2MzAwNDQzMjIyMDAwMkVDCis6MTAwNjMwMDAzMjI0MDAwNDI0NjMwMDAxM0MwMTA4MDBBQzIzMDA0NDgwCis6MTAwNjQwMDAxMDgwMDAwODAwMDIyODJCMDI0MDIwMjE4RkJGMDAxQ0QwCis6MTAwNjUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMDBFM0IxCis6MTAwNjYwMDAyN0JEMDAyMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDZGCis6MTAwNjcwMDA4RkIwMDAxMDAwQTAxMDIxMDNFMDAwMDgyN0JEMDAyMDZCCis6MTAwNjgwMDAyN0JERkZFMEFGQjAwMDEwM0MxMDgwMDBBRkIyMDAxOEYzCis6MTAwNjkwMDBBRkJGMDAxQ0FGQjEwMDE0MzYxMjAxMDA5MjQzMDAwQjMzCis6MTAwNkEwMDAyNDAyMDAwMzE0NjIwMDZBOTY1MTAwMDgzMjIyMDAwMUZECis6MTAwNkIwMDAxMDQwMDAxNzhGODIwMDFDOEU0MzAwMDAzQzAyMDAzRjU4Cis6MTAwNkMwMDAzNDQyRkZGRjAwMDMyMzQwMDA0NDEwMkI1MDQwMDAwNTNDCis6MTAwNkQwMDAyNDAyMDEwMDk2NDIwMDE0M0MwMzAwNDAwQTAwMDE4RUVGCis6MTAwNkUwMDAwMDgzMjAyMTU0NjIwMDA2OTY0MjAwMTQzQzAyODAwOEQ4Cis6MTAwNkYwMDA5MDQyMDAwNDMwNDIwMDBGMDAwMjI1MDA5NjQyMDAxNDkwCis6MTAwNzAwMDAwMDgyMTAyNUFFMDIwMDgwMEEwMDAxQkUwMDAwMDAwMDM5Cis6MTAwNzEwMDA4QzQyMDAwQzEwNDAwMDI1MDAwMDAwMDAwRTAwMEQ0NTJBCis6MTAwNzIwMDAwMDAwMDAwMDk2MDIwMTA4OTYwMzAxMEM4Rjg1MDAxODU2Cis6MTAwNzMwMDAzMDQyMDAzRTMwNjNGRkZGMDAwMjE0MDAwMDQzMTAyNUVBCis6MTAwNzQwMDBBQ0EyMDAwMDhFMDIwMTAwQUNBMjAwMDQ5NjAzMDExNkM4Cis6MTAwNzUwMDA5NjA0MDEwRThGODIwMDFDMDAwMzFDMDAzMDg0RkZGRkYyCis6MTAwNzYwMDAwMDY0MTgyNUFDQTMwMDA4OTYwMzAxMTA5NjA0MDExMjNBCis6MTAwNzcwMDA5NDQ2MDAxRTAwMDMxQzAwMzA4NEZGRkYwMDY0MTgyNTBGCis6MTAwNzgwMDBBQ0EzMDAwQzNDMDIyMDAwMDBDMjMwMjU5NjAyMDExNEVDCis6MTAwNzkwMDAyNDA0MDAwMTMwNDJGRkZGQUNBMjAwMTBBQ0EwMDAxNDAyCis6MTAwN0EwMDBBQ0EwMDAxODBFMDAwRDc5QUNBNjAwMUMzQzAyMDgwMDlECis6MTAwN0IwMDA4QzQyMDA0MDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA0MDcxCis6MTAwN0MwMDAzQzAyMDgwMDhDNDIwMDQ0MzIyMzAwMDQyNDQyMDAwMTExCis6MTAwN0QwMDAzQzAxMDgwMEFDMjIwMDQ0MTA2MDAwMDgzMjIyMDAwMkY0Cis6MTAwN0UwMDAwMjQwMjAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDZGCis6MTAwN0YwMDA4RkIwMDAxMDBBMDAwMEUzMjdCRDAwMjAxMDQwMDAxNTU0Cis6MTAwODAwMDA4RkJGMDAxQzNDMDQ4MDAwOEM4MzAxMDQzQzAyNjAyMEVDCis6MTAwODEwMDBBQzQzMDAxNDhDNDIwMDA0MjQwMzAxRkUzMDQyMDNGRjY5Cis6MTAwODIwMDAxNDQzMDAwQzhGQkYwMDFDOEM4MjAxMDAwMDAyMTlDMjBGCis6MTAwODMwMDAyNDYyRkZGQzJDNDIwMDA4MTA0MDAwMDMyNDA0MDAwMjQ0Cis6MTAwODQwMDAyNDYyRkZGRDAwNDQyMDA0M0MwMjYwMDBBQzQ0NjkxNEIzCis6MTAwODUwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDMyCis6MTAwODYwMDAwMDAwMTAyMTAzRTAwMDA4MjdCRDAwMjAzQzA0ODAwMEE4Cis6MTAwODcwMDA4QzgzMDEwMDI0MDIwMTAwNTA2MjAwMDMzQzAyODAwOEM2Cis6MTAwODgwMDAwMDAwMDAwRDNDMDI4MDA4OTA0MzAwMDQwMDAwMTAyMThECis6MTAwODkwMDAzMDYzMDAwRjAwMDMxRDAwMDNFMDAwMDhBQzgzMDA4MEZDCis6MTAwOEEwMDAyQzg0MDc4MTEwODAwMDBBMDAwMDI4MjEzQzAyODAwMDZGCis6MTAwOEIwMDA5NDQyMDEwODI0MDMyMDAwMzA0MjcwMDAxNDQzMDAwNUQ0Cis6MTAwOEMwMDAyNzgzRkZCMDNDMDI4MDA4OTA0MjAwMDUzMDQ1MDBGRkJFCis6MTAwOEQwMDAyNzgzRkZCMDAwMDUyMDgwMDA4MzIwMjEwMDA1MTBDMDgxCis6MTAwOEUwMDAwMDQ1MTAyMzhDODQwMDAwM0MwMzA4MDAyNDYzNTJFNDdDCis6MTAwOEYwMDAwMDAyMTBDMDAwNDMxMDIxM0MwMzgwMDBBQzY0MDA5MDUzCis6MTAwOTAwMDAwM0UwMDAwOEFGODIwMDFDMDNFMDAwMDgwMDAwMTAyMTkzCis6MTAwOTEwMDAwM0UwMDAwODAwMDAxMDIxMjQwMjAxMDAxNDgyMDAwOEY2Cis6MTAwOTIwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwRkMyNDQyMDAwMTUwCis6MTAwOTMwMDAzQzAxMDgwMEFDMjIwMEZDMEEwMDAyMjQzMEEyMDAyMDg2Cis6MTAwOTQwMDAzQzAyMDgwMDhDNDIwMDg0MjQ0MjAwMDEzQzAxMDgwMDYzCis6MTAwOTUwMDBBQzIyMDA4NDMwQTIwMDIwMTA0MDAwMDgzMEEzMDAxMDE4Cis6MTAwOTYwMDAzQzAyMDgwMDhDNDIwMTA4MjQ0MjAwMDEzQzAxMDgwMEJFCis6MTAwOTcwMDBBQzIyMDEwODAzRTAwMDA4MDAwMDAwMDAxMDYwMDAwODNECis6MTAwOTgwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAxMDQyNDQyMDAwMUU3Cis6MTAwOTkwMDAzQzAxMDgwMEFDMjIwMTA0MDNFMDAwMDgwMDAwMDAwMDU0Cis6MTAwOUEwMDAzQzAyMDgwMDhDNDIwMTAwMjQ0MjAwMDEzQzAxMDgwMDg2Cis6MTAwOUIwMDBBQzIyMDEwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFOEIyCis6MTAwOUMwMDBBRkIwMDAxMDNDMTA4MDAwQUZCRjAwMTQzNjA0MDEwMDJGCis6MTAwOUQwMDA5NDgzMDAwODMwNjIwMDA0MTA0MDAwMDUzMDY2MDAwMjc1Cis6MTAwOUUwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDAwRTMyN0JEMDAxODZECis6MTAwOUYwMDAxMEMwMDAwNjAwNjAyODIxOEUwNDAxMDAwRTAwMDIxNEMxCis6MTAwQTAwMDAwMDAwMDAwMDBBMDAwMjVCMjQwMjAwMDE4RjgyMDAwODNGCis6MTAwQTEwMDA4RTAzMDEwNDEwNDMwMDA3MDAwMDEwMjE4RTA0MDEwMDIyCis6MTAwQTIwMDAwRTAwMDIxNDAwMDAwMDAwOEUwMjAxMDRBRjgyMDAwOEQ0Cis6MTAwQTMwMDAwMDAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEU5Cis6MTAwQTQwMDAyN0JEMDAxODI3QkRGRkQ4M0MwMzYwMTBBRkIzMDAxQ0MyCis6MTAwQTUwMDBBRkJGMDAyMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFDCis6MTAwQTYwMDA4QzY0NTAwMDI0MDJGRjdGM0MxMzA4MDAyNjczNTI0ODE4Cis6MTAwQTcwMDAwMDgyMjAyNDM0ODQzODBDQUM2NDUwMDAzQzAyODAwMDk2Cis6MTAwQTgwMDAyNDAzMDAzN0FDNDMwMDA4M0MwNjA4MDAyNEM2MDg0MDk1Cis6MTAwQTkwMDAwMjYwMTAyMTI0MDQwMDFDMjQ4NEZGRkZBQzQ2MDAwMEU3Cis6MTAwQUEwMDAwNDgxRkZGRDI0NDIwMDA0M0MwMjA4MDAyNDQyMDE2QzQyCis6MTAwQUIwMDAzQzAxMDgwMEFDMjI1MjUwM0MwMjA4MDAyNDQyMDVCODE4Cis6MTAwQUMwMDAzQzAxMDgwMEFDMjI1MjU0M0MwMjA4MDAyNDQyMDI4NDNCCis6MTAwQUQwMDAzQzAxMDgwMEFDMjI1MjkwM0MwMjA4MDAyNDQyMDQwODY5Cis6MTAwQUUwMDAzQzAzMDgwMDI0NjMwODQ4M0MwNDA4MDAyNDg0MDhGNEZDCis6MTAwQUYwMDAzQzA1MDgwMDI0QTUyQzRDM0MwMTA4MDBBQzIyNTJCMDU3Cis6MTAwQjAwMDAzQzAyMDgwMDI0NDIwN0E0M0MwMTA4MDBBQzI2NTI5ODhECis6MTAwQjEwMDAzQzAxMDgwMEFDMjU1MkE0M0MwMTA4MDBBQzIzNTJBQ0I3Cis6MTAwQjIwMDAzQzAxMDgwMEFDMjQ1MkI0M0MwMTA4MDBBQzIyNTJCODhECis6MTAwQjMwMDAzQzAxMDgwMEFDMjM1MjRDM0MwMTA4MDBBQzIwNTI1ODQ4Cis6MTAwQjQwMDAzQzAxMDgwMEFDMjA1MjVDM0MwMTA4MDBBQzIwNTI2MDIzCis6MTAwQjUwMDAzQzAxMDgwMEFDMjA1MjY0M0MwMTA4MDBBQzIwNTI2ODAzCis6MTAwQjYwMDAzQzAxMDgwMEFDMjA1MjZDM0MwMTA4MDBBQzIwNTI3MEUzCis6MTAwQjcwMDAzQzAxMDgwMEFDMjQ1Mjc0M0MwMTA4MDBBQzIwNTI3OEJGCis6MTAwQjgwMDAzQzAxMDgwMEFDMjA1MjdDM0MwMTA4MDBBQzIwNTI4MEEzCis6MTAwQjkwMDAzQzAxMDgwMEFDMjA1Mjg0M0MwMTA4MDBBQzIwNTI4ODgzCis6MTAwQkEwMDAzQzAxMDgwMEFDMjY1MjhDM0MwMTA4MDBBQzI2NTI5NDUzCis6MTAwQkIwMDAzQzAxMDgwMEFDMjA1MjlDM0MwMTA4MDBBQzI1NTJBMDJFCis6MTAwQkMwMDAzQzAxMDgwMEFDMjM1MkE4MEUwMDA1NUEwMDAwMDAwMEFBCis6MTAwQkQwMDA4RjgzMDAwNDNDMDIwODAwOEM0MjAwMjAxMDYyMDAxRjNBCis6MTAwQkUwMDAwMDAwODgyMTI3OTJGRkIwM0MxMDA4MDAyNjEwNTJFNDM0Cis6MTAwQkYwMDAzQzAyMDgwMDhDNDIwMDIwMjQwNTAwMDEwMjI1MTgwNDU0Cis6MTAwQzAwMDAwMDQzMjAyNDhGODIwMDA0MDA0MzEwMjQ1MDQ0MDAwQzMxCis6MTAwQzEwMDAyNjMxMDAwMTEwODAwMDA4QUY5MDAwMUM4RTQzMDAwMEI4Cis6MTAwQzIwMDAzQzAyODAwMEFDNDMwMDkwMEUwMDBEMENBRTA1MDAwQ0ExCis6MTAwQzMwMDAwQTAwMDJERTI2MzEwMDAxQUUwMDAwMEMyNjMxMDAwMTYwCis6MTAwQzQwMDAyRTIyMDAwMjI2MTAwMDM4MTQ0MEZGRTkyNjUyMDAwNDJDCis6MTAwQzUwMDAzQzAyMDgwMDhDNDIwMDIwQUY4MjAwMDQzQzEwODAwMDVGCis6MTAwQzYwMDA4RTExMDAwMDMyMjIwMDA3MTA0MEZGREE4RjgzMDAwNDRCCis6MTAwQzcwMDAzMjIyMDAwMTEwNDAwMDIxMzIyMjAwMDI4RTAyMDEwMEM3Cis6MTAwQzgwMDBBRTAyMDAyMDhFMDIwMTA0QUUwMjAwQTgwRTAwMDFGNkEyCis6MTAwQzkwMDA4RTA0MDEwMDkyMDIwMTBCMzA0MzAwRkYyQzYyMDAxRDA0Cis6MTAwQ0EwMDA1NDQwMDAwNDAwMDMxMDgwMEUwMDAyMTAwQTAwMDJGRkVFCis6MTAwQ0IwMDAwMDAwMDAwMDAwNTMxMDIxOEM0MjAwMDAwMDQwRjgwOUExCis6MTAwQ0MwMDAwMDAwMDAwMDEwNDAwMDA0M0MwMjgwMDA4QzQzMDEwNDNFCis6MTAwQ0QwMDAzQzAyNjAyMEFDNDMwMDE0M0MwMjA4MDA4QzQyMDAzNDBCCis6MTAwQ0UwMDAzQzA0NDAwMDNDMDM4MDAwMjQ0MjAwMDFBQzY0MDEzODE1Cis6MTAwQ0YwMDAzQzAxMDgwMEFDMjIwMDM0MzIyMjAwMDIxMDQwMDAxMEY3Cis6MTAwRDAwMDAzMjIyMDAwNDNDMTA4MDAwOEUwMjAxNDBBRTAyMDAyMDFFCis6MTAwRDEwMDAwRTAwMDFGNjhFMDQwMTQwMEUwMDAzOTcwMDAwMDAwMDUzCis6MTAwRDIwMDAzQzAyNDAwMEFFMDIwMTc4M0MwMjA4MDA4QzQyMDAzOEQwCis6MTAwRDMwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwMzgzMjIyMDAwNEE5Cis6MTAwRDQwMDAxMDQwRkZBNDhGODMwMDA0M0MxMDgwMDA4RTAyMDE4MEJECis6MTAwRDUwMDBBRTAyMDAyMDBFMDAwMUY2OEUwNDAxODA4RTAzMDE4MDk5Cis6MTAwRDYwMDAyNDAyMEYwMDE0NjIwMDA3M0MwMjgwMDg4RTAyMDE4OEYyCis6MTAwRDcwMDAzQzAzMDBFMDMwNDJGRkZGMDA0MzEwMjUwQTAwMDMzQjI0Cis6MTAwRDgwMDBBRTAyMDA4MDM0NDIwMDgwOTA0MjAwMDAyNDAzMDA1MEY0Cis6MTAwRDkwMDAzMDQyMDBGRjE0NDMwMDA3MDAwMDAwMDAwRTAwMDM3NEZGCis6MTAwREEwMDAwMDAwMDAwMDE0NDAwMDAzMDAwMDAwMDAwRTAwMDk1RDc4Cis6MTAwREIwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwM0MzQzA0NDAwMDYzCis6MTAwREMwMDAzQzAzODAwMDI0NDIwMDAxQUM2NDAxQjgzQzAxMDgwMEVGCis6MTAwREQwMDBBQzIyMDAzQzBBMDAwMkMzOEY4MzAwMDQzQzAyOTAwMDU2Cis6MTAwREUwMDAzNDQyMDAwMTAwODIyMDI1M0MwMjgwMDBBQzQ0MDAyMEY3Cis6MTAwREYwMDAzQzAzODAwMDhDNjIwMDIwMDQ0MEZGRkUwMDAwMDAwMEU1Cis6MTAwRTAwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDAzNDQzMDAwMUMxCis6MTAwRTEwMDAwMDgzMjAyNTAzRTAwMDA4QUM0NDAwMjAyN0JERkZFMDRDCis6MTAwRTIwMDBBRkIxMDAxNEFGQjAwMDEwMDA4MDg4MjFBRkJGMDAxODMwCis6MTAwRTMwMDAwRTAwMDM0NTMwQjAwMEZGOEY4M0ZGQTgwMjIwMjAyMTYxCis6MTAwRTQwMDA5MDYyMDAyNTAyMDI4MDI1QTA3MDAwMjU4QzcwMDAxODk5Cis6MTAwRTUwMDAzQzAyODAwMDBFMDAwMzUwMDIwMjgwMjQxNjAwMDAwQUFCCis6MTAwRTYwMDA4RkJGMDAxODNDMDM4MDAwOEM2MjAxRjgwNDQwRkZGRTM1Cis6MTAwRTcwMDAyNDAyMDAwMkFDNzEwMUMwQTA2MjAxQzQzQzAyMTAwMDU3Cis6MTAwRTgwMDBBQzYyMDFGODhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDUyCis6MTAwRTkwMDAwM0UwMDAwODI3QkQwMDIwMjdCREZGRThBRkJGMDAxMDFBCis6MTAwRUEwMDAzQzAzODAwMDk0NjIwMTg0MzA0MjAyMDAxMDQwMDAwNTNGCis6MTAwRUIwMDAwMDAwMjAyMTBFMDAwRkNEMDAwMDAwMDAwQTAwMDM4QTcwCis6MTAwRUMwMDAyNDA0MDAwMThDNjIwMTg4MDQ0MDAwMEE4RkJGMDAxMEQ2Cis6MTAwRUQwMDA4QzYyMDE4ODNDMDNGRjAwMDA0MzEwMjQzQzAzMDQwMEEzCis6MTAwRUUwMDAxNDQzMDAwNDI0MDQwMDAxOEY4MkZGQTg5MDQyMDAwOEVDCis6MTAwRUYwMDA4RkJGMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAxOEZDCis6MTAwRjAwMDA4RjgyRkZBQzI0MDMwMDAxMjQwNTAwMDFBMDQwMDAxQUQ5Cis6MTAwRjEwMDA4RjgyRkZBOEE0NDMwMDE2M0MwMjgwMDAwQTAwMDM1NUZDCis6MTAwRjIwMDA4QzQ0MDE0MDhGODVGRkE4MjdCREZGRTBBRkJGMDAxQ0E4Cis6MTAwRjMwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA5MEEyMDAwMDIzCis6MTAwRjQwMDAzMDQ0MDBGRjM4ODMwMDIwMzg4MjAwMzAwMDAzMTgyQjIzCis6MTAwRjUwMDAwMDAyMTAyQjAwNjIxODI0MTA2MDAwMDUzQzAyODAwMDgzCis6MTAwRjYwMDAyNDAyMDA1MDE0ODIwMDgxOEZCRjAwMUMzQzAyODAwMENDCis6MTAwRjcwMDA5MDQyMDE0ODMwNDIwMEZGMjQ0M0ZGRkYyQzYyMDAwNUVECis6MTAwRjgwMDAxMDQwMDA3QThGQkYwMDFDMDAwMzEwODAzQzAzMDgwMDUzCis6MTAwRjkwMDAyNDYzNTFEQzAwNDMxMDIxOEM0MjAwMDAwMDQwMDAwODEzCis6MTAwRkEwMDAwMDAwMDAwMDNDMTE4MDAwOEUyNDAxNDAwRTAwMDM0NTJCCis6MTAwRkIwMDA4RjkyRkZBODhFNTAwMDBDOEUyMjAxNDQxNjAyMDAwMjcwCis6MTAwRkMwMDAyNDAyMDAwMUFFNDIwMDBDMEUwMDAzNTA4RTI0MDE0MEFBCis6MTAwRkQwMDA4RTIyMDE0NDE0NTAwMDA2OEZCRjAwMUM4RkIyMDAxOEVGCis6MTAwRkUwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBGMzkyN0JEMDAyMDA4Cis6MTAwRkYwMDA4RTQyMDAwQzBBMDAwNDIyMDAwMDAwMDA5NEEyMDAxMDlGCis6MTAxMDAwMDAzQzA0ODAwMDhDODMwMTQ0MzA0MkZGRkYxNDYyMDAwOURECis6MTAxMDEwMDAwMDAwMDAwMDI0MDIwMDAxQTRBMjAwMTA4QzgyMDE0MDA0Cis6MTAxMDIwMDBBQzgyMDIwMDNDMDIxMDAwQUM4MjAyMzgwQTAwMDQyOUEzCis6MTAxMDMwMDA4RkJGMDAxQzk0QTIwMDEwMEEwMDA0MjIwMDAwMDAwMEQwCis6MTAxMDQwMDAyNDAyMDAyMDE0ODIwMDBFM0MxMTgwMDA5NEEyMDAxMkExCis6MTAxMDUwMDAzQzAzODAwMDhDNjMwMTQ0MzA0MkZGRkYxNDYyMDAwNUIyCis6MTAxMDYwMDAwMDAwMDAwMDI0MDIwMDAxQTRBMjAwMTIwQTAwMDNGQ0Y4Cis6MTAxMDcwMDA4RkJGMDAxQzk0QTIwMDEyMEEwMDA0MjIwMDAwMDAwMDhFCis6MTAxMDgwMDA4RTI0MDE0MDBFMDAwMzQ1OEY5MkZGQTg5NjQyMDAxMjY1Cis6MTAxMDkwMDA4RTIzMDE0NDMwNTBGRkZGMTYwMzAwMDIyNDAyMDAwMTlBCis6MTAxMEEwMDBBNjQyMDAxMjBFMDAwMzUwOEUyNDAxNDA4RTIyMDE0NEZECis6MTAxMEIwMDAxNjAyMDAwNjhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEZCCis6MTAxMEMwMDA4RkIwMDAxMDBBMDAwMzhFMjdCRDAwMjA5NjQyMDAxMjQ4Cis6MTAxMEQwMDAwQTAwMDQyMjAwMDAwMDAwOTRBMjAwMTQzQzAzODAwMEQ3Cis6MTAxMEUwMDA4QzYzMDE0NDMwNDJGRkZGMTQ2MjAwMDg4RkJGMDAxQzc0Cis6MTAxMEYwMDAyNDAyMDAwMThGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMENECis6MTAxMTAwMDBBNEEyMDAxNDBBMDAxNDI0MjdCRDAwMjA5NEEyMDAxNEY1Cis6MTAxMTEwMDAwQTAwMDQyMjAwMDAwMDAwOTRBMjAwMTYzQzAzODAwMDk0Cis6MTAxMTIwMDA4QzYzMDE0NDMwNDJGRkZGMTQ2MjAwMDgyNDAyMDAwMTc2Cis6MTAxMTMwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDQ5Cis6MTAxMTQwMDBBNEEyMDAxNjBBMDAwQjAwMjdCRDAwMjA5NEEyMDAxNkRFCis6MTAxMTUwMDAxNDQwMDAwNjhGQkYwMDFDM0MwMjA4MDA4QzQyMDA3MDQ3Cis6MTAxMTYwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNzA4RkIyMDAxODNDCis6MTAxMTcwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMERECis6MTAxMTgwMDAyN0JERkZEOEFGQjIwMDE4OEY5MkZGQThBRkIxMDAxNEVGCis6MTAxMTkwMDBBRkJGMDAyMEFGQjMwMDFDQUZCMDAwMTAzQzAyODAwMDE2Cis6MTAxMUEwMDAzNDUxMDEwMDhDNTAwMTAwOTI0MjAwMDA5MjIzMDAwOTRBCis6MTAxMUIwMDAzMDQ0MDBGRjI0MDIwMDFGMTA2MjAwQUIyODYyMDAyMEIwCis6MTAxMUMwMDAxMDQwMDAxOTI0MDIwMDM4Mjg2MjAwMEExMDQwMDAwRDY3Cis6MTAxMUQwMDAyNDAyMDAwQjI4NjIwMDA4MTA0MDAwMkU4RjgyMDAxQ0ExCis6MTAxMUUwMDAwNDYwMDEwMzI4NjIwMDAyMTQ0MDAwMkE4RjgyMDAxQzYwCis6MTAxMUYwMDAyNDAyMDAwNjEwNjIwMDI2OEZCRjAwMjAwQTAwMDU0QzYyCis6MTAxMjAwMDA4RkIzMDAxQzEwNjIwMDYwMjg2MjAwMEIxNDQwMDBGOUNDCis6MTAxMjEwMDA4RkJGMDAyMDI0MDIwMDBFMTA2MjAwNzg4RjgyMDAxQzE1Cis6MTAxMjIwMDAwQTAwMDU0QzhGQjMwMDFDMTA2MjAwRDEyODYyMDAzOUZGCis6MTAxMjMwMDAxMDQwMDAwQTI0MDIwMDgwMjQwMjAwMzYxMDYyMDBFNEZDCis6MTAxMjQwMDAyODYyMDAzNzEwNDAwMEMyMjQwMjAwMzUxMDYyMDBEODI2Cis6MTAxMjUwMDA4RkJGMDAyMDBBMDAwNTRDOEZCMzAwMUMxMDYyMDAyREM4Cis6MTAxMjYwMDAyODYyMDA4MTEwNDAwMDA2MjQwMjAwQzgyNDAyMDAzOUQwCis6MTAxMjcwMDAxMDYyMDBDODhGQkYwMDIwMEEwMDA1NEM4RkIzMDAxQzBECis6MTAxMjgwMDAxMDYyMDBBMjhGQkYwMDIwMEEwMDA1NEM4RkIzMDAxQzIzCis6MTAxMjkwMDA4RjgyMDAxQzhDNDIwMDBDMTA0MDAwRDY4RkJGMDAyMEIzCis6MTAxMkEwMDAwRTAwMEQ0NTAwMDAwMDAwM0MwMzgwMDAzNDYzMDEwMDg3Cis6MTAxMkIwMDA4QzYyMDAwMDhGODUwMDE4OTQ2NzAwMDg5NDY2MDAwQzBCCis6MTAxMkMwMDBBQ0EyMDAwMDhDNjQwMDA0OEY4MjAwMUMwMDA2MzQwMDc1Cis6MTAxMkQwMDBBQ0E0MDAwNDk0NDgwMDFFOEM2MjAwMTgwMDA3M0MwMDc3Cis6MTAxMkUwMDAwMEU4MzgyNUFDQTIwMDA4OEM2MjAwMUMyNDA0MDAwMTMwCis6MTAxMkYwMDBBQ0EyMDAwQzkwNjIwMDBBMDBDMjMwMjVBQ0E2MDAxMDFGCis6MTAxMzAwMDBBQ0EwMDAxNEFDQTAwMDE4QUNBNzAwMUMwQTAwMDUwQjkwCis6MTAxMzEwMDA4RkJGMDAyMDhGODIwMDFDOEM0MjAwMEMxMDQwMDBCNTUzCis6MTAxMzIwMDA4RkJGMDAyMDBFMDAwRDQ1MDAwMDAwMDA4RjgyMDAxQ0MyCis6MTAxMzMwMDA5NjI0MDAwODk2MjUwMDBDOTQ0MzAwMUUwMDA0MjIwMjA3Cis6MTAxMzQwMDA5NjI2MDAwRThGODIwMDE4MDAwNDI2MDAwMDgzMjAyNUI4Cis6MTAxMzUwMDAwMDA1MkMwMDNDMDMwMDgwMDBBNjI4MjUwMDgzMjAyNUUyCis6MTAxMzYwMDBBQzQwMDAwMEFDNDAwMDA0QUM0MDAwMDhBQzQwMDAwQ0I1Cis6MTAxMzcwMDBBQzQ1MDAxMEFDNDAwMDE0QUM0MDAwMThBQzQ0MDAxQzVDCis6MTAxMzgwMDAwQTAwMDUwQTI0MDQwMDAxOTYyMjAwMEMxNDQwMDAxOEVCCis6MTAxMzkwMDAwMDAwMDAwMDkyNDIwMDA1MzA0MjAwMTAxNDQwMDAxNDhBCis6MTAxM0EwMDAwMDAwMDAwMDBFMDAwMzQ1MDIwMDIwMjE5MjQyMDAwNUNCCis6MTAxM0IwMDAwMjAwMjAyMTM0NDIwMDEwMEUwMDAzNTBBMjQyMDAwNTFBCis6MTAxM0MwMDA5MjQyMDAwMDI0MDMwMDIwMzA0MjAwRkYxMDQzMDA4OEI2Cis6MTAxM0QwMDAwMjAwMjAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxOEE1Cis6MTAxM0UwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDEwMzYyN0JEMDAyOEZFCis6MTAxM0YwMDAwMDAwMDAwRDBBMDAwNTRCOEZCRjAwMjA4QzQyMDAwQzNFCis6MTAxNDAwMDAxMDQwMDA3QzhGQkYwMDIwMEUwMDBENDUwMDAwMDAwMDQyCis6MTAxNDEwMDA4RTIyMDAwNDhGODQwMDE4OTYyMzAwMENBQzgyMDAwMEZBCis6MTAxNDIwMDAzQzAyODAwODk0NDUwMDJDOEY4MjAwMUMwMDAzMUMwMEE1Cis6MTAxNDMwMDAzMEE1RkZGRjk0NDYwMDFFM0MwMjQwMEUwMDY1MTgyNUIzCis6MTAxNDQwMDAwMEMyMzAyNUFDODMwMDA0QUM4MDAwMDhBQzgwMDAwQ0U2Cis6MTAxNDUwMDBBQzgwMDAxMEFDODAwMDE0QUM4MDAwMThBQzg2MDAxQzdFCis6MTAxNDYwMDAwQTAwMDUwQTI0MDQwMDAxMEUwMDAzNDUwMjAwMjAyMUExCis6MTAxNDcwMDA4RjkzRkZBQzAyMDAyMDIxMEUwMDAzNTBBNjYwMDAwQ0U5Cis6MTAxNDgwMDAwMjAwMjAyMTBFMDAwMzU1MjQwNTAwMDE4RjgyMDAxQzVDCis6MTAxNDkwMDA4QzQyMDAwQzEwNDAwMDU3OEZCRjAwMjAwRTAwMEQ0NUZECis6MTAxNEEwMDAwMDAwMDAwMDk2MjIwMDBDOEY4MzAwMTgwMDAyMTQwMDM4Cis6MTAxNEIwMDBBQzcwMDAwMEFDNjIwMDA0QUM2MDAwMDg4RTQ0MDAzOEUwCis6MTAxNEMwMDA4RjgyMDAxQ0FDNjQwMDBDOEU0NjAwM0M5NDQ1MDAxRUNDCis6MTAxNEQwMDAzQzAyNDAxRkFDNjYwMDEwMDBBMjI4MjU4RTYyMDAwNDZBCis6MTAxNEUwMDAyNDA0MDAwMUFDNjIwMDE0QUM2MDAwMThBQzY1MDAxQzYwCis6MTAxNEYwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDczCis6MTAxNTAwMDA4RkIwMDAxMDBBMDAwRDc5MjdCRDAwMjgyNDAyMDAyMEFBCis6MTAxNTEwMDAxMDgyMDAzOThGQjMwMDFDMEUwMDBGMUYwMDAwMDAwMDY2Cis6MTAxNTIwMDAxMDQwMDAzNDhGQkYwMDIwM0MwMzgwMDA4QzYyMDFGODIzCis6MTAxNTMwMDAwNDQwRkZGRTI0MDIwMDAyQUM3MDAxQzBBMDYyMDFDNDlFCis6MTAxNTQwMDAzQzAyMTAwMEFDNjIwMUY4MEEwMDA1NEI4RkJGMDAyMDdFCis6MTAxNTUwMDAwMjAwMjAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODIzCis6MTAxNTYwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBFNjgyN0JEMDAyODRDCis6MTAxNTcwMDA5NjI1MDAwQzAyMDAyMDIxOEZCRjAwMjA4RkIzMDAxQzk1Cis6MTAxNTgwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMEU4REJBCis6MTAxNTkwMDAyN0JEMDAyODAyMDAyMDIxOEZCMzAwMUM4RkIyMDAxODQ1Cis6MTAxNUEwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBFQjgyN0JEMDAyOEJDCis6MTAxNUIwMDA5MjI1MDAwRDAyMDAyMDIxOEZCMzAwMUM4RkIyMDAxODZECis6MTAxNUMwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBGMDkyN0JEMDAyODRBCis6MTAxNUQwMDAwMjAwMjAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxOEEzCis6MTAxNUUwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBFRTAyN0JEMDAyODU0Cis6MTAxNUYwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDcyCis6MTAxNjAwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgzQzAzODAwMEQ1Cis6MTAxNjEwMDA4QzYyMDI3ODA0NDBGRkZFMjQwMjAwMDJBQzY0MDI0MEE3Cis6MTAxNjIwMDBBMDYyMDI0NDNDMDIxMDAwMDNFMDAwMDhBQzYyMDI3OEIxCis6MTAxNjMwMDBBMzgwMDAxMDAzRTAwMDA4QTM4MDAwMTEzQzAzODAwMDk5Cis6MTAxNjQwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMTRBQzYyMDI0MDdDCis6MTAxNjUwMDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDAwM0UwMDAwOEUxCis6MTAxNjYwMDBBQzYyMDI3ODNDMDI2MDAwMDNFMDAwMDg4QzQyNTQwNDQzCis6MTAxNjcwMDA5MDgzMDAzMDI0MDIwMDA1MDA4MDQwMjEzMDYzMDAzRjQ5Cis6MTAxNjgwMDAwMDAwNDgyMTE0NjIwMDA1MDAwMDUwMjE5MDgyMDA0Q0E3Cis6MTAxNjkwMDA5NDgzMDA0RTMwNDkwMEZGMzA2QUZGRkZBRDAwMDAwQzFDCis6MTAxNkEwMDBBRDAwMDAxMEFEMDAwMDI0OTUwMjAwMTQ4RDA1MDAxQzUzCis6MTAxNkIwMDA4RDA0MDAxODMwNDJGRkZGMDA0OTEwMjMwMDAyMTEwMDgyCis6MTAxNkMwMDAwMDAyMzdDMzAwNDAzODIxMDA4NjIwMjMwMEEyMTAyQkRGCis6MTAxNkQwMDAwMDgyMjAyMzAwQTcyODIzQUQwNTAwMUNBRDA0MDAxOEJDCis6MTAxNkUwMDBBNTA5MDAxNEE1MDkwMDIwQTUwQTAwMTYwM0UwMDAwOEJBCis6MTAxNkYwMDBBNTBBMDAyMjAzRTAwMDA4MDAwMDAwMDAyN0JERkZEODczCis6MTAxNzAwMDBBRkIyMDAxODNDMTI4MDA4QUZCNDAwMjBBRkIzMDAxQzg5Cis6MTAxNzEwMDBBRkIxMDAxNEFGQkYwMDI0QUZCMDAwMTAzNjUxMDEwMENDCis6MTAxNzIwMDAzQzAyNjAwMDhDNDI1NDA0OTIyMjAwMEMzQzE0MDgwMERECis6MTAxNzMwMDA5Mjk0MDBGNzMwNDMwMEZGMjQwMjAwMDExMDYyMDAzMjRGCis6MTAxNzQwMDAwMDgwOTgyMTI0MDIwMDAyMTQ2MjAwMzUzNjUwMDA4MDg3Cis6MTAxNzUwMDAwRTAwMTNGRTAwMDAwMDAwOTIwMjAwNEMyNDAzRkY4MEU0Cis6MTAxNzYwMDAzQzA0ODAwMDMwNDIwMDdGMDAwMjExQzAyNDQyMDI0MDRECis6MTAxNzcwMDAwMjYyMTAyMTAwNDMxODI0QUM4MzAwOTQ5MjQ1MDAwOEIzCis6MTAxNzgwMDA5MjA0MDA0QzMwNDIwMDdGM0MwMzgwMDYxNDg1MDAwNzIxCis6MTAxNzkwMDAwMDQzODAyMTI0MDJGRkZGQTIyMjAwMTEyNDAyRkZGRjQ4Cis6MTAxN0EwMDBBNjIyMDAxMjBBMDAwNUJFMjQwMkZGRkY5NjAyMDAyMEI2Cis6MTAxN0IwMDBBMjIyMDAxMTk2MDIwMDIyQTYyMjAwMTI4RTAyMDAyNDBDCis6MTAxN0MwMDAzQzA0ODAwOEFFMjIwMDE0MzQ4NTAwODA5MEEyMDA0Q0I2Cis6MTAxN0QwMDAzNDgzMDEwMEEwNjIwMDEwOENBMjAwM0NBQzYyMDAxOEFGCis6MTAxN0UwMDA4QzgyMDA2OEFDNjIwMEU0OEM4MjAwNjRBQzYyMDBFMDMxCis6MTAxN0YwMDA4QzgyMDA2Q0FDNjIwMEU4MjQwMjAwMDFBMEEyMDA2OEE4Cis6MTAxODAwMDAwQTAwMDVEQTNDMDQ4MDA4MEUwMDE0MTcwMDAwMDAwMEVFCis6MTAxODEwMDAzNjQyMDA4MEEwNDAwMDY4MEEwMDA1REEzQzA0ODAwOEQ3Cis6MTAxODIwMDBBMjAwMDA2OEEyMDAwMDY5MEEwMDA2MTUzQzAyODAwOEI4Cis6MTAxODMwMDAzNDgzMDA4MDhDNjIwMDM4MzQ4NTAxMDBBQzYyMDA2QzE3Cis6MTAxODQwMDAyNDAyMDAwMUEwNjIwMDY5OTBBMjAwQzU5MDgzMDAwOEY0Cis6MTAxODUwMDAzMDUxMDBGRjMwNzIwMDdGMTIzMjAwMTkwMDExMTFDMEE4Cis6MTAxODYwMDAyNDQyMDI0MDAyNjIxMDIxMjQwM0ZGODAwMDQzMTgyNDE2Cis6MTAxODcwMDAzQzA0ODAwMEFDODMwMDk0MzA0MjAwN0YzQzAzODAwNjJGCis6MTAxODgwMDAwMDQzODAyMThFMDIwMDBDMTA0MDAwMEQwMjAwMjAyMTM4Cis6MTAxODkwMDAwRTAwMDU2QTAwMDAwMDAwMjYyMjAwMDEzMDUxMDBGRjAyCis6MTAxOEEwMDA5MjAzMDAzQzAyMzQxMDI2MDAwMjEwMkIwMDAyMTAyMzg5Cis6MTAxOEIwMDAzMDYzMDA3RjAyMjI4ODI0MEEwMDA1RTRBMjAzMDAzQzcyCis6MTAxOEMwMDAzQzA4ODAwODM1MDQwMTAwOEM4MjAwRDAzNTA3MDA4MDc4Cis6MTAxOEQwMDBBQ0UyMDAzQzhDODIwMEQwQUQwMjAwMDA5MEU1MDA0Q0YwCis6MTAxOEUwMDA5MDg2MDBDNTkwRTMwMDRDOTA4NDAwQzUyNDAyRkY4MEUwCis6MTAxOEYwMDAwMEEyMjgyNDMwNjMwMDdGMzA4NDAwRkYwMEE2MjgyNTQyCis6MTAxOTAwMDAwMDY0MTgyQTEwNjAwMDAyMzBBNTAwRkYzOEE1MDA4MDhFCis6MTAxOTEwMDBBMEU1MDA0Q0ExMDUwMDA5M0MwMjgwMDg5MDQzMDAwRUEwCis6MTAxOTIwMDAzNDQ0MDA4MDNDMDU4MDAwQTA0MzAwMEE4QzgzMDAxOEVBCis6MTAxOTMwMDAzQzAyN0ZGRjM0NDJGRkZGMDA2MjE4MjRBQzgzMDAxODkyCis6MTAxOTQwMDA4Q0EyMDFGODA0NDBGRkZFMDAwMDAwMDBBQ0IzMDFDMDBGCis6MTAxOTUwMDA4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxOEZCCis6MTAxOTYwMDA4RkIxMDAxNDhGQjAwMDEwMjQwMjAwMDJBMEEyMDFDNEE1Cis6MTAxOTcwMDAyN0JEMDAyODNDMDIxMDAwMDNFMDAwMDhBQ0EyMDFGOERCCis6MTAxOTgwMDA5MEEyMDAwMDI0NDIwMDAxQTBBMjAwMDAzQzAzMDgwMDM1Cis6MTAxOTkwMDA4QzYzMDBGNDMwNDIwMEZGMTQ0MzAwMDIwMDgwMzAyMUM5Cis6MTAxOUEwMDBBMEEwMDAwMDkwQTIwMDAwOEY4NDAwMTQwMDAyMTFDMENCCis6MTAxOUIwMDAyNDQyMDI0MDI0ODMwMDQwMDA4MjIwMjEyNDAyRkY4MDMwCis6MTAxOUMwMDAwMDgyMjAyNDMwNjMwMDdGM0MwMjgwMEEwMDYyMTgyMURDCis6MTAxOUQwMDAzQzAyODAwMEFDNDQwMDI0MDNFMDAwMDhBQ0MzMDAwMERCCis6MTAxOUUwMDA5NDgyMDAwNjkwODMwMDA1OEM4NTAwMEM4Qzg2MDAxMDg0Cis6MTAxOUYwMDA4Qzg3MDAxODhDODgwMDFDOEM4NDAwMjAzQzAxMDgwMDE3Cis6MTAxQTAwMDBBNDIyNTJDNjNDMDEwODAwQTAyMzUyQzUzQzAxMDgwMDk0Cis6MTAxQTEwMDBBQzI1NTJDQzNDMDEwODAwQUMyNjUyRDAzQzAxMDgwMDU5Cis6MTAxQTIwMDBBQzI3NTJEODNDMDEwODAwQUMyODUyREMzQzAxMDgwMDJECis6MTAxQTMwMDBBQzI0NTJFMDAzRTAwMDA4MDAwMDAwMDAzQzAyODAwOEYzCis6MTAxQTQwMDAzNDQyMDEwMDhDNDQwMDM0M0MwMzgwMDAzNDY1MDQwMEJGCis6MTAxQTUwMDBBQzY0MDAzODhDNDIwMDM4QUY4NTAwMjBBQzYyMDAzQzlBCis6MTAxQTYwMDAzQzAyMDAwNUFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTAxQTcwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjAwMDYzMDg0MDBGRjg0Cis6MTAxQTgwMDAwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMzAwMDAwMDAwMEIxCis6MTAxQTkwMDAwMDAwMDAwMDAwMDAwMDAwM0MwMzgwMDA4QzYyMDAwMDk5Cis6MTAxQUEwMDAzMDQyMDAxMDEwNDBGRkZEMzQ2MjA0MDAwM0UwMDAwOEUzCis6MTAxQUIwMDBBRjgyMDAyMDk0QzIwMDAwM0MwODA4MDA5NTA4MDBDQUNDCis6MTAxQUMwMDAzMEU3RkZGRjAwODA0ODIxMDEwMjEwMjFBNEMyMDAwMDdFCis6MTAxQUQwMDA5NEMyMDAwMDMwNDJGRkZGMDBFMjEwMkI1NDQwMDAwMThFCis6MTAxQUUwMDBBNEM3MDAwMDk0QTIwMDAwM0MwMzA4MDA4QzYzMDBDQzUzCis6MTAxQUYwMDAyNDQyMDAwMUE0QTIwMDAwOTRBMjAwMDAzMDQyRkZGRjkzCis6MTAxQjAwMDAxNDQzMDAwNzNDMDI4MDA4MDEwNzEwMkJBNEEwMDAwMDJBCis6MTAxQjEwMDA1NDQwMDAwMTAxMDAzODIxQTRDNzAwMDAzQzAyODAwOEE1Cis6MTAxQjIwMDAzNDQ2MDEwMDhDQzMwMDI4OTRBMjAwMDAzQzA0ODAwMENECis6MTAxQjMwMDAzMDQyRkZGRTAwMDIxMEMwMDA2MjEwMjFBQzgyMDAzQzY3Cis6MTAxQjQwMDA4QzgyMDAzQzAwNjIxODIzMTg2MDAwMDQwMDAwMDAwMDMyCis6MTAxQjUwMDA4Q0MyMDAyNDBBMDAwNkE2MjQ0MjAwMDE4Q0MyMDAyNDg0Cis6MTAxQjYwMDBBQzgyMDAzODNDMDIwMDUwMzQ0MjAwMTAzQzAzODAwMDNDCis6MTAxQjcwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTAxQjgwMDA4QzYyMDAwMDMwNDIwMDIwMTA0MEZGRkQwMDAwMDAwMDg5Cis6MTAxQjkwMDA5NEEyMDAwMDNDMDQ4MDAwMzA0MjAwMDEwMDAyMTBDMDBBCis6MTAxQkEwMDAwMDQ0MTAyMThDNDMwNDAwQUQyMzAwMDA4QzQyMDQwNDQ3Cis6MTAxQkIwMDBBRDIyMDAwNDNDMDIwMDIwMDNFMDAwMDhBQzgyMDAzMEFCCis6MTAxQkMwMDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEY2Cis6MTAxQkQwMDBBRkJGMDAxQzk0QzIwMDAwMDBDMDgwMjEzQzEyMDgwMDZFCis6MTAxQkUwMDA5NjUyMDBDNjI0NDIwMDAxQTYwMjAwMDA5NjAzMDAwMDlGCis6MTAxQkYwMDA5NEUyMDAwMDAwRTAzMDIxMTQ0MzAwMDU4RkIxMDAzMDcyCis6MTAxQzAwMDAwRTAwMDY3QjAyNDAzODIxMEEwMDA2REQwMDAwMDAwMEJECis6MTAxQzEwMDA4QzgzMDAwNDhDODIwMDA0MjQ0MjAwNDAwNDYxMDAwNzhECis6MTAxQzIwMDBBQzgyMDAwNDhDODIwMDA0MDQ0MDAwMDQwMDAwMDAwMDI4Cis6MTAxQzMwMDA4QzgyMDAwMDI0NDIwMDAxQUM4MjAwMDA5NjAyMDAwMDY5Cis6MTAxQzQwMDAzMDQyRkZGRjUwNTIwMDAxQTYwMDAwMDA5NjIyMDAwMDIzCis6MTAxQzUwMDAyNDQyMDAwMUE2MjIwMDAwM0MwMjgwMDgzNDQyMDEwMDE4Cis6MTAxQzYwMDA5NjIzMDAwMDk0NDIwMDNDMTQ0MzAwMDQ4RkJGMDAxQ0U0Cis6MTAxQzcwMDAyNDAyMDAwMUE2MjIwMDAwOEZCRjAwMUM4RkIyMDAxOEIyCis6MTAxQzgwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMEMyCis6MTAxQzkwMDAyN0JERkZFMDNDMDI4MDA4QUZCRjAwMTgzNDQyMDEwMEJFCis6MTAxQ0EwMDA4QzQ4MDAzNDNDMDM4MDAwMzQ2OTA0MDBBQzY4MDAzODgwCis6MTAxQ0IwMDA4QzQyMDAzODMwRTcwMEZGQUY4OTAwMjBBQzYyMDAzQzY2Cis6MTAxQ0MwMDAzQzAyMDAwNUFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTAxQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAxQ0UwMDA4QzgyMDAwQzhDODIwMDBDOTc4MzAwMEVBRDIyMDAwMEM5Cis6MTAxQ0YwMDA4QzgyMDAxMDAwNjA0MDIxQUQyMjAwMDQ4QzgyMDAxODBDCis6MTAxRDAwMDBBRDIyMDAwODhDODIwMDFDQUQyMjAwMEM4Q0EyMDAxNEI1Cis6MTAxRDEwMDBBRDIyMDAxMDhDODIwMDIwQUQyMjAwMTQ5MDgyMDAwNUJDCis6MTAxRDIwMDAzMDQyMDBGRjAwMDIxMjAwQUQyMjAwMTg4Q0EyMDAxODAxCis6MTAxRDMwMDBBRDIyMDAxQzhDQTIwMDBDQUQyMjAwMjA4Q0EyMDAxMDUxCis6MTAxRDQwMDBBRDIyMDAyNDhDQTIwMDFDQUQyMjAwMjg4Q0EyMDAyMDExCis6MTAxRDUwMDBBRDIyMDAyQzM0MDJGRkZGQUQyNjAwMzBBRDIwMDAzNDUwCis6MTAxRDYwMDA1MDYyMDAwMTM0MDhGRkZGQUQyODAwMzg1MEUwMDAxMTM4Cis6MTAxRDcwMDAzQzAyODAwODNDMDQ4MDA4MzQ4NDAxMDA5NDgyMDA1MEI2Cis6MTAxRDgwMDAzMDQyRkZGRkFEMjIwMDNDOTQ4MzAwNDQ5NDg1MDA0NDIwCis6MTAxRDkwMDAyNDAyMDAwMTMwNjNGRkZGMDAwMzE4QzIwMDY0MTgyMTExCis6MTAxREEwMDA5MDY0MDA1NDMwQTUwMDA3MDBBMjEwMDQwQTAwMDc0ODAwCis6MTAxREIwMDAwMDQ0MTAyNTM0NDIwMTAwQUQyMDAwM0M5NDQzMDA0NDBGCis6MTAxREMwMDA5NDQ0MDA0NDMwNjNGRkZGMDAwMzE4QzIwMDYyMTgyMUVFCis6MTAxREQwMDAzMDg0MDAwNzkwNjUwMDU0MjQwMjAwMDEwMDgyMTAwNDQyCis6MTAxREUwMDAwMDAyMTAyNzAwNDUxMDI0QTA2MjAwNTQwMDAwMDAwMEVCCis6MTAxREYwMDAwMDAwMDAwMDAwMDAwMDAwM0MwMjAwMDYzNDQyMDA0MEU5Cis6MTAxRTAwMDAzQzAzODAwMEFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTAxRTEwMDAwMDAwMDAwMDhDNjIwMDAwMzA0MjAwMTAxMDQwRkZGRDA2Cis6MTAxRTIwMDAzQzA2ODAwODM0QzIwMTUwMzQ2MzA0MDAzNEM3MDE0QUMwCis6MTAxRTMwMDAzNEM0MDEzNDM0QzUwMTQwMzRDNjAxNDRBRkEyMDAxMDlCCis6MTAxRTQwMDAwRTAwMDZCRUFGODMwMDIwOEZCRjAwMTgwM0UwMDAwODFECis6MTAxRTUwMDAyN0JEMDAyMDhGODMwMDBDM0MwNjA4MDA4Q0M2MDBFOERDCis6MTAxRTYwMDA4RjgyMDAxNDMwNjMzRkZGMDAwMzE5ODAwMDQ2MTAyMTY5Cis6MTAxRTcwMDAwMDQzMTAyMTI0MDNGRjgwMDA0MzE4MjQzQzA2ODAwMDA3Cis6MTAxRTgwMDBBQ0MzMDAyODMwNDIwMDdGM0MwMzgwMEMwMDQzMzAyMTZCCis6MTAxRTkwMDA5MEMyMDAwRDMwQTUwMEZGMDAwMDM4MjEzNDQyMDAxMDMwCis6MTAxRUEwMDBBMEMyMDAwRDhGODkwMDBDM0MwMjgwMDgzNDQyMDEwMDYyCis6MTAxRUIwMDA5NDQzMDA0NDAwMDkxMzgyMzA0ODAwMDMyNDAyMDAwMUM3Cis6MTAxRUMwMDBBNEMzMDAwRTExMDIwMDBCMjkwMjAwMDIxMDQwMDAwNUZECis6MTAxRUQwMDAyNDAyMDAwMjExMDAwMDBDMjQwMzAwMDEwQTAwMDc5MEY0Cis6MTAxRUUwMDAwMDAwMTgyMTExMDIwMDA2MDAwMDAwMDAwQTAwMDc5MEZGCis6MTAxRUYwMDAwMDAwMTgyMThDQzIwMDJDMEEwMDA3OTAyNDQzMDAwMTI2Cis6MTAxRjAwMDA4Q0MyMDAxNDI0NDMwMDAxOENDMjAwMTgwMDQzMTAyQjIzCis6MTAxRjEwMDA1MDQwMDAwQTI0MDcwMDAxMjQwMjAwMjcxNEEyMDAwM0Y1Cis6MTAxRjIwMDAzQzAzODAwODBBMDAwNzlEMjQwNzAwMDEzNDYzMDEwMDc4Cis6MTAxRjMwMDA5NDYyMDA0QzI0NDIwMDAxQTQ2MjAwNEMwMDA5MTM4MjA4Cis6MTAxRjQwMDAzMDQzMDAwMzJDNjIwMDAyMTA0MDAwMDkwMDgwMjgyMTY5Cis6MTAxRjUwMDAxNDYwMDAwNDAwMDAwMDAwOTRDMjAwMzQwQTAwMDdBREMxCis6MTAxRjYwMDAzMDQ2RkZGRjhDQzYwMDM4MEEwMDA3QUQwMDgwMjgyMUVDCis6MTAxRjcwMDAwMDAwMzAyMTNDMDQwODAwMjQ4NDUyQzAwQTAwMDZGMjBDCis6MTAxRjgwMDAwMDAwMDAwMDI3QkRGRjkwQUZCNjAwNjhBRkI1MDA2NDQ5Cis6MTAxRjkwMDBBRkI0MDA2MEFGQjMwMDVDQUZCMjAwNThBRkIxMDA1NDUzCis6MTAxRkEwMDBBRkJGMDA2Q0FGQjAwMDUwOEM5MDAwMDAwMDgwQjAyMTNCCis6MTAxRkIwMDAzQzAyMDgwMDhDNDIwMEU4OTYwNDAwMzI4RjgzMDAxNDMzCis6MTAxRkMwMDAyNDE0RkY4MDMwODQzRkZGMDA2MjE4MjEwMDA0MjE4MDI4Cis6MTAxRkQwMDAwMDY0MTgyMTAwNzQxMDI0M0MxMzgwMDAwMEEwOTAyMTlDCis6MTAxRkUwMDA5MEE1MDAwMEFFNjIwMDI4OTIwNDAwMzIzQzAyODAwQ0YyCis6MTAxRkYwMDAzMDYzMDA3RjAwNjI4ODIxMzA4NDAwQzAyNDAyMDA0MEVBCis6MTAyMDAwMDAxNDgyMDAzMjAwMDBBODIxOEUzNTAwMzg4RTIyMDAxODdDCis6MTAyMDEwMDAxNDQwMDAwMjI0MDIwMDAxQUUyMjAwMTg5MjAyMDAzQzhCCis6MTAyMDIwMDAzMDQyMDAyMDE0NDAwMDBFOEY4MzAwMTQwMDA1MTFDMEMwCis6MTAyMDMwMDAyNDQyMDI0MDAwNjIxODIxMzA2NDAwNzgzQzAyMDA4MDkzCis6MTAyMDQwMDAwMDgyMjAyNTAwNzQxODI0QUU2MzA4MDBBRTY0MDgxMEQ2Cis6MTAyMDUwMDA4RTIyMDAxODhFMDMwMDA4MDA0MzEwMjFBRTIyMDAxOEMzCis6MTAyMDYwMDA4RTIyMDAyQzhFMjMwMDE4MjQ0MjAwMDEwMDYyMTgyQkJGCis6MTAyMDcwMDAxMDYwMDA0MzAwMDAwMDAwOTI0MjAwMDAyNDQyMDAwMTcyCis6MTAyMDgwMDBBMjQyMDAwMDNDMDMwODAwOEM2MzAwRjQzMDQyMDBGRkQxCis6MTAyMDkwMDA1MDQzMDAwMUEyNDAwMDAwOTI0MjAwMDA4Rjg0MDAxNENGCis6MTAyMEEwMDAwMDAyMTFDMDI0NDIwMjQwMjQ4MzAwNDAzMDYzMDA3RkJDCis6MTAyMEIwMDAwMDgyMjAyMTNDMDI4MDBBMDA5NDIwMjQwMDYyMTgyMTIyCis6MTAyMEMwMDBBRTY0MDAyNDBBMDAwOEJFQUVDMzAwMDA5MjAzMDAzMkQyCis6MTAyMEQwMDAyNDAyRkZDMDAwNDMxMDI0MzA0MjAwRkYxNDQwMDAwNURBCis6MTAyMEUwMDAyNDAyMDAwMUFFMjIwMDE4OTYyMjAwMzQwQTAwMDgyRUI1Cis6MTAyMEYwMDAzMDU1RkZGRjhFMjIwMDE0MjQ0MjAwMDFBRTIyMDAxODRBCis6MTAyMTAwMDA5MjAyMDAzMDAwMDIxNjAwMDAwMjE2MDMwNDQxMDAxQzc3Cis6MTAyMTEwMDAwMDAwMDAwMDk2MDIwMDMyMjdBNDAwMTAwMDgwMjgyMTUxCis6MTAyMTIwMDBBN0EyMDAxNjk2MDIwMDMyMDAwMDMwMjEyNDA3MDAwMTA5Cis6MTAyMTMwMDAzMDQyRkZGRkFGODIwMDBDMEUwMDA2RjJBRkEwMDAxQzgxCis6MTAyMTQwMDA5NjAyMDAzMjhGODMwMDE0M0MwNDA4MDA4Qzg0MDBFODVGCis6MTAyMTUwMDAzMDQyM0ZGRjAwMDIxMTgwMDA2NDE4MjEwMDYyMTgyMTA0Cis6MTAyMTYwMDAwMDc0MTAyNEFFNjIwMDJDMzA2MzAwN0YzQzAyODAwRUFECis6MTAyMTcwMDAwMDYyMTgyMTkwNjIwMDBEMzA0MjAwN0ZBMDYyMDAwREM1Cis6MTAyMTgwMDA5MjIyMDAwRDMwNDIwMDEwNTA0MDAwNzg5MjQyMDAwMDMwCis6MTAyMTkwMDAzQzAyODAwODM0NDQwMTAwOTQ4MjAwNEM4RUMzMDAwMDRECis6MTAyMUEwMDAzQzEzMDgwMDk2NzMwMEM2MjQ0MkZGRkZBNDgyMDA0QzMzCis6MTAyMUIwMDA5NDYyMDAzMjk2MjMwMDBFMzA1NEZGRkYzMDcwRkZGRjEwCis6MTAyMUMwMDAzQzAzMDgwMDhDNjMwMEQwMDA3MDE4MDdBN0EzMDAzOEY4Cis6MTAyMUQwMDA5NDgyMDAzRTMwNjNGRkZGMzA0MkZGRkYxNDYyMDAwNzJECis6MTAyMUUwMDAwMDAwMDAwMDhDODIwMDMwM0MwMzgwMDAyNDQyMDAzMDVDCis6MTAyMUYwMDBBQzYyMDAzQzBBMDAwODU2OEM4MjAwMkM5NDgyMDA0MDlECis6MTAyMjAwMDAzMDQyRkZGRjU0NjIwMDA5MjdBNDAwNDA4QzgyMDAzODRFCis6MTAyMjEwMDAzQzAzODAwMDI0NDIwMDMwQUM2MjAwM0M4QzgyMDAzNERECis6MTAyMjIwMDBBQzYyMDAzODBBMDAwODY1M0MwMzgwMDAyN0E1MDAzODJFCis6MTAyMjMwMDAyN0E2MDA0ODAyNjAzODIxMEUwMDA2N0JBN0EwMDA0OEIwCis6MTAyMjQwMDA4RkEzMDA0MDNDMDI4MDAwMjQ2MzAwMzBBQzQzMDAzODgwCis6MTAyMjUwMDA4RkEzMDA0NEFDNDMwMDNDM0MwMzgwMDAzQzAyMDAwNURCCis6MTAyMjYwMDBBQzYyMDAzMDNDMDI4MDA4MzQ0NDAxMDA5NDgyMDA0Mjk5Cis6MTAyMjcwMDAzNDYzMDQwMDMwNDJGRkZGMDIwMjEwMkIxNDQwMDAwN0I5Cis6MTAyMjgwMDBBRjgzMDAyMDk0ODIwMDRFOTQ4MzAwNDIwMjAyMTAyMTBBCis6MTAyMjkwMDAwMDQzMTAyMzBBMDAwODdCMzA0M0ZGRkY5NDgzMDA0RTY1Cis6MTAyMkEwMDA5NDgyMDA0MjAyNjMxODIxMDA1MDEwMjMwMDYyMTgyMzE4Cis6MTAyMkIwMDAzMDYzRkZGRjNDMDI4MDA4MzQ0NDAxMDA5NDgyMDAzQ0ZDCis6MTAyMkMwMDAzMDQyRkZGRjE0NDMwMDAzMDAwMDAwMDAwQTAwMDg4QkE3Cis6MTAyMkQwMDAyNDAzMDAwMTk0ODIwMDNDMzA0MkZGRkYwMDYyMTAyQjc3Cis6MTAyMkUwMDAxNDQwMDAwNThGODIwMDIwOTQ4MjAwM0MwMDYyMTAyMzdECis6MTAyMkYwMDAzMDQzRkZGRjhGODIwMDIwQUM1NTAwMDBBQzQwMDAwNDRCCis6MTAyMzAwMDBBQzU0MDAwOEFDNDMwMDBDM0MwMjAwMDYzNDQyMDAxMDAwCis6MTAyMzEwMDAzQzAzODAwMEFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTAyMzIwMDAwMDAwMDAwMDhDNjIwMDAwMzA0MjAwMTAxMDQwRkZGREYxCis6MTAyMzMwMDAzQzA0ODAwODM0ODQwMTAwMDAxMDE4QzIwMDY0MTgyMTk1Cis6MTAyMzQwMDA5MDY1MDA1NDMyMDIwMDA3MjQwNjAwMDEwMDQ2MTAwNDg0Cis6MTAyMzUwMDAwMDQ1MTAyNUEwNjIwMDU0OTQ4MzAwNDI5NjIyMDAwRThFCis6MTAyMzYwMDA1MDQzMDAwMUEzODYwMDEwOTI0MjAwMDAyNDQyMDAwMTY1Cis6MTAyMzcwMDBBMjQyMDAwMDNDMDMwODAwOEM2MzAwRjQzMDQyMDBGRkRFCis6MTAyMzgwMDA1MDQzMDAwMUEyNDAwMDAwOTI0MjAwMDA4Rjg0MDAxNERDCis6MTAyMzkwMDAwMDAyMTFDMDI0NDIwMjQwMjQ4MzAwNDAwMDgyMjAyMTE4Cis6MTAyM0EwMDAyNDAyRkY4MDAwODIyMDI0MzA2MzAwN0YzQzAyODAwQUU4Cis6MTAyM0IwMDAwMDYyMTgyMTNDMDI4MDAwQUM0NDAwMjRBRUMzMDAwMDNGCis6MTAyM0MwMDA4RkJGMDA2QzhGQjYwMDY4OEZCNTAwNjQ4RkI0MDA2MDVCCis6MTAyM0QwMDA4RkIzMDA1QzhGQjIwMDU4OEZCMTAwNTQ4RkIwMDA1MEEzCis6MTAyM0UwMDAwM0UwMDAwODI3QkQwMDcwMjdCREZGRDhBRkIzMDAxQzc1Cis6MTAyM0YwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMEYzCis6MTAyNDAwMDAwMDgwOTgyMTAwRTA4MDIxMzBCMUZGRkYwRTAwMEQ0NUQzCis6MTAyNDEwMDAzMEQyMDBGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTAyNDIwMDA4RjgyMDAxODhGODMwMDFDQUM1MTAwMDBBQzUyMDAwNDU2Cis6MTAyNDMwMDBBQzUzMDAwOEFDNDAwMDBDQUM0MDAwMTBBQzQwMDAxNEExCis6MTAyNDQwMDBBQzQwMDAxODk0NjMwMDFFMDIwMzgwMjVBQzUwMDAxQ0IxCis6MTAyNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNDA0MDAwMTUzCis6MTAyNDYwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEYzCis6MTAyNDcwMDA4RkIwMDAxMDBBMDAwRDc5MjdCRDAwMjgzMEE1RkZGRjlFCis6MTAyNDgwMDAwQTAwMDhDODMwQzYwMEZGM0MwMjgwMDgzNDQzMDEwMDNGCis6MTAyNDkwMDA5NDYyMDAwRTNDMDgwODAwOTUwODAwQzYzMDQ2RkZGRjE1Cis6MTAyNEEwMDAxNEMwMDAwNDM0MDJGRkZGOTQ2NTAwREEwQTAwMDkxNTI1Cis6MTAyNEIwMDA4Rjg0MDAxNDEwQzIwMDI3MDAwMDAwMDA5NDYyMDA0RUI4Cis6MTAyNEMwMDA5NDY0MDAzQzMwNDVGRkZGMDBBNjEwMjMwMEE2MTgyQkEzCis6MTAyNEQwMDAzMDg3RkZGRjEwNjAwMDA0MzA0NEZGRkYwMEM1MTAyMzY5Cis6MTAyNEUwMDAwMEUyMTAyMzMwNDRGRkZGMDA4ODEwMkIxMDQwMDAwRTQ0Cis6MTAyNEYwMDAwMEU4MTAyMzNDMDI4MDA4MzQ0NDAxMDAyNDAzMDAwMTVBCis6MTAyNTAwMDAzNDQyMDA4MEE0NDMwMDE2MjQwMkZGRkZBNDgyMDAwRTgwCis6MTAyNTEwMDA5NDg1MDBEQThGODQwMDE0MDAwMDMwMjEzMEE1RkZGRjdECis6MTAyNTIwMDAwQTAwMDhFRDNDMDc2MDIwMDA0NDEwMkExMDQwMDAwOTEyCis6MTAyNTMwMDAzQzAyODAwODM0NDMwMDgwOTQ2MjAwMTYzMDQyMDAwMTVGCis6MTAyNTQwMDAxMDQwMDAwNDNDMDI4MDAwOTQ0MjAwN0UyNDQyMDAxNEFCCis6MTAyNTUwMDBBNDYyMDAxNjAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMEIxCis6MTAyNTYwMDAzQzAyODAwOEFGQkYwMDFDQUZCMDAwMTgzNDQyMDEwMDJECis6MTAyNTcwMDA5NDQzMDA0Mjk0NDIwMDRDMTA0MDAwMTkzMDY4RkZGRjIxCis6MTAyNTgwMDA5MzgzMDAxMDI0MDIwMDAxMTQ2MjAwMjk4RkJGMDAxQ0Y1Cis6MTAyNTkwMDAzQzA2ODAwODM0RDAwMTAwMDAwODEwQzIwMDUwMTAyMTExCis6MTAyNUEwMDA5MDQyMDA1NDMxMDMwMDA3MzRDNzAxNDgzMDQyMDBGRjE1Cis6MTAyNUIwMDAwMDYyMTAwNzMwNDIwMDAxMzRDOTAxNEUzNEM0MDEyQ0JFCis6MTAyNUMwMDAzNEM1MDEzRTEwNDAwMDE2MzRDNjAxNDIwRTAwMDZCRTVFCis6MTAyNUQwMDBBRkE5MDAxMDk2MDIwMDQyMEEwMDA5MzIzMDQ4RkZGRkZFCis6MTAyNUUwMDAzQzAyODAwODM0NDQwMTAwOTQ4MzAwNDQ5NDgyMDA0MkY5Cis6MTAyNUYwMDAxMDQzMDAwRjhGQkYwMDFDOTQ4MjAwNDRBNDgyMDA0MjRECis6MTAyNjAwMDA5NDgyMDA1MEE0ODIwMDRFOEM4MjAwMzhBQzgyMDAzMDRDCis6MTAyNjEwMDA5NDgyMDA0MEE0ODIwMDNFOTQ4MjAwNEFBNDgyMDA0ODMyCis6MTAyNjIwMDA4RkJGMDAxQzhGQjAwMDE4MEEwMDA4RjAyN0JEMDAyMEUzCis6MTAyNjMwMDA4RkIwMDAxODAzRTAwMDA4MjdCRDAwMjAyN0JERkZBMEQxCis6MTAyNjQwMDBBRkIxMDA0QzNDMTE4MDAwQUZCRjAwNThBRkIzMDA1NDk1Cis6MTAyNjUwMDBBRkIyMDA1MEFGQjAwMDQ4MzYyNjAxODg5MEMyMDAwM0U4Cis6MTAyNjYwMDAzMDQ0MDA3RkEzQTQwMDEwOEUzMjAxODA5MEMyMDAwMDhECis6MTAyNjcwMDAzMDQzMDA3RjI0MDIwMDAzMTA2MjAwM0JBRjkyMDAxNDNECis6MTAyNjgwMDAyODYyMDAwNDEwNDAwMDA2MjQwMjAwMDQyNDAyMDAwMjE0Cis6MTAyNjkwMDAxMDYyMDAwOThGQkYwMDU4MEEwMDBBRkI4RkIzMDA1NDc0Cis6MTAyNkEwMDAxMDYyMDA0RDI0MDIwMDA1MTA2MjAxNEU4RkJGMDA1OEQ5Cis6MTAyNkIwMDAwQTAwMEFGQjhGQjMwMDU0MDAwNDExQzAwMjQyMTAyMTJCCis6MTAyNkMwMDAyNDA0RkY4MDI0NDIwMjQwMDA0NDEwMjQyNjQzMDA0MDlBCis6MTAyNkQwMDBBRTIyMDAyNDMwNjMwMDdGM0MwMjgwMEEwMDYyMTgyMTkxCis6MTAyNkUwMDA5MDYyMDAzQ0FGQTMwMDNDMDA0NDEwMjVBMDYyMDAzQzc3Cis6MTAyNkYwMDA4RkEzMDAzQzkwNjIwMDNDMzA0MjAwNDAxMDQwMDE2Q0NGCis6MTAyNzAwMDA4RkJGMDA1ODNDMTA4MDA4QTM4MDAwMTAzNjEwMDEwMEQ1Cis6MTAyNzEwMDA4RTAyMDBEMDhDNjMwMDM0MjdBNDAwM0MyN0E1MDAxMDUzCis6MTAyNzIwMDAwMDQzMTAyMTBFMDAwN0FGQUUwMjAwRDA5M0EyMDAxMEFDCis6MTAyNzMwMDAzQzAzODAwMEEyMDIwMEM1OEM2MjAyNzgwNDQwRkZGRUM4Cis6MTAyNzQwMDA4RjgyMDAxNEFDNjIwMjQwMjQwMjAwMDJBMDYyMDI0NEE0Cis6MTAyNzUwMDAzQzAyMTAwMEFDNjIwMjc4MEUwMDA5MjUwMDAwMDAwMDY3Cis6MTAyNzYwMDAwQTAwMEFGQThGQkYwMDU4M0MwNTgwMDg5MEMzMDAwMTk4Cis6MTAyNzcwMDA5MEEyMDAwQjE0NDMwMTRFOEZCRjAwNTgzNEE0MDA4MDc4Cis6MTAyNzgwMDA4QzgyMDAxODkwODIwMDRDOTBBMjAwMDgzQzAyNjAwMEVECis6MTAyNzkwMDA4QzQyNTQwNDhDODMwMDE4M0MwMjdGRkYzNDQyRkZGRkJDCis6MTAyN0EwMDAwMDYyMTgyNDNDMDIwODAwOEM0MjAwQjRBQzgzMDAxODdDCis6MTAyN0IwMDAzQzAzODAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDBCNDJDCis6MTAyN0MwMDA4QzYyMDFGODA0NDBGRkZFOEY4MjAwMTRBQzYyMDFDMEVECis6MTAyN0QwMDAwQTAwMEFDMjI0MDIwMDAyM0MxMDgwMDg5MEMzMDAwMUQzCis6MTAyN0UwMDA5MjAyMDAwQjE0NDMwMTMyOEZCRjAwNTgyN0E0MDAxODM3Cis6MTAyN0YwMDAzNjA1MDExMDI0MDYwMDAzM0MwMjYwMDA4QzQyNTQwNDlDCis6MTAyODAwMDAwRTAwMEUwODAwMDAwMDAwMjdBNDAwMjgzNjA1MDFFMDk1Cis6MTAyODEwMDAwRTAwMEUwODI0MDYwMDAzOEZBMjAwMjgzNjAzMDEwMEQ0Cis6MTAyODIwMDBBRTAyMDA2NDhGQTIwMDJDQUUwMjAwNjg4RkEyMDAzMEJFCis6MTAyODMwMDBBRTAyMDA2QzkzQTQwMDE4OTA2MzAwQzUyNDAyRkY4MEQwCis6MTAyODQwMDAwMDgyMTAyNDAwNDMxMDI1MzA0OTAwRkYzMDg0MDA3RkFGCis6MTAyODUwMDAzMTIyMDA3RjAwODIxMDJBNTQ0MDAwMDEzOTI5MDA4MDczCis6MTAyODYwMDAwMDA0MTFDMDI0NDIwMjQwMjQwM0ZGODAwMjQyMTAyMUQwCis6MTAyODcwMDAwMDQzMTAyNEFFMjIwMDk0MjY0MjAwNDAzMDQyMDA3RkU0Cis6MTAyODgwMDAzQzAzODAwNjAwNDM0MDIxOEZBMzAwMUMyNDAyRkZGRjZECis6MTAyODkwMDBBRkE4MDA0MDNDMTMwODAwOTI3MzAwRjcxMDYyMDAzM0E5Cis6MTAyOEEwMDA5M0EyMDAxOTk1MDMwMDE0MzA0NDAwRkYzMDYzRkZGRjJBCis6MTAyOEIwMDAwMDY0MTgyQjEwNjAwMDEwMDAwMDAwMDA5NTA0MDAxNDQ0Cis6MTAyOEMwMDA4RDA3MDAxQzhEMDYwMDE4MzA4NEZGRkYwMDQ0MjAyMzc0Cis6MTAyOEQwMDAwMDA0MjEwMDAwRTQzODIxMDAwMDEwMjEwMEU0MjAyQjM2Cis6MTAyOEUwMDAwMEMyMzAyMTAwQzQzMDIxQUQwNzAwMUNBRDA2MDAxODI1Cis6MTAyOEYwMDAwQTAwMEExQjkzQTIwMDE5OTUwNDAwMTQ4RDA3MDAxQ0ZFCis6MTAyOTAwMDA4RDA2MDAxODMwODRGRkZGMDA4MjIwMjMwMDA0MjEwMDgwCis6MTAyOTEwMDAwMDAwMTAyMTAwODAxODIxMDBDMjMwMjMwMEU0MjAyQjg5Cis6MTAyOTIwMDAwMEM0MzAyMzAwRTMzODIzQUQwNzAwMUNBRDA2MDAxOEI3Cis6MTAyOTMwMDA5M0EyMDAxOThGQTMwMDQwQTQ2MjAwMTQ5N0EyMDAxQTZBCis6MTAyOTQwMDBBNDYyMDAxNjhGQTIwMDFDQUM2MjAwMTA4RkEyMDAxQ0IzCis6MTAyOTUwMDBBQzYyMDAwQzkzQTIwMDE5QTQ2MjAwMjA5N0EyMDAxQTk2Cis6MTAyOTYwMDBBNDYyMDAyMjhGQTIwMDFDQUM2MjAwMjQzQzA0ODAwOEY4Cis6MTAyOTcwMDAzNDgzMDA4MDhDNjIwMDM4OEZBMjAwMjAwMTIwODgyMURGCis6MTAyOTgwMDBBQzYyMDAzQzhGQTIwMDIwQUM4MjAwMDA5M0EyMDAxODMxCis6MTAyOTkwMDBBMDYyMDA0QzkzQTIwMDE4QTA4MjAwMDlBMDYwMDA2ODA5Cis6MTAyOUEwMDA5M0EyMDAxODEwNTEwMDUxMjQwN0ZGODAzMjI5MDA3RkE0Cis6MTAyOUIwMDAwMDA5MTFDMDI0NDIwMjQwMDI0MjEwMjEzMDQ2MDA3RjJCCis6MTAyOUMwMDAzQzAzODAwMDAwNDcxMDI0QUM2MjAwOTQzQzAyODAwNjY3Cis6MTAyOUQwMDAwMEMyMzAyMTkwQzIwMDNDQUZBNjAwNDAwMDAwMjAyMTgwCis6MTAyOUUwMDAwMDQ3MTAyNUEwQzIwMDNDOEZBODAwNDA5NTAyMDAwMkJECis6MTAyOUYwMDA5NTAzMDAxNDhEMDcwMDFDMzA0MkZGRkYzMDYzRkZGRjdBCis6MTAyQTAwMDA4RDA2MDAxODAwNDMxMDIzMDAwMjExMDAwMEUyMzgyMTU3Cis6MTAyQTEwMDAwMEUyMTAyQjAwQzQzMDIxMDBDMjMwMjFBRDA3MDAxQ0ExCis6MTAyQTIwMDBBRDA2MDAxODk1MDIwMDAyQTUwMjAwMTRBNTAwMDAxNkNDCis6MTAyQTMwMDA4RDAyMDAwOEFEMDIwMDEwOEQwMjAwMDhBRDAyMDAwQ0VFCis6MTAyQTQwMDA5NTAyMDAwMkE1MDIwMDIwQTUwMDAwMjI4RDAyMDAwOEM4Cis6MTAyQTUwMDBBRDAyMDAyNDkxMDIwMDNDMzA0MjAwNDAxMDQwMDAxQUI4Cis6MTAyQTYwMDAyNjIyMDAwMTNDMTA4MDA4QTNBOTAwMzhBMzgwMDAxMDkyCis6MTAyQTcwMDAzNjEwMDEwMDhFMDIwMEQwOEQwMzAwMzQyN0E0MDA0MEUwCis6MTAyQTgwMDAyN0E1MDAzODAwNDMxMDIxMEUwMDA3QUZBRTAyMDBEMDhBCis6MTAyQTkwMDA5M0EyMDAzODNDMDM4MDAwQTIwMjAwQzU4QzYyMDI3ODM5Cis6MTAyQUEwMDAwNDQwRkZGRThGODIwMDE0QUM2MjAyNDAyNDAyMDAwMjQ4Cis6MTAyQUIwMDBBMDYyMDI0NDNDMDIxMDAwQUM2MjAyNzgwRTAwMDkyNUJDCis6MTAyQUMwMDAwMDAwMDAwMDI2MjIwMDAxMzA0MzAwN0YxNDczMDAwNDQwCis6MTAyQUQwMDAwMDQwMjAyMTI0MDNGRjgwMDIyMzEwMjQwMDQzMjAyNkVECis6MTAyQUUwMDA5M0EyMDAxODBBMDAwQTM3MzA5MTAwRkY5M0E0MDAxODNGCis6MTAyQUYwMDA4RkEzMDAxQzI0MDJGRkZGMTA2MjAwMEEzMDg5MDBGRjMwCis6MTAyQjAwMDAyNDgyMDAwMTI0ODMwMDAxMzA0MjAwN0YxNDUzMDAwNTE5Cis6MTAyQjEwMDAzMDY5MDBGRjI0MDNGRjgwMDA4MzEwMjQwMDQzMTAyNjQ3Cis6MTAyQjIwMDAzMDQ5MDBGRjNDMDI4MDA4OTA0MjAwMDgwMTIwODgyMUMzCis6MTAyQjMwMDAzMDUwMDBGRjEyMzAwMDE5MzIyMjAwN0YwMDAyMTFDMDE1Cis6MTAyQjQwMDAwMjQyMTAyMTI0NDIwMjQwMjQwM0ZGODAwMDQzMTgyNDQzCis6MTAyQjUwMDAzQzA0ODAwMEFDODMwMDk0MzA0MjAwN0YzQzAzODAwNjNDCis6MTAyQjYwMDAwMDQzMTAyMThDNDMwMDBDMDA0MDIwMjExMDYwMDAwQjFBCis6MTAyQjcwMDBBRkEyMDA0MDBFMDAwNTZBMDAwMDAwMDAyNjIzMDAwMUZECis6MTAyQjgwMDAyNDA1RkY4MDMwNjIwMDdGMTQ1MzAwMDIwMjI1MjAyNEI4Cis6MTAyQjkwMDAwMDg1MTgyNjBBMDAwQTlCMzA3MTAwRkYzQzA0ODAwODVCCis6MTAyQkEwMDAzNDg0MDA4MDhDODMwMDE4M0MwMjdGRkYzNDQyRkZGRjk2Cis6MTAyQkIwMDAwMDYyMTgyNEFDODMwMDE4M0MwMzgwMDA4QzYyMDFGODhBCis6MTAyQkMwMDAwNDQwRkZGRTAwMDAwMDAwQUM3MjAxQzAyNDAyMDAwMkJECis6MTAyQkQwMDBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwQTAwMEFGQUNCCis6MTAyQkUwMDA4RkJGMDA1ODNDMDQ4MDA4OTBDMzAwMDE5MDgyMDAwQjA2Cis6MTAyQkYwMDAxNDQzMDAyRjhGQkYwMDU4MzQ5MDAwODA5MjAyMDAwOEM5Cis6MTAyQzAwMDAzMDQyMDA0MDEwNDAwMDIwMDAwMDAwMDA5MjAyMDAwODA2Cis6MTAyQzEwMDAwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMDUwMjQwMjAyMUI0Cis6MTAyQzIwMDAwRTAwMEU4RDI0MDUwMDkzMEEwMDBBRkE4RkJGMDA1ODhCCis6MTAyQzMwMDA5MjAyMDAwOTI0MDMwMDE4MzA0MjAwRkYxNDQzMDAwREUzCis6MTAyQzQwMDAwMjQwMjAyMTI0MDUwMDM5MEUwMDBFMjUwMDAwMzAyMTBECis6MTAyQzUwMDAwRTAwMDM0NThGODQwMDE0OEY4MkZGQTgyNDAzMDAxMjA2Cis6MTAyQzYwMDBBMDQzMDAwOTBFMDAwMzUwOEY4NDAwMTQwQTAwMEFGQUUyCis6MTAyQzcwMDA4RkJGMDA1ODI0MDUwMDM2MEUwMDBFMjUwMDAwMzAyMUJECis6MTAyQzgwMDAwQTAwMEFGQThGQkYwMDU4MEUwMDAzNDUwMjQwMjAyMUI3Cis6MTAyQzkwMDA5MjAyMDAwNThGODQwMDE0MzQ0MjAwMjAwRTAwMDM1MDdECis6MTAyQ0EwMDBBMjAyMDAwNTBFMDAxMDM2OEY4NDAwMTQ4RkJGMDA1ODVBCis6MTAyQ0IwMDA4RkIzMDA1NDhGQjIwMDUwOEZCMTAwNEM4RkIwMDA0OERBCis6MTAyQ0MwMDAwM0UwMDAwODI3QkQwMDYwM0MwMjgwMDgzNDQ1MDEwMDk1Cis6MTAyQ0QwMDAzQzAyODAwMDhDNDIwMTQwOTRBMzAwMEUwMDAwMzAyMTkxCis6MTAyQ0UwMDAwMDQwMjAyMUFGODIwMDE0MzA2M0ZGRkYzNDAyRkZGRjU5Cis6MTAyQ0YwMDAxMDYyMDAwNjNDMDc2MDIwMjQwMkZGRkZBNEEyMDAwRTIxCis6MTAyRDAwMDA5NEE1MDBEQTBBMDAwOEVEMzBBNUZGRkYwM0UwMDAwOEYzCis6MTAyRDEwMDAwMDAwMDAwMDI3QkRGRkM4M0MwMjgwMDAzQzA2ODAwODgwCis6MTAyRDIwMDBBRkI1MDAyQ0FGQjEwMDFDQUZCRjAwMzBBRkI0MDAyODZFCis6MTAyRDMwMDBBRkIzMDAyNEFGQjIwMDIwQUZCMDAwMTgzNDUxMDEwMDhGCis6MTAyRDQwMDAzNEM1MDEwMDhDNDMwMTAwOEUyMjAwMTQ4Q0E0MDBENEYxCis6MTAyRDUwMDAwMDAwQTgyMUFGODMwMDE0MDA0NDEwMjMxODQwMDA1MjQzCis6MTAyRDYwMDBBMzgwMDAxMDhFMjIwMDE0MDAwMDUwMjFBQ0EyMDBENEQ5Cis6MTAyRDcwMDA5MEMzMDAwODkwQTIwMEM1MzA3MzAwN0ZBM0EyMDAxMDhBCis6MTAyRDgwMDA4Q0IyMDBEMDhDQjQwMEQ0MzA0MjAwRkYxMDUzMDAzQjEyCis6MTAyRDkwMDA5M0EyMDAxMDhGODMwMDE0MjQwN0ZGODAwMDAyMTFDMDRCCis6MTAyREEwMDAwMDYyMTAyMTI0NDIwMjQwMjQ2MzAwNDAwMDQ3MTAyNEE2Cis6MTAyREIwMDAzMDYzMDA3RjNDMDk4MDAwM0MwODgwMEEwMDY4MTgyMUNECis6MTAyREMwMDBBRDIyMDAyNDhDNjIwMDM0MjdBNDAwMTQyN0E1MDAxMDMzCis6MTAyREQwMDAwMjQyODAyMTAyOTAxMDIzMDQ0MDAwMjhBRkEzMDAxNDc3Cis6MTAyREUwMDA5MDYyMDAzQzAwRTIxMDI0MzA0MjAwRkYxNDQwMDAxOUMxCis6MTAyREYwMDAwMjAwOTAyMTkwNjIwMDNDMzQ0MjAwNDBBMDYyMDAzQ0ZFCis6MTAyRTAwMDA4Rjg2MDAxNDkzQTMwMDEwMjRDMjAwNDAzMDQyMDA3RjNDCis6MTAyRTEwMDAwMDQ4MjgyMTNDMDIwODAwOEM0MjAwRjQyNDYzMDAwMTkxCis6MTAyRTIwMDAzMDY0MDBGRjE0ODIwMDAyQTNBMzAwMTBBM0EwMDAxMENFCis6MTAyRTMwMDA5M0EyMDAxMEFGQTUwMDE0MDAwMjExQzAyNDQyMDI0MDZBCis6MTAyRTQwMDAwMEMyMTAyMTAwNDcxMDI0QUQyMjAwMjQwQTAwMEIzMURCCis6MTAyRTUwMDA5M0EyMDAxMDBFMDAwN0FGMDAwMDAwMDAzQzAyODAwOEEzCis6MTAyRTYwMDAzNDQyMDEwMEFDNTAwMEQwOTNBMzAwMTAyNDBBMDAwMUFBCis6MTAyRTcwMDBBMDQzMDBDNTBBMDAwQjMxOTNBMjAwMTAyNDAyMDAwMUY4Cis6MTAyRTgwMDAxNTQyMDAwOTNDMDM4MDAwOEM2MjAyNzgwNDQwRkZGRTdBCis6MTAyRTkwMDA4RjgyMDAxNEFDNjIwMjQwMjQwMjAwMDJBMDYyMDI0NDRECis6MTAyRUEwMDAzQzAyMTAwMEFDNjIwMjc4OTIyMjAwMEIyNDAzMDAwMjY0Cis6MTAyRUIwMDAzMDQyMDBGRjE0NDMwMDcyMDAwMDAwMDA5NjIyMDAwODE4Cis6MTAyRUMwMDAzMDQzMDBGRjI0MDIwMDgyMTQ2MjAwNDAyNDAyMDA4NDg4Cis6MTAyRUQwMDAzQzAyODAwMDM0NDkwMTAwOEQyMjAwMEM5NTIzMDAwNjNECis6MTAyRUUwMDAwMDAyMTYwMjMwNjNGRkZGMzA0NTAwM0YyNDAyMDAyNzM2Cis6MTAyRUYwMDAxMEEyMDAwRkFGODMwMDBDMjhBMjAwMjgxMDQwMDAwODg5Cis6MTAyRjAwMDAyNDAyMDAzMTI0MDIwMDIxMTBBMjAwMDkyNDAyMDAyNTFECis6MTAyRjEwMDAxMEEyMDAwNzkzODIwMDExMEEwMDBCQTkwMDAwMDAwMDE0Cis6MTAyRjIwMDAxMEEyMDAwNzkzODIwMDExMEEwMDBCQTkwMDAwMDAwMDA0Cis6MTAyRjMwMDAwRTAwMDc2MzAxMjAyMDIxMEEwMDBDMjkwMDAwMDAwMDc4Cis6MTAyRjQwMDAzQzAzODAwMDhDNjIwMjc4MDQ0MEZGRkU4RjgyMDAxNEY0Cis6MTAyRjUwMDBBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDQzQzAyMTAwMDYzCis6MTAyRjYwMDBBQzYyMDI3ODBBMDAwQzI5MDAwMDAwMDA5NTIzMDAwNkRDCis6MTAyRjcwMDA5MTI0MDAwNThEMjUwMDBDOEQyNjAwMTA4RDI3MDAxODRBCis6MTAyRjgwMDA4RDI4MDAxQzhEMjkwMDIwMjQ0MjAwMDEzQzAxMDgwMEVFCis6MTAyRjkwMDBBNDIzNTJDNjNDMDEwODAwQTAyNDUyQzUzQzAxMDgwMEVECis6MTAyRkEwMDBBQzI1NTJDQzNDMDEwODAwQUMyNjUyRDAzQzAxMDgwMEI0Cis6MTAyRkIwMDBBQzI3NTJEODNDMDEwODAwQUMyODUyREMzQzAxMDgwMDg4Cis6MTAyRkMwMDBBQzI5NTJFMDBBMDAwQzI5QTM4MjAwMTExNDYyMDAwQTA1Cis6MTAyRkQwMDAyNDAyMDA4MTNDMDI4MDA4MzQ0MjAxMDA5NDQ1MDBEQTVBCis6MTAyRkUwMDA5MjI2MDAwNThGODQwMDE0MzBBNUZGRkYzMEM2MDBGRjM1Cis6MTAyRkYwMDAwQTAwMEJFQTNDMDc2MDIxMTQ2MjAwNUMwMDAwMDAwMDNDCis6MTAzMDAwMDA5MjIyMDAwQTMwNDMwMEZGMzA2MjAwMjAxMDQwMDAwNzg3Cis6MTAzMDEwMDAzMDYyMDA0MDNDMDI4MDA4MzQ0MjAxMDA5NDQ1MDBEQUVFCis6MTAzMDIwMDA4Rjg0MDAxNDBBMDAwQkU4MjQwNjAwNDAxMDQwMDAwN0JCCis6MTAzMDMwMDAwMDAzMTYwMDNDMDI4MDA4MzQ0MjAxMDA5NDQ1MDBEQTg3Cis6MTAzMDQwMDA4Rjg0MDAxNDBBMDAwQkU4MjQwNjAwNDEwMDAyMTYwM0Q2Cis6MTAzMDUwMDAwNDQxMDA0NjNDMDI4MDA4MzQ0MjAxMDA5NDQ1MDBEQUY1Cis6MTAzMDYwMDA4Rjg0MDAxNDI0MDYwMDQyMzBBNUZGRkYzQzA3NjAxOTNFCis6MTAzMDcwMDAwRTAwMDhFRDAwMDAwMDAwMEEwMDBDMjkwMDAwMDAwMDBFCis6MTAzMDgwMDA5MjIyMDAwQjI0MDQwMDE2MzA0MjAwRkYxMDQ0MDAwNjc4Cis6MTAzMDkwMDAzQzA2ODAwMDkyMjIwMDBCMjQwMzAwMTczMDQyMDBGRjAwCis6MTAzMEEwMDAxNDQzMDAzMjAwMDAwMDAwMzRDNTAxMDA5MEEyMDAwQjYwCis6MTAzMEIwMDAzMDQyMDBGRjE0NDQwMDBCMDAwMDgwMjE4Q0EyMDAyMDRECis6MTAzMEMwMDA4Q0E0MDAyMDI0MDNGRjgwMDA0MzEwMjQwMDAyMTE0MDQwCis6MTAzMEQwMDAzMDg0MDA3RjAwNDQxMDI1M0MwMzIwMDAwMDQzMTAyNTZECis6MTAzMEUwMDBBQ0MyMDgzMDk0QTIwMDA4MDAwMjE0MDAwMDAyMTQwM0NECis6MTAzMEYwMDAwNDQyMDAwMTI0MTAwMDAxOTRBMjAwMDgzMDQyMDA4MDI0Cis6MTAzMTAwMDA1MDQwMDAxQTAyMDBBODIxOTRBMjAwMDgzMDQyMjAwMDdBCis6MTAzMTEwMDA1MDQwMDAxNjAyMDBBODIxOENBMzAwMTgzQzAyMUMyRDcwCis6MTAzMTIwMDAzNDQyMTlFRDEwNjIwMDExMDIwMEE4MjEzQzAyMDgwMDhGCis6MTAzMTMwMDA4QzQyMDBENDEwNDAwMDA1M0MwMjgwMDgyNDAzMDAwNEE3Cis6MTAzMTQwMDAzNDQyMDEwMEEwNDMwMEVDM0MwMjgwMDgzNDQyMDEwMEZDCis6MTAzMTUwMDA5NDQ1MDBEQThGODQwMDE0MjQwNjAwMDYzMEE1RkZGRjkyCis6MTAzMTYwMDAwRTAwMDhFRDNDMDc2MDIxMDIwMEE4MjEwRTAwMDkyNTkxCis6MTAzMTcwMDAwMDAwMDAwMDkyMjIwMDBBMzA0MjAwMDgxMDQwMDAwNEMzCis6MTAzMTgwMDAwMkEwMTAyMTBFMDAxMzNBMDAwMDAwMDAwMkEwMTAyMTNFCis6MTAzMTkwMDA4RkJGMDAzMDhGQjUwMDJDOEZCNDAwMjg4RkIzMDAyNDcwCis6MTAzMUEwMDA4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwODIwCis6MTAzMUIwMDAyN0JEMDAzODI0MDJGRjgwMDA4MjIwMjQzQzAyOTAwMEJBCis6MTAzMUMwMDAzNDQyMDAwNzAwODIyMDI1M0MwMjgwMDBBQzQ0MDAyMEVECis6MTAzMUQwMDAzQzAzODAwMDhDNjIwMDIwMDQ0MEZGRkUwMDAwMDAwMEUxCis6MTAzMUUwMDAwM0UwMDAwODAwMDAwMDAwM0MwMzgwMDAyNDAyRkY4MDkwCis6MTAzMUYwMDAwMDgyMjAyNDM0NjIwMDA3MDA4MjIwMjVBQzY0MDAyMDc1Cis6MTAzMjAwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDAwM0UwMDAwODg0Cis6MTAzMjEwMDAwMDAwMDAwMDNDMDI4MDA4MjQwMzAwMDUzNDQyMDEwMDQ1Cis6MTAzMjIwMDBBMDQzMDBFQzNDMDI4MDAwOEM0MjAxMDAzQzAzODAwMDgzCis6MTAzMjMwMDBBRjgyMDAxNDhDNjIwMjc4MDQ0MEZGRkU4RjgyMDAxNDdCCis6MTAzMjQwMDBBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDQzQzAyMTAwMDcwCis6MTAzMjUwMDBBQzYyMDI3ODAzRTAwMDA4MDAwMDAwMDAyN0JERkZFODMwCis6MTAzMjYwMDAzQzA2ODAwMEFGQkYwMDEwMzRDNzAxMDA5NEUyMDAwOEE0Cis6MTAzMjcwMDAzMDQ0MDBGRjM4ODMwMDgyMzg4MjAwODQyQzYzMDAwMUQwCis6MTAzMjgwMDAyQzQyMDAwMTAwNjIxODI1MTA2MDAwMkQyNDAyMDA4M0VBCis6MTAzMjkwMDA5MzgyMDAxMTUwNDAwMDM2OEZCRjAwMTAzQzAyMDgwMDlFCis6MTAzMkEwMDA5MDQyNTJDQzhDQzQwMTAwM0MwNjA4MDA5NEM2NTJDNjIxCis6MTAzMkIwMDAzMDQ1MDAzRjM4QTMwMDMyMzhBMjAwM0YyQzYzMDAwMUE0Cis6MTAzMkMwMDAyQzQyMDAwMTAwNjIxODI1QUY4NDAwMTRBRjg2MDAwQzY4Cis6MTAzMkQwMDBBMzgwMDAxMTE0NjAwMDA3MDBFMDIwMjEyNDAyMDAyMEQ4Cis6MTAzMkUwMDAxNEEyMDAxMjAwMDAwMDAwMzQwMkZGRkYxNEMyMDAwRkZECis6MTAzMkYwMDAwMDAwMDAwMDI0MDIwMDIwMTRBMjAwMDUwMEUwMjgyMUE0Cis6MTAzMzAwMDA4Q0UzMDAxNDI0MDJGRkZGNTA2MjAwMEI4RkJGMDAxMEZCCis6MTAzMzEwMDAzQzA0MDgwMDI0ODQ1MkMwMDAwMDMwMjEwRTAwMDZGMjU0Cis6MTAzMzIwMDAyNDA3MDAwMTBBMDAwQzlDOEZCRjAwMTAwRTAwMDc2M0U5Cis6MTAzMzMwMDAwMDAwMDAwMDhGQkYwMDEwMEEwMDA5MjUyN0JEMDAxOEZCCis6MTAzMzQwMDAxNDgyMDAwNjI0ODJGRjgwOENDMzAxMDQzQzAyNjAyMEFBCis6MTAzMzUwMDBBQzQzMDAxNDBBMDAwQ0QyOEZCRjAwMTAzMDQyMDBGRkIzCis6MTAzMzYwMDAyQzQyMDAwMjEwNDAwMDA0MjQwMjAwMjI4RkJGMDAxMEYzCis6MTAzMzcwMDAwQTAwMEIxMzI3QkQwMDE4MTQ4MjAwMDQ4RjgyMDAxQzYyCis6MTAzMzgwMDA4RkJGMDAxMDBBMDAwQzUzMjdCRDAwMTg4QzQyMDAwQ0EwCis6MTAzMzkwMDAxMDQwMDAxRTAwRTAyODIxOTBFMzAwMDkyNDAyMDAxOERDCis6MTAzM0EwMDAxNDYyMDAwMzI0MDIwMDE2MEEwMDBDQkQyNDAzMDAwODY2Cis6MTAzM0IwMDAxNDYyMDAwNzI0MDIwMDE3MjQwMzAwMTIzQzAyODAwODU0Cis6MTAzM0MwMDAzNDQyMDA4MEEwNDMwMDA5MEEwMDBDQ0E5NEE3MDAwOEY4Cis6MTAzM0QwMDA1NDYyMDAwNzk0QTcwMDA4OEY4MkZGQTgyNDA0RkZGRTEwCis6MTAzM0UwMDA5MDQzMDAwNTAwNjQxODI0QTA0MzAwMDU5NEE3MDAwODNBCis6MTAzM0YwMDA5MEE2MDAxQjhDQTQwMDAwOTRBNTAwMDY4RkJGMDAxMEFGCis6MTAzNDAwMDAwMDA3M0MwMDBBMDAwOEM4MjdCRDAwMTg4RkJGMDAxMDQ1Cis6MTAzNDEwMDAwM0UwMDAwODI3QkQwMDE4OEY4NTAwMUMzQzA0ODAwMEQ1Cis6MTAzNDIwMDA5NEEyMDAyQThDQTMwMDM0MDAwMjMwQzAyNDAyRkZGMEQyCis6MTAzNDMwMDAwMEMyMTAyNDAwNjIxODIxQUM4MzAwM0M4Q0EyMDAzMDMyCis6MTAzNDQwMDAzQzAzODAwMEFDODIwMDM4M0MwMjAwNTAzNDQyMDAxMDQzCis6MTAzNDUwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTAzNDYwMDA4QzYyMDAwMDMwNDIwMDIwMTA0MEZGRkQzMEMyMDAwODk2Cis6MTAzNDcwMDAxMDQwMDAwNjNDMDI4MDAwOEM2MjA0MDhBQ0EyMDAyMEQwCis6MTAzNDgwMDA4QzYyMDQwQzBBMDAwQ0Y1QUNBMjAwMjQ4QzQzMDQwMEVFCis6MTAzNDkwMDBBQ0EzMDAyMDhDNDIwNDA0QUNBMjAwMjQzQzAzMDAyMDE2Cis6MTAzNEEwMDAzQzAyODAwMEFDNDMwMDMwM0MwNDgwMDA4QzgyMDAzMDQxCis6MTAzNEIwMDAwMDQzMTAyNDE0NDBGRkZEOEY4NjAwMUMzQzAyMDA0MDk2Cis6MTAzNEMwMDBBQzgyMDAzMDk0QzMwMDJBOTRDMjAwMjg5NEM0MDAyQzFCCis6MTAzNEQwMDA5NEM1MDAyRTI0NjMwMDAxMDA0NDEwMjEzMDY0RkZGRkQ2Cis6MTAzNEUwMDBBNEMyMDAyODE0ODUwMDAyQTRDMzAwMkFBNEMwMDAyQTk0Cis6MTAzNEYwMDAwM0UwMDAwODAwMDAwMDAwOEY4NDAwMUMyN0JERkZFOEU3Cis6MTAzNTAwMDAzQzA1ODAwNDI0ODQwMDEwQUZCRjAwMTAwRTAwMEUwODlDCis6MTAzNTEwMDAyNDA2MDAwQThGODQwMDFDOTQ4MjAwMTI5NDgzMDAyRURCCis6MTAzNTIwMDAzMDQyMDAwRjI0NDIwMDAzMDA0MzE4MDQyNDAyN0ZGRkFFCis6MTAzNTMwMDAwMDQzMTAyQjEwNDAwMDAyQUM4MzAwMDAwMDAwMDAwRDdGCis6MTAzNTQwMDAwRTAwMENENDAwMDAwMDAwOEY4MzAwMUM4RkJGMDAxMDAxCis6MTAzNTUwMDAyN0JEMDAxODk0NjIwMDE0OTQ2MzAwMUEzMDQyMDAwRkQzCis6MTAzNTYwMDAwMDAyMTUwMDAwNjIxODI1M0MwMjgwMDAwM0UwMDAwOEZDCis6MTAzNTcwMDBBQzQzMDBBMDhGODMwMDFDM0MwMjgwMDQ5NDQ0MDAwNkVFCis6MTAzNTgwMDA5NDYyMDAxQThDNjUwMDAwQTQ2NDAwMTYwMDQ0MTAyM0E1Cis6MTAzNTkwMDAzMDQyRkZGRjAwNDUxMDJCMDNFMDAwMDgzODQyMDAwMUQ1Cis6MTAzNUEwMDA4Rjg0MDAxQzNDMDc4MDA0OTQ4NjAwMUE4Qzg1MDAwMEUwCis6MTAzNUIwMDA5NEUyMDAwNkE0ODIwMDE2OTRFMzAwMDYwMEMzMTAyM0UwCis6MTAzNUMwMDAzMDQyRkZGRjAwNDUxMDJCMzg0MjAwMDExNDQwRkZGODQ1Cis6MTAzNUQwMDBBNDgzMDAxNjAzRTAwMDA4MDAwMDAwMDA4Rjg0MDAxQzk0Cis6MTAzNUUwMDAzQzAyODAwNDk0NDIwMDA2OTQ4MzAwMUE4Qzg1MDAwMEZCCis6MTAzNUYwMDBBNDgyMDAxNjAwNjIxMDIzMzA0MkZGRkYwMDQ1MTAyQjBBCis6MTAzNjAwMDAzODQyMDAwMTUwNDAwMDBEOEY4NTAwMUMwMDYwMzAyMUMxCis6MTAzNjEwMDAzQzA3ODAwNDk0RTIwMDA2QTQ4MjAwMTY5NEUzMDAwNkFFCis6MTAzNjIwMDAwMEMzMTAyMzMwNDJGRkZGMDA0NTEwMkIzODQyMDAwMTM5Cis6MTAzNjMwMDAxNDQwRkZGOEE0ODMwMDE2OEY4NTAwMUMzQzAzODAwMDEzCis6MTAzNjQwMDAzNDYyMDQwMDhDQTQwMDIwQUY4MjAwMThBQzY0MDAzOEZGCis6MTAzNjUwMDA4Q0EyMDAyNEFDNjIwMDNDM0MwMjAwMDVBQzYyMDAzMDRECis6MTAzNjYwMDAwM0UwMDAwOEFDQTAwMDA0OEY4NDAwMUMzQzAzMDAwNkFCCis6MTAzNjcwMDA4QzgyMDAwNDAwMDIxMTQwMDA0MzEwMjUzQzAzODAwMEFFCis6MTAzNjgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTAzNjkwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkQzNDYyMDQwMEQ0Cis6MTAzNkEwMDBBQzgwMDAwNDAzRTAwMDA4QUY4MjAwMTg4Rjg2MDAxQzg1Cis6MTAzNkIwMDAyN0JERkZFMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxOERFCis6MTAzNkMwMDA4Q0MzMDAwNDhDQzUwMDI0OEY4MjAwMTgzMDkwMDBGRjRBCis6MTAzNkQwMDA5NEM0MDAxQTI0NjMwMDAxMjQ0MjAwMjAyNDg0MDAwMUMxCis6MTAzNkUwMDAyNEE3MDAyMEFDQzMwMDA0QUY4MjAwMThBNEM0MDAxQUIxCis6MTAzNkYwMDBBQ0M3MDAyNDA0QTEwMDA2MDAwMDg4MjEwNEUyMDAwNUY0Cis6MTAzNzAwMDA5NEMyMDAxQThDQzIwMDIwMjQ0MjAwMDFBQ0MyMDAyMEU2Cis6MTAzNzEwMDA5NEMyMDAxQTk0QzMwMDI4MkUwNDAwMDEwMDQzMTAyNjBFCis6MTAzNzIwMDAyQzQyMDAwMTAwNDQxMDI0NTA0MDAwMDU5NEMyMDAxQUFECis6MTAzNzMwMDAyNDAyMDAwMUFDQzIwMDA4OTRDMjAwMUE5NEMzMDAyOEZECis6MTAzNzQwMDAwMDEwMjAyQjAwNDMxMDI2MkM0MjAwMDEwMDQ0MTAyNUJECis6MTAzNzUwMDAxNDQwMDAwNzAwMDAwMDAwOENDMjAwMDgxNDQwMDAwNDYwCis6MTAzNzYwMDAyNDAyMDAxMDhDQzMwMDA0MTQ2MjAwMEY4Rjg1MDAxQzFCCis6MTAzNzcwMDAwRTAwMEQ2ODI0MTEwMDAxOEY4MjAwMUM5NDQzMDAyODY0Cis6MTAzNzgwMDA5NDQyMDAxQTE0NDMwMDAzMDAwMDAwMDAwRTAwMENENDAxCis6MTAzNzkwMDAwMDAwMDAwMDE2MDAwMDA0OEY4NTAwMUMwRTAwMEQ0NTdGCis6MTAzN0EwMDAwMDAwMDAwMDhGODUwMDFDOTRBMjAwMUU5NEE0MDAxQzQxCis6MTAzN0IwMDAyNDQyMDAwMTMwNDNGRkZGMTQ2NDAwMDJBNEEyMDAxRTUzCis6MTAzN0MwMDBBNEEwMDAxRTEyMDAwMDBBM0MwMjgwMDQ5NEEyMDAxNDZGCis6MTAzN0QwMDA5NEEzMDAxQTMwNDIwMDBGMDAwMjE1MDAwMDYyMTgyNTYxCis6MTAzN0UwMDAzQzAyODAwMEFDNDMwMEEwMEEwMDBEREZBQ0EwMDAwODQyCis6MTAzN0YwMDA5NDQyMDAwNjk0QTMwMDFBOENBNDAwMDBBNEEyMDAxNjEwCis6MTAzODAwMDAwMDYyMTAyMzMwNDJGRkZGMDA0NDEwMkIzODQyMDAwMUI5Cis6MTAzODEwMDAxMDQwMDAwRDAyMjAxMDIxMDA2MDMwMjEzQzA3ODAwNDgwCis6MTAzODIwMDA5NEUyMDAwNkE0QTIwMDE2OTRFMzAwMDYwMEMzMTAyMzRECis6MTAzODMwMDAzMDQyRkZGRjAwNDQxMDJCMzg0MjAwMDExNDQwRkZGOEQzCis6MTAzODQwMDBBNEEzMDAxNjAyMjAxMDIxOEZCRjAwMTg4RkIxMDAxNDBFCis6MTAzODUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAwM0UwMDAwODNGCis6MTAzODYwMDAwMDAwMDAwMDhGODIwMDI0M0MwMzAwMDYwMDAyMTE0MDhCCis6MTAzODcwMDAwMDQzMTAyNTNDMDM4MDAwQUM2MjAwMzAwMDAwMDAwMEQzCis6MTAzODgwMDAwMDAwMDAwMDAwMDAwMDAwOEM2MjAwMDAzMDQyMDAxMEM4Cis6MTAzODkwMDAxMDQwRkZGRDM0NjIwNDAwQUY4MjAwMjAwM0UwMDAwODA2Cis6MTAzOEEwMDBBRjgwMDAyNDAzRTAwMDA4MDAwMDEwMjEwM0UwMDAwOEJFCis6MTAzOEIwMDAwMDAwMDAwMDMwODRGRkZGMzBBNUZGRkYwMDAwMTgyMTRBCis6MTAzOEMwMDAxMDgwMDAwNzAwMDAwMDAwMzA4MjAwMDExMDQwMDAwMjVDCis6MTAzOEQwMDAwMDA0MjA0MjAwNjUxODIxMEEwMDBERkUwMDA1Mjg0MDYyCis6MTAzOEUwMDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDYyNEM2RkZGRjlFCis6MTAzOEYwMDA4Q0EyMDAwMDI0QTUwMDA0QUM4MjAwMDAwQTAwMEUwODdGCis6MTAzOTAwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwODY4Cis6MTAzOTEwMDAyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTAzOTIwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNEQzCis6MTAzOTMwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDgzNDQyMDA4MEUwCis6MTAzOTQwMDAyNDAzMDAwMUFDNDMwMDBDQTQ0MzAwMTBBNDQzMDAxMjY0Cis6MTAzOTUwMDBBNDQzMDAxNDAzRTAwMDA4QTQ0MzAwMTY4RjgyMDAxQzU3Cis6MTAzOTYwMDAyN0JERkZEOEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNDMxCis6MTAzOTcwMDBBRkIwMDAxMEFGQkYwMDIwOEM0NzAwMEMyNDgyMDA4MDQ1Cis6MTAzOTgwMDAyNDA5RkY4MDNDMDg4MDBFMzA0MzAwN0YwMDgwODAyMUE2Cis6MTAzOTkwMDAzQzBBODAwMDAwNDkyMDI0MDA2ODE4MjEzMEIxMDBGRjUzCis6MTAzOUEwMDAzMEQyMDBGRjEwRTAwMDI5MDAwMDk4MjEyNjAyMDEwMDFCCis6MTAzOUIwMDBBRDQ0MDAyQzAwNDkyODI0MzA0MjAwN0YwMDQ4MjAyMURCCis6MTAzOUMwMDA5MDYyMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNEMyCis6MTAzOUQwMDAwMDAwMDAwMEFENDUwMDJDOTQ4MjAwREEzMDUzRkZGRjU4Cis6MTAzOUUwMDAwRTAwMEQ0NTAwMDAwMDAwOEY4MjAwMUM4RjgzMDAxODIwCis6MTAzOUYwMDAwMDExMkMwMDk0NDIwMDFFMDAxMjI0MDAzNDg0MDAwMUE3Cis6MTAzQTAwMDAwMEEyMjgyNTNDMDI0MDAwMDBBMjI4MjVBQzcwMDAwMDNFCis6MTAzQTEwMDA4RkJGMDAyMEFDNjAwMDA0OEZCMjAwMThBQzczMDAwOEE4Cis6MTAzQTIwMDA4RkIxMDAxNEFDNjAwMDBDOEZCMzAwMUNBQzY0MDAxMEFDCis6MTAzQTMwMDA4RkIwMDAxMEFDNjAwMDE0MjQwNDAwMDFBQzYwMDAxOENBCis6MTAzQTQwMDAyN0JEMDAyODBBMDAwRDc5QUM2NTAwMUM4RkJGMDAyMDNGCis6MTAzQTUwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDBDCis6MTAzQTYwMDAwM0UwMDAwODI3QkQwMDI4M0MwNjgwMDAzNEMyMDEwMEE2Cis6MTAzQTcwMDA5MDQzMDAwRjI0MDIwMDEwMTA2MjAwMEUyODY1MDAxMTEwCis6MTAzQTgwMDAxMEEwMDAwNzI0MDIwMDEyMjQwMjAwMDgyNDA1MDAzQUI2Cis6MTAzQTkwMDAxMDYyMDAwNjAwMDAzMDIxMDNFMDAwMDgwMDAwMDAwMDcyCis6MTAzQUEwMDAyNDA1MDAzNTE0NjJGRkZDMDAwMDMwMjEwQTAwMEUyNUI5Cis6MTAzQUIwMDAwMDAwMDAwMDhDQzIwMDc0OEY4M0ZGQTgyNDQyMEZBMDc2Cis6MTAzQUMwMDAwM0UwMDAwOEFDNjIwMDBDMjdCREZGRThBRkJGMDAxMEE4Cis6MTAzQUQwMDAwRTAwMDM1NTI0MDUwMDAxM0MwNDgwMDg4RkJGMDAxMDMwCis6MTAzQUUwMDAyNDAyMDAwMTM0ODMwMDgwQTQ2MjAwMTIyN0JEMDAxODY0Cis6MTAzQUYwMDAyNDAyMDAwMTAzRTAwMDA4QTA4MDAwMUEyN0JERkZFMEI3Cis6MTAzQjAwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQ0NGCis6MTAzQjEwMDAzMEIyRkZGRjBFMDAwMzQ1MDA4MDg4MjEzQzAyODAwODgwCis6MTAzQjIwMDAzNDUwMDA4MDkyMDIwMDA5MjQwMzAwMDQzMDQyMDBGRjU4Cis6MTAzQjMwMDAxNDQzMDAwQzNDMDI4MDA4MTI0MDAwMDgyNDAyMDAwQUQyCis6MTAzQjQwMDAwRTAwMEUxQzAwMDAwMDAwOTIwMjAwMDUyNDAzRkZGRTgwCis6MTAzQjUwMDAwMDQzMTAyNEEyMDIwMDA1MjQwMjAwMTJBMjAyMDAwOTYwCis6MTAzQjYwMDAzQzAyODAwODM0NDIwMDgwMDIyMDIwMjEwRTAwMDM1MEQ1Cis6MTAzQjcwMDBBMDQwMDAyNzE2NDAwMDAzMDIyMDIwMjEwRTAwMEU4MEU2Cis6MTAzQjgwMDAwMDAwMDAwMDAyMjAyMDIxMzI0NjAwRkY4RkJGMDAxQ0YxCis6MTAzQjkwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAzOEM4Cis6MTAzQkEwMDAwQTAwMEUyNTI3QkQwMDIwMjdCREZGRTBBRkJGMDAxQzg3Cis6MTAzQkIwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAwRTAwMDM0NTUzCis6MTAzQkMwMDAwMDgwODAyMTBFMDAwRTFDMDAwMDAwMDAzQzAyODAwOEQ2Cis6MTAzQkQwMDAzNDQ1MDA4MDkwQTIwMDA5MjQxMjAwMTgzMDUxMDBGRkUzCis6MTAzQkUwMDAxMjMyMDAwMzAyMDAyMDIxMjQwMjAwMTJBMEEyMDAwOUM4Cis6MTAzQkYwMDA5MEEyMDAwNTI0MDNGRkZFMDA0MzEwMjQwRTAwMDM1MDkyCis6MTAzQzAwMDBBMEEyMDAwNTAyMDAyMDIxMjQwNTAwMjAxNjMyMDAwNzkyCis6MTAzQzEwMDAwMDAwMzAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDNDCis6MTAzQzIwMDA4RkIwMDAxMDBBMDAwMzU1MjdCRDAwMjA4RkJGMDAxQzc1Cis6MTAzQzMwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAzOTI2Cis6MTAzQzQwMDAwQTAwMEUyNTI3QkQwMDIwMjdCREZGRTgzQzAyODAwMEFBCis6MTAzQzUwMDBBRkIwMDAxMEFGQkYwMDE0MzQ0MjAxMDA5NDQyMDAwQzFBCis6MTAzQzYwMDAyNDA1MDAzNjAwODA4MDIxMTQ0MDAwMTIzMDQ2MDBGRkY5Cis6MTAzQzcwMDAwRTAwMDM0NTAwMDAwMDAwM0MwMjgwMDgzNDQyMDA4MDMyCis6MTAzQzgwMDAyNDAzMDAxMkEwNDMwMDA5OTA0MzAwMDUzNDYzMDAxMDkwCis6MTAzQzkwMDAwRTAwMEUxQ0EwNDMwMDA1MEUwMDAzNTAwMjAwMjAyMTYwCis6MTAzQ0EwMDAwMjAwMjAyMTBFMDAwMzU1MjQwNTAwMjAwQTAwMEVGRDBECis6MTAzQ0IwMDAwMDAwMDAwMDBFMDAwRTI1MDAwMDAwMDAwRTAwMDM0NTZECis6MTAzQ0MwMDAwMjAwMjAyMTNDMDI4MDA4OTA0MzAwMUIyNDA1RkY5RjM2Cis6MTAzQ0QwMDAwMjAwMjAyMTAwNjUxODI0OEZCRjAwMTQ4RkIwMDAxMDRGCis6MTAzQ0UwMDBBMDQzMDAxQjBBMDAwMzUwMjdCRDAwMTgyN0JERkZFMEJBCis6MTAzQ0YwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTAzMEIxMDBGRjdCCis6MTAzRDAwMDAwRTAwMDM0NTAwODA4MDIxM0MwMjgwMDgyNDAzMDAxMjNECis6MTAzRDEwMDAzNDQyMDA4MDBFMDAwRTFDQTA0MzAwMDkwRTAwMDM1MDI4Cis6MTAzRDIwMDAwMjAwMjAyMTAyMDAyMDIxMDIyMDMwMjE4RkJGMDAxODM0Cis6MTAzRDMwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzUwQTAwMEUyNTQ1Cis6MTAzRDQwMDAyN0JEMDAyMDNDMDQ4MDA4OTA4MzAwMEU5MDgyMDAwQTZBCis6MTAzRDUwMDAxNDQzMDAwQjAwMDAyODIxOEY4MkZGQTgyNDAzMDA1MDg5Cis6MTAzRDYwMDAyNDA1MDAwMTkwNDIwMDAwMzA0MjAwRkYxNDQzMDAwNDhCCis6MTAzRDcwMDAwMDAwMDAwMDkwODIwMDBFMjQ0MjAwMDFBMDgyMDAwRThDCis6MTAzRDgwMDAwM0UwMDAwODAwQTAxMDIxM0MwMzgwMDA4QzYyMDFGOEQxCis6MTAzRDkwMDAwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzBBMDYyMDFDNDIyCis6MTAzREEwMDAzQzAyMTAwMDAzRTAwMDA4QUM2MjAxRjgyN0JERkZFMDEwCis6MTAzREIwMDBBRkIyMDAxODNDMTI4MDA4QUZCMTAwMTRBRkJGMDAxQ0I2Cis6MTAzREMwMDBBRkIwMDAxMDM2NTEwMDgwOTIyMjAwMDkyNDAzMDAwQThGCis6MTAzREQwMDAzMDQyMDBGRjE0NDMwMDNFMDAwMDAwMDA4RTQzMDAwNDA4Cis6MTAzREUwMDA4RTIyMDAzODUwNjIwMDgwOEZCRjAwMUM5MjIyMDAwMDlCCis6MTAzREYwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMjUzQzAyODAwMEExCis6MTAzRTAwMDA4QzQyMDE0MDhFNDMwMDA0MzY0MjAxMDAwMjIwMjgyMUVBCis6MTAzRTEwMDBBQzQzMDAxQzk2MjIwMDVDOEUyMzAwMzgzMDQyRkZGRjJBCis6MTAzRTIwMDAwMDAyMTA0MDAwNjIxODIxQUUyMzAwMUM4RTQzMDAwNEUzCis6MTAzRTMwMDA4RTI0MDAzODk2MjIwMDVDMDA2NDE4MjMzMDQyRkZGRjc1Cis6MTAzRTQwMDAwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkExMDQwMDAwNkVGCis6MTAzRTUwMDAwMDAwMDAwMDhFNDIwMDA0OEUyMzAwMzgwMDQzMTAyMzJGCis6MTAzRTYwMDAwQTAwMEY2QjAwMDIyMDQzOTYyMjAwNUMzMDQyRkZGRkU1Cis6MTAzRTcwMDAwMDAyMjA0MDNDMDI4MDA4MzQ0MzAxMDAzNDQyMDA4MEFDCis6MTAzRTgwMDBBQ0E0MDAyQ0EwNDAwMDI0MjQwMjAwMDFBMDYyMDAwQzdECis6MTAzRTkwMDAwRTAwMEYxRjAwMDAwMDAwMTA0MDAwNTM4RkJGMDAxQ0Q5Cis6MTAzRUEwMDAzQzAyODAwMDhDNDQwMTQwM0MwMzgwMDA4QzYyMDFGODlECis6MTAzRUIwMDAwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzBBMDYyMDFDNDAxCis6MTAzRUMwMDAzQzAyMTAwMEFDNjIwMUY4MEEwMDBGQzg4RkJGMDAxQzUyCis6MTAzRUQwMDA5MjIyMDAwOTI0MDMwMDEwMzA0MjAwRkYxNDQzMDAwNDIyCis6MTAzRUUwMDAzQzAyODAwMDhDNDQwMTQwMEEwMDBGQUYwMDAwMjgyMUYyCis6MTAzRUYwMDA5MjIyMDAwOTI0MDMwMDE2MzA0MjAwRkYxNDQzMDAwNkZBCis6MTAzRjAwMDAyNDAyMDAxNEEyMjIwMDA5M0MwMjgwMDA4QzQ0MDE0MERCCis6MTAzRjEwMDAwQTAwMEZDMjhGQkYwMDFDOEUyMjAwMzg4RTIzMDAzQzg3Cis6MTAzRjIwMDAwMDQzMTAyMzA0NDEwMDMwOEZCRjAwMUM5MjIyMDAyNzYxCis6MTAzRjMwMDAyNDQyMDAwMUEyMjIwMDI3OTIyMjAwMjcyQzQyMDAwNEUyCis6MTAzRjQwMDAxNDQwMDAxNjNDMTA4MDAwOTIyMjAwMDkyNDAzMDAwNDUzCis6MTAzRjUwMDAzMDQyMDBGRjE0NDMwMDA5M0MwMjgwMDA4QzQ0MDE0MEMxCis6MTAzRjYwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEVCCis6MTAzRjcwMDAyNDA1MDA5MzBBMDAwRThEMjdCRDAwMjA4QzQ0MDE0MENCCis6MTAzRjgwMDAyNDA1MDA5MzhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDVFCis6MTAzRjkwMDA4RkIwMDAxMDBBMDAwRjA5MjdCRDAwMjA4RTA0MDE0MEQ5Cis6MTAzRkEwMDAwRTAwMDM0NTAwMDAwMDAwOEU0MjAwMDQyNDQyRkZGRjgzCis6MTAzRkIwMDBBRTQyMDAwNDhFMjIwMDNDMjQ0MkZGRkZBRTIyMDAzQ0IxCis6MTAzRkMwMDAwRTAwMDM1MDhFMDQwMTQwOEUwNDAxNDA4RkJGMDAxQzgwCis6MTAzRkQwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAwNEI4Cis6MTAzRkUwMDAwQTAwMDM1NTI3QkQwMDIwOEZCMjAwMTg4RkIxMDAxNEJFCis6MTAzRkYwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAzQzA2ODAwMEMxCis6MTA0MDAwMDA4Q0MyMDE4ODNDMDM4MDA4MzQ2NTAwODA5MDYzMDAwRUY4Cis6MTA0MDEwMDAwMDAyMTQwMjMwNDQwMEZGMzA2MzAwRkYxNDY0MDAwRUZECis6MTA0MDIwMDAzQzAyODAwODkwQTIwMDI2MzA0MjAwRkYxMDQ0MDAwOUE0Cis6MTA0MDMwMDA4RjgyRkZBOEEwQTQwMDI2MjQwMzAwNTA5MDQyMDAwMDE1Cis6MTA0MDQwMDAzMDQyMDBGRjE0NDMwMDA2MDAwMDAwMDAwQTAwMDU4RDA2Cis6MTA0MDUwMDA4Q0M0MDE4MDNDMDI4MDA4MzQ0MjAwODBBMDQ0MDAyNkM5Cis6MTA0MDYwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRTAzMEU3MDBGRjhDCis6MTA0MDcwMDBBRkIyMDAxOEFGQkYwMDFDQUZCMTAwMTRBRkIwMDAxMDVBCis6MTA0MDgwMDAwMDgwOTAyMTE0RTAwMDA2MzBDNjAwRkYwMDAwMDAwMDEwCis6MTA0MDkwMDAwMDAwMDAwRDAwMDAwMDAwMEEwMDEwMjEyNDAwMDEwRUE1Cis6MTA0MEEwMDAzQzAzODAwODkwNjIwMDBFMzA0MjAwRkYxNDQ2MDAyMzVCCis6MTA0MEIwMDAzNDYyMDA4MDkwNDIwMDI2MzA0MjAwRkYxNDQ2MDAxRjA4Cis6MTA0MEMwMDAwMDAwMDAwMDkwNjIwMDBGMzA0MjAwRkYxNDQ2MDAxQjA5Cis6MTA0MEQwMDAwMDAwMDAwMDkwNjIwMDBBMzA0MjAwRkYxNDQ2MDAwMzE2Cis6MTA0MEUwMDA4RjkwRkZBODAwMDAwMDBEOEY5MEZGQTg4RjgyRkZBQzdCCis6MTA0MEYwMDAzQzExODAwMEFFMDUwMDNDQUM0NTAwMDBBMDY2MDAwQTAzCis6MTA0MTAwMDAwRTAwMDM0NThFMjQwMTAwQTIwMDAwMjQwRTAwMDM1MDdGCis6MTA0MTEwMDA4RTI0MDEwMDNDMDM4MDAwOEM2MjAxRjgwNDQwRkZGRTA1Cis6MTA0MTIwMDAyNDAyMDAwMkFDNzIwMUMwQTA2MjAxQzQzQzAyMTAwMDczCis6MTA0MTMwMDBBQzYyMDFGODBBMDAxMDIyOEZCRjAwMUMwMDAwMDAwMEQyCis6MTA0MTQwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAxMzc4RkJGMDAxQzlDCis6MTA0MTUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODc4Cis6MTA0MTYwMDAyN0JEMDAyMDhGODNGRkE4M0MwMjgwMDA4QzQ0MDEwMDAzCis6MTA0MTcwMDAzNDQyMDEwMDhDNjUwMDNDOTA0NjAwMUIwQTAwMEZFOEE5Cis6MTA0MTgwMDAyNDA3MDAwMTNDMDI4MDA4OTA0MzAwMEU5MDQyMDAwQTgwCis6MTA0MTkwMDAwMDQzMTAyNjMwNDIwMEZGMDNFMDAwMDgwMDAyMTAyQjBECis6MTA0MUEwMDAyN0JERkZFMDNDMDI4MDA4QUZCMTAwMTRBRkIwMDAxMEEzCis6MTA0MUIwMDBBRkJGMDAxODM0NTAwMDgwOTIwMjAwMDUyNDAzMDAzMDg1Cis6MTA0MUMwMDAzMDQyMDAzMDE0NDMwMDg1MDA4MDg4MjE4RjgyMDAxQzFCCis6MTA0MUQwMDA4QzQyMDAwQzEwNDAwMDgyOEZCRjAwMTgwRTAwMEQ0NTZECis6MTA0MUUwMDAwMDAwMDAwMDhGODYwMDE4QUNEMTAwMDA5MjAyMDAwODg5Cis6MTA0MUYwMDA5MjAzMDAwOTMwNDIwMEZGMDAwMjEyMDAzMDYzMDBGRjBBCis6MTA0MjAwMDAwMDQzMTAyNUFDQzIwMDA0OTIwMjAwNEQwMDAyMTYwMENCCis6MTA0MjEwMDAwMDAyMTYwMzA0NDEwMDA1MDAwMDAwMDAzQzAzMDgwMEYyCis6MTA0MjIwMDA4QzYzMDA0ODBBMDAxMDYwM0MxMDgwMDg5MjAyMDAwODZECis6MTA0MjMwMDAzMDQyMDA0MDE0NDAwMDAzMDAwMDE4MjE5MjAyMDAyNzgxCis6MTA0MjQwMDAzMDQzMDBGRjNDMTA4MDA4MzYxMTAwODA5MjIyMDA0RDYwCis6MTA0MjUwMDAwMDAzMUUwMDMwNDIwMEZGMDAwMjE0MDAwMDYyMTgyNTE3Cis6MTA0MjYwMDBBQ0MzMDAwODhFMjQwMDMwOEY4MjAwMUNBQ0M0MDAwQzRDCis6MTA0MjcwMDA4RTI1MDAzNDk0NDMwMDFFM0MwMkMwMEJBQ0M1MDAxMEQ4Cis6MTA0MjgwMDAwMDYyMTgyNThFMjIwMDM4MDAwMDIwMjFBQ0MyMDAxNEU0Cis6MTA0MjkwMDA4RTIyMDAzQ0FDQzIwMDE4MEUwMDBENzlBQ0MzMDAxQzhECis6MTA0MkEwMDA4RTAyMDAwNDhGODQwMDE4M0MwNTgwMDBBQzgyMDAwMDYwCis6MTA0MkIwMDA4RTIyMDAyMEFDODIwMDA0OEUyMjAwMUNBQzgyMDAwOEZBCis6MTA0MkMwMDA4RTIyMDA1ODhDQTMwMDc0MDA0MzEwMjFBQzgyMDAwQzk1Cis6MTA0MkQwMDA4RTIyMDAyQ0FDODIwMDEwOEUyMjAwNDA4RTIzMDA0NERGCis6MTA0MkUwMDAwMDAyMTQwMDAwNDMxMDI1QUM4MjAwMTQ5MjIyMDA0REZECis6MTA0MkYwMDAyNDAzMDA4MDMwNDIwMEZGMTQ0MzAwMDQwMDAwMDAwMDRCCis6MTA0MzAwMDBBQzgwMDAxODBBMDAxMEE0OEY4MjAwMUM4RTIzMDAwQ0MxCis6MTA0MzEwMDAyNDAyMDAwMTEwNjIwMDBFMjQwMkZGRkY5MjIyMDAwODE2Cis6MTA0MzIwMDAzMDQyMDA0MDE0NDAwMDBBMjQwMkZGRkY4RTIzMDAwQzlDCis6MTA0MzMwMDA4Q0EyMDA3NDAwNjIxODIzM0MwMjA4MDAwMDYyMTAyNDYyCis6MTA0MzQwMDAxNDQwMDAwMjAwMDAyODIxMDA2MDI4MjEwMDA1MTA0M0NECis6MTA0MzUwMDBBQzgyMDAxODhGODIwMDFDMDAwMDIwMjE5NDQzMDAxRUI0Cis6MTA0MzYwMDAzQzAyQzAwQzAwNjIxODI1OEY4MjAwMTgwRTAwMEQ3OUU3Cis6MTA0MzcwMDBBQzQzMDAxQzNDMDM4MDA4MzQ2MjAxMDA4QzQyMDAwMDA2Cis6MTA0MzgwMDA4Rjg1MDAxODM0NjMwMDgwOEZCRjAwMThBQ0EyMDAwMDM2Cis6MTA0MzkwMDBBQ0EwMDAwNDhDNjQwMDQ4OEY4MjAwMUM4RkIxMDAxNDE0Cis6MTA0M0EwMDBBQ0E0MDAwOEFDQTAwMDBDQUNBMDAwMTA5MDYzMDAwNTA5Cis6MTA0M0IwMDA5NDQ2MDAxRTNDMDI0MDBEMDAwMzFFMDAwMEMyMzAyNTQyCis6MTA0M0MwMDBBQ0EzMDAxNDhGQjAwMDEwQUNBMDAwMTgyNDA0MDAwMUFFCis6MTA0M0QwMDBBQ0E2MDAxQzBBMDAwRDc5MjdCRDAwMjA4RkJGMDAxODc1Cis6MTA0M0UwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDNCCis6MTA0M0YwMDAzQzAyODAwMDk0NDMwMDdDM0MwMjgwMDgzNDQ2MDEwMDZCCis6MTA0NDAwMDAzMDg0MDBGRjMwNjVGRkZGMjQwMjAwMDUyNEEzNDY1MERFCis6MTA0NDEwMDBBMEM0MDAwQzU0ODIwMDBDMzA2NUZGRkY5MEMyMDAwRDU4Cis6MTA0NDIwMDAyQzQyMDAwNzEwNDAwMDA3MjRBMzBBMDA5MEMzMDAwRDhGCis6MTA0NDMwMDAyNDAyMDAxNDAwNjIxMDA0MDBBMjEwMjEwQTAwMTBFMEZGCis6MTA0NDQwMDAzMDQ1RkZGRjMwNjVGRkZGM0MwMjgwMDgzNDQyMDA4MEFBCis6MTA0NDUwMDAwM0UwMDAwOEE0NDUwMDE0M0MwMzgwMDgzNDY4MDA4MDkxCis6MTA0NDYwMDBBRDA1MDAzODM0NjcwMTAwOENFMjAwMUMzMDg0MDBGRjg5Cis6MTA0NDcwMDAwMEEyMTAyMzE4NDAwMDAzMzBDNjAwRkYyNEEyRkZGQzU2Cis6MTA0NDgwMDBBQ0UyMDAxQzMwODIwMDAxNTA0MDAwMDgzQzAzODAwODcwCis6MTA0NDkwMDA4RDAyMDAzQzAwQTIxMDIzMDQ0MTAwMTIyNDA0MDAwNUY4Cis6MTA0NEEwMDA4QzYyMDAwNDEwQTIwMDBGM0MwMzgwMDg4QzYyMDAwNEEwCis6MTA0NEIwMDAxNEEyMDAxRTAwMDAwMDAwM0MwMjA4MDA4QzQyMDBEODNDCis6MTA0NEMwMDAzMDQyMDAyMDEwNDAwMDA5M0MwMjgwMDgzNDYyMDA4MDI1Cis6MTA0NEQwMDA5MDYzMDAwODkwNDIwMDRDMTQ0MzAwMDQzQzAyODAwOEEyCis6MTA0NEUwMDAyNDA0MDAwNDBBMDAxMENBMDAwMDAwMDAzNDQzMDA4MEM1Cis6MTA0NEYwMDAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDFBNDYyMDAxNDE4Cis6MTA0NTAwMDAxMEMwMDAwQTNDMDI4MDAwOEM0NDAxMDAzQzAzODAwMDgzCis6MTA0NTEwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDJBQzY0MDFDMDdBCis6MTA0NTIwMDBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwM0UwMDAwODg0Cis6MTA0NTMwMDAwMDAwMDAwMDI3QkRGRkU4MDBBNjE4MjNBRkJGMDAxMDUxCis6MTA0NTQwMDAxODYwMDA4MDMwODgwMEZGM0MwMjgwMDgzNDQ3MDA4MEZCCis6MTA0NTUwMDBBMEUwMDAyNDM0NDQwMTAwQTBFMDAwMjc4QzgyMDAxQzZECis6MTA0NTYwMDAwMEEyMTAyMzA0NDAwMDU2MDAwMDAwMDA4Q0UyMDAzQzMyCis6MTA0NTcwMDA5NEUzMDA1QzhDRTQwMDJDMDA0NTMwMjMzMDYzRkZGRkEzCis6MTA0NTgwMDAwMEMzMTgyMTAwODMyMDJCMTA4MDAwMDQwMEUwMTgyMUI0Cis6MTA0NTkwMDA4Q0UyMDAyQzBBMDAxMTM5MDBBMjEwMjE5NEUyMDA1Qzg4Cis6MTA0NUEwMDAzMDQyRkZGRjAwQzIxMDIxMDBBMjEwMjFBQzYyMDAxQ0FCCis6MTA0NUIwMDAzQzAyODAwODM0NDQwMDgwOTQ4MjAwNUM4QzgzMDAxQ0EwCis6MTA0NUMwMDAzMDQyRkZGRjAwMDIxMDQwMDBBMjEwMjEwMDQzMTAyQkQ4Cis6MTA0NUQwMDAxMDQwMDAwNDAwMDAwMDAwOEM4MjAwMUMwQTAwMTE0Q0Y2Cis6MTA0NUUwMDAzQzA2ODAwODk0ODIwMDVDMzA0MkZGRkYwMDAyMTA0MENECis6MTA0NUYwMDAwMEEyMTAyMTNDMDY4MDA4MzRDMzAxMDAzNEM3MDA4MEFCCis6MTA0NjAwMDBBQzgyMDAxQ0EwNjAwMDBDQUNFNTAwMzg4QzYyMDAxQzgxCis6MTA0NjEwMDAwMEEyMTAyMzE4NDAwMDAyMjRBMkZGRkNBQzYyMDAxQzgwCis6MTA0NjIwMDAzMTAyMDAwMTEwNDAwMDA4M0MwMzgwMDg4Q0UyMDAzQzhECis6MTA0NjMwMDAwMEEyMTAyMzA0NDEwMDEyMjQwNDAwMDU4Q0MyMDAwNENGCis6MTA0NjQwMDAxMEEyMDAxMDhGQkYwMDEwOEM2MjAwMDQxNEEyMDA0RjUzCis6MTA0NjUwMDA4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDgzMDQyMDAyMDdFCis6MTA0NjYwMDAxMDQwMDAwQTNDMDI4MDA4MzQ2MjAwODA5MDYzMDAwODE5Cis6MTA0NjcwMDA5MDQyMDA0QzE0NDMwMDA1M0MwMjgwMDgyNDA0MDAwNENFCis6MTA0NjgwMDA4RkJGMDAxMDBBMDAxMENBMjdCRDAwMTgzNDQzMDA4MEY1Cis6MTA0NjkwMDAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDFBNDYyMDAxNDc2Cis6MTA0NkEwMDAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDA4QzYyMDFGOEQ1Cis6MTA0NkIwMDAwNDQwRkZGRTI0MDIwMDAyMEEwMDExOTkwMDAwMDAwMERECis6MTA0NkMwMDA4Q0UyMDAxQzAwNDYxMDIzMDA0MzEwMkI1NDQwMDAwMUQ0Cis6MTA0NkQwMDBBQ0U1MDAxQzk0RTIwMDVDMzA0MkZGRkYwMDYyMTAyQjRFCis6MTA0NkUwMDAxNDQwMDAwNzI0MDIwMDAyOTRFMjAwNUM4Q0UzMDAxQ0VBCis6MTA0NkYwMDAzMDQyRkZGRjAwNjIxODIxQUNFMzAwMUMyNDAyMDAwMkRDCis6MTA0NzAwMDBBQ0U1MDAzODBFMDAwRjFGQTA4MjAwMEMxMDQwMDAxRjA3Cis6MTA0NzEwMDA4RkJGMDAxMDNDMDI4MDAwOEM0NDAxMDAzQzAzODAwMEVECis6MTA0NzIwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDJBQzY0MDFDMDY4Cis6MTA0NzMwMDBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwQTAwMTFCMTkxCis6MTA0NzQwMDA4RkJGMDAxMDMxMDIwMDEwMTA0MDAwMTA4RkJGMDAxMDBBCis6MTA0NzUwMDAzQzAyODAwODM0NDUwMDgwOENBMzAwMUM5NEEyMDA1Q0JECis6MTA0NzYwMDAwMDY2MTgyMzMwNDJGRkZGMDA2MjE4MjEzQzAyM0ZGRjIxCis6MTA0NzcwMDAzNDQ0RkZGRjAwODMxMDJCNTQ0MDAwMDEwMDgwMTgyMUI3Cis6MTA0NzgwMDAwMEMzMTAyMUFDQTIwMDFDOEZCRjAwMTAwM0UwMDAwODgyCis6MTA0NzkwMDAyN0JEMDAxODI3QkRGRkU4MDBDMDQwMjEwMEE2MzAyMzM4Cis6MTA0N0EwMDBBRkJGMDAxMDE4QzAwMDI2MzA4QTAwRkYzQzAyODAwODBFCis6MTA0N0IwMDAzNDQ5MDA4MDhEMjQwMDFDOEQyMzAwMkMwMDg4MjAyMzg4Cis6MTA0N0MwMDAwMDY0MTgyQjEwNjAwMDBGMzQ0NzAxMDA4Q0UyMDAyMEI5Cis6MTA0N0QwMDAwMDQ2MTAyMUFDRTIwMDIwOENFMjAwMjAwMDQ0MTAyQkE3Cis6MTA0N0UwMDAxNDQwMDAwQjNDMDIzRkZGOENFMjAwMjAwMDQ0MTAyM0U5Cis6MTA0N0YwMDBBQ0UyMDAyMDk1MjIwMDVDMzA0MkZGRkYwQTAwMTFEMTlDCis6MTA0ODAwMDAwMDgyMjAyMUFDRTAwMDIwMDA4NjIwMjEzQzAyM0ZGRkY2Cis6MTA0ODEwMDAzNDQzRkZGRjAwNjQxMDJCNTQ0MDAwMDEwMDYwMjAyMTRFCis6MTA0ODIwMDAzQzAyODAwODM0NDIwMDgwMDA4NTE4MjFBQzQzMDAxQzAzCis6MTA0ODMwMDBBMDQwMDAyNEEwNDAwMDI3MEEwMDEyMjMzQzAzODAwODY3Cis6MTA0ODQwMDAzMTQyMDAxMDEwNDAwMDQzM0MwMzgwMDgzQzA2ODAwOEMxCis6MTA0ODUwMDAzNEM0MDA4MDhDODIwMDNDMDA0ODEwMjM1ODQwMDAzRTQ1Cis6MTA0ODYwMDAzNDY2MDA4MDkwODIwMDI0MjQ0MjAwMDFBMDgyMDAyNDRCCis6MTA0ODcwMDA5MDgyMDAyNDNDMDMwODAwOEM2MzAwMjQzMDQyMDBGRjM3Cis6MTA0ODgwMDAwMDQzMTAyQjE0NDAwMDY4OEZCRjAwMTAzNEMyMDEwMDk5Cis6MTA0ODkwMDA4QzQyMDAxQzAwQTIxMDIzMTg0MDAwNjMwMDAwMDAwMDlFCis6MTA0OEEwMDA4Q0MzMDAwNDk0ODIwMDVDMDA2ODE4MjMzMDQyRkZGRjMwCis6MTA0OEIwMDAwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkExMDQwMDAwNTc2Cis6MTA0OEMwMDAwMDAwMDAwMDhDQzIwMDA0MDA0ODEwMjMwQTAwMTIwNkY5Cis6MTA0OEQwMDAwMDAyMTA0Mzk0ODIwMDVDMzA0MkZGRkYwMDAyMTA0MDRGCis6MTA0OEUwMDAzQzA2ODAwOEFDODIwMDJDMzRDNTAwODA5NEEyMDA1Qzk5Cis6MTA0OEYwMDA4Q0E0MDAyQzk0QTMwMDVDMzA0MkZGRkYwMDAyMTA0MDA3Cis6MTA0OTAwMDAwMDgyMjAyMTMwNjNGRkZGMDA4MzIwMjEwMTA0MTAyMTU5Cis6MTA0OTEwMDBBQ0EyMDAxQzhDQzIwMDA0MzRDNjAxMDBBQ0MyMDAxQzU2Cis6MTA0OTIwMDAyNDAyMDAwMjBFMDAwRjFGQTBDMjAwMEMxMDQwMDAzRTI3Cis6MTA0OTMwMDA4RkJGMDAxMDNDMDI4MDAwOEM0NDAxMDAzQzAzODAwMENCCis6MTA0OTQwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDIwQTAwMTI1M0E4Cis6MTA0OTUwMDAwMDAwMDAwMDM0NjYwMDgwQUNDNTAwMzgzNDY0MDEwMEZCCis6MTA0OTYwMDA4QzgyMDAxQzAwQTIxMDIzMTg0MDAwMDIyNEEyRkZGQzJECis6MTA0OTcwMDBBQzgyMDAxQzMxNDIwMDAxNTA0MDAwMEEzQzAzODAwODE4Cis6MTA0OTgwMDA4Q0MyMDAzQzAwQTIxMDIzMDQ0MzAwMTQyNDA0MDAwNTQwCis6MTA0OTkwMDA4QzYyMDAwNDE0QTIwMDAzM0MwMzgwMDgwQTAwMTI0NTQ0Cis6MTA0OUEwMDAyNDA0MDAwNThDNjIwMDA0MTRBMjAwMUY4RkJGMDAxMEI1Cis6MTA0OUIwMDAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjAxMDQwMDAwQTFGCis6MTA0OUMwMDAzQzAyODAwODM0NjIwMDgwOTA2MzAwMDg5MDQyMDA0Q0YyCis6MTA0OUQwMDAxNDQzMDAwNTNDMDI4MDA4MjQwNDAwMDQ4RkJGMDAxMDJCCis6MTA0OUUwMDAwQTAwMTBDQTI3QkQwMDE4MzQ0MzAwODAzNDQyMDEwMDc5Cis6MTA0OUYwMDBBMDQwMDAwQzI0MDIwMDAxQTQ2MjAwMTQzQzAyODAwMENDCis6MTA0QTAwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjgwNDQwRkZGRUVFCis6MTA0QTEwMDAyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQzQzAyMTAwMDg4Cis6MTA0QTIwMDBBQzYyMDFGODhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxODNBCis6MTA0QTMwMDAyN0JERkZFODNDMEE4MDA4QUZCRjAwMTAzNTQ5MDA4MDYxCis6MTA0QTQwMDA4RDIyMDAzQzAwQzA0MDIxMzA4NDAwRkYwMDQ2MTAyMzJFCis6MTA0QTUwMDAxODQwMDA5RDMwRTcwMEZGMzU0NzAxMDAyNDAyMDAwMUE3Cis6MTA0QTYwMDAwMEE2MzAyM0EwRTAwMDBDQTBFMDAwMERBNTIyMDAxNDU5Cis6MTA0QTcwMDAxOEMwMDAyNDMwODIwMDEwOEQyMzAwMUM4RDIyMDAyQ0QxCis6MTA0QTgwMDAwMDY4MTgyMzAwNDMxMDJCMTA0MDAwMEYwMDAwMDAwMEE2Cis6MTA0QTkwMDA4Q0UyMDAyMDAwNDYxMDIxQUNFMjAwMjA4Q0UyMDAyMEQ1Cis6MTA0QUEwMDAwMDQzMTAyQjE0NDAwMDBCM0MwMjNGRkY4Q0UyMDAyMDFGCis6MTA0QUIwMDAwMDQzMTAyM0FDRTIwMDIwOTUyMjAwNUMzMDQyRkZGRjRGCis6MTA0QUMwMDAwQTAwMTI4MjAwNjIxODIxQUNFMDAwMjAwMDY2MTgyMTYyCis6MTA0QUQwMDAzQzAyM0ZGRjM0NDZGRkZGMDBDMzEwMkI1NDQwMDAwMTRGCis6MTA0QUUwMDAwMEMwMTgyMTNDMDI4MDA4MzQ0MjAwODAwMDY1MTgyMTczCis6MTA0QUYwMDBBQzQzMDAxQ0EwNDAwMDI0QTA0MDAwMjcwQTAwMTJEMEI0Cis6MTA0QjAwMDAzQzAzODAwODEwNDAwMDQwM0MwMzgwMDg4RDIyMDAzQzlDCis6MTA0QjEwMDAwMDQ4MTAyMzU4NDAwMDNEMzQ2NzAwODA5MTIyMDAyNDUzCis6MTA0QjIwMDAyNDQyMDAwMUExMjIwMDI0OTEyMjAwMjQzQzAzMDgwMDE5Cis6MTA0QjMwMDA4QzYzMDAyNDMwNDIwMEZGMDA0MzEwMkIxNDQwMDA5QTg1Cis6MTA0QjQwMDA4RkJGMDAxMDhDRTIwMDFDMDBBMjEwMjMxODQwMDA5NkJBCis6MTA0QjUwMDAwMDAwMDAwMDhENDMwMDA0OTUyMjAwNUMwMDY4MTgyM0NCCis6MTA0QjYwMDAzMDQyRkZGRjAwMDMxODQzMDAwMjEwNDAwMDQzMTAyQUE4Cis6MTA0QjcwMDAxMDQwMDAwNTAxMjAyMDIxOEQ0MjAwMDQwMDQ4MTAyMzMwCis6MTA0QjgwMDAwQTAwMTJCMzAwMDIxMDQzOTUyMjAwNUMzMDQyRkZGRjdFCis6MTA0QjkwMDAwMDAyMTA0MDNDMDY4MDA4QUM4MjAwMkMzNEM1MDA4MDI2Cis6MTA0QkEwMDA5NEEyMDA1QzhDQTQwMDJDOTRBMzAwNUMzMDQyRkZGRjE0Cis6MTA0QkIwMDAwMDAyMTA0MDAwODIyMDIxMzA2M0ZGRkYwMDgzMTgyMTkzCis6MTA0QkMwMDAwMTAzMTAyMUFDQTIwMDFDOENDMjAwMDQzNEM2MDEwMEY5Cis6MTA0QkQwMDBBQ0MyMDAxQzI0MDIwMDAyMEUwMDBGMUZBMEMyMDAwQzc5Cis6MTA0QkUwMDAxMDQwMDA3MThGQkYwMDEwM0MwMjgwMDA4QzQ0MDEwMDE3Cis6MTA0QkYwMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUyNDAyMDAwMkE2Cis6MTA0QzAwMDAwQTAwMTJGQTAwMDAwMDAwMzQ2NzAwODBBQ0U1MDAzOEFBCis6MTA0QzEwMDAzNDY2MDEwMDhDQzIwMDFDMDBBMjEwMjMxODQwMDAwMjYwCis6MTA0QzIwMDAyNEEyRkZGQ0FDQzIwMDFDMzA4MjAwMDE1MDQwMDAwOEVFCis6MTA0QzMwMDAzQzAzODAwODhDRTIwMDNDMDBBMjEwMjMwNDQzMDA1MTk2Cis6MTA0QzQwMDAyNDA0MDAwNThDNjIwMDA0MTBBMjAwM0UzQzAzODAwODhFCis6MTA0QzUwMDA4QzYyMDAwNDU0QTIwMDU0OEZCRjAwMTAzQzAyMDgwMDc0Cis6MTA0QzYwMDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMDYzQzAyODAwOEYwCis6MTA0QzcwMDAzNDYyMDA4MDkwNjMwMDA4OTA0MjAwNEMxMDQzMDA0MDcyCis6MTA0QzgwMDAzQzAyODAwODM0NDMwMDgwMzQ0MjAxMDBBMDQwMDAwQzA0Cis6MTA0QzkwMDAyNDAyMDAwMUE0NjIwMDE0M0MwMjgwMDA4QzQ0MDEwMDQ0Cis6MTA0Q0EwMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUyNDAyMDAwMkY1Cis6MTA0Q0IwMDBBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDBBQzYyMDFGODA3Cis6MTA0Q0MwMDAwQTAwMTMzODhGQkYwMDEwMjQwMjAwMDVBMTIwMDAyNzFFCis6MTA0Q0QwMDAxNEUyMDAwQTNDMDM4MDA4MzU0MzAxMDA5MDYyMDAwRDk1Cis6MTA0Q0UwMDAyQzQyMDAwNjUwNDAwMDA1M0MwMzgwMDg5MDYyMDAwREY1Cis6MTA0Q0YwMDAyNDQyMDAwMUEwNjIwMDBEM0MwMzgwMDgzNDY3MDA4MDVDCis6MTA0RDAwMDBBQ0U1MDAzODM0NjYwMTAwOENDMjAwMUMwMEEyMTAyMzAwCis6MTA0RDEwMDAxODQwMDAwMjI0QTJGRkZDQUNDMjAwMUMzMDgyMDAwMTNCCis6MTA0RDIwMDA1MDQwMDAwQTNDMDM4MDA4OENFMjAwM0MwMEEyMTAyM0EzCis6MTA0RDMwMDAwNDQxMDAxNDI0MDQwMDA1OEM2MjAwMDQxNEEyMDAwMzQyCis6MTA0RDQwMDAzQzAzODAwODBBMDAxMzJGMjQwNDAwMDU4QzYyMDAwNDMxCis6MTA0RDUwMDAxNEEyMDAxNThGQkYwMDEwM0MwMjA4MDA4QzQyMDBEODNFCis6MTA0RDYwMDAzMDQyMDAyMDEwNDAwMDBBM0MwMjgwMDgzNDYyMDA4MDdCCis6MTA0RDcwMDA5MDYzMDAwODkwNDIwMDRDMTQ0MzAwMDUzQzAyODAwOEY4Cis6MTA0RDgwMDAyNDA0MDAwNDhGQkYwMDEwMEEwMDEwQ0EyN0JEMDAxOEI5Cis6MTA0RDkwMDAzNDQzMDA4MDM0NDIwMTAwQTA0MDAwMEMyNDAyMDAwMTkyCis6MTA0REEwMDBBNDYyMDAxNDhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxOEE0Cis6MTA0REIwMDAzQzBCODAwODI3QkRGRkU4M0MwMjgwMDBBRkJGMDAxMDFECis6MTA0REMwMDAzNDQyMDEwMDM1NkEwMDgwOTA0NDAwMEEzNTY5MDEwMEQwCis6MTA0REQwMDA4QzQ1MDAxNDhENDgwMDM4OTEyMzAwMEMzMDg0MDBGRjZFCis6MTA0REUwMDAwMTA1MTAyMzFDNDAwMEIzMzA2NzAwRkYyQ0UyMDAwNkQxCis6MTA0REYwMDA1MDQwMDBCMThGQkYwMDEwMjQwMjAwMDEwMEUyMzAwNEQ3Cis6MTA0RTAwMDAzMEMyMDAwMzU0NDAwMDA4MDBBODMwMjMzMEMyMDAwQzE4Cis6MTA0RTEwMDAxNDQwMDBBMTMwQzIwMDMwMTQ0MDAwQTM4RkJGMDAxMDI2Cis6MTA0RTIwMDAwQTAwMTNGQzAwMDAwMDAwMThDMDAwMjQzMDgyMDAxMEFCCis6MTA0RTMwMDA4RDQzMDAxQzhENDIwMDJDMDA2ODE4MjMwMDQzMTAyQjZBCis6MTA0RTQwMDAxMDQwMDAwRjAwMDAwMDAwOEQyMjAwMjAwMDQ2MTAyMUJECis6MTA0RTUwMDBBRDIyMDAyMDhEMjIwMDIwMDA0MzEwMkIxNDQwMDAwQkI3Cis6MTA0RTYwMDAzQzAyM0ZGRjhEMjIwMDIwMDA0MzEwMjNBRDIyMDAyMDkyCis6MTA0RTcwMDA5NTQyMDA1QzMwNDJGRkZGMEEwMDEzNzAwMDYyMTgyMTY3Cis6MTA0RTgwMDBBRDIwMDAyMDAwNjYxODIxM0MwMjNGRkYzNDQ2RkZGRkEyCis6MTA0RTkwMDAwMEMzMTAyQjU0NDAwMDAxMDBDMDE4MjEzQzAyODAwOEMwCis6MTA0RUEwMDAzNDQyMDA4MDAwNjUxODIxQUM0MzAwMUNBMDQwMDAyNDVGCis6MTA0RUIwMDBBMDQwMDAyNzBBMDAxM0JFM0MwMzgwMDgxMDQwMDA0MEI5Cis6MTA0RUMwMDAzQzAzODAwODhENDIwMDNDMDA0ODEwMjMxODQwMDAzRDAwCis6MTA0RUQwMDAzNDY3MDA4MDkxNDIwMDI0MjQ0MjAwMDFBMTQyMDAyNDUyCis6MTA0RUUwMDA5MTQyMDAyNDNDMDMwODAwOEM2MzAwMjQzMDQyMDBGRjAwCis6MTA0RUYwMDAwMDQzMTAyQjE0NDAwMDcwOEZCRjAwMTA4RDIyMDAxQzQ3Cis6MTA0RjAwMDAwMEEyMTAyMzE4NDAwMDZDMDAwMDAwMDA4RDYzMDAwNDE0Cis6MTA0RjEwMDA5NTQyMDA1QzAwNjgxODIzMzA0MkZGRkYwMDAzMTg0M0VECis6MTA0RjIwMDAwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDUwMTQwMjAyMURCCis6MTA0RjMwMDA4RDYyMDAwNDAwNDgxMDIzMEEwMDEzQTEwMDAyMTA0M0YwCis6MTA0RjQwMDA5NTQyMDA1QzMwNDJGRkZGMDAwMjEwNDAzQzA2ODAwOEEyCis6MTA0RjUwMDBBQzgyMDAyQzM0QzUwMDgwOTRBMjAwNUM4Q0E0MDAyQzkwCis6MTA0RjYwMDA5NEEzMDA1QzMwNDJGRkZGMDAwMjEwNDAwMDgyMjAyMTI5Cis6MTA0RjcwMDAzMDYzRkZGRjAwODMxODIxMDEwMzEwMjFBQ0EyMDAxQzQ1Cis6MTA0RjgwMDA4Q0MyMDAwNDM0QzYwMTAwQUNDMjAwMUMyNDAyMDAwMjIyCis6MTA0RjkwMDAwRTAwMEYxRkEwQzIwMDBDMTA0MDAwNDc4RkJGMDAxMDcyCis6MTA0RkEwMDAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDA4QzYyMDFGOENDCis6MTA0RkIwMDAwNDQwRkZGRTI0MDIwMDAyMEEwMDEzRUUwMDAwMDAwMDdECis6MTA0RkMwMDAzNDY3MDA4MEFDRTUwMDM4MzQ2NjAxMDA4Q0MyMDAxQ0Y4Cis6MTA0RkQwMDAwMEEyMTAyMzE4NDAwMDAyMjRBMkZGRkNBQ0MyMDAxQzU3Cis6MTA0RkUwMDAzMDgyMDAwMTUwNDAwMDBBM0MwMzgwMDg4Q0UyMDAzQzAzCis6MTA0RkYwMDAwMEEyMTAyMzA0NDMwMDE0MjQwNDAwMDU4QzYyMDAwNDYyCis6MTA1MDAwMDAxNEEyMDAwMzNDMDM4MDA4MEEwMDEzRTAyNDA0MDAwNUY2Cis6MTA1MDEwMDA4QzYyMDAwNDE0QTIwMDI4OEZCRjAwMTAzQzAyMDgwMDFDCis6MTA1MDIwMDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMEEzQzAyODAwODI4Cis6MTA1MDMwMDAzNDYyMDA4MDkwNjMwMDA4OTA0MjAwNEMxNDQzMDAwNUU1Cis6MTA1MDQwMDAzQzAyODAwODI0MDQwMDA0OEZCRjAwMTAwQTAwMTBDQTJDCis6MTA1MDUwMDAyN0JEMDAxODM0NDMwMDgwMzQ0MjAxMDBBMDQwMDAwQ0ZBCis6MTA1MDYwMDAyNDAyMDAwMUE0NjIwMDE0M0MwMjgwMDA4QzQ0MDEwMDcwCis6MTA1MDcwMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUyNDAyMDAwMjIxCis6MTA1MDgwMDBBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDBBQzYyMDFGODMzCis6MTA1MDkwMDAwQTAwMTNGQzhGQkYwMDEwOEZCRjAwMTAwMTAwMzAyMUU5Cis6MTA1MEEwMDAwQTAwMTExQjI3QkQwMDE4MDEwMDMwMjEwQTAwMTI1QTA2Cis6MTA1MEIwMDAyN0JEMDAxODhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxOEFGCis6MTA1MEMwMDAzQzAzODAwODM0NjQwMTAwMjQwMjAwMDNBMDgyMDAwQzI5Cis6MTA1MEQwMDA4QzYyMDAwNDAzRTAwMDA4QUM4MjAwMUMzQzA1ODAwOEUwCis6MTA1MEUwMDAzNEEzMDA4MDkwNjIwMDI3MzRBNTAxMDAyNDA2MDA0MzA5Cis6MTA1MEYwMDAyNDQyMDAwMUEwNjIwMDI3OTA2MzAwMjczQzAyMDgwMEMwCis6MTA1MTAwMDA4QzQyMDA0ODMwNjMwMEZGMTQ2MjAwMDQzQzA3NjAyMUI5Cis6MTA1MTEwMDA5NEE1MDBEQTBBMDAwOEVEMzBBNUZGRkYwM0UwMDAwOEJGCis6MTA1MTIwMDAwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTAzQzAyODAwMDc4Cis6MTA1MTMwMDAwRTAwMTQwNThDNDQwMTgwM0MwMjgwMDgzNDQzMDEwMEI5Cis6MTA1MTQwMDBBMDYwMDAwQzhDNDIwMDA0OEZCRjAwMTAyN0JEMDAxODI3Cis6MTA1MTUwMDAwM0UwMDAwOEFDNjIwMDFDMjdCREZGRTAzQzAyODAwOEIxCis6MTA1MTYwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTAzNDQ1MDA4MERECis6MTA1MTcwMDAzNDQ2MDEwMDNDMDg4MDAwOEQwOTAxNDA5MEMzMDAwQ0JBCis6MTA1MTgwMDA4Q0E0MDAzQzhDQTIwMDM4MTQ4MjAwM0IzMDY3MDBGRkU2Cis6MTA1MTkwMDA5NTAyMDA3QzkwQTMwMDI3MTQ2MDAwMDkzMDQ1RkZGRkIyCis6MTA1MUEwMDAyNDAyMDAwNTU0RTIwMDA4M0MwNDgwMDg5MEMyMDAwRDZGCis6MTA1MUIwMDAyNDQyMDAwMUEwQzIwMDBEMEEwMDE0NDAzQzA0ODAwOEYzCis6MTA1MUMwMDBBMEMwMDAwRDNDMDQ4MDA4MzQ4MjAxMDA5MDQyMDAwQzE1Cis6MTA1MUQwMDAyNDAzMDAwNTMwNDIwMEZGMTQ0MzAwMEEyNEEyMDVEQzJBCis6MTA1MUUwMDAzNDgzMDA4MDkwNjIwMDI3MkM0MjAwMDc1MDQwMDAwNTY1Cis6MTA1MUYwMDAyNEEyMEEwMDkwNjMwMDI3MjQwMjAwMTQwMDYyMTAwNDE1Cis6MTA1MjAwMDAwMEEyMTAyMTNDMTA4MDA4MzYxMDAwODAzMDQ1RkZGRkJFCis6MTA1MjEwMDAwMTIwMjAyMTBFMDAxNDA1QTYwNTAwMTQ5NjAyMDA1QzUyCis6MTA1MjIwMDA4RTAzMDAzODNDMTE4MDAwMzA0MkZGRkYwMDAyMTA0MDI2Cis6MTA1MjMwMDAwMDYyMTgyMUFFMDMwMDFDMEUwMDAzNDU4RTI0MDE0MEJECis6MTA1MjQwMDA5MjAyMDAyNTM0NDIwMDQwQTIwMjAwMjUwRTAwMDM1MEM1Cis6MTA1MjUwMDA4RTI0MDE0MDhFMjQwMTQwM0MwMzgwMDA4QzYyMDFGOEMyCis6MTA1MjYwMDAwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzBBMDYyMDFDNDNECis6MTA1MjcwMDAzQzAyMTAwMEFDNjIwMUY4OEZCRjAwMTg4RkIxMDAxNDFGCis6MEM1MjgwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBFNAorOjA0NTI4QzAwODAwODAxMDA5NQorOjEwNTI5MDAwODAwODAwODA4MDA4MDAwMDAwMDAwQzgwMDAwMDMyMDBDMAorOjEwNTJBMDAwODAwODAyNDAwODAwMEVEQzA4MDAwRjM0MDgwMDBGNzg2OAorOjEwNTJCMDAwMDgwMDEwMTAwODAwMTA1MDgwMDgwMTAwODAwODAwODBDRAorOjA0NTJDMDAwODAwODAwMDA2MgorOjBDNTJDNDAwMEEwMDAwMjIwMDAwMDAwMDAwMDAwMDAwQjIKKzoxMDUyRDAwMDAwMDAwMDBENjM3MDM1MkUzMDJFMzA2QTMzMDAwMDAwNjAKKzoxMDUyRTAwMDA1MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKKzoxMDUyRjAwMDAwMDAwMDAwMDAwMDAwMDAzODAwM0MwMDAwMDAwMDAwM0EKKzoxMDUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwN0QKKzoxMDUzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDUzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDUzMzAwMDAwMDAwMDAwMDAwMDAwMDAyMTAwMzgwMDAwMDAwMDAxMTMKKzoxMDUzNDAwMDAwMDAwMDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMDUzNTAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEMjAKKzoxMDUzNjAwMDNDMDIwODAwMjQ0MjU0MjQzQzAzMDgwMDI0NjM1NjRDQTkKKzoxMDUzNzAwMEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0QjkKKzoxMDUzODAwMDNDMUQwODAwMzdCRDlGRkMwM0EwRjAyMTNDMTAwODAwMjUKKzoxMDUzOTAwMDI2MTAwMDg4M0MxQzA4MDAyNzlDNTQyNDBFMDAwMjg4MUMKKzoxMDUzQTAwMDAwMDAwMDAwMDAwMDAwMEQwMEEwMTgyMTAwODAxMDIxNjYKKzoxMDUzQjAwMDAwODAyODIxM0MwNDYwMDAzQzA3NjAwMDI0MDYwMDA4QUYKKzoxMDUzQzAwMDEwNjAwMDA2MzQ4NDIwNzg4QzQyMDAwMEFDRTIyMDA4OTMKKzoxMDUzRDAwMDhDNjMwMDAwMDNFMDAwMDhBQ0UzMjAwQzBBMDAwRTJBRjYKKzoxMDUzRTAwMDAwMDAwMDAwMjQwMzAwNDAzQzAyNjAwMDAzRTAwMDA4Q0QKKzoxMDUzRjAwMEFDNDMyMDAwM0MwNzYwMDA4Rjg2MDAwMDhDRTUyMDc0RTEKKzoxMDU0MDAwMDAwODYxMDIxMDBBMjE4MkIxNDYwMDAwNzAwMDAyODIxM0MKKzoxMDU0MTAwMDhGOEFGRDk4MjQwNTAwMDFBMTQ0MDAxMzhGODkwMDAwQTQKKzoxMDU0MjAwMDAxMjQ0MDIxQUY4ODAwMDAwM0UwMDAwODAwQTAxMDIxMDMKKzoxMDU0MzAwMDhGODRGRDk4OEY4NTAwMDA5MDg2MDAxMzMwQzMwMEZGOTUKKzoxMDU0NDAwMDAwQTMxMDIzQUY4MjAwMDAwM0UwMDAwOEEwODAwMDEzMzcKKzoxMDU0NTAwMDhGODRGRDk4MjdCREZGRThBRkIwMDAxMEFGQkYwMDE0RTgKKzoxMDU0NjAwMDkwODkwMDExOTA4NzAwMTEyNDAyMDAyODMxMjgwMEZGNDQKKzoxMDU0NzAwMDM5MDYwMDI4MzBFMzAwRkYyNDg1MDAyQzJDRDAwMDAxRTEKKzoxMDU0ODAwMDEwNjIwMDE2MjQ4NDAwMUMwRTAwMDAzOTAwMDAwMDAwODkKKzoxMDU0OTAwMDhGOEZGRDk4M0MwNTYwMDAyNDAyMDIwNDk1RUUwMDNFQ0IKKzoxMDU0QTAwMDk1RUQwMDNDMDAwRTVDMDAzMUFDRkZGRjAxNkM1MDI1MTcKKzoxMDU0QjAwMEFDQUEyMDEwNTIwMDAwMDEyNDAyMDAwNEFDQTIyMDAwN0IKKzoxMDU0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGQkYwMDE0N0EKKzoxMDU0RDAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODBBMDAwMDcxMUIKKzoxMDU0RTAwMDAwMDAyODIxOEY4NUZEOTgyN0JERkZEOEFGQkYwMDIwODEKKzoxMDU0RjAwMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwRDIKKzoxMDU1MDAwMDAwODA5ODIxOTBBNDAwMTEyNEIwMDAxQzI0QjEwMDJDMkMKKzoxMDU1MTAwMDMwODMwMEZGMzg2MjAwMjgwRTAwMDA1QjJDNTIwMDAxMkYKKzoxMDU1MjAwMDBFMDAwMDYzMDAwMDAwMDAwMjAwMjAyMTEyNDAwMDAyNzMKKzoxMDU1MzAwMDAyMjAyODIxMDAwMDI4MjEwRTAwMDAzOTAwMDAwMDAwNzAKKzoxMDU1NDAwMDhGOERGRDk4M0MwODgwMDAzQzA1NjAwMDk1QUMwMDNFQzYKKzoxMDU1NTAwMDk1QUIwMDNDMDI2ODMwMjUwMDBDNEMwMDMxNkFGRkZGMUYKKzoxMDU1NjAwMDAxMkEzODI1QUNBNzIwMTAyNDAyMDIwMkFDQTYyMDE0ODAKKzoxMDU1NzAwMDUyNDAwMDAxMjQwMjAwMDI4RkJGMDAyMDhGQjMwMDFDQTQKKzoxMDU1ODAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDI3QkQwMDI4MTMKKzoxMDU1OTAwMDAzRTAwMDA4QUNBMjIwMDAyN0JERkZFMEFGQjIwMDE4NzYKKzoxMDU1QTAwMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzNDMTE2MDAwRTEKKzoxMDU1QjAwMDhFMjMyMDc0OEY4MjAwMDAzMEQwRkZGRjMwRjJGRkZGNzcKKzoxMDU1QzAwMDEwNjIwMDBDMjQwNjAwOEYwRTAwMDAzOTAwMDAwMDAwNUQKKzoxMDU1RDAwMDNDMDY4MDFGMDAxMDQ0MDAzNEM1RkYwMDAxMTIzODI1MkUKKzoxMDU1RTAwMDI0MDQwMDAyQUUyNzIwMTAwMDAwMzAyMUFFMjUyMDE0MzQKKzoxMDU1RjAwMEFFMjQyMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0QTIKKzoxMDU2MDAwMDhGQjAwMDEwMDBDMDEwMjEwM0UwMDAwODI3QkQwMDIwNkIKKzoxMDU2MTAwMDI3QkRGRkUwQUZCMDAwMTAzMEQwRkZGRkFGQkYwMDE4RDQKKzoxMDU2MjAwMEFGQjEwMDE0MEUwMDAwMzkzMEYxRkZGRjAwMTAyNDAwNkMKKzoxMDU2MzAwMDAwOTE4MDI1M0MwMzYwMDBBQzcwMjAxMDhGQkYwMDE4RTMKKzoxMDU2NDAwMDhGQjEwMDE0OEZCMDAwMTAyNDAyMDAwNEFDNjIyMDAwNUYKKzoxMDU2NTAwMDI3QkQwMDIwMDNFMDAwMDgwMDAwMTAyMTI3QkRGRkU4NUYKKzoxMDU2NjAwMDNDMEI2MDE4QUZCRjAwMTA4RDZGNTAwMDI0MThGRjdGRjcKKzoxMDU2NzAwMDM0MEM4MDcxMDFGODcwMjQzNUNEMzgwQzI0MEEwMDMxQzcKKzoxMDU2ODAwMDNDMDk4MDAwQUQ2RDUwMDAzQzA4ODAwQUFENkM1M0JDRjUKKzoxMDU2OTAwMEFEMkEwMDA4MEUwMDA0OUJBRjg4MDAyQzBFMDAwNDU5QjAKKzoxMDU2QTAwMDAwMDAwMDAwMEUwMDAwNDgwMDAwMDAwMDNDMDc2MDAwMDEKKzoxMDU2QjAwMDhDRTUwODA4MjQwNkZGRjAzQzAzNTcwOTAwQTYyMDI0QzcKKzoxMDU2QzAwMDM0NjJGMDAwMTA4MjAwNTAyNDE5MDAwMUFGODAwMDM0RDEKKzoxMDU2RDAwMDBFMDAwQkJDMDAwMDAwMDAzQzA2NjAxNjhDQzQwMDAwRUQKKzoxMDU2RTAwMDNDMDc2MDE0OENFNTAwQTAzQzAzRkZGRjAwODMxMDI0RkUKKzoxMDU2RjAwMDNDMUY1MzUzMDAwNTFGQzIxMDVGMDAzRDM0QzU3QzAwQTIKKzoxMDU3MDAwMDk0QTIwMUYyQTc4MDAwNEMxMDQwMDAwM0E3ODAwMDVDMjcKKzoxMDU3MTAwMDM4NEIxRTFFQTc4QjAwNEM5NEEyMDFGODEwNDAwMDA0QzkKKzoxMDU3MjAwMDhGOEQwMDM0Mzg0QzFFMUVBNzhDMDA1QzhGOEQwMDM0OEEKKzoxMDU3MzAwMDExQTAwMDA0OTc4NDAwNUMyNDBFMDAyMEE3OEUwMDRDNkEKKzoxMDU3NDAwMDk3ODQwMDVDMkM4RjAwODE1MUUwMDAwMTI0MDQwMDgwQ0MKKzoxMDU3NTAwMDk3ODUwMDRDMkNCODA0MDE1MzAwMDAwMTI0MDUwNDAwNzcKKzoxMDU3NjAwMDNDMDI2MDAwOEM0MzA0MzgyNDE5MTAzQzMwN0ZGRkZGNUEKKzoxMDU3NzAwMDEzRjkwMDAzMzA4N0ZGRkY1MEUwMDAwRjI0MDYwMDUwQUMKKzoxMDU3ODAwMEEzODAwMDVFOTM4ODAwNUU1MTAwMDAxMEE3ODQwMDVDMzcKKzoxMDU3OTAwMEE3ODAwMDVDOTc4NTAwNUM4RkJGMDAxMEE3ODAwMDRDM0QKKzoxMDU3QTAwMEE3ODAwMDU0QTc4MDAwNzIzQzAxMDgwMEFDMjUwMDgwNEYKKzoxMDU3QjAwMDAzRTAwMDA4MjdCRDAwMThBMzg2MDA1RTkzODgwMDVFMDIKKzoxMDU3QzAwMDU1MDBGRkY0QTc4MDAwNUNBNzg0MDA1Q0E3ODUwMDRDMEYKKzoxMDU3RDAwMDhGQkYwMDEwOTc4NTAwNUNBNzgwMDA1NEE3ODAwMDcyREYKKzoxMDU3RTAwMDNDMDEwODAwQUMyNTAwODAwM0UwMDAwODI3QkQwMDE4M0MKKzoxMDU3RjAwMDAwMDM1MDgwMDE0NjQ4MjE4RDI4MDAwNDNDMDY2MDAwQ0IKKzoxMDU4MDAwMDBBMDAwMTBGMDEwNjI4MjEwQTAwMDEwM0FGOTkwMDM0QTQKKzoxMDU4MTAwMDMwODNGRkZGOEY4ODAwMkM4Rjg3MDAyODAwMDMyMTQwRjIKKzoxMDU4MjAwMDNDMDU4MDAwM0MwMjAwNTAwMDgyNDgyNTNDMDY2MDAwOTgKKzoxMDU4MzAwMDNDMEEwMTAwMzRBQzA0MDA4Q0NEMDhFMDAxQUE1ODI0RDUKKzoxMDU4NDAwMDExNjAwMDA1MDAwMDAwMDA4Q0NGMDhFMDI0RTcwMDAxOTMKKzoxMDU4NTAwMDAxRUE3MDI1QUNDRTA4RTA4RDE5MDAxMDAxODA1ODIxQjYKKzoxMDU4NjAwMEFDQjkwMDM4OEQxODAwMTRBQ0I4MDAzQ0FDQTkwMDMwQkQKKzoxMDU4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKKzoxMDU4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKKzoxMDU4OTAwMDNDMDM4MDAwOEM2NDAwMDAzMDgyMDAyMDEwNDBGRkZEM0IKKzoxMDU4QTAwMDNDMEY2MDAwOERFRDA4RTAzQzBFMDEwMDAxQUUxODI0QjUKKzoxMDU4QjAwMDE0NjBGRkUxMDAwMDAwMDBBRjg3MDAyODAzRTAwMDA4NEIKKzoxMDU4QzAwMEFGOEIwMDM4OEY4NTAwMkMyNDBCRkZGMDNDMDY4MDAwNDYKKzoxMDU4RDAwMDk0QTcwMDFBOENBOTAwMjQzMEVDRkZGRjAwMEMzOEMwRkMKKzoxMDU4RTAwMDAwRUI1MDI0MDEyQTQwMjFBQ0M4MDAzQzhDQTQwMDI0QzkKKzoxMDU4RjAwMDhDQzMwMDNDMDA4MzEwMjMxODQwMDAzMzAwMDAwMDAwREMKKzoxMDU5MDAwMDhDQUQwMDIwMjVBMjAwMDEzQzBGMDA1MEFDQzIwMDM4MzUKKzoxMDU5MTAwMDM1RUUwMDEwM0MwNjgwMDBBQ0NFMDAzMDAwMDAwMDAwRTgKKzoxMDU5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMDU5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDQ4MDAwQTcKKzoxMDU5NDAwMDhDOTkwMDAwMzMzODAwMjAxMzAwRkZGRDMwRTIwMDA4N0UKKzoxMDU5NTAwMDEwNDAwMDE3M0MwOTgwMDA4Qzg4MDQwOEFDQTgwMDEwOTcKKzoxMDU5NjAwMDhDODMwNDBDQUNBMzAwMTQzQzE5MDAyMDNDMTg4MDAwNkMKKzoxMDU5NzAwMEFGMTkwMDMwOTRBRTAwMTg5NEFGMDAxQzAxQ0YzMDIxNTUKKzoxMDU5ODAwMEE0QTYwMDE4OTRBRDAwMUEyNUE3MDAwMUE0QTcwMDFBMjgKKzoxMDU5OTAwMDk0QUIwMDFBOTRBQzAwMUUxMThCMDAwMzAwMDAwMDAwQjEKKzoxMDU5QTAwMDAzRTAwMDA4MDAwMDAwMDAwM0UwMDAwOEE0QTAwMDFBQzMKKzoxMDU5QjAwMDhEMkEwNDAwQUNBQTAwMTA4RDI0MDQwNEFDQTQwMDE0QTkKKzoxMDU5QzAwMDBBMDAwMUFBM0MxOTAwMjA4Q0EyMDAyMDBBMDAwMTkyQzIKKzoxMDU5RDAwMDNDMEYwMDUwMEEwMDAxODAwMDAwMDAwMDI3QkRGRkU4RDYKKzoxMDU5RTAwMEFGQkYwMDEwMEUwMDAxQzQwMDAwMDAwMDhGODkwMDJDMjIKKzoxMDU5RjAwMDhGQkYwMDEwM0MwMzgwMDBBNTIwMDAwQTk1MjgwMDBBRjQKKzoxMDVBMDAwMDk1MjcwMDA0MjdCRDAwMTgzMTA1RkZGRjMwRTYwMDBGODEKKzoxMDVBMTAwMDAwMDYxNTAwMDBBMjIwMjUwM0UwMDAwOEFDNjQwMDgwMDkKKzoxMDVBMjAwMDNDMDUwODAwOENBNTAwMjA4RjgzMDAwNDI3QkRGRkU4RkIKKzoxMDVBMzAwMEFGQjAwMDEwQUZCRjAwMTQxMEEzMDAxMDAwMDA4MDIxMTEKKzoxMDVBNDAwMDI0MDQwMDAxMDIwNDMwMDQwMEE2MjAyNDAwQzMxMDI0MTIKKzoxMDVBNTAwMDUwNDQwMDA2MjYxMDAwMDEwMDEwMTg4MDI3ODdGRDlDODYKKzoxMDVBNjAwMDE0ODAwMDBBMDA2NzE4MjEyNjEwMDAwMTJFMDkwMDAyODgKKzoxMDVBNzAwMDU1MjBGRkYzOEY4MzAwMDRBRjg1MDAwNDhGQkYwMDE0MEYKKzoxMDVBODAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODhDNjgwMDAwRUMKKzoxMDVBOTAwMDNDMDU4MDAwQUNBODAwMjQwRTAwMDFDNjI2MTAwMDAxQzEKKzoxMDVBQTAwMDNDMDUwODAwOENBNTAwMjAwQTAwMDFFQjJFMDkwMDAyMkQKKzoxMDVBQjAwMDI0MDUwMDAxMDA4NTE4MDQzQzA0MDgwMDhDODQwMDIwQTMKKzoxMDVBQzAwMDI3QkRGRkM4QUZCRjAwMzQwMDgzMTAyNEFGQkUwMDMwMzUKKzoxMDVBRDAwMEFGQjcwMDJDQUZCNjAwMjhBRkI1MDAyNEFGQjQwMDIwOUMKKzoxMDVBRTAwMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNDEwNDAwMDUxQUEKKzoxMDVBRjAwMEFGQjAwMDEwOEY4NDAwMkM5NDg3MDAwNjk0ODgwMDBBQjEKKzoxMDVCMDAwMDAwRTgzMDIzMzBENUZGRkYxMkEwMDA0QjhGQkYwMDM0RDgKKzoxMDVCMTAwMDk0OEIwMDE4OTQ4QzAwMEEwMTZDNTAyMzMxNDJGRkZGRDMKKzoxMDVCMjAwMDAyQTI0ODJCMTUyMDAwMDIwMkEwMjAyMTAwNDAyMDIxQzMKKzoxMDVCMzAwMDJDOEYwMDA1MTVFMDAwMDIwMDgwOTgyMTI0MTMwMDA0M0EKKzoxMDVCNDAwMDBFMDAwMTUzMDI2MDIwMjE4Rjg3MDAyQzAyNjA5MDIxRkIKKzoxMDVCNTAwMEFGODAwMDMwOTRGNDAwMEEwMjYwODAyMTEyNjAwMDRFOTEKKzoxMDVCNjAwMDMyOTFGRkZGM0MxNjcwMDAzQzE0NDAwMDNDMUUyMDAwQTgKKzoxMDVCNzAwMDNDMTc2MDAwOEY5OTAwMzg4RjM4MDAwMDAzMTYxODI0RjYKKzoxMDVCODAwMDEwNzQwMDRGMDI4M0Y4MkIxN0UwMDAzNjAwMDAwMDAwNkQKKzoxMDVCOTAwMDEwN0UwMDQ3OEY4NjAwMzAxNEMwMDAzQTI0MDMwMDAxQjUKKzoxMDVCQTAwMDAyMDMxMDIzMDIyMzIwMjEzMDUwRkZGRjE2MDBGRkYxRDMKKzoxMDVCQjAwMDMwOTFGRkZGOEY4NzAwMkMzQzExMDAyMDNDMTA4MDAwQUIKKzoxMDVCQzAwMEFFMTEwMDMwOTRFQjAwMEEzQzE3ODAwMDAyNEI1MDIxQ0MKKzoxMDVCRDAwMEE0RUEwMDBBOTRFOTAwMEE5NEU4MDAwNDMxMjNGRkZGRDQKKzoxMDVCRTAwMDMxMDYwMDBGMDAwNjJEMDAwMDY1RjAyNUFFRkUwMDgwOTYKKzoxMDVCRjAwMDk0RjMwMDBBOTRGNjAwMTgxMkQzMDAzNjAwMTIyMTQwRTQKKzoxMDVDMDAwMDhDRkYwMDE0OENGNDAwMTAwM0U0NjgyMTAwMDBDMDIxMTQKKzoxMDVDMTAwMDAxQTQ3ODJCMDI5ODcwMjEwMUNGNjAyMUFDRUQwMDE0MTMKKzoxMDVDMjAwMEFDRUMwMDEwMDJCMjM4MjMzMEY1RkZGRjE2QTBGRkI4MkQKKzoxMDVDMzAwMDhGODQwMDJDOEZCRjAwMzQ4RkJFMDAzMDhGQjcwMDJDQjQKKzoxMDVDNDAwMDhGQjYwMDI4OEZCNTAwMjQ4RkI0MDAyMDhGQjMwMDFDQkUKKzoxMDVDNTAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4NUQKKzoxMDVDNjAwMDI3QkQwMDM4MTQ3N0ZGQ0M4Rjg2MDAzMDBFMDAwRDhCRDcKKzoxMDVDNzAwMDAyMDAyMDIxMDA0MDE4MjE4Rjg2MDAzMDEwQzBGRkM5OEIKKzoxMDVDODAwMDAyMDMxMDIzMDI3MDcwMjM4Rjg3MDAyQzAxQzM2ODIxNDgKKzoxMDVDOTAwMDBBMDAwMjc2MzFCMkZGRkY4Rjg2MDAzMDE0QzBGRkM5QzAKKzoxMDVDQTAwMDNDMTEwMDIwM0MxMDgwMDAwQTAwMDI0MEFFMTEwMDMwODAKKzoxMDVDQjAwMDBFMDAwM0M0MDIwMDIwMjEwQTAwMDI2RDAwNDAxODIxREEKKzoxMDVDQzAwMDAyMDAyMDIxMEUwMDA3REIwMjIwMjgyMTBBMDAwMjZEQkQKKzoxMDVDRDAwMDAwNDAxODIxMEUwMDAxODAwMDAwMDAwMDBBMDAwMjU5NTcKKzoxMDVDRTAwMDAyQjIzODIzMjdCREZGRDhBRkI0MDAyMEFGQjMwMDFDRTkKKzoxMDVDRjAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDI0QjYKKzoxMDVEMDAwMDBFMDAwMEU2MjQxMzAwMDEzQzAyODAwODNDMDMyMDAwNDIKKzoxMDVEMTAwMDNDMDEwODAwQUMyMDAwNzAzNDU0MDA4MDM0NzIwMDAzNTEKKzoxMDVEMjAwMDNDMTA4MDAwMjQxMUZGODAwRTAwMDFENzAwMDAwMDAwMEQKKzoxMDVEMzAwMDhFMDYwMDAwMzhDNTAwMDEzMEE0MDAwMTE0ODBGRkZBNkYKKzoxMDVENDAwMDAwMDAwMDAwOEUwNzAxMDAyNDAzMEMwMDEwRTMwMDA5OEUKKzoxMDVENTAwMDNDMDU4MDAwOEUwOTAxMDAyRDI4MzA4MDU1MDAwMDEwODAKKzoxMDVENjAwMDNDMDQ4MDAwOEUwQjAxMDAyRDZBMzE4MTExNDAwMDBDMzMKKzoxMDVENzAwMDNDMDQ4MDAwOENBQzAxMDAxMTgzMDAwNDAwMDAyMDIxNTEKKzoxMDVEODAwMDhDQUUwMTAwMjVDREZGODEzMUE0MDBGRjhFMEYwMTAwRjQKKzoxMDVEOTAwMDBFMDAwMUZCQUUwRjAwMjQwQTAwMDJDMTNDMDQ4MDAwOEIKKzoxMDVEQTAwMDhDOUYwMTAwMjQxODAwMjBBQzlGMDAyMDkyOTkwMDAwRDUKKzoxMDVEQjAwMDMzMjMwMEZGMTA3ODAwMUYyNDAyMDA1MDEwNjIwMDIyREQKKzoxMDVEQzAwMDAwMDAwMDAwM0MwNDgwMDA4QzgzMDEwMDE0NjAwMDAzOEMKKzoxMDVERDAwMDAwMDAwMDAwNTY2MDAwMTQzQzA0NDAwMDhDODIwMTAwNkEKKzoxMDVERTAwMDhDOTkwMTAwMDAwMDk4MjEwMDUxRjgyNDAwMUY3OTQwOEYKKzoxMDVERjAwMDMzMzgwMDdGMDFGODcwMjUwMUQyNjgyNUFDOEQwODMwNUEKKzoxMDVFMDAwMDhDOEMwMTAwOEM4OTAxMDAyNThCMDEwMDAxNzE1MDI0Q0MKKzoxMDVFMTAwMDAwMEEzOTQwMzEyODAwN0YwMEU4MzAyNTAwRDIyODI1Q0IKKzoxMDVFMjAwMEFDODUwODMwM0MwNDQwMDBBRTA0MDEzODBBMDAwMjk5RjkKKzoxMDVFMzAwMDAwMDAwMDAwOEM4NTAxMDAwRTAwMDc4RDI0MDQwMDgwMDYKKzoxMDVFNDAwMDBBMDAwMkMxM0MwNDgwMDA4Qzg0MDEwMDBFMDAxM0VBQTkKKzoxMDVFNTAwMDAwMDAwMDAwMEEwMDAyQzEzQzA0ODAwMDAwQTQxMDJCRDYKKzoxMDVFNjAwMDI0MDMwMDAxMTA0MDAwMDkwMDAwMzAyMTAwMDUyODQwRjMKKzoxMDVFNzAwMDAwQTQxMDJCMDRBMDAwMDMwMDAzMTg0MDU0NDBGRkZDQjIKKzoxMDVFODAwMDAwMDUyODQwNTA2MDAwMEEwMDA0MTgyQjAwODUzODJCQkMKKzoxMDVFOTAwMDU0RTAwMDA0MDAwMzE4NDIwMEMzMzAyNTAwODUyMDIzOEQKKzoxMDVFQTAwMDAwMDMxODQyMTQ2MEZGRjkwMDA1Mjg0MjAwMDQxODJCNzMKKzoxMDVFQjAwMDAzRTAwMDA4MDBDMzEwMjEzMDg0RkZGRjMwQzYwMEZGNUMKKzoxMDVFQzAwMDNDMDc4MDAwOENFMjAxQjgwNDQwRkZGRTAwMDY0QzAwNTUKKzoxMDVFRDAwMDAxMjQzMDI1M0MwODIwMDAwMEM4MjAyNTNDMDMxMDAwODgKKzoxMDVFRTAwMEFDRTAwMTgwQUNFNTAxODRBQ0U0MDE4ODAzRTAwMDA4OEIKKzoxMDVFRjAwMEFDRTMwMUI4M0MwNjYwMDA4Q0M1MjAxQzI0MDJGRkYwMTYKKzoxMDVGMDAwMDMwODMwMjAwMzA4NjAxMDAxMDYwMDAwRTAwQTIyODI0QjkKKzoxMDVGMTAwMDM0QTUwMDAxMzA4NzMwMDAxMEUwMDAwNTMwODMwQzAwMEMKKzoxMDVGMjAwMDM0QTUwMDA0M0MwNDYwMDAwM0UwMDAwOEFDODUyMDFDOUMKKzoxMDVGMzAwMDEwNjBGRkZEM0MwNDYwMDAzNEE1MDAwODAzRTAwMDA4ODkKKzoxMDVGNDAwMEFDODUyMDFDNTRDMEZGRjMzNEE1MDAwMjBBMDAwMzE1RTEKKzoxMDVGNTAwMDMwODczMDAwMjdCREZGRThBRkIwMDAxMEFGQkYwMDE0OUUKKzoxMDVGNjAwMDNDMDc2MDAwMjQwNjAwMDIxMDgwMDAxMTAwQTA4MDIxODAKKzoxMDVGNzAwMDhGODMwMDM4MEUwMDAzMEM4QzY0MDAxODhGODIwMDM4NjkKKzoxMDVGODAwMDAwMDAyMDIxMjQwNjAwMDE4QzQ1MDAwQzBFMDAwMkZEQkIKKzoxMDVGOTAwMDAwMDAwMDAwMTYwMDAwMDIyNDAyMDAwMzAwMDAxMDIxOEYKKzoxMDVGQTAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4NTkKKzoxMDVGQjAwMDhDRTgyMDFDMjQwOUZGRjAwMTA5MjgyNEFDRTUyMDFDRjIKKzoxMDVGQzAwMDhGODcwMDM4MEEwMDAzMzI4Q0U1MDAwQzNDMDI2MDBFMUIKKzoxMDVGRDAwMDAwODA0MDIxMzQ0NjAxMDAyNDA5MDAxODAwMDAwMDAwMjAKKzoxMDVGRTAwMDAwMDAwMDAwMDAwMDAwMDAzQzBBMDA1MDNDMDM4MDAwNUMKKzoxMDVGRjAwMDM1NDcwMjAwQUM2ODAwMzgzNDY0MDQwMEFDNjUwMDNDRUUKKzoxMDYwMDAwMEFDNjcwMDMwOEM2QzAwMDAzMThCMDAyMDExNjBGRkZEMEMKKzoxMDYwMTAwMDI0MDdGRkZGMjQwMzAwN0Y4QzhEMDAwMDI0NjNGRkZGMTMKKzoxMDYwMjAwMDI0ODQwMDA0QUNDRDAwMDAxNDY3RkZGQjI0QzYwMDA0RTgKKzoxMDYwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0QTQwMjAwOTYKKzoxMDYwNDAwMDAwODUyODJCM0MwMzAwMjAzQzBFODAwMDI1MjlGRkZGMDMKKzoxMDYwNTAwMDAxMDU0MDIxQURDMzAwMzAxNTIwRkZFMDAwODAyODIxNUMKKzoxMDYwNjAwMDAzRTAwMDA4MDAwMDAwMDA4RjgyMDAzODI3QkRGRkQ4NDEKKzoxMDYwNzAwMEFGQjMwMDFDQUZCRjAwMjBBRkIyMDAxOEFGQjEwMDE0MjcKKzoxMDYwODAwMEFGQjAwMDEwOTQ0NjAwMDIwMDgwOTgyMThDNTIwMDE4OTYKKzoxMDYwOTAwMDJDQzMwMDgxOEM0ODAwMDQ4QzQ3MDAwODhDNTEwMDBDRjQKKzoxMDYwQTAwMDhDNDkwMDEwMTA2MDAwMDc4QzRBMDAxNDJDQzQwMDA0QjYKKzoxMDYwQjAwMDE0ODAwMDEzMzBFQjAwMDczMEM1MDAwMzEwQTAwMDEwNUYKKzoxMDYwQzAwMDAwMDAwMDAwMjQxMDAwOEIwMjAwMjAyMTAyMjAyODIxNjMKKzoxMDYwRDAwMDBFMDAwMkZEMjQwNjAwMDMxNjYwMDAwMjI0MDIwMDAzRTUKKzoxMDYwRTAwMDAwMDAxMDIxOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4NUEKKzoxMDYwRjAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4MDYKKzoxMDYxMDAwMDE1NjBGRkYxMjQxMDAwOEIzQzBDODAwMDNDMDMwMDIwNDQKKzoxMDYxMTAwMDI0MUYwMDAxQUQ4MzAwMzBBRjlGMDAzMDAwMDAwMDAwNUQKKzoxMDYxMjAwMDAwMDAwMDAwMDAwMDAwMDAyNDE5RkZGMDI0RDgwMDBGMzgKKzoxMDYxMzAwMDAzMTk3ODI0M0MxMDAwRDBBRDg4MDAzODAxRjA3MDI1OTgKKzoxMDYxNDAwMDI0Q0QwMDAzM0MwODYwMEVBRDg3MDAzQzM1ODUwNDAwN0IKKzoxMDYxNTAwMEFEOEUwMDMwMDAwRDM4ODIzNTA0MDAzQzNDMDM4MDAwRDkKKzoxMDYxNjAwMDhDNkIwMDAwMzE2MjAwMjAxMDQwRkZGRDAwMDAwMDAwMzkKKzoxMDYxNzAwMDEwRTAwMDA4MjRFM0ZGRkYyNDA3RkZGRjhDQTgwMDAwQzUKKzoxMDYxODAwMDI0NjNGRkZGMjRBNTAwMDRBQzg4MDAwMDE0NjdGRkZCMTQKKzoxMDYxOTAwMDI0ODQwMDA0M0MwNDYwMEVBQzg2MDAzODAwMDAwMDAwM0IKKzoxMDYxQTAwMDAwMDAwMDAwMDAwMDAwMDAzQzA3MDAyMDNDMDY4MDAwQ0EKKzoxMDYxQjAwMDAxMjAyMDIxMDE0MDI4MjFBQ0M3MDAzMDBFMDAwMzQyRkQKKzoxMDYxQzAwMDAwMDA4MDIxMEUwMDAzMEMwMjQwMjAyMTBBMDAwMzgyRkYKKzoxMDYxRDAwMDAyMDAyMDIxMjdCREZGRTBBRkIyMDAxODMwOTJGRkZGODAKKzoxMDYxRTAwMEFGQjEwMDE0QUZCRjAwMUNBRkIwMDAxMDE2NDAwMDBEREYKKzoxMDYxRjAwMDAwMDA4ODIxMEEwMDAzRjEwMjIwMTAyMTI0MDUwMDAzNzkKKzoxMDYyMDAwMDUwODUwMDI3OENFNTAwMEMwMDAwMDAwRDI2MkMwMDAxQjUKKzoxMDYyMTAwMDMxOTFGRkZGMjRFQjAwMjAwMjMyNTAyQjExNDAwMDE5NzYKKzoxMDYyMjAwMEFGOEIwMDM4OEY4MjAwMzAxNDQwMDAxNjhGODcwMDM4MDMKKzoxMDYyMzAwMDNDMDY3MDAwM0MwMzIwMDA4Q0U1MDAwMDAwQTYyMDI0RjIKKzoxMDYyNDAwMDE0ODMwMDEwOEY4NDAwNDAwMDA1NDQwMjNDMDk4MDAwNDQKKzoxMDYyNTAwMDAwQTk4MDI0MTQ4MEZGRTkzMTA2MDBGRjJDQ0EwMDBCM0UKKzoxMDYyNjAwMDExNDBGRkVCMjYyQzAwMDEwMDA2Njg4MDNDMEUwODAwNjAKKzoxMDYyNzAwMDI1Q0U1MUM4MDFBRTYwMjE4RDhCMDAwMDAxNjAwMDA4NjEKKzoxMDYyODAwMDAwMDAwMDAwMDIyMDEwMjE4RkJGMDAxQzhGQjIwMDE4RjgKKzoxMDYyOTAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwNkMKKzoxMDYyQTAwMDBFMDAwMkZEMjQwNDAwODQxNjAwRkZEODhGODcwMDM4RkEKKzoxMDYyQjAwMDBBMDAwM0QyQUY4MDAwNDAwMjAwMjgyMTBFMDAwMzI0MTAKKzoxMDYyQzAwMDI0MDQwMDAxOEY4NzAwMzgwQTAwMDNEMkFGODIwMDQwMDcKKzoxMDYyRDAwMDAyMDAyODIxMEUwMDAzMjQwMDAwMjAyMTBBMDAwNDAxRUUKKzoxMDYyRTAwMDhGODcwMDM4MEUwMDAzNjkwMjAwMjAyMThGODcwMDM4NTUKKzoxMDYyRjAwMDBBMDAwM0QyQUY4MjAwNDAzMEFGRkZGRjAwMEYxOUMwODkKKzoxMDYzMDAwMDNDMDQ4MDAwOEM5MDAxQjgwNjAwRkZGRTNDMTkyMDA0N0MKKzoxMDYzMTAwMDNDMTgxMDAwQUM4MzAxODBBQzgwMDE4NEFDOTkwMTg4RUEKKzoxMDYzMjAwMEFDOTgwMUI4MEEwMDAzRDMyNjJDMDAwMTkwRTIwMDAyQzkKKzoxMDYzMzAwMDkwRkYwMDAzMDAwMDIwMjEwMDAyM0EwMDAwRkYyODI1MDIKKzoxMDYzNDAwMDI0MDYwMDA4MEUwMDAyRkQwMDAwMDAwMDE2MDBGRkREMUMKKzoxMDYzNTAwMDI0MDIwMDAzOEY4NzAwMzgwMDAwMTAyMTBBMDAwM0QyQjYKKzoxMDYzNjAwMEFGODIwMDQwOTBFNTAwMDIwMDAwMjAyMTBBMDAwNDIwRDYKKzoxMDYzNzAwMDI0MDYwMDA5OTRFNTAwMDQ5MEU5MDAwMzkwRTMwMDAyN0MKKzoxMDYzODAwMDAwMDUzNDAwMDAwOTQyMDAwMEM4MjAyNTAwODMyODI1QUMKKzoxMDYzOTAwMDI0MDYwMDBBMEEwMDA0MjAwMDAwMjAyMTkwRTUwMDAyRTMKKzoxMDYzQTAwMDAwMDAyMDIxMEEwMDA0MjAyNDA2MDAwQjAwMDQ0OUMyM0EKKzoxMDYzQjAwMDMxMjcwMDNGMDAwNDQzNDIzQzAyODAwMDAwMDgyMDQwOTcKKzoxMDYzQzAwMDI0MDMxNjgwMkNFNjAwMjBBQzQzMDAyQzI0RUFGRkUwRDYKKzoxMDYzRDAwMDI0ODIwMDAxMTRDMDAwMDMzMEE5MDBGRjAwODAxMDIxQjYKKzoxMDYzRTAwMDMxNDcwMEZGMDAwMjYwODAzQzBEODAwMDI0MEEwMDAxNUMKKzoxMDYzRjAwMDAxOEQyMDIxM0MwQjAwMEUwMEVBMjgwNDAwOEIzMDIxODcKKzoxMDY0MDAwMDExMjAwMDA1MDAwNTM4Mjc4Q0NFMDAwMDAxQzUzODI1NzUKKzoxMDY0MTAwMDAzRTAwMDA4QUNDNzAwMDA4Q0Q4MDAwMDAzMDc3ODI0MTQKKzoxMDY0MjAwMDAzRTAwMDA4QUNDRjAwMDAyN0JERkZFMEFGQjEwMDE0Q0YKKzoxMDY0MzAwMEFGQjAwMDEwQUZCRjAwMTgzQzA3NjAwMDhDRTQwODA4NDQKKzoxMDY0NDAwMDM0MDJGMDAwM0MxMTYwMDAzMDgzRjAwMDI0MDUwMUMwRUMKKzoxMDY0NTAwMDNDMDQ4MDBFMDAwMDMwMjExMDYyMDAwNjI0MTAwMDAxNzAKKzoxMDY0NjAwMDhDRUEwODA4MzE0OUYwMDAzOTI4RTAwMDAwMDgzODJCOTAKKzoxMDY0NzAwMDAwMDc4MDQwM0MwRDAyMDBBRTJEMDgxNDI0MEMxNjgwNEQKKzoxMDY0ODAwMDNDMEI4MDAwOEUyNzQ0MDAwRTAwMEUzNEFENkMwMDJDQjcKKzoxMDY0OTAwMDEyMDAwMDA0M0MwMjE2OTEyNDA1MDAwMTEyMDUwMDEwQjAKKzoxMDY0QTAwMDNDMDIzRDZDMzQ1ODAwRTBBRTM4NDQwODNDMTEwODAwMTIKKzoxMDY0QjAwMDhFMzEwMDdDOEZCRjAwMTgzQzA2NjAwMDAwMTE4NTQwQzMKKzoxMDY0QzAwMDM2MEYxNjgwOEZCMTAwMTQ4RkIwMDAxMDNDMEUwMjAwMDIKKzoxMDY0RDAwMDI3QkQwMDIwQUNDRjQ0MjAwM0UwMDAwOEFDQ0UwODEwNUMKKzoxMDY0RTAwMDNDMDIxOERBMzQ1ODAwRTBBRTM4NDQwODNDMTEwODAwODkKKzoxMDY0RjAwMDhFMzEwMDdDOEZCRjAwMTgzQzA2NjAwMDAwMTE4NTQwODMKKzoxMDY1MDAwMDM2MEYxNjgwOEZCMTAwMTQ4RkIwMDAxMDNDMEUwMjAwQzEKKzoxMDY1MTAwMDI3QkQwMDIwQUNDRjQ0MjAwM0UwMDAwOEFDQ0UwODEwMUIKKzoxMDY1MjAwMDBBMDAwNDNBMjQwNTAwMDEwQTAwMDQzQTAwMDAyODIxNjgKKzoxMDY1MzAwMDI0MDIwNDAwQTc4MjAwMTBBNzgwMDAwODAwMDAyMDIxODgKKzoxMDY1NDAwMDNDMDYwODAwMjRDNjU0QjAyNDA1RkZGRjI0ODkwMDAxM0UKKzoxMDY1NTAwMDAwMDQ0MDgwMzEyNEZGRkYwMTA2MTgyMTJDODcwMDIwMTEKKzoxMDY1NjAwMDE0RTBGRkZBQUM2NTAwMDAyNDA0MDQwMEE3ODQwMDEyQzQKKzoxMDY1NzAwMEE3ODAwMDBBMDAwMDIwMjEzQzA2MDgwMDI0QzY1NTMwRjAKKzoxMDY1ODAwMDI0MDVGRkZGMjQ4RDAwMDEwMDA0NjA4MDMxQTRGRkZGN0IKKzoxMDY1OTAwMDAxODY1ODIxMkM4QTAwMjAxNTQwRkZGQUFENjUwMDAwQzUKKzoxMDY1QTAwMEE3ODAwMDE0QTc4MDAwMENBNzgwMDAwRTAwMDAyMDIxMDcKKzoxMDY1QjAwMDNDMDYwODAwMjRDNjU1QjAyNDA1RkZGRjI0OTkwMDAxQkQKKzoxMDY1QzAwMDAwMDRDMDgwMzMyNEZGRkYwMzA2NzgyMTJDOEUwMDA0RDIKKzoxMDY1RDAwMDE1QzBGRkZBQURFNTAwMDAzQzA1NjAwMDhDQTczRDAwNEEKKzoxMDY1RTAwMDI0MDNFMDhGMDBFMzEwMjQzNDQ2MDE0MDAzRTAwMDA4NTgKKzoxMDY1RjAwMEFDQTYzRDAwMjQ4NzAwN0YwMDA3MzFDMjI0QzVGRkZGMDEKKzoxMDY2MDAwMDAwMDUxOEMyMjQ2NDAwMDEzMDgyRkZGRjAwMDIzOEMwNzgKKzoxMDY2MTAwMEE3ODQwMDFDM0MwMTA4MDBBQzI3MDAzMEFGODAwMDE4QTQKKzoxMDY2MjAwMDAwMDAyODIxMDAwMDIwMjEwMDAwMzAyMTI0ODkwMDAxRTEKKzoxMDY2MzAwMDAwQTcyODIxMzEyNEZGRkYyQ0E4MTcwMTExMDAwMDAzMTcKKzoxMDY2NDAwMDJDODMwMDgwMTQ2MEZGRjkyNEM2MDAwMTAwQzAyODIxQkIKKzoxMDY2NTAwMEFGODYwMDE4MTBDMDAwMURBNzg2MDAxNjI0Q0FGRkZGRDEKKzoxMDY2NjAwMDAwMEExMTQyM0MwODA4MDAyNTA4NTVCMDEwNDAwMDBBRjUKKzoxMDY2NzAwMDAwMDAyMDIxMDA0MDMwMjEyNDA3RkZGRjI0OEUwMDAxNkMKKzoxMDY2ODAwMDAwMDQ2ODgwMzFDNEZGRkYwMUE4NjAyMTAwODY1ODJCRjgKKzoxMDY2OTAwMDE1NjBGRkZBQUQ4NzAwMDAzMEEyMDAxRjUwNDAwMDA4Q0YKKzoxMDY2QTAwMDAwMDQzMDgwMjQwMzAwMDEwMDQzQzgwNDAwMDQxMDgwNkIKKzoxMDY2QjAwMDAwNDg3ODIxMjczOEZGRkYwM0UwMDAwOEFERjgwMDAwMEMKKzoxMDY2QzAwMDAwQzgyMDIxMjQwNUZGRkZBQzg1MDAwMDAzRTAwMDA4N0UKKzoxMDY2RDAwMDAwMDAwMDAwMzBBNUZGRkYzMEM2RkZGRjMwQTgwMDFGRkMKKzoxMDY2RTAwMDAwODA2MDIxMzBFNzAwRkYwMDA1Mjk0MjAwMDA1MDIxQjIKKzoxMDY2RjAwMDEwQzAwMDFEMjQwOTAwMDEyNDBCMDAwMTI1MTgwMDAxMTEKKzoxMDY3MDAwMDAxMEIyMDA0MzMwODAwRkYwMTI2NzgyNjM5MEUwMDIwRjMKKzoxMDY3MTAwMDJERUQwMDAxMkRDMjAwMDEwMUEyMTgyNTEwNjAwMDBEMTEKKzoxMDY3MjAwMDAxNDQ1MDI1MDAwNUM4ODAwMzJDNDAyMTAxMDAxODIxOTgKKzoxMDY3MzAwMDEwRTAwMDBGMDAwQTIwMjc4RDA0MDAwMDAwOEExODI1QjEKKzoxMDY3NDAwMEFEMDMwMDAwMjRBRDAwMDEwMDAwNDAyMTAwMDA1MDIxRjUKKzoxMDY3NTAwMDMxQTVGRkZGMjUyRTAwMDEzMUM5RkZGRjAwQzkxMDJCMTUKKzoxMDY3NjAwMDEwNDBGRkU3MjUxODAwMDEwM0UwMDAwODAwMDAwMDAwQ0EKKzoxMDY3NzAwMDhEMEEwMDAwMDE0NDQwMjQwQTAwMDUyMEFDNjgwMDAwOTYKKzoxMDY3ODAwMDI3QkRGRkU4MzBBNUZGRkYzMEM2RkZGRkFGQjAwMDEwMDgKKzoxMDY3OTAwMEFGQkYwMDE0MzBFN0ZGRkYwMDAwNTAyMTM0MTBGRkZGQUYKKzoxMDY3QTAwMDAwMDA2MDIxMjRBRjAwMUYwMEMwNDgyMTI0MTgwMDAxMTAKKzoxMDY3QjAwMDI0MTkwMDIwMDVFMDAwMTYwMUUwMTAyMTAwMDJGOTQzMzEKKzoxMDY3QzAwMDAxOUY2ODJBMDAwOTcwMkIwMUFFNDAyNDExMDAwMDE3QjgKKzoxMDY3RDAwMDAwMEMxODgwMDA2NDEwMjExMEUwMDAwNThDNEIwMDAwQjQKKzoxMDY3RTAwMDAwRjg0MDA0MDAwODM4MjMwMTY3NTgyNDAwMDAzODIxQ0QKKzoxMDY3RjAwMDE1NDAwMDQxMDAwMDQwMjE1NTYwMDAxNjMxNjlGRkZGM0YKKzoxMDY4MDAwMDI1OEIwMDAxMzE2Q0ZGRkYwNUUxRkZFQzAxRTAxMDIxNTkKKzoxMDY4MTAwMDI0QTIwMDNFMDAwMkY5NDMwMTlGNjgyQTAwMDk3MDJCNjAKKzoxMDY4MjAwMDAxQUU0MDI0MTUwMEZGRUIwMDBDMTg4MDE1NDYwMDA1NTIKKzoxMDY4MzAwMDM0MDJGRkZGMDIwMDI4MjEwRTAwMDUwNDAwMDAzODIxNjkKKzoxMDY4NDAwMDAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4NzkKKzoxMDY4NTAwMDI3QkQwMDE4MTUyMDAwMDMwMTYwMTgyMTAwMEIxQzAyNDEKKzoxMDY4NjAwMDI0MDgwMDEwMzA2QTAwRkYxNTQwMDAwNTMwNkUwMDBGNEMKKzoxMDY4NzAwMDI1MEQwMDA4MDAwMzFBMDIzMUE4MDBGRjMwNkUwMDBGM0EKKzoxMDY4ODAwMDE1QzAwMDA1MzA3RjAwMDMyNTEwMDAwNDAwMDMxOTAyMjUKKzoxMDY4OTAwMDMyMDgwMEZGMzA3RjAwMDMxN0UwMDAwNTM4NjkwMDAxNkYKKzoxMDY4QTAwMDI1MDIwMDAyMDAwMzE4ODIzMDQ4MDBGRjM4NjkwMDAxMDkKKzoxMDY4QjAwMDMxMjMwMDAxMTA2MDAwMDQzMTAzMDBGRjI1MEEwMDAxQUMKKzoxMDY4QzAwMDMxNDgwMEZGMzEwMzAwRkYwMDBDNjk0MDAxQTM0MDIxNjMKKzoxMDY4RDAwMDI0MEEwMDAxMTBDQUZGRDUzMTEwRkZGRjI0NkUwMDAxMDkKKzoxMDY4RTAwMDMxQzgwMEZGMTExOUZGQzYzOEM5MDAwMTJEMUYwMDIwNTMKKzoxMDY4RjAwMDUzRTAwMDFDMjU4QjAwMDEyNDBEMDAwMTBBMDAwNTk3QzAKKzoxMDY5MDAwMDI0MEUwMDIwNTE0NjAwMTcyNThCMDAwMTI1MDkwMDAxQTcKKzoxMDY5MTAwMDMxMjgwMEZGMkQwOTAwMjA1MTIwMDAxMjI1OEIwMDAxOTUKKzoxMDY5MjAwMDI1NDMwMDAxMDEwRDUwMDQwMTRCMTAyNDI1MDkwMDAxRUQKKzoxMDY5MzAwMDE0NDBGRkY0MzA2QUZGRkYzMTI3RkZGRjEwRUUwMDBDMTgKKzoxMDY5NDAwMDI1ODJGRkZGMzA0Q0ZGRkYwMDAwNTAyMTM0MTBGRkZGNzUKKzoxMDY5NTAwMDMxMjgwMEZGMkQwOTAwMjA1NTIwRkZGMjI1NDMwMDAxQkEKKzoxMDY5NjAwMDI1OEIwMDAxMDE0NjQ4MjYwQTAwMDU1MTMxNkNGRkZGQzYKKzoxMDY5NzAwMDAwMDAzODIxMDAwMDUwMjEwQTAwMDVBMzM0MTBGRkZGNTkKKzoxMDY5ODAwMDI3QkRGRkQ4QUZCMDAwMTAzMEYwRkZGRkFGQjEwMDE0NEIKKzoxMDY5OTAwMDAwMTAzOTQyMzIxMUZGRTAwMDA3MTA4MEFGQjMwMDFDMzUKKzoxMDY5QTAwMDAwQjEyODIzMzBEM0ZGRkZBRkIyMDAxODMwQTVGRkZGOUUKKzoxMDY5QjAwMDAwODA5MDIxMDI2MDMwMjEwMDQ0MjAyMUFGQkYwMDIwRTAKKzoxMDY5QzAwMDBFMDAwNTJGMzIwNzAwMUYwMjIyODgyMTM0MDNGRkZGMkIKKzoxMDY5RDAwMDAyNDAyMDIxMDIwMDI4MjEwMjYwMzAyMTAwMDAzODIxREQKKzoxMDY5RTAwMDEwNDMwMDA5MzIzMUZGRkYwMjIwMTAyMThGQkYwMDIwMjkKKzoxMDY5RjAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwM0QKKzoxMDZBMDAwMDAzRTAwMDA4MjdCRDAwMjgwRTAwMDUyRjAwMDAwMDAwNEQKKzoxMDZBMTAwMDAwNDA4ODIxMDIyMDEwMjE4RkJGMDAyMDhGQjMwMDFDNkUKKzoxMDZBMjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4N0YKKzoxMDZBMzAwMDI3QkQwMDI4MDAwNDI0MDAzQzAzNjAwMEFDNjAzRDA4MzIKKzoxMDZBNDAwMDEwQTAwMDAyMzQ4MjEwMDYzNDgyMTAxNjAzRTAwMDA4MDEKKzoxMDZBNTAwMEFDNjIzRDA0MjdCREZGRTBBRkIwMDAxMDMwOTAwMEZGRjYKKzoxMDZBNjAwMDJFMDIwMDA2QUZCRjAwMTgxMDQwMDAwOEFGQjEwMDE0OUUKKzoxMDZBNzAwMDAwMTAzMDgwM0MwMzA4MDAyNDYzNTFGNDAwQzMyODIxMzcKKzoxMDZBODAwMDhDQTQwMDAwMDA4MDAwMDgwMDAwMDAwMDAwMDAyMDIxMEQKKzoxMDZBOTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxM0MKKzoxMDZBQTAwMDAzRTAwMDA4MjdCRDAwMjA5NzkxMDAxNjE2MjAwMDUxMzIKKzoxMDZBQjAwMDAwMDAyMDIxM0MwMjA4MDA5MDQyMDAzMzBBMDAwNjBBMzAKKzoxMDZBQzAwMDAwMDAwMDAwOTc4RDAwMTIxNUEwMDAzMTAwMDAyMDIxNjkKKzoxMDZBRDAwMDBBMDAwNjBBMjQwMjAwMDg5Nzg3MDAxMDE0RTAwMDFBMzIKKzoxMDZBRTAwMDAwMDAxODIxMDA2MDIwMjEyNDAyMDAwMTEwODBGRkU5MkQKKzoxMDZBRjAwMDhGQkYwMDE4MDAwNDI5QzIwMDQ1MzAyMTAwQTY1ODJCODIKKzoxMDZCMDAwMDExNjBGRkU0M0MwODgwMDAzQzA3MjAwMDAwMDU2OUMwREMKKzoxMDZCMTAwMDAxQTc2MDI1QUQwQzAwMjAzQzAzODAwODI0MDIwMDFGNjMKKzoxMDZCMjAwMDI0NDJGRkZGQUM2MDAwMDAwNDQxRkZGRDI0NjMwMDA0MjkKKzoxMDZCMzAwMDI0QTUwMDAxMDBBNjcwMkIxNUMwRkZGNTAwMDU2OUMwNTMKKzoxMDZCNDAwMDBBMDAwNUY0OEZCRjAwMTg5Nzg3MDAwODNDMDQwODAwNkUKKzoxMDZCNTAwMDI0ODQ1NEIwMjQwNTA0MDAwRTAwMDVBRjI0MDYwMDAxNkYKKzoxMDZCNjAwMDk3OEIwMDEwMjQ0NDAwMDEzMDhBRkZGRjI1NjlGRkZGNDYKKzoxMDZCNzAwMDJENDgwNDAwMDA0MDI4MjExNTAwMDA0MEE3ODkwMDEwN0UKKzoxMDZCODAwMDI0QUMzODAwMDAwQzE5QzAwQTAwMDYwOEE3ODAwMDA4RDEKKzoxMDZCOTAwMDk3ODcwMDBBM0MwNDA4MDAyNDg0NTUzMDI0MDUwNDAwMkIKKzoxMDZCQTAwMDBFMDAwNUFGMjQwNjAwMDE5Nzk5MDAxMjI0NDQwMDAxNEQKKzoxMDZCQjAwMDMwOThGRkZGMjcyRkZGRkYyRjBFMDQwMDAwNDA4ODIxOTEKKzoxMDZCQzAwMDE1QzAwMDJDQTc4RjAwMTJBNzgwMDAwQTNBMDIwMDAzMEMKKzoxMDZCRDAwMDI2MjQwMTAwMzA4NEZGRkYwRTAwMDVEQzJDNDUwMDAxNTcKKzoxMDZCRTAwMDAwMTFGOEMwMjdGMDAxMDAwMDEwMjFDMDBBMDAwNjBBQjkKKzoxMDZCRjAwMDI0MDIwMDA4OTc4NTAwMUE5Nzg3MDAwRTNDMDQwODAwQkQKKzoxMDZDMDAwMDI0ODQ1NUIwMEUwMDA1QUYyNDA2MDAwMTk3ODcwMDE2QjYKKzoxMDZDMTAwMDhGODkwMDE4MjQ0NTAwMDEzMEE4RkZGRjI0RTNGRkZGRkYKKzoxMDZDMjAwMDAxMDkzMDJCMDA0MDgwMjExNEMwMDAxOEE3ODMwMDE2RjIKKzoxMDZDMzAwMEE3ODAwMDBFOTc4NTAwMUMwRTAwMEUxRTAyMDAyMDIxNkEKKzoxMDZDNDAwMDI0NEEwNTAwMzE0NEZGRkYwRTAwMDVEQzI0MDUwMDAxNDUKKzoxMDZDNTAwMDNDMDUwODAwOTRBNTAwMzIwRTAwMEUxRTAyMDAyMDIxMDMKKzoxMDZDNjAwMDI0NDUyMTAwM0MwMjA4MDA5MDQyMDAzMzBBMDAwNjBBMzUKKzoxMDZDNzAwMDAwMDUyMUMwMEEwMDA2NDJBNzg0MDAwQTI0QUMzODAwOUYKKzoxMDZDODAwMDAwMEMxOUMwMEEwMDA2MDhBNzg0MDAwODBBMDAwNjVDNjgKKzoxMDZDOTAwMEE3ODUwMDBFMzA4NDAwRkYyN0JERkZFODJDODIwMDA2ODgKKzoxMDZDQTAwMEFGQkYwMDE0QUZCMDAwMTAxMDQwMDAxNTAwQTAzODIxOTUKKzoxMDZDQjAwMDAwMDQ0MDgwM0MwMzA4MDAyNDYzNTIwQzAxMDMyODIxOTcKKzoxMDZDQzAwMDhDQTQwMDAwMDA4MDAwMDgwMDAwMDAwMDI0Q0MwMDdGOUQKKzoxMDZDRDAwMDAwMDc1MUMyMDAwQzU5QzIzMTcwRkZGRjI1NDdDNDAwQTQKKzoxMDZDRTAwMDMwRTVGRkZGMjc4NDAwMDgwMjAwMzAyMTBFMDAwNTA0NzQKKzoxMDZDRjAwMDI0MDcwMDAxOTc4NjAwMTQwMjA2MjAyMUE3ODQwMDE0QUYKKzoxMDZEMDAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4RUIKKzoxMDZEMTAwMDNDMDUwODAwOENBNTAwMzAwMDA3NzlDMjBFMDAwMkU2OTEKKzoxMDZEMjAwMDI1RTRERjAwMzA0NUZGRkYzQzA0MDgwMDI0ODQ1NUIwMTMKKzoxMDZEMzAwMDI0MDYwMDAxMEUwMDA1MDQyNDA3MDAwMTk3OEUwMDE2QUEKKzoxMDZENDAwMDhGQkYwMDE0OEZCMDAwMTAyNUNEMDAwMTI3QkQwMDE4QTMKKzoxMDZENTAwMDAzRTAwMDA4QTc4RDAwMTYwMDA3QzlDMjI3MzhGRjAwMEUKKzoxMDZENjAwMDAwMTg3OEMyMzFGMEZGRkYzQzA0MDgwMDI0ODQ1NTMwM0QKKzoxMDZENzAwMDAyMDAyODIxMjQwNjAwMDEwRTAwMDUwNDI0MDcwMDAxNUEKKzoxMDZEODAwMDk3OEQwMDEyMjYwRTAxMDAwMDBFODQwMDI1QUMwMDAxMzQKKzoxMDZEOTAwMDNDMEI2MDAwQTc4QzAwMTJBRDYwM0QwODM2MDQwMDA2NzUKKzoxMDZEQTAwMDAwMDAzMDIxM0MwNzYwMDA4Q0UyM0QwNDMwNUYwMDA2QUIKKzoxMDZEQjAwMDE3RTBGRkZEMjRDOTAwMDEwMDA2MUIwMDMxMjYwMEZGN0IKKzoxMDZEQzAwMDAwNjQ0MDI1MkNDNTAwMDRBQ0U4M0QwNDE0QTBGRkY2ODcKKzoxMDZERDAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MUIKKzoxMDZERTAwMDAwMDc1MUMyMjU0OUM4MDAyNDA2MDAwMTI0MDcwMDAxRkMKKzoxMDZERjAwMDNDMDQwODAwMjQ4NDU0QjAwRTAwMDUwNDMxMjVGRkZGMzQKKzoxMDZFMDAwMDk3ODcwMDEwOEZCRjAwMTQ4RkIwMDAxMDI0RTYwMDAxOTgKKzoxMDZFMTAwMDI3QkQwMDE4MDNFMDAwMDhBNzg2MDAxMDMwODRGRkZGOUMKKzoxMDZFMjAwMDMwQTVGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFODUKKzoxMDZFMzAwMDNDMDg0MDgwMDA4ODM4MjUzQzAzMTAwMEFDQzAwMTgwMkQKKzoxMDZFNDAwMEFDQzUwMTg0QUNDNzAxODgwM0UwMDAwOEFDQzMwMUI4M0QKKzoxMDZFNTAwMDMwODRGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFNzYKKzoxMDZFNjAwMDNDMDg0MDM4OENBNzAwMDAwMDg4MjgyNTNDMDMxMDAwMEYKKzoxMDZFNzAwMEFDQzcwMTgwQUNDNTAxODgwM0UwMDAwOEFDQzMwMUI4MTEKKzoxMDZFODAwMDhGODMwMDU4OEY4NjAwNTAxMDY2MDAwQjAwODA0MDIxRDEKKzoxMDZFOTAwMDNDMDcwODAwMjRFNzU1QzAwMDAzMjhDMDAwQTcxMDIxQzQKKzoxMDZFQTAwMDhDNDQwMDAwMjQ2MzAwMDExMDg4MDAwNTMwNjMwMDBGNEIKKzoxMDZFQjAwMDU0NjZGRkZBMDAwMzI4QzAwM0UwMDAwODAwMDAxMDIxMTgKKzoxMDZFQzAwMDNDMDcwODAwMjRFNzU1QzQwMEE3MzAyMTAzRTAwMDA4NzAKKzoxMDZFRDAwMDhDQzIwMDAwM0MwMzkwMDAzNDYyMDAwMTAwODIyMDI1MzcKKzoxMDZFRTAwMDNDMDM4MDAwQUM2NDAwMjA4QzY1MDAyMDA0QTBGRkZFMDEKKzoxMDZFRjAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI4MDAwRTkKKzoxMDZGMDAwMDM0NDMwMDAxMDA4MzIwMjUwM0UwMDAwOEFDNDQwMDIwNDYKKzoxMDZGMTAwMDI3QkRGRkUwQUZCMTAwMTQzMDkxRkZGRkFGQjAwMDEwMEMKKzoxMDZGMjAwMEFGQkYwMDE4MTIyMDAwMTIwMEEwODAyMThDQTUwMDAwMjUKKzoxMDZGMzAwMDE0QTAwMDExMjQwNDAwMDIzQzA2ODAwMDhDQzIwMUI4OTkKKzoxMDZGNDAwMDA0NDBGRkZFM0MwNzQwMDAwMjI3MjAyNThGQkYwMDE4QTkKKzoxMDZGNTAwMDhGQjEwMDE0OEZCMDAwMTAzQzAzMTAwMDI3QkQwMDIwM0IKKzoxMDZGNjAwMEFDQzUwMTgwQUNDNDAxODgwM0UwMDAwOEFDQzMwMUI4MjMKKzoxMDZGNzAwMDBBMDAwNzFEOENBNTAwMDAwRTAwMDY3NDI0MDYwMjAwRkUKKzoxMDZGODAwMDAwMDAyODIxMEEwMDA3MURBRTAwMDAwMDMwODdGRkZGMjcKKzoxMDZGOTAwMDNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTNDMEE0MDA2NUIKKzoxMDZGQTAwMDhDQTkwMDAwMDBFQTQwMjVBQ0M5MDE4MDhDQTQwMDA0MzMKKzoxMDZGQjAwMDNDMDMxMDAwQUNDNDAxODRBQ0M4MDE4ODAzRTAwMDA4QTUKKzoxMDZGQzAwMEFDQzMwMUI4OEY4M0ZEOTQyN0JERkZFOEFGQkYwMDE0QTkKKzoxMDZGRDAwMEFGQjAwMDEwOTA2NzAwMDgwMDgwMTAyMTAwODAyODIxQzkKKzoxMDZGRTAwMDMwRTYwMDQwMDAwMDIwMjExMEMwMDAwODhDNTAwMDAwNTYKKzoxMDZGRjAwMDBFMDAwMDg4MDIwMDIwMjEwMjAwMjAyMThGQkYwMDE0MTMKKzoxMDcwMDAwMDhGQjAwMDEwMEEwMDA0OTcyN0JEMDAxODBFMDAwNzMyNDkKKzoxMDcwMTAwMDAwMDAwMDAwMEUwMDAwODgwMjAwMjAyMTAyMDAyMDIxNTQKKzoxMDcwMjAwMDhGQkYwMDE0OEZCMDAwMTAwQTAwMDQ5NzI3QkQwMDE4MEUKKzoxMDcwMzAwMDI3QkRGRkUwQUZCMDAwMTA4RjkwRkQ5NEFGQkYwMDFDRTQKKzoxMDcwNDAwMEFGQjIwMDE4QUZCMTAwMTQ5MjA2MDAwMTAwODA4ODIxOTEKKzoxMDcwNTAwMDBFMDAwNzA0MzBEMjAwMDQ5MjA0MDAwNTAwMTEyOUMyN0EKKzoxMDcwNjAwMEE2MDUwMDAwMzQ4MzAwNDBBMjAzMDAwNTBFMDAwNzBFQjEKKzoxMDcwNzAwMDAyMjAyMDIxMEUwMDA0OTkwMjIwMjAyMTI0MDIwMDAxNzgKKzoxMDcwODAwMEFFMDIwMDBDMDIyMDI4MjFBNjAyMDAxMDI0MDQwMDAyRjcKKzoxMDcwOTAwMEE2MDIwMDEyMjQwNjAyMDBBNjAyMDAxNDBFMDAwNjc0QzYKKzoxMDcwQTAwMEE2MDIwMDE2MTY0MDAwMEY4RkJGMDAxQzk3OEMwMDU0REMKKzoxMDcwQjAwMDNDMEIwODAwOEQ2QjAwNzgyNTg4RkZGRjMxMDlGRkZGMkUKKzoxMDcwQzAwMDI1NkEwMDAxMDEyQTM4MkIxMEUwMDAwNkE3ODgwMDU0MjkKKzoxMDcwRDAwMDNDMEY2MDA2MjQwRTAwMTYzNUVEMDAxMEFEQUUwMDUwREEKKzoxMDcwRTAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwM0EKKzoxMDcwRjAwMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFMEFGQjEwMDE0NkEKKzoxMDcxMDAwMEFGQkYwMDE4QUZCMDAwMTAxMDgwMDAwNDAwQTA4ODIxQUQKKzoxMDcxMTAwMDI0MDIwMDgwMTA4MjAwMDcwMDAwMDAwMDAwMDAwMDBEMjMKKzoxMDcxMjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4NkIKKzoxMDcxMzAwMDI3QkQwMDIwMEUwMDA3MDQwMEEwMjAyMThGODZGRDk0QUIKKzoxMDcxNDAwMDAyMjAyMDIxOTBDNTAwMDUwRTAwMDcwRTMwQjAwMEZGODAKKzoxMDcxNTAwMDI0MDMwMDNFMTYwM0ZGRjEwMDAwMDAwMDNDMDU4MDAwMDAKKzoxMDcxNjAwMDhDQTQwMTc4MDQ4MEZGRkUyNDA4MDAwNzNDMDcxMDAwNkYKKzoxMDcxNzAwMEFDQjEwMTQwMDIyMDIwMjFBMEE4MDE0NDhGQkYwMDE4MUIKKzoxMDcxODAwMDhGQjEwMDE0OEZCMDAwMTBBQ0E3MDE3ODBBMDAwNzVCMjQKKzoxMDcxOTAwMDI3QkQwMDIwMjdCREZGRTBBRkIwMDAxMEFGQkYwMDE4MzMKKzoxMDcxQTAwMEFGQjEwMDE0M0MxMDgwMDA4RTExMDAyMDAwMDAwMDAwRTAKKzoxMDcxQjAwMDBFMDAwNDk5QUUwNDAwMjBBRTExMDAyMDhGQkYwMDE4MEQKKzoxMDcxQzAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMkQKKzoxMDcxRDAwMDMwODRGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFRjMKKzoxMDcxRTAwMDNDMDg0MDM1MDA4ODM4MjUzQzAzMTAwMEFDQzUwMTgwQzAKKzoxMDcxRjAwMEFDQzAwMTg0QUNDNzAxODgwM0UwMDAwOEFDQzMwMUI4OEYKKzoxMDcyMDAwMDMwODRGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFQzIKKzoxMDcyMTAwMDNDMDg0MDM2MDA4ODM4MjUzQzAzMTAwMEFDQzUwMTgwOEUKKzoxMDcyMjAwMEFDQzAwMTg0QUNDNzAxODgwM0UwMDAwOEFDQzMwMUI4NUUKKzoxMDcyMzAwMDI3QkRGRkQwQUZCNTAwMjQzMDk1RkZGRkFGQjYwMDI4QzMKKzoxMDcyNDAwMEFGQjQwMDIwQUZCRjAwMkNBRkIzMDAxQ0FGQjIwMDE4MkEKKzoxMDcyNTAwMEFGQjEwMDE0QUZCMDAwMTAzMEI2RkZGRjEyQTAwMDI3OEUKKzoxMDcyNjAwMDAwMDBBMDIxOEY5MjAwMzg4RTQzMDAwMDNDMDY4MDAwNzEKKzoxMDcyNzAwMDI0MDIwMDQwMDAwMzNFMDIwMDAzMkMwMjMwRTQwMDdGQTEKKzoxMDcyODAwMDAwNjY5ODI0MTQ4MjAwMUQzMEE1MDBGRjhGODMwMDQ4RkIKKzoxMDcyOTAwMDJDNjgwMDBBNTEwMDAwMTA4Rjg2MDAzMDAwMDM1ODgwQ0YKKzoxMDcyQTAwMDNDMEMwODAwMjU4QzUyMjgwMTZDNTAyMThENDkwMDAwQUYKKzoxMDcyQjAwMDAxMjAwMDA4MDAwMDAwMDAwMkQ0NzAyMTMxQzVGRkZGNEEKKzoxMDcyQzAwMDBFMDAwNkQ2MjQwNDAwODQxNjYwMDAwMjhGOTIwMDM4NTcKKzoxMDcyRDAwMEFGODAwMDQ4OEY4NjAwMzAyNjRGMDAyMDI2ODkwMDAxQUQKKzoxMDcyRTAwMDAxRTA5MDIxMzEzNEZGRkYxNEMwMDAwNEFGOEYwMDM4NUIKKzoxMDcyRjAwMDAyOTUyODJCMTRBMEZGREMwMDAwMDAwMDAyODAxMDIxNjIKKzoxMDczMDAwMDhGQkYwMDJDOEZCNjAwMjg4RkI1MDAyNDhGQjQwMDIwQ0IKKzoxMDczMTAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMTMKKzoxMDczMjAwMDAzRTAwMDA4MjdCRDAwMzAyNDA3MDAzNDE0QTcwMTQ2RkQKKzoxMDczMzAwMDAwMDAwMDAwOTI0NzAwMEU4Rjk4RkQ5ODhGOTBGRDk0RkEKKzoxMDczNDAwMDI0MEYxNjAwQTMwNzAwMTk5MjQ0MDAwRDNDMDg4MDAwOEEKKzoxMDczNTAwMDNDMDc4MDBDQTMwNDAwMTg5NjVGMDAxMjNDMDk2MDAwRjMKKzoxMDczNjAwMDNDMTE3RkZGQTYxRjAwNUM5NjU5MDAxMDM2MjJGRkZGREMKKzoxMDczNzAwMDI0MDQwMDA1MzMyNUZGRkZBRTA1MDA1NDhFNDYwMDFDOTMKKzoxMDczODAwMEFEMEYwMDI4OENFRTAwMDA4RDJENDQ0ODAxQzYxODI2NTQKKzoxMDczOTAwMDAxQTMzMDIxQUUwNjAwMzg4RTBDMDAzODI0Q0EwMDAxNEIKKzoxMDczQTAwMDNDMEQ3RjAwQUUwQzAwM0M4RTBCMDAzQ0FGMEIwMDA0OEMKKzoxMDczQjAwMEFFMEEwMDIwOEUxMzAwMjBBRTEzMDAxQ0EzMDAwMDFCOTkKKzoxMDczQzAwMEFFMDIwMDJDQTMwNDAwMTI4RTVGMDAxNDI0MTMwMDUwQTAKKzoxMDczRDAwMEFFMUYwMDM0OEUxOTAwMzRBRjE5MDAxNDhFNDUwMDE4MEEKKzoxMDczRTAwMEFFMDUwMDQ4OTI0RjAwMENBMjBGMDA0RTkyMDkwMDA4MTMKKzoxMDczRjAwMDM1MkUwMDIwQTIwRTAwMDg4RTAzMDAxODAwNkQ2MDI0QjgKKzoxMDc0MDAwMDM1OEI0MDAwQUUwQjAwMTg5MjBBMDAwMDMxNTIwMEZGOEQKKzoxMDc0MTAwMDEyNTMwMkE2MjQxM0ZGODAzQzA0MDgwMDI0ODQ1NjQwMjMKKzoxMDc0MjAwMDBFMDAwNzQwMDAwMDAwMDAyNDBDMDAwNDI0MDgwMDAxQTYKKzoxMDc0MzAwMDNDMDUwODAwOENBNTU2NDAzQzA0ODAwMEEyMEMwMDI1QTkKKzoxMDc0NDAwMEEyMDgwMDA1OEM5MDAxNzgwNjAwRkZGRThGOTIwMDM4OUMKKzoxMDc0NTAwMDI0MEQwMDAyM0MwMzEwMDBBQzg1MDE0MEEwOEQwMTQ0QzYKKzoxMDc0NjAwMEFDODMwMTc4MEEwMDA4MDRBRjgwMDA0ODJDQUQwMDM3RDcKKzoxMDc0NzAwMDExQTBGRjk5OEY4NjAwMzAwMDA1ODA4MDNDMTEwODAwMjQKKzoxMDc0ODAwMDI2MzE1MjUwMDIxMTc4MjE4REVFMDAwMDAxQzAwMDA4MTMKKzoxMDc0OTAwMDAwMDAwMDAwMjQxMDAwMDQxNEIwMDA4RTNDMDc4MDAwOUYKKzoxMDc0QTAwMDNDMEIwODAwOEQ2QjU2NDA4Rjg2RkQ5NEFDRUIwMDIwQTIKKzoxMDc0QjAwMDhFNDMwMDA4OEY4RkZEOTgyNDBFMDA1MEFDQzMwMDMwMUYKKzoxMDc0QzAwMDhFNEEwMDA4QUNDQTAwNTA4RTQyMDAwQ0FDQzIwMDM0OTgKKzoxMDc0RDAwMDhFNDQwMDEwQUNDNDAwMzg4RTVGMDAxMEFDREYwMDU0NDYKKzoxMDc0RTAwMDhFNTkwMDE0QUNEOTAwM0M4RTU4MDAxOEFERjgwMDA0MzkKKzoxMDc0RjAwMDhFNTEwMDFDQUNEMTAwMjA5MEM1MDAwMDMwQTkwMEZGQzcKKzoxMDc1MDAwMDExMkUwMjc2MDAwMDAwMDA4Q0M1MDAzNDhDRDEwMDMwQjIKKzoxMDc1MTAwMDAwQjEzMDIzMDRDMDAwRjMyNDA0MDA4QzEyNjAwMEYwOUEKKzoxMDc1MjAwMDI0MDIwMDAzMEEwMDA4MDRBRjgyMDA0ODI0MEYwMDA1NkIKKzoxMDc1MzAwMDE0QUYwMDY4M0MwQjgwMDAzQzAzMDgwMDhDNjM1NjQwOEQKKzoxMDc1NDAwMDhGODZGRDk0QUQ2MzAwMjA4RTRBMDAwNDhGOTlGRDk4Q0MKKzoxMDc1NTAwMDI0MDcyMDAwQUNDQTAwMUM5MjQyMDAwODI0MTIwMDA4MzQKKzoxMDc1NjAwMEEzMjIwMDE5OEY4NDAwMzg5MDlGMDAwOUEzM0YwMDE4QzAKKzoxMDc1NzAwMDhGODUwMDM4OTBCODAwMEEzMzA0MDBGRjEwOTIwMDEwODUKKzoxMDc1ODAwMDI4OEMwMDA5MTU4MDAwQkMyNDA4MDAwMjI0MEUwMDIwNkQKKzoxMDc1OTAwMDEwOEUwMDBCMzQwNzgwMDAyODg5MDAyMTE1MjAwMDA4NzgKKzoxMDc1QTAwMDI0MDc0MDAwMjQxMTAwNDAxMDkxMDAwNTNDMDcwMDAxMTEKKzoxMDc1QjAwMDI0MEYwMDgwMTA4RjAwMDIzQzA3MDAwMjI0MDc0MDAwQzcKKzoxMDc1QzAwMDhDREYwMDE4M0MwNEZGMDAwM0U0QzgyNDAzMjdDMDI1MTcKKzoxMDc1RDAwMEFDRDgwMDE4OTBCMjAwMEJBMEQyMDAyNzhGODMwMDM4REYKKzoxMDc1RTAwMDk0NjUwMDBDMTBBMDAyMkEwMDAwMDAwMDk0NjcwMDBDQjMKKzoxMDc1RjAwMDNDMTk4MDAwMjQwQkZGQkZBNEM3MDA1QzkwNjIwMDBFMDIKKzoxMDc2MDAwMDI0MDcwMDA0QTBDMjAwMDg4Rjg0MDAzODkwOUYwMDBGNTgKKzoxMDc2MTAwMEEwREYwMDA5OEY4QzAwMzg4RDkyMDAxMDhGMzgwMDc0MjUKKzoxMDc2MjAwMDAyNTgyODIzQUNDNTAwNTg4RDhGMDAxNEFDQ0YwMDJDMTUKKzoxMDc2MzAwMDk1OTEwMDE4MzIyOUZGRkZBQ0M5MDA0MDk1OEUwMDFBQzEKKzoxMDc2NDAwMDMxRDBGRkZGQUNEMDAwNDQ4RDhEMDAxQ0FDQ0QwMDQ4ODQKKzoxMDc2NTAwMDk1ODgwMDAyQTRDODAwNzg5MTgzMDAwRUEwQzMwMDA4OUEKKzoxMDc2NjAwMDkwQ0EwMDA4MDE0QjEwMjQxMjYwMDFENEEwQzIwMDA4ODcKKzoxMDc2NzAwMDhGOTIwMDM4MEEwMDA4MDRBRjg3MDA0ODI0MDYwMDA2RUQKKzoxMDc2ODAwMDE0QTYwMDE0M0MwRDgwMDAzQzEwMDgwMDhFMTA1NjQwREIKKzoxMDc2OTAwMDhGOENGRDkwQURCMDAwMjA4RTQ4MDAxODhGODZGRDk0MzEKKzoxMDc2QTAwMDhGOEFGRDk4QUQ4ODAwMDA4Q0MzMDAzODI0MDQwMDA1NDMKKzoxMDc2QjAwMEFEODMwMDA0OENDQjAwM0MxMjYwMDA4MUFENEIwMDAwMTgKKzoxMDc2QzAwMDBBMDAwODA0QUY4NDAwNDgyNDBFMDAwNzEwQUUwMDRCRTcKKzoxMDc2RDAwMDI0MDQwMDA2M0MwNTA4MDAyNEE1NTY0MDBFMDAwNzEzQUMKKzoxMDc2RTAwMDI0MDQwMDgxOEY5MjAwMzgwMDEzMTAyQjBBMDAwODA0MzQKKzoxMDc2RjAwMEFGODIwMDQ4MjQxOTAwMjMxNEI5RkZGNjNDMEI4MDAwMjgKKzoxMDc3MDAwMDNDMEMwODAwOEQ4QzU2NDA4RjhBRkQ5OEFENkMwMDIwOTMKKzoxMDc3MTAwMDhGOTFGRDk0OEU0NjAwMDQyNTQ0MDAyMDI2NDUwMDE0RDgKKzoxMDc3MjAwMEFFMjYwMDI4MjQwNjAwMDMwRTAwMEUyQTI1NTAwMDMwNDUKKzoxMDc3MzAwMDhGODcwMDM4MDIwMDIwMjEyNDA2MDAwMzBFMDAwRTJBNDUKKzoxMDc3NDAwMDI0RTUwMDA4M0MwNDA4MDAyNDg0NTY0MDBFMDAwNzQwNEQKKzoxMDc3NTAwMDAwMDAwMDAwOTIyMjAwMDAyNDFGMDA1MDMwNDQwMEZGNkYKKzoxMDc3NjAwMDU0OUZGRkUxOEY5MjAwMzgwRTAwMEUxNTAwMDAwMDAwQkMKKzoxMDc3NzAwMDBBMDAwOTA5OEY5MjAwMzgyNDAzMDAzMzE0QTMwMDMyNTEKKzoxMDc3ODAwMDNDMDI4MDAwM0MxMTA4MDA4RTMxNTY0MDhGOEVGRDk4REYKKzoxMDc3OTAwMEFDNTEwMDIwOEU0NDAwMDgyNDA5MDAyODhGODhGRDk0RjUKKzoxMDc3QTAwMEFEQzQwMDMwOEU1RjAwMEMyNDA2MDAwOUFEREYwMDM0NEMKKzoxMDc3QjAwMDhFNTkwMDEwQUREOTAwMzg4RTU4MDAxNEFERDgwMDIwNzUKKzoxMDc3QzAwMDhFNDUwMDE4QURDNTAwMjQ4RTRGMDAxQ0FEQ0YwMDI4OUIKKzoxMDc3RDAwMEExQzkwMDExOEU0RDAwMDQxMjYwMDAzMUFEMEQwMDI4Q0EKKzoxMDc3RTAwMDhGOTIwMDM4MEEwMDA4MDRBRjg2MDA0ODI0MDkwMDIyNUUKKzoxMDc3RjAwMDE0QTlGRkI4MDAwMDAwMDAyNDA0MDAwNzNDMEYwODAwOTMKKzoxMDc4MDAwMDhERUY1NjQwM0MxMTgwMDBBRTJGMDAyMDU2NjBGRUIxMzcKKzoxMDc4MTAwMEFGODQwMDQ4M0MwNDA4MDAyNDg0NTY0MDBFMDAwNzQwMTIKKzoxMDc4MjAwMDI0MTMwMDUwOEY5OEZEOTQ5MzEyMDAwMDMyNDUwMEZGRkUKKzoxMDc4MzAwMDEwQjMwMTY5MDAwMDAwMDA4RjkyMDAzODAwMDAyMDIxODEKKzoxMDc4NDAwMDBBMDAwODA0QUY4NDAwNDgzQzA1MDgwMDI0QTU1NjQwRkYKKzoxMDc4NTAwMDBFMDAwNkUzMjQwNDAwODEwQTAwMDkwOThGOTIwMDM4MTMKKzoxMDc4NjAwMDAyRDQ5ODIxMzI2NUZGRkYwRTAwMDZENjI0MDQwMDg0NUUKKzoxMDc4NzAwMDBBMDAwODA0OEY5MjAwMzgxMDg4RkY1MTI0MDcwNDAwODIKKzoxMDc4ODAwMDI4ODcwMDAzMTBFMDAxQTMyNDEwMDAwNDI0MEQwMDAxNDgKKzoxMDc4OTAwMDU0OERGRjRCMjQwNzQwMDAwQTAwMDhCRjI0MDcwMTAwNTUKKzoxMDc4QTAwMDNDMDUwODAwMjRBNTU2NDAwRTAwMDczMjI0MDQwMDgyM0YKKzoxMDc4QjAwMDhGOTIwMDM4MDAwMDMwMjEwQTAwMDgwNEFGODYwMDQ4OEIKKzoxMDc4QzAwMDNDMDQwODAwMjQ4NDU2NDA4Q0MyMDAzODBFMDAwNzQwNTcKKzoxMDc4RDAwMDhDQzMwMDNDOEY5MjAwMzgwQTAwMDk1RjAwMDAyMDIxMTEKKzoxMDc4RTAwMDI0MDQwMDgyM0MwNTA4MDAyNEE1NTY0MDBFMDAwNzMyRkYKKzoxMDc4RjAwMDAwMDAwMDAwOEY5MjAwMzgwMDAwMTAyMTBBMDAwODA0RTgKKzoxMDc5MDAwMEFGODIwMDQ4OEU1MDAwMDQ4RjkxRkQ5NDNDMEE4MDAwQTUKKzoxMDc5MTAwMEFENTAwMDIwOTIyMjAwMDUwMjAwMjgyMTMwNDYwMDAyQ0UKKzoxMDc5MjAwMDE0QzAwMTgwMjQwNDAwOEE4RjkyRkQ5ODAyMDAyODIxNEYKKzoxMDc5MzAwMDI0MDQwMDhEOTI0QjAwMUIzMTYzMDAyMDE0NjAwMTc5RjgKKzoxMDc5NDAwMDAwMDAwMDAwOTIyRDAwMDkyNDBDMDAxMjMxQTgwMEZGNTUKKzoxMDc5NTAwMDExMEMwMTc0MjQwNDAwODEwRTAwMDcwNDAyMDAyMDIxOTAKKzoxMDc5NjAwMDkyNDUwMDFCMjQwRTAwMDQwMjAwMjAyMTM0QTkwMDQyOEQKKzoxMDc5NzAwMEEyNDkwMDFCMEUwMDA3MEVBMjJFMDAyNTNDMDQ4MDAwMjkKKzoxMDc5ODAwMDhDOTEwMTc4MDYyMEZGRkUyNDE4MDAwMkFDOTAwMTQwODMKKzoxMDc5OTAwMEEwOTgwMTQ0OEY5MjAwMzgzQzBGMTAwMEFDOEYwMTc4MDIKKzoxMDc5QTAwMDBBMDAwOTBBMDAxMzEwMkI4RTUwMDAwNDhGOTFGRDk0RDkKKzoxMDc5QjAwMDNDMUY4MDAwQUZGMDAwMjA5MjM5MDAwNTAyMDAyODIxMTIKKzoxMDc5QzAwMDMzMjcwMDAyMTRFMDAwMTcyNDA0MDA4QTkyMjQwMDA5REYKKzoxMDc5RDAwMDI0MTIwMDA0MDIwMDI4MjEzMDg2MDBGRjEwRDIwMDExN0EKKzoxMDc5RTAwMDI0MDQwMDgxMEUwMDA3MDQwMjAwMjAyMThGOENGRDk4RTIKKzoxMDc5RjAwMDI0MEIwMDEyMjQwM0ZGRkU5MThEMDAxQjAyMDAyMDIxQTYKKzoxMDdBMDAwMDM1QTgwMDIwQTE4ODAwMUJBMjJCMDAwOTkyMkEwMDA1OUUKKzoxMDdBMTAwMDAxNDMxMDI0MEUwMDA3MEVBMjIyMDAwNTAyMDAyODIxQjcKKzoxMDdBMjAwMDAwMDAyMDIxMEUwMDA3Q0YwMDAwMDAwMDBBMDAwOTA5MTUKKzoxMDdBMzAwMDhGOTIwMDM4OEU1MTAwMDQzQzAyODAwMDNDMTAwODAwRjgKKzoxMDdBNDAwMDI2MTA1NjQwQUM1MTAwMjAzQzAxMDgwMEFDMzE1NjQwOTUKKzoxMDdBNTAwMDkyNDYwMDAzMzBDNDAwMDQxMDgwMDE2NThGODRGRDk0QjkKKzoxMDdBNjAwMDI0MDIwMDA2QTA4MjAwMDk5MjREMDAxQjI0MDhGRkMwREEKKzoxMDdBNzAwMDMxQUMwMDNGMDE4ODU4MjVBMDhCMDAwODkyNDMwMDAzRDkKKzoxMDdBODAwMDMwNkEwMDAxMTU0MDAxNUMwMDAwMDAwMDhFNDIwMDA4RDEKKzoxMDdBOTAwMEFFMDIwMDA4M0MwMjA4MDA4QzQyNTY0ODEwNDAwMTVCRDAKKzoxMDdBQTAwMDhGOEVGRDk4MDAwMjgxQzI4Rjg1RkQ5NEE1RDAwMDBDQjkKKzoxMDdBQjAwMDhFNUYwMDBDMjQwRjAwMDEyNDA5MDAxNEFEREYwMDJDQTAKKzoxMDdBQzAwMDhFNTkwMDEwQUREOTAwMUM5NjQ3MDAxNkE1QzcwMDNDODIKKzoxMDdBRDAwMDk2NTgwMDE0QTVEODAwM0VBQ0FGMDAwQ0E0QUYwMDEwMUYKKzoxMDdBRTAwMEE0QUYwMDEyQTRBRjAwMTRBNEFGMDAxNjEyNjAwMTVGOEYKKzoxMDdBRjAwMEExQzkwMDExOTI0NDAwMDMzMDkyMDAwMjJFNTMwMDAxRUMKKzoxMDdCMDAwMDhGOTIwMDM4MjY2MjAwMDgwQTAwMDgwNEFGODIwMDQ4RkQKKzoxMDdCMTAwMDhFNDYwMDA0M0MwNTgwMDAzQzA0ODAwOEFDQTYwMDIwOTIKKzoxMDdCMjAwMDhFNDcwMDA4OTA4OTAwMDAyNDExMDA1MDMxMjIwMEZGODgKKzoxMDdCMzAwMDEwNTEwMEI4MjQwNTAwODgzQzA0ODAwMDhDOEYwMUI4RTcKKzoxMDdCNDAwMDA1RTBGRkZFMDAxMzgwMkIzQzE4NDAwOTAwQjgxMDI1MEIKKzoxMDdCNTAwMEFGOTAwMDQ4M0MxMDEwMDBBQzg2MDE4MEFDODcwMTg0RDcKKzoxMDdCNjAwMEFDODIwMTg4QUM5MDAxQjgwQTAwMDgwNThGODYwMDMwMEQKKzoxMDdCNzAwMDhFNDUwMDA0M0MwNjgwMDAzQzA5ODAwOEFDQzUwMDIwMEUKKzoxMDdCODAwMDkxM0YwMDAwMjQwNDAwNTAzM0Y5MDBGRjEzMjQwMEIwOUIKKzoxMDdCOTAwMDI0MDYwMDg4M0MwNDgwMDA4QzhBMDFCODA1NDBGRkZFNjIKKzoxMDdCQTAwMDNDMEU0MDBFMDBDRTY4MjUzQzA4MTAwMEFDODUwMTgwREMKKzoxMDdCQjAwMEFDODAwMTg0QUM4RDAxODhBQzg4MDFCODkxMkIwMDAwQTkKKzoxMDdCQzAwMDI0MENGRjgwMjQwNDAwMDQwMTZDMTgyNTI0MDYwMDMwRDYKKzoxMDdCRDAwMDBFMDAwNjc0QTEyMzAwMDAwQTAwMDkwOThGOTIwMDM4RTQKKzoxMDdCRTAwMDhFNTAwMDA0OEY5MUZEOTgzQzBGODAwMEFERjAwMDIwNzYKKzoxMDdCRjAwMDkyMjUwMDFCMzBBOTAwMTAxMTIwMDA3QzI0MDMwMDgxNzUKKzoxMDdDMDAwMDNDMDQ4MDAwOEM4NzAxQjgwNEUwRkZGRTNDMUY0MDFGNEQKKzoxMDdDMTAwMEFDOTAwMTgwMDA3RjEwMjUwMDEzQzgyQjNDMTAxMDAwOTEKKzoxMDdDMjAwMEFDODAwMTg0QUY5OTAwNDhBQzgyMDE4OEFDOTAwMUI4NjcKKzoxMDdDMzAwMDBBMDAwODA1OEY4NjAwMzA4RTQ0MDAxQzBFMDAwNkVGRjcKKzoxMDdDNDAwMDAwMDAwMDAwMTA0MDAwRjgwMDQwMzgyMThGOTIwMDM4RkEKKzoxMDdDNTAwMDI0MDYwMDg5M0MwNTgwMDA4Q0FFMDFCODA1QzBGRkZFRkIKKzoxMDdDNjAwMDAwMDAwMDAwQUNBNzAxODA4RTUwMDAxQzNDMTE0MDAxQjgKKzoxMDdDNzAwMDAwMTM3ODJCMDBEMTM4MjUzQzEzMTAwMEFDQjAwMTg0RTAKKzoxMDdDODAwMEFGOEYwMDQ4QUNBNzAxODhBQ0IzMDFCODBBMDAwODA1NjMKKzoxMDdDOTAwMDhGODYwMDMwOTY1OTAwMDIzQzEwMDgwMDI2MTA1NjQwOEUKKzoxMDdDQTAwMDMzMzgwMDA0MTMwMDAwQTMzQzA0NjAwMDhFNUYwMDFDMDYKKzoxMDdDQjAwMDNDMDY4MDAwQUNERjAwMjAzQzAxMDgwMEFDM0Y1NjQwOTEKKzoxMDdDQzAwMDk2NEYwMDAyMzFFNzAwMDExNEUwMDBFMzAwMDAwMDAwREQKKzoxMDdDRDAwMDhFNDIwMDA0QUUwMjAwMDgzQzEwMDgwMDhFMTA1NjQ4ODgKKzoxMDdDRTAwMDEyMDAwMEQ5M0MwNjgwMDA4Rjg1RkQ5NDI0MTAwMDAxMEQKKzoxMDdDRjAwMDhDQkYwMDE4OEY5MUZEOTg4Rjg5RkQ5MDAzRTZDODI1RjEKKzoxMDdEMDAwMEFDQjkwMDE4QTBBMDAwMDVBQ0IwMDAwQzNDMTgwODAwRUQKKzoxMDdEMTAwMDhGMTg1NjQ4OEY4NzAwMzhBNEIwMDAxMDAwMTg3OUMyMTkKKzoxMDdEMjAwMEE0QjAwMDEyQTRCMDAwMTRBNEIwMDAxNkE2MkYwMDBDM0EKKzoxMDdEMzAwMDhDRUUwMDA4OEY4RDAwMzg4RjhDMDAzOEFFMkUwMDJDMTIKKzoxMDdENDAwMDhEQTgwMDBDMjQwNzAwMDJBRTI4MDAxQzkxOEIwMDEwQTcKKzoxMDdENTAwMEEyMkIwMDExOEY4MzAwMzg5MDZBMDAxMUExMkEwMDA4MUQKKzoxMDdENjAwMDhGODIwMDM4OTA0NDAwMTJBMEE0MDA0RThGOTIwMDM4RjkKKzoxMDdENzAwMDkyNDYwMDEzQTIyNjAwMTI4RjkyMDAzODk2NUYwMDE0REMKKzoxMDdEODAwMEE2M0YwMDNDOTY1OTAwMTZBNjM5MDAzRThFNTgwMDE4QjIKKzoxMDdEOTAwMEFFMzgwMDE0NTY2MEZENEZBRjg3MDA0ODNDMDUwODAwMjAKKzoxMDdEQTAwMDI0QTU1NjQwMEUwMDA3MTMwMDAwMjAyMThGOTIwMDM4QjIKKzoxMDdEQjAwMDAwMDAzODIxMEEwMDA4MDRBRjg3MDA0ODNDMDUwODAwOEQKKzoxMDdEQzAwMDI0QTU1NjQwMEUwMDA3MzIyNDA0MDA4MjhGOTIwMDM4MEEKKzoxMDdERDAwMDBBMDAwOEVDMDAwMDM4MjEwRTAwMEUxNTAwMDAwMDAwMUIKKzoxMDdERTAwMDhGOTIwMDM4MEEwMDA5NUYwMDAwMjAyMTBFMDAwNzA0NkUKKzoxMDdERjAwMDAyMDAyMDIxOTIzMjAwMUIwMjAwMjAyMTM2NTgwMDEwODAKKzoxMDdFMDAwMDBFMDAwNzBFQTIzODAwMUI4RjkyMDAzODBBMDAwQTRGOUUKKzoxMDdFMTAwMDAwMDAxODIxOTI0MzAwMEMzMDZBMDAwMTExNDAwMDAzNTkKKzoxMDdFMjAwMDAwMDAwMDAwOTY0QjAwMEVBNDhCMDAyQzkyNDgwMDBDMjIKKzoxMDdFMzAwMDMxMEMwMDAyMTE4MEZGNDAwMDAwMjgyMTk2NEUwMDEyRjQKKzoxMDdFNDAwMDhFNEQwMDE0QTQ4RTAwMUEwQTAwMEExREFDOEQwMDFDNzEKKzoxMDdFNTAwMDhGODMwMDU4OEY4NzAwNTAxMDY3RkY0RTAwMDAzMDIxM0QKKzoxMDdFNjAwMDNDMDgwODAwMjUwODU1QzQwMDAzMjBDMDAwODgzMDIxQzQKKzoxMDdFNzAwMDhDRDEwMDAwMTIyNTAwQzgyNDYyMDAwMTMwNDMwMDBGOUQKKzoxMDdFODAwMDE0NjdGRkZBMDAwMzIwQzAwQTAwMEEzNDAwMDAzMDIxMDIKKzoxMDdFOTAwMDNDMDUwODAwMjRBNTU2NDAwRTAwMDczMjI0MDQwMDhCNDAKKzoxMDdFQTAwMDhGOTIwMDM4MEEwMDA4RUMwMDEzMzgyQjNDMEIwODAwQjYKKzoxMDdFQjAwMDhENkI1NjQwMjREOEZGRkUyNTcxMDEwMDMyMkEwMDdGQzkKKzoxMDdFQzAwMDAxNDc5MDIxMDIzMzEwMjRBRDAyMDAyOEFFNDYwMEQwQjUKKzoxMDdFRDAwMEFFNDAwMEQ0MEEwMDA4NTVBRTU4MDAxQ0FDQzAwMDU0OTcKKzoxMDdFRTAwMDNDMEUwODAwOERDRTU2NDAzQzA5ODAwQzM1MkMwMTAwMUMKKzoxMDdFRjAwMEFDRUUwMDI4OEU1MDAwMTRBRDkwMDBEMDhFNEQwMDE0RDIKKzoxMDdGMDAwMEFEOEQwMEQ0OEU0ODAwMTAyNTA3RkZGRTBBMDAwODkxQjEKKzoxMDdGMTAwMEFEODcwMDFDNTQ5MEZEQUEyNDA3NDAwMDBBMDAwOEJGNEEKKzoxMDdGMjAwMDI0MDcxMDAwMEUwMDA3QzMwMDAwMDAwMDBBMDAwOTA5MjIKKzoxMDdGMzAwMDhGOTIwMDM4OEM4MzQ0MkMzQzA1REVBRDM0QjJCRUVGMEEKKzoxMDdGNDAwMDNDMDEwODAwQUMyMDU2NDAxMDcyMDA5MDAwMDAwMDAwNzgKKzoxMDdGNTAwMDNDMDQ2QzYyMzQ4Mjc5NzAxNDYyMDAwODI0MDQwMDAyQ0MKKzoxMDdGNjAwMDk3OEEwMDU0OTc4MzAwNEMwMjAwMjgyMTAxNDM0ODJCMzQKKzoxMDdGNzAwMDExMjAwMDE5MjQwNDAwOTIyNDA0MDAwMjBFMDAwNUU0REMKKzoxMDdGODAwMDI0MDUwMjAwM0MwQjgwMDBBRDYyMDAyMDNDMDEwODAwOEIKKzoxMDdGOTAwMEFDMjI1NjQwMTA0MDAwMEQ4RjhFMDAzODI0MEMwMDI4NzMKKzoxMDdGQTAwMDI0MDQwMDAzOTFDRDAwMTAzMUE4MDBGRjU1MEMwMDAxRkUKKzoxMDdGQjAwMDI0MDQwMDAxMEUwMDAwNEMwMDAwMDAwMDEwNDAwMDA0RUEKKzoxMDdGQzAwMDI0MDQwMDgzMEEwMDBBN0Y4RjkyMDAzODI0MDQwMDgzNkYKKzoxMDdGRDAwMDNDMDUwODAwMjRBNTU2NDAwRTAwMDcxMzAwMDAwMDAwRDEKKzoxMDdGRTAwMDhGOTIwMDM4MDAxMzM4MkIwQTAwMDgwNEFGODcwMDQ4MkUKKzoxMDdGRjAwMDBBMDAwOUU4MjQwMjAwMTI4RTQ0MDAwODBFMDAwNkVGNzEKKzoxMDgwMDAwMDAwMDAwMDAwMEEwMDA5RjRBRTAyMDAwODNDMDUwODAwNjgKKzoxMDgwMTAwMDI0QTU1NjQwMEUwMDA2RTMyNDA0MDA4NzhGOTIwMDM4MDIKKzoxMDgwMjAwMDBBMDAwQTExMDAxMzEwMkIyNDA0MDAwNDBFMDAwNUU0QkEKKzoxMDgwMzAwMDI0MDUwMDMwMTQ0MDAwMTQwMDQwMzgyMThGOTIwMDM4OEQKKzoxMDgwNDAwMDBBMDAwQTY0MjQwNjAwODMzQzA1MDgwMDI0QTU1NjQwNjMKKzoxMDgwNTAwMDBBMDAwQjQ1MjQwNDAwODc4RTQ0MDAwNDBFMDAwNkVGM0UKKzoxMDgwNjAwMDAwMDAwMDAwMEEwMDBBODVBRTAyMDAwODNDMDUwODAwNzYKKzoxMDgwNzAwMDI0QTU1NjQwMEUwMDA3MzIyNDA0MDA4MjhGOTIwMDM4NTcKKzoxMDgwODAwMDBBMDAwQTExMDAwMDEwMjE4RjkyMDAzODNDMDg4MDA4NzUKKzoxMDgwOTAwMDNDMEM4MDAwMjQwQjAwNTAyNDBBMDAwMUFEODIwMDIwMUIKKzoxMDgwQTAwMEExMEIwMDAwQTEwQTAwMDE5MjQ5MDAwNEExMDkwMDE4RDcKKzoxMDgwQjAwMDkyNDQwMDA1QTEwNDAwMTk5MjQzMDAwNjNDMDQwODAwMDQKKzoxMDgwQzAwMDI0ODQ1NUM0QTEwMzAwMUE5MjQyMDAwNzNDMDMwODAwMEYKKzoxMDgwRDAwMDI0NjM1NUMwQTEwMjAwMUI5MjQ1MDAwOEExMDUwMDFDQTUKKzoxMDgwRTAwMDkyNDYwMDA5QTEwNjAwMUQ5MjVGMDAwQUExMUYwMDFFMTIKKzoxMDgwRjAwMDkyNTkwMDBCQTExOTAwMUY5MjU4MDAwQ0ExMTgwMDIwRTIKKzoxMDgxMDAwMDkyNTEwMDBEQTExMTAwMjE5MjUwMDAwRUExMTAwMDIyRTkKKzoxMDgxMTAwMDkyNEYwMDBGQTEwRjAwMjM5MjRFMDAxMEExMEUwMDI0RDkKKzoxMDgxMjAwMDkyNEQwMDExQTEwRDAwMjU5NjRDMDAxNEE1MEMwMDI4QkQKKzoxMDgxMzAwMDk2NEIwMDE2OEY4QTAwNTA4Rjk4MDA1OEE1MEIwMDJBODYKKzoxMDgxNDAwMDk2NDkwMDE4MDAwQTEwQzAyNTQ1MDAwMUE1MDkwMDJDMTkKKzoxMDgxNTAwMDhFNDYwMDFDMDA0NEM4MjEwMDQzRjgyMTMwQTUwMDBGQzIKKzoxMDgxNjAwMEFGRTYwMDAwQUYyNzAwMDAxMEI4MDAwM0FGODUwMDUwNTUKKzoxMDgxNzAwMDBBMDAwQTY0MDAwMDMwMjEyNEFEMDAwMTMxQTgwMDBGN0MKKzoxMDgxODAwMDAwMDAzMDIxMEEwMDBBNjRBRjg4MDA1ODhDODM0NDJDMTgKKzoxMDgxOTAwMDBBMDAwQjI0M0MwNDZDNjIzQzA3MDgwMDI0RTc1NUMwMkQKKzoxMDgxQTAwMDAwODc5MDIxQUNDMDAwMDAwMDAwMzAyMTBBMDAwQTM0OTIKKzoxMDgxQjAwMEFFNDAwMDAwM0MwNDgyMDEzQzAzNjAwMDM0ODIwRTAyQTkKKzoxMDgxQzAwMEFDNjAzRDY4QUY4MDAwNzgwM0UwMDAwOEFDNjIzRDZDQjUKKzoxMDgxRDAwMDI3QkRGRkU4QUZCMDAwMTAzMDkwRkZGRjAwMTAxODQyM0QKKzoxMDgxRTAwMDJDNjIwMDQxQUZCRjAwMTQxNDQwMDAwMjI0MDQwMDgwNDAKKzoxMDgxRjAwMDI0MDMwMDQwM0MwMTA4MDBBQzMwMDA2MDNDMDEwODAwNTIKKzoxMDgyMDAwMEFDMjMwMDY0MEUwMDBFMUUwMDYwMjgyMTI0NDgwMkJGMkIKKzoxMDgyMTAwMDI0MDlGRjgwMDEwOTI4MjQwMDEwMzk4MDAwMTAzMDQwMTMKKzoxMDgyMjAwMDhGQkYwMDE0OEZCMDAwMTAwMEE3MjAyMTAwODYxODIxRjYKKzoxMDgyMzAwMEFGODMwMDYwM0MwMTA4MDBBQzI1MDA1ODNDMDEwODAwRjkKKzoxMDgyNDAwMEFDMjQwMDVDMDNFMDAwMDgyN0JEMDAxODMwODMwMEZGNjkKKzoxMDgyNTAwMDMwQzZGRkZGMzBFNDAwRkYzQzA4ODAwMDhEMDIwMUI4MEIKKzoxMDgyNjAwMDA0NDBGRkZFMDAwMzU0MDAwMTQ0MzgyNTNDMDk2MDAwMkYKKzoxMDgyNzAwMDAwRTkyMDI1M0MwMzEwMDBBRDA1MDE4MEFEMDYwMTg0MTYKKzoxMDgyODAwMEFEMDQwMTg4MDNFMDAwMDhBRDAzMDFCODhGODYwMDM4MTMKKzoxMDgyOTAwMDNDMDk2MDEyMzUyNzAwMTA4Q0NCMDAwNDNDMEM2MDBFQUEKKzoxMDgyQTAwMDM1ODUwMDEwMzE2QTAwMDYyRDQ4MDAwMUFDRTgwMEM0OTUKKzoxMDgyQjAwMDhDQzQwMDA0QUNBNDMxODA4Q0MyMDAwODk0QzMwMDAyQkEKKzoxMDgyQzAwMEFDQTIzMTg0MDNFMDAwMDhBNzgzMDA3MDhGODUwMDM4REEKKzoxMDgyRDAwMDhGODdGRjIwOEY4NkZGMjg4Q0FFMDAwNDNDMEY2MDEyMzIKKzoxMDgyRTAwMDM1RTgwMDEwQUNFRTAwNjg4Q0FEMDAwOEFDRUQwMDZDMTkKKzoxMDgyRjAwMDhDQUMwMDEwQUNDQzAwNEM4Q0FCMDAwQ0FDQ0IwMDQ4NzAKKzoxMDgzMDAwMDk0Q0EwMDU0M0MwMjA4MDA4QzQyMDA0NDI1NDkwMDAxRjQKKzoxMDgzMTAwMEE0QzkwMDU0OTRDNDAwNTQzMDgzRkZGRjEwNjIwMDE3QjYKKzoxMDgzMjAwMDAwMDAwMDAwM0MwMjA4MDA4QzQyMDA0MEE0QzIwMDUyNDEKKzoxMDgzMzAwMDhDQTMwMDE4QUNFMzAwMzA4Q0EyMDAxNEFDRTIwMDJDM0IKKzoxMDgzNDAwMDhDQjkwMDE4QUNGOTAwMzg4Q0I4MDAxNDI0MDUwMDAxNzEKKzoxMDgzNTAwMEFDRjgwMDM0OEQwNjAwQkM1MEM1MDAxOThEMDIwMEI0ODUKKzoxMDgzNjAwMDhEMDIwMEI4QTRFMjAwNDg5NEU0MDA0OEE0RTQwMDRBNjYKKzoxMDgzNzAwMDk0RTgwMERBMDNFMDAwMDgzMTAyRkZGRjNDMDIwODAwNDUKKzoxMDgzODAwMDhDNDIwMDI0QTRDMDAwNTRBNEMyMDA1MjhDQTMwMDE4NDQKKzoxMDgzOTAwMEFDRTMwMDMwOENBMjAwMTRBQ0UyMDAyQzhDQjkwMDE4QzUKKzoxMDgzQTAwMEFDRjkwMDM4OENCODAwMTQyNDA1MDAwMUFDRjgwMDM0OTYKKzoxMDgzQjAwMDhEMDYwMEJDNTRDNUZGRUI4RDAyMDBCODhEMDIwMEI0RTEKKzoxMDgzQzAwMEE0RTIwMDQ4OTRFNDAwNDhBNEU0MDA0QTk0RTgwMERBRjcKKzoxMDgzRDAwMDAzRTAwMDA4MzEwMkZGRkY4Rjg2MDAzODNDMDQ4MDAwNzQKKzoxMDgzRTAwMDhDQzkwMDA4OENDODAwMDgwMDA5MjlDMDAwMDgzOUMwRTEKKzoxMDgzRjAwMEFDODcwMDIwOTBDMzAwMDczMDYyMDAwNDEwNDAwMDNBQjAKKzoxMDg0MDAwMEFGODUwMDc0OTBDQjAwMDczMTZBMDAwODExNDAwMDM5MzUKKzoxMDg0MTAwMDhGODdGRjI0OENDRDAwMEM4Q0NFMDAxNDAxQUU2MDJCMTYKKzoxMDg0MjAwMDExODAwMDMyMDAwMDAwMDA4Q0MyMDAwQ0FDRTIwMDcwMzEKKzoxMDg0MzAwMDhDQ0IwMDE4OEY4NUZGMjA4Rjg4RkYyOEFDRUIwMDc0NTEKKzoxMDg0NDAwMDhDQ0EwMDEwMjQwMkZGRjhBQ0FBMDBDODhDQzkwMDBDMkEKKzoxMDg0NTAwMEFEMDkwMDYwOENDNDAwMUNBQ0E0MDBDMDkwRTMwMDdDOUIKKzoxMDg0NjAwMDAwNjJDODI0QTBGOTAwN0M5MEQ4MDAwNzMzMEYwMDA4RjAKKzoxMDg0NzAwMDExRTAwMDA0MDAwMDAwMDA5MEVEMDA3QzM1QUMwMDAxMkMKKzoxMDg0ODAwMEEwRUMwMDdDOTBDRjAwMDczMUVFMDAwMTExQzAwMDA5ODQKKzoxMDg0OTAwMDAwMDAwMDAwOTBFNDAwN0MyNDE4MDAwMjM0ODIwMDAyRjYKKzoxMDg0QTAwMEEwRTIwMDdDOTBBMzAwRUMzMDc5MDBGRjEzMzgwMDEzQTkKKzoxMDg0QjAwMDI0MDgwMDM0OTBDOTAwMDczMTI2MDAwMjEwQzAwMDA0Q0YKKzoxMDg0QzAwMDAwMDAwMDAwOTBFQjAwN0MzNTZBMDAwNEEwRUEwMDdDMEMKKzoxMDg0RDAwMDkwRUQwMDdEMzFBQzAwM0ZBMEVDMDA3RDk0QTcwMERBNjgKKzoxMDg0RTAwMDAzRTAwMDA4MzBFMkZGRkY4Rjg3RkYyNDBBMDAwQzVBRTgKKzoxMDg0RjAwMDhDQzIwMDE0MEEwMDBDNUJBQ0UwMDA3MDBBMDAwQzdDMUIKKzoxMDg1MDAwMEFDQTgwMENDOEY4QzAwMzgyN0JERkZEOEFGQjMwMDFDQkYKKzoxMDg1MTAwMEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAyMEFGQjEwMDE0NzEKKzoxMDg1MjAwMDkxOEYwMDE1M0MxMzYwMEUzNjczMDAxMDMxRUIwMDBGNzUKKzoxMDg1MzAwMEEzOEIwMDdDOEQ4RjAwMDQ4RDhCMDAwODk1OUYwMDEyMEIKKzoxMDg1NDAwMDk1OTkwMDEwOTU4NDAwMUE5NTk4MDAxRTk1OEUwMDFDMzAKKzoxMDg1NTAwMDMzRURGRkZGMzMyQUZGRkYzMDg5RkZGRjMzMDhGRkZGQjIKKzoxMDg1NjAwMDMxQzdGRkZGM0MwMTA4MDBBQzJEMDAyNDNDMDEwODAwOEUKKzoxMDg1NzAwMEFDMjkwMDQ0M0MwMTA4MDBBQzJBMDA0MEFFNjgzMTc4QzgKKzoxMDg1ODAwMEFFNjczMTdDOTE4NTAwMTU5NTkxMDAxNjNDMTI2MDEyMDIKKzoxMDg1OTAwMDM2NTIwMDEwMzBBMjAwRkYzMjMwRkZGRkFFNjIzMTg4NDkKKzoxMDg1QTAwMEFFNTAwMEI0OTE4MzAwMTQ5NTlGMDAxODI0MDYwMDAxN0EKKzoxMDg1QjAwMDAwNjZDODA0MzNGOEZGRkZBRTU5MDBCOEFFNTgwMEJDREYKKzoxMDg1QzAwMDkxOEUwMDE0QUY4RjAwNjQzQzA4NjAwNjMxQ0QwMEZGMkYKKzoxMDg1RDAwMEFFNEQwMEMwOTE4QTAwMTU5NTg0MDAwRTNDMDc2MDBBREMKKzoxMDg1RTAwMDMxNDkwMEZGQUY4QjAwNjgzMDg0RkZGRkFFNDkwMEM4RkYKKzoxMDg1RjAwMDM1MTEwMDEwMEUwMDBCQzMzNEYwMDQxMDNDMDIwODAwQ0IKKzoxMDg2MDAwMDhDNDIwMDYwM0MwMzA4MDA4QzYzMDA2NDNDMDYwODAwNTgKKzoxMDg2MTAwMDhDQzYwMDU4M0MwNTA4MDA4Q0E1MDA1QzhGODQwMDYwNjcKKzoxMDg2MjAwMDhGQkYwMDIwQUUyMzAwNENBRTY1MzE5Q0FFMDMwMDU0REEKKzoxMDg2MzAwMEFFNDUwMERDQUU2MjMxQTBBRTYzMzFBNEFFNjYzMTk4QzcKKzoxMDg2NDAwMEFFMjIwMDQ4OEZCMzAwMUNBRTAyMDA1MDhGQjEwMDE0NjAKKzoxMDg2NTAwMEFFNDIwMEUwQUU0MzAwRTRBRTQ2MDBEODhGQjAwMDEwNUEKKzoxMDg2NjAwMDhGQjIwMDE4MEEwMDA0Q0MyN0JEMDAyODk3ODUwMDcyM0QKKzoxMDg2NzAwMDk3ODMwMDVDMjdCREZGRThBRkIwMDAxMDAwQTMxMDJCNkMKKzoxMDg2ODAwMEFGQkYwMDE0MjQwNDAwMDU4RjkwMDAzODEwNDAwMDU1M0YKKzoxMDg2OTAwMDI0MDkwMDAyMEUwMDA1RTQ4Rjg1MDA2MEFGODIwMDc0OUIKKzoxMDg2QTAwMDI0MDQwMDAzMTA0MDAwNEYyNDA5MDAwMjNDMDY4MDAwMEYKKzoxMDg2QjAwMDBFMDAwMDRDQUNDMjAwMjAyNDA3MDAwMTI0MDgyMDAwNUEKKzoxMDg2QzAwMDEwNDAwMDREMjQwNDAwMDU5NzhFMDA3MjhGOEFGRjI0MEQKKzoxMDg2RDAwMDI0MDkwMDUwMjVDNTAwMDFBNzg1MDA3MkExNDkwMDAwQUEKKzoxMDg2RTAwMDNDMEQwODAwOERBRDAwNjQyNDAzODAwMDhGODRGRjIwQzIKKzoxMDg2RjAwMDAwMEQ2NjAwQUQ0QzAwMThBNTQwMDAwNjk1NEIwMDBBMjEKKzoxMDg3MDAwMDhGODVGRjI4MjQwMkZGODAwMTYzMzAyNEE1NDYwMDBBREMKKzoxMDg3MTAwMDkxNUYwMDBBMDAwMDQ4MjEwM0UyQzgyNUExNTkwMDBBMjAKKzoxMDg3MjAwMEEwQTAwMDA4QTE0MDAwNENBMDgwMDBDNTk2MTgwMDAyM0YKKzoxMDg3MzAwMDk3ODMwMDcwM0MwMjAwMDRBNDk4MDBEQTk2MEYwMDAyQjAKKzoxMDg3NDAwMDI0MThGRkJGMjVFRTI0MDFBNDhFMDBBRThFMEQwMDA0NzgKKzoxMDg3NTAwMEFDQUQwMDQ0OEUwQzAwMDhBQ0FDMDA0MEE0QTAwMDUwQUUKKzoxMDg3NjAwMEE0QTAwMDU0OEUwQjAwMEMyNDBDMDAzMEFDOEIwMDI4MEQKKzoxMDg3NzAwMDhFMDYwMDEwQUM4NjAwMjRBNDgwMDAzRUE0ODcwMDRFMjQKKzoxMDg3ODAwMEE0ODcwMDUwQTQ4MzAwM0NBRDQyMDA3NEFDODgwMEM4QUMKKzoxMDg3OTAwMEFDQTgwMDYwQTA4NzAwRUM5MDlGMDBDNDMzRjkwMDdGNzQKKzoxMDg3QTAwMEEwOTkwMEM0OTA5MDAwQzQwMjE4NzgyNEEwOEYwMEM0M0YKKzoxMDg3QjAwMDkxNEUwMDdDMzVDRDAwMDFBMTREMDA3QzkzOEIwMDdDNTcKKzoxMDg3QzAwMEFENDgwMDcwQUM4QzAwQ0NBMDhCMDBDNjhGODgwMDY4RDAKKzoxMDg3RDAwMDhGODcwMDY0QUM4ODAwQjRBQzg3MDBCOEE1NDAwMDc4RUYKKzoxMDg3RTAwMEE1NDAwMDdBOEZCRjAwMTQ4RkIwMDAxMDAxMjAxMDIxMjcKKzoxMDg3RjAwMDAzRTAwMDA4MjdCRDAwMTg4Rjg1MDA3NDBFMDAwNjc0ODIKKzoxMDg4MDAwMDhGODYwMDYwMEEwMDBENDgyNDA5MDAwMjI3QkRGRkUwQTIKKzoxMDg4MTAwMEFGQjAwMDEwOEY5MDAwMzhBRkIxMDAxNEFGQkYwMDE4OTgKKzoxMDg4MjAwMDhFMDkwMDA0MEUwMDA0OTkwMDA5MjFDMDhFMDgwMDA0N0UKKzoxMDg4MzAwMDhGODRGRjIwOEY4MkZGMjgwMDA4MzlDMDNDMDY4MDAwMEIKKzoxMDg4NDAwMEFDQzcwMDIwOTQ4NTAwREE5MDQzMDAxMzE0NjAwMDFDMkMKKzoxMDg4NTAwMDMwQjFGRkZGOEY4Q0ZGMjQ5MThCMDAwODMxNkEwMDQwRkMKKzoxMDg4NjAwMDE1NDAwMDBCMDAwMDAwMDA4RTBEMDAwNDAyMjAzMDIxOTYKKzoxMDg4NzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDQwMDIyQTUKKzoxMDg4ODAwMDAwMDAzODIxMDAwRDI5QzAwQTAwMEJFMjI3QkQwMDIwOUUKKzoxMDg4OTAwMDBFMDAwMDYzMDAwMDAwMDA4RTBEMDAwNDAyMjAzMDIxNTUKKzoxMDg4QTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDQwMDIyNzUKKzoxMDg4QjAwMDAwMDAzODIxMDAwRDI5QzAwQTAwMEJFMjI3QkQwMDIwNkUKKzoxMDg4QzAwMDBFMDAwMDVCMDAwMDAwMDA4RTBEMDAwNDAyMjAzMDIxMkQKKzoxMDg4RDAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDQwMDIyNDUKKzoxMDg4RTAwMDAwMDAzODIxMDAwRDI5QzAwQTAwMEJFMjI3QkQwMDIwM0UKKzoxMDg4RjAwMDI3QkRGRkUwQUZCMjAwMTgzMDkyRkZGRkFGQjAwMDEwMEQKKzoxMDg5MDAwMEFGQkYwMDFDQUZCMTAwMTQxMjQwMDAxRTAwMDA4MDIxNTgKKzoxMDg5MTAwMDhGODYwMDM4OENDNTAwMDAyNDAzMDAwNjAwMDUzRjAyNDYKKzoxMDg5MjAwMDAwMDUxNDAyMzBFNDAwMDcxNDgzMDAxNjMwNDUwMEZGRjAKKzoxMDg5MzAwMDJDQTgwMDA2MTEwMDAwNDAwMDA1NTg4MDNDMEMwODAwREYKKzoxMDg5NDAwMDI1OEM1MzJDMDE2QzUwMjE4RDQ5MDAwMDAxMjAwMDA4MUEKKzoxMDg5NTAwMDAwMDAwMDAwOEY4RTAwNzgyNDBEMDAwMTExQ0QwMDUwMjIKKzoxMDg5NjAwMDI0MDIwMDAyQUY4MjAwNzgyNjA5MDAwMTMxMzBGRkZGQTcKKzoxMDg5NzAwMDI0QzgwMDIwMDIxMjIwMkIwMTAwMzAyMTE0ODBGRkU1QzIKKzoxMDg5ODAwMEFGODgwMDM4MDIwMDEwMjE4RkJGMDAxQzhGQjIwMDE4ODIKKzoxMDg5OTAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwNDUKKzoxMDg5QTAwMDkzODcwMDVFNTRFMDAwMzQwMDAwMzAyMTBFMDAwQzkwRUMKKzoxMDg5QjAwMDAwMDAwMDAwOEY4NjAwMzgwQTAwMERBODI0MDIwMDAxODQKKzoxMDg5QzAwMDhGODcwMDc4MjQwNTAwMDIxMEU1MDAzMTI0MDQwMDEzOEQKKzoxMDg5RDAwMDAwMDAyODIxMDAwMDMwMjEyNDA3MDAwMTBFMDAwQkUyRDYKKzoxMDg5RTAwMDAwMDAwMDAwMEEwMDBEQTk4Rjg2MDAzODhGODMwMDc4RjAKKzoxMDg5RjAwMDI0MDIwMDAyMTQ2MkZGRjYyNDA0MDAxMjBFMDAwQzQ1NEIKKzoxMDhBMDAwMDAwMDAwMDAwOEY4NTAwNzQwMDQwMzAyMTI0MDQwMDEyMTMKKzoxMDhBMTAwMDBFMDAwQkUyMDAwMDM4MjEwQTAwMERBOThGODYwMDM4RjUKKzoxMDhBMjAwMDhGODMwMDc4MjQxMTAwMDMxMDcxMDAyOTI0MUYwMDAyOTUKKzoxMDhBMzAwMDEwN0ZGRkNFMjYwOTAwMDEyNDA0MDAxMDAwMDAyODIxMjkKKzoxMDhBNDAwMDAwMDAzMDIxMEEwMDBEQzYyNDA3MDAwMThGOTEwMDc4MzQKKzoxMDhBNTAwMDI0MDYwMDAyMTYyNkZGRjkyNDA0MDAxMDBFMDAwQ0VBN0EKKzoxMDhBNjAwMDAwMDAwMDAwMTQ0MDAwMjM4Rjk4MDAzODhGODYwMDM4RTMKKzoxMDhBNzAwMDBBMDAwREE4MjQwMjAwMDMyNDA0MDAxNDBFMDAwQkUyRDcKKzoxMDhBODAwMDAwMDAyODIxOEY4NjAwMzgwQTAwMERBODI0MDIwMDAyNjkKKzoxMDhBOTAwMDBFMDAwRDUyMDAwMDAwMDAwQTAwMERBOThGODYwMDM4NUMKKzoxMDhBQTAwMDBFMDAwQkYyMDAwMDAwMDAyNDE5MDAwMjI0MDQwMDE0NDAKKzoxMDhBQjAwMDAwMDAyODIxMDAwMDMwMjEwMDAwMzgyMUFGOTkwMDc4MDMKKzoxMDhBQzAwMDBFMDAwQkUyMDAwMDAwMDAwQTAwMERBOThGODYwMDM4OUUKKzoxMDhBRDAwMDBFMDAwQzAyMDAwMDAwMDA4Rjg1MDA3NDI0MTkwMDAyQjMKKzoxMDhBRTAwMDAwNDAzMDIxMjQwNDAwMTAwMDAwMzgyMTBBMDAwREZGNEUKKzoxMDhBRjAwMEFGOTkwMDc4MDA0MDM4MjEyNDA0MDAxMDk3MEYwMDAyM0QKKzoxMDhCMDAwMDAwMDAyODIxMEUwMDBCRTIzMUU2RkZGRjhGODYwMDM4QkYKKzoxMDhCMTAwMDBBMDAwREE5QUY5MTAwNzg4Rjg0RkYyNDNDMDc3RkZGRTYKKzoxMDhCMjAwMDM0RTZGRkZGOEM4NTAwMTgyNDAyMDAwMTAwQTYxODI0RkIKKzoxMDhCMzAwMEFDODMwMDE4MDNFMDAwMDhBMDgyMDAwNTMwODRGRkZGMkEKKzoxMDhCNDAwMDMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTMwODIwMDAxQ0YKKzoxMDhCNTAwMDEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTE0ODBGRkZCMzEKKzoxMDhCNjAwMDAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA3NDUKKzoxMDhCNzAwMDAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjI0QTUwMDA0MTIKKzoxMDhCODAwMEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNDAzRTAwMDA4NTIKKzoxMDhCOTAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwMjYKKzoxMDhCQTAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGMUMKKzoxMDhCQjAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwQUYKKzoxMDhCQzAwMDAwMDQxMUMwMDNFMDAwMDgyNDQyMDI0MDI3QkRGRkU4NzIKKzoxMDhCRDAwMEFGQjAwMDEwMDA4MDgwMjFBRkJGMDAxNDBFMDAwRTNGMjgKKzoxMDhCRTAwMDAwQTAyMDIxMDA1MDQ4MjEyNDBBRkY4MDhGQkYwMDE0REMKKzoxMDhCRjAwMDhGQjAwMDEwMDEyQTMwMjQzMTI3MDA3RjNDMDg4MDBBMDIKKzoxMDhDMDAwMDNDMDQyMTAwMDBFODEwMjEwMEM0MjgyNTNDMDM4MDAwMUEKKzoxMDhDMTAwMDI3QkQwMDE4QUM2NTAwMjRBRjgyMDAyNEFDNDAwMDAwRTIKKzoxMDhDMjAwMEFDNjUwMDI0MDNFMDAwMDhBQzQwMDA0MDNDMEQwODAwQTcKKzoxMDhDMzAwMDhEQUQwMDU4MDAwNTYxODAyNDBBRkY4MDAxQTQ1ODIxRjEKKzoxMDhDNDAwMDAxNkM0ODIxMDEyQTMwMjQzMTI3MDA3RjNDMDg4MDBDMjgKKzoxMDhDNTAwMDNDMDQyMTAwMDBFODEwMjEwMEM0MjgyNTNDMDM4MDAwQ0EKKzoxMDhDNjAwMEFDNjUwMDI4QUY4MjAwMjAwM0UwMDAwOEFDNDAwMDI0N0YKKzoxMDhDNzAwMDMwQTVGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFMTcKKzoxMDhDODAwMDNDMDg2MDE1MDBBODM4MjUzQzAzMTAwMEFDQzQwMTgwRTYKKzoxMDhDOTAwMEFDQzAwMTg0QUNDNzAxODgwM0UwMDAwOEFDQzMwMUI4RDQKKzoxMDhDQTAwMDNDMEQwODAwOERBRDAwNTgwMDA1NjE4MDI0MEFGRjgwNEUKKzoxMDhDQjAwMDAxQTQ1ODIxMDE2QzQwMjEwMTBBNDgyNDAwMDkzMTQwRDcKKzoxMDhDQzAwMDMxMDcwMDdGMDBDNzI4MjUzQzA0MjAwMDAwQTQxODI1OTgKKzoxMDhDRDAwMDNDMDI4MDAwQUM0MzA4MzAwM0UwMDAwOEFGODAwMDIwNzUKKzoxMDhDRTAwMDI3QkRGRkU4QUZCMDAwMTAwMDgwODAyMUFGQkYwMDE0QTcKKzoxMDhDRjAwMDBFMDAwRTNGMDBBMDIwMjEwMDUwNDgyMTI0MEJGRjgwRDEKKzoxMDhEMDAwMDAxMkI1MDI0MDAwQTM5NDAzMTI4MDA3RjNDMDYyMDAwMDYKKzoxMDhEMTAwMDhGQkYwMDE0OEZCMDAwMTAwMEU4MjgyNTM0QzIwMDAxNzYKKzoxMDhEMjAwMDAwQTIxODI1M0MwNDgwMDAyN0JEMDAxOEFDODMwODMwNDEKKzoxMDhEMzAwMDAzRTAwMDA4QUY4MDAwMjQzQzA1ODAwODhDQTcwMDYwOTkKKzoxMDhENDAwMDNDMDY4MDA4MDA4NzEwMkIxNDQwMDAxMTJDODM0MDAwNDMKKzoxMDhENTAwMDhDQTgwMDYwMkQwMzQwMDAxMDYwMDAwRjI0MDM0MDAwMjkKKzoxMDhENjAwMDhDQzkwMDYwMDA4OTI4MkIxNEEwMDAwMjAwODAxODIxMDMKKzoxMDhENzAwMDhDQzMwMDYwMDAwMzVBNDIwMDBCMzA4MDNDMEEwODAwOUMKKzoxMDhEODAwMDI1NEE1M0EwMDBDQTIwMjEwM0UwMDAwODhDODIwMDAwN0QKKzoxMDhEOTAwMDE0NjBGRkYzMjQwMzQwMDAwMDAzNUE0MjAwMEIzMDgwQUMKKzoxMDhEQTAwMDNDMEEwODAwMjU0QTUzQTAwMENBMjAyMTAzRTAwMDA4MUQKKzoxMDhEQjAwMDhDODIwMDAwM0MwNTgwMDg5MEE2MDAwODkzODQwMDg4RkYKKzoxMDhEQzAwMDI0QzIwMDAxMzA0MjAwRkYzMDQzMDA3RjEwNjQwMDBDRDkKKzoxMDhERDAwMDAwMDIzODI3QTBBMjAwMDgzQzA0ODAwMDhDODUwMTc4OUUKKzoxMDhERTAwMDA0QTBGRkZFOEY4QTAwODAyNDA5MDAwMjNDMDgxMDAwQzYKKzoxMDhERjAwMEFDOEEwMTQwQTA4OTAxNDQwM0UwMDAwOEFDODgwMTc4RjYKKzoxMDhFMDAwMDBBMDAwRUM0MzBFMjAwODAyN0JERkZEOEFGQjIwMDE4QzAKKzoxMDhFMTAwMDhGOTIwMDg0QUZCRjAwMjBBRkIzMDAxQ0FGQjAwMDEwMzIKKzoxMDhFMjAwMEFGQjEwMDE0OEY5MzAwMjA4RTU5MDAyODNDMTAwMDgwQjEKKzoxMDhFMzAwMDNDMEVGRkVGQUU3OTAwMDA4RTU4MDAyNEEyNjAwMDBBQkQKKzoxMDhFNDAwMDM1Q0RGRkZGQUU3ODAwMDQ5MjUxMDAyQzNDMEJGRjlGMDQKKzoxMDhFNTAwMDM1NkFGRkZGQTI3MTAwMEM4RTZGMDAwQzNDMDgwMDQwQzkKKzoxMDhFNjAwMEEyNzEwMDBCMDFGMDYwMjUwMThENDgyNDAxMkEzODI0RUQKKzoxMDhFNzAwMDAwRTgzMDI1QUU2NjAwMEM4RTQ1MDAwNEFFNjAwMDE4OTgKKzoxMDhFODAwMDNDMDQwMEZGQUU2NTAwMTQ4RTQzMDAyQzM0ODJGRkZGQ0IKKzoxMDhFOTAwMEE2NjAwMDA4MDA2MkY4MjRBRTdGMDAxMDhFNTkwMDA4MUEKKzoxMDhFQTAwMDhGOTAwMDgwOTY0RTAwMTJBRTc5MDAyMDhFNTEwMDBDRkIKKzoxMDhFQjAwMDMxRDgzRkZGMDAxODc5ODBBRTcxMDAyNDhFNEQwMDE0MjgKKzoxMDhFQzAwMDAxRjA2MDIxMzFDQjAwMDFBRTZEMDAyODhFNEEwMDE4MDAKKzoxMDhFRDAwMDAwMEM0MUMyMDAwQjRCODBBRTZBMDAyQzhFNDYwMDFDNzkKKzoxMDhFRTAwMDAxMDkzODIxQTY2NzAwMUNBRTY2MDAzMDk2NDUwMDAyRDUKKzoxMDhFRjAwMDhFNDQwMDIwQTY2NTAwMUVBRTY0MDAzNDkyNDMwMDMzMDkKKzoxMDhGMDAwMDMwNjIwMDA0NTQ0MDAwMDY5MjQ3MDAwMDNDMDI4MDA4OTIKKzoxMDhGMTAwMDM0NDMwMTAwOEM3RjAwQzBBRTdGMDAzMDkyNDcwMDAwRDgKKzoxMDhGMjAwMDhGODYwMDI0QTBDNzAwMzA5MjQ1MDAzMzMwQTQwMDAyOTEKKzoxMDhGMzAwMDUwODAwMDA3OTI1MTAwMDE4Rjg4MDAyNDI0MEJGRjgwOEQKKzoxMDhGNDAwMDkxMEEwMDMwMDE0QjQ4MjVBMTA5MDAzMDkyNTEwMDAxREYKKzoxMDhGNTAwMDhGOTAwMDI0MjQwQ0ZGQkYyNDA0RkZERkEyMTEwMDMxRjYKKzoxMDhGNjAwMDhGOEQwMDI0M0MxODgwMDgzNzExMDA4MDkxQUYwMDNDQTEKKzoxMDhGNzAwMDMxRUUwMDdGQTFBRTAwM0M4Rjg5MDAyNDkxMkIwMDNDOTQKKzoxMDhGODAwMDAxNkM1MDI0QTEyQTAwM0M4RjlGMDAyNDhFNjgwMDE0OUQKKzoxMDhGOTAwMDkzRTYwMDNDMkQwNzAwMDEwMDA3MTE0MDAwQzQyODI0N0YKKzoxMDhGQTAwMDAwQTIxODI1QTNFMzAwM0M4Rjg3MDAyNDk2NTkwMDEyRTUKKzoxMDhGQjAwMEE0RjkwMDMyOEU0NTAwMDQ5MjJFMDA3QzMwQjAwMDAzRUMKKzoxMDhGQzAwMDAwMTA3ODIzMzFFRDAwMDMwMEFEMTAyMTMxQ0MwMDAyRjgKKzoxMDhGRDAwMDE1ODAwMDAyMjQ0NjAwMzQyNDQ2MDAzMDNDMDI4MDA4RkMKKzoxMDhGRTAwMDM0NDMwMDgwOTA3RjAwN0MwMEJGQzgyNDMzMzgwMDA0RTUKKzoxMDhGRjAwMDE3MDAwMDAyMjRDMjAwMDQwMEMwMTAyMThGOTgwMDI0MzIKKzoxMDkwMDAwMDI0MTkwMDAyQUNFMjAwMzRBMzE5MDAwMDkyNEYwMDNGODMKKzoxMDkwMTAwMDhGOEUwMDI0M0MwQzgwMDgzNThCMDA4MEExQ0YwMDAxOEUKKzoxMDkwMjAwMDhGOTEwMDI0OTI0RDAwM0Y4RTQ0MDAwNEE2MkQwMDAyMzMKKzoxMDkwMzAwMDk1NkEwMDVDMEUwMDBFOUQzMTUwRkZGRjAwMDI0QjgwRDAKKzoxMDkwNDAwMDAxMzAzODI1M0MwODQyMDAwMEU4MjgyNUFFMjUwMDA0MDAKKzoxMDkwNTAwMDhFNDQwMDM4OEY4NTAwMjRBQ0E0MDAxODhFNDYwMDM0NUUKKzoxMDkwNjAwMEFDQTYwMDFDQUNBMDAwMENBQ0EwMDAxMEE0QTAwMDE0ODYKKzoxMDkwNzAwMEE0QTAwMDE2QTRBMDAwMjBBNEEwMDAyMkFDQTAwMDI0NUMKKzoxMDkwODAwMDhFNjIwMDE0NTA0MDAwMDEyNDAyMDAwMThGQkYwMDIwQjYKKzoxMDkwOTAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwNzYKKzoxMDkwQTAwMEFDQTIwMDA4MEEwMDBFQkMyN0JEMDAyODI3QkRGRkM4REYKKzoxMDkwQjAwMDNDMDU4MDA4MzRBNDAwODBBRkJGMDAzNEFGQkUwMDMwNTAKKzoxMDkwQzAwMEFGQjcwMDJDQUZCNjAwMjhBRkI1MDAyNEFGQjQwMDIwNzYKKzoxMDkwRDAwMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQjYKKzoxMDkwRTAwMDk0ODMwMDc4OTQ4MjAwN0ExMDQzMDA1MTI0MDVGRkZGOTYKKzoxMDkwRjAwMDAwODBGMDIxMEEwMDBGQ0MwMDgwQjgyMTEwOEIwMDREQjkKKzoxMDkxMDAwMDhGQkYwMDM0OEY4NjAwODAzQzE4MDgwMDhGMTgwMDVDRTkKKzoxMDkxMTAwMDI0MTFGRjgwM0MxNjgwMDAwMzA2NzgyMTAxRjE4MDI0OTEKKzoxMDkxMjAwMEFFRDAwMDJDOTZFRTAwN0EzMUVDMDA3RjNDMEQ4MDBFMjQKKzoxMDkxMzAwMDMxQ0I3RkZGMDE4RDUwMjEwMDBCNDg0MDAxMkFBODIxMkYKKzoxMDkxNDAwMDk2QTQwMDAwM0MwODA4MDA4RDA4MDA1ODI0MDVGRjgwMDQKKzoxMDkxNTAwMDMwOTUzRkZGMDEwNjE4MjEwMDE1Mzk4MDAwNjdDODIxQUUKKzoxMDkxNjAwMDAzMjVGODI0M0MwMjAxMDAwM0UyOTAyNTMzMzgwMDdGRjgKKzoxMDkxNzAwMDNDMTE4MDBDQUVEMjAwMjgwMzExOTAyMTkyNTAwMDBEQkEKKzoxMDkxODAwMDMyMEYwMDA0MTFFMDAwMzcwMkUwOTgyMTk2RTMwMDdBRTQKKzoxMDkxOTAwMDk2RTgwMDdBOTZFNTAwN0EyNDA0ODAwMDMxMDc3RkZGODQKKzoxMDkxQTAwMDI0RTMwMDAxMzA2MjdGRkYwMEE0RjgyNDAzRTJDODI1MTUKKzoxMDkxQjAwMEE2RjkwMDdBOTZFNjAwN0EzQzE0MDgwMDhFOTQwMDYwQzYKKzoxMDkxQzAwMDMwRDY3RkZGMTJENDAwQzEwMDAwMDAwMDhFNTgwMDE4NzYKKzoxMDkxRDAwMDhGODQwMDgwMDJBMDI4MjEyNzEzRkZGRjBFMDAwRTc3NDYKKzoxMDkxRTAwMEFFNTMwMDJDOTdENTAwNzg5N0Q0MDA3QTEyOTUwMDEwRDIKKzoxMDkxRjAwMDAwMDAyODIxM0MwOTgwMDgzNTI0MDEwMDNDMEE4MDA4MzEKKzoxMDkyMDAwMDkxNDgwMDA4OTA4NzAwQzUzMTE0MDA3RjMwRTQwMEZGQ0EKKzoxMDkyMTAwMDAyODQzMDJCMTRDMEZGQjkyNjhCMDAwMTkzOEUwMDg4ODYKKzoxMDkyMjAwMDI2OEMwMDAxMDA4RTY4MjExNUFDRkZCNzhGODYwMDgwNjgKKzoxMDkyMzAwMDhGQkYwMDM0OEZCRTAwMzA4RkI3MDAyQzhGQjYwMDI4NTAKKzoxMDkyNDAwMDhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OUMKKzoxMDkyNTAwMDhGQjEwMDE0OEZCMDAwMTAwMEEwMTAyMTAzRTAwMDA4QUYKKzoxMDkyNjAwMDI3QkQwMDM4MDBDMDIwMjEwRTAwMEU0MjAyODAyODIxQjgKKzoxMDkyNzAwMDhFNEIwMDEwOEU0QzAwMzA4Rjg0MDAyNDI0MDkwMDAyOTUKKzoxMDkyODAwMDAxNkM1MDIzQUU0QTAwMTBBMDg5MDAwMDk2RTMwMDVDRjgKKzoxMDkyOTAwMDhFNDQwMDMwOEY5MTAwMjQwRTAwMEU5RDMwNzBGRkZGMzEKKzoxMDkyQTAwMDAwMDI0MzgwMDExMDI4MjUzQzA3NDIwMDAwQTcxMDI1M0EKKzoxMDkyQjAwMEFFMjIwMDA0OEU1RjAwMDQ4RjhBMDAyNDhFNTkwMDAwQzUKKzoxMDkyQzAwMDI0MEIwMDA4QUQ1RjAwMUNBRDU5MDAxOEFENDAwMDBDMjgKKzoxMDkyRDAwMEFENDAwMDEwOTI0NjAwMEEyNDA0MDAwNTI0MDhDMDAwOTYKKzoxMDkyRTAwMDMwRDAwMEZGQTU1MDAwMTQ5NjU4MDAwOEE1NTgwMDE2NkQKKzoxMDkyRjAwMDkyNTEwMDBBM0MxODgwMDgzMjJGMDBGRkE1NEYwMDIwMzEKKzoxMDkzMDAwMDk2NEUwMDA4MzcxMTAxMDBBNTRFMDAyMkFENDAwMDI0MDIKKzoxMDkzMTAwMDkyNEQwMDBCMzFBQzAwRkZBNTRDMDAwMkExNEIwMDAxQTcKKzoxMDkzMjAwMDhFNDkwMDMwOEY4MzAwMjQyNDBCRkZCRkFDNjkwMDA4RjYKKzoxMDkzMzAwMEEwNjQwMDMwOEY5MDAwMjQyNDAzRkZERjk2MDcwMDMyRTIKKzoxMDkzNDAwMDAwRTgyODI0MDBCNTEwMjVBNjAyMDAzMjkyMUYwMDMyNDIKKzoxMDkzNTAwMDMzRjkwMDNGMzcyNjAwNDBBMjA2MDAzMjhGOEMwMDI0RUMKKzoxMDkzNjAwMEFEODAwMDM0OEUyRjAwQzBBRDhGMDAzODkxOEUwMDNDNTAKKzoxMDkzNzAwMDNDMEY3RkZGMzFDRDAwN0ZBMThEMDAzQzhGODQwMDI0MDYKKzoxMDkzODAwMDM1RUVGRkZGOTA4QTAwM0MwMTRCNDgyNEEwODkwMDNDNDkKKzoxMDkzOTAwMDhGODUwMDI0OTBBODAwM0MwMTAzMzgyNEEwQTcwMDNDM0UKKzoxMDkzQTAwMDhFNDIwMDM0OEY5MTAwMjQzQzAzODAwOEFFMjIwMDQwOUUKKzoxMDkzQjAwMDhFNTkwMDJDOEU1RjAwMzAwMzNGMzAyM0FFMjYwMDQ0RDAKKzoxMDkzQzAwMDkyMzAwMDQ4MzIxODAwN0ZBMjM4MDA0ODhGODgwMDI0NkQKKzoxMDkzRDAwMDhFNEQwMDMwOEQwQzAwNDgwMUFFNTgyNDAxOTY1MDI0NkIKKzoxMDkzRTAwMDAxNEI0ODI1QUQwOTAwNDg5MjQ0MDAwQUExMDQwMDRDRjUKKzoxMDkzRjAwMDk2NDcwMDA4OEY4NTAwMjRBNEE3MDA0RThFNTAwMDMwQTkKKzoxMDk0MDAwMDhFNDQwMDMwMEUwMDAyRTY4QzY1MDA2MDkyRjkwMDdDMEMKKzoxMDk0MTAwMDAwMDJGOTQwMDA0MDI4MjEwMDAyMTEwMDAzRTIzMDIxM0YKKzoxMDk0MjAwMDMzMzYwMDAyMTJDMDAwMDMwMjA2ODAyMTAwMDVCMDgwMUUKKzoxMDk0MzAwMDAyMTY4MDIxOTI2RDAwN0MzMUIzMDAwNDEyNjAwMDAyOUMKKzoxMDk0NDAwMDAwMDU3MDgwMDIwRTgwMjE4RTRCMDAzMDI0MDU4MDAwQzQKKzoxMDk0NTAwMDMxNkEwMDAzMDAwQTQ4MjMzMTI0MDAwMzAyMDQxODIxNjIKKzoxMDk0NjAwMDhGOTAwMDI0QUUwMzAwMzQ5NkU0MDA3QTk2RTgwMDdBRTgKKzoxMDk0NzAwMDk2RjEwMDdBMzEwNzdGRkYyNEUyMDAwMTMwNUY3RkZGMjEKKzoxMDk0ODAwMDAyMjVDODI0MDMzRjMwMjVBNkU2MDA3QTk2RjgwMDdBMjQKKzoxMDk0OTAwMDNDMTIwODAwOEU1MjAwNjAzMzBGN0ZGRjExRjIwMDE4NUIKKzoxMDk0QTAwMDAwMDAwMDAwOEY4NDAwODAwRTAwMEU3NzAyQTAyODIxQUIKKzoxMDk0QjAwMDhGODQwMDgwMEUwMDBFODcwMjgwMjgyMTBFMDAwRUJDRDMKKzoxMDk0QzAwMDAwMDAwMDAwMEEwMDBGQzgwMDAwMDAwMDk2RjEwMDdBQkEKKzoxMDk0RDAwMDAyMjQ4MDI0QTZGMDAwN0E5MkVGMDA3QTkyRUIwMDdBQzAKKzoxMDk0RTAwMDMxRUUwMEZGMDAwRTY5QzIwMDBENjAyNzAwMEM1MUMwNzQKKzoxMDk0RjAwMDMxNjkwMDdGMDEyQTIwMjUwQTAwMEZDMkEyRTQwMDdBMDgKKzoxMDk1MDAwMDk2RTYwMDdBMDBDNUMwMjRBNkY4MDA3QTkyRUYwMDdBQTkKKzoxMDk1MTAwMDkyRjMwMDdBMzFGMjAwRkYwMDEyNzFDMjAwMEU2ODI3NDgKKzoxMDk1MjAwMDAwMERCMUMwMzI2QzAwN0YwMTk2MjgyNUEyRTUwMDdBQkIKKzoxMDk1MzAwMDBBMDAxMDc5OEY4NDAwODAzQzAzODAwMDMwODRGRkZGOTQKKzoxMDk1NDAwMDMwQTVGRkZGQUM2NDAwMThBQzY1MDAxQzAzRTAwMDA4MDgKKzoxMDk1NTAwMDhDNjIwMDE0MjdCREZGQTgzQzA2ODAwOEFGQkUwMDUwRjcKKzoxMDk1NjAwMEFGQkYwMDU0QUZCNzAwNENBRkI2MDA0OEFGQjUwMDQ0MzIKKzoxMDk1NzAwMEFGQjQwMDQwQUZCMzAwM0NBRkIyMDAzOEFGQjEwMDM0N0QKKzoxMDk1ODAwMEFGQjAwMDMwMzRDODAxMDA5MTA1MDBDNTkwQzcwMDA4OTUKKzoxMDk1OTAwMDMwOUVGRkZGMzBBNTAwRkYzMEUyMDA3RjAwNDUxODJBMTMKKzoxMDk1QTAwMEE3QTAwMDE0QTdBMDAwMUUxMDYwMDA1M0FGQTAwMDEwRDkKKzoxMDk1QjAwMDkwQzkwMDA4MzEyNjAwN0YwMEE2MjAyMzI0OTNGRkZGRDYKKzoxMDk1QzAwMDAwMTM4MDJCMDAxRTg4MkIwMjExNzgyNDUxRTAwMDg0QTgKKzoxMDk1RDAwMDhGQjMwMDEwM0MxOTgwMDg5NzM2MDA1Mjk3MzcwMDUwMUYKKzoxMDk1RTAwMDAwMUVDNDAwMDJEN0E4MjMwMDE1QTQwMDAwMTQxNDAzMTEKKzoxMDk1RjAwMDAzQzI5MDJBMTY0MDAwMDIwMDE4MkMwMzAwNDAyODIxQzQKKzoxMDk2MDAwMDAwMTMxNDAwMDAwMjI0MDMwMEE0RjgyQTU3RTAwMDAxMEMKKzoxMDk2MTAwMDAwQTAyMDIxMjg4MzAwMDkxNDYwMDAwMjAwODBBMDIxRkUKKzoxMDk2MjAwMDI0MTQwMDA4M0MwQTgwMDg4RDQ1MDA0ODAwMTQ0OTgwMzUKKzoxMDk2MzAwMDhENDgwMDRDM0MwMzgwMDAzMTI0RkZGRjNDMDYwMDEwQTUKKzoxMDk2NDAwMDAwODYzODI1MzQ3MTA0MDBBQzY1MDAzOEFGOTEwMDg0ODEKKzoxMDk2NTAwMEFDNjgwMDNDQUM2NzAwMzAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMDk2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKKzoxMDk2NzAwMDAwMDAwMDAwMDAwMDAwMDA4QzZDMDAwMDMxOEIwMDIwMTYKKzoxMDk2ODAwMDExNjBGRkZEMDAxNDY4MkEwMUIwMTAyNDEwNDAwMDM5NTkKKzoxMDk2OTAwMDAwMDBBODIxM0MxNjgwMDg5MkQ3MDAwODNDMTI4MDAwRTgKKzoxMDk2QTAwMDhFNDQwMTAwMzJGNjAwN0YwRTAwMEU0MjAyQzAyODIxRDcKKzoxMDk2QjAwMDhFMkYwMDEwOEU0NDAxMDAwMDAwOTAyMTMxRjczRkZGRjMKKzoxMDk2QzAwMDBFMDAwRTVBMDJFMDI4MjE5MjJFMDAwMDMxQzIwMDNGMDcKKzoxMDk2RDAwMDJDNTAwMDA4NTIwMDAwMTAwMDAwODgyMTAwMDJGODgwODEKKzoxMDk2RTAwMDNDMDMwODAwMjQ2MzUzNTQwM0UzQzgyMThGMzgwMDAwNkYKKzoxMDk2RjAwMDAzMDAwMDA4MDAwMDAwMDA5MENFMDAwODkzOEIwMDg4NTMKKzoxMDk3MDAwMDMxQ0QwMDdGMDBBRDYwMjMwMTZDNTAyMTBBMDAxMEJGRjUKKzoxMDk3MTAwMDI1NTNGRkZGMDAwMDg4MjEzQzEwODAwMDhFMDQwMTAwQ0IKKzoxMDk3MjAwMDBFMDAwRTc3MDJFMDI4MjE4RTA0MDEwMDBFMDAwRTg3NDUKKzoxMDk3MzAwMDAyQzAyODIxMTIyMDAwMEYwMDEzODAyQjhGOEEwMDg0ODIKKzoxMDk3NDAwMDI2QTkwMDAxMDAwOUFDMDAwMjcyOTgyMzAwMTVBQzAzQTEKKzoxMDk3NTAwMDI1NDUwMDQwMDJCNEIwMkEwMDEzODAyQjI0MTcwMDAxRDUKKzoxMDk3NjAwMDAwQTA4ODIxMDJEMDEwMjRBRjg1MDA4NDE0NDBGRkM5RDYKKzoxMDk3NzAwMEFGQjcwMDEwM0MwNzgwMDg5NEYxMDA1MDNDMDU4MDAwMTIKKzoxMDk3ODAwMDNDMDYwMDIwMDJCMUM4MjFBNEY5MDA1MEFDQTYwMDMwNkMKKzoxMDk3OTAwMDk0RjQwMDUwOTRFMzAwNTIwM0Q1NjAyMzEwNzQwMDFEMkMKKzoxMDk3QTAwMDMxOUVGRkZGOENFNTAwNEM4Q0U5MDA0ODAwMTU2MTgwN0MKKzoxMDk3QjAwMDAwQUNCMDIxMDAwMEEwMjEwMkNDQTgyQjAxMzQ1MDIxMjQKKzoxMDk3QzAwMDAxNTVCODIxQUNGNjAwNENBQ0Y3MDA0ODAwMUU4ODJCQzAKKzoxMDk3RDAwMDAyMTE3ODI0MTVFMEZGODAzQzE5ODAwODhGQjMwMDEwMzcKKzoxMDk3RTAwMDhGQkYwMDU0OEZCRTAwNTAzQTYyMDAwMThGQjcwMDRDMEIKKzoxMDk3RjAwMDhGQjYwMDQ4OEZCNTAwNDQ4RkI0MDA0MDhGQjMwMDNDNTMKKzoxMDk4MDAwMDhGQjIwMDM4OEZCMTAwMzQ4RkIwMDAzMDAzRTAwMDA4MTEKKzoxMDk4MTAwMDI3QkQwMDU4OTRGMjAwNTQ4Q0VGMDA0NDMyNUZGRkZFRTUKKzoxMDk4MjAwMDAwMUZDMEMwMDFGODcwMjFBQ0FFMDAzQzhDRUIwMDQ0QkUKKzoxMDk4MzAwMDhDQUQwMDNDMDE2RDQwMjMxOTAwMDAzQjAwMDAwMDAwOEUKKzoxMDk4NDAwMDhDRTIwMDQwMjQ0MjAwMDEzQzA3MDA1MDM0RTQwMDEwNDgKKzoxMDk4NTAwMDNDMDM4MDAwQUNBMjAwMzhBQzY0MDAzMDAwMDAwMDAwODMKKzoxMDk4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKKzoxMDk4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNzYwMDAwRTYKKzoxMDk4ODAwMDMyRDcwMDIwMTJFMEZGRkQzQzExODAwODk2MjgwMDU0REEKKzoxMDk4OTAwMDNDMEE4MDAwM0MwNjgwMDgzMTE5MDAwMTAwMTk2MEMwQjQKKzoxMDk4QTAwMDAxOEFBMDIxOEU4MzA0MDAzQzA3MDgwMDhDRTcwMDQ0NTUKKzoxMDk4QjAwMDNDMTUwMDIwQUNDMzAwNDg4RTg5MDQwNDI0MDUwMDAxMzcKKzoxMDk4QzAwMEFDQzkwMDRDMTBFNTAyNTlBRDU1MDAzMDk2M0YwMDUyMkUKKzoxMDk4RDAwMDNDMDUwODAwOENBNTAwNDAwMEJGQzAyMUE2MzgwMDUyRkUKKzoxMDk4RTAwMDk2MkYwMDU0MjVFRTAwMDFBNjJFMDA1NDk2MjYwMDU0MTMKKzoxMDk4RjAwMDMwQzRGRkZGNTQ4N0ZGMzQwMDFFODgyQjMwQTVGRkZGQzQKKzoxMDk5MDAwMDBFMDAxMDlEQTYyMDAwNTQzQzA0MDgwMDhDODQwMDI0MDYKKzoxMDk5MTAwMDk2MjcwMDUyMDA0NDEwMjMwMEUyOTAyM0E2MzIwMDUyMDIKKzoxMDk5MjAwMDBBMDAxMEMxMDAxRTg4MkI4Q0UyMDA0MDBBMDAxMTYyNjAKKzoxMDk5MzAwMDNDMDcwMDUwOTIyODAwMDEyNDA3MDAwMTMxMDIwMDdGRkIKKzoxMDk5NDAwMDE0NDcwMDFDOTdBQzAwMUU4RTJBMDAxNDI0MEJDMDAwODQKKzoxMDk5NTAwMDMxNDQzRkZGMDE4QjQ4MjQzQzA2MDgwMDhDQzYwMDYwNjAKKzoxMDk5NjAwMDAxMjQyODI1MzBBNDNGRkYwMDg2ODgyQjEyMjAwMDExRjcKKzoxMDk5NzAwMEE3QTUwMDFFM0MxMTA4MDA4RTMxMDA1ODhGODIwMDgwODAKKzoxMDk5ODAwMDAwMDQ0MTgwMjQwN0ZGODAwMjIyMTgyMTAwNjhGODIxOEEKKzoxMDk5OTAwMDAzRTdDODI0MzNFRjAwN0YzQzE4ODAwMDNDMTI4MDBFQTAKKzoxMDk5QTAwMEFGMTkwMDJDMDFGMjY4MjE5MUFFMDAwRDM1RDAwMDA0RjIKKzoxMDk5QjAwMEExQjAwMDBEMEUwMDBFRDEyNDEyMDAwMTI0MTEwMDAxRUYKKzoxMDk5QzAwMDNDMTA4MDAwOEUwNDAxMDAwRTAwMEU3NzAyRTAyODIxN0EKKzoxMDk5RDAwMDhFMDQwMTAwMEUwMDBFODcwMkMwMjgyMTE2MjBGRjU4QjkKKzoxMDk5RTAwMDhGOEEwMDg0MEEwMDExMkMwMDEzODAyQjhGODYwMDg0M0MKKzoxMDk5RjAwMDkwQzkwMDAxMzEyNTAwMjAxMEEwMDE4QTI0MTAwMDAxMjcKKzoxMDlBMDAwMDNDMDQ4MDA4MzQ4QzAwODA5MThCMDA3QzhGOTEwMDIwNzYKKzoxMDlBMTAwMDAwMDA5MDIxMzE2QTAwMDExMTQwMDAwRkFGQjAwMDIwMUEKKzoxMDlBMjAwMDhDRDAwMDE0OEM4RTAwNjAwMjBFNjgyQjE1QTAwMDAzRjEKKzoxMDlBMzAwMDAyMDAzODIxOEM4NzAwNjAzQzA0ODAwODM0ODMwMDgwNTkKKzoxMDlBNDAwMDhDNzIwMDcwMDBGMjc4MkIxNUUwMDAwMjAwRTAyMDIxRkIKKzoxMDlBNTAwMDhDNjQwMDcwMDA4MDkwMjEzQzA3ODAwODM0RTUwMDgwMTEKKzoxMDlBNjAwMDhDRDkwMDE0OENCRjAwNzAwMzNGQzAyQjE3MDAwMDAyN0MKKzoxMDlBNzAwMDAzMjAyMDIxOENBNDAwNzAwMDkyMTgyMzEwNjAwMDAzQTIKKzoxMDlBODAwMEFGQTMwMDI4MjQwODAwMDJBRkE4MDAyMDhGQTUwMDIwNjMKKzoxMDlBOTAwMDAyNjUxMDJCMTQ0MDAwQjUwMDAwMTgyMThDQzQwMDM4NUEKKzoxMDlBQTAwMDhFMkYwMDBDM0MxODAwODBBRTI0MDAwMDhDQ0UwMDM0QjkKKzoxMDlBQjAwMDNDMTBGRjlGMDFGODYwMjVBRTJFMDAwNDkwQ0IwMDNGQzQKKzoxMDlBQzAwMDM2MERGRkZGMDE4RDQ4MjQzQzBBMDAyMDNDMDZGRkVGQzUKKzoxMDlBRDAwMEEyMkIwMDBCMDEyQTM4MjUzNEM1RkZGRjAwRTU0MDI0RTYKKzoxMDlBRTAwMDNDMDIwMDA4OEY4NzAwODQwMTAyMjAyNUFFMjQwMDBDNzAKKzoxMDlBRjAwMDhDRTMwMDE0QUUyMDAwMTg4RkFGMDAyOEFFMjMwMDE0QjIKKzoxMDlCMDAwMDhDRjgwMDE4M0MxRkZGRkIzN0Y5RkZGRkFFMzgwMDFDMzQKKzoxMDlCMTAwMDhDRUUwMDA4MDA5OTY4MjQwMjRGODAyMUFFMkUwMDI0QUMKKzoxMDlCMjAwMDhDRUMwMDBDQUUyRDAwMENBNjIwMDAzOEE2MjAwMDNBQ0MKKzoxMDlCMzAwMEFFMzAwMDJDQUUyQzAwMjBBRTIwMDAyODhDRUIwMDE0QTAKKzoxMDlCNDAwMDhGQUEwMDI4MDE3MjQ4MjMwMTJBMzAyMzEwQzAwMDExNzcKKzoxMDlCNTAwMEFFMjYwMDEwOTBGMDAwM0Q4RTJDMDAwNDhFMkEwMDAwRUUKKzoxMDlCNjAwMDAwMTA2OTAwMDE4RDI4MjEwMDAwMTAyMTAwQUQzMDJCNkMKKzoxMDlCNzAwMDAxNDI0ODIxMDEyNjQwMjFBRTI1MDAwNEFFMjgwMDAwMDQKKzoxMDlCODAwMDkwRTMwMDNEQTIyMzAwMEE4RjlGMDA4NDk3RjkwMDA2MEUKKzoxMDlCOTAwMEE2MzkwMDA4OEY4QTAwMjQyNDAyMDAwMjNDMDY4MDA4QUYKKzoxMDlCQTAwMEExNDIwMDAwMzRDOTAwODA5NTI1MDA1QzAyNDAyMDIxQkMKKzoxMDlCQjAwMDhGOTAwMDI0MzBBOEZGRkYwRTAwMEU5REFGQTgwMDI0NTgKKzoxMDlCQzAwMDhGQTMwMDI0MDAwMkZCODA4Rjg1MDA4NDNDMDQ0MjAwQTgKKzoxMDlCRDAwMDAzRTNDODI1MDMyNEMwMjVBRTE4MDAwNDhGODQwMDI0QTUKKzoxMDlCRTAwMDhDQUYwMDM4QUM4RjAwMTg4Q0FFMDAzNEFDOEUwMDFDRUIKKzoxMDlCRjAwMEFDODAwMDBDQUM4MDAwMTBBNDgwMDAxNEE0ODAwMDE2N0YKKzoxMDlDMDAwMEE0ODAwMDIwQTQ4MDAwMjJBQzgwMDAyNDkwQTcwMDNGMDQKKzoxMDlDMTAwMEE0ODcwMDAyNTI0MDAxOEMyNDA3MDAwMThGQUIwMDI4NkEKKzoxMDlDMjAwMDUxNjAwMDAyOTBBMjAwM0Q5MEEyMDAzRTI0NEMwMDAxMzEKKzoxMDlDMzAwMEEwOEMwMDAxOEY4NDAwMjRBQzkyMDAwODNDMTg4MDA4OUUKKzoxMDlDNDAwMDM3MTAwMDgwOTIwRjAwN0MzMUVFMDAwMjE1QzAwMDAyMzgKKzoxMDlDNTAwMDI0MDcwMDM0MjQwNzAwMzA4Rjg1MDA4NDNDMDg4MDA4RTYKKzoxMDlDNjAwMDM1MDkwMDgwOTBBMzAwMDA5MTI4MDA3QzMyNTkwMDAzNDAKKzoxMDlDNzAwMEEwODMwMDMwOEY5RjAwODQ4RjkwMDAyNDI0MDQwMDA0NzAKKzoxMDlDODAwMDkzRjgwMDAxMDA5OTc4MjMyNDBEQzAwMEEyMTgwMDMxMzgKKzoxMDlDOTAwMDhGOTkwMDI0OEY4RTAwODQzMUU1MDAwMzk3MkMwMDMyQzkKKzoxMDlDQTAwMDk1Q0IwMDEyMDBGMjQ4MjEwMThENTAyNDMxNjIzRkZGMTQKKzoxMDlDQjAwMDAxNDIzMDI1QTcyNjAwMzI5MzIzMDAzMjAxMjUzODIxQTYKKzoxMDlDQzAwMDMxMDgwMDA0MzA3RjAwM0YzN0U0MDA0MEEzMjQwMDMyMTUKKzoxMDlDRDAwMDEyNDAwMDAyOEY4NTAwMjQwMEU4MzgyMTNDMEM4MDA4RTcKKzoxMDlDRTAwMEFDQTcwMDM0MzU4QjAxMDA4RDYyMDBDMDJFNDQwMDAxMEEKKzoxMDlDRjAwMDI0MDNGRkRGQUNBMjAwMzg5MEFBMDAzQzAwMDRDOTQwNTYKKzoxMDlEMDAwMDMxNDYwMDdGQTBBNjAwM0M4Rjg5MDAyNDI0MDVGRkJGQjgKKzoxMDlEMTAwMDkxMjcwMDNDMDBFNTQwMjRBMTI4MDAzQzhGOEYwMDI0QkYKKzoxMDlEMjAwMDkxRkYwMDNDMDNFM0MwMjQwMzE5ODAyNUExRjAwMDNDMEYKKzoxMDlEMzAwMDhGOEIwMDg0OEY4QTAwMjQ4RDZFMDAyMEFENEUwMDQwRjIKKzoxMDlENDAwMDhENkQwMDI0QUQ0RDAwNDQ4RDZDMDAyOEFENEMwMDQ4NTUKKzoxMDlENTAwMDhENjIwMDJDMEUwMDBFQkNBRDQyMDA0QzhGQTYwMDIwODAKKzoxMDlENjAwMDI0MDcwMDAyMTBDNzAwMTE4RkEzMDAyMDAwMDMyMDJCM0UKKzoxMDlENzAwMDAwMDQ4MDIzMDI3MDk4MjQwMDYwODAyMTAwNjA5MDIxRkMKKzoxMDlEODAwMDBBMDAxMTE1MDAxMDg4MkI5NjI3MDAxMjhGODQwMDgwN0UKKzoxMDlEOTAwMDAwMDA5MDIxMzBFNUZGRkZBN0E3MDAxNDBFMDAwRTZCMTYKKzoxMDlEQTAwMDI0MTEwMDAxMEEwMDExQzAzQzEwODAwMDNDMTk4MDAwMDEKKzoxMDlEQjAwMDNDMDI4MDA4OEYyNDAxMDA5MDU4MDAwODBFMDAwRTQyREIKKzoxMDlEQzAwMDMzMDUwMDdGOEY4RTAwMjQ4RkFGMDAyMDhGQTQwMDI4RTIKKzoxMDlERDAwMEExQ0YwMDAwMEUwMDBFOUQ4RjkwMDAyNDhGQUQwMDI0QjcKKzoxMDlERTAwMDAwMDIzQjgwM0MwQjQyMDAwMEVENDAyNThGODcwMDg0NDEKKzoxMDlERjAwMDAxMEIyMDI1QUUwNDAwMDQ4Q0U1MDAzODhGOTAwMDI0NzAKKzoxMDlFMDAwMDAwMDA1MDIxMDAwQTE5MDBBRTA1MDAxODhDRUMwMDM0NDcKKzoxMDlFMTAwMDNDMDg3RkZGMzUwNEZGRkZBRTBDMDAxQzkwRTkwMDNFQkMKKzoxMDlFMjAwMDhFMUYwMDFDOEUxODAwMTgwMDA5QzkwMDAwMDkzNzAyOTcKKzoxMDlFMzAwMDAzRjk2ODIxMDA2NjEwMjUwMUI5NzgyQjAzMDI3MDIxMEYKKzoxMDlFNDAwMDAxQ0Y1ODIxQUUwRDAwMUNBRTBCMDAxOEFFMDAwMDBDNjcKKzoxMDlFNTAwMEFFMDAwMDEwOTBFNTAwM0U4RkFGMDAyODI0MEUwMDA1RjQKKzoxMDlFNjAwMEE2MDUwMDE0OTRFQzAwMDQyNDA1QzAwMDAxRTQ1ODI0NjUKKzoxMDlFNzAwMEE2MEMwMDE2OTBFQTAwM0UwMUUwMjAyMUE2MEEwMDIwNzAKKzoxMDlFODAwMDk0RTYwMDA0QTYwNjAwMjJBRTAwMDAyNDkwRTMwMDNGMDIKKzoxMDlFOTAwMEE2MDMwMDAyOTBFOTAwM0U5MEZGMDAzRDAzRTlDODIzQkQKKzoxMDlFQTAwMDI3MzgwMDAxQTIxODAwMDE4RjhEMDAyNDNDMTA4MDA4ODMKKzoxMDlFQjAwMEFEQUYwMDA4QTFBRTAwMzA4Rjk4MDAyNDhGODIwMDg0REYKKzoxMDlFQzAwMDM2MEYwMTAwOTcwQzAwMzI5NDRBMDAxMjI0MTBGRjgwRDQKKzoxMDlFRDAwMDAwQUMzODI0MzE0NjNGRkYwMEU2MTgyNUE3MDMwMDMyQzYKKzoxMDlFRTAwMDkzMDkwMDMyMjQwNUZGQkYyNDAzRkZERjMxM0YwMDNGMDkKKzoxMDlFRjAwMDM3RjkwMDQwQTMxOTAwMzI4RjhDMDAyNDI0MThGRkZGOEIKKzoxMDlGMDAwMEFEODAwMDM0OERFRTAwQzBBRDhFMDAzODkxOEQwMDNDRTgKKzoxMDlGMTAwMDMxQTIwMDdGQTE4MjAwM0M4Rjg3MDAyNDkwRUEwMDNDQTAKKzoxMDlGMjAwMDAxNDUzMDI0QTBFNjAwM0M4Rjk5MDAyNDkzMjkwMDNDOTEKKzoxMDlGMzAwMDAxMjNGODI0QTMzRjAwM0M4RjhEMDAyNDNDMUY4MDA4QTAKKzoxMDlGNDAwMEFEQjgwMDQwQURCMjAwNDQ5MUFGMDA0ODNDMTI4MDAwNzMKKzoxMDlGNTAwMDAxRjA3MDI1QTFBRTAwNDg4Rjg3MDAyNDhGODYwMDg0MTEKKzoxMDlGNjAwMDhDRUMwMDQ4MDE5MjEwMjQwMDRCNTAyNUFDRUEwMDQ4Q0MKKzoxMDlGNzAwMDkwQzUwMDNFQTBFNTAwNEM4Rjg4MDA4NDhGODMwMDI0QUMKKzoxMDlGODAwMDk1MDkwMDA0QTQ2OTAwNEU4RkU1MDA2MDBFMDAwMkU2MEEKKzoxMDlGOTAwMDAwMDAwMDAwOEY5OUZGMkM4RkFFMDAyODAwMDI4MTQwNDYKKzoxMDlGQTAwMDkzMkYwMDdDMDAwMkMxMDAwMjE4NjgyMTMxRjIwMDAyRTgKKzoxMDlGQjAwMDAwNDAyODIxMTY0MDAwQUEwMUNEMzAyMTNDMEE4MDA4MkIKKzoxMDlGQzAwMDM1NDMwMDgwOTA2OTAwN0MzMTNGMDAwNDEzRTAwMDAzQkEKKzoxMDlGRDAwMDhGQUUwMDI4MDAwNTYwODAwMENDMzAyMTI0MEQwMDA0RTUKKzoxMDlGRTAwMDhGOTAwMDI0MzFDNzAwMDMwMUE3NTgyMzMxNjgwMDAzNzQKKzoxMDlGRjAwMDAwQzgyMDIxQUUwNDAwMzQzQzA2ODAwOEE2MjUwMDM4QTUKKzoxMEEwMDAwMDNDMDU4MDAwOENBNDAxMDA5MEQxMDAwODBFMDAwRTg3NTIKKzoxMEEwMTAwMDMyMjUwMDdGMEUwMDBFQkMwMDAwMDAwMDBBMDAxMkFBQ0MKKzoxMEEwMjAwMDhGQTMwMDIwOEY4NTAwMjA4Q0MyMDAzODI0MTgwMDAzRTUKKzoxMEEwMzAwMEE0QTAwMDA4QUNBMjAwMDA4Q0RGMDAzNEEwQTAwMDBBOUQKKzoxMEEwNDAwMDhGOTIwMDg0QUNCRjAwMDQzQzA0MDA4MDkyNEYwMDNGMUMKKzoxMEEwNTAwMEEwQjgwMDBDOENBRTAwMEMzQzBERkY5RkEwQUYwMDBCMTUKKzoxMEEwNjAwMDAxQzQ0MDI1MzVBQkZGRkYzQzExRkZFRjhGOTgwMDg0MDIKKzoxMEEwNzAwMDAxMEIzMDI0MzYzOUZGRkYwMEQ5NjAyNEFDQUMwMDBDNTIKKzoxMEEwODAwMDhGMDMwMDE0OTcxRjAwMTI4Rjg3MDA4MEFDQTMwMDEwNkQKKzoxMEEwOTAwMDhGMDkwMDE0QUNBMDAwMThBQ0EwMDAyMEFDQTkwMDE0REIKKzoxMEEwQTAwMEFDQTAwMDI0OEYwQTAwMTgzM0U5M0ZGRjAwMDkxMTgwOUIKKzoxMEEwQjAwMEFDQUEwMDI4OEYxMjAwMDgwMDQ3NzgyMTMzRUUwMDAxNzcKKzoxMEEwQzAwMEFDQjIwMDMwOEYwODAwMEM4Rjk5MDAyNDAwMEY2OUMyRDkKKzoxMEEwRDAwMDAwMEUyMzgwMDFBNDU4MjEyNDExMDAwMjNDMDY4MDA4QjAKKzoxMEEwRTAwMEE0QUIwMDFDQTRBMDAwMzRBQ0E4MDAyQ0EzMzEwMDAwMzkKKzoxMEEwRjAwMDM0RDkwMDgwOTcyQzAwNUM4RjhGMDAyNDNDMDM0MjAwRjEKKzoxMEExMDAwMDMxOEFGRkZGMDE0MzM4MjVBREU3MDAwNDhGODIwMDg0QzgKKzoxMEExMTAwMDI0MTgwMDAxMjQxMUMwMDA4QzVGMDAzODI0MDcwMDM0OEIKKzoxMEExMjAwMEFERkYwMDE4OEM1MjAwMzRBREYyMDAxQ0FERTAwMDBDMDUKKzoxMEExMzAwMEFERTAwMDEwQTVFMDAwMTRBNUUwMDAxNkE1RTAwMDIwQTkKKzoxMEExNDAwMEE1RTAwMDIyQURFMDAwMjRBNUYwMDAwMkExRjgwMDAxODYKKzoxMEExNTAwMDhGOEIwMDI0OEY4RTAwODRBRDcwMDAwODkxQ0QwMDAwOUQKKzoxMEExNjAwMEExNkQwMDMwOEY4ODAwODQ4Rjg0MDAyNDkxMDUwMDAxNDgKKzoxMEExNzAwMEEwODUwMDMxOEY5MjAwMjQ5NjRDMDAzMjAxOTE1MDI0MkEKKzoxMEExODAwMDAxNDkxODI1QTY0MzAwMzI5MjVGMDAzMjMzRTIwMDNGQjYKKzoxMEExOTAwMEEyNDIwMDMyOTMzODAwN0MzMzBGMDAwMjE1RTAwMDAyMjcKKzoxMEExQTAwMDhGODQwMDI0MjQwNzAwMzAzQzAyODAwOEFDODcwMDM0RjAKKzoxMEExQjAwMDM0NTIwMTAwOEU1RjAwQzAyNDBFRkZCRjAyMDA5MDIxQzgKKzoxMEExQzAwMEFDOUYwMDM4OTA5ODAwM0MzMzBGMDA3RkEwOEYwMDNDN0MKKzoxMEExRDAwMDhGODgwMDI0OTEwRDAwM0MwMUFFNTgyNEExMEIwMDNDNTcKKzoxMEExRTAwMDhGODYwMDI0OTBEMTAwM0MzNjM5MDAyMEEwRDkwMDNDNTUKKzoxMEExRjAwMDhGOEEwMDg0OEY4NTAwMjQwMDEwODgyQjhENEMwMDIwQ0UKKzoxMEEyMDAwMEFDQUMwMDQwOEQ0MzAwMjRBQ0EzMDA0NDhENDkwMDI4MzEKKzoxMEEyMTAwMEFDQTkwMDQ4OEQ0NzAwMkNBQ0E3MDA0QzBFMDAwRUJDMkEKKzoxMEEyMjAwMDNDMTA4MDAwMEEwMDExMTYwMDAwMDAwMDk0Q0QwMDUyN0UKKzoxMEEyMzAwMDNDMEIwODAwOEQ2QjAwMjQwMTZEODgyMUE0RDEwMDUyRDUKKzoxMEEyNDAwMDBBMDAxMEMxMDAxRTg4MkJBMDg3MDAwMThGODQwMDI0MDMKKzoxMEEyNTAwMDI0MEQwMDAxQUM4RDAwMDgwQTAwMTI1RjNDMTg4MDA4MzQKKzoxMEEyNjAwMDAwMDI5MDgwMEEwMDEzM0UwMEQyMzAyMTI3QkRGRkUwOUIKKzoxMEEyNzAwMDNDMEQ4MDA4QUZCMjAwMThBRkIwMDAxMEFGQkYwMDFDOUIKKzoxMEEyODAwMEFGQjEwMDE0MzVCMjAwODA4RTRDMDAxODM1QTgwMTAwMjMKKzoxMEEyOTAwMDk2NEIwMDA2OTVBNzAwNTA5MTA5MDBFQzAwMEM1NjAyNjEKKzoxMEEyQTAwMDAxNjcyODIzMzE0MzAwN0YzMTI2MDBGRjI0MDIwMDAzODkKKzoxMEEyQjAwMEEzODMwMDg4QUY4NDAwODAxMEMyMDAxQjMwQjBGRkZGNzIKKzoxMEEyQzAwMDkxMDYwMEVDMjQxMjAwMDUzMEMyMDBGRjEwNTIwMDMzNEEKKzoxMEEyRDAwMDAwMDAwMDAwMTYwMDAwMDk4RkJGMDAxQzhGQjIwMDE4OUMKKzoxMEEyRTAwMDhGQjEwMDE0OEZCMDAwMTAyNDBEMEMwMDNDMEM4MDAwQzYKKzoxMEEyRjAwMDI3QkQwMDIwMDNFMDAwMDhBRDhEMDAyNDBFMDAxMEE0NEYKKzoxMEEzMDAwMDAyMDAyMDIxOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0RjMKKzoxMEEzMTAwMDhGQjAwMDEwMjQwRDBDMDAzQzBDODAwMDI3QkQwMDIwRTUKKzoxMEEzMjAwMDAzRTAwMDA4QUQ4RDAwMjQ5NjU4MDA3ODk2NTEwMDdBMUQKKzoxMEEzMzAwMDkyNEUwMDdEMDIzODc4MjYzMUU4RkZGRjMxQzQwMEMwMUMKKzoxMEEzNDAwMDE0ODAwMDA5MkQxMTAwMDExNjAwMDAzNzAwMDAwMDAwRTQKKzoxMEEzNTAwMDU2MjBGRkUyOEZCRjAwMUMwRTAwMEY3QTAwMDAwMDAwQTUKKzoxMEEzNjAwMDBBMDAxNDA2OEZCRjAwMUMxNjIwRkZEQTAwMDAwMDAwNTAKKzoxMEEzNzAwMDBFMDAwRjdBMDAwMDAwMDAxNDQwRkZEODhGQkYwMDFDQjEKKzoxMEEzODAwMDE2MDAwMDIyMDAwMDAwMDA5MjVGMDA3RDMzRTIwMDNGRDMKKzoxMEEzOTAwMEEyNDIwMDdEMEEwMDE0MDY4RkJGMDAxQzk1MDkwMERBNTYKKzoxMEEzQTAwMDhGODYwMDYwMDA4MDI4MjEyNDA0MDAwNTBFMDAwNjc0QkEKKzoxMEEzQjAwMDMxMzBGRkZGOTc4MzAwNzIzQzA0ODAwMDI0NjVGRkZGNkIKKzoxMEEzQzAwMEE3ODUwMDcyOEM4QTAxQjgwNTQwRkZGRTAwMDAwMDAwREUKKzoxMEEzRDAwMEFDODAwMTgwOEZCRjAwMUNBQzkwMDE4NDhGQjIwMDE4NEMKKzoxMEEzRTAwMDhGQjEwMDE0OEZCMDAwMTAzQzA3NjAxMzNDMEIxMDAwQkQKKzoxMEEzRjAwMDI0MEQwQzAwM0MwQzgwMDAyN0JEMDAyMEFDODcwMTg4OTgKKzoxMEE0MDAwMEFDOEIwMUI4MDNFMDAwMDhBRDhEMDAyNDBFMDAxMEE0NTEKKzoxMEE0MTAwMDAyMDAyMDIxNTA0MEZGQjE4RkJGMDAxQzkyNUYwMDdERTEKKzoxMEE0MjAwMDBBMDAxNDMzMzNFMjAwM0YwRTAwMTBBNDAyMDAyMDIxODIKKzoxMEE0MzAwMDE0NDBGRkFBOEZCRjAwMUMxMjIwMDAwNzAwMDAwMDAwN0MKKzoxMEE0NDAwMDkyNTkwMDdEMzMzMDAwM0YzNjAyMDA0MEEyNDIwMDdEMjkKKzoxMEE0NTAwMDBBMDAxNDA2OEZCRjAwMUMwRTAwMEY3QTAwMDAwMDAwRDcKKzoxMEE0NjAwMDUwNDBGRjlFOEZCRjAwMUM5MjU5MDA3RDMzMzAwMDNGNEIKKzowOEE0NzAwMDBBMDAxNDYyMzYwMjAwNDBFQworOjA4QTQ3ODAwMDAwMDAwMDAwMDAwMDAxQkMxCis6MTBBNDgwMDAwMDAwMDAwRjAwMDAwMDBBMDAwMDAwMDgwMDAwMDAwNkE1Cis6MTBBNDkwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDQwMDAwMDAwNEFBCis6MTBBNEEwMDAwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwM0EwCis6MTBBNEIwMDAwMDAwMDAwMzAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjkzCis6MTBBNEMwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjg0Cis6MTBBNEQwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjc0Cis6MTBBNEUwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjY0Cis6MENBNEYwMDAwMDAwMDAwMTAwMDAwMDAxMDAwMDAwMDE1RAorOjA0QTRGQzAwODAwODAxMDBEMworOjEwQTUwMDAwODAwODAwODA4MDA4MDAwMDAwMDAwQzAwMDAwMDMwODBGRgorOjEwQTUxMDAwMDgwMDBGNDgwODAwMEZGNDA4MDAxMDBDMDgwMDEwMjA3NQorOjEwQTUyMDAwMDgwMDEwMzQwODAwMEY0ODA4MDAwRjQ4MDgwMDEwNjhBMQorOjEwQTUzMDAwMDgwMDEwQTAwODAwMTBCMDA4MDAxMEQ4MDgwMDE3QzhDNAorOjEwQTU0MDAwMDgwMDE3QzgwODAwMTgwMDA4MDAxODAwMDgwMDE4MTRCMAorOjEwQTU1MDAwMDgwMDE3RTQwODAwMUEzQzA4MDAxQTA4MDgwMDFBOTRCQQorOjEwQTU2MDAwMDgwMDFBOTQwODAwMUIxQzA4MDAxQTRDODAwODAyNDBCRQorOjEwQTU3MDAwMDgwMDIxQTgwODAwMUZGNDA4MDAyMUQwMDgwMDIyNjg2NAorOjEwQTU4MDAwMDgwMDIzQjgwODAwMjQwNDA4MDAyNTI4MDgwMDI0MzAwNworOjEwQTU5MDAwMDgwMDI0QjQwODAwMjA2NDA4MDAyOUQwMDgwMDI5NzRBOQorOjEwQTVBMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDI1OUMzQQorOjEwQTVCMDAwMDgwMDI1OUMwODAwMjAxMDA4MDAyMDEwMDgwMDI4NENFNgorOjEwQTVDMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTBBQgorOjEwQTVEMDAwMDgwMDI4QUMwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTBGNworOjEwQTVFMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTA4QgorOjEwQTVGMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTA3QgorOjEwQTYwMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDI0MjQ1MgorOjEwQTYxMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyOTFDMDgwMDIwMTA0NQorOjEwQTYyMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTA0QQorOjEwQTYzMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTAzQQorOjEwQTY0MDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTAyQQorOjEwQTY1MDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTAxQQorOjEwQTY2MDAwMDgwMDI3NzAwODAwMjAxMDA4MDAyMDEwMDgwMDI2RTRDOQorOjEwQTY3MDAwMDgwMDI2NDAwODAwMzc4ODA4MDAzNzVDMDgwMDM3MjhBMworOjEwQTY4MDAwMDgwMDM2RkMwODAwMzZEQzA4MDAzNjkwODAwODAxMDAxRgorOjEwQTY5MDAwODAwODAwODA4MDA4MDAwMDgwMDgwMDgwMDgwMDQ2RjBFNAorOjEwQTZBMDAwMDgwMDQ3MjgwODAwNDY3MDA4MDA0NkYwMDgwMDQ2RjBGOQorOjBDQTZCMDAwMDgwMDQ0NTAwODAwNDZGMDA4MDA0QUM0QUUKKzowNEE2QkMwMDBBMDAwQzc2MEUKKzoxMEE2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcyNzg3MDM1RUUKKzoxMEE2RDAwMDJFMzAyRTMwNkEzMzAwMDAwNTAwMDAwMzAwMDAwMDAwMTkKKzoxMEE2RTAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMEE2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEE3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMEE3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMEE3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMEE3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMEE3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzoxMEE3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMEE3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKKzoxMEE3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMEE3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMEE3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKKzoxMEE3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMEE3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKKzoxMEE3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMEE3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMEE3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMEE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMEE4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEE4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKKzoxMEE4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKKzoxMEE4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKKzoxMEE4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKKzoxMEE4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKKzoxMEE4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKKzoxMEE4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKKzoxMEE4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKKzoxMEE4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMEE4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKKzoxMEE4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMEE4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMEE4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKKzoxMEE4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKKzoxMEE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKKzoxMEE5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMEE5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEE5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMEE5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMEE5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKKzoxMEE5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKKzoxMEE5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMEE5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKKzoxMEE5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKKzoxMEE5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKKzoxMEE5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMEE5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKKzoxMEE5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMEE5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKKzoxMEE5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMEFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMEFBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKKzoxMEFBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMEFBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEFBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzoxMEFBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKKzoxMEFBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKKzoxMEFBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKKzoxMEFBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKKzoxMEFBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMEFBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMEFBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKKzoxMEFBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKKzoxMEFBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMEFBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMEFBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKKzoxMEFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMEFCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMEFCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMEFCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMEFCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEFCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKKzoxMEFCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMEFCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKKzoxMEFCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMEFCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKKzoxMEFCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMEFCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKKzoxMEFCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKKzoxMEFCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMEFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMEFCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKKzoxMEFDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMEFDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMEFDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKKzoxMEFDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMEFDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEFDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMEFDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMEFDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKKzoxMEFDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKKzoxMEFDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKKzoxMEFDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKKzoxMEFDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKKzoxMEFDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKKzoxMEFDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKKzoxMEFDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKKzoxMEFEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMEFEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMEFEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMEFENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMEFENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMEFENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEFENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMEFEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMEFEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMEFEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzoxMEFEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMEFEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKKzoxMEFERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKKzoxMEFERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMEFERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMEFFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMEFFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMEFFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMEFFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMEFFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMEFFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMEFFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEFFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMEFFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKKzoxMEFFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMEFFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMEFFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKKzoxMEFFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMEFFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMEFFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMEFGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMEFGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMEFGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMEFGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMEFGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMEFGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMEFGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMEFGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMEFGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMEFGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKKzoxMEFGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMEFGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKKzoxMEFGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKKzoxMEFGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKKzoxMEFGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMEIwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMEIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMEIwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMEIwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMEIwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMEIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMEIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMEIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMEIwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMEIwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKKzoxMEIwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMEIwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMEIwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKKzoxMEIwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMEIwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMEIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMEIxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMEIxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMEIxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMEIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMEIxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMEIxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMEIxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMEIxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMEIxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMEIxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMEIxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMEIxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMEIxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMEIxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMEIxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMEIyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMEIyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMEIyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMEIyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMEIyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMEIyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMEIyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMEIyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKKzoxMEIyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMEIyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEIyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMEIyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMEIyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMEIyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMEIyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMEIzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKKzoxMEIzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMEIzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMEIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMEIzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMEIzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMEIzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMEIzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMEIzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMEIzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMEIzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEIzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMEIzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMEIzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMEIzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMEI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKKzoxMEI0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKKzoxMEI0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKKzoxMEI0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMEI0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMEI0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKKzoxMEI0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMEI0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMEI0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMEI0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMEI0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKKzoxMEI0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMEI0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEI0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMEI0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKKzoxMEI0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKKzoxMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKKzoxMEI1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKKzoxMEI1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMEI1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKKzoxMEI1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKKzoxMEI1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKKzoxMEI1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKKzoxMEI1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKKzoxMEI1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKKzoxMEI1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMEI1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKKzoxMEI1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKKzoxMEI1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMEI1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEI1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKKzoxMEI1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKKzoxMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKKzoxMEI2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKKzoxMEI2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKKzoxMEI2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKKzoxMEI2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKKzoxMEI2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKKzoxMEI2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKKzoxMEI2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKKzoxMEI2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKKzoxMEI2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKKzoxMEI2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKKzoxMEI2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKKzoxMEI2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMEI2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMEI2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEI2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKKzoxMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMEI3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMEI3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMEI3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMEI3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzoxMEI3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMEI3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKKzoxMEI3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMEI3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMEI3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKKzoxMEI3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMEI3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKKzoxMEI3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMEI3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMEI3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMEI3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEI4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKKzoxMEI4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKKzoxMEI4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKKzoxMEI4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKKzoxMEI4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKKzoxMEI4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKKzoxMEI4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKKzoxMEI4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKKzoxMEI4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMEI4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKKzoxMEI4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMEI4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMEI4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKKzoxMEI4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKKzoxMEI4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMEI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMEI5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEI5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMEI5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMEI5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKKzoxMEI5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKKzoxMEI5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMEI5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKKzoxMEI5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKKzoxMEI5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKKzoxMEI5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMEI5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKKzoxMEI5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMEI5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKKzoxMEI5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMEI5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKKzoxMEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKKzoxMEJBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMEJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEJBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzoxMEJBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKKzoxMEJBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKKzoxMEJBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKKzoxMEJBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKKzoxMEJBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMEJBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMEJBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKKzoxMEJBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKKzoxMEJBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMEJBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMEJBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKKzoxMEJBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMEJCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMEJCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMEJCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEJCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKKzoxMEJCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMEJCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKKzoxMEJCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMEJCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKKzoxMEJCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMEJCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKKzoxMEJCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKKzoxMEJCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMEJCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMEJCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMEJCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMEJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMEJDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMEJDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKKzoxMEJDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMEJDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEJDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMEJDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMEJDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKKzoxMEJDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKKzoxMEJDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKKzoxMEJDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKKzoxMEJDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKKzoxMEJDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKKzoxMEJDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKKzoxMEJDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMEJDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKKzoxMEJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMEJEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMEJEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMEJEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMEJENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMEJENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEJENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMEJENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMEJEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMEJEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzoxMEJEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMEJEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKKzoxMEJEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKKzoxMEJERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMEJERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMEJERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKKzoxMEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMEJFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMEJFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMEJFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMEJFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMEJFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMEJFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEJFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMEJFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKKzoxMEJFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMEJFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMEJFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKKzoxMEJFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMEJFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMEJFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMEJFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMEJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMEJGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMEJGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMEJGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMEJGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMEJGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMEJGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMEJGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMEJGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMEJGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKKzoxMEJGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMEJGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKKzoxMEJGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKKzoxMEJGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKKzoxMEJGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMEJGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMEMwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMEMwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMEMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMEMwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMEMwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMEMwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMEMwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMEMwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKKzoxMEMwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMEMwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMEMwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKKzoxMEMwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMEMwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMEMwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMEMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMEMxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMEMxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMEMxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMEMxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMEMxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMEMxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMEMxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMEMxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMEMxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMEMxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMEMxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMEMxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMEMxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMEMxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMEMxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMEMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMEMyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMEMyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMEMyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMEMyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMEMyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMEMyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMEMyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKKzoxMEMyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMEMyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEMyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMEMyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMEMyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMEMyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMEMyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMEMyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMEMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKKzoxMEMzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMEMzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMEMzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMEMzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMEMzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMEMzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMEMzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMEMzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMEMzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMEMzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEMzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMEMzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMEMzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMEMzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMEMzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMEM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKKzoxMEM0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKKzoxMEM0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMEM0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMEM0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKKzoxMEM0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMEM0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMEM0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMEM0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMEM0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKKzoxMEM0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMEM0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEM0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMEM0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKKzoxMEM0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKKzoxMEM0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKKzoxMEM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKKzoxMEM1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMEM1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKKzoxMEM1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKKzoxMEM1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKKzoxMEM1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKKzoxMEM1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKKzoxMEM1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKKzoxMEM1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMEM1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKKzoxMEM1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKKzoxMEM1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMEM1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEM1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKKzoxMEM1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKKzoxMEM1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKKzoxMEM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKKzoxMEM2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKKzoxMEM2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKKzoxMEM2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKKzoxMEM2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKKzoxMEM2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKKzoxMEM2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKKzoxMEM2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKKzoxMEM2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKKzoxMEM2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKKzoxMEM2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKKzoxMEM2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMEM2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMEM2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEM2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKKzoxMEM2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKKzoxMEM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMEM3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMEM3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMEM3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzoxMEM3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMEM3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKKzoxMEM3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMEM3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMEM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKKzoxMEM3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMEM3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKKzoxMEM3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMEM3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMEM3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMEM3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEM3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMEM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKKzoxMEM4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKKzoxMEM4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKKzoxMEM4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKKzoxMEM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKKzoxMEM4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKKzoxMEM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKKzoxMEM4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKKzoxMEM4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMEM4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKKzoxMEM4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMEM4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKKzoxMEM4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKKzoxMEM4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKKzoxMEM4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMEM4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEM5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMEM5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMEM5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKKzoxMEM5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKKzoxMEM5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMEM5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKKzoxMEM5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKKzoxMEM5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKKzoxMEM5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMEM5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKKzoxMEM5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMEM5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKKzoxMEM5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMEM5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKKzoxMEM5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMENBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMENBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMENBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzoxMENBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKKzoxMENBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKKzoxMENBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKKzoxMENBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKKzoxMENBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMENBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMENBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKKzoxMENBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKKzoxMENBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMENBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMENBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKKzoxMENBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMENBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKKzoxMENCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMENCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMENCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMENCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKKzoxMENCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMENCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKKzoxMENCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMENCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKKzoxMENCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKKzoxMENCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKKzoxMENCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKKzoxMENCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMENCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMENCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMENCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMENCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMENDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMENDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKKzoxMENDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMENDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMENDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKKzoxMENDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMENDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKKzoxMENDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKKzoxMENDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKKzoxMENDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKKzoxMENDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKKzoxMENDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKKzoxMENDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKKzoxMENDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMENDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKKzoxMENDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMENEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMENEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMENEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMENEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMENENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMENENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMENENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMENENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMENEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzoxMENEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMENEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKKzoxMENEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKKzoxMENEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMENERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMENERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKKzoxMENERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMENFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMENFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMENFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMENFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMENFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMENFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMENFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKKzoxMENFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMENFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMENFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKKzoxMENFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMENFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMENFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMENFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMENFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMENGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMENGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMENGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMENGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMENGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMENGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMENGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMENGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMENGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKKzoxMENGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMENGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKKzoxMENGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKKzoxMENGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKKzoxMENGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMENGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMENGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMEQwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMEQwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMEQwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMEQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMEQwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMEQwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMEQwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMEQwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKKzoxMEQwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMEQwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMEQwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKKzoxMEQwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMEQwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMEQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMEQwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMEQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMEQxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMEQxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMEQxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMEQxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMEQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMEQxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMEQxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMEQxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMEQxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMEQxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMEQxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMEQxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMEQxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMEQxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMEQxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMEQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMEQyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMEQyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMEQyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMEQyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMEQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMEQyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKKzoxMEQyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMEQyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEQyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMEQyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMEQyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMEQyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMEQyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMEQyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMEQyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMEQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzoxMEQzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKKzoxMEQzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKKzoxMEQzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMEQzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMEQzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMEQzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMEQzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMEQzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMEQzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEQzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMEQzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzoxMEQzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMEQzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMEQzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMEQzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKKzoxMEQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKKzoxMEQ0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKKzoxMEQ0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMEQ0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKKzoxMEQ0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKKzoxMEQ0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKKzoxMEQ0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMEQ0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKKzoxMEQ0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKKzoxMEQ0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMEQ0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEQ0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMEQ0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKKzoxMEQ0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKKzoxMEQ0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKKzoxMEQ0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKKzoxMEQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMEQ1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKKzoxMEQ1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKKzoxMEQ1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKKzoxMEQ1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKKzoxMEQ1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKKzoxMEQ1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKKzoxMEQ1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMEQ1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKKzoxMEQ1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKKzoxMEQ1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMEQ1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEQ1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKKzoxMEQ1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKKzoxMEQ1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKKzoxMEQ1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKKzoxMEQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKKzoxMEQ2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKKzoxMEQ2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKKzoxMEQ2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKKzoxMEQ2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKKzoxMEQ2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKKzoxMEQ2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKKzoxMEQ2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKKzoxMEQ2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKKzoxMEQ2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKKzoxMEQ2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMEQ2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMEQ2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEQ2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKKzoxMEQ2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKKzoxMEQ2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKKzoxMEQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKKzoxMEQ3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKKzoxMEQ3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKKzoxMEQ3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKKzoxMEQ3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKKzoxMEQ3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMEQ3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKKzoxMEQ3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKKzoxMEQ3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMEQ3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKKzoxMEQ3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKKzoxMEQ3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMEQ3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMEQ3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEQ3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKKzoxMEQ3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKKzoxMEQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKKzoxMEQ4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKKzoxMEQ4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKKzoxMEQ4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKKzoxMEQ4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKKzoxMEQ4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKKzoxMEQ4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKKzoxMEQ4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMEQ4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKKzoxMEQ4OTAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMzAwMDAwMDAwNzUKKzoxMEQ4QTAwMDAwMDAwMDBEMDAwMDAwMEQzQzAyMDgwMTI0NDI4MjIwMEYKKzoxMEQ4QjAwMDNDMDMwODAxMjQ2MzgyRTBBQzQwMDAwMDAwNDMyMDJCQkQKKzoxMEQ4QzAwMDE0ODBGRkZEMjQ0MjAwMDQzQzFEMDgwMDM3QkQ5RkZDNkUKKzoxMEQ4RDAwMDAzQTBGMDIxM0MxMDA4MDAyNjEwMzFEODNDMUMwODAxQTAKKzoxMEQ4RTAwMDI3OUM4MjIwMEUwMDExRUEwMDAwMDAwMDAwMDAwMDBEQkQKKzoxMEQ4RjAwMDNDMDI4MDAwMzBBNUZGRkYzMEM2MDBGRjM0NDMwMTgwQUEKKzoxMEQ5MDAwMDNDMDg4MDAwOEQwOTAxQjgwNTIwRkZGRTAwMDAwMDAwRTIKKzoxMEQ5MTAwMEFDNjQwMDAwMjQwNDAwMDJBNDY1MDAwOEEwNjYwMDBBQUMKKzoxMEQ5MjAwMEEwNjQwMDBCQUM2NzAwMTgzQzAzMTAwMDAzRTAwMDA4ODMKKzoxMEQ5MzAwMEFEMDMwMUI4M0MwNTYwMDA4Q0EyNEZGODA0NDBGRkZFMjcKKzoxMEQ5NDAwMDAwMDAwMDAwQUNBNDRGQzAzQzAzMTAwMDNDMDQwMjAwRTcKKzoxMEQ5NTAwMEFDQTQ0RkM0MDNFMDAwMDhBQ0EzNEZGODk0ODYwMDBDQkQKKzoxMEQ5NjAwMDAwQTA1MDIxMjQ4ODAwMTQwMDA2MkIwMjAwMDUxMDgwMUUKKzoxMEQ5NzAwMDAwNDQ0ODIxMDEwOTE4MkIxMDYwMDAxMTAwMDAwMDAwMkMKKzoxMEQ5ODAwMDkxMDMwMDAwMkM2NDAwMDk1MDgwMDAwOTkxMTkwMDAxRTYKKzoxMEQ5OTAwMDAwMDM2MDgwM0MwRDA4MDEyNUFEODBFNDAxOEQ1ODIxMTUKKzoxMEQ5QTAwMDhENjcwMDAwMDBFMDAwMDgwMDAwMDAwMDkxMTkwMDAxRjAKKzoxMEQ5QjAwMDAxMTk0MDIxMDEwOTMwMkI1NEMwRkZGMjkxMDMwMDAwRUUKKzoxMEQ5QzAwMDAzRTAwMDA4MDAwMDEwMjEwQTAwMENCRTI1MDgwMDAxMzkKKzoxMEQ5RDAwMDkxMEYwMDAxMjQwRTAwMEExNUVFMDA0MDAxMjhDODIzMTMKKzoxMEQ5RTAwMDJGMzgwMDBBMTcwMDAwM0QyNTBEMDAwMjhENTgwMDAwNTkKKzoxMEQ5RjAwMDI1MEYwMDA2MzcwRTAxMDBBRDRFMDAwMDkxMEMwMDAyMEQKKzoxMERBMDAwMDkxQUIwMDAxOTFBNDAwMDI5MUE2MDAwMzAwMEMyRTAwMkUKKzoxMERBMTAwMDAwMEIzQzAwMDBBNzEwMjUwMDA0MUEwMDAwNDNDODI1OTUKKzoxMERBMjAwMDAzMjZDMDI1QUQ1ODAwMDQ5MTBFMDAwNjkxRUQwMDAxQkIKKzoxMERBMzAwMDkxRTcwMDAyOTFFNTAwMDMwMDBFNUUwMDAwMEQ2NDAwMTYKKzoxMERBNDAwMDAxNkMzMDI1MDAwNzIyMDAwMEM0MTAyNTAwNDUxODI1NzAKKzoxMERBNTAwMDI1MDgwMDBBMEEwMDBDQkVBRDQzMDAwODkxMEYwMDAxMjIKKzoxMERBNjAwMDI1MDQwMDAyMjQwODAwMDI1NUU4MDAwMTAxMjAyMDIxQkQKKzoxMERBNzAwMDBBMDAwQ0JFMDA4MDQwMjE5MTBDMDAwMTI0MEIwMDAzMjEKKzoxMERBODAwMDE1OEIwMDE2MDAwMDAwMDA4RDU4MDAwMDkxMEUwMDAyNUEKKzoxMERBOTAwMDI1MDgwMDAzMzcwRDAwMDhBMTRFMDAxMDBBMDAwQ0JFMzcKKzoxMERBQTAwMEFENEQwMDAwOTExOTAwMDEyNDBGMDAwNDE3MkYwMDBCNDkKKzoxMERBQjAwMDAwMDAwMDAwOTEwNzAwMDI5MTA0MDAwMzhENDMwMDAwNjQKKzoxMERBQzAwMDAwMDcyQTAwMDBBNDEwMjUzNDY2MDAwNDI1MDgwMDA0N0QKKzoxMERBRDAwMEFENDIwMDBDMEEwMDBDQkVBRDQ2MDAwMDAzRTAwMDA4OTkKKzoxMERBRTAwMDI0MDIwMDAxMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwNTMKKzoxMERBRjAwMDBFMDAxNEUwMDA4MDgwMjEzQzA0ODAwODM0ODUwMDgwMDIKKzoxMERCMDAwMDkwQTYwMDA1MjQwM0ZGRkUwMjAwMjAyMTAwQzMxMDI0N0MKKzoxMERCMTAwMDhGQkYwMDE0OEZCMDAwMTBBMEEyMDAwNTBBMDAxNEVBMDUKKzoxMERCMjAwMDI3QkQwMDE4MjdCREZGRThBRkIwMDAxMEFGQkYwMDE0M0QKKzoxMERCMzAwMDBFMDAwRjRFMDA4MDgwMjEzQzA2ODAwODM0QzUwMDgwMTYKKzoxMERCNDAwMDkwQTQwMDAwMjQwMjAwNTAzMDgzMDBGRjEwNjIwMDA3MDAKKzoxMERCNTAwMDNDMDk4MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEMKKzoxMERCNjAwMEFEMjAwMTgwMEEwMDEwMTAyN0JEMDAxODI0MDgwMTAwMTQKKzoxMERCNzAwMDNDMDc4MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwRUUKKzoxMERCODAwMEFDRTgwMTgwMEEwMDEwMTAyN0JEMDAxODI3QkRGRjcwMDcKKzoxMERCOTAwMDNDMDg4MDA4QUZCNjAwODBBRkI1MDA3Q0FGQjEwMDZDMjgKKzoxMERCQTAwMEFGQkYwMDhDQUZCRTAwODhBRkI3MDA4NEFGQjQwMDc4QzEKKzoxMERCQjAwMEFGQjMwMDc0QUZCMjAwNzBBRkIwMDA2ODM1MDUwMDgwM0QKKzoxMERCQzAwMDNDMDc4MDAwOENGMjAxMjg5MEE0MDAwOUFDRTAwMDg0OUUKKzoxMERCRDAwMDkwQTYwMDA1MzA5MTAwRkYwMDAwQTgyMTAwMDYxODI3M0MKKzoxMERCRTAwMDMwNjIwMDAxMDAwMEIwMjExNDQwMDA2N0FGQTAwMDUwNzcKKzoxMERCRjAwMDkwQTkwMDAwMjQwNTAwMjAzMTI0MDBGRjEwODUwMDE2QTQKKzoxMERDMDAwMDI0MEEwMDUwMTA4QTAwOEMwMDAwMDAwMDNDMEMwODAwMjAKKzoxMERDMTAwMDhEOEMwMERDMjU4QjAwMDEzQzAxMDgwMEFDMkIwMERDNjYKKzoxMERDMjAwMDBFMDAxNUQ2MDAwMDAwMDA4RkJGMDA4QzhGQkUwMDg4NEMKKzoxMERDMzAwMDhGQjcwMDg0OEZCNjAwODA4RkI1MDA3QzhGQjQwMDc4REEKKzoxMERDNDAwMDhGQjMwMDc0OEZCMjAwNzA4RkIxMDA2QzhGQjAwMDY4MUEKKzoxMERDNTAwMDAzRTAwMDA4MjdCRDAwOTAwMDAwMDAwRDNDMTA4MDAwOEMKKzoxMERDNjAwMEFGQTAwMDMwOTYxRjAxMTY4RTE5MDEwNDNDMUUwMDIwNDMKKzoxMERDNzAwMDM2MTMwQzAwMDMzRUMwMjQwMDE4QjgyQjAwMTczMTQwQTcKKzoxMERDODAwMEFGQTYwMDMwOEUwRTAxMDQzM0Y0RkZGRjNDMEYwMDQwQkUKKzoxMERDOTAwMDAyOTM4MDIxMDFDRjY4MjQ5MjEzMDAwRDExQTAwMDQ4NDcKKzoxMERDQTAwMDM0QzQwMDQwMzI2MjAwMjAxNDQwMDAwMjM0ODYwMDgwRjgKKzoxMERDQjAwMDAwODAzMDIxMTRDMDAwOTNBRkE2MDAzMDNDMDU4MDA4REUKKzoxMERDQzAwMDM0QTgwMDgwOTEwNzAwMDgzMEU2MDA0MDUwQzAwMDA2RUMKKzoxMERDRDAwMDNDMDY4MDA4MjQwOTAwMDQxMjI5MDBBMjI0MEEwMDEyMkMKKzoxMERDRTAwMDEyMkEwMDI5M0MwNjgwMDgzNEQ0MDEwMDNDMTc4MDAwMjkKKzoxMERDRjAwMDk2RUYwMTFBOTYwRDAwMEU5MjhFMDAwODMyNkIwMDA0MEEKKzoxMEREMDAwMDMxRjdGRkZGMDFDRDYwMDRBRkFDMDA1NDhFMTQwMDA0NjYKKzoxMEREMTAwMDExNjAwMDMxOEUxRTAwMDgzNEMzMDA4MDkwNzkwMDA4MjUKKzoxMEREMjAwMDMzMzgwMDQwMTcwMDAwMjgwMDAwMDAwMDhDNzMwMDUwQkEKKzoxMEREMzAwMDAyOTM5MDIzMDY0MDAwMDYzQzBDODAwMDhDN0UwMDM0NDkKKzoxMERENDAwMDAyOUU4MDIzMDYwMjAwODM4RUEyMDAwODNDMEM4MDAwMDUKKzoxMERENTAwMEFEODAwMDQ0MjQwMjAwMDE4RkJGMDA4QzhGQkUwMDg4N0MKKzoxMERENjAwMDhGQjcwMDg0OEZCNjAwODA4RkI1MDA3QzhGQjQwMDc4QTkKKzoxMERENzAwMDhGQjMwMDc0OEZCMjAwNzA4RkIxMDA2QzhGQjAwMDY4RTkKKzoxMEREODAwMDAzRTAwMDA4MjdCRDAwOTAwRTAwMEQxQTAwMDAyMDIxQkUKKzoxMEREOTAwMDhGQkYwMDhDOEZCRTAwODg4RkI3MDA4NDhGQjYwMDgwNDUKKzoxMEREQTAwMDhGQjUwMDdDOEZCNDAwNzg4RkIzMDA3NDhGQjIwMDcwOTEKKzoxMEREQjAwMDhGQjEwMDZDOEZCMDAwNjgwM0UwMDAwODI3QkQwMDkwQjEKKzoxMEREQzAwMDBBMDAwRDdBMDBDMDIwMjEwRTAwMTYzNzAyODAyMDIxQTMKKzoxMERERDAwMDE0NDBGRkRGM0MwQzgwMDAzQzAzODAwODM0NjMwMDgwNkIKKzoxMERERTAwMDhDNjIwMDM0MDI4MkY4MjMwN0UwMDAxNzAwMDAwMDAwNzQKKzoxMERERjAwMDNDMTUwODAwOEVCNTMxMDAyNkIxMDAwMTNDMDEwODAwMzkKKzoxMERFMDAwMEFDMzEzMTAwMEUwMDE0RTAwMjQwMjAyMTNDMEI4MDA4QjAKKzoxMERFMTAwMDM1NzAwMDgwOTIwQTAwMjUwMjQwMjAyMTM1NDIwMDA0MUUKKzoxMERFMjAwMDBFMDAxNEVBQTIwMjAwMjUwRTAwMEM5RTAyNDAyMDIxRTIKKzoxMERFMzAwMDBBMDAwREE3MjQwMjAwMDEzQzE1MDgwMTI2QjU4MkQwNzYKKzoxMERFNDAwMDBBMDAwRDY5M0MxMDgwMDA4QzY2MDAzMDAyODYyMDIzOTkKKzoxMERFNTAwMDE4ODAwMDA4MjQwOTAwMEMzQzA4MDgwMDhEMDgzMTAwRDcKKzoxMERFNjAwMDMyNzMwMEZDMDAwMEI4MjEyNTA3MDAwMTNDMDEwODAwQzYKKzoxMERFNzAwMEFDMjczMTAwQUZBOTAwMzA4QzY1MDAzMDAwQjQzODIzRTYKKzoxMERFODAwMDE4RTAwMERCMDJFNzUwMkExNTQwRkZERTAwMDAwMDAwMkEKKzoxMERFOTAwMDEyRTcwMDJBMDJFNzY4MjMwMjg3QTAyMTMxQjdGRkZGQkIKKzoxMERFQTAwMDMyNkUwMDAyMTFDMDAwMzQzMjdGMDAxMDNDMTQ4MDA4MzIKKzoxMERFQjAwMDM2OTAwMDgwOTIwRjAwMDgzMUY2MDA0MDUyQzAwMENFMkMKKzoxMERFQzAwMDhFQTIwMDA4MDI0MDIwMjEwRTAwMTRFMDI0MTMwMDE4NDYKKzoxMERFRDAwMEEyMTMwMDA5OTIxODAwMDUyNDE5RkZGRTAyNDAyMDIxMTgKKzoxMERFRTAwMDAzMTlCODI0MEUwMDE0RUFBMjE3MDAwNTI0MDQwMDM5MEYKKzoxMERFRjAwMDAwMDAyODIxMEUwMDE2MTIyNDA2MDAxODBBMDAwREE3QTMKKzoxMERGMDAwMDI0MDIwMDAxOTJCNjAwMEMzQzA0ODAwODM0ODMwMDgwOTcKKzoxMERGMTAwMDhDNjcwMDM4MDAxNkFCMDAzNkIxMDA4MTAyNDAyMDIxMkEKKzoxMERGMjAwMDMyMjVGMDgxMEUwMDBDOEQzMEM2MDBGRjNDMEM4MDAwQzUKKzoxMERGMzAwMEFEODAwMDQ0MEEwMDBEQTcyNDAyMDAwMTNBNkMwMDAxRTQKKzoxMERGNDAwMDMxOEIwMDAxMTU2MEZGQUYwMjg3QTAyMTBBMDAwREY4OTgKKzoxMERGNTAwMDAwMDAwMDAwMDA0MEY4MDkyNDA0MDAxNjBBMDAwREE3ODQKKzoxMERGNjAwMDI0MDIwMDAxMDI0MDIwMjEwRTAwMTcxNzAyMDAyODIxODAKKzoxMERGNzAwMDBBMDAwRDVDOEZCRjAwOEMxM0UwRkY3NDNDMDM4MDA4MjcKKzoxMERGODAwMDM0NjgwMDgwOEQwNDAwMzg4QzY2MDAwNDAzQzYxMDIzQkEKKzoxMERGOTAwMDFDNDBGRjZGM0MwQzgwMDAwM0M0MjgyMzA0QTIwMDAxMzYKKzoxMERGQTAwMDAwODBGMDIxQUZCNDAwMTBBRkI3MDAxNEFGQTcwMDE4ODUKKzoxMERGQjAwMDNDMUY4MDAwOTdFMzAxMjA4RDA5MDAzMDk1MDYwMDVDMkUKKzoxMERGQzAwMDhGQjkwMDU0OEZBQzAwMzAzMDYyRkZGRjMwRDhGRkZGQjQKKzoxMERGRDAwMDAwNDc3MDIxMzdFRjQwMDAwMzM4NjgyQjAxQ0Y1ODIxRUMKKzoxMERGRTAwMDAxOEQ1MDI1QUZBQjAwMjBBRkE5MDAyOEFGQUEwMDMwQUIKKzoxMERGRjAwMEFGQTkwMDI0QUZBMDAwMkNBRkJFMDAzNDkxMDcwMDA4RTkKKzoxMEUwMDAwMDMwRTQwMDA4MTQ4MDAwOEYwMjAwMjAyMThFQTIwMDA0NUEKKzoxMEUwMTAwMDAwNDBGODA5MjdBNDAwMTA4RkE5MDAzMDMxMjgwMDAyMjEKKzoxMEUwMjAwMDU1MDAwMDAxMzI3MzAwRkUzQzA0ODAwODM0OEMwMDgwRUYKKzoxMEUwMzAwMDkxOEIwMDA4MzE2QTAwNDA1MTQwMDAxMjhGQTQwMDI0RTcKKzoxMEUwNDAwMDhDOEQwMDA0MTFCRTAwQkUyNDBFMDAxNDMyNjUwMDAxNDgKKzoxMEUwNTAwMDEwQTAwMDBDOEZBNDAwMjQyNDA0MDAwQzEyMjQwMEQ0NkYKKzoxMEUwNjAwMDJBMjcwMDBEMTBFMDAwQ0UyNDA5MDAwRTI0MDgwMDBBMjMKKzoxMEUwNzAwMDUyMjgwMDAxMjQxNjAwMDg4RkEyMDAyNDI0NDQwMDAxMjUKKzoxMEUwODAwMEFGQTQwMDI0OEZBNjAwMTQzQzAzODAwODM0NjUwMDgwRjAKKzoxMEUwOTAwMDAwODZGODIxOENCMTAwMzBBQ0JGMDAzMDkwQjkwMDRFNDIKKzoxMEUwQTAwMDhDQUUwMDMwMzQxOEZGRkYwMzM4NzgwNDAxQ0Y2ODIxQUMKKzoxMEUwQjAwMEFDQUQwMDM0OEZBNjAwMzA4RkFDMDA1NDMwQ0EwMDA4REQKKzoxMEUwQzAwMDAzQ0M1ODIxMTE0MDAwMENBRkFCMDA1ODhDQTQwMDIwQTkKKzoxMEUwRDAwMDhGQjAwMDU4MTA5MDAwOTQzMEM2MDBGRjkyQTIwMDBDNDAKKzoxMEUwRTAwMDhGQTcwMDM0MDI0MDIwMjEwMDAyNEIwMDM1MjgwMDgwMTkKKzoxMEUwRjAwMDBFMDAwQzhEMzEwNUYwODAzQzBDODAwODM1OTAwMDgwQkUKKzoxMEUxMDAwMDhFMEIwMDMwMDE3MTUwMjMxOTQwMDA3MDI2NTkwMDgwOTkKKzoxMEUxMTAwMDNDMTgwODAwOEYxODMxOTgyNDFGRkY4MDAzM0Y3ODI0OTMKKzoxMEUxMjAwMDMzMkQwMDdGM0MwNjgwMDAzQzBFODAwNDMzMTEwMDEwMkMKKzoxMEUxMzAwMEFDQ0YwMDkwMTIyMDAwMzQwMUFFMjgyMTkwQTMwMDZCRDgKKzoxMEUxNDAwMDU0NjAwMDMyM0MxMDgwMDgyNDA3MDAwMUEwQTcwMDZCMzcKKzoxMEUxNTAwMDk0QzQwMDdBMjQ4NjAwMEFBNjA2MDAxMjNDMEQ4MDA4QUEKKzoxMEUxNjAwMDM1QTUwMDgwOTBCMTAwMDgzMjJDMDA0MDE1ODAwMDA0RDUKKzoxMEUxNzAwMDNDMDM4MDA4MzI2RTAwMDExNUMwMDA2MjAwMDAwMDAwMDAKKzoxMEUxODAwMDM0NjQwMDgwOEM4RjAwMjA4RkIzMDA1ODExRjMwMDBBOTQKKzoxMEUxOTAwMDM0NjMwMTAwOEM3OTAwMDAwMjk5QzAyMzFCMDAwMDc3RDIKKzoxMEUxQTAwMDhGQTgwMDU4QUM4ODAwMjBBQzc0MDAwMDI0MTQwMDAxMzMKKzoxMEUxQjAwMEFDN0UwMDA0QUZCNDAwNTAxNkMwMDAzNzAwMDAwMDAwNzEKKzoxMEUxQzAwMDhGQTQwMDUwMTQ4MDAwMzAwMDAwMDAwMDEyRTAwMDA1MTEKKzoxMEUxRDAwMDAwMDAxODIxOEZBOTAwMzAzMTM3MDAwNDUyRTBGRTkyNzAKKzoxMEUxRTAwMDAwNjAxMDIxMjQwMzAwMDEwQTAwMEQ1QjAwNjAxMDIxNzMKKzoxMEUxRjAwMDBBMDAwREY5MDAwMDM4MjEwMDQwRjgwOTI0MDQwMDE3MzYKKzoxMEUyMDAwMDBBMDAwREE3MjQwMjAwMDEzQzEwODAwODM2MTAwMDgwOEYKKzoxMEUyMTAwMDI0MDkwMDAxMDI0MDIwMjEwRTAwMTRFMEE2MDkwMDEyOEEKKzoxMEUyMjAwMDkyMDgwMDI1MjQwNTAwMDFBRkE1MDA1MDM1MDIwMDAxMjkKKzoxMEUyMzAwMDAyNDAyMDIxMEUwMDE0RUFBMjAyMDAyNTBBMDAwRUE5QzUKKzoxMEUyNDAwMDNDMEQ4MDA4MjdBNTAwMzhBRkE4MDA2MDBFMDAwQ0E4ODAKKzoxMEUyNTAwMEFGQTAwMDM4MTQ0MEZGNkQ4RkE4MDA2MDhGQTUwMDM4NzQKKzoxMEUyNjAwMDMwQjAwMTAwNTIwMEZGNkE4RUEyMDAwNDhGQTMwMDNDNzAKKzoxMEUyNzAwMDhEMDcwMDU4MDA2NzIwMjMwNDgzRkY2NEFEMDMwMDU4MTYKKzoxMEUyODAwMDBBMDAwRTU1OEVBMjAwMDQwRTAwMEM5RTAyNDAyMDIxQjIKKzoxMEUyOTAwMDBBMDAwRUM0MDAwMDAwMDAwRTAwMTRFMDAyNDAyMDIxMUQKKzoxMEUyQTAwMDNDMDU4MDA4MzRBMzAwODAwMjQwMjAyMTBFMDAxNEVBQkYKKzoxMEUyQjAwMEEwNzYwMDA5MDJDMDMwMjEyNDA0MDAzNzBFMDAxNjEyOTcKKzoxMEUyQzAwMDAwMDAyODIxMEEwMDBFQzI4RkE0MDA1MDhGQTIwMDE4NUYKKzoxMEUyRDAwMDU4NDBGRkEzM0MwRDgwMDgwRTAwMTRFMDAyNDAyMDIxQUUKKzoxMEUyRTAwMDkyMEEwMDI1MjQwQjAwMDFBRkFCMDA1MDM1NDIwMDA0MTgKKzoxMEUyRjAwMDAyNDAyMDIxMEUwMDE0RUFBMjAyMDAyNTBBMDAwRUE5MDUKKzoxMEUzMDAwMDNDMEQ4MDA4OENCNjAwMzA4RUJFMDAwODI0MDQwMDE4MzYKKzoxMEUzMTAwMDI2RDUwMDAxMDNDMEY4MDlBQ0I1MDAzMDhGQjIwMDMwM0IKKzoxMEUzMjAwMDBBMDAwRDVCMzI0MjAwMDQzQzA3ODAwMDk0RTUwMTFBQUMKKzoxMEUzMzAwMDUwQTBGRjZBMzRDNjAwMTAwQTAwMEU4OTkyQTIwMDBDOTkKKzoxMEUzNDAwMDEyMkUwMDJBMkEyRjAwMTUxMUUwMDAxRTI0MTkwMDE2OTMKKzoxMEUzNTAwMDI0MTgwMDBDNTYzOEZGM0UzMjY1MDAwMTNDMUY4MDA4MkYKKzoxMEUzNjAwMDkzRTMwMDFCMjQxMEZGQkQyNDE2MDAwRTAwNzAzMDI0MjAKKzoxMEUzNzAwMEEzRTYwMDFCMEEwMDBFNjUzMjY1MDAwMThDN0YwMDAwRDkKKzoxMEUzODAwMDE3RjRGRjhEMDAwMDAwMDA4QzY3MDAwNDAzQzczMDIzRTIKKzoxMEUzOTAwMDA0QzFGRjg0OEZBODAwNTgwQTAwMEVCRjAwMDAwMDAwQ0YKKzoxMEUzQTAwMDE2MjlGRjM2OEZBMjAwMjQwQTAwMEU3MDI0MTYwMDEwRDIKKzoxMEUzQjAwMDI0MTEwMDBFNTJEMUZGMzAyNDE2MDAxMDBBMDAwRTZGRjcKKzoxMEUzQzAwMDI0MTYwMDE2NTYzOUZGMjIzMjY1MDAwMTNDMUY4MDA4RDIKKzoxMEUzRDAwMDkzRTMwMDFCMjQxMEZGQkQyNDE2MDAxMDAwNzAzMDI0QUUKKzoxMEUzRTAwMEEzRTYwMDFCMEEwMDBFNjUzMjY1MDAwMTBBMDAwRTY0RjgKKzoxMEUzRjAwMDI0MTYwMDEyM0MwMzgwMDA4QzYyMDFCODA0NDBGRkZFMkEKKzoxMEU0MDAwMDI0MDQwODAwQUM2NDAxQjgwM0UwMDAwODAwMDAwMDAwMjgKKzoxMEU0MTAwMDMwQTVGRkZGMzBDNkZGRkYzQzA3ODAwMDhDRTIwMUI4NEIKKzoxMEU0MjAwMDA0NDBGRkZFMzRFODAxODBBRDA0MDAwMEFDRTQwMDIwQUQKKzoxMEU0MzAwMDNDMDQ4MDA4OTQ4MzAwNDgzMDYzRkZGRjEwNjAwMDFEOTcKKzoxMEU0NDAwMDNDMEI4MDAwMjRBQTAwMTIwMDZBNDgyQjUxMjAwMDFBQkQKKzoxMEU0NTAwMDI0MEEwMDAzOTRGOTAxMjA4Rjg5MDAwMDI0MEMwMDFBN0IKKzoxMEU0NjAwMDMzMzhGRkZGMjcwN0ZGRkUwMDY3NzgyQjM5RUUwMDAxRTYKKzoxMEU0NzAwMDAwMDk2QjgyMDFBRTU4MjRBMTBDMDAwQjExNjAwMDQ3MEIKKzoxMEU0ODAwMDhGODMwMDA0QTUwNzAwMTQ4Rjg4MDAwNDM1MDcwMDAxNUUKKzoxMEU0OTAwMEFGODcwMDA0MzBDQzAwNDA1NTgwMDAwRjNDMDg4MDAwNUUKKzoxMEU0QTAwMDNDMEM4MDAwMzU4NDAxODBBNDg1MDAwRTBBMDAwRjk4ODIKKzoxMEU0QjAwMDhGOEYwMDBDMjQwQTAwMDMzNTY0MDE4MDMwQ0MwMDQwQUIKKzoxMEU0QzAwMDhGODkwMDAwOEY4NzAwMDRBMDhBMDAwQjUxODBGRkY1MjAKKzoxMEU0RDAwMDNDMEM4MDAwM0MwODgwMDA5NTAzMDEyMDNDMDg4MDA4MkIKKzoxMEU0RTAwMDk1MTgwMDQwMzA3OUZGRkYyNzJFRkZGRTMzMEZGRkZGMDYKKzoxMEU0RjAwMDAxQ0Y2ODJCMTFBMDAwMDMwMUMwMjAyMTk1MDIwMDQwMkMKKzoxMEU1MDAwMDMwNDRGRkZGM0MwQjgwMDAwMEE0NTAyMzM1NjUwMTgwQTAKKzoxMEU1MTAwMEE0QTQwMDBFQTRBQTAwMjQ4RjhGMDAwQzNDMDU4MDAwNDgKKzoxMEU1MjAwMDM0QUUwMTgwMjQxODAwMDIzMEVEODAwMEE1RDgwMDBDMjQKKzoxMEU1MzAwMEE1QzkwMDEwQURDRjAwMjhBNUM2MDAwODExQTAwMDBFODcKKzoxMEU1NDAwMDNDMDQ4MDAwOTRBQTAxMTYzMTQyRkZGQzI0NDgwMDA0RDgKKzoxMEU1NTAwMDAxMDUxODIxOEM3OTQwMDAzMzI2RkZGRjE0QzAwMDA3MDUKKzoxMEU1NjAwMDI0MEVCRkZGM0MwQkZGRkYzNTY1N0ZGRjAwRTUzODI0MUQKKzoxMEU1NzAwMEFGODcwMDA0M0MwNDgwMDAyNDBFQkZGRjM0OEMwMTgwNzAKKzoxMEU1ODAwMDAwRUU2ODI0QTU4RDAwMjZBRDg5MDAyQzNDMDcxMDAwMDQKKzoxMEU1OTAwMEFDODcwMUI4MDNFMDAwMDgwMDAwMDAwMDI0MDJGRkZFODEKKzoxMEU1QTAwMDAwNjIzODI0MEEwMDBGNzZBRjg3MDAwNDNDMDU4MDAwMjMKKzoxMEU1QjAwMDM0QTQwMDcwOEM4QTAwMDA5MEE2MDExMjhGODQwMDAwQTEKKzoxMEU1QzAwMDI3QkRGRkYwMzBDMzAwRkYwMDAzMTg4MjMwODIwMTAwMzYKKzoxMEU1RDAwMDAwMDAzODIxMTA0MDAwMzkyNDY2MDAwMzMwODc0MDAwRDUKKzoxMEU1RTAwMDUwRTAwMDM5MzA4ODIwMDAwMDA2MTA4MDAwNDVDODIxMjYKKzoxMEU1RjAwMDhGMkY0MDAwMjQ3ODAwMDQwMDE4NzA4MEFGQUYwMDAwMTcKKzoxMEU2MDAwMDAxQzU2ODIxOERBQzQwMDBBRkFDMDAwNDk0QUIwMTE2OEQKKzoxMEU2MTAwMDMxNjlGRkZDMDEyNTQwMjE4RDA1NDAwMEFGQTUwMDA4QjAKKzoxMEU2MjAwMDhGQTkwMDA4MDAwMDMwMjEwMDAwMjgyMTNDMDcwODAwQzUKKzoxMEU2MzAwMDI0RTcwMTAwMEEwMDBGRTkyNDA4MDAwODkwNDIwMDAwQzYKKzoxMEU2NDAwMDI0QTUwMDAxMkNBRDAwMEMwMDYyQzgyMTAwMTlDMDgwNzcKKzoxMEU2NTAwMDAzMDc3ODIxOERFRTAwMDAxMUEwMDAwNjAwQ0UzMDI2QzEKKzoxMEU2NjAwMDAzQTUxMDIxMTRBOEZGRjUwMDA1MUEwMDU1MjBGRkY0OUEKKzoxMEU2NzAwMDkwNDIwMDAwM0MwNDgwMDAzNDg3MDA3MDNDMDUwODAwOTQKKzoxMEU2ODAwMDhDQTUzMTA0OENFMzAwMDAyQ0E4MDAyMDExMDAwMDA5QTcKKzoxMEU2OTAwMDAwNkEzODIzMDAwNTU4ODAzQzBDMDgwMDI1OEMzMTA4OUUKKzoxMEU2QTAwMDAxNkM0ODIxMjRBQTAwMDFBRDI3MDAwMDNDMDEwODAwQUMKKzoxMEU2QjAwMEFDMkEzMTA0QUY4NjAwMEMyNDA3MDAwMTAwRTAxMDIxRDEKKzoxMEU2QzAwMDAzRTAwMDA4MjdCRDAwMTAxMTAwRkZGQzAwMDAzODIxMDYKKzoxMEU2RDAwMDAwMDY2MDgwMDE4NTU4MjE4RDY0NDAwMDI0NjkwMDA0OTMKKzoxMEU2RTAwMDAwMDkzODgwQUZBNDAwMDAwMEU1MTgyMThDNjY0MDAwQzYKKzoxMEU2RjAwMEFGQTAwMDA4MEEwMDBGRDlBRkE2MDAwNDI3QkRGRkQ4QkQKKzoxMEU3MDAwMEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAyNEFGQjQwMDIwMEMKKzoxMEU3MTAwMEFGQjMwMDFDQUZCMTAwMTQ4Rjg3MDAwMDNDMDQ4MDAwMzEKKzoxMEU3MjAwMDk0ODMwMTBFMzBFMjQwMDAwMDAwODAyMTEwNDAwMDEwNzAKKzoxMEU3MzAwMDMwNzJGRkZGM0MwNjAwMjAwMEU2MjgyNDEwQTAwMDBERTgKKzoxMEU3NDAwMDMwRUE4MDAwOEY4ODAwMDQyNDA5QkZGRjAwRTkzODI0RTQKKzoxMEU3NTAwMDM1MDMxMDAwQUY4NzAwMDAzMEYxMjAwMDE2MjAwMDBCQjkKKzoxMEU3NjAwMDNDMTQwMDA0MjQxOEZGQkYwQTAwMTAzODAwNzgxMDI0NUQKKzoxMEU3NzAwMDMwRUE4MDAwMTU0MDAwODYzQzBDMDAyMDMwRjEyMDAwN0IKKzoxMEU3ODAwMDEyMjBGRkY4OEY4MzAwMDQzQzE0MDAwNDAwRjQ5ODI0NDYKKzoxMEU3OTAwMDEyNjBGRkY1MjQxOEZGQkYzNDYyMDA0MDMwRjkwMTAwMTkKKzoxMEU3QTAwMDEzMjAwMDBGQUY4MjAwMDQzQzAyMDAyMDAwRTJGODI0OTYKKzoxMEU3QjAwMDEzRTAwMDA1M0MwQjgwMDAzQzA0MDAwNDAwRTQxODI0MzYKKzoxMEU3QzAwMDEwNjAwMENGMDAwMDAwMDA5NTZBMDExRTk1NjkwMTFDRDEKKzoxMEU3RDAwMDMxNDZGRkZGMDAwOTQ0MDAwMEM4MjgyNUFGODUwMDBDMjIKKzoxMEU3RTAwMDNDMEU4MDAwOTVDRDAxMEM4REM0NDAwMDM0MENGRkZGMjEKKzoxMEU3RjAwMDEwOEMwMEIwMzFBNUZGRkYzMDhGMDEwMDU1RTAwMDAxMDMKKzoxMEU4MDAwMDI0MTAwMDEwMzBGMTEwMDA1MjIwMDAwODM2MTEwMDAxRDEKKzoxMEU4MTAwMDMwRjMwMDIwMTY2MDAwOUYzQzE4MTAwMDAwRjhBMDI0ODAKKzoxMEU4MjAwMDE2ODAwMDk2M0MwNDBDMDAzNjExMDAwMTMwRTgwMTAwMEYKKzoxMEU4MzAwMDE1MDAwMDBCM0MwQTAwMDE4Rjg4MDAwNDMxMDk0MDAwREMKKzoxMEU4NDAwMDE1MjAwMDA4MDBFQTMwMjQzQzBDMUYwMTAwRUM1ODI0N0QKKzoxMEU4NTAwMDNDMEExMDAwNTE2QTAwQUUzMEFEMDIwMDNDMEEwMDAxRDMKKzoxMEU4NjAwMDAwRUEzMDI0MTRDMDAwOTUzQzA1MTAwMDAwRTUyMDI0ODcKKzoxMEU4NzAwMDAwMDA0MDIxMTA4MDAwMDcwMDAwOTAyMTAwMDc5RTAyNDgKKzoxMEU4ODAwMDMyNzIwMDBGMDAxMjc4ODAzQzBFMDgwMTI1Q0U4MjgwODMKKzoxMEU4OTAwMDAxRUU0MDIxOEY5NDAwMTgxMjgwMDA0NzAyMjA4MDIxNTEKKzoxMEU4QTAwMDEwODAwMDkxMDAwMDAwMDAzQzA5ODAwMDk1MzkwMTBFQTUKKzoxMEU4QjAwMDkxMDMwMDAwMDIyMDMwMjEzMzM4RkZGRjI3MDUwMDA0QjgKKzoxMEU4QzAwMDEwNjAwMDA4MDAwMEEwMjEyNDFGMDAwMzEwN0YwMTNBRkYKKzoxMEU4RDAwMDI0MDQwMDAyOTEwQzAwMDExMTg0MDExODMwRUEwMDQwNjgKKzoxMEU4RTAwMDAwMTJBMUMwOEY5MjAwMUM1MjQwMDAwMTM2MjYwMDQwNDkKKzoxMEU4RjAwMDNDMTM4MDAwOEU2RjQwMDAzMUYxMDEwMDEyMjAwMENCRUMKKzoxMEU5MDAwMDMwRDFGRkZCM0MxODA4MDA4RjE4MDAyNDMwRDIwMDA0REYKKzoxMEU5MTAwMDMzMDYwMDA0MTRDMDAwQ0MzMEIwRkZGRjU2NDAwMDAxQTUKKzoxMEU5MjAwMDM2MzEwMDA0MDI4MDIwMjEwMjAwMjgyMTBFMDAwRjU1RkMKKzoxMEU5MzAwMDAyMjAzMDIxMTY0MDAwMEQwMDAwMjAyMTM2NjUwMTgwQTQKKzoxMEU5NDAwMDNDMDQ4MDAwOEM5MzAxQjgwNjYwRkZGRTI0MTkyMDAwNkYKKzoxMEU5NTAwMDI0MTQwMDAyQTRCOTAwMDhBMEI0MDAwQkE0QTAwMDEwNjUKKzoxMEU5NjAwMDNDMDUxMDAwQUM4NTAxQjgwMDAwMjAyMThGQkYwMDI0QjkKKzoxMEU5NzAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MjkKKzoxMEU5ODAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDI4OTAKKzoxMEU5OTAwMDAwRUM1ODI0MTE2MEZGN0EzMEYxMjAwMDhGOEQwMDA0QzQKKzoxMEU5QTAwMDNDMEZGRkZGMzVFRTdGRkYwMEVFMzgyNDM1QTM4MDAwREIKKzoxMEU5QjAwMDBBMDAxMDI3QUY4NzAwMDAzQzAyMDgwMDhDNDIwMDM4OTQKKzoxMEU5QzAwMDNDMDQwODAwMjQ4NDAwMzgxMDQwMDA0QjI0NDlGRkZGMTkKKzoxMEU5RDAwMDNDMDM4MDAwOTQ2QzAxMEUzMThCRkZGRjExMDAwMEEwRkUKKzoxMEU5RTAwMDI1NzMwMDA0M0MxMDA4MDA4RTEwMDAzMDEyMDAwMDBBNEQKKzoxMEU5RjAwMDMwRTYwMTAwOEY4QTAwMDQzMTQzNDAwMDEwNjAwMDA2QjkKKzoxMEVBMDAwMDNDMEYwRjAwMDBFRjcwMjQzQzBEMDEwMDAxQUU0MDJCQzUKKzoxMEVBMTAwMDExMDAwMERGMzI2NUZGRkYxMEMwMDA2OTNDMTQwRjAwRDkKKzoxMEVBMjAwMDAwRjQyODI0M0MxODAyMDAxMEI4MDA2NThGOTkwMDBDRUYKKzoxMEVBMzAwMDMyNzBGRkZGMDMyOTk4MjQwMjY0OTAyMTkyNDkwMDA0NTgKKzoxMEVBNDAwMDI1MjcwMDA0MDAwNzIxQzAwMjAwMjgyMTM2MjYwMDAyRTUKKzoxMEVBNTAwMDBFMDAwRjU1MDAwMDAwMDA4RkJGMDAyNDhGQjQwMDIwNkYKKzoxMEVBNjAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwNEMKKzoxMEVBNzAwMDAwMDAxMDIxMDNFMDAwMDgyN0JEMDAyODNDMDIwQkZGMjYKKzoxMEVBODAwMDAwRTQxODI0MzQ1RkZGRkYwM0UzQzgyQjUzMjBGRjY3MjMKKzoxMEVBOTAwMDM2MTEwMDAxM0MwNjA4MDA4Q0M2MDAyQzM2MTEwMDA1MUEKKzoxMEVBQTAwMDI0RDAwMDAxM0MwMTA4MDBBQzMwMDAyQzBBMDAxMDVEQUQKKzoxMEVBQjAwMDMwRTgwMTAwMEEwMDEwNTIyNDEwMDAyMDAyNDAyODIxRjIKKzoxMEVBQzAwMDNDMTIwODAwOEU1MjAwRDgyNDA0MDA4MDI2NEQwMDAxMUMKKzoxMEVBRDAwMDNDMDEwODAwQUMyRDAwRDgwRTAwMEY1NTI0MDYwMDAzQTEKKzoxMEVBRTAwMDBBMDAxMEU4OEZCRjAwMjQzQzA4MDgwMTI1MDg4MjgwMzYKKzoxMEVBRjAwMDBBMDAxMDdDM0MwOTgwMDAwQTAwMTBDNTAwMDA0ODIxNzMKKzoxMEVCMDAwMDBFMDAwRkJDMDAwMDAwMDAwQTAwMTA0OThGODcwMDAwQjMKKzoxMEVCMTAwMDE1QTBGRjUzM0MwQTAwMDEyNjQ1MDAwNDMwQUFGRkZGNjAKKzoxMEVCMjAwMDM2MjYwMDAyM0MwMzgwMDA4QzcyMDFCODA2NDBGRkZFQ0UKKzoxMEVCMzAwMDhGODUwMDA4MzQ2OTAxODBBRDIwMDAwMDEwQTAwMEFGNkYKKzoxMEVCNDAwMDNDMDQ4MDAwMjU0RjAwMTIwMEFGNzAyQjUxQzAwMEFDNzgKKzoxMEVCNTAwMDI0MDMwMDAzOTQ3ODAxMjAyNDE0MDAxQTMwRjE0MDAwQUIKKzoxMEVCNjAwMDMzMTNGRkZGQTEzNDAwMEIxMjIwMDBCNjI2NjNGRkZFMTMKKzoxMEVCNzAwMDAwQTNDODJCNTcyMDAwQjQyNDFGRkZGRTM1MDgwMDAxNTYKKzoxMEVCODAwMEE1MjMwMDE0QUY4ODAwMDQzQzEwODAwMDI0MENCRkZGQjQKKzoxMEVCOTAwMDAxMEM0ODI0MjQwQjAwMDIzNjA4MDE4MEE1MEIwMDBDNTAKKzoxMEVCQTAwMEE1MEEwMDBFQTUwNjAwMDhBNTA5MDAyNkE1MDcwMDEwNjUKKzoxMEVCQjAwMDNDMDcxMDAwQUUwNzAxQjgwQTAwMTBFODhGQkYwMDI0MjAKKzoxMEVCQzAwMDNDMDMwODAwOEM2MzAwRDAyRTQ1MDAwQzAwMTIyMUMwQ0QKKzoxMEVCRDAwMDM4NkIwMDAxMkQ2MjAwMDEwMDQ1RjgyNDE3RTBGRjlBMTAKKzoxMEVCRTAwMDMyNzBGRkZGMjY0Q0ZGRkMyRDg0MDAwNDU0ODAwMDUwM0YKKzoxMEVCRjAwMDAwMDAyMDIxMzg2QTAwMDIyRDQzMDAwMTAwNjU4MDI0QjYKKzoxMEVDMDAwMDE2MDAwMDRBMzI3MEZGRkYwMDA3NkE0MjAwMTI3MDJCQTQKKzoxMEVDMTAwMDAxQUU0MDI0NTUwMDAwNjMwMDAwMjAyMTAwMTIyMUMwRjUKKzoxMEVDMjAwMDAyMDAyODIxMEEwMDEwRTUzNjI2MDAwMjM0REYwMDAyMjcKKzoxMEVDMzAwMDAyODAyMDIxMzNFNkZGRkYwRTAwMEY1NTMwQTVGRkZGQjUKKzoxMEVDNDAwMDBBMDAxMEFDMDAwMDIwMjEyNDA0MDEwMDAyMDAyODIxNDkKKzoxMEVDNTAwMDBFMDAwRjU1MDIyMDMwMjEwQTAwMTA5ODAwMDAwMDAwMUQKKzoxMEVDNjAwMDhDNjY0MDAwMzBDRjAxMDAxMUUwMDAzRDMwRjgwMTAwMUIKKzoxMEVDNzAwMDNDMTIwODAwOEU1MjAwMjQxMzAwMDAxMTMyMzQwMDA0QUMKKzoxMEVDODAwMDNDMUYwRjAwMDBGRkM4MjQzQzA1MDIwMDEzMjUwMDBDQTgKKzoxMEVDOTAwMDhGOEMwMDBDMDIyMDMwMjEzMjY1RkZGRjAxODk1ODI0M0YKKzoxMEVDQTAwMDAxNjQxMDIxOTA0OTAwMDQzMjMwRkZGQjI0MTFGRkZFNjMKKzoxMEVDQjAwMDI1MjcwMDA0MEUwMDBGNTUwMDA3MjFDMDAyNTE5MDI0QTMKKzoxMEVDQzAwMDI0MDQwMDAxMTI0NDAwNTIzMjQzMDAwMTE0NjAwMDU4MzEKKzoxMEVDRDAwMDAyMDAzMDIxMzI0QTAwMDQxMTQwMDAwNDhGOEQwMDAwRjAKKzoxMEVDRTAwMDMxQTgwODAwMTUwMDAwNUEzMjY1RkZGRjE2ODBGRjVCNEYKKzoxMEVDRjAwMDhGQkYwMDI0M0MxMzgwMDAzNjY1MDE4MDNDMDQ4MDAwRjcKKzoxMEVEMDAwMDhDOTAwMUI4MDYwMEZGRkUyNDA2MjAwMDI0MEYwMDAyQUMKKzoxMEVEMTAwMEE0QTYwMDA4QTBBRjAwMEJBNEEwMDAxMDNDMEUxMDAwOTkKKzoxMEVEMjAwMEFDOEUwMUI4MEEwMDEwRTg4RkJGMDAyNDAwMDAyMDIxM0IKKzoxMEVEMzAwMDAyMDAyODIxMEEwMDEwRTUzNjI2MDAwMjExNDBGRUU5RjMKKzoxMEVENDAwMDAwMDBBMDIxOTUyRTAxMTA5NTBEMDAwMjMxQzhGRkZGOTMKKzoxMEVENTAwMDUxQThGRUU0MDAxMkExQzAwQTAwMTA4QjhGOTIwMDFDODMKKzoxMEVENjAwMDNDMDUwODAwOENBNTAwMjQzMEI4MDAwMTUzMDBGRjNCOEYKKzoxMEVENzAwMDhGQkYwMDI0MzI2NUZGRkYzNjI2MDAwMjAwMDAyMDIxRUQKKzoxMEVEODAwMDBFMDAwRjU1MDAwMDAwMDAwQTAwMTBFODhGQkYwMDI0OUQKKzoxMEVEOTAwMDM2MjYwMDAyMEUwMDBGNTUyNDA0MDA4MDBBMDAxMEU4RjkKKzoxMEVEQTAwMDhGQkYwMDI0MDIwMDI4MjEwRTAwMEY1NTMyMjZGRkZCRTIKKzoxMEVEQjAwMDBBMDAxMTU5MDAxMjIxQzA5MTAzMDAwMTI0MDIwMDAxMzAKKzoxMEVEQzAwMDEwNjJGRUVBMjQwNDAwMDEyNDEwMDAwMjE0NzBGRUM1NDMKKzoxMEVERDAwMDAwMDBBMDIxMzBFMzAwNDAxMDYwRkVDMzhGOTIwMDFDQjEKKzoxMEVERTAwMDk1MkIwMTEwOTUwOTAwMDIzMTY3RkZGRjExMjdGRUUwMDYKKzoxMEVERjAwMDhGQkYwMDI0MEEwMDEwOEIwMDAwMDAwMDI0MDMwMDAzRDIKKzoxMEVFMDAwMDM0ODIwMTgwQTA0MzAwMEIwQTAwMTEzNDNDMTA4MDAwQzIKKzoxMEVFMTAwMDMyMTQwMDA0MTY4MDAwMDMzMjY1RkZGRjM2MTIwMDAyMzAKKzoxMEVFMjAwMDMyNTBGRkZGMDIwMDMwMjEwQTAwMTFCMTAwMDAyMDIxMDIKKzoxMEVFMzAwMDAwMDAyMDIxMEUwMDBGNTUzMjY1RkZGRjBBMDAxMTg2RTkKKzoxMEVFNDAwMDMyMTBGRkZCMjQxRkZGRkUwQTAwMTEzMjAxMUY0MDI0NzUKKzoxMEVFNTAwMDAyMDAzMDIxMEUwMDBGNTUyNDA0MDEwMDBBMDAxMThDMUQKKzoxMEVFNjAwMDAwMDAwMDAwMjdCREZGQzhBRkIwMDAxMEFGQkYwMDM0RTYKKzoxMEVFNzAwMDNDMTA2MDBDQUZCRTAwMzBBRkI3MDAyQ0FGQjYwMDI4MUUKKzoxMEVFODAwMEFGQjUwMDI0QUZCNDAwMjBBRkIzMDAxQ0FGQjIwMDE4ODAKKzoxMEVFOTAwMEFGQjEwMDE0OEUwQzUwMDAyNDBERkY3RjNDMDU4MDAwQTQKKzoxMEVFQTAwMDAxOEQ1ODI0MzU2QTM4MEMyNDA5MDAwM0FFMEE1MDAwM0QKKzoxMEVFQjAwMEFDQTkwMDA4M0MwMTA4MDBBQzIwMDAyMDBFMDAxNzQzNUMKKzoxMEVFQzAwMDAwMDAwMDAwM0MwNTYwMTY4Q0E3MDAwMDNDMDhGRkZGMTYKKzoxMEVFRDAwMDNDMDYwMDEwMzRDMzgwNTEwMEU4MjAyNDNDMDI1MzUzMDgKKzoxMEVFRTAwMEFFMDM1MzdDMTA4MjAyNjEzNEEzN0MwMDhDNzQwMDdDREUKKzoxMEVFRjAwMDhDNzUwMDc4M0MxMTYwMDAzNjI0MjAyMDNDMDUwODAxMDgKKzoxMEVGMDAwMDI0QTU4MTE0MjQwNjAwMEEzQzExODAwMDNDMTMwMDAyNTEKKzoxMEVGMTAwMDNDMTI2MDBDQUY5NTAwMTBBRjk0MDAxNDBFMDAxNUVDN0QKKzoxMEVGMjAwMDM2M0UwMTgwQUU1MzUzRkM4RTMwMDAwMDMyMTYwMDAzOTMKKzoxMEVGMzAwMDEyQzBGRkZEMzIxNzAwMDExNkUwMDA1ODMyMDYwMDAyMzEKKzoxMEVGNDAwMDEwQzBGRkY5M0MwNDgwMDA4QzhGMDE0MDI0MTAwMDQwNjkKKzoxMEVGNTAwMEFDOEYwMDIwOEM5MjAxNDgwMDEyNzYwMjMxQzMwMDcwMDEKKzoxMEVGNjAwMDEwNzAwMTNEMkM2NzAwNDE1MEUwMDAwODI0MDQwMDYwNEYKKzoxMEVGNzAwMDI0MTUwMDIwMTA3NTAwMEUzQzAzNDAwMDNDMDc4MDAwNjMKKzoxMEVGODAwMEFDRTMwMTc4MEEwMDEyMUIwMDAwMDAwMDE0NjRGRkZCRDAKKzoxMEVGOTAwMDNDMDM0MDAwMEUwMDFGNUQwMDAwMDAwMDNDMDM0MDAwRTkKKzoxMEVGQTAwMDNDMDc4MDAwQUNFMzAxNzgwQTAwMTIxQjAwMDAwMDAwNUYKKzoxMEVGQjAwMDhDODMwMTQ4MjQxNDAwMDQzNDg3MDE4MDAwMDM0QzAyMzAKKzoxMEVGQzAwMDMxMjUwMEZGOEM4MzAxNDAxMEI0MDE3MTI0QkZGRkZBOEEKKzoxMEVGRDAwMDJGRjkwMDA2NTMyMDAwMTIzQzA1ODAwMDhDODYwMTQ0NjYKKzoxMEVGRTAwMDI0MTYwMEZGMzBBNTAwRkYzMENCMDBGRjMwQ0EwMEZGMjEKKzoxMEVGRjAwMDExNTYwMUJDMjU2ODAwMDQyNDAyMDAwOTEwQTIwMUFBRDAKKzoxMEYwMDAwMDI4QUMwMDBBMTE4MDAxOTYyNDEzMDAwQTI0MEQwMDA4ODAKKzoxMEYwMTAwMDEwQUQwMDE0OEY4NTAwMTgwMDA4MTlDMDNDMDU4MDAwNTEKKzoxMEYwMjAwMDhDQTgwMUI4MDUwMEZGRkUyNDE3MDAwMkFDRTMwMDAwMjUKKzoxMEYwMzAwMEE0RTkwMDA4QTBGNzAwMEI4Q0I0MDE0ODNDMDkxMDAwQkIKKzoxMEYwNDAwMDNDMDM0MDAwQTRGNDAwMTA4Q0E0MDE0NEFDRTQwMDI0NzAKKzoxMEYwNTAwMDNDMDc4MDAwQUNBOTAxQjhBQ0UzMDE3ODBBMDAxMjFCQTAKKzoxMEYwNjAwMDAwMDAwMDAwMDAwNjdBMDIwMDA4QTg4MDNDMDQwODAxQTUKKzoxMEYwNzAwMDI0ODQ4MjgwMjRBRTAwMDEwMkE0OTAyMTMxRTUwMEZGQTcKKzoxMEYwODAwMDI0MTAwMDAxQTI0RjAwMDAxNEIwRkZFM0FGOEUwMDE4NUYKKzoxMEYwOTAwMDAwMDgxOUMwMEEwMDEyNThBRjg1MDAxQzhFMzQwMTI4RTAKKzoxMEYwQTAwMDNDMDI4MDA4QUUzNDAwMjA4RTI0MDEwNDhFMjMwMTAwMkYKKzoxMEYwQjAwMDk0NUYwMDQ4QUY4NDAwMDBBRjgzMDAwNDMzRjlGRkZGODIKKzoxMEYwQzAwMDBFMDAwRjRFQUY5OTAwMDgzQzE4MDgwMDhGMTgwMEMwQzIKKzoxMEYwRDAwMDEzMDAwMDI0OEY4NzAwMDAzQzA3MDgwMDhDRTcwMEM0NjEKKzoxMEYwRTAwMDI0RTYwMDAxM0MwMTA4MDBBQzI2MDBDNDNDMDM4MDAwN0IKKzoxMEYwRjAwMDhDNjQwMTI0M0MwNzYwMjBBQ0U0MDAxNDAwMDAwMDAwOTQKKzoxMEYxMDAwMDNDMDY4MDAwM0MxNTQwMDBBQ0Q1MDEzODAwMDAwMDAwRjIKKzoxMEYxMTAwMDUyODBGRjhCMzIwNjAwMDIyNjhDMDE0MDI2OEQwMDgwMzMKKzoxMEYxMjAwMDI0MDlGRjgwMDE4OTI4MjQwMUE5OTgyNDAwMTM1OTQwNEIKKzoxMEYxMzAwMDMxQTIwMDdGMDAwNUIxNDAzMThBMDA3RjNDMUYyMDAwRDIKKzoxMEYxNDAwMDM3RTgwMDAyMDE2MkMwMjUwMkNBQzgyNTAzMjhBMDI1QUQKKzoxMEYxNTAwMDAzMDhCODI1QUNENzA4MzBBQ0Q0MDgzMDBBMDAxMjIxMTcKKzoxMEYxNjAwMDMyMDYwMDAyM0MwNTAwMTAwMEU1NDAyNDE1MDAwMEE2MTAKKzoxMEYxNzAwMDhGODMwMDA0M0MwQzA4MDA4RDhDMDAyMDNDMEQ4MDAwMjcKKzoxMEYxODAwMDk1QUEwMTBFMjU4QjAwMDEzMEU5NDAwMDNDMDEwODAwRTIKKzoxMEYxOTAwMEFDMkIwMDIwMzE1NUZGRkYxMTIwMDBCNjAwMDA5MDIxNUMKKzoxMEYxQTAwMDNDMEYwMDIwMDBFRjcwMjQxMUMwMDBCMzMwRjc4MDAwNDYKKzoxMEYxQjAwMDhGOTMwMDA0MjQxNkJGRkYwMEY2MzgyNDM2NjMxMDAwMzYKKzoxMEYxQzAwMEFGODcwMDAwMzBFMjIwMDAxMDQwMDBCNjI0MDVGRkJGRUEKKzoxMEYxRDAwMDNDMDgwMDA0MDBFODMwMjQxMEMwMDAwMjAwNjUxMDI0NDAKKzoxMEYxRTAwMDM0NjIwMDQwMzBFOTAxMDAxMTIwMDAwRUFGODIwMDA0QkIKKzoxMEYxRjAwMDNDMEIwMDIwMDBFQjUwMjQxMTQwMDAwNDNDMEQwMDA0QTcKKzoxMEYyMDAwMDAwRUQ2MDI0MTE4MDAxMzkwMDAwMDAwMDk2MzcwMTFFRDYKKzoxMEYyMTAwMDk2MzYwMTFDMzJFRkZGRkYwMDE2OUMwMDAxRjM3MDI1QUIKKzoxMEYyMjAwMEFGOEUwMDBDOTYzOTAxMEM4RTI0NDAwMDM0MThGRkZGN0QKKzoxMEYyMzAwMDEwOTgwMENBMzMyNUZGRkYzMDlGMDEwMDU3RTAwMDAxRkUKKzoxMEYyNDAwMDI0MTIwMDEwMzBFMzEwMDAxMDYwMDAxMzM2NTMwMDAxNDgKKzoxMEYyNTAwMDMwRTQwMDIwMTQ4MDAwMEEzQzA2MTAwMDAwRTYxMDI0NzAKKzoxMEYyNjAwMDEwNDAwMDBEM0MwQzBDMDAzQzBCMEJGRjAwRUM1MDI0M0MKKzoxMEYyNzAwMDM1NjlGRkZGMDEyQTQwMkIxMTAwMDAwODMwRUUwMTAwMjQKKzoxMEYyODAwMDNDMEQwODAwOERBRDAwMkMzNjUzMDAwNTI1QjIwMDAxNjEKKzoxMEYyOTAwMDNDMDEwODAwQUMzMjAwMkMzMEVFMDEwMDE1QzAwMDBCMjAKKzoxMEYyQTAwMDNDMDYwMDAxOEY4ODAwMDQzMTBGNDAwMDU1RTAwMDA4NDMKKzoxMEYyQjAwMDAwRTYyODI0M0MxODFGMDEwMEY4QjgyNDNDMTYxMDAwNzIKKzoxMEYyQzAwMDUyRjYwMTBFMzBCOTAyMDAzQzA2MDAwMTAwRTYyODI0ODcKKzoxMEYyRDAwMDE0QTAwMEE0M0MxRjEwMDAwMEZGMjAyNDAwMDA0MDIxQzcKKzoxMEYyRTAwMDEwODAwMDA3MDAwMEE4MjEwMDA3NUUwMjMxNzUwMDBGQTIKKzoxMEYyRjAwMDAwMTU1MDgwM0MwMjA4MDEyNDQyODI4MDAxNDI0MDIxRDYKKzoxMEYzMDAwMDhGOEMwMDE4MTE4MDAwNjkwMjYwOTAyMTE0ODAwMDAzMjYKKzoxMEYzMTAwMDNDMDk4MDAwM0MwODA4MDEyNTA4ODI4MDk1MzIwMTBFRDYKKzoxMEYzMjAwMDkxMDMwMDAwMDI2MDMwMjEzMjQ0RkZGRjI0ODUwMDA0NzUKKzoxMEYzMzAwMDEwNjAwMDA4MDAwMEI4MjEyNDBEMDAwMzEwNkQwMTIyQTgKKzoxMEYzNDAwMDI0MTYwMDAyOTExNzAwMDExMkY2MDAyNjMwRjgwMDQwNDIKKzoxMEYzNTAwMDAwMTVCOUMwOEY4MjAwMUM1MDQwMDAwMTM2NjYwMDQwODUKKzoxMEYzNjAwMDNDMTY4MDAwOEVDQTQwMDAzMTUzMDEwMDEyNjAwMEM3NzUKKzoxMEYzNzAwMDMwRDUwMDA0M0MwQjA4MDA4RDZCMDAyNDMwRDNGRkZCMUMKKzoxMEYzODAwMDMxNjYwMDA0MTRDMDAxMEEzMEIyRkZGRjU2QTAwMDAxMkMKKzoxMEYzOTAwMDM2NzMwMDA0MDJFMDIwMjEwMjQwMjgyMTBFMDAwRjU1QTAKKzoxMEYzQTAwMDAyNjAzMDIxMTZBMDAwMEQwMDAwMjAyMTM2QzUwMTgwMkEKKzoxMEYzQjAwMDNDMDQ4MDAwOEM4QzAxQjgwNTgwRkZGRTI0MEQyMDAwRTkKKzoxMEYzQzAwMDI0MTIwMDAyQTRBRDAwMDhBMEIyMDAwQkE0QTAwMDEwRkIKKzoxMEYzRDAwMDNDMDUxMDAwQUM4NTAxQjgwMDAwMjAyMTBBMDAxMzVGMzUKKzoxMEYzRTAwMDAwODAxMDIxMTMwMEZGREIwMDAwQjgyMTk1M0YwMTEwQzEKKzoxMEYzRjAwMDk1MTkwMDAyMzNFOEZGRkY1MzI4RkZENjAwMTVCOUMwNjYKKzoxMEY0MDAwMDBBMDAxMzI3OEY4MjAwMUMyNDEzQkZGRjAwNzM2ODI0OTcKKzoxMEY0MTAwMDExQTAwMDA3MjQwRTg3RkYwMDZFNDgyNDE1MjAwMDBBNjMKKzoxMEY0MjAwMDNDMEYwMDYwMDBFRjkwMjQxMjQwMDAwNzAwMDAwMDAwMzUKKzoxMEY0MzAwMDBFMDAwRDM0MDAwMDAwMDAxMDQwRkYzMjNDMDY4MDAwM0EKKzoxMEY0NDAwMDBBMDAxMjhEM0MwMzgwMDAwRTAwMTRDOTAwMDAwMDAwNjkKKzoxMEY0NTAwMDBBMDAxMzVGMDAwMDAwMDAwRTAwMTRFRjAwMDAwMDAwMUYKKzoxMEY0NjAwMDNDMDM0MDAwM0MwNzgwMDBBQ0UzMDE3ODBBMDAxMjFCMUIKKzoxMEY0NzAwMDAwMDAwMDAwMzBGNzgwMDAxMkUwRkY1MjhGODMwMDA0OEMKKzoxMEY0ODAwMDNDMTkwMDIwMDBGOUMwMjQxMzAwRkY0RThGOUYwMDA0OTgKKzoxMEY0OTAwMDNDMDRGRkZGMzQ4MzdGRkYwMEUzMzgyNDBBMDAxMkMxREQKKzoxMEY0QTAwMDM3RTM4MDAwMEEwMDEyQ0EwMDY1MTAyNDNDMDQwODAwRkIKKzoxMEY0QjAwMDhDODQwMDM4MTQ4MDAwMDIyNDg5RkZGRjAwMDA0ODIxNUEKKzoxMEY0QzAwMDNDMDM4MDAwOTQ2RjAxMEUzMUVFRkZGRjExMDAwMEVCNTIKKzoxMEY0RDAwMDI1RDYwMDA0M0MwMzA4MDA4QzYzMDAzMDEwNjAwMDBBNEQKKzoxMEY0RTAwMDMwRUEwMTAwOEY5ODAwMDQzMzE3NDAwMDEyRTAwMDA2NTQKKzoxMEY0RjAwMDNDMDIwRjAwMDBFMkY4MjQzQzE5MDEwMDAzM0Y0MDJCQkUKKzoxMEY1MDAwMDExMDAwMEQ1MzJDNUZGRkYxMTQwMDAzMDNDMEMwRjAwNDgKKzoxMEY1MTAwMDAwRUM1ODI0M0MwNjAyMDAxMTY2MDAyQzAwMDAwMDAwOUMKKzoxMEY1MjAwMDhGOTUwMDBDM0MwRDA4MDAyNUFEMDAzODMyRDJGRkZGNEUKKzoxMEY1MzAwMDAyQTkyODI0MDBBREIwMjE5MkM3MDAwNDI0RTkwMDA0RTgKKzoxMEY1NDAwMDAwMDkyMUMwMDI0MDI4MjEzNjY2MDAwMjBFMDAwRjU1MzYKKzoxMEY1NTAwMDAwMDAwMDAwMEEwMDEzNUYwMDAwMTAyMTBBMDAxMkUyMDAKKzoxMEY1NjAwMDI0MTIwMDIwM0MxOTA4MDA4RjM5MDBEODAyQTAyODIxNUQKKzoxMEY1NzAwMDI0MDQwMDgwMjczODAwMDEzQzAxMDgwMEFDMzgwMEQ4ODIKKzoxMEY1ODAwMDBFMDAwRjU1MjQwNjAwMDMwQTAwMTM1RjAwMDAxMDIxMkYKKzoxMEY1OTAwMDhDODQwMTQwMDBFMDI4MjEzQzAzODAwMDhDNzcwMUI4NzYKKzoxMEY1QTAwMDA2RTBGRkZFMjQwODAwMUNBQ0E0MDAwMEEwQTgwMDBCOEQKKzoxMEY1QjAwMDNDMTgxMDAwQUM3ODAxQjgzQzAzNDAwMDNDMDc4MDAwQzgKKzoxMEY1QzAwMEFDRTMwMTc4MEEwMDEyMUIwMDAwMDAwMDNDMDMwODAwQjUKKzoxMEY1RDAwMDhDNjMwMEQwMkVBNTAwMEMwMDE1MjFDMDM4NkYwMDAxRUYKKzoxMEY1RTAwMDJERjIwMDAxMDI0NTcwMjQxNUMwRkZENjMyRDJGRkZGNzQKKzoxMEY1RjAwMDI2QjdGRkZDMkVFNDAwMDQxNDgwMDAwODAwMDAyMDIxNDAKKzoxMEY2MDAwMDM4NjgwMDAyMkQxODAwMDEwMzA1MTgyNDEwNjAwMDA2NTgKKzoxMEY2MTAwMDAwMDdGQTQyMzJEMkZGRkYwMDAwMjAyMTAyNDAyODIxRDkKKzoxMEY2MjAwMDBBMDAxM0E0MzY2NjAwMDIwMDE1MTAyQjAzRTJDODI0NUEKKzoxMEY2MzAwMDE3MjAwMDA1MzJEMkZGRkYwMDE1MjFDMDAyNDAyODIxMEIKKzoxMEY2NDAwMDBBMDAxM0E0MzY2NjAwMDIwMDAwMjAyMTAyNDAyODIxOEYKKzoxMEY2NTAwMDBFMDAwRjU1MzI2NkZGRkIwQTAwMTNFMDAwMTUyMUMwQjMKKzoxMEY2NjAwMDEwQjMwMDZBMDAwODYwODAyNDA2MDAwQjE0QTZGRTZCMkQKKzoxMEY2NzAwMDAwMDgxOUMwMDAwODI4ODAzQzE1MDgwMTI2QjU4MjgwQzIKKzoxMEY2ODAwMDAwQjUzMDIxMEEwMDEyNThBMEMwMDAwMTM0RDUwMDAyOTQKKzoxMEY2OTAwMDAyRTAyMDIxMzBBNUZGRkYwRTAwMEY1NTMyQTZGRkZGMkMKKzoxMEY2QTAwMDBBMDAxMzQ4MDAwMDIwMjEwMDA4Qjg4MDNDMDMwODAxMkMKKzoxMEY2QjAwMDI0NjM4MjgwMDJFMzEwMjE5MDU0MDAwMDEyODBGRTU3RTAKKzoxMEY2QzAwMDAwMDgxOUMwQTA0MDAwMDA4Rjk5MDAxODI3MzhGRkZGREMKKzoxMEY2RDAwMDE3MDBGRTUyQUY5ODAwMTgwMDA4MTlDMDBBMDAxMjU4MEYKKzoxMEY2RTAwMEFGODAwMDFDMEEwMDEyNEYyNDA4MDAwMzBFMDAwRkJDNUMKKzoxMEY2RjAwMDAwMDAwMDAwMEEwMDEyREE4Rjg3MDAwMDE3MjBGRUYzRDYKKzoxMEY3MDAwMDNDMDYwMDAxMjZCRjAwMDQzM0U1RkZGRjM2NjYwMDAyMTkKKzoxMEY3MTAwMDNDMDM4MDAwOEM3NTAxQjgwNkEwRkZGRThGODkwMDA4QUQKKzoxMEY3MjAwMDNDMDQ4MDAwMzQ5MzAxODBBRTYwMDAwMDExMjAwMDk5RjkKKzoxMEY3MzAwMDI0MEYwMDAzMjRBQTAwMTIwMTJBMTAyQjEwNDAwMDk1NjgKKzoxMEY3NDAwMDAwMDAwMDAwOTQ2RDAxMjAzQzEyODAwMDI0MDMwMDFBODgKKzoxMEY3NTAwMDMxQUNGRkZGMzY0QTAxODAzMEVCNDAwMEExNDMwMDBCODMKKzoxMEY3NjAwMDExNjAwMDhGMjU4M0ZGRkUwMTIzNzAyQjE1QzAwMDhERDMKKzoxMEY3NzAwMDI0MDlGRkZFMzUwODAwMDFBNTQzMDAxNEFGODgwMDA0RUEKKzoxMEY3ODAwMDI0MTdCRkZGMDExN0IwMjQyNDA4MDAwMkE3QzgwMDBDRUIKKzoxMEY3OTAwMEE3QzUwMDBFQTdDNjAwMDhBN0Q2MDAyNkE3QzcwMDEwNTkKKzoxMEY3QTAwMDNDMDcxMDAwQUUyNzAxQjgwQTAwMTM1RjAwMDAxMDIxQ0IKKzoxMEY3QjAwMDI0MDQwMTAwMDI0MDI4MjEwRTAwMEY1NTAyNjAzMDIxNzAKKzoxMEY3QzAwMDBBMDAxMzM0MDAwMDAwMDA5MTAzMDAwMTI0MTUwMDAxMTkKKzoxMEY3RDAwMDEwNzVGRjAyMjQwNDAwMDEyNDBFMDAwMjE0NkVGRURERTkKKzoxMEY3RTAwMDAwMDBCODIxMzBFMzAwNDAxMDYwRkVEQjhGODIwMDFDNzcKKzoxMEY3RjAwMDk1MjcwMTEwOTUwRjAwMDIzMEU5RkZGRjExRTlGRjBFNzgKKzoxMEY4MDAwMDAwODAxMDIxMEEwMDEzMjc4RjgyMDAxQzNDMEYwODAxODIKKzoxMEY4MTAwMDI1RUY4MjgwMDE4RjcwMjEwMDA2OTIwMkExRDIwMDAxQTMKKzoxMEY4MjAwMDNDMUY2MDAwOEZFRDE4MjAyNDEwMDAwMTAxMTA5ODA0ODcKKzoxMEY4MzAwMDNDMDIwODAxMjQ0MjgyODIwMUIzQjAyNTAxODI1MDIxOUEKKzoxMEY4NDAwMDAwMDY1QzAyMDAwODE5QzBBNTRCMDAwMEFGRjYxODIwQTYKKzoxMEY4NTAwMDBBMDAxMjU5M0MwNTgwMDAzNjY2MDAwMjBFMDAwRjU1NjIKKzoxMEY4NjAwMDI0MDQwMDgwMEEwMDEzNUYwMDAwMTAyMThDQUUwMDA0MDUKKzoxMEY4NzAwMDNDMEY2MDAwMEEwMDEyMEMwMUNGMTgyMThDNjY0MDAwN0EKKzoxMEY4ODAwMDMwQ0EwMTAwMTE0MDAwMzczMEVCMDEwMDNDMTUwODAwODAKKzoxMEY4OTAwMDhFQjUwMDI0MTE2MDAwMTMzMjc3MDAwNDNDMEQwRjAwNzgKKzoxMEY4QTAwMDAwRUQyODI0M0MwQzAyMDAxMEFDMDAwRThGODQwMDBDRUMKKzoxMEY4QjAwMDNDMEYwODAwMjVFRjAwMzgwMjYwMzAyMTAwODk5MDI0QjkKKzoxMEY4QzAwMDAyNEY3MDIxOTFDNzAwMDQzMkM1RkZGRjMyNzJGRkZCNjcKKzoxMEY4RDAwMDI0RTkwMDA0MDAwOTIxQzAwRTAwMEY1NTI0MTNGRkZFODcKKzoxMEY4RTAwMDAyQjNBODI0MjQwMzAwMDExMkEzMDAzMDMyQjgwMDAxOUYKKzoxMEY4RjAwMDEzMDAwMDA3MzJBODAwMDQwMjQwMzAyMTAwMDAyMDIxM0MKKzoxMEY5MDAwMDBFMDAwRjU1MzJDNUZGRkYzMjUyRkZGQjMyQTgwMDA0MzQKKzoxMEY5MTAwMDExMDAwMDA0OEY5RjAwMDAzM0Y5MDgwMDU3MjAwMDJCQ0UKKzoxMEY5MjAwMDMyQzVGRkZGMTZFMEZFQzQwMDAwMTAyMTNDMTY4MDAwMjcKKzoxMEY5MzAwMDM2QzQwMTgwM0MwNTgwMDA4Q0EyMDFCODA0NDBGRkZFNjMKKzoxMEY5NDAwMDI0MEIyMDAwMjQwNjAwMDJBNDhCMDAwOEEwODYwMDBCRDQKKzoxMEY5NTAwMEE0ODAwMDEwM0MwQTEwMDBBQ0FBMDFCODBBMDAxMzVGOTIKKzoxMEY5NjAwMDAwMDAxMDIxM0MwNTA4MDA4Q0E1MDAyNDMwQUMwMDAxRUIKKzoxMEY5NzAwMDUxODBGRUIxMDAwMDEwMjEzMkM1RkZGRjM2NjYwMDAyNDMKKzoxMEY5ODAwMDAwMDAyMDIxMEUwMDBGNTUwMDAwMDAwMDBBMDAxMzVGNDgKKzoxMEY5OTAwMDAwMDAxMDIxQTNDRjAwMEIwQTAwMTQzMjI0MTdCRkZGNzAKKzoxMEY5QTAwMDI0MDlGRkZFMEEwMDE0MzAwMTA5NDAyNDMyNTUwMDA0RTYKKzoxMEY5QjAwMDE2QTAwMDAzMzJDNUZGRkYzNjU3MDAwMjMyRjJGRkZGRTgKKzoxMEY5QzAwMDAyNDAzMDIxMEEwMDE0QjIwMDAwMjAyMTAyNDAzMDIxMDAKKzoxMEY5RDAwMDBFMDAwRjU1MjQwNDAxMDAwQTAwMTQ5QTAwMDAwMDAwRDQKKzoxMEY5RTAwMDNDMDM4MDAwOEM2NDAxMDAzMDgyMDAzRTE0NDAwMDA4MUIKKzoxMEY5RjAwMDAwMDAwMDAwQUM2MDAwNDg4QzY2MDEwMDMwQzUwN0MwMDQKKzoxMEZBMDAwMDEwQTAwMDA1MDAwMDAwMDBBQzYwMDA0Q0FDNjAwMDUwOEQKKzoxMEZBMTAwMDAzRTAwMDA4MjQwMjAwMDFBQzYwMDA1NEFDNjAwMDQwMjgKKzoxMEZBMjAwMDhDNjgwMTAwMzEwNzM4MDAxMEUwRkZGOTAwMDAwMDAwODkKKzoxMEZBMzAwMDI0MDIwMDAxMDNFMDAwMDhBQzYwMDA0NDNDMDM5MDAwOTUKKzoxMEZBNDAwMDM0NjIwMDAxMDA4MjIwMjUzQzAzODAwMEFDNjQwMDIwNjkKKzoxMEZBNTAwMDhDNjUwMDIwMDRBMEZGRkUwMDAwMDAwMDAzRTAwMDA4MDkKKzoxMEZBNjAwMDAwMDAwMDAwM0MwMjgwMDAzNDQzMDAwMTAwODMyMDI1OTgKKzoxMEZBNzAwMDAzRTAwMDA4QUM0NDAwMjAyN0JERkZEOEFGQjEwMDE0NUMKKzoxMEZBODAwMDNDMDQ4MDAwQUZCRjAwMjBBRkIzMDAxQ0FGQjIwMDE4MzEKKzoxMEZBOTAwMEFGQjAwMDEwOEM5MjAxNDA4QzkwMDE0ODI0MDIwMDBFRkYKKzoxMEZBQTAwMDAwMTA4QzAyMzIyMzAwRkYxMDYyMDA1OTAyMDQyODI0NDcKKzoxMEZBQjAwMDI4NjYwMDBGMTBDMDAwMTMyODZBMDAzNzI0MDcwMDA2Q0MKKzoxMEZBQzAwMDEwNjcwMDhFMjg2ODAwMDc1MTAwMDAyRDI0MDQwMDA5RUIKKzoxMEZBRDAwMDEwNjAwMDc4M0MwNjgwMDAyNDA5MDAwMTEwNjkwMEIwMjUKKzoxMEZBRTAwMDAwMDAwMDAwMDAwMDAwMEQ4RkJGMDAyMDhGQjMwMDFDM0QKKzoxMEZBRjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MUYKKzoxMEZCMDAwMDI3QkQwMDI4MTE0MDAwNTkyNDBEMDAzODI4NkIwMDM1MEUKKzoxMEZCMTAwMDExNjAwMDA1M0MwNTgwMDAyNDBDMDAxRjE0NkNGRkYxRUYKKzoxMEZCMjAwMDAwMDAwMDAwM0MwNTgwMDA4Q0I4MDFCODA3MDBGRkZFMTMKKzoxMEZCMzAwMDM0QjkwMTgwQUYzMjAwMDAyNDFGMDAwMTI0MTIwMDAyRkEKKzoxMEZCNDAwMDNDMDIxMDAwQUYyMDAwMDRBNzMxMDAwOEEzM0YwMDBBQzgKKzoxMEZCNTAwMEEzMzIwMDBCQTczMDAwMTBBRjIwMDAyNEFGMjAwMDI4RjQKKzoxMEZCNjAwMEFDQTIwMUI4OEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4NjkKKzoxMEZCNzAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4RUIKKzoxMEZCODAwMDEwNjQwMDIzMjQwNTAwMEIxNDY1RkZENjMyMThGRkZGMTQKKzoxMEZCOTAwMDE3MDAwMDIwM0MwNTgwMDA4RjkzRkVFQzkyN0YwMDA1NEIKKzoxMEZCQTAwMDMzRjkwMDA0MTcyMEZGQ0YwMDAwMDAwMDBFMDAxNEUwMUUKKzoxMEZCQjAwMDAyNDAyMDIxOTI2OTAwMDUwMjQwMjAyMTM1MjgwMDA0REUKKzoxMEZCQzAwMDBFMDAxNEVBQTI2ODAwMDU5MjY3MDAwNTMwRTIwMDA0MDYKKzoxMEZCRDAwMDE0NDAwMDAyMDAwMDAwMDAwMDAwMDAwRDkyNkIwMDAwQzUKKzoxMEZCRTAwMDI0MDYwMDIwMzE2QTAwRkYxNTQ2MDAwQTNDMDU4MDAwMEIKKzoxMEZCRjAwMDhDQTQwMUI4MDQ4MEZGRkUzNEFEMDE4MDI0MEUwMDA1MDIKKzoxMEZDMDAwMDNDMEMxMDAwQURCMjAwMDBBMUFFMDAwQkFDQUMwMUI4RDIKKzoxMEZDMTAwMDNDMDU4MDAwOENBMzAxQjgwNDYwRkZGRTM0QUYwMTgwNzYKKzoxMEZDMjAwMDI0MTMwMDAyQURGMjAwMDBBREYyMDAwNEE1RjEwMDA4QkIKKzoxMEZDMzAwMEExRjMwMDBBQTFGMzAwMEJBNUYwMDAxMEFERTAwMDI0MzEKKzoxMEZDNDAwMDhDQjEwMTQ0M0MxMDEwMDBBREYxMDAyOEFDQjAwMUI4RkIKKzoxMEZDNTAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MkIKKzoxMEZDNjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODEwNkRGRkFEMjUKKzoxMEZDNzAwMDI0MEUwMDgwMTQ2RUZGOUIwMDAwMDAwMDNDMDU4MDAwRjUKKzoxMEZDODAwMDhDQTMwMUI4MDQ2MEZGRkUzNEFGMDE4MDI0MTIwMDAyOEYKKzoxMEZDOTAwMEExRjIwMDBCQTVGMTAwMDhBNUYwMDAxMDhDQjMwMTQ0RkYKKzoxMEZDQTAwMDNDMDIxMDAwQTVGMzAwMTJBQ0EyMDFCODBBMDAxNTJCMEIKKzoxMEZDQjAwMDhGQkYwMDIwOENDMzAxQjgwNDYwRkZGRTM0RDMwMTgwRTUKKzoxMEZDQzAwMEFFNzIwMDAwQUU2MDAwMDQyNDEyMDAwMUE2NzEwMDA4QUMKKzoxMEZDRDAwMDI0MTEwMDAyQTI3MjAwMEFBMjcxMDAwQkE2NzAwMDEwOEIKKzoxMEZDRTAwMDhDRDAwMTQ0M0MwRjEwMDBBRTcwMDAyNEFFNjAwMDI4QTAKKzoxMEZDRjAwMEFDQ0YwMUI4MEEwMDE1NjY4RkJGMDAyMDNDMDM4MDAwMUUKKzoxMEZEMDAwMDhDNjYwMUI4MDRDMEZGRkUzNDYyMDE4MDNDMDYwODAxMjUKKzoxMEZEMTAwMDkwQzY4MkMwQUM1MjAwMDAxMEMwMDAwMzAwMDAzODIxMjEKKzoxMEZEMjAwMDNDMDcwODAxOENFNzgyQzgzQzA1ODAwMDM0QUEwMTgwQUEKKzoxMEZEMzAwMDI0MDQwMDAyMzRDQzAwMDFBQzQ3MDAwNEE1NTEwMDA4QTMKKzoxMEZENDAwMEExNEMwMDBBQTE0NDAwMEJBNTUwMDAxMDhDQUIwMTQ0NEIKKzoxMEZENTAwMDAwMDAyMDIxMDE0MDI4MjFBRDRCMDAyNDEwQzAwMDAzRTkKKzoxMEZENjAwMDhGQkYwMDIwM0MwNDA4MDE4Qzg0ODJDNDhGQjMwMDFDMjgKKzoxMEZENzAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDNDMEUxMDAwMkQKKzoxMEZEODAwMDNDMEQ4MDAwMjdCRDAwMjhBQ0E0MDAyOEFEQUUwMUI4MTIKKzoxMEZEOTAwMDNDMDEwODAxQTAyMDgyQzAwM0UwMDAwODAwMDAwMDAwMzAKKzoxMEZEQTAwMDEwQTAwMDBCM0MwNjgwMDA4Qzk4MDE0NDI0MTkwMDAyMkUKKzoxMEZEQjAwMDNDMDEwODAxQTAzOTgyQzAzQzAxMDgwMUFDMzI4MkM4NzQKKzoxMEZEQzAwMDNDMDEwODAxQUMzODgyQzQwQTAwMTU2NjhGQkYwMDIwRDAKKzoxMEZERDAwMDhDREYwMUI4MDdFMEZGRkUzNEM3MDE4MDI0MDkwMDAyNzAKKzoxMEZERTAwMEFDRjIwMDAwQUNGMjAwMDRBNEYxMDAwOEEwRTkwMDBBQTMKKzoxMEZERjAwMEEwRTkwMDBCQTRGMDAwMTBBQ0UwMDAyNDhDQzgwMTQ0ODIKKzoxMEZFMDAwMDNDMDIxMDAwQUNFODAwMjhBQ0MyMDFCODBBMDAxNTY2M0MKKzoxMEZFMTAwMDhGQkYwMDIwMjdCREZGRThBRkJGMDAxMDBFMDAwRjRFQzAKKzoxMEZFMjAwMDAwMDAwMDAwM0MwMjgwMDA4RkJGMDAxMDAwMDAyMDIxNzUKKzoxMEZFMzAwMEFDNDAwMTgwMEEwMDEwMTAyN0JEMDAxODMwODRGRkZGN0QKKzoxMEZFNDAwMDMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTMwODIwMDAxNUMKKzoxMEZFNTAwMDEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTE0ODBGRkZCQkUKKzoxMEZFNjAwMDAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA3RDIKKzoxMEZFNzAwMDAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjI0QTUwMDA0OUYKKzoxMEZFODAwMEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNDAzRTAwMDA4REYKKzoxMEZFOTAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwQjMKKzoxMEZFQTAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGQTkKKzoxMEZFQjAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwM0MKKzoxMEZFQzAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDBFMDAxNEUwNzQKKzoxMEZFRDAwMDAwODA4MDIxM0MwNDgwMDgzNDgzMDA4MDkwNjUwMDI1RTgKKzoxMEZFRTAwMDAyMDAyMDIxMzRBMjAwMjAwRTAwMTRFQUEwNjIwMDI1QTYKKzoxMEZFRjAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDBBMDAwQzlFNUEKKzoxMEZGMDAwMDI3QkQwMDE4M0MwMzgwMDAyN0JERkZGODM0NjIwMTgwNDQKKzoxMEZGMTAwMEFGQTIwMDAwMzA4QzAwRkYzMEFEMDBGRjMwQ0UwMEZGRkMKKzoxMEZGMjAwMDNDMEI4MDAwOEQ2NDAxQjgwNDgwRkZGRTAwMDAwMDAwREYKKzoxMEZGMzAwMDhGQTkwMDAwOEQ2ODAxMjg4RkFBMDAwMDhGQTcwMDAwRkMKKzoxMEZGNDAwMDhGQTQwMDAwMjQwNTAwMDEyNDAyMDAwMkEwODUwMDBBRkQKKzoxMEZGNTAwMDhGQTMwMDAwMzU5OTQwMDAzQzA1MTAwMEEwNjIwMDBCMDMKKzoxMEZGNjAwMDhGQjgwMDAwOEZBQzAwMDA4RkE2MDAwMDhGQUYwMDAwOUMKKzoxMEZGNzAwMDI3QkQwMDA4QUQyODAwMDBBRDQwMDAwNEFEODAwMDI0N0UKKzoxMEZGODAwMEFDQzAwMDI4QTRGOTAwMDhBNzBEMDAxMEE1RUUwMDEyQ0YKKzoxMEZGOTAwMDAzRTAwMDA4QUQ2NTAxQjgzQzA2ODAwODI3QkRGRkU4MTYKKzoxMEZGQTAwMDM0QzUwMDgwQUZCRjAwMTA5MEE3MDAwOTI0MDIwMDEyRTIKKzoxMEZGQjAwMDMwRTMwMEZGMTA2MjAwMEIwMDgwMzAyMThDQTgwMDUwNUQKKzoxMEZGQzAwMDAwODgyMDIzMDQ4MDAwMDg4RkJGMDAxMDhDQUEwMDM0MTIKKzoxMEZGRDAwMDI0MDQwMDM5MDAwMDI4MjEwMENBNDgyMzA1MjAwMDA1MTgKKzoxMEZGRTAwMDI0MDYwMDEyOEZCRjAwMTAyNDAyMDAwMTAzRTAwMDA4NjUKKzoxMEZGRjAwMDI3QkQwMDE4MEUwMDE2MTIwMDAwMDAwMDhGQkYwMDEwNzEKKzowMjAwMDAwNDAwMDFGOQorOjEwMDAwMDAwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDE4MjdCREZGQzgzNworOjEwMDAxMDAwQUZCMTAwMkMwMEEwODgyMUFGQjIwMDMwMjdBNTAwMTA5RQorOjEwMDAyMDAwMDA4MDkwMjEwMjIwMjAyMUFGQkYwMDM0QUZCMDAwMjgxMworOjEwMDAzMDAwMEUwMDBDQThBRkEwMDAxMDE0NDAwMDlCM0MwNzgwMDhFNQorOjEwMDA0MDAwMzRFNDAwODA5MDg2MDAwODMwQzUwMDA4MTRBMDAwNjlFMAorOjEwMDA1MDAwOEZBNzAwMTAzQzE4ODAwODM3MTAwMDgwOTIwRjAwMDgwRQorOjEwMDA2MDAwMzFFRTAwMDgxNUMwMDAwMjI0MDgwMDAzMDAwMDQwMjEwMgorOjEwMDA3MDAwM0MwQjgwMDg5MTY1MDAxMTkxNkEwMDEyMzU2NjAwODA4MgorOjEwMDA4MDAwOENERjAwNTQzMTQ5MDBGRjAxMjgyMDIxMzBBMzAwRkZGQworOjEwMDA5MDAwMDAwNDEwODAwMDYyMjgyMTAwQkZDODJCMTMyMDAwMDgzNAorOjEwMDBBMDAwMDAwMDAwMDA5NEQwMDA1QzhDQ0YwMDU0MzIwREZGRkZBNAorOjEwMDBCMDAwMDFFNTcwMjMwMUFFNjAyQjExODAwMDk0MDAwMDAwMDA2OAorOjEwMDBDMDAwOTREOTAwNUMzMzIzRkZGRjMwRkYwMDA0MTNFMDAwNzQ3OQorOjEwMDBEMDAwMDAwODMwODA4RkE4MDAxQzAwNjgxMDJCNTA0MDAwNEY5MworOjEwMDBFMDAwMzBFMzAwMDQwMDY2MTAyMzJDNDYwMDgwMTBDMDAwMDI5QworOjEwMDBGMDAwMDA0MDgwMjEyNDEwMDA4MDBFMDAxNEUwMDI0MDIwMjFFNgorOjEwMDEwMDAwM0MwMzgwMDgzNDY2MDA4MDI0MDcwMDAxQUNDNzAwMEM2MworOjEwMDExMDAwOTBDODAwMDgwMDEwNjg0MDM0NjcwMTAwMzExRjAwN0Y1QworOjEwMDEyMDAwQTBERjAwMDg4RTM5MDAwNDI3MzgwMDAxQUNEODAwMzA2OQorOjEwMDEzMDAwQTREMDAwNUM4Q0NGMDAzQzk2MzAwMDBFMDFGMDcwMjEwMgorOjEwMDE0MDAwQUNDRTAwMjA4Q0NDMDAzQzAxOEQ1ODIxQUNDQjAwMUNFNworOjEwMDE1MDAwOEUyQTAwMDRBQ0VBMDAwMDhFMjkwMDA4QUNFOTAwMDRGNQorOjEwMDE2MDAwOEZBNTAwMTAzMEE0MDAwODU0ODAwMDMyOTNBNjAwMjAxMAorOjEwMDE3MDAwQTBDMDAwNEU5MEM5MDA0RTI0MDJGRkRGM0MxODgwMDg0QQorOjEwMDE4MDAwQTBFOTAwMDg5MEM1MDAwODM3MEQwMDgwMjQwQTAwNTAzRgorOjEwMDE5MDAwMDBBMjIwMjRBMEM0MDAwODhFMzkwMDA4QURCOTAwMzhBMAorOjEwMDFBMDAwOEYwRjAwMTQ4REIwMDAzMDAxRjA3MDIxQURBRTAwMzQxRgorOjEwMDFCMDAwOTFBQzAwMDAzMThCMDBGRjExNkEwMDJDMjY0NTAxMDAzNAorOjEwMDFDMDAwMEUwMDE0RUEwMjQwMjAyMTI0MDQwMDM4MDAwMDI4MjFGNworOjEwMDFEMDAwMEUwMDE2MTIyNDA2MDAwQThGQkYwMDM0OEZCMjAwMzBDMgorOjEwMDFFMDAwOEZCMTAwMkM4RkIwMDAyODI0MDIwMDAxMDNFMDAwMDgyQQorOjEwMDFGMDAwMjdCRDAwMzgzMEU4MDEwMDExMDAwMDNEOEZBMzAwMTQzNgorOjEwMDIwMDAwOEM4QTAwNTgwMDZBNDgyMzA1MjBGRjkzM0MxODgwMDgxOAorOjEwMDIxMDAwQUM4MzAwNTgwQTAwMTY2NjhGQTcwMDEwMjQwNzAyMTg0NgorOjEwMDIyMDAwMTA2MEZGQjEwMEU2MTAyMzhGQTIwMDFDMEEwMDE2OEI5RAorOjEwMDIzMDAwMDA0NjEwMjMzQzE4ODAwODM3MEQwMDgwQTBFNjAwMDgxNworOjEwMDI0MDAwOEUzOTAwMDgyNDBBMDA1MEFEQjkwMDM4OEYwRjAwMTQxMQorOjEwMDI1MDAwOERCMDAwMzAwMUYwNzAyMUFEQUUwMDM0OTFBQzAwMDBFMworOjEwMDI2MDAwMzE4QjAwRkYxNTZBRkZENjI2NDUwMTAwMjQwNkZGODA2QQorOjEwMDI3MDAwMDBBNjEwMjQzQzA5ODAwMEFEMjIwMDI4OEUyNzAwMDgyQgorOjEwMDI4MDAwMzBBMzAwN0YzQzA0ODAwQzAwNjRGODIxQUZFNzAwRDA2RAorOjEwMDI5MDAwOEUyODAwMDhBRjlGMDAyODBBMDAxNkMxQUZFODAwRDRERQorOjEwMDJBMDAwMEEwMDE2ODgyQzYyMDIxODhFMjMwMDA4M0MwNDgwMDg3RAorOjEwMDJCMDAwMzQ4MjAwODBBQzQzMDA1NDAyNDAyMDIxMEUwMDE2MDExRAorOjEwMDJDMDAwQUM0MDAwMzAyNDA0MDAzODI0MDUwMDhEMEUwMDE2MTJDNgorOjEwMDJEMDAwMjQwNjAwMTI4RkJGMDAzNDhGQjIwMDMwOEZCMTAwMkM4MworOjEwMDJFMDAwOEZCMDAwMjgyNDAyMDAwMTAzRTAwMDA4MjdCRDAwMzg3OQorOjEwMDJGMDAwQUM4MDAwNTg5MDhDMDAwODI0MERGRkY3MDE4RDU4MjQyNQorOjEwMDMwMDAwQTA4QjAwMDgwQTAwMTY2NjhGQTcwMDEwOENEODAwNTQzNgorOjEwMDMxMDAwMEEwMDE2ODMwMzA1MTgyMzI3QkRGRkU4QUZCRjAwMTBBRQorOjEwMDMyMDAwOTBBNjAwMEQzMEM3MDAxMDEwRTAwMDBDMDA4MDQwMjFBNgorOjEwMDMzMDAwM0MwMjgwMDg4QzQ0MDAwNDhDQTMwMDA4MTA2NDAwMDg3MAorOjEwMDM0MDAwMzBDOTAwMDQzMEM1MDAwNDEwQTAwMDFDOEZCRjAwMTA4RAorOjEwMDM1MDAwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDE4MzBDOTAwMDQ5MgorOjEwMDM2MDAwMTEyMDAwMTAzMENCMDAxMjEwRTBGRkY5OEZCRjAwMTBGOQorOjEwMDM3MDAwM0MwODgwMDg4Q0E3MDAwODhEMDYwMDA0MTRFNkZGRjVGMQorOjEwMDM4MDAwMjQwMjAwMDEyNDA0MDAzODI0MDUwMDhEMEUwMDE2MTJGQQorOjEwMDM5MDAwMjQwNjAwMTI4RkJGMDAxMDI0MDIwMDAxMDNFMDAwMDhCMQorOjEwMDNBMDAwMjdCRDAwMTgyNDBBMDAxMjE1NkFGRkU5OEZCRjAwMTA0QworOjEwMDNCMDAwMDEwMDIwMjEwQTAwMTY1NDI3QkQwMDE4MDAwMDIwMjE0QQorOjEwMDNDMDAwMEEwMDBEMUEyN0JEMDAxODNDMDUwODAwMjRBNTVENTA0MQorOjEwMDNEMDAwM0MwNDA4MDAyNDg0N0IxMDNDMDIwODAwMjQ0MjVENTg0MQorOjEwMDNFMDAwMjQwMzAwMDYzQzAxMDgwMUFDMjU4MkQwM0MwMTA4MDEzMQorOjEwMDNGMDAwQUMyNDgyRDQzQzAxMDgwMUFDMjI4MkQ4M0MwMTA4MDEyMworOjEwMDQwMDAwQTAyMzgyREMwM0UwMDAwODAwMDAwMDAwMDNFMDAwMDhGNQorOjEwMDQxMDAwMjQwMjAwMDEzQzAyODAwMDMwODgwMEZGMzQ0NzAxODA0NAorOjEwMDQyMDAwM0MwNjgwMDA4Q0MzMDFCODA0NjBGRkZFMDAwMDAwMDBBMQorOjEwMDQzMDAwOENDNTAxMjgyNDE4RkY4MDNDMEQ4MDBBMjRBRjAxMDBFMAorOjEwMDQ0MDAwMDFGODcwMjQzMUVDMDA3RkFDQ0UwMDI0MDE4RDIwMjExNgorOjEwMDQ1MDAwQUNFNTAwMDA5NDhCMDBEQTM1MDk2MDAwMjQwODAwMDI0NgorOjEwMDQ2MDAwMzE2QUZGRkZBQ0VBMDAwNDI0MDIwMDAxQTRFOTAwMDg5RAorOjEwMDQ3MDAwQTBFODAwMEJBQ0UwMDAyNDNDMDcxMDAwQUNDNzAxQjhCQQorOjEwMDQ4MDAwQUY4NDAwMjgwM0UwMDAwOEFGODUwMDU4OEM5OTAwMDQ3MQorOjEwMDQ5MDAwOEY4RDAwMjgyNDA5RkZCRjAzMjVDMDIzQUM5ODAwMDREQQorOjEwMDRBMDAwOTFBRjAwQzQyNDAzRkZFRjMxRUUwMDdGQTFBRTAwQzQ4MgorOjEwMDRCMDAwOEM4QzAwMjA5MzhCMDAzNDhGODYwMDI4MzU4QTAwMDJCNAorOjEwMDRDMDAwQUY4QjAwNENBNzgwMDA0OEFDOEEwMDIwQTRDMDAwQUNEMQorOjEwMDREMDAwOTBDODAwQzQwMTA5MzgyNEEwQzcwMEM0OEY4NDAwMjgzNAorOjEwMDRFMDAwQUM4MDAwREM5MDg1MDBDNDAwQTMxMDI0MDNFMDAwMDg2OQorOjEwMDRGMDAwQTA4MjAwQzQzQzAyODAwMDM0NDUwMTgwM0MwNDgwMDA5RQorOjEwMDUwMDAwOEM4MzAxQjgwNDYwRkZGRThGODkwMDU4MjQwNzYwODM0NAorOjEwMDUxMDAwMjQwNjAwMDJBQ0E5MDAwMDhDODgwMTI0QUNBODAwMDRDOQorOjEwMDUyMDAwQTRBNzAwMDhBMEE2MDAwQjNDMDUxMDAwMDNFMDAwMDhFQgorOjEwMDUzMDAwQUM4NTAxQjg5Mzg4MDAzNDhGODkwMDRDOEY4MjAwMjhFNQorOjEwMDU0MDAwMzBDNjAwRkYwMTA5MzgyMzMwRTkwMEZGMDEyMjE4MjFERAorOjEwMDU1MDAwMzBBNTAwRkYyNDY4MDA3ODEwQzAwMDAyMDEyNDM4MjE3MworOjEwMDU2MDAwMDA4MDM4MjEzMEU0MDAwMzE0ODAwMDAzMzBBQTAwMDMyNworOjEwMDU3MDAwMTE0MDAwMEQzMTJCMDAwMzEwQTAwMDA5MDAwMDEwMjFENAorOjEwMDU4MDAwOTBFRDAwMDAyNDRFMDAwMTMxQzIwMEZGMDA0NTYwMkJCOQorOjEwMDU5MDAwQTEwRDAwMDAyNEU3MDAwMTE1ODBGRkY5MjUwODAwMDFFNgorOjEwMDVBMDAwMDNFMDAwMDgwMDAwMDAwMDE1NjBGRkYzMDAwMDAwMDBGOQorOjEwMDVCMDAwMTBBMEZGRkIwMDAwMTAyMThDRjgwMDAwMjQ1OTAwMDQ1QgorOjEwMDVDMDAwMzMyMjAwRkYwMDQ1NzgyQkFEMTgwMDAwMjRFNzAwMDQxQgorOjEwMDVEMDAwMTVFMEZGRjkyNTA4MDAwNDAzRTAwMDA4MDAwMDAwMDAxMgorOjEwMDVFMDAwOTM4NTAwMzQ5Mzg4MDA0NDhGODcwMDRDMDAwNDMyMDBDOAorOjEwMDVGMDAwMzEwMzAwN0YwMEU1MTAyQjMwQzQ3RjAwMTA0MDAwMEY1NgorOjEwMDYwMDAwMDA2NDI4MjU4Rjg0MDAyODNDMDk4MDAwOEM4QTAwREM0NworOjEwMDYxMDAwQUQyQTAwQTQzQzAzODAwMDAwQTM1ODI1QUM2QjAwQTBDOQorOjEwMDYyMDAwOEM2QzAwQTAwNTgwRkZGRTAwMDAwMDAwOEM2RDAwQUMwQgorOjEwMDYzMDAwQUM4RDAwREMwM0UwMDAwODhDNjIwMEE4MEEwMDE3RDYyRAorOjEwMDY0MDAwOEY4NDAwMjg5Mzg4MDA0NTNDMDI4MDAwMDA4MDUwMjE2MAorOjEwMDY1MDAwMzEwMzAwRkVBMzgzMDA0NTMwQUJGRkZGMzBDQzAwRkYyOQorOjEwMDY2MDAwMzBFN0ZGRkYzNDQ4MDE4MDNDMDk4MDAwOEQyNDAxQjg0OQorOjEwMDY3MDAwMDQ4MEZGRkU4RjhEMDA1ODI0MTgwMDE2QUQwRDAwMDA3OQorOjEwMDY4MDAwOEQyMjAxMjQ4RjhEMDAyOEFEMDIwMDA0OEQ1OTAwMjA5OQorOjEwMDY5MDAwQTUwNzAwMDgyNDAyMDFCNEExMTkwMDBBQTExODAwMEI0MworOjEwMDZBMDAwOTUyRjAxMjA4RDRFMDAwODhENDcwMDA0OTc4MzAwNDg0OAorOjEwMDZCMDAwOEQ1OTAwMjQwMUNGMzAyMTAwQzcyODIxMDBBMzIwMjMxOQorOjEwMDZDMDAwMjQxOEZGRkZBNTA0MDAwQ0E1MEIwMDBFQTUwMjAwMTBDNgorOjEwMDZEMDAwQTUwQzAwMTJBRDE5MDAxOEFEMTgwMDI0OTVBRjAwRDg3NAorOjEwMDZFMDAwM0MwQjEwMDAyNDA3RkZGNzMxRUVGRkZGQUQwRTAwMjg5MgorOjEwMDZGMDAwOERBQzAwNzRBRDBDMDAyQ0FEMkIwMUI4OEQ0NjAwMjBFNAorOjEwMDcwMDAwMDBDNzI4MjQwM0UwMDAwOEFENDUwMDIwOEY4ODAwMjg5QQorOjEwMDcxMDAwMDA4MDU4MjEzMEU3RkZGRjkxMDkwMEM2M0MwMjgwMDBBRAorOjEwMDcyMDAwMzBBNUZGRkYzMTI0MDBGRjAwMDQxQTAwMDA2NzUwMjVBOAorOjEwMDczMDAwMzBDNjAwRkYzNDQ3MDE4MDNDMDk4MDAwOEQyQzAxQjg5MQorOjEwMDc0MDAwMDU4MEZGRkU4RjgyMDA1ODI0MEYwMDE3QUNFMjAwMDBFNgorOjEwMDc1MDAwOEQzOTAxMjRBQ0Y5MDAwNDhENzgwMDIwQTRFQTAwMDg0QQorOjEwMDc2MDAwMjQxOTAxQjRBMEY4MDAwQUEwRUYwMDBCOTUyMzAxMjA4MgorOjEwMDc3MDAwOEQ2RTAwMDg4RDZEMDAwNDk3ODQwMDQ4MDFDMzUwMjFFMAorOjEwMDc4MDAwMDE0RDYwMjEwMTg0MTAyM0E0RTIwMDBDQTRFNTAwMEVCOQorOjEwMDc5MDAwQTRGOTAwMTBBNEU2MDAxMkFDRTAwMDE0OEQ3ODAwMjQ0NworOjEwMDdBMDAwMjQwREZGRkZBQ0Y4MDAxODhEMEYwMDZDQUNFRjAwMUM5RgorOjEwMDdCMDAwOEQwRTAwNjgzQzBGMTAwMEFDRUUwMDIwQUNFRDAwMjQ2NAorOjEwMDdDMDAwOTUwQTAwQUUyNDBERkZGNzMxNDZGRkZGQUNFNjAwMjg4NgorOjEwMDdEMDAwOTUwQzAwNzA5NTA0MDA3MjMxODM3RkZGMDAwM0NBMDBGRQorOjEwMDdFMDAwMzA4MkZGRkYwMzIyQzAyMUFDRjgwMDJDQUQyRjAxQjhFRQorOjEwMDdGMDAwOTUwRTAwNzI4RDZBMDAyMDAwQUUzMDIxMDE0RDI4MjQzNAorOjEwMDgwMDAwQTUwNjAwNzIwM0UwMDAwOEFENjUwMDIwM0MwMjgwMDBGMAorOjEwMDgxMDAwMzQ0NjAxODAzQzA1ODAwMDhDQTMwMUI4MDQ2MEZGRkVEMworOjEwMDgyMDAwMjQwOTAwMThBQ0M0MDAwMEEwQzkwMDBCOEY4ODAwMjg2MAorOjEwMDgzMDAwM0MwNDEwMDA5NTA3MDBBRUE0QzcwMDEwQUNDMDAwMzAwNworOjEwMDg0MDAwMDNFMDAwMDhBQ0E0MDFCODNDMDI4MDAwMzQ0NTAxODBGQworOjEwMDg1MDAwM0MwNDgwMDA4QzgzMDFCODA0NjBGRkZFOEY4QTAwMzA2NgorOjEwMDg2MDAwMjQwNjAwMTk5NTQ5MDAxQzMxMjhGRkZGMDAwODM5QzBGMworOjEwMDg3MDAwQUNBNzAwMDBBMEE2MDAwQjNDMDUxMDAwMDNFMDAwMDg5OAorOjEwMDg4MDAwQUM4NTAxQjg4Rjg3MDAzODAwODA0MDIxMzBDNDAwRkY1QworOjEwMDg5MDAwM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFOEY4OTAwNThERQorOjEwMDhBMDAwOTM4MzAwNTQzNDk5NjAwMEFDQTkwMDAwQTBBMzAwMDUxNAorOjEwMDhCMDAwOENFMjAwMTAyNDBGMDAwMjI0MDNGRkY3QTRBMjAwMDYxQworOjEwMDhDMDAwQTRCOTAwMDg4RDE4MDAyMEEwQjgwMDBBQTBBRjAwMEI0MgorOjEwMDhEMDAwOENFRTAwMDBBQ0FFMDAxMDhDRUQwMDA0QUNBRDAwMTQ0QQorOjEwMDhFMDAwOENFQzAwMUNBQ0FDMDAyNDhDRUIwMDIwQUNBQjAwMjhFMgorOjEwMDhGMDAwOENFQTAwMkMzQzA3MTAwMEFDQUEwMDJDOEQwOTAwMjRDNworOjEwMDkwMDAwQUNBOTAwMThBQ0M3MDFCODhEMDUwMDIwMDBBMzIwMjRCNQorOjEwMDkxMDAwMDNFMDAwMDhBRDA0MDAyMDkzODUwMDU0MjQwMzAwMDE4NworOjEwMDkyMDAwMjdCREZGRTgwMEEzMzAwNDJDQTIwMDIwQUZCMDAwMTBDOAorOjEwMDkzMDAwQUZCRjAwMTQwMEMwMTgyMTEwNDAwMDEzMjQxMEZGRkVBOAorOjEwMDk0MDAwM0MwNzA4MDA4Q0U3MzE5MDAwRTYxMDI0M0MwODgwMDA0QQorOjEwMDk1MDAwMzUwNTAxODAxNDQwMDAwNTI0MDYwMDg0OEY4OTAwMjg5NQorOjEwMDk2MDAwMjQwQTAwMDQyNDEwRkZGRkExMkEwMEVDMEUwMDE4NzJENAorOjEwMDk3MDAwMDAwMDAwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTA5MworOjEwMDk4MDAwMDNFMDAwMDgyN0JEMDAxODNDMDYwODAwOENDNjMxOTQxRgorOjEwMDk5MDAwMEEwMDE4QTQwMEMzMTAyNDhGODcwMDMwMjdCREZGRTA5MQorOjEwMDlBMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUM2MQorOjEwMDlCMDAwMzBEMDAwRkY5MEU2MDAwRDAwQTA4ODIxMDA4MDkwMjEzQgorOjEwMDlDMDAwMzBDNTAwN0ZBMEU1MDAwRDhGODUwMDI4OEUyMzAwMTgxQworOjEwMDlEMDAwOENBMjAwQzAxMDYyMDAyRTI0MEEwMDBFMEUwMDE4OTc5MAorOjEwMDlFMDAwQTM4QTAwNTQyNDA5RkZGRjEwNDkwMDIyMjQwNEZGRkZCQQorOjEwMDlGMDAwNTIwMDAwMjAwMDAwMjAyMThFMjYwMDAwM0MwQzAwMTAzOAorOjEwMEEwMDAwMDBDQzU4MjQxNTYwMDAzOTNDMEUwMDA4MDBDRTY4MjQ0NAorOjEwMEExMDAwNTVBMDAwM0YwMjQwMjAyMTNDMTgwMDAyMDBEODgwMjQ0RAorOjEwMEEyMDAwMTIwMDAwMUYzQzBBMDAwNDhGODcwMDMwOENFMjAwMTQ4MworOjEwMEEzMDAwOENFMzAwMTA4Q0U1MDAxNDAwNDNGODIzMDNFNUM4MkI3OQorOjEwMEE0MDAwMTMyMDAwMDUwMjQwMjAyMThFMjQwMDJDOENGMTAwMTA4MAorOjEwMEE1MDAwMTA5MTAwMzEwMjQwMjAyMTI0MDIwMDEyQTM4MjAwNTQ5MAorOjEwMEE2MDAwMEUwMDE4OTcyNDEyRkZGRjEwNTIwMDAyMjQwNEZGRkYwQgorOjEwMEE3MDAwMDAwMDIwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQxRQorOjEwMEE4MDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjA3NworOjEwMEE5MDAwOTBBODAwQzQzNTA0MDAyMDBBMDAxOENEQTBBNDAwQzQwQQorOjEwMEFBMDAwMDBDQTQ4MjQxNTIwMDAwQjhGOEIwMDMwOEY4RDAwMzAzQQorOjEwMEFCMDAwOERBQzAwMTAxNTgwMDAwQjAyNDAyMDIxOEUyRTAwMkNFMgorOjEwMEFDMDAwNTFDMEZGRUMwMDAwMjAyMTAyNDAyMDIxMEEwMDE4RTg1QworOjEwMEFEMDAwMjQwMjAwMTc4RDY2MDAxMDUwQzBGRkU2MDAwMDIwMjFBMAorOjEwMEFFMDAwMDI0MDIwMjEwQTAwMThFODI0MDIwMDExMDI0MDIwMjFCRgorOjEwMEFGMDAwMjQwMjAwMTUwRTAwMTg5N0EzODIwMDU0MjQwRkZGRkY1NAorOjEwMEIwMDAwMTA0RkZGREMyNDA0RkZGRjBBMDAxOEQ3OEUyNjAwMDBEOAorOjEwMEIxMDAwMEEwMDE5MEUyNDAyMDAxNDNDMDgwMDA0MDBDODM4MjRGRQorOjEwMEIyMDAwNTBFMEZGRDQwMDAwMjAyMTAyNDAyMDIxMEEwMDE4RThGNAorOjEwMEIzMDAwMjQwMjAwMTM4Rjg2MDAyODI3QkRGRkUwQUZCMTAwMTQwOAorOjEwMEI0MDAwQUZCRjAwMThBRkIwMDAxMDkwQzMwMEM0MzBBNTAwRkZDNQorOjEwMEI1MDAwMzA2MjAwMjAxMDQwMDAwODAwODA4ODIxOENDQjAwQzA0QgorOjEwMEI2MDAwMjQwOUZGREYyNTZBMDAwMUFDQ0EwMEMwOTBDODAwQzQ5OAorOjEwMEI3MDAwMDEwOTM4MjRBMEM3MDBDNDE0QTAwMDQwM0MwQzgwMDAyOAorOjEwMEI4MDAwOEY4NDAwMjg5MDg3MDBDNDI0MThGRkJGMjQwNkZGRUYzRAorOjEwMEI5MDAwMzBFMzAwN0ZBMDgzMDBDNDk3OUYwMDQ4OEY4MjAwNEMwMQorOjEwMEJBMDAwOEY4RDAwMjgwM0UyQzgyM0E3OTkwMDQ4QTVBMDAwQUNCOAorOjEwMEJCMDAwOTFBRjAwQzQwMUY4NzAyNEExQUUwMEM0OEY4QzAwMjg0RQorOjEwMEJDMDAwQTE4MDAwQzc4RjhBMDAyOEE1NDAwMDcyQUQ0MDAwRENEQworOjEwMEJEMDAwOTE0NTAwQzQwMEE2NTgyNEExNEIwMEM0OEY5MDAwMjQ2NgorOjEwMEJFMDAwOEY4NDAwNEM5Nzg2MDA0ODAyMDQyODIxMTBDMDAwMEYxMworOjEwMEJGMDAwQUY4NTAwMjRBMzgwMDA0NDNDMDc4MDAwOEUyQzAwMDhCMQorOjEwMEMwMDAwOTRFRDAxMjA4RTJCMDAwNDAxOEQ1MDIxMDE0QjgwMjE5OQorOjEwMEMxMDAwMDIwNjIwMjMzMDg2RkZGRjMwQzgwMDBGMzkwOTAwMDE4QgorOjEwMEMyMDAwMzEzMTAwMDExNjIwMDAwOUEzODgwMDQ0OTM4NjAwMzQ2NgorOjEwMEMzMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjBBNworOjEwMEM0MDAwQUY4NTAwNTAwM0UwMDAwOEFGODYwMDRDMDBDODcwMjM1OQorOjEwMEM1MDAwOEZCRjAwMTg5Mzg2MDAzNDhGQjEwMDE0OEZCMDAwMTAzRQorOjEwMEM2MDAwMzRFRjBDMDAwMTBGMjgyMTI3QkQwMDIwQUNFRTAwODREQQorOjEwMEM3MDAwQUY4NTAwNTAwM0UwMDAwOEFGODYwMDRDMzU5MDAxODAzRQorOjEwMEM4MDAwMDIwMDI4MjEwRTAwMTg3MjI0MDYwMDgyOEY4NDAwMjg5QQorOjEwMEM5MDAwOTA4NjAwQzQzMEM1MDA0MDUwQTBGRkJBQTM4MDAwNTQyNQorOjEwMENBMDAwOEY4NTAwMzgzQzA2ODAwMDhDQ0QwMUI4MDVBMEZGRkU4MgorOjEwMENCMDAwOEY4OTAwNTgyNDA4NjA4MjI0MDcwMDAyQUUwOTAwMDBEMgorOjEwMENDMDAwQTYwODAwMDhBMjA3MDAwQjhDQTMwMDA4M0MwRTEwMDAyOQorOjEwMENEMDAwQUUwMzAwMTA4Q0EyMDAwQ0FFMDIwMDE0OENCRjAwMTRGNgorOjEwMENFMDAwQUUxRjAwMTg4Q0I5MDAxOEFFMTkwMDI0OENCODAwMjQ2RgorOjEwMENGMDAwQUUxODAwMjg4Q0FGMDAyOEFFMEYwMDJDQUNDRTAxQjg4NworOjEwMEQwMDAwMEEwMDE5MzJBMzgwMDA1NDhGOEEwMDI4MjdCREZGRTAxMworOjEwMEQxMDAwQUZCMTAwMTRBRkIwMDAxMDhGODgwMDRDQUZCRjAwMTgwNworOjEwMEQyMDAwOTM4OTAwMkM5NTQyMDBBQzMwRDEwMEZGMDEwOTE4MkJBQgorOjEwMEQzMDAwMDA4MDgwMjEzMEFDMDBGRjMwNDdGRkZGMDAwMDU4MjFDOQorOjEwMEQ0MDAwMTQ2MDAwMDMzMTA2MDBGRjAxMjAzMDIxMDEwOTU4MjNGRgorOjEwMEQ1MDAwOTc4MzAwNDgwMDY4MjAyQjE0ODAwMDFCMDAwMDAwMDBDRgorOjEwMEQ2MDAwMTA2ODAwNDMyNDBBMDAwMTExOEEwMDQ4MzRFNzA4ODAxMworOjEwMEQ3MDAwMzE2NUZGRkYwRTAwMTgxNDAyMDAyMDIxMEUwMDE4NTRFOAorOjEwMEQ4MDAwOEY4NDAwNTg4Rjg0MDAyODk0OEQwMDcwMjVBQzAwMDE1QQorOjEwMEQ5MDAwQTQ4QzAwNzA5NDhCMDA3MDNDMDYwODAwOENDNjMxODhDRgorOjEwMERBMDAwMzE2NzdGRkYxMEU2MDA0RjAwMDAwMDAwMDIwMDIwMjFBNQorOjEwMERCMDAwMDIyMDI4MjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBCRgorOjEwMERDMDAwMEEwMDE5MUUyN0JEMDAyMDkxNDQwMEM0MjQwNkZGODA5QworOjEwMEREMDAwMDA4Njg4MjVBMTUxMDBDNDk3ODQwMDQ4MzA4OEZGRkYxMQorOjEwMERFMDAwMTEwMDAwMUM5Mzg5MDAyQzhGOEUwMDI4MjQxOUVGRkYxRQorOjEwMERGMDAwMDA4QkY4MjM5NUQ4MDBBQzAxNjg2ODJCMzNFOTAwRkYxRAorOjEwMEUwMDAwMDMxOTc4MjRBNUNGMDBBQzUxQTAwMDJBMDEwMDU4MjE3NQorOjEwMEUxMDAwOEUwNTAwMjAyNDA4RkZGQjI0MDMwMDAxMDBBODEwMjRGNQorOjEwMEUyMDAwQUUwMjAwMjAxMTgzMDAyNTM0RTc4MDAwMDIwMDIwMjE1QgorOjEwMEUzMDAwMzE2NUZGRkYwRTAwMTgxNDAxMjAzMDIxOTc4QjAwNDgwOAorOjEwMEU0MDAwOEY4NzAwNENBNzgwMDA0ODAwRUI4MDIzQUY5MDAwNENCOAorOjEwMEU1MDAwOTM4OTAwMkM4RjhDMDAyODhGQkYwMDE4OEZCMTAwMTQ0RAorOjEwMEU2MDAwOEZCMDAwMTAyN0JEMDAyMDAzRTAwMDA4QTE4OTAwQzc1MworOjEwMEU3MDAwOEUwODAwMjAyNDA5RkZGQjM0RTc4MDAwMDEwOTI4MjRBNAorOjEwMEU4MDAwQUUwNTAwMjAxNThBRkZCQTM0RTcwODgwMDIwMDIwMjE1MQorOjEwMEU5MDAwMEUwMDE3RTIzMTY1RkZGRjAyMDAyMDIxMDIyMDI4MjEwOQorOjEwMEVBMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDE5MUVGOAorOjEwMEVCMDAwMjdCRDAwMjAwQTAwMTlENTAwMDA0ODIxMDIwMDIwMjE4QQorOjEwMEVDMDAwMzE2NUZGRkYwRTAwMTdFMjAxMjAzMDIxOTc4QjAwNDhBQgorOjEwMEVEMDAwOEY4NzAwNENBNzgwMDA0ODAwRUI4MDIzMEEwMDE5RTVBQgorOjEwMEVFMDAwQUY5MDAwNEM5NDg5MDA3MDI0MEE4MDAwMDEyQTQwMjRBRAorOjEwMEVGMDAwQTQ4ODAwNzA5MDg1MDA3MDkwOTkwMDcwMzBBMjAwRkY2NworOjEwMEYwMDAwMDAwMjE5QzIwMDAzRjgyNzAwMUZDMUMwMzMyRjAwN0Y2MQorOjEwMEYxMDAwMDFGODcwMjVBMDhFMDA3MDBBMDAxOUJEMDIwMDIwMjE4MgorOjEwMEYyMDAwOEY4ODAwMjgyNDAzMDAwMTkxMEEwMDc4OTEwNTAwQzdFQQorOjEwMEYzMDAwMjUwOTAwNzgzMTQ3MDAzRjI0RTZGRkUwMDBDMzE4MDQ4QworOjEwMEY0MDAwMkNDMjAwMjAzMDY3MDAxOUEzODUwMDJDMTA0MDAwMUEyNQorOjEwMEY1MDAwQUY4OTAwMzgzQzBBODAwMDM1NEIwMDAyMjQwNTAwMDFBRgorOjEwMEY2MDAwMjQwNjAwMDExNEUwMDAxNjAwNkIxMDI0MDAwMDI4MjE2NAorOjEwMEY3MDAwMTQ0MDAwMEYzMDYzMDAyMDEwNjAwMDBGMjQwNTAwMDFCMgorOjEwMEY4MDAwOEQwNjAwNzQ4RDE5MDA3NDI0MDNGRjgwMDBDMzEwMjRBMworOjEwMEY5MDAwMDAwMjc5NDAzMzM4MDA3RjAxRjg2ODI1M0MwRTEwMDBDQworOjEwMEZBMDAwMDFBRTYwMjVBRDRDMDgzMDkxMjgwMDAxMzEwNjAwMDFFQQorOjEwMEZCMDAwMEEwMDE5OTMwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDA5MAorOjEwMEZDMDAwOEQwRjAwNzQ4RDBEMDA3NDI0MThGRjgwMDFGODcwMjRCQgorOjEwMEZEMDAwMDAwRTQxNDAzMUFDMDA3RjAxMEM1MDI1M0MwQjEwMDA0RAorOjEwMEZFMDAwMDE0QjM4MjUzQzA5ODAwMDBBMDAxOTkzQUQyNzA4MzBEMQorOjEwMEZGMDAwMjdCREZGRDhBRkIwMDAxMDhGOTAwMDM4QUZCNDAwMjBFRAorOjEwMTAwMDAwQUZCMTAwMTRBRkJGMDAyNEFGQjMwMDFDQUZCMjAwMThFMworOjEwMTAxMDAwOEUwNTAwMTAzQzAyMDgwMDhDNDIzMUIwOEY4NjAwM0NFNworOjEwMTAyMDAwMzBBNzNGRkYwMEUyMTgyQjhDRDIwMDE0MDA4MDg4MjFFQgorOjEwMTAzMDAwOENEMzAwMjAxMDYwMDAwNzAwMDBBMDIxOTBDQjAwMEQ5MQorOjEwMTA0MDAwMjQwQUZGODAwMTRCNDgyNDMxMjgwMEZGMTUwMDAwMENDMgorOjEwMTA1MDAwMDAwNTYzODIwMjIwMjAyMTI0MTEwMDBEQTM5MTAwNTQ3OQorOjEwMTA2MDAwOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMThGNAorOjEwMTA3MDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAxODk3MjdCRDAwMjgwOAorOjEwMTA4MDAwMzE4NTAwMDM1NEEwRkZGNDAyMjAyMDIxOTRDRjAwMUNERQorOjEwMTA5MDAwOEY4RTAwMjg4RTA3MDAyOEE1Q0YwMEQ4OENDRDAwMTA5OQorOjEwMTBBMDAwMDI0RDMwMjMxMEU2MDA1QzI0MDIwMDFGMEUwMDE4OTc0QQorOjEwMTBCMDAwQTM4MjAwNTQyNDFGRkZGRjEwNUYwMDRFMjQwNEZGRkY5MworOjEwMTBDMDAwOEY4MzAwNDA4Rjg4MDAzMDAyNjM5ODIxOEQwOTAwMTBDMworOjEwMTBEMDAwMDEyMzEwMjM4RjgzMDAyMEFEMDIwMDEwQUQxMzAwMjBFOAorOjEwMTBFMDAwOEM2NzAwNzQwMEYzMjAyQjE0ODAwMDYyMDIyMDIwMjEwMgorOjEwMTBGMDAwOEY4NjAwM0M4RTBDMDAyNDhDQzUwMDI0MTE4NTAwMDdDRgorOjEwMTEwMDAwMDIyMDIwMjEyNDBFMDAxQzBFMDAxODk3QTM4RTAwNTRFQworOjEwMTExMDAwMjQwREZGRkYxMDREMDAzNzI0MDRGRkZGOEY4NDAwMzBBMworOjEwMTEyMDAwOEM5ODAwMjQyNzBGMDAwMUFDOEYwMDI0MTI3MjAwNDQxOQorOjEwMTEzMDAwOEY5OTAwMjA4RjMyMDA3NDEyNTMwMDQxM0MwQTAwODBDNgorOjEwMTE0MDAwOEUwOTAwMDAwMTJBMTAyNDE0NDAwMDNBMDAwMDAwMDAxQgorOjEwMTE1MDAwOEUwNDAwMTQyNDEyRkZGRjEwOTIwMDA2MjQwQjAwMUJDMworOjEwMTE2MDAwMDIyMDIwMjEwRTAwMTg5N0EzOEIwMDU0MTA1MjAwMjE1QQorOjEwMTE3MDAwMjQwNEZGRkY4RTAzMDAwMDNDMEMwMDAxMDA2QzI4MjRCNworOjEwMTE4MDAwMTBBMDAwMTMzQzA2MDA4MDAwNjZBMDI0MTY4MDAwMDkxMQorOjEwMTE5MDAwMDIwMDI4MjEwMjIwMjAyMTI0MEUwMDFBMEUwMDE4OTc5OAorOjEwMTFBMDAwQTM4RTAwNTQyNDBERkZGRjEwNEQwMDEyMjQwNEZGRkZGNgorOjEwMTFCMDAwMDIwMDI4MjEwMjIwMjAyMTBFMDAxOEI3MjQwNjAwMDE3OQorOjEwMTFDMDAwMjQxMEZGRkYyNDA0RkZGRjEwNTAwMDBBMjQxNDAwMDEyNAorOjEwMTFEMDAwOEY4RjAwMzAwMjIwMjAyMTAyODAzMDIxOTVGMjAwMzREMAorOjEwMTFFMDAwMjQwNTAwMDEyNjU4MDAwMTBFMDAxOTkzQTVGODAwMzRDQgorOjEwMTFGMDAwMDAwMDIwMjE4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM3QgorOjEwMTIwMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEzMQorOjEwMTIxMDAwMDNFMDAwMDgyN0JEMDAyODhGODMwMDQwMDBFM0M4MjFCOQorOjEwMTIyMDAwMDI1OUMwMkIxMzAwRkZBODhGODgwMDMwMEEwMDFBN0NENworOjEwMTIzMDAwMjQwMjAwMThBQzgwMDAyMDBBMDAxQUE2OEUwNDAwMTRCNAorOjEwMTI0MDAwOEUxRjAwMDAzQzA3MDA4MDAzRTc5ODI0MTY2MEZGRjkxQQorOjEwMTI1MDAwMjQwODAwMUEwMjIwMjAyMTBFMDAxODk3QTM4ODAwNTRBOQorOjEwMTI2MDAwMjQwM0ZGRkYxNDQzRkZCQTI0MDRGRkZGMEEwMDFBQ0YzMAorOjEwMTI3MDAwOEZCRjAwMjQyNDBCMDAxRDBFMDAxODk3QTM4QjAwNTQ3MQorOjEwMTI4MDAwMjQwQUZGRkYxNDRBRkY5QTI0MDRGRkZGMEEwMDFBQ0YyMgorOjEwMTI5MDAwOEZCRjAwMjQ4Rjg1MDAyODI3QkRGRkQ4QUZCMzAwMUM2NworOjEwMTJBMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjA1NAorOjEwMTJCMDAwOTBBNzAwQzQ4RjkwMDAzODI0MTJGRkZGMzRFMjAwNDA1MgorOjEwMTJDMDAwOTIwNjAwMDBBMEEyMDBDNDhFMDMwMDEwMDA4MDk4MjFBNgorOjEwMTJEMDAwMTA3MjAwMDYzMEQxMDAzRjI0MDgwMDBEMEUwMDE4OTc1MAorOjEwMTJFMDAwQTM4ODAwNTQxMDUyMDAyNjI0MDZGRkZGOEY4QTAwMjg4RQorOjEwMTJGMDAwOEUwOTAwMTg4RDQ0MDBDMDExMjQwMDA3MjQwQzAwMEUzNAorOjEwMTMwMDAwMDI2MDIwMjEwRTAwMTg5N0EzOEMwMDU0MjQwQkZGRkZDRAorOjEwMTMxMDAwMTA0QjAwMUIyNDA2RkZGRjI0MDQwMDIwMTIyNDAwMDRBRAorOjEwMTMyMDAwOEY4RDAwMjg5MUFGMDBDNDM1RUUwMDIwQTFBRTAwQzQxRgorOjEwMTMzMDAwOEY4NTAwNDAxMEEwMDAxQTAwMDAwMDAwMTIyNDAwNEIwRQorOjEwMTM0MDAwOEY5ODAwMjg4RjkyRkVFQzI0MDZGRkZEOTcxMDAwNzAwNgorOjEwMTM1MDAwOTY1MTAwMEExMjMwMDAwQjhGQkYwMDIwM0MxRjA4MDA3RQorOjEwMTM2MDAwOEZGRjMxOEMwM0U1QzgyQjE3MjAwMDFFMDI2MDIwMjE1RgorOjEwMTM3MDAwMDAwMDI4MjEwRTAwMTk5MzI0MDYwMDAxMDAwMDMwMjFFRQorOjEwMTM4MDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRFNAorOjEwMTM5MDAwOEZCMDAwMTAwMEMwMTAyMTAzRTAwMDA4MjdCRDAwMjgxNgorOjEwMTNBMDAwNTIyNDAwMkE4RTAzMDAxNDhGODQwMDI4OTQ4OTAwNzAzMAorOjEwMTNCMDAwMjUyODAwMDFBNDg4MDA3MDk0ODcwMDcwM0MwNTA4MDA2RgorOjEwMTNDMDAwOENBNTMxODgzMEUyN0ZGRjEwNDUwMDBFMDAwMDAwMDA0MAorOjEwMTNEMDAwMDI2MDIwMjEwRTAwMTkxRTI0MDUwMDAxMEEwMDFCMzFBNQorOjEwMTNFMDAwMDAwMDMwMjEyNDAyMDAyREEzODIwMDU0MEUwMDE4OTcyMworOjEwMTNGMDAwMjQxM0ZGRkYxNDUzRkZFMTI0MDZGRkZGMEEwMDFCMzJGMgorOjEwMTQwMDAwOEZCRjAwMjA5NDk4MDA3MDI0MTk4MDAwMjQwNTAwMDFFQgorOjEwMTQxMDAwMDMxOTkwMjRBNDkyMDA3MDkwOTEwMDcwOTA4RDAwNzAzOAorOjEwMTQyMDAwMzIzMDAwRkYwMDEwNzlDMjAwMEY3MDI3MDAwRTYxQzAzQgorOjEwMTQzMDAwMzFBQjAwN0YwMTZDNTAyNUEwOEEwMDcwMEUwMDE5MUU5MAorOjEwMTQ0MDAwMDI2MDIwMjEwQTAwMUIzMTAwMDAzMDIxMjQwNkZGRkYyQQorOjEwMTQ1MDAwMTQ2NkZGRDY4Rjg0MDAyODAyNjAyMDIxMEUwMDE5MUUxQQorOjEwMTQ2MDAwMjQwNTAwMDEwQTAwMUIzMTAwMDAzMDIxMDI2MDIwMjEwOAorOjEwMTQ3MDAwMEEwMDFCNEIyNDAyMDAwQThGODgwMDI4MjdCREZGRThDMgorOjEwMTQ4MDAwQUZCMDAwMTBBRkJGMDAxNDkxMEEwMEM0OEY4NzAwMzhCRQorOjEwMTQ5MDAwMDA4MDgwMjEzNTQ5MDA0MDhDRTYwMDEwQTEwOTAwQzQ3RAorOjEwMTRBMDAwM0MwMjA4MDA4QzQyMzFCMDMwQzUzRkZGMDBBMjE4MkIyRgorOjEwMTRCMDAwMTA2MDAwMDc4Rjg1MDAzQzI0MERGRjgwOTBBRTAwMEQ2QQorOjEwMTRDMDAwMDFBRTYwMjQzMThCMDBGRjE1NjAwMDA4MDAwNkMzODI2NgorOjEwMTREMDAwMDIwMDIwMjEyNDAzMDAwRDhGQkYwMDE0OEZCMDAwMTBFNAorOjEwMTRFMDAwMjdCRDAwMTgwQTAwMTg5N0EzODMwMDU0MzMwNjAwMDM5MQorOjEwMTRGMDAwMjQwRjAwMDI1NENGRkZGNzAyMDAyMDIxOTRBMjAwMUMwOQorOjEwMTUwMDAwOEY4NTAwMjgyNDE5MDAyM0E0QTIwMEQ4OENFODAwMDBBRAorOjEwMTUxMDAwMDAwODFFMDIzMDdGMDAzRjEzRjkwMDM1M0MwQTAwODNBQgorOjEwMTUyMDAwOENFODAwMTg4Q0E2MDBDMDExMDYwMDA4MDAwMDAwMDAxRQorOjEwMTUzMDAwMjQwNTAwMEUwRTAwMTg5N0EzODUwMDU0MjQwN0ZGRkYxMgorOjEwMTU0MDAwMTA0NzAwMTgyNDA0RkZGRjhGODUwMDI4OTBBOTAwQzRDRAorOjEwMTU1MDAwMzUyNDAwMjBBMEE0MDBDNDhGOEMwMDMwOTE4RTAwMEQ5MworOjEwMTU2MDAwMzFDRDAwN0ZBMThEMDAwRDhGODMwMDQwMTA2MDAwMUNFNQorOjEwMTU3MDAwMDIwMDIwMjE4Rjg0MDAzQzhDOTgwMDEwMDMwMzc4MkJGQworOjEwMTU4MDAwMTFFMDAwMEQyNDE5MDAxODAyMDAyMDIxQTM5OTAwNTQzNQorOjEwMTU5MDAwMEUwMDE4OTcyNDEwRkZGRjEwNTAwMDAyMjQwNEZGRkZENAorOjEwMTVBMDAwMDAwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMDA4MDEwMjE5OAorOjEwMTVCMDAwMDNFMDAwMDgyN0JEMDAxODhDODYwMDEwOEY5RjAwMzBDNAorOjEwMTVDMDAwMDIwMDIwMjEwMEMzMTAyM0FGRTIwMDEwMjQwNTAwMDExNworOjEwMTVEMDAwMEUwMDE5OTMyNDA2MDAwMTBBMDAxQkJBMDAwMDIwMjEwNgorOjEwMTVFMDAwMEUwMDE5MUUyNDA1MDAwMTBBMDAxQkJBMDAwMDIwMjE2QworOjEwMTVGMDAwMDEwQTU4MjQxNTZBRkZEOThGOEMwMDMwQTBBNjAwRUM5MAorOjEwMTYwMDAwMEEwMDFCQTdBMzg2MDA0NjI3QkRGRkQ4QUZCMDAwMTA3NQorOjEwMTYxMDAwOEY5MDAwMzhBRkIyMDAxOEFGQkYwMDIwQUZCMzAwMUNFRQorOjEwMTYyMDAwQUZCMTAwMTQ4RTExMDAxMDNDMDMwODAwOEM2MzMxQjA4MAorOjEwMTYzMDAwMzIyNTNGRkYwMEEzMTAyQjEwNDAwMDA4MDA4MDkwMjFBRQorOjEwMTY0MDAwOEY4NjAwM0MyNDA5RkY4MDkwQ0EwMDBEMDEyQTQwMjRBNworOjEwMTY1MDAwMzEwNzAwRkYxNEUwMDAwQjAwMTE2QjgyMDI0MDIwMjFEMworOjEwMTY2MDAwMjQxMjAwMERBMzkyMDA1NDhGQkYwMDIwOEZCMzAwMUNFMgorOjEwMTY3MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDE4OTdCNQorOjEwMTY4MDAwMjdCRDAwMjgzMUFDMDAwMzI0MEIwMDAxNTU4QkZGRjQ2QgorOjEwMTY5MDAwMDI0MDIwMjE5MENGMDAwRDMxRUUwMDA4MTFDMDAwNjAwMworOjEwMTZBMDAwOEY5MzAwNDAxNjYwMDAwOTI0MDIwMDI3OEUxOTAwMEM1OQorOjEwMTZCMDAwOENEODAwMjAxNzM4MDAwNTI0MDIwMDIwOEUwMjAwMDg3NAorOjEwMTZDMDAwOENERjAwMjQxMDVGMDA0MDI0MDIwMDIwMEUwMDE4OTdEOQorOjEwMTZEMDAwQTM4MjAwNTQyNDA2RkZGRjEwNDYwMDMzMjQwNEZGRkZCQQorOjEwMTZFMDAwOEY5OTAwMzAyNDBBRkZGNzNDMTM4MDBFOTMyOTAwMEREOAorOjEwMTZGMDAwMjQwNEZGODAzQzBEODAwMDAxMkFGODI0QTMzRjAwMEQ0NAorOjEwMTcwMDAwOEY5OTAwMjAzQzA4MDgwMDhEMDgzMUFDOEY4MzAwNTg2OQorOjEwMTcxMDAwOTcyNzAwNzg4RjlGMDAzMDAxMDMxMDIxMzBFNTdGRkY2RAorOjEwMTcyMDAwMDAwNTMwNDAwMDQ2NzgyMTMxRjgwMDdGMDMxMzYwMjEyNgorOjEwMTczMDAwMDFFNDcwMjRBREFFMDAyQ0E1OTEwMDAwOEZFQjAwMjhEMQorOjEwMTc0MDAwMjU2QTAwMDFBRkVBMDAyODhGRTMwMDJDOEUwOTAwMkNFNworOjEwMTc1MDAwMDA2OTQwMjFBRkU4MDAyQzhFMDcwMDJDQUZFNzAwMzA3NQorOjEwMTc2MDAwOEUwNTAwMTRBRkU1MDAzNDk3RTYwMDNBMjRDMjAwMDE2QworOjEwMTc3MDAwQTdFMjAwM0E5NzMzMDA3ODNDMTAwODAwOEUxMDMxQjA5MQorOjEwMTc4MDAwMjY2MzAwMDEzMDcxN0ZGRjEyMzAwMDI3MDA2MDMwMjE5NgorOjEwMTc5MDAwOEY4RjAwMjAwMjQwMjAyMTI0MDUwMDAxMEUwMDE5MUUxOQorOjEwMTdBMDAwQTVFNjAwNzgwMDAwMjAyMThGQkYwMDIwOEZCMzAwMUMyOQorOjEwMTdCMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjE3QworOjEwMTdDMDAwMDNFMDAwMDgyN0JEMDAyODhFMDUwMDE0MjQxM0ZGRkY0NgorOjEwMTdEMDAwMTBCMzAwMUQ4RjgzMDAyODhFMDgwMDE4OEM2NzAwQzA4RQorOjEwMTdFMDAwMTUwNzAwMDkyNDAyMDAwRThFMEEwMDI0OENDOTAwMjg2NworOjEwMTdGMDAwMTU0OTAwMDUyNDAyMDAyMThFMDcwMDI4OENDQjAwMkNGRgorOjEwMTgwMDAwMTBFQjAwMTMyNDAyMDAxRjBFMDAxODk3QTM4MjAwNTQ0RgorOjEwMTgxMDAwMTQ1M0ZGQjMyNDA0RkZGRjBBMDAxQzNDOEZCRjAwMjBCOQorOjEwMTgyMDAwMEEwMDFDMDQyNDAyMDAyNDI0MEU4MDAwMDA2RTY4MjQ5OAorOjEwMTgzMDAwMzFBQ0ZGRkYwMDBDNUJDMjMxNzEwMEZGMDAxMTgwMjc0QgorOjEwMTg0MDAwMEEwMDFDMzUwMDEwMzNDMDBBMDAxQzUzMjQwMjAwMjU3NgorOjEwMTg1MDAwOEUwNTAwMkMxMEEwRkZFQzI0MDIwMDIzOEY4RTAwMjBBOAorOjEwMTg2MDAwOERDRDAwNzQwMUE1NjAyQjE1ODBGRkU3MjQwMjAwMjZCMgorOjEwMTg3MDAwOENDRjAwMTQwMEE3QzAyMTAxRjgyMDJCMTA4MEZGOTkwNQorOjEwMTg4MDAwOEY5OTAwMzAwMjQwMjAyMTBBMDAxQzUzMjQwMjAwMjJCQworOjEwMTg5MDAwMjdCREZGRTBBRkIwMDAxMDhGOTAwMDM4QUZCMTAwMTQ0QgorOjEwMThBMDAwQUZCRjAwMTg4RTA1MDAxMDNDMDMwODAwOEM2MzMxQjBGOAorOjEwMThCMDAwMDA4MDg4MjEzMEE0M0ZGRjAwODMxMDJCMTA0MDAwMDdEOAorOjEwMThDMDAwOEY4NjAwM0MyNDA5RkY4MDkwQ0EwMDBEMDEyQTQwMjQyNQorOjEwMThEMDAwMzEwNzAwRkYxNEUwMDAwOThGOEIwMDQwMjQxMDAwMEQzOQorOjEwMThFMDAwMDIyMDIwMjFBMzkwMDA1NDhGQkYwMDE4OEZCMTAwMTQ1NAorOjEwMThGMDAwOEZCMDAwMTAwQTAwMTg5NzI3QkQwMDIwMTE2MDAwMDg2MworOjEwMTkwMDAwMDAwNUMzODI4RjhGMDAyODhGOEVGRUVDMjQwN0ZGRkQxOQorOjEwMTkxMDAwOTVFQzAwNzA5NUNEMDAwQTExQUMwMDM4OEZCRjAwMTgwRgorOjEwMTkyMDAwMzMwNTAwMDMxNEEwMDAxMDAwMDAwMDAwOTIxOTAwMDIwQgorOjEwMTkzMDAwMTMyMDAwNDEwMDAwMDAwMDhFMDYwMDI0NTBDMDAwMEY1QworOjEwMTk0MDAwOTIwNDAwMDMwMjIwMjAyMTI0MDIwMDBGMEUwMDE4OTdBOQorOjEwMTk1MDAwQTM4MjAwNTQyNDA4RkZGRjE0NDgwMDA3MjQwN0ZGRkY1OAorOjEwMTk2MDAwMEEwMDFDRDA4RkJGMDAxODkwQzMwMDBEMzA2NDAwMDgxRgorOjEwMTk3MDAwMTA4MDAwMzcwMjIwMjAyMTkyMDQwMDAzMjQwNzAwMDI3NworOjEwMTk4MDAwMzA4OTAwRkYxNTI3MDAwNTMwOEYwMEZGOEY4QTAwNDA0NworOjEwMTk5MDAwMTE0MDAwMzEyNDBDMDAyQzMwOEYwMEZGMzlFNTAwMTA3RAorOjEwMTlBMDAwMkNBRDAwMDEyREVFMDAwMTAyMDAyODIxMDFDRDMwMjVEMworOjEwMTlCMDAwMEUwMDE4QjcwMjIwMjAyMTI0MTBGRkZGMTA1MDAwMEU0NworOjEwMTlDMDAwMjQwN0ZGRkY4RjgzMDA0MDEwNjAwMDE3MDIyMDIwMjFCMgorOjEwMTlEMDAwM0MxOTA4MDA4RjM5MzE4QzAzMjNDMDJCNTcwMDAwMENCMQorOjEwMTlFMDAwMjQxMTAwMkQwMjIwMjAyMTAwMDAyODIxMEUwMDE5OTMyRgorOjEwMTlGMDAwMjQwNjAwMDEwMDAwMzgyMThGQkYwMDE4OEZCMTAwMTRBOQorOjEwMUEwMDAwOEZCMDAwMTAwMEUwMTAyMTAzRTAwMDA4MjdCRDAwMjA4NworOjEwMUExMDAwMEUwMDE4OTdBMzkxMDA1NDE0NTBGRkY2MjQwN0ZGRkZGRgorOjEwMUEyMDAwMEEwMDFDRDA4RkJGMDAxODBFMDAxOTFFMjQwNTAwMDFFQgorOjEwMUEzMDAwMEEwMDFDQ0YwMDAwMzgyMThDREYwMDI0OEUwMjAwMjQxNQorOjEwMUE0MDAwNTQ1RkZGQzEwMjIwMjAyMTBBMDAxQ0IwOTIwNDAwMDM1MQorOjEwMUE1MDAwMEEwMDFDQTQyNDAyMDAxMDAyMjAyMDIxMEUwMDE4OTc2NgorOjEwMUE2MDAwQTM4QzAwNTQyNDBCRkZGRjEwNEJGRkUzMjQwN0ZGRkY2MAorOjEwMUE3MDAwMEEwMDFDQjc5MjA0MDAwMzMwQTUwMEZGMjQwNjAwMDFGMQorOjEwMUE4MDAwMjRBOTAwMDEwMEM5MTAyQjEwNDAwMDBDMDAwMDQwMjFDNworOjEwMUE5MDAwMjQwQTAwMDEwMEE2MTgyMzMwOEIwMDAxMjRDNjAwMDE4RgorOjEwMUFBMDAwMDA2QTM4MDQwMDA0MjA0MjExNjAwMDAyMDBDOTE4MkJBQgorOjEwMUFCMDAwMDEwNzQwMjUxNDYwRkZGODAwQTYxODIzMDNFMDAwMDg4MgorOjEwMUFDMDAwMDEwMDEwMjEyN0JERkZEOEFGQjAwMDE4OEY5MDAwMzg1QgorOjEwMUFEMDAwQUZCMTAwMUNBRkJGMDAyMDI0MDNGRkZGMjQxMTAwMkY3MworOjEwMUFFMDAwQUZBMzAwMTA5MjA2MDAwMDI0MDUwMDA4MjYxMDAwMDE5NAorOjEwMUFGMDAwMDA2NjIwMjYwRTAwMUNFRjMwODQwMEZGMDAwMjFFMDA0RQorOjEwMUIwMDAwM0MwMjFFREMzNDQ2NkY0MTBBMDAxRDE3MDAwMDEwMjEwNAorOjEwMUIxMDAwMTBBMDAwMDkwMDgwMTgyMTI0NDUwMDAxMzBBMkZGRkYxOQorOjEwMUIyMDAwMkM0NTAwMDgwNDYxRkZGQTAwMDMyMDQwMDA4NjIwMjZBRgorOjEwMUIzMDAwMTRBMEZGRjkwMDgwMTgyMTBFMDAxQ0VGMjQwNTAwMjBERQorOjEwMUI0MDAwOEZBMzAwMTAyNjI5RkZGRjMxMzEwMEZGMDAwMzQyMDI1RQorOjEwMUI1MDAwMjQwNzAwRkYxNjI3RkZFMjAxMDIxODI2MDAwMzUwMjc4MgorOjEwMUI2MDAwQUZBQTAwMTRBRkFBMDAxMDAwMDAzMDIxMjdBODAwMTA2RgorOjEwMUI3MDAwMjdBNzAwMTQwMEU2NzgyMzkxRUQwMDAzMjRDRTAwMDE4RQorOjEwMUI4MDAwMDBDODYwMjEzMUM2MDBGRjJDQ0IwMDA0MTU2MEZGRjlBRQorOjEwMUI5MDAwQTE4RDAwMDA4RkEyMDAxMDhGQkYwMDIwOEZCMTAwMUMwQworOjEwMUJBMDAwOEZCMDAwMTgwM0UwMDAwODI3QkQwMDI4OTM4MzAwMzQ5RAorOjEwMUJCMDAwMjdCREZGRTAyNDAyMDAzNEFGQjEwMDE0QUZCMDAwMTAyNQorOjEwMUJDMDAwQUZCRjAwMUNBRkIyMDAxODAwODA4ODIxMTA2MjAwNjIxNQorOjEwMUJEMDAwMDBBMDgwMjE5MjA0MDAwNDE0ODAwMDQ1OEY4ODAwMjgxMgorOjEwMUJFMDAwQTM4MDAwMkM4RTA1MDAwNDhEMDYwMEM4M0MwNzAwRkY3MgorOjEwMUJGMDAwMzRFM0ZGRkYwMEEzMjgyNDAwQzUxMDJCMTQ0MDAwNEQ0MAorOjEwMUMwMDAwQUY4NTAwNDA5NzhBMDA0ODhGODcwMDRDMDE0NzEwMjMxQQorOjEwMUMxMDAwMTBBMDAwMzJBNzgyMDA0ODhGOTgwMDIwMzA0Q0ZGRkZCMAorOjEwMUMyMDAwOTMxMjAwN0MwMDEyNzg4MjMxRjEwMDAxMDAxMTcwODA2MworOjEwMUMzMDAwMDFDNTY4MjEwMThENTgyQjExNjAwMDYxOEY4NjAwMjgzNQorOjEwMUM0MDAwOEY4OTAwMjQ4Rjg0MDA1MDEwODkwMDVFM0MwMjNGMDE4MAorOjEwMUM1MDAwOEUxRjAwMDAzQzEwMjUwMDAzRTJDODI0MTczMDAwN0FENAorOjEwMUM2MDAwOEY4NDAwMzg4Rjg3MDAzODhGODYwMDI4OENFMzAwMDAyRgorOjEwMUM3MDAwQUNDMzAwNzg4Q0U1MDAxMEFDQzUwMDg4OEY4NzAwNENBMQorOjEwMUM4MDAwOEY4NTAwNDA5MzhEMDAyQzMwQUUwMDAzMDAwRTQwMjM2MgorOjEwMUM5MDAwMzEwQTAwMDMwMTRENDAyMUEzODgwMDJDOTRDQjAwQUNGNQorOjEwMUNBMDAwMDEyNzYwMjFBRjhDMDAyNDM1NjkxMDAwQTRDOTAwQUM2NQorOjEwMUNCMDAwMTYyMDAwNTEwMTQ1MjAyMUFGODQwMDRDMDAwMDIwMjE1NgorOjEwMUNDMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBBRQorOjEwMUNEMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwOEY4NDAwMjQyRAorOjEwMUNFMDAwQUY4MDAwNEMwMDg3MzAyMTBBMDAxRDgwQUY4NjAwMjRBMQorOjEwMUNGMDAwMjQxRjAwMENBMzlGMDA1NDBFMDAxODk3MDIyMDIwMjFERgorOjEwMUQwMDAwMjQxOUZGRkYxMDU5RkZFRTI0MDRGRkZGOEY4ODAwMjhERAorOjEwMUQxMDAwQTM4MDAwMkM4RTA1MDAwNDhEMDYwMEM4M0MwNzAwRkY0MAorOjEwMUQyMDAwMzRFM0ZGRkYwMEEzMjgyNDAwQzUxMDJCMTA0MEZGQjVBQgorOjEwMUQzMDAwQUY4NTAwNDAwMjIwMjAyMTI0MDkwMDE5QTM4OTAwNTQwNgorOjEwMUQ0MDAwMEUwMDE4OTcyNDExRkZGRjEwNTFGRkREMjQwNEZGRkY0MAorOjEwMUQ1MDAwMEEwMDFENTI4Rjg1MDA0MDhGODQwMDI4OEY4NzAwMzgyRAorOjEwMUQ2MDAwOENGMjAwMzA5MDg2MDBDNDMwQzUwMDEwMTRBMDAwMTAyMgorOjEwMUQ3MDAwOEY4MzAwNEMyQzY4MDAwNTE1MDAwMDI4MDAwMDAwMDAyRgorOjEwMUQ4MDAwOTA4QTAwQzQyNDZCRkZGQzMxNDkwMDEwMTUyMDAwMDgyNAorOjEwMUQ5MDAwMzE2NDAwRkY4RjhEMDA1MDhGOEMwMDI0MTFBQzAwMDQ0MworOjEwMURBMDAwMzg4RjAwMDEzMUVFMDAwMTE1QzAwMDJGMDAwMDAwMDA0NworOjEwMURCMDAwMEUwMDFEMDIwMDAwMDAwMDBBMDAxREQ5MDAwMDAwMDBGNgorOjEwMURDMDAwOEY4OTAwMjQ5MzhEMDAyQzMwQUUwMDAzMDAwRTQwMjMzOQorOjEwMUREMDAwMzEwQTAwMDMwMTRENDAyMUEzODgwMDJDOTRDQjAwQUNCNAorOjEwMURFMDAwMDEyNzYwMjFBRjhDMDAyNDM1NjkxMDAwQTRDOTAwQUMyNAorOjEwMURGMDAwMTIyMEZGQjEwMTQ1MjAyMTI1MTgwMDA0QTM5ODAwMkNEMgorOjEwMUUwMDAwOTRDRjAwQUMyNDkyMDAwNEFGOTIwMDRDMzVGMTIwMDAzNgorOjEwMUUxMDAwQTREMTAwQUMwQTAwMUQ4MTAwMDAyMDIxOEM4MjAwRENDRQorOjEwMUUyMDAwMTI0MkZGNkMwMjIwMjAyMTI0MTgwMDA1QTM5ODAwNTRDMAorOjEwMUUzMDAwMEUwMDE4OTcyNDEyRkZGRjE0NTJGRjY2MjQwNEZGRkZDMAorOjEwMUU0MDAwMEEwMDFEODI4RkJGMDAxQzMwRTUwMEZGMEUwMDE3OUVBOAorOjEwMUU1MDAwMDAwMDMwMjE4Rjg2MDAyODhGODcwMDRDOEY4OTAwMjQ1NgorOjEwMUU2MDAwMEEwMDFENzI4Rjg1MDA0MDBFMDAxN0M5MDAwMDAwMDA5NworOjEwMUU3MDAwMEEwMDFERDkwMDAwMDAwMDkzODMwMDQ2MjdCREZGRTA0MworOjEwMUU4MDAwMjQwMjAwMDJBRkIyMDAxOEFGQjEwMDE0QUZCRjAwMUNCMworOjEwMUU5MDAwMDA4MDg4MjFBRkIwMDAxMDAwMDA5MDIxMTA2MjAwNTUzMgorOjEwMUVBMDAwMjQwNEZGRkQ5NzgzMDA0ODhGODUwMDRDMzA2NkZGRkZCOAorOjEwMUVCMDAwMDBDNTIwMkIxNDgwMDA1QjkzODcwMDM0M0MwODgwMDAxMQorOjEwMUVDMDAwOTUwNDAxMjAxMEU1MDA1MjhGOEEwMDI0OEY4NDAwNTA3MQorOjEwMUVEMDAwMzBBNTAwRkYwRTAwMTc5RTI0MDYwMDAxOEY5RjAwNThCQQorOjEwMUVFMDAwM0MwNTgwMDAzQzE5NDA4MDI3RUQwMTc4MzFCMDAwNzgzNgorOjEwMUVGMDAwMjQwRUZGODAwMjE5NTgyNTM0QUYwOTAwMzFCODAwMDdCRAorOjEwMUYwMDAwMDFBRTYwMjRBQ0FDMDgwMDAzMEY4MDIxQUNBQjA4MTAxQworOjEwMUYxMDAwMDIyMDIwMjEwMjAwMjgyMTBFMDAxRDNDQUY5MDAwMzgzNQorOjEwMUYyMDAwMjQwM0ZGRkYxMDQzMDAzMzI0MDRGRkZGOEUwQzAwMTAzNgorOjEwMUYzMDAwM0MwNzA4MDA4Q0U3MzFCMDkyMDYwMDAwMzE4NDNGRkY3NworOjEwMUY0MDAwMDA4NzEwMkIxMDQwMDAyMzMwQ0QwMDNGOEY5ODAwNThBMQorOjEwMUY1MDAwMDAwNDcxODAzQzA0MDgwMDhDODQzMUE4MjQwOUZGODBBRgorOjEwMUY2MDAwOTM5MDAwNDUwMDk4NDAyMTAxMEUyMDIxMDA4OTcwMjRBMworOjEwMUY3MDAwMDAwRTUxNDAzQzA5ODAwMDMwOTkwMDdGM0MwRjAwODBFQQorOjEwMUY4MDAwOEY4ODAwMjgzNTI1MDk0MDM1RTIwMDAxMDE1OTM4MjVBMAorOjEwMUY5MDAwMzA4QjAwNzgzMDg2MDAwNzNDMDMxMDAwM0MxRjgwMEMxQgorOjEwMUZBMDAwMDBDNUMwMjEwMTYyNTgyNTAwRTM1MDI1MDMzRjc4MjE3OAorOjEwMUZCMDAwMzYwNTAwMDFBRDJFMDgwNEFGOTgwMDNDQUQyQjA4MTQ4NworOjEwMUZDMDAwQUY4RjAwMzBBRDJFMDAyOEFEMDQwMDc0QUQyQTA4MzA2QworOjEwMUZEMDAwQTM4NTAwNDU5MzgzMDA0NjI0MTAwMDAzNTA3MDAwMjcxQQorOjEwMUZFMDAwMjVBM0ZGRTAyNDBDMDAwMTEwNkMwMDFDMjQwNjAwMjMzNAorOjEwMUZGMDAwMDI0MDIwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ0NworOjEwMjAwMDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjBFMQorOjEwMjAxMDAwMzE0OTAwMDM1NTIwRkZBRThGODQwMDUwMEEwMDFFMTU4MQorOjEwMjAyMDAwOEY5MDAwNTA4Rjg0MDA1MDMwNjUwMEZGMEUwMDE3OUU4NworOjEwMjAzMDAwMjQwNjAwMDE5MzhCMDAzNDI0MDUwMDM0MTE2NTAwMTgzOAorOjEwMjA0MDAwOTc4MzAwNDg4Rjg1MDA0QzMwNjJGRkZGMDBBMjU4MjMyMQorOjEwMjA1MDAwQUY4QjAwNEMwQTAwMUU0REE3ODAwMDQ4MTFBNjAwMzcyOAorOjEwMjA2MDAwMDAwMDAwMDAwMjIwMjAyMTI0MTEwMDBCMEUwMDE4OTcxMAorOjEwMjA3MDAwQTM5MTAwNTQwQTAwMUU0RDAwNDA5MDIxMkM3MjAwMjBCNAorOjEwMjA4MDAwMTI0MEZGRjgwMDAzRjg4MDNDMDcwODAxMjRFNzgxM0M3OAorOjEwMjA5MDAwMDNFN0M4MjE4RjJEMDAwMDAxQTAwMDA4MDAwMDAwMDAwOAorOjEwMjBBMDAwOEY4NTAwNEMyQ0EyMDAwNTU0NDAwMDFEQTc4MDAwNDhERAorOjEwMjBCMDAwOTc4QTAwNDgzMTQ4RkZGRjAwQTg0ODIzMkQyRjAwMDVDQworOjEwMjBDMDAwMTFFMDAwMDMzMTQ0MDBGRjI0QUVGRkZDMzFDNDAwRkZFNworOjEwMjBEMDAwOEY5MDAwNTA4Rjk4MDAyNDEyMTgwMDA0Mzg5OTAwMDE0NgorOjEwMjBFMDAwMzMyRDAwMDExNUEwMDAyOTAwMDAwMDAwOEY5MTAwMjg2OQorOjEwMjBGMDAwOTIyNTAwQzQzNEEzMDAxMEEyMjMwMEM0OTc4MzAwNDg5MworOjEwMjEwMDAwOEY4NTAwNEM4Rjg0MDAyODMwNjJGRkZGMDBBMjU4MjM4NworOjEwMjExMDAwQUM4MDAwRENBNzgwMDA0ODBBMDAxRTREQUY4QjAwNEM0RAorOjEwMjEyMDAwMzA2MkZGRkYwMEEyNTgyMzBBMDAxRTREQUY4QjAwNEMwNworOjEwMjEzMDAwMjQwM0ZGRkYxMTgzMDAwNTAwMDAwMDAwMEUwMDFCNkY0OQorOjEwMjE0MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDFBRjZBOAorOjEwMjE1MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDFCRDNCQQorOjEwMjE2MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDFBNEQzMQorOjEwMjE3MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDFDNzVGNworOjEwMjE4MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDE3Qzk5OAorOjEwMjE5MDAwMDAwMDAwMDA5NzgzMDA0ODhGODUwMDRDMzA2Q0ZGRkZFMworOjEwMjFBMDAwMDBBQzM4MjMyQ0ZGMDAwNTUzRTBGRkE4MzA2MkZGRkY4RQorOjEwMjFCMDAwOEY4NjAwMjhBNzgwMDA0OEFDQzIwMERDMzA2MkZGRkY5OQorOjEwMjFDMDAwMDBBMjU4MjMwQTAwMUU0REFGOEIwMDRDMjdCREZGRDA0NAorOjEwMjFEMDAwQUZCMjAwMThBRkIwMDAxMEFGQkYwMDI4QUZCNTAwMjRGOQorOjEwMjFFMDAwQUZCNDAwMjBBRkIzMDAxQ0FGQjEwMDE0M0MwQzgwMDBCMgorOjEwMjFGMDAwOEQ4ODAxMjgyNDBGRkY4MDNDMDc4MDBBMjUxMDAxMDBFQworOjEwMjIwMDAwMjUwQjAwODAwMjBGNjgyNDMyMDUwMDdGMDE2RjcwMjRDNworOjEwMjIxMDAwQUQ4RTAwOTAwMEE3MjgyMUFEOEQwMDI0OTBBNzAwRUM4MgorOjEwMjIyMDAwMzE2OTAwN0YzQzBBODAwNDAxMkExODIxQTM4NzAwNDZGNworOjEwMjIzMDAwOTA2NjAwN0MwMDgwOTAyMUFGODMwMDIwMzBDMjAwMDJCNQorOjEwMjI0MDAwQUY4ODAwNThBRjg1MDAyODAwQTAxODIxMTQ0MDAwMDI3NAorOjEwMjI1MDAwMjQwNDAwMzQyNDA0MDAzMEEzODQwMDM0OEM2NjAwQ0NCMQorOjEwMjI2MDAwMzBGMTAwRkYyNDA0MDAwNEFGODYwMDRDMTIyNDAwMDQ2NworOjEwMjI3MDAwQTM4MDAwNTQ4RTUzMDAwNDE2NjAwMDFEM0MwODgwMDBBQgorOjEwMjI4MDAwOTM4NzAwNDUzMEYyMDAwMTEyNDAwMDBGOEZCRjAwMjhGNQorOjEwMjI5MDAwOENCODAwNzQ4Q0E0MDA3NDI0MTlGRjgwMDMxOTg4MjQ1RQorOjEwMjJBMDAwMDAxMTcxNDAzMDhGMDA3RjAxQ0Y2MDI1M0MwRDIwMDA3MAorOjEwMjJCMDAwMDE4RDU4MjUzMEY1MDBGRTNDMEE4MDAwQUQ0QjA4MzBGQQorOjEwMjJDMDAwQTM5NTAwNDU4RkJGMDAyODhGQjUwMDI0OEZCNDAwMjA1MAorOjEwMjJEMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBBNAorOjEwMjJFMDAwMjQwMjAwMDEyN0JEMDAzMDAzRTAwMDA4QUNBNjAwQ0NBQQorOjEwMjJGMDAwOEU1OTAwMDg5NTFGMDEyMDhFNDYwMDEwMDMzRkMwMjExMworOjEwMjMwMDAwMzMwN0ZGRkYzMEY1MDAwRjMyQjQwMDAxQUY4NjAwMjQyMQorOjEwMjMxMDAwMTY4MDAwM0JBMzk1MDA0NDM1MDYwQzAwMDJBNjEwMjE1MAorOjEwMjMyMDAwMDBGNTE4MjNBRDAzMDA4NEFGODIwMDUwOEU0OTAwMDRFRAorOjEwMjMzMDAwMzEyOEZGRkYxMTAwMDAyQkE3ODkwMDQ4MjQxMEZGODBERgorOjEwMjM0MDAwM0MxNTgwMDAzQzE0MjAwMDBBMDAxRjNCMjQxM0ZGRkVCNAorOjEwMjM1MDAwOTBBRTAwQzQwMjBFNjgyNDMxQUMwMEZGMTU4MDAwMkE0NAorOjEwMjM2MDAwMDI0MDIwMjE5Mzg0MDA0NTk3ODYwMDQ4MzA4RjAwMDE2OQorOjEwMjM3MDAwMTFFMDAwMEIwMjY0MjgyNDhGODkwMDI4OEQyMzAwNzQ0QgorOjEwMjM4MDAwOEQyODAwNzRBMzg1MDA0NTAwNzAxMDI0MDAwMkM5NDAwOAorOjEwMjM5MDAwMzExRjAwN0YwMzNGQzAyNTAzMTQ4ODI1QUVCMTA4MzBFQworOjEwMjNBMDAwMTBDMDAwMTA4Rjg1MDAyODkwQTcwMEM0MDIwNzU4MjQ5MQorOjEwMjNCMDAwMzE2QTAwRkYxNTQwRkZFNjAyNDAyMDIxMEUwMDFERUZBQworOjEwMjNDMDAwOTc5MTAwNDgxMDQwRkZFODkzODQwMDQ1MjQwNUZGRkRFNQorOjEwMjNEMDAwNTQ0NTAwMDU4RTQzMDAyMDAyMjAyODIxMEUwMDE3NzQ2QQorOjEwMjNFMDAwMDI0MDIwMjE4RTQzMDAyMDMwNzAwMDA0MTYwMDAwMEFCNQorOjEwMjNGMDAwMjQxNEZGRkI4Rjg1MDAyODBBMDAxRUYxOEY4NjAwNENGNQorOjEwMjQwMDAwMEEwMDFGMUNBRjg2MDA1MDBFMDAxQTE5MDAwMDAwMDBDMQorOjEwMjQxMDAwMEEwMDFGMkI5Mzg0MDA0NTAwNzQ5ODI0MEUwMDE3OEUyOQorOjEwMjQyMDAwQUU1MzAwMjA4Rjg1MDAyODBBMDAxRUYxOEY4NjAwNENENQorOjEwMjQzMDAwMjdCREZGRDhBRkIzMDAxQ0FGQjEwMDE0QUZCRjAwMjA2MQorOjEwMjQ0MDAwQUZCMjAwMThBRkIwMDAxMDNDMDI4MDAwOEM1MjAxNDBDNworOjEwMjQ1MDAwOEM0QjAxNDgzQzA0ODAwMDAwMEI4QzAyMzIyMzAwRkZBRgorOjEwMjQ2MDAwMzE3MzAwRkY4Qzg1MDFCODA0QTBGRkZFMzQ5MDAxODAxOQorOjEwMjQ3MDAwQUUxMjAwMDA4Qzg3MDE0NDI0NjRGRkYwMjQwNjAwMDJBMQorOjEwMjQ4MDAwMkM4MzAwMTNBRTA3MDAwNEE2MTEwMDA4QTIwNjAwMEI1RgorOjEwMjQ5MDAwQUUxMzAwMjQxMDYwMDA0RjhGQkYwMDIwMDAwNDQ4ODA1RQorOjEwMjRBMDAwM0MwQTA4MDEyNTRBODFCQzAxMkE0MDIxOEQwNDAwMDAxNAorOjEwMjRCMDAwMDA4MDAwMDgwMDAwMDAwMDNDMTAwODAwOEUxMDMxQThDOQorOjEwMjRDMDAwMzE3MzNGRkYwMDEzODk4MDAyMTJDODIxMjQwNUZGODA2OQorOjEwMjREMDAwMDMzMTIwMjEyNjRDMDEwMDI2NDcwMDgwM0MxRjgwMDA0QworOjEwMjRFMDAwMDBFNTE4MjQzMThGMDA3RjMwRTkwMDdGMzA4QTAwN0ZCQgorOjEwMjRGMDAwM0MxODgwMEEzQzBFODAwNDNDMEQ4MDBDMDA4NTEwMjRBMgorOjEwMjUwMDAwMDE4NTMwMjQwMTREODAyMUFGRTYwMDI0MDFGODQwMjFFRgorOjEwMjUxMDAwQUZFMzAwOTAwMTJFOTgyMUFGRTIwMDI4QUY5MDAwMzA4OQorOjEwMjUyMDAwQUY4ODAwMjhBRjkzMDAyMDBFMDAxODYzMDE2MDgwMjE1RgorOjEwMjUzMDAwM0MwMzgwMDA4QzZCMDFCODA1NjBGRkZFOEY4NzAwMzA4NAorOjEwMjU0MDAwMzQ2NTAxODA4Rjg2MDAyODkwRTMwMDBEQUNCMjAwMDA1NgorOjEwMjU1MDAwQTRCMDAwMDYwMDAzMTYwMDAwMDJGRTAzMDAxRjkwMjcyRgorOjEwMjU2MDAwMDAxMjI3QzIxMDgwMDA3QTI0QzIwMDc4MjQxOTYwODJFOQorOjEwMjU3MDAwQTRCOTAwMDhBMEEwMDAwNTI0MUYwMDAyQTBCRjAwMEIwMgorOjEwMjU4MDAwMDAwNDFDMDA4RjhCMDAyMDNDMDIyNzAwMDA2MjkwMjU3NQorOjEwMjU5MDAwQUNCMjAwMTBBQ0EwMDAxNEFDQTAwMDI0QUNBMDAwMjg4OQorOjEwMjVBMDAwQUNBMDAwMkM4RDczMDAzODI0MTBGRjgwQUNCMzAwMTg1MQorOjEwMjVCMDAwOTBFNDAwMEQwMjA0ODgyNDMyMjUwMEZGMTBBMDAwMDVERAorOjEwMjVDMDAwOEZCRjAwMjA5MEVDMDAwRDMxODgwMDdGQTBFODAwMEQ0NworOjEwMjVEMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4MgorOjEwMjVFMDAwOEZCMDAwMTAzQzBEMTAwMDNDMEE4MDAwMjdCRDAwMjg3MQorOjEwMjVGMDAwMDNFMDAwMDhBRDREMDFCODI2NUYwMTAwMjQwNUZGODAwRgorOjEwMjYwMDAwMzNGODAwN0YzQzA2ODAwMDAzRTU3ODI0M0MxOTgwMEFGQgorOjEwMjYxMDAwMDMxOTIwMjFBQ0NGMDAyNDkwOEUwMEM0MDBBRTY4MjRBMgorOjEwMjYyMDAwMzFBQzAwRkYxMTgwRkZFQUFGODQwMDI4MjQ4RTAwNzhDRgorOjEwMjYzMDAwOTVDRDAwMTIzQzBDMDgwMDhEOEMzMUE4MzFBQjNGRkZDQQorOjEwMjY0MDAwMDE5MjQ4MjEwMDBCNTE4MDAxMkE0MDIxMDEwNTIwMjREQworOjEwMjY1MDAwQUNDNDAwMjgzMTA3MDA3RjNDMDY4MDBDMDBFNjIwMjEzNgorOjEwMjY2MDAwOTA4MzAwMEQwMEEzMTAyNDMwNDUwMEZGMTBBMEZGRDg3OAorOjEwMjY3MDAwQUY4NDAwMzA5MDk4MDAwRDMzMEYwMDEwMTVFMEZGRDVBNworOjEwMjY4MDAwOEZCRjAwMjAwRTAwMTg2MzAwMDAwMDAwM0MwMzgwMDA5NAorOjEwMjY5MDAwOEM3OTAxQjgwNzIwRkZGRTAwMDAwMDAwQUUxMjAwMDA5OAorOjEwMjZBMDAwOEM3MjAxNDRBRTEyMDAwNEE2MTEwMDA4MjQxMTAwMDIyRAorOjEwMjZCMDAwQTIxMTAwMEJBRTEzMDAyNDBBMDAxRkM2OEZCRjAwMjAxQQorOjEwMjZDMDAwM0MxMjYwMDA4RTQ1MkMwODNDMDNGMDAzMzQ2MkZGRkY4RgorOjEwMjZEMDAwMDBBMkY4MjRBRTVGMkMwODhFNTgyQzA4M0MxOTAxQjBEQgorOjEwMjZFMDAwMDMxOTk4MjVBRTUzMkMwODBBMDAxRkM2OEZCRjAwMjA3RgorOjEwMjZGMDAwMjY0RDAxMDAzMUFGMDA3RjNDMTA4MDBBMjQwRUZGODA4MAorOjEwMjcwMDAwMDFGMDI4MjEwMUFFNjAyNDNDMEI4MDAwQUQ2QzAwMjQ1OAorOjEwMjcxMDAwMTY2MEZGQUZBRjg1MDAyODI0MTEwMDAzQTBCMTAwRUNDNAorOjEwMjcyMDAwMEEwMDFGQzY4RkJGMDAyMDI2NDgwMTAwMzEwQTAwN0YyMworOjEwMjczMDAwM0MwQjgwMEEyNDA5RkY4MDAxNEIzMDIxMDEwOTIwMjQzMQorOjEwMjc0MDAwM0MwNzgwMDBBQ0U0MDAyNDBBMDAxRkM1QUY4NjAwMjhDNworOjEwMjc1MDAwOTQ0QTAwMTIzMjA4M0ZGRjMxNEMzRkZGMTU4OEZGODQzNgorOjEwMjc2MDAwMjQxOTYwODI5MENGMDBDNDI0MEVGRjgwMDFDRjQ4MjQzQQorOjEwMjc3MDAwMzEyRDAwRkYxMUEwRkY3RTAwMDAwMDAwMjQwNzAwMDQ5RgorOjEwMjc4MDAwQTBDNzAwRUM4Rjg3MDAzMDI0MTg2MDg0MjQwNjAwMEQ1OQorOjEwMjc5MDAwQTRCODAwMDhBMEE2MDAwNTBBMDAxRkIwMjQxRjAwMDI2QworOjEwMjdBMDAwMDgwMDMzMEMwODAwMzMwQzA4MDAzM0U4MDgwMDMzQkM4MQorOjEwMjdCMDAwMDgwMDMzQTAwODAwMzJGMDA4MDAzMkYwMDgwMDMyRjBDMAorOjEwMjdDMDAwMDgwMDMzMTQ4MDA4MDEwMDgwMDgwMDgwODAwODAwMDBBMQorOjEwMjdEMDAwNUY4NjU0MzdFNEFDNjJDQzUwMTAzQTQ1MzY2MjE5ODVCNgorOjEwMjdFMDAwQkYxNEMwRTgxQkMyN0ExRTg0RjRCNTU2MDk0RUE2RkU3QgorOjEwMjdGMDAwN0REQTAxRTdDMDRENzQ4MTA4MDA3QTc0MDgwMDdBQzA2MAorOjEwMjgwMDAwMDgwMDdBODAwODAwNzlBODA4MDA3QTgwMDgwMDdBQjA2OQorOjEwMjgxMDAwMDgwMDdBODAwODAwNzlBODA4MDA3OUE4MDgwMDc5QTgzQgorOjEwMjgyMDAwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4MDgwMDc5QTgwNAorOjEwMjgzMDAwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4MDgwMDdBQTBGQgorOjEwMjg0MDAwMDgwMDdBOTAwODAwNzlBODA4MDA3OUE4MDgwMDc5QThGQgorOjEwMjg1MDAwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4MDgwMDc5QThENAorOjEwMjg2MDAwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4MDgwMDc5QThDNAorOjEwMjg3MDAwMDgwMDc5QTgwODAwN0E5MDA4MDA4MDZDMDgwMDdGMTQ4RQorOjEwMjg4MDAwMDgwMDgwMzQwODAwN0YxNDA4MDA4MDA0MDgwMDdERkNFNAorOjEwMjg5MDAwMDgwMDdGMTQwODAwN0YxNDA4MDA3RjE0MDgwMDdGMTRDQworOjEwMjhBMDAwMDgwMDdGMTQwODAwN0YxNDA4MDA3RjE0MDgwMDdGMTRCQworOjEwMjhCMDAwMDgwMDdGMTQwODAwN0YxNDA4MDA3RjE0MDgwMDdGMTRBQworOjA0MjhDMDAwMDgwMDdGM0M1MQorOjBDMjhDNDAwMEEwMDAxMjIwMDAwMDAwMDAwMDAwMDAwREIKKzoxMDI4RDAwMDAwMDAwMDBENzQ3MDYxMzUyRTMwMkUzMDZBMzMwMDAwMTgKKzoxMDI4RTAwMDA1MDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDI4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKKzoxMDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKKzoxMDI5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKKzoxMDI5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKKzoxMDI5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMDI5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDI5NTAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBENEEKKzoxMDI5NjAwMDNDMDIwODAwMjQ0MjFDMjAzQzAzMDgwMDI0NjMxRkEwRjIKKzoxMDI5NzAwMEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0RTMKKzoxMDI5ODAwMDNDMUQwODAwMzdCRDJGRkMwM0EwRjAyMTNDMTAwODAwQkYKKzoxMDI5OTAwMDI2MTAwNDg4M0MxQzA4MDAyNzlDMUMyMDBFMDAwMkUyMjQKKzoxMDI5QTAwMDAwMDAwMDAwMDAwMDAwMEQyNDAyRkY4MDI3QkRGRkUwQjIKKzoxMDI5QjAwMDAwODIxMDI0QUZCMDAwMTBBRjQyMDAyMEFGQkYwMDE4NUIKKzoxMDI5QzAwMEFGQjEwMDE0OTM2NTAwMDQzMDg0MDA3RjAzNDQxODIxRTQKKzoxMDI5RDAwMDNDMDIwMDA4MDA2MjE4MjEzMEE1MDAyMDAzNjA4MDIxMUQKKzoxMDI5RTAwMDNDMDgwMTExMjc3QjAwMDgxNEEwMDAwMjI0NjYwMDVDNEIKKzoxMDI5RjAwMDI0NjYwMDU4OTIwMjAwMDQ5NzQzMDEwNDkyMDQwMDA0RTQKKzoxMDJBMDAwMDMwNDcwMDBGMzA2M0ZGRkYzMDg0MDA0MDAwNjcyODIzMDkKKzoxMDJBMTAwMDEwODAwMDA5MDAwMDQ4MjE5MjAyMDAwNTMwNDIwMDA0QTUKKzoxMDJBMjAwMDEwNDAwMDA1MDAwMDAwMDAxMEEwMDAwMzAwMDAwMDAwOUUKKzoxMDJBMzAwMDI0QTVGRkZDMjQwOTAwMDQ5MjAyMDAwNTMwNDIwMDA0OTIKKzoxMDJBNDAwMDEwNDAwMDEyMDAwMDAwMDAxMEEwMDAxMDAwMDAwMDAwNjQKKzoxMDJBNTAwMDk2MDIwMDAyMDBBNzIwMjEwMTA0NDAyNTI0NDJGRkZFMjcKKzoxMDJBNjAwMEE3NDIxMDE2OTIwMzAwMDQyNDAyRkY4MDAwNDMxMDI0QTIKKzoxMDJBNzAwMDMwNDIwMEZGMTA0MDAwMDMzQzAyMDQwMDBBMDAwMTcyRDMKKzoxMDJBODAwMDAxMDI0MDI1OENDMjAwMDBBRjQyMTAxODhGNDIwMTc4MkQKKzoxMDJBOTAwMDA0NDBGRkZFMjQwMjAwMEFBNzQyMDE0MDk2MDIwMDAyMDEKKzoxMDJBQTAwMDI0MDQwMDA5MzA0MjAwMDcwMDAyMTAyMzMwNDIwMDA3Q0UKKzoxMDJBQjAwMEE3NDIwMTQyOTYwMjAwMDIyNDQyRkZGRUE3NDIwMTQ0QkYKKzoxMDJBQzAwMEE3NDAwMTQ2OTc0MjAxMDRBNzQyMDE0ODhGNDIwMTA4RUUKKzoxMDJBRDAwMDMwNDIwMDIwNTA0MDAwMDEyNDA0MDAwMTkyMDIwMDA0MTIKKzoxMDJBRTAwMDMwNDIwMDEwMTQ0MDAwMDIzNDgzMDAxMDAwODAxODIxOEUKKzoxMDJBRjAwMEE3NDMwMTRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKKzoxMDJCMDAwMDAwMDAwMDAwQUY0ODEwMDAwMDAwMDAwMDAwMDAwMDAwQkUKKzoxMDJCMTAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMTAwMDA0NDFGRkZFOTIKKzoxMDJCMjAwMDMxMDJGRkZGMTA0MDAwMDcwMDAwMDAwMDkyMDIwMDA0ODUKKzoxMDJCMzAwMDMwNDIwMDQwMTQ0MDAwMDMwMDAwMDAwMDhGNDIxMDE4OTMKKzoxMDJCNDAwMEFDQzIwMDAwOTYwMjAwMDYzMDQyRkZGRjI0NDIwMDAyQTEKKzoxMDJCNTAwMDAwMDIxMDQzMDAwMjEwNDAwMzYyODgyMTk2MjIwMDAwMDgKKzoxMDJCNjAwMDExMjAwMDBEMzA0NEZGRkYwMEE3MTAyMThGODMwMDM4OTMKKzoxMDJCNzAwMDhGNDUxMDFDMDAwMjEwODIwMDAyMTA4MDAwNDMxMDIxQkIKKzoxMDJCODAwMEFDNDUwMDAwMzBBNkZGRkYwRTAwMDJEMTAwMDUyQzAyNkMKKzoxMDJCOTAwMDAwNDAyMDIxQTYyMjAwMDA5MjAzMDAwNDI0MDJGRjgwQUUKKzoxMDJCQTAwMDAwNDMxMDI0MzA0MjAwRkYxMDQwMDAxRjAwMDAwMDAwQ0UKKzoxMDJCQjAwMDkyMDIwMDA1MzA0MjAwMDIxMDQwMDAxQjAwMDAwMDAwOUQKKzoxMDJCQzAwMDk3NDIxMDBDMjQ0MkZGRkVBNzQyMTAxNjAwMDAwMDAwOUUKKzoxMDJCRDAwMDNDMDIwNDAwMzQ0MjAwMzBBRjQyMTAwMDAwMDAwMDAwMEMKKzoxMDJCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNDIxMDAwMDQKKzoxMDJCRjAwMDA0NDFGRkZFMDAwMDAwMDA5NzQyMTAwQzhGNDUxMDFDOUUKKzoxMDJDMDAwMDMwNDJGRkZGMjQ0MjAwMzAwMDAyMTA4MjAwMDIxMDgwOTgKKzoxMDJDMTAwMDAwNUIxMDIxQUM0NTAwMDAzMEE2RkZGRjBFMDAwMkQxODIKKzoxMDJDMjAwMDAwMDUyQzAyQTYyMjAwMDA5NjA0MDAwMjI0ODQwMDA4NUQKKzoxMDJDMzAwMDBFMDAwMUU3MzA4NEZGRkY5NzQ0MDEwNDBFMDAwMUY1MDgKKzoxMDJDNDAwMDMwODRGRkZGOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQzkKKzoxMDJDNTAwMDNDMDIxMDAwMjdCRDAwMjAwM0UwMDAwOEFGNDIwMTc4Q0QKKzoxMDJDNjAwMDMwODRGRkZGMzA4MjAwMDc4Rjg1MDAyNDEwNDAwMDAyNkYKKzoxMDJDNzAwMDI0ODMwMDA3MzA2NEZGRjgwMEE0MTAyMTMwNDIxRkZGQjYKKzoxMDJDODAwMDAzNDIxODIxMjQ3QjQwMDBBRjg1MDAyOEFGODIwMDI0MzYKKzoxMDJDOTAwMDAzRTAwMDA4QUY0MjAwODQzMDg0RkZGRjMwODIwMDBGNjEKKzoxMDJDQTAwMDhGODUwMDJDOEY4NjAwMzQxMDQwMDAwMjI0ODMwMDBGOTMKKzoxMDJDQjAwMDMwNjRGRkYwMDBBNDEwMjEwMDQ2MTgyQkFGODUwMDMwQ0YKKzoxMDJDQzAwMDAwNDYyMDIzMTQ2MDAwMDJBRjgyMDAyQ0FGODQwMDJDNDkKKzoxMDJDRDAwMDhGODIwMDJDMzQwNDgwMDAwMzQyMTgyMTAwNjQxODIxRTQKKzoxMDJDRTAwMEFGODMwMDM4MDNFMDAwMDhBRjQyMDA4MDhGODIwMDE0RjkKKzoxMDJDRjAwMDEwNDAwMDA4OEY4MjAwMDQ4RjgyRkZDQzE0NDAwMDA1MzIKKzoxMDJEMDAwMDhGODIwMDA0M0MwMkZGQkYzNDQyRkZGRjAwODIyMDI0NzgKKzoxMDJEMTAwMDhGODIwMDA0MzA0MzAwMDYyNDAyMDAwMjEwNjIwMDBGN0MKKzoxMDJEMjAwMDNDMDIwMTAxMkM2MjAwMDM1MDQwMDAwNTI0MDIwMDA0MTMKKzoxMDJEMzAwMDEwNjAwMDBGM0MwMjAwMDEwQTAwMDIyRTAwMDAwMDAwOUIKKzoxMDJENDAwMDEwNjIwMDA1MjQwMjAwMDYxNDYyMDAwQzNDMDIwMTExMEUKKzoxMDJENTAwMDBBMDAwMjI3MDA4MjEwMjUzQzAyMDAxMTAwODIxMDI1ODMKKzoxMDJENjAwMEFGNDIxMDAwMjQwMjAwMDEwQTAwMDIyRUFGODIwMDBDQzQKKzoxMDJENzAwMDAwODIxMDI1QUY0MjEwMDBBRjgwMDAwQzAwMDAwMDAwNjAKKzoxMDJEODAwMDAwMDAwMDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwNTgKKzoxMDJEOTAwMDhGODIwMDBDMTA0MDAwMDQwMDAwMDAwMDhGNDIxMDAwRTEKKzoxMDJEQTAwMDA0NDFGRkZFMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwRjYKKzoxMDJEQjAwMDhGODIwMDEwMjQ0M0Y4MDAwMDAyMjlDMjI0QTJGRkYwRjEKKzoxMDJEQzAwMDJDNjMwMzAxMTA2MDAwMDMwMDAyMTA0MjBBMDAwMjU1NDgKKzoxMDJERDAwMEFDODIwMDAwOEY4MzAwMTgwMEEzMTAyQjE0NDAwMDBCNUUKKzoxMDJERTAwMDAwMDAzODIxMDBBMzEwMjMyNDQ2MDAwMThGODIwMDFDMUMKKzoxMDJERjAwMDAwNjIxMDIxMjQ0MkZGRkYwMDQ1MTAyQjU0NDAwMDA0QzQKKzoxMDJFMDAwMDI0MDJGRkZGMEEwMDAyNTVBQzg2MDAwMDI0MDJGRkZGRTcKKzoxMDJFMTAwMDBBMDAwMjVBQUM4MjAwMDA4QzgyMDAwMDNDMDMwODAwQzkKKzoxMDJFMjAwMDI0NjMxQzVDMDAwMjExNDAwMDQzMzgyMTAzRTAwMDA4QzkKKzoxMDJFMzAwMDAwRTAxMDIxM0MwOTA4MDA4RDI5MUQ4MDAwMDQ1MTQwNEMKKzoxMDJFNDAwMDNDMTkwODAwMjczOTFDNUMwMEMwNzgyMTAwODA2MDIxRjMKKzoxMDJFNTAwMDI0MEVGRkZGMDAwMDM4MjEwMTU5NDAyMTExMjAwMDM2QzcKKzoxMDJFNjAwMDAwMDAzMDIxM0MxODA4MDAyNzE4MUQ5ODNDMEQwODAwNzAKKzoxMDJFNzAwMDI1QUQxRDlDMDAwRjU4MkIwMDA2MTE4MDAwNDYxMDIxMjcKKzoxMDJFODAwMDAwMDIxOEMwMDA3ODEwMjE4QzQyMDAwMDE1ODIwMDIwM0EKKzoxMDJFOTAwMDAwNkQyMDIxOENBMjAwMDA1NDQwMDAwOThEMDIwMDE4MTIKKzoxMDJFQTAwMDNDMDIwODAwOEM0MjFEODQyNDQyMDAwMUFDODIwMDAwRDgKKzoxMDJFQjAwMDNDMDEwODAwQUMyMjFEODQwQTAwMDJDRjAwMDAyMDIxNDIKKzoxMDJFQzAwMDhGNDcwMDIwMDAwMDMwMjEwMDAyMTFDMDExNjAwMDRBMkQKKzoxMDJFRDAwMEFGNDIwMDIwOEQwODAwMUMzQzA5MDAwODhDQTMwMDAwQjQKKzoxMDJFRTAwMDAwNjYxODIxMDAwMzE4ODAwMDdBMTAyMTAwNDkxMDIxODMKKzoxMDJFRjAwMDhDNDQwMDAwMjRDNjAwMDEwMDY4MTgyMTAwQ0YxMDJCNkMKKzoxMDJGMDAwMDE0NDBGRkY2QUM2NDAwMDAwQTAwMDJDRDAwMDAwMDAwOEYKKzoxMDJGMTAwMDhDODQwMDAwMDA4RTEwMkI1MDQwMDAwNDI0QzYwMDAxNTkKKzoxMDJGMjAwMDAwODA3MDIxMDBDMDM4MjEyNEM2MDAwMTAwQzkxMDJCODgKKzoxMDJGMzAwMDE0NDBGRkQyMDAwNjExODAyNDAyMDAwMUFDQTIwMDAwNjAKKzoxMDJGNDAwMDNDMDIwODAwOEM0MjFEN0MzQzAzMDgwMDhDNjMxRDgwMDEKKzoxMDJGNTAwMDAwNDMxMDJCMTQ0MDAwMkEyNDA0RkZGRTAxNTkxMDIxQzUKKzoxMDJGNjAwMDhDNDIwMDE4MTA0MDAwMjYyNDA0RkZGRjAwMDcyMTgwMzcKKzoxMDJGNzAwMDNDMDUwODAwOENBNTFEODQwMDg3MjAyMThEMDYwMDE4QzMKKzoxMDJGODAwMDAwMDQyMEMwM0MwMjA4MDAyNDQyMUQ5ODAwODIxMDIxNDkKKzoxMDJGOTAwMDNDMDMwODAwMjQ2MzFEOUNBQzRDMDAwMDI0QTUwMDAxRTgKKzoxMDJGQTAwMDAwODMxODIxM0MwMjA4MDAyNDQyMURBMEFDNjUwMDAwRUIKKzoxMDJGQjAwMDAwMDYzMUMwM0MwMTA4MDBBQzI1MUQ4NDAwODIyMDIxQTAKKzoxMDJGQzAwMDhGNDcwMDIwQUQwNDAwMUNBRjQ2MDAyMDExRTAwMDBBMkUKKzoxMDJGRDAwMDAwMDAzMDIxM0MwMjAwMDgwMzQyMjgyMThDQTIwMDAwOUUKKzoxMDJGRTAwMDI0QzYwMDAxMDBDRjE4MkJBQzgyMDAwMDI0QTUwMDA0RTkKKzoxMDJGRjAwMDE0NjBGRkZBMjQ4NDAwMDRBRjQ3MDAyMDAwMDAyMDIxNjEKKzoxMDMwMDAwMDAzRTAwMDA4MDA4MDEwMjEzMDg0RkZGRjMwQzZGRkZGN0UKKzoxMDMwMTAwMDAwMDUyQzAwMDBBNjI4MjUzODgyRkZGRjAwNDUxMDIxNUUKKzoxMDMwMjAwMDAwNDUyODJCMDA0NTEwMjEwMDAyMUMwMjMwNDJGRkZGMDIKKzoxMDMwMzAwMDAwNDMxMDIxMDAwMjFDMDIzMDQyRkZGRjAwNDMxMDIxMTgKKzoxMDMwNDAwMDM4NDJGRkZGMDNFMDAwMDgzMDQyRkZGRjI3QkRGRkM4MDIKKzoxMDMwNTAwMEFGQkYwMDMwQUZCMzAwMkNBRkIyMDAyOEFGQjEwMDI0MzcKKzoxMDMwNjAwMEFGQjAwMDIwM0MwNDYwMDg4QzgyNTAwMDI0MDNGRjdGMzYKKzoxMDMwNzAwMDNDMDY2MDAwMDA0MzEwMjQzNDQyMzgwQ0FDODI1MDAwRkYKKzoxMDMwODAwMDhDQzI0QzFDM0MxQTgwMDAwMDAyMTYwMjMwNDIwMDBGMTkKKzoxMDMwOTAwMDEwNDAwMDA3QUY4MjAwMUM4Q0MzNEMxQzNDMDIwMDFGNzgKKzoxMDMwQTAwMDM0NDJGQzAwMDA2MjE4MjQwMDAzMTlDMkFGODMwMDE4RTgKKzoxMDMwQjAwMDhGNDIwMDA4Mjc1QjQwMDAzNDQyMDAwMUFGNDIwMDA4MDUKKzoxMDMwQzAwMEFGODAwMDI0M0MwMjYwMUNBRjQwMDA4MEFGNDAwMDg0MTEKKzoxMDMwRDAwMDhDNDUwMDA4OENDMzA4MDgzNDAyODAwMDAzNDIyMDIxN0MKKzoxMDMwRTAwMDI0MDJGRkYwMDA2MjE4MjQzQzAyMDA4MDNDMDEwODAwMkEKKzoxMDMwRjAwMEFDMjIwNDIwM0MwMjU3MDlBRjg0MDAzODE0NjIwMDA0NUIKKzoxMDMxMDAwMEFGODUwMDM0MjQwMjAwMDEwQTAwMDMxNEFGODIwMDE0Q0EKKzoxMDMxMTAwMEFGODAwMDE0MjQwMzAwM0QyNDAyMDAwNDNDMDEwODAwOTkKKzoxMDMxMjAwMEFDMjIxRDk0M0MwMTA4MDBBQzIzMUQ5MDNDMDEwODAwMUEKKzoxMDMxMzAwMEFDMjMxRDhDM0MwMTA4MDBBQzIzMUQ4ODNDMTMwODAwMDcKKzoxMDMxNDAwMDI2NzMxQzVDMjQwNDAwMDQzQzAyMDgwMDI0NDIxQzc0MDYKKzoxMDMxNTAwMDI0MDMwMDA4MjQ2M0ZGRkZBQzQwMDAwNEFDNDAwMDAwREYKKzoxMDMxNjAwMDA0NjFGRkZDMjQ0MjAwMjAwMDA0MTBDMDAwNDQxMDIxMzAKKzoxMDMxNzAwMDI0NDIwMDNEM0MwMTA4MDBBQzIyMUQ5MDI0MDIwMDAxQzUKKzoxMDMxODAwMDNDMDEwODAwQUMyMjFEN0MyNDAyRkZGRjNDMDEwODAwMkEKKzoxMDMxOTAwMEFDMjIxRDk4M0MwMTA4MDBBQzIwMUQ4NDhGNDIwMDAwMjkKKzoxMDMxQTAwMDM4NDIwMDAxMzA0MjAwMDExNDQwRkZGQzhGODIwMDE0QkQKKzoxMDMxQjAwMDEwNDAwMDE2MDAwMDAwMDA5NzQyMDEwNDEwNDAwMDA1NzYKKzoxMDMxQzAwMDhGODMwMDAwMTQ2MDAwMDcyNDYyRkZGRjBBMDAwMzRCOTYKKzoxMDMxRDAwMDJDNjIwMDBBMkM2MjAwMTA1MDQwMDAwNDhGODMwMDAwMTMKKzoxMDMxRTAwMDI0NjIwMDAxQUY4MjAwMDA4RjgzMDAwMDJDNjIwMDBBN0QKKzoxMDMxRjAwMDE0NDAwMDAzMkM2MjAwMDcwQTAwMDM1MkFGODBGRkNDOEEKKzoxMDMyMDAwMDEwNDAwMDAyMjQwMjAwMDFBRjgyRkZDQzhGNDMwMTA4NkUKKzoxMDMyMTAwMDhGNDQwMTAwMzA2MjIwMDBBRjgzMDAwNDEwNDAwMDA4OUEKKzoxMDMyMjAwMEFGODQwMDEwM0MwMjA4MDA4QzQyMDQyQzI0NDIwMDAxQjAKKzoxMDMyMzAwMDNDMDEwODAwQUMyMjA0MkMwQTAwMDZENzNDMDI0MDAwRTYKKzoxMDMyNDAwMDMwNjUwMjAwMTRBMDAwMDMyNDAyMEYwMDE0ODIwMzA5NTkKKzoxMDMyNTAwMDI0MDIwRDAwOTc0MjAxMDQxMDQwMDM3MTNDMDI0MDAwMUIKKzoxMDMyNjAwMDMwNjI0MDAwMTQ0MDAwQUQ4RjgyMDAzODhDNDQwMDA4NkEKKzoxMDMyNzAwMDhGNDIwMTc4MDQ0MEZGRkUyNDAyMDgwMEFGNDIwMTc4MkIKKzoxMDMyODAwMDI0MDIwMDA4QTc0MjAxNDBBNzQwMDE0Mjk3NDIwMTA0REUKKzoxMDMyOTAwMDhGODQwMDA0MzA1MUZGRkYzMDgyMDAwMTEwNDAwMDA3OEUKKzoxMDMyQTAwMDAyMjA4MDIxMjYyM0ZGRkUyNDAyMDAwMjMwNzBGRkZGNEYKKzoxMDMyQjAwMEE3NDIwMTQ2MEEwMDAzN0ZBNzQzMDE0OEE3NDAwMTQ2RjEKKzoxMDMyQzAwMDNDMDIwODAwOEM0MjA0M0MxNDQwMDAwRDhGODMwMDEwMjcKKzoxMDMyRDAwMDMwODIwMDIwMTQ0MDAwMDIyNDAzMDAwOTI0MDMwMDAxNkUKKzoxMDMyRTAwMDAwNjAyMDIxOEY4MzAwMTAyNDAyMDkwMDUwNjIwMDAxMzkKKzoxMDMyRjAwMDM0ODQwMDA0QTc0NDAxNEEwQTAwMDM5QTAwMDAwMDAwMzUKKzoxMDMzMDAwMDI0MDIwRjAwMTQ2MjAwMDUzMDgyMDAyMDE0NDAwMDA2RTEKKzoxMDMzMTAwMDI0MDMwMDBEMEEwMDAzOTkyNDAzMDAwNTE0NDAwMDAyNTEKKzoxMDMzMjAwMDI0MDMwMDA5MjQwMzAwMDFBNzQzMDE0QTNDMDIwODAwQ0EKKzoxMDMzMzAwMDhDNDIwNDIwM0MwNDAwNDgwRTAwMDIwQTAwNDQyMDI1NzAKKzoxMDMzNDAwMDBFMDAwMjMzMDAwMDAwMDA4RjgyMDAwQzEwNDAwMDNFOEYKKzoxMDMzNTAwMDAwMDAwMDAwOEY0MjEwMDAzQzAzMDAyMDAwNDMxMDI0QjYKKzoxMDMzNjAwMDEwNDAwMDM5OEY4MjAwMDQzMDQyMDAwMjEwNDAwMDM2QzUKKzoxMDMzNzAwMDAwMDAwMDAwOTc0MjEwMTQxNDQwMDAzMzAwMDAwMDAwQzkKKzoxMDMzODAwMDk3NDIxMDA4OEY4ODAwMzgzMDQyRkZGRjI0NDIwMDA2MjEKKzoxMDMzOTAwMDAwMDIxODgyMDAwMzM4ODAwMEU4MzAyMTMwNDMwMDAxMjkKKzoxMDMzQTAwMDhDQzQwMDAwMTA2MDAwMDQzMDQyMDAwMzAwMDAwMDBERDcKKzoxMDMzQjAwMDBBMDAwM0RCMDBFODEwMjE1NDQwMDAxMDMwODRGRkZGQjYKKzoxMDMzQzAwMDNDMDVGRkZGMDA4NTIwMjQwMDg1MTgyNjAwMDMxODJCRUMKKzoxMDMzRDAwMDAwMDQxMDJCMDA0MzEwMjQxMDQwMDAwNTAwMDAwMDAwRTIKKzoxMDMzRTAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMjFDOEUKKzoxMDMzRjAwMDhDQzIwMDAwMEEwMDAzREEwMDQ1MjAyNTM4ODNGRkZGNTUKKzoxMDM0MDAwMDAwMDMxODJCMDAwNDEwMkIwMDQzMTAyNDEwNDAwMDA1NkIKKzoxMDM0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwOUYKKzoxMDM0MjAwMDI0MDAwMjI1OENDMjAwMDAzNDQ0RkZGRjAwRTgxMDIxNzQKKzoxMDM0MzAwMEFDNDQwMDAwM0MwMjA4MDA4QzQyMDQzMDI0NDIwMDAxRUQKKzoxMDM0NDAwMDNDMDEwODAwQUMyMjA0MzA4RjYyMDAwMDhGODQwMDM4RjkKKzoxMDM0NTAwMEFGODIwMDA4OEM4MzAwMDAzNDAyRkZGRjE0NjIwMDBGNkIKKzoxMDM0NjAwMDAwMDAxMDIxM0MwNTA4MDA4Q0E1MDQ1NDNDMDQwODAwMTEKKzoxMDM0NzAwMDhDODQwNDUwMDBCMDI4MjEwMEIwMzAyQjAwODIyMDIxMjEKKzoxMDM0ODAwMDAwODYyMDIxM0MwMTA4MDBBQzI1MDQ1NDNDMDEwODAwQzIKKzoxMDM0OTAwMEFDMjQwNDUwMEEwMDA2Q0QyNDA0MDAwODhDODIwMDAwRUQKKzoxMDM0QTAwMDMwNDIwMTAwMTA0MDAwMEYwMDAwMTAyMTNDMDUwODAwRDAKKzoxMDM0QjAwMDhDQTUwNDRDM0MwNDA4MDA4Qzg0MDQ0ODAwQjAyODIxRUUKKzoxMDM0QzAwMDAwQjAzMDJCMDA4MjIwMjEwMDg2MjAyMTNDMDEwODAwMjIKKzoxMDM0RDAwMEFDMjUwNDRDM0MwMTA4MDBBQzI0MDQ0ODBBMDAwNkNEOEQKKzoxMDM0RTAwMDI0MDQwMDA4M0MwNTA4MDA4Q0E1MDQ0NDNDMDQwODAwQTIKKzoxMDM0RjAwMDhDODQwNDQwMDBCMDI4MjEwMEIwMzAyQjAwODIyMDIxQjEKKzoxMDM1MDAwMDAwODYyMDIxM0MwMTA4MDBBQzI1MDQ0NDNDMDEwODAwNTEKKzoxMDM1MTAwMEFDMjQwNDQwMEEwMDA2Q0QyNDA0MDAwODhGNjIwMDA4OTEKKzoxMDM1MjAwMDhGNjIwMDAwMDAwMjE2MDIzMDQzMDBGMDI0MDIwMDMwRDcKKzoxMDM1MzAwMDEwNjIwMDA1MjQwMjAwNDAxMDYyMDE2QjhGODIwMDIwOUYKKzoxMDM1NDAwMDBBMDAwNkQ1MjQ0MjAwMDExNEEwMDAwNTAwMDAwMDAwNzYKKzoxMDM1NTAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMjUwRTgKKzoxMDM1NjAwMDhGNDIwMTc4MDQ0MEZGRkUwMDAwMDAwMDBFMDAwMjNCODUKKzoxMDM1NzAwMDI3QTQwMDEwMTQ0MDAwMDUwMDQwODAyMTAwMDAwMDAwMzYKKzoxMDM1ODAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDI1NzhFMDIwMDAwMjEKKzoxMDM1OTAwMDEwNDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQzkKKzoxMDM1QTAwMDAwMDAwMDAwMjQwMDAyNUE4RjYyMDAwQzA0NDMwMDAzNTQKKzoxMDM1QjAwMDI0MDIwMDAxMEEwMDA1NURBRTAwMDAwMEFFMDIwMDAwMUEKKzoxMDM1QzAwMDhGODIwMDM4OEM0NTAwMDhBMjAwMDAwNzhGNjUwMDBDMzAKKzoxMDM1RDAwMDhGNjQwMDA0MzBBM0ZGRkYwMDA0MjQwMjAwODUyMDIzMzEKKzoxMDM1RTAwMDMwODIwMEZGMDA0MzEwMjEyNDQyMDAwNTAwMDI4ODgzM0UKKzoxMDM1RjAwMDJFMjIwMDgxQTYwNTAwMEExNDQwMDAwNUEyMDQwMDA0NDIKKzoxMDM2MDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMjcyMTUKKzoxMDM2MTAwMDNDMDcwODAwOENFNzFEODA4RkE4MDAxMDI0MDlGRkZGREQKKzoxMDM2MjAwMDAwMDA1MDIxMTBFMDAwMTMwMDAwMzAyMTNDMEMwODAwODUKKzoxMDM2MzAwMDI1OEMxRDlDMDE4MDI4MjEwMDAwMTgyMThDQTJGRkZDRjQKKzoxMDM2NDAwMDUxMDIwMDJGMDA2QzE4MjE4Q0E0MDAwMDI0NjMwMjA4OTIKKzoxMDM2NTAwMDAwODkxMDJCMTA0MDAwMDMyNEE1MDIwODAwODA0ODIxOTcKKzoxMDM2NjAwMDAwQzA1MDIxMjRDNjAwMDEwMEM3MTAyQjU0NDBGRkY0QjUKKzoxMDM2NzAwMDhDQTJGRkZDM0MwNTA4MDA4Q0E1MUQ4MDNDMDIwODAwQzQKKzoxMDM2ODAwMDhDNDIxRDdDM0MwOTA4MDAyNTI5MUM2MDNDMDMwODAwNzUKKzoxMDM2OTAwMDI0NjMxRDk4MDBBMjEwMkIzQzBDMDgwMDI1OEMxRDlDNTcKKzoxMDM2QTAwMDNDMDQwODAwOEM4NDFEODQzQzBCMDgwMDI1NkIxREEwODUKKzoxMDM2QjAwMDEwNDAwMDFBMDAwODMxNDAwMDA1MTE4MDAwNDUxMDIxMUIKKzoxMDM2QzAwMDAwMDIxMEMwMDBDOTM4MjEyNDg0MDAwMTAwNEIzMDIxQzEKKzoxMDM2RDAwMDAwNDMxODIxMjRBNTAwMDEwMDRDMTAyMUFDNjgwMDAwMTMKKzoxMDM2RTAwMEFDRTYwMDE4M0MwMTA4MDBBQzI0MUQ4NEFDNDQwMDAwOEEKKzoxMDM2RjAwMDNDMDEwODAwQUMyNTFEODAwQTAwMDRBODhFMDQwMDFDQjMKKzoxMDM3MDAwMDNDMDIwODAwOEM0MjFEODQyNDQyMDAwMTNDMDEwODAwNTgKKzoxMDM3MTAwMEFDMjIxRDg0MEEwMDA0QTdBQzYyMDAwMDAwMEExMTgwREMKKzoxMDM3MjAwMDAwNEExMDIxMDAwMjEwQzAwMDQzMjgyMThDQTMwMDAwOTEKKzoxMDM3MzAwMDAwNEMzODIxMjQ4NDAwMDEwMDAzMTk0MDAwQzkzMDIxQzUKKzoxMDM3NDAwMDAwNjkxODIxMDA0QjEwMjFBQ0E4MDAwMEFDNjAwMDE4RTMKKzoxMDM3NTAwMDNDMDEwODAwQUMyNDFEODRBQ0MyMDAxOEFDRTQwMDAwOUQKKzoxMDM3NjAwMDhFMDQwMDFDOEY4NTAwMzgwRTAwMDZFNzAyMjAzMDIxRjEKKzoxMDM3NzAwMDhGNjIwMDA0OEY0MzAxMDhBNjAyMDAwODNDMDIxMDAwN0IKKzoxMDM3ODAwMDAwNjIxODI0MTA2MDAwMDgwMDAwMDAwMDk3NDIwMTA0NDUKKzoxMDM3OTAwMDkyMDMwMDA3MjQ0MkZGRUMzNDYzMDAwMjMwNDVGRkZGMzAKKzoxMDM3QTAwMDBBMDAwNEJDQTIwMzAwMDc5NzQyMDEwNDI0NDJGRkYwNzAKKzoxMDM3QjAwMDMwNDVGRkZGOTYwNjAwMDgyQ0MyMDAxMzU0NDAwMDA1NTgKKzoxMDM3QzAwMDkyMDMwMDA3OTIwMjAwMDczNDQyMDAwMUEyMDIwMDA3QTAKKzoxMDM3RDAwMDkyMDMwMDA3MjQwMjAwMDExMDYyMDAwNTI0MDIwMDAzODYKKzoxMDM3RTAwMDEwNjIwMDBCMzBDN0ZGRkYwQTAwMDREQjI0RTIwMDAyNzYKKzoxMDM3RjAwMDhGODIwMDM4M0MwNEZGRkY4QzQzMDAwQzAwNjQxODI0QzcKKzoxMDM4MDAwMDAwNjUxODI1QUM0MzAwMEMwQTAwMDREQTMwQzdGRkZGM0UKKzoxMDM4MTAwMDhGODIwMDM4M0MwNEZGRkY4QzQzMDAxMDAwNjQxODI0QTIKKzoxMDM4MjAwMDAwNjUxODI1QUM0MzAwMTAzMEM3RkZGRjI0RTIwMDAyRkEKKzoxMDM4MzAwMDAwMDIxMDgzQTIwMjAwMDU4RjgzMDAzODMwNDIwMEZGOEYKKzoxMDM4NDAwMDAwMDIxMDgwMDA0MzMwMjE4Q0M1MDAwMDhDQzIwMDAwQjMKKzoxMDM4NTAwMDI0MDMwMDA0MDAwMjE3MDIxNDQzMDAxMzAwMDAwMDAwQjgKKzoxMDM4NjAwMDk3NDIwMTA0M0MwM0ZGRkYwMEEzMTgyNDMwNDJGRkZGRUUKKzoxMDM4NzAwMDAwNDcxMDIzMjQ0MkZGRkUwMDYyMjgyNUFDQzUwMDAwNEIKKzoxMDM4ODAwMDkyMDQwMDA1OEUwMzAwMUMzMDgyMDBGRjAwMDIxMDgwQUQKKzoxMDM4OTAwMDAwNDMxMDIxOTA0MjAwMDAzMDQyMDAwRjAwNDQxMDIxRUMKKzoxMDM4QTAwMDBBMDAwNTEwQTIwMjAwMDY4Q0M0MDAwNDk3NDIwMTA0MUQKKzoxMDM4QjAwMDk2MDMwMDBBMzA4NUZGRkYzMDQyRkZGRjAwNDcxMDIzQzgKKzoxMDM4QzAwMDI0NDJGRkQ2MDAwMjE0MDAwMEEyMjgyNUFDQzUwMDA0NDMKKzoxMDM4RDAwMDkyMDIwMDA3OTIwNDAwMDUyNDYzMDAyODAwMDMxODgzNjUKKzoxMDM4RTAwMDAwNjQxODIxMzQ0MjAwMDRBMjAzMDAwNkEyMDIwMDA3NkIKKzoxMDM4RjAwMDhGODIwMDA0MjQwM0ZGRkIzNDQyMDAwMjAwNDMxMDI0QTMKKzoxMDM5MDAwMEFGODIwMDA0OTIwMzAwMDY4RTA3MDAxQzhGODYwMDM4RTkKKzoxMDM5MTAwMDAwMDMxODgwMDA2NzEwMjE4QzQ0MDAwQzNDMDJGRkY2NjUKKzoxMDM5MjAwMDM0NDJGRkZGMDA4MjI4MjQwMDY2MTgyMUFFMDQwMDBDRjgKKzoxMDM5MzAwMEFDNjUwMDBDOTIwMzAwMDY4RTA0MDAwQzNDMDJGRjdGNzUKKzoxMDM5NDAwMDM0NDJGRkZGMDAwMzE4ODAwMEEyMjgyNDAwODIyMDI0QjQKKzoxMDM5NTAwMDAwNjcxODIxQUUwNDAwMENBQzY1MDAwQzkyMDIwMDA2NTIKKzoxMDM5NjAwMDAwMDIxMDgwMDA0NzEwMjE5NDQ1MDAxMkFDNDUwMDEwNjEKKzoxMDM5NzAwMDkyMDIwMDA2MDAwMjEwODAwMDQ2MTAyMUFDNDUwMDEwQTMKKzoxMDM5ODAwMDhGQTIwMDEwOTIwMzAwMDUwMDAyMTE0MDAwMDMxODgwNkUKKzoxMDM5OTAwMDAwNjcxODIxMDA1MzIwMjE4QzYyMDAwNDhDODMwMDE4REEKKzoxMDM5QTAwMDE0NjAwMDBFQUUwMjAwMTQzQzAzMDgwMDhDNjMxRDhDRjIKKzoxMDM5QjAwMEFDODMwMDE4M0MwMjA4MDA4QzQyMUQ5MDAwNjIxMDJCNjIKKzoxMDM5QzAwMDEwNDAwMDE5MDAwMDAwMDAzQzAyMDgwMDhDNDIxRDk0QzkKKzoxMDM5RDAwMDAwNjIxMDIxM0MwMTA4MDBBQzIyMUQ4QzhFMDIwMDE4RjAKKzoxMDM5RTAwMDhGNDgwMDIwMDAwMDMwMjEwMDAyMTFDMDEyMjAwMDBCN0YKKzoxMDM5RjAwMEFGNDIwMDIwM0MwMjAwMDgwMzQyMjgyMTAwRTAyMDIxQzEKKzoxMDNBMDAwMDhDODIwMDAwMjRDNjAwMDEwMEQxMTgyQkFDQTIwMDAwNUIKKzoxMDNBMTAwMDI0ODQwMDA0MTQ2MEZGRkEyNEE1MDAwNEFGNDgwMDIwQTkKKzoxMDNBMjAwMDBBMDAwNTVFMjQwMjAwMTAwMDAwMDAwMDAwMDAwMDBERTYKKzoxMDNBMzAwMDAwMDAwMDAwMjQwMDAyRDQyNDAyMDAxMEE3NDIwMTQwMkMKKzoxMDNBNDAwMDI0MDIwMDAyQTc0MDAxNDJBNzQwMDE0NEE3NDIwMTQ2QzgKKzoxMDNBNTAwMDk3NDIwMTA0M0MwNDAwMDgyNDQyRkZGRUE3NDIwMTQ4QUIKKzoxMDNBNjAwMDI0MDIwMDAxMEUwMDAyMEFBNzQyMDE0QTk2MDMwMDBBM0UKKzoxMDNBNzAwMDkyMDIwMDA0MDA0MzEwMjEyNDQyMDAwMjMwNDIwMDA3NTkKKzoxMDNBODAwMDAwMDIxMDIzMzA0MjAwMDcwRTAwMDIzM0FFMDIwMDEwODUKKzoxMDNBOTAwMDhGNjIwMDAwM0MwMzA4MDA4QzYzMDQ0NDI0MDQwMDEwN0YKKzoxMDNBQTAwMEFGODIwMDA4OTc0MjAxMDQzMDQyRkZGRjI0NDJGRkZFMkMKKzoxMDNBQjAwMDAwNDAzODIxMDAwMjM3QzMzQzAyMDgwMDhDNDIwNDQwMTkKKzoxMDNBQzAwMDAwNjcxODIxMDA2NzI4MkIwMDQ2MTAyMTAwNDUxMDIxQUYKKzoxMDNBRDAwMDNDMDEwODAwQUMyMzA0NDQzQzAxMDgwMEFDMjIwNDQwMzMKKzoxMDNBRTAwMDBBMDAwNjYyMDAwMDAwMDAxNEEwMDAwNTAwMDAwMDAwQUIKKzoxMDNBRjAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMzA0OEUKKzoxMDNCMDAwMDhGNDIwMTc4MDQ0MEZGRkUwMDAwMDAwMDBFMDAwMjNCREYKKzoxMDNCMTAwMDI3QTQwMDE0MTQ0MDAwMDUwMDQwODAyMTAwMDAwMDAwOEMKKzoxMDNCMjAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDMwQjkyMDYwMDA0QkEKKzoxMDNCMzAwMDhGQTQwMDE0MjdBNTAwMTgwMDA2MzA4MjBFMDAwMjVDMzYKKzoxMDNCNDAwMEFGQTAwMDE4NTA0MDAwMDY4RTAyMDAwMDAwMDAwMDAwRTgKKzoxMDNCNTAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDMxMThFMDIwMDAwOTAKKzoxMDNCNjAwMDU0NDAwMDA2OTIwMjAwMDcwMDAwMDAwMDAwMDAwMDBEMTMKKzoxMDNCNzAwMDAwMDAwMDAwMjQwMDAzMTY5MjAyMDAwNzMwNDIwMDA0RjcKKzoxMDNCODAwMDEwNDAwMDA1OEY4MjAwMDQyNDAzRkZGQjM0NDIwMDAyMzIKKzoxMDNCOTAwMDAwNDMxMDI0QUY4MjAwMDQ4RjYyMDAwNDA0NDMwMDA5MzQKKzoxMDNCQTAwMDkyMDIwMDA3OTIwMjAwMDY4RTAzMDAxQzhFMDQwMDBDOTUKKzoxMDNCQjAwMDAwMDIxMDgwMDA0MzEwMjFBQzQ0MDAwQ0FFMDAwMDAwNTUKKzoxMDNCQzAwMDkyMDIwMDA3MzA0MjAwMDQ1NDQwMDAwQjkyMDMwMDA0QUMKKzoxMDNCRDAwMDkyMDMwMDA1OEUwNDAwMTQ4RTA1MDAxQzAwMDMxODgwNUIKKzoxMDNCRTAwMDNDMDIwMDAxMDA4MjIwMjEwMDY1MTgyMUFFMDQwMDE0NkYKKzoxMDNCRjAwMEFDNjQwMDA0OTIwMzAwMDQ5NjAyMDAwQTAwNjIxMDIxRTMKKzoxMDNDMDAwMDI0NDIwMDA1MDAwMjkwODM4RkEyMDAxODEwNDAwMDBEOEUKKzoxMDNDMTAwMDI3NzEwMDA4OEZBNDAwMTQwMDAzMTA4MjAyNDIzMDIzOTEKKzoxMDNDMjAwMDI3QTUwMDE4MEUwMDAyNUNBRkEyMDAxODUwNDAwMDA2NDUKKzoxMDNDMzAwMDhFMDUwMDFDMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwQzgKKzoxMDNDNDAwMDI0MDAwMzNGOEUwNTAwMUMwMjIwMjAyMTBFMDAwNkU3MDEKKzoxMDNDNTAwMDAyNDAzMDIxOTIwNDAwMDY4RjY1MDAwNDNDMDI3RkZGODEKKzoxMDNDNjAwMDAwMDQyMDgwMDA5MTIwMjE4QzgzMDAwNDM0NDJGRkZGNTcKKzoxMDNDNzAwMDAwQTIyODI0MDA2NTE4MjFBQzgzMDAwNDkyMDIwMDA3RUEKKzoxMDNDODAwMDkyMDMwMDA0OTIwNTAwMDUzMDQyMDAwNDEwNDAwMDE0MjUKKzoxMDNDOTAwMDk2MDcwMDA4MzBBNTAwRkYwMDA1Mjg4MDAwQjEyODIxMDQKKzoxMDNDQTAwMDhDQTQwMDA0OTc0MjAxMDQ5NjA2MDAwQTMwNjMwMEZGQ0EKKzoxMDNDQjAwMDMwNDJGRkZGMDA0MzEwMjEwMDQ2MTAyMTMwRTNGRkZGOTgKKzoxMDNDQzAwMDAwNDMxMDIzMjQ0MkZGRDgzMDg0RkZGRjAwMDIxNDAwNzkKKzoxMDNDRDAwMDAwODIyMDI1QUNBNDAwMDQwQTAwMDYxNjkyMDMwMDA3MDcKKzoxMDNDRTAwMDMwQTUwMEZGMDAwNTI4ODAwMEIxMjgyMThDQTQwMDAwMjkKKzoxMDNDRjAwMDk3NDIwMTA0MzA2MzAwRkYzMDQyRkZGRjAwNDMxMDIxNzAKKzoxMDNEMDAwMDAwNDcxMDIzM0MwM0ZGRkYwMDgzMjAyNDMwNDJGRkZGQzUKKzoxMDNEMTAwMDAwODIyMDI1QUNBNDAwMDA5MjAzMDAwNzI0MDIwMDAxQzkKKzoxMDNEMjAwMDEwNjIwMDA2MDAwMDAwMDAyNDAyMDAwMzEwNjIwMDExNkYKKzoxMDNEMzAwMDAwMDAwMDAwMEEwMDA2Mzk4RTAzMDAxMDk3NDIwMTA0QkIKKzoxMDNENDAwMDkyMDMwMDA0OTYwNTAwMEE4RTI0MDAwQzAwNDMxMDIxMDMKKzoxMDNENTAwMDAwNDUxMDIxMjQ0MkZGRjIzQzAzRkZGRjAwODMyMDI0OTIKKzoxMDNENjAwMDMwNDJGRkZGMDA4MjIwMjVBRTI0MDAwQzBBMDAwNjM5RjUKKzoxMDNENzAwMDhFMDMwMDEwOTc0MjAxMDQ5MjAzMDAwNDk2MDUwMDBBODYKKzoxMDNEODAwMDhFMjQwMDEwMDA0MzEwMjEwMDQ1MTAyMTI0NDJGRkVFMzQKKzoxMDNEOTAwMDNDMDNGRkZGMDA4MzIwMjQzMDQyRkZGRjAwODIyMDI1RTgKKzoxMDNEQTAwMEFFMjQwMDEwOEUwMzAwMTAyNDAyMDAwQUE3NDIwMTQwMzYKKzoxMDNEQjAwMEE3NDMwMTQyOTYwMzAwMEE5MjAyMDAwNDNDMDQwMDQwMUIKKzoxMDNEQzAwMDAwNDMxMDIxQTc0MjAxNDRBNzQwMDE0Njk3NDIwMTA0NDUKKzoxMDNERDAwMEE3NDIwMTQ4MjQwMjAwMDEwRTAwMDIwQUE3NDIwMTRBM0MKKzoxMDNERTAwMDBFMDAwMjMzMDAwMDAwMDA4RjYyMDAwMDkyMDMwMDA0MDYKKzoxMDNERjAwMDAwMDAyMDIxQUY4MjAwMDg5NzQyMDEwNDk2MDYwMDBBQzUKKzoxMDNFMDAwMDMwNDJGRkZGMDA2MjE4MjEwMDYwMjgyMTNDMDMwODAwQjcKKzoxMDNFMTAwMDhDNjMwNDQ0M0MwMjA4MDA4QzQyMDQ0MDAwNjUxODIxNzUKKzoxMDNFMjAwMDAwNDQxMDIxMDA2NTM4MkIwMDQ3MTAyMTNDMDEwODAwOTgKKzoxMDNFMzAwMEFDMjMwNDQ0M0MwMTA4MDBBQzIyMDQ0MDkyMDQwMDA0N0EKKzoxMDNFNDAwMDAwODYyMDIxMjQ4NDAwMEEzMDg0RkZGRjBFMDAwMUU3NTEKKzoxMDNFNTAwMDAwMDAwMDAwOTc0NDAxMDQzMDg0RkZGRjBFMDAwMUY1Q0MKKzoxMDNFNjAwMDAwMDAwMDAwM0MwMjEwMDBBRjQyMDE3ODBBMDAwNkQ0QjYKKzoxMDNFNzAwMDhGODIwMDIwMTQ4MjAwMjczMDYyMDAwNjk3NDIwMTA0REUKKzoxMDNFODAwMDEwNDAwMDY3M0MwMjQwMDAzMDYyNDAwMDEwNDAwMDA1RDYKKzoxMDNFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwMTUKKzoxMDNFQTAwMDI0MDAwNDFBOEY0MjAxNzgwNDQwRkZGRTI0MDIwODAwMTcKKzoxMDNFQjAwMEFGNDIwMTc4MjQwMjAwMDhBNzQyMDE0MEE3NDAwMTQyMTYKKzoxMDNFQzAwMDhGODIwMDA0OTc0MzAxMDQzMDQyMDAwMTEwNDAwMDA3MzQKKzoxMDNFRDAwMDMwNzBGRkZGMjYwM0ZGRkUyNDAyMDAwMkE3NDIwMTQ2QzYKKzoxMDNFRTAwMEE3NDMwMTQ4MEEwMDA2OEMyNDAyMDAwREE3NDAwMTQ2QTIKKzoxMDNFRjAwMDI0MDIwMDBEQTc0MjAxNEE4RjYyMDAwMDI0MDQwMDA4M0EKKzoxMDNGMDAwMEFGODIwMDA4MEUwMDAxRTcwMDAwMDAwMDBBMDAwNjY2MEMKKzoxMDNGMTAwMDAyMDAyMDIxMTA0MDAwNDIzQzAyNDAwMDkzNjIwMDAwNTkKKzoxMDNGMjAwMDMwNDMwMEYwMjQwMjAwMTAxMDYyMDAwNTI0MDIwMDcwRUIKKzoxMDNGMzAwMDEwNjIwMDM1OEY4MjAwMjAwQTAwMDZENTI0NDIwMDAxNUQKKzoxMDNGNDAwMDhGNjIwMDAwOTc0MzAxMDQzMDUwRkZGRjMwNzFGRkZGODQKKzoxMDNGNTAwMDhGNDIwMTc4MDQ0MEZGRkUzMjAyMDAwNzAwMDIxMDIzNjYKKzoxMDNGNjAwMDMwNDIwMDA3MjQwMzAwMEEyNjA0RkZGRUE3NDMwMTQwNTUKKzoxMDNGNzAwMEE3NDIwMTQyQTc0NDAxNDRBNzQwMDE0NkE3NTEwMTQ4NzYKKzoxMDNGODAwMDhGNDIwMTA4MzA0MjAwMjAxNDQwMDAwMjI0MDMwMDA5M0YKKzoxMDNGOTAwMDI0MDMwMDAxQTc0MzAxNEEwRTAwMDIwQTNDMDQwMDQwMkEKKzoxMDNGQTAwMDBFMDAwMjMzMDAwMDAwMDAzQzA3MDgwMDhDRTcwNDQ0QzgKKzoxMDNGQjAwMDAyMTExMDIxMjQ0MkZGRkUzQzA2MDgwMDhDQzYwNDQwN0EKKzoxMDNGQzAwMDAwNDAxODIxMDBFMzM4MjEwMDAwMTAyMThGNjUwMDAwMTcKKzoxMDNGRDAwMDAwRTM0MDJCMDBDMjMwMjEyNjA0MDAwODAwQzgzMDIxMzUKKzoxMDNGRTAwMDMwODRGRkZGQUY4NTAwMDgzQzAxMDgwMEFDMjcwNDQ0ODMKKzoxMDNGRjAwMDNDMDEwODAwQUMyNjA0NDAwRTAwMDFFNzAwMDAwMDAwNzAKKzoxMDQwMDAwMDBBMDAwNjY2MDIyMDIwMjEwRTAwMDEzOTAwMDAwMDAwOEYKKzoxMDQwMTAwMDhGODIwMDIwMjQ0MjAwMDFBRjgyMDAyMDNDMDI0MDAwMzkKKzoxMDQwMjAwMEFGNDIwMTM4MEEwMDAzMzYwMDAwMDAwMDMwODRGRkZGNzEKKzoxMDQwMzAwMDMwQTVGRkZGMDAwMDE4MjExMDgwMDAwNzAwMDAwMDAwREQKKzoxMDQwNDAwMDMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxNjcKKzoxMDQwNTAwMDBBMDAwNkREMDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxOEEKKzoxMDQwNjAwMDEwQzAwMDA2MjRDNkZGRkY4Q0EyMDAwMDI0QTUwMDA0OTcKKzoxMDQwNzAwMEFDODIwMDAwMEEwMDA2RTcyNDg0MDAwNDAzRTAwMDA4ODQKKzoxMDQwODAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwODEKKzoxMDQwOTAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGNzcKKzoxMDQwQTAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMEEKKzowNDQwQjAwMDAwMDAwMDAxMEIKKzowQzQwQjQwMDBBMDAwMDJBMDAwMDAwMDAwMDAwMDAwMENDCis6MTA0MEMwMDAwMDAwMDAwRDc0Nzg3MDM1MkUzMDJFMzA2QTMzMDAwMEY5Cis6MTA0MEQwMDAwNTAwMDAwMDAwMDAwMDBBMDAwMDAxMzYwMDAwRUE2MDUwCis6MTA0MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTA0MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0MTEwMDAwMDAwMDAwMDAwMDAwMDE2MDAwMDAwMDAwMDAwMDAwMDg5Cis6MTA0MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTA0MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTA0MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTM4OEQ0Cis6MTA0MTUwMDAwMDAwMDAwMDAwMDAwNURDMDAwMDAwMDAwMDAwMDAwMDdFCis6MTA0MTYwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDIyCis6MTA0MTcwMDAzQzAyMDgwMDI0NDIzODYwM0MwMzA4MDAyNDYzM0IxNERFCis6MTA0MTgwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNEJCCis6MTA0MTkwMDAzQzFEMDgwMDM3QkQ3RkZDMDNBMEYwMjEzQzEwMDgwMDQ3Cis6MTA0MUEwMDAyNjEwMDBBODNDMUMwODAwMjc5QzM4NjAwRTAwMDQwNzVECis6MTA0MUIwMDAwMDAwMDAwMDAwMDAwMDBEOEY4NjAwM0MzQzAzOTAwMEQyCis6MTA0MUMwMDAzQzAyODAwMDAwODYyODI1MDBBMzIwMjVBQzQ0MDAyMDY2Cis6MTA0MUQwMDAzQzAzODAwMDhDNjcwMDIwMDRFMEZGRkUwMDAwMDAwMDJDCis6MTA0MUUwMDAwM0UwMDAwODAwMDAwMDAwMEEwMDAwNDEyNDA0MDAwMTcwCis6MTA0MUYwMDA4Rjg1MDAzQzNDMDQ4MDAwMzQ4MzAwMDEwMEEzMTAyNTFGCis6MTA0MjAwMDAwM0UwMDAwOEFDODIwMDIwMDNFMDAwMDgwMDAwMTAyMTU5Cis6MTA0MjEwMDAzMDg0RkZGRjMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTQ5Cis6MTA0MjIwMDAzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTg1Cis6MTA0MjMwMDAxNDgwRkZGQjAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTA3Cis6MTA0MjQwMDAxMEMwMDAwNzAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjgxCis6MTA0MjUwMDAyNEE1MDAwNEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNEU5Cis6MTA0MjYwMDAwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkU2Cis6MTA0MjcwMDBBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRkU4Cis6MTA0MjgwMDAyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwOEEzCis6MTA0MjkwMDAwMDAwMDAwMDkwQUEwMDMxOEZBQjAwMTA4Q0FDMDA0MEYxCis6MTA0MkEwMDAzQzAzMDBGRjhENjgwMDA0QUQ2QzAwMjA4Q0FEMDA0NDIxCis6MTA0MkIwMDAwMEUwNjAyMTM0NjJGRkZGQUQ2RDAwMjQ4Q0E3MDA0ODUwCis6MTA0MkMwMDAzQzA5RkYwMDAxMDlDMDI0QUQ2NzAwMjg4Q0FFMDA0Q0ZBCis6MTA0MkQwMDAwMTgyQzgyNDAzMTk3ODI1QUQ2RjAwMDRBRDZFMDAyQzRGCis6MTA0MkUwMDA4Q0FEMDAzODMxNEEwMEZGQUQ2RDAwMUM5NEE5MDAzMjNFCis6MTA0MkYwMDAzMTI4RkZGRkFENjgwMDEwOTBBNzAwMzBBNTYwMDAwMkQ0Cis6MTA0MzAwMDBBMTYwMDAwNEExNjcwMDAwOTBBMzAwMzIzMDYyMDBGRkFBCis6MTA0MzEwMDAwMDAyMTk4MjEwNjAwMDA1MjQwNTAwMDExMDY1MDAwRURFCis6MTA0MzIwMDAwMDAwMDAwMDAzRTAwMDA4QTE2QTAwMDE4Q0Q4MDAyODBBCis6MTA0MzMwMDAzNTRBMDA4MEFENzgwMDE4OENDRjAwMTRBRDZGMDAxNEEyCis6MTA0MzQwMDA4Q0NFMDAzMEFENkUwMDA4OENDNDAwMkNBMTZBMDAwMTM4Cis6MTA0MzUwMDAwM0UwMDAwOEFENjQwMDBDOENDRDAwMUNBRDZEMDAxOEFFCis6MTA0MzYwMDA4Q0M5MDAxNEFENjkwMDE0OENDODAwMjRBRDY4MDAwODI1Cis6MTA0MzcwMDA4Q0M3MDAyMEFENjcwMDBDOENDMjAwMTQ4QzgzMDA3MEM5Cis6MTA0MzgwMDAwMDQzQzgyQjEzMjAwMDA3MDAwMDAwMDA4Q0MyMDAxNDVCCis6MTA0MzkwMDAxNDRDRkZFNDAwMDAwMDAwMzU0QTAwODAwM0UwMDAwOEYwCis6MTA0M0EwMDBBMTZBMDAwMThDODIwMDcwMEEwMDAwQjcwMDAwMDAwMEMyCis6MTA0M0IwMDA5MDg5MDAzMDI3QkRGRkY4OEZBODAwMUNBM0E5MDAwMDNBCis6MTA0M0MwMDA4RkEzMDAwMDNDMERGRjgwMzVBMkZGRkY4Q0FDMDAyQ0JBCis6MTA0M0QwMDAwMDYyNTgyNEFGQUIwMDAwQTEwMDAwMDQwMEMwNTgyMUM3Cis6MTA0M0UwMDBBN0EwMDAwMjhEMDYwMDA0MDBBMDQ4MjEwMTY3QzgyMTkzCis6MTA0M0YwMDA4RkE1MDAwMDAwODA1MDIxM0MxOEZGN0YwMzJDMjAyNjUxCis6MTA0NDAwMDAzQzBFMDBGRjJDOEMwMDAxMzcwRkZGRkYzNUNERkZGRjY2Cis6MTA0NDEwMDAzQzAyRkYwMDAwQUZDODI0MDBFREMwMjQwMEMyNzgyNDk1Cis6MTA0NDIwMDAwMDBDMURDMDAzMjM2ODI1MDFGODcwMjVBRDBEMDAwMEE4Cis6MTA0NDMwMDBBRDBFMDAwNDhEMjQwMDI0QUZBRDAwMDBBRDA0MDAwOEQzCis6MTA0NDQwMDA4RDJDMDAyMDI0MDRGRkZGQUQwQzAwMEM5NTQ3MDAzMjlBCis6MTA0NDUwMDAzMEU2RkZGRkFEMDYwMDEwOTE0NTAwNDgzMEEyMDBGRjk2Cis6MTA0NDYwMDAwMDAyMTlDMjUwNjAwMDAxOEQyNDAwMzRBRDA0MDAxNDE0Cis6MTA0NDcwMDA4RDQ3MDAzODhGQUEwMDE4MjdCRDAwMDhBRDBCMDAyODEzCis6MTA0NDgwMDBBRDBBMDAyNEFEMDcwMDFDQUQwMDAwMkNBRDAwMDAxOEUzCis6MTA0NDkwMDAwM0UwMDAwOEFEMDAwMDIwMjdCREZGRTBBRkIyMDAxODI4Cis6MTA0NEEwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUM5MDk4MDAzMDQ3Cis6MTA0NEIwMDAwMEMwODgyMTNDMEQwMEZGMzMwRjAwN0ZBMENGMDAwMDFCCis6MTA0NEMwMDA5MDhFMDAzMTM1QUNGRkZGM0MwQUZGMDBBMENFMDAwMTBBCis6MTA0NEQwMDA5NEE2MDAxRUEyMjAwMDA0OENBQjAwMTQ4RTI5MDAwNEI4Cis6MTA0NEUwMDAwMEEwODAyMTAxNkMyODI0MDEyQTQwMjQwMDgwOTAyMTEyCis6MTA0NEYwMDAwMTA1MjAyNUE2MjYwMDAyQUUyNDAwMDQyNjA1MDAyMDgyCis6MTA0NTAwMDAyNjI0MDAwODBFMDAwMDYzMjQwNjAwMDI5MjQ3MDAzMEIzCis6MTA0NTEwMDAyNjA1MDAyODI2MjQwMDE0MDAwNzFFMDAwMDAzMTYwM0E5Cis6MTA0NTIwMDAyNDA2MDAwNDA0NDAwMDAzMjQwM0ZGRkY5NjU5MDAzMkQwCis6MTA0NTMwMDAzMzIzRkZGRjBFMDAwMDYzQUUyMzAwMTAyNjI0MDAyNDY3Cis6MTA0NTQwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDA1Cis6MTA0NTUwMDAyNDA1MDAwMzAwMDAzMDIxMEEwMDAwNkQyN0JEMDAyMDYzCis6MTA0NTYwMDAyN0JERkZEOEFGQjEwMDFDQUZCMDAwMThBRkJGMDAyMDBGCis6MTA0NTcwMDA5MEE5MDAzMDI0MDIwMDAxMDBFMDUwMjEzMTIzMDAzRkM3Cis6MTA0NTgwMDAwMEEwNDAyMThGQjAwMDQwMDA4MDg4MjEwMEMwNDgyMTU5Cis6MTA0NTkwMDAxMDYyMDAxNDhGQTcwMDM4MjQwQjAwMDUwMEEwMjAyMTEyCis6MTA0NUEwMDAwMEMwMjgyMTEwNkIwMDEzMDIwMDMwMjEwRTAwMDBGOTFBCis6MTA0NUIwMDAwMDAwMDAwMDkyMjUwMDdDMzBBNDAwMDIxMDgwMDAwMzVGCis6MTA0NUMwMDAyNjAzMDAzMEFFMDAwMDMwMjYwMzAwMzQ4RkJGMDAyMEU5Cis6MTA0NUQwMDA4RkIxMDAxQzhGQjAwMDE4MDA2MDEwMjEwM0UwMDAwOEFDCis6MTA0NUUwMDAyN0JEMDAyODBFMDAwMDc4QUZCMDAwMTAwQTAwMDE0MDdGCis6MTA0NUYwMDAwMDAwMDAwMDhGQTMwMDNDMDEwMDIwMjEwMTIwMjgyMUExCis6MTA0NjAwMDAwMTQwMzAyMUFGQTMwMDEwMEUwMDAwQkZBRkIwMDAxNDc2Cis6MTA0NjEwMDAwQTAwMDE0MDAwMDAwMDAwM0MwNTgwMDA4Q0EzMEUxMDQxCis6MTA0NjIwMDA4Rjg0MDA0NEFDODMwMDIwOENBMjBFMTgwM0UwMDAwOEE1Cis6MTA0NjMwMDBBQzgyMDAyNDNDMDU4MDAwOENBMzBFMTQ4Rjg0MDA0NEJGCis6MTA0NjQwMDBBQzgzMDAyMDhDQTIwRTFDMDNFMDAwMDhBQzgyMDAyNDg2Cis6MTA0NjUwMDA5MzgyMDAwQzEwNDAwMDFCMjQ4MzAwMEYyNDA0RkZGMDAxCis6MTA0NjYwMDAwMDY0MzgyNDEwRTAwMDE5OTc4QjAwMTA5Nzg0MDAwRTI2Cis6MTA0NjcwMDA5Mzg5MDAwRDNDMEE2MDFDMEEwMDAxN0IwMTY0NDAyMzAxCis6MTA0NjgwMDAwMTAzNzAyMTAwNjQyODIzMTEyNjAwMDIzMUMyRkZGRkJDCis6MTA0NjkwMDAzMEEyRkZGRjAwNDczMDJCNTBDMDAwMEUwMEU0NDgyMTNECis6MTA0NkEwMDA4RDREMDAwQzMxQTNGRkZGMDAwMzY0MDAwMDBDMkMwM0IwCis6MTA0NkIwMDAwNEExRkZGMzAwMDAzMDIxMzA2MzdGRkYwQTAwMDE3MzgzCis6MTA0NkMwMDAyNDA2MDAwMTAzRTAwMDA4MDAwMDAwMDA5Nzg0MDAwRUFCCis6MTA0NkQwMDAwMEU0NDgyMTMxMjNGRkZGMzE2OEZGRkYwMDY4MzgyQkQ5Cis6MTA0NkUwMDA1NEUwRkZGOEE3ODMwMDBFOTM4QTAwMEQxMTQwMDAwNUU3Cis6MTA0NkYwMDAyNDBGMDAwMTAwNkJDMDIzQTM4MDAwMEQwM0UwMDAwODFECis6MTA0NzAwMDBBNzk4MDAwRTAwNkJDMDIzQTM4RjAwMEQwM0UwMDAwOEU0Cis6MTA0NzEwMDBBNzk4MDAwRTAzRTAwMDA4MDAwMDAwMDAyN0JERkZFODk2Cis6MTA0NzIwMDBBRkIwMDAxMDMwODRGRkZGM0MxMDgwMDA5M0E4MDAyQjM2Cis6MTA0NzMwMDBBRkJGMDAxNEE2MDQwMTQ0OTYwQTBFMTYzMEM2MDBGRjRGCis6MTA0NzQwMDA4RkE5MDAzMEE2MEEwMTQ2QUUwNTAxNDhBMjA2MDE1MjEzCis6MTA0NzUwMDBBNjA4MDE1QUFFMDcwMTYwOEZBMzAwMkNBNjA5MDE1OEQ0Cis6MTA0NzYwMDAwMTIwMjAyMTBFMDAwMTY3QUUwMzAxNTQzQzAyMTAwMDFECis6MTA0NzcwMDBBRTAyMDE3ODhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODc0Cis6MTA0NzgwMDAyN0JEMDAxODhGODUwMDAwMjQ4NDAwMDcyN0JERkZGODhGCis6MTA0NzkwMDAzMDg0RkZGODNDMDY4MDAwOTRDQjAwOEEzMTZBRkZGRjJBCis6MTA0N0EwMDBBRkFBMDAwMDhGQTkwMDAwMDEyNTQwMjMyNTA3RkZGRkM1Cis6MTA0N0IwMDAzMEUzMUZGRjAwNjQxMDJCMTQ0MEZGRjcwMDA1Njg4MkYwCis6MTA0N0MwMDAwMDBEMjg4MDM0Q0M0MDAwMDBBQzEwMjEwM0UwMDAwODJDCis6MTA0N0QwMDAyN0JEMDAwODhGODIwMDAwMjQ4NjAwMDczMEM1RkZGODNGCis6MTA0N0UwMDAwMEEyMTgyMTMwNjQxRkZGMDNFMDAwMDhBRjg0MDAwMDFFCis6MTA0N0YwMDA4Rjg1MDA0NDhGOEEwMDNDMjdCREZGQjAzQzA0ODAwMEI5Cis6MTA0ODAwMDBBRkI3MDA0NEFGQjQwMDM4QUZCMTAwMkNBRkJGMDA0ODIxCis6MTA0ODEwMDBBRkI2MDA0MEFGQjUwMDNDQUZCMzAwMzRBRkIyMDAzMDJDCis6MTA0ODIwMDBBRkIwMDAyODhDODcwMTA0OENBOTAwMjRBQzhBMDA4MERBCis6MTA0ODMwMDA4Q0E4MDAyMDAwRTk4ODIzMDAwMEI4MjFBQzg4MEUxMDY1Cis6MTA0ODQwMDA4Q0E2MDAyNDAwMDBBMDIxQUM4NjBFMTg4QzgyMEUxMENECis6MTA0ODUwMDBBQzgyMEUxNDhDODMwRTE4QUM4MzBFMUMxMjIwMDBGQjRECis6MTA0ODYwMDAzQzE2ODAwMDkzNkIwMDA4MTE2MDAwRjEwMDAwMDAwMDBFCis6MTA0ODcwMDA5NzZFMDAxMDMxQ0RGRkZGMDIyRDYwMkIxNTgwMDBFQ0VDCis6MTA0ODgwMDAwMDAwMDAwMDk3NzAwMDEwMzIwRkZGRkZBRUNGMEUwMDQ3Cis6MTA0ODkwMDAzQzA1ODAwMDhDQjMwMDAwMzI3MjAwMDgxMjQwRkZGRDFFCis6MTA0OEEwMDAwMDAwMDAwMDk0QjUwRTA4OENBNzBFMDQzMkE1RkZGRjhGCis6MTA0OEIwMDAzMEI0MDAwMTEyODAwMEUxMDAwMDAwMDAwMDAwMDAwRDkzCis6MTA0OEMwMDAzMEI5QTA0MDI0MTgwMDQwMTMzODAxMTczMEI0QTAwMEJDCis6MTA0OEQwMDAxMjgwMDBEQzAwMDAwMDAwOTM3MzAwMDgxMjYwMDAwOEUyCis6MTA0OEUwMDAwMDAwMDAwMDk3NjkwMDEwMzEyMkZGRkYwMEUyMjAyQjNBCis6MTA0OEYwMDAxMDgwMDAwMzMwQTYwMDQwMTBDMDAwRDIwMDAwMDAwMDZECis6MTA0OTAwMDBBNzg1MDA0MEFGODcwMDM4OTM2QTAwMDgwMjIwMzgyMTRECis6MTA0OTEwMDBBRkIxMDAyMDE1NDAwMEYxMjdCNDAwMjBBRjYwMDAwQ0JCCis6MTA0OTIwMDA5Nzg1MDA0MDMwQjE0MDAwMTYyMDAwMDIyNDAzMDAxNjk1Cis6MTA0OTMwMDAyNDAzMDAwRTI0MTU0MDA3QTM2MzAwMEFBRjc1MDAxNDdBCis6MTA0OTQwMDA5MzkwMDA0MjhGNkYwMDE0MzIxOTAwMDEwMDE5QzI0MDg5Cis6MTA0OTUwMDAwMUY4NDAyNUFGNjgwMDE0OTc4NzAwNDA4RjYzMDAxNDZBCis6MTA0OTYwMDAzMEVFMDAxMDAwNkU2ODI1QUY2RDAwMTQ5NzhDMDA0MDhCCis6MTA0OTcwMDAzMThCMDAwODExNjAwMTY1MDAwMDAwMDA4RjY1MDAxNDk0Cis6MTA0OTgwMDAzQzBCMTAwMDNDMEE4MDAwMDBBQjg4MjVBRjcxMDAxNDdFCis6MTA0OTkwMDA5NTQ2MEUwQTNDMDk4MTAwMjQxMzAwMEUzMEMyRkZGRjI5Cis6MTA0OUEwMDAwMDQ5MjAyNUFGNjQwMDA0QTM3MzAwMDI5MzdGMDAwQTJFCis6MTA0OUIwMDAzNDA2RkZGQzI3RjIwMDA0QTM3MjAwMEE5NzhEMDA0MDIyCis6MTA0OUMwMDAzMUFDMjAwMDExODAwMTU3MDAwMDAwMDAzQzA3ODAwMDNFCis6MTA0OUQwMDA5NzhEMDA0MDk0RUMwRTBDOTc5MTAwNDAwMDBENTg0MkNBCis6MTA0OUUwMDAzMTg1QzAwMDMxNkEwMDAzMDAwNTEzMDMzMjI5MTAwMDJECis6MTA0OUYwMDAwMTQyOTgyNTAwMDkyMjAzMDI2NEY4MjUwMDFGOTBDMDk3Cis6MTA0QTAwMDBBNzcyMDAxMjk3OTUwMDQwOTM3OTAwMEEwMDE1ODE4MkUxCis6MTA0QTEwMDAzMjE4MDAzQzAzMTk3ODIxMjVFODAwM0NBMzY4MDAwOUZFCis6MTA0QTIwMDA5NEVFMEUwQzMxQzMzRkZGQTc2MzAwMTA5NzYzMDAxMjkyCis6MTA0QTMwMDA5MzY3MDAwOTAwRTM3MDIxMjVDRDAwMDIzMUFDMDAwNzI3Cis6MTA0QTQwMDAwMDBDNTgyMzMxNjUwMDA3QTM2NTAwMEI5MzcxMDAwOTIyCis6MTA0QTUwMDA5NzY0MDAxMjk3NkEwMDEwMzIyMjAwRkY4RjkxMDAzODhECis6MTA0QTYwMDA5NzlGMDA0MDAwNDQ0ODIxMDEyQTk4MjEwMjY2OTAyMTI2Cis6MTA0QTcwMDAzM0Y1MDA0MDEyQTAwMDA1MzI0NkZGRkYwMEQxNDAyQjY1Cis6MTA0QTgwMDAzQzEyODAwMDExMDAwMDE2MDAwMDk4MjEwMjI2NzgyQkFECis6MTA0QTkwMDAxNUUwMDEzNjhGQTcwMDIwM0MxODgwMDA4RjEwMEUxNEZGCis6MTA0QUEwMDAzQzA1ODAwMEFGMTAwRTEwOEYxOTBFMUNBRjE5MEUxOEE4Cis6MTA0QUIwMDBBRjA2MEUwMDhDQjIwMDAwMzI1NTAwMDgxMkEwRkZGREI4Cis6MTA0QUMwMDAwMDAwMDAwMDk0QkYwRTA4MDBDMDg4MjEwMDAwOTAyMTYzCis6MTA0QUQwMDBBNzlGMDA0MDhDQTYwRTA0MjQxMzAwMDFBRjg2MDAzODY3Cis6MTA0QUUwMDA5NzY5MDAxMDMxMzVGRkZGOEU4QzAwMDAwMTkxMjAyMzYzCis6MTA0QUYwMDAxMDgwMDExOEFFODQwMDAwOTM2NzAwMDgxNEUwMDBEODBECis6MTA0QjAwMDAwMDAwMDAwMDBFMDAwMUI0MjQwNDAwMTA4RjhFMDA0ODQ1Cis6MTA0QjEwMDAzQzAzMzIwMDAwNDAyODIxMzFDNjAwRkYwMDA2M0MwMDYzCis6MTA0QjIwMDAwMEUzNjAyNTI1Q0QwMDAxQUY4RDAwNDhBQzRDMDAwMEFFCis6MTA0QjMwMDA5MzYyMDAwOTk3NjQwMDEyOTM3RjAwMEEzMDRBMDBGRkQ1Cis6MTA0QjQwMDAzMDhCRkZGRjAxNEI0ODIxMDAwOUNDMDAzM0YwMDBGRjAwCis6MTA0QjUwMDAwMzMwQzAyNUFDQjgwMDA0OEY4RjAwNDg5Nzg4MDA0MDEwCis6MTA0QjYwMDAzMTAzMjAwMDEwNjAwMTAzQUNBRjAwMDg5NzZGMDAxMjAyCis6MTA0QjcwMDAzMUU4RkZGRjA2NDAwMTAxQUNBODAwMEM5NzkwMDA0MDBGCis6MTA0QjgwMDAzMjA1MDAwODE0QTAwMDAyMjYyODAwMDYyNjI4MDAwMjhDCis6MTA0QjkwMDAzQzA0ODAwMDk0OEIwRTE0OEM4NTBFMUM4RjY3MDAwNERGCis6MTA0QkEwMDA5MzZBMDAwMjMxNjRGRkZGMzE0OTAwRkZBRkE5MDAxMDkyCis6MTA0QkIwMDA4RjdGMDAxNEFGQTgwMDE4QUZCRjAwMTQwRTAwMDE5QTM5Cis6MTA0QkMwMDAwMDAwMDAwMDI0MDQwMDEwMEUwMDAxQzgwMDAwMDAwMEQ2Cis6MTA0QkQwMDA4RTkyMDAwMDE2NDAwMDA1MDAwMDAwMDA4Rjc5MDAxNDNFCis6MTA0QkUwMDAyNDA1RkZCRjAzMjVBMDI0QUY3NDAwMTQ4RjY5MDAwQ0I3Cis6MTA0QkYwMDAwMTM1RjgyMUFGN0YwMDBDOTM3NTAwMDgxNkEwMDAwODVFCis6MTA0QzAwMDAwMDAwMDAwMDEyNjAwMDA2MDAwMDAwMDA4RjZCMDAxNDFFCis6MTA0QzEwMDAzQzBDRUZGRjM1ODRGRkZFMDE2NDUwMjRBRjZBMDAxNEEyCis6MTA0QzIwMDBBMzczMDAwODhGQTcwMDIwMEEwMDAzMTYwMjIwMjAyMThBCis6MTA0QzMwMDBBRUQxMEUwMDBBMDAwMUY4M0MwNTgwMDAxNEUwRkYyMTBGCis6MTA0QzQwMDAzMEI5QTA0MDBFMDAwMTYwMDAwMEEwMjEyRTkxMDAwMUFCCis6MTA0QzUwMDAwMjM3QjAyNTEyQzAwMDE3OEZCRjAwNDg4Rjg1MDAzQzc3Cis6MTA0QzYwMDAyNDE3MEYwMDEwQjcwMENEM0MwNDgwMDA4Qzk5MDE3ODA4Cis6MTA0QzcwMDAwNzIwRkZGRTI0MTUwRjAwNTBCNTAwRUIzQzA0ODAwMDE4Cis6MTA0QzgwMDA4Qzg5MEUxNDI0MDUwMjQwM0MxNDEwMDBBQzg5MDE0NEE4Cis6MTA0QzkwMDA4QzlGMEUxQ0FDOUYwMTQ4QTA4MDAxNTJBNDgwMDE1QTM5Cis6MTA0Q0EwMDBBQzgwMDE2MEE0ODAwMTU4QUM4NTAxNTRBQzk0MDE3OEJCCis6MTA0Q0IwMDA4RkJGMDA0ODhGQjcwMDQ0OEZCNjAwNDA4RkI1MDAzQ0NGCis6MTA0Q0MwMDA4RkI0MDAzODhGQjMwMDM0OEZCMjAwMzA4RkIxMDAyQzE2Cis6MTA0Q0QwMDA4RkIwMDAyODAzRTAwMDA4MjdCRDAwNTA4RjkxMDAzOEY2Cis6MTA0Q0UwMDA5NzkzMDA0MDNDMTI4MDAwMDIyMEE4MjEzMjZBMDA0MEM1Cis6MTA0Q0YwMDAxNTQwRkY3RDAwMDA5ODIxOTc2QjAwMTA4Rjg1MDAzOENDCis6MTA0RDAwMDAzMTYyRkZGRjEwNDUwMEEyMDAwMDIwMjEwMDgwQTAyMTk5Cis6MTA0RDEwMDAxMDgwMDBFNTAwRTA4ODIxMTYyMEZFRDIwMDAwMDAwMDhGCis6MTA0RDIwMDAwQTAwMDJFNzJFOTEwMDAxM0MwMzgwMDA4QzdGMDE3ODhECis6MTA0RDMwMDAwN0UwRkZGRTI0MDQwODAwOEY4NjAwMDBBQzY0MDE3OEMxCis6MTA0RDQwMDAzQzAzODAwMDk0NkMwMDhBMzE4QkZGRkYwMTY2NTAyMzg2Cis6MTA0RDUwMDAyNTQ5RkZGRjMxMjgxRkZGMkQwMjAwMDgxNDQwRkZGOUVECis6MTA0RDYwMDAwMDAwMDAwMDhGOEUwMDQ4MzQ2RjQwMDA4RjgzMDAzQ0FECis6MTA0RDcwMDAwMEUwQTAyMTI0MEQwRjAwMjVDNzAwMDFBRjg3MDA0OEU3Cis6MTA0RDgwMDAwMENGMzAyMTAyMzQ4ODIzM0MwODgwMDAzMUQ1MDBGRjU5Cis6MTA0RDkwMDAxMDZEMDAwNTI0MDcwMDAxOTM5MzAwNDIzMjcyMDAwMTU4Cis6MTA0REEwMDAwMDEyODI0MDM2MDcwMDAxMDAxNTE0MDAzQzA5MDEwMDgyCis6MTA0REIwMDAwMDQ5MjAyNUFDQzQwMDAwOEY5RjAwNDgzMEI5MDAzNjYwCis6MTA0REMwMDAzMEI4MDAwOEFDREYwMDA0MTMwMDAwOTAwMEY5OTgyNTBCCis6MTA0REQwMDA5NTA3MEUwQThGOEUwMDAwM0MwMzgxMDAzMEVERkZGRjI3Cis6MTA0REUwMDAyNUNCMDAwODAxQTMyODI1M0MwQzEwMDAzMTZBMUZGRkM5Cis6MTA0REYwMDAyNjkyMDAwNjI0MDYwMDBFQUQwNTAxNjAwMjZDOTgyNTdGCis6MTA0RTAwMDBBNTA2MDE1QUFGOEEwMDAwQTUxMjAxNTgxNjIwMDAwODE1Cis6MTA0RTEwMDAzQzEwODAwMDhGOTkwMDNDMjQxODBGMDA1MzM4MDAwMjhBCis6MTA0RTIwMDAyNDE3MDAwMTM2NzMwMDQwMEUwMDAxNTkzQzEwODAwMDI5Cis6MTA0RTMwMDA4RTFGMEUxNDAyNDAyMDIxQUUxRjAxNDQ4RTEyMEUxQzQ0Cis6MTA0RTQwMDBBRTEyMDE0OEEyMTUwMTUyQUUxMzAxNTQwRTAwMDE2N0MzCis6MTA0RTUwMDAzQzE1MTAwMEFFMTUwMTc4MEEwMDAzMTkwMDAwMDAwMDhGCis6MTA0RTYwMDA5Mzc4MDAwOTk3NjMwMDEyOTM2ODAwMEIzMzBGMDBGRkRCCis6MTA0RTcwMDAwMUUzMzgyMTMxMDIwMEZGMDBFMjcwMjEyNUQwMDAwQTUxCis6MTA0RTgwMDAzMjEwRkZGRjBFMDAwMUI0MDIwMDIwMjE4Rjg2MDA0ODdGCis6MTA0RTkwMDAzQzE5NDEwMDNDMDc4MDAwMjRDRDAwMDFBRjhEMDA0ODQzCis6MTA0RUEwMDA5MzZDMDAwOTk3NjQwMDEyMzBDNjAwRkYzMThBMDBGRjNFCis6MTA0RUIwMDAzMDhCRkZGRjAxNEI0ODIxMDAwNjJDMDAyNTNGMDAwMkVDCis6MTA0RUMwMDAwMEJGQzAyNTAzMTk3ODI1QUM0RjAwMDA4RjY4MDAwQzg3Cis6MTA0RUQwMDA5NEVFMEUxNDAxMTIxODI1QUM0MzAwMDQ4Q0U1MEUxQzUwCis6MTA0RUUwMDA4RjY3MDAwNDkzNkQwMDAyMzFDNEZGRkYzMUFDMDBGRkY3Cis6MTA0RUYwMDBBRkFDMDAxMDhGNjIwMDE0QUZCMTAwMTgwRTAwMDE5QTIxCis6MTA0RjAwMDBBRkEyMDAxNDBBMDAwMkM1MDIwMDIwMjFBRjYwMDAwNDE1Cis6MTA0RjEwMDBBMzYwMDAwMjk3OEQwMDQwMzFBQzIwMDAxNTgwRkVBQkVECis6MTA0RjIwMDAwMDAwMzAyMUE3NjAwMDEyOTc5MDAwNDA5Mzc4MDAwQTlCCis6MTA0RjMwMDAzQzAzODAwMDMyMTkxRjAwMDAxOTc5ODMwMUY4NDAyMUQ5Cis6MTA0RjQwMDAyNTA3MDAyOEEzNjcwMDA5OTQ2RTBFMEMwQTAwMDI1RTc0Cis6MTA0RjUwMDBBNzZFMDAxMDhGNkUwMDE0MzVDRDAwNDAwRTAwMDE1OTcxCis6MTA0RjYwMDBBRjZEMDAxNDBBMDAwMjkxMDAwMDAwMDAwQTAwMDMxNjUxCis6MTA0RjcwMDAwMDAwMjAyMTA2NDFGRjAxQUNBMDAwMEM4Q0I4MDAwQzAxCis6MTA0RjgwMDAzQzE5ODAwMDAzMTk5MDI1MEEwMDAyQjJBQ0IyMDAwQzUzCis6MTA0RjkwMDAwMDAwOTAyMTBBMDAwMjhEMjQxMzAwMDExMjgwMDAwNUY4Cis6MTA0RkEwMDAzQzBEODAwMDk1QTYwRTA4MzBEMzAwNDAxMjYwMDA0MkYwCis6MTA0RkIwMDAwMDAwMDAwMDhDOTAwMTc4MDYwMEZGRkUwMDAwMDAwMDU5Cis6MTA0RkMwMDA5NDkyMEUxMDNDMDMwNTAwMjQwNzIwMDAzMjU4RkZGRjg2Cis6MTA0RkQwMDAwMzAzNzgyNUFDOEYwMTRDOEM4ODBFMTQzQzBFMTAwMDE2Cis6MTA0RkUwMDBBQzg4MDE0NDhDODIwRTFDQUM4MjAxNDhBMDgwMDE1MjI2Cis6MTA0RkYwMDBBNDgwMDE1QUFDODAwMTYwQTQ4MDAxNThBQzg3MDE1NEEwCis6MTA1MDAwMDBBQzhFMDE3ODBBMDAwMkVFM0MwNDgwMDA4RjkwMDAwMDE0Cis6MTA1MDEwMDAyNjkyMDAwMkE1MTIwMTU4MjYwRjAwMDgzMUU4MUZGRjUyCis6MTA1MDIwMDAwQTAwMDM1NkFGODgwMDAwQUM4MDAxNEMxMjgwMDAxOUMyCis6MTA1MDMwMDAwMDAwMDAwMDhDOEEwRTEwQUM4QTAxNDQ4QzgzMEUxODhDCis6MTA1MDQwMDAzQzBDODAwMDI0MTYwMDQwQUM4MzAxNDg4RkJGMDA0ODEwCis6MTA1MDUwMDBBMTgwMDE1MjhGQjcwMDQ0QTU4MDAxNUE4RkI1MDAzQzUyCis6MTA1MDYwMDBBRDgwMDE2MDhGQjQwMDM4QTU4MDAxNTg4RkIzMDAzNDQzCis6MTA1MDcwMDBBRDk2MDE1NDhGQjIwMDMwOEZCNjAwNDA4RkIxMDAyQzM2Cis6MTA1MDgwMDA4RkIwMDAyODNDMDQxMDAwMjdCRDAwNTAwM0UwMDAwODRBCis6MTA1MDkwMDBBRDg0MDE3ODhDOEIwRTE0QUM4QjAxNDQ4QzgzMEUxQzc4Cis6MTA1MEEwMDAwQTAwMDNFNDNDMEM4MDAwMEUwMDAxNjAyRTkxMDAwMTE4Cis6MTA1MEIwMDAwQTAwMDJFODAyMzdCMDI1MDAwMDAwMDAwMDAwMDAwREUxCis6MTA1MEMwMDAwMDAwMDAwMDI0MDAwMzNBMEEwMDAzQzAzQzA0ODAwMEYyCis6MTA1MEQwMDAyN0JERkZFMEFGQkYwMDFDM0MxRjIwRkYzQzA3NjAwMDY2Cis6MTA1MEUwMDAzQzA5ODAwMDI0MDIwMDEwMzdGOUZGRkRBQ0UyMzAwOEQzCis6MTA1MEYwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRDM5MEUwMDYwCis6MTA1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA1MTEwMDAwMDAwMDAwMDNDMTgwMEZGMzcxMkZGRkRBRDMyMEUwMDBBCis6MTA1MTIwMDAzQzBCNjAwNDhENzA1MDAwMjQxMUZGN0YzQzBFMDAwMjg4Cis6MTA1MTMwMDAwMjExNzgyNDM1RUMzODBDMzVDRDAxMDlBQ0VENEMxODUyCis6MTA1MTQwMDAyNDBBMDAwOUFENkM1MDAwOENFODA0MzhBRDJBMDAwODMwCis6MTA1MTUwMDBBRDIwMDAxNDhDRTU0QzFDMzEwNkZGRkYzOEM0MkY3MUM0Cis6MTA1MTYwMDAwMDA1MUUwMjMwNjIwMDBGMjQ4NkMwQjMxMDQwMDAwNzA1Cis6MTA1MTcwMDBBRjgyMDAwODhDRTU0QzFDM0MwOTAwMUYzNTI4RkMwMDYwCis6MTA1MTgwMDAwMEE4MTgyNDAwMDMyMUMyQUY4NDAwMDQ4Q0YxMDgwODkxCis6MTA1MTkwMDAzQzBGNTcwOTI0MTJGMDAwMDIzMjcwMjQzNUYwMDAxMDQxCis6MTA1MUEwMDAwMUQwNjAyNjAxQ0Y2ODI2MkRBQTAwMDEyRDhCMDAwMUI5Cis6MTA1MUIwMDAwMTRCMzgyNTUwRTAwMDA5QTM4MDAwMEMzQzAyNjAxQzI0Cis6MTA1MUMwMDA4QzU5MDAwODI0MUYwMDAxQTM5RjAwMEMzMzM4N0MwMDc5Cis6MTA1MUQwMDBBNzk4MDAxMEE3ODAwMDBFQTM4MDAwMERBRjgwMDA0OEE0Cis6MTA1MUUwMDAxNEMwMDAwM0FGODAwMDAwM0MwNjYwMDBBQ0MwNDQyQzNCCis6MTA1MUYwMDAwRTAwMDRCNjNDMTA4MDAwMEUwMDBEREYwMDAwMDAwMDIxCis6MTA1MjAwMDAzQzExMDgwMDI2MzEzOEM4M0MxMjA4MDAyNjUyMzk0OEEzCis6MTA1MjEwMDA4RTA1MDAwMDM4QTMwMDAxMzA2NDAwMDExNDgwRkZGQ0ZCCis6MTA1MjIwMDAwMDAwMDAwMDhFMDYwMTAwM0MwQzgwMEEyNDBBRkY4MDZBCis6MTA1MjMwMDAyNEM3MDI0MDMwRUIwMDdGMDE2QzQ4MjEwMEVBNDAyNDgzCis6MTA1MjQwMDBBRTA2MDAyMEFGODkwMDQ0QUUwODAwMjQzQzAzODAwMDc1Cis6MTA1MjUwMDBBRjg2MDAzQzhDNkQwMTc4MDVBMEZGRkUyNDE5MDgwMDg0Cis6MTA1MjYwMDBBQzc5MDE3ODkwNzgwMTA4QTM5ODAwNDI5MzhGMDA0MkFFCis6MTA1MjcwMDAzMUVFMDAwMTExQzAwMDBGMjQwRDBEMDAyNEMyRjgwMDEyCis6MTA1MjgwMDAyQzVGMDMwMTEzRTAwMDFDMDAwNjI5QzIyNEEzRkZGMEQ5Cis6MTA1MjkwMDAwMDAzMjA0MjAwMDQzMTQwMEUwMDAxQ0YwMEQxRDgyMThDCis6MTA1MkEwMDAzQzA0NDAwMDNDMDY4MDAwQUNDNDAxMzgwQTAwMDQ1N0FFCis6MTA1MkIwMDAwMDAwMDAwMDEwQ0QwMDI2MjQwRTBGMDAxMENFMDAyQUEyCis6MTA1MkMwMDAzQzAyODAwODM0NUYwMDgwOTNGOTAwMDAyNDBGMDA1MEY2Cis6MTA1MkQwMDAzMzM4MDBGRjE3MEZGRkYzM0MwNDQwMDAwRTAwMDkxMkEzCis6MTA1MkUwMDAwMDAwMDAwMDNDMDQ0MDAwM0MwNjgwMDBBQ0M0MDEzOEQzCis6MTA1MkYwMDAwQTAwMDQ1NzAwMDAwMDAwOEY4MzAwMDQwMEEzNDAyQjI1Cis6MTA1MzAwMDAxNTAwMDAwQjhGOEIwMDA4MDA2QjUwMjEyNTQ3RkZGRjE1Cis6MTA1MzEwMDAwMEU1NDgyQjE1MjAwMDA2MDBBMzYwMjMwMDBDMjk0MDVGCis6MTA1MzIwMDAwRTAwMDFDRjAwQjJEODIxMEEwMDA0N0MzQzA0NDAwMEVBCis6MTA1MzMwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDNBRDhDCis6MTA1MzQwMDAwRTAwMDFDRjAwMDAwMDAwMEEwMDA0N0MzQzA0NDAwMDc1Cis6MTA1MzUwMDAzQzFCMDgwMDI3N0IzQTQ4MEUwMDAxQ0YwMDAwMDAwMEVDCis6MTA1MzYwMDAwQTAwMDQ3QzNDMDQ0MDAwM0MxQjA4MDAyNzdCM0E2ODkwCis6MTA1MzcwMDAwRTAwMDFDRjAwMDAwMDAwMEEwMDA0N0MzQzA0NDAwMDQ1Cis6MTA1MzgwMDAwMDA0MTFDMDAzRTAwMDA4MjQ0MjAyNDAzQzA0MDgwMDZECis6MTA1MzkwMDAyNDg0M0FBQzI0MDUwMDFBMEEwMDAwNkQwMDAwMzAyMTc0Cis6MTA1M0EwMDAyN0JERkZFMEFGQkYwMDFDQUZCMjAwMThBRkIxMDAxNEMzCis6MTA1M0IwMDBBRkIwMDAxMDNDMTA4MDAwOTIwQjAxMDkyNDEyRkY4MDU2Cis6MTA1M0MwMDAwRTAwMDRCMzMxNjQwMDdGOEY5MTAwM0MwMDUxNTAyMUU2Cis6MTA1M0QwMDAwMTUyNDAyNEFFMDgwMDI0OTIwMzAxMDkwRTAwMDRCM0Q4Cis6MTA1M0UwMDAzMDY0MDA3RjI0MDYwMDgwMjQwNzAwQzAyNDA0MDA0MEFECis6MTA1M0YwMDBBRTAwMDgxMEFFMDQwODE0QUUwNjA4MThBRTA3MDgxQzZDCis6MTA1NDAwMDA5MjBDMDEwOTAwNTFGODIxMzNGODAwN0YzQzE5ODAwQTAxCis6MTA1NDEwMDAwMzE5MTAyMTMxODQwMDdGMEUwMDA0QjNBRjgyMDA0NEQxCis6MTA1NDIwMDA4RTExMDEwMDNDMEMwMDgwMzU4NTAwMDEwMjIyNzgyMTlDCis6MTA1NDMwMDAwMUYyNDgyNEFFMDkwODA0OEUwRTAxMDAzNTk4MDAwMkRFCis6MTA1NDQwMDAzNjA5MDkwMDAxQzI2ODIxMzFBQjAwNzgwMTY1NTAyNTk5Cis6MTA1NDUwMDBBRTBBMDgyMDhFMDUwMTAwOEUwODAxMDAzNjA1MDk4MDdECis6MTA1NDYwMDAwMTAyMTgyMTI0NjQwMDQwMDA5MjMwMjRBRTA2MDgwODhFCis6MTA1NDcwMDA4RTA3MDEwMDAwRTJGODIxMjdGOTAwNDAzMzMyMDA3ODVFCis6MTA1NDgwMDAwMjU4ODgyNUFFMTEwODI0OEUwNDAxMDA5NTJGMDAwQ0M3Cis6MTA1NDkwMDA4RkJGMDAxQzhGQjIwMDE4MzFFRUZGRkYwMDBFNjlDMEY1Cis6MTA1NEEwMDBBRTBEMDgwMEFFMEMwODI4OTUyQjAwMEM4RkIxMDAxNDJGCis6MTA1NEIwMDAzMTZBRkZGRjAwMEE0MUMwQUUwODAwMkM4Q0EzMDA1MEU3Cis6MTA1NEMwMDA4RkIwMDAxMDhDQTIwMDNDOEQyNDAwMDQ4Q0E2MDAxQzIwCis6MTA1NEQwMDA4Q0E3MDAzODI3QkQwMDIwQUY4MzAwNjBBRjgyMDA1MDRBCis6MTA1NEUwMDBBRjg0MDA0Q0FGODYwMDU4MDNFMDAwMDhBRjg3MDA1QzMzCis6MTA1NEYwMDAzQzBBMDgwMDkxNEEzQUQxM0MwOTA4MDA5NTI5M0FDQTY5Cis6MTA1NTAwMDAzQzA1MTEwMDAwMEEzQzAwMjUyODAwMDIwMEU4MzAyNTc3Cis6MTA1NTEwMDAwMEM1MTgyNTI0ODIwMDA4QUM4MzAwMDAwM0UwMDAwOEMxCis6MTA1NTIwMDBBQzgwMDAwNDNDMDk4MDAwMzUyODA5MDA5MTA3MDAxMTc3Cis6MTA1NTMwMDAyNDAyMDAyODAwODA1MDIxMzBFMzAwRkYwMEEwNjgyMUYxCis6MTA1NTQwMDAwMEMwNjAyMTEwNjIwMDAyMzQwQjg2REQyNDBCMDgwMENECis6MTA1NTUwMDAzQzA3ODAwMDM0RTIwQTlBOTQ0MzAwMDAzNEY4MEE5QzI1Cis6MTA1NTYwMDAzNEU2MEFBMDMwNzlGRkZGQUQ1OTAwMDA4RjBGMDAwMDJDCis6MTA1NTcwMDAzNEU4MEE4MDI0MDQwMDAxQUQ0RjAwMDQ4Q0NFMDAwMDAyCis6MTA1NTgwMDBBRDRFMDAwODkxMDUwMDE5MzBBMzAwMDMxMDY0MDA0NkQ5Cis6MTA1NTkwMDAyODY5MDAwMjE1MjAwMEI1MjQwNDAwMDIxMDY0MDA5MDYwCis6MTA1NUEwMDAyNDA1MDAwMzEwNjUwMDlCMzRFNDBBQTQzQzA5MDgwMEFDCis6MTA1NUIwMDA5NTI5M0FDMDI0MDcwODAwNTE2NzAwNTAzQzE4ODAwMDI0Cis6MTA1NUMwMDAzQzAyODAwMDM0NTkwOTAwOTMyODAwMTI5MzJFMDAxOUUwCis6MTA1NUQwMDAzNDU4MDk4MDMxMEYwMEZGOEYwNjAwMjgwMUVDMTgyMTk0Cis6MTA1NUUwMDAwMDAzMzg4MDMxMjRGRkZGMzFDQjAwRkYwMEU0MTAyMTlECis6MTA1NUYwMDAwMDBCMkQwMDAwQTZDMDI1MDAwMjdDMDAzQzA4NjAwMEM2Cis6MTA1NjAwMDAwMzA4MTgyNTM1RTkwNkZGQUQ0MzAwMDBBRDQ5MDAwNDQ1Cis6MTA1NjEwMDA4RjJFMDAyQzNDMDM4MDAwMzQ3ODA5M0NBRDRFMDAwOEVFCis6MTA1NjIwMDA4RjI3MDAzMDI1NDkwMDI4MzQ2RTA5MDBBRDQ3MDAwQzUzCis6MTA1NjMwMDA4RjJCMDAzNEFENEIwMDEwOEYyNDAwMzhBRDQ0MDAxNDg0Cis6MTA1NjQwMDA4RjI1MDAxQ0FENDUwMDE4OEYyMjAwMjBBRDQyMDAxQ0E0Cis6MTA1NjUwMDA4RjI2MDAyNDI1MjIwMDE0QUQ0NjAwMjA4RjI4MDAyODI0Cis6MTA1NjYwMDBBRDQ4MDAyNDhGMEYwMDAwQUQyRDAwMDRBRDJGMDAwMEM5Cis6MTA1NjcwMDA4QzY0MDEwQ0FEMjQwMDA4OTFDNzAwMTIzQzA1MDgwMEExCis6MTA1NjgwMDA5MEE1M0FEMEFEMjAwMDEwMzBFQjAwRkYwMTZDMzAyMTI2Cis6MTA1NjkwMDAwMDA2NkYwMDAwMDVDQzAwMDFCOTYwMjUzNThBRkZGRkM4Cis6MTA1NkEwMDAwM0UwMDAwOEFEMkEwMDBDM0MwOTA4MDA5NTI5M0FDMDI3Cis6MTA1NkIwMDAzQzE5MDgwMDk3MzkzQUNBMzRFMjBBQTQzQzA2MDgwMEFCCis6MTA1NkMwMDA5NEM2M0FCQzk0NEYwMDAwMzEyM0ZGRkYwMzIzQzAyMTRFCis6MTA1NkQwMDAwMzA2NzAyMzAwMEYzQzAwMjVDOEZGRjIwMEU4MjgyNUQwCis6MTA1NkUwMDAyNDA3MDgwMEFENDUwMDBDQUQ0MDAwMTBBRDRCMDAxNDgwCis6MTA1NkYwMDAxNTY3RkZCMzI1NEEwMDE4M0MxODgwMDAzNzA4MDkwMEQ5Cis6MTA1NzAwMDA5MTBGMDAxMTkxMDcwMDE5MzcwMzBBODAzMUVFMDBGRjU1Cis6MTA1NzEwMDAzQzE5MDgwMDk3MzkzQUM2OTQ2RjAwMkEwMDBFNTg4MjQ3Cis6MTA1NzIwMDAzMEU0MDBGRjk3ODcwMDU0MDAwQjE2MDAwMDA0MkMwMEEzCis6MTA1NzMwMDAzMTI2RkZGRjAzMjZDMDIxMDA0NTQ4MjUwMTM4NzAyNThBCis6MTA1NzQwMDAwMUU3NTgyMTNDMDM0MDAwMDFDMzIwMjUwMDBCMkMwMDM5Cis6MTA1NzUwMDBBRDQ0MDAwMEFENDUwMDA0OTEwMjAwMTgzQzA2MDAwNjZGCis6MTA1NzYwMDAzQzAzODAwMDAwMDJDRTAwMDMyNkMwMjVBRDU4MDAwODhGCis6MTA1NzcwMDA4RDBGMDAyQzM0NzgwOTNDMjRFOTAwMDFBRDRGMDAwQzVBCis6MTA1NzgwMDA4RDBCMDAxQzMxMkU3RkZGMjU0OTAwMTRBRDRCMDAxMEZFCis6MTA1NzkwMDA4RjBGMDAwMEFEMkQwMDA0QTc4RTAwNTRBRDJGMDAwMDI4Cis6MTA1N0EwMDA4QzY0MDEwQzM0NkUwOTAwMjUyMjAwMTRBRDI0MDAwODFECis6MTA1N0IwMDA5MUM3MDAxMjNDMDUwODAwOTBBNTNBRDBBRDIwMDAxMDFBCis6MTA1N0MwMDAzMEVCMDBGRjAxNkMzMDIxMDAwNjZGMDAwMDA1Q0MwMEJCCis6MTA1N0QwMDAwMUI5NjAyNTM1OEFGRkZGMDNFMDAwMDhBRDJBMDAwQ0ZGCis6MTA1N0UwMDAzNEU5MEFBNDk1MjQwMDAwOTUwMjAwMjgzQzA5MDgwMDI5Cis6MTA1N0YwMDA5NTI5M0FDMDAwMDQxQzAwMDAwMkNDMDAzNDc4ODEwMEQ2Cis6MTA1ODAwMDAwMzJCNzgyNUFENTgwMDBDQUQ0RjAwMTAwQTAwMDU0MDYxCis6MTA1ODEwMDAyNTRBMDAxNDNDMDkwODAwOTUyOTNBQzAzQzA1MDgwMEI3Cis6MTA1ODIwMDA5NEE1M0FDQTNDMDYwODAwOTRDNjNBQkM5NDk5MDAwMDc0Cis6MTA1ODMwMDAzMTIzRkZGRjk1MTgwMDI4MDBBMzEwMjEwMDQ2NzgyMzhDCis6MTA1ODQwMDAwMDE5M0MwMDAwMTg0NDAwMjVFRUZGRUUwMTBFMjgyNTRCCis6MTA1ODUwMDAzNEU0ODEwMEFENDQwMDBDQUQ0NTAwMTBBRDQwMDAxNEFGCis6MTA1ODYwMDBBRDRCMDAxODBBMDAwNTQwMjU0QTAwMUMxNDYwRkY0RjhDCis6MTA1ODcwMDAzNEU2MEFBNDk0Q0UwMDAwM0MwOTA4MDA5NTI5M0FDMEY5Cis6MTA1ODgwMDAwMDBFNDQwMDAxMEIzODI1QUQ0NzAwMEMwQTAwMDU0MDBFCis6MTA1ODkwMDAyNTRBMDAxMDAzRTAwMDA4MjQwMjA3RDAyN0JERkZFMERFCis6MTA1OEEwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzEyCis6MTA1OEIwMDAwRTAwMDA0RDAwODA4ODIxOEY4ODAwNTA4Rjg3MDA0QzlCCis6MTA1OEMwMDAzQzA1ODAwODM0QjIwMDgwMDExMTI4MjEzQzEwODAwMDgyCis6MTA1OEQwMDAyNDAyMDA4MDI0MDMwMEMwMDBBNzIwMjNBRTAyMDgxODgxCis6MTA1OEUwMDAzQzA2ODAwOEFFMDMwODFDMTg4MDAwMDRBRjg1MDA1MEY5Cis6MTA1OEYwMDBBQ0M1MDAwNDhDQzkwMDA0QUY4OTAwNEMxMjIwMDAwOTFCCis6MTA1OTAwMDAzNjA0MDk4MDBFMDAwNUY4MDAwMDAwMDA5MjRDMDAyN0M0Cis6MTA1OTEwMDA4RTBCMDA3NDAxODI1MDA0MDE0QjMwMjFBRTQ2MDAwQzA2Cis6MTA1OTIwMDAzNjA0MDk4MDhDOEUwMDFDOEY4RjAwNTgwMUNGNjgyM0FECis6MTA1OTMwMDAxOUEwMDAwNDhGQkYwMDFDOEM5MDAwMUNBRjkwMDA1ODcxCis6MTA1OTQwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEYxCis6MTA1OTUwMDAwQTAwMDA0RjI3QkQwMDIwOEY4NjAwNjA4RjgzMDA1MDEzCis6MTA1OTYwMDA4RjgyMDA0QzNDMDU4MDA4MzRBNDAwODBBQzg2MDA1MDM3Cis6MTA1OTcwMDBBQzgzMDAzQzAzRTAwMDA4QUNBMjAwMDQzQzAzMDgwMDM4Cis6MTA1OTgwMDA4QzYzMDA1NDI3QkRGRkY4MzA4NDAwRkYyNDYyMDAwMUJGCis6MTA1OTkwMDAzMEE1MDBGRjNDMDEwODAwQUMyMjAwNTQzMEM2MDBGRkQ3Cis6MTA1OUEwMDAzQzA3ODAwMDhDRTgwMTc4MDUwMEZGRkUzQzBBN0ZGRjgxCis6MTA1OUIwMDBBM0E0MDAwMzhGQTQwMDAwMzU0OUZGRkYwMDg5MTgyNDI5Cis6MTA1OUMwMDAwMDA2NDdDMDAwNjgxMDI1QUZBMjAwMDA5MEY5MDEwQTQ4Cis6MTA1OUQwMDBBM0EwMDAwMjNDMTg4MEZGQTNCOTAwMDE4RkFFMDAwMDE1Cis6MTA1OUUwMDAzMEFEMDA3RjM3MEZGRkZGMDFDRjU4MjQwMDBENjYwMDU4Cis6MTA1OUYwMDAzQzA5MDAyMDAxNkM1MDI1MzUyNjIwMDAyNDA1RkY4MDNECis6MTA1QTAwMDAzQzA0MTAwMDI3QkQwMDA4QUNFQTAxNENBQ0U2MDE1NDkwCis6MTA1QTEwMDBBNEUwMDE1OEEwRTUwMTUyMDNFMDAwMDhBQ0U0MDE3OERECis6MTA1QTIwMDAzMDg4MDBGRjNDMDM4MDAwMzBBNDAwRkY4QzYyMDE3OEM2Cis6MTA1QTMwMDAwNDQwRkZGRTAwMDAwMDAwM0MwMzgwMDAzNDY2MEEwMEMyCis6MTA1QTQwMDA4Q0NBMDAyMDM0NjcwOTgwMDAwNDQ4MkJBQzZBMDE0NEVBCis6MTA1QTUwMDA4Q0M1MDAyNDAwMDkxNTQwQUM2NTAxNDhBMDY4MDE1MEMwCis6MTA1QTYwMDA5MEU0MDA0Q0EwNjQwMTZEMDNFMDAwMDhBNDYwMDE1OEJDCis6MTA1QTcwMDAyN0JERkZFODMwODQwMEZGQUZCRjAwMTAwRTAwMDY1QkJCCis6MTA1QTgwMDAzMEE1MDBGRjhGODMwMDUwOEZCRjAwMTAzQzA1ODAwMEMxCis6MTA1QTkwMDAzNDQ2MDA0MDI0MDRGRjkwM0MwMjEwMDAyN0JEMDAxODRCCis6MTA1QUEwMDBBQ0EzMDE0Q0EwQTQwMTUyQUNBNjAxNTQwM0UwMDAwODMxCis6MTA1QUIwMDBBQ0EyMDE3ODI3QkRGRkUwM0MwODgwMDhBRkJGMDAxQzA2Cis6MTA1QUMwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAzNTEwMDA4MEI1Cis6MTA1QUQwMDA4RTA2MDAxODNDMDc4MDAwMzA5MjAwRkYwMEM3MjAyNThBCis6MTA1QUUwMDBBRTA0MDAxODBFMDAwMDREMzBCMTAwRkY5MjAzMDAwNTE3Cis6MTA1QUYwMDAzNDYyMDAwODBFMDAwMDRGQTIwMjAwMDUwMjQwMjAyMTdGCis6MTA1QjAwMDAwRTAwMDY2RjAyMjAyODIxMDI0MDIwMjE4RkJGMDAxQ0JBCis6MTA1QjEwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAwNTVCCis6MTA1QjIwMDAyNDA2MDAwMTBBMDAwNjMyMjdCRDAwMjAzQzA1ODAwMDQzCis6MTA1QjMwMDAzNEEzMDk4MDkwNjYwMDA4MzBDMjAwMDgxMDQwMDAwRkFFCis6MTA1QjQwMDAzQzBBMDEwMTM1NDkwODBBQUM4OTAwMDA4Q0E4MDA3NEEwCis6MTA1QjUwMDBBQzg4MDAwNDNDMDcwODAwOTBFNzNBRDAzMEU1MDAxMDFDCis6MTA1QjYwMDA1MEEwMDAwOEFDODAwMDA4M0MwRDgwMDgzNUFDMDA4MEQ3Cis6MTA1QjcwMDA4RDhCMDA1OEFDOEIwMDA4MjQ4NDAwMEMwM0UwMDAwOEQ3Cis6MTA1QjgwMDAwMDgwMTAyMTBBMDAwNkIyMjQ4NDAwMEMyN0JERkZFODIzCis6MTA1QjkwMDAzQzA4ODAwMEFGQjAwMDEwQUZCRjAwMTQzNTA2MDk4MDhDCis6MTA1QkEwMDA5MEM3MDAwOTI0MDIwMDA2MzUwOTA5MDAzMEUzMDBGRjEwCis6MTA1QkIwMDAwMDgwODAyMTAwQTA2MDIxMjQwQjAwMDQxMDYyMDA3OTg1Cis6MTA1QkMwMDAyNDA3MDAwMjk0Q0YwMDVDM0MwRTAyMDQzMUVERkZGRjdECis6MTA1QkQwMDAwMUFFNTAyNUFFMEEwMDAwOTBDNTAwMDgzMEE0MDAyMDk4Cis6MTA1QkUwMDAxMDgwMDAwODAwMDAwMDAwOTBDMjAwNEUzQzFGMDEwMzFFCis6MTA1QkYwMDAzN0Y5MDMwMDMwNTgwMEZGMDMxOTMwMjUyNDBCMDAwODQzCis6MTA1QzAwMDBBRTA2MDAwNDkxMzkwMDExOTEyNjAwMTI5MTI0MDAxMTcyCis6MTA1QzEwMDAzMzM4MDBGRjAwMTg3MDgyMzBDRjAwRkYwMUNGNTAyMUQxCis6MTA1QzIwMDAwMTRDNjgyMTMwODgwMEZGMzFBQUZGRkYzOTAzMDAyOEFBCis6MTA1QzMwMDAwMDBBMjg4MDE0NjAwMDJCMDIwNTQwMjM5MTI0MDAxMkUyCis6MTA1QzQwMDAzQzBFODAwMDM1RDkwOTgwMzA4NTAwRkYwMEFDMTgyMTVBCis6MTA1QzUwMDAwMDAzMTA4MDAwNEJGODIxMDAxRjg0MDAzNjA5MDZGRjY2Cis6MTA1QzYwMDBBRDA5MDAwNDM1QzkwOTAwOTEyNjAwMTE5MTJGMDAxMkQ5Cis6MTA1QzcwMDAwMDBCQzA4MjhGMkIwMDM0MzFFRDAwRkY4REM0MDEwQzZFCis6MTA1QzgwMDAwMUFDMjgyMTAwQjgxMDIxMDE2NEY4MjMwMDA3ODQwMDJBCis6MTA1QzkwMDAwMDAyMUYwMDAwNzBDODI1MzNFOUZGRkYzMENGMDBGQzcxCis6MTA1Q0EwMDAwMzI5NzAyNTAxNTgyMDIxMDFFODY4MjEwMDA0NTA4MDUzCis6MTA1Q0IwMDBBREFFMDAwQzBFMDAwMDREMDEwQTgwMjEzQzA3ODAwOEFCCis6MTA1Q0MwMDAyNDBDMDAwNDM0RUIwMDgwMEUwMDAwNEZBMTZDMDAwOThFCis6MTA1Q0QwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEY1Cis6MTA1Q0UwMDAyN0JEMDAxODkxMjUwMDExOTEyMzAwMTkzQzE4MDgwMEM4Cis6MTA1Q0YwMDA5NzE4M0FDNjMwQTIwMEZGMDAwMkY4ODIzMDcwMDBGRjA5Cis6MTA1RDAwMDAwMDFGQ0UwMDAwMTA0QzAwMDMyOTMwMjUwMEQ4NzAyNTVDCis6MTA1RDEwMDAzQzBGNDAwMDAxQ0Y2ODI1M0MwRTgwMDBBRDBEMDAwMDE3Cis6MTA1RDIwMDAzNUM5MDkwMDkxMjYwMDExOTEyRjAwMTIzNUQ5MDk4MDNCCis6MTA1RDMwMDAwMDBCQzA4MjMxRUQwMEZGOEYyQjAwMzQ4REM0MDEwQ0FECis6MTA1RDQwMDAwMUFDMjgyMTAwQjgxMDIxMDE2NEY4MjMwMDA3ODQwMDY5Cis6MTA1RDUwMDAwMDAyMUYwMDAwNzBDODI1MzNFOUZGRkYzMENGMDBGQ0IwCis6MTA1RDYwMDAwMzI5NzAyNTAxNTgyMDIxMDFFODY4MjEwMDA0NTA4MDkyCis6MTA1RDcwMDBBREFFMDAwQzBFMDAwMDREMDEwQTgwMjEzQzA3ODAwOEVBCis6MTA1RDgwMDAyNDBDMDAwNDM0RUIwMDgwMEUwMDAwNEZBMTZDMDAwOUNECis6MTA1RDkwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODM0Cis6MTA1REEwMDAyN0JEMDAxODBBMDAwNkM0MjQwNzAwMTIyN0JERkZEMDMzCis6MTA1REIwMDBBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUNBRkIwMDAxMEVCCis6MTA1REMwMDBBRkJGMDAyOEFGQjIwMDE4QUZCMTAwMTQzQzA2ODAwMDhFCis6MTA1REQwMDA5MEMzMDEwQjMwOTMwMEZGMzBCNDAwRkYzMDYyMDAzMEZECis6MTA1REUwMDAwMDAwQTgyMTEwNDAwMDgyMDAwMDgwMjEzNEM0MDk4MEY2Cis6MTA1REYwMDA5MDg4MDAwODAwMDgzRTAwMDAwNzJFMDMwNEEwMDBBOUI4Cis6MTA1RTAwMDAyNDA0MDAwNDhGODcwMDUwM0MwMTA4MDBBMDI0M0FEMEVECis6MTA1RTEwMDAzQzBDODAwMEFEODAwMDQ4M0MwMzgwMDA5MDZFMDEwQjdDCis6MTA1RTIwMDAzMUM1MDAyMDEwQTAwMDA3M0MwQzgwMDAzNDc4MDk4MEE4Cis6MTA1RTMwMDA5MzEyMDAwODAwMTI4RTAwMDAxMTdFMDMwNUUwMDBBRUYwCis6MTA1RTQwMDAzQzAyODAwODkxOEIwMTBCMzU4NjA5ODA5MEM0MDAwOEM0Cis6MTA1RTUwMDAzMTZBMDA0MDAwMEE0ODJCMzA4ODAwMDgyNDExMDAwM0YyCis6MTA1RTYwMDAxNTAwMDAwMjAwRTk5MDIzMDAwMDg4MjEzQzAzODAwMDE3Cis6MTA1RTcwMDAzNDc4MEE4MDM0NkEwOTAwOTcwNzAwMkM5MTQ0MDAxMTk1Cis6MTA1RTgwMDA5MTQ5MDAxMjkzMDUwMDE4MzA5RjAwRkYzMTI4MDBGRjUwCis6MTA1RTkwMDAwMjI4MTAyMTAwMDJDODgwOTMwRDAwMTgwMzNGNzgyMUNBCis6MTA1RUEwMDAwMUYwNzAyMTMwQjAwMEZGMDFEMDE4MjFBNzg3MDA1NDA1Cis6MTA1RUIwMDAzQzAxMDgwMEE0MkUzQUM2M0MwMTA4MDBBNDIzM0FDOEJECis6MTA1RUMwMDAxNUEwMDAwMzI0NkIwMDBBMDAwMDAwMEQyNDZCMDAwQURCCis6MTA1RUQwMDAzMTcwRkZGRjNDMDEwODAwQTQyMzNBQ0EzQzAxMDgwMENFCis6MTA1RUUwMDBBNDIwM0FDMDNDMDEwODAwQTQyMDNBQkMwRTAwMDFCNDMyCis6MTA1RUYwMDAwMjAwMjAyMTBFMDAwNTBGMDA0MDIwMjEwMDQwMjAyMTNCCis6MTA1RjAwMDAwMjQwMjgyMTBFMDAwNTFDMDIyMDMwMjEwRTAwMDY5RUIyCis6MTA1RjEwMDAwMDQwMjAyMTE2QTAwMDVGMDA0MDIwMjEwRTAwMDFDODkzCis6MTA1RjIwMDAwMjAwMjAyMTNDMTEwODAwOTIzMTNBRDAzMjM1MDAwM0EyCis6MTA1RjMwMDAxMkEwMDAxNjNDMEE4MDA4OEY4NzAwNTAzQzBFODAwODkzCis6MTA1RjQwMDAzNUNEMDA4MDI0RUMwMDAxQURBQzAwM0MzQzA1ODAwODYwCis6MTA1RjUwMDA4Q0E2MDAwNDAxODAyMDIxMDBDQzkwMjMxQTQwMDAwMjZFCis6MTA1RjYwMDBBRjhDMDA1MDhDQTQwMDA0MEUwMDA1RjhBQ0E0MDAwNDEzCis6MTA1RjcwMDAzQzE5ODAwMDhGMzgwMDc0M0MwRjgwMDgzNUYwMDA4MDk5Cis6MTA1RjgwMDAwMDU4MjgyMUFFMDUwMDBDM0MwQTgwMDgzNTQyMDA4MEVDCis6MTA1RjkwMDAwMjYwMjAyMTAyODAyODIxQTA0MDAwNkIwRTAwMDY1QkQ5Cis6MTA1RkEwMDAzQzEzODAwMDhGODQwMDUwMzQ1RjAwMDZBRTY0MDE0Q0M3Cis6MTA1RkIwMDA4Rjg4MDA0ODNDMTQxMDAwOEZCNTAwMjQyNTA5MDAwMThCCis6MTA1RkMwMDBBRjg5MDA0ODhGQjIwMDE4QTI2ODAxNTI4RkIxMDAxNDQ3Cis6MTA1RkQwMDBBRTdGMDE1NDhGQjAwMDEwQUU3NDAxNzg4RkJGMDAyOERGCis6MTA1RkUwMDA4RkI0MDAyMDhGQjMwMDFDMDNFMDAwMDgyN0JEMDAzMEYxCis6MTA1RkYwMDAzNEMzMDk4MDkwNkYwMDA4MDAwRjc2MDAwMDBFNkUwMzE2Cis6MTA2MDAwMDAwNUEwMDAzMzM0QzIwOTAwOTA1OTAwMUIyNDFGMDAxMDYyCis6MTA2MDEwMDAzQzAxMDgwMEEwM0YzQUQwMzMzODAwMDIxMzAwRkY3RTU1Cis6MTA2MDIwMDA4Rjg3MDA1MDhGODMwMDVDMTQ2N0ZGN0MzQzAzODAwMEU3Cis6MTA2MDMwMDAwRTAwMDA0RDAwMDAwMDAwM0MwOTgwMDgzNTI1MDA4MDVFCis6MTA2MDQwMDA5MEE0MDAwOTI0MDcwMDE2MzA4ODAwRkYxMTA3MDAwREY2Cis6MTA2MDUwMDAwMDAwMDAwMDkwQTYwMDA5M0MwQzA4MDA5MThDM0FEMDhBCis6MTA2MDYwMDAyNDBBMDAwODMwQzQwMEZGMzU4QjAwMDEzQzAxMDgwMDAxCis6MTA2MDcwMDBBMDJCM0FEMDEwOEEwMDJGMjQwRDAwMEExMDhEMDAyODgyCis6MTA2MDgwMDAyNDAyMDAwQzBFMDAwMDRGMDAwMDAwMDAwQTAwMDc1OTE3Cis6MTA2MDkwMDA4Rjg3MDA1MDBFMDAwNkI2MDIyMDI4MjEwQTAwMDc5QUJBCis6MTA2MEEwMDAwMDAwMDAwMDNDMEI4MDA4MzU2QTAwODA4RDQ3MDA1NERBCis6MTA2MEIwMDA4Q0M5MDEwQzExMjBGRjU0QUY4NzAwNTAyNDA2MDAxNDM2Cis6MTA2MEMwMDAzQzAxMDgwMEEwMjYzQUQwMEEwMDA3NTgzQzBDODAwMDhBCis6MTA2MEQwMDA5MDcxMDAwODI0MTIwMDAyM0MwMTA4MDBBMDMyM0FEMDVFCis6MTA2MEUwMDAzMjMwMDAyMDEyMDAwMDBCMjQxNTAwMDE4Rjg3MDA1MDcxCis6MTA2MEYwMDAwQTAwMDc1OTI0MTAwMDA4MzQ1OTAwODA4RjIzMDAzODAzCis6MTA2MTAwMDBBQzQzMDAwNDhDNUYwMDA0QUYzRjAwM0MwQTAwMDc2NDBFCis6MTA2MTEwMDAzQzBDODAwMDhGODcwMDUwMEEwMDA3NTkyNDEwMDAwNEFGCis6MTA2MTIwMDBBMEEyMDAwOTBFMDAwMDRGMDAwMDAwMDAwQTAwMDc1OTVECis6MTA2MTMwMDA4Rjg3MDA1MDI0MDIwMDE0MEEwMDA4MUNBMEEyMDAwOTQ2Cis6MTA2MTQwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAzQzEwODAwMEM3Cis6MTA2MTUwMDA5MjAyMDEwOTI0MDUwMDAxMEUwMDA2NUIzMDQ0MDBGRjk1Cis6MTA2MTYwMDAzQzFGODAwODkzRjgwMDBFMzdFMzAwODA5M0Y5MDAwRjdFCis6MTA2MTcwMDA5MDZFMDAyNjkzRTkwMDBBMzMyRjAwRkYwMDE4NjYwMDk2Cis6MTA2MTgwMDAwMDBGNkMwMDMxQ0IwMEZGMDE4RDUwMjUwMDBCMzIwMDU5Cis6MTA2MTkwMDAwMTQ2MzgyNTMxMjgwMEZGMzQ0NTYwMDAwMEU4MjAyNUZECis6MTA2MUEwMDAyNDAyRkY4MTNDMDMxMDAwQUUwNDAxNEM4RkJGMDAxNDk5Cis6MTA2MUIwMDBBRTA1MDE1NEEyMDIwMTUyQUUwMzAxNzg4RkIwMDAxMDY3Cis6MTA2MUMwMDAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTgzMDg0MDBGRjZBCis6MTA2MUQwMDBBRkJGMDAxMDBFMDAwNjVCMzBBNTAwRkYzNDQ2MDA0MDQ0Cis6MTA2MUUwMDAzQzA0ODAwMDI0MDVGRjkyQUM4NjAxNTRBMDg1MDE1MjM2Cis6MTA2MUYwMDA4RjgzMDA1MDhGQkYwMDEwM0MwMjEwMDAyN0JEMDAxODk1Cis6MTA2MjAwMDBBQzgzMDE0QzAzRTAwMDA4QUM4MjAxNzgyN0JERkZEOEM1Cis6MTA2MjEwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMDk0Cis6MTA2MjIwMDBBRkIzMDAxQzNDMDc4MDAwOTBFMjAxMDkzMDg2MDBGRkZDCis6MTA2MjMwMDAzMEIwMDBGRjAwMDYxOEMyMzIwNDAwMDIzMDcxMDAwMUM1Cis6MTA2MjQwMDAxNDgwMDAwNzMwNTIwMEZGM0MwOTgwMDgzNTMzMDA4MDdECis6MTA2MjUwMDA5MjY4MDAwNTMxMDUwMDA4MTBBMDAwMEMzMENBMDAxMDNCCis6MTA2MjYwMDAwMjQwMjAyMTBFMDAwNjgwMDIyMDI4MjEyNDAyMDAwMTg1Cis6MTA2MjcwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEE1Cis6MTA2MjgwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgxNTQwMDAzMDQzCis6MTA2MjkwMDAzNEU1MEEwMDhDQjkwMDI0OENCODAwMDgxMzM4MDA0Nzk0Cis6MTA2MkEwMDAwMDAwNDAyMTNDMEU4MDA4MzVEMzAwODA5MjZEMDA2OENDCis6MTA2MkIwMDAyNDBCMDAwMjMxQUMwMEZGMTE4QjAwODAzQzA2ODAwMEYzCis6MTA2MkMwMDA5MjdGMDA0QzkwQzQwMTA5NTA5RjAwMDQzMjEzMDA3QzVGCis6MTA2MkQwMDAxMTAwMDA2NzAwMDAwMDAwMzIxMzAwN0MxNjYwMDA1QUI1Cis6MTA2MkUwMDAwMjQwMjAyMTE2MjAwMDA4MzIwQzAwMDEzQzA3ODAwMEVCCis6MTA2MkYwMDAzNEVCMEEwMDhENjUwMDI0OENFODAxMDQxNEE4RkZEQzRGCis6MTA2MzAwMDAwMDAwMTAyMTMyMEMwMDAxMTE4MDAwMEQwMjQwMjAyMUZDCis6MTA2MzEwMDAzQzEwODAwMDhFMEUwMTBDOEY4RDAwNjAxMUNEMDAwOEE2Cis6MTA2MzIwMDAwMDAwMDAwMDBFMDAwNzNFMDIyMDI4MjE4RTBGMDEwQzA1Cis6MTA2MzMwMDAzQzE4ODAwODM3MTAwMDgwQUUwRjAwNTAwMjQwMjAyMTJBCis6MTA2MzQwMDAwRTAwMDY2RjAyMjAyODIxMEEwMDA4NkYyNDAyMDAwMUI3Cis6MTA2MzUwMDAzQzA3MDgwMDhDRTcwMDY0MjRFNjAwMDEzQzAxMDgwMENCCis6MTA2MzYwMDBBQzI2MDA2NDE2MDAwMDBEMDAwMDAwMDAwMjIwMjgyMTY5Cis6MTA2MzcwMDAwRTAwMDY2RjAyNDAyMDIxOTI2RjAwNjgyNDBEMDAwMjdCCis6MTA2MzgwMDAzMUVFMDBGRjExQ0QwMDIyMDI0MDIwMjEwRTAwMDgyMzMzCis6MTA2MzkwMDAwMDAwMDAwMDBBMDAwODZGMjQwMjAwMDEwRTAwMDA0MTA2Cis6MTA2M0EwMDAyNDA0MDAwMTkyNkMwMDI1MDIwQzU4MjUwRTAwMDA0RkI5Cis6MTA2M0IwMDBBMjZCMDAyNTBBMDAwOEFGMDIyMDI4MjE4RTYzMDAxODc2Cis6MTA2M0MwMDA4Q0U0MDEwNDhDQkYwMDI0MDAwMzE2MDIxNDlGRkZCNTY3Cis6MTA2M0QwMDAzMDQ1MDA3RjkyNjkwMDRDMjY0NDAwMDEzMDkzMDA3RkQ1Cis6MTA2M0UwMDAxMjY1MDA0MDMxMjMwMEZGMTQ2NEZGQUYzQzBFODAwOEFCCis6MTA2M0YwMDAyNjQ4MDAwMTMxMTEwMDdGMzEwMjAwRkYxMjI1MDAwQkY5Cis6MTA2NDAwMDAyNDA4MDAwMTAwNDA5MDIxMEEwMDA4N0MyNDExMDAwMUFBCis6MTA2NDEwMDAyNDA1MDAwNDBFMDAwNjMyMjQwNjAwMDEwRTAwMDgyM0E1Cis6MTA2NDIwMDAwMDAwMDAwMDBBMDAwODZGMjQwMjAwMDEyNDA3RkY4MDFBCis6MTA2NDMwMDAwMjQ3MjgyNDAwQTc5MDI2MzI0MjAwRkYwMDQwOTAyMTA2Cis6MTA2NDQwMDAwQTAwMDg3QzI0MTEwMDAxMEUwMDA3M0UwMjIwMjgyMUNBCis6MTA2NDUwMDAzMjA2MDAzMDEwQzBGRkEzMzIxMDAwODIwMjQwMjAyMTFCCis6MTA2NDYwMDAwRTAwMDY4MDAyMjAyODIxMEEwMDA4NkYyNDAyMDAwMTg1Cis6MTA2NDcwMDA4RTYzMDAxODAyNDAyMDIxMDIyMDI4MjEwMDY2MTAyNThBCis6MTA2NDgwMDAwRTAwMDg0NUFFNjIwMDE4OTI2NDAwNEMyNDA1MDAwMzFCCis6MTA2NDkwMDAyNDA2MDAwMTBFMDAwNjMyMzA4NDAwRkYwRTAwMDA0MTg5Cis6MTA2NEEwMDAyNDA0MDAwMTkyNkEwMDI1MDIwQTQ4MjUwRTAwMDA0RkNDCis6MTA2NEIwMDBBMjY5MDAyNTBBMDAwODZGMjQwMjAwMDE4RTc4MDAxOEU2Cis6MTA2NEMwMDAzQzE5ODAwMDAyNDAyMDIxMDMxOTc4MjUwMjIwMjgyMTUwCis6MTA2NEQwMDAwRTAwMDY2RkFFNkYwMDE4OTI2NDAwNEMwQTAwMDhGN0I5Cis6MTA2NEUwMDAyNDA1MDAwNDMyNDYwMDgwMzhDQTAwODAxNDZBRkY2RTFBCis6MTA2NEYwMDAzQzBFODAwODBBMDAwOEQwMjY0ODAwMDEyN0JERkZDMEQ2Cis6MTA2NTAwMDBBRkIwMDAxODNDMTA4MDAwQUZCRjAwMzhBRkI3MDAzNDA4Cis6MTA2NTEwMDBBRkI2MDAzMEFGQjUwMDJDQUZCNDAwMjhBRkIzMDAyNDQ1Cis6MTA2NTIwMDBBRkIyMDAyMDBFMDAwNEJCQUZCMTAwMUM5MjA0MDEwODAyCis6MTA2NTMwMDA5MjA1MDEwQjMwODQwMEZGMEUwMDA4NTYzMEE1MDBGRkM1Cis6MTA2NTQwMDAxNDQwMDBFMzhGQkYwMDM4M0MwOTgwMDgzNTI4MDA4MEU0Cis6MTA2NTUwMDBBMTAwMDA2QjM2MDcwOTgwOTBFNjAwMDAyNDAyMDA1MDdECis6MTA2NTYwMDAzQzE3MDgwMDI2RjczQTg4MzBDMzAwRkYzQzEzMDgwMEE4Cis6MTA2NTcwMDAyNjczM0E5ODEwNjIwMDAzM0MxMDgwMDAwMDAwQjgyMTk2Cis6MTA2NTgwMDAwMDAwOTgyMTI0MUYwMDEwMzYxMTBBMDAzNjE0MDk4MERCCis6MTA2NTkwMDA4RTE2MDEwNDhGOEQwMDUwOEUzODAwMjQzNjE5MEE4MDIzCis6MTA2NUEwMDA4RTkyMDAyMDNDMDEwODAwQTAzRjNBRDA5NzJDMDAyQzhFCis6MTA2NUIwMDA4RUY1MDAwMDkzMkIwMDE4MDI0RDcwMjMwMkQ4NzgyMzJCCis6MTA2NUMwMDAzQzAxMDgwMEFDMkYzQUFDM0MwMTA4MDBBQzJFM0FCMEJDCis6MTA2NUQwMDAzQzAxMDgwMEFDMkQzQUQ0QTc4QzAwNTQwMkEwRjgwOTY1Cis6MTA2NUUwMDAzMTcyMDBGRjMwNEEwMDAyMTU0MDAwRTYzMDQ1MDAwMURDCis6MTA2NUYwMDAxMEEwMDBDMTAwMDAwMDAwOTI4QTAwMDgzMTUwMDAwODdECis6MTA2NjAwMDAxNjAwMDAwMjI0MTQwMDAzMDAwMEEwMjEzQzA2ODAwMEI0Cis6MTA2NjEwMDAzNEM0MDkwMDM0QzMwQTAwOEM2RTAwMjQ5MDg1MDAxMTM0Cis6MTA2NjIwMDA5MDgyMDAxMjkwOTkwMDExMzBCODAwRkYzMDUxMDBGRkE1Cis6MTA2NjMwMDAwMjkxRjgyMTAwMUZCMDgwMzMyRjAwRkYwMkQ4NTgyMUFCCis6MTA2NjQwMDAwMjRGQTgyMTI2QUMwMDEwMDE3MjY4MjEzQzE1ODAwMDgxCis6MTA2NjUwMDAzQzAxMDgwMEFDMkUzQUQ4M0MwMTA4MDBBNDJEM0FDOEYxCis6MTA2NjYwMDAzQzAxMDgwMEE0MkMzQUM0M0MwMTA4MDBBNDJCM0FDNjAzCis6MTA2NjcwMDAzNkI2MDk4MDhGODcwMDUwOEY4OTAwNTg4RUQyMDAyMDRGCis6MTA2NjgwMDAyNDA4MDAwNjAxMjczMDIzMDI0NzI4MjMzQzAxMDgwMDg0Cis6MTA2NjkwMDBBQzI4M0FDQzA0QzAwMEIzMDAwMDkwMjEwNEEwMDBCMUEzCis6MTA2NkEwMDAwMEM1ODAyQjEyMDAwMEIzMDAwMDAwMDAzQzAxMDgwMDcwCis6MTA2NkIwMDBBQzI2M0FCMDhFNzEwMDAwMDIyMEY4MDkwMDAwMDAwMEZDCis6MTA2NkMwMDAzMDRBMDAwMjE1NDAwMDc0MDA0MDgwMjEzMDRCMDAwMTI4Cis6MTA2NkQwMDA1NTYwMDAxMThFNzEwMDA0M0MwRDA4MDA4REFEM0FCNDc4Cis6MTA2NkUwMDAzQzBFQzAwMDNDMDQ4MDAwMDFBRTYwMjVBRUFDMEUwMDQ0Cis6MTA2NkYwMDA4Qzk4MDAwMDMzMEYwMDA4MTFFMEZGRkQwMDAwMDAwMDNGCis6MTA2NzAwMDA5NDlGMEUwODI0MTIwMDAxQTc5RjAwNDA4Qzk5MEUwNDRDCis6MTA2NzEwMDBBRjk5MDAzODhFNzEwMDA0MDIyMEY4MDkwMDAwMDAwMEQzCis6MTA2NzIwMDAwMjAyODAyNTMyMDIwMDAyMTQ0MDAwQTkwMDAwMDAwMDhECis6MTA2NzMwMDAzQzA4MDgwMDk1MDgzQUJDM0MxMTA4MDA5NjMxM0FDODVDCis6MTA2NzQwMDAzQzA5MDgwMDk1MjkzQUJFM0MwMzA4MDA4QzYzM0FCNDIyCis6MTA2NzUwMDAwMTExNjgyMTNDMUYwODAwOEZGRjNBRDgzQzA3MDgwMDUwCis6MTA2NzYwMDA5NEU3M0FEMjNDMTE4MDAwMDFBOTIwMjE4RTM4MDEwQzE3Cis6MTA2NzcwMDAwMDY4MjgyMTI0OTkwMDAyMDBBNzcwMjEwM0UzNzgyMUYyCis6MTA2NzgwMDBBRjk4MDA2MDNDMDEwODAwQUMyRjNBRDgzQzAxMDgwMEVCCis6MTA2NzkwMDBBNDJFM0FDMDNDMDEwODAwQTQyRDNBQ0EwRTAwMDFCNDUwCis6MTA2N0EwMDAzMzI0RkZGRjhGOEMwMDQ4MDA0MDIwMjEzQzAxMDgwMDZCCis6MTA2N0IwMDBBMDJDM0FEMThFNjIwMDA4MjU4QjAwMDFBRjhCMDA0OEQ3Cis6MTA2N0MwMDAwMDQwRjgwOTAwMDAwMDAwOEY4NTAwNTAwMjgwMzAyMTUxCis6MTA2N0QwMDAwRTAwMDUxQzAwNDAyMDIxMEUwMDA2OUUwMDQwMjAyMUQ2Cis6MTA2N0UwMDA4RTZBMDAwQzAxNDBGODA5MDA0MDIwMjEzQzA4MDgwMDk2Cis6MTA2N0YwMDA5NTA4M0FDQTNDMDkwODAwOTUyOTNBQkUwMTA5MzgyMTkyCis6MTA2ODAwMDAyNEU2MDAwMjBFMDAwMUM4MzBDNEZGRkYzQzA0MDgwMDZCCis6MTA2ODEwMDA4Qzg0M0FBQzNDMDMwODAwOEM2MzNBQjQwMDgzMjgyMzkwCis6MTA2ODIwMDAzQzAxMDgwMEFDMjUzQUFDMTRBMDAwMDYwMDAwMDAwMEIyCis6MTA2ODMwMDAzQzBBMDgwMDhENEEzQUNDMzU0NjAwNDAzQzAxMDgwMDJECis6MTA2ODQwMDBBQzI2M0FDQzEyNDAwMDQxOEY4QzAwNDQ4RTJCMEUxMEE3Cis6MTA2ODUwMDA4RjkyMDA0NEFFNEIwMDIwOEUyMjBFMThBRTQyMDAyNEQwCis6MTA2ODYwMDAzQzA0MDgwMDk0ODQzQUMwMEUwMDA1RkEwMDAwMDAwMEMxCis6MTA2ODcwMDA4Rjk5MDA1MDhFNzgwMDEwM0MwMTA4MDBBQzM5M0FENDUyCis6MTA2ODgwMDAwMzAwRjgwOTAwMDAwMDAwM0MwRjA4MDA4REVGM0FBQzRGCis6MTA2ODkwMDAxNUUwRkY3OThGODcwMDUwOTc5NDAwNTQzQzEzODAwRUM5Cis6MTA2OEEwMDAzMjE1MDAxMDBFMDAwNjI5QTY3NDAwMkM1NkEwMDA0NEQ0Cis6MTA2OEIwMDA4RUY2MDAwNDMyMUYwMDQwNTdFMDAwMUQ4RUYwMDAwOEU1Cis6MTA2OEMwMDA4RUUzMDAwQzAwNjBGODA5MDAwMDAwMDA4RkJGMDAzODY0Cis6MTA2OEQwMDA4RkI3MDAzNDhGQjYwMDMwOEZCNTAwMkM4RkI0MDAyOEVFCis6MTA2OEUwMDA4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODJFCis6MTA2OEYwMDAwM0UwMDAwODI3QkQwMDQwOTIwOTAxMDk4Rjg4MDAzQzkxCis6MTA2OTAwMDAwMDA5M0UwMDAwRTgzMDI1QUUwNjAwODA4RTIzMDAyMEZFCis6MTA2OTEwMDA4RTI0MDAyNEFGQTMwMDEwQUUwMzBFMTQ4RkEyMDAxMDJCCis6MTA2OTIwMDBBRTAyMEUxMEFFMDQwRTFDMEEwMDA5NTFBRTA0MEUxODgxCis6MTA2OTMwMDAwMjAwRjgwOTAwMDAwMDAwOEVFMzAwMEMwMDYwRjgwOTc2Cis6MTA2OTQwMDAwMDAwMDAwMDBBMDAwQTA3OEZCRjAwMzgyNDBFMDAwMTczCis6MTA2OTUwMDAyNDBEMDAwMUE1ODAwMDIwQTU4RTAwMjIwQTAwMDlFQjZECis6MTA2OTYwMDBBRDhEMDAyNDNDMDEwODAwQUMyMDNBQjAwQTAwMDk4MTNBCis6MTA2OTcwMDA4RTcxMDAwMDNDMDEwODAwQUMyNTNBQjAwQTAwMDk4MTg0Cis6MTA2OTgwMDA4RTcxMDAwMDkyMTEwMTA5MDAwMDI4MjEwRTAwMDY2RjhGCis6MTA2OTkwMDAzMjI0MDBGRjhGQkYwMDM4OEZCNzAwMzQ4RkI2MDAzMDJECis6MTA2OUEwMDA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMDQ1Cis6MTA2OUIwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDA0MDE1Cis6MTA2OUMwMDAwMkMwRjgwOTAwMDAwMDAwMEEwMDBBMDEzMjFGMDA0MDVFCis6MTA2OUQwMDA1MjQwRkZCMjk3OTQwMDU0OEVCNjBFMTQ4RjkzMDA0NDI5Cis6MTA2OUUwMDBBRTc2MDAyMDhFQjQwRTFDQUU3NDAwMjQwQTAwMDlGQUE0Cis6MTA2OUYwMDA5Nzk0MDA1NDhGODIwMDE0MDAwNDIxODAwM0UwMDAwODYzCis6MTA2QTAwMDAwMDgyMTAyMTNDMDc4MDA4MzRFMjAwODA5MDQzMDA2OTM2Cis6MTA2QTEwMDAwMDgwNDAyMTEwNjAwMDA5M0MwNDAxMDAzQzA3MDgwMDkwCis6MTA2QTIwMDA4Q0U3M0FENDhGODMwMDMwMDBFMzIwMjMwNDgwMDAwOEYxCis6MTA2QTMwMDA5Mzg5MDAxQzE0RTMwMDAzMDEwMDIwMjEwM0UwMDAwOEY3Cis6MTA2QTQwMDAwMDgwMTAyMTNDMDQwMTAwMDNFMDAwMDgwMDgwMTAyMUI4Cis6MTA2QTUwMDAxMTIwMDAwQjAwNjczODIzM0MwRDgwMDAzNUFDMDk4MDA1Cis6MTA2QTYwMDA5MThCMDA3QzMxNkEwMDAyMTE0MDAwMjAyNDA5MDAzNDFGCis6MTA2QTcwMDAwMEU5NzAyQjE1QzBGRkYxMDEwMDIwMjEwMEU5MzgyMzQ3Cis6MTA2QTgwMDAyNDAzRkZGQzAwQTNDODI0MDBFM0MwMjQwMEY5NzgyQkYyCis6MTA2QTkwMDAxNUUwRkZFQTAzMDgyMDIxMzBDNDAwMDMwMDA0MTAyMzlFCis6MTA2QUEwMDAxNEMwMDAxNDMwNDkwMDAzMDAwMDMwMjEwMEE5NzgyMUVGCis6MTA2QUIwMDAwMUU2NzAyMTAwRUU2ODJCMTFBMEZGRTAzQzA0MDEwMDBDCis6MTA2QUMwMDAyRDM4MDAwMTAwMDZDODJCMDEwNTQ4MjEwMzE5MzgyNDgwCis6MTA2QUQwMDAxNEUwRkZEQTI1MjRGRkZDMjQwMkZGRkMwMEEyMTgyNEE2Cis6MTA2QUUwMDAwMDY4MjAyMTAzRTAwMDA4MDA4MDEwMjEwQTAwMEE2RkRFCis6MTA2QUYwMDAyNDA5MDAzMDNDMEM4MDAwMzU4NjA5ODA5MENCMDA3QzU2Cis6MTA2QjAwMDAzMTZBMDAwNDE1NDBGRkU5MjQwNjAwMDQwQTAwMEE3RUU5Cis6MTA2QjEwMDAwMDAwMzAyMTNDMDMwODAwOEM2MzAwNUM4RjgyMDAxODY5Cis6MTA2QjIwMDAyN0JERkZFOEFGQkYwMDE0MTA2MjAwMDVBRkIwMDAxMDMyCis6MTA2QjMwMDAwMDAzMjlDMDI0QTQwMjgwQUY4NDAwMTRBRjgzMDAxODhFCis6MTA2QjQwMDAzQzEwODAwMDM2MDMwQTAwOTQ2NTAwMzIwRTAwMEE1MEEzCis6MTA2QjUwMDAzMEE0M0ZGRjhFMDQwMTAwM0MxODAwODAzNzBGMDAwMzczCis6MTA2QjYwMDAwMDgyQzgyMTI0MDJGRjgwMDMyMjYwMjQzMzI5MDA3RjkxCis6MTA2QjcwMDAwMDBDRjk0MDAzRTk0MDI1MzMyRTAwNzgzQzBEMTAwMDRECis6MTA2QjgwMDAwMTBENTAyNTAxQ0Y1ODI1QUUwQzAwMjgzNjA4MDk4MDhDCis6MTA2QjkwMDBBRTBDMDgwQ0FFMEIwODJDQUUwQTA4MzA5MTAzMDA2OTRECis6MTA2QkEwMDAzQzA2ODAwQzAxMjYzODIxMTA2MDAwMDZBRjg3MDAzNEI3Cis6MTA2QkIwMDA4RDA5MDAzQzhEMDYwMDZDMDEyNjM4MjMxOEUwMDA3RjBCCis6MTA2QkMwMDAwMDAwMDAwMDNDMEM4MDA4MzU4QjAwODAzQzBBODAwMEVGCis6MTA2QkQwMDBBMTYwMDA2OTM1NTAwOTgwOEUwMjAwMzgzQzA2ODAwMEIzCis6MTA2QkUwMDAzNEM1MEEwMDkwQUQwMDNDMzFBODAwMjAxMTAwMDAxOTA2Cis6MTA2QkYwMDBBRjgyMDAzMDI0MEUwMDAxM0MxOTgwMDAzNzMwMEEwMEJCCis6MTA2QzAwMDBBMzhFMDAxQ0FGODAwMDI0OEUwNDAwMjQ4Rjg1MDAyNEY2Cis6MTA2QzEwMDAyNDE4MDAwOEFGODAwMDIwQUY4MDAwMjgzQzAxMDgwMDQ1Cis6MTA2QzIwMDBBNDM4M0FCRTNDMDEwODAwQTQyMDNBRDIwRTAwMEE1NDBGCis6MTA2QzMwMDAwMDAwMzAyMTkyMEYwMDNDOEZCRjAwMTQ4RkIwMDAxMDc1Cis6MTA2QzQwMDAwMDBGNzE0MkFGODIwMDJDMjdCRDAwMTgwM0UwMDAwODNFCis6MTA2QzUwMDAzMUMyMDAwMTkwQjkwMDMyMjQwRjAwMDEzMzM4MDBGRjI3Cis6MTA2QzYwMDAwMDE4MjE4MjEwOEYwMDNGMjQxRjAwMDIxMDlGMDA2MjM1Cis6MTA2QzcwMDAzNEMyMEFDMDNDMDM4MDAwMzQ2NDBBMDA4Qzk5MDAyNEFBCis6MTA2QzgwMDAxNzIwMDAxRDM0NjYwOTAwOTA4MzAwMzAyNDFGMDAwNTgyCis6MTA2QzkwMDAzMDYyMDAzRjEwNUYwMDRDMjQwNTAwMDE4Rjg2MDAyMDA5Cis6MTA2Q0EwMDBBMzg1MDAxQ0FGODYwMDI4QUY4NjAwMjQzQzE5ODAwMDE1Cis6MTA2Q0IwMDAzNzMwMEEwMDhFMDQwMDI0OEY4NTAwMjQyNDE4MDAwODMxCis6MTA2Q0MwMDAzQzAxMDgwMEE0MzgzQUJFM0MwMTA4MDBBNDIwM0FEMjk2Cis6MTA2Q0QwMDAwRTAwMEE1NDAwMDAwMDAwOTIwRjAwM0M4RkJGMDAxNDA5Cis6MTA2Q0UwMDA4RkIwMDAxMDAwMEY3MTQyQUY4MjAwMkMyN0JEMDAxODNBCis6MTA2Q0YwMDAwM0UwMDAwODMxQzIwMDAxOEM4ODAwMDg4QzhEMDAyNDVDCis6MTA2RDAwMDA4Q0NCMDA2NDNDMTk4MDAwMzczMDBBMDBBRjhCMDAyNDI0Cis6MTA2RDEwMDBBMzgwMDAxQzhFMDQwMDI0OEY4NjAwMjA4Rjg1MDAyNDExCis6MTA2RDIwMDAwMTBENjAyMzI0MTgwMDA4QUY4QzAwMjgzQzAxMDgwMEU2Cis6MTA2RDMwMDBBNDM4M0FCRTNDMDEwODAwQTQyMDNBRDIwRTAwMEE1NEZFCis6MTA2RDQwMDAwMDAwMDAwMDkyMEYwMDNDOEZCRjAwMTQ4RkIwMDAxMEI1Cis6MTA2RDUwMDAwMDBGNzE0MkFGODIwMDJDMjdCRDAwMTgwM0UwMDAwODJECis6MTA2RDYwMDAzMUMyMDAwMTkwQTcwMDMwMzBFMzAwM0Y1MDY0MDAyODlBCis6MTA2RDcwMDAzNEM1MEFDMDhDQUEwMDI0MTU0MDAwMjIzNEM4MDkwMDdBCis6MTA2RDgwMDA4Q0FCMDA0ODNDMEM3RkZGMzU4NUZGRkYwMTY1MTAyNDZDCis6MTA2RDkwMDAzQzE4ODAwMEFGODIwMDIwMzcwNTA5MDA4RjhFMDAyMDRDCis6MTA2REEwMDA4Q0FGMDA2MDAxQ0Y2ODJCMTVBMDAwMDIwMUMwMjAyMTJDCis6MTA2REIwMDA4Q0E0MDA2MDBBMDAwQUYwQUY4NDAwMjA4RDAyMDA2Q0YxCis6MTA2REMwMDAwQTAwMEFDQjNDMDY4MDAwOEM4OTAwNDg4Rjg2MDAyMDkwCis6MTA2REQwMDAzQzBBN0ZGRjM1NTBGRkZGMDEzMDM4MjQzQzA0ODAwODE3Cis6MTA2REUwMDAyNDA1MDAwMUFGODcwMDI4QUM4MDAwNkNBMzg1MDAxQzNGCis6MTA2REYwMDAwQTAwMEFGRUFGODYwMDI0OEM0NDAwMTQwQTAwMEFGMDQwCis6MTA2RTAwMDBBRjg0MDAyMDhEMDIwMDY4MEEwMDBCMzgzQzE4ODAwMDE3Cis6MTA2RTEwMDAzNEM0MDk4MDhDODYwMDcwOENCMDAwMTQwMEQwNDgyQkRDCis6MTA2RTIwMDAxMTIwMDAwNDAwMDAwMDAwOEM4MjAwNzAwQTAwMEIzODYyCis6MTA2RTMwMDAzQzE4ODAwMDhDQTIwMDE0MEEwMDBCMzgzQzE4ODAwMDFCCis6MTA2RTQwMDA4Rjg1MDAyNDI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNDRECis6MTA2RTUwMDAxNEEwMDAwOEFGQjAwMDEwM0MwNDgwMDAzNDg3MEEwMDgyCis6MTA2RTYwMDA5MEU2MDAzMDI0MDIwMDA1MzBDMzAwM0YxMDYyMDBCN0Y2Cis6MTA2RTcwMDAzNDg0MDkwMDhGOTEwMDIwMDBBMDgwMjEzQzA0ODAwMDEwCis6MTA2RTgwMDAzNDhFMEEwMDhEQ0QwMDA0M0MwNjA4MDA4Q0M2M0FCMDUyCis6MTA2RTkwMDAzMUE3M0ZGRjAwRTY2MDJCNTU4MDAwMDEwMEUwMzAyMTY0Cis6MTA2RUEwMDA5MzhGMDAxQzExRTAwMDc2MDBEMDEwMkIzNDk5MDk4MERDCis6MTA2RUIwMDA5MzM4MDA3QzMzMDQwMDAyMTA4MDAwNzcyNDAzMDAzNEYwCis6MTA2RUMwMDAwMEMzRjgyQjE3RTAwMEQ2MDBDMzMwMjMwMEQwMTAyQkVFCis6MTA2RUQwMDAzQzAxMDgwMEE0MjMzQUJDMTQ0MDAwNkQwMjAwMTgyMUI0Cis6MTA2RUUwMDAzQzA0MDgwMDhDODQzQUFDMDA2NDI4MkI1NEEwMDAwMUI4Cis6MTA2RUYwMDAwMDYwMjAyMTNDMDU4MDAwMzRBOTBBMDA5MTI4MDAzQzU0Cis6MTA2RjAwMDAzQzAxMDgwMEFDMjQzQUI0MzEwMzAwMjAxNDYwMDAwMkI0Cis6MTA2RjEwMDAwMDAwNDgyMThDQTkwRTE4OEY4ODAwMkMwMTI4NTAyQkM2Cis6MTA2RjIwMDAxMTQwMDA1RjAwMDAwMDAwM0MwNTA4MDA4Q0E1M0FCNDQ5Cis6MTA2RjMwMDAwMEE5NjAyMTAxMEM1ODJCMTE2MDAwNUMwMEIwNjgyQjg3Cis6MTA2RjQwMDAwMTA5MzgyMzAwRTAyODIxM0MwMTA4MDBBQzI3M0FCNEFECis6MTA2RjUwMDAxMjAwMDAwMzI0MDJGRkZDMTBCMDAwOEMzMjJBMDAwMzUwCis6MTA2RjYwMDAwMEEyRjgyNDNDMDEwODAwQTQyMDNBRDIzQzAxMDgwMDA5Cis6MTA2RjcwMDBBQzNGM0FCNDAzRTAyODIxOEY4NDAwMjQxMjA0MDAwNkI5Cis6MTA2RjgwMDAzQzAzODAwODhDNkEwMDZDMDIwMDIwMjFBRjkxMDAyMDM1Cis6MTA2RjkwMDAyNTUwMDAwMUFDNzAwMDZDOEY4QjAwMjgwMDg1ODgyMzgxCis6MTA2RkEwMDBBRjkxMDAyNDAxNjUyMDIzQUY4NDAwMjgxMjIwMDAwMjQ1Cis6MTA2RkIwMDAyNDA3MDAxODI0MDcwMDEwM0MwRTgwMDgzNUM2MDA4MDA2Cis6MTA2RkMwMDA5MENEMDA2ODI0MEMwMDAxM0MwMTA4MDBBMDI3M0FEMEI1Cis6MTA2RkQwMDAzMUE3MDBGRjEwRUMwMDQ3MDAwMDAwMDAxNDgwMDAxOEVCCis6MTA2RkUwMDAwMDAwMjgyMTNDMEI4MDAwOTE2NTAxMDkzNTcxMDk4MDYyCis6MTA2RkYwMDA4RTIzMDAxODMwQTUwMEZGMDAwMzU2MDIyNEEzMDAwMUQxCis6MTA3MDAwMDAzMTQ2MDA3RjMwNzAwMDdGMTIwNjAwN0UyNDBDRkY4MDI2Cis6MTA3MDEwMDAzQzBGODAwODM1RTkwMDgwQTEyMzAwNEMzQzA4MDgwMEEzCis6MTA3MDIwMDA4RDA4M0FDQzI0MEUwMDAyM0MwMTA4MDBBMDJFM0IxMTMyCis6MTA3MDMwMDAzNTBEMDAwODNDMDEwODAwQUMyRDNBQ0MyNDA1MDAxMEE5Cis6MTA3MDQwMDAzQzFGODAwMDM3RTQwQTAwOTA5OTAwM0MzMzM4MDAyMDUwCis6MTA3MDUwMDAxMzAwMDAwNTAwQTAyMDIxMjQwMjAwMDEzQzAxMDgwMENCCis6MTA3MDYwMDBBQzIyM0FCNDM0QTQwMDAxOEZCRjAwMTg4RkIxMDAxNEQxCis6MTA3MDcwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyMDIxCis6MTA3MDgwMDAzQzAxMDgwMEE0MjAzQUJDMTA0MEZGOTUwMjAwMTgyMUUyCis6MTA3MDkwMDAwQTAwMEI4QjAwQzAxODIxMEEwMDBCODMyNDAzMDAzMDY4Cis6MTA3MEEwMDAzQzA1MDgwMDhDQTUzQUI0MDBCMDY4MkIxMUEwRkZBOERECis6MTA3MEIwMDAwMDAwMDAwMDNDMDQwODAwOTQ4NDNBQkMwMDg1NzgyMTVDCis6MTA3MEMwMDAwMUU3NzAyQjExQzAwMDA3MkNBMjAwMDQzQzFGNjAwMEQ4Cis6MTA3MEQwMDA4RkY5NTQwNDMzMzgwMDNGMTcwMEZGRTMyNDA0MDA0MkMzCis6MTA3MEUwMDAyQ0EyMDAwNDEwNDBGRjlBMjQwNDAwNDIwQTAwMEJFRTc4Cis6MTA3MEYwMDA4RkJGMDAxODE1MjhGRkI5MDAwMDAwMDA4Q0MyMDAxOENGCis6MTA3MTAwMDAzQzE4ODAwMDI0MTkwMDAyMDA1OEY4MjVBQ0RGMDAxODU0Cis6MTA3MTEwMDAzNzA0MEEwMEEwRDkwMDY4OTA4OTAwM0MyNDBGMDAwNEJECis6MTA3MTIwMDAwMEEwMTAyMTMxMjgwMDIwM0MwMTA4MDBBMDJGM0IxMUI1Cis6MTA3MTMwMDAxMTAwMDAwMjI0MDUwMDEwMjQwMjAwMDEzQzAxMDgwMDk3Cis6MTA3MTQwMDBBQzIyM0FBQzBBMDAwQkU0M0MxRjgwMDA4Rjg4MDAyODc4Cis6MTA3MTUwMDA4Qzg5MDA2MDAxMDkyODJCMTRBMDAwMDIwMTAwODgyMUZECis6MTA3MTYwMDA4QzkxMDA2MDNDMEI4MDAwOEQ2NDBFMTgyNDBBMDAwMTk1Cis6MTA3MTcwMDAwMjIwMjgyMTAyMjAzMDIxQTM4QTAwMUMwRTAwMEE1NDdDCis6MTA3MTgwMDAwMjIwODAyMTBBMDAwQjcyQUY4MjAwMkMwMDBBMTgyMzEzCis6MTA3MTkwMDAxMjIwMDAwNzMwNjQwMDAzM0MwRDgwMDAzNUE3MDk4MEYxCis6MTA3MUEwMDA5MEVDMDA3QzMxOEIwMDA0MTU2MDAwMTkyNDhFMDAwNEUzCis6MTA3MUIwMDAzQzAxMDgwMEE0MjQzQUQyM0MxODA4MDA5NzE4M0FEMjlGCis6MTA3MUMwMDAwMzA1MjAyMTAwQzQ3ODJCMTFFMEZGNkM4Rjg0MDAyNDdDCis6MTA3MUQwMDAyQ0E2MDAwNTE0QzBGRkE0MjQwNDAwNDIzMEI5MDAwMzBCCis6MTA3MUUwMDAxNzIwMDAwMjAwQjkxODIzMjRBM0ZGRkMzQzAxMDgwMDZCCis6MTA3MUYwMDBBQzIzM0FCNDNDMDEwODAwQTQyMDNBRDIwQTAwMEJCMUY3Cis6MTA3MjAwMDAwMDYwMjgyMTAwQUMzODI0MEEwMDBCRDcwMEVDMTgyNkI3Cis6MTA3MjEwMDAzQzAxMDgwMEE0MkUzQUQyMEEwMDBDNDEwMDAwMDAwMEY0Cis6MTA3MjIwMDAzQzAxMDgwMEFDMjAzQUI0MEEwMDBCRUQyNDA0MDA0MkYzCis6MTA3MjMwMDA4RjgzMDAyODNDMEI4MDAwMzU2QTBBMDAxNDYwMDAwNjJBCis6MTA3MjQwMDAwMDAwMTAyMTkxNDYwMDMwMjQwNTAwMDUzMEM0MDBGRkU1Cis6MTA3MjUwMDAxMDg1MDAwMzAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMEFCCis6MTA3MjYwMDA5MTQ5MDA0ODMxMjgwMEZGMDAwODM5QzIxNEUwRkZGQUI0Cis6MTA3MjcwMDAzQzA0ODAwODNDMDYwODAwOTRDNjNBQkMzQzAzMDgwMDY1Cis6MTA3MjgwMDA4QzYzM0FENDNDMDUwODAwOENBNTNBQjQzQzE4MDgwMDNECis6MTA3MjkwMDA5NzE4M0FEMjAwNjZDODIxOEM4RTAwMDQwMzI1NzgyMTA1Cis6MTA3MkEwMDAwMUY4NjgyMTAxQUU2MDIzMTk4MDAwMUQwMDAwMDAwMDc0Cis6MTA3MkIwMDA5MTU4MDA0QzhGOEQwMDM0OTU2RTBFMTAzMzBGMDBGRkU3Cis6MTA3MkMwMDA4REE5MDAwNDAxQ0YzMDIzOERBQTAwMDAzMENGRkZGRjJECis6MTA3MkQwMDAwMDBGNjEwMDAxMkMyODIxMDAwMDM4MjEwMTQ3MjAyMUU2Cis6MTA3MkUwMDAwMEFDMTgyQjAwODNDODIxQURBNTAwMDRBREI5MDAwMDg3Cis6MTA3MkYwMDA5MUI4MDAwQTAxRjg3MDIxQTFBRTAwMEE5NTZDMEUxMjM3Cis6MTA3MzAwMDA4RjhBMDAzNEE1NEMwMDA4OTU0OTAwMzgyNTI4MDAwMUQzCis6MTA3MzEwMDBBNTQ4MDAzODkxNDcwMDBEMzRFQjAwMDhBMTRCMDAwRDQzCis6MTA3MzIwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRDhBRkIwMDAxODQwCis6MTA3MzMwMDA5MzhGMDAxQzhGQjAwMDE0M0MwODdGRkY4Rjg3MDAyNEMwCis6MTA3MzQwMDAzQzBDODAwMDM1MThGRkZGQUZCRjAwMjBBRkIxMDAxQzIwCis6MTA3MzUwMDAzNTk5MEEwMDAyMTgxODI0OTMyQTAwM0MwMDBGNUZDMEQ4Cis6MTA3MzYwMDAzQzAyQkZGRjJDRjAwMDAxMzQ0OUZGRkYwMDZCRjgyNTAxCis6MTA3MzcwMDAzQzA4MDgwMDhEMDgzQUQ0OEY5OTAwMzAzQzE4MDgwMDZBCis6MTA3MzgwMDA5NzE4M0FDQTAzRTk1ODI0MDAxMDdGODAzQzA3RUZGRkEyCis6MTA3MzkwMDAzQzA1RjBGRjAxNkYxODI1M0MxMTgwMDAzMTQ5MDAyMEE5Cis6MTA3M0EwMDAzNEUyRkZGRjM0QURGRkZGMzYyRTA5ODAyN0E1MDAxMDIxCis6MTA3M0IwMDAyNDA2MDAwMjAxMTk0MDIzMjcwQTAwMDIwMDYyMTgyNDUzCis6MTA3M0MwMDAwMDgwODAyMTE1MjAwMDAyMDAwMDU4MjE4RDhCMEUxQ0FBCis6MTA3M0QwMDBBN0FBMDAxMjA1MDAwMDNBMjQwNzAwMDAzMEVGMDBGRkMyCis6MTA3M0UwMDAwMDBGM0YwMDAwNjc0MDI1M0MwMjgwMDhBRkE4MDAxNDUyCis6MTA3M0YwMDAzNDRCMDA4MDkxNkEwMDY4M0MwRjA4MDA5MUVGM0FEMTRECis6MTA3NDAwMDAzQzA5REZGRjM1M0ZGRkZGMDAwQTYwMkIzQzAyMDgwMDBDCis6MTA3NDEwMDA5NDQyM0FDNEEzQUYwMDExMDExRkMwMjQwMDBDQ0Y0MDE2Cis6MTA3NDIwMDAwMzE5MTgyNThGQTcwMDEwQUZBMzAwMTQzQzFGMDgwMEY0Cis6MTA3NDMwMDA5M0ZGM0FEM0E3QTIwMDE2OEZBODAwMTQwMEVENDgyNEFBCis6MTA3NDQwMDAzQzBCMDEwMDNDMEEwRkZGMDEyQkM4MjUzM0Y4MDAwMzU5Cis6MTA3NDUwMDAzNTRDRkZGRjAxMEQ3ODI0M0MwMjcwMDAwMzJDMzgyNENBCis6MTA3NDYwMDAwMDE4MUUwMDAwRTI0ODI1MDFFMzU4MjVBRkFCMDAxNEM4Cis6MTA3NDcwMDBBRkE5MDAxMDkxREYwMDdDQTNCRjAwMTUwRTAwMDA2M0QwCis6MTA3NDgwMDAwMDAwMDAwMDM2MkQwQTAwOTFBNjAwM0MzMEM0MDAyMDA4Cis6MTA3NDkwMDAxMDgwMDAwNjI2MDIwMDA4M0MxMTA4MDA5NjMxM0FDMDEwCis6MTA3NEEwMDAyNjJFRkZGRjNDMDEwODAwQTQyRTNBQzA4RkJGMDAyMDBCCis6MTA3NEIwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDAyODIyCis6MTA3NEMwMDA4RjhBMDAyQzAxNkE2MDJCNTU4MEZGQzQyNDA3MDAwMUJECis6MTA3NEQwMDAwQTAwMENDQjMwRUYwMEZGOTM4MzAwMUMzQzAyODAwMEJECis6MTA3NEUwMDAyN0JERkZEODM0NDgwQTAwMDA4MDUwMjFBRkJGMDAyMERDCis6MTA3NEYwMDAzNDQ2MEFDMDAxMDAyODIxMTA2MDAwMEUzNDQ0MDk4MDdGCis6MTA3NTAwMDA5MTA3MDAzMDI0MEIwMDA1OEY4OTAwMjAzMEVDMDAzRkVDCis6MTA3NTEwMDAxMThCMDAwQjAwMDAzODIxQUZBOTAwMTAzQzBCODAwODM0Cis6MTA3NTIwMDA4RDY5MDA2Q0FGQUEwMDE4MEUwMDAxMkJBRkE5MDAxNEUyCis6MTA3NTMwMDBBMzgwMDAxQzhGQkYwMDIwMDNFMDAwMDgyN0JEMDAyOEE3Cis6MTA3NTQwMDA4RDFGMDA0ODNDMTgwODAwOEYxODNBQjQ4Rjk5MDAyODA2Cis6MTA3NTUwMDAzQzAyN0ZGRjhEMDgwMDQ0MzQ0M0ZGRkZBRkE5MDAxMEI5Cis6MTA3NTYwMDAzQzBCODAwODhENjkwMDZDMDNFMzcwMjQwMzE5NzgyMUJCCis6MTA3NTcwMDAwMUNGNjgyMzAxQTgzODIxQUZBQTAwMTgwRTAwMDEyQjAzCis6MTA3NTgwMDBBRkE5MDAxNDBBMDAwRDIwQTM4MDAwMUMzQzA1ODAwMDU4Cis6MTA3NTkwMDAzNEE2MEEwMDkwQzcwMDNDM0MwNjA4MDA5NEM2M0FEMkM0Cis6MTA3NUEwMDAzQzAyMDgwMDhDNDIzQUNDMzBFMzAwMjAwMDA2MjQwMDY0Cis6MTA3NUIwMDAxMDYwMDAxRTAwNDQzODI1M0MwODgwMDgzNTA1MDA4MDE2Cis6MTA3NUMwMDA5MEEzMDA2ODAwMDAzMDIxMjQwODAwMDEwMDAwMjAyMTYxCis6MTA3NUQwMDAyNDAzMDAwMTNDMDU4MDAwOENBQzAxNzgwNTgwRkZGRThGCis6MTA3NUUwMDAwMDAwMDAwMEFDQTgwMTQ4QTRBNDAxNDRBNEEzMDE0NkUzCis6MTA3NUYwMDAzQzAzMDgwMDhDNjMzQUQ0M0MxODgwMDgzNzBGMDA4MEE1Cis6MTA3NjAwMDBBQ0EzMDE0QzNDMTkwODAwOTMzOTNBRDEzQzBEMTAwMDUxCis6MTA3NjEwMDBBMEI5MDE1MkFDQTcwMTU0QTRBNjAxNTg5MUVFMDA0Q0E4Cis6MTA3NjIwMDBBMEFFMDE2RDAzRTAwMDA4QUNBRDAxNzg4Q0E4MEUxQzgzCis6MTA3NjMwMDAzQzBCMDgwMDhENkIzQUI0OTRBQTBFMTY5NEE5MEUxNDU0Cis6MTA3NjQwMDAwMTY2MzAyMTMxNDNGRkZGMEEwMDBENDgzMTI0RkZGRjVFCis6MTA3NjUwMDAzQzA0ODAwMDM0ODMwQTAwOTA2NTAwM0MzMEEyMDAyMDg2Cis6MTA3NjYwMDAxMDQwMDAxQzAwMDAwMDAwMDAwMDMwMjEwMDAwMjAyMTFDCis6MTA3NjcwMDAwMDAwMTgyMTNDMDU4MDAwOENBOTAxNzgwNTIwRkZGRTQwCis6MTA3NjgwMDAwMDAwMDAwMEFDQTYwMTQ4M0MwRTA4MDA4RENFM0FENEE0Cis6MTA3NjkwMDAyNDBERkY5MTI0MEMwMDQwM0MwQjgwMDhBNEEzMDE0NDVFCis6MTA3NkEwMDAzNTZBMDA4MEE0QTQwMTQ2QUNBRTAxNENBMEFEMDE1MkU1Cis6MTA3NkIwMDBBQ0FDMDE1NEE0QTAwMTU4OTBBMzAxMDk5MTQ0MDA0QzIyCis6MTA3NkMwMDA5MEE2MDEwOTNDMDQxMDAwQTBBNjAxNkQwM0UwMDAwODhCCis6MTA3NkQwMDBBQ0E0MDE3ODhDODYwRTE4OTQ4ODBFMTI5NDg3MEUxMDM0Cis6MTA3NkUwMDAzMTA0RkZGRjBBMDAwRDcwMzBFM0ZGRkYzQzA0ODAwMDBGCis6MTA3NkYwMDAzNDgzMEEwMDkwNjUwMDNDMzBBMjAwMjAxMDQwMDAyNjMwCis6MTA3NzAwMDAyN0JERkZGODI0MDkwMDAxMDAwMDM4MjEyNDA4MDAwMUVBCis6MTA3NzEwMDAzQzA2ODAwMDhDQzQwMTc4MDQ4MEZGRkUwMDAwMDAwMDVECis6MTA3NzIwMDA5MENBMDEwOTNDMDQwODAwOTA4NDNCMTEzQzE4ODBGRjdBCis6MTA3NzMwMDBBM0FBMDAwMzhGQTMwMDAwMzA4NTAwN0YzNzBGRkZGRjRGCis6MTA3NzQwMDAwMDY2MTAyNUFGQTIwMDAwOTBEOTAxMEFBM0EwMDAwMjk0Cis6MTA3NzUwMDAwMDA1NkUwMEEzQjkwMDAxOEZBRTAwMDAyNDBBMzAwMEJFCis6MTA3NzYwMDAyN0JEMDAwODAxQ0Y2MDI0MDE4RDU4MjVBQ0NCMDE0QzBBCis6MTA3NzcwMDBBQ0NBMDE1NEE0QzAwMTU4QUNDOTAxNDhBNEM3MDE0NDEzCis6MTA3NzgwMDAyNDA5RkY4MEE0QzgwMTQ2M0MwODEwMDBBMEM5MDE1MjhBCis6MTA3NzkwMDAwM0UwMDAwOEFDQzgwMTc4OEM4OTBFMTg5NDg3MEUxMjlCCis6MTA3N0EwMDA5NDg2MEUxMDMwRThGRkZGMEEwMDBEOTczMEM3RkZGRkU4Cis6MTA3N0IwMDAyN0JERkZFOEFGQjAwMDEwM0MxMDgwMDBBRkJGMDAxNDQxCis6MTA3N0MwMDAzNjE4MEEwMDk3MEYwMDMyMEUwMDBBNTAzMUU0M0ZGRkNFCis6MTA3N0QwMDA4RTBFMDEwMDI0MERGRjgwM0MwNDIwMDAwMUMyNTgyMUMwCis6MTA3N0UwMDAwMTZENjAyNDAwMEM0OTQwMzE2QTAwN0YwMTJBNDAyNTY4Cis6MTA3N0YwMDAwMTA0MzgyNTNDMDQ4MDA4QUUwNzA4MzAzNDg2MDA4MDM4Cis6MTA3ODAwMDA5MEM1MDA2ODI0MDMwMDAyMzBBMjAwRkYxMDQzMDAwNDZBCis6MTA3ODEwMDA4RjlGMDAyMDhGOTkwMDI0QUM5RjAwNjhBQzk5MDA2NDcyCis6MTA3ODIwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxOEMwCis6MTA3ODMwMDAzQzBBMDgwMDI1NEEzNTlDM0MwOTA4MDAyNTI5MzYzOEIxCis6MTA3ODQwMDAzQzA4MDgwMDI1MDgyQTYwM0MwNzA4MDAyNEU3MzZGQ0FECis6MTA3ODUwMDAzQzA2MDgwMDI0QzYzNDI0M0MwNTA4MDAyNEE1MzE3Q0RECis6MTA3ODYwMDAzQzA0MDgwMDI0ODQyRDhDM0MwMzA4MDAyNDYzMzREODk1Cis6MTA3ODcwMDAzQzAyMDgwMDI0NDIzMjc0M0MwMTA4MDBBQzJBM0E5MEQxCis6MTA3ODgwMDAzQzAxMDgwMEFDMjkzQThDM0MwMTA4MDBBQzI4M0E4ODNECis6MTA3ODkwMDAzQzAxMDgwMEFDMjczQTk0M0MwMTA4MDBBQzI2M0FBNDBECis6MTA3OEEwMDAzQzAxMDgwMEFDMjUzQTlDM0MwMTA4MDBBQzI0M0E5ODA1Cis6MTA3OEIwMDAzQzAxMDgwMEFDMjMzQUE4M0MwMTA4MDBBQzIyM0FBMEU1Cis6MDg3OEMwMDAwM0UwMDAwODAwMDAwMDAwRDUKKzowODc4QzgwMDgwMDAwOTQwODAwMDA5MDA2NgorOjEwNzhEMDAwODAwODAxMDA4MDA4MDA4MDgwMDgwMDAwODAwRTAwMDAwMQorOjEwNzhFMDAwODAwODAwODA4MDA4MDAwMDgwMDAwQTgwODAwMDBBMDA3NAorOjA4NzhGMDAwODAwMDA5ODA4MDAwMDkwMEZFCis6MDAwMDAwMDFGRgorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAorICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKKyAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKyAqIGFjY29tcGFueWluZyBpdC4KKyAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDYtNC42LjE2LmZ3LmloZXggYi9maXJtd2FyZS9ibngyL2JueDItcnYycC0wNi00LjYuMTYuZncuaWhleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcxZGU5ZS4uMDAwMDAwMAotLS0gYS9maXJtd2FyZS9ibngyL2JueDItcnYycC0wNi00LjYuMTYuZncuaWhleAorKysgL2Rldi9udWxsCkBAIC0xLDQ0MSArMCwwIEBACi06MTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EwMDAwMDAwNTgwMDAwMDAwMEVDCi06MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTAwMDMwMDAwMDAwMERFMDAwMDAwQ0Y4MDAwMDAwMDUwMDAwMDAwMENBCi06MTAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MDgwMDUwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLTowODAwNTgwMDAwMDAwMDEwQjE4MDAwMDI1RAotOjEwMDA2MDAwMDAwMDAwMUYwMTAzMDEwMDAwMDAwMDA4QUMwMDAwMDFCNwotOjEwMDA3MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDBDMkY4MDAwMDFCRgotOjEwMDA4MDAwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMkI4MDAwMDA5QQotOjEwMDA5MDAwMDAwMDAwMTAyMDNGMDA2MzAwMDAwMDEwMjEzRjAwMDMxQgotOjEwMDBBMDAwMDAwMDAwMTAyMEJGMDAzMjAwMDAwMDE4ODAwMEZGRkQ5QgotOjEwMDBCMDAwMDAwMDAwMTBCMUI4QjAwRDAwMDAwMDBCMkZERjAwMDJFRgotOjEwMDBDMDAwMDAwMDAwMDAwM0Q4MDAwMDAwMDAwMDAwMkMzODAwMDBGMQotOjEwMDBEMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVGMwotOjEwMDBFMDAwMDAwMDAwMTg4MDAwMDA3NTAwMDAwMDE4ODAwMDAxMEI1RgotOjEwMDBGMDAwMDAwMDAwMDgwMjAwMDAwMjAwMDAwMDBGNDJFMDAwMUNBNwotOjEwMDEwMDAwMDAwMDAwMTA5MTg0MEExMTAwMDAwMDEwMkM2MjAwMEIwNgotOjEwMDExMDAwMDAwMDAwMTg4MDAwMDAxRTAwMDAwMDA4MDIwMDAwMDIxRAotOjEwMDEyMDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMTgzQgotOjEwMDEzMDAwMDAwMDAwMDgyQzgwMDBCMTAwMDAwMDA4MkQwMDAwMDkxQwotOjEwMDE0MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDc3RAotOjEwMDE1MDAwMDAwMDAwMTg4MDAwMDA2RjAwMDAwMDE4ODAwMDAwMTVFQgotOjEwMDE2MDAwMDAwMDAwMDhCMTAwMDAwMTAwMDAwMDA4MkM4MDAwQjA3MQotOjEwMDE3MDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDA4MkQ4MDAwMDE4QwotOjEwMDE4MDAwMDAwMDAwMTg4MDAwMDA2OTAwMDAwMDBCMkZERjAwMDI1MwotOjEwMDE5MDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkMwNzAwMDA3RgotOjEwMDFBMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMDUwMDAwMDBDQgotOjEwMDFCMDAwMDAwMDAwMTg4MDAwRkZEQzAwMDAwMDBCMkZERjAwMDJCMQotOjEwMDFDMDAwMDAwMDAwMEMxRjgwMDAwMDAwMDAwMDAwMkMwNzAwMDA1MQotOjEwMDFEMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMDUwMDAwMDA5QgotOjEwMDFFMDAwMDAwMDAwMTg4MDAwRkZENjAwMDAwMDBDMUY4MDAwMDJGNQotOjEwMDFGMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGRDM5MAotOjEwMDIwMDAwMDAwMDAwMEMyOTgwMDAwMjAwMDAwMDBDMUY4MDAwMDI4QQotOjEwMDIxMDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMDU5RQotOjEwMDIyMDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQ0RCMwotOjEwMDIzMDAwMDAwMDAwMDgwMjI0MDAzQzAwMDAwMDE4MDAwNDAwMDAzOAotOjEwMDI0MDAwMDAwMDAwMTg4MDAwMDAxQzAwMDAwMDE4ODAwMDAwMUU0NAotOjEwMDI1MDAwMDAwMDAwMTg4MDAwMDA1MjAwMDAwMDE4ODAwMDAwOUU3RQotOjEwMDI2MDAwMDAwMDAwMTg4MDAwMDA5RDAwMDAwMDE4ODAwMDAwMDBDMQotOjEwMDI3MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDA0RQotOjEwMDI4MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDAzRQotOjEwMDI5MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDAyRQotOjEwMDJBMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwREYzRgotOjEwMDJCMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDAwRQotOjEwMDJDMDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDE4ODAwMDAwMUJDRQotOjEwMDJEMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwQjQzQQotOjEwMDJFMDAwMDAwMDAwMTg4MDAwMDAyRTAwMDAwMDE4ODAwMDAwREZEMQotOjEwMDJGMDAwMDAwMDAwMTg4MDAwMDEwQTAwMDAwMDE4ODAwMDAwRDVFRQotOjEwMDMwMDAwMDAwMDAwMTg4MDAwMDEyRTAwMDAwMDE4ODAwMDAwM0I1MwotOjEwMDMxMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwNzEzQwotOjEwMDMyMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMDUwMDAwMDAxQwotOjEwMDMzMDAwMDAwMDAwMTg4MDAwRkZBQzAwMDAwMDEwOTFENDAwMDAwNQotOjEwMDM0MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDE0QgotOjEwMDM1MDAwMDAwMDAwMDgyQTAwMDAwMjAwMDAwMDAwMDUwMDAwMDA2NAotOjEwMDM2MDAwMDAwMDAwMTg4MDAwRkZBNjAwMDAwMDEwOTFENDAwMDBEQgotOjEwMDM3MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDExQgotOjEwMDM4MDAwMDAwMDAwMDAyOTQyMDAwMDAwMDAwMDA4MkEwMDAwMDJDRQotOjEwMDM5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGOUYyMgotOjEwMDNBMDAwMDAwMDAwMTg4MDAwRkY5RTAwMDAwMDEwQjFCQ0IwMEFFMQotOjEwMDNCMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDA0NwotOjEwMDNDMDAwMDAwMDAwMDAyQzNDMDAwMDAwMDAwMDEwOTFENDAwMDA1MAotOjEwMDNEMDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMDAwMTZCNwotOjEwMDNFMDAwMDAwMDAwMTg4MDAwMDBBQzAwMDAwMDEwMkM2MjAxQkE3MAotOjEwMDNGMDAwMDAwMDAwMTg4MDAwMDAwNTAwMDAwMDA4MkM4MDAwQjFGQgotOjEwMDQwMDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDAzOQotOjEwMDQxMDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDBDMjk4MDAwMDA2QQotOjEwMDQyMDAwMDAwMDAwMEMxRjgwMDAwMDAwMDAwMDEwOTFERTAwMDBBMgotOjEwMDQzMDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMDY3QgotOjEwMDQ0MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGODlENQotOjEwMDQ1MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDBDMjk4MDAwMDE3MQotOjEwMDQ2MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MkEwMDAwMEJBMwotOjEwMDQ3MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGODM1RAotOjEwMDQ4MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDAwMDY4MjAwMDBDQQotOjEwMDQ5MDAwMDAwMDAwMTBCMThBMDAwNjAwMDAwMDAwODYwQzE0MDA2NQotOjEwMDRBMDAwMDAwMDAwMTBCMThDMDAwNDAwMDAwMDAwMDUwMDAwMDBGNgotOjEwMDRCMDAwMDAwMDAwMDgyQTAwMDAwMTAwMDAwMDEwOTFENDAwMDA5NAotOjEwMDRDMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDAwMDUwMjAwMDAwMAotOjEwMDREMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDE4MDAwQTAwMDA3QgotOjEwMDRFMDAwMDAwMDAwMTBCMUEwQjAxMzAwMDAwMDBCMkZERjAwMDJDRAotOjEwMDRGMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDA4MkM4MDAwMDBGQwotOjEwMDUwMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDEwOTFENDAwMDA0MQotOjEwMDUxMDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZGRUU5RQotOjEwMDUyMDAwMDAwMDAwMDgyRDgwMDExQzAwMDAwMDEwMDAxRjAwMDBDQQotOjEwMDUzMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDBGNDc2MDAwMDg3RQotOjEwMDU0MDAwMDAwMDAwMEYwNjBFMDAwMTAwMDAwMDAwMEY1ODAwMDAyMAotOjEwMDU1MDAwMDAwMDAwMDAwQTY0MDAwMDAwMDAwMDAwMEFFNTAwMDAzRQotOjEwMDU2MDAwMDAwMDAwMDkwQjY2RkZGRjAwMDAwMDAwMEQ2MTAwMDBBNQotOjEwMDU3MDAwMDAwMDAwMTg4MDAwMDAxMzAwMDAwMDBGNDc2MDAwMDgxMgotOjEwMDU4MDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDA4MkM4MDAwMDA5QwotOjEwMDU5MDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDEwOTFENDAwMDBCMQotOjEwMDVBMDAwMDAwMDAwMDgyRDgwMDExQzAwMDAwMDBGMDYwRTAwMDE1NQotOjEwMDVCMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDAwMEY1ODAwMDBBNQotOjEwMDVDMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMEE2NDAwMDAzRQotOjEwMDVEMDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkZCNAotOjEwMDVFMDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDAwMDI2MjAwMDAzOQotOjEwMDVGMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMzEwNDAwMDBBQgotOjEwMDYwMDAwMDAwMDAwMDAzMDlBMDAwMDAwMDAwMDAwMEM5NjE4MDA2NgotOjEwMDYxMDAwMDAwMDAwMDkwQzk5RkZGRjAwMDAwMDA0Q0M5OTM0MDA5MQotOjEwMDYyMDAwMDAwMDAwMTBCMTk2MzIwMjAwMDAwMDA4MEY4MDAwMDBBOAotOjEwMDYzMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDEwMDAyMjAwMDJEMAotOjEwMDY0MDAwMDAwMDAwMEMyOTUyMDAwMTAwMDAwMDBDMjk1MjAwMDA5QgotOjEwMDY1MDAwMDAwMDAwMDgwMjAwMDAwRTAwMDAwMDA4MDI4MDAwMUFERQotOjEwMDY2MDAwMDAwMDAwMTBCMUM0MEEwMjAwMDAwMDA4MDIwMDAwMDNFQwotOjEwMDY3MDAwMDAwMDAwMDgyMjAwMDAwMTAwMDAwMDBDMUY4MDAwMDFBMwotOjEwMDY4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDAwMkEwMDA4MDAyRgotOjEwMDY5MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGM0ZDRAotOjEwMDZBMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDEwOTFENDAwMDBCQQotOjEwMDZCMDAwMDAwMDAwMDgyQTAwMDAwMTAwMDAwMDAwMkMyMDAwMDBCQgotOjEwMDZDMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDA0MQotOjEwMDZEMDAwMDAwMDAwMDgyRDgwMDExQzAwMDAwMDEwOTFENDAwMDBEMwotOjEwMDZFMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MkM4MDAwMDZEMQotOjEwMDZGMDAwMDAwMDAwMDgyRDAwMDAwNjAwMDAwMDAwMzA4MDAwMDAwRgotOjEwMDcwMDAwMDAwMDAwMDAzMTAwMDAwMDAwMDAwMDA4MkQ4MDAwMDZGRAotOjEwMDcxMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDE3NwotOjEwMDcyMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDA0MQotOjEwMDczMDAwMDAwMDAwMDgyQTAwMDAxMDAwMDAwMDAwMDUwMDAwMDA3MgotOjEwMDc0MDAwMDAwMDAwMTg4MDAwRkYyQTAwMDAwMDEwOTFBMEIwMDlFRQotOjEwMDc1MDAwMDAwMDAwMDgyQzgwMDBCMTAwMDAwMDA4MkQwMDAwMDlGNgotOjEwMDc2MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDc1NwotOjEwMDc3MDAwMDAwMDAwMTg4MDAwRkZBQjAwMDAwMDE4ODAwMDAwMTA4RgotOjEwMDc4MDAwMDAwMDAwMDhBQzAwMDAwMTAwMDAwMDE4ODAwMDAwMEIxMQotOjEwMDc5MDAwMDAwMDAwMDAwMzgwQjAwMDAwMDAwMDBCMkZERjAwMDIwQgotOjEwMDdBMDAwMDAwMDAwMDAyQzAwNDAwMDAwMDAwMDEwOTFENDAwMDA2OAotOjEwMDdCMDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZGOUE1MAotOjEwMDdDMDAwMDAwMDAwMTg4MDAwMDAzMDAwMDAwMDE4ODAwMDAwMDZDMwotOjEwMDdEMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMwMDBFMDBDNAotOjEwMDdFMDAwMDAwMDAwMDgyQTAwMDAwNzAwMDAwMDA4MDUwMDU1NTUxOQotOjEwMDdGMDAwMDAwMDAwMTg4MDAwRkYxNDAwMDAwMDAwMDY4MjAwMDBDNgotOjEwMDgwMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDE4NgotOjEwMDgxMDAwMDAwMDAwMTAwQ0U3MDAwNzAwMDAwMDA5MDU2MkZGRkY2MAotOjEwMDgyMDAwMDAwMDAwMTBCQTZDMTQwNTAwMDAwMDAwMkFERjAwMDA3MAotOjEwMDgzMDAwMDAwMDAwMDAyMTAwMDAwMDAwMDAwMDA4MkEwMDAwMDU2MAotOjEwMDg0MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkM4MDAwQjBDRgotOjEwMDg1MDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDBDMzE2MjAwMThBNAotOjEwMDg2MDAwMDAwMDAwMDgyRDgwMDAwMTAwMDAwMDE4ODAwMEZGOENBRgotOjEwMDg3MDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwQjFBMEIwMEUzNAotOjEwMDg4MDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDA3MgotOjEwMDg5MDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDEwOTFENDAwMDA5NwotOjEwMDhBMDAwMDAwMDAwMTg4MDAwMDAxNDAwMDAwMDEwMkM2MjAwMDJGQwotOjEwMDhCMDAwMDAwMDAwMTg4MDAwMDAwQjAwMDAwMDBCMkZERjAwMDI3QQotOjEwMDhDMDAwMDAwMDAwMDAyQzA3MDAwMDAwMDAwMDBDMUY4MDAwMDE0OQotOjEwMDhEMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMDUwMDAwMDA5NAotOjEwMDhFMDAwMDAwMDAwMTg4MDAwRkVGNjAwMDAwMDA4MkM4MDAwQjExNwotOjEwMDhGMDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDA0NQotOjEwMDkwMDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDBDMjk4MDAwMDE3NAotOjEwMDkxMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDEwOTFERTAwMDBBQwotOjEwMDkyMDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMEE4MgotOjEwMDkzMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZFRUIzMQotOjEwMDk0MDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDA4MkM4MDAwQjAzQwotOjEwMDk1MDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDA4MkQ4MDAxNTA1NAotOjEwMDk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMjA1RjAwMDBGOAotOjEwMDk3MDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDA4RQotOjEwMDk4MDAwMDAwMDAwMDgyRDgwMDEwODAwMDAwMDAwMDAwMDAwMDBBOQotOjEwMDk5MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDE4MDAwQTAwMDBCNgotOjEwMDlBMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMEFBQUE3MAotOjEwMDlCMDAwMDAwMDAwMTg4MDAwRkY1QjAwMDAwMDBDMjk4MDAwMDE4RgotOjEwMDlDMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MkEwMDAwMDk0MAotOjEwMDlEMDAwMDAwMDAwMDgwNTAwQUFBQTAwMDAwMDE4ODAwMEZFRDc0OQotOjEwMDlFMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVEQQotOjEwMDlGMDAwMDAwMDAwMTg4MDAwRkY1MzAwMDAwMDEwOTFBMDNDMDI4RQotOjEwMEEwMDAwMDAwMDAwMTBCMUU2NjIwNzAwMDAwMDBCMkZERjAwMDJCQgotOjEwMEExMDAwMDAwMDAwMDAyQzMxMDAwMDAwMDAwMDA5MkNCMTAwN0YxNAotOjEwMEEyMDAwMDAwMDAwMDgyQ0Q5MDAwMDAwMDAwMDA4MkQwMDAwMDA4NAotOjEwMEEzMDAwMDAwMDAwMDgyRDgwMDEwRDAwMDAwMDEwQjFBODAwMDY4NAotOjEwMEE0MDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDAwMkMyMDAwMDBDQgotOjEwMEE1MDAwMDAwMDAwMDAyQ0E3MDAwMDAwMDAwMDA4MkQwMDAwMTA3RQotOjEwMEE2MDAwMDAwMDAwMDgyRDgwMDEwODAwMDAwMDE4ODAwMEZGNENFNQotOjEwMEE3MDAwMDAwMDAwMTBCMUE2MDAxMDAwMDAwMDEwMDAxRjAwMDBEMAotOjEwMEE4MDAwMDAwMDAwMEYwRjMwMDAwNzAwMDAwMDAwMEE2MDAwMDBBNwotOjEwMEE5MDAwMDAwMDAwMDAwQUUxMDAwMDAwMDAwMDBGNEI2MjAwMDhBNwotOjEwMEFBMDAwMDAwMDAwMDkwQjE2MDBGRjAwMDAwMDAwMEQ2MjAwMDBBRQotOjEwMEFCMDAwMDAwMDAwMDkwRDFBMDBGRjAwMDAwMDEwMDczMDAwMDNCRAotOjEwMEFDMDAwMDAwMDAwMEMwRDFBMDAwODAwMDAwMDBDMEIxNjAwMDhCNgotOjEwMEFEMDAwMDAwMDAwMEY0Q0UzMDAxODAwMDAwMDAwMEM5OTJDMDBFRgotOjEwMEFFMDAwMDAwMDAwMDRDQzk5MzQwMDAwMDAwMDA4MEY4MDAwMDBEMgotOjEwMEFGMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDAwMzMzMTAwMDBEQwotOjEwMEIwMDAwMDAwMDAwMDgyMjAwMDAxNjAwMDAwMDAwMkFERjAwMDA5QwotOjEwMEIxMDAwMDAwMDAwMDgyQTAwMDAwQzAwMDAwMDEwMDA5RjAwMDBFOAotOjEwMEIyMDAwMDAwMDAwMDAwRjIwMDAwMDAwMDAwMDBDMUY4MDAwMDFFQQotOjEwMEIzMDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZFQUJCRAotOjEwMEI0MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMEFBQUFDRQotOjEwMEI1MDAwMDAwMDAwMTg4MDAwRkYyNzAwMDAwMDBGNDcyMjAwMDg1NwotOjEwMEI2MDAwMDAwMDAwMDkwNzBFMDAwRjAwMDAwMDA4MDcwRTAwMDgzMwotOjEwMEI3MDAwMDAwMDAwMDgwMjgwMDAwMTAwMDAwMDA3MDI4NTFDMDA0MAotOjEwMEI4MDAwMDAwMDAwMDg4Mjg1MDAwMTAwMDAwMDAwMDI4NTRDMDA4MgotOjEwMEI5MDAwMDAwMDAwMDc0Mjg1MUMwMDAwMDAwMDAzQzNBQTUyMDBBOQotOjEwMEJBMDAwMDAwMDAwMDAwM0IxMEUwMDAwMDAwMDA3NEIwNzFDMDAwRQotOjEwMEJCMDAwMDAwMDAwMEYwRjMwMDAwNzAwMDAwMDBGMEE5NjAwMDMyRQotOjEwMEJDMDAwMDAwMDAwMDAwQTk1NUMwMDAwMDAwMDAwNEEwMDVBMDA4NgotOjEwMEJEMDAwMDAwMDAwMDAwQzk2MEEwMDAwMDAwMDA5MEM5OUZGRkZCRAotOjEwMEJFMDAwMDAwMDAwMDgwRDAwRkZGRjAwMDAwMDEwQjE5NjMyMDI2NwotOjEwMEJGMDAwMDAwMDAwMDgwRjgwMDAwNTAwMDAwMDEwQjFBODAwMDhFOAotOjEwMEMwMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDBCMkZERjAwMDIzQQotOjEwMEMxMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDAwMkNBNzAwMDBCNQotOjEwMEMyMDAwMDAwMDAwMDgyRDAwMDAxMDAwMDAwMDA4MkQ4MDAxMDhDMQotOjEwMEMzMDAwMDAwMDAwMTg4MDAwRkYxMzAwMDAwMDBDMjk4MDAwMDE1NAotOjEwMEM0MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDMUY4MDAwMDFDOQotOjEwMEM1MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMEQ0QwotOjEwMEM2MDAwMDAwMDAwMDgwNTAwQUFBQTAwMDAwMDE4ODAwMEZFODUwOAotOjEwMEM3MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTU0NwotOjEwMEM4MDAwMDAwMDAwMTg4MDAwRkYwMTAwMDAwMDBDMjk4MDAwMDExNgotOjEwMEM5MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MkEwMDAwMDc2RgotOjEwMENBMDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZFN0Q3QQotOjEwMENCMDAwMDAwMDAwMDgwMzA1MDAwNDAwMDAwMDA2ODMwNDBDMDA4NwotOjEwMENDMDAwMDAwMDAwMDgwMjg1MDIwMDAwMDAwMDAwODYwNTBDMDBGQwotOjEwMENEMDAwMDAwMDAwMDE4NjBDMEUwMDAwMDAwMDA4MDIwNDAwMDQ2MQotOjEwMENFMDAwMDAwMDAwMDAwMjA0MTgwMDAwMDAwMDAwODM4NzE4MDBDNAotOjA4MENGMDAwMDAwMDAwMTgwMDAyMDAwMEUyCi06MDgwQ0Y4MDAwMDAwMDAxMEIxODAwMDA0QUYKLToxMDBEMDAwMDAwMDAwMDFGMDEwMzAxMDAwMDAwMDAwODA1MDAwMEZGQjMKLToxMDBEMTAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwMDJBMDAwMDAwOEYKLToxMDBEMjAwMDAwMDAwMDEwQjFENDAwMDAwMDAwMDAwQzI5ODAwMDAxNzgKLToxMDBEMzAwMDAwMDAwMDA4MDI1NDAwMDgwMDAwMDAxODAwMDQwMDAwMzEKLToxMDBENDAwMDAwMDAwMDE4ODAwMDAwMTAwMDAwMDAxODgwMDAwMDExNTIKLToxMDBENTAwMDAwMDAwMDE4ODAwMDAwM0EwMDAwMDAxODgwMDAwMTA0MjQKLToxMDBENjAwMDAwMDAwMDE4ODAwMDAxMDMwMDAwMDAxODgwMDAwMTAyNEMKLToxMDBENzAwMDAwMDAwMDE4ODAwMDAxMDIwMDAwMDAxODgwMDAwMDAwNDAKLToxMDBEODAwMDAwMDAwMDE4ODAwMDAxMTQwMDAwMDAxODgwMDAwMEZFMjAKLToxMDBEOTAwMDAwMDAwMDE4ODAwMDAwMEMwMDAwMDAxODgwMDAwMTE4RkUKLToxMDBEQTAwMDAwMDAwMDE4ODAwMDAxNkEwMDAwMDAxODgwMDAwMDY3NDEKLToxMDBEQjAwMDAwMDAwMDE4ODAwMDAwREEwMDAwMDAxODgwMDAwMEU3NDIKLToxMDBEQzAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxODgwMDBGRkVCNzcKLToxMDBERDAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwQzI5ODAwMDAwMzQKLToxMDBERTAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAxODgwMDBGRkU3MDIKLToxMDBERjAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxODgwMDBGRkU1NEQKLToxMDBFMDAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwMDA1MDIwMDAwQzEKLToxMDBFMTAwMDAwMDAwMDEwOTE5NjM0MjEwMDAwMDAxMDIwNUYwMDAwQjcKLToxMDBFMjAwMDAwMDAwMDAwMkMxRTAwMDAwMDAwMDAwODJDODAwMDA2QkUKLToxMDBFMzAwMDAwMDAwMDA4MkQwMDAwMDYwMDAwMDAwODJEODAwMTAyQkYKLToxMDBFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwMjMKLToxMDBFNTAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAxODAwMEEwMDAwMDIKLToxMDBFNjAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAxMDkxOTYzNDE2RkEKLToxMDBFNzAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDA5RDgwMDAwMDIKLToxMDBFODAwMDAwMDAwMDAwMkMxRTAwMDAwMDAwMDAwODJDODAwMEIyQjIKLToxMDBFOTAwMDAwMDAwMDA4MkQwMDAwMEEwMDAwMDAwODJEODAwMTAyNUIKLToxMDBFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwQzMKLToxMDBFQjAwMDAwMDAwMDAwMEQ2MjAwMDAwMDAwMDAwMDJDMTMwMDAwODQKLToxMDBFQzAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDA1MDIwMDAwRjkKLToxMDBFRDAwMDAwMDAwMDEwOTE5NjM0MDkwMDAwMDAxMDIwNUYwMDAwMEYKLToxMDBFRTAwMDAwMDAwMDAwMkMxRTAwMDAwMDAwMDAwODJDODAwMDA2RkUKLToxMDBFRjAwMDAwMDAwMDA4MkQwMDAwNkEwMDAwMDAwODJEODAwMTAyOUIKLToxMDBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwNjIKLToxMDBGMTAwMDAwMDAwMDAwMEQ3QTAwMDAwMDAwMDAxODAwMEEwMDAwMjgKLToxMDBGMjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxMDAwMUYwMDAwMTMKLToxMDBGMzAwMDAwMDAwMDAwMkY4MEFBMDAwMDAwMDAwMDJBMDAwMDAwMkUKLToxMDBGNDAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDAzNjIwMDAwQ0UKLToxMDBGNTAwMDAwMDAwMDAwMkM0MDAwMDAwMDAwMDAwMDAyNjM4QzAwMzQKLToxMDBGNjAwMDAwMDAwMDAwMjY0NjAwMDAwMDAwMDAwODAyMDQwMDEyRjUKLToxMDBGNzAwMDAwMDAwMDEwQjkwNjA4MjcwMDAwMDAwMDBGNTgwMDAwMEMKLToxMDBGODAwMDAwMDAwMDAwMEE2NDAwMDAwMDAwMDAwMDBBRTUwMDAwMDQKLToxMDBGOTAwMDAwMDAwMDA5MEI2NkZGRkYwMDAwMDAwMDBDMDAwMDAwQ0QKLToxMDBGQTAwMDAwMDAwMDAwMEI4MDAwMDAwMDAwMDAwODBDQzYwMDEyQ0EKLToxMDBGQjAwMDAwMDAwMDE4ODAwMEZGQ0IwMDAwMDAwODBGODAwMDAzMzUKLToxMDBGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwOUYwMDAwNzIKLToxMDBGRDAwMDAwMDAwMDA4MjcxMTAwMTIwMDAwMDAwMDY2OTAwMDAwQzkKLToxMDBGRTAwMDAwMDAwMDA4QTMxQjAwMTIwMDAwMDAxMEIxOTgwMDAzQ0QKLToxMDBGRjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwODBGODAwMDA0MjcKLToxMDEwMDAwMDAwMDAwMDA4MjIwMDAwMDMwMDAwMDAwODJDODAwMDBDRjMKLToxMDEwMTAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAxMDAwOUYwMDAwRTAKLToxMDEwMjAwMDAwMDAwMDAwMjU5NjAwMDAwMDAwMDAwQzI5ODAwMDAwNTAKLToxMDEwMzAwMDAwMDAwMDAwMDY2NjAwMDAwMDAwMDAwMDg2NjExODAwNDUKLToxMDEwNDAwMDAwMDAwMDA5MDI2MDAwMEYwMDAwMDAwRjAyMDQwMDAyMEYKLToxMDEwNTAwMDAwMDAwMDEwQjYwQzA4MDMwMDAwMDAwQzFGQkYwMDAwQzkKLToxMDEwNjAwMDAwMDAwMDBDMzM2NjAwMTAwMDAwMDAwMDMyMTQwMDAwODUKLToxMDEwNzAwMDAwMDAwMDAwMzI5NTAwMDAwMDAwMDAwNTczNjYyQzAwOUYKLToxMDEwODAwMDAwMDAwMDAwMzFFMzJFMDAwMDAwMDAwODJEODAwMDEwNTkKLToxMDEwOTAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAxMDkxREUwMDAwNEUKLToxMDEwQTAwMDAwMDAwMDE4ODAwMEZGOTAwMDAwMDAwMDIzMDAwMDAwRjYKLToxMDEwQjAwMDAwMDAwMDA5MjVFNkZGRkYwMDAwMDAwODIyMDAwMDBCRTkKLToxMDEwQzAwMDAwMDAwMDBDNjk1MjAwMDAwMDAwMDAwQzI5ODAwMDAwQTQKLToxMDEwRDAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAxODgwMDBGRjg5NkQKLToxMDEwRTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxMDAwMUYwMDAwNTIKLToxMDEwRjAwMDAwMDAwMDAwMkY4MEFBMDAwMDAwMDAwMDJBMDAwMDAwNkQKLToxMDExMDAwMDAwMDAwMDAwMkM0MDAwMDAwMDAwMDAwODJDODAwMDQwN0YKLToxMDExMTAwMDAwMDAwMDA4MkQwMDAwMjAwMDAwMDAwODJEODAwMTFDQTgKLToxMDExMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwNDAKLToxMDExMzAwMDAwMDAwMDBGNDJFQTAwMTAwMDAwMDAxMDAwNEYwMDA0MDEKLToxMDExNDAwMDAwMDAwMDEwQjc0NjkyMDAwMDAwMDAwODAyNDkwMDEyOUIKLToxMDExNTAwMDAwMDAwMDEwQjU4NDBBMDAwMDAwMDAwMDBENjEwMDAwQ0UKLToxMDExNjAwMDAwMDAwMDEwQkE2NjM0NUEwMDAwMDAwMDAzNjIwMDAwNUMKLToxMDExNzAwMDAwMDAwMDEwQjg2MzBDNTgwMDAwMDAwODgzMDUwMDEyM0UKLToxMDExODAwMDAwMDAwMDEwMDA0RjAwMDIwMDAwMDAwMDAzNDkwMDAwQjIKLToxMDExOTAwMDAwMDAwMDAxODMwNjhDMDAwMDAwMDAwMDgzQzYwQzAwRTQKLToxMDExQTAwMDAwMDAwMDEwQjE4NzAwMTAwMDAwMDAwMDBCNkUwMDAwNkUKLToxMDExQjAwMDAwMDAwMDE4ODAwMEZGNkIwMDAwMDAwMTA2NjkxNDAwQTkKLToxMDExQzAwMDAwMDAwMDEwOTE4QzAwMDIwMDAwMDAwOEI0RTkwMDAxNEEKLToxMDExRDAwMDAwMDAwMDEwQjFFOTJDNEMwMDAwMDAwMDg2NjkyQzAwRDIKLToxMDExRTAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwOTAyRUFGRkZGMEEKLToxMDExRjAwMDAwMDAwMDEwMDAwQzAwMDIwMDAwMDAwMDAyMDQwQTAwQzEKLToxMDEyMDAwMDAwMDAwMDBGNDYwQzAwMDEwMDAwMDAwRjAyODUwMDAxRTUKLToxMDEyMTAwMDAwMDAwMDEwOTE4QzAxRkMwMDAwMDAxMEI3MDQwRTQzODgKLToxMDEyMjAwMDAwMDAwMDAwMkM0MDAwMDAwMDAwMDAwMDBGNDAwMDAwMDMKLToxMDEyMzAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDBBNjQwMDAwRDIKLToxMDEyNDAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGMzcKLToxMDEyNTAwMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDBCODAwMDAwRjcKLToxMDEyNjAwMDAwMDAwMDA4MEM4NjAwMTIwMDAwMDAwODBGODAwMDAzMzgKLToxMDEyNzAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAxMDAwOUYwMDAwMzgKLToxMDEyODAwMDAwMDAwMDA4MjcxMTAwMTIwMDAwMDAwMDY2OTAwMDAwMTYKLToxMDEyOTAwMDAwMDAwMDAwMjY0NjAwMDAwMDAwMDAwMDIzMDYwMDAwQjkKLToxMDEyQTAwMDAwMDAwMDEwQjE5ODAwMDUwMDAwMDAxMDAwMUYwMDAwQjEKLToxMDEyQjAwMDAwMDAwMDA4MEY4MDAwMDQwMDAwMDAwMDAwMDAwMDAwOTMKLToxMDEyQzAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDMyMTQwMDAwQTkKLToxMDEyRDAwMDAwMDAwMDAwMzI5NTAwMDAwMDAwMDAwMDMxRTMyRTAwMDUKLToxMDEyRTAwMDAwMDAwMDA1NzM2NjJDMDAwMDAwMDAwMDI1OTYwMDAwMzkKLToxMDEyRjAwMDAwMDAwMDEwQjE4NzAwMTYwMDAwMDAwQzI5ODAwMDAwREIKLToxMDEzMDAwMDAwMDAwMDBGMEY2QjAwMDcwMDAwMDAwMDBENjkwMDAwRDcKLToxMDEzMTAwMDAwMDAwMDAwMEE2QzAwMDAwMDAwMDAwMDBBRUQwMDAwNjAKLToxMDEzMjAwMDAwMDAwMDAwMEI2RTAwMDAwMDAwMDAwMDBCODAwMDAwQjkKLToxMDEzMzAwMDAwMDAwMDAwMEM4NzAwMDAwMDAwMDAwODBGODAwMDAzODAKLToxMDEzNDAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzY5NTIwMDAxNTIKLToxMDEzNTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDIyQzU4QzAwRUIKLToxMDEzNjAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTEwMDAwMDcKLToxMDEzNzAwMDAwMDAwMDAwMjY5MDAwMDAwMDAwMDAxMEI4MTcwRTAzQzcKLToxMDEzODAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxODgwMDBGRkY2MUIKLToxMDEzOTAwMDAwMDAwMDEwQjE5ODAwMDIwMDAwMDAwODBGODAwMDA0NTcKLToxMDEzQTAwMDAwMDAwMDA4MjIwMDAwMUEwMDAwMDAwODJDODAwMDBDMzkKLToxMDEzQjAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAwODJEODAwMDEwMjcKLToxMDEzQzAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDBENkUwMDAwNzMKLToxMDEzRDAwMDAwMDAwMDAzRTdDRjM0MDAwMDAwMDAwQzI5ODAwMDAwNkIKLToxMDEzRTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxMEIxODcwMDA3MkYKLToxMDEzRjAwMDAwMDAwMDAwMzYxNDAwMDAwMDAwMDAwMDM2OTUwMDAwRDgKLToxMDE0MDAwMDAwMDAwMDAwMzcxNjAwMDAwMDAwMDAwODJDODAwMDUwOEIKLToxMDE0MTAwMDAwMDAwMDA4MkQwMDAwMzAwMDAwMDAwODJEODAwMDBDQTYKLToxMDE0MjAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAxODgwMDBGRjFGODMKLToxMDE0MzAwMDAwMDAwMDAwMjY0NjAwMDAwMDAwMDAwMDIzMDAwMDAwMUQKLToxMDE0NDAwMDAwMDAwMDA5MjVFNkZGRkYwMDAwMDAwMDBCNkUwMDAwMTEKLToxMDE0NTAwMDAwMDAwMDAzRTdDRjJDMDAwMDAwMDAwODIyMDAwMDFCNjIKLToxMDE0NjAwMDAwMDAwMDBDNjk1MjAwMDAwMDAwMDAwQzI5ODAwMDAwMDAKLToxMDE0NzAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAxODgwMDBGRjE1M0QKLToxMDE0ODAwMDAwMDAwMDAwMkZENTAwMDAwMDAwMDAwMDJBMDAwMDAwMkUKLToxMDE0OTAwMDAwMDAwMDEwMDAzRjAwMEIwMDAwMDAwMDA2NjYwMDAwODYKLToxMDE0QTAwMDAwMDAwMDAwODY2MTE4MDAwMDAwMDAwOTAyNjAwMEYwRTIKLToxMDE0QjAwMDAwMDAwMDEwQjcwQzA4MDcwMDAwMDAwQzczNjYwMDEwNTUKLToxMDE0QzAwMDAwMDAwMDA4MkM4MDAwMTgwMDAwMDAwODJEMDAwMDE4MDMKLToxMDE0RDAwMDAwMDAwMDA4MkQ4MDAwMDIwMDAwMDAwQzVGQkYwMDAwMkIKLToxMDE0RTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxODgwMDBGRjA3REYKLToxMDE0RjAwMDAwMDAwMDAwMkZENTAwMDAwMDAwMDAwMDJBMDAwMDAwQkUKLToxMDE1MDAwMDAwMDAwMDAwMkM0MDAwMDAwMDAwMDAwQzI5ODAwMDAwQkEKLToxMDE1MTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDFBN0UKLToxMDE1MjAwMDAwMDAwMDA4MkQwMDAwMUEwMDAwMDAwMDMzMDAwMDAwMzkKLToxMDE1MzAwMDAwMDAwMDA4MkQ4MDAwMDIwMDAwMDAwMDMxODAwMDAwNDMKLToxMDE1NDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDBDNUMKLToxMDE1NTAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAwODJEODAwMDA0OTEKLToxMDE1NjAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAxMDkxREUwMDAwNzkKLToxMDE1NzAwMDAwMDAwMDE4ODAwMEZFRjYwMDAwMDAxODgwMDBGRUY1NTQKLToxMDE1ODAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMDAwMUYwMDAwMDIKLToxMDE1OTAwMDAwMDAwMDAwMEYwMDgwMDAwMDAwMDAwODBGODAwMDA3MUUKLToxMDE1QTAwMDAwMDAwMDE4ODAwMDAwMTQwMDAwMDAwMDA1MDIwMDAwODgKLToxMDE1QjAwMDAwMDAwMDA4MjIwMDAwMDkwMDAwMDAwMDI4NkQwMDAwNjMKLToxMDE1QzAwMDAwMDAwMDAwMjkwMDAwMDAwMDAwMDAwRjY1NjgwMDEwMDYKLToxMDE1RDAwMDAwMDAwMDAzRjY2Qzk0MDAwMDAwMDAxMEI5NzJBMDA0MzMKLToxMDE1RTAwMDAwMDAwMDBDNzNFNzAwMTkwMDAwMDAwQzIxNDIwMDA0MDkKLToxMDE1RjAwMDAwMDAwMDAwM0JGNjAwMDAwMDAwMDAwQzI5ODAwMDAwMDUKLToxMDE2MDAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwODIyMDAwMDA4MjUKLToxMDE2MTAwMDAwMDAwMDBDNjE0MjAwMDQwMDAwMDAxODAwMEEwMDAwRjUKLToxMDE2MjAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMDAwMUYwMDAwNjEKLToxMDE2MzAwMDAwMDAwMDBGMEY0NzAwMDcwMDAwMDAwODBGODAwMDA4OUYKLToxMDE2NDAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwNjIKLToxMDE2NTAwMDAwMDAwMDE4ODAwMEZFREEwMDAwMDAxMDkxREUwMDAwOUIKLToxMDE2NjAwMDAwMDAwMDAwMkZENTAwMDAwMDAwMDAxMDAwMUYwMDAwNDcKLToxMDE2NzAwMDAwMDAwMDAwMzM1MTAwMDAwMDAwMDAwMDJBMDAwMDAwQkMKLToxMDE2ODAwMDAwMDAwMDEwQjFDNjAwMjMwMDAwMDAwRjBGNTAwMDA3M0IKLToxMDE2OTAwMDAwMDAwMDAwMEE2MDAwMDAwMDAwMDAwMDBBRTEwMDAwRjUKLToxMDE2QTAwMDAwMDAwMDBGNEI2MjAwMDgwMDAwMDAwOTBCMTYwMEZGNEQKLToxMDE2QjAwMDAwMDAwMDBGNEM2MjAwMTAwMDAwMDAwMDBENjIwMDAwRUUKLToxMDE2QzAwMDAwMDAwMDA5MEQxQTAwRkYwMDAwMDAxMDA3NTAwMDAzODEKLToxMDE2RDAwMDAwMDAwMDBDMEQxQTAwMDgwMDAwMDAwQzBCMTYwMDA4OUEKLToxMDE2RTAwMDAwMDAwMDAwMENDNjAwMDAwMDAwMDAwMDBCODAwMDAwOUQKLToxMDE2RjAwMDAwMDAwMDAwMDY5ODAwMDAwMDAwMDAwODBGODAwMDAzQjIKLToxMDE3MDAwMDAwMDAwMDEwMDZDMjAwMDQwMDAwMDAwQzI5MDAwMDAyQzYKLToxMDE3MTAwMDAwMDAwMDEwMjY0MjAwMDIwMDAwMDAwQzI5NTIwMDAzQzUKLToxMDE3MjAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAxMDAwOUYwMDAwREYKLToxMDE3MzAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTExQTAwMTkKLToxMDE3NDAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAwQzI5NTIwMDAwMUMKLToxMDE3NTAwMDAwMDAwMDEwQjE5NzMyMDkwMDAwMDAwQzI5ODAwMDAwNDEKLToxMDE3NjAwMDAwMDAwMDAwMDY5ODAwMDAwMDAwMDAxMDIwNTMwMDAwNTgKLToxMDE3NzAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAwMDIyQzU4QzAwNkMKLToxMDE3ODAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwODBGODAwMDAzOTAKLToxMDE3OTAwMDAwMDAwMDE4ODAwMEZGRjMwMDAwMDAxMEIxQzgwMDEzMjMKLToxMDE3QTAwMDAwMDAwMDEwQjFDNjAwMDMwMDAwMDAwQzI5ODAwMDAwRkEKLToxMDE3QjAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAwMUYKLToxMDE3QzAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAxMDA2QzIwMDAyQjUKLToxMDE3RDAwMDAwMDAwMDBDMjk1MjAwMDIwMDAwMDAwMDIyQzU4QzAwMEQKLToxMDE3RTAwMDAwMDAwMDAwMjc2NTAwMDAwMDAwMDAwMDI2RTQwMDAwNjMKLToxMDE3RjAwMDAwMDAwMDA4MjIwMDAwMTYwMDAwMDAxMEIxQzYwMDAzMUYKLToxMDE4MDAwMDAwMDAwMDAwMjM0ODAwMDAwMDAwMDAxMEIxODAwMDA1MjcKLToxMDE4MTAwMDAwMDAwMDAwMjM0ODAwMDAwMDAwMDAwQzI5ODAwMDAwQTgKLToxMDE4MjAwMDAwMDAwMDBGMEY1MDAwMDcwMDAwMDAxODgwMDAwMDEyOTkKLToxMDE4MzAwMDAwMDAwMDA4MjIwMDAwMTYwMDAwMDAwQzI5ODAwMDAwQjMKLToxMDE4NDAwMDAwMDAwMDAwMzAxNDAwMDAwMDAwMDAwMDMwOTUwMDAwOEYKLToxMDE4NTAwMDAwMDAwMDEwMDc1MDAwMDMwMDAwMDAwOTBCMTYwMEZGRjUKLToxMDE4NjAwMDAwMDAwMDA5MEQxQTAwRkYwMDAwMDAwRjMxMTYwMDA4RUIKLToxMDE4NzAwMDAwMDAwMDAwMzE2MjM0MDAwMDAwMDAwM0YxNjIzMDAwMUIKLToxMDE4ODAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDNTEwMDAwNEMKLToxMDE4OTAwMDAwMDAwMDA5MkNEMTAwN0YwMDAwMDAwODJDRDkwMDAwQjYKLToxMDE4QTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMDBDNDIKLToxMDE4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwQTkKLToxMDE4QzAwMDAwMDAwMDEwMDVDMjAwMDMwMDAwMDAwMDMzMDAwMDAwMEIKLToxMDE4RDAwMDAwMDAwMDA4MEY4MDAwMDcwMDAwMDAxMDIwNTMwMDAwRTcKLToxMDE4RTAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAxODgwMDBGRTg3MkMKLToxMDE4RjAwMDAwMDAwMDAwMkZENTAwMDAwMDAwMDAwMDJBMDAwMDAwQkEKLToxMDE5MDAwMDAwMDAwMDBGMEY1MDAwMDcwMDAwMDAxMEIxQzYwMDJEQUUKLToxMDE5MTAwMDAwMDAwMDBGNDc0MjAwMDgwMDAwMDAwOTA3MEUwMDBGRkEKLToxMDE5MjAwMDAwMDAwMDA4MDcwRTAwMDgwMDAwMDAxMDAwMUYwMDAwNjMKLToxMDE5MzAwMDAwMDAwMDA4MDkwMDAwMDEwMDAwMDAwNzA5MTIxQzAwNTcKLToxMDE5NDAwMDAwMDAwMDAzQ0JDQTkyMDAwMDAwMDAwMDBCOTdBMjAwMjkKLToxMDE5NTAwMDAwMDAwMDA3NDIxNzFDMDAwMDAwMDAwMDBCMDQwMDAwRkMKLToxMDE5NjAwMDAwMDAwMDBGMEE4NDAwMDMwMDAwMDAwMDBBOTU5QzAwOUMKLToxMDE5NzAwMDAwMDAwMDAwNEEwMDlBMDAwMDAwMDAwODgyMTIwMDAxRTYKLToxMDE5ODAwMDAwMDAwMDAxMEMxNzA4MDAwMDAwMDAwMDBDOTc4QzAwRkMKLToxMDE5OTAwMDAwMDAwMDAwMDIxODAwMDAwMDAwMDAwODBEMDBGRkZGMUEKLToxMDE5QTAwMDAwMDAwMDA4MEY4MDAwMDYwMDAwMDAwQzI5MDAwMDAwNjUKLToxMDE5QjAwMDAwMDAwMDEwMDZDMjAwMDQwMDAwMDAwQzI5NTIwMDAyQzIKLToxMDE5QzAwMDAwMDAwMDEwMjY0MjAwMDIwMDAwMDAwQzI5NTIwMDAzMTMKLToxMDE5RDAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAxMDAwOUYwMDAwMkQKLToxMDE5RTAwMDAwMDAwMDEwQjE5NzMyMEMwMDAwMDAwMDIzMUIwMDAwMjMKLToxMDE5RjAwMDAwMDAwMDAwMjcxMTA4MDAwMDAwMDAwMDY2OTAwMDAwQjEKLToxMDFBMDAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwMDAyMTgwMDAwMDcKLToxMDFBMTAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAzQjkKLToxMDFBMjAwMDAwMDAwMDAwMjJDNTM2MDAwMDAwMDAxMDAwMUYwMDAwNkEKLToxMDFBMzAwMDAwMDAwMDA4MEY4MDAwMDYwMDAwMDAxODgwMDBGRkY0N0UKLToxMDFBNDAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTEwODAwMTgKLToxMDFBNTAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAxMEIxQzgwMDBCRkMKLToxMDFBNjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwM0UKLToxMDFBNzAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAwQzI5NTIwMDAzNTUKLToxMDFBODAwMDAwMDAwMDEwMDZDMjAwMDIwMDAwMDAwQzI5NTIwMDAyRjMKLToxMDFBOTAwMDAwMDAwMDAwMjJDNThDMDAwMDAwMDAwMDI3NjUwMDAwNDcKLToxMDFBQTAwMDAwMDAwMDAwMjZFNDAwMDAwMDAwMDAwMDIzNDgwMDAwQzEKLToxMDFBQjAwMDAwMDAwMDA4MjIwMDAwMTcwMDAwMDAwQzI5ODAwMDAwMzAKLToxMDFBQzAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAxMDIwNTMwMDAwNjQKLTowODFBRDAwMDAwMDAwMDE4ODAwMEZFNEEyRQotOjAwMDAwMDAxRkYKLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKLSAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCi0gKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCi0gKiBhY2NvbXBhbnlpbmcgaXQuCi0gKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA2LTUuMC4wLmozLmZ3LmloZXggYi9maXJtd2FyZS9ibngyL2JueDItcnYycC0wNi01LjAuMC5qMy5mdy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzQ5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9ibngyL2JueDItcnYycC0wNi01LjAuMC5qMy5mdy5paGV4CkBAIC0wLDAgKzEsNDI0IEBACis6MTAwMDAwMDAwMDAwMDAwMDAwMDAwQzkwMDAwMDAwNTgwMDAwMDAwOUYzCis6MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTAwMDMwMDAwMDAwMENFMDAwMDAwQ0U4MDAwMDAwMDUwMDAwMDAwMERCCis6MTAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MDgwMDUwMDAwMDAwMDAwMDAwMDAwMDAwQTgKKzowODAwNTgwMDAwMDAwMDEwQjE4MDAwMDY1OQorOjEwMDA2MDAwMDAwMDAwMUYwMTAzMDMwMDAwMDAwMDA4MDUwMEZGRkY1RgorOjEwMDA3MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4MDUwMDAwRkY1QQorOjEwMDA4MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4QUMwMDAwMDFBMQorOjEwMDA5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDBDMkY4MDAwMDE5RgorOjEwMDBBMDAwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMkI4MDAwMDA3QQorOjEwMDBCMDAwMDAwMDAwMTA5MUUwMDAwMjAwMDAwMDA4QUMwMDAwMDEwOAorOjEwMDBDMDAwMDAwMDAwMTAyMDNGMDA0RDAwMDAwMDEwMjEzRjAwMDMwMQorOjEwMDBEMDAwMDAwMDAwMTAyMEJGMDAxQzAwMDAwMDE4ODAwMEZGRkQ4MQorOjEwMDBFMDAwMDAwMDAwMDhCMTAwMDAwMTAwMDAwMDA4MkM4MDAwQjBGMgorOjEwMDBGMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDA4MkQ4MDAwMDEwRAorOjEwMDEwMDAwMDAwMDAwMTg4MDAwMDA2QzAwMDAwMDBCMkZERjAwMDJEMAorOjEwMDExMDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkMwNzAwMDBGRgorOjEwMDEyMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTU5OQorOjEwMDEzMDAwMDAwMDAwMTg4MDAwRkZGMDAwMDAwMDBCMkZERjAwMDIxRAorOjEwMDE0MDAwMDAwMDAwMEMxRjgwMDAwMDAwMDAwMDAwMkMwNzAwMDBEMQorOjEwMDE1MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTU2OQorOjEwMDE2MDAwMDAwMDAwMTg4MDAwRkZFQTAwMDAwMDBDMUY4MDAwMDI2MQorOjEwMDE3MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGRTc0QQorOjEwMDE4MDAwMDAwMDAwMEMyOTgwMDAwMjAwMDAwMDBDMUY4MDAwMDIwQgorOjEwMDE5MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMDUxRgorOjEwMDFBMDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGRTEyMAorOjEwMDFCMDAwMDAwMDAwMDgwMjI0MDAyQzAwMDAwMDE4MDAwNDAwMDBDOQorOjEwMDFDMDAwMDAwMDAwMTg4MDAwMDAxQzAwMDAwMDE4ODAwMDAwMUVDNQorOjEwMDFEMDAwMDAwMDAwMTg4MDAwMDA2NTAwMDAwMDE4ODAwMDAwQjBEQQorOjEwMDFFMDAwMDAwMDAwMTg4MDAwMDBBRjAwMDAwMDE4ODAwMDAwMDAzMAorOjEwMDFGMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBDRgorOjEwMDIwMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBCRQorOjEwMDIxMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBBRQorOjEwMDIyMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwRjZBOAorOjEwMDIzMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDA4RQorOjEwMDI0MDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDE4ODAwMDAwMUI0RQorOjEwMDI1MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwQzZBOAorOjEwMDI2MDAwMDAwMDAwMTg4MDAwMDAyRjAwMDAwMDE4ODAwMDAwRjYzOQorOjEwMDI3MDAwMDAwMDAwMTg4MDAwMDEyMTAwMDAwMDE4ODAwMDAwRUM0MAorOjEwMDI4MDAwMDAwMDAwMTg4MDAwMDE0NTAwMDAwMDE4ODAwMDAwNEVBQQorOjEwMDI5MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwODNBQgorOjEwMDJBMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMDUwMDAwMDA5RAorOjEwMDJCMDAwMDAwMDAwMTg4MDAwRkZDMDAwMDAwMDEwOTFENDAwMDA3MgorOjEwMDJDMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFDQworOjEwMDJEMDAwMDAwMDAwMDgyQTAwMDAwMjAwMDAwMDAwMDUwMDAwMDBFNQorOjEwMDJFMDAwMDAwMDAwMTg4MDAwRkZCQTAwMDAwMDEwOTFENDAwMDA0OAorOjEwMDJGMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDE5QworOjEwMDMwMDAwMDAwMDAwMDAyOTQyMDAwMDAwMDAwMDA4MkEwMDAwMDI0RQorOjEwMDMxMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGQjM4RQorOjEwMDMyMDAwMDAwMDAwMTg4MDAwRkZCMjAwMDAwMDEwQjFCQ0IwMEE0RAorOjEwMDMzMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDBDNworOjEwMDM0MDAwMDAwMDAwMDAyQzNDMDAwMDAwMDAwMDEwOTFENDAwMDBEMAorOjEwMDM1MDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMDAwMTczNgorOjEwMDM2MDAwMDAwMDAwMTg4MDAwMDBCRjAwMDAwMDEwMkM2MjAxQkFERAorOjEwMDM3MDAwMDAwMDAwMTg4MDAwMDAwNjAwMDAwMDA4MkM4MDAwQjE3QQorOjEwMDM4MDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDBCQQorOjEwMDM5MDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMDAwMjRFNAorOjEwMDNBMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBDMUY4MDAwMDBFRAorOjEwMDNCMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDBCNQorOjEwMDNDMDAwMDAwMDAwMDgyQTAwMDAwNjAwMDAwMDA4MDUwMDU1NTUzRQorOjEwMDNEMDAwMDAwMDAwMTg4MDAwRkY5QzAwMDAwMDEwOTFENDAwMDA3NQorOjEwMDNFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFBQgorOjEwMDNGMDAwMDAwMDAwMDgyQTAwMDAwQjAwMDAwMDAwMDUwMDAwMDBCQgorOjEwMDQwMDAwMDAwMDAwMTg4MDAwRkY5NjAwMDAwMDE4MDAwMjAwMDBBNQorOjEwMDQxMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwQjE4QTAwMDgwMQorOjEwMDQyMDAwMDAwMDAwMTBCMThDMTQwNzAwMDAwMDBCMDUwQUZGRkY0QworOjEwMDQzMDAwMDAwMDAwMTBCMThBMDAwMzAwMDAwMDAwODYwQTE4MDBDNgorOjEwMDQ0MDAwMDAwMDAwMTA5MThDMDAwMDAwMDAwMDA4MkEwMDAwMDE0QworOjEwMDQ1MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDE4MDAwRDAwMDAwMgorOjEwMDQ2MDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDEwOTFERTAwMDAwNgorOjEwMDQ3MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMDY4MjAwMDBEMgorOjEwMDQ4MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwQkVFMTAwMDUzOQorOjEwMDQ5MDAwMDAwMDAwMTg4MDAwRkY3RDAwMDAwMDAxMDU2MTE0MDBDRAorOjEwMDRBMDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjBFMTAwMDE4NQorOjEwMDRCMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDAwMDY4MjAwMDA4RgorOjEwMDRDMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwQkVFMjAwMDVGOAorOjEwMDREMDAwMDAwMDAwMTg4MDAwRkY3NTAwMDAwMDAxMDU2MjE0MDA5NAorOjEwMDRFMDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjE2MjAwMDFDMworOjEwMDRGMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwQjFBMEIwMTNCMworOjEwMDUwMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMyMDAwMDA4NAorOjEwMDUxMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDBGMgorOjEwMDUyMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTU5RQorOjEwMDUzMDAwMDAwMDAwMTg4MDAwRkZEQzAwMDAwMDA4MkQ4MDAxMUM3NgorOjEwMDU0MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDE4ODAwMEZGRTZGRgorOjEwMDU1MDAwMDAwMDAwMEY0NzYwMDAwODAwMDAwMDBGMDYwRTAwMDFCOQorOjEwMDU2MDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDAwMEE2NDAwMDBCNgorOjEwMDU3MDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkYxNAorOjEwMDU4MDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDE4ODAwMDAwMTM1MgorOjEwMDU5MDAwMDAwMDAwMEY0NzYwMDAwODAwMDAwMDBCMkZERjAwMDI4MgorOjEwMDVBMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDA2MgorOjEwMDVCMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMUNGNAorOjEwMDVDMDAwMDAwMDAwMEYwNjBFMDAwMTAwMDAwMDEwMDAxRjAwMDBEOAorOjEwMDVEMDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDE4ODAwMEZGRDQ0OQorOjEwMDVFMDAwMDAwMDAwMDAwQTY0MDAwMDAwMDAwMDAwMEFFNTAwMDBBRQorOjEwMDVGMDAwMDAwMDAwMDkwQjY2RkZGRjAwMDAwMDAwMEQ2MTAwMDAxNQorOjEwMDYwMDAwMDAwMDAwMDAwMjYyMDAwMDAwMDAwMDBCMkZERjAwMDI2QgorOjEwMDYxMDAwMDAwMDAwMDAzMTA0MDAwMDAwMDAwMDAwMzA5QTAwMDBEQgorOjEwMDYyMDAwMDAwMDAwMDAwQzk2MTgwMDAwMDAwMDA5MEM5OUZGRkY2NAorOjEwMDYzMDAwMDAwMDAwMDRDQzk5MzQwMDAwMDAwMDEwQjE5NjMyMDI5MgorOjEwMDY0MDAwMDAwMDAwMDgwRjgwMDAwMDAwMDAwMDBDMjk4MDAwMDE1RAorOjEwMDY1MDAwMDAwMDAwMEMyOTUyMDAwMTAwMDAwMDBDMjk1MjAwMDA4QgorOjEwMDY2MDAwMDAwMDAwMDgwMjAwMDAwRTAwMDAwMDA4MDI4MDAwMUFDRQorOjEwMDY3MDAwMDAwMDAwMTBCMUM0MEEwMjAwMDAwMDA4MDIwMDAwMDNEQworOjEwMDY4MDAwMDAwMDAwMDgyMjAwMDAwMTAwMDAwMDBDMUY4MDAwMDE5MworOjEwMDY5MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDAwMkEwMDA4MDAxRgorOjEwMDZBMDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGNDFCQgorOjEwMDZCMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDEwOTFENDAwMDBBQQorOjEwMDZDMDAwMDAwMDAwMDgyQTAwMDAwMTAwMDAwMDAwMkMyMDAwMDBBQgorOjEwMDZEMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkM4MDAwMDBGMQorOjEwMDZFMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAxMUMwMworOjEwMDZGMDAwMDAwMDAwMTg4MDAwRkZBRTAwMDAwMDA4MkM4MDAwMDZGQgorOjEwMDcwMDAwMDAwMDAwMDgyRDAwMDAwNjAwMDAwMDAwMzA4MDAwMDBGRQorOjEwMDcxMDAwMDAwMDAwMDAzMTAwMDAwMDAwMDAwMDA4MkQ4MDAwMDZFRAorOjEwMDcyMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDE2NworOjEwMDczMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDAzMQorOjEwMDc0MDAwMDAwMDAwMDgyQTAwMDAxMDAwMDAwMDAwMDUwMDAwMDA2MgorOjEwMDc1MDAwMDAwMDAwMTg4MDAwRkYyQzAwMDAwMDEwOTFBMEIwMDlEQworOjEwMDc2MDAwMDAwMDAwMDgyQzgwMDBCMTAwMDAwMDA4MkQwMDAwMDlFNgorOjEwMDc3MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDc0NworOjEwMDc4MDAwMDAwMDAwMTg4MDAwRkZBNzAwMDAwMDE4ODAwMDAwMTA4MworOjEwMDc5MDAwMDAwMDAwMDhBQzAwMDAwMTAwMDAwMDE4ODAwMDAwMEIwMQorOjEwMDdBMDAwMDAwMDAwMDAwMzgwQjAwMDAwMDAwMDBCMkZERjAwMDJGQgorOjEwMDdCMDAwMDAwMDAwMDAyQzAwNDAwMDAwMDAwMDEwOTFENDAwMDA1OAorOjEwMDdDMDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZGODk1MQorOjEwMDdEMDAwMDAwMDAwMTg4MDAwMDAzMTAwMDAwMDE4ODAwMDAwMDZCMgorOjEwMDdFMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMwMDBFMDBCNAorOjEwMDdGMDAwMDAwMDAwMDgyQTAwMDAwNzAwMDAwMDA4MDUwMDU1NTUwOQorOjEwMDgwMDAwMDAwMDAwMTg4MDAwRkYxNjAwMDAwMDAwMDY4MjAwMDBCMworOjEwMDgxMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDE3NgorOjEwMDgyMDAwMDAwMDAwMTAwQ0U3MDAwNzAwMDAwMDA5MDU2MkZGRkY1MAorOjEwMDgzMDAwMDAwMDAwMTBCQTZDMTQwNTAwMDAwMDAwMkFERjAwMDA2MAorOjEwMDg0MDAwMDAwMDAwMDAyMTAwMDAwMDAwMDAwMDA4MkEwMDAwMDU1MAorOjEwMDg1MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkM4MDAwQjBCRgorOjEwMDg2MDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDBDMzE2MjAwMTg5NAorOjEwMDg3MDAwMDAwMDAwMDgyRDgwMDAwMTAwMDAwMDE4ODAwMEZGN0RBRQorOjEwMDg4MDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwQjFBMEIwMEUyNAorOjEwMDg5MDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDA2MgorOjEwMDhBMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDEwOTFENDAwMDA4NworOjEwMDhCMDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDEwMkM2MjAwMDJFQgorOjEwMDhDMDAwMDAwMDAwMTg4MDAwMDAwQzAwMDAwMDBCMkZERjAwMDI2OQorOjEwMDhEMDAwMDAwMDAwMDAyQzA3MDAwMDAwMDAwMDBDMUY4MDAwMDEzOQorOjEwMDhFMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMEZGRkY3RQorOjEwMDhGMDAwMDAwMDAwMTg4MDAwRkVGODAwMDAwMDA4MkM4MDAwQjEwNQorOjEwMDkwMDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDAzNAorOjEwMDkxMDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMEZGNzQwRgorOjEwMDkyMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDE2NQorOjEwMDkzMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDAyRgorOjEwMDk0MDAwMDAwMDAwMDgyQTAwMDAwQTAwMDAwMDAwMDUwMDAwMDA2NgorOjEwMDk1MDAwMDAwMDAwMTg4MDAwRkVFQzAwMDAwMDAwMDY4MjAwMDA4RAorOjEwMDk2MDAwMDAwMDAwMDgyQzgwMDBCMDAwMDAwMDA4MkQwMDAwMDhFNgorOjEwMDk3MDAwMDAwMDAwMDgyRDgwMDE1MDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwMDk4MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MkM4MDAwMDAzNAorOjEwMDk5MDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAxMDU2NworOjEwMDlBMDAwMDAwMDAwMTBCRUUyMDAwNTAwMDAwMDE4ODAwMEZFREEyMgorOjEwMDlCMDAwMDAwMDAwMDEwNTYyMTQwMDAwMDAwMDEwOTE4QTAwMDI4RQorOjEwMDlDMDAwMDAwMDAwMDhCMTYyMDAwMTAwMDAwMDEwOTFERTAwMDA4QworOjEwMDlEMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwOTFENDAwMDA3RAorOjEwMDlFMDAwMDAwMDAwMDgwNjAwQUFBQTAwMDAwMDE4ODAwMEZGNDVDOQorOjEwMDlGMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDE5NQorOjEwMEEwMDAwMDAwMDAwMDgyQTAwMDAwOTAwMDAwMDA4MDUwMEFBQUE0QQorOjEwMEExMDAwMDAwMDAwMTg4MDAwRkVENDAwMDAwMDEwOTFENDAwMDBGNworOjEwMEEyMDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZGM0QzQQorOjEwMEEzMDAwMDAwMDAwMTA5MUEwM0MwMjAwMDAwMDEwQjFFNjYyMDcyNworOjEwMEE0MDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMzMTAwMDAyRQorOjEwMEE1MDAwMDAwMDAwMDkyQ0IxMDA3RjAwMDAwMDA4MkNEOTAwMDAyNAorOjEwMEE2MDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAxMEQ4RQorOjEwMEE3MDAwMDAwMDAwMTBCMUE4MDAwNjAwMDAwMDEwMjA1RjAwMDA3OAorOjEwMEE4MDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDAwMkNBNzAwMDA0NworOjEwMEE5MDAwMDAwMDAwMDgyRDAwMDAxMDAwMDAwMDA4MkQ4MDAxMDg1MworOjEwMEFBMDAwMDAwMDAwMTg4MDAwRkYzODAwMDAwMDEwQjFBNjAwMTAwMAorOjEwMEFCMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBGMEYzMDAwMDdCMgorOjEwMEFDMDAwMDAwMDAwMDAwQTYwMDAwMDAwMDAwMDAwMEFFMTAwMDBEMQorOjEwMEFEMDAwMDAwMDAwMEY0QjYyMDAwODAwMDAwMDA5MEIxNjAwRkYyOQorOjEwMEFFMDAwMDAwMDAwMDAwRDYyMDAwMDAwMDAwMDA5MEQxQTAwRkY2OAorOjEwMEFGMDAwMDAwMDAwMTAwNzMwMDAwMzAwMDAwMDBDMEQxQTAwMDg3MQorOjEwMEIwMDAwMDAwMDAwMEMwQjE2MDAwODAwMDAwMDBGNENFMzAwMTg1QQorOjEwMEIxMDAwMDAwMDAwMDAwQzk5MkMwMDAwMDAwMDA0Q0M5OTM0MDA2NworOjEwMEIyMDAwMDAwMDAwMDgwRjgwMDAwMDAwMDAwMDBDMjk4MDAwMDE3OAorOjEwMEIzMDAwMDAwMDAwMDAzMzMxMDAwMDAwMDAwMDA4MjIwMDAwMTYxMQorOjEwMEI0MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMEM1RQorOjEwMEI1MDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDAwMEYyMDAwMDBCNworOjEwMEI2MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MDUwMDU1NTUyMgorOjEwMEI3MDAwMDAwMDAwMTg4MDAwRkVBODAwMDAwMDEwOTFENDAwMDBDMgorOjEwMEI4MDAwMDAwMDAwMDgwNjAwQUFBQTAwMDAwMDE4ODAwMEZGMTE1QgorOjEwMEI5MDAwMDAwMDAwMEY0NzIyMDAwODAwMDAwMDA5MDcwRTAwMEZBOAorOjEwMEJBMDAwMDAwMDAwMDgwNzBFMDAwODAwMDAwMDA4MDI4MDAwMDE5NQorOjEwMEJCMDAwMDAwMDAwMDcwMjg1MUMwMDAwMDAwMDA4ODI4NTAwMDE3QgorOjEwMEJDMDAwMDAwMDAwMDAwMjg1NEMwMDAwMDAwMDA3NDI4NTFDMDA2OAorOjEwMEJEMDAwMDAwMDAwMDNDM0FBNTIwMDAwMDAwMDAwMDNCMTBFMDA5MQorOjEwMEJFMDAwMDAwMDAwMDc0QjA3MUMwMDAwMDAwMDBGMEYzMDAwMDczQgorOjEwMEJGMDAwMDAwMDAwMEYwQTk2MDAwMzAwMDAwMDAwMEE5NTVDMDA0OAorOjEwMEMwMDAwMDAwMDAwMDA0QTAwNUEwMDAwMDAwMDAwMEM5NjBBMDA5NAorOjEwMEMxMDAwMDAwMDAwMDkwQzk5RkZGRjAwMDAwMDA4MEQwMEZGRkYxNQorOjEwMEMyMDAwMDAwMDAwMTBCMTk2MzIwMjAwMDAwMDA4MEY4MDAwMDU5RAorOjEwMEMzMDAwMDAwMDAwMTBCMUE4MDAwODAwMDAwMDEwMjA1RjAwMDBCNAorOjEwMEM0MDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMyMDAwMDAzRAorOjEwMEM1MDAwMDAwMDAwMDAyQ0E3MDAwMDAwMDAwMDA4MkQwMDAwMTA3QworOjEwMEM2MDAwMDAwMDAwMDgyRDgwMDEwODAwMDAwMDE4ODAwMEZFRkYzMQorOjEwMEM3MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDEwMDAxRjAwMDA4RgorOjEwMEM4MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMkFERjAwMDBBRgorOjEwMEM5MDAwMDAwMDAwMDgyQTAwMDAwRDAwMDAwMDA4MDUwMEFBQUFCNAorOjEwMENBMDAwMDAwMDAwMTg4MDAwRkU4MjAwMDAwMDEwOTFENDAwMDBCNworOjEwMENCMDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZFRUJGQgorOjEwMENDMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFDMgorOjEwMENEMDAwMDAwMDAwMDgyQTAwMDAwNzAwMDAwMDA4MDUwMDU1NTUyNAorOjA4MENFMDAwMDAwMDAwMTg4MDAwRkU3QUZDCis6MDgwQ0U4MDAwMDAwMDAxMEIxODAwMDA0QkYKKzoxMDBDRjAwMDAwMDAwMDFGMDEwMzAzMDAwMDAwMDAwODA1MDAwMEZGQzIKKzoxMDBEMDAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwMDJBMDAwMDAwOUYKKzoxMDBEMTAwMDAwMDAwMDEwQjFENDAwMDAwMDAwMDAxMDkxREUwMDAwQkYKKzoxMDBEMjAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAxMDAwMUYwMDAwMTEKKzoxMDBEMzAwMDAwMDAwMDAwMkY4MEFBMDAwMDAwMDAwQzI5ODAwMDAxQTQKKzoxMDBENDAwMDAwMDAwMDA4MDI1NDAwMEQwMDAwMDAwMDJDNDAwMDAwQ0MKKzoxMDBENTAwMDAwMDAwMDE4MDAwNDAwMDAwMDAwMDAxODgwMDAwMDEwQ0YKKzoxMDBENjAwMDAwMDAwMDE4ODAwMDAwMTEwMDAwMDAxODgwMDAwMDM5MDkKKzoxMDBENzAwMDAwMDAwMDE4ODAwMDAwREYwMDAwMDAxODgwMDAwMERFODYKKzoxMDBEODAwMDAwMDAwMDE4ODAwMDAwREQwMDAwMDAxODgwMDAwMERENzkKKzoxMDBEOTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMEY1MkUKKzoxMDBEQTAwMDAwMDAwMDE4ODAwMDAwRDkwMDAwMDAxODgwMDAwMDBCMkYKKzoxMDBEQjAwMDAwMDAwMDE4ODAwMDAwRjkwMDAwMDAxODgwMDAwMTQ3QzIKKzoxMDBEQzAwMDAwMDAwMDE4ODAwMDAwNTkwMDAwMDAxODgwMDAwMEM0RDYKKzoxMDBERDAwMDAwMDAwMDE4ODAwMDAwQzUwMDAwMDAwMDJBMDAwMDAwOEMKKzoxMDBERTAwMDAwMDAwMDE4ODAwMEZGRTYwMDAwMDAwMDJBMDAwMDAwNUMKKzoxMDBERjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxODgwMDBGRkUzQzQKKzoxMDBFMDAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxODgwMDBGRkUxNDAKKzoxMDBFMTAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwMDA1MDIwMDAwQjEKKzoxMDBFMjAwMDAwMDAwMDEwOTE5NjM0MjEwMDAwMDAxMDIwNUYwMDAwQTcKKzoxMDBFMzAwMDAwMDAwMDAwMkMxRTAwMDAwMDAwMDAwODJDODAwMDA2QUUKKzoxMDBFNDAwMDAwMDAwMDA4MkQwMDAwMDYwMDAwMDAwODJEODAwMTAyQUYKKzoxMDBFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwMTMKKzoxMDBFNjAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAxODAwMEEwMDAwRjIKKzoxMDBFNzAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAxMDkxOTYzNDE2RUEKKzoxMDBFODAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDA5RDgwMDAwRjIKKzoxMDBFOTAwMDAwMDAwMDAwMkMxRTAwMDAwMDAwMDAwODJDODAwMEIyQTIKKzoxMDBFQTAwMDAwMDAwMDA4MkQwMDAwMEEwMDAwMDAwODJEODAwMTAyNEIKKzoxMDBFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwQjMKKzoxMDBFQzAwMDAwMDAwMDAwMEQ2MjAwMDAwMDAwMDAwMDJDMTMwMDAwNzQKKzoxMDBFRDAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDA1MDIwMDAwRTkKKzoxMDBFRTAwMDAwMDAwMDEwOTE5NjM0MDkwMDAwMDAxMDIwNUYwMDAwRkYKKzoxMDBFRjAwMDAwMDAwMDAwMkMxRTAwMDAwMDAwMDAwODJDODAwMDA2RUUKKzoxMDBGMDAwMDAwMDAwMDA4MkQwMDAwNkEwMDAwMDAwODJEODAwMTAyOEEKKzoxMDBGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwNTIKKzoxMDBGMjAwMDAwMDAwMDAwMEQ3QTAwMDAwMDAwMDAxODAwMEEwMDAwMTgKKzoxMDBGMzAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwMDBENjEwMDAwMTkKKzoxMDBGNDAwMDAwMDAwMDAwMDM2MjAwMDAwMDAwMDAxMDIzNDIwMEEzMjQKKzoxMDBGNTAwMDAwMDAwMDAwMDI2MzhDMDAwMDAwMDAwMDI2NDYwMDAwMzQKKzoxMDBGNjAwMDAwMDAwMDA4MDIwNDAwMTIwMDAwMDAxMEI5MDYwODFFNkMKKzoxMDBGNzAwMDAwMDAwMDAwMEY1ODAwMDAwMDAwMDAwMDBBNjQwMDAwOUMKKzoxMDBGODAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGRkEKKzoxMDBGOTAwMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDBCODAwMDAwQkEKKzoxMDBGQTAwMDAwMDAwMDA4MENDNjAwMTIwMDAwMDAxODgwMDBGRkNFRjAKKzoxMDBGQjAwMDAwMDAwMDA4MEY4MDAwMDMwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMDBGQzAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAwODI3MTEwMDEyMjAKKzoxMDBGRDAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAwOEEzMUIwMDEyNDMKKzoxMDBGRTAwMDAwMDAwMDEwQjE5ODAwMDMwMDAwMDAxMDAwMUYwMDAwNzYKKzoxMDBGRjAwMDAwMDAwMDA4MEY4MDAwMDQwMDAwMDAwODIyMDAwMDAzMjkKKzoxMDEwMDAwMDAwMDAwMDA4MkM4MDAwMEMwMDAwMDAwODJEMDAwMDBDREYKKzoxMDEwMTAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAwMDI1OTYwMDAwNjYKKzoxMDEwMjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwMDMyMTQwMDAwQzUKKzoxMDEwMzAwMDAwMDAwMDAwMzI5NTAwMDAwMDAwMDAwNTczNjYyQzAwREYKKzoxMDEwNDAwMDAwMDAwMDAwMzFFMzJFMDAwMDAwMDAwODJEODAwMDEwOTkKKzoxMDEwNTAwMDAwMDAwMDE4ODAwMEZGOTgwMDAwMDAwMDIzMDAwMDAwM0UKKzoxMDEwNjAwMDAwMDAwMDA5MjVFNkZGRkYwMDAwMDAwODIyMDAwMDBCMzkKKzoxMDEwNzAwMDAwMDAwMDBDNjk1MjAwMDAwMDAwMDAwQzI5ODAwMDAwRjQKKzoxMDEwODAwMDAwMDAwMDE4ODAwMEZGOTIwMDAwMDAwMDJBMDAwMDAwMEQKKzoxMDEwOTAwMDAwMDAwMDA4MkM4MDAwNDAwMDAwMDAwODJEMDAwMDIwMDcKKzoxMDEwQTAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDEwQjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwRjQyRUEwMDEwNjYKKzoxMDEwQzAwMDAwMDAwMDEwMDA0RjAwMDQwMDAwMDAxMEI3NDY5MjAwMUUKKzoxMDEwRDAwMDAwMDAwMDA4MDI0OTAwMTIwMDAwMDAxMEI1ODQwQTAwNTgKKzoxMDEwRTAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAxMEJBNjYzNDU3RDcKKzoxMDEwRjAwMDAwMDAwMDA4ODMwNTAwMTIwMDAwMDAxMDAwNEYwMDAyRUQKKzoxMDExMDAwMDAwMDAwMDAwMDM0OTAwMDAwMDAwMDAwMTgzMDY4QzAwN0QKKzoxMDExMTAwMDAwMDAwMDAwODNDNjBDMDAwMDAwMDAxMEIxODcwMDExMjEKKzoxMDExMjAwMDAwMDAwMDAwMEI2RTAwMDAwMDAwMDAxMEJFRTkwMDA1OEEKKzoxMDExMzAwMDAwMDAwMDE4ODAwMEZGNzkwMDAwMDAwMTA1NjkxNDAwMUMKKzoxMDExNDAwMDAwMDAwMDEwOTE4QTAwMDIwMDAwMDAwOEI0RTkwMDAxQ0MKKzoxMDExNTAwMDAwMDAwMDEwQjFFOTJDNEEwMDAwMDAwMDg2NjkyQzAwNTQKKzoxMDExNjAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwOTAyRUFGRkZGOEEKKzoxMDExNzAwMDAwMDAwMDEwMDAwQzAwMDIwMDAwMDAwMDAyMDQwQTAwNDEKKzoxMDExODAwMDAwMDAwMDBGNDYwQzAwMDEwMDAwMDAwRjAyODUwMDAxNjYKKzoxMDExOTAwMDAwMDAwMDEwOTE4QzAxRkMwMDAwMDAxMEI3MDQwRTQxMEIKKzoxMDExQTAwMDAwMDAwMDAwMEY0MDAwMDAwMDAwMDAwMDBENjEwMDAwODIKKzoxMDExQjAwMDAwMDAwMDAwMEE2NDAwMDAwMDAwMDAwMDBBRTUwMDAwRDIKKzoxMDExQzAwMDAwMDAwMDA5MEI2NkZGRkYwMDAwMDAwMDBDMDAwMDAwOUIKKzoxMDExRDAwMDAwMDAwMDAwMEI4MDAwMDAwMDAwMDAwODBDODYwMDEyRDgKKzoxMDExRTAwMDAwMDAwMDA4MEY4MDAwMDMwMDAwMDAwQzI5NTIwMDAwREUKKzoxMDExRjAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAwODI3MTEwMDEyRUUKKzoxMDEyMDAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAwMDI2NDYwMDAwN0MKKzoxMDEyMTAwMDAwMDAwMDAwMjMwNjAwMDAwMDAwMDAxMEIxOTgwMDA1NDcKKzoxMDEyMjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwODBGODAwMDA0RjQKKzoxMDEyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMUYwMDAwN0YKKzoxMDEyNDAwMDAwMDAwMDAwMzIxNDAwMDAwMDAwMDAwMDMyOTUwMDAwOTEKKzoxMDEyNTAwMDAwMDAwMDAwMzFFMzJFMDAwMDAwMDAwNTczNjYyQzAwNDIKKzoxMDEyNjAwMDAwMDAwMDAwMjU5NjAwMDAwMDAwMDAxMEIxODcwMDE2NjUKKzoxMDEyNzAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwRjBGNkIwMDA3MjkKKzoxMDEyODAwMDAwMDAwMDAwMEQ2OTAwMDAwMDAwMDAwMDBBNkMwMDAwNzIKKzoxMDEyOTAwMDAwMDAwMDAwMEFFRDAwMDAwMDAwMDAwMDBCNkUwMDAwREUKKzoxMDEyQTAwMDAwMDAwMDAwMEI4MDAwMDAwMDAwMDAwMDBDODcwMDAwMjAKKzoxMDEyQjAwMDAwMDAwMDA4MEY4MDAwMDMwMDAwMDAxMDIwNTMwMDAwMTEKKzoxMDEyQzAwMDAwMDAwMDBDNjk1MjAwMDEwMDAwMDAxMDAwMUYwMDAwMjcKKzoxMDEyRDAwMDAwMDAwMDAwMjJDNThDMDAwMDAwMDAwMDIzMUIwMDAwNUQKKzoxMDEyRTAwMDAwMDAwMDAwMjcxMTAwMDAwMDAwMDAwMDI2OTAwMDAwMTAKKzoxMDEyRjAwMDAwMDAwMDEwQjgxNzBFMDMwMDAwMDAwQzI5ODAwMDAwNDkKKzoxMDEzMDAwMDAwMDAwMDE4ODAwMEZGRjYwMDAwMDAxMEIxOTgwMDAyRjUKKzoxMDEzMTAwMDAwMDAwMDA4MEY4MDAwMDQwMDAwMDAwODIyMDAwMDFBRUUKKzoxMDEzMjAwMDAwMDAwMDA4MkM4MDAwMEMwMDAwMDAwODJEMDAwMDBDQkMKKzoxMDEzMzAwMDAwMDAwMDA4MkQ4MDAwMTAwMDAwMDAxMDAwMUYwMDAwQjkKKzoxMDEzNDAwMDAwMDAwMDAwMEQ2RTAwMDAwMDAwMDAwM0U3Q0YzNDAwMzUKKzoxMDEzNTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDkxREUwMDAwNTkKKzoxMDEzNjAwMDAwMDAwMDEwQjE4NzAwMDcwMDAwMDAwMDM2MTQwMDAwRTQKKzoxMDEzNzAwMDAwMDAwMDAwMzY5NTAwMDAwMDAwMDAwMDM3MTYwMDAwNTUKKzoxMDEzODAwMDAwMDAwMDA4MkM4MDAwNTAwMDAwMDAwODJEMDAwMDMwRjQKKzoxMDEzOTAwMDAwMDAwMDA4MkQ4MDAwMEMwMDAwMDAxODgwMDBGRjJGQzYKKzoxMDEzQTAwMDAwMDAwMDAwMjY0NjAwMDAwMDAwMDAwMDIzMDAwMDAwQUUKKzoxMDEzQjAwMDAwMDAwMDA5MjVFNkZGRkYwMDAwMDAwMDBCNkUwMDAwQTIKKzoxMDEzQzAwMDAwMDAwMDAzRTdDRjJDMDAwMDAwMDAwODIyMDAwMDFCRjMKKzoxMDEzRDAwMDAwMDAwMDBDNjk1MjAwMDAwMDAwMDAwQzI5ODAwMDAwOTEKKzoxMDEzRTAwMDAwMDAwMDE4ODAwMEZGMjYwMDAwMDAwMDJBMDAwMDAwMTYKKzoxMDEzRjAwMDAwMDAwMDE4ODAwMEZGMjQwMDAwMDAwMDJBMDAwMDAwMDgKKzoxMDE0MDAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDkxREUwMDAwQTgKKzoxMDE0MTAwMDAwMDAwMDA4MkM4MDAwMUEwMDAwMDAwODJEMDAwMDFBQUYKKzoxMDE0MjAwMDAwMDAwMDA1NzM2NjAwMDAwMDAwMDAwODJEODAwMDAyMjcKKzoxMDE0MzAwMDAwMDAwMDAwMzE4MDAwMDAwMDAwMDAxMDkxREUwMDAwN0MKKzoxMDE0NDAwMDAwMDAwMDA4MkM4MDAwMEMwMDAwMDAwODJEMDAwMDBDOUIKKzoxMDE0NTAwMDAwMDAwMDA4MkQ4MDAwMDQwMDAwMDAxODgwMDBGRjE3MjUKKzoxMDE0NjAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAxODgwMDBGRjE1QjYKKzoxMDE0NzAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMDAwMUYwMDAwMTMKKzoxMDE0ODAwMDAwMDAwMDAwMEYwMDgwMDAwMDAwMDAwODBGODAwMDA3MkYKKzoxMDE0OTAwMDAwMDAwMDE4ODAwMDAwMUEwMDAwMDAwMDI4MEEwMDAwNjgKKzoxMDE0QTAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAwODIyMDAwMDA5MDIKKzoxMDE0QjAwMDAwMDAwMDAwMjkwMDAwMDAwMDAwMDAwRjY1NjgwMDEwMTcKKzoxMDE0QzAwMDAwMDAwMDAzRjY2Qzk0MDAwMDAwMDAxMEI5NzJBMDA0NDQKKzoxMDE0RDAwMDAwMDAwMDBDNzNFNzAwMTkwMDAwMDAwQzIxNDIwMDA0MUEKKzoxMDE0RTAwMDAwMDAwMDAwM0NGODAwMDAwMDAwMDAwQzI5ODAwMDAwMTMKKzoxMDE0RjAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwODIyMDAwMDA4MzcKKzoxMDE1MDAwMDAwMDAwMDBDNjE0MjAwMDQwMDAwMDAxODAwMEEwMDAwMDYKKzoxMDE1MTAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAwQzYxNDIwMDAwMTUKKzoxMDE1MjAwMDAwMDAwMDEwMDE0MjAwMDMwMDAwMDAwQzMzRTcwMDFEMjIKKzoxMDE1MzAwMDAwMDAwMDBDNjE0MjAwMDIwMDAwMDAxODAwMEEwMDAwRDgKKzoxMDE1NDAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMDAwMUYwMDAwNDIKKzoxMDE1NTAwMDAwMDAwMDBGMEY0NzAwMDcwMDAwMDAwODBGODAwMDA4ODAKKzoxMDE1NjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDAwOUYwMDAwMTcKKzoxMDE1NzAwMDAwMDAwMDE4ODAwMEZFRjQwMDAwMDAwMDMzNTEwMDAwNUQKKzoxMDE1ODAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMEIxQzYwMDIzODcKKzoxMDE1OTAwMDAwMDAwMDBGMEY1MDAwMDcwMDAwMDAwMDBBNjAwMDAwNkMKKzoxMDE1QTAwMDAwMDAwMDAwMEFFMTAwMDAwMDAwMDAwRjRCNjIwMDA4OEMKKzoxMDE1QjAwMDAwMDAwMDA5MEIxNjAwRkYwMDAwMDAwRjRDNjIwMDEwMzUKKzoxMDE1QzAwMDAwMDAwMDAwMEQ2MjAwMDAwMDAwMDAwOTBEMUEwMEZGN0QKKzoxMDE1RDAwMDAwMDAwMDEwMDc1MDAwMDMwMDAwMDAwQzBEMUEwMDA4NjYKKzoxMDE1RTAwMDAwMDAwMDBDMEIxNjAwMDgwMDAwMDAwMDBDQzYwMDAwRjQKKzoxMDE1RjAwMDAwMDAwMDAwMEI4MDAwMDAwMDAwMDAwMDA2OTgwMDAwQzIKKzoxMDE2MDAwMDAwMDAwMDA4MEY4MDAwMDMwMDAwMDAxMDA2QzIwMDA0NjQKKzoxMDE2MTAwMDAwMDAwMDBDMjkwMDAwMDIwMDAwMDAxMDI2NDIwMDAyMTkKKzoxMDE2MjAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAwODIyMDAwMDAxMDUKKzoxMDE2MzAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAwMDIzMUIwMDAwQkQKKzoxMDE2NDAwMDAwMDAwMDAwMjcxMTFBMDAwMDAwMDAwMDY2OTAwMDAwNTIKKzoxMDE2NTAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAxMEIxOTczMjA5NzAKKzoxMDE2NjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwMDA2OTgwMDAwMjcKKzoxMDE2NzAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAzNUQKKzoxMDE2ODAwMDAwMDAwMDAwMjJDNThDMDAwMDAwMDAxMDAwMUYwMDAwQjgKKzoxMDE2OTAwMDAwMDAwMDA4MEY4MDAwMDMwMDAwMDAxODgwMDBGRkYzMjYKKzoxMDE2QTAwMDAwMDAwMDEwQjFDODAwMTMwMDAwMDAxMEIxQzYwMDAzMTQKKzoxMDE2QjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwRjIKKzoxMDE2QzAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAwQzI5NTIwMDAzMDkKKzoxMDE2RDAwMDAwMDAwMDEwMDZDMjAwMDIwMDAwMDAwQzI5NTIwMDAyQTcKKzoxMDE2RTAwMDAwMDAwMDAwMjJDNThDMDAwMDAwMDAwMDI3NjUwMDAwRkIKKzoxMDE2RjAwMDAwMDAwMDAwMjZFNDAwMDAwMDAwMDAwODIyMDAwMDE2QTAKKzoxMDE3MDAwMDAwMDAwMDEwQjFDNjAwMDMwMDAwMDAwMDIzNDgwMDAwRTQKKzoxMDE3MTAwMDAwMDAwMDEwQjE4MDAwMDUwMDAwMDAwMDIzNDgwMDAwMTgKKzoxMDE3MjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwRjBGNTAwMDA3OEYKKzoxMDE3MzAwMDAwMDAwMDE4ODAwMDAwMTIwMDAwMDAwODIyMDAwMDE2QkYKKzoxMDE3NDAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwMDMwMTQwMDAwQTAKKzoxMDE3NTAwMDAwMDAwMDAwMzA5NTAwMDAwMDAwMDAxMDA3NTAwMDAzNUEKKzoxMDE3NjAwMDAwMDAwMDA5MEIxNjAwRkYwMDAwMDAwOTBEMUEwMEZGMjEKKzoxMDE3NzAwMDAwMDAwMDBGMzExNjAwMDgwMDAwMDAwMDMxNjIzNDAwNDQKKzoxMDE3ODAwMDAwMDAwMDAzRjE2MjMwMDAwMDAwMDAxMDIwNUYwMDAwNDQKKzoxMDE3OTAwMDAwMDAwMDAwMkM1MTAwMDAwMDAwMDAwOTJDRDEwMDdGNDcKKzoxMDE3QTAwMDAwMDAwMDA4MkNEOTAwMDAwMDAwMDAwODJEMDAwMDAwRjcKKzoxMDE3QjAwMDAwMDAwMDA4MkQ4MDAwMEMwMDAwMDAwMDAwMDAwMDAwNjgKKzoxMDE3QzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxMDA1QzIwMDA0QkYKKzoxMDE3RDAwMDAwMDAwMDA4MEY4MDAwMDcwMDAwMDAwMDMzMDAwMDAwMzgKKzoxMDE3RTAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAxODgwMDBGRUE1MEYKKzoxMDE3RjAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwRjBGNTAwMDA3NEEKKzoxMDE4MDAwMDAwMDAwMDEwQjFDNjAwMkQwMDAwMDAwRjQ3NDIwMDA4ODQKKzoxMDE4MTAwMDAwMDAwMDA5MDcwRTAwMEYwMDAwMDAwODA3MEUwMDA4NzYKKzoxMDE4MjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwODA5MDAwMDAxNzcKKzoxMDE4MzAwMDAwMDAwMDA3MDkxMjFDMDAwMDAwMDAwM0NCQ0E5MjAwNDAKKzoxMDE4NDAwMDAwMDAwMDAwMEI5N0EyMDAwMDAwMDAwNzQyMTcxQzAwRDgKKzoxMDE4NTAwMDAwMDAwMDAwMEIwNDAwMDAwMDAwMDAwRjBBODQwMDAzRDkKKzoxMDE4NjAwMDAwMDAwMDAwMEE5NTlDMDAwMDAwMDAwMDRBMDA5QTAwNTkKKzoxMDE4NzAwMDAwMDAwMDA4ODIxMjAwMDEwMDAwMDAwMTBDMTcwODAwOUYKKzoxMDE4ODAwMDAwMDAwMDAwMEM5NzhDMDAwMDAwMDAwMDAyMTgwMDAwMEYKKzoxMDE4OTAwMDAwMDAwMDA4MEQwMEZGRkYwMDAwMDAwODBGODAwMDA2OTgKKzoxMDE4QTAwMDAwMDAwMDBDMjkwMDAwMDAwMDAwMDAxMDA2QzIwMDA0MjcKKzoxMDE4QjAwMDAwMDAwMDBDMjk1MjAwMDIwMDAwMDAxMDI2NDIwMDAyMjUKKzoxMDE4QzAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAwODIyMDAwMDAxNjMKKzoxMDE4RDAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAxMEIxOTczMjBDQzMKKzoxMDE4RTAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTEwODAwN0EKKzoxMDE4RjAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAwQzI5ODAwMDAwM0QKKzoxMDE5MDAwMDAwMDAwMDAwMDIxODAwMDAwMDAwMDAxMDIwNTMwMDAwM0EKKzoxMDE5MTAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAwMDIyQzUzNjAwMjAKKzoxMDE5MjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwODBGODAwMDA2RUIKKzoxMDE5MzAwMDAwMDAwMDE4ODAwMEZGRjQwMDAwMDAwMDIzMUIwMDAwREUKKzoxMDE5NDAwMDAwMDAwMDAwMjcxMTA4MDAwMDAwMDAwMDY2OTAwMDAwNjEKKzoxMDE5NTAwMDAwMDAwMDEwQjFDODAwMEIwMDAwMDAwQzI5ODAwMDAwM0UKKzoxMDE5NjAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAwNkQKKzoxMDE5NzAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAxMDA2QzIwMDAyMDMKKzoxMDE5ODAwMDAwMDAwMDBDMjk1MjAwMDIwMDAwMDAwMDIyQzU4QzAwNUIKKzoxMDE5OTAwMDAwMDAwMDAwMjc2NTAwMDAwMDAwMDAwMDI2RTQwMDAwQjEKKzoxMDE5QTAwMDAwMDAwMDAwMjM0ODAwMDAwMDAwMDAwODIyMDAwMDE3OEIKKzoxMDE5QjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDAwMUYwMDAwNDMKKzowODE5QzAwMDAwMDAwMDE4ODAwMEZFNkExRgorOjAwMDAwMDAxRkYKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKKyAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgKiBhY2NvbXBhbnlpbmcgaXQuCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA5LTQuNi4xNS5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDktNC42LjE1LmZ3LmloZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOTk1YmIuLjAwMDAwMDAKLS0tIGEvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDktNC42LjE1LmZ3LmloZXgKKysrIC9kZXYvbnVsbApAQCAtMSw0OTAgKzAsMCBAQAotOjEwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4ODAwMDAwMDU4MDAwMDAwMDAwMwotOjEwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAotOjEwMDAzMDAwMDAwMDEwMTgwMDAwMERFMDAwMDAwMDA1MDAwMDAwMDBBNgotOjEwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAotOjA4MDA1MDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MDgwMDU4MDAwMDAwMDAxMEIxODAwMDAyNUQKLToxMDAwNjAwMDAwMDAwMDFGMDMwMzAxMDAwMDAwMDAwOEFDMDAwMDAxQjUKLToxMDAwNzAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwQzJGODAwMDAxQkYKLToxMDAwODAwMDAwMDAwMDAwMkIwMDAwMDAwMDAwMDAwMDJCODAwMDAwOUEKLToxMDAwOTAwMDAwMDAwMDEwMjAzRjAwNkMwMDAwMDAxMDIxM0YwMDAzMTIKLToxMDAwQTAwMDAwMDAwMDEwMjBCRjAwM0IwMDAwMDAxODgwMDBGRkZEOTIKLToxMDAwQjAwMDAwMDAwMDEwQjFCOEIwMTUwMDAwMDAwQjJGREYwMDAyRTcKLToxMDAwQzAwMDAwMDAwMDAwMDNEODAwMDAwMDAwMDAwMDJDMzgwMDAwRjEKLToxMDAwRDAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwMzcKLToxMDAwRTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1RTMKLToxMDAwRjAwMDAwMDAwMDE4ODAwMDAwOEYwMDAwMDAwODJEODAwMTFDMDcKLToxMDAxMDAwMDAwMDAwMDA4MDIwMDAwMDEwMDAwMDAxMDkxREUwMDAwNjUKLToxMDAxMTAwMDAwMDAwMDBGNDJFMDAwMUMwMDAwMDAxMDkxODQwQTE3NEMKLToxMDAxMjAwMDAwMDAwMDEwMDg2NjAwMTYwMDAwMDAwQzI5ODAwMDAyODQKLToxMDAxMzAwMDAwMDAwMDBDMUY4MDAwMDIwMDAwMDAwMDJBREYwMDAwMDkKLToxMDAxNDAwMDAwMDAwMDA4MkEwMDAwMEYwMDAwMDAwODA1MDA1NTU1QjcKLToxMDAxNTAwMDAwMDAwMDE4ODAwMEZGRTgwMDAwMDAwODAyMDAwMDAxMTUKLToxMDAxNjAwMDAwMDAwMDBGNDJFMDAwMUMwMDAwMDAxMDkxODQwQTE5RkEKLToxMDAxNzAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDA2OEEKLToxMDAxODAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA2M0UKLToxMDAxOTAwMDAwMDAwMDE4ODAwMDAwODMwMDAwMDAxMDA4NjYwMDEzQjMKLToxMDAxQTAwMDAwMDAwMDE4ODAwMEZGRjEwMDAwMDAwOEIxMDAwMDAxMEQKLToxMDAxQjAwMDAwMDAwMDA4MkM4MDAxMEMwMDAwMDAwODJEMDAwMDA4NDEKLToxMDAxQzAwMDAwMDAwMDA4MkQ4MDAwMDEwMDAwMDAxODgwMDAwMDdDNjUKLToxMDAxRDAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwQzFGODAwMDAyNTcKLToxMDAxRTAwMDAwMDAwMDAwMkMwNzAwMDAwMDAwMDAxMDkxREUwMDAwNUQKLToxMDAxRjAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRkQzOTAKLToxMDAyMDAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwQzFGODAwMDAwMjgKLToxMDAyMTAwMDAwMDAwMDAwMkMwNzAwMDAwMDAwMDAxMDkxREUwMDAwMkMKLToxMDAyMjAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRkNENjUKLToxMDAyMzAwMDAwMDAwMDBDMUY4MDAwMDIwMDAwMDAwMDA1MDAwMDAwMEMKLToxMDAyNDAwMDAwMDAwMDE4ODAwMEZGQ0EwMDAwMDAwQzI5ODAwMDAyOTYKLToxMDAyNTAwMDAwMDAwMDBDMUY4MDAwMDIwMDAwMDAwMDJBREYwMDAwRTgKLToxMDAyNjAwMDAwMDAwMDA4MkEwMDAwMDUwMDAwMDAwODA1MDA1NTU1QTAKLToxMDAyNzAwMDAwMDAwMDE4ODAwMEZGQzQwMDAwMDAwODAyMjQwMDQ1QjAKLToxMDAyODAwMDAwMDAwMDE4MDAwNDAwMDAwMDAwMDAxODgwMDAwMDFDOUUKLToxMDAyOTAwMDAwMDAwMDE4ODAwMDAwMUUwMDAwMDAxODgwMDAwMDY1QUIKLToxMDAyQTAwMDAwMDAwMDE4ODAwMDAwQUQwMDAwMDAxODgwMDAwMEFDQzUKLToxMDAyQjAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwMEUKLToxMDAyQzAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwRkUKLToxMDAyRDAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwRUUKLToxMDAyRTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwREUKLToxMDAyRjAwMDAwMDAwMDE4ODAwMDAwRjMwMDAwMDAxODgwMDAwMDAwREIKLToxMDAzMDAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDE1QTgKLToxMDAzMTAwMDAwMDAwMDE4ODAwMDAwMUIwMDAwMDAxODgwMDAwMDAwOTIKLToxMDAzMjAwMDAwMDAwMDE4ODAwMDAwQzMwMDAwMDAxODgwMDAwMDJFQUMKLToxMDAzMzAwMDAwMDAwMDE4ODAwMDAwRjMwMDAwMDAxODgwMDAwMTFFN0IKLToxMDAzNDAwMDAwMDAwMDE4ODAwMDAwRTkwMDAwMDAxODgwMDAwMTQyNTEKLToxMDAzNTAwMDAwMDAwMDE4ODAwMDAwNEUwMDAwMDAxODgwMDAwMDAwMUYKLToxMDAzNjAwMDAwMDAwMDE4ODAwMDAwODAwMDAwMDAwQzFGODAwMDAxQzkKLToxMDAzNzAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRkEzM0UKLToxMDAzODAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwQzI5ODAwMDAxNDIKLToxMDAzOTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwODJBMDAwMDAyN0QKLToxMDAzQTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRjlEMTQKLToxMDAzQjAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwQzI5ODAwMDAxMTIKLToxMDAzQzAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDI5NDIwMDAwMTYKLToxMDAzRDAwMDAwMDAwMDA4MkEwMDAwMDIwMDAwMDAwMDA1MDAwMDAwRTQKLToxMDAzRTAwMDAwMDAwMDE4ODAwMEZGOTYwMDAwMDAxODgwMDBGRjk1QjQKLToxMDAzRjAwMDAwMDAwMDEwQjFCQ0IwMEEwMDAwMDAwQjJGREYwMDAyQUIKLToxMDA0MDAwMDAwMDAwMDAwMDNEODAwMDAwMDAwMDAwMDJDM0MwMDAwQTkKLToxMDA0MTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1QUYKLToxMDA0MjAwMDAwMDAwMDE4ODAwMDAwMjkwMDAwMDAxODgwMDAwMEJCQjgKLToxMDA0MzAwMDAwMDAwMDEwMkM2MjAxQkEwMDAwMDAxODgwMDAwMDA1QzYKLToxMDA0NDAwMDAwMDAwMDA4MkM4MDAxMEQwMDAwMDAwODJEMDAwMDA5QUMKLToxMDA0NTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA3NkEKLToxMDA0NjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwQzFGODAwMDAwMkMKLToxMDA0NzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDJBREYwMDAwRjQKLToxMDA0ODAwMDAwMDAwMDA4MkEwMDAwMDYwMDAwMDAwODA1MDA1NTU1N0QKLToxMDA0OTAwMDAwMDAwMDE4ODAwMEZGODAwMDAwMDAxMDkxRDQwMDAwRDAKLToxMDA0QTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxRUEKLToxMDA0QjAwMDAwMDAwMDA4MkEwMDAwMEIwMDAwMDAwMDA1MDAwMDAwRkEKLToxMDA0QzAwMDAwMDAwMDE4ODAwMEZGN0EwMDAwMDAwMDAyMDIwMDAwMTcKLToxMDA0RDAwMDAwMDAwMDAwMDI5QTAwMDAwMDAwMDAwMDA2MEMyQzAwNDIKLToxMDA0RTAwMDAwMDAwMDA0QzYwQzM0MDAwMDAwMDAxMDAwMUYwMDAwRDMKLToxMDA0RjAwMDAwMDAwMDEwQjE5NjE4MEMwMDAwMDAwODA2OTYwMDA0RDkKLToxMDA1MDAwMDAwMDAwMDA5MDY4REZGRkMwMDAwMDAwNENEMDUxQTAwNjQKLToxMDA1MTAwMDAwMDAwMDA0Q0M5QTE4MDAwMDAwMDAxMDIwRDcwMDAwNTIKLToxMDA1MjAwMDAwMDAwMDBDMkI1NjAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMDA1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDIwRDcwMDAwQjQKLToxMDA1NDAwMDAwMDAwMDA4MEY4MDAwMDEwMDAwMDAxMEIxODAwMUY0REQKLToxMDA1NTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCNTYwMDAwOUYKLToxMDA1NjAwMDAwMDAwMDE4MDAwNDAwMDAwMDAwMDAwMDA2ODIwMDAwRTcKLToxMDA1NzAwMDAwMDAwMDEwQjE4QTAwMDYwMDAwMDAwMDg2MEMxNDAwODQKLToxMDA1ODAwMDAwMDAwMDEwQjE4QzAwMDQwMDAwMDAwMDA1MDAwMDAwMTUKLToxMDA1OTAwMDAwMDAwMDA4MkEwMDAwMDEwMDAwMDAxMDkxRDQwMDAwQjMKLToxMDA1QTAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAwMDA1MDIwMDAwMUYKLToxMDA1QjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxODAwMEEwMDAwOUEKLToxMDA1QzAwMDAwMDAwMDEwQjFBMEIwMTMwMDAwMDAwQjJGREYwMDAyRUMKLToxMDA1RDAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAwODJDODAwMDAwMUIKLToxMDA1RTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAxMDkxRDQwMDAwNjEKLToxMDA1RjAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRkVFQkUKLToxMDA2MDAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAxMDAwMUYwMDAwRTkKLToxMDA2MTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwRjQ3NjAwMDA4OUQKLToxMDA2MjAwMDAwMDAwMDBGMDYwRTAwMDEwMDAwMDAwMDBGNTgwMDAwM0YKLToxMDA2MzAwMDAwMDAwMDAwMEE2NDAwMDAwMDAwMDAwMDBBRTUwMDAwNUQKLToxMDA2NDAwMDAwMDAwMDA5MEI2NkZGRkYwMDAwMDAwMDBENjEwMDAwQzQKLToxMDA2NTAwMDAwMDAwMDE4ODAwMDAwMTMwMDAwMDAwRjQ3NjAwMDA4MzEKLToxMDA2NjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwODJDODAwMDAwQkIKLToxMDA2NzAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAxMDkxRDQwMDAwRDAKLToxMDA2ODAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAwRjA2MEUwMDAxNzQKLToxMDA2OTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDBGNTgwMDAwQzQKLToxMDA2QTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBBNjQwMDAwNUQKLToxMDA2QjAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGRDMKLToxMDA2QzAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDAyNjIwMDAwNTgKLToxMDA2RDAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDMxMDQwMDAwQ0EKLToxMDA2RTAwMDAwMDAwMDAwMzA5QTAwMDAwMDAwMDAxODgwMDBGRkJDRUQKLToxMDA2RjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAxMDAwMjIwMDAyMTAKLToxMDA3MDAwMDAwMDAwMDBDMjk1MjAwMDEwMDAwMDAwQzI5NTIwMDAwREEKLToxMDA3MTAwMDAwMDAwMDA4MDIwMDAwMEUwMDAwMDAwODAyODAwMDFBMUQKLToxMDA3MjAwMDAwMDAwMDEwQjFDNDBBMDIwMDAwMDAwODAyMDAwMDAzMkIKLToxMDA3MzAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAwQzFGODAwMDAxRTIKLToxMDA3NDAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwMDJBMDAwODAwNkUKLToxMDA3NTAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRjI3MjQKLToxMDA3NjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAxMDkxRDQwMDAwRjkKLToxMDA3NzAwMDAwMDAwMDA4MkEwMDAwMDEwMDAwMDAwMDJDMjAwMDAwRkEKLToxMDA3ODAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwODAKLToxMDA3OTAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAxMDkxRDQwMDAwMTIKLToxMDA3QTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDA2MTAKLToxMDA3QjAwMDAwMDAwMDA4MkQwMDAwMDYwMDAwMDAwMDMwODAwMDAwNEUKLToxMDA3QzAwMDAwMDAwMDAwMzEwMDAwMDAwMDAwMDAwODJEODAwMDA2M0QKLToxMDA3RDAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQjcKLToxMDA3RTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDJBREYwMDAwODEKLToxMDA3RjAwMDAwMDAwMDA4MkEwMDAwMTAwMDAwMDAwMDA1MDAwMDAwQjIKLToxMDA4MDAwMDAwMDAwMDE4ODAwMEZGMTIwMDAwMDAxMDkxQTBCMDA5NDUKLToxMDA4MTAwMDAwMDAwMDA4MkM4MDAxMEQwMDAwMDAwODJEMDAwMDA5RDgKLToxMDA4MjAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA3OTYKLToxMDA4MzAwMDAwMDAwMDE4ODAwMEZGQUYwMDAwMDAxODgwMDAwMDEwQ0EKLToxMDA4NDAwMDAwMDAwMDA4QUMwMDAwMDEwMDAwMDAxODgwMDAwMDBCNTAKLToxMDA4NTAwMDAwMDAwMDAwMDM4MEIwMDAwMDAwMDAwQjJGREYwMDAyNEEKLToxMDA4NjAwMDAwMDAwMDAwMkMwMDQwMDAwMDAwMDAxMDkxRDQwMDAwQTcKLToxMDA4NzAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRjlFOEIKLToxMDA4ODAwMDAwMDAwMDE4ODAwMDAwMzAwMDAwMDAxODgwMDAwMDA2MDIKLToxMDA4OTAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMDAwRTAwMDMKLToxMDA4QTAwMDAwMDAwMDA4MkEwMDAwMDcwMDAwMDAwODA1MDA1NTU1NTgKLToxMDA4QjAwMDAwMDAwMDE4ODAwMEZFRkMwMDAwMDAwMDA2ODIwMDAwMUUKLToxMDA4QzAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQzYKLToxMDA4RDAwMDAwMDAwMDEwMENFNzAwMDcwMDAwMDAwOTA1NjJGRkZGQTAKLToxMDA4RTAwMDAwMDAwMDEwQkE2QzE0MDUwMDAwMDAwMDJBREYwMDAwQjAKLToxMDA4RjAwMDAwMDAwMDAwMjEwMDAwMDAwMDAwMDAwODJBMDAwMDA1QTAKLToxMDA5MDAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJDODAwMTBDQjEKLToxMDA5MTAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwQzMxNjIwMDE4RTMKLToxMDA5MjAwMDAwMDAwMDA4MkQ4MDAwMDEwMDAwMDAxODgwMDBGRjkwRUEKLToxMDA5MzAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAxMEIxQTBCMDBFNzMKLToxMDA5NDAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDAzRDgwMDAwQjEKLToxMDA5NTAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAxMDkxRDQwMDAwRDYKLToxMDA5NjAwMDAwMDAwMDE4ODAwMDAwMTQwMDAwMDAxMDJDNjIwMDAyM0IKLToxMDA5NzAwMDAwMDAwMDE4ODAwMDAwMEIwMDAwMDAwQjJGREYwMDAyQjkKLToxMDA5ODAwMDAwMDAwMDAwMkMwNzAwMDAwMDAwMDAwQzFGODAwMDAxODgKLToxMDA5OTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDA1MDAwMDAwRDMKLToxMDA5QTAwMDAwMDAwMDE4ODAwMEZFREUwMDAwMDAwODJDODAwMTBEMTEKLToxMDA5QjAwMDAwMDAwMDA4MkQwMDAwMDkwMDAwMDAxMDkxRDQwMDAwODQKLToxMDA5QzAwMDAwMDAwMDA4MkQ4MDAxMDcwMDAwMDAwQzI5ODAwMDAxQjQKLToxMDA5RDAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDkxREUwMDAwRUMKLToxMDA5RTAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDBBQzIKLToxMDA5RjAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRUQzODkKLToxMDBBMDAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAwODJDODAwMTBDMUUKLToxMDBBMTAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwODJEODAwMTM0QUYKLToxMDBBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDIwNUYwMDAwMzcKLToxMDBBMzAwMDAwMDAwMDA4MkM4MDAxNDAwMDAwMDAwODJEMDAwMDNDNTAKLToxMDBBNDAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAwMDAwMDAwMDAwRDQKLToxMDBBNTAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwODJDODAwMDgwRDMKLToxMDBBNjAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMTA4OTMKLToxMDBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwRjcKLToxMDBBODAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAxMDkxRDQwMDAwQ0YKLToxMDBBOTAwMDAwMDAwMDA4MDYwMEFBQUEwMDAwMDAxODgwMDBGRjVBMDMKLToxMDBBQTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxRTQKLToxMDBBQjAwMDAwMDAwMDA4MkEwMDAwMDkwMDAwMDAwODA1MDBBQUFBOUEKLToxMDBBQzAwMDAwMDAwMDE4ODAwMEZFQkEwMDAwMDAxMDkxRDQwMDAwNjEKLToxMDBBRDAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRjUyNzUKLToxMDBBRTAwMDAwMDAwMDEwOTFBMDNDMDIwMDAwMDAxMEIxRTY2MjA3NzcKLToxMDBBRjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMzEwMDAwN0UKLToxMDBCMDAwMDAwMDAwMDA5MkNCMTAwN0YwMDAwMDAwODJDRDkwMDAwNzMKLToxMDBCMTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMTBEREQKLToxMDBCMjAwMDAwMDAwMDEwQjFBODAwMDYwMDAwMDAxMDIwNUYwMDAwQzcKLToxMDBCMzAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAwMDJDQTcwMDAwOTYKLToxMDBCNDAwMDAwMDAwMDA4MkQwMDAwMTAwMDAwMDAwODJEODAwMTA4QTIKLToxMDBCNTAwMDAwMDAwMDE4ODAwMEZGNEIwMDAwMDAxMEIxQTYwMDEwM0MKLToxMDBCNjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwRjBGMzAwMDA3MDEKLToxMDBCNzAwMDAwMDAwMDAwMEE2MDAwMDAwMDAwMDAwMDBBRTEwMDAwMjAKLToxMDBCODAwMDAwMDAwMDBGNEI2MjAwMDgwMDAwMDAwOTBCMTYwMEZGNzgKLToxMDBCOTAwMDAwMDAwMDAwMEQ2MjAwMDAwMDAwMDAwOTBEMUEwMEZGQjcKLToxMDBCQTAwMDAwMDAwMDEwMDczMDAwMDMwMDAwMDAwQzBEMUEwMDA4QzAKLToxMDBCQjAwMDAwMDAwMDBDMEIxNjAwMDgwMDAwMDAwRjRDRTMwMDE4QUEKLToxMDBCQzAwMDAwMDAwMDAwMEM5OTJDMDAwMDAwMDAwNENDOTkzNDAwQjcKLToxMDBCRDAwMDAwMDAwMDA4MEY4MDAwMDAwMDAwMDAwQzI5ODAwMDAxQzgKLToxMDBCRTAwMDAwMDAwMDAwMzMzMTAwMDAwMDAwMDAwODIyMDAwMDE2NjEKLToxMDBCRjAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDBDQUUKLToxMDBDMDAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAwMDBGMjAwMDAwMDYKLToxMDBDMTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwODA1MDA1NTU1NzEKLToxMDBDMjAwMDAwMDAwMDE4ODAwMEZFOEUwMDAwMDAxMDkxRDQwMDAwMkIKLToxMDBDMzAwMDAwMDAwMDA4MDYwMEFBQUEwMDAwMDAxODgwMDBGRjI2OTUKLToxMDBDNDAwMDAwMDAwMDBGNDcyMjAwMDgwMDAwMDAwOTA3MEUwMDBGRjcKLToxMDBDNTAwMDAwMDAwMDA4MDcwRTAwMDgwMDAwMDAwODAyODAwMDAxRTQKLToxMDBDNjAwMDAwMDAwMDA3MDI4NTFDMDAwMDAwMDAwODgyODUwMDAxQ0EKLToxMDBDNzAwMDAwMDAwMDAwMDI4NTRDMDAwMDAwMDAwNzQyODUxQzAwQjcKLToxMDBDODAwMDAwMDAwMDAzQzNBQTUyMDAwMDAwMDAwMDAzQjEwRTAwRTAKLToxMDBDOTAwMDAwMDAwMDA3NEIwNzFDMDAwMDAwMDAwRjBGMzAwMDA3OEEKLToxMDBDQTAwMDAwMDAwMDBGMEE5NjAwMDMwMDAwMDAwMDBBOTU1QzAwOTcKLToxMDBDQjAwMDAwMDAwMDAwNEEwMDVBMDAwMDAwMDAwMDBDOTYwQTAwRTQKLToxMDBDQzAwMDAwMDAwMDA5MEM5OUZGRkYwMDAwMDAwODBEMDBGRkZGNjUKLToxMDBDRDAwMDAwMDAwMDEwQjE5NjMyMDIwMDAwMDAwODBGODAwMDA1RUQKLToxMDBDRTAwMDAwMDAwMDEwQjFBODAwMDgwMDAwMDAxMDIwNUYwMDAwMDQKLToxMDBDRjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMjAwMDAwOEQKLToxMDBEMDAwMDAwMDAwMDAwMkNBNzAwMDAwMDAwMDAwODJEMDAwMDEwQ0IKLToxMDBEMTAwMDAwMDAwMDA4MkQ4MDAxMDgwMDAwMDAxODgwMDBGRjEyNkMKLToxMDBEMjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAxMDAwMUYwMDAwREUKLToxMDBEMzAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDJBREYwMDAwRkUKLToxMDBENDAwMDAwMDAwMDA4MkEwMDAwMEQwMDAwMDAwODA1MDBBQUFBMDMKLToxMDBENTAwMDAwMDAwMDE4ODAwMEZFNjgwMDAwMDAxMDkxRDQwMDAwMjAKLToxMDBENjAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRjAwMzQKLToxMDBENzAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxMTEKLToxMDBEODAwMDAwMDAwMDA4MkEwMDAwMDcwMDAwMDAwODA1MDA1NTU1NzMKLToxMDBEOTAwMDAwMDAwMDE4ODAwMEZFNjAwMDAwMDAwODAzMDUwMDA0NDkKLToxMDBEQTAwMDAwMDAwMDA2ODMwNDBDMDAwMDAwMDAwODAyODUwMjAwMTkKLToxMDBEQjAwMDAwMDAwMDAwODYwNTBDMDAwMDAwMDAwMTg2MEMwRTAwRkIKLToxMDBEQzAwMDAwMDAwMDA4MDIwNDAwMDQwMDAwMDAwMDAyMDQxODAwRjMKLToxMDBERDAwMDAwMDAwMDAwODM4NzE4MDAwMDAwMDAxODAwMDIwMDAwRDcKLToxMDBERTAwMDAwMDAwMDEwQjE4MDAwMDQwMDAwMDAxRjAzMDMwMTAwOTgKLToxMDBERjAwMDAwMDAwMDA4MDUwMDAwRkYwMDAwMDAxODAwMDIwMDAwQ0QKLToxMDBFMDAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMEIxRDQwMDAwMjMKLToxMDBFMTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwODAyNTQwMDA5QjUKLToxMDBFMjAwMDAwMDAwMDA5Mjk1MjAwM0YwMDAwMDAxODAwMDQwMDAwRTMKLToxMDBFMzAwMDAwMDAwMDE4ODAwMDAwMTAwMDAwMDAxODgwMDAwMDExNjEKLToxMDBFNDAwMDAwMDAwMDE4ODAwMDAwNEIwMDAwMDAxODgwMDAwMTNDRUEKLToxMDBFNTAwMDAwMDAwMDE4ODAwMDAxM0IwMDAwMDAxODgwMDAwMTNBRUIKLToxMDBFNjAwMDAwMDAwMDE4ODAwMDAxM0EwMDAwMDAxODgwMDAwMDAwMTcKLToxMDBFNzAwMDAwMDAwMDE4ODAwMDAxNEQwMDAwMDAxODgwMDAwMTM2QkQKLToxMDBFODAwMDAwMDAwMDE4ODAwMDAwMEMwMDAwMDAxODgwMDAwMTUyRDMKLToxMDBFOTAwMDAwMDAwMDE4ODAwMDAxQUMwMDAwMDAxODgwMDAwMDgwRjUKLToxMDBFQTAwMDAwMDAwMDE4ODAwMDAxMDcwMDAwMDAxODgwMDAwMTE1RjQKLToxMDBFQjAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxODgwMDBGRkVBODcKLToxMDBFQzAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwQzI5ODAwMDAwNDMKLToxMDBFRDAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAxODgwMDBGRkU2MTIKLToxMDBFRTAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxODgwMDBGRkU0NUQKLToxMDBFRjAwMDAwMDAwMDAwMDM4MjAwMDAwMDAwMDAxODgwMDBGRkRGRjcKLToxMDBGMDAwMDAwMDAwMDAxMEMxNjE0MDAwMDAwMDAwMDhDMTgxNDAwRjIKLToxMDBGMTAwMDAwMDAwMDEwOTE5ODAwMDMwMDAwMDAwODBDOTYwMDAyRTkKLToxMDBGMjAwMDAwMDAwMDEwQjE4MDAwMDMwMDAwMDAwODBDOTYwMDAxRDIKLToxMDBGMzAwMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDBEMTkwMDAwN0YKLToxMDBGNDAwMDAwMDAwMDEwMjA1NjAwMDAwMDAwMDAwQzJCRDcwMDAxMEMKLToxMDBGNTAwMDAwMDAwMDA4MEY4MDAwMDEwMDAwMDAwMDAwMDAwMDAwRjkKLToxMDBGNjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxMDMKLToxMDBGNzAwMDAwMDAwMDEwMDExMzAxRjEwMDAwMDAxODAwMDcwMDAwM0MKLToxMDBGODAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAxMDkxOTYzNDIxQ0UKLToxMDBGOTAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDMUUwMDAwNzgKLToxMDBGQTAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDA2NEMKLToxMDBGQjAwMDAwMDAwMDA4MkQ4MDAxMDIwMDAwMDAwMDAwMDAwMDAwNzkKLToxMDBGQzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBENjEwMDAwMzQKLToxMDBGRDAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDA1MDIwMDAwRTgKLToxMDBGRTAwMDAwMDAwMDEwOTE5NjM0MTYwMDAwMDAxMDIwNUYwMDAwRjEKLToxMDBGRjAwMDAwMDAwMDAwMDlEODAwMDAwMDAwMDAwMDJDMUUwMDAwQzYKLToxMDEwMDAwMDAwMDAwMDA4MkM4MDAxMEUwMDAwMDAwODJEMDAwMDBBREUKLToxMDEwMTAwMDAwMDAwMDA4MkQ4MDAxMDIwMDAwMDAwMDAwMDAwMDAwMTgKLToxMDEwMjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBENjIwMDAwRDIKLToxMDEwMzAwMDAwMDAwMDAwMkMxMzAwMDAwMDAwMDAxODAwMEEwMDAwNEYKLToxMDEwNDAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAxMDkxOTYzNDA5MjUKLToxMDEwNTAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDMUUwMDAwQjcKLToxMDEwNjAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDZBMjcKLToxMDEwNzAwMDAwMDAwMDA4MkQ4MDAxMDIwMDAwMDAwMDAwMDAwMDAwQjgKLToxMDEwODAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBEN0EwMDAwNUEKLToxMDEwOTAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAxMDkxREUwMDAwQUYKLToxMDEwQTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxQzIKLToxMDEwQjAwMDAwMDAwMDAwMkY4MEFBMDAwMDAwMDAwMDJBMDAwMDAwQUQKLToxMDEwQzAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDAzNjIwMDAwNEQKLToxMDEwRDAwMDAwMDAwMDAwMkM0MDAwMDAwMDAwMDAwMDAyNjM4QzAwQjMKLToxMDEwRTAwMDAwMDAwMDAwMjY0NjAwMDAwMDAwMDAwODAyMDQwMDEyNzQKLToxMDEwRjAwMDAwMDAwMDEwQjkwNjA4MkUwMDAwMDAwMDBGNTgwMDAwODQKLToxMDExMDAwMDAwMDAwMDAwMEE2NDAwMDAwMDAwMDAwMDBBRTUwMDAwODIKLToxMDExMTAwMDAwMDAwMDA5MEI2NkZGRkYwMDAwMDAwMDBDMDAwMDAwNEIKLToxMDExMjAwMDAwMDAwMDAwMEI4MDAwMDAwMDAwMDAwODBDQzYwMDEyNDgKLToxMDExMzAwMDAwMDAwMDE4ODAwMEZGQ0EwMDAwMDAxMDIwNTYwMDAwQzgKLToxMDExNDAwMDAwMDAwMDBDMkJENzAwMDEwMDAwMDAwODBGODAwMDAzRjYKLToxMDExNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMUYwMDAwNjAKLToxMDExNjAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAwODI3MTEwMDEyREUKLToxMDExNzAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAwOEEzMUIwMDEyQTEKLToxMDExODAwMDAwMDAwMDEwQjE5ODAwMDYwMDAwMDAxMDAwMUYwMDAwRDEKLToxMDExOTAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAxMDIwNTYwMDAwN0EKLToxMDExQTAwMDAwMDAwMDBDMkJENzAwMDEwMDAwMDAwODBGODAwMDA0OTUKLToxMDExQjAwMDAwMDAwMDA4MjIwMDAwMDMwMDAwMDAwODJDODAwMDBDNDIKLToxMDExQzAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAxMDAwMUYwMDAwQUYKLToxMDExRDAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAwMDI1OTYwMDAwMDUKLToxMDExRTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwMDA2NjYwMDAwREUKLToxMDExRjAwMDAwMDAwMDAwODY2MTE4MDAwMDAwMDAwOTAyNjAwMDBGNzYKLToxMDEyMDAwMDAwMDAwMDBGMDIwNDAwMDIwMDAwMDAxMEI2MEMwODAzRUEKLToxMDEyMTAwMDAwMDAwMDBDMUZCRjAwMDAwMDAwMDAwQzMzNjYwMDEwMkYKLToxMDEyMjAwMDAwMDAwMDAwMzIxNDAwMDAwMDAwMDAwMDMyOTUwMDAwQjEKLToxMDEyMzAwMDAwMDAwMDA1NzM2NjJDMDAwMDAwMDAwMDMxRTMyRTAwNjIKLToxMDEyNDAwMDAwMDAwMDA4MkQ4MDAwMTAwMDAwMDAxMDIwNTMwMDAwNTYKLToxMDEyNTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxODgwMDBGRjc2MDIKLToxMDEyNjAwMDAwMDAwMDAwMjMwMDAwMDAwMDAwMDAwOTI1RTZGRkZGNDkKLToxMDEyNzAwMDAwMDAwMDA4MjIwMDAwMEIwMDAwMDAwQzY5NTIwMDAwNzIKLToxMDEyODAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwMjYKLToxMDEyOTAwMDAwMDAwMDE4ODAwMEZGNkYwMDAwMDAxMDkxREUwMDAwQzkKLToxMDEyQTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxQzAKLToxMDEyQjAwMDAwMDAwMDAwMkY4MEFBMDAwMDAwMDAwMDJBMDAwMDAwQUIKLToxMDEyQzAwMDAwMDAwMDAwMkM0MDAwMDAwMDAwMDAwODJDODAwMDQwQkUKLToxMDEyRDAwMDAwMDAwMDA4MkQwMDAwMjAwMDAwMDAwODJEODAwMTFDRTcKLToxMDEyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwN0YKLToxMDEyRjAwMDAwMDAwMDBGNDJFQTAwMTAwMDAwMDAxMDAwNEYwMDA0NDAKLToxMDEzMDAwMDAwMDAwMDEwQjc0NjkyMDAwMDAwMDAwODAyNDkwMDEyRDkKLToxMDEzMTAwMDAwMDAwMDEwQjU4NDBBMDAwMDAwMDAwMDBENjEwMDAwMEMKLToxMDEzMjAwMDAwMDAwMDEwQkE2NjM0NkQwMDAwMDAwMDAzNjIwMDAwODcKLToxMDEzMzAwMDAwMDAwMDEwQjg2MzBDNkIwMDAwMDAwODgzMDUwMDEyNjkKLToxMDEzNDAwMDAwMDAwMDEwMDA0RjAwMDIwMDAwMDAwMDAzNDkwMDAwRjAKLToxMDEzNTAwMDAwMDAwMDAxODMwNjhDMDAwMDAwMDAwMDgzQzYwQzAwMjIKLToxMDEzNjAwMDAwMDAwMDEwQjE4NzAwMTAwMDAwMDAwMDBCNkUwMDAwQUMKLToxMDEzNzAwMDAwMDAwMDE4ODAwMEZGNTAwMDAwMDAwMTA2NjkxNDAwMDIKLToxMDEzODAwMDAwMDAwMDEwOTE4QzAwMDIwMDAwMDAwOEI0RTkwMDAxODgKLToxMDEzOTAwMDAwMDAwMDEwQjFFOTJDNUYwMDAwMDAwMDg2NjkyQzAwRkQKLToxMDEzQTAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwOTAyRUFGRkZGNDgKLToxMDEzQjAwMDAwMDAwMDEwMDAwQzAwMDIwMDAwMDAwMDAyMDQwQTAwRkYKLToxMDEzQzAwMDAwMDAwMDBGNDYwQzAwMDEwMDAwMDAwRjAyODUwMDAxMjQKLToxMDEzRDAwMDAwMDAwMDEwOTE4QzAxRkMwMDAwMDAxMEI3MDQwRTU2QjQKLToxMDEzRTAwMDAwMDAwMDAwMkM0MDAwMDAwMDAwMDAwMDBGNDAwMDAwNDIKLToxMDEzRjAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDBBNjQwMDAwMTEKLToxMDE0MDAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGNzUKLToxMDE0MTAwMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDBCODAwMDAwMzUKLToxMDE0MjAwMDAwMDAwMDA4MEM4NjAwMTIwMDAwMDAxMDIwNTYwMDAwOEEKLToxMDE0MzAwMDAwMDAwMDBDMkJENzAwMDEwMDAwMDAwODBGODAwMDAzMDMKLToxMDE0NDAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAxMDAwMUYwMDAwRTYKLToxMDE0NTAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAwODI3MTEwMDEyRUIKLToxMDE0NjAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAwMDI2NDYwMDAwMUEKLToxMDE0NzAwMDAwMDAwMDAwMjMwNjAwMDAwMDAwMDAxMEIxOTgwMDA5RTEKLToxMDE0ODAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxREUKLToxMDE0OTAwMDAwMDAwMDEwMjA1NjAwMDAwMDAwMDAwQzJCRDcwMDAxQjcKLToxMDE0QTAwMDAwMDAwMDA4MEY4MDAwMDQwMDAwMDAwMDAwMDAwMDAwQTEKLToxMDE0QjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxQUUKLToxMDE0QzAwMDAwMDAwMDAwMzIxNDAwMDAwMDAwMDAwMDMyOTUwMDAwMEYKLToxMDE0RDAwMDAwMDAwMDAwMzFFMzJFMDAwMDAwMDAwNTczNjYyQzAwQzAKLToxMDE0RTAwMDAwMDAwMDAwMjU5NjAwMDAwMDAwMDAxMEIxODcwMDIxRDgKLToxMDE0RjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwRjBGNkIwMDA3QTcKLToxMDE1MDAwMDAwMDAwMDAwMEQ2OTAwMDAwMDAwMDAwMDBBNkMwMDAwRUYKLToxMDE1MTAwMDAwMDAwMDAwMEFFRDAwMDAwMDAwMDAwMDBCNkUwMDAwNUIKLToxMDE1MjAwMDAwMDAwMDAwMEI4MDAwMDAwMDAwMDAwMDBDODcwMDAwOUQKLToxMDE1MzAwMDAwMDAwMDE4ODAwMEZGMTgwMDAwMDAwMTBDMTYxNDAwQzUKLToxMDE1NDAwMDAwMDAwMDAwOEMxODE0MDAwMDAwMDAwODBDOTYwMDAxMzgKLToxMDE1NTAwMDAwMDAwMDEwOTE5ODAwMDIwMDAwMDAwODBDOTkwMDAxQTIKLToxMDE1NjAwMDAwMDAwMDAwMEQxOTAwMDAwMDAwMDAwMDBDMDAwMDAwNDkKLToxMDE1NzAwMDAwMDAwMDEwMjA1NjAwMDAwMDAwMDAwQzJCRDcwMDAxRDYKLToxMDE1ODAwMDAwMDAwMDA4MEY4MDAwMDEwMDAwMDAxMDIwNTMwMDAwNDAKLToxMDE1OTAwMDAwMDAwMDBDNjk1MjAwMDEwMDAwMDAxMDAwMUYwMDAwNTQKLToxMDE1QTAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAwMDIyQzU4QzAwNzkKLToxMDE1QjAwMDAwMDAwMDAwMjMxMjAwMDAwMDAwMDAwMDI3MTEwMDAwQkUKLToxMDE1QzAwMDAwMDAwMDAwMjY5MDAwMDAwMDAwMDAxMEI4MTcwRTAzNzUKLToxMDE1RDAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxODgwMDBGRkVCRDQKLToxMDE1RTAwMDAwMDAwMDAwODI5NzBFMDAwMDAwMDAwMEEzMTIwQTAwMTUKLToxMDE1RjAwMDAwMDAwMDA4MjIwMDAwMUEwMDAwMDAwODJDODAwMDBDRTcKLToxMDE2MDAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAwODJEODAwMDEwRDQKLToxMDE2MTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxNEMKLToxMDE2MjAwMDAwMDAwMDAwMEQ2RTAwMDAwMDAwMDAwM0U3Q0YzNDAwNTIKLToxMDE2MzAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDkxREUwMDAwNzYKLToxMDE2NDAwMDAwMDAwMDEwQjE4NzAwMDcwMDAwMDAwMDM2MTQwMDAwMDEKLToxMDE2NTAwMDAwMDAwMDAwMzY5NTAwMDAwMDAwMDAwMDM3MTYwMDAwNzIKLToxMDE2NjAwMDAwMDAwMDA4MkM4MDAwNTAwMDAwMDAwODJEMDAwMDMwMTEKLToxMDE2NzAwMDAwMDAwMDA4MkQ4MDAwMEMwMDAwMDAxMDIwNTMwMDAwMjYKLToxMDE2ODAwMDAwMDAwMDE4ODAwMEZFRjEwMDAwMDAwMDI2NDYwMDAwNjcKLToxMDE2OTAwMDAwMDAwMDAwMjMwMDAwMDAwMDAwMDAwOTI1RTZGRkZGMTUKLToxMDE2QTAwMDAwMDAwMDAwMEI2RTAwMDAwMDAwMDAwM0U3Q0YyQzAwREMKLToxMDE2QjAwMDAwMDAwMDA4MjIwMDAwMUIwMDAwMDAwQzY5NTIwMDAwMUUKLToxMDE2QzAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwRTIKLToxMDE2RDAwMDAwMDAwMDE4ODAwMEZFRTcwMDAwMDAwMDJGRDUwMDAwODkKLToxMDE2RTAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMDAwM0YwMDBDNzUKLToxMDE2RjAwMDAwMDAwMDAwMDY2NjAwMDAwMDAwMDAwMDg2NjExODAwN0YKLToxMDE3MDAwMDAwMDAwMDA5MDI2MDAwRjAwMDAwMDAxMEI3MEMwODA4OUIKLToxMDE3MTAwMDAwMDAwMDAwMkM0MDAwMDAwMDAwMDAwQzczNjYwMDEwNjgKLToxMDE3MjAwMDAwMDAwMDA4MkM4MDAwMTgwMDAwMDAwODJEMDAwMDE4QTAKLToxMDE3MzAwMDAwMDAwMDA4MkQ4MDAwMDIwMDAwMDAwQzVGQkYwMDAwQzgKLToxMDE3NDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxODgwMDBGRUQ4QUMKLToxMDE3NTAwMDAwMDAwMDAwMkZENTAwMDAwMDAwMDAwMDJBMDAwMDAwNUIKLToxMDE3NjAwMDAwMDAwMDAwMkM0MDAwMDAwMDAwMDAwQzczNjYwMDEwMTgKLToxMDE3NzAwMDAwMDAwMDA4MkM4MDAwMTgwMDAwMDAwODJEMDAwMDE4NTAKLToxMDE3ODAwMDAwMDAwMDA4MkQ4MDAwMDIwMDAwMDAwQzVGQkYwMDAwNzgKLToxMDE3OTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDAzMTMKLToxMDE3QTAwMDAwMDAwMDA4MkQwMDAwMDMwMDAwMDAwOTMwNjBGRkYwNzkKLToxMDE3QjAwMDAwMDAwMDA4MkQ4MDAwMDEwMDAwMDAwQzI5ODAwMDAwQkUKLToxMDE3QzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDFBQ0MKLToxMDE3RDAwMDAwMDAwMDA4MkQwMDAwMUEwMDAwMDAwMDMzMDAwMDAwODcKLToxMDE3RTAwMDAwMDAwMDA4MkQ4MDAwMDIwMDAwMDAwMDMxODAwMDAwOTEKLToxMDE3RjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDBDQUEKLToxMDE4MDAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAwODJEODAwMDA0REUKLToxMDE4MTAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAxMDkxREUwMDAwQzYKLToxMDE4MjAwMDAwMDAwMDE4ODAwMEZFQkQwMDAwMDAxODgwMDBGRUJDMTMKLToxMDE4MzAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMDAwMUYwMDAwNEYKLToxMDE4NDAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAwMDBGMDA4MDAwQkEKLToxMDE4NTAwMDAwMDAwMDA4MEY4MDAwMDcwMDAwMDAxODgwMDAwMDE1M0QKLToxMDE4NjAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAwODIyMDAwMDA5M0UKLToxMDE4NzAwMDAwMDAwMDAwMjg2RDAwMDAwMDAwMDAwMDI5MDAwMDAwQUEKLToxMDE4ODAwMDAwMDAwMDBGNjU2ODAwMTAwMDAwMDAwM0Y2NkM5NDAwNzMKLToxMDE4OTAwMDAwMDAwMDEwQjk3MkEwMDQwMDAwMDAwQzczRTcwMDE5RUEKLToxMDE4QTAwMDAwMDAwMDBDMjE0MjAwMDQwMDAwMDAwMDNCRjYwMDAwOTQKLToxMDE4QjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwRjAKLToxMDE4QzAwMDAwMDAwMDA4MjIwMDAwMDgwMDAwMDAwQzYxNDIwMDA0MzMKLToxMDE4RDAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDJBMDAwMDAwQkMKLToxMDE4RTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxN0EKLToxMDE4RjAwMDAwMDAwMDBGMEY0NzAwMDcwMDAwMDAwODBGODAwMDA4REQKLToxMDE5MDAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwOUYKLToxMDE5MTAwMDAwMDAwMDE4ODAwMEZFOUYwMDAwMDAxMDkxREUwMDAwMTMKLToxMDE5MjAwMDAwMDAwMDAwMkZENTAwMDAwMDAwMDAxMDAwMUYwMDAwODQKLToxMDE5MzAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAwMDMzNTEwMDAwRDQKLToxMDE5NDAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMEIxQzYwMDI5QkQKLToxMDE5NTAwMDAwMDAwMDBGMEY1MDAwMDcwMDAwMDAwMDBBNjAwMDAwQTgKLToxMDE5NjAwMDAwMDAwMDAwMEFFMTAwMDAwMDAwMDAwRjRCNjIwMDA4QzgKLToxMDE5NzAwMDAwMDAwMDA5MEIxNjAwRkYwMDAwMDAwRjRDNjIwMDEwNzEKLToxMDE5ODAwMDAwMDAwMDAwMEQ2MjAwMDAwMDAwMDAwOTBEMUEwMEZGQjkKLToxMDE5OTAwMDAwMDAwMDEwMDc1MDAwMDMwMDAwMDAwQzBEMUEwMDA4QTIKLToxMDE5QTAwMDAwMDAwMDBDMEIxNjAwMDgwMDAwMDAwMDBDQzYwMDAwMzAKLToxMDE5QjAwMDAwMDAwMDAwMEI4MDAwMDAwMDAwMDAwMDA2OTgwMDAwRkUKLToxMDE5QzAwMDAwMDAwMDEwMjA1NjAwMDAwMDAwMDAwQzJCRDcwMDAxODIKLToxMDE5RDAwMDAwMDAwMDA4MEY4MDAwMDMwMDAwMDAxMDA2QzIwMDA0OTEKLToxMDE5RTAwMDAwMDAwMDBDMjkwMDAwMDIwMDAwMDAxMDI2NDIwMDAyNDYKLToxMDE5RjAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAwODIyMDAwMDAxMzIKLToxMDFBMDAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxNTgKLToxMDFBMTAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTExQTAwMzYKLToxMDFBMjAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAwQzI5NTIwMDAwMzkKLToxMDFBMzAwMDAwMDAwMDEwQjE5NzMyMEMwMDAwMDAwQzI5ODAwMDAwNUIKLToxMDFBNDAwMDAwMDAwMDAwMDY5ODAwMDAwMDAwMDAxMDIwNTMwMDAwNzUKLToxMDFBNTAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAwMDIyQzU4QzAwODkKLToxMDFBNjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxRjgKLToxMDFBNzAwMDAwMDAwMDEwMjA1NjAwMDAwMDAwMDAwQzJCRDcwMDAxRDEKLToxMDFBODAwMDAwMDAwMDA4MEY4MDAwMDMwMDAwMDAxODgwMDBGRkVGMzYKLToxMDFBOTAwMDAwMDAwMDEwQjFDODAwMTMwMDAwMDAxMEIxQzYwMDAzMjAKLToxMDFBQTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwRkUKLToxMDFBQjAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAwQzI5NTIwMDAzMTUKLToxMDFBQzAwMDAwMDAwMDEwMDZDMjAwMDIwMDAwMDAwQzI5NTIwMDAyQjMKLToxMDFBRDAwMDAwMDAwMDAwMjJDNThDMDAwMDAwMDAwMDI3NjUwMDAwMDcKLToxMDFBRTAwMDAwMDAwMDAwMjZFNDAwMDAwMDAwMDAwODIyMDAwMDE2QUMKLToxMDFBRjAwMDAwMDAwMDEwQjFDNjAwMDMwMDAwMDAwMDIzNDgwMDAwRjEKLToxMDFCMDAwMDAwMDAwMDEwQjE4MDAwMDUwMDAwMDAwMDIzNDgwMDAwMjQKLToxMDFCMTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwRjBGNTAwMDA3OUIKLToxMDFCMjAwMDAwMDAwMDE4ODAwMDAwMTIwMDAwMDAwODIyMDAwMDE2Q0IKLToxMDFCMzAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwMDMwMTQwMDAwQUMKLToxMDFCNDAwMDAwMDAwMDAwMzA5NTAwMDAwMDAwMDAxMDA3NTAwMDAzNjYKLToxMDFCNTAwMDAwMDAwMDA5MEIxNjAwRkYwMDAwMDAwOTBEMUEwMEZGMkQKLToxMDFCNjAwMDAwMDAwMDBGMzExNjAwMDgwMDAwMDAwMDMxNjIzNDAwNTAKLToxMDFCNzAwMDAwMDAwMDAzRjE2MjMwMDAwMDAwMDAxMDIwNUYwMDAwNTAKLToxMDFCODAwMDAwMDAwMDAwMkM1MTAwMDAwMDAwMDAwOTJDRDEwMDdGNTMKLToxMDFCOTAwMDAwMDAwMDA4MkNEOTAwMDAwMDAwMDAwODJEMDAwMDAwMDMKLToxMDFCQTAwMDAwMDAwMDA4MkQ4MDAwMEMwMDAwMDAwMDAwMDAwMDAwNzQKLToxMDFCQjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxMDA1QzIwMDAzQ0MKLToxMDFCQzAwMDAwMDAwMDAwMzMwMDAwMDAwMDAwMDAwODBGODAwMDA3NDQKLToxMDFCRDAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAxMDAwMUYwMDAwNTMKLToxMDFCRTAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAxODgwMDBGRTQ0Q0MKLToxMDFCRjAwMDAwMDAwMDAwMkZENTAwMDAwMDAwMDAwMDJBMDAwMDAwQjcKLToxMDFDMDAwMDAwMDAwMDBGMEY1MDAwMDcwMDAwMDAxMEIxQzYwMDMwQTgKLToxMDFDMTAwMDAwMDAwMDBGNDc0MjAwMDgwMDAwMDAwOTA3MEUwMDBGRjcKLToxMDFDMjAwMDAwMDAwMDA4MDcwRTAwMDgwMDAwMDAxMDAwMUYwMDAwNjAKLToxMDFDMzAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAwODA5MDAwMDAxNDMKLToxMDFDNDAwMDAwMDAwMDA3MDkxMjFDMDAwMDAwMDAwM0NCQ0E5MjAwMkMKLToxMDFDNTAwMDAwMDAwMDAwMEI5N0EyMDAwMDAwMDAwNzQyMTcxQzAwQzQKLToxMDFDNjAwMDAwMDAwMDAwMEIwNDAwMDAwMDAwMDAwRjBBODQwMDAzQzUKLToxMDFDNzAwMDAwMDAwMDAwMEE5NTlDMDAwMDAwMDAwMDRBMDA5QTAwNDUKLToxMDFDODAwMDAwMDAwMDA4ODIxMjAwMDEwMDAwMDAwMTBDMTcwODAwOEIKLToxMDFDOTAwMDAwMDAwMDAwMEM5NzhDMDAwMDAwMDAwMDAyMTgwMDAwRkIKLToxMDFDQTAwMDAwMDAwMDA4MEQwMEZGRkYwMDAwMDAwODBGODAwMDA2ODQKLToxMDFDQjAwMDAwMDAwMDBDMjkwMDAwMDAwMDAwMDAxMDA2QzIwMDA0MTMKLToxMDFDQzAwMDAwMDAwMDBDMjk1MjAwMDIwMDAwMDAxMDI2NDIwMDAyMTEKLToxMDFDRDAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAwODIyMDAwMDAxNEYKLToxMDFDRTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxNzYKLToxMDFDRjAwMDAwMDAwMDEwQjE5NzMyMEQwMDAwMDAwMDIzMUIwMDAwMEYKLToxMDFEMDAwMDAwMDAwMDAwMjcxMTA4MDAwMDAwMDAwMDY2OTAwMDAwOUQKLToxMDFEMTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwMDAyMTgwMDAwRjQKLToxMDFEMjAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAzQTYKLToxMDFEMzAwMDAwMDAwMDAwMjJDNTM2MDAwMDAwMDAxMDAwMUYwMDAwNTcKLToxMDFENDAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAwODBGODAwMDA2QTcKLToxMDFENTAwMDAwMDAwMDE4ODAwMEZGRjIwMDAwMDAwMDIzMUIwMDAwQkMKLToxMDFENjAwMDAwMDAwMDAwMjcxMTA4MDAwMDAwMDAwMDY2OTAwMDAwM0QKLToxMDFENzAwMDAwMDAwMDEwQjFDODAwMEIwMDAwMDAwQzI5ODAwMDAwMUEKLToxMDFEODAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAwNDkKLToxMDFEOTAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAxMDA2QzIwMDAyREYKLToxMDFEQTAwMDAwMDAwMDBDMjk1MjAwMDIwMDAwMDAwMDIyQzU4QzAwMzcKLToxMDFEQjAwMDAwMDAwMDAwMjc2NTAwMDAwMDAwMDAwMDI2RTQwMDAwOEQKLToxMDFEQzAwMDAwMDAwMDAwMjM0ODAwMDAwMDAwMDAwODIyMDAwMDE3NjcKLToxMDFERDAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDAwMUYwMDAwMUYKLToxMDFERTAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAxMDIwNTMwMDAwMjEKLTowODFERjAwMDAwMDAwMDE4ODAwMEZFMDM1MgotOjAwMDAwMDAxRkYKLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKLSAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCi0gKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCi0gKiBhY2NvbXBhbnlpbmcgaXQuCi0gKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA5LTUuMC4wLmozLmZ3LmloZXggYi9maXJtd2FyZS9ibngyL2JueDItcnYycC0wOS01LjAuMC5qMy5mdy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZjVlOTUKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9ibngyL2JueDItcnYycC0wOS01LjAuMC5qMy5mdy5paGV4CkBAIC0wLDAgKzEsNDYyIEBACis6MTAwMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMDAwNTgwMDAwMDAwOTgxCis6MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTAwMDMwMDAwMDAwMEREODAwMDAwRTU4MDAwMDAwMDUwMDAwMDAwMDcwCis6MTAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MDgwMDUwMDAwMDAwMDAwMDAwMDAwMDAwQTgKKzowODAwNTgwMDAwMDAwMDEwQjE4MDAwMDY1OQorOjEwMDA2MDAwMDAwMDAwMUYwNTAzMDMwMDAwMDAwMDA4MDUwMEZGRkY1QgorOjEwMDA3MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4MDUwMDAwRkY1QQorOjEwMDA4MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4QUMwMDAwMDFBMQorOjEwMDA5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDBDMkY4MDAwMDE5RgorOjEwMDBBMDAwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMkI4MDAwMDA3QQorOjEwMDBCMDAwMDAwMDAwMTA5MUUwMDAwMjAwMDAwMDA4QUMwMDAwMDEwOAorOjEwMDBDMDAwMDAwMDAwMTAyMDNGMDA2QjAwMDAwMDEwMjEzRjAwMDNFMworOjEwMDBEMDAwMDAwMDAwMTAyMEJGMDAzQTAwMDAwMDE4ODAwMEZGRkQ2MworOjEwMDBFMDAwMDAwMDAwMTBCMUI4QjAxNTAwMDAwMDBCMkZERjAwMDJCNworOjEwMDBGMDAwMDAwMDAwMDAwM0Q4MDAwMDAwMDAwMDAwMkMzODAwMDBDMQorOjEwMDEwMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDAwNgorOjEwMDExMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVCMgorOjEwMDEyMDAwMDAwMDAwMTg4MDAwMDA3QzAwMDAwMDA4MkQ4MDAxMUNFOQorOjEwMDEzMDAwMDAwMDAwMDgwMjAwMDAwMTAwMDAwMDEwOTFERTAwMDAzNQorOjEwMDE0MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMTYxRAorOjEwMDE1MDAwMDAwMDAwMTg4MDAwMDA4MzAwMDAwMDBDMjk4MDAwMDJDRAorOjEwMDE2MDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkFERjAwMDBEOQorOjEwMDE3MDAwMDAwMDAwMDgyQTAwMDAwRjAwMDAwMDAwMDUwMDAwMDAzOQorOjEwMDE4MDAwMDAwMDAwMTg4MDAwRkZFNjAwMDAwMDA4MDIwMDAwMDFFNworOjEwMDE5MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMThDQgorOjEwMDFBMDAwMDAwMDAwMDgyQzgwMDAwNjAwMDAwMDA4MkQwMDAwMDY1QQorOjEwMDFCMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDYwRQorOjEwMDFDMDAwMDAwMDAwMTg4MDAwMDA3MjAwMDAwMDE4ODAwMEZGRjE5RAorOjEwMDFEMDAwMDAwMDAwMDhCMTAwMDAwMTAwMDAwMDA4MkM4MDAxMENBNAorOjEwMDFFMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDA4MkQ4MDAwMDExQworOjEwMDFGMDAwMDAwMDAwMTg4MDAwMDA2QzAwMDAwMDBCMkZERjAwMDJFMAorOjEwMDIwMDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkMwNzAwMDAwRQorOjEwMDIxMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTVBOAorOjEwMDIyMDAwMDAwMDAwMTg4MDAwRkZEMjAwMDAwMDBCMkZERjAwMDI0QQorOjEwMDIzMDAwMDAwMDAwMEMxRjgwMDAwMDAwMDAwMDAwMkMwNzAwMDBFMAorOjEwMDI0MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTU3OAorOjEwMDI1MDAwMDAwMDAwMTg4MDAwRkZDQzAwMDAwMDBDMUY4MDAwMDI4RQorOjEwMDI2MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzk3NworOjEwMDI3MDAwMDAwMDAwMEMyOTgwMDAwMjAwMDAwMDBDMUY4MDAwMDIxQQorOjEwMDI4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMDUyRQorOjEwMDI5MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzM0RAorOjEwMDJBMDAwMDAwMDAwMDgwMjI0MDA0QTAwMDAwMDE4MDAwNDAwMDBCQQorOjEwMDJCMDAwMDAwMDAwMTg4MDAwMDAxQzAwMDAwMDE4ODAwMDAwMUVENAorOjEwMDJDMDAwMDAwMDAwMTg4MDAwMDA2NTAwMDAwMDE4ODAwMDAwQkJERQorOjEwMDJEMDAwMDAwMDAwMTg4MDAwMDBCQTAwMDAwMDE4ODAwMDAwMDAzNAorOjEwMDJFMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBERQorOjEwMDJGMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBDRQorOjEwMDMwMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBCRAorOjEwMDMxMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAxMDZBNgorOjEwMDMyMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDA5RAorOjEwMDMzMDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDE4ODAwMDAwMUI1RAorOjEwMDM0MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwRDFBQworOjEwMDM1MDAwMDAwMDAwMTg4MDAwMDAyRjAwMDAwMDE4ODAwMDAxMDYzNworOjEwMDM2MDAwMDAwMDAwMTg4MDAwMDEzMTAwMDAwMDE4ODAwMDAwRkMyRgorOjEwMDM3MDAwMDAwMDAwMTg4MDAwMDE1NTAwMDAwMDE4ODAwMDAwNEVBOQorOjEwMDM4MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwOEVBRgorOjEwMDM5MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMDUwMDAwMDBBQworOjEwMDNBMDAwMDAwMDAwMTg4MDAwRkZBMjAwMDAwMDEwOTFENDAwMDA5RgorOjEwMDNCMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFEQgorOjEwMDNDMDAwMDAwMDAwMDgyQTAwMDAwMjAwMDAwMDAwMDUwMDAwMDBGNAorOjEwMDNEMDAwMDAwMDAwMTg4MDAwRkY5QzAwMDAwMDEwOTFENDAwMDA3NQorOjEwMDNFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFBQgorOjEwMDNGMDAwMDAwMDAwMDAyOTQyMDAwMDAwMDAwMDA4MkEwMDAwMDI1RQorOjEwMDQwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGOTVCQgorOjEwMDQxMDAwMDAwMDAwMTg4MDAwRkY5NDAwMDAwMDEwQjFCQ0IwMEE3QQorOjEwMDQyMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDBENgorOjEwMDQzMDAwMDAwMDAwMDAyQzNDMDAwMDAwMDAwMDEwOTFENDAwMDBERgorOjEwMDQ0MDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMDAwMTc0NQorOjEwMDQ1MDAwMDAwMDAwMTg4MDAwMDBDQTAwMDAwMDEwMkM2MjAxQkFFMQorOjEwMDQ2MDAwMDAwMDAwMTg4MDAwMDAwNjAwMDAwMDA4MkM4MDAxMEQyQworOjEwMDQ3MDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDBDOQorOjEwMDQ4MDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMDAwMjRGMworOjEwMDQ5MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBDMUY4MDAwMDBGQworOjEwMDRBMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDBDNAorOjEwMDRCMDAwMDAwMDAwMDgyQTAwMDAwNjAwMDAwMDA4MDUwMDU1NTU0RAorOjEwMDRDMDAwMDAwMDAwMTg4MDAwRkY3RTAwMDAwMDEwOTFENDAwMDBBMgorOjEwMDREMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFCQQorOjEwMDRFMDAwMDAwMDAwMDgyQTAwMDAwQjAwMDAwMDAwMDUwMDAwMDBDQQorOjEwMDRGMDAwMDAwMDAwMTg4MDAwRkY3ODAwMDAwMDE4MDAwMjAwMDBEMworOjEwMDUwMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwQjE4QTAwMDgxMAorOjEwMDUxMDAwMDAwMDAwMTBCMThDMTQwNzAwMDAwMDBCMDUwQUZGRkY1QgorOjEwMDUyMDAwMDAwMDAwMTBCMThBMDAwMzAwMDAwMDAwODYwQTE4MDBENQorOjEwMDUzMDAwMDAwMDAwMTA5MThDMDAwMDAwMDAwMDA4MkEwMDAwMDE1QgorOjEwMDU0MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDE4MDAwRDAwMDAxMQorOjEwMDU1MDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDEwOTFERTAwMDAxNQorOjEwMDU2MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMDY4MjAwMDBFMQorOjEwMDU3MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwQkVFMTAwMDU0OAorOjEwMDU4MDAwMDAwMDAwMTg4MDAwRkY1RjAwMDAwMDAxMDU2MTE0MDBGQQorOjEwMDU5MDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjBFMTAwMDE5NAorOjEwMDVBMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDAwMDY4MjAwMDA5RQorOjEwMDVCMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwQkVFMjAwMDUwNworOjEwMDVDMDAwMDAwMDAwMTg4MDAwRkY1NzAwMDAwMDAxMDU2MjE0MDBDMQorOjEwMDVEMDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjE2MjAwMDFEMgorOjEwMDVFMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwQjFBMEIwMTNDMgorOjEwMDVGMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMyMDAwMDA5NAorOjEwMDYwMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDAwMQorOjEwMDYxMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVBRAorOjEwMDYyMDAwMDAwMDAwMTg4MDAwRkZEQzAwMDAwMDA4MkQ4MDAxMUM4NQorOjEwMDYzMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDE4ODAwMEZGRTYwRQorOjEwMDY0MDAwMDAwMDAwMEY0NzYwMDAwODAwMDAwMDBGMDYwRTAwMDFDOAorOjEwMDY1MDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDAwMEE2NDAwMDBDNQorOjEwMDY2MDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkYyMworOjEwMDY3MDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDE4ODAwMDAwMTM2MQorOjEwMDY4MDAwMDAwMDAwMEY0NzYwMDAwODAwMDAwMDBCMkZERjAwMDI5MQorOjEwMDY5MDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDA3MQorOjEwMDZBMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMUMwMworOjEwMDZCMDAwMDAwMDAwMEYwNjBFMDAwMTAwMDAwMDEwMDAxRjAwMDBFNworOjEwMDZDMDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDE4ODAwMEZGRDQ1OAorOjEwMDZEMDAwMDAwMDAwMDAwQTY0MDAwMDAwMDAwMDAwMEFFNTAwMDBCRAorOjEwMDZFMDAwMDAwMDAwMDkwQjY2RkZGRjAwMDAwMDAwMEQ2MTAwMDAyNAorOjEwMDZGMDAwMDAwMDAwMDAwMjYyMDAwMDAwMDAwMDBCMkZERjAwMDI3QgorOjEwMDcwMDAwMDAwMDAwMDAzMTA0MDAwMDAwMDAwMDAwMzA5QTAwMDBFQQorOjEwMDcxMDAwMDAwMDAwMDkwNTYwMDAwRjAwMDAwMDEwQjE4QTAwMEEwNworOjEwMDcyMDAwMDAwMDAwMDAwNTYzNEMwMDAwMDAwMDA4MDUwQTAwMTJFQworOjEwMDczMDAwMDAwMDAwMTBCOTYyMTQwMzAwMDAwMDAwMDMwMDAwMDA3NAorOjEwMDc0MDAwMDAwMDAwMTg4MDAwMDAwNTAwMDAwMDE4ODAwMEZGMjQ1MQorOjEwMDc1MDAwMDAwMDAwMTBCNjA2MTQwMzAwMDAwMDA4MDMwNjAwMDFBNAorOjEwMDc2MDAwMDAwMDAwMTg4MDAwRkYyQTAwMDAwMDAwMEM5NjE4MDAwRQorOjEwMDc3MDAwMDAwMDAwMDkwQzk5RkZGRjAwMDAwMDA0Q0M5OTM0MDAzMAorOjEwMDc4MDAwMDAwMDAwMTBCMTk2MzIwMjAwMDAwMDA4MEY4MDAwMDA0NworOjEwMDc5MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMjk1MjAwMDExQgorOjEwMDdBMDAwMDAwMDAwMEMyOTUyMDAwMDAwMDAwMDA4MDIwMDAwMEVBQQorOjEwMDdCMDAwMDAwMDAwMDgwMjgwMDAxQTAwMDAwMDEwQjFDNDBBMDIwNAorOjEwMDdDMDAwMDAwMDAwMDgwMjAwMDAwMzAwMDAwMDA4MjIwMDAwMDFGMQorOjEwMDdEMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMkFERjAwMDA2NAorOjEwMDdFMDAwMDAwMDAwMDAyQTAwMDgwMDAwMDAwMDA4MDUwMDU1NTUyMAorOjEwMDdGMDAwMDAwMDAwMTg4MDAwRkYxODAwMDAwMDBCMkZERjAwMDIyRgorOjEwMDgwMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkEwMDAwMDE0MAorOjEwMDgxMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDEwOTFENDAwMDAxNworOjEwMDgyMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDBERgorOjEwMDgzMDAwMDAwMDAwMDgyRDgwMDExQzAwMDAwMDE4ODAwMEZGQTNBQworOjEwMDg0MDAwMDAwMDAwMDgyQzgwMDAwNjAwMDAwMDA4MkQwMDAwMDZCMworOjEwMDg1MDAwMDAwMDAwMDAzMDgwMDAwMDAwMDAwMDAwMzEwMDAwMDBCNworOjEwMDg2MDAwMDAwMDAwMDgyRDgwMDAwNjAwMDAwMDBDMjk4MDAwMDExNworOjEwMDg3MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDEwOTFERTAwMDA0RAorOjEwMDg4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMTAxRAorOjEwMDg5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGMDNCOQorOjEwMDhBMDAwMDAwMDAwMTA5MUEwQjAwOTAwMDAwMDA4MkM4MDAxMEQ4QworOjEwMDhCMDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDA4NQorOjEwMDhDMDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMEZGOUMzOAorOjEwMDhEMDAwMDAwMDAwMTg4MDAwMDAxMDAwMDAwMDA4QUMwMDAwMDFCQgorOjEwMDhFMDAwMDAwMDAwMTg4MDAwMDAwQjAwMDAwMDAwMDM4MEIwMDAzMgorOjEwMDhGMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMwMDQwMDA3MQorOjEwMDkwMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVCQQorOjEwMDkxMDAwMDAwMDAwMTg4MDAwRkY3RTAwMDAwMDE4ODAwMDAwMzFGOQorOjEwMDkyMDAwMDAwMDAwMTg4MDAwMDAwNjAwMDAwMDBCMkZERjAwMDIwRQorOjEwMDkzMDAwMDAwMDAwMDAyQzAwMEUwMDAwMDAwMDA4MkEwMDAwMDc0NAorOjEwMDk0MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZFRUQ2RAorOjEwMDk1MDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDBDMjk4MDAwMDE1OQorOjEwMDk2MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDEwMENFNzAwMDdEMQorOjEwMDk3MDAwMDAwMDAwMDkwNTYyRkZGRjAwMDAwMDEwQkE2QzE0MDVCQQorOjEwMDk4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDAwMjEwMDAwMDAzRAorOjEwMDk5MDAwMDAwMDAwMDgyQTAwMDAwNTAwMDAwMDEwOTFENDAwMDBBQgorOjEwMDlBMDAwMDAwMDAwMDgyQzgwMDEwQzAwMDAwMDA4MkQwMDAwMDg0OQorOjEwMDlCMDAwMDAwMDAwMEMzMTYyMDAxODAwMDAwMDA4MkQ4MDAwMDFDQQorOjEwMDlDMDAwMDAwMDAwMTg4MDAwRkY3MjAwMDAwMDE4MDAwRDAwMDBGOQorOjEwMDlEMDAwMDAwMDAwMTBCMUEwQjAwRTAwMDAwMDBCMkZERjAwMDJERAorOjEwMDlFMDAwMDAwMDAwMDAwM0Q4MDAwMDAwMDAwMDAwMkMyMDAwMDBFMAorOjEwMDlGMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDE4ODAwMDAwMTVENQorOjEwMEEwMDAwMDAwMDAwMTAyQzYyMDAwMjAwMDAwMDE4ODAwMDAwMENBMgorOjEwMEExMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMwNzAwMDA4OAorOjEwMEEyMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDEwOTFERTAwMDA5QgorOjEwMEEzMDAwMDAwMDAwMDgwNTAwRkZGRjAwMDAwMDE4ODAwMEZFQ0Y0NgorOjEwMEE0MDAwMDAwMDAwMDgyQzgwMDEwRDAwMDAwMDA4MkQwMDAwMDlBNgorOjEwMEE1MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDc2NAorOjEwMEE2MDAwMDAwMDAwMTg4MDAwRkY2OTAwMDAwMDBDMjk4MDAwMDFEMAorOjEwMEE3MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDEwOTFERTAwMDA0QgorOjEwMEE4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMEEyMQorOjEwMEE5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZFQzNGOAorOjEwMEFBMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDA4MkM4MDAxMENGRAorOjEwMEFCMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDA4MkQ4MDAxMzQwRgorOjEwMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMjA1RjAwMDA5NworOjEwMEFEMDAwMDAwMDAwMDgyQzgwMDE0MDAwMDAwMDA4MkQwMDAwM0NCMAorOjEwMEFFMDAwMDAwMDAwMDgyRDgwMDEyNDAwMDAwMDAwMDAwMDAwMDAyQworOjEwMEFGMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MkM4MDAwODA0MworOjEwMEIwMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAxMDVGNQorOjEwMEIxMDAwMDAwMDAwMTBCRUUyMDAwNTAwMDAwMDE4ODAwMEZFQUNERQorOjEwMEIyMDAwMDAwMDAwMDEwNTYyMTQwMDAwMDAwMDEwOTE4QTAwMDIxQworOjEwMEIzMDAwMDAwMDAwMDhCMTYyMDAwMTAwMDAwMDEwOTFERTAwMDAxQQorOjEwMEI0MDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwOTFENDAwMDAwQgorOjEwMEI1MDAwMDAwMDAwMDgwNjAwQUFBQTAwMDAwMDE4ODAwMEZGMzU2NworOjEwMEI2MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDEyMworOjEwMEI3MDAwMDAwMDAwMDgyQTAwMDAwOTAwMDAwMDA4MDUwMEFBQUFEOQorOjEwMEI4MDAwMDAwMDAwMTg4MDAwRkVBNjAwMDAwMDEwOTFENDAwMDBCNAorOjEwMEI5MDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZGMkREOQorOjEwMEJBMDAwMDAwMDAwMTA5MUEwM0MwMjAwMDAwMDEwQjFFNjYyMDdCNgorOjEwMEJCMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMzMTAwMDBCRAorOjEwMEJDMDAwMDAwMDAwMDkyQ0IxMDA3RjAwMDAwMDA4MkNEOTAwMDBCMworOjEwMEJEMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAxMEQxRAorOjEwMEJFMDAwMDAwMDAwMTBCMUE4MDAwNjAwMDAwMDEwMjA1RjAwMDAwNworOjEwMEJGMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDAwMkNBNzAwMDBENgorOjEwMEMwMDAwMDAwMDAwMDgyRDAwMDAxMDAwMDAwMDA4MkQ4MDAxMDhFMQorOjEwMEMxMDAwMDAwMDAwMTg4MDAwRkYyODAwMDAwMDEwQjFBNjAwMTA5RQorOjEwMEMyMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBGMEYzMDAwMDc0MAorOjEwMEMzMDAwMDAwMDAwMDAwQTYwMDAwMDAwMDAwMDAwMEFFMTAwMDA1RgorOjEwMEM0MDAwMDAwMDAwMEY0QjYyMDAwODAwMDAwMDA5MEIxNjAwRkZCNworOjEwMEM1MDAwMDAwMDAwMDAwRDYyMDAwMDAwMDAwMDA5MEQxQTAwRkZGNgorOjEwMEM2MDAwMDAwMDAwMTAwNzMwMDAwMzAwMDAwMDBDMEQxQTAwMDhGRgorOjEwMEM3MDAwMDAwMDAwMEMwQjE2MDAwODAwMDAwMDBGNENFMzAwMThFOQorOjEwMEM4MDAwMDAwMDAwMDAwQzk5MkMwMDAwMDAwMDA0Q0M5OTM0MDBGNgorOjEwMEM5MDAwMDAwMDAwMDgwRjgwMDAwMDAwMDAwMDBDMjk4MDAwMDEwNworOjEwMENBMDAwMDAwMDAwMDAzMzMxMDAwMDAwMDAwMDA4MjIwMDAwMTZBMAorOjEwMENCMDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMENFRAorOjEwMENDMDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDAwMEYyMDAwMDA0NgorOjEwMENEMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MDUwMDU1NTVCMQorOjEwMENFMDAwMDAwMDAwMTg4MDAwRkU3QTAwMDAwMDEwOTFENDAwMDA3RgorOjEwMENGMDAwMDAwMDAwMDgwNjAwQUFBQTAwMDAwMDE4ODAwMEZGMDFGQQorOjEwMEQwMDAwMDAwMDAwMEY0NzIyMDAwODAwMDAwMDA5MDcwRTAwMEYzNgorOjEwMEQxMDAwMDAwMDAwMDgwNzBFMDAwODAwMDAwMDA4MDI4MDAwMDEyMworOjEwMEQyMDAwMDAwMDAwMDcwMjg1MUMwMDAwMDAwMDA4ODI4NTAwMDEwOQorOjEwMEQzMDAwMDAwMDAwMDAwMjg1NEMwMDAwMDAwMDA3NDI4NTFDMDBGNgorOjEwMEQ0MDAwMDAwMDAwMDNDM0FBNTIwMDAwMDAwMDAwMDNCMTBFMDAxRgorOjEwMEQ1MDAwMDAwMDAwMDc0QjA3MUMwMDAwMDAwMDBGMEYzMDAwMDdDOQorOjEwMEQ2MDAwMDAwMDAwMEYwQTk2MDAwMzAwMDAwMDAwMEE5NTVDMDBENgorOjEwMEQ3MDAwMDAwMDAwMDA0QTAwNUEwMDAwMDAwMDAwMEM5NjBBMDAyMworOjEwMEQ4MDAwMDAwMDAwMDkwQzk5RkZGRjAwMDAwMDA4MEQwMEZGRkZBNAorOjEwMEQ5MDAwMDAwMDAwMTBCMTk2MzIwMjAwMDAwMDA4MEY4MDAwMDUyQworOjEwMERBMDAwMDAwMDAwMTBCMUE4MDAwODAwMDAwMDEwMjA1RjAwMDA0MworOjEwMERCMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMyMDAwMDBDQworOjEwMERDMDAwMDAwMDAwMDAyQ0E3MDAwMDAwMDAwMDA4MkQwMDAwMTAwQgorOjEwMEREMDAwMDAwMDAwMDgyRDgwMDEwODAwMDAwMDE4ODAwMEZFRUZEMAorOjEwMERFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDEwMDAxRjAwMDAxRQorOjEwMERGMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMkFERjAwMDAzRQorOjEwMEUwMDAwMDAwMDAwMDgyQTAwMDAwRDAwMDAwMDA4MDUwMEFBQUE0MgorOjEwMEUxMDAwMDAwMDAwMTg4MDAwRkU1NDAwMDAwMDEwOTFENDAwMDA3MworOjEwMEUyMDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZFREI5OQorOjEwMEUzMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDE1MAorOjEwMEU0MDAwMDAwMDAwMDgyQTAwMDAwNzAwMDAwMDA4MDUwMDU1NTVCMgorOjA4MEU1MDAwMDAwMDAwMTg4MDAwRkU0Q0I4Cis6MDgwRTU4MDAwMDAwMDAxMEIxODAwMDA0NEQKKzoxMDBFNjAwMDAwMDAwMDFGMDUwMzAzMDAwMDAwMDAwODA1MDAwMEZGNEMKKzoxMDBFNzAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwMDJBMDAwMDAwMkUKKzoxMDBFODAwMDAwMDAwMDEwQjFENDAwMDAwMDAwMDAxMDkxREUwMDAwNEUKKzoxMDBFOTAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAxMDAwMUYwMDAwQTAKKzoxMDBFQTAwMDAwMDAwMDAwMkY4MEFBMDAwMDAwMDAwQzI5ODAwMDAxMzMKKzoxMDBFQjAwMDAwMDAwMDA4MDI1NDAwMEUwMDAwMDAwMDJDNDAwMDAwNUEKKzoxMDBFQzAwMDAwMDAwMDA5Mjk1MjAwM0YwMDAwMDAxODAwMDQwMDAwNDMKKzoxMDBFRDAwMDAwMDAwMDE4ODAwMDAwMTAwMDAwMDAxODgwMDAwMDExQzEKKzoxMDBFRTAwMDAwMDAwMDE4ODAwMDAwMzkwMDAwMDAxODgwMDAwMEZEOUMKKzoxMDBFRjAwMDAwMDAwMDE4ODAwMDAwRkMwMDAwMDAxODgwMDAwMEZCQ0IKKzoxMDBGMDAwMDAwMDAwMDE4ODAwMDAwRkIwMDAwMDAxODgwMDAwMDAwQjYKKzoxMDBGMTAwMDAwMDAwMDE4ODAwMDAxMTMwMDAwMDAxODgwMDAwMEY3OTYKKzoxMDBGMjAwMDAwMDAwMDE4ODAwMDAwMEIwMDAwMDAxODgwMDAwMTE3NkUKKzoxMDBGMzAwMDAwMDAwMDE4ODAwMDAxNjUwMDAwMDAxODgwMDAwMDYzQjgKKzoxMDBGNDAwMDAwMDAwMDE4ODAwMDAwQ0UwMDAwMDAxODgwMDAwMERFQzUKKzoxMDBGNTAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxODgwMDBGRkU1RUIKKzoxMDBGNjAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwQzI5ODAwMDAwQTIKKzoxMDBGNzAwMDAwMDAwMDE4ODAwMEZGRTIwMDAwMDAwMDJBMDAwMDAwQ0UKKzoxMDBGODAwMDAwMDAwMDE4ODAwMEZGRTAwMDAwMDAxODAwMDIwMDAwRDAKKzoxMDBGOTAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAxMDkxOTYzNDIxQkUKKzoxMDBGQTAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDMUUwMDAwNjgKKzoxMDBGQjAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDA2M0MKKzoxMDBGQzAwMDAwMDAwMDA4MkQ4MDAxMDIwMDAwMDAwMDAwMDAwMDAwNjkKKzoxMDBGRDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBENjEwMDAwMjQKKzoxMDBGRTAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDA1MDIwMDAwRDgKKzoxMDBGRjAwMDAwMDAwMDEwOTE5NjM0MTYwMDAwMDAxMDIwNUYwMDAwRTEKKzoxMDEwMDAwMDAwMDAwMDAwMDlEODAwMDAwMDAwMDAwMDJDMUUwMDAwQjUKKzoxMDEwMTAwMDAwMDAwMDA4MkM4MDAxMEUwMDAwMDAwODJEMDAwMDBBQ0UKKzoxMDEwMjAwMDAwMDAwMDA4MkQ4MDAxMDIwMDAwMDAwMDAwMDAwMDAwMDgKKzoxMDEwMzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBENjIwMDAwQzIKKzoxMDEwNDAwMDAwMDAwMDAwMkMxMzAwMDAwMDAwMDAxODAwMEEwMDAwM0YKKzoxMDEwNTAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAxMDkxOTYzNDA5MTUKKzoxMDEwNjAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDMUUwMDAwQTcKKzoxMDEwNzAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDZBMTcKKzoxMDEwODAwMDAwMDAwMDA4MkQ4MDAxMDIwMDAwMDAwMDAwMDAwMDAwQTgKKzoxMDEwOTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBEN0EwMDAwNEEKKzoxMDEwQTAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDJBMDAwMDAwRjQKKzoxMDEwQjAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDAzNjIwMDAwNUQKKzoxMDEwQzAwMDAwMDAwMDEwMjM0MjAwQzEwMDAwMDAwMDAyNjM4QzAwRjkKKzoxMDEwRDAwMDAwMDAwMDAwMjY0NjAwMDAwMDAwMDAwODAyMDQwMDEyODQKKzoxMDEwRTAwMDAwMDAwMDEwQjkwNjA4MjcwMDAwMDAwMDBGNTgwMDAwOUIKKzoxMDEwRjAwMDAwMDAwMDAwMEE2NDAwMDAwMDAwMDAwMDBBRTUwMDAwOTMKKzoxMDExMDAwMDAwMDAwMDA5MEI2NkZGRkYwMDAwMDAwMDBDMDAwMDAwNUIKKzoxMDExMTAwMDAwMDAwMDAwMEI4MDAwMDAwMDAwMDAwODBDQzYwMDEyNTgKKzoxMDExMjAwMDAwMDAwMDE4ODAwMEZGQ0UwMDAwMDAwODBGODAwMDAzQzAKKzoxMDExMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwOUYwMDAwMDAKKzoxMDExNDAwMDAwMDAwMDA4MjcxMTAwMTIwMDAwMDAwMDY2OTAwMDAwNTcKKzoxMDExNTAwMDAwMDAwMDA4QTMxQjAwMTIwMDAwMDAxMEIxOTgwMDAzNUIKKzoxMDExNjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwODBGODAwMDA0QjUKKzoxMDExNzAwMDAwMDAwMDA4MjIwMDAwMDMwMDAwMDAwODJDODAwMDBDODIKKzoxMDExODAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAxMDAwOUYwMDAwNkYKKzoxMDExOTAwMDAwMDAwMDAwMjU5NjAwMDAwMDAwMDAwQzI5ODAwMDAwREYKKzoxMDExQTAwMDAwMDAwMDAwMDY2NjAwMDAwMDAwMDAwMDg2NjExODAwRDQKKzoxMDExQjAwMDAwMDAwMDA5MDI2MDAwMEYwMDAwMDAwRjAyMDQwMDAyOUUKKzoxMDExQzAwMDAwMDAwMDEwQjYwQzA4MDUwMDAwMDAwQzFGQkYwMDAwNTYKKzoxMDExRDAwMDAwMDAwMDEwMjg2NjAwMDMwMDAwMDAwODA3OEYwMDAxQ0YKKzoxMDExRTAwMDAwMDAwMDBDMzM2NjAwMTAwMDAwMDAwMDMyMTQwMDAwMDQKKzoxMDExRjAwMDAwMDAwMDAwMzI5NTAwMDAwMDAwMDAwNTczNjYyQzAwMUUKKzoxMDEyMDAwMDAwMDAwMDAwMzFFMzJFMDAwMDAwMDAwODJEODAwMDEwRDcKKzoxMDEyMTAwMDAwMDAwMDE4ODAwMEZGOEUwMDAwMDAwMDIzMDAwMDAwODYKKzoxMDEyMjAwMDAwMDAwMDA5MjVFNkZGRkYwMDAwMDAwODIyMDAwMDBCNzcKKzoxMDEyMzAwMDAwMDAwMDBDNjk1MjAwMDAwMDAwMDAwQzI5ODAwMDAwMzIKKzoxMDEyNDAwMDAwMDAwMDEwMjg2NjAwNzUwMDAwMDAxODgwMDBGRjg3NkQKKzoxMDEyNTAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwODJDODAwMDQwNzAKKzoxMDEyNjAwMDAwMDAwMDA4MkQwMDAwMjAwMDAwMDAwODJEODAwMTFDNTcKKzoxMDEyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwRUYKKzoxMDEyODAwMDAwMDAwMDBGNDJFQTAwMTAwMDAwMDAxMDAwNEYwMDA0QjAKKzoxMDEyOTAwMDAwMDAwMDEwQjc0NjkyMDAwMDAwMDAwODAyNDkwMDEyNEEKKzoxMDEyQTAwMDAwMDAwMDEwQjU4NDBBMDAwMDAwMDAwMDBENjEwMDAwN0QKKzoxMDEyQjAwMDAwMDAwMDEwQkE2NjM0NTcwMDAwMDAwODgzMDUwMDEyRDEKKzoxMDEyQzAwMDAwMDAwMDEwMDA0RjAwMDIwMDAwMDAwMDAzNDkwMDAwNzEKKzoxMDEyRDAwMDAwMDAwMDAxODMwNjhDMDAwMDAwMDAwMDgzQzYwQzAwQTMKKzoxMDEyRTAwMDAwMDAwMDEwQjE4NzAwMTEwMDAwMDAwMDBCNkUwMDAwMkMKKzoxMDEyRjAwMDAwMDAwMDEwQkVFOTAwMDUwMDAwMDAxODgwMDBGRjZFMkQKKzoxMDEzMDAwMDAwMDAwMDAxMDU2OTE0MDAwMDAwMDAxMDkxOEEwMDAyMkQKKzoxMDEzMTAwMDAwMDAwMDA4QjRFOTAwMDEwMDAwMDAxMEIxRTkyQzRBMDcKKzoxMDEzMjAwMDAwMDAwMDAwODY2OTJDMDAwMDAwMDAwMDAyMDAwMDAwQTAKKzoxMDEzMzAwMDAwMDAwMDA5MDJFQUZGRkYwMDAwMDAxMDAwMEMwMDAyOUMKKzoxMDEzNDAwMDAwMDAwMDAwMDIwNDBBMDAwMDAwMDAwRjQ2MEMwMDAxMkIKKzoxMDEzNTAwMDAwMDAwMDBGMDI4NTAwMDEwMDAwMDAxMDkxOEMwMUZDQ0MKKzoxMDEzNjAwMDAwMDAwMDEwQjcwNDBFNDEwMDAwMDAwMDBGNDAwMDAwMTQKKzoxMDEzNzAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDBBNjQwMDAwOTEKKzoxMDEzODAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGRjYKKzoxMDEzOTAwMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDBCODAwMDAwQjYKKzoxMDEzQTAwMDAwMDAwMDA4MEM4NjAwMTIwMDAwMDAwODBGODAwMDAzRjcKKzoxMDEzQjAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAxMDAwOUYwMDAwRjcKKzoxMDEzQzAwMDAwMDAwMDA4MjcxMTAwMTIwMDAwMDAwMDY2OTAwMDAwRDUKKzoxMDEzRDAwMDAwMDAwMDAwMjY0NjAwMDAwMDAwMDAwMDIzMDYwMDAwNzgKKzoxMDEzRTAwMDAwMDAwMDEwQjE5ODAwMDUwMDAwMDAxMDAwMUYwMDAwNzAKKzoxMDEzRjAwMDAwMDAwMDA4MEY4MDAwMDQwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDE0MDAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDMyMTQwMDAwNjcKKzoxMDE0MTAwMDAwMDAwMDAwMzI5NTAwMDAwMDAwMDAwMDMxRTMyRTAwQzMKKzoxMDE0MjAwMDAwMDAwMDA1NzM2NjJDMDAwMDAwMDAwMDI1OTYwMDAwRjcKKzoxMDE0MzAwMDAwMDAwMDEwQjE4NzAwMTYwMDAwMDAwQzI5ODAwMDAwOTkKKzoxMDE0NDAwMDAwMDAwMDBGMEY2QjAwMDcwMDAwMDAwMDBENjkwMDAwOTYKKzoxMDE0NTAwMDAwMDAwMDAwMEE2QzAwMDAwMDAwMDAwMDBBRUQwMDAwMUYKKzoxMDE0NjAwMDAwMDAwMDAwMEI2RTAwMDAwMDAwMDAwMDBCODAwMDAwNzgKKzoxMDE0NzAwMDAwMDAwMDAwMEM4NzAwMDAwMDAwMDAwODBGODAwMDAzM0YKKzoxMDE0ODAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzY5NTIwMDAxMTEKKzoxMDE0OTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDIyQzU4QzAwQUEKKzoxMDE0QTAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTEwMDAwQzYKKzoxMDE0QjAwMDAwMDAwMDAwMjY5MDAwMDAwMDAwMDAxMEI4MTcwRTAzODYKKzoxMDE0QzAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxODgwMDBGRkY2REEKKzoxMDE0RDAwMDAwMDAwMDEwQjE5ODAwMDIwMDAwMDAwODBGODAwMDA0MTYKKzoxMDE0RTAwMDAwMDAwMDA4MjIwMDAwMUEwMDAwMDAwODJDODAwMDBDRjgKKzoxMDE0RjAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAwODJEODAwMDEwRTYKKzoxMDE1MDAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDBENkUwMDAwMzEKKzoxMDE1MTAwMDAwMDAwMDAzRTdDRjM0MDAwMDAwMDAwQzI5ODAwMDAwMjkKKzoxMDE1MjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxMEIxODcwMDA3RUQKKzoxMDE1MzAwMDAwMDAwMDAwMzYxNDAwMDAwMDAwMDAwMDM2OTUwMDAwOTYKKzoxMDE1NDAwMDAwMDAwMDAwMzcxNjAwMDAwMDAwMDAwODJDODAwMDUwNEEKKzoxMDE1NTAwMDAwMDAwMDA4MkQwMDAwMzAwMDAwMDAwODJEODAwMDBDNjUKKzoxMDE1NjAwMDAwMDAwMDE4ODAwMEZGMjQwMDAwMDAwMDI2NDYwMDAwNTQKKzoxMDE1NzAwMDAwMDAwMDAwMjMwMDAwMDAwMDAwMDAwOTI1RTZGRkZGMzYKKzoxMDE1ODAwMDAwMDAwMDAwMEI2RTAwMDAwMDAwMDAwM0U3Q0YyQzAwRkQKKzoxMDE1OTAwMDAwMDAwMDA4MjIwMDAwMUIwMDAwMDAwQzY5NTIwMDAwM0YKKzoxMDE1QTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxODgwMDBGRjFCRDQKKzoxMDE1QjAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMDA4NjYwMDA1N0UKKzoxMDE1QzAwMDAwMDAwMDAwMDY2NjAwMDAwMDAwMDAwMDg2NjExODAwQjAKKzoxMDE1RDAwMDAwMDAwMDA5MDI2MDAwRjAwMDAwMDAxMEI2MEMwODAyRDQKKzoxMDE1RTAwMDAwMDAwMDE4ODAwMEZGMTQwMDAwMDAwMDA2ODIwMDAwQzgKKzoxMDE1RjAwMDAwMDAwMDEwQjE4RjAwMDAwMDAwMDAwODg3OEYwMDAxN0MKKzoxMDE2MDAwMDAwMDAwMDBDNzM2NjAwMTAwMDAwMDAwODJDODAwMDE4MTkKKzoxMDE2MTAwMDAwMDAwMDA4MkQwMDAwMTgwMDAwMDAwODJEODAwMDAyQzYKKzoxMDE2MjAwMDAwMDAwMDBDNUZCRjAwMDAwMDAwMDAxMDkxREUwMDAwMTEKKzoxMDE2MzAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAwMDJBMDAwMDAwNUIKKzoxMDE2NDAwMDAwMDAwMDEwMjg2NjAxRjUwMDAwMDAwODJDODAwMDAzNEYKKzoxMDE2NTAwMDAwMDAwMDA4MkQwMDAwMDMwMDAwMDAwOTMwNjBGRkYwQ0EKKzoxMDE2NjAwMDAwMDAwMDA4MkQ4MDAwMDEwMDAwMDAwQzI5ODAwMDAwMEYKKzoxMDE2NzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDFBMUQKKzoxMDE2ODAwMDAwMDAwMDA4MkQwMDAwMUEwMDAwMDAwNTczNjYwMDAwMkQKKzoxMDE2OTAwMDAwMDAwMDA4MkQ4MDAwMDIwMDAwMDAwMDMxODAwMDAwRTIKKzoxMDE2QTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDBDRkIKKzoxMDE2QjAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAwODJEODAwMDA0MzAKKzoxMDE2QzAwMDAwMDAwMDE4ODAwMEZFRjgwMDAwMDAxODAwMDIwMDAwNzIKKzoxMDE2RDAwMDAwMDAwMDE4ODAwMEZFRjYwMDAwMDAwMDJBMDAwMDAwNTQKKzoxMDE2RTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDBGMDA4MDAwM0MKKzoxMDE2RjAwMDAwMDAwMDA4MEY4MDAwMDcwMDAwMDAxODgwMDAwMDFBOUEKKzoxMDE3MDAwMDAwMDAwMDAwMjgwQTAwMDAwMDAwMDAwMDA1MDIwMDAwQTAKKzoxMDE3MTAwMDAwMDAwMDA4MjIwMDAwMDkwMDAwMDAwMDI5MDAwMDAwNkQKKzoxMDE3MjAwMDAwMDAwMDBGNjU2ODAwMTAwMDAwMDAwM0Y2NkM5NDAwRDQKKzoxMDE3MzAwMDAwMDAwMDEwQjk3MkEwMDQwMDAwMDAwQzczRTcwMDE5NEIKKzoxMDE3NDAwMDAwMDAwMDBDMjE0MjAwMDQwMDAwMDAwMDNDRjgwMDAwRjIKKzoxMDE3NTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwNTEKKzoxMDE3NjAwMDAwMDAwMDA4MjIwMDAwMDgwMDAwMDAwQzYxNDIwMDA0OTQKKzoxMDE3NzAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDA1MDIwMDAwNDAKKzoxMDE3ODAwMDAwMDAwMDBDNjE0MjAwMDAwMDAwMDAxMDAxNDIwMDAzNTQKKzoxMDE3OTAwMDAwMDAwMDBDMzNFNzAwMUQwMDAwMDAwQzYxNDIwMDAyNTUKKzoxMDE3QTAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDJBMDAwMDAwRUQKKzoxMDE3QjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwRjBGNDcwMDA3OEUKKzoxMDE3QzAwMDAwMDAwMDA4MEY4MDAwMDgwMDAwMDAwQzI5ODAwMDAwQzUKKzoxMDE3RDAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAxODgwMDBGRUQ1RUYKKzoxMDE3RTAwMDAwMDAwMDAwMzM1MTAwMDAwMDAwMDAwMDJBMDAwMDAwNEIKKzoxMDE3RjAwMDAwMDAwMDEwQjFDNjAwMjMwMDAwMDAwRjBGNTAwMDA3Q0EKKzoxMDE4MDAwMDAwMDAwMDAwMEE2MDAwMDAwMDAwMDAwMDBBRTEwMDAwODMKKzoxMDE4MTAwMDAwMDAwMDBGNEI2MjAwMDgwMDAwMDAwOTBCMTYwMEZGREIKKzoxMDE4MjAwMDAwMDAwMDBGNEM2MjAwMTAwMDAwMDAwMDBENjIwMDAwN0MKKzoxMDE4MzAwMDAwMDAwMDA5MEQxQTAwRkYwMDAwMDAxMDA3NTAwMDAzMEYKKzoxMDE4NDAwMDAwMDAwMDBDMEQxQTAwMDgwMDAwMDAwQzBCMTYwMDA4MjgKKzoxMDE4NTAwMDAwMDAwMDAwMENDNjAwMDAwMDAwMDAwMDBCODAwMDAwMkIKKzoxMDE4NjAwMDAwMDAwMDAwMDY5ODAwMDAwMDAwMDAwODBGODAwMDAzNDAKKzoxMDE4NzAwMDAwMDAwMDEwMDZDMjAwMDQwMDAwMDAwQzI5MDAwMDAyNTUKKzoxMDE4ODAwMDAwMDAwMDEwMjY0MjAwMDIwMDAwMDAwQzI5NTIwMDAzNTQKKzoxMDE4OTAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAxMDAwOUYwMDAwNkUKKzoxMDE4QTAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTExQTAwQTgKKzoxMDE4QjAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAwQzI5NTIwMDAwQUIKKzoxMDE4QzAwMDAwMDAwMDEwQjE5NzMyMDkwMDAwMDAwQzI5ODAwMDAwRDAKKzoxMDE4RDAwMDAwMDAwMDAwMDY5ODAwMDAwMDAwMDAxMDIwNTMwMDAwRTcKKzoxMDE4RTAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAwMDIyQzU4QzAwRkIKKzoxMDE4RjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwODBGODAwMDAzMUYKKzoxMDE5MDAwMDAwMDAwMDE4ODAwMEZGRjMwMDAwMDAxMEIxQzgwMDEzQjEKKzoxMDE5MTAwMDAwMDAwMDEwQjFDNjAwMDMwMDAwMDAwQzI5ODAwMDAwODgKKzoxMDE5MjAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAwQUQKKzoxMDE5MzAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAxMDA2QzIwMDAyNDMKKzoxMDE5NDAwMDAwMDAwMDBDMjk1MjAwMDIwMDAwMDAwMDIyQzU4QzAwOUIKKzoxMDE5NTAwMDAwMDAwMDAwMjc2NTAwMDAwMDAwMDAwMDI2RTQwMDAwRjEKKzoxMDE5NjAwMDAwMDAwMDA4MjIwMDAwMTYwMDAwMDAxMEIxQzYwMDAzQUQKKzoxMDE5NzAwMDAwMDAwMDAwMjM0ODAwMDAwMDAwMDAxMEIxODAwMDA1QjYKKzoxMDE5ODAwMDAwMDAwMDAwMjM0ODAwMDAwMDAwMDAwQzI5ODAwMDAwMzcKKzoxMDE5OTAwMDAwMDAwMDBGMEY1MDAwMDcwMDAwMDAxODgwMDAwMDEyMjgKKzoxMDE5QTAwMDAwMDAwMDA4MjIwMDAwMTYwMDAwMDAwQzI5ODAwMDAwNDIKKzoxMDE5QjAwMDAwMDAwMDAwMzAxNDAwMDAwMDAwMDAwMDMwOTUwMDAwMUUKKzoxMDE5QzAwMDAwMDAwMDEwMDc1MDAwMDMwMDAwMDAwOTBCMTYwMEZGODQKKzoxMDE5RDAwMDAwMDAwMDA5MEQxQTAwRkYwMDAwMDAwRjMxMTYwMDA4N0EKKzoxMDE5RTAwMDAwMDAwMDAwMzE2MjM0MDAwMDAwMDAwM0YxNjIzMDAwQUEKKzoxMDE5RjAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDNTEwMDAwREIKKzoxMDFBMDAwMDAwMDAwMDA5MkNEMTAwN0YwMDAwMDAwODJDRDkwMDAwNDQKKzoxMDFBMTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMDBDRDAKKzoxMDFBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwMzcKKzoxMDFBMzAwMDAwMDAwMDEwMDVDMjAwMDQwMDAwMDAwODBGODAwMDA3MkQKKzoxMDFBNDAwMDAwMDAwMDAwMzMwMDAwMDAwMDAwMDAxMDAwOUYwMDAwQjQKKzoxMDFBNTAwMDAwMDAwMDE4ODAwMEZFODYwMDAwMDAwMDJBMDAwMDAwNDAKKzoxMDFBNjAwMDAwMDAwMDBGMEY1MDAwMDcwMDAwMDAxMEIxQzYwMDJENEQKKzoxMDFBNzAwMDAwMDAwMDBGNDc0MjAwMDgwMDAwMDAwOTA3MEUwMDBGOTkKKzoxMDFBODAwMDAwMDAwMDA4MDcwRTAwMDgwMDAwMDAxMDAwMUYwMDAwMDIKKzoxMDFBOTAwMDAwMDAwMDA4MDkwMDAwMDEwMDAwMDAwNzA5MTIxQzAwRjYKKzoxMDFBQTAwMDAwMDAwMDAzQ0JDQTkyMDAwMDAwMDAwMDBCOTdBMjAwQzgKKzoxMDFBQjAwMDAwMDAwMDA3NDIxNzFDMDAwMDAwMDAwMDBCMDQwMDAwOUIKKzoxMDFBQzAwMDAwMDAwMDBGMEE4NDAwMDMwMDAwMDAwMDBBOTU5QzAwM0IKKzoxMDFBRDAwMDAwMDAwMDAwNEEwMDlBMDAwMDAwMDAwODgyMTIwMDAxODUKKzoxMDFBRTAwMDAwMDAwMDAxMEMxNzA4MDAwMDAwMDAwMDBDOTc4QzAwOUIKKzoxMDFBRjAwMDAwMDAwMDAwMDIxODAwMDAwMDAwMDAwODBEMDBGRkZGQjkKKzoxMDFCMDAwMDAwMDAwMDA4MEY4MDAwMDYwMDAwMDAwQzI5MDAwMDAwMDMKKzoxMDFCMTAwMDAwMDAwMDEwMDZDMjAwMDQwMDAwMDAwQzI5NTIwMDAyNjAKKzoxMDFCMjAwMDAwMDAwMDEwMjY0MjAwMDIwMDAwMDAwQzI5NTIwMDAzQjEKKzoxMDFCMzAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAxMDAwOUYwMDAwQ0IKKzoxMDFCNDAwMDAwMDAwMDEwQjE5NzMyMEMwMDAwMDAwMDIzMUIwMDAwQzEKKzoxMDFCNTAwMDAwMDAwMDAwMjcxMTA4MDAwMDAwMDAwMDY2OTAwMDAwNEYKKzoxMDFCNjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwMDAyMTgwMDAwQTYKKzoxMDFCNzAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAzNTgKKzoxMDFCODAwMDAwMDAwMDAwMjJDNTM2MDAwMDAwMDAxMDAwMUYwMDAwMDkKKzoxMDFCOTAwMDAwMDAwMDA4MEY4MDAwMDYwMDAwMDAxODgwMDBGRkY0MUQKKzoxMDFCQTAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTEwODAwQjcKKzoxMDFCQjAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAxMEIxQzgwMDBCOUIKKzoxMDFCQzAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwREQKKzoxMDFCRDAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAwQzI5NTIwMDAzRjQKKzoxMDFCRTAwMDAwMDAwMDEwMDZDMjAwMDIwMDAwMDAwQzI5NTIwMDAyOTIKKzoxMDFCRjAwMDAwMDAwMDAwMjJDNThDMDAwMDAwMDAwMDI3NjUwMDAwRTYKKzoxMDFDMDAwMDAwMDAwMDAwMjZFNDAwMDAwMDAwMDAwMDIzNDgwMDAwNUYKKzoxMDFDMTAwMDAwMDAwMDA4MjIwMDAwMTcwMDAwMDAwQzI5ODAwMDAwQ0UKKzoxMDFDMjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAxODgwMDBGRTRCQTQKKzowMDAwMDAwMUZGCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCisgKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQorICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworICogYWNjb21wYW55aW5nIGl0LgorICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItcnYycC0wOWF4LTUuMC4wLmozLmZ3LmloZXggYi9maXJtd2FyZS9ibngyL2JueDItcnYycC0wOWF4LTUuMC4wLmozLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzZGJlYQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA5YXgtNS4wLjAuajMuZncuaWhleApAQCAtMCwwICsxLDQ5OCBAQAorOjEwMDAwMDAwMDAwMDAwMDAwMDAwMEU3ODAwMDAwMDU4MDAwMDAwMDkwOQorOjEwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwMDAzMDAwMDAwMDBGQTgwMDAwMEVEMDAwMDAwMDA1MDAwMDAwMDAyNgorOjEwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjA4MDA1MDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MDgwMDU4MDAwMDAwMDAxMEIxODAwMDA2NTkKKzoxMDAwNjAwMDAwMDAwMDFGMDMwMzAzMDAwMDAwMDAwODA1MDBGRkZGNUQKKzoxMDAwNzAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwODA1MDAwMEZGNUEKKzoxMDAwODAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwOEFDMDAwMDAxQTEKKzoxMDAwOTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwQzJGODAwMDAxOUYKKzoxMDAwQTAwMDAwMDAwMDAwMkIwMDAwMDAwMDAwMDAwMDJCODAwMDAwN0EKKzoxMDAwQjAwMDAwMDAwMDEwOTFFMDAwMDIwMDAwMDAwOEFDMDAwMDAxMDgKKzoxMDAwQzAwMDAwMDAwMDEwMjAzRjAwNkIwMDAwMDAxMDIxM0YwMDAzRTMKKzoxMDAwRDAwMDAwMDAwMDEwMjBCRjAwM0EwMDAwMDAxODgwMDBGRkZENjMKKzoxMDAwRTAwMDAwMDAwMDEwQjFCOEIwMTUwMDAwMDAwQjJGREYwMDAyQjcKKzoxMDAwRjAwMDAwMDAwMDAwMDNEODAwMDAwMDAwMDAwMDJDMzgwMDAwQzEKKzoxMDAxMDAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwMDYKKzoxMDAxMTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1QjIKKzoxMDAxMjAwMDAwMDAwMDE4ODAwMDAwOEYwMDAwMDAwODJEODAwMTFDRDYKKzoxMDAxMzAwMDAwMDAwMDA4MDIwMDAwMDEwMDAwMDAxMDkxREUwMDAwMzUKKzoxMDAxNDAwMDAwMDAwMDBGNDJFMDAwMUMwMDAwMDAxMDkxODQwQTE2MUQKKzoxMDAxNTAwMDAwMDAwMDE4ODAwMDAwOTYwMDAwMDAwQzI5ODAwMDAyQkEKKzoxMDAxNjAwMDAwMDAwMDBDMUY4MDAwMDIwMDAwMDAwMDJBREYwMDAwRDkKKzoxMDAxNzAwMDAwMDAwMDA4MkEwMDAwMEYwMDAwMDAwMDA1MDAwMDAwMzkKKzoxMDAxODAwMDAwMDAwMDE4ODAwMEZGRTYwMDAwMDAwODAyMDAwMDAxRTcKKzoxMDAxOTAwMDAwMDAwMDBGNDJFMDAwMUMwMDAwMDAxMDkxODQwQTE4Q0IKKzoxMDAxQTAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDA2NUEKKzoxMDAxQjAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA2MEUKKzoxMDAxQzAwMDAwMDAwMDE4ODAwMDAwODUwMDAwMDAxODgwMDBGRkYxOEEKKzoxMDAxRDAwMDAwMDAwMDA4QjEwMDAwMDEwMDAwMDAwODJDODAwMTBDQTQKKzoxMDAxRTAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwODJEODAwMDAxMUMKKzoxMDAxRjAwMDAwMDAwMDE4ODAwMDAwN0YwMDAwMDAwQjJGREYwMDAyQ0QKKzoxMDAyMDAwMDAwMDAwMDBDMUY4MDAwMDIwMDAwMDAwMDJDMDcwMDAwMEUKKzoxMDAyMTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODA1MDA1NTU1QTgKKzoxMDAyMjAwMDAwMDAwMDE4ODAwMEZGRDIwMDAwMDAwQjJGREYwMDAyNEEKKzoxMDAyMzAwMDAwMDAwMDBDMUY4MDAwMDAwMDAwMDAwMDJDMDcwMDAwRTAKKzoxMDAyNDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODA1MDA1NTU1NzgKKzoxMDAyNTAwMDAwMDAwMDE4ODAwMEZGQ0MwMDAwMDAwQzFGODAwMDAyOEUKKzoxMDAyNjAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRkM5NzcKKzoxMDAyNzAwMDAwMDAwMDBDMjk4MDAwMDIwMDAwMDAwQzFGODAwMDAyMUEKKzoxMDAyODAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDA1MkUKKzoxMDAyOTAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRkMzNEQKKzoxMDAyQTAwMDAwMDAwMDA4MDIyNDAwNEEwMDAwMDAxODAwMDQwMDAwQkEKKzoxMDAyQjAwMDAwMDAwMDE4ODAwMDAwMUMwMDAwMDAxODgwMDAwMDFFRDQKKzoxMDAyQzAwMDAwMDAwMDE4ODAwMDAwNzgwMDAwMDAxODgwMDAwMENBQkMKKzoxMDAyRDAwMDAwMDAwMDE4ODAwMDAwQzkwMDAwMDAxODgwMDAwMDAwMjUKKzoxMDAyRTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwREUKKzoxMDAyRjAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwQ0UKKzoxMDAzMDAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwQkQKKzoxMDAzMTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMTE1OTcKKzoxMDAzMjAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwOUQKKzoxMDAzMzAwMDAwMDAwMDE4ODAwMDAwMTUwMDAwMDAxODgwMDAwMDFCNUQKKzoxMDAzNDAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMEUwOUQKKzoxMDAzNTAwMDAwMDAwMDE4ODAwMDAwMkYwMDAwMDAxODgwMDAwMTE1MjgKKzoxMDAzNjAwMDAwMDAwMDE4ODAwMDAxNDAwMDAwMDAxODgwMDAwMTBCMTAKKzoxMDAzNzAwMDAwMDAwMDE4ODAwMDAxNjQwMDAwMDAxODgwMDAwMDYxODcKKzoxMDAzODAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDlEQTAKKzoxMDAzOTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDA1MDAwMDAwQUMKKzoxMDAzQTAwMDAwMDAwMDE4ODAwMEZGQTIwMDAwMDAxMDkxRDQwMDAwOUYKKzoxMDAzQjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxREIKKzoxMDAzQzAwMDAwMDAwMDA4MkEwMDAwMDIwMDAwMDAwMDA1MDAwMDAwRjQKKzoxMDAzRDAwMDAwMDAwMDE4ODAwMEZGOUMwMDAwMDAxMDkxRDQwMDAwNzUKKzoxMDAzRTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQUIKKzoxMDAzRjAwMDAwMDAwMDAwMjk0MjAwMDAwMDAwMDAwODJBMDAwMDAyNUUKKzoxMDA0MDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRjk1QkIKKzoxMDA0MTAwMDAwMDAwMDE4ODAwMEZGOTQwMDAwMDAxMEIxQkNCMDBBN0EKKzoxMDA0MjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDAzRDgwMDAwRDYKKzoxMDA0MzAwMDAwMDAwMDAwMkMzQzAwMDAwMDAwMDAxMDkxRDQwMDAwREYKKzoxMDA0NDAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDAwMDJBMzIKKzoxMDA0NTAwMDAwMDAwMDE4ODAwMDAwRDkwMDAwMDAxMDJDNjIwMUJBRDIKKzoxMDA0NjAwMDAwMDAwMDE4ODAwMDAwMDYwMDAwMDAwODJDODAwMTBEMkMKKzoxMDA0NzAwMDAwMDAwMDA4MkQwMDAwMDkwMDAwMDAxMDkxRDQwMDAwQzkKKzoxMDA0ODAwMDAwMDAwMDA4MkQ4MDAxMDcwMDAwMDAxODgwMDAwMDM3RTAKKzoxMDA0OTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwQzFGODAwMDAwRkMKKzoxMDA0QTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDJBREYwMDAwQzQKKzoxMDA0QjAwMDAwMDAwMDA4MkEwMDAwMDYwMDAwMDAwODA1MDA1NTU1NEQKKzoxMDA0QzAwMDAwMDAwMDE4ODAwMEZGN0UwMDAwMDAxMDkxRDQwMDAwQTIKKzoxMDA0RDAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQkEKKzoxMDA0RTAwMDAwMDAwMDA4MkEwMDAwMEIwMDAwMDAwMDA1MDAwMDAwQ0EKKzoxMDA0RjAwMDAwMDAwMDE4ODAwMEZGNzgwMDAwMDAwMDAyMDIwMDAwRTkKKzoxMDA1MDAwMDAwMDAwMDAwMDI5QTAwMDAwMDAwMDAwMDA2MEMyQzAwMTEKKzoxMDA1MTAwMDAwMDAwMDA0QzYwQzM0MDAwMDAwMDAxMDAwMUYwMDAwQTIKKzoxMDA1MjAwMDAwMDAwMDEwQjE5NjE4MEMwMDAwMDAwODA2OTYwMDA0QTgKKzoxMDA1MzAwMDAwMDAwMDA5MDY4REZGRkMwMDAwMDAwNENEMDUxQTAwMzQKKzoxMDA1NDAwMDAwMDAwMDA0Q0M5QTE4MDAwMDAwMDAxMDIwRDcwMDAwMjIKKzoxMDA1NTAwMDAwMDAwMDBDMkI1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDA1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDIwRDcwMDAwODQKKzoxMDA1NzAwMDAwMDAwMDA4MEY4MDAwMDEwMDAwMDAxMEIxODAwMUY0QUQKKzoxMDA1ODAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCNTYwMDAwNkYKKzoxMDA1OTAwMDAwMDAwMDE4MDAwNDAwMDAwMDAwMDAwMDA2ODIwMDAwQjcKKzoxMDA1QTAwMDAwMDAwMDEwQjE4QTAwMDgwMDAwMDAxMEIxOEMxNDA3OTAKKzoxMDA1QjAwMDAwMDAwMDBCMDUwQUZGRkYwMDAwMDAxMEIxOEEwMDAzRDUKKzoxMDA1QzAwMDAwMDAwMDAwODYwQTE4MDAwMDAwMDAxMDkxOEMwMDAwNTYKKzoxMDA1RDAwMDAwMDAwMDA4MkEwMDAwMDEwMDAwMDAxMDkxRDQwMDAwNzMKKzoxMDA1RTAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAwMDA1MDIwMDAwREYKKzoxMDA1RjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxODAwMEEwMDAwNUEKKzoxMDA2MDAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAxMDkxREUwMDAwRTMKKzoxMDA2MTAwMDAwMDAwMDEwQkVFMTAwMDUwMDAwMDAxODgwMDBGRjRDNDMKKzoxMDA2MjAwMDAwMDAwMDAxMDU2MTE0MDAwMDAwMDAxMDkxOEEwMDAyMjIKKzoxMDA2MzAwMDAwMDAwMDA4QjBFMTAwMDEwMDAwMDAxODAwMEQwMDAwRkIKKzoxMDA2NDAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAxMDkxREUwMDAwQTMKKzoxMDA2NTAwMDAwMDAwMDEwQkVFMjAwMDUwMDAwMDAxODgwMDBGRjQ0MEEKKzoxMDA2NjAwMDAwMDAwMDAxMDU2MjE0MDAwMDAwMDAxMDkxOEEwMDAyRTEKKzoxMDA2NzAwMDAwMDAwMDA4QjE2MjAwMDEwMDAwMDAxODAwMEQwMDAwMzkKKzoxMDA2ODAwMDAwMDAwMDEwQjFBMEIwMTMwMDAwMDAwQjJGREYwMDAyMkIKKzoxMDA2OTAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAwODJDODAwMDAwNUEKKzoxMDA2QTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAxMDkxRDQwMDAwQTAKKzoxMDA2QjAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRkRDMEYKKzoxMDA2QzAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAxMDAwMUYwMDAwMjkKKzoxMDA2RDAwMDAwMDAwMDE4ODAwMEZGRTYwMDAwMDAwRjQ3NjAwMDA4REYKKzoxMDA2RTAwMDAwMDAwMDBGMDYwRTAwMDEwMDAwMDAwMDBGNTgwMDAwN0YKKzoxMDA2RjAwMDAwMDAwMDAwMEE2NDAwMDAwMDAwMDAwMDBBRTUwMDAwOUQKKzoxMDA3MDAwMDAwMDAwMDA5MEI2NkZGRkYwMDAwMDAwMDBENjEwMDAwMDMKKzoxMDA3MTAwMDAwMDAwMDE4ODAwMDAwMTMwMDAwMDAwRjQ3NjAwMDA4NzAKKzoxMDA3MjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwODJDODAwMDAwRkEKKzoxMDA3MzAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAxMDkxRDQwMDAwMEYKKzoxMDA3NDAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAwRjA2MEUwMDAxQjMKKzoxMDA3NTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDBGNTgwMDAwMDMKKzoxMDA3NjAwMDAwMDAwMDE4ODAwMEZGRDQwMDAwMDAwMDBBNjQwMDAwQjAKKzoxMDA3NzAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGMTIKKzoxMDA3ODAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDAyNjIwMDAwOTcKKzoxMDA3OTAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDMxMDQwMDAwMDkKKzoxMDA3QTAwMDAwMDAwMDAwMzA5QTAwMDAwMDAwMDAwOTA1NjAwMDBGMDIKKzoxMDA3QjAwMDAwMDAwMDEwQjE4QTAwMEEwMDAwMDAwMDA1NjM0QzAwMzAKKzoxMDA3QzAwMDAwMDAwMDA4MDUwQTAwMTIwMDAwMDAxMEI5NjIxNDAzQkUKKzoxMDA3RDAwMDAwMDAwMDAwMDMwMDAwMDAwMDAwMDAxODgwMDAwMDA1NzkKKzoxMDA3RTAwMDAwMDAwMDE4ODAwMEZGMTEwMDAwMDAxMEI2MDYxNDAzN0UKKzoxMDA3RjAwMDAwMDAwMDA4MDMwNjAwMDEwMDAwMDAxODgwMDBGRjE3MzkKKzoxMDA4MDAwMDAwMDAwMDE4ODAwMEZGOUYwMDAwMDAwQzI5ODAwMDAxRkMKKzoxMDA4MTAwMDAwMDAwMDBDMjk1MjAwMDEwMDAwMDAwQzI5NTIwMDAwQzkKKzoxMDA4MjAwMDAwMDAwMDA4MDIwMDAwMEUwMDAwMDAwODAyODAwMDFBMEMKKzoxMDA4MzAwMDAwMDAwMDEwQjFDNDBBMDIwMDAwMDAwODAyMDAwMDAzMUEKKzoxMDA4NDAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAwQzFGODAwMDAxRDEKKzoxMDA4NTAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwMDJBMDAwODAwNUQKKzoxMDA4NjAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRjA5MzEKKzoxMDA4NzAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAxMDkxRDQwMDAwRTgKKzoxMDA4ODAwMDAwMDAwMDA4MkEwMDAwMDEwMDAwMDAwMDJDMjAwMDAwRTkKKzoxMDA4OTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJDODAwMDAwMkYKKzoxMDA4QTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMTFDNDEKKzoxMDA4QjAwMDAwMDAwMDE4ODAwMEZGQTcwMDAwMDAwODJDODAwMDA2NDAKKzoxMDA4QzAwMDAwMDAwMDA4MkQwMDAwMDYwMDAwMDAwMDMwODAwMDAwM0QKKzoxMDA4RDAwMDAwMDAwMDAwMzEwMDAwMDAwMDAwMDAwODJEODAwMDA2MkMKKzoxMDA4RTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQTYKKzoxMDA4RjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDJBREYwMDAwNzAKKzoxMDA5MDAwMDAwMDAwMDA4MkEwMDAwMTAwMDAwMDAwMDA1MDAwMDAwQTAKKzoxMDA5MTAwMDAwMDAwMDE4ODAwMEZFRjQwMDAwMDAxMDkxQTBCMDA5NTMKKzoxMDA5MjAwMDAwMDAwMDA4MkM4MDAxMEQwMDAwMDAwODJEMDAwMDA5QzcKKzoxMDA5MzAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA3ODUKKzoxMDA5NDAwMDAwMDAwMDE4ODAwMEZGQTAwMDAwMDAxODgwMDAwMDEwQzgKKzoxMDA5NTAwMDAwMDAwMDA4QUMwMDAwMDEwMDAwMDAxODgwMDAwMDBCM0YKKzoxMDA5NjAwMDAwMDAwMDAwMDM4MEIwMDAwMDAwMDAwQjJGREYwMDAyMzkKKzoxMDA5NzAwMDAwMDAwMDAwMkMwMDQwMDAwMDAwMDAxMDkxRDQwMDAwOTYKKzoxMDA5ODAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRjgyOTYKKzoxMDA5OTAwMDAwMDAwMDE4ODAwMDAwMzEwMDAwMDAxODgwMDAwMDA2RjAKKzoxMDA5QTAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMDAwRTAwRjIKKzoxMDA5QjAwMDAwMDAwMDA4MkEwMDAwMDcwMDAwMDAwODA1MDA1NTU1NDcKKzoxMDA5QzAwMDAwMDAwMDE4ODAwMEZFREUwMDAwMDAwMDA2ODIwMDAwMkIKKzoxMDA5RDAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQjUKKzoxMDA5RTAwMDAwMDAwMDEwMENFNzAwMDcwMDAwMDAwOTA1NjJGRkZGOEYKKzoxMDA5RjAwMDAwMDAwMDEwQkE2QzE0MDUwMDAwMDAwMDJBREYwMDAwOUYKKzoxMDBBMDAwMDAwMDAwMDAwMjEwMDAwMDAwMDAwMDAwODJBMDAwMDA1OEUKKzoxMDBBMTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJDODAwMTBDQTAKKzoxMDBBMjAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwQzMxNjIwMDE4RDIKKzoxMDBBMzAwMDAwMDAwMDA4MkQ4MDAwMDEwMDAwMDAxODgwMDBGRjc2RjMKKzoxMDBBNDAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAxMEIxQTBCMDBFNjIKKzoxMDBBNTAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDAzRDgwMDAwQTAKKzoxMDBBNjAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAxMDkxRDQwMDAwQzUKKzoxMDBBNzAwMDAwMDAwMDE4ODAwMDAwMTUwMDAwMDAxMDJDNjIwMDAyMjkKKzoxMDBBODAwMDAwMDAwMDE4ODAwMDAwMEMwMDAwMDAwQjJGREYwMDAyQTcKKzoxMDBBOTAwMDAwMDAwMDAwMkMwNzAwMDAwMDAwMDAwQzFGODAwMDAxNzcKKzoxMDBBQTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODA1MDBGRkZGQkMKKzoxMDBBQjAwMDAwMDAwMDE4ODAwMEZFQzAwMDAwMDAwODJDODAwMTBEMUUKKzoxMDBBQzAwMDAwMDAwMDA4MkQwMDAwMDkwMDAwMDAxMDkxRDQwMDAwNzMKKzoxMDBBRDAwMDAwMDAwMDA4MkQ4MDAxMDcwMDAwMDAxODgwMDBGRjZENTUKKzoxMDBBRTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQTQKKzoxMDBBRjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDJBREYwMDAwNkUKKzoxMDBCMDAwMDAwMDAwMDA4MkEwMDAwMEEwMDAwMDAwMDA1MDAwMDAwQTQKKzoxMDBCMTAwMDAwMDAwMDE4ODAwMEZFQjQwMDAwMDAwMDA2ODIwMDAwMDMKKzoxMDBCMjAwMDAwMDAwMDA4MkM4MDAxMEMwMDAwMDAwODJEMDAwMDA4QzcKKzoxMDBCMzAwMDAwMDAwMDA4MkQ4MDAxMzQwMDAwMDAwMDAwMDAwMDAwQ0IKKzoxMDBCNDAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwODJDODAwMTQwMjEKKzoxMDBCNTAwMDAwMDAwMDA4MkQwMDAwM0MwMDAwMDAwODJEODAwMTFDNTIKKzoxMDBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwMDYKKzoxMDBCNzAwMDAwMDAwMDA4MkM4MDAwODAwMDAwMDAwODJEMDAwMDAwMEMKKzoxMDBCODAwMDAwMDAwMDA4MkQ4MDAxMDUwMDAwMDAxMEJFRTIwMDA1RjUKKzoxMDBCOTAwMDAwMDAwMDE4ODAwMEZFOUQwMDAwMDAwMTA1NjIxNDAwQTYKKzoxMDBCQTAwMDAwMDAwMDEwOTE4QTAwMDIwMDAwMDAwOEIxNjIwMDAxRkMKKzoxMDBCQjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxODAwMEQwMDAwOTEKKzoxMDBCQzAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDBBQUFBNEUKKzoxMDBCRDAwMDAwMDAwMDE4ODAwMEZGMzkwMDAwMDAwQzI5ODAwMDAxOEYKKzoxMDBCRTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwODJBMDAwMDA5MUUKKzoxMDBCRjAwMDAwMDAwMDA4MDUwMEFBQUEwMDAwMDAxODgwMDBGRTk3NjcKKzoxMDBDMDAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1QjcKKzoxMDBDMTAwMDAwMDAwMDE4ODAwMEZGMzEwMDAwMDAxMDkxQTAzQzAyOEQKKzoxMDBDMjAwMDAwMDAwMDEwQjFFNjYyMDcwMDAwMDAwQjJGREYwMDAyOTkKKzoxMDBDMzAwMDAwMDAwMDAwMkMzMTAwMDAwMDAwMDAwOTJDQjEwMDdGRjIKKzoxMDBDNDAwMDAwMDAwMDA4MkNEOTAwMDAwMDAwMDAwODJEMDAwMDAwNjIKKzoxMDBDNTAwMDAwMDAwMDA4MkQ4MDAxMEQwMDAwMDAxMEIxQTgwMDA2NjIKKzoxMDBDNjAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDMjAwMDAwQTkKKzoxMDBDNzAwMDAwMDAwMDAwMkNBNzAwMDAwMDAwMDAwODJEMDAwMDEwNUMKKzoxMDBDODAwMDAwMDAwMDA4MkQ4MDAxMDgwMDAwMDAxODgwMDBGRjJDRTMKKzoxMDBDOTAwMDAwMDAwMDEwQjFBNjAwMTAwMDAwMDAxMDAwMUYwMDAwQUUKKzoxMDBDQTAwMDAwMDAwMDBGMEYzMDAwMDcwMDAwMDAwMDBBNjAwMDAwODUKKzoxMDBDQjAwMDAwMDAwMDAwMEFFMTAwMDAwMDAwMDAwRjRCNjIwMDA4ODUKKzoxMDBDQzAwMDAwMDAwMDA5MEIxNjAwRkYwMDAwMDAwMDBENjIwMDAwOEMKKzoxMDBDRDAwMDAwMDAwMDA5MEQxQTAwRkYwMDAwMDAxMDA3MzAwMDAzOUIKKzoxMDBDRTAwMDAwMDAwMDBDMEQxQTAwMDgwMDAwMDAwQzBCMTYwMDA4OTQKKzoxMDBDRjAwMDAwMDAwMDBGNENFMzAwMTgwMDAwMDAwMDBDOTkyQzAwQ0QKKzoxMDBEMDAwMDAwMDAwMDA0Q0M5OTM0MDAwMDAwMDAwODBGODAwMDAwQUYKKzoxMDBEMTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwMDMzMzEwMDAwQjkKKzoxMDBEMjAwMDAwMDAwMDA4MjIwMDAwMTYwMDAwMDAwMDJBREYwMDAwN0EKKzoxMDBEMzAwMDAwMDAwMDA4MkEwMDAwMEMwMDAwMDAxMDAwOUYwMDAwQzYKKzoxMDBENDAwMDAwMDAwMDAwMEYyMDAwMDAwMDAwMDAwQzFGODAwMDAxQzgKKzoxMDBENTAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRTZCREIKKzoxMDBENjAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDBBQUFBQUMKKzoxMDBENzAwMDAwMDAwMDE4ODAwMEZGMDUwMDAwMDAwRjQ3MjIwMDA4NTcKKzoxMDBEODAwMDAwMDAwMDA5MDcwRTAwMEYwMDAwMDAwODA3MEUwMDA4MTEKKzoxMDBEOTAwMDAwMDAwMDA4MDI4MDAwMDEwMDAwMDAwNzAyODUxQzAwMUUKKzoxMDBEQTAwMDAwMDAwMDA4ODI4NTAwMDEwMDAwMDAwMDAyODU0QzAwNjAKKzoxMDBEQjAwMDAwMDAwMDA3NDI4NTFDMDAwMDAwMDAwM0MzQUE1MjAwODcKKzoxMDBEQzAwMDAwMDAwMDAwMDNCMTBFMDAwMDAwMDAwNzRCMDcxQzAwRUMKKzoxMDBERDAwMDAwMDAwMDBGMEYzMDAwMDcwMDAwMDAwRjBBOTYwMDAzMEMKKzoxMDBERTAwMDAwMDAwMDAwMEE5NTVDMDAwMDAwMDAwMDRBMDA1QTAwNjQKKzoxMDBERjAwMDAwMDAwMDAwMEM5NjBBMDAwMDAwMDAwOTBDOTlGRkZGOUIKKzoxMDBFMDAwMDAwMDAwMDA4MEQwMEZGRkYwMDAwMDAxMEIxOTYzMjAyNDQKKzoxMDBFMTAwMDAwMDAwMDA4MEY4MDAwMDUwMDAwMDAxMEIxQTgwMDA4QzUKKzoxMDBFMjAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwQjJGREYwMDAyMTgKKzoxMDBFMzAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAwMDJDQTcwMDAwOTMKKzoxMDBFNDAwMDAwMDAwMDA4MkQwMDAwMTAwMDAwMDAwODJEODAwMTA4OUYKKzoxMDBFNTAwMDAwMDAwMDE4ODAwMEZFRjMwMDAwMDAwQzI5ODAwMDAxNTMKKzoxMDBFNjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzFGODAwMDAxQTcKKzoxMDBFNzAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDBEMkEKKzoxMDBFODAwMDAwMDAwMDA4MDUwMEFBQUEwMDAwMDAxODgwMDBGRTQ1MjYKKzoxMDBFOTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1MjUKKzoxMDBFQTAwMDAwMDAwMDE4ODAwMEZFREYwMDAwMDAwQzI5ODAwMDAxMTcKKzoxMDBFQjAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwODJBMDAwMDA3NEQKKzoxMDBFQzAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRTNEOTgKKzoxMDBFRDAwMDAwMDAwMDEwQjE4MDAwMDQwMDAwMDAxRjAzMDMwMzAwQTUKKzoxMDBFRTAwMDAwMDAwMDA4MDUwMDAwRkYwMDAwMDAxODAwMDIwMDAwREMKKzoxMDBFRjAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMEIxRDQwMDAwMzMKKzoxMDBGMDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxMDIwNTMwMDAwREYKKzoxMDBGMTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxNTMKKzoxMDBGMjAwMDAwMDAwMDAwMkY4MEFBMDAwMDAwMDAwQzI5ODAwMDAxQjIKKzoxMDBGMzAwMDAwMDAwMDA4MDI1NDAwMEYwMDAwMDAwMDJDNDAwMDAwRDgKKzoxMDBGNDAwMDAwMDAwMDA5Mjk1MjAwM0YwMDAwMDAxODAwMDQwMDAwQzIKKzoxMDBGNTAwMDAwMDAwMDE4ODAwMDAwMTAwMDAwMDAxODgwMDAwMDExNDAKKzoxMDBGNjAwMDAwMDAwMDE4ODAwMDAwNEEwMDAwMDAxODgwMDAwMTI4REUKKzoxMDBGNzAwMDAwMDAwMDE4ODAwMDAxMjcwMDAwMDAxODgwMDAwMTI2RjIKKzoxMDBGODAwMDAwMDAwMDE4ODAwMDAxMjYwMDAwMDAxODgwMDAwMDAwMEEKKzoxMDBGOTAwMDAwMDAwMDE4ODAwMDAxM0YwMDAwMDAxODgwMDAwMTIyQkUKKzoxMDBGQTAwMDAwMDAwMDE4ODAwMDAwMEIwMDAwMDAxODgwMDAwMTQ1QzAKKzoxMDBGQjAwMDAwMDAwMDE4ODAwMDAxOUEwMDAwMDAxODgwMDAwMDdCRUIKKzoxMDBGQzAwMDAwMDAwMDE4ODAwMDAwRjkwMDAwMDAxODgwMDAwMTA5RUUKKzoxMDBGRDAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxODgwMDBGRkU0NkMKKzoxMDBGRTAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwQzI5ODAwMDAwMjIKKzoxMDBGRjAwMDAwMDAwMDE4ODAwMEZGRTEwMDAwMDAwMDJBMDAwMDAwNEYKKzoxMDEwMDAwMDAwMDAwMDE4ODAwMEZGREYwMDAwMDAwMDAzODIwMDAwRTUKKzoxMDEwMTAwMDAwMDAwMDE4ODAwMEZGREEwMDAwMDAwMTBDMTYxNDAwMjgKKzoxMDEwMjAwMDAwMDAwMDAwOEMxODE0MDAwMDAwMDAxMDkxOTgwMDAzQ0MKKzoxMDEwMzAwMDAwMDAwMDA4MEM5NjAwMDIwMDAwMDAxMEIxODAwMDAzQzAKKzoxMDEwNDAwMDAwMDAwMDA4MEM5NjAwMDEwMDAwMDAwMDBDMDAwMDAwRTkKKzoxMDEwNTAwMDAwMDAwMDAwMEQxOTAwMDAwMDAwMDAxMDIwNTYwMDAwRTQKKzoxMDEwNjAwMDAwMDAwMDBDMkJENzAwMDEwMDAwMDAwODBGODAwMDAxRDkKKzoxMDEwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMUYwMDAwNDEKKzoxMDEwODAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAxMDAxMTMwMUYxRkIKKzoxMDEwOTAwMDAwMDAwMDE4MDAwNzAwMDAwMDAwMDAwMDA1MDIwMDAwMkEKKzoxMDEwQTAwMDAwMDAwMDEwOTE5NjM0MjEwMDAwMDAxMDIwNUYwMDAwMjUKKzoxMDEwQjAwMDAwMDAwMDAwMkMxRTAwMDAwMDAwMDAwODJDODAwMDA2MkMKKzoxMDEwQzAwMDAwMDAwMDA4MkQwMDAwMDYwMDAwMDAwODJEODAwMTAyMkQKKzoxMDEwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwOTEKKzoxMDEwRTAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAxODAwMEEwMDAwNzAKKzoxMDEwRjAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAxMDkxOTYzNDE2NjgKKzoxMDExMDAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDA5RDgwMDAwNkYKKzoxMDExMTAwMDAwMDAwMDAwMkMxRTAwMDAwMDAwMDAwODJDODAwMTBFQzIKKzoxMDExMjAwMDAwMDAwMDA4MkQwMDAwMEEwMDAwMDAwODJEODAwMTAyQzgKKzoxMDExMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwMzAKKzoxMDExNDAwMDAwMDAwMDAwMEQ2MjAwMDAwMDAwMDAwMDJDMTMwMDAwRjEKKzoxMDExNTAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDA1MDIwMDAwNjYKKzoxMDExNjAwMDAwMDAwMDEwOTE5NjM0MDkwMDAwMDAxMDIwNUYwMDAwN0MKKzoxMDExNzAwMDAwMDAwMDAwMkMxRTAwMDAwMDAwMDAwODJDODAwMDA2NkIKKzoxMDExODAwMDAwMDAwMDA4MkQwMDAwNkEwMDAwMDAwODJEODAwMTAyMDgKKzoxMDExOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwRDAKKzoxMDExQTAwMDAwMDAwMDAwMEQ3QTAwMDAwMDAwMDAxODAwMEEwMDAwOTYKKzoxMDExQjAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwMDBENjEwMDAwOTcKKzoxMDExQzAwMDAwMDAwMDAwMDM2MjAwMDAwMDAwMDAxMDIzNDIwMERCNkEKKzoxMDExRDAwMDAwMDAwMDAwMDI2MzhDMDAwMDAwMDAwMDI2NDYwMDAwQjIKKzoxMDExRTAwMDAwMDAwMDA4MDIwNDAwMTIwMDAwMDAxMEI5MDYwODJFREEKKzoxMDExRjAwMDAwMDAwMDAwMEY1ODAwMDAwMDAwMDAwMDBBNjQwMDAwMUEKKzoxMDEyMDAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGNzcKKzoxMDEyMTAwMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDBCODAwMDAwMzcKKzoxMDEyMjAwMDAwMDAwMDA4MENDNjAwMTIwMDAwMDAxODgwMDBGRkNFNkQKKzoxMDEyMzAwMDAwMDAwMDEwMjA1NjAwMDAwMDAwMDAwQzJCRDcwMDAxMTkKKzoxMDEyNDAwMDAwMDAwMDA4MEY4MDAwMDMwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDEyNTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxMTAKKzoxMDEyNjAwMDAwMDAwMDA4MjcxMTAwMTIwMDAwMDAwMDY2OTAwMDAwMzYKKzoxMDEyNzAwMDAwMDAwMDA4QTMxQjAwMTIwMDAwMDAxMEIxOTgwMDA2MzcKKzoxMDEyODAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxRTAKKzoxMDEyOTAwMDAwMDAwMDEwMjA1NjAwMDAwMDAwMDAwQzJCRDcwMDAxQjkKKzoxMDEyQTAwMDAwMDAwMDA4MEY4MDAwMDQwMDAwMDAwODIyMDAwMDAzNzYKKzoxMDEyQjAwMDAwMDAwMDA4MkM4MDAwMEMwMDAwMDAwODJEMDAwMDBDMkQKKzoxMDEyQzAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxQTAKKzoxMDEyRDAwMDAwMDAwMDAwMjU5NjAwMDAwMDAwMDAwQzI5ODAwMDAwOUUKKzoxMDEyRTAwMDAwMDAwMDAwMDY2NjAwMDAwMDAwMDAwMDg2NjExODAwOTMKKzoxMDEyRjAwMDAwMDAwMDA5MDI2MDAwMEYwMDAwMDAwRjAyMDQwMDAyNUQKKzoxMDEzMDAwMDAwMDAwMDEwQjYwQzA4MDUwMDAwMDAwQzFGQkYwMDAwMTQKKzoxMDEzMTAwMDAwMDAwMDEwMjg2NjAwMDMwMDAwMDAwODA3OEYwMDAxOEQKKzoxMDEzMjAwMDAwMDAwMDBDMzM2NjAwMTAwMDAwMDAwMDMyMTQwMDAwQzIKKzoxMDEzMzAwMDAwMDAwMDAwMzI5NTAwMDAwMDAwMDAwNTczNjYyQzAwREMKKzoxMDEzNDAwMDAwMDAwMDAwMzFFMzJFMDAwMDAwMDAwODJEODAwMDEwOTYKKzoxMDEzNTAwMDAwMDAwMDE4ODAwMEZGNzUwMDAwMDAwMDIzMDAwMDAwNUUKKzoxMDEzNjAwMDAwMDAwMDA5MjVFNkZGRkYwMDAwMDAwODIyMDAwMDBCMzYKKzoxMDEzNzAwMDAwMDAwMDBDNjk1MjAwMDAwMDAwMDAwQzI5ODAwMDAwRjEKKzoxMDEzODAwMDAwMDAwMDEwMjg2NjAwODgwMDAwMDAxODgwMDBGRjZFMzIKKzoxMDEzOTAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwODJDODAwMDQwMkYKKzoxMDEzQTAwMDAwMDAwMDA4MkQwMDAwMjAwMDAwMDAwODJEODAwMTFDMTYKKzoxMDEzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwQUUKKzoxMDEzQzAwMDAwMDAwMDBGNDJFQTAwMTAwMDAwMDAxMDAwNEYwMDA0NkYKKzoxMDEzRDAwMDAwMDAwMDEwQjc0NjkyMDAwMDAwMDAwODAyNDkwMDEyMDkKKzoxMDEzRTAwMDAwMDAwMDEwQjU4NDBBMDAwMDAwMDAwMDBENjEwMDAwM0MKKzoxMDEzRjAwMDAwMDAwMDEwQkE2NjM0NkEwMDAwMDAwODgzMDUwMDEyN0QKKzoxMDE0MDAwMDAwMDAwMDEwMDA0RjAwMDIwMDAwMDAwMDAzNDkwMDAwMkYKKzoxMDE0MTAwMDAwMDAwMDAxODMwNjhDMDAwMDAwMDAwMDgzQzYwQzAwNjEKKzoxMDE0MjAwMDAwMDAwMDEwQjE4NzAwMTEwMDAwMDAwMDBCNkUwMDAwRUEKKzoxMDE0MzAwMDAwMDAwMDEwQkVFOTAwMDUwMDAwMDAxODgwMDBGRjU1MDQKKzoxMDE0NDAwMDAwMDAwMDAxMDU2OTE0MDAwMDAwMDAxMDkxOEEwMDAyRUMKKzoxMDE0NTAwMDAwMDAwMDA4QjRFOTAwMDEwMDAwMDAxMEIxRTkyQzVEQjMKKzoxMDE0NjAwMDAwMDAwMDAwODY2OTJDMDAwMDAwMDAwMDAyMDAwMDAwNUYKKzoxMDE0NzAwMDAwMDAwMDA5MDJFQUZGRkYwMDAwMDAxMDAwMEMwMDAyNUIKKzoxMDE0ODAwMDAwMDAwMDAwMDIwNDBBMDAwMDAwMDAwRjQ2MEMwMDAxRUEKKzoxMDE0OTAwMDAwMDAwMDBGMDI4NTAwMDEwMDAwMDAxMDkxOEMwMUZDOEIKKzoxMDE0QTAwMDAwMDAwMDEwQjcwNDBFNTQwMDAwMDAwMDBGNDAwMDAwQzAKKzoxMDE0QjAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDBBNjQwMDAwNTAKKzoxMDE0QzAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGQjUKKzoxMDE0RDAwMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDBCODAwMDAwNzUKKzoxMDE0RTAwMDAwMDAwMDA4MEM4NjAwMTIwMDAwMDAxMDIwNTYwMDAwQ0EKKzoxMDE0RjAwMDAwMDAwMDBDMkJENzAwMDEwMDAwMDAwODBGODAwMDAzNDMKKzoxMDE1MDAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAxMDAwMUYwMDAwMjUKKzoxMDE1MTAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAwODI3MTEwMDEyMkEKKzoxMDE1MjAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAwMDI2NDYwMDAwNTkKKzoxMDE1MzAwMDAwMDAwMDAwMjMwNjAwMDAwMDAwMDAxMEIxOTgwMDA5MjAKKzoxMDE1NDAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxMUQKKzoxMDE1NTAwMDAwMDAwMDEwMjA1NjAwMDAwMDAwMDAwQzJCRDcwMDAxRjYKKzoxMDE1NjAwMDAwMDAwMDA4MEY4MDAwMDQwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDE1NzAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxRUQKKzoxMDE1ODAwMDAwMDAwMDAwMzIxNDAwMDAwMDAwMDAwMDMyOTUwMDAwNEUKKzoxMDE1OTAwMDAwMDAwMDAwMzFFMzJFMDAwMDAwMDAwNTczNjYyQzAwRkYKKzoxMDE1QTAwMDAwMDAwMDAwMjU5NjAwMDAwMDAwMDAxMEIxODcwMDIxMTcKKzoxMDE1QjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwRjBGNkIwMDA3RTYKKzoxMDE1QzAwMDAwMDAwMDAwMEQ2OTAwMDAwMDAwMDAwMDBBNkMwMDAwMkYKKzoxMDE1RDAwMDAwMDAwMDAwMEFFRDAwMDAwMDAwMDAwMDBCNkUwMDAwOUIKKzoxMDE1RTAwMDAwMDAwMDAwMEI4MDAwMDAwMDAwMDAwMDBDODcwMDAwREQKKzoxMDE1RjAwMDAwMDAwMDE4ODAwMEZGMUUwMDAwMDAwMTBDMTYxNDAwRkYKKzoxMDE2MDAwMDAwMDAwMDAwOEMxODE0MDAwMDAwMDAwODBDOTYwMDAxNzcKKzoxMDE2MTAwMDAwMDAwMDEwOTE5ODAwMDIwMDAwMDAwODBDOTkwMDAxRTEKKzoxMDE2MjAwMDAwMDAwMDAwMEQxOTAwMDAwMDAwMDAwMDBDMDAwMDAwODgKKzoxMDE2MzAwMDAwMDAwMDEwMjA1NjAwMDAwMDAwMDAwQzJCRDcwMDAxMTUKKzoxMDE2NDAwMDAwMDAwMDA4MEY4MDAwMDEwMDAwMDAxMDIwNTMwMDAwN0YKKzoxMDE2NTAwMDAwMDAwMDBDNjk1MjAwMDEwMDAwMDAxMDAwMUYwMDAwOTMKKzoxMDE2NjAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAwMDIyQzU4QzAwQjgKKzoxMDE2NzAwMDAwMDAwMDAwMjMxMjAwMDAwMDAwMDAwMDI3MTEwMDAwRkQKKzoxMDE2ODAwMDAwMDAwMDAwMjY5MDAwMDAwMDAwMDAxMEI4MTcwRTAzQjQKKzoxMDE2OTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxODgwMDBGRkVCMTMKKzoxMDE2QTAwMDAwMDAwMDAwODI5NzBFMDAwMDAwMDAwMEEzMTIwQTAwNTQKKzoxMDE2QjAwMDAwMDAwMDA4MjIwMDAwMUEwMDAwMDAwODJDODAwMDBDMjYKKzoxMDE2QzAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAwODJEODAwMDEwMTQKKzoxMDE2RDAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxOEMKKzoxMDE2RTAwMDAwMDAwMDAwMEQ2RTAwMDAwMDAwMDAwM0U3Q0YzNDAwOTIKKzoxMDE2RjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDkxREUwMDAwQjYKKzoxMDE3MDAwMDAwMDAwMDEwQjE4NzAwMDcwMDAwMDAwMDM2MTQwMDAwNDAKKzoxMDE3MTAwMDAwMDAwMDAwMzY5NTAwMDAwMDAwMDAwMDM3MTYwMDAwQjEKKzoxMDE3MjAwMDAwMDAwMDA4MkM4MDAwNTAwMDAwMDAwODJEMDAwMDMwNTAKKzoxMDE3MzAwMDAwMDAwMDA4MkQ4MDAwMEMwMDAwMDAxODgwMDBGRUY4NUEKKzoxMDE3NDAwMDAwMDAwMDAwMjY0NjAwMDAwMDAwMDAwMDIzMDAwMDAwMEEKKzoxMDE3NTAwMDAwMDAwMDA5MjVFNkZGRkYwMDAwMDAwMDBCNkUwMDAwRkUKKzoxMDE3NjAwMDAwMDAwMDAzRTdDRjJDMDAwMDAwMDAwODIyMDAwMDFCNEYKKzoxMDE3NzAwMDAwMDAwMDBDNjk1MjAwMDAwMDAwMDAwQzI5ODAwMDAwRUQKKzoxMDE3ODAwMDAwMDAwMDE4ODAwMEZFRUYwMDAwMDAwMDJBMDAwMDAwQUEKKzoxMDE3OTAwMDAwMDAwMDEwMDg2NjAwMDUwMDAwMDAwMDA2NjYwMDAwNUEKKzoxMDE3QTAwMDAwMDAwMDAwODY2MTE4MDAwMDAwMDAwOTAyNjAwMEYwREYKKzoxMDE3QjAwMDAwMDAwMDEwQjYwQzA4MDIwMDAwMDAxODgwMDBGRUU4Q0YKKzoxMDE3QzAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAxMEIxOEYwMDAwNDEKKzoxMDE3RDAwMDAwMDAwMDA4ODc4RjAwMDEwMDAwMDAwQzczNjYwMDEwRjUKKzoxMDE3RTAwMDAwMDAwMDA4MkM4MDAwMTgwMDAwMDAwODJEMDAwMDE4RTAKKzoxMDE3RjAwMDAwMDAwMDA4MkQ4MDAwMDIwMDAwMDAwQzVGQkYwMDAwMDgKKzoxMDE4MDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxODAwMEQwMDAwMzQKKzoxMDE4MTAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMDI4NjYwMUY1MEEKKzoxMDE4MjAwMDAwMDAwMDA4MkM4MDAwMDMwMDAwMDAwODJEMDAwMDAzQzkKKzoxMDE4MzAwMDAwMDAwMDA5MzA2MEZGRjAwMDAwMDAwODJEODAwMDAxNkEKKzoxMDE4NDAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDkxREUwMDAwNjQKKzoxMDE4NTAwMDAwMDAwMDA4MkM4MDAwMUEwMDAwMDAwODJEMDAwMDFBNkIKKzoxMDE4NjAwMDAwMDAwMDA1NzM2NjAwMDAwMDAwMDAwODJEODAwMDAyRTMKKzoxMDE4NzAwMDAwMDAwMDAwMzE4MDAwMDAwMDAwMDAxMDkxREUwMDAwMzgKKzoxMDE4ODAwMDAwMDAwMDA4MkM4MDAwMEMwMDAwMDAwODJEMDAwMDBDNTcKKzoxMDE4OTAwMDAwMDAwMDA4MkQ4MDAwMDQwMDAwMDAxODgwMDBGRUNDMkQKKzoxMDE4QTAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAxODgwMDBGRUNBQkUKKzoxMDE4QjAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMDAwMUYwMDAwQ0YKKzoxMDE4QzAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAwMDBGMDA4MDAwM0EKKzoxMDE4RDAwMDAwMDAwMDA4MEY4MDAwMDcwMDAwMDAxODgwMDAwMDFCQjcKKzoxMDE4RTAwMDAwMDAwMDAwMjgwQTAwMDAwMDAwMDAwMDA1MDIwMDAwQkYKKzoxMDE4RjAwMDAwMDAwMDA4MjIwMDAwMDkwMDAwMDAwMDI5MDAwMDAwOEMKKzoxMDE5MDAwMDAwMDAwMDBGNjU2ODAwMTAwMDAwMDAwM0Y2NkM5NDAwRjIKKzoxMDE5MTAwMDAwMDAwMDEwQjk3MkEwMDQwMDAwMDAwQzczRTcwMDE5NjkKKzoxMDE5MjAwMDAwMDAwMDBDMjE0MjAwMDQwMDAwMDAwMDNDRjgwMDAwMTAKKzoxMDE5MzAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwNkYKKzoxMDE5NDAwMDAwMDAwMDA4MjIwMDAwMDgwMDAwMDAwQzYxNDIwMDA0QjIKKzoxMDE5NTAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDA1MDIwMDAwNUUKKzoxMDE5NjAwMDAwMDAwMDBDNjE0MjAwMDAwMDAwMDAxMDAxNDIwMDAzNzIKKzoxMDE5NzAwMDAwMDAwMDBDMzNFNzAwMUQwMDAwMDAwQzYxNDIwMDAyNzMKKzoxMDE5ODAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDJBMDAwMDAwMEIKKzoxMDE5OTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxQzkKKzoxMDE5QTAwMDAwMDAwMDBGMEY0NzAwMDcwMDAwMDAwODBGODAwMDA4MkMKKzoxMDE5QjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDAwMUYwMDAwNDMKKzoxMDE5QzAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAxODgwMDBGRUE2OEMKKzoxMDE5RDAwMDAwMDAwMDAwMzM1MTAwMDAwMDAwMDAwMDJBMDAwMDAwNTkKKzoxMDE5RTAwMDAwMDAwMDEwQjFDNjAwMjkwMDAwMDAwRjBGNTAwMDA3RDIKKzoxMDE5RjAwMDAwMDAwMDAwMEE2MDAwMDAwMDAwMDAwMDBBRTEwMDAwOTIKKzoxMDFBMDAwMDAwMDAwMDBGNEI2MjAwMDgwMDAwMDAwOTBCMTYwMEZGRTkKKzoxMDFBMTAwMDAwMDAwMDBGNEM2MjAwMTAwMDAwMDAwMDBENjIwMDAwOEEKKzoxMDFBMjAwMDAwMDAwMDA5MEQxQTAwRkYwMDAwMDAxMDA3NTAwMDAzMUQKKzoxMDFBMzAwMDAwMDAwMDBDMEQxQTAwMDgwMDAwMDAwQzBCMTYwMDA4MzYKKzoxMDFBNDAwMDAwMDAwMDAwMENDNjAwMDAwMDAwMDAwMDBCODAwMDAwMzkKKzoxMDFBNTAwMDAwMDAwMDAwMDY5ODAwMDAwMDAwMDAxMDIwNTYwMDAwNjIKKzoxMDFBNjAwMDAwMDAwMDBDMkJENzAwMDEwMDAwMDAwODBGODAwMDAzQ0QKKzoxMDFBNzAwMDAwMDAwMDEwMDZDMjAwMDQwMDAwMDAwQzI5MDAwMDAyNTMKKzoxMDFBODAwMDAwMDAwMDEwMjY0MjAwMDIwMDAwMDAwQzI5NTIwMDAzNTIKKzoxMDFBOTAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAxMDAwMUYwMDAwRUMKKzoxMDFBQTAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAwMDIzMUIwMDAwQTkKKzoxMDFBQjAwMDAwMDAwMDAwMjcxMTFBMDAwMDAwMDAwMDY2OTAwMDAwREUKKzoxMDFBQzAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAxMEIxOTczMjBDRjkKKzoxMDFBRDAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwMDA2OTgwMDAwQjMKKzoxMDFBRTAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAzRTkKKzoxMDFBRjAwMDAwMDAwMDAwMjJDNThDMDAwMDAwMDAxMDAwMUYwMDAwNDQKKzoxMDFCMDAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAxMDIwNTYwMDAwMDAKKzoxMDFCMTAwMDAwMDAwMDBDMkJENzAwMDEwMDAwMDAwODBGODAwMDAzMUMKKzoxMDFCMjAwMDAwMDAwMDE4ODAwMEZGRUYwMDAwMDAxMEIxQzgwMDEzOTMKKzoxMDFCMzAwMDAwMDAwMDEwQjFDNjAwMDMwMDAwMDAwQzI5ODAwMDAwNjYKKzoxMDFCNDAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAwOEIKKzoxMDFCNTAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAxMDA2QzIwMDAyMjEKKzoxMDFCNjAwMDAwMDAwMDBDMjk1MjAwMDIwMDAwMDAwMDIyQzU4QzAwNzkKKzoxMDFCNzAwMDAwMDAwMDAwMjc2NTAwMDAwMDAwMDAwMDI2RTQwMDAwQ0YKKzoxMDFCODAwMDAwMDAwMDA4MjIwMDAwMTYwMDAwMDAxMEIxQzYwMDAzOEIKKzoxMDFCOTAwMDAwMDAwMDAwMjM0ODAwMDAwMDAwMDAxMEIxODAwMDA1OTQKKzoxMDFCQTAwMDAwMDAwMDAwMjM0ODAwMDAwMDAwMDAwQzI5ODAwMDAwMTUKKzoxMDFCQjAwMDAwMDAwMDBGMEY1MDAwMDcwMDAwMDAxODgwMDAwMDEyMDYKKzoxMDFCQzAwMDAwMDAwMDA4MjIwMDAwMTYwMDAwMDAwQzI5ODAwMDAwMjAKKzoxMDFCRDAwMDAwMDAwMDAwMzAxNDAwMDAwMDAwMDAwMDMwOTUwMDAwRkMKKzoxMDFCRTAwMDAwMDAwMDEwMDc1MDAwMDMwMDAwMDAwOTBCMTYwMEZGNjIKKzoxMDFCRjAwMDAwMDAwMDA5MEQxQTAwRkYwMDAwMDAwRjMxMTYwMDA4NTgKKzoxMDFDMDAwMDAwMDAwMDAwMzE2MjM0MDAwMDAwMDAwM0YxNjIzMDAwODcKKzoxMDFDMTAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDNTEwMDAwQjgKKzoxMDFDMjAwMDAwMDAwMDA5MkNEMTAwN0YwMDAwMDAwODJDRDkwMDAwMjIKKzoxMDFDMzAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMDBDQUUKKzoxMDFDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwMTUKKzoxMDFDNTAwMDAwMDAwMDEwMDVDMjAwMDUwMDAwMDAwODBGODAwMDA3MEEKKzoxMDFDNjAwMDAwMDAwMDAwMzMwMDAwMDAwMDAwMDAxMDAwMUYwMDAwMTIKKzoxMDFDNzAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAxODgwMDBGRTUwMkYKKzoxMDFDODAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwRjBGNTAwMDA3QjUKKzoxMDFDOTAwMDAwMDAwMDEwQjFDNjAwMzAwMDAwMDAwRjQ3NDIwMDA4RUQKKzoxMDFDQTAwMDAwMDAwMDA5MDcwRTAwMEYwMDAwMDAwODA3MEUwMDA4RTIKKzoxMDFDQjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxQTYKKzoxMDFDQzAwMDAwMDAwMDA4MDkwMDAwMDEwMDAwMDAwNzA5MTIxQzAwQzQKKzoxMDFDRDAwMDAwMDAwMDAzQ0JDQTkyMDAwMDAwMDAwMDBCOTdBMjAwOTYKKzoxMDFDRTAwMDAwMDAwMDA3NDIxNzFDMDAwMDAwMDAwMDBCMDQwMDAwNjkKKzoxMDFDRjAwMDAwMDAwMDBGMEE4NDAwMDMwMDAwMDAwMDBBOTU5QzAwMDkKKzoxMDFEMDAwMDAwMDAwMDAwNEEwMDlBMDAwMDAwMDAwODgyMTIwMDAxNTIKKzoxMDFEMTAwMDAwMDAwMDAxMEMxNzA4MDAwMDAwMDAwMDBDOTc4QzAwNjgKKzoxMDFEMjAwMDAwMDAwMDAwMDIxODAwMDAwMDAwMDAwODBEMDBGRkZGODYKKzoxMDFEMzAwMDAwMDAwMDA4MEY4MDAwMDYwMDAwMDAwQzI5MDAwMDAwRDEKKzoxMDFENDAwMDAwMDAwMDEwMDZDMjAwMDQwMDAwMDAwQzI5NTIwMDAyMkUKKzoxMDFENTAwMDAwMDAwMDEwMjY0MjAwMDIwMDAwMDAwQzI5NTIwMDAzN0YKKzoxMDFENjAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAxMDAwMUYwMDAwMTkKKzoxMDFENzAwMDAwMDAwMDBDNkJENzAwMDEwMDAwMDAxMEIxOTczMjBEN0QKKzoxMDFEODAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTEwODAwRDUKKzoxMDFEOTAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAwQzI5ODAwMDAwOTgKKzoxMDFEQTAwMDAwMDAwMDAwMDIxODAwMDAwMDAwMDAxMDIwNTMwMDAwOTYKKzoxMDFEQjAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAwMDIyQzUzNjAwN0MKKzoxMDFEQzAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxOTUKKzoxMDFERDAwMDAwMDAwMDA4MEY4MDAwMDYwMDAwMDAxODgwMDBGRkYyREQKKzoxMDFERTAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTEwODAwNzUKKzoxMDFERjAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAxMEIxQzgwMDBCNTkKKzoxMDFFMDAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwOUEKKzoxMDFFMTAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAwQzI5NTIwMDAzQjEKKzoxMDFFMjAwMDAwMDAwMDEwMDZDMjAwMDIwMDAwMDAwQzI5NTIwMDAyNEYKKzoxMDFFMzAwMDAwMDAwMDAwMjJDNThDMDAwMDAwMDAwMDI3NjUwMDAwQTMKKzoxMDFFNDAwMDAwMDAwMDAwMjZFNDAwMDAwMDAwMDAwMDIzNDgwMDAwMUQKKzoxMDFFNTAwMDAwMDAwMDA4MjIwMDAwMTcwMDAwMDAwQzI5ODAwMDAwOEMKKzoxMDFFNjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCRDcwMDAxRjQKKzowODFFNzAwMDAwMDAwMDE4ODAwMEZFMTFDMworOjAwMDAwMDAxRkYKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKKyAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgKiBhY2NvbXBhbnlpbmcgaXQuCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDJ4LWUxLTQuOC41My4wLmZ3LmloZXggYi9maXJtd2FyZS9ibngyeC1lMS00LjguNTMuMC5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWVkYjFlLi4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDJ4LWUxLTQuOC41My4wLmZ3LmloZXgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDM2NCArMCwwIEBACi06MTAwMDAwMDAwMDAwMjg2MDAwMDAwMDYwMDAwMDA2MzAwMDAwMjhDOEUyCi06MTAwMDEwMDAwMDAwMTYwODAwMDAyRjAwMDAwMDAwOTQwMDAwNDUxMEFBCi06MTAwMDIwMDAwMDAwNzNDODAwMDA0NUE4MDAwMDAwQzQwMDAwQjk3OEIzCi06MTAwMDMwMDAwMDAwQTQ2ODAwMDBCQTQwMDAwMDAwNzQwMDAxNUVCMDM3Ci06MTAwMDQwMDAwMDAwNTU5MDAwMDE1RjI4MDAwMDAwQjgwMDAxQjRDMDE2Ci06MTAwMDUwMDAwMDAwRDFGODAwMDFCNTgwMDAwMDAwMDQwMDAyODc4MDk0Ci06MTAwMDYwMDAwMjA0MDA0ODAwMDAwMDBGMDIwNDAwNTQwMDAwMDA0NTk0Ci06MTAwMDcwMDAwMjA0MDA1ODAwMDAwMDg0MDIwNDAwNUMwMDAwMDAwNjM2Ci06MTAwMDgwMDAwMjA0MDA3MDAwMDAwMDA0MDIwNDAwNzgwMDAwMDAwMDc4Ci06MTAwMDkwMDAwMjA0MDA3QzEyMTcwMDAwMDIwNDAwODAyMjE3MDAwMEY2Ci06MTAwMEEwMDAwMjA0MDA4NDMyMTcwMDAwMDYwNDAwODgwMDAwMDAwNUU2Ci06MTAwMEIwMDAwMjA0MDA5QzEyMTUwMDAwMDIwNDAwQTAyMjE1MDAwMDlBCi06MTAwMEMwMDAwMjA0MDBBNDMyMTUwMDAwMDYwNDAwQTgwMDAwMDAwNDg5Ci06MTAwMEQwMDAwMjA0MDBCODAyMTAwMDAwMDIwNDAwQkMwMDEwMDAwMDdFCi06MTAwMEUwMDAwMjA0MDBDMDEwMTAwMDAwMDIwNDAwQzQyMDEwMDAwMDMwCi06MTAwMEYwMDAwMjA0MDBDODMwMTAwMDAwMDYwNDAwQ0MwMDAwMDAwNDE4Ci06MTAwMTAwMDAwMjA0MDBEQzAwMTAwMDAwMDIwNDAwRTAxMjE0MDAwMEYxCi06MTAwMTEwMDAwMjA0MDBFNDIyMTQwMDAwMDIwNDAwRTgzMjE0MDAwMDhCCi06MTAwMTIwMDAwNjA0MDBFQzAwMDAwMDA0MDEwNDAxMjQwMDAwMDAwMEFCCi06MTAwMTMwMDAwMTA0MDEyODAwMDAwMDAwMDEwNDAxMkMwMDAwMDAwMDVGCi06MTAwMTQwMDAwMTA0MDEzMDAwMDAwMDAwMDIwNDAwMDQwMDAwMDBGRjcwCi06MTAwMTUwMDAwMjA0MDAwODAwMDAwMEZGMDIwNDAwMEMwMDAwMDBGRjgxCi06MTAwMTYwMDAwMjA0MDAxMDAwMDAwMEZGMDIwNDAwMTQwMDAwMDBGRjYxCi06MTAwMTcwMDAwMjA0MDAxODAwMDAwMEZGMDIwNDAwMUMwMDAwMDBGRjQxCi06MTAwMTgwMDAwMjA0MDAyMDAwMDAwMEZGMDIwNDAwMjQwMDAwMDAzRUUyCi06MTAwMTkwMDAwMjA0MDAyODAwMDAwMDAwMDIwNDAwMkMwMDAwMDAzRkMwCi06MTAwMUEwMDAwMjA0MDAzMDAwMDAwMDNGMDIwNDAwMzQwMDAwMDAzRjYxCi06MTAwMUIwMDAwMjA0MDAzODAwMDAwMDAwMDIwNDAwM0MwMDAwMDAzRjgwCi06MTAwMUMwMDAwMjA0MDA0MDAwMDAwMDNGMDIwNDAwNDQwMDAwMDAzRjIxCi06MTAwMUQwMDAwMjA0MjAwODAwMDAwNDExMDIwNDIwMEMwMDAwMDQwMEE2Ci06MTAwMUUwMDAwMjA0MjAxMDAwMDAwNDA0MDIwNDIwMTQwMDAwMDQxOTdBCi06MTAwMUYwMDAwMjA0MjAxQzAwMDBGRkZGMDIwNDIwMjAwMDAwRkZGRjdCCi06MTAwMjAwMDAwMjA0MjAyNDAwMDBGRkZGMDIwNDIwMjgwMDAwRkZGRjVBCi06MTAwMjEwMDAwNjA0MjAzODAwMDAwMDAyMDIwNDIwNDAwMDAwMDAzNEUwCi06MTAwMjIwMDAwMjA0MjA0NDAwMDAwMDM1MDYwNDIwNDgwMDAwMDA3QzQxCi06MTAwMjMwMDAwMjA0MjIzODA3RkZGRkZGMDIwNDIyM0MwMDAwMDAzRkI3Ci06MTAwMjQwMDAwMjA0MjI0MDA3RkZGRkZGMDIwNDIyNDQwMDAwMDAwRkM3Ci06MTAwMjUwMDAwMTA0MjI0ODAwMDAwMDAwMDEwNDIyNEMwMDAwMDAwMEJDCi06MTAwMjYwMDAwMTA0MjI1MDAwMDAwMDAwMDEwNDIyNTQwMDAwMDAwMDlDCi06MTAwMjcwMDAwMTA0MjI1ODAwMDAwMDAwMDEwNDIyNUMwMDAwMDAwMDdDCi06MTAwMjgwMDAwMTA0MjI2MDAwMDAwMDAwMDEwNDIyNjQwMDAwMDAwMDVDCi06MTAwMjkwMDAwMTA0MjI2ODAwMDAwMDAwMDEwNDIyNkMwMDAwMDAwMDNDCi06MTAwMkEwMDAwMTA0MjI3MDAwMDAwMDAwMDEwNDIyNzQwMDAwMDAwMDFDCi06MTAwMkIwMDAwMTA0MjI3ODAwMDAwMDAwMDEwNDIyN0MwMDAwMDAwMEZDCi06MTAwMkMwMDAwMjA0MjRCQzAwMDAwMDAxMEMwNDIwMDAwMDAwMDNFODJDCi06MTAwMkQwMDAwQTA0MjAwMDAwMDAwMDAxMEIwNDIwMDAwMDAwMDAwQUI2Ci06MTAwMkUwMDAwMjA1MDA0NDAwMDAwMDIwMDIwNTAwNDgwMDAwMDAzMjIyCi06MTAwMkYwMDAwMjA1MDA5MDAyMTUwMDIwMDIwNTAwOTQwMjE1MDAyMDVFCi06MTAwMzAwMDAwMjA1MDA5ODAwMDAwMDMwMDIwNTAwOUMwODEwMDAwMDYzCi06MTAwMzEwMDAwMjA1MDBBMDAwMDAwMDMzMDIwNTAwQTQwMDAwMDAzMDI4Ci06MTAwMzIwMDAwMjA1MDBBODAwMDAwMDMxMDIwNTAwQUMwMDAwMDAwMjM4Ci06MTAwMzMwMDAwMjA1MDBCMDAwMDAwMDA1MDIwNTAwQjQwMDAwMDAwNjQwCi06MTAwMzQwMDAwMjA1MDBCODAwMDAwMDAyMDIwNTAwQkMwMDAwMDAwMjI3Ci06MTAwMzUwMDAwMjA1MDBDMDAwMDAwMDAwMDIwNTAwQzQwMDAwMDAwNTA2Ci06MTAwMzYwMDAwMjA1MDBDODAwMDAwMDAyMDIwNTAwQ0MwMDAwMDAwMkU3Ci06MTAwMzcwMDAwMjA1MDBEMDAwMDAwMDAyMDIwNTAwRDQwMDAwMDAwMUM4Ci06MTAwMzgwMDAwMjA1MDExNDAwMDAwMDAxMDIwNTAxMUMwMDAwMDAwMTJCCi06MTAwMzkwMDAwMjA1MDEyMDAwMDAwMDAyMDIwNTAyMDQwMDAwMDAwMTI1Ci06MTAwM0EwMDAwMjA1MDIwQzAwMDAwMDQwMDIwNTAyMTAwMDAwMDA0MDlGCi06MTAwM0IwMDAwMjA1MDIxQzAwMDAwMDIwMDIwNTAyMjAwMDAwMDAxM0JDCi06MTAwM0MwMDAwMjA1MDIyNDAwMDAwMDIwMDYwNTAyNDAwMDAwMDAwQTg5Ci06MTAwM0QwMDAwNDA1MDI4MDAwMjAwMDAwMDIwNTAwNTAwMDAwMDAwNzE0Ci06MTAwM0UwMDAwMjA1MDA1NDAwMDAwMDA3MDIwNTAwNTgwMDAwMDAwODQ0Ci06MTAwM0YwMDAwMjA1MDA1QzAwMDAwMDA4MDYwNTAwNjAwMDAwMDAwNDIzCi06MTAwNDAwMDAwMjA1MDBEODAwMDAwMDA2MDIwNTAwRTAwMDAwMDAwRDEzCi06MTAwNDEwMDAwMjA1MDBFNDAwMDAwMDJEMDIwNTAwRTgwMDAwMDAwN0NFCi06MTAwNDIwMDAwMjA1MDBFQzAwMDAwMDI3MDIwNTAwRjAwMDAwMDAwN0I0Ci06MTAwNDMwMDAwMjA1MDBGNDAwMDAwMDI3MDIwNTAwRjgwMDAwMDAwNzk0Ci06MTAwNDQwMDAwMjA1MDBGQzAwMDAwMDI3MDIwNTAwMDQwMDAwMDAwMTc2Ci06MTAwNDUwMDAwMjA1MDAwODAwMDAwMDAxMDIwNTAwMEMwMDAwMDAwMTc4Ci06MTAwNDYwMDAwMjA1MDAxMDAwMDAwMDAxMDIwNTAwMTQwMDAwMDAwMTU4Ci06MTAwNDcwMDAwMjA1MDAxODAwMDAwMDAxMDIwNTAwMUMwMDAwMDAwMTM4Ci06MTAwNDgwMDAwMjA1MDAyMDAwMDAwMDAxMDIwNTAwMjQwMDAwMDAwMTE4Ci06MTAwNDkwMDAwMjA1MDAyODAwMDAwMDAxMDIwNTAwMkMwMDAwMDAwMUY4Ci06MTAwNEEwMDAwMjA1MDAzMDAwMDAwMDAxMDIwNTAwMzQwMDAwMDAwMUQ4Ci06MTAwNEIwMDAwMjA1MDAzODAwMDAwMDAxMDIwNTAwM0MwMDAwMDAwMUI4Ci06MTAwNEMwMDAwMjA1MDA0MDAwMDAwMDAxMDQwNjEwMDAwMjAwMDAyMEE4Ci06MTAwNEQwMDAwMjA2MDBEQzAwMDAwMDAxMDEwNjAwRDgwMDAwMDAwMDU4Ci06MTAwNEUwMDAwNDA2MDIwMDAwMDMwMjIwMDIwNjAwREMwMDAwMDAwMEY3Ci06MTAwNEYwMDAwMjA2MDA2ODAwMDAwMEI4MDIwNjAwNzgwMDAwMDExNDNGCi06MTAwNTAwMDAwMTA2MDBCODAwMDAwMDAwMDEwNjAwQzgwMDAwMDAwMDVECi06MTAwNTEwMDAwMjA2MDA2QzAwMDAwMEI4MDIwNjAwN0MwMDAwMDExNDE2Ci06MTAwNTIwMDAwMTA2MDBCQzAwMDAwMDAwMDEwNjAwQ0MwMDAwMDAwMDM1Ci06MTAwNTMwMDAwNzE4MDQwMDAwOTMwMDAwMDgxODA3NjAwMDE0MDIyMzQ1Ci06MTAwNTQwMDAwNzFDMDAwMDMyNEYwMDAwMDcxQzgwMDAzMzI1MEM5NDZDCi06MTAwNTUwMDAwNzFEMDAwMDBFNEQxOTVFMDgxRDFFMDA1QzQwMDIyNTlGCi06MTAwNTYwMDAwMTE4MDAwMDAwMDAwMDAwMDExODAwMDQwMDAwMDAwMDU1Ci06MTAwNTcwMDAwMTE4MDAwODAwMDAwMDAwMDExODAwMEMwMDAwMDAwMDM1Ci06MTAwNTgwMDAwMTE4MDAxMDAwMDAwMDAwMDExODAwMTQwMDAwMDAwMDE1Ci06MTAwNTkwMDAwMjE4MDAyMDAwMDAwMDAxMDIxODAwMjQwMDAwMDAwMkUwCi06MTAwNUEwMDAwMjE4MDAyODAwMDAwMDAzMDIxODAwMkMwMDAwMDAwMEMwCi06MTAwNUIwMDAwMjE4MDAzMDAwMDAwMDA0MDIxODAwMzQwMDAwMDAwMTlFCi06MTAwNUMwMDAwMjE4MDAzODAwMDAwMDAwMDIxODAwM0MwMDAwMDAwMTgyCi06MTAwNUQwMDAwMjE4MDA0MDAwMDAwMDA0MDIxODAwNDQwMDAwMDAwMDVGCi06MTAwNUUwMDAwMjE4MDA0ODAwMDAwMDAxMDIxODAwNEMwMDAwMDAwMzNGCi06MTAwNUYwMDAwMjE4MDA1MDAwMDAwMDAwMDIxODAwNTQwMDAwMDAwMTIyCi06MTAwNjAwMDAwMjE4MDA1ODAwMDAwMDA0MDIxODAwNUMwMDAwMDAwMEZFCi06MTAwNjEwMDAwMjE4MDA2MDAwMDAwMDAxMDIxODAwNjQwMDAwMDAwM0RFCi06MTAwNjIwMDAwMjE4MDA2ODAwMDAwMDAwMDIxODAwNkMwMDAwMDAwMUMxCi06MTAwNjMwMDAwMjE4MDA3MDAwMDAwMDA0MDIxODAwNzQwMDAwMDAwMDlFCi06MTAwNjQwMDAwMjE4MDA3ODAwMDAwMDA0MDIxODAwN0MwMDAwMDAwMzdCCi06MTAwNjUwMDAwNjE4MDA4MDAwMDAwMDAyMDIxODAwQTQwMDAwM0ZGRkZFCi06MTAwNjYwMDAwMjE4MDBBODAwMDAwM0ZGMDIxODAyMjQwMDAwMDAwMDg2Ci06MTAwNjcwMDAwMjE4MDIzNDAwMDAwMDAwMDIxODAyNEMwMDAwMDAwMEMyCi06MTAwNjgwMDAwMjE4MDJFNDAwMDAwMEZGMDYxODEwMDAwMDAwMDQwMDM5Ci06MTAwNjkwMDAwMjFCOEJDMDAwMDAwMDAxMDIxQjgwMDAwMDAwMDAzNDIwCi06MTAwNkEwMDAwMjFCODA0MDAwMDAwMDE4MDIxQjgwODAwMDAwMDAwQzJDCi06MTAwNkIwMDAwMjFCODBDMDAwMDAwMDIwMEMxQjgzMDAwMDA3QTEyMDRCCi06MTAwNkMwMDAwQTFCODMwMDAwMDAwMTM4MEIxQjgzMDAwMDAwMTM4ODA1Ci06MTAwNkQwMDAwMjFCODNDMDAwMDAwMUY0MDYxQTIwMDAwMDAwMDBCMkQzCi06MTAwNkUwMDAwNjFBMjNDODAwMDAwMEMxMDQxQTI2Q0MwMDAxMDIyNzA0Ci06MTAwNkYwMDAwNjFBMTAyMDAwMDAwMEM4MDYxQTEwMDAwMDAwMDAwMkIwCi06MTAwNzAwMDAwNjFBMUMxODAwMDAwMDA0MDYxQTFDMTAwMDAwMDAwMjQzCi06MTAwNzEwMDAwNjFBMDgwMDAwMDAwMDAyMDYxQTA4MDgwMDAwMDAwMjdECi06MTAwNzIwMDAwNjFBMDgxMDAwMDAwMDA0MDQxQTFGQjAwMDA0MDIyODcyCi06MTAwNzMwMDAwNDFBNENCMDAwMDgwMjJDMDYxQTIyQzgwMDAwMDAyMDNGCi06MTAwNzQwMDAwNjFBNDAwMDAwMDAwMTZDMDIxQTRCNjAwMDAwMDAwMDE1Ci06MTAwNzUwMDAwNjFBMTQwMDAwMDAwMDBBMDYxQTE0NTAwMDAwMDAwNkQxCi06MTAwNzYwMDAwNjFBMTUwMDAwMDAwMDAyMDQxQTE1MDgwMDA1MDIzNERDCi06MTAwNzcwMDAwNjFBMTUxQzAwMDAwMDA3MDYxQTE1NzAwMDAwMDAxMjZBCi06MTAwNzgwMDAwNjFBMDlDMDAwMDAwMDRDMDYxQTA4MDAwMDAwMDAwMjBBCi06MTAwNzkwMDAwNjFBMDgyMDAwMDAwMDBFMDQxQTFGQjAwMDAyMDIzOUQ5Ci06MTAwN0EwMDAwNjFBMjkwODAwMDAwMDAyMDYxQTIzNDgwMDAwMDAyMDRCCi06MTAwN0IwMDAwNjFBNDVCMDAwMDAwMTZDMDIxQTRCNjQwMDAwMDAwMEVDCi06MTAwN0MwMDAwNjFBMTQyODAwMDAwMDBBMDYxQTE0NjgwMDAwMDAwNjIxCi06MTAwN0QwMDAwNjFBMTUzODAwMDAwMDAyMDQxQTE1NDAwMDA1MDIzQkY1Ci06MTAwN0UwMDAwNjFBMTU1NDAwMDAwMDA3MDYxQTE1QjgwMDAwMDAxMjdBCi06MTAwN0YwMDAwNjFBMEFGMDAwMDAwMDRDMDYxQTA4MDgwMDAwMDAwMjYxCi06MTAwODAwMDAwNjFBMDg1ODAwMDAwMDBFMDQxQTFGQjgwMDAyMDI0MDIxCi06MTAwODEwMDAwNjFBMjkxMDAwMDAwMDAyMDIwMEEyODAwMDAwMDAwMTU4Ci06MTAwODIwMDAwMjAwQTI5NDA3MUQyOTExMDIwMEEyOTgwMDAwMDAwMEY2Ci06MTAwODMwMDAwMjAwQTI5QzAwOUMwNDI0MDIwMEEyQTAwMDAwMDAwMDcwCi06MTAwODQwMDAwMjAwQTJBNDAwMDAwMjA5MDIwMEE0RkNGRjAwMDAwMEI0Ci06MTAwODUwMDAwMjAxMDBCNDAwMDAwMDAxMDIwMTAwQjgwMDAwMDAwMTI0Ci06MTAwODYwMDAwMjAxMDBEQzAwMDAwMDAxMDIwMTAxMDAwMDAwMDAwMUEzCi06MTAwODcwMDAwMjAxMDEwNDAwMDAwMDAxMDIwMTAwN0MwMDMwMDAwMEMwCi06MTAwODgwMDAwMjAxMDA4NDAwMDAwMDI4MDIwMTAwOEMwMDAwMDAwMDJBCi06MTAwODkwMDAwMjAxMDEzMDAwMDAwMDA0MDIwMTAyNUMwMDAwMDAwMUJFCi06MTAwOEEwMDAwMjAxMDMyODAwMDAwMDAwMDIwMTA1NTQwMDAwMDAzMDhFCi06MTAwOEIwMDAwMjAxMDBDNDAwMDAwMDAxMDIwMTAwQ0MwMDAwMDAwMUEwCi06MTAwOEMwMDAwMjAxMDBGODAwMDAwMDAxMDIwMTAwRjAwMDAwMDAwMTM4Ci06MTAwOEQwMDAwMjAxMDA4MDAwMzAwMDAwMDIwMTAwODgwMDAwMDAyOEIyCi06MTAwOEUwMDAwMjAxMDA5MDAwMDAwMDAwMDIwMTAxMzQwMDAwMDAwNDM5Ci06MTAwOEYwMDAwMjAxMDJEQzAwMDAwMDAxMDIwMTAzMkMwMDAwMDAwMEU0Ci06MTAwOTAwMDAwMjAxMDU2NDAwMDAwMDMwMDIwMTAwQzgwMDAwMDAwMTdGCi06MTAwOTEwMDAwMjAxMDBEMDAwMDAwMDAxMDIwMTAwRkMwMDAwMDAwMTAzCi06MTAwOTIwMDAwMjAxMDBGNDAwMDAwMDAxMDIwQzEwMDAwMDAwMDAyMDkxCi06MTAwOTMwMDAwMjBDMjAwODAwMDAwQTExMDIwQzIwMEMwMDAwMEEwMDIyCi06MTAwOTQwMDAwMjBDMjAxMDAwMDAwQTA0MDIwQzIwMUMwMDAwRkZGRjEzCi06MTAwOTUwMDAwMjBDMjAyMDAwMDBGRkZGMDIwQzIwMjQwMDAwRkZGRkZCCi06MTAwOTYwMDAwMjBDMjAyODAwMDBGRkZGMDIwQzIwMzgwMDAwMDBDNjA3Ci06MTAwOTcwMDAwMjBDMjAzQzAwMDAwMDAwMDIwQzIwNDAwMDAwMDAzNDZCCi06MTAwOTgwMDAwMjBDMjA0NDAwMDAwMDM1MDYwQzIwNDgwMDAwMDAxQzJBCi06MTAwOTkwMDAwMjBDMjBCODAwMDAwMDAxMDYwQzIwQkMwMDAwMDA1RjIzCi06MTAwOUEwMDAwMjBDMjIzODA3RkZGRkZGMDIwQzIyM0MwMDAwMDAzRjMwCi06MTAwOUIwMDAwMjBDMjI0MDA3RkZGRkZGMDIwQzIyNDQwMDAwMDAwRjQwCi06MTAwOUMwMDAwMTBDMjI0ODAwMDAwMDAwMDEwQzIyNEMwMDAwMDAwMDM1Ci06MTAwOUQwMDAwMTBDMjI1MDAwMDAwMDAwMDEwQzIyNTQwMDAwMDAwMDE1Ci06MTAwOUUwMDAwMTBDMjI1ODAwMDAwMDAwMDEwQzIyNUMwMDAwMDAwMEY1Ci06MTAwOUYwMDAwMTBDMjI2MDAwMDAwMDAwMDEwQzIyNjQwMDAwMDAwMEQ1Ci06MTAwQTAwMDAwMTBDMjI2ODAwMDAwMDAwMDEwQzIyNkMwMDAwMDAwMEI0Ci06MTAwQTEwMDAwMTBDMjI3MDAwMDAwMDAwMDEwQzIyNzQwMDAwMDAwMDk0Ci06MTAwQTIwMDAwMTBDMjI3ODAwMDAwMDAwMDEwQzIyN0MwMDAwMDAwMDc0Ci06MTAwQTMwMDAwMjBDMjRCQzAwMDAwMDAxMEMwQzIwMDAwMDAwMDNFOEE0Ci06MTAwQTQwMDAwQTBDMjAwMDAwMDAwMDAxMEIwQzIwMDAwMDAwMDAwQTJFCi06MTAwQTUwMDAwMjBDNDAwODAwMDAwQTExMDIwQzQwMEMwMDAwMEEwMEMxCi06MTAwQTYwMDAwMjBDNDAxMDAwMDAwQTA0MDIwQzQwMTQwMDAwMEEyMThECi06MTAwQTcwMDAwMjBDNDAxQzAwMDBGRkZGMDIwQzQwMjAwMDAwRkZGRkEyCi06MTAwQTgwMDAwMjBDNDAyNDAwMDBGRkZGMDIwQzQwMjgwMDAwRkZGRjgyCi06MTAwQTkwMDAwMjBDNDAzODAwMDAwMDQ2MDIwQzQwM0MwMDAwMDAwNUZCCi06MTAwQUEwMDAwMjBDNDA0MDAwMDAwMDM0MDIwQzQwNDQwMDAwMDAzNUJECi06MTAwQUIwMDAwNjBDNDA0ODAwMDAwMDVDMDIwQzQxQjgwMDAwMDAwMTM4Ci06MTAwQUMwMDAwNjBDNDFCQzAwMDAwMDFGMDIwQzQyMzgwN0ZGRkZGRjZDCi06MTAwQUQwMDAwMjBDNDIzQzAwMDAwMDNGMDIwQzQyNDAwN0ZGRkZGRkI3Ci06MTAwQUUwMDAwMjBDNDI0NDAwMDAwMDBGMDEwQzQyNDgwMDAwMDAwMENDCi06MTAwQUYwMDAwMTBDNDI0QzAwMDAwMDAwMDEwQzQyNTAwMDAwMDAwMEJDCi06MTAwQjAwMDAwMTBDNDI1NDAwMDAwMDAwMDEwQzQyNTgwMDAwMDAwMDlCCi06MTAwQjEwMDAwMTBDNDI1QzAwMDAwMDAwMDEwQzQyNjAwMDAwMDAwMDdCCi06MTAwQjIwMDAwMTBDNDI2NDAwMDAwMDAwMDEwQzQyNjgwMDAwMDAwMDVCCi06MTAwQjMwMDAwMTBDNDI2QzAwMDAwMDAwMDEwQzQyNzAwMDAwMDAwMDNCCi06MTAwQjQwMDAwMTBDNDI3NDAwMDAwMDAwMDEwQzQyNzgwMDAwMDAwMDFCCi06MTAwQjUwMDAwMTBDNDI3QzAwMDAwMDAwMDEwQzQyODAwMDAwMDAwMEZCCi06MTAwQjYwMDAwMjBDNDRDMDAwMDAwMDAxMEMwQzQwMDAwMDAwMDNFODJGCi06MTAwQjcwMDAwQTBDNDAwMDAwMDAwMDAxMEIwQzQwMDAwMDAwMDAwQUJECi06MTAwQjgwMDAwMjBEMDA0NDAwMDAwMDMyMDIwRDAwOEMwMjE1MDAyMDBFCi06MTAwQjkwMDAwMjBEMDA5MDAyMTUwMDIwMDIwRDAwOTQwODEwMDAwMEM0Ci06MTAwQkEwMDAwMjBEMDA5ODAwMDAwMDMzMDIwRDAwOUMwMDAwMDAwMkJFCi06MTAwQkIwMDAwMjBEMDBBMDAwMDAwMDAwMDIwRDAwQTQwMDAwMDAwNUNFCi06MTAwQkMwMDAwMjBEMDBBODAwMDAwMDA1MDYwRDAwQUMwMDAwMDAwMkE4Ci06MTAwQkQwMDAwMjBEMDBCNDAwMDAwMDAyMDIwRDAwQjgwMDAwMDAwMzg2Ci06MTAwQkUwMDAwMjBEMDBCQzAwMDAwMDAyMDIwRDAwQzAwMDAwMDAwMTY4Ci06MTAwQkYwMDAwMjBEMDBDODAwMDAwMDAyMDIwRDAwQ0MwMDAwMDAwMjNGCi06MTAwQzAwMDAwMjBEMDEwODAwMDAwMDAxMDIwRDAxNUMwMDAwMDAwMTVFCi06MTAwQzEwMDAwMjBEMDE2NDAwMDAwMDAxMDIwRDAxNjgwMDAwMDAwMkU1Ci06MTAwQzIwMDAwMjBEMDIwNDAwMDAwMDAxMDIwRDAyMEMwMDAwMDAyMDcxCi06MTAwQzMwMDAwMjBEMDIxMDAwMDAwMDQwMDIwRDAyMTQwMDAwMDA0MEVFCi06MTAwQzQwMDAwMjBEMDIyMDAwMDAwMDAzMDIwRDAyMjQwMDAwMDAxODIzCi06MTAwQzUwMDAwNjBEMDI4MDAwMDAwMDEyMDQwRDAzMDAwMDI0MDI0MjcxCi06MTAwQzYwMDAwMjBEMDA0QzAwMDAwMDAxMDIwRDAwNTAwMDAwMDAwMkM3Ci06MTAwQzcwMDAwMjBEMDA1NDAwMDAwMDA4MDIwRDAwNTgwMDAwMDAwODlBCi06MTAwQzgwMDAwNjBEMDA1QzAwMDAwMDA0MDIwRDAwQzQwMDAwMDAwNDFBCi06MTAwQzkwMDAwMjBEMDExNDAwMDAwMDA5MDIwRDAxMTgwMDAwMDAyOUQ2Ci06MTAwQ0EwMDAwMjBEMDExQzAwMDAwMDBBMDIwRDAxMjAwMDAwMDAyQUI0Ci06MTAwQ0IwMDAwMjBEMDEyNDAwMDAwMDA3MDIwRDAxMjgwMDAwMDAyNzlBCi06MTAwQ0MwMDAwMjBEMDEyQzAwMDAwMDA3MDIwRDAxMzAwMDAwMDAyNzdBCi06MTAwQ0QwMDAwMjBEMDEzNDAwMDAwMDBDMDIwRDAxMzgwMDAwMDAyQzUwCi06MTAwQ0UwMDAwMjBEMDEzQzAwMDAwMDBDMDIwRDAxNDAwMDAwMDAyQzMwCi06MTAwQ0YwMDAwMjBEMDE0NDAwMDAwMDBDMDIwRDAxNDgwMDAwMDAyQzEwCi06MTAwRDAwMDAwMjBEMDAwNDAwMDAwMDAxMDIwRDAwMDgwMDAwMDAwMUI3Ci06MTAwRDEwMDAwMjBEMDAwQzAwMDAwMDAxMDIwRDAwMTAwMDAwMDAwMTk3Ci06MTAwRDIwMDAwMjBEMDAxNDAwMDAwMDAxMDIwRDAwMTgwMDAwMDAwMTc3Ci06MTAwRDMwMDAwMjBEMDAxQzAwMDAwMDAxMDIwRDAwMjAwMDAwMDAwMTU3Ci06MTAwRDQwMDAwMjBEMDAyNDAwMDAwMDAxMDIwRDAwMjgwMDAwMDAwMTM3Ci06MTAwRDUwMDAwMjBEMDAyQzAwMDAwMDAxMDIwRDAwMzAwMDAwMDAwMTE3Ci06MTAwRDYwMDAwMjBEMDAzNDAwMDAwMDAxMDIwRDAwMzgwMDAwMDAwMUY3Ci06MTAwRDcwMDAwMjBEMDAzQzAwMDAwMDAxMDIwRTAwNEMwMDAwMDAzMjk5Ci06MTAwRDgwMDAwMjBFMDA5NDAyMTUwMDIwMDIwRTAwOTgwMjE1MDAyMEE5Ci06MTAwRDkwMDAwMjBFMDA5QzAwMDAwMDMwMDIwRTAwQTAwODEwMDAwMEFGCi06MTAwREEwMDAwMjBFMDBBNDAwMDAwMDMzMDIwRTAwQTgwMDAwMDAzMDc0Ci06MTAwREIwMDAwMjBFMDBBQzAwMDAwMDMxMDIwRTAwQjAwMDAwMDAwMjg0Ci06MTAwREMwMDAwMjBFMDBCNDAwMDAwMDA0MDIwRTAwQjgwMDAwMDAwMDkzCi06MTAwREQwMDAwMjBFMDBCQzAwMDAwMDAyMDIwRTAwQzAwMDAwMDAwMjczCi06MTAwREUwMDAwMjBFMDBDNDAwMDAwMDAwMDIwRTAwQzgwMDAwMDAwMjU1Ci06MTAwREYwMDAwMjBFMDBDQzAwMDAwMDA3MDIwRTAwRDAwMDAwMDAwMjJFCi06MTAwRTAwMDAwMjBFMDBENDAwMDAwMDAyMDIwRTAwRDgwMDAwMDAwMTEzCi06MTAwRTEwMDAwMjBFMDBFNDAwMDAwMDAxMDIwRTAxNDQwMDAwMDAwMTg3Ci06MTAwRTIwMDAwMjBFMDE0QzAwMDAwMDAxMDIwRTAxNTAwMDAwMDAwMjAxCi06MTAwRTMwMDAwMjBFMDIwNDAwMDAwMDAxMDIwRTAyMEMwMDAwMDA0MDNECi06MTAwRTQwMDAwMjBFMDIxMDAwMDAwMDQwMDIwRTAyMUMwMDAwMDAwNDBFCi06MTAwRTUwMDAwMjBFMDIyMDAwMDAwMDIwMDIwRTAyMjQwMDAwMDAwRUZDCi06MTAwRTYwMDAwMjBFMDIyODAwMDAwMDFCMDYwRTAzMDAwMDAwMDAxMjA0Ci06MTAwRTcwMDAwNDBFMDI4MDAwMUIwMjY2MDIwRTAwNTQwMDAwMDAxMEU3Ci06MTAwRTgwMDAwMjBFMDA1ODAwMDAwMDA3MDIwRTAwNUMwMDAwMDAwRjc4Ci06MTAwRTkwMDAwMjBFMDA2MDAwMDAwMDEwMDYwRTAwNjQwMDAwMDAwNDU2Ci06MTAwRUEwMDAwMjBFMDBEQzAwMDAwMDAzMDIwRTAxMTAwMDAwMDAwRjIzCi06MTAwRUIwMDAwMjBFMDExNDAwMDAwMDJGMDIwRTAxMTgwMDAwMDAwRUE3Ci06MTAwRUMwMDAwMjBFMDExQzAwMDAwMDJFMDIwRTAwMDQwMDAwMDAwMUIyCi06MTAwRUQwMDAwMjBFMDAwODAwMDAwMDAxMDIwRTAwMEMwMDAwMDAwMURDCi06MTAwRUUwMDAwMjBFMDAxMDAwMDAwMDAxMDIwRTAwMTQwMDAwMDAwMUJDCi06MTAwRUYwMDAwMjBFMDAxODAwMDAwMDAxMDIwRTAwMUMwMDAwMDAwMTlDCi06MTAwRjAwMDAwMjBFMDAyMDAwMDAwMDAxMDIwRTAwMjQwMDAwMDAwMTdCCi06MTAwRjEwMDAwMjBFMDAyODAwMDAwMDAxMDIwRTAwMkMwMDAwMDAwMTVCCi06MTAwRjIwMDAwMjBFMDAzMDAwMDAwMDAxMDIwRTAwMzQwMDAwMDAwMTNCCi06MTAwRjMwMDAwMjBFMDAzODAwMDAwMDAxMDIwRTAwM0MwMDAwMDAwMTFCCi06MTAwRjQwMDAwMjBFMDA0MDAwMDAwMDAxMDIwRTAwNDQwMDAwMDAwMUZCCi06MTAwRjUwMDAwNzMwMDQwMDAwQzMwMDAwMDgzMDA3NjgwMDEzMDI4MTU2Ci06MTAwRjYwMDAwNzM0MDAwMDMxNEMwMDAwMDczNDgwMDAzNUVGMEM1NDhBCi06MTAwRjcwMDAwNzM1MDAwMDM2MTMxOUQwMDczNTgwMDAwNzExMjc1NUIzCi06MTAwRjgwMDAwODM1OEVFMDRFMjQwMjgzMDEzMDAwMDAwMDAwMDAwMDhFCi06MTAwRjkwMDAwMTMwMDAwNDAwMDAwMDAwMDEzMDAwMDgwMDAwMDAwMEUzCi06MTAwRkEwMDAwMTMwMDAwQzAwMDAwMDAwMDEzMDAwMTAwMDAwMDAwMEMzCi06MTAwRkIwMDAwMTMwMDAxNDAwMDAwMDAwMDIzMDAwMjAwMDAwMDAwMTk5Ci06MTAwRkMwMDAwMjMwMDAyNDAwMDAwMDAyMDIzMDAwMjgwMDAwMDAwMzZDCi06MTAwRkQwMDAwMjMwMDAyQzAwMDAwMDAwMDIzMDAwMzAwMDAwMDAwNDRECi06MTAwRkUwMDAwMjMwMDAzNDAwMDAwMDAxMDIzMDAwMzgwMDAwMDAwMDMwCi06MTAwRkYwMDAwMjMwMDAzQzAwMDAwMDAxMDIzMDAwNDAwMDAwMDAwNDBDCi06MTAxMDAwMDAwMjMwMDA0NDAwMDAwMDAwMDIzMDAwNDgwMDAwMDAwMUVGCi06MTAxMDEwMDAwMjMwMDA0QzAwMDAwMDAzMDIzMDAwNTAwMDAwMDAwMENECi06MTAxMDIwMDAwMjMwMDA1NDAwMDAwMDAxMDIzMDAwNTgwMDAwMDAwNEFCCi06MTAxMDMwMDAwMjMwMDA1QzAwMDAwMDAwMDIzMDAwNjAwMDAwMDAwMThGCi06MTAxMDQwMDAwMjMwMDA2NDAwMDAwMDAzMDIzMDAwNjgwMDAwMDAwMDZECi06MTAxMDUwMDAwMjMwMDA2QzAwMDAwMDAxMDIzMDAwNzAwMDAwMDAwNDRCCi06MTAxMDYwMDAwMjMwMDA3NDAwMDAwMDAwMDIzMDAwNzgwMDAwMDAwNDJDCi06MTAxMDcwMDAwMjMwMDA3QzAwMDAwMDAzMDYzMDAwODAwMDAwMDAwMjA3Ci06MTAxMDgwMDAwMjMwMDBBNDAwMDAzRkZGMDIzMDAwQTgwMDAwMDNGRjcwCi06MTAxMDkwMDAwMjMwMDIyNDAwMDAwMDAwMDIzMDAyMzQwMDAwMDAwMDkwCi06MTAxMEEwMDAwMjMwMDI0QzAwMDAwMDAwMDIzMDAyRTQwMDAwRkZGRkFBCi06MTAxMEIwMDAwNjMwMjAwMDAwMDAwODAwMDIzMzhCQzAwMDAwMDAwMTUxCi06MTAxMEMwMDAwMjMzODAwMDAwMDAwMDFBMDIzMzgwNDAwMDAwMDA0RTBFCi06MTAxMEQwMDAwMjMzODA4MDAwMDAwMDEwMDIzMzgwQzAwMDAwMDAyMDM2Ci06MTAxMEUwMDAwQzMzODMwMDAwMDdBMTIwMEEzMzgzMDAwMDAwMDEzODdECi06MTAxMEYwMDAwQjMzODMwMDAwMDAxMzg4MDIzMzgzQzAwMDAwMDFGNDI3Ci06MTAxMTAwMDAwQzMzODM4MDFEQ0Q2NTAwMEEzMzgzODAwMDA0QzRCNDkyCi06MTAxMTEwMDAwQjMzODM4MDAwNEM0QjQwMDYzMjUwMDAwMDAwMDBDMjZECi06MTAxMTIwMDAwNjMyMTAyMDAwMDAwMEM4MDYzMjEwMDAwMDAwMDAwMjQ1Ci06MTAxMTMwMDAwNjMyNDY0MDAwMDAwMDQwMDYzMjU3RjAwMDAwMDAwNDJFCi06MTAxMTQwMDAwNjMyNTdEODAwMDAwMDA1MDQzMjU3RUMwMDAxMDI4NTMyCi06MTAxMTUwMDAwNjMyMUM2MDAwMDAwMDIwMDQzMjI4MzAwMDAyMDI4NkEzCi06MTAxMTYwMDAwMjMzMDgwMDAxMDAwMDAwMDQzMzBDMDAwMDEwMDI4ODY0Ci06MTAxMTcwMDAwMjMzMDgwMDAwMDAwMDAwMDQzMzBDNDAwMDEwMDI5ODA1Ci06MTAxMTgwMDAwNjMyMTQwMDAwMDAwMEEwMDYzMjE5MDAwMDAwMDAxMDEyCi06MTAxMTkwMDAwNjMyMTk4MDAwMDAwMDMwMDYzMjQ3NDAwMDAwMDBCNERCCi06MTAxMUEwMDAwMjMyMUQ5MDAwMDAwMDAwMDYzMjFCNDAwMDAwMDAwNEM3Ci06MTAxMUIwMDAwNjMyMUI2MDAwMDAwMDIwMDYzMjUzMTgwMDAwMDA5ODIxCi06MTAxMUMwMDAwNjMyMTY4MDAwMDAwMEEwMDYzMjE5NDAwMDAwMDAxMDEwCi06MTAxMUQwMDAwNjMyMUE0MDAwMDAwMDMwMDYzMjRBMTAwMDAwMDBCNDA3Ci06MTAxMUUwMDAwMjMyMUQ5NDAwMDAwMDAwMDYzMjFCNTAwMDAwMDAwNDczCi06MTAxMUYwMDAwNjMyMUJFMDAwMDAwMDIwMDYzMjU1NzgwMDAwMDA5OEZGCi06MTAxMjAwMDAwNzIwMDQwMDAwNzEwMDAwMDgyMDA3ODAwMDEwMDJBOEQ5Ci06MTAxMjEwMDAwNzI0MDAwMDMyMjkwMDAwMDcyNDgwMDAyMzYzMEM4QjgwCi06MTAxMjIwMDAwODI0QzkzMDY1NDAwMkFBMDEyMDAwMDAwMDAwMDAwMDI3Ci06MTAxMjMwMDAwMTIwMDAwNDAwMDAwMDAwMDEyMDAwMDgwMDAwMDAwMDYwCi06MTAxMjQwMDAwMTIwMDAwQzAwMDAwMDAwMDEyMDAwMTAwMDAwMDAwMDQwCi06MTAxMjUwMDAwMTIwMDAxNDAwMDAwMDAwMDIyMDAwMjAwMDAwMDAwMTE2Ci06MTAxMjYwMDAwMjIwMDAyNDAwMDAwMDAyMDIyMDAwMjgwMDAwMDAwM0U5Ci06MTAxMjcwMDAwMjIwMDAyQzAwMDAwMDAwMDIyMDAwMzAwMDAwMDAwNENBCi06MTAxMjgwMDAwMjIwMDAzNDAwMDAwMDAxMDIyMDAwMzgwMDAwMDAwMEFECi06MTAxMjkwMDAwMjIwMDAzQzAwMDAwMDAxMDIyMDAwNDAwMDAwMDAwNDg5Ci06MTAxMkEwMDAwMjIwMDA0NDAwMDAwMDAwMDIyMDAwNDgwMDAwMDAwMTZECi06MTAxMkIwMDAwMjIwMDA0QzAwMDAwMDAzMDIyMDAwNTAwMDAwMDAwMDRCCi06MTAxMkMwMDAwMjIwMDA1NDAwMDAwMDAxMDIyMDAwNTgwMDAwMDAwNDI5Ci06MTAxMkQwMDAwMjIwMDA1QzAwMDAwMDAwMDIyMDAwNjAwMDAwMDAwMTBECi06MTAxMkUwMDAwMjIwMDA2NDAwMDAwMDAzMDIyMDAwNjgwMDAwMDAwMEVCCi06MTAxMkYwMDAwMjIwMDA2QzAwMDAwMDAxMDIyMDAwNzAwMDAwMDAwNEM5Ci06MTAxMzAwMDAwMjIwMDA3NDAwMDAwMDAwMDIyMDAwNzgwMDAwMDAwNEE5Ci06MTAxMzEwMDAwMjIwMDA3QzAwMDAwMDAzMDYyMDAwODAwMDAwMDAwMjg0Ci06MTAxMzIwMDAwMjIwMDBBNDAwMDAzRkZGMDIyMDAwQTgwMDAwMDNGRkVECi06MTAxMzMwMDAwMjIwMDIyNDAwMDAwMDAwMDIyMDAyMzQwMDAwMDAwMDBECi06MTAxMzQwMDAwMjIwMDI0QzAwMDAwMDAwMDIyMDAyRTQwMDAwRkZGRjI3Ci06MTAxMzUwMDAwNjIwMjAwMDAwMDAwODAwMDIyMzhCQzAwMDAwMDAwMUNFCi06MTAxMzYwMDAwMjIzODAwMDAwMDAwMDEwMDIyMzgwNDAwMDAwMDAxMkQxCi06MTAxMzcwMDAwMjIzODA4MDAwMDAwMDMwMDIyMzgwQzAwMDAwMDAwRUE1Ci06MTAxMzgwMDAwMjIzODNDMDAwMDAwMUY0MDYyMjUwMDAwMDAwMDA0MjQ2Ci06MTAxMzkwMDAwNjIyMTAyMDAwMDAwMEM4MDYyMjEwMDAwMDAwMDAwMkYzCi06MTAxM0EwMDAwNjIyMjAwMDAwMDAwMEMwMDYyMjMwNzAwMDAwMDA4MEVECi06MTAxM0IwMDAwNjIyNDI4MDAwMDAwMDA0MDYyMjI1QzAwMDAwMDI0MEYwCi06MTAxM0MwMDAwNDIyMkVDODAwMDgwMkFDMDIyMzA4MDAwMTNGRkZGRkUwCi06MTAxM0QwMDAwNDIzMEMwMDAwMTAwMkI0MDIyMzA4MDAwMDAwMDAwMEU3Ci06MTAxM0UwMDAwNDIzMEM0MDAwMTAwMkM0MDYyMjE0MDAwMDAwMDBBMEQ4Ci06MTAxM0YwMDAwNjIyMTkwMDAwMDAwMDEwMDYyMjE5ODAwMDAwMDAzMEFCCi06MTAxNDAwMDAwMjIyNTExODAwMDAwMDAwMDYyMjIzMDAwMDAwMDAwRUY2Ci06MTAxNDEwMDAwNjIyMzA0MDAwMDAwMDA2MDYyMjI0MTAwMDAwMDAzMEEyCi06MTAxNDIwMDAwNjIyMTY4MDAwMDAwMEEwMDYyMjE5NDAwMDAwMDAxMENECi06MTAxNDMwMDAwNjIyMUE0MDAwMDAwMDMwMDIyMjUxMUMwMDAwMDAwMDY5Ci06MTAxNDQwMDAwNjIyMjMzODAwMDAwMDBFMDYyMjMwNTgwMDAwMDAwNjU1Ci06MTAxNDUwMDAwNjIyMjREMDAwMDAwMDMwMDIxNjEwMDAwMDAwMDAyMEY4Ci06MTAxNDYwMDAwMjE3MDAwODAwMDAwMDAyMDIxNzAwMkMwMDAwMDAwMzExCi06MTAxNDcwMDAwMjE3MDAzQzAwMDAwMDA0MDIxNzAwNDQwMDAwMDAwOEFFCi06MTAxNDgwMDAwMjE3MDA0ODAwMDAwMDAyMDIxNzAwNEMwMDAwMDA5MDA0Ci06MTAxNDkwMDAwMjE3MDA1MDAwMDAwMDkwMDIxNzAwNTQwMDgwMDA5MEQ2Ci06MTAxNEEwMDAwMjE3MDA1ODA4MTQwMDAwMDIxNzAwNjAwMDAwMDA4QUFDCi06MTAxNEIwMDAwMjE3MDA2NDAwMDAwMDgwMDIxNzAwNjgwMDAwMDA5MDFFCi06MTAxNEMwMDAwMjE3MDA2QzAwMDAwMDgwMDIxNzAwNzAwMDAwMDAwNjg4Ci06MTAxNEQwMDAwMjE3MDA3ODAwMDAwN0QwMDIxNzAwN0MwMDAwMDc2QzlDCi06MTAxNEUwMDAwMjE3MDAzODAwN0MxMDA0MDIxNzAwMDQwMDAwMDAwRkVGCi06MTAxNEYwMDAwNjE2NDAyNDAwMDAwMDAyMDIxNjQwNzAwMDAwMDAxQzg2Ci06MTAxNTAwMDAwMjE2NDIwODAwMDAwMDAxMDIxNjQyMTAwMDAwMDAwMTBECi06MTAxNTEwMDAwMjE2NDIyMDAwMDAwMDAxMDIxNjQyMjgwMDAwMDAwMUNECi06MTAxNTIwMDAwMjE2NDIzMDAwMDAwMDAxMDIxNjQyMzgwMDAwMDAwMTlECi06MTAxNTMwMDAwMjE2NDI2MDAwMDAwMDAxMEMxNjQwMUMwMDAzRDA5MDBGCi06MTAxNTQwMDAwQTE2NDAxQzAwMDAwMDlDMEIxNjQwMUMwMDAwMDlDNDM5Ci06MTAxNTUwMDAwMjE2NDAzMDAwMDAwMDA4MDIxNjQwMzQwMDAwMDAwQzYzCi06MTAxNTYwMDAwMjE2NDAzODAwMDAwMDEwMDIxNjQwNDQwMDAwMDAyMDFGCi06MTAxNTcwMDAwMjE2NDAwMDAwMDAwMDAxMDIxNjQwRDgwMDAwMDAwMUUxCi06MTAxNTgwMDAwMjE2NDAwODAwMDAwMDAxMDIxNjQwMEMwMDAwMDAwMTk1Ci06MTAxNTkwMDAwMjE2NDAxMDAwMDAwMDAxMDIxNjQyNDAwMDAwMDAwMDQ4Ci06MTAxNUEwMDAwMjE2NDI0ODAwMDAwMDAwMDYxNjQyNzAwMDAwMDAwMkM5Ci06MTAxNUIwMDAwMjE2NDI1MDAwMDAwMDAwMDIxNjQyNTgwMDAwMDAwMENGCi06MTAxNUMwMDAwNjE2NDI4MDAwMDAwMDAyMDIxNjYwMDgwMDAwMDYxNEExCi06MTAxNUQwMDAwMjE2NjAwQzAwMDAwNjAwMDIxNjYwMTAwMDAwMDYwNEVGCi06MTAxNUUwMDAwMjE2NjAxQzAwMDBGRkZGMDIxNjYwMjAwMDAwRkZGRkQzCi06MTAxNUYwMDAwMjE2NjAyNDAwMDBGRkZGMDIxNjYwMjgwMDAwRkZGRkIzCi06MTAxNjAwMDAwMjE2NjAzODAwMDAwMDIwMDIxNjYwM0MwMDAwMDAyMDM2Ci06MTAxNjEwMDAwMjE2NjA0MDAwMDAwMDM0MDIxNjYwNDQwMDAwMDAzNUVECi06MTAxNjIwMDAwMjE2NjA0ODAwMDAwMDIzMDIxNjYwNEMwMDAwMDAyNEVGCi06MTAxNjMwMDAwMjE2NjA1MDAwMDAwMDI1MDIxNjYwNTQwMDAwMDAyNkNCCi06MTAxNjQwMDAwMjE2NjA1ODAwMDAwMDI3MDIxNjYwNUMwMDAwMDAyOUE2Ci06MTAxNjUwMDAwMjE2NjA2MDAwMDAwMDJBMDIxNjYwNjQwMDAwMDAyQjgxCi06MTAxNjYwMDAwMjE2NjA2ODAwMDAwMDJDMDIxNjYwNkMwMDAwMDAyRDVECi06MTAxNjcwMDAwNjE2NjA3MDAwMDAwMDUyMDIxNjYxQjgwMDAwMDAwMUZBCi06MTAxNjgwMDAwNjE2NjFCQzAwMDAwMDFGMDIxNjYyMzgwN0ZGRkZGRjRDCi06MTAxNjkwMDAwMjE2NjIzQzAwMDAwMDNGMDIxNjYyNDAwN0ZGRkZGRjk3Ci06MTAxNkEwMDAwMjE2NjI0NDAwMDAwMDBGMDExNjYyNDgwMDAwMDAwMEFDCi06MTAxNkIwMDAwMTE2NjI0QzAwMDAwMDAwMDExNjYyNTAwMDAwMDAwMDlDCi06MTAxNkMwMDAwMTE2NjI1NDAwMDAwMDAwMDExNjYyNTgwMDAwMDAwMDdDCi06MTAxNkQwMDAwMTE2NjI1QzAwMDAwMDAwMDExNjYyNjAwMDAwMDAwMDVDCi06MTAxNkUwMDAwMTE2NjI2NDAwMDAwMDAwMDExNjYyNjgwMDAwMDAwMDNDCi06MTAxNkYwMDAwMTE2NjI2QzAwMDAwMDAwMDExNjYyNzAwMDAwMDAwMDFDCi06MTAxNzAwMDAwMTE2NjI3NDAwMDAwMDAwMDExNjYyNzgwMDAwMDAwMEZCCi06MTAxNzEwMDAwMTE2NjI3QzAwMDAwMDAwMDIxNjY0QkMwMDAwMDAwMTlCCi06MTAxNzIwMDAwQzE2NjAwMDAwMDAwM0U4MEExNjYwMDAwMDAwMDAwMUNCCi06MTAxNzMwMDAwQjE2NjAwMDAwMDAwMDBBMDIxNjgwNDAwMDAwMDAwNjQwCi06MTAxNzQwMDAwMjE2ODA0NDAwMDAwMDA1MDIxNjgwNDgwMDAwMDAwQUNFCi06MTAxNzUwMDAwMjE2ODA0QzAwMDAwMDA1MDIxNjgwNTQwMDAwMDAwMkIyCi06MTAxNzYwMDAwMjE2ODBDQzAwMDAwMDA0MDIxNjgwRDAwMDAwMDAwNEE1Ci06MTAxNzcwMDAwMjE2ODBENDAwMDAwMDA0MDIxNjgwRDgwMDAwMDAwNDg1Ci06MTAxNzgwMDAwMjE2ODBEQzAwMDAwMDA0MDIxNjgwRTAwMDAwMDAwNDY1Ci06MTAxNzkwMDAwMjE2ODBFNDAwMDAwMDA0MDIxNjgwRTgwMDAwMDAwNDQ1Ci06MTAxN0EwMDAwMjE2ODgwNDAwMDAwMDA0MDIxNjgwMzAwMDAwMDA3QzRECi06MTAxN0IwMDAwMjE2ODAzNDAwMDAwMDNEMDIxNjgwMzgwMDAwMDAzRjExCi06MTAxN0MwMDAwMjE2ODAzQzAwMDAwMDlDMDIxNjgwRjAwMDAwMDAwNzFBCi06MTAxN0QwMDAwNjE2ODBGNDAwMDAwMDA1MDIxNjg4MEMwMTAxMDEwMUM0Ci06MTAxN0UwMDAwMjE2ODEwODAwMDAwMDAwMDIxNjgxMEMwMDAwMDAwNEFGCi06MTAxN0YwMDAwMjE2ODExMDAwMDAwMDA0MDIxNjgxMTQwMDAwMDAwMjhECi06MTAxODAwMDAwMjE2ODgxMDA4MDEyMDA0MDIxNjgxMTgwMDAwMDAwNTQ1Ci06MTAxODEwMDAwMjE2ODExQzAwMDAwMDA1MDIxNjgxMjAwMDAwMDAwNTUwCi06MTAxODIwMDAwMjE2ODEyNDAwMDAwMDA1MDIxNjg4MkMyMDA4MTAwMUYxCi06MTAxODMwMDAwMjE2ODEyODAwMDAwMDA4MDIxNjgxMkMwMDAwMDAwNjE0Ci06MTAxODQwMDAwMjE2ODEzMDAwMDAwMDA3MDIxNjgxMzQwMDAwMDAwMEZCCi06MTAxODUwMDAwMjE2ODgzMDAxMDEwMTIwMDYxNjgxMzgwMDAwMDAwNEJDCi06MTAxODYwMDAwMjE2ODgzNDAxMDEwMTAxMDYxNjgxNDgwMDAwMDAwNEI3Ci06MTAxODcwMDAwMjE2ODgzODAxMDEwMTAxMDYxNjgxNTgwMDAwMDAwNDkzCi06MTAxODgwMDAwMjE2ODgzQzAxMDEwMTAxMDYxNjgxNjgwMDAwMDAwMzcwCi06MTAxODkwMDAwMjE2ODE3NDAwMDAwMDAxMDIxNjg4NDAwMTAxMDEwMTU2Ci06MTAxOEEwMDAwMjE2ODE3ODAwMDAwMDAxMDIxNjgxN0MwMDAwMDAwMTEwCi06MTAxOEIwMDAwMjE2ODE4MDAwMDAwMDAxMDIxNjgxODQwMDAwMDAwMUYwCi06MTAxOEMwMDAwMjE2ODg0NDAxMDEwMTAxMDIxNjgxODgwMDAwMDAwMTBFCi06MTAxOEQwMDAwMjE2ODE4QzAwMDAwMDA0MDIxNjgxOTAwMDAwMDAwNEIyCi06MTAxOEUwMDAwMjE2ODE5NDAwMDAwMDAyMDIxNjg4NDgwODAxMjAwNEI0Ci06MTAxOEYwMDAwMjE2ODE5ODAwMDAwMDA1MDIxNjgxOUMwMDAwMDAwNTc4Ci06MTAxOTAwMDAwMjE2ODFBMDAwMDAwMDA1MDIxNjgxQTQwMDAwMDAwNTU3Ci06MTAxOTEwMDAwMjE2ODgxNDIwMDgxMDAxMDIxNjgxQTgwMDAwMDAwODkxCi06MTAxOTIwMDAwMjE2ODFBQzAwMDAwMDA2MDIxNjgxQjAwMDAwMDAwNzFDCi06MTAxOTMwMDAwMjE2ODFCNDAwMDAwMDAxMDIxNjg4MTgwMTAxMDEyMDdFCi06MTAxOTQwMDAwMjE2ODFCODAwMDAwMDAxMDIxNjgxQkMwMDAwMDAwMUVGCi06MTAxOTUwMDAwMjE2ODFDMDAwMDAwMDAxMDIxNjgxQzQwMDAwMDAwMUNGCi06MTAxOTYwMDAwMjE2ODgxQzAxMDEwMTAxMDIxNjgxQzgwMDAwMDAwMTU1Ci06MTAxOTcwMDAwMjE2ODFDQzAwMDAwMDAxMDIxNjgxRDAwMDAwMDAwMTk3Ci06MTAxOTgwMDAwMjE2ODFENDAwMDAwMDAxMDIxNjg4MjAwMTAxMDEwMTI1Ci06MTAxOTkwMDAwMjE2ODFEODAwMDAwMDAxMDIxNjgxREMwMDAwMDAwMTVGCi06MTAxOUEwMDAwMjE2ODFFMDAwMDAwMDAxMDIxNjgxRTQwMDAwMDAwMTNGCi06MTAxOUIwMDAwMjE2ODgyNDAxMDEwMTAxMDIxNjgxRTgwMDAwMDAwMURECi06MTAxOUMwMDAwMjE2ODFFQzAwMDAwMDAxMDIxNjgxRjAwMDAwMDAwMTA3Ci06MTAxOUQwMDAwMjE2ODgyODAxMDEwMTAxMDIxNjgyNDBGRkZGMDAzRjI0Ci06MTAxOUUwMDAwNjE2ODI0NDAwMDAwMDAyMDIxNjgyNENGRkZGMDAzRkYwCi06MTAxOUYwMDAwMjE2ODI1MDAwMDAwMTAwMDIxNjgyNTQwMDAwMDEwMDBECi06MTAxQTAwMDAwNjE2ODI1ODAwMDAwMDAyMDIxNjgyNjAwMDAwMDBDMDI0Ci06MTAxQTEwMDAwMjE2ODI2NDAwMDAwMEMwMDIxNjgyNjgwMDAwMUUwMEU4Ci06MTAxQTIwMDAwMjE2ODI2QzAwMDAxRTAwMDIxNjgyNzAwMDAwNDAwMDQ4Ci06MTAxQTMwMDAwMjE2ODI3NDAwMDA0MDAwMDIxNjgyNzgwMDAwODAwMEM2Ci06MTAxQTQwMDAwMjE2ODI3QzAwMDA4MDAwMDIxNjgyODAwMDAwMjAwMEM2Ci06MTAxQTUwMDAwMjE2ODI4NDAwMDAyMDAwMDYxNjgyODgwMDAwMDAwNzFCCi06MTAxQTYwMDAwMjE2ODJBNDAwMDAwMDAxMDYxNjgyQTgwMDAwMDAwQUU3Ci06MTAxQTcwMDAwMjE2ODFGNDAwMDAwQzA4MDIxNjgxRjgwMDAwMDA0MEY0Ci06MTAxQTgwMDAwMjE2ODFGQzAwMDAwMTAwMDIxNjgyMDAwMDAwMDAyMDA2Ci06MTAxQTkwMDAwMjE2ODIwNDAwMDAwMDE3MDIxNjgyMDgwMDAwMDA4MDZGCi06MTAxQUEwMDAwMjE2ODIwQzAwMDAwMjAwMDIxNjgyMTAwMDAwMDAwMEU0Ci06MTAxQUIwMDAwMjE2ODIxOEZGRkYwMUZGMDIxNjgyMTRGRkZGMDFGRkNBCi06MTAxQUMwMDAwMjE2ODIzQzAwMDAwMDEzMDIxNjgwOTAwMDAwMDEzRkM1Ci06MTAxQUQwMDAwMjE2ODA2MDAwMDAwMTQwMDIxNjgwNjQwMDAwMDE0MDkwCi06MTAxQUUwMDAwNjE2ODA2ODAwMDAwMDAyMDIxNjgwNzAwMDAwMDBDMDI4Ci06MTAxQUYwMDAwNjE2ODA3NDAwMDAwMDA3MDIxNjgwOUMwMDAwMDA0ODUzCi06MTAxQjAwMDAwMjE2ODBBMDAwMDAwMDQ4MDYxNjgwQTQwMDAwMDAwMjEzCi06MTAxQjEwMDAwMjE2ODBBQzAwMDAwMDQ4MDYxNjgwQjAwMDAwMDAwN0U2Ci06MTAxQjIwMDAwMjE2ODIzODAwMDA4MDAwMDIxNjgyMzQwMDAwMjVFNDhDCi06MTAxQjMwMDAwMjE2ODA5NDAwMDA3RkZGMDIxNjgyMjAwMDAwMDAwNzNBCi06MTAxQjQwMDAwMjE2ODIxQzAwMDAwMDA3MDIxNjgyMjgwMDAwMDAwMDE2Ci06MTAxQjUwMDAwMjE2ODIyNEZGRkZGRkZGMDIxNjgyMzAwMDAwMDAwMDAxCi06MTAxQjYwMDAwMjE2ODIyQ0ZGRkZGRkZGMDIxNjgwRUMwMDAwMDBGRjMwCi06MTAxQjcwMDAwMjE0MDAwMDAwMDAwMDAxMDIxNDAwMEMwMDAwMDAwMTJCCi06MTAxQjgwMDAwMjE0MDA0MDAwMDAwMDAxMDIxNDAwNDQwMDAwN0ZGRjI2Ci06MTAxQjkwMDAwMjE0MDAwQzAwMDAwMDAwMDIxNDAwMDAwMDAwMDAwMDBECi06MTAxQkEwMDAwMjE0MDA2QzAwMDAwMDAwMDIxNDAwMDQwMDAwMDAwMTk4Ci06MTAxQkIwMDAwMjE0MDAzMDAwMDAwMDAxMDIxNDAwMDQwMDAwMDAwMEM0Ci06MTAxQkMwMDAwMjE0MDA1QzAwMDAwMDAwMDIxNDAwMDgwMDAwMDAwMTg0Ci06MTAxQkQwMDAwMjE0MDAzNDAwMDAwMDAxMDIxNDAwMDgwMDAwMDAwMDlDCi06MTAxQkUwMDAwMjE0MDA2MDAwMDAwMDAwMDIwMjAwNTgwMDAwMDAzMkYxCi06MTAxQkYwMDAwMjAyMDBBMDAzMTUwMDIwMDIwMjAwQTQwMzE1MDAyMDI5Ci06MTAxQzAwMDAwMjAyMDBBODAxMDAwMDMwMDIwMjAwQUMwODEwMDAwMDJGCi06MTAxQzEwMDAwMjAyMDBCMDAwMDAwMDMzMDIwMjAwQjQwMDAwMDAzMEY1Ci06MTAxQzIwMDAwMjAyMDBCODAwMDAwMDMxMDIwMjAwQkMwMDAwMDAwMzA0Ci06MTAxQzMwMDAwMjAyMDBDMDAwMDAwMDA2MDIwMjAwQzQwMDAwMDAwMzBGCi06MTAxQzQwMDAwMjAyMDBDODAwMDAwMDAzMDIwMjAwQ0MwMDAwMDAwMkYzCi06MTAxQzUwMDAwMjAyMDBEMDAwMDAwMDAwMDIwMjAwRDQwMDAwMDAwMkQ2Ci06MTAxQzYwMDAwMjAyMDBEQzAwMDAwMDAwMDIwMjAwRTAwMDAwMDAwNkFBCi06MTAxQzcwMDAwMjAyMDBFNDAwMDAwMDA0MDIwMjAwRTgwMDAwMDAwMjhBCi06MTAxQzgwMDAwMjAyMDBFQzAwMDAwMDAyMDIwMjAwRjAwMDAwMDAwMTZECi06MTAxQzkwMDAwMjAyMDBGQzAwMDAwMDA2MDIwMjAxMjAwMDAwMDAwMDE5Ci06MTAxQ0EwMDAwMjAyMDEzNDAwMDAwMDAyMDIwMjAxQjAwMDAwMDAwMTQzCi06MTAxQ0IwMDAwMjAyMDIwQzAwMDAwMDAxMDIwMjAyMTQwMDAwMDAwMUY2Ci06MTAxQ0MwMDAwMjAyMDIxODAwMDAwMDAyMDIwMjA0MDQwMDAwMDAwMUU3Ci06MTAxQ0QwMDAwMjAyMDQwQzAwMDAwMDQwMDIwMjA0MTAwMDAwMDA0MDU4Ci06MTAxQ0UwMDAwMjAyMDQxQzAwMDAwMDA0MDIwMjA0MjAwMDAwMDAyMDg0Ci06MTAxQ0YwMDAwMjAyMDQyNDAwMDAwMDAyMDIwMjA0MjgwMDAwMDAxRjY3Ci06MTAxRDAwMDAwNjAyMDUwMDAwMDAwMDEyMDQwMjA0ODAwMDFGMDJENDM1Ci06MTAxRDEwMDAwMjAyMDA2MDAwMDAwMDBGMDIwMjAwNjQwMDAwMDAwN0UxCi06MTAxRDIwMDAwMjAyMDA2ODAwMDAwMDBCMDIwMjAwNkMwMDAwMDAwRUJFCi06MTAxRDMwMDAwNjAyMDA3MDAwMDAwMDA0MDIwMjAwRjQwMDAwMDAwNDJCCi06MTAxRDQwMDAwMjAyMDAwNDAwMDAwMDAxMDIwMjAwMDgwMDAwMDAwMTdECi06MTAxRDUwMDAwMjAyMDAwQzAwMDAwMDAxMDIwMjAwMTAwMDAwMDAwMTVECi06MTAxRDYwMDAwMjAyMDAxNDAwMDAwMDAxMDIwMjAwMTgwMDAwMDAwMTNECi06MTAxRDcwMDAwMjAyMDAxQzAwMDAwMDAxMDIwMjAwMjAwMDAwMDAwMTFECi06MTAxRDgwMDAwMjAyMDAyNDAwMDAwMDAxMDIwMjAwMjgwMDAwMDAwMUZECi06MTAxRDkwMDAwMjAyMDAyQzAwMDAwMDAxMDIwMjAwMzAwMDAwMDAwMURECi06MTAxREEwMDAwMjAyMDAzNDAwMDAwMDAxMDIwMjAwMzgwMDAwMDAwMUJECi06MTAxREIwMDAwMjAyMDAzQzAwMDAwMDAxMDIwMjAwNDAwMDAwMDAwMTlECi06MTAxREMwMDAwMjAyMDA0NDAwMDAwMDAxMDIwMjAwNDgwMDAwMDAwMTdECi06MTAxREQwMDAwMjAyMDA0QzAwMDAwMDAxMDIwMjAwNTAwMDAwMDAwMTVECi06MTAxREUwMDAwMjAyMDEwODAwMDAwMEM4MDIwMjAxMTgwMDAwMDAwMkZGCi06MTAxREYwMDAwMjAyMDFDNDAwMDAwMDAwMDIwMjAxQ0MwMDAwMDAwMDQ5Ci06MTAxRTAwMDAwMjAyMDFENDAwMDAwMDAyMDIwMjAxREMwMDAwMDAwMjE0Ci06MTAxRTEwMDAwMjAyMDFFNDAwMDAwMEZGMDIwMjAxRUMwMDAwMDBGRkVBCi06MTAxRTIwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMkI2Ci06MTAxRTMwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDAwCi06MTAxRTQwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMkNDCi06MTAxRTUwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRkEyCi06MTAxRTYwMDAwNzI4MDQwMDAwQjUwMDAwMDgyODA3NjgwMDEzMDJGM0UzCi06MTAxRTcwMDAwNzJDMDAwMDMzNjYwMDAwMDcyQzgwMDAzOEIzMENEQTEyCi06MTAxRTgwMDAwNzJEMDAwMDNCQjExQjA3MDcyRDgwMDAyQTI2MjlGNEVGCi06MTAxRTkwMDAwODJERDZDMDQ1MjgwMkY1MDEyODAwMDAwMDAwMDAwMEVBCi06MTAxRUEwMDAwMTI4MDAwNDAwMDAwMDAwMDEyODAwMDgwMDAwMDAwMEQ0Ci06MTAxRUIwMDAwMTI4MDAwQzAwMDAwMDAwMDEyODAwMTAwMDAwMDAwMEI0Ci06MTAxRUMwMDAwMTI4MDAxNDAwMDAwMDAwMDIyODAwMjAwMDAwMDAwMThBCi06MTAxRUQwMDAwMjI4MDAyNDAwMDAwMDAyMDIyODAwMjgwMDAwMDAwMzVECi06MTAxRUUwMDAwMjI4MDAyQzAwMDAwMDAwMDIyODAwMzAwMDAwMDAwNDNFCi06MTAxRUYwMDAwMjI4MDAzNDAwMDAwMDAxMDIyODAwMzgwMDAwMDAwMDIxCi06MTAxRjAwMDAwMjI4MDAzQzAwMDAwMDAxMDIyODAwNDAwMDAwMDAwNEZDCi06MTAxRjEwMDAwMjI4MDA0NDAwMDAwMDAwMDIyODAwNDgwMDAwMDAwMUUwCi06MTAxRjIwMDAwMjI4MDA0QzAwMDAwMDAzMDIyODAwNTAwMDAwMDAwMEJFCi06MTAxRjMwMDAwMjI4MDA1NDAwMDAwMDAxMDIyODAwNTgwMDAwMDAwNDlDCi06MTAxRjQwMDAwMjI4MDA1QzAwMDAwMDAwMDIyODAwNjAwMDAwMDAwMTgwCi06MTAxRjUwMDAwMjI4MDA2NDAwMDAwMDAzMDIyODAwNjgwMDAwMDAwMDVFCi06MTAxRjYwMDAwMjI4MDA2QzAwMDAwMDAxMDIyODAwNzAwMDAwMDAwNDNDCi06MTAxRjcwMDAwMjI4MDA3NDAwMDAwMDAwMDIyODAwNzgwMDAwMDAwNDFECi06MTAxRjgwMDAwMjI4MDA3QzAwMDAwMDAzMDYyODAwODAwMDAwMDAwMkY4Ci06MTAxRjkwMDAwMjI4MDBBNDAwMDAzRkZGMDIyODAwQTgwMDAwMDNGRjYxCi06MTAxRkEwMDAwMjI4MDIyNDAwMDAwMDAwMDIyODAyMzQwMDAwMDAwMDgxCi06MTAxRkIwMDAwMjI4MDI0QzAwMDAwMDAwMDIyODAyRTQwMDAwRkZGRjlCCi06MTAxRkMwMDAwNjI4MjAwMDAwMDAwODAwMDIyQjhCQzAwMDAwMDAwMTQyCi06MTAxRkQwMDAwMjJCODAwMDAwMDAwMDAwMDIyQjgwNDAwMDAwMDAxODRGCi06MTAxRkUwMDAwMjJCODA4MDAwMDAwMDBDMDIyQjgwQzAwMDAwMDA2NkU1Ci06MTAxRkYwMDAwQzJCODMwMDAwMDdBMTIwMEEyQjgzMDAwMDAwMDEzODZFCi06MTAyMDAwMDAwQjJCODMwMDAwMDAxMzg4MDIyQjgzQzAwMDAwMDFGNDE3Ci06MTAyMDEwMDAwQzJCODM0MDAwMDAwMUY0MEEyQjgzNDAwMDAwMDAwMEQ5Ci06MTAyMDIwMDAwQjJCODM0MDAwMDAwMDA1MEEyQjgzODAwMDA0QzRCNEZFCi06MTAyMDMwMDAwQzJCODM4MDFEQ0Q2NTAwMEIyQjgzODAwMDRDNEI0MDA3Ci06MTAyMDQwMDAwNjJBM0Q2MDAwMDAwMDA0MDQyQTNENzAwMDAyMDJGN0U5Ci06MTAyMDUwMDAwNjJBMzAwMDAwMDAwMDQ4MDYyQTEwMjAwMDAwMDBDOEIwCi06MTAyMDYwMDAwNjJBMTAwMDAwMDAwMDAyMDYyQTMxMjgwMDAwMDA4RTE3Ci06MTAyMDcwMDAwMjJBMzM2ODAwMDAwMDAwMDQyQTMzNzAwMDAyMDJGOUNCCi06MTAyMDgwMDAwNDJBM0I5MDAwMDQwMkZCMDQyQTNFMjAwMDAyMDJGRkM3Ci06MTAyMDkwMDAwMjJBMTUxODAwMDAwMDAxMDIyQTE4MzAwMDAwMDAwMDcyCi06MTAyMEEwMDAwMjJBMTgzODAwMDAwMDAwMDQyQTE4MjAwMDAyMDMwMTQ4Ci06MTAyMEIwMDAwNjJBNEFDMDAwMDAwMDAyMDYyQTRCMDAwMDAwMDAwNDY1Ci06MTAyMEMwMDAwNDJBMUY0ODAwMDIwMzAzMDIyQjA4MDAwMDAwMDAwMDNFCi06MTAyMEQwMDAwNDJCMEMwMDAwMTAwMzA1MDIyQjA4MDAwMTAwMDAwMDc3Ci06MTAyMEUwMDAwNDJCMEM0MDAwMDgwMzE1MDIyQjA4MDAwMjAwMDAwMDFFCi06MTAyMEYwMDAwNDJCMEM2MDAwMDgwMzFEMDYyQTNCQTAwMDAwMDAxNEZFCi06MTAyMTAwMDAwNjJBM0M0MDAwMDAwMDI0MDYyQTE0MDAwMDAwMDAwQUIxCi06MTAyMTEwMDAwNjJBMTQ1MDAwMDAwMDA2MDYyQTMzNzgwMDAwMDBGQzRFCi06MTAyMTIwMDAwMjJBM0I1ODAwMDAwMDAwMDQyQTNENzgwMDAyMDMyNUUzCi06MTAyMTMwMDAwNDJBM0Q4ODAwMTAwMzI3MDIyQTE1MDAwMDAwMDAwMDMxCi06MTAyMTQwMDAwMjJBMTUwODAwMDAwMDAxMDYyQTUwMjAwMDAwMDAwMkEzCi06MTAyMTUwMDAwNjJBNTAzMDAwMDAwMDAyMDYyQTUwMDAwMDAwMDAwMjRCCi06MTAyMTYwMDAwNjJBNTAxMDAwMDAwMDAyMDIyQTUwNDAwMDAwMDAwMDIxCi06MTAyMTcwMDAwNjJBNTA0ODAwMDAwMDBFMDIyQTUwQjgwMDAwMDAwMTU0Ci06MTAyMTgwMDAwNDJBNEFDODAwMDIwMzM3MDYyQTRCMTAwMDAwMDA0MjA2Ci06MTAyMTkwMDAwNjJBNEQyMDAwMDAwMDA0MDYyQTNCRjAwMDAwMDAxNDJGCi06MTAyMUEwMDAwNjJBM0NEMDAwMDAwMDI0MDYyQTE0MjgwMDAwMDAwQTU5Ci06MTAyMUIwMDAwNjJBMTQ2ODAwMDAwMDA2MDYyQTM3NjgwMDAwMDBGQ0EyCi06MTAyMUMwMDAwMjJBM0I1QzAwMDAwMDAwMDQyQTNEODAwMDAyMDMzOTIzCi06MTAyMUQwMDAwNDJBM0RDODAwMTAwMzNCMDIyQTE1MDQwMDAwMDAwMDM5Ci06MTAyMUUwMDAwMjJBMTUwQzAwMDAwMDAxMDYyQTUwMjgwMDAwMDAwMkY3Ci06MTAyMUYwMDAwNjJBNTAzODAwMDAwMDAyMDYyQTUwMDgwMDAwMDAwMjlCCi06MTAyMjAwMDAwNjJBNTAxODAwMDAwMDAyMDIyQTUwNDQwMDAwMDAwMDc0Ci06MTAyMjEwMDAwNjJBNTA4MDAwMDAwMDBFMDIyQTUwQkMwMDAwMDAwMTc3Ci06MTAyMjIwMDAwNDJBNEFEMDAwMDIwMzRCMDYyQTRDMTgwMDAwMDA0MjQwCi06MTAyMjMwMDAwNjJBNEQzMDAwMDAwMDA0MDIxMDEwMDgwMDAwMDAwMUMyCi06MTAyMjQwMDAwMjEwMTAwMDAwMDNEMDAwMDIxMDEwMDQwMDAwMDAzRDM2Ci06MTAyMjUwMDAwOTEwMTgwMDAyMDAwMzREMDkxMDExMDAwMDIwMDU0RDVGCi06MTAyMjYwMDAwNjEwMTE4MDAwMDAwMDAyMDkxMDExODgwMDA2MDU2RDlCCi06MTAyMjcwMDAwNjEwMTFBMDAwMDAwMDE4MDYxMDI0MDAwMDAwMDBFMDY1Ci06MTAyMjgwMDAwMjEwMjAxQzAwMDAwMDAwMDIxMDIwMjAwMDAwMDAwMUFECi06MTAyMjkwMDAwMjEwMjBDMDAwMDAwMDAxMDIxMDIwMDQwMDAwMDAwMTE0Ci06MTAyMkEwMDAwMjEwMjAwODAwMDAwMDAxMDkxMDNDMDAwMDA1MDU3MzIxCi06MTAyMkIwMDAwOTEwM0MyMDAwMDUwNTc4MDkxMDM4MDAwMDA1MDU3RDRGCi06MTAyMkMwMDAwMjEwNDAyODAwMDAwMDEwMDIxMDQwNDQwMDAwM0ZGRkIwCi06MTAyMkQwMDAwMjEwNDA1ODAwMjgwMDAwMDIxMDQwODQwMDg0OTI0QUY2Ci06MTAyMkUwMDAwMjEwNDA1ODAwMDAwMDAwMDYxMDgwNjgwMDAwMDAwNDQyCi06MTAyMkYwMDAwMjEwODAwMDAwMDAxMDgwMDYxMDgwMjgwMDAwMDAwMkZDCi06MTAyMzAwMDAwMjEwODAzODAwMDAwMDEwMDIxMDgwNDAwMDAwRkZGRjIzCi06MTAyMzEwMDAwMjEwODA0NDAwMDBGRkZGMDIxMDgwNTAwMDAwMDAwMDA3Ci06MTAyMzIwMDAwMjEwODEwMDAwMDAwMDAwMDYxMDgxMjAwMDAwMDAwMjYxCi06MTAyMzMwMDAwMjEwODAwODAwMDAwMkI1MDIxMDgwMTAwMDAwMDAwMEFBCi06MTAyMzQwMDAwNjEwODIwMDAwMDAwMDRBMDIxMDgxMDgwMDAxRkZGRjExCi06MTAyMzUwMDAwNjEwODE0MDAwMDAwMDAyMDIxMDgwMDAwMDAwMUE4MDc4Ci06MTAyMzYwMDAwNjEwOTAwMDAwMDAwMDI0MDYxMDkxMjAwMDAwMDA0QTkyCi06MTAyMzcwMDAwNjEwOTM3MDAwMDAwMDRBMDYxMDk1QzAwMDAwMDA0QTQ1Ci06MTAyMzgwMDAwMjEwODAwNDAwMDAxMDgwMDYxMDgwMzAwMDAwMDAwMjVGCi06MTAyMzkwMDAwMjEwODAzQzAwMDAwMDEwMDIxMDgwNDgwMDAwRkZGRjg3Ci06MTAyM0EwMDAwMjEwODA0QzAwMDBGRkZGMDIxMDgwNTQwMDAwMDAwMDZCCi06MTAyM0IwMDAwMjEwODEwNDAwMDAwMDAwMDYxMDgxMjgwMDAwMDAwMkM1Ci06MTAyM0MwMDAwMjEwODAwQzAwMDAwMkI1MDIxMDgwMTQwMDAwMDAwMDEyCi06MTAyM0QwMDAwNjEwODQwMDAwMDAwMDRBMDIxMDgxMEMwMDAxRkZGRjdCCi06MTAyM0UwMDAwNjEwODE0ODAwMDAwMDAyMDIxMDgwMDQwMDAwMUE4MERDCi06MTAyM0YwMDAwNjEwOTA5MDAwMDAwMDI0MDYxMDkyNDgwMDAwMDA0QTQ5Ci06MTAyNDAwMDAwNjEwOTQ5ODAwMDAwMDRBMDYxMDk2RTgwMDAwMDA0QTYyCi06MTAyNDEwMDAwMjEyMDQ5MDAwRTM4MzQwMDIxMjA1MTQwMDAwM0MxMEY1Ci06MTAyNDIwMDAwMjEyMDQ5NEZGRkZGRkZGMDIxMjA0OThGRkZGRkZGRjU4Ci06MTAyNDMwMDAwMjEyMDQ5Q0ZGRkZGRkZGMDIxMjA0QTBGRkZGRkZGRjM4Ci06MTAyNDQwMDAwMjEyMDRBNEZGRkZGRkZGMDIxMjA0QThGRkZGRkZGRjE4Ci06MTAyNDUwMDAwMjEyMDRBQ0ZGRkZGRkZGMDIxMjA0QjBGRkZGRkZGRkY4Ci06MTAyNDYwMDAwMjEyMDRCOEZGRkZGRkZGMDIxMjA0QkNGRkZGRkZGRkQwCi06MTAyNDcwMDAwMjEyMDRDMEZGRkZGRkZGMDIxMjA0QzRGRkZGRkZGRkIwCi06MTAyNDgwMDAwMjEyMDRDOEZGRkZGRkZGMDIxMjA0Q0NGRkZGRkZGRjkwCi06MTAyNDkwMDAwMjEyMDREMEZGRkZGRkZGMDIxMjA0RENGRkZGRkZGRjY4Ci06MTAyNEEwMDAwMjEyMDRFMEZGRkZGRkZGMDIxMjA0RTRGRkZGRkZGRjQwCi06MTAyNEIwMDAwMjEyMDRFOEZGRkZGRkZGMDIxMjA0RUNGRkZGRkZGRjIwCi06MTAyNEMwMDAwMjEyMDRGMEZGRkZGRkZGMDIxMjA0RjRGRkZGRkZGRjAwCi06MTAyNEQwMDAwMjEyMDRGOEZGRkZGRkZGMDIxMjA0RkNGRkZGRkZGRkUwCi06MTAyNEUwMDAwMjEyMDUwMEZGRkZGRkZGMDIxMjA1MDRGRkZGRkZGRkJFCi06MTAyNEYwMDAwMjEyMDUwOEZGRkZGRkZGMDIxMjA1MENGRkZGRkZGRjlFCi06MTAyNTAwMDAwMjEyMDUxMEZGRkZGRkZGMDIxMjA0RDRGRkZGMzMzMDU5Ci06MTAyNTEwMDAwMjEyMDREOEZGRkYzMzQwMDIxMjA0QjRGMDAwMzAwMDZFCi06MTAyNTIwMDAwMjEyMDM5MDAwMDAwMDA4MDIxMjAzOUMwMDAwMDAwODQxCi06MTAyNTMwMDAwMjEyMDNBMDAwMDAwMDA4MDIxMjAzQTQwMDAwMDAwMjFGCi06MTAyNTQwMDAwMjEyMDNCQzAwMDAwMDA0MDIxMjAzQzAwMDAwMDAwNUQ4Ci06MTAyNTUwMDAwMjEyMDNDNDAwMDAwMDA0MDIxMjAzRDAwMDAwMDAwMEI1Ci06MTAyNTYwMDAwMjEyMDM2QzAwMDAwMDAxMDIxMjAzNjgwMDAwMDAzRjI5Ci06MTAyNTcwMDAwMjEyMDFCQzAwMDAwMDQwMDIxMjAxQzAwMDAwMTgwODU1Ci06MTAyNTgwMDAwMjEyMDFDNDAwMDAwODAzMDIxMjAxQzgwMDAwMDgwMzdGCi06MTAyNTkwMDAwMjEyMDFDQzAwMDAwMDQwMDIxMjAxRDAwMDAwMDAwMzMyCi06MTAyNUEwMDAwMjEyMDFENDAwMDAwODAzMDIxMjAxRDgwMDAwMDgwMzNGCi06MTAyNUIwMDAwMjEyMDFEQzAwMDAwODAzMDIxMjAxRTAwMDAxMDAwMzI2Ci06MTAyNUMwMDAwMjEyMDFFNDAwMDAwODAzMDIxMjAxRTgwMDAwMDgwM0ZGCi06MTAyNUQwMDAwMjEyMDFFQzAwMDAwMDAzMDIxMjAxRjAwMDAwMDAwM0VGCi06MTAyNUUwMDAwMjEyMDFGNDAwMDAwMDAzMDIxMjAxRjgwMDAwMDAwM0NGCi06MTAyNUYwMDAwMjEyMDFGQzAwMDAwMDAzMDIxMjAyMDAwMDAwMDAwM0FFCi06MTAyNjAwMDAwMjEyMDIwNDAwMDAwMDAzMDIxMjAyMDgwMDAwMDAwMzhDCi06MTAyNjEwMDAwMjEyMDIwQzAwMDAwMDAzMDIxMjAyMTAwMDAwMDAwMzZDCi06MTAyNjIwMDAwMjEyMDIxNDAwMDAwMDAzMDIxMjAyMTgwMDAwMDAwMzRDCi06MTAyNjMwMDAwMjEyMDIxQzAwMDAwMDAzMDIxMjAyMjAwMDAwMDAwMzJDCi06MTAyNjQwMDAwMjEyMDIyNDAwMDAwMDAzMDIxMjAyMjgwMDAwMjQwM0U4Ci06MTAyNjUwMDAwMjEyMDIyQzAwMDAwMDJGMDIxMjAyMzAwMDAwMDAwOUJBCi06MTAyNjYwMDAwMjEyMDIzNDAwMDAwMDE5MDIxMjAyMzgwMDAwMDE4NDM0Ci06MTAyNjcwMDAwMjEyMDIzQzAwMDAwMTgzMDIxMjAyNDAwMDAwMDMwNjI1Ci06MTAyNjgwMDAwMjEyMDI0NDAwMDAwMDE5MDIxMjAyNDgwMDAwMDAwNjczCi06MTAyNjkwMDAwMjEyMDI0QzAwMDAwMzA2MDIxMjAyNTAwMDAwMDMwNjYwCi06MTAyNkEwMDAwMjEyMDI1NDAwMDAwMzA2MDIxMjAyNTgwMDAwMEM4NkI3Ci06MTAyNkIwMDAwMjEyMDI1QzAwMDAwMzA2MDIxMjAyNjAwMDAwMDMwNjIwCi06MTAyNkMwMDAwMjEyMDI2NDAwMDAwMDA2MDIxMjAyNjgwMDAwMDAwNjA2Ci06MTAyNkQwMDAwMjEyMDI2QzAwMDAwMDA2MDIxMjAyNzAwMDAwMDAwNkU2Ci06MTAyNkUwMDAwMjEyMDI3NDAwMDAwMDA2MDIxMjAyNzgwMDAwMDAwNkM2Ci06MTAyNkYwMDAwMjEyMDI3QzAwMDAwMDA2MDIxMjAyODAwMDAwMDAwNkE2Ci06MTAyNzAwMDAwMjEyMDI4NDAwMDAwMDA2MDIxMjAyODgwMDAwMDAwNjg1Ci06MTAyNzEwMDAwMjEyMDI4QzAwMDAwMDA2MDIxMjAyOTAwMDAwMDAwNjY1Ci06MTAyNzIwMDAwMjEyMDI5NDAwMDAwMDA2MDIxMjAyOTgwMDAwMDAwNjQ1Ci06MTAyNzMwMDAwMjEyMDI5QzAwMDAwMDA2MDIxMjAyQTAwMDAwMDMwNjIyCi06MTAyNzQwMDAwMjEyMDJBNDAwMDAwMDEzMDIxMjAyQTgwMDAwMDAwNkY4Ci06MTAyNzUwMDAwMjEyMDJCMDAwMDAxMDA0MDIxMjAyQjQwMDAwMTAwNEMxCi06MTAyNzYwMDAwMjEyMDMyNDAwMTA2NDQwMDIxMjAzMjgwMDEwNjQ0MDg3Ci06MTAyNzcwMDAwMjEyMDFCMDAwMDAwMDAxMDYwMEEwMDAwMDAwMDAxNkQ3Ci06MTAyNzgwMDAwMjAwQTA2Q0JGNUMwMDAwMDIwMEEwNzBGRkY1MUZFRjBDCi06MTAyNzkwMDAwMjAwQTA3NDAwMDBGRkZGMDIwMEEwNzg1MDAwMDNFMEQ4Ci06MTAyN0EwMDAwMjAwQTA3QzAwMDAwMDAwMDIwMEEwODAwMDAwQTAwMDQ5Ci06MTAyN0IwMDAwNjAwQTA4NDAwMDAwMDA1MDIwMEEwOTgwRkUwMDAwMEMxCi06MTAyN0MwMDAwNjAwQTA5QzAwMDAwMDE0MDIwMEEwRUM1NTU0MDAwMDdDCi06MTAyN0QwMDAwMjAwQTBGMDU1NTU1NTU1MDIwMEEwRjQwMDAwNTU1NUQzCi06MTAyN0UwMDAwMjAwQTBGODAwMDAwMDAwMDIwMEEwRkM1NTU0MDAwMDA4Ci06MTAyN0YwMDAwMjAwQTEwMDU1NTU1NTU1MDIwMEExMDQwMDAwNTU1NTkxCi06MTAyODAwMDAwMjAwQTEwODAwMDAwMDAwMDIwMEEyMkMwMDAwMDAwMDRECi06MTAyODEwMDAwNjAwQTIzMDAwMDAwMDAzMDIwMEEwNjAwMDAwMDAwN0Q0Ci06MTAyODIwMDAwMjAwQTEwQ0JGNUMwMDAwMDIwMEExMTBGRkY1MUZFRjI5Ci06MTAyODMwMDAwMjAwQTExNDAwMDBGRkZGMDIwMEExMTg1MDAwMDNFMEY1Ci06MTAyODQwMDAwMjAwQTExQzAwMDAwMDAwMDIwMEExMjAwMDAwQTAwMDY2Ci06MTAyODUwMDAwNjAwQTEyNDAwMDAwMDA1MDIwMEExMzgwRkUwMDAwMERFCi06MTAyODYwMDAwNjAwQTEzQzAwMDAwMDE0MDIwMEExOEM1NTU0MDAwMDk5Ci06MTAyODcwMDAwMjAwQTE5MDU1NTU1NTU1MDIwMEExOTQwMDAwNTU1NUYwCi06MTAyODgwMDAwMjAwQTE5ODAwMDAwMDAwMDIwMEExOUM1NTU0MDAwMDI1Ci06MTAyODkwMDAwMjAwQTFBMDU1NTU1NTU1MDIwMEExQTQwMDAwNTU1NUIwCi06MTAyOEEwMDAwMjAwQTFBODAwMDAwMDAwMDIwMEEyM0MwMDAwMDAwMEZECi06MTAyOEIwMDAwNjAwQTI0MDAwMDAwMDAzMDIwMEEwNjQwMDAwMDAwNzIwCi06MTAyOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUwMDAwMDAwMERBCi06MTAyOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Ci06MTAyOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Ci06MTAyOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Ci06MTAyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Ci06MTAyOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Ci06MTAyOTIwMDAwMDJFMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Ci06MTAyOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Ci06MTAyOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwMDA4REFBCi06MTAyOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci06MTAyOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Ci06MTAyOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RDAwOTIwMDkyMDA5NjEwCi06MTAyOTgwMDAwMDk2MDA5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Ci06MTAyOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Ci06MTAyOUEwMDAwMDAwMDAwMDAwOUEwMERCMDBEQjAwRTkwMEU5MDBGNzBFCi06MTAyOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Ci06MTAyOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci06MTAyOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Ci06MTAyOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Ci06MTAyOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Ci06MTAyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Ci06MTAyQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Ci06MTAyQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Ci06MTAyQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTAyQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Ci06MTAyQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Ci06MTAyQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Ci06MTAyQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Ci06MTAyQTgwMDAwMEY3MDBGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCi06MTAyQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Ci06MTAyQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Ci06MTAyQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Ci06MTAyQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci06MTAyQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRTAxMDMwMTAzMDEwRUUxCi06MTAyQUUwMDAwMTBFMDExOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECi06MTAyQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Ci06MTAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Ci06MTAyQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Ci06MTAyQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Ci06MTAyQjMwMDAwMTE5MDExQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTAyQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Ci06MTAyQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTFBMDEzRTFCCi06MTAyQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Ci06MTAyQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Ci06MTAyQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDEzRTAxNjQwMDAwMDAwMEExCi06MTAyQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Ci06MTAyQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Ci06MTAyQkIwMDAwMDAwMDAwMDAxNjQwMUEzMDAwMDAwMDAwMDAwMDAwMDBDCi06MTAyQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci06MTAyQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Ci06MTAyQkUwMDAwMUEzMDFERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCi06MTAyQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTAyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMURFMDIyNEJGCi06MTAyQzEwMDAwMjI0MDIyQzAyMkMwMjM0MDAwMDAwMDAwMDAwMDAwMEZDCi06MTAyQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Ci06MTAyQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDIzNDAyNzEwMjcxMDI3OEZFCi06MTAyQzQwMDAwMjc4MDI3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Ci06MTAyQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTAyQzYwMDAwMDAwMDAwMDAyN0YwMjgwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTAyQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Ci06MTAyQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Ci06MTAyQzkwMDAwMjgwMDI5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCi06MTAyQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Ci06MTAyQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkyMDJBN0Q3Ci06MTAyQ0MwMDAwMkE3MDJBQTAyQUEwMkFEMDAwMDAwMDAwMDAwMDAwMDU0Ci06MTAyQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Ci06MTAyQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDJBRDAyREIwMDAwMDAwMDU4Ci06MTAyQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTAyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCi06MTAyRDEwMDAwMDAwMDAwMDAyREIwMzYyMDAwMDAwMDAwMDAwMDAwMDcxCi06MTAyRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCi06MTAyRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTAyRDQwMDAwMzYyMDM2OTAzNjkwMzZEMDM2RDAzNzEwMDAwMDAwMEYyCi06MTAyRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCi06MTAyRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcxMDNCMDNDCi06MTAyRDcwMDAwM0IwMDNCODAzQjgwM0MwMDAwMDAwMDAwMDAwMDAwMDY3Ci06MTAyRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCi06MTAyRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDA0MTMwNDEzMDQyNzE3Ci06MTAyREEwMDAwNDI3MDQzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Ci06MTAyREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCi06MTAyREMwMDAwMDAwMDAwMDA0M0IwNDQzMDAwMDAwMDAwMDAwMDAwMDdECi06MTAyREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCi06MTAyREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCi06MTAyREYwMDAwNDQzMDQ0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTAyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTAyRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQ5MDQ0QzE1Ci06MTAyRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCi06MTAyRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCi06MTAyRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0QzA0NTEwMDAwMDAwMERECi06MTAyRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCi06MTAyRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCi06MTAyRTcwMDAwMDAwMDAwMDA0NTEwNDUyMDQ1MjA0NjQwNDY0MDQ3NjA3Ci06MTAyRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCi06MTAyRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCi06MTAyRUEwMDAwNDc2MDRFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCi06MTAyRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi06MTAyRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUzMDRFNDMzCi06MTAyRUQwMDAwNEU0MDRGODA0RjgwNTBDMDAwMDAwMDAwMDAwMDAwMDAxCi06MTAyRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCi06MTAyRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCi06MTAyRjAwMDAwMDAxMDAwMDAwMDIwNEMwMDAwMzA5ODAwMDA0MEU0MDFDCi06MTAyRjEwMDAwMDA1MTMwMDAwMDYxN0MwMDAwNzFDODAwMDA4MjE0MEIwCi06MTAyRjIwMDAwMDA5MjYwMDAwMEEyQUMwMDAwQjJGODAwMDBDMzQ0MDQ0Ci06MTAyRjMwMDAwMDBEMzkwMDAwMEUzREMwMDAwRjQyODAwMDEwNDc0MEQ4Ci06MTAyRjQwMDAwMDExNEMwMDAwMTI1MEMwMDAxMzU1ODAwMDE0NUE0MDZDCi06MTAyRjUwMDAwMDE1NUYwMDAwMTY2M0MwMDAxNzY4ODAwMDE4NkQ0MDAwCi06MTAyRjYwMDAwMDE5NzIwMDAwMUE3NkMwMDAxQjdCODAwMDFDODA0MDk0Ci06MTAyRjcwMDAwMDFEODUwMDAwMUU4OUMwMDAxRjhFODAwMDIwOTM0MDI4Ci06MTAyRjgwMDAwMDAwMjAwMDAwMDA0MDAwMDAwMDYwMDAwMDAwODAwMDAxCi06MTAyRjkwMDAwMDAwQTAwMDAwMDBDMDAwMDAwMEUwMDAwMDAxMDAwMEYwCi06MTAyRkEwMDAwMDAxMjAwMDAwMDE0MDAwMDAwMTYwMDAwMDAxODAwMERECi06MTAyRkIwMDAwMDAxQTAwMDAwMDFDMDAwMDAwMUUwMDAwMDAyMDAwMENDCi06MTAyRkMwMDAwMDAyMjAwMDAwMDI0MDAwMDAwMjYwMDAwMDAyODAwMEI5Ci06MTAyRkQwMDAwMDAyQTAwMDAwMDJDMDAwMDAwMkUwMDAwMDAzMDAwMEE4Ci06MTAyRkUwMDAwMDAzMjAwMDAwMDM0MDAwMDAwMzYwMDAwMDAzODAwMDk1Ci06MTAyRkYwMDAwMDAzQTAwMDAwMDNDMDAwMDAwM0UwMDAwMDA0MDAwMDg0Ci06MTAzMDAwMDAwMDA0MjAwMDAwMDQ0MDAwMDAwNDYwMDAwMDA0ODAwMDcwCi06MTAzMDEwMDAwMDA0QTAwMDAwMDRDMDAwMDAwNEUwMDAwMDA1MDAwMDVGCi06MTAzMDIwMDAwMDA1MjAwMDAwMDU0MDAwMDAwNTYwMDAwMDA1ODAwMDRDCi06MTAzMDMwMDAwMDA1QTAwMDAwMDVDMDAwMDAwNUUwMDAwMDA2MDAwMDNCCi06MTAzMDQwMDAwMDA2MjAwMDAwMDY0MDAwMDAwNjYwMDAwMDA2ODAwMDI4Ci06MTAzMDUwMDAwMDA2QTAwMDAwMDZDMDAwMDAwNkUwMDAwMDA3MDAwMDE3Ci06MTAzMDYwMDAwMDA3MjAwMDAwMDc0MDAwMDAwNzYwMDAwMDA3ODAwMDA0Ci06MTAzMDcwMDAwMDA3QTAwMDAwMDdDMDAwMDAwN0UwMDAwMDA4MDAwMEYzCi06MTAzMDgwMDAwMDA4MjAwMDAwMDg0MDAwMDAwODYwMDAwMDA4ODAwMEUwCi06MTAzMDkwMDAwMDA4QTAwMDAwMDhDMDAwMDAwOEUwMDAwMDA5MDAwMENGCi06MTAzMEEwMDAwMDA5MjAwMDAwMDk0MDAwMDAwOTYwMDAwMDA5ODAwMEJDCi06MTAzMEIwMDAwMDA5QTAwMDAwMDlDMDAwMDAwOUUwMDAwMDBBMDAwMEFCCi06MTAzMEMwMDAwMDBBMjAwMDAwMEE0MDAwMDAwQTYwMDAwMDBBODAwMDk4Ci06MTAzMEQwMDAwMDBBQTAwMDAwMEFDMDAwMDAwQUUwMDAwMDBCMDAwMDg3Ci06MTAzMEUwMDAwMDBCMjAwMDAwMEI0MDAwMDAwQjYwMDAwMDBCODAwMDc0Ci06MTAzMEYwMDAwMDBCQTAwMDAwMEJDMDAwMDAwQkUwMDAwMDBDMDAwMDYzCi06MTAzMTAwMDAwMDBDMjAwMDAwMEM0MDAwMDAwQzYwMDAwMDBDODAwMDRGCi06MTAzMTEwMDAwMDBDQTAwMDAwMENDMDAwMDAwQ0UwMDAwMDBEMDAwMDNFCi06MTAzMTIwMDAwMDBEMjAwMDAwMEQ0MDAwMDAwRDYwMDAwMDBEODAwMDJCCi06MTAzMTMwMDAwMDBEQTAwMDAwMERDMDAwMDAwREUwMDAwMDBFMDAwMDFBCi06MTAzMTQwMDAwMDBFMjAwMDAwMEU0MDAwMDAwRTYwMDAwMDBFODAwMDA3Ci06MTAzMTUwMDAwMDBFQTAwMDAwMEVDMDAwMDAwRUUwMDAwMDBGMDAwMEY2Ci06MTAzMTYwMDAwMDBGMjAwMDAwMEY0MDAwMDAwRjYwMDAwMDBGODAwMEUzCi06MTAzMTcwMDAwMDBGQTAwMDAwMEZDMDAwMDAwRkUwMDAwMDEwMDAwMEQyCi06MTAzMTgwMDAwMDEwMjAwMDAwMTA0MDAwMDAxMDYwMDAwMDEwODAwMEJGCi06MTAzMTkwMDAwMDEwQTAwMDAwMTBDMDAwMDAxMEUwMDAwMDExMDAwMEFFCi06MTAzMUEwMDAwMDExMjAwMDAwMTE0MDAwMDAxMTYwMDAwMDExODAwMDlCCi06MTAzMUIwMDAwMDExQTAwMDAwMTFDMDAwMDAxMUUwMDAwMDEyMDAwMDhBCi06MTAzMUMwMDAwMDEyMjAwMDAwMTI0MDAwMDAxMjYwMDAwMDEyODAwMDc3Ci06MTAzMUQwMDAwMDEyQTAwMDAwMTJDMDAwMDAxMkUwMDAwMDEzMDAwMDY2Ci06MTAzMUUwMDAwMDEzMjAwMDAwMTM0MDAwMDAxMzYwMDAwMDEzODAwMDUzCi06MTAzMUYwMDAwMDEzQTAwMDAwMTNDMDAwMDAxM0UwMDAwMDE0MDAwMDQyCi06MTAzMjAwMDAwMDE0MjAwMDAwMTQ0MDAwMDAxNDYwMDAwMDE0ODAwMDJFCi06MTAzMjEwMDAwMDE0QTAwMDAwMTRDMDAwMDAxNEUwMDAwMDE1MDAwMDFECi06MTAzMjIwMDAwMDE1MjAwMDAwMTU0MDAwMDAxNTYwMDAwMDE1ODAwMDBBCi06MTAzMjMwMDAwMDE1QTAwMDAwMTVDMDAwMDAxNUUwMDAwMDE2MDAwMEY5Ci06MTAzMjQwMDAwMDE2MjAwMDAwMTY0MDAwMDAxNjYwMDAwMDE2ODAwMEU2Ci06MTAzMjUwMDAwMDE2QTAwMDAwMTZDMDAwMDAxNkUwMDAwMDE3MDAwMEQ1Ci06MTAzMjYwMDAwMDE3MjAwMDAwMTc0MDAwMDAxNzYwMDAwMDE3ODAwMEMyCi06MTAzMjcwMDAwMDE3QTAwMDAwMTdDMDAwMDAxN0UwMDAwMDE4MDAwMEIxCi06MTAzMjgwMDAwMDE4MjAwMDAwMTg0MDAwMDAxODYwMDAwMDE4ODAwMDlFCi06MTAzMjkwMDAwMDE4QTAwMDAwMThDMDAwMDAxOEUwMDAwMDE5MDAwMDhECi06MTAzMkEwMDAwMDE5MjAwMDAwMTk0MDAwMDAxOTYwMDAwMDE5ODAwMDdBCi06MTAzMkIwMDAwMDE5QTAwMDAwMTlDMDAwMDAxOUUwMDAwMDFBMDAwMDY5Ci06MTAzMkMwMDAwMDFBMjAwMDAwMUE0MDAwMDAxQTYwMDAwMDFBODAwMDU2Ci06MTAzMkQwMDAwMDFBQTAwMDAwMUFDMDAwMDAxQUUwMDAwMDFCMDAwMDQ1Ci06MTAzMkUwMDAwMDFCMjAwMDAwMUI0MDAwMDAxQjYwMDAwMDFCODAwMDMyCi06MTAzMkYwMDAwMDFCQTAwMDAwMUJDMDAwMDAxQkUwMDAwMDFDMDAwMDIxCi06MTAzMzAwMDAwMDFDMjAwMDAwMUM0MDAwMDAxQzYwMDAwMDFDODAwMDBECi06MTAzMzEwMDAwMDFDQTAwMDAwMUNDMDAwMDAxQ0UwMDAwMDFEMDAwMEZDCi06MTAzMzIwMDAwMDFEMjAwMDAwMUQ0MDAwMDAxRDYwMDAwMDFEODAwMEU5Ci06MTAzMzMwMDAwMDFEQTAwMDAwMURDMDAwMDAxREUwMDAwMDFFMDAwMEQ4Ci06MTAzMzQwMDAwMDFFMjAwMDAwMUU0MDAwMDAxRTYwMDAwMDFFODAwMEM1Ci06MTAzMzUwMDAwMDFFQTAwMDAwMUVDMDAwMDAxRUUwMDAwMDFGMDAwMEI0Ci06MTAzMzYwMDAwMDFGMjAwMDAwMUY0MDAwMDAxRjYwMDAwMDFGODAwMEExCi06MTAzMzcwMDAwMDFGQTAwMDAwMUZDMDAwMDAxRkUwMDAwMDIwMDAwMDkwCi06MTAzMzgwMDAwMDIwMjAwMDAwMjA0MDAwMDAyMDYwMDAwMDIwODAwMDdECi06MTAzMzkwMDAwMDIwQTAwMDAwMjBDMDAwMDAyMEUwMDAwMDIxMDAwMDZDCi06MTAzM0EwMDAwMDIxMjAwMDAwMjE0MDAwMDAyMTYwMDAwMDIxODAwMDU5Ci06MTAzM0IwMDAwMDIxQTAwMDAwMjFDMDAwMDAyMUUwMDAwMDIyMDAwMDQ4Ci06MTAzM0MwMDAwMDIyMjAwMDAwMjI0MDAwMDAyMjYwMDAwMDIyODAwMDM1Ci06MTAzM0QwMDAwMDIyQTAwMDAwMjJDMDAwMDAyMkUwMDAwMDIzMDAwMDI0Ci06MTAzM0UwMDAwMDIzMjAwMDAwMjM0MDAwMDAyMzYwMDAwMDIzODAwMDExCi06MTAzM0YwMDAwMDIzQTAwMDAwMjNDMDAwMDAyM0UwMDAwMDI0MDAwMDAwCi06MTAzNDAwMDAwMDI0MjAwMDAwMjQ0MDAwMDAyNDYwMDAwMDI0ODAwMEVDCi06MTAzNDEwMDAwMDI0QTAwMDAwMjRDMDAwMDAyNEUwMDAwMDI1MDAwMERCCi06MTAzNDIwMDAwMDI1MjAwMDAwMjU0MDAwMDAyNTYwMDAwMDI1ODAwMEM4Ci06MTAzNDMwMDAwMDI1QTAwMDAwMjVDMDAwMDAyNUUwMDAwMDI2MDAwMEI3Ci06MTAzNDQwMDAwMDI2MjAwMDAwMjY0MDAwMDAyNjYwMDAwMDI2ODAwMEE0Ci06MTAzNDUwMDAwMDI2QTAwMDAwMjZDMDAwMDAyNkUwMDAwMDI3MDAwMDkzCi06MTAzNDYwMDAwMDI3MjAwMDAwMjc0MDAwMDAyNzYwMDAwMDI3ODAwMDgwCi06MTAzNDcwMDAwMDI3QTAwMDAwMjdDMDAwMDAyN0UwMDAwMDI4MDAwMDZGCi06MTAzNDgwMDAwMDI4MjAwMDAwMjg0MDAwMDAyODYwMDAwMDI4ODAwMDVDCi06MTAzNDkwMDAwMDI4QTAwMDAwMjhDMDAwMDAyOEUwMDAwMDI5MDAwMDRCCi06MTAzNEEwMDAwMDI5MjAwMDAwMjk0MDAwMDAyOTYwMDAwMDI5ODAwMDM4Ci06MTAzNEIwMDAwMDI5QTAwMDAwMjlDMDAwMDAyOUUwMDAwMDJBMDAwMDI3Ci06MTAzNEMwMDAwMDJBMjAwMDAwMkE0MDAwMDAyQTYwMDAwMDJBODAwMDE0Ci06MTAzNEQwMDAwMDJBQTAwMDAwMkFDMDAwMDAyQUUwMDAwMDJCMDAwMDAzCi06MTAzNEUwMDAwMDJCMjAwMDAwMkI0MDAwMDAyQjYwMDAwMDJCODAwMEYwCi06MTAzNEYwMDAwMDJCQTAwMDAwMkJDMDAwMDAyQkUwMDAwMDJDMDAwMERGCi06MTAzNTAwMDAwMDJDMjAwMDAwMkM0MDAwMDAyQzYwMDAwMDJDODAwMENCCi06MTAzNTEwMDAwMDJDQTAwMDAwMkNDMDAwMDAyQ0UwMDAwMDJEMDAwMEJBCi06MTAzNTIwMDAwMDJEMjAwMDAwMkQ0MDAwMDAyRDYwMDAwMDJEODAwMEE3Ci06MTAzNTMwMDAwMDJEQTAwMDAwMkRDMDAwMDAyREUwMDAwMDJFMDAwMDk2Ci06MTAzNTQwMDAwMDJFMjAwMDAwMkU0MDAwMDAyRTYwMDAwMDJFODAwMDgzCi06MTAzNTUwMDAwMDJFQTAwMDAwMkVDMDAwMDAyRUUwMDAwMDJGMDAwMDcyCi06MTAzNTYwMDAwMDJGMjAwMDAwMkY0MDAwMDAyRjYwMDAwMDJGODAwMDVGCi06MTAzNTcwMDAwMDJGQTAwMDAwMkZDMDAwMDAyRkUwMDAwMDMwMDAwMDRFCi06MTAzNTgwMDAwMDMwMjAwMDAwMzA0MDAwMDAzMDYwMDAwMDMwODAwMDNCCi06MTAzNTkwMDAwMDMwQTAwMDAwMzBDMDAwMDAzMEUwMDAwMDMxMDAwMDJBCi06MTAzNUEwMDAwMDMxMjAwMDAwMzE0MDAwMDAzMTYwMDAwMDMxODAwMDE3Ci06MTAzNUIwMDAwMDMxQTAwMDAwMzFDMDAwMDAzMUUwMDAwMDMyMDAwMDA2Ci06MTAzNUMwMDAwMDMyMjAwMDAwMzI0MDAwMDAzMjYwMDAwMDMyODAwMEYzCi06MTAzNUQwMDAwMDMyQTAwMDAwMzJDMDAwMDAzMkUwMDAwMDMzMDAwMEUyCi06MTAzNUUwMDAwMDMzMjAwMDAwMzM0MDAwMDAzMzYwMDAwMDMzODAwMENGCi06MTAzNUYwMDAwMDMzQTAwMDAwMzNDMDAwMDAzM0UwMDAwMDM0MDAwMEJFCi06MTAzNjAwMDAwMDM0MjAwMDAwMzQ0MDAwMDAzNDYwMDAwMDM0ODAwMEFBCi06MTAzNjEwMDAwMDM0QTAwMDAwMzRDMDAwMDAzNEUwMDAwMDM1MDAwMDk5Ci06MTAzNjIwMDAwMDM1MjAwMDAwMzU0MDAwMDAzNTYwMDAwMDM1ODAwMDg2Ci06MTAzNjMwMDAwMDM1QTAwMDAwMzVDMDAwMDAzNUUwMDAwMDM2MDAwMDc1Ci06MTAzNjQwMDAwMDM2MjAwMDAwMzY0MDAwMDAzNjYwMDAwMDM2ODAwMDYyCi06MTAzNjUwMDAwMDM2QTAwMDAwMzZDMDAwMDAzNkUwMDAwMDM3MDAwMDUxCi06MTAzNjYwMDAwMDM3MjAwMDAwMzc0MDAwMDAzNzYwMDAwMDM3ODAwMDNFCi06MTAzNjcwMDAwMDM3QTAwMDAwMzdDMDAwMDAzN0UwMDAwMDM4MDAwMDJECi06MTAzNjgwMDAwMDM4MjAwMDAwMzg0MDAwMDAzODYwMDAwMDM4ODAwMDFBCi06MTAzNjkwMDAwMDM4QTAwMDAwMzhDMDAwMDAzOEUwMDAwMDM5MDAwMDA5Ci06MTAzNkEwMDAwMDM5MjAwMDAwMzk0MDAwMDAzOTYwMDAwMDM5ODAwMEY2Ci06MTAzNkIwMDAwMDM5QTAwMDAwMzlDMDAwMDAzOUUwMDAwMDNBMDAwMEU1Ci06MTAzNkMwMDAwMDNBMjAwMDAwM0E0MDAwMDAzQTYwMDAwMDNBODAwMEQyCi06MTAzNkQwMDAwMDNBQTAwMDAwM0FDMDAwMDAzQUUwMDAwMDNCMDAwMEMxCi06MTAzNkUwMDAwMDNCMjAwMDAwM0I0MDAwMDAzQjYwMDAwMDNCODAwMEFFCi06MTAzNkYwMDAwMDNCQTAwMDAwM0JDMDAwMDAzQkUwMDAwMDNDMDAwMDlECi06MTAzNzAwMDAwMDNDMjAwMDAwM0M0MDAwMDAzQzYwMDAwMDNDODAwMDg5Ci06MTAzNzEwMDAwMDNDQTAwMDAwM0NDMDAwMDAzQ0UwMDAwMDNEMDAwMDc4Ci06MTAzNzIwMDAwMDNEMjAwMDAwM0Q0MDAwMDAzRDYwMDAwMDNEODAwMDY1Ci06MTAzNzMwMDAwMDNEQTAwMDAwM0RDMDAwMDAzREUwMDAwMDNFMDAwMDU0Ci06MTAzNzQwMDAwMDNFMjAwMDAwM0U0MDAwMDAzRTYwMDAwMDNFODAwMDQxCi06MTAzNzUwMDAwMDNFQTAwMDAwM0VDMDAwMDAzRUUwMDAwMDNGMDAwMDMwCi06MTAzNzYwMDAwMDNGMjAwMDAwM0Y0MDAwMDAzRjYwMDAwMDNGODAwMDFECi06MTAzNzcwMDAwMDNGQTAwMDAwM0ZDMDAwMDAzRkUwMDAwMDNGRTAwMTJDCi06MTAzNzgwMDAwMDAwMDAwMDAwMDAwMUZGMDAwMDAyMDAwMDAwN0ZGOEMwCi06MTAzNzkwMDAwMDAwN0ZGODAwMDAwMjkyMDAwMDM1MDAwMDAwMDAwMUU4Ci06MTAzN0EwMDAwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDMwMEJFQkMyMERGCi06MTAzN0IwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjE5Ci06MTAzN0MwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA5Ci06MTAzN0QwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMEYxCi06MTAzN0UwMDBGRkZGRkZGRjAwMDAwMDAzMDBCRUJDMjBGRkZGRkZGRjQ0Ci06MTAzN0YwMDAwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkQxCi06MTAzODAwMDAwMDAwMDAwMzAwQkVCQzIwMDAwMDIwMDAwMDAwNDBDMEZCCi06MTAzODEwMDAwMDAwNjE4MDAwMDA4MjQwMDAwMEEzMDAwMDAwQzNDMERGCi06MTAzODIwMDAwMDAwRTQ4MDAwMDEwNTQwMDAwMTI2MDAwMDAxNDZDMEMwCi06MTAzODMwMDAwMDAxNjc4MDAwMDE4ODQwMDAwMUE5MDAwMDAxQzlDMEEzCi06MTAzODQwMDAwMDAxRUE4MDAwMDIwQjQwMDAwMjJDMDAwMDAyNENDMDg0Ci06MTAzODUwMDAwMDAyNkQ4MDAwMDI4RTQwMDAwMkFGMDAwMDAyQ0ZDMDY3Ci06MTAzODYwMDAwMDAyRjA4MDAwMDMxMTQwMDAwMzMyMDAwMDAzNTJDMDQ4Ci06MTAzODcwMDAwMDAzNzM4MDAwMDM5NDQwMDAwM0I1MDAwMDAzRDVDMDJCCi06MTAzODgwMDAwMDAzRjY4MDAwMDQxNzQwMDAwNDM4MDAwMDA0NThDMDBDCi06MTAzODkwMDAwMDA0Nzk4MDAwMDQ5QTQwMDAwMDgwMDAwMDAxMDM4MDQ5Ci06MTAzOEEwMDAwMDAxODcwMDAwMDIwQTgwMDAwMjhFMDAwMDAzMTE4MEUwCi06MTAzOEIwMDAwMDAzOTUwMDAwMDQxODgwMDAwNDlDMDAwMDA1MUY4MDkwCi06MTAzOEMwMDAwMDA1QTMwMDAwMDYyNjgwMDAwNkFBMDAwMDA3MkQ4MDQwCi06MTAzOEQwMDAwMDA3QjEwMDAwMDgzNDgwMDAwOEI4MDAwMDA5M0I4MEYwCi06MTAzOEUwMDAwMDA5QkYwMDAwMEE0MjgwMDAwQUM2MDAwMDBCNDk4MEEwCi06MTAzOEYwMDAwMDBCQ0QwMDAwMEM1MDgwMDAwQ0Q0MDAwMDBENTc4MDUwCi06MTAzOTAwMDAwMDBEREIwMDAwMDA3RkY4MDAwMDdGRjgwMDAwMDNFNUY5Ci06MTAzOTEwMDAwMDAwMTUwMDAwMDAxOTAwMDAwMDAwMDBGRkZGRkZGRjdECi06MTAzOTIwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDk3Ci06MTAzOTMwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDg3Ci06MTAzOTQwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDc3Ci06MTAzOTUwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDY3Ci06MTAzOTYwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDU3Ci06MTAzOTcwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQ3Ci06MTAzOTgwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDM3Ci06MTAzOTkwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDI3Ci06MTAzOUEwMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAzQzgwMDAwMTUwMDQ5Ci06MTAzOUIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjE3Ci06MTAzOUMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA3Ci06MTAzOUQwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEU3Ci06MTAzOUUwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEQ3Ci06MTAzOUYwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEM3Ci06MTAzQTAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEI2Ci06MTAzQTEwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEE2Ci06MTAzQTIwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDk2Ci06MTAzQTMwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDg2Ci06MTAzQTQwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDc2Ci06MTAzQTUwMDAwMDAwMTAwMDAwMDAyMDgwMDAwMDMxMDAwMDAwNDE4MEM0Ci06MTAzQTYwMDAwMDAwNTIwMDAwMDA2MjgwMDAwMDczMDAwMDAwODM4MEFDCi06MTAzQTcwMDAwMDAwOTQwMDAwMDBBNDgwMDAwMEI1MDAwMDAwQzU4MDk0Ci06MTAzQTgwMDAwMDAwRDYwMDAwMDBFNjgwMDAwMEY3MDAwMDAxMDc4MDdCCi06MTAzQTkwMDAwMDAxMTgwMDAwMDEyODgwMDAwMTM5MDAwMDAxNDk4MDYwCi06MTAzQUEwMDAwMDAxNUEwMDAwMDE2QTgwMDAwMTdCMDAwMDAxOEI4MDQ4Ci06MTAzQUIwMDAwMDAxOUMwMDAwMDFBQzgwMDAwMUJEMDAwMDAxQ0Q4MDMwCi06MTAzQUMwMDAwMDAxREUwMDAwMDFFRTgwMDAwMUZGMDAwMDAwN0ZGODMxCi06MTAzQUQwMDAwMDAwN0ZGODAwMDAwMjA3MDAwMDM1MDAxMDAwMDAwMDIxCi06MTAzQUUwMDAwMDAwMjhBRDAwMDAwMDAwMDAwMTAwMDEwMDM1MDgwNEJFCi06MTAzQUYwMDBDQ0NDQ0NDMUZGRkZGRkZGRkZGRkZGRkY3MDU4MTAzQzk1Ci06MTAzQjAwMDAwMDAwMDAwMENDQ0MwMjAxQ0NDQ0NDQ0MwMDAwMDAwMEVBCi06MTAzQjEwMDBGRkZGRkZGRjQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEU5Ci06MTAzQjIwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDk1Ci06MTAzQjMwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDg1Ci06MTAzQjQwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDc1Ci06MTAzQjUwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDY1Ci06MTAzQjYwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDU1Ci06MTAzQjcwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQ1Ci06MTAzQjgwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDM1Ci06MTAzQjkwMDA0MDAwMDAwMDAwMEUwMUI3MDExNjAwRDYwMDAwRkZGRjM0Ci06MTAzQkEwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjE5Ci06MTAzQkIwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjA5Ci06MTAzQkMwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRkY5Ci06MTAzQkQwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDEwMDAwMEQ3Ci06MTAzQkUwMDAwMDAwMDAwMDAwNzIwMUJCMDEyMzAwRjMwMDAwRkZGRjkyCi06MTAzQkYwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRkM5Ci06MTAzQzAwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRkI4Ci06MTAzQzEwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRkE4Ci06MTAzQzIwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDEwMDAwMDg2Ci06MTAzQzMwMDAwMDAwMDAwMEZGRkZGRkYzMzIwRkZGRkYwQzMwQzMwQzRBCi06MTAzQzQwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAwQ0YzQ0I4Ci06MTAzQzUwMDBDRENEQ0RDREZGRkZGRkYxMzBFRkZGRkYwQzMwQzMwQzFBCi06MTAzQzYwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAxQ0YzQzk3Ci06MTAzQzcwMDBDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkYwQzMwQzMwQzg1Ci06MTAzQzgwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAyQ0YzQzc2Ci06MTAzQzkwMDBDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkYwQzMwQzMwNTFCCi06MTAzQ0EwMDBDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMwMDA0Q0YzQzNGCi06MTAzQ0IwMDBDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYwQzMwQzMwQzU5Ci06MTAzQ0MwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDA4Q0YzQzMwCi06MTAzQ0QwMDBDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkYwQzMwQzMwQzUxCi06MTAzQ0UwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDEwQ0YzQzA4Ci06MTAzQ0YwMDBDRENEQ0RDREZGRkZGRkY3MzFFRkZGRkYwQzMwQzMwQzczCi06MTAzRDAwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDIwQ0YzQ0Q3Ci06MTAzRDEwMDBDRENEQ0RDREZGRkZGRkY1MzAyRkZGRkYwQzMwQzMwQzE1Ci06MTAzRDIwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDQwQ0YzQzk3Ci06MTAzRDMwMDBDRENEQ0RDREZGRkZGRkYzMzEwRkZGRkYwQzMwQzMwQzE2Ci06MTAzRDQwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAwQ0YzQ0I3Ci06MTAzRDUwMDBDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkYwQzMwQzMwQ0Y4Ci06MTAzRDYwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAxQ0YzQzk2Ci06MTAzRDcwMDBDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkYwQzMwQzMwQzg0Ci06MTAzRDgwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAyQ0YzQzc1Ci06MTAzRDkwMDBDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkYwQzMwQzMwNTFBCi06MTAzREEwMDBDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMwMDA0Q0YzQzNFCi06MTAzREIwMDBDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYwQzMwQzMwQzU4Ci06MTAzREMwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDA4Q0YzQzJGCi06MTAzREQwMDBDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkYwQzMwQzMwQzUwCi06MTAzREUwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDEwQ0YzQzA3Ci06MTAzREYwMDBDRENEQ0RDREZGRkZGRkY3MzBFRkZGRkYwQzMwQzMwQzczCi06MTAzRTAwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDIwQ0YzQ0Q2Ci06MTAzRTEwMDBDRENEQ0RDREZGRkZGRkY1MzA0RkZGRkYwQzMwQzMwQ0Y0Ci06MTAzRTIwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDQwQ0YzQzk2Ci06MTAzRTMwMDBDRENEQ0RDREZGRkZGRkYzMzFFRkZGRkYwQzMwQzMwQzM1Ci06MTAzRTQwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAwQ0YzQ0I2Ci06MTAzRTUwMDBDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkYwQzMwQzMwQ0Y3Ci06MTAzRTYwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAxQ0YzQzk1Ci06MTAzRTcwMDBDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkYwQzMwQzMwQzgzCi06MTAzRTgwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAyQ0YzQzc0Ci06MTAzRTkwMDBDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkYwQzMwQzMwNTE5Ci06MTAzRUEwMDBDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMwMDA0Q0YzQzNECi06MTAzRUIwMDBDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYwQzMwQzMwQzU3Ci06MTAzRUMwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDA4Q0YzQzJFCi06MTAzRUQwMDBDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkYwQzMwQzMwQzRGCi06MTAzRUUwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDEwQ0YzQzA2Ci06MTAzRUYwMDBDRENEQ0RDREZGRkZGRjk3MDU2RkZGRkYwQzMwQzMwQzdECi06MTAzRjAwMDBDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjMwMDIwQ0YzQzA4Ci06MTAzRjEwMDBDRENEQ0RDREZGRkZGRkY1MzEwRkZGRkYwQzMwQzMwQzMyCi06MTAzRjIwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDQwQ0YzQzk1Ci06MTAzRjMwMDBDRENEQ0RDREZGRkZGRkYzMzIwRkZGRkYwQzMwQzMwQzEzCi06MTAzRjQwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAwQ0YzQ0I1Ci06MTAzRjUwMDBDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkYwQzMwQzMwQ0Y2Ci06MTAzRjYwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAxQ0YzQzk0Ci06MTAzRjcwMDBDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkYwQzMwQzMwQzgyCi06MTAzRjgwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAyQ0YzQzczCi06MTAzRjkwMDBDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkYwQzMwQzMwNTE4Ci06MTAzRkEwMDBDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMwMDA0Q0YzQzNDCi06MTAzRkIwMDBDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYwQzMwQzMwQzU2Ci06MTAzRkMwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDA4Q0YzQzJECi06MTAzRkQwMDBDRENEQ0RDREZGRkZGRjhBMDQyRkZGRkYwQzMwQzMwQ0VBCi06MTAzRkUwMDBDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjMwMDEwQ0YzQzM4Ci06MTAzRkYwMDBDRENEQ0RDREZGRkZGRjk3MDVDRkZGRkYwQzMwQzMwQzFDCi06MTA0MDAwMDBDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjMwMDIwQ0YzQzA3Ci06MTA0MDEwMDBDRENEQ0RDREZGRkZGRkY1MzEwRkZGRkYwQzMwQzMwQzMxCi06MTA0MDIwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDQwQ0YzQzk0Ci06MTA0MDMwMDBDRENEQ0RDREZGRkZGRkYzMzAwRkZGRkYwQzMwQzMwQzE0Ci06MTA0MDQwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAwQ0YzQ0I0Ci06MTA0MDUwMDBDRENEQ0RDREZGRkZGRkYxMzAwRkZGRkYwQzMwQzMwQ0Y2Ci06MTA0MDYwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAxQ0YzQzkzCi06MTA0MDcwMDBDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkYwQzMwQzMwQzgxCi06MTA0MDgwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDAyQ0YzQzcyCi06MTA0MDkwMDBDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkYwQzMwQzMwNTE3Ci06MTA0MEEwMDBDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjMwMDA0Q0YzQzNCCi06MTA0MEIwMDBDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkYwQzMwQzMwQzU1Ci06MTA0MEMwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDA4Q0YzQzJDCi06MTA0MEQwMDBDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkYwQzMwQzMwQzRECi06MTA0MEUwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDEwQ0YzQzA0Ci06MTA0MEYwMDBDRENEQ0RDREZGRkZGRjk3MDQwRkZGRkYwQzMwQzMwQ0RDCi06MTA0MTAwMDBDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjMwMDIwQ0YzQzA2Ci06MTA0MTEwMDBDRENEQ0RDREZGRkZGRkY1MzAwRkZGRkYwQzMwQzMwQzMxCi06MTA0MTIwMDBDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMDQwQ0YzQzkzCi06MTA0MTMwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzQ3Ci06MTA0MTQwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAwQ0YzQ0U3Ci06MTA0MTUwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzI3Ci06MTA0MTYwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAxQ0YzQ0M2Ci06MTA0MTcwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzA3Ci06MTA0MTgwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAyQ0YzQ0E1Ci06MTA0MTkwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0U3Ci06MTA0MUEwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA0Q0YzQzgzCi06MTA0MUIwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0M3Ci06MTA0MUMwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA4Q0YzQzVGCi06MTA0MUQwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0E3Ci06MTA0MUUwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDEwQ0YzQzM3Ci06MTA0MUYwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzg3Ci06MTA0MjAwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDIwQ0YzQzA2Ci06MTA0MjEwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzY2Ci06MTA0MjIwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDQwQ0YzQ0M2Ci06MTA0MjMwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzQ2Ci06MTA0MjQwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAwQ0YzQ0U2Ci06MTA0MjUwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzI2Ci06MTA0MjYwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAxQ0YzQ0M1Ci06MTA0MjcwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzA2Ci06MTA0MjgwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAyQ0YzQ0E0Ci06MTA0MjkwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0U2Ci06MTA0MkEwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA0Q0YzQzgyCi06MTA0MkIwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0M2Ci06MTA0MkMwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA4Q0YzQzVFCi06MTA0MkQwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0E2Ci06MTA0MkUwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDEwQ0YzQzM2Ci06MTA0MkYwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzg2Ci06MTA0MzAwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDIwQ0YzQzA1Ci06MTA0MzEwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzY1Ci06MTA0MzIwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDQwQ0YzQ0M1Ci06MTA0MzMwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzQ1Ci06MTA0MzQwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAwQ0YzQ0U1Ci06MTA0MzUwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzI1Ci06MTA0MzYwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAxQ0YzQ0M0Ci06MTA0MzcwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzA1Ci06MTA0MzgwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDAyQ0YzQ0EzCi06MTA0MzkwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0U1Ci06MTA0M0EwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA0Q0YzQzgxCi06MTA0M0IwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0M1Ci06MTA0M0MwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDA4Q0YzQzVECi06MTA0M0QwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQ0E1Ci06MTA0M0UwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDEwQ0YzQzM1Ci06MTA0M0YwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzg1Ci06MTA0NDAwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDIwQ0YzQzA0Ci06MTA0NDEwMDBDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQzMwQzMwQzY0Ci06MTA0NDIwMDBDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMwMDQwQ0YzQ0M0Ci06MTA0NDMwMDBDRENEQ0RDRDAwMTAwMDAwMDAwNzAxMDAwMDAyODE3MDNECi06MTA0NDQwMDAwMDBCODE5ODAwMDIwMjUwMDAwMTAyNzAwMDBGMDI4MEYwCi06MTA0NDUwMDAwMDAxMDM3MDAwMDgwMDAwMDAwODAwODAwMDAyODEwMEQ1Ci06MTA0NDYwMDAwMDBCODEyODAwMDIwMUUwMDAwMTAyMDAwMDA3MDIxMDk5Ci06MTA0NDcwMDAwMDAyMDI4MDAwMEYwMDAwMDAwODAwRjAwMDAyODE3MEJFCi06MTA0NDgwMDAwMDBCODE5ODAwMDIwMjUwMDAwMTAyNzAwMDBCODI4MDM0Ci06MTA0NDkwMDAwMDA4MDMzODAwMTAwMDAwMDAwODAxMDAwMDAyODE4MEJECi06MTA0NEEwMDAwMDBCODFBODAwMDIwMjYwMDAwMTgyODAwMDBFODI5ODQ5Ci06MTA0NEIwMDAwMDA4MDM4MDAwMDI4MDAwMDAwQjgwMjgwMDAyMDBFMDVBCi06MTA0NEMwMDAwMDAxMDEwMDAwMDA4MTEwMDAwMDAxMThDQ0NDQ0NDQzEwCi06MTA0NEQwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MwMDAwMjAwMDJDCi06MTA0NEUwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzBDCi06MTA0NEYwMDAwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzBDCi06MTA0NTAwMDBDQ0NDQ0NDQzAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDVCCi06MTA0NTEwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRkZCNTFDRkMwRjAwMzFDCi06MTA0NTIwMDA4QTQ1RDkxOTE4RkMzODExRkNBMTgwNTk5ODE5MThEODU2Ci06MTA0NTMwMDA4MDk4MDM4ODNEODBCODgxOTE4MUExOTE5MTc4RkREQUJFCi06MTA0NTQwMDA2MjA4NzZCRjMwMDNDMzZFMjBFNjExMDI5QTIzODIxMDAwCi06MTA0NTUwMDA5RjAyNTRGMzA2Qzg1RjBGMTVCMzEyNjU2MDM4MjYzQTAwCi06MTA0NTYwMDBGMDdFQTcwNkRFMkE4RDI5MzY0NTEyQzFERTg2NDUxRTVECi06MTA0NTcwMDAxOTZGNDc5M0ZGMjI4OUNBREY0MTQwRkY0MDYzMjk2NUQ1Ci06MTA0NTgwMDA1NEJFOUQyMjg0NUVBNjA0QTFBNUQxRTRFREExRjJENzdDCi06MTA0NTkwMDBBMUZFOTI1MUM2NkVFRTBEQTgzQzAwRjg1QzQ5NjU2MDI0Ci06MTA0NUEwMDAwMzAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDU2Ci06MTA0NUIwMDAwMEZGRUQ3RDBCNzg1NEQ1QjVGMDNFNzNDRTlDOTk0OTQ0Ci06MTA0NUMwMDBDRTRDNEU0MjEyRjIyMjRDMTI4OEEwMjEwQ0FGODA4QUFGCi06MTA0NUQwMDA3RjI3MDEyMkY1MzkyMDI4NThENDAxNDIwODc5ODNENDU1Ci06MTA0NUUwMDA0QkFGRURDRDg0MjQxMDExMzVGNDQ3MDU4Qjc2ODg1MDAwCi06MTA0NUYwMDBEMUEyMEQzNEQyNjBDMTBFMjAxNDdCNkQ2RkYwRkFDMEQxCi06MTA0NjAwMDBFQUY1MEI0ODQxMzEyRkIxMjA3RUM1Q0JCRkQ2REFFN0EyCi06MTA0NjEwMDA2NEU2NEMyNjgwRDhEQkFGRkZGRkZEQjRCOEQ5RTdFQ0U5Ci06MTA0NjIwMDBCM0Y3REFFQkI1RDc1QTdCRUQzRDkyNzUwMjkzQkZDNzZFCi06MTA0NjMwMDBEODQ1RkMwM0U1NEY0RDhDQjEwOUMxRjI2NzY2RjY4MEExCi06MTA0NjQwMDAyNzg3QjFDOUJERkUzQTQ3M0M2MzU1NkQxOTNCQTI5RDEyCi06MTA0NjUwMDA4QzI1RUM5OTIxMTQyODUwRkVENTIzMkM1MDgyREZCRkU1Ci06MTA0NjYwMDA2NUMzOTdGMEZGQjYxOTQyM0U3Qzk3RDBFOTExRTZDM0M3Ci06MTA0NjcwMDBGQkU0RDUwMjZCODczQTkzOUMzMTBDRUE4Q0I5MTk0QjU5Ci06MTA0NjgwMDA2NDJDNkIxMkEzM0YyMjRCOEQ4MkZGRTA3MzI1Mzk4RjgwCi06MTA0NjkwMDBCMTM0RkMyNzc0NzU0NjYxQUVDMDc4QzYzMjFFNTM1Q0Q3Ci06MTA0NkEwMDBENEQwQTkzODE1NzgzRjg0N0ZDNkQyQkMyNUI3MzEwNzRFCi06MTA0NkIwMDA2M0NGMDNCQ0M5NzFGMEJDNUEzQURFNjFFNUVGMkVDMjhDCi06MTA0NkMwMDBERkExRjMzQTZBQ0Q1OEFFMzAzRTc3MzJBNzg5NjU0MTEzCi06MTA0NkQwMDBCRjNFRTNGM0FDNDY2MzNEOUJEOUUzNEY0NkMzM0ZFQzlCCi06MTA0NkUwMDBDQzdFNTE4QzMwOEYxM0IxOEMwMTNDQ0I1NDBFMkY2Mzk4Ci06MTA0NkYwMDBCREIyNjc1NDEwMUY5QjZBNThBMjMyMkM1ODBGMkY4NUU5Ci06MTA0NzAwMDA2NTg3MzM1NjAzNUU5N0VEMTY1QzE2RjhGRTM5NkMyRkZECi06MTA0NzEwMDAzMUU2RDdCRTZCRDZFQTE1M0U1OTYyQTNBMTA0MDRCNUIzCi06MTA0NzIwMDBFNEY0RUY2NzExQ0JCRjExRjFGRTMwMkJBMEIyNEFFQURGCi06MTA0NzMwMDA5NTU1ODBBRkFBNUE3NkZCOTVGRUVENjczMzg5RTg1NDBDCi06MTA0NzQwMDAyOUI5RjY1QjYxRkNERTVBRTY2QTg2RjE5Nzk5RDUwMkQzCi06MTA0NzUwMDBBQzJGRkI5MUQzRTU4MzdBNjY2MzQ3MjE4M0ZBRDAzNjg5Ci06MTA0NzYwMDA4MTg5MTlDMUVGQUYwMDlFREI5MTdGMDAxRTJBMkJBNTI2Ci06MTA0NzcwMDBERTQyMDY3NEVDREQyQkIwRTYwQzFDODdGN0JCNkM3N0QxCi06MTA0NzgwMDAwNkYzNjUwQzBDRTc1ODY2MjYzOEU3MzI0MTNBODk3NDFGCi06MTA0NzkwMDA3MTMwMDdEMkMxQkMyNEYzODk0MkE4Q0U1NERDRjNCMEY3Ci06MTA0N0EwMDA3RjlGRTI5RDg3RURGNEU3NDkwQkU2MzhCRDAwNTdGMkE1Ci06MTA0N0IwMDA1MDY2QTA1N0IxQjUzQTlENjUzMjU2RUE2OTI5NDRCRUE0Ci06MTA0N0MwMDAzOEI1RUM4RDU1NTgwMjlFMTMyNEMwRjc3QzhCQTcwODkyCi06MTA0N0QwMDBGQkE5OTg1NzlEQ0Q4MEE3RTY1OTE4OEQzRkI0MkRGRkIyCi06MTA0N0UwMDAzMzA5RjgwQ0JBRjNDNUM0MjEzRjMxNzYzQzg0NEZGMDRECi06MTA0N0YwMDBDRkYxMTE1QTVEMUM5OERFOTcyQjhCQjAxRjA5RjEwNTg0Ci06MTA0ODAwMDA3MjE3MDExRjNGNDJBMDI2RTAyODRENTQzQTU3RkMyOTU5Ci06MTA0ODEwMDA2QkQ4QTBEMEZBNUI1OUMzQzY2OTAwRTUxMUJDMEMzRjQ4Ci06MTA0ODIwMDA2MUFDNDMwOEU1NEJCRDFDQkEzQkZGQjA5NDNCMzAzQzQ4Ci06MTA0ODMwMDBGRkQzRjMwNDc0MTI3RUFCMDBCN0M4MUYxNTc2RDlCRjNGCi06MTA0ODQwMDAxMkY4NjFDQUFCRTZDMEY3ODAzRjJBMzYwQjdFMEJENDY0Ci06MTA0ODUwMDA0REFGREJFODdERjcyNjVFMEZEODY1MzdGMjRGRDcxNkYwCi06MTA0ODYwMDBBODBCRjBCREE1RkRGMTFCOTFCRjVFMTU1OTMzNzYzQjNBCi06MTA0ODcwMDAyMkNBODRGQUU1QTQwNjNCMUIwRjc1QzA0N0IxOEQ1N0M5Ci06MTA0ODgwMDAyQjM2RUZCQjFGQkYyRjY5QjMzMDFCRjQ1N0IxN0JGMTQxCi06MTA0ODkwMDAxRDM3NDI3REYxNjEzM0MzMjYxNTVCNkJFNTE0QTgyRkVDCi06MTA0OEEwMDBGMTBCMkQ1OEVGMjlFMEYwRjk3Njg5RkVBREQwQkVDN0E3Ci06MTA0OEIwMDBEMTlFMzgxQkU4NzNCQUM2Q0E5QzMyNjM3NUY2RjZDNDNCCi06MTA0OEMwMDA1OUMwNjdBNUZFMUQ4NUY4NURFOTc2QzE4NTY4OUZGMjMwCi06MTA0OEQwMDBFQUQ2NDNDOTM4QUYxN0I5N0M5NzZEOEI2NjRFMUQ3RkZBCi06MTA0OEUwMDBGMEY3NjRBQjE4RjgxRUJDNUYwNkYzNjREMEVGNjJENjM1Ci06MTA0OEYwMDA1NDg4N0FCMDYyRUIzQUQ5NjkwRkUyRUI3NDhENEFFM0RGCi06MTA0OTAwMDBGNEM5REY4QjMwMEU3QzU3Rjk4QUUwQzIyOTU2OUE5ODk5Ci06MTA0OTEwMDAxN0U1QjA3QkI3NkRDRUYzMEFDRUFGNTZDRUI2RTNCQzhCCi06MTA0OTIwMDA1NkNCRDg2RUIxN0ZGRTJFNTRDREE1RkVDRDcyMjFCQ0U0Ci06MTA0OTMwMDAyRkREQjQ1OTJFMEU5MURCQjI2RDgzOEM3MDZEQzgxQUM5Ci06MTA0OTQwMDBFQzhEMjBENzQxNzg4MEQ3QjI4M0Y1NTJENDAzQTgwRkRECi06MTA0OTUwMDAyNUJGM0MyMzg0Q0YyQTg1NThFMkNCQjI2RDIyNzMxQTNGCi06MTA0OTYwMDBGODg4RDNEREY3MkVGQzEzRjBFNURCNkIyN0JDRUE3NDg3Ci06MTA0OTcwMDBFQkQzQTcxQUREQ0VBODFBMURBNURFQkMxOTExRjhGOEQ1Ci06MTA0OTgwMDA3MUE0MDNDMEQzODQ3ODgyNzJBRDA2OUY2MzMyQ0I5NzQzCi06MTA0OTkwMDBBMDdGODc5QkE5MDJCQjNDNUYzNjk5RDk3QzA2NjNGNTUzCi06MTA0OUEwMDBCMDA3REREMkY1NTA5N0Q5NTJFNjgyRjU1MEZBQjE3QkM3Ci06MTA0OUIwMDAyQUQ0OTMwNEVGNjczODlGN0FDMTVCQzJEN0FCOTYyNEExCi06MTA0OUMwMDAwRkUwNzk5NUMwRTZFMEZDOEYyMUQwMzBBRjU1QzlDMDJCCi06MTA0OUQwMDA5RjgwRjdBNjY5NzlDRjhCODIwNjdCM0NENjhCN0ZCMTBGCi06MTA0OUUwMDAyNjgzRkEzOTQzRkQ5OEExOUZBQ0NCRjdBMzE2NEUzMjJDCi06MTA0OUYwMDBGNEEzMTY5NkU4RkRGQzhERkFCMTVENTkzRjREODUzNzVECi06MTA0QTAwMDAxOEUxMjkyQ0Q1RkI5MTA0Njg1NzZGQkZCMjc5QTkzN0ZCCi06MTA0QTEwMDA0RjM2QzI3MzczMzlGNTEzM0JENUM1QkMwQUFFRTcxQURFCi06MTA0QTIwMDAzRkIwNzZCNzA4RUY5NUVEQjE2M0Q3QjA1MEJFMjg1MEQwCi06MTA0QTMwMDAwNTgwREIwRTUyMTJDQTE3MzE5M0EyMEM3QzE4RUI4RTQ0Ci06MTA0QTQwMDAzM0Q0QTEyN0Y1RTQ3NTQxRkQxMzg4OTU2OTdDMzk0NTc4Ci06MTA0QTUwMDAyNkJEOTA5RjYyQTVGQTQzMjkwQUU5ODU4NzZFRjA1RTFDCi06MTA0QTYwMDA4M0VCMjA4RUNEOTJBMTJFN0I0N0FCMTFGODFBRTAxNDc4Ci06MTA0QTcwMDA1ODEyOTY2MDE3MjRGNTdGQkZEQUNDRjE1MDkwN0EyMTU2Ci06MTA0QTgwMDBGQjE4N0M1RjY1RUFDRDhFODVGQTM1QTZGQzZCMTE2RjRECi06MTA0QTkwMDAyRTgxRUJFNTI4OTE1NTYzQkIyODBCMjNGREI0M0EyMzA3Ci06MTA0QUEwMDBFRjc5NUYwODlFMUE4NzAwRkQ4NTYwQkY4RDY2NkYxMkUzCi06MTA0QUIwMDBGMkQ3RjhEQTY3N0MxMkMwQjc2QTA4Q0MyNzA1QkExMkI5Ci06MTA0QUMwMDA5RTA5Rjg2MDNENUEzREE0MzgwOUYxNjk5MTQxQkU0MzAxCi06MTA0QUQwMDBDNzk3NjFGQzFDMUFGRjA2QzRBMzFCQzc0RkU4M0ZCRTYzCi06MTA0QUUwMDAyNTczOTI2MTdDNkI3QTg5NjE3Q0FCMENFMzAzQkY0RkM5Ci06MTA0QUYwMDBBRDZERDZDNjA3RkNEREMwRDgzNEExOTlDNkI3QTQ5NzYyCi06MTA0QjAwMDBEMEY4QUI2NTU2NjIxODNGQUE2RkZDNUI3MEZFOUU4MUMxCi06MTA0QjEwMDBFNjlGNzk4MzcxRkVFOUE1QzZGOUNCN0NGRUIzNkE1Rjk3Ci06MTA0QjIwMDBEMkM2OEZBMkY5Q0YxNjVFRTJGMzRGMkZFNUYzQjdGMEFFCi06MTA0QjMwMDA3RUZCQzY3N0Y0RTFGRjVFOUNCRjc3ODBGMTJENTk5MzMxCi06MTA0QjQwMDA4REYzMUY1QTZFOUNCRjg1OEY1RjU0QkI1MzFCNUZBMUIzCi06MTA0QjUwMDBGMTE3MDkzQkY5RkM4Nzk2RDNGOEIyQzVFQjQyM0U5MkI4Ci06MTA0QjYwMDA1M0EzQUFGRDY4NEZBNDgxNDAwQzI2MURFNUE2NzIwNDNDCi06MTA0QjcwMDAxODA1QTAxRjg2MEE5OTA0Qzc0MzUxOUNFRkNFNDUwMTMyCi06MTA0QjgwMDBCRjI5NDE3REM3RkMyMDUxQTBDRjJBMzU5RTJGREI5RTM3Ci06MTA0QjkwMDAyRkEzOUVBNUY3ODk2ODM3RjEzRjQ1NkQyMkFEMzc2QzhECi06MTA0QkEwMDBCREM1M0YxQ0UwRUQ2RTEzN0Q1ODJGNUE3RjkzNUZBNDY3Ci06MTA0QkIwMDBGNThFREJFNTYwQzYwNUYwRjk1RjlFMUNENTFDM0FBRkFCCi06MTA0QkMwMDBGMDcyNTE5M0Y5NjQ4NzQxOEUzODNDQkUwMjM2QTIxQUM2Ci06MTA0QkQwMDBFMDZCNDcyNjk4MTBBQzlGMDQzRDBBQzYyRjNCMEU3QTI3Ci06MTA0QkUwMDAxNENCNTM2NjZFOEY5QzAwM0RDQkU0NTBCOUE5RTVGNjFCCi06MTA0QkYwMDA4ODhGQkQ5MzAzRjNCQTVCODNGRkE0QzRGMTdENzJCOUMwCi06MTA0QzAwMDBFMDQ3RkM5RjVCQjc1NDQ2RkRCNEE4MDk4Q0U5MTA3OUQ2Ci06MTA0QzEwMDBBRkQyRThENEJCREJFMjZGMTYwODlGNEVDNENGM0QyNDcxCi06MTA0QzIwMDA4QThDRkQ5NzY2RDcyRkRFMzBDOEYwREQzQ0U2NkY0OEYyCi06MTA0QzMwMDA4MkY2MEJEN0NFMUZBMkMyRkM3RjMwQzczMjE2RUQ1M0NGCi06MTA0QzQwMDA5MDg0NTQxM0M5MzE0QjM1ODE2RjMxQTc3NTlEMzkxNTQ3Ci06MTA0QzUwMDAyQUY3Q0MzMTFCRUNGQUI5NUU2M0ZEMDcyNUM2N0FCNzlCCi06MTA0QzYwMDBEOTZGMzZBMUJEQjE0NDYwOUJBMURGRkJBQThERUZGNUUyCi06MTA0QzcwMDA3MTM2MDk3MTlDQUVEQTc4NzcyNzcyNzhFRkMzNzIyQzlGCi06MTA0QzgwMDAzRTU2ODlBRUY3QUJGQzVCMUQ5RUFBODdDRDJDNDBFQjUwCi06MTA0QzkwMDA2NTQ3MDI0MzNBRkExMkM4NUVGM0FBN0NERUUxRjBERTExCi06MTA0Q0EwMDA2RkI2QkEzRDAwQ0ZGRDNGMTIwOTlGRTFGMDc3QkMxRTAxCi06MTA0Q0IwMDBFRDM2ODExREQ3QjFFMTRCMzNEQUI3RTFGMzA5ODdGRjU4Ci06MTA0Q0MwMDA4MTE1RTFGMzUxNjVENEY3RjM3REUxQ0YzOTlGODRGMzhBCi06MTA0Q0QwMDA1MzU1NUJGRUEwMTMyMUVEMkE1QUJFM0ZFODQ0MDg3RkRFCi06MTA0Q0UwMDA5NTZEOUI2MUE4MkZGMUNGMzVCNDVGQkM2MUJFRTFGRDJFCi06MTA0Q0YwMDBBMkE2MjU4NkY3MEIxQjk3MUFFQUYzN0QzRjMyQjQ3RkY1Ci06MTA0RDAwMDA2MDQ1QURFMUZEN0RENThGMThERUZGQTA2NDlEQTEzRTFECi06MTA0RDEwMDBEN0JCRDFEMEZFOUUzOTlCMERFRjREQUY4RkJDMTNFNUI1Ci06MTA0RDIwMDBBOEVFNUQ5MUUxQkE3MTU2MzlGOTM4REE4MzY3MTVDOTkxCi06MTA0RDMwMDA4NUY0RjhCNDI2ODlFNEUwNzQ4RDkzQ0FFRUI2NzE1NjEyCi06MTA0RDQwMDAyRkQ3ODNDNTBDNEM5QzVFRTE5Q0FGNzEzMkVBNjU0NjVGCi06MTA0RDUwMDBGQUYzQUZDMjA1OUYwRkVBN0YxMzlDODQzRjcxODNDQ0E3Ci06MTA0RDYwMDAwMkMwQzIwMjhCRUJFM0UzNUUzMUU0N0RDNzY1REU2RjE4Ci06MTA0RDcwMDAwMDQxMUZEN0ZGQkREODExRjk3OTU1RjNGQ0ExNkEwNDkyCi06MTA0RDgwMDBGRjIxMjhCNzJDMTVEN0I5MUU2RDdEMEY3RjVGMkUzMDAwCi06MTA0RDkwMDA0RkU4NzNDNjU2OTI5Q0Q3NjlFQjRDQjlDQ0Y1NDFGOUY0Ci06MTA0REEwMDBDRUU0MDJGNEJGQ0JFNTQwNzZGNUE1QzY2QjAxQTRBMjI0Ci06MTA0REIwMDA5RTQ0RUIzQzAxRjkwMUE0QzBDMDJGNTkwNkY5RUVEQzdBCi06MTA0REMwMDAyNzEyNUM5NUE4MTM0MEFGQUU2MzlFQzEyNkQ0MzM4MUYxCi06MTA0REQwMDAwM0U5Nzc4RDQyMzhEQzQ5NTQ2RjRCQTA3NUJEQjM2NjRCCi06MTA0REUwMDBGQUEwMTMxMkQyQzc0M0U1QTczNTczQTgzQzU5RTNBNTJGCi06MTA0REYwMDBGMjQ0NEQwOTk1Qzc2QkFBQTlFQ0E4NTk0MUU1QzczNUZFCi06MTA0RTAwMDAzRTJBM0ZBQTY5QTRGMkNGMzU0RDU0MUVBREQ5NDBFNUU0Ci06MTA0RTEwMDA3QjM1N0UyQUJCNkJEQzU0RjZGOTJCQkFGRThERDdFQ0MyCi06MTA0RTIwMDA1NUNEQUY4MDk1ODdFQTY3QjRCOUQ0NDNEQjc2OTI3M0VBCi06MTA0RTMwMDA1NzEyQ0FGOTE5RTU1QzM2REFFMzY3OEU4MjYzOTkzMTU1Ci06MTA0RTQwMDAzMEJFQzJGOTZENjAzQUJBQzk1RTI5RjYwM0ZEQzdGNUY2Ci06MTA0RTUwMDA3RjZGOEJFMjc0QjI5OUQ4NzQ3MEE2RDkyM0MzN0ZFMUI3Ci06MTA0RTYwMDA1QTkwNDM3NTA5NTkwNjE2MjRENzBDN0I4NDdFNjFFRDUwCi06MTA0RTcwMDA0MzdBNUQ4RTRFQ0NERDlCM0IxM0U4NzFGMjk5QkZFNTIyCi06MTA0RTgwMDA2MUJGNzVEQUZBMTc3NTQwQTQ3NTk4MDU5RTc3MjFCRDQ0Ci06MTA0RTkwMDA0MkYwNDZFQjVBRUZBQjlBQkVCRjBDRkVCQUZBRjBENzFGCi06MTA0RUEwMDA5RThFRkVGQjQxNDFBNUZFQ0ZCNDVBOTg4NDc4REMxMzU4Ci06MTA0RUIwMDBFRDA3RTY2NzY3MEUzRkVGNDA3OTVDOTY2NDUyNEY0NDFBCi06MTA0RUMwMDBDMDgzNUU1NkI0NjRBODRBRThGQUQzNjZBQzlGNjkxMjAwCi06MTA0RUQwMDBBNkI3RDA3QUVDOEM5OTM1MEFGOTRBNTU0RjBDNDNGQUFCCi06MTA0RUUwMDAyNzUxQTlGN0IzMkM0OTU2NEY4MEJDOUVERTk2MTVDM0I3Ci06MTA0RUYwMDBENzZGM0Y1RjA3QjdDNzEyQkY4MjVGNDhFREZGREVGMDk1Ci06MTA0RjAwMDAwQ0Q0OEYwRTBGNjNBREVDMTMyQkVBMDM3ODk3RjVFREZECi06MTA0RjEwMDBGRDcyMjZGRDk1RTI1NzZDOEZGOTFDREEwQjE2Rjg3QkIzCi06MTA0RjIwMDA5MUUyMDcxMkQ1RjU3RUFCNUE0NDlGNjUzNDNFREY2RUExCi06MTA0RjMwMDAxODBGQkU3M0VBM0VGN0M1Q0M0QkYxQURDNDRFODZDNDI0Ci06MTA0RjQwMDAxMUQ2NjlGMUM2QjI2RDM2RDVCOEFFQzQxQUVBNTU2RDQwCi06MTA0RjUwMDBDOUFBNjE5REMxN0Y4MEZDQjM2QTQxNDJCRTI5RDdCODBFCi06MTA0RjYwMDBBODQ3NTIxQTA1ODBBRkRDRTRBNDdFQUIwNERFQUVDMkQzCi06MTA0RjcwMDBEQTIxN0JFMTUxNTcyQkE3REI0MEYwOURBRTM5RUM5NDUxCi06MTA0RjgwMDA0MERFNEJBQ0UwMDEwMjdDMjUyRDIzQTdBMjlFRUI2QUZDCi06MTA0RjkwMDBBRDRCNDQ3QkIwNEMzQ0YzOTAyN0MyRjczQjREMDI4REE4Ci06MTA0RkEwMDBCN0M0NkZFRTM1QUVBMzFBN0YzMEU4NTc3RjRFN0UxNjNBCi06MTA0RkIwMDA1MzRFODZENDNCNEREQ0NFMEVFRkY3ODBENkVGRTVGMEI2Ci06MTA0RkMwMDA1M0I5RkQ0OEUxOERDRUZFNzhBQTZDRkI0MkY2OTIxQ0U3Ci06MTA0RkQwMDBDMUZGRjI4Mjc4RDJGMTU3NkVGMjFDNDA3RDVBQkFFREQxCi06MTA0RkUwMDAxOEQ5QTM5RjlBN0REOTBGNUY0MjNGRjU5RjlGOTI0NEE2Ci06MTA0RkYwMDA3MTUyN0Q1RTNFMzAyOTYxOUMwNTVBN0MxN0Y4Rjc5RTAwCi06MTA1MDAwMDAwRjYxM0RGREVDREZDRDZDMERDMEM3MkU0MDJCNzg2RkRFCi06MTA1MDEwMDBENjVGMzMxMzMzNDE3REExNTY1QkQwNUE0NjcxRERDRjQ1Ci06MTA1MDIwMDA0Q0RDOEUyQTYyMUUwN0QxODEzNUU1QTExREQ5QzU0QzA1Ci06MTA1MDMwMDBEMzExNEY1REVDNkRDN0I4MTAzQTlDMzJDOUE0NjcxNjA2Ci06MTA1MDQwMDAzNjFBRUQxOEIwN0YwREY1QzUxQjhDRjU2MjM2MzMxMTlECi06MTA1MDUwMDBGNTQ5RjE3QTMzRjMwQjM0M0ZDM0ZCRjc0RDJBRTE3Rjc3Ci06MTA1MDYwMDAzMUFCNUU4NUVCQUFBNEY5MjMwQjU0MjZBNTAyN0MxNTZGCi06MTA1MDcwMDBCRjc5MzY2RjNFQzY1RjRDREMwRkQxRTMyMzRCRTIzODdECi06MTA1MDgwMDBGQ0E1RjE3RUQ5MERFRjNGNjkxRDc3Rjc4RDQ4MDY4QkEyCi06MTA1MDkwMDA3RjE1QzY4OTU4MEM3MzZENjVGREYxRkI2REUxMEY4N0I3Ci06MTA1MEEwMDA1NzVGQUZGQkM1NjkzNDM4QzQ2RDgyREIxRjgxN0YyRjJBCi06MTA1MEIwMDA2ODdDQTZFQkVCNUI0NEQ1RTAxN0RDOERGNTEwQkYyMUQ3Ci06MTA1MEMwMDA0NkQ0RTJCMjIyMTM5MUVFNURBQUQ1Njc4QUExRjcxNDA1Ci06MTA1MEQwMDBCN0Y3RURCNEI4RUE4MERFM0YzNzc5MDY4OTEzQzg0RURBCi06MTA1MEUwMDBDODY1MjFFRDdFNkVGMkQyRjM0RUUxQUQ2MkI0NUI5OUZDCi06MTA1MEYwMDAxNEM4NDUzQjE0RDYxOEUyNTM1OUUzMDczMUNBOTE4QkMzCi06MTA1MTAwMDBGMTY2M0I4Mzc1MTRFODZGNDFGOEEwOUY1NUY2OTJEQjdBCi06MTA1MTEwMDA1ODJFQzZCQjQxREVBMUJGQzcxQzg1ODcwNUE4REI5NEZFCi06MTA1MTIwMDA1Njg2RkQ1OTkyOENGMTdDOUJEMzU4QUZDMjdGMjAxRENGCi06MTA1MTMwMDA0NjMwOEEzRjQ1OEY5MEMyRjAxODYwQTgwRkVEMkVFM0VECi06MTA1MTQwMDBGMzUxRTg4NDkxREQxRjIwM0U3NjEwOEI0MzY5NTUwMkIwCi06MTA1MTUwMDAyMjhDQ0YyNjQ5OUQ3REZFNTYyNkZBN0IxQzdFOEEyRjA3Ci06MTA1MTYwMDA0MEZCRTUyQTZGNUZBOUM1Q0Y5NzdGNTAzMDM4RUUxMjFDCi06MTA1MTcwMDBGQUE4RUEzQzY4OTA0MTIxNzUzREJFN0Y1RTYyRkU3MUVGCi06MTA1MTgwMDBERjQxNkYzQTYxNTUwREQxOUI3MzREREU2OTQ4MEZENEY1Ci06MTA1MTkwMDA5MzA4OUYwMEUzNzgwRDc2NjA5QTFBMkFFNzBCQzJGODBECi06MTA1MUEwMDBFM0FBRTE4ODY3MDZGRDVENkVGMkRFMkQyNkY0ODdFMzUzCi06MTA1MUIwMDBBQUZCNEZFQUQ3RkY4MjQ4RjNCQ0VBRkU4N0Y1RUJCRkI0Ci06MTA1MUMwMDAzMjUyRkYxNUJGNzk3OTk3MEZGOEE5RjQ1NzRGM0E4MEZCCi06MTA1MUQwMDA5OUQ5Njc1MjUzQTIwQkU4NUVCRUI1QzE4MTcyRjlBOTk1Ci06MTA1MUUwMDBFNDczMjA1RDNGRjM4QkQzMjNDOUU3MTY1MTk3NEZCNzg0Ci06MTA1MUYwMDAyMkU0MTFGRjEwMUY5RDdFRTlEMTNCRDBBRTNBQjdENTE2Ci06MTA1MjAwMDBBQzUyN0M2MDlCMjU2MDAxQTZBQzZDNURDMkU1NjM5QkUzCi06MTA1MjEwMDBFNTE4QUZBRkZFMDJGOUIzQUFDREE4MkY0QTVGNzgzMkU2Ci06MTA1MjIwMDAxMUUzQ0Q0MDQ5Q0Q3RjBFOTA3RjUwQjlFNTJGODU2OEMxCi06MTA1MjMwMDA3NzU1QjE1RUQyN0JFMURGRTFGOEU3RTNDODFFOTgyRjM2Ci06MTA1MjQwMDBDN0Y0N0ZBRkVGRjM1NTY5NzhBOTZBN0RGNDBCOTE4NEI5Ci06MTA1MjUwMDBBNTgzRkNDREYwRjYyNTlBQkRGRkE0Njg4RkE3MzhERkEzCi06MTA1MjYwMDA0NDM2MTFGOTRDQzcwN0YzNzM3QkJGRUVDNUE3NzM4RkE0Ci06MTA1MjcwMDAwMTNDOUQ1QkZFREQyMUU0ODRGMjI3RDc3QjY3NUExNjUzCi06MTA1MjgwMDBGRUZDMzVFN0MwRjJENDBEN0EzMUQ0QUVENkQ3Njc2N0NECi06MTA1MjkwMDA5QkU2QTdFQ0UxNjVCOTM5RTA0MDNGQjA3Q0IzRDlFNUM2Ci06MTA1MkEwMDA0M0JBQkVGQ0ZDMkY5RUMxQjhDQzA3MTZENzcwRThCRjJFCi06MTA1MkIwMDBFQ0U1ODNFRkREMDBGNUIyMURFNkY4REJGODM0MTQyMUYwCi06MTA1MkMwMDAzMTQ4OTcyQUY4QkI2MjZDOTAwRUE1QkYzRTI4M0I0NzM5Ci06MTA1MkQwMDBGMUU3M0Y4RTBCRDJBMzZDQzczRTk5OERFQThGOEYyOUUxCi06MTA1MkUwMDAyREZCRTQwRTI1MDI1RDVBOEUxNUEyM0Y1MUY3RTI1N0MxCi06MTA1MkYwMDAzMkVBQUZDRjVFMTdEOEUwOEMwOEY4REM3QzkwRUM2MjI1Ci06MTA1MzAwMDBDNDEzRDE1MUEzNTMxRkREQzJEQTU3MDE1RDUwQkZFQTY4Ci06MTA1MzEwMDA3NDBBN0ZGRjJGOUFGRUM3RkU5QzM5QzRDRkFGQkM4NkFDCi06MTA1MzIwMDBGQjI4N0ZCNkI4NzBGRTI1QUYzQ0U4QzA3OTlDOTJBQUY2Ci06MTA1MzMwMDAzOTVGM0ZEQjkwRTg4NjcxNEJDQ0JFNDQ5NTRBRkVCQzlBCi06MTA1MzQwMDBFNEI5MUYxMkJGMkQzRUYyQzM0NDhBN0YzMDc3QjI4OTgxCi06MTA1MzUwMDA2QzA1NUYzMkNFNkZEMUE2RDkzNEJGNjJFNjI1QkUyQjc1Ci06MTA1MzYwMDA3OTU2RjRFMEZFRTA1OTg5NERERjExNDEyRTUyMjRBRTBBCi06MTA1MzcwMDA4RjRGMzU1QjcwNEQ2NUE3NzBFMUMwN0Q4NUI3NDVGRkU4Ci06MTA1MzgwMDA1NjhBRkYyREE1RjhDQTBGRjVGRDIwQjY4Q0VBNjdBRDQ5Ci06MTA1MzkwMDA5QzRFNUY4OEZBQkUxQUFDM0NBMUZDQkE2NTc1M0JEMjQ0Ci06MTA1M0EwMDBFN0Y0MTBGNzYwOEMxQjU3MzFDOUE3RTE0M0I4MDhGRDNCCi06MTA1M0IwMDA4QTQ3QTYwREU2RjQ2MTRFMjk0RkZCMEVGNEZEMTQ3Q0RFCi06MTA1M0MwMDA4RUVEREJDRDZFNUJBRUUxM0I3NjMxMjMzOEZFNzI2RDQ4Ci06MTA1M0QwMDA3QzgwM0IwQUVERDU1Mzg5NjBGRjQ1OTg1RkExQTRBRjVGCi06MTA1M0UwMDAzNzYwNTc4NUYwNTc4ODdDNzM3OURGRjIwODk3NkY1REQ3Ci06MTA1M0YwMDBERUZEMzNBNkUzRkJCRkJFQzNFNTA3QkY0MzdCMDVFMDhECi06MTA1NDAwMDAwQTBDQTZGN0ZCNjYwOUE0MEYyQzJDMTA0OUFFQjc5ODFFCi06MTA1NDEwMDAzNUI5MzZCRUQ3RjkwNEUwOTY3MERERURFMzE3RUMzRjAxCi06MTA1NDIwMDA4RUYwNEY3NjZDRjE3QUY4MkU0NDVGNTZFMTc4OEVGRTVFCi06MTA1NDMwMDBGREU5NzJCQjU4OTNGRjA0QzkyOEZGNkMxMzk3RkI4MUU5Ci06MTA1NDQwMDBGRDA5MUY4RjRCOThGREJGNzgwNkU1MTVFNDEzRjdBRkY0Ci06MTA1NDUwMDBDQjVGMzY3QjcwREU5RjZGM0ZGMERFQkQyMEE3OUZCNzJFCi06MTA1NDYwMDBFODcyNkFENDlGRTE3MjVBQjI3MzAyOEIyNEE3OUY2M0Q5Ci06MTA1NDcwMDAxQTQyMjQzOTg1RTcxMUU1NTRFOTIwM0VGRTQ3RTk0RkY5Ci06MTA1NDgwMDAxRDdGMzc4NUUxNEZENzg3MDNFMTMxNUMxRkZFNTk3NERCCi06MTA1NDkwMDA0NkQ0ODdGMEU3MUQ5NkQ3OUZGRjc0QkVEM0Y5QURGNENECi06MTA1NEEwMDA5NzE1NDMyOTNFQTZGM0E1Q0U3NzdEN0NBOUYzNURCRjcyCi06MTA1NEIwMDA3OEEzMDE3RkUxRUYyRDE4ODMwMUI4M0NCQkNEMTQ0N0UxCi06MTA1NEMwMDAyOERGQzNGNzdGRTFCQjQzQTlFMzA5NEY2RTVBQzY1OEYzCi06MTA1NEQwMDBEM0ExRDRGOEQwQkEzRkFDREUxMkQ2REUxRDU2Rjc4NDg1Ci06MTA1NEUwMDBCNUY3ODZENUFCMERFRENCREIwRUM4M0NBRjI1NjA2OEJDCi06MTA1NEYwMDAyN0FFNzg4NjdEMzIyODEyQkZGQUI5NUZEQUZBODVFQ0RBCi06MTA1NTAwMDA0M0JFNTA3QUU5N0JGMzRBRTZCMzYzM0M3Q0FGNDhGMTkzCi06MTA1NTEwMDA5MTFFQzBGMTJBMThBNzY3N0I4NjFGRjMyNDFBNkMzQ0UyCi06MTA1NTIwMDBFRUQ0QTNGNjNBRDA1RTZDODhFNUY1REUwNDc5MTVFQTkwCi06MTA1NTMwMDAzREZENzlBRjhEQzdGNTdBM0NCRDhFRDgxMEZCRUREODE3Ci06MTA1NTQwMDAxRTkxRjQ3Njg3OUY0RDhGRTQ2N0MyOEE0MjcyRDRDMTYwCi06MTA1NTUwMDAwNjdBQ0ZFM0ZERDM0NDI1N0QwNUM2NUY5QTQ0MTc4NkJFCi06MTA1NTYwMDA3NDhBNkFFRjcxNjA5RTQxQ0Y5RUFDM0JFN0MwRjM0NTAxCi06MTA1NTcwMDA2RjhBQjQ4REQ4ODM3NjdCMEM5MkM3MkQyNTg3Rjg3N0Y4Ci06MTA1NTgwMDA5RjMyREY1MzkzMzE3RUJGODdGQjc5NDU2QkMzRUMxMUFDCi06MTA1NTkwMDBCNjk2RjhBOTU4NTkyRUEzM0UwNUJGRUNCODcxRkY4MjA0Ci06MTA1NUEwMDBDQjQ1QTlENjVGQzkyNkUzN0JGRDdCRENDMTQ1RkJCREFFCi06MTA1NUIwMDA3NDhCRjFCRDU3OEIwNzM0RUI3MjMyODY4REQxRkM3MTQxCi06MTA1NUMwMDAxRThGRDJGNEYyMzQzMUU3Q0UzOTQwOEY5RUMzMjJDMzBFCi06MTA1NUQwMDBGREZCMzM3QjQ0QTJDNzk5RUQ3Q0JGOUVFMkY2RDcyMzQ3Ci06MTA1NUUwMDA3RkY3OTIzRUQ0RjFENDg5RjIyNDBGQUNBRjNBNUZGRDNECi06MTA1NUYwMDBBRkJDODc5MTZGNzY3RDk4RkIzMzI4M0I3NzdEOTBGRDFDCi06MTA1NjAwMDA1QkFDRkZFNkZERjQwRjU5RkZGNjUzNUVCN0QxM0U0OUEwCi06MTA1NjEwMDBDRkVCNzZFMkY3OUVCRDdGNEM3RjE4RUJCQjJEMTQ5RjNFCi06MTA1NjIwMDBFRTc5RkRBQjVDRTQ5RjlFOTU5NjEyRDQ3NzNENDM4MDY2Ci06MTA1NjMwMDBGRTY4MUZFQ0ZEMkFCNzgzRDZENzdBQTJEQjFGMjU5OTE3Ci06MTA1NjQwMDBEQjQ3N0JGRUY2QjExMDhGMjVDQzBBRUQ4NkQ3QTM0OTQ4Ci06MTA1NjUwMDA5RUFBNUVCMzUxM0NBRDY3RUY1Nzc5QTE3NkZGNzc5RDY3Ci06MTA1NjYwMDA0RkE1QjY3RkQ5NjM2NzczNzYyMjdDQjE3Q0RGQTdFQTRBCi06MTA1NjcwMDBCN0Q3M0Y1RjhCRjkxN0FERkJFNDg1RjA3RUNBRUZCRTZECi06MTA1NjgwMDBDOTQ1M0REQUIzOTNEQjQzRERFNjhFRTc3MDdGRUU2ODE0Ci06MTA1NjkwMDBGRERDOTU2NkMwNzMzNzBBNTUwQUFDOUIwRENGMTRBMDhDCi06MTA1NkEwMDBEQ0Y0QzdDQjM3MTQyN0JDNTI3Q0Y0RkM1RjgzMEZDMUZBCi06MTA1NkIwMDBDREY1OURERDZGMTU3MERFNUY3RkZDMjFFQTg1RDcyRDZFCi06MTA1NkMwMDBDNDk3RkE3QzNGNkZBOTI1N0JFNTcyRjM3Njk4Nzk5Q0E1Ci06MTA1NkQwMDBFNEZGOUQ3OTBCODEyQjk5RjcyOEYzM0YzN0JEN0YyRDkwCi06MTA1NkUwMDAzOTg5MkVFMTcyRDA5RkNGRjczRTQ0RjU5N0VEMkU4Mjk3Ci06MTA1NkYwMDBGNzBBRjlGREY2N0ZGMkY5N0Y2QkJBRUYwNEJBM0IyRTk5Ci06MTA1NzAwMDAzRkVGRjI3RkYyNzkwRjRDRjczN0VGRDdFOEFFNjI3RUNBCi06MTA1NzEwMDA0QkQ1RUZCRTIxRjhCRUFEOUU1QkZCNEYyRUVGMDNDRDA4Ci06MTA1NzIwMDA1RkI3RUJENzk4NUM0RDk5MTg5RjQzQUYwMUQ2NjlDNTE5Ci06MTA1NzMwMDAzRUIzMTFDMzg1NkI0NkNDNTREMUNFMTRDM0Y2MkJGNUMyCi06MTA1NzQwMDA3MkFGOTlGQjREMjJFRTVCNjI5QzZGMDg4RkYzMzFDREY3Ci06MTA1NzUwMDA4RkEyMkQzRDE4NUE1MjhBQzk4RTk1OTQ1NURDQkU5NjVCCi06MTA1NzYwMDA1Q0VENkVDMENCOUE2QjE3QjgyODc3ODg4RDNERUFDNTgzCi06MTA1NzcwMDA3QURBNjQxN0M1QUZDM0ZDQzk3QTgxQjkwNUIwNkZBNUUxCi06MTA1NzgwMDA2QjZGMzk4Q0ZFOEQ3OTg0Mjk2MEM5QTVGMjE4OTZBQkIwCi06MTA1NzkwMDBCNUI4QTQ1OTk1MEQ3RThGOTI2M0FDREI5Q0M2QkE0NTEzCi06MTA1N0EwMDBFQkNGQ0EzOEZDRDYyNEU2QzdGOEI0Mzg3MkJGOEE3OTgyCi06MTA1N0IwMDA2REUyMTg4OTA5NTBCN0IxMjYxRkZBMTc5NjI0RTNGNzRFCi06MTA1N0MwMDAxQjMxQzAxRTEyQ0ZCRDVBM0NGNkY2RTE3MTZDQkIxQkZCCi06MTA1N0QwMDBGMTM4RDI0NDcxNkI0QTJFMjVCQ0I4RkM2Qjc4OUU4RDkzCi06MTA1N0UwMDBENTg4RDc1NUVEODg0RjA5RkQ1RjZFN0Y5MURGQ0MzNEFBCi06MTA1N0YwMDA3RjU5RDJCQTkwNDY5OERDMzY2MzNCQ0Q0RkJFMkM5RDg0Ci06MTA1ODAwMDAzODVERDJDQjM1M0EyRDMzRDA0NUE3NDMwNEZBMThFODlBCi06MTA1ODEwMDBBMkUzRjlEQkQyMjc5QzJFRTFGOERGNkY3NjEyRkUwN0I4Ci06MTA1ODIwMDBBMjk3NEU5NzM0QzVDRDUwNUVDRDlBQkYzMDE1RkQ0OTM1Ci06MTA1ODMwMDBBQ0E3NzkxOEVEMzM2QkZFODIxNEVGNjYzRUE0OTNFQUIxCi06MTA1ODQwMDA2MjQ4MkZGNERCMDJFMEI3RkQ3RUZCRjMxNDI3RUE3QTBGCi06MTA1ODUwMDBFOUQ4MUQwODRGRDk2RjQ1NjYwNUZDNzU2RkI3QjMwMEQxCi06MTA1ODYwMDA3RTJGRjk2NUY0NDM0QjVCNDU4QUZCMzMyOTkwNzc1N0NDCi06MTA1ODcwMDBDOEJFQUY2RUY3OTdGRENBNEVGMzI5REQ2OUYxREYwNkFBCi06MTA1ODgwMDBERjk3RUVGQTI0OTdFQ0IwOTVCREU0RDdGODVFMTIzOEI2Ci06MTA1ODkwMDBERDdEMURCOUI4QUY1QjJBNzFGRjIzOUM1RjYyNjU5RUY5Ci06MTA1OEEwMDAyN0QwQjkzQjdBMEVDNjZEODQ2RDNDREZCNkI0RTUxRUQ5Ci06MTA1OEIwMDBCM0M1OTA3RjY2RDZEQjkxNUVGMEJEMjg1MEJFMTNDMkEzCi06MTA1OEMwMDAxNzlBRTdBOUZCMUQ5RDJGMEExQ0JFMzZCMzFGRjM3NjVFCi06MTA1OEQwMDA0QkI3RURFOEM2Rjg1M0U5NTE4QjBCQzNEMjU1REJCRThECi06MTA1OEUwMDBBMEZEOEQyOUJGN0FEOUQxNDFGRUI2Njg4ODNGRjRGMzc3Ci06MTA1OEYwMDBGQkI3ODlDNDFGOTVBRDE1RTQ4NzQwOURGOEEyQjIyNTdBCi06MTA1OTAwMDA3MkZDRUI3MkZFNjlEOUFGRjZFRUYyMDEwQUNCN0VGREI2Ci06MTA1OTEwMDA4MjAzRTM1QkE3REJCNzNBQzhGRkRGNzZFOUI4NUIzRkZBCi06MTA1OTIwMDAzRkJGRTU5MTRCRkFGOUE3RjExRkUwQkZEQzIwODdDNTI3Ci06MTA1OTMwMDA0OUI2MEQyMjdGMDRFMENCOEI5NEVGQURGMzVCRDlDQjVFCi06MTA1OTQwMDA2NzlGQzMzODc0RTdDRUNGOUY0Mzc4Q0JGRkZCQ0JFNzhECi06MTA1OTUwMDBEMDlGNjBBRkRCRDRBRDg4OTc5N0RFQTUzODlFRkVERDgzCi06MTA1OTYwMDAyQzk5Qzc5REJCNUY3QzgxRTI5RkREMUY4MERGMDE3RjlCCi06MTA1OTcwMDBCQUY3OUU0QTQ3N0ZCMjdCQzdENzg5MTgyRjU5QkU3NzlGCi06MTA1OTgwMDBEQTYwOUNFRkYyNTdBNzBDNjYxMUY0ODg1RTIyREZGQTBBCi06MTA1OTkwMDBBRjIwRkUxQTRFQUYwM0FEMDdDOEVGRTkwMjdBQTNERkNFCi06MTA1OUEwMDBEOTE3Qjc2OUE5RTA3MTMwQTcxNkFGRDkxRTM5Q0VERDc2Ci06MTA1OUIwMDAyRjNFRDM3QUQ3OUQzNzhEQzdEMkVDNzJCMjJCODhEM0M2Ci06MTA1OUMwMDBCQzAzNzQxQzdEMDVGNERCRkU4OEU2N0Y0NkE2NUYxN0VBCi06MTA1OUQwMDBGRTAzRThCNDJDOEM3RTY3NUIxN0ZERkMxOTdDRDczQTdDCi06MTA1OUUwMDA2OEMwMzg0REUwMEFGMEE2QzdEMUJGMjdCQjdGMjJBMzBECi06MTA1OUYwMDA3Q0VERkMyNUM1QzU5MDZFQjdDMTQ0QkI1RjNFOUI4RTU4Ci06MTA1QTAwMDBGQjBGOUY5QTdCRUZFN0U3MzIyQzJBQzYxQjRBRjdCRUIzCi06MTA1QTEwMDA0RkYyRDNGREVBMTE4QTUzMzMyRDlFRERDREZBRkVGMDBECi06MTA1QTIwMDBGOEEzOTY1MzU5QjVDNUNFRTMzQjFBRkUzMUZFRTM3NDk1Ci06MTA1QTMwMDBEMDczMkRDRUMzRjk1ODhGRkYwQzE0Rjc2OTk1NzlERTFBCi06MTA1QTQwMDA4ODFFREZBRkQ4RjJBMTE2NEYwOUQyNEI5ODg0NzQzQTYyCi06MTA1QTUwMDA3NkM5RkQwODFEMEYyQUUyNjE2MjY4MUMzMzcyN0NBREI1Ci06MTA1QTYwMDAyRkRFQUREMTBCRTk4N0YxQ0JCRTM4MjVENEQzMzA2RTE0Ci06MTA1QTcwMDBFNTE3REU2NzExRjQ0MUY3NjYxRUZGRUMzNjQ3Q0VBMzRCCi06MTA1QTgwMDBEMkUzOUFCRjBBOTc1M0ZGOTVDNTMzMkYwN0ZGQjdDNUQ3Ci06MTA1QTkwMDA4RjVGNzY1MkJGRTE3OEVBQkMxMDU5OEZCRjJERjM3NTQ2Ci06MTA1QUEwMDBGRkFBRjdDNUNBMDU0M0JFNDFCOUM5N0IwNEY5QjFBMjMzCi06MTA1QUIwMDBGNTk4Q0NDRkE1RjBGMzUyRkE3QzNCQjVCQ0QxQ0U5NzhDCi06MTA1QUMwMDA0NDhBNzdBRDZBMzk0MDdBM0M1QzVGRThGQkE2RTFGMDM2Ci06MTA1QUQwMDA5RUQwRTBBRDZDRTNFQjQ0RTc0RUJCNUY4MTdFM0FGN0NFCi06MTA1QUUwMDBFRjI2N0VBRURDN0U4Q0UyNkQ4N0I2RkQ1QUVFMDg1OTVECi06MTA1QUYwMDA1NzcxOURGMDg3QzBERkY5Q0FCRTVDMUVCN0U1NzlFQzJGCi06MTA1QjAwMDBFMUUzOUNEMUY0NjFENTlFQzhFMzU0NkRGRkMyMzA0RUYxCi06MTA1QjEwMDA5OUFGNDVFNkVCRkRBNUM3M0IyREI5RUZDMUZFNEVCN0VBCi06MTA1QjIwMDA5QjE5RTY3OTlFNkUxMUE3NDczQTE3RjVBRUI2NkVFQTU1Ci06MTA1QjMwMDBFNzdFNzBCREE0N0NGRDIzRkM1Q0NDRjhCN0EzMjgxRkQ2Ci06MTA1QjQwMDA3RUY5OTFFOTFGQzZDNDYzMDk4NDg3RkU1QTZCMzk5RkE5Ci06MTA1QjUwMDBCNkZFQzQ5RDhBRjQ2RTNENzJBRjg4RUJENDJFQzQ2RjNFCi06MTA1QjYwMDA4ODlEOUZGNzRFRjUxNDNCRTg4NUJDOEYzQ0UzOTE1RDIzCi06MTA1QjcwMDBDM0Y1Q0RDNEEzMjYwM0ZDMzBDRTYwNUMwN0VBQTExRkE5Ci06MTA1QjgwMDAzQ0E3ODJGOTZFMDg4RkU4Mjg5QzhFRjA4OEFBNDlCNTU4Ci06MTA1QjkwMDAwOUZERTc2MTU2M0M3NDVFNDBFRkQ3QUMxQUNGMDNCMDA1Ci06MTA1QkEwMDAwQkUzOUNEODRGRDI0QzFFNDc0Q0JFOEI5NzNFRkQzQzFFCi06MTA1QkIwMDA0RTcxOTRCRjBFRTY1OUEwNzhEMzJDRjA3RDkyN0Q3RDc2Ci06MTA1QkMwMDBDNjQxODZFN0JGMjY1MURFNzY5NkM1Nzg2RUFDNEI1NTRBCi06MTA1QkQwMDA3QzI2RDBERkNGRTQ2QzU5MzdEOTQ5RjkwN0Q3NTg0MjMyCi06MTA1QkUwMDBGMzBGNTgyMDE3Rjk1MTZGRDdFRjdENTg3RTQyMUE3RTc4Ci06MTA1QkYwMDAwMkZEODgxQTdDNTk1QTdFQzIxMEQ2MjFBMDdEQkRDOUVCCi06MTA1QzAwMDBDRUNGMjcwRTU1RTI0REY4RkRGMzlBQkRBOTlGM0ZFQzhDCi06MTA1QzEwMDA3NzVFMzFFQzlDRTJFNUNFMjdDNjRGQzk1RjNBRDQwNUVBCi06MTA1QzIwMDBGQ0I0N0FDRjE0Q0M1RjhGQkYyNzdGNDdBQThBNzkxMjQyCi06MTA1QzMwMDA3RjlFODJFNzU3RTI1RkM4MUY5MzBDRjUxM0FCMUY5QzUyCi06MTA1QzQwMDA0QUY1RkZDODFGOTMwRUY1NkYxQUZGOEREN0NCMDRDQTE0Ci06MTA1QzUwMDA1NzJENTgzRDdBMkFGMkVCNTVDQkY5MkNDMDg4NTFDRUZFCi06MTA1QzYwMDBFRjQwQkM3NTc5M0VCQTdCOTExM0YzMUY3QTY1OEU1RjY2Ci06MTA1QzcwMDBFNkMxNzY0MzI2NzFCQ0E1MjkxRkVENDAzQzBEMzU3NTY0Ci06MTA1QzgwMDBENDIyN0ZGRTdDRUY1N0IxQTgxNzlDNEMyNUZDQThBQzEyCi06MTA1QzkwMDA1RTQ1RkFDMUEzNDkxNzJGOTE0NzE3OUU0RkE2RUI5Mzc0Ci06MTA1Q0EwMDBDRDhBRjcwMTg0RTM5MUY5MjNFODVDRTAzMzI1MzNBRDM1Ci06MTA1Q0IwMDAzQzVGQ0Y5OEM3QzBENDc4QTI2NzkxNDY0Rjg0RDMxQTZGCi06MTA1Q0MwMDA5MjhGQkY1OEY0QzlGQzVDNEM5M0E2QUZBNkFBMzg5RTJECi06MTA1Q0QwMDBFMDJCMTcyRjVFRjdFREUxN0E1MEU3NEJFRDVDNjlDOERBCi06MTA1Q0UwMDA3OUM2ODcxMDVFOUZFMjdEQzg5MkQwRkYzQ0UzMUQxNjA3Ci06MTA1Q0YwMDBDRjBBN0M5RjVDN0MzRTFERjk1QjNGOUYxODdFQ0U5MTU2Ci06MTA1RDAwMDA0OUJEQTY0OEY2NUZCMzc2Q0U3MTIwNzgzRDU2RUYyQTlFCi06MTA1RDEwMDAxQzM3RjM3N0NFOUQ4NzQxQkU0NjE3QzkyRTRDQ0QxQzRDCi06MTA1RDIwMDBCRDYyN0M4MkM0Q0YxNTUyOUU0Mzk1NDZCRjI0MTM5NzEzCi06MTA1RDMwMDA0M0Y2MTBBMzdERDYxRThCRTA0NkJGQjlFNzQxOTVGNDJDCi06MTA1RDQwMDA3NzVBRDE2REU0NTdGNTQ0NjdCNDYwM0U1MENGQzNGQzM5Ci06MTA1RDUwMDA1QzI5NjY0Q0EzMUMwREQ5MTMxMzQwQkYwRkU0RTA1QzEzCi06MTA1RDYwMDA5ODFDOUMzM0FFNzNDNjcxN0IyRTNBREIzQUE4M0Y1NTI0Ci06MTA1RDcwMDBFQjBGMENCMEM0RTBCOUUwMUU5MUVCRTU5RTFBMjdDMTExCi06MTA1RDgwMDAzMTg0RjlGNkUxRkE3RUE1RTM2REI1MThDRkZEMDJERUE4Ci06MTA1RDkwMDA1RjQwQkNFODc4RkZFNUMwRjQ3QjQ1QTNERjJCOTFFOENBCi06MTA1REEwMDAxNzdFRkU3NEJFQzVGQjZCNkM3RkFBRjhEMDJBNzQxNUYzCi06MTA1REIwMDBDM0NGOUQ4NkQzQjU0QTZBREE4OEFFNzhFMjlFMkY2ODUzCi06MTA1REMwMDA5REQxRTkzNjdBODUyQjQxMUE2NEEwRTNFQkQ4RUZFODQwCi06MTA1REQwMDAzRDVGOTgxMDVFOUQ3RTRGMEY5MEVGRkQwNzBCNUZDRkVDCi06MTA1REUwMDBDMkM3NEI5Q0QzOTFFMjhEQjRGRTYwMTAyRTIxNThDRkQ4Ci06MTA1REYwMDBCNUU2RDFGODgzNEQzQ0RFRDNCRkJEMTA3MTNFRDA3RkY4Ci06MTA1RTAwMDBFNkE1RjIzMDczNTVERTJGRTBGRkZENTBCRUZGMTBGMTI2Ci06MTA1RTEwMDAzRjIyMjJGRTNGNDZCQzAzRkUzRkM2RjY1NzgwRkY0RjlGCi06MTA1RTIwMDAyRTg1N0ZEREFFMkZEM0Y0NDIxOUVFMkIwMUZGRkNDNThBCi06MTA1RTMwMDAzOTMzMzExM0M2MkQxNDE1RTJGRjI1NUI0NTZEMUZEMjkyCi06MTA1RTQwMDA3RDVCNzI2MjUwOEYyQ0I5QkU3QTlGMTlGODcwQzlCMzBFCi06MTA1RTUwMDAwMkYxNjk5MTc2NUVGRDczRUQ1QzRCNzg1RTVGRjExQzNCCi06MTA1RTYwMDAxRkU5QzlDQkU3RjdGOTQ5MEY5NTZEMzMzRUJGMTBFNDQxCi06MTA1RTcwMDBEQjc0Q0FDN0Y1RjFGMzkzQTIyNjE3RTFGODNGQTM2OEQ0Ci06MTA1RTgwMDBGQUEyMjhENkQwMkU5QzBFNDNBQTREODYzQ0YwRTQyOUQ3Ci06MTA1RTkwMDA3REZEOTA5Rjk3NjQ3MkJFNEZGMUI1M0Y5ODE5QzYwNzdDCi06MTA1RUEwMDBEQzUyRkNGODAwRTI2M0JDMzAxNUZCQ0REN0U0NTZFRkMyCi06MTA1RUIwMDA2RkU4MEFFMzNBOUZFMTMzOUVGQkNCNkEzNDlFRkIxQkZCCi06MTA1RUMwMDBERTk0NjI2ODdGQ0Q4NjRDQzNGQjkxRkU2QjBERUZBRjE1Ci06MTA1RUQwMDBEQjM2RDY1MDFGRDU3MjgzQTFGREU4QjYwMjQzN0Q0QzU4Ci06MTA1RUUwMDBFMDE2NDNGQjcxODc2NzFBRUExM0RBRUYzNUI0OUY3ODNGCi06MTA1RUYwMDA3NDgxRTFGREY1MURBNTg2RjczNzdFQkFDQzUwQkZBOUE4Ci06MTA1RjAwMDBGNzVGMERFRDAzOEJCODVFREM1RjkzOTQ4NkU3MEE3NDUwCi06MTA1RjEwMDBCQ0VDNUYyQTlCNTQ3Q0JFMzREQkE0RTY4NjNFNEY3NDA3Ci06MTA1RjIwMDAzQjczQjFDQzczQTM3RjM1OTBCQzRDQjEyNkE3ODVBRTMzCi06MTA1RjMwMDBDRkY5Q0M2Q0QwNkI1M0FDQzY3QTgxNTVFMzk3NzRFMDQzCi06MTA1RjQwMDAxNzIwRkVDRDU2QTM1Q0E1NTZDRjZCMDJCMzlCQTUyQ0E0Ci06MTA1RjUwMDAxOTQ2RjlEMjIwNUZCNzU4Qjk3RUJCQzU3QTY1RkFFRDBDCi06MTA1RjYwMDA0RTZDN0ZBQTMyNDBFN0VDQzNFNTRCNDRGOUNBQTJEMjlCCi06MTA1RjcwMDA0N0ZCQTlDQzQ1Rjk5NjFCNkQ0NjNFNEQxQTQwQUZDQzY4Ci06MTA1RjgwMDBCMzFBQ0ZDMzhCRUE2MTlCNjQ5MDEzRkRGOUY5QThEMEQzCi06MTA1RjkwMDBFN0MyRTJEQjI4NkY2N0EwN0VFNUE0MDVCNzZFMDE3RDRFCi06MTA1RkEwMDAyOTI3N0JBOUQ0OUZBRjlBNjM4QTk4OTdGNzkwRjUzQkVFCi06MTA1RkIwMDBGQTQ5MUJGQUQ5NEYwRjIxN0VCQjkyREU3RTBBRjNDQzQxCi06MTA1RkMwMDAyQUU3RjU5MkJGOTQ2QzMxRTIyNTU4NzcwREU2Nzk1NEIzCi06MTA1RkQwMDA0RTdFOEU1MEU1RkZEQzU0RDM3ODJCQUVGN0ZBM0MxNzlCCi06MTA1RkUwMDA3RDMwMzMxMUYzMDNEMjA2RjA5RjVFRDVFNkYxNUM0REIwCi06MTA1RkYwMDBDOUFENDVDM0IwM0ZENTE0N0FCRjQ1N0FBMEFBMTBGREZDCi06MTA2MDAwMDA5OEExNUExRUY0NTNBNkM4Rjk0QTNGRDVGQTE5OEMwQTJBCi06MTA2MDEwMDAxNEVEMDM1NTIxRkJBMEFCRjgyMzg3MDRGM0Y4Nzc5MzI1Ci06MTA2MDIwMDBGN0E3QzgxNzBCNDZCN0U3RjE3M0NCNkVENzRDQjJBQkU3Ci06MTA2MDMwMDA1NDgyNUZENzQzRTk4QUU3MjlENDJCRTk0OTEyNzM2NjcyCi06MTA2MDQwMDBGNDg3NjdGMDNDNkY2MzA2QkNBRjhGMzNCOTE0QUFGN0NGCi06MTA2MDUwMDAwQTM4OUVFNUM3OEMwRDgyRjFFQUZGNUIyNEY4RUFGNzY3Ci06MTA2MDYwMDA1RjRGRjkzQzE2QTU5QUUyQTdGQTNDOTlCNkRGQUZDNzk1Ci06MTA2MDcwMDA4QkNGMjZDRDhBNDEzQ0Q2NUZEQjc3NkU4NzYxRkRBQzQ2Ci06MTA2MDgwMDBFMjZEQzc3RUNGQUUzN0QzQjhGNTA1ODJFMUJEM0U2Rjc2Ci06MTA2MDkwMDA2OUMzMUQ3NDFFMkI1REUxRjMyRTg2NzkyM0RDOTYzNEQzCi06MTA2MEEwMDAwRTU3RkQ3MzAyNEIyM0I4RkVGN0QyNDNFOEJGRUM4QUNDCi06MTA2MEIwMDA3NjYxQkMwREYwQjE4OUU4RURDRTM4NjdEMjI3MEZGM0Q5Ci06MTA2MEMwMDBBQTE4QTQzNEFGMjFGQjI1QjIxRkZBOTY5NUFGREI0QzdBCi06MTA2MEQwMDA5RDk1ODhGNjU0RjIzNTQ2QjhDNUY1NjZGMjA3MTdDNUEyCi06MTA2MEUwMDAyQTk0QUZFMEFGNTlBMUQxRDUzOEVGNTU0OTMzRUY5QzkxCi06MTA2MEYwMDAwQkYwRDRCRDIzMzI0Q0ZENzE3NjM0MkQzRDA0REYxNUY5Ci06MTA2MTAwMDBCNzQ2QkJGQ0NFRkU3OEVGNzI3MjM4MDFFRUI3MTA2RTY4Ci06MTA2MTEwMDA3MTQzMjFDRDlCREEyMURDM0YxN0Q4MzMxOUM4NzdERUQ0Ci06MTA2MTIwMDBFOTQ0RkYxNDEzQzM3RDk3NzBGOEZGRDNDQUUzQzRFRkFCCi06MTA2MTMwMDA1ODU1OUE4NzlDNTQ3Q0VCOTY0MTU4MTY5MURDMURCNUI2Ci06MTA2MTQwMDAwRUI4Q0U3RjY4RTVFQkZDODdENjA4RUJGQ0U1RUVGREVDCi06MTA2MTUwMDAyODlGRDM3RTA4NEJEMTZERDJFQ0RBRUFFQzUwN0IxOTQ0Ci06MTA2MTYwMDBGNEQ2NDlFQzU3QUY4QjMxM0ZDRUM1N0UwN0I2Q0IzQzVBCi06MTA2MTcwMDA0REQ5MTk5N0I3Q0JEMDFFNDNGRUQzRURCMUJGNUE4RDgxCi06MTA2MTgwMDA3NjY0ODg5RUZENEFEM0IzNUY1REExOUVCRDgwRUQ0RUNGCi06MTA2MTkwMDBERDFCODg2OEM3MjRDODkxRjVEQzM4MUJDNzdGOTUyQUFBCi06MTA2MUEwMDAzM0NBRTMxQjIwOUU5RjZEOEI2QzFGMEVCNDBFNURDRTE5Ci06MTA2MUIwMDBDRkM4OENENkY5NTREN0VGRENERjYwQzUzMkVEMkY5QzA5Ci06MTA2MUMwMDBEOUUwN0YyNDFCRjcyOUUzODc1MURFRUQ0MEZEQTRBRTIzCi06MTA2MUQwMDBGODgzMERGMUFCRTM2RDg4Q0Q4ODRGQzBBM0QzQzZGOTJBCi06MTA2MUUwMDBDNDY5OEI2NDBGOTYwMzFFNEQwNjNDMEVDN0Y2MDNEOTk3Ci06MTA2MUYwMDA4MzU3QURERjRCOENFNzZFQkEzNTdDODM5RTk3NzFCQ0JECi06MTA2MjAwMDBBRUJCM0VDRUMzQjg0NUU1RUM3M0E0RTdBRjdBOUMzOThDCi06MTA2MjEwMDBDNjc1NDRGN0JGNjExQzAxRTdERjdERDc3RjZCNzFCNzlGCi06MTA2MjIwMDAwRThBMTdENUJEN0E0RDBDQzZBNzJBMEFGQUY0ODY5NUIwCi06MTA2MjMwMDBEQjg1OTlBNDA3QkI3NjU5REMwODY3NTcxQ0NGRTdFQ0QwCi06MTA2MjQwMDBEQTM1RjExMEM2MzkzRUFGMzk5QzI5ODVEODJENURBRkJFCi06MTA2MjUwMDAxQ0M5MzM0MzdGNUQzQjhGRTQ0OTk0MjBFNzI3N0VEMUZGCi06MTA2MjYwMDBERjU3NUNGQ0NGM0M4RjEyM0MyN0QwQzc2RjU2QkUwRTY5Ci06MTA2MjcwMDBBREI3RjFGOEM5RDM5OEM3MzY5QUIxRjdBMzYzRjlGQTY1Ci06MTA2MjgwMDA5MTY4N0ExQzlGNDdCRkUzRjNBMTdFN0Y1NDcwRTVDN0Y2Ci06MTA2MjkwMDAwMDJCMjZERDU1NEM2NkFCRTU4REE2MDA5NjhGMEE2RTY5Ci06MTA2MkEwMDAxMUUzNTVCRTkxRkMzQzRENTIxNjFCOTEwMUZEMjg0NzUwCi06MTA2MkIwMDBEQjAzMDg4RUEzQTNENzhEREIyOUVBQTdFQTNFMkMwQkNDCi06MTA2MkMwMDAxNEVGMDJDNDdCNUNBRjJCMDk3REZDMzc4NzhEQjNBMTMzCi06MTA2MkQwMDA1RjIxNERFMTdBQjc3NzdFOTQxRkVGMjk0QTM0Qjk4RjU5Ci06MTA2MkUwMDA4MEFBNjc2NzBFMkY4Q0M1Rjc3RjhCRTZGMkYyNThEMjMzCi06MTA2MkYwMDA4OTI2NUM4RTcwMzlBMDM4RDQ5QjY2NUFERjk2MEQ3MTYyCi06MTA2MzAwMDAyNzJGODJFRjk3NEQ4OEU3N0VFOTA1OTg3REM4Mzk5NjVCCi06MTA2MzEwMDBDN0UzNjcwOTE0MDdCOTAwNzg4MUU3MTRGQTAyM0VCNUFDCi06MTA2MzIwMDA0QkNDMTczMzE2RjRCMDg5Qjk1NUYwMEJFQzkzNDJFRTExCi06MTA2MzMwMDBEOUMxRkY2ODc2RkM2MDRERkZGNjM4NEQzRTMzRTA0NTJECi06MTA2MzQwMDA3NjE5REJENTA5RUUwQzVDNEY3NzgxRkMwRDAzRkFCNEFFCi06MTA2MzUwMDBENTU4QTk3Q0FENDY0RDE4MDZGMkI4QTcyNjg5RUFBRkY0Ci06MTA2MzYwMDBENzM4QTkwQ0Q0OENBMEU3RkI2QjVDNTQ4RjM2QjVBNzRCCi06MTA2MzcwMDBEMzdBMkM1NUFGOUI4N0ZFRjVGRDEyMEJCREI3MjNCQzFFCi06MTA2MzgwMDBDNDdCNTY4RTg3QzhGOTk3MkVFNjkzMDBBRTJGMzUzRDE1Ci06MTA2MzkwMDA1MkZCRDYzOEUyQUZBN0M2MDBENDMxRkRCRkZGRDk4QTgxCi06MTA2M0EwMDAzRjY0NEQwNTNEOThGQUEzQzM1OTUzNDE4RTlGMTI3ODFGCi06MTA2M0IwMDBGRTAyMUUxODhFNzQyRTU1MkY5RjMyQjdDNEEyQTlGMDZDCi06MTA2M0MwMDA2QjFCRjM0RDREQzJCQ0M4REUzRjE1OEU2MUNDRjZFOEE5Ci06MTA2M0QwMDA5RkE2NEUxRDA5RjNDN0ZERkUxNEM2RjZEQURFQUJDNzU1Ci06MTA2M0UwMDA3M0Q4QTlGQjNGQUI4QjgxRjlDODZERkMzRTlGODk4MkI2Ci06MTA2M0YwMDBBNzU2NDA3RDMzOUJGMzBCOTMzQ0I1OThDRkQ5NzMzN0E5Ci06MTA2NDAwMDA3M0UyRkVCRTNFQ0U1RTFCQjcxMzc2REJCODlEMzk1MUZDCi06MTA2NDEwMDBFMEZDQzFFNkNBNUExRTQxNkY2RUU4QkExMURFM0VFRkRCCi06MTA2NDIwMDBDMEQ3NzQ4RjBGOENCNzJGRDUzMDVFMkZDNTExMDdGQUU4Ci06MTA2NDMwMDAyRTc1RkZEN0I0OEU1Q0U5NzczRDFGNDlGQzdDODRDNDgwCi06MTA2NDQwMDBGMzJCQkFFNjI2NkVBNkZENzg2ODFGQkE4RkRBMjM0N0NCCi06MTA2NDUwMDBCNkQ3REVEMkQ2ODEwNkVEQkVCNzlGNjVGMDcyODNBNkIxCi06MTA2NDYwMDA1NzI0QzZGNUZGNkJEMTA1QkY0N0I5NjFERTM4REE1RjQ3Ci06MTA2NDcwMDBBQUQzRTIwOTkzM0E3QUU1Rjk3NjdFMkY1QzNFRDQxM0VCCi06MTA2NDgwMDA0RTc4MDQzQzBGRDdBNUQxMzM1NTYwMUVDQ0ZGNDg2MDMxCi06MTA2NDkwMDAzMzg0MDIyOEREMzZDRkRCRDg0RkQyQzI0REJFOTdEMTMwCi06MTA2NEEwMDA1RUQ4NjU3MUEyRDlBM0UzQUJFRTAzRDk4QUZBMjE2MTY0Ci06MTA2NEIwMDBDRjMxREE4RkFBMTMzQTY0QTRGNzk3OEY3QzRENzFDQjUyCi06MTA2NEMwMDAzQTczNzUzMkQ1NkQxNzFCQjBGRUI0QkQ3QTIzRDY5OUQ5Ci06MTA2NEQwMDBFRkVCQTk2RjAwM0YwQ0Q2Q0VFMUUzMTNENDYzQkI5MDgyCi06MTA2NEUwMDBFODI5NTgzQjU3RUYwNjdFRDg2NUU2RjUyRjFGMzk0QjU0Ci06MTA2NEYwMDBGQ0IxQ0I1QzNEOUY4REUxRjU3QTk4RUZBRTU4NkZBQTY5Ci06MTA2NTAwMDAwOTU0OTA1MkZCNjVGREUxOUJCMEFFQjdGRjkyREE3NzdDCi06MTA2NTEwMDBEQjU0NkUzRjJBREUwQ0E0N0Y1RjVEODVCQTNEQTQyRTVFCi06MTA2NTIwMDBGMTNBQjNGMjUyOUY1RkM1ODFBRjI5N0ZCODcyMEZFNzhFCi06MTA2NTMwMDA0N0M0MUJDRTEzRUZDREMzNzVFOThDN0FENDUxRUJBNEJECi06MTA2NTQwMDBCODczMzZEN0Q3MDEwMzlGRTlFNzUzQjc5OEJDMkMyQTE1Ci06MTA2NTUwMDA0NENGNUUwODVCRkY0MkNFRDlCMUE4ODQ5MEZFQjQzODI4Ci06MTA2NTYwMDA3NjNBMDNCQjM0MkIxODZGQ0Q2NDJFMkE4NzMxMEY5NUYyCi06MTA2NTcwMDBEOURCOTZFRTQ3QjQyREJCQUZENTg5N0EyQjNFRDdGQTNGCi06MTA2NTgwMDA4MDk3RTg2OEY0MUY5RUQwRjRFMkZBRThGQzFCQTMwMUIwCi06MTA2NTkwMDA5RUY1ODI3NzhEODg3QUYxNjVCMzRBRTcyRjNBMjRCMjY3Ci06MTA2NUEwMDAzNzNCQjUzNThDQUQzMDUzQkQ1QzNCRjc2RDVFRTk1RDc3Ci06MTA2NUIwMDAzMzEyRjVFRTIyOTNBQjE5RDdCMzBDNEZCRTE5QkUyRjkxCi06MTA2NUMwMDBEQjlERTFBQTY1QzFCQ0U3QjJEODk2QzRCMTRBMzBFRjAxCi06MTA2NUQwMDA1OUFGM0ZBQUYxRDk0NkI1Qzk4NkY3RDJFOEZCNDM5NTMyCi06MTA2NUUwMDA2REVCRDI3MTdGRkJCMzdEMUY5MDNDQkQxRjk1NDE3QzRECi06MTA2NUYwMDA1Q0QxN0E0NEY2REE2OUJGNENDNkYzMjk5RkQ5RkFENjQyCi06MTA2NjAwMDAzRjVBRjdCRTZDMTk3NDBCRUFGNTJGRUI0RDc0Qjg3OTRECi06MTA2NjEwMDAyMDNERjQwNkU4M0YzNzM4Qzg4NzZBQUM1NEZFQzI1REI3Ci06MTA2NjIwMDA3RDJEOUFERTA1NTEyOUQzNkM2MEI0QkY5MEU5NTY5MTU3Ci06MTA2NjMwMDA4RkU2QURCOUE2QzEwQTdDRjQ4MkFDOEU0NDNFOUIxN0FFCi06MTA2NjQwMDA5NTRCN0M1QjE2MkI3MkJFNjRCOTA3REQ5MkI2Q0YwREZECi06MTA2NjUwMDBGNUQ0MzU2NUQzQkU1MzNDQkVDODY4NkY1NDZENTI4OEJGCi06MTA2NjYwMDAwRkMwMEVDODQ3M0VBOERDNjBGMkUxN0VBMkM5REE0RTM4Ci06MTA2NjcwMDBFNzdERTc0NTMxQ0Q4RjM2OUU0RjVDQUZFOTNCREY2QzYwCi06MTA2NjgwMDAxRURGQkREQzM5QzU5MkYzNTE3NDFFNTFBRkJGMUZFNTRCCi06MTA2NjkwMDAyNEJFMjg5MTdDQjRGRjU1NzJERTQxRTcxOEJGRkIzODU5Ci06MTA2NkEwMDA1NkMzNzlDOEZFRTMyODA0ODczRTRFNzk3MDFDRDI1NzQyCi06MTA2NkIwMDBFNTFGRUMyNzNGRjg4RDZCNzU3QkQ2NEQ3MUFDRTUzQjQ0Ci06MTA2NkMwMDBCNEZDMDU5QjdCMzBGNkYzQjRBNjI3MThGQUIxODA3N0FCCi06MTA2NkQwMDAyOUEzQUZFRTkzNDBDRjFDRUNEMzMzRjkwRDUzRDM5MEU1Ci06MTA2NkUwMDBCRUMxRjc2QzkyNDEwRkI5MjVBMEQzQzEyOEFERUVGQjE2Ci06MTA2NkYwMDA3RUU0RjY1MTYxRUQzM0Y1RkFDQzg2QTk5M0ZCQzNGMzQyCi06MTA2NzAwMDBCNDJENThCNzQyN0JFOTFCNEI1RjFERTFBMzczRjVBMTg0Ci06MTA2NzEwMDBGREM1RTlFM0RGNEJGREU5RkM5NzFBQjVGMEEwMEZGOEUyCi06MTA2NzIwMDBFRjYwQUMyNzFGRjM3QzdBNjczMzI3Q0FFMTY2NDk4RDk3Ci06MTA2NzMwMDA3Mjg1RDAyMTM1OEFBRjM3MjVFN0FGMzVFMDNGODhGNzNFCi06MTA2NzQwMDA1QzAzRkQ0RkQ1MzgwREZCOEE4QjhCOTZEMTc5OTg1NDFECi06MTA2NzUwMDA5RDVFQ0NDN0NGNzc2RENBMzJFQzI3RkU3RjM4QUUxNjcwCi06MTA2NzYwMDAwRUY3MDA3MDRDRkQwN0MzMzFDMjMwNUUxMDhFMUMwMzYzCi06MTA2NzcwMDA3QzU3MEI4NzE4M0I2QjdBMDZEQTZCOEY5ODI4MEYyOEFCCi06MTA2NzgwMDBEMUU0QjM2NkEyNURGNjZGMjY4QUE3MEM2NzNDMEY4ODNBCi06MTA2NzkwMDAyOUUzMERGQkI0OTk3QjJDRjMzMUZFOUUyOUIxQzNEMkMyCi06MTA2N0EwMDA1ODk0MjdCN0IzMTZEN0E5OUY0ODY0NUZDMTczQUIzOTE0Ci06MTA2N0IwMDAwRTg3NkU3MkUzRkQ0RjIwOTVENDVGNjZCOUI3ODIxRkQ2Ci06MTA2N0MwMDBGMkU2RkI4MkZBM0VEMzcwOTVFNUUzQkRBMDlCQTNFNzFBCi06MTA2N0QwMDBERjE4OERGQjY2NzMxRUFBQzIzQzk4RTc5NUYxMkYzNTMyCi06MTA2N0UwMDAzMDgzQkM5MjFERDIyMDJDMjUzQkUzQUJBODg3MUI3MEM1Ci06MTA2N0YwMDBCRjc2NzAxNEI3NUIwNEY2NzBDM0UxRTQ0OEVGQjlCQzMwCi06MTA2ODAwMDA5RTVCRjNGMDM0OEMxQjM0QUY3NDVFOEJGRTUzQjNDREMwCi06MTA2ODEwMDBERkIyMUZGMzc2MUU1M0U4REVENkFDNDdGRDhEOTk1MEVDCi06MTA2ODIwMDAxN0Q3OTk2OEJEMTQ2M0ZEREI5QTcxREZGREM5NkMxNzNBCi06MTA2ODMwMDBEQTExQ0Q2OEJGNjBGQjQ3MTRGMjZCNTZENTM4RDNGMDQwCi06MTA2ODQwMDA3RTkyM0E2RDFERDhCMjc2QjI4QTc5QzFGNThBMTQ4N0U0Ci06MTA2ODUwMDBFQkREMkE3M0Y1NUMzQzc3MzFFRUQxOEQwREQ2RUI1MTMzCi06MTA2ODYwMDA4RkI5MUEwN0E5QkM5RTk0OENFQjlBMzNEMzNBNDY3QjE2Ci06MTA2ODcwMDAwRkM4NjhBRTc1QTZBOEIxQzFGQUYwNkZDMEZBMjAzRDg2Ci06MTA2ODgwMDBCM0IxQzE5RDg2RkQyRTJCRDVGQTNCODg3MThBMTdFMkU0Ci06MTA2ODkwMDAzNEJDNjhFRjMzRkJGNEQyQzYwNkNDQ0IxMjZCODNGNTY1Ci06MTA2OEEwMDBBOTMwREZBRENGNzIzRDM1MThGQTQ3RkIwQkU2RTNDM0U1Ci06MTA2OEIwMDA3QjA1N0I4NzRCNzQ0RUNBMDY2MzNCNjA3RUI2OTE5OTFECi06MTA2OEMwMDBCNERGRDcwQzdBMTFFRjJCRUUxREM5REZFQkZCMzRGMkVFCi06MTA2OEQwMDA3MDEzRUREMzYwN0I1QzZGNkNDOUJDQkQzQzgzREY1NzJDCi06MTA2OEUwMDAyMERCMTU4QTM3QzA3QTMwMTVGMzlFMTRBNkZGNzFGM0FBCi06MTA2OEYwMDBCOEE0QjY4RjExODVGNzAxODRGMEEzNzVFRDMyM0FGNzhECi06MTA2OTAwMDA2OTFENjZEQzlGOTdEMzhDNzU4OTc5MTZBMEJGMjdBQTZECi06MTA2OTEwMDBDNkU3Mzc0NjZCRjk0MTgzNTgwQURBNkRDMzREM0UxMzFCCi06MTA2OTIwMDBCNjFCQzlGQzU0NUVDNzAyNjQ4RjhENjIxRDU0MUY4RDU3Ci06MTA2OTMwMDA1RTYzMTYxRTVCNzJEMjQxQUI3MUNDMkRGMjM4QUE0NzUyCi06MTA2OTQwMDA0NDNCMzE3MUFFMUU0N0YyNEU0MUJFNzQ0NzZCNzY2MUQ3Ci06MTA2OTUwMDAwQUVGM0Y3RUM2MkNDQUY3RjU2OUVGQ0QzMzg2M0QzMThECi06MTA2OTYwMDAwREU2QjU3RUM2RERDRTUwRkI0RTVGMkY3NUZCQUQ0ODA0Ci06MTA2OTcwMDA4M0Y5Q0I2ODIxQTJCREEwREI3NTQ1MzY1RTRGOThFNTUzCi06MTA2OTgwMDA3RTdBMTRDNjExREJDRDI2QkM5RkFENTg4QjYzMTY2RjgzCi06MTA2OTkwMDBDODRGNDRCQkFDNjhERjVDQjI4N0Q3NDQ3M0JCNkNEMUQzCi06MTA2OUEwMDBGQTE5QjI3NzE0OUVGNzlBNEY3NjdGRkVCQTA5MzExODFBCi06MTA2OUIwMDBBNzZGQjBCOTYyQUU0N0ZFRkQyM0JGREZGNTRBRURCMTY4Ci06MTA2OUMwMDBFNkM0NkIwQTUwMUU5QkMxQUZDNkZCOEYwRTlBRERDQTkwCi06MTA2OUQwMDAxOEU0OEI3NUMzQzhDRTZDOEVGMkQ2Qzc0MkJGQ0RGRjBDCi06MTA2OUUwMDBFQTc0RDU0MUZENjczNkY3RjgyMzM4NEU0MzE0N0Y4RjlDCi06MTA2OUYwMDBGNzI2MjE2RkY2RURGNzNGMkY1QzhDMUU3OEZDRjBGRDNCCi06MTA2QTAwMDBGRTgzQjE5MUVGRjFCRDQzQzM1RkQwRkVGMDkwREREOUJECi06MTA2QTEwMDA2MEY2QzREQzg3RjBCRENCRTc3OUQ2RUE4OTUxMkYxMTQ3Ci06MTA2QTIwMDA2N0ZCQjQ4NkU3MDM3NkQ2Qjg1ODQwRTZGN0QxNjJCRDc3Ci06MTA2QTMwMDBBNDY4M0ZEREFGNUNEMjIyNTBEQzdDMDk2QjIyM0QzQTdBCi06MTA2QTQwMDA0Qzg5RDVFRUE3MzFFNkM1OTYxNkJENERFRDRCNUI3OTY5Ci06MTA2QTUwMDBGQjMyRDY0MkVENzU3QUUxQkRCNTAxODMxRDNBQ0VGMDI5Ci06MTA2QTYwMDBGRDFERDFEQzZGRERBQzc4MUY0M0ZCRkY5MTE5RDlDNDRDCi06MTA2QTcwMDA0RkMwNjcxMUYzMkRFMjA3RDg3N0I5MzE5QUFGMUYzN0FFCi06MTA2QTgwMDA2MkRCQzhGNjI4RjE2M0I4N0RCODVDRTBFN0IzMDdDMjAzCi06MTA2QTkwMDA1M0Q1Nzk5MzYxM0QwQURFOUYyMUQzN0FENEFERjk0OTZDCi06MTA2QUEwMDA4NzkzN0NFQjZGODRGOTdGOUZGNTRBMjRBN0RBQkQyMzk3Ci06MTA2QUIwMDA3NTgyNUY0MkY5RkFCRTMzRUNERTFCMkQwRjY4QkFBNjcxCi06MTA2QUMwMDAyNUZFNDNDQkVGRjkzRTZCNzlDMzBERkREQ0NFMDJGNDFFCi06MTA2QUQwMDBERDYxRUQ5RTEyMTRBNDQ4NzkxOUQwQUY0MTFGREMzQTU0Ci06MTA2QUUwMDBDMjU4QkZERDY1QUNERjM5MjlGMjNEN0Q2QjZCRDRCNDk0Ci06MTA2QUYwMDBEMDdCQUFENjBFNzA4RUYzMkQ4RDVFNTc3RkRGMTIwQkUyCi06MTA2QjAwMDBDRkVCN0IwQkU5NUU4MUY5OTRCNDdGQzFGM0ZBMTQxQkUwCi06MTA2QjEwMDBGM0EwMUVEOUJGQ0Y0NkZCMjE1NThBQkMxOTQzMTY1NTk5Ci06MTA2QjIwMDBFMEVGRTJCREYwOEE5RDlGMzc0MEZGMTdFMzA1OEE5OUE5Ci06MTA2QjMwMDBCNzBGREU5N0M0Rjc1MTEyM0M0OTVBM0NDMzk1MzQ2M0YyCi06MTA2QjQwMDBENEI3ODcxQkZEMkFDQTBCOTZEODQ2REM3NzBERTYyN0ZCCi06MTA2QjUwMDAxQUVGRURFODhBRkUzODBGRkQ2Mzk4Q0Y2QzhDNEZFODkyCi06MTA2QjYwMDA3MTVBN0QzRUZGMjg3RjJDNUFCQkNGMzk5QzZFNkIzNDA3Ci06MTA2QjcwMDBGOUE4MEJBMzczM0REMjM5MDdERjczQjlGOTUyQkI4NzZDCi06MTA2QjgwMDBGRjI5QzE0Mzc5Njg4OTI2MUUxN0FDQjNCOThFNTI5QzgwCi06MTA2QjkwMDA0NEYzMEZFQUI0QjgwNkYzN0Q1REVGNTZDMkVDOTUxMEVFCi06MTA2QkEwMDBGRjIyN0RFREQ3RjVGNTM5RTQ3N0YzMzg4ODJENkExNUE2Ci06MTA2QkIwMDBBRUMzMEQzNkJENkVBNkZBRDNFNkE2MDBGOUZEQUY1QUY4Ci06MTA2QkMwMDA5QzE4MUY4M0VGREQxODY3RjNDRDFENDE3RTVENUQwNkM4Ci06MTA2QkQwMDA0QkMxN0IwRURFQjBDQkI0RkVENkJENkE2OUM2RjVEODFDCi06MTA2QkUwMDA2REYzNzZEQjQyRjI0OUJBRUNFRkQxRjlBNjA4RkRGOTc0Ci06MTA2QkYwMDAwQ0ZEMERGOTc2RkRDMUY4QUQ4ODc3RkRGRDFCRjZBN0ZDCi06MTA2QzAwMDAwMjIyRkZDRTQ5RjkxQjY5RUQxRjdCQTE5RUI4Q0I0MjQyCi06MTA2QzEwMDA3MTRGRkRGNzBGQ0FDRkU3RDFGRDhDN0E3RjEzMTQ0RTY5Ci06MTA2QzIwMDA4N0NFMUFENTkwOEY1RDhFN0EzNzA3RTVBMDlERjQ2N0UxCi06MTA2QzMwMDA0NUNCMjA4M0RFRDRGNTY5QzVGOTFCNjhCRjJDNDg1N0M2Ci06MTA2QzQwMDAyRDJFMjFCNTkzNUVBQTM4RkZCRjY4QkMzQjkwOUUzNEMxCi06MTA2QzUwMDA0RTEyRTlGNzgxQzc0OTM1RThFM0UwMzg5MzBDNzBGNzQ1Ci06MTA2QzYwMDAxRjY3MzJDMUExOEZDM0RBQTIwQ0U3OUZFQkNDM0NBRTA5Ci06MTA2QzcwMDA3MjY2OTgzMzI2MzY4MjFFRDE0QjcxODNDOTcwRkY2MENECi06MTA2QzgwMDA5REU0QjI2MkZGNzVDQTRFMzUzNDdGMjg3QzVGMDBFRjA5Ci06MTA2QzkwMDBDNTY0MjFGMEQ1QzE3QTg2QzE3MjBCRjM1MjVFNDAzREM2Ci06MTA2Q0EwMDBGNjEzMjIwN0EyRDlBNTYyQkY2MkMyRjhFOUY5MkVDNjdGCi06MTA2Q0IwMDBGRTQ1QjlCRDEwN0Q3MjMzRjIyREQ4OEIzRjU4M0I3RTE3Ci06MTA2Q0MwMDA5NTBGRUM0OUM5RUM2OTQ3QkE0QTc2OTMxM0YzNjg2QkEwCi06MTA2Q0QwMDAxNTEzQzU0NUVCOTJBQzY0RkZBRDEyQ0E1NTk0NzNCRDU0Ci06MTA2Q0UwMDA1RkE5NDMyMjM4RjQ3RDhGODFFNjI5OUY3N0QwM0NDMzhBCi06MTA2Q0YwMDBFRjNCRkI5RjFCNEZBMTc2RkRFRTU3M0IzMEQ3OTMwRjI5Ci06MTA2RDAwMDBGRDVCNTQ5MzBCNDU1RDRFNTNEODI3MjFGNDBGRUY0NzlECi06MTA2RDEwMDBEQTIwNDVFQzI3QkM5RDhFRkYwMUU5NkNFRTcwMjAzRDJBCi06MTA2RDIwMDBCQUUzQTU4ODc5MTAxQjk1RUY5ODA3MzEyRjRDMUYyN0UwCi06MTA2RDMwMDAxQ0NEMEVFMEY3NDI4NzIzMjM4M0Y0RTU0NjA1RjVBNTM1Ci06MTA2RDQwMDBGRENDOUZEQzRFRDJDQkI0RUZBREFGN0ZFNjg0QTk1NjJECi06MTA2RDUwMDA5RTRGNkNCQzU3NkYyMEZFRDNGMTYyN0RGMzQxQzZGM0FBCi06MTA2RDYwMDA1M0JEOTQ3RjcyMzkzQzQ4ODJDQjQzRkIwMDc2MjlFMkM1Ci06MTA2RDcwMDBCRTM2NTg0Mjg2RkMzODQ5MzFFNjRGMzU0ODFFRTI2MzNDCi06MTA2RDgwMDBGMzRERDU1NkRBMjc0OTVCNjlDNTdEOTJENTkyMzMwNjE2Ci06MTA2RDkwMDBGREQ4REUzN0MxRkU4M0Y5MzUzQTc5QkU2QTc4RkY2QkRDCi06MTA2REEwMDBGMDFFNjZCNDczMTU1M0M0RkI3OUEzMDZCMEFGQkEzNEIyCi06MTA2REIwMDBGQUFDRDk3NzY5RkUwMUY1RTFDMTc1MzcyQTRFNTI3MUY3Ci06MTA2REMwMDBERDM1OUIzOUJDMDNBRDRCN0FCRjAzRTFFQkQxN0RGQ0Q0Ci06MTA2REQwMDBGNzFCMkMzOTU2M0ZBRUZGRTFFMzM1NEExRTRGM0VCQzUwCi06MTA2REUwMDA2RjA0Nzg3MERGQUMzMUNENERGODZENTQyNTE1RkRENUFECi06MTA2REYwMDBFODExNTFDQzFBRUE2RjY1Q0NBMkY3NjdFMkUzRjFDQzU3Ci06MTA2RTAwMDAyMjZCOEM4RjlDOTdBM0UzNjlCN0YyMURFRDFENkYxODYxCi06MTA2RTEwMDA1RjBFN0Y4RkUyRTgyMTdDRDlBOTRDRThDRjk3QkI5MTI4Ci06MTA2RTIwMDAxNzEzMzhGQ0ExRjdBNjVBMzM4NjQ1QkM3RkIyMUY3RkUzCi06MTA2RTMwMDA4NkYxNERERTY0NDZFN0Y3MDY0M0I5MTlGQTZFRDVFRUUyCi06MTA2RTQwMDA0M0FBQzBCNTBCRkNGNEYyN0IxNEE2QzJGQUU2NzdFNEMxCi06MTA2RTUwMDA1RjQwMzlDOTZCREZDRkNGRDFCNDI2RjA3QjFFQjVFRkQxCi06MTA2RTYwMDBDM0M3NUQ2MkU3RkVDODEyQkI0QTY1Q0M1MUY3MkZGMTdDCi06MTA2RTcwMDBGNzM3NUFEQkEzOUM3ODVFQjEzNTJFQjIxRjkzNjNEN0U4Ci06MTA2RTgwMDBGMzY4OUFCNDczMDgxREI0NEZBMUI3Q0Y5QkM3RENDRDhDCi06MTA2RTkwMDAwQUM1M0QxQkFERTA3RjI1RjRCNUZGQTlCNjNGMDI4MkQwCi06MTA2RUEwMDAwQkUzRENGOURCRUI5QUY5Rjk1MTNFN0Y4Q0FCNjJGQjJCCi06MTA2RUIwMDBDNEM0OEU1QzQxRkMwRTc0REJDNjBDRjdEQjU1NTgzQjNBCi06MTA2RUMwMDBCMjUxQ0VFNzlBQkM5OTc2MThBN0VBNjg0NzIyRDY1QkZBCi06MTA2RUQwMDBERjNFOUQ0RTdFNkYxREI3Mzc3Qjc3NDc1M0RDQTAzRjZCCi06MTA2RUUwMDA3RDZBRjk3OUYyRjMyOUNDMzdBODNGRERDQUE1MDBBRDU4Ci06MTA2RUYwMDBBQkU1RTdEMzk5NkYxQ0NEREI2NzhEMEJCRUJGRDNDMjZCCi06MTA2RjAwMDBEOEE0QjFDODAwMUM0Rjg4OUY0OEY0MzBEQjREMDY3QUU2Ci06MTA2RjEwMDA4MDNDNUU2N0Q3RTg4MTc4RUFBM0I3NzZFRjRCQTc3NjI3Ci06MTA2RjIwMDBCRkUwNzFDRDVGNjEyQUY3RDdGNUZCQTU4RTY3RjdFNTY2Ci06MTA2RjMwMDA1QkQwN0Q1QkU1MzZGNzEzNzg0RjBCM0IyMjUyQkVFNjA0Ci06MTA2RjQwMDBDMjI5RkNGRUM0ODUxNjc3MENEQTU3MEJGRjUzMTQ2QTZFCi06MTA2RjUwMDA2OTdGOTNGM0ZEMjIwRDdGOURDQzQ1RjcwRUY4RDZEQUJECi06MTA2RjYwMDBGOEJFNEU5ODdGOTZGMTU0RkVCODNGQzJGNzhCREE0NEQ0Ci06MTA2RjcwMDBDQTFCNUYzMDQ1RjE2MUJGNzlFRDA1QkZDNEZERjlFMjgxCi06MTA2RjgwMDBDNjY4M0E3N0JFRjA3QkFFOTM2OEQ3MkQ3Q0MyRTZDNDY0Ci06MTA2RjkwMDBERjdCNTlGRTQxNjY3RTMyRjRCQkZDQzkwQ0Q1MDdERkFFCi06MTA2RkEwMDA0NUFGRjAyNDU5NURBMDI3MUZEQjUzODg3RTQ1ODMzMDExCi06MTA2RkIwMDA3RkJFMzAwNkZDQ0FDNzBFQUNDMkI4OThGNENEOTRDRkUxCi06MTA2RkMwMDA2RDUwN0ZGNEIxNzc1NjYxQkNFOUI3MThFNzI2M0JGNjAwCi06MTA2RkQwMDBERDQyQjQ2MzVGNDJEMEY0RkQzRkMwQzE0Qjg3NEQ1QUUwCi06MTA2RkUwMDBGREM0QUFBOUEwRjJBRjRENjgzNTI5MkFGQTY1Mjc1NjMzCi06MTA2RkYwMDBFMTM5RDlDNDM4RjcxODEzOENGNzhFRkRCMzQyRUM2RjIyCi06MTA3MDAwMDBDMTEzQTNDRTZEODBGN0U3RUQxN0M4QkUwMDNBNjlERjY0Ci06MTA3MDEwMDAwQjM3NEYwMUJCQkI3OEIyNUU5NzJENTg4RjhGNjY4NkJBCi06MTA3MDIwMDAzOEJFMzkzMzM4M0VEQUQ5QUQ3QTdDOEI0NUREOEM3MTg4Ci06MTA3MDMwMDBGN0UzMDVENTUzMjRFODNGQzNBMUFFQ0UxOUM5RDhDNEEwCi06MTA3MDQwMDBGNUY5QUExQkM2Q0Y3NkM0REQ4Q0YxOThENkJFN0Q4MzM4Ci06MTA3MDUwMDBGOEQ1MTgxRjZCNjVERTAzNjY3ODdGRDNFMzQzNkVCNjAxCi06MTA3MDYwMDAwMjYyRTMwNzc5QzZBODMwRkY0MUQ2MjlBQkE3REZGNDU3Ci06MTA3MDcwMDAxREU0NjM0NEJGRjM1OTBERjYwNDkyOTM0Mzg4RDJGNEEwCi06MTA3MDgwMDAxNUZDREVDMjNFRjk0RUUzN0NEQjU3MUZEMUMxQ0ZDM0Y2Ci06MTA3MDkwMDBFOEY1MjQ1RTZGNUQxOTU5NUZEQzEyQzNGOUJBMzUyQTMxCi06MTA3MEEwMDBGMkZCNjY0RDNGMDBCRTAzMTQ3RjZEOEJGNjBGQ0YwOEQ5Ci06MTA3MEIwMDBFQTBGOTAxRkVCMjQ5MkE3NzU1QzdGODAxQ0NEQjQ5M0UwCi06MTA3MEMwMDBEQzQ2RUNFRkRCQ0E2QkFCNzZBRjc5QUJFNDhFQzZGODhGCi06MTA3MEQwMDA4MkFFQzczMDgyODZFM0NDQjUzQjBERkEzOUFGN0QwMTc1Ci06MTA3MEUwMDBFOUQ3NTEzMTJBODdDN0M5RjE5MzMwQzVBODQ3OThCNTY4Ci06MTA3MEYwMDAzRDNCNzRERkZFNzdEQTNDMzNBRUQzRTMzRjAxMzk3NEI2Ci06MTA3MTAwMDBERjY5Rjk4RUZDNEI5RTlGMkRDNzM4N0Y4OEJEMUQ5QzgzCi06MTA3MTEwMDBDNzU0OEE2N0Y0RUIxN0ZBNzM2QUZEQkI3MkFFMDQ1RjVCCi06MTA3MTIwMDBFQTY1RjAxNTRGRjhCQURDM0M4M0ZEMTlFMzJGRkRGQjRGCi06MTA3MTMwMDA5M0I1N0RDMTI2RTMzQTIyNDc4NkYzQTRDRTI3ODA3RjBDCi06MTA3MTQwMDA1Mzg4RkUyQ0Q2RjRBOTlFMDdEMUJENkIyNEU1NEYwNkNCCi06MTA3MTUwMDBDN0U1RTczMTgxQkVCRkM0REY1REYyODEzRTQ1M0Q5NkE0Ci06MTA3MTYwMDAyN0I5NkZDNUY2NzlFRDcxMkFEQUVGQzA2RkY1MUFCRjRFCi06MTA3MTcwMDA0OUM4NkYzQTlENUJFM0FBRjM2OUJFRUIwNEIyNEJGQUQwCi06MTA3MTgwMDBEOTQxREEzQTlBRDcyNEQwRUY5OTBEOUVFNzE1RTc4N0NGCi06MTA3MTkwMDBDMEE3RUI3QkU4QkY1NUVCN0YzQ0U3RTc2N0ZCRjhGOTVGCi06MTA3MUEwMDAzRTk0MUZDRDlGNjdBRTBFQkE1RjNEMUNGRTg1Mjg3M0NGCi06MTA3MUIwMDAwOTIxRUJENUFCMzY4QUVCRUI3OEJCNUFGRUQ3RUQ4NUQwCi06MTA3MUMwMDBGMjAxRDcyNTA3N0QzN0Y4NjhDMEUxODQ3NjhCNTExRTIwCi06MTA3MUQwMDA1MDVGQjU3QzQyRjc2NEI2QjY4OTBDN0ZCMjAwRTc4RDhDCi06MTA3MUUwMDA3QTIzNEZENzkzQkU5NTg3MEEyNEIyNUI4MjdBRDk0OTE2Ci06MTA3MUYwMDBGNjhCQUUzNzAzNTY2QkIwRkRCOUI1MkIwQkVCNTFBRjI5Ci06MTA3MjAwMDA2QUY3RUNDNzhCQTBDNUM3MDZFMTQ4NzM3MEJCNzc5MkRECi06MTA3MjEwMDA5NzQ1RkNEREI4MUNCQjVERDcyMzM0OEY4RDJCMEFFODY2Ci06MTA3MjIwMDA1RTg1MkE2RDNEOURENEUxQTM3ODUzMzRFMjcxNDIxMDBFCi06MTA3MjMwMDAxRkZBN0E3REE3QTVFMzE1RURCQzk3ODExRkY1M0FEODEzCi06MTA3MjQwMDAyNTk1QTZBQzYwRkZGODdFNjYwOERGRTczOTM4MUY4NDE1Ci06MTA3MjUwMDBEM0U3QkJFQTI3QzA4MzBGRjFGMDQzMERFRjA5NTBDNzE2Ci06MTA3MjYwMDA3QjJEOTgwNEVCMTdFNkZEQ0M1MDVDNkIzMjQyRTA1NjY4Ci06MTA3MjcwMDBCODNFNEUxMDRENUM4RjVENDYyRUUyMDczMUVERjc1ODVCCi06MTA3MjgwMDBFQzI0Q0Y0MTdDNzBCQkU1MDE4NzE2RTdENUVFMjkzRkEyCi06MTA3MjkwMDA2ODAyMzlBMTdEMzYzRUNGRUU1REM5RDRFRjZDQURERDFECi06MTA3MkEwMDBERjRCMkY2RkQ2RjI5Njc0N0JCMUUyQjVENENENDZGOEEyCi06MTA3MkIwMDA3OTdGQkIxQzFDMkY3OTQ3REQ2M0QwOEUxOUVFNTE1Q0EyCi06MTA3MkMwMDBFODFGRTRCNUNGREM4RkY5MjREOTdCRjAwNzA0ODI3QzdBCi06MTA3MkQwMDA5RUREQzJFNTE0Qjg0QkMzQ0I5QkRCNDNGQkFENzREODNBCi06MTA3MkUwMDA3NTM5RkJCQkNDMjNGQjI4RTc1N0E0Q0I3RDIxNzI1QTExCi06MTA3MkYwMDBFMzUwMzhCRTYwN0UxNkM0QTc2NEQ0QTM3QUY5Rjc4MzNFCi06MTA3MzAwMDBDM0IzMUZDRjI1OTUwMzNFNTA2REVCNzg2QjZEOTlCRkNFCi06MTA3MzEwMDBEMjg2NzI3Qzk0Qjk1MDhFQkI1QkU2OUI0NjIxNUQzMTcwCi06MTA3MzIwMDAxMUNDMTlBMjFGRDZGMzc5RTg3NjI4RjA2NTBCRjJFNUE3Ci06MTA3MzMwMDAzQUM3MTAxQTZGRjg1MTc3NzQwRUJDMUY4RTc2MTNDNkI5Ci06MTA3MzQwMDA3RDVCRUM3RUY0MjNGQzBFRUYyRTA3RTI3MzU2RUYxNDA4Ci06MTA3MzUwMDBEQzRGQUQ4Q0FFQUVCNTg1M0NFRjZCREYwNkVEODk4RkIzCi06MTA3MzYwMDBCRDIyRUUxRjk1M0ZDMEY4QkRGMURBN0NBMEE5Q0YwMjg3Ci06MTA3MzcwMDBFMzU1QzgyMEE3NTk1NDBGMjBERTVBNjVERUJFRjczRUZDCi06MTA3MzgwMDBGQUE1MTE1NjI5RjI3QkY5NjBGREJFOTVGOEYzNkQ1MzBECi06MTA3MzkwMDAxQ0QyMTdGRDI0QjQ5M0NCNDU0RjFBRUU3QkIyQzExNjE1Ci06MTA3M0EwMDAxN0FFMDNFMDc3MTBCRjFGQjQzMUM5MDZGREZGMUU0QUI4Ci06MTA3M0IwMDBENEQzRDNDNEE1NzQ4RTZCNUE5NjQwRkI0NEJBN0Y4RjQ2Ci06MTA3M0MwMDA3QTBCRkRBNDNCQkYxNzRERkNDODJFM0MzODBDRTNEMzExCi06MTA3M0QwMDAwOUQxOUM0RUQwOEY1NUVCQzc2QTFEMUI5NEJGRkY0ODQ3Ci06MTA3M0UwMDAxRjQ5RkU4RUJFQkUxRDE0MDRFQUU3RTA0REQ3MzVENzE3Ci06MTA3M0YwMDA4NUY4NDFEODFGRUFGRjgzQzI4Q0I0QTVDOEZGOUExRjQ1Ci06MTA3NDAwMDA0N0Y2NjE3QzcwREQ0NTdCNjVBQzIxQ0VFNkQzRTBFQkQxCi06MTA3NDEwMDA0ODQ3M0UwQUI1NDdEMTNFRURCMzY3N0RGMzU3REYwQ0QxCi06MTA3NDIwMDA3QTc2RTJGNDk2MDA1RTcxNUZDQjhBNkVGRTE3RTg2RkEzCi06MTA3NDMwMDAxQUQ4QjMzNkMwQzMzRThEMkYwRTY2Rjg0NERDNEYzRERDCi06MTA3NDQwMDAzODVDQTBGQkRDMEY0NTc5NzNBQTk1RTAzODg5NUE1QzVCCi06MTA3NDUwMDAyMDUxQ0IzMzRGOENFMkU1MEY2MkI4MUVGQzNDODZBRjY3Ci06MTA3NDYwMDBENzM3QThCQzlFRTg4ODFDNDc5OEFEQkRGRkE5ODlFQjFCCi06MTA3NDcwMDBGNzM1Rjk5MUYzRDE0RjY4RkFGNUFBRURERTFDMjFGQzNFCi06MTA3NDgwMDBCRUVFMTM4RTA5REE3REREOTQ2RkM3RTNGRDBCMzRGRThCCi06MTA3NDkwMDAwNjNCODdFODE0QjRBQkY4N0U5RDZFODc5RTZEOUY0RENBCi06MTA3NEEwMDBGNTEzODJGN0JEN0IwNDJDM0Q0RjkwOUZGNEFFNDhGMTVECi06MTA3NEIwMDBBMUUyNTg2RjIyRTZBNTU1NDQ0NThFQ0IwQ0QyRjBGNERDCi06MTA3NEMwMDA1OTBEQTMzOEVGMjlEQ0NGQ0JFNkJGQjc4NUY1MjUxQkQ3Ci06MTA3NEQwMDA5RUE0N0IxRDRBOTk5RkUyQkQ0NTFCMUE2OEJGQUVDODlBCi06MTA3NEUwMDAyRjMwQTc4MEZFOTk4N0M3ODEzNTNBOTQ2RTExMEQ3MUIwCi06MTA3NEYwMDBFN0M1NTJCNTFDOUIxM0U0NUJGQzFEQUVEMEY3MjU5QjgyCi06MTA3NTAwMDBDNjE5RUE1NzZGOTcxNjE4RjIzQjgyN0FBNzkwRUNCRjFDCi06MTA3NTEwMDBGMDdFNzUzRTBGQjc0RjhGRDczODBERjFFRTA1MUI4NjA1Ci06MTA3NTIwMDAxN0YyQ0Q3OERFN0UyMTczRDE3QzE3MzY2NjE5RUYxMTA0Ci06MTA3NTMwMDA2RTRDQjhCMjdCODJDMTFFRjU0NTg0NTMyNkZEQTgzRjMwCi06MTA3NTQwMDAzRjBFRjhGNzg1QzRGNzE3N0MzQThDRTBGODhCQzM3QkM1Ci06MTA3NTUwMDA1RDhDMDE4RTY4RTYzM0M0Q0YyNkYzREYyOUI0RjFGOEUxCi06MTA3NTYwMDAyM0YwOEZFRjUyNzY0MDdFQ0M3N0Y1MDdBRTFEQzAxRjFCCi06MTA3NTcwMDBDOEZEODdGQTAzNzk5M0I5RkU2NTREMDJFNUUwNEM5QzlFCi06MTA3NTgwMDA2QUI0Q0Y2NkM3RjA3NTZFNzY0Q0I0QzEzRTJCOUE2NzZECi06MTA3NTkwMDA2QzM3NTc2QjM3NTc2Qjc3QjkzODRBQTg1RDI2NjRBMUFCCi06MTA3NUEwMDAzRUUzRkRFOUJGMUY5NTcxRkE2RENBRkZEQzEwQzNFRDI0Ci06MTA3NUIwMDBENzlGQUE2RTZGMENGNEJCNTYzQjc3RDA2RkRFREFFRjI1Ci06MTA3NUMwMDA0QUFEMzVGN0U1ODU1MjVFRTBFNjZGMUVBQ0MzREYwOUQ0Ci06MTA3NUQwMDBFOUREMDFGNjNGRThDMUZDNjdERkEwN0JCQUY0RUY2RTlFCi06MTA3NUUwMDA1RkQxMzJCNDA4RjA1NEE5Qzk3M0I5OEJDRkFGREMxNUExCi06MTA3NUYwMDA5MDg3NDEzRjI5RTUxQ0FFQjQ5NjdEODIxNEYyNUQ1QTE2Ci06MTA3NjAwMDAwOTZGQjcyMkM2NkNGMDJGN0ZBMkQ1RkYzNUM2NDk2NTNBCi06MTA3NjEwMDA1QTQ5NDAxODA2RUQ1MjM2NkQxMTI0RUMwRjdGNTcwQjc2Ci06MTA3NjIwMDBFMDQ5QTk2NkZFRDBERjkzNEExOUNGRUQ5QURCQzc2RjE4Ci06MTA3NjMwMDAxNjE2RTYwNEYxRDA2ODlBOTFBMzYyNUMzNTMxREE4NUJBCi06MTA3NjQwMDBFQkNDNDdBQUI3MEVGMTUwRkU1MTgwQ0U0OTRDRkNBOEI2Ci06MTA3NjUwMDA1RDQyQkJCRDVCNzVENzIzN0ZFQjc4NzA4QTZBMEFBRTRCCi06MTA3NjYwMDBBM0QxMUY3MTM4OUJGQUZDNjJCRUJFMzBGNkE4NjY0N0Y0Ci06MTA3NjcwMDAzN0VCNzZFOTYxQzZFRDQyNUFBNzEyNTc4RTMwRkMzRUQxCi06MTA3NjgwMDA2MTYyOUNCNjRFMjQzMkVGNEU4NURBMzczMkEyMjdBM0QwCi06MTA3NjkwMDBGOTI0QUVDQzZFRTY3NjJDQTdGN0I0MkNDRjE2N0MzRTQwCi06MTA3NkEwMDA2REYwQzhCMTc4REY0N0Q2REE4MDg0QkYzQkZFREEyNkJBCi06MTA3NkIwMDA1M0M0RkI1MTlBMzVGQ0MzM0M5RUM1RjlFOUYzQjg5QzExCi06MTA3NkMwMDA1RUQwREI5OTA3ODg0RkU4RjIxMDNEM0RCMkRGQzFEOEFDCi06MTA3NkQwMDBFM0Y0M0VGRkQ5Rjg3QkU5RkVDQTdBOTk3RTRGNEVDN0E0Ci06MTA3NkUwMDA3RkI3RUE2OTQxQkNBNkI0NkMxNjA4MzdEQTc4N0FEQzUxCi06MTA3NkYwMDAwRTlGQTM1QzFFOTc4REU3M0EwNzk0RkIxNTNCODcxNkY4Ci06MTA3NzAwMDA4NUNBN0RCRDRDRjREOTFDOTZFN0FGREJGNzdGODhFMUQ1Ci06MTA3NzEwMDBFQkVBOTA1OENGM0VDNDRCNjVEQjNBOEFFRjJDRDlDMkQ2Ci06MTA3NzIwMDA3RkY3Njc0MEZDNUMyMUZFODQxMkVFMDc5NENGRTFGQkZCCi06MTA3NzMwMDA1RUY5Q0Y0QTQ0RkZCMjdBRkVGQkFDRTVEQjc3RjBCOEU2Ci06MTA3NzQwMDBDRThGOTkwQkY1NDM3OUNCMEVBMTI4MDc3RjA3NzM4NzVFCi06MTA3NzUwMDBCMDI4MDQ5RkE5RTU3RUNBODNCRkM2QUVDQjFGRDc1QjA2Ci06MTA3NzYwMDBFMUZDOEU3MTYyQjQ1MzBFRDlCODdFRThDQzU3N0NCODc4Ci06MTA3NzcwMDAxRkRDNjlGNjk2NjNCQkNFRTQ2ODE3RTY3N0U5RjhGRjhECi06MTA3NzgwMDBGRDhFOUJFOURDQjU3REE3MjU4MDY1QTNBOTM5Qzk4QTUzCi06MTA3NzkwMDBGQjBFRDdDQTJFRTRBQjZFRDU3QjEyRTkxMzI3Nzk1QUJDCi06MTA3N0EwMDBGMUZCRDg3OEJCQUIxNkJFNzU1QUQ4NTg1NUI5NzIzQ0E4Ci06MTA3N0IwMDA0QzBDRTM4Rjg5M0ZFNjcyOTNBNDNBRjRCQzg2QjEyNDYzCi06MTA3N0MwMDAzN0FBOURFQjJEMTNENzY3ODdDQzdDMUUzQjE5ODdGNzEzCi06MTA3N0QwMDAwNzMxRUVCMzI0ODc4N0UzNjhEQzk0RjIwMDlEMUZDQTZCCi06MTA3N0UwMDAzOEJERDM3MENFMzBDODVGRUVCRjdEMUI3RUZGM0YyQzBGCi06MTA3N0YwMDBBMTRCMjgwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDQzCi06MTA3ODAwMDAwMEZGRDU3RDdCN0M1NEM1RjVGOERDQkRGQjBBRDkwREE2Ci06MTA3ODEwMDA5QkY3M0JEQzEwMEMyODI0NkM5RTA0MDFEOTI0ODQ4NzQwCi06MTA3ODIwMDAyMDZFMDIyOEM4NkI3OTQ3OTI2QzAyRDJGRUQwRkE2REE2Ci06MTA3ODMwMDAxNjgzMzFFNTZCNkJENDE2NDVBOTJFODg5NkI2NUE4MzBDCi06MTA3ODQwMDBBMjA2MERCODI4MjJENjQ3MjNBNThBMkREQUE1MjAyMjI0Ci06MTA3ODUwMDA4NDY0MUJGQkMwNTZDQjZGQ0U5OTk5RUNERTlCMEQwRjU5Ci06MTA3ODYwMDA2QkZCRjk3Q0UxOEZDOURDNzk5RjczRTY5QzMzRTc5QzY1Ci06MTA3ODcwMDA5OTFEMzNCNUNEQTg4QzIyQTRBNjlBMzhCQzM0MkRGRDExCi06MTA3ODgwMDBFOTBFRTk4NDg1OTAwQkYwNkYyMjIxODM2QzMyMjFGMTlGCi06MTA3ODkwMDA4NEE0M0NCRDRENTIyQzU4QkU3RjVBMUNENjI3MjYwNUM5Ci06MTA3OEEwMDBCRTRCRDhBRTg2OTZBRkEwQTk1QjIyODQ4QzI1RTRBMEZGCi06MTA3OEIwMDA4MTc4Q0MzMTg0QjRFODJBNDdEOTY4RkQ5Njg0NDg3QjI2Ci06MTA3OEMwMDAxMzJEM0I2NjczNDVEQjY4N0Y5NjYzOUQwN0FDQjRFQTc2Ci06MTA3OEQwMDA5ODYzM0VBMzhCRjY0QkRBRTlDNzY0NDJERTMwMTIxMjlFCi06MTA3OEUwMDA0MURCMUQ4QzYwRUREMzZENzQ5MDIyNDIyNjFCODkwNzBECi06MTA3OEYwMDBCRjFCM0QyMzE0REFERkMxQTE4M0IwQkY5N0I3RUFBNjRGCi06MTA3OTAwMDA3QTY5N0JDMzIwQjJEODE5MzJFRjc0OUIwRURCQTU2QzY5Ci06MTA3OTEwMDBERDIxRTlFOEY3Qjg0ODVBMUUzMjNGNTFFRjAxNUI1OUMzCi06MTA3OTIwMDAyNkNDNjdDQ0Q0NEU4NDQzREQ1NjNEQUVBN0MyRTgxQ0JFCi06MTA3OTMwMDBCNjY2NTRCMERFNjhFODhGRDY3QkVERTY0RjhDN0VGQUYzCi06MTA3OTQwMDBGREM3MkZCRDZGMjQ1MEJGNTU3MkI0QzFGQzVCREYzNzNDCi06MTA3OTUwMDBDRUM5QTFBOUU3RTczMjQ5MjA2NDNBNjFGRjM2QkZGMEZBCi06MTA3OTYwMDBCRTUxQTFERkE3RUZBNjcwQTJGNUVBNzZFRkQyMkZBMzUyCi06MTA3OTcwMDA2OTU3QTlDNTIzOEQyNjI0RjNDQzZCOEI0ODIxRkRERUU2Ci06MTA3OTgwMDA2NjIyMTE3NDZFREQzNjU3OTE4RENFRkJDRDVENTMwRUEwCi06MTA3OTkwMDA0OTUxODQ1ODlGMzNGOTIwMTVGMDIxQzQ5RkUxQjQwNjYyCi06MTA3OUEwMDBFNzI1NTIzQTMwQ0UyRjcyMkFGREIzMTBCMjQ2RUY1NTdBCi06MTA3OUIwMDA5OUYwREQ5NTU5NDVFQkI3QzYzMEY4Q0MxRkNDRTA0MkM1Ci06MTA3OUMwMDAyQ0VDN0IxNTVGOTc4MDBCMUQ3RjBBOEM1RjkxRTVEQ0FCCi06MTA3OUQwMDAwMUZENTQyNDQ2RDg5QjMyNjE5RUY5QUY5OTI5RENFQjE2Ci06MTA3OUUwMDBFQzkyM0Q4MjU2OEQyQjY3RjAwQzlENTc2NTRFQjg3OTExCi06MTA3OUYwMDA2REMwRjFFMjYzRDlGODQ0RUZDRjgwNzEwOUYxQjJFRkM1Ci06MTA3QTAwMDAzMjY5MjFGOUMxRjY3MzM4QkVFOTc3MUZGQjRFODYzQTE5Ci06MTA3QTEwMDA3MzgyRjNEN0UyNkY4MzREQzJGQTYxRTg2QzExQUNBM0I1Ci06MTA3QTIwMDBGNjk4Q0ZDN0U4QUM1MzBGNzQ5Njc5RTYzMEUyNDNEMEFFCi06MTA3QTMwMDBDRENGQjZFQTMxMTVGREQ1RDk4Q0Q4NUY5RDREOEY3MDZECi06MTA3QTQwMDBEOTBDNzgxQTRDNTMwMzJDOUFBNjFCQ0M1RTBGODVDNzExCi06MTA3QTUwMDA5QkYzMjYxRjkyNzIyOTdFNkUzMUZBMjA3RDQzQjdCNEM0Ci06MTA3QTYwMDAxNkNBREY0ODYxRTNCN0U4NzQ2QjIxREY3Mjk3ODUzNDhCCi06MTA3QTcwMDAyMTVFMUQ2RTk4Q0Y2QjM3NDcyMTdFNkFFNzFBQkQyNkJGCi06MTA3QTgwMDBEQUNGOEY5Rjk3NThERTYzRjExMkZBNjdBRDZCRjY3MjBCCi06MTA3QTkwMDA2ODQ3RTIyMkVDNEYwMkZFNUMwNzhDNzNBQ0ZERTk0QUJBCi06MTA3QUEwMDA3OTZFQkY1MUExREZBN0I3QjFGRDI3RjA1MERCQzZFODYzCi06MTA3QUIwMDA0QkVDMDcwMUQ3MjAzQ0JEQUFGRDI0RjAzMTdGQjA4REVGCi06MTA3QUMwMDBEMTA1QTUxNzgwNzdDRENFMDhEQjQ5MzMxQkVCMDIwMTJBCi06MTA3QUQwMDBGQThDNTZFNUVCREI5MzZEMjc0NzA0RjMzNUYwMDdEMEJFCi06MTA3QUUwMDBDMTBFNjI4MTc5RDZGMjc5Q0VEM0I5RUU4M0ZENTU2N0E2Ci06MTA3QUYwMDBGNjFGMzQ1MEQ0MTYxRjBERTA3RTFGODg3RTZCRDZGRjE0Ci06MTA3QjAwMDAzQUZCNjQwMTIxQUI5MzBFNjEyQUY2QUQ2MUE4N0E3RjNFCi06MTA3QjEwMDA2RkU1Nzg2RjgyOTRCNjdCODJEMzRENEQ2MTFCRUVDQkJGCi06MTA3QjIwMDA5QTkzMERCODlGMkQ1MzE5NUZCMzFDMjM4RTUwM0MxM0FECi06MTA3QjMwMDBGMjQzQkVERTdCQjE3RDQ1NjREQjY0OTlDMkJERTI3MTc4Ci06MTA3QjQwMDBDOUQ2NDRGQUNGNEZBNEFCMjRFMjZDQTNGRDdEQjZGNUIxCi06MTA3QjUwMDBGNUE4MjUwMERGQUYyRUM4QTQ5OEFFMzc4MkFENzczN0UxCi06MTA3QjYwMDBFNzNCNUQzQjI5QzA5MURFMUI4QzI0Q0M3QTJGQjczRkNECi06MTA3QjcwMDBFMjNCMjIwMTNDNkIzOEVDQkI5RTJFMUZGQjI5QTUxNzc0Ci06MTA3QjgwMDBDRkNFQzFGNkFCRTg5MkNGM0UzREVCRjY0RkU5QkNCQkEyCi06MTA3QjkwMDA3NjRDQjRDQjQwMzY0RDRFQTQ5RjQwN0M4NDdEM0JBNUIzCi06MTA3QkEwMDA5RjM4OTk0Qzk1MjhERTM3QjRCRDFFMzU4RUI2RkJGQzQ4Ci06MTA3QkIwMDA5N0EzRjM4MTZGQkZDREY3RkQ5OUU3RTVGNTAwOTdCQjdDCi06MTA3QkMwMDA3RUY2RUM3NTUwNUVFMzk1NjI0RDMwQ0VDRUM3RkY5NUU0Ci06MTA3QkQwMDA0MkZCQTlERTUxMEYxMDI2NERCRjdDRDVFOEE3RjU3NEY2Ci06MTA3QkUwMDBERTZERUNGQkNFQzEzNkE4RjdGOTEzRjc1RjA3RjA2RTM4Ci06MTA3QkYwMDA2QTZCQzJGMjMzNEY2Q0MzRkM2QjNGN0I3NkRGM0Y2ODJFCi06MTA3QzAwMDBCRDVBNjc5NDFERUE5RDc5N0UzRkUyQTVENkE1NzdDMDRGCi06MTA3QzEwMDA3QTA3QTJFQkNEQkJGNjMzN0VEOTI2RTE3RTIzNzMxOTFBCi06MTA3QzIwMDAxRjEzNzQyREU4RjdGMzlGMkQxRTFCMkEzN0M0RjcxNjc4Ci06MTA3QzMwMDAyMzk3M0I4Mzk4MUMzOUNCRjc2RjREOTlBNTA1RDJCMzk5Ci06MTA3QzQwMDBDRjQ0Q0M4NUY1QkE4REZFRUM2ODk4Q0YyODQ2MTcxRjM3Ci06MTA3QzUwMDA3MTc4RDRCNkFEMzFCODJERDgxRUZCRjk4MEVFN0I0OEQzCi06MTA3QzYwMDA3MzI4N0Q5RUEyRjQ0RTZCRURCODUwMDBFM0ZEMEFFQjQ1Ci06MTA3QzcwMDBEMzdBMjUxMTE0QkUzNzJGMzgyRUMxN0MyMjQ3MzUxOEYwCi06MTA3QzgwMDA2QTcwOUVCRjY0RTU3NEQ1QTFFNUM1RUIxODNENkFFOTRECi06MTA3QzkwMDBFMDBCOUIwNUVCOEI3RDkwQjJCQjMyNEQ0MTNFNjBCMjU5Ci06MTA3Q0EwMDAzMzNFQ0VENjk3NTJFRDZBQjJEMkVGRDdBRjczRDk2NUQ1Ci06MTA3Q0IwMDA4QUM3OTc0RjFGOUU5QzRBRjMzRjFCMjExNTIwRkU2NUU0Ci06MTA3Q0MwMDA4OUM5Mzk4RjA1QzdBOTVCNUY0NjRFRDBGOUVBQTJEOUE5Ci06MTA3Q0QwMDA3RTQ5QjAxMUZEQjVDODA3QjYzMUJBRDcxM0JEMDVGMjVDCi06MTA3Q0UwMDBGQTAwRjI4OUJBMTYyRTA3NzdCMDc5MTI3MzIwNjM5NkRDCi06MTA3Q0YwMDAxNURCNTlBRThEMDlDRTgzQjZCMzU4MzAxRkM4QjgyOUVECi06MTA3RDAwMDAwN0U0OEU2NzJFQ0ExREM1ODhGMzNEMjNGODAxRjFFNDEwCi06MTA3RDEwMDAyRUNDMDlFRUI3MDQxRDcxMDFGRTEzOEMzNEI1MzA3RUY0Ci06MTA3RDIwMDA1MzQ5RkI0RjhGMkU0RDhBMkUwQUE2MDk4MzU4QjkxNjQ4Ci06MTA3RDMwMDA0RUI3RjBGMjFGNDUzQjkyQTIwMTVFM0I2MzU1RjI2MEU1Ci06MTA3RDQwMDAyMEJFRjJEQUNEREQ0QzZFQkY3MjFDRTlEMDBENzQwODk2Ci06MTA3RDUwMDBFM0JCNEVBQUU0RjY3MjY0QUU5NDBFRjcxQzQ3M0E1QzlECi06MTA3RDYwMDBERUNFRjhBQkJCQkRENEI4OENBNjlCMjUzMjE3RTZFRkIwCi06MTA3RDcwMDBFNkY0MDQ3NDY0QTdGOTlCQTJBMzcxN0RFRUVCRkNEOTMxCi06MTA3RDgwMDBDMEE3QkEzOURENzVFRjYxRjRGNjg2NEVFNzAxRjhCQzlECi06MTA3RDkwMDBCMTdERTQzNjkwMDc1QUY5Mjg1NTNCMTFERjZFOEE2RkEyCi06MTA3REEwMDA5MzA0N0FENkJBQzNBMDY3RDU1NTEzM0JFQzU3Rjc2RTQ4Ci06MTA3REIwMDBCRTFGMUEwOEVFMDc3NzdCRTU3MkU4MkYzNTZFOUE1REQ1Ci06MTA3REMwMDA5NjUwMkY5OTlDNEFGM0VFNUE1MjA0RkIyRDY1NkJEOUJECi06MTA3REQwMDAxRUEwMEJEMjJFOTFBQjIwNUZFRERDMERFREFGOEZBQjczCi06MTA3REUwMDBCM0NCOTkyMEY3QjYyNzk5NjlGREVCNDcxNDYzRkJDRDE4Ci06MTA3REYwMDBFOTRBMjlGNEU3QTkyMEI2MjcyMTZGNzBBMTNDREI5QzUyCi06MTA3RTAwMDAzQ0QyMEVGMkNFRUREQTg4N0ExNzUxMDZEOUExOUNCODkxCi06MTA3RTEwMDBGNDZCQTFCRURCQjM4MDZDOTJDMkVDRTMzRDkyMDNDQjZBCi06MTA3RTIwMDBCRDkxREUwOERBN0U3QTNCRDM3RkRDRUQ2QzFGOUYxM0I5Ci06MTA3RTMwMDBGMDExQTlBMTczMTE4Q0Q3RkQ4Mjg5NzhBNDIwOURCRDcyCi06MTA3RTQwMDBCOTY3MEE5M0IzMkY5QTUwQ0U5RTZENzQ5MDEzNTQzNDMxCi06MTA3RTUwMDA4RjhDNTYxMEFGMDI4RTM1QUQ5OTNBQTA1QjQyNjY5OTcxCi06MTA3RTYwMDA2MDFFQ0JGODNDNUEwRDRDNkU0NDczMzk5MDc1MkY5QkI1Ci06MTA3RTcwMDBDNzcyQkUxRjk2NDdFQjc4NkFFNEZCQUY5NUM5MDU5QkI2Ci06MTA3RTgwMDAyNzE3RTRFMDM5M0UxRTkyNDUwMjk3NzM3NEU4QkFFNTdECi06MTA3RTkwMDAzRURDMjdCNTRGQjNGRUUyNEM4RUJDREI0MkU4NTVFODMyCi06MTA3RUEwMDA0NzVBN0E2Q0UyRTNBNjZDM0QyMDAxMzM0OUQ5NUFBNUMyCi06MTA3RUIwMDBEQUU3RDc1NzEzNUYzRDVERTdGNTVCNzVCRTg5QjlBODczCi06MTA3RUMwMDAzN0REODJGQzdDODM5MTZDOTdGQUY3Nzc0RjM0RTM1QjY0Ci06MTA3RUQwMDAxNUIxQ0UzQzA5RTREN0NEMTZENDNGRkFGNkU5MjA4Nzk4Ci06MTA3RUUwMDAyRTAyRjRCODdDQzlERTg0QUI3MDE2RUE2OEJERDMwOUYzCi06MTA3RUYwMDA1NjNCRTBFRDQ3MUM4RTVBN0RBQkFGQkQ0NjBGOUNEMTgzCi06MTA3RjAwMDBFQUM5MjU0MzY5RTk4NjQxNzMwMTlFNTQ1RkI3OThBMTg4Ci06MTA3RjEwMDA5RDhEQjZBN0Y1MTJCNjhGN0I2MjEzRjJBQjI2RUNGN0Y4Ci06MTA3RjIwMDBGNjY4MUJFQjI3RDY1OUQ4MDAyQzJFQ0JCOThFQzkyNzYzCi06MTA3RjMwMDBBQjNEREM3QUQyQTM4NTlFQkQyODRGMDdGNDMzREI4MkFDCi06MTA3RjQwMDBGQkUxQzdBRjQ4NEIxOUJENTE0MTI4MDEzREIyRkQ0MThFCi06MTA3RjUwMDBFOEZFNzg1MjQxN0E0NDNEQ0FEREUwRjQ4NkE3NDdCNjkwCi06MTA3RjYwMDA1RkRDNTRBRjAyM0Q5QkQyRTM1QUE2Mjc1QjA4REI0RjkwCi06MTA3RjcwMDA4QzJFMjNBNzMyNzkwMDdDMkI1NDlGMTVGQjU0QkJFRjJBCi06MTA3RjgwMDAwNUZERjZFREZCQ0JEQ0VGREQwNkI2MUZCQjI5MUM4MDQzCi06MTA3RjkwMDBERUZCRThGQzY1NDZFNzlCMzZEMEZENDhDQjM3RDFGRERDCi06MTA3RkEwMDBEODE0QzJGRkI1RTcxRjk4Mjc5QzA3MDRCRjNENjY3MzJFCi06MTA3RkIwMDA3NjAwNUY3NDZGN0ZBQjE5Qzk5NkYzNDdGN0NCM0ZDODY0Ci06MTA3RkMwMDBCRTk4REU2NTg2Q0FCNDVGMzNEREFGQTFGNDYzQTZFMDc4Ci06MTA3RkQwMDBCNkU2NjNFQTAxMzkxMUI5NUVBRDQ3ODlGNDgzNjgyNkQ0Ci06MTA3RkUwMDBCRkJFQjFERTM4NDJEMkEzREVDM0YxNTVBQjczN0QwMDE0Ci06MTA3RkYwMDA3QzFFRjQ0NjRBMTEyNDYzM0REMzFCMTM0MEU2MDBERTg5Ci06MTA4MDAwMDBCNjQ3N0E0MTNGNEU0ODIwQUVFN0MyQ0M2NzNGREY2N0I0Ci06MTA4MDEwMDAwMjlGRTJGQzkwMTBDNUVBRjdGMjdERkYyOUFGRjc0RjBGCi06MTA4MDIwMDA5RTg2OUM0QjcwM0YyODNBRDc3MTIyMEYyQzhGNDQzQjgxCi06MTA4MDMwMDAzQTJGMkMxN0YzRTkzQkQ3OThEOTdDMTNFRUNBREVCRTUyCi06MTA4MDQwMDAyOTA0OEZDMTdENzU3NTNFRTAzN0VCNUU5RjdFQTkyNUMzCi06MTA4MDUwMDAzODhFOTA4QjVBQkE4MUY5ODNGQzgxRjU1NDhFMUFCODA4Ci06MTA4MDYwMDA1RUVCN0U3RTNFRDNEMDcxMDRERjVGN0JBOEI4ODJCNDI2Ci06MTA4MDcwMDBENUUwRkIyQkVFQzczNTU2MDJGQTIyMjUwNzQ3MkM5RDhCCi06MTA4MDgwMDA1N0ZEQkVFMTZDMUY4RDA4NjQ0M0ZCRUE1OEQ3NEQzMUE0Ci06MTA4MDkwMDBCNERGMzE5M0Y4RkVBMERGQUJFMDlDQTAyNzFFNTMwQ0E5Ci06MTA4MEEwMDBFMERERTBGNTg3RTBGOUQzMThENjdGOEZENUVDOTFFOUQ0Ci06MTA4MEIwMDBGRUI4MjNENjE1MERFRDNENjVDNEVFMDMzOTczMDdFNTEzCi06MTA4MEMwMDAyN0IwNkY4OUFGMDhGODREM0RGMTQ3MDE5Q0M3NTg1RDU3Ci06MTA4MEQwMDBGMTMxNDBCRjcyNjczNkM5QTJGQzU3RjJFN0MyRjc2M0JECi06MTA4MEUwMDAxMTUxQjk4NEY2RjM3MUZCNkY5Rjc5ODVCNjVBRjhDQUJFCi06MTA4MEYwMDBCOTg1REYwM0ZBN0EzMTIyMDNFOEUyMThENTk3M0I1MUJDCi06MTA4MTAwMDBERjU2MDY4M0JFREQ0Qjk0QzFCNjMwRkM1N0E0MEJDQ0MyCi06MTA4MTEwMDAzQUIzQkUyMDk4M0Y2NjU1OUYyRjQ0N0E0RDBDQzM2RkVCCi06MTA4MTIwMDBGREY5MTRFMjg5ODVGRTA5OUVCRjdCNjIxNEY2NUQxRjhFCi06MTA4MTMwMDAzMDgyRUE1NjdGM0U4Mzc4Njg3RjFGRUI0ODc1NUI5OEY0Ci06MTA4MTQwMDA3MTM3QzUzMDdBREI0REM4RDQ3MEU1RjdGMTcxNzYwRjIxCi06MTA4MTUwMDA2NUZCMzBCMDRERjIwMjdGQUM1RUJGRTFDRjMyRTUwNzg4Ci06MTA4MTYwMDBENUVCQUMzRTRDNjkzMUU4NkZENTM2OEY0RjQ3RjNDNzNFCi06MTA4MTcwMDAwQzhDMUZEMTdGQjNDREM1NDFCOTQ3RUJFOUM3MDMwRUM2Ci06MTA4MTgwMDAzQ0Y0MjA0QkY5RTA1MjJFQjc5NjM1QkNGOTI1RDgxM0I0Ci06MTA4MTkwMDBBQUY1QzQzQzlFRjZCM0RDRUMzQzk4NEE4QjNFQjMyQzZCCi06MTA4MUEwMDA4RjAyQjZCRkYyM0JCNzI1ODA1QzRBNUNEMENBRUMzMjg2Ci06MTA4MUIwMDA2NDkyMERGNDVFQzkzMTQzQkUxMDc5MzEzRDRCOEZGQUE0Ci06MTA4MUMwMDAzMUUyOUZFMkVCOEIxOEU3NENDMEY3ODJDMTA0RjU4MEU3Ci06MTA4MUQwMDAwNUI3NDU3QTNEMjE3Q0QwQ0NFMUExQTU5QjRGQjg3RTY3Ci06MTA4MUUwMDBBNUVEN0Y3NjZDMTk4MUZFM0FBMjlDNzM4MTNFMTZEQzY4Ci06MTA4MUYwMDA3NjRFQzVDRkJBMjVGRjUzOEYwMjVEQURCMURBOUY2NENECi06MTA4MjAwMDBERDY1Mzg0M0U4RkUzQjYyQkNGMzNBQzQ1MzRGNUU2NzFBCi06MTA4MjEwMDBGNkZBNENBMERGNDBDNjg3NjBDRkVBMzBEOTNDMEE5NDFBCi06MTA4MjIwMDAxQjExQ0ZBMkREOUYxQTI5RTNDQjBFRTY5NzlFMUUzNkM3Ci06MTA4MjMwMDAxOUU4NkIxOUIxMzcwM0RFOTdCNTQ0MTI0RjA4M0YwM0I1Ci06MTA4MjQwMDAwNTE4RThDMzdEOUU2MDNGNEIzQkRFM0MwQUZDRENBRDdECi06MTA4MjUwMDBGNzIzOUQyQzM1NUIxMDhGRUVGMzdBOUMwNzY5MzE3NDAwCi06MTA4MjYwMDBGOTQ1N0I4QUZCMjM1MThFREI2MDdEOUU3QkM2NDc5RjUxCi06MTA4MjcwMDAxQTQ5M0YyNkQyRUZCODdFRDdFREYwRkRBMUM4MjhFMjFCCi06MTA4MjgwMDAwMEZBNzg0QkY2MEVBN0YzRUYzNTJCODM2MzI4QkNFQTkwCi06MTA4MjkwMDA4RDk0MEU0NjYzMzc0RTczODhGRTQzRDJBQzZBRkM3N0VBCi06MTA4MkEwMDBCQ0Y1MjVDQzY3QjlEOTY1MDQzOUJFQzI0MUNGQTczMjI4Ci06MTA4MkIwMDBFMEM5NTc2NDFCMTU4QUVGRjFGMjg1OTE5NzhGRUY0NTVFCi06MTA4MkMwMDA3Q0JGN0Y2Q0E0RjQxRjY2MUZEREM3RTFERjIzRUFBNTM2Ci06MTA4MkQwMDBCMDdERjI3MTA2QTk3RTBFRDI2QjY4NEFEQjdEM0M5NEJDCi06MTA4MkUwMDBFN0YzNzkzRTlCRDc0QjYwRjkxRDdDOUY3QzlDQ0JFQUUyCi06MTA4MkYwMDA2OUM3RjFDNTMwRkUzNjNCRDZCMTE1RTA0NURCRjk4Q0Q4Ci06MTA4MzAwMDA0MDE3RkIyMkJDQThCNzE2NTI3RTA3RkM2RDZEM0FFQUY3Ci06MTA4MzEwMDBBRDk0QUZFREMwN0FEOUM0MTc4REY1NEMyODU3NDgwM0ZBCi06MTA4MzIwMDBFNTdCQjBDRjhCMTQ4NENGQTY1MjRBMjdCNDNDQjBENzlDCi06MTA4MzMwMDA2NERCQUUwNEYxMkFGMEE5QzU2MzdCOENGNEVGQzlDM0ZBCi06MTA4MzQwMDA1MTkyM0VENDhFNDJFNTYxN0IwQ0IzQTMxODYxN0ZEMjdCCi06MTA4MzUwMDA5OTE4OTk5RTM2MENGMTg1NzQyMjVGM0VCRTZFOEM2MDMyCi06MTA4MzYwMDA3OEEwRkJGNEI1MThENDdCN0QzOUExRkJFNTA0Qzc5NzUxCi06MTA4MzcwMDBFMDY3MUYwRjUyRTNCNThBRTNFMTZENUU2RjUxOEM4REFDCi06MTA4MzgwMDBDOTRGN0IwMEY3RERDNzMxQUM3RTVDMTY5MzQzNDIwRkNCCi06MTA4MzkwMDBGRjAzODdDQjREOUE1NEM4OTUzMTUzRDVGQUM1NEQxQzcwCi06MTA4M0EwMDA5RjM3QzU0NDA5QkM3RTA4RjMxNUYyODhGMjE3NUYzNDg1Ci06MTA4M0IwMDBERDBGMEI1RTM1MjE3RjIxMUIwM0Q5QjBGRjY4QkQ2MzQ0Ci06MTA4M0MwMDA1ODZFMEEyQzhBQTU3MkU0MjZBQURGMThGM0IxREQyMkMyCi06MTA4M0QwMDA2OERGRUYzQzNGNEFEMDg1OTU4MDlDM0UyNUQ2NTMxOEY4Ci06MTA4M0UwMDA0MDdFNEZFNTFEQUU2QjI5QTE3QzQzQkEzNEZFMzdEMEU5Ci06MTA4M0YwMDAzQUM5OTRENjg3MEM1NkQ4Rjk0RUE2MDMwMkVEOEYyMEMxCi06MTA4NDAwMDAwQUY0NDdFMUZFRTc1MEI4NkJDNzNCQzZFOUUwOUYzMThECi06MTA4NDEwMDA5MjFFRjE5NjQ3RjI3MDlGQkRGRjg1NzUyMUVERjI5QzhCCi06MTA4NDIwMDBDREVDRDE1MUJFRkZCOENFNzUwMUZBRTlCQUZEMkRENDFECi06MTA4NDMwMDBDQjhGMTk3REQ5QUQ5NjMwRTU0NkRGNjMwRjQ5QzFGMjg4Ci06MTA4NDQwMDBDNTNGOTczRDQ2Q0EyRjc2Nzc3NkZERTQ2NkJBRUVBNTFFCi06MTA4NDUwMDA5REIyMUQ4NjVDN0FFNzVGREYxRDAzN0E3NUE3QzEwRUFBCi06MTA4NDYwMDBFNzQ2MkFERkVGRDVDM0JDMUI5ODFFNzk0Q0E3QTY4MzJECi06MTA4NDcwMDBCM0RGNTU5RjczRDI2MjE5QkVBOERFODNGQTlDRTAzQjNFCi06MTA4NDgwMDA0MjdFREY0QTdDNTc4MTVDNUY0NjFDNDY0OEZGQjQ2NkVCCi06MTA4NDkwMDBENTBDNDJFMUI3QzJCMjBFRjlEMUU3NkJBN0ExMUVCQzYxCi06MTA4NEEwMDA5Mjc4QjA3QzU5OEJFMTRGQTFGMjYxNDVBQjNBQkZFQUJCCi06MTA4NEIwMDA2MTc1RkU1NkFGM0FERjY3N0YyRTBGMkZERkE3QzczMkY5Ci06MTA4NEMwMDAzQTNFNEJEOTNFRTAzRkIwQzFFNDA1M0Q0ODVCQUY5ODMyCi06MTA4NEQwMDBEN0NCQTQzQ0IxMTNGODI0OTVGQjYwNDc1ODE3RTE0ODZCCi06MTA4NEUwMDAwNEJFQkU2RTZGNjlFMkM1RUM3Q0Y1RTdBRjIxREUxMDFECi06MTA4NEYwMDA3RDIzQTgzN0U0MTI2RjZDRkY3RUNCNjMxNTg0MjNGNEQxCi06MTA4NTAwMDBBQkYwNzFFMEJDNzFCNjJDRkMzQTI2QzYwQTNENjUxMDkyCi06MTA4NTEwMDBGNjI3QkU4QjdFODJFMzQ1RTEzQ0VBQ0Y5QjA3OTg4RjJFCi06MTA4NTIwMDAwNURCOUY1RDE5N0U5QzFCRkFDNkIxQTlFNDY0QjA3RDkyCi06MTA4NTMwMDAxQzkzNkJGQzFDMkRFOEEzRkU3QzEyN0UxNzc5QTEwNzBGCi06MTA4NTQwMDAwN0RCQTUzMUZEOEFBNEQ5NEU0NTA2Rjk5NEIwNjM4QkFCCi06MTA4NTUwMDBGRDcwNDIyMkU2NjRCNDNCRERDRkNGRUJGNjVDQjA1RjRBCi06MTA4NTYwMDA5RjAwM0QwOEY2RTMxNDY1OUY5RjRFNzFEOUY3QzY2NkRDCi06MTA4NTcwMDBFQjg3MDZGNzhCNzYxRDk0QUVDRUY4NDNGOEVFQjI1ODMzCi06MTA4NTgwMDA2QjFDOEU2QjI3NzYxODU3RDBGQkEyREIyQjA2QkJFODQzCi06MTA4NTkwMDA3Q0ZGNzg2Nzc5QTI2QjU0MjgzRkY1MzBCRjg5NTFFODlBCi06MTA4NUEwMDA1RjE2OTU5QzI1MUEzOUJDQUNGRDJERDRCQkE4QkU5NTkxCi06MTA4NUIwMDAwRDRDRTdEM0JEQjcyM0JEQUYyNENFMDRBMEYzOUVCREMxCi06MTA4NUMwMDBDMzMzNUNGRjg2RkMxNUYzOTlFNTU5NjIyMDk4QTc5QjlECi06MTA4NUQwMDA5OEVFQkYyQTNFOUY1OTFENENFRkQzOTkxRDA2MUNDNzJDCi06MTA4NUUwMDA0MTE0NUIwMjFFQTVEOTdDMjlGM0Q0RDNGQzg0QkVGOUM3Ci06MTA4NUYwMDA4MzkxOEU5MEYxN0NGRTEyQjRBN0YwOURDMDUzQjJENDRCCi06MTA4NjAwMDA5NTA0RjMzNkMxQjg3NEJDMDhFMjREODJCNDY5QUM1RDIwCi06MTA4NjEwMDA4MTc0QTJFNEQ0QjM3OTMwM0M0RjI2MEQ2OTUwNUY2NzcyCi06MTA4NjIwMDBGNkNCNkM5RDc0MDYwOUQwQkUwRjVFOThCN0YyRkNDNkZGCi06MTA4NjMwMDBEOUJEOEI1NkMwNzc4QjE1Rjk4ODkxQ0Y2MzQ3MkNFNTUwCi06MTA4NjQwMDA4NzY2RTQyRjY2NThCN0M5RTJGQjFDRkQ2NDNDRjU5NENECi06MTA4NjUwMDAyOUI4OEYzRDQzMDlEQTNCMDY5MTM2MDJFMzVBMkNFN0VECi06MTA4NjYwMDAzQ0IwNTgxQkIxNDk5MDhGQjBGNUZBRTBGQzcwQ0U2NjczCi06MTA4NjcwMDBGMUU4NDYyMzlGREMxOTBCN0M1MjdBNjcyNUUwODVGMkVFCi06MTA4NjgwMDA2NTY2RkYxOUE4NUNFRkMzNzNCN0UwNzMzMTdDN0U0RDVDCi06MTA4NjkwMDA5Q0NGMjUxMzA2ODc1OEUyQzBGMTFFQjBBRTlDNDE0MDI2Ci06MTA4NkEwMDA4NDU5RDY0OUQwN0U0QkQ0NTRGNEVGMjUwMEUwNjk3OTQzCi06MTA4NkIwMDBFQzU0QkQ4QTZGQzUzQkQ1RjlDNEI5RUE3Q0IyNEI5RDc5Ci06MTA4NkMwMDAzN0QzOTMzRkU4OEI5MkNGOTk3NDIxMTZDRjU5MjNDMEFCCi06MTA4NkQwMDBERTYyRTBGQ0EyOTlDRkVCMDhBNDc0M0RFRjcxM0VGRDkxCi06MTA4NkUwMDA4REY1MTNCQkZBQkNFRThFMzExMkI0RTMyNTk4Q0REMEQ0Ci06MTA4NkYwMDAzRkQ1NTdERThCNjVGQUNBMjcxRTI4OTcwM0M4Q0ZGM0VDCi06MTA4NzAwMDAyNkI2RjlDMEFFRDM3QzgzNjRCRjhCN0U2RkI2MkExQkJFCi06MTA4NzEwMDBGNDk0NTQzREQzMjQ2NkM3RDFEQjRBRjVCNDdDNUI4NjIwCi06MTA4NzIwMDBDREJFODlFNkVCQzE3RTFEMEJGM0I3RDUzQzhERjY0OTc2Ci06MTA4NzMwMDAxM0FCNDcwMkNERTA4RkRDQjZDOTY2ODM3QTcxRTU4MTYxCi06MTA4NzQwMDBDOTQ2RDA4QjU3MTBEQjc2MTI4NkJFQkZBMkZCODZDRTAxCi06MTA4NzUwMDBGNzA5Qzg1M0JDNDg5QzVFMjIwRjI5RjM3MTBEQkM3Q0ZECi06MTA4NzYwMDAwN0ZDOURDNUYyMTM4QkUxNUNDQUZFNjU3NUU0NzUzQUEyCi06MTA4NzcwMDBDMEVFRTA5MDUxMkVENjc3RTRCRDZFQTFFMzY1Q0RDRTdDCi06MTA4NzgwMDA0MzNCQkNCMzlDRjk3MzA5REZGNzYzMzRGQjZBNUM5MDJECi06MTA4NzkwMDBDRUIxM0M4RkU3ODc3NTcwQkI2RTlDODlGOTZCNkQ3NEE5Ci06MTA4N0EwMDA4ODYyNjYzNkMwRkE3MThDRkVFRDQ0RkM2M0ZCRjI1QUI3Ci06MTA4N0IwMDAxMkZDMDdGRDk1MDdGQjQ3M0UzNDI5NTgxQ0RDNjc3NDAzCi06MTA4N0MwMDBBODdDQjNCREE5OTZENjFCQTNGN0VEODc3RDNDOEVBN0U5Ci06MTA4N0QwMDA3OTNDN0RBM0Y0MDY5NEJGOUQzQThCNjJENEIxN0Q2RDQ0Ci06MTA4N0UwMDBDRTAyMTM4NjUzMDZCODE0REI3RUQwMDRGRDRDOTA3Qzc5Ci06MTA4N0YwMDA5ODY2NENCREJGMDlBNjVGQzVFRDQ3RDE0OTQ2RUYwNjU3Ci06MTA4ODAwMDBCQThFQTYxMjhBNjdCNDc3RkNGOTIwRDhBNUU1MDc0OTg1Ci06MTA4ODEwMDAwMUUwRTk4ODQxQzgzOTA3OUVEMzE1N0ExQ0ZCMUEzQTUyCi06MTA4ODIwMDA5ODZDNDBGREZDMkY5MzJBRjAzQjAxRDU4Q0NFQkJEMjM3Ci06MTA4ODMwMDBDNjE2MjFCRTBGMkM1Rjc1MjgzRjZBRTM2NEU0MzdCMzg4Ci06MTA4ODQwMDBBNjMyQkY2QUZENUNCMzU3OTI0MENFMTBFNjc3RDJCQjJBCi06MTA4ODUwMDAzMjZGMEFCMTk3MDgzRkM0RkIwNjMyNzc1Nzk4RjM0NDRBCi06MTA4ODYwMDA2RDFDRDM0RkFCNjYzMDNCNkZGRDQ2QTNDQTdGNTMxREQzCi06MTA4ODcwMDBDN0VDNUUzM0UzMjY4RjhDNDM3OUM0RkNBNzc5NzE1QzI3Ci06MTA4ODgwMDA2RjFCNDE0NjAwOUYwQUUxMjM0NTUwQUZBQkY0RUQ4MUQ5Ci06MTA4ODkwMDBGODhDQkE5Q0YzOTkzOThFMDIwM0VBRkQ5Q0RGMDhCRTdFCi06MTA4OEEwMDBFRTFDQzRGNkYzM0M0MkQyODFBRTY3OTMwNkU0RkY4NzI4Ci06MTA4OEIwMDA0QjZGNDU3RTczMTNGMTE4MDA2RjFGOTVCMTc4MDIzMTJECi06MTA4OEMwMDBFRjU5NTNENTdBRDIxQ0E3M0E3RkYzNUNBRDFFQzVGMEExCi06MTA4OEQwMDAyMUM2OURFNzUyOTc1NzA5M0Q3OEFBNUEwRjVFRjBGRkNGCi06MTA4OEUwMDBCRThBNDZCOTlBRjg1NEREODUyMUUwRTc2MEY2MDBDMEZCCi06MTA4OEYwMDAwQkYzNzNFODkxNkVEQzFCOTkzRkJDQkUzREVGOEQzOEU2Ci06MTA4OTAwMDBEODY3NzcxMkJFQ0Y3NjQ5Q0JEMUZGQjI0QjVBMTE4MkNFCi06MTA4OTEwMDBGRkQ0NUFBRjA0NzI2NEI4NTVEODdEOThERUU0MzQ3OTM4Ci06MTA4OTIwMDBGNzgzREZDMzU5ODMxMjkxQkNDRUUzNDkwRTQwM0M0OTIzCi06MTA4OTMwMDA3RTkwQkVBRDY1NTYxNjU3NDExQ0I1MzA5RjM0NUJBNDgyCi06MTA4OTQwMDAxREY0RkUxNjVEM0VEQTY1NUJBMkFDMkEzQkZBQTYwRDZECi06MTA4OTUwMDA0QTA1RDQxM0Y2NThDNTQ0RjI2RDlDNkVDMjlENzdENzc0Ci06MTA4OTYwMDBDNTMxRkVCQTU5NjI3NjcxQ0YzQzMzOUUyQkUzQjM5QzdFCi06MTA4OTcwMDAyQTNGNDFCQzRDOEU4MjlENzA2NDlDMjJFQUEzRkQ2MzE5Ci06MTA4OTgwMDBCM0MxOTU1QzQwNTNBRjQ0OTcxMTE3RDI1RTI2MUJEMUZCCi06MTA4OTkwMDBBRUE4RTE0RkYxQjE3NkI0RUJDNzBGQ0U0MTNCRkQ5Q0UxCi06MTA4OUEwMDA4RTNDQjQyRjEyNEI4NEZEMkEyOUQ4RkY5Q0Q5REJGNENFCi06MTA4OUIwMDAxMEE3NTNERkIxNERCRkRDMTJBNEJCN0JFMkI4NUM4REM2Ci06MTA4OUMwMDAyNDkxNDBBRjdENzZCQUU3NEM2OEE3N0I1Q0U3RkM1RkZCCi06MTA4OUQwMDBBMENCNUFBMzBGRUQ3MTIxRjQ4QURGMDc5MjhCQUIzODNECi06MTA4OUUwMDBCRDE4Q0E5Q0YzNTZEMEY5RjVCQzZCQjRDM0Y5MTkxRDc4Ci06MTA4OUYwMDA2REI0RkZFN0Y3NDRBMzlENTE1RjQ1NTAzRTZEMkM2NTc0Ci06MTA4QTAwMDA3Q0E0MDdFQzVGNzQxRDlGNDU1N0UzRjk2MEEzRDQ4QUVCCi06MTA4QTEwMDBGMkEzM0I2NjMyRDJGMTZBQ0IwMTNDMDc1NzZGQTU3NEQzCi06MTA4QTIwMDAxODIyOUY1NkVGNTBFNzZCNDgyNzlFREY2QjlGRUU0NzVCCi06MTA4QTMwMDBDRkM4MTcwNTFGNzZFRjU2QjcyM0MzRDQ3QzM3OEZDQjJCCi06MTA4QTQwMDA4QjdDQTc3RDU2MDU0QzdEQUUzRDhCOURDM0U5NDE4NjUxCi06MTA4QTUwMDBBRUEzRTgxRDIzQjdFRjJFQjA5RDhBMDA1NkZCOTQ3NDk5Ci06MTA4QTYwMDAzMUZEQURDNzdBNUE2NkZCOUZDOTgzMjIzRThFNTY2RTkyCi06MTA4QTcwMDAxNTcxQkRFRDNBQ0FCRkUwRkMyQUY0QjAyMkMyRjIwNzdDCi06MTA4QTgwMDA3NDFENzI5MjJFMzhERjQyREU0RUU4N0Y0MjRFMDg3QzIzCi06MTA4QTkwMDA5NTk2MTA1MjQyRjc0M0E3RTA0RjQzQzk1MEMwMzdFREI3Ci06MTA4QUEwMDAxRkY3ODkwNDkxNDMzMUQ4QkYwN0NFN0RFM0Y4Nzg5NDRFCi06MTA4QUIwMDAxRTNDMjBCNzNEM0FCMzE3RThBQjU5NkE0MDM5NjkwNjA2Ci06MTA4QUMwMDAzRDlGQTY5QjI0MTdDQTgzOTdBQTNEMzJDMDdCMkM2OTgxCi06MTA4QUQwMDA5ODM1ODNENjFCNkZFRThDMDQzODUxM0EzOTEyNEEzRkQxCi06MTA4QUUwMDA0REM0OTdCMTRCNTJEMTExOTY3NzQ1QkYxRDk2OEU4NEQ4Ci06MTA4QUYwMDAzQ0YzN0RDNEY0OThFOTc0QzVEMDRGMDUzODdFNjg3QTlDCi06MTA4QjAwMDA0MDYyRTdDODI5OTYxRkVCQTFGRERCQkE2OTQ4Mjc1M0VECi06MTA4QjEwMDA4OTU3MEZGM0FCQjBBOUYxM0YyNTQ5OUQ5RkE2RjRBMzU4Ci06MTA4QjIwMDAwRjhDQzM3MDcwNzg0RTFGQTEyRTc3MDg3RTQ3RDRGQzNGCi06MTA4QjMwMDAyRTkzN0M4NTdBMThGOUMxQzFFRjgwNUQyMTcyM0QxOUIxCi06MTA4QjQwMDAwMUZBMERENTQ0NzExRjZBRTlFMEVCQjg2RkRENkZGMkYxCi06MTA4QjUwMDA3NTVDMThCRjQ5MEZCNzEzNUY0QkZDMkI5Rjk2RkFEMzc4Ci06MTA4QjYwMDA1OUY3MUJFQkU1QTQxMDdBMTRGQkUyNjUwMzhCN0Y5MEE5Ci06MTA4QjcwMDA1RTY1RkVBOTEyMzMxOUU1MDNGQTJBNjQ3NjQ1QjEzRjEyCi06MTA4QjgwMDBBRTA1RkE4QzA5RDI1RDMxRkY5RTExQ0ZFOTZDMDgxOTUwCi06MTA4QjkwMDAwMjc0MzZBMTNEQzIyNzUzQkNFNEYxRkVBRTA1QkFDQjQ4Ci06MTA4QkEwMDAwRkVBMjNFMjVDRDE1NEQyOEZCRTMyQTUyQ0Q0NUY3MDgxCi06MTA4QkIwMDBERjA5N0RBNDQwNkE2QkQyNjcwMjFGQjlBNzA5RTYxQkQzCi06MTA4QkMwMDA0MjRGNDNFMzhCODAyRjUxN0FDMjdEREE0RkNFQUFDQjNFCi06MTA4QkQwMDAzNUY0MjZGMDJFRjRFNTUyRDI4MDc0MzY1QkE3NjBFQUI1Ci06MTA4QkUwMDBBQjVDODVGMkI1REMzMjVCMEZFRERGQUM2MkY0MzYwOUNECi06MTA4QkYwMDBFODMxMEJFQUFCRTlBNURDQUNDRTZCRTk5MThFQTgwQkIyCi06MTA4QzAwMDAxRDU3NEI5RjAzRDFEQjEwQTAzNzIxNUY2MzJGNEQ2RkEyCi06MTA4QzEwMDBEM0UzQkY3NTdBOUIxRTdGMTE3QUQzRDI5OUUwNUZCQkY1Ci06MTA4QzIwMDAyMjZDRTVBMDNGRDc1NzRCMjgwRjBBREUxREQ2MDRGOTZBCi06MTA4QzMwMDBFMTc1OTlBODRGRUY4QUI2QTM3RTVEREZDMENBMEIzQkYyCi06MTA4QzQwMDAxRDMyQzRCRDY0QURFM0U1OTlDRTcyQzhEN0FGQTdFNUM4Ci06MTA4QzUwMDBCNEVCQTIyMzJDMkU2NkQ4OURBQzNDRUZBRTg2RDdBREVDCi06MTA4QzYwMDBBMDY3Nzg1OEZCOTczRjZGOTZBMzY4QjlCNzk5QjcyRjVECi06MTA4QzcwMDA2RDJEODc3QzdEMEI2QkZGMTlGOEE5NDY0MzdDOUFCNzU1Ci06MTA4QzgwMDAwOUJFNUY3RDZGQTY5RDFEQUI5OUZFM0U5MUFGNzc5N0E0Ci06MTA4QzkwMDBGNERDRUJEOEFFOTVCNTVCNzVEMDNDODhFMEY5OUZFOTg0Ci06MTA4Q0EwMDBFNUQ3RjE3NTRFRENDQUQ2MTk3N0UyRkFBOTBBQTU4Qjg5Ci06MTA4Q0IwMDAxNTAxMEZFQTZGQTc3NEI1QzVDOERGMDYzODNGOTc0QTlDCi06MTA4Q0MwMDBBRDY5OTA0RUExRUMxNzUyODdEOURFMjIwRjY1N0VDQzlDCi06MTA4Q0QwMDBFRDc0ODg3QkUyOTlGRDQ1RjhGRjIwQ0VBMDMyNDQ5RkQ5Ci06MTA4Q0UwMDBCODI3OUVEOTYzNDVCRDg0MTg4QTAxQTA4NzQ3QUNBOEUwCi06MTA4Q0YwMDA1RjBCRkZBNEVGMjEyMjgxQkM4NzM1NzIzRDI0QUNCRkZFCi06MTA4RDAwMDA3MjRBNTYwM0VBMTE1Mzg2MDgzRkE1NUZCRjk0OEU5QkIzCi06MTA4RDEwMDA3N0UxOEJDOUUxRUM0MzNGRTJFMzlFRTY3MTEzN0Q3QTk0Ci06MTA4RDIwMDBCMjM3NTMwNzc0QjEwQjg4MjQwNTgwRjRERUFGNDE3RjVFCi06MTA4RDMwMDBEQjA1N0U0ODI2QTQzQ0E0MDRGMENBRjI1QkUzN0ZCREI5Ci06MTA4RDQwMDBBOTY1M0M4NUFGQUU0MUVGMDFBMTk2MjE2MURDQzlDQzlDCi06MTA4RDUwMDA0RUUyMUIxQ0Q1N0ZGRTUzRjRDNDY3QzQzODI2MzZGRjkxCi06MTA4RDYwMDA5NTRENTQxRTIzRDEzMTdFMzY4N0UzOEY4Q0JGMEFFOTlGCi06MTA4RDcwMDA3NzM2QzdEM0NGMDU3RjJBMjAwNUMwOUZFNjcwQkNEREJDCi06MTA4RDgwMDA2NEE2N0EzNEYyQzM1NjgzODY2RjNDMTMwRjcyNkFDQkEzCi06MTA4RDkwMDA4MEZBQkJCQTVDQzM1N0FBRjlCODJCQjlERTdFMkIwOTlGCi06MTA4REEwMDBBMDdFNzI0QUYyNjI3QTdBMEJEM0RCNkIyQzQ3NTBCRkZCCi06MTA4REIwMDBFOTc5ODRFOUVEQjVDNDhGRkE4RkQ2QkU1OUIzNTM5REQ2Ci06MTA4REMwMDBBRjZCNTNFN0VCREJENUY5OUUxQzBGOEVEM0IzQTVBRThCCi06MTA4REQwMDAxOEVDOEFENTBGQkY4Qjc2RUM2QUMxNUZCQzZBRkU0Mjg1Ci06MTA4REUwMDAxNTcxQzY1RjFFQkEwNkVENTFERjk4NkYzQzRENEY2RjhGCi06MTA4REYwMDBDNUFBQjhEMERGMDI5Q0ZBRUMzNTJGQjJGODE0Mzc2MTVGCi06MTA4RTAwMDA3NjgyMUVFQjg4Rjk3MDRFMjUxQTc5QTRFNTI3Nzk5Q0E1Ci06MTA4RTEwMDA5RjA4RkI4NkUwMkY3OTg0QzkyMzdBOEU3REQ3NDE4MjEzCi06MTA4RTIwMDA3QzVDQUJEN0Y1QzQ3M0JEOTc5RkQzODRGRTkzMDdGQUUwCi06MTA4RTMwMDAwRkQwRDMzNTBENDg2NDQxMzk2NDdGREIyNDg3Qzg5RjQ4Ci06MTA4RTQwMDA3OTg1NjZDMDczQkU5OUVFNjc4MDk3NkNDOTcxNTk1NDc1Ci06MTA4RTUwMDBGNEYwMDVDQTk5ODFDRjdCRUE3MjBEQkQ4OEYzRDYyRDU3Ci06MTA4RTYwMDA5QzVFNjY4MTI3ODU4RUZGN0JDOTgxRTdCQUMzQjczMkQ2Ci06MTA4RTcwMDA3QTk5NjM1OTg3RjRGQUQxNkE0NjJGRTJEQzc3RTVFN0ZECi06MTA4RTgwMDAzQzg3RkM0RENFNzk3RDc0MTI0MUY1NUU5QTFFNDkxN0UwCi06MTA4RTkwMDBFNzdDRTY4RkFGOTcxODFERDQ1NTdERjgxOEU4Q0Y4MjkwCi06MTA4RUEwMDAyRjFDNkUyNEYxRkExMDNFRDEzNENENjQwNjNCNEE5MzU4Ci06MTA4RUIwMDA4MTlEODNBQUE2N0Y1Q0JDMzQ4NENGMzgyMjRBMTMxM0Q5Ci06MTA4RUMwMDA0MDU5RUU4ODQ3RkI2QzVEQTQ3QTlDNjZBOUYzQkI3RjkyCi06MTA4RUQwMDA4MEYzRDI0RjIzRDE0RUQ0RkIzMDQxOTVBNDc3RUI3MDcxCi06MTA4RUUwMDA4Q0RCM0U2QjYwN0U1MjMxOUY1NTA3NzdFRUYzQzM3RTdECi06MTA4RUYwMDA1Q0ZGRUIwODNEOTU5RjM1OTJGN0M1NUE1QUI2QzRFNDFFCi06MTA4RjAwMDBDQTg2NzE2QTc0M0UyM0IzNjM3NkEyNUY1NzhDM0JCMDA2Ci06MTA4RjEwMDA1REQ2ODNGMkQ1RjgxQTkzQzMwMTY5MTBDNkUxRDJFRjhBCi06MTA4RjIwMDBEOUExRkVCNUQxODk4QzRGREYxMUVCMkE0ODg4MEZDQTMxCi06MTA4RjMwMDA0QjYxM0ZBNDUyOTZBNEM2MDRGRDI2QzFGODA2NjYzN0NECi06MTA4RjQwMDBGOTBCNzE1QzMyQkU2MTYzODg3RDlFQjYwRjFCOEY1NjM0Ci06MTA4RjUwMDA5NkMwRjhGNUY3MjlDRTYxREUwN0EzMURFNTMwOUZEMzUzCi06MTA4RjYwMDBEQzhGN0I5QUZCRkQ0RTQ3MzEzRkUwQ0NCRUZBMkM3NTdGCi06MTA4RjcwMDBGMUY0MzRGNzEzOUU4RTUxRkI4NzQ0QkRBNTA5Q0M4RUM2Ci06MTA4RjgwMDA3MkIyRDE2Q0RFQTgwN0JGM0EzMTZGMUM0NjQ5RUMyMUEyCi06MTA4RjkwMDA1MzAzQzY5MzJDNjA3OEVBRDkxM0JENkQ1Mzg4RkZBNTlGCi06MTA4RkEwMDAyRUExRjRGQjMwOUY3RkQ4OUMzNzQzQkFCQ0Y1QjgzMTczCi06MTA4RkIwMDBENDBFREYyM0IxRjM3NzBGQTc5NzlFMDg5NjhBNzFFQjQzCi06MTA4RkMwMDAxMjJBQkYwRjc4RUM5OUU3NDczQ0Y2RTVDNzhBQkMxMzM1Ci06MTA4RkQwMDBGQkVGOTlDMEY4NkI1RkZFM0IyQzRGQjhERDQzRDhGNTMzCi06MTA4RkUwMDAwN0YyRjc2OUZEN0I1NEQwQjA3MzQwMDRCM0NGNkJGRDNCCi06MTA4RkYwMDBGMzBCMDUzRkUzRkVGOTA1OUMxRjJERUM2MDdFODI0NUQ3Ci06MTA5MDAwMDA2NkQyOUM0QUNCMTc3NzI0QjI3MzZFOTQyNzVCRTU5Rjk4Ci06MTA5MDEwMDBGNzQ0NUU1MTNDODZBMENCOUVGNENFM0U3RkY2MjMyMUUyCi06MTA5MDIwMDBGRUVDM0FFRUNGQUMxM0VCREJBRDVFREYwMzA5REZCQTRCCi06MTA5MDMwMDAzRkZCODE4NDMwRkU2QzZERENDMzhCQTA0NzBDMEJFMkUwCi06MTA5MDQwMDA2MUFEOERDMUFENDJBRTJEMDc3QjZGRUY3MjgyNzFFOENECi06MTA5MDUwMDA2QkRGNUFENjA0RjZFMEI1M0YwMDBCMkFGMjMxRDRBN0Y1Ci06MTA5MDYwMDBFQjM4OUMwNzVBNTdCQzUzNDcxNDk1OUQ3RDEwNTE0MkNECi06MTA5MDcwMDBFNjlGRUM4QTUxRTU1MTQzMEY4OTAzNERBRDRFNTFCNTQyCi06MTA5MDgwMDA0RjZGMThBQUFBM0Y2NEZEMzVBQUYyNEM0RkJFMkE5RjIzCi06MTA5MDkwMDBENTcyQURBQUZFNTVBRDY1QUFGQ0YwODdBRjU3RDVDRjA2Ci06MTA5MEEwMDAyMzQzMDdBM0ZERUM5MDBDQjYyMTcyQjVCNzRBNTUzRTk5Ci06MTA5MEIwMDA3MkU3MkRBQUY2OUY5MTg2Q0RFMzY5QkRERDQyRkU3OTY4Ci06MTA5MEMwMDAxQzlEQTM4QTgzNzFDRTM5NkQ0QjU1RUQ5QkE0QjY2MjZFCi06MTA5MEQwMDAxRkYwNDY5RkU0OTM2OEJEMTUxQzVGQ0IzQjk5RkY2MjcwCi06MTA5MEUwMDA3NEZCNkE1NUZGNjdBM0Q4M0QxOEFENUY5Njc2MkVBMzMzCi06MTA5MEYwMDAxRUQ2MkU5MTQ3QTRGRTdFREFFQThFRkI5QjIxRUVBOEI3Ci06MTA5MTAwMDBCRkJGOTZGMjREREE2RTM1M0RCRjgwRkVBNkQ1NkY4RTlECi06MTA5MTEwMDAyNjcwM0Y1RDBBNDk2MTc0QURBNTBCMEJFQTdGQkQ1QjBDCi06MTA5MTIwMDA2NUI0MjdFNjkxRUM4N0M2MjNCQzBDQzRBQkY0Qzc1RkRCCi06MTA5MTMwMDAyRjYxNzZBRURFQTdBRDc2ODhGRjU5RjVENjMyQTQ0NzBCCi06MTA5MTQwMDA1MzkyOUEyRTIyMTQzNTVENDQ4RTUwRDM4NUQ1QUVBNjA3Ci06MTA5MTUwMDA4M0MxMjU2QTNBRDBDMjNEREFBMUE2MEJFMkE3RkY0MzNDCi06MTA5MTYwMDBFMDJERTAyQUUwMUUzQjU1NEQzNzVBNzhFNzkzMDBEQUIwCi06MTA5MTcwMDBEOURENUVDOUVFMjM2MUZDRTJFRERCNzA1RDk3RDIxRkE1Ci06MTA5MTgwMDBGNTg5NkFGODE2MUM3MDM0NTkxMDZFMkNCRTRDRTg2MUQzCi06MTA5MTkwMDAyNkFFRkY2OEZEMTM0MkFGODk0QkU0N0ExNUVGNDdGODFFCi06MTA5MUEwMDAxNzlBMjUwRkVBNTE3REZFQzIxMjVGODYyRjEzRjRBNzhFCi06MTA5MUIwMDAwNkMyRUM0NENFQTRDNEYwNzY0NkZDM0U5MDlENTFDMDVECi06MTA5MUMwMDA3NUY2MjAyNjJGNkI4ODAzRURFMTJCODgwQkY5RERDOTlFCi06MTA5MUQwMDBDQTVCRDEzRUI0Q0FGMjYzRjRCQjlFQUQ2MjdBNTIzNTJCCi06MTA5MUUwMDBGMTIyOUZCRkUyQjgwMkFBODc5MjEwRkJBQjE2OEU1MjAzCi06MTA5MUYwMDA4N0U0QjMwMkJGRTFGMjIwODU3NDA4NzlFMEMyNzgxM0Y2Ci06MTA5MjAwMDA0QTg2RTY2Mjk1MUY0N0FERTc4MkRGMzA4NDdGMDlCRDVECi06MTA5MjEwMDA1NzhDMjdFMDI5Rjg5QTE4Q0Y0NDFBRTQyNEQ4MTcxQTUzCi06MTA5MjIwMDAzRTQ3NDY2OEZENDg2QTNCOERCMEYzRTA2MDIxRkUyMjcwCi06MTA5MjMwMDBBRDVEMjY0NDBGNkU5MUU5MzhGMjkwQ0MyNjQyRjE1NzhECi06MTA5MjQwMDA2MDczQTBEREFGODg3NENFODdFRjI1RTZCNjI2QkRDMjc5Ci06MTA5MjUwMDBFRDEzNTc5MzNFRkJDNDgwRjJFQTEyRkVFODU5MUVDOTkzCi06MTA5MjYwMDBGRjY4NjY3RjNGQjRGMDZCRDNFNTlGRjgwMzZEM0M1RTBCCi06MTA5MjcwMDA1MjEwRUY1NTJGMEY4RjA3N0FFQTZGQTdCNDFGN0Q4NTI1Ci06MTA5MjgwMDBGNjIzRUIwMkIxQTFGNkMzQkVGQjA2OTIxRkQ3NzMxMzAwCi06MTA5MjkwMDA3MURDNEQ0MkY0MTAzNzY5OUIzQzNGMTNFQ0M0NTQ0RUQzCi06MTA5MkEwMDA0NjQxQ0FFQzU4QTQ1REFCMDdFQkQxOEVBQ0EzMkIwMUIxCi06MTA5MkIwMDBCQUFGMjEyMTdFREFDQzYwMzlFNkU1RkU3OTExMzc3NDQ4Ci06MTA5MkMwMDAyOTdERTI0MkEyOERDNzNGQjA3ODI3QzJGOUEwMzg1RjVFCi06MTA5MkQwMDAwRTc0OUUxMzcxMTQ3MENGMTZGQzIxMjI0RUE4Mzk5MTgyCi06MTA5MkUwMDA5RjgzNzM0OTJFRjQ0RkY3REJBNjQ0QjQxRkQwRkQyOUFBCi06MTA5MkYwMDA4NUVFQzdCRUI4MjIyQ0VGQjcxRjM1RUIxNzcxMTRCMjNECi06MTA5MzAwMDBCNTEwRUQ0MkNCNDJENzdCMTlGMDEwN0FDQjZGQTgzRTU3Ci06MTA5MzEwMDA4MEY3MzQxMjE1QTZENzBEM0FGNjgxMDM4QTBCM0I1NTE4Ci06MTA5MzIwMDA3MTlFRjU0NjdBODAwMTdCQzE4QjNDOEVBRjREQURBRjBGCi06MTA5MzMwMDAzRjlCQzhFMzkzRjgzOUU3NTJGMDFBMTgxRjNDRUU0RUYyCi06MTA5MzQwMDBFMEUzMzJGNTMwMTE3NzI3RTBGODQyN0ZCOEVGNTFDMTAyCi06MTA5MzUwMDBCNUVGQkNEODA3RjczREUxRTAyRUUwNzJBRUE4RjMyOUU3Ci06MTA5MzYwMDBDMDk3NkMzRDkyMDBGMEVFODg3MkVFODNGQUU5NDdGREZCCi06MTA5MzcwMDBBNzI0NUQ3MDVFMTU3MjE3QzZDQkY2QjZDQjc4M0ZDRkNCCi06MTA5MzgwMDAzRDgxQzU1QkI5RjdDOEM4MUFCQTNCNENFODM3QUQ2RTJBCi06MTA5MzkwMDA3RjFERjVDMkFFNDZDQTY4QTkxRTc2QTY5MTBFQTlCRjZBCi06MTA5M0EwMDA4OEJENDAwM0VGODFDRTQ3NjIzRDFGNjhENjJGRTI3NTJFCi06MTA5M0IwMDBFODNBN0Y3RjA5MzhGQzNFMUMxQzJBRTQ1MTgzRTE5RTc5Ci06MTA5M0MwMDA1NzVGOUM5MTNFOTA1MTE1NDIxRkRBNzU2Q0U2RjRCMEUwCi06MTA5M0QwMDA1NkVGM0MwMUZEMURFRjRDREIwQ0ZENTVDODFEMDc1MzNFCi06MTA5M0UwMDAwMDNFRUIyNEJDN0YzNUQxQzRFRUNCMjZGM0ZCNzQyNUM1Ci06MTA5M0YwMDBGRTA2M0JEQzM3NEU0QUIzRTBGREE5RTFERjkxOURFMDdDCi06MTA5NDAwMDAxN0ZFNzhERDZEMzE3MDRGNENGNDNGNUNEMkUxRkQ0RUJDCi06MTA5NDEwMDA0MjlFRkJFNDhFNDJGMDU3MkVCMDZGQTJCOTg1MjYxNjBECi06MTA5NDIwMDA5NzkxRjlERDQ4NUYxNkU1MjNBRjFBODkxOUY2QTM2MTE0Ci06MTA5NDMwMDA2ODAzREU2QjA5NDRDQjY4Qjc4QzkzQzkyNEEwM0IzMTI5Ci06MTA5NDQwMDA2RjcxMUY1NjdDODdGQkZBNzBFRjUyN0M5RkQ4MTQyOEVGCi06MTA5NDUwMDA1ODRCRDMwRTRFMEY2MkREMTNDQjAzMDUwRDk2MjBGQzQ3Ci06MTA5NDYwMDA0NTVDQTYxNjNFNUIzODNDRENGMUM2NjZEMDE3QkJDRDJBCi06MTA5NDcwMDBFMkZDQzk1MjYyRDMyMzlGNTk2NzY2RkJFNkQ4NTVFMkU2Ci06MTA5NDgwMDBGQ0VEQjNDMkI5RDQxREUxMTgzQzA2RjZERkZCMzI3OTFFCi06MTA5NDkwMDA5MjI2N0ZCMTM5MDY0N0UzRkExNUQ0QzdEN0Q5NThCQjBFCi06MTA5NEEwMDA2RTFFMDdCRkVFQTNCMjQ0ODg1RjhFNkYwQTFGNkZBNkMxCi06MTA5NEIwMDAyNEIxNzM1QzJERjdFRjhCRUZCNTdBMUZDNjhERDU0MkMzCi06MTA5NEMwMDBCQzc2NDFGMEZCOTVDNjZCOEI3OEZDMDFFMTEwQUQyN0IzCi06MTA5NEQwMDBGQUQxNzhFRkRDNzlCMTdBQUZGQzRCMEU3QkJFQkUzRUExCi06MTA5NEUwMDA0OTI3RTIwRkQxRUY0RENGNUI2MUUzMEI0QjkzRDhGOUU2Ci06MTA5NEYwMDAyQTE4MDdFOEM3N0JDMzdERjE4NTdCNEExM0M5NDVDRThGCi06MTA5NTAwMDBGQkVFRjMwRTU1REM5Rjg4Mzc3NzlGOUY4NDcxN0VGREJECi06MTA5NTEwMDBGQUE1RkQyOTk2NjA1Q0UxNDBGMERGOTJDOEU2RTU4Njk5Ci06MTA5NTIwMDA3OEJGODJEMEVGMEFGQkRFMzc0RTFDOEZERkYzNDdDMUQ2Ci06MTA5NTMwMDAzRUZENDVCQjhDRjdFQTdGNzE0ODM3NzU3Qjk4NzlENzNDCi06MTA5NTQwMDAyNzMxQjg1RDEzQUZDNzdEMzNEMjQ3MUNEQkMyOEMyRkU4Ci06MTA5NTUwMDBFQTg5RkIzNUUyOUVBQTc2N0VCQkNCRkM4QjYwRkUxMENGCi06MTA5NTYwMDA0NzFDNkVCQ0E1OUM4RUM0QkM3N0M3MzA3Q0I4Rjc5OUVECi06MTA5NTcwMDBGMDlFMDVFRDE3RTNCRDc3QzdGODU3RTJCRUIwQTlGMTNECi06MTA5NTgwMDA3QzNCQjdEN0VDQkVERTlGODFGN0JDQTYzMTNCQzM0MDI2Ci06MTA5NTkwMDBGNEUwOEQ3MkZEMDRGNUQ4OUI2OTY1NEEzRkM1RkEwNjczCi06MTA5NUEwMDBDOTE2QjJGRjJFNDUwRjQxQjhFQjU0NzhFRDBGNzcyMzYzCi06MTA5NUIwMDBFMjU3RjRGQkY5NjFCRTRGODlDMzAyRTdCNzI1NUNCRUYxCi06MTA5NUMwMDAyREQ5NTE4M0ZBQUYzODFGN0RGRUIwOENGMTE3OUYxMzUwCi06MTA5NUQwMDBFNjI3RjlCQzU1QzJGM0NGNTIxNzIxRUIyOTFGNUFGOUUwCi06MTA5NUUwMDA2NDQxMzM4OEI5MjU0OTg0NUMxN0MzQkVERjA5RTk0NjY1Ci06MTA5NUYwMDBCNTlGN0NGOUJERkRFQzg3MjQ1NEFFQUUyMDBEMjg1N0Y1Ci06MTA5NjAwMDA1NkZFNThEREFFOUFEQ0ZCNjdEMDlGQjRGRUZCRTFEQzcyCi06MTA5NjEwMDAyRTI3RDZCMTM5ODk5RTQ3NDBFRjI5MjZDNTIwMUZENjZGCi06MTA5NjIwMDAzRUY5ODUzMTRBMTk3ODFGOUNBNjdDNzc5ODFFRjhBRkMxCi06MTA5NjMwMDAxOUQzQUU0NjFCQTZCRjQ4NzIzQzk2NDRGMUI3MjdDOTYyCi06MTA5NjQwMDBCNTBERDI5RUY3NTlGRkJEQjVCRDRDN0U2QzhENDNCOUFCCi06MTA5NjUwMDBENTY0RkQyRUYyNzU3OTA4RTNFQkY3QzAzQjA5MTQxRUMzCi06MTA5NjYwMDAyNjEzRDM5NzEyNzQwRDcyMTRFQTJENUVBNDg3RTNGMUNBCi06MTA5NjcwMDA2QkFBNjY2MkRFOUUwNDc0MUZGN0NCMjk1MzMxQ0VFRkNFCi06MTA5NjgwMDA5NzkxMEU4MEY3QTY1MjQ3MUVEODI1MzY1NUIyN0I5OTgyCi06MTA5NjkwMDA2NjEzRjNCMzdCN0YzMUY2MzU3MDgzMEM2QkJCQkYwQzY1Ci06MTA5NkEwMDBDRUMxQjY4RUZEM0VCMEY3QjRFOEZFN0MxMEUyNTc1QTRDCi06MTA5NkIwMDBBRTYzRjE4QjA5M0FGRkZFRDQ5MEYxRTIyM0JENDlFMDlECi06MTA5NkMwMDA4NzhGMUY2OUM0Mzg4RjM4QjkzNEFGMjEyNDVFQ0FDRDYzCi06MTA5NkQwMDA3MUQxREI5RTg1NzZDMjFFODNCMDFCQjY0NUUwQkRBODY2Ci06MTA5NkUwMDBEQUExODM4MThGNUM0MzE4OUU0NURDMUJDQzIxNTRERkJCCi06MTA5NkYwMDBFREEyNzA4NEEwNEI5MUJGQTY0REYyMTlBMkYwRkQxMjBECi06MTA5NzAwMDBGNEUzRDRERUU1NEI5ODBGNzJFQUU3N0FGNDgzODlGOTQzCi06MTA5NzEwMDBDNUJEOUE1QzA2RkUyRTIxOUZFNjRCMzY2NjQ3RTNGQUVFCi06MTA5NzIwMDBGQzNDMjJGRTMxN0ZEOTVDNEUyN0YzQjgxRTNGM0Y5MkFFCi06MTA5NzMwMDBDMTdCMjlCMTY3NDBCQjVCQ0MyNDRBNDdCN0Q0RkNGMjVDCi06MTA5NzQwMDBCNjIyNUM2NzhEMjExQUY0MDVFMUY3MTk1OENGMDg2RjJFCi06MTA5NzUwMDBGRjcyM0Y2NTY1Rjc4REE1NDAzNjc0NzI4NkMyRTc2Mjc5Ci06MTA5NzYwMDBGQjMwQzBGOUIyM0I5QkREQkIyM0MzODgwM0ZDOENFRTBFCi06MTA5NzcwMDA3REMzQjc4MTdEQzIzNDg4RjlBRjI5N0YzMjk3RTRBM0Q2Ci06MTA5NzgwMDA1RTZEODY3M0Q0QURBRjQ0RjBGODIyMkZCRjRGRUNDOEE2Ci06MTA5NzkwMDA4M0Y4OUNGQUFBQjQ3QzhDMTMzOTFBQzA3NzM3QkEwREI3Ci06MTA5N0EwMDBGRTBDRENDNzk0RUY0ODU0MzYwRURBRjJGRDE5N0FCODk1Ci06MTA5N0IwMDBBRjk5NDJGNTM1OUEyRkQ5NzIyRkNCMEZGNUFGRDREMThGCi06MTA5N0MwMDBGQzkyMkQ0RkNERDBEM0ZERTFCRUM2N0YwQUYyMzU1QkIyCi06MTA5N0QwMDA3NkIxN0NCRTdGQTU0Q0YzQ0Q1QjVFNjVGNUUxNjA0OTVCCi06MTA5N0UwMDAwOUVDQzEyRDA3Njc3ODY4RkY2N0EyQjlCQ0I3RkJGMTI4Ci06MTA5N0YwMDA5RUI1RkJFNUUxQkE1MDNCNkI2MzMyRTM1QjY3Qjg5RDE2Ci06MTA5ODAwMDBGODRDMjY1OTVDMDVGMDFFMTFCRUZFQjI2NDFEMEY1QUJECi06MTA5ODEwMDA2OUM1NTRBQzU3QjQyNzQ5RTFEQjI1RjM3MTZFRTVGNzEwCi06MTA5ODIwMDBBMzI3NDY5Mjk2MDhFNkI3RjM0NDUxM0MxQ0U4MTg4RUVECi06MTA5ODMwMDA3RUM3QUY5MzYyOTg5RTZFRjNFM0ZCMzhBMjFGMDE0RjgxCi06MTA5ODQwMDBEMTlGMTg3NzM1Qzg2N0UwQ0I5QTc4QUNFQzY0ODYzRjM3Ci06MTA5ODUwMDAzQUNFNDYxQzY3OTg4M0REMkJBRTRBQ0IwM0ZDNTFCQzQ1Ci06MTA5ODYwMDBFOTM5REVGNEVDRkNCQjhEQ0Q4RkY2MUI5RDhCNzJBMDJECi06MTA5ODcwMDAwMEVDRjgwN0JFQTJGNTMzODNGM0Q2RDI0OTQxMzI5MzA4Ci06MTA5ODgwMDAyRkI3MzYzMTdGNkIyMDNBMEJFOTY5NjIyNDdGNjdBNUQ5Ci06MTA5ODkwMDA1MEJEOEU2NjBFODdDNkU0Njg3RTZGNDZDMDJCNTFDMkVGCi06MTA5OEEwMDA3MTlBMzgxQ0QzRkM3OENGRjI0QUQ3NURGMTFGNUE3N0YyCi06MTA5OEIwMDAwOEJFMUNGMDVFQ0E4MUY2QUJCN0IzRjVDNEYwN0JDRDMxCi06MTA5OEMwMDBGRThDMThENEY3RUU1N0Y1Nzc2NjgzQTY3RDA5QzFCOEVDCi06MTA5OEQwMDAzNjc3NEMxNkI2QkYyNzgyOThGMTNCRDlERUQ3MkUzM0E4Ci06MTA5OEUwMDA5N0U5QURBMENGOEE3NzJDODhFNzNBMTJFQTQ3RUM3QjVDCi06MTA5OEYwMDBBRkEyOERDNTY3MDZENzM5QTM5MEFGRDNDNkQ3Njk2MzJBCi06MTA5OTAwMDBFQkY0QUFFODk1MUMwOTY0Q0NCNkY2QTdFMzNFRjhGNzk5Ci06MTA5OTEwMDBGNTM3MkE5RkY3QTdEQUU3RTFGQTgzN0QzRDEwNUVENjk3Ci06MTA5OTIwMDA3MzNBRjlENkYwMjJFNkE5ODE2NzFGOUMzNUYzMTNGMDRDCi06MTA5OTMwMDA4NEZEOERFRDQ2QTlFOTUyQ0NCMzI2NTk5QzkzMzVGQkE1Ci06MTA5OTQwMDAzQkYzMUI4RTU3Q0FEQUQ1RERDRUUyQjk4OUEyQTZFQjZFCi06MTA5OTUwMDBCQUREOTkzQTg4MkIxMEVENkFDMTI3MTAxRkI0RkYzRDdDCi06MTA5OTYwMDA5QUNDRUQ4OTY5MjQ2RDgwRjhDNEM3OTM4QkMyREEwRDU3Ci06MTA5OTcwMDBGMUJCRjY5Q0Q4MTNDREUyRDVCNUY2OEE5RTc4N0IyNzRECi06MTA5OTgwMDBEQ0FGRjQ5QzYzRUYwQThDRDNEODZGQzBDRkY0OUMyNTc2Ci06MTA5OTkwMDBEODJFMjg1RkQ0Rjk3MzlDM0ZGNkI3M0YwNTMyNjA3RTFFCi06MTA5OUEwMDA4NUE2QjJFNzE1M0JENTQ3QjYxQzQzN0U1RDM4QjhFQ0JCCi06MTA5OUIwMDBCNjRDOUE3RjM1Rjk4RkM4Q0YwQjUzQ0JCRUM4QTRGQ0U5Ci06MTA5OUMwMDA3QzdGQjI5RkU1NDc5NjdEMzExNEYyNUJGQ0FDRkU0NDkwCi06MTA5OUQwMDBDN0YzQzBFRjg5QzczRjYzNTI3MjUwQUY3ODJENTk0MTJBCi06MTA5OUUwMDBCOEM5RTUzQTAyNzQ2NDAyMjU4NkFFQzdGNEFBMDlFMzUxCi06MTA5OUYwMDBGNjA0NUMwNzRBMEI0REJBODY3MEY3NkZERkVFQTMwN0RCCi06MTA5QTAwMDBFNjU3Mjk4MTNGMTVCMEYzNzEzQjgwNUZBRkIyMDNGNDk1Ci06MTA5QTEwMDA0NEIxN0JERjNEN0JGRjhFRjc1RDNFNDg3Njc1MDIxRUNECi06MTA5QTIwMDBFQTIzQkIxNjY1RDJGQzVEOTE5RkEwMUY0RjcyRDAzRDBCCi06MTA5QTMwMDAwMUY2MTVDNTQ2MTZEMEY5NEE1RDlCOUNBMDNGOTFENTBECi06MTA5QTQwMDA3NkIzMUVFMUNBRUQ1RTc0OEQxNzI4RkM1RUQ5RjdGMzdDCi06MTA5QTUwMDBFRkE1QjI2MTlDMzA4RkIxOUMwRkQ0RUZGQkYyNkZFMEE5Ci06MTA5QTYwMDBGN0FEM0Y2M0IxODNGOTdBNkNDNzk2REI0MEZGMUFEQjMxCi06MTA5QTcwMDBGMUY2OTc0QzBFQjNGQjM5NjJERTYzQzFBRTQ5QkY5Nzc2Ci06MTA5QTgwMDBCNDlCNzBGRTYzM0JBRTVFMDFGNUM3RkRCNjIzMEJFOEU5Ci06MTA5QTkwMDA2NEMyMzE1RjEzQjA4NTlFQkQyRkE1QUFFRUU1OTBDRkJECi06MTA5QUEwMDAyRTFBRDczOUEwREY0REMwRTM1M0FBNTQwRDQ2NzhGNERGCi06MTA5QUIwMDAzMjc4N0M4NUYxNjdEREYxODc5QkZENjhGQzU0REY3RkEwCi06MTA5QUMwMDBBMkZBM0FGQTkxN0JDOTIwM0JGODMzQzQ3RDdBQURCRDQ2Ci06MTA5QUQwMDBGNDY4MjU1RDFGRkQzRTIxNDA2NzEwQTI0RjRGM0M2RjhCCi06MTA5QUUwMDBBNjhDMjQ5ODJGMjVEMUFBN0NCOTM5NTk1NUJGQzI5Njg2Ci06MTA5QUYwMDBBOTJBOUY5Mjc0QjVBQTdDOUE5MkE3Q0E0RjFGMzE1NjgxCi06MTA5QjAwMDA1NUZGMDY3QkE5MkE3RjYzQzkzNDU1RkQ0QTQ3QTUyQTFDCi06MTA5QjEwMDA5RkU3NkI1M0Q1MkYzOEQ0QUUyRTNGNDI2NEMwNDNGRTJGCi06MTA5QjIwMDA1MUZCRUI5MDE2OUQ3NEEwRDlCNUY4NzRDM0VCOTA4RUUxCi06MTA5QjMwMDBGRDBCMDM4N0Q2NUU3Q0VERjlCNkQ3RTFCQkIwMTc2QkEyCi06MTA5QjQwMDBFRjMzMDlGQkYxQ0RCMkM1NkIwQzZGMjc0RUQyNjcwNTIxCi06MTA5QjUwMDBERjFGOTA3NUVDM0VEMzE4QUJFQkVBOTRBMkUwN0RBNjM0Ci06MTA5QjYwMDA4OTYwMkZBNjQ4QTg1ODdDRUU0N0UzMDA0RjBCOTgzRDJDCi06MTA5QjcwMDBFRDI4MjAwNkUzQkVBRDY4ODczQzZBNjg3OEU2MEYyQ0M2Ci06MTA5QjgwMDAwRTIwMURGOERFODRDMDVDRDVCQTI3OUU3N0E5RDY1RDZECi06MTA5QjkwMDA0QTZFRDVFMDY5OEQyQTVGNjFCQjVENTU3RjRBRDIwNjZBCi06MTA5QkEwMDA1NUY5MzRFNTA3MUEzQ0REQUZDQURGNjBERkEyQzFEMzQ3Ci06MTA5QkIwMDAzNjBEOUU3RUFFMkExN0Y0RERDMUVENUFGQkMwMUU0NTYwCi06MTA5QkMwMDBEM0YxRkVDRTcyQzBDMzc1QTcwMzg4OEY5MkNFRDY3MjMyCi06MTA5QkQwMDBDMEQzQjU0N0RCMTA1Rjg1M0U2NzM5QjBDQkUyNDMwRDlDCi06MTA5QkUwMDBBRjQzRUFBM0U3MzE2OEY3NUE2MzEyQTYwNzFBMTVCNDIwCi06MTA5QkYwMDA2QjFENkMxQzgxRTlBMTQ2M0I3RUZGNzU2MzA5QTZFRkQ2Ci06MTA5QzAwMDAzNDNBMzA3REFGNzEyQUE2OUQ4RDRFNENEQjFBREJCMDA1Ci06MTA5QzEwMDBGRTczOERFRENDMkUxNkRCRjdERTQ1M0FEODA3QkE3NTBDCi06MTA5QzIwMDA3RTM3Nzg4MjE3M0Y5Mjc3MDNGMENCRUU0MUZFNkVDODA1Ci06MTA5QzMwMDBERjQ1RUMzNzRDQTJGOTI1QzA0NEU4QkVGQzI5NEYzNzdDCi06MTA5QzQwMDBBNDNBMDI4MDU3MzcxQ0NBOEE4MkYxMTg2RDNBNDcxRTFGCi06MTA5QzUwMDBFOEUxNzdBNDRDRjhBMTNFOUQ5MEJCMzczODkzNkNEMUQ2Ci06MTA5QzYwMDAyQzZGQTY3OTQ0MzZDNkIzNERGOEExODMxMkQ3MzMyMEEyCi06MTA5QzcwMDA0QUQwQTkzM0UxMDZDOEY3NDRCMDcyNzdDQTg0MUI0MEMyCi06MTA5QzgwMDAwRkZGQzZGRTczNDczRkZGRjkxRDI5NjFGQ0U3Q0Y5QzFDCi06MTA5QzkwMDA1NkFDNjBENzM5RkNENTcwMkJDMEUzMzBCNzZGMzk0ODZDCi06MTA5Q0EwMDA5RTYxMDk0RDRCRjU3OTA2OTBCMzQ3MDdCOEI3RjA4MDMwCi06MTA5Q0IwMDBBRUI0MDlFMEQwQTZCM0NGQzE3OEVGRUIwRDA0RThCNzlFCi06MTA5Q0MwMDA0QTYyRTc1RjUxQ0Y5NUNBRTQ0MUNGMEQyNjNDNEYxRDU0Ci06MTA5Q0QwMDBEMTM5NTY2MDVDOTkxNDc4MENFMEJDM0RBNTEyRTFERUU4Ci06MTA5Q0UwMDA2MzBENjQwMEZDQkMyOTRFOTY4RjBGM0MyNkQ5NDNGMkNECi06MTA5Q0YwMDAwNjA2OUYwNzUyNkVGQ0I2RTFGMzU4MzhGODNDOTE2MkI1Ci06MTA5RDAwMDA2M0ZBQjZDRjkxMEU3QTgwQzgxRkE5NzRENEMxN0UzRTgzCi06MTA5RDEwMDA1MkVBQjgwQUVGQ0YzODRENkNGRjNBQURERUFCRDAzRTE5Ci06MTA5RDIwMDBFNDI4OUExMzYyRTcxOTkyNkE2MEY3RDFFMTYyMjJEOEI3Ci06MTA5RDMwMDAzQjZGOTE3MTlGNkJFMTM5MjE5NUU5N0I0ODI3NzBDRThDCi06MTA5RDQwMDA5QzE3ODlFNzgyMjMzQUY2OUU4MUI2RkUwMjBFRDdCM0FFCi06MTA5RDUwMDA4M0MyREJFMzE2QTYzMkJEQTI2QzU2REQzMzJGRDBGRUU0Ci06MTA5RDYwMDA3QUQ2NDU2MEQ3M0RDRUUxQTg4RkY1MzQ1MEU4MkEzNDQ1Ci06MTA5RDcwMDAzRERENzA4RTk1OUJFQzFDMjRFOEJGOUQwRjdGRDFGMkRBCi06MTA5RDgwMDA2NzNBNkVGQkVCRUY2OEZENEZENjQ1REE1MTg2RDhBRUU5Ci06MTA5RDkwMDA0MUY4RERDMjJCMkY4QzM1QTNGRUI0QjAyQUJEMENFNEY0Ci06MTA5REEwMDBFMjdDRUUwNzVDNjRENTI3QTAzQjUwMUY2RDg0MjcxNzJCCi06MTA5REIwMDA5NzVCRjI5QTI5MDRDOUNBQjg0QTIzM0MyNTU1OURCNjM3Ci06MTA5REMwMDBBNjE5RDJENUMzRUUzN0MyMTMyOUI1QTM3NjM1ODMxQUE3Ci06MTA5REQwMDA1QjQ3Qjc3MDExRjIzRkZGQkI4RDc0NUU4QkQ3Q0IwQTI4Ci06MTA5REUwMDAzQkNGODlGQkFFMzU1NzE0Q0YyMkU4RjcwODhGM0JBMjUzCi06MTA5REYwMDA0MEMwRjNFQTIyMEU2RkQxNkUxMTg3RDc4OTE0QUUzRkFGCi06MTA5RTAwMDBFNjkwOUMwQjZBM0ZENjY3NDBFRjVEMEJERkNEMUVDMDJFCi06MTA5RTEwMDBDRkEwMkVFN0ZBRTMwNzQ2MzZBRUY2RkQxMjMxRUVFMkFBCi06MTA5RTIwMDA1NDc2RkUzQTYyQTQ5NDA5RkFFNDJENEMwRUU0Q0VGRDc5Ci06MTA5RTMwMDBFMkFFMjJCQUZFREMwRTlCMEVFMzE1MTZEN0JEMDA3ODBCCi06MTA5RTQwMDBFODZERTc3ODM0OTA3NkQ4NEZCMzNDNEIzRUY5MUQyMjRECi06MTA5RTUwMDAyNjRFNzU4RkY3NTJGMkQyREU2OTJCMEY5NTk3ODU3RUNECi06MTA5RTYwMDA2Nzc5QThCQzJDMDlCNDk2ODM1QzE0RjI1MUY4NEY3RDM1Ci06MTA5RTcwMDA4REQ1OUMyRjM3MjAzRjNERDBCODFFRjMwNzFCM0Q5ODUyCi06MTA5RTgwMDAxRTZBNkNFMTdDQjkxNUNCREY2OTdDOThGMzY1MkZFNzFFCi06MTA5RTkwMDBDQjNCRjE3QjQ3RTM1QzRDRjczNUJBNTgzRUNBMTk5NThBCi06MTA5RUEwMDAwQUZCQzRFQ0MyRjhDNDM3QjY5ODA4RjhFNzdBM0I0QzEyCi06MTA5RUIwMDAxODlGNDE3N0M0NjM4RkM2NDFGQzkxMDlFRjcxNkFFMzMzCi06MTA5RUMwMDA5MEI0N0NCRThGMUU3NkY3N0IzNzI1MDVDNkU5OEIxRkM1Ci06MTA5RUQwMDAwMjdENzFDOEMwRjQ3NDk4Mjg1NkUwNEJGOThGRkVFNEY3Ci06MTA5RUUwMDAwNkQwQUYwRjJCOEExNUY0RTk4MkQ0Q0QyQ0VGNTBBQ0ZECi06MTA5RUYwMDAwNjlBMkY3Qzk0RTc1RDhBRDUwNEFDMjJGNTIxRTQ1QkI5Ci06MTA5RjAwMDA4NzNEOEEzNTgyRTY4QjFGN0Q4ODk1N0IwOTNBRjNDN0FBCi06MTA5RjEwMDAzREJBRjUwNjBGRjA1OTIyMUQ4MEZENTE2RUNFOUM0NENFCi06MTA5RjIwMDBDNTA1OTVEN0E1MDc2MDVGNEM0OTVBMzIwOUY2QzVDRURECi06MTA5RjMwMDAxNDA1RTk2MzlBQjJFMTAwRTRBNzhGRDhBNjg3QUJGQUNCCi06MTA5RjQwMDAwRTRCREU0NjY4NTcxNjU3QTk4Nzc2OTNEMkQ2NkM4NDk3Ci06MTA5RjUwMDA3NjkzODdEREFGMEY2RDM3NzVENEFFOEQ5MDlGNjFERjNGCi06MTA5RjYwMDBBNjA3RkQ3NDI3RjBCMUY4NjAzRjIyMkZDQTA1OUYxNjlGCi06MTA5RjcwMDA3MTcyQTMzQjlDMjgwRjcyREI5RDI4MEYwNDVDQ0E2NjlDCi06MTA5RjgwMDA1N0RFMERGNkNGRkE3NkM5MjZDMTNDNjY0QjdENDEwQUY1Ci06MTA5RjkwMDAxMDkzRTg4NkY3NDkyOUJGQkUzRUY1OTdENjBEQjQ1RDBDCi06MTA5RkEwMDAzREU0QUZDNUZDMEYzNzdDQkJGQ0ZCQTZENDMwRkNGQjBCCi06MTA5RkIwMDA0M0JFREY0MURFNDNEQ0ZCODc0NkY2MEVDQzMzMUMyRTZFCi06MTA5RkMwMDBGNTFENEJBQ0Y4OEUyQTcxNTk0MUNGN0E5RUNCRjM5NzkxCi06MTA5RkQwMDAyMEE1RTU5RkYxQjQ4QjdGN0Y0MEU3NzBDMTM4QUI1MjdECi06MTA5RkUwMDBCOTFGQjIzRjdGQTg0OTY1RkI1RjczOEY2NDgwNzJDRTUzCi06MTA5RkYwMDAxRkVBNTI2REFBRjczQ0VBMDhCQkJGNzZBOTM4M0I2RDUxCi06MTBBMDAwMDA5Q0I4MzZFRTY0MzU2OTNCRThDOEVDMUY2RjUyMEJGNzFECi06MTBBMDEwMDBEQ0IyRkFDNzdGOEI3ODZBNkQxQzc4REZCOTZBMTBFMzBGCi06MTBBMDIwMDBBNzczODFENzUwQkE2RTQ5MUQ5MDRGREU3QjA5MzhEQzhCCi06MTBBMDMwMDAxQjBFMEVGREQ2NDM1ODlDN0JCRjM4MjQxRUVGQUU1RDMxCi06MTBBMDQwMDAxNzcxQzVCMzc3OEQ3OUZDQkI3NjdEODIyRUZBQUZBRkUxCi06MTBBMDUwMDA5NUMxNUZDRkUwNEZGNUJCQzc2MDdFMTU4QkFEMDRFQ0JCCi06MTBBMDYwMDA1NkExRkNFNzc3MTdFMTNGNUE3RUY2NkRGMUM5OUIxN0MxCi06MTBBMDcwMDBEN0UxQkI2NTYxRjhEOEYzRTFGODk4QjhDRkFGNEQ4NTZCCi06MTBBMDgwMDA5RTBBRjdGMzIwMUUxMkRFMzk4MjczN0U2NUEyNkIxRkQzCi06MTBBMDkwMDBGNEQzNTMxNkY4OUIwRUNFQTE3MUVDRERGMDgzRDFBRTU0Ci06MTBBMEEwMDBGREYwNUQzMkIyQjgwNjExOTc3QzVBRTdGOTE1RTg2REZDCi06MTBBMEIwMDBFRjNERkExOUYyQjM2RTEwMTY3NDhGQkM0MUYzQTA5N0ZFCi06MTBBMEMwMDBGREMzRTY3QzEzRTA0NzQ2Rjg4REExRUY4RjBGMTQ3RkE4Ci06MTBBMEQwMDBGQjFCMkVGRkZBQTc2Q0RGODkzOEQ0OUU2RDVGNjZBMDRDCi06MTBBMEUwMDBGREVFMTJGQjYyMjA3ODU0QzhFM0ZENzAzRkE0QjcyNDU0Ci06MTBBMEYwMDAxMkU1Njc5NzQ0N0NGMERFNzE1NzY5MDJFQTJENURFOTRECi06MTBBMTAwMDA0NjNEQTRERkY2QjlCODJCM0QxQkZCRDc5RThGQkI5MjEzCi06MTBBMTEwMDA0QkNDNkNEQ0M5NTMyMTdEMkZGOTU0MjFDOEJEREZGMDM1Ci06MTBBMTIwMDBGOENCNzZBM0E3RTAzREIwMEY4RjhENDBGRkZFOEQ5MjU4Ci06MTBBMTMwMDBCRjEwRTBBMDNENTc3N0JEQjVBMDRDQzlFRDdGQkVBNkNFCi06MTBBMTQwMDBFQjlCMDRFQkFCM0RBRUJCMUJCRTVERTk3OUJCNzZGRDgzCi06MTBBMTUwMDBERjA4QzRCOThGNUJGRjE1ODFGN0VGQUVGQ0ZDREQxOTlBCi06MTBBMTYwMDA5M0FCODA1RUUxNkEwMjEyMTlEMzQ1RjUwOTlBQkY1NDk4Ci06MTBBMTcwMDBGQ0Q2Mzk4OTlFRDMzMzQzQ0VFNTI1NkZCMzM4MkU5RTY2Ci06MTBBMTgwMDA2QUNGRTdGRERFMDk1Q0VENTFDNzBEOTZGQThBMzA1RUI1Ci06MTBBMTkwMDA0NUY2NDdFMUJENjAxRDdCNkY0M0M0NzNCREM5Q0ZGMzc2Ci06MTBBMUEwMDBGNEJDM0UyNDBERUQ3MDlEMTlBQUYzRkExRDFGMkRGQTgzCi06MTBBMUIwMDAxRUYyODEwODhDRUY3OEE2RkQ0NDNDQ0NGNThGOURGMTEyCi06MTBBMUMwMDAzRjc5NDUwOUQyNzdCREVENkYyNEY0OURDMERBRjVCRDI2Ci06MTBBMUQwMDBBQTdDRDc4NkUwRkI1NjcwMUZBQkY2NUYzMkNBMjUyQUYxCi06MTBBMUUwMDBDNzVBMTA0RkU0MzVFM0RBMTBGOTRBREFGRURDMDdFRjFDCi06MTBBMUYwMDBEMTk0REY1NTAyQzA1MEJFMzZDRjc0RDA3Njk1RkMzQzZBCi06MTBBMjAwMDA0NDQ4RTQ4RDBFREFBRTkyOUYxRjg5NjcyNTJCOEZFN0I1Ci06MTBBMjEwMDBGNTNEOUZCMDdDQkEyOEZGRTM0Q0FDN0Y5NUU4NkYxQ0ZFCi06MTBBMjIwMDAyQjRGMTY3OURFREZENTIyOUY3ODIzOTY2NzhBRjYyNTk1Ci06MTBBMjMwMDAyQzlGMjNDNkFGNjRFREFEQUNGRUU0QURGRjlDMDk3QTY0Ci06MTBBMjQwMDA4REUwRjczM0QyQjg5Q0UwRUY1MjUxRkVFRjRDMkJCQUMxCi06MTBBMjUwMDA2OEJDOEVCQTlDQ0IwN0YxMEU1NUM1MUREMzIyREY4NTk1Ci06MTBBMjYwMDA3RERDMjY2MUVDNjFFRDlEMDZCNEU3OUY4RDY5Q0IwRDI5Ci06MTBBMjcwMDBCRDJGMkZFMjdBOUNFNTU2OENGM0FBN0I3MUY4NzY5OTc0Ci06MTBBMjgwMDBDNzNCODExRUIzOUNGQkU5MkI2NDBCRkE2MTdBRUY2NTM3Ci06MTBBMjkwMDA3QzdFMjAzRDcwRTVGQTk3NTVGOEVDNTdDRURGRDM0NjJCCi06MTBBMkEwMDA0NzI1MURFRkRDMEYxM0YxN0UwMjE5RDY4OUYxMDJFRTZFCi06MTBBMkIwMDAzNDQ5QzQyN0UwQkQ2QTExNTcxNzk3NDUxQzcwN0U4RTNDCi06MTBBMkMwMDA3QjI5ODJCREE3N0FCMjEzRjlFRkNBOTc5ODdEQkI2RTNFCi06MTBBMkQwMDBDQkVCMjhFRjk2Q0EwQURBOTdCRTFFRUE1QTA3RjBFOUQ2Ci06MTBBMkUwMDBCNkIyNzcyRjU3QUVERjg3RkJGNDMxQzVDNkZENjA4MTZDCi06MTBBMkYwMDA1MUExRjBCQ0IzM0ZGQzNENjlGMTE3ODVCRkJBRkMzRkVCCi06MTBBMzAwMDAwQzdGQUQ1RDVERENENzVGN0Q4NUYxN0ZERDU2RTYwN0I3Ci06MTBBMzEwMDBCNjczM0NGRDQ5QTcxNDczNzgzRDAyRjAzQUI3QTIzM0Y3Ci06MTBBMzIwMDAzQjVBODYyMEVFNEU4Qzc3QUI5MERGMjk4MkYzNTY2RjM2Ci06MTBBMzMwMDA4Mzk1MDBERUJCQTVDRURDMEZDM0UwNUY3QkFFMzg5RjBDCi06MTBBMzQwMDA0MTU0NzE2OTNCRkJDM0Y3RTk0QkQwRjdEM0ZGNERGQTlBCi06MTBBMzUwMDA0RUQ0RkI4RDc2RjAxQjFGNjVFRkU1MTU3N0ZFQzkxODBGCi06MTBBMzYwMDAxQTFGRjQ0RTFBM0IwNzBGNkU2NzdFMzExMTE3MTcyQzE4Ci06MTBBMzcwMDBCNzMyM0M3MUZGNTM1REQ1M0JFM0MxRkYyNEY2QzNDNDQ0Ci06MTBBMzgwMDA0OEQyMDZGRTA0NEFENzc2NEVENzc2QTA2QjQxQkY0MTJECi06MTBBMzkwMDAzRjE0NkQxNzA2QkU0MUZBMjUyQzJFOTFDM0U5QjdGRDc3Ci06MTBBM0EwMDBFMUZBRTEyNUUwRkFFMTdGMTNBRUJCQTkzRThDRkVEQkNBCi06MTBBM0IwMDAxNzIyRDA0RUEzODVGMzNGMzg1QzA1QkMyM0QzMkYwRTY0Ci06MTBBM0MwMDBFN0M4RjRGRjBDOUMyM0QzMTU5NTlENDNDMDdCMjBGOTZGCi06MTBBM0QwMDBBNEM1OEY5ODc3OTg3RDVBRjQ0REY2RTkyMzE5OUM0RkMwCi06MTBBM0UwMDBFOUZEMTg4RkFCQzU3QjRDN0EzRkJDMjdBNDVGMUNFRkZGCi06MTBBM0YwMDBFQUYyRkYzMERFQjU3MEQzQTZCNURDOUZBQkZENUU5ODA4Ci06MTBBNDAwMDAzRTIwQkZGQjU2RTBGODdGQ0Q0RkIwQjA2MUJGQUE3Q0M1Ci06MTBBNDEwMDBGMUZBQjc1NEU1NEIzQ0VGNUY5NjVGNDFEOEZCRkY1QjI5Ci06MTBBNDIwMDBGRTA1RTE1Nzk4RjlGQzJBMURGODFGQjVGMjQxMzdDNDIzCi06MTBBNDMwMDBGOTIzQTBDNzFCNUZGRTdBRDQ4NzMwRjlFQTZDOENCNzhBCi06MTBBNDQwMDBCQThEQUZFNThCRjE3RkZGRTQ3Qjk0QkVCRTY4NjBGNjBBCi06MTBBNDUwMDBENjYzRkIzRjM3MjgzOUZERTk2NUUxNzkxRDcxODREMDZBCi06MTBBNDYwMDBEOUMyRjVFRjFCNDBDRjVBNDhEOEZCNTREQUZBMEZBNkYxCi06MTBBNDcwMDAzMzdCMzBDNjQ5NTFCRTMwRDc0QzBDNzE5NDFGQ0M5REY0Ci06MTBBNDgwMDBDQkVFNEJDRjA1MDc2MzBDQTYzRTE3MkQ5RkE5MjczRUE5Ci06MTBBNDkwMDA3ODhGQkJEMkEyRjc5OUQwRUZBOUJFRkY2RUUyRUY3NTFECi06MTBBNEEwMDA5M0I4NThENTNENzhEOTIxNjM5Q0RGOUMxMkU2MkZCRDI3Ci06MTBBNEIwMDBDNUQyODZGNzg3RTcxREJBRUJEQ0Y3NjAyRjZGRjQxNDdGCi06MTBBNEMwMDBCMUI4Nzc3MUZGRjBGN0JBMkJGMTgzM0UwODdBMkE5Qzc2Ci06MTBBNEQwMDBGQjI0RUU1RjVGNjM0MEZGQkFCNkREMkFCRTlGNjZDQTBCCi06MTBBNEUwMDAxMjhCQTNEOUMzRTIzM0M1RkVBNEVCM0I2NENBNjdGNzYyCi06MTBBNEYwMDA2MEUwRjc0ODJBMUIwQ0JFRTFCOUEwNjdFRjQ3M0RCQkZGCi06MTBBNTAwMDBCRTY0NDMyRUUwQUY3RTkyNzREQzk0MUIzQ0VGRDRBRjZDCi06MTBBNTEwMDBGRjBCQjZEN0YyNjc2RDdBQjlGNkQ1NEYxQTBGMjFCRDhBCi06MTBBNTIwMDA4ODczRDFCMTQ2MUZFNkI1RjZENjA1MTNGRjE3RkQ5MzI0Ci06MTBBNTMwMDA2M0ZGRTI2RDgyNzREQzU3OEUwRkM3RDA3NUZCMUIzQjQ3Ci06MTBBNTQwMDBGRjJEN0I4MkIwMjMwOEJCODJENjRFMjFGODg4NzhCRkNFCi06MTBBNTUwMDBEMjk3NkVFM0VGQjI5NkEyREY4M0U4NTkyQUY4RURDMUY1Ci06MTBBNTYwMDBGRUZDRjlEN0U5MTdENzI3RDVFNUZGNjFGRTdDQjlGNEUyCi06MTBBNTcwMDA1RjlCQzRFNEFBOTZFRThGNTZGRDBDRURDRjgyQkVCNTZDCi06MTBBNTgwMDBGNEJGMDA2MjUyRThGODBCRUEyNUJDMjczRTc3NTVBQkQyCi06MTBBNTkwMDA2MTlDRjRDREU5N0RCNUU1NjQwNjgzOUI0NjJFNUNCMUY0Ci06MTBBNUEwMDAzQzUwNzgzQzg3OENFNzBCOTNCQ0M2MEU3NjBGODE4N0I2Ci06MTBBNUIwMDBBRkQzRDVFRjAzNTNCQzQ4MTkxNzk3QUJFQUYyRkZGQUI0Ci06MTBBNUMwMDAzOUUwRTRBMjZGMjYxNzg5NEE5RjQ4Q0JFOEI3NkVFNUM5Ci06MTBBNUQwMDAxMkVCNTZGRTlCRUIwRUI5QTdCNDQ4RDYwNUVGRTM0MDRECi06MTBBNUUwMDBGQzM1QzQ4MUY2NzhEOUZERDRFQUNDNTZGQ0REMDM1MkEzCi06MTBBNUYwMDAxMjg4MDI3RTc3RUI1RTk5RkQ5RThFREVBMTRGMEU3OTZBCi06MTBBNjAwMDAzRkFEOEJGODNFMDA3QTVDMzU5RUJEM0JBNDhEOUI3NkJBCi06MTBBNjEwMDBGMzc4RUFENTk2REQ3OEJGNTFGQjBFOUE4OENCNzZGM0I2Ci06MTBBNjIwMDBGRUI0RUZBMTg5RjZFMjlEMDNFRDdCNjg1MzMyNzgxQ0ZFCi06MTBBNjMwMDA3NjNFQzk2NzcxMjkxN0U3QTNERDIwQ0Y0M0ZDMzVERERFCi06MTBBNjQwMDA1RjM1QTI1REUxQzZDNzRBRUVGM0E0MDVGMTMyMjdBMzQ4Ci06MTBBNjUwMDAxRkRGOTk5NzcxNzFCRUEzMkVGRjJGRDNBRjZDREQ4MUUxCi06MTBBNjYwMDBGN0Q4QUU5NDdFNDc2NDNBREM0MDdGODIyRkY3RjE5QkE3Ci06MTBBNjcwMDA1NzRDQzg2RkM0M0JGMzNENkI5RUMxRjc4NzdBQkUyNDJECi06MTBBNjgwMDBFODk3QkRENDNCRTMxM0JCRDgzNUM0MDkyN0JENEQ1NjZECi06MTBBNjkwMDA4QUQ3NzFDNzNDNjhBRjFCN0JDNDg1Rjc3NkM3QkNFMzFDCi06MTBBNkEwMDA4MDg4N0Y5Mjc3QzAyOUMzQkM4NTNFMjNGNDlCMjBGRjFFCi06MTBBNkIwMDBFMkY3RDk3ODlDRDVFNUYyQjkyQkY1MzdGRUE3RkM4Q0VCCi06MTBBNkMwMDBFMjVFNURCN0MxNTcwNEJGRTdFMEQ5MTM4MUJGMDNBMUM0Ci06MTBBNkQwMDA5REZGOTMxOUJBOEJCRTkzREMxMUU1N0ExMkYwMzQ4QjhGCi06MTBBNkUwMDBDQjA5RjE1RTcyODVDQ0RFNDlFRkVEOTREMTVFQjhFRTE4Ci06MTBBNkYwMDA3RjdFRkJBQjQ3OTU0QkRCMTVFQTZEQkQ2MUNGNjUyMkQ1Ci06MTBBNzAwMDBBREQ3QjE3QjJERjlFNTBBQzY0OUMyNzkwREVDODdDMkY4Ci06MTBBNzEwMDA5RUE4QUQ3RjRBMjk3QjI5MDNFRDVCRTNGMTNEREFERTlDCi06MTBBNzIwMDA4N0Q5N0MwNkMyNTdGREZBMDA4RTNGNjAzOTFGQkY3RTc1Ci06MTBBNzMwMDA2RjkxMkRGNDlEOTVGMzE5N0RFNzQzREIyOTczMTBERkFECi06MTBBNzQwMDA5NzRCMTdGRkQ3Q0UyRDMzNjVFMjkxQTg3Q0NEOTFCQ0Y2Ci06MTBBNzUwMDA0Q0VGMjU0Q0ZGNUQ0MDNBMzE1RDQ0MDI5OEJBMDhCQjhFCi06MTBBNzYwMDBDRkIwOTREODMxNUQ0RTlDOThBRTU1NUM1RDE5MTgzN0NBCi06MTBBNzcwMDAxNDQ4QzBGOEQzMTdGRjM5MEFFOEU2REM3NUUzNUEyMTFDCi06MTBBNzgwMDA0NkYxREJGMjIzNjlGNUJFOUUzQzg1QkQ5N0Y0QzIzRkRFCi06MTBBNzkwMDA3RjA3RjREOUYzM0Y4NkNCRTIxQjQ3QTIxQzY0NDgxODFECi06MTBBN0EwMDAzRkQzN0JBNTMyQkJENzU0RjI1RERDMTdFMkZENUQzMkFGCi06MTBBN0IwMDA4OUY5RTE5NjI3NjZFMkZFMDlGMkNEQzQ2RDgyNkY4MkM3Ci06MTBBN0MwMDAzRjM5RTdCODhFQzVDM0RDMkFFMTdCQzZFRDdFMUQ2RTNFCi06MTBBN0QwMDBCMTlDMTU5OTVFRjhEREI5RjZEREFDM0NBNzJFREEyQkZECi06MTBBN0UwMDBEMTdDQ0VEODA4NTZCRTI2REEwQkY3NEYxNjEyM0ZFRUI0Ci06MTBBN0YwMDBDQkM1NzBGQjQ0ODZGQjRCOEMyRjhBREYwQkEwMjc4MkQ2Ci06MTBBODAwMDBBMTEyNkRCRkEyQzNDQ0VFNTExMEZGMzBFMEZGQjk3MEIyCi06MTBBODEwMDA3RTBBMTc0RjMzODRGMUYxRDE0MzE5QkYxRjVEQTZCNkVECi06MTBBODIwMDA4NzBDRTVFNUY3Mjk2NURGMDc3OEI0MEM3MTY0MEQ4MUM1Ci06MTBBODMwMDBGQTMxOUQ5QjFFMkMwNDNCOTA4RTgwOUZFNkIzQjFCN0VFCi06MTBBODQwMDBBMzVGNTNCNDdCNTEyOTFCMDFGNTlGOTU1OEJDQkY2NzhCCi06MTBBODUwMDAyRkJGNkY0QzAyMDlBMUZFQjFCNTRBNzkyRUQ0MkIxQTM1Ci06MTBBODYwMDBDMkY4RDM0MDcwODVERjUxNzQ4NjM5MkY4QUY4RDFEMTcwCi06MTBBODcwMDA3MDY2NDNCQjNDQzE3N0QyOUU5NTU4N0VGMkUzNUI2RjE2Ci06MTBBODgwMDBEQzY4NDE1RjgyMDdGNEUzMTcxNUQ3NDQxODZGQjQ5MTcxCi06MTBBODkwMDAxMDBCQ0NGRkE3RkM3RTFCNjlDODAwQkJFOEFBQzc0QzA1Ci06MTBBOEEwMDAzQUQwMkYzRUEyRTIxOEVFRjdGQzgxOUVCNzIxRkQ5ODI4Ci06MTBBOEIwMDA5RTlCMjFGRDIzM0QzNzQzN0E5QzlFOUIyMTNENDFDRkFBCi06MTBBOEMwMDBDRDkwQUUzODZGODdDN0NDQzk4OTIxOEVCOUQwQkZGMDgzCi06MTBBOEQwMDBGNzY5RTc1QjM5ODRGMUQ3QkVGMUY3MUE3MUZDRkIxNDE1Ci06MTBBOEUwMDAxN0MyQjcwRkRGN0IwOEZFREVFREIzRDE4MTk0OTg4QkUyCi06MTBBOEYwMDBEMDVCQ0ZERUJGQTM5Rjc0MjBCODA4RkZBM0I2N0MwQTRECi06MTBBOTAwMDBDNzZCRUU2RTNEQ0FGRkRDNzY3RkQ0Q0E5MDdBMkI4Nzg4Ci06MTBBOTEwMDAxOEIxN0RDRTBCMjdBM0EwRkY2RTVCMUY3QzFEMTI1REJGCi06MTBBOTIwMDBGMjRDMURDQkFGN0NGQ0I5MUIzNzhFODJGOTNCQkUwRkJFCi06MTBBOTMwMDA3NDQxRjdGOTZBNDg3M0RCN0ZGQjAwRkM1RTJBRUQxRjY4Ci06MTBBOTQwMDBFMzI0N0FBNEMwNjYzQzJGNjhENkExODU4MzU4RDdCMzg4Ci06MTBBOTUwMDBEMTlEOUJBMEZEQjMyRjBDODU5NTUwQkU0M0Q4QkUwMTYxCi06MTBBOTYwMDAzQTkyQzJBRDc3MDNBRUU3NDY1M0EwMTBFRTBCREQ3ODA2Ci06MTBBOTcwMDA0MTBFMUJBNzdEOUY1MjhBNzA0RTA2N0E0M0ZFRERDQUE4Ci06MTBBOTgwMDA1MzQ2NUYwMjZGREY3NDdGNkJGQjIzRTJGRDE1RTBBNThBCi06MTBBOTkwMDAwQUM4QTVBRkEyNDAyRkFDRTRGMTA0RURCQjg3RkQwNkM5Ci06MTBBOUEwMDBENkU5MzkyNDEzRjhCRERBRDEzMUVBRkRCNzhCRTM0OTkyCi06MTBBOUIwMDBBNDM5N0I4RDRFQzBEN0IzN0I0RjBEODNGNzg5Mjk3RTk5Ci06MTBBOUMwMDA4NkMxN0JDNURCODY1QzQ1NDI3RkVGMzE2N0VDOTc4RkE0Ci06MTBBOUQwMDAzQzE4ODdGNUYxRjc2OUU3OTE2RDE1MTAzNzMzREZCQzQ3Ci06MTBBOUUwMDBGRjBENThEMjQyREJGMTBBODg5QjU5OUMyNDFEODQ3NEM4Ci06MTBBOUYwMDA4OTkyMzkxOUUyNjVDNDdEODM2NTIzNEEwRkMyOTY5QTBDCi06MTBBQTAwMDA2MUFGNDQ3REFFMTQ5ODRDODg3QzI4Mzc0N0YyNDdEODE0Ci06MTBBQTEwMDA4NTNDOEE1NUU1QTcyNEE1QUFFQTRGNTNCMjU0RTVEMzRECi06MTBBQTIwMDA0NzhDNTQ5NThCNzE2N0Q4MEI1NEY1NDZDNzA0ODZDMjgyCi06MTBBQTMwMDA3OThFQUU4M0JEMDNGRkE0OENGMTg2MzkyRjFDQjk3RUJECi06MTBBQTQwMDAyNENEQ0Y3QzZBMEVCRTQzRjkyQzJGOUZGOTVDQjkxNzM5Ci06MTBBQTUwMDBGMEQxNDNFMTY5QTQwQUQ1RTk5MjFGNkM3RTEwM0FEMzg0Ci06MTBBQTYwMDA5QzE3NkFGNzNFNzFEMEExNUNDNjc5RTExMkU3ODQ4MTM4Ci06MTBBQTcwMDBERTRGMTZFREI1RTcwNENBMzcxRjAwQkUzOUZBQzVEOTU3Ci06MTBBQTgwMDAzNkYwREIzRTNCRjZDQjE0ODg0N0ZEQ0QxMEZFQUUwQzE2Ci06MTBBQTkwMDAzRjNGMEM0NDM3N0RGQjQzNTIxOEREQkMyNTkzMjdDMzUxCi06MTBBQUEwMDBEMDBENDRGMjMyM0E2NEU5Q0NDM0VDN0VERTk1RjJCNUM3Ci06MTBBQUIwMDA0RjgxQUZBMUJEQzA0MzQyN0Y3RjU3NkJERjFCNkRCNDk5Ci06MTBBQUMwMDBGRkU2MzZCMDQ3QkQyQkMzMERBNUJFN0I5MzJCRTE2RkQwCi06MTBBQUQwMDAzOTQ4RUY2NEY5QjZCQjkzRTNGMEJCMDdGNDYxMzdCN0NECi06MTBBQUUwMDBGNzBENTJCODNFNTVCQkZGRUVFNEMyNjAzOTU5Nzc1Q0IyCi06MTBBQUYwMDA1NTlGREMyOTM1QUJGMjFCMzNENUY5N0I0QjlCNDNEQkYwCi06MTBBQjAwMDAwRkE0OEZBRDdDNzg4OUQxOTUwM0Y3NkVBNUIwQkYzN0MwCi06MTBBQjEwMDAyQ0U2RjNGRjAxMDk4MEQ1MjAwMDgwMDAwMDAwMDAwMDMyCi06MTBBQjIwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRkI1MTkwQjU0NTQ2NThFCi06MTBBQjMwMDBGQUJCRjdDRTBCMTk2MDc4MjgxMDQyNzc5ODQ0MEE4NDQ0Ci06MTBBQjQwMDA4OTU3MjhCMDhEQTAxRUQ3REExQTRDOEY1NDU2OTNFNTNBCi06MTBBQjUwMDAwMzc5NERFMEI2RjREOEUzMThBRDhGQjYwNzZENUI2OUE1Ci06MTBBQjYwMDA2QjM1NTY5NkU3RTQzOUIxNDQ0NjI1MzZBRTVCNDlFQjgyCi06MTBBQjcwMDBENjU0QTI2NkU0OTlEODQyNEM3MDI2N0E2RDlENUFGNzU1Ci06MTBBQjgwMDBGQkZFRkY1RTY3MkU2MDVCOURENjRFRTc5RkVGRkZGRkVCCi06MTBBQjkwMDBGQjdGRUYyNzkwMTRDQTcwQ0UwMDA4RjZBQ0NDNzA5OUZBCi06MTBBQkEwMDAwMTA2RjdENjFBRTQxODgwRDNGNEVGRTJGMERBQjhGOTI4Ci06MTBBQkIwMDA3QTgzMDNDRjU3MDAzODNBQ0NFM0NGMDFENjAxMTQwMzkwCi06MTBBQkMwMDA1QzI5ODE3QkEyRjMxNDU5NjBFNzYwRkY2NUYxQkQyRjFBCi06MTBBQkQwMDAwMTA4NDkwMDlFMTc4RERFRUQ1Njg0RTM1QzA2Njc2RTIyCi06MTBBQkUwMDBGODlFOERGMDRFMDYxOEQ5NzJGRkVGQkYyQUMyRjUyNUU4Ci06MTBBQkYwMDBCMEUzMEU4Q0M0NDMwREJEOUJENzc1NUMxNDcxQ0Q5RjIzCi06MTBBQzAwMDAwNEQ3RDE3Nzc5OTY4MDk4ODA2QjcwNTVCNDA3RTIwMEFECi06MTBBQzEwMDA5QTZBNjMzQzYyM0U5RTY3ODYwRTk5MkUwNEM4RjFBNjJFCi06MTBBQzIwMDBCNTlCNTIwMThFOEEyMkMwMzk0NDA3NzhBMDE0RUZFMzA1Ci06MTBBQzMwMDAxQjA0NUYyNEE3MzlFRkE0REZCOUM4NjdDQzJGQzdFNzhGCi06MTBBQzQwMDA0NTMyQjAzNUJGMzI5NEU5QzY3QkQ3N0U4N0U3MUNCRjVCCi06MTBBQzUwMDAwM0EyOTFDRTNGODA0QThGMDM0QzVDMkUwNEJCQkQxOUVBCi06MTBBQzYwMDBGRTNGMjMzRjREQkQxMjE4OTA5RjYxRjAxREJBNUE2MDAwCi06MTBBQzcwMDBEN0NDQTkyNTAwMkJFOUE3NENGQjFEMDY5MEQ4NkYxOTRFCi06MTBBQzgwMDA3MDdGOTVCMkJGQjI3Q0U1QTUxMDhCRjA1NkZENDAyMEQ5Ci06MTBBQzkwMDA5QkJEMEZBN0YxRkZENTdGNkYzNzk4RjE3Q0Y1NTNEQTk1Ci06MTBBQ0EwMDA3RDQyMEY1MzkwMkZFNUZCM0FGMEIzNzdFQjc3RTIzRDBGCi06MTBBQ0IwMDA1M0Y4NUUyM0RDRkQ5OTg0RUYzNjc2NjlCRjVGMjRDN0M1Ci06MTBBQ0MwMDAyNDBERTZFMDhGMDIyODM4MkRCMTZEOTFERTZCMzZGMTUwCi06MTBBQ0QwMDBGN0U2NEFERkJEN0IwOUVBQjFFOTI1Qzk2RUM0QUREMTBCCi06MTBBQ0UwMDBEREQzRTIwMEY5ODMzOUE4RTRENEYxRjI2QkRBOEM3QThGCi06MTBBQ0YwMDAyQTBDQzNBNzc2NEJGM0JENzQ1RjE3Q0FBODlFMzE1RUJBCi06MTBBRDAwMDBDRTYwQzlFMkY4MkMxQzVGNzNDNUQ3MEIwMUYxMzVGNzkzCi06MTBBRDEwMDBFOEQwRDA3RTAwQ0Y0NjExRTQwODNDQ0ZFRDMxQUVGMjUyCi06MTBBRDIwMDA5QUMzRjQwNzJEOUNDN0ZDOUUyRjEzNjZFN0YyNzUxRDhFCi06MTBBRDMwMDBEMTAxRUQxQzJGNzBCRjk4MjE4MDNFMDlGMTQxQjU2MDEzCi06MTBBRDQwMDBERjhFNEI1RjRGNzIyNUM5QkY0RjAwOUY1Q0MwOUU1ODdFCi06MTBBRDUwMDA2NDQyRkQ1Q0MxOUZBMzdEMzMyNEUwOEY5NDZDMURFMUIwCi06MTBBRDYwMDA1OUE4QzhGRDhBRDI3RjdDMjNFMDc3OEI3QjE2NEY0MzlFCi06MTBBRDcwMDAwQUUwNTBEN0IyM0VENDBDNkM5MDZEMENERjEyRjBFOEI0Ci06MTBBRDgwMDA0OTJGN0RGMUNFRjQxNkE0RjMzMjQ5NjBGNkRGMTcxRjg4Ci06MTBBRDkwMDAxQTE2MTA3RjVGNDVCNEQwMjZCMEY3RUZBNEY3NTVCRTYyCi06MTBBREEwMDBGQUY0Q0U3NDM3RTM2QjhFNjUxMEY1MjYzODJFOTA0RThDCi06MTBBREIwMDA0NzhGOTc0NzU4QUUzQTE4NTRGNTJCNzE3NzIxN0Y5Q0VGCi06MTBBREMwMDAyQkREM0VGQjEyRjREQkQxQTU2MDMxMjJCRDk3NEI2ODMxCi06MTBBREQwMDAzODA4QzNBQkRDOEZBQjQ5RDYzMzUxQUU4MjNGODFFODM0Ci06MTBBREUwMDA2Qzk2MTc2RTkxRjFCQkU0RDY3QjQxOTcxODIxMzcxRDA1Ci06MTBBREYwMDBGNzMzNTUyRkFBMUNDN0QzQTFFMjJERjczQjkwQkZEMTQzCi06MTBBRTAwMDAxRDAyQjM5RjQ2QkJDQ0VDQjNCMUZDRTQ4MzRCMTA3Rjc3Ci06MTBBRTEwMDBBMzVGQjIwQjQ4Q0ZCMkVFQkQ0NzQ4N0UxRDZCM0I0MEVGCi06MTBBRTIwMDA3NzFFNDBFN0RBNkVCNjJFMzM5OTdENTIxRUUzOEJEOTNBCi06MTBBRTMwMDBBRDg4NDY0MTdDQUQ1NjYwQzZBNzM1N0MxRUU2N0IwQ0NFCi06MTBBRTQwMDBCQzUxM0Y3QzA2Q0UwNDM4MThFQjdDOUVGODVCRjNGQkNDCi06MTBBRTUwMDBDRkZCOTYxMEI1MUJDQUUzOTkxRjkwQUQ5RDFCQTYzRjczCi06MTBBRTYwMDBERjAwNjA0NkZBNDNEQkEzQkQ0RjMwM0M2OEFGMjU2MThECi06MTBBRTcwMDA3QjNEQjEyN0VCNzAwQjlFOUY3ODUzQ0ZDQzc1NUZDNUEwCi06MTBBRTgwMDBDM0E3NkU0MTc4Q0RGNjY4MjZFNzEzMDlFMDQ5QTVGMzFDCi06MTBBRTkwMDAyN0E2N0IzRDc4NjFBNTE4RUE2RjIxQjk3N0M2RDhCNzk4Ci06MTBBRUEwMDBFM0Y5RjE0N0E3M0ZCQjEzRTFEQTY3QTdEOTg5NENGMjcxCi06MTBBRUIwMDAxRjE5RTU3RDNDMUQwMURBN0YzRTk1N0QwNzI5MUNFRkJBCi06MTBBRUMwMDAwQUM1MkZBNTY3NjZEQzU3NEVFN0NGMjREQTA5OEZBQTlCCi06MTBBRUQwMDBCRkExNDdBMzFDODBGMkZBMTI3Qzc5MTYzNEJEOTM4MjdECi06MTBBRUUwMDA2NzUwQzQ4N0VCQzQ5REM3MDRCNENCREIwQ0FFODNDNEVFCi06MTBBRUYwMDBGN0VBNDdGRTdBQTgwQ0Y5QTk3QUU2MzcwRkNGNDRGQUE5Ci06MTBBRjAwMDA2QURGOUIwQ0Y0NEU1OEFGRTNFMjQwNkMyMDk3RkNERjA1Ci06MTBBRjEwMDBDNkZENUY5MTRGREQ4RTI4Q0JDNzExNzFBNkExMjM1RUMwCi06MTBBRjIwMDAwMzM3NzVBNzVBM0U4RTg4Mzc3NUMwNjUwQ0Y1ODI4RTNCCi06MTBBRjMwMDBGOEE5NTdGQ0FBNUU3NDFEMjVCQTFBMjBDMEUzMjI4NDIyCi06MTBBRjQwMDAwQzY0NTcwNTkyRTBBMDc4MTBCQUM3QzhFNDNGRDZDRThCCi06MTBBRjUwMDA0NjY1OTFEMTUxMkY4MjhCRTI3OTQxMjI5ODUyQzg2Rjc4Ci06MTBBRjYwMDA1RDVDN0VDMTdCQTYzRjcxMTdDQTY2OTIzNTQxRjVGQkQ5Ci06MTBBRjcwMDBBQzg1MzMyMkVEQjNCRkYxMTVCMkNGQ0Q0NjY2OUZDMzhBCi06MTBBRjgwMDA1MTNDMkY4REM1RjMxRjM5OUU3REJGQzJGNDA1RjM4NzU5Ci06MTBBRjkwMDAzM0Y5QTRGNURGNUEzODE3MUMxNEVGMEFEQUU0QzI5QjIwCi06MTBBRkEwMDA3MDZENTFGNDcyMkNDNTI5NTg0OUVFMURGN0VGM0FDMDY3Ci06MTBBRkIwMDBFNEI5RjVFNkEzODQ3N0JGOTlFOTBGMEU3MEI5MDcwNUU4Ci06MTBBRkMwMDA5RTI3RDVGNzU2OTg0MkEwMkIyNDdBQjczMTdBRDVGRDIzCi06MTBBRkQwMDBDMTJEODdGMzVDRjhGRUUwMEIzOTc5ODBGNkJDNENGMkFBCi06MTBBRkUwMDAwRkZFMDVFNTczMkFDNjdGRUMzNjVDM0JGN0JGM0I4NTU5Ci06MTBBRkYwMDBGMkUwNTg3QUVCNUI0N0Q5N0IyQTNDMkNGMDM4NTQ0RjZGCi06MTBCMDAwMDA3Q0UwRkVGNzk5Q0U2NEEyMTNDMzA4OEIwRjAzNzdDREMzCi06MTBCMDEwMDA2MEYyOUIyQkU1QzY5MUZFODMyN0I0RjQ4REE1NTM3RDhBCi06MTBCMDIwMDA1RkE1NEY3RDVGQkQzN0NEMkEzMjM5OEUxOEZDNzk5NEVDCi06MTBCMDMwMDBGNzVGQ0M5MDM1N0M4REM0RkFGM0UyQ0RCNDZGRTE3NTQ3Ci06MTBCMDQwMDA0NDAyQzIxMUY2NTY0MzNGNTFCRjM1MjY4Q0RCNDg1RkEwCi06MTBCMDUwMDA0RDhENjA2RjAzQjZFRkExQjg4OUFCQ0Y4NUU3RjUyOUI5Ci06MTBCMDYwMDAyRjJCNzIwM0E3MDlFRDc4QjE2MjY3OTA5NEM4RUM2RTNDCi06MTBCMDcwMDAxMTcwQkI1RUFDQzRFREFCQTA0MzBGRTgyRjQ3QzQ3NUE1Ci06MTBCMDgwMDBCRjM1QTBGRDBENzczQ0EwNzc0NUM2NURDRjUxRjE3NDZCCi06MTBCMDkwMDBDRTRGOEZCQjlFNEFDOEE2RjgzRDYyMzFCM0JBNjY5RUJBCi06MTBCMEEwMDA1NUQwQjE3QkU5OTA0RUY3RjBEQ0VFNDMzQkYwNzQxQURCCi06MTBCMEIwMDBFRDZENDhDRkUzQTI3MzgxMTVFNTUzNkZGMEU1OTExRjY1Ci06MTBCMEMwMDBBOERGM0QyRUJBRDhGRUIwNzA2MDA1RTkxQjc0QkUzQzA3Ci06MTBCMEQwMDA1NkVGQzQxQjQwQzAzQTIzMzhEOUVFNzc1MDVERjYyNUIxCi06MTBCMEUwMDBCMEI4MTJENDQzNEQyN0UyMkRBQTEyREQ5REU2NzAzQzg0Ci06MTBCMEYwMDA1NEUzNjc1MTBFRUVBMzVDMkI2ODVGRjU1N0I0OUJBMjM3Ci06MTBCMTAwMDA3Q0VERkQzMDNGNUFGOEI4OTVGQjVENTFBMkU4RUU5ODEyCi06MTBCMTEwMDBDMDVGNkU1N0Y0REMwNjFEMTJGNzY3OUU0N0NCMTRCOTZCCi06MTBCMTIwMDA2M0REMjI0NUQ2MkQ4RDRBOUMwRkM2OUEzQzEyRjI1MzAwCi06MTBCMTMwMDBCNjFCRjU4MjcwOTlDRUI3OTc1NjhDMDJEMDhBRkE5RENECi06MTBCMTQwMDAwNTNFRkU1RUI3MzY5RTUzMEU1OUNBRjI3MjBFQ0JDQjQ5Ci06MTBCMTUwMDBCMzE0NzVBRjE3REM0MDdBMzU1MUZFQzJGNTJFQzEyRkZFCi06MTBCMTYwMDBEMUZBMkIwOEIxRDUwMTE2MURBREE4MDZCNkNFMDEyNzIwCi06MTBCMTcwMDA1QkU3ODE5QkFERjNBMTlEQUQwQkEwODNBRDk3ODI5RjUzCi06MTBCMTgwMDBBRDcwODFBRjBENTgzRUI4REQzMjg4RjkxODdFQkQ1MkUyCi06MTBCMTkwMDBBNEJDNUNCNDY0RTI3QUZDNzE0NTVFNjc5NzA3NDZGOTJCCi06MTBCMUEwMDA5MjlGMkY4Rjc5RTA0QTYxNzQ5RDREMkU1M0IzOTlEREE0Ci06MTBCMUIwMDBBQjcyMzE5MjdERTI3NzUxRTA0REExQjUwMjAyRUM5RDc4Ci06MTBCMUMwMDA4QkM5OTBGMTlERDkyMEVCMDhBRTAyMDc4M0U3RkU0OEJBCi06MTBCMUQwMDA3OTk0MDY1QzNBNTdFRTA0NzJBOTlBRDg0RTc2Mjg3NjhFCi06MTBCMUUwMDA1MjRDMzY1RDFDRDZENzg3NTYxRTE3NTRCRDAxRDI0OTI2Ci06MTBCMUYwMDBGOTYwQkMzRTIxODNFODJDOEFBRUZDNUNDNjkwRjFEQTkzCi06MTBCMjAwMDBCNkY3OUQzQThDQTM0NTg1OTUyRDM2ODQwRjU5M0ZFNUI5Ci06MTBCMjEwMDA3MDU5RTVGMzk5MDgxRkQ5NzZEMkE5OUI0OTc2NUU1OUYyCi06MTBCMjIwMDBBOEI3NjMxNUJBNkVEODM5MDdDRjREMThGQ0EzNTA0RTk2Ci06MTBCMjMwMDA5MjREODI1MjVDNUQ1MUIxNzk4MDdFNjc5NEFDRUI3NDIzCi06MTBCMjQwMDBFODU3QzZEQjgwQzUxOTU3MTQ4MDlGRDVCMzY4NjVFNEZECi06MTBCMjUwMDAyNzM1QkM3RTVENjNFMTdBREI2QjcwQkQ0QTdFREE2MEM4Ci06MTBCMjYwMDBGMkM1Q0FDOEQzOUE3NTczOTMyOTVGNkUzMEYwRjczRjYxCi06MTBCMjcwMDA5QTJDRTdCQzgyNzIzMjIyM0U1MzQxOTg0RjNDRjc0NEVECi06MTBCMjgwMDAyMTFDMTBFNDk2NTY2QjE4RkY4RkMwRjdDRjFGQzI3N0IyCi06MTBCMjkwMDA2QjhBRUI1RDE2Q0Y0RDU5NDBGQTRGNTNGMjc5Njc2N0QxCi06MTBCMkEwMDA1OThBNUQyNEZDMTY4NjNGMTA5M0Q1RDI4QTQ3MDc1MkVGCi06MTBCMkIwMDA5QzFGRDI3QkMxMTg2RTc3MUY1QUI5NUVDRUI2OUEzMkU4Ci06MTBCMkMwMDAxRDFGNTgyN0Q4MEZBRUZCN0E5NzhGRTJEMDI3NDgwODZBCi06MTBCMkQwMDBCRUYzOTlENTM1NDA3NDM0ODk4MThDNDJENEQ3MUREMUMxCi06MTBCMkUwMDBDNzBDNjQyN0FBMUQwQkE4QkNBNUM4N0Y5QjAzQkMwNjdFCi06MTBCMkYwMDBFNjFGRTU5NjMzRjU5ODJERUMwN0MxRTVGODFFQ0FBNUMzCi06MTBCMzAwMDBDOEU5QUNEMkUzNzE0OThEN0IxRkFEQTVBRUY2MkEzQ0VFCi06MTBCMzEwMDAyMTNDNDFBMkE3NDkwQUFEMjBCQjM4MTVGRjlFRTExMzhECi06MTBCMzIwMDBFNkE3NTNCOTNEMkFGMUFCNjc0RkVGNkQ2OTFDNzQ0MjM0Ci06MTBCMzMwMDA4NDFGMzZFREY5RTZBQjBGNTBERjREQTM2NjNCNUQwRjgyCi06MTBCMzQwMDBGQkRGOTYxNkVBMEJCMDFBRDRDNDE3RDUyRjY3NzUxQjBFCi06MTBCMzUwMDA3REQ0NUY5NUVEM0U3RjM5RERBQjc4QUZERjQ2NzFGQTg2Ci06MTBCMzYwMDBFMkZFNDAxQjk1Q0JDMTlFQzM2OURDMkZENDNBRkU2QjM1Ci06MTBCMzcwMDBFMUU3RTQ5M0I5MTIwNTc1QUNDQjVFOTBCQzQ2RTRBQjUzCi06MTBCMzgwMDA5OUVBMEIwNUY2MjA3Q0RDODQ3NjEzNDdGNzc5QkZBOTkwCi06MTBCMzkwMDBGNjk1MERCREFGMTlBODJGQzE2NzNDQzQ2RkFENDJGRjM0Ci06MTBCM0EwMDBBQUFEMzc1QzRBRjU2MkFENTdEQjJGRDZGNTdCRDcxM0Q0Ci06MTBCM0IwMDBERDc1M0JCNEZCNkFCRkQ5QTQ3QzVGNEZGNTlBOERFQTdCCi06MTBCM0MwMDAzRUVEQkQyNkVBMzdGM0E4RkVEM0VFNjc2NjJBRkRBNjVBCi06MTBCM0QwMDA5MkZGNDBBOTMzNTcyQTc3ODgzRjMzRUJGRjBDNUUyMzU3Ci06MTBCM0UwMDBGMkQ2RkM2ODhCREQ0MjcwQkFEOUNFRTI2REZEMDY2NkZFCi06MTBCM0YwMDBDN0VBN0REODlBQzg2QzQ0RjVEQkRBOERDMEVBNjc1NTk4Ci06MTBCNDAwMDA4RUY5NEYxQjFEQTQ4RkZDQTc5MzU5NUQ4Q0Y1M0NBQkE3Ci06MTBCNDEwMDA0NzMwOUVGMEZFMUU2NTIyQTBERDNEMTcxRkNBMTQxMUE1Ci06MTBCNDIwMDBDRjczM0REOTc2QUFCNzVGNUVFQjgwN0Y5RDE3QTY0RjlECi06MTBCNDMwMDBBREY3RTc0QTNCQUIwQ0Q0NDdERDg4N0QxNDZFMzVGNzlBCi06MTBCNDQwMDAzRUQ5NjY0MkI4NzkxM0QwMEQyNDJEM0I4RUVBQTZFMjkwCi06MTBCNDUwMDBGRDEyNzhFOTFERjAzRTUwOEU2Qjk3MUE0RjUyQjBCRTI4Ci06MTBCNDYwMDA4RjkwNDc5NDNDMDlFNDA5RkE3OUEzQTJCN0U4RUMwNDY5Ci06MTBCNDcwMDBDRDc5OENGRDFDQ0RGNzcxQTU5OURBRUYzRDBFN0Y2RTZECi06MTBCNDgwMDAwOUM1NzNGRTdEQkNFMzAyQ0RGRDM2QzE2REY3OTFDRERDCi06MTBCNDkwMDAwNEYwM0ZCQzU3QUU4OEIxQzJCRjgyQ0QxRDEyRTcxNzgyCi06MTBCNEEwMDA2OEVFNkY4ODlEQjc5RkVDQkJGQzBCREQxODNCNzA0QkMzCi06MTBCNEIwMDA2NDc3NjUwMTgwNDc1MDJGQjM4NkI1RTdDNTA3REIyMTY4Ci06MTBCNEMwMDAxNkYxNDcxREQ0OEQ5OTU3Nzg4MEVBMTZBM0FDREQ1RjNECi06MTBCNEQwMDBBRURBQzU1NDk4QUE5OTQzOUM5MTNCQjdGQkQxMjE5MTEwCi06MTBCNEUwMDBEOTQ1MDk5Q0Y3NzA3OTExQzk1OTBGNUU3OUJDREM0NkMyCi06MTBCNEYwMDA2OUE1RkI2NjAzRjM4QjU5QkQyRDc2OEE0NzkzOUQ1QTQ4Ci06MTBCNTAwMDBGOTI3RDc2OEU1OUZFQUQyQ0EzQjZEOTU1NkRFRTk2RTBBCi06MTBCNTEwMDBBREJDQ0Y2REQ1Q0FEN0VBRDFDQUNGQjY3MTk2RTZGRTFCCi06MTBCNTIwMDBCNEY2NEEwRDNDN0RGMzAyQ0RGREYzQkQwQjM1NzBDRTc0Ci06MTBCNTMwMDA4RUFCMzRGNzY3NzQyQ0QzOUNFNzc3QUZENjlDQUI3NjkxCi06MTBCNTQwMDAzNkQ2MEUyRUY0MzU4RkIxMzMxMUM0MDhGREFCN0E1NkMyCi06MTBCNTUwMDBFREEwNzBGRkFEMUEzQ0ZGNkZGRDZGMUZBM0ZGQTdDOEUyCi06MTBCNTYwMDBENzMxREVCRDE1M0I3NDM3QjlFQjY1RDEzQ0FFOUQ5OTQzCi06MTBCNTcwMDAyNzk0RUI1OUJGRjZCNjlDNTgxNTQzNzc5NUZDRTY1NEQzCi06MTBCNTgwMDBGMjFCOTRGRjkxQzMxNjBFREJGREY2N0QxNENGMEE4RURECi06MTBCNTkwMDAzOEFCODhBRUEyODA3QjFGODVGMzkyQTFGNkFBMzhCQTk5Ci06MTBCNUEwMDBFRjAwRDkzMjg1OEY5Q0U4RkVFNUE1MDJFODM0N0U4NTYwCi06MTBCNUIwMDBGMDk0QjAzQ0FGRjBBQzkzRTJGMDcyRDk3N0RFMzYxNjdGCi06MTBCNUMwMDA2RUM5RTk0QkMyRjMyMEExOTRFNzg1NkE0NzE0RTgyMkNCCi06MTBCNUQwMDBFNDUyQTFFQzAzMjVFOTI5NjFGOUFCRjMyM0VDMDdDMEEwCi06MTBCNUUwMDA0MEZEODA2OEYyQjY1OTI3QUE3N0VDOUIyNTU2OEZCOUEzCi06MTBCNUYwMDA1ODdERjY4NkUwNjI3M0E1NDUyNjdGMDZDNUY3REYyNUYwCi06MTBCNjAwMDBCQkRFQ0VDNEI4NzY0QUI0Q0JBQzlFMTMwMjZEQzQ1NDM0Ci06MTBCNjEwMDA5MDE4QTNBNEU1QTlBRjc2NTAxRjg3RUQyQ0NEMkJGRjgyCi06MTBCNjIwMDA3NDQ3NkRCNTI3OTc5MTZGMDk5NEYwQjY5OUZFRjU2NzQ5Ci06MTBCNjMwMDBCQThFNjRBMkZDMDcwNENCRkE0MkZDRjZBRDU5MjczMzVDCi06MTBCNjQwMDAyODdGMTkyNTk0NDQwMUNENEYxQzQ3RTlGQ0NDREMyNDBDCi06MTBCNjUwMDAxOUY5QzM3ODFCMTA2NTBGODlDMjczQUJDMEZBOTA5M0I4Ci06MTBCNjYwMDBGNEQ4Q0MwOEZGRERBODY3NzkwQjk0QkVFQzFBNDU1RUQwCi06MTBCNjcwMDA2QTVGQjY1NEMxM0Y4MDRGQUNDMjc4N0U0REY3MUI0QzE5Ci06MTBCNjgwMDAyRTc1MjlDM0NBMUNDQTZEQjdFMEZCMzc0QzM1MTc1MDVECi06MTBCNjkwMDA1RjBBOEU0MjNCRUZFN0Q1M0UyRDRERkEyOTc5NTVFREY1Ci06MTBCNkEwMDA2QkNGNzZCRjJFNjU0OEQzMkZDM0NFQzQwOUU3OTE2MzE1Ci06MTBCNkIwMDBFNzVFNjFCRUY5RkIwMzlCQTI1OTFFMUFEODk0Q0VFNjQxCi06MTBCNkMwMDA4QkUxRjc0RkIxRjdBRjcxQkZBM0IxOTNFQjVBREZENzVGCi06MTBCNkQwMDBEOERGRjU5RThGMzRFNzgxQTQ5MDNFMERGOTBGRUM0QTM4Ci06MTBCNkUwMDA5RDc3MzVDQTZGRTQwNTYzMDlGNUFCQThCNzM4NUI3MTgwCi06MTBCNkYwMDBGOEZEQzAzREQzRTcxMEJFRkZDREU3QTc0Q0JFRkQ2QjA0Ci06MTBCNzAwMDBGRDZDRUVBNkYyNzk2Q0VEMTEwNjA3RDYwNkQ4M0E5NkQ2Ci06MTBCNzEwMDA0RkI1QkY1NTU3QzNERjIwOUJFQUU1OTAzMEM5M0VEMUY2Ci06MTBCNzIwMDBCQ0U2MzExQkVGODNGQTY3NEZBOUE0N0NEQzlGNkVEMDg3Ci06MTBCNzMwMDBGMTM1OEJDM0E5QTUyNjBFQ0Y5QjRGNkI1MDZGREU0ODBBCi06MTBCNzQwMDBGRDZEQkYwMDBFMDFFRDYxQTlFMDdDRUM3QUU0QkIzQTJGCi06MTBCNzUwMDBEOTk1NkJBMzdBNzI3NTI4NEY4N0ZFRDA5NDFGQjg1NjdGCi06MTBCNzYwMDA0MDdEQkUxRUVGQ0EyN0ZFMDUyQzA2NTMxMzE4OUQ1OUI3Ci06MTBCNzcwMDBENDM3MEM4OTlFM0MwMTYzQzE0RDRGNzY1NzUzRkQzRjMyCi06MTBCNzgwMDAzNEM5NzM4QTMyNzZBREFEQUI5QUZBODMyMTAzRjc4RjUxCi06MTBCNzkwMDA1QjlFN0M4NEY5QzNCNzE2RDc0QzdBRTcxMzQxRjIzMTJDCi06MTBCN0EwMDA3QjdFNDlGMDZFNjdGNjE2MzAyQzhDRjhCQjgyM0FBRjgwCi06MTBCN0IwMDBBMTdFOUJGQTlCNjAxNDVGNjdEQkY4REY1RjJBQzdBQzUyCi06MTBCN0MwMDA0QjZEM0NBRURENDI2QjMxRTlFNUVFMkNGQTdCQ0FFODBECi06MTBCN0QwMDA2NjIzOTA1RjIwM0U4NzQ4Rjg3QUY4NUM3NjBBRjI0MDRDCi06MTBCN0UwMDA3NTBENTY2RkFDNUYyODc4RDVFOEEzRjhBMUNFNzUxNjE1Ci06MTBCN0YwMDBEQkFDRUNCRDI0MUI5RkQ3MjRERDY3RjRCNkIxRkNFRUI3Ci06MTBCODAwMDBDRkE4NDYzQURCRjU1OEVGNTBERjcwMTBEODFDNkQ4NDk2Ci06MTBCODEwMDBFNjYxMTE3QTU5NkNFM0ZEMTdEQzA4QzBDRjkzQjdEMTBDCi06MTBCODIwMDA3OTQzRUZDMDMxOEEyN0RGNjdCQUFFMjQzOTBDODg3MkJBCi06MTBCODMwMDAwOUM1OTM4NkQ4QkRBQ0RFNkJCNkM5RUMzQkE0OTdGMUM1Ci06MTBCODQwMDA4RjcxRTE0RUQyQ0YyRjM4MEY1QzQ1RkE2RDMwMDU3OEZECi06MTBCODUwMDBEREFBQ0MwM0NGMjZCNzkxRTVGRTg3NzJEOUZDQ0I5RTNCCi06MTBCODYwMDA0MUY0QTlGNDIyRkRDREI2ODhCOTlENEE3RkY4OUQxRjA5Ci06MTBCODcwMDBGNjBCNzVBRUE1QzI4MzVCMzY2NDkxOUZBMTVFRjhCQ0UyCi06MTBCODgwMDA1MTEyQUU1QjM4QzFGNzBGMkFGQTNFOTZFMkY0MTBGRTcxCi06MTBCODkwMDBENTZFM0VGNzBCREI0REZCQ0Q0NzQ5Q0ZCRDY2MTYyNzc2Ci06MTBCOEEwMDBDRkY2RkQ1ODNFMUJGNkY0MzI3OTIwOUZENzEyN0YxMTU4Ci06MTBCOEIwMDA3Q0RFMUJDOUU3NDhDRkUxODc3MkU1OUZDRjVGMzA5REYzCi06MTBCOEMwMDBGRjFEMjlCOEVEOUIwQzE5QkY2RkQ4RkRDNjExQjJCQjg3Ci06MTBCOEQwMDAwNjc1MUVERkE1OUQzMzE4Mjc2MUZGOUEzMEQxMUMxRDA4Ci06MTBCOEUwMDBCMzRGNDQ1RDY2NTRCRjlGQUFEMzdFOEYwNTM5Q0RBOTVGCi06MTBCOEYwMDBCQkM5REZBOTdFNzFGMEJGOEJBOUY5Qjg0QkU5NkI4NDk2Ci06MTBCOTAwMDBDMEVCMkMxRjEwM0VGMjg3RjU4Mjg3RTU0NTc1OEVEMTdFCi06MTBCOTEwMDAyNjYwREUyM0REQkE1QTU4OUU5MENFMzVEQkM5OUVCQjI5Ci06MTBCOTIwMDBEMDA2RkRFNDA3M0E0NzM0OUI1RjhGRTlBM0JGMzVCOEUzCi06MTBCOTMwMDA3NjkxRkNENkJDNTM5OTRDN0Q3NkU3OUIwQjk0N0U4RDFCCi06MTBCOTQwMDBFN0E5NjJDNTJFOEIwOTNGRDE5RjFCQzdFQ0I1NDhBMTYzCi06MTBCOTUwMDBBRkM0ODRGNTUwMjY4NTdDOEZDNEU3MTVDQUZDNjNEMzM5Ci06MTBCOTYwMDBFQjlBM0VFRkJGMzI1OTY4NTMwMDFFMDAwMDAwMDAwMDAyCi06MTBCOTcwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDE1Ci06MTBCOTgwMDAwMEZGRkI1MUNGQzBGMDAzOEFDNTE1MTkxODQ0RDQxOTI0Ci06MTBCOTkwMDAxODRDMzQxODE4NTY2ODIwQzQ2OTg5QjVCODI5RDM5RjQzCi06MTBCOUEwMDBDOUMyQzA5MDBEQzRCOTQwOUMwRkM0N0M0QzBDMENGQ0E3Ci06MTBCOUIwMDA0Q0M0RUIxNzE0NDVCMEY1MDQxOTE4ODQ4MEZDNkYwMkQxCi06MTBCOUMwMDAwQzBDRDc4NTE4MThCRThCMzAzMDA4MDNGOTJFNDBGMUM3Ci06MTBCOUQwMDAwNDIwQ0UwMTYyNkZBMDU4MEI5MDVFMDRDNERENDAyQ0ExCi06MTBCOUUwMDAyMjhBREY3QzUxMDJGMjZCODU1MUY5MzdEMUY4N0I4NEQyCi06MTBCOUYwMDBGMEVCNTcxMEMxMkZBRjQ3NDAxRTFCMTZEMTIyM0YzRTIwCi06MTBCQTAwMDAyMjI5RDAzQjEwNTg1RjAxOTU1RjI2QzdDMEQwMjcwRjcxCi06MTBCQTEwMDA4QzdGQThCODAxOTJGQzRCMjBCQjVDMEVDMkY2OTY2MEVFCi06MTBCQTIwMDA2MDI4MDZGMjBEMTVCMDlCRUIwMzk0MkYwMUNBN0Q4NUFCCi06MTBCQTMwMDBDQTAzMDBDQ0NDQkE4QzY4MDMwMDAwMDAwMDAwMDAwMEYwCi06MTBCQTQwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRkU1N0QwQjc4MTQ0NTA3Ci06MTBCQTUwMDBCNjcwRjU3NEY3Q0MyNDk5OTk0QzEyRjJFMDNENDkwMDg4Ci06MTBCQTYwMDAxMTAzMEUyMTQ0QzA3MDk5MjRDMEEyNDYwRDAyMUExNDdECi06MTBCQTcwMDA3NTAyOTI4NDkwOTc4ODdFRUNBRUZFMzMwMTg5QTBBODZGCi06MTBCQTgwMDBGMUI5QUMxN0RENDE2MTM3QjJFODA2MEMxODM1RTA2MDVBCi06MTBCQTkwMDAwMEIzMkVCQUMxNDVDMEU3MjY4MEJDMzYyNDQzRjBCOUI2Ci06MTBCQUEwMDBDQjVFNkY5RDUzRDUzM0REOUQwOUM0QzdERTdGRUZGRkFECi06MTBCQUIwMDA4RjlGNUZBNUJBQUFFQjcxREVFN0Q0RTk0MjMyOEYyN0U4Ci06MTBCQUMwMDA2NDBBMjFERkMxOEY5NjlGOEI4NDkwRjg1MDU5NkYyMEI0Ci06MTBCQUQwMDAyRTkyNDE4OEQ3NjZGNDZENENBNkNGODgyMzdBRTY2ODBCCi06MTBCQUUwMDA1QTk4MUREMTM3NTg0M0VGRTlDQkQ1OUVBNDM0NjkxODM1Ci06MTBCQUYwMDAyMTBGNzkxQzU4MTJFMjIzODQ0RUI1NUEyMDA1RjUxNjAxCi06MTBCQjAwMDBBODNCOTNFMDdEM0EzRTIxRkRFOEY4MEY0NkUyRjgzMDhECi06MTBCQjEwMDAyRDk5MTgxQTY3MTAzMUUwN0I1M0FERjk4OUIwMUU0Mjk4Ci06MTBCQjIwMDA2QTQ3RTZDM0ZDMTYzQjIxRkQ3QjlGOUY4RTg4RUJBN0VGCi06MTBCQjMwMDBFRjBEQzFGNzI0RkE5RUI1RUZFRjI5NjU1NzBFRkQxM0ZGCi06MTBCQjQwMDBGNkRGNkRGNjZEMTQwOEYxRUZGQ0M3NzE1OEVGOTk4NkJBCi06MTBCQjUwMDAzOTBFMTM1RDZGNzZCN0Q5M0YwNUVBQkU2QzlGODlCNjgzCi06MTBCQjYwMDBFNzZFRkJDMDI2RDFGRUU1REI0NDA5REEwRDNCMjNGMDhFCi06MTBCQjcwMDBGRENFNzU4MjBGRUE5NUE2RDY0N0FFQTRGNUMwMzY5MUU0Ci06MTBCQjgwMDAzQzBGRDNGODJEMDY5MjQwQzg3MTMzNjEzRjg3MTVFQjA3Ci06MTBCQjkwMDA0NTExQUM1QUJFN0VENzZEMzA1RjQ5QTM4OTQ0RDBGN0JBCi06MTBCQkEwMDA4RjM3ODgyRUE4MkZEOTI4RjgwODlEQUZGQ0I1MDc4Q0IxCi06MTBCQkIwMDAwM0U4NzhDNTNFQTEzRUMyNDFFQjFCMUYzMzNBRTgzRTg1Ci06MTBCQkMwMDA5N0VGRkNEOEQ2NDZFMTdDREE2MzI2MEUyM0VFQTNBNEQ5Ci06MTBCQkQwMDAzRThEOTA1MkRGOTZFOTAzRThGQkE1OUIwNTI3ODBCRUNBCi06MTBCQkUwMDA3NERERDk0RTU4NUY2OTgzM0M1Q0E0RTMyREFFOEIyMjkzCi06MTBCQkYwMDA4RTkxNkNFRUVGMDhDQ0Q3N0MxNEU3REIyNjBGODNGOTJGCi06MTBCQzAwMDA0QUNFREY2NTA0MjRFNTZFOTM5MTJFQ0FFOTNBNjBERkRGCi06MTBCQzEwMDBDQUJDQTczRDZCNzEzRTA1OUVFNTJGRDJGOTY4QkY4QTZECi06MTBCQzIwMDA5NzA1Mjc2Q0IxQzI0MERDQjA4RUNFRDcyMjBBNUVCMDM5Ci06MTBCQzMwMDBDMEZFQUE4RDIzQUNFQTdEMTQ2RTg3N0Q5NEZBRDYxQkQ0Ci06MTBCQzQwMDBBNzVCNjA3REVCOEQ0NTY5QTFGMTE2RDdGREE3NzY3REQ5Ci06MTBCQzUwMDA2QjUzMTNERDY5QkRFM0YzQjQ4NzgyNzQ0NEE4NUU0QTc1Ci06MTBCQzYwMDA4ODBCRTk0RkYyMTk4MThFOTVFN0U3ODUxOEM0RjdFMjUyCi06MTBCQzcwMDAzQTkxMzhDQ0ExRjExNTNBRjA3RUMwRTk3NDg3OTVGMTdDCi06MTBCQzgwMDAwMUM3REIxMjNCRTAyQzg0Qjc2RTNCQzdBMzE0Qzg1NDNBCi06MTBCQzkwMDA4RkFGOTQ4RjAwM0VFODdBNkEzRDc2MkMxRkY3MjQ2MUJGCi06MTBCQ0EwMDBGOUE0Qzc4MTcwN0JEQTMzMTJDQkI1MUUyNzNFN0ZDNjVECi06MTBCQ0IwMDAzMzAxQ0I3NTFFMTc5NkNGNzk2NjYwRTlGM0U0NjNCRjU1Ci06MTBCQ0MwMDBFNzNEMDU1ODZFRjBCOEYxRjk2RjNEMjU1OEQ2NzlBQUQxCi06MTBCQ0QwMDBGMEY5MjZDRjMyMkMzNzdCQkNGOEZDNjVDRjJBMkNFQjUxCi06MTBCQ0UwMDAzREI1NTg2RTA1N0NEMUIyQzFFM0MzN0VEQjNENzU1OENFCi06MTBCQ0YwMDAzNjdBRUFGMUY5RUI5RTQ2MkNENzcwMzhEQUIyNDhCNkJDCi06MTBCRDAwMDA0NEUxNjA3MzExM0I0NTNCODlDRDczNjVDQkI0MUU5QjA5Ci06MTBCRDEwMDBDRkVBMDlGM0JDRDk0NjVBNEY3MEQzM0E4NUNCODAzMjZCCi06MTBCRDIwMDA3RkI2ODlENjA3NTRCMUY2MjFGNzkyMUMzM0FEMEZGMUQ3Ci06MTBCRDMwMDBCMkY2OTQzNUFFOUMwODVBNEZBOTY1RUQyM0Q2Nzk3M0I3Ci06MTBCRDQwMDAyMjY5N0Q4NDhGQjU4RkRBRUNDRjg5QTJGNTUxRjVBQ0VECi06MTBCRDUwMDA3RDRDMTNDOUI1RDBGQTE4M0ZBQkE3RUY3M0U1NUE2OTBDCi06MTBCRDYwMDAzREJEOTVENTMzM0ZGMUU2REE2ODNEQjM4REJEM0ZBOUMyCi06MTBCRDcwMDBDMzI3M0EyQzNERjFCMDU1NzYyQzIwMTQ1NzREREVCOTJGCi06MTBCRDgwMDAyRTg5Q0E5QkFENDZDNzVEQzQ0OUM4N0JERUY5MkU4OUEyCi06MTBCRDkwMDBDQTg3MDZEOTg1RUQ2RERFQzVBQzZFNzQ2MTdCQjc3NzU5Ci06MTBCREEwMDAyOUY2REYyRUJCQjE1REFBQkUwRkRCQjcxQkRERDg5RTI3Ci06MTBCREIwMDA1MDVEODNFRDhEQjIxN0RCNDc1NjNGOEFFRDhENDYyRkUwCi06MTBCREMwMDBCNjRGQUE1RThCRjVENzY1MUZCNkU3NTVBRkM3RkVBRjc2Ci06MTBCREQwMDAxQjdERDhGRUY4RkQ5QjVDNTM2OUZEMDVDMUJEMURFNENDCi06MTBCREUwMDBERTBBQzE1RDQyNTI4MTlFRUE5MzQwRUVENTcwRjlGOUI4Ci06MTBCREYwMDAxQzEwMUQ2REFGRTk2RjQ0M0VEQ0ZBNkVFNjBCQzBCRjUwCi06MTBCRTAwMDBGOEVCMDdGNUEyREYzRTk4OENFM0JDODlFM0M4NzQxQzBECi06MTBCRTEwMDBGMUUyRTNBNEJGMzc0MTMzNEVGQTdCMjVDQTM4MkQzODBGCi06MTBCRTIwMDA0RTQ0REZDNkQ5RkFERTI0RUQ3QURFMkI1NUM2RDkwRjkzCi06MTBCRTMwMDBGQ0I0QzJEQUI3N0RBNUZGMzk0QkJCOUUzRjk3MjlFMzFGCi06MTBCRTQwMDA3Qzg0RUI4OUU5REI3QTFBM0VEMEMyQTdFMTgzMjA3Q0FGCi06MTBCRTUwMDA4RUUyMzhGMTdENUI0RkM2NDEyRDdDMzIwRTA2RTFEMzc4Ci06MTBCRTYwMDA4MUUzRjRFRkRCMzgwRDA3QjVGMDY5MzgxODg0Q0Y5NzFDCi06MTBCRTcwMDAwODlGQzE3RERCNTdDNjIxMkQ3QzMyMEUwNUUxRjM1RkEzCi06MTBCRTgwMDBCODlFRTRCRThEQjNGRDUzMkQ3Q0I2N0YxQTg0OEY0OUQ2Ci06MTBCRTkwMDA4MEY1MENFRkRCQkUzMjNGRDNDMjI3RjNCMzIwN0NFQzNFCi06MTBCRUEwMDAzOENFQTU3RDFCNjdGQjY3NUFGODZDRkYyQzA4OUZGRUY4Ci06MTBCRUIwMDAzOENFRThCRUVEMkJGM0FGNUFGODY0RkUzNTA4OUYxNDc4Ci06MTBCRUMwMDAwMUUwMzNCNjZGRUI2OUZDNUMwQjlGQzZDRjgzRjBCOTIyCi06MTBCRUQwMDAwQ0M3MTlERkI3RjU0QzM4QUU4NUNGODRFMzQxRjg2NDYxCi06MTBCRUUwMDBFMEJFMjZGNjZEOUNDNkUzNUFGODM0MUUwRkMyNjczMkQ4Ci06MTBCRUYwMDA4RTMzQjk2RkZCOUE3MDQyMEI5RjA5Mjc4MkYwOTk4RTlGCi06MTBCRjAwMDBFMzY0QkJFQjk4NTE0NkM3QjFGNjNFQ0VFQjY3QjRGMEE1Ci06MTBCRjEwMDA3OUZENEMxMDNFRDdFMzM4RDNFODM4QTkxNzFGNjc1Mjk0Ci06MTBCRjIwMDBBNzE2M0U5MzNBODNGMDI5QzA3MUFFRUFEQjM4QUY3N0FCCi06MTBCRjMwMDA2QUUxRjM3QTY3MTAzRTg1MzhDRUI1N0REQkQ3QTQyRTUzCi06MTBCRjQwMDAyRDdDMjY3NTMxRjg4QzNCNTA5NTZCQTNFRDU0MTczQTM4Ci06MTBCRjUwMDA0NUZBQ0E5NTFEMkU5NzQwRUJBMjlERDU0NUJCOTM4MDBGCi06MTBCRjYwMDA1RDIyMkFGNjA2Njk3NTg5RjQ3RENCRTY5OEY0MDc4OTg3Ci06MTBCRjcwMDBEQUVFQzhCOTEzRThDNzRBQUQzMUI1REQxMTNEMjE1MjNCCi06MTBCRjgwMDA2M0U3QzRCODYyMzVGNUI4MTkwMzM0RkRFM0YzNTMzNEZECi06MTBCRjkwMDBFRDg5MDVBMzM0RURGRERERTk5QUZBQzA5MjQ5OUFGRUQ4Ci06MTBCRkEwMDA4M0FCNzIzNEY1QTFDQkFFRDZGNDRGRjZERUEwQTlBN0QxCi06MTBCRkIwMDBBRUJBNTlEMzdGNzhFRDdDNERGQjI1NkI0QjM1RUQ5N0IxCi06MTBCRkMwMDBGQTk2NjhFQTk3RDVGRDQyRDM3Rjc0RkQ3MjRERkJFNTgyCi06MTBCRkQwMDA4RDBGNkFEQUM3RkExRkQ3RDRDN0I1M0NBM0U5M0ZCRUI1Ci06MTBCRkUwMDBGNTc5NERGQjE1ODczNzY5REEyN0I2NkRENUQ0QUYzQ0E3Ci06MTBCRkYwMDBGOUJBQ0VDRUIzRDg4RjVGQzZFQjIyRDAzRDYxNzY3RjQzCi06MTBDMDAwMDA3RkU2RjdGOEFENDZBQzFCMDc1OEQwOEVERjY1MkQ3MjgyCi06MTBDMDEwMDAxQ0EzRjgzNUJFQjVDMEQxOEZFMjE3NzAwQTdFNDVGNjc1Ci06MTBDMDIwMDA4MDkyNEJEQUU4RjM3QjI2QjkyRkIxRDNFN0Y3MThERDFFCi06MTBDMDMwMDA5N0RCQzNEOEE3OTQxRTA0OTIwNEE1QzMwMEE1QkVGRDM4Ci06MTBDMDQwMDAwMTk5RDE2M0NFQzBGMzIzREFFOUZCOTU4NkMwODgxODQ1Ci06MTBDMDUwMDA1QUNGMTJCMzFCODE3RTc3MEFDQzJGOEExNDQ5MTVGNDZDCi06MTBDMDYwMDA4QjM0MTFGNDBCMUU0OENFN0NDMUFCQTJENzU1ODMyOTZCCi06MTBDMDcwMDAxRjBBQTE3MTU3QzlFRTI0QjAzM0RFQUE2RUY3ODIxREU0Ci06MTBDMDgwMDA1MjMzOThFRTZCMDAyMUNENDJCQkRGNEJGREI0MDcwNjY3Ci06MTBDMDkwMDAxNzI1QjlFOTc4MjYyM0I1RDNENUYzMUJFOUZDNjkzODEwCi06MTBDMEEwMDA3RjBCRDBFQjdCMzA3RjdDQ0ZGOTREMjkxMzM0RjM5QjkyCi06MTBDMEIwMDA4Nzk0NjhFNjM3MUJFOUZDNzY0MkRFQUYzRUM1RTdBNzBBCi06MTBDMEMwMDA0ODk4NDRDODVGODQ1MzM4QkY2OTQ4MDlDRUZGODA5MUJGCi06MTBDMEQwMDBGQTJCRUFGOTIzODNGMzFGODZGRDdGRDZEQkZFNTMyNjc2Ci06MTBDMEUwMDA2OUY3M0ZBNDU0QkI3RjIzREJGRjkxRUFCMzdDRkU0ODkyCi06MTBDMEYwMDBEQ0ZGNTFFMTJDREJGRjkwNTJCNjdGMTMxQjM3MzhCRkJBCi06MTBDMTAwMDAyRDA4RkY5MzMwN0Y2NzJGRjM5QjUyQjNCNEZCMUY1QTY4Ci06MTBDMTEwMDBBNkREQkY4OUNEREY1REZEMkQ5RkRGODJGMzlGMTNCRUJFCi06MTBDMTIwMDA2NUZCMUY1QTg2RjMxQjRENkUyN0QwOEY3MTYwNjQ5NTk3Ci06MTBDMTMwMDA4RkNFNEYxRDYxMDc0OTA0NzJBMUYzNDAzOTMyMTZGREJECi06MTBDMTQwMDBFNDk3ODQxNDVDQzczRDkxOENERUJFOEFBNEY0ODZGMjI5Ci06MTBDMTUwMDBDNkNCRkM1ODFGOTU2Qzk5RDRFRkUyQjRCRTc4NzNCNjg5Ci06MTBDMTYwMDAxMUU0MTJCNjUzN0Y2NTIxNUZFQTFEOEQyMkQyMzc3OTIzCi06MTBDMTcwMDBEMkU0MUI0RUQ3REJEOTI4N0FBMTdFQzc5MzkzN0QyMENBCi06MTBDMTgwMDBGRjJBNERFNEY2N0M3ODRGMjI3RTc4RkVGOTUzQTM5Rjc4Ci06MTBDMTkwMDA1N0VGNEI1RjJFQUM5NThGQjdBOUY4MkRFODQ3RTU5MDg4Ci06MTBDMUEwMDA5MTU1MTY5OEQ3QUVBOTFGQTE3RTEwQTFGRUM1MjdENDIwCi06MTBDMUIwMDBDRjIwOTQyNDhGQ0E2Q0JFQ0ZBOEJGMDRGNTM2RUEyRkQ3Ci06MTBDMUMwMDA0MTNCMjFENUI4NUZFMjc1N0QzMDhDQUUzRjlGMjgzRjYzCi06MTBDMUQwMDAxN0VFRjMyNjY0MjkzQTlFQzRGOEY3QzgxQUMxMDdGODg3Ci06MTBDMUUwMDBCODdENTkxNDA1N0U2ODNEODVERTM4NEQ5REVFMEZGQjA4Ci06MTBDMUYwMDAwN0FFMTI3Q0NGMEIzODg2MUJFMDMzOTM4RjQ3NjBCREIwCi06MTBDMjAwMDBCNDVFNjA2N0VGMUNBMkU4RUY0RjUxQjA2MEQ1NDA4QTgyCi06MTBDMjEwMDA4QkQwMzhCMzg4NEI0RUE0RUZDRjU5NUEyODQzRThBMkFECi06MTBDMjIwMDA1NTEwMDYyRjAxRkE1OTIwNTM5NzExRTBFNzhEMjc2OTIxCi06MTBDMjMwMDA5QzM4RTg3QTZGQjZCM0YxNjdCQUU0NjM2REFBRjUxNDc3Ci06MTBDMjQwMDBDODY2NTczRTVENEY0MUExODhFQjlGMzU0M0RCRkVEMTY5Ci06MTBDMjUwMDBDRTI4OTc2MTBDMkQ1NzNEODFGM0NDQzlEN0I2REY1NDVBCi06MTBDMjYwMDBBMEFEQ0Y3NTZCRUI1NEVGQzlBMEY3NkUyOUQxM0ZBN0Y2Ci06MTBDMjcwMDA2MEExRkI5QzE3ODQyQjVEMjg1REU3QUQxQzBFQjc1NkIzCi06MTBDMjgwMDBDOTVFMEQ1RUMxNkQ1NURBMjFBMEUwMjZCODJGN0M1RjM2Ci06MTBDMjkwMDBFQ0Q5RkZGNjY1REE3QUExNTc1QjVGQjA0QTM3M0VBNzYzCi06MTBDMkEwMDA5QkUzMUNGRjQ3ODAzRTY4NzkwMkU4ODNDMkYzMThBNzJFCi06MTBDMkIwMDA4RjkwNUNENUQyQzc4REMxNkQzMEZBNTBGNjcxNUM2MjNCCi06MTBDMkMwMDAyODM4QkU4RUQxQzdDMkRBQThGMEY0NTAxOEE0MDc5NzU4Ci06MTBDMkQwMDA5QUJFMTQ3QUI4OEREM0MzQTc5QzFFOEFENzZBRTk2QTFFCi06MTBDMkUwMDAyRUYxQUQ0Q0EyRUZERkIyNjYxN0UyRTlBMDUwQzhFODJDCi06MTBDMkYwMDBFMTk3MEEzREI0NjlFOEMxQ0RFOTQxOEZCRkRCMzgzRDI0Ci06MTBDMzAwMDBEQ0Y2NzM0NjBGN0E3Q0I2NzE3QTY4NUI3QjRFMjYyOTIxCi06MTBDMzEwMDAzREYxNEFGMUEwQTk1MzNDRThGMDZFMzcwMjNENTA3QzU0Ci06MTBDMzIwMDA4NEE1ODdGOUMxN0REMzhERDNGQTAyREVENjAzNUY5QzQ1Ci06MTBDMzMwMDAxRUIwM0QwNUMwNEUxMDRFRjg3RTZBQ0ZGRTU0NEU2OENBCi06MTBDMzQwMDBFQUM1NkJDM0UzQkZCMjMxM0JFRTk4NkE1REU1RjU1N0QyCi06MTBDMzUwMDBDNTFENTNGNTVCNUMzNzUzNTM1RkU0OUJBQkU5NUZCQzkyCi06MTBDMzYwMDBCNjUwRDNCRUIwNzY5MUE2N0RDMUFBM0IzNUY1NDJFRjVCCi06MTBDMzcwMDBDRjM1RkQ2RjVGNTZBRDY5QkZCNTZBQjVBNkZEOTY5MjI0Ci06MTBDMzgwMDBDNzM0RjVCOUVFNUY2QkZBREY1NEIwNUVEMzNFMjdGRkRBCi06MTBDMzkwMDA0NTRERkJBQzE5NUIzNEY1OTlBRUQ3MzRGRDBEM0IyRjAxCi06MTBDM0EwMDBCRDFFRTgzMUVCQTA0OEMwRkUzOEU2NzEyMEREMUZGNzY2Ci06MTBDM0IwMDA4Q0M0RjJBNEM3ODk3QzcxREEzMzAxQ0I3RDhEQ0Q0RjVCCi06MTBDM0MwMDA1QzQ5QkI3QzE5Mjg4ODI2NEM3RjE2OTExODQyRjYyQ0I0Ci06MTBDM0QwMDA3NzU3QUZDQTAyN0Q0RTUwRUZGRTcxNzk1MUI1NzcxMDk1Ci06MTBDM0UwMDA5NTUzMDYwN0MyMzk2RkFEOTFGOEM3MTEyMjgwNTJFMjBBCi06MTBDM0YwMDBGMzA3QzQ1MDdCNTYxQjZEOEZFQkJEM0Q2RkFEMTRCNjdDCi06MTBDNDAwMDAzREFCNEQwQTNCNkVFNUUzODU0M0VENjFFMjMzMjE3RUIyCi06MTBDNDEwMDAyNjAzQzEzRUVBRTJGNkI5QkVCRDRDMjBGOUVBRTc4NDQ0Ci06MTBDNDIwMDAyQzQ3RkU4RjMxMzBGRDVDNjY2NDcyQTI2QzZCRkYxQzgyCi06MTBDNDMwMDA2MjgzQkE3RjQ0RDU4NUU2QUJBN0NDOTUwOEY0OTFBQTcwCi06MTBDNDQwMDBFMUUzRTJCNTk3NjlFNDNDODFFODZEM0NEMEQ5MzhDREIxCi06MTBDNDUwMDBGM0M1NzU1NzZBREVFQkQ4MjVFMkJBMkI0MDg2NTA3RENFCi06MTBDNDYwMDAzRDhDRTQwNzBDQTA5N0ZEQ0Q0MzY2OEQ4Njc1QkFDRTUyCi06MTBDNDcwMDAxQTQwNUUzNUM2QTNGREQ4RTE5OTExNzc0QzAyM0NFNjFGCi06MTBDNDgwMDA2Mzc5RDI1MzgwRTU3MThGMUJDQjYzOUUxMjJDOEY3ODFBCi06MTBDNDkwMDBBQUIwNkNGMzJDQzNGMjMzOEYxN0NCNEYzQ0FCQjBGQzdDCi06MTBDNEEwMDBDODUzOEJFNTYxQ0Y1QTJDMEY3QTdDNTgxRUYwRDQ2MUFCCi06MTBDNEIwMDBGOUJFQTcxRUNCNTY0RjIzOTY5RDFFMTc5NjBBQkYyOTdECi06MTBDNEMwMDBGMEQwRDNERDQ5QUVBNzRGMDNGRDVEODBDRUUyQzQwN0I3Ci06MTBDNEQwMDBBQTU3MEQwQUQxNTlFMjhBODdBQkJENTlBMTcxRjNENjhCCi06MTBDNEUwMDA5QTM4OUQyNDY4RTg2MTA4Rjg2NEUzODE1RTRDOUM1RTlDCi06MTBDNEYwMDBDMkI3RTdBRDk1MkZEODlFRDUyNjg3MURCRkYyRjk3RjJECi06MTBDNTAwMDAwREJEQ0RGOTkxRjQxNkEyQTc4MTNBN0E0QUJEMTgzRDI2Ci06MTBDNTEwMDA0RDEyQzc4N0U4Njk4RUMxQ0VGNDFGQTdBNzg3NjAxRjk5Ci06MTBDNTIwMDA2MUZDOEY2MjMwRUFDNkFCRUMzQTU3MTQ4QjY3RjM3MzQ5Ci06MTBDNTMwMDAwNzZBRDFCMjc4MzY5RjdCMDUxREFFMTVFRDNGREY0ODA3Ci06MTBDNTQwMDBDMDczRjdDOEJGOEY4MDc4N0RGNzYxQUEyODkzN0JERjFGCi06MTBDNTUwMDA5RjlFNUU3QTg3QkIwQkZEQTAyMjFGNTVBMkUzN0FCNjkxCi06MTBDNTYwMDA0NzQ0MzJCODQ2MThDODBDOTI0RUM4RUFFMUJGNzVDRUFGCi06MTBDNTcwMDA0RkMzQkE0NDYyRTE3RDlGNzM2Njk4RjMyODAyNjc0RjA4Ci06MTBDNTgwMDA4OTE3ODdFQjBBRUI1NzYzNjBCQ0UzQ0ZGQzIzMTNDQTIwCi06MTBDNTkwMDAzOTg2MTRFNkRGMzQ4QjY4REYxM0ZGMEI0RTgwNkY1MDUzCi06MTBDNUEwMDAxRjk5OUM0OTEwMDcwRjBDMzdEQUQxM0VGMDU5QjRGMEFGCi06MTBDNUIwMDBGM0QyN0E2NjA4N0VBQjI5OEM1QTUxREZENzI2MjFGQzRDCi06MTBDNUMwMDA4NjdEMzVBMjdGMUZFMDc3MzEzOTdGMzE3OENFRjcwRDM4Ci06MTBDNUQwMDBGODk3QzBGMzYyRjJGMTYyNzI5MUI4MUMyRjM3RDJGRDY2Ci06MTBDNUUwMDA3N0VEMUM5REZFQTAwM0U0RTA4NUUxQUQ5QzVGRTlEN0ZCCi06MTBDNUYwMDBGM0JDMjg3RDJGM0FFRTRBNTBFOEI4NzUwOEExRjM4OEJECi06MTBDNjAwMDBBMjFEQzdFRjZFQjg4NEM5MkZDNUVFREI2NkYyRjUwNTMzCi06MTBDNjEwMDBBRjY3OTJCNUUzM0RDNUY5NEYxOUFGQkJFNTA1MUJGODEwCi06MTBDNjIwMDA1QjRCOTIwQ0Y2NjM2MUYwQTA5NEU1RjVDOTc2OEJEQTZBCi06MTBDNjMwMDBGRTZDRDRENkJCNkI4NTE5RjU2ODI3M0FBMjY3OEYwNkM2Ci06MTBDNjQwMDAzRDYxQjcxRjFCMDY3MjNCMDk0QjY1OUMyNTQ5NDZGQkE0Ci06MTBDNjUwMDAzMTJBRjc0RUQ3QTU0NjMzM0ZDRkM3RTRDMUU2MTg5NDM5Ci06MTBDNjYwMDAxN0E3M0Q2NkVDRkY1M0FGQTdCNzcxOTRGNTEwRDI0MDAyCi06MTBDNjcwMDA4RTlBNDExRUQzQjZENERFRkJGNzRBQ0ZEMjE3NDYzQzgyCi06MTBDNjgwMDBGNzZEOTJCRjAyRkJEMDRDRkZGRjBFRkMwRDIyNjE1REU3Ci06MTBDNjkwMDAxOUI3QjI1RUY0OUEyRTg3RTc5QjM1RjNEMUY3MUNDQTFGCi06MTBDNkEwMDAxOUVCNzcyOTE3RTIxQjg5MUM1N0U4OTZFQThCNjM1QzI0Ci06MTBDNkIwMDA5RjJDQUU4QkIwNkJFRENGMTg0REJEQjJCMUJGNUQ2MzlCCi06MTBDNkMwMDA4RkMyMUY1NEZFOTIyQTQxMDJGQTI5RTNFNEQzMjU1OTZFCi06MTBDNkQwMDA1NjA5NzQ3RDZGNDI5MDEwRTg1NjYwRkRDQUNENkQ0NkQ0Ci06MTBDNkUwMDBCNzAzQ0U5NTE5REU3QTVCMUZDNURGNEM4OTkyN0M4OTMyCi06MTBDNkYwMDBCOTE2Q0Y2MTRCRUEyRjlEMEE3QUU2NENDMzhBMDQ4OEFCCi06MTBDNzAwMDAxQjJDMTZCQkVGQzkwRkYzQkUyQzMxNzlCRkM4MjcwNzBFCi06MTBDNzEwMDBCNEY2M0RBNzBGNDJDNzU1OUU2MzVDOTQ1ODhFQUJFQUIyCi06MTBDNzIwMDAxRDA2MTY4RkQxOEY5QjAwRTNDNjVGMUMzRTE1OUJGNzNECi06MTBDNzMwMDA0RjA3M0I0MTBGQTc4QUM2QjM0NjM3Q0E0NUZBNUY2NjIzCi06MTBDNzQwMDAwODRFMEFGQ0RFMTRGMzEzMjQzQTdFNjk1RDNCQzYyREM1Ci06MTBDNzUwMDA0RUNBREUxMUJGQkM4MEJDRUNCOTNGNEJEMkYxMjhENTJDCi06MTBDNzYwMDBCRUJDQTQxNUU2OTkzRjgxNEY0NDFDMzc3RDRDRTVGOENCCi06MTBDNzcwMDBBOTNGQzkwNEU0MTAzOTRGN0I2NTYyNDg4NkZCM0IwNjNDCi06MTBDNzgwMDA2MkM4MENGOTNCRjMxQjE2RTcwMUJDNEY4MUJGNDdFNUJDCi06MTBDNzkwMDBFNjFEMjRERjg2NzgyMEI1OTlFMERGOUMyMTg2MTkwMDBDCi06MTBDN0EwMDBBNzMzRTQ3RERCMzgxNTFFNzIyNTIzODczMzk1ODI5NEU5Ci06MTBDN0IwMDAxRTRDQzFGMURERkRDMUVGMzIxNUQ0QjQ4QTYzRTBCOTdFCi06MTBDN0MwMDBBNEY4M0ZDMjc3MTg0NzcyMEI5OEI3NTBDMDlFN0I4OTc4Ci06MTBDN0QwMDBCOTFBRTg5N0ZBNTExQTNGOERGQTUxOUEzQUY1QTMzNEVCCi06MTBDN0UwMDBGNTIyNzI0MzAyRTQyNTE0M0QyOTEzOUY4MDcwRDJCNEQwCi06MTBDN0YwMDA4RjkyRUM4OEM3NjI1MjU1MDNGNkQxQUY3OUZDNkRCRUJCCi06MTBDODAwMDA5RDQ4MDNFOTNFQ0I1RjdEMzZCMzkwRUVFNzZBODlDNTZDCi06MTBDODEwMDBGRDk0NzNGNTQ1QjEwQzBFQTUyNTNFQTNDQkQyNzM3RkQ1Ci06MTBDODIwMDA0NzFCQzZERDQ4MjUzRjhDQzdDRUNGNkYzNjYyMUUwNTNECi06MTBDODMwMDBCNDRBOTlEQ0Y0NDlFOTdERkY4OTBEQTIyQkMyMDZGREJCCi06MTBDODQwMDBFODczNjVCREM5REY3RkZGRkFGRDEyRjIzOEVFQTNCNENECi06MTBDODUwMDA2RTI2MDFGQUVCOTEyN0MwRjcyM0Q3MDkyRTVGMTg3RUM5Ci06MTBDODYwMDAyQUU0NzRBRkU4QTczQjAxN0VFMzQzRjFBQ0ZCNzRGNTI3Ci06MTBDODcwMDBENTFDQkU0QUZEMjk1REZCMEY5NjJGRkQ4ODQ2QkVCQzI4Ci06MTBDODgwMDAyOUJBRUY5M0M2MzM3OTAyRjAxN0E0MDBGMkQ3MEYxRTJFCi06MTBDODkwMDAzRkE5QzdGOEFCODExRjdGQjJGMTA3NjlGOTlFOEVGRkYwCi06MTBDOEEwMDBENDRGQkFGRTYxM0RENkJGM0VEQ0ZBQ0I1RjdENjlCQjlCCi06MTBDOEIwMDA5N0VBOTdEMjNGM0M2NTIzOTRERjRFNDlCNTA5NEU4QUVCCi06MTBDOEMwMDBGN0IyOEQyQjZEMkU5MDNCOTJENzA2N0M3MUNBMjdDRTg2Ci06MTBDOEQwMDAwODQ3MEY4N0I4N0NBNTA2ODg0NTgwNzgyQkZDNDlDNzk4Ci06MTBDOEUwMDAzRkJERTlBMUVCQzA5RUY4NkFBMzZDQzczODZBOURDOTM5Ci06MTBDOEYwMDA2RkEyRjQ1Q0QxQjAyODhGOENDMTdBM0JBQjNGNzAxNjJECi06MTBDOTAwMDBFOEJGQjI1MTNFQTJBNkQzRDJERjNEOTUwMDc5MzU5NDVGCi06MTBDOTEwMDA1MjA2MUE5MkEwRjRBMzdGNTJCMUUxRjNFOTYwNkY1NDdBCi06MTBDOTIwMDA5MjAwRjJBQkZFM0Q5OEZGOUI1OEQ0ODc4NUM2RTg5RUU3Ci06MTBDOTMwMDBFRDE4OTg0OTgwRjdEOUFGQjJFMUExQjNBMjBERkU2QTE0Ci06MTBDOTQwMDBDMzM4OTBCRTdGMDlGNzM3NUEyNDZCM0YzQzI3Qjk4MjIyCi06MTBDOTUwMDA1QzAxRjI1NDgxMDdGMTMxN0Y2M0M1OEJCRjFBRDM0RTVFCi06MTBDOTYwMDBEN0QzQjFFMTRGMzY0MTA1MjdDNTRGRUFBRTVGRjA5QjAzCi06MTBDOTcwMDBENzFEQkRDQkVGNEVDQTg3NkFCQjU2RDE0RjhFNDZFRTUwCi06MTBDOTgwMDAyNzM1QjFCMjRDRjZEQkFFQTRGMkE0NkNCREVDRjREMjA4Ci06MTBDOTkwMDBDNzY1MkZCREYwREI2NzIwN0VGREExQzkzOTlDOEVCRjI2Ci06MTBDOUEwMDBGOEE1M0QwNzI3RDFGQUUyMkQ3MkJGM0NCNjBEOEI5MDVBCi06MTBDOUIwMDAxMEMyNEIyNUZEN0Y1OTdBMDgwRkE1QUZFQzMxM0E0NkRFCi06MTBDOUMwMDBCM0U3RjdDNjg2RjBCMTc4Q0IyRTIzMTlERDEzMUVCOTc1Ci06MTBDOUQwMDBGNUJCOEM2RDk2MzA3OEE5NkY5RjBFNzZERjhBMTdCRkY2Ci06MTBDOUUwMDAzNjgyQkMzQkI1NTMyMDg5Qzk2MUUwQjk3RTBGREE4NTM4Ci06MTBDOUYwMDAwMDI3QzQyM0M3NTMxMDZGQkFGRTk1MTQyRkEwNUYxNEVECi06MTBDQTAwMDAzQ0U5REIzNzcxNzkwMkUzMzlEMjkwOUU1RjdFOURDRTlGCi06MTBDQTEwMDA1RkYyOTFDOTA5RkIyRjc5RjkyRTFCRUNFMzg0NTRDNTExCi06MTBDQTIwMDBFOEZBRDk5NTA5MjBERjRBNjQ2RjgyMUQ0QkY2QkNFNDExCi06MTBDQTMwMDBCOUJCOTFERThBRjdERjlEQzBFMjkyQUVGRTA2RDQ5NUM3Ci06MTBDQTQwMDBERUZFQjBCRjg1RUJFNkUwRkU4QTg4MUJFOUFFRTQ1OTY2Ci06MTBDQTUwMDAzMURGNDdDQjJGMjUzMjYzNEIxOEJFQjg1NjY2NzJGMkQyCi06MTBDQTYwMDBDNEYzNTQyM0QwRkQ5RDUwRjRDMEZCMjJENzAzNzc2MjVBCi06MTBDQTcwMDBEQ0YzNkVCRTE3NkEzMTYyRkQ0QjMzQzNEMzMwRDlDMENECi06MTBDQTgwMDBFNTJDRDMyQjQxN0FEREYwMDBFQThCRDM4MzVEODk3MEVFCi06MTBDQTkwMDBCRTU2MTlEMjBGQTgzN0M0RkREMzEyMTk3RTk4OUVDMTc1Ci06MTBDQUEwMDBGN0E4OUVDOTg1RTdEMEJGNTU3NjQ1OENEMUJDODc3QTVCCi06MTBDQUIwMDA0NTk5N0YyOTlGOUZBRTNCMTJFQ0I1MTMwOUUxRkQ4RjhECi06MTBDQUMwMDA5RkNCMEFERjUzQkI0MjQ1NUYyQUZFNjZGQ0JFNjEzNTQxCi06MTBDQUQwMDBFMzZGODVERjdEMzM2NzQwRkIxNzA3MThGRkMwN0JBMDNFCi06MTBDQUUwMDA2N0U5QkFGQzg5RDhCRTZCQjY4MEYyQzA0NEZDRTFGOEI1Ci06MTBDQUYwMDA3QTgzQ0NGOTVBREJBRUQwMDk1REI3MjQ0NEFCRTgwNUE0Ci06MTBDQjAwMDBDNjhGNDVGOEEzNUUyRjdBOTJCRUE3OTI5Nzk1MzA5RjY1Ci06MTBDQjEwMDBBREU3NzgwQURGMTY3M0ZFOUYyMTZCRjk5RkFDOEJFRkIwCi06MTBDQjIwMDA1MzNFNjU5OUVDRkJFRDMzQzBBRjk0M0ZCRDBFRTA1NzJCCi06MTBDQjMwMDAzOTFGRjZGREI3Q0RDRDA3NkZBNjdDRkFCNzdBODU0RkMyCi06MTBDQjQwMDBCNUYyNTNDRkE3MjU1QkVGMjY0MDlGN0EzRUZEREJBMEQxCi06MTBDQjUwMDAyQTEyOTY0RkU5RjNCMDdDM0FBOEVEN0Y1NDdFMkFGMDcyCi06MTBDQjYwMDBBQjAyRjg0NTg1RTBBN0M4QzNERUUwQTg5Nzg3NTZEOTkxCi06MTBDQjcwMDAxMTU2MUVEMkRGMDE5MkQ5OTNGRTE0QkE1M0U4QURGNEQ4Ci06MTBDQjgwMDBGN0U1NDM0MUVFMDRFOTUyQTFCQjIwNUQyQTc0QTdERjFCCi06MTBDQjkwMDBBRjE2N0VGQUY2NDkzMkMxNzVFNUJGMjZBM0ZGNUNENjEzCi06MTBDQkEwMDBDNEYyNDJFOTdCN0IwNzY2MjA5QzVDQThDNjQ4RURERUE4Ci06MTBDQkIwMDA4MUZERDQ3NTlGQUU1RUFGRUJFRkQyRDVGMzc1RkRERDkxCi06MTBDQkMwMDBCQTdBOTVBNjdGNTk2M0IzOTEyMEZFRkQ5QTdFRTJCMkIwCi06MTBDQkQwMDA2N0M4RDFCODcwRjRFQTYzN0U1OUMzNTlBMzE3RThDMjk1Ci06MTBDQkUwMDAxMkMwRjdFNUU1QzQwQjc5ODY4MTFEMjJDNjA1QkEyODc3Ci06MTBDQkYwMDA4QzZCMjA3RUIxMzlEOUU3QTU3MjYzNjUwNDhCM0Y3NEQ1Ci06MTBDQzAwMDBEOTAzQjY1ODVBQUU4QzYxRjU0MEJDQjEwNkU0OUVGMjI5Ci06MTBDQzEwMDAzQzEwQzFFMjhBNURGOTAxNUI4Q0NBOUY2QTZGMTI1MUI4Ci06MTBDQzIwMDA2RUI3RjlDODhDNzA3RTE2RDUyOEM4NDc2REE0Qjc3NjQ0Ci06MTBDQzMwMDA3NkVFMzU0REI0MEM1OTA2NzFBNTVBRDEwOTM2RjgxRDVBCi06MTBDQzQwMDBENTM3RDlFMERDQTlBQjI5RjVGQTAyRkE3Q0UxMUY0NTFBCi06MTBDQzUwMDA0QzdCRTk4QUI0OEQ4MTc1MTFBRjRCRUFBRkYyNkY0RTEwCi06MTBDQzYwMDAxMkVGRDM1OTc0N0YwQjlBOTg5RjczQzcxQTlEM0Q0MjU4Ci06MTBDQzcwMDBENjIwM0QxNTU5OTYxQTQxOUU1MjdGRTI4OEY2QkM4NjExCi06MTBDQzgwMDBGMTQ1MjkxRkFGNjQ5REI2NUQ3OTlGRDIwMUZBRjNBNUU2Ci06MTBDQzkwMDAxQkI0RUQ2RUVFMEY3RkEwRjBDOTU4MzI5NkZCQTMyQ0FCCi06MTBDQ0EwMDAwRUMzRTVGMjM0MzFFREZBMDI4QThGQUUxNjkxOTg2ODIwCi06MTBDQ0IwMDBCREJCNDk0NDdDNzQ2RjE2N0MxMDRGMjNERTc4RTRCNzBCCi06MTBDQ0MwMDAwQTEyNDA3OUE4QzBBOTAzRjhDOUQ4QkJCQ0VBRDhGNkIzCi06MTBDQ0QwMDA2OUU2MkY4MTZFQjY3RjNDRTYzRjY5RDlCMUZEQzMxMThECi06MTBDQ0UwMDA2RjQwRkRENTQzNDMzRTI2M0RGQkU3RUU4Q0MwNzNGRjBFCi06MTBDQ0YwMDBBRTlENTZBNEY3QUUxREVGMEVGOTI1RDQ1RjMzMzk2MTEyCi06MTBDRDAwMDA5RDVEM0JCRjFFMDNGNEQzQjVEQzU0MDJGMkFFNkIzMDI1Ci06MTBDRDEwMDA4QkM3QUVEOEYxRjU5ODM2RDRBRkY3MzNGRDYxNjRGRTFBCi06MTBDRDIwMDA2MTc3RDMzRjNFMTNGQTQxNDk3NzA1NzZDM0NFMjhFNEI1Ci06MTBDRDMwMDBBN0NBRDcyMzMwREZCQjZCQzdENzk5NkVDQjRGQjc5RjNFCi06MTBDRDQwMDAwQTlFRTdEMTY1MjUwNTVCNjE3RDMxMkM4RkExRjI4REFGCi06MTBDRDUwMDA4OTJGNTREM0Y5Q0IxQjc2MTkxN0QwRjZEQzM3RkYzOTVFCi06MTBDRDYwMDAwNkU0NjhENzU2NjYwRjc1Q0E2RENGNDExRTQzOTRGMTJECi06MTBDRDcwMDBEQzcyOTlFMkFCMTM5ODhBM0FDREJGMzM2NkU0MDJERkU2Ci06MTBDRDgwMDBGNDg0Q0IzRjMxM0VENjU3NzhBNEZDQUY4MTg3RTA2Mjc0Ci06MTBDRDkwMDBGMkNFRUEzMzBCQjBFRjZGM0ZGQjE4RTM5QTI2QTQ0QkI5Ci06MTBDREEwMDA2NUJGN0ZBQkFGNDY3QkU1NjJGQkNFRkU3RjZFREY4MjY5Ci06MTBDREIwMDBCRjJGRkI3NkZGOUJFRkZCMzhEN0JCN0EzRUU4NDlFN0Y2Ci06MTBDREMwMDAzQkVFQzFGQTRCNTYyN0FFQjc4RkY0RUU4NUZEQzdGRjk5Ci06MTBDREQwMDBGQkVFRkY3QkUzN0QyQkM1QkJFREUyRkJGRUNERkY1QUY3Ci06MTBDREUwMDBCQ0ZGRjEzNjhFNzczQjdFRDdGM0U2M0Y3MTdEREY1NzkwCi06MTBDREYwMDBDRUJERjk2RjhFRjdERUY2QUZEOEY1QUQ4NjJBN0IwNjhECi06MTBDRTAwMDA1RDVGMDFBOUI1ODI2MTMxMzdCRURCOTJFMTgwNkNEN0VECi06MTBDRTEwMDA3M0ZEMzA4RjBFQ0U0QkMzRjg0RDAxMjNGMzBCNEQ5MEI1Ci06MTBDRTIwMDA0NzA3N0VGQjFDNDE4OTBCQTIxRjc1MURCNzFGQUUxQjU4Ci06MTBDRTMwMDA1NDgyNzZDODc1QUU4Nzk5REQyMDU1QjU2NkQzRkVBREIwCi06MTBDRTQwMDAzOTBCOUM5ODczNDlEMjBGQkJBMTNFN0IzMkFGNkJGRDZGCi06MTBDRTUwMDBDOUY3MDRFMjEyQTgxRDdGNURDRTM1MkQ2MEQ3NUVFRkM1Ci06MTBDRTYwMDAxMkQxRUVBNTI1REFCQjFGMEM5OUNFOUU0RkQwRkEzRDBDCi06MTBDRTcwMDA3M0REREFGQTREMDVEQUZBMUMzRURFOEQ4NEFERkZDNkFECi06MTBDRTgwMDA3Q0MxMDc3MTU1NTNGNjEzRjExMDY3MzUyRDk0ODk5MEM1Ci06MTBDRTkwMDAwQ0Y5NDI1NTJCQzFCRjk4OTNBRjdEN0YxRkY4QzFFM0JBCi06MTBDRUEwMDA3RjNDMUM1MzREMEExQzk3MjA1QzQ4QjZFOERDNDhGQUNFCi06MTBDRUIwMDAwMDQ3QkVFRUQ2RDk2MzdEOTBDRjRDMjQyNzgzRTM4RDA3Ci06MTBDRUMwMDBFNTRFOEM4MzczN0Y1QkU2RUZDQjk2NTVBREMwQ0ZCMjVBCi06MTBDRUQwMDBDRUNGNTZGQ0U1REVFMDREQjhGRjhERTNBNDg0RTAyRjE1Ci06MTBDRUUwMDBCQjQ0RjRCRjY1OURGRkFERTBFNUZCRTI0M0MxRTM4RkNBCi06MTBDRUYwMDBDNUNCOTczQUJDMENCMkI4MDhGMEFCQ0NGRDg1QTkxNkVGCi06MTBDRjAwMDAyN0FCMEZDQTI3NzhERUM4RkQwNUE5OUY4Qjc4RDM0MkNGCi06MTBDRjEwMDA3OURGOEJDQ0U2NkMzODVGMzM4RjE0MzBERTcxRkQxQTBECi06MTBDRjIwMDAxMUY1ODMzOTREQzA3NUU1NEY5MDMxOEZGODczNDM3RTBECi06MTBDRjMwMDAyNkUwM0I2RkRDMTUxNUJGNjBDQjcwMDIzQzE3NzFCODYzCi06MTBDRjQwMDAxNzkxMkFCNDVGQzlGOUVGQkVDQkNBODQ3MzA2ODJGNjgzCi06MTBDRjUwMDBFRjIyMTcyMUQ3NTJCRkFEMjg0QkYwNDc1Mjc4MTU0QjFGCi06MTBDRjYwMDBDNDFCOUQwRTcxNkY4MTFDRDFDNEJEQjU3NUY4RkQ0NzAyCi06MTBDRjcwMDA0MjY4OUM4QkY1RUY0REJFRkNENEU1NUZBOTNDM0IzMjhCCi06MTBDRjgwMDA4Q0ZBNDExRTlFQkI0OTU4REM1NkYxQUY2RjZGNjI3MDQwCi06MTBDRjkwMDBBQzJDMTM3QzI5NDg3NzdFMzk1Rjc1RUVGODFDRTc4MzRCCi06MTBDRkEwMDBCRkRFM0IwRUU1NjRGNkEzQTNBM0QxRUY3NzM5RDA2RkM0Ci06MTBDRkIwMDBBOEU0N0U0M0I3RDcxMTBENzFBRUVFQTY1NDdFM0U5QjFBCi06MTBDRkMwMDA2QjUzQ0I1NUE1RENDRkZERUVCRjQwN0UyMTJEQkJBNjFDCi06MTBDRkQwMDAwQUI1MjJGODcxMjQ4MEYxNUNFRkQ0MDhCMjMxNENGRTFFCi06MTBDRkUwMDBFQkZGMzExOTM4RkQ1NDYxMUMwMDdFNjIyNkUwOTFGRDkzCi06MTBDRkYwMDA4QUU5QUJEMUIxMkFCQ0FEQjlGNjk0MzRBNjI3MUVFMEJDCi06MTBEMDAwMDA3NzQ0NzUwRUY5NjNFMTBCN0UzRUMwNzU3RjQ0REJGNDE3Ci06MTBEMDEwMDBGQzMwRkJBRDM1QjEzODU2REU1QkRGRTI3NzlDMzczNDUwCi06MTBEMDIwMDAyNUNCMDA5NzFCQTY4QTlBNzNGQjU1MjZFRTk3OEQyMzc2Ci06MTBEMDMwMDBFMzYwNUQ3OTZGNUQ2NTlCMDg3ODY5MTE5REYwREQ2NjQxCi06MTBEMDQwMDA2NUQzNTlBMzNCQ0M3OUIwMUU5RTMwM0VDNEQ1OEZDQTYwCi06MTBEMDUwMDBDRTIyODBFN0QxODcyMzA4RjhEMUVGRjI3M0M2MzRGOEU3Ci06MTBEMDYwMDA2RTIyMEQ0MzNBMkU4ODJCRkU5QUMzQjVEMzY0Qzc3MjQ1Ci06MTBEMDcwMDA1NjVFQjYxQzRGRTc0RDZCQjA4Rjg1QTNENDAxQkM3RkM1Ci06MTBEMDgwMDAyNzE4MjFFMzIxODk4N0JEQTdGNDFCNTBDNkZBQjUxQkQ5Ci06MTBEMDkwMDBFRDE1RTFGNjNGM0M4MkVEQkY5ODM4RUY5OTIwRkNGQjlGCi06MTBEMEEwMDBFMTJERkI1MUFCM0YwN0VDODNBOTNDQUVEMjgzQUUwOTI3Ci06MTBEMEIwMDBGMjQ3RjcwQ0MxMDdGQTFCRkM2MUFDRTdCMUVGODRERjY0Ci06MTBEMEMwMDA1NUJFQjNCRTgxRTk1OTg1RUVGNTcwREVDQkUxQUNDQzNGCi06MTBEMEQwMDA3RkRDQzRFMkFGN0ZFMkZDQTVDMDU5ODFBRjdFQkQ0QUQwCi06MTBEMEUwMDA3RjJBQUZBNkE4RTM1MUQ3Mzc4RTdEMTlFQzlCOEEyNkZECi06MTBEMEYwMDBDMTZFQTA0MzU1NDg2RDQ2RTBDM0NBQzZDNzY0Mzg2RkM5Ci06MTBEMTAwMDA5OUVCNjBFMzEyMjk3RjhDM0E5RkEwRDNDNEYyM0I5QTNCCi06MTBEMTEwMDBEM0FGQkMwREU4RTREQzFBMTNFODQyRTJCQUUzQUMwRDhECi06MTBEMTIwMDBFNEYwQkIwNkU3OUZFMTdCNkFFRjdCMjJEOTc4MDE3OUM3Ci06MTBEMTMwMDBGNUIxQTdDRTM1NTU1MjhGOUI4Q0VCOUM1NTk2MkQ0MzYwCi06MTBEMTQwMDBGOEVDOTZCMjVENzJBMjhBOUUzQTREQjFEOEFFM0MxRjAxCi06MTBEMTUwMDA1MEU2NDg4N0U3NzQzRTVDODdGNzExMTM4MUVGNDJEMkFGCi06MTBEMTYwMDBFQTVCRjFGQkQ0NUJBQTYyMTgxRDk2RDRFRjMyNjIzREY0Ci06MTBEMTcwMDAxOUZCMkJGMzI5RjNFOEY5Njk3NjlFMzZFRjc4NDE2RUI3Ci06MTBEMTgwMDBEQjIwODA0QjlFQzlCRkQ0MTk4NjRFMUYzMzJCRTc4RTAwCi06MTBEMTkwMDBERjUzNEZCODI4REQ4RUY5RkY0ODRGMkM1NUY0NDQxQjYwCi06MTBEMUEwMDBFNkI5MkJFRkNGMzUzMzNFNTdFOTg5QzQ3MDdBNjI0OTJGCi06MTBEMUIwMDBCNTIzMTFGMEIwNjQ0NzZBMjIzMEM5OTIzRjRFNEIwODQ0Ci06MTBEMUMwMDBBNzI3M0VGMEIwNzNFMzQzRkNCQkVFQUVEOTU0NEY1Q0VGCi06MTBEMUQwMDBBRUQyMTNCMzIzOTA0RUY0RUZFNTlBOTU3MzhEOEJFODlFCi06MTBEMUUwMDAwOTA1NkZGRkMzRjJFNjAzRDAxMzYxRjhGQjQ2QjM1NjlGCi06MTBEMUYwMDA0RkRDRDg1NDg4N0FFMkM2RDlBMkU2RkJBQTZCQ0QxN0Q5Ci06MTBEMjAwMDBEMzEzRDkwOTczQjEyRTNCQTNDMkQwQ0YwN0RDQkYzOUVBCi06MTBEMjEwMDBDNEYzRkI2MTFFRDAxNzZCQ0M3Njg0OUI1RTZGRjQyNjQzCi06MTBEMjIwMDBEN0M3RjY1NUFFRkY1RjgyQjMyMkQ3OTdDQzYxRjc0M0RECi06MTBEMjMwMDBGNEE0NDM4MkY0QkM2NDJFOTVFQjAyRDAyMzkzRUI0QjExCi06MTBEMjQwMDA2RUU1NzE0RTlEOUNDRDA3Mzk5QkExOTZCM0VDRkQwQTBFCi06MTBEMjUwMDAzN0QzMEI5NThEQzlCRjlBNDdEQjZGQUU5NTlENjZEQUM0Ci06MTBEMjYwMDBGRkU2OTBEQ0NENTRDQkREMzU2NjA5RTFEQzQzRUU5NjdDCi06MTBEMjcwMDAzMEI5N0JBRTY5MUNEQTRGQkRFREVGNTMyRTZGQTkzQzgwCi06MTBEMjgwMDAxQkU2MEM0MzFGMDVGM0EyMzRERkRGMUQxREZCNzZEQTFFCi06MTBEMjkwMDAyQkMwMkZFRjhBNzg3RUZCMzlCNzAzRjY4RDdEM0IwM0Q5Ci06MTBEMkEwMDBFQ0U5NTM3QzNEREJCOEZDRUJGNEY4NUM1M0E5MUNDOEZCCi06MTBEMkIwMDBCRDgzRDlEM0U1OUI0NTg0NUY0NTAzRTNGRjhBNjE5MTM0Ci06MTBEMkMwMDAzRTA3QUQ0RjRGRkYxNkNGNjExN0VGNjBFN0IwNzQwNzExCi06MTBEMkQwMDA3OUQ5MkFGQzJGN0VCN0FEMDZDRTA1MTZBRjE3RjAxQzA0Ci06MTBEMkUwMDAxOUJFNUYwMDc4MTY3Mzc4MTYzOTE3RTMzOTRBRjFEQUY4Ci06MTBEMkYwMDBGMEU3M0ZFNUJDREZBMkE2RjUxODBGNUZFNEQzRjYyQkZECi06MTBEMzAwMDAxRjc2RjUyOUYwNDdGMjRDMEMwRjc5QUYwOEJFRjVDOTJFCi06MTBEMzEwMDA5MENGQTBFQkU3NUM4REU3NDdFNUY1REFFNzA3Rjk3RTBDCi06MTBEMzIwMDAxNzhBRkVCNDU3RThGQkU0Q0ZDQ0JGRDNDM0ZCQTAxRUUzCi06MTBEMzMwMDAyRTI1M0YxMjJFRkIyOTVDMzJGRUY1NzBFOTBEMEVENDJFCi06MTBEMzQwMDBCRUM3RjMwMTNEM0MwRTJCNzIyNTlENjQwMDFGN0U2RTBGCi06MTBEMzUwMDA3MEExNUNGMUJFNDNFMTQyRTdCQkUzQjFFMTlBRkI0MDVGCi06MTBEMzYwMDA4RTczQjhCQzZCNzBEN0Y0ODc3RTE1MDJGNjJCNUVCNzUwCi06MTBEMzcwMDA2NTRGMDJBRENGQUIyNzYzRTE3OEExNzhBRDU2MEYwN0JCCi06MTBEMzgwMDBGNTdFODMwM0Y1RkFCQ0FBMkQwMkU0QzcyRUU0REZGQjg5Ci06MTBEMzkwMDA5NUY4MUVDMzdCNTQ2RTVENDZGNTNDRURCRjIwRERFNDgxCi06MTBEM0EwMDA4NjczRjBGRDExMDE5NDlCMEFEREM2NDczMEZCMjU4RTg0Ci06MTBEM0IwMDBDQkExQTMwMzAyNTM1MTNGMzUwQTc2RTQ0NzdGMDREMzQwCi06MTBEM0MwMDA1NzE0NEY3MEJGNEJGM0M0QUZBNzczQkNCMEI4NTIyMzEwCi06MTBEM0QwMDBDMzYzMjVDNTFCRjBGM0Y0MjY1RUFGNjM3NkUwMkQ0QUU4Ci06MTBEM0UwMDBCRDVFRjAzOTA0OTBBQkJCNjQ3NjVGOEM0MEUyMDQ4RTg2Ci06MTBEM0YwMDAwNDk1N0U4NEYzRDVFQzA0MTU5RTc3QjQzM0ZBREYyOEM4Ci06MTBENDAwMDAzOEYxODE4RkZFRjc0M0YwREMyQkREMzMzQkE2QUZGNDIwCi06MTBENDEwMDBBRUMwMjkzRTQyOEJFN0ZEMTFBRDc5RTNGQUMxRjk5QjFECi06MTBENDIwMDBFMEM0N0I3MzlBNjJGMDlDRTg1ODJEQkJGRjI1OTVCRjQyCi06MTBENDMwMDBBN0U3MEJGMDNCRDRGN0QxQ0M4NDg1NDM3RUYzOEMwODZGCi06MTBENDQwMDBDQzBGQzU3OTUzOTg1REE2OTY0RkZBN0I4MEJFNkZGRUQwCi06MTBENDUwMDA1MTI1Njk0NTdCMkM5NEM3RTg3RURFMDRFM0NEMTAzNDZBCi06MTBENDYwMDBGOTRFMTAwOTAzM0FGRjA5QzZCRkQ1N0M4MUYxNDk5MkY0Ci06MTBENDcwMDAxREYzOTZFRkIyMkJDRkVERUNCQjJDNUU2RjFFOUM3OUFCCi06MTBENDgwMDA2ODFFODVFRkI5NTVBMjEzNUNBODlCMEM4RTgzNTkyMEFBCi06MTBENDkwMDA2RjFFOTQwOUYwQ0JCOTdEQjI4QkU5ODEyOEQ0M0I4NTBFCi06MTBENEEwMDBFRjFFQzVFRkQ5MEE1OTBFMUEyOUJDOEZFOTk3QTM3QzQ0Ci06MTBENEIwMDAzRDFGNTFCREVEODI1ODBBQTkxRjBGRjdFMENDNzZFRTUzCi06MTBENEMwMDA5QUU2ODA3ODRCQzZGRTk1NzBDRTM5MkJENzdFRjAyMDM5Ci06MTBENEQwMDBFMDczMzVCQjA3RTlDOEFBNUNGNEQzRUVCQTUzNDA3RUNCCi06MTBENEUwMDAzQjRDRjEwNkVGQ0Y5OTlEN0NGMDIwOURGN0Q2NTVGMThFCi06MTBENEYwMDA3ODZFMzlDRjE1N0YyMzlDNjNDRURCMjczQTFEQjRERkNFCi06MTBENTAwMDA4MkVCQUQxNjM4QzdCQzY2QTQ0OERDMkFGOERDNEE1QTYwCi06MTBENTEwMDAzMUJFMzNBRkVBQ0UzOUIwRUUxMkFBMEZDNTY0MjhGNzk4Ci06MTBENTIwMDA0RjRCODRGQTNBMDFERkFGRjRCQThERjBCRDY2RUJEQTA3Ci06MTBENTMwMDBCM0M2MEMzQTdGMTFFRDA3NjBBRjVDQzdGQTU1NkUxMEE5Ci06MTBENTQwMDA5QzkwRkE1REQ0RjQxOENBQ0JBMjBEMDI1RTM0RDM0QTgzCi06MTBENTUwMDBFRDVGMzMxQkQ3NjdBNkUzQjZBRUEzRUZEMzdBMzFCQzNBCi06MTBENTYwMDAwRkUzNkU4OEI5MTFDRTI3MkJFOTNBRjFGRDA5RDU3ODgyCi06MTBENTcwMDAyRTVENDRERkEzQ0RBNDc1QzM5RDM4REVBMjc1MDI4MTY0Ci06MTBENTgwMDBFRjAzNEIyNjI0M0YzMjAxQzZEQjI3M0JBMUZERDBBRTgzCi06MTBENTkwMDA1RjFCNjFEREI3RDFGOUZBRDNGMTE3ODg2REQzQTAzRkQ2Ci06MTBENUEwMDBGOUE1NjBDN0ZCODdFQTQ2NjBEQ0FEMEIzNjBDMkY1NDRCCi06MTBENUIwMDAwREM3M0FFNjEzM0IxMDBDOTIzQTFGNjU0NzA0RkI0RTI5Ci06MTBENUMwMDBCODY4NTk3NTBERUNBQkNEMUI5RjZDNDBCQTNBNkIwNDMzCi06MTBENUQwMDAzRDdFOENDMkRCNEQ4NzNDNkE2NDc5MkVDRERFQTNDNkNFCi06MTBENUUwMDAzNjk1MUNGRDI4MjIxNURGQkZBMzMxMUJGMzI2MTY5MkFBCi06MTBENUYwMDA3Q0NDOUI3MDU3MzM3QkE0N0Q2NTg0MEZFMjZBRURCMkNGCi06MTBENjAwMDA3RDA4M0M2RjVFNjlDMkU3OUQyRjMxRkREMzM5QjgwREFGCi06MTBENjEwMDBFM0RCMjdENkM5MDRCRTVGNUNCMTJFRjU2OUMwRTM4OUEwCi06MTBENjIwMDBDRDMyRDI5QkY4MkNDQjFCMjg3RTg5QzVDOTlBRDdCMUE1Ci06MTBENjMwMDA3MTRGMkMzNUIyN0JCNUEwOURENjhCNUY1NEYyMEFCNEU2Ci06MTBENjQwMDA3MkFDQzg1MThBNzI0QTJGOTdGNDcyNkJEMTkzRDU0NjQ3Ci06MTBENjUwMDAyMEQ5MUVGMjZBRTk3NDk0NTdBNTU0RUYwMEExRjU5MDAxCi06MTBENjYwMDA1NzgzNkEzMDZFQUE5NzU3OTVDNEEyQzhBOTc0ODg1Rjc5Ci06MTBENjcwMDAxNjk2MEZCRTZEMkREMEYxQURFQzgzODE1NkZGNkI1RjFBCi06MTBENjgwMDAzRTA1N0FCN0NDNEFFMDQ5ODU2NDdGNUE2MDc0NDE4MDkwCi06MTBENjkwMDA1RkU2MzU2REY5MTJGOEEwNjQ1RTA0REVDNzc1MUNGMDE0Ci06MTBENkEwMDAwMDdDQjMyNjBFQ0ZBRjhCN0M4NTA4NkYyNTJGQjc3ODEzCi06MTBENkIwMDBBRDk2Q0U5NUY4RTM1Q0I3NDg1QzZBRkQ1NTEyNDU1Q0MzCi06MTBENkMwMDBBQTdFODdFRUEzRjQ0QUU3QjlCRDUxRjA4MUE4M0M3NDY1Ci06MTBENkQwMDA1RkZCREVCQjMzQjA2RUM3NzUyREUzRjZDMTFBMkJEMkVDCi06MTBENkUwMDBGM0ExOUY5RjVEMDlGNDdBREJCRDAyMDE3QjlENzhERDhDCi06MTBENkYwMDAzNUEwMEYyQkQ2MEEwRTg4MEYxN0RGQ0JERTJGQTZFRjMzCi06MTBENzAwMDBDM0JBMEZGRDlBRDExNUE1NkYwN0QwN0ZDNUJBQzdGNjZBCi06MTBENzEwMDA2MkZGMEQ4MjAzQzYzRkI0QkUxMEVEODkxMkFGNDhCMDYwCi06MTBENzIwMDA3RDQzM0JGQTBGNTQ0RjYxOUU1OUIzNTc0QzAwRkFBRkZCCi06MTBENzMwMDBCOERGNjQwNzUzNDlBMTIzODUyRURCRjk3RDA4QzRFQ0NCCi06MTBENzQwMDAxQzMzOEJCRUI3MEExNjE1REY5MzFFQzUwMjIxQTg0RkU2Ci06MTBENzUwMDA4MTRFMkFCRDhDQ0VEQTVGOTI5RDQwMzYxN0E3NEJGNkRDCi06MTBENzYwMDAxREZDMDlBRTVGQzU2N0U3NEM4N0VGNzQ4QUE5N0UwNDhDCi06MTBENzcwMDAzQTZENUU5NzZCMDQzQkUyODQ0RkMwRkM4QTlFNzQ0OTBECi06MTBENzgwMDAyQzZBM0I0QUExQ0I2NzA1MjZBRjdCRDBBMzhFMEU3QkNDCi06MTBENzkwMDBEMDFEQTc0Qjg1RkUyODUxQTM1RjU5QjY0RjI2RjBGRDNCCi06MTBEN0EwMDBCRDlFMUVERDcyRkQ4RDkwRkY1MUY4MzJERDBGNUQ2RjY1Ci06MTBEN0IwMDA2RUNEQ0ZEMTVFNTdFMDQ4RUIwOTUwMkY5MjU4REU4RkU3Ci06MTBEN0MwMDBDMjBGRTUxMkNCMEZGQkRFRUJEM0NEQkYyOTgyRTc4NzdCCi06MTBEN0QwMDAwMTNGODgyQzdGQzk0RkU3N0Q3QkYzMEI5ODJGNzk2NjNCCi06MTBEN0UwMDA1M0ZCNzU2OERGQkM0MUU5MDBFMEJGRDk0QUZDRTg3RjI0Ci06MTBEN0YwMDBGODUwMEU5NTM2ODg5ODZGNEQyNDdGRTYyQzk1REZBRTU1Ci06MTBEODAwMDBFNEJGMkNGRTgzMTVFMTVEQkFENUU0Q0JBM0VGOTc2RUEwCi06MTBEODEwMDAzRjNBMDZGMzExOTYwNzMwQkZDN0JCNDk2MEU3MUZERUVBCi06MTBEODIwMDBCNjMxRjBGRDUwQTlDNEYyNzBGNDc2QzFGMDQ4MTZFN0E1Ci06MTBEODMwMDBFQTc4MkRBQTAwRUMzNkExOEVEREIzNTc1QTdGOTM2QzlGCi06MTBEODQwMDA1MkM1NzUwNzQ1Q0EzODJGRUQ4N0U3NjM1RThBNjdCODBBCi06MTBEODUwMDAxRjAxRDZBN0JFREY0REM5QkZFOTc4OTFEMTVGNjlBMzhCCi06MTBEODYwMDA4Q0Y2NUM2OUREOTY0RUM4QzMyQzNENkM0MjNGQjdCMjY2Ci06MTBEODcwMDBFRUFDMTFGQ0Q4REMzRkJDODRGN0YzNTUzNjhBOUEzQ0Y5Ci06MTBEODgwMDBCQzFFRjk2Rjc1QTJERjA0Rjk1QjBERTU3ODdFNDNFQkYyCi06MTBEODkwMDBFRDU4QUYwRjlGMDc3QUIxM0NBREM1N0ZEOEIxREQ0QkQ2Ci06MTBEOEEwMDA0MUI4Rjg5NURGRDlGMEJFQkVENjhEMzZGQ0VFQTlFRUI0Ci06MTBEOEIwMDBDMkY5QTczREYyRERFQTU3NUYzMERGRUQzNEZDNDEwOUU0Ci06MTBEOEMwMDBFQkJBNDg1REJFNjAxRDkzNkI3NDdEOTlGOTYxRTJDNDRCCi06MTBEOEQwMDA0MTdCRUJBNTJGOUY4MzdDRUM4RUFEN0Y3QjBFRDY1QkNGCi06MTBEOEUwMDBGNjVGRTc5RTgzQkMxQUIyMzNDMjBFRjY0OEU1QTYwRjc4Ci06MTBEOEYwMDAzMDlGNTU3OUFGMjQ5MkQ5N0Y5RDJGRkUwRUYzODAzQjQ4Ci06MTBEOTAwMDAzRjM0Mzk2MUI0Q0UxRDI3ODY4MEJERDFCOUU1REIwNDMzCi06MTBEOTEwMDBDOEVGNURCQTYzMUFDNjczOTY2RUNCNEQyNDYxRTIwNUZCCi06MTBEOTIwMDA0QTA5NzRFQkVCNDMxRUIyMUU1RkNEMERDRDk4RkY3MzE5Ci06MTBEOTMwMDA4NkUyMUJFNDQzMzA3RkIxQkU5Q0U1ODMzQTc4REVFMkE5Ci06MTBEOTQwMDBFNkYwRjlERTNERjIxNDFCNjY1RDNGMTlFNDYyMDNCM0I1Ci06MTBEOTUwMDAwQjJFOUFBRjc4ODBFMkYxRjIzRUUwNkZGMzZBMkU0RjIxCi06MTBEOTYwMDBDMkUzRUYwQ0ZDNDFGMTU0MTNBOUNENTdGQ0IyNjFFMUM1Ci06MTBEOTcwMDA2RjlFODFCNjg2Qjg1RUYzMTVGRDdEODA5QjkyNEYzRTBCCi06MTBEOTgwMDAyQkQyRjU1ODI0RjBDREQ2REY2MzdFMjhFMDJEQ0YwMUQxCi06MTBEOTkwMDBGMkY5Q0IyMTEwMTczRTI5MDczMEZFMTBEODYxQzJFRkYzCi06MTBEOUEwMDAyQzRCNzcxQzQyRkVFOURDQjYxRkYzQjUwOUNGRUJFRTNBCi06MTBEOUIwMDAyNEMxMUZDQkMzRTVCMTlFQ0EwRDU2OTZFN0M4RTEwRjNGCi06MTBEOUMwMDA3OTkwMEUxQjNFRTdGOThFOEM4RTk1M0NDOERFRjIxRkQ3Ci06MTBEOUQwMDA1QjIyNTNGODdEMkEyQzRGQjM3Q0MzQzczQ0FGMzA4NDA1Ci06MTBEOUUwMDAyRjYxMDJFMEE5RkQ4Mjc5QTUwQTFDRUMwMDg3MkJENEU3Ci06MTBEOUYwMDBGOUJDRTFGMzRDODM3OURGMUM1RjgwM0Y5MEQzQzE3QzlECi06MTBEQTAwMDA1RDVBMUYwNEY5OUIzRUUxMTAwOTIzMEYzQUQ3QjMzQzNFCi06MTBEQTEwMDBFMDRFMzlGQ0Y3Q0M0QTdFNkZCMzlFNEY3RDdEQ0JFQjU5Ci06MTBEQTIwMDBCREQ4RkFCRjJGN0MxQTIyMUQzOEFFMUU0RTFERTdDMzhCCi06MTBEQTMwMDBDQkYxRTM5Q0VGN0ZGMEY3MjE2NTgyRkVGQjkzQ0Y4MTcyCi06MTBEQTQwMDAxRUNCMUJEQThENzg5Rjg5RTIzRkYxRkQ3NkYwNzg1QTg0Ci06MTBEQTUwMDBDNzI2MTFGMzNFNkJFQTlCNTE4RUVCRTU0NTA1M0YyNzQ4Ci06MTBEQTYwMDBEMUFGRjcxQkJFREU4QTQ2QTYyNzNBQjY1QTdEMTYzQUQ0Ci06MTBEQTcwMDA0RUM3NUJBRjIxM0Q1NzZDNkVDN0JDRDNCRDc1QUYxOEE5Ci06MTBEQTgwMDBEQjU0RTdDQkEwMjc3Q0FBRjU3N0JDQkM2QjBDQ0E2RDM2Ci06MTBEQTkwMDA3RUJGOTg3RTFFNjMxNDlCQTdCMjI5RkMzQzk1OUJDRjRBCi06MTBEQUEwMDA2QUU2NTlFQ0FEMzdEQTJEMTc5RkVGQjRFNEJBMDlDNjMwCi06MTBEQUIwMDAzQkREQ0FFQ0E1RDNGNUUyMEM1Rjk4Rjk0RjcxQkQ0OTg3Ci06MTBEQUMwMDA0ODJEM0IwRkE1RkExMkVGNTlCM0IyN0JENTQ0NUIyNDI2Ci06MTBEQUQwMDBEQTVGNEJBRDEzMEU0N0Y3ODNEMjg4NzkyRjJCQUE3OUUzCi06MTBEQUUwMDA5RUNDN0RDRTI0QzBGNzBBRUJENTA0RDZCQjEyRTBBQkFBCi06MTBEQUYwMDBGMkUzNjVCQjlCODBERDI2MjdFNTY3QThDRjU5OTRGNTQ3Ci06MTBEQjAwMDAxQkZCMTk4ODRGODVGRkE1RDYxOTg5RTA3RjEyQzkzQkY5Ci06MTBEQjEwMDAwOEQ2NzE1RENBRDcxMkU4QkY1NjBGOEJERjkzRjM0NzYzCi06MTBEQjIwMDA4N0MxRjM1NkM5QkUyNzhFOEVEQjNBNTU3MDQyRThCNUUxCi06MTBEQjMwMDAyN0RERkIzNDcxODY5OTJFRUQ3REIxRjgwRDFDREQ1RjdDCi06MTBEQjQwMDBCN0QzODBGNkEwRDVFMEI3RDMyRUM0MUFEMTlBODQwRUVECi06MTBEQjUwMDBBQzgzMzhBNDA0RkMxNDAyRjMyMTFFRjQ5ODY3QzFGREMxCi06MTBEQjYwMDBDODM2NDJDRDUzRThFNzk0MzRGNzlGNDQ0RjkwNzRGNzlBCi06MTBEQjcwMDBBMTkwMDNDMzI4QkQ1QTM4QkQyQTcxMzkyQkZCOUI4RTU3Ci06MTBEQjgwMDBEQjg2RjdBQ0M0QTQ5MTZBMjBERjM1NTYzN0RBMEQ0RjM3Ci06MTBEQjkwMDBGMEZCNjlFODZGMjRFNDQxQzQ5MjQ4QTdGQUZFMjYzQUY0Ci06MTBEQkEwMDBBRkU2RkIzODNBQUZBNjFFRTNEMkQ2RTM2NjQ4QzdDMjVCCi06MTBEQkIwMDBFOTk3MzhCRThFRTlBMjA1RTExMDMzQ0RBMEY4NkI3OTY0Ci06MTBEQkMwMDBDMzEzNDJFQjhFODkyNzRFM0ZCNDVGNkJDMUVGMDEyODMwCi06MTBEQkQwMDA3Qjc5RDVGQkIwNThCNEVCQTZFQkQzQzg4OUU4QjQzNjUzCi06MTBEQkUwMDBBRjgxQUQ1M0YzREM0RTFDMDJFRURGQTU3RDRFRDdBQjBCCi06MTBEQkYwMDBBOTE3NDY3MTc5MjcxMTA5RTQ5REM1REM0QTM4RkNCQjk5Ci06MTBEQzAwMDAzNUYwQkU1RkRBMzczODAxRjA0M0I4NUZFRDI1OTBDRkNECi06MTBEQzEwMDAxMkNERjc0MUU3RDdGNEI3NDM3NDgwQ0RBRjFEODcwQzIxCi06MTBEQzIwMDBCMkFCQkY0M0JEOUNFQkJGNTE5NkZDMjU1MTk0OUUzMkQ1Ci06MTBEQzMwMDA4NzU2NjE2Mjc2NTYxMjQ5QzNFRkE1OUJGQUExN0M0QUNBCi06MTBEQzQwMDA1OTk2ODM3OTI3NDIyREEzQUI2MTZCMDhGMkNEQjAwMEMyCi06MTBEQzUwMDBDRjlCQkEzRjEyRUQ1MTkzOTk3ODIzRDJFMTdCMzZFMjA0Ci06MTBEQzYwMDA5NUQzNjExNjFGQ0Y0MzcwMkMzN0QwQTFBNDU1OTRENkZECi06MTBEQzcwMDBFODdCNEQ4MTFDQzM0MjhBODQ3QTY4QTJFMzU3NDZCOTg3Ci06MTBEQzgwMDBBQUEzMjg5RkQ2Q0M3NDI3MTlDNkMyRjZERTVFQjkzQjdDCi06MTBEQzkwMDAwQkI5RjY1Mjg4MDgxQUFBRjdFRTY5MTk4QzIyMDRFRjFDCi06MTBEQ0EwMDBGMTIwREVCRDdCODBDNjZCOTUzQTE1RUNGMDlEN0Y2RDUzCi06MTBEQ0IwMDA2NEIwRUUzMjUzNzk1RjlCQzJFQThGM0VCNDc3MjVEQ0M1Ci06MTBEQ0MwMDAzNzkzNkVDRjdGMTRGNjQ5Q0NGNjUxNzhERUU1OEZENUM5Ci06MTBEQ0QwMDBEQ0YzREQ5QjdFNTFENjM5NzI4MzNGMTdFRTA1QkUzQUU5Ci06MTBEQ0UwMDBDMEVFRjUxRDZFMEQ3RTc3OEY3QTc4QTM0NUE5RkJEMTI2Ci06MTBEQ0YwMDA4RkM4NkZEODhGNzJBREJDN0UzRkI2MUJBMDRFQ0JBMTM0Ci06MTBERDAwMDA3MUZFREM4MTc0OUYyRjQ3MUQ5QTk2NzQyOTFEQUZBMTY3Ci06MTBERDEwMDAzMDA5M0VEOTdGMzVFQUQwMUVGOEVFMzAwNDg3OEY1N0EwCi06MTBERDIwMDBFRTFFMTQ4MjgzQjRGQ0MzM0QyRDkzRDU3MEY4NzAwRkEyCi06MTBERDMwMDBEODIxN0Q4NUMzQUIwRjdEODg3MEU4RUJCRTI5NUQ2QzczCi06MTBERDQwMDAwN0JDNUM5MzZEQzBGQkQ2QUUzODZDQzFGODBBRkQ0NUNDCi06MTBERDUwMDBBMDNFRTJFM0FDRUZFNUJCNkNDNTFGQTFFM0VDNTREM0ZFCi06MTBERDYwMDA5N0YyOUU0MjU3QkREMTREMkFCMThGNjJGNzZDNkFFOTk2Ci06MTBERDcwMDBBNzJCQ0FGNTM2QUNBQjI1Q0E3NThGMzUxRUY3OEZGN0MyCi06MTBERDgwMDAwMDVDRTM3NjNCQTc4RTBCRDEzNUIxQjhDN0MxRkRFRTgxCi06MTBERDkwMDBBMzJDRjM1QkEzNTRGMkYyOUFFQzI1NjIwQUM0Qzk4MTY2Ci06MTBEREEwMDAxN0UyNDNGQjg5NUZFNjhEMTg0MUY3MTlFRjMyNjBERTE5Ci06MTBEREIwMDBGQzI4OEJGQjIwQ0M2MzJCMDhGODIxNzdFQzBBRTIxRUIxCi06MTBEREMwMDAyNzg4MjFCRTUwRTZBQkQ5QzFGQ0Y1OUE0MjgzNkYzOTUyCi06MTBEREQwMDAzQkVGMTU2MEJDMTA3REI0RTlFODIzQzBFOEEzQjExRDlBCi06MTBEREUwMDBFOUEzQTJBOTlERDE0NzYzNzU0RTY0MDYzQjM3MDMzRjYzCi06MTBEREYwMDBCRjk2MDRDNjAyREUzQkEyQkU5QTI2NTFGQTFGMUExNTMwCi06MTBERTAwMDBBODAxQkE5MUJERTdBNkU1NUQ4QTcwM0QxRDE2M0Y3QzZECi06MTBERTEwMDA3RENBQkU3QUMzNkY2RDRCQ0E0MzY5RTA0RkVFMzNFMEYzCi06MTBERTIwMDA3OTk3MDIzN0E1NUY4Qzg1RTVDNUI2NThERDVGMDNGQ0ExCi06MTBERTMwMDAyQTI3QjRFRDg1RUQ2RjZENzkxRkYzMzY2Q0ZCNkVEODM0Ci06MTBERTQwMDAwNUVGREI2NjUzMEMzOTQyRjNENkVFNUI4RUY3NjdEN0VFCi06MTBERTUwMDAwNkQ4N0REOEQxMjRFMDA1QkRERTNCM0MxOEZGMDRFMUE3Ci06MTBERTYwMDAwMTc2NEYxQUMwQTMxREY5NjUxM0ZGNUUyQ0FCNTE3MEVDCi06MTBERTcwMDA4MTlFMUYxQUM1RUUwRDg5QjRCMEYzRUIyMTE2MTFEN0EwCi06MTBERTgwMDAzOUM0QzJDRTU5RTJGN0JEMjU4MkJGOTU3NUJGMDFGQkVCCi06MTBERTkwMDBDNzQzOTlBNkRFRkZGREJDQkZBNDg5QUYyQkY4NTRFOEE5Ci06MTBERUEwMDA4OTRBRDIyOEI4N0ZFNDRDOEMzQkQxQTJBMTlGRDhBODQ0Ci06MTBERUIwMDAxNEQ1NzhDQTdCOEY3ODg4RjMwRUFBNDdBRkQ4M0RGRjc4Ci06MTBERUMwMDAyRUQwQUI5NDdFQkUwMEZDMDRGQjhEOTYyMzAwNkU0QUUwCi06MTBERUQwMDA3RkEwQ0Y3MEY4QTFFRjBEODdGOTYwMUVCMDE3QjZFQ0U4Ci06MTBERUUwMDA1RTIyRTIzRDFBN0RDNDZCMjZEQzFCNDlGQjY3NDY5MTJFCi06MTBERUYwMDBBQUFERjRGRENDNjg1QTQyM0Q4RUQ3MTM3OTdEMjAyQjE0Ci06MTBERjAwMDA1MzNGNzExQTA0RkE3QzNEOEZCQjRFQjZGMEZDMzFDOTA5Ci06MTBERjEwMDAzRUVBODZEMTUwNjc3NjVDNTY1MjI0RUEwNTg1NkZFMTY5Ci06MTBERjIwMDAwRTA4MzhCNzk2RjhGOTc1NEEyMEM1MDA3ODUzRjg1OEE2Ci06MTBERjMwMDAwQTE4RkM1NkFBQjQ1MjI0ODcwMUYyMThERUYxRDA3REVCCi06MTBERjQwMDA0QkJEQ0I5REFCMkY2NURGNzFFQTlGQ0ZFNEVCRjlDMUYxCi06MTBERjUwMDBGNkY1MTczREJFRUY5RTA5RjAyRDM3QjczRDcyMDNBREM0Ci06MTBERjYwMDA1NzVDN0EwRUNGMDc5NzQ3NTU1Qzc5QTE3QjJGRjRFQjZFCi06MTBERjcwMDA3RkU3RkNEQjUxNDA4NzREREY5OEMyN0UwRjU1QzNFMTQwCi06MTBERjgwMDBENkUyMjlDMEY3MzJGOUJEMkUyNDUxQzkzMzU2RTVCMTg2Ci06MTBERjkwMDA0MjFCQjdDQjEwOTUyOUY4MUNFREFDRkY0MDExMDhGOEQ3Ci06MTBERkEwMDBGNDRBQjFGMDdFNTQzMjlFMUY0RUQxRTVBREZFODc5RkZDCi06MTBERkIwMDBDNUY5MzJDMTMwMDAyNTcxQzkyODM2Q0YzN0NDNEUzMjcxCi06MTBERkMwMDBEM0ZGRTA5QzY5MUEzRjE3N0I0NzcyQUZCMEQyRjFERUY2Ci06MTBERkQwMDAyMUVDN0MzNTMzQUVBQTE5RUFDNEM0QzZDRjI2REFGQkRECi06MTBERkUwMDAwQTMyMTM2QkE3QzZDMkI4RDFDOTE4REZDQTM1RUJEQTNCCi06MTBERkYwMDA1M0JEMTJDODY5OTI5QThDNzk4OUQzODhDQTNFNjM3QUQ0Ci06MTBFMDAwMDAwM0VERUUwOEJBMkU5MEUzRDc4QzJDNzQ0RUU1RURFN0M1Ci06MTBFMDEwMDBFOEZGNDM0REU0RjY5OTJBN0ZFMzJBQzc1Q0U3NTQ4RDc1Ci06MTBFMDIwMDBGRDUyOEJGNzAxRkRFOTlGRTJFREUxRjIyQzNFRTNGQ0FFCi06MTBFMDMwMDBERkUyQzk3N0MyRjlCMzFFOUUzOTBFRTE3RUFCQTMyNzlBCi06MTBFMDQwMDBEQ0Y1NzBENEMzNUQ4MUFCMUU4RUQ5OUYzOEE3QzY4NjIwCi06MTBFMDUwMDA4MTkzMUUyRUQzNDhFRDQ4RDA2MzBBRENGNTcwNzlDNzUyCi06MTBFMDYwMDBDQ0U4RTI5RDM0MTNERUFCRjg4RUM0RTBGODBFMzUyMzI1Ci06MTBFMDcwMDBBMTFFQTQ5QjY4MTFFRjAxQ0U4Q0UyRjUzNzQ3QjBCQTIwCi06MTBFMDgwMDA4MkVGQTg2NEM0QjcxRUFFN0EzODY2QzZGMUY3RTM1OENCCi06MTBFMDkwMDBGRkJEMDAyRjA5RTUwMkUyNDdBMTlCQ0NENEFBREQzMUU4Ci06MTBFMEEwMDAyQTdBNTBFQ0VCNjkxQzJFRDRCRTQ2RkIzOTM3REU4QTQ3Ci06MTBFMEIwMDA3MTI2QjBBRkE3MjU4NEUwOTY1QkNFRDY5NTNCRENGMjA3Ci06MTBFMEMwMDAzQ0Y4QTlGNDc1QkNCRjcyMEFFMTNGRkYxNDNDMkZDQUFCCi06MTBFMEQwMDBFNDU1MDVDRTUzQkVEMURBQzlEMzlBQTY5RjgyMzhDMzgwCi06MTBFMEUwMDA1MDkzRkI3RUEwQ0Y4MDEwODNFNzc1MTRFRTQ3NzQ3MEM5Ci06MTBFMEYwMDBEN0JFNjdEN0Q2RjU3MEY4MDNGQzMxQjEyN0JDMTQzQTA4Ci06MTBFMTAwMDBGQkMwQzJFMzRFMDNDODIwQjA5N0M3QkM5NjExMERGMjA2Ci06MTBFMTEwMDA5QjM0QzU4NjhENEI1QzcxMzgzRjM4MEVBNzU3QTQ2MzdFCi06MTBFMTIwMDA4MUI4ODNDRkVEQTkzRjQyOEVFREEzNUE1MjI1QzczNjYxCi06MTBFMTMwMDA4QkVFRDM5NkY4OUU3MjRDQzFEMzY0OEU4N0M5QzRCQjU0Ci06MTBFMTQwMDAwQkUyNEI5Mzg5RjQ0NUQwMUY0ODBFRURCRjVCRDlFNzM2Ci06MTBFMTUwMDA0MDMyMTBGNjc5ODNDNUMxRTQzRkRGNjc3MERGRDRCQzdECi06MTBFMTYwMDA4NEY5QjNGOEZDNTk2NjBCN0U1RjQzMDI1MjQ3MTBDRTI4Ci06MTBFMTcwMDAyOTc4REY5MUQ3MTgxQjVBODc5MkJGNEY4NjU0MTE2NkIyCi06MTBFMTgwMDBDRkNEQzM3QkFFMjk1Q0M4Nzc1MUExNzU5OEFDODI4NDkyCi06MTBFMTkwMDBGN0ZERjA3NTlDQTkzMzdCMjE4RkFENUI3NDQ3ODE5REEyCi06MTBFMUEwMDBENzIxRUMxQjgzRkI5M0ZDMjM0MEZGRTlEQkNGMzVFRTRCCi06MTBFMUIwMDBBRTgwNzZEQUFGMDhGQkYxRjUyRjE2NTlGQzIxQjBDMzFCCi06MTBFMUMwMDBFNDdCM0VCOTc3M0I5NUIyMzVFQTA5ODU3RUIzRTBGQjQ3Ci06MTBFMUQwMDBENENCODFERUZEMDM2MURENTM0MEQ1RDE3MkU3NTlGNjIyCi06MTBFMUUwMDAxRDQzNzY2M0JBMDRGM0VDRTk2Njc5RkYzOUM0MjU4MUVGCi06MTBFMUYwMDA3REFCQTdERkVGNEJBN0ExNzg0NTYwMDhGODI5OEE1REMyCi06MTBFMjAwMDAzNkQ1RUExRTY5QTVDRjU3RjNFRjY2OUJDRThFMTgwNTZCCi06MTBFMjEwMDA3OEY5QzFGNDc0NDA0QjRGMEExRDUxQkExQTBGRjBFQzUzCi06MTBFMjIwMDBDQUY4RkM2OTMwQzdERkNEMzg5NzAwN0E1MUIxREY0M0I3Ci06MTBFMjMwMDA3NjhBNkIwMkFDQTczNzNCN0U4OUQ1M0RDNTdBMDEzQjE4Ci06MTBFMjQwMDA1RUIxNjcyRUU2ODc5MERERDQ0MUE2NzQ3NDFCQzdDQjAwCi06MTBFMjUwMDAzQzczQUJDQ0VFQ0QwRjYwRkVGREVBNDhFNTVFM0I0NzdDCi06MTBFMjYwMDAyNEQ4OTFCN0FENEVEOTU0MDdFNzg2RDUyQ0ZFN0U2QkU2Ci06MTBFMjcwMDA5NUFDRjE4M0REOTBERDg2RUZCM0ZCNjY2RjVGQTY2RDM1Ci06MTBFMjgwMDBGRjRDNjBGRTdFQTE1N0ZCOUM1ODEyMzRGN0VERjY5Q0M0Ci06MTBFMjkwMDBEN0UwMzVDMEJDQzMyMzMxM0Y0MTNGQUY3RTdGRkE3OTIxCi06MTBFMkEwMDBGNUYzQURFNjdFRDU2QTYzRUQ0OEE3Q0EyRTU5NjA2NUUxCi06MTBFMkIwMDBGNjUwRjdBQUM3RUJFMENBQkFERUUwRTczNjBGNDg5MzlDCi06MTBFMkMwMDA1NEY3QUJCNUFEOEUyQzA4Nzc2RjhDMzI5RTAyRUY3OTg4Ci06MTBFMkQwMDBDNENGRTIwMDU1RjJERkMzREQ4MzlCRTU2NkYxODFERTRBCi06MTBFMkUwMDBFNjFEMTY5ODhBNzZBMEUxNDlCRjA4RjZGQ0IwMDA0MTA5Ci06MTBFMkYwMDBGQjNCMkJFMDMyMkNEMEY4MDFDQzRGRUVFMTA3QzBCRDQ4Ci06MTBFMzAwMDAyNkI0NUVENkIwOEJGOTAxRjVENUU4NEY5NDUxN0YwMjYzCi06MTBFMzEwMDBGNENDN0EzODlCMUVDMDE3OTQ4NkZFNDFEMERGODVGQzcyCi06MTBFMzIwMDBBOTJDQjhDRjkyRkJDMzEyQTU5N0Q0NUFENjdGQTNGNUQ4Ci06MTBFMzMwMDA1REUzNkEwOUZDNTU3NzkyNEMyOTYzRTNDM0VGRDc5OEY0Ci06MTBFMzQwMDBBOTVGNTU5MzRDMjIwOEY1QUI1RTc4RjhGREU5NkJDMEU4Ci06MTBFMzUwMDA1RjhFNzUwOTcwN0YyOEFERDc1OEZBRjdEREJGREVGOEZDCi06MTBFMzYwMDBGMEZFMUFCODZGOTRGQTY1RUJBQzJBN0ZCNzM3RkU3OEU3Ci06MTBFMzcwMDAwNDhDOTEwQkYwNDdCQTNEN0YyM0YwQTExMkFGNjg4QTVECi06MTBFMzgwMDBFMDdDMUYxMUE0QkI2ODgwOTc0MjI3NTcyRjlCOEY3RThDCi06MTBFMzkwMDA0NUM0MjVFNzg3NDA5RTU4MTZDN0ZGMTYyQjhGQzM0NkY2Ci06MTBFM0EwMDBCMUY3OUYxMkRENUI5MEJGREYzQTNGMDJFMkNCRUY4QzBCCi06MTBFM0IwMDAzQzhBRkU1QzkzOTVDNUU3Rjc3OTRBRDA3RTUyRjBCOTY2Ci06MTBFM0MwMDBDQjJBNzAzRkM5M0YxMEY4RUREQUYxQ0Q3MUUwOTc2NEM4Ci06MTBFM0QwMDBDOTAyREU0M0RBMjRGQjlFNENDRjAwNzkzNERCQkU4MkQ3Ci06MTBFM0UwMDA2RTI5NkJBMjExQkYxMzZCOEFGMDBGQkM1QjY1QTczNTVBCi06MTBFM0YwMDBGMUZCNEM5QkNFRUUxREE4Q0U2MzFFNjZDRERENjU0NUMwCi06MTBFNDAwMDBGQUYzOEIzMDdFNTZDNkVFQzNBMEVGN0JEMzJGMjFGREVGCi06MTBFNDEwMDBFMTEyNDA3RjkwRjNGQjEzRjBGQ0E4NjE4RjBERTI0MjA0Ci06MTBFNDIwMDAxREZDN0U4MjMzMERDRDA5RjM2OTU5QkVFNTJGMzZGMDEwCi06MTBFNDMwMDBEN0RFRTc3MDM4MjNCNUUyM0Q0QTY1REI0NEJDRkY4Mzk1Ci06MTBFNDQwMDBDRTlCNzAwQkM0QTcxQjE2NjRCMkVGRjdEODc3Njc4QTEwCi06MTBFNDUwMDBGRTRDRkY2N0YzQzA3QzE2MzRDNEVGQzgxNDdCNzJCMjY1Ci06MTBFNDYwMDBEOUVCODNGNTM1NTU4QjE4MkY5RUFDQkIzNzZDMEFCRkEzCi06MTBFNDcwMDAzNzRDNkY1RjlFQjQyQTcxRTkwNENDODc1QTZBNjdGMzAwCi06MTBFNDgwMDBGNEM2NEY1OURGQzQxMjlGOEFERkIyMjRCRjA4RUJDRjE2Ci06MTBFNDkwMDBGQTI2ODFDMDE1OTc2NzVBNTI5RUM4MDMzRjlFQzhDRTgwCi06MTBFNEEwMDBFMTMwQUM0NDc2QTNGRENBQ0Y5RkU4NkYzN0RDNDNCRUIyCi06MTBFNEIwMDA5MzU3REU2QzM4MzdFQjRBMjQ2NkZCRkQ5NzA5NjA3NzhCCi06MTBFNEMwMDBCOUZCQjFFMDIyRDMwNzhBN0QzN0U1MUI2RDdDNTU2RjIwCi06MTBFNEQwMDBFN0U2MzQ4REJEN0YyMDQxNzhCMzdGQTcyMkMwRUU1NTlCCi06MTBFNEUwMDBFQjYxRkYwNkE2ODdCNTdCMDk3OTBDRTE5MEJFMkRGNTlGCi06MTBFNEYwMDAxQUI4NDcyOUZEOEYwNjNCQ0NEQjAyN0MxMTBGRjgzQzk0Ci06MTBFNTAwMDA4N0Y3RkM1NDEwRkY4REQwNUVEMTIwREFGREIwN0U5MkVCCi06MTBFNTEwMDA3MTE5RjA5NTYyMzcyODcwNjkzQ0RGNkMxRTQzRDc5MTAyCi06MTBFNTIwMDA3NUQ2NjA1RjRFODc3ODMzRjAwNUZBQ0ZFM0ZFQkMyRkQ3Ci06MTBFNTMwMDAwRUY0NTc1MzQwQzI3MzgyQUNCM0JCQTMxNkE4RTQ2MDc5Ci06MTBFNTQwMDBEMzc5MDMzRTdGRjNGQzVCREFFNzgxRDhDQkUwQkQyREM2Ci06MTBFNTUwMDAwNkU2MTdFRkRFRkJGNzI4OTA0QjZGOUVFRkM2RjE4MkMxCi06MTBFNTYwMDA3NjQzNEZCQjE4RTE5MTZCMTU4MzcxNjdCNTVENENDNDYxCi06MTBFNTcwMDBBQzAzOTBCNzM1MkQ5QUFBMzFBMTc3QkIzN0ZCMTM3MjQ0Ci06MTBFNTgwMDBCRjk1RjRCNDFGNzJDMDFFMTFDM0Q4MTExQ0NFNzQzRUM3Ci06MTBFNTkwMDAwOUY4NDg2RjU3NUM2RUUzRjFFNkMxMjQxREVFQTM2Q0U5Ci06MTBFNUEwMDAzQzFGQjcxOEJGMUY2RThBQjIyRjQ3N0RDQ0VDQTVBRUJCCi06MTBFNUIwMDBEREE3MUZCRjA2OUVFRjEzRDlGRDExRTc0NUU0QTdCN0ZFCi06MTBFNUMwMDA3NjJFMUVEQUE2RTI1QjJBMzkxMTRGNUZGNTNGREJGOUEyCi06MTBFNUQwMDAwNkVERkZENTlFNDgxNjQ3OTc5Qzk3QTlCRjc3MDhGNThCCi06MTBFNUUwMDBGNzcxNzhGOTA3QjBGMzM4RUYwMEI4RDdFOTA3REIyRkY4Ci06MTBFNUYwMDAxRDNERkNGQTNDMUJEQUMzODFFOUEwMUU0NkFDNkIzNzFCCi06MTBFNjAwMDAwMkZFNUJBQ0Y5RDdEOTkwREZFQUEzMDAyRTVFOTIzMzBECi06MTBFNjEwMDA5MDRDODBGMzdBOTIwMzc0MTVBODI2NzZGMDI3QjZCNTRECi06MTBFNjIwMDAxODBDODA5NzhDOERDOTk4QTdCMzg5OUY1NzJFQUFBRkQ1Ci06MTBFNjMwMDAzNTI2QUJFODYyMTEzRkVGM0EyOTdCODdDNEFBOUUxRkJCCi06MTBFNjQwMDBCMDMxRjk3MjcyNEZFOTZGMzA0RkUzNDMxMzE5MUVDNkIwCi06MTBFNjUwMDBERTZDQjAzMTdERkI4QUQxN0JDRDY2RTg3N0M0ODBERjhDCi06MTBFNjYwMDAwREVEREVGQkZBNUVCOENGNzhEMTYxQzc1ODg4RkYzRDZCCi06MTBFNjcwMDA2MjczNjBCRkM2N0Q5QjZBMjBDRkI3RjExM0QwNTI1NDNFCi06MTBFNjgwMDBBRjZDMjgxNDBENzRERTM3ODg4M0M1RUYwRTE4RDAxRkM5Ci06MTBFNjkwMDAwRkM2M0Q4OTJCMEVGNkY5MTA1RkNGMUIyRDA2Q0RGOTY1Ci06MTBFNkEwMDBEODFCRkNERUREN0I2RDMyQjYyRkIxODk4OEM3QUQyRDVFCi06MTBFNkIwMDAzOTcxQTAzNzVBQUNFRUJCNkRBMDJGOEVCNUQ1QzAxMjA0Ci06MTBFNkMwMDA5NDc4OUY2MkFGNEQzQ0IwRjU5QUQxRjRDRjg5MUQwNjg2Ci06MTBFNkQwMDAzQkEwREI3MUUwNzkxMUY2RUIzODQ5NDg4QzQwN0FEOEUxCi06MTBFNkUwMDA2Rjc0M0M4RjdBQkMzNzNBRDg3ODc0MUQ2RjAxQkYyQTlCCi06MTBFNkYwMDBGMEE3OUFGRkExMzQ1QTdGQTM1NThBODVGQzJFMDVGRTA4Ci06MTBFNzAwMDBDQTNFOTRGOTFERjVDNEI1REU4MkFDRTREQTdBODFCODZDCi06MTBFNzEwMDBCMzkyNUYzQUNFNEU5NDdGMkYwMUU5RDI2ODczM0Q2QTdGCi06MTBFNzIwMDA2M0Y2MEVEQUQ3MjdGNzMwQkJFODE1QUU0NzQ5NTJFMTVBCi06MTBFNzMwMDA1MDgwOUY4MkE3N0ExQjhCMzMyQUVCRTk2REZFREZEQkNCCi06MTBFNzQwMDA5ODlFNTRDQUVGNEJENzlCNjQ4NzE3RTk2NjFCQ0IwRjgzCi06MTBFNzUwMDA3Nzc4RkRFNjU0QzgyMzZCNENDNTdGQ0Y0OTk1NjdGQjlFCi06MTBFNzYwMDA3QkE0RTc5M0RBN0IwNTFCREIwQzA2RjgwRUFDNjI4NzEzCi06MTBFNzcwMDAxMDgzRTY2RDFGRURFQjIwOUQ0OUY1NDg3RjhEODcwOURECi06MTBFNzgwMDBGMjcxNjlERDlEMkNFRTQ4RTUwREJGN0YwRENGRDE4MTgzCi06MTBFNzkwMDA3RkY4Nzk3QTdGODE5NjEzOUJENkFGMTg4OEYwRjVEQkU2Ci06MTBFN0EwMDA4MEFGNDI3MEEyN0MwMzY1NTVBRDExRTg3NUQxNTI1NjE5Ci06MTBFN0IwMDAxNkYzNzNFOTQ1NkJEREM4OUY0NUVCNTg3RUUxMUU1QkEwCi06MTBFN0MwMDAzMkFFRTcwQ0E3NTc2Mjg4MUMwMEY5MjcyRTBFN0Y2NTMyCi06MTBFN0QwMDBERDc5OUM2RTRGMzUzQ0QxMENGMzUyRkFGQTEzRTA3MzlECi06MTBFN0UwMDA1MkUzNjM0RkMzNzIxNTdBM0RCNTQxQzY3MTRBMjJCNUYzCi06MTBFN0YwMDBFN0Y2QUQ3Q0JDNkQwNzE4QkQ0RkRDMjBFN0MwRkQ1RkMwCi06MTBFODAwMDAxM0JEQzQwRTcxRUMzNzM2NkMxNDQxN0VCRjAxRjQ5QzBECi06MTBFODEwMDBDQ0Y4MUNGNEVEQzkzRDBGNDZGRDAyRjQ1Q0JCODE0MDExCi06MTBFODIwMDBCQ0ZDMTUyMzI5RDlBMkUyOEJEREVCNUZENUYwNkY2OTIzCi06MTBFODMwMDA1REY1MzUxODk3NkY4QjE1NDBDRTJCN0NBQkMwRkQxNTYxCi06MTBFODQwMDBBM0YzMkFFNEZGRUI3NEZDM0Y5NUJEMkY0NzNCQjBERkY5Ci06MTBFODUwMDAxMzlDRkY5Rjk4NDFGOTlGM0U4QUQ5MTAyM0MwMzhBRjdGCi06MTBFODYwMDAxOEMzREYwN0Y3RjUwRkE0QkZBMDVDNkRFQjIxNTdCRkZFCi06MTBFODcwMDA2NjcyQjVDRDk2NEFFN0FGQjhCNjFCRTMwQ0MxRjU3MTI5Ci06MTBFODgwMDBCQTc5NjJBQTQyMzdDOTAyQzBCRjk2NjI3MDE4QzA4QkJCCi06MTBFODkwMDBDMjE1RTg5OURBQ0RCN0RGOTA4NjVDRDkyMkUxMzkwRjRECi06MTBFOEEwMDAzRjQ3RTJGOTFGQ0E3NzAyMEFCRjg2RTQ5OUMyQjc2RUYyCi06MTBFOEIwMDA3MzM0RDhENTUzQUI1NjgwNUQxRjk3RTc0NUZBM0MyNTk2Ci06MTBFOEMwMDBCODg3QzY1MjdENzYwQUY4Mzg4QzNDMzhDMUU1Qzc1NzAwCi06MTBFOEQwMDBCMkZCNjJGN0VFMEYwMDdBMkVBMTFFMjJFQzg3QUMxMzdBCi06MTBFOEUwMDBFQzgwMTdBNUREQjE4RUREQzMzQTNDNUFEMDlDQkYyQjFFCi06MTBFOEYwMDBGNTFGMENFRjQwOEZGQjQxODc0NzYzN0MzQTYwODQzQ0Y3Ci06MTBFOTAwMDBENTExM0VBNkM3ODg5MDgzRkM0MDBDNTcwRjAwM0U1Qjk0Ci06MTBFOTEwMDA0NEY1RDdDRDJBRkQ3NTRBQUU0NTNBNTVFMDcwNzkzNEI1Ci06MTBFOTIwMDA5MzVGNUZDNUIwN0RGRjk1RDM4NTE1RTI4NUFBNzMyRkYwCi06MTBFOTMwMDBFQTkwNDgwMkUzNjc1MTYwN0MyRUMyRjhBN0Y2NENCQTExCi06MTBFOTQwMDAwQUU5RkREQUYwRjQ2RTA3RkYyQTE2RkUzREE3RjU0ODQ2Ci06MTBFOTUwMDA5RjMxMzNFQ0Y4MURDQjEzOTIzMzIyNDY2MzFGRjlCMDdECi06MTBFOTYwMDBEQ0JERjE1N0U4RDcwMUZEMDJCRkY3NDZGRjI1NDBGRkE4Ci06MTBFOTcwMDAyNDBDRERGQjI4RERBQkYwQTdEMDAxQTU4QjZCQTI1NUU1Ci06MTBFOTgwMDBGMjQxNEYxN0NBNzlBMzAyOTc1Nzc0RTc5NTRGNDczMzVGCi06MTBFOTkwMDA3OUIwODA5NzhFNUVGMjY2OTRGREZDNjAzQzlGRUM4MUJFCi06MTBFOUEwMDBFN0Y5MENDRjIxQkUwMjdDMkJGMkUxNjcxN0UxQUYzRDA2Ci06MTBFOUIwMDBEMTc2NkNBRkY5NzQwMUU2QTlENEYyNzNBQjdBM0U5RkJECi06MTBFOUMwMDBCMkVFQTVEMTgyRTY3QzRCN0ZFRTM0Q0FFMkJFMkI1QTcyCi06MTBFOUQwMDA3NzNFRUE0ODBCRDFDNzM0NkVDRjJFRDk2OEMyNzNGRjk5Ci06MTBFOUUwMDAyREQwMDI3OERCQ0RGRUJENkNFNTNEQkI0NDBENEYwQTVBCi06MTBFOUYwMDBFQTE1RDE0QzhFMkJGNEUxNTg2NjI0QzNBOEZGRjI1NURBCi06MTBFQTAwMDA3MkUxNkVDOEZGRjk1OUFCMzc2RjM0RERDNzE2QTM3N0QzCi06MTBFQTEwMDBGNkI1RTgwNzM4QUY4MkYxQUZDQTMzRDgyMTFGMjRDNjU0Ci06MTBFQTIwMDA2NTE3MjBERTgxMjQwQTdDQjg4RkNEMzMyRUQ1NzkxOTY1Ci06MTBFQTMwMDBGQUM5MEVFNzM4OTAwNzBGNzM3QzI5Rjg1NUUwRDA5QjkwCi06MTBFQTQwMDA5RUVCMERBRjdCMzg3Q0UyNzlCQjVFOEUxNDczRkU5RTJECi06MTBFQTUwMDBDMkZCNUQ1QzhFNzg0NUUwMjcxQjcxMkYxNzYxRkQ1OTY1Ci06MTBFQTYwMDA0Q0ZFMDVFNTQ4MTZDMTczQzk5Nzc1NzJFNEU1OUY1RUQzCi06MTBFQTcwMDA4RUJDQUM5MTIzMTNEQUMyQ0ExMUZBMEJDQkZGRjExQjg3Ci06MTBFQTgwMDAxNkEyMUQ0QjBFODdCNzYzNzc0NjMzM0QxQzBGRkE5M0QyCi06MTBFQTkwMDBGNjhCRjdCMkYzREU4NzM5REQ1MjhBQzRCQ0M5REEwREQyCi06MTBFQUEwMDAyNkNDMTM1N0U0OTA2RDM2Qzk4MTdGQUZEOTA2RkExNjhDCi06MTBFQUIwMDA3QUNENzYxRjlFMENFN0M1NDk0NjA3OUM1RjlGOTIwMzVGCi06MTBFQUMwMDA4OEY3NTNENDAxQUY0NUZBQzhDN0ZCQzdDM0M4MjMwMkIwCi06MTBFQUQwMDBGMTEyRUY0NzgzRDBFRjlDMjYzNjIxOUYyQzk5NDY1MEE4Ci06MTBFQUUwMDA3RkVFREU3ODA1RDI1NTQ5NUU4QTAwNzQ1QjVBMTcyM0EzCi06MTBFQUYwMDA0MDdCRUM1NEJCMDFFNDk0QjI4RjJCOTYxOUM4QjA3MUUzCi06MTBFQjAwMDBDODA3MDdENDcyRTQwQTZGMTVGRUJCQ0Q0M0UzREM0OUE2Ci06MTBFQjEwMDA3MjBDMjE0NzFGM0RGQjMzNzVCQ0E4OERENkQ1RjEyMjYxCi06MTBFQjIwMDA1QTdGRTBGQkM0OEI4RTQ2MDcxRTgwNzhEMTNGNkNBRUM3Ci06MTBFQjMwMDA3Njk4Nzc5NDI1RkYyOEVBQjdDNDJBOTFBOEU0RDZDNTI5Ci06MTBFQjQwMDBFQ0I3MUY0QTJGOTUzQzJFNDU1QUE5MzQ0RUQwQzQ4MUFDCi06MTBFQjUwMDA2RkFCNzM2MDFDRjgyQjU4NEZDNTgwRTM0RkMzNzA3OEMwCi06MTBFQjYwMDBBRjQ2NTg3QjlCQURBMzFGOTcwQkU0MTM4MkY4RTg5NzQxCi06MTBFQjcwMDA1RjI1NDJGQzQ1OTEzQjA2N0JBQ0UyMkYwQjkwOTdBMUIxCi06MTBFQjgwMDBGMERCN0YwMzFDN0RCNUQ3MDA4MDAwMDAwMDAwMDAwMDkzCi06MTBFQjkwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRkNEN0QwOTc4OTRENTkwCi06MTBFQkEwMDBENUYwN0RFNzlEMkRDQjI0OTNDOTQyNzYyNkVDQkIwMzlGCi06MTBFQkIwMDAwOUFCQjE0RTA4NjA5MDA0MDcxMDQ0OEQzODA5OTBCMDNECi06MTBFQkMwMDA2NDAzOTFEMkQ2OTY4MTIwMDY4QTE4MkJCNTU0QjEwRUQzCi06MTBFQkQwMDAxNEZBNTE0NTFCQjYxQURCQTAxMzQwMUExNDM0NTZBRDczCi06MTBFQkUwMDBEOEFGQTU2MTkxMUQ4OTgwRkREMzhBRTUzQkU3REM3QjI5Ci06MTBFQkYwMDAzM0YzNEUyNjAyNkE5RkU3MEYwRkNGQ0Q1RERFN0JDRjRBCi06MTBFQzAwMDAzREZCM0Q3NzQ5MkQ2Mzc5M0IyMjE5OUI5MEIzNTBFRDM1Ci06MTBFQzEwMDAwNkE5QzlDQzNDMTYxQjgzMUYyRjYzNDM3OTNFN0EwODkzCi06MTBFQzIwMDBFNjU5OTg2QjIwNjM2QkYyNzU3OURFMDE4QzVEQzc5RkE2Ci06MTBFQzMwMDAzQkZENjlBMjE1M0U4RTY3NkNGRUQ2MzBFQjQ5MzNCNUJECi06MTBFQzQwMDA2N0Q3RTE3Rjc5NUQ4QzI2NUY1OTlGNjQzREQ5Qzc5RjY3Ci06MTBFQzUwMDA5RjhGQkYyNEMxRkYzMzRDQ0YxMjE4MkI2M0UyQTdFMTczCi06MTBFQzYwMDBDQkRGRkY3MDE4QjRDN0RGNTVDNkRFNTRERDg5NTY4MDkwCi06MTBFQzcwMDBBN0RDREMxMkQ1RERDRUQ4MzNGOUM3MTNEQzkxRDQ1MjMyCi06MTBFQzgwMDA4N0RGM0QyMkM2Nzg3MUI5RTNCRERFNzE4Qzc5REU1NTMwCi06MTBFQzkwMDBEOTE2QzgwRjM2MTkzRDRBMzRGQ0UyNjQ3NjZCODJFODE3Ci06MTBFQ0EwMDAwRjdFOTQwNkM1NjcxOTA0Rjk3RjQzNTUyQzYzOTdGRUMwCi06MTBFQ0IwMDBBREEzRjRDNTlGQjhGMjMyRTBGQjhBN0E5RDYzMzlCNDA0Ci06MTBFQ0MwMDBBQjY4NTAxOENCNjJDQ0QxOTU3OUNEMTk4Q0Q1ODU0N0RFCi06MTBFQ0QwMDAwRDYyRDA1RkNFQkU0OEE3MDFDQTJGMjk2NkFGMjk4MzM3Ci06MTBFQ0UwMDBEMTAwMDg4NzQxQzIzRkEyMzU3RDFCRDQ1NzM3OThEODQxCi06MTBFQ0YwMDA2QUM4NUVDQTYxQUMxOUUxRDUzQkEyRDkwMDNGN0UwNzY0Ci06MTBFRDAwMDAxRDdFQTYwRkNDMDBDQTZCMUQyRTBCNjM5QkMyNzhGRjI1Ci06MTBFRDEwMDA5QkMyNjQ3QjdCMzQ4M0I0REI5MkQxRUMwNEMwQTdENzY1Ci06MTBFRDIwMDAzMzE2MERGNDgxQzQ4MzY5RjY5MjZFMDNGNDk5MzAxRjkzCi06MTBFRDMwMDAzREYzMTg4MDRFRDlBRDNFMTVGMUQyQURENUFFNjM5MUZECi06MTBFRDQwMDBGRTcxRjRBRDhDRTZEQjRENkZENzM5NjBGQzNBODFGNzhDCi06MTBFRDUwMDA5RDREM0I1NDNERTA3M0Q4OThEQTZBMTVEMkQyMjhGNzFFCi06MTBFRDYwMDA1OEM0RjNBOEVDQUE2QTJDOEZDREY3QTg2RTY4OUZBNUFCCi06MTBFRDcwMDA1NEVEQjMwMDVFRDg3OEU2RDgwMkU1Q0MwNzgzOEY4NEUzCi06MTBFRDgwMDBGQTE2RDYxODA1RDk5ODIzMkRDRTI4MjgxRjc1QzZEOTZFCi06MTBFRDkwMDAzODAwRTYxREVENjIwQUY2QzdEODMyMUFCRjVGQTRDQjcxCi06MTBFREEwMDA4NUZEQjIzOEE3NTIwMEZEMENGQjA3MjNCQ0M4N0U3NjU4Ci06MTBFREIwMDAzNjhENTZFQzAwNkY1Q0YzMThDNTFFQzA1RjMwNERFMjE3Ci06MTBFREMwMDBBQkY1Q0NGRTUzRUNENzczNDhFNzQwQkFEQUVCOTg3MzU3Ci06MTBFREQwMDAyM0I0RUZGQTcyQkYzMTJDQ0FERkJFRDJBQUQwNzhCNzAzCi06MTBFREUwMDBCQkREQjk0NjQ2RjM3OUQ4MEFERjhGOUNFRURENjcwMEJDCi06MTBFREYwMDA3ODg2Q0ZGMUVDMzNEQTAzRTYzMzk3NTE3RjI5MkQxRTY1Ci06MTBFRTAwMDA5QTQ3RDIxMTc3MEVBNjhCMkQzMUQ0Q0ZBODMzQkVDNjI4Ci06MTBFRTEwMDAwMUQwQUU0QjE1Q0MwN0NBRDM5QTNGNTQxMEFGNjk1NUY5Ci06MTBFRTIwMDBDRDBBRDI3MTY3RDM1RTgyMzdCNTc5M0Y0RjgxMTFFQTNGCi06MTBFRTMwMDAyMEREMDE3MjU1MTczMDhGQzUxNjFEQ0Q2M0IxNDVBMTc4Ci06MTBFRTQwMDA3NEU1QzU5OTg5MkVBODdGQzRFQTVFNkMxOUVBOUZDNzRDCi06MTBFRTUwMDBDQTFDNzc2MjE1RjRCRkJFQTk1QkZCN0M3QjAyQkNCNzAyCi06MTBFRTYwMDBDMTY3ODgyN0Q5REY3MkFCOTFGQTY5QjJCODdGODRGM0EyCi06MTBFRTcwMDBBQjlDREU3MjAwNzk2RjQ3RDM5RkEzNDgyRTFBRTI4OEJECi06MTBFRTgwMDBCRTA5ODc4RTEzM0QxMjk2MDBDRUEwNzhGREExODUwQTlCCi06MTBFRTkwMDA4M0FBRjU4NTQwMzNBNTIzOUUyN0I4REQ4RTMxOTk4ODU2Ci06MTBFRUEwMDA2RjgwOUZGOEM3MUEzMTA5RjhGMjYyOENCQjA2Qzc5MUQwCi06MTBFRUIwMDBFRDI3MTREOTIyNTA1RkI0RTdDNTc3Q0YyRTY1OEU1OTYwCi06MTBFRUMwMDAzRDAwQ0ZGQjhCNzdCMjZFNDg3N0Y3MTJBNDdCN0JCQkZDCi06MTBFRUQwMDA4MThGODcyMTNGMzE4QkIzMTZGQkJCQTRCMEU5MzhDRUJECi06MTBFRUUwMDA0Qjk4NDJGOTRCMDY5RTk3RjhGQUFCOTVFM0VCMTFFQjgyCi06MTBFRUYwMDBBNEM1OTY3ODhFMjcyQkYwRjE0QjYxQkM1REIwMUU3QUNECi06MTBFRjAwMDBEN0NBQkZCMzBCN0U2MUNEOUM1RjcwMUVBOEJGNjRCQjI4Ci06MTBFRjEwMDBEREEyREZEQjlERUU1QzNERTc5M0NEMDhFN0M4MTFERUE3Ci06MTBFRjIwMDA3REM4QjdDM0YzM0NGQjkwRkZEMzk4RTA5MzNDQ0UyNzVBCi06MTBFRjMwMDBDMUZDQkVDRjZBQTM3RTQ2OUQ2OTY1ODhGNzJDODVCOTYyCi06MTBFRjQwMDAwMkU5MkVEM0Q3MTBBRUExQzhERkEzODk3RjQwMUVCNjM5Ci06MTBFRjUwMDBFMzc4QzM1MkFBNTQwMzgwMTJDN0FDMTM1ODc3QzZERUI1Ci06MTBFRjYwMDBCNkRBQTk1REU2MDhFNzNFRTQzN0FCRDM0NUYyN0MyMDhDCi06MTBFRjcwMDBDMjRBRTUyQjMzMzg3RkMwRjc3RjQwRkMwNUNCRDMyRTQ4Ci06MTBFRjgwMDA5NEEzMDE3RTM5OEE0MzdFOENFQ0M4OEZCRjEzRjBCQ0ZBCi06MTBFRjkwMDAyREU0QTU2M0ZGRUUzRjYxRkY3MUNEM0FBNzAyOUQwQzAyCi06MTBFRkEwMDAzRjEyRTk2NUQwNzRGOEEyMkExNUUxOEY2M0MwRkYwMDEzCi06MTBFRkIwMDBBMDZEOEUzNTA3RTUyQ0E1Q0NBMTIwNUQ5QjIyNUM4NzNBCi06MTBFRkMwMDBBREQ0MEYyM0JEQjkzMjQ3RTdBRDg2RUZFNjQ2M0I4OUE2Ci06MTBFRkQwMDA3RURGRDgzRUVDNjc2NjM2Q0M2RjFGQzAxRUZDMTVFMUE1Ci06MTBFRkUwMDAwMzdCQjBCNjA4RjVGNDZGRkY2OTQ0M0Q2QTk3RjJENzJBCi06MTBFRkYwMDAzNDI0QTIzODgwM0ZBRTQ4QkRFMEE3Rjc3MUQyMEI0MTYwCi06MTBGMDAwMDBGNDBFRDY3M0MxRjRGNkVCMDVBRDlFMDM3QzVERTBGNDFGCi06MTBGMDEwMDA3MDY3MjI5RkM1MzUyRjUyQjk3RUQwRUFCNUNFRThEMUIwCi06MTBGMDIwMDA0MTNGMDgzQTVDOEE3MDdFODFGODVDMEMzMjg4RTM3QTUyCi06MTBGMDMwMDA0NkIzM0U1OERFOTkxRDBFOEI4OUE0NzZGRjQ1M0IxQ0Q2Ci06MTBGMDQwMDAxNjEzREZEMTBFRUJDQ0FEMDcxNUMwNDc3OTgzNkE1Nzk1Ci06MTBGMDUwMDA2MTBBRDU4RkQ5OUM0OEZGMTdFQjE0ODcwOUU1QTQ0MUI1Ci06MTBGMDYwMDAyNTdFNzg3MTY1MzhEOTRCMDlFRjY3QkJBMzA3QjFEQjAzCi06MTBGMDcwMDAyMDE1RjJDRkRDRERDOThFNTZDNjg4RjFFRDkwODdGMTAwCi06MTBGMDgwMDAyRjU5NzlENjY4NzUyN0M1MDRFODkzMTcxQkJFMDg0MzI2Ci06MTBGMDkwMDAzQ0Y3NEY2NDAzNEVDNjYyMEJBN0Q2MEU4MzA4MjlGMEQ3Ci06MTBGMEEwMDBCRDA5N0Y1MzEwQUY4MzZCNTQxNEFDNjlFRTlEMjY5NTU4Ci06MTBGMEIwMDBFOEQ2MURGQjFCQ0U1QUZFOUMwRDcwQkRCQzZEQjRDRUI4Ci06MTBGMEMwMDAxREM4MzdGNTU3NjdFQzA1RjgyQjIzQjg1REJFQjRGN0JDCi06MTBGMEQwMDA1QTJGRTQzMzU5N0ZGNzkyNjJEMjdCM0YwNzJCMTkxM0UzCi06MTBGMEUwMDBBMDFGREZFRTczODJFQjYxNTY2ODNERDUxRjg3NzYyQTNECi06MTBGMEYwMDBENzIzMDA4NTUxRTYzRTdBRjQyN0Q0NzA4N0FBRjUyN0Y2Ci06MTBGMTAwMDA4ODM5QUE3QjAyN0UxMDdGOERFMTg0QkZFQTlFMjA3NzNBCi06MTBGMTEwMDAxOTA0RTc0OEVDN0ZCRkM1Qzg5MkEwRkMwQUM4MjNCNjEzCi06MTBGMTIwMDA5MzcwN0YwMzc4NDcwN0UyRDEwRjZGQUFGNTU0ODRFMDBDCi06MTBGMTMwMDAwQkQ1MEY1RjNCNUQ5MDBFRDBCRjZBRDFEMzNDMkVCMTkzCi06MTBGMTQwMDA3MDA3RDJCM0NFRTg2NDQ4N0ZDRjUxRTExRjA4QkE1NUFCCi06MTBGMTUwMDAwODlFQkJENDMwRjQ4ODFCRTZGN0UyOTE1NDA3N0U3RjBCCi06MTBGMTYwMDBBOUZFNEE5ODJFMTJGRDQ2RjcxNDlDOTc5QUQ2MUE4NTQ2Ci06MTBGMTcwMDBGNjcwNUZDMzk1QkUyRDAzNDhCRjREQzVGMjJCODc0RTc5Ci06MTBGMTgwMDBEOERDMDNCRUQxRkM2Njg0QTY4Nzc2N0U5NUZBQzg5QTQxCi06MTBGMTkwMDA0MEZGNTA2MTdDN0VDMTdDQTQzNDM0RkU0QjE5NDRGMkE0Ci06MTBGMUEwMDBDNzUwMUY3QUQyOTlCNzFBRTZCRDcyQTBFMEE3N0I5OTIzCi06MTBGMUIwMDAxREU1M0U5OERFNDZBQkFCMjIyNjQwNkVGRjE1RURBQTVDCi06MTBGMUMwMDA0MkI4NzA5Qzk0MjEzNENGODU5ODFGNzQ3ODY2QTY0MTBDCi06MTBGMUQwMDA4N0YzMUJDM0QwNkU0QTdGMEZGREVGQjAyMTdFRkY0RTM5Ci06MTBGMUUwMDBDRUFGN0RGRTNEQUYwRDNBQzQ2OEJFM0ZDNjcxMDBGODlDCi06MTBGMUYwMDBFNTNBODBBRjEyOENDMUVBOENDMDc5RkI4ODFFRTU2MkNCCi06MTBGMjAwMDA3RUU1RTY0ODlGMEFGMzYxQkIwQzE3NUFBNDFFRThENkI4Ci06MTBGMjEwMDAxMTdFQTA0RjBEQzJFNzE5RUQzOEUyNDZGQUZFMzVEMjU1Ci06MTBGMjIwMDA1MThERjhEMTM3NUJEMTVGODVGOUFDQzY3QTM2QTIyODBCCi06MTBGMjMwMDAxMUU3REYyRkQyQjkwNUY1RkM0QkNCMThGMUYzQTU1NzM5Ci06MTBGMjQwMDA5ODc3MTM0Qzc2RkI3RTFERjFDQjQ2RDY4RkY4QkU5Rjg4Ci06MTBGMjUwMDBFRUYyMEM1NzI0QzlGMzNBODQzQkFCQjk1Njg3N0FCNzIwCi06MTBGMjYwMDBBN0Q3QUU0MzdEREFCN0I5NEVBNzIzM0U3MEZGMjI4NkZCCi06MTBGMjcwMDBGQ0U0OTk1N0Y0MDA1RkZGNkQ1NUVBMzdFNDA3NkY2OEM3Ci06MTBGMjgwMDA3RUVGNDBBRkNEODFGNDkyNzhDQjE2N0M5MDhENzg0M0ExCi06MTBGMjkwMDA4M0QwQUFCRkQwNjJGNkUzMERFOEMzNTI2QzFERkI2M0I2Ci06MTBGMkEwMDBBQzI1MURGMUQ0RjhGQUU5NUUyREQwNUZDNTFCQTc2NzI4Ci06MTBGMkIwMDAyMDVFMkFGRTYwMjIyNjE4RjM4N0JFRDFDOEVGOUZFNUE0Ci06MTBGMkMwMDA4NEY2NjcyRTJDQUQ3MkU4QzE5RjdBMjVBNjFCRDk4NURFCi06MTBGMkQwMDAzMkQ2NkM0NDNGQTFCQzZFODE0MzFGQTBDRkE1RkY3NjAwCi06MTBGMkUwMDBDOEQwOUM4RkZEMUYxQUFBQjI2NTgwRTcyQjhFRTE1RDA2Ci06MTBGMkYwMDA1ODA4M0JEMUVFMkZBMUJGMDZCMDJGNDdEODExQ0ZBRjkyCi06MTBGMzAwMDA2NzQ1NzNGRkQxNDZGNjIwQjhGREExQTU3MzFDNjM3QTRCCi06MTBGMzEwMDA3NERFREZBMUMxNjFEM0JERjA3RDdFOTAxRjc0MzQ4NkExCi06MTBGMzIwMDBEQkI1QjYxODZFODc0MTIxM0IxMUNFOEJCRkI3NzgzRDU4Ci06MTBGMzMwMDA1MDc0NzFDODQ3NTEwQ0ZEQ0M1RDFGNjQ3QTgwOEYyRUNDCi06MTBGMzQwMDBCMkU2NDdGRTg4NzI3NjM1OTJENjcxRjk4MzNGQ0E1QzgxCi06MTBGMzUwMDA2NkYxQ0JFNTFEMjNGOERDRUY3OEVENzA5NDFEREFFNzVDCi06MTBGMzYwMDA2RkRGMTdFNzA5QzBERjFENEM3RkI1OURBRjMzNzA1Q0MxCi06MTBGMzcwMDA0NkUzMzM3RDRCMkZBNDA3RkJFM0Q5MDQzQkE0RjlBRjRECi06MTBGMzgwMDBCRjE1QzdGOTIwNDE4Nzc0NUUyNEY0REJFRkIwMjhDMEI1Ci06MTBGMzkwMDBERkNFNUY1MjQxN0MyNEYzRTU2RDY2RTY4RDBEQzhFQjUwCi06MTBGM0EwMDA5QjhEQjgwNDJFNkY4QjY0NUU2OEI3MzdDNjEyNDc3QUEwCi06MTBGM0IwMDAyNjk5MjVBMzlFRTkxNDVGMzc4OUNGRTA3Mjg5Q0Y0MzUwCi06MTBGM0MwMDA4M0NGQTZBMzVGRjE1OTI3RkU3MDZGMUI2RkQ3Q0VGN0NGCi06MTBGM0QwMDA0QkMxNEZEN0ZCRjNFRjdDQTUzRUVDMEFGMTVEODQ4RDZBCi06MTBGM0UwMDBEM0U5OEE2MzY0MTdGNEY3RjI4REJFMUVENjEwRURFNEZDCi06MTBGM0YwMDBGQTMyMTg0RjZGNUYyQjhEQzA3RTdGREY2NkNBMEIwNTE4Ci06MTBGNDAwMDA5N0RFQTZGQjc2N0VDQTIxODAyQUMwMUZEQ0E2QkE1M0VGCi06MTBGNDEwMDA2REMyMUY5QzBDRjk4QUJFNTdDNkQxQkE1QUYyOEJEMDY2Ci06MTBGNDIwMDA3Qjc3MzA0RjIzQ0E2RjMwN0Y0ODdBRjdCMDAxRERGQTFGCi06MTBGNDMwMDBBMzcyNjYyOTQ4Qjc4QjMxNzZDRTM3NDIxRUE0N0MwNDZFCi06MTBGNDQwMDBFMzMxMzg5RDYwNjRFRTUwRUI4MEFGNjIyNDVFQzM5ODc4Ci06MTBGNDUwMDAwN0Y0RTEyMzFCMEQ2NERGMEY1RkZCRjhERTRDRTBGN0UwCi06MTBGNDYwMDBEMzFCMENENkU1MzBFNDlDMTdGNkE1M0UwM0Y1NzMwNkQ2Ci06MTBGNDcwMDA5QkFDMEFFNDRGREI3RDNENTBFRTRCNUY1MDVEQzgwRjA3Ci06MTBGNDgwMDBBNzM3M0M5MjMwMTNEMkYzMjBCRjY1MDA0N0U5NDYwMzBCCi06MTBGNDkwMDA5NUNGRDlGODI4OTU5RjE1NzI1REZBNDI3QzdGRDQ5NzU1Ci06MTBGNEEwMDA4N0Y3QUY0RTQwM0FDRUY5RUE4OTY5NDg5N0VENDY2QjQ3Ci06MTBGNEIwMDBGRkMxOTA5NjZENTMxQzYzMDJGMDNENkY3Mzk4MjZCRjk5Ci06MTBGNEMwMDA1REM3RTZFMDNDMjQ1RDk5RTI2RUFGNDcxMzNGRDVBNkU5Ci06MTBGNEQwMDBGQjc2NzExRjlGRDZERjA0RkY3MkFBQTBFM0M0MjkzMDE4Ci06MTBGNEUwMDBFRjhBQTE1N0M4QUZERjc3MjA5Q0VDQzk5QjkxMkFGOTFFCi06MTBGNEYwMDA4RkJFQzFGRkVGOUREQjIwOUZGQjk1REU0MUJFOURBMDJGCi06MTBGNTAwMDBGMzU4NDE2N0IwNUNBNEI3NEJDQzNDOUZGQkJBOUVGQzYwCi06MTBGNTEwMDBDRjVDOEI0QUY4ODZGNjkxNjNBMUZFN0JBMkJEMEZGNDA3Ci06MTBGNTIwMDAyQ0NBMjE1M0IzRDc4RDg0NzY2M0EzMEQwQ0VERDBGNzhECi06MTBGNTMwMDA3Q0YzRjIxOUQ4QzkzQkRCRjRDNzVCMDJFNjMzOUFENUZBCi06MTBGNTQwMDBGNjQxN0YzODg3MTk4MkNBOUQ3QTJDQ0YzNTZCQ0JDNzlECi06MTBGNTUwMDBGNkI4RkIyQ0ZBMEY2M0FEREE3MkM5Nzc4RkQ4QjRGQTFDCi06MTBGNTYwMDA2MkRGODE3MzNGOUIwMEYzMkIzOUE0OTJGRjdDMjM3REU0Ci06MTBGNTcwMDBGQzJFQzJBRjQ3M0FCRjVEQjgwREJFM0IyQ0IwNzJGODRGCi06MTBGNTgwMDBEQUU5MTU0OUM4NTcyMzE0ODZGMUFDRDNENzQyQ0JFMzQ3Ci06MTBGNTkwMDAxRkE0NUU2NjQwREYzRTdFRkExNjM4RTZCNkU3NTFEQzExCi06MTBGNUEwMDBFRjE5QjFBMDNEOEZGMERGQkMxRUZCN0EzRDc1OUI4RDNFCi06MTBGNUIwMDBDNzMzODJFRDQ2QjBEQ0ZDQjdFQzQ2RkVFMEI3RDIzRDg3Ci06MTBGNUMwMDAxNjRBN0Y4M0U5ODVFRDVDRUYwNkVCODk2MDNCMjFFMTFDCi06MTBGNUQwMDAwQTg2QjdCQzREQTdCMTBGNUZBMTFFMTkxQTY4Mjc4QzA4Ci06MTBGNUUwMDA2NDI3QkVDM0Y1NzA4MzZENjhDN0Y1MzBGODMxODQyRjhBCi06MTBGNUYwMDBDRjMwM0RBREMzQzFERjZBQzQ3NjAzMjJFREIxMzkwMDFGCi06MTBGNjAwMDBEMjBBNkJCNzA4QjI3RjE2Rjc3RTVCNDAxQ0FBRkZCNjIyCi06MTBGNjEwMDA1QTFERUE4REY2Rjg4QzQxMUJBNzkxRUJENTc3ODQ5RDk2Ci06MTBGNjIwMDBBODEzRkExQ0Q2QUJCNENFREYxOEVFNEVENEUzQjhDOTlCCi06MTBGNjMwMDA0NkM3OTY4QzhFRjhGOTQ4QjRFRkNDQ0Y5NTdFQUNCRTE5Ci06MTBGNjQwMDA4NkZCQjE4RjU4NUQ5QTM4MTlFQjkzQTg4OUZCQTI1RkFFCi06MTBGNjUwMDA4RUYyRUREOTFCNEVGM0ZDNTQ3MTBENDIzOUQ0MzNFN0QxCi06MTBGNjYwMDBERjZEMDFGNEE5MzY3MEY4ODNFMTg5OEZFNTc2OTIzMTc4Ci06MTBGNjcwMDAxN0Y5MDdCMjdDRjZFOEQwN0E1Qzg5RDU1M0ZCOUM2NzEyCi06MTBGNjgwMDBFRjRGNDdGRkVERDNDNjA3RDI1MUJGN0UxQTE0RTdFRDA3Ci06MTBGNjkwMDA0QzFFOUUxNkYyRkFBNEIwMjMzMTIyMkVGMDE0Q0ExMTg5Ci06MTBGNkEwMDBFNDQxREE5RERCRTFGQjU1NEI1RDI0NTczRjVEM0E5RDFDCi06MTBGNkIwMDBEMjY3OTYyRUExRkExM0I2MEMxQURGOUFGMzY3NTc3NzIyCi06MTBGNkMwMDBDMEQzQzkzNTJBRDk4OUQ5NDY1N0FGMThGOEVFQTQ1OUZECi06MTBGNkQwMDA0N0YxODUxMzU1OTE3OUJCMjJCMTlDRDE3QTcyRjZCMzZCCi06MTBGNkUwMDAxM0I2NzgwMkUyN0UyNzZDN0FBMjQzNjdGMzhDOEZGRDEzCi06MTBGNkYwMDA2NkZBQkQ5Q0I1NDRBMUJENkFFN0Q3MjMxREVDQjUyREM0Ci06MTBGNzAwMDAxNkUzN0ZBQzI1MDFEQjU1MkFDREJEQjYyOTFEQzdCNzUxCi06MTBGNzEwMDAzMjY3N0MyQ0YyOTc5MUY1NDdCOUE5MEJFN0Y2MjhCODI4Ci06MTBGNzIwMDA1RDRBMkNFN0MzQkZBMTFGMEJGRDdFOEE3NjJCODQ5RTBBCi06MTBGNzMwMDBCMTBCM0EyRkI0MzhFREIxQTRFRjIyQzk1RjI3Qjg4MURECi06MTBGNzQwMDA1RkJFOEM3Mjc2NDdCODYwNURENjEzRDM2MTVENzg3Q0ZFCi06MTBGNzUwMDA2RUIxQzUyQUY4QzNBOUYwNzU4RUFCNUY2Qzg4Rjg1QkYzCi06MTBGNzYwMDA2N0YxOUU2MDM4REUxMTc4MEQ4RTAzQzk1NEM2ODE4NjFDCi06MTBGNzcwMDBDNkYyRjlCQzZEQjM2QUUyNDIxOEZGMEUxNUZGRjk3OUMzCi06MTBGNzgwMDAyQ0Q3QTMxQkMzNUIzQzJBQ0FDMzAzN0MzRERFMjVEQjBECi06MTBGNzkwMDBBMzYwN0MyQjI1QkYzNjA3RTM1Rjc3QzVGMkI4QTUyREE0Ci06MTBGN0EwMDBDRjlEODhFQkY2RTQ0NEEzMDNFMzM2MzcyQjhGMDNFQUJGCi06MTBGN0IwMDA5QzdDNUZDMEFEMjMzOEQ2Mzc3QkMyN0EwMTVDMDlDRDEzCi06MTBGN0MwMDBFRTFDMjNBNDUzNzEzMTBERjhFREMyQUE5NjIxRERBMEUxCi06MTBGN0QwMDAxRDIxMjM2QjdGQjg1NzkxOEI2QzY4OTIyOUY0Mjg0MEM4Ci06MTBGN0UwMDAxQTg2NzI2NzhDNzI0RjQ1QkEwQzlCNTU1NThENzFGQTBCCi06MTBGN0YwMDA5NDMyQkVGRjcwNTY3MTc3QjUwMTlGOUM3RDJCM0NBNDVGCi06MTBGODAwMDAzRjVDMjJFOENGOTREMUM5NjhGQUIzMzYxQjA4QUVBQzhFCi06MTBGODEwMDBDRDNGOUY4MTdDOUZCNUY5MkVCRDEyQTA4Nzk2QzcxQTU4Ci06MTBGODIwMDA2OEZFNjdERjlBRDc5NUUyMTY5Rjk4NThDRjEwN0FFQTVDCi06MTBGODMwMDA4NzgyNUYxRTEwNzREODY5MENDRDdGOEI0NUJCNkZBQzdGCi06MTBGODQwMDBDRjVCNDA1NTY5RjVGOUUyRDg4MDM4NUI0NUY5NjVEMjYwCi06MTBGODUwMDBFNzkzNjNFRDM0Q0VGM0ZBQkEwM0M5ODBDRkU3NjczMTlCCi06MTBGODYwMDA4NzA3OEFFNjZEREQ0OEYxRDc5REM2QkFGMUI4RUZFNEE3Ci06MTBGODcwMDBBOUQwMzFBNEZCRkUwMzdGMzg5MDhDN0VFNDJDRkI2MDgyCi06MTBGODgwMDBGNDIzREFCRjNGRjREMjRBMkM3RjdFMEUxQjhDRjg0RjU0Ci06MTBGODkwMDBGMjNFQUQ2MDNDRTY5RjYxQjU4NEFGN0Y2RTMxQjE2NUVECi06MTBGOEEwMDAxOEI3N0RCRjZFRkMwRjIxQkZCRTRDQzc1MEJGMDRDRjQxCi06MTBGOEIwMDAxQjQ2MzJFODEyMzFGNTE5NzQyMzM4RkQ1MTBGNEFCQTRDCi06MTBGOEMwMDAwMzAzMTk5MTFFOTI2RTg4QkZFRDkwRUVERkYyMUFDMTBDCi06MTBGOEQwMDAyRkUxOUEyQUUyREVGM0I2NkUxRjhGN0M5MjVDNjY1M0FDCi06MTBGOEUwMDAzMDRFMjBFMUJBOTEzRDc5MzFGNkRCRDk5M0VGRDAwRTVECi06MTBGOEYwMDBCRjEyMUIyMjJFMURDMjBFRUY4ODBENjE4NzgzRUQyRkQ0Ci06MTBGOTAwMDBCMzM4Nzc2M0JCMUJEOUUxRTE4MkZGMzZDNjA2RUQ3RkQyCi06MTBGOTEwMDBFMDdFNTkwOEJBMEQ4REVEMTAwRkRGMUYxQjYyRkZFMzZCCi06MTBGOTIwMDA0NkYxRjBERUIxNzJGRjQzMUIwRjdGQzlDOEY1NkZBRDIyCi06MTBGOTMwMDA4RDNEM0MyOTg0QkM3NDEzRTNFQkQ2QjUxQUQxN0VDNjQ5Ci06MTBGOTQwMDAzNTI4MjFGNUQ5NjI4QjUxRUUxRjdFMUMxQkIwNUYxMjRBCi06MTBGOTUwMDBBQzhGNDNFMEY3MjhCNkVGQkJDREI3MTc1QjBEODlFOTU1Ci06MTBGOTYwMDAxMTgxRUU1QkJGRUJCMERFMEQzMUNFMjk4MTNGRkIyMjcyCi06MTBGOTcwMDA0NkZCQTZGNjJBNDZGQTBBRjI1RTFFMTRGNDI5MTQzNzRDCi06MTBGOTgwMDBCMDM4NEY5M0REQkFDMUJFRDU5REQ2MUNGMjgzRTQzRTlDCi06MTBGOTkwMDBENTU0QUJENjRGOEM4QjkzRUQ5QzlGMjM5QzY5OUREOEZGCi06MTBGOUEwMDA4OTdGMDkzQ0MxRkNEQjcwRENCODQ1NENCMzFGMjNGN0YxCi06MTBGOUIwMDA2MUUyQUEzQzhBMzEwQkNEMTFBM0Y4NkFENzU4RjczMjFECi06MTBGOUMwMDAwM0I0NkIxREM5MUM5QjIwMUY1RDY4Q0Q0MTdENkE5QkU0Ci06MTBGOUQwMDBFMzY4QzRGRDlBOTUxNzc5M0M3RUU1MDJFNjVENEVGRDJECi06MTBGOUUwMDBGMEY5MzI3NzM3MkZDQTE3RDIyRDMwMkUxMDExQzdFMTE4Ci06MTBGOUYwMDA4ODg4RTM3MjA2NzZEMjFDQzdFMTBBOEYwQkIwOTM5MjE3Ci06MTBGQTAwMDAxRUJBNzUzRTk1RThEQTFBREE0RTA1RDBENTQ2REY3NzhDCi06MTBGQTEwMDA0MkQ3RUY1MDJFRUQ3MTM3RTcxRkY3OENCQjA1QkUxOUFCCi06MTBGQTIwMDAxODc3NzM3Q0YzMTQ0QzRCRUNERjA0OEY5Nzg5RjMwRjNBCi06MTBGQTMwMDAxRTBGRjgyQzJCRUUyNkY4RUNFQTJERUU4RjFFODg1MEM4Ci06MTBGQTQwMDBCRTVERENBNTIzNUUyN0M0ODVEMDc3NkJGMjc1N0Q0ODRCCi06MTBGQTUwMDA1RkIzNzA0NzI4QkIzQTIzMkVGMkJGN0Q1RTY0ODZBMDU5Ci06MTBGQTYwMDBGNzJEOUQxNzc5RjEyNzJENDZBNEIzRENGNzkwRjAwNjBBCi06MTBGQTcwMDA5RjEzOTFFNTE1MEQ0QTI2QUUzRjczRjY1REEzNzVDMDQxCi06MTBGQTgwMDBBNUM2N0ZEMzNBQTBFMzc5MEYzRUVFNDJFNDAzODA2NzM4Ci06MTBGQTkwMDBBQzNBQTBDRTA3RjI3Nzc5OUI5MTU2RUEyQUIzRkYyMkJGCi06MTBGQUEwMDAxQkUzRjY0RDA2RTZCNTUzN0IzM0I2RUZDNzc4RkI3RTE2Ci06MTBGQUIwMDBEQjU2MzY2M0RDQUExRkQzN0JDNDdBNTRCOUNFRkRBOENCCi06MTBGQUMwMDA2ODk0RTM3RTREMkE1QjhERjlBREJDQkU4QTk5OTc2MTNGCi06MTBGQUQwMDA1QzNBN0E4NDhFRDkwM0YwMTlFMzBDNjdGNjAwN0NDNjkxCi06MTBGQUUwMDBFNkQ5MzQ3OUI5NEU5RTJGQzY4RDc3MjU2QkJFRUYzMjlECi06MTBGQUYwMDBCRDlCQTY3RDkyQkI5RkE2M0U2NUNFMTA0RDNFQUQ2QUQ2Ci06MTBGQjAwMDA5NEE2N0Q1N0IwQ0Y4MUY5MENDRkREOUFGNkRENkIyNjM4Ci06MTBGQjEwMDA2QkYyM0Q2QjFGRDBCNDNGQ0RBQTlFQ0RDNjc5N0E5Q0M3Ci06MTBGQjIwMDBDRDNEMDBDRTU5MDJDRURFRUI4QjM1REZGNUQ3RDUwREJFCi06MTBGQjMwMDBGM0ExMjBGOTE0MUZFRUZGQ0QxNjZDMzI0QkM0NzNGQUZCCi06MTBGQjQwMDA3QUU3NjlGQTNERkY2QTVFOTMwMkY4OUQ1RDZCMzgxOUFBCi06MTBGQjUwMDAxODlGMjE3QzAwN0U0QkVBMTVGNjFDOEM1QkJBNUU1QjFECi06MTBGQjYwMDAzRkE3RTFFOTk1Mjk5MENFRjU2QUNCRTdFMUJFOUM4MkZCCi06MTBGQjcwMDBGQ0FEMkRERkFENzMzRDgyRUI5REVENzEyMkNFMjhFMjExCi06MTBGQjgwMDAzREFDMDM3RjQ0RDJCODk3MzdGMDc4OTdFQUU5MURDNEJCCi06MTBGQjkwMDAxRjVBM0FCMTZGQzkyRjc2QzEyRkE2NDQyREJGODREOTAxCi06MTBGQkEwMDBCNUZDNTI3QTcwRTczMDFGRUI4OEZGODgzRTQxN0NFNDU5Ci06MTBGQkIwMDA4MTdGMDE3ODk3Rjg5NUY4QjczOEI0N0NGNTVERTE5REMxCi06MTBGQkMwMDAzMUFGOTFEQjBENkRGOTNGRTJCNEYxQjU3RTkxRUVFMzFCCi06MTBGQkQwMDBBOEI3QUVENDJGNTI3MUJGOERFNUYxN0RGQjJCRjU1NzQxCi06MTBGQkUwMDAwNzFEQjI2QkY2RDczQURCNEYzQTE3MTcxODU3MTdGQkJBCi06MTBGQkYwMDA0OTk3NzAzRkYxMzY3NjEzRkI4OUZCRkU4NUY4MDBEOUYzCi06MTBGQzAwMDA3NzFCODAxRkQ4MDg4N0I5N0RGRjMwQ0NCRjdGMTRBQzJECi06MTBGQzEwMDAzNzY1MEE3NkUzQ0IzOEIyMjdGRTdERDc2QUY4N0E1ODgzCi06MTBGQzIwMDBGNDVGNUMwOEFGREM4NzkzRTc3MkU0RjkyMTE2QzlFNzVCCi06MTBGQzMwMDAyOUZCMDEzQ0E4RjE0M0YxRkM5RjJEMDJEN0FEREJGNzc2Ci06MTBGQzQwMDAyRkE0RjU5NjNDM0ZDNEM0QjlCRjEwN0UzRkU5RUYzQUZDCi06MTBGQzUwMDBGQzM1ODlGQzgxRjA3ODZFQ0YyMzMxNkRGNzA3QzRGOTRDCi06MTBGQzYwMDAyRTY5Q0YzQkVCNDdFRUI3NzU5NjJBN0I1NURBM0Y2QzkyCi06MTBGQzcwMDA1NUMyMUQ5QjQyRDg5MzVFRjFERjcyRkQ3NUE2NDMxQ0YxCi06MTBGQzgwMDBCQTU3N0NFMEZBRUJEMTJCMDdEMEFFMDBERUZCNjJCOUFECi06MTBGQzkwMDBDNTAyRjY1QUYxREJFQjVGNDQ0NDExQkZCNjFFNTRCREZBCi06MTBGQ0EwMDBCREExRTBCMkQ5MUU2RDAzM0MzNjg0NjlFRDg4NENBQjMyCi06MTBGQ0IwMDBDQ0M5MDNGNEIxNThBRjNERTcyN0Y3MTE4M0RCNjc2Mzg1Ci06MTBGQ0MwMDBGQjgwRkQyN0Y4NEVFMzhGQUMxQ0MyRkRCNUVDNzg2RUNGCi06MTBGQ0QwMDBERkJGODhFNEZFQzExNDkxQUYwQzVBMTc1NUQ2NzBCRjMwCi06MTBGQ0UwMDA2QzIzRjhFOTBEMDFGRDRDODlCNzUwRkJBNTExMzk1MzgwCi06MTBGQ0YwMDBFMjI5OEVDMEQ3QkIyQjMzMTRGMjI3NTYyQTBBRjkyMUVBCi06MTBGRDAwMDA2N0EyNDc1M0ZEQjVCODlDQzlDNDNGNjI5QzI5RThCQkI0Ci06MTBGRDEwMDBDMUZGREE2RTFDMUVCQjM4OEYyM0ZCMzdDN0YzRjZFNjM0Ci06MTBGRDIwMDBGOEQxOTQ0RTg5Qjc4QUI4QjNCNTFGRjI0NzY1ODQ5MzZBCi06MTBGRDMwMDBGQTM1QUFBMUY3QTVBNkM3RjM3OUFEQjUzMEU5Mjc2QUM4Ci06MTBGRDQwMDBFMkZFRTM4NERFQzQzOEJGODlGQkEzRjk2MzEzRkM3MUQwCi06MTBGRDUwMDA3RUE2NjY3RjY4OEMxM0YxN0Q4NTNFNzdBMjlFQkE1MzlFCi06MTBGRDYwMDBEMEJEQjM3OEJGQjM4Rjc1M0Y2RTI3NzU4Q0Y3RkIxMjhDCi06MTBGRDcwMDA0M0M2RkIxREUzMjhERTBGNUZFQTcxNUVDMTcxN0ZBNEZECi06MTBGRDgwMDA0Mzg0Q0QyRjNGOEZDNEI3REI4MzU0RDQ0RkY1NDY3N0UwCi06MTBGRDkwMDAzNUFFQkI1QTc3ODNGRjBFQzU3REJDMkRCNDFGMzBGMDQ2Ci06MTBGREEwMDA1MDc3MDdBRUFGNTY2NkIwQkQxNkU0Qjc2NThDQTE3RjNECi06MTBGREIwMDA1RkRGQTI1QjFFMDZGNTZCM0NDQzhBRjUyMzM3RjA3NTNFCi06MTBGREMwMDA1QkU5N0FCQjAzQTc2OTgwNzVCMDY1ODg1RjFGQUM4QjYwCi06MTBGREQwMDA4RjIxQkNEN0I3NEM2RUM0RkQ4MTM1RjczMjFCOUFBMTc5Ci06MTBGREUwMDA1QTU2OUIxQjg1RkVEMDA2MTY3MkRERjg5NDkwQjMwOTE3Ci06MTBGREYwMDAzOTdCNTVENDE3RjFFOERGODdBMEQzNTM4MjRFQTAwRjhCCi06MTBGRTAwMDBENjIyOUQ4N0I3QkFBRkYwRkQzOEFFNEY0ODI1RTJGQTRCCi06MTBGRTEwMDA3NEJGQ0UxQjZBM0QzRjM3M0E3NzFERjJDMTQwNkZFODkxCi06MTBGRTIwMDBGNUMzNUEwQkU3Qjc3NTExQUVFN0E4REQyRTdFRUVCNTI4Ci06MTBGRTMwMDA1NEVBREY1OTNBQTYwN0JBNEYxMTc0OURCMjgxOUZERjg5Ci06MTBGRTQwMDA2MEQ3QUU1RjU3QTU5RkM4QTg3Rjg2N0FBNUY0NUU4QjYyCi06MTBGRTUwMDAxN0UzNDNBNTBEMTkxRTgyQ0JBNTM4N0FBMkJFNjg3ODk4Ci06MTBGRTYwMDBERjg1RjlEMkFDMkMyQkM2MjM5QzdGNjVDQUE5M0VFNDYyCi06MTBGRTcwMDA2MjMyQUVCRkY0RUM5NEQ0Mjc2NEM3RTM2OERGNjlCMkEyCi06MTBGRTgwMDBFMEI3QjUxNjNCM0Y0NzBEMjg4RTAwRkM5NzZFNThCNjdECi06MTBGRTkwMDAxN0NGRUY3Q0Y0NkI0NkZCNEI0N0Q0RDY2MUQ4RDk1NENGCi06MTBGRUEwMDA0MENFOTIyMTk4RUE1OTIxQzUyQkY4RkVENUJEQTIxRjVDCi06MTBGRUIwMDBDRkJGNjE1Q0IzN0ZEQ0E5MEQwNzY5M0U0NzBDQ0M2MzAzCi06MTBGRUMwMDAwNjNFQkFCNEU3M0UzQkZBREIyQkUzQ0QxNEM3OTNGQjA3Ci06MTBGRUQwMDBCMjQ3NTVGN0UzNjQ4NEY0QUQxNTA4REFGRDBEMTE1NjA5Ci06MTBGRUUwMDA4QzdGRkM0M0YwNUQ0NjgyN0IxRkQyQzdCRDdDN0MwNUM2Ci06MTBGRUYwMDBEQUMxOTY2NUE2NzRDNEEzN0I3OTkyMUEwNzcwQkFENzQzCi06MTBGRjAwMDAyQTM0RUZEMUNCOTM4Qzc4N0U2MUU2OEFDMUUzNTA0RkRGCi06MTBGRjEwMDAwRDYxQ0U5NTE4REY3OTI4OTY4NTk0RDNGM0YxN0M5REY5Ci06MTBGRjIwMDA1ODVDNjU2MEM2Njg5QTg0MTFFMzJGMTc2QjE0OEFCRjBBCi06MTBGRjMwMDBFMEZFNUIwMUQwNjc4RTk4NUZGOUFBRjdBMzg4M0ZFQ0RCCi06MTBGRjQwMDBGMDZGMTgxRUNCRTUzRjczQUE0QTQ5MUVDMUNFNkJFNDgxCi06MTBGRjUwMDBBNzhDRDUxOTkzQTA5Rjc5NkI2MDM5REI4REVDRkRGMUVGCi06MTBGRjYwMDAwRUZFNDNDMDc5RUZGMjNBNkQ3RDI1NUJGMzM5OUQ3RjNDCi06MTBGRjcwMDA2MUUwRUY1QkQwMkU2OEVCM0Y5NUYyRTg2MDBFQTRBQjNBCi06MTBGRjgwMDA3QkIxQzU4Q0U3ODQ0NjBCQkMxNEFENTFBQ0E4NUY2NjUxCi06MTBGRjkwMDBBRTY4OENCRjBGRjIzMzlCNTQwN0YyQjRDNDBCRUJFODhFCi06MTBGRkEwMDBFRkQzMzk4RkNCNEQzRDY5M0Q3MEQ5NkVFRjgyRUREQ0RCCi06MTBGRkIwMDA1MTVDRkYyQjdBRjc3MDJDN0YyOEQ2M0QxQ0Q3RjFBRDEyCi06MTBGRkMwMDA5RjU4MTg5RTlCMzlENjA2RkUxOEM2MUVDRDZDMTBDNUNDCi06MTBGRkQwMDAxRkFDNkNEMEE0MDAzQjVBNjRCMDI2NjBCQ0RGQzMxNkQzCi06MTBGRkUwMDAyNjMyQkVCNzY1MEU5Qzc3QTU3OTBERjk4MTk1RTgwNzk1Ci06MTBGRkYwMDBGMkY5OTExRkY4NTAyQzY3RDVENkQ3MTUzQTlGQzNFQTZFCi06MDIwMDAwMDIxMDAwRUMKLToxMDAwMDAwMDBERTQwNzlBODUxRjc4RDY1RTlCMDBBRTE3NzMzRDZFOTAKLToxMDAwMTAwMDIwMzkyRERFMTY0MzdFNjhGMThBNUMyM0YyNkZGMUFFNDMKLToxMDAwMjAwMDE4RDI0M0UwMDc3RUQ4NjM5ODlGOEVDNzU2NjQxRTQ4NTcKLToxMDAwMzAwMDg0N0U4QkVCMzIxQ0FBOTY3RTVBRkZCOEU2OThBNDVCQUUKLToxMDAwNDAwMDQ3QkY0RjRCQjc5M0ExRTgwNkY0RDI5NEE3MjQwOEZGMEIKLToxMDAwNTAwMDRFRDA4QjNEMTY0QjdFNDdFMTgyQjc3QTlBMDE5RUNCRkMKLToxMDAwNjAwMDU1NjE3NEVFQTgzM0ZGODNBNUM2RDFCRTlFNUMxN0U2MkEKLToxMDAwNzAwMDI1QjdBRkRGNjhERkZDQ0E5QUExNDRCNzYwN0FFNUZEMTcKLToxMDAwODAwMDY3RTY3MEI0MjdFQ0FGMTY4NjdBRUNBMUVFRUNFMUM5MTYKLToxMDAwOTAwMDUwRkVCMEMyRTVFQkExRUFGMTc5MjhBNzU5MDk1QzZGREYKLToxMDAwQTAwMEJFQjcxNDY2Njg2NEVDRkRBNTY2RTZFQ0M1RDgwNzRCRTAKLToxMDAwQjAwMEFEOTRGRjY4NjkyMkU1M0Y1RTZBQTdGNDkzQTU3RDI4QTkKLToxMDAwQzAwMDNEMjlFMjY4NTJDRTgwMDE4ODVGNDcyNTcwRjkxQTk1NzQKLToxMDAwRDAwMDIwRTJERTZDNTEyMkFBOENCQ0ZGN0MzMDU0NjdDNUExQTMKLToxMDAwRTAwMEQyMjc4QzRENjNFQzFFMjcyMDIzQzBERjk5N0U2RjA0M0UKLToxMDAwRjAwMDEyQjkzRERGNjJCMDhFNEI0NEZGNzE5NTQyRkFCRUQ4MTMKLToxMDAxMDAwMDc1QkJBNjNERjgyNTQ2M0NGRkNERkE2NEZBQ0JFOTlDQzkKLToxMDAxMTAwMDk4REQzODE5RjhGMEZFRkM1ODRERkI2OTM1Mjk5QUZDM0EKLToxMDAxMjAwMEU0MDQzQkNEN0I1MjVFNzc0REY5MDM4NUZEMzVGOUEyQTIKLToxMDAxMzAwMDM2NDAwMjlFMkYzMERCRjhGRUFBRDhCNzY3Q0NDNkQ3NzAKLToxMDAxNDAwMEVCNTZERUY2NkFENUYwMkVERjA3NzhBRjFFMzI1MDdEMTMKLToxMDAxNTAwMDMwM0QyNDVENjdBREQ3MzEzNzgwMzY3MzNEQ0MwREZBMjUKLToxMDAxNjAwMDNENTkzQjkzRTRFQUZDMTEwQkQ5RkQ5NURCMzJERjFERDEKLToxMDAxNzAwMDAxRjk2M0RCMENCNEJGN0U2QzQ1RUM1QURDM0YzRUI2NDQKLToxMDAxODAwMDJEM0U4QTQxRUE1RUE5MzIxRkZBQzE3QUFCOTEwNUU4OTkKLToxMDAxOTAwMEI3REMxNUNCRThGQzU2OTFEN0U0NDBGOTJGREFFRkY5M0MKLToxMDAxQTAwMDk1Q0NEQkQxMUY0NDIwNTEzRTNFNTRCRDNFODVFOEU3NEYKLToxMDAxQjAwMDI0RkNCRTE0RTZERDAyRjkzM0EwQUZGMUM4RjhDQzE2N0EKLToxMDAxQzAwMDBFRDcxOTg1QURDMEZDRDlCMEJGRjVGQTNFQzA3MUIxRUMKLToxMDAxRDAwMEEwQjY0NDg3RUIwMUY1NTAzQ0U5Q0IxRDJBNDNCRTJENjgKLToxMDAxRTAwMDVDNjBBMEZEQkJCOTFGQTkxQjMxQ0Y5NDIxMjk5Q0RFMDcKLToxMDAxRjAwMDJBOUQ0NzY0MkY5OUE4N0ZENjBBMUMwMkVEMTZGREQ2Q0EKLToxMDAyMDAwMEI0ODlENjc3NENFNDc3MEZGNEFFMTZGQzg5N0M3NDI2NUIKLToxMDAyMTAwMDg2Mzk2MzA4NTg4NUUwM0RGNzdFRkM0NkFDRjdFM0QzQUEKLToxMDAyMjAwMDNCMDhFN0ZEQTVERUI1MzIwMUY4RUI1Qzg5NzcxMEU5MDQKLToxMDAyMzAwMEI1QzdFMjQ5QUU4MkYxN0VEMkM4RjU5NjA3RTU0MEYxMzYKLToxMDAyNDAwMEVCNEJCRjlDMkQyNzNFOUQ2OTcwMjQzODQ4NUY2NTI1ODgKLToxMDAyNTAwMEExQkUzQUI5QzY0MEU3OTg5OURFMTkzNTg5RDYzRjNCMjkKLToxMDAyNjAwMDg4OEZFNTM4MjdGNUY2NzEwOERGQzk5QTBDODZGQjk2NkEKLToxMDAyNzAwMEM1NkI1NEYyMDc5MEZGNzg3QjJGRTdGRkE3NTUzNzFCMUMKLToxMDAyODAwMDBFRkRENjI4NkVENkE1MjNERjNDQjI2MDM4OUQ2MzlBNUEKLToxMDAyOTAwMDIxRDY0MUMxN0FFMDMzOTA1NTc3MkY3RjdFREUxRTdFRDYKLToxMDAyQTAwMENFODY2NUI1RThFRjFEMTgzODhGMTU3Q0JDNDRERUJGREYKLToxMDAyQjAwMDNDMDc1MEQ2RUQ0RjQ3RDFFNUJFRENENDNEMUFFREYwRkEKLToxMDAyQzAwMEQ5MEY1NUUyQjNCM0RENkE4NzI1MDIzRDJGRThGNjBFNUMKLToxMDAyRDAwMEZCM0VFNENGMTc3ODRFRTkyMUZGNTRCODdCNjcwMkFFQUUKLToxMDAyRTAwMDU3NzQ2QkQyOTU2RTc4M0VGNkM0REFEQkUxQkI3M0FGMjAKLToxMDAyRjAwMDE4MUMyNEU2NEJFMjQ5N0ZDQzdCNjk2RUQ3QzBGMzhFOTUKLToxMDAzMDAwMDFERjU5NzJGOTlFRkJGMzg5MzE0QzBFNzdDN0JERDM4M0MKLToxMDAzMTAwMEVCMDA1Qzc3QkI4NDFERTJGOEIxRTNFNjJBRTBDNUJBRTYKLToxMDAzMjAwMDRFQzE0M0MzRUNDNDUwQ0I2QTNDNzczRDEzQzQyNDMwNjgKLToxMDAzMzAwMDRFNzg0MkVDOEYxRjEwN0E0NUZBMDkxMTVENzg3RUE2M0YKLToxMDAzNDAwMDhFRjMzNzdCNTUyMUJGMEQ3RTM0RkFCRjUyOUM0Rjk0RkMKLToxMDAzNTAwMDdBNUZFQUVCMzI1NjRCRkJDMTQ3MTJGODM5QzZCOThBQ0QKLToxMDAzNjAwMDk3REE1NUUwQ0UyRUE4QTgxMjJCMEY0Mjk3NkQzNTc5NUIKLToxMDAzNzAwMEJEMTlENDk3MzVEMDBGNDhFRTYyRTdGQjQzQzY1NzlFQjAKLToxMDAzODAwMDQ1QjYyRDY1Q0Q3QzdFNDFFRENFMTlCQzI1Q0QxOTFEMjAKLToxMDAzOTAwMEVENEQ4OTc1RTMwQTFCRjU2RjcwNjBGQ0E0NTRDODY5QzQKLToxMDAzQTAwMDc5QURFMkY1RjE3OTkwREQ5NEYxOEFEOUMyNkUwNkRCODAKLToxMDAzQjAwMEE3MEVGNjI4QzgwRUNEMEVCMkIzQUM1NjZCNTcwMURFQjEKLToxMDAzQzAwMDQ4MUM0N0MyMUIwQ0E3MkJDMjQyNzg5ODA3NzBBMUJEREUKLToxMDAzRDAwMDJENzE3QjBGNEMyNEI4MTUwNzUwQjIwMzNDQTVDQzM1Q0EKLToxMDAzRTAwMDI2MDZFNzAxRjUzRTdCNDdGODgyRTdENTAxNUUzMUNGNkYKLToxMDAzRjAwMDYwQjg0QjFDOUZGQjcwRkYxOENGODc1MUJDMjk2ODFFNEIKLToxMDA0MDAwMDkyMUVDMUZFOUFBNDRCODk4N0UzQjdBNDQxMjE3QTdFNEMKLToxMDA0MTAwMERBRUUwNzMyOEExQjQ5N0U4MTA1NTA5REY2N0JENzQ0NzAKLToxMDA0MjAwMEQ0NjdBNUVCNDBGRjY2RjhGOTQ3RjJEMzNDNTYxNzg1MzEKLToxMDA0MzAwMEZDNTJDMTdDMkI5MzUwQkU3Qzc1RDM0NkEyREZCRUUxM0IKLToxMDA0NDAwMDdEMjNDQTQ5QTFDREQ3NTMxNzgzMjg1Q0ZCRDNCQ0I0MDUKLToxMDA0NTAwMDgwRjU0NDEwOUU2RjQ0RDc2RjhBMzc5Qzk1NUVDNkJENjkKLToxMDA0NjAwMDAwNEZCMzM3QUJDRUIwNDE5QTc2RTIxQzkxODdFNDYwN0YKLToxMDA0NzAwMDhFQzc2M0M0RjhDNjFDQjFFRUJGMTE5Qzk1N0E3RTZFMjAKLToxMDA0ODAwMEZDODZGMDc2RTIyNzdENUJCOEYzQkE2OEZENjJCRjlGMTkKLToxMDA0OTAwMEQ1MzMzQTk0OUU2QUY3QUY4MkVDRkFERjBDM0M3RTIxQUEKLToxMDA0QTAwMEY1RjE1NUJEOTNFMjI1NTAyRUZDQUUyQTJCOEY5QjA3MEMKLToxMDA0QjAwMEU5RjFCNDJDRDJFMzI1QzJBRUNCNzE0RUFEREY0OUYxRTgKLToxMDA0QzAwMEI3RDk2OEY3MDNDQTNGNURCNzkzRTJGRUM2NTc2NjQ3RTAKLToxMDA0RDAwMEExRkY3RDZBRkRDQ0I1NzhCRUVCRDRCNjk5NjRFNzRCM0QKLToxMDA0RTAwMDlGOTM3NkRFNkQwQ0Y0MUY3MkQ3MTdCREY4NjNFNERGQkYKLToxMDA0RjAwMEFENjExNDlGMkZEOUVGMTZFQjFFRDBBQkQwQ0VCRTlFQjAKLToxMDA1MDAwMEVCNTFCNjhFRUJENTUyQjQ4NzAzQzgxRUY2QzY3NjhCNzgKLToxMDA1MTAwMDRCRENCRDUxMEUwMkNBQzk0RTJFOUVFOUZFREQxRUU4MUYKLToxMDA1MjAwMDc3RjFDQjExMEUwRkExQzJFQUQzOTFERjZFRjVBMTNEOTkKLToxMDA1MzAwMDJDNUZGOEYxNTEzQ0U3MEVGNkZGQTMxRjQ4RkIwRkQ5RTMKLToxMDA1NDAwMDhEN0FGNzkyMkUyODZGQzJFRTk3QUIxQkQzQURFODI3QkEKLToxMDA1NTAwMDA4M0JGMTVGQzBCRjM5MzRGRTg3MTBGRThCMTFGRjAxRUQKLToxMDA1NjAwMEZCMjBDNzZCMzg5RTY3MDZFMUZGQzQxQTRFOTc5NURCRTgKLToxMDA1NzAwMEJBNDdFMUZBRjE3ODRENzdGMkIzOEU2RkVCNDlGODlGMDUKLToxMDA1ODAwMEI1MUFGMENGRTM1RjVBM0ZBQjA2RjA4RkVCMDhDNDNGREMKLToxMDA1OTAwMEMwNUJCQ0RGMkVGMEVGRTBGOEFGRTE3ODY3NkI3ODNBMzQKLToxMDA1QTAwMEFCMDM5RTNENzQ4RTYxRjFBRjREMEVGNDFCQ0U4NEY5MEEKLToxMDA1QjAwMEM4OUYzQUIzNUQ2NUQ1MDE3RTk4RjQ4M0JFNjBCNUJGMzAKLToxMDA1QzAwMDQyN0Y0REUyN0Y2RUFGRTY0MUE4N0YwQTlGRkU1MzE0NDMKLToxMDA1RDAwMEQyNjFFRTc2MUVBNEVGODA3RkU2RUM4MkZFQjg3RkZDNEYKLToxMDA1RTAwMDc2QkZFOTk1MkVGMTAxN0VEMzRERDJBOTgyQjkxOEQ5RjMKLToxMDA1RjAwMEM1ODYzRjFEQzE3NTgzRTI4NDRGNkQ3ODhGNDZEQ0Q3NzkKLToxMDA2MDAwMEE4RDdERUQ3QzAzMzE5ODUzNjhDMkYzOENDNjY4NDI3MUYKLToxMDA2MTAwMDM1RjgxRThBOUI2MTFDRjk5RjNEM0Y5RkIxOTBFNEJDNTkKLToxMDA2MjAwMDU1NzNCRTZEMjJGMzE5QkFBMEZGNThBN0QwRkRDNkYyQ0MKLToxMDA2MzAwMDQ1Mzk1MTM5MENFM0Q0NTUwNEM3RTkyRThBRTZGQzc4RDQKLToxMDA2NDAwMEI5QUEyM0ZGQjFDQ0M4RkQ0OEI5M0ZGOUFFRjAwRkRFMUYKLToxMDA2NTAwMEVEQzJENzI1RUY3NUIxRDI3Nzk3QzIxOEQ5ODE0QjE2NjUKLToxMDA2NjAwMEEzMTdFRjIzQzA3QTJBMTFDN0Y3RUMzMTExREQ4RTIyRDAKLToxMDA2NzAwMDRDODA3RkQ1MjhFMjM2NjAwMjkxNEYxRjY0OUM0RjFGNEIKLToxMDA2ODAwMDhDNkNBMjM4MzlBQzU0NUU0MEJCRjhEMDEyOTM4M0ZDMUEKLToxMDA2OTAwMERBQjg2ODhBRDczRTIwRjRERDgzOTEyQjVENjgxRjFFOEYKLToxMDA2QTAwMDhBMzQzQTMxODU3RTNENzg4OENFMzAxQTg2ODdGMTBEQkUKLToxMDA2QjAwMEM5NDZCQUFGNTM2ODZFNzkwNTk3QkUwRjI3OUU3OEQ0QTYKLToxMDA2QzAwMDBDQTBERTA2RUUzN0M2NTVFMEQ3NURENzYzM0JEMkM1M0EKLToxMDA2RDAwMDRGMUY2RDlDQTczMjNDNzREQ0EzNTVFMDRCNzEzQTI5NDcKLToxMDA2RTAwMDlFNjM4MkJFQzMwMThFMkI2ODJGQjFEQzZFRTVGMTlENDcKLToxMDA2RjAwMDBENDAyNzhCOUZCRUMxRTVDQ0MzRjcwM0NBRjA1Q0UzNzYKLToxMDA3MDAwMDI4QzYxOTY0MDRFMTVGOTMyRjMzRjJGQUYwQzRBRjI2RDAKLToxMDA3MTAwMEFDQ0I2NkVDQ0ZDQzNFMTBFOTU2ODYzQTA0RDdGNzQ1MTEKLToxMDA3MjAwMEQxNUU4Qzk3REY4M0YxMjUxQkE2N0FFMjk3Qzk3QUU2MjIKLToxMDA3MzAwMEQxRjFCNDI2MTJDRkNDODk3OEQzNDQ4MUNGQTkyMzk4QTQKLToxMDA3NDAwMDJGMUFGMEVFM0JBODhENzdEREU3RDNGOTdBMDM3RUVGMjEKLToxMDA3NTAwMEQxRkIxQTkxM0Y3NTY2QkJDMTBBRTNCOEYyOTQyMUI4ODgKLToxMDA3NjAwMDJFMjk1QjdFNzNGMEE2MjU5QUYzRDdBNTQyNUVDN0NGRUMKLToxMDA3NzAwMDg1QjVGRTgwQzcyMTFFMDQ2MTQ1QkNDREQwQjNGREVBMUUKLToxMDA3ODAwMDEwQ0UwNzg4OTc0QTlCREQ0M0VEMTYyODE0MEY5NTcxMEMKLToxMDA3OTAwMDM2NDlGRkMxRDA3RDIwMUQxRjE0RjA0MTNGMzU1MUY4NkYKLToxMDA3QTAwMEJEMzEzNEJERkEyNkNBRjU3MzFEQURBQkU3MEJCOTlCNUQKLToxMDA3QjAwMDJGRTU2RDlCNTZERUM2MjdEQUE5QkQ4MjdFMzBFMEVEQkYKLToxMDA3QzAwMDQxOTE3NjI2MTdFMzQ0RkZFMzEyQjk1QzY0RERFMjc4RDkKLToxMDA3RDAwMDJDQjIzNTlEQ0VCNzA4NzkyOTM3RjFGRUU1RjhGNzg4QjgKLToxMDA3RTAwMDc0NENBMjhERkE5NUYwMDBCRjFFQzc3RTc0QTAwMTkwRDQKLToxMDA3RjAwMDVGNEZENjU2OTM3RjM0ODcwNUM0QjUzM0ZDRUQyNDVGMzUKLToxMDA4MDAwMDc3Q0NCN0VCMTFERDc1NEM4REFEQjMxMEY1Q0FGN0MyREYKLToxMDA4MTAwMDFDQTg0NzFGMzRENkY1QUM4QUVDRDg0RUVFREIxNEIyRDgKLToxMDA4MjAwMDY2MDMyMzNEMjlFMjYxQzJGRThDNTUyM0U5N0M0MEExODkKLToxMDA4MzAwMEMyRUYwRjVFQ0FCMTc4NzREMTE4QTczMTEwNjkwQjYzOEIKLToxMDA4NDAwMDE0M0EzRkYxMzdCMTdGRjI1MEY0RTI4OTI4RDc4NTUxNEQKLToxMDA4NTAwMDQ2M0RBNjMzNTgyQkY1RkI3NzZCQjdFOEZCMThERTMzMjQKLToxMDA4NjAwMDU2MzE3NjBFMDM4RkM4NzdDMkI4RDVBODc3Nzg3RThEQkIKLToxMDA4NzAwMDMzOUJBMjRBMjI3RkM3MjEyN0UwRTFERTZCNDA3RkNBN0IKLToxMDA4ODAwMDdGMkZERjA5RkQ1RjdBNEJENEIzM0JFOUZCNEI4RjBCMjYKLToxMDA4OTAwMDNFRjZFNEYyRkNDRjY1N0QxRUNGQUY5MkY1RjkzQ0ZGNEEKLToxMDA4QTAwMEE0RUM1RkU0OUYwRUFBNUYxNjU0RkY0QjlFNUZCQzNFMTQKLToxMDA4QjAwMDNGREY4MzdFRUI2OENFRDI4NUEzMTREMjUzN0I4NEJFMDgKLToxMDA4QzAwMDI4NUNFRTIzRkMxNkVBRjZGMjc0MzRGM0U5QjI2RURDMkYKLToxMDA4RDAwMDZFNTNBMjZCMEZEQTFGRDU3MkQyODJGNkY3RDU2NDI3NUEKLToxMDA4RTAwMEU1OUY0RjcwMkY0QkM0NzVENDI0QzU2MzQ0N0RGQkExOTUKLToxMDA4RjAwMDk3RUNDMUM0NEVDRTFGRURFOUMyRTNGODlCOTJBMEJGQjYKLToxMDA5MDAwMEExN0VGQjA1RkRBQzRFOENCRkY1N0UxQzQ5MUNBRTgwNjQKLToxMDA5MTAwMDdFOUVGOTI2RjBGQ0E3MjMzQzFCQkU0OTNGQjM5MkI1NEYKLToxMDA5MjAwMEZENDg3RjQ4NDk3NUJFODZGMzYzMjdFMzM0RTc0NUU2MTMKLToxMDA5MzAwMEZGQzQxMThERjEyNzg2RTc0NTAwRjVGMzk3RDdBNTY3MkEKLToxMDA5NDAwMDQyRkZGMzVGN0QzREJEMDRGRDI1NjFFNzJCREE3NENDRUEKLToxMDA5NTAwMDg5RjczNERCMThBNUU3MUIzRjMxRTI3REIzOEE1RDhENTMKLToxMDA5NjAwMEM2NzFEMEFFMTJEMkRDMDBCOENBMDQ5QzYwRTdGNDkzMjIKLToxMDA5NzAwMDAzRUM3MzgzRDAxQjhDM0RDREY3Mzc1RjNEQUI0NzdBREIKLToxMDA5ODAwMENFRDdENTlEN0EwRUVERjYyODI1RTQzRUNENjZGMURENzUKLToxMDA5OTAwMEQxNEVDRTE3RUYxNTdBRTg2QTlBQjMxMUU3Rjk2QjhDNEUKLToxMDA5QTAwMDIxNDAzRUI3QkE5M0ZCNjA0OTFDNUY4NUMyRUVDRDFDNjcKLToxMDA5QjAwMDY2MzFEQjAxQ0Y0MzNGRTRGQjU0MjUxQjMyODY2MDNDQUMKLToxMDA5QzAwMEY4Q0Q4NEQxRUYyNDdFNkQzQ0I1OTVDNzUzMUI3ODNDQTAKLToxMDA5RDAwMEI1RDBENkJDMDg5NDM3MzMyNjk1QUQzMURGQzFEODg0NjUKLToxMDA5RTAwMDVGNDgzOTAzOTE4NTZGRjM0QzMyNUY5RDNGMjY5QkM3NkIKLToxMDA5RjAwMEJCMzA3Rjc2RkQ2MzZCNTA2RTlBQzJCOTFGRkJEMEYwOUYKLToxMDBBMDAwMDgxRTFBODE3NUEzMjIyNzQ1NjkwRTczN0UzOEI4QzQ5NUMKLToxMDBBMTAwMDQzQjFGQzhFNzE1ODlFNjNCMkY0MkEyMkZDMzJFMjhCMDEKLToxMDBBMjAwMDM3RTM1REM3OTA1RkIwM0RDNjQxREM0NjVGRkM3RDMwN0IKLToxMDBBMzAwMDBGRjdEQjJBOURBNzc1MEY4QTcwODdEQTc3RkE4N0MwRDAKLToxMDBBNDAwMEFCMzFDOTRBNjkxMzkwMTlGRDE3MDk4NzFDMUZGQ0Y5QkUKLToxMDBBNTAwMDQ1Q0REMERGQzlFNTQ5ODM1N0RCNzE5RjI1Qzc5MDM0NjkKLToxMDBBNjAwMEQ0M0Y3RTQ2ODJGQjcyRTBGODI3NzVBQzE3MkUyOTZFQzQKLToxMDBBNzAwMDE2OEU0QjAyMEUwM0VFNUQwM0JFNUREOTJBNzMwNkFDRTMKLToxMDBBODAwMEYzMjY4Rjg5RDBFNEVGQ0Q4RjY1Q0VDMDM4RURCRDI5MzgKLToxMDBBOTAwMDlBRkNGNEMyRUU5QUY2MEZDQ0VBQUZBOTJGMzAzNTY3NzQKLToxMDBBQTAwMDU1MDVGOEIxOURGQjQ5MUU4MkE3RDI2MjA5NDc3RkVFMkEKLToxMDBBQjAwMEVGMEQ1RkZDRTU0MUY0RkYzNkFCMEVGNDU1RTdFRUQ5RTAKLToxMDBBQzAwMEYyOTdEQkExRDU2NTNDNEU0NUYxNDczQkM1Q0JDRUM5N0UKLToxMDBBRDAwMEYzMjg3QUE3M0U3MDVGRTgyMjZCQTZGMzNFOURFRDAzRjQKLToxMDBBRTAwMEM5NzVFRTdDRUI3RTNBNzdGNjVERUYwM0Y1NEExMkVCQzMKLToxMDBBRjAwMEREMjE2QzA4REFDM0NCNTUxRjUxQkNBRTIyOTJDRkVGN0IKLToxMDBCMDAwMEUyRUJDNzhDQjgwRjhBRkI4QUQ3ODFERkVGQzIwRkQxMjcKLToxMDBCMTAwMDNGNkNGMzUwM0MzQkI3RkUxOEVEOUIxRDQ4RTQ3QUJBOUUKLToxMDBCMjAwMDIyNzU4MTFFRUYxRDU1NDI4QTc2NjgxQ0U4QUI2OEUwOEQKLToxMDBCMzAwMDk3RTY0NjM2NzAxN0VFQkI2NjU4QjgxRkRFMzY5OUIxOTkKLToxMDBCNDAwMDU4RTQyQjFFREY2OTRBODhBMTdCRDdGMzZCRjJBOEJDNUYKLToxMDBCNTAwMEEyMkQ5Q0ZBN0Y0RjZEMUU0N0U3MDk1RjUzNjhGRkExRTYKLToxMDBCNjAwMDIwRTVBMUU1Nzg3RUI4MjlEQzMzRTAxMTE4QjdFMDc3RkQKLToxMDBCNzAwMDc3RTUyMURFMkE3NkYxRjNCNTA1RUE5RkIzMTY0MDVBRjAKLToxMDBCODAwMDU2OUI0N0RGMTdBOEFDNDkwMTdGNjE0MjJFQjdCRjA1Q0UKLToxMDBCOTAwMDY4RjMyMUFGMEVCM0FDNDZCQkFCMUE3REJEOUU0NzNEOUIKLToxMDBCQTAwMDYzQjQ5MDlFODk2RTdCODBDNkFGNkMzM0QzRjdGNzI0MTUKLToxMDBCQjAwMDcxN0ZEN0QwQzJFMTFBREJFNkEyNzJDOTBGNTM5M0JBOTQKLToxMDBCQzAwMDY5RDYwRjg2RjhDRDdBN0M5N0MzRDBDMkE4RkRERDZEQkIKLToxMDBCRDAwMEZEMjg5NUYzN0RCQkNGQUZFOTNFQUUyMUZFRUFCODE0MDgKLToxMDBCRTAwMDk4RjdEQjcxOEE5NURDOTAyMDNEN0NBNTZBNzgzNDBCMDAKLToxMDBCRjAwMEExQTdEQUM3NjlFM0U3RjQ0QzZERkNEQzVFNjE4QTczOTgKLToxMDBDMDAwMDdFMTJDMDMxRjFCMTE2M0RFRTA3QjE0OEIzMTVGMTM1OTIKLToxMDBDMTAwMDcxQzQ2MDdCNDk4MDdDQTk3QkVGMzcyMjdEMENFQkRFQzEKLToxMDBDMjAwMDM3QTI5RDM2NDE5QTFCNTA1RjJFQ0UzMzA0RUJFOTA1NjcKLToxMDBDMzAwMDQ5NTI0RjJGQTM1NERBMUQ3Njc1MDZGOUE5MzNBQzgyQjkKLToxMDBDNDAwMDAxODVGQ0NDMTBGQTU0N0VERjRDNkIxQUEwRTM2RTFFQkIKLToxMDBDNTAwMEM3N0YzNEM1QkQwMkY1NDU3MzBFOUJCRTgzRjQ2NjczMzIKLToxMDBDNjAwMDNBRUVDMzdDNTdGMDAzOURDRDBBRjk4OTJENzQxRTc1QTkKLToxMDBDNzAwMEUyMDhCQjBFRTNGRkFCMDQ1QzUyOEU2RjM0OEZDNUEyNUIKLToxMDBDODAwMEZEN0IyQTVCODJGREJFNzdFNzlEQ0Q0RUU4QUZGMTQ3NDUKLToxMDBDOTAwMDk5OTk2ODBGRTRCOENGMjVGMTdCMjlDQ0RBN0EwREQ3ODIKLToxMDBDQTAwMDgzOTU2RjQ0RDg1MURFMEI3MDMxODZGQjlEN0I0Q0I0MkQKLToxMDBDQjAwMDRFODE3MkRBQ0ZBODdDQzNCNDA5RUY4OTU0NDZDMTdBNTkKLToxMDBDQzAwMDE1QzZDRjdEMzNDQzg3N0NEQ0Y4NjY5ODFFRUQ0NkVGRTkKLToxMDBDRDAwMDc0Rjc3MzQ4Q0ZEQzM3N0I4RkMxRjVBMUIzQzFBNDY3MkMKLToxMDBDRTAwMEU0RjczODlGMjczRERCMDlCQzM3RDI1QkMxN0MyNkU1QTIKLToxMDBDRjAwMEQzNURDM0U1QTU0OEYwNjlCMTkwM0ZCNzkwQTMyQjU1RUMKLToxMDBEMDAwMDVENDgwRUFGM0MwNjQwRTMzRUU5NjNDQUMwNURFODI3OUMKLToxMDBEMTAwMEQ4MkRGNDdFOTM5NENCMDI1QzBGNDE3OTQxRkYxODNBQjEKLToxMDBEMjAwMEZGMkJGRDhENjAzOTJDNkJCMzUyQkZFNTZENzYyMUVGNDMKLToxMDBEMzAwMDM2Q0E0QkI5MkIxNjcyNjMxMjdFQzYyQ0MxRTdCQjUzNjEKLToxMDBENDAwMERDRUYyMDVFMEFBQTQxRUVBMzY4MUYzRjBCRTVDOUNGODYKLToxMDBENTAwMDM3NDYyQkYyMTdGMDRENjI0OTgwRkM1NDM3REVDRkQwNzYKLToxMDBENjAwMDNGMzFDNUI5ODg2RjY2NDExQUU4OUZDQzZFRjc0RkFDMkEKLToxMDBENzAwMEUzMTIwMEZFODkyQjMyNzQ3OERGQTk5RDdGREJGOUU2NTAKLToxMDBEODAwMEU2Rjg3RjhGOTA5N0UyNDg1RjRGRjQ2NzBENTU2MTBFNEMKLToxMDBEOTAwMDNDODc3RTM5OEVFRkY3MkM1Q0M1RjFCOEQwRTBDQTQ1QjAKLToxMDBEQTAwMEZGNjJFMTJGMTU4QTk3QTFERjgxN0E2OUQ4OTEyQTYzQzIKLToxMDBEQjAwMDYwMUNFNUZFQjY0MUNDMEU3ODk4RDJENjgzRDIzNzEzQUMKLToxMDBEQzAwMERDNDcxMTBGNDU2REQzMDRCRTA2N0RBM0ZEQzVBMTRFQzIKLToxMDBERDAwMDFFNDczMjc4NEQ4RThEMTkxODQ3NzJBQjQ4RTczMzY5M0MKLToxMDBERTAwMENDRkE0Q0UwN0VERTdBMURDNUMzRTRCRUEzOEMyQjk5MDEKLToxMDBERjAwMEYwQkM3QzgwMURGRDQyNUY5QjRFRUYzNzA0Qzc5OTcyQUIKLToxMDBFMDAwMEI4RERCRkIwRDk0MDc2QkZBQ0YxQ0ZDMzc0NTA3RjJFRjAKLToxMDBFMTAwMEMzRDkwNUVEQzk5NzdBNzcxQkYyRjVCQ0M5REU1NzBEMkEKLToxMDBFMjAwMDkwOUZGRkU0Q0VBODkxNzYzRjNFRUJGNEJFOUU2ODQ3Q0MKLToxMDBFMzAwMEVCMDA4RjE4RUZBQTVCQTNFNjc5QjlCRjEzQzFGN0M5MUUKLToxMDBFNDAwMDM4N0Y0QjdFMEVFNkYzNzk2REREODg5RkFFNTQ5OUM4RUUKLToxMDBFNTAwMDBFNUQwMUJFNjUwMTc2NDhEQTFEQTlFN0E1RkQ5MTdDMEUKLToxMDBFNjAwMDVEQUVFN0ZBQUIzQzMyREFFQkM5MDhCNDNCOTM1QzM5RDAKLToxMDBFNzAwMEM4Nzc3REY4NzkxQUJGREREOUI0NzYxNENBQzFBNTM4MTAKLToxMDBFODAwMDNBQjcyOEVENDZCMDFDQkNCNjE0MUNEMzVFMURFRDhFREYKLToxMDBFOTAwMEQ0RUI1MkNGNEJCQjM1RkFFNTJGNzdGRTE1Q0Q1NThBRjMKLToxMDBFQTAwMDdCNDAzMkUwRUI2RTNEQjc1Rjc3RUIyREM0M0Y2M0UzRjEKLToxMDBFQjAwMDI2RTk5MTZGNkU1RThGMUUxMzdBRjQ5ODQ2OEY1Njc0RjIKLToxMDBFQzAwMDYyMDcwNjI3REY5QTFDNzQxNUVERjM0Q0RDN0Y0NDNENjYKLToxMDBFRDAwMDFGRDhERkEzMjlBM0M3RTAzQ0M2Mjc3MzNCRkI1REMxMzYKLToxMDBFRTAwMEREOTlGRTFGOUY3QzZCRkE3RjU4QjI4OEY3REQ0MEZGQ0IKLToxMDBFRjAwMDE3MjY3M0ZEMUZBQ0VGOTk5NUJGQTc3MzY5NEY1RjJGM0UKLToxMDBGMDAwMERBODNBMzBDRUMwM0RBQzE4NjA4RkIxNjYxMEZDODVFMTYKLToxMDBGMTAwMDg0NDc3QkJGQ0UxRTVDNEQ5QjU5ODg3ODBBNjEwRjFFQUIKLToxMDBGMjAwMDRBRkUxNkY2NDBGMkExOTQxQjI5Mjc1MjJFODJFNTQ4NkMKLToxMDBGMzAwMENBQzU4NDlGQzIzQTExRTlGNDFFQkY1NzUwQUVGNzZDODAKLToxMDBGNDAwMEEzRkQ0NjdCQzQ2MDk0Q0Y3NjNGNkU5NzQyRjJENkMxMzQKLToxMDBGNTAwMDRFMDhGOUYxQ0I4QkQ2NkU0OEI5OTBGMjIyRTVBNzVDMkEKLToxMDBGNjAwMEM4QzVFQzIwQjlEOEE3RDYzRDMzMEFGN0NCOTJERDZCQzQKLToxMDBGNzAwMDkzRTNGRDcyNTJCNjIzRDgzRTc0Q0E1NzE4NTk2NEIzMkUKLToxMDBGODAwMEUzQUExOEYyNTUzOUE0ODE3QzY1RUE0NDFFOUU0OUJFNDUKLToxMDBGOTAwMDM1QkY2OEQ5NERGMkQzNkZGRUZCRkNGNDlCNEVGOEU5RTgKLToxMDBGQTAwMDdGQkUwRDNGNzVGNDYzM0ZDRUIyMDMzQzU3QjI0MERGQzYKLToxMDBGQjAwMDY2RjhGOTZEQzIzQjhDRkIwRkRERjk3QTAwRDY5NzA0MTkKLToxMDBGQzAwMDc3OTMzMThERTIzRTEzQUVCMzJBOEEyRjBBQkU5NDc0MTIKLToxMDBGRDAwMDk2RkVDMDZDMTE3NzM4OTNFMjdBMDdFMUM1RjVDMDgyQkUKLToxMDBGRTAwMDlCRDM3QjQ0Njc1MzVDQjMxMUQ3MjdCMzIxMERGNDAzMjQKLToxMDBGRjAwMDNBRjM3RjlCNkY1MUVGQkQ3MTkzNzQzRTk2RkM5REZCNUUKLToxMDEwMDAwMDhEQzc5MjQzRkI4REM3QjFGQzlCRDJCNTIwOTc4OUY4NjEKLToxMDEwMTAwMERFOEYwQjMwREUzOEUxMjk5MTY3Q0IwQTEwOEZEMzQ2ODMKLToxMDEwMjAwMEM4RkE5RjNDRTlFQzgxRkE4MUM5QjgzOEM1MzlERTUzNkEKLToxMDEwMzAwMDQ1REVCM0Y0RjAxODY4M0ZFMTE5RTY4RjlCNDNGREQ4MTUKLToxMDEwNDAwMEVDRThGNkI4ODhDMkZDRUQ5NUU3MUYzQkJDODZFODUxOUEKLToxMDEwNTAwMENCRTVDQ0REQTJFN0ZCM0YyMjlGMDU3OTRCNDA3RTQ0RTgKLToxMDEwNjAwMDUwN0UwMzZGMUZBNTZGNjE4MUU3NDU5MDlGOTQyMTlDN0YKLToxMDEwNzAwMENFQUUwMEZGMDE4NkRGN0YwNUVEODU1NTYxMThEN0E4NEMKLToxMDEwODAwMDhDREJGOEQ2MTVENDZCRjUwQUVENDVCNUUzODFENTE0QTQKLToxMDEwOTAwMDM4NTNDNUZCQjk5NDVGNzNEODA5M0VDMjAzQkI3OEJFMTEKLToxMDEwQTAwMDRGNEFFRDkzMUVCREU4MzdFMERDQkRBMTRFNzFEMkI5QzkKLToxMDEwQjAwMDgzMTE4QUI3NUI0NjQ3N0NGNzQ5RDFEQTI3RkNEMTZCQUQKLToxMDEwQzAwMEJGNjc3ODFFRUY1NkJFNkZCRkNGRDY4REJFRjc5OTZFNDUKLToxMDEwRDAwMDYxRkNGQkIyNDM5RjdGRkU1RTBBRTdFRjMxNTlEMTIxRUQKLToxMDEwRTAwMEVCQzdBNUE4QkMxRjExMzdBMEYxQTE2ODRBNURFODdCM0EKLToxMDEwRjAwMEIwMTNDNUI4Q0RCODVGNDJGOERDRjYyNEUyQjdEOTI4MDIKLToxMDExMDAwMEYxRkRGMjkzQzg3NzYzMTlEM0M0Q0Y2MDdDQ0FERjlGMjcKLToxMDExMTAwMEYyNzI0MThEOUU0RkQ3MTk4NEFGQUY5QkVGODAxNEE5MTcKLToxMDExMjAwMEJGRkRGOEYyMDREMUNCRjQzNUY4NzY4NEMwQjc1REZCOEYKLToxMDExMzAwMEJERUZFQkU4MzVBQ0MzRjc4MjZGRTc0ODNFNzY2QUY4NUYKLToxMDExNDAwMDNENUFFRjIyRkU4QzhFNTNBQ0U4NDc1N0I4QzJENkUwMkEKLToxMDExNTAwMDdBQzEyRjlGQkYyN0JFNkM5NkZCMDMxREU0RUZCNTAyM0IKLToxMDExNjAwMDk0QkYwQTg5NDdDRkVCNEZBMkZDQkE3NEVERURCOTNDQUUKLToxMDExNzAwMEI2RjMzNTczRjYwMUJDNTJDODBGQkU3RkU0RjlGQTI3MDcKLToxMDExODAwMDMxMkUwOTdDNDFGNTk0RDcwN0MwMUQyQzhGNzU0MUY5OEMKLToxMDExOTAwMEVDMjBGOTE1RjI0N0ZBMDNFRDAxRTBBOTI3RUFCN0I4MDgKLToxMDExQTAwMDYzNDY3QjAwOUZGQzRDRDBFOUEyQjgyN0RBM0M5QUZCNEYKLToxMDExQjAwMDkzQ0RERDc4QkEyMzg1RkI4RkNGMDk3QzZFMTJFRDlCMzIKLToxMDExQzAwMEMzMDNGMDkwQUFFMTFGMUZBRTVCMDJFNjRENzhCQTNGNjEKLToxMDExRDAwMDRFQ0VGQjkzODI3Q0QwNjNDRDM2NUVCRjJERTVBMzI3MzgKLToxMDExRTAwMDNERDlGRTdDNzA3RkFGQTY3QzUyODA3OEYxRjdGRkYxOEQKLToxMDExRjAwMDYxRjQyM0VFMTc3OERCOTE3MkU0QjAyNzUyRDAzOUMxNDUKLToxMDEyMDAwMEZGNEUyMUYwMDdCRDYzNTE4RUZDQTE3NEU0OEYxRjc2NjEKLToxMDEyMTAwMEU0NEY0RkQwRjdGNDRFNzc2N0RGN0IzQTdFRUYwQ0ZBNUUKLToxMDEyMjAwMDlFRTEzREVBOUJGRjVFRDAyRDNGODhBRTc5NDE3NDFENjMKLToxMDEyMzAwMDEzOTQyRjk0NzlBRjQ2RkY0QUJENUM1Q0ZGRjRFMzA5MzkKLToxMDEyNDAwMDcxMThERjU0RTgzOEJGOUY5RjRGOTNCRDk5NkY5NUZDOEQKLToxMDEyNTAwMDdCRTYzMEYyQUI5RjlGQ0YxMjlFMjdENzA5QkE3OUNFOUIKLToxMDEyNjAwMDNEODk3QTc4MTJFQUUxNTFGRUZDMTRENDQzOTQzRjVGNDEKLToxMDEyNzAwMDgwRkI2MTdFN0I3NTgxRUFFRkFCOTFFRDJGOTJGRDdBNjkKLToxMDEyODAwMDYwODVFQ0VGMzNDQTRCM0EzMkNGMjVCMjc3RjcwQkJEMEUKLToxMDEyOTAwMEMzM0NBREE0RjdFNzM1RjBFRjNGN0RGRUYzQzM1RjJCMTIKLToxMDEyQTAwMDBGQjU0MTc4RDkxMDk0RjcwNEI1NUY3NzAzRkJCNjIyRTgKLToxMDEyQjAwMEU4RkJDNzgyRUFENzA0RTVENzA3RTU2QkI0REYxN0NEQjMKLToxMDEyQzAwMDUyNDgwRThCNDZGMEZEQzk2MEI5MENFNjhGMkY1MkRBRkEKLToxMDEyRDAwMEUzNjNFREY2NUM4OTI0RkY0RTIzNTcxM0FBNzlGRUZBRTcKLToxMDEyRTAwMEYzRkYyOUE4ODkwQ0M4QTdCMDg5MUVCMkVGMzA1QUMwRjUKLToxMDEyRjAwMEZENDFEMEI5MUUxNUY4QzFEMDg5REVCQ0Q4OTlERUVDMEQKLToxMDEzMDAwMDEzNkNFRjc5RkQzRkYwRDcyNERBMkZEMkY4MjVGQjU0ODgKLToxMDEzMTAwMDZEQkU1MTk1NzA0N0JEQkIyODMyNjA1Rjk1NTkyNkUyN0UKLToxMDEzMjAwMEJBQkFGM0ZEOUI4ODg5NjM1MjAzRkMyMjRGRjg0NDY3RTUKLToxMDEzMzAwMEMwM0M2NUZCNzE1RjVENTc3MUJDRjhENEYwODk5QjcxNEYKLToxMDEzNDAwMDdGNjhCNEQ4RDdCNEYxMTRFQ0E1OEFGNkJBNTJDNDZGNEEKLToxMDEzNTAwMEM2RTEzOTVENkMxN0VFRUJCOTMwRDAwRjYyNzVCRDcwMjgKLToxMDEzNjAwMDlFOEQzRjUyRjlCQjUwRDU0MDFGQzA1MzExQjNEMzc5NjYKLToxMDEzNzAwMEQzOTk3OEVBQkUzQkQ0NDc0NzJGRjkwRDdDQjdFRjQ3QTYKLToxMDEzODAwMEVBMTJCNEQzNDc5N0M0RDIzOUE2NDVBOURDRUZEQzE3REIKLToxMDEzOTAwMEREMzU2MTM2RTQxQjIzMUUyNjdEREJGOEM0NTg0QUY3OTEKLToxMDEzQTAwMEFBQ0U5NUFENTZFODNBMzU3OTYyNjQ1RkFDOEYyNjNDOUIKLToxMDEzQjAwMDM5MzZDNDRGNUMwNkZDOUQ5OTZBMjczOERDMzY2QjQyOEYKLToxMDEzQzAwMDNERkFEQkFCMERCNDVGMDgyRDdFNDVGQ0YzQTQ2OTMwMUMKLToxMDEzRDAwMEFFQjc4Qjk2RjVBN0ZEQjBFMjlGNEYxQTg3RjdCMDhBOUMKLToxMDEzRTAwMDFGMzdEMDNFNDk4QkNFNEE3MTIyRjdFQUIxNzQyRTZBN0MKLToxMDEzRjAwMEQ2MEE5MTdBRUVBMkY0Q0RGRkZDQkExQUVGNjlCNUJFMTcKLToxMDE0MDAwMEEwRDBGQjBFNzc1Q0FEN0I2NzEwOUU5QkFDRTk0RUY3REUKLToxMDE0MTAwMDJFREU4MDc1MDA5RUZCM0VCRUJFQjcxN0NGMjE5RjA4MTMKLToxMDE0MjAwMEFCQTI3M0E0RDA5RUVFOEI5NTVFQjNCRjNCMzEwQkRCQkEKLToxMDE0MzAwMEFCRDZFNUQwRkUxNDk0QTNGRjdDNkE5NUJBMDlFRjQxQzAKLToxMDE0NDAwMDE1NDU1OUMyRjFGQ0Y2QTlBRjE4QzU3NTRFM0Q2RUEyRkYKLToxMDE0NTAwMDc3MjI4RTQ3QkE2N0FDOEZBM0ZCQjhFOEU5QjM1MzhBMEIKLToxMDE0NjAwMDNENEEwMTNDNENEQUQwNjc2MjYyMTI5NjlCMDQ3REZCRDgKLToxMDE0NzAwMDQ0MTUwMTFFOEE3NEVERkM0M0Y2QTQyNDg2RTcyN0E1RDMKLToxMDE0ODAwMEY2OTlCODA1RTY3MUVBOTdCREU5N0NEOEMxNTRFN0U0NUUKLToxMDE0OTAwMDU0QzBENzJGRDI5QzUzNTJFMzExNUU2RUI3REVGQzBGQkYKLToxMDE0QTAwMERGOEZGQ0UzODVFMjA0RTRBRjg3NTIzOTVGQkZEMTU2OUEKLToxMDE0QjAwMDlDMTBGOEJFNzdDOTQ1M0RGMUMxOUI0NkZCMjI3QTI3QjcKLToxMDE0QzAwMDMwM0M0REMxNzUzNkYwNDEyQ0M2Q0Q2Nzg5NzUwQkYwQTcKLToxMDE0RDAwMEYzOTI5RDIxRkNBQkUxQTkyQUQxQUJGMUE3RjFEOTQ4NDgKLToxMDE0RTAwMDVGM0Y1RjBGN0YxN0Y1MTlBRDM3MjA1RkIxMjE3MzJENzcKLToxMDE0RjAwMERBQjk5M0E2MjVFQzQ0MEZENjdFRkU5MUVEMEIyMzNDODIKLToxMDE1MDAwMDE5QjY4NTc5QzMzMjMwN0VFQTFDODdGQ0NEMTJFQjdBOUUKLToxMDE1MTAwMDREQjYwNEM4QTE2OEZGNzcwRjNGRTdGQjc3Njg4RkVCRjQKLToxMDE1MjAwMEJFQkY3QkZFRDcxMkI4OUYyMURCOTc0NjU5M0NFODVDRDMKLToxMDE1MzAwMDlDQjY1OEY0NDg4RkEzRkFBNUE3RjAzQzVBQzkwQjA2RUQKLToxMDE1NDAwMEIyMDMyNTJGQzQzRkQ2OEFGQTA3RjgwNkUzNkJDMUYzMkUKLToxMDE1NTAwMEZBNjNBQTgxQzczMTNBOTM0QkNGMThBRDVDQjIzMTEzMEQKLToxMDE1NjAwMDcxQkU5REM5NjVDRDg2REM4OTlCMjMzQjk3Q0I1MjJCRjEKLToxMDE1NzAwMEQ3NEZFMzVFRTBFRjUxOTYwRUI1RTg3MTdGNzNGNDBCNDEKLToxMDE1ODAwMDZGNkRBMTdCNzQwQkMyODZFMEJEODlEMjE3NEM0NEFGNEUKLToxMDE1OTAwMDE2OEJDNTYzQkQwREVGMTM1OEY0MzE5MDNFOUJDQUVEMTkKLToxMDE1QTAwMDY5QkQ5MDlGNUM5NUU5Q0Q0MzI4QTU3QjEyNzJERkYwNjEKLToxMDE1QjAwMEVDOTI2NzlFQzVFMzk3RTc5ODc3REE3MEMwREY2NTI3RkUKLToxMDE1QzAwMEU3RDNDQkJCNTQ4QTNGMDZFRjIzOTYxRkRDNjlDQzYxN0YKLToxMDE1RDAwMDM3QjE4Rjc4ODNGREMzMzJENjIyREVERjBERkQ3REYwN0IKLToxMDE1RTAwMEZFRTFBQkE5QzFGQjg3MDZCQTRGNUUyQUY2MEY3MzM3M0YKLToxMDE1RjAwMDI4MDQ3N0U5MTI3RUNGM0YzNzk2Qzc4RDRGMkUwNUZBMjQKLToxMDE2MDAwMDFCNjlERTFFRUIxMDNDMEZDREVENEUyOTUzQkM2NkY4NzYKLToxMDE2MTAwMEY1QUUwRDBCMjg4RUQ5MTNGMTg0NzE2RUYxNkVFMjg5NEYKLToxMDE2MjAwMDMwNDczQUFFRjM0QjVFMDgyM0ZDOTZGRTZBRUU1RjdFQ0YKLToxMDE2MzAwMDk5ODVGN0ZBMEFFMjAyRDdENUZCOTEyRjM4N0UxOURFOTkKLToxMDE2NDAwMDFGOTRGRDlDNUVGNjYzN0FBNzMxRjc0NTU4MUZDMzdDNTMKLToxMDE2NTAwMDRBNjNEOEFCRjc2NzIwQkQ5MkQyNzE5RjUzQjYyQjVEMUEKLToxMDE2NjAwMEZFQTM1RUJDMURBQ0FGNjExRDVEQjQ0QUU1RUZDN0VDRTcKLToxMDE2NzAwMDM2OTExRDA0NTk0RjY0MDFGNzJDNjdBRDM4NjgzNDcyRjgKLToxMDE2ODAwMDNCQzYxMjg3MDlGRkRBRUVCRjlGNzYxQ0VBRjFFQTZFQ0QKLToxMDE2OTAwMEE1Qjg4NzI2RjEyN0VGNTExNUU5RjhGQjc0ODUzQTg1M0YKLToxMDE2QTAwMEVFNTc4MTI2QTM3QjQ5OTc1M0I5NUY3QjNBOTU5RjY3OTUKLToxMDE2QjAwMDI4NEE3N0QwRkQ5Q0YyQjUyNkM3RjIwQ0RFNEZGQjdEQTEKLToxMDE2QzAwMDRGNThERjk1RUI5QTRCNjgzRkYzRjcyNjhBQUI1NEFFNDEKLToxMDE2RDAwMDA4NzM4NjQ1RjFGMzE3M0IwNkQwRjk2QUJEMTFGMDUxNDYKLToxMDE2RTAwMDY2RTdGQUUyQjI5ODZGQTU3REQyNUQ3NDlGNDFDRjhFMTYKLToxMDE2RjAwMEU4QTFCRURDQzJGNTYzNzkwQ0UwM0Q5MjMzOEE2RTE4MzYKLToxMDE3MDAwMEJFNjdDN0U4REMyNEY2OUIzNDI4NjA3QzQ1OTQ0MzNGRTEKLToxMDE3MTAwMEY2Mjg3RkJGNEQzQTU2ODM3MTFCNkNERjc3MTBFMjMxOUMKLToxMDE3MjAwMDc2REE3NDg0RUYxNTk1RTQxOTkwQjQ3NjA0RkE3REFGRjcKLToxMDE3MzAwMEE4OTlCOERFMkU1QUI1NkYxQ0VBREZGOURCMDdFMzhERjYKLToxMDE3NDAwMDA5NTZGNEVBMDc2NDNGRTYwQkZBQjc4ODczNjdDNTkwNTkKLToxMDE3NTAwMEM3NzdCNjIyRDJCODNDQjk1NTFFMkY4QTQ4NTMzNEVGMEEKLToxMDE3NjAwMDEwQzlGQUYyNTUwNjFFQkYwNzNEOEY4QUE1N0NEOUM3NUUKLToxMDE3NzAwMEQ0NkZCOUE1MzkwMUY1NkZGOTZFQzMzMEQ0RDM1MTY5NkYKLToxMDE3ODAwMDVDMkU4Qjk3QTU2NTFGMDFCRTJBMzY0NEQzQkI4MzY1QUIKLToxMDE3OTAwMDlFMDIyM0U2Q0I2QTE1Q0FGQkJGOEI0RjQ3M0UzREJGNzcKLToxMDE3QTAwMEUyQjUyOEU0OUYxMzYxQkU5RTY4OTc1QTE3ODQzOUU4MTIKLToxMDE3QjAwMERFQTE5NUM3RUJDRUFGRTg0OUY3OTU2NjU5OUIyREY4QUEKLToxMDE3QzAwMDlFQzFBQzQ1REQ2REE4QkY4RjVBN0Q0NkFDM0Y1QTk3OTAKLToxMDE3RDAwMEExQzNCQ0QzNkFDREM2QkM1MzdGMUJFNUNGOEJGMzJEMTEKLToxMDE3RTAwMEY0ODM3Q0E1NzAzQTk3NkREQjY3QzRCRjRGMzI0NENDNUQKLToxMDE3RjAwMEY3RTIyQjFGRjRDMkY4NEY3OTdBNzMyRkI0MkJDMDA3OEUKLToxMDE4MDAwMEJENTIxMENGMkYyOTY0OTcyQkI2RjFGM0VFOTIwRjJBMTkKLToxMDE4MTAwMDkwMEY0MEVFRTYwOTNFQThEOEY1REFGNzUxMUUyQTkwNUYKLToxMDE4MjAwMEZFNDMzQUYyMTFGMEYzN0UyQURGQjE3MTFDRTNERkVGRTEKLToxMDE4MzAwMDQ3M0U5MTc2MENGMjJCMEMzNjhDREZGMTdDNjYxQUE3QjIKLToxMDE4NDAwMDNGOTQ4RkUxRTU5RTAxRkMxQzVERkIzOTA0OEQxQzc0MDcKLToxMDE4NTAwMDQ2NUY1NzFBQjc4N0M1Q0I0Q0E0NkY1RDY5NUMxRTVBQUIKLToxMDE4NjAwMDU2RUQ4RTQyRkE1RDdDNjVERjAxREM2NzI5REYwMTU2QUIKLToxMDE4NzAwMERBMUU0MjFFMDQzRTJBNzFGRTUxMDQzRkY5MTc5NTM4QzQKLToxMDE4ODAwMERGMjhGRkZDREJGOTVFQzg2MTI1RTNGMzkzRjNBREQ0RjkKLToxMDE4OTAwMDhCRjlDQjdBRjFGRDI0QzEyRjY1NENFMDZCNTc2RjJFOEQKLToxMDE4QTAwMDc3NDJDRTUwOEVFOUJEMEUzMTNGQjc0REZCMEVFNUY3QzYKLToxMDE4QjAwMEM1RkNEQzIyNjVENkJBMjhDNDBGRDIxN0Y1MEYzRTEwM0UKLToxMDE4QzAwMDY5OTRGQTA0OUE1Q0RDQkU5MUNFRjE0QjdBNDlGODU3RTAKLToxMDE4RDAwMDA5Mzg0MERGMzk2MzZDN0UzQUI2NzRGMjRFNjQ5NUUwQTUKLToxMDE4RTAwMDlCNjM4Rjc3NDlBRjA3RkM5RERGNEFDRjZDMTFCRkVBM0UKLToxMDE4RjAwMDAzQzY5MzdDMjNDN0NCN0Q3OUQyREQzODZGRThERjg3QzEKLToxMDE5MDAwMEZEQ0I3MThGN0EyMkY0RDhDRjUxQzZFNTQzQzIyRkU1QzMKLToxMDE5MTAwMDMyQjdGQUExQkIwNzQ3NjFCQjhCOTZFRTAzNzBERTlDMjIKLToxMDE5MjAwMDhFQUJEMkFDRjRCRDEzRkQwNUY4REU1OUFGNTBEQ0ZBMzYKLToxMDE5MzAwMDk4NThFNzFGN0JGQ0I1QThFMjAxN0U3RTdGNDI3QzI3OUEKLToxMDE5NDAwMEY5MEM3RjMwM0UyNkUxNkRCMkYxMzg3MDMwREM1MjBGNzkKLToxMDE5NTAwMDQ5Qjg3MzlGQjhFRjZFMkM5N0YwRTNCRTUxMjA5RjRBQjEKLToxMDE5NjAwMDNDNEE3RTk1RjdGNTgyRjk5Njc4NEVEQTRGQjU3M0ZFQ0MKLToxMDE5NzAwMEFFNEMzRDQ2RTc3NzNBOTQwN0Y3MjdGQ0EyMTNFMjVDQUEKLToxMDE5ODAwMDc5NkIzQ0UzNzFGRjE1ODlGQjM1Rjc4QTE4OEIwQ0I0MzIKLToxMDE5OTAwMDNGRDI4RUMwQ0YxQTdEODBGRDY5QkZBNzE2RTczQzhCNzIKLToxMDE5QTAwMDc0QkI5MEQ2OERGQTNGQzdFQThDMzlEMDZGRDk5OUU2Q0YKLToxMDE5QjAwMDcxRjhDRTlERjQ0M0VGQjhFQTUzQTMzMTVFQjU4QjlGMjcKLToxMDE5QzAwMDc3OTNGQzUyNzY2MTNGQzk0MUI5QjhGRjU0QjRFQTgzQkEKLToxMDE5RDAwMDgyRTFDOEVGQkYzNUQwQkU0RUQxRTM2MzhERThERkNGRTMKLToxMDE5RTAwMEREMzI3MzE4QTIwMUVGNDFBMDVFM0ZCQjc5NjgyNkJGQ0MKLToxMDE5RjAwMDU5NjA0RDk4ODZGNzIxMzYzRjMzRUQwMTI4OUY1NUFGNEEKLToxMDFBMDAwMEQyQkIwREQ4MEZDQTZGRDFBMzk5MTQ1RjNEMTFENjUyMjYKLToxMDFBMTAwMDMwMEFGREY4MUZBODU2RjRFMzZGREYzMkY0MzE2QzdGMTMKLToxMDFBMjAwMEJCQTU2QjBDM0RCNkIxMzk5NkYyNEU3RDM0RDkwN0U5QjIKLToxMDFBMzAwMEY3Q0E3MzgwRDVFMkRFQzc1Rjg0REUzRkRDOUUyQUUyMTAKLToxMDFBNDAwMEZDNUY3NTJGREM4RjZGREQxODQ2RUZBQzE0MUFFRDc1NTcKLToxMDFBNTAwMDNFMUM2RjRGMTc1QTY3NTQxQUYxRUEyM0RENUIyNUJGMEUKLToxMDFBNjAwMDZDOEU5MTk5OTM4NjUwQjkzOTA5Q0EwRjFBOUExRjQ1RkQKLToxMDFBNzAwMDNCNzJGMDUxQ0I2MDdDM0Y5MkE5RDc4NjE1NzM3RjlBNTkKLToxMDFBODAwMEVGM0JDNjZBREYyRDkxNzA3QzI0QzYwRkVFNEY3RURGRTAKLToxMDFBOTAwMDg0RUIwODFCREQ0RkE0RUZDRkFFRjhFRDM0QjQ4MzY3QzEKLToxMDFBQTAwMEI3RjZCNEUxQkM0RkVGMDlBM0ZCMDNBNzBEREE3N0NGN0MKLToxMDFBQjAwMDZFRjVERTU3RjA3RDI5Nzk2RkY1NzQ5QUQ2OEY5M0ZDMTkKLToxMDFBQzAwMDdFQzM3QjM3N0ZEMzlFODNCQ0QxQjlBNTBCNEIxOURENzkKLToxMDFBRDAwMEZCN0UzOThERDFGNzYzMjJCRURBODlFNzA4NEI2QTRENjgKLToxMDFBRTAwMDU2QkMwNzczMTJGOTFFRjdCMzc2QUJGQ0ZFQTU5OUNCNzMKLToxMDFBRjAwMEMxQzlERDk5NzRCRkI3RTQ2RjNDNUY1MkE3NzhGMTNFNkUKLToxMDFCMDAwMEYyRkVBNzlGQTBGMzBBQjNDMUNGQzRBQjA5RURGRUYzNjkKLToxMDFCMTAwMEJBQTdBN0ExMzg1Qzc2Qjg1N0UyN0RGRUNCNUJGOUY5OEUKLToxMDFCMjAwMDhBMEVFRjMyMUNEQzc5MjBDOURFQjlERkZDNURGQkNCMEQKLToxMDFCMzAwMDMyMEUxMTlGQUVCRENGMkZGMTJDRDc0RjZGMDIzRjhDQ0QKLToxMDFCNDAwMDE4RTJDN0RCNjc0QkU3OTBCRjdDNjFBOTlCRDI0QkNBMDkKLToxMDFCNTAwMEIxQjVCNzIzMUY1QkEyRTlCRUMwMUZFQjlGNTFGMUJEMUEKLToxMDFCNjAwMEE4RjI1RDgzQUZFMTNBNzg1NDY0MzRCRDkzRjJEOUQyRTAKLToxMDFCNzAwMDI1QjQ4RjdBNjE2OTE1QTU5MkRFMzIwRTc3QzdBRTQ2MUQKLToxMDFCODAwMEZBRUVCM0ZBQ0MwNkJDOUZGQjQ2NjRCNEIwMDNCNjkwNDEKLToxMDFCOTAwMDc0RURFQ0RFQjE5Q0Q3QjkxRjcwRkE0QUI4Q0Y2RDlERDkKLToxMDFCQTAwMDE5ODVGMzZBN0MzRUI2NjEyNEQyMzUyMkRBOEE3RTVGREIKLToxMDFCQjAwMEE5Mzg0NzcyNkEzREY3QUJDRjk4QTM3RjkzMEZGNDNERTYKLToxMDFCQzAwMEIzNjE0QTAyQkUzNzM3QkJGMURFNjk1ODVFQjI0N0IxMzYKLToxMDFCRDAwMEUyN0FDMEIxNjc1MjE0QUVEQjNFRDVCNzQ0RTFGREE4NEUKLToxMDFCRTAwMDRGRDdDQjdCNTU1RUZBM0I1NEEzRjJEODE0NkMzRkNBNTcKLToxMDFCRjAwMEE3NjdGNjBDQkU3NThEN0MzMkYyODI5RUVFQkY5RTg3ODMKLToxMDFDMDAwMDcyOEE5MzVDMEJBNzM4MDlGQ0M0RTJCOTkxRDlBRkYzOEYKLToxMDFDMTAwMEY4NEFGQjNBNTdBQ0YzNkUxN0YzN0UzNEREMjZGNzMxMDIKLToxMDFDMjAwMEE4M0M3NzA0MkYzRkJENjFFNzQ0RUNFRkVDNjY4MzE1RDkKLToxMDFDMzAwMEUxRkU2Q0IzODFGQTlGMDdFQjMzMURDMDdCNjYyQjVGMUYKLToxMDFDNDAwMEY3NjAxRUQ3Q0I2N0I3RjJGNUNEQkMzQUJFQkUyOTVGQjEKLToxMDFDNTAwMDYwNzBGMkZCQTI1QTdFQ0MwRDY4NDdFRkZCNzRGMjVFMTcKLToxMDFDNjAwMEM4M0MyNzlGREYzQ0IwOTczOERGNjBCRThENjE3NTc0M0MKLToxMDFDNzAwMDhGRUM5QjlFMTcwREU2REJGOTkyNUY4NTdFNjhFN0Q3QjgKLToxMDFDODAwMENFRjg0NEUwMTNFNTFERjk1NUYyQzNCQ0Y1N0NERkRFNjgKLToxMDFDOTAwMDU2MzczODA3Rjk0RUYyNDdGMDNCNTlENTQ2QzZERjU3NUQKLToxMDFDQTAwMEQ0ODVEMzdCQjg5MzIyRUQwNkI0MEY1M0UyNUFDNjIwRjUKLToxMDFDQjAwMDVBM0U0RUU3N0U4MDlBQUI3M0UyQkQzNzU2NkQwQUY5MDUKLToxMDFDQzAwMENFQ0U4QTc0RUU1NzQ1NzQ2NUM0RUZERTc0MkIzRkNGRDkKLToxMDFDRDAwMDI5RUU3RkM5MTQyNjkyODY3NjdCNTI4NEVEMEIzQjM0MjUKLToxMDFDRTAwMDc5M0FGREFFN0JGNEMwQ0Y5MzZFQjczRERBRERDMUQ4NTMKLToxMDFDRjAwMDJGRDMwQkVFRDFDMzdDMjY2NURBNzY3NzgzRkNGM0JGNTYKLToxMDFEMDAwMDlBQzBGM0I3RDk4NjFBMjBCRjRDOTk3OENGMThDOEQ3OTQKLToxMDFEMTAwMEE3M0I5RjRBMEYxOEU3RUM5NjJFNjkzODNGMjhGRjE5MUEKLToxMDFEMjAwMDk2RDdDNUJCN0Y4RTY5QTVCODBGNzY0OTY5MURCNDI0QzcKLToxMDFEMzAwMEMzREZGRUZEM0Q5NkEzN0ZCNEZCRjMyRDA2OTZFRTE4QTAKLToxMDFENDAwMDgwNzkwOTdGRThCNDI1RERGOUFCRjRGODhFRTVDNThDMjAKLToxMDFENTAwMDNENEVFN0Y1M0NGQzFFMEVGQ0I4Q0MwOTc4NEY4QUYzRUIKLToxMDFENjAwMDVCQjFCQzk3NTMxMzc0MkZDN0MxRUY5RkM5RkI1MkYyRUQKLToxMDFENzAwMDNFNTQ1RkZGN0RCMjBEQjc3MjlGRUM5MjgxRkYxRDJBMkEKLToxMDFEODAwMEM1QTlCRDBGQTYzNEZDODlERUY5QTlGNkIwOTYzMEEyMkMKLToxMDFEOTAwMDgzRjY5RTREMzlCRTUzNzcxQkREMEJBMkZCODc0QzZGM0MKLToxMDFEQTAwMDI3N0QzMzU3RkEzQjY4QUM4N0Y5REYyOTYwODlGQ0ZDNTMKLToxMDFEQjAwMEMxQTM4MjFGNEYyRjY1M0Q3QTgwRTg5RjdGQjczOUNBNDQKLToxMDFEQzAwMDBFNzA1Qzk4RThFQjg1RkEyMDMyRENGRDI3QzREN0U5NzkKLToxMDFERDAwMDBERDVBOTBCRTNGMDFFQUFDOTkxMEZFRENGNzhGOTdEQkYKLToxMDFERTAwMENFMzJFMUI3QjJDREYxNDIyRkE4QkUzQkExNUQ1MzQ2NDIKLToxMDFERjAwMERGNEQ2ODg3REUxNzdDNzUyMUMzOTdGRTIzRDQyQjE5MkUKLToxMDFFMDAwMDdDOUQwNEVERTgzQzVEREVGMkJCRTJCMUREODVFRDRGOEIKLToxMDFFMTAwMEY0OTgwRDcwOUIwMDA2QkNBNzM1MUVGQTFDNjFBM0Y3NTEKLToxMDFFMjAwMEFBOTg0QUZCQ0Y1RUZFN0U5MjlFNzlBMjZDRjhFRUQ1MTAKLToxMDFFMzAwMDMzRTlFMjNFMTFERDEzOTQ3NDkyRjhFRjQwMTcxODFBNUIKLToxMDFFNDAwMEZENTk5RDk5MTkxMEVFQkU2QzAzRkRGRDJGNDkxRkY5MzgKLToxMDFFNTAwMENFRTJDMkREM0NGRTQyNzcyNDQ1MUVFMzQ4QTdDREUyMzgKLToxMDFFNjAwMEVGOUY3NUIwOEI2RjkxQkYwQTYyRTlEMUU4OUYwRDMzODgKLToxMDFFNzAwMDQzREJDOTExMUI4REQ4RjU3NzZEMkZGRjlEMkVGQzkyOEEKLToxMDFFODAwMEMxNkM3MEUwM0I5MkE1QTJDRDU4QjVEMDhFRUY1QjJEMTIKLToxMDFFOTAwMDhDMzdEMzdCMjUwQjVGRTg0RUZDQzE5NkZDOTAwNUI2RDIKLToxMDFFQTAwMDYzMUI2Mjg5NUY1NjY2QTg4NEZGQjlGNThDREUxRDJBMjQKLToxMDFFQjAwMEE4NEZBNkYzOTRGOUY1MzY0QUEzREExMkE5RkNFQzZGMDEKLToxMDFFQzAwMERFQzlFMjdBODlEM0E3RTA3RkJBOENBNjczNEJGRkQzMzEKLToxMDFFRDAwMDlCNTJENkQ5N0JBNzkxNjZCQUNGQkJGMDIwQjc2QjBCQ0MKLToxMDFFRTAwMEE3Q0FCRkM3QzJFRkFGQkIwNDM4QUVDODFBOEEwQkI5QzYKLToxMDFFRjAwMDNBREM1M0U3RUY1N0JBRjBCRTAwN0VFNzM0NTA3RDY3MTcKLToxMDFGMDAwMEVGNTc0QUZDOUEwNEREODJERkIzOUM3QTMwMzM5MURFQ0UKLToxMDFGMTAwMDdGMTRFRjU5NEUxN0VEOUFDNUJEQjNDRURFQjVCQzRGNTkKLToxMDFGMjAwMEI0N0IyMjZBNUMxM0YyREQ3NDY3NjlDODc3MkRGNTlFNzUKLToxMDFGMzAwMDMwMDdGQUNGODZENDQ4N0E0N0UxM0UzN0Y4OTc5QUY1Q0EKLToxMDFGNDAwMDRDOEIxRUYxMzAyRDlCQkY3MzM5NzVCQUI2REU5MEZERjgKLToxMDFGNTAwMDM5RTk3MzQzNzY4Nzc3OTIwQ0E4OEY0RDJFNkRGQkVDOTEKLToxMDFGNjAwMEFFQzIwRUY1NjU3REJGRjY1REQxNTQyM0Q5NEYzREJFOUYKLToxMDFGNzAwMDNCMEJGOTY5RTI1RDUxRjQwRkQxRkZCRkVDQjQxMEZGRTgKLToxMDFGODAwMDlCQzQzQkI4Q0QyQzJCMTFGNUMyQURCRTI3RkJGRkRCQUMKLToxMDFGOTAwMEZCQjFDMUVGQzQwNkJGMDNEQjdGRUI0MjREN0U2MEREQ0EKLToxMDFGQTAwMDBGMzVFRDZGQUI1RkFFQTkxRkVDNUJBREE5Q0Y2Q0ZBM0YKLToxMDFGQjAwMDk5MjYzRkI0RjkzOTRERkJFMTQ3MzY2OUVBNDdCNkJDOEIKLToxMDFGQzAwMEE0QTlCRkZEQ0MwRTRERkU4RUQ2M0Y2OERBREZEOUI2OTAKLToxMDFGRDAwMDU3OTNDRjYxRUY2OERBRTc5QTNGRDBFNEM3NUFGRjU3Q0IKLToxMDFGRTAwMEQzRkVBRUM0MTM5QUZBRjFGNkYzOUFGQTA5N0RBRTY4RkQKLToxMDFGRjAwMEYyMDU4RTJGMzVFRDNGMzdCQTU3Nzc0NUJGMjJFQTBDRjEKLToxMDIwMDAwMEYxQUQzQTQzNjFGODQ0RjlFNUE2Mjk2NkQ0MDc2QkJBMDUKLToxMDIwMTAwMDBBN0QyNEY4NkZCOUIwRDNBQzA3QTM3QkFDNjNENTZDNTEKLToxMDIwMjAwMDFGRjE1RjNERkZCQkEwQzE3NjRGN0ZERUU1QzRGODFGMDcKLToxMDIwMzAwMDdCOERERjZCOEIwNjdGNTIxRjMwN0U4Q0QzQ0MwMkZGRjMKLToxMDIwNDAwMEVFNUQ2QzlFNTU5MzhGNzcyNTZBREE3Nzk5NkVEN0Q0QkIKLToxMDIwNTAwMDI3QjlGQjY4RUE1M0U2MzgzNEY5QjRBQTExOUFGNjVENTkKLToxMDIwNjAwMDk3MzgzNUY5MEM0RjlFQTY3REY3MUE5NzI2REZCMzc2ODEKLToxMDIwNzAwMEJBQTY3REVGRjU2RTREN0Q1RkVGMUM0RDdERkZBRDU1MzIKLToxMDIwODAwMDlBRkNDMEJBMjU5QUY2QjdENTdCMzRGNTgzN0QzNTlBOEMKLToxMDIwOTAwMEZBQ0NBNjVBNEQ3RTY4RjM3QTRERkJFMTQ3QkM5QUZBMUEKLToxMDIwQTAwMDkxMkQ1QjM1RjVCNzlGQTlEM0U0RUY2OEFERDdCNEJGRTkKLToxMDIwQjAwMEIzQ0RBN0M5RTdCMDgzOUFGNkI5RTZGNzM1RjlCMUQ2M0IKLToxMDIwQzAwMDRGMzRFREVGNEEzQ0E2QTkxRjZGM0ZBQkE5OTc3RUNFRDgKLToxMDIwRDAwMDg0M0U5RjZCQ0I4NURGNTNFMEY4OTdFNkZCRjZGNzZFMDcKLToxMDIwRTAwMDc3Mjg3NDFGRUE1Q0Q3NkVGMjdEQzU5NjMwMTVGRDI0MDMKLToxMDIwRjAwMDE3QzU5OTZDNzgxMDExRjUxNURFMjdCN0YxRjMzOTg1RkUKLToxMDIxMDAwMDE0QUY4QTIzN0Y4ODRDOTQxRENGMEI4MURGMTA4NUFCRTEKLToxMDIxMTAwMEI2OEMwQ0Y0QUIyM0ZDRkU1QkVBRjVDQzlCRjdERkRBNjQKLToxMDIxMjAwMDg0RkZEQ0Q1RUVCRTg4RjIzMUFGNkVGQjM4N0E5Rjk4MjMKLToxMDIxMzAwMDc5NTYyMjFDRjJGREJGNzc4M0RFNkQ5NUU5NzhGMzE5OUQKLToxMDIxNDAwMEE2MEZGMDE3MEY4NkQ1QTYwRUY5OUEzOEMxNzhGMzA1QjkKLToxMDIxNTAwMDg2RUZDMUI2RjcyQkUyMjJGOEM3QkQxNzA2RjRCRjE2MEIKLToxMDIxNjAwMEQ2MTdGOEY3MjM2Qjk3OUFFOTZGQzdGRjZDQTk5NUYyMUEKLToxMDIxNzAwMEVCOTYyNjUyRkVGRjAwM0EyOUJGNDcwMDgwMDAwMDAwODAKLToxMDIxODAwMDFGOEIwODAwMDAwMDAwMDAwMEZGRUQ3RDBCNzg1NDQ1MTgKLToxMDIxOTAwMDk2NzBEREVFREI4RjI0OUREMDc5NzU3NzlFREMzQzQ5MEYKLToxMDIxQTAwMDQ4MDg5REYwRDgwMDNFM0EyMTYwNDBDMEU2MzUwNDQ5MTkKLToxMDIxQjAwMEE0QzFBODQxNDNCQTgxRjg0Rjc0NzVCQjMxMTAwMkIyNzMKLToxMDIxQzAwMEIzOTFEMTEwOTVDMTg2MDE2NDE5OUQwOTJFQTNEMTA5M0YKLToxMDIxRDAwMDlBRjA5QUUwM0E0QzYwMUNDNUQ5MTkzN0EwQTNFMjhFNTgKLToxMDIxRTAwMDEwMUVFM0NGRUU4RkMzN0ZDRUE5N0I5M0JFOUQwRTM4MkEKLToxMDIxRjAwMEZFM0FGRkY3M0ZGQUZCQjQzODU1NzVBQjRFNTU5RDczNjkKLToxMDIyMDAwMEVBM0NBQTJBQUQ1RTg5ODkyMjYzNkRERTFDNEE5RkYzRUYKLToxMDIyMTAwMERBOTk5OEM5RDgzNjZGMzFDMURCQkQwRTgyRkRERTcyMDYKLToxMDIyMjAwMDRBNzc3QTlEOTRCRkNCNUI0MUYwMUVBRjhCRDJCRERFNjcKLToxMDIyMzAwMDFBNEFGNzc5M0Q1NEZFOTJCNzgxRTA5RjdBN0Q5NEI2QjEKLToxMDIyNDAwMDdCOUIyOUZGMTU2RjBCQzEwN0JDNkQwNEJGRUFGNTUzREIKLToxMDIyNTAwMERBRTFERDRCRTkxQkRFNzYyQUVGRjQ3NjEwRkNBNkI3NTcKLToxMDIyNjAwMDhCRTAyRTZGMEZDMTg3QkNCRDA0MUZGMTlFMjZGODk4MkUKLToxMDIyNzAwMEI3OEZEMjFFRUY2Nzk0QkVFREVEQTdGMjc3QkM1NzA5N0EKLToxMDIyODAwMEJFOEVCRkRCMTlGQzJBQ0Q5RkU0MzEyNjMwOTdFNjdBNUIKLToxMDIyOTAwMDFFQzJDQ0M5MjYzMkY2MDBGRTRCODJGRkUyNDY4OENDMzUKLToxMDIyQTAwMEMyRDhGRDhDRkYzRUQ3QjA5QTc2MTM5NDc3RkVGMjNGRUEKLToxMDIyQjAwMDg1MDJDNjc0QTU4QzhEMUYwRjY5NjJGNkNFQzYzNEM2MjIKLToxMDIyQzAwMDI2QjA3NUU2NEY3MjE4RDM0MDU3RDc2MzA3RkIwOTRFMDcKLToxMDIyRDAwMDE5MTMxOUQ2QzNERjc1MkRGRURGQzc1ODNDRkNCRjk0MTgKLToxMDIyRTAwMEU1Nzg0QzgzNjk1MzA5MTQ0MkZCQkU1NTgyN0Y3NzFBMDcKLToxMDIyRjAwMDU1RDcyMDNFQUI4RDFDQkY2OTVBMTM5NTU3M0UyQ0Y4MUQKLToxMDIzMDAwMDBEMDI2MzU1MjJGM0U5OEIxOEZCN0Q1ODU0MDExQkMxNjQKLToxMDIzMTAwMEQ4MjU4RjJFNDdDNDcyMjFEQzBFODMwNEY4OEYzQTQ0RUYKLToxMDIzMjAwMDBFN0U1RDJDOEVCMUE1OUQ4NjFEOUJEMjA2RjFBQTg0RTIKLToxMDIzMzAwMEVGMzVGMEZEMkI1NjFBMENBQjY0M0QzQUM0MDNGMjFEODkKLToxMDIzNDAwMERBMThDNjlFQjdCOEE2NEI5MEZGNjA4QUM2QTc4N0Y2NzQKLToxMDIzNTAwMDk5Qzk5RkVEOEM2NEVDMkQ4QjZCMDZFNjVGRjJEQzc3MDAKLToxMDIzNjAwMDBDMUI3RkMwNkNDRkM2N0U2NjFCQkFFMjE3NDFGRkZEMTcKLToxMDIzNzAwMEM3QjVGNjlERDJGMEYzRTE2RTI5Njc2Q0RDMERDQURGQkMKLToxMDIzODAwMDNDOTdFQzAyM0NDQUZGQTI3NUUxRkM5RkQwNDU1NkY4OTEKLToxMDIzOTAwMEYzMDEyRjQ5RTA3ODRBMUE1NTNBREJFQTVBODJGODdDNzEKLToxMDIzQTAwMDE5RTlCOTQ3MDM1M0Y4RTU2REFCRjZBQzgxMjE1NUFFOTkKLToxMDIzQjAwMENBMUFFMTgyRUZFRTgyMjU2MzE5OENDRDY1OTI4RTQxQjcKLToxMDIzQzAwMEY5N0NFNjM4OUEwNjREMkQ2NDJFODIxNzMxMUZBNTZGRDEKLToxMDIzRDAwMEM1QkJBQUIxOURDNUNDNEZCMDZCQjIyMTM1RDRCODgyNzQKLToxMDIzRTAwMEYxNzJDQjc4Qjk2NTdDOTRGNDcxQUJBQjhFRTNFNTIwRTgKLToxMDIzRjAwMEJDNEU0Q0JBMjMxQkM3QTVFMEY1OTY1NUEyN0E3MzU4N0MKLToxMDI0MDAwMEZGNzZDNEVGQ0I4MzE3M0YxMTMyODZEMkM3Nzc0MDE3RDAKLToxMDI0MTAwMDI2NjgxRUVCMzEzREFDNzNBMzhFRDFGNzhEOEYwODdFRkQKLToxMDI0MjAwMEE0NkI4NTJFMkE5OTkxQjdGQjE4RTQwQjgxNzQwMkY0RjIKLToxMDI0MzAwMDUxODRGQ0QyOUYzQTM3OTJFOEU0NDkwOTFBN0M3MDkyQTEKLToxMDI0NDAwMEQ2QTcxRjBCRTNENEY4QjMwNTJERDE4NzVFMDBGQzFFODEKLToxMDI0NTAwMDg4MDNGQTQ4MUY5RTBFRUE5QTIxMERFMDFGQTBBRjY3N0QKLToxMDI0NjAwMEIwQkRGM0FGRkY1RDBFQ0U5N0ZCQ0Q0OTEyQ0U1N0EzQTMKLToxMDI0NzAwMDA2RDYwMUU4RDhGN0I2RDZCRTVCOTI5OTE0NjBFRDk0MDMKLToxMDI0ODAwMDMxN0VBNDZCMjZEQUVENzNDN0UwN0FCMUE1NEVBOERGRTIKLToxMDI0OTAwMEFENjUwREZCRjM4N0Y2RkIyQUFFMTdCNDdGQzJBNjJCMDIKLToxMDI0QTAwMEY3NTNCQjlDQ0Y5NUYyOUZFMkZBQzU2M0NBRUJBRDVFRDIKLToxMDI0QjAwMEY1NjlBRDE2RjAzRjcxRTg5QzVFMUExMzYyMUMwRDZGNTIKLToxMDI0QzAwMEU3NjYwNkUwRUZFRTM4MzNERDYxNDJFNEZBRjJFNzQ1MTUKLToxMDI0RDAwMDBFRTY5Rjk0RTk0NEExMUZBRDNFRDJCNUMzMTQ4ODE3MDAKLToxMDI0RTAwMEVGMTdFOEY5RTc0NDM3RDE0MENGMTk0NENGOUZGOEUwMjAKLToxMDI0RjAwMEQzMzkwNjY5QzQyMjQ4RkI2MDZBQkEyMDc1QkQ2MEQ2MkMKLToxMDI1MDAwMDIzREQyQzY3NzY0QUFCOTk5M0QyMDc2MEY5OTE3RTlEQzMKLToxMDI1MTAwMEJFQTdGNDM4RUYwRkIyNzZDQUFGMkJCRUQ3ODJGNDdDRDkKLToxMDI1MjAwMEJGQzY5NThBNzAyREVCQTU3QzM3RUIyRkIzQzFGQzJENzAKLToxMDI1MzAwMDZDNUU3QkQ0MDY1OENGNkY3OTZBNUEwMkNDRUYzQ0ZGQjEKLToxMDI1NDAwMEIyQTM5OENFREQyNTdDRTI5Mzg4M0Y3QTEwQUYzRUMxREUKLToxMDI1NTAwMEIzM0UxMUZBQkZGQkE1OTJGNTQ5OTAzRjQ3Q0JENzg1MTMKLToxMDI1NjAwMEZEMkI1RjE3NDU3RTA0OEYxQkY4QTE5NzhGQ0I0MUUzQUUKLToxMDI1NzAwMEQyNDY5NUFCRjhBMUYyMDlFNjEwQTA5REZFODMwNkZGQjYKLToxMDI1ODAwMENFQjQwMEZFMjg3RUU4REY5MzUwOEU4OUZERjdFMDdBMTYKLToxMDI1OTAwMEJCREYzNEM0RTA3QTNGMDhFMjFCQzcyOTM4MTg2QjgwRTAKLToxMDI1QTAwMEZFOTBENjJBNjM4ODJBODhERTFGNjJFMTc2QUNGN0I5RUUKLToxMDI1QjAwMDRDREY5RkE3MzBBMkVGQ0YwNUU2NjA0MEJGMTc3NEE2OUYKLToxMDI1QzAwMDY2MDFFNTVBQUFDQjU2MDRGOEFDNjBCRTI2MDZFNTZFNTUKLToxMDI1RDAwMENENEIwNTM4NEYyMzI1RDdBNzQ0RDcxRkI1MzcxNUE2QjAKLToxMDI1RTAwMEExRkNGN0E3MEEyOEZGRjcxOUVDOEQ2OUFBRkQ4NDVEMDUKLToxMDI1RjAwMDhGNDAyMUUzNjEzODlGM0ZDMDc2QzcwRUM1NEIyODNFMTAKLToxMDI2MDAwMEY2OUY0MjE0NjMwNjNERjMxOThCODhCRkQ5NDRFNEVCNkYKLToxMDI2MTAwMDQ0M0RGMTU3MjM0RTZEMDZGNkUzOTQzQ0E2QTFFRDlGOTEKLToxMDI2MjAwMDkwRjFFREY5NEE0Qjc0RUY4M0YxRUMxNjQyRjVDM0Y3RTQKLToxMDI2MzAwMDJCNDNGODYwM0YyNDNGMkM4Q0ZBRDFBNzcxM0U1NkZBMDkKLToxMDI2NDAwMDYzQTZCRTY0MjdEMDc1NkE4NDRCOTc4NjgyQzExNkM3N0QKLToxMDI2NTAwMEU1OEI5OUNCOTc5RUI0NEYzMzcxN0RFNjRDREVBOEM4Q0QKLToxMDI2NjAwMDY1NkE4RkREQzZFNUQxMDk5REU0NDNGODQ0NDk5QTFEQUEKLToxMDI2NzAwMDI0RDc4MDlDQkRBQkY4OTdBNzExOEZCQjhDQTYyRTJEQkQKLToxMDI2ODAwMEE0RUMxNkREOUZGQTk0N0QzMDdENzBGRkJENEJEOTdGQTEKLToxMDI2OTAwMDZGRTFGQkVGMUM5OUI1RUYxMkJCQkFGMTdCQzZFQzNBQzgKLToxMDI2QTAwMEM0MkY5N0ZENUU5OThGNkRCOERGMkFGMjcxQzg3RTBCM0IKLToxMDI2QjAwMDAzRUJDNUY5MTMyNTJCODM3NEI1QzBDN0JGM0EyNURDREUKLToxMDI2QzAwMDhGN0NDNDM2RTdEMkY4RjRCMkZDMENGRURFNUFDMTU4NTcKLToxMDI2RDAwMEE2NTFDNjEzRkU0QjcwMTk1OTY2Q0UyMDlDNTQ2MzU2MDIKLToxMDI2RTAwMEMxMjkxRTlCQUFGRUM4MDY0OTU1OUVFNkNCNTE5NTY3OTcKLToxMDI2RjAwMDM0REI1NTcwNTY0QkIxQUFGRUE4MzY4NzBBQ0VGNTk3NDMKLToxMDI3MDAwMEFCRUFFN0VENzVBQUUwMzFFRDE1QUFGQTYzM0I1Q0FBRTYKLToxMDI3MTAwMEYyQzJBRTFBNTVGOUI4MUU4RjBBOUVEMERCQTBBQUZGRUUKLToxMDI3MjAwMDc3QTc3REFBRjI0OTdEQ0RBQUYyMjk5RkI1QThFMDVCRTMKLToxMDI3MzAwMEZCREI1NEY1NkZCRkVBNTc5NTk3QjA3RjU2OTU0RjM1NDEKLToxMDI3NDAwMEVFNTdDMUQzQ0NBRkFCRUFCRjgwRkIxNkYwQ0YxREI2QkUKLToxMDI3NTAwMDZFNTVGRTBDRTlCOEVBQkIzQjczNEVBQUUwMTdFNDc1NzAKLToxMDI3NjAwMEY2MkQwRTI3QkU2ODJERTdGQkQxNkNGQjA3QUE3NjU4MjUKLToxMDI3NzAwMEU3NjhCRUZFNjEzQzZGN0JDRjFGMEI1MTRFNkVEN0Y0RjYKLToxMDI3ODAwMEE3MjFERDRBNUE3MzIyRjI3MTY2RjFEQzQzNDA2NjJDQzAKLToxMDI3OTAwMERCQjFBQTE0QzU1QjRFRjk1Mzg3MzAxREVEREM1RjhBQUYKLToxMDI3QTAwMDZDOTI1RjcxRjIxMEE2MDVBRThCQTVEMDFDQjNENzQ0MTYKLToxMDI3QjAwMDFGQzZCNEM4NTMzOEQ1OEFBODM0Q0MzRDhDRTk0NERGNTEKLToxMDI3QzAwMEFBQTkyODU3NUY3ODVDM0YxQUY5MjgyQTQ2QTE0RjA3MjMKLToxMDI3RDAwMEQxNjc3RDgyODZGOEI5N0VCMUM5OEZGMkM3MzJDNTI0MzAKLToxMDI3RTAwMDMyOTAxMzk2MUY1QUQ2QjEwMjRDOEI5QTMxNkRGNjFBNUQKLToxMDI3RjAwMDk5NUYwRkZBODA5NzUxQkFDOTZCNjZGRTZDMjA2N0FGN0MKLToxMDI4MDAwMDhERTBGQTkzRjc5NUE3NDMzQjIzQUI0NDMzQUE5OUU2QUYKLToxMDI4MTAwMDUxOEYyNTQ4RDBCRUY1RTU5NjlDNUQ3NkM2RDZFREIwQzUKLToxMDI4MjAwMENGRDdFNTQyRkYxOTlFQzUzQkEyMDE0RTYzOEUwNTMwMEUKLToxMDI4MzAwMDdGMTY5ODIzMzY5OUIxMjUzQkRGNzZGQUYyODdDMjk3NDcKLToxMDI4NDAwMDMzOUQ0RDI0MTdDNEY2NUNENEZGOTQ3NjM3OTY3RTZFODQKLToxMDI4NTAwMEQ3OTgyMURGRjc0QkU3MTE5OEY3QURGMUUxRjQxREMyRUUKLToxMDI4NjAwMDI1OTk1RkE3NUQ0NzBCQjYwQkY5OUVGNjEwN0NGQzRDRDMKLToxMDI4NzAwMDFBREY3Rjk3QTQ3MzdEMEE4Nzg0RUI2NkU1Q0JDNkFDMkQKLToxMDI4ODAwMEEwQTc4QzgwQjlEQzNBQTlFMTBDRUFGMEEyRDkyN0EwNzQKLToxMDI4OTAwMDdDNjJEN0UwN0I5MDJCODk1ODI5ODNFMERCQzMwMTRFMTMKLToxMDI4QTAwMDQwNTg2MjZDN0Y5NkVCQzdEOEFGRDVDNUQ4RDkwMEZBMkYKLToxMDI4QjAwMDQ5QTg1MUMzNUI2MTlFQ0Y2NjBFRTJBMzVCQUFGMTg5NzIKLToxMDI4QzAwMDMwMDZERDhGOUQ3NjNCRjRCM0FEMEFDNjBCRjA1NjNENjYKLToxMDI4RDAwMEQ3Mzc5NDdBQTMzNDhDRjZGNzJGRDNGODdFQ0VBRUNEQ0IKLToxMDI4RTAwMEI3QTM5RUY0QTUzQzlFRTdCQ0ZEOEIzRUNFNDQ3QkVCOUMKLToxMDI4RjAwMDJBQTU4OTM1MUVDMTA1RjJDRDVBRTlCNEZCQTA5RUFFQ0EKLToxMDI5MDAwMDExRTYyMzg0REVGMjhCMzQ5MUJFRDcxRDdFNDQ5MEEwNjUKLToxMDI5MTAwMERFQTc2OTEyQzE4OTk1N0UxQTc3NTIwREI0MUI4MEJGNUMKLToxMDI5MjAwMDRERjQwOTY2QzhCNzNERTYxMzEwM0Y5QkQ5Njk2N0YwQkYKLToxMDI5MzAwMDFEMzM1QTg4RkVEN0M4M0M2MTZCRjhDQkEyOEY0MTBGN0MKLToxMDI5NDAwMEQzNzk5RDc2QUNBN0JCMTNFODMzMUYyN0Q0NjM2NkI4NTEKLToxMDI5NTAwMDRFQzlFMzQ3QjAxMEVCQTNBNDg2M0UwRDczREM0MDlGNDUKLToxMDI5NjAwMDhGNEE3REQ0NDNGQkM1REQyNjI5MEJFOEZCODVDNUE2MzAKLToxMDI5NzAwMDhBMUQyMURBRkI1NDlFOUYwRDMxRUFGRTJENUEzRTFGMUYKLToxMDI5ODAwMDhBRENCRTZDRTZFQkE4RjBGMTlBNjhBNjkyRTM2QjUyODMKLToxMDI5OTAwMEM2NUI2Rjg0QUZCNUNEQzg1QzAxRjg2RTg1N0VDQ0QwQzgKLToxMDI5QTAwMEJFRTFBQjU1NjYxQzNGRThEMDRFRUE0RkU0RjI2NEM3ODcKLToxMDI5QjAwMDhGNzJDODZFMEE1RUM3MjFGNDA4OTQzRkEyMDhFOUEzOEIKLToxMDI5QzAwMENGREYwODdDNjhBOEQyREI1MTZGQjJGRTQzOTM4MDdCRDcKLToxMDI5RDAwMDczMjI2QjExNTBCRTU4NTNDQTdBNDREQ0Q3NDQ1N0FFQTkKLToxMDI5RTAwMDMzODQzRTc5MzNCQTU0RDY0RkQ5OUY4M0Q3NEI3NzNENDIKLToxMDI5RjAwMEUzRkQxMjlDRUY3RkQ1MzFENEM3NTYxRjhGOEY3MTA1MzEKLToxMDJBMDAwMEQwNTM0QzNBQTdDQjYyRDZBMjQ1RkU5OENDREEyOUJENkEKLToxMDJBMTAwMDg1RjU1MjdBMUJFQkE3RDRDMUNDMjJBNkE1Q0M0RTY5NzIKLToxMDJBMjAwMDE5NzM1MjNBOUQ3OTI4MkQ2NzJEOTRDRTY0RUQ5NENFN0EKLToxMDJBMzAwMDYyQkQ5NDgyM0Q0M0E5OTM5OUM5RUU5QTA3RkIzN0E2REMKLToxMDJBNDAwMDBCOTg5M0QyRUYzMTBGQTU5OUU5OUM3RTJCNTgwQkMxQkYKLToxMDJBNTAwMDc3QjM3NjRBM0I4MEVGMjQzREZBMDE4Qzk0NzY4MjlDRDIKLToxMDJBNjAwMEMzRjQ0RDkwNzM5ODc2NzkyNTI2NjVBMzFGMjA4N0QyRUQKLToxMDJBNzAwMDIzNUUzQkE1QzdCQ0M1OTRGNjc4MUQ1NEVGNkQ2RjM5MzYKLToxMDJBODAwMEE1RUY3ODlEOTQ5RUYwNTY1MERBRUI3NTUxQkQ1M0RFNUMKLToxMDJBOTAwMDFBNEFERkY1N0EyODdEQ0ZEQjQwRTk2OUFGOEZEMkRGQjQKLToxMDJBQTAwMDc5OUIyOTFEQTUwNzdFQzZGOUNERTkyQjQ0N0QzRUY1MEUKLToxMDJBQjAwMDIzQkQ0MzAyRjlFQzkxRTVEMjYxODdFNjk5RENGMUI4RDgKLToxMDJBQzAwMDZFMUE2NjQwM0EyODVCMjMyMEZENTk3MzM0MEUzRkE0RUEKLToxMDJBRDAwMDlCNzI1NjBCRjc0MkJBRTEwNEQ3REYwQ0Q2NDhEMjBGRUYKLToxMDJBRTAwMEFENkRGNTgyMDRFRDc2MDg3RERBMDg1OENCRTlFOUE5RTkKLToxMDJBRjAwMDczOEQyMDlGNEIzQUQ5QkEwODNCQzIxOTRGMTk4MUVFMEEKLToxMDJCMDAwMDc2RTgzQ0ZEM0JBMEJDNjRBNzM0RDcwODdCRDZFNEM4N0MKLToxMDJCMTAwMDUzRkZCMThGQzM1NDNFRTkwODZCMzQwMzNDMkIzREZCOUMKLToxMDJCMjAwMEE5Mzg4MUUzODFDMkVGN0IzQjczRTZBRUNENDQzQzI1RkYKLToxMDJCMzAwMEMyRjNDNTM0MzAyQzUxQkY3RUM0NDRGQTc1NjFEQkQ5NzEKLToxMDJCNDAwMDQyMERDMDkzMUE0QzQ1NjgxNzA2RDRFQjQyQkExRkFFMkIKLToxMDJCNTAwMDVFNzBCOUYyRERCNjU1OTY0NjlDODcwRDlGODA1QTBFODEKLToxMDJCNjAwMDU5QTkxOTdEODVBQkYzRDVFRDZBQkU1RUZGNEM3QjgzMTkKLToxMDJCNzAwMEZFMDNFQjA5Mzc2ODZGN0Y5NkEzMzI3REMyRkY3RTNBNzIKLToxMDJCODAwMDBGQTY2RkRERjU4RkY2NkJDODBGNjQ4RUMxRkQ3NDU3MEQKLToxMDJCOTAwMDM0OTczM0ZEQTA5RkVFMDRCQzc3QzVDOEYwQzY0QzFBMkQKLToxMDJCQTAwMDE3Q0E0MzVDQjcwRDlCRDJGRDNFODA3Nzg1Mzk1NzFGMEUKLToxMDJCQjAwMEM3RjI3RkQ0RDg3NzQyRDFBRTcwRDdBNjVDODIzM0M5MzIKLToxMDJCQzAwMDNGQjEyMUM2OTMxMzkzOEZGQTNDREY5NzVBOTMxRjBEQTEKLToxMDJCRDAwMDkzMDJGOEJGMzk5RENCQUZBREI3NUNFOUREODE3NjQ0OTgKLToxMDJCRTAwMEIzODY2NUMxNzczQjlCOTc2RkNDODE3NjdFQkMxOUY0MjkKLToxMDJCRjAwMDA3ODA0N0RDNUFCRDMxMEJDQUQzMzc2QTI2NkE2NTE5OEMKLToxMDJDMDAwMDg3NzhGQzc4NzNGNTlFNERBODVGMjU4RjhFQzk4Njc2RjAKLToxMDJDMTAwMDMzNjQ3OTk5MUFEQjU3QjgwNkU4QkM1NUFGQjZBNzk1NjcKLToxMDJDMjAwMEY0OUY2NDdFQTk4NjY2Q0U4MjZDNEQ5NUVERjQxRDNBQzQKLToxMDJDMzAwMDU2MTFCOERGRkQ0Q0M2RUY1NzU5M0NENUREQ0VGRDU3RDgKLToxMDJDNDAwMDg2OTFFMUZFMjc2MEZDMjUyM0I5QkZDM0IyQ0U0OEZFQzIKLToxMDJDNTAwMDBFNEJGMjdGOURCQzAzQ0EyRERCMzQ3NjU0RTk0NDZCRTYKLToxMDJDNjAwMEVENUExREVBRkI4QjU5M0JGMkUzMEU4MTdGRUY0QkUxRkUKLToxMDJDNzAwMDdBMjEyODBBRTk3MzAzRUNGMkFEREVEMzhCMzIwM0ZDMzAKLToxMDJDODAwMDg0QjYwQTlGODBGNjdCQzlDODVBQTEwRkY3OUZFNDA3NTQKLToxMDJDOTAwMDA1QjRGQjJEMTUyRUMxMTU4OUY2ODE4N0NBQ0Y2NUI5RkMKLToxMDJDQTAwMDdFOTIwRUY4RDkyQUUxRkI0MEZEOTJCOTEyNzA1REExMjcKLToxMDJDQjAwMERGOEE3NkQyRjM1ODUxNjA3RkE3QjNGODNDQUMwNzNCNkMKLToxMDJDQzAwMDk5RjRENTc1N0FDMjJCNzhCRTRFNjU5NzFFQzBGNjk1REQKLToxMDJDRDAwMDc1MEMyRUZGN0UwNkI3QUI3NzNEMDE1RDIwMUY0Q0UyRTEKLToxMDJDRTAwMDc2RjM4OUREODlBNDNGQ0U2OTBENzdBMEZENzRFMkE5NTIKLToxMDJDRjAwMEQxNjUwNDZGOTlFQzQwM0RGMkM0RUVDOUQzMzE5REIzNjgKLToxMDJEMDAwMDY1MjZENTNCMjFCMDFFQjQ4N0U3NkNCOTVCQzRGQ0Q0MDMKLToxMDJEMTAwMDBDQzAwQkRCM0JBMzI3N0E5Q0IzRTU0MUY5RkI0N0NCMDcKLToxMDJEMjAwMEIwQkM1OEUzRkIwOURBOTFDNThERkIyMkQwNEU5RTFDNDYKLToxMDJEMzAwMEY5NEExMkE2MjczNDdERjVEREQwRkY1RDY2RjYyQkRDNUYKLToxMDJENDAwMDlFOUQxQkUzRkVCMTFDRkUzMUY3QTk3NDFERUFEN0JGOUYKLToxMDJENTAwMDRCNEZBN0Y1OUNDRjFDQzQwNzUwODNFQ0JBNUJGNkY2MkIKLToxMDJENjAwMDFFMDY0RDhBRERENkRFM0YxNUNDNUNFNkU4MzAxRkMxN0QKLToxMDJENzAwMEI0QjRDQjVFODZEMzU3RDZFMzNDODJFOUY0NUU0RjE5RjgKLToxMDJEODAwMEFBMkZFNUE3NUI4RTYwQkEyNEQ3RjUzQjlDOUYxN0ZGNUYKLToxMDJEOTAwMEUxN0JBRkJDMDhGMEM4QzdFQkNEQTgwNzY1M0VEMTM3RDMKLToxMDJEQTAwMDYzMjdGOUVCNzQwQ0Y5MjE2QjkyQTc0NThCMDQ2Qzc0QzMKLToxMDJEQjAwMEM2QTA3Qzc4RjY2OTUxODNGQkI5MjFBRDI1MEM2MUMzQUYKLToxMDJEQzAwMDdERTkxQUI0MEI3NzQ1QjdENEQwQjhCM0MyMTlDRUUzQjYKLToxMDJERDAwMERCQjAwRjIxNUQ2NDQ1M0I2MzkwOUY4MDJGNjkxRDNFRjIKLToxMDJERTAwMDkzRTlEMzEwRUQzMTQ3NjM3RTE4Q0YxRkE4MTdDRUUxQ0EKLToxMDJERjAwMEYzMDNGNTVBQzIwNEVBMjc0NjIwRkIxM0Q0MDZEQ0JGQ0UKLToxMDJFMDAwMDZERjJGRUREQzYzQzA5MzgxRkQ2NDhDRjBFRjRFQjY0RTgKLToxMDJFMTAwMDk1NzBGRTY3OTE5QzJFQjA3QUQzNDRGQTg0OUNDRDk2MkYKLToxMDJFMjAwMDE2Q0Y5REI4MEU1Njk3RThFQjBCQTQzQkQ4MDYwN0Y0RDcKLToxMDJFMzAwMDkxNzQ4MjE5REFENzVCMDUwRTgzOUMyMUJDRjA4NzdFRTIKLToxMDJFNDAwMDBDOEJDOTQyN0E4RDgyQkZCNTAyREEwQkQwMzM3MDFDNkQKLToxMDJFNTAwMEYzNEM4M0RGMjk3NDE3OUJDMUM3MzU0MkE2QkZBQzY1MEQKLToxMDJFNjAwMEJDM0QwNURGQjgwQzJFOUYwMTZGNDk4M0Y4Njg2NTdDNzcKLToxMDJFNzAwMDYwMUM5QTAwN0MwMkVBRDFGODA2RjA2Njc2MUJEMjA1NDcKLToxMDJFODAwMDQ4N0E4MUE3NEMxMjAzQzc1RkFENzE4NEExNUQ2NDdBNTMKLToxMDJFOTAwMEY1RkJFODRGODk0MjM5MDI3OEZFNTNGNzI0MjNGMjY5QTMKLToxMDJFQTAwMEYwMzg3MjMyRDIwOERGNDZEMDg3NTE2RjlGRTlFMkZDREEKLToxMDJFQjAwMERCNThFOTExQzgzRTQyMThDNzlGMkMzQUQwMUY2ODM1MkQKLToxMDJFQzAwMEFEMTY3NDAxRTNCNTI2RjM3RDdBNjZBNUE3MUJFNUNBQTYKLToxMDJFRDAwMENDRTIwODNCRDJGNzlEQUM3RDlEOTlGM0Y3OTE0Q0MwQjUKLToxMDJFRTAwMDZGMTQxQkY4OTlEOEM0NDFCREYwNDc0RkJGN0IxMjk3QjAKLToxMDJFRjAwMDM0OTlCNTk3RTRFMkZFRjlGOEZEQjM3MEZEQjYzRTNBQjkKLToxMDJGMDAwMEIzMDdGMTRGQ0M3OUFBM0IwNjFBNzQ1RTk0RDc3RDE5QUEKLToxMDJGMTAwMEY3RUJBNDZDMTMzRjBFMUM0NzkyMDdFMDQwQkY0NDhEQjMKLToxMDJGMjAwMEJBMUNFODQxMDUyQjc0NjUxMzFBQTI3MUJGRDE0NEU0QTEKLToxMDJGMzAwMENGOUM4MTdBNEE5NDg2RTQzQkM4Mjk2MTQxNDhGRDMzOUQKLToxMDJGNDAwMDg4QUVFNEY5NTdENkU3QUU4QzRDNUEzN0FCODlBRjAzNUQKLToxMDJGNTAwMEVCQjcxQjE3NDZDQTgzNTVENjA5RkE2RDA0MzYxRjAxMTUKLToxMDJGNjAwMDc0REY1OEE2RjUwQjY4RDc2MkZEMjhBQ0NGRTI5RDkxQkYKLToxMDJGNzAwMDQzRDc2OTg3NEU5QTM5MDNFNUY0QzMxQUYzNkUzNjc0NjIKLToxMDJGODAwMDVFODFEQzdFNEI3QUVEQzM3MTU0MEVGOUEyOTFGQzdEMUIKLToxMDJGOTAwMDAxRjg2QTQzQzFFQUY1Qjg1OUZENkRBQzZCRUU4Q0I0MkIKLToxMDJGQTAwMEExRjk4OUM5MEI2NkUyM0U5QjU4Q0I2OEZEODNDQjQ3RUMKLToxMDJGQjAwMDNEQTY1RTU3QjIzN0M3QTNGRjg4RjlCQkJFQzE3QUNFMjQKLToxMDJGQzAwMDRDREU1NTg2RkE3Q0YwQkEyQTc0OTcxQTFCN0E1RjEwODkKLToxMDJGRDAwMDMzMzk1RkE2NDZEODRGOTU5MzVFMjE5MjlFRTA0QzExRkYKLToxMDJGRTAwMEUzMDNFREEyMEQxOTdDMUZCQUZEMzUxM0VENDNFQzIzNkQKLToxMDJGRjAwMEEzMUZCNzVDN0I1N0VGOTNCOUIwMEVBNTU3MzQ2OEFFRUIKLToxMDMwMDAwMEIwQTNFRjFDRkFFMTRDNDhBN0ZERUFEREQ1RkYwQUY1QjUKLToxMDMwMTAwMEE2N0Q2NTFBODdGOTZGQjBCRTE5RTgxMEYxRjU4MDlEOUQKLToxMDMwMjAwMDAxRjBEQTJGRjZCNEEwQTNBNEIxOTJEOTcxREY1NUZBNUEKLToxMDMwMzAwMEQ5MjNGN0YzMEI5RERGNDlGMjM1NTc2NDNCNDkwRTgyRTQKLToxMDMwNDAwMDY1MUU0MDJGMDA2OTg5N0U3ODE5NzM1NkI2OTBERDY4MzkKLToxMDMwNTAwMENEQ0MwNzU5OEQ2RUJERjYyNUI0NUZGRTQ5Q0ZEMEVGQkMKLToxMDMwNjAwMDM4QUY0MkQyOTVDMEY4RTc1NTRBQkE2NUU4QzcxNzU5NTQKLToxMDMwNzAwMDM5RUExMUYzMkJFQzk0M0ZCRkQyQ0VGMzhEM0M3RjQxNjQKLToxMDMwODAwMDg1ODNGMjE3NTQzQTc4QkUwOUYyNjEzRTE2NTZGODdCRjIKLToxMDMwOTAwMEJERDBFRTQyNTM4Q0E0NDEzRjc4QTU5Mzk3NUYzNTUwNDUKLToxMDMwQTAwMEY5M0I2MDBGNjQwMkM5ODc4N0Y5NDlERUI3N0NBNkUxNjYKLToxMDMwQjAwMEYxMTI0RkI4NUYwMDVDMEQ5MTQ1M0QxMkNFREY3RDFBRDUKLToxMDMwQzAwMDdCMTYyNDg2MTQ5MTk5MDE3RUI2QzJFOUQ3NDJGOUYzQTIKLToxMDMwRDAwMENDOUY4MDEzRjk0NkY1NkE2NzM2RTRCRjkxMkM5QTcxNEMKLToxMDMwRTAwMDdDNkYzOEMwNkVDNkY5QUIxNTY5REVFOTA3RjAxQjM1OTkKLToxMDMwRjAwMEM5MTRDRkQ4MjFGQkFEN0QyQjhDRTQ2NzA1NUQ4N0ZDMUYKLToxMDMxMDAwMEFDNkM0NUEyQUNDN0YwRjI2RENCQ0Q3RUQ0Qzc0MDBFRkYKLToxMDMxMTAwMEQyM0FGNkRGMjc5MjFFMDBGMkYwRUQxQ0Q0OEI1RUNBODUKLToxMDMxMjAwMEI0ODc0OTQ4Qjc2QTdFQjM1NDJGMkZBMUY2MkE5OTE5NUMKLToxMDMxMzAwMEVERjI1OTk1QkNCREM2OTczNDdFMERFQTU1QTY3OTMzOUMKLToxMDMxNDAwMDkxMEUxQUY3MzIzQkRBQUZDRjU2OUYyQThCNDU3ODlCMDgKLToxMDMxNTAwMEREQ0VFNTg3NUEyRTM0NTY2RjM5MkVFMTc4M0MxQTczNEUKLToxMDMxNjAwMDE2RDVFNzdFQUQ0NjRGRTkyRUFEMzBDOENGQjRERUQyREUKLToxMDMxNzAwMEEwRkMxODJBNkZFQzNERDg0RTQyNTVBOTdEMTNENEIzNUMKLToxMDMxODAwMEMwMzhEMThGQkQ0RENGRjM3REY3ODgxNDY3QjA1NDhCMTUKLToxMDMxOTAwMDVERTY4MjQxRkU0RTkxQTdEMDgyN0MxODQ1RjI0NUM1N0UKLToxMDMxQTAwMDVGQTM1RjUyQzMzRjkyRjkxNEY4NURDNDcxRjk3NjMxQTEKLToxMDMxQjAwMDNCQzk5NTVERUE3QTIwMjczNTI4QUY1MkRBRDRGOTY3MDIKLToxMDMxQzAwMEIyMDRDNTJGQTU5QTg3RTA3OUI2N0FCOERDMEIxRUU3NjIKLToxMDMxRDAwMEUwQjhCQUMyNDZEMUI4MzQ3QzVDMjhENzIwM0ZENzc0NTcKLToxMDMxRTAwMDg4RjI3MzJCNDVCQjI0QTFCQzZCM0Y4NUUzMUZGNTkyOEUKLToxMDMxRjAwMEM4QkEwMDlFNTU1RDM0MTNFOTY5RDY2NjBEQjk0MzY2QjkKLToxMDMyMDAwMEIzNUU5MjBCMzcxQkI3RTJERjA4MUU2N0YwRjgzNjY0MzcKLToxMDMyMTAwMDY4NjlERjFDRDAwN0Q3MUI0OTFGNkM3REM0QTRDMUI4RTcKLToxMDMyMjAwMDIyRTg1QkUxRTg1NzM4OTc1NTFBOUUwOUYzMzAyMjUzOUMKLToxMDMyMzAwMEQ2RDdBRjZCQjkzQzY5MzQxMTlERUFBQzhGRTUwNEZBN0YKLToxMDMyNDAwMDFGODREMUE1MjNCMEJFRUU3QUVDQkM3MjhBMUJFOTY4NUMKLToxMDMyNTAwMERDQzE3MkFDNTg5NjYzOTNGQTYwN0MyQUZGNzMzODkzOTIKLToxMDMyNjAwMDAyRTZGN0Q2RkUxODE1N0NGQkQ1NDQ1NUZEMTIxMDJFNEMKLToxMDMyNzAwMDgxRTU1MzhENzlBQUYyNjlFNjcxMkFGODBFREIxNDU1QkYKLToxMDMyODAwMEZEMTlEMjU0MTU3QzY3Q0U5REFBRkFCM0VERjM1NUYwMjMKLToxMDMyOTAwMDVEQzU0QjU0RjVFNzNBRUU1NTk1Q0YyRjdGNDg1NUJFQTcKLToxMDMyQTAwMEQwQjk0NjA1MkZBQUY4N0I1NUZEQzVBRTQ2NTVGOTkyMTMKLToxMDMyQjAwMDlBMjc1NUU1QzFGNjkzOTI5NjY2NzIzRkNGNTY5QkU3RTMKLToxMDMyQzAwMEE0ODNFNDhCNEI3MDQ2MEVBRDY3QTkxNEZCMDNENzNENzYKLToxMDMyRDAwMDJBODJFQjUzQzFGNTFBRTVGNTc4NDFFMEZEQjFGRTQ4Q0QKLToxMDMyRTAwMDBERjI5REUyN0Y2M0VEOTEyQUZGNUNEN0U0QzlDNjNFRjMKLToxMDMyRjAwMDEzRkE3MkVDRUYyM0REQjIxM0RDMUZDNUZDRkMzQkM1RjcKLToxMDMzMDAwMDdGRDVGRDA0RDQ4M0Y2NTY0N0E2NUI3MUJGNDNCRkFCQTAKLToxMDMzMTAwMDRCMEZGREY5MzVFNEJGQjczNkQ3MEJCNDBGNkVBRUU3RjAKLToxMDMzMjAwMDdFOTVBQjdBRTY4QTBEQzA4Mzg1RjM3RUU1Nzg4RTgyNDIKLToxMDMzMzAwMDI3NzM0NDcwRkY2MDE4Q0ZERjI2RkI5NTlFNDNCRjUyNzIKLToxMDMzNDAwMDM2NjMzRkIwMjg3RTc4MTdCNTlCNTBBQ0Y3QTE3RjQ2MTcKLToxMDMzNTAwMEE4RjYwODdBOTQ1QjJFNjYzNjQ4MjgwNzk3NTNGRjk3OUQKLToxMDMzNjAwMDJCRUMyMzU4ODg3OTU2RDI1NkFGOEQzOUEwN0Q1QkJEQTIKLToxMDMzNzAwMDZGQUQxRUM2NTY5NzM5NjlDQkIzRDBCQ0NEQzNDODFGM0QKLToxMDMzODAwMEYzNjhFNjk0MkQ2QjgxRTdGRjIxNTNBMjc1NDkxMEY5OEMKLToxMDMzOTAwMDNDM0Y1RkY3QzZCOTNERDA1RjZCOTVBNTA4RTU2QTcwMDUKLToxMDMzQTAwMDc5OTJCQkYzRTJCMTFCOTQzRkJGRjJENTBGRUVCRkQxRDAKLToxMDMzQjAwMEY3NzUxRDY3OUEwMkNBODdGNThCNTYyNDMyNDcwMDFEQTAKLToxMDMzQzAwMDQ4ODZEMDdFRjkxRkM4NzRFNTlFQUMyNzNGRDYzMzVBOTUKLToxMDMzRDAwMEQ3OTNDOENGMTcyNkZGRDdDNEJERjBERDc5RTlDQTNEMjIKLToxMDMzRTAwMEE4QTc0M0ZFMEYzMDFGRUFEMUJDOUVDRkJDNDRFNzI5RkIKLToxMDMzRjAwMDUyRjM0MEJGNDdGRDNCMkMzNEREMUU5NERCMTdBRDk1RTcKLToxMDM0MDAwMEZERTgwNzVBMURBOTk3RDBDRTRGMzI3RTQ2N0VFQTBFQzAKLToxMDM0MTAwMDFEQjdBQjgzRURGN0U3MDdFQ0VENzZCMkJGRjdDQkVENjkKLToxMDM0MjAwMEVDOTY1M0FEOTk3RkNGOEMzRTI2NUFFNEY4NDA4OEY5NEMKLToxMDM0MzAwMEQwNDZCNTA5MjhBRjEyQUJDNTRGMDJGOUEyM0I1MjRGOTcKLToxMDM0NDAwMDdFMDQ4QjQ5RjYzQjk4NkE1NDdFMDFDNTZGRDAxRDc5ODYKLToxMDM0NTAwMEJGODA3NDZGRTk1QTQxN0U3QUY0MTc2MDdCMDdFNTc1ODcKLToxMDM0NjAwMDA5RjYxNzI0MTlGRkI0RThFM0Q4MUJCNUNGMDZGMjIzRjkKLToxMDM0NzAwMDg0MTBGRDA0RTFBMUY4Mjc4MkZCRjFBMzNFODFGQkNDN0YKLToxMDM0ODAwMENBNzBEMjI3ODJDNzdEMzlCM0U0NTA2NjNDRjI0OEZGNDgKLToxMDM0OTAwMEM5M0I1MDdFOUZEMkQxN0UzODFDQkQ4NDQ5RTFDQzFGRjAKLToxMDM0QTAwMEQwN0U2RjI2QjdFRjIzNzI2MjU0Rjk5MUY2NDRFNjBGOEYKLToxMDM0QjAwMEY0NUZCMzY0RjMyNzExMzIwQzVCQ0M0ODdEREZDNjUxNTcKLToxMDM0QzAwMEQ4REZEQkJDQkYxMzNBQkI4REY0NDFEOEY2RDBGRTdCMEUKLToxMDM0RDAwMDRGRTZFN0VFNUM0NjY5QUI2Qzk3QjcwMTFGNjNGQTlDNTkKLToxMDM0RTAwMEQ3NENGQUQ5MzZFMDNGODRCNzdCMjU0QUZEREUxQzRBMkIKLToxMDM0RjAwMDc3N0FFRDU0QkVDQjVCNENGMDFFQUY4M0UwQkRERTcyM0QKLToxMDM1MDAwMDRBRjc3OTlEOTRGRjkyQjc4MkUwOUY3QTVEOTRCNjdCRUIKLToxMDM1MTAwMDZCMjhGRjE1QUY4N0UwMDNERTA2ODI1RjQ1N0Q1MDQ0RDAKLToxMDM1MjAwMDNGNzUzM0E1NkY3ODVCQThCQ0QzREI0NkYwOUI1RTNGNEQKLToxMDM1MzAwMEE1NURERUJEOTQ3RkM4REI0RUYwMTE2RjA3QzFDN0JDMkYKLToxMDM1NDAwMDVEMDRGNzc4N0IyODdEREJEQjRCRjlFRjc4NEYxM0RDRUMKLToxMDM1NTAwMDJCOEY5M0IxRTY1RTJGRkEyQjVDQTI4NEZBRERCM0FFMUIKLToxMDM1NjAwMDZBMzNFQUQ3QjY2NTFBMzM4QUYzMzY5NzY2MDVGQTM5QUQKLToxMDM1NzAwMEI2NTVGMjc4OUY2RDk1ODZGQzQwQTA4N0ZBNTE5RkIzQUYKLToxMDM1ODAwMDJEN0JGQUY4MzQyQTVGNDBFNTVCQjE0OTMwNEFBQ0FCOTkKLToxMDM1OTAwMEI4RkVDQTU2RUFBOTlFMTUwRjAyQzE3N0RCNkEyQkZENTkKLToxMDM1QTAwMDVBODA1QkIyQzNBOURDQkE0QTI0QkJFRDc5OEQyNzNBQjUKLToxMDM1QjAwMDlCRUI1RDI0QkZBRDNBQUUzRjI4NzQxMDIxRkJFOTIyOUUKLToxMDM1QzAwMEIyNDQ0QTk3NjU3M0ZDQTMzMjQyRUYyMzE5NTk0QUZDNkYKLToxMDM1RDAwMEE0QjkwN0M3NjdBQjgyRjEyMUJFNTVGNTQ2OEM1RjVBODcKLToxMDM1RTAwMEVGODNGMTQ5QTQzRkFFM0EwNDc4MjRDMzc4MTE3RkMwMzkKLToxMDM1RjAwMDg3RkNDMjZDMTlENzk3QUQ1NUVCMDhBRkU0NjVGMzk0MUYKLToxMDM2MDAwMDc4NjczNERBRTk2RDlFRkFCOTg0NkZBNTQ4N0VDRDM2QzUKLToxMDM2MTAwMEQ3QTFFOEZCNTA0RUNBRTc3Q0FDRjFFMTRFN0ZGRTUwRUIKLToxMDM2MjAwMDdDMzI4MkYwREZDNkI4REQ5MDBDRkFEMkZFMTBFMzAwRTcKLToxMDM2MzAwMDhCNDdBOUM3RkQ3ODhGMTk0M0ZBRjEyNkNCN0E2MkIyN0UKLToxMDM2NDAwMEMwRjk4RjNEMkMxMkZGNkQ2N0EwRjdDMTc3Q0Y4MTdFNDcKLToxMDM2NTAwMEU3NDMzOTUwQkE2RjE1RkFBQjFFQ0Q3MjREQ0MwMjNDMjAKLToxMDM2NjAwMDdFMjQ4RDNGMjQwMjFDNTNDRURCNEZBRjE3RjdBMDFFRTQKLToxMDM2NzAwMDBERUI3REFFMDlGMjM3M0VCOEQ5ODlCNjcxRUM2NjY5QkIKLToxMDM2ODAwMDJEQjI1QkRCQjI1NzEzRDBGRjk1MkNBOEQ3NDc0OUNCOUYKLToxMDM2OTAwMDY1M0NCNjNCNzg3QkNGRDU4QkU0NEZCNkFFM0E5MDc2OUYKLToxMDM2QTAwMDg0Rjc1Qjg2RkQyNjhFRkE3RDE4QkE2MTMyMTY0ODFBQjkKLToxMDM2QjAwMDE0MTlDOTU1RTI0NUVDMkZFQ0ExQ0RFNUQ4NUZGQzY2QTUKLToxMDM2QzAwMDg3RDI1RjIxRjZGNzc1RTc2OUU0RTM2NTU2NTcwOEJDRDIKLToxMDM2RDAwMDg2OTMyNzM3OTMyMzhCQjMyMkUzNDg4RTI0QjEyNDk0MTcKLToxMDM2RTAwMDIzQ0ZFQkI4RENGMjlERTRGQTI0MUQ4Njk5MzRCNDFGOTUKLToxMDM2RjAwMDI1N0VBRUM0RDM4M0UzRTgzNTMyM0QyNDE5NDJDNzYxNDkKLToxMDM3MDAwMDU3MERFOEZEM0VBQUI3RERCMUM5NDlFNzRCMzAzRTBCODYKLToxMDM3MTAwMDQ1QUI3NTZDMDVBRUYzRUE5MjcwRjNEQTEwRjRBMEE0MzEKLToxMDM3MjAwMDVCNTA4RTAxREZERjhCNDYyM0I1QjNCOTlDQjdBM0UxQjUKLToxMDM3MzAwMEVERENDQTU2MTE1QzYyMzJGQjQyQzg2QjI1N0Q1QTZFQzUKLToxMDM3NDAwMEU3ODEyQzRFQjc0OTBGQkVCNEYxMThBRUVGREIzQTNBMjEKLToxMDM3NTAwMDEzRjQ5Q0M2QkYxMUVEMDRERjA5MkRDOUQ3NDQ2REZCREUKLToxMDM3NjAwMDhFM0QwMTc4MzVDQkUzNzk0RUVGQ0ZCNTIzRkY0MDdCMUIKLToxMDM3NzAwMEY5Mjg1NzkxNUZGMkM5N0ZDMTY2MDVDQ0JCRjJERDVBQ0IKLToxMDM3ODAwMEQ5OEZGREEzNkIxQkEyMjlCRTVDQjUyRTBDRjVBMzM2MDkKLToxMDM3OTAwMDY2MjQ3QUIwRUEzQ0QxODUwMUY0NjA0NUJBMEM0MTFGMzkKLToxMDM3QTAwMEZCQjJGNDRBM0NENTU0MzIxMUUzMzI3QzVGOUU4QTcyRkMKLToxMDM3QjAwMDA5RjAzRTU4MUQ0NUZCRTFENDY1RUZERTM5MTZFMDVCQUMKLToxMDM3QzAwMEFFODg3NkQ0Q0I5RUFCRTVFNzEzMjdGRDUxNDNFNzI2QzEKLToxMDM3RDAwMERFN0M5Q0RCN0RCN0ZEQjdCMjFFRjQ3QjI3QzhFOUIzNjYKLToxMDM3RTAwMDY4RTc0MTdBNEIzM0IzNzdDMUJBREM1MjZEMjJGRkNEMjMKLToxMDM3RjAwMEFENTdDNUIzODE3NjFBQjlBNEM3QTM3REMxRkQzNTUzQjIKLToxMDM4MDAwMEZBQTEzQzgwRkUyNjdEQTZBRTBGMzNBQTQ1M0QyM0ExM0EKLToxMDM4MTAwMDRGOUQ2RkFCM0E3MDY2MUFGNEQzNTZDQjNGNkVCQkY2MzIKLToxMDM4MjAwMEZFNzE4NDdERjUxQUYyOTMwMEY1MjlGNDkzNDBGRTRENjQKLToxMDM4MzAwMEQxOTc4MEU3MTYzNzFBMTlDOTczRUIzMkEzMTlFNTQxRkUKLToxMDM4NDAwMEI3MjU5Q0U0NUZEQjYyMTNFOUExMUIzMjU3ODdBMTlFNzkKLToxMDM4NTAwMDZDQThBQThGQzY3NEE0REVCNzAzN0RBN0REQkJGRjdENkQKLToxMDM4NjAwMDlFMkQ4MUU0MkQzRjdGODE4NDU5MENGQUMwQkQ3QUFFMzQKLToxMDM4NzAwMEU0RjhGQUI2NENDQjQ0NzlBOUExRjJDM0JCRkY3RDhCMjcKLToxMDM4ODAwMDBGN0QwN0FDODVGMDkwMzQyQzkxMEY3RTAwQkU5QkUyM0IKLToxMDM4OTAwMEQ0MDJERjJGNDA2NzRFNDRGODc0QUVBQjA3RTU0MzQyRDUKLToxMDM4QTAwMDlDQUYxQjhCQjY5QUNFNTZEMkY5RTJDQTM4RTIzMzVEOTIKLToxMDM4QjAwMEI1ODdFOTMxQkZCMkM4MThDOEU3MEE5RkZDQjVGQ0ZGNUQKLToxMDM4QzAwMEI0MUNFN0JCOTkxQ0I4NTlCQjM3RTNGNzlGQTU3M0JFN0YKLToxMDM4RDAwMDE5Q0U5RTM2MEMyMzRGMTVGQjE4Q0Y5QTYzOEE2QzRCN0EKLToxMDM4RTAwMEZCRUE1OTdENDhGREVBRjY2Q0NFNjdDNTdBN0UzRTY0RjgKLToxMDM4RjAwMDRFQzVGNDcyOEFDM0Y4RkE0NDNDQzc5NjkzQ0RGOUE5MzEKLToxMDM5MDAwMENEMTI0OTcxRTJCNjc0RDY4NTcxMDNERjcyMERGN0Y3RjcKLToxMDM5MTAwMEM0RjFGRkRBMkFEM0M5M0ZENDJBNzhBMjdEMTk3ODNFQjAKLToxMDM5MjAwMEMyOTU4NkVCRDcwNjczMTQwOUZEQjdBNjcyQjlDRUZDMTMKLToxMDM5MzAwMDFFMzNDNkFCQTE5RDlBNDBGQ0MxREVGM0E5RTk5ODkxNjQKLToxMDM5NDAwMDNFNENGRTBCMkRGMTlFQTQwRkYwQjdBMzVGMUNGRDE3OUMKLToxMDM5NTAwMEMxREZERERBQUY4NjZGQkZBQTg2NEI5ODRFMDU0RjM1QzMKLToxMDM5NjAwMEFBRTE2OTY2MzU2Q0M5RTY3QUZBMUQzNjc1RkUwQzQ5MUUKLToxMDM5NzAwMDBEMjdBNzFDMDlEM0YwNzNFREE2MDE3RkIzNDRGMEJCNUMKLToxMDM5ODAwMDk5MDE3RUEwMEQ5QTc2MDFFNzI1QTVBRjk2RkNCMkFEMTAKLToxMDM5OTAwMEE5RENERjkzNUNBRkY2NzMyNEIyOTZCNTMxMDJGOTZEMDIKLToxMDM5QTAwMDU0RjlCNkZDNTUwMkZBNzM2Q0Q1RUE3Qzk4MDcxNThDNkQKLToxMDM5QjAwMENCOEFGNEJGMjRENzk1OUY4RDcxRTkwMjdFRUUzQTRCRjYKLToxMDM5QzAwMEVCRTlDREM1NzU2ODhCMjMzRTRBOTNDRjA1MERERDFGMEUKLToxMDM5RDAwMEI3RDBCODk1NzY5MDBGN0MwMUUzNDVGQTBGODQyRkU2QjcKLToxMDM5RTAwMEJBMjY2N0M3NzMzRUYwMDVFRTk3Rjk3RDNBRTQwM0E1NjIKLToxMDM5RjAwMEJGRTFGODQxRTFDNzYyMzk2RUEyOUNBQkI5MjJCN0E1MUQKLToxMDNBMDAwMDlDQUJBOTk3Q0ZDNzc1MDQ5REM3Qjk5MjVDNDZFNzgxNjcKLToxMDNBMTAwMEFFRjRBRTA5MEZDNTc3Qzg2N0JFNkNDRTc3OTg2RTk0Q0EKLToxMDNBMjAwMENGRDcyMERGRjlGNDlDRUYzMERGRjBENTJBNjcyOEZERUYKLToxMDNBMzAwMEYwQkNCQ0FGM0NCNDM3Q0NGQzcxQzBGODU2QjY0N0FCNTkKLToxMDNBNDAwMDYwNzc0NzgyMzlGMEJDRDM0M0Y4MEY3NEJBMzczMzNBMDIKLToxMDNBNTAwMDQ3NUEyQjBGRTc4QjMzQkZEQkQzMDhFOTVCNUE5NzBCMzEKLToxMDNBNjAwMEQ3Njc2NUQ2NTkzRDhGMzNGNUVCNTFGRTlFOTdGN0RGNEIKLToxMDNBNzAwMDBEODJERDM4NUFDMDk0REJBNThENjZCQjExRkRCRENDMkYKLToxMDNBODAwMDlGQTFGMjU3Mjg3RTg3RDUyQkQyQUMzMTgwRkY4ODAxQzkKLToxMDNBOTAwMDNGODJEMzRDRTc0REUzMzNDOThGMTEzNUQ1NzEzNzJCQjYKLToxMDNBQTAwMDA0M0NGN0NDOTg2RjA0QTJEQzg1NEU1NTkwQzc4RjY1MTcKLToxMDNBQjAwMDk3RkREMDk3M0MzODVFMDNGQUFCMDJDRTIzMTk0NDBGMzIKLToxMDNBQzAwMDIzQjk3MzM1OTU0OTAxRTdDQTVCNjVGRkM1MDAxRjlCQTQKLToxMDNBRDAwMDk2OTc2MDdGM0ZDQzk2NzgzQzg2NzlENjcyRkY5RkRBQzYKLToxMDNBRTAwMDVGNjZCODZBNTNCNTMzRDg3RUIyQUFERjU2RDkyRjcyNTMKLToxMDNBRjAwMEYzRjZENUZFMzdDM0Q1RjQ2MURBQ0YwRTZBREYxQ0IyMTgKLToxMDNCMDAwMEZEQzE3NkQ1N0VCQ0FGMTExRjZGNDMzRTE4Q0VGRkI1MDkKLToxMDNCMTAwMDVGOTZBNzFCNkM5RTVFRjQ3RkU5MThEODk1MTQwNzA2ODQKLToxMDNCMjAwMEZBOTg4ODZBMjNGRjY5QzNGOTc5NTM1REIyREEwRkE2NjAKLToxMDNCMzAwMDYzN0U5MjFGQ0Y0N0Q2OTBGQzQ4NjAzRThBREY1OTk4M0IKLToxMDNCNDAwMDg3RjJENzQ3NERFN0YxQkI2MEI5NzExMzc5QzE5ODg3MDgKLToxMDNCNTAwMEExREUwMEZEQTlGMjU3M0ZDMkY3RDM0NkMxRUU0MjNDQjkKLToxMDNCNjAwMDgzQzdGM0ZGOEFEREFCODkxQ0RGNEJGQTczNEFCODY0NjUKLToxMDNCNzAwMEI4ODFERURCRUE3NTI1RTNGNzFCQzIzRDM1MThFQkZFQTUKLToxMDNCODAwMDNDQkIyRTc2M0RFODNEMUIzMEM2MDg3Qzc2MzVCQjcxQ0MKLToxMDNCOTAwMEJFQ0Y4NEZCMjRBNzhGRjU3MTFBQTIyN0NCREQ5NjFEMUIKLToxMDNCQTAwMERBMDA3QUIyRTg1RDY5QThGNzVBMzRGMjM5MkZGQ0ExM0QKLToxMDNCQjAwMEJGNkNCRDY1RTdBNjEwRkQyQkZBOUIwMjVCMkIwMDhGNDcKLToxMDNCQzAwMDAwQkE2RDk1RjVFNjgxRkU5NjI0RUVEMDA2QjQ2MzMxMTkKLToxMDNCRDAwMEI4MEFBOTNGRTU1Q0EzRDI1RkQzMzdFQjZGQUJFQ0Y3MzQKLToxMDNCRTAwMDUyRkFCM0RFQTMxRTlGNTVFRkExRjE1OUU1RkQ0N0U5NTcKLToxMDNCRjAwMDZGMkI4RTJGMDQ1RkREQjQzRkQ5OEUxRUU4NkZBOTdBM0MKLToxMDNDMDAwMDdDNTY4Mzg3QzY2N0Q1NzJGRkUxNDA3RjREREZBQ0JGMkUKLToxMDNDMTAwMDM2RjkxRTkzNERFNkQzRTFDRUZEMzcwRTlDQUI3NjFBRjYKLToxMDNDMjAwMDUxQUVCNDI5RkU0MDc5N0ZCQjE0QjRCRkFEOTZGNzM3Q0YKLToxMDNDMzAwMEU1RkI0QjcxRTlFNERGQkRENDMzREYxODZBNUZDM0ZERjgKLToxMDNDNDAwMDhDQzk3QTI0OTNGNTQ4MjZFQjkxMDhDRjk5N0FBNjNFNDEKLToxMDNDNTAwMDFFRThCMEYwQzVCNkY5MjJFQ0UzNzMxRTNBMzMzRTE1MDgKLToxMDNDNjAwMEUwMTkyRkY2Q0YxNzYxNUY5QUYzRTI5OTAzNDlGMEM5ODMKLToxMDNDNzAwMENCMkZCRUNDQ0I3Rjc4RTY0QTMyOTQ5QjdDRUZDRDJGMDYKLToxMDNDODAwMDAzMzgyQTk2RUZDNzBBREU0QUJGQjc4REUyN0FBM0JCOTQKLToxMDNDOTAwMEUxNzNFRUJGMDRGOThBRkI1NjYzQUE4N0ExN0ZGMTQyNjQKLToxMDNDQTAwMDcyN0ZENDMyQThFRjRFRTlCNzJDMEYzMTJGNEFFQTZFNUIKLToxMDNDQjAwMDM4NEY3RTQ2MTQ3OTI4RkZFNkUxQkY0MEI0Q0Y1M0VFN0IKLToxMDNDQzAwMDY3OTRBQkVGNjc0NDQ1NkQyMkZEMkY4Q0Y5Q0QyOEVGNEIKLToxMDNDRDAwMDIyOEMwRUJBNEZGOEQ2MjhCRTFGMkM2NEY2MEE2RTM3MTcKLToxMDNDRTAwMDQ4NTlGMjM5MERCQUNGMzFCRjU4NkVENzdDQ0JDRkIxMUUKLToxMDNDRjAwMDdDQTFDNkIxMUVFREQ5REY0RUFBOEE0N0Y1NTgzOTE3MDcKLToxMDNEMDAwMDk3Mzc3ODdGNzJEN0Y1MUI5QzFGMEVCRTNGMzlFNzIzOEMKLToxMDNEMTAwMDgxRUJDMjIzQjhCRkE1M0I1N0UyRjdCOTAyRkM4NkE4RTYKLToxMDNEMjAwMEY3MEUzNzlGQjVBM0I4N0QzRjM4OUYwRTNFOUYzMTBFRUIKLToxMDNEMzAwMDNFOUZFNkZFQThCNUIwRkVFRUU4N0VDQjEzQzQ5RjVEQzUKLToxMDNENDAwMDIxRTc2QkM4QkMwNkNENUZGRDI4QTZEODc5NUFBNEI3NzkKLToxMDNENTAwMDlCQ0RCNzMyQUZDQUY5QzE0NjQxQ0FBMkZERUE0Rjc5M0QKLToxMDNENjAwMDJBRkQ4MzMxQkIxNDJBOEU4M0Y0MTlCOEJGRUE2RDRFNDUKLToxMDNENzAwMDg2RkUxOTVEOUMzRDA3Q0Y5NTM3RkU0NTFCRjI1Q0RFNDQKLToxMDNEODAwMDZFNzkzRUQ2NDY4NUQzQjlDRUM2MjgzREQ5REJERDUxMDYKLToxMDNEOTAwMDMzMTlGQTk3NDVEMzc0OUE5N0IyQTg3MjNBNkZBOThEREUKLToxMDNEQTAwMDY1RUQ2ODhGMDY5RjIzRDc4RUI4OUJDRTAxNjlBRDY4RkQKLToxMDNEQjAwMDQxNDAzQTcwMkVEOTYxQTRGODg5QjlFODg2RTdDOEM1QjAKLToxMDNEQzAwMDlCOUQyMzhGOTlDOUNGOTE0N0U5MjU3NDU5QjQ0NUVBNDIKLToxMDNERDAwMDQzOUUyMzdGNkMxNERGRjdCQjcxM0M3MTg4M0Y4QzI3QjcKLToxMDNERTAwMDZENzAxQ0EyOTlDN0QxMzEzRjAyRjJGNTY2MTcyMzdGOEYKLToxMDNERjAwMEJBM0NERUM3RTQ3NTUwRUExQkNDMUU4NkYyNDBBQkI3NzYKLToxMDNFMDAwMDRCQThBNzY4QzNGOTNFNjFCMDY5NTg0RTA4QkZDOEY3MTAKLToxMDNFMTAwMDQ3RTlFOEZCNEY3MkNEMzRBRjFBMjNEN0NCRTdGQzVBMDIKLToxMDNFMjAwMDA4RTk0RjdBNzU5NEUyNEYwQTRENjdDM0QxQzkzQzBEM0EKLToxMDNFMzAwMDNGNDdBN0YwRTEwMjkzOUVDRUY3MkQzMEQ5NEFEMTBGMkMKLToxMDNFNDAwMEIyMDAwOEVGQjM5ODgwRkFCNzJERTJGNzgxNDVCQjBEQjkKLToxMDNFNTAwMEU5RTczNzUzNkVGRkY5NkYxOEJBRjlCOTdDM0UzNTQzN0QKLToxMDNFNjAwMDQ3RjdFMzRFMDlDQzYxOEYxOTdBN0VENUU5OEM5RTg2OUYKLToxMDNFNzAwMDZFOUFCQjY2OUQ1OTg3RUNGN0UyRjJFRjE1NjE3Qjg2N0YKLToxMDNFODAwMEUzNTM3NTE2ODlFQzlGNzc0NkExNUNBODRFNUIxRjBGMjQKLToxMDNFOTAwMEYwQTJDQTQyMURERERGOTRFMzQ0RUUwODJFQzc5RkQxOTUKLToxMDNFQTAwMEJBNEU4RUEyNzhEMUU3NTFBNTQ4NDc2MjdGMkFFMkEzOTUKLToxMDNFQjAwMEM0ODkwMkVBQkQzNzJBOUVFQUNERTFEN0M1QTBERTE4NDMKLToxMDNFQzAwMDk0RDM2NzdGRUY2MkI0MUVCNjUwN0ExMkRBNEYyQzMwNkIKLToxMDNFRDAwMDZFMjNDQjA3QjRBMzAyRjNEMTdFNjIwMUVCMjcyQzJGMTQKLToxMDNFRTAwMEI2RjY4NTkwMTc0QTlBNjBEQjkyNTIwRDdDOUU5MEQwNzAKLToxMDNFRjAwMDQyQTk5MkZGQUM0MzVCRUUwRkIxQUU1N0U1NzVGREM2MkMKLToxMDNGMDAwMDc2NEMxQjYwM0I3MUQwOEUwMUZCRTUyQUNFREIxN0Q1Q0EKLToxMDNGMTAwMEE3MkNFMzYxNDg3NTY1MTdDOThFQjFFOTE1M0U5Mzg4RjIKLToxMDNGMjAwMEJGMDY2MTFFQUYwNEZCNDU3NURFQjBENUVCNEJBMUZCQjAKLToxMDNGMzAwMEZFRjIzODZEMkJENjQ2QTMxRDAzNTUxQzQ4OUZEQkJDRjMKLToxMDNGNDAwMDZEMjk2NTk5ODNFM0M4Q0U5MUU5MTM4REI2ODlBODE3QzkKLToxMDNGNTAwMEYzNUY3MjVDQ0IwQ0Y0OTcyNDlCMzQ3NDNFMDEyNjUzQzAKLToxMDNGNjAwMDc1MkY2MTZFNTlGNEI0MzgzNDQ1RERDQzZFOTJEMDJFODUKLToxMDNGNzAwMEVGMjUzRDNGRTFCQTk2RjgyMEUxRjA2Mjg2NzFBQkE0RUYKLToxMDNGODAwMEI4NzYwMUVGMDMwREY0MjNERjZGQUU5N0UzQjk1NzVDMEEKLToxMDNGOTAwMDY1MzQ4RTA0RUJDMEZFQ0VDODBFOERGM0NENDU3OTc0MkEKLToxMDNGQTAwMEU1Njk4RTUxQzI4RkQ1RTVDOTcxRkNEQ0MyRkRENUUxNTIKLToxMDNGQjAwMDdFMDlFODNBQTlCNjU3NDAzODAxMEMzOEY0QzUyNzVDQTkKLToxMDNGQzAwMDZGNEM2QjQyNzlGMjVBMDRGOThCQjU2RDk5Q0MwN0YyQkMKLToxMDNGRDAwMDI3NTU3NDQ1RTVFMDNDRkJBNUZGQTZDOTkwMDcwQkRGMUMKLToxMDNGRTAwMEFEN0MyMDlDRjRCMzM2QTE2NTA2RDkyNUY3Njk1ODI4MjUKLToxMDNGRjAwMDNGQ0Y5ODFDRUVDNzI4QzhFMUZDOUY2MDZCNERBOTFFRkYKLToxMDQwMDAwMDg3RTlEMzQ0Mzc1Rjk3Q0Y2NzkwQjMxREY0RDkxMTlGRTkKLToxMDQwMTAwMDJERkE1ODFDRDQ3QjlBNzVBMUU5NzM5QkRDRUZDMDdFMDYKLToxMDQwMjAwMDIxQ0Y1RjE4NzMxOTkxN0ZCNTgyOTMzQjM5RjdFRURCOEYKLToxMDQwMzAwMEI3Q0Y4MkNFMTM0NkU3NTUzNkM5N0E4REQyNEU0NDRFNUQKLToxMDQwNDAwMDNCMTU0NkQ4MUQwQ0NGNDUwQTY2MDdERjA3Q0MzRTlCQzMKLToxMDQwNTAwMDBGRDZBQkY5MkI2RDQ4N0JFQkMxMUM3OTFGNDk2QkIyQjYKLToxMDQwNjAwMDYxRkRCMjRDQkIwREZEOTRDMUY3NTUxQUQzMjZEQTcwMzEKLToxMDQwNzAwMDdEMUE2NzBDRDBBOTMxNzA1RkU4NEVDQjdFMUZDRjUzRkQKLToxMDQwODAwMDk5N0E3NDJDRjAxQzU5NzBBQUM3NzMyMUIxMzcyODk3RkMKLToxMDQwOTAwMENGOTczNzFERTJFNzQyOUI0QzQ1QkQ3ODBFQTFDOTE0NkUKLToxMDQwQTAwMDU3NDRDN0ZFNENGQzlDQTk1MkRGNjQzQTQ2RjJERTY0REEKLToxMDQwQjAwMEU3RjE1NjEzRUUwRjAyQTJDN0U3QTEzQkVEMThDRDgzM0YKLToxMDQwQzAwMDUyNkY1QTBFOTdBQjI2N0IxN0MzRkI1QkUxNzYzRkQ1NDkKLToxMDQwRDAwMDBCMTM5RDNFMERFMDFGMTZDN0U4RkU0Rjk4OTFGMzU1NTgKLToxMDQwRTAwMDA0QUM4RjMxODBFRjk1N0U2RkNCRDFEMUJDMzUyNTE3RDUKLToxMDQwRjAwMEY1OTYxMDdFMjJERTA0Njc0REI2MjIxQkVEREIzOERGMUQKLToxMDQxMDAwMEQwNkY2M0I0NDJERjlDQUYxRjk3RTc1QjY5QTc1MTNFNTYKLToxMDQxMTAwMEZGN0E0RjQzQ0VGQ0IyNThGNDEzMzlEN0U0NjBCQkE2MDQKLToxMDQxMjAwMEU1NDZCNDgzQjQ5MUUzNkZEOERFODY2MURCNkI1RTI4MkQKLToxMDQxMzAwMEI3RjczOEYyODUzNkIyQzg4Q0VERTk1MDVFODRBMEMzN0IKLToxMDQxNDAwMDY3RTQ3NkZFNTdFM0VEMzBCMzc0REY5NzYwNUEzMDlGMzMKLToxMDQxNTAwMDJEOTRERUEzQTQ0NjhDQTM4RjFCRkFERDM3OTZCRkVCMEMKLToxMDQxNjAwMEQ0N0UyNDkwQkY3QjcxRkMyQjkzQ0YxRTJCQTExQ0VFMjEKLToxMDQxNzAwMDNGREEyRURCMjc4QTlENjE5MURCREUyRUYwN0JFODNFNjUKLToxMDQxODAwMDIxREM0RUVGMzZDODc2ODcyNTRDM0QwRjgzRjc0MUY5ODkKLToxMDQxOTAwMDNBNUNBRUUwRTdFNjJFQzczMThBNkIwNEYzRjNFNTc3Q0QKLToxMDQxQTAwMDNFOEEwRUI0NEY1MEVGNzM2NDczQkIwNDUzQjQ0QjFDODAKLToxMDQxQjAwMEIyOUYwRDYxRjQxQkEwOURBMkYwRkQ4MDVGQjc0MkZBOTMKLToxMDQxQzAwMEE3NUIwMDNGMDNDODZGMERCNDJCMjQ3Qjg4QkUwREM5Q0QKLToxMDQxRDAwMDdENjlDOEU3QTlGMjNCMDU0M0Y2RDc1QzJFQTc4NTQ3NjIKLToxMDQxRTAwMDNGNEI0M0ZFMkU4QkVCNEZDMEVGODJGOUZDODU0N0FFNzEKLToxMDQxRjAwMDI2RTA3ODVFOTgzMTcwQ0U4NkUyNDNBQjE3QTdGMzdCNUEKLToxMDQyMDAwMEQ5QzdGRjFDRUQwQUQxRkVDREVFN0Y0NTlERERCNDg2RkEKLToxMDQyMTAwMEY0QzBFNTVDMEZGQzVCREYwN0RCQkU4Q0VCOUQxRDgyMTEKLToxMDQyMjAwMERBRUZBNENERTU3QUU3NUZFNDdEQ0M3QTU1QTRGNzJERUIKLToxMDQyMzAwMENFNjVCOTJFMjAxRkI2MEFFNkU1Mjg3RjUzMUZFMUU3QjkKLToxMDQyNDAwMEU2NTYzRjVFRkZEOTAzMjFGODQxMThFREZBNzM0RTgwMjAKLToxMDQyNTAwMDNENUNEQ0FDMjczRjVBQTMyOTdEQzQ4REUyMUNDM0FGNzMKLToxMDQyNjAwMEIzODdDQjcxNzk3RDRCMUUzNUYyRjMyNDJFQUUxNzVCRUQKLToxMDQyNzAwMDVDRjdEMzM5OTVFMEYzMjNDM0Q1M0IyNENCM0RBNUJFRjIKLToxMDQyODAwMDAxREI0Nzc5NjI5QTQ3RkU4MDRCNjgyM0EwQkY0RDk2QjkKLToxMDQyOTAwMDdCQzE3ODc2RTI2NEM4RjM2MzA0QjkxMjc1Njg0NTE4ODcKLToxMDQyQTAwMEI2QUI5M0VEQjFFRDhBM0ZBM0EyQzhFODA4Rjg1RUI3QkMKLToxMDQyQjAwMEI4Qzg1ODFBNDAyRjhEOEM5RkRGMEQ2RUZGQ0VEQzAxRTEKLToxMDQyQzAwMDdENUFBNUFGRTg3MDlGNDVERjUwOUNGOEE3MDEzOTQzQTAKLToxMDQyRDAwMDhBNjVCOENBOEU1MUZBMEYzRTNGMTY3MDVFMkM4Q0YzNzkKLToxMDQyRTAwMDI5Qjc2NzVBRjFEQzE4RThCNzZCMkI5NjhGQzRGOTZEQzQKLToxMDQyRjAwMDE1NUQyRjU4NjExRUZBM0YzMEQwMzlFNzBGNjVCRUVDQ0YKLToxMDQzMDAwMDkzRjk3MkI4RjVGM0IxNDNBMDhDMzFGNjA0M0I4Mjk3NzAKLToxMDQzMTAwMEQ2ODA0RUM2OEY0MEZFNjhDQ0Q0OTRGQjQzOENCMzVDRjEKLToxMDQzMjAwMDFFNjcwOEZERkFENkRDQUZBNzVGOTdFNjg2RDBBRjUxQ0YKLToxMDQzMzAwMDdGNzYwNEM1MUYwMjYxRDQ5QjFEMjFGNEVCMTM4MkVDMzAKLToxMDQzNDAwMDBGOTBDRkVEOUNEMDQ5MUQ3RDMwMEYyNzZFMUQ2MTZGMDIKLToxMDQzNTAwMDk0RTg5RTkxQzM1RTA0RjZDMzhCNjczMjUxNkY5RjIzMkUKLToxMDQzNjAwMDBDQkNDNzIzREIzMThDNjBCMDIzMTYyMjVFNzM5OTY3QzcKLToxMDQzNzAwMERGMDMwMkM1NTE1QUVFNDhBM0VFMDQ1QzhGOUJBREE3NDQKLToxMDQzODAwMDI0RkIxMTM3QzIzQTYxRENBMUY1REFCMjE5QTFFMjBDQzMKLToxMDQzOTAwMEZGMzg0MDI3MjhCQTAyRUYwN0MwMkEwNEM0OTU4NkM0MTQKLToxMDQzQTAwMENCODJFMjYzMTg0RTE5MzhGRkFCMUQ1QUZGQUU2Mjc1MUYKLToxMDQzQjAwMEZDNkFFMzM1RUVCRjMwQUM2MEZFMjcwNDNDMUZBQTJFM0EKLToxMDQzQzAwMDlGNUZBRTBCOEVDRkE5RTI1QTBCOURCQTYwN0M3Qzg4QjIKLToxMDQzRDAwMDZGQjI4QzZGQ0FCNjA3MjkwRTNFMkQ0NUU0RkRBQzY0NjIKLToxMDQzRTAwMDY0Q0YwN0M3QkQwQzg1QkQwRTJERUFDMzE1OENGNEY3NEQKLToxMDQzRjAwMDYwM0YzNjlFMTcyNUZGNUUwNTYzQ0YwOTc0REU1QTdENDgKLToxMDQ0MDAwMERGRTRFOTU5RTdGOEZCMUMyREU1RDg4RjJENTNDMzUwQTUKLToxMDQ0MTAwMDNGMEVCRUFGQTBDNDlCRjA5ODRDRTA3RDY5RTVERDIyNjUKLToxMDQ0MjAwMENCNjIwREUxQzc3Q0I3NTNCOUUyOTc4N0ZBQTYxMjRCNkUKLToxMDQ0MzAwMEMwQjlFRTU1NkNBMDNFRERBM0YyODUxRUY3RDZENjU5NjUKLToxMDQ0NDAwMDE0RUY0RjFDRUYyOUVDODJBMjI0M0JBMzc5NDhBQTY2MDMKLToxMDQ0NTAwMDY0MDdDMDNDQThFMkZBODY5NDVEMzRDRTRCMzU4Q0M1MjcKLToxMDQ0NjAwMEYyMzhBMEFBM0MwMTc2NzBBNDRGMThCRjJBQ0UwRkUzMDEKLToxMDQ0NzAwMDU0QzFDMTc2RTdDREVDNEQ0MzRBRTYwREU1RjlDREZDREMKLToxMDQ0ODAwMDhEMDYzOTVFRjg0NjZFNjQxQ0U5M0I2M0Q4MThENDc3MTQKLToxMDQ0OTAwMDJDOEI5RkE2RjVCODA0RUI4MTdFNTkzNDg0NDJDNTAzNkEKLToxMDQ0QTAwMDM3NDNGQjY4MDdCQTkwNUZFMkQxREZDNDU0RUZDQTMwRUMKLToxMDQ0QjAwMDg3NDhGN0M5ODQ2MjhFQjMxMEVCRTRGMUUxN0M0NkZDRDcKLToxMDQ0QzAwMDZEMDgwNzk1MEJGODU5OTg2QzcwRTBCQzFCMEMwMEMzODUKLToxMDQ0RDAwMDkwMDUzRDMzMjY0MEJFNTZGNjM3QUYxNTk4ODgzMDMzRTkKLToxMDQ0RTAwMERCOEREQzRGQThCQzZCRTNBNzc3NkQ4NkVCMDc3NEZGMTEKLToxMDQ0RjAwMEJFMzBFQ0NGQzdCRjUzRkExOUYyOEVEQjBEQkUyN0ZCREYKLToxMDQ1MDAwMENEMUNGQzdEMTlGOTFEOTVGRTg3OUJGRkUxREU2REZCM0YKLToxMDQ1MTAwMEMzRDQ3NzI3NzBCRjY3MzJEMTZCRTUyMEJEMTJCQzRDODYKLToxMDQ1MjAwMEE2NDdGQzFFRTVDMkJENEFCMUFENzcwQ0RFMzczQ0ZCQTkKLToxMDQ1MzAwMDcwODQxREZERTAwM0UzRjBEREE5RTVFRkQxRkQ3NUVEMkQKLToxMDQ1NDAwMDBERTA2MTkzNDhCRTBGOEM0QjZFRUZBRjFEMTdGRDAyNUYKLToxMDQ1NTAwMEU0REEwNkJDMzQ4NEU3NEYyQTE5OUQyN0IwQjg0QUNGNjUKLToxMDQ1NjAwMDg5NzQwRTAwQzZBMDkyMTMwMUVGMTM0MDdCMUIwRUYxNUQKLToxMDQ1NzAwMDczQUY1QkYxOUQwQjcxQjA1RkQ0MkJEMDZFQjA1NTQyMjEKLToxMDQ1ODAwMDdFMDgzQjQ4NDlBQjE5QkYxRkFDRTBENUE4MDczRDFBRDAKLToxMDQ1OTAwMEU5NTJDM0Y1RThEOUE2M0UxMUNGMzVFOUUyRkE0NUU0ODAKLToxMDQ1QTAwMDFGRTc2ODJFQzcwN0U4Mzc5RUQxRjkwQjZEOTI3Q0NFQzYKLToxMDQ1QjAwMDcxQTRDNERGNERDQkU0RkI5QkQyQ0Y4NEQxMUE1OUZFNEEKLToxMDQ1QzAwMEY3RDJGQjQ3QjMyMzRFRDU0Qjc2QzZGMkY2QzUyRjQ0NDAKLToxMDQ1RDAwMEZGRkNFQzExQTdFQUQzMDAyRUQ4NjdFMTcwRDJBOTJCMUIKLToxMDQ1RTAwMDY5NjZDNkVDRkJBQzBCRDE5RjNGM0JFRkQ0OTU3NDgwNjIKLToxMDQ1RjAwMDhCRjZEOTc4RjkxNDQ2NDZDRUY4N0QwOTBCRDE5RjMxNTgKLToxMDQ2MDAwMDYxQjQ1OUQ1RkU1QjM4RDdGMURGM0NENTFBMzQyMUNGRTAKLToxMDQ2MTAwMDYzREYzNjVBMzk0RkM5RTgzRUFEQjNGMzk3QTczMTJFNjEKLToxMDQ2MjAwMEU5NTRGNjQ3ODcyRTQ4REY4MTIyMEJERTIzOTM3RjcxMDIKLToxMDQ2MzAwMDUxMTQwRjlEMjlEM0Q5OURGOEVFNTIxNEZBMkRCQjY4NjEKLToxMDQ2NDAwMDdFNDcwREZBRTk5RkZFNkJGQ0Y0ODI0Mzc5OTdDQUNDNTIKLToxMDQ2NTAwMDJBODFGRjFCMUI5ODJCMkMyMzgwRUU5OTQzNzM5RDlGNkYKLToxMDQ2NjAwMDAzQTZCODgxODI4RkQyRkYxMEJDNjA2OUM1OTg0MEJDOTgKLToxMDQ2NzAwMEI2NTEzQjBBNUUxNzBBMERBNDg3MDVDNzg3MkUwOEZEQjEKLToxMDQ2ODAwMERCRjE5QzU0QzRDRkQ2MkZDMjc1QkExMEQ5OUYyQTAwMzMKLToxMDQ2OTAwMDFDOUVCNzlFRDZFRDQyN0NGRjc2QzExRTAwRUJGODNBMTkKLToxMDQ2QTAwMDU2RUYyQkEyNzVGQ0EzRDY1MTNEN0EwMkJFREJDNURGQzcKLToxMDQ2QjAwMDZGNjg5NkUzNTA0RkM2QkI3QzY4OUYwMURERDFCOTMyNkQKLToxMDQ2QzAwMDVGOEE5RUZDNDg2NUUzMDU0N0EwM0ZCMDZFMzRGN0NCOTgKLToxMDQ2RDAwMDVDOTJEMzY5ODYxNkNGNDlBMDRCRjcwMTgxQUQ4NUZBNkMKLToxMDQ2RTAwMEVFNkI5N0Y1QTg5RkNDRUUzQ0EzNDczREJBRUVDMDE5MDAKLToxMDQ2RjAwMDNEREU0QkFENDMxOERBQTlEQkE2Nzc4NEQyRkZGRTMyNEMKLToxMDQ3MDAwMDVBQUJGMjk3Mjk3NkQ3RDE5NEVDRjVFODc3QUJBQjE2OTQKLToxMDQ3MTAwMEU4MUVERUVBRDdCOTFGNkVGNTMyMUMyNTYzNzdERkIyREIKLToxMDQ3MjAwMDlGRkNCODU1Q0VFRUY1OTgyRTY1N0Q0N0YxREQ4OEM1MjYKLToxMDQ3MzAwMDJFQURFQURDQzA5MjlBMDg1NTNDQkVDQTEzQUI4Mjk3RjQKLToxMDQ3NDAwMEI2QzBFQUMwM0VCQkI0MjE0OUY1MURDMzVEQ0Y4MkVGQzAKLToxMDQ3NTAwMDI4MEVGRUQwRkVBRjkwRDc3MUIxNkQ3MzJGRkFCQjE2NDUKLToxMDQ3NjAwMEJCRDQ3QUNDRUNDRUI1NjIwQ0UyRUQxMUVDMUFDRUZFRTUKLToxMDQ3NzAwMDEyN0VCNzg0OEYxMEQyMDBCRDBBRTY3RDVBMDdEN0EzRjgKLToxMDQ3ODAwMEVBMkE4QzY0OUY1NDIyMENGMzVBNTlBQkY1RTM5MzczRDUKLToxMDQ3OTAwMDQ3NTNGNDU0RUVFRTEwQThEQzJEOTdCQjZCMDQ2RTU3MTQKLToxMDQ3QTAwMENCRjI3NUE5OENFMzkyODMyN0E3RDE3NTUyOUZBMzM3Q0IKLToxMDQ3QjAwMDMzMDBERkE1MTVFNUU3ODgxRTY1N0Q0MzE5NTc4NUM0REQKLToxMDQ3QzAwMEY1OEQwRDI5RUZFOUIwRERBNURGMTc1ODZDMUE4RDRCN0IKLToxMDQ3RDAwMEE1NDcyREE5NTFDMzU1MUU1RDkwOUVENUE3NDNGOUJEOTAKLToxMDQ3RTAwMEI0NDE5REZGRjNEMUYyQkU5RUM3RjI5MDlGREUxODJEMUIKLToxMDQ3RjAwMDg4OUYxODA3RTEzRkE1QkM3NzAyRUY4MTVERDIzQTBGOTEKLToxMDQ4MDAwMDIyN0RENkVBQkIwQTcwREZCQkE0NzUxMUFDOTQ0MzdFNEYKLToxMDQ4MTAwMDFEREZBRkI4QkVBMjAxQ0VDM0VGMUI3NTBFMzNERUE3RkUKLToxMDQ4MjAwMEY1QUQxNDg4NkU5N0IwMDBCRDI3NkRCMDNFQzFEQUExMUEKLToxMDQ4MzAwMDcwQkYyMjc3QzM5Q0Y1RTQwRjNEMjg5ODUxNkYyODEzNzEKLToxMDQ4NDAwMDFEMjJERTgzNkYxQ0M2OEY3RTUxRTY4MzEzQUMyRjFGQTMKLToxMDQ4NTAwMEYxQ0E0NjIyODU3NUNBOUUzRjgyRjY5OUVDQjc5NkY5NTEKLToxMDQ4NjAwMDMwOEU5NDNENEUyMEJGQzQ5RDgwNzE0MzExQTYyMkM5NTUKLToxMDQ4NzAwMDkxMzlCMDM3ODQ0MTlBQUQ2REFGMjBGOTNFNTY2RkU2NUQKLToxMDQ4ODAwMEVGNjJEQTU4QTBCQzcwRkMzMzEzNzBCRTEwNzVCMjBCMjcKLToxMDQ4OTAwMDkzN0JFOEZEQkQzOTZEOUIyRkEyNUNDQ0NDNzAxNDNEQTEKLToxMDQ4QTAwMDA1RjgzRDE5QzZGQjdGRjI3NUMxQkYxNkRBQTlDQjNGRUIKLToxMDQ4QjAwMDQ2RjJEMzBBRTQ4MUZERDZEOTY0MzlEQUExRjZDRjVBOUIKLToxMDQ4QzAwMDUxQUUyMUMxQ0NDQUE3N0UxMzk0RjgzMkQwMTVFREMzRTYKLToxMDQ4RDAwMDVEQTVBNDlGNThFNTdFOUYyRDk0QjhEREZDQTA3QzJFOUQKLToxMDQ4RTAwMDhERjlENkUyRjlGQUJFRDE4Q0YyOTVGNDFCRkJBQkNBNzYKLToxMDQ4RjAwMDA0MzEyODVFNTAzNzFBRTY3OUE1QUQ0Rjc1REVFOTVCQzUKLToxMDQ5MDAwMDZDQkYwMUU5MkNCODdEMThCRTJBNUUzOTREN0IyRDhBMUIKLToxMDQ5MTAwMEVFNzcxRENDQjBERUU4RkU5NEQ2QTgzRUI3QTQzMzg3NzAKLToxMDQ5MjAwMDA3RERCQjUzQ0I5RkQ5RjZBNEEwN0I3NzE5NDFGN0VFRTcKLToxMDQ5MzAwMEYyODJFRUREQTlFRkY5MkQ3NDRFMDlCQTc3QTdCRUU3MzIKLToxMDQ5NDAwMDY3QjBDRDU0RDUwRjkzRTZBOUUwODg5Q0JCNTVGNTIzRkQKLToxMDQ5NTAwMEVEQ0JENUU3QUU4RUZGQkM0MjQ4Qzc3NzA2N0Q3RDJFRjYKLToxMDQ5NjAwMDk4ODc2NkUwOERFMjk4QzE3RDI0MkYwQTJBNDMxQTNFN0IKLToxMDQ5NzAwMDJFQ0M4NDY5NzNBMUExMEJFOUE0Mzk5MURCRTc4NkUzMEUKLToxMDQ5ODAwMDBGREJCQUEwMURFMzg4OTc4Q0U4NkZGQzg5RTAyRjQ1MDgKLToxMDQ5OTAwMEZCQzQyODlGNTMxOUZEMTg1M0VEMzNBRjE1NzBCRTUyNTkKLToxMDQ5QTAwMEQyREJGMjVDQjNGMzYxN0RGMkY3NEE0OUZDMURFMERFMzUKLToxMDQ5QjAwMEQxQjgzRTQ2N0M2QzAzRjlFNjU1N0VBRjc4QUM2QzQ3QzcKLToxMDQ5QzAwMDI4RUQzQzVGNTgzMjM1MEZCRUNGN0ZDQzMxODNFMkVDMEYKLToxMDQ5RDAwMDFERkM3RUYwNEUzRDhGQTdGODVFRTVFNzVCRjMzQkZBRUEKLToxMDQ5RTAwMDM0OEUwMEZFM0U5OUM3RjU5MDY3OUNBNTE0MUZBOUVCNzUKLToxMDQ5RjAwMDg0NUQxNkY5QTlFREFDMUVFRjY1RDQ3NTc2NDdFMTdFQUUKLToxMDRBMDAwMDU2RTAzQ0FCNDdCRkM5NjBCRUJDQ0Y4OUZERTE2OEFGOTMKLToxMDRBMTAwMEZGQUMzRDc0M0M2RDZEOUU5RUY4RTM5ODJDRDdBQjFFQTkKLToxMDRBMjAwMEQ2NzJCQjkxMzk2NkUxQjk3MTQ1NUU1N0VERTdFM0FCRUMKLToxMDRBMzAwMDVBQThFN0U3NjAzMTFBMUQ0MjZFODM5QzNFQUI5NkMzQ0QKLToxMDRBNDAwMDBFRjU3RTcwOEI3RjNEQ0EwRTkwREZBQTdBNEIxNzRDMTUKLToxMDRBNTAwMDI3QkJCNzEyRTQzNkYyMzFDODczNzU3OTcyMTNDOTE3RTAKLToxMDRBNjAwMDkwRTdBQTdDNzdERTgwM0NDRkJGMEVERjlENzY2QTQyNUUKLToxMDRBNzAwMDhFRjM3MDgxNDhGMzc4REEzNTk1RTZGRjE5OTg0N0Y0OUMKLToxMDRBODAwMEE3M0QzMzY0REVGODdDREU2Q0JFNUVDNkI1MEY1OEI3NUEKLToxMDRBOTAwMEUwN0FCRjJFRTBFQkY2RjIzMEYyRkE3RDc5NUQ3NzBBMkMKLToxMDRBQTAwMEJENDUyODRDRERDRTcwQTJEQjI1NDY2MzA5OUU3QjM4RDAKLToxMDRBQjAwMDk2RjI2NTEzQzZFMUFBN0UyRUQwM0RGRDdGRUIzRTZFRDkKLToxMDRBQzAwMDQxRkQ1RkJGRkZBODA1RkQ2MUVFRjZBMzE2QjA0RDU5OEQKLToxMDRBRDAwMEFENEU1QThCN0EzQ0QwODUxREY1OUVCQThFMkVDMjdGODQKLToxMDRBRTAwMDY1RkJCODZFQ0M1RkQ5MjFEMEZCM0RFRTAzMTdBN0QzOTEKLToxMDRBRjAwMDM4NTk1RjEzQzYwQjc3MEU4M0Q3OEZGMkI4RkVCRTM3RDcKLToxMDRCMDAwMDRGRTI3RTMwMTdGNDg5RkJGRDAxODNERjJGMjAxRDgwRUIKLToxMDRCMTAwMDVDNDJCQzVFMTdGMEU1MzVCNjczQTNCMTIyOTQxRUY1NzYKLToxMDRCMjAwMDZGRjI3QzFGRDlBODY3RThBRkFGODVFRjcxMUNDNzUyNDEKLToxMDRCMzAwMDhFRTk4RDQ4NDdGQjA1QjJCNURERUQyNzE3NDY2MEZCRDIKLToxMDRCNDAwMEY1M0E4NkZBODU4MkRGMTcyOUJEMUZFMkY4M0ZBOEQ2MUQKLToxMDRCNTAwMEExQTc4MDM1NTY2QjY5QkUzRkE4RDc1MjNCREFGQjc0REMKLToxMDRCNjAwMDA0MkY1RUMxQ0Y1NTFDQUVGRUE4MjkwOURBRkRBMDU2NjAKLToxMDRCNzAwMEEwN0IwQzUzRUZGQkYzMzE4NDE3QUZFMEZBNUEzMDNEQzIKLToxMDRCODAwMDJCRjQxQTRDOUZDMUY0M0I4NDRFNkJCRTE5OUQxRUM5NzkKLToxMDRCOTAwMDkzRUZENUU0QjEwMkRDRTc2MUREQTc1OTkxN0UxRUUxMTgKLToxMDRCQTAwMEY3RTMyQkFFMURENkExN0YzM0JEQzk2QzdGMDJFMDMxODgKLToxMDRCQjAwMDVBRkY3QTBCQ0E4OUMzQkNCQ0IwNzY4N0MwRTU4RDc0MzYKLToxMDRCQzAwMDM3RjI2MTUyQjM5RUExQkRGQjdFMUU5NzRCRUZFMzdBOTUKLToxMDRCRDAwMEM1RTNEMEZBMDU4Q0FGMzFCMTM3MURFNTUyOUExQzRGQjEKLToxMDRCRTAwMDdBNDVDNzJBRjY1MzVDOTBDQjlCMzFBRkQ5NTRFRjk2RTgKLToxMDRCRjAwMDM3RTU3MUJENDM5MTgzNDBFNkFFRkRFNDk3NkQ0RkM0NDgKLToxMDRDMDAwMDdCMTQyRkNCRTc0MTUzRTVGNkIyMzJGQUE3Q0Y4NUY0RjgKLToxMDRDMTAwMEFBNEMyRjY3NjQzQzE0RjhCMjRDRkY2Q0RCQ0Y2ODFGQzIKLToxMDRDMjAwMDlGMkRDNzU5NjYzNjc0RDE3OUNDM0M4M0VCNTM5NDg3NUEKLToxMDRDMzAwMEIzNTJERkFCQzU3REFFMzlGREVEN0MzQTY3OEQzNzI1Q0MKLToxMDRDNDAwMDI2RTJGQkM5RkM3Nzc4RDJBN0RCRDY2MERDMkYzNzlDNDUKLToxMDRDNTAwMEQ2MzFFQ0UwNTM3NDFFMzgyQzZCQkMzNTU0OUM0MzQ5NjAKLToxMDRDNjAwMERENTcyNTdBOEZCMEVFNkEzQUE1MEEzQ0Y3RDAzOTdEMzgKLToxMDRDNzAwMDFGRDkwMTE3QTcxMzlGNUNCNUE5REUyREZDNTRDNjdCNzUKLToxMDRDODAwMDhDRjIzRTVEMjdGN0YzODA5QzE2OEI4QjA2RUIyOUYzQTUKLToxMDRDOTAwMDgwOUU2NTFDNkY1OEQ2MkU1QUFGMzVBQjU4MjFBOTc1MkEKLToxMDRDQTAwMEVDMjlGRUNFNjZFRDQ5MDFERkJENThBNDczRTg0QzMwMTcKLToxMDRDQjAwMERGRUY4RDYwMjUxRjhCRkMxRDI0NTczNkM2NEQ4Qzc0OEQKLToxMDRDQzAwMDJGRkI4NEQ3NEM3MEFGRDc0NkYwMjlBRjQ0RTlBRDYxRDQKLToxMDRDRDAwMENFODg3QzY4NjdFMTExNEYxNkNFREJFMTk0NTYyN0RFNjMKLToxMDRDRTAwMDU3QkNGMDhFNEVBNjZCMzNCRjJGMkVEM0RBRTU0RTJENzgKLToxMDRDRjAwMDMzNjI5Q0VCMDBFOEUzQzIyMEZFRjc1QzREQTRGQkRERDEKLToxMDREMDAwMEJGQzNGRUEwOUY5NTBEQkYyMTc5NjdBRkI5MzgxREVERDgKLToxMDREMTAwMEEyQzJEQTMzNEQwOEJCMUJGRTNDMURGNTg5MEY2MUZGQjMKLToxMDREMjAwMDIwQkQxRUY0N0I5QjgwNzJFNDI0QkREMzVENzkzNTg2NjMKLToxMDREMzAwMERBNzk1OUQzM0YxREY5Q0JGN0E2NDBGNzZGM0VFQ0I4QUYKLToxMDRENDAwMEE4QjdGMkZEODlEQzczNzgyRjFDRkRGMkIzRjJBM0I5OEEKLToxMDRENTAwMDFDRTkyQ0Q0RDBGQTNBMjRENTNCRUJEREEzRkYyQjBBNzcKLToxMDRENjAwMEQ3QzNEODIwRkQ3QTBBN0VERkEzNjVDOEJGOUI0QUZCNjQKLToxMDRENzAwMEEzQ0MyMUU0RUY2OUY0REY2NUYzNzFCMEVDQTFFNTE1OTQKLToxMDREODAwMDdBNUYxNjlFOTNBQzkwRTkzOEI4QkMzQzdGQzAzRkExRDcKLToxMDREOTAwMDczQ0FFRkVCMDgwMUZFQTEyQUM2REYzRjA1QkJBNzJCQjQKLToxMDREQTAwMDFDRjhCOEFBNzMyQUY5NjdBQTNDQzIwREZEMzNDM0QxMTcKLToxMDREQjAwMEUxRDc0REVCMThGN0NGMjgzMERBOEQ4MTdFNERCNDFCNEIKLToxMDREQzAwMDk5QUE3RjFGN0YwNzJCMjVGMzg2Rjc3NERDN0Q4OTE0NTIKLToxMDRERDAwMENGQUY2QjY2MTRFRjVBNzk3NTM0QTVFNzVGREYyMDIxRkEKLToxMDRERTAwMEZGMThDM0ZCNUJFOTdFNkJCNjg2RUM4Qzk1M0VCNUZFODcKLToxMDRERjAwMDMzQTU4MENCODUyOTA1N0NERTVDRjk2MDJGRTVCMDAxMDkKLToxMDRFMDAwMDdCMDlFQ0EyN0JGM0I5NUQxNDc1ODhBOUVDQTVFMDdDNjUKLToxMDRFMTAwMEIyOTc4Q0YyM0QxRDEwMTNBRTU3NDJFMDdENDc0MTY5QjkKLToxMDRFMjAwMDBEN0U5N0NBNUE4OENFRDkzQkZDRkU3MkYwMzhEN0U0ODMKLToxMDRFMzAwMDczM0U1NUY4N0EzMUYyMzVEMjZGMDdFN0VCRTA3NkU3NEIKLToxMDRFNDAwMDE1OTRBQzQxM0VEQTM4NEM3Q0FCNUNFNkZCOTU2RDhDM0UKLToxMDRFNTAwMEU2Q0JERDE2NDNGM0Y0MDU2QjczOTYwMjVEN0UwMTc4QjUKLToxMDRFNjAwMEUwM0REMjBCNEU2NzQ0MzQ3QzdGQzFFNThDQzBGMzNERkUKLToxMDRFNzAwMDhBMUNBODZCMEJBN0VGMzY2NkNFOEJDNTczQTNDRDQ4RjMKLToxMDRFODAwMEY3RDBERUY5OEVBOTQ2OUNFNzdCREEzOEZGMjlGRDdENTUKLToxMDRFOTAwMEQ4QjUzODE2Rjk2OTgyQUU1RjZGODdGMkU0Q0UzMzUxMjgKLToxMDRFQTAwMEE4Rjc0RDc4N0Q3RTJDRjJFMTcwNzhGRUZEMTgxOUNGQzEKLToxMDRFQjAwMDg2QzQxMjFFOTc4N0JENzBBMjZDNEYwMDdFRUUyN0JBODMKLToxMDRFQzAwMEU4OURGQTg3MUExOEQxNkZGN0FCRkY1Njg3N0M3Q0JFMzYKLToxMDRFRDAwMDMzQzI4Q0ZCRTYxNzA3MjNFOEJEQ0EwQjZGMUFFODNEMDcKLToxMDRFRTAwMDlBNUFGOTdERDUyRjc0N0Q3MzQ4QkY3QzVENEJGNzIyQUMKLToxMDRFRjAwMERENkZGRTQ3MkJGMkEzRkI1NTAzOUQzQjdDQTg3M0MzREMKLToxMDRGMDAwMDQ1RENGNzZBM0I2NzlDQzM3NzU2NkI1RkZBREJGMkMzRkQKLToxMDRGMTAwMENBODY1NEQyOEIxNEY4M0ZCQzQ2MjdCRUYzN0I1RUU0QUUKLToxMDRGMjAwMDcyRTJBMThFN0YyMTdERjdBMTZCOTcwQkYwN0NDQTE3RUYKLToxMDRGMzAwMDA3RkZDNzQ0OTQ2QkVFQjcyRTRGNDQ3OUU2RkVDNUU1RjQKLToxMDRGNDAwMDg5NThFRTdFMkRDMjEzNEE1RkI5NUVDMEZEM0VDQTdFMEYKLToxMDRGNTAwMDk5RjZBRUE4RjIwRkFEOTBFOTIzNkQ1RDBCQkQwNzNENEMKLToxMDRGNjAwMEUxRTQwMjdCRTBCQjBGMTNCMjM0NEVBQzNGRTFCNzY1MjYKLToxMDRGNzAwMEIxRjcwNTdDQjdBRTU3QTQzOEUzRjg5MzY1MTFENTAxQjYKLToxMDRGODAwMDc0Nzk0RjgxNEVGMTJGN0UyM0JGMEU5M0RGQzcxOUYwNDYKLToxMDRGOTAwMEUzRjRGMjc3N0YzNkY2OEFGQzdEQTMxQTgxRUVBMTgzRDMKLToxMDRGQTAwMEZFMzJFNDVFMUFBREZGOEE1ODdBREY4ODg5Q0UzQkM3QUQKLToxMDRGQjAwMDhDNDczODhCREUwNTYyM0VFM0QxQ0MwMDNENjk3MUFGOTIKLToxMDRGQzAwMEE2Q0IwMDc0NTREMTY5RTgyMkZEQkU1NzNDNDNCMEFDNzcKLToxMDRGRDAwMDNGREQ3M0YxRDNDODM0MjE4NDdGMjZFN0Q0MzQ5NEUzRDIKLToxMDRGRTAwMEMxN0UxQUY4NDUyMkRFOEFCRTU1RTk3MUE1MjBGRUMxQjAKLToxMDRGRjAwMEZFOUJBNTE1Nzc5MDdGMjhEODdGOTNENjJCNkE2NjhGNjYKLToxMDUwMDAwMEM3RjdERkU5M0EyRjhDRjc2OTIzRjI4QkEyODdFMkZBMjAKLToxMDUwMTAwMDFEMDhDMUZGNkJDNjcwMzlBNkYwRDVCQTVFMUVGRjVERDQKLToxMDUwMjAwMEQ3NUI2QUNDODRCNDU2RTZBQjAzQjA5REZBQTBGRDc1OUQKLToxMDUwMzAwMDlERjM3N0EzMUY2MUREQjU0NTExNjM2MEJFRDZCRDNCMEYKLToxMDUwNDAwMDhGM0Q4MUZDNkYyRTM1NjZFMTc3RDdFRTMwMkVDQzFGNzkKLToxMDUwNTAwMEE0OTdFMEZFQTY4Q0UxRjI3MjQwNEYxODY2REZDQjk3NzIKLToxMDUwNjAwMEYxRkE1QkVEN0YzOTYzRTRGMzZDRkY4N0VGN0Y2MDg3RDQKLToxMDUwNzAwMDhGMURDM0VERjAyNURDNEZDMkVERjBFMDdENDM5MUM3RkQKLToxMDUwODAwMDRBQkIyRTc5OUQ4N0NBNjNGRTc3NDhDMDVFMjY3OUVDQkQKLToxMDUwOTAwMDFBMjM1MUJERTRDRUI5QjE2NDQ3QkZCQjIwNTYzMjBEQ0YKLToxMDUwQTAwMDZEM0Y0M0I0NkI2MkYyODdCNkFGRTg3MTZFOUZFM0E4QzEKLToxMDUwQjAwMDExRUQxQzg3OTZGQjQ5MTcwOEY0QkU5OUEyRjdCOTlEMUMKLToxMDUwQzAwMDAyRTlFM0VFNEE5RDFGRUIyOTc4RjUyRUUwN0VENTg1QjcKLToxMDUwRDAwMDBFOUQzRjRDMThENDBGMTVGRDcxQTBEQzJFNTBCOUEyQzcKLToxMDUwRTAwMDRGMkE3QTYzQUY5M0ZCNzExNzhDRTdFNUI3ODZCOTE2NDEKLToxMDUwRjAwMEUxN0M3REQ4MTU0NkY5MTMyNkYxN0NDNjlDNDc5MzAwQzgKLToxMDUxMDAwMDVFRjQzRDgxMTFGRkNCRkFBNDQyQTdDMUZBRTZBNUNFMTkKLToxMDUxMTAwMDhDMUJCRUQ3QjM0REE2NEY4NUNGNTI4M0Y4NDNEOUJGNjIKLToxMDUxMjAwMDlBRjMzOURERDdFMUZFMUQ4QkZCRjc3RkFBRjRGMkUwOUQKLToxMDUxMzAwMDc2NjFGRjdFMDhGMTZGNDYxRDEyQkUxRkZGNUJEMTE5MUQKLToxMDUxNDAwMENBM0VGRjRBRDYwQkZFNUU1OUJGREUyMzI1ODhBRjcyRUEKLToxMDUxNTAwMDRFNzZCODdEQjU0RUQ2NkY4NjJCNkZDRUZGN0FGQ0JDRUYKLToxMDUxNjAwMDQ3MUVERkRGOEE5Rjc3OEVGOUJGNDM5RjFERDAwQkY1NjcKLToxMDUxNzAwMEExQzc3OTQ3NDFDOTRGQzZDMEJDODY2QjNENzQ5RTczQjkKLToxMDUxODAwMEI4RjdDRDFFOTVGNTU1QjA3MzU1NzQ3QzM0NDVBRjQxRDUKLToxMDUxOTAwMEJCQzg1REMzRkQwM0NERDFEMkFGQzk3RTM5QUVBNUY3ODMKLToxMDUxQTAwMDU3MUU5MkVGNzMzRTc4RDU0QzY5MkRFQUM5OTAyRUQ5REYKLToxMDUxQjAwMDdCOTJERUQ5NUQ1MkEzQzZCRjE5N0RCN0Y4RkRBQTM0MzQKLToxMDUxQzAwMDhBRUI1N0IxMzJGMjJCNTU3NTQ2OUJGMUJDN0Y3MzdDNEQKLToxMDUxRDAwMEZCMzFFNDJCREY2RUFEQjQzQkIwRkVDNkQxNzI3RDIzNTQKLToxMDUxRTAwMEY3QjdENTQ0RDNERjhGNjE0MTdBNDA5NTI3NThERjU3MTEKLToxMDUxRjAwMEVCMDU1MzY0M0ZEMTcwRkFDMTJGQkFDM0I4NUNFOUQxNTMKLToxMDUyMDAwMDEyOUZENzM5RjlERjU1RDA3NzcyQjlFMDZFMDgyM0JGMDYKLToxMDUyMTAwMDA5REE2Qjg4RDc2NzBEODIxRkRGM0Q1RjI5RDdGQjRDMEEKLToxMDUyMjAwMEVDMjVGRjEzQzVEM0EwQ0FCOUNFQTcyQzBFQjJERkQ0OEMKLToxMDUyMzAwMEYxQTM5NUJCN0U0QjcyMzMzODhFMTQ3MzQwOEUwQjBERTkKLToxMDUyNDAwMEM0OEQyNkQyNzk5MDk1NjA0RkUyOUZCQzcyNEJEMjVEOUYKLToxMDUyNTAwMDM4RkY4MDFGRjM5M0RDNzFBOEZDMzA5NzdBM0UyMkZCNjUKLToxMDUyNjAwMDczQzlFQjNDRkUzMzI0N0VENDNDOTNDNzhGRjBERDk1QUQKLToxMDUyNzAwMDEwN0VDOEE1MjM4RjFEQzVCRkEzNzRCM0I4NTE1REM3RTkKLToxMDUyODAwMDQ5QkE0NzMyNDRGRjA4RDIzQkFFOEQ1MUZCMTk0NzhBRDkKLToxMDUyOTAwMERDOEYzQkIyNTMzMEEzN0Y2QUE0M0M4RjdGQjczMTlDMzUKLToxMDUyQTAwMEY0RUFFOTdGQTg4RTQ1NzlBMEFDRDNGOUI5N0M1RUNGNEEKLToxMDUyQjAwMDdGNzBBNTA0QkY5QkY4MDdEMTFDMDZFM0ZBQzUwN0Y1NkMKLToxMDUyQzAwMEJGNDlFMkIwNjQ5NEYwQkJGQTA4QjQ2M0NFRkY2MTc1RTUKLToxMDUyRDAwMDA0Q0VFQjJGMjBDNUJGMkZGMURBNjkzMUE0M0ZEMjJCQ0EKLToxMDUyRTAwMENCMkREODBGQTMwQkM4QkYyQ0ZCQTU0NUQ4MEYyMzA3ODgKLToxMDUyRjAwMEZEMzlDMURGNkQ5N0JGNkIwNjMzODVGQzk4QUZGM0Y4QkUKLToxMDUzMDAwMDdFNzM4MjZCMjZDMUNGQTYzM0ZFMUVBNjgzRkNDRUZGMjIKLToxMDUzMTAwMDAyNzQ4REZFQTIzQzE4MkNDNjlGN0YxQUNFRDY2MUJDQUIKLToxMDUzMjAwMEE4MzlERUY1MzZGMUQxQjMxQTA5RjkwOEJFQTczODkzQ0EKLToxMDUzMzAwMDZGQkY0NEZCMjM0RTE5QzY3MzBBRjRGQzVENDZFQTBDQUEKLToxMDUzNDAwMEQ2NkJCNEJDOEUwOTYwQzc2MjNDMDlCMDU5ODBGMUU2RTcKLToxMDUzNTAwMDNDMzlBRTUzMTBDRTQ0NkNGRjQ5OUQ2QjEzQkU5N0Y5OTgKLToxMDUzNjAwMDY0Qjc2ODVGNEI0QzYwOEZDNTc3QkY4M0UzNEI4MjgzMjQKLToxMDUzNzAwMEM3QzU5NTM4OTMxMjFGMUYyRUNFMjQ2MDNGMDU5Q0VFQTMKLToxMDUzODAwMEY4QjkxNTg3ODA3MTczMjU5RUM0QkVFN0E0MjA1NzYzQzIKLToxMDUzOTAwMEIxODdDRUY3M0Y1M0M4NDhBRTdGOEI3MTlFMjVGOTIxNjgKLToxMDUzQTAwMEUyNDgzNUM4NjMyNENGRDU3MUM1NEQzOUFGMTA5REZFOTUKLToxMDUzQjAwMEI1RjFDNDNENjNEOEI3MUNGRkUyRjMxMzhDRjdGOEU4RUUKLToxMDUzQzAwMDRCMTZCMkI3QkVGQUVGNTFCNENGNzY1RUE2RkRGMDQyRUYKLToxMDUzRDAwMEJGNDFCRThGRDBDN0ZERUM5RDNBRjIyRjVDMDBCQjJEQzQKLToxMDUzRTAwMDNFNjA5RjNEOUFDRkRCM0RENDM5OTVFOEZGNDA2RjU5MzEKLToxMDUzRjAwMDA0RDYzRjJGRTc2RjdDNzdDMUZDRDk0ODk3QkQyMkJEMEIKLToxMDU0MDAwMDA3OEJFN0UzRDAwRTNCRDAyQjRFNDBCREU1NUI1Qzk3QUUKLToxMDU0MTAwMEVGOEYwOUIxMkVDNkYwRDBFRjRDRTRDQjdDOTQ1RkMwODcKLToxMDU0MjAwMEU5NjNFQTA3RENGRTcyRDdGMzM4OEE1OTk2MEJFRTcyMEQKLToxMDU0MzAwMDNEQzlDMTYzMjkxNjQxRjE5RjVCNDNDNTU5NUVFRkE3ODIKLToxMDU0NDAwMDdEQTM2QTg1NDBGNzFDQkU3MTlDQTVBMzVCREVCNzgyNzUKLToxMDU0NTAwMEZDRDNFNUQzNDk2RTBFRTdCNzBFODg5QkFCQ0FCNzE1RjAKLToxMDU0NjAwMDBDOUM4NzIzRkY3NTU0ODE5OUM2MURFMzI5MkNDMUIzNzkKLToxMDU0NzAwMDg3Q0FGOEJGQzU3NUI4NzM2QzA4M0FGQjE2REI1RjY5NUQKLToxMDU0ODAwMEZGNkVEQjlGOTJGN0REQjZCRkU2M0I2RTdGNkRERTc3OEEKLToxMDU0OTAwMDFCRTdERUYxMURFMzdGRjUzQjZFRkZDQzc3M0MzRkFGQjIKLToxMDU0QTAwMEU1RkZGRjczMDAwMzcwNzA5QzNGRjg1QzQwNzBCQ0RGNDkKLToxMDU0QjAwMDcwRkMzRTFGOTY2RDEwMzZGNzc3NDE2QThDN0FCNTQyQzQKLToxMDU0QzAwMDAwNTEyRDQ2RUZBMjc3MDg2NjRERTI3MUIwOEQ2NTQ2MUEKLToxMDU0RDAwMEZGMEU2MUYwN0M4MDMyNUY0QjBCQjkxRDYxQ0VCRkU4REYKLToxMDU0RTAwMDhCODU3OTRFNzVGNDk2QzVBMjlGNkMxMjdGODdGRDgyREQKLToxMDU0RjAwMEZDQ0UyQTEzQ0RGNENFMThENDRDQzBGQkYxQ0Q2MUExNjMKLToxMDU1MDAwMEUzQUE2MTcyN0JDM0VEMjNDRjE3OTZEQzMxMzY5RUZFOTIKLToxMDU1MTAwMDZDNDNDOEZCMUQyRkM4RkU0NzczMDcyM0JGMjQxM0E1ODgKLToxMDU1MjAwMDg0NzlENEFGOTQ4MEZBRDA4ODIzM0MzRkFBOEIzOTc2MTMKLToxMDU1MzAwMDEwNUU1MkRBM0NCMjA3QTUzNEM0NkY4QjFDRUY4RDk5MTQKLToxMDU1NDAwMDk5OUQ4NkZFRTgxOEQwMEIzMTFFRjgxNEM2MDUyOThFRTkKLToxMDU1NTAwMDY1QTY3QTRBN0YxRjhDRTVGRDZERDEzMTgxRUU1QkU1NTIKLToxMDU1NjAwMEYyRjM0Q0FDRjlBMDJBOUVGNzhFQUVFQkUzNjUwMkM1RDAKLToxMDU1NzAwMEYzOTYyM0ZFQkZEMjc0RTVFRjRDOTM4OTE4RTYzN0ZGMEMKLToxMDU1ODAwMDgwOTlFMjhDMjcyNkJENDg3Rjc3NTY4OUVGQUQzMUYzQUQKLToxMDU1OTAwMDJBODdEMTZFMDYzQ0Q2MUMxQzQ3RjRCQkU0RDBBNEY3ODYKLToxMDU1QTAwMEYxRTkzMzc3QTY2ODBGNzU0RjUxRjExNzlDOTZGRDFERjEKLToxMDU1QjAwMDhBQkY0MDg5NkJGRDVFRjY5MzdDODhGRTE3QkExRjIyNzYKLToxMDU1QzAwMDUxRUExREFCRjlCNkY3MjdFRkQ4MTBGQ0JGNDVFMEZFNTYKLToxMDU1RDAwMDIxREZBRkI4N0Y2ODlDREU5RTExNzg2RTcyQjMzQ0FGNUUKLToxMDU1RTAwMENCQkE3OERDNDJGMUY3RUM5M0M3MzNFRTExNkQ5NzAxM0IKLToxMDU1RjAwMEY2RDI3MTRENjNGNEI4Q0Y4RjZCNEEwOUM3QjRDMEUxREUKLToxMDU2MDAwMEQ3RTA3REYwQzVENUZCMzVDQUZBODVBMkEzRDZCMUIyRTUKLToxMDU2MTAwMDFGQTNBNzlGRTI3QUZGMTIxNEU3RkY2MDJDM0ZCRjMwNjEKLToxMDU2MjAwMEFGOTBFM0YxMDFEODI0MDhBRkM5MTIxQjUxN0QxQzcxNjIKLToxMDU2MzAwMDhCNTkxQjJBOUU1NDA1NzYzMUUyQjlBQzk5RTNBRENDNjcKLToxMDU2NDAwMDc3NTU5NzM0MTVGQjM5NzNCNEJGMDlEM0EyOUFCNEE5MUYKLToxMDU2NTAwMEU0NkZBRkJERDg4NEZBOUJGQkRBRTU2M0I3OTNCRjRDMjgKLToxMDU2NjAwMDJGQTEzRDcxNEY5RkRBRUZCNjBBQTNBNUYxODQyN0ZENjQKLToxMDU2NzAwMDlENUFERjBDOTFFQ0UzNzEzMzQ0QTI5Rjk4QUEzMEIyOUIKLToxMDU2ODAwMDVGNjM3NDRDNkI0Mjc4MkVENzhCOEFDQUUzQTYyMkNDMTgKLToxMDU2OTAwMDE2NDQ5MzNFNThENDIzNDVERjk3M0ZFODA3OEI5OTUxMzIKLToxMDU2QTAwMDFGOEZGMzc0QjNGOEFBRTI0RkJCMzVDQ0YxMUFBRUU3MDMKLToxMDU2QjAwMDVGMUI1RjVERjlDRUJCNzRBRTU0MTk5NzMyMkY0QTlDQzUKLToxMDU2QzAwMDc0QjhGOEFBNzJDRUMxNUQ3RTQ1NzUyRUMzMkRGNjRGMTMKLToxMDU2RDAwMDQ3RkZFM0I4ODM2N0Y0RjIzOTRCMzNGRTFENjEyNUZFQzMKLToxMDU2RTAwMDNBRUVGNThCMTQ3NzU1RTJBQzZFQ0Y0NUQyQUJFMTNCODkKLToxMDU2RjAwMDNEN0UzRjBFOTYzRjIxMDZERjE3RTJGMUQ3NTdGMTlFMjAKLToxMDU3MDAwMDk0MUVFRkZGOTlFOUJFRDQxQkYyRkRDNTRFMTgzRkU2OEIKLToxMDU3MTAwMEJGRTlDREExQjRDQjZCQTdGNDkwQjc5ODUyNzdFNzQ1MUEKLToxMDU3MjAwMDhBRDc3RTM4NTYxREVGNTNFMjc5OTdCNENFMzM2M0Q1Q0UKLToxMDU3MzAwMEU3MjMwOTBFOEVGNzY5QzNCOUJGQzZEREEzQTNCRjk3RTAKLToxMDU3NDAwMEUxN0VDNzQ4RjJCQkE0NzMxOURERUJGQUYyQTQ2QjI0MjcKLToxMDU3NTAwMEUyNUQ4N0YxQjYwMEJBMzhFRkIwODdFMTNCNjFFNzlEQzMKLToxMDU3NjAwMEY2MzA4Q0IzOERFQjNFQTdDN0YzMkY3NTYyQUYxRUZERUQKLToxMDU3NzAwMDYxODA3MTEyMUU0RDc0MUZCOEM4Q0ZGNzc2OTZEMERGQzYKLToxMDU3ODAwMEUzQkE2OTVDQUNFMzZGMTMxN0ZCOUZFNTQxMDEyMTAwQUQKLToxMDU3OTAwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZCNTE3MEMKLToxMDU3QTAwMDVENEM1MzY3RjQ3Q0I3QjdFNTk2REYwQjJBM0YyMjcyNTYKLToxMDU3QjAwMEMxNjI5OEEyRENDMjQwQTczMTE2NzRBQzEzNUM4QTRBNUQKLToxMDU3QzAwMDAyMDFCNTY2MkU5MjA5MkREOUNDQzJDQkQyM0E4OTAxRkQKLToxMDU3RDAwMEREQzNCMkI4NjRGM0E5MjY4M0U4QjY4N0ZBOTNBRDZFNDkKLToxMDU3RTAwMDU1MEIwQjg0MjUyRUUyQzM5QzcxQzk1MjBEMzMzM0JBN0QKLToxMDU3RjAwMDgxNjJEQ0Q4NUNEODM5REZCREI1QkREOEJEMkNEQUE0NTgKLToxMDU4MDAwMDM5M0QzRkRGMzlERkY5RkYwQTAwMzAwN0RBRTc1NkI5RTMKLToxMDU4MTAwMDA2RTc0Q0Y4QTVDRkM2RkYwRjNEQTQ0RjhDRTNEREJERDYKLToxMDU4MjAwMDRCRUIyNjE3QzRGMUJCM0VDOTM1NjkwM0Y4NUQ5Q0NFMkUKLToxMDU4MzAwMDk0MkIwMEY2ODdDRTVBMUMwNDFGQ0ZBQzc2MjFGQ0VEQ0EKLToxMDU4NDAwMEMyREZCNTRBM0E4MEY3RDI0QzJEMjBFRUZENjZBNjk2MEYKLToxMDU4NTAwMEY4REVBRkQyN0EwMkU5NEZEQjdCRDc4RTk3NUUwNDcwMTkKLToxMDU4NjAwMDk2NDE2QjEwRjk1NTJFQzE3MTgyRTBCOEMzRkE0NjQ1RDYKLToxMDU4NzAwMDVDNkVDMDI1MzhFOUZDODBBRDM0OUJFOEM3NUNBNUQ5RDcKLToxMDU4ODAwMDdCMTNGNEY1Mzk0NTY3MDBFOTM5QUZEQUFDODlGNDA5REYKLToxMDU4OTAwMEJCMTlBMDA2RTkwQzVDQzEyNEY2NkI1NTgxREJERjdGRTgKLToxMDU4QTAwMEQyMkE0RjRBN0ExQ0YxREIxRENDMzZFMERFNTA4MTNDMTcKLToxMDU4QjAwMDU5MUVDN0Y3RDM4RjAyRkM2RTY2MjJENDAyNzRFOUI5NzEKLToxMDU4QzAwMEI4NjQ3MkQ3QUFBOEFGM0IzRjZBODE1MkEyNEM1QjVDMTYKLToxMDU4RDAwMEFCMzA1RURGNEJGREFDMTI2MEY4RkNCRUUyNjgwNTE3MzIKLToxMDU4RTAwMDk1MjAxN0EwNEQzRjM3RTBEQzVCOUNCMTEwQzA3RjNEOTkKLToxMDU4RjAwMDA1Q0E5ODQ2MTM5MURGNEEzRjE0OEUyQTIyREE2OUE3MTcKLToxMDU5MDAwMDVGNzhFNUI2RkNGNzI3NENBQjExQkFDREZFNjhDMkJEOTcKLToxMDU5MTAwMERBOUQ4MkMzOUFDOUVEMkU2RENFMjA3OTMxQ0UyRjIxMkEKLToxMDU5MjAwMEE1RDM0QkI3QUQyMkNDNTEyOEU0MTNGNDE3QzI1QTAyQzkKLToxMDU5MzAwMEQyQThBRDM2NkVFRjA2MDQ3RUIwQTE3QzlCNTM4OEE0M0UKLToxMDU5NDAwMEEwOURENjcwNEEwNDUwNkY5NTUzMDRERjhCMDg3QkNEMjEKLToxMDU5NTAwMDgxMTI0NjdDRjEyNkU3MkI2RjM2MTFCRjRGQUUyQTA0MjkKLToxMDU5NjAwMEY0RTNFN0NCMTY3OTQxMDlCRkRGNjQzNDIxOEVBQUYzNTMKLToxMDU5NzAwMEQzRkU1MjNDQUY3NjMxOTVEQzZBRUYzNEYyRjE5MzQxQkQKLToxMDU5ODAwMDdFRUVENkUzQjIzMzM0RkM3MjIxRjc1RjM2MDE5RUNCNTQKLToxMDU5OTAwMDFEMDMzODhFNzY3N0Y2MThDRkVENkU3NURFNjE3NDNGOTUKLToxMDU5QTAwMEY4QTA3RjMzQ0E4MTREOTAwNzg5REU2Qjk0QTMzQTNCMDAKLToxMDU5QjAwMDhERjExRjAwNzAyNkQ2NDMzN0Q1NDEwRDQxQzZFMUU3NzIKLToxMDU5QzAwMEU4MTNENTQ1MTUwNjJBNTgxMTNGMzdCRjdFNDY3NEY5QUUKLToxMDU5RDAwMEY5RkE2MkYwMENGMTE3NTE3RDU2MEREODI4QkY0RDAyMkYKLToxMDU5RTAwMDk0MDFFMUY1OTIyRDQxOUY1RjE1Qjk5RTBGNjUwMUZDNzEKLToxMDU5RjAwMDI4RDcxN0RFM0VDODMwN0U3RDhGNUY5MTVBNTA2RTRBQTEKLToxMDVBMDAwMEFFOTdDQUQyRTNCOEY3MzJENjUzMTY0MEY1RjA2QzAzMUUKLToxMDVBMTAwMEM1RkI1ODk4ODExNTRENzlGM0YxQkUyODU3N0RCMTZFQkQKLToxMDVBMjAwMDlDQUQ0RUJDQTdFNkRGMzFDQ0Y5NDQzQUQ1ODE5QTBENDYKLToxMDVBMzAwMDlBNUYyMDYxQkNGQzE3NTg2MDEwRUQ1NTM1M0QxQzQ5M0MKLToxMDVBNDAwMEEzRjhCOUIyRDUzMjg1RUNEODBFQTUyM0VFNkQxMjZCNTIKLToxMDVBNTAwMDE4RTEyRTNDNDBGODBFMTY5MEYwRTdGNjJCOUQ1QjAwMDcKLToxMDVBNjAwMEVENTRCN0Q4QUY1MkRDNUIzQUNDQUExNTg4REVEQTQwRTkKLToxMDVBNzAwMEY0NkI1OTUwMzcyOTEyRkZDNDdCQTlDNDJGNjdBQTU1NkMKLToxMDVBODAwMDIxQkVCMzlFRjg4RDVGNDQ0NEFBRTdBRDE0QTU2NTc4QTYKLToxMDVBOTAwMEI3Q0IyODhEN0RCM0MxRUEwRTUwMUY1NTM3QTMxMUY0NDMKLToxMDVBQTAwMDZGNDc4NzM1NDBGRUI1ODQ5QkNEOTBDRUVCNDFBMEJFQkQKLToxMDVBQjAwMDdCNUJDRkVEQjc0NThGMzJBMzQ4OUYwOTU3Njc5MTVGNTYKLToxMDVBQzAwMDBCQ0NEMzE2MTU2MTM1RUEyRUM4NDE3OEUxQkUwNUIwN0UKLToxMDVBRDAwMDFGQkNFMkI0NDU0NkI5NzMzRTRDQUMwNUUwNEI5RkM0RDUKLToxMDVBRTAwMDYxQzgyNzgzNjMzOUMwRDdCRTdDMEVDMzNFODVEMzJGRTAKLToxMDVBRjAwMEZBQ0EzOThDRjg1NDBFNDc3QzZCMzVBOENBM0M5RTk1N0YKLToxMDVCMDAwMEUxRkIwMkREMjdBNzU5NzAyNTlCNkY3RUJEM0U2MkY5NDAKLToxMDVCMTAwMEFBMEJFRjI5QTY3QjNFQkFFQTJFOTY5M0M4QzcyMDVBNTUKLToxMDVCMjAwMDJDMTRENjZBRkRDOTMwNjc1RUU3QzMwNkIyRTM4MUU4OEMKLToxMDVCMzAwMDYxM0FBNzYwQkU2MTBENDYyMTg0MzBFRkJGRUI2RkFBQ0EKLToxMDVCNDAwMDUyOUI2RkQ5MDJCODkzRjE2N0Y0RkEwNDg3MjJEMDNDRDQKLToxMDVCNTAwMDdBNEJEMkZBN0Y3OEM1NUYzQzlFNTI0OEI5QjIxRUYzQTkKLToxMDVCNjAwMEU2MTkzNzQxMEFEMjhGRDQ2QjczN0ZCRTlFRUIxODRGNzQKLToxMDVCNzAwMEMwQjhEREMwNzgxMjlDQ0Y2RkI1RjhDQjI4MUZBRDc0Q0MKLToxMDVCODAwMDhGMjRFN0E3RjRGQUM0MEEzMEJCMzJCNDlDMzJCQzRGNkUKLToxMDVCOTAwMDQ3NkMwRTYwMjBCMjMwOEYxRDIxMTY0OUM1M0VERjE5QkIKLToxMDVCQTAwMERFNzQ0NzI0RDhDM0UwOTY3MTdFM0NENzdERDhFNjQ2QTQKLToxMDVCQjAwMEE1ODlGM0I2MzM4RDI2RjkxMzVDNEFENUUyMkM1OTM0MDYKLToxMDVCQzAwMEQ4NkZENUY2NUE5MzVEOEI3MzBDNkVCNTZCNzU3MTk0NjcKLToxMDVCRDAwMDlBMDVFQkZCRTg3OTE2Mzg4OEZERTdBOTE4QkI0RTczRTgKLToxMDVCRTAwMDJDQ0YwMUQwOEJDM0M3OTM5RjFFMzFEMTNDMEY5OUVGQUYKLToxMDVCRjAwMDNEOTlFM0Q4MUY3OThBMEMxRDM5OTQzNzBDMjZGNjQxNUMKLToxMDVDMDAwMDgxN0UwNzI0QzA2RDk0NjM5MTFDNjE2RTI1Q0EyRDE5OTUKLToxMDVDMTAwMDlGMjU3RDlGRDgxNTZFMkY3NzU3OTAwMUJBNTAwNEZFQUYKLToxMDVDMjAwMDgzMzQ1RjQ2MkQ1MDc3MUFFRDc3OUQ2MzcwOTBGQTNCNzEKLToxMDVDMzAwMEUwMDIwNUY3RkRFOEYxMUI4NzRGMjFERDczOEVDOUI0NDMKLToxMDVDNDAwMDhFQkE4MzU3Rjk5RUVGMTYyNzc4RkY3OEMyNzcyREJDNUUKLToxMDVDNTAwMDFFODMzNzM1N0E4ODM5MDI0OUYyM0E0MEZCMURFRDZFRDIKLToxMDVDNjAwMDQ2N0Y2ODZFNzQxRjMwMDU1MkQwNkVDMzM5QURBRkJEMkMKLToxMDVDNzAwMDBFNEI0MDQxN0NBQ0U4MUQ5MUYwOURFNzE5RTREMTFDMkUKLToxMDVDODAwMDUzMjYxNkE1MTFGRjgwMTkwMjI1RENBRkE2QkE4NEZEQTQKLToxMDVDOTAwMDg0NUY4NUZDOEVFRENGRDhGRUYxQzBGNDU4MjFENTZCMjIKLToxMDVDQTAwMDI3NTMyMzBBREYzRkI3OENGQjA1MkY5MjFCREYyRkVEMTUKLToxMDVDQjAwMEExNjEzM0NEMUJEQzQzMDZCOUREOEU4NjNCMzQzRjcxRDkKLToxMDVDQzAwMENGMThFOTRCMEVERkU3Rjk4MDI4QUY1M0RDMkYwNjdFQjMKLToxMDVDRDAwMDhEM0Q2M0UxNkQyQzA5NTgwOTE1NzMzOENGMzY1NUNBQ0YKLToxMDVDRTAwMDNDREZBRDZFQzZEQzE4MUY0OTcwNzU5MTlGNzA5MUM5N0QKLToxMDVDRjAwMDM0NkZFN0M3QUJEMUFFRjU0MUEzOUY0MTJGRTY3N0M4MUMKLToxMDVEMDAwMEEyRDVDN0QwM0ExNkYwQTM3QzIzQTI5NEY3QTE4QjdCMkYKLToxMDVEMTAwMEZDMENGRDFDQUE2MkFBNDBGMTIwMjE4Q0M3MTYzRDNFNTYKLToxMDVEMjAwMDJGODAxRjZFNEJGQ0E5NzA2Q0FFMUFFMDM1QUM2MTJCNTYKLToxMDVEMzAwMEQ2NTNBMzVFMEYwMDAxNkVBN0Y5RTNENDA4QkQyMzhFRUUKLToxMDVENDAwMDlBODNGOTJBN0Y5N0Y4Rjk3RDY3NTVFMEZDRDQxNEU4MjcKLToxMDVENTAwMDQ5RDZBRjZCRUM3NUIzNkEwREM5M0RGM0Y3RDMyRTdCMTMKLToxMDVENjAwMDkyRjdEMzQ3Rjg3NjIyM0I3QkVENEMyNEJGMzBCRTJCMTUKLToxMDVENzAwMEE5QkZFRjE1NURDQjFDNDFGNDgxQzlCNThGQ0U3NTU5MTQKLToxMDVEODAwMDIyQUJBOUJFMUY5OERDMUM4RkYxOTFFRUExRkQ4MjhCODYKLToxMDVEOTAwMEVGMTZGNTkxMDA4Q0NGODcyM0U1NjdDQzk0OTc3NkEyMTgKLToxMDVEQTAwMEM3RUU1QjEyOTdFM0I4RTk2OUZDQTEwQUNGREFFRkExNkQKLToxMDVEQjAwMENBOUFBN0ZEN0U4NkZBMTdBQkNGNTc3RjZFQjJCQzFEN0QKLToxMDVEQzAwMEEyRjk5N0E0N0U3RUQyRTcxRkMwMTI5OUY3Q0I5MzM4MzEKLToxMDVERDAwMDgzQjY4NzY0RTA3NTNDQUFFRkY1N0VBNkZDNDg3QkM4RDUKLToxMDVERTAwMEZGOUQxOTA2OTVGODVDRURDRkQwRjQ3RkE2RUI4QkMxMzMKLToxMDVERjAwMDUxMURGNjlCMzVCOUY5RjYyN0Y0MzlGQzhCQzk3MThBMjgKLToxMDVFMDAwMEVFQkRGMkE0MDA0QTgyREZBQjgyQTlBMDI0Rjg1RDE5OUUKLToxMDVFMTAwMENBMzFFMEY2Qzg2MjgzN0NGNTc4QTk4MTVGMzNCMUMyRUMKLToxMDVFMjAwMEMwNUY3M0JEQ0E4MEJGMTQ1RDY3OTA1RkZGNkJCRDAxMkIKLToxMDVFMzAwMERGMzBCREM1MjBCRkYxQ0Y2RDA2M0NENkJGNzU1OEI5NjgKLToxMDVFNDAwMDg5RTczNjQ5QUYxQkU0MEEzQjhEN0UxNUY1MThGRDJBMUMKLToxMDVFNTAwMEVFMzVGQTE1RDM1QkUyMzdGQUI3QUNERkU4NUY0RUY2MDIKLToxMDVFNjAwMDgzNUM4NURFQTFGRkZDOTE0OUZCNjAyMDNDQzNGMzM0RDkKLToxMDVFNzAwMDM1OUQwMjEzMzQ0N0M0QThCNjFGQzI2NkJFMTdBNkYwRUMKLToxMDVFODAwMEZGRTJBMjg0M0MyQ0E3RDczRkRBMTkwOTJGQjNEMkI5N0QKLToxMDVFOTAwMDBGOUQzNjJCQkREQjJFNTEwRDYwM0VGRTA1RDc3NjJFQjUKLToxMDVFQTAwMDE3RTAwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMDVFQjAwMDFGOEIwODAwMDAwMDAwMDAwMEZGRTNFMzY2NjBGODUxNUMKLToxMDVFQzAwMDBGQzFEM0I4MTgxODM2NzIyMUY4NDMwMUI3MzM0MzY4QUQKLToxMDVFRDAwMDNFMTYwNjA2MDEyMDdFQzdDOEMwRjA5RTkxMDQzMzM4RTYKLToxMDVFRTAwMDEwRUM3RTIwQkIwQTg4Mjc3MTUwQ0Y3RDQzMTEyRkU1MkYKLToxMDVFRjAwMEExOUY1RDVGQTA3NjNEMTUxODc4N0Y4M0IwODMxMDAzNjYKLToxMDVGMDAwMDgzOUIzMDAzODNCNDA4ODRCRjVGMDQ1NURFNTEwOEMxMEUKLToxMDVGMTAwMDdFMkU0MTk5NUQ5RjgxRkEwMThERUJCQjMxODAwMzAwOUMKLToxMDVGMjAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQkYKLToxMDVGMzAwMDAwRkZFNTdEMEI3QzU0RDVCNUY3M0U3MzFFMzM5Mzk5NzYKLToxMDVGNDAwMDRDMjYwRjQyNDIwMDRGMDgyMDJBODQyMTQwMDg4ODM4RkUKLToxMDVGNTAwMDA5OTAwNjhEOUEwODA4ODhDQTAwMDE0MjQ4MzIxMUE5QTIKLToxMDVGNjAwMDk3NUU2RDY3MjIxNEQxNkExQjJENkRBMzk3REEwMTQxRUMKLToxMDVGNzAwMEEzNDUwRDE4RTg0MDAzMUQ0QzQxQkM1QThEMEE0QTVCRUQKLToxMDVGODAwMEI1NDEzMTNDMEE0OTc4RThDNUQ2NUJFRjVFNkJFRjMzMkIKLToxMDVGOTAwMDk5NzM2NjQyQTJCNkRGRkRCRURGMTc3RkZFMzZGQkVDQ0IKLToxMDVGQTAwMDczRjY1RTdCQURGRjVBN0JFREI1MUYyMzU5QzYxM0QzNDUKLToxMDVGQjAwMDE1ODQ3QzA1N0ZENzEzNzI0ODI0ODRGNEVCNEUzQjBCODkKLToxMDVGQzAwMDY4M0E4RTEwN0Y4RTM5QjA1NTIwMjRCNEVGRUZFRDI0NUYKLToxMDVGRDAwMDg1OTBCMzREQjM1NTczMjYyMUZCQzc5ODQzRDdEM0YyQjEKLToxMDVGRTAwMEIzODFGQzgwOTk5NjRGREQ3OUM0MjFEMTdDRDU0RTUxODcKLToxMDVGRjAwMDgyNzJEMzNFMkI3RURGQjE1MTA4NDBERTZCNkVGREYxMjUKLToxMDYwMDAwMEI1MzRERkI1NTMyNDlCNjlENTI0NjQzNzkxNTQ0MkRBMDMKLToxMDYwMTAwMDJEODRGREE5RjE5ODVGNkE2NUQ5QUE0REZCRUY4MkY2NDAKLToxMDYwMjAwMENBODM2NjYyQTVERkI3Mzc4OTZFQzhBRkRDMkEwNDA4NjkKLToxMDYwMzAwMDZEQUY2QUY3ODNDQTAwNUFERkIyODBEMDY4NTU2OTdFQjcKLToxMDYwNDAwMEVCNjM4QTFBNEZDODAzRkJGRUVDNjhCMzEzNzJEQTY3N0UKLToxMDYwNTAwMDIxQUE4MkZEMjg2RjFDNDk0ODQ1NjA3QkUxMDBGQTdEM0EKLToxMDYwNjAwMEM1MzZDMTY1QTJGNTU3NkMzQ0Q3MDFGNDU1MzRDOUMzOTgKLToxMDYwNzAwMDQ0NUFERjhBMDYxQjUxNDdCMEI2QkYyMkQwNUVDQjA3MTkKLToxMDYwODAwMEQ4REU0RTc5MjhCNDU3RkVFNTNEMEExMUExOUZCMjFCMTgKLToxMDYwOTAwMEJFQUJBMjc0NDBCRkI1NzY0RkZCRUFCMTNEOEQ5RjU1QjQKLToxMDYwQTAwMENGRDFGNkU4N0JENTJGMEEyRUU4NjJCNTg5Nzg4MDhFQUQKLToxMDYwQjAwMDhFRERENkI5NEZEQkExN0ZCNUNBRjBGOEM4N0UyQ0RDRTcKLToxMDYwQzAwMDA1RkRBODA4NkM1MjBBRUQ0MERGMjY2NUU5QzhFRUZBMjYKLToxMDYwRDAwMDU2MzRGQzg3OUVCRUZBQUNGRTlFODg3MjYzN0FEQTQ3MUQKLToxMDYwRTAwMDU5M0FCQzNCNUY0MTg4QkI5MUQ2NEJBNDgwNTIzQUFBMzcKLToxMDYwRjAwMEZCRjkwNzQyMjIyMUUzQTE3RTkxQTg5NkVFRkFBOUU0REEKLToxMDYxMDAwMDExMDdGRTIzRjQ5Rjk0MEZGRUJERjE4MUFEOTlERDcyNUUKLToxMDYxMTAwMDVCRTkwNDk5NzVDQkVEQkM5M0NCNTFFQUNBOERBQzVGQkEKLToxMDYxMjAwMDRCN0YwQ0YyQTBGNEQ0Rjk5Qzk4M0VFRTRCQzM3NDgzRTEKLToxMDYxMzAwMDRGNDVCRUZEREMzNzAyRDM3QTlGMEI5RjNGRTlDQkMzQUYKLToxMDYxNDAwMDc0QTNDRjhERTk1M0JFMjI0QzAzQkUxMjdDNkZCMzZGOTQKLToxMDYxNTAwMDJFQTY1QjdDMUU3Q0ZFOENBRjFDRDMwNjVGMEQzRTdGQTMKLToxMDYxNjAwMERFQjcxQUQzNkQzRTNGM0U3RkQxQjcxRUQzNDY1RjFEQ0IKLToxMDYxNzAwMEE2M0I0MDVFMzQ2REYyMDVGMEJENURCRTA2NEM4M0JFQUQKLToxMDYxODAwMDQ2N0NCRUM3MTdDNEY0MTFDRTQ3Qzc2NDkyMkY1MTNFNTgKLToxMDYxOTAwMDM4RENDNDQ5QzU0RTkyOEFEREY5MzJDRDI3OTVCMDdDRjIKLToxMDYxQTAwMEVBMURGRTdDODVFNjUzM0QzNDRGRjkzMkEwMzI5NDZGRjAKLToxMDYxQjAwMEE2RjkwMTM1QUM3Q0YwRkRBNEMwNDJGMzgzRkRBQzdDQjQKLToxMDYxQzAwMEM4MjNFRTAyMkJDRDBGQTk2M0U1QzMzN0ZBMEJFMjY4QjMKLToxMDYxRDAwMDdFNzg4MDk1NUZCRDJENTQ2MEEzRjlBQjFCNTk3OTc2MEQKLToxMDYxRTAwMDMzOTk2QUE3RjlFQzEwQ0JFN0JDRTE5RTFBNEZGMzM5NUIKLToxMDYxRjAwMEFEMkM5RkZCODE3RkFBODNFNjczREJEOEY3OTNDRTA0OTcKLToxMDYyMDAwMDQ0RDUxRTJEODcxREIyQkE5ODUwNTk2REY0Q0Y3MDRCRUUKLToxMDYyMTAwMDEzNjk1RTUxRUYyMTJFQ0ExRkZGQUQ2RTI5OURGMjQzMTcKLToxMDYyMjAwMDc2NjM3OUM4M0YxRkNCOUIxNDM3OTZCRkUzMkZDM0ZDMUYKLToxMDYyMzAwMDJFRDk4M0U1QzdGRDU1MkNBRjc4QjBGQzczRkZCRDk4MTAKLToxMDYyNDAwMDBGQ0E3RTJDQjdENEZBNTg1RUYxNjNGOTgwREFGNTU4OUMKLToxMDYyNTAwMEZGMUUzOTgwRTUyMzZCMUZDM0YyM0Q0QTAwQ0IxRjVGNTEKLToxMDYyNjAwMEZCQTQ3QjFBQ0RBRjExM0MzRjA3M0NEMkI0OUM2NDAxMjgKLToxMDYyNzAwMDlFMUFEMzRBMjg5RUQ2MDk2NDJFRTBGNzA3MDAzQThBNzAKLToxMDYyODAwMENCNzVFOTBBRUFFMThFM0ZFNDNFMERGQThCN0YyOTkwNTcKLToxMDYyOTAwMDVGRkFDQ0MzOTlGOEZEQUZCMDFFOTlENjIzRjY1RTRGRDYKLToxMDYyQTAwMENFOUI3OUJBN0E3MkRFMkNEN0VBNjk4MEY3RDY1OEZCOTIKLToxMDYyQjAwMDU2Q0Y4RTM3MjdFOUU5NzlCMzQyQUI2NzNCRDIxM0RGN0MKLToxMDYyQzAwMEI3N0VFNUJDMzU1OTRGQ0Y1Qjk1NUEzRDdCOTA5RUM0NTgKLToxMDYyRDAwMEJFRDFEMzc0NDRDRjlGQTYyMzYxRkVCNDIwM0RGREZBMDYKLToxMDYyRTAwMDQ2Q0ZCOEY3RjRGQzE5Rjc1RTk4M0Y2RjYwM0RFOTdENDMKLToxMDYyRjAwMEFCQTdFOTNEM0Q3RjlBREUwQkYzRTcwOEY2NkI1MERGNzUKLToxMDYzMDAwMEZBMzVFRTdEM0Q3RkM2QkQxRkU2Q0Y0NzQ4NEY2NkRGQkQKLToxMDYzMTAwMEVBRDlGNUExOUUzRkJCM0UwQ0YzRTcwNEQ2MzNBQzZGNDAKLToxMDYzMjAwMEZEQ0FGRDQ4Q0Y5RkRDOEZDMkZDRTlDMjdBQUVFQTVCQjIKLToxMDYzMzAwMDNEQkIzRUQyRjM2N0Q3NDc2MUZFN0M4MUY1OENFQTVCQkIKLToxMDYzNDAwMEJGNzJGRkEyRTc0RkVFNUZDMkZDMzEwOTUwQ0Y5OEJFOEIKLToxMDYzNTAwMEQxMTNGQzU0Q0Y5RkUwQTc2MUZFRDhCMDlFRjE3REEzN0UKLToxMDYzNjAwMDI3QUY1RENGOUZCQ0Y2MzA3RjUyMDQ5MEZCQzRCRUQ1RjMKLToxMDYzNzAwMDEzNkNEN0YzMjdEODFFRTZDRjIwQUNFN0JBQkVGNTJCQjcKLToxMDYzODAwMEVGODQ5RTNGNzkyN0MyRkMxOThFRkRDQUE3N0EwRkY0Q0QKLToxMDYzOTAwMDEwNUE0RjdDQ0ZGNUVDMzlBQkU3Q0Y5RUIzNjFGRThDNDIKLToxMDYzQTAwMEM2N0FBNkQzN0FCMjdBQUY2NzUyODc5RTNGOTMzQUMyMzMKLToxMDYzQjAwMEZDQzlDMzdBNjZGNEFEOUUzRDFEN0FGRUVDRTkwOEYzOTQKLToxMDYzQzAwMDI3MUZGOTczNTNERkZBMzVBOTUzQ0Y5RjQ5OUQ4QzNGOUYKLToxMDYzRDAwMDYzMEZENzRDNzVEMDcyM0ExNkJBNDRGQUM5QjU2N0RDNjgKLToxMDYzRTAwMDZFODFFNjQ1MjdDQjhCNEUxNzAxQkY0NEQ0RkMwREQyRkUKLToxMDYzRjAwMEVBMTZFOUY3RjY2RDg5MzkwRjkzNDhCRkEzQTAxNEZBOUUKLToxMDY0MDAwMDE1NEZCREIxNDhCRjIzMjEyRjRFRTdFNzI0QkE5Mzc0M0YKLToxMDY0MTAwMEY5RTRBMjAxQkFGN0ZCOTUwQ0QxOTVGNzlGN0JCNUFFRDUKLToxMDY0MjAwMDNDREQ5M0EzQ0I2Nzk0NEZEMkJEM0ZBOEE2NDA5N0JGNTYKLToxMDY0MzAwMDYyRjUwREJBRjczM0ZEQjdFQUYyNTlFQjZGRDdCRDNGRkUKLToxMDY0NDAwMEFDNkU5MUFFRkNDQUZBMEE1REY5NTU4MTk1QkFGQzM1N0QKLToxMDY0NTAwMDBERkZBRTdCN0Y1NEUzMDNCQUYyRDFDMTg3NzVFNTYzQ0MKLToxMDY0NjAwMDQyOEZFQkYyNjMwRjNEQTk3QjdGN0NFQjY2NURGOTg0ODUKLToxMDY0NzAwMEEzQ0ZFQkNBMjdCNkVERDBFNUFGM0RCOUM3RTBFN0Q5NkEKLToxMDY0ODAwMDlERUREN0YwQkMwOEI4MjdDQ0VGNEY1N0QwREYwQkM1MzgKLToxMDY0OTAwMDJCOTg1NzA2RDhEMThGREYxRkJGNTQzRDRFRTVBQkJDQkMKLToxMDY0QTAwMEIyNTg0REExRjIwNTk5MTIzQUFFRTcwRjI4QkZCMjhENEUKLToxMDY0QjAwMDNFQkY3NzkyRTc0QTI3N0Q3RUFGRTIxOUVEOENFMTlGRTAKLToxMDY0QzAwMDUyM0MwODI0MEQ1MkQ1MDRBOUIxRkM0MTk5RTFCMTIwRjgKLToxMDY0RDAwMEUzQ0JFMUM3RThGNzVFNTNEN0YwNDQ5QUVGMkZFNkQ3NTYKLToxMDY0RTAwMDAzNUU5RTEyNEM4OEQzMzg5MUQ0QzA3QjcxNjY4MkYzRDAKLToxMDY0RjAwMDgyMDczMzczOUZGNjQ3RTA3NUZEMjBBQTg3NDI3N0JENzgKLToxMDY1MDAwMEVCNjU0RjFBRjgxOTlCNkJERkY2ODMxRkIyNkUxMEVEMjcKLToxMDY1MTAwMEQ3MDA0MjlFMTZERTBFRjk4N0QyRUYwNzJENERGM0QwM0QKLToxMDY1MjAwMEZBQ0MwQUY1RDMyM0RCNTc2OEZCMjNCMUZEMDY2OEZGREQKLToxMDY1MzAwMEM1MUVEQTM3MEZDOUQzQjU2RjE5NUNBRTZCREZBMkQwQjkKLToxMDY1NDAwMEY2OURENDFGQThGRDIzNkY5RjBBNjExMjIxMkYwQjdGOTgKLToxMDY1NTAwMEM0RjZDRDgzQ0JCMUZEMDcxNTNBNUY4OTZDM0YyRURDQzUKLToxMDY1NjAwMDdFMTBGNDc3MUZCNDNGM0U0NkZGODc0Q0QyRjc3RjcwMTIKLToxMDY1NzAwMDg1QkVGRjBBRUJGRjJCQjVDNzc4RkI3MUQ4RkYxNkUxOEMKLToxMDY1ODAwMDE4RUJGRkUwMEFENjdGMzNBQjM3RENCRTIzQ0NGRjQzRUEKLToxMDY1OTAwMEQwRkYzNzdCRUE3RkQ2NjQ3REZGQUZBOEQ0RjdERkNDOEUKLToxMDY1QTAwMERBN0ZBN0Y2MTQ2RkRGOEVFREJGMkI5QzYyRkRCRkEyRDIKLToxMDY1QjAwMDEyREI1N0NDMUUxN0UwNDdDOTg4QUIwOUQwRjZDOTQwOUIKLToxMDY1QzAwMDZBOThGQTAzNUM2ODNCOTA4RTQ4QTJBMDI2RTQ1MTYxNjkKLToxMDY1RDAwMDA4RDI3MTZGMUNDM0RCRTc3MTE0NkY2ODZGRkNGODlDMDUKLToxMDY1RTAwMDA0QTg2NUNCQTVGMzJFOEVGNTE1REJGMjE1QjA0QjU4M0MKLToxMDY1RjAwMDRFRTcyQjRCMzhBOTY1NDExMUYxNEQzNjk4MDNDMzI4NUUKLToxMDY2MDAwMEJEMUQ0MUQxMEZGOUIyMERENzA1QzBGRTc5Q0Q2NDQxNTIKLToxMDY2MTAwMDA5N0MyNzkxMTAzQ0ZGRjQ2N0EzMzY0N0Y2Q0I5ODJFRjAKLToxMDY2MjAwMEE5OTNEQkRCMjJGNDJEM0M4RjJBMjAyMzZBMjg3REQzMUIKLToxMDY2MzAwMDAxMDRFM0JCRjMxRkQzNzkxMEExRjM4QjBGRTgzQzgzNzQKLToxMDY2NDAwMDUwNDg3RTIyQjNGNjNFQTJGMzI1QzhCN0QxRjkxMjk0ODIKLToxMDY2NTAwMDEzNTI4QkRGRDFFQTBFQTc1MUZBNEIzOEZEMUY0QjRDN0EKLToxMDY2NjAwMDVGM0ZCRTQzMDhGOEE5N0U3RUZFQkQzMTM4NEY1REIwNjYKLToxMDY2NzAwMERBNDY5OURFNERDNzQyN0ZCMjJFNEZGQkU1MDczOTc1RUEKLToxMDY2ODAwMEVEMzYwNzM2MEJDODVGMTVGODU1OEFBQTQ5QzhFMkY1RkEKLToxMDY2OTAwMDE5OTREN0RERUZCRjRGQzU5RTRFNTk3RjFCNzFDQkZEQkYKLToxMDY2QTAwMEU5RkI3N0FFMTIwNjM5NjlCQkIzRERFNjFDMzY0RUI4OUUKLToxMDY2QjAwMDMzNENBOEQ3MjRDMzk0NDdDOEFENEQ2MzY0NUEwMzI5MEIKLToxMDY2QzAwMDc1Q0IxRkI3NDVCNDNCQjM0ODlGOUY1REEyQ0Y3N0M4M0EKLToxMDY2RDAwMDZFRDk0NEU5RUEyODE1QzgyNjVBRUY5Q0I5RkE3MkFEN0EKLToxMDY2RTAwMDFEQkIyOTg5Qzk5OUI3NTc5MkNBRTg5QjAzNjkwRTNDMUIKLToxMDY2RjAwMDc2QTI5Q0U3M0FEOUI3MUEzRERFQzUzMjlEQzI4MjNDRUMKLToxMDY3MDAwMEZERkQwOEM4RDU5RjgyRUZEREVFNjRGRDM2RDIzQjU3MTQKLToxMDY3MTAwMEI2Qjg0QjY4M0ZFNzJFMTQwMzgwNkYyM0ZEN0ZEQTY3MUUKLToxMDY3MjAwMDczOUJCMjY5QkFGRUE3MzIzMTQ1RjdDNzQ4RkYzQzhGNjkKLToxMDY3MzAwMEIxM0Y4RDMyOENDM0YzQ0I4RENGMTk2RURBQjlGQzNGRUMKLToxMDY3NDAwMDA2N0NEMEY0MDRFMDgzRDI3RjlDRTNBM0RCQUUzMjdDRjIKLToxMDY3NTAwMDc4Q0Q5RTlCMDEwRjVENEY4ODA0RTVDQUYxNzIxQkM3N0YKLToxMDY3NjAwMENCOTIzQTNEMkUwOEYxQzgyMEM3NjU3Mzg1OUM4NzIzREMKLToxMDY3NzAwMDcwMzA4N0UzNjA1OUJEMUUzNzc3MTJCRjlDMUU0MzJFRDEKLToxMDY3ODAwMEYzMzY2Q0ZBNjE5QTFBRERCRjBGMzk2RUU2M0ZCMjFGMUQKLToxMDY3OTAwMEY5MTNERDRGMjZBN0JCQjg5Q0VFQUNEMTk3REZDNkU1NTkKLToxMDY3QTAwMDdBMjc5N0VCRENGQUM3MEU1MEYzNDE2RTU3MDMzMkU4QjUKLToxMDY3QjAwMEJCRjczRTREOUU2RDNBNzk3QUI4M0M4RDc0REVDNUU1RTcKLToxMDY3QzAwMDc5RDdGNzk4M0M4REY0QjY3MTc5QjZENTVGOTBDOTkwQkEKLToxMDY3RDAwMDY4N0E4REY0MkQ1ODFERDUxRjA1RTRCOUQwMUY1QjlFMzYKLToxMDY3RTAwMERFNjA3RUYyRjE4OEU3NTU4RDMzOTI4RjQ3RThEOThBRDMKLToxMDY3RjAwMDg2NTI1RDdFNzk2MDlFRUVGRDY1RjUwQjc1RTU0QkVBOTAKLToxMDY4MDAwMDk2RUJDQTE3QUZCRjVCOTc1RkU4RkY5RUVFRkQwNUFCNDcKLToxMDY4MTAwMDZCNzVFNTc3RDYzQ0E0MkI5RjVGRkU5ODJFM0ZDRkYzOTgKLToxMDY4MjAwMDg0RUVGRDM5NzMzN0U5Q0E2Nzk3M0NBNzJCOUY1OUI0QUIKLToxMDY4MzAwMDVEOTcyRjc1RUZENkJENkZEQTc3RDUyRDgwQ0YzNzhFNjgKLToxMDY4NDAwMDg4MDRGQzg5Q0Y1QzI3MzAyRUY4OTk0Qjc2QzEzQkM3NzIKLToxMDY4NTAwMDdEMkFFMkJBREQzNzAyRDM5MzNFMTdFMkZFQjQyRjBGNTIKLToxMDY4NjAwMEQzOEU2MDhCMURDNjA5M0EyRTJFMjU4OUQ0Q0M5QjZFMDMKLToxMDY4NzAwMEFFNUQzRjEwQzY2OTgyRTNFOTE2RDNBQzVBRkY2NDQyQUQKLToxMDY4ODAwMDdFNkQ1MjkxREZDNUY1MEEwOThEMjU0NDgwQzE4NkQzRkUKLToxMDY4OTAwMEQxMjU0Njk0QjdGNTUyNUU0RjBEN0Y3Mjc0Nzk3MTVCQzYKLToxMDY4QTAwMEVDRTdERUM3MTc1RUUxOEMxMTc3RTlENjUzOTIwMTdFRTMKLToxMDY4QjAwMDRGMjdGN0JCOERFNTk1MDIyOTg5N0M0RUM4MDNBOEQ3RTEKLToxMDY4QzAwMEU3RjhCODVCQTkzMEZEQUZEQzkxNUU0MDFDOTAwRjBEN0UKLToxMDY4RDAwMEFGQjk1QzdCOEQxNEU0RkQwMTI3NTkzQTNENUU1NjdGQ0MKLToxMDY4RTAwMDhEQ0VCRTEzODhDQUY2MDNCQzhERDUzRDVGRDE3MEFEODkKLToxMDY4RjAwMEVFQkIzM0ZCNDVBNEJCMUE2Q0M1NDQxODE2NEI1RTM3ODAKLToxMDY5MDAwMDgxMUQwRUI1MEM5RTM5MEFFODc0QkY2MTgyNzEyQUQ4QzgKLToxMDY5MTAwMDBGRkRDMjMzQkVBMkU0RTMxMkM4QUYwNEQzOTNCRUI5RTUKLToxMDY5MjAwMDk4QjZGQjNDOTgxRUY3OTU2M0ZBQjFBRjA2RDMzNkRGRjUKLToxMDY5MzAwMDZBNEMzRkYyRjkzMUZEQzBCNzFFRDMzRkY5RUEzMDNENTIKLToxMDY5NDAwMEVBQUJDN0Y0M0Q1RjAwRDNDM0JFMDY0Q0RGRjEzNTYyNEUKLToxMDY5NTAwMERBRUEwQjYyREFFMTczNjNBQUU5NUQ2RkI4M0JDOUM3OTMKLToxMDY5NjAwMEUxRDM4MEJGMTgzOEVCNzg2MDU1RURGQUM5REQzODNCQ0MKLToxMDY5NzAwMDZGQkFBRkQ2M0ZCMDlCQ0ZDNUY1NjY4RTg3NTQxRDFFNEMKLToxMDY5ODAwMEJFODA2MDMzRTJBQzk3RjI3QTk5RTNCMEE3RUY2Mzk3RTkKLToxMDY5OTAwMDdCMzdGRjZCRjAzNkRFQzRGQ0NDNkY4QUI3NkUzQzY1OEMKLToxMDY5QTAwMDE4RjA5NEQ1MUI5RUZBODlFM0JCRjEzNERFRTQ2NDdFRDMKLToxMDY5QjAwMDBGQzdEMzhGQTAxRjMxRTYxNTA1RTA4NEY0OEJGMEQ3MDUKLToxMDY5QzAwMERDMzYxNkE3RTZFQjA5RDQ1MzY1NzE2QURFRjYxQUZBQ0YKLToxMDY5RDAwMDZFMkJGQTc1ODExMTMwNkU5QzFGRjFCN0UxMTA4NzNGNjUKLToxMDY5RTAwMDdGRDQ0QzI3N0QzREY3Q0Y4ODkzOUVGOUVFQzZGOUNEMzUKLToxMDY5RjAwMEQyMDAxREJDQzY0Njk3NUJFMzE4NUZBRDI2NTI0NEU4NDMKLToxMDZBMDAwMEI4RjZEMEIwNjc1QzhCNDY2MjVFMjI0OUYwN0RDMDU1MTcKLToxMDZBMTAwMDFBMUZBMzVFRUEyQjAzN0Y3QkUzRUI5QUY4Q0ZCM0ExQTcKLToxMDZBMjAwMEJFRjYyN0ZGOUUwQkU5NzgxM0YzOTdFMzVBNDRGNERCOTUKLToxMDZBMzAwMDQ5RTg2OTE3RjAzNzNDMkU5OTVENjkxMERGRUUxQUE2MTgKLToxMDZBNDAwMDM4RDE2RjA4RDhGNUZDRjNEMzdDNkUzN0ZGMUVBMjNDMUIKLToxMDZBNTAwMDZBQzU3MUI3MkUwREY5MzdGNEYzRTFFOTdERTA1RjZGOTgKLToxMDZBNjAwMEY2QkQzNzdFMkUwQTBDRjg5N0YwQjMzN0ZCRDg5QjVENDYKLToxMDZBNzAwMDI0NkVGNUM1MjBFRDdGRTdCRTUxMzkwRkFCNjAwNzg3NjcKLToxMDZBODAwMEIwNzk1QTBGRkNENkQ2QTU4Q0Y0N0NGRjZCRTJCODMzRjQKLToxMDZBOTAwMDU1QzM3MUVCNjA0MkRCRjk4OEVCQ0JGOUE2MkIxMzQwQjEKLToxMDZBQTAwMDJFQjQxRTlDMUY3NEVERTQ3RTdFMkY3MjNEOUJBOUFGMTkKLToxMDZBQjAwMENGNkJBQzJGNDEyMUMyNjhEQTZFQkNBMjkwMDQ0MjZBNEYKLToxMDZBQzAwMDQ0Q0ZBMzIyQ0U2RjVDNkQ3RTg4MUJFQ0IzQjlENkE4RjEKLToxMDZBRDAwMDMwNkYzQ0ZENjY0ODg1MUFGNUYxODVGMzg3OUU3NkMwRDgKLToxMDZBRTAwMDNDNkM2NTlBQzk3OTNDODYxQ0I1QjRBQTMxRDM2OThGRDAKLToxMDZBRjAwMDlDQUYwNEY1RjlGMzc1NDI1MTIzQ0VFN0Q0ODQ1OUEzMzIKLToxMDZCMDAwMDYwOUM3MTNBOEYwRjA1QkI5Rjg2QTk1NkNGQ0EzNEM1Q0EKLToxMDZCMTAwMDc5OUNEQURERDMwRDU5MDk2Q0ZFMTc2MEY2NjQ1QjIyQUYKLToxMDZCMjAwMERBOUJEMzNFMEJCRUZGQ0ZBNkE3QTc3QTM0N0EwODY5QkIKLToxMDZCMzAwMDIyOUY1OEMwOUVEM0IyQUM5RURGRUY1MTFGQTQ4QjBBOTgKLToxMDZCNDAwMEM0Mzc0OUIzRkMzOUNDMzdBREY0RkZBRjg2NDBCRDEyMzIKLToxMDZCNTAwMEU2QjU3QUJEOERBMkRGM0MxQTlFNkZEM0I1NDdCRjUzMTEKLToxMDZCNjAwMEI1QjU1N0Y4QUU2N0JEOTM0OEJCODY3QjJBQkY1N0Y5Q0EKLToxMDZCNzAwMEZBRjA4QTA2QUI1M0VGQzcyNkVBRjJERTYwQkE1M0U3QjMKLToxMDZCODAwMEQ3QzIzRkMwNzFBRjExMjRDMDVGMjU4NzVGQTc2NDVGODQKLToxMDZCOTAwMDBGNzhEQTBDQzE0Mzk4QkYwOEVDQkQyQTRCOUJFMjUxMzkKLToxMDZCQTAwMDUxNUQ1QTAxOUY4QkYyMzRGQ0FCNzNGRTRDRURENEE5QkUKLToxMDZCQjAwMEQ3NjUwMjdBNDZCRUE0NTRFNUYyQTkyMEUyQ0Q0NDRDNDIKLToxMDZCQzAwMDM0QkY5OEJGQkRBODY5NDUzMThDNUJBNzRDNkNGRTUwQTMKLToxMDZCRDAwMDQ2NEExQzMwM0YyRTI3NzVCOTEwNEYzRDRCNEM0NUEwRkYKLToxMDZCRTAwMDlGNjdDOTNCOEVCMTExRkE3ODRFNTRCMEQyQzVFQkY1MTAKLToxMDZCRjAwMDdFM0M5RERGRUJGMkNCRUFGNUY5QTVFNEQ2NTQ1ODA3Q0QKLToxMDZDMDAwMDVGQkE0MTI2MDEwMUVDODZCRUZDOThFOEM0N0E5NzkxRjAKLToxMDZDMTAwMDlBNzUzMDZFRkY5Q0M3QkIxNjM5ODk5NDQxRTlBQkZBNkYKLToxMDZDMjAwMENEMkY3MzE3NTIzQTJFODk2Q0ZDRDVENjcxOTcyNzMxMjgKLToxMDZDMzAwMEZBMkI2NjA1MTQzNzdERkY5M0E2QjFCNzUxMEI0NEJGRkQKLToxMDZDNDAwMDBGQUM4Mzc1NkQ3RjI5NzE2RDI1RDFGMkZCQkFGNDFCRjIKLToxMDZDNTAwMEU5RDVGQzgxQThGNTY0NEU0NzRBODNFMDBFQzRCMDYzRDEKLToxMDZDNjAwMDhBMjQzMDNERTNGNkVFNkFDOUE5OEI4M0U0NDIzRTIyRDIKLToxMDZDNzAwMDBFRjI4REYxOTQ0Mjc0NzhEQTJDN0EwNjRCRTMxOTdFODkKLToxMDZDODAwMDAwMEY4MkQ0QTU3OEJFNERGRDY5NTFGNTVGMkRGNUZCNEYKLToxMDZDOTAwMDI3RDYzRjkwRDY5RkFCQUIzRkY3OUY0QUZGRDAyOEZBNEQKLToxMDZDQTAwMDBCNjJENTVGRjU5QjE3NzZGOUE5M0RBOTc4RTk2NzBFQzgKLToxMDZDQjAwMDQyQzdDOTUzNTI1REFBOEJDQUI1NzJFQjBGMUQ2RTlBQkIKLToxMDZDQzAwMDlFOTRGQzBFQzBFQkE5ODA1ODE0NEJERUFCQzNGMjc2NDkKLToxMDZDRDAwMERCMDU4OEJCQzEzRjY5RkRBNzlGRkYxMUM2MjMzRURGQ0YKLToxMDZDRTAwMDJBM0IzMTlFRDY2MDBFOTlBOTNFNTYzNzJEMkYyNkQ5QzQKLToxMDZDRjAwMDk4M0ZDNkYyMEY5RTEzMjExRkQ0RTNBRkUyRDk5RkE1QTAKLToxMDZEMDAwMEMyRkUwQThBMTQxRTVGMEFBMTNGNUJCREU1RDM0MjFDODYKLToxMDZEMTAwMDlGNDgxN0VBOTFGMTNCNjhGRjUyMTJEQUJGODU0QTQyNTkKLToxMDZEMjAwMDc0MzlBNTEzRTMwNDVFQ0UxNzZGRDM4RkNFODkwRUY4QTYKLToxMDZEMzAwMDU3MUJDRURGOERFRjk3NzNGRjc0QjkxNDlGRDI2RUEzRUMKLToxMDZENDAwMEZGOUU0MDI2ODAzREQ0Rjg0MTAyQ0MzRjVERjNEQzJGMEUKLToxMDZENTAwMEIyOEY1MTdBQ0U2Qzc5REQyMTQ0RjA0OUQzQTNGMzhEMDMKLToxMDZENjAwMDhCN0ZCNTQ3RUREOURFNzY1MDNEOEJGNDgzQjRGMTRBODUKLToxMDZENzAwMDBENzJCRkJBOTlBNTk1NzJDODcxMkRENUZCQ0E0REIyRDcKLToxMDZEODAwMENCNEYxRjU3QkVGMEY0MzM0RjQyMUNGMzhGNjZENzMwMDIKLToxMDZEOTAwMDVBRkY4QTE3MEVCQzM3ODlFNjU3NkM5NzUzOEE1OTM3QzIKLToxMDZEQTAwMEVDNDI2QUI3NUNCQ0Y0RkZENTM5REQ3MkE4NzhGOTgwOTMKLToxMDZEQjAwMEEyOEU2MkNGRUY0RkVBOTZDNzhBRURGQjE1MzIyQTlBNzAKLToxMDZEQzAwMDFGNTMxQkY3MkI2REY2MTg3MjY5M0M1NjA4N0VDMjlBNEEKLToxMDZERDAwMEU3RkU0QjgxRjhFMkE5N0QwMkU5OUYxOTgzOUY5QjBFOTQKLToxMDZERTAwMEEwMUYwMDdDNDIzOTcyMzk4NUU1NjY3OERGNEJFNTAyRTkKLToxMDZERjAwMEY2NUE5MzkzQjFGQzQ2NkU0RkEwM0U3NTI0RTJGOUM1NTYKLToxMDZFMDAwMDNEQjRGREYyM0Y5OTVERDBGRkYyMTdFRjcxNDAzRjRFNjgKLToxMDZFMTAwMDQ4MzUwQ0Q3QkZGQzYxMkFEOEFGNzJEOTlGRUFDNDk0MTkKLToxMDZFMjAwMDNEMkY3RkVBQkI4OEI3NjU2RjdGMzcxNUUzNDlDNDlENjcKLToxMDZFMzAwMDZFQzJCMUM3OUYwRUZENUJCMjcxMzZGNjZGMjlGMTIwQUQKLToxMDZFNDAwMEVFQ0E3RjI5OTYwNDY4RkE5OTQ0OEFCNkM3RDA4QjBFOTkKLToxMDZFNTAwMEFFMTcyNzM2NTM0NzhDRjZFRjA0Q0MxRkMxNUVCRjIzMTUKLToxMDZFNjAwMEUyQkUyQTQyRUUyNkEwRkZERkU1N0RBMTFFMDJFNjNGM0MKLToxMDZFNzAwMEIzMzAzOTFEOTA0QzVDQUZBOEI3MTk4OUQ3MkQwRkI2MjgKLToxMDZFODAwMDgyN0M0RTBGNzJGNzg3NzUxNjJGOTFGQzlDMUZDMjU3OUMKLToxMDZFOTAwMEI0NUVGMUVERTlGRDk5N0M4ODJBRTVGMkVGRTgzODNGMzAKLToxMDZFQTAwMDE1OUVDM0ZCQURCMkRCOUFBREZCOEU3Qzk1RDlEREZFQTIKLToxMDZFQjAwMDJBREUzRUE1M0IwRUM2RTcxM0E5QjFGREQ1MDFCMkE2NTkKLToxMDZFQzAwMEY3NzQ5QzhFQzA1Nzg0N0UzMzdEREZGMjEwRDM2RjRERjQKLToxMDZFRDAwMERGMDNBNTQ1NTA3RUYxMzBEMzFGRjgwRUM2M0Y0QTU3NTkKLToxMDZFRTAwMEE4M0Y5NkVGOUYyNUEwM0RBMEYzRTY1ODdBQkQ0NUU2NjIKLToxMDZFRjAwMDdBQUQyRkQ3NzA0MkU5OTY4NDg0MDhCQzQwRkQ0OUM4MUEKLToxMDZGMDAwMDdGNUM1RjU5QkE4MTdFMTc2MTJGQkREMDlFMjNCQTNFNDgKLToxMDZGMTAwMDRENkY5NzcxRkQzRjA1RkE3RjREQjdGRTkzOEQ0Q0VGOTYKLToxMDZGMjAwMDdCRjY5RkZDMkM2RTIzMDc5RTc5MTJGNDk1RUFBNzVGRUYKLToxMDZGMzAwMDA1N0Q5NTRCQTBERjdGRERENkYyREVFRDU0NEZGRkRBMDUKLToxMDZGNDAwMEE4RTlBOURFN0UxQUY1QjQ3Q0M3NzgxMjRCNEZGRjZBMTgKLToxMDZGNTAwMDc3OTE5ODdBNEE5RkM3RDQ1MzdCMUJFMkY4RkY5NEZENDAKLToxMDZGNjAwMEQ0Rjg5NzI4RUJGOUE3RDlDMzlFRjg2OEI0ODcyRjRBQkQKLToxMDZGNzAwMDJBRjJEMzY4MEZFOURGNjE5MjFCOEQzRjBENzcxQURFOEQKLToxMDZGODAwMDJBN0U1RDc1MDVEODlEMzAyRTM1REM4NTcxQTlFMTJFRjAKLToxMDZGOTAwMDJBN0VBQkUzOUZCMUZDQ0YxMDZCQTI3NENEQjdENDRGNjgKLToxMDZGQTAwMDgxNzk4NEE1OEJFMEJDMkI3Rjk2ODhFQkE2OTY4QjA0MTkKLToxMDZGQjAwMEY1QkU4MEM4Qjg2RkYwN0Q1M0NENzhGMDQzQTdGQ0ZERDcKLToxMDZGQzAwMEI2QjNGNzUyN0FFNzEzQkZDQ0Q2RTVFQjY0RjRFQkJGNjgKLToxMDZGRDAwMEZDRUFBQkM5QjQzRkI3NzNGRUNFQTdFQ0JFODlDQTYzNjcKLToxMDZGRTAwMEFFMjQ4NEUyMjg5REYzMjRFMjRGNDg4MkY4QUM0MDNFNzAKLToxMDZGRjAwMDhFQTA2MzdFQjkzRTBGN0Y1MzUyQkJFQkU5RURGREFGMzAKLToxMDcwMDAwMDNCMEZGOUE2RTlEQjNFQjY3NkY1MkVBNDQzQjE3OTI5MEMKLToxMDcwMTAwMDEyNEZBNTIwNTdDQTNGRUYzODIxMzAwNEVENTI5QjU0NDAKLToxMDcwMjAwMDEyMzFBRjdBOUNEQjlEQjdBN0NEMUMwRkZFNEJGRTlDQTcKLToxMDcwMzAwMDUxMDkwQ0U3ODM3MTdFRUJFNUY2RUJCQzVGNEQwMEJCQkQKLToxMDcwNDAwMDdFQkUzOTBCRTdBRkU3MEYyRDhFOEZCNTZGQjI4NUUzQUMKLToxMDcwNTAwMEVDMDA1RjU3RTlCNDBCNzUyMkM1N0QyN0U5NDJGRkM1RjcKLToxMDcwNjAwMDZGQjc5MkFEMzFENkZEQkUyRjlCRjhFNDgzQ0I4REZFN0EKLToxMDcwNzAwMDg5NTQ2RTczMzkwRUU3RDE0RjEzNzIyMkU0MzZFQkE2QjIKLToxMDcwODAwMDUzOTIyMzVBMEVGMEY3NzFDNDNDRUJEQkYyMTc3MDBERUMKLToxMDcwOTAwMEZDNkRCMUI2MTU5NkM0ODhEN0ZEODRGMzZGQ0EyQjVGMUIKLToxMDcwQTAwMEUwRkVENTY5Q0RGOTEyRjA3MTlBNURENEM1MzkxRUQ0RDAKLToxMDcwQjAwMEY0NzUyNDE5MDk3NDRENzk2NUY5QTNFMzI5OEVCRDg3MDgKLToxMDcwQzAwMDQ0MTdFQzU3RjUzNjlGNTMzQzMxRTZCQjQ2N0U0MkZERjQKLToxMDcwRDAwMEUwNDcxRTkwOURDOEFGMjM3MkM5MTJFMEVCOTFEOTU2Q0MKLToxMDcwRTAwMDAyRUI5NkVGMkFBRUFBNTg3NDRFMzdCMzc4QzgzQzUyREEKLToxMDcwRjAwMEYyRDkzOEUxRkYzRUZFRTZDRjg5MEYxNTUwN0U5Q0I3RUUKLToxMDcxMDAwMEIzRkRDMEQxRjg2MzdBN0ZERTI5MDQ2QTA1QzBBMUM4NDcKLToxMDcxMTAwMEYyMjk0MjAwRTI2NDg1QzRGM0U4NjQwMUY1RkRGQTQ4MEYKLToxMDcxMjAwMEZCOTUxRjJDN0QwMUY2RDU1NDM3MEI0RTEzMkRBRjk2RDIKLToxMDcxMzAwMERBMTRDMEIxMzdCODVEMDJGRkZDNDY5NUI4MzFERTIwRTUKLToxMDcxNDAwMEQ1OEM5QTE1MTFENzNBMjA0QkM4QUY5NkJGREQ3RTI3NTQKLToxMDcxNTAwMEYwRjdDMjJDMzMwMUJBREMyM0NGMzk2MERDQkZEMDNDNUUKLToxMDcxNjAwMDE2RjVBMEE3N0VGREMxNDdBNjRDOTNBMDFFODJGODMwNUQKLToxMDcxNzAwMEUyQTEzMEM1QTZDQkNGOUU0QTA2QkFBOERDQTY5OERCMTIKLToxMDcxODAwMEVFNzFDNTkwREYzMjg1RTFBQ0NGRjZDREYyRkY5OTdEOEYKLToxMDcxOTAwMDlCNENFRDFCQzNCNTFDNjlERjQ2MkI1MUY2QUQ3RjJDMTQKLToxMDcxQTAwMEZCQjZCMjU2RUQwRkI4NThCOTM3QUIzRkM4NzVFNTZCQjMKLToxMDcxQjAwMDRCRkFDNUIyNkZBRkZBRDhGQ0ZEMzVCRTBGQkI3MzIwREEKLToxMDcxQzAwMEI1NkZBMzIzRUNEQjQwNkFERjYyQzQ2REQzMTVDREZGM0UKLToxMDcxRDAwMEVDQzVCRTU5RkU3N0Y0RUY1NUIwNkYzMUZBM0I1MkQxOTIKLToxMDcxRTAwMERCQjdBMkU2NUFCNDZGNDUwMzQ1REQ3RUE4MkM4NUNGRjgKLToxMDcxRjAwMEU3N0FCNDZGMEI3RjM2MUJGM0IyQ0IxNjAzM0ZDMDU3NTEKLToxMDcyMDAwMEIwNkZBRjcxM0IwN0VEODA5RDVCQTQzOEIxRkRCRURBNzYKLToxMDcyMTAwMEI5RDJCRURBQjlGRjI1M0U2Qjc2NkVFNTIwNzY5RTIzQTUKLToxMDcyMjAwMDFBODdDQ0NFQURDQzY0NzY2RUU1NUU2NkU3NTYwRTYzMEIKLToxMDcyMzAwMDc2Q0U2OERGMEFBMkVDMUJGQkJFN0EwNEZEMUVFNzhCNEMKLToxMDcyNDAwMDk5QkZCODgzOTYxN0NGOTU1RDE2RkE3RUIxQUE5RDVGNTgKLToxMDcyNTAwMEE4MTkxRjY5RUYxNjI5MTJGMjM5Q0FERUI5Q0VFMTM5MzEKLToxMDcyNjAwMDkwREVFQ0RENUI2MEVGODZBMjFEMUIwQTdBNjRDNEM3NkEKLToxMDcyNzAwMDBENDM2REJBRkQ3MjQ3QkU2OEZGRjU0QkEwMkY3RjEwMUUKLToxMDcyODAwMDcxOUVGREJFODlDRDhCRjY3REQxM0UxNkY0NkUzN0E3N0IKLToxMDcyOTAwMEU3NTE4NUM5QjNDM0U3NDc3QjNBNzUyNEQzRjdBQTQzQkYKLToxMDcyQTAwMDcxMzg0RTU0MzcwOUFDQkZGNzBCMDExNUM2ODFCRjVENkQKLToxMDcyQjAwMEMyRjlGMjlEN0JEOTdDNzk4RTk5RjE4M0ZDOUJDOENFNzMKLToxMDcyQzAwMDVENTAxNjJDOENDMEMzREM0QjE1MThENzlDMkIxMTBCQjIKLToxMDcyRDAwMEY4QUYwQjBFREQ3MDBBRkNENjA1OTdENkEzQkZCQjAwMzYKLToxMDcyRTAwMDlFQzNCRTg5RUQ2REVCMzI2OEJCNzcyRTE3NzBERUExQjEKLToxMDcyRjAwMEVERUY5ODE3QjY5NzdBM0Y3NjdFNzNFQzdEMUE1MzM4ODgKLToxMDczMDAwMDNENTNFRTEzMDJCMDJGQTdCNzdEMTAyRjcyRkQ5QjIzQzQKLToxMDczMTAwMEI2MjFCRkM4NUI2MkNDRjhBNEY2NUU5ODRGMkVDNjk3MjQKLToxMDczMjAwMEFBNTVDQzZGMEVGMzg5RjI0RDE1QTJGOTQ0MjU1REJDMjgKLToxMDczMzAwMDMwQjU5QjJGNzdFRUE0RkQ0REU5QjlCRjFBREZBMkY3NTgKLToxMDczNDAwMEUxQjg3MTNFQjM4MEJGRDcxMzFGMzQzRTQ3RjU5RkYzQkEKLToxMDczNTAwMDlERkFBOUI4OUZDN0M4OEY0NkNEQ0U1QzQzNDY4MTVFRDMKLToxMDczNjAwMEJFNkZGMjNDM0ExRTcwRjQ5Rjk0MkY5NENFREJFNjBENzQKLToxMDczNzAwMEQzOURFN0Q5QzVGOTcyOTNFN0Q4QjQ1NDE1Rjg0ODZBOTQKLToxMDczODAwMDAwNjdCNzk3NkYzRjkwNEFGQjc3OEIzQjMzMDc0MkU2MjYKLToxMDczOTAwMEIzRkZBNjc4MjBGRUQwNjJFRDQyM0JBOEUxMzBDRENDMTEKLToxMDczQTAwMDcwRjg1NzhFQzMyMzAzOUNEMzcwQkMwOTBBNEVENEFGMjgKLToxMDczQjAwMDkwQzFDRUYxN0Q2NDVFQ0E2N0QwNUY2RjkwOEY0RjE0MkQKLToxMDczQzAwMDlGQTA5Rjg1REE3ODA1NzJBMUZGQkNBOTk5QzlDNTVCMEEKLToxMDczRDAwMDIzQTA1QzZFMjY1RDA3ODFFRkQ1Mjk4MjJCNDRBQjJBNjIKLToxMDczRTAwMDBDNkVGRjIxRUNCNzdBRDU0QTlGODM5RTk3MEJBRUNERUEKLToxMDczRjAwMDhDMURGNkY0RDQ5ODM4OTY2MkUxMTgzNzA5NDY4QzlCQjgKLToxMDc0MDAwMDBCRTBCRDI0RDhCNzY4QzZGNkVGRkMxRUIzNDc0NjNGNzUKLToxMDc0MTAwMDY1OEFCOUY1MDhEMDMzRTVERjY0QjIwOTFFMDZFODdGNTYKLToxMDc0MjAwMDExMzgzMEZBMzE1MTdBRjAzNUY3RkRBNDcyRkJGRDJBOUMKLToxMDc0MzAwMEM4QzEwRUZDRUU1MkMwMUZGMjg2RDhGOEEzOTU3QjI1N0EKLToxMDc0NDAwMDc1MUFGMjREOTM0MzkwOEUyRkUzOTgxQzYwQTlERkM4MDQKLToxMDc0NTAwMEU3NUJCNDNDRTAxRkRFNkYxNjY0Rjg3RTA2OTU0RjMyQTIKLToxMDc0NjAwMDJEOUE2QUZBRTJBMDg2NzdCMzFBQ0QyRjg4MjdBNDQ3MEYKLToxMDc0NzAwMEQ4MERCMDZGOTFFQjk2RDVDMUI3OTE0RjM3QUNBMkVFNTYKLToxMDc0ODAwMDk5MUFDRDI3NEQzRTYwMDcyRkM3QUYyOEZEMDlFRThGMTMKLToxMDc0OTAwMEI5N0ZFQTlCRUE0RjlBNTlBRjNGRkJBQzVEQUY4Rjg2NEQKLToxMDc0QTAwMDM4REE1RTAxRUQwQTY5NEVENEM1MEZGMkNDNkM1RUQ2QjcKLToxMDc0QjAwMDYyRjUyMENFQkI1RTkzNUQ5QkQ1NjhGQjczMTU5NzBCODEKLToxMDc0QzAwMENDNTcyMkNGRUY0RDg1MEVDMUJBQjFEMzRBM0VEMUZBODcKLToxMDc0RDAwMDNEODRFMTJDNzIzQzc4RDVFQTQxRjlGNTU0RkYwNDVFMTUKLToxMDc0RTAwMDdGNEZGRTk4OTZGRjBFQjQwN0ZCMTY1NTdEN0JDNkYxQzUKLToxMDc0RjAwMDQ4OEIyN0Y1RDZBRjY5NjY2NjNGQkU2OUJGQjQ3NkJFRDYKLToxMDc1MDAwMEVFQkE4Mzk3QjQ2MkZDNEQ1QjdGRDgyQzdBN0UyRUMzOTMKLToxMDc1MTAwMEZDQjg0OEQwQUQ3MzUwQ0E3MUZERjI5RjUwRkY1OEU1REEKLToxMDc1MjAwMDMyRjU0M0ZDMjg0NEY5RkNFQUI2QTczMTVFN0RGNkY5NTIKLToxMDc1MzAwMDYzMzc4M0ZFQUNGOEFENDgyQzU0OUYzQUI2QzU5MzEwMjAKLToxMDc1NDAwMERCMDdBMjgwOUY1MEQxMjRFMjdBMTY5MTQyQjkzMzIzRkYKLToxMDc1NTAwMEZDMEM0MkQ2MzA3RUJDMTQ4Rjc2QTc2Mjg3Mzk1MDRDMjMKLToxMDc1NjAwMEJGQUZEOEY1NDkzNkM0REQzQTFFNjBGNkNGRkYzQ0M3NDEKLToxMDc1NzAwMEEzQkYyRDFCRDZGQjJCMjRCNjhFNkY5NENGQkQxQzlGQjMKLToxMDc1ODAwMDY3NzZEQkU2ODJGRDE2MUFEODc5RDc4QUM2MzlCMjM5MTIKLToxMDc1OTAwMDIyQ0U1MDY1OTY1OTVDN0JCNzBERjc1OUZCOUYxMzcwNEYKLToxMDc1QTAwMDlGMzJEMDE3NzlDRTUyREJGRjc5RTYzOTY2OTcyQjgyNkUKLToxMDc1QjAwMDcyMDBDRUNENTYzNDZDRUY4MDM4NzhDNTUxMzNGQUFGQjcKLToxMDc1QzAwMERFODY3MzBBRjhBNzUzNUY3QTAxRkQyMzZGNTBENEM1OTYKLToxMDc1RDAwMDQxQTNFMjhGMEQ2MkM4MENGMUIzQTYyQUI0MDMzNDdGMzUKLToxMDc1RTAwMDBDRjM4REIxRTNGMEJEQzVDOTU2QkNCNDc3OTc5RkIyMUIKLToxMDc1RjAwMDcwQzVDQkNGM0FGMERDNkNFQjU2MDdDNjIxMUIyRTFGQjMKLToxMDc2MDAwMEZGOEY4QTM3MzYzRTc0RDk3OEUzNjk4RThGNUY5OUY1OUMKLToxMDc2MTAwMEVCMzVBNDIxMTlFMzkwOTRCRURDOTIxODcxOEIzMEVFMDcKLToxMDc2MjAwMDVGRjhFQzI5NTgwRjNCQjNFM0FGNEYwMUJEOTVGRkI4QUUKLToxMDc2MzAwMEYwRDQ3REUwOEZFREIzM0E2MUJDRjYzRTdGMDRENzEzMDIKLToxMDc2NDAwMEI0RUY3NjczM0RFRjc4RUU1OTVDODdFOUY4QTNEOTA1N0UKLToxMDc2NTAwMEI1NzVFQzNEMzExOEQ2MjMzQUI2N0Y5MTBBNzFEQjU1RUEKLToxMDc2NjAwMDdCQTdFMzNDNkRENUNFQTlGRDQ5OEM3OTgwOTYwMjZFNEYKLToxMDc2NzAwMDAzN0Q1ODA3MzJDQUFCQTVBOTY1MzBEMDc5OTZDQTFCREQKLToxMDc2ODAwMDVDQjY3MEZDQjhCMThBQzVFMzU1MUUzN0RFMTY3QkJEMEIKLToxMDc2OTAwMDJEMkE0RURDMzRGMzk2RUI2MEZDNkU5MjVEMkFFOTQzQjIKLToxMDc2QTAwMEJDRjgzMDk1RTNFODNFQzg2RkRCNDM5QUJEOEYyOUJGMzUKLToxMDc2QjAwMEIzRjAwRjJBQTdGNzBERjJGQkFDNjlDOUFGOUU4NEIyRjUKLToxMDc2QzAwMEE2RTQxRUUzQzVBMTNFRjA0RDVCQ0ZEQjYyNzY3RjZDODYKLToxMDc2RDAwMDA2QkREOUYxNkI4Q0NGODNEQ0U4NUM4Mzc0QkNGMEQ5MzgKLToxMDc2RTAwMDYwODhCMzlDOTRCQkVFQzJGRDMzN0JDREI4MkZBQTYyRjkKLToxMDc2RjAwMEVGRkJBODNGMUQzQkRGQzZGNTMyQzJEN0Q1M0E0OEY4QUQKLToxMDc3MDAwMDhGQUQ4M0YwMzk5Qzc3NEIzQzhCMzM3M0ZFNDMxQzVBMEYKLToxMDc3MTAwMDc1RTA3MzFFNkY2NjM4RDZFMkQwM0RDNTlGRDMyRDZDRTEKLToxMDc3MjAwMDNGOTFCNkNFNThCNUU1Q0YwQTMxQzRGNTg1M0M5MEQzMkMKLToxMDc3MzAwMEIxQ0JBRThCNkE3QzcwMDIxRjI2NDRBRUE3QzQ4RUYzMTkKLToxMDc3NDAwMDg3RDdEREI4QkM0MDdFRTA3Rjg1RDc0QjY4N0UyMEM0RkMKLToxMDc3NTAwMENGMDNDMkZCMjQ4NjNERThEOEM0RDY2MTNBRTREOEZCMDcKLToxMDc3NjAwMDBGQjVGNTk1MTQ4QjQxNEYwMzdENUI1N0U5OERGRUFGNDcKLToxMDc3NzAwMENCMUYxOTI2OUJFM0EzRjk3NEU2Q0JEODc2N0M4MjQ1MTAKLToxMDc3ODAwMEY4NzZGQjYxMkE4NUE4RjU3RjBCQUNDRjM3MUQ1MzYwRDcKLToxMDc3OTAwMEZFQTE4RDYzNUE3RkNGRjA3OUYyOTlFNzQ1M0NFRkIxQjYKLToxMDc3QTAwMEFFQjEwNUVEQjhEMTVFNTQxMzE2MUYzNEQyM0I4M0QzNkUKLToxMDc3QjAwMDVCMUQ2NEUzQzQ5OTFERjEwMTNCQURFN0NDMkJCQjExMEMKLToxMDc3QzAwMENGRDVEQjhFMjk3RTVBREZDMTg2OTc5NUI2ODhGRDUyQ0MKLToxMDc3RDAwMDMwNEUwNDIyRTgzRkYzRTJGRTZDQjY3RUM0RTZFNUM2MTYKLToxMDc3RTAwMDc2RTZGMDc2QkNDREIxREJGMTZFM0JBNzZCNjc4NUJGNkIKLToxMDc3RjAwMDUxNjFFNzc3MkVERkRFNjlDOTNEMDdFQTNCREQyQTEzRDkKLToxMDc4MDAwMEQ4QkY3RkJBNTEyQzBBQzQ2ODdGOTI0NUQ2RTJGMjRDQTkKLToxMDc4MTAwMDZGRTg3ODg5RTcxREUzRDlGOTQ2MzE0OTQxRkY3QTU1ODgKLToxMDc4MjAwMDdDREVEMTg0MTQ0ODE1MTVFMjE0NkI2QUQ5RkVEMjM1N0EKLToxMDc4MzAwMERGNzdBNTgxQkNENzI0REU4NkVCNkQ3NTA2RkUzQTUzNTMKLToxMDc4NDAwMDlDRjkxMEJGNzA0RTJCMTkwNzcwMzVEQTlCNDRCNzQ5NkQKLToxMDc4NTAwMDQ3RkZBQUY4QTJGRTcwMUU3RjJERjdDNzg4RTRDMkYzODcKLToxMDc4NjAwMDk3QTJBM0IwMDhGQTIzM0E0RDRFNkI4Q0Y1MDVEOTVFNkEKLToxMDc4NzAwMDQyM0MxMTdDOTE5REZBRjM5MkU0Q0JCMTJBRDRBM0VENjIKLToxMDc4ODAwMEEzQTlCNEI0MUVDNDQyQTcxQkI3MEE0Qjc5RUNEREZDMTQKLToxMDc4OTAwMDU5NEVFQzc3RTczNjNFNEY3MDEzRDU5OUNBRjY4M0MxM0YKLToxMDc4QTAwMEI4RDFCOTIzMjE5QjhDQzYwRjg5OUJFMkQxQzY5RjBCMEYKLToxMDc4QjAwMERCRjZFRjA3N0JCNEQ2NDFEQzg5NTRDRjI4NTc1NTMxMkUKLToxMDc4QzAwMDBCQ0U4RDhFQjEwODU5ODBEMzczNkZGRTk2RDY2QjZEM0IKLToxMDc4RDAwMDE2NzFGRUQwNjlEN0Y2ODVCQTEzNDFDRjZDRTQxMURDN0UKLToxMDc4RTAwMEZGMDc1MEZFMkFCOTlCNEVFM0JFNDAwMkFGQTQ3NkRGRUQKLToxMDc4RjAwMDJCMzE1REI0RTNCQ0U3RkM0NjE2MDcxMEM5RDVCRjk4MzEKLToxMDc5MDAwMENDRTI3MDI0MDBGNEYzRjE2NDA1QTdGMzNDQTRGMDdFMEMKLToxMDc5MTAwMDk5ODJFNzNBOTZCREY2NzI2RTg4MzAzOTQ0RjIyQkI5RjcKLToxMDc5MjAwMDQ4N0ZCRUI0REVFQUM4ODY3NTc5RTI3N0I3QzIzOTk5NzYKLToxMDc5MzAwMDMyNUU1RkJGMTJGREI5NTNBQTdFN0VEMEQzMjU1QzRGNjUKLToxMDc5NDAwMEZGQkFCNEYwMTBEOEJGMzJDRjUyQjRFQkZERTdFQUNGQTQKLToxMDc5NTAwMEE1MUFGNzU5MjFCREIwMkY4Q0VBREQ5MzQyRjRCRUFCRDYKLToxMDc5NjAwMEYyRTZDN0Q2QzE3QzM5N0FGRjE1MTkwMUZCQzkyQTQ4NEUKLToxMDc5NzAwMDlDMEJDRUU3QUM2OEQwOTdFRjAzQkI3OTE1QjA5M0Q4REEKLToxMDc5ODAwMDJGMTdFRkVCOTVCRjZEQzM3RjMxNzlEQzY1RjlFQjBBRkIKLToxMDc5OTAwMEMxRkJEQkUyMzFBRUIyRUNCNUM1Njg5RkNDNjk3QUZFQzMKLToxMDc5QTAwMDVBNTUzRDdGNkQyMzhDN0NENEYzMzlERUE1RTc5QjM2OTkKLToxMDc5QjAwMEZGRUM4OUNGMDk3OUZBRjNCRTQ2M0U0Qjg0QzcxQjAyMjAKLToxMDc5QzAwMDJDMEUxMUI1QkYyREI4MDlFOTM2RjJEOUM4RDc3NjBCMDAKLToxMDc5RDAwMDVGRjdFMjdDQTU3RjI1OTY1NDY2QjI4MUVFNzQyOTg0MTgKLToxMDc5RTAwMDdBNjFENEEzMEM3QjQ4ODA3RjBGNEEwOUQ0RTI1N0FFNUEKLToxMDc5RjAwMDc4QjRFRjY5QkMzRjQyMTlGQkNFMDY3QTI0MDJCRDJFNTMKLToxMDdBMDAwMEQ0MjMzOEQxMDc3NkRFNDYzRTcwQjY1QjQxNTg5RjkwNEUKLToxMDdBMTAwMEFGQUVFOTU5OUVGNzk0RkVGRUQ4MjJGQUQ1NDZDMEVGRTQKLToxMDdBMjAwMDY4RDQyQjc2NkUzNzg5MDRENjY0ODI5RUJBOUMzMDZFRjkKLToxMDdBMzAwMDM3RkEyQzZBOTkwNEY3OUYxMEI1NkMyOERDN0JFMkM0RjYKLToxMDdBNDAwMEY0Qzc3QzFGNEFFNzQ4ODJGQjgyMUI0MzE3NTNDMTNFQTEKLToxMDdBNTAwMEZEMzhBN0VCNjZCMDdCREUyNUE0MDRFQ0UwQ0Q3MTZDQUQKLToxMDdBNjAwMDlFQjI5OEE3N0ZCNzJBRENBRTRFN0JFRDdBRjhCRTU5NUUKLToxMDdBNzAwMDU2RTE1Qzc4NjdGMzU2Q0IzMEM4MDc0NUJDN0ZDNDlCQTIKLToxMDdBODAwMDU4NzcxNUI0REZEMTJDMzNCQUNBMkM4MTYxMTBCRkQ4MTYKLToxMDdBOTAwMDJCNjNCQjFENjU5M0YxN0M2NUQ4NkY2QjY2RkI0MDNBMjkKLToxMDdBQTAwMDlCM0Y3MTJDOEVCMEU3MURDMTlGNUUwNUYxQUMyNzRDNEEKLToxMDdBQjAwMEIxRjc5RjBDQjc5QUY4RkQzNURGNzBGQzZEOENEQTdGNUIKLToxMDdBQzAwMDM3RENDQUY2QzdGRDc4MDhFRDQ3NzVFOTc5M0UwRTMzMTUKLToxMDdBRDAwMDdEQjg5NkNCRjlGNzRCNkZDMEZFRUY2QzE2NTQxODQ3ODQKLToxMDdBRTAwMDBBQzUzQjZFMUM0NUZCMzlGMTg4QzRFMzMwMkMyRTM5QTYKLToxMDdBRjAwMDhFQkZCRjlCQjhEMjgwMUYxM0FGMjMwMkU4RjNDNDNGRjEKLToxMDdCMDAwMDEyRENCNzM1QUU2NjI5Q0VBQjdFRUJBMDM4Q0Y4Njc1REEKLToxMDdCMTAwMDUyOEE1QkIwNzM2N0VDRThCRjhGNkY5NTc0Qjg0QzlDNkEKLToxMDdCMjAwMEU2Njk4MTc5RTY4NEEzMDRFREVEODRBM0ZBRjIzQzEyQzAKLToxMDdCMzAwMDEwQjE5RDM2RkRGMzZCNEZFQUYzMDU1NjhFNkYwNzQ5ODIKLToxMDdCNDAwMDA1N0M2RkY4NTI0NEJBM0FCQjg4RUIwMTVBNkY2N0Q5OEIKLToxMDdCNTAwMDAwQkNFRkE2RjMyMjlDREFBNUU5OTc2MjUxQUM3MTdFRDYKLToxMDdCNjAwMDI2RTA4MUYyRUIwOTg1RTBGOEYyQzQ1MjNCQzZFRjVGRjQKLToxMDdCNzAwMDU5NUE3MTA1OENFQjlGN0ZDRjczNDVBQzczRTAxMTc2M0EKLToxMDdCODAwMDI5ODFFREFGNzIyNzUwRTIyOUFFRDcwQThDREY3NUU5NjMKLToxMDdCOTAwMDI1MzFGNkVCNkIzOEQ2NzBBREUxMzk3RDY5OUMyN0Q2N0YKLToxMDdCQTAwMEJFQzQwRkFEQ0MwRjI5NTgzQTQyNTA2MDVFQjY0RjIwOEMKLToxMDdCQjAwMEMwRDc4RTA3M0M5NzNEMzdFMzI3MEY2NDAwM0RERUUwREEKLToxMDdCQzAwMDA1RjRCMzJEQ0Q4MjNCOTY5RkIxQ0FFQTYwRjNCRTA3QTAKLToxMDdCRDAwMEZDQjVCMDFGRUY1RUFBOTQ2MDFGN0JBRTc3MDNDRUFCRkYKLToxMDdCRTAwMDZFODdBMDJCN0M2N0E5NUI4OEU3NzA5NzU4Qzg2Njg4NkEKLToxMDdCRjAwMDY3NEI3NUU5QjdDNjAzRUVBN0NFNTg0N0U5N0RCMkM0MTcKLToxMDdDMDAwMDg0NzI3RTQyNzYyMUZERkUyQTQyMzBCRUMwRTNCNTAzNzcKLToxMDdDMTAwMDZGMjY5QjIyQ0YyM0ZGQzA5QUZGQjA5NUQ2RkJCMEQ1MkQKLToxMDdDMjAwMDg5NzI0OUY2QjgwNEEwREZGNURGRkZFNTAwQkRFRUJDQzAKLToxMDdDMzAwMDY0NDYzOTBFRTBGMzFGRURCQkFEOUM0RkEzRTNEQzZCNTQKLToxMDdDNDAwMDAxRkZBNDNDMDVGNUMzRTU3MUE4NjVDOTcwMkYwMUU1RTYKLToxMDdDNTAwMDdCOEM3NTU0Q0QyRjRERjI1MERCNDZFOTQ5QjI5QkYwMzkKLToxMDdDNjAwMDdFMkVFMjc2QUI0RTZEREYxOUUxRUY0NUU4MDMwOTA5QTAKLToxMDdDNzAwMDA0RjZBNTY5RjY1NDY4MTY0MkYxMTRGRkUzMkNGNjEwRDkKLToxMDdDODAwMENDMzM5MkNBNjlCRjI5MDk1NjYyNjFGNUI1NEE2N0MyMDkKLToxMDdDOTAwMEU3QUE3MTlGM0JDNTY1MkUxQzZFMjJCOEFGMEQzNkQyODgKLToxMDdDQTAwMDQyRkQ5QTlERDVFQ0YzREE0NDgyRjY2NkVENjM1MjYwQUMKLToxMDdDQjAwMDBEQUQ2N0EzRDQ2Njg1Rjg0OUE2NUIyRDgwQUQ0NDQ5MTgKLToxMDdDQzAwMDkyOEFFN0JEMDc5NTMzN0RCNDY1RkQzMjMxRUNBRjUwNDQKLToxMDdDRDAwMDY1MUZGMzBGNzE0MUFDRjVCQThGQzNGQ0YyQkMwMEZDMTkKLToxMDdDRTAwMENBM0VENEY1MEFCODM1MkUyQjZCQ0Y3NUMwODJGRTc5MEIKLToxMDdDRjAwMEQ4NkU3MDNGQUM5MDhGQkIxMzNGMzVCMUZEMDJBMUVCNDYKLToxMDdEMDAwMDcxQkY5REI2OEU2NkI0MUI1NDBGREUxNTQxQUYzRTk1MTQKLToxMDdEMTAwMDA4OUVDRjc1RDNGRjcyQjUyRDc3MTFGNjgzOEY5M0I5NzcKLToxMDdEMjAwMEMxOUExNkY0RERDNDkxMkQ4MEM3NkI1RkM3QkIzOEEyMjIKLToxMDdEMzAwMEVDQzg4NDM3M0M2QjgwREU2RjZBM0Y4Qzc4MTgxM0EyRTYKLToxMDdENDAwMEZBQzhFNTMzNTI4NTdCMkE5Q0UxM0M5NEI3NUFGOUZDOEEKLToxMDdENTAwMDhFREI5Qjk0RDI3MUZERDFBRkU1MzgzM0YyNTdEMzZCRjQKLToxMDdENjAwMEEzQkVFN0FDNzZCNTk4QjFENjAwMzJDMUQ4MEUxMUJBMzEKLToxMDdENzAwMEU5NTBCM0MwMUVCRDIxODI3RkRGOTk0RkYxNDJFOUJBQkQKLToxMDdEODAwMDE3RjQwRUZDRjM4QjgxMTk4MDlCMERDRERGQjE4MjdFNDEKLToxMDdEOTAwMDdDRTNGMUEzOTk3RTFEQjFCRkZBMjdBMkE3QzNDQUY2NUYKLToxMDdEQTAwMDg3M0I4MDBGRDVGQjJGRjJGMTIzODQ3MjBFQ0I5NUVBMkYKLToxMDdEQjAwMDQ3NjQzQzQ0QzNCRDExRTc5QTVFQUM4MTBCMzNCMkYwMUIKLToxMDdEQzAwMDdDMUMwMUY5ODg0MjIzMEFENjRDMzYzQTgxQUY5QTdGNEYKLToxMDdERDAwMEJEMjZFQ0NGMjZFMkI5OUU1NTRFRDZERTFBNTlGM0NCMUUKLToxMDdERTAwMDVEMTZFOEVGQUFGODgyRkU5NzVCMTdGNTVFQTJGMzk3OUYKLToxMDdERjAwMDg4RjMzMDVFQTkwQkU3NjdERTRCMEEwOTI0N0YwQjdFMTAKLToxMDdFMDAwMDA1NjlFQkI5M0E3RUE1QzRDNUUwNTcwN0U4RDFGOEZGOEMKLToxMDdFMTAwMDI3RkI5MzZERUNDRjgzNkE3NzdGQUUyNTlFREZCNjUxNEIKLToxMDdFMjAwMEJCOTA3QjRGN0QzQUMzMDUzOTlDMTY4OTBCQkU1RUQ5NEEKLToxMDdFMzAwMDkzN0VFNzUxRkQwNkQ3MkQ0QTlGMEQ3QTNDQjE5OUVBMTIKLToxMDdFNDAwMEIxMjk1QThGNUQ3MjA5REU1QkU3REE2QjQzN0I2N0Q0MzkKLToxMDdFNTAwMEVCOEJCQzVGNUUxQkUzN0I4REU4OTkxMTA3RjM3MTUzREQKLToxMDdFNjAwMEQ3NjBDMDVEQjY0QTkyOEIyOUIxRDk0MTkxQURBRkI2MEEKLToxMDdFNzAwMDI2RUJDNjkxRThGMUREOEY3NjUyRjMyRjM1QkZEMkY4QUQKLToxMDdFODAwMDVFRDhBRkU0RTM4NjE2Q0YxNDgyMTRGRkI0REZGN0M3RTEKLToxMDdFOTAwMDc5RTYwMTVGRDczOEQ5RkMxMzBFOUE4MkJGRkMwM0FCOTkKLToxMDdFQTAwMEU3MEVBMENGNDZGQjEwMDdFQjFBMjM0Mjk5MkM1RTEyNzcKLToxMDdFQjAwMEQyRTk1QjRGRkE2NTMzRTg0RjYzNDhDMjcxQ0M0RkM3RDQKLToxMDdFQzAwMEIxNjE0MkNGRjRGNDhCNEI2NEY0NTJBQjAyN0VDQUMwNzIKLToxMDdFRDAwMDVDQzIxQUFCMjZCOEFGN0I2MDM2QkI0NzY2NjAwRUJCOTAKLToxMDdFRTAwMEY3RjFERkUzRDg3QUNDN0Q3MTZDRENEMEQyMUY1ODRCMzAKLToxMDdFRjAwMEVFODE3RUM5MTJGMTlCNzNCRTM5REQ0MDJBQzQwRkVGQkIKLToxMDdGMDAwMDhGNzNERjBERkNCMDE0QjlCMTFGMTk0RUUyMTIyOERFRDkKLToxMDdGMTAwMDMyQTQ0NjAxRjYzNzI0NTVBQTAyOEIxQjEyMzZFRTQwRDYKLToxMDdGMjAwMDRBRUJDQjI4NTZGMzYxRENDQUEwQjYxNkUyMjAxOUNEODUKLToxMDdGMzAwMEIxQ0ZGNTZDODg5M0JGNURCQ0FCMjlFQTNDQ0E4NjM4RUIKLToxMDdGNDAwMEU2NkYxRjU0Njg3RjkzOEJEOTc5OTQ3MERDODY5MjBGMEIKLToxMDdGNTAwMEZDRUQ4OEJGMEQzQkRCRjExOTVCMEZGNTI3MzIzRTFCQjMKLToxMDdGNjAwMEU3NUYyMDMwRTg5N0M0RjMzRjU0ODg2NDREQzJGOTkxMkQKLToxMDdGNzAwMERGMDRERjk5MkMzODNGQjIxMTU3MjNEOENGOTdFMjU4NEUKLToxMDdGODAwMDVDNzU5REUwNUEwRkY5OUY0ODVEMTZCODZGNDdDM0ZGQjcKLToxMDdGOTAwMDhGMjdERkVBOTJFODJCOEVFQkNFNjdDMzlDOTVFQUMzNkUKLToxMDdGQTAwMEYzMjBBRjhFQzlFNzg3QUZDNTFFNzQwRDY2Nzg3MzhCNUIKLToxMDdGQjAwMEJBRkRFRjlBREM4MkIyNEU2RTU2ODg4NzQ0REFFQjc4Q0YKLToxMDdGQzAwMDA1RTdGNzFENDI5QzBCRTY0MzFEQ0IwNTQ2QTc2MEUxODQKLToxMDdGRDAwMEU3MDMyNDdEOUM4NkRCNDM2RDFDNzgyNzJFMTNFOUI3Q0QKLToxMDdGRTAwMDExRkYxOEJDMUZDQ0UyQjIwMDNEMUFGREUxNzNBNDg2NUMKLToxMDdGRjAwMDczOUVDNjczQTA2OTU5RTFCODREM0FFRTkzMkQ1MUUwRDYKLToxMDgwMDAwMDhFMkY3MkJFRDk4NkZFOTdEN0MxRjRERjg4ODdGRTYwQjcKLToxMDgwMTAwMDNDMkU3MzZFOTJGMkFCMTVFNERCNUZBRTQ5MDQ3QkRCNjIKLToxMDgwMjAwMEZGQ0VFMzBFOTBBRjkxMEY5RDgyN0ZDQzQxNThERkZBRDcKLToxMDgwMzAwMDgzMUM3MzlGODg5NkE2QTUwRDI4MDU3RjM0MkQzRDBEQzIKLToxMDgwNDAwMDUzRUQ3OUJENUQ4QTE5MDczQ0NERjVFRTFCRTNCNTlFNzYKLToxMDgwNTAwMDU4MENGM0MzRDNEMDlGQjM5RTc3REU3M0EzQkE3NzYxNzYKLToxMDgwNjAwMDdDQkMzRThFRjFCQjVFRDFGOEE4MjY4MDlFNzVFNzVEOTQKLToxMDgwNzAwMDA5RUM3RTkyNDQ3NkZGOTA5M0M5NzM4M0NGNTIyQTQ5Q0MKLToxMDgwODAwMDkxRUZCOUQxMUZFOTQ3REMzM0U2ODExMUQ4MjA5M0FERDgKLToxMDgwOTAwMDg4NkIxNkJGRDFDRTY1NTA0M0M3RTQ5N0M4RThGQUI5REMKLToxMDgwQTAwMDZGNEMyOUVDOUY5MTZEQ0MyRTVEREMzMDFEREI0QjI1OTgKLToxMDgwQjAwMDBGNTg4NzUzQkUyRTJEMzFCOTIwQUU3Mzc2RDE5RjFDMzkKLToxMDgwQzAwMDcwMTQ3QzUxNDY2QjJFRTBGRDg4RTg5MTZERTMzMUQ0NEQKLToxMDgwRDAwMDhERjNCNzY1NzM5NTQwODg0MjJBQTU5RTFBMjQyNjk3OEEKLToxMDgwRTAwMDE5QjhFRUI4RDAxNDczRkZCM0REQzZFNkRGQ0Q3MTRFMUMKLToxMDgwRjAwMDRDRDNEMjA2OTc5NjhEOERDQzBGNDQzOTY5NzhBNDdBRUIKLToxMDgxMDAwMDk4NUUzNkFFRkI5QzMwQzU0NzBBQjQ2RkQ0QTc0RTk5MzMKLToxMDgxMTAwMDA0NjFERDQwQjM4NzI5OUNGRjlBM0RENkY0MjEwNUY0MjQKLToxMDgxMjAwMDBDRDYwMTRCQTg3REQ0RTQzOTg0QkY5QThBRjE0QUZDNkQKLToxMDgxMzAwMDEzOUE1RkZEMDJFNjAzOEVFQjBBRDBERTUxRkQ1RjhGREUKLToxMDgxNDAwMEZBMzI4MkQ5NkYyQkQ4RDM4ODM4NjVFN0RFRjcwN0MxQkEKLToxMDgxNTAwMEZBREY4N0RGQkYxMDBGRUI0MDdGOTFCQUUyQzE3RTlFNEUKLToxMDgxNjAwMEJDRkZERDc4MzgzN0Y0RTFGRDJDNUU3MTk3NjExRTM1NzgKLToxMDgxNzAwMEMxQzZFQ0ZBQTNCNjkyNkNFOEQ3MDJERjdGRTc3QTIyOTkKLToxMDgxODAwMDcwNDk1NkIzNzU4REU1MDFEMTcwOUU1QzdGMkY0RjU1QjgKLToxMDgxOTAwMDYzQjJFMTlFMUUzRkQ2NUJDNUVGRTczMkNBQTE5MkNCMjgKLToxMDgxQTAwMDYxRjlCNjRENEE4NjBBRUQ3QkRDQjY3RTcwNkU4RkEwMTMKLToxMDgxQjAwMEJEM0NEOTE0OEZGMzExOEQ5RTQ1REJDNjI4MzA3N0ZBNkMKLToxMDgxQzAwMDRCQjM5OUFGN0ZCN0NBNkM1QzcwMTdDMzdBOTY4N0YzQ0QKLToxMDgxRDAwMENENDhFN0MxN0QzNkFDNkZDOUNGRDhGRTk0ODVCNEFEMkMKLToxMDgxRTAwMEQ1RDRCRTdBOUFEOTc5MEI2MzNGOTY3Q0E4MTZGNkE3QTgKLToxMDgxRjAwMEMyNUJGMjkwODBGMzYyNzhGRjdFM0E0RTc5NTYzRjg4RjgKLToxMDgyMDAwMEVCNUVDNjdFMUFFRkNEMzE5RTVGRDVFNjUzQ0JCOEZDNTAKLToxMDgyMTAwMENCODgwN0Y1MkZFQTVDNkIzMzVCOUYzNkM2RkZDRTFGMUEKLToxMDgyMjAwMENBQjI2MUZGNkQzQ0ZFOTE0QjI2QzA3OUU4MUQ4Nzg2N0UKLToxMDgyMzAwMDI0NUNFRTNFRTUzM0ZDMUUyNkI4NTcxQUQyOTMzRTgyRUMKLToxMDgyNDAwMDY5QjY0RDY1Rjc2NDM0QkY3RDJGRTBBQTNBQjgxREVGREIKLToxMDgyNTAwMDE5RkJCQUY2QTZBQUY5OTQwM0Y2MzA2Qjc2ODdGQTkxNjEKLToxMDgyNjAwMEFCMDEzRkE0NENEMEY5OTdENTlCMkUyODZDQkVDQkY4MjAKLToxMDgyNzAwMDcwMDc3RjdFMDdGNDM3MUJGNjU5QUIzRjlBNENFNTdDQkQKLToxMDgyODAwMDQ3QTU3QzMxRjIxRTMyQkY0RDdGRUVBNkFGRkRENUZBNzkKLToxMDgyOTAwMEE5RjU1QjJCQUZFMkZCRDE4Q0RGNjlGOENGRTY3ODJDMzgKLToxMDgyQTAwMERCNTJCQTZFMDA2NUQxOUFCRDI3MDZGM0YzNjg3ODRFQUIKLToxMDgyQjAwMDQ3QzM5NzExM0ZDQjQ4NDk2MUJBMTA4MTkzRTY0N0IxNTQKLToxMDgyQzAwMDVGOUEzQ0NCRUExNkYyRkVGQkQzRjhCQTVFMUFDNDhGNzMKLToxMDgyRDAwMDdBQzM4RDExMUYxRDcyREI2MEQwNjcyMzNFM0E3QUI4RDYKLToxMDgyRTAwMDVGRTQyNzM2RTYyNzk0QTlFRTQyODg2NzUxMzc3NjlERUEKLToxMDgyRjAwMDMzQzI0RjM5MjlENTFEQkMwRkY0NkMwQkMzNzlDNEY4QjgKLToxMDgzMDAwMENCOUNCOUQ3NjUxQ0NGNTdDNkFCRkRFMTNFM0Q5NERCOTYKLToxMDgzMTAwMDQ0RDgxNzYwRjZDMzdCNUEzQkVEM0VCNzZCQTgwNDdDOEMKLToxMDgzMjAwMDJGQzJGNEI0QUZDNDM1NzQ2ODc3RjlEMjI3MkUzOEMwQTEKLToxMDgzMzAwMDhGRUUxQzQxMzA4RUQzMTFBRkE3Rjc3NzM2MTFFOUY5RDQKLToxMDgzNDAwMDFEOTc0M0E1RDRGQThGM0Y4MzhEREFEMjhBRkIxRERBQkQKLToxMDgzNTAwMEJGRTQ3MUEwMkZDRDQ1QjFGQUY5MjdGRTFERTFGNzg2RTQKLToxMDgzNjAwMEREQzVGNTRDOUI5NzJDRTA3MkJCQUI5OUFENjcyRkRBNUUKLToxMDgzNzAwMDU4OEFGMjMwRUVENzdBNDM3MDE2NjZEMEFBM0M4RDYzRTUKLToxMDgzODAwMDE0OTBCRjUxM0U0QjVDREZDMTdENjA1MTcyMjI4RkYwNzMKLToxMDgzOTAwMDdEMDExRURDQTc1MzU2MkY2MkRDQzMyOEJGN0NCQjkzMzQKLToxMDgzQTAwMDlEQTM1NzZCNzAxRUI3NDI4QUJEMEU3OUE1RERGNEI1NEIKLToxMDgzQjAwMEZBNjNFQ0M3QzIyNjAxRURBNDkxRkU2NTVCNkFENzBEOTYKLToxMDgzQzAwMDIwRDA3RkQ2QkZFODdFODQwNkEyNURFMkZERDRGQTU1QjgKLToxMDgzRDAwMDQ2NUM3OEZGNDBENEZBNTBEQkY1MjQ3MjNGRjVGMkU2QjQKLToxMDgzRTAwMEM1QjgyRkJGOUFGNjlGQjAzODEyQzY4NTM0RkEzNTdBRDEKLToxMDgzRjAwMDhERkQyODE0Q0ZDODE2ODhFM0FFMTY1QzYwOUZBM0VGRUUKLToxMDg0MDAwMDI3NzNFQkVFM0Y1Q0Q4QjA3RjIwQzhBRjVENjJGQjY2QTAKLToxMDg0MTAwMERCRkQwMkNFMEIzQjNGMjA2QzdENjBCRDgwRUI2OTNERjgKLToxMDg0MjAwMENBQUY5OUVEMDdFQTU5OEUzNTBBRENFNzU3QjY1MTg4OEQKLToxMDg0MzAwMDI5Qzc2NUY1RjlBRUExMTE3NjZBNzk2MDg2NkJBODhFQjkKLToxMDg0NDAwMERFNDZEQzFGQjJBMkExNTRGNzdDODA5REM3OTNCOEZEMjUKLToxMDg0NTAwMEVFNERERjQ4NEQ2MkNDMzg5M0E2NUY5QUJFNjlGQTk3MUQKLToxMDg0NjAwMDZGNTdEOTNDNDcwQTFDQ0NDODA0QkJGRTE4Q0U0QkE4OUEKLToxMDg0NzAwMDVEQkVEQUNFRDcwN0U2RDE1N0FBOUZCOEEwNUIxRjU4REEKLToxMDg0ODAwMDkyQzdFNEIzNDQyQ0M2RTczREQ5NTdDQTA3OUQ3RDFFNjkKLToxMDg0OTAwMDY3RDdFRjdGRjhCNkZERDFGQUExRTk4NUQ2M0ZBMzVFOTUKLToxMDg0QTAwMDE4RjlBRkM1RDU4QzcyMzBGMjFGRTg4MkY5QzExQjdCNzkKLToxMDg0QjAwMDZEODEwNzA0RDA3NzQ2QTc3RkFGMTVFOUVDNDgyQjcwOTQKLToxMDg0QzAwMEMxMzlDODNGQzAwNzk0Q0VFQUY0REIzMTVGMjM5Njk0RUMKLToxMDg0RDAwMERBNzE1RUM3RTc0REUzRkExNjNGQzhFMTdFRDY0RUFCRDAKLToxMDg0RTAwMDdCMkMzQjQ3NTQ5MjBDQjg5ODUyREIzNkQzRTJBNEY4NkQKLToxMDg0RjAwMDdDNjQ3NDIxREMyQjNBRTVCMUI2OTkxMEZBNUVGMkM4QkYKLToxMDg1MDAwMDk4NDJCODVGN0VDQUQ2QjY3NzJEMkVFQUQ3RDU4RTJEODMKLToxMDg1MTAwMDg0RkJFNTU3ODBERDgwRjYwNzk2REIxMDU3M0RFNTg5NDMKLToxMDg1MjAwMEU3RjI3OTk1QkQzRkNFNUMzMjlGRERDQkNDQ0EyQjI5REIKLToxMDg1MzAwMDhGMkQ3NDNDQUIzQzNDRkNGN0EwOUY5NUFEQzU0NTEwMUUKLToxMDg1NDAwMEI3QTk4NDg4MzcxRENGQUFEQzhFOTAyRDlCOERFNzkzMjkKLToxMDg1NTAwMEU4N0JEQjZDOUU1NTc2RjBFQjJFQURDNUYxQURGMkIwNEQKLToxMDg1NjAwMDg0RkE0NDBFQjFCOEE4NDRGQjZBQTVERkFEOERBMzdFQTIKLToxMDg1NzAwMDJGRTVFRkRBMjQ4QjBCRTZBRkY0QjkxRkU2QjU2QjkzNkEKLToxMDg1ODAwMERDQUExQUYxNUM5MzFGN0MwNzc0QUMzNUIxNzVGQkZENTYKLToxMDg1OTAwMEFGMEQ0RjY4QkJDQzc4QkZERjQ3MjZDMzNDQTRDNTY3OEYKLToxMDg1QTAwMEMxRDQ1ODlFQUYzOEYxN0M0NEJFODlDNTM1OENFNUJGMzcKLToxMDg1QjAwMEQyRUMyQzUxMzMwMDE3RDU4NzE0MTZBRkE2N0ZFMDRGQUQKLToxMDg1QzAwMDU2MTFBNjE3RDU4NDlERUJBQTNBNENGMDFDNEJGNUExODkKLToxMDg1RDAwMDQyM0NDNzAyRkJGQzNGRDZFMUYwNUY3MzhFQTUxQjU3MDAKLToxMDg1RTAwMDhDNEYwNTkyMzA1OThBQzBGNTM0QkI1NTk3MTdGQjlCQzkKLToxMDg1RjAwMDQ2NDA3Rjg4MThFNzgyNzMxODYyODZBOTY2MDdFREJGMzgKLToxMDg2MDAwMDc4MDU0RDI5M0YyNEE3NEI4NEZCNUFFQUE2NEUxMUUxNzkKLToxMDg2MTAwMEJFQTkzNTMyREYzRjYyNjJFN0NDQjVGNjlBMzg3RkI0NDcKLToxMDg2MjAwMEY0QjRCRDY0MDdDOEZERUM1QkFEQjkzNkI2N0U4MUYzMkEKLToxMDg2MzAwMDYxQURCRjZCMDQzNzExNjBERTc1ODBFMEY5ODA5QzE0N0EKLToxMDg2NDAwMEQyMDJGQ0IzMTE3NzFFRTBFRDNEN0IxMkU3Mzc1QjM3QkEKLToxMDg2NTAwMEE2N0YxOTkwQkFDQ0E2OTc1NThBRjc1NzFGNTk4NEZBNjYKLToxMDg2NjAwMEUwNEEzMEREOTM0OUYzNkZEOTk3QjE3Qzg2RTk0MjI2MjEKLToxMDg2NzAwMDg1RjBEQkY2NzI5NkJGQzY3NDYxMDhDREJGNkI1RkNFMjYKLToxMDg2ODAwMEYyQjBDMDQ5MDdCNjIzRjY4QTQyRkY0ODY4ODdFMzdEMDcKLToxMDg2OTAwMDlCRkIxQUMwQjc2NDYyRjExN0U5MTUwNUQ3NTNCNDdEODcKLToxMDg2QTAwMDIxNkJFOTQ0MEJGMEY4MUVEODREODhBN0Q0MTZGQ0RBRUMKLToxMDg2QjAwMDA2RjFFQTAyQjcwQUZCM0QzNkYzN0I4M0JFNjlBQUYxRjUKLToxMDg2QzAwMDU1QjQ5OTcwRkUwMzI5RjBGRjQzQ0U0RjREMkVBNEM5MzcKLToxMDg2RDAwMDdEMERFQzhCMjU4REVFNkI2MDFERURCNERERDMwNkY2QzQKLToxMDg2RTAwMDY2RUMxQkFENTNDMDdFMzdCREYzQTc1Q0JDOUZGQzBBOTQKLToxMDg2RjAwMDU2Q0ZEODM3RTg5QzkwRjZFN0VDNkYwNjZEOEE1QzhGMTIKLToxMDg3MDAwMDNFNkRDRkZGMTRCRUEzNjI0MEZGNTQ1MDlERTQwRUFBRkQKLToxMDg3MTAwMDg3NkJEQzQ0NTVCMjYwQkVBQzlGMkYzNjExNjY5RkI2QTYKLToxMDg3MjAwMEQ5NEFDRTgyNUNDOUMwMTA4RTVCNDVGNjkyNEVDODZCQUEKLToxMDg3MzAwMEY2OUNCNDI2RjU2OTVGOUI5MkJENUE4NDcxMzkyOTIzNTIKLToxMDg3NDAwMDc4NzQxMUQ4RkZERkIxN0IzRDA0QjcxQkY3NzNCRTE0RkIKLToxMDg3NTAwMEJFRDc4Q0VEMEZCMUMxRkUxMEQwN0YxNzQ5RjNBN0YyNDEKLToxMDg3NjAwMEY4MTc4QjJGOTM5NERDODg3OTMwRUYwN0ZEN0UxQUVDOTUKLToxMDg3NzAwMDM3OUY2MDYzRkIwNzY4QkY0NEIwQUI2Mzg4OEFFOTU4RTIKLToxMDg3ODAwMDg4Njc2NTgxMjgzRDk4REY0MzFBOEZERTQ3RUI3RkRDRTEKLToxMDg3OTAwMENBRTI0OTk2MDZBMjhCMEY2NkM3QjMzOENCNEMwNzhCNEIKLToxMDg3QTAwMDBGQzZDOThEQjc4MkZGMTA3NzhFMzhDMTdGRThGQ0E1NTAKLToxMDg3QjAwMDIyRTFGRTIyQzk3OTIzQUU4RjFEMzQxMUEwRjc1OTM5NjkKLToxMDg3QzAwMEUwODRGNTk5QUVBQjI0NzUzM0U5QUVBRjkzQ0I1QkFCRTgKLToxMDg3RDAwMEY3NzE0NUJEMEFFMjcyNzMxRENDM0Y3RDM2OUZFMDdFODYKLToxMDg3RTAwMEU4QUU1MzRBMDBENjREOTMzMjJDMzU5MUYxOUYyQkY5QzgKLToxMDg3RjAwMDc3MEYzOTBCMzJFMzIxRkVCQzM3OEU0MEZCMTNGNkM1RjEKLToxMDg4MDAwMDk5NDAwRUJGREU5NjYzMDUzQ0JDMDQzQ0EyN0M0ODMyMTYKLToxMDg4MTAwMDNCRUY4NkZBOTIyRTUwN0EzM0YxMzlEQjI3MkZBOTYzOEEKLToxMDg4MjAwMDEyMjg3RjI3REQ2MDU3RTFCRUE5NjdBRDhEMzdFMDdFNTYKLToxMDg4MzAwMEQwMTc0Qzc4QkZFRTRCOEFBQjE0RjIyRjlENTc5RDYwM0EKLToxMDg4NDAwMDdGOUZDRDZDOENDM0ZFQkM2MEMyRkVCQzE0RDc3NUY1OTcKLToxMDg4NTAwMDRBNEFGN0MzMjM1ODdDNEFCMjExMDlFQ0IyNjQyQTUwNDEKLToxMDg4NjAwMEVGQTZDRjczRTNEOTNDNDlCM0QzQ0JFMzk5RkUzQzJFQkIKLToxMDg4NzAwMDEwM0MwRjIwOTlGMjUxN0ZCNEZEM0E5RDVEMDRGN0VCNTcKLToxMDg4ODAwMEY0OUJENTJBMDI4RUUzNEFCNUI4NTE0ODg0NzhDRkU0RTgKLToxMDg4OTAwMDEyODI3RURCNjRCQjhDRTc3MjYwN0YzMDlDMUI5QkMyQzQKLToxMDg4QTAwMEVERUY5NDBGMkE3MTNEODE0QUUwMzBEQzdGRDk2MkU3MTkKLToxMDg4QjAwMEY3NjhGMTc1QzVFQjM5NEVBRTIzNkQyMkY4OTFENzVEOUYKLToxMDg4QzAwMDIyMkU4ODA3NUQ3RjQ5OEFFOTQ3NEVFN0Y1M0UyMzEwNEYKLToxMDg4RDAwMDI5ODFCRTk3N0Y1MTk1MDA3N0Y5NDRFRkU3NERBRjJGN0YKLToxMDg4RTAwMDNDMDVFM0UwNTQ4QkUxMzlGODg5NDg4RjFCQ0ZGNzRGMDMKLToxMDg4RjAwMDc3MUFFRTRGOEVFN0YzRDZDMTY0NzBFNDNFMzE2RDFERkEKLToxMDg5MDAwMDY4QkEzOEYyMDlGNDUzOEIxNDE3RjA2NUJCRERGRDNFRUQKLToxMDg5MTAwMEFDN0JGQTVCNjU3MkI5MzhFMjMzM0VCNjlGNkZDNEE1OTMKLToxMDg5MjAwMDM4NUNGRkExRjhCNDAzMkVBRUFFQUZGMzVCNjlCRkFGMDYKLToxMDg5MzAwMDFFQ0FFQTA3MUM4MjVEQjlGMjk3MjlDOTYwRTdDREYxMkEKLToxMDg5NDAwMENDREU2OEE5ODYzQkMwOTczMzgxRTFDQjM5QkE1QjNGNjcKLToxMDg5NTAwMDU3QzU2N0UyN0I5QUJFMDFFRUEwOUUzRDcyNjA3RUFDNzkKLToxMDg5NjAwMDc1NjU4QUQ3NTU4MEQ3RUQ3NjgyRjNCMzFGQTU1QkU2OTAKLToxMDg5NzAwMDgyOUU2OUVERUM4OTY3RjgzN0E2RUI2QTU3RUU4Nzc1M0EKLToxMDg5ODAwMDFERkY2NzZDQkM5ODM2RTA5MjEyMzlERTdGRTg2NDM4RDAKLToxMDg5OTAwMEYzQUE3NTMzNkZBNkZERjNEQTY1NUNCRjQ5RTVFNzhCOTMKLToxMDg5QTAwMDIyRjE5MjFFODExNzBENzcxRDc2MTZFRkQxRjAzMzc1RTcKLToxMDg5QjAwMEY3QkIyMjNDOUZGQTE5MjFDRTRDMTI5RTg3NjhGODk5OEEKLToxMDg5QzAwMEUyNjczODlDNzI4ODhEMTNCREUxQzdEREU1OUMwNkU2NDEKLToxMDg5RDAwMDMxMEEzNzg3MTg2RTBBMjgzRUYwRjdCNzdBQzA4RjExMzAKLToxMDg5RTAwMDM3NEZGNThBOUIyRkYxM0NGQ0FBQkQ1MzJGQkI2RTE4NjUKLToxMDg5RjAwMEY0RTlGNzdEMUFEMzg5QjZEOEZCODI4RjcyN0VFRjU2RTEKLToxMDhBMDAwMEVBNkVDQzA2N0I3MTkzODk5RDdGOTM0OEM2QUQxNEU3Q0YKLToxMDhBMTAwMEJCRTNCNDdCRTU2QkIyMjBCRjVENjJGNjY3N0JCMzE5NDUKLToxMDhBMjAwMEVEQ0Y3NkJCQzc4MzcxRDczNDBCOUVDQjI2OTJBNzBEQjMKLToxMDhBMzAwMEY2RjVCQjA2NThENEM4REZEMUY4MkVDNzYxQTMxQzlBM0YKLToxMDhBNDAwMDc4MDJGQ0VGRDc5OEZDRjM2RUNBODExQkVDNDg3QTE5QzgKLToxMDhBNTAwMDkzQzNCODkzQ0EyNjExRTI0MjhFRkNGRDgwQUY0RkUwNkIKLToxMDhBNjAwMDRFMkRDMEMzNzEwNUVGMjVBQTNFQUVBMDVERkNDREJFNjQKLToxMDhBNzAwMEI3MEIyMUJFQTlFRDFGOUVCMEU3RURDMjgyOTFGMDNFN0IKLToxMDhBODAwMEMzRDk2QkRDQUU2QTc5M0M0QTAxNzZEMjcwMkZGREM0NDMKLToxMDhBOTAwMEYwNzkyNkZEQkRGMjI1ODA5RkVDRUU3MkUzN0RFQjczNEQKLToxMDhBQTAwMEUwODQxNzFENzc2RTZENzM0RDA3QjM2MEJDNkY3RDRFMEMKLToxMDhBQjAwMDg4OUQxRjlCN0RENDNEMUQ0QzY1RDQ3REVCMUMwRkI3NUQKLToxMDhBQzAwMDkxRDY1RDcxNjJGNEZEREY3NDdDM0UxNjBGRjFGQkQ3MjkKLToxMDhBRDAwMDQzMEFDNEMxMUI5NTlBNkJEODdDQTIyNjBCRUM4RkE2QzcKLToxMDhBRTAwMDc3Rjg0N0Y5RDZGOEUxMDhERDdERkZDM0Y4RjhGMzg4OTkKLToxMDhBRjAwMDRCNjJGNzM4QjUyOUI4NEVGODI4NjFERjM1RjI3MUVCRDMKLToxMDhCMDAwMDJCQUVGNzM5QUI1RTlDMEZGNjcwNkNCOTFCRDc2RDU3NjcKLToxMDhCMTAwMDM5NDU3Q0ZFMTMxMkIyNjQ4MUJDNUMxMkFFNzczNENBNTQKLToxMDhCMjAwMEVBRDQxMzQyRjc3QjQ0MkExOTYxQTdFNTdCRkFDNThEODUKLToxMDhCMzAwMDg1RjZFRjcwNzg0QzBFRjAyQkE0QUU0M0YwREQ4NDQ5M0YKLToxMDhCNDAwMDM5NjNDMTZFREJDN0FDNEQ4NjcxNENBMzlCRDI1NUI0NjMKLToxMDhCNTAwMEQ1REU0RDg3NDY1NzI3QzdDOTFEOEU4NTI2Qzc3OEY2QUYKLToxMDhCNjAwMDFERDhBMUUwQjE3NjBCN0NBRkUxQTA3MUVGMzkyNkZGRjMKLToxMDhCNzAwMDA4M0M4MEZDQkJGMTIwMkM4MEJDQzYwNzFCNEZCNUZDMTkKLToxMDhCODAwMDNGMUYwRkExODEyMDlGMUVGMTAwNzEwOEM3QjdDMjQzOEMKLToxMDhCOTAwMDE2RjA1NUMzMDNGNUQ3QUUwMkZFNjhGRTVBQTNDMkY2MUYKLToxMDhCQTAwMDFENkE3OTBEMDc0NUY2N0M3Q0NGQTUxMERDM0Y0NEY2QTUKLToxMDhCQjAwMDU5RDkzOTZENEYyMkFFNTdCQ0VDNjQ2RDc0N0VEODNFRTYKLToxMDhCQzAwMDk4QkE5ODY0QjI4M0Y5RUJEQUVGODk4QzA5MDlFODU3MEYKLToxMDhCRDAwMDhFQTEwNkUxMEVGNEUzMDZBMjNENzQ3MTdFOTE3NjQxMEEKLToxMDhCRTAwMDgwN0IzNzcxNkY3OTA2Rjg5N0ExNjREMDhCMzFFNkUyMEMKLToxMDhCRjAwMDEwRTA3Rjg3NkQ0QTA2Rjg4NzM5QjZDOTU5ODBBRjVEQTYKLToxMDhDMDAwMDIzNTZCRDBFNDNENkFFMDFFNTJGNkY1MUJCRkQyN0NERDgKLToxMDhDMTAwMEVFQjVGMDZBQjVGNjZGNzQzMEZCNzRCRDlCOUQwRjAyMjQKLToxMDhDMjAwMEJCMUQ0OTg3NjZGRjQxMkM0MDg3MTA5QTYzRkFDQTg2QUMKLToxMDhDMzAwMEY2QkFCOTBERUMzOUQwNDFGOUJBNUYyMDRERTAxRkU0MjYKLToxMDhDNDAwMDlCREMyOTUzQzFDRkVCMTc5MjgwQ0VDRUJENUYwQzg2NDMKLToxMDhDNTAwMDM4NjU3MUYzQUI0NzgxREU2MjZEM0RENEE1NUYwRjM1OUEKLToxMDhDNjAwMEZBRDE5QUJGQTNDRDJCMzQ3RjQ4OUJDRjgyREYwNEU1OTYKLToxMDhDNzAwMEQ5RkNCOUQzQ0NENkFEMjY4NzJDNzg2RUY5RjFGM0VBQkUKLToxMDhDODAwMDU1NkVBRUJGMTJFRDQ3MzFFRkM3MkRBNDE1RTlEMkVFRjgKLToxMDhDOTAwMDFEQjk5OUYzQTNGODEwOUQ4NzY2NDMzOTIxMzc1MTNFREEKLToxMDhDQTAwMERDQzRFRjFEQjlDOUE1QkY1N0UxOTZCQ0Q4Rjc4RTY4RTMKLToxMDhDQjAwMEY1RjRGNkJFNzE3Q0I4RDZCMDZFRjQ2REQzNDMzRTc2NTMKLToxMDhDQzAwMENGQzg3RkZBRDgzQzc3RDIxMEQxMkZDMTgwOUE5N0NFRTcKLToxMDhDRDAwMEVFNjk3MDMyM0UxQzUyNjI4RjU3RkJCOUZFNEUzMkI1QzAKLToxMDhDRTAwMDY1QzNCOUU1RkQ3QkZFOEVFM0UzMkI3QkZFRkUxRUY4M0MKLToxMDhDRjAwMDg5MTM0RjQ5MDRGNkI1NEUzQTM1MkUwMUQ3RTdGM0QyMjIKLToxMDhEMDAwMDcwM0Q1OUFCRDdGQjY5OTM4REIwRTc4ODFGRUQ3NzU3NUUKLToxMDhEMTAwMDBFNTI3QURDMEFEMDY3QzFGNEI3NjcxRUZGMjlENDc3RjgKLToxMDhEMjAwMEYxQjg0NDIyQ0Y0RDE0MkE5RUExMTBDNzJERTRCRkJGMzUKLToxMDhEMzAwMDczNTA2MEZFOTI1NjdFOTBGRkVFQzVGMzFDQjdCMDIxRDMKLToxMDhENDAwMDQyQkI4RkM0MUMyMUU3OUJGODNEMTk5QTVDNkYzQTU5Q0UKLToxMDhENTAwMDc0NEFDQThFOTYwRkZDRkQzM0UyMEI1QTVDQTE5OUYzNUMKLToxMDhENjAwMDhGQjRGQzExQ0ZCNzdDQTdFOTZFMDlGQ0YzRUZBNDg5OUYKLToxMDhENzAwMEM0MUREMUVFMEM5NUNFRTAyM0UyMUMyRjNCMEM3RTRBQTUKLToxMDhEODAwMENCNzMzRkJEOTk4RTJCREUzNzQ0REM0QUU4NkRERUZFQTcKLToxMDhEOTAwMDdBMzZFNDVCQzU5OEY3OEYxOEY5RkI5REU2QkJGMUZFQzgKLToxMDhEQTAwMDkxMjEwOTJBRDJEMzVCRkI5M0FFQTYzODE5MEQ3MjI3MDUKLToxMDhEQjAwMENDQ0ZDQjY1Rjc3NzE4RTVGQkNBOUVGRjQ4NkUxQkQ5NzEKLToxMDhEQzAwMDMzQkY3QjkyQkY1MTBFQkYzRDUzODBFQjRFQkRDOUMzMzUKLToxMDhERDAwMDg4REI3REI0OUY3RURBQkYxMEVEQTc5RkZBNjNBRkY4MDIKLToxMDhERTAwMDlDOThGRkJEMkYwREYzMUE1RUJEN0I5RjRFMDY3RjRFRjQKLToxMDhERjAwMEMzRTlGNDY0ODY5Qjg5QkI3RjlBNENFQ0RERjIzMkYyQzYKLToxMDhFMDAwMEVENzMwN0YzNkJFNjEwRDdFQzlCRTkzRjc3MEFBRTc4N0EKLToxMDhFMTAwMEI0MTc3RUQyMEFGQkIzNEEzODhENzMwRTE3QTJGRjQxRjYKLToxMDhFMjAwMEY4NzkxMEUzMzgzNjQ3MUM4OUU3REU3QkZEREQ5QkExMkUKLToxMDhFMzAwMEY5MzI5ODVCRTM3ODA1QkZDNzAyQjgzNjhFNTM0NTZGQTkKLToxMDhFNDAwMEQ0NDlFMEIyMTU0QUFCOTgxREUzN0VCQTQ2OTc1MUNFOUQKLToxMDhFNTAwMDQ3NDgwOUY2QTMyNzNBOEQzODMwRDJBQkY5RTdEQUVGNjUKLToxMDhFNjAwMEMwNTA3RTRDNEZBMkY1RERBQUU2NjNGRkEyQzY2MUNFREMKLToxMDhFNzAwMDk3OUVDNkRGOUVGQTk1OUNDMEUzREUxQ0ZGMTc0RTRFMDAKLToxMDhFODAwMDdCMEJEOERCOTNCRTE5RTU2NjJDRDdFQzQ3MjEzNDkwRDkKLToxMDhFOTAwMDgzQTkxRkZDOTEyMTA5QTlBODBGODU5NzE0RTJBNkUzRDUKLToxMDhFQTAwMDBDMTlBODNGRkY0RThBQUY0MEJDRERFMzY0Q0Y3QUMyMDUKLToxMDhFQjAwMDVCRjUyNTEzRjEyNDc3RTM0RTBFM0U2NjAzRENFRDk2NTkKLToxMDhFQzAwMEVBNkMxMDFGQkRDRTVFQkEwNjU0NkZEQUE3MDVCM0YwODgKLToxMDhFRDAwMDlFODczNjEzODE5MEQ5RjRFNjczMkQxMDQ3RjAxRTI1MzYKLToxMDhFRTAwMDc4M0VBMEEwNzlGRjU0QzBFOUVGQTU1NjlDNDc3NTVFNzcKLToxMDhFRjAwMDI0RTRCMTA4M0YzM0Q4QkNDNjA2N0U1ODMwODU5RDZGNDgKLToxMDhGMDAwMDNCOTg0ODc0RkI5MEY3MjczMEJDMDY4RjlGQkZEOTFENTQKLToxMDhGMTAwMEEzRkMxMjJGOUY0OURDMjlEOTM4MkVDNzYzRkNBMzcwMEMKLToxMDhGMjAwMEJEMDlGQjNGNEQ3MDFENDgwMUJGNjU5RTgwRjM4NUNFOTYKLToxMDhGMzAwMEJEMTMwRUE0NTA3QTNCRUU0QzQ0M0IzMzNERjhFMEREQ0MKLToxMDhGNDAwMDRFMkE4OEM2RkYxRThCQ0ZCQjE2MEE3OENGNDBBMUVBRjcKLToxMDhGNTAwMEMyN0M2MTU5MjZFRURGOThGMDhGRTQ5OUM1NTAzRTQzRkMKLToxMDhGNjAwMEM2RjlDRDc0QjE1MjgyNzhENEQ5MzQyMTA3RTY4QjdCMEYKLToxMDhGNzAwMDg0QjY1QUY4MUQ1QzdGMjk2Qjg3MzhGREM5MzBGRjdDQTkKLToxMDhGODAwMEE3Mzg3OTBDRkU3NjlDQUFFNTg3RTFFRjAzMTJDMzNDNzMKLToxMDhGOTAwMDZERDVDRTBCRkJDREI0N0NENTZDMDFGN0VGNEU3NzY2NkIKLToxMDhGQTAwMDEwN0YwNDdFMEFENzUzNzk4RUE1Qjg2Q0VFNUYwMEI4QTcKLToxMDhGQjAwMDlFNTlBNDNGMzczOEJCQzQ0NjAyOTFFQjE2ODIxM0VGOEIKLToxMDhGQzAwMDIxM0JDOEY3Njk3NzA5RkM1RTdDQUVFNzM3NzBCQ0NGMDAKLToxMDhGRDAwMDk5OUJBQ0ZCQUU5NDMwM0ZEM0JCNTM2NEY3NzFFNEIzQzEKLToxMDhGRTAwMERGQTFENkY0RUI0NkFFODczN0YwRjlGMTNDNEY4NjhFMjEKLToxMDhGRjAwMDhFNjI4OEQyODg0MDNGNUI0N0JFRTU2MjFCMEVDRkE1REMKLToxMDkwMDAwMEUyMDc4N0U3RDNGNjZFMUM2MTk4RDc4QTk1NkIxMTE3MzQKLToxMDkwMTAwMDY5NkMxRDZGMzZFQzgyMTNDMTZFRUFERkJCMjU0RjlGNzIKLToxMDkwMjAwMDhGQTFDNzk3QjUxMzlBM0Q5OEJENTdDNDc1QzNEOUY5OTkKLToxMDkwMzAwMDk0Q0YwMjg5RjJEM0JGQUVCRDk4NjA3MjFEODA3OEQwMDQKLToxMDkwNDAwMEFEOTdEQzc4OEY0RTk0QkRGOEEwRTgxQkQ5OEJERjUwMkMKLToxMDkwNTAwMDFEQ0NBMzdBRkQ2NDAyMUYzNzA3OTE0MTYwMzdBNjhCQjAKLToxMDkwNjAwMERCN0UwQTM4RUFBNEUzQTYzOTA2OEVCNDcxNDc5QkVGOEIKLToxMDkwNzAwMDE3NTIzRDA2REM5MDMzNkM5RDY1RkFBNTM0RENFRkE0RjUKLToxMDkwODAwMENERjdDMzc2ODRGQTI1QUUxOEZFRDI2RjEyQjI3NEY3MEMKLToxMDkwOTAwMDdBODRFRDRBODQ1RjIyRTc3RTdCQkY2NDNBRjU0Nzk1ODgKLToxMDkwQTAwMDFDQTA2RjIwRjE4RjQ1N0I4NjcxQzk0MkQ4MTgwNUYxNEQKLToxMDkwQjAwMEMxQjQ3MzE4RTdGMTRBNzRGRThBRTNGM0QzODgyRkIwODIKLToxMDkwQzAwMDdGNDI1MkI3N0UxOEZEMTUyRENFM0NENkE5Rjk1MzdBQjIKLToxMDkwRDAwMDlDODRFMzhEQjNEODdEQTUxQTRFMEE4MTlGQTBGRkIzNkYKLToxMDkwRTAwMDQ0OENFQkY0ODYxQkFERkRERUYwMTJBMkY2MDg0QzU2NjQKLToxMDkwRjAwMDhGNzhFMUZBRjc3NUYxRjIxNzZEN0MxOTRBODZGNjA1NUIKLToxMDkxMDAwMDI3MUEzRTM0QkMxOEM3OUJGRjM0QzQ4MzdBMUE2RkJBM0YKLToxMDkxMTAwMDdBMTk2RjBFOEM5MEQxQUVGN0U2RDc3Q0VBRTRGM0VBQzkKLToxMDkxMjAwMDA0MjdBNjM3NUMzNTFCN0Y5NzY4MkNEODExRjAzN0Y5RDgKLToxMDkxMzAwMEI4MTU4RTZCRDUzMzlDMUM2ODVCMjRDMUZBOTExN0VDNzMKLToxMDkxNDAwMDQ3NjZCNzFDQjQ3OEYwRkYwMEM2QzQ4MUQ1MDA4MDAwMjQKLToxMDkxNTAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZCRDdDMjUKLToxMDkxNjAwMDBCN0M1NEQ1QjlFRkI3NjdFRjc5MjQzMzQ5NjY5MjQ5NDAKLToxMDkxNzAwMDMyM0M4NDFEMDgyMTIxMDkwRTIxQkMxMTM3NDkwODExRjgKLToxMDkxODAwMEEyMENBODg4OEZENjAxMUY2MDIwMDk0REFERDU1MzZGNjIKLToxMDkxOTAwMDMzMjE4MTUyNkMzRDU4QkRENjdCRjRGNDM3NThFRDQxRjQKLToxMDkxQTAwMDBENzUwODAxODMyNzcwMjZBMDk4RjBEMDIwRjhDMDdBQUEKLToxMDkxQjAwMERBNjgyOTQ1MUI5MjE4NUEwRjZBQ0ZGNTdDREZCN0Y2OUIKLToxMDkxQzAwMDRFNjYyNjgzQTVGN0RFNzM4NzlGMkVENjVFNkJBRkY1QkUKLToxMDkxRDAwMEFERUZGOTVGREY1QTlCNEFDMDlGMEE1MEIzMTUyMDk4NDQKLToxMDkxRTAwMDA2NTBGOUUxODY0QTQ4MDZFODNCMjAwMTE0MDNENDk2NkMKLToxMDkxRjAwMEM5NDExQkZFQjVCNEZEQjFDNzQ1REQwQzU2ODlERjUxMzEKLToxMDkyMDAwMDYxMjZDMEY1MjA3RTBCOTUwRUM1RTYwNjU4RTY5NUJDOTYKLToxMDkyMTAwMDcyMTY4MEQ2MkVERUJGRTE5MjI1QTg2MkZEN0FBRkY5RTQKLToxMDkyMjAwMEUzMUU5QkU4RkIzNUZGNUYwM0M4MDBCODUxN0Y3RjE5NDEKLToxMDkyMzAwMEZEMEZGQjJGRDNBNDYwMTg1RjVEMzYzQkJBRkY4RDk3RkYKLToxMDkyNDAwMENBM0Y5MUE2MDIyQ0Q3NjI5RUMzNEYzRTkzQTdGMjIyM0IKLToxMDkyNTAwMENDQkUyNEFDNTc0NEI3OEY3MzI2QjlDRkQ5RjEyRkUzRDYKLToxMDkyNjAwMDYxRkNENzMyQzBDNUYzNjU2RjUxRjdBRkU5NzdFREM4NDAKLToxMDkyNzAwMEYyNDgzRDUyNjYwMUU4QUNCNzcxMTlEQjVFNkUwMTdGQzIKLToxMDkyODAwMEM4ODEyNTRENTBDNDY1MDA1MjAxMEE5REI4OTgxOTU4RUYKLToxMDkyOTAwMEJGNjQwMTBERjkwODYzMTNFMEY3QjkzQTFEMTM4NkRGQzcKLToxMDkyQTAwMDNGODhFMzA3NzBEQzMwOEUxRkM4MDEzODU0RUZFNEZBQzIKLToxMDkyQjAwMDZCRjUxRUFFNUY5MzgyMkZBNEUzN0Y4N0JGQjBBOEI4ODMKLToxMDkyQzAwMDlFQzVFRERGNTFGQzM4REZFMjRCMEE4RjNCOUJENjkzMDYKLToxMDkyRDAwMDRGMEI4MzcxQjQ5RTNGRjcxNkZERTMwRDMwRENCRkI2MzQKLToxMDkyRTAwMEZEMzM4QkJGRjBGMkVCRjk1QkYzRTdBN0E4M0MzRkNENzIKLToxMDkyRjAwMEFCMTUwQ0NGQkI0NDAxMTg4M0VCNUM5QTFCQ0Q1RjYzQUQKLToxMDkzMDAwMDlFNThGOUM2Q0E2RkI5RkU3RUFDRkM1NkM0QUNDNzkwNzUKLToxMDkzMTAwMDBGRjRBMjMyOEQ4QUMzRkY0QjI2RDBBNjVGNUU3RTQzMzgKLToxMDkzMjAwMEYyQjFGOEIzQkQwNTIzREIwMTdFQzk3MjFBMUU0Rjk3NTcKLToxMDkzMzAwMDE3NzQyQkJFNDI0MTk3MTlGNUJBNTJCNzBCRDRFRjQwQzAKLToxMDkzNDAwMDBBQ0FCOUIyMTNDMjg5NDhEOEY1RTcyQjNFNTFBOEY0MkUKLToxMDkzNTAwMDRBRjA3MTk0M0UwMzdDNkNDODVCMUUxRTdGRDEyNUU0RUQKLToxMDkzNjAwMDZCREFGMEJDOEIxNDY0NzcxMTNEMUYwQjgxMzhFQkE4Q0UKLToxMDkzNzAwMEExNzExNEVBMUY2MDM5NkNEOTYxNUExNUMyNzU1QzYzMUEKLToxMDkzODAwMDgxM0I3RDU0MjY4QTMyRTA5NEI4N0Q5M0QzQzRFM0Y2QzIKLToxMDkzOTAwMEZGQzU2NjgyQUIwMTVFM0U5ODU5MDI0ODlGRDdFQTNDMDIKLToxMDkzQTAwMDA2MTMwMTQyNjZFMEY3QkY0RTUyQjlERkU2MjQwODI0RjcKLToxMDkzQjAwMEUwRkNBMDc0REJDODVFOTQxMjgwNUNCNDNCNjVCNDI1MEQKLToxMDkzQzAwMEQ4ODg0MzM2MkI2MTFGRDk2MUJGNTc4MTA2QjREQjJGODQKLToxMDkzRDAwMDhERjcwRTA1NkUwNzE0QzlFNjhGNzM0QzhENTlGNDdFMTgKLToxMDkzRTAwMEI4N0IxRUY2OUI1NUE0QThEQkIwOEJDQkFBN0U4N0RBOTAKLToxMDkzRjAwMEZCMEU1ODlERjQ1RUZGRkVFRjc3OTg2OTlDQkY4MDE3QzcKLToxMDk0MDAwMDI5ODRENzBFNTg4MURBRTczQkNDNDFGMjFGOEJFNEUzODUKLToxMDk0MTAwMEIyMDlFQkZEMDMwMDU2RUMzRjdGNTVCODE0NTA2RUQ3RjAKLToxMDk0MjAwMDQwNzdBMzEzQ0JCOTI0QzczOEYyN0I4REQ2OUJDRUZFRjEKLToxMDk0MzAwMEMzMzEwQUU1QjQ0MDk3RDMwMkRENkY5NTFFOTBEOThGRjIKLToxMDk0NDAwMDk0MjZDOTQxQzgxQUY2NTNEN0VBMzI1QTgwNkMyNTNBOTUKLToxMDk0NTAwMDE2QjRFMTdBQjFGRERBNEI0QTVDQkZCNDQ4MUY3N0UxM0MKLToxMDk0NjAwMDlGNDEyMTkzNUMwOEQxN0FCQkE4NERGOEEzMTJEMDE0NzgKLToxMDk0NzAwMEMwMjk0QjZEMzFFREU0OTc5MDlFNDVDRUU4RTc3M0M5NjYKLToxMDk0ODAwMDc3QTI1RUVGOEVGMTRCRjgzM0QxQkNGNzNCQzVCQzhCQjYKLToxMDk0OTAwMEU0QkYyNkY3RTBGQTVGQjY2OEVGQ0Q0MzdBMDc0RTlBNEQKLToxMDk0QTAwMEUxNTk3QzBFRTdCMTMyNjcyNDVGREFEMEFFODMzOTk3OTkKLToxMDk0QjAwMEI3OEJGRDA3MTMzNTE1RTk3OTk5RjRDNzQxRjVEMTlBQjIKLToxMDk0QzAwMDNBRjVGMkZEQTdGNjBDOTQ2MDc3NzhCOTc5ODUwMjEzMjYKLToxMDk0RDAwMDU4MUQ0RjdCMzI4NkY5M0Q4MkFGM0FGRjYzRjlEOTIyOUUKLToxMDk0RTAwMDQxOTMxREY5QkNCMERENUI0NkFFNjUwNDFGM0I5MThGMTcKLToxMDk0RjAwMEY4NUVDOTgwQzZGMzVDMjkxRjBERkI3OEY5NUNBMjQ2QjMKLToxMDk1MDAwMEZBRkVGMkI5RDExQUNERkYyQUU5NkJGQUIwRkVFRjNGQUQKLToxMDk1MTAwMDNCOTg0OEZFMTNGOUE4MkFBODE3MDMyRTlCRjc1OUQ2QTMKLToxMDk1MjAwMDVGQTFGN0ExNTEzOUMxNkQ1ODZGRDFGNUZDRTVDNDgxMzgKLToxMDk1MzAwMEEzRjlDNEVGRUI0RERFNjc2OTFBNjVFM0M0MTU4NUU0NTIKLToxMDk1NDAwMDM3Qjc5NjlDQzU3NzI0MERBNDA3RDE3RTI0RDUwOTc3MUIKLToxMDk1NTAwMDYwMTk0MEZCMjE3RDBCQTQwMkVCOTMxOTQyNDBGMzM2QzYKLToxMDk1NjAwMDZBRjAzNDk1MEJFNkFCMjlDNEVGNDExQ0IzREI0MUUzNTEKLToxMDk1NzAwMEE5MjlBNEU3RjBENzhCMzM3RDg1MjNGOURFNTI4RjBBMjIKLToxMDk1ODAwMDg1RjNCNEQ2REIzNDI1MUI2MDVGQkQ5M0VCNkRGNTFFMTAKLToxMDk1OTAwMDJFNUZBRDU3QjlEQzc0MkNGOUMxMjA4RTUzQUI1OTM0MTIKLToxMDk1QTAwMDI1NkRGODdENTdBQUIwOEYwNUU4Njc4OEFFMDUyMDA1QzAKLToxMDk1QjAwMDAzQTg3MzBCMUVENkY1NUU5MTgyOUIyNDkyMTNBRTI3RUYKLToxMDk1QzAwMDgyOUYyODk3QzE5RURDMDhGRTM2Mjk0RDkzNjZCMjM1RUUKLToxMDk1RDAwMEIwQkM4QkYyNERGQzNFMDZGRkUwRjM1OTIzRkJBM0RDNEQKLToxMDk1RTAwMEEzRUFBQTRCNjI3RUU2QkFCNDI0MTc5NjNGNzRGODUyRjcKLToxMDk1RjAwMEE4NkM5MTZFMzk3QzAxQjhFRTEyRjU1QkU1MEIzOEZFNzQKLToxMDk2MDAwMEY0RjA0Mjc4MTBFM0MzNzQxNDBDRjExNTdGQjcxM0ZEMjYKLToxMDk2MTAwMDMzM0EyQzQwRjJDMTgwQ0E3NjU5QTREM0EzN0QyRTQ5OTcKLToxMDk2MjAwMEU3NzAzRTMyOURBRkM3RTA3QkQ2Q0EzMEU5RDEzRUU4NTUKLToxMDk2MzAwMDQ5MjNCRTE3REI3Qzc2QjQyOEE0NDNDODU1OTM2RUY2NDUKLToxMDk2NDAwMDQ4MzhERTlDNzQ4QjU3MjZEMjI2RkFBNjZGNDRGRTc1RTYKLToxMDk2NTAwMEE0RTM4NEQ4QkZBMzIzNjNBQzhBRjZBNjI5NkZCQzRGQ0EKLToxMDk2NjAwMDc2QUREOTFDNjE4MTJCQ0NCRDNEMTE3MTNDMTM5RTcxMkYKLToxMDk2NzAwMDUyQkMyMjlGRjYzNUYyQkRGMzc3QzkwMUY2NkI4ODczQjEKLToxMDk2ODAwMEM4OEY3NTlFNEFGNjg2NzE5RTZCMkVEOUJDNTZEMjdGQzYKLToxMDk2OTAwMDdBMTFFREY1NjA2MkYyNTRGMkNGRDA1REM2RUJCOEQ2MjgKLToxMDk2QTAwMDI2RDY5MTZGRjYxN0JCRDg5Rjg1MEY5RkMwRjdGRTZEMkEKLToxMDk2QjAwMDEwODBGQ0U5MzVERDFGQ0E4MEY0OTQ5QUYyMzI3QjkwNjkKLToxMDk2QzAwMENFQzNEMkU0MTQyQTlGRkM1RDcyMDE5N0E3OTI3Qjg5RDYKLToxMDk2RDAwMDNGMDc0RDc2OTVFNjdEQTc1RTJEQ0U0NjdERDFERTcyQTUKLToxMDk2RTAwMDk4MDAxREQ2ODJCNzFDMEE5NTI3RUFBMTM4MUJGNUU1MUMKLToxMDk2RjAwMEFEN0ExQjk3MjdFQjlENUM5RUFBRjc3MDc5MThEQjQ5MjIKLToxMDk3MDAwMDlGNUVDNzc2RDJCNzM3QjA5REVBNUREODRFRTUzMTFDNzMKLToxMDk3MTAwMDk3Q0FBMkRCOTM3OEJDOTZEQjkyMkNCNDhFODNDOUQwMTcKLToxMDk3MjAwMDZDQ0M0RkZBMTQ0RTBDQjc4MjE3RTAzRjFFRkI2QUFCQUQKLToxMDk3MzAwMEVEMkE4Qzk3NTY3RkExMzQwREY5RjRCM0FGMkExNEFDRkYKLToxMDk3NDAwMDFGNUIzQ0VFQTFCRjYwQkJGOTY3QTYxRkRCOTBERTlCRjEKLToxMDk3NTAwMDRFMzk1QThGNjNERDlFQUFGQ0Q4NDFGQTc5MkMxMTlEQUYKLToxMDk3NjAwMDIzOTlCNUI5NEI0MzNBQTY5MzZGMUNDRDZDRDc2MDM2OUQKLToxMDk3NzAwMEQ2RDNGNDdBQzA3QzVERDk3QzgwOTVBNTNERjlFMDQyRDIKLToxMDk3ODAwMDI1NzE1OUFGQjMyMTdGNTdEQUZEREZBM0JBMjVCMEFCRkUKLToxMDk3OTAwMEEyRUMyQUFBNjM4ODI0N0I5N0NDNDFCNkY3QjE5MjdCQ0UKLToxMDk3QTAwMDA1QzZCQjk1MEVGRjdGMTJCRjBEN0JEMUE0M0ZBNDkxRDAKLToxMDk3QjAwMDdGOThBOTQ5RTA3MkIzQkM4MzkzQTRFMUU3NDZCRjk1QzMKLToxMDk3QzAwMDhFNDVGRjQ5RkFCQURFMjVCMzdEQ0Q5ODJGNjk0MUM3OTIKLToxMDk3RDAwMDQ4RkIzNUZBQ0QzOEFCOTY5MUZDNjY5RTJGNkZBMjcyOEUKLToxMDk3RTAwMDU5ODU4QkVCQkU1NUIzOUFDOEZFQ0IxQzk3N0JCRjk0QjMKLToxMDk3RjAwMERGN0ZEMDY1NjZCRDJENTFCMDVGOUMzODY4RjQ5QjhFQ0QKLToxMDk4MDAwMDRBNDZCODdCQTAyQjMxRjgyQ0U5RjU2OTdGNjMxMkQ2NjQKLToxMDk4MTAwMDE3NzlCMjhBNjRERDM3MDNENzVEM0JCNjUxN0JFNUVCNDAKLToxMDk4MjAwMEFENkM1N0RFMjQyRkUxRjI5OUE4OTA2OUQ4QkVEMDIxMDMKLToxMDk4MzAwMDc5QzM2NDJBRjMzRjZBNEFBMzc2QTdFNDI1QjYyREQ0RjgKLToxMDk4NDAwMEE2OUQyOEE2RjY2Q0Q5QkI5MEVBQTdENTMyMEE1MUE3RTcKLToxMDk4NTAwMDk0ODVGMzJFNjBCRkM1QjkyOTVFMUJCRTc3MkFGQ0QwNjQKLToxMDk4NjAwMDQ1RDJERjg1Qjk0OURFMDRGMkYzNEFGMEU5MUFBQTdCNTIKLToxMDk4NzAwMEFEREUwNjk1RDZGMTU4NjkzMjhEQTM0QTVFMTNENjVCRUMKLToxMDk4ODAwMDZFMjhGRDFGNDQ0Nzg5MkYwNTI0ODlEQTVEMEFFMUQ3MzgKLToxMDk4OTAwMDI3N0ZGN0MzMzIyN0Y2NkIxOTI3MDFEOUNGQTk3MERFQ0UKLToxMDk4QTAwMDlGODhGRTg1OUQ4OTZBMDJGOTY5OEJCMzhDREU2QkIxNTYKLToxMDk4QjAwMDQ4Q0U0RDVDRjc5NTUyRkY0MDhFNTk3RDFFQzczRDdFQzgKLToxMDk4QzAwMDlCOURFMzQxRTU1QjA1OEM4MzhFREYzNjg2RTM0MkU1QjUKLToxMDk4RDAwMDVCRjM0QkE4M0M2RTEyNzhCREYyQURDQTBBNkUzNzQxRkQKLToxMDk4RTAwMDk4OUM0QUU1RURERkUyRjdCNjk3RkVCMENDOERFMzFGMUEKLToxMDk4RjAwMDFCRUY2MkRGODI3MjJBNTYyMkZDMjRGNjA3ODlERUJGNDQKLToxMDk5MDAwMEJEOUFGQjc3NDg5OTBGOURDNUZFMTcwQjUyOEFBQzM4NUMKLToxMDk5MTAwMDdGQjkzQjIxQUE3RkM1NTg1NzU0N0Q0OUY2QTg2MjI1RDcKLToxMDk5MjAwMEMyNEY1NjE2NjQ0NUQ1NkYyODk2OEFCMzIzRkFGQkU2RDQKLToxMDk5MzAwMDI3NDRENTU3OTRCOThBQjMyM0ZBREY1NDM5MkFBQUJFRUIKLToxMDk5NDAwMEYyQTZBQ0E4RkE0MkQzMUNFMTNGRUE2MTdFOTlCMEYzREIKLToxMDk5NTAwMEY5NjVEOTIwOEM4OUZDQTk1M0Y0N0QwM0RCRUYyNjNCMDQKLToxMDk5NjAwMEVGMTJGOEE5Qzg4NUY4MDlFNTUyRDY1NUNDNzFCOUQ4RDcKLToxMDk5NzAwMEFFRkJBRjAwNzQ3QjY2OTJGRjE3QkYyRTFDOEZERTgzOTkKLToxMDk5ODAwMDIwRkU5OTQ5Nzg0OEZDMTY3NjIzMUUyMDdDQTQ2MERDRDIKLToxMDk5OTAwMDhFQTBBN0NDMTExREM3MkI0MENEMjdGRjVCRDFCOTg0NkEKLToxMDk5QTAwMEYxNTRCOTY3NzkxOTlBMzFGMjMxRkFCRDBBRjk2MTgxMzYKLToxMDk5QjAwMDQzNjJFODJFRUEzMkM3QTVCNzYyNkNGNEZCMDZBRUFCOTEKLToxMDk5QzAwMEQwRTk2QjMxRjk5QjUyMDk4QjA1QjQ2RUMyMzVDNjdBNkEKLToxMDk5RDAwMDBDM0EyRUI3OUUwQUY5OEUzMjE0RkZERjVDNTcyQ0ZEMkQKLToxMDk5RTAwMDAwMUI3OTdGMTE0QkQ3QTA0QkM3ODE4OEE3MTgwNzc2M0EKLToxMDk5RjAwMEE2MzIzRUM0OUYzQjFFM0UzMDcwNEYyNUZBMzc1N0E0MTcKLToxMDlBMDAwMDdGNzM0OEVFRTU4NTk3Rjc2RkM2Qjg5N0MzN0JDNkI4RjYKLToxMDlBMTAwMEM2RkJEMDJDRjNGQ0M2RkI0M0NGNTUyOUZFRjM5REQ4RTMKLToxMDlBMjAwMDNGMjlDRTczQjcxNEZGRjk3M0QxRkQxNzI4NkFBMzAzM0EKLToxMDlBMzAwMEVERjgyODQ4REUwMEYxRkJCOEFBMTAyNDJCM0RBRDM1MjcKLToxMDlBNDAwMDUxQjlFODQzQkY0Mjc4NzRGMUQ5NDAxMzk1RjM3QTgzNTIKLToxMDlBNTAwMEM3QURCOEZFRUI3MjY1OTVGMjBEMDYxRThBNURENzhDMTgKLToxMDlBNjAwMDU0QjE0RjNBN0E0OUI1QUJEOERFMTI1MEVEQjRCRjY4NjUKLToxMDlBNzAwMDc5NThCNUQzM0VBQTQ1ODMwQURBMkY2QTEzNEQxQjY5N0MKLToxMDlBODAwMEJGQTFFNTYzODlGNTlDNTRFMUU3RjM1MjA1OEUzMUNBMjUKLToxMDlBOTAwMDY3NjU3RjVFMkE5NkQ1QjY5RTQ3MDk4QkQ0N0MzMTYwNzgKLToxMDlBQTAwMDIxMzA3MDk0NzA1RUMxNDg5Qzc3NTQwOTNBNjhCRUEzMTcKLToxMDlBQjAwMDBGMDcxREJFMDgzRjdFQTUzODZGMTQyOTVCM0FFOUE3NDIKLToxMDlBQzAwMEE0NDVGQTkxNTI1QjgyMTZFOTM3MTYzOTVENTFGNUFGMUMKLToxMDlBRDAwMDlDQUFEOEM3N0I0NjQ1QkQ3NzlEOUExNUQ1MEZGMTZCREIKLToxMDlBRTAwMDJFRTFBMDQ2MEJFNDJBRTQ0NzREODk1RUMyNzdCMTdDQTMKLToxMDlBRjAwMEZDMTc3REZENUU4NzkzRTAxMzk4RERBQUVDOEYxMzk3MkEKLToxMDlCMDAwMEJDQTU4MjdGQjFDRjU3QTQ4QTdERUE2RjY4M0Q1ODZFQUQKLToxMDlCMTAwMDRGMTVGNDM1QzkzRTAxRTIxMDM3OTMzRUM0RDY3MTRGNUMKLToxMDlCMjAwMEJBOEFDNkMzOTEzREE0Nzc1RUJCRTkyMjQyNkZGODRFNjQKLToxMDlCMzAwMEVBRDVENzI5QThDRkRFRTlBNkVGNEVDNEZBMjNBOThCMzAKLToxMDlCNDAwMDQ0N0Q5RTY5Q0YwNEFDRkYzNEI1NUNENEFGMzY0RDM3NEQKLToxMDlCNTAwMDdCMDE3RTA1OEJBRjJCQzM3QUJBREJFNzRGQzU3OUZCNjAKLToxMDlCNjAwMENEOEVBRDEyRTIxOUM1MjQ0MTkxN0I3OEZGRkI4ODA1QUIKLToxMDlCNzAwMEUzMjkwQTE2OTU0QzczMjFBRDc2QUJEODJGRDcyNEEwRDQKLToxMDlCODAwMEZGQTNGRTI1OUE0QUZDQUE0OTMwRTREQzkzNDE3MTFERUIKLToxMDlCOTAwMEVFQ0UzNDkxQkYzMEY2NkY3NjBCQkU4N0VGRTdEOEZDODAKLToxMDlCQTAwMEI1NDI1RkMyQzkyQUZBQTVGQkY3MkZDQTI0QkREODlFQzkKLToxMDlCQjAwMEVBRTRGNUU3RUY5OUU3MjE3Rjg1NzQ3RDk3RkFGRDdGNjkKLToxMDlCQzAwMEE0NkI1MzNDQkE5QUNDNjI5RURFOTZGQzUyOEFCQkY5RDcKLToxMDlCRDAwMEUzNTExQ0QyQjBCQzcwQkJDRkNGMTM0MkE4MkI4Q0NCQUYKLToxMDlCRTAwMDM1OEY4NEY1NDY5N0M1NEIzODdERkI5MDdDQUZBQzZDQzgKLToxMDlCRjAwMEQ0RjMxM0IyNURFODhEOUM2MkRBQjgxQkNCOUZFQkZBMEQKLToxMDlDMDAwMEYyMTRDRDNCODNFNjE5MThCNzFDRjUwMTlDMDNFMzU2MEIKLToxMDlDMTAwMDE0OEEzQUU5ODMyQzE3MEQxMERFMUVGODU2OTI5N0Y3MzYKLToxMDlDMjAwMEM3NjMwNzdFRkIwM0FDQkY3NzQ3QkU5NzcwRjQwNzg5MTUKLToxMDlDMzAwMDgyM0ZBQjgyMTMxQTdCQjAzRUNEMUFCQzJBOEM3NDNFOTUKLToxMDlDNDAwMDk0RTY3Rjk2RjRFMDM2NkI3MDEyRUI5QjYzNjMxMjhEQTMKLToxMDlDNTAwMDJGNjlDMEZCMTA2MzdGODdGQjM4RDUzMjcxMjRFRTFGNUMKLToxMDlDNjAwMDM5MkZEODg4Q0ZCN0NDMTE3QzM2RTY0NTlFREEyOEVFNUUKLToxMDlDNzAwMEJDMzc1QjNDMzdFOEMwRjk1Qjg4RkYwNjNENDM3NEMwRTYKLToxMDlDODAwMDU4MjdDNzAzMTA3OUE0NDVCMjQzRTQ2MUZGNjBFMkJDRTIKLToxMDlDOTAwMDQ5MkQxOTFGRDZGNzlDMzVGMUJFQUVDRkQ4NTc4MEU2QjcKLToxMDlDQTAwMDU4M0Q5MzlCNzg5RTM5MjczNkM5NEM2QzAwRkZDQ0Q0MjUKLToxMDlDQjAwMDU5NDhBRkI2QURFNzdERkE4Q0VFRTg3REZBQUM0RTdGNDEKLToxMDlDQzAwMEE5MDNERjlCRjU3RUZDN0NDODNDN0REQ0Q5MTA5NDI5ODAKLToxMDlDRDAwMDVFQ0ZFOTg5RUUzNzRGREZBN0NGM0IxRkZERkNDRDU0QTgKLToxMDlDRTAwMDNEQkU4RDg2RDE5MTc5OEUzQTdERkYzMzc4N0M0MjBBRDQKLToxMDlDRjAwMEU5MjlGOTNBMTlGOTZFNTE2NTk4OUQzQUVDMzc1QUVCMTIKLToxMDlEMDAwMEIxNUYwRUY5NDcxQjk3ODVBNzlENzcxMUZENkRGNUE4RUIKLToxMDlEMTAwMEQwMTZGMjkzMUUyRTBEN0IyQTNDMEQ3N0MyRDQ4ODc5ODMKLToxMDlEMjAwMDc0QkQzN0Y4MzhGOEJFRTBFM0I0OUVEQzlGQ0ZDN0JBMDUKLToxMDlEMzAwMEI5RDMwQzQxNzU3ODlENzM3NTNFMEQ4MkUwRjNBMEQzQzUKLToxMDlENDAwMEMyN0M5RUQ5RjVDQkU5NjE3QzY0RjU5ODQwOEQ1ODVGNjMKLToxMDlENTAwMDgyOUEwODZBODQzRkI1RTdBNjQ2RDU2NTQzM0UzQUNFNjcKLToxMDlENjAwMDk4QUU4RjlGRTQxRDFEMzU4RTgxMzcwQ0Y5QkQ5QTVBMzAKLToxMDlENzAwMERFNDkzODY0QkE2MzFERTM4RTk0RDkxM0EyQzYyRDNFMjIKLToxMDlEODAwMDFFMkIyNzY0MUNFMTc2MjRGMjlGMDhENzlGNTZBMjcwRjEKLToxMDlEOTAwMEM2MkM3NzgwMzgwMEIzM0Y1NDYyNzBDOTc2OTlFQzY4NUUKLToxMDlEQTAwMEVFRDlFOEU3RTZCNENCQzhFRDcyRkM4NEE5M0Y5RkVGOUIKLToxMDlEQjAwMEZFRkJGOUU5RDJBMkY5OTk1NjExQ0RDRjc0NUYzNDNGNzkKLToxMDlEQzAwMDMzNTc0NUYzNkQ5NDNGOUEyRjYzRDY0RDg5NkFCRjZBMjYKLToxMDlERDAwMDYzNTE1NDdERkM4MzczQTNGQTY3NjEwMDhDQUM0RkRDNDQKLToxMDlERTAwMEJBMjRBQUZGQTRFRDJCQTJFQTkzOUZCQTJEQUE3RjVFMDQKLToxMDlERjAwMDcwNEQ1NDdCRkVDRUFBMkI5MjdGNjFBODJFQUExRkIxNzQKLToxMDlFMDAwMEQ3RjQwREYyQkZCQUVEMUZBMkU2RjlFRjk2RkZBMjM0MjgKLToxMDlFMTAwMDNEMkZBRkNCN0Y5OThFNDM1QzFBRkFDN0EyRTEzODQ1M0MKLToxMDlFMjAwMEU5MTVGMjkzQUVGNjM3QkVBMEZDNEJBMDQ0RTVCQzUzNTcKLToxMDlFMzAwMDYwMDk3ODFCQjFFRDA5RDkyNzkxNUYxQjgzQUMzNkExNkUKLToxMDlFNDAwMERGNjgzMkMxM0FGMkY3OEY5QTRDOUM4NzM0RUNCQzJBMTcKLToxMDlFNTAwMDRERTA4QkFBMzRFMUY3OUY0NjlCQTZGODY2RjBDRkVDNjUKLToxMDlFNjAwMERFOUU0NDc4NDMzNjk5QTA5QkUyOUFFMjY1QkY3MUM2QjQKLToxMDlFNzAwMDAxRTE2QjcxM0U3OTM0NzA1RUFCMzQ3OUY2QjI5OUE4MkEKLToxMDlFODAwMDg3RjI5QjMyRUYxRkU1RDE3RTUwNzE3RDhEQzcxRjNGNUEKLToxMDlFOTAwMDQxRjk5RjhCMEU5QjRBRkEyQUE3RkEwMzE0Qjc3MDdERUIKLToxMDlFQTAwMEExRTc2MTI0NUU3OUFGM0UzQzg5RjY0OTQ2N0Q5NTY3MUUKLToxMDlFQjAwMEUzNjZFQUJGRUE4RTg1OTM2OEZGM0FGNEZDOEU4RTQ5MkEKLToxMDlFQzAwMDY1MTE3Mjg4NUNERjhBMzhGOEU4N0I2OTIyM0Y2N0M0RDUKLToxMDlFRDAwMDg3REJBQzZBNjMwRkNBNkI5QTJDRkMzRkM2ODVFRkE1ODMKLToxMDlFRTAwMEUxRkEzRjkwMUUzNjBCOUMxNTMwRDNCQTMxNEU3MkRFMkMKLToxMDlFRjAwMERGODU4MEJBMEVDQjk0RTE3OEE0N0U4RDRBRjVDMTg0Q0IKLToxMDlGMDAwMDY4RENGOTI2MTE0NEZCMDg1QjJBQzdGRjVCMEQ3RkJCQTkKLToxMDlGMTAwMDJFOEZGOTM2RTg4OEVFM0Y3OEY3NDRDMUNGNkYyM0Q3MEMKLToxMDlGMjAwMDkwREY2NzJDNjIxRDA2RERFNzc1M0ZGQ0E5RUU4NzdCOUQKLToxMDlGMzAwMEM5RkY0NkU0OUJEN0VENzgzQzg5RjBGNTk5NUM4MUE3OTEKLToxMDlGNDAwMDhERTdDRkU4NzI3RDI2NERFMEU5RjUzQjEzOUM5MTc5RDIKLToxMDlGNTAwMEM3RUE5MDJCQUE1RURCMzZDQTc5MzY0MjBGRDcxQkVCRDUKLToxMDlGNjAwMEYwNEIwQUFENjM4MzZFM0ZENTlEM0RDOUI3MDFFM0YxNjgKLToxMDlGNzAwMEE3RDM3MERDOUExRDE3QkZCRDhGREUzNzBENjQ4ODM4RkMKLToxMDlGODAwMDFBRTBGOTZFNzkwRjE4RDdERkYyMTU0NEUxRDI5N0QyQjMKLToxMDlGOTAwMDQ0N0VFNTI1QTIwQkNCOTU1ODM4NTFERjU2NjI2Qzc3OEQKLToxMDlGQTAwMDUxRjlDNkZDNzJCMjNCN0MxRTk2QjBCRUFDMTNDQzg0OTkKLToxMDlGQjAwMEQzOTZGQkIzQ0NDNEY0NTNFMDdENjcyRjJFNkQ1RjlBMkMKLToxMDlGQzAwMENBRjNEQzA0M0UzM0M1QzU3N0JGNUQ5RDQ0RkQ4NkM2M0MKLToxMDlGRDAwMDMzQzYxOTQzQjk1OUQ0MkI1N0MwOUM0MUY5OUE2QjI0MDUKLToxMDlGRTAwMEM2MEQzODlGOEQ5RUZCRUUxOEIzOTlFMkFGMzFERkJCRjMKLToxMDlGRjAwMEUwQkZGMDBFRUFDNTBBRjBGMkI4QzZGODAwQTk1MTdFM0IKLToxMEEwMDAwMEY4MDNDQjkwMUNFRDI0QkZCQTJFNTM5OEYyMzk3NTY3MzQKLToxMEEwMTAwMEFDN0NGRUQxREYzMEYwRUIwNzkwQ0VERjU1N0RCMTU3NDEKLToxMEEwMjAwMDQyQkE3RkJCN0FFMDU3RkJGMEY5QUQ0RkExREZDNUI1NkYKLToxMEEwMzAwMDY2REJGRDg3RDMyMkNFQzNDRURDN0Q5MUVEMENGMUM4NkIKLToxMEEwNDAwMEYzNEY5MjMzN0FDOUVBMjVGQkY4QTBFQUE1OUM0OEJDRjUKLToxMEEwNTAwMDdGMjI2RDYxMjdCRDA3QjNEM0UyOUU0N0M0RUUyQkFCRDEKLToxMEEwNjAwMDQ4M0ZEOTZFNTVDNjk5ODY1RURFQTdFQjY1REQwQjkzM0EKLToxMEEwNzAwMEY5Nzk1REQyRDA3QTQ0RkQ3OTk5RjM1Nzc1MDdBQ0JDNzQKLToxMEEwODAwMEJGN0Y0N0Q3ODdBQTE3QkY5ODE5OTk5RjZCNDFCRDU0QzcKLToxMEEwOTAwMDczQTg3NDcyNDlFNzlDMkFGMjY2Q0ZGMUMxQTlENDZGMDQKLToxMEEwQTAwMEEzRUNFRjIxM0QzOTc4RTlFMzY0QUFFRjc5RjM0QjVFNDUKLToxMEEwQjAwMDBGREM3NDY1RjRGNzIzRjMyMkY5NUM5QjM0RjAyRUY5N0UKLToxMEEwQzAwMDkzRUE3RDU2OTVGMjUwQTVGQkYyOEVERDhFRjU5QTRFMDEKLToxMEEwRDAwMEY0M0JCODlFMEJBRTlFMjM0RkQzN0U2QUJGMDQ5NDk3ODkKLToxMEEwRTAwMEFBMDkyN0IwNzNBRjY5OTU4Mjk0QzdBQTZBREJCRDY1RDgKLToxMEEwRjAwMDBDRDZBQjlBOTcxNzkzQkFENjI2MEIzRjU2RDMyMjA1QTgKLToxMEExMDAwMDY5M0NGMEE3MzE3RjhBNzREQjI4N0QzNUVGMUYwQkIwRTcKLToxMEExMTAwMEJERUZBODE4RkY1QzdENzhFQTU5RjQ0RjdEMkQ5RjlEMTcKLToxMEExMjAwMDIzM0EzNkI0NTkzOTNGNzYyRTI5NkMxOTgzRjM1RUQ4MTkKLToxMEExMzAwMDJEODUwMkVBQjBEREY2QjlDNDNFNkE1REU4MzEwQkNEOEIKLToxMEExNDAwMEJCRUVCOUU1RDkwNDBGRkJGNjlEQjQ5MDdGNUNEN0ZBNUUKLToxMEExNTAwMDU4QjlGRUJDNTg4NEZCMjBEQkM1RkE5RDFEOTMyMkYzNDEKLToxMEExNjAwMDQ5RjcyMUZDODNDOEY4ODFGNDA1MDhGNzgyOTBFMzA5RDgKLToxMEExNzAwMDVEM0VBQkRBMjczNjEyQkJEMEFGRUQ3RDVBNjJCRkU2NEIKLToxMEExODAwMDc0OTNERjNCQjhFQkRGRkY5NUU2RERGRjJGOTM5OEZGN0QKLToxMEExOTAwMEM1NTdDNjdGRjAwNTE4NEZENEU4RjNDMEY5NTMxNkRBNTcKLToxMEExQTAwMDFGRDZCNDlBQ0ZDNTNCMTdGQUJFREI3Nzk1N0JDNkYwQjYKLToxMEExQjAwMEZFMzYxNjU3NkZCMTgwMzhCNzk5MDBDMUU3MjkxRTM4QUYKLToxMEExQzAwMDA2MkNBQjkxOUUxRjUxMDdBNDQ3NzEwRTU4RDY2MEREMzcKLToxMEExRDAwMDQ2NzY0NjcxQzJFMzA4QzZEQjE3RDdCOTE1OUUwRkY3NUUKLToxMEExRTAwMDA4MUJFMzlENTdENkVBRURBNTZBOEY4NUYyNzAzNTlFNzAKLToxMEExRjAwMDVFMEJFOTc1NERGODEzNzE1RURGRjY1MUI5MTY2N0JGNTYKLToxMEEyMDAwMDVDRUQxNjdFRDNEMDAzQzNERUVCRDJBN0IwNUQ5ODg3OUEKLToxMEEyMTAwMEUyNjBDOEM2NzY1RkI4NjY4MEUyNTNERDdFRDQwRURBQUYKLToxMEEyMjAwMDE3QjhGQzAzNDQ3NzYwNkY4MjRBRUIyQkRERjdDOUNDOEIKLToxMEEyMzAwMDlFODg3OUZFQTREQjg3NTFBRjc5RjlBM0E5NjZFMkU3OEUKLToxMEEyNDAwMDlFOEZBNjJBNDlDM0NGRkIzMjFDRUJFMkU1NTVBQURENUYKLToxMEEyNTAwMDIyNEU2RjRFRjY5RDhGQjY4MzA0NkYxOEU3QUQ2OUI3MzcKLToxMEEyNjAwMEYzRjkwN0RBQzE5NjhFRTI0ODNCQjg3NUREMEVEMkYzRkEKLToxMEEyNzAwMDc2RDk4QjE2MDEzNTZEQ0JGRDBEREMzRkM5NEJFMjkxRDQKLToxMEEyODAwMERCMTYwNjQ4MEY2NUE3OEZGNTEzRkU4QUYzQ0RENENGRjIKLToxMEEyOTAwMDdEMjY1MkFFREI3RjFCRTk5MUUyMDg0RjhBQ0M2QkQ0NUUKLToxMEEyQTAwMDk4N0E3RUQxMjE5MTVDQjc2QjI2OUFBRjA4RDg2RkM5OTYKLToxMEEyQjAwMDBFNUYwRkVGOUY4QTMzNTREQUM3MUU5RTUxMEVDNEE3NUMKLToxMEEyQzAwMDlGMUU5MDM4NUY2QjRFRjU2RkNEMjJGOTFFOTVCOUJGN0EKLToxMEEyRDAwMEU1RjAwQjAxM0E5N0VFOUIwNkM1NDQ5RkIxREU5RjRFMTkKLToxMEEyRTAwMDBCODM4Q0UzNkMyRTA0MkY0REJCNzlGRjJEMUVEMkRGMjgKLToxMEEyRjAwMDlGQTYxRjYxN0M2MUY3ODY4MEZDNEEyM0UyMDZDQUU3QkQKLToxMEEzMDAwMEQ4MEI0MjYxMUEyNzIxRDc1NzJDRTMzQzc5NkUyN0YzRUIKLToxMEEzMTAwMENCNjJGNTdCMjkxRjk0NEQ3NTVDODc0REYxQUQyM0ZBMTcKLToxMEEzMjAwMDZDRUU0NEIxOUYxRTdCNjU3OUJBM0VCMjdGODVDRTFCMzEKLToxMEEzMzAwMEZEOUMyRkU5MzMwQjNERURCQjBBMTg1RkYzMUQ5RDM5RTIKLToxMEEzNDAwMEQ0QTQwOUJFQzE3NjJFNkJEQjNBQTY0NkM2REI0NEYwMjgKLToxMEEzNTAwMERCRTg3OURGRkU1QkJDNDRCRjM5NTFEN0Y3OEM0NEI2RUMKLToxMEEzNjAwMDhCRDhGOUZGOTlGNDk5RTQ2RTVBQjMzNThCRjg0QzdDOEQKLToxMEEzNzAwMDUzNDdGNjdCNUFFRjY3RjAwMzE0N0YyRUQ5MkI5MkFBMkUKLToxMEEzODAwMEM1Q0IwRjhENzc5NzNDNEU3MkREOUNFQUNCNzUxNUYwRUYKLToxMEEzOTAwMEYxQUMwMEMzOUVDNEI4NzY4N0ZERkY1NzY0RkYxRkU5ODgKLToxMEEzQTAwMEZDRENBMkY4NkRDNERGNEQ3QURENkNGMUE5NEVCNjdGRkUKLToxMEEzQjAwMDlGNEFGMzBGQUQ2Rjc0RkNGNUI1RTlGNkJBNjU4MkZGRkQKLToxMEEzQzAwMDFCRDdCNzRGNUY5RjM5MTVGNThEQzY0QjA2RUU2NzRFMEQKLToxMEEzRDAwMDBFMDY0OEZGOUE5MkEwNzgxMzNFM0VFQzJBRjc5MERERDUKLToxMEEzRTAwMDZEMzlGNEM1MzhCMkY3QTYyNEFGMDcyOEFGNzU2MEQ2MkIKLToxMEEzRjAwMDJBQjJGQjJEQTM2RjYzRkRGRkY0ODVCQzIyMzk2MjlFNTgKLToxMEE0MDAwMDEzNjkyNUFERTRCRjdFNjlBQ0NCRTJDRkE1NzVGQzQyRjQKLToxMEE0MTAwMEQ3MjM2MzVERTk2RURGQUJFRTg4QkMxMThDNzU1RjkxNkQKLToxMEE0MjAwMEZFODBCRTlGRjNFQUYxMTdGNzczOUNGRkVCODc0NDJGODIKLToxMEE0MzAwMDlEMjdFRUQ2NzFCNzAyM0VENjFCM0I3ODU1QzY1NTFBRkUKLToxMEE0NDAwMDFDQTM3QjFGOEQxRDI2RDg0NkNCQTZFNDU0QzQzOTVEQzIKLToxMEE0NTAwMEIyNkMzMjM2N0Q5QTBEQjdFNjc0NkM0Q0VENkZCQUVCODgKLToxMEE0NjAwMDk2MzQyMUJERkIyMTIwMEI3QzE2OURBRjAwNEREMkE0NUMKLToxMEE0NzAwMEM4M0NDNTZCNTVGMUYzMTRDRkY4MUJDOTJFRkY1NjlFOEYKLToxMEE0ODAwMDYyNEVEOEI0REE5MkYyRjdFNzJCQ0VCQUEzRjczRDlGMkIKLToxMEE0OTAwMEJBNTUyNjJBOTQyQkY0MzExNDRFMEM4QUJDMTc0Q0E3QkIKLToxMEE0QTAwMDdENTMzM0YxMTJGRjdCMDZEN0NBRjYyREY1RTVEQTVDNTIKLToxMEE0QjAwMDY4NEZFRUZCQjc2RDFEOEI3Njk3MkRENjRGRjU0NkZBOUMKLToxMEE0QzAwMDdCQTdDMDNENDNGOThGRDdBNjMwRUU0NjNGMjdGM0ZFNkEKLToxMEE0RDAwMERGQTlEMzEyMjNCNzYyQzQ2QkMwRjc4ODUyQTNGMjI3NTcKLToxMEE0RTAwMEUxMjM1RjI2OTM3RUVENEE1NURGMjJCOTBDNzRDOTdDQzcKLToxMEE0RjAwMDRGMjQ0MUU5QjFCOEUyRDhEOTNFQzIwM0U4Rjc4QkQzODMKLToxMEE1MDAwMEM1M0VDNEQ2MjZDRTE3NkRBQUM2N0UzMUMxRTk5QzI2QUIKLToxMEE1MTAwMDQ3RDhDNTc5QjdDODlGNTcxRkY5NjA5QzA1MzFEQzA1M0UKLToxMEE1MjAwMEQzRjFFNDAyMUM3RkMzREU5NjY0NEFDM0FEM0ZGM0Y2NjkKLToxMEE1MzAwMDRDQkE5MjUzQTJGODFERTlCOEZFNEZBNTFEMzkzNkMyOTgKLToxMEE1NDAwMEE5NUI4MzUzODkzRkExRjA4NDE0RjI5Mzg1MEEwNDk0OTQKLToxMEE1NTAwMEEyMzhGMUYxQTkyMkRFMTRENzNDQzU4N0ZGNTBEODNFQkUKLToxMEE1NjAwMDdEMkRFMUU1REFCMDU4MkZDRDYxQzZBNkJDMzZFMDdBODQKLToxMEE1NzAwMDVGNUI2MzJBOEQ1N0ZCNkYwNzQ2OTNCRjdBMjk1REUwQzcKLToxMEE1ODAwMDlBMTcyRjREMTFFRjJCQTA1MEZGQUM3NDk3QUVFNzQxRjcKLToxMEE1OTAwMDEzRTUwQjVGRDJGMzhDN0Q5NzRDRENDRjk4QkZCMDZEODkKLToxMEE1QTAwMEExRUM0NDNEMjgwODZGM0ZDNDc5Q0Q3NkFCNEFGMjREMEIKLToxMEE1QjAwMDc4MEUwNDNGREExMzE4NzdENjFFNUMwQzE0RTdGQTVEQTgKLToxMEE1QzAwMEUwOTVCMDdENTdFMkMwNkY0OTFGMDYwRTU4NTUzQTc3QTcKLToxMEE1RDAwMDRENzA2RTg3NTQxQzdGOTc3RTRGMkIwRjE1QjJDNTMxN0YKLToxMEE1RTAwMEZDREM5ODJGQTFGREU3OTQxMzI0QkRFMEYzREYwNDY1QTQKLToxMEE1RjAwMDNCNUNFMzg4RTQ3NzEyRDM1REEyRUJENUFFQzRCMDg5QUYKLToxMEE2MDAwMENFNDUwNjI2RTE1RTg3RTkxQUE2MTM3ODVFODNDRTNDMjYKLToxMEE2MTAwMEY2RkJCQjJDMDNFNzdFRTA2NkJBOUNBNDA3NzkyMEU4MzIKLToxMEE2MjAwMDg0RjZDOTJBRjlEMTA0QTdDNkVCNDg3MEFBREU4MDM0QTMKLToxMEE2MzAwMDkyQUVEQUE5MDhGQ0QwNkUxRTI1RTczNTc3RDhBRTZCNEUKLToxMEE2NDAwMDEzODdFQjM2QjQ4NTVEMTM0MDNGOEZGRkQ1MzYzQThGQzUKLToxMEE2NTAwMDFGQUE5MzgzOTkzREZDRkUyREU5MkY2QzZCMUFDQkY5NTEKLToxMEE2NjAwMEJEODA4Q0EyQjY2Mzk5OTQ0QUVCNTQ3OTdERTg0NUI1RDgKLToxMEE2NzAwMEY0MjJDMTA3QkFBRjY3Qjc4OUY2QTFGRUE4RTcwRUFBMTAKLToxMEE2ODAwMDNCNDQzRkFGRDU2OTVGOTJDNUY2NDI4N0Q3NDM3OEYwMjgKLToxMEE2OTAwMDdFMjk3Q0VFNUFCNEQ3REVDNzdDMjkwNUI4QUU1RUQzREUKLToxMEE2QTAwMEExMDc5QUIxREY5RjU2ODc3MkU4M0VFOTczNTZGRjFBRjkKLToxMEE2QjAwMEQyQ0Y1NzNFNUNGMzQ4MjFGOURCNUQ2NjZGMjVGOTlERUIKLToxMEE2QzAwMDlFQzBDRjE4ODdCRjY4NTZCNzQ1RDgxRDhDMURDOEUwRkYKLToxMEE2RDAwMEZCODAzMUYzRDQ5RUQ5RjQzM0MyRDdGREZCMjU5NUNFNTAKLToxMEE2RTAwMEJERkJDRDAzRTM4OEVFOUFGNjNGNUFFOEJFNjRFREZFNkIKLToxMEE2RjAwMDhGMTg0RjRCMTlGRTFBOUE2Rjc2NUIwM0RGNkI5QjAzMjMKLToxMEE3MDAwMERCRjk1RTFCRkE0M0JFOUYxOEYyMDg3RjMyNzgzQUU3MDYKLToxMEE3MTAwMEQ5ODYwODM5M0M5MTJFRUMwRDA2RkNFMzI5NUVCNUVCOTkKLToxMEE3MjAwMEY2N0E5MEY2REQ1OEVFRURCODc1MjI4REJGNTdDRjA3NUIKLToxMEE3MzAwMDE4RUYzNUMwQTEzMUM0Rjc0REYwMUE5N0M2RjNGRUEwNEIKLToxMEE3NDAwMDUyNDE3QTk2RkZBRUVENEUyREEyRkZBM0U5MDJCRjNEMjYKLToxMEE3NTAwMDlBMkU3MDY2NzY4NkJGODlFODVEREZGMUIxMjU5OUQ2QkQKLToxMEE3NjAwMDc5MzYzNDhFRjZCOTIxNDU0RDcxQzZGMTIzNDNGNjFCNzcKLToxMEE3NzAwMDYzNEZCNUNBODA4NUZBRDc5RTA3RjYyQjI4RUZBNjE0M0IKLToxMEE3ODAwMDk0REY0QkVGQjY0RDU5OERDRkY3QTI0QzUyMjhBRUUyNzUKLToxMEE3OTAwMEZFOTRFMkVGNUVCMzZGMENGNTZGNzhFN0YzQTlFNEM3QzAKLToxMEE3QTAwMDFFNDg0RkU3RjU3RjdFNjBGRDc4RTIxQkVBN0Y0OTIyNzUKLToxMEE3QjAwMEQ5RDk2RTYwQkY2NkQ4NjkwMUQ5MjlCRTVGNDBGQTVGRkEKLToxMEE3QzAwMDRDRjUzQ0Y2Q0JCQjJDREQ0QkQ4MkVGNzlBODBFQzEyMjcKLToxMEE3RDAwMEY1OUZFRDAxRjVERjQ5RjhBRUMwODlGNkMwRUY0RjY2OTEKLToxMEE3RTAwMDNCREZENTZERDIxODI3QTM1RjlGQzRGNTkyMUJBOUJFOEUKLToxMEE3RjAwMEFCQkJDQ0M5NzY0RUY3MDU4QUM4NUVDMzg3Nzg5QzEwODAKLToxMEE4MDAwMEMwMjQxMjlEMDRCRUE4RkM4ODNCOTlFOTM2RkNFNUU3MEMKLToxMEE4MTAwMDZFRDBFMzg2OUFFMkM1NzVEODY1MzlDQTNFMjJFMkE0QjUKLToxMEE4MjAwMEE4MUI3MUY0QzkzM0RCOUU0MDdCODFFRUQ0MjhEQzBGN0EKLToxMEE4MzAwMEVGMEJCRkZGNUQzRDU2RDVCRDNFNzc1OTMzQUVCM0VFNEUKLToxMEE4NDAwMDg0Q0NFRDA3RjU3RDVFNThENzkzNDM3QTdFODZFMjg2MDkKLToxMEE4NTAwMDNBNUREQ0VGQTVFNzMzQjA0RUY3NUQ2NzZBMUI0QjA5NDUKLToxMEE4NjAwMDYzQ0RBRUQ4N0U5OENBQjlCRTUwMjk0MUM4RjlBQkJBRkIKLToxMEE4NzAwMDBGOUI4NTk5RTc5M0ZFQjUxRUJBMkU5RkVFQ0RGNTlGRUYKLToxMEE4ODAwMEIxNDIwMjkyRDhGQUU1QzA2RjVGQzRCNTNENzAxMEY5Q0QKLToxMEE4OTAwMDFGMjc0RUUxNzI1OEZGMTA2RjhEMDFDRkM4RjY3RUM5OTkKLToxMEE4QTAwMEYwMjNCRDRCNDgxRkZCNUFFNUUxM0ExMjUyODM4QTREMTMKLToxMEE4QjAwMEY1NzdEMjNGREQxNkMwQkEzRjQzN0I5RjU0RTJDNzk5N0MKLToxMEE4QzAwMEZFRjc0OTNGRkI0RjdFOTk0MTY2QjlGN0I0RDhDN0I3NDkKLToxMEE4RDAwMDVBQjQ3Q0QyOUZENjA5QjhCNThEQTNBN0FGQTU4QjNDM0YKLToxMEE4RTAwMDRGQjExNUUyOUU0QjdFQTVDN0MxOUMwMDNDMjJGMUZFRjQKLToxMEE4RjAwMDVDNzYwNjUxRUUxNzVBNjVDRDgyRjhFNzNDMDQ1NkNFRDkKLToxMEE5MDAwMDIzN0ZBM0U3NkZFRjAxRkRBN0UxMUY5NENGQkQ3QUY1ODkKLToxMEE5MTAwMDFFQzIyQjE4QjdFRTdENjJDNEI5QkY4OUY0Njk2REJCNDYKLToxMEE5MjAwMDA0RkY4NDZCNUZGNzRDRkM3QjA5NDY1RUVCQkVCNjFERjMKLToxMEE5MzAwMDQ3QzZBMDNDQUI5RThCRUVCNzYxRTg5RTdCODhGN0JEMTcKLToxMEE5NDAwMDFCOUFBM0VGMUI3Qzk1QUVFMzk2ODkzMDkxNzAwQkVBQkUKLToxMEE5NTAwMDEzRkIwN0IzMDI5RDU2RDRERjU3MzJGRDlGMTA1RTdFNzYKLToxMEE5NjAwMEM5MjRGODg0N0U5NUVERjIxM0I3MUU2NzRBODQzRjFBMTYKLToxMEE5NzAwMEI4MDA3QzhGMjg2RjY3RTgzMERERDc5OURCOUNFNUE1QjAKLToxMEE5ODAwMDM5RTYyQUEyN0Q2RTVCMTZDNzE5NTA4MjMyREQzNzk4RjAKLToxMEE5OTAwMEFERjlDQjE5NUYwN0I0RDM3NDJGNjQ5REVFMjdDMTg5M0QKLToxMEE5QTAwMDdGMjhCRkEzQUY2QjlEOEVFN0VFMEI0NkQzM0QwNzgyOUEKLToxMEE5QjAwMDhEMzRDRkRBOURFMkZFRDFGQTlERjFCRjEzQThENUM3NDEKLToxMEE5QzAwMEQ5RjBENEM5MjM5NDBFQUMwRTQ1RjdBQkQ1Rjk1M0RCQkYKLToxMEE5RDAwMDE2RkRCQzA1NzgxMjE4OUYxMTdEQ0ZGQzRBRUY0M0ZDOTEKLToxMEE5RTAwMEM5MkNGMEM1REJGQTM4NDZGQkI1MTlDMjdGRDYyMDc5RjEKLToxMEE5RjAwMDI0REYwRDQxMzk0ODdBQjM0RTBBMjQwQjdDMEI4RUQ1RTcKLToxMEFBMDAwMDQ4Rjc1RDg2QkVFOEY3NjVFRkQ2Rjk3Mzk3QUUyRkJDQzEKLToxMEFBMTAwMDJFN0NCRkZBMTkyOTQ4RTc4MDc3RkYyNDlBRkU3QjQyRjMKLToxMEFBMjAwMEFCQ0I0OTFGNjJGNTZBNURCMzk5RjE2RDE1NkNCNDEwM0IKLToxMEFBMzAwMEJFOERENUFCQUEyMTdERDk2RUExMzgxNkFCNEYzNTdFMjAKLToxMEFBNDAwMEU5MzI3NDBCNUNGRTdGNEJGNzdBNzM5OEYzNENFQkZGQTMKLToxMEFBNTAwMEE3RTRBNTNDRDRCREFEREZCMTUwNUU3NEE0N0QwOEY5NzgKLToxMEFBNjAwMDU2MTk3QUEyQUZFQkVGNURDRkVEODY3Q0E3QzAxNDk2QTYKLToxMEFBNzAwMDZGNDVEQTE1RUU4M0EyRjFGNDZFQ0I1MDlFOTJGMzdDMTMKLToxMEFBODAwMDgzOUQxMzM4M0Y2RUU4NTFFQzM4RTUzQTJFNUZGQzE0OTUKLToxMEFBOTAwMDcwNzlBMUFERDQ0RUY4QTJGRkI4QzkyQkE5OUM3RjRDMDgKLToxMEFBQTAwMDJFNDQzRTRDM0YyMDAzRTE4REZFRjY4OThGMDc5MEZFMzkKLToxMEFBQjAwMEEyMTNDNTM3NTJCRTdDRkEwOThDM0ZEOEJFQTdCM0Y4QTMKLToxMEFBQzAwMDU3RTQ1RjExRTFBNDkxN0QyRkVDQ0E0RUZCQkQ4M0M3MTMKLToxMEFBRDAwMEUxRjhERDdGQkNFOEYxNEFGMkMzQzdDQjhBNjk1QzA5QzMKLToxMEFBRTAwMERCRTk3RTc4OTExRTg3MUE4RTE3RDk3QjIyRTJEMUZEOTEKLToxMEFBRjAwMDE5MjJERkJFQzVGM0ZCNDc2OTVGQjA3OEI3RDk0QkY5QzAKLToxMEFCMDAwMDhFQzU2NkZGQTYwNEE0QUZFODA1QzlEQjgwQjMxREU5QzYKLToxMEFCMTAwMDNFRjQyNDhEOEJGNkE0NTJCRTY2RjFFRUVGMURBMkY2MzQKLToxMEFCMjAwMERBNUQxMkQzREZERkJFMjg3RjE3QzVDN0EwRUNBNUI4NUEKLToxMEFCMzAwMEQ3REY3RTU3QzFCRDg0NzMwRURDNTM3MDU3QzQ3QzQ3OEEKLToxMEFCNDAwMDUyODU1RjU5N0M5NTk5RTM3MUVGNjhGQjJGMkIyOUNGRDQKLToxMEFCNTAwMEE5RUQ2MEZGRDBGQkVBMUUwQjdGNTdCMDRCMDIwRkFFOTIKLToxMEFCNjAwMEYzODhFN0YwQUY4OTBGQkRGQjRFNUEwOEU0OTdCNjlFMTUKLToxMEFCNzAwMEI0RjRDNEYxQ0Y0Njc5MDFCNzcxNjFDRUJGNkVCN0YwQkUKLToxMEFCODAwMDNEQ0FCRDdGQjBEMDdBNkI5RUZCODhGMzY5NTU2RDEyQ0MKLToxMEFCOTAwMEZCQTdBQTY3RTRBMDRBNzk5RTAzQUY1ODQ4M0Y2QjlBODcKLToxMEFCQTAwMDI1QzhDQzhBNkMzNzczM0JGOTUxQUFGRkIxNTlGODY1QjcKLToxMEFCQjAwMDQzRUZEN0U4N0E2RUU4QkQ2MTA3NkI3NEZGNzVEN0Q2QUYKLToxMEFCQzAwMDY4M0RCRjE3QjQyREEzRjFGRDdCOUE1N0YzM0RBMDdCRTEKLToxMEFCRDAwMEI2QzdGNzVGODYxRjVDNEJGQjUyOEMyQjZCOUY4QUVFRDAKLToxMEFCRTAwMDc3REY5MDdFMDdEOEJGQzdGQUM5NTczMkY0RjNEODNDNTUKLToxMEFCRjAwMEM4MjNGRDFFMENBRjE5QUZBMDNEN0Q3RUIyNkEzQ0M0RDgKLToxMEFDMDAwMEM5M0IxRUQ3RjE4MDExOEYwN0MzMjY4RTY3QjFGREZBQUQKLToxMEFDMTAwMERBMkU1QTI4OEVENjc2RkU5OUYxNkI3OUZCNjcyQzg3NEYKLToxMEFDMjAwMENBRjYwRUJFQUY3QTNERjgzNzEwMUZBRjZGQjczQjA5QkIKLToxMEFDMzAwMDQ3NTdGNjA4QkI1RkQyNkUwRDA2MjU2QTBGMzU5MTdDMkIKLToxMEFDNDAwMEZCMEY4QUVGM0IwMkFGNEE4Q0EzNDBGNzdGNkI3NTdFMDgKLToxMEFDNTAwMEFFRDVGOUI3MTZGNzY3NjNFOERFOEFCRUZGQkUyRjc3NzkKLToxMEFDNjAwMEM3MTFCQUUyNTFBMzNGREZEMDc1Mzg5OUY4QjgwNDg0MTAKLToxMEFDNzAwMDdGNUExMjEyRkVDOTkwODcxMTVGNDZDNkQxODE2RjkzMjkKLToxMEFDODAwMDNDRDdCNzVCRjlCRUY4NTJERDNGMkQ2RDE2REY5M0M1OUIKLToxMEFDOTAwMEZBOEJGRTUxNzY5MUZGREQyQkU4OEQ4REE3MzVBREQxNzYKLToxMEFDQTAwMEZEQkIzMkQyRDlERjBGRUE3OEY4MTNDM0RGRThGMkE4OTAKLToxMEFDQjAwMDFDMDAzQkU1RTc5N0E4QjIzN0M4NkY3NTJCMzQ3RkU3RDgKLToxMEFDQzAwMDU0ODlDRjYzM0JENTg5MjlGMUVFNEIxOUU1OUIzQUNFRTgKLToxMEFDRDAwMDM3RUFDQjI4NEY4NkZENDNDRUVEOEVDODdERkM4RDk5OUIKLToxMEFDRTAwMDAyQUY1NENEOTEwMzI0Q0Y4ODdEQ0ZCMkEyQUNCOEZCODQKLToxMEFDRjAwMDFFQzg0NEJBREYxODdCRDc0RkE2NDVFRTdCQjQxRDM5N0EKLToxMEFEMDAwMEE0NjczRkYyM0M1RTQ5Rjc4QzZBOUI4NTdGRTg5QjhEODgKLToxMEFEMTAwMEUzQTYxMDhFMDdDNkM1QjVDREQ2MjBFRDRGNkE1MTRGQkMKLToxMEFEMjAwMEY4N0IzMEQyMEZCMkJGNzY2OTExRTkwN0VFMUIxQzk5OTAKLToxMEFEMzAwMDQ4Q0Y3MjNBQUFDNEY1MkY2RkMzMzg4RUMzMkYyRkZCQUEKLToxMEFENDAwMDhDRjVBQTJCNUJBQzFCRjk5NjE5NkYxRjYxRUMxRjZBN0YKLToxMEFENTAwMDJFMDk5QzZBM0NBRjUxN0E3ODFGNTFEMzJFRUU0OUI3MjkKLToxMEFENjAwMDFFRkE2MjVDMTZEMkRCN0ZFMDNGQzZBREM2NzI0MUE2MUEKLToxMEFENzAwMDg4QkZBRDI1QTE4RkU5QkVDRkU3QkI2QzcxRjFFODkwMkMKLToxMEFEODAwMEJGOTc5QUQ4MEU2QUNDM0QxOThDNTdGNjIzMkU5Qzg1MTYKLToxMEFEOTAwMDdFRjNFRDRGNzlERkQxN0EyOEUxNEVDQUM3RjVBREYxRTgKLToxMEFEQTAwMDhGNzc3RTgzOUMxQTYwMTNFM0RBNEREMEM0MjVFMTlFMzEKLToxMEFEQjAwMDQ4MUNCOEQ2MjlFRTBGRERBQkM3NDlBQTNGOEM3QTdENzcKLToxMEFEQzAwMDJGRjY1RDUwMTRDRkVFMDM1QkU2NDkyM0VERERGMDFCNUIKLToxMEFERDAwMEQ1QkFCRUFGMkZEOEIxODU4RUUwNjNGMTUxQjU2RTQ3QkQKLToxMEFERTAwMDg4RkMzOTJFQzZFMkEyMUIzM0EzRjVCNEUxRUQ0NEM2QkMKLToxMEFERjAwMEI5RkQ1REIyOTM3MkM0QzhENzVGOEMyNkRDODdGODdFM0MKLToxMEFFMDAwMDQyOUMzQ0VCQTdCQTVFRjZFQUU3QkUwREIzNjVFNjlCNTMKLToxMEFFMTAwMDY5OEUyODBEMUM4NUZDNjM3REU5M0ZFOTA4NTIxQ0NCMzcKLToxMEFFMjAwMDNGRjhDQTA0OTJGRkZBOUREMUU3NDUyNDNGM0ZERkRGOTgKLToxMEFFMzAwMDBBQjJGQ0FBNDM3NjNFNDMzMkRBNUYzQUY4Q0ExNEQyMjkKLToxMEFFNDAwMEIzODZCN0JGQ0MxMTcyRjkyMkM3RTJCRTNDN0Q0NjI5NUEKLToxMEFFNTAwMDQ5NjJGRjZCOTJDNEZFNzdBRkQyOTM0Q0ZCQUVEQUZEMzIKLToxMEFFNjAwMEIyMkZGMkZFQkMyMUU3QkI3NUZEMDE0NUVDRjNENzY1QkYKLToxMEFFNzAwMEFBNUM2RjY4MTc3QTYxM0EyMDRBOUM3RkE1QzhGMzk4NEMKLToxMEFFODAwMDc5RkUxMUVEMjVBODJGREYxMEI3ODBFODQyRDlENzlBQjcKLToxMEFFOTAwMDA3NThFRjZBNEY5QTk4OUVEQTkzODMxOUQ5MTFFRjA1RjQKLToxMEFFQTAwMDY4REM0Q0YyN0IwRDFCODBGRDg4MURDOEJGMkVBNUVGMTIKLToxMEFFQjAwMDBGQjFCRUY0RkQwNEM2NTk0NzI2M0M1MjI5Q0VBRDY0RkQKLToxMEFFQzAwMDIwQkZGNUMwREI1NTkzMjNGREZGMDUzREVFMDNGMUMxMjcKLToxMEFFRDAwMDQzMjhFNzA5MzFCRkNFODc0REIwNDJDRjEzMDgzREFFQkUKLToxMEFFRTAwMEQyNzEyQ0VFQUY5QUM4OEU2M0Y3NTc1NzhBOTMxQjBFMTgKLToxMEFFRjAwMDU4ODFGMkM3QjUxRjU4RjkzRUQwRTcwN0Q2RjJGRTFEQkMKLToxMEFGMDAwMDJFRjkyNzkzOUYwMUJGRkY2QTJBMUYzOEI4NzYzMjNEN0EKLToxMEFGMTAwMEZGRkNFMDdENTc3M0RFNTNEQTE0OTVBRjA4MTA3RDFFRjkKLToxMEFGMjAwMEMyNTE3Rjc5Rjc3NkMyOTc1RDBBRTM5MEEyQUVEM0VGNjQKLToxMEFGMzAwMEQyRjlFQTlFNTYzMzdGOUI1OUJENzdDNkUzODEyNEMyN0UKLToxMEFGNDAwMDRGNDU0QkU5QkI5RDNEOUQwQUVCMUZFMjJBMDM0N0Q5QzQKLToxMEFGNTAwMDE5NDc5RDI4NjYxQzg1RTNGODgyNUMxNjFGQUJBNDcxMTcKLToxMEFGNjAwMDRGOTQxNDUzMzcwOURCQzk5RjREMjcxQ0U1MThDNjU1NkMKLToxMEFGNzAwMDA2M0RGRjlDMjlGOEQ5REY5MUMwRjkxMzA5MjYwODNENDkKLToxMEFGODAwMDgzRUMyOEJBMzdCNEJFQ0UzODY0NDM5QjFDRjVCRDg2MkIKLToxMEFGOTAwMEYxREVFRTRDNzFBRUIwRDdEMEIzOTBBNEIxMUVFRDE2NzkKLToxMEFGQTAwMEU1ODZCNjNEMTlCNDhFRjVFNjEwRUI0OTQzQjM1OUI0QzYKLToxMEFGQjAwMEVGMTIyNUQwRjlDRDBDRkVEODM4NDBGQzM5NDY4RjUwMjEKLToxMEFGQzAwMDJFNEIyQ0MxQjE4NERCNzcwRjlEMDdFQUY3Mzk4MkUyNjMKLToxMEFGRDAwMDVFNUQ2M0U3NDRGRTZFNjhCMDczOEYzQjVFRkMzOTRFODYKLToxMEFGRTAwMEU3MzM0OERBRDEyQ0IxQ0Y4OTZEQUZGMzg4N0NDNkQxNzUKLToxMEFGRjAwMDMzQzIyRjFFNURFODlGMUNDRjNGMDZBMDQ0RUNGQjI1MEIKLToxMEIwMDAwMDVEN0VBREU2OEE3OEU3ODYxQjNEMjJERkI0NzM2Q0UwOTcKLToxMEIwMTAwMDI4RTk3MUVGRUUwNDNFMzdFQzc1ODlGQzZDNjk0Qjk3QkIKLToxMEIwMjAwMDQyREY5RkFDNkY5NTY2NTAzQzVBOUZGQjFFN0Y5RjgyMEMKLToxMEIwMzAwMEY1NjJGNjgzRTFGRDdDNkU1QUREQkNCQjVDOEI0M0M3RDkKLToxMEIwNDAwMEI1MUUxMTFGOTdFOERGMDE4RkQwNTdCREZEMTQ3OEQzQ0YKLToxMEIwNTAwMEY1N0REQTIzNzQ1RTczQUFEMkVDMTRERjk5ODlFRjRBODYKLToxMEIwNjAwMDZGRDBGREY5OERENzlCMTkzNzlEMDJENTJDQ0UzRkM0RUIKLToxMEIwNzAwMDM5QzUzMkREMkZERkEwRkJGOTExREYzQjNGMDM5QkU5MzAKLToxMEIwODAwMDlDMjJGNjdCNjdDM0FGREZBQzhGQkYwMjM0MUUzN0Y2NUUKLToxMEIwOTAwMEJCRjU5Qjc1M0M3OEIzMkZGQUY5QTU0QzFEMDdFNjQwMkMKLToxMEIwQTAwMDBFRjlGMzEwQzYxN0JFMUY5MTk3QzA3MTdBNjlFMUE0MUIKLToxMEIwQjAwMEI4Mzg4M0JFMDM1N0Y1RUZDMEE5MzRFNERFOTBGNzFFMUQKLToxMEIwQzAwMEM3QkZBMzFENjc3RUNEREYxMzlDNDk4MDA5NzFDRUM1MjQKLToxMEIwRDAwMDg2RTM5RkUxM0Y2RTEyRjJENkNGMkRBQTlEODI0NjQzQjIKLToxMEIwRTAwMEVFMTc3MDA3MTY5OTFGMzNFNDNFNDZFN0ZGRkZGMTNENjgKLToxMEIwRjAwMEEwNUM1MDIyRjMyNUNGQ0FGRTMxMUUzQTlGQjBGNTMyMzQKLToxMEIxMDAwMEZFQzYxNTcwMUNDNDc1OEREM0Q3MzVDRTFBMTFERjJFMkYKLToxMEIxMTAwMDhDNUExRDU3N0Y4N0Q3OTcxQTEwNzFDNENENjU0NzlFRUIKLToxMEIxMjAwMDk1NzE2Mjc1NDhFMkVGRkJBQUMzNjI1RjVCNUQyNkY2MkMKLToxMEIxMzAwMEI1MzlBRDAyQTdBRUJDNDkwQTZBMTJCQkMzRDM0NDlGNUUKLToxMEIxNDAwMEExM0ZDQjZDMDIwRjE4N0EzMkM0MkY1RDdGQTg5REYwMEYKLToxMEIxNTAwMEMxMEQzQTNFODhENUEzQzlEMDVENEVGOUU2NUIzNEM5MkUKLToxMEIxNjAwMDRCRjcyQTQ3N0MzRkJGNkFEQUVCRTRFRTJGQTczRkE4RjQKLToxMEIxNzAwMDZGRkNFRjIyQzRFQUQxRjczREZFMTIwRkU1RDNCQTA3MDgKLToxMEIxODAwMDU3MTZFMkI4NDdGM0ZFMzg4RUY0QTZFNjMyNzZGMzJENzIKLToxMEIxOTAwMDhGODgxMzNCMUQ4MUEzN0NERkE0NDUzRkVGNkZDOTZCRjQKLToxMEIxQTAwMEVCMjE3RTc0MDJFM0M3NUU1N0Y3OTYzQTgxQUJGOUJDOTgKLToxMEIxQjAwMEJGM0E5Q0MwREY0MzU2QjdEQkY5QkJCMEVBRDY4NkM0QzIKLToxMEIxQzAwMDI5RTQ3RkRCNjVBRjFERUI5NUFEMjdDQjg4OUY5NUM1NDcKLToxMEIxRDAwMEUyM0U0QUFENUREQzhCQjNCOUZEQjcxMDdERDc3QjNCNUEKLToxMEIxRTAwMEEyQ0ZGOTJEM0RCRkE4RkIwNjNEOEZGNTZCMUIwOUEzMzAKLToxMEIxRjAwMEE1RkZGN0Y5OUI4RDNBNUZFQUJBMkU2NjRDQzFBOUZFMEUKLToxMEIyMDAwMDkwRTZBRjI2N0RFQzdGRkQ0NTBCMUREN0Q1NEU3OUE1ODkKLToxMEIyMTAwMDlDQUU4ODZERjRBOERDRUZGQUU2OEUyNjRBRjMxQUY0QTkKLToxMEIyMjAwMDc3NjQzQUY5Rjk1MTczNzAyQ0UzRDI4MjJCQkIwRkQzQjgKLToxMEIyMzAwMEIwRkY4REE5MTRBN0ZBM0FCQUE2NUEyMkY0QkJCNzBFRUEKLToxMEIyNDAwMEZENzMxQ0Y5MzU4MDQ5Qjc1Qjg1NEI0OTVBQTFFMzI1NEQKLToxMEIyNTAwMDYxQzdCNTA3MEU2NzUwM0VBMjk3RUNCNzgwQ0E3NzkyRDgKLToxMEIyNjAwMEIzQjFBQ0RFN0QyQTc5MTJFMTk2QkRBMjFDQzIxOUVEMDQKLToxMEIyNzAwMDMyRjcwM0E1MjdFN0U2QTQ0OEZBMzYzMzdEMTc0MjYyODIKLToxMEIyODAwMDFDODA5RTlDMUIwQjIzREIxQkZGNUZEQkZGRDNBNDI3RDMKLToxMEIyOTAwMEQ1QjY5RTI4RkIzN0Y4ODRCQjdDRkUzRTM3NzBEMENBRkIKLToxMEIyQTAwMEY3MDhFOEJDQzYxNTIxQzc1Nzc0N0YzNDBCMzc0QjY0QzkKLToxMEIyQjAwMEE3NzNFODdDN0EyMjQxM0IwNUVFQTBCQTAyNjEyNTk1OEUKLToxMEIyQzAwMENFOEJDM0IyQjg3RjM3OTZGREY3NEM3REZFNTk0QUI4OTYKLToxMEIyRDAwMDgzRUVFOUNFRDFDRjM3RTc0MjM3Rjc1QjAwMDM1QzZBRjQKLToxMEIyRTAwMEUwRTRFRjhCNEJDMENCRTU2QzVCNzgyOUMxRjE4MjUwNzkKLToxMEIyRjAwMDg4QkY5RjA5NjcyOEFFNzMzNkZEM0JFNjM4RjIxRUU2MkQKLToxMEIzMDAwMDlCMDJFNzBDN0VDODc0MEUyNkVFMUJDNUFFQTc1QkQ3NkEKLToxMEIzMTAwMEM3NTk5QUYwM0IwNDFERTg3RUVFNkMwOEYxQjlGQjM1ODUKLToxMEIzMjAwMEQwQTM5RkJGQzc1RkM3M0NEQ0Y3RDFCOURCMzU2ODNCMTMKLToxMEIzMzAwMDg5Q0M4RjIwRjc5RjRGRUI5MUUzQURBNzY3Mjk4QjE5M0QKLToxMEIzNDAwMENBOUM0NDlGMTRDRTMwN0Q2REJGRjI3NUY0RDM2RDREMTEKLToxMEIzNTAwMENBNTdERjM1RDBGNzgzRTJFMTczNEI2RkZCMUJFRkQzQTYKLToxMEIzNjAwMDdENjI0OUQzRjhCRUIxOTdCRUM3QTY3RDRFNThFOTFEOTAKLToxMEIzNzAwMEYyNjMxMzAwRkVEREIzRTYzNzY0NkZDNkY3MUFFMDA3MjkKLToxMEIzODAwMEJFRTcxMUZCQkQwNjJERjc3Q0M2RjAzRDM1RTNGRUVEQjMKLToxMEIzOTAwMENFRTAwQTk1RUU2RkFDNzJEQkY4REZBRDI5QjI4RDlCODMKLToxMEIzQTAwMDRFNzlDQTg3RDJGQ0JGMjFCREZBNDA2QTlFQzQ4MzI4NjkKLToxMEIzQjAwMEMxMTk4QzYzNzVCREIyODMzNjlCRDYyRjY5QzZGNzIyM0YKLToxMEIzQzAwMEMwRkEzMkY0RUYwMTY0MDA3RkI3NjNCNzhBRUY2OTFFRjkKLToxMEIzRDAwMDQxM0RCNEE1QjJGNkFCNzQwRjFBMUUyRTU1MDkyRjZGNUUKLToxMEIzRTAwMDcxRDlCQ0Y0NURBRTk1RThCNTBGRDNEQjY4MTNGNzJGQzgKLToxMEIzRjAwMDhDRkI2QkIxN0M2Q0I0MTk3OTRBQUY4RDcxNzZDQzc3Q0MKLToxMEI0MDAwMDNFNzdEQUZDRkY5QkU4QkYzRkE5MjQ5MzcwNjBGRUNCMzgKLToxMEI0MTAwMEYzM0Q3QzNGMjlDMTU4Nzc4OThERUJDM0Y3MUExOTM3NjMKLToxMEI0MjAwMDM2RDE3RDZBQTRBQjMxMURGODFFRTJFMUE0OUMxNEJBQUEKLToxMEI0MzAwMDFGRDVEODI1RUU1MzM3QTYwN0Q4N0Y5QkZEMTJGQkYzMDcKLToxMEI0NDAwMEM2Q0VEMjRFOEEwNzgzMEUwQkRGQUI2RTc0RjkzNEFBRDgKLToxMEI0NTAwMDA3RDIyMTQ0RkU5RkY4M0VERkUwQkI2OTk4RUYyMUZENTMKLToxMEI0NjAwMDVFNTA5MUVERDc1NzUxREU3RjlBMUI0QUU5QkQ2OTYxNjUKLToxMEI0NzAwMDZEMTJGMUMwRjgxRTA2RTVFMDE5OTU0RUNGQTNFRjdCRTMKLToxMEI0ODAwMDgxRTJFNEZCMTc4NjFDNTAzMTU4OTk5REJBN0MwREI5QjYKLToxMEI0OTAwMDM4OERFRkY4MzUyNUVBM0I3RTQzNUU4RjI0MEFCOTk4NTQKLToxMEI0QTAwMEU5MjZDQzQ0N0U1N0E1NzE2M0U1NjFGMEZEQkYwMDhGQUUKLToxMEI0QjAwMDQwQUVCMTMwNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMEI0QzAwMDFGOEIwODAwMDAwMDAwMDAwMEZGM0IyNEMzQzBGMEEzNTYKLToxMEI0RDAwMDFFODFFRjRBMzEzMDMwRjFBMjhBRDExMkVGRTM2NDYwNkQKLToxMEI0RTAwMDEwRTA2MjYwMzAwNUUyRkIzQzBDMEMzMzgwRjQ0QzIwMzEKLToxMEI0RjAwMDE2RTU2NjYwMTAwM0UyMUEyMERFMERDNDdCODBGODE5QTEKLToxMEI1MDAwMDUwRkMzOTEwRUYwMEUyMUIzQzEwRkRCRTRDMEMwQ0ZFNTEKLToxMEI1MTAwMDQwMUMwOEM0QzE0MEZDOTU4MTgxRTExQjAzRjFGNjczMTYKLToxMEI1MjAwMDBBMzMzMDRDMTU0N0YwMkYwM0Q5OUYyNEU5RTdGRkMxQjgKLToxMEI1MzAwMDg2NDMwQ0U5NkJERjcxQTA3REYzQUMxMDdDNDYyMDdCNjkKLToxMEI1NDAwMEJFMTVBQTlBMDU1NkY4Q0Q1ODg4MjZCRjA4OERCRjE4OTMKLToxMEI1NTAwMDhGRkU3MjAzNTRGRTVBNEQzNEIzQjU4MUU5MDk0OUNEQ0IKLToxMEI1NjAwMDNBNERGQzZFNDFDN0FBNDBGRkE5MDEzMTAwQURGMTVGMjEKLToxMEI1NzAwMENBNjgwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMEI1ODAwMDFGOEIwODAwMDAwMDAwMDAwMEZGRTU3RDA5Nzg5NEQ1QkUKLToxMEI1OTAwMEQ1RjA3REU3NUQ2NjI2OTk5OUJDODE2Q0FDNEVEODQ0QTgKLToxMEI1QTAwMDBCNzQ0MjQyMUExMERCNjE4QjY4MTE4MzRCMDUxNzk4QUMKLToxMEI1QjAwMDA4NjQ0RjI2MjBGNUM3REFFRkNGNDAwMDUxNTE0MzhCODYKLToxMEI1QzAwMDM1NUFCNDAzMDQwNTFCMzREODgwNDEwMjBFRTA4MjJEQTUKLToxMEI1RDAwMEQ1RDg2QTVEREFEMkEwQzgxQTkzODAxQkZFNURGQ0NFNzYKLToxMEI1RTAwMDM5RjdCRUM5RkI0RTI2ODJCNUZGRkZGNUZCRkVGOEY4MjIKLToxMEI1RjAwMDVDRUU3QkY3QjNERDczQ0UzREY3OEVFMjE4Qzc5NDhCMUMKLToxMEI2MDAwMDE4RkIxMkZGQkVDNzk4RERDNjE4MUJENzlEMzI1NjIzMDQKLToxMEI2MTAwMEQyNEEyRENGQ0Q1OEQwMDNGRkNDNjJBQ0RDQUQ4NTk3OUMKLToxMEI2MjAwMEE3MzMzNjY1ODcxQUY5NUUxMkU0Mzc0ODYxM0JFNDZENEIKLToxMEI2MzAwMDdCOUQ1NERFQkU5RUU3MjM2RUNEQ0ZBMEZDQTMzQUM4MEYKLToxMEI2NDAwMDRCRDBERURFRjJDMDY1NTBERUI5NDM2NjFCQjFEQjkxNDQKLToxMEI2NTAwMDcxMzY5NkMyRDgzMTA3RTM3RjU5OTBDRjY2QUNDMEM5MjYKLToxMEI2NjAwMEIzRTUxQkY2Q0RDNUY2NDU0RDc2RTY4NEZFQ0E3NzE1RTMKLToxMEI2NzAwMENFQkMwQ0YyODUwNzU1ODY1NUNBMzcyRkQzRkE0M0JFODgKLToxMEI2ODAwMDM4MkMzNTYwQkU2MzMyOUY1RjY4QTcxQ0RFMENGNTNCMkIKLToxMEI2OTAwMDNDMkQyOTM3QjgxODNCNTVFNTYwNUU4REIxNkE3NzRCNzQKLToxMEI2QTAwMENBRjVBMzE4MkIwOTZGQ0ZDNTc2MjVGNTkyMEY5NzNBRTcKLToxMEI2QjAwMDY1QzdFNjk3RkJFMUJBQjY0QTNFQkI5N0IxRDIyREYxMUEKLToxMEI2QzAwMENDM0I5MkNGRTE0QkY4RkY1OEEzMUNGOTFFOTQyRjg2NzgKLToxMEI2RDAwMDc1MzJFOEI3OTBENUU0MzIxOUM3NUZBQjc5REREREYwOUMKLToxMEI2RTAwMDNCNTVBNUQzMzg0NkJFN0MyQjhDMDNFRDJBOUU5NjdDMTkKLToxMEI2RjAwMEI4QzQwQTFCMEIzNEMwRjhFREJCOUNCMzM3Qjk3MDdEREUKLToxMEI3MDAwMENCQjQxMTZFNUNEN0REMUFENjJCMENFN0VGNzQ3QTcxQ0YKLToxMEI3MTAwMDdFMUJCNDVDMjgyRjU5QkY0MTJCMThENURENUZFOTk2RkQKLToxMEI3MjAwMEJFRDY3OUQ1MEU0RDBEOThDQUEzRDM1MzU1OEM3OTQ3MDMKLToxMEI3MzAwMDc0RTc0QjE4RjMzNzQwQkY0QzA5NkJCMzQ2Nzc3RkZGNzQKLToxMEI3NDAwMDgwMjUzMjk2OENGRENCQ0NFQkU4RUUxRjIwNDlERjQzMDEKLToxMEI3NTAwMDZGQzEzRjAxNUVBMTNENkU4MkFCODFCN0M1M0FGQ0RCOTQKLToxMEI3NjAwMERCOERCN0IzQkFDMEEzRDI5OTZERUVERjQ4MUY0MDNDNjIKLToxMEI3NzAwMEMwN0M2QTEwNEU5MEFFMTFGM0YzNEM2NDkzMTRFOERGNzIKLToxMEI3ODAwMEUzNjdCQUM0N0E1RjhGOTFENkE4MkM5RkMxNTgwQjQyNDkKLToxMEI3OTAwMEEzRkRDQTc4Qzg2QjZDMTFGMzMxRjY5MzE1RDlGRUE5RDUKLToxMEI3QTAwMDkwQkY5RjA1RTZFMkJDNTc0ODgxMjJDNDEzNjMwRDY5MzAKLToxMEI3QjAwMDQ4QkZBQjI0MzYxQkQ3RkYwMzlDMzQ5NEFGRUEwN0Y0OTEKLToxMEI3QzAwMDA5NzBBRjk5OTZCRDQ5OTZDNERDOTMzMDVGRjBDNEJENTMKLToxMEI3RDAwMEU5RDQ0RjIxRjVBMzQyM0Y0M0NGREY4RjlFOUI2M0U5MUUKLToxMEI3RTAwMDQ3Q0YyRDMyRkFBOUE0N0U5QzE3RDY0RjRERUUwNEVCMUQKLToxMEI3RjAwMDdDNzI0QjhDN0VFRUE0N0VEQzE3QjYyRUZEOEE4OUQ2MzkKLToxMEI4MDAwMEY5NUM1MTQ2RkQyNDRFRjVCMTAwRDQ5NzBEN0E2MDJEQjgKLToxMEI4MTAwMDdFMTlDQTVERjU4OTYzRUY2NTY2QkE5OEJDMTJGOURGRDcKLToxMEI4MjAwMDBENUM2MkE2OEI4NDlDMzgwQjFEMjZGQUZCNThGMkQwNjcKLToxMEI4MzAwMDkzN0VFQzVCMjIwRjgzNDQxMjM1MUE1RkVCQUY5MTVDNzEKLToxMEI4NDAwMDk4RDRERjQxRjkzQkZBQkI0ODJFREMzMTIxNzBCMTBFQjAKLToxMEI4NTAwMEYzQzBCMTU5M0ZDODZCODE2RkVCMzFFODFBRTYyOUIxRUIKLToxMEI4NjAwMDM0NENCRDM2NENBM0NCRUY1NjM5MUMyNjBGRjhEQjg4ODEKLToxMEI4NzAwMDIzRDAzRTY4RUIxQzkxMDhGOUY1RDJBNDVGMjA1QzM2MUEKLToxMEI4ODAwMDMzMUJDMTI3NEU2Njk1NTgyRkNFQ0U0ODNFREQ5RDlFNzgKLToxMEI4OTAwMEJEMjk2NDgyRDNFQTQxODA3RkE5QkJERkQ1NkEyMDBEMzAKLToxMEI4QTAwMEU5NkIyQkJCMjE4NEY0QjY2QTEwQUNBNzNGNjM0Rjg1Q0MKLToxMEI4QjAwMEFFOEY4NDE0NjgzRkE4MjAwREUxNjlENzgwQkZDREUzMjcKLToxMEI4QzAwMDZCMzBGRTI4MUFGRjE5MUM3NzA3OEUzRkFFRTdGOEY2OUIKLToxMEI4RDAwMDIxMzk5NkYxMUQ4MzhCMkNFMzNCMzQxODFGRTg3RDE3MkIKLToxMEI4RTAwMEJCNTU4QzBGRjA5QkMwRDhGM0ExNUI2ODdDRkJFMDIyQkEKLToxMEI4RjAwMDFBRkY2RThEMTU1OUM2OEZFQjFBRkYwNTFDRjdBNURFRDIKLToxMEI5MDAwMEQ2M0Y2NDgyNzVGRDgzNEJBQ0VCRDdGOEZBNUY2NTBCQ0QKLToxMEI5MTAwMEM1Rjg3MUI0RkU1Rjg3MTZGMEY1MEYyRUUxRUJCN0YzQjMKLToxMEI5MjAwMDdFQkJDNkY3NzRDMUZGNzUxQ0Y3QURERUQ2M0Y3NEEyQUYKLToxMEI5MzAwMDc1RkQxNzk1NTlENzZGRTdFM0JGQ0JDQUM1RjgyRTFBMjcKLToxMEI5NDAwMEZGQkQ1MDE5NUZGRjQ1NjUzNEJFNjYwRkY4OTA4RUI0OTkKLToxMEI5NTAwMDAxNzE5NTYxMTg5RjBEMDQ4NjQ4MjUxOUU1QTc3NDY0NDcKLToxMEI5NjAwMDFGQzZBMEZEM0EzNjg0RTA3MDQ3MUNBN0JCQ0ZFMjgwMUIKLToxMEI5NzAwMERFNUNEREYyOEU4NTgxQTM0MDlFNTUwODlBMkZBRDlGMzcKLToxMEI5ODAwMEE0QTE5Q0E1NzI5MDdCMEJDNTU0MTczNEM5QjRERkIwMzkKLToxMEI5OTAwMDc1RjZGMDcwOTg2RjdCOTMxQ0MyRkM4Mjc1OTc4NzY1NzMKLToxMEI5QTAwMERBRUZEOEJDM0M2Q0E3QjAwODdFRkZGMEExRDExQkNENkMKLToxMEI5QjAwMEVCOEE0RTE3RDZBOEM3NUEyRDdDQzRFNzEzOUFDQzQ2RkIKLToxMEI5QzAwMDU2QzJGQ0E2MjExMThDRUJDRTFGMDMzOUNBNDA3RUJFQTUKLToxMEI5RDAwMDBGNzIxNEQzRTMyQThDMDdERjhGODI5QzY1OUE5OTZGQ0MKLToxMEI5RTAwMDk2RjE3RDNDQzRERTFDOTk4MjcyODJGRjFENTMzOEJDRTcKLToxMEI5RjAwMDhGMkQ5MUMyMDhGRkNGRDYyRUQyNTAzRTJEQUM4OTA3OTUKLToxMEJBMDAwMEEwNzdDRjIzMjhGMEQ0QjlDQjFFREUyODExM0NCRDA4ODcKLToxMEJBMTAwMDlGMUI4OTE1MTlGQjMzQTBCNTFGODBCNkIwQjZBRkE1MjMKLToxMEJBMjAwMEREMkQyQ0JDMzIwREVBQ0Y1RjkzM0Y0ODg3RjVERjNDMUMKLToxMEJBMzAwMERCM0U1NkM2RkQ4M0Y5MDdEODg4OEZEOTAwNUIwRTYzQkQKLToxMEJBNDAwMEIzMUJEN0FBMDMyMDczRTM2Q0Y1RkQ1NjUzRkIzOTAxRjIKLToxMEJBNTAwMDZCRkVFNjIyNkJCRTVEMERBQjM2RDQzNzhBMjVCNjAxOTAKLToxMEJBNjAwMEZBQkRCNUQyNUE2RThDOTMyOEY1RTE3ODE1RTNGRDIwMjYKLToxMEJBNzAwMDg1Q0ZGNzU2NENDN0UyNjc5REYwM0E1N0U3NkQ4REY5RDEKLToxMEJBODAwMDA0RUY1MjU5ODRGNkNCRDY2NDQ2Rjg0RkE2N0EwMTlENEUKLToxMEJBOTAwMEFGM0I3QUJFNzM1NTg3M0YwRkU2MzNGNzRFOTlFMDE5RjcKLToxMEJBQTAwMDNERkZENkJERjE3RURCMTg0ODZCM0Y1NjkxMDRBM0Q3MEUKLToxMEJBQjAwMDEzM0RGRjc5NEJBM0Q3QTM5MzFFOTYxRjhBRkVDRUU5QjEKLToxMEJBQzAwMDI0OUE5RTgyNEQ5M0ZBMUUzNUQ1MkI2RkI4QjJFRjUxNTIKLToxMEJBRDAwMDEzN0Q5NTZFOTk2NUM5MTc4N0U3NThFQTE3RDZFNjVCMTcKLToxMEJBRTAwMENBMTdENjE0NUJDQUU3QUY1RTY0QzlFNzg3RUVCNEQ0NjEKLToxMEJBRjAwMDlGQjc3NDk5QTVGQ0Q2Q0E3QjJDRTUzNzE3QURCNUU0ODIKLToxMEJCMDAwMEU3MDQxRUIxRDRCRjcxRjYwNjRCQjk2REVGMjVENzIwRkYKLToxMEJCMTAwMDFGNTVCRjI1MzNEQzM3M0U3NTFEN0IwMEY1QzE0RjVEREEKLToxMEJCMjAwMDhBMEZGMTcxQTIyQThERjhFMDU0OTU5N0QyRjZBNjRDQUYKLToxMEJCMzAwMDQ3ODBDQkMxMDI1NDcxMTYyRTZCMDhBRDlFODg3Mjk5NTYKLToxMEJCNDAwMDkxRkMyQzVFQjYzMzE0MUEwOERBQURFNDI1RjhDOUI1QjkKLToxMEJCNTAwMDFBOEIwMDA5NEJBQzRGMTcxRDc3Q0FBNkYyRDZGMzk0ODcKLToxMEJCNjAwMEQ3MDJBMzY3RjYyQzk3NUI2MzdGMEY2RUNDQkYwOEU1MDcKLToxMEJCNzAwMDRFNkZGMjAwRkUwNkUwM0VENzIxRjZGN0U4RjIzMjg5N0EKLToxMEJCODAwMEU1OTlCRjMzQjY5Q0Y4RkM5QzkwQjM2NTFBOTcwNzY1OUUKLToxMEJCOTAwMENGRjY5QkNDM0M5ODhGOENBOEZDQUFGMTFBMDBBODI4NjEKLToxMEJCQTAwMDI3NTEzQjRGNDY3QTAwMkVCMEQwQ0I1MDBCN0ZCN0VEREMKLToxMEJCQjAwMDkzNjk1RTE1MjgxM0M2QTNDOEM5NUIyM0ExOUM4OTFDODEKLToxMEJCQzAwMDE4N0NERDY4OUM4N0ZGN0UwOUY5QUUyOTk5RjZGNUI2RTkKLToxMEJCRDAwMEFBRTk3RDhGMkE4ODlGM0M0QTRGNTRDREE2RjQ1ODU1MzgKLToxMEJCRTAwMDgwRDJBMzU1NDU5NEJFNUY1NTQ5Njk2QkQ1NTI0QTBGMjMKLToxMEJCRjAwMDU3ODUyOEZENTNENTZBNEFERkFCQUFBMUY0OURBQTVBRkUKLToxMEJDMDAwMDRBRkY1MDE1QTZCNEJEQ0E0RkE5QzEwRjVERjIzNzQ5MEUKLToxMEJDMTAwMEU4QUJDMkFFODA5RDg3RjI2N0M1NUE1NjQwREQxNkUyOUEKLToxMEJDMjAwMDczNUYxQUYyRjk1OUQ3NjcyMzUwMUYzRkZCOEU5REExMEUKLToxMEJDMzAwMEJFREYxQkJDQTJFOUFENzczQ0ZBNDk1RjI5MDgwM0ZFRDEKLToxMEJDNDAwMDMzN0I5NjNCRTMzODlFOUMzNjM2OUQ4MTNDQkE2N0Y4NDEKLToxMEJDNTAwMDEzQkVEQjQ2NTE1RTQxOTI4MTBEQzkzN0NCMURBM0RGNzgKLToxMEJDNjAwMDYxOENGMDc1M0UzQzMxN0ZFNzk4NkIwMTFGQzcxRUZENkMKLToxMEJDNzAwMDZCMzZGNjdCNEVFQzdGNzEwNzY0REE4NzU5NjQ5MzBGNUQKLToxMEJDODAwMEYxNjU4MjFCRUQ2QjlEM0I4NEJDM0YwRkZDM0VFQTgyNUQKLToxMEJDOTAwMDVGQ0I2MDA2RTkwNDQ5MjdGQTNCREI2ODY3MEFDMkIxNUIKLToxMEJDQTAwMDM5M0UwQ0M0Q0ZDRTFFRENFNDQxN0U1QzlDNjZEMzhGNTMKLToxMEJDQjAwMEM2ODA4MzkxOTYzN0E0RUIyRUYzRkVEMzY0Q0Q5RkFENUYKLToxMEJDQzAwMDkxQTYzNzkwM0NGNjI2NUMzRjFBRTk0QUQ3OEYwRTQzN0YKLToxMEJDRDAwMEZDQTc1MTZBRjRCMzM4NEREMzhGMDJCRjlFREEzMjM0RDkKLToxMEJDRTAwMDgxRUZERjYxQkUwRkQ2MjcxMkJEODI1RDQ4RjVGRkQ1MUIKLToxMEJDRjAwMEYzRTlBRDFGNjMzRThDMzVCMjBGMUMyODBGQTA2Q0U4MzIKLToxMEJEMDAwMEY5RUQ5RDFFNzg1NzNFRDFGMjEwNUZDREVBNjdBODJGNUUKLToxMEJEMTAwMEM0QzFGRjVGMEVDMTdFMTVDQTFCRkQwNjFCRTQ5MEZENkEKLToxMEJEMjAwMERCRjhCRERFMzIxRUI0RjMxQTM2MzdCNkVCOUQ2RTE1NjYKLToxMEJEMzAwMDc2Q0NBMDJCOTA1NzFBMUFDQjY0MjczQTc1RUJCRTkyOUIKLToxMEJENDAwMDY4QzkwNzlCRkFFOTk2N0QwNkZGMDFGQzBGODI1MjQxMDQKLToxMEJENTAwMEJBMjkxMzU0RDRBMUI4NTY0QjMwQkYyMzI4M0YwMTJGMjIKLToxMEJENjAwMDQxODlENzJCNzdCNDZBMDEyRjkxNjMwQkVBMTlCN0U1QTQKLToxMEJENzAwMDE4NzRFN0JERjE4RjIwRUY0RkZFNDY2NUY3NjJGOURGREIKLToxMEJEODAwMDYwNTY1MEFFMUFDNTIwRjc2QzkwOUYyRjcyQjczNTk2NEIKLToxMEJEOTAwMENFNDBCOTc3RDJDNkY3RjkwNTJDQ0Y4MzQ2NEYxMUFCMDkKLToxMEJEQTAwMEM5NDYzREU3MjM2NjlCOEVGNEZGMTFGQjlEMjdEMzY0QjQKLToxMEJEQjAwMDZGRjg2QzFBQUQ3M0ZFNkFFQjNFMEJGQTk5MjU1RjU4NkIKLToxMEJEQzAwMDZCQ0QxN0IwNkI1MzkwREUwQkQ2QTkyQzJDMjE1RjVBOEMKLToxMEJERDAwMENCQkQzNjlERkEyRDY0OTVBQkM4REU0MTdCMDVDNkJENTMKLToxMEJERTAwMDRENjdDQTAwOTg1RkY5NzM4RjY1RTc0M0ZFM0IzNkFFMzcKLToxMEJERjAwMEE3MUJGNjdCNzExRjNFRkY5MkE0QjBFNjg3RjIwRjFBRDUKLToxMEJFMDAwMDMzN0Y3MDE5QzNGNkUxNTUyOEE3NDI2RUU2REJDQzdBODIKLToxMEJFMTAwMEUyRUZFQkNFM0Y3QUJFQzY3RUQyQzM4RjIwRTYyMTZGMjMKLToxMEJFMjAwMDkxRkNFMTE4NzZEQTM0OUIyNEY0QUQxMEE1MzdFMEJBMjIKLToxMEJFMzAwMDREN0E2QkJFODA4MzkxMkY4RkNBREYxOTk1RkZBN0U5REEKLToxMEJFNDAwMDJEODk1OUU4RUQ4ODE0QzhCNzI1NzNGQTQyN0Q0MTUyMEYKLToxMEJFNTAwMDNBQjVDMDM3RTkzRkFENDdGRkU1RkZEMkZFMDc0MkZGRTUKLToxMEJFNjAwMEQ5OTZGRUVGRkM5N0Y2M0ZBQ0M3RkM1N0M2RUFCRkZDN0QKLToxMEJFNzAwMEI5NkQzQjQzMjA2RjRBOUU3OUM4QzM2MDFGM0FBOUQ0NkQKLToxMEJFODAwMEE0RjgwMEVGNjU5QjU3N0E5MDBFNEUyODIxMEZEMkYzNEQKLToxMEJFOTAwMEM5QjAzQzNEMTYzREVDNDY3QTIwM0ZBMkRGMjVBMTVEQUUKLToxMEJFQTAwMDg1RkY4NEZFNEYzRDc1REY0Q0RDNjczRURCQUNFQTY0MEEKLToxMEJFQjAwMDJGNkRCMTQ3RUNDMEFGMTU4REM1MzNEODE4Q0ExRkUxM0YKLToxMEJFQzAwMEY5QkJDRkM4OTg2RkIyRDI2N0M5OTMwRkE1QTBGRjBENzkKLToxMEJFRDAwMDI4NDVEODEzMTFEMjk3MkFFQTNFQ0NDNTdEMjhDODNBMDYKLToxMEJFRTAwMDg5Q0ZBMkRCRTFGOEU3RkE5MDdDQ0NENzEyN0E5NkMzMkYKLToxMEJFRjAwMDNDNDlDRjBGMEFCODA0MUJFRjNCMjNBM0VGOTNCNTcyNjUKLToxMEJGMDAwMDNGNjg1NEZEMjJBMUZGRDREQkRDNDlDN0MwNzQ2MkRGNjcKLToxMEJGMTAwMDYxREY0MTc5NjlDMDgzODVCOUZFNTNCREY1RTEzMTQ3RTEKLToxMEJGMjAwMDYwM0U2RDc1QkZGMTQ4MjYzODE5N0M3NkI2NjFGRTJGRUMKLToxMEJGMzAwMDlFRjdGNjJFOEZEQjg1OUREN0REMkU0Q0VEQkM0RDQyNTYKLToxMEJGNDAwMDZGNkJFNjY5OTkxQUYxQTA1RTVDQjY0MUY1ODVFMDczMDYKLToxMEJGNTAwMEQ5QjY0RDRGM0M4QTc2RUFCQjc2REY3MEU4QkY3NERCMUEKLToxMEJGNjAwMDRCN0Y5ODAwRjlEMkVENkFEMjBDQkUwQzk3OTREMjhEMUIKLToxMEJGNzAwMDk3MjBGQ0JGNzQ2QzM3MUU0QTdFRjU5MkU2MURDREJGM0MKLToxMEJGODAwMEZGQjg0RjM3M0U0QUI3RUZEM0Q4RTg5RUYwOThEMkIwMEIKLToxMEJGOTAwMDRGNkI3NUM1QzA0QkMzOTE1Q0Q0QUZBQUI3N0VBRUExNDEKLToxMEJGQTAwMDNENzk3MkFGQzQ1MkQzNjNDMDczQzM0QkE0MjcyMDlDQTYKLToxMEJGQjAwMDA4OEYwMjRGNUQ3ODhCQUExRjA0QkNBMDNDMzdGMDE0OTkKLToxMEJGQzAwMDVERkU4MDkwM0ZEODlGNzcxNEQxRjNEM0NGQTM1RkY5NjQKLToxMEJGRDAwMDNEQkIwRkQ3NUZGNEY0RUQxRTVDQzc3MUE1OTJEM0Y1OUUKLToxMEJGRTAwMDYzMkI1M0ZDMzA2RTkxMUE0QUQxMjlFNURGOEIxRUZGN0IKLToxMEJGRjAwMDIxRDE1QkUxMUIzRjRDRTFGNkEwQkY5RjhERjZBNjUwMUYKLToxMEMwMDAwMDNGNUNERkMyRjUzN0QwRkEwQTU4ODBFOEFFRTgzMTM5MzQKLToxMEMwMTAwMDJGMENFOUE3MEE5QkJFM0QwNjVGNjRDODlDMkY4RTZGNUMKLToxMEMwMjAwMDA0ODUwQkQ2NzcxQ0VEMTJGNEIzRkU0RTBFNkYyNjdGRkYKLToxMEMwMzAwMEM4MjI4NkZDRkY0M0MzM0ZDRTE2NTNGRTUzMDdDNzkzNjcKLToxMEMwNDAwMDQzQjYwOUJFMDI2RENGNENBRjc1NzdCNzIwN0U0RTBENUIKLToxMEMwNTAwMEYyQTdBMjFGMkRDODk0OTA4MDg3RjQyNUY0MkJCRjMxM0UKLToxMEMwNjAwMDJEOTVFMzg3Nzk5NTZDRDEwRUY0ODAyOUY4MURFQkI3RjcKLToxMEMwNzAwMEE4N0VFNzE4NEIzQkY2NjU3QUY3Rjg0QkM0RjgzMEVGMkIKLToxMEMwODAwMDM4RENCRjhGQTdCMEEyODYxOEVCQkI1NTM2RjgxRUY2N0EKLToxMEMwOTAwMDcxMTM3RDk5Rjg5QkYzN0JERDNEOUNCRjBEN0UwRkNGMjcKLToxMEMwQTAwMDlBOEVFNTlGQkNDOUY5MDdEQkUxRkUwOEYzOEFBNDUyMkEKLToxMEMwQjAwMEY5QkVFQjI1OTIwNzc2MTY4OUM1RDc3NUFBRTA2QjZCOUEKLToxMEMwQzAwMEI5NDEyNzMwNkY0NTRBMzBEMTBCRjZERjg3RTA0RkZFOEMKLToxMEMwRDAwMEIzODI3NUQwQ0UyNDJGODMzODlFQTc2NzdGMDZERjE2RTQKLToxMEMwRTAwMDBBRkUxRjI1NUJGOTlGQURFNzdDREZCQjdFMTVBMjdEQjUKLToxMEMwRjAwMEFFNEMwRDNGRjEyOEYyMkJGMDY3Qzg4QkZDQUFFNkUxQUQKLToxMEMxMDAwMEJBNEZENzFGRjhDMzREQzBBN0E3MUIwQzNFQjVDQUNGNjcKLToxMEMxMTAwMDY4M0UyRDdBNzZCMzg0RjQxOUNEQTdBNzhCNDAxQjg5OEUKLToxMEMxMjAwMEM1QTdGMDNEMjY5RjE2QjVGRTNGOTU5RjA2RkNBRThGMzYKLToxMEMxMzAwMDgyOUYyMTBGN0I4MzYzQjQzQzNDNjNGMzEyM0NBM0U1RjUKLToxMEMxNDAwMDIxRkNCREM5QjI3QkQyOUY0MTc3MDZCRDk1RkNCMkZDRjQKLToxMEMxNTAwMDIyRjIxNzE4NzQ2OUQwNUQxNzVEMUE3NEQ3QzNGRjYyOTUKLToxMEMxNjAwMDgxNUY3NEY5NjBBNDA1QTA5M0JDNUQyQUQ5NTU2NUNEQTMKLToxMEMxNzAwMEZDM0MwQ0RBQkQzQzIwOEJFMEU0QTc2RDhDRDVCQzNDQ0MKLToxMEMxODAwMDIwQzk5QzBGNDdFNTFCQTJFQUZCQTNGMjc5NTFGNTAzRjYKLToxMEMxOTAwMDUxRjk0QTRCRkRCMkE2MDMxQTIzRkM0NzJDRjVFQzRCOTAKLToxMEMxQTAwMDFGNjUxRkM0QjA4NzhDRkQyNkQ4Nzg0NjBCMjE1RDBDMTcKLToxMEMxQjAwMEVDRDQ1MERFQTlDQjQxMDU0NUZGRTAxRTk5RUNDNTBFM0QKLToxMEMxQzAwMDgwRjEyQTE4QTdBMzNFM0QxQzAyQjlCMUQyQzlFREYwRjcKLToxMEMxRDAwMDBFQkREM0QzMDdEMjk1ODkzQ0RGOTlBQ0FENDJCOTY3ODgKLToxMEMxRTAwMDdDRUY3NDcyM0Y0NzQ3NUVBNzI3RDFFNEE3MzhEMjJDNzMKLToxMEMxRjAwMDkzREM2RTBEQjNFOUIxRkMyMEIwQTMxMERFNUI1OTZGODgKLToxMEMyMDAwMEU1RENGRjM5NEQ3NjBENUU4QUY2Njg4REVDNDMxMzc3RDkKLToxMEMyMTAwMEMxQjIxQjNERTgyQUU5NjgxRTdBQ0Q2Q0Y4QkVGMDU1MjQKLToxMEMyMjAwMDk5OEU1NTNBRTIzQzYzNzA1RTJDRTQ1N0ZBOTlFQzg5OUEKLToxMEMyMzAwMDEzMkNGNEIzODlFOENGNkNFNjc2QzU4MjM1NTFGQTA4NDEKLToxMEMyNDAwMDVCNDNGNDU0RTA1QUEyQTEzQzA1M0JFMDdEQUIzRjk3MzEKLToxMEMyNTAwMEYzNDU4OUU4QUY2OEJEQjVEQzY4OEYyNzVBNjhERjk1N0MKLToxMEMyNjAwMEQ0NTlDQjAzQzIzRURBNjVGMDQ5MDZDQjIwMzk4Mzg2MjgKLToxMEMyNzAwMDBGREFFNzQyMkU0RjkzNDc1RDMzMUJGMEQxNzE1MDY2QzIKLToxMEMyODAwMDc4OUU3OUI2NTkyNjdDOUNBREU3RTc5NzJDOTQ0Q0ZDQjgKLToxMEMyOTAwMDU2QzEzQTQ5MUUxQTcwNkE0MzdFRDI3QTk3NTc2RDNCNEYKLToxMEMyQTAwMEZFOUM3RDE3RDJDRENFM0Y4RUY5MzlBNDZEM0JERjFEQUMKLToxMEMyQjAwMEIxMUJGM0NGQkQzREY4OEZBQzY3RkQyOTdCOURFNDM3MDMKLToxMEMyQzAwMEVFRDhFQjI2N0FFRkQ4RjNEQkMxNzc2MTdFOTc5REZDNDEKLToxMEMyRDAwMDc1MUQ3QjNGMUY4M0Y0RDdCMURDNUU4NEYyQUU2MzEwMjMKLToxMEMyRTAwMEI3ODdBQUY3N0MzRUE2OTVGNkQ3MTU4NEI3QTNCMkM2NDIKLToxMEMyRjAwMEY1QTNFNkJGMUU5NjkyMzA4NTU1QTFERUIwMzc5RUY4QjUKLToxMEMzMDAwMDI5RjhCQzkzRkMwQjFEN0IzRUNGMEVCOEZFNzVFQkE5NDQKLToxMEMzMTAwMDEwRTczOTFENkUzNkZCNTk5QzVGMjJGNzgzMDc3NzhGMzQKLToxMEMzMjAwMERGQjQwQ0NGQTMxQkY3NjlGM0ExN0NDQTBCN0YxRjgzN0IKLToxMEMzMzAwMDcyQjRFMzU5QUUwRkI1QUJBRDhGRTM3OTQ1ODdGQ0UxM0QKLToxMEMzNDAwMDMyMTVFMERDOEU0Q0Q1OUZCMUZCOTQxMTkzNDNBMzYyNzAKLToxMEMzNTAwMEMxRTVFRkU0MzdCOTUwNzg2ODBBQjc0RkZGRkRFMTIxMzYKLToxMEMzNjAwMEY5QjlCQzczODcxRDEyQUVGQjhCQzM3RjQ0QjlCMEQ3M0MKLToxMEMzNzAwMDRFNzQ2OUFDRjc3NEMzMzJEMjU3Q0VCN0VFRTFDQTdGQzAKLToxMEMzODAwMDE3M0FCOEQwNzU0QjkxMEI1OUY3RDQ3RjczN0NGRjVBOEQKLToxMEMzOTAwMEY2RDJGQ0EyRjlBMDI3OURFRkI5ODNGMkRCREMzRTlBMkUKLToxMEMzQTAwMEVGMDVEMkZCODJGRjY5Nzg3RjE2RjBFRTM5RkZCQUFCNUEKLToxMEMzQjAwMEZGQ0REN0REM0JERTVGOUQyQkYwQUVFMzc5N0ZGMDg1Q0YKLToxMEMzQzAwMEJGRDNGQ0JFQUU5Q0RCRjRERjk0RUUwREJERkUxNTlCMkYKLToxMEMzRDAwMEY3Q0QwQ0E4M0Y5REQ1Qjg1MEIxQjhCMjdDRkZBQjE5RDIKLToxMEMzRTAwMDUwRkFDQUMwMDM4OTM4REZDOTUxRTczNzQ2RkFBNkMyRjYKLToxMEMzRjAwMEVEQTZDOTkyOERFQzQxOTYyODA5N0I5MERCNTEwMzg0MTAKLToxMEM0MDAwMEZFMzA2MDQ5MDFFOTIxMDMwNkRFQ0ZGNTA2QzVCQjBFMEIKLToxMEM0MTAwMENGMUY1RjE5M0NERjQ3QjExNDZDRUMzQjAxQ0NFQjk3QUQKLToxMEM0MjAwMDhCQkNENTlFRkNCOUM0RkM3ODM0M0E2MEYwRjcwRkEyRkYKLToxMEM0MzAwMDVFM0I3MEEwNEM3QTJGQTRBNEVGQkVFODk5Q0VCRjk3QzQKLToxMEM0NDAwMDY5MTZCQkU3NEFBRkQ1MEVDQTREQjJEQTRCNTM0NTdGRUEKLToxMEM0NTAwMEQzMTg5RkZGMzQ5NzE0MEUwMzFDMjYwRkZBNjkxMkZBQTMKLToxMEM0NjAwMDQ3MjcwRjU3OTkwNEY5NUMxNjU4ODFGNkM1NTQ5N0I1QkMKLToxMEM0NzAwMEJGMDYzQ0MzMTlGN0NERTE2ODU3MEQzODBFNTk5Nzg3QjEKLToxMEM0ODAwMDcwMUMyNDkzOUZGNEJDNzBDNDc5MTNEQzMyQzIxODJGNDMKLToxMEM0OTAwMEMzMTQxRjg3NjM5RjcyMUZGOTlEODVCRDRENDc0RDkwNDMKLToxMEM0QTAwMDU3NUNBQjVBOTA5RjE1QjQ5NzM5MUNDOENFMzZFQ0U1NTMKLToxMEM0QjAwMERFRTBDRDg0RkRBRDg4MjEwREY4MkIwMzY1QkZEM0RBMTYKLToxMEM0QzAwMDFGRDlERjA2NUVCRTJFM0UwQzNDN0U1M0JDQkMxQjg1RDYKLToxMEM0RDAwMDk3ODFBRTQ1MEFGMkVCNzRCNDE3RkE2MkZEMEM5RTFGMDkKLToxMEM0RTAwMDE4NTJFOERDNEREODBCNTc3ODE3MjlBNEY3MENDQzUwMUMKLToxMEM0RjAwMDEwNUY4NThFQTZBQkYwMUNDNEUxOTM2ODFFMTdCN0Q5RjgKLToxMEM1MDAwMDY4N0Y3MDY0NDkwNEY3OTFCNTBBRTVERkIwRTlFMzEwOEMKLToxMEM1MTAwMERGMzMyRjdCRUVGNDlEMENGREU2N0U4REM3M0RFNUYxMEMKLToxMEM1MjAwMEYzOEZCRjdERjlFNTQ0OEMxNzE0NzgyQzg0RkZBRjQ2NTgKLToxMEM1MzAwMDNGRkY3QTE2ODkwMzM4MkQ1NDU4MjhBMTBGRkFCRDI1REMKLToxMEM1NDAwMEY2QkVDNUVGNkRDREUzREY3NzUzQkFGQjM5NUZGRERFOTUKLToxMEM1NTAwMEU0Q0FCRjNBN0QwRUU0RDhGQjAwRjM1RDk4MEVBM0UxNzgKLToxMEM1NjAwMDE1QjM1REZEOUQ2NjBFQUZFMDIxMTYxRUMyRTMyQUU0MDEKLToxMEM1NzAwMDNDRDMzOUUxMUQ4MkZFOUZGQkQzQjM5OTY4RDc0RUVBQzUKLToxMEM1ODAwMDE4OTVDMEU1RUIzMEIyMTc4MkMyNUUzOENCQkMwOTNFQ0QKLToxMEM1OTAwMDE3Q0FEN0ExMDk3NEZFNzk1MDc2Qzc4QTJCREMyQUVDMUEKLToxMEM1QTAwMEVENUY2MjdDMDlBNDFENzVBQzQ2NDZGQjhENzU5MjFGM0MKLToxMEM1QjAwMDM3NTRFNzYwOUI2M0M0QjdFNEFCODY5RjRBRTAwREZFNDcKLToxMEM1QzAwMEU0NkMzQzhGRTFFMzJGODRBNjA5NjZCQ0I1Q0QzOEE5QTUKLToxMEM1RDAwMDhDRTk4OTA3RkM3QkRGNzQxRUY1NERFMThCRjYzREMyQ0IKLToxMEM1RTAwMDc3QUJCMzM1MzcyRjg2RkNCODVEQzA2RkU2RkUyRkM4M0EKLToxMEM1RjAwMEZGNzk2OUYzMDYxQkQyRUZBNTc1MzZDQkY5NkFBOTJBMzQKLToxMEM2MDAwMEVDQjFCMTZDMkNDRTZCRTY3RUE3M0IwQkYxNzI1MEY2MTEKLToxMEM2MTAwMDYxM0M2N0IwRjk4QzE2ODg3MTJFMTgwRDRGRUMxRkZEMjgKLToxMEM2MjAwMEU5NUI1NTlERjg2QkI3REEzMDFGRTFCQUZCMjMwNzQzOEUKLToxMEM2MzAwMDNCN0E5NzU2NTMxQTZCOUUwM0VDN0M5RTBCNTlDM0VEQzUKLToxMEM2NDAwMDYzRDJGRkZERTAzQkE5QzMxNTk5OENGNjY3MUQxMzdFRUQKLToxMEM2NTAwMDhGNjhGQTYzNDRDNzY3QjdCMDMwRUVBRjY4QUZBMjVDQ0IKLToxMEM2NjAwMDM4NUJDRjY4N0YwNzkwREM4Rjc2MzdGMEZCRjdDQzdFQTYKLToxMEM2NzAwMDlDOEI5QkI2RkYxMkY1ODI4QTY2NDlDNzIzODYwQUE1NjIKLToxMEM2ODAwMDU1NDMzRjZEQjAyOTUxQzY3RDM4QzM2QkM0QkJFQUEzODcKLToxMEM2OTAwMEFGMzdGMUM1NTY1NTIxRjgxRTk4QjBGQjY2MUNGN0UzN0QKLToxMEM2QTAwMDM2OERBMTlFRTI3RkIxRDM4M0ZCRjhDN0NEOTlDNDA3MzUKLToxMEM2QjAwMEJEQURFQjU3NTVFQ0FBQTk0ODM3MkE5Nzg3RDFGNDMwN0UKLToxMEM2QzAwMEFBM0VDRTkyQkY0QzBFRjQ0N0ZFOUE2OTZGNURFMjhCOTQKLToxMEM2RDAwMDgxQkZFRjZCOTIzODE3QkM0MEY5MTZGRUZGNENCRUJEMTAKLToxMEM2RTAwMDY5QzhCNzgwOUM2N0UyQTNCRTVBMEZGOTk2MUE0QkJFODEKLToxMEM2RjAwMDJEOTZCQ0E5MDhGN0M1N0I4NkE2MjI1RTE3QkZBQTI2ODEKLToxMEM3MDAwMEM3OTI2RkRCQUFGODM5RTczMzIyNEVCOUEzMTFFNERCRjUKLToxMEM3MTAwMEI3NERGMkFEMTFFNDVCOEM3ODkwQkY1RkE4N0MwQkZGNDYKLToxMEM3MjAwMEQ3RjBERjM2OTQ2RjMxRDZBQjZCNTZGOTM2QTZGOTA4RTEKLToxMEM3MzAwMEM5QjczMThEMzY0QjNDQUY1RDNCOUY3QzkzOTJBRjQ3ODEKLToxMEM3NDAwMEZERjhBMEVBOEI4RjQxM0ZEQjg0M0VGRThDODg0QkM0MTIKLToxMEM3NTAwMDcxNTBDRUU1NkEzQThEN0ZBMTcyRUVFMjBCOTU3M0ZGQzAKLToxMEM3NjAwMDQ1NzAzNkU0RENFMjFEOENFMjlDN0JEMjIxOTc3MzhCMTIKLToxMEM3NzAwMDc3ODE5QzkzOTAxRUI5OUM1QkJDODc3MUJGNUM5NDdDNTUKLToxMEM3ODAwMDFCRDk0M0JFMzFBQTVGMTFFMUVEODM0REU5MEZERjAyRjIKLToxMEM3OTAwMEZEOERGNUFCM0UwN0Q0MUZEQjJERUZDNjk5RTU1REFFRjEKLToxMEM3QTAwMEE2MTBEQzdBQzhCQjgzMTcyNkVGNzYwODc5MDc3MjZDNkYKLToxMEM3QjAwMDA4Q0FENzY4RkFGMDM1NUJFM0MxNzc4RjNGNUVGRjJCN0QKLToxMEM3QzAwMEU0OTdERkNBNzRERUY4ODY4RDlGMEZCRDM2RkU3ODE2QkIKLToxMEM3RDAwMEQyRDc2MzYyM0U4Qjg0REM2QkFGMEE1MUZGNTM1RUU0QjkKLToxMEM3RTAwMEVCMkI3N0YxMzhGMThBNDZBRTFGNTZENDRCNjEyRkZDMDQKLToxMEM3RjAwMDMzNzdDMjE3MUFDRUJGNzg4RkM0NTIyMTNGQ0JDRUVCMEUKLToxMEM4MDAwMEIzMjc4REYzMzIzNjIzQzM0NDBGMEI3MjRBQzlDRkJGMEYKLToxMEM4MTAwMDQwNjEwRUY0RTM5N0JBNzI0RkEyRkU1QjlBQzNGREZFMkQKLToxMEM4MjAwMEE1RTI3QkYxQUJBREFCRDBGRjVERkM4ODQ0RTdBNTQ2NEMKLToxMEM4MzAwMDdDQUIxMUU3REIyMzZFQTI3OTE5Rjk3N0EzRTMyNzY2QjYKLToxMEM4NDAwMDhBQjhBOTk5QkY5NEMyMUI2MkM0N0Y5NDZFQjFFNjdGNzcKLToxMEM4NTAwMDIyRjg2Rjk2REM0QUYwNjJBRkNCMzFFMzM4OEM3QTVEMTgKLToxMEM4NjAwMDcwM0EyOEUwNTQyN0QzN0VEQTA1Mjc4MDlCMzdCRDI3MEUKLToxMEM4NzAwMDlDMDBEMzMzMzI1MkJBRTE1MkZDNUI1ODZGNTZFRkVCNTcKLToxMEM4ODAwMDM1RTAxNkJENkVDMzdGNUQyQUZBRTkwRDBFMDY5QzdCNkUKLToxMEM4OTAwMEFDNUZDMDFERUMwMjkyOTNEMUYwNThBNzc1RjlCNTMzODcKLToxMEM4QTAwMDMxNEUwOUU4ODZFNDRDRThENzAwMTcxODJGNkZEMjcwOTQKLToxMEM4QjAwMENCN0Q5NzQ3MDVGRDY0RDY0QzlBODJFMTBDQjMzMEFFMzAKLToxMEM4QzAwMDFDQ0EwQjZBMTdCRERDMEZFMDMxRUUxREVGNThEQzRFQzEKLToxMEM4RDAwMDJGOUI2MDBGRTAzOUVDNTY2NzI3Qzk0MTgzMEVEQjM1OEIKLToxMEM4RTAwMEFFMDcxQzE0RjBEREREQkY3MjMyRDlGOTREOTI4RTdBOUQKLToxMEM4RjAwMDQ4MzBFMjI0QjgwNjAxQUU3OEZGMjhBODcwRkMwNjgxMTMKLToxMEM5MDAwMDFFOTFGRjBFM0NGMjE5ODdFMzFFQzk4QkZFOUQ1QzYzRUUKLToxMEM5MTAwMEJGNDJCQzQwRkRDQzY2OEU5NzYwNTgyMkJDNjRCMTRFQ0QKLToxMEM5MjAwMDNBN0ZBOUE4OTU3QzExODQ1RkQzMDY4MjlGMjE5RkUxNUQKLToxMEM5MzAwMENGNjVDNjkzODk3RTk1NThGNDRCOTU0Q0ZCNjVBOUE4QTUKLToxMEM5NDAwMDM3RDM1RUYzMDdBNEU3OTk0RkFBNkMwMzgxMUJGRUZCNjQKLToxMEM5NTAwMDJBN0EzRTRGMUM1MDM0OUVEQTA0QkNCNjIxM0M1RDA4NTYKLToxMEM5NjAwMEI3NEVBRTc3NDVCRUEwRkI1MDQ2Nzk1MDA5NTlFMDM5MjUKLToxMEM5NzAwMEU1RDE3MzVGMDlBRjcxMDZCQzkwOEU1MUJFMzVFN0NCMzAKLToxMEM5ODAwMDk4MkY2ODkyNThERkY0OUVFQkM1RjM1MDMzQkYxN0VGMzIKLToxMEM5OTAwMDM5QzJGQjdGNENGMkIxMThFQkJFNjBCQUVFODU5RThCQkMKLToxMEM5QTAwMDgwNkVGMUJDQTQzN0JBOEU4NjUzM0JEMkYzQjdCQUU5OTYKLToxMEM5QjAwMEY5MzU2N0U3QTE0Q0E0RTczRDEyRjc0MzM0Mjc1QUNFNzcKLToxMEM5QzAwMDM1M0Q3NjFFRjdCNUQ1MDk3NDBGRUJFRTdDNTVGNTZENDgKLToxMEM5RDAwMEY0QzY5MENCODJFRUQxN0UzMERGMzdCQjA0MTc4MkYxRjQKLToxMEM5RTAwMEEyNUIxQzE0RUY0N0YzMThDMkY1NTNCMzdDREVFNjY0NzgKLToxMEM5RjAwMEM5RDc2N0Y1REVCRkRCMkVDNThDMjczN0Y0MjMyMzNGNkQKLToxMENBMDAwMDFBQzdDM0Y4RjkyNjE4NkY2NEY3NzhEMUZCODNFMTJGQjIKLToxMENBMTAwMDM4REZCQUZBREJCRkQ5QkE4QzcxQkU2RTNDNTQ5MEI1MjAKLToxMENBMjAwMDEwNUU4REI4QTgyMzUyRTA0NzJBRUE3M0QzMjU0QkZDNDkKLToxMENBMzAwMDE1Q0M1Q0M4QUQ2RkRDN0ZBQTk2REM3QkZGMkM0REE3QzQKLToxMENBNDAwMEZCNzRCN0VCQzY3NzlERTgzMzRGNjdFMjdDNkZFMkRCQTAKLToxMENBNTAwMEI4RUY3RkVDRTdFNzk4NTkzNkY2RDY0NERDM0YyNkFCRDMKLToxMENBNjAwMDBDRTlFQUUzNDMyQUY5QTEzRjlFQ0FFMzZFQUZGOUVENzAKLToxMENBNzAwMDAxMDU1RDNFRDdGMDk4Mzg3NkNEMzg4OUVDQUMzN0IwRkIKLToxMENBODAwMEVCRjFBODg3M0I5ODdGMDRDMTJGMTNFRkVENjVENEQ1NTgKLToxMENBOTAwMDRDRjEwMjVGOEZERDEyQUVDNkQ0MzdBNTMzRTkzNUM0NDEKLToxMENBQTAwMERCMjQ5OTIxREU1QUZDN0RBN0I4MjA3RkZCODcyQzAzNkQKLToxMENBQjAwMDVEQTBBMDFGNTBGQkIxMDc1OTMyRDY5QkUwNEYyNjMzMzMKLToxMENBQzAwMDY2N0NFMzI3NkY1RTA3RjMxODdGNDhGNjc5QTFERUFDM0EKLToxMENBRDAwMDAzMkUxNzAzN0Q3QUU0N0ExQjBCOThFMDM1ODE4NUFCMzIKLToxMENBRTAwMEQxREYzNEZFQThGRjNBOUM3NzExRTgzQjc4NEZBNEE4MjkKLToxMENBRjAwMDc5NDNCNTA3RjNFQjI1NkExRjBDMDU3MjNEQjA5RTZEQjcKLToxMENCMDAwMEI1Njc3MkJGODU3MjAxRUE2MTM3QzFGNUJDNUVCMDRFOTAKLToxMENCMTAwMEYyNjE4ODcyNDFGMzVBOEEyRjJBQTg5M0U4NDJFMUI2NUIKLToxMENCMjAwMEIwQzQxQ0JDREZCMDAzRkFEREI2MUVEQTY3RTFGRTA1NTcKLToxMENCMzAwMEVEQjFERkJBMzM2RjVFODc3MjA3RTY0OUVERUJGOUI5MDUKLToxMENCNDAwMDdDMDFCNEYzMjJCRkQ0MkRBMkZFOEFENzRCMENFRkIzRTUKLToxMENCNTAwMDE0RDVGMzdEQTlFODkwRUFDM0YyQzY3RDhGRDA3RTNCNjEKLToxMENCNjAwMDAzQzZFQjk3OEVGQjUwNjQyQUREMEJDQTk0NzRCQTJGNzAKLToxMENCNzAwMDE5MUE0Q0Y4RUI2MDFDN0Y2Q0ZBMjBGMjBCNTJCQ0FCMUMKLToxMENCODAwMDk3QzBBMDk4RTM2M0ZFNjQxRjQyRjJCM0MwQjc0Q0VCQkEKLToxMENCOTAwMDBCRkRCQzk2OTM5QzZFMjNCQTNBNDNFN0VENDcwMURFNEEKLToxMENCQTAwMDAxODBGNzFCMjI1RUU1NDBDRTA3NUFBQjY5NUZGQ0MyRUQKLToxMENCQjAwMDNFOTQ5RjlCMzQ0REEyMzg4RTg1MkM4RkUyMzg2NjhFMzIKLToxMENCQzAwMEU3RkFFNkVCOTczQkMzRThFNzdCNURFRDFDODhERjBGRjgKLToxMENCRDAwMDVDNkVBN0VGRUREQkI4MUM2RTFGRDQ0QUZFRjZFM0VCRUMKLToxMENCRTAwMDU1ODZGNzU4QUFEN0NCMjQyRjhFRDdBQjc0M0Y1NjdFRTUKLToxMENCRjAwMDhDQzczMTE0NkVFM0ZBQzc4MUY1QkNERkUzQThCN0UxNTcKLToxMENDMDAwMEI5MDc5NjQzQkU3MEFCMTFFN0MwRTVCNDYxN0YxNkU4ODMKLToxMENDMTAwMDNDRkVDMjkwQkJFNTYyREQzREY2QTE3NUNCMzQyNEQ5NjQKLToxMENDMjAwMDY4Nzk1QjJFRTQ3MTA5OEI5MEJEMUMyRDc3Q0JGMTFDQ0MKLToxMENDMzAwMEREODM3QzE5MUQyN0U2RUFCNjYzOTAwRTIyNUYxMDVENDYKLToxMENDNDAwMDU3MUM1MjE5REEzMUQyMDc2REI5MTQ5N0I2NDdBMjczM0YKLToxMENDNTAwMDhCRjFDRDkyMUZFMzFBOEFERUIxODc0OUZGMEVFN0NGMzEKLToxMENDNjAwMEZCMTFFRTJGRUZEQTE5ODYyQzFGNDMzQzgwOUNDQUIxRDIKLToxMENDNzAwMDc3RkVFOUE3RjBGREU0MUIwRThDMDgwMkJBQzkyN0I4QkQKLToxMENDODAwMDFCNzFCRTU5OUI3OTNDNEZENjFCRUI1MkYwM0UyRjlCM0MKLToxMENDOTAwMERBOTdFNDQwNjFBRENDMDIyNjM5NzE1MkYyNUY3NzEzMjYKLToxMENDQTAwMERGMUY3NEQ0NzcwQzdDNjY2OTM1MDVCOEJGN0VDQkMxQjUKLToxMENDQjAwMEY3NTVFRjY2MTU2MzY0RDhFRjg0M0QwNEY2ODExRkY1RTAKLToxMENDQzAwMDlCRTI1RDZCNTMzNDEzMUQxNEVGNTk5QjIyQzNGNzU1NDAKLToxMENDRDAwMDIyMUVBNjFBRjc1NzY4NTdBQ0YxNzE4QUY3NEFGQTA2NkUKLToxMENDRTAwMEQzMzg0NjNGNDZCRkRBMkVERTZFRTgxRTlFRjZENjdGNkMKLToxMENDRjAwMDMxQ0U4RkQ2RjlBOTg2RjIyMkJBOUYxRUUzRjdEMjRGMjIKLToxMENEMDAwMENFRUZDRkFEOTM2MDVFMzlBRkNCMTRBQzlFRjNDMThDNDgKLToxMENEMTAwMEExRTY3MzFEMjMzNUZDQ0FEOTZGREE5OERGMDRCRjlDRTYKLToxMENEMjAwMDNGQzUzMUJGMDlERjhERTM4MEVGMDE3RjU3Mzc0OTYxOTAKLToxMENEMzAwMEE3ODRGOTIzNUE3OTE2RTU3NUU0RjMwQUUxN0ZBRTk4RTIKLToxMENENDAwMENBQ0ZFQjFBMzNERTU4ODE3QzNGMjM0QjIyN0E2MEExOTUKLToxMENENTAwMDgwRDYzNzg5RjQzNTJGRkFGRDBCQjM3OEZCNDI2ODhGMDQKLToxMENENjAwMEZDRDhGODA4RTc0RjkwMTM1RTk0MjMxNUVCRDdFNjUyRjIKLToxMENENzAwMEZEM0FDOThCRkQzNzZFQzgyNzdEQTQyODQ3NjY1NDVFRUYKLToxMENEODAwMDc3ODRGNEEzQTJBNjIzNDlDOEM3QzBCN0VCNTAxRkE4NTUKLToxMENEOTAwMDk4NjhENzUxOEUxQkZDNjhGMEY3RUJFMjNFMkI3M0U4RTYKLToxMENEQTAwMEEzRjE3RUM2RkY0NkU2OEJDMUQ3RjIyMTJFRDc4M0Y1Q0QKLToxMENEQjAwMDlDMUY4MzM5OUM1RjVGREZBNkUyMEEyRjg0QkY4OTlGOTcKLToxMENEQzAwMDhGNkZFMUZDMkEzRjc2NDMyRURFODcyRkRDQ0NFRkMzNEEKLToxMENERDAwMDFGNTgzRjQ1NDM3REZBNzg1OEEyRkRBNjI3N0Y3M0JEQjMKLToxMENERTAwMDM1OUFCRkFCMjVCRUVGN0Q1REZERDJFMDZGODM4RkUxNEQKLToxMENERjAwMEVGNkExQ0FGMENGODE0RUY0RjQ2RjNGNTRDQjVFMTBGOUEKLToxMENFMDAwMEI3QzM3Q0FGNzkxQUQ2MDNGMzlERjJERDNCM0RBRDI2NjcKLToxMENFMTAwMDM5MDlGOTE0Q0MxNzI4M0M5RUNCOTAyQkU1MEE4RkZCREYKLToxMENFMjAwMEZCREFGMzhCMUEzRjZDQjdGQTQ3N0U2NzRGRTRGMUVCRkUKLToxMENFMzAwMDc1MkFEMUZERjlGOEIzMDc5RjVEMjA3RjVFMjg1RjlEQkQKLToxMENFNDAwMDhGM0Y4REYxRTUzREQ2N0U3RTI3RTgyREJBQkY3NjgwRjcKLToxMENFNTAwMDZCMDRFMEZBNEFGRDI2OEFGM0ZERThBOTIzMzMxMTNGNkIKLToxMENFNjAwMEE1QkI4MUNFOTFCRUVBREQyQzgyNzI0RTA5RDM3RTU1RTAKLToxMENFNzAwMEQyMjhEMzNEMDFBNjQ0QjJBRjczOUJGOTk4Qzc2RDk1RjQKLToxMENFODAwMDNFRTMyNjdBMkE3OUQ2MUU5RTAxRUQ0Qjc2N0UzMDg2QzkKLToxMENFOTAwMEUyNjg5Njc3NTI1QzVBRTgyOUExMkY4NzVBQzcyMDFGNkIKLToxMENFQTAwMDk0MjgzQzdFMkM1QTJFMDQxQ0RDMEZEN0I2MkI3RTM2RTEKLToxMENFQjAwMEFFNEZEQUMyREY4RjI4NjlCODUxQjU5QkNFMjU2RTc0QUMKLToxMENFQzAwMEE4NDYzRDNBRDcwRDAxMURFM0ZENUQ5QzlGRjlERDAyQUIKLToxMENFRDAwMDIzNkVBQzZEMkI5NzEzMjU0RDJBRDk4MTI1NUJCNkI3RjAKLToxMENFRTAwMDYzRkM3MEM5M0I3NkYyNzcwNUI3OUNBMUZCMTA1MzlFOUIKLToxMENFRjAwMEQ5NDZGRTk0NjA5MzZDMzk3RkVCMTFCN0I5NDU4RUQ4NTMKLToxMENGMDAwMDMxRUVCMEIxOUNDRTFEMjE3Rjg0RjIwREIxRTM5N0NGRkQKLToxMENGMTAwMDE3NUY1OEZBQ0M5RTlEMjEwMDYxRTlBRjlFRjRBMDdDN0EKLToxMENGMjAwMDM5RDVCMkQ5ODM3MDg3N0VCRjMyNkVCQTQ3OUM2NkMzNEIKLToxMENGMzAwMDNENUYxOUE3NzkwQUZGMDE4QzczOEY0M0Q4MzU0NjlDNTIKLToxMENGNDAwMEVCOTZCRUE0NDdDMkZDQjJGMzYyOUM3Mzc0RTlFNURCQzYKLToxMENGNTAwMDNFN0QxQ0VGMTFCNDNEN0JGQTcxOUM2RkQ5M0YzRTdFNDQKLToxMENGNjAwMDFDRTNDMUQ4NUUyN0VENzdDMUE3REVBMjM4NkNBM0REMzQKLToxMENGNzAwMDI2QjFERkI1NkY3RDkyRTJEN0RCREZCNUZCQjBCN0Y2NDgKLToxMENGODAwMDNEQzcwNzYzM0M2MEZCRjYyRjUyRDA2RkI5NjRDRjM0QzYKLToxMENGOTAwMEYyRUIyRUQ5MzEyNTk1QzVEODJGOEMxNEU5MzY3QzAxQkEKLToxMENGQTAwMEYxRjNEMUY4M0FEMDc4ODBFMkQ2M0UwMjdDQTNGQ0VCRDQKLToxMENGQjAwMDhBQkI2RDI4RTc3MUNDNUUxMTZGNUIxRkZCOUU0MjhGQjEKLToxMENGQzAwMEY4REFDNkVCQUVCOTFDRTU3RTIzRDcxRkNGMUI2N0ZCOTMKLToxMENGRDAwMDI2RTBGMURCMTc4MEJGN0FDMzJGMTAxQjdGMUZFMTNGRDQKLToxMENGRTAwMDAwNEZGQkEyRjBGNzY5RTNDMjVGM0M4QTY1OEQ3RDdCNTEKLToxMENGRjAwMDhEQjM4RDVDMDBEQzhDN0IxMDBGMzhGQzg3MUNDOTg4REUKLToxMEQwMDAwMEU3NUY1MjVDMzNFMjZEODYxN0Y3OUY0RjA3RTNGRDkxQjAKLToxMEQwMTAwMDEzNkFFNzVDQkE1RkI4QzdBRTYzQkM2OEM5OUVCNzg5REMKLToxMEQwMjAwMDdGREE3N0JDNDE3RTY4MjZFRTIzQjRCM0FFM0YxRTNGNjUKLToxMEQwMzAwMDJFODk3NUQ2Qjk3OTdDQUU4MDNGQzZFRjdBM0RGNDVEMTYKLToxMEQwNDAwMEM0RTk3MjNBMzZFMjc3N0I4QkRCOTU5RDVDQ0YzNkVFOTYKLToxMEQwNTAwMDY3OTREN0ZENTFDNEMzNzZFMzRCQ0E0MTNDMURGOUNBNUUKLToxMEQwNjAwMDc4NjgwMzBFQkE5MEMzREQ3MUU4QjFFM0EzQkJFRTJCODEKLToxMEQwNzAwMDA4N0MyMUZFNzAxRkVBOEEzMzg3RkNDMEIxRTQzNzdBNEUKLToxMEQwODAwMDlCQzU5MDA3RUQxQjc4RkM3QUJCMUFGQjVFQjAxMTk3MkQKLToxMEQwOTAwMEZFOEY2ODNFMEQ1RjU4M0NGQUY5RTZGRjc1RTFEMzgxREIKLToxMEQwQTAwMENBNEY3MjRGMzhCNUZEMkRCNjFDNEY3NzRBREZFQzlFNDQKLToxMEQwQjAwMDYxOTkxNDdENkZDQUVCMUM4NzcxM0I0NzM0QjQ4M0JCMDUKLToxMEQwQzAwMEVDNkNCMURFMzZFMTU3NkY3QjRBQTY3OEU1NTUwRDA3NkIKLToxMEQwRDAwMDQ4OEU0N0NCOEIwQTdDMkYyNUM2N0MzM0M1N0MyQjlBODgKLToxMEQwRTAwMEY4M0VEMUY2QUMzQkVDODI3RURBRjZFRjIyN0FBRUE4QkYKLToxMEQwRjAwMDNGNDJGMUQyMkY2RkY5OTVENjZBOEE4QkMwN0QyMjZDQTAKLToxMEQxMDAwMDlBN0ZEQkQzRkJDNjkwREMxNkVGQjI0NDhGMzM0OThDOTkKLToxMEQxMTAwMDEzNkM4RTNENEVCMEZFOEM2NTlDRDI1MDgzQTZCQkNFNjgKLToxMEQxMjAwMDNGREUyOUM1N0YyM0Y2NzdBQTg1RUI4M0E3MUFFNEU5QkEKLToxMEQxMzAwMEUxMThFMzBGNzNBQUQ2NzdBMTYwQkZBNEY3NjdEQ0ZDMDAKLToxMEQxNDAwMEJEMTlEOTEzNDdGQUU1MTI3N0NFM0IwOTQ5OTg2QTE0RkQKLToxMEQxNTAwMEFGNTVCRDRDQzQ3N0ZEODcyRjBERjE1REVEQkU4QUUxNjMKLToxMEQxNjAwMDdDNTcyMjdDNEQ3RTFFNTUwRjMwRDQ0QkQ1QjRCQzJDNDEKLToxMEQxNzAwMEY0MkI0NENCMUIyREM5QzZDMjI2RkMyRjcxNEY0RkY1OTMKLToxMEQxODAwMEQyNzk0NzY0MjBFMkYzNzBDNjcxMTVGQkZENEI5NDlGODIKLToxMEQxOTAwMEVBMkYwQTVCOTUwQUYzRkI0QjQ4RjIyRDgzN0VEOURGMTkKLToxMEQxQTAwMDNFMTg5NEU3RUVEOTdGOTcxRUYxNjNEOUUyNTdBQUIwRjMKLToxMEQxQjAwMDc3MUU0NkJCODRCREUwQTRGODA2NzlBRjkzREVGOTA4N0MKLToxMEQxQzAwMDNFRUVBNEY1MUVEOEYxRjkxM0E0NUZGRkMyQ0VGOEI5NjQKLToxMEQxRDAwMDBGNTgyRjIwQUYwQTc1REVDN0YxMUQ5RjNGRkU1N0Q0QjEKLToxMEQxRTAwMDlGQjEzMThDNUZGODM4RDQ0N0JCQTEzRTlFRUM5QzhFM0EKLToxMEQxRjAwMDY3MTNDNkEwNUZBNEYwODVCQjY2QTIzQzJCOENFN0Y0NDYKLToxMEQyMDAwMDU4Rjg0QzZBQjgxQUZBM0I5NkNDRjNDN0I2MERBMjc3MTkKLToxMEQyMTAwMDI1NEE5Rjc1NTNEQ0U4ODExRENGNTVFMEJFRDRGRTRDRjYKLToxMEQyMjAwMDNDQzM3REE5RkQwNUExRTdGRjUyQkM1MzU1QUI3QUNEQTgKLToxMEQyMzAwMEYxRTNDNTRDRjE5QUVGRjM5NDYyREUxMkFGQzRDODJGNEMKLToxMEQyNDAwMDQxN0M4NEZFQUFBNjA0QkEwNzA0RkFBRkE1OUY4RkQ0MzYKLToxMEQyNTAwMENFM0I3QzQ0QzdBMUZFRkNGRTUzQTQzRkNBODNFODdBQzAKLToxMEQyNjAwMDQ2RjlCRENFMjFFMjVFMzlCNDczNzVENzBGNkE5RDA1Q0MKLToxMEQyNzAwMDNDNUZEMzlGQ0I5MzE2QUFGRkIwNTNGODhGNDU3OUNGNkQKLToxMEQyODAwMDdFNzlGRDg3ODRGQ0VFRUU4N0I3QUYxMEVGRDA0NEQzRjQKLToxMEQyOTAwMEVGNDZEMTZGRTk5NkJGNUYxQ0VCOUQ5NTE4RjNBN0VGQTIKLToxMEQyQTAwMDNGOTQ1OEM4ODY3QUNBNzYyN0JEN0Y4NUVGMjhFMDdERUYKLToxMEQyQjAwMDg1OUQxQTNGRDcyQUYzNDRFODlEOUJERDQyMUU5N0M1MDIKLToxMEQyQzAwMDQ1RThERDlERkU2MjFFNTgxRkYzQ0NEMUZBMzRCRDlGQTgKLToxMEQyRDAwMEY2OUM5MzYxNUM1OUY5MEI2RTNGRTJCQjdDRTdFN0M3QjQKLToxMEQyRTAwMDdFOUU4NTcxODlGMTE0MTc1RkZFQzJGRjIyM0EyOEI3MkUKLToxMEQyRjAwMDQ3RTYyMjNGNzQ2RUI3QjM4REM4RTdEQjVGMUQ4Q0ZDMzkKLToxMEQzMDAwMERBQTY0NjA2RjdGOThBRjNCQUYyMDZCQkY1RkVCRjU4NkQKLToxMEQzMTAwMEM3QTlBQURBQ0JGMEJFQkI3MUFGQjZBNDE3MzlGMzU3RDEKLToxMEQzMjAwMDI3RDdBMzVGNzFGQTVGNzIxMkJGNUJERjczM0E1NTM1N0YKLToxMEQzMzAwMDNCMTNERjU5MzBFQTk3Mzg2MkNCQzU3NzUxNUU3QzEzRDcKLToxMEQzNDAwMDM5RUVFQTcxM0ZGNTVEOUNDRjQ3QUMyNTA1RkQzRTE1RjIKLToxMEQzNTAwMEEwNzdBMzNDMkZEOTkyM0UxMEZEMDRGQjlEQzYzQjA0NTEKLToxMEQzNjAwMERFMDREQzhGRjZBQjVFQjJBNzMxMzVFRjMzMjdBQTdDNDMKLToxMEQzNzAwMDk5Q0EzMEY0REY4Q0NDNTQ2MDFEMUQxQkNFMTRGNDY3QTkKLToxMEQzODAwMDE4NDdFQTlDMUQ0QkVFOUQ3NkM2RDMzQTRBMUNGNjk4ODgKLToxMEQzOTAwMEY3OURDRjA5QkE3QTBGOERGRTY0M0UxRUYyODczMUVFRkIKLToxMEQzQTAwMDdFMzU0QzcyRjg4RTM4MkZENTJCMDFCQjA4QkY5NzZFOTcKLToxMEQzQjAwMDk5OTM2OTc5N0Y0NUE5QTE3QUMwQTcwNENGNjJCNjRFMzcKLToxMEQzQzAwMENCMzJDOTZGNjNCQ0UyQTU1OTk5NEEyNjdFNTdGRTRGRkUKLToxMEQzRDAwMDE3QkRDQURENzg2NkExMjREMjBCMTUwMTYzQjZBRTlGRDYKLToxMEQzRTAwMEU1N0U4OEEyRTYzOTEwN0UxQUNCRDMxNTE5NDlBNTg2QTkKLToxMEQzRjAwMEY4M0Q4RTM1NTBFQTAyNzU4QkJGNTM1NkM5NTA0RTlFOEMKLToxMEQ0MDAwMDEwRTdGNkU4RUZDMkI0MUI1RTc3OTJEQzBGMEQ2MjZDOUEKLToxMEQ0MTAwMDc4M0FCRTA3RTE0REQwNERGMDUzRjExMDFFRTY2MzU3NDgKLToxMEQ0MjAwMDJBMTk5NzE3MzM3NEI0OTNBNTUwODA3RDA5RjQ1NDVEN0QKLToxMEQ0MzAwMDM1M0QxM0U5MTFGRUZDMTgwNzQ5QTYwN0NDQ0ZBM0JGNjEKLToxMEQ0NDAwMEZDMDVFQTQxNDBBN0ZDM0RCRkVGQjI3MDM1ODAxOEMzMzAKLToxMEQ0NTAwMDgxQzlBRjNBOTlGMTc3RTg1NkJGQzNDQ0Y2QzZBNTcxM0EKLToxMEQ0NjAwMDkyNzhFNzY4MUZDOTMxMTdFQkZFRUI4NDNDOEE1NTk0MkMKLToxMEQ0NzAwMEI3RDUwOUZGQzhDMTczNDQ5N0NFMjJBODE3QzZCQjU4QjkKLToxMEQ0ODAwMDI0MUU1MkQ3MjhFNTk0OTlGRjNENTk5MDM3RDFBOTNFRTMKLToxMEQ0OTAwMEQxNUExRUNEMTcyMEQ3QTJDNjZEMjBGODQxQkY5RjQ0OTgKLToxMEQ0QTAwMEY1RkI0OTU0QkY5RjdDNTVCRjA2OUM4MjhFOEQzRTdDMDgKLToxMEQ0QjAwMEE3NjI2NTU1OUU4MDFCMUZDRjIxRTAwNkYwMTk4OUVGRkEKLToxMEQ0QzAwMEU4MzE1QjlDNEY5Qzg3MTM1Q0UzQzQ2Q0VDNTgxRkYwMDUKLToxMEQ0RDAwMDVBMUU5NzRFNzhCOTJGNjE2RjI3QzY0MUIzQTQ1QTg2NUEKLToxMEQ0RTAwMDc2RUYwQTg5RUZEM0YwOTdFNzMyQjU2M0JBODNGOEYwQTUKLToxMEQ0RjAwMDFFMzE0RUI5ODBGMzBBQzMzRkQ1QTNCRTkzRjRBRjFFQ0QKLToxMEQ1MDAwMEY1OURCREQ1OEY4QjVEREZERERCN0NFMjYzQ0YyN0IxODEKLToxMEQ1MTAwMDk3RkU2QkUyNjNGNkZGNzVFNTUyQzUwQjZGQkY4NkU3QkEKLToxMEQ1MjAwMEI2NURGMjQ5MDdEMDVCRjVDQ0YyMzhENDMzMTM4RkZERUEKLToxMEQ1MzAwMEEzOTVCRTcwM0REMzMxRDA4QUVGMzhBNDZGQTBCN0I4QTEKLToxMEQ1NDAwMDYxRDZFRkQxNzREMjFCN0RFNThCNzU0MERFRDUwRkUwM0YKLToxMEQ1NTAwMDcwOTMxODdGNkExRDNGRjdCRTY1MDlGN0QzODE3OUU4OUMKLToxMEQ1NjAwMEM3RkEzNzhCRkEzNzM5MEFDOURGNzBDNEM2REZCRkJBQ0EKLToxMEQ1NzAwMEE1OTZFQjkxQjdGQzU4QTZGM0U5MUVFRjUxRTEzRjgwNjkKLToxMEQ1ODAwMERGNkU1RDJBODUyM0U5QjFERUQ3NjI3NTc4M0Y2RTlFMzYKLToxMEQ1OTAwMDE4M0ZGQUJEQUEwMEYzRTZBRTk2NjNCRDU3QzVFOUQyQkYKLToxMEQ1QTAwMEI4NTcxN0ZENEVDNTAyOTYyN0RFMjFCMzdFM0ZFQkQ0NTgKLToxMEQ1QjAwMEJCRTQ2N0NEQThFRTdEMkNCNDE2RTgxRUY1NEZBMDdCMkEKLToxMEQ1QzAwMDNDOTdDN0VCNjIxNDE3RTJEMTc4NUM0OENCMjAzQTRGMDYKLToxMEQ1RDAwMDMzRTRERkQ5OTFERTA0RENBRjk5N0YzMEZGQUVGM0VGQTcKLToxMEQ1RTAwMDhCQUZGNEE2OUFFRjFEMkFFN0UyMkNFRkY1NTRBQkJFMDEKLToxMEQ1RjAwMDM0OTQ2RkVBMzlEMDVGQzE1NEQ2Q0UwRDYxNUU1MzM5OTEKLToxMEQ2MDAwMEU4QURDNEZDMThCRTQ5NzIyQTREMDlBMzVDNTRGNDNDMzEKLToxMEQ2MTAwMDU2ODg3QUFGNzhFRkMzQThBRjI1NURENUE1NjdCRTBFNTMKLToxMEQ2MjAwMEZGNkY4RTRCMjZCRTVDQkNENjRCRjdCNjNGOEJDRkRCNzUKLToxMEQ2MzAwMDg5RjQyNDdCNzI3QzAxNTc0RjdBMDhFREUwRUJBRUM2OEIKLToxMEQ2NDAwMDc1QTdGNzVDNEZCNUU2RjM5MUJFN0QxNTgwODBGQzZGNDIKLToxMEQ2NTAwMDNFMDdDRTRGQjY3QkRGRjZFMkZDN0VBMzMyRjRCQkY0OEUKLToxMEQ2NjAwMDg0OEZFRjQ0MThDQUNGODYwNzUwN0M4ODlDMzA2MzA0QUYKLToxMEQ2NzAwMDhFQkY0NkJDNkZCQUJBNkEyNEE1MkJBQTk4NDg3OUJDNUIKLToxMEQ2ODAwMERDOEEyQUFGNDg3MzQ0RUExN0U5NzRBQTc3NkY1NTFBRkYKLToxMEQ2OTAwMEU1NTc1NUY5MjgzNUUwRUJGMEQ1RDBGQjkzOEU2MTdDNEEKLToxMEQ2QTAwMDdDODcyRUYwOTc2NDEzRjAwQjkwRkVFNTQ4QUJBNDczRDMKLToxMEQ2QjAwMDQ1QTc1RTE5QzE3N0RGRDg0MEQ4Nzc3MDU5N0EwREMxNzgKLToxMEQ2QzAwMDU3RDMxOUY5MzVBMTNFRTVFRDk4ODc1NEFEOUQ0MUY4NDIKLToxMEQ2RDAwMDUyRjQ0QTU2MDhFNTZGQzUwNzhFMjI1QzlEREU0QjJEM0QKLToxMEQ2RTAwMEVGNUFEQUQzQzY0NkJEN0YxQTA1NkY4M0RFQjY3MUI4MkUKLToxMEQ2RjAwMERGMkY3MTdBOEI4NkZCRkQ2QThCMTdFMzIyRUVCRkIyQjgKLToxMEQ3MDAwMEVCNUQyOTgyM0I5ODQzMUNFRUJGRTZFN0I0M0RFMURFQ0EKLToxMEQ3MTAwMDMyN0JCRTA5RUVFRUVDRTkwNEY3RkIwNDlDRUYxNjcwRDkKLToxMEQ3MjAwMEFEMTY3OEE4MTZGMEFDNDZCODUzN0VBNEM4RkI0NDNBQjAKLToxMEQ3MzAwMDlERDI3QkM0RkJCNzJCMTExRjkwQ0EwODc3ODA4NzdERDEKLToxMEQ3NDAwMDU0ODhDOTMwMUVCQTc5RjFDRkVFMTI3NEFCREJDODFGMTIKLToxMEQ3NTAwMDJBQkJGMkZDMDg3NzdCMTI4N0JCQzMwNTc4MjBCQTA2ODgKLToxMEQ3NjAwMEI4N0JCMTNDNDRGMDU0NUQxQ0NFNTA5RkUzNDFFNDE1QkUKLToxMEQ3NzAwMDg0N0IyNjdFRTdGODAwQjhGNzhEMUY4N0YyNzA4MjA1NUMKLToxMEQ3ODAwMENFNUFEMkU0MEI4M0ZCMjM3QzdGNEIxMjdDMUUwREJGNTEKLToxMEQ3OTAwMDI0OERCRkFGNkJGMDc3NkZGQTcxQjU4OEI3QUUxNkVGMTcKLToxMEQ3QTAwMDI3MjIxQzUxQUY3OTA4RTBDMzM0MEU0RkZFN0RBNEM4NzgKLToxMEQ3QjAwMEZCMjg0RDE2RjY3RjM1RTAwMUNCMUYxNkZBMTBDMjE5NzMKLToxMEQ3QzAwMEQzMUZDNTczRkIzQ0M5NTZCOTRGNDUzOEY1RTFFRkYyOUQKLToxMEQ3RDAwMEIwQTQxMDFCOThDRDc4NjgyRkZFQTU4NTk4MTdGM0M2QzYKLToxMEQ3RTAwMEY5QUZENzRBM0ZCMkFFNDRCRDAzRTk3RDE4RTk2REREMUMKLToxMEQ3RjAwMEFCQUEwRENGM0ZFNEE1NTc1OUVFNjdDQkIzRkQ4OTVFQzkKLToxMEQ4MDAwMDgyN0Y0MDQyQkRFNjNFQzE4NzZCOTE1RTY4N0VEQzFFMzIKLToxMEQ4MTAwMDVFMjlFOEUwNkVGMUZFRUUzRDgyN0VFRTE3RkNGQ0EwOTQKLToxMEQ4MjAwMDQxMzczRTdFM0Y2NENENzQxRUM3OTg5NDYxMTNFRjIwNEMKLToxMEQ4MzAwMDQ2OTgzOTRFMzBEMUQ3QzAzNDk4MTdEOTM2NUU0QUU5NjgKLToxMEQ4NDAwMDlENEJGNjhFOURGODM2N0UxNEYzMjM3RDI1QkU3MzY3QkYKLToxMEQ4NTAwMDk4QkY0MzlCRDcwRkY1QTE0NEUzREREOTg5REVDNDM5RDYKLToxMEQ4NjAwMDc0MzEzREEyODhGNzIwNjU2RTRGQjZDNDdDREZCNURBMEYKLToxMEQ4NzAwMEI3REY4MTdFOTlERUU2MTNFRkYzQTdBRjg0RjFFMjZCQTkKLToxMEQ4ODAwMERENjQ0N0Y1MERFNENENTkwODc5NTcyREQ4NTUwQ0NCRkIKLToxMEQ4OTAwMEI5N0M3MEMxQkMwQjRERjQxMURGOEI1RjQ3NzU1RDU5Q0UKLToxMEQ4QTAwMDgwRjQ0QUY2MzhBNDNGQTkxREVBNDRGODAyQUNCREU4NkEKLToxMEQ4QjAwMEJGN0E0OENERUI4N0ZCQzE0Mzg5QjFGRDcwQjNFMkI5QjQKLToxMEQ4QzAwMEJGQzQ5Mzc1QTlDNTlGQjA0RUY1NTMzQjdEQTI1NURFRUQKLToxMEQ4RDAwMEFDMTNGQjQzOUZBOTU2RkUzMEY2ODNDQjQ0N0Y5RkM1MTQKLToxMEQ4RTAwMDA3N0UxNDBGNzQ5NjcyNkUyQUM5Q0ZBNDZCNjNFRjBGNzQKLToxMEQ4RjAwMEQ1QUExNkMyRjczOUFBNDc3M0JFMEVFNTZCNUM2RkVFNjgKLToxMEQ5MDAwMDIxNzcxODlEODM5QzBEOENEODg4RkUyRjgzQkU5NjMzN0IKLToxMEQ5MTAwMDJFRTc0MjhDRUI5M0M2QkE3RTg2RjQzRTAyRjcwMTlENTkKLToxMEQ5MjAwMEU4MUVGNzAxQ0NDQkMzMzRBMjlCOTQ1QjZDRTQ3RjU4MTgKLToxMEQ5MzAwMDI1RjhFQzVFQzE1RjZCMDQ1RjNEODA3QzM1MDJERjgxQzIKLToxMEQ5NDAwMEY2NTFGQTEzQzE0RkVCOTBGRjIwREQxMjlGQ0VGNTc4MTAKLToxMEQ5NTAwMEYxQkU5NzYxQzcyQzc3OENBNUY3MUNBQjVEMzZEQTBGNEIKLToxMEQ5NjAwMDk0NzdFRDYxMTdEQTA1RkJDNkVCRThGNzkxREQ1OTdBOUMKLToxMEQ5NzAwMEMwOERFNTU5MEUzRkMwNDM0QUNDRDI5MTVFM0U3MzJGMTUKLToxMEQ5ODAwMEI4RThBQkUyNUIwMUZERjRBRUIwQTI3MjdGQTQ5RTk0NTYKLToxMEQ5OTAwMEM3REUxRjQ1QTc1M0Y0OUU4MEFBNUZDQkQwM0ZGRDcwMjIKLToxMEQ5QTAwMDUyQTUxM0UxRkM3MDNDOEZEM0FBQ0RDRjI2QjgwMzNFMUQKLToxMEQ5QjAwMEI2QzU5QkUyQTU1MjY3NUZENUY1MUUxRjc2RkY3MDJGOTcKLToxMEQ5QzAwMEVGMTJFQzEyRjI4MjBEMENCMTYxMjZGOTUwMkJERTdCQzYKLToxMEQ5RDAwMDY0REUxMDFCNjk5MjEzQ0I4N0U3MzJGNEVCRjU5NDBGRUEKLToxMEQ5RTAwMEJEQzhDQkNENUM1RUFFOTA2MkNCNEI0MzdGMzdFNDY1NjgKLToxMEQ5RjAwMEI0NUMzMUQyOTUxNzREQjdEQ0E3NTQ1RDNFNDZGMjY2NTQKLToxMERBMDAwMDY0NkNGRkMxRUZFM0VERkMxRDZBRTZGM0U1QTdGNzJDQkMKLToxMERBMTAwMDA3NzhGRERFMEMyRkQ0ODMwQzdGQzVGNzYyQUMyNzVBNDQKLToxMERBMjAwMDNFOUVCOENBRDg1NzAzRjQzRUQwMDJDREZCRjBGOEFGMDMKLToxMERBMzAwMERDNTdBREZCNDFFMUI5RDVBNDBGMTQ5Q0NCQTFCNEE4MzAKLToxMERBNDAwMDc2M0FGMTExQzNEMzE4OTM5RDdDN0NGRDBGM0Q4OERGOUUKLToxMERBNTAwMEUzQjVFMjdDN0NCRDFBQzZCOEE0N0QxQkVGN0E2MDBFRUMKLToxMERBNjAwMEMwNzVDMUUzMzI5RDhGRTMzRDBERDkxNERGQzJCMkJDNTYKLToxMERBNzAwMEE0QTcxQkVGMjMxRTBGREZFRTMxQzczMTE0RkNENEU5M0UKLToxMERBODAwMDQ3RkRCRjM3N0EyQzU4MUZEQjdGNTM4REZGNDRCQjgzODQKLToxMERBOTAwMEY5NDZBMjVEMDFGQTVENjcwNEY1QkY5RjM4RTlERDE4MUMKLToxMERBQTAwMDIzMUZEQTE4RUYzM0M3OEYxOEU5NUJGMUQzQ0UyMURDREYKLToxMERBQjAwMERGOEFGNzMzMTdEMjlEQUIwRjlERDdGNENFMTc3Q0RDRUUKLToxMERBQzAwMDYzRTgzM0M3NzNEMjQ3NDU5QzM1QzA3RDk2QzU3RkNBOEUKLToxMERBRDAwMENGNDk4RjA5N0YxODczRjQ1MjFFMjdDQUJEQkQ5NDdCQUUKLToxMERBRTAwMDc4M0MxM0QzNjM5N0ZGRDM3RUE0NTEzREVDQjQyMUI4QTcKLToxMERBRjAwMEZFRjJEQUQzQUJERUE1MkZENkYzODA2MjExQzdCRDYwOEMKLToxMERCMDAwMDYzN0M3ODc5MENCRTU5MjBFRTA3MkYxMEU3NUQwNjdEMDcKLToxMERCMTAwMDE1N0ZERkQwQjMzOTVENDZEM0FERjRENDI1NDRBNzFGQkMKLToxMERCMjAwMDFGNTRDOTVGNUIwMUY0ODc3QTk4RjRENDc4N0E4RjY5QkYKLToxMERCMzAwMEQ5MTM5NzNENzgwQkMwRjk5MzQzMzI5NTk3OUQ3MzEwOTUKLToxMERCNDAwMDVEQjZGRjg3OEZFMkZDM0I3RkFCRDJFRjI2N0M3MjcwMjUKLToxMERCNTAwMDFBQzVFQkI3OEJGNzlFQkJGOENFQzVFRERBMUI1QzVDNDQKLToxMERCNjAwMEFFMTQ5Q0JCOTdFOEJCOEJBRUMyRjMzNUU0REI4MjczOEIKLToxMERCNzAwMDBGOTA1RTU2ODBFRkJENEVDMDc1OEY3ODc5OTIyMkU4ODcKLToxMERCODAwMDc3MDJCNjFGOTJCQjFDRUExNUI2NzIzRTYxMTM0MzE1QUQKLToxMERCOTAwMEU0OEZERTEwRUZCQjM3MDYzRkRGRTBGMjVBRTI0NTBCQzEKLToxMERCQTAwMDVCRDc1MEZGMENGNEMzMjQ1MzVDQzgwMkYxRkIwNzg1MUMKLToxMERCQjAwMDc4Qjg4NEU1N0E4OEE1MjFERjA4RjlENjRERkZENjc3QjUKLToxMERCQzAwMEIwREI5REQ2NzUxQUU5QzJBRTc1NEVCMEQ4NjFEREVCRkIKLToxMERCRDAwMEZDMkVFNzczQTE2RjE0QjZFNkYwNzk3NUFERTdFN0UzQzUKLToxMERCRTAwMDYzQURBNzdCMUQxM0E5N0Q3QjYyRUNGMUVGMTdFMzFGRUIKLToxMERCRjAwMEFCMkFDMjlCNUJBQzQ0QkNCNzVCMTBCRTVEQzNGN0Q1MjAKLToxMERDMDAwMDBBRDYyN0Y2OTE0Q0VCMkFBQzJEQjVDNDJCMTVENEU2RDkKLToxMERDMTAwMEQzRkI3QTg1RUJGM0I1REI0Q0ZCNTMxNzVFNDJGRTk3RTMKLToxMERDMjAwMDI3MERFQkM2Q0JGRDZCMkUyM0JDQThBRUJDM0I5MTdFNzMKLToxMERDMzAwMDhGM0Q1NTdDQzc3QjVFRUM5N0UzRTk4NDE2MUE1MzQ5MDgKLToxMERDNDAwMEYyRUE3NjRGQUNGQjRERjc0N0UzQTk1NkUwMDlFQzgwQ0EKLToxMERDNTAwMDJDMTM5RTBDRkM0NEI3M0ZCNkI5RkM4RUY3RjAxQ0UyQzcKLToxMERDNjAwMDExRkU5QTUwRUZGMjJCMEE3RkU5QjFFMUY3QTRBMEQ3OTkKLToxMERDNzAwMDYzQTAwRjA0MkUwODdFREZCMkM0Q0JGNTBBM0Y4MTZGOEMKLToxMERDODAwMDAzM0VDNjc3RDBFN0MyMDhCNzI3OTEzNzkzQjEzRjRFMUUKLToxMERDOTAwMDBGRTc4MzVCRjdGODgyMUUyNkM1NUVDRjZCNURFQjU5RkQKLToxMERDQTAwMENBNDJBMEM3OUNENEI4M0VEMUZCN0FFRTYyMjFDNzA1MTgKLToxMERDQjAwMEFDQTc4QjRGRjMyRDdDRkFEQTlBNUIzODlGMEFGQzlGNTYKLToxMERDQzAwMERDN0YwRkQxRjVCMTcwQkMwRkUzNTQ3QTVCQ0Y2QjQ4QUEKLToxMERDRDAwMDA3RTM2MkQwQzFCMDEwMUI5NUZEN0Y4RjBFNEU2OEZFMkEKLToxMERDRTAwMDExOEZFMDNFMDJGQjE1RUVEM0M1NEZERTNGQzYzQ0JGQjEKLToxMERDRjAwMEI3RTIyN0ZEOUVGNkE1OUEwQjNCQTcwRTRERjYxREY0NDUKLToxMEREMDAwMEQyN0UyN0ZCQUE2MTQ5NDM1RDgxM0Y2M0ZCMTJDRkEzMEIKLToxMEREMTAwMDlGQTE5RjZFNDVFMkNGQzZDNEQyOEI1NzU2MDUyRUM3MzIKLToxMEREMjAwMEYzOEJFQUFBQTJDQkQxOEZBQTBBM0Q5N0ExOUU5QkNFRTQKLToxMEREMzAwMDdGMTcyM0Q2N0I3RENDQ0RGMUJCQjJBQTkyQ0UzRjk4ODQKLToxMERENDAwMDIzQzRGNDk0RUU3NzAwRDg4OTRDRjI0NzJCMkVBQjdFOTcKLToxMERENTAwMEE2QTkwMTFERkRERjlBNzhBNzQwNTUwMkFCRDNCM0QwMjkKLToxMERENjAwMDVGOTQ5NDExMzJDMUVGMUYyRTdFRUVCMjI2NkRCRjhFRUUKLToxMERENzAwMEU3MUE3NkU4MUZGRDYwOEU4MUNBNTk4QkZGRUM0NTY1NzYKLToxMEREODAwMDQxNUZDMDkzRjExQzczMUM2QkYwNEIxMkY5MTNDRjQ2MkIKLToxMEREOTAwMEY5MTNDRjVBRTY5MTA0RjNGRTBBM0I1QjcxNzhFODFDNTUKLToxMEREQTAwMDUyNjFDMjhGMkNFMDAxNUY2ODFGQkI1QkU3RUI1QzFFMUEKLToxMEREQjAwMEVGMjE3RDYwRDU0NTM2QjJFQkQ2MDlGRkY0Q0ZEMDJGRTkKLToxMEREQzAwMDRENzA1MUU4QkMwMUMzRTBCMEJFOTZDMEQ3RTFDNDczNEEKLToxMERERDAwMDBDMTlFREFEMDhFNURERjg2Mjk3NEM0RjFGNEE5ODRGREUKLToxMERERTAwMDY0NUUwOUYzN0Q1OTY0MTVEQTBGMUQ5MzVBRUYyMDNGRTUKLToxMERERjAwMEEwMzM5MEU2MDZCQzdFRDZBRkU1QjA4NEU3MTI3OTgxMDkKLToxMERFMDAwMDhCMTFDRUI1NzIyOEMzMEJGNTdGMjE3NzY2NjBCREMxM0IKLToxMERFMTAwMDUwRjQ0RTFGOUU1RTg0RjcxMjAyQTZGM0NFMjFCNDhFRkMKLToxMERFMjAwMEVFQkNEQzMzN0ZEMTUyMjVFQUZDRUY2RjE3OUJDQjVGNTIKLToxMERFMzAwMDcxRkEyRkM2Nzk1NDNCRjlGQjYwNDkxRjQ4NzRCRTU3RUQKLToxMERFNDAwMERENzVFRTk0NDdGQkYyNjQzN0M3MjNEMTA1RDJENTQxODcKLToxMERFNTAwMEFFMzc5RDU1QkMwOTdEQzg5RjNEMzJGMzQ1Q0IzQzdDMTgKLToxMERFNjAwMDk2QkMyMkVDRDEzQUEwNTMzQ0E3MzJFODYzOThFMkI3QzMKLToxMERFNzAwMDIxMUQwREFGODFFRjY2M0NDNkQwNzdGQkI4RTg3OUYwODUKLToxMERFODAwMDk4RkFCOTMxM0YxODk3RTg1NTNFOTdDQkY3RTMyODdBQ0YKLToxMERFOTAwMEQ4MkRGMUY5ODc4QUVEREM2RTY0MjExOUYxM0FDNzIwOUIKLToxMERFQTAwMDNDNjUwNUNGMjczMkUzOEZFQ0I1Nzc4RDczMjdCNjgyQkIKLToxMERFQjAwMEU3NzU5RTBCREVDNkNGQjlBM0U3MzNBN0Y5RUUxNjNDOTQKLToxMERFQzAwMEVGOTlEM0RDNkYzRTlFN0JDRTI5QkFGODQzNEM3N0FCRkIKLToxMERFRDAwMDlERkJFMzUxNUVGQzUwMjI3REY2QTZCNzVFNTRFMzIxMjQKLToxMERFRTAwMERERjFFNjQ2N0E5RjYwQUU5QkVGQkY3MzU5QTc4QUY4RDMKLToxMERFRjAwMDBGMzA1REUzRTc1NjYxNUFERjZEQ0MyN0YyMEQyQUZBNDkKLToxMERGMDAwMDFENkU4OTg0NkZCODFBNzJCN0JFMThCRTFBRDVCREI5MTYKLToxMERGMTAwMDA3M0I1RjQyQjQwNTFBRjQ1QzNBMUIzMkRBMzVGOTVFMEUKLToxMERGMjAwMEU2NzlERUFFMEIwRTRFRjFGQjQ3OEE4M0Q2RDVCRDZFODkKLToxMERGMzAwMDA3QzFDMTU4MjdENDI0N0M3NEMxNDlCQ0NGNjZDMEE1OTEKLToxMERGNDAwMDZCRERGMTM3NUY4NUZFRjhERUU0REMxQ0M3RTgwRjc5OTYKLToxMERGNTAwMDlDM0M5RjU3MzQ5QzNFQzEyMjkwOTMwQkRERkUxRkI5MjEKLToxMERGNjAwMEExRkM3QUI3RkYyRTRDQ0IxQzlEODM5NTIxQzQzNzU1NUQKLToxMERGNzAwMDk4QUY5MDAzMTdBNTAwMUMzRTFBMTRCODM4MTlFMUQxQzgKLToxMERGODAwMEQyRjc4MkY0RkVDMzRFMkUwRjBFQTcxQjdBNkRBQjFCODkKLToxMERGOTAwMEU5OUJCREM4RjU1QUUzRjczMjU2RUQzODdFRkY4RDAwOTgKLToxMERGQTAwMDlGOEY1RUU1RUZDRDk1Q0JERTZCRUUyMkZGQjJDQzYyQUMKLToxMERGQjAwMEQ5MjE0NjdBNThGODBEMUU3NkRCQzQ3QkQxN0M5REYzQkYKLToxMERGQzAwMDE0MEVFRjc5OERGMTc0Q0Y2RURFNTJEOUYyQkVGREJDMjYKLToxMERGRDAwMEE1M0M3RTk1MjkyRDYzQUVCN0Q4MDkyQjA0NURGN0VDREYKLToxMERGRTAwMDA3RkQxQUQxRkRDQzVGM0E5OURFMkREOUE5RTk5M0M4NzYKLToxMERGRjAwMENGRjEzOEE3QjNGOTUzRkQzMkM2RkQ0RjU4MkQ5MTFGMEQKLToxMEUwMDAwMDY5RkM1MTZGNTMyQkU0RTc4NzEzN0RDOEFFRjNFRjVDRDcKLToxMEUwMTAwMDlDODlFRjk3NTRCNDcwM0Y2N0FBQkMyOEUzM0YyMDdERUEKLToxMEUwMjAwMDY4M0ZERkVGMzFCRjA4RTFFNEYyN0I1REE2RjM5QTM2OEIKLToxMEUwMzAwMEI1MzI0MzQ3N0FCRUQ1RTU0Nzc5OTA3RkJERkY1REM0RDEKLToxMEUwNDAwMEE3RTFFNzMwRjZEREU3NDAwRkMwMzhDRUZDNUJCQzM5MTYKLToxMEUwNTAwMDQ4MUZGOTBENEUzRkE1MEVBNkM0ODE1Q0NCNTc5ODAzMEYKLToxMEUwNjAwMEQzNTQ4RDI5NEU0Q0UzOTgwM0QzRUNFNTQyN0ZBQTlEMEYKLToxMEUwNzAwMDQ1RkE4MzI3Mjc0RkMzRjdDNEYzOUI5RkZDMTREQjE3OTQKLToxMEUwODAwMDJBOTE3RDkyODk5RUYyOUI1RkZEODJFRUMzRjlGMzI4NkYKLToxMEUwOTAwMDRFRjc1QjVCMzQ4QkREMzlCQUMxOUFGRjc2OTMzNTlGQkYKLToxMEUwQTAwMDExQjFFNjMzMEY1QUYzMDM3MDZEMjY3RDczRkYxRTFFMDgKLToxMEUwQjAwMDlGNTI3QTlBREZFRjdEMUU2MEEwMjIzQ0I2RDk0OTNFN0UKLToxMEUwQzAwMDRFMjk2RENFQzY3ODg3RDM0RkJCNkQ1OEJFRkJFRkRDQjMKLToxMEUwRDAwMEVFRUVEQ0VBQTQ3NzI1RjdCRDE3QzdFMjkyRjAxRDZBRTEKLToxMEUwRTAwMEU3NDYyQzNGMURENzkwOERGRTQ1QTg0RjcxNEJCMEJCMjYKLToxMEUwRjAwMDhFNDBCQjcxRTdBNTA2QkQ4NjI5QkU2OUU3M0ZGOEZERTYKLToxMEUxMDAwMDk0Q0VBREY2MzBDNjUxOUNERUY1RTREMzQ4OUZBN0I3NTgKLToxMEUxMTAwMDBFMjA3REVDNzkyOTY0QzM3RTQzRjc3MEZDNEY4OEYzQjEKLToxMEUxMjAwMDU4RTQ1NEU5MTZBQjNEN0U0MkU4MDExRDI3QjU3OUU4NzUKLToxMEUxMzAwMDE3QkFCOEQ2QkFFRTRCQzJENjdDQTdBODdGMUIzMzdERTAKLToxMEUxNDAwMDRGQzdGODEwRUZBQTM0REM2NzM3QzU3RUJGRkQ3M0MxMzcKLToxMEUxNTAwMDE3NEYzREE1MTk3NDJCOEJGNzFFOTkzN0E1RkJCRUUyMEYKLToxMEUxNjAwMEVFRUU3M0RCMjUwMzgwOEU0QTExMTY0M0JBQkY5NzQ2NDUKLToxMEUxNzAwMDhEREI4NTBGRDE3RjkyMzgyRkVCRkNBRDRDRjAzOTU1RkMKLToxMEUxODAwMDU1NjQ4OUVGRThEMkZCQUE3QzY5NTM0REZCNTE0MUVEMDAKLToxMEUxOTAwMEJFOTQ3Q0QyNTdGN0E1REM2NkRBNjdDQUI2MUU0OEI5Q0EKLToxMEUxQTAwMDE5RkE2QkRCQTJEMEVGRUI5NUNENzlFMjgxMDk0OUY4NDIKLToxMEUxQjAwMDVENkVDMEY5NjIzOUZBRTdEQTFBNUVGMjYwM0REMDhCMjMKLToxMEUxQzAwMEM3OUFFM0JEMEE2QkM3QTU0RDM1RjFFOUQ3QTU0QjgzQzcKLToxMEUxRDAwMDlGQ0E3NDBFOUZFNzcyNUE3MkYxMUU0NjY5MkRGRjFEODkKLToxMEUxRTAwMEJFRDI4NjFCQUVCQjFBRTFCRTlFREY0RkNGNTY1ODlFRjUKLToxMEUxRjAwMDBDRkM1M0I2RkQ4NkVGOEY4NkVGQzFDN0M2Rjk3MDNFQTMKLToxMEUyMDAwMEQ5RjgyNDJEREVCQkFEM0Y0M0Y3NzZFRUI1NzFGRjQ0NjAKLToxMEUyMTAwMDM0NUM0NjdCMzg3RUVGRkQ4MUFCMDhFNTEyRjRGN0EyNTMKLToxMEUyMjAwMDZEMkNCNTNGNjgwMzdERTRDNEU0RDA2QjM3NDM5NUQzRDAKLToxMEUyMzAwMEFDRTEwRjU3NTM1Qzk2OTU5RTgwM0UyNUQ0QjczQTM3OTQKLToxMEUyNDAwMDRCQkU4REY0NzU3OUY2QjVBODVBRkI5NzUxM0MzQTk0QkMKLToxMEUyNTAwMEM3QjQzNzhBQzNENjdFQTJGMTdDQTU0NzMyN0VGNzY4NjEKLToxMEUyNjAwMEE0OTk1RUEyRUJGNTlEMTFBMkRGQjcyQTVCMEE3MkNEREQKLToxMEUyNzAwMEE0RUY5NzFEQURBMTc4RDhFODcxQzgxOTY4OEEzQkMxOTEKLToxMEUyODAwMEZERDE0QjdDRUMxNDdBMDI5MzFDRDkyMjVFN0MyOENGMDIKLToxMEUyOTAwMEQzQkJBNzQ4OTc0MDEwQTU5N0IyQTk1RTg0RUJCNTZDOTUKLToxMEUyQTAwMDNBQTZDRjRCOTEwNzY0OTlDQjAzRjIzMzZEOEIyNzc5NTQKLToxMEUyQjAwMEQwQTZCNzNFRjE3M0E0QTNGQUQxNzQxRUQ2NUZEQ0VGRUIKLToxMEUyQzAwMDZFRjM0NkU4QkQ1OEUzNzc3MURBNzQ5RTJGNjk3NjUyOTMKLToxMEUyRDAwMDNDRDVFOThGMzQ5Mjk3Q0IzMDhFMTNFQjNGRURCNEQ5MTgKLToxMEUyRTAwMDQwNUYzQkJEQkRFRjY0OEMwQjZFNkJFMEVGOEE5RjZBQjUKLToxMEUyRjAwMEU4M0I1OUZCOEFGRDM3OUFFRjhEN0RGMTA4RkUxM0RGNkQKLToxMEUzMDAwMDRGRjVGODhCM0RCOERGQUNFMDcxRDNBOTdEMkIzMzJBRjQKLToxMEUzMTAwMDYzRTBDOTY4OTdBNDU1NjZBMEJERDI3OUFCQ0JCNzkxMkQKLToxMEUzMjAwMEVCNTNFOTBBRjlEREQzQzhBRjkyMkZGQzQ5RjdFOTc5M0QKLToxMEUzMzAwMDc3NzhBMEJFMUJFQUZBRTFGRjNFMDdFNThERTg3N0ZDOUYKLToxMEUzNDAwMDQwRjZEREExMEZFRDNFMUY1RjkwMTVBMEZCRTNGNDAzNDcKLToxMEUzNTAwMDM2MzBGRTdDODU0NTE0QTBCN0Y5QjhBRjhDQTEzQ0M5MTYKLToxMEUzNjAwMENGRjlFQjI1OEEyMzVDQjBDNkJBMUU3Q0U3REFCQzFGNjYKLToxMEUzNzAwMDE2RTEyRjI5MEVDNUI4QjAwNjRBOEJENjVCQ0I4QjcxNDAKLToxMEUzODAwMEZGRjA1MEJDMTdDNUNCOTRENDU5Q0IxOThCOTAxRkFENUYKLToxMEUzOTAwMEFDRkU0QjdCMkNCODdEQ0E4Q0Y1Rjk2QjNDMTZCOUEzNEYKLToxMEUzQTAwMDkyRENGOTUwQ0VBM0Y1OTVBMjM3MDBEMjlCQzRGRTFDOTcKLToxMEUzQjAwMEJDMzMyNzZEMDFBNDFENEIyN0E0MkRDOEM0N0JFRTdDNjQKLToxMEUzQzAwMDFGMjNEMzhFRjg5OEJGOEY1NzNBOTU0NTA2RjE3NzcxODIKLToxMEUzRDAwMDE4RUU4RkE1Q0Q1MjY0MzRFNjFEMkNFNDE5Q0JCRkUzQjMKLToxMEUzRTAwMEZCMjBCODZFRjMzRDMxNjNEREI4NUVGMzc3RjYyNkM3RTgKLToxMEUzRjAwMEFCNzFDRjEwRDc2QjJFMkYxMzcwMjhBQkI3NUJGQzNBRTUKLToxMEU0MDAwMDEzRUFBNTkwRkJEQjc4N0ZBOTk1REE1NTM0N0U2OUI3Q0UKLToxMEU0MTAwMEY0MkJGNjVGRDhCNzk5MTNGMDM1QTE2ODgzOEM4Qjc5MEMKLToxMEU0MjAwMEE4NEI4RTg3MkY4OTc1MEZFNUIwODBERjQzMzcxNEY0MzIKLToxMEU0MzAwMDQzN0U3RDEwRjVDRkZFMDJDMDM5MjQ5Rjg0OUY4MDQ1MjYKLToxMEU0NDAwMDFDMzA1RTVDNjY1NzlFQ0FCMzk3RjNGQzNFNEZFMDhBNzEKLToxMEU0NTAwMERBODE2MEFGQTkwMTNBODc5QTJGRTdCRDhDRjcxQjQ3OTUKLToxMEU0NjAwMDI2MDY1RTQyQkNDQ0I3RjkwNzJCQzRCN0ZFMTFFNDE3RjEKLToxMEU0NzAwMDVEQ0FFMUYwRjBEOENBNEIyQTYzRDlDNTAyQkYzRjkzMDkKLToxMEU0ODAwMDFBRTg1QzNFQjQ4QkVGQTNFRUFDNEVENUVDRjdGRThCRjYKLToxMEU0OTAwMDkwNDcwOUZCNUJFOTVFNEZFNzBFODlFRTEzM0YyMjFEQjMKLToxMEU0QTAwMEExRkJCNjhGNUNFOTY1NjhDN0E3MDE5RTUwRUUzRTIyQ0UKLToxMEU0QjAwMEIxMTVGODVFNUU1NkUzQUM0NTJGMjE5RUIzRTI3Qzc4NDEKLToxMEU0QzAwMERFNUZERTM4NDkyRTc3RDFGQUI5QkUxNTVGQjkwMUNGQ0MKLToxMEU0RDAwMDgzNTJFNzhEMUM4Qjc0MEVFQjlFNzcyRDdDRkZEMEUzNkYKLToxMEU0RTAwMEE1RjFGQUI5MzhERUQzOTY4N0QyMTc4RkMyRjFGMzE2QTkKLToxMEU0RjAwMEJEODQ3QzM4M0E4RUVFQTFBNzAyQUNEQzdEMjg1RDhEMTAKLToxMEU1MDAwMDdBNTQxQUNCRDg4N0ZBNjBEQTBDRUY1OEY0QjkzRkU0QTIKLToxMEU1MTAwMEUxRTMyNERCRTQ3OUIzNTBDRjFCQ0JGMzdEN0UyQ0Y5MTAKLToxMEU1MjAwMDM3MTIxMUFFQTU3MTUyRUQ2QzNBQ0UxN0JGQTM1RUU4NUIKLToxMEU1MzAwMDQwM0Y4MkNCODRFRjI5OTUxOTM4N0VFQTUwOUUyNjY5QTgKLToxMEU1NDAwMDExOEEwRjNDNjRFMEJEOTlDN0U5MkREMTE5QzlFOTI1QUQKLToxMEU1NTAwMDVGNEM0QTQ1M0JFRTUwMUIxOEQ0MjBCRjBFMEQzNEVDRTcKLToxMEU1NjAwMENDODg4QkY0RjA2MTIzNzk3RDYxRjcyREM5RTBGNzVGRUEKLToxMEU1NzAwMDkyMDYxQkZBMEZBRkQ3QTFGQTEzMzI1MUFFQkVDMUY1MDYKLToxMEU1ODAwMEYxNEY1QzdFRjI1NzVGQTZDNThFQkY0RjQ4RTA3ODBBMTgKLToxMEU1OTAwMDlFOEI2MzYxOTNGRjM4MzhGQjMzRDIxMzgzRTczQzJDQTcKLToxMEU1QTAwMDZDREEyN0YwQkQ0RDczMUM3NzU5RDE3RUZBMUQ4NDcyNDkKLToxMEU1QjAwMEQ2NDJGNzAxQ0ExQkFDNzFFNzk3QzVDNTFFRDdBMEYzQjkKLToxMEU1QzAwMEUwMzkxQjBCRjUyNTMyMUU4OEY2RDcyMUE5NzNENUMyNzkKLToxMEU1RDAwMDI0QkExNzRCRTczQkMxNzMxQTBCOTlDNjBGOUVFQjYzMjYKLToxMEU1RTAwMENENzdDRDMzODVGQUU5QUVDN0FDRjU5QTNFQTc3QTJDNDQKLToxMEU1RjAwMEE3RDU4M0UzQjRFQkFEQjQ4RjA0Q0YyOUQ0Q0VEODZGQzUKLToxMEU2MDAwMDNBQzJCNjkwMEFGQ0RDRUVFNUU1MURFMjNDQ0ZBODZGMEQKLToxMEU2MTAwMEY0RDczRTVCMTNGN0RFRjhCQkU4NkQ1NTIwNzgwMDJFOEIKLToxMEU2MjAwMDhGMzY5RjIxN0Y3NDU5RjMzRTgyOEI0MTBGRERGMDg5MzUKLToxMEU2MzAwMDY3MjExMzdDNTJBQTVCMjIzNkUwRUQ2OTBGNkVCODdCMkUKLToxMEU2NDAwMDE0RDg5MEM5RkIwNTFGODczNkRERUQ5RjA4RTVGOEJCQTAKLToxMEU2NTAwMDBGMjZCRThFQ0ZFQUUyNzMxMjMzMEZEOTY0MkUxNzQyMTMKLToxMEU2NjAwMDc1Nzc0RjlENjhDQThCRkE1REVENDM5QkFGOTgwQTM0NkUKLToxMEU2NzAwMDk1MzU4QUI3QkZFNkMxMjc1RTU5NEU0RThCMUExMURGMUEKLToxMEU2ODAwMERGMzkzOENGNkRDQTNCQTJGMjJFQzg4RjM2RTVGNUE4MjgKLToxMEU2OTAwMEYyQTRBOEYyQjRBOEZDNDA1RUJGQ0QxRDE5MkNGQjQwMkIKLToxMEU2QTAwMERFM0ZGOEQ0MTVGOEZCOUU2REZEMjI3M0YxMDU4RjM1MjIKLToxMEU2QjAwMEYyQjYyQkYwRjc3Q0NCQjNGOEVGRDM1NjM0NEIzRUM5MTAKLToxMEU2QzAwMDI0M0YyQkJBQ0VGMzVCQjVGOUEzMTAwRTJEMkZBMzFDNUMKLToxMEU2RDAwMDI4NkI5Mjc0RDRFQjVEMEREQjIzOTRDNzc2NUU1M0JCM0QKLToxMEU2RTAwMDA2NkUzRjk2MzUxQ0ExNzZCREY2M0ZEMjQ2N0M3Q0VGODgKLToxMEU2RjAwMEM4RjdBOURFRjlDRTlGRDgwQ0VCRUY1QkY1NzYxRTc1NTcKLToxMEU3MDAwMDQ0MEEyQzRFNDhFRTdFN0ZCRDZERkJEQkREQkYyRjBBMzkKLToxMEU3MTAwMERGREJGQkY5MEY5MDFDOERCQTA3MUVDNEY5QjhCQUY5RkMKLToxMEU3MjAwMEM0ODBFM0JEMjNDRkQyN0JCNDdGMUNEREZDMTZBQTAzREIKLToxMEU3MzAwMEYxNEJDRTJDNTNBMEREOUZDQjhGOEY0MzdEMEJERkI0RUQKLToxMEU3NDAwMEM1N0RFMzY3NTJGODEyREM4RjFFNjU4MTRCNzBEQzVCODAKLToxMEU3NTAwMENCODdFRkMzOUY0QzM4QUNCNjNFODZFRjk1NkY3OEYwMTEKLToxMEU3NjAwMEU1MkIxNDk4REY2MTc3RUIyMEZDMDlCNzREMDk2RkYwQkEKLToxMEU3NzAwMDdDNzIyQjdGNTE0NUZGMURFMUU3RjBBMEQ2NDEzNkM4RTIKLToxMEU3ODAwMDNGOTlDMEE2NTM3RTc4RUI2Mzk4N0YzREUxMDRBRjNGOEQKLToxMEU3OTAwMEJBNzU5MEFDQTMwOTcyRjI4QUE5OTBERkFDQzdFNkY3MEMKLToxMEU3QTAwMERBMDRBRTM3MUJGMzlCMzZEQ0ZGNTM4NDBCMkJFM0ZCMDEKLToxMEU3QjAwMDBENUUzMzc2ODAzQzlENUI3MjZBREI2NjgwQzdEQzFGMzIKLToxMEU3QzAwMEM1OTM5Q0RCREM3NkRENTU3OTA0ODc1MDFFQzYxMUE2MDcKLToxMEU3RDAwMDBBNzhEMzdFNDg3MjVEMjE3REEyMUZFRTgxN0RCQUYxNTkKLToxMEU3RTAwMEU5MUVEQ0UyQTVGREUyRDJDQUVEQTgzN0E0Q0UxRDQ1QTQKLToxMEU3RjAwMEZCNDVBMUM3MkZFOUM5REQ2OTM4MTk1MkE4MkZFOTNBQUQKLToxMEU4MDAwMDk3RUJCMjhERTIyMzUyRUY3MjkzMUVGNUEwRjgzRDAzMTEKLToxMEU4MTAwMEUwM0JBMjBGOTdDMENCMzZCMTlFNkQwOURDQkZGNjgwRkUKLToxMEU4MjAwMDY3MUFGNUYzOUVFNDdGQzQyMTYzQ0E0MjRFRjJBN0M1N0UKLToxMEU4MzAwMDkxQkU3MkYzMDY5MDJCMjBEN0Q3ODk3OUFGNUI3QjA5MDUKLToxMEU4NDAwMEY5Mjk2RTQ2M0ZGMTI4RkNFRUVGRDc2NzU0QjdGRUJGQkIKLToxMEU4NTAwMDJFMDNGMkFFNkVCQjZFREQyQzdGM0ZGM0I5RjZCQTBEMjAKLToxMEU4NjAwMEJDREM5MDVCRUJEMjc5N0I2M0JGNEFBREU2RTNBNDNFQjAKLToxMEU4NzAwMDc4Qzk0NjVDNDdCQ0MyMjg3RTdCRTFFQzExMUI5N0QxNkUKLToxMEU4ODAwMEZFN0YyREFEOUZGOUZERkREMDBFM0Y1QTNDQzQ4NjdBMjgKLToxMEU4OTAwMEE5ODE5RkMyRTFGRTU3MTI2MDNEMzc4OURGRUYzNUYwNTUKLToxMEU4QTAwMDY0OEM0RkI3RTI1MTdGOTA0MTdGNDAzQjM1MzE0MEVCNjQKLToxMEU4QjAwMDA3N0Q2MjBDMEY2RUUwRkEwNEQyMTYzM0MxOTcyOUFEQzIKLToxMEU4QzAwMEUzRjBGQkZGMjAzOEI1RkQyQkUwRjQ0RjlGNzc0N0M5RkQKLToxMEU4RDAwMDIxOTAzNzBDRkIyRjVGN0FEQzcyRkZFRDNGMDFEMTIzRDMKLToxMEU4RTAwMDJBNzAwMDgwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwNUMKLToxMEU4RjAwMDAwRkZDNTdEMEI3ODU0RDVCNUYwM0U3M0NFQkM5Mjk5MjAKLToxMEU5MDAwMDY0MjY0QzkyNDlDOEUzODQ0MDA4MTA3MTEyNDM0NEYwRDUKLToxMEU5MTAwMDMxODQ4ODUxNjkzQjUwRDREODdBNzEyMDNDMDIyNjk5QzEKLToxMEU5MjAwMEE4RDU2MjRCRkYwQzEyNzkwOTE4MzQyMjUwQzE4MTAyMUMKLToxMEU5MzAwMEM1NUJGNTA2NDU4QzFBNzA0NDhBN0FBRkY2OEVBREI3ODIKLToxMEU5NDAwMDU3NkM3RkZGMDg4ODhGNEEzMkEyRjVEMjk3RkRENzVBQkQKLToxMEU5NTAwMDdCRUY2NENFMjRBOUI0QjZCREY5M0VEQ0VFQjNDRkQ5Q0IKLToxMEU5NjAwMDdCRURCNUQ3NkJBRkI1RjYxRUE2RjU0QzBBNUNDMEQ4RUIKLToxMEU5NzAwMDY2MjU2QUNFQUU2NDJDN0M0OEYxRUQ2MUYwMDdDRjY3NjYKLToxMEU5ODAwMDNCMTlGQkY3QjRBMEQ1OTVDOUQ4OUZGMUVGMEFDNkU2QUQKLToxMEU5OTAwMDdFQkYyOTI3NTgwNkVEOEQyMzE4Q0I2MTJDRjVCQkNGMDAKLToxMEU5QTAwMEQ0REUwMEQ1Qjk0QjNGN0E3QzBGN0MzRkY3N0JBOThDMzYKLToxMEU5QjAwMEU5MDNFRjQzOEY4Q0MxRjdFRkJDNkQ1QkNGMkU4NEQyQTAKLToxMEU5QzAwMEQyMTkzNTc5QTBCQzg2Rjk1NkMwN0JFRjk4NTg0MzI3RjkKLToxMEU5RDAwMEY0RjcwRUJFN0EwOTYzNTVERkJCRTUzNTM2OTFCMURCM0UKLToxMEU5RTAwMDVEMkE2MzkzMTg1QkFCRjg3Mzk4OEEyNTBCREJFMEJCNTkKLToxMEU5RjAwMEYwMkM0QjY0NEYxMTYzN0QxMTUzRDgwQ0ZENzVCODIzNzcKLToxMEVBMDAwMDVCMTdDMUI4MURENzk1RjlDMkQwNUYxRjYzN0U4NkVGMzMKLToxMEVBMTAwMDJENEJBNUY3M0FEQzNENENDM0Y2NEI3NDE3NDBDMjBFQTQKLToxMEVBMjAwMDdFQTFGQTE5RDRFMzM3NUEyMkJCMTQ3ODVFQ0VDMjc2OUYKLToxMEVBMzAwMDZDNUYzMjNFMTI4NkZBRjMzMDBFN0Q3RjYzNEE2NDBGQkMKLToxMEVBNDAwMEI2Q0Y4MjhGQTBERTcxQTMzNzEyODZGRUVDMkM2MjQ3MTAKLToxMEVBNTAwMDc4M0E3NkZBNzMzMjFDOENFNUFBQUMwNUUxRUYyODgyOEQKLToxMEVBNjAwMDNBOTQ1OTJCRDlDRDAxMDdFMkNGM0Y3MTk2NzMwMDBGMkQKLToxMEVBNzAwMDVGNzc5OTY4M0VBOTk1M0Q0RkZGMzdGNEM3RDZEQjdEOTgKLToxMEVBODAwMDYzQTBCMEUxQUI1ODZGQ0YyNjc4OTkzQjU4ODVGODY2MDQKLToxMEVBOTAwMDFBRkMwM0I4RUExRkM4ODlBQ0MzRTdDQzU3ODVFQkIxQjEKLToxMEVBQTAwMERBRTk5RjQ3RjBGRjIwNTU0N0Y4MUZCNkIzMzVCNjBBOUQKLToxMEVBQjAwMDI4MTVENjY2Q0IwMEZDMEI3ODU4RkI0MzAwMEM2MzM3NTcKLToxMEVBQzAwMEUzMDA4MDk3RkZENzcwRDZBOUMzRjMyQjVEMEFBRDA3OEIKLToxMEVBRDAwMEZDRjk2RDU1OENDRDY3QkM3REZFRjJENDc3OTU4OTU4RDUKLToxMEVBRTAwMEFBNTE2QjFBM0M1QjczQTVCRkM3NDZFRkIxM0Y4RkUyREIKLToxMEVBRjAwMEE1MERGQTBCMzJGMUI3MjVFRTQ0QkEwOUUyNzc2OUQ4RDEKLToxMEVCMDAwMEZGRUY5REJBMDNFQkYwRkQ0NDVDNzZGOEJFNzRFMEZCQ0EKLToxMEVCMTAwMDNBMTdBM0Y5Q0Y1NTM5RkNBQzM1NTU0N0ZDNEFGQ0M4MjgKLToxMEVCMjAwMEIyNEVDMkQ3RkU5MDNGNzEzQzM5NEU3MkJGRjdCQUZDNkQKLToxMEVCMzAwMDM3MjJCRTAwRUZEMTc0MEZFMjQ1QTU3NTREODZENzYzMkQKLToxMEVCNDAwMDg5NkZCMDQzRkJEQzU2RDU3RDM3RTAzM0I4Q0M0OUYzNTEKLToxMEVCNTAwMDk1RjBERTlDMURCRjhDMTUwRkVFRkY3NDZBNzM5NTg2RDEKLToxMEVCNjAwMEYzNUZDNkU5OUQyREI3MDJFMjEyRjE2MjE5QTgwMzVEQjkKLToxMEVCNzAwMDJDNjRGMTYzMjY2NTg4RTc1QUY0NDU4NDdGNTE0N0MyQzcKLToxMEVCODAwMEY3RjRERjJGQUM4OUVGNDk3RTYxQkE5MjA0QkZBMDJCNjYKLToxMEVCOTAwMDVERDE3MEREODIwQTVGMzc4QjI1M0UzNzUwMzYxODZFQTcKLToxMEVCQTAwMDg5Q0ZENTgyRUUyNDVEMjRFMzdCMzVFMjdCRDI2MDdDODUKLToxMEVCQjAwMDdCMkMzREY5RDg2RjcwOTk5NUYwOTREQzNGNjMxMUZBODYKLToxMEVCQzAwMEVFMjEzQkYwMEZEMEREMTY0NTIxN0FERDcyNTc2QTY0RTUKLToxMEVCRDAwMDI1RjJBNzNEQkUxN0YxMTkzQTdDMTVBRDc3RUY5MjE0RDcKLToxMEVCRTAwMDlEQzEyQkRCMkMzMDQxOTQzMzg3OUQ5QzhGNEI3QTRBRkYKLToxMEVCRjAwMDkwOUY3QTYxQ0U3RTU4OUZERUQ3RDU5RDYxNDUwMkMxMzgKLToxMEVDMDAwMDU4RjNFQkVBMkVBNEZGREU2N0FGRTZGREFDNDhENTE5NUEKLToxMEVDMTAwMEQ0NDM4ODYxMTgzNzE0RkU0MzJCMDNCQzlFMzRDNTJDQTMKLToxMEVDMjAwMDM0NUUxN0UwNTdDMjA5RkY3QUUxNUY0M0M1ODBCQ0U4NTQKLToxMEVDMzAwMEMzMDYxQ0JGOEJDQjA3OThFMTEyMUFFN0RCMjk2QzFEQkEKLToxMEVDNDAwMDhDREI2QzUyRkMyNjY4NkY1RTNBM0VCMjkyQzM2MTQzMjUKLToxMEVDNTAwMDNFNkExNDIwMzU5QjU4OUI1MjMxQzBGN0NEQTYxMzI1MzAKLToxMEVDNjAwMEI3OTVGMTM2MERERUJCODVGMTc1ODFGNzhFMkEwMDVGMTEKLToxMEVDNzAwMEEzNkQ3RDRDNDVCQTQ1RkE4N0Y2QTVEODVFMzQ4MEZGNzIKLToxMEVDODAwMEU2RjVCRkY5MTNDMkRGN0NDMDQ4MTc4RDhGMTlFN0IxRDUKLToxMEVDOTAwMDM0OTE5RThBMDZFODI0QjU5MkUzODlENUIwQzgxODgwREQKLToxMEVDQTAwMEQ3MjlFQUE5QjVCMTg4OEE3ODVBNTZDRDRFMDJFOTY2QzUKLToxMEVDQjAwMDFFRTk5OTgxRjRFM0FDRUM2NEYzQTEwQzdEQzBGQzExNzYKLToxMEVDQzAwMDgwN0I0QUY3Q0U5NzQ2QzJGQkVFREE1ODNFNEUzN0I0MDkKLToxMEVDRDAwMEVDQjY4QjRFNUQzNEIwQkUxMkNFNEJCQTM3QTlDQzQxRTgKLToxMEVDRTAwMEUzRDE3NzAwOEE3RkJGODNERTFCMzdGQjgyQzRGMjZFREQKLToxMEVDRjAwMEZBMkVEM0E0MTJCREY2RTAyM0U0MUJDRDlGQTNDMDM4QTcKLToxMEVEMDAwMDlCOTc4QzMyRTE3QUE2ODI3QzQzQjlCQ0IwN0RFQ0FFOTUKLToxMEVEMTAwMDE1ODQ2NzdGMDlDQUI3MDdEMzgwQ0UwOTlGQkUyQTk0OUUKLToxMEVEMjAwMDJGQTVFRUVBNUZCQkEwQkZBN0RDRDVGRjhEMjU4RTEzMTQKLToxMEVEMzAwMDcwRTJGNDQ3OTBCRTQ4QTZFNzY0QkQyM0RGQ0IyRTZFOTkKLToxMEVENDAwMDI5NkY3MTBDRkYxRUYwMTdFMTJEQkUzNTlEQ0IwRjREQzUKLToxMEVENTAwMEExRkFBMkZGMzBFRjVDNDdGMDY5NDQzN0I3NkQyRjIyNkMKLToxMEVENjAwMDc5RENDMERBODlERTFBNTlDNDgyRjRCQkM4QzZDMjY5MkMKLToxMEVENzAwMDQwMTc4QkUwQjU3NDI4MTc2RkIxMzIzRDYxRkQ5NjQ0QTIKLToxMEVEODAwMDhDRjU0NjIxMEY2RTYxMzFGQUZFOTY3RDQ5RUQzNTJDRUEKLToxMEVEOTAwMEVBODRGNjI2MUI4QkE2NjJEOTY5NkM2RjY2NzE0MUVGMTcKLToxMEVEQTAwMDdGQjYyNjNFNjcxRDdDQkUzNzhCNzU3N0Q3NDRENDIwNEYKLToxMEVEQjAwMENDN0JBQjFENzQ1NzA2QkVEMDRFRUIzMzY1Rjk0RTVBNzMKLToxMEVEQzAwMENGRjQwQTdGRDEzREE4NEY1RTM1RkI3NjAxRERCRTI3MkIKLToxMEVERDAwMEQ2NEJFMkU3NUU1N0Y1QkI4OEY3MTRENTQ0RjM4RkRGRDcKLToxMEVERTAwMDYzMjVGQzlDMDJCRDhERUI3RjlGOUJERDNDMUJDQURFMzcKLToxMEVERjAwMDU2REQzQjdBMzRBMkM5NTUzMERCMzkxOENGRUI5RUIzRDAKLToxMEVFMDAwMDM3MjBEREI4REQyNkMyQjc3QzdFQ0M2NUE2N0FENUREOUQKLToxMEVFMTAwMDAyRkYyQjUyMjNCQjhBMDhERDEzOTE5RUFBNDY0OTdEMkYKLToxMEVFMjAwMENBMjZDRTgyRkFCQjY2NTZENzA5RjVFNkVCMUQ0MUVDNDEKLToxMEVFMzAwMEFGMDdFRDA3QTgxN0I4QjlERTI4NzA1QjY4N0VCMjJFNjEKLToxMEVFNDAwMEU3MkJFOTA2QzZBMUZFNTIyRUUyQTU4NDYzOEM1QkM4QkYKLToxMEVFNTAwMDQxQjY4OTdGMjdGNEVGRTYyNTI5M0I0OUZGRjZEM0FGN0EKLToxMEVFNjAwMDg5MTFGRDk2MDUyQzg4RDdFNzg0NUM3OTRFQ0E5NTM2QzIKLToxMEVFNzAwMDJCOTcyQjlBNkJFRTMyQTgzRkY3NDE5OTZGMURFMDk1QzcKLToxMEVFODAwMDk1ODJERTgzRUYxQjNGNEFEMTkxOUU1RUY5RTg1RkVGRUEKLToxMEVFOTAwMEZEMTlCNDlGRkRDMEEyNUJBMTdEMDFEMjE4QUNEQjczNEMKLToxMEVFQTAwMDBBOTc0NzYwN0YzMEQ0OEY4REMwRjYzODZFRTNDMUIxQ0EKLToxMEVFQjAwMDY0N0YxQ0I0MDhGQjQ2QzhDRkM2QjRFMEQ2ODVEMDRGRUIKLToxMEVFQzAwMEUzOTM5OTNFQTA2NEY2QkMzOUYyRTg1RTZDM0Y2NEY3QzgKLToxMEVFRDAwMEVEODE3RTFCNTMzODVFMUI5RjFCNDlERjNGNjEwRjRFNDgKLToxMEVFRTAwMDc3QzMzQzczQUQ5MTlGM0M4MTcyRTMwNTJCRDk3QjY3NUYKLToxMEVFRjAwMDU5NzQxMUMyN0ZCNkQzQUVFMDdCMjc3MDVFRTk1MDQyRjEKLToxMEVGMDAwMDlCODJGM0VBNzY5MjNEMDQ3QzlBQjMxMEJFM0JCOTM2RkQKLToxMEVGMTAwMDlCQ0Y0QkUwRTlFNDg2MDlDNDE3OUJDRDdDQkNGMEIzRTIKLToxMEVGMjAwMDBBQkQ3RkMyMUM5ODkxMDNGNTEzNEY5N0ZCNTY0MDUzQkYKLToxMEVGMzAwMDVGQzAxMkI1MDAzRDg3RUVFMzc2NUVCRDQ5REY4MTc4QTQKLToxMEVGNDAwMDYyODc1MzA5NUVCOTFFQTE4RDhCNjc2MjdCNjhFOUYyMDcKLToxMEVGNTAwMEFGQTM3QzFDOEVDRjUxREVCMzA0QjlEOUNCRTIwNUM4NzgKLToxMEVGNjAwMDRGREIxQTQ2NzU0NjUxOUY3NDhGRjM5MTVBNjU1RTU4NzAKLToxMEVGNzAwMDdDQTAxQjE3N0ZGNzk0OTlFMzM1N0VDODRDRjQ3Q0JFQzgKLToxMEVGODAwMEZERTM3Q0I1MkFBRTdGNzA5QzEwQzg2NTI2Rjk4RkU0M0UKLToxMEVGOTAwMDcyNDI1RDFEQUFDRUM4RkUwQzNEOTcyREVDM0E2M0ZCNzQKLToxMEVGQTAwMEVCQ0VFMDFENkVBMEJGRTZGQkZGRTc5RDY1ODRERjM4N0EKLToxMEVGQjAwMEM5NDVENjlFNDk3Qzc5Q0FFQzlGOEI3NEVCQUU4OTVBQzEKLToxMEVGQzAwMEU2MjdFOEYzMEQ4MkFGRUFBREMyRkU2MzUxNEIyMjFGODQKLToxMEVGRDAwMENBRjZBQTZBMjNERENCNzJCREEwN0Y2NzhDQ0JGN0MxQ0UKLToxMEVGRTAwMEVEMjZDMTFGREZCNEEyMUU5QkMyNDE2Njg1QTg0NzFDNDcKLToxMEVGRjAwMEQ4QkY0RUZENEZGOTIwNkFBOTg3N0FFMUYyQTg2NTkxNDIKLToxMEYwMDAwMDI4OTE0RjAwREY1MTFCQ0NGQkQ0NTYyN0U3NkY0MDAzRkMKLToxMEYwMTAwMEY2QjM2ODMyMjM3REI5NDgwNUZCQjUwMjlGRUI1RDNEMzEKLToxMEYwMjAwMEIwMkVBNzlGNzY3M0ZBRkEyMzYwMDVGMDNEOEY4OUY3MUIKLToxMEYwMzAwMEFDNjBFRjgyMUM3QkE2NEQ4OUUyN0U2MERFMTZFQjJFNzMKLToxMEYwNDAwMDdCMTFGMkI1NUY3NUUyN0E2RTU3NDg4RUNENkI5QjU2OTkKLToxMEYwNTAwMEIyMTVFQTRCMEY1QzQwRUI5RjM2OTlEM0U1RDI4ODlCMDMKLToxMEYwNjAwMEY0RTIxNDIxMUZFQkFEMTEwQkQ5REYzRjUxMThGMjAxNkYKLToxMEYwNzAwMEY0NEY3Njc0MjM3Qzk0NTMzMTE4MEYyOEQ3MERGNDEwNzUKLToxMEYwODAwMDQ5QTg4MzVEMzRBNTkzQ0I1NTA2RjI5QzI1RDg0QjUyRjUKLToxMEYwOTAwMERFQTMxQzY3NDlGNjlGOTEzRUMyNTIxRjcxQjlDN0Y0QTcKLToxMEYwQTAwMDZDOTQ3QjUyMkVERkVCMEE3NEI5NDlBRThEQ0VDNkY1NTcKLToxMEYwQjAwMDg1RjVFNDcyNzNCRjQyNzg2RDYyMkRBNDRGQTQxRUU4RkIKLToxMEYwQzAwMDFGNTdFODkxRDM2QTk4RUIyQkVCMjYyQTVGNzcxN0QxNkQKLToxMEYwRDAwMDc4NEI1OTI3RTkxM0E5NTc4NkEzODNEN0JGODQwRTdFOUYKLToxMEYwRTAwMDg2NzQwMEVEOEQxRkIwRTg2NTMwNUVFMzcyMTY2RDlBOTAKLToxMEYwRjAwMEM4NEJFNzQ0RDI4RjVDNEZEQUI4OUVDNDMyRTUzQ0Y0OEIKLToxMEYxMDAwMDY1QjI3RTRDRDY4N0M5N0EzMERCQzJGNTlENUM2NzY5RjMKLToxMEYxMTAwMENGNjQ0RkU3NzZDMDk0RTUxMTk1QzFGQzM2QTZGOTNGNjAKLToxMEYxMjAwMENFOUMzNDYwRDc4NERFQjJEOUY0MEJCMTFFNjBBM0UwNkMKLToxMEYxMzAwMEJEQzU2OUQzNkVDQTg2RjY5MEM2RkNDODU3QTk4MDk3MkMKLToxMEYxNDAwMDlERjA3Q0JCQjA3QjZCQjMzOUREN0IyRDlDN0VDRDVBQjMKLToxMEYxNTAwMDgwOTUzQjcwNUQ2MkI0Q0Y4RDY3MzIxN0QyQTNDNEU3NTAKLToxMEYxNjAwMDc2Mjc3QzU3ODFERjcxRkRENEZGQkQ4REI1QTUyNDdDNEEKLToxMEYxNzAwMDVGRkQ5QzlERTRFQUU3Q0YzQTIzNTZCMjQ3ODI4NTZFNTUKLToxMEYxODAwMEU4MkZFQjU3NTZCMjUzN0I5RjczOTIzRUVEMTVGQUQwQTIKLToxMEYxOTAwMDgzRjYyOEQxQ0IyQUFFNUY3MTVEMjcyMTM1NTU4RjY0NjgKLToxMEYxQTAwMDQ4RkJDQTM1MjM1MTA0NEFGQkFDQzlDREVEQUNDMUY2Q0UKLToxMEYxQjAwMDkwNjgyRjhBNURDRkU5Q0E0QUZCQ0NDRkREM0Q3NzYyRUMKLToxMEYxQzAwMDFERTA2MTY4OUZGRjhGNThFN0QwODFFOUU1REY4N0U3QTEKLToxMEYxRDAwMEExODBDM0M3QjExRjJDNDc3QUI1QUFERkI5REUwNkY0RjgKLToxMEYxRTAwMDM1NDM1RDFFQkYwQkU2RDE5NEVGNzBBMTlFQUIyOUZDQTkKLToxMEYxRjAwMEY1MkY2Rjg0RkE4NzA3Q0NDQzhBRUJCQzY3N0ExRDFCOEUKLToxMEYyMDAwMDM1QkNGQzVEMTIzMTlGRTg0OUUwOTc1QkY2MTlFQjREODgKLToxMEYyMTAwMDlEQzY3QUE4Q0I1ODJGQzg3MDdBNEU0RjIwRDlFMUZCRjMKLToxMEYyMjAwMDMzRDBCNUQ1REFGMkMxNEU4MEQ3RkFCQzk1RjREMUE3NjgKLToxMEYyMzAwMEVFNjA3MTA2Q0E1QjUzRkMxOEUyRDk1QUY4RjE0NEY0NDcKLToxMEYyNDAwMDZGODRCQTNGNTFCMEI0MDJFREM0Q0EzOEZFOTFBRjNGRUIKLToxMEYyNTAwMEI3Q0YyQjc0MEQ4MUI3MDFGQzMxOUI4OUYwMENENjNBRTYKLToxMEYyNjAwMDJGNDlDRTg1MDQ5Rjc4MkNGRTBGNUY4NEY5MkY5QTlEM0QKLToxMEYyNzAwMEUyQkE5QjlFRjg2NzRFQUE0MjdCOTI2MDY0QTEyRDU3MkEKLToxMEYyODAwMDdGODhGQjJENzg2RjA5QUVGRkU5NTlGMDFFQzBENUIwMUQKLToxMEYyOTAwMDg1RUJDMzQ2MTY0QjQzQkU2RDA2QkJEMzA2NEI3QzQ3N0UKLToxMEYyQTAwMDA2NUY4NzVCREFFMjU1NTFGOERGOEU4Q0RBNzEwOEE3Q0EKLToxMEYyQjAwMEY2MjcyRDgwRjRCMTFBRkI0REIwOTNBRkNERTA3QUUwODQKLToxMEYyQzAwMDk2N0Q3NkQ3MjkwMzFFREQ4NjdBQTgyQkM3NzUyQTkxRUQKLToxMEYyRDAwMEZGODRGQzYxNzk4QTk2QjgxRjdBNTcwOTVFOEJGODZCQjgKLToxMEYyRTAwMEIyRjU1OEE2QzFGODU3RkNFOTMzOTJGNzhCOTdDREE3MzIKLToxMEYyRjAwMDdEQzQ4MDVENkQyNUY5QjRGOEFFMjAzRDdGNjkyQkRGQkMKLToxMEYzMDAwMDE3OUVERTZBRDcxMUVGQTdCN0YzRkRFM0UyM0M0N0M0Q0YKLToxMEYzMTAwMDA2RkY3Qjg1OUJEQkRCOEJFMTNCNDUxOThDQzc2NEJDMUYKLToxMEYzMjAwMEJERkZGMDU1NUVBNEEzRjcxOTFGMkZEQ0M5RUQ4RkY3QzEKLToxMEYzMzAwMDVEODBBRjYyRkUwRUY2Rjc3RTE3RDhFRjBBRTJGOUFBRkIKLToxMEYzNDAwMDBGNTEyRTJFREVBRUZBRDA0RTYwODc5Q0U0OEY1OUJDNTIKLToxMEYzNTAwMEZEQ0E3MTBCMUREOERGQTcyM0E2QTE1RjY4Qzc5NUU4N0EKLToxMEYzNjAwMDg5QzJGNzAyMTFFRUQ3ODk1RDAxQ0ZCNTFEMTc5MzFEMzQKLToxMEYzNzAwMDc3NzRCQjk1QzNFOUI2RURDNTc5NUNGMTI3OTVGODRBN0EKLToxMEYzODAwMDMzQjEyMERBQzcxRDE2RkYzOEU0NjdGREUxM0QzMzcwNjUKLToxMEYzOTAwMDVEREU5Rjk1NkJBMkY3MUY1Nzk4MEJGMUUxNUU5Njg1OTYKLToxMEYzQTAwMENGMTcyQjVBMDBGOUI3NjFDQjkyOTk4OUY2NEU2QTg2MkUKLToxMEYzQjAwMDRBRUIzNUFENzA3OTU2OEY4M0Y4RTk3QUQ0QTM0RERCRUIKLToxMEYzQzAwMDgxN0Y3MEZDRDk2RkZGRjI0NjRGMjIzRkRENUVDNTRDNTYKLToxMEYzRDAwMDA5RjZDQkMzNUYyMzdBQzJCRjI4RTA2QkIxQzBENzU3MTEKLToxMEYzRTAwMEU1MkI2QkFBRTQ4Qjk2MTI5NEEzOEJFRjZFMjk3MTBEMUIKLToxMEYzRjAwMDYxNTdGNEYzQzVDMzlDMEZFRkNCNTBCOEZGMjAyRkMzNjgKLToxMEY0MDAwMEIwQ0YxODZFNUZFNjI4MzU5MTVFQjFGOTk4N0YwRjk0MDIKLToxMEY0MTAwMEQ5QjAyREM2RkRGNzgxMEM4RERBMEY2NDcwN0I1RkZCRDAKLToxMEY0MjAwMERENkRGQjVFODc3OTREQ0QwODZFQ0Y4MDdBMjFGMzk3MzUKLToxMEY0MzAwMEUzQkFFQjcxNTczNTk4QjE4ODYyQjJCQkQ4QzM1NjZFNDgKLToxMEY0NDAwMEM3NkFEQzhFREU5Q0M5RjZBRTRCRDg4Rjc3NjI3Rjk5OTcKLToxMEY0NTAwMDI0MTdGNjYyM0ZCREM3RkY3ODBDRjFEQTVDRjBGMTQ0ODcKLToxMEY0NjAwMEI0MEY0MkU3M0VCM0EwMUZDREQxQUQ5MDNDNzdGODAyNzgKLToxMEY0NzAwMDBDRTkyNUQ0M0Q4QjJEMjgxQjkwQzMyMTFGRDcxM0M5MjAKLToxMEY0ODAwMEYzRkE1MzA2REZFRjg0M0M3MUVBRTdGRDExOUM3RjNCMDIKLToxMEY0OTAwMERDOUMzRUI3MkQ0QjIxM0ZFNDM2NEZDNDhFNDBGRkI1NzgKLToxMEY0QTAwMDdDMkFFREE1MjVDMkVGNjdEQkZEOTQ1RjQ1RkE4RTI4MjcKLToxMEY0QjAwMEFFMzE1OEQ3Mzk3RkY0MzVDQzhEQTgzMENFODdCQjhCOTEKLToxMEY0QzAwMEM5REZEOTc3NjA5QTRGODUzNkM3RUUxRkFEMTk4NTc4QTkKLToxMEY0RDAwMEVBMzJGQkYwN0Q4N0FGMjcwREU3RjdFMUVFOTM2OTM4NUQKLToxMEY0RTAwMEJGODZERDJBQ0RCQjIxRjI0OUQ2QzJCMjAxQjlGMDMzQzUKLToxMEY0RjAwMDI1RjgzQUNBMDFFNjUyMUMzOEJFOTQwRjFGRUVGRTM0QkUKLToxMEY1MDAwMDZCODE4M0ZCMEI0ODdGNTYwRThEOTdBN0RDRDM3RThFRDUKLToxMEY1MTAwMERGNUY3MTM5NUY5NzhGMUVCNzQ2NTBFRTdENjQwN0ZENDAKLToxMEY1MjAwMDk2MjA2RjNGNzI3MjdENzcyQTQzRUVFRjNBMEI1MERGRTEKLToxMEY1MzAwMEY0RDc2RjJBMzVBMTlDRjg4RThCQ0ZERjYzRTkyQzQwN0UKLToxMEY1NDAwMDdFRkM4RDYyRUM2N0U5MUExMzhCODA2QzVGQjIwNjUwMEIKLToxMEY1NTAwMDAzRjJFOEEzNDc5RjI5NDA3OUZGRTE5RTY3MEFFNjI3NjcKLToxMEY1NjAwMEMwOTdGQzlEMkM3QkU1NzhDMjZGMjZGREE4MUU0QjM0MEUKLToxMEY1NzAwMDBGQzc5QkVGQjM3MjdGRTUzMDdFNTRGOTNFREJDMkZEQ0YKLToxMEY1ODAwMEExN0QzRUFCOEU3NDI4QkZFQjZCNDhGMUEzN0REQkM3M0EKLToxMEY1OTAwMDZDMjRGRkU2NzcwQkJGQUNERjNGREE4M0ZCMThGOTdEMDUKLToxMEY1QTAwMDUyRkYxNTFFNEU0RjRBOTc0MkZFODNENEIyMzhDOUUzMkMKLToxMEY1QjAwMEJGNTlERTdCNjAzRDEzRTQzREFDRjNCRjIxNUYzNEQ5MUUKLToxMEY1QzAwMEUyQzc0NjMyQTIwRjBCRTJDREQyRUNEMDUwM0Y2NUFEODAKLToxMEY1RDAwMEU0RjQxNUJGQzM0NEZCMkE0QkFFRDc4MUYyRUM4QTkyMDgKLToxMEY1RTAwMDk0MzYxMzMwQTIyNzI1NkQyMkM2MDFGMjczNEJFOUZEMzQKLToxMEY1RjAwMDcwMzVBN0ZCNzAxNjIzN0Y1QjBFNkI1MTQ4NUVCQkI4NUUKLToxMEY2MDAwMERGM0U2RjMyNzNBRDgzRUFBQzExREM5RUYxMzJERjE2NjAKLToxMEY2MTAwMEI1OThENjVENDFGRjkwQzQ4N0Q0MEI0ODNGMjgxRjNGNjMKLToxMEY2MjAwMDUyNkM0NDNGNEFCNzQyNzZBNzZBRUE5QzhCRkQwRTQ3NkMKLToxMEY2MzAwMDRGMTM0N0M4RkQzRkE3QTdGRUZBM0Y4OTlFMjY4RjE4QTQKLToxMEY2NDAwMDhFOUU4MjNBRDE5M0Q3MzYzNDNEMDkzRkYxNzlCRkNGQjAKLToxMEY2NTAwMEMyMDFEQ0JGNjYwQjdDREQyN0U0NEVGQzBFOUJGNDlCRjUKLToxMEY2NjAwMDJCMzhERjk5QTJCRjk5MzY0NzU0NDVGREUxMzM3RjlDODMKLToxMEY2NzAwMEU4RkY3RDE4RUM1RkRDMjdFNUEwRkQwRUU1Qzg5NUYzRkIKLToxMEY2ODAwMDc0NUEzNzE2RUI0MTdGNDFFQUM1MzZEMjhGRjc5QTYyM0EKLToxMEY2OTAwMDQ1NjhBRjY0OEY2RkQ5OEY3NDkxM0RCN0FDNjIyNUVEMkIKLToxMEY2QTAwMEZGRjJEQ0E4MEY1MEI3OTIxRjc0NTk3NUUwRDQ4ODA0OUMKLToxMEY2QjAwMDdCRTExMERGQ0YzNERGRTVBN0U3RDNCQkI5N0QxMDFBQkMKLToxMEY2QzAwMDZEMjE3QjM4RDRBNTg0NzE5RDlCMDM5NjA4REE0MTZCMkMKLToxMEY2RDAwMDE1RUU1RjA5NkZCMEVCM0NFRUEzQUZBMEI4Q0YwRjc0OEYKLToxMEY2RTAwMDFFMTc4QTQ4RkY2RkNGOEVFRjIzQkQzNTM4QzhFRjkxQzQKLToxMEY2RjAwMDFDM0YzQUY4ODVDQUM3MUZDMzY4RkM4RTcyMUVBRkVBNkEKLToxMEY3MDAwMEI4NUFFN0ZFMTVCMTdFMURCM0ZDMzk2RUI0MDdENjE4QTIKLToxMEY3MTAwMEY5NTlDNjg1RkE5QzgwMTgxODZGRkU3QTNCQUQ0M0FFNDYKLToxMEY3MjAwMENBRjFDQ0QyNkQ1Q0ZGMEM5NjBCRTQ2N0NFOUEyQzE2MTYKLToxMEY3MzAwMDQ2QzQ2RkZBRjkxQzI0MDVENjczNDVCQjhDMzczOUNCMDgKLToxMEY3NDAwMDAyNDU2ODc5QkZCQkU5QjdBRkE0MDBCRDY2QTE5RjhFMzMKLToxMEY3NTAwMDZGQ0FDMjY4Rjc5MzdGOThEN0M5N0RGQ0EwMDkwMEM5MUEKLToxMEY3NjAwMEM1RDZGRjVDNTc3MzY5NDI1REJDM0ZGMEZEREM2QjZCMzcKLToxMEY3NzAwMEYyNDhFRkY2QjcyM0Q4QTA4RjY1REQ2RkQ3MzExRTM1N0QKLToxMEY3ODAwMEQwQUU4MUJENkJFQjUyRjhGNzYxQzdCNTU3OEUwNjNDMjIKLToxMEY3OTAwMDI4NzJGQ0ZGNUNFQjQ3N0ZBMTlEMTlDNjRCODQ0RjRCNDEKLToxMEY3QTAwMEVBREYwQ0ZEM0I3NEY5N0VCQ0Y2NEE3OEUxQzEwQTU5RTgKLToxMEY3QjAwMEJGNjZBRDFGRTBCQkNGNkNFQzhGNTAyQUJFQzc4QTFDNjIKLToxMEY3QzAwMEVGRDZBQzZERUJENkU3MEREODA1NjAyN0VDMUE5MTM5NzIKLToxMEY3RDAwMDYwMUZBQzdFN0I2NkZCODUzMDU2QUFFQjUzMEJFQTVENUYKLToxMEY3RTAwMEE5RTc0MzFFODVFQzhGNjQ3RTNEMjBFNEMzREYyQzU3RTAKLToxMEY3RjAwMEY1NDE3NkY0ODExMTI0NTc3QjY2MjA0QkMyRkU4M0U0RTkKLToxMEY4MDAwMDc2Njg3OTgwQTEzRDA3RjY0ODE3QzJEQjdCRkNFM0QzMUQKLToxMEY4MTAwMDJGNDI3QkVGRUNERjFGMUJBOUUzN0JCN0NFNDVCQjM3NDUKLToxMEY4MjAwMDc0NEUyM0JBMERFRDUzMjMwQUQwQUQ0REYwMEJFODcxQTEKLToxMEY4MzAwMDhBMEI0ODdBNUFFQTEyNzRFQTBFMzM4QzczNzQxQzUyOUIKLToxMEY4NDAwMDI2ODU4OUJFNUEwQUFFODNCNUNDRjdGODVGNDIzOEU0MDQKLToxMEY4NTAwMEJFMzI3OURFQkYxRUMxRjcwRkExRDJFQUFEMjVEOEZGQjcKLToxMEY4NjAwMDZFODVBMTlEQjBBRUY0NDRENjAyREEzN0JEOUJCNTMwQUIKLToxMEY4NzAwMEUxQkIyNTVEMEYxMjNFOTdFQzMzMEY4OUM3NUY4RkUwMjgKLToxMEY4ODAwMDcxREVFNjY3OUZGNkEzRENGODI4QTI5MDRDNjhEMDIyRDAKLToxMEY4OTAwMDZCQTc0MEJEQTFDMTg0OTYyMEFCOENDQ0JCOTFFMjFDNzAKLToxMEY4QTAwMDc1MTYzNjA2RTY3NzA0RUQyNjg0NjNERjM3QzM1MzcwOUEKLToxMEY4QjAwMERFRjA0RjgxNDdEQjAyOEI0ODlGNkVBQkIzMzkyODRFOTkKLToxMEY4QzAwMDU0M0FGRjU2QzI4MzJCQzU4Rjc4NTg1NzVBOUQ4M0UzMEQKLToxMEY4RDAwMDM0Q0Y5QUUxQTJGODA4RDg3MUQ4REU3Q0Q3QjdDODJGMDgKLToxMEY4RTAwMDI0RTE1QUQ3NjVBRTQ1M0JBNzBBRUNCOUE3MDBFRUZDNjgKLToxMEY4RjAwMDhDNkI2QTdEQzBDNzIzRDVGREU1QjczQjMwNUUzRUI0NTcKLToxMEY5MDAwMDFDRkY2RTI2QTc4QjM2MjUxMEZFNDYyNUY5NDE1OUEyMEQKLToxMEY5MTAwMDVGQjNCMDhCREI4RDlGOERCMDE4RTIyQjlGOERFMEY2MkYKLToxMEY5MjAwMEVDQTVFMUQ4NzQyNDlGQzM1QTRGMkFEQUQzMjFFNkZGMEQKLToxMEY5MzAwMDA0RjdDRjJDRTBEMEY3RDAzQTcxNzlFNDY5RDVDOTNGMEMKLToxMEY5NDAwMDY2RjNGNERDN0IyMUI2NUZBQUQxRkU4NTY5M0QwRkUwNEEKLToxMEY5NTAwMEI4QkQ2QjNEQkU3NTRDRjAwMUQ2RUYyQUEzN0Q0RkJERkYKLToxMEY5NjAwMDI3QTg3ODMyRjlCQzcwN0Q3QjlGQkRBQTFDRkQ4OEQyODgKLToxMEY5NzAwMEVFNUFGQkE4OURGNEU2NUFBNzdFN0YyRENBRDNERjY5MTUKLToxMEY5ODAwMDNDMUZDMDE2OEY0RDg3N0U5NkZFM0U4M0M2NUQ2QjhGRjMKLToxMEY5OTAwMEFDQzVGNTBGRUY1NEE5QkREODExNzQ2MEJGNEJCRUI5MEIKLToxMEY5QTAwMDY1MjJEMjJCNzM0NDRBNTA4RjlBM0RFRDBDRTkxOEI2NkMKLToxMEY5QjAwMDJCRTQyRkIxNzkwMjBDRTNDNEQzQzNGMzM0MDVGNTQ1MkUKLToxMEY5QzAwMDkyM0QzMzFERkQ1NUI0NUZGMTkwQkZCNjVBRjBDNzE4OTQKLToxMEY5RDAwMEEwODJEMzM2NjI4NUI2M0Y4RjE4QjA2RjVFRjlFMzFDMDQKLToxMEY5RTAwMDBEMUY0QUJCQzc2NEUzRkVGMzlBQkExNDg2RjYyRDVCN0IKLToxMEY5RjAwMDE1M0Y2NjQyN0ZCRDI3QzZEMDBFNkVFQTU0Njg5Q0E2QUUKLToxMEZBMDAwMEQyMjcyREI4NkZCOUE1OTNGMzc3NDhFQzMzMDA3RjA1NjMKLToxMEZBMTAwMDY4NTc4Q0YxQTQwQTdCQTA4REZCMzk1OEVDRDg0OEM0RjgKLToxMEZBMjAwMEYzNjM3QzNEMTk4M0Y3MTJGQ0FCOENBREUwRjI0MEY0M0MKLToxMEZBMzAwMDY3MTE3MTg2MjZFMTU3MDI0RDQ4RUQzRThGQjQ1QkVGQUEKLToxMEZBNDAwMDE2RkRCN0YzNTI4Q0JCNTk4OUY5NTVDNDZCQjk2MkYwRjYKLToxMEZBNTAwMDg3Q0JGMjJBRjE3REZBOTFGODBDRTRERjM4RDAxN0ZBNUYKLToxMEZBNjAwMDk3QjYyQUIzNkVGRDI5Q0M2RkVCQTRGMTNFMzRDMUJDMkUKLToxMEZBNzAwMDQwNEU2QTA1M0UwNzUyMDRCQzU3NzY3RDMyMDNFOTg2NDQKLToxMEZBODAwMEQ1MzJFMkQ3RTZBRTY5NkE5MzgzQzc2RkQwNUVDODRFQkYKLToxMEZBOTAwMDZERDk4OUVERDkzNzk3OTI3RUM2RjhDODZDNzhGRTM1NTYKLToxMEZBQTAwMDBGRTdCMzFDMDdGN0Q3NzlFRjBFMTc2MUJDMzNGRDQ4OUEKLToxMEZBQjAwMEUwRDY5RkUyRjgxN0E0OTBCRjM1MUJENkM2OTk0MUU1NjIKLToxMEZBQzAwMDFBRjQ2Rjc5NTlGOThCQTg3RkJEMzNGNTBBODQ0N0M2QkMKLToxMEZBRDAwMEY1MzAyRTM4QUI4Q0U0MzhENTMzN0M4QTdGMTc5NDM3RDkKLToxMEZBRTAwMDc4REMzNDBFRUNFRjZBMTE1RTdDMUU3MTBDQzQxOUQxMDcKLToxMEZBRjAwMDZGODdFMzYyMUMwRkNCREU5Q0E4NDY3RTdFRDBFNzdCM0YKLToxMEZCMDAwMDkwNEVCQkFDMkVDNEQ3Q0NBRTk3REY0MjdEM0JEM0M2NjQKLToxMEZCMTAwMDNBMjlFRTlBNjRCN0M0RDNCRTE5NDQzQUVEM0I3MzdBREUKLToxMEZCMjAwMEM3M0QwOEQ3NzUwNzdEOTRDRjkyNjQ4RjVDNzEzOUI3NTQKLToxMEZCMzAwMENCM0ZEQTkzQUEyMzNGRUMxMjcyMUJFQzQ3MUU3Rjc5NkUKLToxMEZCNDAwMDlDRUYyMzkzRURDOEVGRjZBRjJGQjcyM0ZCRUI3Rjc3NDYKLToxMEZCNTAwMDNCOTJDMzE3REVDM0YzMjhBNDdDMEY4OTdENUY1RkMzOEMKLToxMEZCNjAwMEQ5MzRENDVGMkIzREQyQUU0RENBRjdEODJERjIzREJBNzEKLToxMEZCNzAwMDg3Q0VGN0QwNzZGMkY4MEY4NjQxNDlFRUJBMkQyMkFFNDUKLToxMEZCODAwMEU1RjdDRTQzRkY4N0JCODRFNEMwMkI3QjUzQzM0ODM3RTQKLToxMEZCOTAwMDY3M0JFRDY0OTc2OTZFNEIxNEUxNkE3QkRBMUFDMTNDRUUKLToxMEZCQTAwMDg4MzY0NUUwRUI5MDg4NTc1OTQ0MUMyQ0EzNDQ0NzgzODIKLToxMEZCQjAwMEUyQTAyNTQwNzIzRkZDQTQ5OUM3QUJEMjIyOEZFRTg1MEMKLToxMEZCQzAwMDdBRTNFMTFDMTFDRjYyRDQ3RkY4RDk1NEMyNzc2MzhBRkIKLToxMEZCRDAwMDlFOEVGRDM3RkVGQjA4ODY3MUFBM0UxODBGRDdGOTA5RTUKLToxMEZCRTAwMDdCNzBCQjg3RTI1QUJDN0ZGNjgyNTVFN0YxQjM2ODg5MjgKLToxMEZCRjAwMDFCRjBCMDMzQzJFREJGOTNBNUE2QTgwNUU2QkQ5Mzg5NUYKLToxMEZDMDAwMDNDOUZGNTMyQUVDNUU3RDlCNzYxMjQ4RkNCQTAzMTgyRDYKLToxMEZDMTAwMEZCQjJCNURDNUY1NDJGRTM1NTg3QjkxRkFFNUVDNEE1QjgKLToxMEZDMjAwMDRFQ0U1RUY0MDhBNjU4QjQyOTJEQjVCODRGRkI3Q0RENDYKLToxMEZDMzAwMDM0RjI5RkRGNzlGRjJDMkFFQkQ3MThGREZEOEJEMDNGRTQKLToxMEZDNDAwMDVGM0MxMDNGOTY3RUY3RjlDQzY3RTFGNkYzODBGRkQwN0EKLToxMEZDNTAwMDA0RjY4Q0JFNDZBQjQ2RkQ1OUM0NUM3N0EzM0VEMEMzQzgKLToxMEZDNjAwMEIwN0ExNzQzRDkwNjI1MUFGMTBBNjAxOURFRDNENjdBN0QKLToxMEZDNzAwMDUyNzBCRDU3Qjc5OTQ4NkY4NURCNEM3RTdDNEZEMkNCMTUKLToxMEZDODAwMEFCMUVBRTY3REZGNTcwQkQwM0E4OEVFMDM4QjI2QzMzRjMKLToxMEZDOTAwMDhCNzg4M0U4NkYwNTMzNDVCMTM0MjlCQzVDRUREMjZBQkIKLToxMEZDQTAwMDg3RDJERkIyQkYzNjczOEI2RDFBREFDREY5MjZGMjc3QzEKLToxMEZDQjAwMDdGNkVGMUQ3OTFCRjM4QTM4NEQ2QTlDREQ5QjJBNjk2Q0QKLToxMEZDQzAwMEI3MTMyRjdENkU4RjA3QThGRDMyOEQxQjk2NENDRjQwNEEKLToxMEZDRDAwMDc5RkE4Mjg3QzcxNzkyRjFCNkIwREQ1ODRGOEVDMzJDRTAKLToxMEZDRTAwMDg5MThFQkY1MkMzODM2QTc5OEM3MEQxMjlGQkYyMEY0NjIKLToxMEZDRjAwMEM0RTdFQjhBMDRCRTdEMTY5NEJCNzJGRTJCRjIzOERFOUQKLToxMEZEMDAwMDRDRjlCQzFDOTU1RjVEODc3NDMwMEFFM0NBNDU1ODcyOTQKLToxMEZEMTAwMEJGMkFDQzg0RTAxRjc1OTk0NzIxRkE0ODgyQjdDRENEMjAKLToxMEZEMjAwMEU5MjlCQzk2RkIyMUZGNUFGODkzRTFGRUQwOTMyNUY4MTAKLToxMEZEMzAwMEQ4RUZDNUI4NjVCRENCNDI3MUU4RjNGNTk3QTQ2NDFBNTYKLToxMEZENDAwMEY3QjdGREY1QkZGRkZFOTZFRkU3RDdBQTIyQkZDNjQ1N0UKLToxMEZENTAwMDcyNjlCRThCQ0ZFNUE0RTJEQjFCQzVFNzBFQjAxRjcwNTYKLToxMEZENjAwMDFFNkJENTBBOTQyM0QzQkZFOUEwNzkzNDFGMDYzOTgyQ0MKLToxMEZENzAwMDcxQUNFNTNEMDVBOEQ3OUJBQjdCNEEzMDVFOTM4QzVGQTkKLToxMEZEODAwMDg0NTY5M0YyMENERTlCRUY4MUZEMDhEQTBENkI4Q0YxNEIKLToxMEZEOTAwMEI4QzFGMTU1N0Y2MTY2MjZFRTdCNEVFRTdGMTlGNUQ3MkYKLToxMEZEQTAwMDdFM0JFOTJGRjhCRjE3QURDOEZGQ0YxNjkxNUM4QjM4QUIKLToxMEZEQjAwMDgzNjMzMTJFMTQ0QTg5RUVGODcxMTFEQTMxREM4RTZBRDAKLToxMEZEQzAwMEVBQjZFRTQ0M0I3MTdFNUI0MjdDMEZGRkIzREUxOEVGNzgKLToxMEZERDAwMDYzNkIzMkM4RUZDRTNBOENDRjFCMUU0RUZBNkU1MEZDQ0UKLToxMEZERTAwMEFGOURENjY1QjMyNTM4MEVGOTFERjQxMEU1MUQ5QzU5NUQKLToxMEZERjAwMDYyNjJCOEJFRjVBQTZGMTEyQUE5MzM3NkEzN0Q3RUM2Q0EKLToxMEZFMDAwMEM5RDc2QjQ2QTZENDNGM0VCMkJGRkFFQjgzRDZEOTU3Q0IKLToxMEZFMTAwMDgyRUI1QzZGNjJDMUM0N0U5QTcwOUQ2MTdEMUJDNTNBQTYKLToxMEZFMjAwMDlGNzlGQUUyMTI1Q0U3OEZGNzVGNUM4MkVCQkNEOURDNkEKLToxMEZFMzAwMEVFNDdCRTI5NzUwN0FGNDFGQzlDQkEzMjQwRjYxNUU2ODUKLToxMEZFNDAwMEVGMjAxRjlEMkYzRERFOTQ0NDhGMzdGREUzRThCMTJFNTgKLToxMEZFNTAwMDMxMUYzMjU5M0YzNkY0RTNDQkE4MUYzRDE2M0QwRkU1NjUKLToxMEZFNjAwMEMxN0M5QkY1MkZFQTQ5RkMxQkQyOUY2N0IzOTJGRkUzNEQKLToxMEZFNzAwMEYwMUYzRkRENDhGOTE4REQyQUQ5MjdCMkJGQzM1QUIwQjkKLToxMEZFODAwMDE4RURBM0MzNkY3OTdENjE2NUY4RkVEMzg1RkRFNUI1RjcKLToxMEZFOTAwMEIxMzBGQTU5RTRCRTQwREE5N0M5RjI3OEI5OThDRjAzODUKLToxMEZFQTAwMDk5RkVERjhDRjgxQkUyM0NEMjdGREMyMERFQjE0NTNFQzAKLToxMEZFQjAwMEU1NzZFRjZFQzVDN0ZEQzc5REU0NEY2RTNFMzRDRjg1MzYKLToxMEZFQzAwMEZFRTIwRjIyREM3RkRDRkM3NDM5Rjk4Rjk3NDQ1RThBRjYKLToxMEZFRDAwMDYyM0UxOUVCNTY1Q0I4MUY1OUIyRkJERDM0Q0MwMzkwN0YKLToxMEZFRTAwMEZCNUVEOEU3REU5RjQ5RjkzNUM2RkRFRjA3OTE5MzY5QzAKLToxMEZFRjAwMDk4MzcwMDcwQkY4RjcwQTc3QUUyMTZBNEZCNjZEOEZGMTAKLToxMEZGMDAwMDYxREU2MEIzMTYzRjg2RkQzNjdCMThEOTA1OTU1REM2NjgKLToxMEZGMTAwMEZEQTA4Q0VGNkUwQjU4NDhFRTZFRUI1NjIyMjhBRkIzNjcKLToxMEZGMjAwMDJDQzFBMjNDRDQ2QjJDQ0Y3NTNBNzU4MENGMjI5OUZFQTAKLToxMEZGMzAwMDE3OTA3RTA3RTJFQUZFNUQ1ODk3RkVBNzlFQURFOTQ0NjIKLToxMEZGNDAwMEJGM0Q2NkU2NzdBMTNDREJFQTE0RjI0QzIzRjlGNkRCMTEKLToxMEZGNTAwMDg3REQ5MTc1MDk3NkMzNkYyM0RDNEU1ODIyRjNDMTM0RDcKLToxMEZGNjAwMDE2RDU2MEJEMTZDREYxMUZDN0Y1NDY3OTFGNEQ5MkY3MjYKLToxMEZGNzAwMDg5NzUxOUFGQkY4NTQ1NDkyRjM1QjE5RUZFQkNCMEM0MDgKLToxMEZGODAwMEY3OTJFM0Y5MTgwNzM3RjRDMzVBQ0E3NUY0OTNEREU0MUUKLToxMEZGOTAwMEYwNTE5Q0FCRUJDRjU2NjM3Qjk4RUY5QjgxMUY5NjU1M0UKLToxMEZGQTAwMDBDRDBBRjVDMDc0OUJGQ0RDMjFGMUQ2QTM4QjEwQUU5NEEKLToxMEZGQjAwMDM3RDRBNUI4NzA3RkRERThFM0Y0REIwOEZCMkZDQzlCREEKLToxMEZGQzAwMDRERTY3N0Q2NjlDQzEzMUQ4RUZGN0ZERENGNzc5Q0ZGODIKLToxMEZGRDAwMDdGM0RBQzlDRkFDN0Y4NUJERkVGOTczRjlDRUZFNUZDRjkKLToxMEZGRTAwMEE1RkZCRTdGOUVERDBBRTdDQkE0NzkyNUVGNUI5M0ZEREQKLToxMEZGRjAwMEVFNzJERjc5QkVGMkYwOEIyNDdDN0NGMTBGQzZDNzcwMDUKLTowMjAwMDAwMjIwMDBEQwotOjEwMDAwMDAwRjIzMDI1NkJFOEZENDI3MjVDRTNBRjk2ODdGRkUwRjhDMwotOjEwMDAxMDAwQzYyMzg3MUU0QTMzODFBODU4NTIxNEY2NzJCQkNFNkY4RQotOjEwMDAyMDAwODgxN0NGNTAxRDdFMUUzNzU1NzkzRTQ1NzJEQzVEOUY4NwotOjEwMDAzMDAwMjFFMkVFOUM5RjVGN0E1QUE1RjU2QTEyRjFFMUE2NDM5MAotOjEwMDA0MDAwNEUxRkJFREFFMDU4NENGMUQ5RTRGOEU5NTJCNjdGMDYwQgotOjEwMDA1MDAwMkU1MTcyMUNCNTExRjlCOEY4Q0JFM0E5MTc2NTM5M0REQgotOjEwMDA2MDAwMjQ5Rjc0NTY4NDc5MEFDOTc5NUEyRjM5M0UxRDExNEM0MAotOjEwMDA3MDAwNThFRkVBMzJEODA4MEM0MUQ3MzYyRENDMzIxMjlFNEZCOQotOjEwMDA4MDAwQ0JFMkY2RjQ0QjIyOUZDODZCRTFFNzA1RUU3M0E2RkFDQwotOjEwMDA5MDAwNzExRkUzMzVGMTdDQTc3QzRGNjA3QUQ2MjQ5NEVGMDI4MAotOjEwMDBBMDAwOUZDRkRFQzA0QzgwOTc0N0NDOUQyNDRGQzI0RDBFMUY4MgotOjEwMDBCMDAwQ0EzRkU5Qzc5MUZERUYxMDcxOEJGM0E1RjM2RjY3MTk4NAotOjEwMDBDMDAwRTlCQ0JGRkU0RkUyRkI4NTkyQkVGRkRBQjhERDE2QzA4OQotOjEwMDBEMDAwOEQ4MTFGMThEMUVGNkIxODY3MkExQTRDQjdDM0Y1MzNGRgotOjEwMDBFMDAwMUNGRDJFQ0IwQURDOUU0NTc4RjE0RkE0RkNFNkYzOTQ3MAotOjEwMDBGMDAwMkZBOTk1RjE5M0U4MkY2MjA3QUMzQUZBMzc2REUyRkMyRAotOjEwMDEwMDAwMEI1QjlGMjNGNkVCQkVBQTU5OTQ5N0NEQ0Y4RkM4NzM5NAotOjEwMDExMDAwMzZDM0Q5OEYxQkZCRjk5RkRCOEZGREY1QkY5M0ZEQzg1RAotOjEwMDEyMDAwREM4MTc2OUNFN0E5Njk3RUNBRkI1RkVEMDRGODcxNUYwQwotOjEwMDEzMDAwRjhBODc1QzhGMzJDRjJEQ0M1OTdGOTVERjZGNkMzQ0RDNwotOjEwMDE0MDAwRTk2QUVGQjA3MEZGNjNFNUU3OTNGRjM0RjlGOUZCMzQzOAotOjEwMDE1MDAwRjRBMzBFREY0RjU4RTQ3QkM2RkMyMjlFQzY3NjI1RjgzQQotOjEwMDE2MDAwQjc0MzMxOUVBRkY3OTI4MDU3M0U3RjQ0RThDNUY0NkNBOQotOjEwMDE3MDAwRkY1MTVDQTc4RjhGREI2QzJDMUQ0QzlFNEEyRTE3OUI2QQotOjEwMDE4MDAwMDMwRThBMkYzNDc3RjJCQzk3RTZFNThDRTQ3NzMzRkFENgotOjEwMDE5MDAwNEZDQkQwQUYzODhCQTFCRDM3MzUyM0Y4MzNGQzdFRjU3QwotOjEwMDFBMDAwREI4RUIwOUE4RTdFRjdEOTBDRURCQkRFRTNCQ0ZFQTlFOAotOjEwMDFCMDAwM0JGODczNkMwRjJERUZBMTc4NDZDN0VDOEYyOEVGQUFBMAotOjEwMDFDMDAwRUFDRjlGQUVBQUFEMjQ3OEM5OEZFMEIxMUFDRkFEN0MzQgotOjEwMDFEMDAwOTFDNUUzMEZCMkZDNDNCRjNDRjE5MzVGRkZFMzA2OUU4MgotOjEwMDFFMDAwOUYxREYyRjg1REU4OEY5MDdFRjE1NDNENDY3RUE2RTZCNQotOjEwMDFGMDAwMDNEQzY4QUI1MkY5N0NEOEY3RjM4ODlFOUEwRjRDMkIzRQotOjEwMDIwMDAwNDdGRjI5RUJCNDk3QTM5RDVCRjUyQjA3RURGNzNFQkVBNwotOjEwMDIxMDAwMkI5N0YyMjRFQTNEQzEwRjUxM0UzQTJCMjM1N0EzNURBMQotOjEwMDIyMDAwNUEwOEUzQTBCREZCRjFGRUFCQ0IxMTZFMjlGRjM2QTM0QwotOjEwMDIzMDAwRkYxQ0M2REZFQzM0RkFDNzk5OERFN0Q5MkZERDlCNEY0MQotOjEwMDI0MDAwRkJDQjYyNDdGMDUzRUM2RkIzOURDMzExREUyM0NFQTMwQgotOjEwMDI1MDAwMDhCRjc5MzJGRjRCQkVDRjU2NEQzNDRFRjZCNzZEMTQwMgotOjEwMDI2MDAwMkY5NzcyNjFCMzk5MDU2REM1MDNGMkU0Nzg5NjJFRjI2QgotOjEwMDI3MDAwNEM0NDVFNjNGNzJDOUVBNzIyRUEwRThGMzFCRkYzODFCOAotOjEwMDI4MDAwQ0MyQjhGMjMzQ0M3QjNCNEFGOTYxRkU2MTg5NDJGNDBGNgotOjEwMDI5MDAwRkQ2MjdFMThDNTA1NTg5Q0ZDMkRBOUU3QjgxRDNEQ0ExNgotOjEwMDJBMDAwNjUyMTdBNzIwMkRGNTE5QzA2RTgwOUVERjk0QkUzQjE1MgotOjEwMDJCMDAwRTk3ODlFNkI3NDQ3RjQ1MkM0RjNFMTczMjZDMjkzMzYxNwotOjEwMDJDMDAwRUIzNThBRDNBNDJCN0NCQ0UyRjUzRDZCQzdBMjFGQzZERAotOjEwMDJEMDAwRjVFNjY1QjhBNDdBQkJBQjFBNTEzQTM1MjM5MDlGNEQyOQotOjEwMDJFMDAwRkI4Qzk2NTIxQ0FGRkFCRkNDM0M5RkYyNTAyQUY5MTdGOAotOjEwMDJGMDAwM0EwQTFBMjk5RkIyRjc2REFCRTEzQzRFNzIxOTY2Nzc0NAotOjEwMDMwMDAwNTNGRUU0QThBRTVGNTBCQ0MwNzk0MDE5MzIyRjc2NzIxQwotOjEwMDMxMDAwQjY4M0YwRDYxQzhFQ0RBMDFDOUI0QjNEMjQ2N0I1NDMwNQotOjEwMDMyMDAwQkZBMjM4QjVCNjU2NDMwOUM0REFDQzdFMTM5RTQzMEI0MAotOjEwMDMzMDAwQUY2MEU0RUYxQ0QzRTEzMkUxN0ExNThBRkM5OEJFQzNDQQotOjEwMDM0MDAwN0Y5ODE4QTRGRDhBOEMwRjQ0Nzg3RTkzQjk2NzE1RUVDOAotOjEwMDM1MDAwQzNCNDE1M0Q5Nzg3NzEzRDBFQjg0RENENjVEODVGQkNEMAotOjEwMDM2MDAwOTlGQzJEODc1MjE5RDI0RjYxNTdGMURENTNBMTVFQjgyOAotOjEwMDM3MDAwQzY0NUYxQjBCRUU3NkUyOTI0RkYyQUNDNzNDQzEwRjMzQQotOjEwMDM4MDAwMkNDQTM2RjNGRTBGQTU5QTUwOUY2OTlCOTgwRjQ3RDU0QwotOjEwMDM5MDAwREM1OUQ1MDRGNzgzNTA4NzdFNDY4QTNDNTUxOTNGNDU4MgotOjEwMDNBMDAwM0YxNEVBQTlGNEVDRTBENzMwM0ZCNkZGMUNEMkIyMTRGOAotOjEwMDNCMDAwN0UwRTQ5RTNGRTEyRTdCMkI3MUZDN0YzM0QzQjJDRkNBQwotOjEwMDNDMDAwOUNFNzkxQzMxMzY2OTNERjZGQURBNkUwM0E3Q0VFRTYzRgotOjEwMDNEMDAwRjk5NDM3NjY5QjBDRTc0MjA2RjA3Rjg0RjI1NjQ3MUQ3RQotOjEwMDNFMDAwRkEwNUQ3NkIzMDE2RjZBRjk5MzlCRDY4NkIzRDNCRDEzNgotOjEwMDNGMDAwQkZCODM4MkQ0ODc5QkE5N0I1NDU1NThBOUZCOTRFM0Q1MwotOjEwMDQwMDAwNTBBQjI3RUM3M0I2NzAzREQzQkM4RkVGQ0I5M0Y3MzU3MQotOjEwMDQxMDAwNUZBNjVGNkVDQjM2REEyREZERjU3RjkyRERGMjgzRkVBRgotOjEwMDQyMDAwRjFGRkM2RkQwQTMzRUVGMzkyRUQ5N0U0N0RERDIwM0I0QwotOjEwMDQzMDAwM0NBOUJGRTFFQzE4OTk4RjUyM0QzMDBFQjdBNzlERDI3MQotOjEwMDQ0MDAwNEUwQTFCRjI3NUFBMURFMjdDQTFDREQ4RkZFNTIzNUMwNAotOjEwMDQ1MDAwMzQ1Rjk5QkY5M0I1NTI1RjgxNzlGQUYxMUYzMEYyRDdCQgotOjEwMDQ2MDAwQzkzQ0EyNzAzNUNGRjcwOTlCNkM3NEVFRDBDQkRBMjk2QQotOjEwMDQ3MDAwN0Y2ODI0OEIyQTBBRjlEMzdBRTg3QzZEMzZFNjExQzFBRAotOjEwMDQ4MDAwNzdFQkIyNDc1MUJGREI5OTZGOEQ0QUYyNTI1NzEwNkUyRQotOjEwMDQ5MDAwM0JFNjlGNTBCRTZBNjRFQjIyMUNFNzNBMDc4RDYzQzdCOAotOjEwMDRBMDAwRkM5MzhCMzA4NUMwQkYxNUU1RUJGNDA2MUU1RkM4MDVENQotOjEwMDRCMDAwN0Q4Q0Y0OUIzQjlBRDNBMUJEOEVFN0ExQzgzQzEzOTlEOAotOjEwMDRDMDAwMTcyMkYxNTAyREYwOUIzQjc2NTExMUNBQzFCNTRBRjA2RAotOjEwMDREMDAwNTE3MUFFOTlDQkZGMEQ0RTcxNUUxOUVDNkJDRkMwNzlBNwotOjEwMDRFMDAwRTQzRUM2RkIwRjM3OThGODc5NjQzN0FGNzc4Q0QxRjlDMwotOjEwMDRGMDAwNzlBMDJGRjgzOUJCOEU3MjlFNzczMjI4M0YyNTA5QUYzRAotOjEwMDUwMDAwMzIzRkU1QzlCNEUwMTFFNDk3RTRGM0NCOTI0RTEyRDY0MgotOjEwMDUxMDAwOEZDRTQ3NkYzQkM0RURGQUVBMDYwQkNEQTM2RkM5MzUwQQotOjEwMDUyMDAwRTQ5N0VDNUI2MjYyQThGRkFCQkJBRDlDRUU5MkM2REJDRQotOjEwMDUzMDAwNTY2NzYxNTFFQzU3OEJEODUxN0VDQUY1RkYzMkJCMTYxNgotOjEwMDU0MDAwRDZCNTE0RkRCRTQ3NUE2QjJGM0EwNTM4M0VEQTFBQTBDRAotOjEwMDU1MDAwQjJDRkFFNzRBQTE3RDJGOUQyQjkyOEE5OUVEOEYyRjlBRgotOjEwMDU2MDAwQjU1QTBFRTZEQkM0MEIxNDIwOTlFN0I3N0UzNDkzRUE0NAotOjEwMDU3MDAwOTlGMTc3QjBGRUVBMTZDRkQ3MzQ5MEMzN0Q2M0UyM0JBMgotOjEwMDU4MDAwMTQ3OEZGRkY3OTdGQzREQjkxMTY3MzE5N0JGN0ExODc3RAotOjEwMDU5MDAwNjY4NjFENUY0MURGRkQ5MTI1RTc3MTlDNDFCREQzQzQ5NwotOjEwMDVBMDAwN0E1NkM1Qzg1RjI0RjQ1RDI1OTc4NzVFODc4NUVDMjU1QwotOjEwMDVCMDAwQUZDODNGNjUzNTIyMUYxNTIzM0I1MDVGOTk1MzRFNzFERAotOjEwMDVDMDAwN0IwN0QzMEZDNEIwM0Q4RjlGQ0Y4Mjc2QTJGRjk1NjM4OAotOjEwMDVEMDAwQjg3RkRBMjZFODgyRTU0OUJGNTQ0RjE4RTVEQkNBMjIyNgotOjEwMDVFMDAwMzc3RERGMkY4RjBGNTgyM0RDM0ZDNkM3N0ZFM0U5MEIzMgotOjEwMDVGMDAwMjhCRTI1RjM2QTE5NzNFNUNGQjk4MEYyNkMwQ0Y1RkJDMAotOjEwMDYwMDAwRUNFMjFDQTZFNkNBQzc3M0VDMkJDREMyRUUxNUY1MzY5QwotOjEwMDYxMDAwNjczMEM1OEJGMzQ0M0UwNDdCRUU4RDJCQkY1Qjg2N0MzRAotOjEwMDYyMDAwNzRFNkUwRjc0N0EzNUNCQkNBMDJGQjgyMjFFNEQ4RUU4NAotOjEwMDYzMDAwMUMyRUM3RkFDQzhFMzUwQTdDNTdFMzBDOEVGMEMyRkExQQotOjEwMDY0MDAwQkY5NTNBNzcwNjFFMjlBODFCMzFDRDgyNDcxNzU4Rjg2NwotOjEwMDY1MDAwNTExNUYxOUEyOUU4QzQzRDg3QzNFN0FFMDkyODk4Nzc3OAotOjEwMDY2MDAwQkFEMkNFQzdDRDBDNkE3RTNBRjcxMDlDQTM1QzA3NzA1NQotOjEwMDY3MDAwQUY1NEI4QkM4NjhGRDJDOThFMkFENUQzRjExQzYxQTNFMgotOjEwMDY4MDAwMzhEN0FBMEFCOTcxNDlFNzI2MTVFREY1OUZCN0JFMzVFNwotOjEwMDY5MDAwNTVEMzA2RTBGQjg1ODg4N0ZGQTJDODc4M0VBMkRDQ0I1NQotOjEwMDZBMDAwRUQ2MjU5Q0U1NkY1MEI5MEZFNTZBREYwQkMzNkYzMTIwNgotOjEwMDZCMDAwN0NDRUU5RjhDQUI0NjU5NTk4QTc3RDU1NkE0QjI1RkFCMgotOjEwMDZDMDAwNjkwNzNENEY4N0U3NjUwOTc1MkI3RkFGRDExNjJGQzBBRQotOjEwMDZEMDAwNzNFNjBCRURDMTQ5ODg4RkNGRTdCRDdCMjdDQTg3M0IwNwotOjEwMDZFMDAwNzNERjc4MDdGMzI0REUzMDBCMzk5MUFGODhGNUVFOTg4RAotOjEwMDZGMDAwOUUwNkVCNzlBQ0Q4MkRGMjNDNkM0NDBGQzdDNjcyM0YxNgotOjEwMDcwMDAwNjQ3RjFFREIzODg1RjJGQTY2Q0VFMUU3NDlBRjY1QjE1QQotOjEwMDcxMDAwQjYxRUY4OUU5QzE1RDAzRTYzNzIxMUQ5OTEzMzQ1REUwQQotOjEwMDcyMDAwQzU4Q0I3MDI2OUU4MTc5ODcxNDM1QzQzMzkzQTlDNUQwMAotOjEwMDczMDAwNzQ5NUQ3QUNGNzI0RjBDM0Q1QkFCMTdFNkRBOUIxRkVEQwotOjEwMDc0MDAwMzU5RkIxRkU4REM5N0YxQTlCNTg3RkQ5RUU5RjhERjRERQotOjEwMDc1MDAwRjRCQ0MyRjMzRUMzOTczMDE3RDFCRDQ3MDlBM0ZEMzJBNQotOjEwMDc2MDAwRTE5OTVDNzEwRTk3RTcyN0ZFQUJEODc3M0QzMzk5NTEzRAotOjEwMDc3MDAwN0JENjNFREIyRTNDMzcyMEZERDdBQTY4OUZFMDY1QjZDRQotOjEwMDc4MDAwQzIwQzdFRUYwM0VBQkJCODIyRjIxQzNEMTREMzYxMDcxMgotOjEwMDc5MDAwNkY3NTcxM0YyRUJDNkI4MTdFMEVDRUQzODkzRkFBNDYwQQotOjEwMDdBMDAwREE1MjkwNEVCMjFDMjY3NjM5RjI1MkE1OERFQzlBMjM3RAotOjEwMDdCMDAwODJFRUU0QjlFQTJBOEQwNTMwQ0YwMjg2OUM4M0U1MUJFMAotOjEwMDdDMDAwNjZENzhCRThBNzBFN0ZDODE4RTdEQjY5MUFFNTVCOEE1NgotOjEwMDdEMDAwMzExODVCNDFGNTg3MDQ1RDFGOTFGMkZGMDc5QTU4NTc2NgotOjEwMDdFMDAwRTA0MDE4RUZFQ0ZBNUMxRTg3MkU2NTc0NUVGRTZDNjVDNwotOjEwMDdGMDAwMDlENTI1REQ0QkZFMDFBRTFFOERBMTQxNDVGNDI3RTk0QgotOjEwMDgwMDAwRjlBNzRFMEJEMTgzN0FCRjQ5RjhCQjM0MTMwMjU5RUFEQQotOjEwMDgxMDAwOTI3MDgwQjhDOTQyM0RDOUM4RkU5NTcxQkE3QzlCNkM4NAotOjEwMDgyMDAwRDdGQ0Y4N0UwRTkzNzU3RURFMkI0QkQ0QTEyOTZBQUFFNQotOjEwMDgzMDAwNDBGREZDRjJFRjQ4N0YzQjdDNDE5Qzg3MjVDRDQ2RTc5RAotOjEwMDg0MDAwOTM4NkUzQTM1RDgyN0Y3NjI1RjE5MTRCQkI5QUY4RTgwRQotOjEwMDg1MDAwQTdDRTkyM0IwOEVFNkI5QzJFRDRBRkE1MzA5N0JBMEM3NgotOjEwMDg2MDAwMkFGRDIzMkFGMDNCQ0U0RjZBOEE0RjQ3QkVGOTY2RUQzOAotOjEwMDg3MDAwRjFBOTVBODI5Qzg2RUY5QkY4RjdBOUM2RUZCREYwN0RERgotOjEwMDg4MDAwNDZDMkY3NjlGMDdERDlFMEVGNzczQjZENTFEMzQ0RUM3OAotOjEwMDg5MDAwQTc0QUVGMjE3RDE4QTVDOTVFMjNFNkFENjZGMUVGQUU0QwotOjEwMDhBMDAwMTE3OUIxQTNEM0UwN0RENDVCQTVDNjNDMTMzNkQ5NjdEQgotOjEwMDhCMDAwQTNGQ0U0QTRCQzkyQUI5NEU1MzlDODU3NTdEQjlBQkFDMQotOjEwMDhDMDAwN0JBMEJGOTdDNTNBNUU2NTBBN0VFNjgyRTcyRkNGMkRGMwotOjEwMDhEMDAwMzk4QUZDNTc2QjhCNjg5OEQ3NzcyRDhCQUVDMkM1RURFNAotOjEwMDhFMDAwOUIxNjdDQzQ1RDRDRjJFMTU5RTQ5MzY2MzUzODM2MDNCRgotOjEwMDhGMDAwRUE2N0NDRURBMzZGMkQyMkZFNzlDRTlCMzkxODVFNDlCNQotOjEwMDkwMDAwMjcxMjVFQTQxN0E0M0Y0OTJGQzk3MEY3QUZFN0Q3M0I2MgotOjEwMDkxMDAwMjkxMTZGM0JEODUxNTg0QUJCOEFCMTE2OUU3N0FERTc3MwotOjEwMDkyMDAwMEZDQzBCODg2ODg2QUQ2NTM0REEzNTJGMkYwOTkzREM0MAotOjEwMDkzMDAwQjhDQUZEMDBFNTY1QkQ5QzFCRkM0Rjk0Njc3NTE3N0UyQQotOjEwMDk0MDAwNTJBMEUxQ0JERTc5NjM3MURGMDBGMEM2RkUzN0UxOTU5RQotOjEwMDk1MDAwRjZFM0EwQkNFMzBGMkQ4NkJDRTNFMUY4NEM4RTFCNDIwRQotOjEwMDk2MDAwQkI1MEM1RkNFNDlEOTQ0NzFDOUFFM0YwRTE3OTkxMTBEQgotOjEwMDk3MDAwRTZDMTU2NTJGQzhBRUNDMkU3MTQ2RTZGODcxNTlCQjAzNQotOjEwMDk4MDAwRTNDRTM3M0Y5OTcxN0JBRkE5REZERTMzRTRENzc3OTRBRAotOjEwMDk5MDAwNzNCODNCNkVENUU1RkQzNURDNUU5Q0M3QjgzRDM5NEI4MQotOjEwMDlBMDAwQjQyRjc0NTFCQkNDQzNFRkQ4QzlGRDg2MUQ0RjhGRDU3MgotOjEwMDlCMDAwQjE1RkIwMDNDOTdFNjBFOUMyQ0UyQzMyREU5QjgzN0Y3QgotOjEwMDlDMDAwNEFENjQwREVGODY2MzNCNzVGQjc5OTdDNTU5NEU3NjI0NAotOjEwMDlEMDAwRTFGN0UyOUM5MUZFOEMzMTdDRkM2NEZGNjI2RThFNjJEQQotOjEwMDlFMDAwODg0RkY3RDdGRjRFRkVDNTUyNzczMDNGMDdGQTVCNTg2NgotOjEwMDlGMDAwRTYyRjUwNEMwODE3RjczMzAyN0QzRTFDNjM5OEZFRDY1NQotOjEwMEEwMDAwMzIxQUVERkVBQjU5Q0I5QkE2NjJBMkNGRTIxQ0E0Q0Y1QgotOjEwMEExMDAwMDk0MDlGQzUwNkZBMUM5RDkzQzlFNTI0QzIyNUU5QjM4OAotOjEwMEEyMDAwOUYyRTRCOTNGM0NBODIxNzYwM0YxREVFQ0U1RjM1QTMxNgotOjEwMEEzMDAwQkREQzZERjVGMUJDNUE5RTI3OTgyQzA3MTJFMDU5QTAzOQotOjEwMEE0MDAwNzE3ODNDQUE0QUYwNENDMjcxOTNFMTM5MUYzRTQ5QTQyNwotOjEwMEE1MDAwQ0Y2Q0M2Rjk2MTM4N0VDOUQ2NThEODU5MzFDMDJGMkYwRQotOjEwMEE2MDAwREI4MzM1MDg3RjNGREZBQ0UyRkJBMzQxNzBBQjBFQTIxNgotOjEwMEE3MDAwQUZFQjZGRTQ3MTk0NTAyQUQ3NDcxODRGQzk4MUYxNjdFMwotOjEwMEE4MDAwODlGMUFGNUZDQkU5RjBGQTdGQjExMEREMDJGODUxODQ1NAotOjEwMEE5MDAwN0ZCNjY4OUZENURENDQ3OTU0QjM2QkNDMjcxMkVEMDA0NwotOjEwMEFBMDAwMTlCN0E5MTNFRkNERjE5NDlCOTEwNUU2Q0MzNEM2NEI1MQotOjEwMEFCMDAwRUE2RUUyRjE5QUVCNTg4QjE5RTFCRDdFOEVCMTlGM0E1NgotOjEwMEFDMDAwQjZGRTEzQ0MwQkFCQkJDOUY4M0M5OEQzMUY2NzE5OEI5MAotOjEwMEFEMDAwNzE5NkEzQzI4RkQwMDdGQzgyRkNGNEQzQ0NDNTBGREY4NAotOjEwMEFFMDAwMEFGNDNCRjY4NzY1MTVFODc3QkEzMjZCQzlFRTRENTBDQwotOjEwMEFGMDAwRkZGMUI2RjE1NEZGNjlENkI3QkZGMzA2QjZFRjI4QTFGMAotOjEwMEIwMDAwN0EwRDI2QjlFMTNFMDhGOTExRjU0REQ1OERENzE0QzFGRQotOjEwMEIxMDAwQjg0N0VEQTJERjVCRjkzOTAyNkY0QUIwNjMxNkJDRTc1NAotOjEwMEIyMDAwOUQzODhBRjIyMTZCODRCQ0U5NUJDOERCQUZCREQwQzlCQwotOjEwMEIzMDAwNTM1RTZGRDZDOURGNTg5M0MyRUZGNTc5QURGQ0JGMkI3QQotOjEwMEI0MDAwMzAzRkI3NjY5NEE4NTczQzNGMUVFQjQ3OTU0RkU4MUVEMQotOjEwMEI1MDAwODBERTI2ODc4NkY4NkZDRUU1N0VEQTA5QTU0QTc0MUMwQQotOjEwMEI2MDAwRTBBNTI2NDNGNERGQzRFNzM1QjNFMkQxNUNFNDhGOUExNQotOjEwMEI3MDAwNkFERUNGMDRERkI0QjVDNUY4OUVFOTJDRDU3QjczNkQ3MgotOjEwMEI4MDAwNjkyODBGMjU5RkI1RTc3MEZEMkNFREE5ODBFMEZCNjc3NAotOjEwMEI5MDAwRkNFRkI2OEQ4MDdFMDMzNkM1ODc1MzBDNEM3RTk3REYwNQotOjEwMEJBMDAwNUZFNUUwRTdDQjAyRkUyMjBERkRCQ0QzRkQzQzdGQjM0OQotOjEwMEJCMDAwREFCNjIyMDdGN0U3NUYwRjVBMkE3MTVFMkU1QkY5NTEwQQotOjEwMEJDMDAwQjQ2RkQyMjc0RjlCNDRGOUJFMzY2NjQ2M0QwNzc0REZBQgotOjEwMEJEMDAwNDE3Qzc4RjEyNzA1Njk0ODZDMEUyM0RENEJCQTlBMjVENAotOjEwMEJFMDAwRTlCREM2NDhEN0MwQUZEQjcyMzJCRjVDNUUxQkU4REEzNgotOjEwMEJGMDAwM0U0MEQ3QzNEOUI5MDBENzhGMDlBRUE5NDZGREQ1M0YyRQotOjEwMEMwMDAwNEUxMjVGMjY4RjNCOUNCQ0MwQkY0NDc5M0EwMDVGMjdFMQotOjEwMEMxMDAwRjE1RjFFNjZDNTE1MjM3RkI2NEJGRUVDNDIzODJDQTY0RAotOjEwMEMyMDAwMTg5REIzMjk1NDdDRTNFOTYwRUEzMDc2ODY4NDJGMUY0RgotOjEwMEMzMDAwN0RBRTE1ODNFMUMyM0Y0RERBN0ZGQ0NGODNGQkYyM0NGMgotOjEwMEM0MDAwRDEwRURGRjk1OUM2MDA1QzMwRkUyQjI0MEY1NzcxNzhBNgotOjEwMEM1MDAwQjYyQjJENUNCRTA4N0I1Q0VFRTc5QkU1N0NCQjhDRjM4MgotOjEwMEM2MDAwQUQ0QUUxRTdERUJERTg3NzIxREY3QkY5Rjg3RUI4Q0Y1QQotOjEwMEM3MDAwNjMxREU0N0M0MjQyNkZDRkIxMDU5QzE2OThEQjc1RUU5NAotOjEwMEM4MDAwN0FBMjlGMUI1OEY4NjlCNDhGOTYzOTgzRkYxN0YxNzRDNQotOjEwMEM5MDAwQzQxNDNFODRGQjlDODVDQzRGRjE1N0EwOEY3NzcyMTIxMQotOjEwMENBMDAwRUMwRDA5NkYzMjlFOUE4NzkxQTdDOUYzNDlDNkNGQzA1MAotOjEwMENCMDAwQkFDNUM4QkU5M0U3RDhGQUU3N0I5RUYzOTQ3Njg5Qzc5NgotOjEwMENDMDAwNjJGNDc3NjUwOEZGNTQ4NkYwNDcyMTQ1QTE3RTlFQzlFRQotOjEwMENEMDAwNTI3Q0I4MkY5OEVFNTNDOEJFOThDOTZDMjQ5NzY3RDYzQgotOjEwMENFMDAwNzI3RDlFRTFFMEY2ODdENEZCQzNGMUM3MTU5NzMzOTI3RQotOjEwMENGMDAwNTczMzFCOTkzODM3QzdFNzk1NEM4N0Q5QUNFNzBFMkM4QgotOjEwMEQwMDAwNjdEQUY0QUQwQjkwRUZEMTRFRDEwN0UwOUZFOUUwN0VCQQotOjEwMEQxMDAwRUNFQzVDMjEzRjU4Q0YyNEQ0RjNGREY1NDE3QUJFNjc1QgotOjEwMEQyMDAwMTJDQTlGRTRGQkM5NjY5RUUzRkVEMjhDNzM4Q0NBOTlGQgotOjEwMEQzMDAwQkU3NzI3QTE5RUNGQThFRDk5ODQ3MkNDRTlGMjdCNzM5MAotOjEwMEQ0MDAwMjcwRERDMUY5ODhDQzdEMUI5MjYxOTg3M0IyRkZBNEM4OQotOjEwMEQ1MDAwRTYxRjE5M0Y2QjczMDZDN0UyMzhEMkNGNzE0Njg5NTUzQgotOjEwMEQ2MDAwRTE0QjE1MUU5N0U4M0Y1ODg0NzRFQzc2MTU0RDQzRkYxMAotOjEwMEQ3MDAwQzUxQzFCRTgyMzE4QkFDQjE1QkMzMDE3RTlFRDhGMDA1MgotOjEwMEQ4MDAwMEY2RTBFRjE1NUMwRTM3NTM1QzE3QjM0M0UyQ0UxRTFBOQotOjEwMEQ5MDAwMzY4MTg3MkI4NTVFM0RGQkIwNEFGMTg5MUE3RkU5NDM5NgotOjEwMERBMDAwMTg0MjA4QkQ2MjY2MTFFMjU3M0ZFOTQ1NzlCRkQ4NTkzQwotOjEwMERCMDAwMzBBMEEyRjhGRTYzNEVCMjMzMTZCRjVBNEZGMTk1QjE4MAotOjEwMERDMDAwNUI0QzRDNEZEMDkzRTMyMjI5ODY3QjMyMjZFQ0NCMzAxMAotOjEwMEREMDAwRDQyRkU4Q0MzNUJDN0Y2MUQ3Mjg0MzdCNzk3NEJDQTE4NAotOjEwMERFMDAwRkRBMjU3MkEwQ0Y1NDlCMTI5ODZGNzJGN0VBQkRBNTBDMAotOjEwMERGMDAwQkZBNEU3MUFDM0ZCNTMzRjk4NkRBODgzQzZEMDcwREUyQgotOjEwMEUwMDAwN0I5RjU1RDgzNjk4Rjc2NUYxNkYxOUJFRkZDREI2MTk5RgotOjEwMEUxMDAwQUY2MEJDRjNBNEQ4RjdCMkIwM0Y1NjBBNzg1ODIwRTlDNwotOjEwMEUyMDAwRjZEQzdDNjM3RjUxMjVBQTU0MjFERkYzQkYwNUVCNzkwMwotOjEwMEUzMDAwQkVGNjM0QzA1QzYyQkYwQkRCOERGNkM0RTIyREM2N0ExMQotOjEwMEU0MDAwNDNGN0E2NTUyODFCMDdFNzc5QjQ1NEUzNTUzOUM5NzkwOAotOjEwMEU1MDAwMUUzNUFFNzkyNkE0Q0Y1MDJFRDgxN0UzMTAxMUVDNjJDMAotOjEwMEU2MDAwQ0MzMzFCOEVDRkJGNkNGRDRCRDhFODJGNUI3RkZFRkVEMwotOjEwMEU3MDAwMTYwQkQ5RjU4QjVGN0RBQTJBMEE4RkFDNUVFM0ZBREJFRAotOjEwMEU4MDAwNzVFM0ZBQTc5NjFBRDdERkU5MzNBRTdGRkE2NEUzRkE3RgotOjEwMEU5MDAwQkJGREM2RjUxRjUxNkI1Q0ZGQ0M4MDcxRkRCM0VCOENDNQotOjEwMEVBMDAwRUI5RjEzMzRBRUZGQzgwNkUzRkFFN0I3MThEN0JCNzA2MQotOjEwMEVCMDAwOTk3MTNEOEJDMjRCMERFREM5RUIyRkU1NjVGMTlBREJDNgotOjEwMEVDMDAwOENFRjAxN0E0RDA5NzQyMEU5Njg0MUEwODFGMjc3QzY2MAotOjEwMEVEMDAwQjQ3RkNGMzA0RTMyM0RDMEJFRDE0NEY3QkZDMTNFNkU2RAotOjEwMEVFMDAwOUI3MkZFRjQwMUQyOEFGQ0JEQzlGNEYxNkZCOUMyRUU2NwotOjEwMEVGMDAwMTQ3NDAxRkFBODEzRTUwQUQ4MTc0RjYxNTkzNzU2RDg2OAotOjEwMEYwMDAwRkI4MUExRUQwQjI5QkYxMkY1NzlFMkJFNzgzOEI5MzYyNQotOjEwMEYxMDAwNDg0Rjg5N0RGMkIwN0EwQUY3QzlGNjgxN0RGMjcwRjQwNAotOjEwMEYyMDAwN0IxQ0IzOEZDODhFNUE0RjdFQTUxQjVEMUM4RTRGRjE2NAotOjEwMEYzMDAwRDEyNUU4Q0Y3RDgyRjRGMjcxMDA3MDMyQzA3QjFDRTdDRQotOjEwMEY0MDAwMDNFMzFGNEY5OTQwRkU4RDZGQjMyOEQ5RURGRjgyMTkzRgotOjEwMEY1MDAwOTYzMEQ4Q0Q5OEE4QURFMjNENEYzQTk1RjU0MjZGMkYyNwotOjEwMEY2MDAwMTRGRThGODVGNkUwNUJCOURDRUY1MTk4ODVFM0U2QzVBQQotOjEwMEY3MDAwRThCQzE0N0I2REM0NzlERDIzNzEwMkUzMDgyMDc4NEY0RgotOjEwMEY4MDAwNjExQzAxQ0E1RTNCQTc5QkQzNTJBRUY4OTlFRTQ5QzBFMwotOjEwMEY5MDAwRTdGQ0U5NEEyOUQ5QjU2QTBBRTUzRENEQkY0MTIxRkQwMwotOjEwMEZBMDAwMzRGRjdGNzgxOTE3RkEyQ0I5NUNCOTRDRTJCMzVERDhERAotOjEwMEZCMDAwMDNEQzJFNDhDN0MzOUExNDc3NjI0MTA3RTFDREU3QzIyQwotOjEwMEZDMDAwNzU4NkZFQjgxRkZGNDdGQzdDQ0RFMzBBRDMyNjY3RDBBOQotOjEwMEZEMDAwMzEzMzVBNjc1QzZGM0MwRkE1REEzODlDOEY5Qjk5MERCMwotOjEwMEZFMDAwRjEzOTgxMDVDOTBFQkM1NzAzRDFDNkZCMUJDRkZCN0I3MgotOjEwMEZGMDAwNjMxNEZBRDM1NEY1RkY3Q0FEMDZFM0NGMzgyRUZBOUY4NQotOjEwMTAwMDAwMUQzRTg2RkU2NkQ1RUI2M0U4QkYxQUY0RkNDMDE0QkEzOQotOjEwMTAxMDAwMjRBM0JGQ0VGODdCRjg4Nzc4OTE3RUMyM0M0MTJGQkJEQQotOjEwMTAyMDAwOUQ4Q0ZCQkQ5MkZDODYyMzU1OTBDMDk4QkY2M0U2RTc3QwotOjEwMTAzMDAwQzNCRERBMTZCRTlGM0NFNjVCNjM0RDk4Mzc2MzY2MzdFNwotOjEwMTA0MDAwOUVFN0ZCMzI3QjA4RjM2RDRGMjdFNEM3QzNCQTBDNzlFOAotOjEwMTA1MDAwOEZFOUI0M0NBRUVGNTdCNjM2NUM4NjcxQTI1RTExMDdERAotOjEwMTA2MDAwQkJBNzM1NzgxOUFFQjdBQUY5MjgyRjBFRUY1NzcyMjcwQwotOjEwMTA3MDAwN0M2RkYxNDA3QjAyOUY2QThFMDY0M0RERUMwODEwNUVCOAotOjEwMTA4MDAwNTZCNUI2MTBERDk4QzUzRDUwQUJGMzZFNzMwNTEzRkMzNQotOjEwMTA5MDAwMTIxNzhFMTRGNjg2MkRDQzVDNTk0Qzk4QzZGMEY3QzEwOQotOjEwMTBBMDAwNzQ4NkYzNTU1RERBRTlDNDdEQThENTBCRkQyNUNBMkJGRQotOjEwMTBCMDAwQUQ5MDI1RkFBREQ3QjRCNjEwRENBQjk0NjAxMDNCQjM1RAotOjEwMTBDMDAwOEU2NjUxM0JFMERCQUFFMTU5NTQ3OEJFRjUyQTkyNjc1RgotOjEwMTBEMDAwMTZFNzZEM0VCQ0Y3NjczOEZDNTlCRERBRTc4OTcyQzg4MAotOjEwMTBFMDAwM0ZEMjI4ODdFRTZGQjU1RDhFRjg1QUQ5QkE4Q0M2OTM3OQotOjEwMTBGMDAwNzg2QjZGNzU1RDhFRjU4REFENUVEMUJFODJEQTREQjVDNAotOjEwMTEwMDAwQkE4MkY0NzExQTY4MjE4NjcxMTZBREM3ODk3MTNEQjAzMwotOjEwMTExMDAwMzMxOUM2MDNDRDVFNUIwNDk5QzhFQUUxRjBCMkEzMDVCQQotOjEwMTEyMDAwNDQxRjczNUQxQzA2RjQ4REU1MDM3REJDQjNDQzRDRkIwMgotOjEwMTEzMDAwRDNEQkYzMURGNEZFRURBRjhGNzlEMTBGN0M2MDAxMUU4MAotOjEwMTE0MDAwNTFGRjhBRjlGNDhGMjNGMDY3MTE3Mjg4NjlDMTAwRjJBOAotOjEwMTE1MDAwOTUyNTU3MjM3Rjc0ODY2QjM2QURFM0RGREE5RkM0QkJEQQotOjEwMTE2MDAwQzVDRTI4MUZENDkyRUYyMEJCRUI3Q0UxMEM4RDE0Rjc4OQotOjEwMTE3MDAwNTAwOUJDMjdFMzBGRjA0NDcyRjQ3NjgxQTdEQkVGRTI1RAotOjEwMTE4MDAwN0VCRURCRUY2MDk0QzdDRTk2QzE1RkQ1MDA1RDhEMTQ0NwotOjEwMTE5MDAwRjIyNTlCMDVBODZDNkYwNUMxNTI4MkVCNjU2MzQxMEI3QwotOjEwMTFBMDAwRTg3NUQ2NDkyRkRCRDFCRjgzRUQ3RUNEOERBMUVBNEQwOQotOjEwMTFCMDAwMzU5RTU5NTg2RTlDN0NBQTFERDlGMUJFNEIzRjhCNjE2MAotOjEwMTFDMDAwODlCRTc0QzQ5N0FCODE0NUYwQ0MxRkM1OEUzRDc4MUQ5OAotOjEwMTFEMDAwMzVBRkE3ODlGNkI0M0E1RTRGMTdFREU5MDE1RUNGRjc1OAotOjEwMTFFMDAwM0ZBOUQ0MjA2MDQ5RjE5NzdDNDdDNkQ1QTM1MUJFMkRCNQotOjEwMTFGMDAwNjBGQzdDQjJCOEU3NjAzQjEzRjJDMjkxMzFBQjA2REIxNgotOjEwMTIwMDAwNkY2Mjc0QkU0MEI2RkY1MEI0RTczODRFQUMyOTQ2MzkyMQotOjEwMTIxMDAwM0NDN0Y4RkQ1NjgxODc2Q0M3ODlGNkU5MTQ5RjMxQjY0MwotOjEwMTIyMDAwQ0JGODRBQTZFM0VDMkJGNDdEOTlCMUZENDFGMUJERDM5NwotOjEwMTIzMDAwNzEzNjM2MUREQjQ3MUJDN0RGMjBEQTUzMUQzQ0VGMDgzNAotOjEwMTI0MDAwQzQyMTNGNDcyRkRBRUYxNUVENzY2Q0M3RjE0QjhERUREQQotOjEwMTI1MDAwNkJDNUY4MkI5NTAwQUQ0MzNGOUY4OUY4RTQ4RTU2OURGMgotOjEwMTI2MDAwRUFDOTdDRjZFQUM4MEM3RThFNTlGMDk5NkIxOTFCRjIxQwotOjEwMTI3MDAwRENGQ0FCMjM3OUJFNEM5QURFRTNGNzBGMjEwRjY1N0JENAotOjEwMTI4MDAwODY0QkEzQjhBRkVBQjUxMDFENTkxRDQyOEUwODNFRUMzRgotOjEwMTI5MDAwOTcyMzRBOEI4RjEzMTdGNzk3N0YxOTNEMDNFMTdFOEVCMwotOjEwMTJBMDAwRjJBQzAwRkU5MDlFRjNCRTYzNjJDMTA0Nzk5NkRCOThCNwotOjEwMTJCMDAwQzI4MjA5RUY3QjE3NjQxOEVBNTkzN0U1MUFERUY3Q0NDQQotOjEwMTJDMDAwMTk2NTY4Nzc1NDhFMzdCNEIzNTgzRUYxQzc2RDgyQUU1NgotOjEwMTJEMDAwNTJDQTJBMENFREYyQkUwMkE2NzMzRTkyNzZCNTc5RjQ5QwotOjEwMTJFMDAwMTRDMzdCNjc0QkY1NzRBNEVERDM1N0NCRkJBQjdDMzZCMwotOjEwMTJGMDAwOTQwQkI3Mzk0NzY1MjMxRkZFQTQ3NTMyMUFERjIwRUYyMAotOjEwMTMwMDAwNkNBMjc0ODlEMjRCNDdDOTU2QjZFQUEyNUU0QUY1QzdBOQotOjEwMTMxMDAwREMzQ0FGN0E2NUFCOEZENzhCMTg5RDZGNUVEOTVBNEI4QgotOjEwMTMyMDAwRjVDNzgxMkZCMUZDRDc1NjNGOTU3QkEwMEUxNjBFRkI1QgotOjEwMTMzMDAwMTFGNEFGNDMzRjNCQTE3RkFDM0YwMkZENjNCOTFERkFGRgotOjEwMTM0MDAwQzdGMjg3RDAzRkI2NkY4NTdFQjFGRTEwQzA4NUU1ODNCQQotOjEwMTM1MDAwRDAwRjNFN0YwMEZBQzdGQUE2RDYwMEQ1RUY2QkFEQTMzQgotOjEwMTM2MDAwRkE4NkQ2MjA5NUY3QjYzNkQwRjNCNUFEMkQ1NDVGRERBRAotOjEwMTM3MDAwQkE4Q0NBN0I1QUMzNTRBRTZDNUQ0M0VEMTZBMTM3MUZCRAotOjEwMTM4MDAwMTNFNzFGMUY5QkM2Q0Y3RDI3QUY3RjQ2OUVGMkQ1RUU4QQotOjEwMTM5MDAwQkJBODA0NDU1RTY1Qzg5M0M4QzhDMzdENzVBNzMxMkYzNwotOjEwMTNBMDAwMTBGMTQ3NzBEODM5MUU5M0UxMTgyQkUwMThDRjYyMkI0QgotOjEwMTNCMDAwNTJCOURDQTAzOEVCOTgyRURGRERBOUMwQTcyMzVCRjg3QgotOjEwMTNDMDAwQkExNzc1QzVBOTNEQTc4MThGMzc1NkNDOTM3OUMyMkMyMgotOjEwMTNEMDAwQUY4QTFGRUZDNUY3N0E5NTU4NzUyQThGMzc5MzFGODMwOQotOjEwMTNFMDAwNzkwMTNGNTVFMkRDMzM5MTc5QzQ4NDcwNjk5MzQxN0Y4MAotOjEwMTNGMDAwMjdDQ0IzMUY1RjZFMEUyN0UyNkQyODc4MkJGMjc4N0MyNgotOjEwMTQwMDAwNDNBREVDRTRGNzlCRDRCNjQ3OTFDRDUyRkMyRDc0QkZBRAotOjEwMTQxMDAwODlBRDJFMTBENUEwRjQwNDgyNzQ0RkMyRjg3MzMzNjBFNgotOjEwMTQyMDAwOTMwNTcyRUREQ0U1NEM4NzMyQUZEMUI4RkZDQTVENTA1MQotOjEwMTQzMDAwNjFEOEU3QThFNzM2MzJGRDIyRThCN0NDQjg0RjRBMTlBMQotOjEwMTQ0MDAwN0Q5QkUxM0I1QkRFRjcwQ0VEMTZDRkREODZGNkY5Qjc1MQotOjEwMTQ1MDAwMTRBREYyMjIzRTQ3MzI4QTNCNTlEN0FGNjAzOTAwRDdFQwotOjEwMTQ2MDAwQzI4RTREMDQ1NzUwRTBCRDU3RDFGOUZERURGQkM1RUZERAotOjEwMTQ3MDAwNDQwOEZCRkZDNzJFODEyRkRCN0FEQUQ3OEU3NUYzNkExQgotOjEwMTQ4MDAwNDk3QUQ4ODRGQUU3RTNBN0QyNDk4RUVFN0RDNDQ0RkVCOAotOjEwMTQ5MDAwRUQ3MTJDNjI0Mjc5MzMwMUNDNDg2Q0JGMDA2RjcyNTZGQgotOjEwMTRBMDAwRTlDQTFDMTVFQkU1NEM1N0IxN0UxMThCRDNCRTA4RUM5NQotOjEwMTRCMDAwRkYzQUE0MTdCMEZGMUZCMTQzRkQ0QzdFRjBDNzNDQkZGRAotOjEwMTRDMDAwMkI0QTdBQkE0NEFDNjc4OURDMDc2REQxOTJGREMzNzNBRAotOjEwMTREMDAwRjNDODVGNjMzQzA3RDYyNkY2MDEyQkRDNTVEOTE4RUYxRAotOjEwMTRFMDAwRUQxRDI2RkZDRUU5RkRENkQ0MDVCMDFFQ0U5QzNBMkFDRQotOjEwMTRGMDAwRTVGMzBEQkE2OUM4NzNEMUNCQkUyQUJGNkMwMTNENjI1QQotOjEwMTUwMDAwRTQ5NzY1MDhGRjk5Q0E5RjY3QTFCQkFBNzk3NDlDRjgwNAotOjEwMTUxMDAwQTZDRDJDRTU5ODlFOEU3MjZDQTBFRTRCMjdCQkEyM0IwRAotOjEwMTUyMDAwODdGMEEzODlGNUQ5REIxQUE0RkMwMDM5NEZFRDc3RDNGNgotOjEwMTUzMDAwNUM5ODBGNTYyMkYyNEZGN0I1REUzQUI1MjYyMTFGNjZBQQotOjEwMTU0MDAwQjdBMERGNTIxNkFCNDUzRDVBNUE2NkYyNDVBODI3QUYwMQotOjEwMTU1MDAwQzE3RjYxMUZEREVFQzc3M0ZBNUEwNUYzQTExODFFQzdEQwotOjEwMTU2MDAwREFFOUJDQkFGNjg1NEE3OTQwREE5MTRCOTgwRTc2QjA0MgotOjEwMTU3MDAwQzMxMTY1RTFCMjgxN0U5OUYwODM3QzQ3QzhGNUNGNUNFOQotOjEwMTU4MDAwMzUzNDBGQUQ0MERBNDczRUQ0RERFQzMzODczRjg2NzQwNwotOjEwMTU5MDAwRjc1OTg3OTlCM0U1MDk2MzdCQTk4MzkxOUU1QjU0NkFFOAotOjEwMTVBMDAwODlFODBBQTYyM0I0RDMzRDhCREEwRTg1RTUxNTIxMUMwNAotOjEwMTVCMDAwRDNCREYzNTA4RjFGNEMyNUJBNERERDUyNDU1N0MzN0IyOQotOjEwMTVDMDAwNENDMUY1NzkwMEM3OTkxRUZEQTA0OTFBNTdGMDVFRDNBQQotOjEwMTVEMDAwMDRDQjJFQjQxQkM3MjI1RTcwOUNEMUE1ODRDNzg1NjI0NAotOjEwMTVFMDAwQkVGQjVBNTcxMDlFOUUxNUYzNjhDQkVGQzczQjg3ODcwQgotOjEwMTVGMDAwRjlGQzc4Q0ZFOUEyMEVFOUJGMzFDRTczNDM2NUY1MzcyOAotOjEwMTYwMDAwRjBERUM2OTUzMTU1RDg3NDQ2N0NBRTMzQzcyNkNFNTMyRQotOjEwMTYxMDAwMDZFMDAyMzg5RjQ1Mzg1NTg0OUJGQ0JGN0M3RTREOEY4OQotOjEwMTYyMDAwNzBCRjE5QzhCMTVBOEFCQjRFMzJCMUM0QjhBQjJDQTMzMwotOjEwMTYzMDAwNDJGRUNEQzg3MzExQkM0RUVGRENBOTBCMkU0QUFDREZDNQotOjEwMTY0MDAwNDQ3NEZEQjhDMkU3MUY3NjZBM0MyRkNERUZENzEzRkQ3NwotOjEwMTY1MDAwQzRFQkU0N0U1OTlDN0Y0ODExRjBGNkRGRTMzNjlFRTc0OQotOjEwMTY2MDAwNjEzQTU4NkMwQkU2MkQwREI3MUZGRTI1MkVDQUE0QzQ5NwotOjEwMTY3MDAwRkQzMEU4MTgxODU3OUQ2NEEzM0M5Rjc1MzI4RjRCN0Y0RgotOjEwMTY4MDAwNDNDNzdDMzMyQ0YxRkM4QTRERDBFOTZBQTczMUFGRTQyMwotOjEwMTY5MDAwNUMxRUI3NzdDRTg5RjVFOEIzNzFCRUM2Qjg2NDc5NTZEQgotOjEwMTZBMDAwQzJCRDE3RERGNUU0RkY5MTcxQ0NCRTZFOUUwRjJFRkQxRAotOjEwMTZCMDAwNkI0QjA0MDlGNDFERTU3OEU4N0I1OEE1RjhFNTkyRUUzQwotOjEwMTZDMDAwNkJGOTdEQTE4NzFFQTA3QjU2QTEyRjFERTlBMTVFQkNGMQotOjEwMTZEMDAwNUZCRkM2RThFRjU5QjAzQkIwMkE0NTFGRUM1NzVBQzQ2QwotOjEwMTZFMDAwQzJFNEQ3NDhGNjI3MjVGQjkxN0U5QjI3RjY2OTNFNTYzNAotOjEwMTZGMDAwOEU3MUNBOTNFQjhCOEZBNUUwN0VBNjg4RDFCOURCOTE2MgotOjEwMTcwMDAwRUE5Mzc0OEYzMTU4RkJFRDc4NEYyOTJCRTNGN0Y0MjREQgotOjEwMTcxMDAwQUZGQjI1MDUxNkMyRjMzRUI5QUU2MzFDRTQ2N0Q4MzdBQwotOjEwMTcyMDAwODlGM0ZGQkUxN0NGN0U3RDBDRjRGMzk2QUUxOENFODEwMQotOjEwMTczMDAwQkNBNTlCMDk4RkUzODFBRUIxRUM2NEFDNzZBOEZCQTA5RAotOjEwMTc0MDAwQjJGMzRENUZFREJDQzBBNUM2REZENzY4RUFFQTM5OTZCMwotOjEwMTc1MDAwQUE5M0JDQ0JDQTA3NzhGQThFRkQzRUFEOENGODI3NEUxMwotOjEwMTc2MDAwQkYwNzUxNTdDNEUxNDFCOEYxRkNDQjdFRDMyNzczMTNCNwotOjEwMTc3MDAwRTk2MDdDQkVDNkVEODM3Q0QzNTc5M0JGMzU0NkI4Q0VCNwotOjEwMTc4MDAwOTRCRDk5NzUwRDg3NkIxQ0MyRDUxQjNEOTE5NTY4QjdBQgotOjEwMTc5MDAwNDhCOEY2MEY3M0JGRkFBNTVGMTU0RjkzOERGQTIwMDE3NQotOjEwMTdBMDAwNEY1M0ZGMTI5RUY2NUI4Njg2Njc5NkMwQ0Y0RjhFRjIzMAotOjEwMTdCMDAwRkI0MjA2Qjc3RjQ1RkRENTYxODRGN0NDNjNCMUVCNTFBMQotOjEwMTdDMDAwM0MwMkJDQjMwODdGREU1MzU5MTQzMzE1RjhFQkFDMTQ1QwotOjEwMTdEMDAwRjQ1OTI5RTQ4RThGQ0VBOEIwRDBEQjE3NTM3RTVFQTdENAotOjEwMTdFMDAwQzZEQjQzNzcyRThBRTA3OTAyREY4QjBCMEFEMURGRTA3QwotOjEwMTdGMDAwM0M2RUE1N0I5RTQyNDk3OTIyQjI1QzJGRTZCMTNGNTdGMQotOjEwMTgwMDAwMTkxMjBGQUJGM0I5QkM3OEYxQjVGOUQ0REZCRDZGNTkzQwotOjEwMTgxMDAwMTlDQTgzRUQyMkRGRjU1RTU3QTcwREVGRUY5NTc4QzQ2NwotOjEwMTgyMDAwN0EwNTk0MjE0QjdDMTEyQUJBN0IyQjNGQjNFOThFMjE5OAotOjEwMTgzMDAwQzYzM0YxRjFFRTRCRTIxQjM5OUUyQzU3RTQ5NzcyQkI5NQotOjEwMTg0MDAwNTQzOUFBRTIzOTg3RkIyRTdEOTNFRUQ5QkFBRjUyMjNFMQotOjEwMTg1MDAwOTlGQjM3RTM3RjdEMTJGRUEzNkY2NjdEOUREM0NCOEExNAotOjEwMTg2MDAwN0NGNEEzMkFFRkE1N0QwM0VBMjEyNUZFQjMzMkM0OUZCMQotOjEwMTg3MDAwMjU0OEYzMEZCRDZENjUzQjk1QzE3ODZBMTRGNDJCRTdERAotOjEwMTg4MDAwMjdFNzJGRTE3NjVFQjY4MENFOTlFMDdBMjBFMEFCQzVGRgotOjEwMTg5MDAwRkI1MjRGQTQwQkJEODdGMzIyM0Q3MUE5QzZDRjg5NENFMwotOjEwMThBMDAwRDI2ODVERUY5QjNDODVDRUY1RUMxN0Y5MTRGMTRCMkMxQgotOjEwMThCMDAwNDNGRTJFQzMzMzAyNkZGNzlFRkI0NTBDRUZBOTBENzc1NQotOjEwMThDMDAwOUJFOTVFMDVBNkY1NzhCRjA5NzQxNDdBNURBMzdCOUEzRgotOjEwMThEMDAwODE5RTZBRjFERUE4MTc1RjNCOUI4NkZCRTgwM0Y5NjZGMQotOjEwMThFMDAwODJGQjQwM0U5Nzg3N0RFN0Q0NUEzQTZGRjNEQTY3MkU0MgotOjEwMThGMDAwMzU4MUZFOUZDRTU3ODU1RDEyOEJFMTM5OUE4RDE1RkM5RgotOjEwMTkwMDAwREM4MDQzRDgwMThFRDc0RTM1MjBGQzhFQzlERkIzMkE0OAotOjEwMTkxMDAwMDk3QTc2NEZCRTk1QkVEQjY4ODk2N0Y5MzAwRTc0NDg0OAotOjEwMTkyMDAwNjU1MUVFREZBMUZCRUZGQUNGMEJCQTM4MUU5QTJCOEY3MQotOjEwMTkzMDAwOTI5REUwRThFNkY3RTIzRDlEQUYxMzVDMDhGNzQxNzg0MQotOjEwMTk0MDAwOUUzMkVFMzM1NzNEQjY1N0MyNzhBMzA2QkU3N0JBRjgzQgotOjEwMTk1MDAwN0FBNjRDRTJGN0QwREM3N0U5Q0Y1RDc4RUY1RUJBQzJDOQotOjEwMTk2MDAwRThGRUU4NEIwQUNDMDYzOTVFNUZDNEQ3QTFCMzMyMTY1NQotOjEwMTk3MDAwMUI4NUZDRTVEMjI4QUZCNjMzN0E5QjBERUQ3QUM5MTdFQgotOjEwMTk4MDAwQTM0N0E5RjRERDZBOTE5N0JFN0E3MjI5RjE5OUE0RTM3RAotOjEwMTk5MDAwQjkwNUMxNTc5MTZFMzYwMjVGM0M0OTc2NEUyQzMwOUQ5OQotOjEwMTlBMDAwRjBFMzJBQzdGQ0UzQzc5NTU4MURCNzNGMkMyRUQ0MkY3MAotOjEwMTlCMDAwQTUyNjkzODFERjhBMEIzOEREQzgxMkVDNTJCMjc3RUU5MAotOjEwMTlDMDAwMTBCNDJDRjU3RDVCQzRDNjMwQkZGRkI3RTc2NkE1QTM5NgotOjEwMTlEMDAwNUREQTk2MjdFRDNDQkYwREYxQjU1RDA5QTQxN0UxMzgzRQotOjEwMTlFMDAwRkZBNUQyQkVFRkM1RDc0RTM0RTBCODZEMzAyRkU0REI5MwotOjEwMTlGMDAwN0I3RUVBNTg4RkY2NDk5QkNCNEY3QzJBQzdEN0RDMjZFMwotOjEwMUEwMDAwQjExRUJDOUZGRDE2RkYyQkU4NkY4Q0JCRjk3RDQ0NDdEMAotOjEwMUExMDAwQTY1QzYzNDNGQTg3Rjc0Q0Q4Q0Y3QkFERjgwQjFBRDg5NgotOjEwMUEyMDAwNEYwREY5MDcxNkJBNjZDRkMwRUYxNkIxRTAyQUI0NkJCNgotOjEwMUEzMDAwMTc3NUE4ODY3QjE3RUUxMUYyNjJFMUI5MTQxNjRERDgxRQotOjEwMUE0MDAwMUYyQzlDRkMyRDNBMzdCNkYwNUMxQThCODJCRDc1OEYyQgotOjEwMUE1MDAwMzgxNzdEOEYzODU3QzQwQTM4M0QzQjQ0RTkxNUU1REYxOAotOjEwMUE2MDAwQ0NGN0JFMjRCRDk1RjlDQkJERjMzOURGQjMwMkU4Qjc5RgotOjEwMUE3MDAwNDlFOUIxMTRDMTEwMUJBN0ZDOUVDRUVCQkNEN0VBNjJBQQotOjEwMUE4MDAwRDE5MjA0NzgwN0NENzMwNDhCMjY4Q0QzRkZERTM5MUJFQgotOjEwMUE5MDAwQ0Q2NzYwN0QzOUZEMEVDQ0Q3NDE3ODc4QUZENTRCNzhENgotOjEwMUFBMDAwMUNCRUZGOTEwNjNDMEVGNDNGQ0E4MEM3QzFGRDk3RDAxMwotOjEwMUFCMDAwRjhFRkI1OTY3RTQ5RkYxMzg2RTk1RjM3QzAzRkQwRUY1OAotOjEwMUFDMDAwNjgxQUI3RjdDOEZDMUZBNzAyREYxRDg5REVCREVERjk1NAotOjEwMUFEMDAwNEFGQzFEMzMyQkZEN0UwMUVCRUFBQ0E2NzM4NDhGMzNFOQotOjEwMUFFMDAwM0E2NzdBRTdFMURGQkQ4M0Y5OUE3N0VFQjJGODcwOEM1NgotOjEwMUFGMDAwM0U3MzdDQUU2RjA4M0QzMzlBQjlDMjc4OUY5NzJDQzc2RQotOjEwMUIwMDAwMTcxNEQzN0M5MjlGREJCNDg4MEJGMzMyNkRBNTlBMEIyQwotOjEwMUIxMDAwN0YxRkQxQzY2MjkxQkI3MURGNTI2OTIzMzkyN0UzNDIyRgotOjEwMUIyMDAwQjJERjNGRTVBOUYyM0MzQkM5MDc3OTZGQ0IxMjkxOTczMQotOjEwMUIzMDAwNTdFQzA4NUU4MUVCQkVENEQ0REVGQzEzRjhGNjgzRDJGQQotOjEwMUI0MDAwMzYzQTM3Q0M5ODlCRjYzMzMyNkVBM0UxMkZCRjE1QTNGQwotOjEwMUI1MDAwNUYzMEMwRjBGQ0NEMTM3QTcwMDY3RUY3NDMxMDI3MTg3MwotOjEwMUI2MDAwQzc1MTJGRDgxREM0QkNCNTBENjJERkI4QzExRUYzRkEzMgotOjEwMUI3MDAwMTJFNEU2MEQwNURBNTdCMzE3REE5M0U4NzZEMjJGRjdCOQotOjEwMUI4MDAwNDYzOUREREU1MDgwN0UyMjM1RjZDNEZDMjJDQ0I3RUQyRQotOjEwMUI5MDAwMTFGNzc2RTkxNjhBNzc1NTFFQTNGQkZFRTZDQjdERkY4QgotOjEwMUJBMDAwOUFFNEJDOEU3QzM3REFEMTMyQ0U5NDg2Nzk3NzY4NkIzMgotOjEwMUJCMDAwNkNFNEY3QkVENUE3RjI3QUZEN0Y4Q0EwNzMxMEIwRkY1RQotOjEwMUJDMDAwNDkyRDQzRjlCMjVGRTVGRTIwMTFERjNBMkJFNkQwNjdERAotOjEwMUJEMDAwREI1ODQwRjlGNzIyMUZFNDZDRjc0Qjc0QUZFNEQ5MzVCQQotOjEwMUJFMDAwNjM2OEZERUI1RkY4M0VERDBCQjczRjk3RUJCMUJFNDM5QgotOjEwMUJGMDAwNEVEMjYzRjU1NjVGMTVERTVCQjgzRjk3REJBQjlENUE1RgotOjEwMUMwMDAwMzRBRDIyQzE3RTVEOUQ1NzRERjJGOUUzMzU2MzRDODlCOQotOjEwMUMxMDAwRjE4RkVGMEE3OUIwNTFGQTM3QjU3ODE1OUU2N0Y5QjhBOAotOjEwMUMyMDAwMzJGQTMzRDJBMzA3RUNGNDNCNTFBNjgzQkZBQkEyRkIzRAotOjEwMUMzMDAwMkQzNzVBRTk3NzAxQUEwRjhFREI1Qzg3RkJDMzM0OEQwMQotOjEwMUM0MDAwRjI5MTREMDdFRDA0Q0Y5OTc1RkM3RTJERkMxNkU1NURGNAotOjEwMUM1MDAwRDNDMTkxRjRGQjU2RjVBOTcxQ0EyNzZDNEFGMTk1NjA3RQotOjEwMUM2MDAwRENBRkZFRTA1NEJBRDdGRkU0ODY3MTA1MjhGRjRFNjQ2RQotOjEwMUM3MDAwRUEwNTc0QUZGMTA2M0NGNDA5RjU0MzYzRjlGM0I1MTdDRgotOjEwMUM4MDAwRDM3OTU1RTdDNkQ0RTA1MDdFMTBBOThGOTJFRkVGREFGMgotOjEwMUM5MDAwOUY1QkRFREI4NUY4MTk2N0YzQTFGQzdENEZGMUYxQjg5RQotOjEwMUNBMDAwRUYyQkYxRDkzQUM1MTVGOUY5RDI3QUQ3NjlGQTdEQkM4QgotOjEwMUNCMDAwRkE4RTc3NkY2MkY0REM0Mzc0MkJGNzczQzlFM0Q1MEJBQwotOjEwMUNDMDAwN0RCNURGMTI5RjhCQkY0QjU2QkY1MkUwNURGQzRFNjI2RAotOjEwMUNEMDAwQkRBOTlDN0VBRjRGRTI3RDYzRDIzREI3NEYwOEZEMjQ4NgotOjEwMUNFMDAwQ0I5M0FGNjk3NDVGMjBEODExMDVFODFGM0E3OUQ4NEFDMQotOjEwMUNGMDAwNzQ3NjcyRTMwNDNBQUYyRUM3QUIwNzlDQjg4MDJGNEZCRgotOjEwMUQwMDAwNjRFODEzNzE1RDlGMTZGMkFBN0UyNURGQTdDQUU3MzA0QgotOjEwMUQxMDAwN0UwQzdGRTczMDdFNDhBNUJDQUUzRTU3M0MwREUzOTI3QgotOjEwMUQyMDAwRjIzRDU5RUY5RjRGQjc0QUJGOTdCNTNGRjc0NTVBNkZGRQotOjEwMUQzMDAwQTAyNzg2RjQ2NDdBQzE0OTdBM0FGNDgyNzUxN0FFRTcyRgotOjEwMUQ0MDAwQzc5NTJDOENGRUNGRjA1QkZDRjdDNzhFMUNCMjkyRkRDMgotOjEwMUQ1MDAwREM3NzlDRUY2RjA3REQ5RkU2ODgxN0UwRkRBMUExMTdGOAotOjEwMUQ2MDAwNDY5MjFDRUJDQjhGRUZFMEY2QjY5RERGQUJGODQ2RjA2QQotOjEwMUQ3MDAwNjIxMUZGQ0QxMUY3MTFFNkEwOURGN0Y5MjE3QjE0RUQ1QgotOjEwMUQ4MDAwM0MyODI5OUUxMDY2QkJCREY0RkM3MDJBNDNGRjBGOTRDQgotOjEwMUQ5MDAwMTRDRjYzQ0EwMTJGRkRFRTBDNkIxN0RGQzdFOEZCM0JDNgotOjEwMURBMDAwMEI4MjYzNTEyRURGNTkwQ0ZEM0JGMEZCNTNGNERFRTc1MQotOjEwMURCMDAwQTM4MjE3NTIwQzhBQjE1QzMxNUUyRUY1OUIxRjJDQTRCNgotOjEwMURDMDAwRTdDQTY3NUVGRTdCMkFFREEyM0Q0NkVEMjE2QkYwNjIxRAotOjEwMUREMDAwOUFDN0FGOUM2Q0U3MTBGM0ZDQUFGN0VFMUQyRDE4NDFEMwotOjEwMURFMDAwRUIyOEUxMDYzQzkzREQ5ODhDOTdCMzA1MjZGMTdCM0IwRAotOjEwMURGMDAwMUMxRkM5NzREOUJGOUU1RjAyMUZGQTVGRThCQ0Y2MjFBMQotOjEwMUUwMDAwQkU4RUVCQzY1OUI4MUM1OTNCODFFQzYzRDY5NjYyQzhBRQotOjEwMUUxMDAwOUY1QjcxODhERkMzRDBCQkMxNDlFQkRDNjdGNjNGODRCMQotOjEwMUUyMDAwRkEyOEZFODY5OUYxN0JFREMwMjI0MDNGQzVFNEExRjk3NgotOjEwMUUzMDAwRTUyMzkxNEZCRjY0MkRDRkIzRkJFOEQxRjcwQkU2MzkxMwotOjEwMUU0MDAwRjA1Q0YyRkI4NjczQzlEMjVGMDg5REE0QTEzRkM2RTE5NgotOjEwMUU1MDAwRDNEM0U2OTc3MTdCNUQyNUY4RjhFRjdBNkQzNEVCRjQxOAotOjEwMUU2MDAwQkI2QkUxMERFM0M4MUY3MUQyQTIxRkE0REY4NzVCNzdCNAotOjEwMUU3MDAwODEwOUU5NEEyRDE3RjI3NzEzOUY5RkJDMkY0QkRFN0IxOAotOjEwMUU4MDAwOTU4QzlGOEFDMjYyOTI3RjREMkM3ODMzREVBMTdFODIzMAotOjEwMUU5MDAwRTk1OUMyNjE0NkY3RkY5MTdCREY4NDY5ODg5QTlGRTIyNgotOjEwMUVBMDAwQjZBQzg1RjRDMkUwN0JGNjJDNUZGMkJCNkNGRkJCRjVGMQotOjEwMUVCMDAwMkE1QzJCRjRFRjk1ODdEMzUwQUY3RUUwRTJGQjQ2M0FFNQotOjEwMUVDMDAwN0Q4RjdBNURFNUYzNkNDMzBGMzBBRjgzMDVBNjE0NEVBQQotOjEwMUVEMDAwQTI3NjkyODcxRjI4QkM1RENBQjk0MUYzNDc3QUMxN0VCQQotOjEwMUVFMDAwRjAzREU4RUI5QTQyRUU3RjYzQUUwQzcxQzgyQjZDQzFGQgotOjEwMUVGMDAwM0M0REE5OUY0MjhBNjZDMjczRjNBN0RDN0ExQUQyRTNFQgotOjEwMUYwMDAwQTlCNUM1MTkyQjMwMEZDNkFENjcyNURBRDVBMUEzOENBRAotOjEwMUYxMDAwQ0U4QkVCNzhERkY4QzVGOEZCMzJGRTg5RThGN0RCOUY2NAotOjEwMUYyMDAwNjFGNDNCMjRDM0YzRTRCNDlFQjk4OUVENzMwQUI5OUUwRQotOjEwMUYzMDAwOUI1RjI4RjY5OTg1NENFNDU3MjZFMzhEQUZGQjYyQjE5MQotOjEwMUY0MDAwRUU2QTc5RjA3MkRBODcyNkJEQjc3ODRCQkFBMDg3QTQxQgotOjEwMUY1MDAwRTdFRENGN0Y5N0YyQTAxRTM2REUxMzQ5QjE1RjE4RUY5MQotOjEwMUY2MDAwODM1NzJDNjFFNTQyMkM1MzI4QUZCRDYxMTM5NzczMEQ0NQotOjEwMUY3MDAwQUZDRTJDQjk4QkQ3RTk1RTg1NjkzQkVGQTFERkUzNTk4MgotOjEwMUY4MDAwQjBFQkNBMTJDNkU1MTZBRDgzQTRDNzA1MDVGRTEyQjRCMAotOjEwMUY5MDAwRTNFMjVCNTUxN0YyNDVDMzE2OTVFMDUxQ0QzRUQ3NTZBNwotOjEwMUZBMDAwNzg3RTdBOEI5OUVDQkIwNjAxQ0ZFOUJDNjAxQUFEOUJCOQotOjEwMUZCMDAwQzYzNDBCRTBGREI0MTY0QzIzRkI3NUFCRjhEREExQTREMQotOjEwMUZDMDAwNzlDMDdCNkY2QTE1NDNFMEM3QzZENzk5RjA1MzNDMDRDQwotOjEwMUZEMDAwMURCQzYxQTI3NTVBODBCRjBCODk3MEVDNTRDOEJGNzlEMwotOjEwMUZFMDAwM0EzRjc4MzNENjRGQzFGRTFGQ0ZFOUFCOUI5NkQwN0RFOQotOjEwMUZGMDAwMzZDOUY4M0U2RDBCMTI3RDJFMTZGMzkxRjg0QzFFNDczNAotOjEwMjAwMDAwRTJCMzBGRjE4OUY2RDIyQjUzNDhFRjg1MUU1NDkxNjI0QgotOjEwMjAxMDAwRDk4QkREOUZEMkJFN0NEQUExMkJERjk5OEFDRjM3ODFBNQotOjEwMjAyMDAwRERBMkEzOUUxREY1QjM2RkEzOUU1QkEzNTI4QzdBRkUyNwotOjEwMjAzMDAwQTFFMjJDOTZBNEFGNzFGRjM5RkZGNTM5NjlBNjA0M0RFMgotOjEwMjA0MDAwQTkzRUM4RjFBNDNBRTdBNDJEQTRGN0NGN0UxREU5RUI4MQotOjEwMjA1MDAwODRFRUNCQUE0ODc4RUZGMUMyRkVCODgzNjFCREVBMzdCRgotOjEwMjA2MDAwRkQyMTBEQzc2OTU4NkZBNjc5Qzk3NUU5QzM3OUEwN0NCMAotOjEwMjA3MDAwNkI0RjhEMjBGREY3RTVDNUE5NUZCOTRFRkRGNDhERUJFMwotOjEwMjA4MDAwMjBFOTA5REVGQkFGNDI5NzE4Mjc0Q0YyRTg1NDUxQjAyMwotOjEwMjA5MDAwQ0EzNzA0OUQyQzdBMDBDNkM1RkVCNjM4RTlGRUQyRjNENQotOjEwMjBBMDAwMUQ1N0UyQTM3RkJEMDU1RjUzMURENzcxNDcxMUY5RDFCRAotOjEwMjBCMDAwNEQ2RjY4NzRDOEUwNDRGQjU1MDVDOEM3RjVBMDJGRDAyNAotOjEwMjBDMDAwNkY1MUFGQzRERkExN0I2NDBGNTlFOTFFRTZGQTREQjcyQgotOjEwMjBEMDAwREM4Q0UzRDUxRkI3OUFCMEZERDRFMUFCMjYxMjVDNDk4NgotOjEwMjBFMDAwRUIwQTc4MkExODhBREVGQjhBRTIwNUJFMDRGQzgxM0RGMQotOjEwMjBGMDAwNDFGQzJERTc5MzAwMzdDMTAxRkIyOUJBOEZBOEFGMDgzNwotOjEwMjEwMDAwRDYzMzQxMEVCQzU5QzhFRDJFNzhERjY1MjFGQUU2RjdDQgotOjEwMjExMDAwNjFGNUNGRDc5NTM0NUY1N0QyN0NERjY0NDRERkNDMTdBRAotOjEwMjEyMDAwQTRGOTJDNzhEQjZBQzJFNzBCRUVCRkI2MDRGNzNEQTczMwotOjEwMjEzMDAwRDY0REE3Nzk5RENBRjA0RjQ0RkUzQTU1MDBGRDBGMjFCOAotOjEwMjE0MDAwMkYxN0RDMEZGMzJDRkIwQkYzNkNCN0QzN0EwRDNCQ0ZCRgotOjEwMjE1MDAwOENGODBFRjYxN0U2Rjk4OUEwNDMzOUNGRjczNDNEMEQxOAotOjEwMjE2MDAwRjNGOTQzQ0ZBQTBDRkQyRUExRkNDMEM2QTlCQzRFQkZGQgotOjEwMjE3MDAwMTMxNzMyNzM3QTA4NkQ0QUE1N0NERkRFNkVGRUZCMDQwRQotOjEwMjE4MDAwNTIwRUMwNzhFNzQ5MEYyNkEyODc1M0Q1RkFFNkM5RDA4OAotOjEwMjE5MDAwREZGRjA3M0YzNzE3QjcwMDgwMDAwMDAwMUY4QjA4MDBFNAotOjEwMjFBMDAwMDAwMDAwMDAwMEZGQ0Q3RDBCNzg1NEQ1QjVGRjNFNzNENQotOjEwMjFCMDAwNjYyNjkzNjQ5MjRDMTIwODgxNDA5ODNDMDk5MDg0NDlBOQotOjEwMjFDMDAwMDI4ODhBNzY3ODA0RDEwMjBENEY3OTg5OTMwNzEwNDJFQwotOjEwMjFEMDAwNUVBMEI1Njk2QkNENDAwMkEyNDUwRDM1MkE1QUQ0MDFFNwotOjEwMjFFMDAwODFBMkEyMEQwQTBBMTVCQzAzMkE2MjQ1QzU1NzhCQjYwNwotOjEwMjFGMDAwRTUyNjQwNTE3OUM2QTA1RUFFQjVEN0ZGRkFBRDdENEU1QgotOjEwMjIwMDAwNzJDRTkwNTREQkRFRkI3REZGN0MxRkRGNjY5RkZENUFBNAotOjEwMjIxMDAwN0JFREI1RDc1RUFGQkRFN0MyM0RBQUNCRUYxNkUyRTREQQotOjEwMjIyMDAwREQwNTZGRkZCQzE3QTVGN0FBMkU4MUZDNThERkNEMDI5NAotOjEwMjIzMDAwRjk4RkMzMkNGRTE0NEE5MzhCQTY3MEZFNjU5QjZCQTU4OQotOjEwMjI0MDAwMjJDNDg5QTZCRkZENDFBMUZDODU3RDM2QjdBMEYyMEI1MwotOjEwMjI1MDAwMjk0NUY3Q0U0NjdFOEZFQTVBNDFFRDJGMEM2ODlGMjUxRgotOjEwMjI2MDAwODY3M0I5RDg0NEU1RUE1RDIzOUE1MDJFMUUxRUU2Q0E0RAotOjEwMjI3MDAwQTBGMkYyMEQ2MTQyNjQwOUZFRkI1NjY4N0YyM0U5M0I0MAotOjEwMjI4MDAwNTIwQkE1NkI1NTZGNzgzNEE1NEQyRkZENDRDOUE1NkYzMgotOjEwMjI5MDAwNTYzNzhGNTdGM0FCMjRGN0REMzQ3RUI5NTU1OEVERjkzNwotOjEwMjJBMDAwQThEQzlFMzkyRDQ3ODhGMzdCNkQxMzAzRDkzMjNGMjM3OQotOjEwMjJCMDAwODdDQjNGQjA1Mjc5OEQ1REY4NUFGODdCQUQ3RDZBMEVDMQotOjEwMjJDMDAwOEZFMkI2RDIzODhCQTkwRjkxNEFFOUZBMThFRjYwRUE4QgotOjEwMjJEMDAwN0YzMThEOTM0MkUzN0Q4QkJGMUY1QzBFREYwRUNCRTcxQQotOjEwMjJFMDAwMEI4QUE4OUY3QjZENjJGNjczRDk1REY1RjQzNERCNERFNAotOjEwMjJGMDAwMURGNjQ2NkQ3QjU3M0I1NTg4MjVDNjNDRTFBMTIyMjQzRgotOjEwMjMwMDAwQkYxNDc5NDc1N0JFMzJBNEJDMkFBNDdDNDdCRkNGQTdDRAotOjEwMjMxMDAwMTQzOTJGMUY3RjAzQzYxRkQxODVDNzEyMEQ4RjNCMkM4OQotOjEwMjMyMDAwRjQxREVCNzI4RjEyRDg0NEZGMkRCMUJBRURDQjA5RkUyQwotOjEwMjMzMDAwRTdDNjg4OUJEMTRGQTk1NTM4QUVDRDQ3QkQwRTlFNUZFRAotOjEwMjM0MDAwODk1NTM0ODZFNUUzQkI4N0VCRTlGM0E2RkUxQUMzRTJDMQotOjEwMjM1MDAwMjgxRkQxQ0VFMzUzQkQ4OTc2NDM5RURBOUJFMDlBQUIyQQotOjEwMjM2MDAwQzFBM0E3NEJCNzg1QkI0RUVBRjNBMDdGNTUyREIxQTZGRAotOjEwMjM3MDAwN0NDREVFQkVBRTkzMDY3QzJGQzU3RkZBRDJCRjQ5MzQyQQotOjEwMjM4MDAwRkI5MUMwOEJGQ0FCREFERDdBMzA5MkU4QTc0REYxQ0Q0MgotOjEwMjM5MDAwNzU1M0JGMTcwRTdFMUQ5REVERTY3NTFGNTk0NEVCOUJDRgotOjEwMjNBMDAwQUZBNjNFN0Y5OEU2REJCRTQ3RjU2QzQyQkY2RkQ4RkQxNwotOjEwMjNCMDAwNEEwQ0ZERTc5QjhCMEY2RUE3RUZENTJGQTc4OUJCRERERQotOjEwMjNDMDAwNURGMzBGQzVFMzg1REQxN0EzNTNFOUZCRjk0M0Y2MDg3OQotOjEwMjNEMDAwMzE4Q0U2QjkzNzdFQUM5REU4NjI0NzVDN0JCNzc4QUY1RAotOjEwMjNFMDAwRDVENjVERUZFRkJDQjUzNTdBQUFBMURFNzlEMTFBM0QxRAotOjEwMjNGMDAwQ0Q0MDJGMjVCQjJGRDY4QjVDQzY5RjVGQ0RFRkMyRUZBNAotOjEwMjQwMDAwODk3REJEQzdBQUY0QkRGNEY3RkRDNjVBMjhCRDVGQzNEOAotOjEwMjQxMDAwREJCRDM2RjcxMzZCMDk2RUZGOUUzMENGMTY4MkZCRkNENwotOjEwMjQyMDAwMUJCMzJENjg3RkZFOEQ3MjJEQkRDRENCRTk1RjRGMjQ5MAotOjEwMjQzMDAwNjNGQzY4OEJBNDc3N0RCQzM1NkUwQkY3NTM2QTY5N0JCMAotOjEwMjQ0MDAwRUMxQURBOEZBNUJGRUI5M0QyOTBEMjU1NUU2QUM5Q0Y1MgotOjEwMjQ1MDAwQzQzQTZGQjdCNTJGMDBEQ0U3MTVCMTQ2ODlFQkVBRTc2MAotOjEwMjQ2MDAwN0VCNzlCREI5RkRGRjNDOTYzRTAwRjI3RUUxRDkwNEYyNAotOjEwMjQ3MDAwNjQ0REY5NDFCOTNFMkEzRkZGNTE0MUE2OEJGQTNEN0Y5OQotOjEwMjQ4MDAwNEY1RjBGRjhDMjc2OUJGQjM2QTZCN0JCQTIzQ0Q4RjdDRQotOjEwMjQ5MDAwN0E3RjE4QTcxNkZERUZCOTYyQTQwRkU5NDcxMjVFQ0E0QQotOjEwMjRBMDAwRTdGQUU0Qjg3RTI1QkZBQkRGNjg4QkZCQkVEMUUwMTc0RgotOjEwMjRCMDAwQkZCNzc5QjY1MEIyRkNFRjY5N0Q2MjMxM0ZFQ0U3NkU5MQotOjEwMjRDMDAwRDZBMTc0NEQ5ODcwOUJGOEM5NEE4NkJCNDQ3OEVDMjIxQgotOjEwMjREMDAwNEQ5NjBCMDNCRDk1ODkyMkZFQkVCMEM5RkM3RDExRjE1RQotOjEwMjRFMDAwMDk3QzVGQkNERUZDQkQ1QzM0QUQ2RUE1RjkyRDA5OTg5RQotOjEwMjRGMDAwQkYwQkRBM0ZGRTA0RUM2QkZEQUZDNTVFMTQwNTdBRkYzRgotOjEwMjUwMDAwMzZDQzU0NEZGODM1RkU0MDFGMDk1RjI1QjQxRkMxQzdCNAotOjEwMjUxMDAwOUU1MTAyODE5NTU4REZCQjU0OUU2N0U4QkNERTc1QTdDQgotOjEwMjUyMDAwNzBCQjg3MjJGRjY3NDFBQjYxNUQ4RjVCODQzNTkxRjBBMwotOjEwMjUzMDAwN0FEQzJFMUM4OUY5RTg0NzA4ODVGQUY1RUYwQjBCNkM1RAotOjEwMjU0MDAwQTEyNjc3MEZGRTJBQjkwNDdDQUYzMUMyMjIwOEJFNUJGOAotOjEwMjU1MDAwNURFMDdDNDJBQ0Q4Rjc0OTMyRkEyOTVENTNFODZEMzUyRAotOjEwMjU2MDAwQzA3N0MxRTY3REU4RTdENEJFRkQ1REUyRDc1NEVGRjg2MQotOjEwMjU3MDAwRDg0MEQzNTg4MkVCRjhEREFBQTdBMTFCQjg0RUFGQjE2MwotOjEwMjU4MDAwODg0MDAxRTFFMzJFMjEwMkYxOTQ3RkYyOTNFNDYyNUE0NAotOjEwMjU5MDAwOTdDRkI2N0M5MjVDNjJBNDdGNDVDQzM2RDJBMzlFMTJDNAotOjEwMjVBMDAwMjRCQzNFRUY2MUVGRDJGQzhFRDM1QzMwOUZEMDdBNURDRAotOjEwMjVCMDAwRUI2Qjg2NTdDNzY3QjgyQTZBQkJBMzg3Q0Y0MEY3NTQyRgotOjEwMjVDMDAwOUVGNTc3NTU3OEIxRUZGN0Q5MDJBMENGQzg4RDVGM0M2MwotOjEwMjVEMDAwMzgwRkY0QjlEN0U2NEFBMUIxNkJGNkE5NUU5NUU2MkQ5RQotOjEwMjVFMDAwRjZBODgxMEM5QzYzN0I0RjQ0NTdFMDlDRDk1M0UwNTI4MgotOjEwMjVGMDAwMERGM0FFRDlBMzE2RTE3QzM5QkZGQjYyNDI2OTM2RjcxMQotOjEwMjYwMDAwMzNDNUVENDRGQjA3M0NBMERGOUVFMEY4OUI1QkZERjc4NAotOjEwMjYxMDAwRjg5RkQ3Q0NGRkNFNjU3RjkwNzAwM0Y4QzBDNjUzOTk2MgotOjEwMjYyMDAwRTBFRkM0MDdGRkU2QTY3OTlFQ0ZGQ0M2OEVCQzEwQURENgotOjEwMjYzMDAwMjM0MTdGMDQ1RkI0OUJFMEJDMTBGODJBNUExMDVDOEVFMwotOjEwMjY0MDAwQkRBQTM3RDBDRDNBNDRBNUQ4MTk0RkZGMzI3QzEzMDkyMwotOjEwMjY1MDAwQkU4NDJFRjgwODlFQTg5NDExNUQ3MDU2QkJEQkVEMzg0MQotOjEwMjY2MDAwNjcyRjM4QTI3M0MxNEY2OTQyOTNGMjEyQjRGM0M5MERCOAotOjEwMjY3MDAwRkU1QTNBNDkxMDdGMURCRjY3RTFDQTcwQzgwQjREOEFFOAotOjEwMjY4MDAwMjc4Q0JFOTdFRDU1RjlEQzJBREIxQjE5QzAxNjE4M0ZDNQotOjEwMjY5MDAwQzhDOUY5RDI0N0Q1NDAxOEU1MjdBOEEzRkYzMDlCRUE1RgotOjEwMjZBMDAwMkZCRTQ3RjVEMDhFMTRGQjM3REVGNjA3MUJENjc1ODM5OQotOjEwMjZCMDAwNERBMDFDODgwMzVDNEIzNEI4OTZFQ0ZERTE2NzBBOEQ5NQotOjEwMjZDMDAwQjM3OERGMkQwNzMwQ0VFMjA3MTQwRjE3QThGM0VERTgzQgotOjEwMjZEMDAwNzdDOTQzOEE4ODU3NDA2N0I2RTM0NjNBNUJEODY0Q0VFOQotOjEwMjZFMDAwMkYxMkFEMEI1NDE1RkNDMUZDOURGMDlFNUM0MUZEOTY3NAotOjEwMjZGMDAwRUYwRTczREQ4REYxMDJBMUU1NDJCQzRBRjBENDY4RkYxNAotOjEwMjcwMDAwQ0ZDQTU4M0JGNzAwRDVDRkRBNjg2NzNDOUMwRjE3RTI3OQotOjEwMjcxMDAwMDhGNkFCQjUzNTQxMjAwREI2MjY2MzFEQ0ZFRkY5NkIzQQotOjEwMjcyMDAwMzJENkIxRTY3N0ZGOTUyOUJBNTlCRkNFRkRCNDM3QUFBNAotOjEwMjczMDAwRDdBOTQ4MjFBRTRFNTFDNEI3QTlBMEZCOEI1MzhBQkE4MgotOjEwMjc0MDAwQTk2RjFCMjBGN0M1MzY5QkJGOUY4N0NBMEY2Q0ZDOEFGOQotOjEwMjc1MDAwRjlDMTg1M0RCRTgxQUU2RUU4Qjc2QkJGRkFDMzJEODk2NgotOjEwMjc2MDAwNDg4M0UxMDJFOUYwMTZENzBERDgyNzI0MEY2MkJFMzU2MQotOjEwMjc3MDAwOUI1NjRGREI0NEY5RjA5NzZDMzhCOTQ0NEQ4NjkzRjc3QwotOjEwMjc4MDAwMEJGNkM3NDI0M0JGRkEzRUQ5MDZCRTgwNzQ4NEU0MEZGRAotOjEwMjc5MDAwQjYwMUYyMUMzREFBOUQ3QkRCRjY3NzRDQzlFODA2OUU4QwotOjEwMjdBMDAwQTM2RTFCRDdCMzBEMTA1Q0VGNTk3N0QxNUNEMDVCODQ1RgotOjEwMjdCMDAwQzUxRjBEQkUyREJDNUU3NzJGQzJCM0EyRDE1NzQzNUQ5RQotOjEwMjdDMDAwQUQ4MkVGODlBMjg5RDNGRUEyODVEMzQ3ODVGMDM5NTEyNgotOjEwMjdEMDAwNUY3ODVDQzBCMzEwMDM2MjgxM0ZERUYzOENDRkJFQ0M2OAotOjEwMjdFMDAwMzc3RkFDQUQyMTc4MzVFOEM0MUYyQjAyNUJFOEZGRUFFOAotOjEwMjdGMDAwNDY4NzUwNjMyMEVEQjU0NkEzNTE1NENFQjRGQjA2NTIzNAotOjEwMjgwMDAwQjlFRDAzRDVBMjQwREUxREEwQUZBN0M3ODVGREY3QTU5MgotOjEwMjgxMDAwNzM0NjhDNzFGREY2MUYyRTk5ODhGRUFBNzZBOTIyOEMyQwotOjEwMjgyMDAwRkEzQkI3RDMyNjgyNEVENEE3RkQwMjdDMUNGRUMyOUU4MwotOjEwMjgzMDAwMDJCRUI0NTcxMTkwOTc2QjI4OEZFRjM1QTNBRERFODBBMQotOjEwMjg0MDAwMDEyRjc3QTREODE4MEZENTI5OTlGMjlDQjY3QTBGNEQ4RAotOjEwMjg1MDAwQTI3RUNGQkI0QUVDOTBFQjZEODdDQjI2RTJCQ0IxMjVDNAotOjEwMjg2MDAwOTZEODAxRDdGRUMzNjMxRDI5NThCNzU4MkJFRjlCRDVDNwotOjEwMjg3MDAwN0JGNTcxOEZCOEQwN0Y1NEVDMDcwQzZGNjNCNjQ1NDQ3RAotOjEwMjg4MDAwNTNCQkM2QTM2MTAxNDZBNjQzRjJBMTMwMERBRjhEQzE3MwotOjEwMjg5MDAwRjEwRTc3MzdFQkUzMTdFMzkzQzQyODJBREZBOTRFMDQ0MAotOjEwMjhBMDAwOUNFNzVDMjUyRUFDQTMyRDk2RThFRTBBNkE2RkYzNEVFQQotOjEwMjhCMDAwQkM5QUZBMEQ4QjhEOEIwNzdDNkI1MkQyNzgzREJGOEEwOAotOjEwMjhDMDAwQUQ2NTM4QkYyMkYxQzJDRkZCQjdCNjA4RjlDNkZFNjVDOQotOjEwMjhEMDAwMkFFM0JFRTkyMURFQ0YzNTBFMzk3RUQ0M0U5NUNGNTFCNQotOjEwMjhFMDAwNzFBNTQzRTNEQkVGQkI0QTY5OUMwNUM5QkU0NzQxMEZCNQotOjEwMjhGMDAwOURGQzZEQzRBQjAyRkMzOUNCNjI2MUY5QUNGMTM1RTdFQwotOjEwMjkwMDAwNUFGMDIxQkRGQzZDOEFBNDM3N0QzRDU2RjVCMkJBQzBBMQotOjEwMjkxMDAwM0YxRUQ1RTg3Mzk1QUJDODkxNkY5OEE3QURCNzQ1QzM3NwotOjEwMjkyMDAwNTc5MTAzNzhEQTYxMkYzQTg0RjNBNTlEQkVFM0RDM0MyRQotOjEwMjkzMDAwOTAzOENEMDEzRDg1RUE1OUQwQ0ZBOTdBREEzMTc2RjRDNQotOjEwMjk0MDAwM0JDMzAxRkMyRUVBNTUzMjAxRUQxNjhCREFENUQ4NkY2OAotOjEwMjk1MDAwOEJEN0FCMjI2OEUwQUI4RDM2MzlFRUEyNEIxMTIyMTgzMwotOjEwMjk2MDAwREYzNUVFMjI1QTNGNkU3RjI5NUEwNEU5REM2RDBDOTc2MQotOjEwMjk3MDAwRjUxQUEzRTRGRTc5MjM0NUVFOUYwRkI1RjlCNDY5Rjk4MgotOjEwMjk4MDAwN0Y5OUFGN0JDQzdDRkQ1Q0VDMUZCNjk2NDhGRUZFNDY4MwotOjEwMjk5MDAwMEFGNTVCQTVCNDRFNDhBMUY5QUQ0RUVDQjAwM0JGQTc1NAotOjEwMjlBMDAwRUE1RDIyOTg2OTgwRjdCMjc5QzY4QkEwNjFEQ0NFN0FBNQotOjEwMjlCMDAwOTcxQzNDOUZBRUY1NzAzM0ZDNURGMzc1MzIxRTRFRDUwRgotOjEwMjlDMDAwMjczMjFFN0JFRTNGQzk4NEM3QUVGRTUzNEQ3OEJDQkM5OAotOjEwMjlEMDAwRkY0QzFFRkY1NDdERDY3N0Y0M0ZCNDg3RkVERDI2RjgwQQotOjEwMjlFMDAwQkJGQTRERTc3MUM1NkVERjQwRjA5NzNCNURDNDBGOThCMQotOjEwMjlGMDAwNkU4ODVGNTBCOTVERjEzRDdFMzVFNERCOEZDMjA0RTQ0MwotOjEwMkEwMDAwQkVBRkMyN0Q4MzVDMDZGRUYwMERDRTY1RDZFNzgyNDk3RgotOjEwMkExMDAwRTBCNzdFRDFDQzY5Q0RFRThCMTNEMERFNEQ3QzAxRkJDRgotOjEwMkEyMDAwNDkyRkFGMTFFRDBDMjdGODg1RTg4MzM1QjRCQUI5N0M4RQotOjEwMkEzMDAwQjc2RjEwRjQyMjFEOEU0RTc5RTY3NUE3REY0MkZCMjA5QQotOjEwMkE0MDAwNkNERkRGQTNCMThGMkY1OERCQTc3ODI4NkREOUFCNDY5OQotOjEwMkE1MDAwMUFGNzc1N0NBQUE0QTdCMTAzQkVDODZEQTVFRkQ1NjgwNwotOjEwMkE2MDAwNDc3Q0VGQjY5Nzk3MEUwMjdFQUFDM0RBNzMwMUY3ODEwRgotOjEwMkE3MDAwOTdGRjk2OEI3M0U0QUI3RDRCMDdFMkZCMzZBQUNGRjI1MAotOjEwMkE4MDAwODdCREJEREE2M0U4MkY1REI4RkM5NjUxNURBOTMzNTU2QgotOjEwMkE5MDAwRUVGRkQwRUZEQkY2MzVGNDAzMUNEQjg5QkQwOTkyMEJBQQotOjEwMkFBMDAwQUJFQjJBMEE0RUM2ODMwRDc5RUYwN0ZGMTJDNEI3NTg2NQotOjEwMkFCMDAwMUZEQTNENUQxRDAzRjlFRTQzOTI3OTI4M0Y3QzhGOTQyOAotOjEwMkFDMDAwMUI4NjBGMTAwMTRCMEFFNEJFMEY2NzgzNEY1NDhGQjA3MwotOjEwMkFEMDAwQkJBMDBBNDdFNDFENjE3OTNCNjI4NEMzQTU1MEZEQkZEQQotOjEwMkFFMDAwRjc5N0UzREIyMTJGQTRBMTdENjEzQ0U4RjlDQTY0RjFFQgotOjEwMkFGMDAwRUZDOTZEMUI0MkY2NEZGMEJERUFFRDM0NUU5NURBM0E1MAotOjEwMkIwMDAwNjU5Q0MyRkIyODNGMTU3Q0ZCQUQyRkRFRDZGNEQ3MDRCNQotOjEwMkIxMDAwQUNDRjAxOUM2QjA0Q0ZGQjVBM0Y2NUE5QkUyQjUwQ0ZCNQotOjEwMkIyMDAwRTc2OEJERTcwQUFBMzc3MzU2REY2NEU4NDdDNTlBN0VBRgotOjEwMkIzMDAwMjYyNjExNTJBRTY0N0U5NDAzM0JDOEU1RTdCNkQ0ODNFMwotOjEwMkI0MDAwNUU1MjdDM0VFMEMxREZEN0UxQzFGOTM1MzQ0OTM4RkE0NQotOjEwMkI1MDAwMTI1RTQ1NjIyMDc1MUE4RDNCMjFENUEyREIwRjE0QzA5MQotOjEwMkI2MDAwM0Q0NDlCRTMzM0ZENUE5NkM3RjIzOTE5ODgwMzFERkQ5NgotOjEwMkI3MDAwQjNFMzRFNEJGNTRFMDZGQzdBRkQwRjY3Q0RDQkYxNzVGNgotOjEwMkI4MDAwNzM2RUU4RjJCQ0REREVCMjBDNzBCNjU3Mzk1OTdGRkNDQgotOjEwMkI5MDAwMDA0NUQ0RUU4OTU5NjE0MTM1MUE3QThBNzMwREY0RjlFQQotOjEwMkJBMDAwQTM5MTBCMEVGNjI2N0M4QzhGRjJDRDQzRkZCMzZGQkM0NgotOjEwMkJCMDAwN0UzNUYyQ0E4MTc4Rjc3MkQwNzM3MUVCNDhENkVGQzJENgotOjEwMkJDMDAwN0QzN0EzQkNEMkUxMUI5ODQwNTMzQzM3QzAzNzI4MDY2MQotOjEwMkJEMDAwODc3QzUxQkM1QzI3NTE5NDUzRDQyREZDMTI5RTYyNDVENgotOjEwMkJFMDAwOEVERjE4RTUyQjQ3M0ZDNTk2MjM4RjVEODE2RkQ2MjM3NwotOjEwMkJGMDAwNkM2RjEwOERCREI5OUY3Mzc2NTFERTlERkNBRkUzRTEyNAotOjEwMkMwMDAwOTgzNjhGRkQzNjcxRUQyNTlBREZGRTc1MzE5RTA2ODI2RQotOjEwMkMxMDAwQjdFQ0NFMUIxN0Q0NTBCQUQwNTI5NDEwNTQ0RDcwREY3RAotOjEwMkMyMDAwOTY0QTVENTdGQThCMDdGNjI1NzlFRTlDNEQ4M0JCNEU4RAotOjEwMkMzMDAwODNEQkVBQ0EzNEVFRTc1MEI4MUI3NDc5RTUxNzBBRUI3OAotOjEwMkM0MDAwODNGQzQ3RjkxN0ZEQjE4MUJCMjkxRjY2QjlGOEMxNzQzMAotOjEwMkM1MDAwOUM1QjM5MTZCNjkzNkM4OEEwQkQ0NTdBRTQzQjFBOUMwMAotOjEwMkM2MDAwOEZEMkJFNzNDNEYxRjczNUY4OUUxODIxREIyNzNFNjg3QQotOjEwMkM3MDAwMDlDMDdFNTAzNDc2MEZBRkQzMTNENTRFOEY0QTYzMTVGQgotOjEwMkM4MDAwMEJCNzFENzI1MEE5RjBCMkZFRkNENzMxN0ZEQkQ3NEFEQgotOjEwMkM5MDAwRjM2QTRFRjVERDA3QkNERDFDNkY0OUZFODBFMUYwMERFNwotOjEwMkNBMDAwOUQwQTc5NkJCNDlDQzczRjkwMzc3OTFFRDM4NENCQzZGRAotOjEwMkNCMDAwNDI5OTU4NkI4MUZDMzFDRDI1QTdCMjUwOTFGQjYzQkE4NAotOjEwMkNDMDAwRjBEQTMwREU0Q0UxRTM3QUVGOURCNzdCQTE0RkJDMDczMQotOjEwMkNEMDAwNUQ4OEUwQkU1MUY4RjlGQjFDMTFFMDc0OUUwODcyRkQ5RQotOjEwMkNFMDAwOUI0NDJCRTc3NTdDMTM3RERDREM0QkQyQzcyNzdENTRERQotOjEwMkNGMDAwQzZGRjU2QzBGRDZFNjRFRTgwM0E5QUM3RDQ4NzA2NjU1QgotOjEwMkQwMDAwQjA3RUQ1REM5QkYxRjM1RDcwNEZENUU4ODZGNkVGNkZCMgotOjEwMkQxMDAwQjE4RUQ4QkYzM0E4OUY2OTM3ODRFQ0RGRjFCREY1RjVEQwotOjEwMkQyMDAwQ0NGODQ3RkJFODQ4NDdBN0ZFRTRFQzRCNzhCODRFNUI4RAotOjEwMkQzMDAwRDJFQkJDNEI1OTdGMTJDMkM1RjJEMThGQjQ3RDVCQThEOAotOjEwMkQ0MDAwM0E0NTJGNUE5RjIzNkVEMjk3MDg5Njg5NjM5NjI1NjIzQgotOjEwMkQ1MDAwQkVBRkFGMTA2RjE1RDAzQUJFM0U0NjE1MEQ1Q0QzQ0I1QgotOjEwMkQ2MDAwRURBNjY4RkQ0REU5M0ZFMTMzRDg1QjBGOEI2MEFGRTEyNQotOjEwMkQ3MDAwRDRBRUYwOTJFRkQ1MTg4MjdCOEFCQUJEMzE5NkNBMjdCRAotOjEwMkQ4MDAwRjYyN0JEQzZDMEVGQUVFRkI1QzMwQUZERUU4Njc0RjNGRAotOjEwMkQ5MDAwRjc0OUQ5NjZGRDY3QjI2ODUyMzFGRTk0RTFFNjdBRkJFNQotOjEwMkRBMDAwODEyN0EyQjNGNzUzQTVGRTIyODY4ODIxREZGMjdBMEI5MgotOjEwMkRCMDAwOEI3MTNFMUQ5MzJFREEyRjEwMUMxMTY5QkU4RkIxMkUyMAotOjEwMkRDMDAwQ0IyN0ZGNzUwMUM2MTU1NjM5OUZFQUI3NTVCNkVCMURERgotOjEwMkREMDAwMjc3OThCMjg1MDlDQUNBNzkzMjI1M0NBMjVDODdGNEFEOQotOjEwMkRFMDAwRjIwM0QyRDNGNTZFNEVDRkQyNzk4RkYyRjNGNTFFQ0UyOQotOjEwMkRGMDAwMTdBNDE1OUQ0MEJGMjU2QjNFQjc2MjdERUUwQzk3Rjg3QQotOjEwMkUwMDAwMkU2RjY5OUEwMEIwMkE3NkI3MUM0NDVBMTYyQzlBODAwNQotOjEwMkUxMDAwNjM3NkQxQTFEQTgzNDhFRkVDRDREQjZBNTlCRUQzRTEwMwotOjEwMkUyMDAwQkU0NUEzRDM1QkEyQTZGRDMwODdENkUxOTYzREFBODcxNwotOjEwMkUzMDAwRjMwM0E2NEQ5RkRDMEI3OTFCRTc3QkEyQTNBQTRCNDRBRgotOjEwMkU0MDAwMzMyNDU3NTRBQkRFMkYwMTk3Nzc2RkRCQzE3ODlBREZCRAotOjEwMkU1MDAwMjdGNUEzMThFRUNGRUFCRDBDRjc5OUZBODk5QzRFNEFFNAotOjEwMkU2MDAwMkJGQTFCRThDQzJCM0U2Nzc5NkNGMkY2MzY2QjEyRDU0OQotOjEwMkU3MDAwMkZGNDJBNUVFQ0RCNkJCRDIyMTBBMEZEQjdERTI2Q0Y1RgotOjEwMkU4MDAwODFGNTc0MEU2MDFGOEZDOTk5RjZFOEFEMDI3Q0RBNjc5MAotOjEwMkU5MDAwNEJBMzcxNjZERUIwQTQxMEUzNEMxOTU1NkM0NUJEMUIwNQotOjEwMkVBMDAwQkYyMTE5MjBBNThCNEVCRjhCRUVGNUY5NTc2OUVCNzY0NAotOjEwMkVCMDAwRUU2NTg1RjFEOEIxMzMyRDA2NzJDMUYyNUQ2OTdEOTA2MgotOjEwMkVDMDAwMTJCRkQ0RjVERDQ4RTBBREUzOTI4NUUxRUMzODFBQzFEQwotOjEwMkVEMDAwRkE4NkRFNkVGOUFFNDhFNjNCQ0IwN0Q4MDNDMjYwQjc5MAotOjEwMkVFMDAwM0M0M0VCMkMwQ0YyRTY5OTY3N0VFMjM2OUUyQjY3RTJDMAotOjEwMkVGMDAwNUFCRUZBMThGQ0VEMkY5MkJGOTE2NDczRUExMUYwQkYyRAotOjEwMkYwMDAwRkVGRDNDQTA5M0YzOUE5QzREN0E0NjI0Q0VCRjZBQ0QzOQotOjEwMkYxMDAwQUUwOEZFODRGQzk5MDg2OUNGMURGOTZDRDI1OEVDMkZERAotOjEwMkYyMDAwOEM0NzFDNEVFOEZDMkJGM0Q5ODc1MjdGRUVFRTFBNkZDQwotOjEwMkYzMDAwNUJDQkMyOEYxRkExRkNCOTgwQzU2RkEzRjNFOTlDNjg2RQotOjEwMkY0MDAwMzlGRjNCRjBERkNENEVCNkVCRERBOTEwM0MzODdGQjc0MwotOjEwMkY1MDAwRjRFMzdDOTY2MjhEQThDM0Y5MkIwMkJDQkZCMzE0QjcwRgotOjEwMkY2MDAwQjU4RUY4NTVFNTczMEZGNzAzRkRCRDQ0MzgxODQ1RTVGOAotOjEwMkY3MDAwMkZBRDhCNjQ3RUY2OTJDRDczQUMwRUZEM0QyQUZCRkIyQwotOjEwMkY4MDAwQ0RCRDNGM0RCRTFCRTkzRDU1RjkzRkM1RjJBNEM1MzE1RQotOjEwMkY5MDAwRkVDQjdFQjU2NDA4REFEM0Y5MkVGQTUyN0Y0RkJGQTg3NAotOjEwMkZBMDAwMDRDMzY5M0ZFNzM0RUY1RkQ5OTdFMDFCQjZBMUNERDJFOAotOjEwMkZCMDAwOEZEMkJDQ0Q0QTAzRDJBMTAzNkUzODA0QkJGMzBENjk5NgotOjEwMkZDMDAwNkU2RTVGQjAzRDQ1NERDMjM2RUMxN0Y4RjgwNzdDRUVFQgotOjEwMkZEMDAwOUJFNTgxRUNFNkNGQzdGNjEzNUQ3MkMxMTBBNUU1RjQ2MQotOjEwMkZFMDAwNDY4MjM1MkNGOTY4QkU4RkYxRDdDNEYzRDlCNTc3RkE4QwotOjEwMkZGMDAwRkJGMzA0RTY0MTEyMDdFMDJFQjY3QkY4MUMwQUY4MzcxMwotOjEwMzAwMDAwNjIzRENGRjlCMjNDQUNENzE1RjkxRjA2OUQ5REYzMjU2MwotOjEwMzAxMDAwNzg3MDJFQkQ0MDdBRkM1NUE4N0ZDQ0NBRjM3QzcxRjM0MgotOjEwMzAyMDAwQkJEMUIwRUJDNDkwN0UxQzBFN0Y0ODVFRkIwNEQ0QUZENgotOjEwMzAzMDAwMUFFMDE2N0U2QTNGRTBCMUVCMjYwMjNGRDUzQjc3NkQ4MgotOjEwMzA0MDAwRTQ3RTJBMUQxRUU4QjlFNUJCMkUxRTRDODI5Qzc4QkQ4RAotOjEwMzA1MDAwRjA2NDgwMEU3N0NBRkMyRkM3N0IzRDJBNERCNTdDRTMxOAotOjEwMzA2MDAwOTczMjdGQTQ4OEYzNDVBNDc1NUE1MUJGNTRDQTQ3MEZCRAotOjEwMzA3MDAwNjlFNzlGNjhDRDY1RkVDOEE0RURFRTVBQUY1RjUyMzE5NwotOjEwMzA4MDAwQ0FEN0E3RjhGQkMyQUVBRDlGOUI3NERFNTVBNTYxQUI1NgotOjEwMzA5MDAwRDg2NUZCMjM2M0U3MjUzMzVFQkVFNzc5NjdEN0NFMkQ3RQotOjEwMzBBMDAwQkRCRjg3RUNDMjFGNEVGREMwNkMwMzNCRkEwNkJCM0NBNAotOjEwMzBCMDAwQTdCNzEwN0YwMUJERThFNzM0OERGQjBCRUM1RjZBRUYyQgotOjEwMzBDMDAwMDUzRjRENTI5NTlDOUQ4NDhGQTQ4N0MyNThDRUY4QkU3MwotOjEwMzBEMDAwRTNDRjhFNTlDREU3QjYyRTY3RDU0NDQ4M0VDODY3MDU4NQotOjEwMzBFMDAwQjU1RjE4RTVCQjBCRjM1QkE4OURGM0MyRUFDRTg2MUM2NwotOjEwMzBGMDAwMzIyM0NBN0IzN0JFNTczQURBOTMzMTA3M0EzRkVGNDU1RQotOjEwMzEwMDAwQkU1QTI1QjkyQkNEMjA3NzM5RTNCRUQ3Rjk1OTE3RTUzQgotOjEwMzExMDAwNkRDNjdDQkU2RkZEQjE5MTA0NjcwQzUyNURDRjIyQUREMAotOjEwMzEyMDAwQTM1QjdFOUNCQUJEMDVGQ0Y4ODEzMEM5OEZBMzBBOThDOQotOjEwMzEzMDAwMUZFOUYzMEJFREZGMTVEQUY3M0VFMjMzQUZEMTc5RTI4OQotOjEwMzE0MDAwMjNEQzhGNzM4RUIxRjI3QUJFNkFBOTNDNDhFNzcwQTE4NgotOjEwMzE1MDAwMUMwMTg0NkM4RDFEQ0U3OTZGMTRFMTZGQkM1MzE1QkVCQwotOjEwMzE2MDAwNkVGNDQ1M0RBNUY1N0ExRUY4OTlEMDJCRDI1NEFGQjAzOAotOjEwMzE3MDAwNTdBQzFERkJGN0ZCQ0U1QkQ1RDY0NzhERDBGOUE5QkI2RAotOjEwMzE4MDAwOTc3MDc2Mzc2RjM5Q0Y1QkMyNDdGNDAxNUVDNjJBREY4RQotOjEwMzE5MDAwNkZCRTBFNUJEMTQxQUNDMzM4NjcxRTlGOEJFMzlDNTM1RgotOjEwMzFBMDAwOEZGOTA0QzM3RjE4REY0M0U3MTkzQTFGRTFGODdFRjI3NQotOjEwMzFCMDAwRDI4RjE1RTFCNzYwRkY3RDZFNjdGQkRBNUU1QkVCRDMwNAotOjEwMzFDMDAwQkYyNTdDRUU1RDkyRUQ4MTlERTgwNUYwNUVGMENGNjg1NQotOjEwMzFEMDAwM0JDQkIzN0JBMzg0MUY3QzY1RUZENDg0MDBFQzQ1MkZFRAotOjEwMzFFMDAwNDE0RjA0REZFODJENjQ3OUI4QUNCRjc3MEU5NTUzN0Y2QgotOjEwMzFGMDAwRkRDMjY4NUZDMDVFMzQyRjQyRUI5RjA2NDZGQjE1N0QyMwotOjEwMzIwMDAwQjg3RDgzNTJGQjY2MEVEQUFGODg2NEJFNzMzNDIwRjk1MgotOjEwMzIxMDAwNzg3MzZDNzA5RTRBREY5QjNGQ0YxNEE4Nzc1NDA0RDYxNgotOjEwMzIyMDAwQTRBMkRFRUREMjVGNDNFNTQ5MzVENDZGRjM5MjIxMTJCQgotOjEwMzIzMDAwQ0VGRjUxRjlEQzY4Q0VGM0Y2OEQ3MzMyMUY2N0ZCNEM3RAotOjEwMzI0MDAwRjM1NDZGNUZGOEFGN0E2OUVCRDVCQzUxOTZGNzgzM0RDNQotOjEwMzI1MDAwMTRFNTI5OTRBN0Y0NjM5QkFDM0Y1N0FCRjc5MTQ2OTdDRAotOjEwMzI2MDAwQjRDRjk5MEZGOEE2NDQ1QTQxRTdGREQyNEJDMkQyOTk4OAotOjEwMzI3MDAwMjk3OUZCQzJFRkYzNDg1OTA2REIyOEU3NTY1QzlGQzI2OQotOjEwMzI4MDAwRjRBM0Q5Q0I2NjZCN0M1QkVGMEYwRDFDMjMyMTJGQ0JGNgotOjEwMzI5MDAwQkYzOTBCQjc4NDgzOUU2Nzk2ODdCNzQxRUUzQjVBQkUxMgotOjEwMzJBMDAwMzIwQTdBRkI0QzlGMUEwQzgzNUMzOUEzRDBEQjI5QUYxRQotOjEwMzJCMDAwQTU2MjVDQUYxQ0I3NENEN0ZGODJBNUMwRUJDQkVEMEU2RgotOjEwMzJDMDAwNzEzN0NCRjdDMTAyQTMzRUE1QUY2RjU1Q0I5ODc4QTM1QQotOjEwMzJEMDAwREU1QzYxMjdGRTQyRjAyQ0QxRjY2RDlBRDNENzNCN0RBMAotOjEwMzJFMDAwMDRGNEU5RUJFMzhERkFGNEE3NjUwRkU0RjJGRUQyQzYyRAotOjEwMzJGMDAwM0I1QkVGOEQzRjk5MEVCOTZEMjJBN0ZBNzg5RDdBMEY0RgotOjEwMzMwMDAwRDY0REU3NTdBMDk3REIyNUJEMDg2QkZCNDc4QjI5REYyMAotOjEwMzMxMDAwMzA3Qjg4MDdGNkVBODlEMzFDNEM2RjFEMkRFMTJDMUZFQQotOjEwMzMyMDAwMzdDQzhFRjBDMjZFRDdCMDJCOENFRDA2Mzc2QkZCODM5QgotOjEwMzMzMDAwRjQyOEE2MUJGRkJFMjhFRUE3RDIyRUYzOTVDRjY1MzA0QQotOjEwMzM0MDAwRERCQzYwMEYzQ0I5MTVFNTJGODdCMzdGQjYzMjVBOEVDRQotOjEwMzM1MDAwNUJGOUJCMjQ4RDJFQkQyOUFCN0FCMTVGOEVFOUE1MzIxNgotOjEwMzM2MDAwQzIxREMzRTVCRjhGNjc3QTdBMzZEQzU3MDA3QzEyN0RCOQotOjEwMzM3MDAwQjI1REJDRDIxRUNDOEMyNUZDMUZEM0U4MEY3QTIzRkI5OAotOjEwMzM4MDAwRjU2QUEzOTg2RTg1OTZGN0ZEM0M5RUY1Mzg5MjdGNzk5NQotOjEwMzM5MDAwM0NERjdENDMzOUVGQjM3QkZCMkVDNDNFNUExRUM5RjBBMAotOjEwMzNBMDAwMUM3M0M5RjI2Mzk1QjFCQzBGRTZERkI3RjQzMEZDQzVGRQotOjEwMzNCMDAwQzc4QUVDQkM1RjhFRUQ1NTU5REVGQTczOUQxQTg0OUY2NwotOjEwMzNDMDAwNUJBN0NGOUEyNUM3REY4NkY5QThCQUUxQTNFNERERDRDRAotOjEwMzNEMDAwQ0ZGQzk1NTU5M0QwNkU3RUM1RUQ1MzcwREVGNjlBRjYxMAotOjEwMzNFMDAwMjlGQjY5NDNGN0YzRkM0QUIzN0ZENDk3RUU5RDhDRjkzMAotOjEwMzNGMDAwRDU2NDA3NzYxQ0E0N0UxRTlDNzM2QTExRDZEMzlGRUVGQgotOjEwMzQwMDAwOUI4NkY1M0U2RjZGN0RFMTRGMDQ3N0VCOEEzRkIyNUU5RQotOjEwMzQxMDAwNzQ3REI0NkYyNkJFNUZEOEYzMUJBRTVGQkRGMkJGMTZERQotOjEwMzQyMDAwNDFDRUFGQjY0QTdBRDFDRkUzMUE4RDdFNDU4NjZGMUU2NAotOjEwMzQzMDAwRUE1N0FFN0M5REY1ODFDOEVDMjM5MjdGREVGRUZERjg1NQotOjEwMzQ0MDAwQ0VFOUJENUI1RTUwQThEREQyODhCREQ1OUNBQTgxNUM2QgotOjEwMzQ1MDAwOUM2QjY3OTQ2MEI0OTIwNjdDNEEzREVEQUMyQjE4OEQ1MgotOjEwMzQ2MDAwNzVGMTU5QTQ5Q0I4NzQ1Qjg4MUYxODRCOTFBMEQ5N0Y0MwotOjEwMzQ3MDAwQThEREQyMTYxOUJGNDJGMjgyMURGNDE5NUE3RjI5N0RBOAotOjEwMzQ4MDAwRTc3QURGRjM3Qjg1Njg5MURGNjM3N0RGN0JCNTVDRjdGNQotOjEwMzQ5MDAwNjA3MDM4RkNBRTE5OUJCMEVFRTc3NkZEMjZEM0U4Nzc3NgotOjEwMzRBMDAwMEQ0RDJGODc1N0NFRkZBQ0I2NUZDRUVBRkI2NUI2QkQ5QwotOjEwMzRCMDAwRDM1RTAwQjlFQkZDMzM3RDRDNzQ3NkZFQzlDMTlDM0ZGMgotOjEwMzRDMDAwQURCNDJCMTE0QTk3N0Y1Nzc4NUE0NjcyN0M4REI3NjVGOQotOjEwMzREMDAwMjRFNEU3MDdCNUVGNEJFMzVCNDY4MkFGRTk3QzRFMzg2NwotOjEwMzRFMDAwNUE3MjU5RkZDRjZBQzk4NUJFQUJGMzQ3NTFENDkyQzkwRQotOjEwMzRGMDAwREYwMzJEOTk2OEZGODI0NURBNTNGODhGRTBBODc4M0EwOAotOjEwMzUwMDAwNjlFM0RERDIwRkUxQjcwQzQ3N0VFODI2RTRGNTcxMUFENgotOjEwMzUxMDAwQzIyNTFGRTk2OUJFOEZBNTRCM0JFNkY5MzlGNjlCQkQ3NQotOjEwMzUyMDAwNTQ3RkQwN0FCQkE5N0M3MEMwOUNERjlBMkVFREU3MDM1NAotOjEwMzUzMDAwNDNFMjZGRkFBOUVERkJDMzcwOEUzQzIxQkFGNUQ3M0Y4OQotOjEwMzU0MDAwQTM4REYzRDQ1MzlENzEzQ0FBQTZDRjBBQjc0RTFGNkUyQwotOjEwMzU1MDAwMjlERkRCODBFRjhGM0FGMTdENkIxMkYxRTVBNTk4NjNFRgotOjEwMzU2MDAwMkFDRjVGOUU2NzRGNDlGQkNEMEI3OUJFMjQ5QzE3RTc5RQotOjEwMzU3MDAwODExNzgyRkY4NTU4Q0E2NzQzQkU5Mjc4RDVGMzNBM0VEOQotOjEwMzU4MDAwNDNFN0JGRjJBMzQ1NDlCMERGN0U5NEFFREJGOTNDN0Q1MwotOjEwMzU5MDAwNDA5NzNBREUxQTZDQTRFRjY0NDMzRjJFMkYzODY5ODVCQQotOjEwMzVBMDAwREVFQzQ5MkNCMzFBRUNEQUVCRjMxQ0Q4NTc4QjM3RTQ3QQotOjEwMzVCMDAwMzk4Qzc0RDZCMEFERTAxMDQ5MUNFMkVDMzZBQjA3MjA3NAotOjEwMzVDMDAwMzc1ODAzRjc0MjdFNkZEOEE2QjZGODA1OTczQkJDNTQzMAotOjEwMzVEMDAwRkZBQ0YzQzBEQkE4Qjc2ODQzNkMzRUU0NkRCREZERTIxMQotOjEwMzVFMDAwRjUyMzEyQ0IwQzcwMEVERDY2NUU4NzlDMTY3MzdFRDhCOQotOjEwMzVGMDAwNkU3M0ZFMDRDRTgwREVGRjdDQkJCQ0EwMzk1RjcwQzg1QQotOjEwMzYwMDAwOUNGRkU0ODM1QjY3ODE5Q0NCNTVGRkJEMkFGNDg5M0YxNwotOjEwMzYxMDAwNEQzODg0RjNGMUQzMTc1RThDQzZGQTJDRkQ0QkQ5NDE5QgotOjEwMzYyMDAwRTg0OUExNzEyMkI0NkUwQUY0MDhGRjU2ODVFOUUzQjJCNQotOjEwMzYzMDAwNzg5MTFFRjg4MTFFMEY4MTlENjFBNDkzMEFFMTNGNjg3NQotOjEwMzY0MDAwNERCOUJDRkUxOUQxMzJDQjRCNzQ1NTU5QjdCQ0UwNjRBRgotOjEwMzY1MDAwNDE1N0JGNTdCNkFDQjM0M0NFMEIxREI3QTdGRDJGOUM0OAotOjEwMzY2MDAwNUUzN0VDNkFDNUEzNjREOTU1NzU2M0M1MDlGODJERDZENAotOjEwMzY3MDAwQkUzQjAxRjQ1N0ZDNEI4NUU1OEFFMkU3MDdCRDBBQkU3NQotOjEwMzY4MDAwREZCNjYzQ0UwRDlDQ0U5QUM4RjhEMEVEN0Q4QkY3MkFCRAotOjEwMzY5MDAwQzEyOENBQkI0NjQ5QkE1REI4NUU2MTdEQkRBNEQxMUNENAotOjEwMzZBMDAwNDc1N0I2MzYyNERFQTZEOTVDQkU3OEY3RkVGRjg2OUY2NAotOjEwMzZCMDAwQkVEQ0YxMThDNzMzNUMxRTI3MTg3ODA1N0E1QkM1QTdGNgotOjEwMzZDMDAwODJFRDNEMTU5QkJGMEQzMzk3Q0I3OTJERDRFN0UxQkYzQwotOjEwMzZEMDAwOTZFM0UxQUU5MjU1M0FDRkI3OTNDOEQwRjlGMDRCNTc4NQotOjEwMzZFMDAwNTE2QTA2RTFGREFBRTY4REFBOTQ5QkJEQzVFQzk3NzVDQgotOjEwMzZGMDAwREEzOUNFQjBDQTIxODI5MTA0Q0ZBMTI4QkJENzQ1REZFOQotOjEwMzcwMDAwMkZBRThGNjI3OTYxNTExOEM5OUZGOTlDOEE3MDhFNDNFMAotOjEwMzcxMDAwRjRDNEEwRERBOTc3NTQ5NjgzQUFFMjI1MUVBQTFFNTdGOQotOjEwMzcyMDAwMDJCMEM1NTZDMTQ4OEFGQzEzMzJCRjA0REUyNjU1RDIwQQotOjEwMzczMDAwOEZENzAwM0ZENkNEOTgxNzRENTI2RkFCQjQwNkY3MDMyNQotOjEwMzc0MDAwMkY5REU3QzAzNjczQkQ0QTlBRTdEMTM4Qzg1OUU2RUZENgotOjEwMzc1MDAwRDVBMjlERUJEN0VDRkUzNkNDRjhERDYwREY2NTdENTI1RgotOjEwMzc2MDAwRDc2QjU1QzgzMzA0QTc3QTQ3MDRDQkIzQzQ5ODIzNDAxQQotOjEwMzc3MDAwNTdBQjE0RUZDMzBFMTUyOTlERTNBMEVGMjU0RTk2MkZFRQotOjEwMzc4MDAwRTY2RTk0RTc0NzMzOEM4MzkwODNENzBENjZCOTY3QUVCNgotOjEwMzc5MDAwRTJDRDA0QkVDNEJBNzBENkE3QTlEQzFGREU4QkU1NjRGNwotOjEwMzdBMDAwOTY0MzQ4NEU2NjM5QUE3RDhFOURFMzEyOUJGMzVBODI1QQotOjEwMzdCMDAwOTBDNzlBMUY0OEYxRDAwQTMyN0ZFNEYzRTg5RTcwOTZEMgotOjEwMzdDMDAwN0I5QUE3NEFCOUE3Nzk1RDFGNkVGRjMxNDBFQjBCMzk5MQotOjEwMzdEMDAwNUFFMkI5Rjk5RTFDMUVCNzlGMkFEQjg5M0U1MjBGMjA4MAotOjEwMzdFMDAwQjkzQTEzN0EwMkMxRTU0MUI5MkU0NzY3QzVGQTRBQjAyMgotOjEwMzdGMDAwRUVGQUZDOUI2M0RCQTNFMEM3MTJFNUYxREY0QjZFRDg2QQotOjEwMzgwMDAwQTI5RDg3RURFQkMyMDNGMDUzOUM1NDhBMEU1QTBDRjYyRQotOjEwMzgxMDAwQTk1QjMyRTRGOTMxNzJBQzc3QUI1NjhGRkQxOTY1OTYyRQotOjEwMzgyMDAwQTk3N0ZGODBFMDI5N0JEMEUyNkU0OEU5NUEwN0UxRjVFRAotOjEwMzgzMDAwNjY2MkZFMjdENzg1RTc4M0VFNDY4RTk1RjZBNzYzNzkwNQotOjEwMzg0MDAwOTI5RjQ3MEUxNzFDQkY3M0JCRDZFRkVEMTkxNjUzOUEwNAotOjEwMzg1MDAwMTg0MUY0NDhGRDlDMkM5NEY2RURBOEUxNDU2QzA3QTRCMgotOjEwMzg2MDAwMzVCQUI5QkIzODkwMzUxOUYyOUMyQUIzMTdGREZFOUFDOAotOjEwMzg3MDAwNkVFMEU5QTQ4QkYxNTJERTNEQjk0Q0Q5MjRFMUYyNzIzRAotOjEwMzg4MDAwQkNERkM4NUY4NUIzRkRGMEE0NzZERUU4RUI0MTc0MzQ5RAotOjEwMzg5MDAwODJDRjcxOEQ5RkFERDNFODY2NURDRjc0NjNBMjhCQjk4MwotOjEwMzhBMDAwOTBCNzQxMzc3M0U0QjlEODQ5NTdEQUZBMTJEREYwN0FBNAotOjEwMzhCMDAwQjcxMzVENDhCQTExRTI2QkI0MkY3NDRCNzkzQjQ0REYwOAotOjEwMzhDMDAwRUFENEI3N0JEMEI3ODgwRTlFQzhFODZEQTgxNzQyMDcyOAotOjEwMzhEMDAwQzIxQTE4RjE4RkZDMkMyNUEzNjI0NzJBQjQwNDQ5NTY1QQotOjEwMzhFMDAwRTE0N0RDMkNDRTQ2QzZENzVERDZDMDRBODJBN0JGNTU3RAotOjEwMzhGMDAwQUVDQjAwQUJBNDNCM0E2NUZDMTFGOTVDREY4QkY4RDk4OQotOjEwMzkwMDAwRTJGQjE3MEIyRkQ1MkY0RTEyNkNCNzRBMjdGOTI2MjY0QwotOjEwMzkxMDAwOEVEQjA5QTQ3MDA3QUFCMEU3NTA4QUY2QzUzMUIyRkY2MgotOjEwMzkyMDAwNjJBMjZGQzRCMzUxN0Y1RTRCOUNDNkRDNDZDMjdGMkE0NQotOjEwMzkzMDAwNTg3RTQwRkJFODdDNkVFRkI3QzhGNjVFMkJBNTAzRDMzQwotOjEwMzk0MDAwRTQzRTZBNUYxNUM2RjgyQkJFNzM0MDI2RTg2NEQyNTg4MQotOjEwMzk1MDAwMzM5RDI0NjY0QTM5NDE0RjFCMzNEREJBREM5MDA4N0UyMwotOjEwMzk2MDAwNTBEMjM4OThDRjk5ODZGMEEyQUE1REQ4QTdDRjQ4N0RDQgotOjEwMzk3MDAwQTM3OEY1NEQ5MzQ3MDBCRTY3RTMzREQ4QzJBN0E3RUNGNwotOjEwMzk4MDAwNjBGRjRBNDlFMzlDMUY3RjA4M0Q2NTVCMzg3RkRGOThGNQotOjEwMzk5MDAwRTk3QjBGNzgzRkFEQjgxN0VDQTIwRjI1MzM1RkIxMjc1NQotOjEwMzlBMDAwNTI3QjVGQ0JENDczQkZBMzc0OEE3RkM3REI5MDIzQTZGRgotOjEwMzlCMDAwQ0M1MEI5RkUxNDIxRURCOUEyNTE4RTMzRDlGRkI5MzVERgotOjEwMzlDMDAwOTFGQTlCM0M1QUUxRjA5NEI2NzA1N0YyMzJGODU1QjQzNAotOjEwMzlEMDAwRjUzREE2RDE3NzQzQjg5OEZEOUMxMzcwMERDODRDQ0QyQQotOjEwMzlFMDAwODYxRjgyMjRENDZFRTRFNDAxOTk1QUZEMzFDQTA2QzhDOAotOjEwMzlGMDAwNDMwM0M3QzlGREE3RDc0NzNGRTgzNzJENTNFRUI3Q0ZERAotOjEwM0EwMDAwQjQ3REE3RTcwOUFGNUNCRjZDNEQ1ODVCNUEzNDUyNUI3RAotOjEwM0ExMDAwNzAxMEE1RjNCMkM2OUUwMzlGOTk5NDJBMjZBQzA3REVDOAotOjEwM0EyMDAwN0ZBQThBNEQwQzZGN0IzMUYzODVBODRDMzdGODgyOEZDMwotOjEwM0EzMDAwMTQ1OUE2RkI2RDgzOTlFRURCQzZCNEI3REQ0OUY5QjYyMAotOjEwM0E0MDAwMkQzOUQyN0VBN0U5RjMwQjVEODJFNTgyQjYzMTkyRUY4NAotOjEwM0E1MDAwQjU2Rjg5NjRGRTczQ0NENTFBMTUyN0VENURBQ0RGOTc4MQotOjEwM0E2MDAwNkEyNEYxRDdCQTg2N0JFMTM3MkU3NURBREI3MDdFMkNCQgotOjEwM0E3MDAwN0M2MDNBRkJGQjRCOUI0OUJGNDc1Q0ZENUFCMzdFNEZEMgotOjEwM0E4MDAwN0E3ODU4NjYzN0ZBN0FBODVFMEU5QTAxMUQ5NUFENTU3OAotOjEwM0E5MDAwOTgwRTA3MzY3OEVDN0Q5OUNGMjkyRUNDQUZDQzE5NENGNwotOjEwM0FBMDAwMDdGRjJGRjM4NDczNUNGMDY1N0FGQjM3ODRGNzkxQjBERQotOjEwM0FCMDAwMUYwQjBFQkExQTNBQzhENzBCRTMxNjM3MTVCMzdFMUE4NgotOjEwM0FDMDAwOTlFRDYzRkUzNTUwMjVCQzEwMURDRkQ0RTg2RjEyRUM4NAotOjEwM0FEMDAwQTBFMDRCRDZENkJFRDg5N0FGNjU2OERGRTM1Qzk5NEVDMQotOjEwM0FFMDAwQTZFQjcwQkU2RkQwNjY3MzY1MDJCRUI2NTVFMTE2OUMzQwotOjEwM0FGMDAwQjc5MzU2NEFGQUE2N0RFN0MwQkQ4MEJCQUMyMjAyRkM1NAotOjEwM0IwMDAwRTBCOEQ2N0VGRTBBNkJEMTQ2Q0FGNzc3MDg2QjU0MUMyNAotOjEwM0IxMDAwRTgyQjhGRTkzQjkwRTVGQjBDRUJGN0U5MkZDNDI4QzhCNQotOjEwM0IyMDAwMERBNTZCRDc0OUI4MzRGQTEwRDYyM0UzRTM2OTlDNEY0RgotOjEwM0IzMDAwQjdBNEU0QzNBRUEwRDM1MzIwNkI2Qzc2RTYwODAzNUQ1NAotOjEwM0I0MDAwQ0M1MDk4MUU2ODNFODc2MDlGOUQ5NzU1OTI4RjcyRkE2MQotOjEwM0I1MDAwQkUxRkY0MzI2OTZDMzAxRDcxRDg4NTZBMjVDN0FCNzZGQgotOjEwM0I2MDAwMjQwQTBGRTI4NzNBNDQzQkNCMjMxRDI0OEY4MDNGRUE4RgotOjEwM0I3MDAwN0M0NkU3Mjc0NDE3NUU0NzQyRDc3QUVCN0M2NTZCM0Q2RQotOjEwM0I4MDAwODE0Njc4REU1NkVGRTBGNEE5N0E5N0IwMTI0RkQ4NUVGRQotOjEwM0I5MDAwOUZDOEY5NjdFQkREOUNCNkQ0NjdGMUY3RTdFQTNEOUM3NwotOjEwM0JBMDAwREY1OTNGOEFGMzJGRDQ3QjM5QkZCQjdFMjJBN0JGQUIzRgotOjEwM0JCMDAwMkZFMkVGODQxRkU2NEIzQURGRDFGOTkzNEU1RjNBOUYzNQotOjEwM0JDMDAwMEFBNUFCMDU4NDY2REMzM0EwRjZDQzBGNzUzRTg4Nzk3OAotOjEwM0JEMDAwNThGMkJCRjg5M0JFQ0VBOTRBOTEzRjExRkM1MEI0Q0UyNwotOjEwM0JFMDAwMDFGRjI4NTRDRjNFRjMyMkUxQjlBM0RDQzlGMUExMURBNgotOjEwM0JGMDAwNDJGMkMxMEVBNzgzQ0Y4RDY0QkJEODBERkI0MEMzMzIwOAotOjEwM0MwMDAwNkZEQjlEODY3Mzc4NUVCOTIyQUMwNkJBQkRBOTM2NUNCRgotOjEwM0MxMDAwNTgwRDc0N0Q3MzVEQUMyOTNGQkZFRUZERDdGQTUwRkZBMAotOjEwM0MyMDAwM0Y4QkYxMkRDMkZBMUNCQkUzRDRBMzdGQTRFRjhGREYzRgotOjEwM0MzMDAwNzEzQTAzRUI0RTcwNkM3OTA4RTNERTFFQTFDMUQxMkEwNAotOjEwM0M0MDAwRTFCQUREQ0VGMkQyQzAwOEE5NEZFMUNGNjE4ODczMkQ3MQotOjEwM0M1MDAwNEU4OTdERkIzNzA0RTczMTZEMUQwNkRBNURCMzQ2QzE0MQotOjEwM0M2MDAwMkVCMzRBNzVBREE0MkExRjYzQkRFOEZCOUZCNUY1MkFBNAotOjEwM0M3MDAwQTkwQjYzN0M5NjM0NkFGQkQ0MThGRjRDRjgzQ0RFNTdFMgotOjEwM0M4MDAwQjA1Q0E3Nzg4NTgwMUZFOUY4MkZFQzQxOTIxMUM0NzFEMAotOjEwM0M5MDAwQzUxMTUwNjgxQzg1OTRBREY5QjAxN0FFNzlGRDI4RTRDNAotOjEwM0NBMDAwNzRBNUVFMTBDQkQ1M0U4NzkzRTMyODg0REY3NkQ2RDg3MwotOjEwM0NCMDAwOUY1Mjc3OTBFQjg5RDZGRUE2MzhDOEM4RTE1RTNCRjhFNAotOjEwM0NDMDAwMDU2ODFCRUI1NjkyNzU0MDYwOUY4QjI2ODVFRkYxOTQzQgotOjEwM0NEMDAwNjlERkNCRDYyOEE2RjhFMjdCMzM1NUU2OEI4NzMyQUM3QQotOjEwM0NFMDAwOUMwRUNBMTQ5QTEzQTU4OUNGMjk5RDVFODk3RjcwM0NDQQotOjEwM0NGMDAwNjM1OTUzOUU3RDkxODEyRjk3NjhERjRCQjMyQ0E2NzgzMwotOjEwM0QwMDAwQzc0MzE5MzIyRTZBMTA5ODA1QTU3NzY3QTVEQTE3MzJDRQotOjEwM0QxMDAwREY3MzczRENCRDVFQkYyNDJCN0Y3NUVBNzBGNDgzRTgyQwotOjEwM0QyMDAwQTBBRUY2OEY2NDVBQjlEREExMEM5Nzg0Qzc0MUU3NTk1QwotOjEwM0QzMDAwMTRDN0U5NzQ3QjJFRTg3MkNDQTdGOEVGOTUwQzNGRUIyMwotOjEwM0Q0MDAwNTkxNUNGM0VGRDJDRkM3QjE1N0YwQUUzRjNBOTYyOTg0MQotOjEwM0Q1MDAwNjZERkM4MEU4QzlDQ0VGMjhGRDdBOThDODRGQzJERDc0MQotOjEwM0Q2MDAwN0ZGQ0QzN0Y4OTQ2N0M1NENENEU2OTU3QTVCNDBENjkzRAotOjEwM0Q3MDAwRjVFREU1NkM1N0FCRjZEMEZFODgwMzlGMzVGQkNENUZDNAotOjEwM0Q4MDAwN0RGNjRGRDFBREFDOTdGODkzQjRGODVCOEVGN0FBREUxMQotOjEwM0Q5MDAwNzk4MkUzQzBGNEI4QUZEMDc2MzVDQTM3QUNBN0VBNzEwMAotOjEwM0RBMDAwMDFCQTNGQjY3MDlGOERGNzREQ0QxRTg1RjU5ODlBNUQ4RgotOjEwM0RCMDAwMTcxM0MwRTc2QUY2QUQ0QUU4MkUyRTI3QjQ1RjNENUVDMgotOjEwM0RDMDAwNDBCN0JGRDU4OEI1OUZDMzdGNDg4NEMzRjgwRkFERkYwOAotOjEwM0REMDAwNzY2NjU0QUY1MzQzMDU2MkQ1QUU2MDNCODg1NTcwMUM4MAotOjEwM0RFMDAwQzc3MjJEOEVCMzIzOTBDMTdFRTE5RUU0RUQ5QUY1QzQ5NwotOjEwM0RGMDAwRjA0OUJGRURCMEJBNjMxMEFGN0M0MTg4ODlEREFENTNBNwotOjEwM0UwMDAwRkMyMDc5N0U5RkEzN0QwNEJGRjA4NUVEMkFDQjkxMTcxRQotOjEwM0UxMDAwQjY0N0YxN0VBOERFN0VGRjQxQzREQjU1NkY1NkQ4OERENAotOjEwM0UyMDAwNTcyNThFMzBERUFBNzdBQUMyNjFFMDBGMzVCMDBCQzVFOAotOjEwM0UzMDAwRjcwQ0U3RDJBN0EzNkE0MTVGNEI1QTE0RUYxNkY4QUQwRgotOjEwM0U0MDAwMURFRTk4REUwNjc4REEzNUZBNUExQUQ2MzI5MkQ3NDU0MAotOjEwM0U1MDAwODNGRjE0Rjg5QTQxQ0U1Q0IyRjc3RThFMTNBNDdBRTcwMgotOjEwM0U2MDAwNTlBRUY5NkQyNEM3QjM1MTBGNkYwM0NFMzMxQjBBRDg3NwotOjEwM0U3MDAwNEZCREE0NjU0NzM1Q0IwNURCMjM1RDEwNjk0RURCQ0MxOAotOjEwM0U4MDAwRjcyOUJFRDFDNkZCNDY5M0QzQ0VDMDRGODJGNkNGQUE0OAotOjEwM0U5MDAwMkMwRjAzNEVFQ0NCRDM1QTNDQUJERUNFMzI0OEI2QjMzQwotOjEwM0VBMDAwNjg3OEZCMERGNkU3ODhBRUZBNEI1QURBQTJEM0E5RkU4MgotOjEwM0VCMDAwMjdCQkRGRTdENDM5NDhFRUUzMjVDRTIzQjkzODQ3M0ZBNwotOjEwM0VDMDAwRDkxOUM5RjdFRDNFRDlGOUVCMDkyRkQxNzhFNzVBQzZEMAotOjEwM0VEMDAwRjQ1MjBDRkI2Q0UwMjAxQkQ3M0ZCNzQxQzYwMUYzMjUyMQotOjEwM0VFMDAwMTFENjBGNUE3ODNFNjdCNjI3MjlBQzI3MDNERjg0OUY4NwotOjEwM0VGMDAwMzMzQjlGOEZCNkYwM0VGNkZGN0I3MUFCQjMxNTZCQzhCQgotOjEwM0YwMDAwN0Q4NEVCQjI0NzgwRkU1QkI1RkIxMUVEOUFGREU1N0Y0QQotOjEwM0YxMDAwQTdGRjZBRUQ3QjlCNTJBNDhEMjNFRjNCMDgzRDBFQzJBOQotOjEwM0YyMDAwQTVFRDNCRDVDOUZCNkU3OTk0OURFRjJGMkMxOEU2QkUwRAotOjEwM0YzMDAwNzExRUY4RTg5QjMyOEU1MUY0NzczRjA0RkQ2RkMxM0I1MAotOjEwM0Y0MDAwRjE2QzZGNTk2RTczRjc0MUZFOEJDMzM2RjYxMzJDMjg1NAotOjEwM0Y1MDAwRjAxQ0Y1QTE3RThDOURFRDRBMjJCMTc1MDRFQ0FENkQ4RgotOjEwM0Y2MDAwMjk1MkJFQTg1QzQzM0I5MzUwREM4RkU4Q0Q0RkY4QUNBMAotOjEwM0Y3MDAwMEM1ODg0OEZGMjkzMDdBNUYyQkEzRTUyNkVGMURBRDk0QgotOjEwM0Y4MDAwRkYxM0U0RkI5MkM3RUNDMjhGN0IyRkZFRTdBNDdFNUQ5QwotOjEwM0Y5MDAwOTkyQUZEMEU4RjYwN0Y1MTVBMTkxN0NDOEM4N0RENEUwMAotOjEwM0ZBMDAwQTM5QkNBNjk1NDZFQTA5RkNBNERDMTRDQzg0RjY3RUQxMAotOjEwM0ZCMDAwRDIxRTg5NzJFODREOTVGOUIyNUU4MzQ2QTdFODA3RkRFNwotOjEwM0ZDMDAwQjZBNUI4Q0VCM0JDQkIyQjRBNDBFRkIwQkMxODI1RURBQwotOjEwM0ZEMDAwMjFCRjA5REYxNDY2MzhBRjZGMUEyNEU5Qjg0MUYzMDcyRgotOjEwM0ZFMDAwRkFCNzQ4RjgwMDE3RTRGODI1RjZBNjRDQzhCOUZBQjhBRAotOjEwM0ZGMDAwNEJBMjlCNzhCQ0IzREE3ODRCMjI5QUE0RkY0NDhCQzdDMAotOjEwNDAwMDAwNDM3RDFFREYyNkQ4QkZEM0ZFNjQxOENCQ0JBN0ZCMUU5MwotOjEwNDAxMDAwNzkwMUUzOUY3RTcyMzBDNzExQjRBNTA0MTZFREU2RjI3NAotOjEwNDAyMDAwNzA4RUUzQUU3ODJBMkMwODc4M0Y3QjMyOEFFRDU4OUY1OQotOjEwNDAzMDAwRDlBNDFDRjY1OTU0MDJDQjYxODdBMjFFNUM4MEZFM0FCQgotOjEwNDA0MDAwMzY4NzI5RTBBMzlGMjlDMjlFODhGMjJEQkQ1OTBFQTg2QwotOjEwNDA1MDAwQThBRjYzM0Y0OTA1QjExN0M4QUY5NDRFODREQ0Y3RDlDOAotOjEwNDA2MDAwOTZDMTZDMjdGQUVDMEQ5NTJGMjlEMEY3MzVGOEVFMTM5MQotOjEwNDA3MDAwNEQwQjdFQzZGMkJGRjQzRjlFN0VFQTZGODNCQkYzQUY2QgotOjEwNDA4MDAwNTQ2QzM2REJDM0Y0RjVEN0NCRUYxODI0RUQwMzc3MEM3MwotOjEwNDA5MDAwOTI3QUM5Q0E0MTJFRTk3RjhCNkM3OTMwOTVFNzI5Rjk2QwotOjEwNDBBMDAwMDNBRDAzRUI3RkI0MUYxMzYwNkYzRkQ2QjIyNzQxNzE5RQotOjEwNDBCMDAwMDJDRkMxQ0M1RjAzRUZEQkE0OUU3NTdBQkI4REZENDJCRQotOjEwNDBDMDAwMTUyRjQ2NzlEOUZFNzRFNzE1N0NFRkIwNDI5NTcyNzhDQQotOjEwNDBEMDAwODU0NURFREJBQkQwRUU5OTU2NDQ2N0IyN0Q4QkYwQ0RFMwotOjEwNDBFMDAwN0E2REZCMTY1NTFCNDc4RUZCRDlENjAxRDI5RjEwRDQ5MwotOjEwNDBGMDAwRjIyRkU0RjAzREI4NDk3MUUyRTY2OTJDNUY2REM4MDUyNgotOjEwNDEwMDAwNUUyRjZFOEVFNEY4NzkxQUM3OEJCODg3OEE5RkZENUNBNAotOjEwNDExMDAwRTIzMzY2MTFFQjA3NzRBRTMxN0ZBRUQ0Rjg3M0Q1OURGMAotOjEwNDEyMDAwNTdDN0UwNUU4MTc4NDdFNUZCMTIxN0FEOUUzRUUwQkZDMgotOjEwNDEzMDAwQTFGODdBNEZFMzYzNEI1Rjc4OTRGOTQxMjVFRDE3QzRGQQotOjEwNDE0MDAwNTkyREQ1RkNDQjRCOUY1MjU4OUU1Q0JBRkFFQTg3OTgwMgotOjEwNDE1MDAwRUZCRTZEMTNCODVGNzBCNkU1RkU2OEUzN0FFQ0Q1Rjg5NAotOjEwNDE2MDAwNjc1NzdCMEZENzVGNEFGNTY1RkIzN0EzMTk5RUFEMzZCRQotOjEwNDE3MDAwMEZFMDA5NURDN0VGRERGRTI5RjU1RjZBNUZEMTQyRjIwRQotOjEwNDE4MDAwNDVFRUU1RjNCRjI4OEVEQ0Y2MjdGMDk1RURFMTZDNjc5MAotOjEwNDE5MDAwQTNGNUU3N0I0NjY3NkMyRDhCMzBGRjMzQ0Y4NDMzQkZBRAotOjEwNDFBMDAwMzkxMzJCRjdGRDI3NzQ5RUZBRUQ4MEU3ODdGN0IxNUQ5MQotOjEwNDFCMDAwRURCREU5MDJFN0QwRTI4MEI5NUYxREFFRkQxQURGQUZDOQotOjEwNDFDMDAwOEFGN0M0QzA0RjUzNDVFQjgxRkU2ODdEN0VDNEVEREZBNgotOjEwNDFEMDAwQjE3MUZCRDBGOTNDOEU3NjIzMENGQkY0OTk0OEE2OUI3OQotOjEwNDFFMDAwMzNGREU0QkE5Qzc5NzYxMDlGNjc2REIxOTJERTA5REVFQgotOjEwNDFGMDAwNjRFODRCNjc2MjY1OEExQjNFQTA4NzBBOTdBNDg3MzNGMQotOjEwNDIwMDAwNjM1QUQ4MUU3MDQ2RDlDMTY5OUI0REI2QUJBOEQzRkM4MgotOjEwNDIxMDAwREE0NDdGODlBMDFGRDAyNkVDQTk4RUI1NDcyMEM3ODAzRAotOjEwNDIyMDAwQ0Y4RkNDRTczNDg4RkJDRUExNzY3M0QwMjlDRUJGQkUyQQotOjEwNDIzMDAwNTlGMkRDODQ3ODA1M0VDRjdFMUJGNkUzQjRGMDNENzM4MwotOjEwNDI0MDAwOUYyNjRGNTY2RUJGREM0Rjg4NzVBQURDQUVCMDNGRUJBMQotOjEwNDI1MDAwOTI3NkZFMDJFQTVFQkFERDlGRTg3MkE5NUZGMTIyNkVGNQotOjEwNDI2MDAwNkI2OUUzQjIyNUEwRkJBNUI1RUJFNjgxRUVGNTc5MkNGMQotOjEwNDI3MDAwRDVFRTVGQjcyOTJBQzNEMzE2NEVGQjI3RkJGMkYxNzRBNAotOjEwNDI4MDAwRkNBQTU5OEExRTlGMjc1Q0ZBRjk0NTdCMzgyQ0NCMkQ1NgotOjEwNDI5MDAwRTk4OEIyNERENDVGNjVBM0IyOTZDNzQ5RDFGNTVCMzlDMQotOjEwNDJBMDAwM0YxRDRGQjhDRDAyRkI1RTlCNzZERkI5QTdGOUVCNzBERgotOjEwNDJCMDAwRjYwNDRGNTI5NkU0NEY2RDI5RjI5RTZGRkI1QkYyQkVGRgotOjEwNDJDMDAwRjZDNTZGMEE2MkUyRkU4MTNDQzg5MUZBN0E3RjA0N0ZFQwotOjEwNDJEMDAwMTY2ODEwNzI4RkM2RTc5NkMyQUU0RTcwNjY2RTMwRkJERgotOjEwNDJFMDAwNzNCMjM2OUJGMzQzQjY5QkYzRDkzQkNERjlEQ0JERTYwNQotOjEwNDJGMDAwQkNFNzU1NzNERTg1NzE3Qjc3RTEwOUZBMzZFMjAzQTFFRAotOjEwNDMwMDAwNkYyMzg1QkVFRENFOTRGQTM2RjJEMEI3OTE0MkRGQzY2OAotOjEwNDMxMDAwNzdFOERCQzg0M0RGNDYxRUZBMzZGMkQwQjc5MTQyREZCQQotOjEwNDMyMDAwQzZGNzM5MUE5RTJBMzU3QjI5RDY4MUUzRDRGNjg0RUI2OQotOjEwNDMzMDAwRjEwMEJDNUYyRUNDNDk2MDNFMkFBQzUyMUZCREIwMjRCOAotOjEwNDM0MDAwOUJFNUM3NEUzQkQzNTQwN0RCOTlGNDM4QTdCN0EyN0M1MwotOjEwNDM1MDAwRTNCMjdBQzM3RjdCNjQ3NURGMTQ2RUM3RjZFNzlBREYzQQotOjEwNDM2MDAwNDlGQjczNjU3RUI4MTNGNjhFRDY1NTlGQUM4NkQ4MTM3RAotOjEwNDM3MDAwODhGMjRENDRGRDBCQjZGNkFEQzA2RjU1REQyQkVDNkZFQQotOjEwNDM4MDAwNkY1REUxN0VFNzA3NzJGREQ4RUVBMkM3MkQxNUUzREM3NQotOjEwNDM5MDAwMDNERjI2N0Q0OUM2NkY3QjFDNDYzQjZBQTg1RjQ4QUM5RAotOjEwNDNBMDAwMzVFNDIxM0YzNTlCRjNBMTdFMjBGMDM1QUY2OTVGMzVDMQotOjEwNDNCMDAwMzExRDNDNkU2QkVGMEJCRTdGRTI0OTA3REZGMzNBQTE4NAotOjEwNDNDMDAwRDlFREM0NkMxN0NCNjNCQTNDREYyOThGRERBMzZDQzI3NwotOjEwNDNEMDAwRjlCRDI0MkI4RURCNzcxQ0NBMzBEREQzMEI0RDRCMkY2MAotOjEwNDNFMDAwRTVCM0JDREE5OTVGQUI1ODMwNEVEOThDMTVGQjU5QUZBOQotOjEwNDNGMDAwNEU4Q0U2NzNFOTE2MERCNjQxOTBGRjBENzAwRjBFNDQxQQotOjEwNDQwMDAwOThFODY4RThCNkI4MTBCRjY1M0Y1M0ZENjFCQjUzNDNGOQotOjEwNDQxMDAwRkM5NjQzNENFNUQzRDcxNjk4RUZCNTE3NUQ2RDJBMUY3MAotOjEwNDQyMDAwNjhFRjhDODc3MzQ4RkY5NjA2OUY0QkQ2QjlFOENDRTdCOAotOjEwNDQzMDAwRjk4NkQ2NEI1NjNDN0Y4NEJGNTZCQzI1RTVEMzMyOUFDRAotOjEwNDQ0MDAwODdCNzQwN0I5RjIzMUZGRTM5RUYxNEUwQUZCQ0M1MTYzMgotOjEwNDQ1MDAwOEJGM0JFNTQzQjg3NDQ5REY5NUMyRUI3MEFCRjJCQUU0RAotOjEwNDQ2MDAwOEJFRUNBNURDMjFCNEJFREJGQjQzNjI1MzMxRERENzEyQgotOjEwNDQ3MDAwMzQ1OTI1MTQyRDE5NzIyNDM3MDg3REU1OEQyNzQ2ODI3RAotOjEwNDQ4MDAwQUVBQUQ0OERDOTJFMkFCRjU1MDk2Q0M1NDVFQ0QzNzE4RgotOjEwNDQ5MDAwM0IxMkFFQTRGMkZGQjRGODFFQzlBMjc1NEFCNjA1RUZFRQotOjEwNDRBMDAwOUQwRjNFQkEyMzRERTBCRDkxMTM2QjlGOEZFNkI4M0M0NAotOjEwNDRCMDAwOERGRTkyNkRBRTA4RDBDMUM2MjY5NUY1MTREOENERDQyOAotOjEwNDRDMDAwQjgyRTNBRDlEODE0MUYwMUJEQTY3QzhDRTI5NzcyNzEyMAotOjEwNDREMDAwQjQ0OURGMEJDNTQ3QTE5QUZEOEU5QkU2N0JGMTkwMkE3QwotOjEwNDRFMDAwRUY0MDZBRjM1Q0VFOTJGNTQ1QkE2Q0FGREZCM0Q3RTcwNQotOjEwNDRGMDAwN0I1MkQzNDcyQjM2QkU5Njc5MEI3RDNGM0I3ODdGMkU4MAotOjEwNDUwMDAwQUU4NDU3RDZFRkU2NzkyRkI1NkNERkRBOTdEMjdCMURGNAotOjEwNDUxMDAwQkU1RDk4RDdGMkI3QzY0NTVGNDlFMzdDQjk1REM2ODdGMwotOjEwNDUyMDAwRkZCNUY5ODlDN0ZDQzQ0RkVGNkM3QUMyMEVGQjQxODUxOQotOjEwNDUzMDAwMzU2MDg3MUU1Q0ZFRTQ0NjNCRTIxOEFFREJCNjkxQkZGOQotOjEwNDU0MDAwMkZEQTU2Q0NGNjAwRkRCRURBQTc3QTdDQjM4NjhGRjI1RQotOjEwNDU1MDAwQjFDQTA2MTdDREIzRkY2MEM5NEZDQTIzNjQxQzRCQTE3MwotOjEwNDU2MDAwM0FGQTM1REMxM0I4Qjg0REM5QzNCQzY2MTRFREIwRTNGNAotOjEwNDU3MDAwMUVGRjNCMUFERjA5REQzNzFEODdBNzE3RjY4NkJEQUI4NwotOjEwNDU4MDAwNDVGMTIwREZEMzNFOTk4OUNCNzI0NDBGRDMyRkI5MzkzRgotOjEwNDU5MDAwOUQ3MTY5MDhFQkQ1MUYwQUQyQkU3MDhFNjQ4N0U4RDc3QgotOjEwNDVBMDAwODc1NTY5Q0Y0MzNDMTJBRDczQjkzREQ4NkIzQUU0ODU2QQotOjEwNDVCMDAwOTdFNUZCMEY1NTc0MEU4RENBODdERTJFQzQ1NTk0MTZGMQotOjEwNDVDMDAwOEQ1NjRENzQ1RTMzM0VEMkI0MEY2NjBCQzNCRUEyRkU1MQotOjEwNDVEMDAwNjY4OTdFQTZGQzhDNDk2OUE2RkEzN0NFMTgxQUUyNjc2RQotOjEwNDVFMDAwQ0VFRjJBNjdGRTc1OTVFOTVEOTdBQURCRkQ2RTg1RTM0MAotOjEwNDVGMDAwN0JDNjlBQkY1MzdBM0JEM0Q5MERBNkY2NTU2MjlBRTk4QQotOjEwNDYwMDAwNUQ5NzI1OUJERjY1M0MxMzk1RDlBMThGOTU2QkY3NDE4RAotOjEwNDYxMDAwNjZGQkRBQjRFRkFERkM5RDI2NjJEQUFGMDNEMzNDN0ZENAotOjEwNDYyMDAwOTRFN0E1OERGRDA4QkExRDdEMzZGRTlGRDZERDc5MTk2QwotOjEwNDYzMDAwRDExOThGODlGODVCRDgzQjdDNjY3OUU0MDhFQkE5NDJGNQotOjEwNDY0MDAwQUU0Mzk1NjY4RkFBQ0E5MkY2QTgyQUZGMTEzQkUyOUI1OQotOjEwNDY1MDAwMDlGRkQ2MjQ0MjQ5NzU5M0MyRjY0NkFBRUY0ODhBOTNDOQotOjEwNDY2MDAwRjlEQkYxN0RBN0Y5NUUwN0ZBQkI4NEYyNDM2QTMxRjYwNAotOjEwNDY3MDAwNTc2ODc5MzVDRDFCRTc0MjM1RUM0N0IwODNFOUZENkJEMAotOjEwNDY4MDAwRkRFQUY0MTk3QUNGM0VCNDFGREY2MDM3RUZFNzhBNkQ5OQotOjEwNDY5MDAwM0IwRUY2MjNCQzRDMkY4QUNENDM3QzQ5NjVDQjU0NUI0MwotOjEwNDZBMDAwNzFGNkU1NzRBNkYzRkQ4QkU1MTZCNjdGNzUxQzdFODU2NQotOjEwNDZCMDAwRTlBQ0EzRENFQTkxRjFEREZGMTgxRkQ1NUU2OTZGMEQ0RgotOjEwNDZDMDAwQTVCRjQ1MzQxRkY4OTkxN0VENTQzQzAxNDVENjAzNUU0QwotOjEwNDZEMDAwRkE4MTJFNDNGMDkyRDQwREJFNzQzQzc1RTIyREE0N0M3OQotOjEwNDZFMDAwMzFGRTMzMUNGMTExNEEwMDdDRjIzMkJDRTg3OEQ0RkE3NgotOjEwNDZGMDAwNUZFNDEzMkM2NzEyM0MwMTg2MjdBNDNGMzEyQTc0RkYyNAotOjEwNDcwMDAwRERDMkVGMjA3NDZDNTA4NDRCRjk2RTNDNENCQjI0RUQ0MQotOjEwNDcxMDAwMzYwM0QzRTRCQ0RCNzcyOTFFQzhFQkIzMkU1OUY5N0JGMwotOjEwNDcyMDAwMjdCRDE0QzkzOEY1MTk5M0NDRkJCMzkzN0U4QUU0N0U3OAotOjEwNDczMDAwOTk3OTI5ODFEQkZENkZEM0QxNzdEMThGRUU5RjA5OEREOAotOjEwNDc0MDAwRkZENkVGNUQyRDFBQUNERDRCMUEyMTQ2N0NGQjRGQzQyMgotOjEwNDc1MDAwQUZFQjcyNDA0RkU3NDlFNzc5RTNEMkYwRUY0Q0VERjY2QgotOjEwNDc2MDAwMUM1RTFFOTVDQUYxREEzRUNEOEVBOEYzNjM5RkQ2NEUyRAotOjEwNDc3MDAwMUZCNzk4Q0FERDA1QTBFRkZFMDlCMDE3QUY2RTRDNEIwRQotOjEwNDc4MDAwMzZCRTE3RTM1QjY1NjMzQjZGRjI4QTc4NEU4QkMzNUQ4MQotOjEwNDc5MDAwMDkzODQ3OEE1N0M4Nzc0RDhFREZENTI3MDFGRTg4RTM1MQotOjEwNDdBMDAwQUI2Q0JEMjY1MUQ3Qzc3RjNBM0M1OUU0MjA1RkM4RTlCRQotOjEwNDdCMDAwODk3NTYxQjM4RDc2NzgzRDZEMUEyQ0VEMzVGQTM5N0VBOQotOjEwNDdDMDAwQ0U3MjM4N0EzNkY2REZBQTVERDEwODA1NUFCQUVBRkQwQwotOjEwNDdEMDAwOTEyRTNBQ0Y1NzU5N0M4RjBGNjY3RkVGNDYzRUNGODU5QgotOjEwNDdFMDAwNkI2MzJFRUM3MEJBM0M1MUIxQUFCMDBGQ0VGRENBRkY3QwotOjEwNDdGMDAwNzlFNTMxOUNGQkJFMTVCNjA0QzhBMzlGN0RBMDBBODQ1MQotOjEwNDgwMDAwQ0VEMDc5QzY3MkM0QTdFMTkyQUUzRkREMTJDOUY3MTBDRgotOjEwNDgxMDAwM0Y1NTg0MTdGRUE2MjVFQUZFNUM5N0U5NUNERDNCMEI1RAotOjEwNDgyMDAwRTNGRkRFNDFFMzhFQzBCODgxQUQ4OTE4RDdFM0NGQzQ4MgotOjEwNDgzMDAwQjhCRTE1MTkzMURERDk1N0Y0QjQ2NkJEOTRGM0I2RUFBNAotOjEwNDg0MDAwRjY2NENERUUwQ0Y5MUU3OUM4Rjc3MDYyNDFCRTQ3MUVDMgotOjEwNDg1MDAwRjIzRDUyQzhGN0Y4QkU0REYzMkYwQzZDNjhDRjgzN0U0MwotOjEwNDg2MDAwRUExRjJCQjI2QUY5QkM3NTY2NDE3RUJGNDU4OUYwODBBQwotOjEwNDg3MDAwRkZEQ0EyNzhGQTcwQkNDMTY2RjlERUM0RjI5MDc1RDU4RgotOjEwNDg4MDAwRDM2QkRBNDkwNjMzRDBFRDBGMkUzOTg0MzE2RTZFOEMzRQotOjEwNDg5MDAwODgzNUU1QzczOUZBOUFFQTE3QkE1MjRDRTVENzI1MEU5QQotOjEwNDhBMDAwMzY5NTVGRUZDRTMzRTU3Rjk4NzVBNUE5RkU2NENGMThFNgotOjEwNDhCMDAwNTNGRTQ3QTNBRTM3RDU5RkVBOUQ2QUNBNEY5RjM4QzdCQwotOjEwNDhDMDAwNTQ3RjY2NTFCMUE5RkNDNkQ5NEI0Q0U1NzM3Q0NCNENFNwotOjEwNDhEMDAwRjk3OUU1M0YzNUQ1QkZBOTc2ODVBOURDMkI1QzU2OUNENwotOjEwNDhFMDAwNzc3QkExNzcxMURFNUY4NkRFNDVFOTJENkY2NTM4OEQxOAotOjEwNDhGMDAwRUIzQTdBOUNBNURCNzc3OTRFNjk3MjUwQkZBMURFMzYyMAotOjEwNDkwMDAwRDAyNUVFRDc4MDBFMDc2OEY3NjdCRUMwQjlEMjFCN0VGMAotOjEwNDkxMDAwQzlBMDIyRjVERTIzN0Q0MTM3QTFGNTQyQ0I0NzQ3MUVEMgotOjEwNDkyMDAwQjhFOEE2MzUyQzdBMkE3QUE2OTVGOEM0RTgyQjBFMTQ5NgotOjEwNDkzMDAwQTQ1MTdFRjU1Mzg1MzNBREM0NUY0NjVGN0RFMEY5NTRFNQotOjEwNDk0MDAwQ0EzNzNEQjU0QTk2MEYzQjcwMTFFNTUxNEZERjIwRjM1MgotOjEwNDk1MDAwRDMwNThCMUE4RjBDRjk3QTg2OUZFNjMxRkEwN0E5NkI3QgotOjEwNDk2MDAwM0REMjZFRDI2REJDNjlBNzNEODhGMDgwNzg0REUwMDFFNAotOjEwNDk3MDAwNjk5MEU4MTNFOTAxQTI0RkE0QUYxMjdEOTZBNTBCNzFDRgotOjEwNDk4MDAwOTBFODEzRTkyMUQyM0ZGMUZERjdBNDdGMjIzRDRDRkFENAotOjEwNDk5MDAwMjdEMkI3NDlGRjQ0N0E4NEY0NEZBNEVGRDVDRkU2RjQ4OQotOjEwNDlBMDAwODM3QTFGQjdGQjQzN0QzOUE3NDdFQjZCRjlGQkM3RjU0QwotOjEwNDlCMDAwNzU5Q0ZFQjlERUNGREY1RDQzNzQzQjQzOTBFRDMxQkFBOQotOjEwNDlDMDAwRkZBQjFBN0U0N0Q4RUQ3NkRCQ0UxQUZEQzI4QTU3OUUyMgotOjEwNDlEMDAwQTdCQUJGQjJBMTU2QjQ0NjYyOUZCNjVBNjM0RjM5QkE1RQotOjEwNDlFMDAwRkM5MDNERjM1QkFCMzg2NTkwQkY1RTBGRjcyNjBERTFBMQotOjEwNDlGMDAwRjFGQkJCOTg2RjZCREY4Rjg5RTkwM0YyNjk5RDBBNTI2NwotOjEwNEEwMDAwN0QyOTI4OUY5OTVGQkEyQTg2RjhDNzBGQkVBOUI1ODE2QwotOjEwNEExMDAwNUUzRUI0NzQ3RjdGRkIwQjhENEVEQTg3NzgzMzg3OENENAotOjEwNEEyMDAwRThGMkJCRUI3RUVGQ0VGODFBODM1RjFFRkU2QzNEOEU4NAotOjEwNEEzMDAwNDdGN0M3RjM5RjIxM0U0N0Y3OTNFQkYxNDFENzZBRUY2MgotOjEwNEE0MDAwMjNFOTdFNzAzREZFNDdFRkI3RjA5MjYwQkU3N0NEMUE0NgotOjEwNEE1MDAwMkJDQjJENTE1NjExQzQzODdBOUNDRjM1OEU5NjNDQzQ0MQotOjEwNEE2MDAwM0I1QzUzRTlFNDM4QjczRUY0MURFRjIzNTIzRDJGREVBMwotOjEwNEE3MDAwOTlEQkZDMjVENUNGRURGMkJCRjdEMUU2NDFFNTNDOEZDNAotOjEwNEE4MDAwQzI0QjNFQjZENzVFQTNDNTFEQTBCRDQzOTZGMzNCNzU5MgotOjEwNEE5MDAwODgxMTgzRkM0MTI5REJFMTFFNTVBODdEN0U1NzFDMDA0RgotOjEwNEFBMDAwRUE0N0NBRkE0MUY0OTdGRTE1OEQxN0REQjU4RjA2QzRBMwotOjEwNEFCMDAwQjVFNDIxNkU2QzQwQjU5M0UzQzYzNjhDMDlGMkJEQjlGRQotOjEwNEFDMDAwRTlCMUQ3REVEM0FBMjI0RTM4RTZDN0Q4NDc0RkE3RkFCNgotOjEwNEFEMDAwNjYwMkNGRUZFRTczMEZGMDUwN0U1QTVDNUE2RkE0NTMwQwotOjEwNEFFMDAwNDNERUI1RUI2NjdERTY2MjVENzU3Q0U5NzhEN0Q3NEIzMgotOjEwNEFGMDAwQzdCNzIxOUU4QUYxRkM1REVCMTdCQTZFQTFFQkE1QUY5QgotOjEwNEIwMDAwNTNFMUE1MkVGQzAzN0Y5N0FGNEZEN0ZBQzEzRUZCRkZDMQotOjEwNEIxMDAwQ0JGQTBDQjdCNkYwN0RDQ0IwNEE4NzA3NzA3REQ3N0E1OAotOjEwNEIyMDAwREREQzJFMjZFMDNFNzhGMTI1Rjc0MUE0NEJEMjdDNUZGOAotOjEwNEIzMDAwODA3Rjk2OEEzMTEzNUNDMDkxNEJDRDgxOUQyN0I0REU3NgotOjEwNEI0MDAwRjJFRjU5RUZFMTkwN0EwN0UyMEFENjdDOUQ3Njc5QkRDMwotOjEwNEI1MDAwREQyMUY1MUE2MjBCRDY3RTJERUQ0QzM3RTI3QzNERTQ2QgotOjEwNEI2MDAwQjZCMTFGRURDRDcwM0QxRUMzRUJDQ0EzNzUxQ0E3RjFGNAotOjEwNEI3MDAwQTM0M0EyOTZDRjBGMTJEN0ZDNThERkYxREE1MjhGQ0JBNgotOjEwNEI4MDAwNUVDQzcyRUU3OEE3NTk2RTlDRjA0RDUxMjNDNjlERDAzNQotOjEwNEI5MDAwMkI0NDhFRDZGQ0UxMzc2OEZENUUyNzlBQjhERkQwN0JDOAotOjEwNEJBMDAwRjIzNzY4RjI2OUU4M0RGOUU3ODY2OEYyNjU4QTQ4MDFGQwotOjEwNEJCMDAwOUYxQTJGM0MxMjJFRURCRDgzRjEyRUQ5NkY5MjQ2MkZGNgotOjEwNEJDMDAwNjk2RTU1OEMwNjNEMDg5RjE1Q0NGMTU1QkM3NzkwOEJDRQotOjEwNEJEMDAwNzFGRDlDQkY1RTA0MzhGREExMDg3MjNGOTM4OTkxMjI0QwotOjEwNEJFMDAwRkYyMzIxNkNGMjlEMDM3OTNGQjM1QUY1RkQyN0U0MkM5NgotOjEwNEJGMDAwRkQ1RUU2QzI3MERGQUJEODc3QUY0NDRFOTk4RkY3MjhFMQotOjEwNEMwMDAwQzYxNThDNEI0N0JCMDNFM0REMkM5RjFDNzBBNEIxQkNDNQotOjEwNEMxMDAwODQ3RDY1OEJFQkRBN0Y2RkQwRjk5MjZFOTVGNzA2OTEwNAotOjEwNEMyMDAwRTJERTYwM0E2RDk2RDdFOUZDNDFGRTg2QUMxNTAyRURGNgotOjEwNEMzMDAwMjZCOENENzEzODdBRkIxRkJBQzYwQTZCNDFDRkZDRkQ4RQotOjEwNEM0MDAwODdCOTdCRkFDM0FFRjM2NkVDQTBGMUIwODNCRjE5N0JFMgotOjEwNEM1MDAwQzU3OENDRjdDREQ4M0UxNjk5ODZEOTM5Q0Q3OTMxQkRGNgotOjEwNEM2MDAwM0I3OTRFQTdFN0FFRjEyNjA4NkI3Q0NGNzhENkYxMUFEOAotOjEwNEM3MDAwOEE0RjFEQ0ZGRjAyNUUyRjc0ODdENzJGMDYwQjI5Mzc2RgotOjEwNEM4MDAwNDc0QTNFQTJFM0I3MkFBQ0YzMUU2NzFGNjM1QzQ0QTUwNAotOjEwNEM5MDAwNDNFMkU5MzM4MDhDN0JCODc1NTdGMTNDM0VBOTE3RkRBMAotOjEwNENBMDAwODFFRjQ1NzVBM0I4M0NENDBFMjUzNkM3NzA1RTdGQzcyQgotOjEwNENCMDAwRUNDQzgzRUY0NjI3MTI3Q0Q3Mzk3Q0VBNTBDMkNCRDlBMwotOjEwNENDMDAwRkM2MDI2NDkzMEUyOTMwRDBEN0NFRkZBRENCM0FBMDdCNQotOjEwNENEMDAwRjI3RkE1RUE1RUVCMDE0Rjc5NTM2NTNGQTBGOEU2OTVCOAotOjEwNENFMDAwNjRGODA5QzVFNkVFRTNBMzJCMUQxMkFGQkFGRUIzMzI5QQotOjEwNENGMDAwQUQ4OEY3QTc3MDE1MjRDQUY3RDVFNDNENzI1RDFFRThBQwotOjEwNEQwMDAwMUYyNkUzOEJGNUZCQ0MzREM5MDcyMzIzMjQxRkVCMUY5NAotOjEwNEQxMDAwMjZGOUFFQkU5RUQ0OEVGMzQ5RDRDRjQ4RTI1MzQ5Rjc2QwotOjEwNEQyMDAwNDVCMDNFQjBEQkU1NEQxQTBBN0ZDQTc4NjE5MkE3NzU5RgotOjEwNEQzMDAwQkRCRkEzOTc3QzNGRjA1QTkxRjlEMDY4Q0E4RjNGNjRGQQotOjEwNEQ0MDAwMTMwMTJBRUYxODJGNENGMTY0ODU2Rjk0RjJCQjE2RkEwOQotOjEwNEQ1MDAwRkQ5OEIwNDREMkFGMENGQzIwREMxRDYxN0E2RjM0MzI3OAotOjEwNEQ2MDAwMkJDRTk0OEZGMkY0MzNENThGMTk5NTZBMkE4RkY1MEVENgotOjEwNEQ3MDAwMzE5NUM3NEZDQzM3RTU3QjE3NUQ2NUFBREY2N0Y2NThERAotOjEwNEQ4MDAwNTNCRUFGRUYwNjUzRkRBNEYyNjlBNkJDQ0U5NzkyRTRFMgotOjEwNEQ5MDAwMjczMUEwNzZBRUE5RkRDMEJBMTI1M0ZEMTQ3Rjg1Rjk2NAotOjEwNERBMDAwRkQ1NEJGRjc0ODU2MDI5RTc3OTQ3RjY5NkI5Njg3QkM4NwotOjEwNERCMDAwQUY2QTExOTY5MTVERUY5MEZDM0E1QURFMDc5OUU4NUM3NAotOjEwNERDMDAwQzRFRjkxNjQzNEZEQ0MwQzhGRkE4RDhBNzMyNjI5NDY4QQotOjEwNEREMDAwRTFGNzI0QUU3MzlCRjk2MDYxQTIzOTNGREU5NUY3MkFCMwotOjEwNERFMDAwOTY2RTlDMkIzNEZFMjhBODgwOUU5MjZBQURBNkVGRjNBNwotOjEwNERGMDAwODY2QTdDMzQ1N0U0QjI5RUZFNURFQkVGMUI2MjVBRkY3RAotOjEwNEUwMDAwNTA3QzVENEUwRkNGRTcwNURERDI5RTZGOUMxN0VDRjkwRAotOjEwNEUxMDAwNDZCQ0MwOUU2RkNDQzM5RTZGQUMwRjdCQkVCMTFDRjY3MAotOjEwNEUyMDAwN0M2Mzc5QzEyMTMzMUQ4QzM4NjJBNjgzMkI4RTlBRTk2RAotOjEwNEUzMDAwNDBBN0NGRDBGNUJBQjJENTRDMUZDMkE3Rjg5NDdGQjAyNwotOjEwNEU0MDAwNUU1NzdGNkFBNjlGRDBGNTIxMDk4QkQ3NkY4MjUzMTFEOQotOjEwNEU1MDAwOEZBNEZDRkJFQkI1MkU2NEJEM0FENzg3RjAwREY5RjZCNQotOjEwNEU2MDAwREFFMDUwQkUyNzVCNzg0ODE1NzhCN0U0NTE2RDlFRDdERAotOjEwNEU3MDAwMERBREU1MjdDM0I2NUI3REJGRTY3REFFRDE1NTQzNUY4MwotOjEwNEU4MDAwNDk1NzFEODc5RTBGMDcxRjdEMzRBNEZGRDdGQkY5MDJFQQotOjEwNEU5MDAwQTgzRjNCRkU2MkIyMURGNEQxMkVERjQ1NkIwMzFGRUUyRgotOjEwNEVBMDAwREQxNUI3NDk3QUJBQkM3N0YyMzM5NUUzMTg4RTU5OUE3MwotOjEwNEVCMDAwMTRGMEVCODIxOERGMzZGMENCOUJCMzZCMTVGODY3MTM1OQotOjEwNEVDMDAwNDVEMThFNDU4OENCRjk4RkIwNjRFNDE3MEM5NEY3NzcwMQotOjEwNEVEMDAwNDU3NjJCREY3RkQwRjlFMjgyMjQxOTE3RDgzMjU0RjNCQwotOjEwNEVFMDAwRjM3QTY0RENDRUYzNDNBNUREMjRDQUUzRTIzOEUzRTJERgotOjEwNEVGMDAwNkM3OUJGODNENDk5RTQwNTM5QzBDN0UxRjA0MUMwNDc1QwotOjEwNEYwMDAwQjM4NURGNjk2Q0I1QjkzOTZFQzRGRjg2MkFFMEY3ODNEMwotOjEwNEYxMDAwMUMwQkY5NzI4MDI2REYzNTdDRTQ3MDAwRkU0MUVCODVDNgotOjEwNEYyMDAwRTk5QzFEMUM3MDk4RTI1Qjg3NkU3Mzk5RjIzOTJEODk5QwotOjEwNEYzMDAwQTZGQUMzNzZCQjRERTU3OUMxMkM1Mzc5QzEyMThGMjlERgotOjEwNEY0MDAwM0ZFMkM4Mjg1M0ZEMkI4RTdBNERGOTJCNUIyNzlBRUE1NgotOjEwNEY1MDAwNUZGRDY5OTEyOTlGMjREQTFGMDY3RTA3MkE1MjhGM0U0MgotOjEwNEY2MDAwMzMzNDU1RTJDOTJEMzg3RTZGQzE5REIxRjJERUE3QTY1QwotOjEwNEY3MDAwNUZFQjcyQkExRUY3RUNEM0U4Mzk1NERFMUY2OEY3NzFBNQotOjEwNEY4MDAwMUM3NTQzNUZFMUUxN0IxODBFNEQ5RjEyNjYzREMwQTc4MwotOjEwNEY5MDAwQzUyRDc3REVBM0YwOUJFMzk2RjU3OEU1NEU3RDQxRDNGMgotOjEwNEZBMDAwMEY3NDM5REQxMEFGRUMzNUM2MkIyRjA4RUJGRTNERTA1QQotOjEwNEZCMDAwRkZEMkQ2M0QxNEZFODE3NjM5REY4NjlGREFGOURFODg4RQotOjEwNEZDMDAwMEU1NzI4M0MzM0I1MzhEQTJEOEVFRUVGRjVEOEIyMjVFMgotOjEwNEZEMDAwOUQyNTY1MTRGRDFERjRGRTk4Q0REM0NBNkZERDVGMzZBNwotOjEwNEZFMDAwOUVBN0Q1NEZGNEQ1RjAwQkJCNjdBNUZCQkJDNzVCMzBDNQotOjEwNEZGMDAwNENDRTY3QkVDNTcyRjNENDZDOEVDRjMyQkQ4M0RGM0IxRgotOjEwNTAwMDAwNUJFQUZENTFCOTRBQjdGMzVCMTAyM0UzQTc0NDhDREQ5QgotOjEwNTAxMDAwMERGQUVENzkzQzg5Q0Y0NEJCNjhFNEZCNDc1QTlDRkYwRAotOjEwNTAyMDAwNEQ2QjVCRUUxOTQ0NDVGM0VENEREQTdCNjAwMTFCRThGNwotOjEwNTAzMDAwNjFEMjU4OTJDM0YyODREOEI2NjU1N0IzOTNFNEEyQzczRAotOjEwNTA0MDAwRUFBQzZDM0ZFOUJGREQzNThCMjRCOENFRkIxQjAzNDlDRQotOjEwNTA1MDAwRUYwMTdENDBCNjgxQkVCNDIxNDdFNTcxQUVDMTlFMUIxNAotOjEwNTA2MDAwODFGREY2NEQ2NzlDM0RGQjA1ODREMENFMEJBOTRGNzVBNQotOjEwNTA3MDAwNDM2RjRDODdGQTNDRkVBRkUzRUQ0M0YxQTRFQkFENDI0NgotOjEwNTA4MDAwOEIzMzRDRDdFMEQyRjFENzY5NzdEMEYwQTdERjdGNzBCMAotOjEwNTA5MDAwMkZCMzE1NkQ3MkYyM0Q4QTg5ODhEQkQyRDdBRjI1NDdEMQotOjEwNTBBMDAwRDI2NUFEODYwRkQ0MDMzRkVBQTk1RUExOUExRDAzRkIyQQotOjEwNTBCMDAwNzI4NzcwQzdCOEJBQTE0MzNERkRCRkMyOEI4RUZGOUVGOQotOjEwNTBDMDAwRUU1N0Y1QzQxRjQyRjlDMjc3RERCN0VBODk0RUZGRDkyMgotOjEwNTBEMDAwN0I1NzA2M0UyMUUzNjhCNDc1MDlBNDVCRDgzRjdENjcyMgotOjEwNTBFMDAwOTQ3OTNGNkZDQzk2NzY4RDcxREFCRUEyRjNERDk5NjcyNQotOjEwNTBGMDAwRTYxNzAyRjZGMTg2NTVBQUM2MkZFNDM5NUU5QzUyQzQyMwotOjEwNTEwMDAwRUYxMThCM0ExN0NCMzNFNTFBMkZENkNGRDc4NTBGQzhCRgotOjEwNTExMDAwRjdFMEFFRjUxNjI1NUM0NUY5OTI2NjlCRDg0OEEwMTVEOAotOjEwNTEyMDAwRkJCQjhGRjM2NkJGOTMxQjcxRkU5RTQ0QzBDRDI2MzczOQotOjEwNTEzMDAwMUFCN0I0NDkwOUVDNEZCOUZDQkRFQ0M1NEVGOTdFNUMxOQotOjEwNTE0MDAwRThCQkQ5OEIzNUZEMTcyRjJBNjBERjg2RkE2NUVFQ0ZENQotOjEwNTE1MDAwRDZDRTZCOEZGMDdDMkJFMTY3QkRBNTBCN0U4RERFMDI3QQotOjEwNTE2MDAwRjIxRDMxRThDM0FBQjRGMzcwOUM5NjhFMzczN0ZDMjQ0NQotOjEwNTE3MDAwRjE1RDc5QzI2RjQ0MTZDRUYzNDY2QkI3NzE3NDlERjgzQQotOjEwNTE4MDAwRDVGRDJBOUQ3RUMyQzMxQ0FGMUYxQTE3NzBENkZGNEFEOQotOjEwNTE5MDAwNzQ3NzdFMUFERDdGRDNEMzNFRThGNERGN0M4NzVGQTg4NwotOjEwNTFBMDAwQzM2OTg5MUUwNTNFMDRGRkJGREJFODU3RjlGMzQ4ODI1NwotOjEwNTFCMDAwOTBGRDI3MzFGMDhGQjQ2QUZEODk4REI5RERERDRGRjRBNAotOjEwNTFDMDAwQUREOEM1RjExMEFCMkNCRUZGNDA1Q0YyMTlFQTFGRUY2MQotOjEwNTFEMDAwQjBERUU1M0M5MDgwRkJGODkzMzRCQkQzRTVGM0Q2RTQzNgotOjEwNTFFMDAwQjBEMUYyN0U0MDg3NUZFNUY1RUU5ODI4RUY3MzEzMUY4QwotOjEwNTFGMDAwMTVEODc3QkExRjdGQUEwOEY2NDJBQUZCNDk3QzZCNDZFRQotOjEwNTIwMDAwMzFGRTc1M0Y0OTcxNzAxNEMzMzlCMzYxQjEwRDRGNDgxOAotOjEwNTIxMDAwQjYzRTdDN0I2MTg0QkJDQjdGRDIzQTQwQzZFN0Y0RTRFOAotOjEwNTIyMDAwNDc5OTdFQzlDM0ZEQ0RCODc0MTVGNzczMkMzQjQ1Q0FBOQotOjEwNTIzMDAwNkI4REY3MkMwMzlEMEREOTI2NkM5ODY3QUJBREZCREYwQQotOjEwNTI0MDAwMTk5ODkyMjNGN0QxNTJGOEQyN0IxQkUyN0U1NjI4QUNGNAotOjEwNTI1MDAwMDcyQzU3ODQxRTA3QzQ3QzVFQ0Y1RjZDRDJGMjg1MzI2OAotOjEwNTI2MDAwN0ZDQjJBOTk2RkQ1REVDNURBQUFEOTNCMzA0RkE0OThGNwotOjEwNTI3MDAwMEZGNEYwRUQ5QTNEMDRGMzQwOEE3OUUwM0JGODFBRjIxRQotOjEwNTI4MDAwRTA2QkM4ODNBRjIxMEZCRTg2MTQ3QzBEREY0QjQ0NTEwOQotOjEwNTI5MDAwNzI5RTJBRkQzREUzMERGQjAzRkU5RUYxMDZCOTA5RkU1OQotOjEwNTJBMDAwMUU2MzFFRkUxRTYzN0RGODdCOENFNUYwRjcxOENCRTFENAotOjEwNTJCMDAwRUYzMUU2RTFFRjMxRDY4N0JGQzc5ODg3QkZDNzU4MUZFOAotOjEwNTJDMDAwRkUxRTYzMUVGRTFFNjM3REY4N0I4Q0U1RjBGNzE4Q0I5NwotOjEwNTJEMDAwRTFFRjMxRTZFMUVGMzFENjg3QkZDNzU4N0U3MzlENjJCQgotOjEwNTJFMDAwRjIwN0REQUNCRDNCNTBCQTNFOEVFOUEzMzlCNTI4MjlBMwotOjEwNTJGMDAwODdENkY3M0YyM0ZGRTdDN0I2NTRBQ0YzREUyNUZDNkUzNQotOjEwNTMwMDAwNjA1NTg0NDdBRTczRDM0NEI5RUUxNjIxRDdCOTdEMEVFQwotOjEwNTMxMDAwQUZGM0VENzY5OTJGOTRGMUMyQTFGNDAzQkZDQUY4NzRFQwotOjEwNTMyMDAwRTk1NzQxMEFCRjBBNTJGODU1OTBDMkFGMzJERTJBRkQ1MgotOjEwNTMzMDAwMkE0OEUxNTdDMTc3Rjg1NTkwQzJBRjgyMTQ3RTE1QTQ3MAotOjEwNTM0MDAwRjBBQjIwODU1RjA1MjlGQzJBNjgwN0JGMEE1MkY4NTU5MwotOjEwNTM1MDAwRjAxRDdFMTVBNEYwQUJFMEZCMzE4MjAzRkUxNTFEMkU3RgotOjEwNTM2MDAwQzhGOUU5MjYzRDk0RThEMEE0ODdCQTRDNzlDOEY5QzZCMwotOjEwNTM3MDAwRkE5MEYzOERFNTkwRjM4REU1OTBGMzhENzlDOEY5QzYzOQotOjEwNTM4MDAwRkE5MEYzOERGOTFCRjE4ODcxNkYyOUVGMUJEQjQxREU3OQotOjEwNTM5MDAwMzdFNjczOUFGQ0FGQzE4NjM1NzlDM0Y5NTc5MUI2NDZBMwotOjEwNTNBMDAwMjk4RjI5MkU5MkVCNzI5RTlBMDVGRjU4NkJCODkyMUM5QQotOjEwNTNCMDAwRUIyMTM5NzZDNTZGNjc4REJGOTJGODg5MTY2Rjk3MkJGMQotOjEwNTNDMDAwREEyRDU4NkZGNjdCRDNCQUY5ODI4MkUzODM3M0ZFM0IwMgotOjEwNTNEMDAwOTFDQjc1N0YyQkZGRDFCQUU3RUQxNEFDMzc2Q0NCOTAzNgotOjEwNTNFMDAwNzBFOUVEM0RDMkE1MjJENUVCNzdFNUJCQUYxNzNBQkUxQwotOjEwNTNGMDAwNUU4RkY5QTUwMTBFNTIyOEYzMTAwNzkxNzdCQjMzMUY3QQotOjEwNTQwMDAwRjFFRDVCMkQ4QThDMEI1RDI5RTM3MjQzRTlBQTQ5RTMzOAotOjEwNTQxMDAwNEI1QjJEM0IwRTQ0NTBCQkY2NjJDNTgzN0IwNzk5NTYxMAotOjEwNTQyMDAwNzFDODk2MEYzQ0Q1RTY0MzlFQThDQjg5RDVFMjgzNkIyNQotOjEwNTQzMDAwQUY0MjNDOTAwRUI3NkU3RjI0M0VDMUY3REQ0NkI3MEJGRQotOjEwNTQ0MDAwN0IxOThENzNDRDE3QzI4RURGNUI5ODY0OTdGMjA0REFGNwotOjEwNTQ1MDAwNDFERjFDRUE1N0JDOUIwQ0Y0QkQzMjQ3OUU3QjNFRkZFQwotOjEwNTQ2MDAwQjJBQkNBRThGQkQwRURCNTU3RTExRUREQTQwOEQ5RUUxQQotOjEwNTQ3MDAwMzc4RjQ3MzMxRUE3MzQyQTlCRjBGRUM5RThFREMyOEI1NQotOjEwNTQ4MDAwRkJCMUJGRDRFMDFFQkFERDY1MkZFMzcxNUQ3Q0ZGNEUzQQotOjEwNTQ5MDAwRUZCNzc4NDMzMkRGMTcyQzE2QURFMzEzRDkyN0ExRjAwRAotOjEwNTRBMDAwRkJFNjNBREU2ODdFQUY2MjdFQzRFMjBGQzE4RUZDMkY1RgotOjEwNTRCMDAwREZDMzIxNzFGMUZCRENDM0I5NjY3ODZDMjFFMkRCQzQ4OAotOjEwNTRDMDAwNUVGOTBFRTRFNEUxQzVBQjdBMTM1Q0JFODA3QzA3RjJDMgotOjEwNTREMDAwOUEyRjZBNUZFM0ZDNjZGOTBFMjQ5M0NGNDg4NjhGQ0YzQwotOjEwNTRFMDAwQzM0MTdFODVERkZGOThFMkRGNjhFOUU1QzZCREUwMTVEMAotOjEwNTRGMDAwQjYwNEQ0REYyRTNDNTAwQjA2MDk3OUFGNTU5RjU3QjY0MgotOjEwNTUwMDAwMzg2MjA5NTc0MDJGRTI5NTc4MDNGRDExRTc5ODAxN0EzOAotOjEwNTUxMDAwQzlGM0Q4Rjg3RDkwQTk1Njk3MERGQzQ2OTc3MzhBNUQxQwotOjEwNTUyMDAwNzJFQzQyNzU3NDBDREZGNzBCOTExMzJFMzZGNkU2Qjg2OQotOjEwNTUzMDAwOEQ3RjNEOEVBNDgzRUY5MzJGREYxNUNFNzI4NThGRjg3QwotOjEwNTU0MDAwMDdGOEU2QjkzQzE5Nzc1OUI5RUNDMzkxOTZENEFFMzg0RgotOjEwNTU1MDAwOTJEMzI5ODFBRDc4REZGMzc0RUE4RUU4NTEwQUNCMTEzQQotOjEwNTU2MDAwODdDMDVGREIxQTlGRTc3QjgyQzVBQjVFRTNGQjEwMTc0QQotOjEwNTU3MDAwMUIxRjg4OTZGN0FBQTQ3RkE1NENDMzlCNkU2RjVBQThFMQotOjEwNTU4MDAwQUQ0Rjk5MTYzRjc0QkM1RUJFQ0Y0QkU3MzBCRkY3NzE4RAotOjEwNTU5MDAwQjFEMUM2NzI0NkE4QkMyODg0RUIwRjg4NzMyQjZGQjRCOAotOjEwNTVBMDAwRjFEREQzQzU2QjhCNTcyNzhBRUU3RTc3QzUyQkUzQ0YxMgotOjEwNTVCMDAwQjU3MTk3MzREQTM4NEVBODVDN0I0NzJCRjQ3NzU4OTY1MAotOjEwNTVDMDAwNkE3MkU4RDI2REU2RUYyNzcyNDJFNDRGRkRGRDQ0QUQwQQotOjEwNTVEMDAwNEVGMTVCQUZDQzY0MzlBOEQ2QzY3MUVFRjM1NzQ4QjkyQgotOjEwNTVFMDAwNDhFQzEwMDFEQzY3OThCRjYyOUMwNUVGNThDQ0RGRTUwMgotOjEwNTVGMDAwRjUyOERERDBEMTNCOUE3QzM0MDk4MzEyREVBNzVFOEE4MAotOjEwNTYwMDAwNjBCRTMyRUQ1MjNGQ0VDRkJBOTRDOEU5OEQ5N0IyRTQ3NgotOjEwNTYxMDAwNzdBQzFERDE0QjZCQTFCQzVGRkZCRTI2MTdDRDQ0MUNFMAotOjEwNTYyMDAwNjUwMUU0QjIzRTRDRDcxRDQ0RDcxODIyNTdFMzU3NDNENwotOjEwNTYzMDAwQkNDQTJCMzBDMzRGQjJGOTU2MjE0RTczRDI0NkMxRjdDNAotOjEwNTY0MDAwOTEyNjQzN0VBMjgyRDk5MEE3MEFCMDJGNTIwQUY5M0UzMgotOjEwNTY1MDAwQzY0NDg1RUZCNzRDMUVCRTRDREIwN0I0MkYwNEYzMTFENAotOjEwNTY2MDAwN0VGN0MzMzc3RTZBMDBGMTM3QjM3RDNCMkM1ODc3N0REOAotOjEwNTY3MDAwM0ZGOEZDNkRGQzBFRTY2NEJGNjJDNzdCODEzRTREQ0ZGOAotOjEwNTY4MDAwRDZFOTNENzQ1RjJDODhENEVDNjM0RTY5RkZFQUI0OEY5MQotOjEwNTY5MDAwMDE1ODdFOUMyN0YyNDZDNEIzMkU4MDJEQjM5RkI2QjAyRQotOjEwNTZBMDAwODRBQUE4NkM1OTlFOUMxQjc5NjMyMzk0QUM3RkQzNkUwQgotOjEwNTZCMDAwMzJERjYyOTFGNzlGNDhGRUUzNzg3NTcxQTRCMDBGRTU4MQotOjEwNTZDMDAwOEJENzJBRjk4ODk3RDdFMUZBN0FEOEQ4NDlDMzdBNzc1RAotOjEwNTZEMDAwRDE0MTQ5RTdGRUNDRUUwM0JENjBGOTVEMTkyNkZGNENEMAotOjEwNTZFMDAwNjg1QTRBRjhDNjNFNUExMEQzRkE2M0ZDRDJEMDg0NUM5QQotOjEwNTZGMDAwRTExRDlGODg3N0M4RjVGOThBMjBFMjAyRTc2QUY5REJBNQotOjEwNTcwMDAwOUVCREYyOEY2QjlDOEMyN0NFOEZDREVENzcyM0UyM0YzMQotOjEwNTcxMDAwRkU2NUZFMzg1RkIxMUE3RjM3QUE0REYxNzk3M0U1M0QxQQotOjEwNTcyMDAwQzgwOTU4REZDOEVDNzY3RUM3NjA2NkE2NEI5RTJGMjE1RAotOjEwNTczMDAwNzY5NkRCNzJEREYyNUQ4NDEwN0I0QjY5QjYzQzZGODQzQwotOjEwNTc0MDAwRDU5RDNDOEZGRDNBNkVCNjU3RUFGMzNFNkUzM0RGMzM5QwotOjEwNTc1MDAwRDVEM0VBNUM2OTM3RjhCRkJBMjdGMUEwNDVERUZCN0ZGNQotOjEwNTc2MDAwQzQxMkQ4RjEyMkQxNkJBMEI3NkYwMUU2RkIwOEUyQkRFRAotOjEwNTc3MDAwMTk3RTFGQ0Y0RjdGNDdBMzkzNEY2OUVGNjVFOEY0NzRGRAotOjEwNTc4MDAwQUNFRTIyREY5NzI4NzFEQUREQUE4MTlFQ0FENjI4N0M4QQotOjEwNTc5MDAwMUZCMUE0NEVERTI3RjZBRDUxRTRCREZDMUVFQzU3OEZDMQotOjEwNTdBMDAwQ0ZGOTlBREY1MTdBRkMxNzExQjI1MEMzRUY3Q0ZCOTEwRAotOjEwNTdCMDAwRDcxQzI5NURGOEZENTNEREFGNkM5MjdGMDYzMzEwNkY2NwotOjEwNTdDMDAwM0ZCNzM2OUNERjQxRkU3QTU4RDE4RjAxN0Y2NEI2ODdBMAotOjEwNTdEMDAwRDc2OTEyRjEzNEQ0OUYxQUUzRkIyOUJFOTc4ODIzMDdCNwotOjEwNTdFMDAwNjE2RjVDRjBGM0I3Rjg3REUxOUFCRDI5RkNFRTYxRjFFMQotOjEwNTdGMDAwRUVCQ0Q1Nzg0N0U1RUI2MUJFM0I3Mjg5N0U4QjlEMkU3MgotOjEwNTgwMDAwM0JFNDkwRUFDNjU4M0U5NzE3RjREMUVFQTk4Qjc2RjZBMgotOjEwNTgxMDAwRTdFOUVCRjM2MEFFOTQwNzhBM0M3MjlDMEI5QTNFNDUzNQotOjEwNTgyMDAwMDhCMzREMzVENTkzRTc3RkU4M0VENEVEQTJBMUY2OTVCOAotOjEwNTgzMDAwRDBGNzJBQkVDQjlFMDI3Qjg5REQ2MDU3RDVFRDMxQjYwRAotOjEwNTg0MDAwQUNFMzczNzA5RUNGQjc3N0ZGQkI4REFGRUI3NjQ3NEQ2MAotOjEwNTg1MDAwOUY1REQ4QTlDRjY2NEZFODAzQjk3RjlERTI4MjFEQkQ0OQotOjEwNTg2MDAwQ0NFOUJFMTFGMUY1NjU4NzZDODhGMDE0OTNFMkRDRjJBNwotOjEwNTg3MDAwREQ5MkJCRTRCQjI1MjVCN0U2MzEzRjlCOEYzNUM5QzcxOQotOjEwNTg4MDAwQkQ4NzUxQkM4RkNCMDI5NEM2RjdCQ0RGRTdBRDdCNjUwQgotOjEwNTg5MDAwQzAxRUQwNTNEMENCRjdFMENCNUM1RTdCOUM0MTJFMkE2MAotOjEwNThBMDAwNkQ1MjRDRUYxOEU4RjkxNzczQTUxRDcyM0VBOTE5QzA4NwotOjEwNThCMDAwREY0REI3QTZEOEYxODZEMDdDMTI4RjEwMzdGOEJBNDZFNAotOjEwNThDMDAwMjc3QTNCQUFDNzcxMjU5MzUyQzU0MUY5QUUxNEMxOURGMQotOjEwNThEMDAwMjJDNzMzRkU0RTUxNDk5M0Y5M0QwNkFBQ0Y3MkRERkUzMQotOjEwNThFMDAwREMyOEVFQUZEODQ1RjM0RTQxRUE2MjM4MDkwRjhDQTdBOQotOjEwNThGMDAwRjY3QkE4M0YzNzhGQzNFQjUxMUEwQ0Q4NjAzNzk4OEZDRgotOjEwNTkwMDAwNzgxNkNBQ0Y3NTA1NkMxOEE3QTQ1MUJFOEZFMjVCMkIyMQotOjEwNTkxMDAwQzdGMUFEODlCNUU3NDAyRUIwQkFFQzAzOENGMjYwQTNCNQotOjEwNTkyMDAwN0NDRjc4QkVGNkZCMTEwNDJGQ0JDQjY1ODQyN0RDRjM0QwotOjEwNTkzMDAwRDJFRjdEODZFMkFCNTg4M0JGQUMyOUQ2MkM1RjM2QUQ2MwotOjEwNTk0MDAwQjM2MTdERTZGNEYwNUVDMzk3MUExRDk3MzQ4RUUxRkJEOAotOjEwNTk1MDAwRjU2NTU2MkZERjk3RjA2OUY4RkVFQkIyRjBCQkUxMjc1MwotOjEwNTk2MDAwOTlEM0ZDOTAyRDA1Nzk4RDJGN0QwOTNDRjcwNjlFODJGOQotOjEwNTk3MDAwMTlGQzNFRDJCMjcwOEU2NzlFRTM2QUUyRjk3NkUyRkJEMgotOjEwNTk4MDAwMDFDMjBGRTQxNTU3MTFFMzlCRThDNDhGMzhDMEIyNjYxQgotOjEwNTk5MDAwRjNGQTc2QzExMzI1REY2NTZGMkVFNkZEQjdDOEVBQjNDQgotOjEwNTlBMDAwQkI4QzcwQUNERjlGODFGQjVCNzM2OERGRTNGRDI3RTE5RAotOjEwNTlCMDAwRjJGMTdEQ0M1MzBGRENDOEJGRkIwNjM4ODFFNzI4OEY5RQotOjEwNTlDMDAwN0IwMkRFM0IyMkJBNjFCQUQ2RTk2NzQxODFEQ0NGRkFCRAotOjEwNTlEMDAwNzg1MUMzQUNEMjBFM0ZFQ0JCRjZBOUY3MjBFNEYzMDYzNgotOjEwNTlFMDAwNUE2RkQ4RkY3QkRBQTc3NjVDMDBBNDcxRUQ2NUYyREQxMwotOjEwNTlGMDAwQkFEMDdEQUJFRjU3N0Q5RkVBRkI1NkRGQ0Y4RkQ5OEFCOAotOjEwNUEwMDAwODI4OTRBMTdERkExRjNCREY2Qjk2RUYwMzQ0OTgzNzc3NgotOjEwNUExMDAwQUVCNkFFODRENzU3ODVDMUFFMzc2Mjk4RENERkYzNTM5QwotOjEwNUEyMDAwQ0RGQjFGRkRBMURGNTRCRDdDNkMzMDAzRjczREY1RkFDMwotOjEwNUEzMDAwRkFCOEYzRTM2NDNCRUMwM0QwNUJFQTMwNEI2N0ZERTU3NwotOjEwNUE0MDAwNUNERjYyRTIxRkE1OURGQzYzRkJBQTA0RjA4RjFEMEFDOAotOjEwNUE1MDAwRkJFMTk2REYyM0U1QkVFNUNGQzg3QkUxNjc5NkJGRjhBMwotOjEwNUE2MDAwRjYyQ0FBNzdGQUMxOEQwQjhDRjcyRkNBODI5MjVGMkM4NQotOjEwNUE3MDAwMjQ3OTBCRkM2MzkxMjYwRjZDQ0NGNEU1MEQzM0VDRTczNQotOjEwNUE4MDAwQjJGQjlGQzlDNEZFOThEQjkyNzcwQTZGQThEMUJDRjkxQwotOjEwNUE5MDAwQkRBMzNGM0ZGM0QyODc1N0I5QkJDRTVEN0QxRTI1NkJCQgotOjEwNUFBMDAwREVCNTE1M0I4RDc4OTNGNDdFNzc1NjA3OUY1QkE1Mzg1RQotOjEwNUFCMDAwQjdFODUzNjk2MzMxRjM2MTkxNDg3QThGRDJCNUVFQTFBQgotOjEwNUFDMDAwRjQ1MERDQThCMDlDNTc1QTM3MzJBMEZFMkZGMkVCRDIyQwotOjEwNUFEMDAwQjU1M0Y5OEQyODdEQkRGNDc3NUZGNDczNTc4NzdGQTZBMgotOjEwNUFFMDAwQjY0RTczMzU3QTlFM0Q0Q0VFQzNCOUU1MjlGNjQ1QkNGQQotOjEwNUFGMDAwRkY1M0VDRjhCRENEMzk1QUY5OUMzMkYzRjdDRUY1NzI2RAotOjEwNUIwMDAwNzVGMkZCRDVEODI3Qjg5Rjg0RjVFQTU4NkI5M0Y2Q0I4RQotOjEwNUIxMDAwRUQ5N0FENTczMkU0MDIxRDhFQzU5QTlENzJBMTY2NkY1NgotOjEwNUIyMDAwNUNBNEM5Q0JCNDVFOEI4REVCQjVGODcxQjk1RUE1Q0YyMwotOjEwNUIzMDAwQkVGNTE3QkM1MzQ2RjNEM0RFQTM5M0VGMEE5NEI0RUMzRgotOjEwNUI0MDAwRTA3NTlCQjM2NjlEMkQ4NUVBRkQ2NDU4OEEyOUZFQTgwMQotOjEwNUI1MDAwQjQzNkNGMDUzQkZEREMzNTFCNkRFMDA3M0YxOTI2RjE2MAotOjEwNUI2MDAwMTY0QUY3RjNCNUY4NjIxREFGMzg4RjE0ODMzRjQ3QUY3RAotOjEwNUI3MDAwMEYzRUI4ODNDNkI5NzU1OTc4QjRGMTc3RUQwMjFBM0Q3NgotOjEwNUI4MDAwOTdENkM2QzY2MUJDRDJEQUUyN0JBMTdGRTlFNzQwRThERQotOjEwNUI5MDAwRkUzQjExMkVGNzQ1MDlGNTg3RkQ3OTYyOEM4N0VGNTU5RAotOjEwNUJBMDAwQ0ZENzdFMzcyRkI0RkU0MzFBRERGRERBMjZERkJGNEM5OAotOjEwNUJCMDAwOEE2Qzc5OTJFMzNCNkEyMjNDRTAxM0U5RTlBRDAxOENGRgotOjEwNUJDMDAwMEI3QTA2REM3NjhCN0MyRjMzQkRCMkY1NzNDMDQxQTIxNQotOjEwNUJEMDAwM0NDN0Y1MjBDNTdCNUIxMEVEMTMyOEJGQzkyMkVGNzlDOAotOjEwNUJFMDAwQTVBQTMyRERBN0UxMDdBNjM3OTQ4QjVFQURGQzFFNUY0OAotOjEwNUJGMDAwRTdCQjUxMjFGNDZBMTc5QkQ3RTBERDFGN0IyRkMxRUY3NAotOjEwNUMwMDAwQTZFOUY0QTlGN0EzRDNBNzRFQkYzRENENkZEN0Y3OUM2NAotOjEwNUMxMDAwREY4OTE0Q0RDRTkyRTU0OTc2RDBCODBCRUUxQkM0QkYxOAotOjEwNUMyMDAwNkJGMTVERjNCNDZCRUYzNTc2Q0UzNzRDRkVERUM3NjVCNgotOjEwNUMzMDAwRjM0RDk3RkE1MkNGRjM2RDJFNENFODY2QkVBMUYzRDQyNAotOjEwNUM0MDAwRjc4OTFFNDNERkU5NEY2OTkyRkU5NDEzMEE5RDYzRDRERQotOjEwNUM1MDAwRUVDNEIyNzA4RUFCRDNFN0E1REJGNUJGRUZCRDg3OEY4NwotOjEwNUM2MDAwODZDNTY5RjZBQUQ2MjhDODk3RjNCNURGNTExMTQxOTlDMAotOjEwNUM3MDAwQzdGN0E5ODZFRkZBRjlBRkJGNUZBN0YzRTk5M0I1REFFMwotOjEwNUM4MDAwRjkyODVBRUZDMTdFMTY3NTY5N0MwRkY1NThEMzg5MjgxQgotOjEwNUM5MDAwQkMxMzczNjI4Qzg0NEY2Rjc3QUI0RERFNzMxNjUxNzZGNQotOjEwNUNBMDAwMzdERUNGQkJFOUQ2M0NGRUJEOTQ4NThEN0Q1ODlGQkRDOAotOjEwNUNCMDAwQTkyRThERjlDMjREN0U1ODE3NDVBNzFFQjA0OEUzODMyMwotOjEwNUNDMDAwOTFCNzE2QUZCRTAyRjVEN0E3RjBFRkMyMkQ3NDdBNEU4QQotOjEwNUNEMDAwQURFN0Y2NDMzRDkwMTMyMzlCQTdEQTUzNTkxRTk2RkE3RQotOjEwNUNFMDAwODJFRTE3QkI1NTExNDU3QzRGMEQ3QzEyRkJDQkIyM0ZBQQotOjEwNUNGMDAwMURFN0NGRTJGNTUyM0Y5ODY0MTE2QkUwM0YxREQ4NTA4RAotOjEwNUQwMDAwMzRBMTJGRjhDNEMzOEFGQzNEOUEwREU2RjdCQzg2MEU3OQotOjEwNUQxMDAwMkFGQTAyN0MyNkY0NURCQzVCNkQyRDVFRThBNzgyRTQ2NgotOjEwNUQyMDAwMEVEOEQxMTYzQThCNTg5RUJGNDVFMzkzQzc5QURCRjgzRAotOjEwNUQzMDAwQkQ3RTFEQUY4RkUwQkY3OEE3MkFDNDdFMTQ2QTI3MUFFNAotOjEwNUQ0MDAwQThEOTA3RkYxRkFGOEY3QjNEMDA4MDAwMDAwMDAwMDAzNwotOjEwNUQ1MDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZCNTdDMEI1QzU0NjU0MQotOjEwNUQ2MDAwREFGODdCQ0U5OTJCQ0NDMDgwQzg0NTEyODc4Qjg0ODUwRQotOjEwNUQ3MDAwMzRDMDgwRDdEQTUxODE1MEJCQTBCQkI5QkEyMThFNjUzRgotOjEwNUQ4MDAwQ0E2NTA2NTBEQjVENzdEN0ZFOENBMUE2NjY3REZBNDUxNQotOjEwNUQ5MDAwQTY2NUVEODA5NzZBQzM3NjQ4MzQyOEE4QzkwQjk5NTkzRgotOjEwNURBMDAwN0Y2MjM3NkEyRkI5NjM1QkU2MkQ0MEJBRkNFREJGNkRBOQotOjEwNURCMDAwN0RDRkYzQkNFNzMwMTc1MURCRkRCRTZGRkNGOTdCNzk3QgotOjEwNURDMDAwREZGMzVFOUZGQkYzQkNDRjM5NjMzNDhDNzUxQjE4NjMyNAotOjEwNUREMDAwMkE4QjhFNDEzOTY4NDg4OTY0OTk4QzhEMDk2OTVGNjE4NQotOjEwNURFMDAwNEM4OUMzRjYyNURCNDVDNjQ2NDBGQjdDOTNDODYyMTk0NwotOjEwNURGMDAwMkJENzMxRkE3RDhGQkYxRjMxNzYxRjNDMzdDM0YzNDI1QgotOjEwNUUwMDAwQTkzNEQ2MDdGREQ3MzdDQ0EwNzJDOUQ2QzI2REFFRjE4MgotOjEwNUUxMDAwOEMyNTA5MjVCMTkzNjM2MEMwRTM2QUI2MDc4QTI1Q0U1NQotOjEwNUUyMDAwMTk3NzMwMkJDQ0QzQTQ4REQyMjVDMzczQjUyQjI5QzdCQQotOjEwNUUzMDAwRTA5RjZGNDlFMzQzNDkwQ0M2OUQ2OUQ0Q0Y3NzQzN0IwQwotOjEwNUU0MDAwODE2OTRFNDExNDhDNUZCQTMzMkE1QjMyRkJGQjVENkY3NAotOjEwNUU1MDAwMTExODFCQzk1OEE1NzM0NjFDNEI2MUNDRjFEREUxNjdENQotOjEwNUU2MDAwNENBOUIwMUY5OEQzMDRGMzdGRTUwOTc3QkJBMDhCQTM5RgotOjEwNUU3MDAwQUUyRDQ5ODIyMzNDQUFCM0E3NThBMDdGOTVEODMxNkY5NQotOjEwNUU4MDAwMTJDQzczNEU3MEVGNERBMEZFRTYzODUzQzBGQUExRTU3OAotOjEwNUU5MDAwRTkzQUM2Q0NFOThDMzlGRkNGODczNENGRTdFMjg5M0JCQQotOjEwNUVBMDAwMTZDMDc4ODc3MzdGMDRDRTUzRjVGODFGRjIwMTMyNkM2OQotOjEwNUVCMDAwOUQ2OENGQjJFNEUxQkM4RDdCNEQxMjFDNzQ3QjYzNTZCMAotOjEwNUVDMDAwMDk5Q0UzQkVDN0M3NDZEQTMzMkY5RkY3QjY2OEI2QTg2QQotOjEwNUVEMDAwMDREQUNCREIxOEMxNTc2OTVGRTg4RUQ0MjBEQ0VENUVCNQotOjEwNUVFMDAwQTYzMTYxNjk2MjlBNjgyOENGNDg2Qzk1MDdDQURCNTI2RgotOjEwNUVGMDAwRDhBMkI5MDY3RkJCMERFMTAwRUI5RTg5REM5MjU0MDI2QgotOjEwNUYwMDAwRUQxNTdCOUY0ODMyNDM3OUQ2QzhFQkE1N0I3RjdBOUMwMQotOjEwNUYxMDAwNDU0MEZGREQ1QTBERTJENUFFNjIxQTBCOENCQkQ3MjU4QQotOjEwNUYyMDAwRDhEQzUwQjJGMjY4QzYxMjEwQTM2RTdEOTk5MUIxNTlCNwotOjEwNUYzMDAwOTY3MDlBQUY2MjdCMEU2M0I5RkU3REMxNzM2QTNGQUIwOAotOjEwNUY0MDAwNjJDNUI4OEYzMUY1MDNEOUNCQTFGQzhCQ0E3QjFGRTJBOAotOjEwNUY1MDAwRjMyRkI1N0E4QjJCMTlGMTYyMjZCQ0ZDNjU4QjU0ODQyOAotOjEwNUY2MDAwRURBRUZCMDUzNjU2QzBGQTdFNjMxQUFDNUYxNkM5NkEwMQotOjEwNUY3MDAwNzE3Q0ExRjQ1NzlCMDRDRjU3MUMxMEIyQjUzMDdCNzhDRAotOjEwNUY4MDAwNjZCN0U2MUUwMzkxMTZEMTU5QjU4OUQzRDk4QTc2NzVCRAotOjEwNUY5MDAwNTEyMkUwN0Y0NThCNDAyRDBFOTU1NzMzMUNCRTJBMkY5MgotOjEwNUZBMDAwNEQ2NkU2ODBGRDU2QjZCNjY4Q0NCMDhFQTMxOUNFMDkxNAotOjEwNUZCMDAwRkQxRDlFNTM5QUE1Nzg1RUI2ODVCMTdDQzAyN0ZFODlFQgotOjEwNUZDMDAwRjg2QjNFQTVCOTM3MDAzRkQ1QUQxQzJFQ0U1NkRFQkVEMAotOjEwNUZEMDAwMzgwMzkwM0I5OUI2NjIxM0QyQTBERTI2NTBCRDNFNkJDQgotOjEwNUZFMDAwQzJGQzM1QUFDMDdBRkVGQzM1Njk1ODlBMDg0RTRDMzU3OQotOjEwNUZGMDAwOTA1NDAyRjBEQzk0RDFBMzQxRkMzQkQ3Q0FGMzQyNUQzQwotOjEwNjAwMDAwMURCMDVFMEQxMkU1NDhERTlFNkFDMEYxNjYxQUFGM0MxNwotOjEwNjAxMDAwNzdCNjQ2RDE3OEFGMzM2QzAzQkIwOTM2NTE2RDUwNjEwQQotOjEwNjAyMDAwNTlFRjM0NDQ2MEI5QjM1NkNDNTA1OTcxNzM2MTE2MDlCNQotOjEwNjAzMDAwRTBERjExMTY5MUM1MjI2MUNBQUE1RTNENDAxMjUwM0JCNQotOjEwNjA0MDAwNzA1ODg0RjZEQzQ4RkI4MzQ4OUY3MTBDQjgwMkU4MzMzMwotOjEwNjA1MDAwOTE3OTA1MDZGNERGREZGOTU5MkVDRTdGQ0IxOERGMTdEMwotOjEwNjA2MDAwMENCNkFFNUUzMzdEN0UwMUQwQzMyNjhCN0M4RTRDNUYzQQotOjEwNjA3MDAwMkVEMkYxQzg0MzQwQUZCMEJGQTdENTZDODMzRTA3Q0Y0NwotOjEwNjA4MDAwNTdDMkU2NDIzQkNDQzIwOENGREY4NEI5RjdDMERGQUZDRQotOjEwNjA5MDAwMzE2RjIyQ0VDRjc0REU1NDFDRjc5QUNDQTcyNTVBQzM5OQotOjEwNjBBMDAwMDYwMUY2RjU5QjE0RkI2M0I4OEYzQjA1RjVGODZDMTEwMAotOjEwNjBCMDAwNzEyMDhEQzU3RUZENkFGRTlDNkQ3OUMyQTYwM0ZDNEZFMgotOjEwNjBDMDAwRTdFODY3QTM0NUU2NjI0MEEyOUE1MUYxMDZBNDYzQzFERQotOjEwNjBEMDAwNjY2M0FCNjBGRDA3MzMwRkREQ0I4MDJFMUUxRUQwMzExMwotOjEwNjBFMDAwMkQ5Q0FGNUVDRkNGM0Q3RDIwRUM5NDAwRkQ0NjhGMkFFNgotOjEwNjBGMDAwMTY1OTE2RjQzN0FCNTgyOUY0M0Y5NDI5N0E1NUQ4OUY4RQotOjEwNjEwMDAwRTlEQ0Q4OUZFOTBBNkRCRTBDNTk5NjgxRkNEMDg4N0FFQgotOjEwNjExMDAwMUJGNUVGNzhGMzFCMDFDQTQ0RTlFMkUxNDgzODU3RTI4NgotOjEwNjEyMDAwMkYwNTRCM0RGNDI5MUIzQ0ZERjRGRjg1QjJGNDUyNTM3RgotOjEwNjEzMDAwQ0JFRkExRkM3NUE0QkQxOTUxNzc3MkIwRjg5NDFENTAzNgotOjEwNjE0MDAwRjZCMEM5QTNCMzY0RjJGOTAyRjdERkYxQUI2RjIyQTI5NAotOjEwNjE1MDAwNDVGRkJFRkEwNzRFRUY3QkQ5OEFBNUNFMjJDMEI4RTkyQgotOjEwNjE2MDAwMUQ5MjU3OUI3NUY5N0VGQUUzNjFFM0E5RDQ4RkUxMzk1QgotOjEwNjE3MDAwRkIwREEyNUIxMEIwRkZFMTBGNzE3RkQzNzUwNkFGMTQ2QQotOjEwNjE4MDAwODFFM0Q0MTc3QzNBRkYzODY2MUUxRDc1RkE0NjQ2MjgwRgotOjEwNjE5MDAwRjgzRTkxQjE1OERDM0M4QzFGQjg2ODcwMzdDMUI5NkZCQwotOjEwNjFBMDAwOTFGOTRGQTFBRjFFOEI0OEY4RTk5MUYxQTRDMDkxRTk5NAotOjEwNjFCMDAwQjIyMjkxN0VFQkQ1OEE1RUYwODVCMzRDM0Y3RkQ2RTg2NAotOjEwNjFDMDAwMzhGRjBDNUUxMjZEMzhGRjYwQjlENkNENjA4QUMxOEU4MwotOjEwNjFEMDAwNTREMjI3NTc5MkE3N0YwMDc5Q0E0MEQ3QkM5NzZBRkI1MQotOjEwNjFFMDAwMzNDMjBGRjk0QTA3RkM3ODk3MEMyRkMwM0ZDM0Y5MjUzQgotOjEwNjFGMDAwNzlGRUJCNjRCOERENjUxMDM5OUM3RTEyMDIyNzk5NkU2QQotOjEwNjIwMDAwMTRCQTUwRjYyRjk4NjM1ODY5QjQxRjlGRUNEN0RENDczNgotOjEwNjIxMDAwMjM5MzA5OEZFM0ZGODNFM0VGMTNDMkRGMzcyN0Q2MDExMAotOjEwNjIyMDAwMUJCMTUxRkY5ODQ1NzhGQzVGQzA5RjU3QjRGRTBCRjgzNwotOjEwNjIzMDAwRUIwRUM1OUY1NzdGM0RFMkVGNzFEMUQyODRGQzgwMDgwMQotOjEwNjI0MDAwQzhBMUQyMjZDMkY5NTgwNjIzRkUyRjkzQzIyQzlCRTA4OAotOjEwNjI1MDAwN0M3NkU0RkY5Qjg4RUY4RjIyREYyQkZDM0VBNkQ4MzdBRAotOjEwNjI2MDAwMUVGNUU0NDlDNjlFQzE3REY5NDQwRkI1QTc2NkE3MTA4NwotOjEwNjI3MDAwOUY1RkM3QkExM0IwMURGMDlDMzcxN0YxMkVEODc2RTg5MAotOjEwNjI4MDAwMjQyQzdERkI1RTg2RjU1RDE1MDZDQjFFMzg2RkJGNUI0QgotOjEwNjI5MDAwNzRBOTYxRkU4NjI4Rjc4RUE1QjA2RUMzNUQ5OTE2MTdBNgotOjEwNjJBMDAwQjYzMzk2RDU4NjcyQTAzQ0NDODI3QUJFMjE4QUNCODU0NQotOjEwNjJCMDAwODYwNUU5QTQ4NzBGN0UyNzI1QURDMjczMkMwOEIzMzQ2OQotOjEwNjJDMDAwNDFGRjg2NkNERjIzMTNBMERFMzBENjZDNzE0MUQ3NTdCNwotOjEwNjJEMDAwMDU5NkJFMURDN0NGRDFEMTNBMEQ3MzM4REQzNjNDMzI5RAotOjEwNjJFMDAwREE4RDdBMDVGNENGRjM3QUE4M0Y1OTFFQzZGMDlDMEREQgotOjEwNjJGMDAwOERCNjg0NjhBMENCOTcyMkVDQTNCMzYxRkZBMzI0NEU5NAotOjEwNjMwMDAwRDcwREM5RDAwRUU1MzZBMTY0QzE3RDM4REY3OEJFNkZFOAotOjEwNjMxMDAwREY4MkIwMTdGN0MyMkNGQTM0MTA1OUQwN0U3Mjk1QjFEMwotOjEwNjMyMDAwMDlFNUE1NDI5Nzc3QTU3Mzc5MzdDNjc1NkEwN0MyQzk4QgotOjEwNjMzMDAwMzU5RDY1RDRDMkZDN0Y5M0U5NEI4MUJCNjA2MzZDNTU4RQotOjEwNjM0MDAwQjQxRkZFMEE5REM1Qzg3MDE3NTY3MzdBNzM0RDk3RTU0MgotOjEwNjM1MDAwNjIzNTczRDcwQjA4NUZFNjBCMDdGODk2Njk0MTQxNDIzNwotOjEwNjM2MDAwNjkzNEQ5QURCOEVGRkFFNTgwMTcwOUY3Q0ZFMTdGNTI2QwotOjEwNjM3MDAwNjRFNTlFNjFGOEU3NDcyODJDRjM4ODRDMDRFNDhGMzJFQgotOjEwNjM4MDAwQzZGOUEzMENFOTA4RTk2RjE1RDA1MTAwRkQzMURGNzU5RQotOjEwNjM5MDAwNTFBN0MzNjUzQTgyRjE2QjhEMjVEMzcwQkRDRjg1M0Y4MAotOjEwNjNBMDAwRTQ2M0UzODk3RjRBRjM4NzVCNjc1NjM2OTcwMzBCRjQxMAotOjEwNjNCMDAwRjY5OUQ4OUZFRDhFMTQ1MTVGQUUzMEYxRjU0RTY0N0ZBMwotOjEwNjNDMDAwMzYxQUY1QzVDOTVGQkQ3OTFEOTZDNzIzNEE2RUNCODZCRgotOjEwNjNEMDAwRkVEQjE2N0M1RDg0RTJGQzZGMDkzRTM1OUVFMzZGMEJBRAotOjEwNjNFMDAwRkVGRjY4QjQ0M0NBNTZCRjQ5RjRGRTQzRjc1OTI4MTk2MwotOjEwNjNGMDAwMzI1MDRFQUYwNDdEQTYxNUIwRTQ3NEIwRjIzRTQ2NzQ0MAotOjEwNjQwMDAwOTBDODZBODk2RUUzNjVGRDA1MENBMzQ3Mzk3NUYzMDBGMgotOjEwNjQxMDAwRDg4RUNBQkNGMEZGNDc5Nzc0NkM4OUNFNUY5RkM2QTIyNgotOjEwNjQyMDAwODJFQTMzNzQwOTQxRkQwQjREQzk0MUNGNkY4RDFGMTdBRgotOjEwNjQzMDAwRjQ3Q0E2MzkzQkE4M0UzQjYzNTI1MEZGREIyREQzODI1MAotOjEwNjQ0MDAwRUE3NzRFOUMxOUQ0N0Y4RTZENEU1MEREQzY0QzI0MUZDQQotOjEwNjQ1MDAwM0FFQThBNzMzRjAxQkJFMUI1QkE5MkRDNEY1NDk3RTM0NQotOjEwNjQ2MDAwNjNBQUY2RDA3RUIzMDVFODI0REIzQjVGMzUwOUVBOTFFOQotOjEwNjQ3MDAwODc1NjI2NDM3RDUzQ0IxMTVFNEYzQ0Y0NDUzMkUwNjY5MAotOjEwNjQ4MDAwNzNDQkQxRjkyQUQwREI1MzZGM0NGNDQ1MEFENDFGNkQ4RQotOjEwNjQ5MDAwRTlFMkNGQTdDMDYyQTM0MEFDQjZCQzM5REYwNUY4OUFFOQotOjEwNjRBMDAwOUI2MkRGOEFGODlBNzdBOUY2Mjg4QUY5RjdEN0NDQkREQwotOjEwNjRCMDAwMkY1OTQyQjkzMDY3NzQwNkVDMjczN0M1RkUxMDNFQkYyRQotOjEwNjRDMDAwMkJGNjlFNzU5MTAwRkIxRjdENUJBQjQ2M0NCRjk4NUQzNAotOjEwNjREMDAwQjIxNUU5QTFGRjIyQTdGMzUzODg5NzkxRkY3RTA5OTY5MQotOjEwNjRFMDAwMDNEOTYxOEE5Q0JEOTIzQzU0RjhBRDAzRjRDNjEyMTVFMQotOjEwNjRGMDAwQzI0OTQ3QTVCN0NFNDRFNUExQkE3ODJBOEZENDk5RDkyNQotOjEwNjUwMDAwMTI4MDYzNTc1RDA2OTVDN0VBMkNENDdFQkM2RTIyOTUzNwotOjEwNjUxMDAwMjdFQTZDNTRCRTVCNTc0QzY1Nzc1RDA5OTUwQUZGQjI1QwotOjEwNjUyMDAwQkQ5NjBENkEyNDQyOTcyQUVBQjRDRTRGOEY1N0QyNjNBNAotOjEwNjUzMDAwMjAyOEQ5NjkwNTlGRDBGOTREQkRBRDM5OUJDRTc1OURGOQotOjEwNjU0MDAwMDlFOTU5NjkzRkRBRjk4MTU5MDRGQTlENkFENTExM0Q4MwotOjEwNjU1MDAwNEYzNTc0OUI3NTU2NUU0N0I5QjhGQjIyRjM4QTExQkM2MAotOjEwNjU2MDAwOUYyQUIwNUY4QzI3MUJGRDk4QTkwRTAzRjU0QjFCODQ1NwotOjEwNjU3MDAwN0U1OUQ4RUZDRDA0OTRGNzUzNkIzNTE2QjQ2MzlFNTAxMwotOjEwNjU4MDAwMzM5NzFFRjY2RjE0REY5MDcwMURFMzIwQ0E2Q0Q4MDU5OAotOjEwNjU5MDAwMThENTNBOTA1NzcxQTA2QkYxMzlGNDYzM0EyODc3MEYwOAotOjEwNjVBMDAwRjJGNTQ2NDdENzJFNDdGOTM0QkFDQzYwQTlFN0YyOTUwMQotOjEwNjVCMDAwRTQ0QkUyMDg2RjAyRUUyRjcxQTU4NkRBOEQ2MjhGMTkyNwotOjEwNjVDMDAwRTU2MDVGOUQ3NzE2RDI2OTgxMkNFNzBBMzQ1Q0VGMzA3NQotOjEwNjVEMDAwMTFFNEJEODA3Q0ZCNkQ1NzIyREFGM0VEREM5RTJGRDBGOQotOjEwNjVFMDAwOTZFQzQ0RkFBRTU2NzFGRTY1MzE3QUY3MUU1QzQ3RDVEQgotOjEwNjVGMDAwNURGMTJDRjRFQjg5NERCNDZDNDI2OEM1MUY2NDY5NjA5MQotOjEwNjYwMDAwQjcxN0Q2MTQ2N0EyRENFRDYxNUI4OEFGQzE1RUZEMTNERQotOjEwNjYxMDAwRDJEQjhGMzM4MURGNDU5OTQ4NjA5RUY4RTJGMEE2NERDQQotOjEwNjYyMDAwMDJEQUFERDdFNzIxNURDRUQ1OUEwRjMwRTAwNzVGRjZFRAotOjEwNjYzMDAwMDBEMUZCREM0ODczMUU3QTBBQkVFQ0FGNzkzRENFN0NGQwotOjEwNjY0MDAwNDA4MEU3MjYzNjMwQkYwMEVBNTVDRkU5NEQ5RjA0RjA4MQotOjEwNjY1MDAwQTlEMzEzMTU1NEFGNjk0QjMwN0QxMkMwQTc1NUY4MDc2NQotOjEwNjY2MDAwRkE0N0I3MDkyQTk0QkIwRTc5MkJBNzA0RkIwNUM0QjdEOAotOjEwNjY3MDAwQjNGODczMERERkRGODAwNkVERDg4QkQ5NjZBMjZGQjA1QgotOjEwNjY4MDAwOTc0OUVGMEZDQzM0QkE5QjYwQkY3MTIzNkFCMzU3QTAxMAotOjEwNjY5MDAwRkQ5NDY5Q0VDMzdFNDlFQTgxMDhGNDYzRkFCRjU1MTVCQgotOjEwNjZBMDAwQkJDOUVGMTk4OEY4Qzk3ODNGN0QzREQzMjE1MTdCMjhCQwotOjEwNjZCMDAwRERCNUU2NzA3RkFGMjZDREIwMTlGMTUwMURBRkQzNTFENwotOjEwNjZDMDAwRDk3MUIxODg5MTlENTY5Mjg2NzZCOTREQzNGRENCRDBENAotOjEwNjZEMDAwRjE3QjczQjgxRTQ5NUVBRjIxQjk0MEEyMDhCNjZDMEJCRQotOjEwNjZFMDAwNjM0QUREQzUyNjMyRDZGODhCQjAyMUJGMDdDMEM5MzQ1NgotOjEwNjZGMDAwNjM2NTNGQzgzNTYyNDc0MTVBNTA3RjFCRjYxRjdBOEU0QgotOjEwNjcwMDAwRjYxQ0YzOEY0Rjc5NDlCQjYzQUQ0QTVFMEZFOTY1MjlFQgotOjEwNjcxMDAwNzNBMzNGMTgyQUM3QUI3MkEzNjVCOUMwRjFGQzc0OEM5MAotOjEwNjcyMDAwQkUxMUYxOUMyNjAxN0RFNzUwQzk0QzUwMjY4NjMzQjIzQwotOjEwNjczMDAwMzcxMzVGRDdCQjkxM0U3N0VCMzlGREE3ODlCQ0RDMkRDMgotOjEwNjc0MDAwRjJGRTlBMzBFNjQyN0E1N0ZDODc0REI5RjYyOUI5NzlCQwotOjEwNjc1MDAwMzQ4Rjk3RTY5MTVBQjI5MUFFMTM5ODg3RDY1N0VDMjRBRQotOjEwNjc2MDAwQTUxRkQ4NDM3QTEyMDJBQTgxNzRDNEQ3NTQ0OTFDMTZCMwotOjEwNjc3MDAwOUUyNzcyQTYxNUU1OEM0NEZFQjBCMTRGMDNFNDc3NUYwNwotOjEwNjc4MDAwNzhDNEFBNDBGQzU1RTM3ODQzRTBCOEU5MzQ0RTE5RUZFOQotOjEwNjc5MDAwNUMyNUIyNEY0NzkwNUMyNDNBNzJBNjg5RTQyRjU2NEI5MQotOjEwNjdBMDAwRUM4ODgwRkUxNkVCRDZBMDlFNTNDNkY1ODIxQ0ZDMTQyNgotOjEwNjdCMDAwRjBGMDQ3OTA4QjU4N0UwOEYyMTBEN0ZGMzNDODQzMkM3NwotOjEwNjdDMDAwRkYwQUYyMTBEQjRGODIzQ0M0RDIwN0YyMTBEQjNGMDYxNwotOjEwNjdEMDAwNzk4OEU1QkNCQjhENTZFNDlGOUFCNjY5RUNEMzIwN0VFMAotOjEwNjdFMDAwNTBEQjdEMDFGNURFNjlDM0QzOTE0M0E2QTNERUU0RTE2RQotOjEwNjdGMDAwOUZBRkNCRTE3RTQ1RUYyRDFDOUZGREEwQkZEMUZGMDBEOQotOjEwNjgwMDAwQkE1QzZCOEFCRUIyMUVFRjM3QjJGOTFFODBEM0I2N0M3QgotOjEwNjgxMDAwNkU4N0Y0MjdGMEZBRDIxQzM1RDU2RDIyREI4RUUzQjdGNAotOjEwNjgyMDAwRTU2QkY4RkEyOTYyMzkzRUI3NDVGMzc5N0JEMzQ1QjI3NwotOjEwNjgzMDAwOUZBNjRFOUVCNjI0MDc5RURCNjJBMTNEQzc1RkVGQkRCQgotOjEwNjg0MDAwODEzRkI3OERFMkVENDM3QTU2N0UzRTI1RDdBNEY4RUYxRgotOjEwNjg1MDAwRTlEQzJGNjU2NDI3MDFCREQzRkM0QUZGRjcyNjcyM0VCMQotOjEwNjg2MDAwMENFREVGNEUxMzhCRERDM0MwRTMyRDk5NkY4OTJGRDA1NAotOjEwNjg3MDAwOUU0NjNFNDgwRUUwOEI2QTMzRjE4NTQyODcwQUZENTVGRAotOjEwNjg4MDAwRTU3MjM4QTc2OTY1M0EwN0RENDJGMDQzMUQ4MzcyM0EyNQotOjEwNjg5MDAwNEU0RkY2MjVDMEM1QzZFMDNDQkIwNTk5NUY0MkY5MDFFNQotOjEwNjhBMDAwNEFENDA3MEEzRjI4N0NBMEQwN0IyMkYwOTkxMEVEM0YwNAotOjEwNjhCMDAwQzdDRDIxRjRBQTk0OEZDQUU3RTg4RTM1RkU5Q0YwREFBMgotOjEwNjhDMDAwQTEzNkExREY3NzMzQ0M4N0UzMTNDNUMxNzdFRjQ2RkU0RQotOjEwNjhEMDAwOEMzNTlBRDFGNTJDN0NDODUwM0I5QzFDRUJGQUVGQzI0RQotOjEwNjhFMDAwNDM5MTBCNTc4MEM3NjU3MEQwRjBGMjVGODUwM0M5MzlCQgotOjEwNjhGMDAwOTRFMzQ4QkZDM0M4QURGRDM5RDFCMjVEQ0VFOUY3NDREQQotOjEwNjkwMDAwOEU2RDFGRDI1MUJGQTA1N0ExREZEMEFGNjdDM0RBRDlCOAotOjEwNjkxMDAwREJGMjM5N0YyODc0NTQwNTNBMTBFQjg5NzhDRUQ0Q0I1QQotOjEwNjkyMDAwRTU5RTcyOUVBMTczMkU2MzI0RkZEMkMyNzg3QjI4OUVCRgotOjEwNjkzMDAwOTU3MzA1QzhCRkMzMzkwMUYxMUZDNkI4N0Q3MTFERDg1NQotOjEwNjk0MDAwMTdFODRGNERDOTM1RDMzRUZBNDc3RTU2QjY5NUY5Q0Y3NQotOjEwNjk1MDAwN0Y0NzBFNkY3RjRBOTQ4ODFFMTRGRDMyRDQyRTQ4OEJEOQotOjEwNjk2MDAwRTY2NDA2RTkxRDY2NDIzRkFGNTM0QkZDRUUwNTdGRTY0OQotOjEwNjk3MDAwMjUxODg3M0UyMTlCRTQzRkJGMjBFMzcxNzBGRTU4MTEyQwotOjEwNjk4MDAwRURCQkJFQUYwRDJFRDQ2MzdEQTMwNjRFMEEzMEJFNkZBNQotOjEwNjk5MDAwM0IxODM2NjQ5N0Q4NkUxMzQwRUZERTA3M0EwNkY1RDRGRAotOjEwNjlBMDAwMDU5MDdCMkM5REIxNzM3MjFDQTFDRjczRjEyNEZBNzNGNwotOjEwNjlCMDAwMzUzQjI0QTYwMzUwNEEzQkJFOUE4N0Y0QjRCNDUzNkRDQQotOjEwNjlDMDAwQTJCOEQwRjZDNzhFMjEzRDlFNkUxNUNDNjg5N0Y0QjU1RgotOjEwNjlEMDAwQzJGMUExQkZCM0MxRThENjQzRkYyMkE4NjNGRjY1MDY5OQotOjEwNjlFMDAwOEREQkNDRDdBM0Y4ODM0MzVFRUY1MzdENzUwQUM2ODU1NAotOjEwNjlGMDAwNjZFQzUwMTNEQzk3M0UyRkI5RDEzRTNCQkM3REE1MEExNwotOjEwNkEwMDAwRUJBN0REMDI4QjgzNzE0NUQyRUFBRTA0QTg1NzNFMkQ3OQotOjEwNkExMDAwNThCNDMwQ0U2MTI4M0E4QkYxODJDQUU3OTlDNTBCRjM5RQotOjEwNkEyMDAwNTdCNjE4QzlDRjVEREFBMEZFRDgxNzYwNUY5NEJCQjcyMAotOjEwNkEzMDAwNkFEMEVFMjlERjE5REM1RUI5M0JCODBFRjgyMkY5RUYxNwotOjEwNkE0MDAwNjg4NkY2MDBGOUZDNkQ4RTMxODZFQ0NENzEyQzFCRUQ1RAotOjEwNkE1MDAwNERENkMwRTNCOThBN0NCRkRDNkU3NTcxMzlCQTgyQ0I4MgotOjEwNkE2MDAwNkRDNkJFOEM0NTdGNUZFQUZDMkFFOTYzMDNBRkNGOTExOAotOjEwNkE3MDAwRUJBN0EwRkVGOTU3MUMyRjBBNUNBQUU1QjUzRjRGNjBCMwotOjEwNkE4MDAwNTYwRjlDQjdCQTUzNkY0MkZGQkZCQUZERUYxMTE4Qjc0QwotOjEwNkE5MDAwQUYwOUYzNTE3QzlGQkQyMjk5RDBERURCRDgyNkI5MTAxNwotOjEwNkFBMDAwQkVDRTBFRkQyRTExRTA1NjdERTAzRDhERDk4ODcwNUY4MwotOjEwNkFCMDAwNEVGNkNBQURDQ0I1MUVFM0RDNUU1MTY0REQ0NDQ3REQ2NQotOjEwNkFDMDAwMTRBNzY2QjY4MUE1Mzg0RjVGQkJERTg0NzY0MEY1MkJGMAotOjEwNkFEMDAwMUY3NEREOERGNTAzMDJEMzIzMUU0N0ZCODg0RTk2RUUwRgotOjEwNkFFMDAwNDA4NkE1MkRERDI2RTRGQkU5NDQ0MkJDMjI5RTNEOTE3MwotOjEwNkFGMDAwODRBRjY1ODg3N0M0MzNFMDFERjEyQzIxM0U3MUJDNTExMQotOjEwNkIwMDAwRTNFNjc0MjI1MUZERjQ3MzFDQkYwQURFOEJBNENEMUE5OAotOjEwNkIxMDAwNkNBRjZDRTQ3ODlFQjE2M0NGQjYzMEEyMDMzNTkzRTlENQotOjEwNkIyMDAwODBGMDdFN0EyN0M3QkJBNjczOUQ2NjE0RDI2RjYzMDg3OAotOjEwNkIzMDAwMURCNDZCODdFODAwRjc3NzE5MUQ4NEUwQkYwMkYwOEQ2NAotOjEwNkI0MDAwNzIyMDk0MEU0MkYxREY5M0MzRTUwNkQ4REZBNzlGNDI3RgotOjEwNkI1MDAwRkJEQjA4N0UwMUYzQzcyMzQ2NTZGNTFFOEQ4MUY1Q0E3RgotOjEwNkI2MDAwQTJDRjNCOTc0M0ZCRDhGODk3NThEQTA4OEE3RjE1RTQwMQotOjEwNkI3MDAwNjJGQzZCRTYzQkVCMTA1RDNEQjM1RUM4NDY3QUE5NTdGRAotOjEwNkI4MDAwRkJGNjNDODE3MThCQTg3MDhBRTNGNDI3Q0ZEOUY5MzJFOAotOjEwNkI5MDAwOUNCQjIwRkE5QkE0MTZEODdGQ0Q2QjVBQkFERTI4QzlCRAotOjEwNkJBMDAwMTU4N0VDMzU4Qzk3MjlGMTc0QzAzM0M1Qzk5QzFENUFFMwotOjEwNkJCMDAwMUUxNzZCMkRCNDA1RkE3M0ZEMDlGQzVDODU5QTgxQjIzMgotOjEwNkJDMDAwRTVFODE3QzA3Q0I4OEU2MEUzN0U1RTU1MDc4RjE3MjgxNgotOjEwNkJEMDAwN0U1OTk1MTIzNzY4MEU4RTFCMDhBNjc3QTg1RjQ1MkU0MgotOjEwNkJFMDAwOEY1RkE1QzZERDZDNDYzQkJDN0UwMUIzODdBNTVFNERCRAotOjEwNkJGMDAwM0ZGMDc4Q0NEM0IyREY3NDQ1RkJGMTBBN0E0MkIxMUI4NwotOjEwNkMwMDAwOTkyQjM4NkVBMUM4QTk2NTEzRjkxRThGRkVFMkI4NkFFOAotOjEwNkMxMDAwMDRDNkZENzYwQjg0OEY4QTBFOTA0RjcwREUwQUI3REFCOQotOjEwNkMyMDAwNkQxNjAyRjg0OUVFRkYxOUQyMUJDMEVEOENBQkY2QTAzMQotOjEwNkMzMDAwMjgyMUREMTk2OEJGMEU5OTNFQUI5MThFRTBCQzk1RDYzOAotOjEwNkM0MDAwMzcyMkYwOUMwRTU5QUUzOERBOEQxNDdGQUI2NDVCOEEyNAotOjEwNkM1MDAwOTBFRTJBNjEzREVGMzBGNDU0Rjk1QzBCRjkyOUQ3QTI4QwotOjEwNkM2MDAwMjdDNUNFQUM2RTBERUVCNzMxNzc0OENFOENGRjFFRTA1NwotOjEwNkM3MDAwQkIwMTY0MzlENzdCMkU5OUZFMzIyM0YxREU2RjkwOTlFOAotOjEwNkM4MDAwMjM5MTlGODdGNDlGQzBFRDM3NDVGRTVDQkYxRDU4M0NBNAotOjEwNkM5MDAwNjBERTcxNkUxRDUzMDVBQzdGRTM3M0E2QTBGQTc4NEZEQQotOjEwNkNBMDAwN0M1MEZGOUJEQUNDNDFDRkIzQkQxOTQxQ0Y3MzhGNTlENAotOjEwNkNCMDAwODJFQTc5REQxMzgzRkE0RkY4RDAxNjU0OUZFNDJCMEU0NQotOjEwNkNDMDAwRUEzRkU1NEM0OTUwN0QzMDEzQ0U3Mzk1RkJDMTVCRTM0MQotOjEwNkNEMDAwODVBMEZFMzNDREZBQTBGOTY3Njc0NDA1RDUwNzBEMzJDQwotOjEwNkNFMDAwN0M2NEJCNTJCMTc3NUZDRUU1RjY2RTY4QTlDMEY3NzZEQgotOjEwNkNGMDAwNEJGMDNBOEFCRjdFRTdDNEUwRjVFNkQ4ODJEN0ZCQTEyNQotOjEwNkQwMDAwNzhEOTBCRkE1NDA1N0VDMjczQTA1RkIxRkMxREY4MTM0RAotOjEwNkQxMDAwMkFGMDEzOUFDMTlGQzBGQThCRTA0RjYwRTkwMTdGMDIwRAotOjEwNkQyMDAwREI1RjAyN0YwMkVCQURFMDRGNjBGRDIwRjgzRjU4NkY2NAotOjEwNkQzMDAwQUIyQkE2RjI5NUJBMTI2QUJGMTZGQ0JBRTQ3NThGQzlERQotOjEwNkQ0MDAwRUIxRTk3RDdGRDc3RTE3NDQyOUVFRjVENzlCRTZFOUM5NgotOjEwNkQ1MDAwMkZDREZGREM1OTNDNTZCQzA0RkMzQzJERkFBQ0M2ODc1OQotOjEwNkQ2MDAwN0VDMzBBNUYxMUM2MkQwNkRFOTIxOEM2QTU5OUREN0Q4OQotOjEwNkQ3MDAwQUMyRTA2RjVEOTA4OEEzM0IzOTI4MUI3MzFBRTUyN0Q3NQotOjEwNkQ4MDAwMjBENUI0Qzk4Q0ZBRUMwRkVGRTJGM0JFNTZDOThDN0M2NwotOjEwNkQ5MDAwNzlBOEVERUYxMTM4Q0Y4NTRCNjE3NDVGNEE3QTEwRUYxNwotOjEwNkRBMDAwMUJCRjYxNTRERjA0Q0YzMTBFM0FCMzA1MDQwOEU5Mzc0NQotOjEwNkRCMDAwMEZFOUI3MEI2OTRBREQ0REY3QkQyNUNEMkQxQUM0NTMzOAotOjEwNkRDMDAwMTVGMjI5M0M3RkNCQTMwRTdFRkU1QzYzRDA3MzEzRjZENQotOjEwNkREMDAwODdCMjRBRTVBNjM4QzJCOTM2NjUzRTJGRjU3N0E0RjFFOQotOjEwNkRFMDAwN0JDRjczQ0YxRDVFM0YwNUY1NkZDQkUyMTE3ODdGNUVFMQotOjEwNkRGMDAwRDVGQzVFRUNCRDU3QzFDN0U3MDc1RkM4QTRGQkNBNzZFOAotOjEwNkUwMDAwOThDRkUwOUZDRkQ5QUU5NkVCN0NGRjhFQjQ5NkEyNjg2OAotOjEwNkUxMDAwNTQxQ0NEMDIxQjBCQzUwNUI2ODVFRTVGQUFEQUY2MzgwOQotOjEwNkUyMDAwNTA2RTU1NjVEQ0FENjYwMDlGN0U4RjI0QzczN0Y4QkQ3OAotOjEwNkUzMDAwOTFDM0M0QjgxREU3RjkyMjAyRUY1NzVGRjcxQ0JEQzMyOQotOjEwNkU0MDAwODZGOEVEMzgxQzgxRUJGNkI3NEE0MUZFRDM2ODJCQjdDNAotOjEwNkU1MDAwOEY0NzVCMzU4NEJGMEJBRDg3MjNGMDVFNzdBM0U3MzBBOAotOjEwNkU2MDAwODdCQkNBNEJFNzNGMjREN0ZCQTEyNDc4Qjc0OTc0RkUwMAotOjEwNkU3MDAwOEE0QjYyRDAzRDc2ODY1NUEyNzk2NkI2OEQzNUUyQjlFOQotOjEwNkU4MDAwN0EzQzdDQkQxQ0FCOTlCN0E3MkQ1RTgyRkIzRjFFQkYzMQotOjEwNkU5MDAwMjA0RjIyN0IxMDA0MzVDQUYxMUI2NkVGNDEzQkE0Q0E4OAotOjEwNkVBMDAwMjNEOTg2RjNFRjBBRTQ3OUJCRDQ5QzRFREY0QURCREZCQgotOjEwNkVCMDAwODVGMkY4NzhGMTg4NkNEMjExOEE5RjY5RTU3NjZGOTEzNgotOjEwNkVDMDAwQzY5RTg2N0FBNEM3NjAzNjIyOUQzRjU4OUM2QTQ0RkNDMQotOjEwNkVEMDAwMUVDMjEyREI4Qjc3NjlFQzA2QkNDN0U2RUJGNTk4QkFFRAotOjEwNkVFMDAwMjM5MEVFN0E1QTczMjVCNDc3OTRGOUYyRTU3NTg3RTgyMgotOjEwNkVGMDAwN0IwODZGMkVDMjUzQjlCQkQxODBGM0Y4RjFDN0RCNzNBNwotOjEwNkYwMDAwQUMyNkVBN0ZEQ0ZEREUzQ0I0QUI3QTMyQzJDOTJFRTlBNgotOjEwNkYxMDAwRDIzMEYyQTdBQjlBQjk1RERDRDM5MUQ4MTg3ODRGOTJGMgotOjEwNkYyMDAwNjM5NUZERjIwQzkxRjBEQUQ3QTY5NkZCRERCRDg3MDVERgotOjEwNkYzMDAwRjU1M0QzMzkyRkVDMEVERThGQzk3REVBNTFCNEM3MUQ0RQotOjEwNkY0MDAwNEY0QjBDRjVBMjQzNUQxQjhCRTdGRjZDNjdGMEZFQ0E0RAotOjEwNkY1MDAwNjUzODNCRDRERUQ4RDgwMDdBNzVCNDBGRjE4RDgxRTg1RQotOjEwNkY2MDAwQkM1REUxMTMzM0UxNTNDMTYzNEYwNkI3RTc3QUUyRjk0MQotOjEwNkY3MDAwQkRBNEEzNjUwRkQxRjVFNUYxQTRFRTY0RjQxRjEyN0Y2MwotOjEwNkY4MDAwQTlBMzc4RTdCNUZDNjdDNTZFMDhGMEFGMThGQThCRUFERAotOjEwNkY5MDAwRTJENDNDMzFDNTZGMUZCQzk2NkJBQkI2OEU0NEJGQUIyMQotOjEwNkZBMDAwODRGQ0NBMUUwNkY2MkNBQ0U5NDQ3QjNBOTJGMjFGQjY2QQotOjEwNkZCMDAwRTFCQTgzQUQ2QUJBQkY3NkVBREE2NjdEMDI3NkQ5QTAxNQotOjEwNkZDMDAwMDUxODA1RjYzREI4NTMyRERGN0JEOTBDNjhENzJFOTVGMwotOjEwNkZEMDAwRUREQUNGQ0NGNjdDMDlGNEFGNzM4RDQ4RTc3MzY0ODZBNQotOjEwNkZFMDAwOTExRkQzMjdDQkJEQ0Y1QjkyRUYyNEJCRTE5ODY0NDJDNgotOjEwNkZGMDAwN0Y2ODg2ODdEQkMxOEU2NjZFRDc1NjdCOTJGRjYzMkFEOQotOjEwNzAwMDAwREFFRENENkFDQ0Q0NjA4QTFERTI5NEVEOTBEM0IyREQ4NgotOjEwNzAxMDAwN0I3QUNEODA4NkZDOUI0RTgxM0Q5NjhDNzkyQTVCQkIyQQotOjEwNzAyMDAwMTJFMUI5MzM3MzE2RDlCMzRFQTk5OUVDODk2NURCODNBNAotOjEwNzAzMDAwRUQwN0IwNkY4MkVBNTVDRjg1REExNzcyN0NDQjEzREM4RgotOjEwNzA0MDAwQUVGODg3REJBQzQzNzZDNjM4RjQ2NzBBQTVBOTcxQzhFOQotOjEwNzA1MDAwMEYyRkM4Nzg1NUZDOUI5NUUzMkQ5NEI3QjM1MTY1OUVDRgotOjEwNzA2MDAwQTVDNDIxMTA1RTM1OURGQjJCNzBERjZFNDc5ODg1RkMxMwotOjEwNzA3MDAwOEQ1NUFGMTA1Q0ZCQkZFNDdFNEM3RjNDMjM3OEY0MzMyRQotOjEwNzA4MDAwMEVERkZFMzY0RUU3MzU2QUMxOERGOTQ4MzU0MEI2MzQxRAotOjEwNzA5MDAwOUY0RTcwQUZDMTM4QjM2QjMwODJFNDEzNjNDNUM4MTcxRAotOjEwNzBBMDAwMkIxNjcwN0ZENTg2MzE1RjI4NkIxNTdFMDhEMUFCQjc2NAotOjEwNzBCMDAwQTg3QzUyNTQ4MDlDNjhCM0E2NTBCRjAyMERCM0EzM0U3NwotOjEwNzBDMDAwNUI2OUI0OTA3RTFCQTNFMzc2N0FFMTZBNEYzNkQyQzM0NAotOjEwNzBEMDAwMThGMEM3QjUwMUYxRjgzMTg2MDEwMUZCRUQ3RTgwQzdEQwotOjEwNzBFMDAwRkY5NTc4QzIxQzk1NDkxRDE1QTAxRjE5NUI0M0ZEOTU5RQotOjEwNzBGMDAwRjk0MUEyRjBGMUQ3OUFERjA0RjMxQkZDRjMwM0JDMjNBMAotOjEwNzEwMDAwMTFERTVGNTgyREE0Qjc5M0U2MjhGN0ZGQjVDNDk3Q0FFMAotOjEwNzExMDAwNzkyRTAwQkQ2MTFDMTg2MzM0ODgzN0M3Q0UzN0M4OUZFRAotOjEwNzEyMDAwNzNCMkVFRjUzOEFFMjg4MkVGQTMwOEY3ODNGNTMwNUUzMAotOjEwNzEzMDAwRkU1MTk2RTdCMTc5QkNCQzREMkUxNUY5RDU5MDY3N0IxMQotOjEwNzE0MDAwREYwQUY1OTU3OUY2M0Y1OTQ5QUU5OTg4M0U1N0NBQjQ5QQotOjEwNzE1MDAwMDJGNjRDOUM2RjE4RjlCQkUyMUQ4OUYwRkEwNUYwMDNBQQotOjEwNzE2MDAwRjJGQkMyNUFDMTlDMTY2NDJGNzEzQUFGRTE0REVDM0M2MAotOjEwNzE3MDAwRjNGNDRFNDUzOEI4NkNERDE5OThEN0M2Mzg3RjJENUFEMAotOjEwNzE4MDAwQTUzN0E3MDVERTA3MjBCREEzRkY1MTAyRkZGMkQxMkZDRgotOjEwNzE5MDAwRTNCRjcyNTNDNTZEOTQ1N0I1MkFENjhDRjcxNzM1QzgxRgotOjEwNzFBMDAwMEYyOUQ3QTZGRjUwQkE4N0RGNEVBNEI3NkFBNkI1QTBBRAotOjEwNzFCMDAwN0VBOTY5MEI3RDZFNTFBMTNERkU0RDA4NUYyNEM5NzQwNwotOjEwNzFDMDAwREE2ODE3RTg3RUJERjE1QjE1OEZBMzk1MEExNDM3QkIwQgotOjEwNzFEMDAwMEIxQTkxNEVFOTg3RkRDQUE3Qjk3MTdFQ0NCM0EwRkIwQgotOjEwNzFFMDAwQUU4NjE4MzlFRjJCODZFRUUxN0UyMjlGRkYyRTk1RjdCMwotOjEwNzFGMDAwMERFNEVGQTM2QTRGMzJDNjcxOEUzQUY5M0RENTAyRTYyRgotOjEwNzIwMDAwQTE3QkRENTJENjRENjU2Rjc4RjUwMTJGNERFRTFBOERCRAotOjEwNzIxMDAwN0VGODA3NzYyREM1OTExQUQ3MzYxOTUxQ0U2NkIxQjVDRAotOjEwNzIyMDAwMjZCQzFGMDMzNjc5RUVGQkRDMkJEQjFCQTFGNzY4OTQzMQotOjEwNzIzMDAwOUY5NUU3QzdGM0NBQkM5MkY4M0NBMDgzMzM4MEEzRjhCQwotOjEwNzI0MDAwOUNDQkM3NTdCRDdGMjAwMkUxN0VGRUZFRkRGMzdFQ0FDOAotOjEwNzI1MDAwRDAwRjAyQjkwNUYzNTRENkI2NjREMEJEOEM4Qjc1NjdEOAotOjEwNzI2MDAwRTRGQkYxQUJFMDUzQzExRkI0OTk4M0YwMEE2N0I5MEU5OAotOjEwNzI3MDAwRTAzMzlGMERFNDYzNkVEM0I1RjBBOUMwMzk0OTNERjAwQQotOjEwNzI4MDAwNjMwNDI1RTgzMTkyNDNBMTc4NTZFMDVFQ0Q2QUQ1M0M4RgotOjEwNzI5MDAwRkU1NkZCRUUwMkU4RkZCM0I1QTIxOUVEQ0FDQkYwN0VCNQotOjEwNzJBMDAwMERGQzc4RjVGQzkxRDcyODkwM0Y3QjI1N0MyOTc4NUFGNgotOjEwNzJCMDAwQzhCQzU0RkYzMDhBOEZGQjcwQTE0NEYxQzNGRjY5N0NDNgotOjEwNzJDMDAwMzVFNEQ5NEJGMkFFQzJCN0ExN0M3QTI1QkU1Q0I0MkFCNAotOjEwNzJEMDAwODQ3RjQzRjg3NDg4MkYyREYwMkYwMDdGRjY1NTExQzQ1QQotOjEwNzJFMDAwOEYwQTdFMUQ2NkYwOTM1MUZGNzUxODJENkU3NjM5M0UxQwotOjEwNzJGMDAwRDFERkM1RkQ1NEI2MEFFQzQ5RTE4N0YwQUI4RkZDRTM2MgotOjEwNzMwMDAwNTA3QzAxQUREODUwMUY1NEU3MDVGM0E5ODJDNzJCQzlBMwotOjEwNzMxMDAwMkQ0NUVFN0RDNEJDNDc0RDAyREQ2NzcwM0VGRTg1OTY2RgotOjEwNzMyMDAwRjJFOTk0RkIwQ0U1REVFMkQxM0NBRTZGNDJDQjhGQzBCQwotOjEwNzMzMDAwNkVDMTdCQTI0RDE5M0QyM0QxREVFQkQ1MjhGM0YwN0I0NgotOjEwNzM0MDAwRDc4RkQ2NzQ4RkM2N0NDRDhGQTZGMUIyNTdDM0YzNENCRQotOjEwNzM1MDAwOTRCQTJEOENDNzAzM0Y0QUQwQkExMDZFMUYwOUUzQTYxQQotOjEwNzM2MDAwQTMxREYwOTFGMENCM0I3ODNENEU2M0M2RkE4MkI4RTk5RAotOjEwNzM3MDAwMjZBOEY3QUE5NUY4RTE4M0IyRkM3NjUzRjlEMTgyMDlFMQotOjEwNzM4MDAwMDVENDRGNjA0NzEwMUU2NjgxOTVEMDNBODIxMDVEMEM3RgotOjEwNzM5MDAwRkJGOUU4RTc2MzczRjA1RTQwMzlGRjAzNzkzQzhFRjQ1NAotOjEwNzNBMDAwMUJGOTFDNDNGMUY2NUYwOTE0NkY1RjA0QUFDMzg0Rjc0RAotOjEwNzNCMDAwMDJEMzlGMjg0RTgxRjY5M0JGNEVDREE2RkJDQTE1QzFCRQotOjEwNzNDMDAwRUJBM0ZFNERBNjM4RTU1NjlBRTc5NjRCMDNFQUM1OTkxRQotOjEwNzNEMDAwRkU3RDBERTlDRDgyOEJCQzdEQzlEOEEwN0M2NjVCRjRCNwotOjEwNzNFMDAwMzhFRTI3QkI1MzIzNTE4RjI5N0E2REYwRDg3RTQzNjA0NgotOjEwNzNGMDAwMUNGNUFDMUM3NzFFQUE4RjdCMjQyOTUwMkZCRUIxRjczOQotOjEwNzQwMDAwRTE3NDlDQTc1Q0UzQ0FCMjE4MzA4RkY5QTkyNEI0MUZCOQotOjEwNzQxMDAwQ0FGNzNFOTQ0RTc2RURERThERTlFODlGOTQzNzNEOUNBOQotOjEwNzQyMDAwNkVBMzdBQjg5REZDMjMxNTNGRjdGOTdEOTM3NjZEMEExQwotOjEwNzQzMDAwQjBBMzZGOURDMEVERkI1MkREMUI4NTY4REZDRUJBRjFCNgotOjEwNzQ0MDAwRjM3NTE4QjcxRkZCNkI4MUUyNzAwQjU5RjczQUQ0Qjc4RAotOjEwNzQ1MDAwNjUxOTlDQUY1ODgzOEVFNDNGQ0M0N0Y3QTQ3QkM2REQwQgotOjEwNzQ2MDAwQkUxQkU1RkVGMThDQkZBQjk3QTBGRUNENTNEMTdDNjU3MgotOjEwNzQ3MDAwQ0NCRDM5MEVFMzZGMUIwNDhBQkZGOUZCOEZBNjdCRDcwNwotOjEwNzQ4MDAwQzU2QjA1NEQ3QzBDRUE1MTlFNzdGREM3QkMyODgyRTM5NQotOjEwNzQ5MDAwM0QxQkIyQkJCMEJENkMzNTZGOUZBNTc1QjdGNkUwM0MyOAotOjEwNzRBMDAwNEY2ODI4Q0YwQTE0NjU0QTQ5QzAzREY2MUZGM0Y4M0RERQotOjEwNzRCMDAwRERBMkNENzJCRUIxQkNDRUQ4NkRCMThEODFFN0ZDQTM4QgotOjEwNzRDMDAwOEM3RjU2RkUwMUM5ODMzQjY1QkNEQ0I2RkFCRDIzRjE1NwotOjEwNzREMDAwMzA2RkE0REFGRTY3OTQyQkVGM0U3RTNBMERFNTU5NDFGQQotOjEwNzRFMDAwRjREOTRDQTRGM0IxMUFGQjkzMTU3OEVFMjYyREM1MkJENQotOjEwNzRGMDAwQUQ1OTg5NTIxQ0Y0Q0ZCOTdGREE2MzU4MkU1QUJERjhDMgotOjEwNzUwMDAwQzkwQThDRkI2RUQ3OTExRkE2RUM2Rjg1NjAxNkQxNUYwMAotOjEwNzUxMDAwM0REQ0Y4RDM3QjEwNkU2NzFFRTc3OUE0MkIxQUFGOEY4MgotOjEwNzUyMDAwQkI1QUZFRTJCMzc1M0MxRkZDRjkzQTFEOTUyRkQ0OTk2NgotOjEwNzUzMDAwOTgxOThFQjhBRjJFOUVFQUJGQUYzMzUzQzlFNjczRkFERgotOjEwNzU0MDAwNTJGMkE2QUUzNDVGRUVBNTMwQ0E1QkI2NkVEMDUxMUVDNQotOjEwNzU1MDAwN0RBRUQ2RjY1NTFFQzA2QkVDMERDRUE2OERGMkI5QzYyQgotOjEwNzU2MDAwQzJGODZDNTdGMjBDODQ4Mzc1RTNGMjJFMzQ2MTRGRTU1OAotOjEwNzU3MDAwNzFGRkVBRUQ5RTBENDk2NDg3QUYzRUY1NEMwNTNDQ0ZBNwotOjEwNzU4MDAwQ0MyRkY5MEVDN0VCNzY1RUE0NzhDMUUxRjY4N0NBMTA1RQotOjEwNzU5MDAwREVFNTRENUE3RTNFRjlEQzY3MUU0RjhGN0IxMkUzQkM2MQotOjEwNzVBMDAwNkZBOUM5N0ZBRkQ5NzlFQTk5OEQ1MERFQkI3OUI5MjYyOQotOjEwNzVCMDAwOTBERTdGRTg3OUJGOTVGNzczMkRCRUJBMTIxQ0ZFNzU3OQotOjEwNzVDMDAwQkU3QTM4ODlGOEE3MDlGODJBRjNERkU3QUI5QUQ1NkJCQQotOjEwNzVEMDAwMDg3RTczRjM0QkM2RTZDM0ZFQ0ZBODVENDlDODRGNjc2QwotOjEwNzVFMDAwQzZERDRDNzRFRUVBMTQwOEZFOEExQzU3QzZBN0U2RjMwMwotOjEwNzVGMDAwRkJFODJBRDFCMzk5RUM0ODU5OEU3RjA1OUUyM0MyRjc0OAotOjEwNzYwMDAwOERGNkNGRDJEMThFRkVBQTZEQzE1NUNGN0RCMDBFM0Q4NQotOjEwNzYxMDAwMjI4QzlCRTlBODBDN0Q5RUFGQjFBNzYyNUU3MUJFQzhBQgotOjEwNzYyMDAwRURFN0QwRTdCN0U3MkI3MTc4MUVCN0M1OUYxMDkwQTc5RAotOjEwNzYzMDAwRTI4NDhENDU0NkEzRkUxM0JDNjEyMDk3OUQ2REI3OUVFNQotOjEwNzY0MDAwNTVBMUZGMDY3RUUxQzdDMTc2MjhGQjM4NDBBRjVGNjlEMAotOjEwNzY1MDAwQkZENzJBQUI3MTFFOTU1RkVFNEVGODUwNjRERTAwM0QzOQotOjEwNzY2MDAwM0VDOTE3QzZCQzAxRUIwRUY5MkJEMEE2QTFGQjlFMDRBOAotOjEwNzY3MDAwOTIwQjg4MzdDQzg3RUE2QjFGRDc4NEY1QjMxQThFQzc3NQotOjEwNzY4MDAwQkU4M0UwOTdGMUI4MEM5M0YyRkRFNzNDREI3RTNFMEI0NgotOjEwNzY5MDAwRTU2Q0U4NzlBQjVGMzk0RkY0RTE2ODdCRThBMjQwRTczRAotOjEwNzZBMDAwOUY3OTU2OTU3NUVERjNCRkIxRjc3QzE2RTJFRkFDREEzMgotOjEwNzZCMDAwOTc4RkZFNTc5RkM2OTc4NTc4QTg3RTk1Q0JGMzdGMTU0OQotOjEwNzZDMDAwMEU0QTdCQzUwNjBEOEYxMzBBMjZGMjIzMEJBNTBCMTQ1OQotOjEwNzZEMDAwMDdFODNCQzZFMzAwRDVFREJCNDg5RTBFNzZGMDc4NEMzQwotOjEwNzZFMDAwOEREODVEMTQ4N0YxOEJEQTUzNUQyOENGMDZFM0I5NUYzRgotOjEwNzZGMDAwMDZGM0RCMjhDRjIxNTVENjgzQUE4MUE0MzkyMEQ3MUVEMwotOjEwNzcwMDAwMTlBMjA3RUUwRjlFNDFGRUQ1RTAzQzFFMDdFNTYxNjUxQwotOjEwNzcxMDAwODUzM0I0MkJDRTIxM0Y0MzdCRDlBQUU0RjU0OEU3NjdGNAotOjEwNzcyMDAwREMyMzczNTAzRUJFOURGNThGNkE4QURGQkQxRTZFOTJDQwotOjEwNzczMDAwQzg4RTk1MzBDNzc4MDg0RTQzRTc3MDRCM0NEMTg3MjlGNwotOjEwNzc0MDAwNzY3MTM4QjMwNUY0QUJEMTk4RUYyNEJGRkEzOEJGOUZGOAotOjEwNzc1MDAwQUJCOTgxRjMxMzdCODVGMzkzNzNFRDFCOUFGODgwRjkzMgotOjEwNzc2MDAwN0UyNUYzOTM2MjRGQ0U3QUZEMUZDNDk3MEZFN0RBOUUxMgotOjEwNzc3MDAwNDBCRTBDNDc1OTg4RjNDNTQ3NTIxRUI1RjIxRTg3NzJBQQotOjEwNzc4MDAwMUY2OUU4OTBGREY4NjI4OTlFRDdCNDQ5MENFRkU1NTg2RgotOjEwNzc5MDAwQkM5MUYyMEE4QUQ5MTZDQUI3OUNDNTNDNTM3OTVFOEY1MAotOjEwNzdBMDAwRUZEMTI5RjA3Q0Y2RUI1MjJFRTZBMTgxM0Q0REY3REJCRgotOjEwNzdCMDAwNDU2MUY2MzRDQ0QzRUExNTA1MTlBRTFFRUI5QzAwN0Q2RAotOjEwNzdDMDAwRjY3RTNFRjc1N0E3NEEwMkU5QjE4MTg0NzBCMjUzNjY0QwotOjEwNzdEMDAwQ0U3Nzk2RTI3RTk1N0U1QTkxRUIzMzk4ODdFQzJDRTYzNQotOjEwNzdFMDAwMUVDOEMyN0I1NUU2MURDOEMyRkI1NkE1REZCQ0Q3QzM2OQotOjEwNzdGMDAwNkI0OTJGMzI4Rjc1NUVDMDNBQTdGMzc5QkNGMzBCQkM4RgotOjEwNzgwMDAwMUYwNzc5NTIyM0RGQzMxNjRBREY2RTQzN0Y2QjQ1Mjc3QwotOjEwNzgxMDAwQkY3RkVDMTU5MzNGQzAzQzMzMTdDMDE5RjE3QTFFRjBCRgotOjEwNzgyMDAwNkE0M0ZENjM2NzM2MUJGMkNGRjg5MTZFRTQ5RjlBN0Q0MQotOjEwNzgzMDAwMDJDMzdDQkRFQTc2NkQxM0M2ODVBQUQ1QkU1OEE0RTdGRgotOjEwNzg0MDAwOEQ2REVGNkI5MDlFNkJGMDVFNzYzQzhFNjc3MkJDREM0QwotOjEwNzg1MDAwNDQ3OUJGMzUyNkM2RUZGNURBQUVGRjAwRTM3NkNFNjM5NgotOjEwNzg2MDAwNUM4QjNBNTVFRjUxM0MwMEU1MzZBRTU3RDVEQTQyRkUxNwotOjEwNzg3MDAwQkY4Mzc5QzlGRjc3MzQwN0QzQ0Q2MDNDOEZFNzg3RjJBOAotOjEwNzg4MDAwQzlFOTdDNzMxMDdGQ0NEQ0NFRjk2MzFFRTY3MzFCNjhGQwotOjEwNzg5MDAwMzhDNTVGNjdDNkM3OTE1REUyMUZDN0YxNjA5M0NFQUY4MQotOjEwNzhBMDAwNDMzQkE2M0Y0NUEwN0NGQ0ZFMzBENzVBQjQ4RjVDRTkzMQotOjEwNzhCMDAwRENBRUU5N0ZFRDA1MkJCREY3QTM3MzVCN0Y4Q0Y5M0M1NAotOjEwNzhDMDAwQjJERDNCNzNDMzU2OTUxNEIwOUY5OTFEM0NERUQ4MUZBMwotOjEwNzhEMDAwQzZDQTBGMTJERUVERDcyMTNFN0NCOTI1NjdGMjMxQkU1NAotOjEwNzhFMDAwQTMxOTc4NzcwQUM2ODM0NDFFMUYwRDNEODc1RDhFNkJGMgotOjEwNzhGMDAwMUM2N0ZDRkQyODY1REZCMzEzMTNCOTNDNjM2RUEyQTNCQwotOjEwNzkwMDAwMkUzOUJGNUJDOUQ3NTFDNkRGMzI0MTUwRUVEMUI4OUY4NwotOjEwNzkxMDAwMjQ1OEFFRkE1RTFBREVENzYwOUUyQkRFRDc2MEY5M0JBNAotOjEwNzkyMDAwMzkxRjE2RUY2QkIwRkVBMjlDMEY4QkY3MzVEODhFRjc4MAotOjEwNzkzMDAwMzU1ODZGOTVGMzYxRjFCRTA2RUI3ODVGODNFNTJCNzJFNgotOjEwNzk0MDAwM0VFQzcxREMyQUU1RjE2RDdDMEFFOUEyMEI3OTZEOTRCRAotOjEwNzk1MDAwQkZERTFCMUQ1MjFGMTVEQ0JGMzc1QTA4QUU4RjEyQThBMQotOjEwNzk2MDAwQkY2OUMyQzZBNzMwRkY3ODkzOTIyRkM1Q0M0NkI0QzM3NwotOjEwNzk3MDAwMkFDMkY5RkIxQUE5MDY3QkVDMDRGNEYzOEI3N0VENDVEOAotOjEwNzk4MDAwN0YxRUY4OUJERTlGMkI4ODVFNTA0QUVGOTdDNDY4MTlENAotOjEwNzk5MDAwQ0FBM0RCMjdEODQ3NEY4MEYxQzc4RUNENDhEQjRBNzI5OAotOjEwNzlBMDAwNTI0RkY3RUNCRDNGQkIzMTkyRTI3QTZGNDk0QzgyMjVEMgotOjEwNzlCMDAwQTc2NUU0QUVCNTQyN0Q5QTQxMjBGQTg1Rjk2RTJBNTE1OQotOjEwNzlDMDAwRkM0Qzk4Njc0NkM3NjJBQjhBQ0IwNzEzREFDQjg1OTIyQgotOjEwNzlEMDAwNjMwOUFFQjMyMjQxOUY4QjcyRjg4OEQ1OUU4MUZCNTExQgotOjEwNzlFMDAwRTA1RDM0NkE1OTFBREE0NTVENkFGMzA3MTg5Rjc1QkQ4MAotOjEwNzlGMDAwQTM2NkU4NTcyOTcxM0NBNURGOTNENjY5RjlCOEJGOTkwQQotOjEwN0EwMDAwMTlBOTZCNzM3MDdFNjAzNjk0NzczNjBENkJDNkZERDlGRAotOjEwN0ExMDAwQzQ3MEExOUVFNDk3NTk4NUYyMjA3RjAyQTc5QkU5NjY3NgotOjEwN0EyMDAwNkUxRjdCMzU2NjU1MzRGQUY1NjFEMzYyRjA1RUI3NEI1NQotOjEwN0EzMDAwQzZGMzMxMTlDRkM3NjUzQ0UzM0Q1NzgxOEFERjczNjFENwotOjEwN0E0MDAwODlGNzVDNTg4NkU2QTMyRENGMkZCMTREMjA3ODBGMjRGRgotOjEwN0E1MDAwMDVFNkIzQ0Q5MkRGOTcwMDBBQTFGN0Q0OUM3MjFDRjMyMAotOjEwN0E2MDAwNEI1OUVFMzRFNjk1RENDQUM3Nzk2ODlFMkEzOThFNzc4MQotOjEwN0E3MDAwNUUxRDdDNkZBODhDRjM4RjY3NTRDRUJEODlDQjZCMTZDRgotOjEwN0E4MDAwQTlFMTc5QkZENzMxMTdFNjE1Q0Y3RDM5ODFFMjUwN0Q2NQotOjEwN0E5MDAwNkVEMUE1MDZCQ0NGMDU1RTQ3NzlDNjVFRTZGRTJFOEI4RAotOjEwN0FBMDAwRTc3QzMzNzc3RjFDRjVBQjk3RTNBOUNFRThFRTc0N0NENwotOjEwN0FCMDAwQUZBMzRGRTYyRkE1N0VGMDNCOUU5N0U0Q0M4MUJBODEyMQotOjEwN0FDMDAwREUyM0ExRjMzOUU3NzZBNzQ3NDFCRDRGRDA4QjQ4NUY0RQotOjEwN0FEMDAwQ0UyNkZFQkM0N0U2M0Y2NzhBM0M5RjdDMUVBNkYzMjQ2OQotOjEwN0FFMDAwMjEzRUZBM0I1RjRFQzJGNzEwMzcxOUJDNEJCOUZDRjc4OQotOjEwN0FGMDAwQTY5M0RDNjZERTc0Q0M2RjNBMkY3ODRFNjJCRUYxQUQ5MQotOjEwN0IwMDAwNkQyOUE1OTg2RjdGNUVFRDc5MDZFQkIzREJEMjc4NURDQQotOjEwN0IxMDAwNjgzOTY5MEE3QzNFRDI5Mzg0RjlDOEI3QjZBNTk2NjJFMwotOjEwN0IyMDAwM0VGMkY5OTEyRENGNDQ1OTAyRUFFQTk3NEVFMjczQ0QyNQotOjEwN0IzMDAwODM2OUE1OTg5RjNDNUJFQjNFNTY4Nzc0RjM3QjRFNUY1MQotOjEwN0I0MDAwRkE3RDA3NEUyMzdDQUFEQUI5RkQzRTdEREY4MTBCMkYzQgotOjEwN0I1MDAwQTE3RTNFNjBBNEJDODI3NTEzOTIwOURGRjVFRENGNkU2NQotOjEwN0I2MDAwNDY3QUVCNkI1MTEzM0Y2QzZBN0VGRjk5REY1MDNGMkRENQotOjEwN0I3MDAwODU1OTY2NkIzRDU2MENDOTk0QjQxREJBMUJGNzM1M0I0RAotOjEwN0I4MDAwRENGMzI1RDYxNzRGQkM4OUY2MzE3QjA0RTdFQkE1MTM1MAotOjEwN0I5MDAwNzM0QTkxNEZGQjBFRUNGQjA1RUFCM0Q5OTE2MEQ4RTIzMgotOjEwN0JBMDAwN0U1RUQwMTM3RTJBRjc4RjJCQzBCODQwOUZCMUJCMENFRQotOjEwN0JCMDAwRTdBRkZFOUQ5NkU3MUZFQzhGOUI4RTcxODJGRjlDQzAwNgotOjEwN0JDMDAwRjMzMTJBNkVEODkyODRGQTU2N0NFNUY5QkRCRkMxRjgyQwotOjEwN0JEMDAwRTZFRkY0NzRERjUzMTNDREVEQkQ0QUE5MzE3RjM5RTFFRgotOjEwN0JFMDAwNkZENzVFQ0M1QkU5N0I1RTRGRjdBRjE1MTg5M0IzRTJCRQotOjEwN0JGMDAwN0JBQzYzMjkzRUZGRUEzRkZGNUU4Njc4Mjg5NDc2RUVGMQotOjEwN0MwMDAwQzVGNjJGNzdFQjQ1ODQ0MzhGQzYxNjc5MzNGMjYxOEYyMwotOjEwN0MxMDAwOUFGQ0NFMEFCOTVFRDEzQjgyRUYyN0RDNTc0NEY4OEI0MQotOjEwN0MyMDAwRDk5Mjg0RkFCNjcyQzRBRkVFQzA3RENGOTZCNjNDODNDQgotOjEwN0MzMDAwN0UwRjdCNTY0Qjc3MEU2NzlGMDdCOEMxQjhCMzdCRDRENgotOjEwN0M0MDAwOTg0OTAzRkIzMEFBOTA1RUNFMEI1QkNBOUVDNEY5RjczRAotOjEwN0M1MDAwRjA3RUU3RjU1QjA4OUVBRTNERDczMzVDMEZGQTMxRDQ3QQotOjEwN0M2MDAwQzdFNzg1QUQ0MUVENjdGNzNDOUI4NTdFRTlCOURGQ0Q4MAotOjEwN0M3MDAwMjZGRjU0QTE3Mzg1NUYyQTc3NkI4M0Y0MjI0OTgyNThDQgotOjEwN0M4MDAwOEM1QkNBM0Y5MzhCMTkwMkUyNTlFNzBFRUVFODdCOTJCOAotOjEwN0M5MDAwRjlDNzlGNkI1NjdCMzUwMEEzMEEyRDVCOEJGOUNEMEE4NAotOjEwN0NBMDAwM0Y1NDI2REU1QThDRTdBQjE0MUJEM0QxN0VBOUM4RjUwRQotOjEwN0NCMDAwOTUyMTVGOUNENTMzNUQzQ0Y0N0I1QkQ2NUI5NUFENkJDQQotOjEwN0NDMDAwRTZBMDFEN0NBNUZERkM0NTk2NDc1RkM5N0NGODU1OUI0OQotOjEwN0NEMDAwREUxRDc4REYxODVBRkVCNThFOTk0RkE4RkNGNTg1QjVFNAotOjEwN0NFMDAwNUFCMkU1OTVGOURFRDY3ODFDRThBRjU1NDc3M0Y5NzFCRAotOjEwN0NGMDAwMTJGQTM3ODMxQ0ZCOTNBQ0VGMTZBRDBBRUVGRkVFMDRDRAotOjEwN0QwMDAwOUU0RjU5QURGMUE1QTNGRTUzRTY3RjdCODI4OURCODdBOQotOjEwN0QxMDAwMkE1RjNBQ0FBQkQwNzFCMzI1NTlERUJDMjA5MEJDQTkwQQotOjEwN0QyMDAwNkMxNTRFRDFGQjI0MDhEMjU4M0YzQzJCNzUyRTM3RTZGQwotOjEwN0QzMDAwMTMwRDg3ODdGODdDMTkwRjEyRTZGMTcwQkVBQTZDRDY3NgotOjEwN0Q0MDAwREJGNDMwNEY1NTk4MkYwMkVEMjU4N0QxMTc4MTc2NTBGRgotOjEwN0Q1MDAwREYyQjEyNkI5MkQxMTdBM0NDOUZFMjVGNEY4OTUzNTY1MgotOjEwN0Q2MDAwNzhENDM2RkQ3MEVCQzE3MUQwNEY1RTg2N0YwMzI4NTYwNAotOjEwN0Q3MDAwNEZFNDdDNTNERTE2NEVFQjMxOTMyRjFGRTlCNjdDNjc0MAotOjEwN0Q4MDAwRjAzODNDQTcyOTgwMUZGQkRBNzZDNTA2RkFFQjBDRjcyMgotOjEwN0Q5MDAwNERGNzUxQTc4ODZGRkFGRkY5MzFCRDA3NUUyOUIyQjVEQgotOjEwN0RBMDAwNzg0Rjc5NEVFMEVGODM0MDlEREUwNzM5MjdERjc3NTYyNQotOjEwN0RCMDAwN0U2RDA4NDNGQTM5Rjc5NTgzRjhCODRGRjA5MTlDN0JCNAotOjEwN0RDMDAwQjFDRDQ2NzJBQzRGRUQyMzM5Qjc2QjYyMTFBRjQ3RjlCNQotOjEwN0REMDAwQ0E1MDZFQkQzOEYxQTcyNDNGRkExMjdDNjVGODlFRDJENgotOjEwN0RFMDAwNjZBNThFMkZDQzgxMUREMEQxQjY5MEU0Qzk2Qzg5RTdGMQotOjEwN0RGMDAwNTFCMDVENkExMzhGMTM3MTc4MkY5M0UxQzREODg2REU3QQotOjEwN0UwMDAwM0FGMjQzRDQ2NkI0OTczQTI3MkFGNzQyMUFGRkY5MjU4MwotOjEwN0UxMDAwM0YzRkY1MzFGM0JFNTZFNENGNzIwM0M1N0RDMEJFNkE2NQotOjEwN0UyMDAwN0UwOUVEQzAwNUIxMTY4Q0E3ODdDMjREQjk1RjhDODk1QwotOjEwN0UzMDAwRkU2NjI5RTJFOTFEQTM3REVDQzQzQ0JDQ0ZGNDkxOUYxMgotOjEwN0U0MDAwMDFENDRFRjY3Q0Y1NkI1QUYyMzdGQkQ1MDM3QjUxN0U5RAotOjEwN0U1MDAwQjk4REY2NzExMzAxOUUwRTRERjc3QTU0NzExN0Q0QkU4OQotOjEwN0U2MDAwMkUzNEVENjcyMUJEOTExQ0UxRjRENjk3Qjk4QkJGMDc4NQotOjEwN0U3MDAwMjJERjRGNEU5MkYxMDBGQThDMzUyMjdEMDgxQ0NGODcwRAotOjEwN0U4MDAwREJGNjlGNDA3OUQzRDc5RDRBNzIzQTk0OUZDRUI2M0Q5OAotOjEwN0U5MDAwMTY4MTcyRTM0M0QwRUZBRTgwNzhDMDg3OEI5RkE1N0NCQwotOjEwN0VBMDAwODBGOTk4MDcwMkU1M0Q2QjgzQ0YzN0Y4RUQ4RkM5MkYzNgotOjEwN0VCMDAwNjQ5QjAzREE5MTFFMUI4MkVCQTE3MDQxQkFGNDA2RjFCOAotOjEwN0VDMDAwODE4QkY2N0QzRkYyMUJDMEE3NkE3QTc3MzVDMjYxQTgyNQotOjEwN0VEMDAwM0UxN0VBNTI0MEZENTA0ODNEQTQzRjJCRTFGNkMzRkQ1QQotOjEwN0VFMDAwMTMxOENERUIxOEVERUQyNTNGN0UxRkNGRUZBRDA3QkQ4RAotOjEwN0VGMDAwNDZGNTAzRTE3NDNGMkRFRTAzQkQxNUMzRjUxNkVBOEI3RAotOjEwN0YwMDAwQUE4ODZFOEE1RkY1MUREMEQyQkRDQTgzRUQ5RjI1RTE5OAotOjEwN0YxMDAwRjk4MTFFMjk0RTUzRDVGRTcyMkNGQUY3RUIyNjk4Njk4QgotOjEwN0YyMDAwN0VEMDhGQjE5NDE3NzNBMDNEMTZGRDExQTVERDIxN0E4NwotOjEwN0YzMDAwRDJFNUY3MENCMjUwN0UyOEVENEVDOTlCNEU3OUU1NDI1MgotOjEwN0Y0MDAwNzcxNjNFNUYyN0NCMTk4NzA4NzUwOUVCOENDRUUxMTBCOQotOjEwN0Y1MDAwMzhERkIzNzY4OUU0N0MyOERFNTZDOUY0MEFGMjIxOEIzNwotOjEwN0Y2MDAwRjIzOTVFRTFGMTAzNDUxRTU0Qzg3MkU1MTBCNjY3NzIzRQotOjEwN0Y3MDAwRkUzNzI5Rjc1Mjc4Q0Y4NDdDM0Y4QzlDRjg1QTgxMjNCNgotOjEwN0Y4MDAwQUJBNUY4Q0VGRDEzQ0RCQzJFOEZBNzc5NzlGQzg5RTc4MAotOjEwN0Y5MDAwRURCRDdBM0UyQjI1MTNDNzk5OTVGNzQ1RkRGMjI4RDVGRgotOjEwN0ZBMDAwMkY1RjUwMEVDNDkzMUM3ODUwMUQwQkU3QUE3QzQ2QjA3RgotOjEwN0ZCMDAwRDRDMzkwOEFEMjM1NDVEMDlEMkQ1MzJEMkZBMkI4MUEwNwotOjEwN0ZDMDAwRTZFNzFBMkVERjU3MjgxRDQ1NEVFNEY4QUQxNEI5MUYxOQotOjEwN0ZEMDAwNUVCOTU3QTBGQkE1NzM2QTdFNkYwN0YyODZERTBGNTg2NQotOjEwN0ZFMDAwNTZCMEE2MDhGOUVGQkUxOEE3MjZEMDVGQkVENkZDNEI0OAotOjEwN0ZGMDAwMUI4MkVCQ0I2QUQ3MTRDNTBEQzNFNzk1QUJCNjc2OEQ2NAotOjEwODAwMDAwNjQ5N0NGNTc2MTZGMkM4QTM1NUZERUFFRUNGQjlDNUVDOAotOjEwODAxMDAwRDlFNzc0RjVDODQwNzhDQzVGNTMzNDEyQ0E2NUJBN0Y4QgotOjEwODAyMDAwMTcxRUZDRENFN0RBQjU1RUNBNTcyRDVENDNGN0M0QjcwRgotOjEwODAzMDAwNUNBQTBEOEFCMzVFNkJCRTBBRTZBNjdCOTAyQkVEM0Y3MQotOjEwODA0MDAwQjQ3NDA4REU1RThDMkIzMUUwQUYzREM0NjdDMDM3MDFFRAotOjEwODA1MDAwRUJDNUNCRjQzQTE0OUYyODVGM0MwNkZENTM2NjVGM0NBQQotOjEwODA2MDAwMjYzMDNFMTE1QUUyOUIzMzIyRTU4QUI4QTgwNDNFMkMwMgotOjEwODA3MDAwQjMwQzAzMEZBNUZGRDE4OTNDQ0UxQTNGOTFEM0YxQThEMQotOjEwODA4MDAwRDk1NTNCNUU2MjE0RDdFOTQxRjk3QkE1Rjc0Q0ZFMjIzNgotOjEwODA5MDAwRUZFRjA3QkY2NzMyMjM5Q0Y3RUJENDlCMzBGRUQzREZCMwotOjEwODBBMDAwRjkwREM1ODdGQkQ3MTlFNkYzN0IwNzAzNEI4MEU3NUQyNgotOjEwODBCMDAwRjFFMzlCMDJFM0MwQUIyNjcxM0IyNERDQ0FFRDlEOUE0MQotOjEwODBDMDAwMENGNUQ1RTM0Qjk5QzZBMUY4MTJEOTFCOTlFMTc0REZFMQotOjEwODBEMDAwRDJEN0Y2MDVFOUI3RkU4RTNDMTNERThCRjQ3NUJCMERFNwotOjEwODBFMDAwQzg2RjM1RkZGQzdGQjFBODg3RkIzQTNFQTVCQ0I0QkU4NAotOjEwODBGMDAwNkYzRkEzN0NCNThENzJERUUwQTEzNjM5REZBQkRCNkM2MAotOjEwODEwMDAwQzRGNkZFRTJCRjE3NjFCRjRENzJFOThGMkZGMEY4OThGOQotOjEwODExMDAwNTIyQUYxODMwMEZGRjkzQkQ0NTM3QjRDMUIxRkM1NTRGQgotOjEwODEyMDAwOTlDQUIwMkQyNEJGQzA3RjhFNDZCREUxOEYyQjk4RTM0NgotOjEwODEzMDAwODY4QkMzMDRDNjE1RDI1NDNDQUU4MDI1QzYxNUQyRDI1OAotOjEwODE0MDAwNzg1QzAxRUIxODU3QzAxMkUzMEFEODhFNzEwNUFDNjM1NgotOjEwODE1MDAwNUMwMUVCMTg1N0MwM0FDNjE1QjBDNEI4MDJCNjdGMjkwNwotOjEwODE2MDAwQkZFN0QxMEY4MjhCQzczRDBEMjRGNzU3NjI3RTMzQzAyNgotOjEwODE3MDAwNkY2NTI3QkZCRjVBQjk0N0EyN0I2MTdDQ0YwM0Y1REY4QwotOjEwODE4MDAwNjU3OTNCQUQ3MkRFOEU2NzJCREQwN0Q2MUM5MDJDODg5RgotOjEwODE5MDAwMjI3QzFGQzQ5NThFRjkzQjAzNDczMTFFNTREMzIyNThDRAotOjEwODFBMDAwRDY5OEIxN0QzRUVENjM2MzQ3REUwN0E1RDhCRTQ3NkQyNwotOjEwODFCMDAwMTFDRDQ0NEYxQzlGOEQ4MjVCOEY3Q0Q1QjE4N0UyNTdEOAotOjEwODFDMDAwMDU3MTlEOTRFRjVGRDMyQzMwOENCQkNFRDM3MjNGRDkxOQotOjEwODFEMDAwMjk0MTZCMEVEREFCOTIxREVERDQ3NjkzRkY1MkY1OUNEOQotOjEwODFFMDAwNjAwRTdDRUZCQjY2RTI0NTkyMTNDQTdERjU1MkZFODhCNQotOjEwODFGMDAwMzkzRDdBRjM5MjIwM0Q2QkUzNzk1N0Y4MjdFQ0M3Mjk5NAotOjEwODIwMDAwRTc3NzkzMUQxMjYwMTcyREM1N0I2QzZDOTdCRUE1RjdBMQotOjEwODIxMDAwNEQ5Q0UwRTA4RTEwQUU5RDc3NTVEOUQxQjIxRUYzQjVERQotOjEwODIyMDAwN0U2OEZFNTVFMTI0RjlERTNBOUJCRjQ3NTJGQ0Y4OTI4NgotOjEwODIzMDAwN0QwNzYwQkRDMTJENUFCMjUzNkU5RjYwQkY2RDUyMUU0NwotOjEwODI0MDAwRTYxOUQ4MjhFRTcyQjQ1MzRGN0VENjI3NUJBRjBGOEE1QgotOjEwODI1MDAwQkIxNDRBRDc1MURDNjM4NTVBMjBGRDdEQzQ2QTlGM0IxRAotOjEwODI2MDAwMDlFODcyNDZGMUJEMTQ2Rjk5MTE2RjI0M0U1NkU4RjA4QgotOjEwODI3MDAwNDk2QkM5NEY3MERFMTVFM0Y5Nzc5ODBBQjVFQ0U3MzQxRQotOjEwODI4MDAwOUY5Q0NGQTVFMEE5QjA1RTcwRTNGNzJDMTYzMzBCQkQyMQotOjEwODI5MDAwM0ZCMDA4QzA4NzcxNTFFNUZCMUY4QjE4Q0ZBRjUwRTg4NgotOjEwODJBMDAwNkFDNTU2ODFFODhBQkVCQzEwRjBCRDg0NDVGODNEMTAxMQotOjEwODJCMDAwRDA3RkY3NkFCOUZEOUIyOEYyN0JGMkM0NEQzQzhGRTI3OAotOjEwODJDMDAwM0U2NkE3RkM5MTY1NDg3RDEyRTlEN0Q3N0NEMDZFMEYzQQotOjEwODJEMDAwQkYyRTg5REJGN0U2Mzg5QzdGRjE3MTM1RTUwNzE3QzZCRAotOjEwODJFMDAwREQ5RTZFMjczRDVGNDBGOTEzODJGNzZFRTlGQjFCQUYwMQotOjEwODJGMDAwMjYzRjgzRjMyNzhFQUFCOURDMDE3ODkyOUZENTg1RjRCNwotOjEwODMwMDAwNEFGMTFFM0I5NUM3RUJDQUE5OUMyMkJGMUYxNkZBNUUxNQotOjEwODMxMDAwNDM3RkU3Q0IyRDM4QkVCMEM2NjA0MUY4NUZGMTNEQzA2QQotOjEwODMyMDAwQjBBQkJGRkZFNjk0RjNFQjEyQzU5RTVDMzNDMkUzNkJDOAotOjEwODMzMDAwODMwNUUxNTExOEQ3NDlFRjg5QTVDQUYzM0Y5QzVCQjI4OQotOjEwODM0MDAwMDlGMTY5OEI2MDJFNUMxRkVGNjlCNjAwN0M4QkYwNDBGMQotOjEwODM1MDAwMDJDNkQxM0QzNjdDQ0Y2NkEwNTMzMDUxM0VGNTY1NzJFMgotOjEwODM2MDAwNzRFQjNBQ0M1M0E5NDkxMzRDMThBRjJEMEFEQjUyMThDMQotOjEwODM3MDAwMEJGMzE3QTUyNEQzNzc3NjZBREE3ODFDQjYwRjRBNEUyQQotOjEwODM4MDAwMDc1M0RDOTJDMEM3QUE2MjMxN0VDRkYxRThDQkI1M0Y3QwotOjEwODM5MDAwM0QyOUNGREYzRTVCRTZCM0ZFOEUyRjc4MUVGMUI1RTNCRAotOjEwODNBMDAwQjRCQkU5RkIxQzRDNEZFRkFGRDMwRkY2MzVGQkM2RDE4NgotOjEwODNCMDAwMTRBRjU1RTg2OEIwMzlBRTA5RTlBODQ1RDYxM0E1QTVBQwotOjEwODNDMDAwRUZBOUQxOEU2OENDQjMzNzIzMUNDQTk2NUM1QzE3NEJERgotOjEwODNEMDAwRTcxQzNFNEVBNkU0REY4N0M2QzkwMkU1RURGRjQ2REU5OAotOjEwODNFMDAwRkQ4OUJBNUEyQURGQUQ1QjQ1NjU3NzlEOEI5RTA3RTgwQwotOjEwODNGMDAwOEIyMzA4QkYxRjEwNkY3RDdCRDIzMEYxNTZBNjMzNDcwOQotOjEwODQwMDAwOTJCRTA1QkVFN0YxRUQ5MEY4MkFGMEJCMThDMEVGMzMzRAotOjEwODQxMDAwM0FBMkVFRDk4MEY2NDg4M0M2ODJGN0NEOThGRkJDRDI0NwotOjEwODQyMDAwNDBGMkUxRkQ0OUMzQzY1OTE1RjgxOTI4MkUzQkM4RjQ5RQotOjEwODQzMDAwMzk4ODg3RTkxOUE5MkExMTlFRkY2RDkyMTAxNEU3NDQyMwotOjEwODQ0MDAwQkVDMTczMjJERjYwODk3Q0EzNTJGOUY5RTY2OTBEQTNFRQotOjEwODQ1MDAwRUY5NEExN0RFMDIyRkI0MDRGRjg1REJGMDZFNDBBRDQxMwotOjEwODQ2MDAwRUY2NUE2MjBCOTcyMjE0NEFFODAyM0YzMzM3QTVGQUM2NgotOjEwODQ3MDAwNDNDQjM2MDlGRUZDQ0ZFOTUwNUNDQTE5NDZDRTc4QjgyQQotOjEwODQ4MDAwOUMxOTFERTY3OTlFQkVCMzUwMUQ0NkY5QzVDMEVGNDQ0OAotOjEwODQ5MDAwNjc0NzM3RjJCQ0JEMjVBQzg0RDYxRDQ2REVEMDdCM0U5NwotOjEwODRBMDAwRjc4RTE4MzhGOTE0RjRCRkY3NjEwM0Q5MzlFQjEzOTYzNgotOjEwODRCMDAwRTZGRjc3RTRDRDlGMjc3MTc4M0M4MURGNzM1MDVERUQ1NwotOjEwODRDMDAwN0IwRTlCMDVCQzhGNURCMTkwNjUyM0JFOTVFRjM5QzREMwotOjEwODREMDAwQzExOEYyN0JGRkY1RUYzOThDOTgzQzEyQkZFN0UwMEEzOAotOjEwODRFMDAwRkE5RTQzREMxNUJFRTczMDZBQjI3MTYxRTBGNzFDNDZDNAotOjEwODRGMDAwNEQxRUIxMzBGODdCMEVDNjg1Rjg5REIyRkZDMUVGMzkzNQotOjEwODUwMDAwQTQ0RkNFQkJGQzdCMEUzNzRFMzZGRkEwRUYzOTgwM0QyQgotOjEwODUxMDAwOUI4OUUzNEZFNEQ4QzY2Mzk5Mjg5RjNCRjRGREU1RTNDQwotOjEwODUyMDAwRjIzRDY0OTc2ODJGQzVCMjI4QzJBNUEyNzZEMTZEQzU2OQotOjEwODUzMDAwRjI2REQxNzMzRkI2MDM1RjRDNDQ3ODE1M0Q5NjdEMDNEMQotOjEwODU0MDAwN0U5NzI1NTFFQkExQkNGMjI3QURCNjQ5MzhGRjZCQjkzOAotOjEwODU1MDAwQjZDOUY4M0MzNERFNUYyRjlGMEZGNjczMEJGNjBCQ0REOAotOjEwODU2MDAwMUY1M0U4RTJBRUM5NUMwRUNEOTNDQkE5RjVDM0JGQzdEQwotOjEwODU3MDAwM0Y2RjMyQkY0RkJFRDZCRTYxQkY3N0UwN0FDQUZFRDkyOQotOjEwODU4MDAwOTZDNTU2REMwRkVDRjc0RURDMjdFQ0I3MDQ0QjY2ODgzQgotOjEwODU5MDAwMEU3QTBGRjg3MjdBNzVDOUZCNjI3NDJFOTA4RkIzM0YxMgotOjEwODVBMDAwRTFGNjI4OTVFOTJBNzcxNERBMERBMzFFNzA0N0UxN0VEQgotOjEwODVCMDAwNDczNTBFRThGMTdEOTBERkJBMDZGNDY4M0ZGQzc2RjVBQQotOjEwODVDMDAwODAxRURCN0Y2QkUzRjlEQUExRjM2RjlGQ0NGRDkxRjRBMgotOjEwODVEMDAwQTkwMzM0N0UwQ0ZDREQ0REZFQzE0MDE0REE2REU5RTVFMwotOjEwODVFMDAwNDczNEFFMTQ3QTRGNkRGNjI3NDE3NjkzOTlGODdCOEMxOQotOjEwODVGMDAwREMzNkU2MDE5MTIxM0Q4Q0Q5QzE3ODFFNjM0MTBDRTkzRQotOjEwODYwMDAwQjk0QTFERUY1QUY5QzBGRDIyRDJEMTM4MzdFQzNCODA3MAotOjEwODYxMDAwRkVBRURGQUUxQTBDN0VBRkQ3NEJFM0FBRTQyNUMwNUVGOAotOjEwODYyMDAwMEI3QUVFNjQzQ0JGNzQ5NDJDOEZEMDVFQzRFRkQ5MzlDMgotOjEwODYzMDAwQ0I4RkQwNzdBNkMwOEUwQjk5OEZCRTc5MzA5NDRGNTlDRgotOjEwODY0MDAwQURCM0JGRTYzMzUzQkU2MjUwQkZBNTc3RkY2NjNERkFCOAotOjEwODY1MDAwQjVFNUE1NUIzNUU0MTcyRjY5NTk4RkE1QzNGMTlFMjZCMwotOjEwODY2MDAwOEU5MTdEMTlENDFGRUNDQkEwRkE2NUZCMENEOTQ3RjU5MAotOjEwODY3MDAwRkQxN0Q3QzcwREIzMkVEMEMxNTZBNDEzODUwRThFQUFGMQotOjEwODY4MDAwM0RFM0QwNEYzREVBMENCM0YwRjcxRDNDRjQ1RDlBMjY3NAotOjEwODY5MDAwRjlCREY0NURGRjM5RERDQUYzNjUzOTVEQzBGODFEM0ZGMgotOjEwODZBMDAwOEM4RUVBQTlCRkYyMURBRjZCOTU4QTFDMUNGQUNFOEQ4OQotOjEwODZCMDAwODZCOTI4NUUzOUNCNDg3MkFFNDZGNkZGQUE5Nzk4QzhBRAotOjEwODZDMDAwMUU1MUY4QkE1QUU1MzlCNTFFRkJDNTE4NzlGRTlCOEFDQQotOjEwODZEMDAwRDFGN0FCN0FDNDUxOTRDRjREM0ZBQ0NGNEFBNUZCQUM5OAotOjEwODZFMDAwRDg3QThGMTdFNzFEQjg1REEwRUZCOTE1ODQ3M0I5NUExMgotOjEwODZGMDAwMjg5NjM4OUU4NUU3NDc0NEZFNUQ4MUE3NTE3RTQ4OThCRAotOjEwODcwMDAwNDdDMUJGMzczMDI1OTdCRjNGMTBDRkY4NzdEQjk4Q0FGNgotOjEwODcxMDAwMUNGMjlEMzYzOTFFN0FFREVGQjRGMUVGOTJDREU3RjdGQQotOjEwODcyMDAwNzIwRDUxMjVBNUNCRjFGOTgyMUJFOEY5QzFFRjUyMUY1QgotOjEwODczMDAwQjFFMkZFMkE5NEVGQjQ3MTdCQkY2MTRFMDYzRDdGNTVENgotOjEwODc0MDAwMzBBRjQxM0RFMTdBODA1REU5M0I2RDdBRTRGQjgwRUYzQgotOjEwODc1MDAwQjNCRDg3RjhCQUQ2RjdEOTk0RUYwRjFDNUQ3MEMzMjM2OQotOjEwODc2MDAwN0IzOTFDQkQ3OEVGNTUzM0NCMThFNEFGRkYxNzMxM0M5NAotOjEwODc3MDAwOUVEMkMwNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MwotOjA4ODc4MDAwMDQwODM1MDAwMDAwMDAwMEIwCi06MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54MngtZTEtNS4wLjIxLjAuZncuaWhleCBiL2Zpcm13YXJlL2JueDJ4LWUxLTUuMC4yMS4wLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxYWZkNAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDJ4LWUxLTUuMC4yMS4wLmZ3LmloZXgKQEAgLTAsMCArMSwxMDE4NCBAQAorOjEwMDAwMDAwMDAwMDI4QjAwMDAwMDA2MDAwMDAwNjg4MDAwMDI5MThFOQorOjEwMDAxMDAwMDAwMDE2MTQwMDAwMkZBODAwMDAwMDk4MDAwMDQ1QzA0MgorOjEwMDAyMDAwMDAwMDczODgwMDAwNDY2MDAwMDAwMENDMDAwMEI5RjBCQQorOjEwMDAzMDAwMDAwMDlBNEMwMDAwQkFDMDAwMDAwMDk0MDAwMTU1MTA2NgorOjEwMDA0MDAwMDAwMDU3QjgwMDAxNTVBODAwMDAwMEI4MDAwMUFENjhENQorOjEwMDA1MDAwMDAwMENFMUMwMDAxQUUyODAwMDAwMDA0MDAwMjdDNDgxNQorOjEwMDA2MDAwMDIwNDAwNDgwMDAwMDAwRjAyMDQwMDU0MDAwMDAwNDU5NAorOjEwMDA3MDAwMDIwNDAwNTgwMDAwMDA4NDAyMDQwMDVDMDAwMDAwMDYzNgorOjEwMDA4MDAwMDIwNDAwNzAwMDAwMDAwNDAyMDQwMDc4MDAwMDAwMDA3OAorOjEwMDA5MDAwMDIwNDAwN0MxMjE3MDAwMDAyMDQwMDgwMjIxNzAwMDBGNgorOjEwMDBBMDAwMDIwNDAwODQzMjE3MDAwMDA2MDQwMDg4MDAwMDAwMDVFNgorOjEwMDBCMDAwMDIwNDAwOUMxMjE1MDAwMDAyMDQwMEEwMjIxNTAwMDA5QQorOjEwMDBDMDAwMDIwNDAwQTQzMjE1MDAwMDA2MDQwMEE4MDAwMDAwMDQ4OQorOjEwMDBEMDAwMDIwNDAwQjgwMjEwMDAwMDAyMDQwMEJDMDAxMDAwMDA3RQorOjEwMDBFMDAwMDIwNDAwQzAxMDEwMDAwMDAyMDQwMEM0MjAxMDAwMDAzMAorOjEwMDBGMDAwMDIwNDAwQzgzMDEwMDAwMDA2MDQwMENDMDAwMDAwMDQxOAorOjEwMDEwMDAwMDIwNDAwREMwMDEwMDAwMDAyMDQwMEUwMTIxNDAwMDBGMQorOjEwMDExMDAwMDIwNDAwRTQyMjE0MDAwMDAyMDQwMEU4MzIxNDAwMDA4QgorOjEwMDEyMDAwMDYwNDAwRUMwMDAwMDAwNDAxMDQwMTI0MDAwMDAwMDBBQgorOjEwMDEzMDAwMDEwNDAxMjgwMDAwMDAwMDAxMDQwMTJDMDAwMDAwMDA1RgorOjEwMDE0MDAwMDEwNDAxMzAwMDAwMDAwMDAyMDQwMDA0MDAwMDAwRkY3MAorOjEwMDE1MDAwMDIwNDAwMDgwMDAwMDBGRjAyMDQwMDBDMDAwMDAwRkY4MQorOjEwMDE2MDAwMDIwNDAwMTAwMDAwMDBGRjAyMDQwMDE0MDAwMDAwRkY2MQorOjEwMDE3MDAwMDIwNDAwMTgwMDAwMDBGRjAyMDQwMDFDMDAwMDAwRkY0MQorOjEwMDE4MDAwMDIwNDAwMjAwMDAwMDBGRjAyMDQwMDI0MDAwMDAwM0VFMgorOjEwMDE5MDAwMDIwNDAwMjgwMDAwMDAwMDAyMDQwMDJDMDAwMDAwM0ZDMAorOjEwMDFBMDAwMDIwNDAwMzAwMDAwMDAzRjAyMDQwMDM0MDAwMDAwM0Y2MQorOjEwMDFCMDAwMDIwNDAwMzgwMDAwMDAwMDAyMDQwMDNDMDAwMDAwM0Y4MAorOjEwMDFDMDAwMDIwNDAwNDAwMDAwMDAzRjAyMDQwMDQ0MDAwMDAwM0YyMQorOjEwMDFEMDAwMDIwNDIwMDgwMDAwMDQxMTAyMDQyMDBDMDAwMDA0MDBBNgorOjEwMDFFMDAwMDIwNDIwMTAwMDAwMDQwNDAyMDQyMDE0MDAwMDA0MTk3QQorOjEwMDFGMDAwMDIwNDIwMUMwMDAwRkZGRjAyMDQyMDIwMDAwMEZGRkY3QgorOjEwMDIwMDAwMDIwNDIwMjQwMDAwRkZGRjAyMDQyMDI4MDAwMEZGRkY1QQorOjEwMDIxMDAwMDYwNDIwMzgwMDAwMDAwMjAyMDQyMDQwMDAwMDAwMzRFMAorOjEwMDIyMDAwMDIwNDIwNDQwMDAwMDAzNTA2MDQyMDQ4MDAwMDAwN0M0MQorOjEwMDIzMDAwMDIwNDIyMzgwN0ZGRkZGRjAyMDQyMjNDMDAwMDAwM0ZCNworOjEwMDI0MDAwMDIwNDIyNDAwN0ZGRkZGRjAyMDQyMjQ0MDAwMDAwMEZDNworOjEwMDI1MDAwMDEwNDIyNDgwMDAwMDAwMDAxMDQyMjRDMDAwMDAwMDBCQworOjEwMDI2MDAwMDEwNDIyNTAwMDAwMDAwMDAxMDQyMjU0MDAwMDAwMDA5QworOjEwMDI3MDAwMDEwNDIyNTgwMDAwMDAwMDAxMDQyMjVDMDAwMDAwMDA3QworOjEwMDI4MDAwMDEwNDIyNjAwMDAwMDAwMDAxMDQyMjY0MDAwMDAwMDA1QworOjEwMDI5MDAwMDEwNDIyNjgwMDAwMDAwMDAxMDQyMjZDMDAwMDAwMDAzQworOjEwMDJBMDAwMDEwNDIyNzAwMDAwMDAwMDAxMDQyMjc0MDAwMDAwMDAxQworOjEwMDJCMDAwMDEwNDIyNzgwMDAwMDAwMDAxMDQyMjdDMDAwMDAwMDBGQworOjEwMDJDMDAwMDIwNDI0QkMwMDAwMDAwMTBDMDQyMDAwMDAwMDAzRTgyQworOjEwMDJEMDAwMEEwNDIwMDAwMDAwMDAwMTBCMDQyMDAwMDAwMDAwMEFCNgorOjEwMDJFMDAwMDIwNTAwNDQwMDAwMDAyMDAyMDUwMDQ4MDAwMDAwMzIyMgorOjEwMDJGMDAwMDIwNTAwOTAwMjE1MDAyMDAyMDUwMDk0MDIxNTAwMjA1RQorOjEwMDMwMDAwMDIwNTAwOTgwMDAwMDAzMDAyMDUwMDlDMDgxMDAwMDA2MworOjEwMDMxMDAwMDIwNTAwQTAwMDAwMDAzMzAyMDUwMEE0MDAwMDAwMzAyOAorOjEwMDMyMDAwMDIwNTAwQTgwMDAwMDAzMTAyMDUwMEFDMDAwMDAwMDIzOAorOjEwMDMzMDAwMDIwNTAwQjAwMDAwMDAwNTAyMDUwMEI0MDAwMDAwMDY0MAorOjEwMDM0MDAwMDIwNTAwQjgwMDAwMDAwMjAyMDUwMEJDMDAwMDAwMDIyNworOjEwMDM1MDAwMDIwNTAwQzAwMDAwMDAwMDAyMDUwMEM0MDAwMDAwMDUwNgorOjEwMDM2MDAwMDIwNTAwQzgwMDAwMDAwMjAyMDUwMENDMDAwMDAwMDJFNworOjEwMDM3MDAwMDIwNTAwRDAwMDAwMDAwMjAyMDUwMEQ0MDAwMDAwMDFDOAorOjEwMDM4MDAwMDIwNTAxMTQwMDAwMDAwMTAyMDUwMTFDMDAwMDAwMDEyQgorOjEwMDM5MDAwMDIwNTAxMjAwMDAwMDAwMjAyMDUwMjA0MDAwMDAwMDEyNQorOjEwMDNBMDAwMDIwNTAyMEMwMDAwMDA0MDAyMDUwMjEwMDAwMDAwNDA5RgorOjEwMDNCMDAwMDIwNTAyMUMwMDAwMDAyMDAyMDUwMjIwMDAwMDAwMTNCQworOjEwMDNDMDAwMDIwNTAyMjQwMDAwMDAyMDA2MDUwMjQwMDAwMDAwMEE4OQorOjEwMDNEMDAwMDQwNTAyODAwMDIwMDAwMDAyMDUwMDUwMDAwMDAwMDcxNAorOjEwMDNFMDAwMDIwNTAwNTQwMDAwMDAwNzAyMDUwMDU4MDAwMDAwMDg0NAorOjEwMDNGMDAwMDIwNTAwNUMwMDAwMDAwODA2MDUwMDYwMDAwMDAwMDQyMworOjEwMDQwMDAwMDIwNTAwRDgwMDAwMDAwNjAyMDUwMEUwMDAwMDAwMEQxMworOjEwMDQxMDAwMDIwNTAwRTQwMDAwMDAyRDAyMDUwMEU4MDAwMDAwMDdDRQorOjEwMDQyMDAwMDIwNTAwRUMwMDAwMDAyNzAyMDUwMEYwMDAwMDAwMDdCNAorOjEwMDQzMDAwMDIwNTAwRjQwMDAwMDAyNzAyMDUwMEY4MDAwMDAwMDc5NAorOjEwMDQ0MDAwMDIwNTAwRkMwMDAwMDAyNzAyMDUwMDA0MDAwMDAwMDE3NgorOjEwMDQ1MDAwMDIwNTAwMDgwMDAwMDAwMTAyMDUwMDBDMDAwMDAwMDE3OAorOjEwMDQ2MDAwMDIwNTAwMTAwMDAwMDAwMTAyMDUwMDE0MDAwMDAwMDE1OAorOjEwMDQ3MDAwMDIwNTAwMTgwMDAwMDAwMTAyMDUwMDFDMDAwMDAwMDEzOAorOjEwMDQ4MDAwMDIwNTAwMjAwMDAwMDAwMTAyMDUwMDI0MDAwMDAwMDExOAorOjEwMDQ5MDAwMDIwNTAwMjgwMDAwMDAwMTAyMDUwMDJDMDAwMDAwMDFGOAorOjEwMDRBMDAwMDIwNTAwMzAwMDAwMDAwMTAyMDUwMDM0MDAwMDAwMDFEOAorOjEwMDRCMDAwMDIwNTAwMzgwMDAwMDAwMTAyMDUwMDNDMDAwMDAwMDFCOAorOjEwMDRDMDAwMDIwNTAwNDAwMDAwMDAwMTA0MDYxMDAwMDIwMDAwMjBBOAorOjEwMDREMDAwMDIwNjAwREMwMDAwMDAwMTAxMDYwMEQ4MDAwMDAwMDA1OAorOjEwMDRFMDAwMDQwNjAyMDAwMDAzMDIyMDAyMDYwMERDMDAwMDAwMDBGNworOjEwMDRGMDAwMDIwNjAwNjgwMDAwMDBCODAyMDYwMDc4MDAwMDAxMTQzRgorOjEwMDUwMDAwMDEwNjAwQjgwMDAwMDAwMDAxMDYwMEM4MDAwMDAwMDA1RAorOjEwMDUxMDAwMDIwNjAwNkMwMDAwMDBCODAyMDYwMDdDMDAwMDAxMTQxNgorOjEwMDUyMDAwMDEwNjAwQkMwMDAwMDAwMDAxMDYwMENDMDAwMDAwMDAzNQorOjEwMDUzMDAwMDcxODA0MDAwMDk2MDAwMDA4MTgwNzYwMDAxNDAyMjM0MgorOjEwMDU0MDAwMDcxQzAwMDAzNEI4MDAwMDA3MUM4MDAwMzRFOTBEMkZBMAorOjEwMDU1MDAwMDcxRDAwMDAwOUREMUE2QTA4MUQxNDAwNUQ4MDAyMjVEMAorOjEwMDU2MDAwMDExODAwMDAwMDAwMDAwMDAxMTgwMDA0MDAwMDAwMDA1NQorOjEwMDU3MDAwMDExODAwMDgwMDAwMDAwMDAxMTgwMDBDMDAwMDAwMDAzNQorOjEwMDU4MDAwMDExODAwMTAwMDAwMDAwMDAxMTgwMDE0MDAwMDAwMDAxNQorOjEwMDU5MDAwMDIxODAwMjAwMDAwMDAwMTAyMTgwMDI0MDAwMDAwMDJFMAorOjEwMDVBMDAwMDIxODAwMjgwMDAwMDAwMzAyMTgwMDJDMDAwMDAwMDBDMAorOjEwMDVCMDAwMDIxODAwMzAwMDAwMDAwNDAyMTgwMDM0MDAwMDAwMDE5RQorOjEwMDVDMDAwMDIxODAwMzgwMDAwMDAwMDAyMTgwMDNDMDAwMDAwMDE4MgorOjEwMDVEMDAwMDIxODAwNDAwMDAwMDAwNDAyMTgwMDQ0MDAwMDAwMDA1RgorOjEwMDVFMDAwMDIxODAwNDgwMDAwMDAwMTAyMTgwMDRDMDAwMDAwMDMzRgorOjEwMDVGMDAwMDIxODAwNTAwMDAwMDAwMDAyMTgwMDU0MDAwMDAwMDEyMgorOjEwMDYwMDAwMDIxODAwNTgwMDAwMDAwNDAyMTgwMDVDMDAwMDAwMDBGRQorOjEwMDYxMDAwMDIxODAwNjAwMDAwMDAwMTAyMTgwMDY0MDAwMDAwMDNERQorOjEwMDYyMDAwMDIxODAwNjgwMDAwMDAwMDAyMTgwMDZDMDAwMDAwMDFDMQorOjEwMDYzMDAwMDIxODAwNzAwMDAwMDAwNDAyMTgwMDc0MDAwMDAwMDA5RQorOjEwMDY0MDAwMDIxODAwNzgwMDAwMDAwNDAyMTgwMDdDMDAwMDAwMDM3QgorOjEwMDY1MDAwMDYxODAwODAwMDAwMDAwMjAyMTgwMEE0MDAwMDNGRkZGRQorOjEwMDY2MDAwMDIxODAwQTgwMDAwMDNGRjAyMTgwMjI0MDAwMDAwMDA4NgorOjEwMDY3MDAwMDIxODAyMzQwMDAwMDAwMDAyMTgwMjRDMDAwMDAwMDBDMgorOjEwMDY4MDAwMDIxODAyRTQwMDAwMDBGRjA2MTgxMDAwMDAwMDA0MDAzOQorOjEwMDY5MDAwMDIxQjhCQzAwMDAwMDAwMTAyMUI4MDAwMDAwMDAwMzQyMAorOjEwMDZBMDAwMDIxQjgwNDAwMDAwMDAxODAyMUI4MDgwMDAwMDAwMEMyQworOjEwMDZCMDAwMDIxQjgwQzAwMDAwMDAyMDBDMUI4MzAwMDAwN0ExMjA0QgorOjEwMDZDMDAwMEExQjgzMDAwMDAwMDEzODBCMUI4MzAwMDAwMDEzODgwNQorOjEwMDZEMDAwMDIxQjgzQzAwMDAwMDFGNDA2MUEyMDAwMDAwMDAwQjJEMworOjEwMDZFMDAwMDYxQTIzQzgwMDAwMDE4MTA0MUEyOUNDMDAwMTAyMjc0MAorOjEwMDZGMDAwMDYxQTEwMjAwMDAwMDBDODA2MUExMDAwMDAwMDAwMDJCMAorOjEwMDcwMDAwMDYxQTFFMzgwMDAwMDAwMjA2MUExRTMwMDAwMDAwMDIwMQorOjEwMDcxMDAwMDYxQTA4MDAwMDAwMDAwMjA2MUEwODA4MDAwMDAwMDI3RAorOjEwMDcyMDAwMDYxQTA4MTAwMDAwMDAwNDA0MUExRkIwMDAwNTAyMjg3MQorOjEwMDczMDAwMDQxQTRDQjAwMDA4MDIyRDA2MUEyMkM4MDAwMDAwMjAzRQorOjEwMDc0MDAwMDYxQTQwMDAwMDAwMDEyNDAyMUE0OTIwMDAwMDAwMDA5RgorOjEwMDc1MDAwMDYxQTE0MDAwMDAwMDAwQTA2MUExNDUwMDAwMDAwMDZEMQorOjEwMDc2MDAwMDYxQTE1MDAwMDAwMDAwMjA0MUExNTA4MDAwNTAyMzVEQgorOjEwMDc3MDAwMDYxQTE1MUMwMDAwMDAwOTA2MUExNTgwMDAwMDAwMTQ1NgorOjEwMDc4MDAwMDYxQTA5QzAwMDAwMDA0ODA2MUEwODAwMDAwMDAwMDIwRQorOjEwMDc5MDAwMDYxQTA4MjAwMDAwMDAwRTA0MUExRkIwMDAwMjAyM0FEOAorOjEwMDdBMDAwMDYxQTJDMjgwMDAwMDAwMjA2MUEyMzQ4MDAwMDAwMjAyOAorOjEwMDdCMDAwMDYxQTQ0OTAwMDAwMDEyNDAyMUE0OTI0MDAwMDAwMDA5NworOjEwMDdDMDAwMDYxQTE0MjgwMDAwMDAwQTA2MUExNDY4MDAwMDAwMDYyMQorOjEwMDdEMDAwMDYxQTE1NDAwMDAwMDAwMjA0MUExNTQ4MDAwNTAyM0NFNAorOjEwMDdFMDAwMDYxQTE1NUMwMDAwMDAwOTA2MUExNUQwMDAwMDAwMTQ1NgorOjEwMDdGMDAwMDYxQTBBRTAwMDAwMDA0ODA2MUEwODA4MDAwMDAwMDI3NQorOjEwMDgwMDAwMDYxQTA4NTgwMDAwMDAwRTA0MUExRkI4MDAwMjAyNDEyMAorOjEwMDgxMDAwMDYxQTJDMzAwMDAwMDAwMjAyMDBBMjgwMDAwMDAwMDEzNQorOjEwMDgyMDAwMDIwMEEyOTQwNzFEMjkxMTAyMDBBMjk4MDAwMDAwMDBGNgorOjEwMDgzMDAwMDIwMEEyOUMwMDlDMDQyNDAyMDBBMkEwMDAwMDAwMDA3MAorOjEwMDg0MDAwMDIwMEEyQTQwMDAwMDIwOTAyMDBBNEZDRkYwMDAwMDBCNAorOjEwMDg1MDAwMDIwMTAwQjQwMDAwMDAwMTAyMDEwMEI4MDAwMDAwMDEyNAorOjEwMDg2MDAwMDIwMTAwREMwMDAwMDAwMTAyMDEwMTAwMDAwMDAwMDFBMworOjEwMDg3MDAwMDIwMTAxMDQwMDAwMDAwMTAyMDEwMDdDMDAzMDAwMDBDMAorOjEwMDg4MDAwMDIwMTAwODQwMDAwMDAyODAyMDEwMDhDMDAwMDAwMDAyQQorOjEwMDg5MDAwMDIwMTAxMzAwMDAwMDAwNDAyMDEwMjVDMDAwMDAwMDFCRQorOjEwMDhBMDAwMDIwMTAzMjgwMDAwMDAwMDAyMDEwNTU0MDAwMDAwMzA4RQorOjEwMDhCMDAwMDIwMTAwQzQwMDAwMDAwMTAyMDEwMENDMDAwMDAwMDFBMAorOjEwMDhDMDAwMDIwMTAwRjgwMDAwMDAwMTAyMDEwMEYwMDAwMDAwMDEzOAorOjEwMDhEMDAwMDIwMTAwODAwMDMwMDAwMDAyMDEwMDg4MDAwMDAwMjhCMgorOjEwMDhFMDAwMDIwMTAwOTAwMDAwMDAwMDAyMDEwMTM0MDAwMDAwMDQzOQorOjEwMDhGMDAwMDIwMTAyREMwMDAwMDAwMTAyMDEwMzJDMDAwMDAwMDBFNAorOjEwMDkwMDAwMDIwMTA1NjQwMDAwMDAzMDAyMDEwMEM4MDAwMDAwMDE3RgorOjEwMDkxMDAwMDIwMTAwRDAwMDAwMDAwMTAyMDEwMEZDMDAwMDAwMDEwMworOjEwMDkyMDAwMDIwMTAwRjQwMDAwMDAwMTAyMEMxMDAwMDAwMDAwMjA5MQorOjEwMDkzMDAwMDIwQzIwMDgwMDAwMEExMTAyMEMyMDBDMDAwMDBBMDAyMgorOjEwMDk0MDAwMDIwQzIwMTAwMDAwMEEwNDAyMEMyMDFDMDAwMEZGRkYxMworOjEwMDk1MDAwMDIwQzIwMjAwMDAwRkZGRjAyMEMyMDI0MDAwMEZGRkZGQgorOjEwMDk2MDAwMDIwQzIwMjgwMDAwRkZGRjA2MEMyMDM4MDAwMDAwMDJDNworOjEwMDk3MDAwMDIwQzIwNDAwMDAwMDAzNDAyMEMyMDQ0MDAwMDAwMzUyRQorOjEwMDk4MDAwMDIwQzIwNDgwMDAwMDAyMDAyMEMyMDRDMDAwMDAwMjEzNgorOjEwMDk5MDAwMDIwQzIwNTAwMDAwMDAyMjAyMEMyMDU0MDAwMDAwMjMxMgorOjEwMDlBMDAwMDIwQzIwNTgwMDAwMDAyNDAyMEMyMDVDMDAwMDAwMjVFRQorOjEwMDlCMDAwMDIwQzIwNjAwMDAwMDAyNjAyMEMyMDY0MDAwMDAwMjdDQQorOjEwMDlDMDAwMDIwQzIwNjgwMDAwMDAyODAyMEMyMDZDMDAwMDAwMjlBNgorOjEwMDlEMDAwMDIwQzIwNzAwMDAwMDAyQTAyMEMyMDc0MDAwMDAwMkI4MgorOjEwMDlFMDAwMDYwQzIwNzgwMDAwMDA1NjAyMEMyMUQwMDAwMDAwMDEwNworOjEwMDlGMDAwMDIwQzIxRDQwMDAwMDAwMTAyMEMyMUQ4MDAwMDAwMDFFQgorOjEwMEEwMDAwMDIwQzIxREMwMDAwMDAwMTAyMEMyMUUwMDAwMDAwMDFDQQorOjEwMEExMDAwMDIwQzIxRTQwMDAwMDAwMTAyMEMyMUU4MDAwMDAwMDFBQQorOjEwMEEyMDAwMDIwQzIxRUMwMDAwMDAwMTAyMEMyMUYwMDAwMDAwMDE4QQorOjEwMEEzMDAwMDIwQzIxRjQwMDAwMDAwMTA2MEMyMUY4MDAwMDAwMTA1NworOjEwMEE0MDAwMDIwQzIyMzgwN0ZGRkZGRjAyMEMyMjNDMDAwMDAwM0Y4RgorOjEwMEE1MDAwMDIwQzIyNDAwN0ZGRkZGRjAyMEMyMjQ0MDAwMDAwMEY5RgorOjEwMEE2MDAwMDEwQzIyNDgwMDAwMDAwMDAxMEMyMjRDMDAwMDAwMDA5NAorOjEwMEE3MDAwMDEwQzIyNTAwMDAwMDAwMDAxMEMyMjU0MDAwMDAwMDA3NAorOjEwMEE4MDAwMDEwQzIyNTgwMDAwMDAwMDAxMEMyMjVDMDAwMDAwMDA1NAorOjEwMEE5MDAwMDEwQzIyNjAwMDAwMDAwMDAxMEMyMjY0MDAwMDAwMDAzNAorOjEwMEFBMDAwMDEwQzIyNjgwMDAwMDAwMDAxMEMyMjZDMDAwMDAwMDAxNAorOjEwMEFCMDAwMDEwQzIyNzAwMDAwMDAwMDAxMEMyMjc0MDAwMDAwMDBGNAorOjEwMEFDMDAwMDEwQzIyNzgwMDAwMDAwMDAxMEMyMjdDMDAwMDAwMDBENAorOjEwMEFEMDAwMDIwQzI0QkMwMDAwMDAwMTBDMEMyMDAwMDAwMDAzRTgwNAorOjEwMEFFMDAwMEEwQzIwMDAwMDAwMDAwMTBCMEMyMDAwMDAwMDAwMEE4RQorOjEwMEFGMDAwMDIwQzQwMDgwMDAwMDM2NTAyMEM0MDBDMDAwMDAzNTQ4NworOjEwMEIwMDAwMDIwQzQwMTAwMDAwMDM1ODAyMEM0MDE0MDAwMDAzNzU1MgorOjEwMEIxMDAwMDIwQzQwMUMwMDAwRkZGRjAyMEM0MDIwMDAwMEZGRkYwMQorOjEwMEIyMDAwMDIwQzQwMjQwMDAwRkZGRjAyMEM0MDI4MDAwMEZGRkZFMQorOjEwMEIzMDAwMDIwQzQwMzgwMDAwMDA0NjAyMEM0MDNDMDAwMDAwMDU1QQorOjEwMEI0MDAwMDYwQzQwNDAwMDAwMDA1RTAyMEM0MUI4MDAwMDAwMDFBRAorOjEwMEI1MDAwMDYwQzQxQkMwMDAwMDAxRjAyMEM0MjM4MDdGRkZGRkZEQgorOjEwMEI2MDAwMDIwQzQyM0MwMDAwMDAzRjAyMEM0MjQwMDdGRkZGRkYyNgorOjEwMEI3MDAwMDIwQzQyNDQwMDAwMDAwRjAxMEM0MjQ4MDAwMDAwMDAzQgorOjEwMEI4MDAwMDEwQzQyNEMwMDAwMDAwMDAxMEM0MjUwMDAwMDAwMDAyQgorOjEwMEI5MDAwMDEwQzQyNTQwMDAwMDAwMDAxMEM0MjU4MDAwMDAwMDAwQgorOjEwMEJBMDAwMDEwQzQyNUMwMDAwMDAwMDAxMEM0MjYwMDAwMDAwMDBFQgorOjEwMEJCMDAwMDEwQzQyNjQwMDAwMDAwMDAxMEM0MjY4MDAwMDAwMDBDQgorOjEwMEJDMDAwMDEwQzQyNkMwMDAwMDAwMDAxMEM0MjcwMDAwMDAwMDBBQgorOjEwMEJEMDAwMDEwQzQyNzQwMDAwMDAwMDAxMEM0Mjc4MDAwMDAwMDA4QgorOjEwMEJFMDAwMDEwQzQyN0MwMDAwMDAwMDAxMEM0MjgwMDAwMDAwMDA2QgorOjEwMEJGMDAwMDIwQzQ0QzAwMDAwMDAwMTBDMEM0MDAwMDAwMDAzRTg5RgorOjEwMEMwMDAwMEEwQzQwMDAwMDAwMDAwMTBCMEM0MDAwMDAwMDAwMEEyQworOjEwMEMxMDAwMDIwRDAwNDQwMDAwMDAzMjAyMEQwMDhDMDIxNTAwMjA3RAorOjEwMEMyMDAwMDIwRDAwOTAwMjE1MDAyMDAyMEQwMDk0MDgxMDAwMDAzMworOjEwMEMzMDAwMDIwRDAwOTgwMDAwMDAzMzAyMEQwMDlDMDAwMDAwMDIyRAorOjEwMEM0MDAwMDIwRDAwQTAwMDAwMDAwMDAyMEQwMEE0MDAwMDAwMDUzRAorOjEwMEM1MDAwMDIwRDAwQTgwMDAwMDAwNTA2MEQwMEFDMDAwMDAwMDIxNworOjEwMEM2MDAwMDIwRDAwQjQwMDAwMDAwMjAyMEQwMEI4MDAwMDAwMDNGNQorOjEwMEM3MDAwMDIwRDAwQkMwMDAwMDAwMjAyMEQwMEMwMDAwMDAwMDFENworOjEwMEM4MDAwMDIwRDAwQzgwMDAwMDAwMjAyMEQwMENDMDAwMDAwMDJBRQorOjEwMEM5MDAwMDIwRDAxMDgwMDAwMDAwMTAyMEQwMTVDMDAwMDAwMDFDRQorOjEwMENBMDAwMDIwRDAxNjQwMDAwMDAwMTAyMEQwMTY4MDAwMDAwMDI1NQorOjEwMENCMDAwMDIwRDAyMDQwMDAwMDAwMTAyMEQwMjBDMDAwMDAwMjBFMQorOjEwMENDMDAwMDIwRDAyMTAwMDAwMDA0MDAyMEQwMjE0MDAwMDAwNDA1RQorOjEwMENEMDAwMDIwRDAyMjAwMDAwMDAwMzAyMEQwMjI0MDAwMDAwMTg5MworOjEwMENFMDAwMDYwRDAyODAwMDAwMDAxMjA0MEQwMzAwMDAyNDAyNDNFMAorOjEwMENGMDAwMDIwRDAwNEMwMDAwMDAwMTAyMEQwMDUwMDAwMDAwMDIzNworOjEwMEQwMDAwMDIwRDAwNTQwMDAwMDAwODAyMEQwMDU4MDAwMDAwMDgwOQorOjEwMEQxMDAwMDYwRDAwNUMwMDAwMDAwNDAyMEQwMEM0MDAwMDAwMDQ4OQorOjEwMEQyMDAwMDIwRDAxMTQwMDAwMDAwOTAyMEQwMTE4MDAwMDAwMjk0NQorOjEwMEQzMDAwMDIwRDAxMUMwMDAwMDAwQTAyMEQwMTIwMDAwMDAwMkEyMworOjEwMEQ0MDAwMDIwRDAxMjQwMDAwMDAwNzAyMEQwMTI4MDAwMDAwMjcwOQorOjEwMEQ1MDAwMDIwRDAxMkMwMDAwMDAwNzAyMEQwMTMwMDAwMDAwMjdFOQorOjEwMEQ2MDAwMDIwRDAxMzQwMDAwMDAwQzAyMEQwMTM4MDAwMDAwMkNCRgorOjEwMEQ3MDAwMDIwRDAxM0MwMDAwMDAwQzAyMEQwMTQwMDAwMDAwMkM5RgorOjEwMEQ4MDAwMDIwRDAxNDQwMDAwMDAwQzAyMEQwMTQ4MDAwMDAwMkM3RgorOjEwMEQ5MDAwMDIwRDAwMDQwMDAwMDAwMTAyMEQwMDA4MDAwMDAwMDEyNworOjEwMERBMDAwMDIwRDAwMEMwMDAwMDAwMTAyMEQwMDEwMDAwMDAwMDEwNworOjEwMERCMDAwMDIwRDAwMTQwMDAwMDAwMTAyMEQwMDE4MDAwMDAwMDFFNworOjEwMERDMDAwMDIwRDAwMUMwMDAwMDAwMTAyMEQwMDIwMDAwMDAwMDFDNworOjEwMEREMDAwMDIwRDAwMjQwMDAwMDAwMTAyMEQwMDI4MDAwMDAwMDFBNworOjEwMERFMDAwMDIwRDAwMkMwMDAwMDAwMTAyMEQwMDMwMDAwMDAwMDE4NworOjEwMERGMDAwMDIwRDAwMzQwMDAwMDAwMTAyMEQwMDM4MDAwMDAwMDE2NworOjEwMEUwMDAwMDIwRDAwM0MwMDAwMDAwMTAyMEUwMDRDMDAwMDAwMzIwOAorOjEwMEUxMDAwMDIwRTAwOTQwMjE1MDAyMDAyMEUwMDk4MDIxNTAwMjAxOAorOjEwMEUyMDAwMDIwRTAwOUMwMDAwMDAzMDAyMEUwMEEwMDgxMDAwMDAxRQorOjEwMEUzMDAwMDIwRTAwQTQwMDAwMDAzMzAyMEUwMEE4MDAwMDAwMzBFMworOjEwMEU0MDAwMDIwRTAwQUMwMDAwMDAzMTAyMEUwMEIwMDAwMDAwMDJGMworOjEwMEU1MDAwMDIwRTAwQjQwMDAwMDAwNDAyMEUwMEI4MDAwMDAwMDAwMgorOjEwMEU2MDAwMDIwRTAwQkMwMDAwMDAwMjAyMEUwMEMwMDAwMDAwMDJFMgorOjEwMEU3MDAwMDIwRTAwQzQwMDAwMDAwMDAyMEUwMEM4MDAwMDAwMDJDNAorOjEwMEU4MDAwMDIwRTAwQ0MwMDAwMDAwNzAyMEUwMEQwMDAwMDAwMDI5RAorOjEwMEU5MDAwMDIwRTAwRDQwMDAwMDAwMjAyMEUwMEQ4MDAwMDAwMDE4MworOjEwMEVBMDAwMDIwRTAwRTQwMDAwMDAwMTAyMEUwMTQ0MDAwMDAwMDFGNworOjEwMEVCMDAwMDIwRTAxNEMwMDAwMDAwMTAyMEUwMTUwMDAwMDAwMDI3MQorOjEwMEVDMDAwMDIwRTAyMDQwMDAwMDAwMTAyMEUwMjBDMDAwMDAwNDBBRAorOjEwMEVEMDAwMDIwRTAyMTAwMDAwMDA0MDAyMEUwMjFDMDAwMDAwMDQ3RQorOjEwMEVFMDAwMDIwRTAyMjAwMDAwMDAyMDAyMEUwMjI0MDAwMDAwMEU2QworOjEwMEVGMDAwMDIwRTAyMjgwMDAwMDAxQjA2MEUwMzAwMDAwMDAwMTI3NAorOjEwMEYwMDAwMDQwRTAyODAwMDFCMDI2NzAyMEUwMDU0MDAwMDAwMEM1OQorOjEwMEYxMDAwMDIwRTAwNTgwMDAwMDAwNzAyMEUwMDVDMDAwMDAwMEZFNworOjEwMEYyMDAwMDIwRTAwNjAwMDAwMDAxMDA2MEUwMDY0MDAwMDAwMDRDNQorOjEwMEYzMDAwMDIwRTAwREMwMDAwMDAwMzAyMEUwMTEwMDAwMDAwMEY5MgorOjEwMEY0MDAwMDIwRTAxMTQwMDAwMDAyRjAyMEUwMTE4MDAwMDAwMEUxNgorOjEwMEY1MDAwMDIwRTAxMUMwMDAwMDAyRTAyMEUwMDA0MDAwMDAwMDEyMQorOjEwMEY2MDAwMDIwRTAwMDgwMDAwMDAwMTAyMEUwMDBDMDAwMDAwMDE0QgorOjEwMEY3MDAwMDIwRTAwMTAwMDAwMDAwMTAyMEUwMDE0MDAwMDAwMDEyQgorOjEwMEY4MDAwMDIwRTAwMTgwMDAwMDAwMTAyMEUwMDFDMDAwMDAwMDEwQgorOjEwMEY5MDAwMDIwRTAwMjAwMDAwMDAwMTAyMEUwMDI0MDAwMDAwMDFFQgorOjEwMEZBMDAwMDIwRTAwMjgwMDAwMDAwMTAyMEUwMDJDMDAwMDAwMDFDQgorOjEwMEZCMDAwMDIwRTAwMzAwMDAwMDAwMTAyMEUwMDM0MDAwMDAwMDFBQgorOjEwMEZDMDAwMDIwRTAwMzgwMDAwMDAwMTAyMEUwMDNDMDAwMDAwMDE4QgorOjEwMEZEMDAwMDIwRTAwNDAwMDAwMDAwMTAyMEUwMDQ0MDAwMDAwMDE2QgorOjEwMEZFMDAwMDczMDA0MDAwMEM5MDAwMDA4MzAwNzY4MDAxMzAyODJCRgorOjEwMEZGMDAwMDczNDAwMDAzNDEyMDAwMDA3MzQ4MDAwMzdCNzBEMDVCNQorOjEwMTAwMDAwMDczNTAwMDAyRTdEMUFGMzA4MzU2RjQwNTIxODAyODQxMAorOjEwMTAxMDAwMDEzMDAwMDAwMDAwMDAwMDAxMzAwMDA0MDAwMDAwMDA2QQorOjEwMTAyMDAwMDEzMDAwMDgwMDAwMDAwMDAxMzAwMDBDMDAwMDAwMDA0QQorOjEwMTAzMDAwMDEzMDAwMTAwMDAwMDAwMDAxMzAwMDE0MDAwMDAwMDAyQQorOjEwMTA0MDAwMDIzMDAwMjAwMDAwMDAwMTAyMzAwMDI0MDAwMDAwMDJGNQorOjEwMTA1MDAwMDIzMDAwMjgwMDAwMDAwMzAyMzAwMDJDMDAwMDAwMDBENQorOjEwMTA2MDAwMDIzMDAwMzAwMDAwMDAwNDAyMzAwMDM0MDAwMDAwMDFCMworOjEwMTA3MDAwMDIzMDAwMzgwMDAwMDAwMDAyMzAwMDNDMDAwMDAwMDE5NworOjEwMTA4MDAwMDIzMDAwNDAwMDAwMDAwNDAyMzAwMDQ0MDAwMDAwMDA3NAorOjEwMTA5MDAwMDIzMDAwNDgwMDAwMDAwMTAyMzAwMDRDMDAwMDAwMDM1NAorOjEwMTBBMDAwMDIzMDAwNTAwMDAwMDAwMDAyMzAwMDU0MDAwMDAwMDEzNworOjEwMTBCMDAwMDIzMDAwNTgwMDAwMDAwNDAyMzAwMDVDMDAwMDAwMDAxNAorOjEwMTBDMDAwMDIzMDAwNjAwMDAwMDAwMTAyMzAwMDY0MDAwMDAwMDNGNAorOjEwMTBEMDAwMDIzMDAwNjgwMDAwMDAwMDAyMzAwMDZDMDAwMDAwMDFENworOjEwMTBFMDAwMDIzMDAwNzAwMDAwMDAwNDAyMzAwMDc0MDAwMDAwMDBCNAorOjEwMTBGMDAwMDIzMDAwNzgwMDAwMDAwNDAyMzAwMDdDMDAwMDAwMDM5MQorOjEwMTEwMDAwMDYzMDAwODAwMDAwMDAwMjAyMzAwMEE0MDAwMDNGRkYxMworOjEwMTExMDAwMDIzMDAwQTgwMDAwMDNGRjAyMzAwMjI0MDAwMDAwMDA5QgorOjEwMTEyMDAwMDIzMDAyMzQwMDAwMDAwMDAyMzAwMjRDMDAwMDAwMDBENworOjEwMTEzMDAwMDIzMDAyRTQwMDAwRkZGRjA2MzAyMDAwMDAwMDA4MDAzQgorOjEwMTE0MDAwMDIzMzhCQzAwMDAwMDAwMTAyMzM4MDAwMDAwMDAwMUE0RgorOjEwMTE1MDAwMDIzMzgwNDAwMDAwMDA0RTAyMzM4MDgwMDAwMDAwMTAwNworOjEwMTE2MDAwMDIzMzgwQzAwMDAwMDAyMDBDMzM4MzAwMDAwN0ExMjA2MAorOjEwMTE3MDAwMEEzMzgzMDAwMDAwMDEzODBCMzM4MzAwMDAwMDEzODgxQQorOjEwMTE4MDAwMDIzMzgzQzAwMDAwMDFGNDBDMzM4MzgwMURDRDY1MDA2MQorOjEwMTE5MDAwMEEzMzgzODAwMDA0QzRCNDBCMzM4MzgwMDA0QzRCNDA3QgorOjEwMTFBMDAwMDYzMjFBQTAwMDAwMDBDMjA2MzIxMDIwMDAwMDAwQzg1QgorOjEwMTFCMDAwMDYzMjEwMDAwMDAwMDAwMjA2MzIxNDAwMDAwMDAwNDA1OQorOjEwMTFDMDAwMDYzMjUwOTgwMDAwMDAwNDA2MzI1MDgwMDAwMDAwMDVFRQorOjEwMTFEMDAwMDQzMjUwOTQwMDAxMDI4NjA2MzI1MDAwMDAwMDAwMjBDNAorOjEwMTFFMDAwMDQzMjI4MzAwMDAyMDI4NzAyMzMwODAwMDEwMDAwMDBBOAorOjEwMTFGMDAwMDQzMzBDMDAwMDEwMDI4OTAyMzMwODAwMDAwMDAwMDBENAorOjEwMTIwMDAwMDQzMzBDNDAwMDEwMDI5OTA2MzIxNTAwMDAwMDAwQjRBRgorOjEwMTIxMDAwMDIzMjFEQzgwMDAwMDAwMDA2MzI0MDAwMDAwMDAwRDg2NQorOjEwMTIyMDAwMDYzMjE3RDAwMDAwMDBCNDAyMzIxRENDMDAwMDAwMDBDRQorOjEwMTIzMDAwMDYzMjQzNjAwMDAwMDBEODA3MjAwNDAwMDA5MjAwMDAzRQorOjEwMTI0MDAwMDgyMDA3ODAwMDEwMDJBOTA3MjQwMDAwMkNDRjAwMDAwRQorOjEwMTI1MDAwMDcyNDgwMDAyQUU1MEIzNDA4MjREQzYwNjJEQTAyQUI0NAorOjEwMTI2MDAwMDEyMDAwMDAwMDAwMDAwMDAxMjAwMDA0MDAwMDAwMDAzOAorOjEwMTI3MDAwMDEyMDAwMDgwMDAwMDAwMDAxMjAwMDBDMDAwMDAwMDAxOAorOjEwMTI4MDAwMDEyMDAwMTAwMDAwMDAwMDAxMjAwMDE0MDAwMDAwMDBGOAorOjEwMTI5MDAwMDIyMDAwMjAwMDAwMDAwMTAyMjAwMDI0MDAwMDAwMDJDMworOjEwMTJBMDAwMDIyMDAwMjgwMDAwMDAwMzAyMjAwMDJDMDAwMDAwMDBBMworOjEwMTJCMDAwMDIyMDAwMzAwMDAwMDAwNDAyMjAwMDM0MDAwMDAwMDE4MQorOjEwMTJDMDAwMDIyMDAwMzgwMDAwMDAwMDAyMjAwMDNDMDAwMDAwMDE2NQorOjEwMTJEMDAwMDIyMDAwNDAwMDAwMDAwNDAyMjAwMDQ0MDAwMDAwMDA0MgorOjEwMTJFMDAwMDIyMDAwNDgwMDAwMDAwMTAyMjAwMDRDMDAwMDAwMDMyMgorOjEwMTJGMDAwMDIyMDAwNTAwMDAwMDAwMDAyMjAwMDU0MDAwMDAwMDEwNQorOjEwMTMwMDAwMDIyMDAwNTgwMDAwMDAwNDAyMjAwMDVDMDAwMDAwMDBFMQorOjEwMTMxMDAwMDIyMDAwNjAwMDAwMDAwMTAyMjAwMDY0MDAwMDAwMDNDMQorOjEwMTMyMDAwMDIyMDAwNjgwMDAwMDAwMDAyMjAwMDZDMDAwMDAwMDFBNAorOjEwMTMzMDAwMDIyMDAwNzAwMDAwMDAwNDAyMjAwMDc0MDAwMDAwMDA4MQorOjEwMTM0MDAwMDIyMDAwNzgwMDAwMDAwNDAyMjAwMDdDMDAwMDAwMDM1RQorOjEwMTM1MDAwMDYyMDAwODAwMDAwMDAwMjAyMjAwMEE0MDAwMDNGRkZFMQorOjEwMTM2MDAwMDIyMDAwQTgwMDAwMDNGRjAyMjAwMjI0MDAwMDAwMDA2OQorOjEwMTM3MDAwMDIyMDAyMzQwMDAwMDAwMDAyMjAwMjRDMDAwMDAwMDBBNQorOjEwMTM4MDAwMDIyMDAyRTQwMDAwRkZGRjA2MjAyMDAwMDAwMDA4MDAwOQorOjEwMTM5MDAwMDIyMzhCQzAwMDAwMDAwMTAyMjM4MDAwMDAwMDAwMTAyNworOjEwMTNBMDAwMDIyMzgwNDAwMDAwMDAxMjAyMjM4MDgwMDAwMDAwMzBGMQorOjEwMTNCMDAwMDIyMzgwQzAwMDAwMDAwRTAyMjM4M0MwMDAwMDAxRjQ1RAorOjEwMTNDMDAwMDYyMjUwMDAwMDAwMDA0MjA2MjIxMDIwMDAwMDAwQzg0MworOjEwMTNEMDAwMDYyMjEwMDAwMDAwMDAwMjA2MjIyMDAwMDAwMDAwQzBDQgorOjEwMTNFMDAwMDYyMjI1QzAwMDAwMDI0MDA0MjIyRUM4MDAwODAyQUREQgorOjEwMTNGMDAwMDIyMzA4MDAwMTNGRkZGRjA0MjMwQzAwMDAxMDAyQjU4OAorOjEwMTQwMDAwMDIyMzA4MDAwMDAwMDAwMDA0MjMwQzQwMDAxMDAyQzU2NQorOjEwMTQxMDAwMDYyMjMwNDAwMDAwMDBBMDA2MjIzNTQwMDAwMDAwMTBFNworOjEwMTQyMDAwMDYyMjM2QzAwMDAwMDAzMDA2MjI0MDAwMDAwMDAyMDAwNAorOjEwMTQzMDAwMDYyMjM1QzAwMDAwMDAyMDA2MjIzODQwMDAwMDAwMzA5RgorOjEwMTQ0MDAwMDYyMjMwMDAwMDAwMDAwODAyMjI1MTE4MDAwMDAwMDBBRgorOjEwMTQ1MDAwMDYyMjIzMDAwMDAwMDAwRTA2MjIyNDEwMDAwMDAwMzBBNworOjEwMTQ2MDAwMDYyMjMyQzAwMDAwMDBBMDA2MjIzNTgwMDAwMDAwMTBENQorOjEwMTQ3MDAwMDYyMjM3ODAwMDAwMDAzMDA2MjI0ODAwMDAwMDAyMDBFQgorOjEwMTQ4MDAwMDYyMjM2NDAwMDAwMDAyMDA2MjIzOTAwMDAwMDAwMzAwRAorOjEwMTQ5MDAwMDYyMjMwMjAwMDAwMDAwODAyMjI1MTFDMDAwMDAwMDAzQgorOjEwMTRBMDAwMDYyMjIzMzgwMDAwMDAwRTA2MjIyNEQwMDAwMDAwMzA1RgorOjEwMTRCMDAwMDIxNjEwMDAwMDAwMDAyODAyMTcwMDA4MDAwMDAwMDJCOQorOjEwMTRDMDAwMDIxNzAwMkMwMDAwMDAwMzAyMTcwMDNDMDAwMDAwMDQ3QgorOjEwMTREMDAwMDIxNzAwNDQwMDAwMDAwODAyMTcwMDQ4MDAwMDAwMDI0NAorOjEwMTRFMDAwMDIxNzAwNEMwMDAwMDA5MDAyMTcwMDUwMDAwMDAwOTAwRQorOjEwMTRGMDAwMDIxNzAwNTQwMDgwMDA5MDAyMTcwMDU4MDgxNDAwMDBFMgorOjEwMTUwMDAwMDIxNzAwNjAwMDAwMDA4QTAyMTcwMDY0MDAwMDAwODBEQgorOjEwMTUxMDAwMDIxNzAwNjgwMDAwMDA4MTAyMTcwMDZDMDAwMDAwODBDNAorOjEwMTUyMDAwMDIxNzAwNzAwMDAwMDAwNjAyMTcwMDc4MDAwMDA3RDBDNAorOjEwMTUzMDAwMDIxNzAwN0MwMDAwMDc2QzAyMTcwMDM4MDA3QzEwMDRDMgorOjEwMTU0MDAwMDIxNzAwMDQwMDAwMDAwRjA2MTY0MDI0MDAwMDAwMDJFRAorOjEwMTU1MDAwMDIxNjQwNzAwMDAwMDAxQzAyMTY0MjA4MDAwMDAwMDE0NAorOjEwMTU2MDAwMDIxNjQyMTAwMDAwMDAwMTAyMTY0MjIwMDAwMDAwMDE5NQorOjEwMTU3MDAwMDIxNjQyMjgwMDAwMDAwMTAyMTY0MjMwMDAwMDAwMDE1RAorOjEwMTU4MDAwMDIxNjQyMzgwMDAwMDAwMTAyMTY0MjYwMDAwMDAwMDEwRAorOjEwMTU5MDAwMEMxNjQwMUMwMDAzRDA5MDBBMTY0MDFDMDAwMDAwOUM1MgorOjEwMTVBMDAwMEIxNjQwMUMwMDAwMDlDNDAyMTY0MDMwMDAwMDAwMDg2MQorOjEwMTVCMDAwMDIxNjQwMzQwMDAwMDAwQzAyMTY0MDM4MDAwMDAwMTBGMworOjEwMTVDMDAwMDIxNjQwNDQwMDAwMDAyMDAyMTY0MDAwMDAwMDAwMDEwNgorOjEwMTVEMDAwMDIxNjQwRDgwMDAwMDAwMTAyMTY0MDA4MDAwMDAwMDE3OQorOjEwMTVFMDAwMDIxNjQwMEMwMDAwMDAwMTAyMTY0MDEwMDAwMDAwMDEyRAorOjEwMTVGMDAwMDIxNjQyNDAwMDAwMDAwMDAyMTY0MjQ4MDAwMDAwMDBBRgorOjEwMTYwMDAwMDYxNjQyNzAwMDAwMDAwMjAyMTY0MjUwMDAwMDAwMDA2MAorOjEwMTYxMDAwMDIxNjQyNTgwMDAwMDAwMDA2MTY0MjgwMDAwMDAwMDIzOAorOjEwMTYyMDAwMDIxNjYwMDgwMDAwMDYxNDAyMTY2MDBDMDAwMDA2MDA5NgorOjEwMTYzMDAwMDIxNjYwMTAwMDAwMDYwNDAyMTY2MDFDMDAwMEZGRkY4NgorOjEwMTY0MDAwMDIxNjYwMjAwMDAwRkZGRjAyMTY2MDI0MDAwMEZGRkY2QQorOjEwMTY1MDAwMDIxNjYwMjgwMDAwRkZGRjAyMTY2MDM4MDAwMDAwMjAxQworOjEwMTY2MDAwMDIxNjYwM0MwMDAwMDAyMDAyMTY2MDQwMDAwMDAwMzRCQQorOjEwMTY3MDAwMDIxNjYwNDQwMDAwMDAzNTAyMTY2MDQ4MDAwMDAwMjM5NgorOjEwMTY4MDAwMDIxNjYwNEMwMDAwMDAyNDAyMTY2MDUwMDAwMDAwMjU4NQorOjEwMTY5MDAwMDIxNjYwNTQwMDAwMDAyNjAyMTY2MDU4MDAwMDAwMjc2MQorOjEwMTZBMDAwMDIxNjYwNUMwMDAwMDAyOTAyMTY2MDYwMDAwMDAwMkEzQgorOjEwMTZCMDAwMDIxNjYwNjQwMDAwMDAyQjAyMTY2MDY4MDAwMDAwMkMxNworOjEwMTZDMDAwMDIxNjYwNkMwMDAwMDAyRDA2MTY2MDcwMDAwMDAwNTJDQgorOjEwMTZEMDAwMDIxNjYxQjgwMDAwMDAwMTA2MTY2MUJDMDAwMDAwMUY4MAorOjEwMTZFMDAwMDIxNjYyMzgwN0ZGRkZGRjAyMTY2MjNDMDAwMDAwM0Y0RgorOjEwMTZGMDAwMDIxNjYyNDAwN0ZGRkZGRjAyMTY2MjQ0MDAwMDAwMEY1RgorOjEwMTcwMDAwMDExNjYyNDgwMDAwMDAwMDAxMTY2MjRDMDAwMDAwMDA1MworOjEwMTcxMDAwMDExNjYyNTAwMDAwMDAwMDAxMTY2MjU0MDAwMDAwMDAzMworOjEwMTcyMDAwMDExNjYyNTgwMDAwMDAwMDAxMTY2MjVDMDAwMDAwMDAxMworOjEwMTczMDAwMDExNjYyNjAwMDAwMDAwMDAxMTY2MjY0MDAwMDAwMDBGMworOjEwMTc0MDAwMDExNjYyNjgwMDAwMDAwMDAxMTY2MjZDMDAwMDAwMDBEMworOjEwMTc1MDAwMDExNjYyNzAwMDAwMDAwMDAxMTY2Mjc0MDAwMDAwMDBCMworOjEwMTc2MDAwMDExNjYyNzgwMDAwMDAwMDAxMTY2MjdDMDAwMDAwMDA5MworOjEwMTc3MDAwMDIxNjY0QkMwMDAwMDAwMTBDMTY2MDAwMDAwMDAzRThDMworOjEwMTc4MDAwMEExNjYwMDAwMDAwMDAwMTBCMTY2MDAwMDAwMDAwMEE0RAorOjEwMTc5MDAwMDIxNjgwNDAwMDAwMDAwNjAyMTY4MDQ0MDAwMDAwMDU4QQorOjEwMTdBMDAwMDIxNjgwNDgwMDAwMDAwQTAyMTY4MDRDMDAwMDAwMDU2NgorOjEwMTdCMDAwMDIxNjgwNTQwMDAwMDAwMjAyMTY4MENDMDAwMDAwMDREMworOjEwMTdDMDAwMDIxNjgwRDAwMDAwMDAwNDAyMTY4MEQ0MDAwMDAwMDQzRAorOjEwMTdEMDAwMDIxNjgwRDgwMDAwMDAwNDAyMTY4MERDMDAwMDAwMDQxRAorOjEwMTdFMDAwMDIxNjgwRTAwMDAwMDAwNDAyMTY4MEU0MDAwMDAwMDRGRAorOjEwMTdGMDAwMDIxNjgwRTgwMDAwMDAwNDAyMTY4ODA0MDAwMDAwMDRCRAorOjEwMTgwMDAwMDIxNjgwMzAwMDAwMDA3QzAyMTY4MDM0MDAwMDAwM0Q4QgorOjEwMTgxMDAwMDIxNjgwMzgwMDAwMDAzRjAyMTY4MDNDMDAwMDAwOUM0OQorOjEwMTgyMDAwMDIxNjgwRjAwMDAwMDAwNzA2MTY4MEY0MDAwMDAwMDU5NAorOjEwMTgzMDAwMDIxNjg4MEMwMTAxMDEwMTAyMTY4MTA4MDAwMDAwMDA1NworOjEwMTg0MDAwMDIxNjgxMEMwMDAwMDAwNDAyMTY4MTEwMDAwMDAwMDQ0MgorOjEwMTg1MDAwMDIxNjgxMTQwMDAwMDAwMjAyMTY4ODEwMDgwMTIwMDRGQworOjEwMTg2MDAwMDIxNjgxMTgwMDAwMDAwNTAyMTY4MTFDMDAwMDAwMDUwOAorOjEwMTg3MDAwMDIxNjgxMjAwMDAwMDAwNTAyMTY4MTI0MDAwMDAwMDVFOAorOjEwMTg4MDAwMDIxNjg4MkMyMDA4MTAwMTAyMTY4MTI4MDAwMDAwMDg4QQorOjEwMTg5MDAwMDIxNjgxMkMwMDAwMDAwNjAyMTY4MTMwMDAwMDAwMDdBRAorOjEwMThBMDAwMDIxNjgxMzQwMDAwMDAwMDAyMTY4ODMwMDEwMTAxMjA3OAorOjEwMThCMDAwMDYxNjgxMzgwMDAwMDAwNDAyMTY4ODM0MDEwMTAxMDE3NworOjEwMThDMDAwMDYxNjgxNDgwMDAwMDAwNDAyMTY4ODM4MDEwMTAxMDE1MworOjEwMThEMDAwMDYxNjgxNTgwMDAwMDAwNDAyMTY4ODNDMDEwMTAxMDEyRgorOjEwMThFMDAwMDYxNjgxNjgwMDAwMDAwMzAyMTY4MTc0MDAwMDAwMDFFMgorOjEwMThGMDAwMDIxNjg4NDAwMTAxMDEwMTAyMTY4MTc4MDAwMDAwMDFGMgorOjEwMTkwMDAwMDIxNjgxN0MwMDAwMDAwMTAyMTY4MTgwMDAwMDAwMDFBNworOjEwMTkxMDAwMDIxNjgxODQwMDAwMDAwMTAyMTY4ODQ0MDEwMTAxMDFDMQorOjEwMTkyMDAwMDIxNjgxODgwMDAwMDAwMTAyMTY4MThDMDAwMDAwMDQ2QworOjEwMTkzMDAwMDIxNjgxOTAwMDAwMDAwNDAyMTY4MTk0MDAwMDAwMDI0QgorOjEwMTk0MDAwMDIxNjg4NDgwODAxMjAwNDAyMTY4MTk4MDAwMDAwMDU0QworOjEwMTk1MDAwMDIxNjgxOUMwMDAwMDAwNTAyMTY4MUEwMDAwMDAwMDUwRgorOjEwMTk2MDAwMDIxNjgxQTQwMDAwMDAwNTAyMTY4ODE0MjAwODEwMDE0OAorOjEwMTk3MDAwMDIxNjgxQTgwMDAwMDAwODAyMTY4MUFDMDAwMDAwMDZEMworOjEwMTk4MDAwMDIxNjgxQjAwMDAwMDAwNzAyMTY4MUI0MDAwMDAwMDFCOQorOjEwMTk5MDAwMDIxNjg4MTgwMTAxMDEyMDAyMTY4MUI4MDAwMDAwMDExQQorOjEwMTlBMDAwMDIxNjgxQkMwMDAwMDAwMTAyMTY4MUMwMDAwMDAwMDE4NworOjEwMTlCMDAwMDIxNjgxQzQwMDAwMDAwMTAyMTY4ODFDMDEwMTAxMDEwOQorOjEwMTlDMDAwMDIxNjgxQzgwMDAwMDAwMTAyMTY4MUNDMDAwMDAwMDE0RgorOjEwMTlEMDAwMDIxNjgxRDAwMDAwMDAwMTAyMTY4MUQ0MDAwMDAwMDEyRgorOjEwMTlFMDAwMDIxNjg4MjAwMTAxMDEwMTAyMTY4MUQ4MDAwMDAwMDFDMQorOjEwMTlGMDAwMDIxNjgxREMwMDAwMDAwMTAyMTY4MUUwMDAwMDAwMDFGNworOjEwMUEwMDAwMDIxNjgxRTQwMDAwMDAwMTAyMTY4ODI0MDEwMTAxMDE5MAorOjEwMUExMDAwMDIxNjgxRTgwMDAwMDAwMTAyMTY4MUVDMDAwMDAwMDFCRQorOjEwMUEyMDAwMDIxNjgxRjAwMDAwMDAwMTAyMTY4ODI4MDEwMTAxMDE2MAorOjEwMUEzMDAwMDIxNjgyNDBGRkZGMDAzRjA2MTY4MjQ0MDAwMDAwMDJBQgorOjEwMUE0MDAwMDIxNjgyNENGRkZGMDAzRjAyMTY4MjUwMDAwMDAxMDA4OAorOjEwMUE1MDAwMDIxNjgyNTQwMDAwMDEwMDA2MTY4MjU4MDAwMDAwMDI5RgorOjEwMUE2MDAwMDIxNjgyNjAwMDAwMDBDMDAyMTY4MjY0MDAwMDAwQzBGRQorOjEwMUE3MDAwMDIxNjgyNjgwMDAwMUUwMDAyMTY4MjZDMDAwMDFFMDAyMgorOjEwMUE4MDAwMDIxNjgyNzAwMDAwNDAwMDAyMTY4Mjc0MDAwMDQwMDBCRQorOjEwMUE5MDAwMDIxNjgyNzgwMDAwODAwMDAyMTY4MjdDMDAwMDgwMDAxRQorOjEwMUFBMDAwMDIxNjgyODAwMDAwMjAwMDAyMTY4Mjg0MDAwMDIwMDBCRQorOjEwMUFCMDAwMDYxNjgyODgwMDAwMDAwNzAyMTY4MkE0MDAwMDAwMDFCQQorOjEwMUFDMDAwMDYxNjgyQTgwMDAwMDAwQTAyMTY4MUY0MDAwMDBDMDgyNQorOjEwMUFEMDAwMDIxNjgxRjgwMDAwMDA0MDAyMTY4MUZDMDAwMDAxMDA5RgorOjEwMUFFMDAwMDIxNjgyMDAwMDAwMDAyMDAyMTY4MjA0MDAwMDAwMTc4NworOjEwMUFGMDAwMDIxNjgyMDgwMDAwMDA4MDAyMTY4MjBDMDAwMDAyMDAxQworOjEwMUIwMDAwMDIxNjgyMTAwMDAwMDAwMDAyMTY4MjE4RkZGRjAxRkY3QgorOjEwMUIxMDAwMDIxNjgyMTRGRkZGMDFGRjAyMTY4MjNDMDAwMDAwMTMzMAorOjEwMUIyMDAwMDIxNjgwOTAwMDAwMDEzRjAyMTY4MDYwMDAwMDAxNDAxNAorOjEwMUIzMDAwMDIxNjgwNjQwMDAwMDE0MDA2MTY4MDY4MDAwMDAwMDI2MgorOjEwMUI0MDAwMDIxNjgwNzAwMDAwMDBDMDA2MTY4MDc0MDAwMDAwMDdCNgorOjEwMUI1MDAwMDIxNjgwOUMwMDAwMDA0ODAyMTY4MEEwMDAwMDAwNDg4OQorOjEwMUI2MDAwMDYxNjgwQTQwMDAwMDAwMjAyMTY4MEFDMDAwMDAwNDhBNworOjEwMUI3MDAwMDYxNjgwQjAwMDAwMDAwNzAyMTY4MjM4MDAwMDgwMDBDMAorOjEwMUI4MDAwMDIxNjgyMzQwMDAwMjVFNDAyMTY4MDk0MDAwMDdGRkZENAorOjEwMUI5MDAwMDIxNjgyMjAwMDAwMDAwNzAyMTY4MjFDMDAwMDAwMDdDNworOjEwMUJBMDAwMDIxNjgyMjgwMDAwMDAwMDAyMTY4MjI0RkZGRkZGRkZCOQorOjEwMUJCMDAwMDIxNjgyMzAwMDAwMDAwMDAyMTY4MjJDRkZGRkZGRkY5OQorOjEwMUJDMDAwMDIxNjgwRUMwMDAwMDBGRjAyMTQwMDAwMDAwMDAwMDE3QgorOjEwMUJEMDAwMDIxNDAwMEMwMDAwMDAwMTAyMTQwMDQwMDAwMDAwMDE4QgorOjEwMUJFMDAwMDIxNDAwNDQwMDAwN0ZGRjAyMTQwMDBDMDAwMDAwMDBGQgorOjEwMUJGMDAwMDIxNDAwMDAwMDAwMDAwMDAyMTQwMDZDMDAwMDAwMDA0RAorOjEwMUMwMDAwMDIxNDAwMDQwMDAwMDAwMTAyMTQwMDMwMDAwMDAwMDE3MgorOjEwMUMxMDAwMDIxNDAwMDQwMDAwMDAwMDAyMTQwMDVDMDAwMDAwMDAzOAorOjEwMUMyMDAwMDIxNDAwMDgwMDAwMDAwMTAyMTQwMDM0MDAwMDAwMDE0QQorOjEwMUMzMDAwMDIxNDAwMDgwMDAwMDAwMDAyMTQwMDYwMDAwMDAwMDAxMAorOjEwMUM0MDAwMDIwMjAwNTgwMDAwMDAzMjAyMDIwMEEwMDMxNTAwMjAyQQorOjEwMUM1MDAwMDIwMjAwQTQwMzE1MDAyMDAyMDIwMEE4MDEwMDAwMzBDNworOjEwMUM2MDAwMDIwMjAwQUMwODEwMDAwMDAyMDIwMEIwMDAwMDAwMzNDNQorOjEwMUM3MDAwMDIwMjAwQjQwMDAwMDAzMDAyMDIwMEI4MDAwMDAwMzE4RgorOjEwMUM4MDAwMDIwMjAwQkMwMDAwMDAwMzAyMDIwMEMwMDAwMDAwMDZDNworOjEwMUM5MDAwMDIwMjAwQzQwMDAwMDAwMzAyMDIwMEM4MDAwMDAwMDNBQQorOjEwMUNBMDAwMDIwMjAwQ0MwMDAwMDAwMjAyMDIwMEQwMDAwMDAwMDA4RQorOjEwMUNCMDAwMDIwMjAwRDQwMDAwMDAwMjAyMDIwMERDMDAwMDAwMDA2QQorOjEwMUNDMDAwMDIwMjAwRTAwMDAwMDAwNjAyMDIwMEU0MDAwMDAwMDQzRQorOjEwMUNEMDAwMDIwMjAwRTgwMDAwMDAwMjAyMDIwMEVDMDAwMDAwMDIyNAorOjEwMUNFMDAwMDIwMjAwRjAwMDAwMDAwMTAyMDIwMEZDMDAwMDAwMDZGOQorOjEwMUNGMDAwMDIwMjAxMjAwMDAwMDAwMDAyMDIwMTM0MDAwMDAwMDI4NAorOjEwMUQwMDAwMDIwMjAxQjAwMDAwMDAwMTAyMDIwMjBDMDAwMDAwMDEwQQorOjEwMUQxMDAwMDIwMjAyMTQwMDAwMDAwMTAyMDIwMjE4MDAwMDAwMDI4OAorOjEwMUQyMDAwMDIwMjA0MDQwMDAwMDAwMTAyMDIwNDBDMDAwMDAwNDA1MgorOjEwMUQzMDAwMDIwMjA0MTAwMDAwMDA0MDAyMDIwNDFDMDAwMDAwMDQyMworOjEwMUQ0MDAwMDIwMjA0MjAwMDAwMDAyMDAyMDIwNDI0MDAwMDAwMDIxRAorOjEwMUQ1MDAwMDIwMjA0MjgwMDAwMDAxRjA2MDIwNTAwMDAwMDAwMTIxNQorOjEwMUQ2MDAwMDQwMjA0ODAwMDFGMDJENTAyMDIwMDYwMDAwMDAwMEY4MAorOjEwMUQ3MDAwMDIwMjAwNjQwMDAwMDAwNzAyMDIwMDY4MDAwMDAwMEI3RAorOjEwMUQ4MDAwMDIwMjAwNkMwMDAwMDAwRTA2MDIwMDcwMDAwMDAwMDQ1OQorOjEwMUQ5MDAwMDIwMjAwRjQwMDAwMDAwNDAyMDIwMDA0MDAwMDAwMDEzRQorOjEwMURBMDAwMDIwMjAwMDgwMDAwMDAwMTAyMDIwMDBDMDAwMDAwMDExNQorOjEwMURCMDAwMDIwMjAwMTAwMDAwMDAwMTAyMDIwMDE0MDAwMDAwMDFGNQorOjEwMURDMDAwMDIwMjAwMTgwMDAwMDAwMTAyMDIwMDFDMDAwMDAwMDFENQorOjEwMUREMDAwMDIwMjAwMjAwMDAwMDAwMTAyMDIwMDI0MDAwMDAwMDFCNQorOjEwMURFMDAwMDIwMjAwMjgwMDAwMDAwMTAyMDIwMDJDMDAwMDAwMDE5NQorOjEwMURGMDAwMDIwMjAwMzAwMDAwMDAwMTAyMDIwMDM0MDAwMDAwMDE3NQorOjEwMUUwMDAwMDIwMjAwMzgwMDAwMDAwMTAyMDIwMDNDMDAwMDAwMDE1NAorOjEwMUUxMDAwMDIwMjAwNDAwMDAwMDAwMTAyMDIwMDQ0MDAwMDAwMDEzNAorOjEwMUUyMDAwMDIwMjAwNDgwMDAwMDAwMTAyMDIwMDRDMDAwMDAwMDExNAorOjEwMUUzMDAwMDIwMjAwNTAwMDAwMDAwMTAyMDIwMTA4MDAwMDAwQzg3OAorOjEwMUU0MDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDBBQQorOjEwMUU1MDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDJENgorOjEwMUU2MDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkZBNworOjEwMUU3MDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTBDMDAwMDAwQzg5OQorOjEwMUU4MDAwMDIwMjAxMUMwMDAwMDAwMjAyMDIwMUM4MDAwMDAwMDA2MgorOjEwMUU5MDAwMDIwMjAxRDAwMDAwMDAwMDAyMDIwMUQ4MDAwMDAwMDI4RQorOjEwMUVBMDAwMDIwMjAxRTAwMDAwMDAwMjAyMDIwMUU4MDAwMDAwRkY1RgorOjEwMUVCMDAwMDIwMjAxRjAwMDAwMDBGRjA3MjgwNDAwMDBCNDAwMDA0NworOjEwMUVDMDAwMDgyODA3NjgwMDEzMDJGNDA3MkMwMDAwMzVENzAwMDAyQgorOjEwMUVEMDAwMDcyQzgwMDAzQTU5MEQ3NjA3MkQwMDAwM0I3NDFDMEQyRAorOjEwMUVFMDAwMDcyRDgwMDAyMjZDMkFFQjA4MkRDNkYwNDcyMjAyRjY0RgorOjEwMUVGMDAwMDEyODAwMDAwMDAwMDAwMDAxMjgwMDA0MDAwMDAwMDA4QworOjEwMUYwMDAwMDEyODAwMDgwMDAwMDAwMDAxMjgwMDBDMDAwMDAwMDA2QgorOjEwMUYxMDAwMDEyODAwMTAwMDAwMDAwMDAxMjgwMDE0MDAwMDAwMDA0QgorOjEwMUYyMDAwMDIyODAwMjAwMDAwMDAwMTAyMjgwMDI0MDAwMDAwMDIxNgorOjEwMUYzMDAwMDIyODAwMjgwMDAwMDAwMzAyMjgwMDJDMDAwMDAwMDBGNgorOjEwMUY0MDAwMDIyODAwMzAwMDAwMDAwNDAyMjgwMDM0MDAwMDAwMDFENAorOjEwMUY1MDAwMDIyODAwMzgwMDAwMDAwMDAyMjgwMDNDMDAwMDAwMDFCOAorOjEwMUY2MDAwMDIyODAwNDAwMDAwMDAwNDAyMjgwMDQ0MDAwMDAwMDA5NQorOjEwMUY3MDAwMDIyODAwNDgwMDAwMDAwMTAyMjgwMDRDMDAwMDAwMDM3NQorOjEwMUY4MDAwMDIyODAwNTAwMDAwMDAwMDAyMjgwMDU0MDAwMDAwMDE1OAorOjEwMUY5MDAwMDIyODAwNTgwMDAwMDAwNDAyMjgwMDVDMDAwMDAwMDAzNQorOjEwMUZBMDAwMDIyODAwNjAwMDAwMDAwMTAyMjgwMDY0MDAwMDAwMDMxNQorOjEwMUZCMDAwMDIyODAwNjgwMDAwMDAwMDAyMjgwMDZDMDAwMDAwMDFGOAorOjEwMUZDMDAwMDIyODAwNzAwMDAwMDAwNDAyMjgwMDc0MDAwMDAwMDBENQorOjEwMUZEMDAwMDIyODAwNzgwMDAwMDAwNDAyMjgwMDdDMDAwMDAwMDNCMgorOjEwMUZFMDAwMDYyODAwODAwMDAwMDAwMjAyMjgwMEE0MDAwMDNGRkYzNQorOjEwMUZGMDAwMDIyODAwQTgwMDAwMDNGRjAyMjgwMjI0MDAwMDAwMDBCRAorOjEwMjAwMDAwMDIyODAyMzQwMDAwMDAwMDAyMjgwMjRDMDAwMDAwMDBGOAorOjEwMjAxMDAwMDIyODAyRTQwMDAwRkZGRjA2MjgyMDAwMDAwMDA4MDA1QworOjEwMjAyMDAwMDIyQjhCQzAwMDAwMDAwMTAyMkI4MDAwMDAwMDAwMDA4QQorOjEwMjAzMDAwMDIyQjgwNDAwMDAwMDAxODAyMkI4MDgwMDAwMDAwMEM2MgorOjEwMjA0MDAwMDIyQjgwQzAwMDAwMDA2NjBDMkI4MzAwMDAwN0ExMjAzQgorOjEwMjA1MDAwMEEyQjgzMDAwMDAwMDEzODBCMkI4MzAwMDAwMDEzODgzQgorOjEwMjA2MDAwMDIyQjgzQzAwMDAwMDFGNDBDMkI4MzQwMDAwMDAxRjQxQworOjEwMjA3MDAwMEEyQjgzNDAwMDAwMDAwMDBCMkI4MzQwMDAwMDAwMDU2QQorOjEwMjA4MDAwMEEyQjgzODAwMDA0QzRCNDBDMkI4MzgwMURDRDY1MDAxMworOjEwMjA5MDAwMEIyQjgzODAwMDRDNEI0MDA2MkEzQzQwMDAwMDAwMDQ4MAorOjEwMjBBMDAwMDQyQTNDNTAwMDAyMDJGODA2MkEzMDAwMDAwMDAwNDhEMgorOjEwMjBCMDAwMDYyQTEwMjAwMDAwMDBDODA2MkExMDAwMDAwMDAwMDJCNgorOjEwMjBDMDAwMDYyQTMxMjgwMDAwMDA4RTAyMkEzMzY4MDAwMDAwMDAzMgorOjEwMjBEMDAwMDQyQTMzNzAwMDAyMDJGQTA0MkEzQTcwMDAwNDAyRkM1NworOjEwMjBFMDAwMDQyQTNEMDAwMDAyMDMwMDA0MkExNTAwMDAwMjAzMDIzNgorOjEwMjBGMDAwMDYyQTE1MDgwMDAwMDEwMDAyMkExOTcwMDAwMDAwMDBERAorOjEwMjEwMDAwMDIyQTE5NzgwMDAwMDAwMDA0MkExOTYwMDAwMjAzMDQ2MgorOjEwMjExMDAwMDYyQTRBQzAwMDAwMDAwMjA2MkE0QjAwMDAwMDAwMDQwNAorOjEwMjEyMDAwMDQyQTFGNDgwMDAyMDMwNjAyMkIwODAwMDAwMDAwMDBEQQorOjEwMjEzMDAwMDQyQjBDMDAwMDEwMDMwODAyMkIwODAwMDEwMDAwMDAxMworOjEwMjE0MDAwMDQyQjBDNDAwMDA4MDMxODAyMkIwODAwMDIwMDAwMDBCQQorOjEwMjE1MDAwMDQyQjBDNjAwMDA4MDMyMDA2MkEzQTgwMDAwMDAwMTRCQgorOjEwMjE2MDAwMDYyQTNCMjAwMDAwMDAyNDA2MkExNDAwMDAwMDAwMEE3MgorOjEwMjE3MDAwMDYyQTE0NTAwMDAwMDAwNjA2MkEzMzc4MDAwMDAwRDgxMgorOjEwMjE4MDAwMDIyQTNBMzgwMDAwMDAwMDA0MkEzQzU4MDAwMjAzMjhDMgorOjEwMjE5MDAwMDQyQTNDNjgwMDEwMDMyQTA2MkE1MDIwMDAwMDAwMDI4RQorOjEwMjFBMDAwMDYyQTUwMzAwMDAwMDAwMjA2MkE1MDAwMDAwMDAwMDJGQgorOjEwMjFCMDAwMDYyQTUwMTAwMDAwMDAwMjAyMkE1MDQwMDAwMDAwMDBEMQorOjEwMjFDMDAwMDYyQTUwNDgwMDAwMDAwRTAyMkE1MEI4MDAwMDAwMDEwNAorOjEwMjFEMDAwMDQyQTRBQzgwMDAyMDMzQTA2MkE0QjEwMDAwMDAwNDJCMworOjEwMjFFMDAwMDYyQTREMjAwMDAwMDAwNDA2MkEzQUQwMDAwMDAwMTQwMAorOjEwMjFGMDAwMDYyQTNCQjAwMDAwMDAyNDA2MkExNDI4MDAwMDAwMEEyQQorOjEwMjIwMDAwMDYyQTE0NjgwMDAwMDAwNjA2MkEzNkQ4MDAwMDAwRDgwNgorOjEwMjIxMDAwMDIyQTNBM0MwMDAwMDAwMDA0MkEzQzYwMDAwMjAzM0MxMQorOjEwMjIyMDAwMDQyQTNDQTgwMDEwMDMzRTA2MkE1MDI4MDAwMDAwMDJBMQorOjEwMjIzMDAwMDYyQTUwMzgwMDAwMDAwMjA2MkE1MDA4MDAwMDAwMDI1QQorOjEwMjI0MDAwMDYyQTUwMTgwMDAwMDAwMjAyMkE1MDQ0MDAwMDAwMDAzNAorOjEwMjI1MDAwMDYyQTUwODAwMDAwMDAwRTAyMkE1MEJDMDAwMDAwMDEzNworOjEwMjI2MDAwMDQyQTRBRDAwMDAyMDM0RTA2MkE0QzE4MDAwMDAwNDJGRAorOjEwMjI3MDAwMDYyQTREMzAwMDAwMDAwNDAyMTAxMDA4MDAwMDAwMDE4MgorOjEwMjI4MDAwMDIxMDEwMTAwMDAwMDI2NDAyMTAxMDAwMDAwM0QwMDBDMQorOjEwMjI5MDAwMDIxMDEwMDQwMDAwMDAzRDA5MTAxODAwMDIwMDAzNTA1NQorOjEwMjJBMDAwMDkxMDExMDAwMDIwMDU1MDA2MTAxMTgwMDAwMDAwMDJFNgorOjEwMjJCMDAwMDkxMDExODgwMDA2MDU3MDA2MTAxMUEwMDAwMDAwMTgxMgorOjEwMjJDMDAwMDIxMDEwMTAwMDAwMDAwMDA2MTAyNDAwMDAwMDAwRTBDMgorOjEwMjJEMDAwMDIxMDIwMUMwMDAwMDAwMDAyMTAyMDIwMDAwMDAwMDE1RAorOjEwMjJFMDAwMDIxMDIwQzAwMDAwMDAwMTAyMTAyMDA0MDAwMDAwMDFDNAorOjEwMjJGMDAwMDIxMDIwMDgwMDAwMDAwMTA5MTAzQzAwMDAwNTA1NzZDRQorOjEwMjMwMDAwMDkxMDNDMjAwMDA1MDU3QjA5MTAzODAwMDAwNTA1ODBGOAorOjEwMjMxMDAwMDIxMDQwMjgwMDAwMDAxMDAyMTA0MDQ0MDAwMDNGRkY1RgorOjEwMjMyMDAwMDIxMDQwNTgwMDI4MDAwMDAyMTA0MDg0MDA4NDkyNEFBNQorOjEwMjMzMDAwMDIxMDQwNTgwMDAwMDAwMDA2MTA4MDY4MDAwMDAwMDRGMQorOjEwMjM0MDAwMDIxMDgwMDAwMDAwMTA4MDA2MTA4MDI4MDAwMDAwMDJBQgorOjEwMjM1MDAwMDIxMDgwMzgwMDAwMDAxMDAyMTA4MDQwMDAwMEZGRkZEMworOjEwMjM2MDAwMDIxMDgwNDQwMDAwRkZGRjAyMTA4MDUwMDAwMDAwMDBCNworOjEwMjM3MDAwMDIxMDgxMDAwMDAwMDAwMDA2MTA4MTIwMDAwMDAwMDIxMQorOjEwMjM4MDAwMDIxMDgwMDgwMDAwMDJCNTAyMTA4MDEwMDAwMDAwMDA1QQorOjEwMjM5MDAwMDYxMDgyMDAwMDAwMDA0QTAyMTA4MTA4MDAwMUZGRkZDMQorOjEwMjNBMDAwMDYxMDgxNDAwMDAwMDAwMjAyMTA4MDAwMDAwMDFBODAyOAorOjEwMjNCMDAwMDYxMDkwMDAwMDAwMDAyNDA2MTA5MTIwMDAwMDAwNEE0MgorOjEwMjNDMDAwMDYxMDkzNzAwMDAwMDA0QTA2MTA5NUMwMDAwMDAwNEFGNQorOjEwMjNEMDAwMDIxMDgwMDQwMDAwMTA4MDA2MTA4MDMwMDAwMDAwMDIwRgorOjEwMjNFMDAwMDIxMDgwM0MwMDAwMDAxMDAyMTA4MDQ4MDAwMEZGRkYzNworOjEwMjNGMDAwMDIxMDgwNEMwMDAwRkZGRjAyMTA4MDU0MDAwMDAwMDAxQgorOjEwMjQwMDAwMDIxMDgxMDQwMDAwMDAwMDA2MTA4MTI4MDAwMDAwMDI3NAorOjEwMjQxMDAwMDIxMDgwMEMwMDAwMDJCNTAyMTA4MDE0MDAwMDAwMDBDMQorOjEwMjQyMDAwMDYxMDg0MDAwMDAwMDA0QTAyMTA4MTBDMDAwMUZGRkYyQQorOjEwMjQzMDAwMDYxMDgxNDgwMDAwMDAwMjAyMTA4MDA0MDAwMDFBODA4QgorOjEwMjQ0MDAwMDYxMDkwOTAwMDAwMDAyNDA2MTA5MjQ4MDAwMDAwNEFGOAorOjEwMjQ1MDAwMDYxMDk0OTgwMDAwMDA0QTA2MTA5NkU4MDAwMDAwNEExMgorOjEwMjQ2MDAwMDIxMjA0OTAwMEUzODM0MDAyMTIwNTE0MDAwMDNDMTBBNQorOjEwMjQ3MDAwMDIxMjA1MjAwMDAwMDAwMjAyMTIwNDk0RkZGRkZGRkY3OQorOjEwMjQ4MDAwMDIxMjA0OThGRkZGRkZGRjAyMTIwNDlDRkZGRkZGRkZGMAorOjEwMjQ5MDAwMDIxMjA0QTBGRkZGRkZGRjAyMTIwNEE0RkZGRkZGRkZEMAorOjEwMjRBMDAwMDIxMjA0QThGRkZGRkZGRjAyMTIwNEFDRkZGRkZGRkZCMAorOjEwMjRCMDAwMDIxMjA0QjBGRkZGRkZGRjAyMTIwNEI4RkZGRkZGRkY4QworOjEwMjRDMDAwMDIxMjA0QkNGRkZGRkZGRjAyMTIwNEMwRkZGRkZGRkY2OAorOjEwMjREMDAwMDIxMjA0QzRGRkZGRkZGRjAyMTIwNEM4RkZGRkZGRkY0OAorOjEwMjRFMDAwMDIxMjA0Q0NGRkZGRkZGRjAyMTIwNEQwRkZGRkZGRkYyOAorOjEwMjRGMDAwMDIxMjA0RENGRkZGRkZGRjAyMTIwNEUwRkZGRkZGRkZGOAorOjEwMjUwMDAwMDIxMjA0RTRGRkZGRkZGRjAyMTIwNEU4RkZGRkZGRkZENworOjEwMjUxMDAwMDIxMjA0RUNGRkZGRkZGRjAyMTIwNEYwRkZGRkZGRkZCNworOjEwMjUyMDAwMDIxMjA0RjRGRkZGRkZGRjAyMTIwNEY4RkZGRkZGRkY5NworOjEwMjUzMDAwMDIxMjA0RkNGRkZGRkZGRjAyMTIwNTAwRkZGRkZGRkY3NgorOjEwMjU0MDAwMDIxMjA1MDRGRkZGRkZGRjAyMTIwNTA4RkZGRkZGRkY1NQorOjEwMjU1MDAwMDIxMjA1MENGRkZGRkZGRjAyMTIwNTEwRkZGRkZGRkYzNQorOjEwMjU2MDAwMDIxMjA0RDRGRkZGMzMzMDAyMTIwNEQ4RkZGRjMzNDBCRAorOjEwMjU3MDAwMDIxMjA0QjRGMDAwMzAwMDAyMTIwMzkwMDAwMDAwMDhDMAorOjEwMjU4MDAwMDIxMjAzOUMwMDAwMDAwODA2MTIwM0EwMDAwMDAwMDJEMworOjEwMjU5MDAwMDIxMjAzQkMwMDAwMDAwNDAyMTIwM0M0MDAwMDAwMDQ4NQorOjEwMjVBMDAwMDIxMjAzRDAwMDAwMDAwMDAyMTIwM0RDMDAwMDAwMDA1MQorOjEwMjVCMDAwMDIxMjAzNkMwMDAwMDAwMTAyMTIwMzY4MDAwMDAwM0ZEOQorOjEwMjVDMDAwMDIxMjAxQkMwMDAwMDA0MDAyMTIwMUMwMDAwMDE4MDgwNQorOjEwMjVEMDAwMDIxMjAxQzQwMDAwMDgwMzAyMTIwMUM4MDAwMDA4MDMyRgorOjEwMjVFMDAwMDIxMjAxQ0MwMDAwMDA0MDAyMTIwMUQwMDAwMDAwMDNFMgorOjEwMjVGMDAwMDIxMjAxRDQwMDAwMDgwMzAyMTIwMUQ4MDAwMDA4MDNFRgorOjEwMjYwMDAwMDIxMjAxREMwMDAwMDgwMzAyMTIwMUUwMDAwMTAwMDNENQorOjEwMjYxMDAwMDIxMjAxRTQwMDAwMDgwMzAyMTIwMUU4MDAwMDA4MDNBRQorOjEwMjYyMDAwMDIxMjAxRUMwMDAwMDAwMzAyMTIwMUYwMDAwMDAwMDM5RQorOjEwMjYzMDAwMDIxMjAxRjQwMDAwMDAwMzAyMTIwMUY4MDAwMDAwMDM3RQorOjEwMjY0MDAwMDIxMjAxRkMwMDAwMDAwMzAyMTIwMjAwMDAwMDAwMDM1RAorOjEwMjY1MDAwMDIxMjAyMDQwMDAwMDAwMzAyMTIwMjA4MDAwMDAwMDMzQworOjEwMjY2MDAwMDIxMjAyMEMwMDAwMDAwMzAyMTIwMjEwMDAwMDAwMDMxQworOjEwMjY3MDAwMDIxMjAyMTQwMDAwMDAwMzAyMTIwMjE4MDAwMDAwMDNGQworOjEwMjY4MDAwMDIxMjAyMUMwMDAwMDAwMzAyMTIwMjIwMDAwMDAwMDNEQworOjEwMjY5MDAwMDIxMjAyMjQwMDAwMDAwMzAyMTIwMjI4MDAwMDI0MDM5OAorOjEwMjZBMDAwMDIxMjAyMkMwMDAwMDAyRjAyMTIwMjMwMDAwMDAwMDk2QQorOjEwMjZCMDAwMDIxMjAyMzQwMDAwMDAxOTAyMTIwMjM4MDAwMDAxODRFNAorOjEwMjZDMDAwMDIxMjAyM0MwMDAwMDE4MzAyMTIwMjQwMDAwMDAzMDZENQorOjEwMjZEMDAwMDIxMjAyNDQwMDAwMDAxOTAyMTIwMjQ4MDAwMDAwMDYyMworOjEwMjZFMDAwMDIxMjAyNEMwMDAwMDMwNjAyMTIwMjUwMDAwMDAzMDYxMAorOjEwMjZGMDAwMDIxMjAyNTQwMDAwMDMwNjAyMTIwMjU4MDAwMDBDODY2NworOjEwMjcwMDAwMDIxMjAyNUMwMDAwMDMwNjAyMTIwMjYwMDAwMDAzMDZDRgorOjEwMjcxMDAwMDIxMjAyNjQwMDAwMDAwNjAyMTIwMjY4MDAwMDAwMDZCNQorOjEwMjcyMDAwMDIxMjAyNkMwMDAwMDAwNjAyMTIwMjcwMDAwMDAwMDY5NQorOjEwMjczMDAwMDIxMjAyNzQwMDAwMDAwNjAyMTIwMjc4MDAwMDAwMDY3NQorOjEwMjc0MDAwMDIxMjAyN0MwMDAwMDAwNjAyMTIwMjgwMDAwMDAwMDY1NQorOjEwMjc1MDAwMDIxMjAyODQwMDAwMDAwNjAyMTIwMjg4MDAwMDAwMDYzNQorOjEwMjc2MDAwMDIxMjAyOEMwMDAwMDAwNjAyMTIwMjkwMDAwMDAwMDYxNQorOjEwMjc3MDAwMDIxMjAyOTQwMDAwMDAwNjAyMTIwMjk4MDAwMDAwMDZGNQorOjEwMjc4MDAwMDIxMjAyOUMwMDAwMDAwNjAyMTIwMkEwMDAwMDAzMDZEMgorOjEwMjc5MDAwMDIxMjAyQTQwMDAwMDAxMzAyMTIwMkE4MDAwMDAwMDZBOAorOjEwMjdBMDAwMDIxMjAyQjAwMDAwMTAwNDAyMTIwMkI0MDAwMDEwMDQ3MQorOjEwMjdCMDAwMDIxMjAzMjQwMDEwNjQ0MDAyMTIwMzI4MDAxMDY0NDAzNworOjEwMjdDMDAwMDIxMjAxQjAwMDAwMDAwMTA2MDBBMDAwMDAwMDAwMTY4NworOjEwMjdEMDAwMDIwMEEwNkNCRjVDMDAwMDAyMDBBMDcwRkZGNTFGRUZCQworOjEwMjdFMDAwMDIwMEEwNzQwMDAwRkZGRjAyMDBBMDc4NTAwMDAzRTA4OAorOjEwMjdGMDAwMDIwMEEwN0MwMDAwMDAwMDAyMDBBMDgwMDAwMEEwMDBGOQorOjEwMjgwMDAwMDYwMEEwODQwMDAwMDAwNTAyMDBBMDk4MEZFMDAwMDA3MAorOjEwMjgxMDAwMDYwMEEwOUMwMDAwMDAxNDAyMDBBMEVDNTU1NDAwMDAyQgorOjEwMjgyMDAwMDIwMEEwRjA1NTU1NTU1NTAyMDBBMEY0MDAwMDU1NTU4MgorOjEwMjgzMDAwMDIwMEEwRjgwMDAwMDAwMDAyMDBBMEZDNTU1NDAwMDBCNworOjEwMjg0MDAwMDIwMEExMDA1NTU1NTU1NTAyMDBBMTA0MDAwMDU1NTU0MAorOjEwMjg1MDAwMDIwMEExMDgwMDAwMDAwMDAyMDBBMjJDMDAwMDAwMDBGRAorOjEwMjg2MDAwMDYwMEEyMzAwMDAwMDAwMzAyMDBBMDYwMDAwMDAwMDc4NAorOjEwMjg3MDAwMDIwMEExMENCRjVDMDAwMDAyMDBBMTEwRkZGNTFGRUZEOQorOjEwMjg4MDAwMDIwMEExMTQwMDAwRkZGRjAyMDBBMTE4NTAwMDAzRTBBNQorOjEwMjg5MDAwMDIwMEExMUMwMDAwMDAwMDAyMDBBMTIwMDAwMEEwMDAxNgorOjEwMjhBMDAwMDYwMEExMjQwMDAwMDAwNTAyMDBBMTM4MEZFMDAwMDA4RQorOjEwMjhCMDAwMDYwMEExM0MwMDAwMDAxNDAyMDBBMThDNTU1NDAwMDA0OQorOjEwMjhDMDAwMDIwMEExOTA1NTU1NTU1NTAyMDBBMTk0MDAwMDU1NTVBMAorOjEwMjhEMDAwMDIwMEExOTgwMDAwMDAwMDAyMDBBMTlDNTU1NDAwMDBENQorOjEwMjhFMDAwMDIwMEExQTA1NTU1NTU1NTAyMDBBMUE0MDAwMDU1NTU2MAorOjEwMjhGMDAwMDIwMEExQTgwMDAwMDAwMDAyMDBBMjNDMDAwMDAwMDBBRAorOjEwMjkwMDAwMDYwMEEyNDAwMDAwMDAwMzAyMDBBMDY0MDAwMDAwMDdDRgorOjEwMjkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFMDAwMDAwMDA4OQorOjEwMjkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwMjkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwMjk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwMjk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwMjk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwMjk3MDAwMDAyRTAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwMjk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwMjk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MDAwOEQ1QQorOjEwMjlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwMjlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwMjlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQwMDkyMDA5MjAwOTZDMAorOjEwMjlEMDAwMDA5NjAwOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwMjlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwMjlGMDAwMDAwMDAwMDAwMDlBMDBEQjAwREIwMEU5MDBFOTAwRjdCRQorOjEwMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwMkExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwMkEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwMkEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwMkE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwMkE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwMkE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMkE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwMkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwMkE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwMkFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwMkFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwMkFEMDAwMDBGNzAwRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwMkFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwMkFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwMkIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUwMTAzMDEwMzAxMEU5MAorOjEwMkIzMDAwMDEwRTAxMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwMkI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwMkI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwMkI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwMkI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMkI4MDAwMDExOTAxMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwMkI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwMkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExQTAxNTJCNworOjEwMkJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMkJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAxNTIwMTc2MDAwMDAwMDAyQgorOjEwMkJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwMkJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwMkMwMDAwMDAwMDAwMDAwMTc2MDFCNTAwMDAwMDAwMDAwMDAwMDA5NworOjEwMkMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwMkMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwMkMzMDAwMDFCNTAxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMkM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMkM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGMDAyMzU0QworOjEwMkM2MDAwMDIzNTAyMzgwMjM4MDIzQjAwMDAwMDAwMDAwMDAwMDA3QworOjEwMkM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwMkM4MDAwMDAwMDAwMDAwMDAwMDAwMDAyM0IwMjc2MDI3NjAyODA5NQorOjEwMkM5MDAwMDI4MDAyOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwMkNCMDAwMDAwMDAwMDAwMjhBMDI4QjAwMDAwMDAwMDAwMDAwMDBGQgorOjEwMkNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMkNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwMkNFMDAwMDI4QjAyOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwMkNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5RDAyQjI3MAorOjEwMkQxMDAwMDJCMjAyQjUwMkI1MDJCODAwMDAwMDAwMDAwMDAwMDBENworOjEwMkQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwMkQzMDAwMDAwMDAwMDAwMDAwMDAwMDAyQjgwMkU2MDAwMDAwMDBGMQorOjEwMkQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwMkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwMkQ2MDAwMDAwMDAwMDAwMkU2MDM2RDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwMkQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwMkQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwMkQ5MDAwMDM2RDAzNzQwMzc0MDM3ODAzNzgwMzdDMDAwMDAwMDA2MAorOjEwMkRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwMkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3QzAzQkJENgorOjEwMkRDMDAwMDNCQjAzQzMwM0MzMDNDQjAwMDAwMDAwMDAwMDAwMDBFQgorOjEwMkREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAzQ0IwNDFGMDQxRjA0MzE5QQorOjEwMkRGMDAwMDQzMTA0NDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwMkUxMDAwMDAwMDAwMDAwNDQzMDQ0RDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwMkUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwMkUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwMkU0MDAwMDQ0RDA0NTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwMkU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwMkU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1MzA0NTZCMQorOjEwMkU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwMkU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwMkU5MDAwMDAwMDAwMDAwMDAwMDAwMDA0NTYwNDVCMDAwMDAwMDA3OQorOjEwMkVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwMkVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwMkVDMDAwMDAwMDAwMDAwNDVCMDQ1QzA0NUMwNDZFMDQ2RTA0ODA3QgorOjEwMkVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwMkVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMkVGMDAwMDQ4MDA0RUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwMkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFRDA0RUVDRQorOjEwMkYyMDAwMDRFRTA1MDIwNTAyMDUxNjAwMDAwMDAwMDAwMDAwMDA4NgorOjEwMkYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwMkY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwMkY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwMkY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwMkY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwMkY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwMkY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwMkZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMjA0QzA1QQorOjEwMkZCMDAwMDAwMzA5ODAwMDA0MEU0MDAwMDUxMzAwMDAwNjE3QzAzRQorOjEwMkZDMDAwMDAwNzFDODAwMDA4MjE0MDAwMDkyNjAwMDAwQTJBQzBEMgorOjEwMkZEMDAwMDAwQjJGODAwMDBDMzQ0MDAwMEQzOTAwMDAwRTNEQzA2NgorOjEwMkZFMDAwMDAwRjQyODAwMDEwNDc0MDAwMTE0QzAwMDAxMjUwQzBGQQorOjEwMkZGMDAwMDAxMzU1ODAwMDE0NUE0MDAwMTU1RjAwMDAxNjYzQzA4RQorOjEwMzAwMDAwMDAxNzY4ODAwMDE4NkQ0MDAwMTk3MjAwMDAxQTc2QzAyMQorOjEwMzAxMDAwMDAxQjdCODAwMDFDODA0MDAwMUQ4NTAwMDAxRTg5QzBCNQorOjEwMzAyMDAwMDAxRjhFODAwMDIwOTM0MDAwMDAyMDAwMDAwMDQwMDAyMAorOjEwMzAzMDAwMDAwMDYwMDAwMDAwODAwMDAwMDBBMDAwMDAwMEMwMDA1MAorOjEwMzA0MDAwMDAwMEUwMDAwMDAxMDAwMDAwMDEyMDAwMDAwMTQwMDAzRAorOjEwMzA1MDAwMDAwMTYwMDAwMDAxODAwMDAwMDFBMDAwMDAwMUMwMDAyQworOjEwMzA2MDAwMDAwMUUwMDAwMDAyMDAwMDAwMDIyMDAwMDAwMjQwMDAxOQorOjEwMzA3MDAwMDAwMjYwMDAwMDAyODAwMDAwMDJBMDAwMDAwMkMwMDAwOAorOjEwMzA4MDAwMDAwMkUwMDAwMDAzMDAwMDAwMDMyMDAwMDAwMzQwMDBGNQorOjEwMzA5MDAwMDAwMzYwMDAwMDAzODAwMDAwMDNBMDAwMDAwM0MwMDBFNAorOjEwMzBBMDAwMDAwM0UwMDAwMDA0MDAwMDAwMDQyMDAwMDAwNDQwMDBEMQorOjEwMzBCMDAwMDAwNDYwMDAwMDA0ODAwMDAwMDRBMDAwMDAwNEMwMDBDMAorOjEwMzBDMDAwMDAwNEUwMDAwMDA1MDAwMDAwMDUyMDAwMDAwNTQwMDBBRAorOjEwMzBEMDAwMDAwNTYwMDAwMDA1ODAwMDAwMDVBMDAwMDAwNUMwMDA5QworOjEwMzBFMDAwMDAwNUUwMDAwMDA2MDAwMDAwMDYyMDAwMDAwNjQwMDA4OQorOjEwMzBGMDAwMDAwNjYwMDAwMDA2ODAwMDAwMDZBMDAwMDAwNkMwMDA3OAorOjEwMzEwMDAwMDAwNkUwMDAwMDA3MDAwMDAwMDcyMDAwMDAwNzQwMDA2NAorOjEwMzExMDAwMDAwNzYwMDAwMDA3ODAwMDAwMDdBMDAwMDAwN0MwMDA1MworOjEwMzEyMDAwMDAwN0UwMDAwMDA4MDAwMDAwMDgyMDAwMDAwODQwMDA0MAorOjEwMzEzMDAwMDAwODYwMDAwMDA4ODAwMDAwMDhBMDAwMDAwOEMwMDAyRgorOjEwMzE0MDAwMDAwOEUwMDAwMDA5MDAwMDAwMDkyMDAwMDAwOTQwMDAxQworOjEwMzE1MDAwMDAwOTYwMDAwMDA5ODAwMDAwMDlBMDAwMDAwOUMwMDAwQgorOjEwMzE2MDAwMDAwOUUwMDAwMDBBMDAwMDAwMEEyMDAwMDAwQTQwMDBGOAorOjEwMzE3MDAwMDAwQTYwMDAwMDBBODAwMDAwMEFBMDAwMDAwQUMwMDBFNworOjEwMzE4MDAwMDAwQUUwMDAwMDBCMDAwMDAwMEIyMDAwMDAwQjQwMDBENAorOjEwMzE5MDAwMDAwQjYwMDAwMDBCODAwMDAwMEJBMDAwMDAwQkMwMDBDMworOjEwMzFBMDAwMDAwQkUwMDAwMDBDMDAwMDAwMEMyMDAwMDAwQzQwMDBCMAorOjEwMzFCMDAwMDAwQzYwMDAwMDBDODAwMDAwMENBMDAwMDAwQ0MwMDA5RgorOjEwMzFDMDAwMDAwQ0UwMDAwMDBEMDAwMDAwMEQyMDAwMDAwRDQwMDA4QworOjEwMzFEMDAwMDAwRDYwMDAwMDBEODAwMDAwMERBMDAwMDAwREMwMDA3QgorOjEwMzFFMDAwMDAwREUwMDAwMDBFMDAwMDAwMEUyMDAwMDAwRTQwMDA2OAorOjEwMzFGMDAwMDAwRTYwMDAwMDBFODAwMDAwMEVBMDAwMDAwRUMwMDA1NworOjEwMzIwMDAwMDAwRUUwMDAwMDBGMDAwMDAwMEYyMDAwMDAwRjQwMDA0MworOjEwMzIxMDAwMDAwRjYwMDAwMDBGODAwMDAwMEZBMDAwMDAwRkMwMDAzMgorOjEwMzIyMDAwMDAwRkUwMDAwMDEwMDAwMDAwMTAyMDAwMDAxMDQwMDAxRgorOjEwMzIzMDAwMDAxMDYwMDAwMDEwODAwMDAwMTBBMDAwMDAxMEMwMDAwRQorOjEwMzI0MDAwMDAxMEUwMDAwMDExMDAwMDAwMTEyMDAwMDAxMTQwMDBGQgorOjEwMzI1MDAwMDAxMTYwMDAwMDExODAwMDAwMTFBMDAwMDAxMUMwMDBFQQorOjEwMzI2MDAwMDAxMUUwMDAwMDEyMDAwMDAwMTIyMDAwMDAxMjQwMDBENworOjEwMzI3MDAwMDAxMjYwMDAwMDEyODAwMDAwMTJBMDAwMDAxMkMwMDBDNgorOjEwMzI4MDAwMDAxMkUwMDAwMDEzMDAwMDAwMTMyMDAwMDAxMzQwMDBCMworOjEwMzI5MDAwMDAxMzYwMDAwMDEzODAwMDAwMTNBMDAwMDAxM0MwMDBBMgorOjEwMzJBMDAwMDAxM0UwMDAwMDE0MDAwMDAwMTQyMDAwMDAxNDQwMDA4RgorOjEwMzJCMDAwMDAxNDYwMDAwMDE0ODAwMDAwMTRBMDAwMDAxNEMwMDA3RQorOjEwMzJDMDAwMDAxNEUwMDAwMDE1MDAwMDAwMTUyMDAwMDAxNTQwMDA2QgorOjEwMzJEMDAwMDAxNTYwMDAwMDE1ODAwMDAwMTVBMDAwMDAxNUMwMDA1QQorOjEwMzJFMDAwMDAxNUUwMDAwMDE2MDAwMDAwMTYyMDAwMDAxNjQwMDA0NworOjEwMzJGMDAwMDAxNjYwMDAwMDE2ODAwMDAwMTZBMDAwMDAxNkMwMDAzNgorOjEwMzMwMDAwMDAxNkUwMDAwMDE3MDAwMDAwMTcyMDAwMDAxNzQwMDAyMgorOjEwMzMxMDAwMDAxNzYwMDAwMDE3ODAwMDAwMTdBMDAwMDAxN0MwMDAxMQorOjEwMzMyMDAwMDAxN0UwMDAwMDE4MDAwMDAwMTgyMDAwMDAxODQwMDBGRQorOjEwMzMzMDAwMDAxODYwMDAwMDE4ODAwMDAwMThBMDAwMDAxOEMwMDBFRAorOjEwMzM0MDAwMDAxOEUwMDAwMDE5MDAwMDAwMTkyMDAwMDAxOTQwMDBEQQorOjEwMzM1MDAwMDAxOTYwMDAwMDE5ODAwMDAwMTlBMDAwMDAxOUMwMDBDOQorOjEwMzM2MDAwMDAxOUUwMDAwMDFBMDAwMDAwMUEyMDAwMDAxQTQwMDBCNgorOjEwMzM3MDAwMDAxQTYwMDAwMDFBODAwMDAwMUFBMDAwMDAxQUMwMDBBNQorOjEwMzM4MDAwMDAxQUUwMDAwMDFCMDAwMDAwMUIyMDAwMDAxQjQwMDA5MgorOjEwMzM5MDAwMDAxQjYwMDAwMDFCODAwMDAwMUJBMDAwMDAxQkMwMDA4MQorOjEwMzNBMDAwMDAxQkUwMDAwMDFDMDAwMDAwMUMyMDAwMDAxQzQwMDA2RQorOjEwMzNCMDAwMDAxQzYwMDAwMDFDODAwMDAwMUNBMDAwMDAxQ0MwMDA1RAorOjEwMzNDMDAwMDAxQ0UwMDAwMDFEMDAwMDAwMUQyMDAwMDAxRDQwMDA0QQorOjEwMzNEMDAwMDAxRDYwMDAwMDFEODAwMDAwMURBMDAwMDAxREMwMDAzOQorOjEwMzNFMDAwMDAxREUwMDAwMDFFMDAwMDAwMUUyMDAwMDAxRTQwMDAyNgorOjEwMzNGMDAwMDAxRTYwMDAwMDFFODAwMDAwMUVBMDAwMDAxRUMwMDAxNQorOjEwMzQwMDAwMDAxRUUwMDAwMDFGMDAwMDAwMUYyMDAwMDAxRjQwMDAwMQorOjEwMzQxMDAwMDAxRjYwMDAwMDFGODAwMDAwMUZBMDAwMDAxRkMwMDBGMAorOjEwMzQyMDAwMDAxRkUwMDAwMDIwMDAwMDAwMjAyMDAwMDAyMDQwMDBERAorOjEwMzQzMDAwMDAyMDYwMDAwMDIwODAwMDAwMjBBMDAwMDAyMEMwMDBDQworOjEwMzQ0MDAwMDAyMEUwMDAwMDIxMDAwMDAwMjEyMDAwMDAyMTQwMDBCOQorOjEwMzQ1MDAwMDAyMTYwMDAwMDIxODAwMDAwMjFBMDAwMDAyMUMwMDBBOAorOjEwMzQ2MDAwMDAyMUUwMDAwMDIyMDAwMDAwMjIyMDAwMDAyMjQwMDA5NQorOjEwMzQ3MDAwMDAyMjYwMDAwMDIyODAwMDAwMjJBMDAwMDAyMkMwMDA4NAorOjEwMzQ4MDAwMDAyMkUwMDAwMDIzMDAwMDAwMjMyMDAwMDAyMzQwMDA3MQorOjEwMzQ5MDAwMDAyMzYwMDAwMDIzODAwMDAwMjNBMDAwMDAyM0MwMDA2MAorOjEwMzRBMDAwMDAyM0UwMDAwMDI0MDAwMDAwMjQyMDAwMDAyNDQwMDA0RAorOjEwMzRCMDAwMDAyNDYwMDAwMDI0ODAwMDAwMjRBMDAwMDAyNEMwMDAzQworOjEwMzRDMDAwMDAyNEUwMDAwMDI1MDAwMDAwMjUyMDAwMDAyNTQwMDAyOQorOjEwMzREMDAwMDAyNTYwMDAwMDI1ODAwMDAwMjVBMDAwMDAyNUMwMDAxOAorOjEwMzRFMDAwMDAyNUUwMDAwMDI2MDAwMDAwMjYyMDAwMDAyNjQwMDAwNQorOjEwMzRGMDAwMDAyNjYwMDAwMDI2ODAwMDAwMjZBMDAwMDAyNkMwMDBGNAorOjEwMzUwMDAwMDAyNkUwMDAwMDI3MDAwMDAwMjcyMDAwMDAyNzQwMDBFMAorOjEwMzUxMDAwMDAyNzYwMDAwMDI3ODAwMDAwMjdBMDAwMDAyN0MwMDBDRgorOjEwMzUyMDAwMDAyN0UwMDAwMDI4MDAwMDAwMjgyMDAwMDAyODQwMDBCQworOjEwMzUzMDAwMDAyODYwMDAwMDI4ODAwMDAwMjhBMDAwMDAyOEMwMDBBQgorOjEwMzU0MDAwMDAyOEUwMDAwMDI5MDAwMDAwMjkyMDAwMDAyOTQwMDA5OAorOjEwMzU1MDAwMDAyOTYwMDAwMDI5ODAwMDAwMjlBMDAwMDAyOUMwMDA4NworOjEwMzU2MDAwMDAyOUUwMDAwMDJBMDAwMDAwMkEyMDAwMDAyQTQwMDA3NAorOjEwMzU3MDAwMDAyQTYwMDAwMDJBODAwMDAwMkFBMDAwMDAyQUMwMDA2MworOjEwMzU4MDAwMDAyQUUwMDAwMDJCMDAwMDAwMkIyMDAwMDAyQjQwMDA1MAorOjEwMzU5MDAwMDAyQjYwMDAwMDJCODAwMDAwMkJBMDAwMDAyQkMwMDAzRgorOjEwMzVBMDAwMDAyQkUwMDAwMDJDMDAwMDAwMkMyMDAwMDAyQzQwMDAyQworOjEwMzVCMDAwMDAyQzYwMDAwMDJDODAwMDAwMkNBMDAwMDAyQ0MwMDAxQgorOjEwMzVDMDAwMDAyQ0UwMDAwMDJEMDAwMDAwMkQyMDAwMDAyRDQwMDAwOAorOjEwMzVEMDAwMDAyRDYwMDAwMDJEODAwMDAwMkRBMDAwMDAyREMwMDBGNworOjEwMzVFMDAwMDAyREUwMDAwMDJFMDAwMDAwMkUyMDAwMDAyRTQwMDBFNAorOjEwMzVGMDAwMDAyRTYwMDAwMDJFODAwMDAwMkVBMDAwMDAyRUMwMDBEMworOjEwMzYwMDAwMDAyRUUwMDAwMDJGMDAwMDAwMkYyMDAwMDAyRjQwMDBCRgorOjEwMzYxMDAwMDAyRjYwMDAwMDJGODAwMDAwMkZBMDAwMDAyRkMwMDBBRQorOjEwMzYyMDAwMDAyRkUwMDAwMDMwMDAwMDAwMzAyMDAwMDAzMDQwMDA5QgorOjEwMzYzMDAwMDAzMDYwMDAwMDMwODAwMDAwMzBBMDAwMDAzMEMwMDA4QQorOjEwMzY0MDAwMDAzMEUwMDAwMDMxMDAwMDAwMzEyMDAwMDAzMTQwMDA3NworOjEwMzY1MDAwMDAzMTYwMDAwMDMxODAwMDAwMzFBMDAwMDAzMUMwMDA2NgorOjEwMzY2MDAwMDAzMUUwMDAwMDMyMDAwMDAwMzIyMDAwMDAzMjQwMDA1MworOjEwMzY3MDAwMDAzMjYwMDAwMDMyODAwMDAwMzJBMDAwMDAzMkMwMDA0MgorOjEwMzY4MDAwMDAzMkUwMDAwMDMzMDAwMDAwMzMyMDAwMDAzMzQwMDAyRgorOjEwMzY5MDAwMDAzMzYwMDAwMDMzODAwMDAwMzNBMDAwMDAzM0MwMDAxRQorOjEwMzZBMDAwMDAzM0UwMDAwMDM0MDAwMDAwMzQyMDAwMDAzNDQwMDAwQgorOjEwMzZCMDAwMDAzNDYwMDAwMDM0ODAwMDAwMzRBMDAwMDAzNEMwMDBGQQorOjEwMzZDMDAwMDAzNEUwMDAwMDM1MDAwMDAwMzUyMDAwMDAzNTQwMDBFNworOjEwMzZEMDAwMDAzNTYwMDAwMDM1ODAwMDAwMzVBMDAwMDAzNUMwMDBENgorOjEwMzZFMDAwMDAzNUUwMDAwMDM2MDAwMDAwMzYyMDAwMDAzNjQwMDBDMworOjEwMzZGMDAwMDAzNjYwMDAwMDM2ODAwMDAwMzZBMDAwMDAzNkMwMDBCMgorOjEwMzcwMDAwMDAzNkUwMDAwMDM3MDAwMDAwMzcyMDAwMDAzNzQwMDA5RQorOjEwMzcxMDAwMDAzNzYwMDAwMDM3ODAwMDAwMzdBMDAwMDAzN0MwMDA4RAorOjEwMzcyMDAwMDAzN0UwMDAwMDM4MDAwMDAwMzgyMDAwMDAzODQwMDA3QQorOjEwMzczMDAwMDAzODYwMDAwMDM4ODAwMDAwMzhBMDAwMDAzOEMwMDA2OQorOjEwMzc0MDAwMDAzOEUwMDAwMDM5MDAwMDAwMzkyMDAwMDAzOTQwMDA1NgorOjEwMzc1MDAwMDAzOTYwMDAwMDM5ODAwMDAwMzlBMDAwMDAzOUMwMDA0NQorOjEwMzc2MDAwMDAzOUUwMDAwMDNBMDAwMDAwM0EyMDAwMDAzQTQwMDAzMgorOjEwMzc3MDAwMDAzQTYwMDAwMDNBODAwMDAwM0FBMDAwMDAzQUMwMDAyMQorOjEwMzc4MDAwMDAzQUUwMDAwMDNCMDAwMDAwM0IyMDAwMDAzQjQwMDAwRQorOjEwMzc5MDAwMDAzQjYwMDAwMDNCODAwMDAwM0JBMDAwMDAzQkMwMDBGRAorOjEwMzdBMDAwMDAzQkUwMDAwMDNDMDAwMDAwM0MyMDAwMDAzQzQwMDBFQQorOjEwMzdCMDAwMDAzQzYwMDAwMDNDODAwMDAwM0NBMDAwMDAzQ0MwMDBEOQorOjEwMzdDMDAwMDAzQ0UwMDAwMDNEMDAwMDAwM0QyMDAwMDAzRDQwMDBDNgorOjEwMzdEMDAwMDAzRDYwMDAwMDNEODAwMDAwM0RBMDAwMDAzREMwMDBCNQorOjEwMzdFMDAwMDAzREUwMDAwMDNFMDAwMDAwM0UyMDAwMDAzRTQwMDBBMgorOjEwMzdGMDAwMDAzRTYwMDAwMDNFODAwMDAwM0VBMDAwMDAzRUMwMDA5MQorOjEwMzgwMDAwMDAzRUUwMDAwMDNGMDAwMDAwM0YyMDAwMDAzRjQwMDA3RAorOjEwMzgxMDAwMDAzRjYwMDAwMDNGODAwMDAwM0ZBMDAwMDAzRkMwMDA2QworOjEwMzgyMDAwMDAzRkUwMDAwMDNGRTAwMTAwMDAwMDAwMDAwMDAxRkY1OQorOjEwMzgzMDAwMDAwMDAyMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAyNkYyNworOjEwMzg0MDAwMDAwMDE1MDAwMDAwMDAwMTAwMDAwMDAzMDBCRUJDMjBDNQorOjEwMzg1MDAwMDAwMDAwMDMwMEJFQkMyMDAwMDAwMDAxRkZGRkZGRkZDRQorOjEwMzg2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY2OAorOjEwMzg3MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY1OAorOjEwMzg4MDAwMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkY0MAorOjEwMzg5MDAwMDAwMDAwMDMwMEJFQkMyMEZGRkZGRkZGMDAwMDAwMDA4RgorOjEwMzhBMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDMxRAorOjEwMzhCMDAwMDBCRUJDMjAwMDAwMjAwMDAwMDA0MEMwMDAwMDYxODA2RAorOjEwMzhDMDAwMDAwMDgyNDAwMDAwQTMwMDAwMDBDM0MwMDAwMEU0ODBBQworOjEwMzhEMDAwMDAwMTA1NDAwMDAxMjYwMDAwMDE0NkMwMDAwMTY3ODA4QworOjEwMzhFMDAwMDAwMTg4NDAwMDAxQTkwMDAwMDFDOUMwMDAwMUVBODA3MAorOjEwMzhGMDAwMDAwMjBCNDAwMDAyMkMwMDAwMDI0Q0MwMDAwMjZEODA1MAorOjEwMzkwMDAwMDAwMjhFNDAwMDAyQUYwMDAwMDJDRkMwMDAwMkYwODAzMworOjEwMzkxMDAwMDAwMzExNDAwMDAzMzIwMDAwMDM1MkMwMDAwMzczODAxMworOjEwMzkyMDAwMDAwMzk0NDAwMDAzQjUwMDAwMDNENUMwMDAwM0Y2ODBGNworOjEwMzkzMDAwMDAwNDE3NDAwMDA0MzgwMDAwMDQ1OEMwMDAwNDc5ODBENworOjEwMzk0MDAwMDAwNDlBNDAwMDAwODAwMDAwMDEwMzgwMDAwMTg3MDAwRAorOjEwMzk1MDAwMDAwMjBBODAwMDAyOEUwMDAwMDMxMTgwMDAwMzk1MDAxRgorOjEwMzk2MDAwMDAwNDE4ODAwMDA0OUMwMDAwMDUxRjgwMDAwNUEzMDBDRgorOjEwMzk3MDAwMDAwNjI2ODAwMDA2QUEwMDAwMDcyRDgwMDAwN0IxMDA3RgorOjEwMzk4MDAwMDAwODM0ODAwMDA4QjgwMDAwMDkzQjgwMDAwOUJGMDAyRgorOjEwMzk5MDAwMDAwQTQyODAwMDBBQzYwMDAwMEI0OTgwMDAwQkNEMDBERgorOjEwMzlBMDAwMDAwQzUwODAwMDBDRDQwMDAwMEQ1NzgwMDAwRERCMDA4RgorOjEwMzlCMDAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwMTc0MDAwMDE1MDA4RgorOjEwMzlDMDAwMDAwMDE5MDAwMDAwMDAwMEZGRkZGRkZGNDAwMDAwMDBBMgorOjEwMzlEMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFNworOjEwMzlFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBENworOjEwMzlGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBDNworOjEwM0EwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBCNgorOjEwM0ExMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBBNgorOjEwM0EyMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA5NgorOjEwM0EzMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA4NgorOjEwM0E0MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDdGRjgzRgorOjEwM0E1MDAwMDAwMDdGRjgwMDAwMDUwOTAwMDAzNTAwRkZGRkZGRkZCMAorOjEwM0E2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY2NgorOjEwM0E3MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNDAwMDAwMDAxMgorOjEwM0E4MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAzNgorOjEwM0E5MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAyNgorOjEwM0FBMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAxNgorOjEwM0FCMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAwNgorOjEwM0FDMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBGNgorOjEwM0FEMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFNgorOjEwM0FFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBENgorOjEwM0FGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDEwMDBGNgorOjEwM0IwMDAwMDAwMDIwODAwMDAwMzEwMDAwMDA0MTgwMDAwMDUyMDBEMQorOjEwM0IxMDAwMDAwMDYyODAwMDAwNzMwMDAwMDA4MzgwMDAwMDk0MDBCOQorOjEwM0IyMDAwMDAwMEE0ODAwMDAwQjUwMDAwMDBDNTgwMDAwMEQ2MDBBMQorOjEwM0IzMDAwMDAwMEU2ODAwMDAwRjcwMDAwMDEwNzgwMDAwMTE4MDA4NworOjEwM0I0MDAwMDAwMTI4ODAwMDAxMzkwMDAwMDE0OTgwMDAwMTVBMDA2RAorOjEwM0I1MDAwMDAwMTZBODAwMDAxN0IwMDAwMDE4QjgwMDAwMTlDMDA1NQorOjEwM0I2MDAwMDAwMUFDODAwMDAxQkQwMDAwMDFDRDgwMDAwMURFMDAzRAorOjEwM0I3MDAwMDAwMUVFODAwMDAxRkYwMDAwMDA3RkY4MDAwMDdGRjhFOAorOjEwM0I4MDAwMDAwMDA0NDgwMDAwMTUwMDEwMDAwMDAwMDAwMDI4QURFRgorOjEwM0I5MDAwMDAwMDAwMDAwMDAxMDAwMTAwMTUwMDA1Q0NDQ0NDQzFFNAorOjEwM0JBMDAwRkZGRkZGRkZGRkZGRkZGRjcwNTgxMDNDMDAwMDAwMDAwOQorOjEwM0JCMDAwMDAwMDAwMDAwMDAwMDAwMUNDQ0MwMjAxQ0NDQ0NDQ0MzOQorOjEwM0JDMDAwMDAwMDAwMDBGRkZGRkZGRjQwMDAwMDAwNDAwMDAwMDA3OQorOjEwM0JEMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFNQorOjEwM0JFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBENQorOjEwM0JGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBDNQorOjEwM0MwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBCNAorOjEwM0MxMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBBNAorOjEwM0MyMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA5NAorOjEwM0MzMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA4NAorOjEwM0M0MDAwNDAwMDAwMDA0MDAwMDAwMDAwMEUwMUI3MDExNjAwRDY0MQorOjEwM0M1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2OAorOjEwM0M2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1OAorOjEwM0M3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0OAorOjEwM0M4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzOAorOjEwM0M5MDAwMDAxMDAwMDAwMDAwMDAwMDAwNzIwMUJCMDEyMzAwRjNDRgorOjEwM0NBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxOAorOjEwM0NCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwOAorOjEwM0NDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGOAorOjEwM0NEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFOAorOjEwM0NFMDAwMDAxMDAwMDAwMDAwMDAwMEZGRkZGRkYzMzE4RkZGRkYxNgorOjEwM0NGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwOAorOjEwM0QwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzBFRkZGRkY2OQorOjEwM0QxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFNworOjEwM0QyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZEMworOjEwM0QzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDNworOjEwM0Q0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY2MQorOjEwM0Q1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5OQorOjEwM0Q2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBNAorOjEwM0Q3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4NworOjEwM0Q4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkY5OAorOjEwM0Q5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2NworOjEwM0RBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3MzFFRkZGRkZCMgorOjEwM0RCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM0NworOjEwM0RDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzAyRkZGRkY0NQorOjEwM0REMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyNworOjEwM0RFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzEwRkZGRkYyNgorOjEwM0RGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwNworOjEwM0UwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkY0NworOjEwM0UxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFNgorOjEwM0UyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZEMgorOjEwM0UzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDNgorOjEwM0U0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY2MAorOjEwM0U1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5OAorOjEwM0U2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBMworOjEwM0U3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4NgorOjEwM0U4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkY5NworOjEwM0U5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2NgorOjEwM0VBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3MzBFRkZGRkZCMgorOjEwM0VCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM0NgorOjEwM0VDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzA0RkZGRkYyNAorOjEwM0VEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyNgorOjEwM0VFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzFFRkZGRkY0NQorOjEwM0VGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwNgorOjEwM0YwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkY0NgorOjEwM0YxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFNQorOjEwM0YyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZEMQorOjEwM0YzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDNQorOjEwM0Y0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY1RgorOjEwM0Y1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5NworOjEwM0Y2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBMgorOjEwM0Y3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4NQorOjEwM0Y4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkY5NgorOjEwM0Y5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2NQorOjEwM0ZBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3MDU2RkZGRkZCQworOjEwM0ZCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM3OAorOjEwM0ZDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzEwRkZGRkY2MgorOjEwM0ZEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyNQorOjEwM0ZFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzIwRkZGRkYyMworOjEwM0ZGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwNQorOjEwNDAwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkY0NQorOjEwNDAxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFNAorOjEwNDAyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZEMAorOjEwNDAzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDNAorOjEwNDA0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY1RQorOjEwNDA1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5NgorOjEwNDA2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBMQorOjEwNDA3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4NAorOjEwNDA4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRjhBMDQyRkZGRkYzMQorOjEwNDA5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM5NworOjEwNDBBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3MDVDRkZGRkY1QgorOjEwNDBCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM3NworOjEwNDBDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzEwRkZGRkY2MQorOjEwNDBEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyNAorOjEwNDBFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzAwRkZGRkYyNAorOjEwNDBGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwNAorOjEwNDEwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzAwRkZGRkY0NQorOjEwNDExMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFMworOjEwNDEyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZDRgorOjEwNDEzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDMworOjEwNDE0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY1RAorOjEwNDE1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5NQorOjEwNDE2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBMAorOjEwNDE3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4MworOjEwNDE4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkY5NAorOjEwNDE5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2MworOjEwNDFBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3MDQwRkZGRkYxQgorOjEwNDFCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM3NgorOjEwNDFDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzAwRkZGRkY2MQorOjEwNDFEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyMworOjEwNDFFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NworOjEwNDFGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzNworOjEwNDIwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3NgorOjEwNDIxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxNgorOjEwNDIyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NQorOjEwNDIzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGNgorOjEwNDI0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYzNAorOjEwNDI1MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNENgorOjEwNDI2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYxMgorOjEwNDI3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCNgorOjEwNDI4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFRQorOjEwNDI5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5NgorOjEwNDJBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZDNgorOjEwNDJCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3NgorOjEwNDJDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5NgorOjEwNDJEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1NgorOjEwNDJFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NgorOjEwNDJGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzNgorOjEwNDMwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3NQorOjEwNDMxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxNQorOjEwNDMyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NAorOjEwNDMzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGNQorOjEwNDM0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYzMworOjEwNDM1MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNENQorOjEwNDM2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYxMQorOjEwNDM3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCNQorOjEwNDM4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFRAorOjEwNDM5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5NQorOjEwNDNBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZDNQorOjEwNDNCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3NQorOjEwNDNDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5NQorOjEwNDNEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1NQorOjEwNDNFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NQorOjEwNDNGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzNQorOjEwNDQwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3NAorOjEwNDQxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxNAorOjEwNDQyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1MworOjEwNDQzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGNAorOjEwNDQ0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYzMgorOjEwNDQ1MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNENAorOjEwNDQ2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYxMAorOjEwNDQ3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCNAorOjEwNDQ4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFQworOjEwNDQ5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5NAorOjEwNDRBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZDNAorOjEwNDRCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3NAorOjEwNDRDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5NAorOjEwNDREMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1NAorOjEwNDRFMDAwMDA0MENGM0NDRENEQ0RDRDAwMEMwMDAwMDAwNzAwQzA3QQorOjEwNDRGMDAwMDAwMjgxMzAwMDBCODE1ODAwMDIwMjEwMDAwMTAyMzBERQorOjEwNDUwMDAwMDAwRjAyNDAwMDAxMDMzMDAwMDgwMDAwMDAwODAwODA5NgorOjEwNDUxMDAwMDAwMjgxMDAwMDBCODEyODAwMDIwMUUwMDAwMTAyMDA3RQorOjEwNDUyMDAwMDAwNzAyMTAwMDAyMDI4MDAwMEYwMDAwMDAwODAwRjBFNworOjEwNDUzMDAwMDAwMjgxNzAwMDBCODE5ODAwMDIwMjUwMDAwMTAyNzA5RAorOjEwNDU0MDAwMDAwQjgyODAwMDA4MDMzODAwMTAwMDAwMDAwODAxMDAwMgorOjEwNDU1MDAwMDAwMjgxODAwMDBCODFBODAwMDIwMjYwMDAwMTgyODBCRAorOjEwNDU2MDAwMDAwRTgyOTgwMDA4MDM4MDAwMDI4MDAwMDAwQjgwMjg2MworOjEwNDU3MDAwMDAwMjAwRTAwMDAxMDEwMDAwMDA4MTEwMDAwMDAxMThBRAorOjEwNDU4MDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M2QgorOjEwNDU5MDAwMDAwMDIwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M2QgorOjEwNDVBMDAwQ0NDQ0NDQ0MwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0M1QgorOjEwNDVCMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzAwMDAyMDAwMDAwMDAwMDA3QgorOjEwNDVDMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQjUxQ0ZDMEYwMDM2MAorOjEwNDVEMDAwOEE3QkQ4MTgxODM2NzAyMEY4NDMwMTVGNjQ2MjYwQjg4RgorOjEwNDVFMDAwMENDNDU3ODE1ODgwOTk4MTIxOTg5MTgxMjE4NDkxNzhCOAorOjEwNDVGMDAwRkQ0OUEyMDhGNjJCMjEwNjA2MzE2MTA2ODY2ODQxQTAxNgorOjEwNDYwMDAwQjlDMjA4RjFBMzQwMzU1NjIyMEMwQzdGQTE2MjhENDAzRgorOjEwNDYxMDAwMzY5QjI4NzVEQzNGRDA3ODkzMTRBNkQ4N0EwOTA0N0JBMgorOjEwNDYyMDAwMzMxNjc5NjRCQzA1NEQ5RTRGMTI5NUJGOTU4MEZFODE2RgorOjEwNDYzMDAwQzY4RjE1NTFGOTYyMEExMDNBMUYyQUZFMDQ0RDVFMUNGRQorOjEwNDY0MDAwMkE3RjE5RUFBRkE3OEFEOENEQkQwMjk1MDcwMEM4RTkyRAorOjEwNDY1MDAwNjc0NDYwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwNDY2MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEMEI3ODU0RDU3NworOjEwNDY3MDAwQjVGMDNFNzNDRTlDOTk0OTY2MjYyNzIxNEYxRTYxMTJFNAorOjEwNDY4MDAwMjA4Mjg2MzhCQzAyMjhCRDRFMDg0NEFDNUMwREY4NDIzRQorOjEwNDY5MDAwOEIzQUJDNDNERTUwQjRCNEI1NUYyNjEwMjI0RjZGRjBBNgorOjEwNDZBMDAwNDc0NTJGRDhFMTYxNDU4QjM2NjBBNEQxMDIxRDQwMTBFQgorOjEwNDZCMDAwN0JCREI3QzE1MjhCRDVGQTQ1NTQ1MDBDMjQ3MjhCRDJCNgorOjEwNDZDMDAwNUI3QkZERDc1QTdCRUZDQzM5OTMwOTYwRkZGNkZFRjc5MQorOjEwNDZEMDAwQkZERjFGM0ZCRkMzM0U2NzNGRDY1RUFGQkRENkRBNkJCRAorOjEwNDZFMDAwRUZCMUIzMzRBNjBGNjRFQzZCRkNCQjgxQjExQTFCNjM1MgorOjEwNDZGMDAwRjBBQUZCRjk5NDlEREQ1RkVBNjYyQzZGQTM2RkI5M0JDRQorOjEwNDcwMDAwMTVERUI3RTZFQzRBRjQzMTk2QjU3N0JEMzIxMURFNjdCNworOjEwNDcxMDAwNkQ2QTUyNjZFNzQ3REI4Rjc2QzFDNzMxRjBCRTc1QkQ2MworOjEwNDcyMDAwNTIwNEVGQjNERTZDNTI2NkUxRDM2MTYzNkQ1MDlGNjk1MgorOjEwNDczMDAwQkUyNDg2NEYxNjYwMkM5REIxNDFFMzk4RjgwQkI4QjNBOAorOjEwNDc0MDAwMEExOUVCOEZGRjg0MkVDRTFCODlEMDE5NjMzOTJCNkM4RAorOjEwNDc1MDAwRTE5MDAyRUY4MzY1NTM5OTk3QjE2RDAwNTc1NjBBQjQwMworOjEwNDc2MDAwNTNCRjNBNjBDN0JBQjVEQUM5NzYyNzYzNEVDREE5N0Q4MworOjEwNDc3MDAwOURDQjU4RjYwQzY2NjNGMDFDQjg5NEJGQzdCRkFGRTE4MQorOjEwNDc4MDAwRkY5QzkwQjUzQzg4OTlDQTM5NThGNkE0OUU4MjIxOTkxRAorOjEwNDc5MDAwODc3OUJFNTZFM0MxREJBNTk3MEU4RkNFNTMzRTM3RDU0MgorOjEwNDdBMDAwRjlEMkRENUFDRkY3RjJCOTc4RDEyN0ZBQzNEMEZBNjkzNgorOjEwNDdCMDAwQUMzNzk4QjE3MDRDRkRBQTkwQUVCMTZCRTEwOTA4NjhCNgorOjEwNDdDMDAwQ0VFRkQ5N0UyQTJCMkE0NDNBRENDNzI2RDJCMzQ2RjM1MQorOjEwNDdEMDAwREQ4NTc4QTkzOTZBNjcyMTgwQkJBNkY2NTQwOTk2NTkwOAorOjEwNDdFMDAwQUJDMjg2RTRGNDZDM0Y5Q0Q5ODkxRTQ1NENEMTRFRTFBNgorOjEwNDdGMDAwN0NCRENDOEJGMzUzMkI3RDRGOTQwMDlFRTcyNjA2MjY4MQorOjEwNDgwMDAwNjFCRkVCMTI4M0Y0OTRFRjMzNjc0RkM5MEMwMjNDQzVEMAorOjEwNDgxMDAwMEJGMjQzMENFODdFN0VBM0UyNzc0MEYzRDM0QTU4QjcwRAorOjEwNDgyMDAwMDMzRDJBNkVBRjJEQjgxMUVBRkQ1NjBGREU4Q0VEMkEzRQorOjEwNDgzMDAwNjdCNDFEMjE3QUIwREEzQ0M0NTM5QkNFRjk2NzYwNkIzNAorOjEwNDg0MDAwRDFBNzFBRDAwRDU4MkM5NDk0ODI3NDYxRUNBNDg5MEVDRgorOjEwNDg1MDAwRjg3NzcyQTgyOEFCQkRFM0YxNzJDRkI5RDg4Rjg2QkRDNworOjEwNDg2MDAwODQ2OUJFRjI3RDRFRThFOEEwQzEzMUUzQjE0MjgyODc5RgorOjEwNDg3MDAwMzFFNDcxRDZBRUM0QTNFQkMwNTc4QThFNkEwNUJEOEZGMgorOjEwNDg4MDAwRjdGNzlGNDc4OENCMjFFMDBFRTk1QkU1RDFDM0NCODBFQQorOjEwNDg5MDAwQkVDNTJGREIyMzM3MDAzREFBQjYyODYxMDc5NDZERkIwOAorOjEwNDhBMDAwNUQwMUE0Q0ZCOUVENTAwNkJBNDQzQzNBRDUzRjZCMzgxMAorOjEwNDhCMDAwQTk1Q0UzNjg3QkU0N0EyODc3QkRBQ0IyQUREOEVERDBEMworOjEwNDhDMDAwMDQxQkNBREQyOTAxM0IxQjBENjVDMEM3N0MxNzJGNTY5MQorOjEwNDhEMDAwNkQzOTcwMUZGNjU3RDZFQTYwMkVFOEJGRUE5NTA1QjcyNgorOjEwNDhFMDAwNUMwRkU1MDVDMDZGNThBNUVBOTk3QUJEMkY5NDE3ODYyRAorOjEwNDhGMDAwOTU2NjJDNzc0RTY0QzQxRkExMTQzREZDMEM4Q0Q3RTkzRgorOjEwNDkwMDAwNkQ0QkJGMDNFNEU1NEM5RDkzRjkwMDk0RTU5RUI2RjQyRQorOjEwNDkxMDAwREI4MThGQ0FDM0JCNEFCMDVERjk0RUM1OEY2ODJGN0U1RAorOjEwNDkyMDAwRjk5OTIzNTkzOEFGRTc4MEFGODA4RjJBNzYyNDMyOUZEOAorOjEwNDkzMDAwQzQxRkZDN0YwQUE2NzIwMzdDNUYwQ0YzNDRGOTVGQzBCRQorOjEwNDk0MDAwOUE0QTk4OEFFM0FGRDc3RDlFMjhCRUNFRDQxOTM0NEVCQQorOjEwNDk1MDAwQjczQzNEMDdFMzQwQkJFQTE3MTUzRjRFQjFEQUM2ODJDQworOjEwNDk2MDAwMjg1N0U3NUU3MUNERDhFNkM2RjlENUVCNzkxRTlDRDdGRQorOjEwNDk3MDAwQzMzQUQ2NUIxMDlFQjUwNzU1NTY3OTc4OEI1RTAyREYzOQorOjEwNDk4MDAwQ0IzNzZERDFFN0U3MjNERTQwRUZFNTIzNUM3REFDNzBFQworOjEwNDk5MDAwNkQ1NDAzODhERkM1QzlDRUFEMkFFMDg3QjkwMzk5RDMyQQorOjEwNDlBMDAwRTNGMENGOTkzQTUwNjM3OUQxNzIzOUNBMzdFOTkzQjBCRAorOjEwNDlCMDAwM0VDRDU0QkY0NDQ5MjY3RUFERDhBMTMyOUY4NTlGMzg1NQorOjEwNDlDMDAwRkQ0M0M3MzhGRDQzRkIzQ0UxNjc3MkEyRjQ1QjZDNzBBQQorOjEwNDlEMDAwM0QyOUU5QjczODU5RDA1M0VCMkE4QzA3Q0YyMzQ4MEYyQworOjEwNDlFMDAwODBBNzA5RjEwNUNGQjUwMjNFRUYwNDU2QTQwMTVEQkNENgorOjEwNDlGMDAwMDE2NjI4RUNGMkZDRDk2NDY3QjMxODhDRkQxNjlCMTc4RQorOjEwNEEwMDAwRDBDNjQzNTk2NzhCOTg5RjMxNDNBQjBBNEM4MkYyNTcwQgorOjEwNEExMDAwQUNGNDREOUMwRjYzN0U1RjI5RTBCOTUxNjEzMzcwREVDOQorOjEwNEEyMDAwODcxMTU4OTg0RjYzOTY0RUY4NkI5QTVDQjg0RDU1MDRCMQorOjEwNEEzMDAwQ0NBOTU4OUVGRjkzRDUzOUQ0RkUzOEI1RDdBMEZERjA0OAorOjEwNEE0MDAwREVEQjFCMjVFMzJDRUQ4RDkyMzJEOUZFM0RBQ0M3OUNGRAorOjEwNEE1MDAwOTc2RURGNTQ3MjlENzVGQzkyNzJEOUZFMjMxQURGN0QyQQorOjEwNEE2MDAwNjlGODhEMUIyNzU4QzdCRkIxOTJEQUQ3MzgzOEJEQkE1RAorOjEwNEE3MDAwOTI5REUxQUQ1MDZFNzBGOTAzMUFEMjRENjMxMTdDQUY3NworOjEwNEE4MDAwQTVFNDZEQzU3QUFBRTQwN0Q2MTY1MEExQkQ3QjY3RjJFRQorOjEwNEE5MDAwQzhENUNDQ0MxNzEzRkY4OEUzNzk0MDVBQ0M3QzkxMzQyRAorOjEwNEFBMDAwMkVDMUMyOEZDOTgxMTQ0QjE5N0EzMjRFNUQxM0Q1NDM4MgorOjEwNEFCMDAwMDFBRjkzRTBEMUZCRUFBNDJGOEFGQTNBMDlERTA3RjdBNworOjEwNEFDMDAwQkJBOEZDRTA3NTFDREUwN0ZCQkE0OUNFMTAwNjk2MDVCNAorOjEwNEFEMDAwNjUzRDc4QUQ2MTVBOEYwMDRFODU2NTMyNzY0MTA5QkFFMQorOjEwNEFFMDAwOTQzMUU2RjczRTFCQkU0RjUwNTkyRENFMjdDMUMxNDgyOQorOjEwNEFGMDAwMUYzRDlDNTNCODJENjRDMkNGQ0EwMTQwNUYyOEE3MkEyRQorOjEwNEIwMDAwM0FDN0EzQzBFQkMzMDNFNjY3Q0UzMjhERDMzODQwOUZDQworOjEwNEIxMDAwQjEzNTlGQkY5RkUzQzZGMTRBRDMxNUQ0ODM3QTU3OUUyMAorOjEwNEIyMDAwRTFFRTM5OEUyMzc3OUM2NTFDNjc3NjE5OEQ5MzEzMzNEQworOjEwNEIzMDAwOEUyM0JCMkM2NjFDRTc4Q0FERTJCRDE4NjdEMEE1QzZFMgorOjEwNEI0MDAwNzkzOEY3M0FFQjdDQjJDQjY5OUM4MkQ4Rjk2NDk3Qzc4NQorOjEwNEI1MDAwOEM5M0MwRTcwM0VGQzUzODdFQzQ1RkFGRjMxOTM0QzE0RgorOjEwNEI2MDAwM0E5RjgxOTUzNENFRjUzOENFMThEMzdDMDY1NkM2OEM0NAorOjEwNEI3MDAwRTNBNjcxRjAzRDhFMDM4Njk0OEY2NTAwREQxRDVERjMyNQorOjEwNEI4MDAwODlGRUJGNzQ5MUJEQTAzQjgyQ0Y2MkJGRUM1RDE3MjM0RAorOjEwNEI5MDAwN0RFMjgzNzEzMzUwQUZDMEUyMENGMkFCMjkyOTM0Q0VGMQorOjEwNEJBMDAwMTcwOTQwN0ZCNzk5Q0U1QzFGRDExM0Y0Q0YzQzAxMjI4NworOjEwNEJCMDAwMEIwMzQ0QTA3RkFBMDU4RkNFREQzOTJEQkIxRTlGQUQxMAorOjEwNEJDMDAwQzU5OUIzRDAyRUQ5RTBGMTBGMDFEMTM5RDc1QUFDQ0Y2NgorOjEwNEJEMDAwODk2M0RGQ0M2QkIyOUY2QUI3RjBBRkQwN0IxM0Q5RDBCQgorOjEwNEJFMDAwNUExOEJGMDU5NThEQTk3QzBBRjQxNzAzQkQ3NTEyRjRGOAorOjEwNEJGMDAwMTczRTRGMEJGQkY0MjNEMDZGNEMzN0MzNUI0RkYzMzg5QQorOjEwNEMwMDAwQTU3MTNDOUVEQUM0RDc5MTJGRDYxRkIzODNCMTg3QzM1OQorOjEwNEMxMDAwMUNDRjA3QjhFRjE0RDM5OEQ3MDRDNjlGNDlDRTZBMDRCNworOjEwNEMyMDAwM0RCQTVFNzE4NEI3MTIzRDAyRkQ2Q0MwRTc2QzYzMUYzNAorOjEwNEMzMDAwQzA5NUE4MDc3NkU2MUY4NDNEMEE3RkZENkM2MENCREUzOQorOjEwNEM0MDAwQjM3MkQ3NjFBQ0Y2QjYzMjZCQzA2Mjk4RUY4Qzk2RjU1MgorOjEwNEM1MDAwRjY3RTUwM0U2NzZGQkZDRkVGMzZGNTMzQzM3RTEyRTc2NworOjEwNEM2MDAwRUQ4NEZGQjA5RkJCODM3NjhCN0RGQTlEMzI2QkY5REVCRQorOjEwNEM3MDAwMTg3QkI1NTJDOTE1RjQxMEUzRkFDMjc2QTRENzlERTlBMgorOjEwNEM4MDAwMUM5RTdCRjEzOTEyM0YxQjQ0QUZGQjBDREU1NkMyNTMxNgorOjEwNEM5MDAwRjM0MzNCOEJEMDdBRDQ5RUM2RjIxMTFGNjk2NDE3MDU4QgorOjEwNENBMDAwRTVCQTEyMDNERjdENzY2N0EwMTRFODc5REZGNzU1QzIxNQorOjEwNENCMDAwNjMyQ0JDRURGQjEzMDMzNkIwOTdEQTM3RkVCQjFERUQ1QQorOjEwNENDMDAwRUZDQkMxN0ZGRjUyRUI3NzE2RTJFMzQ5QkM0QTNFQjgxNworOjEwNENEMDAwNkI0NjUxOUY4RjRDRjVFRTBFREVENEU3MjMxM0JGN0M1RAorOjEwNENFMDAwQTc2QzlBQTU3QzZGRURERDk2RkFGNzJGOUQ2NUY5M0VDRQorOjEwNENGMDAwMkJCNEQwRjI3RENFQ0E0NTk2RjJCQ0E2RUY1QkVBMkY2QworOjEwNEQwMDAwRDg1ODZGRjlCRTMwQkNDQUYyQkQ2MkM3N0E0QkI5QUE5NworOjEwNEQxMDAwRjk0OTRCRkQ5QUQ2MkQ5NkVGQjZGREMzNkU0NTc5NUNFOQorOjEwNEQyMDAwRkU1Qjk1QTE3RDc2QzE3REVBMTFCNEFGMkUxODlBMUY2NgorOjEwNEQzMDAwRUI1NDIzQUY4MTFDN0U1Mjk3NDlGQzdEQTZDRTQ3Q0YxMgorOjEwNEQ0MDAwNzNBREEzOUM2ODhGRDcyNDgwM0NDMzVBQkY1RkY5NDNERgorOjEwNEQ1MDAwNjhFNTA0RDQyMzUwMUY3NEY4NDFFNUMzNTAwODlDQTdBQworOjEwNEQ2MDAwMzcxNDFGRjFCREJBNTE2NzExNjA1NTg1QTU3NEYzNzVFRAorOjEwNEQ3MDAwOTcxQUZEQUVCNUMzRjc1MUJEN0Y1NzM3NkE3MUJGNkI0OAorOjEwNEQ4MDAwRUQ1QURDN0UzQjk1QUUzQ0I0RUY0MkVGMzgxOERBODE0OQorOjEwNEQ5MDAwQkREOTBGRjBENzBGRDc4QkRFQkU3N0Q4NTg1OUIzNDk5RQorOjEwNERBMDAwRUY5QzUyNkNDNDA3NzcyQTEzNEZBMTdFQUVENEI5QkNENgorOjEwNERCMDAwNTdFRUNFOUE4OEZFNjBBNTFFQzlBQjc1NUY2MkJDNjZEMQorOjEwNERDMDAwMDAyNjAzRkJDOUE1NzkyRDBDRjc4QkNBMkZEMTZGOTA1NAorOjEwNEREMDAwNDVFRTk3QjBFMEM3QTg5RjNCMEVBOEE0Njc1OUU0NTBFMgorOjEwNERFMDAwRjY2REMzNzFGQ0MwMjk3Q0NGNUFEMzY4N0Q3Q0JCMkU4NQorOjEwNERGMDAwRDBFNzIzRjBFNzRFRDQ0REExRTdFRkVCNEFGQjdDMDQ2QworOjEwNEUwMDAwQkFFNkJEQkExOTU0N0VCRjJFNDhDRkY2QkEzMjdBOUVBMgorOjEwNEUxMDAwQUNBQkE1RUYxRkQ1MkRBNUYyQTlCQTEwM0QzRkE5NUJGQworOjEwNEUyMDAwNDlDRjMzNzU0REY0QkRBMzZFMjM5NUNGRDU4NUU5RDkxMAorOjEwNEUzMDAwRUQwNzA4N0I5NEE1MEFGQjRGRDhFQkIwNzI1MEY5QkM4NAorOjEwNEU0MDAwOTg4MzBBRkZFNjdFQUIzRjEzRTVGQUJDRkI4QjNDQjRDQworOjEwNEU1MDAwNzNDRjlGMDBDMzI0OEU3RjI4OUZCMUZDRDYzQkZEMDJGOQorOjEwNEU2MDAwQjRERUNGMEYwM0ZENDdGNUZDRUU0QUUwRjQ3MUQ5RDg2QworOjEwNEU3MDAwMTQwNkZBNjdENTEwOUQ2OTMwN0VDMjJGQUYyMTdCMTlDOQorOjEwNEU4MDAwREU2QjhDRjQ2NUQ4M0ZDRDEzQTc3RjlDNzNDNkU1RTkzNAorOjEwNEU5MDAwRDRDRDFGNEZGREI5MTBFMzBGNzcwQTdEOTg3MDQ4QUQ1MAorOjEwNEVBMDAwRTU3NERCRTY0N0JBOTlGMEM3RURCMjk3ODUzRThGQzE0RQorOjEwNEVCMDAwMjNEOTcyNTkzREYxNzkzNjRERTJCMzJEMUJFMzAwMUIyNgorOjEwNEVDMDAwOTREMjYxMzZFMDgzRjMyRDBFOUFEN0Y5QkQ4OTYxODZCRAorOjEwNEVEMDAwNkQzMTM4MzJGRTUyNzhFMzcwNTRFQzcwMTk2NkZENTAzMworOjEwNEVFMDAwRDU5QzZDNThGNTQ1OTY2MUQ2MTdFNzhGNkVGM0EyREMxQQorOjEwNEVGMDAwMkZDRUI0MTkxRjhENDJGRTA4MDhGRUUwN0MyN0ZCQUZDMQorOjEwNEYwMDAwNkFDRTMxREM5NjdFQUNFNUYzNERDQTE0RjQ4MzQwQjkyOQorOjEwNEYxMDAwMjdERDFFQzczRjkwQ0ZDNTk5QkFGMTExQzhGNzk5MUQ3QgorOjEwNEYyMDAwODM5MjcwNUNGMEUzMEMxQ0E3QTNDRTMwRjhCODk5ODY4RQorOjEwNEYzMDAwOTkyRjJCOTcyNjUwN0QwOTVGNkZGREZFQURFMTQzQ0I4NgorOjEwNEY0MDAwRTA0MzI3MjNENDdGM0RFODlCRkJEOTRDRkIyM0M1NzM2QgorOjEwNEY1MDAwRDg1RUZCMTdCOEVFMzhFMEZGQUYyOTFFQTA1MTU5RjYxNgorOjEwNEY2MDAwNUJEM0FDODYxQ0Q3RTJGQjlEOTZGMUEwOUQ0RkZBRDA5NworOjEwNEY3MDAwQjg1RUY1NEU3NzhEOUQzMkM1MDVBQTcxMENGMjhGOUNGNworOjEwNEY4MDAwNDRFNzIwRjQ5ODA0RkQ3NTZBRUU5NTBBOEMzM0M1RTY3MworOjEwNEY5MDAwQTNFRjM1ODIxRkFCOUNFRDdBMTA1RTlENkRFMUY0RThDNgorOjEwNEZBMDAwNkQ5QzMzNzU0NzdEMUFFODhGMzIyNzc4NjQzMDRFNTlFRgorOjEwNEZCMDAwRjNCMDQ5QTgxRkNGQjYyQzRGMEYwMkRGNTZBOEU3MUY0QQorOjEwNEZDMDAwMkM4REQzN0VBNTRERTFGMDg0RUQ1REVEQTZGOUM4MzhCQQorOjEwNEZEMDAwMEE2M0QwQUYzMzBBM0Y3MkZBMjk1MzM5NTY1RkNCRTdFMQorOjEwNEZFMDAwQTNEODJGRjA0N0Y1Q0U2MzI1RDcwM0ZDRDVBRDlGRUJCMworOjEwNEZGMDAwMDhDNzE0NUJGMDUxNUI1QTc0RkUwQUNFMUZGQTI5REYxMgorOjEwNTAwMDAwRjE4MThFRjNGQkM0MUVDQUZCRTEyNUY0NTQ0RjM4REQ1OQorOjEwNTAxMDAwOTkxNEI3OTNGMDg1NTgxQkRBMzFCM0JCRTM4QUJFQkI1MgorOjEwNTAyMDAwREUwNUQxRkNGNDVGRUM2QzM1QzBDMUJFODI1QUYwREQwOAorOjEwNTAzMDAwMkVCRUNFNjVBNTVFQzREN0VDOTYwQThBMkY3RTZBOTNGMworOjEwNTA0MDAwNzY1MzUzMjFGMkM3NTk2NjlCODJGMzNCQ0JERUYyOEUzNworOjEwNTA1MDAwMzJFMUFGQzVDNkVEN0VCNjkyREIzMTIxRjgwRkUxMDEzQQorOjEwNTA2MDAwN0JENjYyRDcyQ0Q4NjgyRENGNjdEM0QzNTE2RkNDREZENgorOjEwNTA3MDAwNjA2NzYxNDBEMTQyQjQ4QjI0N0ZDMEJDQjdEQkI4QkQ1MAorOjEwNTA4MDAwQkI4MEQ1MzZBMjNEQTczOUI4N0YzMERCNjA1QTNGODA2MAorOjEwNTA5MDAwQUJFQUU3OUIwQkQxRUVGRjg1Q0Q0NkY0OTE3MTg2ODU5NworOjEwNTBBMDAwMjkxQ0VFRjJENEIwMUU4MEVGMUZCNjhDQkFGMzdBRTQ1RQorOjEwNTBCMDAwM0U0N0I4MTFENzY1OTZDNEZDQ0ZCMDlFRjg5Q0IzRDJEQQorOjEwNTBDMDAwMEFERkU1RTA4Rjg1OTdCMTY1MTYzODY0QkYxMjBFNzU2QgorOjEwNTBEMDAwODcxMjA4QzdFMUJCMzcyNERGMDkzRDkyQTI1QUVERkNENQorOjEwNTBFMDAwOEM5OEYyN0IzNjExQkY1NDk5OEE3NDNFNkIzODQzQjY2NAorOjEwNTBGMDAwMjRGQUVFOEY2MDdDNjRCN0MzQkYxQ0U4RkI4MEFEQjRCQworOjEwNTEwMDAwMURGNTMzRDgwNTA1Q0M1NEVGMDE1QjkwREU3NzI4NkY5MQorOjEwNTExMDAwQ0U0N0ZCOTQ2OTkxMDJGNEVGNjE0REQxOTAxRjc0QzFBOQorOjEwNTEyMDAwMEY2QTgyQjcwMEUzQjExRTA2RUIyN0M4QTUwM0UxODMyRgorOjEwNTEzMDAwN0UxQTNENjU1MzU5MDFDNjVGNDE0RUExQkY3NURFOTI4RgorOjEwNTE0MDAwQTMwQTk0NURFRTE2ODZGRDM5MzJBREYxNjU5N0NGNUEwQworOjEwNTE1MDAwQUVDMTdGMjAxRDg2MzI4QUUzMjQwRUI1N0U4NzA1OEI4MworOjEwNTE2MDAwMjFCRjc5RkNENkY3RkZEMThEQTcwOEYxQUQ5NzU4MUE2QQorOjEwNTE3MDAwOUU0RTc3NDQ4NUYxRDkzOEFEQzM2QzM3NTczQjM5RkMyNworOjEwNTE4MDAwRTQ5NzQzRkQyNUMyOUVBRjY2QkUxMEM1ODkzMzM5MUYyMworOjEwNTE5MDAwMkNCOUM5NDZGMDJDRjFGOEZDMjFGOEFFNjgwMTg2RjI3MgorOjEwNTFBMDAwODdCMTZBRjMzQTU2NzMxMTQ0QUU4RkE5QUM3NUU5Qzg1QQorOjEwNTFCMDAwOTczNTE3MzUxNjA2N0Q1RjYwMEI3QUQ0MzE4OEJGMDBBRQorOjEwNTFDMDAwRDlCOTRFNDBENkQ3MDBCMkU2OUU2MkIxN0I1OUZGMTRFMgorOjEwNTFEMDAwQjFCRUY2MzdDQ0YyREExRkU5M0MyNjRBNjdBOTE3RUNENAorOjEwNTFFMDAwNDIyRjgyQkVDODUwRDM1MDBGNzY5NTkwNUZDMkRBNDlFNQorOjEwNTFGMDAwNEZDODdBN0FCNDVFN0Y4NEEzQjc3QUFFNjhCRDlDNzhENAorOjEwNTIwMDAwRkQ1NUZERkM4NTNEMjFDMDdGRjlDRjFFRjMwMkYxRDk4QworOjEwNTIxMDAwQTc1QTUzQkExRkRFNTczRUIzQzI4QjdDRkM4OTE2RjJFNQorOjEwNTIyMDAwRTJCQzNGMERBQjUzRTJGMUYzOURBQTIyRkNCMTgwNUJERgorOjEwNTIzMDAwNDE3RjU4RDBFOUNDRjM2QjZFNDFCQzdGRjE4Q0REQzA2RgorOjEwNTI0MDAwMkEzNTNCMUMxMTA3MTBCMUJBNjUyMUU3QTcxRDhFMEY0NworOjEwNTI1MDAwNzhGOUUxQ0Y5MTlFMzVBRDU2NzkyQjdGRjZCMTc0OENGQworOjEwNTI2MDAwNzcwMjg2QjhERkM4MjI2NDNGNTc2RkZGQjgwNEVEOTExQworOjEwNTI3MDAwMUFENjQ1N0EyMkI2MUQ4RTdGMzE4NUQ2QUY1OTdBNTIxRAorOjEwNTI4MDAwQ0ZFRjcyRkZBNTQ2RjA3RDREQ0I5QUNGNTUyRjk2QUQ0RgorOjEwNTI5MDAwRjI1RDI2RkM5MTFCNTU0RjJBQzU5NUM2QjJCMTQ4MzcyMQorOjEwNTJBMDAwODkwNzE2RTZGNkYwRjJFNzlFMjhGODAwRTBFOEQ4RkU1NworOjEwNTJCMDAwMkY1RUM1MTIzN0UyRkFFMTdDRjM5QzFGQkZFQUVCNUQ3QgorOjEwNTJDMDAwQUY5RjEzRkU3Q0I0NUQ5OERBRjk1QUI5RkRDRUY2RjJDMQorOjEwNTJEMDAwNjdBNTNERTI0NTdGQTk3MjhCREQwRjkyQzkyQTVGRDg5MQorOjEwNTJFMDAwRjY5M0E3OTBBRkRGNzE1MDlDQTFFMjg1QzM2RjVGMDc3MworOjEwNTJGMDAwRTU4QTVERjZENEE5N0MxQTZFMjUzRDRBOEYxQUY4N0Y5RgorOjEwNTMwMDAwRTlDODI4RkVDQjVGM0FBQ0ZCODZGM0Y3MEZBNTQ0RTk2QQorOjEwNTMxMDAwNTBCMUVCODBDRTg2RjdDNDVCNzFGMzAxQkRERDFEODcxNAorOjEwNTMyMDAwMUVDRDFGOTRBMEJEQkRGQ0I5MkY3NTk0QUI0RkY3MkJCQworOjEwNTMzMDAwMkMyM0E3NjdGQkIyMkQ4N0M5OUU0MzNDMTFGRDA0N0QzQQorOjEwNTM0MDAwQkFFOUQ1ODM0RTkxNUI1RTFENERGNTBDNUNCRjdBQTMyNworOjEwNTM1MDAwRDNENUI4RjZBNTExMUZCRkY4MkFDNkVGN0ZFRkYwRTM0QgorOjEwNTM2MDAwRkNDQjVFRkNBRTE3RTc3MTVBQUJFNUZDQkM3OTQ1N0EyNQorOjEwNTM3MDAwMDBDNjJEQjM4N0QyMEQ3QUYyRjc2NTRGM0Y0MDdDQjY1OQorOjEwNTM4MDAwRTBEODAzRTkxNDBGNjA4MTJDMUJBREExQTEyQzlDREY5OAorOjEwNTM5MDAwQkM0RDc3RDBGQ0U2QjMyMEYxNUJEOTY2QjUzNDhDRjExNworOjEwNTNBMDAwMkM4RDRERDkxNTQ3MUVERTE0RjI3MDdBQUIwM0Q3MUUzMworOjEwNTNCMDAwNzYxQTE1MkNGQTg3NkZBOUI0NEZDMEQ4MjI4QTM3M0NDOQorOjEwNTNDMDAwMjBGNzIxRDg2MjJBNUY3MDcyM0E2RDUzNkQzMkJFRTFDOAorOjEwNTNEMDAwQjRGMEU5RjY4N0RCOTAzRTY3MDYwNDMyMzAzRTA5Nzg4OAorOjEwNTNFMDAwMDgwOTdDMjlBODc3RDQ2MzkzMzMzODdEOTg0RjJCMTQxMAorOjEwNTNGMDAwRUQ0MDJGMTZFMzdCQUNERjY2MEZCODBBMkNFREM0M0EwNAorOjEwNTQwMDAwQzZDNzVGMjJDNjA3QjgxM0QwMUUzQjlEMEVGNjREOUM0MworOjEwNTQxMDAwRjk3REE5NEFCRDBDRjY4Njg5QkY0QzcyQ0RFNTdDRkJBRgorOjEwNTQyMDAwMkEyRUQ3NTJDRUMzRDNBNkUwRjczRjFFRTdGMjgzRUQ3NAorOjEwNTQzMDAwNzA1RDA3QjgyMjE5RjRGREMwRUQwQUU5MDEwNzhCQzRCRAorOjEwNTQ0MDAwOTNFN0VENzYyMUNGRDZFRjcyN0YxMkUwRDY3MDdEOEE5QQorOjEwNTQ1MDAwRjIwOUY0OUY0MkY4MjczQjZERkUwNjY4NjdEMkNCMzUxMAorOjEwNTQ2MDAwMzgxRUQ1RDNBM0VGNERFQkZBMDIyMUZGQUZBQjYyN0YxRAorOjEwNTQ3MDAwNTRDODNGREJDNEU1QkU3N0JCMzdDNEZEMDM3QkY4MjdDOAorOjEwNTQ4MDAwNEZBMUJDODI3Q0UyM0E1M0Y5ODJCRDE0RTdGREQ5Q0UyQworOjEwNTQ5MDAwNDM2RkRGMDM3Q0ZENTlCMzk0NTNBQkRFOEM5NUQzQjJERAorOjEwNTRBMDAwREQ2MzU4M0MzOUZEQ0NFRDY3NzFFNTE0REVDNzk1NTNEQgorOjEwNTRCMDAwNzczQkYxRjFERjVCNkY0QUJDOUQ4QkQxOUI1MjBGRjZCRQorOjEwNTRDMDAwODZCRjU4M0RCODU2RjVDNUQ1ODNGMDc3OUMxNUY2RTRGMAorOjEwNTREMDAwM0JDOTZGOTJDRkNBN0Y1QTM1OTBFMjQ2OTIxRjI1QkZEMworOjEwNTRFMDAwNzVGM0EzRTRCN0Q4Nzk1QUYxMTZGQkZEMTVBMTZGMjQyMworOjEwNTRGMDAwOURFRENCNThDODgzRjFEMjdEMkFGOUQ3OUQwMDUzMjM2NworOjEwNTUwMDAwRDBCNzczNjc0RTE4RTNDRTJCNUMzQzdFRDE2OTc0NzlCQgorOjEwNTUxMDAwNTNFMEI5MjI5OTk3QkJEMkY0NDZENDBGRjI3RDk3OEIxMgorOjEwNTUyMDAwQzdCNzNCNEJCQkJDQzkyNkJGRTI4M0JEQUFENzA3REZDOQorOjEwNTUzMDAwREJDMzZDNEEzQzdGMDMzNDJGQzFEMUNFN0FGQkNFRTM3MAorOjEwNTU0MDAwQzE5MzU1NzdGNjUyRjREQjlCNTREQUNGOUU1QjdGOTc3RAorOjEwNTU1MDAwMTdGNzgxM0JGNzBFRkEyN0Q0NEZGM0RFMDAwMzEzRTA3MQorOjEwNTU2MDAwRUQ0NDNCMzAwOUE3MTdEMDMwMkY2MThFQTBGNzI3MkNEMAorOjEwNTU3MDAwRjRGODA0OThERjlDQkREQzVGOThCQjM2QzZCRTc3MkY3RAorOjEwNTU4MDAwRDE1MURGODA3RDdGRDIxQUQ3RTY3QzUzMkVGQTI5REJGQQorOjEwNTU5MDAwNjRGRDVFQ0VENjEyRERDQTYzRjgyODI4RkNDMEIxOUEzRAorOjEwNTVBMDAwRTBBMzExNkM4NEYwQzM3OEZDNDJFOEFCQzk2QUZFM0YwQgorOjEwNTVCMDAwQTE5REQxNzk5NEM3MTVDRkVGNTUwOUZGRTc3NzJBNjFFRgorOjEwNTVDMDAwOENGQjUwN0M3NzNDRDJCRjRCNjcyNjdGQjkwM0Y5NERFQgorOjEwNTVEMDAwRUY1RDhFM0I1RUZFNDNFMTBGQTE0QUU1OUU3NzBCRkUzOQorOjEwNTVFMDAwMTk5RTFEN0JERUM5RkIwNTk2N0ZGRUJCRUM3NzU5Q0Y2QworOjEwNTVGMDAwRkFDNUZCRkY0NEZCQzc5REZCMUQwNDQ3RTdGRUQ3QjM3RAorOjEwNTYwMDAwN0Y4OEU1NTcxRDdFODRCMzczOTk4M0Y2Q0Y0MkZCM0RCNworOjEwNTYxMDAwRTEyMUY4N0QwMEQwMUJEN0NEN0Q1RjE2QjREM0JBRDM3RQorOjEwNTYyMDAwNDA3NDlBQURGMUZEOEVGMzdCRkZGQ0JFODJGOTA3N0JERgorOjEwNTYzMDAwMUQzRTlDNDdDRDdFOUUxNzUyRjNBQThCRTIyRTlERkIwQQorOjEwNTY0MDAwQkUyQzBDQkFGRjc2RjNBOUQ2NTk5MEY4Q0ZDMzY2RUNGRQorOjEwNTY1MDAwNDY3RTRERTZGQjAwMzVCRjE4QkZBRDFFRjdDMzVCMEU5RgorOjEwNTY2MDAwRThCOEJGNTJGQ0NCQkYxNEEwN0VFOURDQ0RFRDg0NzM1QgorOjEwNTY3MDAwRjZGNkE3NzExRkI0NEExQkJDQ0M4RTcyOEYzNjVCNUZFNworOjEwNTY4MDAwQjAzQkVERjMyNjg2RjJFM0UxODVFM0ExMTNGMDgwRjM2RQorOjEwNTY5MDAwMDJCQzk0QTE1RUVDMEQxRjBEMUFGNzM3RkZGQkUxRTM4RQorOjEwNTZBMDAwRjNGQjcwRkNDQUJENjM0OTZFQTI3ODUxMDJGQ0JEMjdCMgorOjEwNTZCMDAwRUM1NDY4RkVGQ0ZERkUyRjBCRDBFRUY5QUNCOTlFRDY4MworOjEwNTZDMDAwRjFDQkNEN0JEQkZGQjg3OTJCOTEyQjk5RjdDMUZGRTZBRQorOjEwNTZEMDAwRkMzRjQ1RTNFQjUyQUMxQ0Y0RTRGMzlGM0Y0OEU1MTc3NQorOjEwNTZFMDAwM0Q3RTgyRjcwQUU1RkZFNEZGMzRCQUVGMDZCQTdCMkY2RQorOjEwNTZGMDAwNEY3N0M1RkVERjc1REU5N0EzRkIxQjgyRUUxRTAzRjMxQgorOjEwNTcwMDAwMEEzQUY3RkQ4NUUyRTU3MkZFOTc5QkI3RUZGRkQxNzk4NAorOjEwNTcxMDAwNEJGQjY3QjVDRERGOTQwQkY1RDdCMjQ4OUIwRkUwNUMzMAorOjEwNTcyMDAwMzE3NDdBMTM4Njk5QzA0RDI4OEQ2NzhGOTREQUI5N0ZDQQorOjEwNTczMDAwQTQyQTNDMEVDMzA2RjBCODEwMTNGRTA0QTU4MEY5MzA2RAorOjEwNTc0MDAwOEUzMjlGRUMzQUNEREQ0ODc2MjZEM0ZDNkQwMUMwQzc4MgorOjEwNTc1MDAwRUFBQjY3RkIyOTU3ODM4RDNDMTFDNDcyRkYwOTdFOEEyRgorOjEwNTc2MDAwNkZDNkY4NTUwRDBBMEIyODYwRUY2OTU3N0ZGQjI4REFFMgorOjEwNTc3MDAwRjlGNkExQjY4OEEzODA5RTFGRTBGMzYxMTFDN0IyMUJBMgorOjEwNTc4MDAwQkFDNTlGNzBDN0Y4MDMyRTlGRjVCQjQzRjRFNzY0MjNBNworOjEwNTc5MDAwOUI3MjMxNEZDMUFEMTk2MTE4REY1REQ0NDRGMzcxMEZCNQorOjEwNTdBMDAwNjFBQ0M5QjQwRkU4NjBBNkY2RDA1RjNFMDY2MDRERjY2NgorOjEwNTdCMDAwRTMzN0M1NUY3RDM3RkU0NkI2MDUxMDdGQzM2QzE0RDc0RgorOjEwNTdDMDAwQTJBNDNFQzI4NzNGQkM5QUZDNENFRTNGNDZGMUQ5RDgxQQorOjEwNTdEMDAwODY3OEQ0MThGODdGN0M3RUU0MzczMkUxMkY2QUEyMEJGQQorOjEwNTdFMDAwNkRBODJERTBCMkQ2MTM3RUQxNjVFOUMzRTk5MTVEMjk5QworOjEwNTdGMDAwRThCM0Q4NDIwRjg5RkYzODc0QjFEMDQzRTJGNzlCRDJBNworOjEwNTgwMDAwMjU5NjFFQjE3OEJGRERDRUUzNkRCMTc0QjJFNDc3QTQwNgorOjEwNTgxMDAwNzEzRjI0MDI3RUM4RUIzQkI3NTFCQ0UzRUNGMzFGRENDNQorOjEwNTgyMDAwODJGNTJCN0VBMTMyMjdGNDczNkVBNzg3NDU1MDdFQjU5MworOjEwNTgzMDAwQjA4RUZFNTQ3OThCMUEzN0NFMkJFREYyOEE5Rjc5NjhBMQorOjEwNTg0MDAwQkNGMkREOEVGMDU0Njg1RkJFRTdDMzAyQjI5Qjk2NzU3MgorOjEwNTg1MDAwMURFOTg3NzE4MUU3MTU0RUJGNTA3QjAxRUVEQjk1NkIyQgorOjEwNTg2MDAwREMzRjg4RUQ2RjkzOURDNzA1M0E1RTQ5OUM4MUYxMDc0NworOjEwNTg3MDAwNjUwN0NGNTcyQzZGQkVDQkVFMzBGMURCRkZCMkYzQkMyOAorOjEwNTg4MDAwNTdBODQ3RjIxQzdBNEVBMUY1QTYyNzdDREMyRkU4NzhCMgorOjEwNTg5MDAwNEVFMUYwQjVEQUMzOThGNzU4QkU2MzhCMUU0NEJGNzI3MQorOjEwNThBMDAwQzdFNzE0QzcyRUZFRDkwQkRFNzZGMjE3NTVBQkZGQkM0NworOjEwNThCMDAwNDMyNTdBQzI5M0U4MTdFQkM3NTZCNzU0OTE5RjUwREQ0MgorOjEwNThDMDAwMkNGQ0M0MTgzRkFBRTI2N0ZCRjY4NDAwMzUxNTJGM0Q3NworOjEwNThEMDAwRUJDNUY4Q0I5OUI2NjdCQ0U0OUZFRUUwRkVBN0U2RDYzMQorOjEwNThFMDAwRTJGQkE3OTdGMzRCOUI1N0M1RjU0QkNGRTAzRkMwOUYxQgorOjEwNThGMDAwMzg2MDhGRjFFNzc3RjRCOUIyRkRDQjE3MkUzQzhENzE4QworOjEwNTkwMDAwRDI4RUREOUYzRDhENzA1N0ZFRTdCRjNGOERGNjNEREJBQworOjEwNTkxMDAwRUYzMjlFODFGOUQ2M0NGRjVCOEEzN0M5NzZFRjBBMzlCMAorOjEwNTkyMDAwM0QzNzgwODVCMkEwREVCOTc3MUM5NDNGNzI2RURGRTkwNworOjEwNTkzMDAwNkNGNEU3Q0VFREZBNTMzQUZBRjU0QkY2NERDRUMwNzk1QQorOjEwNTk0MDAwMkY3OUI5Mzg4M0M1OTE3N0Y5NDRCRTBDNUY0MTlDMzBGQgorOjEwNTk1MDAwOTYwRTg3NUEwRTkxMUY3MkY2ODQ4M0ZDQkVFRUY4NDJCMworOjEwNTk2MDAwNzMxNThGRDdGODQ0NUM2MTY3RkMzOEFDRjQ4N0FCNUI4OAorOjEwNTk3MDAwM0UyQ0UxRjEzMUUxMTc1RjJFOEU3MDFDRTg3OEVEMTVCOQorOjEwNTk4MDAwRDA2QkE3ODgxM0M1RDBFQjJDRkUwM0U4RjI2NTBDQkRFNQorOjEwNTk5MDAwMkVCMEUwOEZCMzcwMUZCMkE1NEZBRjcxODRDODE1RTA3MQorOjEwNTlBMDAwNDlDNjc3OEZEODAzMzYxREU1NjA3NzYyMzc5REE2MjJGQQorOjEwNTlCMDAwOUQ1RUI4OTA4REYxRjA0RkVDNUQ2NEY3NzRFRDczMTg1NworOjEwNTlDMDAwRThERjk3RUZGQjFEQzlDNUI5OTc4RjUxRkM5NDg5Mzg2MworOjEwNTlEMDAwRUIzOUQ2RkRDN0UzNjI4QTk4REY3NjBGOEYzRjA4N0NFQworOjEwNTlFMDAwNjM3Q0MyRTdBNUY3MjIwRUMxRjk1NUM2Mjc3QThCNEIxNworOjEwNTlGMDAwOENENTQ1REU5Mzg4M0I1NzZEN0Y1NzY3MzE3MTFFNjVBNworOjEwNUEwMDAwMUNEMkU5MDM0QjdDNUNDRTNCQjYzRjAzRjEzMEQ2MUM4NQorOjEwNUExMDAwNUY4QjFGRjc5MTdFNzM5NDRFM0NBRTI2RTM2N0U3QjYyQgorOjEwNUEyMDAwODhCODFCQkNFRjNGMTJGRDQxMUVDN0E4MDkyQkJGNjNGRQorOjEwNUEzMDAwNzFFNDUwQzZENzQ2RUEzMTcyMThCRUIyQjhEQUU1RTA3MgorOjEwNUE0MDAwRkQ2QkYxMzE0NEU3RUI4M0M0NEJDNzU3RjFGNUYwM0ZGMQorOjEwNUE1MDAwRUE1Q0FFQTdEODgyNTM3NUQzN0VGNkZENjI5RjQ1RTIxRAorOjEwNUE2MDAwNEJDMkRCMjFGMkYwM0E5RTU3MjkxRUQ0RDg3Qzg4RjQzMQorOjEwNUE3MDAwNjlBQzNDNTdGNzcyMEVFMjNFOURDNzVCQUI1QjBGMTRGRgorOjEwNUE4MDAwQTBERUU5MzhGODBBRjE1REY1Q0UwRkY0MTBGNDczNjQ4NgorOjEwNUE5MDAwQzc0QjNBQjcyNzM5OUZBMzlFMEU5QkY0NzRDNzhCMDc1OQorOjEwNUFBMDAwMEE3OERDOEZFN0REQzZGNjVGMjFGQUFGRDk2QkVEQkY3MAorOjEwNUFCMDAwNjZFN0U3OTZGRTJCNDJDREI0RkY3NUI5NzFDRTY4ODFEQgorOjEwNUFDMDAwQkI3MEJFNjdEQUVDMENGNUREOTk2Njc1NEEzODlFMUQzMQorOjEwNUFEMDAwQThEQjJERkJBMDhEQzc3NDVBQUY0NkJGOTU0MEY5QjkxRQorOjEwNUFFMDAwNEI4RTRENzkzNzA5RjdFOTQwQ0NEMEZFNkRBOUU3N0NBNAorOjEwNUFGMDAwRDVGMkEzNDAzRkE0NEJDQkIxN0I1NDVDMzdGNjIwMUVCQworOjEwNUIwMDAwNEQ3NjcwRTFGMURBNjIwRkM4NkJFMTdCQTVBMzkxQUQzMAorOjEwNUIxMDAwNjJGNUMwRDgxMzM2MEJEQzMwNEUwNkVBRTMwNkU4MDcyMAorOjEwNUIyMDAwRjNFOTMxN0YwOEY3NDc1NTZGQzkxNDg0NDczNTZDODYxMAorOjEwNUIzMDAwMkJFRUZBQzlGQkIzQkI0QjE5REFFNTc2QzM5QUFGOUNERgorOjEwNUI0MDAwMzk1REM0RDEyMkQ2QkNGNTRDOUQwREM1N0Q3MDY2NEIyOAorOjEwNUI1MDAwRjBFMzdFQzBFMjYxODExMTg3MzFBRjdFNUUyNkM1ODlBOAorOjEwNUI2MDAwQjM2RUUzRURDRTFBRUU5MEVEREFFOEJFNkRFMjQ1RThGNQorOjEwNUI3MDAwMUZGMzYwNkNFMUY1MzNBMTVEQTJENkFDRTAzRTAwM0NDMgorOjEwNUI4MDAwMTlEMkU1MDE1QjcwQUI5RTg2RjU3NEU2MDNENUY4QjRENworOjEwNUI5MDAwQUU2ODk0N0YyMUNFQkRDOEZFNjRCRERFRjY4M0U1MzlENAorOjEwNUJBMDAwMjQ1NUMwM0Y0OEVDMDcwRjYwRUQwQUVFMDc2RkYyRjA5NgorOjEwNUJCMDAwRjM0ODAzRERBOTc0REU2ODlCQjBEQjdDQjhFRjhBRjU5RgorOjEwNUJDMDAwNkFBREVCRjY2NUNGMjNBREI0OTY1MzhCOEIxNjBERjQwRgorOjEwNUJEMDAwMzNGNjYxRTM4M0M1MUFFODgzRDRCQjhBNzZGNTMzNzA2NAorOjEwNUJFMDAwNUY3QTQzMzFFNkREQTczRTVCMzQyMjBCQ0E3NzM5ODYwNAorOjEwNUJGMDAwNEZBMkVGQkYyRTFBOTEwREU1NUFFN0I4NDlGNEJENDIwNgorOjEwNUMwMDAwQTFCQ0MwN0Q3QTY3NzEyODNGMkE5RjY5NjBEQzYyQkVCMworOjEwNUMxMDAwMDVDOEVENDE5NERCQjNBNTFEOERGOEI1RUE4RTJGNzQ1MAorOjEwNUMyMDAwN0UxRTg2OTVFMkZDMDc4Q0UzRjNFRkVGN0U2RjE3Q0VDNgorOjEwNUMzMDAwNzdBMEFEQkQxRUY5RUZDN0ZCQkU0Q0M2N0EzRTY2RDA1RAorOjEwNUM0MDAwM0MwREQ2NjBFMEJFM0NCQzFBRjdGNTI1RjI3RjYyRjM0RQorOjEwNUM1MDAwNjAyNEJGNkY0QjBDRkUwNkUxNTgzNTdCRTgxMzI1QTg4NgorOjEwNUM2MDAwNTMyQkZEQzQ0N0IxRkJDNENDNDgyNUJBQ0MxNTc0NDFCNQorOjEwNUM3MDAwMzg5REE2M0NFNDA1NkE4OEYyNUVGMDQ0MDJFNUY1QjA4MgorOjEwNUM4MDAwNDkwNjhFQTc4NDJBRDVBRkFGRjlFNjcwOURENjQ1QkVFQQorOjEwNUM5MDAwODEzODBGNjYzQTJGNzUwNkUxNUQ5NzE4QTQ2N0VDNzk5NQorOjEwNUNBMDAwQTk4MzdBNjkwN0JFQ0Y5QTdGMzExQkU3MjFDRjQxMTVCRgorOjEwNUNCMDAwMkY3MDUzN0NFMEZDNUUxNjc2QzQ5MTIzRjlEQzVBQzc0MgorOjEwNUNDMDAwRDJCNEMxQkQ3RkZGOEQyM0Y4MUZEODdGRUUyRjdEQkJERgorOjEwNUNEMDAwOEY0MjdGRDdDRUQ1RkQ5OEMyNzZFREQyRDE2OURBMjgzMgorOjEwNUNFMDAwQzYyNzg0NzY4NUEwNUYyNkQyMTRFNUVDNDFDNkNGRTdBRgorOjEwNUNGMDAwMzg5NDAwRkE4RjlEREYzNTQ4MEZGNzlGM0I5NUZDOEM1OQorOjEwNUQwMDAwQ0VDNDlDNjZDQ0EzRThGQzIxQ0YwNzgwOTU1RTQxNzk4OAorOjEwNUQxMDAwMThCMDM3Mjk4MjdFMTBGMEYzMTczMUZDRkM4NTc1QkQ3MQorOjEwNUQyMDAwQjE4RURCRjlCNUFGQjU5REZBMzM0NDdGNjBGMEE0QTMyMworOjEwNUQzMDAwRkNGMEJGNEU5NURCREI5RDc1M0U4MjAzQ0NDMzAzQjgwMAorOjEwNUQ0MDAwQUU1RUU5Nzg1OTBFMTEwRjE3RjQwMUJDRjc3Mzk4RjBBNQorOjEwNUQ1MDAwM0VEMEQxMkJGRDcyMUQ5QzdFRjQ4Q0E1REY3QzY3NkQzRgorOjEwNUQ2MDAwMzZDQTczNzk2OTczMDlCQUE4QkZENTgzNTc2MUJERDNBMQorOjEwNUQ3MDAwRjM4RjM0REFBMTVFRDVDQ0RBM0M2NEY2OUU3NEU1RTdBNQorOjEwNUQ4MDAwQjFEMkY3Q0VBQUI3NjNCQzAyRTlFMkVCNDlCRjZCOTc4OQorOjEwNUQ5MDAwRkFEM0I0M0UxNjdBOEU3MjQwM0ZEN0VFRkREQzg2NzBBMQorOjEwNURBMDAwNEIzQTNFMjFGMkZDNjNEQkZGODM0MzExRTM1NkQ2REIyMworOjEwNURCMDAwMzE0RUQyQUE5MzNEMUI1QjZGMEExRUFBMUExMzJEMTdGMAorOjEwNURDMDAwMzgwQjY5REMwQzFCOEY3N0Y0QUNDRkQ3QkY2OEJGNEVBNAorOjEwNUREMDAwM0E5N0Q1MUIxRjE2MThCQzNGQzBGQkI3MTE3RTg5RjczOQorOjEwNURFMDAwNUIxQzQyREZGNkM0RkIzNEFDMDc3OEE3RTcxNUUwRkQ4NworOjEwNURGMDAwQ0U0QkUxNUREQUNGMTU0MjFGNTRFMEZFMDlGMENEQzc2RQorOjEwNUUwMDAwODFFOUU5ODM2MURDMTJENTREN0NCRkYwMTk5NUU0MEQ4MQorOjEwNUUxMDAwRUE0RkNENEE4RkVBOEY4NUUzNkIwRkUwM0MxNzZFNTY1MQorOjEwNUUyMDAwODgzRkU3OEFGM0E1OUY4OTdDRkVEODNDQThGOTMzNDJENgorOjEwNUUzMDAwQjRBRkQzMjMxRjJBMUNFM0NGQzVFNEI5NTc0N0Y5NzQ4NQorOjEwNUU0MDAwMjBDRjRGRTNFN0I1NTQyMTA3QzUwQkYyOTNEMDBFREEwQworOjEwNUU1MDAwNkZGN0ZEOUFFQ0VCMzc1NEI2MzUwRURFODlCOUQyQTI1NgorOjEwNUU2MDAwRTUwMUI1MzY0QjdFMkM5QjlCNkNFOTc3RDI4MjdDREFDMAorOjEwNUU3MDAwRUY1RUVDRjE1REQyOUYxQUI4RDRCQTVFRTc4NEFDRTc2RQorOjEwNUU4MDAwOEIwNkFEQjQ5RTJGMUFEMkQ0RDc1MkZGQUE4REI5OTZFNQorOjEwNUU5MDAwRUZDM0MyNTc1QkJFNUZCMzYzQTRBNTNDQkNGOTNBNEJFQQorOjEwNUVBMDAwRkQ2QjVCMjc1QUNBMjMyMkRGQjZENDFGNzU3NEJBQTVDRgorOjEwNUVCMDAwM0NBNkVEMUU0QkZEQjEyNzY2NUJCRThGNkYyRkI3N0NGNgorOjEwNUVDMDAwQkZGRTkzQzU5NkYyQjdCQTdFNjBCNTRGNkM4Q0Y0MjFENQorOjEwNUVEMDAwNEI1MDQ4M0ZCRTU2MzcyRTFCRjNCMEQ5Njg2NTEyRTJDRgorOjEwNUVFMDAwQjM1OEU0MTFCRUI2NDhCNzE5NUU3Q0U2RDkwQ0QwNTM1RQorOjEwNUVGMDAwMDdFNzREQTVGNUZFQjU0NUU5MDExRjNEMEIwM0U4Q0ZDQQorOjEwNUYwMDAwMzA3NUMyRTg3ODc5OUE5MzhERjFEOUU2N0NBODYyQTdCQQorOjEwNUYxMDAwRERBMkNGMjYxQkQ2RjJDQjkyNkYwNjcyQkU3OTM1NDYzNAorOjEwNUYyMDAwOUZEOTZCMjc0NEMwMjI2NDdEMTcwRUNFQzBGMTQwQkVCRQorOjEwNUYzMDAwRjYwOUJEQjZFRjBBRjVEQTQxOTRDM0QzRTk5MTQ2MkNEMAorOjEwNUY0MDAwNEJGOTYyNjI1RDJEMTI3QzA0Q0Y4MDhFRjk5MDkzM0NGOAorOjEwNUY1MDAwQjRGRTA2RjBBNThGREU4NzM0OTA5Mzg5NEU3RkZGQzM5MQorOjEwNUY2MDAwMzgxRjlCM0YxNTk5NkZEMjhDRDJENzc4NkVBNTU4N0Y3QQorOjEwNUY3MDAwRDk1MERCMzc1OTdGQTU3QzY3REE0NEJFNUEwQUNGNTcyMAorOjEwNUY4MDAwN0I3MjVFNUUxMjMzRTFGNTVEODc0REQ4Q0Q0REZDNjlDNQorOjEwNUY5MDAwMUM3NTc1RTdBOUU2OUFERjdGOTJBMDk5RjJFMzk0MDU1NAorOjEwNUZBMDAwNTMyOTNGMjRCMzE3M0RBODY3RTZERUI0MURGNEFGOUUyNgorOjEwNUZCMDAwRTVBM0E3N0NERjM4QzMxNjM3RUZFQjlDRDA5QkQyQkU5RQorOjEwNUZDMDAwMUExNkI1QUZDRTIxMURDRTY2QkVGNTM4RTYyNTU1Q0ZFMworOjEwNUZEMDAwRUMyMkZCMkFEM0Q2QjRFODA4Q0VFQjU3QUE4ODU3RkFBRQorOjEwNUZFMDAwRjg3OTJBNjExN0NGQkJFOUQxNDU0NzcwMUZGQTVGODc1RgorOjEwNUZGMDAwOTA1RTkyRTM2Q0FBOUI3MjkzNjYzQTM3REVCRjE3M0ZCRQorOjEwNjAwMDAwNjk5ODkzQUYwRjRGRDcwREJENjkyRUU1NjkxQkZDN0NENgorOjEwNjAxMDAwQThFODNGM0I1NDU1ODI3NkYyNDA5MTVGRkFCODJEN0U1NgorOjEwNjAyMDAwN0U0QjgyOTNDRjJCMDM0OThFRjAxQTZFOTI4RkIzRjM3RgorOjEwNjAzMDAwREZGMzZBMzA4RkE3NkNDMTA0MjdFRUQzNUVEQjU2Qzg0RQorOjEwNjA0MDAwRkRCQzgwMUZDRjlENjY0N0VFN0QxQ0VCNjc2NzZBOTRBMQorOjEwNjA1MDAwREYxQTNCN0VDNkNDRTBDQTFDOTg1RjQzOEFDREVGQTYxMAorOjEwNjA2MDAwNzI5NzgyRjUxRDBGMzFENjA3RUEzN0ZDQTc0QUYwMzQ0NAorOjEwNjA3MDAwMUMxQzRGRjkxRTBFNzcyRDQzRkI1NUNFRUI1MENBNTMxNworOjEwNjA4MDAwODQxRkI1MjU5MUQ2M0QyNkY2QzE2NTdDRjU0MkU2REMzOAorOjEwNjA5MDAwMzZCNDJCMkU2Q0IwRDM3ODE3NjA4RTA2RjQ3RkExNDVGMgorOjEwNjBBMDAwQTU3REQ2MjMyOTA5MTExQjk0RDU5NTFFNTJBOUQ5NjgxRgorOjEwNjBCMDAwNkI0MkZERjkyRDlFQjAyRjI3OEExNzZERTMwNDNBRkYzRQorOjEwNjBDMDAwRTJFOENGRTdERjkwRTIwRUJCNzM2OERFMjkzODZGMDlBNAorOjEwNjBEMDAwQTc5Q0Y3ODA1RUZDQ0ExQjA0MUVCM0FFRUEzRTk3QzFDNAorOjEwNjBFMDAwOTA4RjU1NDNBMzdFRTcyNUYzNzM5N0UxQkE3MTgyNUVFMworOjEwNjBGMDAwRDZGOTM0NjY0RUJGRjU2RTNDMkY3NDVDNjU5ODBBRTJBMworOjEwNjEwMDAwNkI2RkEyRjlDRjg3Rjk2MzdDMzcxNkJGNjc3RDM5NUY2NAorOjEwNjExMDAwRDg1NDgyRjMwNjg0NTNERDU4NDJGM0EwN0FEMEFFRUExNQorOjEwNjEyMDAwQzcwQTdCMkEwN0Y5MzAzODg1RThEQUQ3NDZFNzAwNjNFMworOjEwNjEzMDAwRTEyRTcxRjIzOEVCOEQ0RTFFMEZEMDMzRjM2RURBREVBNgorOjEwNjE0MDAwMDc5RjgzNDkyRTZFNzZGNkJBQ0VERkUyRTQ3QTg4OUUwOAorOjEwNjE1MDAwNTc3RTlGNDBDNEIyQ0VBQjAxMUJEOTQxQjE3MDgxREVFNgorOjEwNjE2MDAwQkFEQjY5QjI2QkQ0QTQ4NzBBQjBERkRFRURCMTVEMDc5QworOjEwNjE3MDAwNzRCNEM3REM4Q0VDNjRBOTJGN0JCM0M3RDAwRTQzN0UwQworOjEwNjE4MDAwOTM3NkQ4MDJBNzU1RUZDMkZDQ0FDNUZDQ0FFM0NEMkY0RgorOjEwNjE5MDAwOEU5RUFEQzE3QUE3RUY4OUM0QjU2M0QyRjRGODdBNjg1MAorOjEwNjFBMDAwQjNDMDdGOERBMTMzOEEyQkY1MTIwRjdGQzIyOUVEQzFCOQorOjEwNjFCMDAwQkQwNzc0QzQyQkNDMTNGMTlBMDlGRTcxMDlFOTE5N0I1MAorOjEwNjFDMDAwRENCQ0VGQ0JGOTE5Qjk2QkYyNzcxRkM1RkVDMDhFNDU2OQorOjEwNjFEMDAwRUUzOURGRTQ0QjRBQjk4NDFENjE1RkZBMkI5NzE5OEZDMgorOjEwNjFFMDAwOEZDNEYwMDdFMDZEQkQ5M0RCN0ZGNEVDODFCNzU0QzA0MgorOjEwNjFGMDAwOUJDRDgyQjdDNzlEOTdCNEZGQjhCRUVEMkJDRTBGOUM0OQorOjEwNjIwMDAwMTM3ODAyQkRGQjdERUNGRkVDNkRFN0VFNDRERkIwRUFGNgorOjEwNjIxMDAwQjZBRjg0NUZDQkVCQTcwQkZEMEM3RUVGM0Y3Q0VDQTMwRQorOjEwNjIyMDAwRkE0QjcwOUNBOEZGREI1RTg4N0VDRkYyOTdBRjRBNDJBNAorOjEwNjIzMDAwRkI2OUQyOUVCQjBEN0M5RTRGMUQ0Q0VCQ0ZEOTNEOEU5MgorOjEwNjI0MDAwMDA4RTczMzY4NUU3RDM5REREMzNGNjA4QzYwNzNFQUI3NworOjEwNjI1MDAwM0I5QTZCRDZDRjY3NUYzQzU2Njg4NzdFQ0VFRTNFNTY0NAorOjEwNjI2MDAwQTg1MUZFNkVEODYyOEY1NzdERkQ5QjQyM0MyNzI1RjNENworOjEwNjI3MDAwOUVCQkU5RUNFNDdBN0Q4MzhCQzcxREQyRDJGNTQ2Q0M3OAorOjEwNjI4MDAwRTdFRTQ4NDhBNjc5M0Y5NjZFN0IyNDVFM0MwNUQ1MUQxNworOjEwNjI5MDAwRURBQjdCNzREQTQ3NUMzQ0NDQjdEQzhERjE5NDFDODNBRQorOjEwNjJBMDAwRjI2NDk3MkI4MUFDNzlCODBGMzJDREU5QzczODdENkE5QgorOjEwNjJCMDAwMkUxQjlBOTM4NEExQzYyMDczMDMwQjM5NUU2QkEyRTM1NQorOjEwNjJDMDAwQTAwOTZEQzYwMTM0NjM2NDlDNDUyQkU2RkFCMUVCMEU2MAorOjEwNjJEMDAwOURGMkJBMTIzNURGMTMzM0ExOUMzOTQzQTNGNTQ5QzZBOQorOjEwNjJFMDAwNURGRTlDOTA0MkYwQzlCODRCMzczQzZGRDg2OURENThEMQorOjEwNjJGMDAwOUMxMzZDMkE4Mjc2OEJDN0E3NTAzQkVGQjRCNzg5REUxQworOjEwNjMwMDAwOUQzRTVCQzg4RUYzRDFCQTI4RkVGMjRGNzU0M0QzMDY4QgorOjEwNjMxMDAwMDMxRThEMkNEQjRENjQ4MzdDMDVEODMyRTVFNzdCMzU4RAorOjEwNjMyMDAwMTY0QTAyN0I2NDBERjBFRjYwRTBERjk2M0EyN0Q1NkZFNgorOjEwNjMzMDAwMDQzQkNFNDhBMTdCMENBMkY3NzA5OEY4N0U3NzlENDE3NAorOjEwNjM0MDAwRjU3RTUyOTc0OUVEMUVBREYzRDFCMzdCREQ2N0JDMURFMQorOjEwNjM1MDAwOTVFM0U4QzNCRkQ3NzM1RDFEQkZFRjQzOTZGRjdEMzQ2MAorOjEwNjM2MDAwRDg1NTQwRUZENEIxNDA1NUMwNEJBQTM4MUYyRUJGM0Y3RgorOjEwNjM3MDAwNTVGN0M2QTA0OTgzMDUzMjAwOUY3RDJCOEQyREFCMkY4RAorOjEwNjM4MDAwMDE2RkFBMjM5QzhDNDc4MDA3QkE1ODY4NTIyNkU2RTEyMQorOjEwNjM5MDAwNzUzRDUyOTI4Q0U3MTdFQTI3NEQxQTA2NzhDNEZERTczRgorOjEwNjNBMDAwRUJDMDk1NzBBRDZEMDg0RDAwN0VBOEY0RDU2MzVDMkVGMgorOjEwNjNCMDAwQUI1NTY5QzZGNTI2QUI3NTdEMTFDNkY5QTExRTlERUJERgorOjEwNjNDMDAwOTNGREJBNUM1QzNGMjUxRTdBNTJDOTFEOEVDMTdGQkUwQgorOjEwNjNEMDAwNkZDRUY2MjU4NkUzOURGRjFDRUFFMjdBNkFCMDY4QjdDNQorOjEwNjNFMDAwNDZFQzdCNzc0RDczRDMzRDA5ODk4NzVDQzQyRjU5N0I3RAorOjEwNjNGMDAwQUZBMUZEMzc3NzJGRkJCRUIxRkQyNDFFRkExM0M1Njk4RgorOjEwNjQwMDAwREQ0QUQzMDFEQzQ3NjRGM0I4QkQyOEY5QTlCNzc2NTg1MworOjEwNjQxMDAwNUZCRjgyRkE5RDdFOERFMkI2NjBBNkQyRkNDRTRFRUJDNworOjEwNjQyMDAwNEZGOEM2RkFFNjdCM0MzQUY1Rjg3NkQ0NjgxN0I3NTNDRQorOjEwNjQzMDAwNTdEOEUzRUI2RjhENzFGQjYwNzQ1QjE3RUQzN0UyQkRFRQorOjEwNjQ0MDAwNEE4OEVGQUNFMzREMEFGQUQzNjcxNTlFMkZEMTE3RjBCNworOjEwNjQ1MDAwQjExQkNBNTkxMzlBRThERUE1NkRDRUUwNzUyRTgwRUYwOAorOjEwNjQ2MDAwOEZDNjg5QkMxNTAwOEUyQkZGRjdEOUQ4NEVFMjQzMkQ3RAorOjEwNjQ3MDAwRDA5REE4NEZCMkY2N0VDMENGRTFEOERBNzVDQzRGRkJFNQorOjEwNjQ4MDAwQ0VBQTE3MjgzRUE4RUFBNTM5QkM1Q0I3MDJFMzg3NjkwMworOjEwNjQ5MDAwREVEMjJEQzgyNzJDRjRDMkE0RDdDMEU3Nzk0QzlDMkJBMAorOjEwNjRBMDAwQzYzN0E4RjdENkI4NDQzOUY0N0M0MzAwRjg2NDhEOUQwQworOjEwNjRCMDAwOTdCRkIzRUFCOTA2M0M3N0JDQzY1RUJBMTBDRjI1NjM3NgorOjEwNjRDMDAwQjkwMUZBNUY5M0RDOUM2OTgzQjJCQkZFRDk4NkEzMDM1MgorOjEwNjREMDAwQjAyQ0VCM0Y0QjdDNzZBNzhCOUZFRjYxRUVEMjJDQzRBOAorOjEwNjRFMDAwN0I3N0Q5ODBGMjcwNTM1OUUzNjVFNkU0NEYzOUJGQUE1MAorOjEwNjRGMDAwNDM3RjNBRDIwRkY4QTU3QTJGQkY4N0E2MUI2RkFERUI2QgorOjEwNjUwMDAwMTU1QzRGN0U1Mjc3RDREN0EwMDkzOTkxRkEwM0Q2RTVBRQorOjEwNjUxMDAwQUIzMjE5RjkxNTdBNTgwOUU3MkE3ODFGQzdDQTc0NzM3QworOjEwNjUyMDAwM0VDOUFEODk4QTU4NUZBMEJEMzkyRTE4NzNFRThDOEU5NgorOjEwNjUzMDAwQjJFMEZBREFDMEYzMzY2MkU5RkE0NjQyNTE0M0MyMThEMQorOjEwNjU0MDAwM0MyRjFBNUNBREEyMUU3Q0MxNkU1MERFN0JCQjQ2N0EyRQorOjEwNjU1MDAwQkI0M0U2QkREN0RBQzk3RUFCMTRFNzUwRURDQjgyQUJDNworOjEwNjU2MDAwODdBMTVDRENBQkY5MzEwRTUwOTFEMzU0ODRGNjRCQzU1NgorOjEwNjU3MDAwMkIzOUZFN0ExNkNEQTNBRDQ4NkU0RTFGRTk4RUU2RDFCQgorOjEwNjU4MDAwQ0FGMjcyMTEzN0NBNDhBRTRENEVDRUM3RkQ5MkY1RDk0OAorOjEwNjU5MDAwQjg5RjUxQ0Q5QUVFRkIwMUMyRkJBNkNBOTBERjNGM0RFQQorOjEwNjVBMDAwMzAzRTA5RUYwNUFBODIzMkM2QTlBQTVBOEVFOTQxQTg0RgorOjEwNjVCMDAwNTc5MEMwRUZBM0E5NkUwMUJFNzFGMzdCNjIwMjc5OEM4NAorOjEwNjVDMDAwNkREMThDMDRENEYzM0YwOUQ0NUU4RDI2RUMxM0FFQTNCOQorOjEwNjVEMDAwOTM1QzQwRDc2NzczMDMwNkQyRjlBNTU1NkYzNTM4QkY3MgorOjEwNjVFMDAwMDU2NUREMThDNjQ2NjBGOTlEMDZFNEIzOEExMTM2Q0ExMgorOjEwNjVGMDAwODM2NEExNzc1RTBCMEMxNkZCQjE1MDdFQzg5NTMxRDkzMAorOjEwNjYwMDAwMUM5N0NFMTJFQjc4Q0QyNjM3OURENzgyNzVGOTcxRTRCMQorOjEwNjYxMDAwRUZFQThEQjYxMEVFNkZEOTlDNkQ3NDRFRTcyNTk3NUM0RQorOjEwNjYyMDAwRkZBREU3OUIzNjI4NUMxRjg2RTZGMTM4RTc5MjlCNTI2OAorOjEwNjYzMDAwQkU0REU3OUI1NkU0MUFBMTRCQzQ1QkNCMkUyNkQwMzk0NgorOjEwNjY0MDAwMjY1OTJFNDhGMDUxRkY2NTVBODhGNjc5Q0EyRTdBRTkwNAorOjEwNjY1MDAwRkNEM0RGNkUzQ0E3RTUzQzU1Q0ZGMURDMDQ4RjFDQUZDQgorOjEwNjY2MDAwMzIzQTFFRDFGNUQwQzg1RjNEM0UxOEU4QjY2NDk3REREQQorOjEwNjY3MDAwRTYzMEYxREQ5MjVENjJGRkRDMTVDOEMwN0VEMjc0OEUxQgorOjEwNjY4MDAwNjc4NkZFMUJGMDFBREQ0MUMzQ0IyMTBERDY4MTc1NTIwMgorOjEwNjY5MDAwQkU0MzFEMEQ5MzI2MjBEREEyREY5OTU1RkUwM0U4M0Y4MgorOjEwNjZBMDAwQUY0QjkwRTUwQkYxRUIyN0M0RDRDRjk1RkRGRjg1RUEwNgorOjEwNjZCMDAwQzdDMjkzOTYxMDJEM0JBMUJFRjYxNzQ3NzcxOUUxNUIzMQorOjEwNjZDMDAwNkY4QkU5MkY0NTk2RjUxNTkzRkE0N0Y5RUFBMTU1REU0OAorOjEwNjZEMDAwQzMyMUUwQUI3NUM5NEQ0NUE4RkZCQkU2MzExRkRFNzM5MgorOjEwNjZFMDAwODVGQ0VBMzdFOURCODc1QzVDQ0Y5NjVEQ0NCNUQwM0JCNworOjEwNjZGMDAwOEFGNzNDMEI1RDRFRDc2NTVBRjYyNTE3Q0M1QzQyRkJGQQorOjEwNjcwMDAwQTcwRkExQjA2MDNGMkNDNENGQzE2Q0VBQzdDMkE2QjgyNgorOjEwNjcxMDAwQ0RGRjg3RTNBRjg1RTNCQTVFRTBGODg3RkY2MjM4N0NBMAorOjEwNjcyMDAwOTZGMUEyNzAwQ0I2QzBGN0Q3QzJCMUY1Q0VCQzZGRTczOAorOjEwNjczMDAwNDA5NUM3OTQ5MDMzMTdENzg1MUZGMUJDMzUzNTc5OTJCMgorOjEwNjc0MDAwQUYxRUY3NEI3RUE0NTFEQzdEMDhFM0Y5MjhCOTFBM0I1NAorOjEwNjc1MDAwQUE4RDQ0Rjk2OTBBNjBEQzgyMkRFM0Y2MEFCQzVGNjkwMAorOjEwNjc2MDAwMUY0OUVCMTBGOTBCODNGNjNBNjY2MTVFNDU2RTU5NjA3RQorOjEwNjc3MDAwMjEzRTU5RkY3Q0RBOEY5MUZCOTg0Q0M0RjVFNEZFQ0JBNworOjEwNjc4MDAwMTA4MzE1RTFCRDdDNkYyN0NDQTI3NTJBQjc3NDY2MDUwRQorOjEwNjc5MDAwQzZCRjU1Q0ZFODA0NUMwRjFGQjM4NTQzMzg1RUU4NTE5MAorOjEwNjdBMDAwM0U1RTlBMkREQ0VDNDQ3QkM5M0JEOEMwRjUyRUNEQ0JBOAorOjEwNjdCMDAwRjUxRjVCOUQ0RkVCREY1NjVCRUVENThCMDA4RTE1NEFDOAorOjEwNjdDMDAwNTFDMjFCODhFN0U0NUM4QTYzRTM3QkJDMDc2N0FCNTg3NAorOjEwNjdEMDAwQjdENDY0QkY4MUVCRDQ1NkIxNkUyRDE3RkE1REJFNEZBRQorOjEwNjdFMDAwNEMyOTlEODU3NkM0RjJENTQ1OTM5REUzNTEwRjA1NTZGRQorOjEwNjdGMDAwRjY4MUY1NjZEOUVBQTIxNTk5RTM3MUJERjFFNTNBNjEzMgorOjEwNjgwMDAwN0Q1OTk2NTBCNEMyMDk5M0Q5NUFFRkVCNkIyNDQ3Q0IwQworOjEwNjgxMDAwNDNGRTAyQUIzNUU5ODlBMjE1NjhBNzM0QjgxNzk3QTNFMAorOjEwNjgyMDAwOUQwM0RGMEZBMzVGRjg2QzhBRDQzQkZDN0JBRUQ0NTM4RgorOjEwNjgzMDAwQTg5NzQwOEZBOUY1RERFNTEwRUFBNURDNkVCRDUzNDRBRAorOjEwNjg0MDAwN0E2N0ZCRDMyQTk1Q0I2MDNDQjQ3QjYwMUUyMUJDQkYyQQorOjEwNjg1MDAwQUI2Qjg4NDZGRTkxMEI2MDQ5ODBCMjZCNTgyRUVENkI5NgorOjEwNjg2MDAwQzFCQzU5MDJDNkY1ODdGMUVGNzI1RjQyMUY2MkEzN0Q3QQorOjEwNjg3MDAwMDlBQzhGNzg3NDY1RjFGQUZBMzQ3RTlFNTlGN0I4Qzk3RAorOjEwNjg4MDAwNkY5M0ZCMUNBQUQ4NTc0QjEwNzkyNDhBMzE4RENFRDkyRgorOjEwNjg5MDAwM0FENzhFNUM4QzdFOTQ3M0IwNzVGRjU4OEZDOTM3NTE5MAorOjEwNjhBMDAwNjNGMzRGREMxMUIyQkIxQTEyNDQ5Q0I5MEZDQkE0N0IyQgorOjEwNjhCMDAwMERDNDdCQzZGQzIzRjE5OTdFNzc0MzExREQ3N0U3NjEzOAorOjEwNjhDMDAwMDZFNjNCNjcwNjIzQ0M2QzJGQzlBNzAzRDY1MTlGNDkyOAorOjEwNjhEMDAwNkUxQzZFMTY4ODk3RUY3MDRGMjJCNzg3REQxNzM1RUU2NgorOjEwNjhFMDAwMjcyQTYwREZFMDNBRUExMTc2QjhCMDhGRUNGMjFFQTJGOAorOjEwNjhGMDAwOTg3NTU3REE0Qjc2NzFERkREOTI5QjI2NjZFMEI5MjFGOQorOjEwNjkwMDAwRDUxRDcwQTI5RDczQzAxODQ5RkIyOTJBRjNERjVBNjQ3NAorOjEwNjkxMDAwQjI3NzFBMjIzNzUxM0M1MTMzMDIwQ0VEOUNGREMyQ0VBNgorOjEwNjkyMDAwNTEwRDNGMzNEQjM5OEQ3NUUwODBDMzVBQjVBRDMwOEZFMworOjEwNjkzMDAwRUU5Nzc5Q0ExNTcxMEU0MkZBM0U2NkYzQTNERTM4MzQzQgorOjEwNjk0MDAwQjIzQ0E0NjAzQzcxMjkyMzM5REQ1Njk4M0UxMUY3MDMwRgorOjEwNjk1MDAwQjY2OEE1NDlGN0EyQkMxQzg3RjE3QzlDNkU3Q0ZGNzlDOAorOjEwNjk2MDAwQjk4MkYxRUYwQkNFRDIyNEQ0MDdFQjkyOTlDNThGMkFDRQorOjEwNjk3MDAwNEVFNEZFQzg5MzA5RENFRTk0N0U0MjIzQzAxMzAxMzgzNgorOjEwNjk4MDAwQjQ4QjU3RDM3RDNCNDM4NDVEQUFDRjlDNDRGMTJENENGRgorOjEwNjk5MDAwRDNDMTc4QTU4M0Q1ODYwQzc3RjQzRTM5NDdBNkNEOTIyRQorOjEwNjlBMDAwOUZBODVEMkNBMEY4REY5MzA5MzZDQkZFRDFDM0UyM0U1MQorOjEwNjlCMDAwNDA1OTc2QjI1QTFFRTcwNTlFOEVFN0JGQ0QxMjcwM0E1NworOjEwNjlDMDAwQzAxRUYyOTE3RDEyQjMzRkRGRDMzRTIyN0I0NUQyQTc5QQorOjEwNjlEMDAwREI0RTUxRjhCOUNEREVFQ0EzOUE4QjM2OEI5RThEOUVBMworOjEwNjlFMDAwMzdENzQ5MkY5RjEzRTdGOTY1OUU4NjVCRThCM0M2Q0M3RQorOjEwNjlGMDAwNjBEM0Y1MzlEMUYzRkI5QUM4RDc1ODJCQ0VFREIzNEMwMQorOjEwNkEwMDAwQURDQjdDNEUzRTExRTMzMUYwQkQ0MUU0NkQyNEM2OUMxQworOjEwNkExMDAwQkI3N0I5OTc5MEJGRTAxQUFBNTlDRTY5Mzk1OTkwREE3NQorOjEwNkEyMDAwMzk3Q0Q2Rjc1QTY2RUM3OUZFNTA3NzlFMTZFNTE1NkFFMgorOjEwNkEzMDAwRUM0OTg1MEVFRjczN0JCNzlGQzg5MzNBOUJGODdFMjE5NAorOjEwNkE0MDAwQ0EyRkQ4QkIzRjc3RDIzRTAyM0ZDNzI5RTM1OURGRDRENAorOjEwNkE1MDAwM0VERThGNzZENTE4RjQwQkE3OENDMDdFQkYyM0Q2QTM1RAorOjEwNkE2MDAwMkM1NjlBQzUzNzA3OUIxOUU1RjUyNEY4REIxOUJGMTM5NworOjEwNkE3MDAwOENFQzJENTVFQUI5RDAwQjBERTg0N0E1OTlFRDNCOTM2OQorOjEwNkE4MDAwQkQzNjcwQ0QwQjBEMEREQ0VGQTBGMjc3NTZBRDI2M0Q3NworOjEwNkE5MDAwQjhDMjI1Q0IyQkE4MENFQjU1MDRGRDFFQjZDN0UxNDNBRAorOjEwNkFBMDAwN0U4MkY2MDE5NDFCNzY2NzFFRDlDQjZBMkVCOEI0MDA5RAorOjEwNkFCMDAwRjcyNEJDOUYxMEUzRjk3QjFDNUJEMTlFMDVCRkY2NEUwQgorOjEwNkFDMDAwOTc4OTRGQ0Y3QTRFNjRCM0ZDQjhGRDg1MkNGRDY1N0Y2NgorOjEwNkFEMDAwQjNGRTYwRkMxNkNDMDM5MkRGMjc3OTM3NDY1NERFQ0UzNgorOjEwNkFFMDAwODdFRDU4RkZCNkY3NDNEMEZGNjMyRjNCRThERTEwNzkwMAorOjEwNkFGMDAwMEY3MjJDQkYxNjI2NzJCQjAxRjU4NjM5REY1MjlGMzkwMworOjEwNkIwMDAwMzc4MENDMjlFNUQzOTE5OTYwQzlEMzk2RjJBQTVEMUM1MAorOjEwNkIxMDAwNEFGMjI5REJFRDRGQzhFMUY3NzM2OTAxOEFBQjY5MTdDNworOjEwNkIyMDAwRjM0OUZFOUYxNDc0NkRBQzMzMkUzMzRFNEEyRkUzOEMyMQorOjEwNkIzMDAwQTQ3RTdBMUZBNzUwRTgwOTI2RjZCMzM0QzM3Q0NGNEI1NgorOjEwNkI0MDAwNkZGMjFBQkI3RjE3QUJERkU0NTNFQUI3RERBMkZGM0I1RQorOjEwNkI1MDAwMTJBREYxRTFGMjhEQ0Q0NzkwODU3RTYwMEJDRTQ4MUNFMQorOjEwNkI2MDAwODM3OTU5RUY3OTcxMjlBRUI0NDUwQTUwREUxRUU4RjlGMAorOjEwNkI3MDAwQkUxQTI3QjdDMEM1RjcyN0YyNzYyQzNBODhFQzNBMzcwOQorOjEwNkI4MDAwMzFEODg0RjZDQzdEODkyMjZFOUYwOUVCOUE4QUVCMTY2OAorOjEwNkI5MDAwQ0YyQjVBODdERjMxRkUxQ0Y0M0QzMTE5RjVENEI0MTJFNgorOjEwNkJBMDAwOEEzRjZGNEIyQzdEMUREQkFEOUE1RTQ4QjEwMjA5RjcyMQorOjEwNkJCMDAwOUEzQTlFMEYyN0Y1QTUxQkYxMDVGNTFENUEyREUxQ0QzQgorOjEwNkJDMDAwRTEwRTQ0RDBCRTY4NENGQ0Y1NjRGNEIxNTQ4RENCNDE2OQorOjEwNkJEMDAwRTU5QUJEMjQwNzRFQ0Q0RjdDRTU3NERCN0NCOEJFM0IwNworOjEwNkJFMDAwQzFCRkMzNzVBRkRFNkRBMzc4RDI3MkJDQTczNzA3Q0YyNAorOjEwNkJGMDAwMDM0QzM1NTA1RTE3N0I3MjMzRDgyNUY0QTM3NjMxNUQ5NAorOjEwNkMwMDAwRTg1RkVCQkQzNzdGRkI3MTUyQTk3RDhGRkI3NTBFOEQ2MQorOjEwNkMxMDAwOEY2MDdGOUE5RjUxN0UwQjIyRTE0MzkzNUU5NUVCN0FDMgorOjEwNkMyMDAwNkNCQkQ4RkUyNTNFMjU3RTFENUE5MEYwQUFBM0REMTAzMAorOjEwNkMzMDAwMDdBRUNEREQ3MTE5QUUwRjMzQTRGRTRDN0UzQjJGMDJBMworOjEwNkM0MDAwNkZBQjk0NzYyRkRBMjdBMDE3MzcyN0EyNUUxQ0RFRjVFQworOjEwNkM1MDAwNkY4QThGRjQ2OTNBQjc2NzQyRjIzRTAxQ0JGRDQ1MzI0NQorOjEwNkM2MDAwMkVBRkJBQjk1RDIzRTE1RkZDQzY2MzRFRjMzRTUxMkNGMworOjEwNkM3MDAwQkNCMUVCQTUzQkRGOUE0N0UxRUM5RjEwNzM5RjZGM0RFMgorOjEwNkM4MDAwMUY0NzJCMjVCRUIxNEYwODM4NTE0RUVBOEQ5MTA2REFDOQorOjEwNkM5MDAwMkIwRDlBRUY3NzAxQ0FGRkIwOTNERDBDNzZCODY1N0NCNworOjEwNkNBMDAwRjk1QzI3RUVFRjNEMkNFQ0E4RDhFRjFFNzFERjcxRUNGQworOjEwNkNCMDAwRkI4RjA1RkVENjFEQjg5QkY0NzA2RkY0QzMwM0NGNDg1RAorOjEwNkNDMDAwNUY0RjJFMzNGMEZDOEM1REMwRUJCRDRDQkZCREYxRDFFRQorOjEwNkNEMDAwMjMwNzc4NUM1NzFCRTcwQ0EzOEIxNTNCOUU2QTJGMEQ4RgorOjEwNkNFMDAwRTA3OTJGNzUwNDIzN0I1NzFEQzBDNzA3NUExQTE4MTc2MAorOjEwNkNGMDAwRjY4RTRFNjE0MzRERUJFQ0FBQzFEM0Y5RkRDQjY5MDY4QworOjEwNkQwMDAwOURCRjUzM0RCNkQyNzg3NkE2QzQ1MzZCQTJDREIyM0Y5OQorOjEwNkQxMDAwOUYyOUY5NjZDOEVGNjkzRkM5QzQzNzFGQTE3RTg5RTU3RAorOjEwNkQyMDAwOUI1NkU0RTEzNDBFODc5OTlFQUIwNkU3NjZDNEEzNEZGOQorOjEwNkQzMDAwNTQyRjcyQkVCQTFDNUYxNDRFRTBGQzlFMDFDRjJEMzA2MgorOjEwNkQ0MDAwOEYxNjcxOUY0NjE1RTIwQUZDOURDQUJCRENDQzgwNzU4QworOjEwNkQ1MDAwRUQyQjRGRDExNzA4NUY2MURCNDE5RUVGREU5MjQ2Q0VFRgorOjEwNkQ2MDAwNUZFNTg0RjhGMkIyQzhDREU5QjJDOENERTNBODQ5MjdGRgorOjEwNkQ3MDAwMDIzRkM1N0JDMzVCREExMjdDMEE3QzZBNDk4OUFGQTdGNAorOjEwNkQ4MDAwMEJEQzUyQ0U0NEZFODRENjVFODBGNjg4QUM1RjM4RDNFRQorOjEwNkQ5MDAwM0E5RUNGQ0REN0JGMDFCMjVERThENjE0QjRDQkE2NjI4MAorOjEwNkRBMDAwMTc4MEM3NDE3RTg1RTc3MUI0MjY4NkYxN0U3QUIwNkE4NgorOjEwNkRCMDAwQjVEQjAwQUYzQjg0RkZCNzAzRkNDMjY5RDA2RjdBMDIzQQorOjEwNkRDMDAwMEJFMkJDRDNGQTQwMzk5RkRBMDc3NkI5QTNGREJEQzlGRgorOjEwNkREMDAwNTFDNjI2MEYyQUREOEVGRDREQ0VDODFBQjEzQzg3QjdBRAorOjEwNkRFMDAwQzc3RTBFMjdCMDA2RTdDODI4REU2Rjc1MDBDQkE1RTA4QQorOjEwNkRGMDAwRjc1MERGNDVGOUQxRjc4NzUxNzZBMTVFN0E3QTdCODEyQQorOjEwNkUwMDAwODJGQjkyQjY0MDNBQUUyMzFGMURGQjAxRTVDMTJFQzBBNgorOjEwNkUxMDAwN0I4QzlDNzhBNTg0NEE3RTUyRTE4OTUyQkFCN0VDNTNBOAorOjEwNkUyMDAwRkM5ODg1RjcxRDk1MEU3MzhGQzFGQzMwRUIzREE0NkM2QgorOjEwNkUzMDAwM0IzRjNGMjNGMUQ1OTMxRkI4RkUwMTM4NDNDRTE0MEJERgorOjEwNkU0MDAwOUM2QzFDQzJFREU0RUQ2MkYxREJGRDE0N0MyQ0U5MDlDNQorOjEwNkU1MDAwRThCOUM2MjNFODg5NzJEQTIyRUVDNUVDRTYxQjcxQUYwOQorOjEwNkU2MDAwNDI4N0I4MEY2QTc2QTJCODE3Q0FFMEZFOTVCQ0U3QTRCRAorOjEwNkU3MDAwNDUwQjI0QTI3RDNFQkIzQjNGMjE0MEU3OEYyQTVEODEyRAorOjEwNkU4MDAwQTRGMTQ4Qjc2M0RDN0YzQTVEQzRFRkE3M0I2RDBGMjRFNAorOjEwNkU5MDAwQTFCQzlFM0VBNjJBRjU5NERGQzFGMzNFNjU1RURENjk4NgorOjEwNkVBMDAwQkI2RkNERDVGMDdEQ0UzRkFCODE3QUZBNkNGNTBCM0E1NgorOjEwNkVCMDAwNTg2MEQ0QkZBMjlGRDRBQUQyM0U2NENFQTNCM0Q0RTE3QgorOjEwNkVDMDAwNTA3RjJFMzgwQ0E4OEY2NjE3QkI0MzY4QzdCNUZDQkUzMQorOjEwNkVEMDAwRjY3RDVDQ0ZFNjNDRURGMDJEODM3MTVFREIzOEVBMEI4RQorOjEwNkVFMDAwMkM5RjVBRUJGMTM5MjhERTlBQUJFMEZERjE0QkQ2RTc0NworOjEwNkVGMDAwMThCNDBGQjk5NDg5MzhGM0M0OTI2MjU4ODM5RkM3QTExQworOjEwNkYwMDAwRTVGRTg1OTNFRTkzMTdERkFCMUIyN0MxRkNBRTRFNkJGRQorOjEwNkYxMDAwQjEyMTJBRkZCMEI2QkExMUNGQjNBREE4MkZDREM0Mzg3NgorOjEwNkYyMDAwQzI1QUY3RTQ0NjhDMjNBNEE3MDdEQTZFODA3NTNERTJDNworOjEwNkYzMDAwQkVCMTA0Q0IyRDRGQzlGRUE2MzQ2MkRDRTAxN0I2NjBBQgorOjEwNkY0MDAwOEUwMkRGNEZCQjY3OTU1MEZFRjUyMEQ5RkY5MkM2MDAzOQorOjEwNkY1MDAwQUMwOUIzN0Y3Q0Q1MTcyNzMwNUY3QjVENjMwOURBMDUwOQorOjEwNkY2MDAwNDA1NzYxNUZBRjIxRjhFNjREOTBFNTI2QkQ3ODMwQjQxQgorOjEwNkY3MDAwNEY2NDk2NzhBQTNEMUE5N0EwNzg2RDRCQjc3REJFQTE1NQorOjEwNkY4MDAwMDRFMzEwNzMyNkQ2MTY2QkQwN0ZFMUJBQTcxQUYzNDEzQgorOjEwNkY5MDAwQzU4RTZEMkEzMjAyNTBCRTdFRERBNjEyNUNGRjVBNThBNQorOjEwNkZBMDAwQTAwMkVEOTIxQkQ2M0Q1RDgyNzFGOUQ0M0VENkZFNTMxMAorOjEwNkZCMDAwNTUxMTk3NjdEQjFBQjFCRkMyOTk4MTExMEFCNEZGOTdDNworOjEwNkZDMDAwNzUyRjM1QTIxRjkyODZGOUI5MzBERTA1Q0Y5RjFBNDM3RgorOjEwNkZEMDAwRkRBM0ZBRjM5NkU4M0Q1QUFCNTEwRUFBOUNFRDQ3MzA1QgorOjEwNkZFMDAwNTQ5QkJEQjQ0QkU3NzlEQjQyNkZGNEU3RkNEQzVEMUVEQworOjEwNkZGMDAwREFDRUYzRUI2NTM5OTM5NzVCOTZDNUQ3NDM4RjdBQjlCMQorOjEwNzAwMDAwQkZEOTkyMTBGRkZCQUI0MkVGNDg3OTQ5M0FDMTAyM0IyRQorOjEwNzAxMDAwRTNDOENEMTZCN0ZCRkY0OEVFNUFGRjZGRTlCNUU0Q0JFNgorOjEwNzAyMDAwRThCNTY0QTlENzA0M0VGM0FEN0ExQTg2MTFGQUZFRUFGMAorOjEwNzAzMDAwNUNENDBGMEIzMEQ5Q0E2NDJGMTRCNjREQTc3NUU0N0IwRQorOjEwNzA0MDAwNUU2RTNGMzMxRjZGOUY1NkNDRjM5REJBNUU0OUU0RjdFNworOjEwNzA1MDAwQTQzQURCRjJDQ0ZCQTJDNzA1M0U4QTFGOUVGQTA0OUQzMAorOjEwNzA2MDAwNzc2RkIzMzMzQUE3QjJBQkU4OTI3OUE2OTUxOERGMzVCQworOjEwNzA3MDAwRjkxRjk1NUE4NEZDRkE0QThDRUY4RUMyRkVERUE0NzM4NworOjEwNzA4MDAwQTZEODBGOUU0M0MxN0QwQzhDQ0ZBNjJEOEY0RjdGNjk1NAorOjEwNzA5MDAwNEY1NTVFMzQ1OEE4NEZDRjc1MzdEQTdGMkEwQjhEQkExQgorOjEwNzBBMDAwRkNCQ0EyRkQ1OUUzMEYzREZCRDNDNTdFNTBDQ0ZBQTgzMgorOjEwNzBCMDAwQzc4N0YzQ0Y5MjRGMDFERjM2MTM3RkNEMTNGQzI2RjczRQorOjEwNzBDMDAwOTVDRkVEMTlCNkQ1QkM4RjJGQ0Y4NzgxN0VGRTI5RkVENworOjEwNzBEMDAwMEU0NjA4RjQzQ0RBOTk4NTVBRTA2NkFDNUZEODk2NDJEMQorOjEwNzBFMDAwRkI0QzkyM0YyNDVGNDhCQUI2QTRENDUyRENBRUVCNDlDNQorOjEwNzBGMDAwODVDRUVCQzVDMjY1RjM3MDNBMTY2RUU0RjczMzY2Q0MwNQorOjEwNzEwMDAwMENBQUU2RkJFNEE1M0M0MEZGMkRBMkZGRDFFMzQ4N0U5QworOjEwNzExMDAwMzY3Mzc5MDBCOUI5MTdFNTE3RUZEQkMxNzlGOERCMEJFNgorOjEwNzEyMDAwQ0NCRjNCMjFFMUFGNDA1RTRDMjMzQTcyRkNCRkVDQTJFNgorOjEwNzEzMDAwRkRGRUQ4NzUzMjhBRkZCRTk3QTE2NzM2RDE1M0RBNDE3QQorOjEwNzE0MDAwOTVCREFFOTc1RTlFQkY3ODIyRTJGNTYxRkMwOEY5MUZGRgorOjEwNzE1MDAwRjU0OUYzODc3NDdGNUM0QkFCQ0ExNDFGOUYzN0VBQURDOAorOjEwNzE2MDAwQzI2RTdERkNGNUUxODkxQUQ5NjNEMUY1QzM0Nzc2OTlFMgorOjEwNzE3MDAwRDQ5RjExQTczMzVBQkY2QkNERDc5MzcxOUYzOTU1REM3QworOjEwNzE4MDAwQ0Y5Q0FBRTIxMUVDMjgxQzIzM0M1QzhGOEQwQkM2OEY5MAorOjEwNzE5MDAwODcxNkI4M0Q5QzBFNjIxRTRGMkU5REM4M0U4NEY5N0YxNworOjEwNzFBMDAwNEZBQ0YzRTNEQTQzRjRGQjQ5NzZDNEUzOTgyODNFQTRGQQorOjEwNzFCMDAwM0VCQkQ1RDFGRUEyMzhGNzYyRTE0NzU5MDYzQkE3REFCQworOjEwNzFDMDAwMzZDOEY0RERDREY1QUUxQzBGRTA2REMwRkI5OEQzRTAwMgorOjEwNzFEMDAwODk1N0ZGNUZGMEU0ODg3RDc3Q0U5NzI3Rjc2NDZDQTEyRAorOjEwNzFFMDAwREY2RDE4MTQxODgxRkE0NkYyMTdBQzI3NjJCRUI2RkJBMQorOjEwNzFGMDAwQTdCQjM5RkY0RjhGNDM4N0U5ODJDRkU2NkRFNEYzNkY3QQorOjEwNzIwMDAwRjk4RkUyOUI5MTBGNUFERTRBNDk1RTY2RTJGNzdBQTE1NgorOjEwNzIxMDAwNTc2NEJGNTI5RTY0M0JGOTdEODZFOEVGNUU4Rjk3OUU3MAorOjEwNzIyMDAwRjUwMjdGMDg0N0JDRkMwQUQ5MEVFNzRCRkE3QTI1RDc0RQorOjEwNzIzMDAwRDczMEVGMTBEMjA5RTYxREMyNzNGODE3M0M0QTBDNUUzNgorOjEwNzI0MDAwQzVGQTIwRjA1REE1MDM5RTAxOEYzQkVDQTFCRTk4QUY2RgorOjEwNzI1MDAwOTVBNkYyN0M5OENCQzkyRkNDNDdGQzhFODA4N0Y0NEU0NAorOjEwNzI2MDAwNkNGRjZCMDU3RjZDMTFGN0U4MUVCNjgxM0NBMzlDQjlERgorOjEwNzI3MDAwMzlCQ0U3RjY2NDUxQkY3NUEyREVFNUY1RTE5NUM5Q0ZFQgorOjEwNzI4MDAwMTY5MUFGMDJGMDUzM0U2NkQ1QUJGREI2NThFMUFGMTc4RAorOjEwNzI5MDAwRjAwNzk3RTMzOUMyRDQyNzk4N0YzOTIzQkM0NTEwNUZBNAorOjEwNzJBMDAwMjk1RUJFOUVCNEU4NDFCMkRGQkE5RTY0RTRCNzBFMDEyNworOjEwNzJCMDAwM0JDMjA3RTU5QTUyRjc0ODI1MjcyQUE3NzlDRDBBRDE3QworOjEwNzJDMDAwQjE3MDAzQUNEMzg4MzdBN0M0REIxQjNCQ0RFMzZFRjBCMgorOjEwNzJEMDAwNzgyQ0Y3MTA1NDBBRkEwRjgxRjVGREE3MDBFRjEwRTg5QgorOjEwNzJFMDAwRTc0NTgyOUJDMzc1RjJGMUU2RUIzMTNFRDdCRERFMEI3RAorOjEwNzJGMDAwQkVFODA5Njc0NEVGQzdFMUE0QkMwQUI0Nzc3Q0EzQTM0NgorOjEwNzMwMDAwNzA2MkZGOTRFN0UzMkU1RDg2RkQ1NkZGNjY3NzNGNzM1QworOjEwNzMxMDAwQkYyRjc2RjczQjdCQTIwQkY1RDg3QUQwQUJBNDBFODJCOQorOjEwNzMyMDAwODdGMDFDQzlEQ0JEQzkwNkRFRjcwMEZFODIwREZENDJGOAorOjEwNzMzMDAwMzlFRTVDNERGRUVFNEY3QjIxREU3NzlFRDczRDBFRThBOQorOjEwNzM0MDAwNEY5M0ZFM0JFMDcxRjNGQUNFODMwM0YxMUU2REE2RjE3RAorOjEwNzM1MDAwRjUyOUFERTlGNDhGNzAxRkEyQjc3NUY1NkZDNTBGNDAyMQorOjEwNzM2MDAwNDc5QTc3RDcyRTk4OTcyRjhBQkY5NkU2NTlDQjVDQTg3NQorOjEwNzM3MDAwMkY0RjMwM0ZFQTRCMzlBRjIxMzNEQkJEOTg3RjUzMjM4QQorOjEwNzM4MDAwRjQyOEUwQzU4NjdDOTBGQUNGM0VCNkRDNjdEMkNGODI4NworOjEwNzM5MDAwN0U0MzE5OTczN0U5OUYwQ0M1MEQxMjI4QkZFMzI5MTBDQQorOjEwNzNBMDAwN0E4QjUxOUNFMEU0QUJGQjdFQ0FFRkVERTBGNEFBOTk0NgorOjEwNzNCMDAwQzlFOTJCRTVGNTJCNEYzMEM1OEJGNkU5NUQwRjRERTRBMAorOjEwNzNDMDAwOTdFMTQ2RTg5RUU2Q0EwRDdDMUNBOEQ3Q0M0ODZFREI0OAorOjEwNzNEMDAwQjI2NzYyRkUyNUYyRDM5ODlFNzQ0QjJENkQ3NjUxN0I3OQorOjEwNzNFMDAwQzFGRjY3NUYxOTFFNDYzRTRDQkJCREFCMThERjAzM0ZCNAorOjEwNzNGMDAwMTAzQzJEQ0Q5RTMwRkFDQjY0MkY2M0ZCN0QwQTVGQkYxRQorOjEwNzQwMDAwNTg5MEYwMzI3N0E2RTEzN0YzODk4NEFGOUJFRTBDRTgxMQorOjEwNzQxMDAwM0UzQ0ZBN0VDODRDREU2RjREMkJGNENCRkIyMUY5QTkyNAorOjEwNzQyMDAwQkM5RkYxRkJBOTA1N0Q4MEQ1NDI4RTkxNTFCRDAzRTUzRQorOjEwNzQzMDAwODgyMzI1OEE0Nzg5M0ZEOUJFRkE3RUZFREIzRDE4MkY3NworOjEwNzQ0MDAwNDAzRkFGODZCNTUzRENCNDUyMkRFRDhGRkUxQUNCNzBBMgorOjEwNzQ1MDAwRDAzOTVCRjA3RjQ5RkYxQzc2MzFDRDA1RUQ1Rjg3Mjc4MgorOjEwNzQ2MDAwQUVFRjkzRDU0NTc0MUU2QUYyMjA4NUU0MUMyNDQ5QzYwQworOjEwNzQ3MDAwQ0JFOEY3QzY2RUJEMjE5MUU3QkQ3REY1RERDMTM4OUYzNAorOjEwNzQ4MDAwQjQ0NENFNzdEMDhGNTNGNEUzMjQzQjU1RThDMzVGNjcxMQorOjEwNzQ5MDAwODMzRTM0RjlBNTg3MTU4NUZBMzlGQ0FENkJCNjJFNTdCNgorOjEwNzRBMDAwQTJGM0M0RkVEMDZFMzhBQzRDRUI0RkY2QUM4ODZCMDA0OAorOjEwNzRCMDAwREUyQ0Y5Nzg1MUZFMEQwOUI4REFCM0YxQkJEOTRGNDI5MQorOjEwNzRDMDAwQkZBNkRCQ0Y2MjQ5MEZERjA4N0VENUQ4MjlDRDExQkMxRQorOjEwNzREMDAwNTJCQjNFOTQ3Q0UzRjc2MERDQzlFMDY3Qjk2MEZFRkQxNworOjEwNzRFMDAwOTE4RkQxMkZDODA5QTk1RTg0NkI4ODQyRjc0NzFGNDk0NQorOjEwNzRGMDAwMDhFNkYzN0I4OEY5MzhFOTIyRUU5NTJFRjJCNEQxOUVBNgorOjEwNzUwMDAwQzdFNzM2MkY1RjJGODYyN0YxRjVFNUExMjQ1RTRFRjdGQQorOjEwNzUxMDAwQzY4RjkzM0QyMUJFRDc4ODdCQkI1NzE3QzVDRjA3MUNBRAorOjEwNzUyMDAwRTdCNUM2Mzk2RjE1RkIzRUUwNkY4REYzQTZGMUZCRTBDMgorOjEwNzUzMDAwNzk5RTMyREYyNzAyQkI5NkYwNUJGQ0YwNENEQUY3QkM5OQorOjEwNzU0MDAwRDA3NjQ3MTJCRjlGODJDQkZGQzc0QUUwREZFRTUyRjBGMgorOjEwNzU1MDAwNTk0QUY3MDM4NjdFQUI1MkJFRkY0NzQ2QzA4QkY5NjE5RQorOjEwNzU2MDAwNTUwOUYxRjNDRkVGMTU3MDU0ODlGOTlGQUVFM0Y3NDk1MAorOjEwNzU3MDAwQ0NDM0ZENDhEMDE3QjcwQUZGNkM0MUQzNkQyNTQ4RUY0NworOjEwNzU4MDAwMDVFMEJGRTM3RUE0Q0M3QjkwRjQyRERCQTQ1QUY2MjM2OAorOjEwNzU5MDAwRTZFMTdFNjQ5RkJGQzY3RkYwRjdFMjNGOENCNkY4MEY0RQorOjEwNzVBMDAwNzJEQzU4M0ZFMjY0NURBNjY1REY2NDc2RDMyMDcxOEY5QworOjEwNzVCMDAwMDdBRjNGODdGOTA5RUUzOTJCRkI1OUY2NEZEOUNBQjQwQgorOjEwNzVDMDAwMkJCQkU3MTRGQzg2NTA1Q0Y4NzREMkFGRjJGREM5M0FDRAorOjEwNzVEMDAwMjcwQjk5RTFGODY0MzBFNThEOENGMzA2MUZGMDVBRTAzMworOjEwNzVFMDAwNDg2NDIxMzMxQzZDMDJGRjVEMkYxNzhGNUIwM0RENDM2MgorOjEwNzVGMDAwNjY3QjNBMTZBRTU1REVCRkQ2NEZDQkVEMDVDRjc5RkY5MQorOjEwNzYwMDAwMjU3RTVBRTEwNEFFQ0ZGMDUyMjJDQzgxMTkzQkM5NkFFMworOjEwNzYxMDAwMzc2RkY2RjI3NTcyQjMzN0QxNjIzN0NGOUQ2OUFEQjc2OAorOjEwNzYyMDAwNDVENERCMjJFQTVEQ0VGRjM3REJDQkNBMjBENDFCQkNCRQorOjEwNzYzMDAwM0ZGOTdCM0MzOTY3REVBMkJDRDNGN0JDREMwRTM4OUUzOQorOjEwNzY0MDAwMTREODgxRjJCODU2RTRFOTZGRjlDQkExQ0MzOTY4NUY2MAorOjEwNzY1MDAwRkNBQjlERjIwNDhBMzYyRjU5OEU3OUQ0RUU2NkM1QTAxNAorOjEwNzY2MDAwNzM0QUFENTYzRUZBQzdBNUNEMDNFNzAyM0U1RTEyNzREQgorOjEwNzY3MDAwQUFGNEYzNzk1NEZBMjNGQTYwMzdFNjc1RjNGMUZCMzc4RAorOjEwNzY4MDAwMUY1MDM0OTM5RUU4NUZDNkVCRURGM0RBMkQ3MUY3MDNEQworOjEwNzY5MDAwNUU3RThGQzQyRkJEMzIzRTE4M0U3MDUzMkFENjBGNjhDRgorOjEwNzZBMDAwQjhBRUY0QzVERkMxMDE3OEZBRDYzMjNBMDdENTc3MzRERgorOjEwNzZCMDAwQjdDN0ZFNzFGNDE2MDU3Rjk3NEJDRTczQTU2RDVBQkUwMgorOjEwNzZDMDAwMDFFRDU2QTYyN0ZBNTE0RjY3MUJDMUQ3NzE5RTk1RUY2MgorOjEwNzZEMDAwNDUyMjE4QkUxOUZCNUU5Qjg2RkU5MkRGMDgxQzQ1N0U4NAorOjEwNzZFMDAwOTVGM0YyQTk0NjVGNUM2RjEyREZFM0YwMzU3NUM3MjFCMQorOjEwNzZGMDAwQjg5RTY2NkM4REYwNUZCNjcyM0I1NjY1NDcxOUI3NzNERQorOjEwNzcwMDAwNjlCRjM2N0REOTUwNUEyRkU0N0NEMjUzODRCRTRENjc3MQorOjEwNzcxMDAwQzFERDY0NkZCMzk1QjRERTM5RjlGQTk5QkU4Q0ZGOEU4MgorOjEwNzcyMDAwOUVBNDY3MzQ3RTMyNkMyNEM2NEYwNkFEOEQ2OEIzQTEyQgorOjEwNzczMDAwRERBQjlCNkM3MUVGREQzODI1RjAwRUYzRjgwMEU3MTczOQorOjEwNzc0MDAwNEI5RjVFRDcxRDUxQ0ZERTRCNUM0QUYyN0JFMjk0RjgzMworOjEwNzc1MDAwRkUxRTYzOEZEMEY3QTJDREE5Rjc5MDVDMzZFODc0NEY3OAorOjEwNzc2MDAwQTJDNEJGREYyOEZEMjNDMkQzQjc3OThCODJCODM5MjlFMQorOjEwNzc3MDAwRjIxOTRFQUVGRUE5ODJGNkQ2NzcxNzMyNDM4REMzNEY2QgorOjEwNzc4MDAwRERGMkJBNzRGN0MwQjkyNjdEMDNGRDEzM0RCNkM0RTQzQgorOjEwNzc5MDAwQTc0QkZGQzQ5REM0RjVGODNDQTM1NDRENEFBMzdDNjE5QworOjEwNzdBMDAwOEFFMzJERENDRTdGOEZBMzU3N0M1QzIxQkU5NDMyRUUyMgorOjEwNzdCMDAwQzc1NENFRTBCRjQ3NUFCNDU5MjM3QTU3MzRGMERGMjM3OQorOjEwNzdDMDAwQUNEQ0I5OEJDRUUzQjE4Nzk4MUZFNUJEQjI3OTk3MzJCNworOjEwNzdEMDAwMTdDNkFERDhCOTRCOTk2N0MyNUZCRkNBMzBFNTc1NUZCMAorOjEwNzdFMDAwRTU5MTcxRUEwOEREM0IxNkNCRDcxOERGQzdGNUZEODhCOAorOjEwNzdGMDAwOEJDQjdCNDc5MTNCODQ3MUVCMEU3QkIwMTJFQjc1NjRCNgorOjEwNzgwMDAwMjVGQTcxN0Y1NEUyRkJGNTVEMzdEMkZEMDc5RUREOEVEMAorOjEwNzgxMDAwMDgzRTU3REFCNjY2M0FBMURFQ0FBQjc1M0ZGMjkxREY5MQorOjEwNzgyMDAwMDgwRTQ1QkNBNDY4QTUyREQ4M0UzOUQ1RTNDN0I4QjcyNgorOjEwNzgzMDAwQ0ZDMTQ2RDIzQTc3ODU3ODE4MUJDMzBGNjMxRkUyNzIxNworOjEwNzg0MDAwNzI0RjkyNTdEQTU5OTQ2RjM1MzFDOTIzRUQwRUQyNEZFQQorOjEwNzg1MDAwNDdFQzdDMUVCQjE5ODc3NzlCMzczMDE2RTE2MTQ3RjlFRgorOjEwNzg2MDAwRUYyOUY0QUQ4QzI4OThBNzEyM0I2RTk0OUYwMkRGNEE1MworOjEwNzg3MDAwRkEwNkZDMERGNjkyOEU3QUJENDJFODk5QTJDRERCOTUxMAorOjEwNzg4MDAwMEY0RDcwNEY0NTYzMDRGOTczRTcxNjA1RTMyQUYwOUQyOQorOjEwNzg5MDAwRjQwQ0Q0Njc5ODBGRDU3NzI3OEYyNzU1QzBGNzc5MjYzMgorOjEwNzhBMDAwQkQyMkU3MTE0N0JGREM4NkYwQjlERjZCN0I4REVCOTcxQworOjEwNzhCMDAwMDg4RjIzMEI3ODYzRTk3OTdGMTJCN0RCNEE2MDU5QTVGQgorOjEwNzhDMDAwRjc3QTY4MjhGQTlCNDc3MjEzQTgzRjI5RUZCMUYyNzkzQgorOjEwNzhEMDAwQkZFMEYzQkU5QkI2MkIzNjM3QzVEQkM5RkU5MkYwQzlCRAorOjEwNzhFMDAwN0FDNzkzMjZDRTQ5MUE4Mzc4NjgyMzNDNTQ2REQyNjhCMAorOjEwNzhGMDAwM0U5M0Y1RDJDMThCNENGMkIwNDhGNDc3RjBBRUY3RTk4NQorOjEwNzkwMDAwNUVBMDBEM0YzRjQ2RkM1OEQ1QTQ3MEJCQkZFOTk4N0VGMgorOjEwNzkxMDAwMDdBRTJCQTFFNzU0REMxRkI5OTkyRkU1RUM3MTcxNUYxRAorOjEwNzkyMDAwRDZDRDJENUNGRjU2QjVFQ0QyRjA3RTQ5QzlBNzM5Njc5QworOjEwNzkzMDAwMEVEMjNENUI1NUNEMEU4NkZCQTVDMDdGREY0M0ZDQzQ1OAorOjEwNzk0MDAwRjJBOUM0OEZENEFGQkREMTEzRjQxMDNGQTcxMEQyNDUxNAorOjEwNzk1MDAwOUMzQTk4MzNERDEzRDVDRkRCQkM2MjdGRDRDRERGNkY4QgorOjEwNzk2MDAwNDhFMkU1MjhGRjA0NTcyNTU5RjRBQjhCRTQyMkU3Q0MyNQorOjEwNzk3MDAwQzg4Mzk4MEY1QUU1NTdFODVDNjU2QUIxRjg3RDMyMTMwMQorOjEwNzk4MDAwNUNFNkYzMzFCMUZBMTFFM0UxM0M3RUQyOUUzRERENzQ1OQorOjEwNzk5MDAwM0VBRTVCQ0Y4QkY2NEYyMEJERjlGQjA4N0ZDRjcyNzFGNworOjEwNzlBMDAwQkQ5NkYwQzdEMkVGOTBCMEM3RTNGMDU5MzgyOUNFM0E3MAorOjEwNzlCMDAwMjZEN0Y1OUNBNzc3NkI3ODhGOTJFNDlGOUI5MUVFMjY1NAorOjEwNzlDMDAwRkVGOTU5MTJCRjhGRjc2NzQ5MUFGNUZGNzgxMURGQTc0MworOjEwNzlEMDAwN0FEQ0NFRDdBRkM3RUI5RDk0QkZGOUZBREQzQzlGQ0NFNAorOjEwNzlFMDAwNzM4RjFFQzFFNzYxREJFQzRBRkM3RUI4MkY4NzYzQTU2RAorOjEwNzlGMDAwNkQxOTlERjcwM0I5NkM0RTIyRkVGMTMyQUUxRkI5M0VGMAorOjEwN0EwMDAwRENGMDEyRDc2Nzk1MjEzN0RENzc1QTE5QkM3RDJFRTU1QQorOjEwN0ExMDAwRDlBNkJBRkM3NDNGNjhGMDM1RkQwRTRGNEZCRUYyRURBQgorOjEwN0EyMDAwM0U0MEJGOEI3QzczMzM5NzNGNDkwN0QwQTdDNDVGNTI1QQorOjEwN0EzMDAwMUUyNDVFQTNGOEU0Nzg5N0YyMjRFOUIxNERFRTBCMDAyMgorOjEwN0E0MDAwQkY3MEZCODhGQjIzRjk0Q0E1RkQ5RjMyNjdFMDA4OUVDMQorOjEwN0E1MDAwQ0IyQzEzRkJBNUY5RTI3NzVGRTQ3RUU5NkM0MTk3MDIzQQorOjEwN0E2MDAwNUJFOUFGNzE5RTNERjY0QkFGRDBBRUFFNThGQUFCNjE1RAorOjEwN0E3MDAwMTgwRjI5Q0YzQzRBNEYyOUI3RTBGNzU5RTRGQjdENDE2NQorOjEwN0E4MDAwRjdDM0UyRjlCMUUwOUI4QUQxQ0QyNDk3MTUxRkQ1OTJCNworOjEwN0E5MDAwM0NCQkE3NzBCREU2N0VDRkFBOEYxOTVCMjdFNkJCOTZERAorOjEwN0FBMDAwREE0RjRFNkMyRUMxRkRDNkM5M0Y1NjBDRjQ4NzdCODM1RQorOjEwN0FCMDAwNzMwMTlFNTM0M0ZGNjhEMzIxRUYyQ0M0QUZGODdEMjk5NworOjEwN0FDMDAwNzk5RUU3MEJBMTI3M0E3NkE4RTJGNzM2NkJGNTRCRDlGQQorOjEwN0FEMDAwREY5N0VCOEY0NThFMkI3NEVGODlGMEE5M0E3NjE2OEZERQorOjEwN0FFMDAwRkYxOEZEQkExRDQ5RjRGQjI3OUZFREJDRURGQjFGQTc1NgorOjEwN0FGMDAwRTJFRjhCRENFMDQ3M0IyMTc1NzkyOUYxNEY1NzlBQ0JCOAorOjEwN0IwMDAwQkY5NUM3M0RBNzYwNUNBN0JFRjk5MDE3Q0ZGRkZDNkY3QworOjEwN0IxMDAwNTk2OEM4QTgwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMgorOjEwN0IyMDAwMDAwMDAwMDAwMDBCRDU3RDA5Nzg1NEQ1RDlGMEI5NzM1OQorOjEwN0IzMDAwNjcwQjk5NDk2NjI2N0JDODMyMDkxMDUwNDk5ODg0ODQ5RQorOjEwN0I0MDAwN0Q5OTI0ODQ0NTE2MjcwODA1NjQxQkY2MDBEOTU4REE2OAorOjEwN0I1MDAwNjJBNTdGMDY4Mzg4ODg2RDY4QUQyMjVBQkYwMUMxNjIyNQorOjEwN0I2MDAwQjUzNTYwQTQ0MTAyMEVCMjA4NTUzRjQ3MEExNjVCQjQxMgorOjEwN0I3MDAwMjMyMkIyODQ2NDhBQURBNTVGRjkzRUZFRjNCRUU3OUM4MgorOjEwN0I4MDAwQ0NEQzlCMDlBODVGREJFN0ZGQzNFMzczM0NGN0RDN0IzRQorOjEwN0I5MDAwOTZGN0JDRkJGQjlFMzM5NzVGRUU1NzYwQjAxMzYyQjY1RgorOjEwN0JBMDAwNjgwODQ5MjBFNENBNkJGMjFBQUY4OTkwODc3RkYxRUEyRQorOjEwN0JCMDAwODhBMTg1ODQyQ0Y3NEE3MTA2NDI0OEVCRUVGRkY4OUZCNgorOjEwN0JDMDAwRDQ3ODQyMkE3NkQ2NTgyNDVBQUY3RkY5NEQ3RDgwQkVBQworOjEwN0JEMDAwQTdGMTZFNjdDRjc3Qzc1QUUwQkRDQjJGNkMxOTQxRkE3QQorOjEwN0JFMDAwRDJGNkM2N0E2Q0JGRjJDMjc2QUNCRkY1OEI1NzBGRkRFQQorOjEwN0JGMDAwMTc3REFGRDIxNUUzODBGN0FFQkM3NjU4MEZDRjJCRERFMworOjEwN0MwMDAwNUE2NzIzMkQ4OUZCQTg3RUFBOTk5NjlFOTc2NDkyNDg2RAorOjEwN0MxMDAwQzg3OEMyRkU5RURBNzM1ODZGQ0ZBNUY1NDYzQTJBRkRBMgorOjEwN0MyMDAwOUU0Q0Q3N0I3QjY1RDFFRjFBRjc2ODE3OThFMDBEMkYzNAorOjEwN0MzMDAwMjE0NTc0REM1RkNDMURFQzg2N0EzMzVENDQ0QUU4Rjk1QgorOjEwN0M0MDAwNDYzREYxMTg2REI0RUM0NjQ4MTQyREFGMTY5QjNDNTJERQorOjEwN0M1MDAwMkM1RDU3ODk2OTIzOTQ1NzdGMTUzNTFERDY1QkFEMEY3MQorOjEwN0M2MDAwRTQ1ODYxM0U3RDg5MTNFQUREMDExRTQ1MzBDRTBBNUQ5MAorOjEwN0M3MDAwQjUwOUJGQzc3RTNFRDQxMTAyNjUyRUYxOTA4QjdERTgxOQorOjEwN0M4MDAwRkEwOUQ5NzlBQjNGOENGNzZCODQxRjdENkY1MDU0MDE5MworOjEwN0M5MDAwMjFEMzY2N0QyQUMxN0NBMkZCRDZFQTk2RTMzQzVGNjZDRgorOjEwN0NBMDAwRUQ3NEQ1RTFFRDAzNTZEM0YxRThCOEI3RTA2RjY0QTgwMQorOjEwN0NCMDAwMkNCMjk4RjA3RDBBMTAyQzUzOUJDQUQzRUNCMEZFNzhGRQorOjEwN0NDMDAwODMwM0Q2MkZENjk3NUFFMUFFMzdEM0U3RjdBRTc2M0I4QworOjEwN0NEMDAwNjRCQThGNkY1QzNBMzVCQTNCQURGRkEyOEZENDVGODYzMgorOjEwN0NFMDAwRDc2NTY5QUU4QkY2NUZFRDMxRTEzODU1NkI0QUM4NjdGMQorOjEwN0NGMDAwNzRCRTYzNjAxN0U5Rjc4OTE2MTIzRjg0QUVBNzRDNEIzOAorOjEwN0QwMDAwRTI0RDUwMTI3MjVBNTcwMEZERUZDMjc2QkI4MTM4MDkxRQorOjEwN0QxMDAwQzUwM0ZCOUJEMzc2QURBMzlGM0NBNTczQTcxNDQxM0YzRQorOjEwN0QyMDAwMUJGRDdBM0I5NDNCRDlGQ0U5RjcxNjUzMDFGNjY3MTkyMgorOjEwN0QzMDAwMDJERjFCQzk0QUY4QUU3REREODRGODREMTJGNkVCRDdBMQorOjEwN0Q0MDAwRDk0MkYzMjYyNDk4MzEzNTk3RjU1NzA4NzAxQUVCOTlFNAorOjEwN0Q1MDAwMEVFRjEzQkIxRUQ3NzcwNTVFQzE3REY0RTRDRENFODU1MworOjEwN0Q2MDAwRjIwOTM2NUYwRDcxMDNCRTI0RUE2OTg5NzA3NTY3OTU2MworOjEwN0Q3MDAwNTNCQzU5NjQyOTc2NUI4QTQyNjU2MjM3RDZBRTg2RUI3RQorOjEwN0Q4MDAwNEU2OEE3RjBCQzYwNzE2MjQ5NzZDNzExMzJCOEYzN0JDOAorOjEwN0Q5MDAwQTIxNEYwN0Y2QjVBOUIzRTQwQzc3REYyQzBBNzg4QjcwNAorOjEwN0RBMDAwRDU4MEI3MzBCRUZCODIxRUQ2MjFGMDc2MjE3QzQyRjcwQgorOjEwN0RCMDAwRTFBOUZEOUYyMkRFMkU2Qzk2MTAzRUQ1Q0RDNUZBMDVCOQorOjEwN0RDMDAwQjRCQzVBRTcyNDlGNjk2OTlERTNERjUzNTI2MDMxRTBGOAorOjEwN0REMDAwQjU2NzdGOTQ2NTE3ODU1MzlCQzBDRjg2NEYyRkNBRjQzNAorOjEwN0RFMDAwNzk3NjczOEE1RDgyRTdGQjE5OUUxRUQzNjgzQzAwQTdGMworOjEwN0RGMDAwNjMzQkVFRDk1RTJGODVDRjczMURDMjQ3QUEyMDQ4Mjc2QgorOjEwN0UwMDAwRDVCNUM0NkJBMEVEQzUzRjVGN0Q2QTFDQUQ1NzU1MTA1RAorOjEwN0UxMDAwMDdEMDc5QjUwQThGQjI5RTNGQkYwMUYwQzU1QTQ5MEExMworOjEwN0UyMDAwQTNFQ0IwQ0U0RjQ2NzdBN0ZENTc1NzkyMjJBMEQzRDRFQworOjEwN0UzMDAwNTFDRUZENTAyN0NEMTJFOTA1RjUwQUQ3NDIxOEZGREVENQorOjEwN0U0MDAwRjhBNTBFOTlGNjZGMURFNTZBODJGMUVFOEQxRkVFOTA5MgorOjEwN0U1MDAwNjk3RjRGQTUzNzZFMzBEMjc2NEYxOUIxRUMwMjM4RTgwMgorOjEwN0U2MDAwMUE0QUI0QjRGRTU0OTlERDQyMjE0OUUxQjYzMzE5REExNQorOjEwN0U3MDAwNDkxRkJENjMxN0UwQjE3QjYxMjVGNDU3OUQzQ0QzMDFEOQorOjEwN0U4MDAwNzhEMjg5RkVGN0FGRUIwM0YzQURCNjc3NzM0NEQxRjc0MQorOjEwN0U5MDAwQzczNzRCODg1N0M0NjMyMjMwRkY2QTBBNUZBODhGRjc0MQorOjEwN0VBMDAwMEVGNUMyN0NBRTcxRjgwOTM4QjZFOUZDNzM2MDdFNkRFMAorOjEwN0VCMDAwQUYxQjg4ODdCNjhGMUZDNUYwRDUzQUFBMTFGOUM3REI2QgorOjEwN0VDMDAwRkJDNzlDOTBGMjQyNzg2OURFNjdGMDQxRERBNkI1NDhCOQorOjEwN0VEMDAwMEVFMDRCRTQ3RTAzQ0M2NzAxOUY0RjgzOEVDQzc1RDFCRgorOjEwN0VFMDAwRUZBQzYzNTkzRjNEMzY0QkM4MkY3RTBERjQ5NDAwQTU4RgorOjEwN0VGMDAwODY5NzdBOEVFNzBEQUNCNDc4RjI1QzE0MUZBRUYxRkQ3NAorOjEwN0YwMDAwNDczNEExRkQyRUU3Rjg1MkI1RDA4N0Y0NTRGOTBBRUJCNworOjEwN0YxMDAwMkZERUUwQ0M1RjE1ODZCRkYxQTUwNEU5Nzg3NzE0OTlEMAorOjEwN0YyMDAwNUI0RTlGRUZCNkIyNTI4REFGQTczOTVENjczREJGMTI3MgorOjEwN0YzMDAwRjc3RDAxREQ3N0Q4RDdENENERjQzOUMwOERFMjA1QzAwNworOjEwN0Y0MDAwOERFRTIzRTJDMUJERjE0QjcwREYxNjZDOTYxRUMwN0QzNQorOjEwN0Y1MDAwRjQwQzIwNTA0Rjg4NjNFQjU0Rjc3Rjk2RjNDNURENTE0NgorOjEwN0Y2MDAwQUU0Mjg5RjYxNzRDMzAzQjc2NDgzMDFGQTcyNjBBRUEwNgorOjEwN0Y3MDAwRjk1NkM3MEUwMkRGQkI3NkMyNzgwOTQ5NTE4RUZBMzAzNgorOjEwN0Y4MDAwN0U0NTg4QUI1MDQzQzdCOTk0Njg2NkZCRUQ3RDVGM0I4NworOjEwN0Y5MDAwMzkxN0U4RDE4RUVEMDkzMkYxMTFFNDNGMjREQjk1MUI0RQorOjEwN0ZBMDAwRkFBRUFDMDdFQkFGOENGNzM3QTFDMTkzNDdCMjE5M0NERgorOjEwN0ZCMDAwMTAyRTFDMUVERTc1RERBNjg3RjNEMzRGMzgzQ0JDNzczMAorOjEwN0ZDMDAwOTFFOUMwMzc4RUU5ODlDOTA4RkQ1QkU4MzhCNEJGQzRDMAorOjEwN0ZEMDAwMUQ0MzVGRDg4NEYzQUJDNzdEN0JEQjYyQzFCMjJDQ0U3RgorOjEwN0ZFMDAwNTU1ODBCMkNCODg3NkIzNUMwNDVBQzUzMEQ4RjQ1MUNDRAorOjEwN0ZGMDAwMUU2RjREOUI5M0FGMDEzQzlFNjI3MjAwREQzRDc5NDA0OAorOjEwODAwMDAwOUE4Rjc4RUQzMTUyQTIwNEJDNjc3NDQ4RTg3RTAwNUQxNworOjEwODAxMDAwMTBCNzE2RjdBM0JBRDZFNThEOENGN0U1NDg2N0Q1RjEwQQorOjEwODAyMDAwNTE4RTI4MDlGMURFODlGMkNGNjNGMjMyQkM2N0YyMkY1QworOjEwODAzMDAwN0EyQzkzNTdDMDI3Q0I3MzNCRjMwM0MxNjc0MEJFMDEzMworOjEwODA0MDAwM0UwQkJBQTgxRTExQzg4MUZERkRCQTdDQTU0REM3RTgzQworOjEwODA1MDAwQkM4REMyMDFFODQ4RDA4REY5MEQ0NjJGOUJENkQ5OEIzNworOjEwODA2MDAwQTE3RDEzQTVGQkYwRkQzRUFFRjcyMEZEMUVDRkVFRTY5MQorOjEwODA3MDAwODA3RTYxOUUyRTczODhCRjY3NTg1QzM2MkI4NTc3QjVFRQorOjEwODA4MDAwQzZCNzQxOUIxNUUyQzdENTZGM0M5NkUzOEU4MDdGODJEMQorOjEwODA5MDAwMUYxQkI1OENDRjE5QkREMTVFRDYyRjFCQ0Y0OEMxNkQyQworOjEwODBBMDAwMkVDMEQyMDNGMjI4N0EwRDgzOEZCQTlGNUU1NjIxNUZDRAorOjEwODBCMDAwOEQ5NjBCNTQ4RTRGQTI5QjE0REI4MzkwQjExQTc3MkZCMQorOjEwODBDMDAwMkJFREE3Q0ExODM4NEU3Nzk2NjRBQzA5RUE2MTFFODk3MQorOjEwODBEMDAwMjBCQjgwN0U3NjQ0N0I4MTZGMjUyNjEyRjdERTA4RkQ2QgorOjEwODBFMDAwMjY1OTE5MUYxMEZCRDI2MDYzNzQ5NDE4QzNERTJGQjY5MworOjEwODBGMDAwMzJGRTUwNjg2NTc4NzkyRjJGQzVGQzA1RkVEQjM1RUUyMgorOjEwODEwMDAwNEY4OURDQjUxQzEzREZEMTc5NjFCQjk4MEZGRDdFMjM0RAorOjEwODExMDAwNjFGMjE3RTc5QkY4NzBDRThFNEQ2MUZCMTFBMkEzQkJGNQorOjEwODEyMDAwMEE2MDlGN0E2Q0Y2NjlFNzlCNDJFMzA4NzlBQURFN0ZEMgorOjEwODEzMDAwOTgzRkQwMEZBQ0E3QkM2RkQ3RUYzNTFDNjZGNEE4QzYyQworOjEwODE0MDAwQzc3MkNFMTc2M0FEODRCREE3RjNGRDE1RTk2QTg1OTlBMworOjEwODE1MDAwRUM4MEY5NkQyNUNFMzgzQUFGOUE0M0JEMTkzRDM4ODM4RQorOjEwODE2MDAwMzlEMEZGMTE5QkZCMTVEODhGODFBMzM4OUVEM0U3OTM5RAorOjEwODE3MDAwRTlGM0U1NUFFMjMxRDAzRDU5QkU1QkU3MEQxODE5Q0Q2MAorOjEwODE4MDAwRENBMkZGOTVEODU4RkZFRDY2QTM0N0E2Nzg3RUM2RTYyOQorOjEwODE5MDAwNzYwMzdFNzk0QTg4QzMwNzcyRTkwNzk0N0YwMEZEMTE1MAorOjEwODFBMDAwNUYxMUYwOTcxQTEyODgwMTM4NTdDQkZFMUM0MkY3N0ZGNworOjEwODFCMDAwQjBDOUJEMDhDNjNCQUZGMTY3QzA3MzQyMDI4OEFGRTdFNAorOjEwODFDMDAwQTI2MkYyMDhFREFGNDlFRjRCRkYzRUNDRkJBNDRDNzYyOAorOjEwODFEMDAwRDA3RUFFMTNFNzc4NThDNzc1QkZDNkU2QTFFQkY4QjhGNgorOjEwODFFMDAwRjk3N0JGM0E0MEJGOUE3REUwREFFQzg3MDA0QTlCQTI1QworOjEwODFGMDAwRTczQzRCQ0I1OTQ2OEQ1MURCM0YwNDhGNzNFNkM4RkNGRgorOjEwODIwMDAwRjU4NzFDN0YxMkVBOTlERTE1NUM2N0YwMDI3Q0Q0RUZEQgorOjEwODIxMDAwNERCMEIxRkRBRkI5OTE0QTNDNzFFMUNGMTkxRkFERDE1RAorOjEwODIyMDAwMDZGNUEwNDJENkRDQzgyMDFFM0FFRUM3MUE1MkQxMTg3NQorOjEwODIzMDAwNDFDRjBDNTgxOUZGNkFBMkE4MUZBOUZENzM4RTY3QkIxNgorOjEwODI0MDAwNzUyNDY3MkJDQzY3M0JFNTgzMDAzRkFEMURGOTQ1QzUyMQorOjEwODI1MDAwNEZCMzFDOUI2OEI1MjkzQjc4MUNGNDg4RTBDRjI0RTQxRAorOjEwODI2MDAwRkZFNzc0OENFRkQwQkYyOUM2MDEyMUY5MDlFQTA5RThCQworOjEwODI3MDAwODcxNTE2OEY0RjQzRjk0NkM1NkFCMzRGQ0VDM0U3REE2OQorOjEwODI4MDAwNjFCMDc3MUU4QjE2RjhFMDdDMkUxNzE3RDRCRUZENzdGMQorOjEwODI5MDAwMjk4NkI2NkI4OTcxMThGREVFMEJEM0MyMTgxMDBCOEJCMworOjEwODJBMDAwQkZCQjJBMTE5NEVGQTQ1OTBENDg5Rjg0OENCMjgwM0UyNQorOjEwODJCMDAwMkUzOTI3QzhCN0EyNkZBN0NGNjk1MTZGNDc3Q0ExRkJBMgorOjEwODJDMDAwRUJCMkI5NUU4MEZEOUUxNUNCRTAzRDZCNTVCNEQ3MTM4NAorOjEwODJEMDAwQzZGRkE2NzFGOEE4RjE2QzM3RTAyODlERUYyNzEyOTMyRQorOjEwODJFMDAwMkJFQTcxNUVCNTk1REMwNzc4OTcxNEUzRkEzNUY2QkY5MworOjEwODJGMDAwRUE5QTgyOUZCNTQ5ODExNzlGMDU3QzVDNjE3NkVDNjJBMgorOjEwODMwMDAwREQ2NkI4QzJFOEU1MUQzMUVFMEQwREVFNUY3QkJFM0ZDOAorOjEwODMxMDAwNjc0RDE2RTA3RDMwRTNGNzE0Q0VDQjVCMEMxNjhGMUQ1NgorOjEwODMyMDAwREFGNThBRkQzRjVGNDcxOTVGNEVBODNFRkY1MkNGRDE3NQorOjEwODMzMDAwQzQwNEYwNzc2QzAwN0M1OEIwMzE5QTc4RkE4NEQ2MDE4NgorOjEwODM0MDAwMEEzN0UwNzdGNTBEODJGRENDNkY3OUZCMkNGMEYzNkFFQworOjEwODM1MDAwNkQwMEYxNjdCRUQxODRGQjUzN0Q0MzhCRjMyMDFCNzUwOQorOjEwODM2MDAwQUQwMUYxM0Q5NUJGRkQ2MjlDMjc5MUJFMUUxRDY2QkQwRQorOjEwODM3MDAwNzgwRjdEOTg0NDlGRTNGQURERUZDM0JBOUY4RThFMjE3QworOjEwODM4MDAwNEU0NjJGREVERTc0RkVENzhERjY1ODFCODU1NzhEOUUyOAorOjEwODM5MDAwRTI0NzNGRUNDNjY1MENEM0FGNDg5QTU5QjlGRjJEMjc4OQorOjEwODNBMDAwRkYwRUYzNTk2ODc0RUI0MURFMkY5QTVFQUIwN0JBOUM1RgorOjEwODNCMDAwMTVFQjJCQjJGNDBEREZGNzYxRjJBRDdCQkVGRUJFMzdERAorOjEwODNDMDAwNzEzRUY0QjE5RUQyNDUwNDNBRkM5Q0MzN0YwMkUwMjQ4NgorOjEwODNEMDAwNURERkM3QTk4QzdFM0VDRTIwMTU3QkExQkM5Qjk2RjRBOQorOjEwODNFMDAwQkI4RkIzNzlCRDgwRDVENUZENDREOTE4M0Q3RjlDQzdERgorOjEwODNGMDAwRTQ5NTY3MjU5MzFGRUFGN0ZFQzFDNzczRDk5QzVGMDIxNgorOjEwODQwMDAwM0NDNTczQTc4RDNEN0ZENUU2RkMwQTlFNTM3RUY4NUY4MQorOjEwODQxMDAwMUM1RjdENTZEQURGQUMzNzBEODhBRjY0N0QzMDA3RjYyMAorOjEwODQyMDAwQjE2MzVEMzk3Q0JFODk5MUU3OTU2MTYzRkM5OEY2MkI1OQorOjEwODQzMDAwRDk4QUYwM0QyN0VBRUQ4N0EyQkM2MDg3OTAwOTk0M0Y3NgorOjEwODQ0MDAwMDMzRjVFOTk0RTgwMUZEMzcxQTM2Q0FDNUY5RjE1REYxNQorOjEwODQ1MDAwMzNFMDNBQzg0NkNBQTcyOURFQjYxN0Q5NzE1RjM2MTU4OAorOjEwODQ2MDAwNTNGQzA0M0U3MUQwNjAwMTNFMjFGMDQ5RTA5MTFBN0YzNworOjEwODQ3MDAwMTI2RDQyRkUzMTM5N0MxRkM4NjExOUU1NzBBMjhEQzlBOQorOjEwODQ4MDAwNjEzREQwMzlFRDUxQ0ZGNEMxOUVCOERGODg2N0YyRDc5NgorOjEwODQ5MDAwREZFRjNENDZCNjhGOTRERUVEMzY5NEZCQkVEQzcwN0E5RQorOjEwODRBMDAwMTM3MDE2N0NGMkUzNkU0QUJDRDhDREY5NjAxRjBFQjc4QworOjEwODRCMDAwMEUzOERCRDg3QkYxM0Q5OERDMTNGNkMxMjBCRUFFNTdGOQorOjEwODRDMDAwMzgzRjE3QTU5MDYzMDNDNzJBRjU5MjU3Qjg1RUYwOEEyNAorOjEwODREMDAwMzU0NkVDNEIyMUFDNUZDOEJGNEVGQkZEMUNEQjZGRkE5MQorOjEwODRFMDAwREU2MDU4Q0YyQzQzNzA0RTFDOTU1RkRGQTE3QTkxQkVBMQorOjEwODRGMDAwMDBCRjZCODJFRjNBRjkyOTQ2MzFCOTVCQjNEMjRDNDBFOQorOjEwODUwMDAwMkYyOEI1NTkxOEZDMEI4MzE5RDAxRkU5MTM0NDNFMzRBQQorOjEwODUxMDAwOUY1MDdFMjNERDc5RkZDMDI3OTA0MjY5NjQ2OTBDOTNFOAorOjEwODUyMDAwM0I5MjRDMDcwNDlBRTk0M0VDRDAxRjg1RjcyNDVCNTEzQQorOjEwODUzMDAwMDhERUVBRjFDRTQxMTNENTAzQTdEQjI0MkRFRTU3M0UyQQorOjEwODU0MDAwQzk4N0ZEOUFGM0MxOTdFNkQ5QjRDQjZCMTZBMzQ3NDMwRAorOjEwODU1MDAwRTVDODc3MzVFRTU5RDA0RkVCODMyNzUxRUYzRkE3RjdBQQorOjEwODU2MDAwRTUzNDk4MjJCNEVCN0RDRjNGMkQ4NURBRTdCRTI0N0IzRQorOjEwODU3MDAwRjQ5NENGMzRGOTVCN0YzNjhERTJFNTdDQkZFQzgwMjE0QgorOjEwODU4MDAwRTdBRkZERUI3QjAzNDE5RkY2RUIxQzYwRDc1MjdENjJBQQorOjEwODU5MDAwQjMxNkU2NURDQkY0Q0Y3MzFBRTVGRTVGRkQxRURCNUYxRAorOjEwODVBMDAwNTE3RjkwRTMwQkQ1QjNCNDY0NDA4ODVGMDkzRDYxMjlFNgorOjEwODVCMDAwRjFGNTAyN0Q2MjAxNzFFQUExM0NCRjYyQzkwNDQyRTFBQQorOjEwODVDMDAwQjdDOEI0MUFGOUQ4RTU5NUUzNTA3RjVFNEMzQ0Q4QkVFNQorOjEwODVEMDAwNjBBM0VFN0NCODdDNTlENEEwQUMyRkQ5QUFBQzJGRjVGRgorOjEwODVFMDAwMkFFQjQyRkY0QTI4OERBQzU3QkNDOEY5RDA1NTJBMkUzOQorOjEwODVGMDAwNkVBNzU3NkNFMTc4NUJGQUU4ODRBNzkxRkVGRDNBNjJCQQorOjEwODYwMDAwQTBFRkFEM0U1ODlDNDQyMkY0MkJDQTlBMUJEOUM0MUI0MAorOjEwODYxMDAwMjY4NzQyRkE0NzBFRjFGNjg3RkU2RUEyM0ZGMDc5QUU0QQorOjEwODYyMDAwOUY0MDdGNjBFRkFFOEU3MjI2ODE1RDcyQjUyNEYyQkNGMgorOjEwODYzMDAwQjdGMTc5RDdEQ0U4QTZFOEZGRjk0RTdBNEUwQzhFNTNGNQorOjEwODY0MDAwNzNDMzg4NjVFNzc5OThGMEZCQUI4QjIzOEZCM0JCNDM4QgorOjEwODY1MDAwOUZCMjI4RTQ2OUU4RkI3ODI2RkZCODNEMkZGMEExRTYzOQorOjEwODY2MDAwNDYzMjNFMTc3NUExNjc4N0JFNEJDM0ZFQTg2MEIzNUM1OAorOjEwODY3MDAwOEMwRUYxMjM1RDM3MzYwRjgxRkY5RjQ5QzQ5ODgyRkUyRgorOjEwODY4MDAwQjEyRERDMkU3MUU0ODE5RUZCMTlFODUxNDA3RjYzRUMzMworOjEwODY5MDAwODcwMjc0OEEwQjFFMUE5Q0EzQ0QwRUQxODc3QTFEMTRGMworOjEwODZBMDAwOEZBRTA0QzJFNEZCMjE5QjM5MUVFNUIyODMzODYwNUNDNworOjEwODZCMDAwODFERjczMUUyQzhCNzVEM0Y5RkU2OTZENjk5MkJCNkZEOAorOjEwODZDMDAwMzhERkY0RTBGOEQ1N0FBMUJGOTkxNEYyOThBOEU0RjU2MAorOjEwODZEMDAwODJFNjkzQTg5RjJEMzRCQTcyODBDOTdDN0VGMDQxQzQ5MworOjEwODZFMDAwRUZDNUM0OTUwODc4REQ3RUIwNzc4NkZCN0YyMUE3QzVFRQorOjEwODZGMDAwN0NFRUY3Q0NEMzMxN0Q5QzEyMkRBNUI3Qzk3QzNFRjcxQgorOjEwODcwMDAwQjczMEZENTA2Mzc0RUE3MDFDMjdCMTVCMTJEMUU0NjY4OAorOjEwODcxMDAwRjNBNUNDNTI0QkVCQzMzQkU2MEZDRTQzNDI4NkYxRjlCNworOjEwODcyMDAwNEJGMDNEODVFRjcwNUU5MkY5RUU2NDk4QjcwMUM2QTVGNworOjEwODczMDAwRTM0NTExNkYzMjk0RjU4MzFENzYyODQ3NEEyRTJEOUIxMQorOjEwODc0MDAwMDdEQkU3RDFBNDM2MERERUQ3MTgwMzMyNUIyNzlENDE0NgorOjEwODc1MDAwMjI3Q0RGMDEyRkFDOUI3OTdERkQ5NEVCNzMxNkMxNzNGNgorOjEwODc2MDAwOTMxOUY5ODY5RUNGRTMxNkYwM0YyM0YyMTMyM0FDREI3NworOjEwODc3MDAwNjBGMjVEODY3NTk5NzlFOTI5NjFGQUI2Mjc5QjM4RUEzNgorOjEwODc4MDAwRTk2QkRENDgyMzgxNzE0REE2NkIxRTU4QUM4NTU4MjREQQorOjEwODc5MDAwQTg0NzU5QUVGQkMwRUVCODY2MzE3OTM0RkQ5MDJGQ0FCOAorOjEwODdBMDAwNzExNDdFQUREMkJCOEI2MTVGMjgxRjY2N0VBOEFFREFFNgorOjEwODdCMDAwQjUzRUI0NzcwNDVGQjNGMUY5RDU3M0JFOTY0MjE4MUM4OQorOjEwODdDMDAwRTI4OUVCQjA5M0YyODU5Rjk4MTc0RjIwMzEyMDhFREQyMAorOjEwODdEMDAwMzhGRTMzMzE2MzRGQzA3QzAxRjAyOEFGQzc2QUNGODdDMgorOjEwODdFMDAwQ0I4QjA0OTc1NkMxQjc5MkE2MkJFQjI5NkU2NURENDg1QgorOjEwODdGMDAwQ0U1OTAwN0YyNTlGMkJGOTU2MUNEQTcxN0RDMDJGQTMxRgorOjEwODgwMDAwRTNGQzYyNEEzNzM2MkY4MTNGRDk3MTFBODUzRUUxRTI5NworOjEwODgxMDAwNzY3REI1NEQ0RkQwMUY5ODY4MzQ5MjdFQTg1RjY0QzdBRgorOjEwODgyMDAwMzFGREUyMTNCQUQzRDRGRTBCMjIxRkNFMUZFOUVDRjVDMworOjEwODgzMDAwMzMwQUU3MEQxRkM4OEU4N0U5M0U2RDMwREJENzY5NDFFQgorOjEwODg0MDAwNkY5QjIxMzEzRDVEREJFODAzM0ZDRkY2Mzk1NkM3MjZFQworOjEwODg1MDAwNjg4RjcyRkVGOEJGQTFGRDAzOTk4MERFNTQwM0ZFNzU5OAorOjEwODg2MDAwQTQ3NzRCMzE3Q0I3M0RDMzgyRUZDNTk3MDZEMTJGMUE1MQorOjEwODg3MDAwN0M4Q0EwNUVENDA5NEY2RkQyRjk1Mzc4QkYwMDc1MEE4MworOjEwODg4MDAwREY5QTg1OTZFNUFGRDBGNzUzNUNEMTBFMjlBQzdEMjdGMgorOjEwODg5MDAwQjREMzc5NEExQzJGRTBGOUM4MDE2MEM3QjJCRjFFMkRCRQorOjEwODhBMDAwRjk3RTI3RjgyOTlDMzJDQUI1OUE5NkZDMjMyNjNBOEY3RQorOjEwODhCMDAwMUVFRTdDMDdBMDZEQ0YxNjFFNDc4OTM3Nzg1OTFDODFBNAorOjEwODhDMDAwNTIyRDlEQzc1NDIzOUI0NzRENEJGMTdENDVCNEJEQTcwOQorOjEwODhEMDAwQkYzRjgxNzg0MkY0MDlGQkNDNEE2OEQyNTBGQjE5QkVGNQorOjEwODhFMDAwMkI4OTQ2RkZENTY5RUU0NzIyOUMxRjBDNTREMURCRDA2MworOjEwODhGMDAwMTBGRTYzN0JCRUE4NTNGMUVGMUNDMERDMTM1ODhGNjdEQQorOjEwODkwMDAwNzRFMDIwRTI4RkQxRTcxMDEyRkE4M0VGNEI0M0ZEMjE5MAorOjEwODkxMDAwM0YxQTE1NkEwRUQxMUI1RDVBODFEMTUxNUY0OURGM0I2OQorOjEwODkyMDAwNTYzRTA2RjFCMDA2RUMyN0JBMUYwM0I1QkVDMzQwREZDMgorOjEwODkzMDAwNDM3OTk5Q0Y0QjMyQkYwMUUxQjk2OTlENTMwNkI4MTcwRQorOjEwODk0MDAwMTFCN0JDODVENjA3MTlGRDcxNDAwRkMzOEM4MTc1MDkxRAorOjEwODk1MDAwQjRCRkMxRDNFNzI1NDNGRDIwMjg1OTQ1QTg2Nzc5QzA5NgorOjEwODk2MDAwM0Y2RjM1NjlCQ0VCNzAxM0YzMUQ0MDM3RDNBNjMzM0YxRgorOjEwODk3MDAwRUJENEU5NDYyRkY4RURBNzZBMDk4QjZGNjlERDU5REY2MworOjEwODk4MDAwQTFFRERGOTlDNUZDQkI1MDlGMTVFNjNGMTFGMThDRDNEQgorOjEwODk5MDAwRDQxRUQ5MTNDMTlFM0MxOEM3RTQ5M0Y4QkU2NkJENUVEMQorOjEwODlBMDAwMTEzN0RBMUY2N0MyRjZGRjg4MUJCRDM2MEVGMURGOUQ1NworOjEwODlCMDAwMDVGNEY3NzAxQ0Q3QUJGQTkwM0VDMDU3QzJFODdFMDNBRgorOjEwODlDMDAwQkNENzVBRkM0RTU3N0M0MUQ5Q0VGOUMyNTRFNzRGNzVGQgorOjEwODlEMDAwQTg4RjczRkUyMEY4QjAwQkU4OTA3RUU3OTc5QzNBODA1MgorOjEwODlFMDAwRTc0NzI1MENGRUE3OEE5NzIyN0Y5ODQ2RENGODlDMjI1MQorOjEwODlGMDAwODhDRTE1RUUzNzFBMUJBNkM3RDA3MUE2QkE5NDdBQ0RDOQorOjEwOEEwMDAwQjRFOTZBM0Q4N0UxQUIxODc3ODY1QkQ5M0U1OUU4QTk5RQorOjEwOEExMDAwNjM5NTdBRUFBQ0VGREZCNEEyRkM0RDdBQjFFQTU2MjY1MAorOjEwOEEyMDAwQzY0OUQwREVBRkExRkJDNEUyMjQ1QTE2Mzc1OUFGRjdDRQorOjEwOEEzMDAwODJCRTUzRDNCQ0UyNTgwMkQwRDE1QUMyRTk2ODhGQjQ4NworOjEwOEE0MDAwMTBFMzM4N0JBNDQ1NjFGQTQzRjc0QUFGMDQ3Q0JGMzc5MworOjEwOEE1MDAwNUQ5MzFGRjczNTg4RjFBMUQzM0FFRjYxODg5QjlDNUU0NworOjEwOEE2MDAwNEE1NzRDRTc3OTQ0Q0ZFMjhGNDdBMzg4MDdGQ0NGMDJFRgorOjEwOEE3MDAwM0ZDRDkzOTlGRjk0QTIzMUM2NDFEMjJDRDEwRUQwQ0JEOQorOjEwOEE4MDAwMzc2QTBBRDBERkJBMzFDNkVDMDhGNzZGNkU1QUU3MkVBNAorOjEwOEE5MDAwMEJGN0IzREEwREE0QzBDMkYxMjY5MjFEN0I4Q0YzQzM5MQorOjEwOEFBMDAwQTcyNEU2RUZGNkNDMzBBMkREOTZEMEMzQTU4ODJGMjQwQworOjEwOEFCMDAwQzhFNDJDRjgwREQ3QzZEOTUxREUzRUM1RkQxQTEwOUY2QgorOjEwOEFDMDAwRUI0RjRCQUY0NDA1NjI3Q0Q4RjczMjU5OEY3RTQ2MTU4OQorOjEwOEFEMDAwRkY0OTg4NzNBMDdGM0YyMTM2MTdGREY0RDM1QkYyNzdGRgorOjEwOEFFMDAwMjJCRjMxNDUzOTdBNDlBMUZFQTdCQkI3NkIxNzgxRkU3QQorOjEwOEFGMDAwRDRCMjVEQkJEMDE0QzJCQkIzMDI1RkEzNDkzNEUwNkJGOAorOjEwOEIwMDAwODdERjZFQUYwMUZENzZERkQ1QjhDRTAxNUU1NkVBN0QxOAorOjEwOEIxMDAwNzk0NDg5Q0ZGOEJDMkIzOUI2ODRFMzhCQUVDNDM1NjM3NgorOjEwOEIyMDAwMTE5RDRGRkI3QjdBRTZDNzVBNEI5MDVFNUZEQjZGNDUyQQorOjEwOEIzMDAwQkZBMzc2MzI0MTc5QjJCRTk4MjAzRUI0NkY5NzUwNEZCMgorOjEwOEI0MDAwRkVDMjVBODFGQUZCN0FBOTAxRTU0NDlCNkQzNEVFREYzRgorOjEwOEI1MDAwMzJEMzUxQjQ0RjJCOUVEMzlEMEZEN0JCOTZFRDU0RDYzNQorOjEwOEI2MDAwOTcxMzNGREFDNzk1QUY3NEMyNjdFNDVGODIzRjU2MzcwOQorOjEwOEI3MDAwMjlCRjIzM0Q5NUZDMzE5RkYzRkQwMjk3RTNGRTMyOTgxOAorOjEwOEI4MDAwRkE3NDQ3MEY2NjFGMTM5RjgxQUVBM0U4NUQzREY3RjdBOAorOjEwOEI5MDAwQ0U2MjcyOTNCQzI4ODFCRUQ1NkVCRTI0MzMzQTY3RkM4OAorOjEwOEJBMDAwQjg4OEY3QTc5NjQzNDU1QzlGMUE0MUY5MTZEODkxNDJCOQorOjEwOEJCMDAwM0ZBMkVGNjNGREE4QTY0NTRFRDY4NEU2NTVDOEJGMTM3NQorOjEwOEJDMDAwN0E5OUUwREI2MjVGOEEwNzgxMkQ0QzQ4NDYzQ0Q3NkY3QgorOjEwOEJEMDAwQjI0OTM2RUMyQkVEMUZFOTgxOEVFQkQxREJCMDdGMEY3NAorOjEwOEJFMDAwRDg1RjQzRjk3ODc0REYzRDIwNjczRDFBQTMxN0YwNjgxQQorOjEwOEJGMDAwODM1NDhCN0NEQTQ4MzhCRjk2RENGNUYwRjE2RjNDMUU2RAorOjEwOEMwMDAwRTREQjgzNDlFREZEMTNCMjgwNUZGQkEzMDExRTE0MUY1QgorOjEwOEMxMDAwQjJFM0MzRjBBNDlFRjgzMkY2NDgwQTdDQzFGNjU2RUJFNAorOjEwOEMyMDAwM0IxMUYxNDVDODE3REY0NzRDQkYxODRGNTcwQ0ZEOTQ1NworOjEwOEMzMDAwNDFFMDg2OTY0NzI1NjZDRjhEMzEzREE5ODVFRkRGRDE4RQorOjEwOEM0MDAwOEM0MzdDMTg0QkJDNUE5ODVGOTk0NUI5Q0Y2MzkyOTU3OQorOjEwOEM1MDAwRjU3MUY2NEU3ODIwQzNCODRFMEVDRkYxN0Q5NEVENEVFRgorOjEwOEM2MDAwQzFENzg4OTJBRjY1OTE5QkI4Q0ZFNEIxRTNERjA1RkIzNAorOjEwOEM3MDAwM0U3QTBERTkwMzdBMDdENTEwOTFERUQ0RkM2MDU0QkMyRQorOjEwOEM4MDAwNDlBMTFGODVDNTNENDZDNTI3NzQ4RTdCQjQ3MzNGRUU1MQorOjEwOEM5MDAwMTAxMjU4RkM4QUQ0MTk1RkRBOEVBRDkxOTNDM0YwNEE1MgorOjEwOENBMDAwRTBGMTFCM0M0RjQyN0E5M0M3NTcwQjk5NUYyRjI0RTdBMworOjEwOENCMDAwMTlCRTBDRTBCNTIxODA2RkY0RkQ0NTAyNEYzMjQ5MjYwNAorOjEwOENDMDAwRTBDOUYwRTYyODlGNENFMTlBQ0ZGQjE5MDI3ODUzMTBENworOjEwOENEMDAwOTJFNzNFOERDOUFFQ0YwNkZDNzA2Qzk0RTVDRTdBN0JGMAorOjEwOENFMDAwQTJDRDhFNzhEMjVGMjNFNEJCMjM4RUEwN0M2RkFDRDc1RAorOjEwOENGMDAwQzJGQ0Y3MEZFQ0VFMzYyOUYwNjIyOUUyODU0NEYxMDI1RQorOjEwOEQwMDAwRTlBQTkzNUM1NEI2QUJGMDQ2RUNERjA5QUUyRjhGMjE5NQorOjEwOEQxMDAwOUU5RTMwMUU2NTYzNDc0MTVGRjY2NTMxQkMyOTIzNEUzOAorOjEwOEQyMDAwQzQ5M0I3QjNDN0YxRjhCMzVCOEJGRDEwQTUzQzJDMzVFQQorOjEwOEQzMDAwMkFGMTQwOEQ1Nzc0NDQ0REY4Qjg2QTNDRUIwQTZGMzIwMworOjEwOEQ0MDAwMDE2Rjg0M0M4Q0JCMzNERTNDREUzNURFM0M3RTNCQkNCRAorOjEwOEQ1MDAwNTFFMzhCRTAyNzdCQTIyQ0E1QTA5N0Q2NTQ0OEM4ODc2NworOjEwOEQ2MDAwRkJCRkQ3QjMxRUVBQkRBQkIyMzA4RjY1OEZENTgxN0ExQQorOjEwOEQ3MDAwNkI0RDJENkIyRkY0M0I2NUM4NzNFOUIxOUFCNzY3Qjk5QQorOjEwOEQ4MDAwNEFBMTVFQjM4NkM1MUI4QTRFQjMzQzk4OUU2QjU5N0I0NQorOjEwOEQ5MDAwRkVDM0I1NDdDQzIwREYzREVDRkIzNzJFNkY5MDYzNjhGOAorOjEwOERBMDAwQkI3NzAzRkZCRUI4QTExNEVBMzUxQkQ5Rjc1RjQwQkNGRgorOjEwOERCMDAwODhFRUVGODBCM0RFN0E3ODdFRDdFNjJDMDczMzNGOTlEMgorOjEwOERDMDAwM0UzQjkyRTNFOTFFNjlFRjExRkNBRTgxN0RCN0U0Qjg0QQorOjEwOEREMDAwQjExQjQxM0Q5OEU5QUQyM0Y4M0E0NzNFQzdENjE5RkY4QworOjEwOERFMDAwRDlCRDYzRUQxNDdGMTcwNTNEQTgzNzVERDQ1NDBFNDBGRgorOjEwOERGMDAwN0VEMzg1OUQ1OTJDMzVBNDQxNDlGMTA2Rjk4Q0QzNDg4MQorOjEwOEUwMDAwRjEzQTlCQzUxMzc3RDAyMURFOEU2NzdBQTA4OEMzNDFFMworOjEwOEUxMDAwNUU0MDc4MUVDMERCRjE0Q0RFOEJGNzEyNkQ4NEM1OEQ5MQorOjEwOEUyMDAwQjc5OUQxQUYyQkUyODRCRUE3ODkwNDc0MDY2QkU0RjIzNAorOjEwOEUzMDAwM0Y2MkRDNzA0QzhGNUE4QzE3OEVDOTE0RjFDMjgwNzY1OQorOjEwOEU0MDAwM0UxRDM3RkZENjk3QTMyM0Y5NTFGRTkzOEY3Qjg5RTcwOQorOjEwOEU1MDAwMzk4OEU3MTVERTJDMERFMEM1MUU0MDkyNTQwMDUyRjUwRQorOjEwOEU2MDAwNkY0MTZGREEwMzdFNTQyNjM0M0M2NDEwRUMyQkFCOUZDOQorOjEwOEU3MDAwOEI1RkI2NjkyMzM1RDI5NzY4NkFCNTFFMTAzMjE5RDQ1NAorOjEwOEU4MDAwRkVBMjVENEZGMjEzNUY2QzRDRTdGOThGRDExMjFGQzg0MQorOjEwOEU5MDAwMjdBMjY1RjM1RjVDNEZFNUEwMTRFMjRCNTMwNURCMTk5NQorOjEwOEVBMDAwRDYwQkU5NzQwQURGQTdDQkYxNUNERkU4NEZGQTAzQkYwQQorOjEwOEVCMDAwOTlDQUY3RUQzQkM2NUExRDkzOTcwRDNBMTVGRDVGNDNDRQorOjEwOEVDMDAwRkE3RkE2NEJCRDU5RDlBRUUyMEYxNTdDRENDNTVDNUZCRAorOjEwOEVEMDAwNUU0QTgyQTgxNzVDOTRCQzU4NUU3QTg2RTlDQkNCNEQ3QgorOjEwOEVFMDAwQTc1MUFGNjhERkM2RjRDNDRBMTI0MEJENDNFREY3NUIzQgorOjEwOEVGMDAwQkU1QjU5QUY2QTU0RDY2QjlBOTVGNUY2NUMwRjhFRDM2QworOjEwOEYwMDAwRkU0Q0Q1MDBGMEJGNTU2QzdEMEZGREJCMTU4MjRGNzgzMAorOjEwOEYxMDAwOTU3QzgyMkE0ODhDNEYzQzdEMzdGQTZEMzQ0NkNBMjdBRgorOjEwOEYyMDAwMEEwMTVDREQzMDZGQTQzRjcxQzYwMTNGMDAyMTdCOEJERAorOjEwOEYzMDAwRDYxRjgzNEY1MjY4NURFMzhBNDk0MDNGRDZEOEI4MEJBRAorOjEwOEY0MDAwNjI3QzE5RTNCMkVGMzlFREExN0RFOUIwMEI1NTdDMjJDQgorOjEwOEY1MDAwNUZGODYzN0FEQUQwNUYyNUY4NDYzRTYxNzI0MkFEMTc1QQorOjEwOEY2MDAwRjU0OTUwREEzOTQyQUZDODA3QkQ4MkUyODU1RjYzRjI0NgorOjEwOEY3MDAwNkEzNEUxN0E4NDE3RTk4RkRBOEJFM0EzQjIwMTY1NUM4NgorOjEwOEY4MDAwMzJENEZCQ0YyODM0RjI3RDI3QUE3REVEOUI3MDdCN0IwQQorOjEwOEY5MDAwNDlEOUFFREE3NzYxQUYwQ0UwRkIzRTgzQjhCQkMzM0U4NAorOjEwOEZBMDAwNEMyMUFFNjMyMDE3NEU3RDU0QTFCMDkzM0VGQUMzNjhBNgorOjEwOEZCMDAwRTE0NzQxN0JFOTlCREI0OTRFRjlEQkQ4NDkxREZCMURBRAorOjEwOEZDMDAwNDVGNTQ2NUE5NjRFMUVEN0VCNjcxMERGNkU4QUMyQkMzNworOjEwOEZEMDAwQ0QxQTg5RUQ2RkUyOENEMzE5RTE3RUMzNTM3NTI0NDExQworOjEwOEZFMDAwMUI0NkVGRjVFMzBDNDY4OEVGRDVFQjk4MUQzMTc5RkM3NQorOjEwOEZGMDAwQzcwM0U2ODdGMThCMTc4Q0M1MkU4MEQ3MDZDOUZGQkQ0NgorOjEwOTAwMDAwM0Y4MjVENzE1MjI2OTgxN0QzOTI4MEZCN0RCRDgxM0VEMQorOjEwOTAxMDAwQTc3ODc2RkRCOTdCMUMxRUZBRjhBQThFQzUwQkJGOTAwNworOjEwOTAyMDAwNkExNzQzMkE5Mzk4QzdFMjM1QkY4REQyNTJGOTc1MjU0NgorOjEwOTAzMDAwRkExMEM2ODNDRkU4RERCMzAxRUY5NkJEQjMwRkZEOTEwMworOjEwOTA0MDAwOTVBMDc3RjcwOEY1REJCNURGRDE4Mzc2ODlGRTJEMjY2RAorOjEwOTA1MDAwMDc4MzUyMzcwN0U2MjUxMDRGNEU3ODlDNjg1NjIyRTM2NworOjEwOTA2MDAwQUY2NzZDQUVBNTMwN0YyMUU3ODRERkZGREM4QTMxQjFDQQorOjEwOTA3MDAwMjAwQUZFNDI5Q0IxMTA5Rjk0Mjg0Q0JBREIzQThGMDcxRAorOjEwOTA4MDAwRjkwMEVCQzNGQ0NDRTdBMjk0RjEwNTUxN0UyRjgxRjlFNgorOjEwOTA5MDAwQkZGNzAxMkREMUYxRDJBQ0NFRUZDM0ZBMkU3MTdCRUYyOQorOjEwOTBBMDAwMTI4RjUzNUQ4QTYxNzFBQjg3MTMxOEZGRERDN0JGREI3OQorOjEwOTBCMDAwQ0FDQjRCM0NBRTc1QzlBNkI0MTNDNTdCREJGODc3MTc5QQorOjEwOTBDMDAwRUE4Q0M2RjU2MUZCNjg3RkRBNTBFQkM1M0MyODlFRjc1OQorOjEwOTBEMDAwQjE5QTMwQkI2OEJGNzVGQkE2QjBGOEMxQUU4NEUyN0QyMworOjEwOTBFMDAwMzBBRjg0MUU0RTdEMEFDMDZGM0Y5M0JCMTA0Nzg2NzgxOQorOjEwOTBGMDAwRUYzMDhCQkIwMUUwNTU2RDI3NEU4ODk3MTI3QjQwN0Y4OAorOjEwOTEwMDAwM0ZDNDBEQzFDRTQ0N0Q4MUUxNDk3QjE0MkJDNUJDNzZBMworOjEwOTExMDAwMjU5NEVGNDMzOEFGMDgyMERGRUFBODk3MzM3RUI4MkJCOQorOjEwOTEyMDAwQzE4NUUzQjY0RjE1RURCQ0ZFMDRBQjEzRUUyRjEwRkU2OAorOjEwOTEzMDAwRUJBRUUyNThFQUI4MTVDQzE4RjVFQTI4QzZCN0Q0RjE3OAorOjEwOTE0MDAwRUFEOTgyNkZGMTc4RjUyQ0NFODc2NkI3MzA3RkY4MUNBQworOjEwOTE1MDAwMjNEOUQwOURCNkNGNkQ0OTYyRjY2MThDMjc0NzExQUZGOAorOjEwOTE2MDAwRjY0NDdGQTMzQzA1ODE5RkVERTlGRThFMzhFQkI2QjA1NworOjEwOTE3MDAwMzg2QjE1OEZEMzU1ODlGNTM1MjlENzc3MjRBMUNCMzg4RQorOjEwOTE4MDAwRUI5MTg0MDg3MTU2NzUzQzdGMUZDOEYzOUUyMTc4QUUyMQorOjEwOTE5MDAwQjRCMEY1OTdDOTk1QTU3QUUwMEYwQjA5RTY3RkFGM0MwRgorOjEwOTFBMDAwQjlBMERFNDhFQjJCMUYwMzRGMUZGMjIxRDQ0RkFCMzg4MQorOjEwOTFCMDAwQkNCQTlBNUY4MjRCNDNFQzBBQkY3MDM3NjIwRkIzODMyRAorOjEwOTFDMDAwNTNEQzM2NDUxRDM1REVCMEZDQzlFRTE1QTk4QUVGRDM1OAorOjEwOTFEMDAwNkJCMzE1RUY2N0FFQjk1QkQxOUVFNTI5NTBENDdCNkNCQworOjEwOTFFMDAwMUNBMjc4QkY1NzQzODlBMkRFN0JFQkJEOEFGN0YzNDkwNworOjEwOTFGMDAwNzYyQ0ZBOEY0RUM4RTAxQjIxNzc3OTI3MkJEQUVGRDkyRQorOjEwOTIwMDAwRkQ4MEUyRkIyRjQ4RUQ1M0MzRTg3QjRENTE4Q0ZGMTNFQgorOjEwOTIxMDAwOEZEM0RGNzc0MDI4NUYzOEI3NzFCRUUyRkI3QUE5NzE0MAorOjEwOTIyMDAwODA4RkJFQkZEMENGRkNFQkZEOUE5NzI5RkFCQjFBMzNEMworOjEwOTIzMDAwOUFEOTBEM0M0RTU4NEJGRjMxRkU2RDk3NTFGRjY5OTYwMAorOjEwOTI0MDAwQzgzNkE5NzNEQ0IwQTI2NUNCODZFRTI0NTJGQzkwQzk2NworOjEwOTI1MDAwRjU2NTU0QUU4M0RFQTRENjJCMEM4OTNDOEU5NDRBNTIxRAorOjEwOTI2MDAwNkY4NUQxNTUwODBGNENBODc3NUQ3RjRFNDZGRjU5M0U1QworOjEwOTI3MDAwQzk3OTdBMThDMjQ3NDdCQ0Y2Q0VGQjc1OUQzMEJGQ0U4MAorOjEwOTI4MDAwRjU1N0NDMEVGMDhGMkQzOUI5MDBGMUNGOTBBQ0M0ODNENworOjEwOTI5MDAwMjhCQjEyMEZBMkZCMjhGMUMwRUM1MEVFN0JFQzIwRTVCRQorOjEwOTJBMDAwQkVBQkUxNkM3NTJBRjE0MEMwNTFDMDM5NkVBQzEyMkZEMworOjEwOTJCMDAwMDQ3QzA3RDE3RjAwREYwMjEyM0M4RUY5RDE1RUM5RTE0OAorOjEwOTJDMDAwMjMxMUUyQjJDRERCNzExRDc3RDJEM0YyNTVGMEVDN0ZFMgorOjEwOTJEMDAwRDQ1OTZGNDIzOEIxN0MyOUExMTcxOUI4NUVBMkY2OTMxMAorOjEwOTJFMDAwNzdGODU3MTJCOURFQzNGQjExN0VFRDBEOTIwN0Y1OUM5RQorOjEwOTJGMDAwOEVGOEQ1MjA1Rjg2MkYwQkY0OUQ1QUMyRkMyM0FFQjJBOAorOjEwOTMwMDAwQzRDODdFMzQ3Q0RFOTUxRjREQzA1MUU4MzFDQjQxOEZGRgorOjEwOTMxMDAwQTFFMzJDMjI2RUU0NEIxN0I4MUVCM0M0RjQyNEM2MDE5QgorOjEwOTMyMDAwQUZGRTgxQzFCNzgyNzg5MTVGN0ZFM0I4MzZENTBCNDkzNAorOjEwOTMzMDAwOTg3RjUxMEQ0N0E5NDVGMjk5ODEwRTM4REY0RTI1MkRCMgorOjEwOTM0MDAwODI2RkJCMzFERjgxQTI5RDcxODAyMjlFQTBENDNCODlCOAorOjEwOTM1MDAwNTMwQUU3NEY0MjBGMTVFMzA5NzgwQUJFMjVDNjMzOTAzQQorOjEwOTM2MDAwNUEzOTE5RTg0MEM1Qzc0ODFGNzUzQzQzRTlFNzEwN0VFNAorOjEwOTM3MDAwMTExQzJDMkM2RTMxQjAyMzFFQzFFQ0MyOTA5RjhCRjlCNgorOjEwOTM4MDAwMzVFNENDQUM3QTAyRkFCNjQ1RjgzMUZDMzNFMUI5RjBGOQorOjEwOTM5MDAwNjNBOEVERjkzQkM1NDFFRkY3NDg4MTY3QjMzQUM3M0Y5MgorOjEwOTNBMDAwNDUzQzk1MkVGM0IzM0ZEMjhGODc0OUY2NzQxODZGRjI4MAorOjEwOTNCMDAwMUJCRDEzODgyNjkyMUZDRTcxRjYwMEVENDdENjA0RTMzRAorOjEwOTNDMDAwQzJGRDYzQzI1RkZEQjYxNEMwNzk3Rjg3MzgxRjIxNjE3QgorOjEwOTNEMDAwRkE0MjM1NjkxQzNEMzMwQkZDOUQ1NDZFQzU0MEM5RkNGNworOjEwOTNFMDAwM0NBNDU5QUQ4RkIyRjhBMTg2QUUwNEYwN0IzOTA5OEI0RAorOjEwOTNGMDAwMEY2Njg1REFCMTJFNzdBRThCRkM5NDNCQzlGNzVFNDlEOAorOjEwOTQwMDAwMTY3MTJFMjU4N0I1MzNGRTI2RUNCNUFFRUMyMzExQkZDMQorOjEwOTQxMDAwM0ZBNkE3MzAyOTA4RTVBMzM0MjY3MjNGNTYxRUM5ODMwQworOjEwOTQyMDAwRkUyOTVEMzUyNTI2ODAzRDRFRTk1MDBBQTdCQjhFRkNGRQorOjEwOTQzMDAwMTU2Q0VGNDQ3N0FBRjU4QkY4QkQ2QzJFNDQzRkNCODJCOAorOjEwOTQ0MDAwRjBGNTdFMEQ3ODA4M0RFMjA2NUQxQkFDRjc0Nzg5NzZBNgorOjEwOTQ1MDAwMkNBQkJBOURGQkQwMDlDRDg1N0U0NTFFNjI4RDlFRTU2NQorOjEwOTQ2MDAwRkQ5MjQ2QTVGRTdDMzY1MUM0NTk5OTlENzEyNzM4NzVFOQorOjEwOTQ3MDAwQkQwRjNDOUY4QkVGQzNEN0Q1ODc0NDNFOTc4MERGMjczNgorOjEwOTQ4MDAwODIwRjg2RTA3RDVFMDFDRjBFN0JBRDAzREVFNzIzQzE1OAorOjEwOTQ5MDAwNUJDMEUzNUE5MUZGNDVEODI3RDk3QzNBMTFFMDlDMTQ3MAorOjEwOTRBMDAwRTNGQTAyRjg2MkZBRDlDMDQ1NDkxMzlBNTc5OURDOEE1RgorOjEwOTRCMDAwNzk5Q0Q3OUI2NUI0OEZBQTg3QjM3QzlFRUFGRDE4MjQ1QworOjEwOTRDMDAwMjc2RDJEMDY4QzAzNTYzNDFGNDFGREFDQjU4RTMyRDI2QworOjEwOTREMDAwOUU1REMzQTk2M0JEMkE3ODc3NjVBRjg4RjVEQzUyQUQ4MAorOjEwOTRFMDAwNUZFNDg3NDA3QzNGQTlFOEI2NzA1MEI2NzMzODg4N0M0QgorOjEwOTRGMDAwOTYzMkI5NkY2QzIwQ0MyRUYxRjE3RDhGRDJCQUEyOTI0OAorOjEwOTUwMDAwRThGODg1QkY0QjhCMDFGODk0QzkyREM3NTMwMTBFQUIwQQorOjEwOTUxMDAwMjUzQzY3MzREMjQwM0NFMERGNEZFMUU3Q0QwNjA1NkFFOQorOjEwOTUyMDAwMUQxNjBBOEZFNDM0MTM5RTFCRUFGRDVERDkwNUYxQ0JBRAorOjEwOTUzMDAwOEY1N0FGQjJDMUI5QTgyQjc1NzQ2ODZBNzdGNDk2MzRBNworOjEwOTU0MDAwMkVDNDM3QjJGNzkzMUYxNDQyNUM2RDE2RTYxN0NGMzY2MAorOjEwOTU1MDAwQjA3ODdGRDZGN0EyN0QzRDI4OUY3ODUzNEY4QzQwNkYxRgorOjEwOTU2MDAwQkFFQzVBM0M1NzExQjRDQTY4NkZDNENCNjQxNEUwOTc4NAorOjEwOTU3MDAwODA3MzdDMzQ1Qjg3Nzg1RUZDRjM5RDEyRTQyMTg5RTc3RAorOjEwOTU4MDAwMjNFQjgzRkQ1N0QyRjI3M0Q4Rjc4NEQwM0E0Nzk2MDY3RgorOjEwOTU5MDAwRkJENzlBNDI3MDE2Rjk3RDQ0MUJDQzk4MUM0NjFGNDc5NgorOjEwOTVBMDAwMzgzQ0FBMTNGNDFCNDAxRUI2MTlCOTFEQzhFRDQxNjIyMAorOjEwOTVCMDAwRDEyMjFGNTlDREUzRUJFNzdBMTFFMkM3N0U3QzY2Qzg2MgorOjEwOTVDMDAwQTdBQThFNzJDNjBFMDRGRjE2RTQwRkQwRTIyRjE2NjcwQworOjEwOTVEMDAwQUMxNUQ3NkY0N0JENzkzNUQ3QUZEQTc4N0VGNkVBNzEyQgorOjEwOTVFMDAwMjU0OTYwNEYyNUQ0NDdDRTYzMUE5REM0RjRGQzRBMUUxQQorOjEwOTVGMDAwRjcxNkNGMkJCNTNFQ0M0N0FBODQ3Q0UxQjBGQ0E4NkYxMAorOjEwOTYwMDAwOUEyRjJDRjJDNEJCODQ4MzU1NEJCNDE0MEVENTEyNzExRgorOjEwOTYxMDAwRERFRUJEMDNGRjIzNDdCNDc3QUI5MjM0QjdDRDYzNUI3OAorOjEwOTYyMDAwQzhENzI3RjJEM0FBMjEzRjhEM0U1QUJEQkYzODg5NDRGRgorOjEwOTYzMDAwRThBRjQzREVEQzE4QTJDODBCMTNGOUNERDUzNzQ2NjA3RQorOjEwOTY0MDAwNUU1OEU5QTNBRDc4QkUwRkZBQjE5QjQyNzk2OTVEQzE1RQorOjEwOTY1MDAwRjk0ODIyOUI0NzM1RTQ4QkY1MEY3RkNFRjg0N0E4RkZFQQorOjEwOTY2MDAwNzhEQzg3NUYwMjAwQzFDRkQxMkNBMzFGRjY5NzI3MzQ4NworOjEwOTY3MDAwNjM3NzQ0OThFRjE2QkVGRUJCMTNCNDQ4MUZGN0Y4ODgxMworOjEwOTY4MDAwNzM3Qjg0RjFDNTdCRTJGQzA3QzBCOTNDQjdGM0ZDOUE1RAorOjEwOTY5MDAwNEEwMjczNjBGRTkwNzcxQTY5QkNGNTQ5Q0NDRTE2RjM4NgorOjEwOTZBMDAwNkVCMjA1MTY3MzNDQzdGMzE3MUQ3NThCNzIxRjVGRTAxMgorOjEwOTZCMDAwRkJEODc0NkYyMDAzQ0YxMThEOEI5QzA3MkZGNkZCQTY3MAorOjEwOTZDMDAwRDlGRDI2RjBEQkNBNjlGNDY1RjBCMzZCNkIyNTRCMTg0NgorOjEwOTZEMDAwN0Q3NUI1REYyMTM4NkIxNEY5N0Y5REUxQUNDN0ZEMTVCMQorOjEwOTZFMDAwRkQwOTdCRTRGMjU2MTlFM0ZCOTc0RjcxN0EyNDRFOTMwMAorOjEwOTZGMDAwNDRFOTZBMUU5NzU3OTcwOThCMTM1QzZFOTBEMDBFOTlCOAorOjEwOTcwMDAwRUYyNjY0MERFNTJCRjM3NjJFQzczOENERTI1REZEMzdFRAorOjEwOTcxMDAwODA5ODgyRTc2QjI5RkY5ODk3NENDODA4NUFDRTVGQUZCNAorOjEwOTcyMDAwOENEMzJFRENEQ0M5RkY0NkMyRTUyMjU1M0JEMUFFNUVCMAorOjEwOTczMDAwRkNBNEYyQkIwQUIyRjlDRkEwRjc1NEE4RjQ5QURFREM3RAorOjEwOTc0MDAwQkZCNTJGODlEQTA5QTBENzBEMjAwMzgwQUZBRkRDRjVCNAorOjEwOTc1MDAwQTUxRTUyNkRCQkMyRjMyQjk0OUU3QjZBODFGRjU5QjA0QworOjEwOTc2MDAwM0M5MUU0M0MwOEZDRkRGNzQ5NkUxRjk0RUQxRjMwMzgzNgorOjEwOTc3MDAwNUNBRkJDQ0VGOEZENzNGMTI4NjcwQ0MwOTRFOUZGMUEwQQorOjEwOTc4MDAwNjZCMjc4RUJBMzk0NEQ0MDlDQ0Q2MDYwN0E4REQwRTdCMworOjEwOTc5MDAwNjQ3OTk1MUM0M0RCMDc3RkJFREEwNkZFQkZGODk3QzdFNgorOjEwOTdBMDAwOEMwNTdEM0ZFMUU1NjgyN0MwNkI1M0IxMzMxRkVDRkZBQgorOjEwOTdCMDAwNERFNTI2Q0M1QjMwMUE1ODlDRDdGQkNCQzE2RjgxREJDMworOjEwOTdDMDAwQkY2N0UzOTYxMkIwM0YyRDJEODc3REUwMUZEOUE4RjkyMgorOjEwOTdEMDAwMzM5RTFCRDkzODgyRTVCNTc1RTQ0RkI2OTRFRjgxRjkxNQorOjEwOTdFMDAwNjQ0QzYxRjI2MjUzOTYzM0RGMTJENjJGRTFGQTU5MzU5OQorOjEwOTdGMDAwODc1OUZCQzFERTNGODZGM0VBQ0Y5RTQwRjU5OEFFMkYzNgorOjEwOTgwMDAwMUJGRDcwNzcxM0I2OUYyMjdGMEFDNjBFRDc0MzVCQTk1NAorOjEwOTgxMDAwREM4MTI0M0M1MUJGQkI1MUYyRTlFODdBQUE5QUY2NjA5OAorOjEwOTgyMDAwQkNBMkYyNjE1RkUyNEM5MDJGMkY2OTMxREUyM0U2MTc3NAorOjEwOTgzMDAwRkY2NjRBMDlDNDc1ODQ1Qzk5Mjk1OTk4OUY5MUVCRDlCMAorOjEwOTg0MDAwMzM4OEY4NjM3MUExRTkxQzBGNjY3MEZEN0E2NjM0ODM3MgorOjEwOTg1MDAwRUY3Q0UyQzg4MEVGMUUzMDkyMThGMDRGQ0YyQzZEMkNCOQorOjEwOTg2MDAwNDJCOUIzNUM2NzA1NzkyRUUyMUI1REVCMDE5MUZENDRDMworOjEwOTg3MDAwRDUyRjlBRDlGOTU3Mjk5ODAzOUQ1Q0ExNzYwNzYxRkVFNworOjEwOTg4MDAwQTI4ODc5QkZFNjY0NEU2NzM5NUNERkVCNDk5QzEwNEZENAorOjEwOTg5MDAwQUIzRUQ0N0IzQkY4MDMwQ0RENThEQzk1RjIxQkUzQTAxOAorOjEwOThBMDAwMDJENDc3OEQ2MEM3MkMzRDEwRTU2MzdFNkEyRjNGRTdCOQorOjEwOThCMDAwRUFDQzg3RkM4RjlBQzk2OTA1OTg4NzcwOTZGMjBEMzNCOAorOjEwOThDMDAwOUMxRjBDNjQyMDlENTI3RTIyNTE5OTk2OTM2QzlFQTAwMQorOjEwOThEMDAwODU3MzdFQTk1NDlGQTJGNTI5NUI1MzI3NjgyOUJFNTczQgorOjEwOThFMDAwNjcwNzE2NkI2ODdENkQ3MjIxNkJCRjNCNzAxMUVBMUJCOQorOjEwOThGMDAwOTI0N0IyRjY4MkMwNjI5OUQ2QjcyNzRGNjQ3NTMwRUNCMgorOjEwOTkwMDAwMjg2MkZEM0E3OUNBMDQwRkVERkY4QTk1Q0I2OTQ3MDBCQQorOjEwOTkxMDAwQ0ZGRDU2QkZEMTVCMTNFRUE3REMwNkM5MEIxNDNFNTczMworOjEwOTkyMDAwQjhCRkY1NEExNjk5M0IxOUUwREQyNzgwRTdDQUM0N0IyQQorOjEwOTkzMDAwRkY4N0JGMjdGMjdEQzUzQUM1NzcyNDM5NzJGRjQ1RkMwMgorOjEwOTk0MDAwQkJBNUZDQkNFRUM4NjhCMjMxOEFDNUE1M0MzMTE0RkU4QgorOjEwOTk1MDAwNDc1QjdBNjM1QzJEMzVEOUM2RkFCN0QwN0UwQTQzRkRFMgorOjEwOTk2MDAwMDgzODhBRkVDNEI4Q0I0MDlFMDI5RkQ1MzE3RkE5NjhEMworOjEwOTk3MDAwMkY0OTY2RkM5QjhFQjMxRUM3RTlFOTY0RTc1MDI3QTcxMQorOjEwOTk4MDAwRTVDM0JFRDFGREQyRjJGREQyMzJCQjczM0I5QjFGRURDRQorOjEwOTk5MDAwRDc5QTg3N0NCRDNGRjhCQjhGREVBNEVGNjc4NUU2QUQyNQorOjEwOTlBMDAwQzY4RkZCMzg3RTJDQUQ2N0YxQzRBMEI1MDdFMkQxQzhFNQorOjEwOTlCMDAwNjhBNkU3OTE0MkU1M0FCNjI3MzNCRUJGMkREOUNBRjA3MworOjEwOTlDMDAwQTI2MzNGOTIyNDFDQTc5RUMzMzE4REMyM0RGNzlCQUY3QgorOjEwOTlEMDAwN0IxRTlGQ0YzRjdCREQ2MUZCRTU4NEZDQkVBM0NENzc4MworOjEwOTlFMDAwRUQwODVGOEZDOENGMTZGRDVDNTlBN0ZBNkUxMENCOTNCOAorOjEwOTlGMDAwQUFCNkY1QzBFRjFFOEQyMjQ2N0M0RTc2NzQ3Qzk3OTVGNAorOjEwOUEwMDAwQzdGNDRCRDAzQkM1N0QwQ0M0MzMwMjlEMDQ5NTlDNkJDMQorOjEwOUExMDAwNzREQ0FGRDBDOEYzMDUzQkQ2MzdBMTkwQUZDRkMyRDcyNworOjEwOUEyMDAwNjczMTg2RERBQkQwNDE4RkE3ODMxOTUzQ0M5REYxQjc0OQorOjEwOUEzMDAwMDNFRTFERkRGNTJERTBGRDI5RTgzQTUyN0Y0MDFGNUQ0NAorOjEwOUE0MDAwRURDNzRGRkZEOTc4MjhFNkE5ODI2NzA3OUM1NUYzMTMyNQorOjEwOUE1MDAwRjAwNDdBQzZFRkZBMkFGMTUxQ0M3MzQzQzczRUFBRTg2NAorOjEwOUE2MDAwM0FFQjVCOEU1N0NDQkVBQjdBOTBFN0ZEREE5NUY4NUNBQgorOjEwOUE3MDAwRDU5NEE1ODE3OEI5Rjg2RTJDRjhEODEzNDJGRUI2N0QzRQorOjEwOUE4MDAwQzlEQzZFNEIyMzY5NURFNEJCQkQ5MTlDMTBEMTRGODc0RgorOjEwOUE5MDAwQ0ZENTc2NUJCQjk1RTUzOUFCRkQwNkVEMDkwRTNGOUM1NgorOjEwOUFBMDAwQzNGMzVDNjNFN0NGODdBQUY0MEQ4OEJGRUMzNTg1QkVBRQorOjEwOUFCMDAwMEJDOTEzNjVERDkwQzJGODVCNjczRjUwMTBDRkNCMTYyMgorOjEwOUFDMDAwMUE0QTVFQjMzQjI4QkEyNDJGNDNGRTVEMTg1QkIyMkFDNAorOjEwOUFEMDAwOEJENjNGNEFBRTQ0N0U1REQ4QkRFNENCMkNDQUJGRkZENworOjEwOUFFMDAwOTg1Q0M1RUFGNzk0N0M5OTBERjVBRDU1RUNGRDkxQ0VFNworOjEwOUFGMDAwRDc4MEJGMTM0RkQ1ODQ1MTI5MjFGREUxNUNCMjlERTk4OAorOjEwOUIwMDAwMUZBNTFBMDI3ODY0OTA1NzM4NDA0RTBBNzg3NjU1MTY4OQorOjEwOUIxMDAwMUEzNEI1MTFDRkI1NzZFMDAxOEI0RjBDRTJGMjc5OTA5MworOjEwOUIyMDAwQjBDQjAzNUE4NTVEREUxRUMzQ0UxM0I3ODMzQ0E1RUJENQorOjEwOUIzMDAwMEQyNkJCQUYwMEZDNkJBMjVCRTc2NEQxQUUxRThFRkVCMAorOjEwOUI0MDAwNDQwRkZBOTBFNEE0RkEwNkY4MzlFQzE2MzIwQkYyRTc2NworOjEwOUI1MDAwNUEzN0I5NDAzRjIyQ0IxQzQ2MkRDMjkzRkI5REU4REExMQorOjEwOUI2MDAwNkVEMTdFMEUxQzdBRTlBMUVFNkMxODE3Q0M2MzMwQTc3QgorOjEwOUI3MDAwRkY5QTQzN0ZGRjBBRTJBMjM1NTc0QzBFNTBGRjA2QjcwQgorOjEwOUI4MDAwM0NCMzBBRjRBQkMxMkRFRkZDOURDOTVCNzYyRTQzQ0NGMAorOjEwOUI5MDAwN0IzMEY4MEZFOUYzNDFDRDA2OUNGRkUwOTZCQjE2QzE4MAorOjEwOUJBMDAwRkI0MzdGRDdEMjAzRjA2M0Y4Mzk1RjNEQjA4M0Y2ODM4MAorOjEwOUJCMDAwQkZFOUFFMzg4RjQxQkU5MEJFQ0Q3OThDMEU3ODdDNEUxOQorOjEwOUJDMDAwOTVBNzU4ODQ4NzI5MDVFMTcxMTNGM0EyREExMjRFNkQyNworOjEwOUJEMDAwMDhBMDlFQTYzQ0Y3NDJGNTcyOENBRjVFMjdERDFDMTBGNAorOjEwOUJFMDAwMjcxMEU3QjRENUZFQ0FCM0U1NzQ3REY0RjlGMDIwOURFMworOjEwOUJGMDAwNDE5OEJFM0NGMjA2QjVFQkMzRjRFQzYyNjI1NUQ0NEIxRgorOjEwOUMwMDAwOEQyOThBRjdDQjJDNTk4QUY2MzFDOTc3MjlEQUM3RDkzOQorOjEwOUMxMDAwRjMxNUY1RjE3RDA2MkJERTlGRTgyODU2RDRFRjFCMzRCMworOjEwOUMyMDAwNEVGMTdFQjlCMzVDNTFDRkY3MzUyQURFRUY3RkEyNTlGMgorOjEwOUMzMDAwRDk3RURBOEVGQkQwRkY5Q0FCMTRGNDc4ODdERjVEMEYwMgorOjEwOUM0MDAwRTVDMEQ2ODZEMjU4M0JFOUU0QTcyRDBDNzhFQkUxRjlDNAorOjEwOUM1MDAwRDA5QkI1NDUzRTEyRTFCQ0NBMzIzN0ZBRjczQjlENTc1RgorOjEwOUM2MDAwMjk2NkU3RDdEQjM0RUNCQzg2RjBDQjBFMzZCOThCNjFDNgorOjEwOUM3MDAwOUZERTk2MjhEODI5QjA0NzE4ODM3MUIwNUY2NTczOUYxRgorOjEwOUM4MDAwQzBGQ0E4RUI0MTgyN0VBQzI2N0RFMDQ3NDM0MUNFQ0ZBRAorOjEwOUM5MDAwOTY1MUVGNkRFMjc5MzU0REQzNzMzMURGRkRBQzE0RDhCOQorOjEwOUNBMDAwMDdGMTc5Q0Y2Qzc2MUU2MDM4RDU3MDcxREQxMEQzOTREMgorOjEwOUNCMDAwNjA5RkRDOEE3NTE3OTNBNUFBN0Q1QUExQTg5NzU5MUVBMworOjEwOUNDMDAwNTRCQzNGMjY3OTlEQTI3RDlDRkQzMUQ1M0U2RDUxRDQ3QgorOjEwOUNEMDAwMjczQTlFNTFFREQzNzZENTNFQkRBNDY4MUY3RTIxNTAxNAorOjEwOUNFMDAwMEY2NDM0QjJENTIzOUJFOUZDODc5QzZEMjg4NTdEMTlEMAorOjEwOUNGMDAwN0FDRTMzMUJFOEE1RDBFN0FFMDc3NjU4NzRCNEY2MDhFMQorOjEwOUQwMDAwOTQzRTZBNEY4MTdGRUFBREJBNjQyQzhGRDZEOUQxQkYxOQorOjEwOUQxMDAwNzRCQ0FFMEY5NjI3RUExQ0Y4RkNCNzc1ODNCMDdDQjcwRAorOjEwOUQyMDAwQ0U4OUU1N0ZENjhEQzVEMjVGRTdDMkIyQjFBRTExREY3NQorOjEwOUQzMDAwREY1QkQ3OEMyNTg1NjAzQUM4OEJGOEI4OEU3QjEzRDI1MQorOjEwOUQ0MDAwQzE4RTZGRDMwNEFBMjE4MkZBRkQ2NzBFMjI1RjZDRUJFRAorOjEwOUQ1MDAwMTY2ODgzRkFDM0E0NjVDMjI4NUE5RjBGQzYxNEU4NTczMQorOjEwOUQ2MDAwNTBEMkZERjRBNDNBRkYyQjA1RjIyOTUyRDg3MzkxOTdGMworOjEwOUQ3MDAwRDBBODcxRTY4MzdFRkRGODMzQzczNjZCRDMwOTc5NjRDQQorOjEwOUQ4MDAwOUQyQkQ5NjI2NTc1MjNBREUzNjY0MzFGOUU2MzlCOUQ0MgorOjEwOUQ5MDAwNjk4NEZDMEE0NEM2MTBBQzRGODA3QTdCMTQ2QkRGRjBGOAorOjEwOURBMDAwQ0NCMTA5MUU5QzFGOEIxRjRGMDlDNThGMUY0Rjg5MTBGNworOjEwOURCMDAwM0ZGRUQ1MjVCQjE5RkMyOEE3NkVGNjM2QzNCQTRFNzFGNworOjEwOURDMDAwQkY5MTkzRTRFQkU2RDFCMjU4OUJBRjAzQjk3ODU2QTVBNworOjEwOUREMDAwNDc4OEIyNDY1M0ZDMjRFMDY5QTNDNjMxMTVGMzgwRUZFRgorOjEwOURFMDAwRDUxMUM4M0I5RjJDMzE3QkI0NDMwRjRDNjVGMkE4N0Q0NQorOjEwOURGMDAwQTIwMUVEOUREMzFBRTcyMkNDNkY5MjgyQ0YwM0JDNUUwNQorOjEwOUUwMDAwNDlGOTEwRTFENzZFMEU2NjAwMUM3RTk5NzI4NkQ1MTM1MworOjEwOUUxMDAwODJDRjRCOEVCMEJBOEVBREYzODU5NEQzNURBRDczMzdFMAorOjEwOUUyMDAwQ0NBN0QzM0E1M0Q4N0QzMUM0RTc0QzA3RjkyQkVBQTcyNgorOjEwOUUzMDAwQ0I5RDU1MjAyNzRFMTczQjdCQzE3QzRFQjkwQzQ4M0YyQworOjEwOUU0MDAwMUU5N0Q5MEJGOTk1NDRFQjJDOUExQUU2NEZFOTlEQUE3NworOjEwOUU1MDAwQzNFRkE2RTgxOTlEOTEwN0U0ODhFN0M0Q0I1Mjk5OUUwOQorOjEwOUU2MDAwODVGQjA2RjZEQzhDNjhENEMzNEY2QjIyOUZGMzlFQ0QzNgorOjEwOUU3MDAwRTE3M0I1NUI2NEZGQ0ExQ0RFNUU3MkJGMTlGQjZCNUZFQQorOjEwOUU4MDAwMUQ4NUYxREI3NjU3NkZENDgzREE2QjI5OTQyODdEQjQ3NgorOjEwOUU5MDAwNUZBQUJERjYzQUI2MUI0NDY4MEJFMzk0MzMzOTlGRkFDOAorOjEwOUVBMDAwNTVDQkFBQkY5RUExRUY3RkIyM0FEQTgxM0NEQzcyMzc3NAorOjEwOUVCMDAwQ0FBNzA3RjhDQkIzRTM4Q0E4QjdDQzlFOUM1RTAyNzIwRQorOjEwOUVDMDAwNjkyNjhGNzdDRDMxNkIxMzMxRUNBNUI1RUFFMTBBQTA5NQorOjEwOUVEMDAwODVBNkZDMEQyMEZFMTdDNzk3RUJBREI0NUU5MUI2NjI2OAorOjEwOUVFMDAwMDM5NENCN0E2RUQxQzM5MUNGQ0FCRTdCMzY4MEZBNTgyOQorOjEwOUVGMDAwNDU0OUFCMDhFREE1QzA3Qjc1NzQ1RTczRDdDODc2NjYxRgorOjEwOUYwMDAwM0Y4OTczODZDQkJGNTE3RTg1QzBDM0QzM0M0Rjg2QzI4OQorOjEwOUYxMDAwMTdFREMyQjlBOTkyQzIyRTk5OUJDQUY0ODY2QjI5NUMyRgorOjEwOUYyMDAwNkZDQjI1QjlCNzk0NzE5QzNGMDMzREI0Q0U3RTJGQTc2QworOjEwOUYzMDAwMEI3RkJCQjI5REVCNkQxRkVBRDlCOEVBN0IyNkM0Qjg5NAorOjEwOUY0MDAwNkUzRThGRDM3QUUyOTQ0MDhGN0JDMDhDRjg5MTM3RkRDMAorOjEwOUY1MDAwQ0I4NzhCRThGQUYzNUEyQzFBOENDMzBCM0VFRTY3RjdDQgorOjEwOUY2MDAwN0QxNTVENzAyMzlGMUJEODFBNzhGMTBDNDEzQzZGMDY1QworOjEwOUY3MDAwM0FCOTkzOUNCQURGQjMwRUU1QzNFMEJGNTBGOTAzN0M1NgorOjEwOUY4MDAwRjFBNkZCOTMzM0Q4MUExRkYxRkNBNUFGQUU4MkYzQzczRAorOjEwOUY5MDAwNUFFNDZCNDdFQkQ2NjBGRDc4OUQwN0NCMTM3NTFCMzlGMAorOjEwOUZBMDAwN0Y2Q0MwRjY3N0VCQjY3MkZFRThFNUZDNzEzNzNFNkY2QQorOjEwOUZCMDAwQTk5QjhFRTVBMTNBMzc5NjQ5MzFBRUM0NTRBMDBCQTNCNAorOjEwOUZDMDAwMUJGMzMxOEYzRDYzMjAzMkM0MTk1QTBDODhBNzk0MDJDOQorOjEwOUZEMDAwOUU3RjM2MUVGMjVGMEMxNjM4NjdBN0NFODM1MUYzREJFNworOjEwOUZFMDAwOEVGRDZGRUE3NDhGNDU3NjZBNTE1OERFMEJFODY3OTlFQgorOjEwOUZGMDAwNURFM0NGMjk2MjM3MDMzRjE5QjIyRDY1MjJGMDhGNTNGRAorOjEwQTAwMDAwNzZCQjE5RjRENkExQTlBOUFDRUVCNDlCNzVCNDNFNkM4RAorOjEwQTAxMDAwMUJBRkJCRUQ2NjAzQUQwRjRGRUQzRTExRjRERTUzMUVEQgorOjEwQTAyMDAwQkIzOThBRDY0NzZDRUJDRURBQkQwNDgzRDRBNURCRUMxMgorOjEwQTAzMDAwMTM4MUZGMTQxM0U5MjhEMDQzQTkzMTZCMTRBNEM4OTZFNworOjEwQTA0MDAwNTk4QThGMDIxRDhDNDk5RTM3MEFFODYwNkY4QTFERjE3QworOjEwQTA1MDAwNjE5QzdEREQ1MUE4OEZFRkIzNUQwQjQ3NkI5Q0E2RkMyNworOjEwQTA2MDAwRjVGMDVENDk3Q0I5MTZCRTFCOTVCNjYyM0Q3QzM3QkFFQQorOjEwQTA3MDAwRTcxNjZERjg3NzYzRkJFRTU5MEZGNTA5OEVFRDVBRDBCMAorOjEwQTA4MDAwMDdGN0E2QjBGOEE3RTg0N0Q0NDVCQkUwQUYyMjRGQUIyRgorOjEwQTA5MDAwNUY4QjBCRjk3ODVFQjMwQkY5Nzg4NzNGNjI0QUY5MjMzRgorOjEwQTBBMDAwRTBBN0FCNjk5NjJDMTJDQzYzOEFENDExN0M4NzVDQjg4QworOjEwQTBCMDAwRUE5Qjk0NUEyODlGOURCQ0VEMUVGMzNBNEE1RjM1NTBBNworOjEwQTBDMDAwMUY4MkY1MjdENjQ1RTZCQkQzNTIyM0YwRERERjczM0E3NgorOjEwQTBEMDAwMDVCOTA5RjlDRkJGRDdCMzdCMzg3RUMzRDc1N0QzMzI4MQorOjEwQTBFMDAwQ0YzQzBGRUQxOUI3MTlFNEVCQzExNDI2MjcwRjczRjkxNAorOjEwQTBGMDAwRjg2NzVFN0VDNTlGRDc2ODlDRjM2MEZGMkI1Mjc5RENDMgorOjEwQTEwMDAwQjYzMzVENTdDMjNDMjhEREFBQ0UwNTc0RDFDRUU5QkE3QworOjEwQTExMDAwM0E5NUNCMDc3RURGNDExNTYxRTc4N0VFOTRBRkI1MzQwMgorOjEwQTEyMDAwREM3RUNCODJCQzlDQzZFMzkwMjdBQUNFN0YxMEY5OEQ0MworOjEwQTEzMDAwRUFCQzVGQ0ExN0YxNUUxN0QyQUNDQzFCRURCMDNGQkFEOAorOjEwQTE0MDAwMzFCRTA3QzcxNUMxRTg3ODM0QjU0QjdFRjZGODFERDY4OQorOjEwQTE1MDAwRkQ3OEE0NzUyRjI1MkM5RjU5QkQwRUUyNEU0MERBMTJEMgorOjEwQTE2MDAwRjlDRDlERDcxMzg4QkM5RTRFRUI2ODUwRENCRjIwRkMxOAorOjEwQTE3MDAwRUM1NDBGN0ExNkU2NTMzNkQ3NENDMDdGMTNDRTI3Q0U1OQorOjEwQTE4MDAwREM4NjRGQThGOUNFM0Y4QjlGREQ4NkRGMzRDMjNDRDVGRAorOjEwQTE5MDAwRkM0NjlDNkY1Njk3NDI5RjgzNzM1MTkwNkYwN0Y3QjRBQworOjEwQTFBMDAwODA5RkZFQTE0NEY3MDFDMERCRjY5MkUwNTcxQUIwQ0ZDMgorOjEwQTFCMDAwRTIwMzg4Njc2OTU2RjcyMTc4MkVFOTU5REM1REU0QjEzRQorOjEwQTFDMDAwNUVEMjc4N0UwRDdBRDE2RkI3MkQ0MjNFRDQwNkMyODEyMQorOjEwQTFEMDAwRDJFMzVCQjQwRUZFRDM2MTE2RDc1MTk4MTdFOUMzRjBGMgorOjEwQTFFMDAwQTdBQkZDQ0M3N0I4MUVEMkI5NjQ3NDI1RjIxNERCQjdFOAorOjEwQTFGMDAwRkYzRDAzRkQ1ODc3QzBGN0FFRTA1MDI2MEYwQjQwRkU0MQorOjEwQTIwMDAwRkZGNTQxRDFBOEYyQjQ0QUM0MjcxNTQwOUU3NTIyRUE1MQorOjEwQTIxMDAwMTFBREU5N0EyRDk0RkY2QzNCQjEzNTNEMDdGQjU3REI1RgorOjEwQTIyMDAwOEJBRDI5ODM4QzZDRENEMTYzQTE2Q0Q2QkJCN0NFMDMxQworOjEwQTIzMDAwM0I2OUIwMDFFREE0Rjc3OTdFREZBNEYzMzdFMzQxNUUxQgorOjEwQTI0MDAwNEQ5MjdEODk3OTUyNjczQkIzRjVFNEFDMTI3QjVFNjczMgorOjEwQTI1MDAwN0I5M0FFNkYxNEFDRUY0RTc2QTdDQkU4QjcwMTE4RDU2MQorOjEwQTI2MDAwRjY2N0U1OUFBRjA4RTQ0MzBGNUQ3MzkzQzA3RDYzNzdBQgorOjEwQTI3MDAwQjY0Nzg5MEM2Q0EyRTBBQ0UzMDg5NDQ1MTc5Qzk4ODYxRAorOjEwQTI4MDAwMzNFMDUyRUQxMTI4MDdGRjg1OTlFNzc3Q0EyNzFBNzI0NAorOjEwQTI5MDAwQTNGMTA4M0IwRURFNTc3OUJGQzJBMDc3OThCRENBQ0JBOQorOjEwQTJBMDAwNEVGN0IwMkRGMzI4RjNENDhBN0Q0NTk4M0YyMTA3NjJGRAorOjEwQTJCMDAwQTBCQzI2MDVEMEVGMjU2QkQ4QkQwQkUyQkUwNTZBQzc1MgorOjEwQTJDMDAwQTY3NjRGMDBCQjk3RTU0QjhEODQzQzIzM0FCOUIyMUY2RAorOjEwQTJEMDAwN0MzNEU3MjFBNEZCMjhENDdGM0FFQ0Q4RDczNTk4MUZFQgorOjEwQTJFMDAwRDBBNDc1QzYwRTA3M0I3NjREMkZDNzNBNUFGRjkzM0Y1MQorOjEwQTJGMDAwRTE2NzA3Njg1OTYzRjk4QTg0REZDRjU2QjlFNkJBQTJFNQorOjEwQTMwMDAwREVCQTJFNzRCRjBGRTQ0MTU3RkU4RjhDNzJBNzkyOTA3NQorOjEwQTMxMDAwOERCMDVGOTVFNDJERkRDQTMwMzk0ODFBRkZEQzAxRjc5NgorOjEwQTMyMDAwN0U5NENGOTUwM0UwRDBBRUQyNEU3MkQyRjdDQUI5QkRCQgorOjEwQTMzMDAwNDEzQzhGQjAzQUI3QjMwOEY5N0NBMjkzRjY1QjlFQzA1QworOjEwQTM0MDAwREYyNzMzNTg3QkJBNjg3RjgwRDU3Qjg5RkVGNjRGQzQwMAorOjEwQTM1MDAwN0E4QUE4RjNGRUVFMTJGNTJEQUM5RTI1QkVERkNCRUE3RAorOjEwQTM2MDAwQjk2MkZDRjdEOTc4NjZGNjdFNjlGN0VGNEQwMkZENDNENgorOjEwQTM3MDAwRjBGNzcxREQ5NUY3RjI1MDdFM0ZCMUZCRURGMzQ5OTRCNAorOjEwQTM4MDAwRUQ1QzFFODg3Qjc4Q0E3RTMwMkVGQTNEQTBFNzQ2MDkzOAorOjEwQTM5MDAwNzNERjJBRDdFQUQwQkY3REQ1RDY5ODE3N0UxRTU5RTQ0MQorOjEwQTNBMDAwOUZCODRBQ0Q0RUQwRjdBQUY2RjVERTIxRjM3QzFDRDAzQgorOjEwQTNCMDAwMzc3RUM0RTNDQTY1QjIwOUUzMTFENzM3MzMzRURGOTU3MAorOjEwQTNDMDAwQkVCNjc4Q0QxQjhBRkRFQ0Q0Q0VFRjQ5QzY0MDFEMUQyQworOjEwQTNEMDAwRUZEQTEzNDk5OERGNEU3QUZBMzEwRUJFQkNCQjI0RTJBNQorOjEwQTNFMDAwRUQ3ODlFNTVFNDdCQzVGNzIwNEVCMDRGRTM3RjEzQzU1MworOjEwQTNGMDAwRUVBMUJDRTA0N0ZFQkJGODM3Q0NERjVCRjVDQzExOTQ5NworOjEwQTQwMDAwNzNGMzY1M0JFMkYxRjEyQ0Y3MEE4MDRGOUI5OUREMzczRQorOjEwQTQxMDAwQjg3OENEMjFBNEQ3QjU5OTVDNEZCMDA0RkI4NkMzRjNCRgorOjEwQTQyMDAwQzFDRUYwRkZFMTFERTBGRkMzN0YyN0ZDRDU3RTY2NzE0MgorOjEwQTQzMDAwMUU3QUQ5MzdDQzRCNkIzM0IzMzhBODgzRUZEMzc5OERFMQorOjEwQTQ0MDAwN0QwMDg3RDdEMzQwRTdENzE2Rjk3M0FDMzIyNDBERkJENAorOjEwQTQ1MDAwMTM1OUJFRDFCQjQ1NjAwNzVEQUYzNUUzRkQ0NEIzNTYyQworOjEwQTQ2MDAwN0Q5QzE3N0UxRTQ1OTQ2QUZERkY3M0EwQTM4NDEwQkNEQgorOjEwQTQ3MDAwNzY3NUU3RkE1RTA4QkUyRkREMDFCRTJGRkQzQkUxOUIzRQorOjEwQTQ4MDAwQTQwREU4MUQxMDM3M0RDQkVFMEIxQkUwM0ZBRjBGQ0YwNworOjEwQTQ5MDAwNzMzOUQ5OURDOURERDg2NjE2Mjc1MkU3NkI5REVDNkVERQorOjEwQTRBMDAwNjY3OEM1RTMzMTU1OTNERjFEMDZGMTE4NDEwRjIzQTNFQworOjEwQTRCMDAwNDkyM0Y4RDcyOTVFM0IzODVFM0IwMEFGMDVGRTg2RTJCNAorOjEwQTRDMDAwMzJGNEJCMDhGNDE1QzI1RkMyRUM2MjBFMjc3RjY3QkM5MgorOjEwQTREMDAwM0Q3RDA3Qjg5RUZFNzdDMkI1ODlFQUJGMThDNzdDM0RBRgorOjEwQTRFMDAwMEFGRDI3NkEzOEZGOEREM0JCODBCNzMxRURGNjcwMzY5MQorOjEwQTRGMDAwQTZGRDZCRTA2QzRDQjMyQkYyRDIwNEJDQkI5MjRGRUFDRQorOjEwQTUwMDAwRkQxMUYzOEU0MEE3NDVERjg2NEUxRjRERTc3QzRBMUJBOQorOjEwQTUxMDAwQzAzQzUxRjVCRUM3QTY3NURBRjdCOEI0REJFRkJCQjJFNQorOjEwQTUyMDAwRkQ1RkJDRUY2QUI4QTlDQjRBMUVERjU0M0ZDRjRGRDNDMworOjEwQTUzMDAwRkM0QkUxRjhGRjlCRkY3Qzc2RUQ2MTQ1RkJEQzM1MjdBQQorOjEwQTU0MDAwMTVFREYzM0MxRjI4RUFDMzAyRkU1MjQwNzNFMTBGMUZEMgorOjEwQTU1MDAwNzEyOTg4RkFFNUI3RjVBQjc3RTU0RjlGRjREQTEyMEQ2QworOjEwQTU2MDAwQzREQjA2Rjk5OTNGQkYyREREQkQwMUYwRUI3RDhEQjc1MgorOjEwQTU3MDAwREU0Q0UxM0FGMDVDMjNCQkE3QUIyMjA3RjM4NzU2RjEzMAorOjEwQTU4MDAwMzk3RTM5RUM2RjlGM0M0NEYxRTY0QjYyNDA3RkE3RUY4OAorOjEwQTU5MDAwRjA1RDVBN0I2RTY3M0MyOEJFQTEyMUNFQjAzQ0I0NjIxMAorOjEwQTVBMDAwQTM1NUVCNDQ3RjBENzE0NkMyOUJDN0QzMThERTYxRkVGNQorOjEwQTVCMDAwMEZBNUY3RTk0NkEyOEJBNzc0M0U3REJBODRGOTRFRDM2NgorOjEwQTVDMDAwMDlDQjg3QTZBNUNGNEREQjI3Njk4OTBGRUUzNTJFMzczRQorOjEwQTVEMDAwNjk3RDA2OENGMzI5Q0YyRjFCRjhCREM3MjQzRTRFNzEzMQorOjEwQTVFMDAwOEU1OTc2Q0E5ODk3MzY3NTEwOEIwRjNFNjA2QUM0NzM4MQorOjEwQTVGMDAwQTQzMzRFM0M3Q0VEMjFEQTRFRDY3QjhBNThCRUI1Mzg2QQorOjEwQTYwMDAwN0ZGNjA3Q0QzNzg5RkIzRDlFNDY5ODlGNURFMjcxNjREQQorOjEwQTYxMDAwNDk4N0Y3NjFBOUJGOUJDQkQ3M0I0OTVFMjc0M0JFNEIxOAorOjEwQTYyMDAwRjAwMzgyN0FCN0EwM0JCQUJFMTM4NjAyNzZCRTAyN0VFMgorOjEwQTYzMDAwNzdBMjlDRTg3Q0JERjE3Q0YzOTY1Mjc4QkZGMkI0MUQwMgorOjEwQTY0MDAwRTE1MjMzNjg1RDFFRUM2M0NEMjhFOTUzNDM1RUM4QUUyQQorOjEwQTY1MDAwQTk1OUYzMTdFQ0E3NEM3RUE1MUVERUJGN0U5NkI5QzJBMgorOjEwQTY2MDAwMDdCNjUyM0JDNTFFRUVBRjBDQ0MwMUJBQkM5M0ZEMjMxRQorOjEwQTY3MDAwRTY3REFFQ0U4N0Y4RjQ0OUREMDkyQ0RGMUZGMTRFMTFERgorOjEwQTY4MDAwRTgxOTgxM0E3RjQ0QkZFNEI3RjUwRjA4QkY4MEYwMTNBMworOjEwQTY5MDAwMDgzRTIwRUVFMTdCM0Q4REYzMDVBM0Q0MURFRjRGRDNBMworOjEwQTZBMDAwQjI1MkYwQ0IwMzlERjlFQjlCNzdFMEFGNkZGRTNCRjkyNQorOjEwQTZCMDAwRUJEN0M1RjNDQTY0MjYxN0Q1RjhBREM2NkI4MUNGNzA0QQorOjEwQTZDMDAwNUYzN0ZDREVDMDAzNTRERjAzQjkzQTkzNzg3MjJCMjk1RAorOjEwQTZEMDAwOUY5REJFQTQ0MTM3NTRGQUY2NzhCRENDNzQyMTgzNDRDMworOjEwQTZFMDAwMzg2N0YyQ0RGOUI5MURGNzREMkU5NUQxM0UxMEY5MDkxNQorOjEwQTZGMDAwNjIxRkFFQTc3NUQyMzNCRjRBNEJCOEVEQkUyOURCRkY1MAorOjEwQTcwMDAwRUQ3QUZDODUzOURGNEVBRTExODUzRTYwNERFRkI0RUUzQgorOjEwQTcxMDAwODRGNERCQUY1QkQ5RkUyRjVFNzdEOEY5OTczOUIyMjY4OAorOjEwQTcyMDAwNzRERTAzRjI4NzIxOEZCMUREQ0JDRTMzNTY2NDM1RTA4MgorOjEwQTczMDAwM0RGMTY0NTAzMDA2RjRDNkE1MDc2NUM0NDNBMjc1NkFBRQorOjEwQTc0MDAwNTNDMkVFOTc2QTI1QkUwRjAxMUY5NzBDNUI4MkU3RTBBQworOjEwQTc1MDAwM0FERDBCNjU2QUMyNzM3MUVBRkJBMTQ0QkU3MDM1RUY0NgorOjEwQTc2MDAwNDc3RDRGNTQzNUNGMTNBRTU2RTVFRDBDNDlFN0U3MDg2QQorOjEwQTc3MDAwMEI0ODAxQ0JBRjUwRUFBNUVBQjJBRDhFMjhGQzkyNkQzMgorOjEwQTc4MDAwMzdFQkQwMEY1MDkyQkVGNzQ3OUVCNEQwM0U4Q0VEQkM1NQorOjEwQTc5MDAwNkYxM0VFQjA2RjEzRkU5REZCQTZDNjU3RDlCQzEzQ0Y0NworOjEwQTdBMDAwNDM3RDUzN0MyNTc2RTczQzk4QjdFMEMzQjMyMDg3OEI4NQorOjEwQTdCMDAwOEUzQkVCODBDMTBCRjdGOThCN0JBRERCMjU3NkZGNEMzNQorOjEwQTdDMDAwRkJBNzA0RkQ0Njc3QkExNzc5RjA2OTM3OUVFNzFDRjhCNgorOjEwQTdEMDAwQUU1MzY2NzkwNDJDREY0MEU4Mjk0MjZGMTlEQTFBOTRFNworOjEwQTdFMDAwRDlGREY1RkMxQzE0Q0YwQkZBQkFGQ0NCRTFCN0EwOUU0NworOjEwQTdGMDAwMjNGQzZGRkYyQ0JGQjU5MDczN0I4QzhDM0U4NDdGQjBBNQorOjEwQTgwMDAwMzBFMDQyM0RBRTRERTcyQjgyN0JFODNERkJBMzIyRUFFMAorOjEwQTgxMDAwMDEzRjQ5NjdGQkQ0RDVCREFENDkzMUVFOUZBNDQzM0IxMQorOjEwQTgyMDAwRTdFRkUyRkVENjMyOTlEREQzN0NERDJGQTNGRjZFRjU5NAorOjEwQTgzMDAwMEY3RkY3RUI2N0VENzdCNkVCNkIyQ0Q3MjNEQTQ1QTJFQQorOjEwQTg0MDAwQUNEMUIwNzMxMjA1QTU3NkNDREIwMzdCMDlGQzc3QzJEMworOjEwQTg1MDAwOUZBNzdFRkY1MDY2QzlDRTc0RjQyRjBEQzNGQjM0QUZBMworOjEwQTg2MDAwNkY2NUYzRTk2QTVGNkFENjA0NzFGQzJFREJGOUY4MzU4RgorOjEwQTg3MDAwMDc4QjJDRTFGNzYwN0M5RTJFMDk3Q0I2NUMzNDg2RjY1MworOjEwQTg4MDAwRjVFQkVFRkZGMEUwNzQ4NTdFRjNGRkJBREQzMDQ5QTYwQworOjEwQTg5MDAwQUEyMzk1OEZCOTkyOTdFOUE3ODRFOUE5QjM4ODFGQ0IxQQorOjEwQThBMDAwMzkyNDg4QTU5QkIwN0NGQUY5QzQ4MUU1NDJFMkMyRDI4MgorOjEwQThCMDAwOTVFOUZFMjgxREYzNUI4Mjg5OTgwRkI5RUYxRjdEMDE5MgorOjEwQThDMDAwNkZBRThEMThEQTAwQjk3M0ZGMkEzREFEM0RERjhFRTMyMAorOjEwQThEMDAwQjdCRkZFOEYwQ0M4NkJCOTEzRkRGNzhCNzFCNkE2NDdENworOjEwQThFMDAwODgyN0ZGNjdCMThDRjExMzkyQkMxMkU5QTE5Q0RGOTIxQgorOjEwQThGMDAwNDA0NkIxQjhEODhGMTJCM0Q4M0RGNTFERkMyRjY5QkJDNworOjEwQTkwMDAwRTA3RjEwNkZDREZENTRDM0YyNDM5NjRBNzg3RjZCNzM5RQorOjEwQTkxMDAwNDA4M0E0OTVCQjI4Q0IwQkY3RjEzNDM3QjFGNkRDMkE4MgorOjEwQTkyMDAwQUI1N0EyRjVEQ0MxNTFBQzdEODVENTBCRTcxRTY2OTMxNAorOjEwQTkzMDAwMDBEMkUzNUMzOEY1MjBDMzM5MThDNkRGQzQzREU1NTRDNgorOjEwQTk0MDAwNjNDRjA2M0Q2QjUxOEI5MUU1RUY5MzQwNEZFMEUzNzk4OAorOjEwQTk1MDAwNUREODM3NjMzMzk4NUREQzJGOUJGMUVEN0UyNTRBM0Y1MAorOjEwQTk2MDAwNDQ0QzA2RTMwMzU1OTkyNTRCMzM2OEI5MkFDMzE5MEJBOAorOjEwQTk3MDAwNjUzRjlCN0ZEMzRGMEJEMTJGOEZCRkEzRjJDNUUwMDc1RAorOjEwQTk4MDAwMzE3RTI4QkU3QjMyQjMyNDFFREU3QjU1NjJGOUU2OUUwMworOjEwQTk5MDAwODNGQ0Y3MDY0ODMwMzFGQ0ZFNTA1NzY2Njk2QTA2MUQ5NQorOjEwQTlBMDAwM0YyQjgzMzAzQUVBMDJBRUYwN0I3M0FFMDhGNjlDQzhDOAorOjEwQTlCMDAwNjdFQzA3MzYxNUZBQzdEOTNENTRBRjRBQUM1RUYwQkMxOAorOjEwQTlDMDAwRURCRUY1N0REMTg3RUYwMUJERjZDOTRDRjczRDM4N0Y2RgorOjEwQTlEMDAwM0QyMTI2OThGRkNGMERERTFEQTg3RkQ2NjY4MDNGNzJGMQorOjEwQTlFMDAwQzlGMzA2MERFODA1MUY1MUIxMEFFNzRBRkU1ODY3QzRDRQorOjEwQTlGMDAwRjI2MzZBRTc0MkY5Mjc2QUU3NDJGOTI5QjU3M0ExRkNENQorOjEwQUEwMDAwOENEQUI5NTAyRUJBRTEyMDg0RjI4RkY3MzI5Q0EzMzI0RgorOjEwQUExMDAwOEE0MkYxMzZGNTdDODc3Mzc4NzY4QzdGNTA4RkUzNTdDNgorOjEwQUEyMDAwNjVCQTExQkUxREZCQkQ5Rjc4MjExRUYyQUEzNTk4NkEzQQorOjEwQUEzMDAwQkIwREJFNzVDRDY3M0NEQ0RFOEI5QzlGRDU5RkVGN0I0RAorOjEwQUE0MDAwNUU5MzE2RTU3ODVFNzMyMDY2NzFEODdCOTMzM0Y0RDhGNQorOjEwQUE1MDAwOUVGQkZBMDUzQzFGREE2NkU5ODBBRjUzQTI0QjlFQTQyOQorOjEwQUE2MDAwNjFGNUM5Q0ZGNzQxRjg1NjY1M0E5N0MyM0U1MkZBRkVGMgorOjEwQUE3MDAwMEU5NDc5Q0RCRkZCMDk5Q0U3QTFGRDYzMUU0MUJCMTQ3OQorOjEwQUE4MDAwN0MwQUY1N0NENTNBRDQ3MDEwRUI3QUQ1RUFERjA0REY4NgorOjEwQUE5MDAwQkZGQTdBMzZBQzg0RjIxQkMyRTgwNkYwNDg4QUI0REUwQworOjEwQUFBMDAwNzUwOEQ3RkIwQ0MxNDIzOEE3NzJERjJEMzk2MkRFNzAwMgorOjEwQUFCMDAwNTU2NjMxQzI1OTI3RjA0REMwODlFRkQ3QjdBNUVCOEU0NworOjEwQUFDMDAwNzgzNkM3NTMyMkVFRDcwMERFNjkwNzM5NzQzMzA2RjRBRgorOjEwQUFEMDAwQkE3MjFFQUY2RjZFRUFGOTNFQUNDRjczNDIyNkJERUM4MAorOjEwQUFFMDAwODhCRjBBQkE3QjhFRUY4RjI4NzMwRkVBNURCMDRGQUYzNQorOjEwQUFGMDAwMUVCQ0Q4MTNFRTVCQTVGQkQyMTNFRTVGREQ5Q0QxNEJFMQorOjEwQUIwMDAwOTFERjk0M0JGOEVGREI3RTFBOEZFRkUzRUY3Q0NFMjBGMgorOjEwQUIxMDAwREJDQjIwOUY2NEE2RjFGMDMxNThEMjZDQ0JBNzY1OTBCNworOjEwQUIyMDAwNEYzMjM3NTkzQTBFRTUzQzdCRDY2OEM4MjMxMUY5RUUwRgorOjEwQUIzMDAwMEJGQTE0MUYwNzUyOUFFMDI4NDc3REFDMTg5ODRCOThERgorOjEwQUI0MDAwM0MyODM1NDZGM0NCOUY4NUZDODk1M0Q0QzcyNDc3NTdERgorOjEwQUI1MDAwQkMzRkNFREU0M0QxM0VCRUNGM0Q4QTc2MzFFRTA0NDdDOAorOjEwQUI2MDAwN0ZDNTdCRkQ2Q0MxNkNCMEJGRTgzQUQ4N0REN0JCNjRCNAorOjEwQUI3MDAwQ0NCQkNCN0RGREY0QkRGN0QwRkFBNDE3QTdFMkZEN0VEOAorOjEwQUI4MDAwQUZGMkY2NDk3QjRCRjFGNzAzREIyOTNDRjU1NDkxQkE2MAorOjEwQUI5MDAwMzRFOEIxQTc3RTBBOURBOUY0RkJDQTgzMkYxQzc3REE5QgorOjEwQUJBMDAwNkZBM0RGREY0MUFGMTdGQzc1Nzk4QkIxMDhGOEVCRDdFNgorOjEwQUJCMDAwRDVGM0Q1RkJCMjNGODM5RjBCRTQ3QTdGNTdGOEQyNDFBMAorOjEwQUJDMDAwMEY5MjlERTEwQkJGNjc0QjhEMkY5MDU5Q0FGMDhGOTU2NworOjEwQUJEMDAwOTM0RUIxNzM2MERGOTQ4RjdEMEU3QzJDRUMxQzY2NDcyNgorOjEwQUJFMDAwQTlGMkI3RjVEMzNCREU1RjA1RkVGN0Y3NjQ4MkU3RUEyQgorOjEwQUJGMDAwRjhGOUJDQzVGMEZGNzIwOENGQzlDMkVEOEZDMDdENTIxNQorOjEwQUMwMDAwRjRCOTA3RjQ0RjM4MDdFQUE0RkRGRjM5ODNFQjREOTVGQgorOjEwQUMxMDAwODcxRjQ5MjkwQ0I1OTNENTlGMkFERTI3NkJBNTBEOEE3RQorOjEwQUMyMDAwRkFGQTJDNjU3RDczRjE4NkYwRUZCQkUyODc4QkI3Q0UyNQorOjEwQUMzMDAwRDNCQkYxRkNBNjE0RjFGNzVBQzU3Q0NBREU4QUMyRkM2QworOjEwQUM0MDAwQkM4OTkwNzc0MjFGNTUxNzdFQTA4NUY4RUFDNDJFRTQ5MAorOjEwQUM1MDAwQTdFMDNCMzM2NDUyMUJBOUZENjYwNkYzREY0Rjc4MkI1OAorOjEwQUM2MDAwMEFGMzU5QkU2OUJGMUY1MTU4NjJCRUUwNkY5OEZDRkNFMQorOjEwQUM3MDAwMjhENkFGMERERjc3NDMyNkVCRkY1QUQxOTYxRjdFMDUwRQorOjEwQUM4MDAwNzFDRkZEMDRGMzM3QUY1OTE5REZDRjZCRkE0MkEzQTE5RgorOjEwQUM5MDAwNjVCRjZFMEM1RkYyMkMwMTBEQzg5M0Y2OEE2ODBGRTQ1NQorOjEwQUNBMDAwRTdENzJDMzU2MzVFNjdCRkVDRTA4N0M2N0M0MjYyMzMzMgorOjEwQUNCMDAwMzdGRkQ4NDhGN0VEMEY3MDk4MzE0QzlFQjY4MzhENDMxRgorOjEwQUNDMDAwRUJDOUZGRjEzOEYyRkJGMTZGNDVGOTM0REY2MjNEQzlBMgorOjEwQUNEMDAwNTQ4NzQyNzk1REMyRTg3QjBFRTAwRDk3MkJFMDNCQUZENQorOjEwQUNFMDAwNzk4NDc0QzgxOUUwMDdCMDdFQTg0RkNBRkNGMUZCNEYwNQorOjEwQUNGMDAwRDI3MTZCNEUzMkZBODY0QzM5QjVERDNFMzNDQzZFMjdCRAorOjEwQUQwMDAwQ0YzMUJBMzREMjdGQTBDRjJEM0JEQUEwMDc3QkVFQ0U3NQorOjEwQUQxMDAwRjRERDg4NzkzMzVGOTdBRTBCMzI5NUY2N0IwNDNBM0VDQgorOjEwQUQyMDAwMzU5RUVFNEJDRDdFNzZCRkM0RjU5NjVFNzhBRUI1MkJFNAorOjEwQUQzMDAwRjk1REIzNTU4M0Y0MjdFQTZEMkRGMjU4QzA1N0Y1Rjk0NAorOjEwQUQ0MDAwNzAwMTRGNjJDOTUxRENFM0I0NzJGOERGMjY4MzlDNUM2QQorOjEwQUQ1MDAwNzk1MENCOTIzREJBMUE2N0EzODZEOEMzQzY3OUY1OTBDRAorOjEwQUQ2MDAwQTE4MkZEMEUyNTlCN0ZCQjkwQ0YwN0ZGNkEyQkVFQ0IwOAorOjEwQUQ3MDAwQ0E3NTExRTQxQzk1Q0JCQTc4OTBDQkU1RUNGNzE1Q0VFQgorOjEwQUQ4MDAwMUM0QzJBMDFGODlGOTE4OENGOEVFN0FFNTg5RUYxRkRBQQorOjEwQUQ5MDAwQUMzQjc4NkVDMkZCNDM5MkZCNjhDM0VGMzcxNDc2RTQ5QQorOjEwQURBMDAwRDQ4MzUzN0I4MTFFRjk2MUQzRkMzMzc0NjdDOEEyQ0M3MgorOjEwQURCMDAwMUUzOERFMzRFMjQxQkRGNzhDRDU5NTBFRkU4NjQ5M0M0NworOjEwQURDMDAwREU3RkM2MUE2QzA1N0U3QzY2NzhCNDA0RjE3QkRBRkYwMAorOjEwQUREMDAwN0ExMjc2NUZERjE5OUQyQjlEREQwMzIxRjI4QUVGRkU0QgorOjEwQURFMDAwNTZGN0I2OTVDOTZCOEJDNzQzQkM3QTE2QjE4MDFENzlFRgorOjEwQURGMDAwOUZDQ0Y0NUFGMjI2QTM0QkMxRUY2QTI0QkYwREU2RTlCQgorOjEwQUUwMDAwQ0E5Q0ZDRkQ0Q0ZBNUREMjlBMUZBMTVERDkwMTM3MkQ3OQorOjEwQUUxMDAwRkY5REE2QUZBOUQ3NzZEOEFGQkIyNTc2M0Y4OTgzRTkzQQorOjEwQUUyMDAwRkJENUMzQUVGRTZDMUE5QzczQTM3NkI2NDRFNzMzQkY2MgorOjEwQUUzMDAwRjkzMERFQzNBM0I2QUIzQkVDOUJGRkE1N0ZCNEIzN0Q3QgorOjEwQUU0MDAwRTREQTkyNTkxNEYyN0JBQkVEQTQwRUJENUNFODc3QkI1QgorOjEwQUU1MDAwNTg5RUZCOTFFMTRGQjcyREE3RjVENUJCQTIxMThFOTc1OAorOjEwQUU2MDAwOUYzNzc4ODA3RjVGREU2MTQwN0JFN0IyMkQ3ODZFMTU3QgorOjEwQUU3MDAwRDRGN0U2M0EzQzM4NUEwRTlFRUYxMkY4QkQ0NDYzRkYxMQorOjEwQUU4MDAwM0RDODFERjI1QjFEREVCN0YxQzVDRjBERjg3QjFFNEIzMworOjEwQUU5MDAwNUZCODZCMDdEODRGNUZBNERCNUY3RTA1RkM3QjJGMjc3NQorOjEwQUVBMDAwRTA3RDAwMjQ5OTdEM0Y5MUQzMjNEMDk3OURFRTg3RkNEMAorOjEwQUVCMDAwMEIzM0VBMEQ0QjVGNEI0MUZFMjVGNkVGRDJDRkEzRjBFQgorOjEwQUVDMDAwMUNGQ0U1MTNGN0M3ODIxRkFDNTVCMzg3RkQ4RUE0NkMzRAorOjEwQUVEMDAwRjIwMDFGNUVCRTIzMEFGNTNFQTI3N0JGMDZFQjJGRkRGMAorOjEwQUVFMDAwQzVDNDY5RkQ2MUZDREYyNTEwNTg0RjdCQ0I2QkU4N0Y0MworOjEwQUVGMDAwMENFRDZGNjRCOTdFQkRBNTA3RTMwMzFENzI5NkU1Q0QyOQorOjEwQUYwMDAwQ0UwREREQ0JCQzFGRjBBNzhBODg3QjEwNTlERTZDODE4QgorOjEwQUYxMDAwMkNCMURGOTU3QzIyRjIzOUYwREY2NkYyMzhBOUYwOTc4OAorOjEwQUYyMDAwQzQxMTYzMzJEMEExOUJCMDdCMUY5RkU4OERGN0VBOUVDRQorOjEwQUYzMDAwQ0ZFNEU3OTc0OTkwOUY3NzE0Rjg3NkFFRkEwMEZBNEI4MgorOjEwQUY0MDAwMEMyQzVGQUY4QjdCMkQzRkNDNjRFNzgyMTcxQkZGQTJERAorOjEwQUY1MDAwRjA5QjU0QUZCOUExQUNGNzY1QkZCMzVDNTA2RkVGQkZDNgorOjEwQUY2MDAwODI5NkFCMzg5Q0ZGOTFFNEZBMDhENkI3QUM3MUNCQkVBMQorOjEwQUY3MDAwNzcxMTJFQ0Y3REVGMEYzMEVFMDkxM0ZBNjlDOEJCMENBNQorOjEwQUY4MDAwN0U2QUZCNjVCMTMxQzhFMzBFREIxNTcxRjU4QkNGRkMzMgorOjEwQUY5MDAwMUVGMzQ3MkVCRTdFMEZGRUJFRDg3Q0Q5N0YxMUVFQzdCMgorOjEwQUZBMDAwNkEzM0ZCM0Y3OTg4OTY3QjRGOUNDMjdENTFDRkI3NTM2NAorOjEwQUZCMDAwMUM1RTYyN0NBNTEyRDZEMTFGRjI1NzVDRUQ5OTQ4Qjc5MgorOjEwQUZDMDAwOENERUNGNkZDQTQ1RjgwOTNGNkRGQkU1QzhGNjk1OTg1MgorOjEwQUZEMDAwQTdFODVGQ0M0RkY0MkZERUZCRUY0Q0E2REY1RkQzRkI3RgorOjEwQUZFMDAwRjM0MDJFRUY4NDM4NDQ5ODNFN0YyREM2OUYwNzNGNzU2RgorOjEwQUZGMDAwQkIzMzlERTU3MzVGQjNEMTdBMThERUZDNUY4QTlDMEM4RQorOjEwQjAwMDAwQzMwMDgwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA0QgorOjEwQjAxMDAwMDAwQkFENTgwRDZDMTRENzExOUVCNzdCQjc3N0M2Nzc3MAorOjEwQjAyMDAwRjY4MThEN0ZFMjFGRjZDRUM0MTg3Q0Y4MTZGRkQ1QjFFRAorOjEwQjAzMDAwNEQzOUZDODMyODQyQ0RGMTkzRDQ0QTIxNkM5QTQwMjhBMworOjEwQjA0MDAwQzRGODY0NDM4QjkyQUFBQzdCOTVGOTExNTE1QzM1OEFBNAorOjEwQjA1MDAwQTA0REFCODMwODE0NTU1NDE4MTcyMjhBMzBCRDA0MTUyRgorOjEwQjA2MDAwNzAxQkQxNDM4OTE0OTI1QTY4RUIzNkQ0NkQwQ0U3RDIyOQorOjEwQjA3MDAwQTQyRDZBMjQ3N0U2RUQxRTc3RUI5RkI0ODk3QTk2NkY0QworOjEwQjA4MDAwM0NFRkNEOUIzN0YzQ0RCQzk5RjdEQzAxRjhBOTA2RTg3RQorOjEwQjA5MDAwNzA4MjNEMzcxNzY5MDc1MzIyMzhENDAxQTBDMTNDNEU1NgorOjEwQjBBMDAwNjMyQUNFM0Y1NzcwMDE2QzM1MjQwQzIxNjcxRUMwNjNBNAorOjEwQjBCMDAwNjA3RTcyNzM2QzUwMEZCMDkxRkU5NjcxQkNFMUI3Rjc3MQorOjEwQjBDMDAwNTkxNkMwMTMzMDYwODczMjgwOUI0MkVGMUU0OTA0MTgyNgorOjEwQjBEMDAwMUZGOEExNUQ3NTkxNTA5QkU3NzYwNTAwRDMzRTEwMjZDMQorOjEwQjBFMDAwMkIwMTI2RTlCMzYyM0EwNUIwMDFDOUQxNjc1MkE0NkZCQQorOjEwQjBGMDAwMEQ2MDNFN0VCNzQwNDUxOEY1RENGMUI4MzQyMTAwNTBCNAorOjEwQjEwMDAwMkEzMzFCOTcyQjgxMTI5MkMzNzkyNTU2OEI3NEQwQTFCOQorOjEwQjExMDAwNDREMDlFM0Q0MkM4MjdFM0JBRTdBNDU4MTU4OEE5NzVENAorOjEwQjEyMDAwN0IwNDk1OEY4RkIzQjdCNzgxOEZCNjhCNTU4NURDMDBDNQorOjEwQjEzMDAwODlCOTEyQjA2Q0E0RjM5NTc4MTBGMUQwM0UwMUU1MDQwMgorOjEwQjE0MDAwRUE0OUQ4QTE2MzEwRjdBRDZEMTVDMjgzREMwRkRCQTgwNworOjEwQjE1MDAwOEVGQjBBQzBCODdEQjU5NTM4RUUwNzU4NEVFMzRFRDM0NgorOjEwQjE2MDAwNkUyRjhFMDdBQ0YyMjk3RkFDRkMwNTU5RTBGRUQ1RTZDOAorOjEwQjE3MDAwMDhFMTAxRkY3NDNDMzZEMDdDMUQ0MDA0NjIyMkUxOEE2NAorOjEwQjE4MDAwOUY4RDRFQzRCREM5QzQxRDIwMjgwMkM2NjU5N0M5RUY1NgorOjEwQjE5MDAwNzJCQTYyNjIxNURBOURFNUQ0NDRGNEE3RTkyMkM2MDVDNQorOjEwQjFBMDAwRjkyNjVCRUM0REEyMkMwOEIwMTdFMzBCRTdFREUzMEY5QgorOjEwQjFCMDAwRUMyMDFDMEEyQTZEQTRBN0QxMEMyRjQzNUQ5QjUwQUUzNgorOjEwQjFDMDAwOEY4NTgxRjY3NTQyM0ZBNzg3NTg5Q0RCRjE2NTk4RTAzMworOjEwQjFEMDAwMzQwODFFMUI1MTg0OUZEMzM2MDg3MUJBMEFDMjlDQUUzNAorOjEwQjFFMDAwODY3RTRFRDdDMDAwQTc2QjIxQ0UyOTJDODk0NUMwNEI0NworOjEwQjFGMDAwM0I3REM3NzMzQjEzQzk1NzlFMTUyNjkxRDY3RTBEQzI2MgorOjEwQjIwMDAwMDNBRUU5MzhFQzMxNzE5QTFEMDc4RDUxM0U3RTVFMUMwQworOjEwQjIxMDAwNTY4MTVBQzBGNTREQzVBM0I4ODJFN0Y3NTQzQzFDOTQzQgorOjEwQjIyMDAwOEYxOEI3MEM4ODE2MTA1RDBFQkE0ODc0MDUyNTJFRUFFMworOjEwQjIzMDAwNTkwOUIyOERGODU2MDg3MkJFRkQ3RkM0QTE0MTU3NkQwMQorOjEwQjI0MDAwQUE3RjA2M0M1QTY3Q0U4QkVGOUE3OTIxMTI4Njc1QTlBMAorOjEwQjI1MDAwMzg5RDkxNjVDRTI3RTMwNTY4Njc2OEU5RjQzODI2QzcwRAorOjEwQjI2MDAwNkIzMzVCRkUyRTdCMDA4RTQ2REI0MkI2NDJFNDZCNUFBQworOjEwQjI3MDAwN0FDQTkwRkY5OUJDRDFFMDlCNUE3RUUxNDNGRTU0RjQxOAorOjEwQjI4MDAwMzE4MzBGQjRENEQ4MTU4MERFREVDNzQzNkQ4RjAwQTg5QworOjEwQjI5MDAwMTk1OTU1MTBBMEMyNTEyRTUwRkVFQ0Y2MThGOEFCQkQ0RQorOjEwQjJBMDAwN0IxNDBGOUUyM0I1QzRBNTkwN0Y0RTA3NjI4NkY4ODk1NAorOjEwQjJCMDAwNjUyMjM0MjA2RDkzRDQ5NzY1QjRCMzc0NzVCQ0NGNDBDOAorOjEwQjJDMDAwQjgyNUJGMDNDRkVGNzhEQzBFODc3MEZEN0VDOTkwNzc3RAorOjEwQjJEMDAwRTAzQTY3NzVDQTJGMUNENzMyOTAxRjFDQUNFQzYxQkVEOAorOjEwQjJFMDAwRDlGNzQ3RkRDNzQ4QkZEQUZCQjAwNjY0QzczOUE2N0M2QgorOjEwQjJGMDAwRDYzRTNGQ0U1NzRGOTIzQzM4Q0I4MUUyNUVFNDM0RjRFOQorOjEwQjMwMDAwOEMwRjU2NTY1MjVDQ0UxMDQ4MzQ5RkVCQUQyMURDRkVCQworOjEwQjMxMDAwOTIxRjNBNDNGMjA5Qjc5MTVGNjcyODA3RTdDRjRFREZFNAorOjEwQjMyMDAwOTc4M0E3NDk3RUVBNzhFMjQzMzQwMEQ3QkYyNUFCRTc4RAorOjEwQjMzMDAwNjhCRTJCRjNEMzcyQUE0Qjc3OTdCREQzQTc3QjUzNzkwMworOjEwQjM0MDAwQ0E3MEZGNERFODc3MjQwODUxODlENzkxNjZDRjZEQUM1QworOjEwQjM1MDAwQTM4MDMxOTlDNDc4MjZCNkEyMUVDNEExMzZBNDQ2RUNCNworOjEwQjM2MDAwMzhGQ0E1NEQxM0Y1NThBNDQ4NkY4Q0VBNUQ5N0E0OTc1NworOjEwQjM3MDAwMkVDMzc1MkY2RkI4MjUxOTc5NTY2Q0U0OTk1OTg3ODZCNQorOjEwQjM4MDAwMkUwREJGNTA2NEIwMjE0ODNCNTc1RDk3RUVGRkUzRjdBOQorOjEwQjM5MDAwODg1RkQ3M0Q5NzQyRTJBOUYzNzRCNDA3QjI0OEM4NjUwNQorOjEwQjNBMDAwQTkxQkM5NzNENjc4REUxMTEzQjM4ODVGQkM5NUU0OTZFOAorOjEwQjNCMDAwQkYzMzUyNDY3RUFEMThEMTIzNkVEMjMzRjQ1RTkxNjExNQorOjEwQjNDMDAwODdEOTE3ODJGRjY0NUZBNDJGQjQ4QjU0OUMwMUJBQ0YzNgorOjEwQjNEMDAwODk1MTA3RTJENUNEQzI5N0REQzRGRjlDMjkxQURBRkY1NworOjEwQjNFMDAwNjcyN0U2NDczNkM5MDc1RDg1RThENzc2RDNBRkNFRTE1NAorOjEwQjNGMDAwMTM3RDZFQTREQjVGN0Q3QTJENTREMTcxQjBGM0ZBMkRFRAorOjEwQjQwMDAwRTMwRjlERkY5REFGREI1M0Y1OUM3RjYzMjBEMENGMkVENAorOjEwQjQxMDAwNDg3RTYyMTJFNTQxRTc4MDU1QUUwQjBFRkY4REVBNEU4NQorOjEwQjQyMDAwNTc3QTlENDdCQjI2NjQ3NzJFQzdEQkVDNTc0MDJEMDQyNworOjEwQjQzMDAwRjUzRDZCQUUyNTNGNUM2NEY3OTAxNDc1MzBBNDNGRTk5MQorOjEwQjQ0MDAwNTEzQ0M0OUJFNzA3MkU3RTBGRDJFNUUxRDUxQzFFRkJDNQorOjEwQjQ1MDAwRTQ3OUZBRTYwMUI0M0QyNzg1NTdFMEE0MjM0OEI4MDcwQworOjEwQjQ2MDAwNEVFNjA3QzlCRjgwMDQ1QjQyMUNFRjI4Q0ZFMzAwRTYyRAorOjEwQjQ3MDAwMDZDMzdDM0EzRDc3QzIyN0UwM0VBNzg3MkExNEFDQTBEQQorOjEwQjQ4MDAwNzA2MTVGMTBGRUI4MzA2NTVGQjc3OTlFREFDNTUzQUQ2NQorOjEwQjQ5MDAwMTJFNkMxQkQ2N0MwODM0NzEyQkE4NzVGOEIzODkxRUY1MAorOjEwQjRBMDAwM0UwODI0MDFGN0U4MEJGNURDMUIxM0EyQTRBNzcxQjgzMgorOjEwQjRCMDAwQTY4MEUyN0RENjNDOUY4RTAyMDFFNDM0OUMzMkU0MzlDMgorOjEwQjRDMDAwMjA1N0E0RjgyNEJFMEUzMzNFOTkxNUYzMkNGMzZFRTVGNQorOjEwQjREMDAwMjFDQkZBRUMwNjlGNzVCRDE2OENGQkVCQTkxRTFCRUI2RQorOjEwQjRFMDAwRTcwNjk3NThFNEY3NjdBREJBNDY3OUI5M0NCRTZEMkRDQgorOjEwQjRGMDAwRTE5MkIzQkFEQTMyNUYwRjRFN0U3RkE4MkI3NjI5NTFFNAorOjEwQjUwMDAwNUMwRjFGMUJGREJDMDE3Rjc4M0Y4MEIwNDhGRTM1RTkxMgorOjEwQjUxMDAwMDAzRkMyNzgzNDhFREIyQzcxQ0ZEMDMxMUY1MTJFRTMyNworOjEwQjUyMDAwRERCNEI4RTNBRjQzQjZGMkNCQkM2NjFFMTQ0MzcxN0EwOAorOjEwQjUzMDAwMUVBNDcwNzYzREMwOTFFN0MxMzAwQTExQ0U2RTI5OEFGMworOjEwQjU0MDAwNTc4RTY5MzhENUMzQzI2QzlBQUZCQjI2NDI5NEUzREVFRQorOjEwQjU1MDAwQTNDNDcwN0M3RUM4OEE3NzdFODcxNUVGNDJENThBNkYzOAorOjEwQjU2MDAwRDE3NjJCQkUyNTYxMkJCRTBCRjY1QUYxRjQ2QTU2RkM0MAorOjEwQjU3MDAwQ0EwRTM0NUFFNDFGRUU2RkIxRjA4QjhFQUNCMUM4MkZGNworOjEwQjU4MDAwOEVBRUI3RjA5NUFGM0Y2MTkxNUYzQUYwMERDQjdDRTBBNgorOjEwQjU5MDAwRkMwRUNCN0MzMkFGQTZDNjdENTlBQ0RCMjIzNzM1RUUzNAorOjEwQjVBMDAwMzVENzlFQjdFODREQzY1OUMzOUZGRjY3OUM3NzREODkzNQorOjEwQjVCMDAwRjNGMzY4MUI5REJCRUI1OTYzODdFOTE4N0UzNUQzQTg2RAorOjEwQjVDMDAwNEJFRDYyNzMzQzQ4RjE2RUI2MkIxNEQzREZDOTM5QUQzNQorOjEwQjVEMDAwNkUzQUVGNjYxRjBBOTk3RDA4RDQzRTFFRjc5MDk5MjdCMAorOjEwQjVFMDAwNEE1Q0I5NEM3NUI0RkE2NkE4MzUwQkY5NUEzRDdDOTk5QQorOjEwQjVGMDAwQ0E3MUZENTg3RjZCQjZDQ0QzNDRGNkEwM0MzMzcxNzk0OQorOjEwQjYwMDAwQjQ4MTgxQ0Q3MjVFOTBDRjRCRTFCNjQxRUIxNUIzNTE2MQorOjEwQjYxMDAwQjhFOUQzNjg4NDk3NEI0QTJBREM3RkJEMzlDRjFBOENBRQorOjEwQjYyMDAwQkFCRTJFOTgwMUI2MzQzQzk2OUJFMzAwN0U2RTVGQjNBMworOjEwQjYzMDAwMzEwNTFCQ0NGNzAwREVDQjQxQTI3QkI5RTA4QzQ2QkNDOAorOjEwQjY0MDAwMzNERDI3OTUyMzIyQkYyN0E5RkNERTc0OTVBOTc2QTJCNgorOjEwQjY1MDAwMUI5REYxNTJFQTVGQzdGMkQ0MjM1RUFDRjM3NzA1NDUzOAorOjEwQjY2MDAwRTZGNzJDQTY0N0M4QTkwNDM5QzY5QkNFOEQ1MEQwNEYwQgorOjEwQjY3MDAwRjc3N0ZDRjMyMUFDQkJDMkY1OTBFNkU3RTY3Qjc0QjQ0OAorOjEwQjY4MDAwNUYzNUVEMzlFMTU1OEY5MTlFNTFFNkU5QUJDMUI1RDdGNAorOjEwQjY5MDAwMUIzRjJBQTVGRUUzMTAxMTA5QUM4MzgxQUNFMDZCMzQ5QgorOjEwQjZBMDAwQUZFRDZGOUVDQkZCNkEzRUZBODc3NTU0MTc2NDdFN0ZDMQorOjEwQjZCMDAwRDA5RTY3RkMzREYwMTEyOTdCMjRFRDlDMUVCMEYzQkVBQgorOjEwQjZDMDAwMDNFNkZCNjhCMzg5NTdGMjdEQjRDOURDN0YxNDU1NkM3RgorOjEwQjZEMDAwQzczQUJERjlGQzU1OEVDQkNFODI3MUIwRTVGMDdDRTM2NAorOjEwQjZFMDAwRjdBNEE3OEI1REQ1ODdDOEE3NjA4REIyN0UyOThEMjc2QgorOjEwQjZGMDAwREY0QjQ1RTJFN0U5OEJFREEyM0Y1QjlGRTFCRTk4QTRGQgorOjEwQjcwMDAwM0IwQkM2Rjg3QkVFQzFGQTUzNDYxRjk5NURCRkM2RkJFMworOjEwQjcxMDAwNkNDQTZGNDNGRkU4QzE0Q0RFNUY0NjBGOTZCNDEwNEQxNAorOjEwQjcyMDAwRTlCRkNCRjU2RjBFREZCMEU0Qzk5NkJERUY1QkYyRUY3QQorOjEwQjczMDAwMjlFRDBGOTY3OTNENzdDMjVFODRGRUVCNkYxNEFFRkE2OQorOjEwQjc0MDAwM0FFMjc3RTc5Q0EzOUVERThEMThCNzlCREVCQTk0N0UyMworOjEwQjc1MDAwRkRDNTQ1NkRCNERGN0ZGN0YzQUYxQ0RGOTE3RDcxQjBBMAorOjEwQjc2MDAwMkQ0Q0Y5Nzk2QkRGNERDRUVCRkI3NDRFQTdGQTk5N0MyQgorOjEwQjc3MDAwNjcyNkE5RjQxNjU0RDgzMDNFMTM2QzhFNzJEQzNCN0REQworOjEwQjc4MDAwOUYyRDNFRTM1RDMyQjIzMkFGODVGQUVDNDg4OTY0MzNENworOjEwQjc5MDAwNjhCOUMxMTczNjM4MEQ3RUQ1NkFBMjA5QkJFQjAwQkQ2QQorOjEwQjdBMDAwMzM0NzE4MDQxOUU2QzMyNjE2RkFFOTUzRThGNzBCNzk2QworOjEwQjdCMDAwRUEyNzk0N0Y1RDNCMjZBQTZDNzgxRUJBMDJGQTkzMENBNgorOjEwQjdDMDAwRTM1OTNDNTdGRDE3RjlDRkYwN0E1NzM4OEZEQjU5NEVDNAorOjEwQjdEMDAwRjc4RTMxNDFBQjYyNTgwQkFBN0Q4NUVCNkMxODk3QjE5RgorOjEwQjdFMDAwMzlEQTVERUFDNDRCOEVFNzFBQkM2NDlDOEY0NkRGMjRDRAorOjEwQjdGMDAwM0YwRkNEMUU1NUYwQTE5RTBGOTkxOEUzRjlGQzRCMTY5MworOjEwQjgwMDAwM0RDMUYzNEQ5N0Q2QkJGOTc5RUFBMDc3MTdCRDc3RTkyQgorOjEwQjgxMDAwQkQ5MUM4MzA2ODg2OEY3MUZGRTY0Q0ExMEI3RDQ2M0QxNworOjEwQjgyMDAwNkIzNDY5QkI3OEI4OUNEMUZERTA4ODAzRTgzQ0UwM0UwRQorOjEwQjgzMDAwNDE4MUY2MTk3MjQ0NEYyMDlGODdCNkQzM0RFNUQ3OTJEOAorOjEwQjg0MDAwNzE5RkFGRkU5NTIzNDY3NTYzOUJGMzYzMUVBNzEyOUZGRQorOjEwQjg1MDAwOTdFQkM5MkRDM0NBODVFQjcyNUY3MjQ0MjM2NDlGMUVBOAorOjEwQjg2MDAwMkY1RDg3RjZGNURCRjFGRTQyRUZFOTc3NzExRUNGREQ0NAorOjEwQjg3MDAwOUQxNzE3MUQzRjk0MTY4RjEyMzMwRUYwMEM4MDMxOUZDOQorOjEwQjg4MDAwN0Y4Q0U2M0I4NzQ3NkY1MTFEQjlFMjU1QkRFNEZGQThBOQorOjEwQjg5MDAwMjBENzUzMURFOUNDN0E1M0EyRkE1M0UzOTNGOTNBQjQ3MworOjEwQjhBMDAwOTdGQjhGRjVFMEZCOENFM0VDRjRGQzA5RjM3NTBCMTZDQQorOjEwQjhCMDAwOUI2QzdBQkYwOUVBNjI1QURGRTlENDI1RDI4NzE5QzFBNQorOjEwQjhDMDAwRUY3RkIzRjk3RjY3NkJGQzE1M0ZEMkJCNkVBNTk0RjY5MworOjEwQjhEMDAwNDlFRThCNzZENDkwOUVBNERGNDkzQjUyN0EzRTNCQUYzMworOjEwQjhFMDAwQjczOTI3MkNFN0Y3RjZEMUZERTU3NDRFMTA1Rjk1RUNEQworOjEwQjhGMDAwQUYxNkQ5OTZGNTMzQUM3RkRDOENEQkJGRjM0MzJCN0RFMQorOjEwQjkwMDAwNDg3Nzg0N0ZGMEM2REI3MjZBM0VDMUZBQkZGNTAxQzU5NQorOjEwQjkxMDAwNkJEOEM1RUJEQzZDRUJBN0ZBRDk3OTY5OThFMzgxN0UyQgorOjEwQjkyMDAwM0U0OUZFQTVGOUY5MjhFRDkzRjRGM0NFRDA3QkFGRjhBQworOjEwQjkzMDAwRTUyRkVFNUZBMjI0MkU5MURFQzRCMUZCQTUzMkFFRUY1RgorOjEwQjk0MDAwQkM3OEY1MjZFNTRGQTdGOUNFODdCM0Q2RjdCQjYzMEVEMworOjEwQjk1MDAwQkUxM0U3QTVENTczQUE3MTBCRjgzNDRCQkYzRjM5OTJEQworOjEwQjk2MDAwRUI4QjZERDZGNTc4NTExNjcwQkZCM0U2RkJFMTNDOURDRAorOjEwQjk3MDAwREIxOURFOTk2N0UzMDI2Rjk1NjcwQkYwN0U0NjdEMDA2OQorOjEwQjk4MDAwRkIyRUQ1RkQ2NERGREQ3RDQzRTBGOUI4REIwQjdDOUU0QgorOjEwQjk5MDAwRUNBMkZDNjdGQTE1REUwNzkyRkY0Nzg4MzBFQzZGOTgzRgorOjEwQjlBMDAwMDdERDkyRkE2RENBMEY1MDdCNzg1RjEwMTdCODE0Q0E4MgorOjEwQjlCMDAwRTNDMURGQUMzMURGNEI0NjlGQTkzM0ZCNEExREU5MjFEMAorOjEwQjlDMDAwRkJGREQ5QkNERkQ0OUFGQkQ2M0JGMTFFRTNBMzkyQURCRAorOjEwQjlEMDAwOTlGRjJGMzFGRkFGNzBGMDBBN0Y2N0ZEMDc3NDE1M0VBNgorOjEwQjlFMDAwQzkwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwQjlGMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQjUxQ0ZDMEYwMDNCQworOjEwQkEwMDAwOEFCN0M5MzMzMDk4MjkzMTMwMjQyQTMzMzA5QzAxRTI3NworOjEwQkExMDAwMjQ3OTg0MUNBREIwMkEwNzY1RkE1RjMwMzIzMEJDMDI0RAorOjEwQkEyMDAwRTIzNzQwRkM4RTkxNzRGRDNGODUxMEVDODdCQzBDMEMxNgorOjEwQkEzMDAwQkY4MEZDOEQ0MDVBNEM4MDgxRTEyNjkwRkQxQjg4QkY2MQorOjEwQkE0MDAwMDNGOUUyN0MwQzBDQ0E0MDZDMDZFNEJCMDBFOTNDMjAyNAorOjEwQkE1MDAwRjYwN0UyM0Y0MDdFMUIxRjZFRjNGRjBBRTFCN0ZGQUEyNQorOjEwQkE2MDAwMDAyQTlGNTcxMDk1RkY5MTFGQkZGRTBFNDFGQ0YyQkNBQworOjEwQkE3MDAwMDRFQ0M3ODY0RkE4OTExRjFGM0NFQUI0NEYzM0Q0QzRDRgorOjEwQkE4MDAwMzcxOTUwRjlBNzY1MTgxOEVFQ0EzMjMwMjhDODQzRjg5QworOjEwQkE5MDAwRDc5MEU0OEQ4MDYyNjc2NDIwRUNBRDYyMEMwQzdCRTU4RQorOjEwQkFBMDAwMTgxODJFMzM2MDM3NzcxQjUwN0UxRjUwREUwRTZBMEUzQgorOjEwQkFCMDAwMDBCNUJDN0IxRTY4MDMwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwQkFDMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNTdEMEI3ODU0RDVBQgorOjEwQkFEMDAwQjVGMDNFNzNDRTk5NTc2NjI2OTM4NDg0ODRGMDk4MjRGQgorOjEwQkFFMDAwODAzQzAyMEUwMTAyNDhBODkzMDcxNDI1QzAwOEE4NjhFQworOjEwQkFGMDAwMTEwNjUxMDg4RjNDNDRFRDk3NkJEQkNCRjA0QUQxRDI1NQorOjEwQkIwMDAwMzZENkI2RDI1RUQ0MDFFMTVFQTQ1ODAzNDQ4RDFBNjBFNQorOjEwQkIxMDAwODA2MDUxQzEwNkVCMDNBQkQ2MDBCNjA4MDIxOUEwRUE1QgorOjEwQkIyMDAwNDhGMUY3NUY2QkVEN0Q5MjczMjYzMzQwN0JGQkRGQkZGRgorOjEwQkIzMDAwREZGRjhGQjVEQjdEQ0VERUZCRUNCRERFNkJFREI1NzdEOQorOjEwQkI0MDAwNTQ5NkNFNTgxRkM2QkVDMURGOEQ4QzNEMjAzMTg2OEZFNgorOjEwQkI1MDAwQjQxMjdFRkZFQjlCMENDNkE2NUFFMUJGNjRDNkM2Q0JFRgorOjEwQkI2MDAwMEVDNjQ2MzAzNkM1QzE0MjE2NjgzM0E1MDgxRTc2NjMzOAorOjEwQkI3MDAwRUNDRDRENTI0OEM2M0VEMDJFNThDOEQ4MjJDNjdGNTM3MQorOjEwQkI4MDAwMTVENjI0NURDRkQ4ODVEMTNCRUI4Njc5MTg5MzdDM0VDMgorOjEwQkI5MDAwNTY1QjAwQTVDN0NENjY2MTU5QjRGNzJCQzlDNTU4RjJFRAorOjEwQkJBMDAwNjgxMzYzMDM3ODlGNkZFMERGMTQ5RjlEQzZEMkVBNjkzNAorOjEwQkJCMDAwMTM1MzBERjU3NDdGMEY0M0ZCRUUzMzczMERFRkIzMDI5OAorOjEwQkJDMDAwODMwQ0VGQjMyQjBBMENGNTVFMzUzNzE4REFGN0E5MkQ4NQorOjEwQkJEMDAwMzFENDczODIzNzFCREFFN0FEOTk2NkE4RjdBQkJGRDNEMAorOjEwQkJFMDAwRDBGRUJBNzU3NzFCREUwRjBDMkQzMkJDMUZCQzY1QTlDOQorOjEwQkJGMDAwQTEzRUE0RTEyMTQzRkJFQjlCNTYxOERFMEYwQjNGNjJGNQorOjEwQkMwMDAwNzgzRkZDRTBDRjBDRjU5MUFEQkYzNkI0MUY3NTc0QTMzRgorOjEwQkMxMDAwRTFGRDk4QjZBRDg2Rjc2MzNGREQ2MUE4OEY4QkJDNkMwNAorOjEwQkMyMDAwNjg3RjYzNzQ5RkExNUVDQ0RFMzBCNDJGQjVGRUMxNTAzNworOjEwQkMzMDAwMUZFRkZFQzBEMEZFREI5OTI3MENFRjZGRjI3QzY2NzgxOQorOjEwQkM0MDAwQUZEMUMxQTQwMTE3MERDRjI3N0JGRjY2RThBNzMwM0YxNgorOjEwQkM1MDAwMDA5QjMxMzNBQkExRDJDQUVBQTlCNEIzMDYyQTFEQUMwQQorOjEwQkM2MDAwOTVDQUVGRjYwRURDNDlGNEY5NjRCMDhFMDFEREFEMEMzNworOjEwQkM3MDAwNDZGRTk0MDZFNTlCQTNGMzkyMDNGOTM4OUE4RjMxQTAxMAorOjEwQkM4MDAwREIyOTdDNjgzNkM1RUEwOENCNDA2NzE2MkIwQkRBODBDNworOjEwQkM5MDAwMTQ1QzUxQTBCNzM0QTBCQjI4QTNEMjFEMDU3QTFCMEU5QgorOjEwQkNBMDAwNzQxN0I1NTI5OTFBNERBNUU3Njk1MTM3OTVEREEyM0QzNAorOjEwQkNCMDAwRTg3OTdBMzQ5M0NBOEM2ODJFOTVEREEzMUUyQTMzQTNDMworOjEwQkNDMDAwODNBOENDOEEwRUEwQjI0N0I0ODBGQTY1NDdCRDU0RjY2QgorOjEwQkNEMDAwOENERTQwQ0Y3QjQ1NDc1M0Q5M0I1QTQyQ0ZGQjQ0N0Q1NgorOjEwQkNFMDAwNTQ3QUEyMzc1Mzk5MTM5RDQ4NjU2RTc0MUFCNUNCOEI1RAorOjEwQkNGMDAwRkFBOUVDMUJCRDkzOUVGNzhCQ0VBNEIyN0ZGNDZFMkFGQgorOjEwQkQwMDAwQUY4QjA2QTgxQzEwNUQ0NEU1QzA2ODA1OTU4M0EyNEI2NworOjEwQkQxMDAwQTlERkUwNjgwRDk1RjlEMTg3RThGOTkwNjgyRDk1NDM4MgorOjEwQkQyMDAwQTMyQkE4QkMzRTFBQTREMjFCN0Q4NERBMEQ4QkFFQTEzNgorOjEwQkQzMDAwQjIyMEZBMzM3QTNFM0M1QTRGRTU4OEU4QUZFOUY5QzhCOQorOjEwQkQ0MDAwRTgzQTJBMEJBMzFCQTkxQzE1MEQ1MTM5M0FCQTk1Q0ExQQorOjEwQkQ1MDAwMzFEMTJENTRERTEwREQ0MUZEQzY0NjFCQTgyQzhBQkUxNAorOjEwQkQ2MDAwNENDRkM3NDU5QkE4RkMxNkQyNUIxQUQyNUQ5ODRBNUZBMAorOjEwQkQ3MDAwRjQ3NTdBNUUxQzNENDg2NTQ5RjQyRDdBNUUxQTZEQTUwRQorOjEwQkQ4MDAwQjIyQ0ZBNDc3QTNFM0U3QTk0Q0EwOUQxRTM1NDdFM0JGQworOjEwQkQ5MDAwREE0NkU1QzRFODY5MkE2RjhBN0U0QUU1Q0REMTBCRDQzQworOjEwQkRBMDAwNkY1MjM0NDI2NTc5RjQxMjNEOUYxQzhENTJBOUM5M0JGNAorOjEwQkRCMDAwMzY1QTNERDNBNkQxNUYyRUZFRkYyQ0Y3NUYwNjgzNUM3QgorOjEwQkRDMDAwNjIwMUQzMzc1MDMyMDdEMEMxOThDRUY2QjEyNTQ4M0IzNworOjEwQkREMDAwOTI5MzJBRDA1NTEyRDA3NzBBQzg0Mjk0ODc1MzZBQTQwNgorOjEwQkRFMDAwRDBCNzczODAzRUJBQjVCNTYwNUQxRDZERjE1OEEwN0VDOQorOjEwQkRGMDAwMTc4QkE4NDhCRjFGQjEzNjI3Q0FEM0JENjM0RUY2NkM1OAorOjEwQkUwMDAwMDM3QTdEMzMzRERDMEI4ODFCN0YyNDZGNTU5QzUzMUVDQQorOjEwQkUxMDAwQ0FEQjMzNEExQjNDOUZEMjZENUY3QUMwODFGRDgxMzdGQworOjEwQkUyMDAwMEE5MEJDRTFGQjQ4REY0MDhFMzhDRTVEMEEwQkJBNjA1OQorOjEwQkUzMDAwQUE0NzcwODQzMUQ0MkU2QzgxRkFBQzcyRTYyQjgwRjY1RQorOjEwQkU0MDAwNzU2MzJDMzM0M0YwOURCQTAyN0Y4NTFGQ0ExRkU3Rjg0NAorOjEwQkU1MDAwNjc2MkY5M0EzMjBGQ0M3RkJGMjg4RjMwMTM5NTNGRUVERgorOjEwQkU2MDAwRURBNjcyRDY3REZEMzgzRjk1MDExMEIzQUUwRTg3RjQ3NgorOjEwQkU3MDAwMENERThGMzkyMkJERkQ0M0FFQkQ5RkMyQTBERkM4Q0UxMAorOjEwQkU4MDAwRjZDRjMwRkYzQkY4M0M1OEMyMDZENDM4M0FEQkMxRjM1QQorOjEwQkU5MDAwQTNEODJFQ0VGMzBGRTIzRDZGMzA4MTIwMDA3RDE1NENFQworOjEwQkVBMDAwMzU4NzM2QTM3RTYyOUVFNDVCNzA1RTU2NEZGMjM0Njc0MAorOjEwQkVCMDAwRTI3OTNEQkMyQzMzNUZFOUFCOUY2Nzg4RTZGN0IwQzRGRAorOjEwQkVDMDAwNjYzNkQwRjhCRUNDNjk0MzY4N0NDMjc3MzBENTFBREFDMgorOjEwQkVEMDAwOUM0M0E4MzBEMENCNUYxMTlFRDAyRkRGRUU2RkE3RjUyQgorOjEwQkVFMDAwNDEzRkJGMTNFMUUzQkUyNkI4NDBCRjJGMDg5RTBBRjRDRQorOjEwQkVGMDAwMUI3MkVERkQxMjk3RjU0Q0NDQzM0M0UzODlFN0Q1MTZEMQorOjEwQkYwMDAwMTY5NDAwNEU5MUNEQ0VEMEM2MUM1QzkzODdFNDY3ODUxNQorOjEwQkYxMDAwNUIwOEQwNkUwMDBDRDBFQjE1MjkwODQyQzY1QTc2Mjc3NAorOjEwQkYyMDAwODU0REQwQkU2OEIzNzMyM0RBMDFFRDI1QzE4Q0E5MDgxNQorOjEwQkYzMDAwODc4RDJBREIwQzRENTZFQ0ZFRDFCQkZGMDFGNUEyMEQxRgorOjEwQkY0MDAwMkFCMzQwN0RFMUM1OUYxNzMyQTBBM0VCMjQ4OTdGM0YzMAorOjEwQkY1MDAwRThEQkRCMTdDNjBGMzBFREU3OTM3MEZDMDU4QzhGREY1NQorOjEwQkY2MDAwMkUwOUI4NkU0RTI2QkM3RDVBQjZBOTZFMkM5NDZEQkJCOAorOjEwQkY3MDAwMkFDQjE5QzhGMTkzMDBENjJDQTBFRjg1NzZBNjYwMzk5QworOjEwQkY4MDAwQUI2NkJCOTlFODM0QTg3RUQyQTZFOTE3RTI2N0E1QjNGMQorOjEwQkY5MDAwMkU3N0FEMkZDMEJBQzZGRkIwRUU4NTIxQjVCMzBFRkYyOAorOjEwQkZBMDAwMkVERTYyQUNFQkUwNDU3NjUwRTRCQzEyREE0ODc0OTVDNAorOjEwQkZCMDAwQ0RFMUEzQzFDQjk3Q0RFMTI3RTA1NTc2NUUwOTlBQkFEMgorOjEwQkZDMDAwMTFCQzQyMjgwNzkyMjUwRkMxQTFFMkJDMTI5NjYxOUNDOAorOjEwQkZEMDAwMEE4MDIzQjI2MEM1QUU4NzMzMTA0RThCQjdEOERDOUY4MgorOjEwQkZFMDAwRThCRTVCRDk5MDYyQTg1NzM3NjVCOTNGRDFFOUQxMEI1QworOjEwQkZGMDAwMDc5Rjc2RTFGQTk3NjY5QURDOUY4MDdDM0JCM0NDOTdFQgorOjEwQzAwMDAwRjYwOUEwRUNEQ0IyODk1NDZBRjQ1MUQ5OTBFMzc2MThCMQorOjEwQzAxMDAwQzYzMUQ2MkZENDRCMTMxQjQ4N0Y3QTkyNjcwQzQ5NENGQworOjEwQzAyMDAwNjc0QjMzQ0RFRTRGODA1NTRGNkZFMUZBRjZGNDMyQUJFQworOjEwQzAzMDAwMUJCRjczNjY5OURCQ0RCRjlCNDlBNTA2QUYyNUI1NzZCRgorOjEwQzA0MDAwNkFBRkNEMkZEMUI4RkZFQ0Y5MzFENkM4NEU1ODUxOUUwQQorOjEwQzA1MDAwQzNCQkJDQzRFRDEzRjI5M0YyNTczM0YxNDlCM0ZBMDVGNQorOjEwQzA2MDAwRDI4RDE1RkVGREM2NDQ3NDQ0NzU2RERDRUEwNjM5Njg1MAorOjEwQzA3MDAwQjkxRTlGNkYzMzdDMEZGQTc5RkVBMkQzMkY4OUY5NTYzMAorOjEwQzA4MDAwNjE3RkQxRDFFNUZEMzgwMEYxQTk5NUYwMUM4MDExOTNCNQorOjEwQzA5MDAwNjFCQzc2QzVCMTA2RURBOEM5ODI3RUFBQjExREM4ODM3MAorOjEwQzBBMDAwNEE2QjlCMzkwMDhGQ0UzNjcyN0MyNEZBQ0VFOTY1NUJGMQorOjEwQzBCMDAwQjI1MUFFNTU1OEVCQ0QyOEFDMkExQTA2OTYyMTNGOURCOQorOjEwQzBDMDAwNkQ1Qzk5ODFGQTY1QjE3Q0UxQkJGRTM4RkQ3RkFDRjExNgorOjEwQzBEMDAwNkQ0ODhEMThGNTY1NDhDQzEzQzYzNUYwMTk3Mzc0QUNFRQorOjEwQzBFMDAwMUJFQTY3NENGMDI5NDdENzcxMUY5N0I4REVBOURBNzZBQgorOjEwQzBGMDAwNjRDMjU4OTg3RjU1RDM3OTMzQ0U2M0IyMTQ3ODVDNEFDMgorOjEwQzEwMDAwRUY1Q0JGODRFQjg3NzExNjZEMzk0NjdDRkVBOTFBRUM5MworOjEwQzExMDAwRkZCRDlDMkJDMEIzQ0IzQzFEOTk3RjQ5RDJDRDJGMDhDRQorOjEwQzEyMDAwODYyNEYwRUJEREEzMDVCRjMyQ0ZFRDFGMDA3RjlFN0FBMgorOjEwQzEzMDAwNDM2NThGQzAzQ0Q4NjU2ODA1RUY3QjhCQjdGNzMwQkY5MAorOjEwQzE0MDAwMEJFMTc1NzdFMzYyOTIzRkE3NTBGRUEwMUU2NkY1ODU2RQorOjEwQzE1MDAwNDgxRjY3OTk2OTIyQUVFRjJDN0JDQjM1NUMwN0JGN0QwQQorOjEwQzE2MDAwOTI1OUMwMDc0QzU5OTAwNzE2RkExNEMxMkQwQkY1ODA0RgorOjEwQzE3MDAwQTVBMkFFNTUxRThBQ0Y5NUEwOTA0QkQyMzcyNDRGNDIzMAorOjEwQzE4MDAwMTJFOTg5MEFGRTNDQzhBQ0NCNjkxRDZCQjgzQzBBQzJGNworOjEwQzE5MDAwM0Y1OEJGQjdERTI4OUYxNkFDMzNENkU3QjM2OTE5MEFGQworOjEwQzFBMDAwQzg5N0Y5M0Y1NzYxNDQ5MDZGN0FGOTA3RjA3QjQ2RTJGMAorOjEwQzFCMDAwN0E3NzAxQUJBOTczQzNGQzlGMzAwMzlFNjBGRTc3QkIwNworOjEwQzFDMDAwOTk5MjBERUJBQjdDRjE4OUMyQjk1MDdGNERFMjdBRUNDQworOjEwQzFEMDAwRjQzMjk4N0U3RjE4Mjc5NUFGN0Y1MTZEQzhFQ0NCRUY3NgorOjEwQzFFMDAwQkFCRTEzOERDMzZGMUJDQjY4M0M5MjkzQzE0NTlBRkVCOAorOjEwQzFGMDAwNjUxRUE1OTBBNDI1MThCOTg5RDc5RkREMjhGQjZDMkU1NAorOjEwQzIwMDAwNkMwN0NGNzVGMjc5REUxQUUzRkFBRUI2RkVEOEY1MzJENgorOjEwQzIxMDAwRjYzM0EyQjc0NTVCNkU2MTQ4NjdEQTdBMzQ3QzY5RUIyNgorOjEwQzIyMDAwNTFCNzQ4QkU1MDFDM0U2ODEzRjRBQUM5QjU4ODgwOUYxOAorOjEwQzIzMDAwNjY3NzdDMUU1M0JGMTQ1M0ZGMjZBNkFFRDFCNzJBRjhFQgorOjEwQzI0MDAwMUJFOEZFNzM2OTI0RjI3MzY0MDJBNzkzMzZBRUQ3NDRFOQorOjEwQzI1MDAwM0I3MzY3QkI0QjU3NkE2NzExRkMwMkVEQkVCOTUyM0I5QgorOjEwQzI2MDAwNUJFNzc4OEEyOUJENkJCQkNBMTc5RjdEMjEwOEY0QkRBNworOjEwQzI3MDAwRThCOTVGQjgxOEQwRTMyOUE1M0VDMzBCQ0Y5NzZDNUUzMQorOjEwQzI4MDAwRUQ0MjM4N0RBQTA0NUQ0ODM3QTc0MkYyQzQ3OEYwMUExRgorOjEwQzI5MDAwNjM5MjM0N0JDMzIxMDFERUFCMzRGQTJGNUEzRTA1RjU5RAorOjEwQzJBMDAwRkIxNzlCNTVGNzIzODA5N0VBMkQ5NkIwMDVGMDVERDVENworOjEwQzJCMDAwQjhCMDlDMERBNUZBMzE1RUZGRTE3OUE0OEZFQTI2RjVBRQorOjEwQzJDMDAwQjgxRUFGOEJGRUVCMTcxOTFFMjdFMTIxREI4NDM2MzAzOQorOjEwQzJEMDAwMEI2NzMzMjhBQjM2RkQ3OTAyREFEMUQ1MkM0MkY0MUMzQQorOjEwQzJFMDAwREIwRkJGOEZBRTFEQzhFQkI5RTZFNEFFRUYzNUJGQjFEMworOjEwQzJGMDAwOUEzRjYyRDU4RDNGM0E4RjdFNjMzNTUzOEVFQkU5QTgyNgorOjEwQzMwMDAwMDI2OTE5RUNCQzQxMjY2NzM3RjQxN0Q4MjgzNjBBRTVDQworOjEwQzMxMDAwOEEwNjA3MTY0QTI3QjlCQ0YyOTlDNzg3MUU4Mzc5OUNGQgorOjEwQzMyMDAwRDlGNDg2NEJEMkMxMDcyQzI0ODJDQjg1ODY3OTFGQTdFRQorOjEwQzMzMDAwNUQ0MTJGOUMwM0ZBNjRGREY1RkQ0MkQ0Q0ZEMzA0MTM3NQorOjEwQzM0MDAwRTgwRUQ1NjY1RTJFNTFDM0FFQjEwMENGMjUxQjU0MkYyQgorOjEwQzM1MDAwNTAyNjVCRjJFQ0QzRkZGOTZCRTAzQkY2QkVDNURCMEY3QQorOjEwQzM2MDAwRTBCREY4RDkwM0VGREUwMEY1QzVEQkQ1NkVFNTdDMTkzRAorOjEwQzM3MDAwMEUyOUEzMTMxRkQ1RjAyRkM2NjUzNEY4MkZEQTc5QzAyNAorOjEwQzM4MDAwRUMxOUMyOUY3RjNGQjUxMzBGOEJCN0VGMzVCMzIxNUQxQgorOjEwQzM5MDAwRTE1NkRBQjBEN0RDRTY4ODgzOEY4NjYzMTNEMDlFNTlFNgorOjEwQzNBMDAwRjlDQzk3NjZDNEY3QTlERDEyRUI5RUQzQjU3RkM1ODY5RAorOjEwQzNCMDAwMDM2NEJGMjA5QzA4N0YwMjNGMURGOEVBODJBN0YwOTQyNworOjEwQzNDMDAwOTc0NzUwM0IzN0NBRUI0NDc4NzJBMkFFMUU0OTc0RkNDMworOjEwQzNEMDAwREI5N0UxRkIxNTdGQjQ3ODcxRkQxNUJGQkRERjg1RUIwMQorOjEwQzNFMDAwMzhBOUQ0NzA3QTdFNjI3NTg2MEZCRTVCQTEwNjMzRENGNQorOjEwQzNGMDAwNTRGMkU3MTU0RjNFNDg3NEI2RTBDODgzNjQ5NzAxN0Q1OAorOjEwQzQwMDAwNjQ5OTQ4NjcwNEIzNzA3REY3QUVCRjk1RDYzNzlGMDUzMgorOjEwQzQxMDAwODhERTJBOUU5MEZEMjE5NDAzMEE5QkI4M0QwRTNGM0M4NgorOjEwQzQyMDAwMjdGOEUxRTQ0NjkwOTRCMEJFOTMyODFGRDFDRTdENEIwRgorOjEwQzQzMDAwMTZGMkYxM0VCMjIzMUYxNDZCMDU0Qjg2RUE5RjVCMzk1RgorOjEwQzQ0MDAwOUVFQTRDMjYyRDJFNjczNUQwRTlBNjFGOTIxQzNERERCNQorOjEwQzQ1MDAwQ0JEN0REOUQ0RjcwRDBFNDI2Qzk1M0Y5QzhGOEVFMUM0OAorOjEwQzQ2MDAwM0Y1Q0ZFNTIzRkEwQkI1MjdDOEVFRDVCNTU5RjZEQTg5QQorOjEwQzQ3MDAwQTE5RjkwOTdGQ0ZCMEY4OEVGQzNCQ0VENjg3RjlDQ0MxRAorOjEwQzQ4MDAwRTA3QTIyNzY3RDdGMzQ2OUYyMTFGNEFCOEVCRTc0N0M0MworOjEwQzQ5MDAwQ0RGOTdDRDNDMzlDQUYzNTNFMEZERDMyMTFERkZGRjUwNAorOjEwQzRBMDAwNkRDRTNGRDgwRkY1MEZDQzJCREM5RERFRUY5RDIxOTE5QgorOjEwQzRCMDAwMUNCMEIwNzAzQzdFREVBNDBBN0UzNkJFMDcwOTRERjY4NQorOjEwQzRDMDAwMUJDQzVCOTE5MkY1NzQwMkUzQTcxMkZDQzkyRTk5RkY3NQorOjEwQzREMDAwNzNFOEE3QjNBN0FCRjE3QkQ0Q0VEQ0Y5M0NBNzkzNkY4RAorOjEwQzRFMDAwMTcwOEZFREY4QUZDOUZENEM5RkY2QzdERkEzNUY5NjcxNworOjEwQzRGMDAwNEJENEQwN0ZGRTFBRjkxNUY4MzNFODQxN0U1NUZEQjhDQworOjEwQzUwMDAwRUVDRkI2RUQ3RkY3NEVBMEVCQ0YxQTM0M0UzNUNBQ0Q1NQorOjEwQzUxMDAwNTgzRUFERDhGMTIwNDNGQThDRTVEM0NGN0FENkIwQjhFNworOjEwQzUyMDAwN0MwQUNGRTNGMjY5Q0ZCNkZGMTFCOUE5QzFFRDQ4MEM3RgorOjEwQzUzMDAwREM0MDBFM0VGNUIyMjczMUZDNjJFNTYwQjVDOTEzNTcwOQorOjEwQzU0MDAwMEVDMkVGNkQ1NkQ4OTVFRTM0N0FEM0U4NkNEMTZGMkFDRgorOjEwQzU1MDAwRkJBMEJDRTlBMDQ3OERERTNBRTg1MUEzQjdEODc1MUExNQorOjEwQzU2MDAwRTExNkZCN0UzRENBMUI5RDdEQTBBRTYwNDEyN0UwMzlGMAorOjEwQzU3MDAwQjI0QjI2M0ZCMUREMTM3MUE1QzI3NzU3REJEODFDQjQ4RgorOjEwQzU4MDAwQjNEQkREQTI5RUMyRUI5MTc0NzMxRENBMDVFRDc5QzRDNQorOjEwQzU5MDAwQzZFMzBERURGRTg4MkI0NTY3M0YxRjZCOTY1RDFFNzg0OQorOjEwQzVBMDAwREYxNjYyMTNFM0Q5RDUyMDcxRTlGQjZEMkNEMUZCRTVEMQorOjEwQzVCMDAwMDRCRkYxQjJBMzc3RUQwOEY0QUI2NDJGREE2RUY3MkM2OQorOjEwQzVDMDAwQkZERDg1MjE4QkY2RTZCQ0E5MzNFMUY5QkRBRkM5MTQwNworOjEwQzVEMDAwRDM2OEI3QkI4NkUyQkNDMDZGNTdCMjAwQkVGMzA0OUVGRgorOjEwQzVFMDAwM0Y2NUMxNUYxNkMxQkFFNjM1NzNCQkY4OUVCNTQ2NzhBNAorOjEwQzVGMDAwQ0M3NzNDNjA0NjM5MDNGNjY3MjcxREU4RTg0NURCMjcyMgorOjEwQzYwMDAwQTg1ODZGN0NCRjg4QUQyNTdDMkQ4QUExOUY4MEYwNzdDQworOjEwQzYxMDAwQjI2NDQxM0ZDM0Q4MzBFMTZGOTg3MEJDQTU0MjRFOERFMworOjEwQzYyMDAwOTdGM0E3Q0UwNEI4QjcxRjk0OTkwNUVBMTc5QTY1NTZGMQorOjEwQzYzMDAwODdFQkRDMjY4NTE4RjI3MTMwOURFOEIwMEFFNDAzRDM1RAorOjEwQzY0MDAwRjk4NTY3OTBDRUNDODlGOUY3Q0NGMzFGMTU3RTBGOUE0OAorOjEwQzY1MDAwMkM3OUUxODNBMUZGMDFFNTk5MTdERUVGRkYwQUQ2NUY5MAorOjEwQzY2MDAwN0NBRkY3MDdBQzZCRkJEMkRENUZDRDQ2RjlERUJFREJGRQorOjEwQzY3MDAwQzIyODRFQjJGQjc3QkRCRjg3RjU5NzJENUU4QTczQUM5QgorOjEwQzY4MDAwQjBGMEY4RDQ2RTY3QTgxRkJFRUYwNUY4NDY3REI5RUI5MQorOjEwQzY5MDAwQ0JBMTZEQTQ2RjU2MTE5RUNBNjRFRTQ3NUM2OEZFREJBOQorOjEwQzZBMDAwOUZBNDZFNThDMkFBNTA4RkVFNEUyMkZCQkFGQTY1NUI2OQorOjEwQzZCMDAwMDg5RENFRjY1RDVGMTYwNjFDRkZCQ0Y1NTQ5OTU5ODBBNworOjEwQzZDMDAwRThDRkM5NjZFRTQwN0E0RDAxQzRDMUY3QUI1RjE5RjNGQworOjEwQzZEMDAwRjQ3MkY4N0U2NUUzNUVGMzNDNzg1RkJBRTdFQkExMjg3RAorOjEwQzZFMDAwNTdEQTc3NzBGQkUwOUNEQUY2MjRGMzMyMzY1NUZFQzU1NAorOjEwQzZGMDAwNzIxNUYwNzUwRTZEQjUxRTIwOTdFNDc3OEI4MzhFNzhEQQorOjEwQzcwMDAwNzBFMTcwNjgwNzM4RTBCQTAwMkUxNTI4MEYxM0MxNjM3NgorOjEwQzcxMDAwRkVCRjJDM0NDRUNGQzZFRjJGNjkxRUM1RTQxQzNENUM4RQorOjEwQzcyMDAwMjQxRjdGRUUwQzU5MjU1QTNGN0ZCRUZCQ0JBMTI4NzdGMworOjEwQzczMDAwM0Y2QjU4NEVGQUZCNkFFQjVFOERFQjRFRkY3RjY5REQ3NworOjEwQzc0MDAwNTJGODVBRDZCREU5NUY3NkREOUNGRTA3Qzk1QzFGQzU2RAorOjEwQzc1MDAwRjI0MTU3M0E3RkYxQkI1NEZGQUREMzRCRjNCRDQ2RkVEOAorOjEwQzc2MDAwNkZGOTk3NURGRjNGODhGNzFEMTJFREM3NUQwREVGMjc0RAorOjEwQzc3MDAwRkU2NUQ3N0QzNUJDQkYyNkYwRUU3NDYzQkNCNzdERDdCMAorOjEwQzc4MDAwRDdCRDk5NkVGRDU3NUJCNzQ5Rjk1Nzk1NkY1NzVFQjc5RgorOjEwQzc5MDAwNjZGN0I0OUE2QURDMjM2MDdFRUZCM0ZBNUI3M0EwRkNBMQorOjEwQzdBMDAwQkRFRjYyMzc3NDQ3ODEwN0ZDRjFGQzg2MDI4NUZCMEQwMworOjEwQzdCMDAwMTY4QzMzNjFDMzVCMjUyRDVFRDQ2QUQ4QzdFRDU5NDExMQorOjEwQzdDMDAwNzZDNjE0REY4RkM5M0U2MDRBNEQ2QjMxQjQ2RjJEOTkyOAorOjEwQzdEMDAwRTc3RDg0NUExNDFDMEQ2MDdEQzYzODUxMzdGQTUzNkZCQgorOjEwQzdFMDAwNEFDQzI3ODExRDNCQTU2NEQyNDFCNEVGQTZGQTY0QjJCRQorOjEwQzdGMDAwRkZBMDI0QkJFRjlEREUxM0Y4RjNEMTQ2M0ZFMjhFMTg3NQorOjEwQzgwMDAwM0ZFMEY2OTlDNkY3Qjc4QUYxNkU2MzRCREQyMzAwNUUxMQorOjEwQzgxMDAwQjdGNTU0REMyMTAwRDExREM1MzUyQUFFRTc4RUJCMjQwNworOjEwQzgyMDAwNTZBRjhCNTdERTFBMzM5RTRCNjEyMjRFRjI4RkMxRUYwQgorOjEwQzgzMDAwOUUwRUY4MkQyNTc4QjA2MkQ5QkI5OTVEMDNGQzE4ODc1MAorOjEwQzg0MDAwNzdFQjhDNjEyMThDQzMzMEM1Q0JFMTc3NUJBNTk3RTI5OAorOjEwQzg1MDAwQTBDMkNGNTQ0NTdGRDVCMUE2MTVGOTU2NjU0NkZGNTIwMworOjEwQzg2MDAwRjMxMzEzQzE5OTA5QkY5M0M2QzlFRDg0QkJFQTkzQzlGOQorOjEwQzg3MDAwRUZENDhENDdGMEQwRjBGMUY3RTI0MUMzREY3RjE3MUYwRgorOjEwQzg4MDAwODU4ODhGMzhGQjY3MEJBREQ2NUI3MUZGQzIzQTQwMjJCQgorOjEwQzg5MDAwQkY3REVBNUE5OUYyNjBBQ0Y5MTJDMUQxM0Y1QUE1RkRBOQorOjEwQzhBMDAwOUQzRjlCRkM4NTY4Mzg5NzBGMUY1NUY1MTAxRkQ2OEI1MQorOjEwQzhCMDAwRjA1OTI4RTAzODlGRDU5MEREQzkyRTdGRjM0RDExRUU1OQorOjEwQzhDMDAwMUIxMTg0RTBCRDhGQjFDOUUwODdDQzJGOTJDMjc2NTg4RQorOjEwQzhEMDAwRkYwMjg1MDU5MzBCMzBBRTI5QjFFM0ZBQjg2NkM4NTg1QworOjEwQzhFMDAwQzdERkI3MzIzQUM3Qjk1QUZCNDRGMkUxOUY1RDdFMEMwRAorOjEwQzhGMDAwRjJFODc4NUZGMDU3QjA1NEU4RjM4QURFNEY5Q0QzQ0M2RgorOjEwQzkwMDAwRTE1OEJENDQwQUU1MTIxRDg1NTVCRjZFNUZFNzdENDFDNAorOjEwQzkxMDAwRDcxRjdGN0YzOEM5QjlFMjlGMEU0OTI2RkZENTM3ODhEOAorOjEwQzkyMDAwRUNGRDZBNjFFRjVGMDg3QTkyMzE1RTczQTEzOTJGMTlDRAorOjEwQzkzMDAwRTMzMTE3MEU5NkJBRjQ3MjUxMkI4RjA4M0ZGMjBGQ0JFQQorOjEwQzk0MDAwQUM1NEI2OTc0OUY1MzJGQTVCMkMzMjg1RjQ3MDk5OEQ2OAorOjEwQzk1MDAwQTFEQzg5RURGNzkyQTJDNTVENkFDQzE0OTc4NzlGNUMzNAorOjEwQzk2MDAwODg3OEU0QkYwNUQwMzUzOTU1ODdCN0I1OTM0RjI5NDM0QgorOjEwQzk3MDAwQkJFMjAxN0ZDNzc1RkIyNEZGNURGOEEyREY4QTcwM0QzMworOjEwQzk4MDAwNjI2QjlCRTA4RkIzREUzNzA0RkNDQUY3N0Q2NUM2Mzg2NworOjEwQzk5MDAwQzFCNEU2MUMxNUUxMzJBRDRDMzZFNERERUM1Nzg0M0YwMgorOjEwQzlBMDAwMzU5QzBEQzc3OTk1RUZCQkM5MzUwNkYxNzI1MEY2REFBMworOjEwQzlCMDAwMDBCRUQ1Q0RFN0NEODEzOEZCNkRCMUYwQzRGMTMxMkU4RAorOjEwQzlDMDAwN0M0MkY1Q0U0Nzc4OUVGOEIxOEQwNTgxMUYwRThCRkQxOAorOjEwQzlEMDAwMUY3OEU1NDNGOTA1NDNGOTMwM0VGNkI2QzJGNzE1MDY3MAorOjEwQzlFMDAwQUEzQzJFM0VCREJDNTg0RDg3RUZFNjM3QkE4N0ExOEFEOAorOjEwQzlGMDAwRTkyMURBMEY1NDNERjQzRTVCRjREM0RBRjU1OEMyREI5QgorOjEwQ0EwMDAwMUQzM0JCQUJFMkFEN0ZCMjk5QUY3RjAxRjM3RTc3QjQ0QworOjEwQ0ExMDAwRjRBRjg3QjdFMjlGM0FDMzI1QThERkNCMjQ5MjIzNUQwQQorOjEwQ0EyMDAwRTk5QTExN0Y1Qzk4Mjg4NTUwRkZBMjFGNEJGNTcyODkwNworOjEwQ0EzMDAwRjRGRjYxMkRGRjYwMUFENzk3MUFEREM3QzI1OTUyMzkyQQorOjEwQ0E0MDAwOUNCNUVGRTdBODlDOUVDRDJBODc4RjA2NjcwREJFQjFFNworOjEwQ0E1MDAwRjNENURBODNCQ0JBNTExRjVGOTlEQTM0RUNCNzY4OUYxQgorOjEwQ0E2MDAwNTQzNTRCNkUwQ0ZENTUyOTZENjZFNEMzRUFBNjQ3NTU1NworOjEwQ0E3MDAwREMyRkI4QzNDM0M3NjU4QTdGQTg3RUJGNzZBMEFBRDBDMworOjEwQ0E4MDAwN0NGNjE3OEMyNUZCRjFFMjVBNkUxRkZCRUUzOUVGNDI2NAorOjEwQ0E5MDAwM0JFOEIwQzlGQkZCQjFDODhGNkZDQTk0NEY5MDA4OEVCQQorOjEwQ0FBMDAwMUYyQ0RCMzJBMzRDRDE4RjlCNDNGMzlDQkVBNDU4QzVGMworOjEwQ0FCMDAwNzBEMDc3OTZFQzU1QkJFQkU4NjlBMDlBNEFFRkI1RTdFMgorOjEwQ0FDMDAwM0Q5Njc4MEFGMDM5N0M4RkU2MTFGQzg5ODU2MTFFNDcxNgorOjEwQ0FEMDAwN0U0MzZCNDkxMkJDRkY0RTREMEFBN0MzOEE4NkJENjZEMgorOjEwQ0FFMDAwQUFFNzUwN0JFRDdCREE3NzYyRjk2OTQ2Nzk5MkExM0UzRAorOjEwQ0FGMDAwQUZCNEFEMjdDMkE1REMxMjdFQzAxQjg3NEU1QjU0NkQ2MAorOjEwQ0IwMDAwOUZFNEVGRDQxMzNFQTBEQkExRkYzRkU4ODlGMzEzN0M0MQorOjEwQ0IxMDAwNzFFMEY2OThEQTQ1M0Y3NDhGQTcxRjk2MkVGNzc0NDc5OQorOjEwQ0IyMDAwRjgyRkREOTVENzFEOTk2M0U5NkJFMzMzRTJFOTg3Nzc0OQorOjEwQ0IzMDAwOTZGMUZEQzBGNzQwOUU2MUQ5M0UwM0Y0QzNGNTNBRkQ3RQorOjEwQ0I0MDAwMzBDMzQ2RjQxMURCRUYwN0VBMzVFQTA3MEQ1RkZGQzM5OAorOjEwQ0I1MDAwNzJFNjFERDQwRjcxRjhCQTVFMzVFQTg3REI5QUU3OTI2OAorOjEwQ0I2MDAwN0VCODZEODZDQzNDQkE3OERDMEY1NUIxQ0Y5NTUwM0Y3RQorOjEwQ0I3MDAwMTQ2N0RDNDE3NUQ1OUIxNDg3NkVERTExN0UwOUMyMTVFMgorOjEwQ0I4MDAwNEJGQzBFRUE4OTNENDJFRUM3RUE4QjQ0RjI3QzlBNTk4RgorOjEwQ0I5MDAwMTJGQkQ1NTc5MUU3RkY5N0UwQUNDOUYzQTVFMEJGQTAyMgorOjEwQ0JBMDAwMUREODk1MEUxOUM5RUJBNTc3ODAzQzk3OTAxRUI5M0MwRQorOjEwQ0JCMDAwNUY3QTk3ODg0QkM2Qzg1NzNGQ0FENzExN0FGOUNBRkIyNAorOjEwQ0JDMDAwNTcwNUI4M0VBODZFQ0E3OTdDMTZCQ0JGQjM1RUY1NUE0RAorOjEwQ0JEMDAwQTFGRDlEOURGMkI2NTAyRjZGRjcwODc5MEI3MEVFRUQxOQorOjEwQ0JFMDAwOEU4M0RGOTlCMzkyOThDNzI4QUZGQUEyOUMzQTMxRUNCMgorOjEwQ0JGMDAwNzdGOTNCOTFFRTBGQ0JCNDhGRjg2N0ExQzcwRjBERkIxMAorOjEwQ0MwMDAwREQwODhDOUY3NzMzMkI0NDNGN0YxNkYyRUJEQ0IyRDBFQworOjEwQ0MxMDAwOEMzMkUwRTNEMjdCQjgzRDVDQjk0RDI2Mzg1NDM1NzI5NgorOjEwQ0MyMDAwM0JBRkFBQUYzREU0ODFGQTg0ODJBRjY4M0Y3MEYxMkUzQQorOjEwQ0MzMDAwQkUxRjA4ODAyQTJGRDZFMTcxRjFFMUI2QkE2QzdDQkYyNQorOjEwQ0M0MDAwNDFBMkZEQ0NGOURFQzUxNEM3NjdFQjc4OUNEODBBRkY3QQorOjEwQ0M1MDAwRjBCQzBFMUZDNTkxMkIwNUJDMTYzNjZGQTA3OEYzQzIzMQorOjEwQ0M2MDAwOTAzMTBFNUREOUY3RTY1M0U4MEY2OEYyNzdGMTk2OThBOAorOjEwQ0M3MDAwRjdERTg3NjlCRkEyMTJFM0NEM0EzRjQ0MTZGNkMzQkQ4MworOjEwQ0M4MDAwNzIzODdGMjdFNjc2RkU5RUZCNTVCMUY4RDdEQTc1QUM5MQorOjEwQ0M5MDAwQkZFMkJGQjlGRTIzQjBGRTExRkZGQ0Y1NUZFQkJBNTU1MgorOjEwQ0NBMDAwQjNFMEY3MDIzNjAyRjlFM0NGMjYxRkYxN0JGMDc1NThBNworOjEwQ0NCMDAwM0Y3Q0U3OUU0N0ZCNzVEN0U3MTlBNTA5QkUzQzZDMEE4OAorOjEwQ0NDMDAwRDQ2NTYxQkIyQTg5REEyRDU4QkZGRDQwMDZENDY3MzU4QgorOjEwQ0NEMDAwQjA2MTE4QTY1RkIwQ0VBODE3M0JGNDcwQTM4N0Y0RUM0MAorOjEwQ0NFMDAwQUM5QUVERDJEREY5MDg2RjU2ODM3NDM2QUZDMDEyQzAyRQorOjEwQ0NGMDAwRkRENDIzQjYwOEM5MkY4REVFQzY5OTM5M0Q4RjE1REZCNworOjEwQ0QwMDAwM0REMTIzNTI0NjdFNDQ5M0U0MjZCRTA4REJCODVGMDE0MgorOjEwQ0QxMDAwRjBCNzQxN0RGRjk4MkYyNzA4Nzg1MzNDQTZCQTg5RTNFNgorOjEwQ0QyMDAwQTcxQUYwODE3QzM1QTE1OUQ0Qjc3MDNCRUMzQkEwNkZCQQorOjEwQ0QzMDAwNjgzRkFDNzlBRjhBRkQyQUEwN0QxQUM5OUI0MTg2N0RFOAorOjEwQ0Q0MDAwMkVEQzlGMkJDRUQwRTE2REQ3MzE0RUI3OUIyNTJGOEI5QworOjEwQ0Q1MDAwODNCNzAxRjA0RjVDQkNGRDkzRTg1NTgzQzczOEIzQjA4RgorOjEwQ0Q2MDAwRTcwNUZFOEVEODVBQ0I4N0QzM0U5NEU0REQ4ODhEOUJCMQorOjEwQ0Q3MDAwNTM2ODFGRTU5M0ZBM0NDMkUzMjQ0MUJGQjE3NDhERjZCQQorOjEwQ0Q4MDAwQkQ0NzE3NEZCQTA1MjcwRUYyOTU0REI0NTE5RTFCN0QzNgorOjEwQ0Q5MDAwMzc5N0RCM0Y3QTc5MTJFQjM3NTdCMzU2QjI2MzI2NEI5RQorOjEwQ0RBMDAwODE4RjE0NUQ1RURCNkQyMkZGNDREQkE3RDVCNTdCNUMxNAorOjEwQ0RCMDAwQkQ0MjNCOTZFOTM2QTE5Q0JDNUZDQkI3QzRGQ0UxMENGRAorOjEwQ0RDMDAwQ0E1QkEyREZGRTVFODVFRkNEODJGNTVFNUMyMzdCNzFFMAorOjEwQ0REMDAwRkZFNzc2OTNFN0REMjJFNERGNDc1NDg2NzQ3OUYxOTAyQworOjEwQ0RFMDAwRUFFMzc2NjcxMkM5RERCOTg3NEZBODE4MEE5OTBCMzBCNAorOjEwQ0RGMDAwNDE3Q0NGRkQwMTk3QUYyNzcwMzA3OEY2NDdEMDVCM0U3RQorOjEwQ0UwMDAwRENBQjY3MEQyMzMxN0Y3ODg2NzdFRjc4MEZFMEU1RDZDRQorOjEwQ0UxMDAwMTE0NzU2RTMzRURDRjQ1MkY3QkJFRjIyN0MxRjk2MTkxNAorOjEwQ0UyMDAwQzJGN0Y4OUE1MkYyNEZFRUJGNEYyMkJBM0UwQTcwQzREMAorOjEwQ0UzMDAwRkVCN0NFQzg3OUY3NURGOEVFNUQ2QkQyNjk1RjZEOTY4RgorOjEwQ0U0MDAwRUZDMDc4QTRCMzc5NTM5RDBFREM1RjlCMzQ0MDY2MDEzQworOjEwQ0U1MDAwMUQxQ0VGNjJBREFCNTE1RUNGQUFCOUVGNTY5QzZGMDVCQQorOjEwQ0U2MDAwRTgwMThDQjM1NjM0MUYxOURGMURFQkVCMjVBRjA3QzY2NQorOjEwQ0U3MDAwQUYwRTA2Q0NERDAxODVBREVCQ0U5QjMxREUzMTFGREE4NgorOjEwQ0U4MDAwMjE3QUFBRDdGMzc2RDU5QjI0QUYwREU5QjFGOTUxOTI1NworOjEwQ0U5MDAwM0JGMzM3NDlDQzhERURDMURFQjNGMjcxNDM1NjE4Qjc4MQorOjEwQ0VBMDAwNzUzREY0ODdGQTAyRUM4RkUzNkU0QUI5MERGN0QxQUEwQgorOjEwQ0VCMDAwMEZDOUJDRkZFOEU1QUZBMjVDOUEwRkZERTAzNTZCREQ2MgorOjEwQ0VDMDAwNzQxRjhEQjc3MEJEQzQzMjYxQkM4QUQxMzkzRjE5OEREMgorOjEwQ0VEMDAwRTMxRDUyQkRGOEZFQkRCREJGMzJFM0JDNjdDM0Y3QjI3MAorOjEwQ0VFMDAwNjBGQzc5NzJEQjc4NkNDRkJFMjdCOTM3NTNCQzg5RTcxOQorOjEwQ0VGMDAwQzlCNjBCM0U2MDZGNjc3MUZFOTI0NDVERDg4MTlBM0U2MQorOjEwQ0YwMDAwRkM4MzM5OTdFODY5N0VFREYyM0E1QzU3NUIzMDNEMDc2OAorOjEwQ0YxMDAwNURBMEVBQTZGMzY2QjRFQjNFMDEzODA3QzA2RTNCMjE4NAorOjEwQ0YyMDAwRjJEOEY2MDc0Rjk4REI3NDcyMkE2MkNFQTNGRUY3MzQ2QworOjEwQ0YzMDAwMTUxMzdGREZDQkZDQjRERjFENThDRUY1RjBCMUQ1QjZBRAorOjEwQ0Y0MDAwOTA4NEY2ODdFQTI2M0RCOTdGRjU3NUJGQzRGNTlGN0JDRgorOjEwQ0Y1MDAwNTZBNUZERDE3M0JEREEyODFFN0I3MkJEQ0E4MjMwQzdDQgorOjEwQ0Y2MDAwOTVFQjY1OTIxQjI3QjdGMTM4OTBGQzg0NEFGNTA1MEZDNQorOjEwQ0Y3MDAwOUFBOUJFN0ZGREY0MDkyODBGNEYwMkZDOTEwRTRCOUYyQQorOjEwQ0Y4MDAwMTg2RkM2RkEwMjkwRUI5NjM4RjI2M0JFNjcxMTk3MTdENgorOjEwQ0Y5MDAwMzFGMjYxQzEzQTIzRkY3NzkxMTcwRjRDRTBGMjNENDYyMQorOjEwQ0ZBMDAwMUU1NEY2QUNBMzM4NUZBQzlDQTg2NjBFNEQzRTE0NjBEMAorOjEwQ0ZCMDAwQkQzNTlDNDVGNDVCNzU0ODY1NjhDRjU1MjlFRUQ5RUJDNgorOjEwQ0ZDMDAwOTA2RTY2RDk3MEE3MThGODIyN0MwMEU1REFDNTkwRTQ2NworOjEwQ0ZEMDAwMDlDMkZCRUZDQzc5NjkyNEMyRUYyRjA4NkZFNDhCQjU0RgorOjEwQ0ZFMDAwNjlCNDlGM0EzRjM0OTdFMEFBRTUxMzJFNTg2N0E0NjdDNworOjEwQ0ZGMDAwMkQ3RkU5OEU4MENDN0M3QTNENTA5MUM0N0NCQTc2RUY0RgorOjEwRDAwMDAwRkQwMEU4MTJCRTM3QTc0OTBBRDkyNEFDMUY3QkY1QzE0MQorOjEwRDAxMDAwMTE1NDc3MjMxRDU2RDUwQTdEQkFENjQ5NzRGQkRFQkY1RAorOjEwRDAyMDAwOUQ1RjhENzQzOUZCRkIxMkNEOUYwNTAzNzVBODU3QUEzMAorOjEwRDAzMDAwRDY0OTFFOEM2MzJFRjgzRUVGQkYwMEZBMjNCREJDRjcyNQorOjEwRDA0MDAwMkI0RTNGNDBDNzFFQTRGM0FBRjU4RkJFNEFFRDM3NDlDOQorOjEwRDA1MDAwMUUxQ0ZGQkQwRDczNDlGRjU2MDQ2NTQ2RUYzNzFEMjNBNworOjEwRDA2MDAwRkIxOEY0MDBFNTAxRUQwRkNBMTk0OEU3NTVBQjJDNkUyQgorOjEwRDA3MDAwQzRBMzQ2MkYxQUZEMUQ1M0M1MzkwMUFCNzdFODc0RThFOAorOjEwRDA4MDAwQjdDMUVDQTE3NUM3RDI5RDNDMzM4N0U4QUI3QTlCNEEwOAorOjEwRDA5MDAwRjQ1MTFERTRGNDc0RUM1OTk5RTg3MEZGRUFEQjg5N0VFMQorOjEwRDBBMDAwQ0U2RDk2MTJEMDVGQTkzOTBCRTkyRkM0REY3N0QwREZBMAorOjEwRDBCMDAwMzM5MkEwM0Y0RUQ3MjcxRkUwRjQ1ODhBRUY5MUZFOUU4RgorOjEwRDBDMDAwMTdGNjI5NjMwRUJERERBMUQxOUY0NjRGNTdBM0JCMkU5NgorOjEwRDBEMDAwN0EyOTAxQkQ4MTZEN0MxQkNFRUJGRUQ1MzY5QTc3NjkyRQorOjEwRDBFMDAwREQ0QkI3RDUxMkRGQThCNDNGNUY1QUY3NkYxOUM4QTc1OQorOjEwRDBGMDAwRjMxNTlFODdBMUMxQjE1MkUxNzkzQTVERTZGMUYzRTVGRQorOjEwRDEwMDAwRTZBQzZCOTk0RkNDM0NGNjc2RUFDNTAyRDQ4Qjk4NTdDNworOjEwRDExMDAwMTI4NkVGRkM2RURCRDM5NEJGNzY3NkVCMzFDQTRCNUNBNAorOjEwRDEyMDAwRkMwQUUwMUREQTlGREJFNjY0NjFCMkE3NDMyNDVGMTZDOAorOjEwRDEzMDAwMzVDQTk0MTdDQTk0NzBFMTc0RERGOTExMkRERjYyRjFEQworOjEwRDE0MDAwNzM0RTgyRUZBMjFEOTY1MDM5RjQ1RkY0QzI4OUExQjRFOAorOjEwRDE1MDAwMUZCRTIyRjIyQUYyNEY3MEFCQzRFM0YyQzFCNkExRDNENAorOjEwRDE2MDAwMzFBRjUyRTE3OTFGQjE3QTc3OEM4NUM3NkJDRUJDOTQxMQorOjEwRDE3MDAwMzQxM0VEMUY2OUNCNUVEQTRGNUFENDcwQkI2QUQxQzU0OAorOjEwRDE4MDAwMjdCRDE2OTVCRTBCRUQ2ODlGMjYwODc4Qzc3RDQ0OUM4OQorOjEwRDE5MDAwREYyRDQzRjRGMzVCQ0VDNzdCODZGM0NEQTIyNjk1RUM1RgorOjEwRDFBMDAwQTI0NTVCMzY1MDVDQUY3QUNCNzlDQTdCMkQ3REVFNTlCOAorOjEwRDFCMDAwMTdDMkExQkE0OTM2RTY0MzZEOTFDMzE2Q0FENzkyOEZGQQorOjEwRDFDMDAwNTlCODdDMzJFNDI1NTUzNUYyNzMxOTU1MEQyMkVGMjdGNQorOjEwRDFEMDAwMjYyRjY2RjE3M0JCNUUwODAyNjgxNkVGRkMyRjE3RjI2QworOjEwRDFFMDAwRDFFOUQ2Q0QyRTg0Mjc4QzQ3Rjk0NDUzNDcyN0M4MzczOQorOjEwRDFGMDAwQkE1QTlFNTFDM0MzNzFGMzhDNEVFMzdGMDA4MUNDQjYwMworOjEwRDIwMDAwMThGMzMzRDkxNjJFQTcwMEVCODVGRTM4RjE0Q0NENUUwRQorOjEwRDIxMDAwNTlGQ0VDRTc0RjYyREVFQjk5MUQ5RjNEODlGMzVFRjIwRQorOjEwRDIyMDAwQkYyRTNFODk3OTFCNkNCN0NEOERGNjQzRjVENjc3Mjg5NgorOjEwRDIzMDAwN0Y1MEVCNTc2QjExRkVDRjMzRkY0NTc5OTdFN0RFQjc5MQorOjEwRDI0MDAwOTBGRDc3NkVEN0M5REU2ODFGOUNEQkZFNTUwNkU2NTM1RQorOjEwRDI1MDAwM0VCMDZCM0NDNTFGMUU3OEJFQjQzQjhCRTNERjZBMjUzNgorOjEwRDI2MDAwRDI2NUU4MUFGMjNFNjNGMUIwQkY1MTBFM0I2MDlFNjc5MworOjEwRDI3MDAwOEY1QTg4QkYzQkYyQzUxQTJBNzlGRTlENDdFNDg5NkQxMworOjEwRDI4MDAwOEI5RjU3QUJFNTM3NTUzNTRFOUYzQTBFRTU1QjIzRDc1RAorOjEwRDI5MDAwRTMxREY5NEU1N0NCMEY3QjFCRjA3OUZEMzVFMDZEOUJGRAorOjEwRDJBMDAwQzhGRjhCQzFEQjU5RkMwRkMwQ0YyRjJDQzZGQ0IwQ0YwMQorOjEwRDJCMDAwMUJFRjdERUFEN0Y4QUUzMUZFNzkzMjhEOEZBRjA2MkZBNgorOjEwRDJDMDAwMkQ2Rjc3OUVDNTE3QjIyMERGRUNGODBERTVFMTIxQkU4QQorOjEwRDJEMDAwQ0EzREE4RTczRkVGOEQ3MUNCNEZENTA4QzUwMzIzQkJFRgorOjEwRDJFMDAwMkM2RUNDREI1QUI0RUIzREUyOEY3M0NGMUZBMUJDNTg0MAorOjEwRDJGMDAwMjZGMjY3Q0ZCMThFMUZDRjc3MTQzMTg5RUE0RDRFOUU0QgorOjEwRDMwMDAwNTcyNkUwOEU3OTY3MUUxNzNEMTdGOTY1OUM2RUI1QkNGMAorOjEwRDMxMDAwQjM0NEY5NjZFRjU4NzJDNUI5MEI5RTE3NTdFOTY5MzVFMgorOjEwRDMyMDAwMjNGQ0Y1Nzk2OEQyNjhDNEQzMzE0M0ZFOUVCNkVFRDhBQgorOjEwRDMzMDAwRjFEQzA4ODc1MUZBQkNDOTQ0Rjk3Q0MyMUVFRkMwMTM2NgorOjEwRDM0MDAwOTdDM0U3MzY4ODNDQ0E4RUZDNDhDNjdBMTY2MEJFMEY4MworOjEwRDM1MDAwRDc3N0Q1MjFFOTNEMTY4NzFGQjVCQ0M5RDY1ODdFMENCNQorOjEwRDM2MDAwNUQ1QkJFRTRENUU3RkI4RkMxNjNCRjg1Qzc5RjM0Qjg2MworOjEwRDM3MDAwOUNCOTFDNUYxRTdGMjZGODFCRkM5MkQzMTZEREI5OTQ2NgorOjEwRDM4MDAwMzlDMjJGRDFGMkM4QjRGOUQ2MzU3MEJEN0I2NjBCQjc2MAorOjEwRDM5MDAwMEI2M0Y5Qjk0QUM0REI2M0JGRjM5NUY4NEU1NUQzREU4RQorOjEwRDNBMDAwQTEyODc3Q0VFQzdCNDlEMDFCQTdFN0FBNkRDN0NDNDE1QgorOjEwRDNCMDAwMjE5RjQzN0FGOThDRTNDNTkxMjdCMjk1OEYwNzdFNkM0NAorOjEwRDNDMDAwRENGMUFBQjc5RDhGM0JERTY5QzU3NzNCQ0VGRjc0MkI5RQorOjEwRDNEMDAwQjczMzRFMzdDODEzNDM3MUM2M0YyQkY0NEZDN0JBOURCRQorOjEwRDNFMDAwNjZGMkFCNjQ5NzlERTRDRjAzQ0VEMTQ3OTNCQjYxNjlFRQorOjEwRDNGMDAwQTZGQzg1OTVDQjQ1QkVDMzBGQkM5OTA4RTc5NUNFOUI4RgorOjEwRDQwMDAwMTlDRTY3MzVDMjQ3RTc2N0FBRUUwMDQzM0I0N0NERjQyNAorOjEwRDQxMDAwOEY0MEZGNDk5QkFGRjZERURDQ0RDNDQyN0FGQzJCQzFDNgorOjEwRDQyMDAwOUUxODc3OUQ5MkZCQTU4MkZBQTU3NTk5RjE1QzQ3QUI5MgorOjEwRDQzMDAwRTIzRTkwMDZFM0I1OTY0OTVFQjQ2N0JCRDI5OTcxRkNCMworOjEwRDQ0MDAwNUI3Q0IyMjExRTg2QjE2NzVDRDcwNUFGODlGMEU5MzRGOQorOjEwRDQ1MDAwODVEREQwODQzOTZEQUQ5OUU0Qzg3OTk4NDdDOUEwOTQyOQorOjEwRDQ2MDAwNkVEQURGN0U2NEQ5OTY1RTc4Q0VDQUM1QkMxMkJFNzcwRQorOjEwRDQ3MDAwN0EzQkNFQjdEMDc4QzkyQzM2Q0Y5QUJERERCNzkwODkyQworOjEwRDQ4MDAwMjNDMEY4REVCRDE3RTMxMkY2MDE2QzAwOUVERjcxMzM5NgorOjEwRDQ5MDAwQkIxN0VGNTc3ODRDOUM3QjVDRUIwQzkwQkU0REM4MzdBQworOjEwRDRBMDAwNUU3RUVFNDU4QjEzMjU4RjU2MENFNzYyNTI3Q0M2N0E2MgorOjEwRDRCMDAwNUFDQzM5NDg0RDVFRDMxMTNBODBGRjA0NzFFRjQzQ0EwQworOjEwRDRDMDAwNzhCRTdFOEM1N0Y1Q0JFODlDNkY0QTNBRjM4NkYxRkQyNworOjEwRDREMDAwNjQwN0U1MzMzQjFDN0M3RURBN0M2MTNFMjQwRjAwNEMwNAorOjEwRDRFMDAwN0MzRUY5NkQ0MUI0QzM2MTVFMzE3Q0NDRThEQzEzQ0M4OQorOjEwRDRGMDAwRUY3OENDRkMwQzc2REMxRDU2QTExRjE0QTZBMDFDNzE4NQorOjEwRDUwMDAwNTg1Qjk5ODBGMzA1NjM5RTY5OTA2MURFNDE3MjA3NUMwOAorOjEwRDUxMDAwRTEzRDhDOTMyMzREQjU2MERFODIxQkJERTAzQ0ZBNUU5RAorOjEwRDUyMDAwNENCRjlFNkVGRDc5QjFFQjg1REUyOENBNjRGOTc0QUVGRQorOjEwRDUzMDAwQjBCOTFCQzlBRERDREExMjc2MDJFQTUyM0RBNzhGQkU0NAorOjEwRDU0MDAwNkIxOUQxN0RERjg4Qzg2MzU5NjUyNzdCNENCQjc3NDA1OQorOjEwRDU1MDAwNTI1ODUwMkRFOEE0Mzc4MEM4MEEzQzE3QUFBQzAxOUE0QgorOjEwRDU2MDAwODE3RUNEOTExMkQzQkQwMEQ0MDY3QzA1RTNERjZCRjUzRgorOjEwRDU3MDAwM0Q2ODg1NzY3NUI3MDQzMjREQzM3MDM5QzVBQjVBOEE5QworOjEwRDU4MDAwRTgxNEVGNDA4QzMwOTk5NkZCNUEwRUY2MjI1MUMzRDgxRQorOjEwRDU5MDAwMERGOERFRDc4MkI0NUFBRkQ1NDEyMEUyN0QwQkY1RjYwNworOjEwRDVBMDAwOEVCQUNGMEE3MkIyM0U5N0Q3NTdBRUYxQUQ1QTAzRTNBNworOjEwRDVCMDAwQzk0RUZGNEEyQkYyQjFENTNEODhGNjJGQzJENzc2RUU4MQorOjEwRDVDMDAwNUQ5QkU3ODA0REUxNTIzQjRDRTJFNjA4MDAxNEYwREY0MgorOjEwRDVEMDAwMEY3OTkwRUNFNDU2MzMxMkM5NjY4NzU2MEY5MzFERUQxMAorOjEwRDVFMDAwNkYzQzQyN0U3OTY1QzMxMTdBNkZDMjNBOTQ3REQyQzI5NAorOjEwRDVGMDAwQTVEOUIwQ0U4REQ2NUJDQTMyMDdDMjc4OEQ3MzMzNERCNAorOjEwRDYwMDAwMjBBMjdGNjNCREE1NDU0OUQ3QzNFMTU2MDMxQzk0MTVFRAorOjEwRDYxMDAwRDM1QjBFOEVEM0MzNjE3QTBCRUFFQjZCODVDMzZGRDZGNworOjEwRDYyMDAwNEM1RkI1QTZFN0I1QUYzQkNCRTZERjhBNzg5OTU0NkM4MworOjEwRDYzMDAwMjIzOTM1RUFBODgzRkMzNUY4RDkyODNFMjVDNkQ5OTA4OQorOjEwRDY0MDAwRTBEQ0EzNjY4RjZCRUQzNDNBNEE0NDI3NzlDQzNEODgwMQorOjEwRDY1MDAwRUIxNzIzQkRENDYzN0UzN0M2RUYwMjAxNkZEOUYwNEVCRQorOjEwRDY2MDAwM0E2NUVFQzA3MDNDOUY5RTY1QkIzQjZDRDVDNUY1MjYwOAorOjEwRDY3MDAwMTUyRjk1NzM2MTNFOTQzMzAzQ0ZEMzZCODNCNkZFNDA3MQorOjEwRDY4MDAwQTdFOTNFMTNFNTIzNjdEOTAyMDc3MDVEQUU5OTkxMzA5MworOjEwRDY5MDAwRTZFQThDNjI4MUZCQTVCQzRFN0FEN0JFNTNCNzhCRkIwMgorOjEwRDZBMDAwQTk3NTczNERBMTE1MjQwRkRBMjQ1Qzc3MjdERURCNjJBMAorOjEwRDZCMDAwRjAxRUUxNzg2RjNBNDY3OEFGNkEzRUM2RjFERUI0QkM0MAorOjEwRDZDMDAwQzQyRUY2MzdEMDBGQUM2NzkxNjE4OENGMEZENjU0OTYzMQorOjEwRDZEMDAwMjk0MEQ3N0Q5MjIyNzU0ODBGMkE1QjVDNTY2RTIzQjg4RAorOjEwRDZFMDAwQkY4RkVCRTkwMjc3MzEzRjBERkU4OUYwNTY3RjMwRjdBRgorOjEwRDZGMDAwNDdGOUU4MjcxRDMyRDE3RTg2MDZBRjhFNzYzNjlFNzdCMworOjEwRDcwMDAwQjdDNzFFRjgwQjdFQTc3QTc0REJBQjI4REU3NzFDN0NDQworOjEwRDcxMDAwOEJGNkQ1NUQ4N0E2RURDNUZFQUUxOTgwMDk0RkU3Nzc3QworOjEwRDcyMDAwRUIwRkFEMjg0MUZBQUY4RjUwNTgwREU0NEMyNDg4NzZBQQorOjEwRDczMDAwNDc2Mjc4NzBCRUU4ODA0N0UzMzE4MjhGMDlFQkYwN0M2NgorOjEwRDc0MDAwQUIzODk3NTJENDI0Rjk1MEVGRjY0OTAyQkIwNENBQUY2NAorOjEwRDc1MDAwQUNEQzJGNzREQTY0NUE4RkQzQzZGNTdCRkFBMTdEMzIyNAorOjEwRDc2MDAwRkExOTQ1QUI0Q0Q0M0UxRENCN0NGREZBNTc4OTdFOEExNQorOjEwRDc3MDAwMjFDRjRDQzNBNzQ2NDc0MDM4NDlCN0MwOUNDNzI0MDdCMAorOjEwRDc4MDAwQ0NCNjkxN0FCQTQ5NERDQTg1RjdBMzVBRUVCRTFGRjVCOQorOjEwRDc5MDAwOUJENkVGMjdDQjk4RjcxRURERjk3MkEwOUYxMzA2N0E3MAorOjEwRDdBMDAwMUJBMkRBMTA2RTVBN0JBNDRCN0Y5QzdCMTdBMDVGMzdCRAorOjEwRDdCMDAwNUIzQUZGMEVDNjU1QjdCNzJDOTVFOTlDRTIzNUUyQjU0QQorOjEwRDdDMDAwRDBDMjZBNzBGRTg1NDlBQzY2MDdGNDJGNEM4NjEyRUIxNgorOjEwRDdEMDAwNjlBMkRFNURENEIzNDVEOTQ3M0MxRkNDRUI3OTFGN0FGMworOjEwRDdFMDAwNEQ5MjAzRTMzNDNDNkUzOEQ0MjZGNjczMTVGNzIwRTRFQgorOjEwRDdGMDAwQTNBMTM2MUUxRjJGQ0FCNDkzRkNEN0Y4NTUwMTcwRTJCRgorOjEwRDgwMDAwN0VBMzIyRjYxRDczMjNCOTI2QzRBM0M2QkY0QUM0MTQzRgorOjEwRDgxMDAwNzY4MjFFQ0M1NTNDMjZEQzdGN0U3RDE5QzA0MTQ5MkM4QQorOjEwRDgyMDAwNUY2RTFFQzhDRjhGQzUzRTFGNkIzMzE5Q0U4M0ZCM0E4OAorOjEwRDgzMDAwQ0Y3NzhFNDUzQzU1NUFEQjdFMzIwRERFNTYwREJDNDgwNworOjEwRDg0MDAwRkIzRjJCOTJBQUM2NUVFOTFDNzhFQzNDNUVCRkZDQkI5QQorOjEwRDg1MDAwMjRBNEFGRTZBODI1RUU3OTkxMDdDNEZBMEYyRTlCNDlDMAorOjEwRDg2MDAwRkQxRUQ2Q0U4MzA4QkJFNTVCMjQ5QUEwRUNDQkUzNDczNAorOjEwRDg3MDAwODU5NkEwOTI4QUZBMkY4OUM3M0IwQTkzQjg3RTY0REQwOQorOjEwRDg4MDAwNzNFODlFOEM0MkVDOEJDMkZBQkE0MTk0Qjc1Mjk4MTY1OAorOjEwRDg5MDAwMkFBN0ZBRTAzQ0M2RjMzRTc1Rjk4NTE2RDY2MTVGMTFGQQorOjEwRDhBMDAwQ0E3MzExOUY4MTk1NzhBRTg2QzkzOTM0RkU4RENDNjhENAorOjEwRDhCMDAwNEYxNTY2RDdFQ0E3Rjc5NjFDREE4NzYyNTE2RURGNjhDMgorOjEwRDhDMDAwRjZEMDc4QjFCRjUyRDhBN0JFOENFNjk5Q0NDNzI5NjZFRQorOjEwRDhEMDAwQzZGM0MzODVENzA1MTVCQ0U3ODJFNUU1RDBCQzRBQURFNAorOjEwRDhFMDAwMzFFRjA3RjNGQjQ1QjQ3NThDRUY2MjQ3RDU3QkYxOUVCMgorOjEwRDhGMDAwOTE0OTAzRTY3QUNCQzRGMzhCRjA2RjFGMEI5QjczNEJGQworOjEwRDkwMDAwN0VBNzdDQkZDOTczODdCN0NDNjA3RkQ0N0I5MTBGREZDNAorOjEwRDkxMDAwRjg1QTlFMTM2RjFGRkNCMEUwRkI4M0NCRkM1RURDNkZGQworOjEwRDkyMDAwN0NDRTA2RjgwMEJGQkJDNDIzQUQ3MjdBQUUwRUJGNThFMgorOjEwRDkzMDAwQkNDNUMyRUY1QkNERjNDOTdFOEI4NTVCRjE4N0RFQjJFMAorOjEwRDk0MDAwNTQ0RjU3MzhDNUMyNjUzQ0FCMUY0MEY3RDcwODM4Qzc5RQorOjEwRDk1MDAwQzJFNTc1MkJBNzg3RDdGMzJEMjFGNDJGNUU1NzAwQ0U5NAorOjEwRDk2MDAwODBBRkQ3M0QxMkY5MUI4NUUyN0UwRDIwNzI0RTJGMUEzMworOjEwRDk3MDAwRkQyNEU1NzA3QTQ5MzZDMjNEMTZCRUIxRjBENEU0QzA0QworOjEwRDk4MDAwQUIwODJGQ0EyRkYxOTU4RkNGRTg1QzdGNjFGNzlBOTY4RAorOjEwRDk5MDAwMTQxREJENjhFQjJGQ0MxNjc0QkFBNzNGOUY4NzI2Mzc5RQorOjEwRDlBMDAwQUUxMzcyNDRDODBGQ0Q1RTFFMkZDNjAzN0I5OUVDRTEwNworOjEwRDlCMDAwRDI3NDI3QzU2NTRCMkJGOTM4QTVGRDFDMUIzMUJGODFERgorOjEwRDlDMDAwODU2RkE0N0NEOTQyMjY3RTUxNkVERjgyM0RDQUU5QjNDMQorOjEwRDlEMDAwNzlDMjI5RjRBRkZCNTgwMkFCOUMxODg3OTA1MjY4NUY1QworOjEwRDlFMDAwMDlFMDdFM0MwNkVFQzc4RDcwMzdEQUM5QjE3MDc4MEU1QgorOjEwRDlGMDAwRkY2MzRDNTc3ODY5RjRENjYyMTM3Njc1MEZENjEzRUQzMgorOjEwREEwMDAwREVBMTJGOEQ0ODQ2RjlDRDlBNTNFM0ZBRTlBMzhFRkFBOQorOjEwREExMDAwM0JDNjExNzQ0Qjc0MjlCMTQwQzc3MzM3RDA0MUQzODBEMgorOjEwREEyMDAwRDU4RkExMzkzM0Q2NUEyRjIzRkQ4RDY1QkUzNEJDQ0Y5NworOjEwREEzMDAwMDQ5MzY0NzE5RURBQkM4NjRCRkU3NzUwOUU4RDY5OUI4MQorOjEwREE0MDAwOThBNkJGREY0NEZCQkUwNkU3NzEwMkNFRTM1ODcwMkZGNQorOjEwREE1MDAwQzY1MUM2MzFFNUFGRkE3ODgzMzZERTlGNkMyMkRFOTA4MAorOjEwREE2MDAwQ0RCMjcxM0Q0NUI4Mzk5MERFMzk5RUI2QkUzRTc5MkNCNworOjEwREE3MDAwNENGN0RGNDg1NjNBQTcwN0ZGMEI5QTUzM0JCRkE3RTU4MQorOjEwREE4MDAwM0Y0RjcyNEVGQkQ0NDY3MkI4ODZGMTNDOUYzMDIxQjFCNQorOjEwREE5MDAwNDhCQzJGMTJGNzhDQjE4ODkyRTg1RTI5RjY0RDUyRTcwOAorOjEwREFBMDAwRkNCRUIwNDkwQUREOTMyMUU2Nzc3NjhCMzU4OEY5NDZDRQorOjEwREFCMDAwMEY0OTgxNEJGODlEMzNEMkExQTFDNEFGNEFCODNGRERENQorOjEwREFDMDAwMzMxMUYzRkU2MjUzNEIxNUJFODc3NkYzQTk5RDU4RDdFOQorOjEwREFEMDAwNjI5OUM3NzkyM0JCMkM3NDlGNEY0MkZCRDMwQUFBNEI5MAorOjEwREFFMDAwMjcwNzhBRUM1QzhFOENDNzc4NUYxRUM5MEIwNUNCRERERgorOjEwREFGMDAwRTc3OURFNzg3MTUzODE4MkRGMzk3MDgxRTc1OTk3MzA5OQorOjEwREIwMDAwOUY4MjdFRDc4RDUxQTNCRjc2NTUzQTc1QzdDNjZGQzQyNQorOjEwREIxMDAwQkQ0NDRBQTQzN0MyNTVCM0NCRjJFRDgxRUU3NkMwRDdFRgorOjEwREIyMDAwMkEyMURGOUFDRjRGRjAyMEJFMzYwRTE4NzlGMzc0NjhBMQorOjEwREIzMDAwOTIzQjcwRjgzNDM0MkI0Q0Q2NTYxNUY1REQ1RDgyQUUzMQorOjEwREI0MDAwNDYyMzVENDk2NEY1Njg3NEU1QjFBMzFEQkQyNjg2QUUyNAorOjEwREI1MDAwRENBOTA2M0Y2RTE2MEJEMzgxQzdBMjFBRjU5MkMxMUYyRQorOjEwREI2MDAwMTQ3NjQ4QUM3RERFNjk5N0Q3QzdGNUU3NTgwQjM4QTgxRgorOjEwREI3MDAwNDAzRkIzMDU3QzU3QTU5ODgzMjhCNzk0RkI3OEJFQ0Y2OAorOjEwREI4MDAwNUQ4Q0Y1QzYzQ0EwQkI2QTU0ODNGRjM5M0I0NTIxRkM0NAorOjEwREI5MDAwQ0Q1RTZFQTMzQzRGQkMzNzZBMkVENDAzRjA5Q0NFMzVDRAorOjEwREJBMDAwMENFMEY3NDg3NUUwQjM1NkQ3MUZFOUMwOTE0MTc0M0JDQworOjEwREJCMDAwNUJFQzg3RkY0OUUyN0VGOEVDOTQ0RkQyQzk2OTBGQUE2QgorOjEwREJDMDAwMTdGNEY0MTlGQkZEODRFM0M2RjQ1QjI1RjE3OENFMkE0MworOjEwREJEMDAwRDU5N0U5RDVEOTFCMTNFRERDN0VCQUUwMkU1QjY3QkE4OQorOjEwREJFMDAwQzJGRDA2MDE2QjhGN0M0NTc3MUY1MDVCOEE3NTY2QkM1MgorOjEwREJGMDAwN0IyNEI0RjEzNDdCQUYyOEMwRkRGMDQ0RTNGNjhEOTQ3MAorOjEwREMwMDAwOTExRDY2RkE3OTU4NDZGQkJBNkY4NDkxM0Q1QzE0RjExOAorOjEwREMxMDAwOTlFNjE5RUM3MkVFOEY3NkIxQ0JGMTNFMDNBODJGNjkyRAorOjEwREMyMDAwRENDQkVERjI4NkU1NjRERjJGMDFGQjFFRTVGOTA2RENCNworOjEwREMzMDAwRjNFQ0MxRjg4NEYyQzk1RUVGRjAyQjMxQkZBNUE4NDEyNworOjEwREM0MDAwRUFGMDNCMTVDMDdCNUUzRDZGQkZFQTkxNzFFQUMzMEEwMworOjEwREM1MDAwRkE4NTgxNENENThCRTE4MTkyRDU1NkYwNzNFQTcyOThBMgorOjEwREM2MDAwOEQ4MTlGQjNDMjVFMzI3RTJERkFBNUE5M0U4OUE1NTA1MworOjEwREM3MDAwN0RCNTIzRUJEQUZERDg1NUY2RTJENUU4QzcyNkYyMjdDNQorOjEwREM4MDAwQUJFRDFFODI1RjIyN0Y1Mjc2RkE1N0Q5NzU3MTAwOTBGNAorOjEwREM5MDAwOEI3MUVEOEY0OUNFOTIzNUQ4NEU5MzE3MEY5QkMyNzk3OQorOjEwRENBMDAwM0ZFRDQ2Rjk0MTk0NUY3MTczRURERDY0RUY0RkFFQUQyQQorOjEwRENCMDAwRjBFMjk1NkVFREZCMkVGN0M3RkM4QTIyODFFRjVGRDg2QworOjEwRENDMDAwQjkzRDU5OURDNEVENDg0OTBBRkMwMkY5QjM3NUMwRDM2QQorOjEwRENEMDAwNkIwQjgwM0Y2NjM1RjFCQzBEREI3NTk3N0JEMzdENDBDOAorOjEwRENFMDAwMjM5RkZFNzkwMThDRkY1MTQ0QTFGODQyQjM5M0M3OUI1NworOjEwRENGMDAwM0Y2MjEyRDlBQjQ1NDcyQ0ZFNDZDMEMzNjU5MDUwNzZCMworOjEwREQwMDAwOURERjcyOTk5NTUxOURGNUNDMzA5QzBGRkU4OEVEQ0QyRAorOjEwREQxMDAwRkIyOTdDMjc1OEMzRjM5NDJFRDRFNDI0MjNERTlCNTU5RgorOjEwREQyMDAwNjNGQzc3QUI5REU3Qjc2RDE1RjQzNzBCRUY4RDFDOEU1OQorOjEwREQzMDAwRURDMkQ5Nzg3RkNCMkMyNUFDNTI3RTQ2RDRDQ0VGMzlCRQorOjEwREQ0MDAwODQ3OUUwN0M5QTZEQzY3MTc2REFCOURGQjVEM0NFRUQxMQorOjEwREQ1MDAwRjg1OUUyREVDOTY2NUJFQzM4MEExRjVGREMzMzE3MEI0QgorOjEwREQ2MDAwRjczNDdCRTk4QkI4OUVDQkNDRDc0NDc4MDI3OTg1N0E5RgorOjEwREQ3MDAwQTE2ODQ0Q0I1MUI0MTdBRUFFN0Y3QzEyRUE5RkVBQ0JDOAorOjEwREQ4MDAwNTJCODBGQzZBNzFCNTVGMkRGQ0Y4ODczRTI2NzFCRjdBNworOjEwREQ5MDAwNjdEQzBENjVFNUY2M0ZCOEQwREY3QjRERTBFOUFDRDIzRQorOjEwRERBMDAwNEFGN0JDMkM3OTVFQTY3QjBBRTBCQjE5REZBMUZFRjMyMworOjEwRERCMDAwMEFGOTM5MkI3RTRFNDhEM0NCMDU1RkVGQ0ZGNkYzRTA1RgorOjEwRERDMDAwMjA5REZCRDFFQ0NFNzFENjYwMDhFN0Q3QkM1QzI2QjlBQworOjEwREREMDAwMDE3QURCNzBFRkNGOERFMkRFOUY1ODdCRjQ2M0JCMTZEOAorOjEwRERFMDAwNjdDRUEwQkM5RjA3RENGQzNCODlGOEJGMjg5QUNBNDJEQgorOjEwRERGMDAwM0FGOTUwQTQ4NDY1OUM3RjUxMzQ4Mzg1MDBCRTY3MEYzNworOjEwREUwMDAwRTYzRTU2OEVGNENBNTQ2RjNGMUM1NjYxMkQ2NDBGOEI0QworOjEwREUxMDAwRkQxQkY4QjVFMEZENzRCQjQ1NjU0RkUzQzVFOTYzODlCQgorOjEwREUyMDAwRjlEQ0FCMDY0MzlCNkY4NTAzRERDODNFQzYxMDY4NjExNQorOjEwREUzMDAwQTdERDc3NjNENDE4NTc4REI1OTM0QjlBODdBRDQyOTM3RQorOjEwREU0MDAwRjIwQzNFNDBGQThCRjA3QjkxQkFEOENGOTEwOTcxRUQ3QworOjEwREU1MDAwNjZDNjFFMjUzODE0M0M5RjM3MDlFRjdCMjk3OENERTQzMAorOjEwREU2MDAwQzZFRkVFNDFCRUM2Nzg3RUUzNDVCQThGQTQ4QTg1NkZDMQorOjEwREU3MDAwQzNGNzU1OERCMjNCQ0NBRTE0Q0Y1QUY1QzY4RDMwOEY1QgorOjEwREU4MDAwM0QxMUM1ODNGQ0JGMjdEMjYyMUQ0QTc1MTNDNTMxOEE3NworOjEwREU5MDAwMEUxNzBENDZCRTZEOEUyODE0RkYyRjNBREY5MjM0MkZEOQorOjEwREVBMDAwQkZEMzdFNjlCRTZDQTJFNzdCMkVFRkEzRTdEQUI4Q0RDNQorOjEwREVCMDAwOTFENEMxQTg4RkI3OUJCODNGRERGMkVBQTUyNDk0QTdGRgorOjEwREVDMDAwN0IyRTVGNDhFM0Y3MEYyREQ3RUUwNThBQjU5QjA5MkUxMQorOjEwREVEMDAwQTU0RUI5MjNDRUFDQjdEMzk5NUNGNDM2RTYyQjhENEY2MworOjEwREVFMDAwNTY5OTRDNzhFMEZFNjYxN0ZCRTM0M0I2Q0FDOUJBREEyNgorOjEwREVGMDAwMjEyNTY4RDdDODcxRUM5MTRFNzgxQkVDRTdGRTQ5QzIyQQorOjEwREYwMDAwN0VFQ0M1MEFGMDNFQjdBNkNCNjk4QkU5NUM2NzczOTJERAorOjEwREYxMDAwN0IwNUM1OURCOEZERDBERTcyRkE2NzkzRjBGOTIxOTlCMworOjEwREYyMDAwOUZFQkJGMkMxMzNGRUREQkJEQjg0RjlCNDMwRkVGM0E4OAorOjEwREYzMDAwQzJERjE3NTlFN0NGQkQwMkVEQkYzODYwQTc3ODM5NTM2QworOjEwREY0MDAwQkM4M0UzQzU0NTNBRTNDNEUxMUU3QzdGMkJEODgzREY2NQorOjEwREY1MDAwM0ZDM0UzMDBERkVBOEMwMzE0MjU4REU0RjczN0ExNUFCMQorOjEwREY2MDAwRUFCRkZFOTgxOUUzMjg3QkVDRkU2RjI1MTFERjM0MjQwRAorOjEwREY3MDAwQTE5Q0E4QjA3M0I5MTQ2NDI1RDk2MDI0QjFFNzBGOUFBNQorOjEwREY4MDAwNEE5MDRFNDYyQ0Y3MTBCRUI3QUE2MDRBMjE1RjZDRTY1NQorOjEwREY5MDAwN0VGQjU2M0MwNzBBRTMyQzZDQTgzN0U3RThGMEJCNTA0MQorOjEwREZBMDAwRUMzNzdEQUEwNjdCQTdFQTlFRkYzRTg5RkJBNTlGMUU1NAorOjEwREZCMDAwNThGNDE0RTUyM0JDNkY2MUZERTJEODlGQTEyNDJFMDcxRAorOjEwREZDMDAwNzc5QTgzOTNCNjYxQkJFMzI2M0FFN0QxRjJFQUNCQUYwNworOjEwREZEMDAwRjYwMEZDMkUzQ0VBMTk4NkYyN0Y1OTkyODdFMEQ1NzQ1MAorOjEwREZFMDAwNjg2QjVEMEY2OEQ3RjQyMTZBNDkzMEI5MzdDRDk1NEQxQworOjEwREZGMDAwRjBERDU3OTg4N0M3RjNERTM2RDE3QzNCRTI5RjYwMDdBMAorOjEwRTAwMDAwRTI3QTdGMjBFNkYzQ0E0MTkzNjFGRkVBMTUzQkQ3NkJDMgorOjEwRTAxMDAwOTU0OTJBQkQ5Rjk3QzRFMzY5M0IwRTk2QTQ2MUZFRTkyQQorOjEwRTAyMDAwMUU3QjYwM0VDMkIzRkE5M0I2M0E5N0E3MzNGRUE3RDlEOAorOjEwRTAzMDAwODE2M0RFREUzMTY5MDhGQ0U3OTgzMzI2MzdBMkNGRjMyRgorOjEwRTA0MDAwRjY0NjE5RDdFQkY5OTRCMTE0QTk2QjdDMEFDNkFCNDExQgorOjEwRTA1MDAwM0M2OEUzQkQ3Mjg2OEYwN0YzRDg4N0ZDMTY1OUNFREM4NworOjEwRTA2MDAwOTQ5N0M5RkMzRkNBODdGQTJCQUQ0QTJBRTYyRDZEMTU1NQorOjEwRTA3MDAwRkJBQTFBMUVCNEY1NjhGM0YwMzQzMERGMDYwN0IxODY0OAorOjEwRTA4MDAwNkZDNzk1RTJDQzIyM0Y3MkI4OTA5QjVGREI3REMxMjRDNQorOjEwRTA5MDAwMUUwNzI0N0JGQkQzMDM3NkIyQkI3NjhBNzgzNUNCOUNGNAorOjEwRTBBMDAwREIwN0UxQTdFMTY5QkQyODYzRTc5M0U4RkI4RjI3NzFGMAorOjEwRTBCMDAwQkRBMTk1NUI1NTRGOTBFOEUxNzlBRTZGQjczQUMzRDZGNQorOjEwRTBDMDAwM0M5NDdGMkZFNTUxREQxMzBDMjYwREM1M0NBOEE2N0VBMAorOjEwRTBEMDAwNUVEQ0VGQzNGQ0NGMjRERDNFRUIzODQxRTc5RTg2ODg1MworOjEwRTBFMDAwMzk0Nzg3ODdDNDcyOERDM0JEODM3RTk0MDZBMkFCQTZEMQorOjEwRTBGMDAwQTM4Q0Y4NkREMTk2RkI3ODdDMTFFNDgxQjhDRjg5RjZCQQorOjEwRTEwMDAwOEY5MTJGQzQzRTcyOTZDNDRCMTdGMkM5OThFNjBEMkIxRgorOjEwRTExMDAwQjMzRDc0QkU4MEY2NkQzNTM4Nzg5MDJGQTBEQzJERjBCRAorOjEwRTEyMDAwODI3MEMxRjcyRjg5NzU2QkVGNUYxNEYwMUIyRkU3MjcwMworOjEwRTEzMDAwRUJGMzExNjNDQjNEQ0IzMjI5QTZBOEQ1NUYxMkYzNUY3OQorOjEwRTE0MDAwQzgxRTI1M0I3NEUxRTU3QUIyNEYzRDM1QkM1Q0Y4MDA1MgorOjEwRTE1MDAwMkZGQkFGOUY2QkM2RjhFRkMyNzVGMUVGQUQxQjk1QzRGNworOjEwRTE2MDAwRUQ5N0IzODIwRjk4QzlERTAzRjMzOTNBRjQ2MzEyRDdGRgorOjEwRTE3MDAwQUZBNzFBMUZEQjlGNERGQTI0RjAyQUQyQzcwRDREOEY4RgorOjEwRTE4MDAwRkUxMkMxQTREMUZGQTk0RDJBRjVEN0U0ODhENkZGMEQxMAorOjEwRTE5MDAwMzFGRUYzNkY3M0ZFMTlCMzQ5MkRDMTdCOENDNjA0OTkxMAorOjEwRTFBMDAwMUJFM0U0QUY2Q0RBMkNBMzVDN0YwNUY5MjM4N0NCMEQ2RQorOjEwRTFCMDAwRDRDNzlGMUU3ODI0RTkyMUE0ODM2MzI2ODZGMUY4OURBNQorOjEwRTFDMDAwNjY1NkIxNUQ4N0RGOTYwRDJGMUFFNEMxQTIyRENCMjdDRAorOjEwRTFEMDAwRTEzOEEzREE1MjI1OTRGRjlBMUNEMEYwQkREM0VDQkRGMAorOjEwRTFFMDAwODlFNEM5OTQxODc5NTJDNkZCNDcwNTNDMUYxM0YyRTQzMQorOjEwRTFGMDAwQjE4OTIwNEZFMDUxQ0FBNjE0MDlDN0Q5Njk4RTdGQUZGMworOjEwRTIwMDAwRDU2NzFBREYwOTdBMUNEQjI5NzczRkUzNzJCN0NEOTUxMgorOjEwRTIxMDAwMDdFMzU0NERCRTQwRjFENzhFRUYwOEJBN0JBQzRDQTM1OAorOjEwRTIyMDAwQkIxQzA5RTEwOEY2QkNBOTJGQUUxQkUwODNGNDBGRjY3NgorOjEwRTIzMDAwRkM5QzY5RjlDNEE1MDcxNURBRjcxMUZCNDgyMjZGODIyNworOjEwRTI0MDAwMzg0Q0M3QkY5QTlDRkJEQTFFRjgxQkYyNDk2MTU5Q0RDNgorOjEwRTI1MDAwNEFGNDMzRDJDQTgzNDREN0E3QTQ0MDlGNTREMDU3QTdDNworOjEwRTI2MDAwOTBBRkUzQzg4NUUzNjIzRDVGQTg4MTNFRUUzOEVGM0JBNworOjEwRTI3MDAwRjk4OEY1NDAzRUE4NjAwMTEzQUU4M0FEOTdEQ0ZBRjM1MAorOjEwRTI4MDAwMEY5RUY1OUNERTUyMUM5MjIxN0Y1Q0FCNkJGMEJBOTEyNQorOjEwRTI5MDAwNzVEQzMzOThFMjQ4MjczRDY1QzZCQ0NBRkUyMUFFQTdBRgorOjEwRTJBMDAwOTg1NDQyRjRDODRDMzdGNzQwN0UzQkE1MzJBMjlGNTNBNgorOjEwRTJCMDAwMjAxNzExNkUwQkVENDYzRjQ0NUI1NzRGMDdFN0FCMkYxRQorOjEwRTJDMDAwNTJGODNBRkUyOEY4OEU3Q0RDOTFENDhFREI1OUM1MjZCNAorOjEwRTJEMDAwREE4NzQ1RkEyMDdBOUI5MjRBN0UwQTM4NDYwQUYxNzkxMworOjEwRTJFMDAwQzczRTQzNTg5NkI4M0M5MDcxMUU2RUY0REYyODBFQjRCQQorOjEwRTJGMDAwODFFNzg1NkREQjQwNzQ5MzMyRDE0REU3MTkxRTUzQkMyNQorOjEwRTMwMDAwQjYxNDVEMUNCNzY1RjNFM0U0MzcyMjNERTExQzEyRDE3RQorOjEwRTMxMDAwNjMwNUQyMjM4QjQzODcyMUEwNDNFODk3M0FCMTg2RjA2NworOjEwRTMyMDAwMDhGODFERTU4MDcxNTNDQTAyMzJEMjREMkM3RUI1RkQyRQorOjEwRTMzMDAwNDMwRDFFM0I2M0Y2MUJCRkU3RTA3QzM5NTE5NDlFMDRGRQorOjEwRTM0MDAwNzkyNzlEN0FDMjI4NkYwMTVGREZFNkY4RUFBNDZGQzRERgorOjEwRTM1MDAwOUJDNjZGQzMxRDU3QTZGMzkwODNERjA3NUVGN0QxM0NDMgorOjEwRTM2MDAwQ0FGN0QwRjY5OUI0N0Q2M0VERkI3NzA4N0E0OUI0NEZDQworOjEwRTM3MDAwOTQ2NTBCQ0M3NDE4RjZBMzk2RDI3RTk3QzYyN0RBREY4NQorOjEwRTM4MDAwQTU1OEJBOTlFN0JENkRDNzM3MDhGNzE2N0I0ODdGNUU3OQorOjEwRTM5MDAwQ0ZBRDMwMUZFMkIzQzI5MTQzREZEM0YwRUJBOTM1QjM2OQorOjEwRTNBMDAwQkVFMDJGN0M5MTMzQjcwNTVGN0RCQjM1NTgzRTA0RDY2OAorOjEwRTNCMDAwQjFERDFDOUMzMTk5RUM2RUVGNEQzOEZFNERFNTI2RjczMgorOjEwRTNDMDAwMjMxMkU2MEJCODI1OEM3NzEwODkyMzVGMUNFMkRGNjFFRQorOjEwRTNEMDAwMUVBRjYxREU0QjA1REMzNTNDNjk3MDQ4QTRBRjEyRTEyRAorOjEwRTNFMDAwMjcyNEUwOTMyRURFQzdGMjc1Qjk4M0YzNzNCRUUzNUE5OAorOjEwRTNGMDAwRjkzQTI4MjNEREJCNTg2MDA1REUzRkNEOEFCODFDRUExOAorOjEwRTQwMDAwRTBFQjIyNDZGQjg4NkJDNTc4REE3M0FEMUU4N0FGRDc4OQorOjEwRTQxMDAwM0E0NkVBRjg3QTc0OUI5MUFGQzFDMjE1RkE5NEY4MkI4OAorOjEwRTQyMDAwN0Q5M0NBRjM2ODA1OUY3RDYxRTNGM0ZEOTU4M0RCNjMwQworOjEwRTQzMDAwRTlBODNGMDA3RkU5NDFCRTlGQkE1NEQwMTk1MDEwRTVDQQorOjEwRTQ0MDAwRTVENTZGQjIzMEM0ODNDNkY3QUUxOUFDNDRDNTdENTk2QgorOjEwRTQ1MDAwRDQzN0Q4NkE0NkUwRTgzOERDOEZDRDM0N0I3MDdGRjg1QgorOjEwRTQ2MDAwOTQxQTIxM0M5RDAyMDdCNTlFRjBFOUE3M0M5MzUzMDdGRgorOjEwRTQ3MDAwNkVFMEYyNjA3Mjg3RkVGMUUxN0U0RkYwOEYzREY5N0UzMworOjEwRTQ4MDAwOEVEQzRDNzRCRDc0M0MyM0ZERDFCMjc5MTREMTQxNDU2RQorOjEwRTQ5MDAwNzlBRTg0NzRCNjY4NEI4QTg0RUY1M0NCREMyNjU5Mjc1NworOjEwRTRBMDAwMTc0N0Q1OUE1OERGRTE0NEI3Q0YzOTc0NzI3MTU0QjAyOQorOjEwRTRCMDAwNDY0NkI4RjQ0OTBCNjRBQTI5NjAzNzM4RTY0Q0QwQzcwMQorOjEwRTRDMDAwN0Y1RTgxQkEzRUZFMDNGNUJBQkYyN0ZFQjM3QkVENURFQQorOjEwRTREMDAwNzUxOEZGNjk0RkYyMzUyMzNFQjI2Q0ZFRERGOEZEQzJDMAorOjEwRTRFMDAwRUMxQTk5RTlFNEM1RDVFQ0E2NkExMTNGRkE3MEY1RUI5MAorOjEwRTRGMDAwOUJFN0MyQkE2NzNEMUM1OThENkZFNzYwN0M3NTAwRTZFQgorOjEwRTUwMDAwMDVGMEY4NkE3NUYzMTE4QUJCMzYwQjdFMUUyRUY5MEZFMworOjEwRTUxMDAwRTM3N0VGQUFCOUM5MTg2NzhENUNEQjc3QkIwOUJFNjVFNQorOjEwRTUyMDAwMUYzMjgyN0YzNzdGOEQ4Q0YxMDg0RDJFN0M4MDdGOEY0QworOjEwRTUzMDAwODFGQjhEMTJFRUFCNjlGQzgwNzIwNUVENEYyREJGMDFBMgorOjEwRTU0MDAwRTM1RUNFRDQ0RUI5OENGNTY0OUQ1RTVENUI2RThBN0JENgorOjEwRTU1MDAwNUZFRDY5ODdDM0EwQjczNDM5Qzg5QUZGRjZDMjQzREFDMgorOjEwRTU2MDAwQkQ5OTVDMkU5RTc2RThGNEZFNjNFNUM3RTkzQzMxMTM2NQorOjEwRTU3MDAwRjdEMEREMkY3Q0M4QTc1Njc4N0Y3RjVEQjdDRTczRUNEMAorOjEwRTU4MDAwQzMyQ0U2MjBFNjRGODJEQkVCNzFFQkYyNjFBNTY2MjkzNgorOjEwRTU5MDAwRUNDNDNDQ0I0QkU4QjkwMEZFMkU5OUE4N0NFQURGRkQyOQorOjEwRTVBMDAwMTM3M0QwOEY2RjMyNzlDMTEyQzAzQzA5QTI2MzZGMUYwMQorOjEwRTVCMDAwNDZFNzFFMUFDNDNFNkNGMTdFODc0RjFEODFGN0U2NUI2RAorOjEwRTVDMDAwNDlGRUI1RUZCNTA3OTFBRkRCOUQyNjhBMUZCN0VDQjJDOAorOjEwRTVEMDAwMTA1QzJGRjZCNTBCQkYzQTY0RjBCRkI1RkQwRDlCQTVERgorOjEwRTVFMDAwRURBRDIyRThCRkQxQzZDN0RERjg3MDdGQkE0RjIzRDFBOQorOjEwRTVGMDAwN0U3NzUxNkQyRUM1RjNCNEY4NjI2RUM0NjNFMjQ5NjE1MworOjEwRTYwMDAwN0M3QzI1QzI2ODVEREFGRUY3M0FDQ0JGMTg5MTM4RkZGMgorOjEwRTYxMDAwQTI5N0QzQUNGOTRCMTk0RUE0QzM5OTZEQUZFMkRDNjI1QgorOjEwRTYyMDAwRkRBRjhDNDNDN0Y3RTIzODE5QjUzQzJDQjBFRUQwNTJBMQorOjEwRTYzMDAwMDlEN0I3NkU1NjdDRkY0QkEzOUY3NTIyQ0VBNUNCNzMyRgorOjEwRTY0MDAwQzg3M0VBRjVDQURDRDRBNDVDOUREQ0Q0RkFGRDUyRTRCQworOjEwRTY1MDAwMzk4QzZBQjk3QjI3REE3N0MwRDc2OTRFMUQ1RjRGMUFBQworOjEwRTY2MDAwQjJEQTE2NkZCRkRENUZGQjEwQzUzRjEzRDFCRERGQzQ0QgorOjEwRTY3MDAwRUY1QjhBN0QzRURFMjlFQzE4MjVEMjgzRUNDMDNENUYzRQorOjEwRTY4MDAwRDgzRDcxRjIxRkZDQkI0Q0Y0Nzc0MUI0Nzg0Q0Q3RUYwNgorOjEwRTY5MDAwRkYzQkNERkY0NjY3QzdCRTVFOEY2QkQ5RDc4QjlENzc5QgorOjEwRTZBMDAwQUJDQTdBQzVEMzI3QjE3OTkzREFGN0UyRjRCRjRCN0ZDRgorOjEwRTZCMDAwRUY4MURGQ0MwMkRCMUQ1REZCNjlGNkFFNUZFMkY3NEU1QQorOjEwRTZDMDAwQjE4RjE4RTk1NThENEUwMEVFNzcyMEJFODYxRTlFMzcxRAorOjEwRTZEMDAwMUM0M0E5Q0M1QTIzQTMxQ0I4RDhENDkyOEQ3MUFBNDQ0OAorOjEwRTZFMDAwN0VBMTM2MUZGOEY1OEIxNzY3RjFFM0JENEE3MUQ2NzcyNworOjEwRTZGMDAwQkZDMDgzNUZFNUY2QTc1NDdDRTAzQjM4MkZGRjc5QjNCQQorOjEwRTcwMDAwQTQzRjg3MzFDNzI5MTlGODQ5OEI4MzM2OUY3Rjc3MzgxMworOjEwRTcxMDAwQzk0NzM1OUMxRDBGN0VCMUZCOTY3MzMwNjhDNUY1MUM0QgorOjEwRTcyMDAwODc4MzgwNEI1RDMxMkJCMTc0QTMzODAxREJFODQxRkY1NworOjEwRTczMDAwOEZDQjQ5NEYyRDIzRkVCRTVFRjJEMUJBNTczOEI5NUQ1QgorOjEwRTc0MDAwQjM4RUI1NTI1RUUzQzU0MzNDMEY3OUU4N0QxRUZBRkJGQworOjEwRTc1MDAwNUNBMDBGODI0OEI3QTM1ODYwQTc0OTk3RDdBNUQxNDNCQgorOjEwRTc2MDAwRERCMzYwOUYxOEUyNTU5QzdGMzRCRkI1OTc4OEZCRjRGQQorOjEwRTc3MDAwQzQ3QjQyNzRFREJBQ0YwNDUyRDVDOUZCQUM4MDk1Mjk1NQorOjEwRTc4MDAwQkFGODVBNzY4NURCNTBFRjU1OTM2OTY4OUYxOTBDNEJBMAorOjEwRTc5MDAwQzg1Nzk5QjUxRUMzRjM0RTM5QzVEN0RCMkJDODM2QTA3MQorOjEwRTdBMDAwREU1RkM3REE2ODdEQkRDNTdDQUU5NzAyNDQxRjE3MEZEOAorOjEwRTdCMDAwOUQ0OEM1Mzg2NDQ4RTAwM0Q2RkIyNEFEQjczNjcwNTE5OAorOjEwRTdDMDAwNEYxRkRBN0FBRkI2QUUwRjk3QzE3QzgwRUZGRjg0N0UyMQorOjEwRTdEMDAwMzk5NDc3M0Q3MDRDRUE0RTcwNzc1M0RBRUYxQ0QxQUYyNQorOjEwRTdFMDAwRDdGNzhGOTBGRkQ4QUJBNjk1RUNGN0Q5QjU3QjI1RDQ5QQorOjEwRTdGMDAwNUIyMDM3QThERkJBNjU1NjJBN0ZCRENDNEQzMjU0QzNBMworOjEwRTgwMDAwNkY0RjY4ODc3OTQ3REE3REYwODlGNEQyMkVFNzM1RUJEMAorOjEwRTgxMDAwQTU1RENFMzg3QUM5NjQ4REJDODZGQkRCOTVDREIyMDc4OQorOjEwRTgyMDAwRTk2MEU1Rjc1MzI5N0ZFMkE5MDY3RTJFNzE3RjMzQ0Y5OQorOjEwRTgzMDAwRTc3QkFBOEVFNzZENkJERjNERjc3QzMyRURFRjlDMTMzMworOjEwRTg0MDAwRkI3Q0NDNzcyOTYzMUFFRDdCNUZDQUMwRjM0NTFGM0I4NQorOjEwRTg1MDAwMDI2RkU4RTVFMDUzQ0Q5RkRCNTA1RjBDRDZGMjY0NjNCNgorOjEwRTg2MDAwRjQwQjBBNUUzQ0FGNDI2NzFGMjVCNDdCODZBRDkxNzEwNQorOjEwRTg3MDAwMURCNzA1ODY2MzRBMUJGMEY3M0I5QzNFQjkxRUZBQ0RENworOjEwRTg4MDAwQjYxMjkzRkU5RThFOEI0RDdGOURCRENGRDNCOTZGQTRFNAorOjEwRTg5MDAwRUQyQjY5RUZCNTdEMjc0OTBBN0NBQzk3RUJCMUZCNEFCQworOjEwRThBMDAwQjFGQjIxQjJDQjRBNzlENjVFRDlFRTk1OEQ3QTk1RTg0NworOjEwRThCMDAwNkU2NTNGQUUzNzU3RUVCNTEzREM1NkY2NzNEMEZFMkRCRQorOjEwRThDMDAwQ0NGNzBDQ0VCNzA1RjQxNjlFQzNCQjc4RDQ0MUVEQjQ5QgorOjEwRThEMDAwRjlDMzdDODcxRUQyQ0RCN0RBMTQ5OUJENEY4QTNCREZDRQorOjEwRThFMDAwQ0ZGNTcwRUMzQTVGNjMzRUIyMzYzRkQ5QTlEMEJDREJCRQorOjEwRThGMDAwOTlERDhCNzg2QjMwRjNGQkRCODI2RkRBMjkxRURBRUU2MQorOjEwRTkwMDAwQkI2NEMzN0I4M0RCRDkyNTFCQzY2OTRGM0IwMjkyMEJEQgorOjEwRTkxMDAwQkUyM0Y3OEFCOEQwMEZEOURGN0M3MTIwRDI3RkEyN0RDOQorOjEwRTkyMDAwQkU0MUNFMTIxNURCQzMzQUFENTg4RTcyMDcyRTZFNjMxMAorOjEwRTkzMDAwOUNDRjAyNTdFODM3Qzk1OUUyNzA4REZDQkJENjlGRUVEOQorOjEwRTk0MDAwQkEyMkJFOENFQkFGQzZCRjgzQTJCM0EzMjQyMTZGNjNGMAorOjEwRTk1MDAwRTk0RDZBREVGQjE1QzZGNTgxQkYyODVGMzREODlCODU3QgorOjEwRTk2MDAwNTYwMjlDRUE4NjA4QkE5QkMxQzRERjQxMzJEMkMzQzdCMworOjEwRTk3MDAwMEU3RjNGNUNBRkM2OTc1NzgwQ0Y0MDlDRjc1QjBFRkY4MgorOjEwRTk4MDAwNjA2QzhGRjNDMEYzM0MyMDc3ODZCOEI4OUVEQTg5NDc3NQorOjEwRTk5MDAwOTYzNUZCQTk0RjFFOTc2MzkxMTQ0Njc5MjZCMUZCQjNCOAorOjEwRTlBMDAwOTM5Q0QzNDY2MEJGREMwMTFFMTNERUUzRkU3N0QwRkJGMQorOjEwRTlCMDAwQjgyQkMzMkY0Qzc5MkFEQTc5RTI0QURDMjdDNDczN0M1RQorOjEwRTlDMDAwOERFQTE5RTNERjRCMzJDMkUxQjRDM0ZGNkQxQzM3NTg0NworOjEwRTlEMDAwRDI0OTU3MkIzRDU3ODRDNzI0ODRDMzVCOEVDMDE0MkM2NworOjEwRTlFMDAwOUQyQUQwMEIwMjY1RjQ1Q0ZBRkI1NTU5MzZERjJBREMxMAorOjEwRTlGMDAwQkZEQ0JBOUNDM0ExRkQ1OTBFODdFRDJEMjZBMkUzMEQwNQorOjEwRUEwMDAwNkMxMEYxREYyMEQzODVEOTM4M0VDODk3OTkzOENFODg2RAorOjEwRUExMDAwRDY3QTEzRTZGM0Y1MEI3OTRDNzQ4RjUzNkI4M0M5NzQ3NAorOjEwRUEyMDAwNjVCQTlEMjVFODc2OEVDMEMzRkQ4ODg3QzFEQjc4NUMxQQorOjEwRUEzMDAwRTUwQTc0M0I0RkQwRURCNUMyN0Q4OUVCOEE3Q0RCODU1RQorOjEwRUE0MDAwQUU2QUY0NzQ3NUFERjk0MzkyMzgwNzFCM0IxRTYzNkREMworOjEwRUE1MDAwMTRCRkRGRkI5Mjg1RTQ3N0Q1MEU3RUVFQjc2QUY3NDlFNworOjEwRUE2MDAwM0EyRjVBRjVCMjg1ODhCMkVDNjUxQjNGQkZEMkM4REY5QQorOjEwRUE3MDAwOUYyQjhFQkZCRkZDNkYyRUVFNUY1NTM2RENFN0Q1RUJDQworOjEwRUE4MDAwNkJDRDBFRjhBOUVGODJCQkFGRENCOTRGOTczNjk5OUZEQgorOjEwRUE5MDAwMDc1OTY5RDNGMjQxRjk3RTlENEJEMDU5NUEyRkJGMEZDOAorOjEwRUFBMDAwRjU0RURBNzgxRTE3NzIzOUU2RDM3RTVERDc3MzFGOUM1OAorOjEwRUFCMDAwNkZEMzQ1M0ZCN0RCNDNGNjQwRUMzOTkwNzRCQzE3OUNFRAorOjEwRUFDMDAwRUZCQjEyQkRDODI2QkIxN0Y3MkREMzI2QzZCNDczNENCNworOjEwRUFEMDAwQTRGQ0I5RjQ5OEZEQkM5MDRCRDhDMTY2OTY0OTcyRDQ5OQorOjEwRUFFMDAwMTZGRkJDOTc5MkFDRDk3Mzc2OTM1RTlFQTA5Q0E3RkI1MQorOjEwRUFGMDAwN0E5QzU2NUFGN0QyNzQ5NjU2OEVGMTAxQTc0MkU3M0Q5QQorOjEwRUIwMDAwNjNDN0QxQ0ExNDlGQzk3MDlFMjg2REEyREQ3MDVGNDY4RAorOjEwRUIxMDAwQkEzRkQ1NTBFRjNFQjM4N0ExN0Q1NjIwRDdGMDNFQkIxQworOjEwRUIyMDAwNjI5MEUxN0RBRjlBMDI0M0JENEZFRDBEODZGNjM5NDAwQworOjEwRUIzMDAwNzBGQTdBREU5QTlCMERFREZCRDU0RjMzRDRBRjVCNzczRAorOjEwRUI0MDAwQTdBMUZEQzBEMEREODZGNzgzQjcyQzMyQkMxRkQyQjBBMQorOjEwRUI1MDAwRDQ1MEJGQkVFOTIxNDM3QjM5ODE3REFEQzE1OUQ2RUM4QworOjEwRUI2MDAwNkJFNzg4MDA5RDFGNzM1QTI1QkQxRDcyRDhDNUVERjA1NworOjEwRUI3MDAwNjI5Nzk1RTBCRjVBRThFM0Q1RTJCQ0Q5NkFBMThGNUIwMgorOjEwRUI4MDAwRDIwQkFGQjhCRkYyOEZGQTYzNjc1REM2Qjg1Nzg5ODhGQQorOjEwRUI5MDAwN0I5RERCNjczNjIxREQ1N0VEMDdCQUEwQkZDQjE1Mzg2QgorOjEwRUJBMDAwRUJFMkY2RDc5NEI5QjQ3QTdFOEVCMjM1NDEzRUM3OTc4MAorOjEwRUJCMDAwMkVDRENGMDNCRjI0OEU3RjY3NEFGNkM0RjVBRjQwQUU5QgorOjEwRUJDMDAwNUQ3MkU5RkQyMDU2MjNBMzFDRDBFNDUyNzUxMjIzQkJDRAorOjEwRUJEMDAwQURERDE1RUQ4RjdDMDQ3MjRBNEE0RTQ3RjlGNDU4Q0RFRAorOjEwRUJFMDAwM0U5NDRGQ0QxNjkyNEZBRjBGMzg0MTdFRjVDREI1RjMyMQorOjEwRUJGMDAwMDkyRTg3NUQzQzVFMkI5QkJEMUU3RUNFRDRBODc3MEY3MQorOjEwRUMwMDAwQTlBRDk0QTc3RDY4QTRDQ0YwN0U5NDhCREU1MTc0OUU1MAorOjEwRUMxMDAwMzkxMTNDREY0NEJGMTk2NEQ3N0U5NDBEMjNBRkVFNzdFMgorOjEwRUMyMDAwMUU1QTU2NDFGOUNDODlDNjNCMzRDQzQ2NzFDRkYyOTg3NgorOjEwRUMzMDAwN0I3MDA3MDkzQTJBNEIxNkYwQjQ3MEZGRjFFQzBCNEVDQgorOjEwRUM0MDAwQ0EyRjNFNUJGMDBFRkRGREEyQjM4RDdGMTgxRUE0QkY0MAorOjEwRUM1MDAwRDdENTdBM0ZFRUJGMDdGRkVBQTBCODRDRjlCMDc3ODY2OAorOjEwRUM2MDAwMkYyN0JCRDZDN0ZEMzdGMTc3QzFDNkJENzhEODg1N0VDMworOjEwRUM3MDAwNzdGOUY2RkRERDgyM0FGQ0M1RkE2RDY1NjI3RDRDNjk3NworOjEwRUM4MDAwRUI0Rjc5QTFBRjlDQTJCRjFCNTNGRUQyODE2RTNDMkVFRAorOjEwRUM5MDAwNjRDQzVCODlGNUQ3Q0I2QkFCMDg2RjVBQkQzMjZBMzU1NAorOjEwRUNBMDAwRTRBRjU0MkFGQ0RDNkY2NUQ0NDFGOTJCQUU2NEEzM0Y3QQorOjEwRUNCMDAwOUYxMDVFRDcwOENGRDhFNzFBM0MwRjBEM0JDNUNGQUZFQQorOjEwRUNDMDAwREJFMkQzNkY0REIyMzEzRTFDN0JBRTIwNTFGRUZBRUQzQworOjEwRUNEMDAwQTJERjQ1RUYxODNBMDc1RjZFMEVGN0JEOTZGODgyMDY4MQorOjEwRUNFMDAwQTdENzJGMkZBMEYzMEEyRjI0MzhBRkUwNEZFNjcxRjdGNAorOjEwRUNGMDAwMTcwNkRDNEI3OUM3NjNBQzM1QTVBOEJGQzc4OEY4NjU5NAorOjEwRUQwMDAwOUNCQ0UzN0I5MjQ3NjIzRUYzM0YyN0VGQjg1MkMzOEYzMAorOjEwRUQxMDAwQzhFQjFEODM3QzlDQ0VCQUU0MUQ1RkVEM0NDODI0QkNDRgorOjEwRUQyMDAwOEYzQjBFN0ZEREQ0MDFCRkY3NjdFMEJENEVGNzNGQTFGQgorOjEwRUQzMDAwNTIxRUQwMDI5ODQzMTBFMzI2MUI1NDhBOUYxRUJFNkNCRAorOjEwRUQ0MDAwNjExOENGM0VCOTVFN0QxQUYzNTUyQTlFRDhERkYzMzFBNAorOjEwRUQ1MDAwOEM1RjBGQjM1MDFFREQ4MjBERkMzRTEwMzZDQzE2QzIwOAorOjEwRUQ2MDAwM0M4RDhBMEQwRjY2NjA3RUU0NjdDMEI3NEI2MDVFMEIxQQorOjEwRUQ3MDAwOUU0OEE3M0M5RUMzMkQ4RjY0MjA5RTRFMDk3RUFFRjgxMAorOjEwRUQ4MDAwRkE4N0I3MjFGQ0I3OUJERDgzODc0MUI5NjQ5QjY0QzhEMAorOjEwRUQ5MDAwMDM1RkI0Qzk2NkE4NkI3OTQwMUFGRTk4RDQ5OTFGRUUzOAorOjEwRURBMDAwMDEzOUZBNzhCMkYxN0NDQkYwQ0U3RDg1Qzc5Mzg1M0NGMgorOjEwRURCMDAwOUQwRUYzQUQxQTc5RDE4Qzc4RENGRkFBOURFNkJEQzcxNAorOjEwRURDMDAwQzFFRjU3MEIwRkZCRjI4REVCQTE1RUZBQjVBMkREQUJFNQorOjEwRUREMDAwNjNDODJCNjJCODA5ODFGNzlDODhGQ0JGRDI5Nzk0OEVEOAorOjEwRURFMDAwRkM3Q0UxMzczOEM2RUJGMkEwQzNDQjZBODg2RjRBN0Y2MAorOjEwRURGMDAwQzVGREUyNTIxQkNGRDc0RDk4NkZDNEJBRTQzMzBGNDAyNAorOjEwRUUwMDAwNzlERTI1Q0ZBOEYzM0M4NEMxMkVEMUU4QTYzMTU5RTRBMAorOjEwRUUxMDAwMUIwOUJFREVGRjJBQ0YyQjlBN0Y0OEQ4OTM1NzkxOUJDMAorOjEwRUUyMDAwNkZFMkJDMTVDNEQ3RUJCMzcwREZGMUIwODBDNkUxQ0JBNQorOjEwRUUzMDAwMjc1N0QxM0Q0NEEzMjU4Q0IwQjE5Mzk3RTNGMzhENTk2NworOjEwRUU0MDAwOTM5Rjk4QkYzRkEwMTMzRjkzQkQwQjNCRUFDODk2NTNENworOjEwRUU1MDAwNDdERjY3Mzg1NzcwRURGMkU2Q0FGMkE0MzY5OTlGQkZENAorOjEwRUU2MDAwOEI5NUVGQjE3NEZGN0Y0QUJFOTcwRjNCRDAxQkNGQzk4NAorOjEwRUU3MDAwNDNGOTlGNzQ1RTdFM0I5NzhGQjE3QzFFMkJDRjZGOEFDOAorOjEwRUU4MDAwOTE4MzlENzJEQzY0OTBFMzM3MDk3RERFMjlDRkNEMjQyOAorOjEwRUU5MDAwQ0ZDMTNDRTNGN0I3MTQyQUExOTUxMkY5M0Q1RkEwQkU5QworOjEwRUVBMDAwQ0U3Nzc4RDI4QUExQ0IyQTc3NkU1MkUwQ0E3RUU4MjU0NworOjEwRUVCMDAwRTQ5Mzc2NUJFMDZCMkNGQkZDNjYxMEZENURDRkMxREI2MQorOjEwRUVDMDAwRUE0REM4QkZFRDA5RUM4RkZGMEQzOUEwRkM3NzAwODAzQgorOjEwRUVEMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkNEN0QyQgorOjEwRUVFMDAwMDk3Qzk0RDVCNUY4RkRFNjlCMkRDOTRDMzI5OUVDMkJFNQorOjEwRUVGMDAwMTM3NjE1NzA4MDEwMTBBMjdFNDkwMEEzMTAxQzUwMDFEQgorOjEwRUYwMDAwMzVFODI0OTA4NDJEMjQyMDVBRkE2QTVGMjYyNDYwQzRCMAorOjEwRUYxMDAwNjg0M0I1OEE4QTc2NTBGMDUxNDUwRDgyMzVCNjUxMjczRgorOjEwRUYyMDAwODAxNEFDNEJBQ0I2QTVBRDYyMTA0NDM2MjU4MkZBQTc2RQorOjEwRUYzMDAwN0QyQUVGOUM3M0VGQ0RDQzM3OTlCMEY0Rjk3RUJGN0Y3QgorOjEwRUY0MDAwRkFCMzk3RkJEREZERUNFN0RDNjU2NjQ1MUIxODFCQzNEOAorOjEwRUY1MDAwRDhCMzI2MzZCQkQ1MDZBOTAyRTkzMEM2Q0VFMkRGRDU0NgorOjEwRUY2MDAwOENDNTM4MEE2NjQ1MjczMUI2REYwQTI5RDQ2M0NDRUE1NgorOjEwRUY3MDAwMzgzNDk0QjE1QzY2NjA3MTJBNjMyNThBMzdDNjAxRTUyRQorOjEwRUY4MDAwRDVENkFFMDdDQUEwNzRDOTZGQkUzNTQzMTFEQjEwRURFQworOjEwRUY5MDAwNEQzNTI2MzJFNjRCMzdCQjM3RTUwNEZCOTM2OTkyMDNDOAorOjEwRUZBMDAwMkE0MUJCRkUyQjBBRDlDMTA0QzYyQzU2RTY4QjFBQzVEMgorOjEwRUZCMDAwOTg2MjY0M0VEMzI4MUNDN0I1RDIwMEVEOEQ0RDhDQUQ1MAorOjEwRUZDMDAwODFGNkIxNzY0NkYzNjQ0MzUzMEQyQzk5QjEzQkFDOEM3QQorOjEwRUZEMDAwRkU3Qzg1MEMyN0MzN0MzQkEyRkQwRDBBNjNERjMzMkQyRAorOjEwRUZFMDAwMDNFN0YzMDNEMzMyMUQ1MEZGMjNBNjY1NjE1RThFREI3QQorOjEwRUZGMDAwMjhENjY5MzQzMEVGNTY1QkVGNzlDRDc0Mjg3QzFDRTY1NworOjEwRjAwMDAwMTlFQzgxMzEyQjBBOTkzNzE0MUUzMjJENzAxOEE5NUUyNAorOjEwRjAxMDAwQzFDMzM3Njc3NzQxRjk2NzFEQjc2NDMzRTg2RkQ3QUY2RQorOjEwRjAyMDAwQzZDNjc1NDVBODJGRDNCNTc1QjVFRTg5RDBGNEZFM0E5RQorOjEwRjAzMDAwMkZBNUYxOEM2OTM4OUY1RkQ0Q0RBN0JDMTNGMjVCQTFEQgorOjEwRjA0MDAwN0Q4NUQ5MzMzODNFQTQ5RjgxOEU3ODgyOTdBM0UwNEY4NworOjEwRjA1MDAwOUUwMTAwOTc0M0NEQUE0MzcxNDFDQTBDQzVEOEZFQTBCQQorOjEwRjA2MDAwM0ZBRTc4QkI2ODk3QTg2QkM3RTdBOTMyOERCMTAxQjBGNgorOjEwRjA3MDAwNkU5QkYxNUY1RDAyNzY2NzE5QUU5NzUxQkY3REFENzNGMAorOjEwRjA4MDAwQTY4M0QzODc5OUI5QUREOERFQkNFMzNBMkJFMjU3NTVCNgorOjEwRjA5MDAwMzQwN0U2MjUzRDVDMDEyMzIwM0REQzgzOUZBRTYwNkM5OAorOjEwRjBBMDAwQjRFMkY1MzhBODlEOTYyMENCQ0ZFNkUwRjhDNTk0OTc1QQorOjEwRjBCMDAwRTNCMzRDNTg3MTVBREZGMDYyOEE3NjEzRTJFRjA4RDM1QgorOjEwRjBDMDAwNjY2MjdGQUQ2Njc2OTkwM0Q2REIxQUNERTY0NzlBNkYwNgorOjEwRjBEMDAwQTlDMDVGQkE0M0QwMEJCMzM5MEU1RjI2QzY4M0Y5OUQzMgorOjEwRjBFMDAwOENEMTZFQzc3RUQyQTIzQzY1RDg2RjVFNDZBRDZBODI3NworOjEwRjBGMDAwMjZCM0EyMURBMkJFQTY3ODg2NTM3OTI1RDY2M0E5OUEwNworOjEwRjEwMDAwNTIwMkYwQ0VGQjA0RTgxMEIyREJGNjE0MkEyRTE4M0ZCMAorOjEwRjExMDAwQjE3M0EyRTI4MkYxMTMwNUZFN0FDRDVGQzBFRDI1QzY4MAorOjEwRjEyMDAwOEEyM0NENzM1NjM0OUZFNzUyMDFGRkZENTYwRkYxRDc2NgorOjEwRjEzMDAwRUExQzZGNkEyREY0RTc2QTY1OUExRkRBQjVFMjk0NDIxOQorOjEwRjE0MDAwRTBGMzk2QzM0Q0Y1Mzc0NDc3Rjk1NEE0RkI1Qjk4N0IwNgorOjEwRjE1MDAwMTNEMDQxNEFCRTRGMzE0MjlBMzFCNUE1MDAzMENFMUE4NAorOjEwRjE2MDAwMUM0RUVBREY1OUVDNEQ1NUEwNUU3QUFBRDlBRDJBMTc5QworOjEwRjE3MDAwQ0U2RkMzNUEzNUQ1MEJFM0U3N0EwRDM0OEY3NTlEQkUzQworOjEwRjE4MDAwQThDMTMwQUZFNDRFNkY4MTE5RDJBMkY4NjRFQTNGODU3RQorOjEwRjE5MDAwRDVENjIzM0VBMDNENDNCRTFDRURFMEZGQ0NGNTE2QUExQworOjEwRjFBMDAwQUUxMEI4RTRDREFCNkQzMEMzRjdFRkEzQkQ2QjQzRjk0MAorOjEwRjFCMDAwMzE2M0IxOEZDNjM5QUE3OEZCMzk4MTlFOEVCRTE5M0Q2NQorOjEwRjFDMDAwREI4RkZEMDU5QzQ0NDdCMkRFNTM4OEQ3MjRBNDg3QzI1OQorOjEwRjFEMDAwNzQ5NjBBRkQ2RjM0RDFCQzcyMzdGRUVBMzZFNEZGREM2OAorOjEwRjFFMDAwOERENzE4OTUxMDM5RjM4QUMzNDRGNThGQkVCOUIwMUY3NworOjEwRjFGMDAwQUVERkY3MzcwQjFCMTQ0MTBFQkQyOEU4RTU2MTgxODdCMAorOjEwRjIwMDAwNkRFNkM4NzRGNTlDMUM1RkQwRkIwNEE2NDhGOUY3OUMxQQorOjEwRjIxMDAwOTA3RkIxMDM2MDdENEJBQTRGOTFGQzZCNzZCOEE4RkUzRQorOjEwRjIyMDAwRTNDNkQ2RERFOTAwRDdDN0U3MzFCNzBGM0UyRERDQkMxQQorOjEwRjIzMDAwNDFDMUY1NkUzM0I3NUVCQjA1RTdCNUM0QzAxMDdGQkJGNworOjEwRjI0MDAwNzZGRjZFNzczQUU0RTdDRjczOERCNEI4NDJEQUJGRkQ0QworOjEwRjI1MDAwRUM2QUZDRkVGODdDMzYxMkUxOUFFNjVGQUIxODAwM0VFMQorOjEwRjI2MDAwREY0NkI1RDBCQUJGREQ2NDYxRjUzMEI1QzczNzNFOTIzMQorOjEwRjI3MDAwNkNDNzdBNUU4MzAzRUJGNUUyMjM0MEIzMjExNUQzODA5QworOjEwRjI4MDAwQzkzMDhFRTMxMUU1OTVDNDlGODQzQkFFMUZFNUUyQUUyNQorOjEwRjI5MDAwNERBRkQwQkNFNTdDODA1MENDMDhGN0EyNzgxN0MxNkI4RAorOjEwRjJBMDAwRTFFNkFERDcyMkYxQTcyRjc2MkE2QTRFNzA1RUU3OTM4QQorOjEwRjJCMDAwRkIxRjBBQkVCODUwM0E3QzMzOUVGMzMxQzg3OTBEQzdBNAorOjEwRjJDMDAwRjNFNTE5NDlDRTdGNjJGM0ZFMURFMTNFQ0NFNjRBMjgwNAorOjEwRjJEMDAwODAyOTM1M0FGQUM3Nzg2MUZDN0UwM0Q4RUQ5RTA4RkM5OAorOjEwRjJFMDAwNzhBOUJENzAzRkQ2M0YxOUU1M0Q4MDdDRERFRkI5NEI3NQorOjEwRjJGMDAwMjdCMjU4QzYyRURCRDI2MjQwN0M5QzU0Qjg1RUU4Q0Q2MworOjEwRjMwMDAwQTc0MjNGMEFCRDI4RjVBNDJDM0YyOUU4RTIwRUExMjcxOQorOjEwRjMxMDAwMjNFOEM3OTM5MUY0QTM4QkI5RUUxQjA2Rjg2MjZGMUIyOQorOjEwRjMyMDAwODg3RkMzQzc1RDJBRTg3MjgyRTYyRDQyN0U5RTFERTM3OAorOjEwRjMzMDAwM0Q4M0YzQkU2MjlDN0ZBNzBBRjVDNzE2RkI3NjIyQkYwQQorOjEwRjM0MDAwRTcyQUI1M0JFRDAwMTc3NjJEOTcwMzA5NURBQzAzOTZEMAorOjEwRjM1MDAwQzVFMkY3NzU2OUIxOTA5RjhCNzIwMEM2MUY3RjQ0RUJDMQorOjEwRjM2MDAwQzBGMUUyM0M0Q0MxRjZDRjIyOURDMzNBNUE5Q0VDRjY2OAorOjEwRjM3MDAwRTkxMUU4RkQzNkIxMkVDMzQzREQ2NkQ0Njc4OUVEMEE5NQorOjEwRjM4MDAwRjE1QjZGRjg3MDc5MDRGMjMyMjYxRUU2OTdENzBGRTQyRQorOjEwRjM5MDAwNjk0RTZGNzkxQTAxN0ZDRTc4Njg3N0M5OTZDMDBFQUMzNgorOjEwRjNBMDAwMzUyQTdFNjAwQzM0M0IxN0ZFOTJFMzA5N0Y1QTBBOEVBMQorOjEwRjNCMDAwMjNGMTc1RTk1OUY1NzZDRkIwREVGOENBOEVFN0YzQkZEMQorOjEwRjNDMDAwRDNBRTY1NjFCQkNGODQzRUU4MEI4RkMzRTMzOUZFOEFDMQorOjEwRjNEMDAwRTJCOTlERjNBQzVERDQ4QkQyRDcyQjhCRTc3OEE5ODhBQgorOjEwRjNFMDAwRDdDQjgzMTA3QzBGOEY4RjgwNkYyOUM3QjdFRDc5NDlGQQorOjEwRjNGMDAwNDVCQ0U1NEQ2QzY5NDAzQzAwNUU0N0UzN0FDNkU3RDcwMworOjEwRjQwMDAwMzZFMEY3ODRBOTVDMUU4NkUzNTVDQUMzNzBGQzg2RTMyOAorOjEwRjQxMDAwOTVCMTdBOUExRkUwRTNBQUY4MDhGQTRCRjYxM0FFQzc0MworOjEwRjQyMDAwNDJFNDA0QUQ2QjlEQTA0RjFGRDIyN0UzRkE2ODgzMkQwMQorOjEwRjQzMDAwQjgwRUM5M0ZCNzA5Nzg0Q0YwN0E4QkNDOUM0RTRCNzAxNAorOjEwRjQ0MDAwREMyQjY2RkI3NzlBOTA0RUU3RkI3NjlBNDNFOTc0MDFEMgorOjEwRjQ1MDAwQTNGRUU0M0MzMkJBN0NCNDlFQjQ3RERFMDI0Q0M3MUZFRQorOjEwRjQ2MDAwMDk3NDBDODM3QTI5QjVCMDFFMTY1QzRGNTZFNzg3MEFEQgorOjEwRjQ3MDAwQ0FBQkFDREE0RTg1QTFGQ0RDQjM4M0U2OUREOUI5OEI2RgorOjEwRjQ4MDAwQTdBODg3ODdGNUQ2Qjc4Q0FEMTQ3NEM4RkI3OTMzOUVDRgorOjEwRjQ5MDAwQ0JENUQ1NUZDQzRENDVCQTU5NURDMEY1RUQyQUJCNTZFRAorOjEwRjRBMDAwOEVGM0JFQzNBMUNENDVGQ0FEQjM2QkYzMzAzRjJCOUFCOQorOjEwRjRCMDAwRUI4NUUxRjE1QTI1N0VDRkVBNDNERjJGMTE3MDAwQjhDQQorOjEwRjRDMDAwNTc2M0JCQzRFNUNDQTdDMDNBQzZFRUIzRjk0MTU1MDBCQgorOjEwRjREMDAwRTlDM0JDNjE0MTg5QjUzRUM1MEM3MDRERDQ5ODFCRTVBQworOjEwRjRFMDAwNzRCRjA0NkZCRDA5RUE3NTVGQzFEQzRGNDEzRUFFRDQwNQorOjEwRjRGMDAwNTE4MEYwNzJDRTc3NzcyMDNDNTc3RkExOTI3REJCN0EwNgorOjEwRjUwMDAwMjlGM0FGQTQ3RTE4RkYzRjZGN0YzRkNBNTdFNERGNTA1NworOjEwRjUxMDAwN0VGMTg5NzlGOEUyMzkxRjgwQkRGM0YzNzhDRTlGNzVDQgorOjEwRjUyMDAwQzQ5RkMyREU5MTdDRDk5N0ZEMTJDMkQ3QUIyRjkyQUY5OAorOjEwRjUzMDAwRUZCRjQ4QkU1RTJCRjhGQTk3OTQ5RTg3QUYxRjBERjI3RgorOjEwRjU0MDAwRjUzQTlDRDdGOUY4N0FCM0UwRTczNzA1N0ZGN0M1RDdFNgorOjEwRjU1MDAwN0YxMDcwN0IyN0JFNEYzRjY3MzM4RUQ3NUI4RTczQkFBOQorOjEwRjU2MDAwOTM3Q0YxRDI5RTUxMzFFNUQwRUY0RTMxQ0YxMEY5REREMQorOjEwRjU3MDAwOEFFQjNCOUZGQ0ZFMzdGOEZDRjdEOEVGRjlFQzU0RDk0NworOjEwRjU4MDAwQUZDNEY3RjlGODY0QjhEMzQzRjA5MkY2NjhBQ0RENDE0NAorOjEwRjU5MDAwRUI5MTdDMEZGQ0IyNDdGMENCNUVDMTJGNkY2MTNBMkIzMQorOjEwRjVBMDAwOUFEQjA3RTFGQ0Q1QTNFRjNBQjkzQzAxNEYyNjA2RTkwNworOjEwRjVCMDAwNDc4RTdGQTQzN0JDRkUxMjA5NUU1OTRDQzBBQjk4Q0I3NgorOjEwRjVDMDAwOTE0Q0U2NTM2M0IxREZBOTBFQ0EzQjRFMzhFQUQxNTVFMAorOjEwRjVEMDAwOEMzREQ0RUQ0M0I4N0QxQkNGRkRDQzVDODU3OTIyRDkyMQorOjEwRjVFMDAwNzVDNzA0OUYyNDc2MTY5MjdDMDE3ODFFQzI3MTI1QkREMgorOjEwRjVGMDAwMjczMkM3MTRGNDczQTI5QzVDNkU4QzFFQTdFRDQ0QjkyRAorOjEwRjYwMDAwRTREMDNDMkFEQTFCQjk0RUNFMEYxMjRFRDBGRThCNDgwNgorOjEwRjYxMDAwRjhEODhFRjgxOEQ2REI2RjA4QzdDM0E3NjJCRTUxNEU2NAorOjEwRjYyMDAwMEU4RkYwRkVBNUZDQzFGRTg3NTNGRjJFMDNGNjJGREJFNQorOjEwRjYzMDAwRkYxMDk0NDNERjIzN0VDNjJFQUY1NTcxNUQ4OTRDOEIzRQorOjEwRjY0MDAwNDFGOTIzRTUyNENCODRGNkI5QkREQjlCQzRCOEQwREVGOQorOjEwRjY1MDAwRTQ4NDc0NkMyREI0MUYxNjZDOUZDNTAyMEFDMkMzMzlCMgorOjEwRjY2MDAwMUZFNDE0NDNGQkRENERGNjZDOUJENTYzNzMxMkJEMzA3NAorOjEwRjY3MDAwMkVBRjBBMEMyNDBGQTZEOTM0RTJBNzQ4RkFERjc5OTFGRAorOjEwRjY4MDAwRkFERjI5RjRCRkYzNDJGNEJGMzNBOEZGQjE5RDcyM0UwNQorOjEwRjY5MDAwRkQyRkVBOEY3MDlFNUI0RUI4N0JGMDIyRTMwNEJERjUzMAorOjEwRjZBMDAwQkYzMzgyRkVERjZGRDVBOERGMDg3QzM0MTJENzEzRTNBNworOjEwRjZCMDAwRDA0NjYxMEE3QzM0REE5OTE0RDQzQkQwNkUwQzdFNkY0QworOjEwRjZDMDAwMTNFRDlCQTcxQTg2OTI3RENEQTJERDkxRkM5OTQyQTdFRQorOjEwRjZEMDAwNEQzN0FGMkI4NTlGQzJEQUZGRkJCN0ZGOTFDNzU4MEQ5RgorOjEwRjZFMDAwMTZGMTc5MTYzQTQzRkM5NjA3QTc3RTlBRUMyNTNGOEVEMQorOjEwRjZGMDAwRTlFMjJCQkY1RUU5N0U2RjA4OEVGN0FFQ0E5MEJGN0U0RgorOjEwRjcwMDAwRkQ5RjVENjY4NDc3NkI3NEVDMDgxNjE3MUNCN0U2NUY4NworOjEwRjcxMDAwNDA1ODYwQ0Y5RkZDOTc4MTUyODlDNzI1RURDQTY4MDY4MworOjEwRjcyMDAwMEM1OUIwRjMzQjhBOTM5Q0VDRjgxN0M1NDkyRUI1OTc1QQorOjEwRjczMDAwQ0ZDMDc1RUQ3QThEQzc0QjRFQkY3REQwODk3NDI0Qzc3RAorOjEwRjc0MDAwNUYyNkZDQzg0OUVBQjBENjAwRDBEM0E5Q0Q2NjM3RkEwNworOjEwRjc1MDAwMjEyQTczM0Q5MjBGRjNBOUQ5NjM2MjdFOTI4M0NDOEFFQQorOjEwRjc2MDAwRjU0RDdDQkFDQ0I0Nzk3NUE3MUE4Qjc5QTM0RkM0MzlGRgorOjEwRjc3MDAwOTRCM0E0RUY1QzcxNDg5N0E2M0QyQUY5MTUyQzkxOTc5NAorOjEwRjc4MDAwRDczMjZCRkREOUZFMjA1N0M3MTk5ODJCMjQyRTEyQUYwNAorOjEwRjc5MDAwNDUzMzU3NDg5QzIyQTFEOEE5Q0IzMzhDQTdDMEI4OEIzRQorOjEwRjdBMDAwMTg5RjY3OTIyNzVERDczRTY1NzY3RjVERkQzNEVGQTU5NAorOjEwRjdCMDAwQkFGMjhDRjlBMzc0RjlBQ0RBRjFCQUZBRkRDMDNGMEFENworOjEwRjdDMDAwQ0RFN0Y4QUVEM0Q1MUZEMDM0NDM5NzFGRDQ3MjhCQUU5QworOjEwRjdEMDAwRkVFN0FDRjZFMTdDNUNCNzRGRUIxQzA4RjM5QzI3RTYzOAorOjEwRjdFMDAwMzk2NDVEQjlBRUREQTU4NkQ2M0NFMDY4MzYyRkIwNzBEMQorOjEwRjdGMDAwMkExQjAxRkNFODVGQThFQkU3RjhCM0M1N0IxNEY4Q0U0MQorOjEwRjgwMDAwNUE0Qzg3MzhCQzZBMTlDMjhCRDYwRkYwQUM2QzUzRDhFRgorOjEwRjgxMDAwNjNEMEJFNkExRDJGOTdFREU2QjdBRjVEOUQwMUU5MDI4QgorOjEwRjgyMDAwQkZGRTNCNjM3RTMzQ0FGRDQ1OUJGNURGMUY3NERBMTNEMQorOjEwRjgzMDAwMjk0RTkzQ0VEMkNGQUE5MUU4QzA0NkUzOUQ1QUFGRkFBMworOjEwRjg0MDAwMkQ4MDNGRDUzNzI0OEMwRUY0Rjg2MEZGNEJCQTcwMDkzOQorOjEwRjg1MDAwQkFCMEE0RUFFOTIyQ0FBNUE3OEJBQUJEREJGMjAyQUMyMgorOjEwRjg2MDAwMzc5QzYzODYzQTIzQzI1MUMyRDlFRUQ2RDM4Qjg0MkZGQworOjEwRjg3MDAwRThDOUZGMTNGOEJFODFGMDhEMDlDMjM3MkRDQUJCMDM1QQorOjEwRjg4MDAwRjlFRjc0REI3Mjk1RTE3ODVFRUY2ODZDRDc5N0ZDOURCOQorOjEwRjg5MDAwNjIyRkRDOERGMkUyNzREQkQ3QjdFRDgwRjVENUM0NzA1MgorOjEwRjhBMDAwRkUzRkI5RTNCQkMxMjhERjY0QkRFQjU2OTRCQjI3OEU5NgorOjEwRjhCMDAwMDZFMDJBREVGN0IwN0ZGOUJENzNFOEQzQ0RBMzYwM0Q0MworOjEwRjhDMDAwQTU2RDJBRjFGMTQ5QTNBRDQ5Qjk5Qzk2RTk3MjAwREMxNgorOjEwRjhEMDAwOTQxRUJDNzEzQzRBQkMyOUVEM0JGRkE5MDBERTJDMzBENAorOjEwRjhFMDAwNDMxM0M2MUJDN0I5QUQzODRGOENGNDIxQkQyODYwODdDMAorOjEwRjhGMDAwOUU4RDIxN0RGMjMxQ0VDRjU3QTgzMThBRjdGQzg5Qjk5MAorOjEwRjkwMDAwMUJBMDU2ODMzREVGQjJGM0M0MDUwRTM4NDk1RjdBMUI0NgorOjEwRjkxMDAwNTFCRThFRURGNDlFREU4MkREMUIzQjFEMThGRjlERTI4NQorOjEwRjkyMDAwRjVEMjdBMkVDNzA5ODJGREM0MUMwMDI3N0JCMDNEQjRGNgorOjEwRjkzMDAwM0I4RUUzNEUyOTcwQzZBMEJEQjU3NUQ3MzJGMkRGNThCNQorOjEwRjk0MDAwN0IyMkQ5ODM0ODMyQTE3NjRFQjg5RjI1RUQ0NkIwRDNBRAorOjEwRjk1MDAwNEZGMTc5NzhCRTc2ODZEQUU5QzI2RTkzRjY3NjVGRkQ2RQorOjEwRjk2MDAwODA3RTFEOEFGNjQxNUZBOUIyNDMxRDZBMDRCODc0MkJEQworOjEwRjk3MDAwRDFFRUE3MjJFODBENEI4MkRFOUZCRDMyMThERkIyMjQwNAorOjEwRjk4MDAwODRFODg5MjU3NzlFREU4REZBMDNFMDFEOUQwMEYzQjQ5RgorOjEwRjk5MDAwREI0MTdGMkIxN0E0QkY2M0IxRkUyMzMxQjE0NEQ3REQxOAorOjEwRjlBMDAwN0I1NUZGMTA2ODcwQ0FFQThBNzMwMkJDRjI1MTlGNUNGMworOjEwRjlCMDAwNEU3MTIwOTZFMTBDQjZBQkI1QTYwRjMzODIzRUM5M0YxRgorOjEwRjlDMDAwMzUzNDhFOUQyM0FFOUU4RkY1NDYwN0YzRUQ1MTRDNjc3RgorOjEwRjlEMDAwMTdBQzFFQzVFN0U1MTJFQjNDMTBDNUVEQUNCMTIyNUZEQworOjEwRjlFMDAwMTMxNjhGQUE2OUUyRjFENzBENjY2MEI1OTA3RUM2MjYyMAorOjEwRjlGMDAwRDg3OUJDQzc1QTMwMTZEN0IzNDFDNEExNTdFNzI4NjQ5OQorOjEwRkEwMDAwMjdBQzU2MTRCMjFCNzZEQTBBQTlGQzkwQjMyMDBGRTE5QQorOjEwRkExMDAwNzdCOTE4NjcyQzhDODFGQUI5QTVCRjk4OEZCMEM3NjRFNQorOjEwRkEyMDAwRkZEREEyN0VCN0IzOTBEMkIxMDkwRTgxMTdDN0E1ODhCQQorOjEwRkEzMDAwRkYwQUFCNDZGRDlBNTUzNTIyOUNGMzEzQjhGRDUzMTNDQworOjEwRkE0MDAwQ0RBNDlGNDZGQzM0NDlGMEQ3NjQyMTQ3OEJFQzIwNDc3NgorOjEwRkE1MDAwQjkxRjM4NzUxMjk0NUYyNUY5NEZDREZGRDAwQ0E0M0IyOAorOjEwRkE2MDAwMjlDRUM0MzA1RTdDOTU5MDU3RUM4Q0YxNTM5NDI3MEVEMAorOjEwRkE3MDAwRjgxRkNBMjc2REE4NjMxNzhDQzQwQTk4RTlEMzUwMzlCOAorOjEwRkE4MDAwNTNDODNBRDM5MTNFOEFBQ0ZBRUY5M0I2NEYzRThBRjIwRQorOjEwRkE5MDAwNkYxMjMzMDZCRkU3NzA3OEM3Mzg4MzdDNzA2MzQyOEY3QworOjEwRkFBMDAwMUVDODQ0MzlENTE2RERGNUNCMjlFODFGQkZBM0JBOUY4MAorOjEwRkFCMDAwNjJCREQ3NUI5MUMwRURCMDY2QjRBMzZEMDQyQTBERTNCRgorOjEwRkFDMDAwOTdEOTYyMUZBNTc3N0QwRTlGMEQ3REM0NzkyQkFDMDU1QworOjEwRkFEMDAwNzMxMUJFQUFERDUzODEyOUIwQzNBNUM4RUY2RDY2NkY0RgorOjEwRkFFMDAwMDNGQTFEREQyRjMzOUFDNzUwM0ZEQjgxRjlFMTNFMTc0MgorOjEwRkFGMDAwMkUxN0YwRUY4QjE5ODE3NDNERDI0MDdFQkM2QjVEQ0IyRAorOjEwRkIwMDAwQ0UyODI4NzdBRDU3OUMwQUU0NEQ0NkU2QjM4RjBBQ0E0MworOjEwRkIxMDAwOTNDNjg0MUM5QTZDNzM1N0Y5MEUzQjk0MjdBRDlGQUUyNQorOjEwRkIyMDAwRjQ4N0Y5QjRCMDk2QTI1OEI0QjdENkIzODg3MUMxM0E4NQorOjEwRkIzMDAwNDE0NzUzMEE3NjUwN0MzREE5MUJFODM0MDIxREQ0MjU2OQorOjEwRkI0MDAwMThBNDFERkY5RkI4OEVCMUREREVEMTRBRkZBMDNDMjI3NAorOjEwRkI1MDAwNTE4QjdFRDMyRTgzM0Y1MjlDNzY5QUFEQTgxMURCMEQzQworOjEwRkI2MDAwRjdCMzg4NzFCRjlBNjgzRThGMjZBQjY3MEREMkU5RjA3NAorOjEwRkI3MDAwRUQwMUYyODdBQUE0NUM5RjY3NjA0NkEwQUIxQjg0MUNDMgorOjEwRkI4MDAwQkY2MTdEQzczRkM5OEVGOEVFRUM1OTU1REFBMThDRkFGQQorOjEwRkI5MDAwNjcyODk3QUE2RUI0RkIzMTdFNUZENTlFRTNBMzc5Nzk3RgorOjEwRkJBMDAwMTRGNzIwNDg2QURBREZGNzYwQkUyQTM3RDc4MTcxNjYxQQorOjEwRkJCMDAwRURFRjRDMzkzQzk0NEM1OEM2RTU5RjkxMUQ5NjdBOTZEMgorOjEwRkJDMDAwRUMwNjc0OEExODlCMjFFOEI5MDZGREQxMjREMjFGQ0QxQQorOjEwRkJEMDAwMzEwMEZGQUFGNUY1M0JEMkEwQkYzRjNGMEQ3RDQwRDFEQworOjEwRkJFMDAwM0VENUJCRUY2N0QwRUY0REEwQzQ1NjhDQzJENEM4NEFGNworOjEwRkJGMDAwMjkwRTlENEFGRERDMjhGQUYxRkQwQkM2QjUwNkM3QkRFRQorOjEwRkMwMDAwQTk3RDJGQUQ2NzlGODlGOUFDNDBCRkE2NDIzRUI0RTlGQworOjEwRkMxMDAwM0ZFMkZDMEQyODA4OTk5RkU4NkNBNkI1NjUxMkVBRDc2QgorOjEwRkMyMDAwOTNFNkVFMTE2RUI0N0Y1RkZCNkI5NjBGRTBGRkYxQ0ZCMgorOjEwRkMzMDAwNEZEQkQxMkVGRUM0RDg2REM3RUY0N0VFRkVDMEFFMDEzQworOjEwRkM0MDAwRkMzRUJFNUIyRDQ2NzhERjI2RjQ4RDg0Nzc4N0MwN0IzMworOjEwRkM1MDAwNDJBMkE3MERGMTcyN0JEREY3NzlERTEwQkNCMzE1NDkyNgorOjEwRkM2MDAwQzQzRjBCRkMzMEMzMTBCQjYzRDFFNjE4QjQ4NDdBRjJGNgorOjEwRkM3MDAwRDVBRDA5QkFCQ0Q0MUZENTE2NTYxQjI5MEVGNDhERTA5QworOjEwRkM4MDAwOTcwNTVCMzY5ODMzNUMzOEJFRjcyRDFDRkY4ODkxRDNGRgorOjEwRkM5MDAwQ0Y5MUVENzZCRjJGMjczODlGRjIyRDIzQ0Q2ODk3N0MyQgorOjEwRkNBMDAwRDI2RTYxMDFENDgzQzY0RTEzQjM3MTM5QTMwMDNENzg3RgorOjEwRkNCMDAwMDVERUMzRTdCOUZCRjUxOEVBQUZFMjU3NUMyRTk1QzE0NAorOjEwRkNDMDAwNTgyQjAwQUVERUY2MDUyNDdGQzJENzUxRjFCMTZCNzIxRQorOjEwRkNEMDAwMEFDMEJCRTI1RTg1RTFCRTBBRDZCRjFCRjBFNjVENzFERAorOjEwRkNFMDAwQ0Y1NzY4RTc4NUFGQjNDQ0E3OTc0NzczOUJGNDc5MjlDMworOjEwRkNGMDAwMjdBQjA0QkVFNzMxNzcxM0RBQ0YxNTJERkE3QTU1RUQyRAorOjEwRkQwMDAwRjc1MUZGNTU2MTcyRUM3ODgyQjBBRkYyRDhEOEIzNjA4QQorOjEwRkQxMDAwQTczNEQ4RkFDNzc5Q0ZBMUFGNEVENDgxNUMxRkNDRDgxNQorOjEwRkQyMDAwQjEzQTJCQTU0N0VBMThBNTZEMDkyRTgyRjdFMkY2RjczRQorOjEwRkQzMDAwRUY0MkJBNTlEMkI2RDU4Q0ZEMzRGQTI3MzlDNjQzMTVFRAorOjEwRkQ0MDAwNEJGQkNEMENCRjVCNzA1RjE1OUFDRUMxN0Q1NTk4MjdEQworOjEwRkQ1MDAwREEzQTg4RkZEMThBRTc3QkU0NDc5MzIzNkM5RjU1QUM1RQorOjEwRkQ2MDAwQUY1NEMwOUZEOUI4NUQ1MThBRUIxOTgxREY4RDVGODc5MQorOjEwRkQ3MDAwQUVFN0Q0OUVEMTU2MUNENzlDMjhFNEYxNTg1ODk3N0EwOAorOjEwRkQ4MDAwRTFFQjkyRUI5MUVCOTNFNUQ1MkFEMDU5ODRGNjkyQkU0NAorOjEwRkQ5MDAwREIwNEJEQ0REQjM4N0Q3NTNBODBBMkUxQjVDRkIzQkJDNgorOjEwRkRBMDAwQjg1RjRBRjZCQzUxRTBDNzY4NUI0M0Y2QkM5MTgxQkRDMQorOjEwRkRCMDAwQ0VENzI5RUM3OUY2MjFGMkFEQTRCMzcwM0FBQTQyMzgzNQorOjEwRkRDMDAwNTAwMDg3QjdCMzBBM0JCRjg3N0VEQUVGMjc3ODQ4M0NGRAorOjEwRkREMDAwMDM3RkE0OEE3REIzNTREQzM3MDMzQTNBMTQ0NjQ3QkEwQQorOjEwRkRFMDAwN0M0NThCM0VGRkE1QTkyQjFCRjkxQkU4RTU1MDI4N0MyMQorOjEwRkRGMDAwQkYwQzNCNjcyMUQzQTRDNEZFMDQ4Nzc5MkU2REIyMDNFOAorOjEwRkUwMDAwQ0EyQjk4NjczNURGNUY2RDIxQjgxQzMxQjZFQ0ZFMTkzRgorOjEwRkUxMDAwRjJERDQ2NEVGNzlGMDhCQ0ZGMzJEMTMzMjExMUY1OTUzNAorOjEwRkUyMDAwNTExQjgxRjJCRDcwNjU5QTlBMDhGNUNBOUExNTA3RjJCRQorOjEwRkUzMDAwRDNEQ0M2OTE5MzkxMEY0NzMxOERGQTlCOTMxMEQ5NEUyNQorOjEwRkU0MDAwOUI5M0M4RTE1RjVFNkI2MjY2QjBFRkNCNjEwQzk0NkIxNQorOjEwRkU1MDAwRTVEQjU1RTI3M0EwMjM1QjA5RTA2MUJFQzA0M0Y1QkQ1RAorOjEwRkU2MDAwNUJDRDY5OTBDRUFGQURFMjc2ODI5RkYzMEJDMDk1RUM4RgorOjEwRkU3MDAwODQ4NUNEMUQ2NkE0NTdGMDQ3MjJGMjlCRDQwM0Q1QURFRgorOjEwRkU4MDAwRkFGMjFBRDY0Qzc4QTg0MTNFOTM3NDBDRTNDRjRFMTQ4NAorOjEwRkU5MDAwN0NFNjY2NkVBNDQ3RUY1RDc2QUIxMjc3RkVGNUIyREVDOAorOjEwRkVBMDAwNzEwNThBM0I5Q0RBMzM4OEVDQ0E1MzJFNTcwQUQ2RjM4NQorOjEwRkVCMDAwMDJDRTNCRDE1RTM2N0FDN0UyNzc4MDEzRTlBM0VFRkEzMQorOjEwRkVDMDAwMTgzRkRBQ0QwN0NFODAzRjg4MzY5Q0MzM0IxNkVEQTRBMQorOjEwRkVEMDAwQUVCRjY3QjEzNTRBOTAzRUU1N0E2QUFDQ0Q0NDlGMzVGNgorOjEwRkVFMDAwNENFRjZGOTY4MTYzODNGQjlCNjU5QjEyRkMzRTg1RkEwQQorOjEwRkVGMDAwMUZEMTg2NzZDNTI2MTNEOTBEM0VCNjJDOTUwMTlENzk2NgorOjEwRkYwMDAwNTY5OTQ4MUU5NkI3QzU5M0JGNUJERUM4RjcwMUNBQjdCRQorOjEwRkYxMDAwQzRGQjU1RUVENzdGMzgzMDJGODg4NzAzOEQ0NUU2MzRGNAorOjEwRkYyMDAwQzI1MzhFOUJFMkMzNkQyNjFEN0Q0QkZDODRGQjhCMEI2NQorOjEwRkYzMDAwOUIzQTc2QTdCQTdBRkI4QjExRjA3M0E4MEZGQzFDMEFDOAorOjEwRkY0MDAwQzU0RjczMTg3RUQ4REQwOTVDQ0UyQzdENzM5MDE1RTYwNQorOjEwRkY1MDAwNzdBQTM2Q0FBRDQ2QjAzN0E0MUU2Mjk5NDA4MDc5QzFFRgorOjEwRkY2MDAwRjg1MzcxM0FDNzA3MzNCQTkzMTE5RkE3OUJDNzEwQkVDNgorOjEwRkY3MDAwQzJGMTU0RkNDMzVDQzIwN0ZCQkI5REExM0QzMzA3RkMyRgorOjEwRkY4MDAwOTAxOUYwRkQ3Njg1RjNDNzlDODY2QjhCNTE1RjZGNEFBNQorOjEwRkY5MDAwRTQ3MkU2M0Q5MDRGOUE5OUIxRjc0MTNFNjkyMDlGM0U0OQorOjEwRkZBMDAwMDBCOTg1RjkzRkQ3QTU1MkZFQUY3NTJFNEFGRjU2MzdFNworOjEwRkZCMDAwOTREMjQzNjJCRjU0RjIwRDEwODAxOUVEQzJFNzA0QkYyMgorOjEwRkZDMDAwM0M5NzI4RTM4MUNCNTNEMTc0MjhGRUUxODMzMTA2MzQ3QQorOjEwRkZEMDAwREQ3RDMzQUY5Qjk0QzVEOEY1OUE1RURGQ0RCRTUxQUZDMgorOjEwRkZFMDAwQ0ZCQTRDOEVDOUE5RThCN0RFQUI5MERENTdFRTk5QTAyOQorOjEwRkZGMDAwQUJDRjhDMkVGMzc0MEM2QzBGMUQxREZDNEVGNjlDQ0JGRQorOjAyMDAwMDAyMTAwMEVDCis6MTAwMDAwMDAzQzAzRjhGREU2QTkwOUJBRkEzMzlCMzI3NEY5OUQ4OURECis6MTAwMDEwMDAyRTVBRjdGNEUyMDFCQUVGQjc5NDVFQTZDQjk3OUQwMTkyCis6MTAwMDIwMDAyMDhDNDY2QTc2MTIxRTk2NUI5OTMwMTY5RDNDMkVFODBGCis6MTAwMDMwMDBFMDc1QkZBRTFEOUJGMjEzOThFRkQ3NkY5QkE4M0MxQ0Q5Cis6MTAwMDQwMDAxRjEyQUZGM0Q2MTk5ODE3QTYzNjc3MURBQzBERkEzRERGCis6MTAwMDUwMDBENDAyNzg4Mjc2QzdGN0Q5QzlCRjU4QkQ2NUY0QkJFMzJGCis6MTAwMDYwMDAyMDdGNjA4Qjg5RTIwMjA3MUExMzFFNDBGQkU4QzA5NkNFCis6MTAwMDcwMDBBNDU4MDZBOTc3QjUyQUVDMDg4Nzk5ODVDOEFCQTJDNjBCCis6MTAwMDgwMDBGQURCNTAyRTk1RjkyRDZFQjIxNzc2Rjk5RTk0NzkxN0ZBCis6MTAwMDkwMDBGQUEzMzg0OUU0OTcwRjU1M0ZDNkI3MDA3RjNDMkVGMENFCis6MTAwMEEwMDBBQzg1RUNERDIzNjBCN0UxRDZGODExODUzNTYyOEE4QTJDCis6MTAwMEIwMDAyNTBFQ0FCRkU5NENGMjIzM0YxN0ZGQTA2QUE5NDg0RjlCCis6MTAwMEMwMDBDRjQ2NTE3RDhBNTA0MEY5QjFGNzA3M0RCNTg2RThDQjYwCis6MTAwMEQwMDBENTFBMjBCRUI1OTAzRjMwQjc4QkFGOEYyOUEzMzIxMDExCis6MTAwMEUwMDBGRjQ3RTI5OTE2MEY5M0E4NUVGNkQ3RkQ0NkMwRDM4MjZDCis6MTAwMEYwMDBDMTlEMjMwMkQwQUUzNDI3OTAzNDBCREE5REQ4NjhBMjdDCis6MTAwMTAwMDBGMzIwRDhBRjAzRjJENUNGNTkzNjcwMzlBMkE1NEMxRkQyCis6MTAwMTEwMDAxRTBBNEZGRjA4NUNGNzFDODNFN0ZGMjUwMkZFOEU1NTgxCis6MTAwMTIwMDBGQTQ3OTAzQ0JCM0I4OUY4MkExQ0VFODdDQzVFODJBRjM1Cis6MTAwMTMwMDAwRkY5NDAwOUNBQzcyMDlGRjE3RDFFMTA2QTY5Mjg2NzIwCis6MTAwMTQwMDBFNjlBRENDOUE4OUYwRTM1OUJDOEVFMDRGRDExM0I5REM1Cis6MTAwMTUwMDBFMjJCMkYxMTFEMUYzMkJBMjZFM0JBMEYzNUU1MzA5NDdBCis6MTAwMTYwMDA1NzcyRENGMjY2OTVGQzAyQTQzRkFBQkY1NkY1ODI4RDU5Cis6MTAwMTcwMDBDMEE0OUVGMjM1Mjk1RTk2RDI5QjZFRUU1ODNBMzYwNUEzCis6MTAwMTgwMDBENzEzNkVERkNBRjQ0QkUwNTU2Rjg4QkRCMEYwMzVENTlDCis6MTAwMTkwMDA0M0U3ODE3MkJCOEMzNzBFMEY1RDQ3MjNFN0I3NTRERTEwCis6MTAwMUEwMDBGRjcyMjFENzE3RjdGRkMzN0U5QjAxRTVGQTgwMzg4Q0Q5Cis6MTAwMUIwMDA5MzFGRkQ1MDI1M0EzQkRBQkYyNTJGMTU0OEZGODQ2MTc4Cis6MTAwMUMwMDA0N0RFNEYyMDdGQkNDNDc3RDgwOEY5MjcyRERFODE0OTUwCis6MTAwMUQwMDBCMEE0NDU4NkU2NkNGNDhGNEVCNjFGN0M2MDAyQjQzQjNCCis6MTAwMUUwMDBGNkJDQzk4REMzMkU3Qzc2NDEzRjhBRTcwOEZCQkFCN0JGCis6MTAwMUYwMDBEQzBBQTQ3M0ZCNDA0QjUzMDA5RThCNUNBREE0Qjc1RDNGCis6MTAwMjAwMDA1QjE0QzZEN0VGRTdFNzA1ODQxRTc3M0NBNEEwMkRDNTk1Cis6MTAwMjEwMDAwRThFQjFBRkMxNzhDNzVDNjA4RjUwQkJGQkEwODlEQjhECis6MTAwMjIwMDAwNTc5NDk1QzlFNDhGREJFNUNFNEU3MUEzODVEQjNEN0FBCis6MTAwMjMwMDAxNUZGMjY2MUVGODRFQTAxMjk5NzI3MjVGNUE3RkEzREU2Cis6MTAwMjQwMDA3QTk5QjU5MkJDQUFDNDczMURCMEJFQzU5QjJEN0U3RkEyCis6MTAwMjUwMDAwRUI1NzEyMDlGMkZFMEU4NjFGNTQ5MkU3RUJFQzdGQ0U4Cis6MTAwMjYwMDBGQ0MzQzg0MzU1QUM5M0U2N0RDQ0U0QUZFQ0NDQzFGNkZGCis6MTAwMjcwMDAxQjFBOURENERFRTRBNkI4QUJEMDI3NTY2MDIwOTQ0NzY1Cis6MTAwMjgwMDA1NTgyRUZBQTVCMTQ3RjgwRjg4NkVCQzUwQUQxM0Y0MzA1Cis6MTAwMjkwMDAzRDEzMjJCRjdBRUIxNUJEM0VBOTEwN0FCNDgyODVDNTA1Cis6MTAwMkEwMDA2RDVCRjRGQUNEMTM2M0E3NzUyRDg0NzE1MTVGMDZFNzdBCis6MTAwMkIwMDAwNUY2MzFDMEFDRDJFQkRGM0Q4REU2QURCOEZEMTFFNjAxCis6MTAwMkMwMDA1MUM1QkEwMzc4OUVBRTdBOEJFMjBFQjBERUYzMEE1RkI4Cis6MTAwMkQwMDBDNzg1Q0VCM0QyM0Q3RDYyN0M2RUM4Qjg2MUYzOTZGMDFGCis6MTAwMkUwMDBBNkMwNkYwODFFMjREQzJCN0QxQzlFOTVFRDBBRTFFQjU5Cis6MTAwMkYwMDAzMzYxOTdDMTFGQzU5QjI1REVBQjk4NjcxQTlFMzdBODRGCis6MTAwMzAwMDA3QTA4RTQ2NTRFOTAwRTdBRjRGRTU2QkYxOUVEREVFM0VFCis6MTAwMzEwMDBBQzI1RDYwNjc0QkY3OERERDY5OTU3NjBCQkY1RUY5MzUwCis6MTAwMzIwMDA3RjUxRUEwQzBDMzJDNDgzN0ZFN0VCNTg1MzlDRDVEQjNBCis6MTAwMzMwMDA0RTA4QjcwRjdFMkNGOEUwRUM4RDc5QTIxREMwQTM2MkE5Cis6MTAwMzQwMDBBM0FBNDU4REQwRDVBM0Y2RDIzRTk4RUZGMzk5MzE5RTVFCis6MTAwMzUwMDAzOTVGQzQwOUNGMzdDRjFBQUMzN0VBNDJFNjFCRDk5RUMyCis6MTAwMzYwMDBGOURGQ0VGQjg1MjRFMTNGRjVCMjg3MDY0NUY0QTM3QTk5Cis6MTAwMzcwMDBFQ0EwRjNFOERGOEY0QzgxMkNENEJGREQ1OTQ2RDIzRjhGCis6MTAwMzgwMDA1RjFCREQ3RjJENDg0NDdEM0M4OEZDODJCRUU0NkJBNTZECis6MTAwMzkwMDBEMEMzMTVBODk3MjEzREJDNkU1QjJDRkFFRDlGM0RCNEYwCis6MTAwM0EwMDA4REY2RkZDQ0NGNTdDNEEyNUQ3Qzc4REREQzA3N0NDMDI2Cis6MTAwM0IwMDA1Mjg3QjdDQzI1M0Q1Q0Y1OThENEMzNUU3M0E4N0UyRkQ5Cis6MTAwM0MwMDA1QTU3RjZFQjlGMjM3RDZFOEU3MjVCQTBCODcyOTc1N0RCCis6MTAwM0QwMDBEOEREMjBFRjUwMEVBRUUzRjI4RTNEQzRFNTYxMTVFQUE0Cis6MTAwM0UwMDBBQjYxQTRBRjg2NjBCREJCMkFCRDQzOTBDRTQzQkU5MzM0Cis6MTAwM0YwMDAxRUJCNkJBRTc3MkNCNTY3OEUwMEZBNUQyMDM5MDNBODYzCis6MTAwNDAwMDBBRkE0M0U5NTdBRDY2OEYwN0U5NDg0RkNBM0JFRkRFNzQ3Cis6MTAwNDEwMDA5RkMyRkFCRjc4NDkyNUY3QUU1QUREOTBFREMwRkQ4MjQ0Cis6MTAwNDIwMDAzRUU0RjZCRjBGNkY0MzBGQkM3MzJFMDBERUU1MDg2RjhFCis6MTAwNDMwMDBCMjdGMzhCQzNGNkRFMjcwM0VEOENDRTFCRTdBQ0I4MDUzCis6MTAwNDQwMDA1OEY0NkYzRjZEMUE0MDc2Q0ZBNzVCMDYxMUJDRTdBRDNECis6MTAwNDUwMDAwMTc4OTNEREVCRDJEQjNENEQwMDZGQjRGMzExREUzMDVDCis6MTAwNDYwMDA2RUY5MkU5NzgwQjc5QkMzQkI0OUU4OUQ2NjlFQ0VFQjg1Cis6MTAwNDcwMDAwNTU3MUY5RDFCQkRFQjY5OEIxQkY1Rjk5MUE4NDAxMjE5Cis6MTAwNDgwMDBGQTIzNDdCNkFBMENGN0U1N0JFQzIyNjFCRjQ4Mzg3RjE4Cis6MTAwNDkwMDBDMzVBOUU0NDNCQUE5NzNEQjNENkMyMUNEMERGODI5Nzc1Cis6MTAwNEEwMDBFRDdFMDZGOTYzNEE0MTBBMjJFMDQ0Q0IxRjYyNzFCQzJCCis6MTAwNEIwMDBFMEY4M0Q3NjhDMjM3OTRDODgxRDczODFGODU5QzIzQzU1Cis6MTAwNEMwMDA3NDdFN0Q0OUZCMUZGNkExMURBRjY4RENBRjVGNjJCNThFCis6MTAwNEQwMDAwNTkwNkZDMURGMzkxMTJBQ0YxNTE3Q0EzNDhDOTNCODM0Cis6MTAwNEUwMDBBRDU2QTQ4MzRDRTZEMkVGMUI3OTE5RUUxQjdEM0JFODk5Cis6MTAwNEYwMDBBQkRCOTYxMTNGNzcwRjBFREREN0E5ODkwRTk4MzBCRTgyCis6MTAwNTAwMDBENEJENTUyMTdDNTcyRjJGODgyRDYwQjgyRjU1NEJGMzI0Cis6MTAwNTEwMDAxODlFQ0NGNUIxQTI2OTE0MzdCNDAwREQ0NEMzNzhFRTVGCis6MTAwNTIwMDA2NDE3RkZFRTcyRjAzOEUyN0ExOEQ3MUU5QzZGRjhGNzY2Cis6MTAwNTMwMDA2OTQ4N0FBOENGNkQwNkQyRTdFMUVCQkYyRDk5RkIyQjc2Cis6MTAwNTQwMDBENUFBODFGQzhFQzU2NkVFN0ZDOEYzMEY1NzhBRjIyQkMxCis6MTAwNTUwMDA5Mzc5QkNCNzI4OTlFRjE3OUM4QzYyQTQzNzRFQUU4RDY3Cis6MTAwNTYwMDBGMUQ3RDNGQTI2NTIzQ0IzMjc3RTIyRTFFNjMwN0VEOTdBCis6MTAwNTcwMDAyM0FGOTBBRjQ0RkM2MDNGQjY4MTc5Q0VCMzg4NzgyRTJDCis6MTAwNTgwMDBBODU4NkM3RkFCNjg3RjZCQ0IzQkI0MkYwNzlFQ0IxMzE3Cis6MTAwNTkwMDBBODc3RTdBQ0IwQjhEMTdFRjVCRDY2MjFCQUJCMjc5QTgzCis6MTAwNUEwMDBFRkEzQjBDNDM4MjNGMkQxMkQ0MkNFREVEQTcyOUYwNzFBCis6MTAwNUIwMDBDRjNEQ0M2OTg5RDEzMDg1NzE3QzRDQzQ0RjczNzExRjlDCis6MTAwNUMwMDAzNkRENENGMUQzNTI2QkQ3RjNFODY2REY5RTdBRjA0RUZFCis6MTAwNUQwMDAyQjJDQURERUMwRUQ5NjdBMjdBM0YzMjM5NzgzRDk4RTFCCis6MTAwNUUwMDBGMTU4MjhEQTdFMzZFMTVDRjRBMzhGMEYyRkM2MzhFRDgwCis6MTAwNUYwMDA3OEM2MDk2QjFDQzE1NTk3NUY2Q0U2RTVDQjkzNDc0REY4Cis6MTAwNjAwMDA3OTI4OTNCMTNGMzFENzcwQzRGNzYyODQwREQyNDM1OTMyCis6MTAwNjEwMDAxQ0M1MDFBRUM3NzhCMTEzNTMyM0QxRDkwQzIzRjMxOUVDCis6MTAwNjIwMDA3OERBODRBMTM1MTkzRjlFMjZENjdERDMzODE2ODg4MzgzCis6MTAwNjMwMDBGNTA2RjZFQUUzRDdCMzAyODZDMDEwQzBDM0Y1QzY0MDlDCis6MTAwNjQwMDAwN0QyQjVDMUVBMzJBMTNGRTAyOTU2NDZBMTlGQkM3ODQ2Cis6MTAwNjUwMDBFNTg1Q0RGNzlFRTQyQjY5QkU4QjBEMDYzRUNGOUYyQTI0Cis6MTAwNjYwMDBGRUE3MDA0RUI3MDI5MzIzN0RERTY2NjRCQkQ0NTExQzA3Cis6MTAwNjcwMDA3RjQ4N0YzNTRFOTc4RkVBMkRFNUY0MkRFM0U2MTI0RjQ0Cis6MTAwNjgwMDAyM0ExRkI1MEY4REUyQUU2MDdGRDM0QzU2MjdCNzNFNDQ0Cis6MTAwNjkwMDBGOEQxODNDOUQyMEZFNkY2RTYyMkMxQUY4QjI0QkQ2RDM3Cis6MTAwNkEwMDBEMUYzRTkzNkU0MTczQzlGODM3NjJEQzBFRDU2OTFGNkUxCis6MTAwNkIwMDA0NUVGQUQ4MkRFNUIwNUJEM0YyOUYyMTczQTVFQjU4NTk5Cis6MTAwNkMwMDAwNTY4RERBRjU5MDg4RjcyRENFQjQ1RkE0MjMyQjc5QjAzCis6MTAwNkQwMDBFNTNDMjQzRDMzMTE4NzMyODBFNDQwM0EzQUQ0RDI0MDlECis6MTAwNkUwMDA3NkQzRkNCMDM4MzAwQjhENTdBOTkxRjIzREYyQzc3MDJDCis6MTAwNkYwMDAxNjUzNzNGNzNDOUM4RjcyNTU5NDFCRTlGQTU2NzNFQkIzCis6MTAwNzAwMDBBMDVBNUJFRjdBNzIxRkI3OTQ3NTlBRjhCRDFCMTFDRjkwCis6MTAwNzEwMDAxMkZBNkE5MjZBQTM3MzQxQTU0QUI0MUJFRERGOTMwNUVFCis6MTAwNzIwMDA3NjlGMjEwRUUzMkQyNjQyNkQyOUQwMDNDQUU3OEZBMkMyCis6MTAwNzMwMDBGOEJFRkQ5Q0I4QkJBNkExNUQ1ODFBNkIzNjYyN0EzQjI5Cis6MTAwNzQwMDBFQkI0RTdFNDA0RUQ5MkQ1MDUyQUVFQzFDMUMwRDU1MzYwCis6MTAwNzUwMDAzNEM4MzdBMDNDRTFGOUZCQjQ0QzhBMEU4OUZDQjIzRkE3Cis6MTAwNzYwMDA2MkY5OERERjAxRkUyOTdGQzcxNDBERTRDNUM5Mzc0NTQ1Cis6MTAwNzcwMDAzOTVCNEVFRDRGQUUxMjc0RUM1QjMxMDVGNzM5NEVGRTJFCis6MTAwNzgwMDA0QTk2RkY5Qzk3REYyQkNCRUI3OUY5RkRCMjdGOTE1RjA3Cis6MTAwNzkwMDAxQjU2NUUxRjU2RkUyOENGNzczRDVDM0ZDNTg3NzAxMjAzCis6MTAwN0EwMDBGQjMxQTVFMzE1OTIyNzJFNDE2N0E1MkIwMzA0REY1MkU5Cis6MTAwN0IwMDBDMzBFOUUxNkIyODAyMUY3RkNGNTZDMjkxRTU3MzJFRDUwCis6MTAwN0MwMDAwQjFFQjJBM0RFNEU0OEQzNUNDOTUwQ0Y5NkU0M0Q4RURCCis6MTAwN0QwMDBERjE3NEU1NzdDNjY5NDkzMUZGQTA3MEJCOTFFRjE1QzI2Cis6MTAwN0UwMDBBRDRCRDA2RDU0MkFFRjRGQzIxQkZBRjkxQUZCQkJEOEEwCis6MTAwN0YwMDA3RUQ2RTFCQzkyNzRGRDdDRkZFRkY0MzMyRkI1NTczRkZBCis6MTAwODAwMDBFNjk0N0ZBMzlGQkQ2MUVCOTI3NjUxNTlCQTk2ODNGRDIyCis6MTAwODEwMDBCMTQzODlCQUYzNjU4QkZFRDMxRDg3NzYxNUMzRjM2NUEzCis6MTAwODIwMDAwMEZBNDUyQjVCQjM0NzQzRkY4QjVFNzgzNUJCMzJDNDgwCis6MTAwODMwMDBFRjVFNzJDNkMwMzRCMDlGNkFDRTMwNEE4Rjc3RkNDRDZGCis6MTAwODQwMDBFQzgyRjkyQ0Q5REU2MTlFMENGNTZBMjAyRDBBOTlENzJECis6MTAwODUwMDA2Mjc5NEU5Mjc1MTk2Nzg0RThGNUMxMjkwNjIxOUZENjAxCis6MTAwODYwMDBEMjdDMTdCRDcwRDQ4OEY4NUM2NDY4M0RGQzE4QzY3QkU4Cis6MTAwODcwMDBDNjJCMTFGNzVENjM0NUJCRkQ3RERDRTcxQTk2QzJFNTJCCis6MTAwODgwMDA5RTI3NTNCQjJDMDVDRjQ1QTBDQzQwN0REQzEwNzk5RjIzCis6MTAwODkwMDBGRTRFRDE1RjY5MzQ5NzZGNzNGM0VDNTYxN0MwNzlDQzc1Cis6MTAwOEEwMDA4NzdDOUZCOTcyN0RDRTI4OENFMzVFOUU1NDM4MDZGQjEwCis6MTAwOEIwMDBFQjNCMkVEQUNERTNBMkVEM0MyRTVBRUFFQzVDMEVDMjA1Cis6MTAwOEMwMDA5QkQ1QTY2Q0I4Q0Y3QTI1NjM1MzFFOTE3QzA2MkMwQjYyCis6MTAwOEQwMDA2RDhCMkQzMkRGMzY2NTYyM0VDNUI5Mjg3RkMzMjM1QjQxCis6MTAwOEUwMDBFRjQzQkVEOTEzQ0RDRjREQ0MxOTNCM0MxQUU1NDI1NzRGCis6MTAwOEYwMDA0RThDQzEwMUYyNjI1QzYyNTkyREUyNkZDRUQ4MkIyNzdCCis6MTAwOTAwMDBFM0Y3MDI4QjdENzAxOThGQUIxMzVEOEM0QkY0NENDMUY4Cis6MTAwOTEwMDA3MkFDOEY3MTBEQUY5OUM3QjlCQzZGQTkxNEU3RjI4RTk1Cis6MTAwOTIwMDA4OEYxNDZEQTQ3QkU1NkMwQTEzNjg1OUY3M0REMDM2ODVECis6MTAwOTMwMDA0NkJCNDNDRTQzOEUwRjg2Q0FGMjRFRThFRkQwQ0FCNDEwCis6MTAwOTQwMDA5MTZCNUNCOERGNTE1MDQzRjQyNEM2RkY2NUEyQjczNDA1Cis6MTAwOTUwMDA3NDdDNThFRTA4RkM3RUExRjNCODM5ODVEMzZGMERFMkE0Cis6MTAwOTYwMDAwREYxOThBRjMyMkRDNDVGOUMzMTMxNDY5N0JGNzE2QTRCCis6MTAwOTcwMDAwMkQzNDJFM0FEMzc2NkU4RjJCMzRCMDdFOEVBREYzMjcxCis6MTAwOTgwMDBFRjMyNUQ3OTg5QTUzM0I3RjYyMkVDREYxQUJCM0QxQTQ5Cis6MTAwOTkwMDBFREIwOEZEQkJGRjlDQkFENjhENzZENTRERDBBQUM2NzI2Cis6MTAwOUEwMDBDMTZCOUJGRTMyMDE2QTlEQzJFMzk3RkNGRTE0QzVCRDdDCis6MTAwOUIwMDA4RUUxNzkzNkU0M0RBMzY2MENEREFGRjk4Mjc1RDJCOURDCis6MTAwOUMwMDBDMDkwRkQwMEREQkVDQjIyQzcyRTNBQUZGQTYzRURENzUzCis6MTAwOUQwMDAzQzkwMjJGQ0RGNTE2QzE0RUFCRjUzQjU3RkE2MzhEQjk0Cis6MTAwOUUwMDAxMjFCNUZDRjE3QUYxRTMwRTMzOTA2M0MxNzcwMTZFOEI1Cis6MTAwOUYwMDBGQjFBNkNBODIyOUZGQjI4MEU1REQ0NzZDMDhDRkU5MTVBCis6MTAwQTAwMDAzQjg1Q0JFNTI1OTk0QjhENjA5MUIxMUE0ODUxNkY0Q0QwCis6MTAwQTEwMDAwNkY5MTQwN0Y0RDFEOUMxODY2RkM3NzMxMzM5NzYzQTMyCis6MTAwQTIwMDAwNzVFN0Q2NjA2MDg2OUE0MjNERkIwQTU1MDZGNTE1M0E5Cis6MTAwQTMwMDAzMUU1OTc5Qzg5QTY3RURGNTMzQjI3RDM3OUU0NTcxNDkxCis6MTAwQTQwMDBEQTJGMjhDOTk4QjMxMkVENTFBQzdGMDc4QzU3RjJFMjI4Cis6MTAwQTUwMDAzNUM1MDg5RjI1REJGOUJEQTcxMkY1NEZCOUQ4Q0ZFMjAwCis6MTAwQTYwMDA5NjYyNkE1RkEyQjIzRDBBRDgwNzUzOEFCODlFMkQ0MUFBCis6MTAwQTcwMDBERDBFNzkzNUNGQkUwNkY1QUI2QTBFMEM3RTFDRTU4OTFFCis6MTAwQTgwMDBEOTRFRjIyNEVFQ0MyRDM0N0VDRDE5MkJCNUZGQUQ5MDhFCis6MTAwQTkwMDAxN0E2MkUzRUFGNDk2NzNDRjQ1REUyQkQzRDg1RUYwM0VFCis6MTAwQUEwMDBDQUJDMjk2OUEzMTFFRjE1OThCQTE4RDVCRkVFQ0NBNTE5Cis6MTAwQUIwMDA5NENBNzVCRTM1RjRFOTQ0OTQ2M0E2QTRBRjI3NjcwMEQxCis6MTAwQUMwMDA3REJDOTVBODM4QzhEQzA4OTNCN0E3NkJDN0M2QjEwODJBCis6MTAwQUQwMDBGMkE4Njc5QzMzRkNGQ0FFRTUwQzNGQ0ZEQjlFQTZGRDg1Cis6MTAwQUUwMDAwOUY5NkFEQURENUQ0NkRDQkY2MTM2QUIwM0UxMzU2RERECis6MTAwQUYwMDBEQzQ4NTc2NTA4MUZBOTNCNkUzNjIzNUU0QzBGQkQ2RjVGCis6MTAwQjAwMDA0NjdENkM4MUI0MjhBNEJDNUE5RTNCMEY5M0M3RkIwNDVFCis6MTAwQjEwMDBERkM5N0IwNzUyQkYzMERGNkNCMjQ3NkYxM0ZFQjdFNDBCCis6MTAwQjIwMDA5MzM3NDU3REQ5QkUxMzY5MUNGMUY4QjI4NUZDQTczRjA4Cis6MTAwQjMwMDBBNzc5OEZBM0JDRUMyQzYwQjM1RjIyRjlEODk5OERGQjA5Cis6MTAwQjQwMDAyNjNGRDZGQzAxQ0Y1Njg1RUNGQjJFM0FDRjNFNkQ5QzVFCis6MTAwQjUwMDBDQjgwRkIwMUREM0RFQkUwRkM3QUJFNzU3QzJDRUFCRjZGCis6MTAwQjYwMDBBN0IyMTVEOEVGN0I1NzVGRERBOTQxN0YxRDNGMUIzRDI1Cis6MTAwQjcwMDAxQUU1QkUxQzU3NDlFNUY3NzA5OEEzRkIzQkY0RTc2QUZBCis6MTAwQjgwMDA1RThGNzEyMTVGOTdBMDczOTQxQkI0NjNFMTNCQzNGODQwCis6MTAwQjkwMDA1RkNERUI5NkE3MTQyOEFGODkwNTdGMTZDNjJGN0EyMzYxCis6MTAwQkEwMDAyQTgwNzREQ0YxNDY5NDExRjU0MzdEQTY1NzQ5MUQ4M0Q0Cis6MTAwQkIwMDBERjg3NEM0NEZGNEQ2QkI3MTgxOUQ5Mzc5QTAxQkZGNzNGCis6MTAwQkMwMDAzNURGRjNDOUE3NzAzQTkzN0NFOTZERTJGQzUyMjZFODYxCis6MTAwQkQwMDBCNDVDRjA5RjU3RjBEMUU5REExNEUyQzNEMzc3QzNBNDMxCis6MTAwQkUwMDA3MTlGRjM2RTY1Rjg3NkI0MDc1Qzc2RjcyMDU3OTAyRjA3Cis6MTAwQkYwMDA0QkQwRUY4MUVGMjU5N0M1OTNGRjE3QzI3N0M0ODc4QjQyCis6MTAwQzAwMDBDRjM4QThCRkVBMzMyRUMxRTc0RUNBNEI3RTJCMTdGQzY0Cis6MTAwQzEwMDA2MjExNzZDNDNDNDFERjQ5RTlERTkxQTkzMEZGOTIwNkJBCis6MTAwQzIwMDBFMDc3MThDN0JCMzIyRDE3RjkyODQ4MkY2NjA3RDIxNTcxCis6MTAwQzMwMDBEMDRCNkE2NTA4REYzNDc0RENDQ0QwRkVCMDI0N0E4OEVGCis6MTAwQzQwMDA1RUU2NDExQTZBN0Y1NEY0RDgxRjhFQzlDOTMwRUY2OTM1Cis6MTAwQzUwMDA4RDM5QkE3QjE2NzlBOTE3NDdGNzAzNTJDNUJFQkMyRDRCCis6MTAwQzYwMDAzMDA4RUQ1NTUzNkQ5NDFCRUY4MzlENEFFNEZCMzNDQjY1Cis6MTAwQzcwMDBFRUU1RjA1QjY2RjIxNEExRkRCMEVDNTFDNTBEOTgyMUQ0Cis6MTAwQzgwMDBCQjAyRTU1MURFQkU1QTczNjhCQ0YxRTYzMzIzOTgwQjE0Cis6MTAwQzkwMDBFMDcwQzM5OTgxOTQ1RTlFRTQ5RDg4RjgyRjNCMzM1M0E2Cis6MTAwQ0EwMDBDMDZCQzRCRkI1MEYzODQ2RTNGMTI1OTNERkUyREU4MEE5Cis6MTAwQ0IwMDBGQjZDNTE1RTE1RjE3QjI0OEIzOTFFMEM4OTJGNjEzQzM2Cis6MTAwQ0MwMDAwQ0UzNjI3MjdGNTBDNjlCMkNCODlGMUFBMjI3QkYzMURCCis6MTAwQ0QwMDBCNjY0QTNCRkQzMkJFRTU0QTBERjQ3NUJEQ0YxQTczQzg3Cis6MTAwQ0UwMDAwMzk0MUZDQkQxMjhGRTM0QzdFMEJEMERGMUJBNzA4NjQ2Cis6MTAwQ0YwMDBGRjA1MTNFNDE3RERCRjJEMTZFM0REMTI5RUFEQzZDMDYwCis6MTAwRDAwMDAyMEQ0OTNBRDAwNDc4QzgzQjUzNkFCQzU3RTZFQ0ZDNDdGCis6MTAwRDEwMDBGMEZEMkY0RUQ3OTI4RUMzRTk3QkUxOTlGRTQ0NEZBNzk5Cis6MTAwRDIwMDA2QjJEQTQ3NzRFMDNCREIyMTBCRDIzRjU4RDk0RUY1MjA5Cis6MTAwRDMwMDBFRjQ4N0FBRTM2NzJCOTU1NkQ4QkEzNzMxNTQxN0QzMzhBCis6MTAwRDQwMDBERDgzNzE1QzM2OTQ5RjdGMEJFQTlCQTcxRTE4OEZGNDlFCis6MTAwRDUwMDA3RjMyOTFDRTM1ODdEM0ZGMkI3NUE5NzRDRTQ2RUE5MUE5Cis6MTAwRDYwMDA3MDdEMjNFNUI5OTRFRjUyNUZERDk1RTY1RDhCNzAyQUM3Cis6MTAwRDcwMDA3Q0VFQkZCN0ZEMUQzRTVENjdFNDdBRUIzQUEzOURFOENDCis6MTAwRDgwMDBFN0MyRTVFNjAxMjEzNzBGRThFNEU2OTIzRUU0RkVDMzYwCis6MTAwRDkwMDAxNzQ5RkY4REEyM0VEOEFGNjQxN0EyNUMwRkVERUZDRkNECis6MTAwREEwMDA2OTg1QkY0MUZBN0QyMTk1RUJENTFGNkJERTdEQzlGQkJGCis6MTAwREIwMDAxNzUyQTUxRjcxNjFGMkZFNzE1MUZGN0NGMkJFNDNDODRDCis6MTAwREMwMDBGQjcwRjlDRUEwM0Y5NEVGMjc1RkJCODRGNkE3RjczMzAzCis6MTAwREQwMDBEMDA3QThGN0RBNjM1QzlCODRGQzI3RkQxMDFERTczRjcyCis6MTAwREUwMDA5N0ZDRjc2NENFRURFODQzRkVFRkY4REZDODdGNDk4RjRDCis6MTAwREYwMDA5MjVGMjQ3RjQ4N0UwOEU3MUZDOTBGNTNFRTAzRkYwRjYxCis6MTAwRTAwMDBGMUY0MUVCRjVGNTQ2REY0NkRBMUZENDM1N0NDNDhFNDZGCis6MTAwRTEwMDBDQjFFQkI2REJCNDI3Q0Q2NEIyRjA4QkUwOUYyODk1RTUwCis6MTAwRTIwMDA0RjQ4QkU5MDdDMjJGOUEzNUFGMDQzNDUxODNGRUM1NDNBCis6MTAwRTMwMDA1QjFGMUMwRkVENkU0RUYzOUUwRUU1OEJDNTJGODVFQkYxCis6MTAwRTQwMDA4NTNFRTkwQTIzODZBQzIyQjE5NjIxNUQ1NTQzMUE0QUI0Cis6MTAwRTUwMDA1Nzk2M0VGOEUxNEMwRjNENUQxODNGMUNCRTQwN0E4QTI0Cis6MTAwRTYwMDA0OTMzNTNCREZGNDM3QThBNDk0QjhBNDg0RkI2QjQxRjcyCis6MTAwRTcwMDBEMTlFMzg1REZCRDc1QzE3Q0NFNzc0MkVDOEQ5OUMyMDc3Cis6MTAwRTgwMDBCRDRERjkyM0UzRjZDMjAwNkVGN0VGODlFNkVCREM2M0I0Cis6MTAwRTkwMDBDRUEyNzhDRTk0QjNGQzVDQUJBNDRCODk2NzY5MDc1NEFGCis6MTAwRUEwMDA4ODc4NDI3MUJBQzc4REYzOTVGRUMyODVFMkQ5OTJEODhGCis6MTAwRUIwMDA2OTQ2M0ZBNDAyRDI1MEZEREY5N0JEM0IyNkVERTJGMDJDCis6MTAwRUMwMDAzQzIwRURDMkVDQzRDOTAyQ0YzRkEyOUQzODNEMTI1RTZBCis6MTAwRUQwMDA5OUMzQTk4QjQzODBGRUJCODFFQ0I3ODA5MThFQzhGNDg3Cis6MTAwRUUwMDBFOTU3QUNFMzcwOTZGOTU1MDFBM0Q0QjcwOUE4NkY4MTBGCis6MTAwRUYwMDA1RTY2RTA3OEZGMkVCRDk0MTQzMTExMEY3Qzc5QUE5NkJFCis6MTAwRjAwMDAwRjc4RkY4NUM4QjM1N0E3MjI3RTY2OEU5M0U1QkY2RDI1Cis6MTAwRjEwMDBENjA2QTJEQzYxMzI4RTRFNzE5MUY3NTQ5MUY3QkRGMjg0Cis6MTAwRjIwMDBGNjQ0QTgzRkU1NDExNjhDQjM0M0Y5QTRGQ0I4OUUzOEJCCis6MTAwRjMwMDA4QUMyODJGNTk3M0VCQUZERUQ2NkMyMzMzRkY3QzJCQzY2Cis6MTAwRjQwMDA1RDQ2QkVDRjI0RjJCOTkwQjc4N0U0Qzc4NUU1RDdGM0Y1Cis6MTAwRjUwMDBGQUIxQzYyRUM2Q0YyOUZBMzlCRkFBQjhGNUM2RTlDNzc1Cis6MTAwRjYwMDAxMzYyOEYwMDI2MjdFMzc5ODI2OURCMTUwN0M2NDE2RTdECis6MTAwRjcwMDBDOTNGNDlGQkIxQzFGNUJGNDFFQjVGRDJBRTg4RkNDRUEyCis6MTAwRjgwMDBCNzcxQkRCNzZDRTdGOTQ3MUVGRDQzQjM2RkEwRTgyRkZCCis6MTAwRjkwMDA5OUUyNjRGNDY3NkE1NTM0M0NGRkIwNzg5Q0UyRUY5RkI1Cis6MTAwRkEwMDBEMzFCQ0U4RkE0RTlGRDFCRkMzM0VBREIzMzNDN0Y3N0Y4Cis6MTAwRkIwMDAzMUVEMTFDRkQ0QkUzRkI1MEY1ODJFNjJGQzU5Rjk5MUQ3Cis6MTAwRkMwMDBFRjNERkM5N0FDMjdFMjA5RDQzRkMwRjI4NkQ2QzhFRkNDCis6MTAwRkQwMDA5N0JDMjhGOEIxMTNGNzREMDg1RTFGMzUyM0ZDM0FDREI2Cis6MTAwRkUwMDAxMjlFRkY2OEM2NzgzN0REOUY4MUZDQUI4RkZFNjNBQTM3Cis6MTAwRkYwMDA2RjE4OUZCRTE2QjZGRTczQ0RGRkYxMDhFQjc3RTlEQkU1Cis6MTAxMDAwMDAwN0NFMDVCRjBEQkREQTBCRkE5OUFGQTdBNzM4QTM2N0M2Cis6MTAxMDEwMDBENzY5RTgyNzBFRkM3RkI0OEI5Nzc4QTI5QUQxRkUwRjkwCis6MTAxMDIwMDBEMkM3NjFBMjhGNEUxOUNGRUY0NUZGOUY0RjlENjgyMzE2Cis6MTAxMDMwMDBGQjQ3RDQzRkRBOEM3QUNDNjNFOEE5Q0ZGOTQxRDIxN0M5Cis6MTAxMDQwMDA1RTA1QzJCMzczOENCN0ZGRTBEMTIzQ0QwODFGQzAwRjdDCis6MTAxMDUwMDA5NTUzREU3ODBFN0U2ODBEQ0JFNzg3RjE4RkEwN0ZFMjk3Cis6MTAxMDYwMDA1Rjk0RjMwMDlGNDExMUU0Q0MyOTAxOUYyRkM0QjlFQTlBCis6MTAxMDcwMDBDRTQyNkUyNzc2RjZFN0E5MzM5RERCODVGRjEyRjgzNjYwCis6MTAxMDgwMDBBNEYzRkE5REQxMjE3MDA4QzEzM0ZDMDVEMDBGMDk1OTkyCis6MTAxMDkwMDAzN0MxRTlFNjQ0QjlFRUE4OTJBOUIwQUU0RTI3MkZCNzAyCis6MTAxMEEwMDBBNTlCRUVGN0U1MDdGM0UxRkRDNUE2NDc5NTIwNUM4MjE5Cis6MTAxMEIwMDBGRDVCREU0MUI5NzRCMzgwOUIzM0RERkE4RThGQ0I0Mzg5Cis6MTAxMEMwMDAwNUY5QjI5QTA4MDRFODYyQkJFMjUzRDE0RjQwQkE4OEVFCis6MTAxMEQwMDBCMEVFQkZGN0E2MkI1RjU4N0JDRDc0OEVGNjVEQkREQkZGCis6MTAxMEUwMDA2QjYxRUQ5OTI5Rjc2MkRBMEJCQzREMERDMzZCNzExODdBCis6MTAxMEYwMDA1RTI3ODZFNTRCNjVERUFGOTM3RjUyMkU5NkI3QUQ1RERBCis6MTAxMTAwMDA5NTlDODg3MTQ5ODVFRThBMDZFOTM5QTUwNEU5Nzk5MUFCCis6MTAxMTEwMDA0M0QyNkYyQUMxMzU0OENGNjlFRjIwRkRDRTY4OTVGMkUyCis6MTAxMTIwMDAzMEZEN0UwREYwMzYxREU1RTFGODYwRkUwNjk0MTc5NDYzCis6MTAxMTMwMDBDRjI4RDFFMjQyRjU0NTI2OTVDRjZBOTJGNUIzRUUyNzQ2Cis6MTAxMTQwMDA3OURBMjhGQkNCQTZCQ0M0MjNGM0Y1MkIyMUJDRTYwQTM1Cis6MTAxMTUwMDA3REUxNzNCRDgzRTUwQkRCNzlGQjQ5OEZFNUJDNzM0RTA1Cis6MTAxMTYwMDA3RTY4MDk4M0NCRkFCMEJDMkZBQ0ZFNDNFN0QxMkY4RDRDCis6MTAxMTcwMDA2MUVERUYwRTJCNkYwRUNCQUYwQkNCMzdFOURCOTdDRENECis6MTAxMTgwMDA1Mzg4MEZDQjgwMUUxMDExRTdFM0NCOUJEMjdCRUNENEFFCis6MTAxMTkwMDAxRTdEQUFEOEM4NkVEM0YxRDU5NDA2OUVCRkZEQjExMUFECis6MTAxMUEwMDAyNTREQjY5MDdDQkFCQjI0OTQyRkU0QkQ2MDRCMjIyMzFFCis6MTAxMUIwMDBCRTMwRjUyMTJGNEJEMkY1RkU1OUNGN0E4Njg2RUI1QkY4Cis6MTAxMUMwMDA1RUZFMDlGRTMzOERGNjc3NzQ3NkMxNEU1NTlGRUY1MDYzCis6MTAxMUQwMDBFNUJDQUY3QTY3QjkyRDY0MUY5NDVENTk4MkYxOTVCRTY1Cis6MTAxMUUwMDBGNzVCMjY5NDRDQ0MwQ0IxNEI3Q0UzNEJCNDkwNzVDQUE2Cis6MTAxMUYwMDBGQTkzQkYzRkFCRTI3ODc3QTY4RjJGRDk4OEZCMzk4NTZBCis6MTAxMjAwMDA2MjFGRDJDOTUzRDA2QjJBRUFDRDFBMTE4Rjk5OENFNzhECis6MTAxMjEwMDA2M0IxNUU3NDYwRDBCMjUwM0I4NEI1MEVDNjc1NzZGQzg3Cis6MTAxMjIwMDA4Q0RGMUJGMDM1MDA3RTMwQkVDNkRDNjY4Q0E3NzRDNDM0Cis6MTAxMjMwMDBDNUFENzgwNkVBRUZGQzk5QkEwMkY1RThGRTE1MDk3NDI3Cis6MTAxMjQwMDAyRUU5NEZFOURDRkZEQzE5RDcyRkI5MDJGMjFEMzFCN0M3Cis6MTAxMjUwMDA5QkYxQkQ5MjhFN0IyNjUxQkE0M0Q1NTY3NzAzQUYzREE1Cis6MTAxMjYwMDBGOEQ4QjUyNUI2NEJCMDNDOEVFMEYzOEJGNDQ5MjVGNUE0Cis6MTAxMjcwMDA0MEQ3QkZDNDRCM0JEMERFRUI3NDI0RTNCRDA2QjZDNkZCCis6MTAxMjgwMDA0NEZCN0E4Q0I5OUYyNEJBQjlERjMyMTJGREU3QjJGQTc3Cis6MTAxMjkwMDBDQjY4REZBQUZDNTdEMzI3RDNCRDg1NTUyNkRBQ0Y4MDhDCis6MTAxMkEwMDAzRjNBN0ZFMjVEMzM4OUNFM0RDRDZCMTRBOUVGMUE0QUY4Cis6MTAxMkIwMDBERkY4RTFFOTA2QkMxRkQ5RkQ4NDQyRjcyNUFFRkNCQTkwCis6MTAxMkMwMDBGNThGMjNGMERDNjNEMzAwMzdBMkU2NzVCMEVCRjEzQzc5Cis6MTAxMkQwMDBEMkE3RUI4NkQwM0Q4OTgzNTFCNTc0RUUxM0VBMzNBQ0M3Cis6MTAxMkUwMDA1RkY1OURFQkRENjlCOTU4NUY3NUUwRDE4QUMzRjAxREVDCis6MTAxMkYwMDBFREUxQzNGN0FBNEZFMUZEQzNCMjU4N0IzNDlFOTczRUEwCis6MTAxMzAwMDBGQ0JERUI1REI0NkJBMURDQjExMkJFMUY1RUI1MjAxOTU0Cis6MTAxMzEwMDBFREFDQzM4QTJCMTZERjEyNzlGMUIxNTkyNUE5Njk3ODkyCis6MTAxMzIwMDAyRkRGMjJGMDM5Q0I1RTA2N0M1RTY2RThBMTE3RDIxRjY0Cis6MTAxMzMwMDA5NUYxM0NGRjYyRkFBQzkyNEQzMEZGQzM4RjBFQTE3MzYyCis6MTAxMzQwMDA1RjgzMzNCNEQ2NzRDMEQzRTkwQzZEMkJBNjA3QzU3RDdCCis6MTAxMzUwMDBFNTM3N0VFMEZCODVCRjNGNTE5RThDRjRGNDdCNDFDN0FGCis6MTAxMzYwMDBBRjlGMjk0RjJFMEZCMTc3MkFCRjMwMTJERURGMzBCQjdGCis6MTAxMzcwMDA5NkUzM0NERjg4Q0U1MkU4N0MzNjZCNERDMDc4RjczQzc0Cis6MTAxMzgwMDBFMTdGMDBGREFFRDgxNkMxRUU3OTM4NUQyNTNDNzVEQ0Y1Cis6MTAxMzkwMDA5Nzk0OEY3ODBERDI3MTI1Qzk0QkYyMUIyMEZGRjY2MzBECis6MTAxM0EwMDBFNUE0RDcwRTU5NTZCMDgzNjgzNzhBRjM4QjZDNjcxNDVGCis6MTAxM0IwMDBCRkVGQjgyNUNBMUY5NTgzRjE0RjZEMzJCNjYzQTlBRDUzCis6MTAxM0MwMDA4MzY3RDg0M0Y4NEVENEZGRDhDN0NGRTc3RTBDRjVEMTVBCis6MTAxM0QwMDA3RkZCRDhGNzBGN0JFODNFODRBQzVGMTU2QkY3QTEzMTNDCis6MTAxM0UwMDBGMUI5REQ2RTQ0M0NFQzM3RDYxREM2NzM3RDk1NEY5ODQwCis6MTAxM0YwMDA0OEVFNTczRTkxNzQ3NzM3Q0ExQkEwMTc4QzhGODVBRjg0Cis6MTAxNDAwMDAyQjM1QzM0NEYwRUE5MzBGN0Q3Nzk0NENENEY5MDc3N0RBCis6MTAxNDEwMDA5QzkzMEYwRjNGQjZBQzY0QTNBRDZGM0VBQzEyN0VDQTc3Cis6MTAxNDIwMDBFNDI3NEM3NDRFQkQ2QThDREQ4OEZCOEY4NTRGQkNCOUI4Cis6MTAxNDMwMDA4OUVFQUQyRThEMUE4NUY3MTNBQTlFQjAxMEJFQkFFQ0I4Cis6MTAxNDQwMDA3NjlGMDNGNzQ3NjNFREM2Nzg0OEJGMTY3NjQ4MTI1RTZECis6MTAxNDUwMDBBRUM0Qjg4Q0NBOENENjUxOTREMkJEMDRCOUFGNzc3NERGCis6MTAxNDYwMDBDNTgzMEZFMzMxQ0E2M0NDM0Y3MzJDQzBFRjE0MjIwQzQ5Cis6MTAxNDcwMDBFMDcyNEFERUNCMEFEQkU3QUJERUJCQ0Q1Q0MwQ0VCMUFGCis6MTAxNDgwMDBDRjc3OUVGRDNEMjA1RjdBNDdFMjQyRjdGOTYyMzJDNDkyCis6MTAxNDkwMDBCRDlGOUU3RDNFMTNCRDBCNTEyNUY2Rjk4QUQ2RjNGMzExCis6MTAxNEEwMDA1QjU1MkJGOEZCMUQ0NTA5M0NERTdCQThDRTg3OEZDNDFFCis6MTAxNEIwMDBFMjdBN0QwRUJDOUZGQjEwRDcyRjU1NENGMTVCRTE5RjZDCis6MTAxNEMwMDBEN0FDNUY2QUE0RkI4RkU5MUMzRTY1RTIxREE3ODM1MTgwCis6MTAxNEQwMDBFRTZDRjREMzJCOUY4ODIyQjg1NjNEQjlFMDJGOEY0MjkzCis6MTAxNEUwMDBCQkFFRkE5MkM0NTBCRjM4NDdEMDAzRjRDRkYwOUVBRUUzCis6MTAxNEYwMDBFQ0U3RjNGQTlGNjcyM0REMTdGRDFBRkM1QkJDRUYxN0RGCis6MTAxNTAwMDBDRjVFQjgzOTA3RjE5NDk2OERGQjkxQjI1RUQ1Q0E5RjM0Cis6MTAxNTEwMDAwREU2RjVDMDNGMDYzRkI4RUM1RTk1QkZCRkY2QjI4NTVECis6MTAxNTIwMDBGNDFERjA3ODJBMEJCOUNGM0NBRjcxQUZEOTNDMkM3OEMxCis6MTAxNTMwMDBGRkVCNTNDOEUzOTVGQjkwN0I2MDY2ODQ5N0JDOTc4NDcwCis6MTAxNTQwMDA3RkE5NzlDMkRFNzY5MUZDQTA3Nzc4NEIwRDBBREQ1RjJBCis6MTAxNTUwMDAwMkM5NDVGNzdFQUVDRkUwRjZFQkM0MEM3RURFQTkyQ0M3Cis6MTAxNTYwMDBEQjRERjc1RkFBMUZCMEI4NTdFNkYwN0U3QUVFNTVFMzgxCis6MTAxNTcwMDAzOTI3NDM2NzI1RUQzRkZFRDY0MjcxOTE5QUM2MjgyRDQzCis6MTAxNTgwMDAyQTk2OUY4Qjc4NjkxODlEOEIzNjlBNzFERkM0QzVFNUMyCis6MTAxNTkwMDBDNEY1ODJGRTZBNUNEM0FGNDE3QTgxRjI3RDQ2M0M4NzE2Cis6MTAxNUEwMDA2NUU3RjJCMDNBMUVFMENFRjVCMDY2ODA3MTRFRTJCRjVDCis6MTAxNUIwMDAwNkYwN0VEMzQ2ODQ4Q0FGODhFRkQwOEYyQjM2RDhFRkUxCis6MTAxNUMwMDAxRTAzNkJDMkI4MEJENkJGNjQwNEMyMzE2MUU2NkM5Q0NCCis6MTAxNUQwMDBERkYzMkFGMTMxMkNGRTgxNzE2OERGM0RBRjhFNDZCRjBCCis6MTAxNUUwMDBCNkVDREU5RDkzRDc2MTdFRUI0OEJDQjFDMENBNUVGODE1Cis6MTAxNUYwMDA4MEY0QzUyMjgxRkYyRTcxMUVBQzFDRjI3OERGN0Y3RTQ1Cis6MTAxNjAwMDAwNjk3OTM1RTk1Qzc3QkU2MEI3ODQ5M0E5MEU1RDVGNzQ4Cis6MTAxNjEwMDBGMkYzNTBENUFCMkM2NEJGNTREN0ZGOTVGQUFEQjY3NzMzCis6MTAxNjIwMDAyNkEzRENBRDdFRDk0NEY3OTgxNzg5Nzk5N0Q3NjdFNTZCCis6MTAxNjMwMDBFRjAzQkEyQTM3QzVEMTdCQ0I4QjdEMjU2NkNDMkY2RUM1Cis6MTAxNjQwMDA1MTI4MUY2Qzk3OTQ4RDc0N0FCQ0YxOTU1OEE0OUY4MzkwCis6MTAxNjUwMDA1MTgxNDFBODg3QkE5NzQ2QjlGMTFDOUU4Q0I3MUQ2RjdFCis6MTAxNjYwMDAxQ0Y0MTRDNjY1RTYzOTNBRUQ3ODFGNjlERUYyMDE0RUM2Cis6MTAxNjcwMDA5NERCRkIxRDAxMzM5NkVGNkZDRDMxNjA1RTczMzhGMjYyCis6MTAxNjgwMDAzMUFGMTkyRkE3RkM3MTcxRUU4NEZFOTA1RTE0OEVFN0M2Cis6MTAxNjkwMDBDNTVCNzY5QUZCQzM3ODJEODIyRUJFNzhGRTgzQzFBOEU3Cis6MTAxNkEwMDBBN0FBQjMzQjA3QTMzRTAxM0ExODlDODE3MDdFNTYyMTNFCis6MTAxNkIwMDAzREJDNjQwQjNGQTcyRUU5NjAwOUQyMDFGMERENDI0MTM5Cis6MTAxNkMwMDAwNzRCQjZCRkYyMTNFNDg3MjU4OEZGNTFCREU5MDhFODUwCis6MTAxNkQwMDA3NDE3N0Q3RjY5QzM2NEM2REJFRjQyM0E5MUZBMEJGMjVGCis6MTAxNkUwMDA4RDI2MjdDNkRGNDQxRUM2QzFGQzVBMDE0RjI4OUZDODVECis6MTAxNkYwMDBDQjdEQzNGODM5QjcyRTNBQjc1NzIzRUUyQkY2QzhBN0UwCis6MTAxNzAwMDAzRUYwRkM4MkMwNjM3OUJEODVFNEVEMEIwMkNGNURGNzRFCis6MTAxNzEwMDBCRTFDOEI3OEZDRTJGOTlEQkI3MTlGQTRGQTI1QzVDMTY0Cis6MTAxNzIwMDBGN0FCQzJGODQyQzBBNTA2RTExMDRCRUIyMEJCQTIwNjA2Cis6MTAxNzMwMDBENzFEMUI4NDQzMEZGRDBCN0VBQzYxN0M5RDcyREQzNTk0Cis6MTAxNzQwMDA0NjAxMDc1OTJFREFCRjg4RUI0QzQyRjgwQUI4NkQxRkU0Cis6MTAxNzUwMDBDMkY5NEZGMDFCRjIzM0JEQ0YyM0Q2RTc3NUVBREZEREM4Cis6MTAxNzYwMDBGRTMwODNFQjgzRDc0NEJBMThFODAyRUY2NzMxQkM5RUEyCis6MTAxNzcwMDAyOEU1MDQxNDdEQjE3NTAzQzU3RDI0QkVFNEJDMEYwN0M0Cis6MTAxNzgwMDBGNTg4MTZFRjBDRTJCMUNCQzBFRjJGODZFQkNCNzcwNEQ4Cis6MTAxNzkwMDBGQzBFQUM0QUM5NkUwM0I4MURERjRDQ0Y1NDEyQkQxQTAzCis6MTAxN0EwMDA0M0M2OTM3NDIzQzcyQjdBNkVGQTc1Qjg1RUU4M0Y4MDAwCis6MTAxN0IwMDBGRENCNzFGN0ZCNjI4Q0Q4Q0Y3RUM2RjkwM0U5MTNFNTQ4Cis6MTAxN0MwMDBBN0U0Q0JBMjg2MzlENzhEQzQ3M0JGQkUyRkVDMDM4NkE2Cis6MTAxN0QwMDBFMTdBMzlERDFFQ0VFMEU3N0YzNEI0MTNBMEJERDZBNjkyCis6MTAxN0UwMDA1MERDRjk4MEYwRTcwRkFDN0EyNUI2M0MwNDRFODc0NDE0Cis6MTAxN0YwMDAzQjQ5NjdGODg3RjEyODM5REYzRDRFMUVDNzBEOUZCNzdCCis6MTAxODAwMDA5NDQzNzJERTQ1RjdDQ0JBMEVCRkNCRjk0QjdBOTVGNDEwCis6MTAxODEwMDAyOUUxMjhFOTU0REU3RjBCQTc1N0EyMzVBOTNGNTU5RDQyCis6MTAxODIwMDBCQzI3RkQ3ODRERTY1NzY2QUZBREY3RjdGMEJDQjQ4MzQzCis6MTAxODMwMDAwRThBRjNEQkRENDk4Q0M3RUIxQjUzNzc4NURFRjc4MTFFCis6MTAxODQwMDAzRjVCQThERTA5RDEyN0NEQzYxMDdEMjJGNTdGNERBMkQyCis6MTAxODUwMDA3NjE0RjE1NTlDQzlDRjk1MUM2M0FERTYwMkU4NzdGMThCCis6MTAxODYwMDA5MUNFQzlGODRFQTJCNDNCQUZGQzNBQTBDNjYxMUM2QTQ3Cis6MTAxODcwMDAzQjNGN0YyNkUxQkRGOEM0MkVBMkZCNkE3MTJGQTlFQzg1Cis6MTAxODgwMDBERTBGNEFDNjIyN0RGRkM2NDRGQjMxNjVBQjI2RDFGRDgzCis6MTAxODkwMDBFMzA1OUJFNkU2MjFGREUwN0QwNjk0RTc0NzM3OEUxOUQ4Cis6MTAxOEEwMDBDRDlGRjM3MjI0Q0ZDNDdCMEQxQjFGOUM3OTBCN0M5RkIzCis6MTAxOEIwMDBEN0E2QkE0OUFFNDMzRkM4QUY2NTc3OEU2NjQ4MkYwN0IzCis6MTAxOEMwMDBBM0JBNEFDNkEzQkRGRTUzRDU4MUY2RkE4NDRENjNFRTkyCis6MTAxOEQwMDBDNkZBMTNFQ0ZERTI3MTNEREFDNjA0Q0E2QkM2MzhEMjEzCis6MTAxOEUwMDAwQkQyQ0U5NUU3RjIxQTRDOUMxRTQ2NjU3MkZFQjlBNDQ3Cis6MTAxOEYwMDAyNzU1QzQ3OUJDODZDMUI4N0ZERUJEMjE4QURFNDEyQTY2Cis6MTAxOTAwMDAzNThCN0I5Q0FGQTU5MDNGNTE2M0M2MkI4NTc0MkY5NDdDCis6MTAxOTEwMDBFQ0IwRjk2NjY2NERFM0U3OURBRDY5RjA3REFGQTlGM0U0Cis6MTAxOTIwMDA0RUQ0MUY3QkVGQjQ4RkE0NzNGNUVBNzc3OUU1REM3RUE0Cis6MTAxOTMwMDBFNkZCODUwOUZBNzc4N0U0M0M0NjhBRjFDM0ZCOTNFRDIxCis6MTAxOTQwMDBGNzg4RjNDNjA3QzVGQzhGMzZGRTY2MjZFQUJGQTM5QjYxCis6MTAxOTUwMDAwNzM5NzFERDlGQkYxNjQ1RTdGMDNGMEY3QkI3RjA2Mjk3Cis6MTAxOTYwMDBFRjY5MDFERDg2REQ4MzVBQzlFNTQ1QTZGRTlDOTZBNDk0Cis6MTAxOTcwMDBGM0YzREU1M0ZBMjgzMTZDM0ZFMERDRTc4QjRFRDQzMUQxCis6MTAxOTgwMDBCQTRGNkQwMTVGOThFQzk5OThFRkI3RTFCOUJFQ0ExNkVFCis6MTAxOTkwMDA4QjAzRUZCMzFDNDJCQUE3RjMzQzJBQkY3NzZCRTU3Q0ZECis6MTAxOUEwMDA3MDY4RUI0ODNGRkE4RDk1MUZGMUZCNDVCQkQ2REU0M0NGCis6MTAxOUIwMDBFNzBBMkFDMEFFQzRBMzU0M0Q3NkYyNDM2QjY3MjIxQkVDCis6MTAxOUMwMDA5QzcyN0I1N0UzM0IyRkE3MzZGMzczMTBCRERFMkREOEY3Cis6MTAxOUQwMDBCQjZENzdFOEJCMDUxNzZCMUY1RkE4NUQyQ0UzMEEzNTZECis6MTAxOUUwMDA5OUZBN0JGMTEyQUVEMjNGN0EwM0YwM0Y2RTU0MTA0RTVCCis6MTAxOUYwMDA1RkQ2Q0QyN0JCRjg0NDlEOTdEMjkzQ0E4MTA3MjYyMDk2Cis6MTAxQTAwMDBERERBRTNFOEJDRkVFRkRCMUU1NEYxOUQ5NUVBRUQyMzQxCis6MTAxQTEwMDBCRjQzRkY3NkJDMkRDRTgxRkNGQTY1REQwQURBRUYzQ0QwCis6MTAxQTIwMDA1MTU3NEI2OUYwNUQ1NzNGQTU1NzZFRUZBMDc2NUZCNkYzCis6MTAxQTMwMDA4RDZFQzc3QkFFQUZEQkUyODRCQzBGREZEN0UxNzhFQzA1Cis6MTAxQTQwMDBFQkZFQUU1Q0Q3QjE5RjcyN0NDQTc5MUZEQjNDMzcxNkM4Cis6MTAxQTUwMDBEN0Q1RjE3ODQyRkIxNTg4Qzc5ODM4MDdEQTc3NTVFMjcxCis6MTAxQTYwMDA5Q0M3RTE3NURDN0UzRTYyOEQ3QjY2MkE5RTBGNTk3RkE2Cis6MTAxQTcwMDA0MzMyQkU4MzUzRDE3MUUzNENGQzVFRjk5QUUyNDBCQjIyCis6MTAxQTgwMDBERkZEREFGNDU4OENBMzdENjZFQzhBQzU3QjREOUZBREYzCis6MTAxQTkwMDA5M0Y3QTFGQ0Y0MUVFOUY4NjI0NkZCNEVFMzAzNDZFNjI5Cis6MTAxQUEwMDBDQUUxNUJDQzQ4Mjc1NzlDMzBEMkJERDNFM0I4MUY4NTMxCis6MTAxQUIwMDA3MThGRUZBMjI5RUVDMUM0M0U1M0M1QUIzQzVFRDJFM0E5Cis6MTAxQUMwMDBDNzBBM0Y2RTgyNThGNzVCOTk0RUI5N0Y0MERGOEJDNkRECis6MTAxQUQwMDBGMUVGOUZBRkRGMzYwREZCM0JCQUQxRTRDMDc5N0ZCOUEwCis6MTAxQUUwMDA5MUJGQ0ZCMDEwRkMyRkJDOUE3MjY0MzNGNzZGMTZCNjVCCis6MTAxQUYwMDAyQUU0MEYxRkREMENGQTE5RDY1NUJERDRBNEYxRkI5QUM4Cis6MTAxQjAwMDA3QUZBMkI4MjcyM0NENzI4RTk2RkExRTYyN0JBMEU3RkJBCis6MTAxQjEwMDAzRjIzOUVCNUQyQkRBRTFGOEIxRTAzOTk3QTNGQUQ4NzgyCis6MTAxQjIwMDAwRUZCQzJCRjgwMTNGMjJERDJBMUM0RjNDMjc1N0NERkJECis6MTAxQjMwMDBEQ0Q5M0FCMjAwRTk0OUUyNURDQTA1Nzk1RkExQzFDQ0JFCis6MTAxQjQwMDBGODdCQTU4NjY4RkEzRDgwRTkzNjk3NDk4MUY1REY5MEY0Cis6MTAxQjUwMDBEODM1MTFDNUU3QjAyQzZFN0ZBODQ1MDYwREVGQTFCMUIxCis6MTAxQjYwMDAwNjRCQzRGN0E4RkUyNkU0RTg5QzJDNDZFOTM3OTlEQzJFCis6MTAxQjcwMDA1RTkwRjdCMTY0MEEwQkM5NDIzRDNEM0RDNkY5OEQwQjNECis6MTAxQjgwMDBBQTFDNUVCRjc0OUExMUU2M0Y3RDgyRjNDRTAxNkVDMDNGCis6MTAxQjkwMDBEQkZBOUY0QzMzMDJERDRFMUZFRDdDQjkzRkU0QkIzM0QzCis6MTAxQkEwMDBFRkUyRjlDQjlENjM0QzkwQUZBRjVGMzE2RDIyRDRCN0JDCis6MTAxQkIwMDA2NzY5ODczMjQzQzY5MUZEQzJGN0NGRjFCQjNGQzE3QjU2Cis6MTAxQkMwMDAwQ0QzMUEzM0JGMUY3NTUyRTkxRUIxMjIyNzU4RkY3RDZGCis6MTAxQkQwMDA4NUVERkZCRDEyQ0M3Nzk5MThCRDAzRjM0REE2OUM3RjEwCis6MTAxQkUwMDBFNDc0NEM5Njc2M0E3MzRDRUZFRkU1OENBREEyRjM3MTRBCis6MTAxQkYwMDAzRTdFQkYwNUZFM0NENjY0QkM3RkM0RTlBOTVDREU3N0FGCis6MTAxQzAwMDA2OUQyREY3NzYxNkU3RUZGNEFERTQzOTJGNzhDMkUwOTQwCis6MTAxQzEwMDBERTlGNUE3RjMxRjdBNzRFOUE2MEJENzFCREVGQjMyOUExCis6MTAxQzIwMDBFRDdGQTBGN0IwMUE3Q0FDMkI4QUYwQTBCRkJGNTIxRDhECis6MTAxQzMwMDBDM0RGRjc1QkY2RjIxN0JCOTBBQzE2NDg3QjA1OTU2RERBCis6MTAxQzQwMDA1RUYwRkUzRTRCRTVGQkZFNzcwQTNBRkNCQzhFMEQxQ0I3Cis6MTAxQzUwMDAwOEFDN0M3RDY3NjdBQzBCMjY3QjYyNUE2MDMwRjJCN0JDCis6MTAxQzYwMDBDQkUyQ0RDODQyM0Y3RTdENDNFNkIyNDRCQ0Y3Njk3MTBBCis6MTAxQzcwMDA0Rjg1RkE0N0ZDRkM1RUU1NjI2MTZGQjI4RDQ5ODJDRjA5Cis6MTAxQzgwMDBENUMwRDU1MDZGNEZDRTI1RjQ3RUMzQTAyQ0VFNDc5QzE3Cis6MTAxQzkwMDBDODA5NjRFMzdCM0FCRTFDRUVERjQwM0QzQUJGNTZCQzQ4Cis6MTAxQ0EwMDBGMjlBMjRBQzc3NjJFQjNEMDMyQjAwNkYxNjdDQkZDRDFDCis6MTAxQ0IwMDA0OTI5QzNGQjRGRDc0MkRGRTM5Q0Y0QUUxQjUzNjk5RjE2Cis6MTAxQ0MwMDBENjRGRkQ2MUJENThENEVCQUVCOUE5M0M4RUNFRUZDRDU5Cis6MTAxQ0QwMDA0OTNDNDlGOEY3QzIwQjRDMDFFRDUxODM5NTk5NzBGRUQwCis6MTAxQ0UwMDA5N0IwRjUwRUU0NTM4OTFGRjlGRUU5QjI5Nzc5RkM2NEM5Cis6MTAxQ0YwMDA5OUQyRDU5ODgwRjlFNzE1M0FGRkY2Qjk5NURGRUJFOTY3Cis6MTAxRDAwMDBBREU3MzY5OTExRDRGM0Q3Q0ZENUJEQ0YyM0RGMTlGRDc5Cis6MTAxRDEwMDBCMUUzNDA1M0IzODQ3QzE5Qzk0Njg2QkVFMzVBMjVEQTQxCis6MTAxRDIwMDA0RTUyNEI1REY4REVEQkIyMjQyQkJEREJCMUVDODkwMUZBCis6MTAxRDMwMDBBNDRGRDhEQjc3QjBEMDdBNkM3RDAyRDFDN0VBMUM5NTZFCis6MTAxRDQwMDBFMEJDQTA4REQxQkIzQjI1NkRFOTc0NUU3MTZBOUI5M0FECis6MTAxRDUwMDBEMkQ4MzNBOUY0RkRFODMzN0ZDQ0U1RjI4N0UzQTFFNEUwCis6MTAxRDYwMDBCRjUyMEFFOTdDRDA3RjBEQTE5NEY1RjVBRUIwQ0Q0QTAzCis6MTAxRDcwMDBGNzY4OTdFREU1N0E2OUQ5NEQyQUM1Mjc5OUI4MUZFRTFFCis6MTAxRDgwMDAxMUQzRjFEODlBMjg5RUUzNjE5MURGOEZGNUM4Rjc2M0VDCis6MTAxRDkwMDAzNUQzMzlERjhGOTVGMEI1MDhGQzg0QkYyNzdCRDNERUMwCis6MTAxREEwMDBEMUE5RjQxRUFCNzg0Rjc2QjZBOEQ3MjlFRTZEODVCRkMyCis6MTAxREIwMDAyQjdCNEZFQzY0N0E1Nzc2QjY1NjE1RjE1RDU5QTMyRkZECis6MTAxREMwMDBDQThERjZBRDI5RDNDNkRGNkJGMDg2QkYzM0RCNjVDNEExCis6MTAxREQwMDA3NUNGQ0NFN0VGQ0NERTM0M0JFNDVEMDRGOENGOTRGRjY1Cis6MTAxREUwMDAxNUM5Njk1MzdFQUZGNzgxNEM0OERGMTY4RkJFN0VCM0FECis6MTAxREYwMDBDNEZGMjVFQzkyNzNCRUUzOUI2OUE2NzdERThDRjg5RTQ4Cis6MTAxRTAwMDAzM0U0Njc4QTc3N0NEMThFNDNGQkZDOTRDNkRGOTVCM0JECis6MTAxRTEwMDA4ODc3QTYzQjU5NkUyQUYyRkRDNUJFRDNGQ0ZGREJCQjFCCis6MTAxRTIwMDBDQ0UxRUYyRjg3QkZCNzdDRDlFNjY1QkFGQ0YwRDZGRkNGCis6MTAxRTMwMDBEMEQ1QkZCQzZEQTVBRTdDNjQ2MDhEQUU3Q0Y0OUU1RkRBCis6MTAxRTQwMDBFQUYyNjMzQTFGRDNENTFGQkJFRjI5NURGOTE1NURDRkM5Cis6MTAxRTUwMDBFQUNBMjcxQzc5NDk5N0JGQjJGQjc3QkFGQTU3OUZEOUNDCis6MTAxRTYwMDBBMUNCMTdCMDNGRUFFQTE3NTkzRkQwRTUyNzM5RkVBMUM5Cis6MTAxRTcwMDBBQjdGNERFQTQxNURGOUI1QUVFM0JBRjIyOTQzNEZFQkQyCis6MTAxRTgwMDBENzYzRjRGRTBERTU3Qzg5RkJCRjc1RURBNjMxRDcyRjM2Cis6MTAxRTkwMDBGMEZERTc1OTg5MDY3QUFGRTMxRjU5QzI3RjExNzRGNzQ1Cis6MTAxRUEwMDA1N0E5QjcwN0IyNkM5NDVGOTNENEZDMDBEMTVEOUJDMjc1Cis6MTAxRUIwMDBERjFGMEVEMzYzQzZFMzFFMERFMzcxRUMxNTdFRkYyQjBGCis6MTAxRUMwMDAwRUVDM0U2M0M4NzhGMTlBMTUxQ0MyNjAzRUExRDhBMTAxCis6MTAxRUQwMDBDQjI3Nzk1Mjc1RjU1MzY2QkI3NEU1NjlERUExQkFGMjdBCis6MTAxRUUwMDA4Q0Y5NkU1RDNFQUI3NjlDQUU3RUJGMTU5QTJFOUZFMzVECis6MTAxRUYwMDAyQkQ2RDUxRkQwRTREMUU1MDdCNUNDRDZENTFGQjJDRUIxCis6MTAxRjAwMDBBQjJCQkZDNDNGNUY1NzdFRDlFNjVBNUQ3RTc4RUIwQUE0Cis6MTAxRjEwMDA1REZEQ0JEQjdDQkFGMjkxODEyNjVERjlFODNEMkRCQUZGCis6MTAxRjIwMDBGQzk4Q0U3NUJBRkE2M0Y3Rjk3NUU1NTc3NDZERDY5NUQ2Cis6MTAxRjMwMDA0RjM4RDJBQUNCNUZEOUREQTZBQjdGRjU5OTgwMkU1RjUzCis6MTAxRjQwMDBDMEY2RUFFQTE3NTlERkQ3RTUyNzM5RkVBNkFCN0Y0RDgxCis6MTAxRjUwMDBFQTAxNURGOUI1QUVBM0JBNzI2OUI3NEMxOUZBOTVGRUZDCis6MTAxRjYwMDBCQkIwNjM0QURDRkZENEI1RjcxNThBNzdBNTVGNTJEQ0I2Cis6MTAxRjcwMDAwRDJFNTg0Rjc2N0ZBRUVGNDE4MDQ2RTFCQjg4M0UwRjc1Cis6MTAxRjgwMDBDNTdEOUM3OEIwMEZFNTE0REVCQjc2RjI3MzMxQTUxNEU1Cis6MTAxRjkwMDAzRjRBMjQzQjg3NTQ5MTBCQ0ZFOTgwMUQxMDhCREU1NUJGCis6MTAxRkEwMDA0RTBFREFDOTMxNDE3QjJDRjM2Q0M4MzlCOUYzRDk2M0QxCis6MTAxRkIwMDBENzY0MzM5QUM3NUREOURFRkNFQzI0RjQzRkI2NEVBNjU1Cis6MTAxRkMwMDA3N0MxOTk2RjM1Q0U0M0JFNzNGNzZFRDg3QkM4MzJCREVCCis6MTAxRkQwMDBENjdBODQxOTQzRUNCRkJENTEyRDk5QTNDRUUxQkY1RkUyCis6MTAxRkUwMDA2QjNEQzFGMDlERTU5RTdFNDVCQzQyODFGNTJEMEJFOTIwCis6MTAxRkYwMDBGRjAxRjAxNzhDMDMxOTZCQTkwM0JFQzE3REUxM0EwN0ZECis6MTAyMDAwMDBFNTFGQUE0QkE1RkNDMzc1MkU0QUQ3RDUwREE1RjRCMTgzCis6MTAyMDEwMDAzQTM3OTVBRkFGMUI0N0Y5MjdFQjM0Q0FGQkVCOEEyOTU4Cis6MTAyMDIwMDA3REFBQ0U0M0RGMzdENkNEQTZGQzMzRTAxNzYzQkExOUJECis6MTAyMDMwMDBGQzY0NEM5RjA1N0YxN0NCQjc4MEZGOEJGOTE3RUE3Q0I4Cis6MTAyMDQwMDA5NEI2RDYzNUQxRjc5N0VBNUEyOEJGQkQ2RTFERTU3RjA1Cis6MTAyMDUwMDA1QkU3QTdCNEFENkUzM0E1QkZBQjZCQTVGMkY2QkEzNjlFCis6MTAyMDYwMDBDQUJGNUUxN0EwN0NBMDZFMEZFNTc3RDQ3NTUyN0U1NzZECis6MTAyMDcwMDBERDNFQ0FFRkFFRUJBMjc0NEZERDExNEFERkFBRUJBNjNDCis6MTAyMDgwMDBGMkI3RUJDRTUwRkU5ODg4QjcyRUNGNTY3NEY3OTU2NDEyCis6MTAyMDkwMDA1RUJFQzcyMEVEQkY2OTY4QkYyMzcxOEMzMzdEQTlCM0Q1Cis6MTAyMEEwMDBERkMzRUNFODcwN0NDODcxODJFRjI3MEM3RUFBMjFDNEU0Cis6MTAyMEIwMDA3RkYyNjU3M0ZGNEFCRUM3MTBGRThFMDIxM0Y2QTk3QzNECis6MTAyMEMwMDBGNzU0QkVENzUwMjlFNjU1MjVGODYxMENEMkU3NTBBMjQ3Cis6MTAyMEQwMDBDRkI3MkZDNjVGOTBGRUEwMkRDOURCNDJGNDk5NjVGMDAzCis6MTAyMEUwMDA5MTNGNkNFM0Y3ODkyRjRGRjIzRTk4M0QwNkY3MEIyQjlCCis6MTAyMEYwMDA3NkQzNzgwRTM3RUQxQjk2NTgwMjQ5QjM3MkU5OUQ3MDdFCis6MTAyMTAwMDA4QUNCRjUzNTVFOEQzOEY3REQ2N0Y5RUI0NzMzRDE5RTI1Cis6MTAyMTEwMDAyRUZFNDFBNTc3QjZERTM1RDk2N0EzRkZGRjhDQzBDMzdECis6MTAyMTIwMDAzM0Q5MDY1REJBMkRDOUJCMDlFN0YzQURCREY2MzYwMzU5Cis6MTAyMTMwMDBDQ0ZGREJBQjk2M0U3MzQ3NEVEMDRGQkUxRTVENERGMERECis6MTAyMTQwMDA2RkE2MzM5Nzg5Q0UxNTMyRURDRDFDQjQ5QkMwQjBDMkJCCis6MTAyMTUwMDBGQzJDRTZBMzc0NUNBMkY3MDVFQ0U3NjYzMEI4MzFFRjFGCis6MTAyMTYwMDAxRDZGQzk4RUI0QUVGMDc5QkQyQUYwRjU2QUI2NDE5N0ZECis6MTAyMTcwMDAxRTQ4RjJCNjIxRkNCRUI1NkIzNEFGNzdBRkI4NjYzMEZGCis6MTAyMTgwMDBBRTRCQ0VBQkJGNzg3NzY0MUFFQjdFMTJFN0Y3RUQ2QjAwCis6MTAyMTkwMDA1RjFENTYwNjA0RTEyRkZENzFCQUQ3OEY3MjZDQTkyMjFDCis6MTAyMUEwMDBERUI1RUJGNThFMDA5NTk3REVBOTkwN0QzNjA3RkMxOTFDCis6MTAyMUIwMDBEQzFGOTJFRjA2OUNBQTM1RDEzQkYyRjhDRTAwRUU5RkQxCis6MTAyMUMwMDA5REFBRkRDQzg2RTQwQ0Y1MThFRTZGMzRFMDAxMUQyOEM1Cis6MTAyMUQwMDA2RkY4MjlCRjRGNUY4QUVGNjI4Q0MyNzcwQkFDQkNERjEwCis6MTAyMUUwMDBCQjE1QTJCQkE0RTQxQzdFRkYxOUVDM0RGMjlGMTJCQjAxCis6MTAyMUYwMDBFOTlFMUVEMEM5OUYxMTZFMEJBRjUwRTlERUY5QkIwNkY4Cis6MTAyMjAwMDBGRjYwODVGNjkzMkJDQzBBQ0NBRjJBMTFFOEEzN0ZERkMxCis6MTAyMjEwMDA3NEIwNDREQzE3OTBERjgxQkUzRTQxQjg3REY5RUFEODQ2Cis6MTAyMjIwMDBBMTE0N0Y3RkZEMEExN0MyQUJDMUMwRUYwRkY5REU1MkM4Cis6MTAyMjMwMDBGOUVGMkUwOTExQUQ0RTE4NEU3MTQ2NjY3NEJCMzE1RTMyCis6MTAyMjQwMDA1NDIyRUU5Qjc0QTg2QzQ1QTRGN0M0OTU3RTlDOEVERTQ4Cis6MTAyMjUwMDA0REU1RUZFNzM1ODRFREIzRkM1M0QwRDUzRjA1QkQ5NTkzCis6MTAyMjYwMDBFQ0Q4NEJFRjA4MkREOUMzREYzQjY0Qjk1REMzNDJERjI3Cis6MTAyMjcwMDA5REU5NTlDRjhBQjcyRTE5MThCMjhFOUFCNjAzRkM3QzA1Cis6MTAyMjgwMDAwNUVCMUExNjdBOUUzQzVEOEMyRkU5NDgzNURCQkQxQkE5Cis6MTAyMjkwMDA2Q0ExRjNFQkExNkJENjBGRTkyNzFFRTg3QTAwRDFGNTBDCis6MTAyMkEwMDA2MURDNTc5QzY2NzFDNUNEODJCNDBCNDA4NEVGRkI3ODJFCis6MTAyMkIwMDA3RkVEQTBGMzQxRjI5Q0QwM0NFNkExQjQwQUM4MDBFOTRFCis6MTAyMkMwMDBEOEUzNUI0QkVGQjkyRUM0NUY2MkM1Rjc3OEM2Q0RDREJFCis6MTAyMkQwMDBDNjdDMERFQjlFOTgwQTcwQkJBOUE5RkU0RDdDMEVFRjQzCis6MTAyMkUwMDA4Njk2QjU5MzMwQkUzQUMzNUZGNjI2QTZEMzM3MkE4N0MzCis6MTAyMkYwMDBEMTRGMDVCRTg4RUY4N0YxMTBBNTc2MTUxRUM5QkM2NUM0Cis6MTAyMzAwMDA0QkMxMkFEQzdBOTlBNjcyN0NCMDNGNzI3QzAwREQ2OEYyCis6MTAyMzEwMDBBQUIzRjczQTgxMEZEMkY4M0EzNDVBODcxQTVCQUNFMzgyCis6MTAyMzIwMDA4M0QyOTU0QzUzMTI4M0U3REQ3QkY4NjJEQ0EyNEY3MEI5Cis6MTAyMzMwMDA0QjhEMTlCQjY5REZCQ0U2NzU4QjEzRjFCQzkwNzFCRDg5Cis6MTAyMzQwMDAxRDhDNjc0ODdEQ0Q4OENFMTdCMTY4MzdENjNCMjZFODBGCis6MTAyMzUwMDBGQTU4MTYyM0JBM0VBNjMwQkFBNzJFRUQ0ODk2RUQ0RDkwCis6MTAyMzYwMDAxRDM1MjBBODc3OEYxOUZDNzlCMTAzNDgyRkJCNzFCREFCCis6MTAyMzcwMDBCQjUzNkY3MDYxMUM2QzUxQTI5NURFM0YzRDE2RUZDRkQxCis6MTAyMzgwMDAwRTdCRTc4M0RFMjM5MjcxQUMwNzRDM0NBRTE0M0UyRkVDCis6MTAyMzkwMDA2NURDNkVGRTdCMTg2NkU2QzNGRDA5RkNGREUzM0NFNEVDCis6MTAyM0EwMDA2NzdDMzc0N0ExNzdBMEJCOTBFRjREODUxRTU3QTRGRUYxCis6MTAyM0IwMDAxQjQ1QkY3QkJFRTdGRUFFMEZENjgzRjcxQjdCOERFM0NECis6MTAyM0MwMDAxMEUzNDRGMzcxQTRGRUU4RjlCREU1NjRBNjFCNkY3QTNGCis6MTAyM0QwMDAzRkNFQ0ZFRkRBMzU5QTdGQkQyMTlFRTQ0RDlBRDVFQjAzCis6MTAyM0UwMDA0MTdDQzlCODhFRjQwM0Y3RTQ3QzNFOTBGQ0Y1RUYxQTBCCis6MTAyM0YwMDAzMkQxM0VBNzc3MDhEMEZFQkU4QUNCQTU3NzREMkU3QTg0Cis6MTAyNDAwMDA3N0Y3REQ4MjFDOEFERjRCNzk3QkZEMzgxRUZGQkE1RUQxCis6MTAyNDEwMDBDNkJCRjJDM0UyNUQ2MUYxMTY5NjFGMzlGRUM1OThEQkJCCis6MTAyNDIwMDA4NEUzNUVDMjNFOTJGMEExMzhDQjhFN0MyM0UxNURGRTU4Cis6MTAyNDMwMDBCRUQyMEVFMTdGOUUyQTRFQ0M0NTNBRkY1RDNGNTU3N0Q2Cis6MTAyNDQwMDBBRTQwQTY2QjQ0N0NCNDM5RUNCREVCMzVCOUNCMUM3OEZGCis6MTAyNDUwMDAxRUMwRjIzQ0RGRUZCREJGMzA3QTdFRTgzOUY0MjcwN0JCCis6MTAyNDYwMDBGMUYzMjlFRUMxMDU5QjExNEVDMzZDRkU0MjUyQ0I5QThCCis6MTAyNDcwMDBEMTg1RjM1NkM0M0EyRTczMDA5QzBENjg2RjdBNDQ5QzQ0Cis6MTAyNDgwMDBEMzZERTVGMUE1ODlBNDk3MjU3RTJGNTQyRjNGNkJGNERBCis6MTAyNDkwMDBBRjhDQzY3NTI2RjJERjE5QjBBRkIzOTJEQzU0NUJCNUQyCis6MTAyNEEwMDAwMDFFODlGRTcyRDA4QzU1NDhCN0NDRTgxOThBRTM3NEI3Cis6MTAyNEIwMDBFNDQ1MzMxQkQ0RkZCNkMzNENGMUE3RDcwREU1QkZDNjI3Cis6MTAyNEMwMDBGM0VBREQ3RkIzMzAzQ0RGRDA2QUNGMzBBMjcxREJGQUI0Cis6MTAyNEQwMDAzREZGNURBQjU2RkI4NEM5RkNERDQ5MTY4M0VGNjM4RTdGCis6MTAyNEUwMDA3NEIwQTc1RjQ0RTQ4ODdCNjFBRDBBREJDMzFGNjlENTg0Cis6MTAyNEYwMDA2MkYwN0RCNzU2MDMzQjdEMzVDQ0VCMjVEQkE4MDcyRjdCCis6MTAyNTAwMDAyNzEyRjNBOEI4Q0U2NzA3N0FEN0UxM0NGMjU4MkRFNTM5Cis6MTAyNTEwMDBFRjM3N0JFNjZGODA3MUVGNzc1QTg5MkUwQTA3N0ExRUI0Cis6MTAyNTIwMDBFN0YzNjRBQkE2QzJGQ0FFMkE1MkU4RjdENjU2ODlERkMxCis6MTAyNTMwMDA3N0IwQkJBMzc1RUZFQzdBQ0UwQzI2M0RGMTRDM0ZBRUU1Cis6MTAyNTQwMDA1NzFCNTNCNTRFQkNEMEQxMjdEQzFDQzY2RURERkI1OEUzCis6MTAyNTUwMDAyQzkzRTI3MjEyOEVBMUY4NzJFNEU5RjBFNTM1ODVFMjdGCis6MTAyNTYwMDBBQkU3Nzc2QjI0QkVGOEVGRDY1QzI4QkVFQUZBMzE5QTY3Cis6MTAyNTcwMDBBRkE0NDc1RkExNkJFREM0NUNBRUJGMUFBODk2MjMxNzRBCis6MTAyNTgwMDBGQkRGMTE5RDMxMkNGNDc3MDEyNDNENEFGQThDNDA5N0YyCis6MTAyNTkwMDA0Qjc3QTJEQ0NEMzIzODMwRkU3OUNGRDQ2OEQyNjM5MjRCCis6MTAyNUEwMDA0RTI1N0Q3RTlDRDM0M0E3NDNGQTYzMUNERUU2OTk4NEM3Cis6MTAyNUIwMDBCMjIyOUM0RTMxQkUxNTRBOEZBNTdERDIyRDczODRGMjc2Cis6MTAyNUMwMDBFNTM0QjAxM0UyOUM2OEQ3MUNEOUQ4MUE0MjhGQTVCNTYwCis6MTAyNUQwMDA1RjE5Qjk5QzM4N0I3NTc0NUUzMDFFMzcyRDVGNjE5RjIzCis6MTAyNUUwMDA4NkUyMTVGRUZCNzRBODU4MUZEOTM1NDZGMkE3MjRGQ0Q1Cis6MTAyNUYwMDAyRTE0Q0VBNjFCRUI4N0EyOURCNjFBRUYwRDAyQkM5QTM1Cis6MTAyNjAwMDAxNEI3OTYwMkZEMTk2QjBGREM4MURGNTc4OTdCQkJCRUM3Cis6MTAyNjEwMDA2MTY2NkUzRjA5RkU5MEZEN0QzOUE4RjAzOEQyQTM3RDNBCis6MTAyNjIwMDBFQzg5OTg0QUE4Rjc2REIyQzE4NUMwNTlFNTJBN0Y5MTE3Cis6MTAyNjMwMDBGODZENUYwQ0JEMzcxMTlCRDAzOUZGNjlFMjlGMjEwQzBCCis6MTAyNjQwMDBGN0YzQkU1REUwRUQ4N0ZCRUFGNzAyOUUzRUE1RkIzOTlFCis6MTAyNjUwMDBGRTE0RkVFRTYxNTcwQTdGNUZENjI1REVBMUY3QTZGMkQzCis6MTAyNjYwMDBFRjRDOTRGQjI5N0Y0NzRFN0ZFMTU3NjhBMjdFMTdENTM4Cis6MTAyNjcwMDBCRkQ3REM2MjhEQzY3MTcyQUM4RUE3NDJFOEZDNkExMUNFCis6MTAyNjgwMDAxRkZGMUZDMTgwMjM3RDAwODAwMDAwMDAxRjhCMDgwMEZBCis6MTAyNjkwMDAwMDAwMDAwMDAwMEJFRDdEMEQ3ODU0RDVCNUU4M0UzMzA5Cis6MTAyNkEwMDA2NzdFMzMwOTI3QzkyNDBDRjk4MTMzQzkyNDg0NjQwMjY1Cis6MTAyNkIwMDA5MzA0MTA0NDY1MTIwMjBEMDgzQUZDRDUyMDg5MEM4QTU3Cis6MTAyNkMwMDBERUE4MjQ5MzQyNkNBM0Q3NzczMzkwODAwMUVDMkRBMjJGCis6MTAyNkQwMDBCNTY4NzkzQUQwNDJGMUFGMzcyOEE1QTE4RDc0MTI3RTQyCis6MTAyNkUwMDAyRTVBMkE4M0Q1MTY1QkI1ODFGQUFDQjYwNTgyNzg1QjgzCis6MTAyNkYwMDBCQzk3OTZCQkQ2REFFNzY0RTY0QzI2ODBGNkJFQkVFRjAyCis6MTAyNzAwMDBEREY3RTY1RUJCQjNDRkRFNjdGRkFDQkRGRUQ3REE4NzkxCis6MTAyNzEwMDAxQzU5Qzc1ODA2NjNFQzUyQkIzQzNGOTlCMTFDNTlBMEU5Cis6MTAyNzIwMDBGQUUzNkQ1QjdEMUZCODE4REJEMDE2QTIzMjdENkU4ODkwCis6MTAyNzMwMDBGOTRCMTlCMzE2MDVFNTIwRjQzM0FGNjVGRTJFMUI2Mzg0Cis6MTAyNzQwMDA5N0YxMzczRDVBM0VFMDE0MTk5QjA0RUQ3RDRGMzExOTQ2Cis6MTAyNzUwMDBGQUE1QkIzQzgyMUZGQUQ5RTdDMjc4NDU4QzdFOTdFMTg3Cis6MTAyNzYwMDBCRjVCMTgwQjhFMjg4NzdFM0I5ODk3NEQ2NDZDOUQ2Q0UxCis6MTAyNzcwMDAwRDA1ODVBMUUzREQ5MjUxNzU1NDRDMTlGQTdDQjBGRDJECis6MTAyNzgwMDAwNjgxOUQzNjQ3QzdDNURGNjk3NTFFM0Q4Q0ZGNTdCRDY1Cis6MTAyNzkwMDBCRkNCOEQzNTg3OEU2NTMyRDY4MjdENjVDNkFBRjNFMEM0Cis6MTAyN0EwMDAwRjlDQjdENUI4REQwNEYzNEU5NjUzNjlERjlGREFBQkMzCis6MTAyN0IwMDA0NjMwRjdGMEYzM0REMzA2MEIyRjY0MkNENDY2QTY3Mjk3Cis6MTAyN0MwMDA0NzlCQzQ4MjQ2QzZCRURCRTZBMEZBQUUzNjk5Q0FERDk4Cis6MTAyN0QwMDA2RDQ1NTQzRURGRTZBMUY2MTdEQkE2NTBGREZCNkQ1RUFFCis6MTAyN0UwMDBBQTc3QjVENTUwRkRFNTM2MUZENUY3QjZENTUyN0Q1RjMyCis6MTAyN0YwMDA5QjlGQ0FFRUI2MDYyQTdGRDRENjRDRUQzRDZEQUQ1NEY0Cis6MTAyODAwMDA5RjZFNjJDREI0OUZBMkEwNjMwMTlDNDdFNzgzNDZBRjUxCis6MTAyODEwMDAwQ0YwNjk1NENFRjFBMDM3MkZERDYzNjdDQzUyQTQ2MzZFCis6MTAyODIwMDAyNkU4NjYzOUI2ODVFMTdFMkMwRTlEMzcwNEU3QjBERURBCis6MTAyODMwMDBCMTg1REQwNUE1NjE3MjcyQTczMDAyRjZGRjkyQUQ1MzM2Cis6MTAyODQwMDA5ODAwRURFMkUzNEM4NkU3Q0YwOEMxMDZFNjYxNkM5MUEzCis6MTAyODUwMDAzQ0Q2Mjc4RTYyQ0NFNUY4NEE1NTFBRDQ2Rjk3NEIzNzkxCis6MTAyODYwMDA5QjlEOEMxNUNBRjM2QkQ3QzRENEU1RTRGMkZCRjY0ODA0Cis6MTAyODcwMDBEMUZBMThGNzc2RDEwQUVEQ0I0MjEzMzZEQjA1QkUwRTNFCis6MTAyODgwMDA5NkM1RDhCRDcyQjk2RjBERTA1MTM4OEYwNTExRUUwM0IyCis6MTAyODkwMDA0RTYzNjgwN0I0QUZDMEYzMTI3MUZEMTJBREZGNjZENjg4Cis6MTAyOEEwMDBFRUQwQzFGQUM3QzhDNjcyMjY1MEZGMzBCMzVGN0JGRkI3Cis6MTAyOEIwMDA0NjU5QTZFN0YxRUY1REE5OUY2RUUyMzVGNTYzRkEyQjY1Cis6MTAyOEMwMDA4Qzg3RURDMjE1QzYzMTBCMEJDRDExNThGQjI2MDNGQ0NFCis6MTAyOEQwMDAwRjNDMEY2NkQ4NDIzQjAxNUU5RDA2QjZDQzA3NzBFRkY5Cis6MTAyOEUwMDBCNEYwRjI4ODkzRDNERkIzQ0VBQUYxNEVBMEEzRjE0RTk5Cis6MTAyOEYwMDA3RUFFOUQ5NkEwNTQ4NUYzOTdFQTNDM0IxMDlENUI5RDcwCis6MTAyOTAwMDAzRkNGODNGOUJFRkFCQUM4MzZDQTUxRkNFQzQwM0M4MENFCis6MTAyOTEwMDBGNzBBQzYyNDdCNzExRUY2OEZFNjUwMDFDQ0YzQTUzMTcxCis6MTAyOTIwMDAyRjc1QTQ0MUJERTAzQjFFOEYxRUZBNkY2MjFFMkJFMjg1Cis6MTAyOTMwMDA0OUYwNTExRERCMDlGNTE3MjZFNkE3Q0Q4N0VFMjU5MzUzCis6MTAyOTQwMDA3RTkwRTYwNzdDMzk4RDdDMDBDNjA5MzE1NjgzRjhCNjQ3Cis6MTAyOTUwMDA2NkREM0Q2M0ZBQTFGQ0QzMDlGRjE4MDlENkY5QjgzMjQ4Cis6MTAyOTYwMDBDRjc2NDNBNDk5Q0U3MzkyOERFMUJFMTlEQjlDQTQ3M0ZDCis6MTAyOTcwMDA0MDdGMDcxQ0QyNzU4Q0U5NDZGMUQyNjg5MDZFQzc3RTA1Cis6MTAyOTgwMDBDNjc1NDYxNjg0RjUxOEZGNzI5REQ5MDdFM0I1NUYzNDA2Cis6MTAyOTkwMDBENTIwMUY2MTJDOTJBNDlCMDJDRjJEN0UyOTE1OUU2RkZFCis6MTAyOUEwMDAwRUVBODgyRkI0Q0JCNjkwMDBFMzZFQjI5NTFGOTVBMUM2Cis6MTAyOUIwMDAxRTk0NzQ5RTAyODRBMzVCNDc3MEVDQjA3RDM5QTQ4NzlCCis6MTAyOUMwMDBGMTQ0NjE0RDAzQ0I4N0Y1NEEyRjlCOURGMDNDRTRENjQzCis6MTAyOUQwMDA0OTQ4RTcyMUVGODIxQUFDMDdGREEyQTc0MDU2MTgwNDI4Cis6MTAyOUUwMDBCNkZCRDM0MjFCNzE1QzM2RjBEMzA5RDg1RUM3M0MwOEY2Cis6MTAyOUYwMDA4Nzc1OTlGRkRFOTcwNEY1RjZDNTkyNDdDRjdCQ0JFMjRBCis6MTAyQTAwMDA2NEM2NDZFMTVGMzA2NUJCQTE3RjZEMTJBRTYzMDlFRjFFCis6MTAyQTEwMDAwRjdGNzlFNjAzMURBNjk4RjhGOTdEQTM3N0I2OTQ1NzQyCis6MTAyQTIwMDA4QUNGQzU2MDNGRTc0QkMyNjUyMDQ0RDFFMDMxN0JBMDJGCis6MTAyQTMwMDA3REJDQURCQ0M2MEJBNTk4NUM2RTk2NjE5RjFENTJCOTVFCis6MTAyQTQwMDA3OTM5RUQ5RkQ5MThDQzkzQ0UzODdGNkE5Nzc0MzUyMUE4Cis6MTAyQTUwMDBBNUZEMkVBNDc3OTExRDcyNEQyNjUyQTJGNjBFREI5NjhGCis6MTAyQTYwMDA1RTg0ODc3ODM3NjM0RTE5RDcwN0YzQTk3QzBGRTA2MTNFCis6MTAyQTcwMDBDRUJGRTFBODBDRkJFOEJDMjc4REY2MjEwQTFFQUFCMzQ1Cis6MTAyQTgwMDBCQjQ1NUE3Nzk2NkMwREIzRjE3MDhFQzY3OTQ3MTlGMDM1Cis6MTAyQTkwMDA4RjJDRjNGRDczQjEzRUFBNDFGQ0EwM0Y4NjRGOEZGNDBCCis6MTAyQUEwMDA2QkVCMTlCNURBN0EzQTgzQkEzOTNBRUY2RjE0RjkxMTQ4Cis6MTAyQUIwMDAwRkI3Nzg3ODhDOTIzQTRFRTBGQTQ3Rjk0NTdBMThCRjBBCis6MTAyQUMwMDBGRUE3QTQyNzUyMkIxOUFFRDM0NkVCQ0NCNERENTkwOThGCis6MTAyQUQwMDAxMDgyQTE3RDZCMTBGRkZFRDY3NThFOTcxNjk4OUQzMEUzCis6MTAyQUUwMDBGRjc4QkIwRUMxQzkyNkIwODFCNTM4RUUyNjA1REYzQkE1Cis6MTAyQUYwMDA5REZDM0NBMzc0QTU1N0U5NzIyNEQyRTU5ODU2MUQwQkEyCis6MTAyQjAwMDBDNkM4MUQ2N0QwQ0E4MjMxRjNFNTc3QTY2OUVBMDU5QjdFCis6MTAyQjEwMDBCMzM0RkRDNzZFQ0REM0I0OEYwQjE1NkJEQTRCNzY5N0ZDCis6MTAyQjIwMDA2QkVBQTU1REQ3NkJGQTRGRThBRUQyRDRDQkMyNzMzNDUzCis6MTAyQjMwMDBGRDJCOEUyRUQwRDQyNzQ1NkVEN0Y0QkZFRUU0OUQ5QUEwCis6MTAyQjQwMDBGNkE5RkRGNzY5REFBNzdEQjQ0QTUzQkY3MUUwMjE0REJDCis6MTAyQjUwMDA3RjIwRTM4NkFFMDQ3MjMyNTVFMTU3MUQwRTZGQzQ5QjkxCis6MTAyQjYwMDA0MDlFQUIyNTkzQzQ4MUMxRjMwMERFNjk3MjAwNjZDNzQ1Cis6MTAyQjcwMDBDQzk3RUNCMTAyMTI0N0VCQTA5OTQ4MUYyNjI5NzU5MjE5Cis6MTAyQjgwMDBFQkVERjI1QUM0RTcxNDIzRTFCMzg4RjIxQ0VBQUIxRTYyCis6MTAyQjkwMDAzNDg2NEM4OEZGMzc3OTY0RTQyRjI2MjdFNzYzRkIwQUU1Cis6MTAyQkEwMDBCREEzOURCMEFFQ0ExNDMzQzkwNUQxQzZGQjg5QjY1OUMxCis6MTAyQkIwMDBBNEE3OENERTBBN0NBOTAyRUExMjFCNkM0RjQyRkVEQzQxCis6MTAyQkMwMDAxNkY0Qjk1Q0QxNzU1QkE0Q0QwQ0U5QjczMkE1ODZGNUQ2Cis6MTAyQkQwMDBEQkEyRUY4QjkyOTdGOTkzNzEzRTk5RUIzRjUyOTBGQUZCCis6MTAyQkUwMDA1OTY0NzgzRjY2NUYwNzc0M0E2NjQzM0VERTBCNzIwMkIzCis6MTAyQkYwMDBDNkVGNEFDRTE2OTFGRUJBRkU1MjVDNEQ2NUYyQjQ1OTRDCis6MTAyQzAwMDA4OEVGNjUxMkZCQ0VCRjQwRkYyRTgxMUQ2NUEwMjc3NUEyCis6MTAyQzEwMDBFOUQ4ODVFOUIwRUY5NzZERTU4RjgzQjgwNkQ2RThEMzlDCis6MTAyQzIwMDAyM0JGOUJDQzlBQTkxQ0FENjM1NjJDQjcwQkZEQUIxOUU3Cis6MTAyQzMwMDBGNDczMzc5RkE4MUEwOUZEOUU3N0Y5QkRCOEVGQUY4M0VCCis6MTAyQzQwMDAwRTgxRkJGQUZBNzhBRTY3QURDQjlDMjNBMzVFRDZFOTgyCis6MTAyQzUwMDBFQzNBOUE4N0VCQzkwMEI5ODI4NDIwRkEzQ0E4NTdBOEJECis6MTAyQzYwMDBGQkJENEYzOTRGMzFBRkIzMUZFNURGQUE1NEIzOENGQTI4Cis6MTAyQzcwMDA5MjY4REVFQ0ZCMDBFMEY1OENBMUZGQjk3NkE4NzcwODNFCis6MTAyQzgwMDBEMkNBMkVFNDhCMEZEQTNDM0IxOUVBOEYxQzZFNzJCMjZCCis6MTAyQzkwMDBBRTYyMkQ4Q0RCQjVDNjJCQTY0MjdCRDcwNkU2RTk0MDlCCis6MTAyQ0EwMDBGQUIwNTdBRTREODVFNzA1MzlDQjc1Njk0ODBGQUUzNTlCCis6MTAyQ0IwMDA2QkIxQUM3M0U2MTFGQ0M2QjlCN0VCRDJBMUJENjQ2MkNGCis6MTAyQ0MwMDA2NTJENDNEOTJCQzE3Q0U5QzNFMzkzM0U2NTJCQzNGRDNFCis6MTAyQ0QwMDAzMDk3RjgyMUUyOTU0RTA2M0UwMzRCQUY0QzgzRjM4NkM2Cis6MTAyQ0UwMDA3OTJENzhERTAyOTUwNDA3Q0I0NTVCQzg4Mjc1MTc4NzdFCis6MTAyQ0YwMDA4QkM1MkI4NDkyQTA2RTc3NzkwNUFGMUJERkRCNEFFNzhCCis6MTAyRDAwMDA2QjA5NkJGNUQ4MkE5N0ZGM0VBNDdGRkI1Q0VEQjk4QTZGCis6MTAyRDEwMDBFNjI3Njg3RDlCNzQ5QzJFM0E1M0U1NjMyODlGM0I5RDc0Cis6MTAyRDIwMDBBRUI0NzYzOUJBNEU5NUFGM0NBMEU4NkJFQTczOTVBRjc2Cis6MTAyRDMwMDBGQzBFQ0YyMDIzQUFERjAwOUU2RkQ1RTVBMzdFQjY5OUI3Cis6MTAyRDQwMDAyMTdGQjIzQ0JDOTkyMTVFNUJBNEEwQ0M1MDBGRkZBN0IxCis6MTAyRDUwMDAyMEUxQjlBQURGQUU1NjY4QTYzQUFGRDY4Q0YyRkE4MjY1Cis6MTAyRDYwMDBCRDlDRjQ1OTRCRUIyRTNBQUY3OEI4NTlGQTc1Q0M3QjMxCis6MTAyRDcwMDAwNUI4QTYxNDNFNERGMjFEMThCMDVDMDBGMEU5Q0JCNEM2Cis6MTAyRDgwMDAzNTZDNEZBMEY3OEY1MEY0ODUwRDQwQzYxMTkyNTczRTE5Cis6MTAyRDkwMDAzM0YyNkI4MzFFRjQ1NTkyNkZCMDYxOTAwNzE3MjQ0NjhGCis6MTAyREEwMDBGMjhCNzUzOUE5QkUzQTk1RDdENTcxNTY2Nzk0OEZCQzA5Cis6MTAyREIwMDA5MkZFNkREOTZBNjZGRTk4N0Q2QzgwNzkxMDJFRUIyRTlFCis6MTAyREMwMDBDREFGNDFCODMyOTE4ODgzNkRGQThCN0JGQjQ2QTAyRjQzCis6MTAyREQwMDBENUFFMTlBMUU4MkIzOTM4Mzc5NEEzOEQ4Q0VDMDI4RjJFCis6MTAyREUwMDA3RDZFMEREMjlERUY2MjFFMDlERjgzQ0UzNDZBRjcwNDNCCis6MTAyREYwMDA5OUJFOTlENjZENTBFNTkyRUVGMjA0NUFBQjZDNTRFNTRCCis6MTAyRTAwMDAzMEE5QjY1QzZFQzFGRkY3NUUxNjkwRUZDN0M4MzE1RUExCis6MTAyRTEwMDA5MDVDNTdFNTc2QzE2NjZERkJEOEFEREFGQUI4RDA5MDE0Cis6MTAyRTIwMDBGN0RGNDJCOUJGOThGRjBENzI0MURCRkVCNDIyQkYxNzM2Cis6MTAyRTMwMDBBM0ZDODY5MjJEMzI5MERDMzNDMzhBMkU3M0I5MUI5NTg2Cis6MTAyRTQwMDA4M0MwMTc3MkJCQzI5NUM4NDY3MzVBNjJFNDIxQTM3RDQyCis6MTAyRTUwMDA2OEU0NjM5NTRCMjZGQ0YzMUQxNTBENzg4RUJFOEI2MEUwCis6MTAyRTYwMDA3QzU0MENFNUNCQTM0RDFDREU3REM2RTREMDVBNzhFRjM0Cis6MTAyRTcwMDA1MUIwOEJGQ0QwNzUzREQ4NDM3RTIwQjVBRjhCOUU1RkEzCis6MTAyRTgwMDBENkExOUQ3NTU0RUYwMThDMUQzQ0E3Rjg3M0Y1RTRBOUZDCis6MTAyRTkwMDA3QUFGRUYyREE0MDNDNkZBMkI3Q0M5N0MzRTdGQ0M3Qzk1Cis6MTAyRUEwMDA3REQ2OTRGMTBDRUM5NjVEODVGRTVGNjFCRjRGNkFFQ0I4Cis6MTAyRUIwMDAxMzkxM0Y5ODcyOTgwMUU5MTNFNzY3Q0FGQ0NDODhGQTJFCis6MTAyRUMwMDAzMzNGRUY0RDlFMzc5QjBGQzIzQTFFMzk2OTQyNzU5Q0M2Cis6MTAyRUQwMDBDREQ0MUYzQkRBMDZGNTU1QjkyMkYxMzNFOUJBOTVDRkM3Cis6MTAyRUUwMDA1QTgxMEY1NEZEMUFEQUUxOUQ0NzY0NzkyNEU5RTk0N0Q0Cis6MTAyRUYwMDAwRDBDRjVGNDJBMDU4RkFCMTRGQkVCOTkwMjAzOERGQjQ3Cis6MTAyRjAwMDA4OTIyNUZDRTNBNTVCRDI3Njg0NUZEMTcyQzAyMkJFQTcyCis6MTAyRjEwMDBCMzI1QkI4MTE3NkJDRjMzODlCNzdCNDlERjJERUQ4QTkyCis6MTAyRjIwMDA2RkY3MzJBNEUzNjIwNTVGQTA2RUFCODQ3QTk5NTJFRjJCCis6MTAyRjMwMDA2MjQyQkEwNEU3MzhBMUI2QkYwRjREMDlGNzZCODdBREZGCis6MTAyRjQwMDA4ODg3N0IyQzVDN0Y3QjVFQzE4NzRDMjY3OEMyQjBGRTc1Cis6MTAyRjUwMDBDQ0REMzY0RjA4RkEyNUVCRDk5RTA4RUNDMzczNDgzQzBDCis6MTAyRjYwMDAxRDdCRUVFMzdCQjQ3NTM3OEJBOTNCNzExRERBRkFBM0E5Cis6MTAyRjcwMDA3MkIzODA3MDc5QjQwRTc0NzREOEIyMzUyRkQ5RkU2MUYzCis6MTAyRjgwMDAwOTQzOTgxNzIyN0VDREQ0REJDQUQwOUU1QTU1Njk2Mzc3Cis6MTAyRjkwMDAwODU3RDNBOUIxREY4QTIwRkYzOEExNjcyODE3QTQyNEQ2Cis6MTAyRkEwMDBGOUIxNkE3ODVGRkE2OUJBNjc4RDFDM0RGRkU3REI5MDdCCis6MTAyRkIwMDA3NTMzRjZFNDY1MEZFQjAwOUVGQ0Y1MkE2QjAzRUFCRjYwCis6MTAyRkMwMDAyRkMyNzlBMjFDRjkzRUQ4RDlEOERFMDVFNzhBRjU5NzM5Cis6MTAyRkQwMDBDMUNFQzY3MjJGRDhEOUY4N0MxRkQ4RDk1OEVGMDYzQjdFCis6MTAyRkUwMDAxQkNCMUY4MTlEOERDRjdCQzBDRUM2QkFBN0IwNzI3NDlDCis6MTAyRkYwMDAxRTlDNEZCRENEMzc1MzQwQjg3QTQ1NTkwMkJBMTJBMjM0Cis6MTAzMDAwMDA3MDY2MUYxNjYxQkQ1RkI4MEMwNDUyMjdCMTdFMTNDMEY1Cis6MTAzMDEwMDBGNUY4MTg5OUNFRDdDNDdDMENFNTJCRjM3QkNDODg5N0I4Cis6MTAzMDIwMDA1NzFGQzdBQjhFRTMzNzI0MUE2NzBBOEM0Mzc2ODI1OTQxCis6MTAzMDMwMDA0MkJGNDgxRUJDMzEwMjlFOUY3OUYwNTdCQjUwNUVDQzA4Cis6MTAzMDQwMDAxM0ZDMUU1QzZGRTNBNEQzNDZBRTNGMEYxOEIxRkYzNkVFCis6MTAzMDUwMDAwQkUwM0ZGMEExMUM4NTBFODI1NTAwNEY5NEJCQUZFQkY3Cis6MTAzMDYwMDAzREVERDBFQkE2MTlBNzU2Njc4MEZENUQ5NUU3OUMyRjM3Cis6MTAzMDcwMDA0RTg1RkFGREE3MkE0NjQzQkQ3M0M3QTZGOTY4Q0ZERjgwCis6MTAzMDgwMDBGNEJENTNBRjY0MDMwRjNFOUIzNzhGQjczRjdFRUE0MkQ4Cis6MTAzMDkwMDAwRUI0OEY2MDVGOUI1RjBERUQyOUU5NUMzRTZEMTM1OEE4Cis6MTAzMEEwMDA2REFDN0U3NzZCMUVDN0YzNDBFQjE2OTI3M0MwREYxOUQxCis6MTAzMEIwMDBDMkExM0REMzQ3RjJGMTlDN0QyMDY1MzlGNDBGNjQwQzI5Cis6MTAzMEMwMDA2NERFNzkwNUZFMUQ2ODdEOTJFNDUwN0JDQUVGNDlGRkZFCis6MTAzMEQwMDA2ODFGOTQxNzFFOTIxN0VBQkNBQUJDRjg0NEMxM0Q1NTVDCis6MTAzMEUwMDA1RUFDQjJGMEVBNjAzRjdGM0UzRDdGNUNGMUVCQjA1MEZBCis6MTAzMEYwMDAwMUQ1RDMyREJDRkVDRjU1RjI3MUI0N0IwMDNFNjRFNzAxCis6MTAzMTAwMDAxRTRDMjlGRUM2MEQ2ODU3RDY4ODFFMTNENDFGQjc5NUNFCis6MTAzMTEwMDA1QjUwREVGQ0EzQzI3RjYwREMyMERBRjFDMTk5RTZEMDBGCis6MTAzMTIwMDA0RTNDNTRCQjRDRjQ5OEE2OEU2Rjc3QTFEMkM1RDI5NDc2Cis6MTAzMTMwMDA3NTFDQkFERTFBNDYzQkJGQkREQUJDMDNGNUM5MkRCNjE1Cis6MTAzMTQwMDAzQzFBQUY3RDhBMzE4OEZFMTVCNUJFRjZGQUVCQ0RBOEU0Cis6MTAzMTUwMDA0RkE0QTZBNDM5QjFBRUYyQTc4RDgwRjc1OEMyNEY4RjA1Cis6MTAzMTYwMDBFMzU2MjlEQkFEMzJEQkMyN0FFNEU3NjZDMzFGNjNGNUMxCis6MTAzMTcwMDA2NDFCOEIxMEZFNzg3NDYwOTAwMEJEMTlGMzM5NUU1NUE2Cis6MTAzMTgwMDAzMDRGMkQzRTM3MEFDRDQxNDRDNjZEQjg3NkRDNDdCMjhDCis6MTAzMTkwMDA5MUZDMEM4QzY1RjM3NUFCRkJGMDY2RjM3REE5RkI0OEU1Cis6MTAzMUEwMDAzNjA2OTU3RDkwOUVCNEM1QTYwQkEzQkVCNzA1RjY4NUUxCis6MTAzMUIwMDBFMzA1RjI2NDgyNEZGQ0JFRTBFN0MzNzE2NzRDNTFENjcxCis6MTAzMUMwMDAyREREQjAxN0Q3MzE1M0U3RURDMEY3MEU3RjU2NjcwN0Y3Cis6MTAzMUQwMDBGNDYyQjM1OEIzODhDRkYzQzFBMkZERDA0Q0EyQjNFM0RECis6MTAzMUUwMDBGMjE1RjQwRTE0RTQxRkM2QzhBRDlCN0UyQkQwN0VEODFBCis6MTAzMUYwMDBGRDQ2M0E5N0NEMDU3Q0RGNEYxQjQzNEU0NjA2NkU2ODcxCis6MTAzMjAwMDBENDgyRTRFMUYxRjc4NTIxRjhFQjY1NDg0RkVENjk1RTgyCis6MTAzMjEwMDA4RUJGRDI0MENBMUFDNERGRDQ4MUNDQjVCNEFGNzBDMjVECis6MTAzMjIwMDBGMzg4QzdFM0Y4RjNEOTA3RkYyOTcyNDA4RkYwQkREQUJFCis6MTAzMjMwMDA3OUFBRTdBOEUyNDFCQ0ZDMzJFNjRCRUFGOTNBNjg5RjdBCis6MTAzMjQwMDBERTIyNEUwN0FBMUVDNUMwQ0U0OTFFMEFCRkY1MzA5RTFCCis6MTAzMjUwMDA1QzE4QUQxQjFEM0VEMjhGMEQ3NjRGMTFGQTZGREJGRjUwCis6MTAzMjYwMDBBQTZGNDhFNEJGRkQ1MDgxRDM5QTE0MkJFOUNERUQyOTE0Cis6MTAzMjcwMDA1QzZGRUU0RDk5QTNCMTc3QUFDMUZFMTEwMDNGRjRFOTRFCis6MTAzMjgwMDBBQzBCRTk0ODNGRTI3NkYyN0ZFOTQ3QTI4Njg0RUI4QUZECis6MTAzMjkwMDBEMzQ3NDdDQ0U1RkFBODA0RkE2ODgyNzlENTUyNDQ3RDMxCis6MTAzMkEwMDAzNDgxOUUzQUE4OEZBNkNERTFGQTY4OEE5MUY0RDE2RDU3Cis6MTAzMkIwMDBDOUM2REFFRDA5RjhDRDgxM0NBRTVGRjdFMjNFMTJEODFGCis6MTAzMkMwMDA3QjYwRTc5MTFGNTJCNUYzOEM5MjlGRUMzNTc1OUYwNzk5Cis6MTAzMkQwMDAxNDdDNTdGQjlCQTQ2Njg2N0UzMUJERDEyM0EzQkVBOTc3Cis6MTAzMkUwMDBCNzcyRkREMTA0REIyQzhBOTFERkVBRkNGQkYzMENGNDBFCis6MTAzMkYwMDBGRUI3MEJCOTFFQUYzMzczRkRFNEE2RTM0MjczMjJCOEU5Cis6MTAzMzAwMDBGRjU5ODFGQjcwNzhGNzM3RTAwREYxODU3MjlCRDE4QjA3Cis6MTAzMzEwMDBGQTQxQjlDRDUxODVGQUMxNzBFRjgxQTkxOUZDMjgyRDY4Cis6MTAzMzIwMDBDQTU3M0M3RjlEQUMyN0Y5MjM3QTFDODg2NzVEODZGRUNGCis6MTAzMzMwMDA1NzhFQTMxRDc3RDg0NkYyNDZENTlCQzE0RUY1N0FFMDRECis6MTAzMzQwMDBFNTNERkYwMTE0QTgxQjZBOUY4MkREMjRFNUMzNzg3RDVCCis6MTAzMzUwMDBBQjMyMjdGMkYxNDBCRjJCMURBQTRGQzZGQjAxMDZFOTk1Cis6MTAzMzYwMDAzQzY1OTc5M0JGMTcxQTg1RUYwOUFCQTY4QzQ0N0M4QUZFCis6MTAzMzcwMDBBNzczQjVDQzc1QkM5RUJCMDJENjk1M0JFQTI4OTVFQUVGCis6MTAzMzgwMDBGM0ZGQzlGNEU0NTc4QkVGM0YzNjVGODUzRjk3QzdFMzAwCis6MTAzMzkwMDA2MEIyMTE3QTkyQzM2MzcxREQ2NzVBREVDQ0Y0QzA1MjE5Cis6MTAzM0EwMDA5QUM0RjMyNDhGM0Y2OTlFMzJFMjExOTlGM0Q5REQyODQ0Cis6MTAzM0IwMDA1RkJFMjIxMjlGQ0RCOUI3MzczNTJERTY3QzlGNkVFQkVECis6MTAzM0MwMDBDRTE1NUQxODJGODhFNDU2QkJDODBFRjAyNjVBRUY0MjgyCis6MTAzM0QwMDA3NUZFRjAxOEUyQ0IwNkU1RkM2NTdCNjRGNjU4ODBCNzE1Cis6MTAzM0UwMDA2Q0QzNzlEMDE1MEQ0MjU3NDNGRjk1NjI2QUI1MDRGMzRCCis6MTAzM0YwMDBFN0I2MzE4RjBERUE0RTI2OTExRjJCRjdCMjlFRjAyQ0M3Cis6MTAzNDAwMDBGN0UwMTJDMkRGMzFGNjAxMjFFODhFOTkwNzU5NzA0Q0JFCis6MTAzNDEwMDAzQ0U0RDNFNjZBQTJDQkRDOTE4M0Y2MUJDNTBEM0VCNTM2Cis6MTAzNDIwMDA4N0U3MjM1RDdGRkEwNDVGNTFFRTc3QjRFRDIwNUJDOTM3Cis6MTAzNDMwMDBDRjdDNEY4QjM1ODQyNkUwOTg4NzI1MURENjczOUYxNTRBCis6MTAzNDQwMDA1ODhFMTNENzcxRDBGOTA4RkE2OTdFOTg0NDdFMUFGRDE4Cis6MTAzNDUwMDA1NjE3Rjk1OTlFMTVGQ0QzRjI4MTJFQ0U4NEU0QUZBMjAzCis6MTAzNDYwMDA3RDRCM0ZFOEQ3RjgzNUVCOEU4RDI0QkYyMkIzNDk3RUU0Cis6MTAzNDcwMDAzREEwNjMzQjEzRjg5MTZFQ0ZFN0Y2RENEMjdDNEU1RjQ0Cis6MTAzNDgwMDBCOThFMzc3MjU3NTQ2MDc5OENDRUZCNUFFOUE4MTNGOTdDCis6MTAzNDkwMDAzNThDRjNDODg4Q0QxNEU3MEE1NkIxMjJCNEZCM0EwRDM3Cis6MTAzNEEwMDA4MDU3MDlFOEY0NUZGMzk1Nzg5OUNBODcxNUY4NTlEMEUxCis6MTAzNEIwMDA0QTgxN0RFODA1NDVCRkRCRkRGQ0YzQ0Y2N0EyQkM2NjEyCis6MTAzNEMwMDBBOERDMEREMjlCM0E0RTUyNTExNzM1MjY3OUJDMENGRDIzCis6MTAzNEQwMDAwRDgyRTRFNUZDNTUwQTNBODIxOEQ3Rjk4QjNFMjE1RTRECis6MTAzNEUwMDAzRkE5OUNERjFBRTc3QTA3RjZBRjc2NzkxQzQ4MDdCRDNCCis6MTAzNEYwMDBDRUM5OEUzQjAxN0UzNjlCOTE5OTYyRjhBRjhBMjc4N0IxCis6MTAzNTAwMDA5MjI3OTNGRUExOEVCMzJBMzlFRjhBNzZCNjExRjhCMENFCis6MTAzNTEwMDA3QzA1Rjk2QzQ0N0YzN0VBMzE3RDUzQ0QzMkFDNzdCRDAxCis6MTAzNTIwMDBBRDNDODI3QUQ2N0E5QkJEOUNGQ0U2MzZFMDE3MzE3RUI0Cis6MTAzNTMwMDAyNDlCRUQwOEUxQTFDREMzRkQ2QjM2RTRCQkU4NDc1MjA3Cis6MTAzNTQwMDBGNkRGRUIzQzQyRkI1N0ZCQUQ1MkY4OEZDRDEzRTY3MTMzCis6MTAzNTUwMDA0N0IwNjJCMDlGNDVGNDA1RDFCRUIwRDgxOUQ5OTMxNkQzCis6MTAzNTYwMDAzM0E3QTcyNDM4MEU3MzBDMUY1MUU3QkQzRjlGREI2OUJCCis6MTAzNTcwMDBFQjczQ0EyMzk1QjQzRTExM0QwMTZDQkRBM0RDNDE3MkNGCis6MTAzNTgwMDAxMEUxOEM3QUU4QTg0MTNEOTRGQzI1Q0YyOTcwNTZDN0ZDCis6MTAzNTkwMDA2OUVGRTVGQkY0QjUzQUJDRDVFOTY4N0ZGQTlFNDVCRTE0Cis6MTAzNUEwMDBCMERFNzZBNzM5ODhGMjIwNzlFMjE1Qzc3QjI1NUZEMDk3Cis6MTAzNUIwMDBGODdCQTJFM0I1Q0U1MEM2N0IwRUM3RDMyNzk3NEIzODE2Cis6MTAzNUMwMDA5RTAxRjk0NDAyRkMwQjJCRUJGQUEyRkUzMDgwQTg0NENBCis6MTAzNUQwMDBGNjFBRTM3QTE1NjBCQzIzOTFGRUEwOTY2NkM1QUYzNTU2Cis6MTAzNUUwMDBGNDNEQ0UyNzlEOEFERDAyN0NGMjE4QUVCRjMxRTdGNEIwCis6MTAzNUYwMDA5MTRBRUFDNUVEOTVCNEQ5NjI5MTA4RTdGNTA5OUNBMDE2Cis6MTAzNjAwMDA1RTg4REFFRkYxN0E0Q0E1N0U4MEU0OTkyQTg3NTRCOTc2Cis6MTAzNjEwMDBGNDM0RUEzMUM2MjgzREE5N0U5N0VDMDYxRkM5NkJDMTc4Cis6MTAzNjIwMDBFRTIzQkMwMUJENDY0NkJBRDE2M0JDMzcwMURDMjQxNzhBCis6MTAzNjMwMDA4NzlCOTAzMjQ1NDY3QUE5QkVENDlGNEQ3MjNFRjlBMzJFCis6MTAzNjQwMDA2QzE2RTMzRjUzRjlFMUExQ0Y3NjU5QjBGREQzODZBQUJBCis6MTAzNjUwMDAyQkVBMkI2QTNDNzhCODM4NzBDQTQzQkZGRjRBQUNCRTJECis6MTAzNjYwMDAzMjVDNUNGODZBRjFFMEJFMTQyM0Y5REQ5RTExQjQ3QzkzCis6MTAzNjcwMDBDOUVBRTJGQ0M4RTA1MkZEMjdGRUJGRTAzOTNDMjNGODZFCis6MTAzNjgwMDAzQ0E0MkYyQTdFOTQ3RDg1N0VFNjQyQkY1N0E3OTEwNUY0Cis6MTAzNjkwMDBFMTNDMEY3QzM2RDk4MUY4NzFBREYwNTVGREU2NTk4QUQxCis6MTAzNkEwMDAxRTk1NjVEQjI1MjA5RDY2MzU4NDA0RjQ3QjY3Mzc3NEExCis6MTAzNkIwMDAwOURFMkJGNDdCMDdFOTM5MjNEQURGQTA4QzNGNUQxQ0EwCis6MTAzNkMwMDBEMEEzQkM5QUFFRDA3MUY2NDU5MTE1QzVFODdGNkZFNUUxCis6MTAzNkQwMDA3MzNEQ0FBMEU4RUQyOTdEQ0Y1OTcwQkMzRTlEQUZCM0M0Cis6MTAzNkUwMDAxMEU1NDM4QTRFREUxOTQzRUY4NjdCQ0JDRDU1MzFGMDkyCis6MTAzNkYwMDA2OUM3Nzg0RTgyRjMyQjc3MERFQTVCNjQxN0E5RjJENjdGCis6MTAzNzAwMDBBMENBMDlCQkE4OTExMzgxMjQ4RUI3QUFCRTEzQjg5RTg0Cis6MTAzNzEwMDBEQjQxODJFMDJGNDFCODlFQkJGRUY3QjdFMDE2Q0YwOTMwCis6MTAzNzIwMDA2MTgzREQ3OUY1NzhDNkEwNUVBMzBCMkQ1N0VEMTdBNDU0Cis6MTAzNzMwMDA5NzJFODNEQ0RENEZGQTU1OEEwN0ZEMDBBQTVFNTVGNjA5Cis6MTAzNzQwMDAzRDIxMUZGQjc5MDQyRkQxQzkyNEU2QTdGMjNBQzZGNTIzCis6MTAzNzUwMDA0MEQwQUY2RTcwOTFCRTA3NUI4OTM5Nzc4NkFFODhDQzVBCis6MTAzNzYwMDBBQkVGQUYwMEZERTAxODI3MTAyM0U0NEZGREZBMjU4MUYxCis6MTAzNzcwMDBGODdCM0NEQ0RBMDZFMTM2MThDRkQzRjg0NUIzMTU3OThGCis6MTAzNzgwMDA5N0FEQjRDQkU4MTc3NTYyN0M0QUVCQjdBQzM4QUFBREZECis6MTAzNzkwMDA0RjhBNjhFQkQ3OUQ4Q0YzODMwNkJENkZCQjMyNzlGQ0YzCis6MTAzN0EwMDAxRjA3REQwNkY0ODY3QzYyODUxMkI3Q0MwOTg2MkEyNUMwCis6MTAzN0IwMDA1ODZGMkVFQkEyRjg2MDc2NDM5QTA2REUzN0U5OTVCQzg3Cis6MTAzN0MwMDAwOUU2MTU5OEJBNEVGODY1OEJGMzNFQzZGNzVCNUM4MzQ1Cis6MTAzN0QwMDBGRTNCRDJCRkVFNTFEQUZGQTE3QUM1NTczQkQwOTZERTUxCis6MTAzN0UwMDA2QzIwRkZBODE5MjY0Nzc4RkRDM0VDMDUzM0YxQkM4NzkwCis6MTAzN0YwMDBGODU3OUJCNTdFRDVFQ0Q4NzY4MEMzM0REQjBDOUE3NjI2Cis6MTAzODAwMDA5RkI3OENFQzgyODU4QURGNzY3MEJGQjg4RTBDQkVERkU2Cis6MTAzODEwMDBFQ0YyQTFGMzVGN0Q1RUY4MkY2REU4RkNFQUI4NEYwMzkwCis6MTAzODIwMDAxRjQyRkVDQTJFQzFCOTRFNDZCODMxRjQ0MEIwNUMzMUQ5Cis6MTAzODMwMDAyQzYwOUMzQUFCOTk3OTUxNEZDRTZFNjFERTQ0RkVGRTBFCis6MTAzODQwMDA1RDBBQkNFMkUxQ0M4MkQzMDk3RTMzOTQ2NzU5MzYzREYwCis6MTAzODUwMDBEOUVENTkyRDNBRDIwRkIzODA0RjIwN0ZCODY1MjU5MDBFCis6MTAzODYwMDAxMUQ0QjM1N0NBQTQ1RkRFREFBMDYzMjgxRkQ4QTUzNkU3Cis6MTAzODcwMDBDREZCQjA1Q0YyN0ZBQUU3RkUzNDhFODdGQTY1MjMwQjlFCis6MTAzODgwMDBFOTcwM0ZDREM1NDQ2N0I0QUVCQzI4M0UwMEJDNEU3MzYyCis6MTAzODkwMDA3ODk5MDk1RUI3NEUzMTY4RkM5Q0I5RThENzhDODE4QjZBCis6MTAzOEEwMDA4QTA3RDk3MUNGQkZFNDkyMzQ3NDAxNzI2RTk3OEJGMDlFCis6MTAzOEIwMDA4NENCQkYwMjk0N0ZCMEE0MzM1MzRGRUVFQTgyRjVERDkwCis6MTAzOEMwMDBCNDk2RDE3RTA3NTJBRDIxOUUwRjMxMTgzRkQwNUYxRUI2Cis6MTAzOEQwMDAwQjdDQ0IzQ0EzMDhGRDJDOUIyNEFCMEVGMzE2MEVBNDUzCis6MTAzOEUwMDBGNjdGOUJBNTMyRDYwRDZBNzE3NTBFNjMzRkIxMEU5NEJCCis6MTAzOEYwMDAwODUwM0ZFNDZBRDhEMjc5MjNCNDVCMDY1RTQwRTdBRjU0Cis6MTAzOTAwMDBDRDE2NTg1MDEzNTM0RjQ5Njk1RjUwODM4NzM2ODVDOTg4Cis6MTAzOTEwMDAyMkMwQzc4QTMzQzAzRUFERDI5Q0REN0E5OERGRUFCNkJBCis6MTAzOTIwMDA5MTUzRDJDQTA2RTk5NEY2RDM3MUJERkMyOEU2N0Q3NEEyCis6MTAzOTMwMDAxNEU4NDg3RjYyQjFFREIwOEZCMjAyNDlBMTAzNkYxMTY0Cis6MTAzOTQwMDBGMThGMUExRUM3OEYxRDVGQjQ1RjYxRkMzOTMwRkVDNDUyCis6MTAzOTUwMDBDRjMxQkU5OUFGM0YxMzFGODFEQ0M5QzRGNUEzREYxQTc1Cis6MTAzOTYwMDBDN0M3RjM0NUU3NTFFQ0ZDQ0E3ODIyMEI2RUM3NzgwQjRBCis6MTAzOTcwMDBDQzY3MTNGODdDMTJFNjk1NjQzMjZEMUVDMUUwN0MxMkIwCis6MTAzOTgwMDBDQzU3RkE3N0Q4NEZFREQwRjMzMDVDRTkzQzZFRkY3QzMyCis6MTAzOTkwMDBFN0QxQTFGM0QyN0E4M0UzNkQ2NDE3MzE2OEQ2NEQ0NjNGCis6MTAzOUEwMDBGQjgzQ0Y2NzExRDkyMUIxOUNDM0I1NjM3MjE0QUVBMDVDCis6MTAzOUIwMDAwN0QyQjhEMDdEQ0Q2NTA1Q0UwNjg0QjM2NDI0MzgwRjE4Cis6MTAzOUMwMDAwN0I3M0U4OUU3MzU2RDkwQUNBMTM1Q0VGRjAzRTdFNTNCCis6MTAzOUQwMDBFMEU3MTUzQjFGRUE5M0Q3M0NERkVEMzA5RkZEREFFN0M4Cis6MTAzOUUwMDA0M0Y4MjJGRDBDQzIxN0NFNjQ2REU2QjVDMzE3NTYxNTE5Cis6MTAzOUYwMDBCQzE2RjhGNkMxQjhCQTE4Qjg0NkYzODc5RTkyRDAyRTE2Cis6MTAzQTAwMDBCMDE4N0M2NjBGRjBERjlCMEE1MjQ5REVCQUVEMEJDQzkyCis6MTAzQTEwMDA5NDRGOTBCMUMwOEM3OTdBRUJEQ0I2MUFDQ0U3NUJFN0I3Cis6MTAzQTIwMDA1QTY0MzZDNEM4RTk3NUVFM0E2QTg3RkU5NEY3RTQwRTI0Cis6MTAzQTMwMDA1QkQxNkRDMTRBNTk4NEZDMDIxQjZFQTg3NjJDNDdGQ0YxCis6MTAzQTQwMDA2OUU2Nzk1NDZBNUU5MTJBMEY5OTEyQUZBNDdEQzE4QjAxCis6MTAzQTUwMDAyMzZFREMzQkQwMDdGRDM3MzQ0RkE0QkNCMTExQTlGRjY2Cis6MTAzQTYwMDA0RUY5NTI5QjFBM0MxRTZDRkZCNjg1QzcxRDlGNTRFMjRGCis6MTAzQTcwMDA0RTg4QThFNDU3MUI3RkZENzczMEZFNUE1RUIwNEFBMEZGCis6MTAzQTgwMDA3OEUzQ0EyQkM3MUJDQkNGNDdBQTMwRUY4QTJERTc3OTQzCis6MTAzQTkwMDA1NThFM0EzMTRFMUU2QUU5NzYxM0MyOTVFNzNGODUwNDhBCis6MTAzQUEwMDAwRTVGQ0Q3ODJEMDUxOTNDMUVFRERBQzFEMEVFN0IwNUY5Cis6MTAzQUIwMDBDNkQyNkJFOTRCODc3OTQ4RjFGNDI4MUFCRDUyMjVFQTQyCis6MTAzQUMwMDBFQkFCNzRCNDhFNkMwQ0VEODM4ODJCMkY5REVCNTgwRUYyCis6MTAzQUQwMDBDRjczRUUxNjNEMDIzQzFGRTk3RTk4RjI5MTQwREIyNzQyCis6MTAzQUUwMDA3REMzRUQzRTU2ODVGNTIxRkI1Q0ExREQ0N0ZDQkVFMkMyCis6MTAzQUYwMDBENzBEODI4QkQ2QUQ5RTU3Rjk3OTRGMTJEQTU3RTUwNTZGCis6MTAzQjAwMDAwQjI4NUY4QzdFMkFCREVCRTNGNjkzOEU3NkIxQ0U2QkVECis6MTAzQjEwMDAxOThGNzY0MUNDQkU5OEE2OUY2MkJGRkREN0Q2RUY0NEUxCis6MTAzQjIwMDA2NDQyQkQzMDNFMUVGNjRGM0U1QUE3ODk3OUNDNDY3QTk0Cis6MTAzQjMwMDBBRjhFRUM0ODM1Q0U5Njg1QjQ4M0U3M0U5QUYxMzg0NTkyCis6MTAzQjQwMDBGQ0ZCOTNGOUZCQ0NDMUUzNkUyNjJCOThBNDQwN0ZDMjBCCis6MTAzQjUwMDA3RDU2RjI2NzlBNEM1MDg3RjMxMThDQ0MzQzBBOUUzRkZECis6MTAzQjYwMDBBREY4MDNENzA4NENDNDdBNzRCRTMwQzNGOURBMDVERjY4Cis6MTAzQjcwMDA2NjhGMTM0QjZFNDcxOTUyN0Q5NDZGODg2MURCNTg3QkJCCis6MTAzQjgwMDBCNDBGRjMzOEEwN0RENUJEQ0U5MUU4Q0YxQjAxMDQxMTUxCis6MTAzQjkwMDA0MTdCNUE4OTUzQTlGRTkzOTRGQ0ZFQTUyOEJGNUYyQzU0Cis6MTAzQkEwMDBGODY4ODExOUU1MzMzQTlDQUU2NzZDRkZDRUQzNUI4MjJGCis6MTAzQkIwMDAzOTUxQkEzNDVEQ0M2MjcyOEM1RDYzMTI5QjI5OUZDMzBDCis6MTAzQkMwMDA3NDcxQjRDNkNGMTI1NkVDMzFCNUVFQjU4QkQ1Mzg1RkYzCis6MTAzQkQwMDAwNEVEMDVDQzVGNjI1MjA3QkU1NzA5NDA5MTYzRkRBNjE0Cis6MTAzQkUwMDAxNzFEOUE3MUEyRTNFNzY4RTYwRDgzNUQxRDFCMTcxODg4Cis6MTAzQkYwMDA3RUZDMjQyNjE3QzU4RTlGMzdDQ0Y4ODU3MUUzNEIwOUQwCis6MTAzQzAwMDBDNzhGOEU5QkFFMTk3NzlEQzhGOTQ1RDA2RTBEMjVGMkYyCis6MTAzQzEwMDBGMzlEMkRBODdBMUI0OTc5Qjg3Q0IzMzMwNURDMEYwOEQ2Cis6MTAzQzIwMDBGQzU4QTQzODk0ODIzNzhGMzg5QTI5RkY0QzZGRTVGMUZECis6MTAzQzMwMDA1MjgzMTIzRjM5OThEQ0MwRjMyNDcyQjRGOTY3NTU0Q0IzCis6MTAzQzQwMDAxMkIxN0Q1RENBQUNBMzAyQjQ1N0Q5QjQ3QUZBRjQ0QjcxCis6MTAzQzUwMDBBN0Y1Qzg3N0E2OEI1QTNERERDQjlBMDkzRjZGNjJEQThDCis6MTAzQzYwMDBFNzg2MUMyRDFGRDhBOEQwODcyRTc5NjI4NEYyRDQzMjIzCis6MTAzQzcwMDA2Qzk0NzczMDlDNUZFMUREMzY0NkY5NTM4NjI0NUYzM0UwCis6MTAzQzgwMDBDQTM4NjNFMUE1QjQ3NTBFQTg4RkUwRjg2NTJGNEM1REM2Cis6MTAzQzkwMDA4ODdFQTI3NzE1M0M1RTA3NzQ4RjcwQUM1QjM1NzJCQjczCis6MTAzQ0EwMDAzRTY2REMzQTYzQjgwMEU1NDg5RDhFRTdFQkQzMEZFNjRECis6MTAzQ0IwMDA3RjM3MjM4QkZDQUNGMUYzNTJDNjZGOENERkFCQkU1OTYwCis6MTAzQ0MwMDBGMEI5NjJGNkYxQUU0MjE3ODNGM0FEQ0VERThFN0FFQzM4Cis6MTAzQ0QwMDBFMDdDQTZGMDI0OUE2RjMwRUY0Nzk5MkZGMzhCQ0RGNzU1Cis6MTAzQ0UwMDA5RTQyQ0ZFQTdDRjU1RkQ1RUVBRkRFMThBMUZERDVFQkE1Cis6MTAzQ0YwMDA5ODkyRTdDRkU3N0IwRkY3RTdGQzAyRjMyOUY5NUI4M0E0Cis6MTAzRDAwMDBGMzdENERCQkJGN0E1Mzg0RjY1NzNGNjg0RjJBRjM2NTY2Cis6MTAzRDEwMDA3RUIxRjk0Q0M2NjY4QUNGM0MyNkYwNzM5REJCNkJENDRFCis6MTAzRDIwMDBFM0U4QTdCRjMwNzc5NThDRjhBNkRBNjdCN0UwMEI4MDk5Cis6MTAzRDMwMDA2N0I3MjhGOTREQjdFNjE4NDk2RjUwQzdEREREMzY4NUZFCis6MTAzRDQwMDA3OThEREM5RjgzNjVEMTBEMDJFNUZCOEY5QjIyNzgzMTU1Cis6MTAzRDUwMDAzRUI2MERFOERFNUI4OEZFMkE4OURBNDM2RDBFMkE3N0NGCis6MTAzRDYwMDBCNEM5NTQ3RTE3RUM0MTJGRjlBRDNDNTRGRjFGODVEQ0RDCis6MTAzRDcwMDBDRTdGNkM5NEI0NjQwNUVBMEI5NTU2OUVFRjdDQzMzNEY5Cis6MTAzRDgwMDBEMDQ0QTNGNjE2MTg2MDdEMTZDQzJCRkMzMjJCREIwODMyCis6MTAzRDkwMDBCNUMyQUQxQzFFRjZFQUNDMTA5RTkzQjVFQzUwQTQwRDM2Cis6MTAzREEwMDBFQUE2QTk3QTE5RjNCODRENEVFNjRCRTQ4RjY5MkRFNEUzCis6MTAzREIwMDA3RTlFNDdENEZDRjgxQjA1MUU3RjA3N0RBNDEyRjZCRjJDCis6MTAzREMwMDA0QzAxMzVEM0NGMTU1MEFGQkFGNTZCQTlBNDhGRDQyREM0Cis6MTAzREQwMDBFQTRGOTY2MDFENzcwODY1NkZCQjAwMUVCRjUxRjQ5MUQ2Cis6MTAzREUwMDA2NUEzMzkxREM3REI5Mzc2OTQyQzEzMzE3RjRGMUYwQUNGCis6MTAzREYwMDBDMTlGMEI5MzE3OTIzREJBNzAzMTYzNjlGMEZFQURGODI1Cis6MTAzRTAwMDAxRUM4OTVFMzhBM0VGMzQ2QkY4OUExQkQxNkFDRTY3MTk0Cis6MTAzRTEwMDBFNzNCMUVENkRBOTE4RjU5QzIxMkVBNzE4Rjk1RDkxOUY0Cis6MTAzRTIwMDA5RTQ3NUQ4QkI2RkQxMTI1OEVCMDMwQ0VBRUJDMzUyRUQzCis6MTAzRTMwMDBBRjA2QjQ0QzlFMUY4MjdCOUVDQUQ4MDM4NURBQkM5QTFCCis6MTAzRTQwMDA4QTQyOTlGM0I5MUMzQjI1NTVBN0NENzY4REMwNzhBNDNECis6MTAzRTUwMDBDOTk4RjgxRThFM0FERTMzQUE1Q0I2N0IwOTBFNkExRTNDCis6MTAzRTYwMDAxQUQzQkY1ODQ2RUYyQkYzQTlFRjNEMkRCQzM4RUE0QUQxCis6MTAzRTcwMDBGRTRFRDBEQjNFRUMyRkUyRjIxOUY1RUI4RDcxRUJCQzgwCis6MTAzRTgwMDAzMDM3RUYxQkQ1MkMxMURFMEU4OEU4NTc1MEQ3RkZCRjE3Cis6MTAzRTkwMDAwQjVGQUJEMUE3MDE3ODc0N0NDNkE3MTMyOTBFQzM3MjQwCis6MTAzRUEwMDA2OERGQjdBOEY4QTNFNDU3MkQxQ0FDOEI0QzhDQzlBRkM2Cis6MTAzRUIwMDA2MzhFMDEzNzlFRjc1QjM3MjY3OTM2MTJGRTI5RkE0MzY3Cis6MTAzRUMwMDBGODFERERFNUE0Q0YzRkRFRTAzQTFDREU1Q0VFOEZBQkYzCis6MTAzRUQwMDA5NjI4M0Y0ODE5NkYzODM4QzdFNzNGQTg3RTFCRkFDNUI4Cis6MTAzRUUwMDBFNDFGQjY2RkU3Rjk4RjU5RjZBQThGRjE5RTE0M0UzRjkzCis6MTAzRUYwMDBBREMxMkJFRDdEQThGNkRFRTcwNEI0MkZCRThERjdCQjc4Cis6MTAzRjAwMDBDNEU4N0NFOEJGMEQ5MkZFQUFCREE3MTVCRjJFRjVGRTQyCis6MTAzRjEwMDA4REJBOUU3NjIzMkIyMjdCNTQwN0ZDMDFFNjlCNjdFQjMwCis6MTAzRjIwMDAxNzA1MTlGREYxMDMyMkM1Q0JDNzcyM0YxMUU2MDhGMzRGCis6MTAzRjMwMDA3QjJGNUNDRkQzNjdFQjc4M0VDNzE4OTlFQjdEQUU4MUMyCis6MTAzRjQwMDBEMUIxRjFBMjhGMEFCOTVDOUY5N0Y0NjY4QjBDRjJFRkE2Cis6MTAzRjUwMDBGREMyQzA0MkNDNTc5QTM3RTJDRDE2MjdENDRGMTUzNjUyCis6MTAzRjYwMDAyRkM0N0NBNjc5RDk2RjdFRUEwNDlERURCNzg1NUZFMTA5Cis6MTAzRjcwMDBGNTkyMzczRkNEODNGQUZGMkE1Q0M1RUJEMzE4MDFFNUY0Cis6MTAzRjgwMDA3Nzg1QUIxNzIyNUZGREE4NTA1MkZDOTc5MTFDOUM2RjYwCis6MTAzRjkwMDA5RUMwRjFFNThCOTY3QTkzMkU2MTNDRkY3Q0ExRUE0RjlGCis6MTAzRkEwMDA2NDA2OUNDN0Q3RjNBRjI3OTExRkY5NTRGRkFCNTcxQjhCCis6MTAzRkIwMDA4NzY0RDg5NDg5Rjc4Njk0OUYzRDg1RjQ5OTM5RjgzN0JBCis6MTAzRkMwMDBDMEYzNjYzMURDOEJFRkVCQ0M2MTgyRUI1OENDQTMyOURDCis6MTAzRkQwMDAyMjE0NzhFMkYyMTVGMjI1RTJGMTQ4MDA3NDZENDU3RDc1Cis6MTAzRkUwMDA1OTk2NTgxREU4QzdFREFEQ0M2RkM5OEZDMTczRTY1NTIyCis6MTAzRkYwMDBGMDlDRTdGNUE4RUI1MUU3MUZCMjJFMzg1MjMxMkQ3NjMxCis6MTA0MDAwMDA1RERCNjgxQzc1NURFN0NBNEM0MUJDNUZBNkM2NTVENTMzCis6MTA0MDEwMDA3NTlEMTMwNjlFNDE2N0M0OUM5MjlEOEJGMTVDQ0YyNUQ0Cis6MTA0MDIwMDAwRjhDMTZBMEZFRkNEOEI3RTk5Q0NGNjUwQzNDMjM3ODFBCis6MTA0MDMwMDA2MkVBMDY3RThFMjNDNzNFNEE3QTRGOEJFMDFEMzkxNjEwCis6MTA0MDQwMDBGOUE1RDE0NkY3RDgzQTE1M0Q2RjUzODYzRkM4Qjg3RURCCis6MTA0MDUwMDA0RkY5OEZDMTVDN0UzRkEwN0FBMkUwOEQ4REZCM0JDN0ZDCis6MTA0MDYwMDBGMkI4NDk0ODI5Njc5QTM2Mzc5RjAwN0MwQ0VDMTVEODdFCis6MTA0MDcwMDAxQUU4MUZCODc0QzE4OEY2RjhCQzlFNTM0NkI0QkI5QkJGCis6MTA0MDgwMDBGNjlFMzJBMjVEREQ4NDc1MThBNzY5OUI5MUY4NTUzQ0I4Cis6MTA0MDkwMDBCQzc3OEVENTZCRTJFQkFBM0Q3MTM4Qjc3MDlEMURENjBCCis6MTA0MEEwMDBEM0I0NDJGMDYwQ0FFQ0FBRkRBOTMzQjFCRTZBMzlFRUJFCis6MTA0MEIwMDA5MkIxREI2RkQ4MzMxM0QxQTVERUQ3QkIwRUNCNjVBQzg1Cis6MTA0MEMwMDBGRjMwREU5RjVCRTJEN0VBRjk0QjFCQjQ3QTc5N0RCMzEwCis6MTA0MEQwMDA1NjlGNUVCNjE5NEUwN0U0RDdCMkQ2NkNDRDdCMEMzNTMxCis6MTA0MEUwMDA2NDU4Q0YxMkU1M0M5NzM4MUU4REU4Qzc2MzNERTY1RTA1Cis6MTA0MEYwMDA4RTQwNjQ0REZFOURBNTdDMDc1MDZBRkQxNkYzN0EwNDQwCis6MTA0MTAwMDBBMkUzQTY1QTMzRjk1RjBGRTdGMjdDRkFDMDRBM0RFNTE1Cis6MTA0MTEwMDAwOTA1MTAxREIwREUyQzI4RkUyQzJGRjE0NzU1N0VDRjRGCis6MTA0MTIwMDBFQzNFN0YyNDFCREY1RjY5MjAzOEIwQTAzNzgyN0VGRDI0Cis6MTA0MTMwMDA1QTA1OUY5NkQ1RDY3QzhDNzg1NjJCREZDN0U1Rjg5ODI0Cis6MTA0MTQwMDA1RDA2RjJBRkY4QjkzRTJFMkJGRUVGQkFFRUM3QUFEMzRBCis6MTA0MTUwMDA1MEZGNkMxMUM4QkZCMUI0NDFBQkFGRDdFMzFGQThCRkNDCis6MTA0MTYwMDBCNTBBQTFCMDEzRTFBNDZENUZENkFBQURERjM1NTY5MUIzCis6MTA0MTcwMDA2MzI1QUMwNEU5QTQ2MUFDMjAxMkREMjhGNTNGRTZGRTFFCis6MTA0MTgwMDBFMjhEMzA0Q0Y0OTBFMEJCN0YyQzFDRDA0QTYzNzgzQzJECis6MTA0MTkwMDBDQUI1ODcwNDNGRDVENTc2NzhERUM0RTUwRTk3RjczQUUxCis6MTA0MUEwMDBBMDI4RTJCQjA2RUU1NzA4MzYwQTg0OEY0Qjg3QzhGRjZCCis6MTA0MUIwMDAxOEZENDAzRkI0RkVDQzU4MkVERkRBMkRCRTE2QjI5NzY0Cis6MTA0MUMwMDA1RTE1MjRENDQ3QUE0NUFGOThFNjhFREFCM0YxRjhGODI1Cis6MTA0MUQwMDBBQzgyREY2RkIwN0UzN0FFQUIxMDgxMEVGMDJGNUMzODUzCis6MTA0MUUwMDAyMjg0RkVCMEMyOUYyQ0E3N0NDN0MyMEFDMUEzMjM3QTM3Cis6MTA0MUYwMDBENkIxRDY3MjJDNDVFMjBGQTg2RjVBQTAyQ0Q0NzdENTMxCis6MTA0MjAwMDAxMkJGOUU2MDk0NzgzRUExODNDNUYyMDFFRjczNENDMDRCCis6MTA0MjEwMDBCQzNFNUMzQUNFN0I3M0NFRDFDRkYwMUM2RkQ5RkFFOEFFCis6MTA0MjIwMDA3OUU0NzdBRTdDNkZGOTYzQjBCRTREMTYzRUZGQTZGRDE0Cis6MTA0MjMwMDAwMkU5QUY0REVFMjNDNDE3NDcwMjlBRTBCQzREMEU4NTRDCis6MTA0MjQwMDAzRjc2MDM3RjU0RjcwRkU3M0QxMkY5MTU1RTEwOTlFQkE3Cis6MTA0MjUwMDBBNjc5NDdBOUYxMDEzNURGMzY1Q0E1QkIwQ0U3Mzc1MkRCCis6MTA0MjYwMDA5OTc3NjdBOTRDRkJDRUJDQUY0QkMwN0RFN0IyRTAxQTkzCis6MTA0MjcwMDBGNDEzRkRGMzU4NDY3MDU0NEJENThGQkYzODFBQzc3NkU4Cis6MTA0MjgwMDBFMjc5MzYzQUZBOERBNDdGMkI3MUVDMDRGRDRBMTJGNkRFCis6MTA0MjkwMDBGMzMyOEQxRjYxQTZGRTUyMEFDNjlCNTdCRDlBN0ZDNTk5Cis6MTA0MkEwMDA3QzBCQkQ1OUE3QTE1NzgzNjRENUQwRjVDRDQ1NUEzQUFCCis6MTA0MkIwMDA5RkU3RDFEMkY3QUQ1M0YyMzVFREYzQkQyNTlBRjY4NUUwCis6MTA0MkMwMDAzNTE1OUFGQTYyREYzNDRERkZEQjZBNjc2OEVEN0RDNzBBCis6MTA0MkQwMDAxQzREN0Y4QkJDNDA1MzRGMkFCQTVERDMzRkQ5NzNBNzg3Cis6MTA0MkUwMDA5NkRGRDhCQjI4QUZDMDY4MEVGNkZCMDEwRTlEODBBQkYxCis6MTA0MkYwMDA1M0QyQTJGQ0JBMjRDNThDNDlDN0NDNUE2MUIxNjFEOTRBCis6MTA0MzAwMDA1OTY2MEFFM0I5NzU2NkYxMzhBQkU5QjUwNzFDNjE4NEYzCis6MTA0MzEwMDBGQTg4MTdDRDk1NTBCRTIwODRBQTMwNUU2NDU2RUNCQzU2Cis6MTA0MzIwMDBFMjg3OTk4NjlGOEYyREUxNzhBRTk2RUY4RkY1N0Y1Q0JGCis6MTA0MzMwMDAwNEE1N0JCNzlDQ0RGM0E3MjNDNTc4M0U2Njc0MjAyMkU1Cis6MTA0MzQwMDAxRUVGMzM5M0RFMzEyMTRFRkZGRDVFNjlFNTZGNTFBRTA2Cis6MTA0MzUwMDBCODFGRjZDRTI2QkY1NDM3OTNGMEZFRUMwRTIzQ0Y3MzcyCis6MTA0MzYwMDAwQUVFRTNGOUI0RUVFRTdFOUQzNzg2REUwMjQ1NUNERUIyCis6MTA0MzcwMDA3RkQzNTc0NTc5NEI0RDNEMjBDRDEwQkZCNzlFMzZBMjE4Cis6MTA0MzgwMDBERkFFQTlBNzM3MDVFNUM2NzhERjY5MjNFQUQ3RDFFNzBECis6MTA0MzkwMDA4QTNDMTEwN0FDMThCRkZDOTdBRUM0Rjk2OTYzOEE4Q0RDCis6MTA0M0EwMDAzNEZFMTE4NURGRDYzRkMwRjkyRDIwREM1Q0I0OEY1NDdDCis6MTA0M0IwMDBGRTU5QkY4N0VGQUY3RUIxOTFFODVCRTVBM0MwM0YzNTAzCis6MTA0M0MwMDBGMUIwNzhCRUJDRjQ4NkQwM0FBNDVERTBBMzFBRkI2NUQ4Cis6MTA0M0QwMDBEOUEyNTkxRkEzM0RDNDU4OThGNDE4RTBBM0RBRjY5QzVCCis6MTA0M0UwMDBGNTQ0REZDQkUyRUM5QkU0MjJFMEE3QTg0Nzk0MzBGNzRBCis6MTA0M0YwMDA2NUEwOTc5MzNFNURDMjdEQjk0QkY4RjcwMjRFRkE2NzEwCis6MTA0NDAwMDAxMEJDQkYwOTcwNDNCQkYxOUI0M0UwQzRFMTc3MzVGOEIyCis6MTA0NDEwMDBCQ0E0RjgxM0Q1NzM4QUVGNTc1NkMyRjlFODRCQzNGMDIyCis6MTA0NDIwMDBDQjA3OEE3OEZCMEUyMTUyOEVDQzJDRTBCMzEyOUUyRTQ1Cis6MTA0NDMwMDAzNTlCMTc2M0ZFQzE5MURDM0ZBREM3Nzg0MkZEMEYwNDg5Cis6MTA0NDQwMDBCNDY1RDlBRjdCNUZDQkM0N0MwNEUzOUVDMzk5OTgyNzQ2Cis6MTA0NDUwMDAxMUU4M0E5Q0M5MDA0RTJCMERGMjFBRDQ4QjAxMEYzQzg3Cis6MTA0NDYwMDA2QkUwNUM5QUJBQzNCNEZFQzZBRThBNUU3Q0RFRDgyRDIxCis6MTA0NDcwMDA3ODkwMTUwNkY2OUU5RjQ1RkI2NEZERUI1MThGREYzMTZBCis6MTA0NDgwMDBDQ0JBQTYxNTcxN0Q3ODU2OTFDQ0YzOThGRDMwMjdDQTI5Cis6MTA0NDkwMDBEOUJEMjZCMjYzRUJGNzAwMUZDMjc1RUQxN0U4NUVDNjAzCis6MTA0NEEwMDA4RTBERTZEQTQ0RkFDOTY0ODQzN0MwRTlEMDA2MjNDMzI2Cis6MTA0NEIwMDAzOENBNEE3ODFGRjc3MTI0Rjc4OEQxOEM3OEIzNDcyMDFGCis6MTA0NEMwMDA5QjMwRDA3NTYyMzFGQUUzMDMyRDA2ODY3MTVCNzU3REYyCis6MTA0NEQwMDA2NzcyMjNFRkUzRkVERjU5NjE2MDc4OEZCMDdEMDU4RjRGCis6MTA0NEUwMDBDN0JFRDNBMkE3NzFGNDc3MUJBOEJFRTQ1RTlFMzc3QzNCCis6MTA0NEYwMDA3MEM1NkZENzY3QzNCOEVGQUMxNDI4REY3RUM2RERGRjg5Cis6MTA0NTAwMDA3NjA0RUI0QkVFRTU3QTUwM0NGRTBFRTI2QjFDN0UyRTAxCis6MTA0NTEwMDBGMTZCRjE2RTA4OUUzNjdDMzEzQ0JEMzM4QUE3RTM1MUM2Cis6MTA0NTIwMDBDRUMyQjlDRjFDODlGOEYzMjBBMzdCOENCNTk3MEUxQUE1Cis6MTA0NTMwMDA0NkMyN0FGM0Q2NEIxRTBDRUQ5NkVBNDNFQjMyOTEyRjJFCis6MTA0NTQwMDAxQ0U0RUQ2NTJCQjcwQjlDQkZDODc0QkYzREJCRDNDODQzCis6MTA0NTUwMDBEMDZFN0M0MDM5QUYwNzk0RjM5MkQ5ODA4MEY5NkU0Q0NECis6MTA0NTYwMDA4Q0U0RTFGQTlDNEE3RUQ3Q0IwNjU2QkIwN0ZENDgyMjc1Cis6MTA0NTcwMDBFNzJGQTUzRjc0NkM4RkY1MjNCOTE0QkVBMkYyQkQxMkNDCis6MTA0NTgwMDBCMEY3Rjc5MDFGQkEyQjBCRUY5REJGNjRFMEZFQjFEMURGCis6MTA0NTkwMDBDQTc4MDVGOTAzQjNFNjQzRjlDRDIyQ0UwN0RCOTQ3NTVCCis6MTA0NUEwMDBBODc1QUY4MkZGQ0NCRTgzRTAzQkNGQ0NFMTNFQTczNTAwCis6MTA0NUIwMDA1Qzg3RkJCODQ3RjRBRjJCODJGNkI5QTM3RkIxOTI1MTY5Cis6MTA0NUMwMDA3RUU0RUI2RTNGRjlCOThBNDlBRTA1OTRGMzM4MzhGNUNECis6MTA0NUQwMDA3N0RCNTY2MzFFREUzODJCOURFM0ZDQkVBNzIyNzhBRTQ4Cis6MTA0NUUwMDA0RDJFOTFGMjBGMkQwNTEzNDdGQUFGRTA0NzA4NUM5NDZBCis6MTA0NUYwMDAzNUY3Rjg5QTdBQ0VDRkYyMjZBMEVCNjlDQTdBNEI5NUI2Cis6MTA0NjAwMDBGQjdBQUM4N0ZCMEY4MDFGOEI1M0NBQTNGREQ0RkRBQjk1Cis6MTA0NjEwMDA3RTBGNEJDMTc3RTk5QzU2N0Y4NTk1RjE3QkZDOEZEMTRFCis6MTA0NjIwMDBGRTk3QUUzQzIxRTAzRDk1REIwQzVFODMwREUwRkM4QkZDCis6MTA0NjMwMDAxMTZDMzFEQUMxQUZCNzMxQkFCNzc2MENFRkFGMDEyQkRECis6MTA0NjQwMDA3OUEzNERBMjdBNDRCOUM3RjY2NjlCNENFNTZENDZERjY3Cis6MTA0NjUwMDA2RTg0Q0ZFMjQzQ0QwNTA4QUY4M0I5NEZGQUYwQkIwQ0FGCis6MTA0NjYwMDBFNzhFMjlGQTJDOTNGOEJENDYwNUY3MkVGNEU4OTkxOTQwCis6MTA0NjcwMDBEQTJGRUMxNTQyRTQzNDUxRDY3RkM3QzUyQ0U2MDc3RTBECis6MTA0NjgwMDBGMjJCRTVCRTVDNjNFQkNGODlDRjc5MUFDRUNGNDIzQkVDCis6MTA0NjkwMDBBMzZDRTVBOUY1NTgwRkI0RkVEQjJDRDQxQkRFMDczOTVCCis6MTA0NkEwMDA4MUY4MTVFODE2OTgwM0M2QTlCQjk4NDZFRjM3NzY5RkEwCis6MTA0NkIwMDAzMEEyM0RGRjkyNkU2MDE2QzIzRjc4NDBBMDdCNTY4MUNCCis6MTA0NkMwMDBFNkYzQzQzRkI3MjlGRTk1OEY4QTc4MUMzMUQwNTNBNkY0Cis6MTA0NkQwMDBBM0YzRjQxNjczRkI0NDM5RkZERUUyN0Y0RjQxRkU2NTFFCis6MTA0NkUwMDA2RTk1OEY0RkMzNzMzQ0FBQTc3M0RDNTgzNTkwMjIyNTczCis6MTA0NkYwMDAzODk3OTMzMDJFRTY4RkZDNEFDOUQzOEI2RkFGMzUwNkJGCis6MTA0NzAwMDBDOTJGNUJBQkUwNkQ3Q0ZCMDcwQTNFMDI4NDBENEE5RTFECis6MTA0NzEwMDAxMjEzNjAzRDc1MEE3RUQ1RTNGNzYxRDI1MENGMTdDMjAwCis6MTA0NzIwMDA1NkEwREJGQTlFMTlFNERGQTg2RkJFRjJGNzVFODZDM0RGCis6MTA0NzMwMDBCNzZCMkQ5QjE4Rjc2RkE4NzVCNEJGNjJGM0I4RDBGRUE2Cis6MTA0NzQwMDBEMkRFNEIwRkQyM0U0Q0I5QUU5MUZFMkJFODc3ODFGRTA0Cis6MTA0NzUwMDAyQzhBOUYzNDc1MzI4QTk3MzQ1RTJDQTZGMkVDRkU0NzgxCis6MTA0NzYwMDBFODFFOTREOTNBRjAyNENBMDU1NkE4MjNCREJFMzFBODQ0Cis6MTA0NzcwMDBENTZGOEUxNzczM0EzODVFQ0NFOUY5NTIxMUQ4Mjc2Njk3Cis6MTA0NzgwMDAzNjY4OUY4MDFENzIxOUYxMTJFQzkwOTQzRUE2QjE0RkNECis6MTA0NzkwMDBFMjlGOTM3RDYyNTZGQzg2QTAyRUY5NUY0RUIwRUVCNzg1Cis6MTA0N0EwMDA4QUFCQzQ3MTE5NDg1NzlCMDlCRjE5RTAzN0UyNTVGQzIxCis6MTA0N0IwMDAzRTQ3OENFM0VCNTJFOTc5NDlERkM3NDZENDc3MDNERDA2Cis6MTA0N0MwMDA4OUU5RjkzN0M1OTUyMzcwREMwREMzRTRFNUJENURDQ0ZGCis6MTA0N0QwMDBGOTVERTM1NjQ2RjAwQTZDNEQyMzM4OUQ2MTVCN0Q1NUNCCis6MTA0N0UwMDA4MDk3Njc2MDFENzg0RkZEOUNDRjk3OTQwQUVGOUZGM0U5Cis6MTA0N0YwMDBGQjkyMzAzRUE3RDI3RkQzNTYyQkJEQjdDMUI1MjAxRDRCCis6MTA0ODAwMDBCRkFCRTExQUM3QkZFQjczQjY3Qjg2MTlFMTdDQzc1NjE1Cis6MTA0ODEwMDA0RTc3RUE3Q0VGODc5N0E0MjNGRDRDMzIwQzE4RDEzRkVBCis6MTA0ODIwMDA5OUQzNzMyQTA1RjVCQTQ5RkIxN0E2MjNGRDBEQjc0RTk4Cis6MTA0ODMwMDBCQjcyMUU4REFENTk4QkU5MUUxMEZDRjQ0MEY3RjcyQkFGCis6MTA0ODQwMDA3MjJDQjAzNjZDNDRGOERGREZDQTA4N0Y3QkY3RkRCQTA0Cis6MTA0ODUwMDAwOUU5Rjc2QzRGOTI4NDcyRjJDQ0FCNDk0MUU0RjdFNzc3Cis6MTA0ODYwMDAwRTk4NDIzQTE4NkFBNUYyM0RBNDMzODZGRTVCNDg3RjUzCis6MTA0ODcwMDBEQ0FGQTc3Qzg1QzA4MTNGM0M4OUY0MThEODY3QTI3QjU4Cis6MTA0ODgwMDAzNUY3RjczQzcyMUVFNURDQ0E5RUQ5MUY4QjU4QkVGODdGCis6MTA0ODkwMDBGN0E1ODdDNkQ2RDE4QjYzRjM4RUZGRDBCNjNCMEJGOTU1Cis6MTA0OEEwMDBFNzU5OTFGMzg5RkJCQjVGMjE3REY2RkU0QjE3QzY2Mzg5Cis6MTA0OEIwMDBGRUUwOTk1N0ZGNjMzMkYyQjNDMDRGMkU0QzQ2M0UxNkNFCis6MTA0OEMwMDBGOEYxODVDOUQ4MUVGODYxNTI3MzIyRkQ2NDY2MDlGRkFDCis6MTA0OEQwMDBDRTg2MkExRjlENkY4OTFBM0ZDQjM5MDUzRjlDMUQ5QkIxCis6MTA0OEUwMDA2QkYwQkIwNTkzNEUyQ0EyMzg4MERBM0VBOTQwRTdDMzlCCis6MTA0OEYwMDBGRTkzREVBRTRFQkYzQkU2QkQ4RTg4NDhGOTEyMTM0RkU1Cis6MTA0OTAwMDA1NDI3QUQ4OEMxQ0IwRjhBMERBQTlGRUVEQUZDMjM0QTRCCis6MTA0OTEwMDAxRTgyRUExRkQ5MTAxMUY5M0RCQjA2N0QwOEYzN0I5NzczCis6MTA0OTIwMDA0Njc4RkMzRERFNkZDMjk4RUZFNjUyM0NFRjdCMzMzQ0FECis6MTA0OTMwMDBGOEJEMUVCQ0E3OEU3MTkxNzMwRjE2ODRFODlFN0FEMEM1Cis6MTA0OTQwMDA3Q0Q4MTVBMzA3MkQ4OUU4QzIyNkY0ODNGNDk4QzJBODYxCis6MTA0OTUwMDAwRjJEODk4OEE3NEMzMTdFOTFGN0E1OTdEN0ExMUFCRjUzCis6MTA0OTYwMDBDNEFGRjU2M0M0RkI0MUUwOTcyQ0M2QzQ0RkVBNUJDMkY5Cis6MTA0OTcwMDAwNjU1NEVDRDgzRjk3RkIxOEU0OTE4QjcxOUUyMUZBOUFDCis6MTA0OTgwMDBGRDEyRjk2MUUyRkQyNDcyRTQwOTMzQkUyN0JCRjhGNzlBCis6MTA0OTkwMDA3NTU0M0QxM0NGNkI2RjAyN0FCNzI5NzRBMkQyNTE0Nzc5Cis6MTA0OUEwMDA0NDQ3RTdEMDExQTkzMkJCQTAzNDI4RUQ3QjQxNkMwNjA3Cis6MTA0OUIwMDAzMTJGQTg2N0UxNEVCNEQzM0IyRUREOTY4NEYwRUE3ODIwCis6MTA0OUMwMDA2QjAxQzNFRjQ3OUM5M0FBQ0MwNUY4REVBNTJGOTkxNzdFCis6MTA0OUQwMDBCQkEzRjgzMTg0N0Y4Q0UzNzI2NTUwMUYxODQ2Q0UxRDRGCis6MTA0OUUwMDA1MUY4RDZERjRCREVGNThERkJFRjIxRUZDMEFFN0U2RENCCis6MTA0OUYwMDAxQ0I3QUI5NzcyQkYwN0I3QUJFM0U1ODRDQTdGRDU3MTJECis6MTA0QTAwMDAzRjUzRTAzRDk0RkY3RTRDRkEwQkQ4QkZDNDdGM0YxQjYxCis6MTA0QTEwMDAyN0YzRUYzNEY0Q0M0RjI3QkJGOEFENDVFOUIyNkRFODhFCis6MTA0QTIwMDBGOEY5QTI0Nzk3RTYxRTNBQkVBQUFGMDU4MkRFQzM2NjMyCis6MTA0QTMwMDBCNDYzQkMzQ0ZGMzRCMDQ4QTBFRjQ4MDU3QzAyRTlEOTIwCis6MTA0QTQwMDA4MTNBNDMwOERCRDVGNTQ0MTZGMUI4RTA2MjhGNDBERkM4Cis6MTA0QTUwMDAwNTUxRjUzRjU1M0YxQzZDOUYwOEVEQ0VBOEJFQThFQTU2Cis6MTA0QTYwMDA4NTExMUZGNzhCMkVGMjFBQThGRDM2QTM3RjYwREMyNDc4Cis6MTA0QTcwMDBEQzlGODU5RTRGOUFDQUM3MDUzRTcwMThGRDlGQjc3RDgzCis6MTA0QTgwMDA1OUEwRUY3NkE5RkFBMjhBOUZGMUZBRTQyNzNERjk1N0Q3Cis6MTA0QTkwMDBGQzFFREQzNjA1MkY1NUZBMUExRDQ3MTdBQTlDNzIyOUYwCis6MTA0QUEwMDBGMDY5NDIzOTlEOEU3MkZBMzM2M0JGNkQ3OEJEMUJFNEE1Cis6MTA0QUIwMDBCNDU4NENFRjMxQzJEQjg5NkY4QkJFNDQ3NkY3QjdDNjcyCis6MTA0QUMwMDA3MTdFNkMyRjU2Q0UyRDcyQTgxMkQ3OUJDQjIyOTQxN0Q1Cis6MTA0QUQwMDAzNTlDRkNGQ0I0OThEM0MzNzBFREFFNzE1Q0NGQjkxQUIxCis6MTA0QUUwMDAxRDRGMkZGRUZCRDJGMUI0RTJGRjFFNzQzQ0E4RkYxOTRDCis6MTA0QUYwMDAxM0VGRjNBREUyQ0E2QTNDN0ZBQkJFOTlFRTREQjE5RkI2Cis6MTA0QjAwMDAxQUM4NkYxRERGRUYzMzA1RkUyMENGMzQ3ODdDMzhENzBECis6MTA0QjEwMDBBODQzQkIyN0QwQzBFREZFQ0U1NEY5MzhEOTI3QUZGMTVBCis6MTA0QjIwMDA3QkY4RjcyQkY5NEFGNzVEOTRBOEVDQzQwRjg1NjFGQjdECis6MTA0QjMwMDAwMzRFRjJEQkRDQjdGQjg0QzEwQkVGMkY2RDExQ0FEMDQzCis6MTA0QjQwMDAxRkI0QjQ0MUJCOUZDRTBDRUZFQzU4M0Y3OEU3QTgyRUMyCis6MTA0QjUwMDA4QTJCMDQ3N0U2Q0IzODdFM0Q2RTE2RkQyMTlENTkyMUM4Cis6MTA0QjYwMDA4QzNEMzZBMTFGNjcwMjNFOEZCOTg3MDFGMzM0MkFDRkVGCis6MTA0QjcwMDBBNzI5RkUxRDE2QTcwN0ZDQjhGNzFERjJGNzYwNUMwODExCis6MTA0QjgwMDBFOUQ3RDgyMzUwNUU0OEUwMjhGNzc3MzRGNTcwQkVGMEI3Cis6MTA0QjkwMDA1MTgzNDBGQ0U0MjMyNTNGMjNEMDZBMjFGRkI2QUE0Nzc2Cis6MTA0QkEwMDA3Q0FDRjRCQkY3NDE4MUY0QkQyMTdBODU1NzFCNzc2OTUyCis6MTA0QkIwMDBGQ0VFREJDNDE3RTNGNTg4QjRCRDdDMUM4Q0I3QTA1RkFBCis6MTA0QkMwMDBFNjcwRUU2NDAxRUI4RDYwMTc4RTQ0N0Q1MTk2NkZDRERCCis6MTA0QkQwMDBFNkVCNjMyMUUyMkY1RThEMUZFNTkzQTNCRjI1M0I3MkI5Cis6MTA0QkUwMDBFOTdFODFBNTkzREUxMTE3N0ZFOTlDMTMxNzdGMzk3MjQ3Cis6MTA0QkYwMDAzODFCQzc1MUY0MEMwOUZFMEZGRDg3RjE3QTQ2NTNGN0I1Cis6MTA0QzAwMDAwOTAzREEwNTU3OEJCMzZDMkVENkZBMDVDNzg4RENDRkJCCis6MTA0QzEwMDAzQUE2NDc5MEQwOUYzNDQ2ODFEMzc1MUJBQzA0QTc1OTYwCis6MTA0QzIwMDBFRkFENDg0NzNBNTdDRkU3RUM3QzdFNUU2N0RGRjlCNERCCis6MTA0QzMwMDAxMkRGOUJGQzlFMjgyMUJGRkRGMTNCMkQzRkNGRTY3NTg3Cis6MTA0QzQwMDBEOTJDRTM3QjJENDk2ODg3OUM3RDZGNTUxMkMyRjFDNzMzCis6MTA0QzUwMDA1MEUyRjc5MjdFNzg1MjRDRTgzRkZDNkJGMUEwREY3ODhGCis6MTA0QzYwMDA2NzMxQ0FCNzg3MTVCRkIxMDhGMjJEMzlFQTdGODk3RjRFCis6MTA0QzcwMDAyRkE3ODRGM0E5NEVGQzhFMTFFMkRGN0UxRURGRUUxQzBGCis6MTA0QzgwMDBFNTlGNDNGNUE3RjI3ODFFQjFDOEYxRjU5NTlFNTQwOTRBCis6MTA0QzkwMDBGNUJEMTJEODJDQzY2MUJGNkY2NTFEMTg1RkU5Q0NGMDU5Cis6MTA0Q0EwMDBCRjRFRjRGMTk0OEVGMDE3REVFN0RGQTFEODIzOTNCQzVBCis6MTA0Q0IwMDBDM0QwMTRDNjNGQzY4M0FDMzE1MzVFQTM5REUyMjBFQTQ1Cis6MTA0Q0MwMDA3NzYyNDY4MTFEQUE3QzU3NjExMUM2NUQ0Qjk0MzhDODM2Cis6MTA0Q0QwMDA3ODJCMTM3MUZDNEQwNkZGQzY3MTE4NzdFOTE1M0Q2QkYzCis6MTA0Q0UwMDBGMDFERDE5MzhFREY0NThBOEZDN0E4RjE2MTM1MkVBM0MxCis6MTA0Q0YwMDBDNjg5ODc4QkNCMDgzOENGNzg4RTY3QjFERjNENTFFMzBCCis6MTA0RDAwMDAyRkVDQ0IzQzdGQjM3RDRBMzNERDhCREQ4RTMxMTJFMjVECis6MTA0RDEwMDA5RjQzRTIyOTdGNDYzQjM1M0U5RTIyQTJGQ0ExMzg4RDZGCis6MTA0RDIwMDAzNjlFQjZCMUU4NjVDMkI3Q0YxQjQ3OUI1RTNDRENGQzQ0Cis6MTA0RDMwMDAzMkI3RTdFMkU2OUY5OEZBNDkyNkQ5MkY3RkY5NzMwQTNFCis6MTA0RDQwMDBDOUIzOUUwQjI0NzdDRTBEOTg5NEZCOURGRERDNEZEREZGCis6MTA0RDUwMDA2MzIwN0JGRDFDRDg0MTE5MzFGMjZDRjkzODBFODdCRUY3Cis6MTA0RDYwMDA5RTE5ODQ4RjdCMjNENTQ5RDhCRjUzRDE3MzM2QkNCNUU4Cis6MTA0RDcwMDA2ODIxRUFEM0MxODhDOEYzQjExOUI3NkJGNjQ2QzQ0OUI0Cis6MTA0RDgwMDA1QzNGMTgwMjI3QTkzODQxRENDOTZDNEQ5QzA3MTQ1NkJBCis6MTA0RDkwMDBGQzA1NjE2NURGMzNERUUxRjY0QUEwODVDNzBGMjQ4NTk3Cis6MTA0REEwMDBERTAyMzU0NkUyMjc0NzcyMzMwNUQ1OEYzQzMyNTE3QzBGCis6MTA0REIwMDA2MUZGMDBGMUQ5RkE3Qjc5N0NGNzlBRTMwQkREQkQwNjQwCis6MTA0REMwMDA5Njk3QzA2RjVCMzM4QkY4Q0RCNUZBNkIxOTVBQzE5M0M4Cis6MTA0REQwMDBBM0ZDMzlBQjQ0RTEyN0E1OEFGRkI2OThFN0YzQTczNUQyCis6MTA0REUwMDA5NzU1RTJGN0VGQzJDMzlFQjc3RjYzNDk4MkYzNEVEMDc3Cis6MTA0REYwMDA2RkFCRkJEQUUyODFCRkJFQzZCODYxNkFEMUI1RjUxQjA1Cis6MTA0RTAwMDA5Mzg4MUUxMkY0OUI3RThERTM3REYzMUFGQkI1NURFMzYwCis6MTA0RTEwMDBCQzBCQzcyNUVBRjdGRjY4RkMzMzNFQkUxOTFGMEY4RDk4Cis6MTA0RTIwMDA4RjczOUE1RUJCM0I4ODZEOEYwODhGMEU4NDExQkEyOUYxCis6MTA0RTMwMDBGQjZBMDUyMDU1MzFGNUJCNjZFNDZCNzNBN0YyNzhDMEI5Cis6MTA0RTQwMDA4NjZBNzM2OEJCMTA4RDhCQUFGMDBBOTY3MkJENEI3MjhFCis6MTA0RTUwMDA5RjBGRTI3NzEyNDc3QjIzRDVFOTQwQzdFN0E2MzJCMjFFCis6MTA0RTYwMDAxQkNFNTk5NEVGMjM4OUQyQThGOTc0N0UxMjdEMUZBNzE3Cis6MTA0RTcwMDBEMzkyMzhCRTM0NTExOTZGMzgzRUYyQkREMkNBRjU0OENDCis6MTA0RTgwMDAyRkQyMzBERkFGQzgyREUxNzY4MEQ0Q0RDODVGQzM0NEM4Cis6MTA0RTkwMDA3OUQ0MDI5QTU3MUU0NURGREYzQkM0OUZBNzg0MTlFNUVBCis6MTA0RUEwMDBGNzQxQkI3MzAxRTlDRkIyMTNEN0I3NDU4OTdCQTVDREQ1Cis6MTA0RUIwMDAyOTc0QTI5RjJFMERFNDJEQzY0NTFFQzNGODA4RjlGNUVFCis6MTA0RUMwMDAyNUVBQTdDRTk3RUNFNkYzNkQzMTMwMDFFMzU4QzE3MUM2Cis6MTA0RUQwMDAzQ0FGODI3NTdDNUYxM0Q3Mzg2NjA4N0ZCMDVDQTBCOEEyCis6MTA0RUUwMDBDNjc2NUNGRkNGNzQ2MUY3MEUyNzNGMTc4NEFGN0JBRkE4Cis6MTA0RUYwMDA0NEYxOTYzN0E2N0VBRjg4RUVDQjJCNzE4RUQ1MTJFRjlDCis6MTA0RjAwMDA3MjEwRUQwQzU4QzdFQTU3MkIwODdGOTdGNjRERkQ2NUQ4Cis6MTA0RjEwMDAxREVBODMyRTkxRTAzQzQ0MEY1N0VDQUI5MzhBN0RBOEE5Cis6MTA0RjIwMDBEQTU3RkQ2ODI3QzZEODFCM0Y1MEY0ODYwNDc0RjU4MzEyCis6MTA0RjMwMDA0NDdDNjk4QkMwRURERkUwQ0ZCOEZENUI2MUY0RTRDNzcyCis6MTA0RjQwMDBFNjUzRjUyQTcxOTJFNTYxRUU4NzU1RUREQUYxREU5MEQwCis6MTA0RjUwMDAyRTEzRTA1MEYxQTAzRTZDMDIzOTVEQjFCRUQ0ODhGQzQ2Cis6MTA0RjYwMDBCQTYyN0RBRTk1RkM0QTJCRjZFODU0NzgyNzNBRjc5RjUzCis6MTA0RjcwMDAyQUVCREM3MDc0ODBFMjEyQUZDNEM1Mjc5M0RENDY2QTY5Cis6MTA0RjgwMDA3RjQ4QzE5RjY0M0M1QjI4NTcxNzg4RUQyODdFNDdEQzJCCis6MTA0RjkwMDAyMEU5MTNGOUM1RUI0MUVGQzdGNTJERUZFNEVCNTVFMzNECis6MTA0RkEwMDAyMEY1NjE3OTA2Q0U3M0VBRjBDMDdBMkNDQjFCOUMzM0Q2Cis6MTA0RkIwMDBDODZGQjhGMkZDN0E5NDlCODE0QjE3OEU0QzI3M0Y4MEM4Cis6MTA0RkMwMDA1MTRFNzQ1RjYwNEIyOUY3MUZCRTgyOEEwOEMyNkJCNkQwCis6MTA0RkQwMDA0ODc5QkIxNUIzNDUzQUVGQjQ3QTBCRDlFMTY5MDZBNjE3Cis6MTA0RkUwMDBDN0VGQjBBNkNERTc3MkFDQkNDNjNFMDNFQjZDNTEyQTRFCis6MTA0RkYwMDBDOUUxRjJBMzcyRUFEREVFQTg5RDlGMzZCQjI1MDNFMTZECis6MTA1MDAwMDA3NEI1Rjg5MEVBMkZCOENERThGRDYzNDlDNkU3OEYwRjc1Cis6MTA1MDEwMDAzNTFFN0I4QkYyQ0NFRUU4RDdDNjg3RDQ3OENGNzBGMTAzCis6MTA1MDIwMDAyMTM1M0UxQkE4Rjk1NDEzNEYwRTg4MDNCM0QwQUY1MjVECis6MTA1MDMwMDBGMUVBMjk4QTBGMDdCQTA1QzlFMThDQzY4RDAyN0JDRjM4Cis6MTA1MDQwMDAxQjA5QkU0QUJDMDhGQTFCRjFCRDBBMzhGNjUxNjlGOEMzCis6MTA1MDUwMDAxRDAyMUUzRkRBODdGOUI4NDZGQ0JFOUU0NDc5QjczRjcxCis6MTA1MDYwMDBDMjdDREM0MkZDQkUxRUNGQzczRDgwRjlCODQ2QkNGRjA3Cis6MTA1MDcwMDBDMUYzNzFGQjk0RkNERTQwQ0Y3OThBMzdBNUI5ODdFNDkwCis6MTA1MDgwMDA1MzUxM0NFMjIxQzE5N0UxOUVBNDg5NTc1MDNEM0U1RUI5Cis6MTA1MDkwMDBBMUI3NzIzQjM0NzBENDQwREYzRjBGMUMzMzEzOUZBRDc4Cis6MTA1MEEwMDBFQzU5M0UwNkY1MzFGNUJCRTQ0RDE4MkY4OEYxMkY5REU0Cis6MTA1MEIwMDBGNTdBMkM3OEJGRTdBQ0NGNjNDMTM4NDE0NUVGQzc0NkRFCis6MTA1MEMwMDA5OUY4NEUzODFCNTM5ODlBQzQ4ODExRUQ3RDg0MDNFNUY2Cis6MTA1MEQwMDBGOUY1NTQ1QTEwQUU1N0Y1RUI3N0ZGN0ZCRkZFRTdGMUI1Cis6MTA1MEUwMDBFQjdGMkI0QTk3QzQzRkNBN0QzQUJBNTc1RTdFRDQ2QjlBCis6MTA1MEYwMDBCOTNCODYzRjZDRjA3MUZGRjAwNjU3MUVEMURGMTNCRTNGCis6MTA1MTAwMDBCQ0Q0MTVCMTdFRkMxQTZFQkZBNUNENzY1OTYyOUZCRjg3Cis6MTA1MTEwMDA1QkNBRkRGODY5NDJFMkZCMDU3N0I5ODdFNUI3NzdCOTY1Cis6MTA1MTIwMDAxM0VBM0I4OUUzMDExQjZBMzgxRjUxRkRGRDQzRTMwMzhBCis6MTA1MTMwMDA5RUQ3NUMzMTdFRkVCMzNGMzNEM0JGQUZEMEJCREY0NERECis6MTA1MTQwMDBGMkZDNEZBRjlBNzZBMERFNUQ1RUIzNjI0QzMyRDRDQkY4Cis6MTA1MTUwMDA0RjlBOTg5M0NCMjM0RDVDNjE2OThEQ0U2QjQ5NDkxNDZFCis6MTA1MTYwMDA0N0YwNjZEM0Y3NDNFM0UzMDUzNTNBRTJFRjgzRjE4Mjk0Cis6MTA1MTcwMDAxQUYxMTRENTE1RkRGQzhFRjNCRjRCQzY0Rjk0QkUyMjE5Cis6MTA1MTgwMDA4NDNBRDFCRTc4QTU1MUYwRjRCMkExRjEwMzE4Mzg5QjRFCis6MTA1MTkwMDA0RDgxNURENDcwM0JDMTUzNkIyNkJCRTA2QTcxODVCQTBCCis6MTA1MUEwMDBCRDI3RDZBMTlGQTA4QzZERUVDNEVGNTE5NkI5NzQxMkE1Cis6MTA1MUIwMDA4OEEyMDQ3MTA1OUVERjU5QUVFODExRjFGRTAxQzQwRjBCCis6MTA1MUMwMDA5NEZCRjE3RUMxQUQ2RTZFOUY2RjU1RTQ3RTVFMDk5N0Q0Cis6MTA1MUQwMDAzM0VBMzhFQTdCRjFFNzdFQzZBRDhEM0ZDNEI3QkZBNzlGCis6MTA1MUUwMDBCNDc3RDQ5NDZGQzA3MzBCQ0VENTMxRTRGRjFEMzU1NTIxCis6MTA1MUYwMDA2NjU3Q0M3ODJGQjg3OURFQ0MxNjhDNTNEODYzRTMxNDdECis6MTA1MjAwMDAzQzFFMTExRjlGNTBGOTUzNDVFRjY3QjNGMERDOUZFODM4Cis6MTA1MjEwMDBFMUZFQTM4MDgzRkIzMzJCMEU1NEQyM0Q5M0U4M0EzOTUxCis6MTA1MjIwMDA3RTNFRTExOEJDNjc5OENBRjhCRTk4OTlGQkI5QzhBRjMyCis6MTA1MjMwMDA1MDNFRjdEMzNFRkNGNzA3OTgyRjk1RkUzRDgzQzAzMUQzCis6MTA1MjQwMDA1N0JCMERGOUM4NUM3MTkyMjA5MzdGN0JEMERGOERGRTM4Cis6MTA1MjUwMDBBODg1QzcxQkU2NjAzRTcwQzVFMkIyMTM3ODJFOEJFQkMzCis6MTA1MjYwMDAwQzk0NzdCNEYwNzgyRDdENjc1Qzk1NTcxNThCQjdBRkFDCis6MTA1MjcwMDBCNTYyN0I5MUUwQjFDOEQ4NUU1Mzg1RUQzN0JGMTg0NjYzCis6MTA1MjgwMDBDRjFFOUI4N0JCMDc3QTg5MUM4M0RFNzlFNERGRkUyOTZBCis6MTA1MjkwMDBEQTQ1MTVGMzE1QkY3NzFEOTdBQjhCN0JFNjFCRjg0N0Y3Cis6MTA1MkEwMDBBRkI0NzJFRTYwRUU5RkM4NkVCRUQwNTM0MUZFRUM3NDk4Cis6MTA1MkIwMDA4Q0I3QkFBMzcyQTZFMjU1OTAzRkM5NTFGOUYzQjdDQUE5Cis6MTA1MkMwMDA5RDMzNkU5RUU3M0YwMUU0MEZBRTI3NkQzRThGMEJDNjA4Cis6MTA1MkQwMDA5RkZGMEIwQTNFMEQyNzRGODZFMzlGMjgzRjc0NTMzOEVDCis6MTA1MkUwMDBCRDA4OEVBOERDOTVEMTlFQkUyRTJBN0ZBNTZFQTg4RjA0Cis6MTA1MkYwMDAxQzFFRkZGMjE1QkM0RTFENDZGRjFBNUQyQTI4REYxQjNGCis6MTA1MzAwMDAxQjI2NUZBM0ZCRUZFM0Y3Q0UyQTU1RjlFN0ZGRTU3RTA3Cis6MTA1MzEwMDA2RkM1QkU1MUZEREZBQTNERDRBMkMwNTkyRDFGNTBGNDY4Cis6MTA1MzIwMDBEOUJGMzk1RjE5ODU2MkMyN0NFNUI0QzRGOUNBNzc3NDA0Cis6MTA1MzMwMDAwOUY0MUQxNjI1NUZGOUIwOTE1NUVFQjE2MzlFOUU3MjdBCis6MTA1MzQwMDAyRjIxRTQyM0ZERTZGMEQzQkY1QUZGOUMxREVGMjUwODczCis6MTA1MzUwMDAxMjhBOURDNkFFMTMyNDlGMUI0MTlGMjEzREE4RTcwRkQzCis6MTA1MzYwMDBEQzJGRDVDNUYzNEIxQkJCQjVGNzFGRDQ3MjVCMjlCRjMwCis6MTA1MzcwMDBBRjUwMERGQjIxM0ZCMjkyQzczNzZCMkZBN0VCODBENzAxCis6MTA1MzgwMDAxODkyOURFODE3RkFBQTE4RUIxNzBBQzg5MTBDMzUzRjM2Cis6MTA1MzkwMDAzMEM0RTU1MkMyM0NCRTI2MzY0MEY5N0U0RDBEODIwNzMwCis6MTA1M0EwMDBFNUMxMTdGNjEzNzk3OTdFREZCNUZBODlFQTRCQjU3RTQ4Cis6MTA1M0IwMDBFNkI1MjVEQzJGNTRFQjE3MDRENDQ3Q0QzQURGNEFDQUIzCis6MTA1M0MwMDBFRjNEMjA0ODg5RjI0NDU3MkJGODdFQjNFMkE3REQ2NTE0Cis6MTA1M0QwMDBFNDc4QjBFQjdBODFGMjZBRjE1RTBDOUVFRkFFMDMzQ0FBCis6MTA1M0UwMDA3RjdFNTczOUNGOUY1N0ZEQjI2QTVFRkNCOEE4NUY5NkEzCis6MTA1M0YwMDBFRUMzQThGOUY0NkE3RUJDN0EzRjc0RkU1NjZCMThGNUNBCis6MTA1NDAwMDA4QjREODYyRTA3RDJBMTlBNTdFNDJBRTU3MkNFQUE3QzRDCis6MTA1NDEwMDA3NzNDN0U5RENCNEEyQjVEQTUxOEE3MkJENTBERTdFN0UyCis6MTA1NDIwMDA2QTJCNERBMERGQkNBRUM4Q0Y3NUE1QzNFQUU1OURBNTJDCis6MTA1NDMwMDA1QUJEOUNFQUYxN0FGOTdGOTU1Rjc2Q0NGMDdFRTE1RjA4Cis6MTA1NDQwMDA5NzVDOUJERkVBOTZDNDdBREM5MDdFOTVBNTA5QzY2QkQzCis6MTA1NDUwMDBCNzI0RkU4RUU4RUY1NEZFMUJGN0VGOEZCMDIxRjc3QkU5Cis6MTA1NDYwMDBCODdDRUIxNEU0NUY0RUEzMzg5NzgxRTI1QzJBN0ZFOUI1Cis6MTA1NDcwMDA0Q0U2RTNFRjUzRjg4QTVBOUU1MEM2MUZFRTdCOTNFRjNCCis6MTA1NDgwMDAyQUZENUEwNEVGMEY3MEREMjVCQkI1N0VCMkQyMkVBRERBCis6MTA1NDkwMDA5RjZDNDI3NzlBQTY1RTE2Q0VEMkY0QUYzODlBQTc2OTZGCis6MTA1NEEwMDA5RjE0MjlENkI0NUY3N0IyNUM1MzlGREE3RkJEQTZGRjA1Cis6MTA1NEIwMDBCNDhGQUEzNEY1MUIwN0I0N0VCMkU5MTcxN0M0REQzQkRECis6MTA1NEMwMDBFMkY4NUQwOTE4MTFGQkRFMENGMzVEOUE3RUQ5MEREQTY2Cis6MTA1NEQwMDA3REU1MzY2QkY3MzVBNjU1QkIyRjc1NUM2NzUwQkJCRkI2Cis6MTA1NEUwMDBGQzRFRURGRUQyRDA3RkVGRkVFMkZFRkJEQkREMzJDREU3Cis6MTA1NEYwMDBEM0Q3OTM0RkRGMDNEQzUyRTNBMkVGNUVBQkY3RkZGRTlGCis6MTA1NTAwMDAxMzA3QUZGQjUyNDA2RjAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTA1NTEwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQjUzRTE2NzYwRjg1MThBCis6MTA1NTIwMDAwRkMxNUJGOTE4MTgyRUYwMjFGOEY0QzAxQ0NDMEMwQzNDCis6MTA1NTMwMDA5QzQwQUNDOEM4QzAyMDAxQzRGQzQwQ0MwNkM0OUUwQzMyCis6MTA1NTQwMDAwQzBDRkY4MUY4MUIxMEJGMDVFMjI3NDBFQzBDQzQwN0QwCis6MTA1NTUwMDA1OEIwOUJFM0M2Q0FDMEUwMDFDNERDNDBCMzc4OTg4OTY4Cis6MTA1NTYwMDBCN0RGODkxN0MxN0VDQ0MzQzA3MDBFODg5RkYxRDAzN0RBCis6MTA1NTcwMDAwQzA2MUI1RTI3NDAzRkJCN0U0M0VEM0EyOTMyRjBGRTBFCis6MTA1NTgwMDAwNjYxMjEzMTYwOUExNDQ3RjBBNzhBQTNDQTBCOEIyMUM4Cis6MTA1NTkwMDBEOEM5RDI5NEQ5OTUwRkQ0MEYwMEYxOTMyMUYwODAwMzhDCis6MTA1NUEwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDQ5Cis6MTA1NUIwMDAwMDBCRUQ3RDBCN0M5NEM1QjVGODdDQkJERkJFOTJEREE2Cis6MTA1NUMwMDBDRDI2RTQ0OTAwMzcwOTYwNTAxRTRCODBDODRCRERGMDAyCis6MTA1NUQwMDAzMjUyQzQwNDExODI4QTJDQUYxMDAyNzkxNEE5QTVGRjlCCis6MTA1NUUwMDBEQUJCMEIyODA0QUFERTU4NTFBMzdGNkExNzA0MUIyRENGCis6MTA1NUYwMDBEQTgwRDExQjZERTAyRUEyMDhENTZBNjg0NTUxQUIwRDRCCis6MTA1NjAwMDA4ODg4MDg0OThDOEY2QUI1N0FDRjM5MzNERjY2RTdDQjUzCis6MTA1NjEwMDAyRTg5QjZGRTZGRkZCRjdCQzNBRjFERTc5Qjk5MzM2NzMzCis6MTA1NjIwMDBDRTM5NzNFNkNDOTk5OUIzMjY5NkMyMEM5NzMzRjYwRDEyCis6MTA1NjMwMDBGRTQxNkEzMzMxQzZDNjc0QTVFRDRBQzc3MDM1QTdBQkMzCis6MTA1NjQwMDBGQzM2QkY5Nzc5Q0Q4Q0Q1RjlBRDk0NkVGMUE3MzNFRkM5Cis6MTA1NjUwMDA2MEY4RUUzMzE0MDZFRDhDRERFQjc3NTFGRTE3RkU0MjU5Cis6MTA1NjYwMDA0QTZCRkQ0NTU0RUY0RTdGMDlFNTZGRjdGQjI4RERFQ0YzCis6MTA1NjcwMDAyRkEzRUYzNUZFNkFDQTZGRjBBRkExNzQ5M0JBMjgwRDVECis6MTA1NjgwMDA1MDgyQkZBMkMyQUM2NEM2QUE5RUM5QzlEQjBDQjkyREE4Cis6MTA1NjkwMDBCM0M2MjdBOEEzMjFGRjhBOTExOUIzMDBCRTRGQTVGRTY4Cis6MTA1NkEwMDA5OEVBREUzNDcwNzQ1NzNEMERDRjRERUFBNDdFMDhBNzBBCis6MTA1NkIwMDA3NjA5Qzc4QjU5OTkyRDQ2QkQyQzFDRTc5RDRCMDQzQ0EwCis6MTA1NkMwMDA3QjZCNEQ0RTcyRDQ3QTgzMTFERUVEMjUwMDZGMjgxNDZBCis6MTA1NkQwMDBCODQyRDY5Q0U4RjAyRTQ2Nzg5QjRCNTQ1RTJGMzk1ODQyCis6MTA1NkUwMDA5MzFEMUQ5RTA3RUJENURDMjBFMEE1MDdBQzMxRUE4REFDCis6MTA1NkYwMDBDMTdBMUI2RTEwRjhGNUYzRDU2NDQ1RUY3NzNDRDY2MzlECis6MTA1NzAwMDAyRUY1NkZBRDU2NDY3RkRGNjRFM0ZGREI1REE3MkUxNkY3Cis6MTA1NzEwMDA3OTIzNjY5MzE4MUJEN0Q1NEU5RjMyMTY2MDM4NEU5NTY1Cis6MTA1NzIwMDBGOTBBODkwRkVFQ0NBRkJGQzk2N0VDMjY4NDA5RUQwM0Y3Cis6MTA1NzMwMDA5MzU4QzgwOEZEMDc5MjU4NzA3RDk2NTQ3RjI2RDU2RjAwCis6MTA1NzQwMDBFREZCRjUzN0E5NTJGRDgwMjE0QTdEMTM2QjUwQjBGQzZCCis6MTA1NzUwMDBFNzI4NDdDMEY3RkJGQ0I5OTQ2RTE0RjI3M0RGNTAwM0RGCis6MTA1NzYwMDA2M0Q4MkVERDFDMUMwNEVERUVGMTdCNDg1RUVFRjY4RjU3Cis6MTA1NzcwMDBBNUYyQkI4NDFDRkVCQjkwQjNBMDkwQjMwNzUxQ0UyMDEyCis6MTA1NzgwMDBERDhBNzI2NkM2RkU3Q0FEQTUwMEE3N0Q2RjNDREJFQ0IyCis6MTA1NzkwMDAyNkY5NUE0Qzc4QUE4Q0UwNkZEODNCNjRGQjY2ODA3RjcwCis6MTA1N0EwMDBERjBEQUI0RTZGMDNGQUI3MzUwRkYzMThBMURFM0Q0M0EzCis6MTA1N0IwMDAzNUY5NjI1RTk2REM1NUVGOUVEOTI3OUM4Qjg2MTJCRDJCCis6MTA1N0MwMDBDQjEwQ0VERDFFQzEzRjE1MDYxNjUxRUZFRTE5RTE3QTYyCis6MTA1N0QwMDAxNTU4RUYyRTRGMTg1RTI4QjJERkJCQTY4NEVCQUQyMjIyCis6MTA1N0UwMDAzRTJCQUNBNEMxREU5RDJGM0I5ODQyRjMxMTA0ODVFODBCCis6MTA1N0YwMDA2QjQyRkFDMkJDN0M3NkMwNzU0QTJCQjQ0RjQ5Q0U0QjgzCis6MTA1ODAwMDA2M0QwRUU3RTlDOEY2NjlDNzc2RUEyOEJENjFFRTlFQ0YxCis6MTA1ODEwMDA4M0VGMTkxNjU2OERGMDgxQjJGQjhEODBBRjY5QjYzQkQwCis6MTA1ODIwMDAxMUU5NzJGQkI1NDU0QzE5QzY1ODVGNTE5RTFBMjg1MkIyCis6MTA1ODMwMDBCMjAwQUU3RDRFOTE4MkRGNERCM0ExMUNCRUJCNDQ3OTU4Cis6MTA1ODQwMDBGMjFBNUU3RTNCOTYzQkJBQ0ExM0IxMUNCRTI3NTU0MzgzCis6MTA1ODUwMDAzOUU0RUQ3Mzc5RjkxRDdFRTBDNEUwQUU3QTlCODBDRjI4Cis6MTA1ODYwMDAzRUUyNzczQUZGMEU2QzQ1RkE5ODQ2RjM1NEMzRkIwOUMzCis6MTA1ODcwMDAxNDEyQTBERjQxNENDNzc0RTFCRjY5RDBCRDE5MEJFRDE0Cis6MTA1ODgwMDA1REY4REEwNkQ3NTM1RUMzNkZEM0UwMzhDQTZCRjhEODM5Cis6MTA1ODkwMDAyRUVDOTdCMTEwRDJCRTRCRkEzMjZGQUU5ODBGQUMzQkU0Cis6MTA1OEEwMDA5RDEzQkREOTUyNzlBNkVBNDk1MDgxNEU5OTJGMTk1OUI1Cis6MTA1OEIwMDAwMDU4OTAwOUUyODlGMEY0RUQ4QTk4ODFGMEVDNzFGRUNECis6MTA1OEMwMDAyNUY3NkVGRTk5ODZDQTc0RDBEMkEzODIxRTFBMUQzNkExCis6MTA1OEQwMDBGNjk3RTk2MDE5MjBEMzYxRTMwMDk5MEU5NjBCQ0U0RjNECis6MTA1OEUwMDA4NzFEQ0M0RDc0OEU0NTBGQURERkNENDNFNDdFRTMyRTk2Cis6MTA1OEYwMDA5MkZCREQ3QzkxREM2RkRDQzVGRjlDN0U2QkIyRTQ3RUFECis6MTA1OTAwMDBBREQ5NzJCRjM1RDk3MkJGRDY5QzdGQUM1RkE2N0E2MDI1Cis6MTA1OTEwMDAzMkEwQkVEMkZFMkU5NEY0REJENUNDNzcxNkRCQTM5RTRDCis6MTA1OTIwMDBDM0Y5QTRFOTM5NTNCMjhGRjlFQzVERkM4NDc1OEFCMUVGCis6MTA1OTMwMDBGQzQ4Mzg4MzI1QkQwQTcwM0VDNTdBMDBDNzdCN0UzODk3Cis6MTA1OTQwMDAyRTFEOUM0MTdBMzg1RjBCN0M1OEE0OUVFRTA2ODcwRDc1Cis6MTA1OTUwMDBENDhGQzNBNEYwNzYyMTQzNDRGRjRDRjVCMTIyNDc2NEIxCis6MTA1OTYwMDAzQjhGQUVGRjFDN0RGRjRFNDU4Q0MzNzBERUZFREQzQUUzCis6MTA1OTcwMDBCQTY2RUJGMTQ5MTNGODMwQzNGOUU4QzE1QzNBMzg1OTFCCis6MTA1OTgwMDA3QTM4NkU4MTRGNDgzOTJGMUNCNzdFMUMxNzhBRkUwMzY4Cis6MTA1OTkwMDA4QUI0N0UwMTNEODY3NUI1NkIwN0ZDNjg5RENBQjMwNDY5Cis6MTA1OUEwMDA3NzgyN0UwOEVERkJGMjE0QUUwM0U3MUFBRjc1NUJBMEI5Cis6MTA1OUIwMDBGRUZFOTE5NkQwRTU1MDdFMkU1ODEwQjQ0MEY5RTQyN0IzCis6MTA1OUMwMDA4RjNBRDE4RUE5NzhEMkE4NjJCOTYxOUY4REQ2OTdCNjQ5Cis6MTA1OUQwMDAxRDBBOTU1NzU5NUFFRTlDMDBFNTFENEYxQUQ5NzZFQUQzCis6MTA1OUUwMDAyRUQzODBFMzNCMjU3NDBBMEJGMTdDQTk4RDY3MkJCNjdGCis6MTA1OUYwMDBFREJGMTFEQjk3MzU1OTk4MERFMDU1M0NCRDZDRTYwNEMxCis6MTA1QTAwMDBDODJGM0I2NDYyNThBNTYyRTc1QTczNUZDODJGMEYyQUZDCis6MTA1QTEwMDAwRDk4MDc3QzY5OUQwQUU0RDk4MjNCQTFGRUJBN0Q1RjlGCis6MTA1QTIwMDBCNjIxRkVFNzFBNEQ4MzEwOUYzM0IwNEVCODYxOUQ3OEMyCis6MTA1QTMwMDBDOUQxOTIzQTFCRTg1MzFFREMzRDBEREI5N0VGNTIzQzc3Cis6MTA1QTQwMDBBMEUxMDBGRjlEMDczMzEwRkY0NzE0OEYwNTU4QjhBMjRGCis6MTA1QTUwMDAzRTlFQjkyM0U2Q0JBOTQ2MjM4RDc3RDUzNjI1QzgwMENGCis6MTA1QTYwMDBERTMyNTYzQjBERTk1OTgxQzQ0MTNDM0M5NkEwNERFOURDCis6MTA1QTcwMDA5QTZGNjdGQzc1RDQ5Rjk2QUY3ODA0RkE4M0Y2OTU4RjdBCis6MTA1QTgwMDAyQjFFMUM3MkE1ODFGOTcwMUVCNzNENkQyQjc5Qzg4RTM3Cis6MTA1QTkwMDBFMzVENkIxRUVDQzA3MTZFMzQ2M0JENjVDMTg1NEZEOThCCis6MTA1QUEwMDBEQzg4RTczNkYzMzRDNDc3RUIzNjczRTk1MEE0MjM1QjI0Cis6MTA1QUIwMDA1MDM0MTRGMUZCQkYzMjdFNzU0NjJGOEU3N0Q1NDhDQjFDCis6MTA1QUMwMDA3NjIzRTBDMUVDQTE4MUIzMUNEREY1RUMxOTU4QUZEQzA1Cis6MTA1QUQwMDAxMUVCNjczOTAzQkQ0RkVCNzdEMDVDM0NBQ0VCRkI5NzI4Cis6MTA1QUUwMDA4NjQ0RDIxRjJCRUE4RENDNkRFREVBNDc5MzhGQzAxMTBGCis6MTA1QUYwMDAyMTFGN0IxRDQ0NkY4RDlGQUI1QzdDMEE2OEZDNUM5NTBECis6MTA1QjAwMDAyOEY4QUI3NkU0Q0YxQUQ2MUQ5RjNCOTEyRjY0NEZCQjhDCis6MTA1QjEwMDAyOEZEMDVBQzlCOTg2RTgxNzUxRUU5NzcyRkQ4NEY2RUQ2Cis6MTA1QjIwMDBCMkNCM0RGNEZEMDFCMDkzMzBERDBBNzYxMkE2MEY4MkIwCis6MTA1QjMwMDA5REU0MTY3NjEyRDZEQjBFNzYxMkE2M0JDMDRFQzJFRjVGCis6MTA1QjQwMDAwRjgzM0Q4RTY5M0REOEUzRjhGRDUxQjBDNzMxRERFNUU3Cis6MTA1QjUwMDAwRkQwRjdDN0ZEMzU5NDM2Rjg2QjI5REQ4MzdDODNCNDBECis6MTA1QjYwMDBEMTFGQTQ3QTRGRjlFQjI5NkRGMjM3RDBGNzY3RkM0REJFCis6MTA1QjcwMDA5NERFMkVFOEU4OUNDODBBNzAxRDc1N0E5OTBCQzk5RUMwCis6MTA1QjgwMDAzNEMzNUI2MDgyN0M1MjExQ0ZBN0RFMTAyODMwNDMzRUM1Cis6MTA1QjkwMDBENTA3NzlBMDRCREY5NUExMDIwQkU0RkI1NkYzRjIwMTg4Cis6MTA1QkEwMDBCN0IwNDk1NkM4MEYwOEYwRjJFQ0RCQkQ5MzZDOTBDRjRDCis6MTA1QkIwMDBBRUU1RTU4M0I3MDYyNkM1NDE3RTcwOTA5NzVGQjQyQkFFCis6MTA1QkMwMDAzNDI5MUVGMjE3MzVGMEYyRTFDRDZDQjIxREYyQzM0MzU5Cis6MTA1QkQwMDAzQzlGRjc5Mjc3QjIwM0YyNzkyRDNDOUZGRkU3QzA2NEI4Cis6MTA1QkUwMDAyN0U0RjM1Qjc5RkJGMTY3ODM0Njc3OTRGNTc3OEZDOUY4Cis6MTA1QkYwMDBCRDE4NTVDRTAxRTU2REFGOUEwMTc5QjNGQjI2NTQ4OUU2Cis6MTA1QzAwMDA0Nzk1NTM5NDZGMzQ3OUE5RkM3REE1RERBQkMyM0FERjhCCis6MTA1QzEwMDA2OEY2NTJGOTE3Q0FFNzk0N0ZDQUU0QTNGMjc4ODM1MjcwCis6MTA1QzIwMDA0MDc5QjM4RkNBRkIxQkUyMjhERjY0MEE1MEY5MDg0M0FFCis6MTA1QzMwMDAxRjlFMzcwN0E4QkNDMEQwQUYwMEUxM0Y2MzBBNTJGOUVFCis6MTA1QzQwMDAzNTg2NDEzQzZGMEU1MkY5MkZENEUxMDU1M0EwRkVFMzk3Cis6MTA1QzUwMDAwNkRGNUVENDc3RUIxNTVGMTlEQTg3NEM2RDQ4NDc3RDE4Cis6MTA1QzYwMDBBNUQ5OTUzQjcxNzA2ODY3NjY5ODY5MUVFQ0Y5NDNGRThCCis6MTA1QzcwMDA0MzM0MEZGMDJGMTlGM0E1MEZBMzVEMEE3MDBFMTIxQzA5Cis6MTA1QzgwMDAxM0MwMzFGNjBDMjdFRkU1QjExMjlDQkM5N0NCMzQzODJBCis6MTA1QzkwMDBBRjEwMUM1QkVGRTBFQzc5NzlCQzhDQ0ZDQkU1MUE5Q0E0Cis6MTA1Q0EwMDA2MzA0QzdEMUJCNzFFNUJEMzI1MUM2RTc5NTk1MUE5QzE3Cis6MTA1Q0IwMDBFMzA0MjdCMTc3RjgzNDFFOTVFOUQzNzgzNDRDOUYzMzQ5Cis6MTA1Q0MwMDBCODNFQUM0RkU5MUQzRUEzNUY5M0U5MzNGQUI1MzA3RDkyCis6MTA1Q0QwMDAzRTI2N0MzMjdBMDdBN0YxMzU5OTNFOERBRjg1RTlGM0YwCis6MTA1Q0UwMDAxNUMxRTlERkJCNzE4RDdFNURBNkNGRThEN0MzRjQzMTY2Cis6MTA1Q0YwMDAxOTEwNEU1NkVGRTAzQ0Y1QjY0QzlGQTdERTBFRDNDNzA5Cis6MTA1RDAwMDA2OTQwRkEwQ0VBRERCOEYyREY5MUU5OTNGRjRFOTgzRTY0Cis6MTA1RDEwMDA2OTg0Q0Y5MERFQzE3OUVBMUQ5OTNFNEZCRDEzQTY4RkVECis6MTA1RDIwMDA5QkYwMTlENkJCNzFFNUZGNDVBNjRGRkU1RkMyRjQxOTgzCis6MTA1RDMwMDA0MjcwNDZGNjBFOUZBNkY3NjRGQTM0QkQxN0E2NEYxRUIyCis6MTA1RDQwMDBDMTE5RDMzQjdDQzY5RTkyRTkzM0Y2NTQ5ODNFMTMwOEEyCis6MTA1RDUwMDBDRUI4REVDMTY5M0EyNUQzQTdFOTU0OTgzRTUzODhDRTIwCis6MTA1RDYwMDA5N0Y2NkU1QzYzREY5N0U5MzNGNkZEMzA3REFFMjIzODNGCis6MTA1RDcwMDAwNUJFN0FDMjg3MDExQzQ3NkMzOENGOUM5M0U5RjNDQ0VGCis6MTA1RDgwMDBCOTMwN0RFNjEwOUNBOTAwMjdBNzY3MzhFM0RCNjRGQUU5Cis6MTA1RDkwMDA4QzZGMEJEMzY3MDFDMUI5QjI3NzcwOUU2OTkzRTlGMzM5Cis6MTA1REEwMDA0QzVCOTgzRTY1NDRFN0FCN0EzN0FFRjFFRDMyN0RDNjg5Cis6MTA1REIwMDBCNzczRkE1NDU5M0M5MzFENjhERjI1MzJDRjc2Njg3MjY5Cis6MTA1REMwMDBDOUM5ODYwMzRFQzg5QkVDQ0M4MzYwNUY1MjQyM0IxMDJFCis6MTA1REQwMDAzRUFDOTU2NDE3QUExRUNENEVGMTMwQjQ0MzY3MzhERDUyCis6MTA1REUwMDAxRUY0RkIxODM1N0I4NEI1RDA3RUMxQkUyQjUxRjIwNzYzCis6MTA1REYwMDA3RDY5OTg3NDBCRTJFQjAwQUIyREQyMkU0OTE4MUIyNzVFCis6MTA1RTAwMDBEOTQzODlERTI0MjlERkE3QjBBRjU0M0ZBNTI4NUIyQUY4Cis6MTA1RTEwMDA0RjJCQjk0ODJBQ0ZGMEU1NDlGOUNDQjJGMTUyRkRGRTNCCis6MTA1RTIwMDBENTkzQTRGQzA1NkJBNjRCRjVCMzAyQjNBNDdDNEVDRDcxCis6MTA1RTMwMDA3NTUyRkQ0MUI1OEJBNEYyMEJFQkNBQTVGMjIxQzE1NUY5Cis6MTA1RTQwMDA1MkZFRTJGQUZGMjNENTFGRDZCMDRFMkExRkQxQjQ1OTE1Cis6MTA1RTUwMDAyQTFGMTlGQTg1OTQxRjc1RTgwMUE5RkU5ODk2RUQ1MjNDCis6MTA1RTYwMDBGOTI1QzcxRTk1Q0FDN0I1RUU5MUYyMTM0RTNGQTNCM0VECis6MTA1RTcwMDAwM0U1RkRGRkZBMDJDNkVEQzEwQzMzRDk4MzIxODc5OUYyCis6MTA1RTgwMDBGMkU2N0QzNkIyRkZGNzYzMUVGODY5RUUzQjgzRjJFNjc5Cis6MTA1RTkwMDA2NzE3QkI5MzcxM0Y4RDAwNjBCRDJGRTg1Qjc2MjFGQUQ5Cis6MTA1RUEwMDA3QjZFMUVFRkJCRDAwNURGNkYzNkZCNDZCOEEyRjgyMzMyCis6MTA1RUIwMDAzQ0FBNkY5RjgxRkM0NTJEMEE0QkM3RDQ2REMwMzRDRUUwCis6MTA1RUMwMDAyOEY2RUIxNjJFNUYxQkIzRjIxRjBBNDRDODY5NEQ3RkZDCis6MTA1RUQwMDA5ODdGOTAzRjZDMzA5M0ZEQUFDOUY3QzZGRUE1RTkwQkU5Cis6MTA1RUUwMDAyM0ZBRDlEMERGNUNCMjdEMjhGRkJFRDg4RUZEMTVCRDY4Cis6MTA1RUYwMDA4OEYzQUNDQURDMzExOEYxRDJGNzYzQzkxRTJCRjU2MzA1Cis6MTA1RjAwMDAxRDUwNDZGREJDODZGRDQ0RjhCRDJDMDNDQTc0RkQ1OEU3Cis6MTA1RjEwMDA0QkI2OEJFRkEyOUY2MzM4QUU1OEZENkNDQzFFMkY4RjEzCis6MTA1RjIwMDA2NzQwMzlGNUYzQUVBRTlGOEQwM0NBNzVGREM0RjFGMTNDCis6MTA1RjMwMDBDMDc3RDFDRjdCRTcxRDRGQ0U0NDc5M0MxN0FDQTQ3RTEwCis6MTA1RjQwMDAzQTc0NzRCMzVDQjA1MkQ3OEY5REZBQzFFRjhCQzk5RjdFCis6MTA1RjUwMDAwQkJCODAzNEUwQjNBNUEzOTRFNEUwM0Y2RDJDMDA3MjRBCis6MTA1RjYwMDA2MUNFMkNGRjM1RTZEOTVCMzYzNjA4RkI3MTQzQkY1MDU2Cis6MTA1RjcwMDA4RkU1NzJGRkQxRDM4NjI0MUFDRjY3NzFDMEZGMDgzQjJCCis6MTA1RjgwMDBCNTZCM0YxQkEwN0RGMTUyODEyMjBCMDI0NkIwQkZBRDI1Cis6MTA1RjkwMDAxNEIyQjk2NDU3RjE4MDlCREM5MDM2MUQxODc4MzdGNjNGCis6MTA1RkEwMDBCM0M1RTExOTA0RjlCNkE2QzlFNkM1NTFFNDY5NjlBREZFCis6MTA1RkIwMDBFOTU0NkJBNDVGNDREQkRGNEM2MkI5RDVEMEZGMkU5QjY0Cis6MTA1RkMwMDA0QkNBNkJFOTRBQzVDNTg0M0Y4MkYyMjc2MERGQzI2MEQ1Cis6MTA1RkQwMDAzRkYwNjdEODE3MzAyMEQ1QkIyNkJFNEY3QjA3RjYzNzdBCis6MTA1RkUwMDA5ODZGODVGRDBEOTYzM0I2OTZEQTlEMTA3RURBMTNCNzVECis6MTA1RkYwMDAyQjQxQTRGNzY3M0ZGOUExODlGNDc4ODBCRDlBOUU4QTY2Cis6MTA2MDAwMDA3RTM3RkVCNzYwNEQzQ0ZBRjhDM0Y4MkQwQ0Y0OTFGMkUwCis6MTA2MDEwMDBBMDJFMzMwREU5QjQyRkE0RkQ2RkM3RDM5NkUwNzZBNDZDCis6MTA2MDIwMDA2QjREMjZEMDU0RDRDQjY2RUM3NUQ4RTQ2NjI0NTEzNjNCCis6MTA2MDMwMDBEMzMwOTZCMUQ5RDVDNTUzRDM2ODE2MjlGRDU3MDE5RUUzCis6MTA2MDQwMDBCMzFBNDc5QUEwMDU2QjMzQjVERUU4QjE3N0MxNjU1RTM4Cis6MTA2MDUwMDBEMzA5QTQ4RjE1RkUyMTlDNkIwQTIxMUZEMUZGQjU0NUUyCis6MTA2MDYwMDA3MjdFMkU1M0JCRjJDMEVGQzFDNjZDQzEzN0QxQUZEQjFECis6MTA2MDcwMDA2QjQyQkUxNkE1NzI3Q0U2NjI5QTg3QzVEQ0RGNTFFMkYwCis6MTA2MDgwMDBFMjZEMzU3Q0FBMTY5QjU4ODhGNkE3ODExNDg2RkVFODM3Cis6MTA2MDkwMDA0MDMyRDVCQjRFREI2N0VBRjAyQjMxNTlCRDQ1NDBEN0M2Cis6MTA2MEEwMDA5Mjg1NDZBMkFCMUVERjM3RjdDNTdCMERDMzIxQURCOTg0Cis6MTA2MEIwMDBEQjg0QUVDRDlFRjA5RkU3OTNDQjU5MTlFRjRGQTNBQjk2Cis6MTA2MEMwMDAyNjJGQTcwNDdGNEYyMEZGMjE3RDFGRjkwRjc4OUYxNEYzCis6MTA2MEQwMDBGQ0VGOTI2M0NFRkYyQThCNkYyNkYyQkZFMzdFMjMyMzcxCis6MTA2MEUwMDA3RTA5QkVDRjExN0M1RjVBMkJGMzdEMEVGQUM5QTFGRTRCCis6MTA2MEYwMDA5Q0Q1NTlDMUY1NThCRkFFOEZDNDVGMThCODRDODdEQTJDCis6MTA2MTAwMDBCQkE2ODI1QUVEODZGRkRCNDIwRUFFQUJEOUZEM0NCMjk4Cis6MTA2MTEwMDBGN0ZBMzJEREY4MDQxRjZFMTQ3Qzk4QUZBM0M3MUNDMUQ4Cis6MTA2MTIwMDBCN0Y5ODI2RkNCNThFMEI2MENGMjFGMDU0REU4MTc5QjBDCis6MTA2MTMwMDA1N0E2MzBENDE3NTUzRkQ1RjhENjJBRjFDREE3RjE0RDQzCis6MTA2MTQwMDA4N0VGOEQ4MjZGMzdGRTg0RjM0RDhGNzdBQkUwNUI2QjBCCis6MTA2MTUwMDBEREM3MjY5NkREMUQ2RjNEOUUwQkQ2RThDNjE1RDBGMzM0Cis6MTA2MTYwMDBBRDU2OUMzQkI4Q0M2OEVGMTQ3QjBCRkE5QzhDQTg3Rjk3Cis6MTA2MTcwMDA0REUxOTU3RDRFNDZFODg1NkI4QjhBQTVGQ0RDOTI3OUQ2Cis6MTA2MTgwMDA1MkZENzlCRTg1NTJGOUY1NjVDQkE1RjJGOUQ1M0Y5NDVDCis6MTA2MTkwMDBGMjBCRDZGQzQ0QUFCRjMwQjA1NjJBNUY1Q0IzNDkyQTQyCis6MTA2MUEwMDA1RjVBN0I5Nzk0NUY1Njc3QkY1NDdGNzk3MDlCNTRCRTNDCis6MTA2MUIwMDBBMkZFMTFBOUJDQTI2MUI3OTRBRjZBN0E1QUFBNkZEODlECis6MTA2MUMwMDAzN0U0NkE5NEFGOTc4RTFBMTlGQUNCM0VGNUJDNEZGRUFFCis6MTA2MUQwMDBCQTRGM0QyNjBGRDZBOTQ0OTkxQjg3RjJFQzI2NzkzRThCCis6MTA2MUUwMDBFNUNGQTVGNEI0REY0M0YyN0VDNjNGOTZEMkI2QTYwMzUwCis6MTA2MUYwMDA3NkY0M0Y1NkM1ODFERTRGMDQzQkRDRjhFNkRBOUE3RTQyCis6MTA2MjAwMDBCOERFNDBGQkYxOEMzNTFCNUJENzA2MjA3RjAwMEZBMzY3Cis6MTA2MjEwMDA2MERFQ0NBODMzQjNEMDI4MDZEMkREMzcyQ0NGMURDNjI0Cis6MTA2MjIwMDA4OEYyRDYxRUNBRUI1NDE2RUFEM0JEN0M0NjZCRjRFRjU3Cis6MTA2MjMwMDBFRDRBQzdFMDBDRjQxM0JFNjE2MTNCMjNGQzc1RERDRjcyCis6MTA2MjQwMDAyQjU4MjZEQTE1QjFDQUNGMUE1ODU5RTQ3OUQ2NDkyMzAyCis6MTA2MjUwMDAzRjI3NzExQTI3OUQzNDQyQkFEMkNDRTdGRkNBM0QxOUI1Cis6MTA2MjYwMDA5Mzk4MTNGM0ExQzFENTUxRkMyRUUxRkUxQTAwOTkzNDg1Cis6MTA2MjcwMDBFNDczOEUzNEVGOTdENTVEREMzNUNGMTlGNjkzNEQ3MjBDCis6MTA2MjgwMDBCQjNDMzg0QUZBQkVBMjdFODJENDJFNTdGMUJENkI4NDQ1Cis6MTA2MjkwMDA3QTY3RjcxQjY5QkQ2NkExMDMwM0FFMTk4NkY4Nzk0RkNCCis6MTA2MkEwMDBFMjc3RDY5NDQyNzY1NzhCREZEQkU3RTQ0MEM2RkVFODIwCis6MTA2MkIwMDAyRkE0RjQ1NTdGMTFBNUFGRjk0QjI4M0RFNkY3NTFGQTBECis6MTA2MkMwMDBBNkJGOENEMjNGRkJBQjI5N0RDN0JGODZEMjU2N0Y4MDRECis6MTA2MkQwMDBEMjEzRkUxQTRBNEZGQTZCMjkzREU1QUZBM0Y0QjQzRjNGCis6MTA2MkUwMDA0OEU5MTk3RjNEQTU2N0ZEMEQ5NEI2Rjk5QjI4RDVGNEMzCis6MTA2MkYwMDA2NzRGRjI3NzVBQUNBRjY3NTBGRUEyQzg5OUY5NTZCNjBECis6MTA2MzAwMDBBRTY2NjI5NzlDQzVBOTk2NzUyODY3MUE3RDY3RDQ1OUIxCis6MTA2MzEwMDA4NDNDQTQ0QUYyOTA4OEVCMzBDOTU5MEZFNTc1MjYyMUQ4Cis6MTA2MzIwMDA4N0IxREE0NzJGNDc3OUVCRkIzREM4MUI2M0VCNDgwRTdCCis6MTA2MzMwMDA2NjBBQjlGQkFFRjJDNkQwMUI5RjgyRjI5NEE5OTMyN0RFCis6MTA2MzQwMDA1OTBFMzUzOUQyRjQ0MEFFNTIzNDVDMUREMzI1NTczMzQzCis6MTA2MzUwMDA4RERDNEVEMkU0RUFFNzY4Mjc0NkIxQjc2RTUwMTVCMTNFCis6MTA2MzYwMDBGRTcxRkI4OEY5MzIwQzY4QkZBRDEyN0U3RkU2NEVBNzQ2Cis6MTA2MzcwMDA3Q0E3RTg3QjNEODA2QkMxN0E2QTMwMTdENzkxQ0VEQzcxCis6MTA2MzgwMDBCRjBENDZGRjc4RTczMTBCNDMzRjdDQUNGMUU5RTUyNUQzCis6MTA2MzkwMDAzNkREQkRCNDdGMjgwREMyQTIzNkFBN0JCOTJEOEVEM0JGCis6MTA2M0EwMDBENTY2NjA4NTJDMEZDRjY3RjM4RkY5ODA5RjcxRkY3OUQ5Cis6MTA2M0IwMDA3MTFFRUU2QkUxQkJDQUM4QUUwQTdBOEFBM0Y4REIxOTdDCis6MTA2M0MwMDBDQTc4NUFDRkY0RDVFQTlGN0FFMENCN0MzQzM3OUYyOTM0Cis6MTA2M0QwMDBFNjc5REMwMTIzM0ZENzBFM0RFNEI5MjZFMjdDMDZGNkUwCis6MTA2M0UwMDBEQkU5RTg3N0VFMTg2NDc2OTFGRDEwRUEyQkQzMzFEODFCCis6MTA2M0YwMDA1N0EyRTM4MTQxOUYwREM2RjM4RDREMjA4NzM4QkYzQUU4Cis6MTA2NDAwMDAwNzBFNEU2MEU3OTE4RjlFRjQ3QzRGRjQ1QzE0RUNEQjNBCis6MTA2NDEwMDA0QjdBOUExOTlFMUIwMTNEQjdFM0ZEOTdERUQyQjMyNzU1Cis6MTA2NDIwMDAzREQ5OTM3RTNDQjE5OUQzRDkyOUVDRDM1ODc0NkU5RjUyCis6MTA2NDMwMDAwNEYzMkU4QTFDREZBM0FBQjIxQ0IzODFGQ0JDNDNBM0M1Cis6MTA2NDQwMDAzRkVFNEIyM0U4N0ZBOURENERGNTlGREJGN0Q2ODA1NjY1Cis6MTA2NDUwMDBFOEE3QjNGMUMyMDRDNkNGNzNDOEFFRUI3ODUyRDhFRDRCCis6MTA2NDYwMDBFRTRDOTk4RkFEN0QwOUFFMDZFN0I5Mjc1RjFGODBGQjIzCis6MTA2NDcwMDBFNERCMzAwM0YzRUNDOUY4QTI1RkE5Mjk1REYwN0E3Qjc1Cis6MTA2NDgwMDAwRTFGNkI1Q0JCQkZFNUZDNkM0RkQ1RTY2N0NCMDA5NDgxCis6MTA2NDkwMDBBN0NGODQxRTg4MzlCRTlFRTQxNEM3MDc3MEFFNTJGODk5Cis6MTA2NEEwMDBGODM2MTg4QjdFODc3QTI2M0NCRUQxMjlCRDFBNUY1NUY3Cis6MTA2NEIwMDA4Mjk5MjkyMzAwM0Y4N0Q5Q0MxMjE4REJBMUZBMEVBQUIyCis6MTA2NEMwMDBCNDhGRjNCNDA2RDA0RkIxMkZERUIzMUU1ODUyRTUzQzYzCis6MTA2NEQwMDBGMzcyQzg4REVENjQ3RkM2OEE3QTlCNEJCNjlGMTI1REJFCis6MTA2NEUwMDBCMkZEOTRFMThBQjQ5RjNBMEYzREU0RjQwMTdFQUJEMjUxCis6MTA2NEYwMDAwREFFOTNBMzcwOURGMzhBNzU4RUFGQUIxQTdFMTUwRDBBCis6MTA2NTAwMDA1OTJFQkIwNDQ3Q0U3N0Q2MkE4NTBEMjQ0RkVFODREOTY5Cis6MTA2NTEwMDA1MUNFQ0JCNDc0NTVCQUQ5NzUxMkQ2QUIzM0Y1MzkwOTBGCis6MTA2NTIwMDBEOEVGMTlCRkQ1QzVENzU3OTc4QkY3OUJFRThBNUM1RjFECis6MTA2NTMwMDA1N0FFODlBM0ZBMUE3RUIxRTBGRUIzRjE2M0FDOTFCRDA4Cis6MTA2NTQwMDA2QkM1NzUxMUNBNzI2MkQ3OEZDOTRGRjUxMzMzOUQ0QjU2Cis6MTA2NTUwMDAzNzlCM0U0M0ZCREQ5NkFCRDlFRjJBRTUzNUI4NTUwREE5Cis6MTA2NTYwMDBDNjgwNjUwNDdFREYyNUY1MDdFRERDREExOTMzQjY4QkNFCis6MTA2NTcwMDAyRDM3MkEzQkE1RjExM0Y4NkZDNTgzNzdEQUI3NUE4OTBGCis6MTA2NTgwMDBDRjNFODA5ODAwRjBEQTU1N0IwRENBRDUwOTk1Q0ZFNzRDCis6MTA2NTkwMDAyQTIxQTcxNUQ2NTZCM0NGNERFNDZFNDE3OTVFMzQ5NkM1Cis6MTA2NUEwMDA2OTEzNjZFRTVCQTBBNzNGNzhEMTQ0RjdCNEQ4NTcwMEQzCis6MTA2NUIwMDAzREJGRUJBQUMwMTI1NkU0NDRBN0U3QTJDNjE1MzM3MDRDCis6MTA2NUMwMDBEREZFQzBBMEVEODc2QkYzNzFEQ0U3OThBMTEwRjVEMjdBCis6MTA2NUQwMDAzOUY2NDdFN0E4ODhGOTNBQzRDNEZEMzFBQzg2RUY3M0IxCis6MTA2NUUwMDAwMkYwMEZDN0I3QjQ1NkRFRjcyQ0FCOTNGM0E1NkM1Njg5Cis6MTA2NUYwMDAyQUVBREJEMjJEMjYxNjA0REM5N0UzQkU0OTFCMzdFOEQ2Cis6MTA2NjAwMDBERjBDMTNGNzZCMkM2M0Q1MUI3MDlGN0VBRjg5RkI3QjcwCis6MTA2NjEwMDAxNkI5OTg5QTA5Nzg1NUZDQzcyRkYzRDFFRkUzMzE3MTc5Cis6MTA2NjIwMDBCQjQzM0I0RjVFOUVDNEYxMkU5RjFEMzQ3QkExRkVCQjNFCis6MTA2NjMwMDA4REEzRTY4MEM2ODVGNkMxMEQ2NEZGMTQzM0NGNEVENjE4Cis6MTA2NjQwMDA5REVFOEI2QjY0RkM3QUMyNUY4RkFGNjYwNzc1M0JENzlDCis6MTA2NjUwMDAxNjc4MjRENzJCREU2MDE0M0Q3Nzk5NDkxMUZCM0YzRTE1Cis6MTA2NjYwMDAzRjY2OUI2NDdGQ0UzQzkzRUNGN0QxRTRDMDI0RTRFMDJBCis6MTA2NjcwMDA4NEVBQkJEQTM0ODZGMzFERjlBOEE4MUQ2NjVGNDQzREExCis6MTA2NjgwMDA3MzU3QkREOUU3QUI2N0MxN0E0NkFBMzdDRjk0ODJGNTc1Cis6MTA2NjkwMDAzQUE2RDFGRTk4ODEzQzBERURBQTY3RUI4Mjc3MjM4NzVECis6MTA2NkEwMDAyN0Q3QUJGODhGQzc5RTBBODBCQzk0RkZGNjFFMjc4M0JFCis6MTA2NkIwMDA3NUYzMDNCNTM2RDUwM0RGNTdFRUJDQ0RFOTg1RjRCNEU5Cis6MTA2NkMwMDAxQTcwMjIzRjNGMDgxQTBCQTNEMTYzNEI5ODFFNUVCQjgyCis6MTA2NkQwMDA4MkZFMzQyMTlGQUMyNjQwN0U4QUNGNzY5QTVDRTRFNzI2Cis6MTA2NkUwMDBBRkI3ODQyQzIwQTc5NThEQ0I2N0IwRTE5NDNGQ0VGMzU0Cis6MTA2NkYwMDAxQjNGMzI2MkJFNDlFNjU3RjlBRkVGNDk3NUYzN0IzNjZGCis6MTA2NzAwMDBEQzlGQzQ0MjY0RTc1NkVFNzg2RjFBQUUxNzU1QUM4MzJGCis6MTA2NzEwMDBFNDRDREYwRUZCRkYzQzg5RTZGNTQyNzM0MkY3NzJDMEEyCis6MTA2NzIwMDA5M0ZDMDk1NTYyOTY1NTM1RkVGQzIzQTMxM0YzQjI3QzA2Cis6MTA2NzMwMDA5NDA5N0IxNUU5ODRGQkZDREI0QzhFRTQ1M0YxOTBCRDlFCis6MTA2NzQwMDA4NDVEODJGMzVDQTMwNzBCNzJCQjc1RkQyM0Y3MEQzRkRECis6MTA2NzUwMDAwRUY4OUNEREYxQTI1MzE5MUFBOTFGQjg5Qzc1MzYyQ0FFCis6MTA2NzYwMDBGRTk1RDUxMDVCOEZCNDgxMUM0NkRBNDcwMDk4REFCOUU0Cis6MTA2NzcwMDA5Qjg0QkRERENDRDM5NUE2OTAxM0VGQjNBQ0RDNjZGMjYxCis6MTA2NzgwMDA4MDA0QjI5NThGMTkxOURFMDM2MDZGNTg4MkU4MTc1RDk3Cis6MTA2NzkwMDBGMUQ4RjNBRjhEMDdCQUFGRDg2RDRBOUVDMTg3NjM1NzYyCis6MTA2N0EwMDA1MkJCRjg1MjA1RkY1QjkzRDdDNTg3RjIyNzlFMzdCQkQ0Cis6MTA2N0IwMDA4N0YxRUZCNzI0NzVGMTYzQzVFRUZENjYzNkFDM0JGRDlFCis6MTA2N0MwMDAyNjM3RUMzN0I3REFBM0YwQTVFMUY4MzQ1QzY3RDczRjlBCis6MTA2N0QwMDBGMjU3MzNGQTEzM0ZEOEE3QjBCNEFDRUVFRENCQjYzREM5Cis6MTA2N0UwMDA0RkVCMUREMjg5RjgyOEY4MTRFNjVCMzc3RTg1NjYzRUFDCis6MTA2N0YwMDAzMzlBRUFCOTUwMEZDNkUyRDczMkExNzc0MTlFMUY3Rjg0Cis6MTA2ODAwMDAwNkVGRkZCQzY5RjFFMEY4Q0IxRUJGQzk4OUUzNzg1RkYyCis6MTA2ODEwMDBBREU2NzJGRENCREI1MjcxN0U5Nzk5MDJBOTJFNEFGOTQzCis6MTA2ODIwMDBGN0IyMDc3RjQ0RjJCNkVDQzg4RjUyQzk1RTYwREUwQzQ3Cis6MTA2ODMwMDAwM0U5RTI0MDA2OEU2RkU5RDY2QjY5N0NBNUNDNDc3MjBFCis6MTA2ODQwMDA1N0Y2NEI2MzExREU0N0ZDNTQ2NTg1QkJBM0NDOEIzOEYwCis6MTA2ODUwMDBCMzQyRjhCQ0JGMUQwQzE5MThERkZCQjhCRjQ0N0RGNjZFCis6MTA2ODYwMDA0NzIzREQ4QjYyRUM4Nzc0NkZFQzQ3NjJBQ0IwRjI1MTZBCis6MTA2ODcwMDBGRTUzMkJFN0QzNzFBMTI3NzEyMjRCRjJCQTYzNjMwQjRFCis6MTA2ODgwMDBGMkU3NEM3RjZGMUE5RTczMDAxRDAyODI1RUNBMzcwMENBCis6MTA2ODkwMDBENzc4NjQ2QTFBRTcwRjczQUJGOUEyMURFOEY3QzlGODU1Cis6MTA2OEEwMDAxREVCQjc5OEJDQjZFMTUyM0JBMTBGNzlGRkFCNDVGRjlBCis6MTA2OEIwMDA4MDc3MUNBRTU3RUZBNzQ2QjdGN0M2ODhGMUMxNUYwQkNDCis6MTA2OEMwMDA4QjkwQUY4OEY5Q0RFN0ZCOEU0RDdDN0U2QkYzM0Q1ODA2Cis6MTA2OEQwMDA1Qzg4RTU5RkJDQ0FFNzBGQjZDM0Y1MDFGMDBBQTU1MTc1Cis6MTA2OEUwMDBGOUZFRDkwQUU5MDNEODU3NDc5QkQ3M0I0QzYyNUVDQkU4Cis6MTA2OEYwMDBFNTYwMjlEMjdBMEY3OEFCNEE0MkE0OUMwMEZDMjRBMjFFCis6MTA2OTAwMDAzRkVEODM0QkI3NDBCQjA4RkJBQjBBRkJBMzdBRTZBRTc3Cis6MTA2OTEwMDBFRjExRUJDMzMyQTEwNzRDNjY5OEZGMTc3N0NEN0ZCNjE2Cis6MTA2OTIwMDA5NUNGRkI5RUVDQzk5NUE2RTBDMzBGRTA3QzdEQzNFMjRBCis6MTA2OTMwMDAwOUI4NzFCRTlBOEE3MERDMUZFRTNBRjBEQTc1MjBENzdBCis6MTA2OTQwMDAxRjM2NjhGMzU0RDY5RkZBNzk1QUI2NjcwQzhCMzY0RkM4Cis6MTA2OTUwMDAzRkI0QzNGRTJBREEzQzg1RUY1MUU3QTlCRDk1RTRGOEMwCis6MTA2OTYwMDBGQkQ2OUYxQUREODY5QTY1QkQ4OTdBRjAxOTc3NkNGQTk1Cis6MTA2OTcwMDBFOUY1RTBFRjRENkVBMkEzNUUwRkMyREZBQjJDQkZCQjBCCis6MTA2OTgwMDBEQzY5RjJBNkM5NTlGOTZGMkEyRTQwN0QxMzk2NDc0RDRFCis6MTA2OTkwMDBERUMyRjJBOEM5OUI3RTlDMzJEREY0RTU3RjE1RkFFNkUzCis6MTA2OUEwMDA3QTZCRTEzNTY4MTc1QjNCMThFRDU3MEE2NjFCODNCOEI1Cis6MTA2OUIwMDA0RkI2N0VDMjY4QkU0RkJBMjE5RUYyNzM4REFENEZBMDE2Cis6MTA2OUMwMDBDREY3NTZDNURDNjFCODhFNUZDRjAyMjY3RTZFNUU2QjVBCis6MTA2OUQwMDAyMjNCRjVBQjZGQkU5OTA4RTNCOTRFRDBGNTdBMjBGM0IwCis6MTA2OUUwMDA1NUMwODcxMjU1MDlDNTAxOUVGMzU0MTY0ODQ4NDI3Rjg5Cis6MTA2OUYwMDBCMUMyNEU0NEUwNzE3RDk5OUNDN0JGQ0I1MkJCRTBGNDVECis6MTA2QTAwMDA1NEZGREJEQUQ1REYzNTNERTJFNzY3NTc3RkMyOTRGNjA2Cis6MTA2QTEwMDAxNzYwMzg0N0M4NTE3MTMzM0ZBN0E4MUFBRDA0QjM2OTRFCis6MTA2QTIwMDBGRUI1QUE0NTExRkI4NEM3Q0NEQ0NFMzgzMkU1OUEzMURECis6MTA2QTMwMDA0OEJGODJCOUMzMTI0OEJFNkI4N0QwM0VCMDRBRThBREFBCis6MTA2QTQwMDBDRTgwM0IwMUY1Nzk2NzczMEVFREZCM0EwRjJENzZGODlBCis6MTA2QTUwMDBBMkU4QUYwMzQyQ0U5RTE3RTcyQ0VENzZBNUQ2MDhGMjRBCis6MTA2QTYwMDBERUNFM0FDODZFMDlEODZENTFGRDZFNzU2NjgzQjA3NzdCCis6MTA2QTcwMDAwNERGRTBDRjA4RkQ5NzA4Mzk5QzA3NEQxM0YyMjJGODk4Cis6MTA2QTgwMDAzNkZCQUEwRjU0Njc3NzNFRTBERjg5ODg3REMzM0Y0QTEzCis6MTA2QTkwMDA1Rjk0NkJBNEVGMDE1QkVCQjRBMjI4RkU5OTQ3ODVCRTFGCis6MTA2QUEwMDBCRUVDRDkyRkNDQjhDRTRENjkyRTUwOTE4RTUzRUM0NjBBCis6MTA2QUIwMDBDOURGQjE1RDlCQUY0M0Q5NTBDNEVCQjI2Nzk3REYzMUZCCis6MTA2QUMwMDAwNkU0QjhFQTkwRDE2MzgzRjE1NTM1N0Y2NEY2NDVEOTgxCis6MTA2QUQwMDBCRkU5RTk4OUYwRDE3RTZDMzU3M0ZCRjhBOEE5NjgyOTc0Cis6MTA2QUUwMDBEMkY1RThCNUZDM0NGNzRGNjY0RjQ1MzQzQzY3NUIzOTVGCis6MTA2QUYwMDA5RUYzNThEMUE3QTM5NTdGM0RGQTE2Q0M3NTg0MjYwMTQ1Cis6MTA2QjAwMDAzRDNBRURGQzdFNzI3N0Y5RTNGM0JFRDNBNTA0RDcyQUI0Cis6MTA2QjEwMDAyODg3NDY5RTRGRTZGNzdGQTczMURGMUQxMzE1OUFFRkIyCis6MTA2QjIwMDA5NzQ3RUFBRjgyQTZFMkM3RjAzRTRCNjVCM0UyMzI0MDM4Cis6MTA2QjMwMDA3OUE1REE2QTQ2MzlBRTZBREFBREEyNURGRTAzMzc3RjFGCis6MTA2QjQwMDA2N0MxRDRFQTYxQjMyM0ZDNUJBRDY2RUU0RjNBRjBCN0EwCis6MTA2QjUwMDBFQkU2MjM3RDNGOUU2RDYxODg5Nzc3RTg0NzRFNUNFRkJCCis6MTA2QjYwMDAzRjZFMUU0NUYzMjBENkI4RkVFMEY3NUMzMzA1RkRGMTFECis6MTA2QjcwMDA2NkFFQ0ZGNEYyMzAyRDM5NUVDQTVGM0I5OUY1QzM3MzMwCis6MTA2QjgwMDBERUNCMkNBRDM3NzlBMkYwNkY5RDg1Q0ZEMzVFRUIzNzhFCis6MTA2QjkwMDBFQkZGMzBGRDM2MTFGNDFCOTc2QjUzQTQ3RTlCNkVFMTI3Cis6MTA2QkEwMDA3MjFGQTFERkQyQTJFOUI3NTU2QkRENjkyODE3QUJGNkRBCis6MTA2QkIwMDBFNkE0MjE1RjU3MUQ1RTlBMTI0REJGQkQyMEY2QjU4NzMyCis6MTA2QkMwMDBDNTNERTlGNjdFQTBERjQ2NDRFOEI3N0VBMERGQTJGODI3Cis6MTA2QkQwMDBDMTQ3NUIzNEJCQjMwN0ZENjZGREVGOTk3RjJGQTA3RUY1Cis6MTA2QkUwMDA4QjMyREUyQjg0REM2OUZBQURCMDc5MkRFOUI3QzI3RTM5Cis6MTA2QkYwMDA0NkU5M0VEMjY1MTY2MUM3QzVENDZGMEJFRkI5OTZGMjcwCis6MTA2QzAwMDAyNjRGN0MxNEY5NDFCQUEyN0UzQjJDRjQxQ0Y2ODM3QTAxCis6MTA2QzEwMDBFRTY3OTY2RkE3RTdFNjU5MzlCRTNERUFCOUZGMjYzQTE3Cis6MTA2QzIwMDA2QjdBNkU1NTdGODVFQzk3RUU3MkM4RjVEQ0FBMkNBRUI4Cis6MTA2QzMwMDBFNzU2RURFNTdBNkVENTIwQUVFN0Y0RkE2RDUyMzdGREYyCis6MTA2QzQwMDBDNkRCNTdFNjQyN0JEQTI3NjZERDc3MDNERUU3MkIzMUNBCis6MTA2QzUwMDA3OUFDNTA3Rjg2NUI3QjVGNTAzRDI2NTJERkZEQ0MxMkM2Cis6MTA2QzYwMDA0M0RGNzk0MERGRDk3QkQ2NzdBRkEwQkU1MzQ5OEYwRDg0Cis6MTA2QzcwMDBDNDc5QTQ5NzhGRTkwM0UzQTVGQjZBNDdCRjM4RjU5QjY2Cis6MTA2QzgwMDBERkUyN0NGOTgzOTFFRTAzQkQ2RUUwRkJBMTdENUY5Q0FBCis6MTA2QzkwMDAxQTg1RjNFRTY1QzQwN0U2Q0I0RTIxN0Y2REZFQjFBNEU1Cis6MTA2Q0EwMDA0RjI3MEZFNUYzQkRFMjUwMUNBRDEzOTU4RDBBMUZFRjgyCis6MTA2Q0IwMDAyRDRBRDA4REVCQzBERjNFQTc3REYyRkNCRDdDOUYzQzEyCis6MTA2Q0MwMDBEN0MyRTlDMTdFNkNFNEVGMjI4MDA0MEIyM0U0QTFFNDg3Cis6MTA2Q0QwMDBGMzcyRjJGMzk1QThDQzhBRjZFQjgyNDNEMzNGNDBCQjI0Cis6MTA2Q0UwMDA3NUMxRTczNTY0RUYyRUMwRUY3OEJGNjI3N0VCODY0QzU1Cis6MTA2Q0YwMDBFODc3RkU3Mjg1RjYxQjRDREM4N0QwRUU0QjVDREZCQzgwCis6MTA2RDAwMDA5RkVFQUZFOEVGNDE2OEZBN0M3RUI1RkM3RDgxQ0VBRUE4Cis6MTA2RDEwMDAzRjIwQzYwOUY2MkNEMTg1QkQ2MjhDRUE5RjNCQTBBNzE3Cis6MTA2RDIwMDA4Nzg3OEZCRjYyMzVCNzhGQzNGNDAwRkFCODk1RUVGNDRBCis6MTA2RDMwMDAwMDhFQ0U1ODk4REEzNUZFRjk0RkMyQjg5MkJCQzZBNTgwCis6MTA2RDQwMDBEMTQzM0YzRTZEN0ZCMjQwQ0M4RDU4RTNENUU4RDc2RDNGCis6MTA2RDUwMDBCQzFBM0Q3NUUzN0VERTIyRUNBMjhCRDkzMDlDNjdBRjc2Cis6MTA2RDYwMDAxQjdDNzc4QzQxQjlGODNEOEMxRkYwOTkzMzZGNTA1QURBCis6MTA2RDcwMDBBNDFFN0U1MUU4RjNBQjdDQzdBN0E0QkE5MTVFRkNGRENDCis6MTA2RDgwMDBERDc1NjVCQjlGNEY4NTcxNUNFRENEQ0FDM0FCMDhENzgwCis6MTA2RDkwMDBGRUNERUM0MzNGQzIwMTVCMDdFOTM1NERBRTJFQjQ3MjI4Cis6MTA2REEwMDAzOUZGQkI4MDczQjRBRjZCMEFBRDFGNEQ4QThCRTY0QkM2Cis6MTA2REIwMDA0OEE3QjdDNEJEQjAyQUEwMjdDRUM3QUEyNkIxREU4MDk3Cis6MTA2REMwMDBCQ0UxN0M5QkE2QUQzRjQ4N0ZGOENGQUI5QTM5RkRBQkM5Cis6MTA2REQwMDBBQTE1QTJGRjRDRDY3MTEwRTk1Qjk5QUM3ODQyMDA2QTAzCis6MTA2REUwMDA1QUQzRUVEQkYwMUVENTBCMzZGODhFRjNCNjRDRjE2Q0IxCis6MTA2REYwMDBFN0U0QjA2N0E0NDY5NTRCMzU5QTVDQjJFQTIxRTQ1N0M0Cis6MTA2RTAwMDBEMEQ2QzEwNTU4MkYwOURGOEJCQzlFODJGNjg5REVERTA1Cis6MTA2RTEwMDBCOENDRDI3MjE0RjFCOEVDQzcyNkI2OEQ3NUI3M0YzNDMyCis6MTA2RTIwMDA3RUU3QzJCRjZGQTJEREU3RTk0MTdFMDcwOUZCRjIwNUZECis6MTA2RTMwMDBBNEI3MURFOURBNjE0NkI5QUYwQUYxNzU0MzJCQUY1MjI5Cis6MTA2RTQwMDBERDUzODgzRTFBQkQ5QjYwNUQxOENERTk4REVGQkVGNDIxCis6MTA2RTUwMDBGNEJDNUFDQkEzM0M2M0ZENjZDNTg0RURBRjA0M0VGNDlECis6MTA2RTYwMDA4MUEyQzk4NjJGMEU2QUYyOEJFRkM0RjQ3NEMxRkQ3RjM0Cis6MTA2RTcwMDA0NkM0N0M0N0JEMTQ3OUVFNThEOTc0ODRFODMyN0QzNTE4Cis6MTA2RTgwMDA5ODU1MTE3NDQ3N0Q3NTNFRkE3NDlCMEY0REZCQTNERTM4Cis6MTA2RTkwMDA4M0ZBQjZGM0UxNDJBQjNDMUZGNkQ5M0E1RTFDODFGRUExCis6MTA2RUEwMDBBREJEMEFFOTAzRDY5QzI4RURFRkFGQjBGMjdERDMwMTZBCis6MTA2RUIwMDA5QjhGRTRCNkUzQjA4OUVFN0JFQkY1QzY1ODQxN0ZEQ0VGCis6MTA2RUMwMDA0RjQ0QkU4MzlCOEMwM0MxRjM1RDk3OERCREFCRTE5MUI1Cis6MTA2RUQwMDBDREU1Mjc1MjVGQkY2MEYzMTE5RjYyQzE5RjI2RTBDN0Q3Cis6MTA2RUUwMDBCMjk3QzJGODYyN0Y3ODlFRTI5NkZCRDNBRjE3OUE5RjYzCis6MTA2RUYwMDBBN0E3NzE1RDIzRDZGQkVGM0FBRUYwRjkyNDZCMzEzM0NGCis6MTA2RjAwMDBFRUNGREY2RDhFMzg2NzlBMjNGQ0ZDOUExRjJDQTJERTMxCis6MTA2RjEwMDA0Q0NCOThEOEY1RDBERjEyODI3MUJGQjBFQjIxRjJFQkU5Cis6MTA2RjIwMDA5RTdCRjRGODRDOTREQjE1QkYzMzMyMkJGMEI5NkQ5NzkwCis6MTA2RjMwMDA4Mzg1RjgzRDBBMzNBRUFCRTU4REM2QThFNzIyOENBRDVDCis6MTA2RjQwMDAyN0ZDNTZGQ0Q2NDE3QUE1N0M4RjI1MzgwM0RBOTczRjdCCis6MTA2RjUwMDBGNUVFNzBGNDRGQjVBREUzRkEyNUYwQTg5MDhGNDBFQjU1Cis6MTA2RjYwMDA3MDNDMkYyRjU3Rjk3OUIxMUVERThGODVCQzlDN0QzQTdFCis6MTA2RjcwMDBCRTA0RjVBMzUyQ0ZERjc1OTYzN0NDMzU1OTIyRjZFNTFFCis6MTA2RjgwMDA5NTc4RTBDNkVCRDEzREU0QzAyMzBBRjlDMUJCRTNCNzc1Cis6MTA2RjkwMDA5NkQ3N0I4NEVCQkRGMjI2NTMxMERGODc5NkQ3NkZBMzdECis6MTA2RkEwMDBGRDZDNTVGRDQ3NjZCNEUzMjZGRkY2MzFCMjIzQUE5QTdECis6MTA2RkIwMDA4Q0IyOUZCMERFMThCMjkwMUZEMzc4MUM1M0JEQkZBRTA5Cis6MTA2RkMwMDBCMkIxODJFNjYzNjU4M0YwODdFOUZDNDUyQjdFQkJGN0FGCis6MTA2RkQwMDBBOTAwOTA2NkM1MTNCRjc2QTI5RTM5RDNCMkQzNDk3RTZECis6MTA2RkUwMDBCODdBRUU2NzUzRUQ2QTc0M0Y1QzRGRkVCNzg2NEQ1MTM5Cis6MTA2RkYwMDBGRDZGNjdGMDNGNjBGRTZEQjVDQUZFMzc1NkRGQTc1N0RECis6MTA3MDAwMDBFN0UwMkIxRUZCRjQ0MTNDMTczQUJCRTdDMzA3MTFFRjQ3Cis6MTA3MDEwMDA5NTVGN0ZGQ0UwNEZEMTNFRDk2NzczRTE3QTU3RjVFODgxCis6MTA3MDIwMDA1MUYyQUI2QkVEOUUxMkYzQUFFRDkxNUYzRkZDMDBDQ0U5Cis6MTA3MDMwMDBCRkI2MzcyQzc0RkZBQTZERUZGQjAzREMzMENFQjZERDk0Cis6MTA3MDQwMDA1RkE0QTJGRjcyRjVERUE5QjQ2RjU5RkRFNEU0QjRGM0M2Cis6MTA3MDUwMDBERDIzNDFCOTBDRjZFMjNDNDRDRjg3MDM4RDQ2ODZFRjMxCis6MTA3MDYwMDAyMENGMURCMzkwOUQxMUY2QTMzNjU0NzBCRkI0NUJGOENBCis6MTA3MDcwMDA0Rjc3NDUzRjc3RDJGQzdFOTU4REQ3NUM3RDI5QUU3QkRGCis6MTA3MDgwMDA4RDI2OEY5QkJFMEIzRjYwNEY3RUQzNTc4MTlGMjM3QTA3Cis6MTA3MDkwMDBDMUI3NURDMjJGQUVFM0RCMzlGQzBGRTBDRjlGQUNCMkNFCis6MTA3MEEwMDBCRkY5RDNDNkE1QkY3QTAwQ0IxQUZCQzRGNDlCODY3QTdFCis6MTA3MEIwMDA0MTJGRUQ1QzZCOUJENUZCOEUxNUU3QzM5RURGOTA3RjY4Cis6MTA3MEMwMDAxQUY5MDUzNjM3NkI3QkVDRDMwMUU4NkYzODZERUFCOEY3Cis6MTA3MEQwMDA5MUVFNUZFQ0I1RDAzREExRjJCREFGRDNGQzY4N0JGMjgxCis6MTA3MEUwMDAwODlEMTczMTcxQUVENEM2QzI3RkZDMUM0MEVDNjVBQTY2Cis6MTA3MEYwMDA3NjM4QjhCRjU1RDAxREZEQjE2RTI3N0QxNzdFNTcyRTRGCis6MTA3MTAwMDBCNzlBM0YzNjk2MUZCNjhGNEREQzAzMTdFNzZDMTUzQkQ5Cis6MTA3MTEwMDBERTMyMzM5RDVGNUIxOThCN0MzQTJFOUQwQjZBRTNENjgyCis6MTA3MTIwMDBDMzczMjExRDJFODkzQzRGODhFNUU3MTY3QTM0Q0MyNzlFCis6MTA3MTMwMDA3RThFRDBCNjREOUMyRjg0Q0YwRDE4RUI5Nzg3RjdERjRFCis6MTA3MTQwMDBGOTc5Nzc1NTUwNzk5RDQ1OTk4RkRBNzk4MkQzQTY5QjQ1Cis6MTA3MTUwMDA4RkMxREU5RDIzRjQ4Q0VGNzdBMzg3NjJFM0ZCNTY4RDBFCis6MTA3MTYwMDAyRTY3QkY4QUFFOEY4N0Q4MTRGMUZFQzA5NzZCOEI1OEZECis6MTA3MTcwMDA3NzE2ODhGNUE0MTJFOEM1REY5MzcxN0NDRjhBRkRERDEwCis6MTA3MTgwMDBEOTQ3OEQ0MURDMDc2RjY4Mzg0MDdBNTUzRkFGMkI1OTlFCis6MTA3MTkwMDBGNEY4MjFFMzZENUM5RjU0MzZFRDFGOEVGQUU3RUNCM0YzCis6MTA3MUEwMDA0RjkzREM1NUVFM0E2RTBFMDA5QzgzRjU0Rjk4NUI4NzRCCis6MTA3MUIwMDA3NkM5MzlFQUVCNjA4NEJFM0VGQkY4RkVFMUZDOUM4M0I1Cis6MTA3MUMwMDBFRjIzRjVGMEFGMTBGMEFCOUE2NUY4NTVCQjNFOTJFMEI3Cis6MTA3MUQwMDBBRjA4MzQ5ODVERjY5RUZCMzlBMzdBRTdFMjc4Q0ZCNDI2Cis6MTA3MUUwMDA5ODI4MkVDQTk5MDY2MzYxQjQ3ODI1NDMzMTkwNTQ0QTkxCis6MTA3MUYwMDAxNzlEMzYzOEY4RkIzODYzOTI5OUVDQzhENThFQjFDNzI1Cis6MTA3MjAwMDAxMjkyMzEzNUJCNzExRkJEN0UyREJGMEZCOUZFNjc5RTM3Cis6MTA3MjEwMDA3NEU0Q0JGQUM0Mzk3NDBFNTRBQkEzQTMyQkQ5NTU4MEI0Cis6MTA3MjIwMDBGQjZCRDc5NEEyRDEyODU2N0EzRDkwRTgzNTQ4NzhBRkM5Cis6MTA3MjMwMDA3NjE0QTZFMTdCRUU1Qjg1M0RDMjU0MEZCRERGMzMzQTg5Cis6MTA3MjQwMDBBNzE1RTIzODhDMkU4M0NCMTY3NTFERTVGMDRDRjYyMjdGCis6MTA3MjUwMDA4QTE3NjE3MkM5RUZFOUJFRjdGODBGRUU3RTcyRkM4N0ZDCis6MTA3MjYwMDA0MEJGN0YzNEZFMDNBMzM4MThGRkVGRTMzRjA0QjA5RjE1Cis6MTA3MjcwMDA3RjgxRjgwRjIxRjJEQjY4RjExRjkyQkZFN0Y4MEY2QkY3Cis6MTA3MjgwMDA5OTFDRkY0MUYwMzMxQ0ZGNDFGMEYzN0ZFMzNGRkNGRjBCCis6MTA3MjkwMDAxNUZGQzExOEY3RjcyOTE4OUY0MThCRkY5MDEyNjc5RUMxCis6MTA3MkEwMDAxQTE5RkZFMUMyQjg4NEE5OTFGMTFGQzZDNUE1NEY4RDc3Cis6MTA3MkIwMDA4Q0ZGRjA4M0I4QUNBOTkxRjExRkU2Qzc1RDM0MzUzMjdECis6MTA3MkMwMDBGRTQzNTVEQ0E4QTk5MUYxMUZENkM2NERBNEJDMTZGRkZDCis6MTA3MkQwMDBFMUVFQjhBOTUzRTVGODBGMzNBNzRFODE3QzVCOUNFRjM0Cis6MTA3MkUwMDBFRkI4NUVDNThBRkZGMDFFNEU5NjMxM0RDNzdGMDAzODZECis6MTA3MkYwMDBFNkI4MzFCMUUzM0ZFOEUxQzQ4QUZGMDA3MDEyMDg0RUZFCis6MTA3MzAwMDA4Q0Y4MEZEREYwODkxMUZGMDFFMEE0MTM5QzE4RjExRjI4Cis6MTA3MzEwMDBCQUUxMTMyM0ZFMDNDMEM5MjIzODMxRTIzRkU4RTFDNEQ5Cis6MTA3MzIwMDA4QUZGMDA3MDJFOEE0Qjg5MURGRjQxMEYyNzU2RkMwN0VDCis6MTA3MzMwMDA4MDMzOEFGMDg5MTFGRkExMUIzRTMxRTIzRjAwOUM4OTE2Cis6MTA3MzQwMDAwNDI3NDZGQzg3NkVGOEM0ODhGRjAwNzBBNkQyQjg2Mjk2Cis6MTA3MzUwMDBDNDdGRDBDMzg5MTVGRjAxRTBDQzI0N0M2MkM0N0ZEMEY4Cis6MTA3MzYwMDBDMzg5MTVGRjAxRTBDQzI1N0M2MkM0N0ZFODg2NEY4QzgxCis6MTA3MzcwMDBGODBGMDBDNzQ3RjhDNDg4RkZEMDBEOUYxOEYxMUYwMDExCis6MTA3MzgwMDBDRTcyODIxMzIzRkU4MzFFNEVBQ0Y4MEYwMDY3MTVDMTI4Cis6MTA3MzkwMDA4OTExRkY0MTBGMjc1NkZDMDc4MEYzNTM4MjEzMjNGRTA4Cis6MTA3M0EwMDA0MzM3N0M2MkM0N0YwMDM4QjcxMjlDMThGMTFGQkFFMUUyCis6MTA3M0IwMDAxMzIzRkUwM0MwQjk4M0UwQzQ4OEZGQTA4NzEzMkJGRTBDCis6MTA3M0MwMDAwM0MwQjk5N0UwQzQ4OEZGQTA4NzEzMkJGRTAzQzBGOTYwCis6MTA3M0QwMDAxNUMxODkxMUZGQTExQjNFMzFFMjNGMDA5QzdBOTJDMzg3Cis6MTA3M0UwMDAxOEYxMUZCQUUxRjM1REUzM0ZEODQyMDM5NTFDOEFGRjExCis6MTA3M0YwMDA0MDcxMjJDM0YxMUY5MkJGNzVGQzg3NjZDNEY3N0ZFMzFCCis6MTA3NDAwMDAzRkZDQ0Y4Q0ZGNzBCM0RERjc3NTFDRjk0MUJGNUJGQzBGCis6MTA3NDEwMDAwNzVCRkNCNzhCRkY3MEIzQkQyODNFMUVGNzk3REYzMkNBCis6MTA3NDIwMDBGRTQzNkFGQ0I3OEJGRjAwRkRBNEM3OEY4OURENEZBQzFDCis6MTA3NDMwMDBGODBGMzlCQTdFN0E4QUZGMDBGRDBDM0FFRjc4NjJDNDAxCis6MTA3NDQwMDA3RkYwRThFOEY2N0RDNTdGRjgyMkVFRkNGMTFGRkVFNTRGCis6MTA3NDUwMDBFMjJDQzAzNjA1Q0Y3RjhBNDkxNEQ5QkY0Q0RDODU2QjNFCis6MTA3NDYwMDBFM0ZGQzk3MTE3Qzg1OEY4NTc4QUJCQTBCRERGNkYzMDVBCis6MTA3NDcwMDBFMTdBRjVBNkUwRkI2QjQyMkVERTEyRjExNzhFQzU4Qzg5Cis6MTA3NDgwMDBCRjEwQkM4QUZDQTJDQkU1RjgwQkQzMDUxRkU3Rjk2NDVCCis6MTA3NDkwMDA3OTk4Q0VGODc5QzNGNDI5NTkzQzVFNjY5OTJFRkU0MjVDCis6MTA3NEEwMDBBRTdDN0UzREMzNzc2NDBBODA2MzU3NzlFNDcxMUMxMTFBCis6MTA3NEIwMDBGMjMwQjNFNEEzRTc5MDNENTc4RjhEMUU3RjYxOTZFMEQ1Cis6MTA3NEMwMDA0N0IxOEUyRUQzMDVERjhBNDU3QTNEM0U0OTAxNzk5RTJDCis6MTA3NEQwMDA1MTc2NDQ0NUJBQ0U3NEI3QUFFNEQ3RkU4MUM2M0ZCNzA5Cis6MTA3NEUwMDBDNEJGRDkwMkFFMUVERjU5ODI3RkIzQUVFNEZDRDNFMzQyCis6MTA3NEYwMDBGRDJBRjJDRjA5NjlEOTI4RTI5RjFFNkYzRDlFN0FGRUQwCis6MTA3NTAwMDBCMzQ4N0U0N0M0Q0QyODYwNzJEQzg1Qzk1NjM5RUVDMkM3Cis6MTA3NTEwMDA1NDk3MUM3N0UxOEE3NDM5RUVDMjk1NkUzOUVFQzIwRjJBCis6MTA3NTIwMDA3MkU1QjgwQjU3NzlFNEI4MEI1NzhGOTVFMzJFMTQ3QkFGCis6MTA3NTMwMDBEN0VBRTIzRTZDRDJDNTdEQjg0QjE3RjdFMTdFNUREQzQxCis6MTA3NTQwMDA4NzZEQkFCODBGOEZFOEUyM0VFQ0Q2QzU3RDc4NUExNzQyCis6MTA3NTUwMDBGNzYxQkY5NDVGNUM3MzU4QUFCRkI0RjY4ODk0NUY1NjE2Cis6MTA3NTYwMDBGNzg2NTQ3Rjc5RjBCODU0QkVBMkZFMDNBOUJDQTJFMTBECis6MTA3NTcwMDAyMzI5NUZENUY0ODU1NEJGQjc3MTFGNUUxNUVGODE1Rjc2Cis6MTA3NTgwMDAxM0VGODE4Rjg5RjdDMDZGQzY4OEZCRjBENzlGN0Y3MTlCCis6MTA3NTkwMDA1QkU0N0JGQzJGN0ZGRUNENkRGODFFREYyMERFQzFDNkQ1Cis6MTA3NUEwMDA4QUZCMTAyRThGMTFGN0ExQUJGREI3OEZGQjkwOTJGQ0Q5Cis6MTA3NUIwMDBDRjdGODc5RjYzRTdFNzlCMTNFMjI3RTVEODUzQkVGQkE2Cis6MTA3NUMwMDAzQkZDNkI4QkU0RjdDQzczNEJFNEY3Q0MzOTc2QUVDRjU2Cis6MTA3NUQwMDBFN0Y5RTQ3N0NERDc5N0M5RUY5QUNCNkNCRTZDQzQ0MzdCCis6MTA3NUUwMDAxRkY3NjE0MkJDMzdDNzhFRkE1MkJDQ0YwRkUxRkI1NDg0Cis6MTA3NUYwMDA1ODFCOUZDNUY3QTk5MDNFODc3MTFGMjAzRDg4NzExRkJBCis6MTA3NjAwMDAyMDNEODQ3MTFGMjBGRDNEQzY3RDgwRjQyNThDRkIwMDRDCis6MTA3NjEwMDBFOUNCMThGNzQxQzVCODExMDExMTM3QTI0NkM0OERBOEFFCis6MTA3NjIwMDAxNTcxMjNFQTQ0REM4OEEwODgxQjUxMkZFMjQ2MzQ4ODc4Cis6MTA3NjMwMDBCODExNEQyMjZFNDQ4OEUwOUNGMDFGQTJGNEE0QkY4NUNGCis6MTA3NjQwMDBEMjUzRkU2Mzk0OUVGNkI3NTI3QUM2N0Y5QUQyQjNGRUE3Cis6MTA3NjUwMDAwRTRBREJGQzlGNTNEQURCQjgxMTlBNUNGRTE5RUQwNjhCCis6MTA3NjYwMDAzM0Y2Q0ZFNTU4OTNEMzE5RjY4MTFCMjJFNUI0Qzg3RUQzCis6MTA3NjcwMDBEMTA2OTREMzU4RjEyMkU2MjI0RDUzNjJDNzhCMDg5NzY2Cis6MTA3NjgwMDBDNzg4MTdEMUQ1M0U3NkJDODhCNEQxREY1RkJDODg3RjcwCis6MTA3NjkwMDA4QkU3RjJGQThGQzY4Qjk4NUYyREM3MzM1OEIwRTZGQ0E0Cis6MTA3NkEwMDBGMTIyQ0E2QzQ1QUI1MTJFMzU3OUZDQjc3ODdFNUVENTk4Cis6MTA3NkIwMDA1M0JDODg2RDc2NDVBQ0Q3NDAxN0I0QkI4MDJFQjQ1RTAyCis6MTA3NkMwMDBGN0YwREVGRTM5QzdDM0I5Qjg5RkU4Q0NCREU4QkM3MTlFCis6MTA3NkQwMDAwRUY0NzIxMTlCREUzQ0FFQzE3NURGNzM5Qzg4OUVFODkwCis6MTA3NkUwMDBBQUQ1N0ZCMzlDQzcyRkY4QjdGOEYzQzcyRkU4MTYyN0EyCis6MTA3NkYwMDBBMkE3RjgwMjgzM0UyMzNERDlEQjM4MTEzREFEMEIzREY3Cis6MTA3NzAwMDBEMTczRDZGNzFDMjdBMjI3QkREQTkzM0VGREUzNzQ0RTUyCis6MTA3NzEwMDBFNzA5RjFFNzhGQzcxMThFMEI2NzZEMzk0ODhENUQ1RTA0Cis6MTA3NzIwMDA5QURBQUE3ODA3NUUzMERCNDVGRTkzRjY1REUyREU5OEQyCis6MTA3NzMwMDA5N0I5NURBOUZDOUQzQURBOUJFRDdCMTI4NjMzN0FCRjNGCis6MTA3NzQwMDBFRTYyNUVFMDRGQkNGOEFFRUNEQUJGMUZDRkQzNkY3NUQwCis6MTA3NzUwMDAzMjZGNjIxMkM1ODM3NzFCNzM3MDFGMzZEMjhBRkU5NDE0Cis6MTA3NzYwMDA4QUM2OEY1RUZFMURDMEI1MzUxQkU5M0U1OTNCRTBEMDkxCis6MTA3NzcwMDA0Mjc2OUYzNzExRjkxNkNGNkVBNzdEM0E5RTcxN0REMzYxCis6MTA3NzgwMDAyN0YyM0RCM0VFRjcxQkIwNEFDNEY5Q0Q1NEEzOURGNkUyCis6MTA3NzkwMDA0RDlENUJGOTNENEYyM0JCRThCRTg5Qzk3NDlGOUEwNTk3Cis6MTA3N0EwMDBEREM0M0ZCMjUzNTcwODNDM0IzMUM1RkEzRTJCRDk4RjVECis6MTA3N0IwMDBDQjBFM0Y5MTFGNjJGQ0JDMzJEMjZGRDBBNzUwRjZEM0U0Cis6MTA3N0MwMDBENEQ5OUNDM0YxNUQyNTBCNzg1QkQwRkU1RTIyRTBBNTg5Cis6MTA3N0QwMDAxNEM5RkU5QjBGMTcxNTFFQzI3M0ZBMjVCRTUyQkE4NzM1Cis6MTA3N0UwMDA5MDU2MjJGQjczOTg3ODM3OEVEQkIxRjA3RDM5QzBBN0I1Cis6MTA3N0YwMDBCNDQ5NjEwRjI4RERERjkxOTczNURGQjUwMUY3MzlDQjRCCis6MTA3ODAwMDA4MzdBRkI5QkU1QTI5Qzk1QjMzODBGRUU3QjU3RDRDQkQ0Cis6MTA3ODEwMDBFNTBFODdCOENGNjE2N0Y2NUVEMUFENzVGMDdEMTM0NzkxCis6MTA3ODIwMDA5Rjk3NkU5RTEwRDZERkU1QTBGQkIwQ0IwRTJGMzYyM0MwCis6MTA3ODMwMDBCMzJDRTkzMkRENkM2RTk5NkVGMUI5MzI3REY0RjQ3M0RDCis6MTA3ODQwMDA3ODY0RkFFOEU5OTczMDU2RjY3RjY5RjREM0VFMUJBQTFDCis6MTA3ODUwMDA0Q0RDMTcwREYyN0JBNEREREVFMTM3NkQyMzNDRjVGNDQzCis6MTA3ODYwMDBEM0QzNkI5NDQzREM5M0U4QTI1NzkxMzU5NTU0M0VFMTEyCis6MTA3ODcwMDA5OUExODY0OEJFRjVGMzIxRDMxRTUyRjBCRkZCMjcwNzFFCis6MTA3ODgwMDBENzUyMkI4RjQzNDVCRDk1Q0U0MTMzNjUwOTZGMTc4Rjc2Cis6MTA3ODkwMDBGMzAxRTNDQTMyMEZDRDA3RENEMUEzN0YzNzlFRkQ1OTM4Cis6MTA3OEEwMDBDOEZEQkJFQzFCNDg2RjJBN0VFRUY4MjIyOEREOEFGMjY5Cis6MTA3OEIwMDAzNjgyRkZGRTAyRjlBQkI0REY0RDYwMUUxN0VFQTMxQTRECis6MTA3OEMwMDBGQzU2RjcxMjE1Q0YwNTk5N0JDOTQwM0MwRjc0NTE3QUNECis6MTA3OEQwMDBBNzc4RjdEQjNFOTREMUJFQkYyMUY0NDkyQTlFQTNEREYxCis6MTA3OEUwMDA5OUQ3MzExM0ZEMEY1NTRCNTkxMUFFNUYzRjcyRjI3N0E3Cis6MTA3OEYwMDAxNzlCNDQzQUMyQzlGRDMzOUI4QjBDQ0MzQjFBN0Y4NzQ0Cis6MTA3OTAwMDBDNzE4NTREMEVGRUFGMjFFQkUxQ0VERDE2NjkzOUJERTgxCis6MTA3OTEwMDAxMUJCM0E1RUJFOUVDQTQ3RDFGQkU4MEM0M0VENDhDNDlBCis6MTA3OTIwMDAwN0VBRDNGQkRBRjZFNjc3OUQ4QjIzRjQ3MDVCRDNEREIxCis6MTA3OTMwMDA0M0YwN0VGMUZEODZFOEVGN0E0QjFEREFGQjM2N0VCRjIxCis6MTA3OTQwMDA2MzQ0NTc5QzgxNTJDNzE4OEE0NzcwNjczNkY0NTM1OTZECis6MTA3OTUwMDBEQzQ5N0NENEU0NzI4MkEwRkY3M0E1RDMwOUJGMjc5QkM2Cis6MTA3OTYwMDAxNTM3RkFFQkE2MTk2RkY4QzEzMEMwNkZEQzUxOTVFQkYzCis6MTA3OTcwMDAyRjcxQUY3QkI0QThGRjM0RjNBNDIzQkVFMzJFNjUwQUI2Cis6MTA3OTgwMDBDRTlGNzE2RjMwNEYwMDQ5NUM1RDRBRjdFOTdFRTc5Q0ZFCis6MTA3OTkwMDA3NjA4RjkzNUE1MTlFNDA5RjVDODU5QkIwN0FGQ0E4RkIwCis6MTA3OUEwMDA2OTkxRUZDQjI1NEVGMTFEQzBGQjg1OTcxQzYzQTRDRkQ5Cis6MTA3OUIwMDAyRTM5QTZFQUVGQzcxODcxQkYzRkFFNTVGRTNFNDFCNzVDCis6MTA3OUMwMDBGRjVDQTdDOTlEOTNBNUEyREM2REY5Q0E0ODc4QjU3NzdECis6MTA3OUQwMDAzMENGM0E4MERCQkVBNDJGOUREQkI2N0ZDMkM4NEU2QzkxCis6MTA3OUUwMDBGRkNBNTgxOEVEN0VDOUREMEVFRUY3QkFERkNDNDg3RjJFCis6MTA3OUYwMDBERjVGNkFBNzc3MEVDRjk2OTY1RjgwRjZDNTY3M0ZGMTg3Cis6MTA3QTAwMDA1RDEwQ0Q0RjE5NjFBNzI1RjBGN0U3REUwNDM2MTZFNUM2Cis6MTA3QTEwMDBGMDU2ODVEM0JCMzZBMzI4Q0FCQUE1Qzk5RDI2ODc5QTM2Cis6MTA3QTIwMDBGQzY1OTRDNkY5QTJEREQ3NEM3NjcyRkI2ODUyNjlBRTRDCis6MTA3QTMwMDA2MjQ2RjlEOUE3MzBBNDZCREIzQUMwRUIzQ0VCNzY4MDA5Cis6MTA3QTQwMDBBRENCNDQ3Q0FBOUEzRUE2N0I1OEQ2NjYyNUVBRUZGMkQ3Cis6MTA3QTUwMDAzQ0UxNzBGMkZCODBFQjAyNkJGMUZFQzVDRDMwODk1MDRBCis6MTA3QTYwMDA0RjY1OTg2QkIzQTJDMTBGQjAyRDY0OTczRUUwNzBGM0UxCis6MTA3QTcwMDA3NzAzNTYxMTQ3NDhBRENEQzBGQjA4NkQ0RDkzQUZEQzgxCis6MTA3QTgwMDAwMDc4M0UwMEYzMDFGOTdCQkZDOTQzNzgwNzJBMThBM0E5Cis6MTA3QTkwMDBGQkE0QzI1RkQ3NkYyNkRCQjYzOUMyRkVEREVCMjgzODA4Cis6MTA3QUEwMDA4QzcyN0JEOEMxRURDNjNFM0U4RjgyNzg3QkZFRkU1NzNFCis6MTA3QUIwMDAyN0MyNkZGRkRDNDJGQ0VCMkJFQzREQURERDQ5MDdBNzg1Cis6MTA3QUMwMDA0Rjg5RDM3QjAwREJCM0IyNjQ1MjNFMUU5RkQzQkRBNDZCCis6MTA3QUQwMDAwRkZBQ0Q4MURFNTFFQzJCNkQ1RDRGRjIzMTNBOUY0OEFDCis6MTA3QUUwMDBCMjFCODJBNDlDQkM1RUI3NEJCQUVGMURBMDc5QTNDRDlDCis6MTA3QUYwMDAwMzE2NTIxOEJFRDdEN0Y0OUJEMkFDODQxQzIwRjdBMzMwCis6MTA3QjAwMDBBREY2MTBERTNGNEIyQTgzNzEyNzYzM0MwRjJCODdEN0RFCis6MTA3QjEwMDBBMjlFOTVGRDVBMjA4RkY5NjhEQzMzN0FFRjhGOEU1NDQwCis6MTA3QjIwMDA4NEFGRTkzRDRENUZERTlBQzhGNUQxQUQ3N0E5MTQwRjVBCis6MTA3QjMwMDA3NEFCREE2QTQzN0Y2QTk2RDczRDA5NDNEMzI0QTk2RUIyCis6MTA3QjQwMDBCQTk3RDJCRjhDQ0ZDM0Y4OUM1RjI2ODZFRDAwOThFNDJECis6MTA3QjUwMDAyM0JGMzYyRTg4RjY5RTI5MDNFNTI5MDVFOUU1RkJEMEVCCis6MTA3QjYwMDAwMUU5RjA0MzFEQ0ZBMkI5RTBCMUIxM0VGQ0ZFOTREMEQzCis6MTA3QjcwMDAxM0MyQUU5OTI2RDZCQjcxRUYxOUY4M0JDQUQwRTUyQ0RCCis6MTA3QjgwMDBGMjdEOTE1RTRGODBEQ0ZGMDk3RkJGRTdGRUY3NTQ4QUVDCis6MTA3QjkwMDAxMzFBRDYwRkE1RDM2ODdENjJDNkExMDc1MENFMjZCQ0E2Cis6MTA3QkEwMDBDOEY4NzE5NEQwMEYyRUY4ODdGNEI5RTQyNURGN0E0NDMxCis6MTA3QkIwMDBFM0JCRUEwNTNEQkY1OUM4MUFDRUUzNEZCMzhEM0EwNDgzCis6MTA3QkMwMDBGMzJENzI5RDc1OEFGNTVFRTg5MTlCOEEwN0FFQzdGOTIxCis6MTA3QkQwMDBBNUM5RDEwNUI3Nzg4Q0JFMDgzQUVBREI4N0ZEOTQ4QTNGCis6MTA3QkUwMDAzNUZDREQ5RDgzN0FFNDI1MjNERTBGNkIyRjAwN0UwM0I5Cis6MTA3QkYwMDA1RDlFQzRGOTAyRjQ0RUZDMjQ3ODI1RjI3RDRCRjMxNTBBCis6MTA3QzAwMDAzNjk0RUY1QjQzOTM1QzMzQTA0REEyQjU4ODk4OTdDODM4Cis6MTA3QzEwMDBCQ0U0Q0ZDOTAzRUE2MDlDODhGNTI0MTRCMDVGNTc4QjlECis6MTA3QzIwMDBCMjlDMjk3ODhGQUI1MEYyRjc2OEJGOEIwNzAzMjVCRTUzCis6MTA3QzMwMDA4NEY5MDA3MjFDNzk4RjU1OTM0RkJEM0M2QUYyQkIxRUNDCis6MTA3QzQwMDAzNzU4Nzg3RTg3MUU3MzQ4OEQ0QTAzMzFDOEMyQjZCQTRBCis6MTA3QzUwMDA1MENGNkFGNkU1RkFCMDNEOTc0OEZCOENENUMyMkU1QTU0Cis6MTA3QzYwMDA2RjlGNjYyNTM1QjAzRjk5RDZGM0Q1QjgzRUMxRjg1NzFBCis6MTA3QzcwMDBBNzMwOUEwN0RBMzhGNEYyNThGNUI5ODEwNTIzRjYwN0U4Cis6MTA3QzgwMDA1NTZBMDdEREUzQUJGQURDQ0M4MjdENzBEQ0JFNDkzODk3Cis6MTA3QzkwMDA2RThEMkUyMzA1NURGNDc0Qzg3NjhBRkRBNkEwNDc2QzEwCis6MTA3Q0EwMDAzQ0YzNUQ3ODdGMzZEMUVBNjUxQjA5Q0Y0OTc0Q0ZCOUMzCis6MTA3Q0IwMDAyMTk0NjdDNUY1RjYzNjFEOUVCREMwNkY0RTM0RkM1NDQ5Cis6MTA3Q0MwMDA3QjBDRkM0NEZDQjYwOUNDRjdCQjU2OTBEN0ZDOUJFQTc2Cis6MTA3Q0QwMDAzMkY4N0FDMTVFNEQ4RkUwOUY3RURFOEM2REFBM0U2MEU5Cis6MTA3Q0UwMDA4RTk4MkY5QTVGNTczRjRGNDYzNEIzNkI5MEVFRTM0MjI2Cis6MTA3Q0YwMDAyQUMzRjNENzlFRTZDQjI3NjJCQzU1RjE5QzVFRUQ3Mzk5Cis6MTA3RDAwMDAzQTA2QTM3Q0VFNTA3REQ1NEVCMjJGNUEwRDE4RjdCNzI4Cis6MTA3RDEwMDBGRDY5NDZGM0Q5QjNGRkE0OTNFMjFCQjVGNEVFN0VCQTM2Cis6MTA3RDIwMDA2NjQ3NjlGNjkzQkU5RTY2M0Y2OTdBNTdCQjFGQkVERDA0Cis6MTA3RDMwMDBFOUYzNjNGRjRBMTNDODI3OEM3RkJEOEJFRjhCRjYzQUJDCis6MTA3RDQwMDA3Q0VCRjA3QjNDOEMwMThGOTI1ODZFMjg4QkJGN0Y5NTJCCis6MTA3RDUwMDBFNTNGOTZCQ0M3RUJFNEI5MDFFODQ0QkY5MzA1RkE3RjYxCis6MTA3RDYwMDA5MEQyMUQwRkFERkYyOUNFNDQ3RURFMDJCMzE5RjU1MDJGCis6MTA3RDcwMDBCRjdDQzYzQkFCNjQ3NDdGQjJERjcwRTZDM0Y1QTk1RjFFCis6MTA3RDgwMDAxRUJGRjcxNzE0RUJGNjM2QTE2RkI1NzRBRkEzRTg3RUVDCis6MTA3RDkwMDBDNERGQTRCMjgwMjVFRkJCRTM4REE4RTI3REVDRUQ0RUZECis6MTA3REEwMDBFRjdEMjg3RkQ2NDIyRjhEMjNEM0M1M0M2ODdGNjZBQUZFCis6MTA3REIwMDAwRDBBQkU5QjRDNUFFOTU2RjgzRDZDRDZGNThFMDlFMDhCCis6MTA3REMwMDA2NUNFNzAxN0EwOUM2NEUyM0UxQUVCMzc0NzhGQTNGNThGCis6MTA3REQwMDA4NEQzMjREOTk5MUUxNjhFNTNGNTA0RjYwQjc2RTY0MTBBCis6MTA3REUwMDAzM0UwREQ2Nzg2MTZGNzRBM0JCN0YxMjg0OEE3MzZDNzY4Cis6MTA3REYwMDAxQzQyQkFFRDUzODVEQkUzODk5QzVFRkFGRDAwMTIxRTNFCis6MTA3RTAwMDBGMTUzNDVGRTM2MzM1MzZENDlBQ0VCNzczODBENTZCMjFFCis6MTA3RTEwMDBFM0UzOTlBNzAxRjVEMkNCQ0U2QzcxMkVFQUE5QzFGQ0EwCis6MTA3RTIwMDBCRkFCMURENkM0QTE1RDcyN0NFN0M0NTkxRTE1QUEzODJDCis6MTA3RTMwMDAyRkVEMUM4RTdCMjY5MEU3QzM4ODZGREJDNENFQzFCN0M1Cis6MTA3RTQwMDAxMjMxM0EwNjcwQjlGMTFBQTVCODM4MUFGRDlCNEMxMkQ2Cis6MTA3RTUwMDBGRDZEQjhDRjhFRDQ4MzBFMzNFRDIzREI5NDM4MEZDRTc3Cis6MTA3RTYwMDBCM0I2RTUwQUM3NTNCMThBQjg0MUFBQkNGRjE3RkE0OEFFCis6MTA3RTcwMDBEM0FGOURDRTJDQzIzRjlFMDU2ODFGQzBBQzFFMkJERDJDCis6MTA3RTgwMDA2MzE3Rjg2MzVDNDVGMkVCRUM4RDBGNkVDN0YzMjg1RDZBCis6MTA3RTkwMDAxQzQ1N0Q5Q0M1Qzk4QkVENzRFRjYyQ0I1RTFCRUQ0QjIxCis6MTA3RUEwMDAzQjhCRjhGOTdDNjdCMzg1RjQ2RkFDNzk5QTg2Q0FFMEFFCis6MTA3RUIwMDAzQ0YxMDI4MTZFMUQ0OEI3MzQ1Mzc1MjJFQUJEQjRGOTE2Cis6MTA3RUMwMDA3Q0ZFRUJFOUQxOEUwM0M1RkRDRTFGNENDMTY4RUZENTFBCis6MTA3RUQwMDBCNTM0M0RCRDZGMzFEQTY1RTkxOUU5OTQ2QURGRUJFQzQxCis6MTA3RUUwMDA2QUQ0N0JEOEM2MDQ0NThBRDMzNzA0N0ExNEZCMUM2MzUyCis6MTA3RUYwMDAwMjdDM0ZFN0ZCRTM2QjVFRDY3NUFGQkQyRThFRDNBRjQyCis6MTA3RjAwMDBEMzM3M0VFMTYxOTQyQjEwMzhGQTNEMDFFRDVDNTNFQzIwCis6MTA3RjEwMDBFN0I1Rjg0OTVBM0Y1QkZDRDY2MjBDRjk1OUI3NjhCQTI1Cis6MTA3RjIwMDAwREQ3ODExNEU2QkQ3MjFFNEVDQTJEMjZCNjkzREFFNTMyCis6MTA3RjMwMDA0QUY3NURFRkY1OEYyQ0M2RjdDOTk5MDlGQzFFRUQyN0FFCis6MTA3RjQwMDA1QkE2RDI3QkU2NTRCNkNFMzYxOEU4NTA1QTY0RjBBMDUxCis6MTA3RjUwMDAzRkUwRENBMjM3OUQwNjkwOUY0NTk5MkRGOTI4QTcwOTlGCis6MTA3RjYwMDAyNjVGNjZDMjE4NzI1REQxN0U2MzU5ODkzOTE4MDI3QTFDCis6MTA3RjcwMDAyNUQ3ODE0MjIwM0EwNkFFMjQzQTJFMzQ0NEY1MEY2N0M1Cis6MTA3RjgwMDAyN0YwN0RFNzVCNjIzRDQ5NEYxRjUwQkM2NDU0NjRCRURGCis6MTA3RjkwMDAxRkQxNTU5MzIzOTgzRjE5NEI0Njc3QzVDMzA0N0U1RTg2Cis6MTA3RkEwMDA5NDEwNjUxRUI0OUI1ODEzQkU5N0QwRjQ1MUIyMTAzMzkxCis6MTA3RkIwMDA0RDFGNkE3MjlDOENGMzAzRURCODIyRDA0RkQyNzkxRjBCCis6MTA3RkMwMDA1NDRERURGQTNENDNBNUY5ODUyRkQwOEU3NTVFM0E4OTYzCis6MTA3RkQwMDBGNDBEQ0NEQjFBOTJGMzVDQUUzRjZEQThDRjIyRkM1NkI5Cis6MTA3RkUwMDBFRDdCNUZFRjhGRUY5OERFRkVEOUM3MEU3Q0Q3RjIxN0RGCis6MTA3RkYwMDBCNUMzODFGQUVCRjQyRDdGNzI2MDFDQjBCNzZGRTFGQjYzCis6MTA4MDAwMDBFNDFCNzVGNkZGNTU0MjNFODIwOTQ1NTM5MEFFMEJGQ0NBCis6MTA4MDEwMDA3RkNGOEZCNEQ3RDgxQUVFN0Y1RTFFOTRERkFGRTJGRDFDCis6MTA4MDIwMDBFRjQ4M0Y2MDQ1ODNGRTNFNDA4MEM3MjkxM0JGQ0ZBOTdDCis6MTA4MDMwMDBFN0MzM0FDMTg3RTVCQkI2OTkzM0RERDhCRjZGMEVGNjBCCis6MTA4MDQwMDA3RjVBRUM2RjRFMzczQUU4M0Q4NTg2Q0ZBMjVEMjNDRDRGCis6MTA4MDUwMDA2OEYzRkZBNUQ5MjJERUU5QjU5OEI4NUVGNkNFQzBGNzgxCis6MTA4MDYwMDAzOTNFNDEzNzNEOUUwN0Y3QzUxM0JDQTVGN0YwRjdBQjg2Cis6MTA4MDcwMDAwQkExQUYzNUEwMTc3RENEM0M4RTkyN0UxQzRCREY3NkQ5Cis6MTA4MDgwMDA0RjQzM0ZGQUQyNEQwQUVERTNCMEZFMkRCMDRFRjhENjg1Cis6MTA4MDkwMDA2Q0E0NzczQ0ZBNzEyRTBDQzhGRTFDN0RCQzQ2NkQzRjZCCis6MTA4MEEwMDBCMDRDRjA3RjA5RkUxQTZGNEU5NDM4OEVDREZDM0RERDRBCis6MTA4MEIwMDAzMjlEN0REMTc5MjgyNzFFQzdCRjI2NDFEOEQ5RjlFQzNBCis6MTA4MEMwMDAxMjhDREJCOUU3NTA3NjQyQjQ3ODE4NUE3QTU2OUNGNzhFCis6MTA4MEQwMDBFM0JEN0U0QzRGRkIxOUE1NTMxMkRDM0M1RTU3RjM5MTc4Cis6MTA4MEUwMDA5QjUxQUUyQTlCNzY1MzdDQzQ3REMxRjdGQThDODcyQUJDCis6MTA4MEYwMDAwNUNENUYxODUxQTgwQTg0M0QzNjVGRDg2MzdCMTg5Nzc5Cis6MTA4MTAwMDAxQkIwQTMzN0EzRkM1RkZFQjlDRThFMTZFM0JDNDE5MzMwCis6MTA4MTEwMDBGQjQzNDkyNDM3MzdFMEI4ODZFMzc3RjU5MzY4RTNCQTQxCis6MTA4MTIwMDAzQjQxN0VGRkQ1REI3MTY5RTNEMUM2QTc5NTU3ODhGNzQwCis6MTA4MTMwMDBFN0ZBNzY5QTlDNEYxMTcyQjc2NDQ3RjE4NkJFNDA4QTdGCis6MTA4MTQwMDBGNTdCREYxRjIwRTJDODUxOUMyRDREOEVGNDcyQjI0QzlFCis6MTA4MTUwMDBGMDJEMkMwRkNENzdEMEI4MzRCRTgxQkNBNzhCNzc0OURBCis6MTA4MTYwMDBFOUU4Q0ZFODQ5MkVGNEZDNkYzM0I1MEVDMEY5QUFFNzcxCis6MTA4MTcwMDA3RjVCOEM3MzlGRUQwOUZDNUM2Mzg5REIzQjBERkQyQjAyCis6MTA4MTgwMDA2MDFFNkU3MDQ1RDgwRkE3RDVEQTgzM0ZDNTc5QjQ4M0RBCis6MTA4MTkwMDBDQjcxRTRCQTQ4QzZEMjhCMjY1QTY3NTczOURDNjk4OTU1Cis6MTA4MUEwMDA3NkMxQjc3MUY4N0VEMTEyQzA3QTVBM0ZBN0ZDMzVCM0I5Cis6MTA4MUIwMDAwNkQyNzk2M0VEQUM4MTAzRTlERDA2QTU1QTc5RTlGREM0Cis6MTA4MUMwMDAxRjNCRDEzRTZEQ0Y2NUU0NUY2ODczQzhGODFFQzFDNTIzCis6MTA4MUQwMDA2NjBDQTY5Q0ZFMkJENTk2QUZERjQyMURCNEEzODVFMkFDCis6MTA4MUUwMDBCNzlFRkE0QUY4MjdCRUIyMTQ0NjFCRTdEOTA0NkUwN0I5Cis6MTA4MUYwMDA2QUY3NEY2RTE0RjNFOEM2NjZGRURFNkVEMUQ2NjIzM0MwCis6MTA4MjAwMDBGOTAxRDZDOEY3MzU1RTUyNUNEMzMyQTFBOUFGNjFBNDlCCis6MTA4MjEwMDAxOUY5QUNFN0M3NTJDRjE1RjQwRUJDMUI1RkQ4RURDNEZCCis6MTA4MjIwMDBEN0E1RkE3NzZERTIxRUQzMDIyMTFGMzM1RDZFNjFBN0Q5Cis6MTA4MjMwMDBGOUU4MURGMTkyM0EyM0Q5RjdDQkRDRDVCNEJGNTlBMUE3Cis6MTA4MjQwMDA0NjdGOEYzNUM2NjUzOEVGNzhGNEUzNThEOEE4OTBERUJFCis6MTA4MjUwMDBEM0UzQkY2Q0M3REEwRDdEMTk4RTlGOEZBRkZCMzg0MjE5Cis6MTA4MjYwMDBGRDQ4Q0Y4ODcxQjJENkNCRjlCQjRDQjE2RUZGMTc0NzMyCis6MTA4MjcwMDA5NEJDNTcwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDI1Cis6MTA4MjgwMDAwMDBCQjU3QzBENzg1NEQ1QjVFODNFNzNDRUZDMjQzMzk1Cis6MTA4MjkwMDA0OTI2RkYyMTQxM0MyMTExMTIxMkUyOTA4NDAwMDE3MTE0Cis6MTA4MkEwMDBGMjRCQzQwODAzMDE4MjYwNzU0MDUxODQ5MDIwN0E1QkQwCis6MTA4MkIwMDBFRkFCQjc5OTkwNjgyREZBN0FBMzU4Q0I2REVERkQwNjE4Cis6MTA4MkMwMDAyQkFEMEE0ODgwQTA4MTI2RTkwNDE0MDMwNDBEODIwQTFDCis6MTA4MkQwMDA5NkQ2ODAxNEIxMDUzMjgwQjU1ODdEOEZCN0Q2REFGQkJCCis6MTA4MkUwMDA2NDY2NEU5MjQyNkY1Rjg3RDY5RDdEQ0UzRUZCQUNCREVECis6MTA4MkYwMDBGRUQ3REE2QjlGNjVFQ0Q5NEI3MjBFNjMwRkI3Q0I4QzUwCis6MTA4MzAwMDBFNTMzNTZGQkFDRUM2NUE5OEMyRDYzQ0FFOUJFMEM0NjdGCis6MTA4MzEwMDBCRjZCQTlGODVGNjdFNTkyMDRDNkVFQzUzRjU1NjhEQjAxCis6MTA4MzIwMDA1NzU1MzI3OEFFNUNBRTk5ODVDRkY1NkY5MDk5NTk4MkVBCis6MTA4MzMwMDBFQjFFRUY1M0M5NzFEMDM2NDk4RTQ2MThDNzFFMzc5RUMzCis6MTA4MzQwMDBFRUIzMzA2NjgxN0ZENzQ2RDMzQzhDMjVFMEZDRkNENzZBCis6MTA4MzUwMDAyM0IxQTc1MjYwRkVCMzhBRkZCRDA4NzhFRTJDQzBFMUJFCis6MTA4MzYwMDA4MTc5OTY3OEY4NzNGNDdFRjhGRjMyQzc4QzJGMjQ3OEUxCis6MTA4MzcwMDBERkZERURGMjI5NzMwRTVFNUQ2RDMyQzBGOEE1MkY0OTY5Cis6MTA4MzgwMDA2QzFEOENCRkZGNjlERDc4QjEyRUZEM0ExRURBRjBBM0JCCis6MTA4MzkwMDBCOUU5MTk4MTcxMEY3QjlGMEJFOUMzREE1NDU2QzBEODM0Cis6MTA4M0EwMDA3RDAyM0VGNkVBN0YwNUVFNzNGODREQUUwOEM2MzJFRDZCCis6MTA4M0IwMDAxMTcxNjdCM0EwNUJDMDI2NUQ0QjYzQUNDRTFBOTlDMzQ1Cis6MTA4M0MwMDBBMkEwMzUzM0MyMjMzQjY0RjQ2RTAyQjhENjQ0QzA4MjA3Cis6MTA4M0QwMDAwMUNFMzU1QkEzQkQxRUM0RTNFQTY4QzY0NkMwQjhGNjRECis6MTA4M0UwMDA4RDI2QjcwREU2QzRERkVEOEM5REFCNkY5RTlCOUUwRTc4Cis6MTA4M0YwMDBFQkFGN0Y3QTZFQkFDMkQ4MkNCQjlEQjE4OTQwOEZCNkU1Cis6MTA4NDAwMDBFNzY4NUNCN0UyOUE2NDg3RkUyQTRCREY4RkVGNTY4M0ZBCis6MTA4NDEwMDBGMDM4OTlEMzYzOTk1QzY5NjI4NkMwN0NGQTc2NTlCMzY3Cis6MTA4NDIwMDBGMUNCQkVBMDc1MTYyMUZDNTZGODYzMTJDMDJGRkYzRDlDCis6MTA4NDMwMDBGOEQ1QzQ2ODVCMDA2RUZEQkM3RkFBREYxMDAyRjc0QTY2Cis6MTA4NDQwMDA4NTM5NUI2QzgxRjU2OEUzMjZEQTBEQjQxRUZERjM3QTlECis6MTA4NDUwMDA3QTMwRTZBNTcxN0FCQUFDNDQzQTA0RDExN0UxNTQwMEY3Cis6MTA4NDYwMDBBRjNEMUQ1NkVGNUE4OUY4ODhFMEY2NzQ4NDExREMxNzg5Cis6MTA4NDcwMDA5M0Q2Q0QzRDkzQzdEODYxN0MwMEUwQUUxREYxMzJGNUI3Cis6MTA4NDgwMDA1RjUxNUM2RTdCM0M1RUY0OEY3MjhEQzc2NzYyMTk5Qjk3Cis6MTA4NDkwMDAzMjNDREU2MDQ2QzY2MDdDMkVDRTBGRTM3Njg1MzlGMzMzCis6MTA4NEEwMDA5ODhDRDc1REIxQzgwN0QzMUJGQUFBMkM0MEFBM0FGQjE3Cis6MTA4NEIwMDBBNDBBMDVERTMzRkRCOUJFQUEzMEU4M0Y2MjlGQ0NGQkJCCis6MTA4NEMwMDA5QkZBOEU1QTFDOEMzNUIwMjkxNUE1RjBGQzYzNzAwRkYxCis6MTA4NEQwMDBFN0JCNUU5QjZGNzYyRDY2QzA1NzM1ODA1MzRCMENCNDVGCis6MTA4NEUwMDBDN0M2QkM4REYyNTZEMzVCNTkyMTQ1NDJDQjk4NEZDQUMzCis6MTA4NEYwMDAwNTdFNzA0NkZBQUMzOUQ0Njc4NTMwQUUzM0NBRkQxRkFECis6MTA4NTAwMDBCOEJFNTU1NzlCMkVDOTM4RUU5OEMyRTVBNTNCOEVGMEY0Cis6MTA4NTEwMDBBMDAwRUM2MUYwNUM1M0I4NTNCNTAzQkU5QTYyMkM4RTk4Cis6MTA4NTIwMDBDNjU0QkFFRTA5OEJDMUJFNTM1NTgzQUU2QkY0QzBFNzk3Cis6MTA4NTMwMDAxMDhFMjYwMzczNDY0M0RCNzU2MDRDNTQ1RkY2RjA3ODZCCis6MTA4NTQwMDBFQkFBNTdBQjE0QTBGRkJFRkEwQzZBRjVGNzhCNENGNkZBCis6MTA4NTUwMDA3NDA3M0M1RjY0NjBFRTE2REJFMEZCQUYyMkJGMTA5RDRBCis6MTA4NTYwMDBENDE0QTQ3MzZEQjc4OUU0MUM3RjEyRjBGRDJBQTE4NzhGCis6MTA4NTcwMDA2QTgxNDA1MTAwQ0ZBQTYzQ0MxNzFFODlFM0NBQkY1MDVECis6MTA4NTgwMDBCMDZEOTVEOEU5MTBCRTYyODFCRTNDM0NEQzM3REFENkNFCis6MTA4NTkwMDBFMjdDNEEzMDlGNzAzQzE1MkJBOTU1NEFEMDdCNEI2RDJECis6MTA4NUEwMDA5OTIxN0QzOUQxOTA4MUVCNjE3MkI4NjMxM0UwNTc0RTA4Cis6MTA4NUIwMDAzMUFDREUwMUVCOTc2Rjg2MTZGMEExRDgxREYyMTI2ODgwCis6MTA4NUMwMDA5QjRCQTZDQjRCQTE2RDM0QjI4NTJERDgxQUQ4RjI2MDQ3Cis6MTA4NUQwMDAzQzc1MDg3OUQyREE0Qjc2RDc2RjkwRUUxN0RFRUYyRDI3Cis6MTA4NUUwMDBCMDkyOUUxQTY5MjdGOTE2RUI2RDk0MUMzRUQ0NDM5RUY3Cis6MTA4NUYwMDAyRUU2RDgwNEQ3OUE2NDE3RTM3Q0RDQzI5MDhGN0YyRkQ1Cis6MTA4NjAwMDBFNjcxOTgwRDNCNTVFMEQ3RjdFQzBGMTJGRjNBQTIwQzNDCis6MTA4NjEwMDA4RkE2NDJGRkEzRTYxNTE1MEFGMEFGMjNDNTcwMjUxNUY2Cis6MTA4NjIwMDA3OEY0NzhGMzRBREVDRjMyNUMxOTBERkQ0RjlBNkI3OEZGCis6MTA4NjMwMDA3RjJBNEM5OUNDRDhDOUU2NTUxNTlFNkM5Qzk3RUIzMTk2Cis6MTA4NjQwMDBCNkM1OTk4NUVGNTEwQzEyQzlBOUIyRDdFNDZEODQzRjI0Cis6MTA4NjUwMDA5QjIyMzkzRjM1MTk4MTJGNjM3MEJDNEFFMzlGNkEyOEZBCis6MTA4NjYwMDBERTZDMDVGRTU3OEE5REVBNkExQkM3MzVGMkMzRkZCNDZDCis6MTA4NjcwMDBENUYwMjg1QjBEQUIxMThGRDgyMkJFQ0Y4ODc1NkI3NEY3Cis6MTA4NjgwMDA2MEFEQ0VBQzM5QTgxNzVBOUM1OTczMjMxMEFGRUVDRjBBCis6MTA4NjkwMDAxMUFGNzkzREJERDM1MTBGQjc3RUYwNDk4MTNCOUJEM0RDCis6MTA4NkEwMDAwQkU3QzlFQjYxMkMxMkQ2NzNFMUFEOUIzNkNBNTI4MDQxCis6MTA4NkIwMDAzRTk3RUM0NUU3NTE1RjRCQTBBNjFGODc3NTQ5QUE5REUxCis6MTA4NkMwMDBERDAzNzJEN0U4NjRBQTA5RDY5NUM4NUVCMkEzRkQzMDZGCis6MTA4NkQwMDAyMDdENDAwNUI1MzJBRTVGM0FBMzVDNUZFMjczNkNBNEM3Cis6MTA4NkUwMDA4RkVDNENCNURERjUxNUJFNUZEM0NGQUMzNzY2NDgzRDlBCis6MTA4NkYwMDBBQ0Q3NTdBNjlDQzc2NTA2N0MxMDkzRDI3NjdDMjlFQTM2Cis6MTA4NzAwMDBGM0RGOUExREI3QTgwODhGOTMzRDBFNzA2QzMzMzA4NTQ4Cis6MTA4NzEwMDBDNTEwN0I2NDI4NzBERkNBQzIxREVCNTBERTFEMkNDOTVBCis6MTA4NzIwMDAwM0YyODU2ODIzRTBFMDE3MDdGNkQwMjg2NDQ4NUIwNzZBCis6MTA4NzMwMDAzQzVGQ0FBMDlEODQ3MERENEFFQjkyOTE5RjI2MzA5N0UyCis6MTA4NzQwMDA4QzdBQUI4MDc5QUREOEY2NzdCQzk1ODRGODdBM0U4QzdDCis6MTA4NzUwMDBEREU3ODJENkYyMkE3MzdBODNGNDQ2N0VCNDQ0Rjg5RjJBCis6MTA4NzYwMDAxNTYzQTQzNkRDRDgzMjE3RjkzNEZDMTJCM0EzMUZEMDNBCis6MTA4NzcwMDBGRjBCOTM4MkYzODM2MERDODlENzFERkIwRDBDRTFGQ0JBCis6MTA4NzgwMDBCNUQxNkI4RjgyQkUzRjUzNTE1RjY2ODFGOUZBMDU5RDZCCis6MTA4NzkwMDBCNTc5OUYzN0E5OTlEMUQwQUY4QTkxMDgyRkJGMkVFMjIyCis6MTA4N0EwMDBGNkQ4RkY4NUM5RkI3MjJBRTJDN0IyREExQjI0NTdFMzY5Cis6MTA4N0IwMDBBM0Y5QjhCQUI4RTJCMUQxRjA3QzRCNDczOEMzRjc0RjUwCis6MTA4N0MwMDBFQTBDMzcyMEZFMzc2RkM5MEQ0MzNFRDg4NkI4ODFGNUQ1Cis6MTA4N0QwMDBDNzk4RUQ4RkUwN0MzMTU3MDBERTU0QkFFRTI0QkMyQUY2Cis6MTA4N0UwMDBFQTg0MjhDMDZCRTE0QzlCQkEwRUYwRkVFQkIwOTY5OTgwCis6MTA4N0YwMDBDOEY3RkVBRDA2RjYzMkJDNjI5QkM5MzEwN0ZCREIyRTIzCis6MTA4ODAwMDBBQjc2RDRCM0JGNEU2RDA5QTdGNTZDMzVEMDdBQjY4NTdCCis6MTA4ODEwMDBGQkM3QUQwMUI4RDc2NTI4MTUwODlGNjI2NTBBRUE1RkY2Cis6MTA4ODIwMDBDNTUwQUMzRTAyRDdBNzQ1NzNGREE4RTlFMzlBNjg5NTA5Cis6MTA4ODMwMDBGQUNGNEJGMEZFNUMxQzU3NDQ3MjUzMjZEQjQ4REVGQTNECis6MTA4ODQwMDBGRENDNkI4NkY3QzRDRkVCOTU5MTFFRTE3MzgwOTU5MEJDCis6MTA4ODUwMDBERjE1OUZDQzcwM0UxNzEyMUE1QTlCRDFBQjkyOUU3NUIyCis6MTA4ODYwMDBEQTk2MDBEREE3MEIzRDNCRkQ2NDREMjU4QkM0OEVFM0ZFCis6MTA4ODcwMDBEODU0OTg2RjlGQ0RDODcwNURCN0IxM0VEOTAyRkREQjZCCis6MTA4ODgwMDBBRTMyODcwRkY5RTdBQTQyN0U5ODFERkUwNUZCN0I2NTk1Cis6MTA4ODkwMDA2MjlFNUY0OTRDODk4MjcxNDU1RkFBMEFGMjU3MTEwQkFCCis6MTA4OEEwMDBGNURCQ0EzNjk0N0Y4MUY2QURDNEEyQkI4RUZFNUMyNDk0Cis6MTA4OEIwMDBCNjRBRTAzQUNDQjMyODVBRjg2MUEzRDhBODZCQTRDRjQzCis6MTA4OEMwMDA2MEQ2MDQ2MTQ3NTU1QzdGRjY3RkUxQkFGQTJCNEMwRTA3Cis6MTA4OEQwMDA1Q0ZGNzY5QkYzRTNBOUE4MDc3QjhENkMxMzFCNUU4RTcwCis6MTA4OEUwMDA3RTU1MEYxQTdEMEMwOEM3RDU3MEU2OEQyNTNFQjQyMTQ0Cis6MTA4OEYwMDBGREM3NkQ2OEY2ODRDMTdBQzdBNUYzRjk5MURGNTA2RkEzCis6MTA4OTAwMDA4Q0ZENDU1QzJDRUFFRDg4NjhBRTRGQjQ1NkUzMkZFNDRECis6MTA4OTEwMDAyMzdCMTRFNzIzRkJBRDAxRjlGQjVFNzQyQThERDNFNEJFCis6MTA4OTIwMDAwOUY5MEJFN0Q5NjNGNDJFNzYwRDYxMTc4MTJGQkY4NzA0Cis6MTA4OTMwMDA3Q0I5RERDNjJBOTBDRjlGMTk2MTU5ODhGMkE0QkQ2NzIyCis6MTA4OTQwMDBCN0UwN0I3REZCNTRDMzlBMkUyM0FFRkIyRkEwRkYwMTIzCis6MTA4OTUwMDBFRUQyRTRBQkE2NjBGQkREMTVDN0UxMkQ5M0JGMjVCRkNBCis6MTA4OTYwMDBGQTYyQkI0NEZFN0M0MjNCRDdEN0MxN0MzMTYyNjhCRTExCis6MTA4OTcwMDA3ODAxRjE3QTNEQkVEMEM3MDExQTVGRUNCODFFNUY3NDcyCis6MTA4OTgwMDBGRjYzN0NGMThCNjhFMURGMEVDQjE3REY0NkUyRkExRjU1Cis6MTA4OTkwMDBFQjI4NDk2NDdGQzc4RjY5MTM3QzMwRENGRDI5NTZBRTE0Cis6MTA4OUEwMDBEN0Y0RDdEQjA1M0U3NzlCOUFFRkNDNDFCOUJGQ0JFMDNDCis6MTA4OUIwMDA0MEI5MDZBQUE3Q0MwNUZCQjIzQjlDM0ZDNzk0RDU2OTNBCis6MTA4OUMwMDBEOERGQUU3MDNEQjJCRERENEM3QTY0QkJDREVEMjY3QjA5Cis6MTA4OUQwMDA5RDY0NjFFODI3MzBDNURERjc3REQ0N0ZDOTE2NzU1RERDCis6MTA4OUUwMDAxMERGM0UyRUY0NDA4QkQxMzdFNTczRjQ3RjBGNzBGQTIxCis6MTA4OUYwMDA0RUJFMkI1NzM2QzFCODExMEY3MEI5Q0UzRjY3REEyODdCCis6MTA4QTAwMDBDMzNDRDUzMTQ1QkU2ODE4REYxN0NERUQ2MkREMTkxOEJFCis6MTA4QTEwMDAwNTdDNTk3QkM2NDRGQUVEQURDRTIzRTU0RTFCRjkzN0Y0Cis6MTA4QTIwMDA0RUU0QUY0OTdCOEU5NDE3NjdFMzc4Q0U0N0REQTJENTNECis6MTA4QTMwMDBGQTUzNzA0RDMxNjQ3NjhFMjUwMTdFNURDMjRFNEM2MUQ1Cis6MTA4QTQwMDA1QzBGQjk5MDNGNzIwMjdERTYzNDUyM0NBNkYxNDEzNThECis6MTA4QTUwMDA2MzU5NjgyN0U2RjYzOUNBOTA4REFBMkE0MkU5NUJFRDg4Cis6MTA4QTYwMDA5QjQ5NzFERkZDRTNDRUIyMDg1OEQ3N0M5N0VFQkVBMERECis6MTA4QTcwMDA3RkI1OEVGRUUwMDdGRjAxRTU2NEQ1RTZERTRFMUJGMjEyCis6MTA4QTgwMDBBRENBRUQ2OThCNjk3NTE2Rjc3QjU2QTdBMUZGQUZDOTEzCis6MTA4QTkwMDAxMUZEMDA0RjJEQkZDRjc4Nzk1RDkwMUQ1NzYzRjgzQUQ3Cis6MTA4QUEwMDA5Rjc1Mjg3NERGRDM2N0YyREUwMjk3RkUzN0UzQ0ZCNUY4Cis6MTA4QUIwMDAwODdCRjNBRDkwRTNEQ0M3REU1ODhDRkM5QkI3RENCOUQ4Cis6MTA4QUMwMDAwRkYxQkYyODRFQTZFQkZGQzk3Qzk2MzRBNDhGNDMyMTNCCis6MTA4QUQwMDBGRkFCQzVBODk2N0MyRTA1QzYzMUM1OTU2MTgzRkI3QjhGCis6MTA4QUUwMDBFMkMzRjNGMEZERDUzMUVFNkI0ODI3QTZGOEJCRjFCOTMwCis6MTA4QUYwMDA0OTg1Qjk3OTI4NTdCNjA5NERCMTY4N0YzNEI4MDFBRUI4Cis6MTA4QjAwMDA4QTREQjYwMDFDMUE1Q0U3ODVGRUE5OEU1OTcyMERGMURDCis6MTA4QjEwMDA4MENGQTE1RTY5M0I3NUQ2ODJDRjZCNzQ2RkU5QjhDNDE0Cis6MTA4QjIwMDBFOTFENDQ3RkE0Nzc4MEZFRDI3REQ4RDdGMDYwMTFBREQ3Cis6MTA4QjMwMDBENkZGRTdFOUVGMUI4OUY0MTg5NkZFMThGNzQ3RkU4RjdBCis6MTA4QjQwMDBFODNGMkE2NjA4RkE4MzNGOTU4RUQ3MzU3RkFBQzUwNDg5Cis6MTA4QjUwMDA3RTc1NzZBMEFGRDFCRERBNUU0NEUzMUMyNjU4MTlGQUMzCis6MTA4QjYwMDA0RjlEMTA1N0EyMUNCQUEzRDFCOTYxM0JFREZDNURGRDJFCis6MTA4QjcwMDBCRjNGM0IwQTVDNDAzNjI5MjY4NkNCOTNDOTNGMDZGREEyCis6MTA4QjgwMDA4RDA5M0U4OUZDQkUwOTIwRjBGNzkwOUYzNTkyRjQ5RDM3Cis6MTA4QjkwMDA0M0UwODc5RDk1QTRCMzE5REMwNUJGOTY4MkZFOUYyRjA1Cis6MTA4QkEwMDAxNkU1NjA4MkI5RDI4N0ZDQkVDMzNBM0QwNUZEQjc1Q0NECis6MTA4QkIwMDBFQkI0MzRFNEE3MzczMzFFM0I4NDI2RTdDREU0RTUzQjMyCis6MTA4QkMwMDA1RjUxMDM3RThFQTZEN0Y2ODk2OUI1Rjc5N0M3NzBGQTBECis6MTA4QkQwMDBERjBFNkExNkZEM0Q3NDBEODNFMUQwRjQzNzkyMDVFMTk2Cis6MTA4QkUwMDA5MDdDRDU4NjZCNTZEMkM3RUQ3RDgwQUZEQjExMEVDMDcxCis6MTA4QkYwMDA2Qjk3QzQ1QTUxN0YxNzE5OUM3MTI1RTg4RkM1RkIxNEQ4Cis6MTA4QzAwMDBFRUQ3N0QzRDRBMDVCRUE5NkM3RkY3MzhDMjVCNjlCMURFCis6MTA4QzEwMDBGOTMwREZDMjFDQzZGMzdENDFGOTEyQkQ5RkFCRjkyNUM3Cis6MTA4QzIwMDA5QURGQUZGOTJENUE3Qzg5RkUwRERFQ0ZDN0VCMDBCRjZFCis6MTA4QzMwMDBERDBDMDBBMkZERjE1OUJDMERGMEZFRTcyRkFCOTk0RTAzCis6MTA4QzQwMDAyMUFGMEFBQ0EzNTJBQzYzMzZFQjI1QjhEOEI3RDdBRTg4Cis6MTA4QzUwMDA0RDAzRkFDQzEyRjhBOEVDODZCODMwMDdFRjMzNzYxNzNDCis6MTA4QzYwMDBFMEUxMkU4NUM3OEI3NzM5MjAzRTBDRTJBM0Q5OTM0M0YwCis6MTA4QzcwMDBGQkY4OUI5RTEwOThFNzdBRTNGNUZBN0ZBQUM4MTdGQ0U5Cis6MTA4QzgwMDBCMzcxQTZENjc2ODMxRDNBMEQwQzcwQjA5RUM3MzQ4NTlECis6MTA4QzkwMDBBMzY1OEY4MkYxODAzQkQzODBGQzU4MjdFQzFBODRDOUVFCis6MTA4Q0EwMDA0M0RCMjMyMUFGODU4NkJFMUMwN0UwQjc2QkNGMzc2NDVCCis6MTA4Q0IwMDBGRkY2RUVGOUU2MjNGNEU3QTY3Q0ExMzAzMzNDNUZGODNCCis6MTA4Q0MwMDA0NTdFMTRFQTA3RTYwQTlEQjdFRThGQUQ1NkM2QUYxMzkwCis6MTA4Q0QwMDBGRkQ0OEFCNUVGQUZDNzhDMThDMjY3QTFGNjM3RTc5RkZDCis6MTA4Q0UwMDA1RjhGRjM3RDc5NDZFMUJDMkRERTVGNkU3MkE3REI2RDkxCis6MTA4Q0YwMDBEOEYyNzg3RkJGQzRGRDFERURGRTdFMjNDMDBERDczN0FGCis6MTA4RDAwMDBDNTY4NzE3RkFGNDJGOTE5Rjg5OTgzRTg3QzE3QzZGQkYzCis6MTA4RDEwMDBCOTAxQkFERTc1QUVFMjBCMjU2NzMwN0RGMEY3RkYyM0FGCis6MTA4RDIwMDBERUQ3RTJGQ0I3NDRGQ0MwRjY5RDMwQTkwMEQ3OENENjU0Cis6MTA4RDMwMDA0NzE0RjRBMzY3MjRDOUNDMTlGNERFM0I1NDJCNzMwNjAzCis6MTA4RDQwMDBDNUZCNkZDNEU4RkM5MDdEQUZBRDlGMDU3NkE0QUU0NzMwCis6MTA4RDUwMDA3Njg0QTFCQ0I2NkYzRjk0ODNGRDVFRDk2MTFEODI4RjdFCis6MTA4RDYwMDBGNEY4OUREMUZFODg4MkZDOUYxMENCRTVFNjdBRUYyRkM4Cis6MTA4RDcwMDAxQzA3N0M3MjJCRDI5RDkxMUY3N0IxNDAyMjM5RDJEMzMwCis6MTA4RDgwMDA3N0VGOUU5RkM3RjY2NTBGOEZFRkUxRThBRkE3QzM2RjQwCis6MTA4RDkwMDBDRTE3NDcyMTVFQUU0NzBGM0RERjc2QzIzQTNEQjAzRTZCCis6MTA4REEwMDAxRkFDRDMwM0ZFRDZERTdBM0JGNURGQUU0RkEyQkVDNkM0Cis6MTA4REIwMDBBRjc1MURCRjhDNDU3RjRERTNEM0IyNThDRTM3NTM3Njg4Cis6MTA4REMwMDBBRjhGNjVCNjAwQkQzNDdDNUQxNDc0QUI2NjhFRjlCM0FECis6MTA4REQwMDBFMENGNUQ5MjIzODJGNDg0ODdGNTI2MTUwNEVDNTVGNUU3Cis6MTA4REUwMDBCMTcyRjIzMzM0N0I1NTJENjcxQjUxRkY2QUY2MEFEM0ZCCis6MTA4REYwMDBDMkE4Q0ZGNEY2Njk3RTdBOTExMUQ1QUFERTJFQzEwMkZGCis6MTA4RTAwMDA4REM4QkZENTBCNDNBRjU3RjQzNDJCMTFENDMzMTA5RDBECis6MTA4RTEwMDAyNDQ5RTA0M0Y4RDUxQTNDMUYzMjE3QzFBQkE3QTcwNjc3Cis6MTA4RTIwMDA5RjFFMkVDRDlGQUUxNjc0ODM3NTk2RTFEMkU3QUE0NTlDCis6MTA4RTMwMDBCNDhFNDE3NjU1QUNGNzQ2RURBOTM5MzYzNENFQkE3MkM4Cis6MTA4RTQwMDBBRUY0RkQ5QzIxRjg3NTM4QkVENURGRDdGNDQwMzlCRUFECis6MTA4RTUwMDAyMDk3NUEwRkZBMTEwOUIxMDk0NEFGRjJBQjI2RTYwNDg0Cis6MTA4RTYwMDA3QkMxNDY4NkIxQ0Y4MkYzRUZBRjY0OTJCRDdCNTREODBECis6MTA4RTcwMDBERkUxRjhBNkY2QUE4MUI5NjMwM0ZDNjM2QzdCQ0U4QUI2Cis6MTA4RTgwMDBGQ0IzNUI2OUI2NjJERUYxMzZEQjlDQzYyOEMwNTNFOUYxCis6MTA4RTkwMDAxRjhCRTdBMTVGNTdENzY3NjA5ODlBMkE2QkJGQjQwRjAzCis6MTA4RUEwMDBFM0Y2QkFFM0NDODFGQUIwQjhCREFCMDRGOUVENkRBNTM5Cis6MTA4RUIwMDA1N0E2MzhGQTRCQzY5RTBCRjIwRkRCREExQkFERTgzRjI0Cis6MTA4RUMwMDBCNUM1QzkxNEE3RUY4RkU2RkNBOERENkY4OUU1RkNENzBGCis6MTA4RUQwMDA3NkU2RjIyQ0U3MTBGNzNGMTNGNzRCNEZFNTFBRDE0ODJGCis6MTA4RUUwMDBGNkM3NDc1MEJFQTFGQzY5MDNBREJGNTRCMjU3NTVBMkE3Cis6MTA4RUYwMDBGRjcxODc5MUZDN0E4ODVCRkVGMDdEQ0MzN0I1OTlCNzFFCis6MTA4RjAwMDA2M0FBQkVBQ0VEODc4RkQ4ODExMDJERkZFN0IzMDYzMzdGCis6MTA4RjEwMDBFNjBGRTY0ODhFOTc2MTVDQjlFQUVGQzI3RUY5QkM1NDcxCis6MTA4RjIwMDBEQTg3OTlGNDdGNjVGMjVGRkQ3NzRCOTRGNzI4MDc3NjJGCis6MTA4RjMwMDBDMTdFRjkzREE5NUVDQzNGRUM5MTc4REZEM0MxRjNGRTUxCis6MTA4RjQwMDBDQ0VFODk5RDA1RUZGOUEwMzI3NkMyM0FFMjI5QUQ3RkQ5Cis6MTA4RjUwMDA0QkVFM0EyNjE4MzgyODlFN0E2QzE3REYzRjdBQUM0Q0Q1Cis6MTA4RjYwMDBBMkZEQTMzMjdCMEFGMzA0RjE1NUY5RDM0MENGM0NFMEQ0Cis6MTA4RjcwMDBDN0Y2QzQ2MkU0REZBQTBBOTk3OTgzRjg3QUJFQ0JDQTNECis6MTA4RjgwMDBCQzQxRTNGNzg3NzE3OEZDOTJEOThCRjkxMjRENUU2NzhCCis6MTA4RjkwMDAwQUZFQUU1RTE4MUIzMjdFMEVFMzdFRTI0MkQ2NkM0NEMxCis6MTA4RkEwMDBGOUFFMTNGMEQ0MTUwMTNDRjBGQzRDMTFBN0RFRUQ0RUU4Cis6MTA4RkIwMDAwOTc5NkYyNTY2NDE2MDY4NTZEQzY4QjI4RkIzQkZFQ0YzCis6MTA4RkMwMDAyM0IzM0E0NzNFNzk2QzMxQkM4NzY1NzBGOUQwRTRBQzg1Cis6MTA4RkQwMDA0Q0FFNjkyMjNFNDg5MjFDMTgxRkNGOTdDMEFCOTQ1MUVCCis6MTA4RkUwMDBERjg1Q0FEMUVDQzlBMUZEMzk0RUJEN0UwODk1NzdCRDlDCis6MTA4RkYwMDAxRUQ3RTQ3QzdFODc2Q0M0Mzg3QTdFOTFFNDYwNDNFOEI3Cis6MTA5MDAwMDAwM0JEM0ZBREQ3MDM5MzBDOEU3NzMwQUU5RTdCRDU0OTIxCis6MTA5MDEwMDBGQzM1NDgwRjlDQUNGODg3RjRDMDVCMjA1QjkzNDE1RTQ1Cis6MTA5MDIwMDA3RkE0RTk4MzlCRDg0REE4MEZDQUU0MkRFQjkxM0ZGQUFBCis6MTA5MDMwMDBDMUFFOTk4N0UwMEZDRDJFNjhGMTc2MzlDODI3RjIwM0NCCis6MTA5MDQwMDAzQkNGRjcyNUNBQUU4MjlDQzYwNkUyRUQwMUZEMDA3RTRECis6MTA5MDUwMDA4MzYzMDg3RkU2NTdCMTY5MjFGQjQ5MDNGQTIyQzg2RjkxCis6MTA5MDYwMDAzMDE2RkNGMzdFNDMxOUY4OEJBNjVDODQ2RjI0RjNFNDdFCis6MTA5MDcwMDA5MTlFQTJGQzFFQjQzRUNBQjMyNTVEQTIzQzRBMURDNDBCCis6MTA5MDgwMDBGMTE0Q0ZCMzVGMTI1Q0E4RDdBNDk4MDBERkVCRkQwOTAxCis6MTA5MDkwMDAyRDRGM0I0MkU0MDlGNEZDMzA5MEI3OUI2N0Y0MjI5RkNDCis6MTA5MEEwMDA2OUZDNTA2RUU3NzI1MTNFNEZBNkZDQjk5RTNGQjRGNzgzCis6MTA5MEIwMDA1RDhGMkY3QzEyRjA4NUY0NzdGODQyQzhEMzhERjJDNTBFCis6MTA5MEMwMDAyMThEMUZEMjU5RkE4REYwODNDNjA3MUE1RkU4RURDNUNFCis6MTA5MEQwMDA0MTVEREU2NTM4N0I3MUYyM0FGNkUyOUQwQzIzRTk2NTZECis6MTA5MEUwMDBCRDlERDBFQ0MyODEzOEFFN0ZDN0M3RjI3RDhBOTk5OTA5Cis6MTA5MEYwMDBGMzZERTg1NzhDNDA3RDgwRkU5RUIwMzcwMzc5QTMwRDU5Cis6MTA5MTAwMDA5QzBGREVFOTVCQUE0ODY4Mzc1MDBGQTQwNkUxNURFNEQ2Cis6MTA5MTEwMDA0RDM1QkVBQjdEOUE1MUZFQjA1MkU4OUY4QjFEM0M5RkYyCis6MTA5MTIwMDA1NjU3MkE3QjJERjA2NzQ5RkI3M0VCNzlERjQ4RjlCNjc4Cis6MTA5MTMwMDAyMkE1NEJCMUMwQkNCMzFEOTIwM0YzMzU0RTkxN0Y5QjZBCis6MTA5MTQwMDA3NUQ1RTQ1NTI5M0YzRkY0N0U3QTk1RTAxQjhDNzM3MDBBCis6MTA5MTUwMDBGQzZDQTdFNDg1MTA3NDkwMUVBQUJBQ0FFREJFNUUxRjBGCis6MTA5MTYwMDA1NTg5RkRGMjJBREQ3RUI5Mjk0RUQwRjU2Njc2RjNCRjJBCis6MTA5MTcwMDBEMkVFQzdDNzI1NzBCOTE5ODY4RURBRjMxQTFEMzVGQUYzCis6MTA5MTgwMDA0REMwQjEyODNGRkJCRTM2QTkxMURDM0Y0NkZBQ0RCODMxCis6MTA5MTkwMDBBQUQwM0NBM0UyNDJGRDk2MkZDRkU3RkUyN0M1NzQ2MjFBCis6MTA5MUEwMDA3QzVERkIyNTkzN0JGQ0YwRjA1RkNGMkZCRDU5RjNDM0IzCis6MTA5MUIwMDA4NTVGQUVCRDc3MjZDODc4MEEzQTg2M0FGQkExQkRFNzNGCis6MTA5MUMwMDBCQUY2NDIzQ0FGQTdEM0U0QjhEMDc4NDJBMzg3QTY0NzBCCis6MTA5MUQwMDAwN0UxNUJFOEQ5RTFFODc1M0QzREFCRTlCMzdGQjU5RUJBCis6MTA5MUUwMDBENUU2RDdFQzgwRjY1RUJERkUxRDJFM0VEM0Y0RTk1M0U2Cis6MTA5MUYwMDAxQjBEOTQxN0I5NERDNEMxQjc4OTNDRUI4MzQyQ0U5NzgwCis6MTA5MjAwMDAwQjdEREJGRjE3OEIwMUZEQUM2RDlEREMxRjcxOThFREI1Cis6MTA5MjEwMDA4N0QwNkYwOEU0RjMzODVEOUY4QzYwMUVEQzJGNjc0QUFGCis6MTA5MjIwMDBBRjg1RjYyRjhCODFBNEI4N0Y5OUNDRjcyRkI3MjgzRTU2Cis6MTA5MjMwMDAxN0U5Njk4N0MyMUE0MDVFRkUyQUYyMTY0RkVFRjUyQzM2Cis6MTA5MjQwMDA0NjNERkRFNEU5MzEwNkRBNDc1NzdDQkQxODE3NEZDQUExCis6MTA5MjUwMDA1NTY4M0YyOERBQUM1MkJFRjc2Mjg3RDk4RUNGRjVFRjVBCis6MTA5MjYwMDBGRTVFOTcxMUU3RjkwQjczNjBBOEY2NzY4Nzc5NjAzRjg5Cis6MTA5MjcwMDAwNkY1NDI5OURDMjM2MzVFQkVERjBGQkUzODhDOUZCNkQ1Cis6MTA5MjgwMDBEMDU3ODJGMUNFNkRBQ0I3MTFFM0VBNDJBNEUzMTBGNEZCCis6MTA5MjkwMDA3QjU1Njc1RkY0NzlGQjkyMEVFRTI3OTU0NEYwQkE5RkY5Cis6MTA5MkEwMDBFOTgwNDY3Q0VGRjQzNjEzRjk4NUQ3Q0JEQjE3N0RDOTBGCis6MTA5MkIwMDBDODVGMUE5NEFGNkZFMzdBMDYwNjExOUZEQzY4REVCRUMyCis6MTA5MkMwMDAxMDdEM0RFMEUzOUZFOEY0MEUxQjI2N0ZCRkNEQzRGNzgxCis6MTA5MkQwMDA3M0ZDNDc4QzBDRkQ1RTc2MkU2RUM4QkNDQkY1RjJGOEE1Cis6MTA5MkUwMDBCQjNCQzM5RDZBMjRFRUJCNzFGRjdDNzc2N0IyNTNDRDU1Cis6MTA5MkYwMDAxOTdFN0M0RTlGQkYxOEYzOTVEQkI2Q0M1NTI4NEUxNEQzCis6MTA5MzAwMDBGOUNGNDFGQjIyM0FGQ0VEOTA1ODkzMTVGMzY5RUQ4RUFECis6MTA5MzEwMDA1MjhDM0Y4NkRCRTcyOEY2M0I2OURFMUJDNTFCNjNDRDFECis6MTA5MzIwMDA5Q0NFQTI3RUU5NzYyMTYzREJDRTg2M0I5MUJGQjc5REMyCis6MTA5MzMwMDA0RDc2MjIzQ0JCMDU3RjZBRkNCRUZCQ0NFNTcwREFDRkU0Cis6MTA5MzQwMDAzNDM5NTVEQzA3RjY0NzVCMUMyRjEzQkY3MjNFNkYxOThCCis6MTA5MzUwMDAzMUM2OEJGQkFEREI4NTNDNkMwQkY3MUZDQzhBMEJERTdCCis6MTA5MzYwMDBDRkUwRkIxNzlERjU5RUFBMzNFOUI0REYyRDYxQkU1MTE2Cis6MTA5MzcwMDBEQjI3RjY4MEJDNTA1RDRFMEMyMzdFMzJCMjE2ODZFRkEyCis6MTA5MzgwMDA2RDc0QjI5RjYzM0I3RDlBMUE4NUY4QkUxQ0E3RUQ0N0FBCis6MTA5MzkwMDBBQTUxOTQ2N0Y4RjY0QTgxNkJGQzYwQkNFRkE4Nzc1MTNDCis6MTA5M0EwMDAzRDQ5NkJGREMyMkEwNTYwN0NCM0RFNEQ2RDVCRkQ3MkVECis6MTA5M0IwMDA2QUY3RDRBRkE2RkI2QjBGNDUzRThFNzZCRkNFQjlBMDQxCis6MTA5M0MwMDA0QTA5RDIxQjlGQzVGM0ZDNTI2RUQ2RTkxMkU0NzNGNjJDCis6MTA5M0QwMDAwRDYzMThFRjRDN0ZBMjRGNDYzRDcxRkI1NTU4NDc0ODJGCis6MTA5M0UwMDBERDg4NzIxOUYxNENGOUNCQjQ0MDNGNTU1QTEyODY3Qzk2Cis6MTA5M0YwMDA3OUZCNTVFODA3OEQ5N0UyQTMzOTFEOUE5NEE2NUIwQTdECis6MTA5NDAwMDA0ODVBODgxRkMyRTI5RDE3RTNFMEZBMEZFRDJFN0Y1Q0Y5Cis6MTA5NDEwMDAzQ0YyNDFGNUJFMEI4Q0ZBOTdGMUZBMEVFOTZFRjkwMkI3Cis6MTA5NDIwMDA4Q0NCRjMxNTUxREUzODBGRjNDNkI5MzRFRDYyQzRERkNGCis6MTA5NDMwMDBDNDJFMTNFRDdCNkJGOURCNUMzMUFGRjNBQkQwM0M3MjI4Cis6MTA5NDQwMDA5RUM4REJCRUM5RkEyODlGOUM2RjgxQzBDQTgwNzA3MTFDCis6MTA5NDUwMDBGQTM5QTVGOTQ5MTJFNkZCRTI0RDBFQUM1Nzk4OThFNkE5Cis6MTA5NDYwMDBDQUMzN0M2QjU3M0NBM0ZDNjk1NzU3QzI0ODE1RjBFMDUwCis6MTA5NDcwMDA1NDc4NUVEN0E5RTU3NUQ5REZDRkVCNzY3RjFBRTkyMTVECis6MTA5NDgwMDA3RDA1N0UwQUVBQTdFRUEzOTEwRTFGRURGRjU5QzhGRkU2Cis6MTA5NDkwMDBEQjgxMEY2MjdENDMzOEFGMTc2MEYzRTY1MTFFRkQ3NjI2Cis6MTA5NEEwMDAwQjVGMDdEODlGRjg3OENBRkJGOUY2MUQ4NkU3N0U3QjJECis6MTA5NEIwMDA5OUYxN0RDNERFOTNCNDNGNUQ2MkM4NENFQzAzMzhGNzhDCis6MTA5NEMwMDA0OTYzQTNCMDdERjFEM0M4NkM2QThGNDY5RTQ3RkM3NDk0Cis6MTA5NEQwMDAxQUFDMkFCRUY3QzM3QTU2ODU3NTY3Q0VGNzZEQjQ5RjZFCis6MTA5NEUwMDAzMUZEN0Q5QjgyRURFMUZBM0VBQTQ3N0JCRkZFMUNCNUI0Cis6MTA5NEYwMDA0N0VBRkRENDFFQURCRjRBRUQzQjcwMURGOUU3MTAzQ0I1Cis6MTA5NTAwMDA4RjZERUVFMjA4N0E2RUM3QTIwODEzQzJEQjE5QzlCNkU2Cis6MTA5NTEwMDA2OEVGQzE3QTMzNUZCOEFGMTU5M0Y5RUZDNTdGQkVDRTYwCis6MTA5NTIwMDA3MjEzRDgzQkIzN0JCQzM0ODFCMTEzRjE5RkNGNTRBMEVECis6MTA5NTMwMDA3RjY4QzZBODdGRkYwQkRDRkZERDRGMkVBQ0IzMDA1QzVECis6MTA5NTQwMDBGMzhFREE1QTdCQTBGRkU5NEYyRUFFQjNBMTlFM0QxNEY1Cis6MTA5NTUwMDAwRUNBMEVGNTQ2RkY0MTkwNzQ5Njg3MzYzRDk5NzEwNTA3Cis6MTA5NTYwMDAzQjE5RkFCMUEyRUZFOTlGNTkwQTI0NUY1MEQyOTdDNTdGCis6MTA5NTcwMDA4MEI1QTZGQ0M0M0ZEMzAyNzg1QzYwNzVGRjFCRjY0RDM2Cis6MTA5NTgwMDA5RTk3NjY5NkRFODQ3REU2QzE3QTJFQkY2NEE0Rjg5RTFGCis6MTA5NTkwMDA4RDk0RTJCMDdFNjU5OUREN0QyQzNFQzg3RTNCQTUzRjczCis6MTA5NUEwMDBEMkZFNTE4MTUzNjJEMTcxNDQ1N0RBQ0Y2MkY2NTNCMTgyCis6MTA5NUIwMDBDMUYyQjZDQzVFNzYwQ0U5NzE0NzNDREZCRjlBMzg0REZDCis6MTA5NUMwMDA3MjA2RDc0OUU4Qzc0RDNDQTM5NjIyOUQwQUNFOTUzNzJGCis6MTA5NUQwMDA2MTNCQkIyMjlBRkFBRTg1OTM5QTUwOUU0QjZEQzMzRDc4Cis6MTA5NUUwMDA1RjQyQ0YyRjg4MzcxMjdGMTYyQjUyNDg3RDg4N0U1Q0QyCis6MTA5NUYwMDAxRTMwMTNGQUM3RkUwM0UxOTQxNzk4NzhDQ0REODg3NTA2Cis6MTA5NjAwMDBBMzY1NDlBOUI5QjJEMDc5OENGQUQxMUI3MTFGNkQ2MkRCCis6MTA5NjEwMDBFNTg3QTVCMTI4M0YzNkM5ODFFNkExODBGNTM1QzVDNkU1Cis6MTA5NjIwMDA2MUZEMjMxNjQ0RTFCQTlFMkJDMUZBOUQ4OUFBRTQ0MDRDCis6MTA5NjMwMDBCNDE1MzlCQjVBRjFGOTIyNDc4NEEzMDhGREYxNjM2QUQ2Cis6MTA5NjQwMDAyOTlBOUNBM0NBODRDM0Y5MzA2RTQ2QkFFQ0IwQzA0NEQwCis6MTA5NjUwMDA0NzdENzc0Q0JEMDBGREEyOEMyOENBRTMxNjI5QUJBRjJECis6MTA5NjYwMDAxQ0E2N0U4NEEzNDFDNTc1NkNGQzc5MkRDRDYzMjY3QjM5Cis6MTA5NjcwMDBCRTYzNTZDOTdGMjBGRjE0QkJBMjI4RTc1NzZBM0IzNTVCCis6MTA5NjgwMDAzN0I4MkUwQ0Q2NEQ3MDE3RDk2NTZGOTg4NEZDRkQ4M0MyCis6MTA5NjkwMDA1MjNCRjQ3NzhDOTIxOENBQ0Y1MTVGRTY5RkU5N0U3N0YwCis6MTA5NkEwMDBCODFBMDY4MEVFMzBEOTRCNzFCRTFEMjZDOUJFOTZGQTk3Cis6MTA5NkIwMDBBRTEyMUNFRjE5NjM1NDMxNEY1NDFFRjc0NUM4RkMzM0VBCis6MTA5NkMwMDA0QUE1Mjk2NzEwRkVFQ0E4MDk3OEFENjJFNEE1OTBGQkQ1Cis6MTA5NkQwMDAzRDhCQUM2NDI3MkFERkNGMjY3RkE4Njc1MTBBRDk4QjQwCis6MTA5NkUwMDBDQUY3QTcxNTYzREI2M0UwN0U3QUU1RkI5NTE1NzRERkE3Cis6MTA5NkYwMDBDMEUzREZDQUM1REY3MThBM0VDNUJCOTU4QjU3NTFCRjNBCis6MTA5NzAwMDA0QjRBRkM3NzdDREY5NUVDQTg1Q0NDQTNDRDRDRkY3QTcwCis6MTA5NzEwMDBBRTEyRUNGRkFEQ0UyNEY5Q0YxNTc5QkMyMjQzRTZGQUE4Cis6MTA5NzIwMDA2OTAwRkZBMzA3RjgzRTQ0NjVCNjE0NTIzNzM3MkJGRjk0Cis6MTA5NzMwMDA1NDQ4M0RBODZCREExNzIxRkRCOUE1OTc0MkVBNDNFN0UzCis6MTA5NzQwMDA1NTdFMUREMjVGMzA0RkFBMEExRTVGN0EyMDlGRUM2QkI4Cis6MTA5NzUwMDBCRUE4NUZEMkYyNEI0NTgyODVERUE5Q0ZBODJBMDVCOTAzCis6MTA5NzYwMDAzQzAwRUQwM0EwMUY4QTdBNDVERTU1RTE3MTc1MDZGQ0M5Cis6MTA5NzcwMDA0MzNENTg2QUQzRTU3Nzk5NEFGQkQ5MTVERDdDREZCQUJBCis6MTA5NzgwMDAzQ0NFNzgzQUQ4M0U1NEM4NEY3MDdGNDFCN0ZFREMwM0Q4Cis6MTA5NzkwMDA0NkIyOTNCOUQxMzJFNUFCMzRGODJBNDY4NjNFQUZGOUVBCis6MTA5N0EwMDA1RjE1MDJDRTFEMDY3NzUzMENFNUM3OUNCREU4N0Y2OEE4Cis6MTA5N0IwMDBGMDZCRUZEN0UwQUU5MEVGMjlBNUVEQkZFQkMwQUY4NzIwCis6MTA5N0MwMDAxNzAwMjVGRjREMEZDNzgxNzgxMTg3ODBCRjQxRkU1OUQzCis6MTA5N0QwMDAzN0FGNEI4MzVGREM1MDc2NUJGM0NGMkI0MTRGNDUwN0IwCis6MTA5N0UwMDBFQjI5OUIxNDg3RjU3NkMzRTkyOTZEREVFMUZDMzA2RDJBCis6MTA5N0YwMDBERTY1NzYxNzNERUZEQ0ZBRDlEMTQyMzlBODlGN0EyQTg3Cis6MTA5ODAwMDAzNjI2QjhGRkRBNjdFQjQzRUVDNzlGQUE4QTBFRUU2RkUzCis6MTA5ODEwMDBGQUFDMEFFRjRGNTdENDQ2MUJGMEUzNDEyNjM5M0NDODU3Cis6MTA5ODIwMDA5RjNEQUE4MkZCQ0YyNUM3OUM0REQ4OTY5RDc0NjM5OTE2Cis6MTA5ODMwMDAyOTlCNzFDNkQzODRFREQ0RjNERTFFMzNBQ0VCOEUwQ0MyCis6MTA5ODQwMDA1OUM1Qjg1REYzM0ZGNEYwOUExMzc4MUM3MkYwQUE2QTE4Cis6MTA5ODUwMDBDNUZERDMxRDFFRDU4QUZFRkI4RTI3NTQyQkZBMUYzQjU4Cis6MTA5ODYwMDA5Q0FDMDJFMzMxNjc5QTYxMzVGQUYzQ0UyQzVFNjc3OERGCis6MTA5ODcwMDA1NUU4RTE2RkUyRjlGMzVBN0I1QTcxN0Y4MzdBMTFFQjc1Cis6MTA5ODgwMDBDMkQxMjdBOEZEREE0Rjc1RTAwN0QxQUZDQTFFRUM1NzQ5Cis6MTA5ODkwMDAxRDU0QkMzNjdDREZDMTI3QkNCNkUwN0RDMjFCRjVBQkQ2Cis6MTA5OEEwMDBGRThDMzYzQTFFRjk2QzRFODg3Qzk2NThFRUFFMEE5NkJGCis6MTA5OEIwMDBFRjMyRkI5MjkwRkI5RkM2QTkwNEZGOENBNDg3NDNDNjlFCis6MTA5OEMwMDBEREExM0UxMkQyMDc3RjMxMDNGRDkxNDYxM0EzM0E1OTIxCis6MTA5OEQwMDA4RjgxRDdDOUVBRjFGOEE4QzBBM0MzNjY0NzM3ODYxOUI0Cis6MTA5OEUwMDBFMzU0QUE2QkQzOEY3Mzk0NzBGQ0U5QUZBNzI3RjBCODQ5Cis6MTA5OEYwMDA2ODIzQzgwQ0I2RjcyNDcwRjhGNDc1QjFGQTNFQzQ3QzNFCis6MTA5OTAwMDAwQjcxM0U5ODM5MDlGOURDNjEzNTVDMDE1Nzk3MzkxM0MxCis6MTA5OTEwMDA5MkVFQTQ3QUQ5M0NDM0EzNjlEMEFGNEVDOEUyRkRBOUE4Cis6MTA5OTIwMDA4NjlENTgxRjdCNzc0MjM2RUZERjZBQzgzMzgyMUZGMDZGCis6MTA5OTMwMDAyQjM2RkU0RUFDMDdBRjBEMTM3NTlEMEYyNEQyN0U5OENCCis6MTA5OTQwMDAxNkRGMjg4NjUzMkYyRUM2Mzg3MzhGOTE2MUZFRkUxOUJECis6MTA5OTUwMDAxM0Q4QkREQ0MwQkVCOUQ1Q0NFMzUyQUI4OUQ3NkQzRkJGCis6MTA5OTYwMDA5NTdBRjQyOUQ0MUI2QTk4N0I3QTAyRjk1MUM1MkFFMkM4Cis6MTA5OTcwMDBFRkJDREQ0Mjc1OUQ4RkVEMkU0QjQ0RkFERjkzQzBGM0IzCis6MTA5OTgwMDA1QzU5M0JBNzI2QTE3RUY5MTdCQzdGNTZDMkM0RTFERjE0Cis6MTA5OTkwMDA4Rjc1QkUzOENGRjkxRDU5RTQ3RjY3REQwQ0U4OTUwMjVECis6MTA5OUEwMDBGODg3RjA5OEFFODc0MTk4NDBFNzI1OTgzMzA5RjM2QzIzCis6MTA5OUIwMDA4REQxMjY5QUU3OUUwNENFN0YzN0RBMEVBQUZCOEQzMjMwCis6MTA5OUMwMDBBQ0RFMEVFREZEODJGRTBGRTA3QjA5NUZGRTUxNzM3MDkxCis6MTA5OUQwMDA2M0NFRUUxRjM1NzczQ0VGMjM3RDY1MzlENzhGN0VBQ0E0Cis6MTA5OUUwMDBGRjNCMTFCNEFGQzI0NkZBNjlGRkU1RTM3QkIyMUNFODY2Cis6MTA5OUYwMDA5RjdFMTJDRUYxQjdEMDNCQkFCMTRGQzVGQTBERUY0REY1Cis6MTA5QTAwMDA1ODJGOTE5MUU4QUU0NTNDMkMzMjdCNkYyMUZFQjFBREQxCis6MTA5QTEwMDA4RUMwRjk2RkI0MUU3OEYwN0IyMTgwMDRGQTU0NEZFMUI4Cis6MTA5QTIwMDBGNEQxREUwQjM4QjVBMDNERjg1ODlDMDNEMUUwODBGN0E3Cis6MTA5QTMwMDBGRjAwRjk0MDgzNjcwMDBFNUQ1REI4OTY2N0FFRkJBMzNCCis6MTA5QTQwMDA4MUYyMEM3NTEyRTgzREU4RUYzQ0M5MUMxRTk4RTdBMkI0Cis6MTA5QTUwMDBFNkFGOEJCQzI2NkU0NUUxN0JBNjFDNUU1QTYyODMzNjYwCis6MTA5QTYwMDBCRjZEMjU4RjczN0I5NTkwM0NEN0E0RTM4QTdFQkY4MzFGCis6MTA5QTcwMDBFQ0Q2NTRFRDc5NUQ5RTcxQUE4ODZCQTdFQUUyREExN0ZECis6MTA5QTgwMDAxMzg0OUQ0OTY2QzlDMTc5ODAzNTIyNkVCOERDMzMzQUFBCis6MTA5QTkwMDAwQUZENENENDUxMzJFMEQ1QTRDQTZDNzI0QzQwQ0U1QjY2Cis6MTA5QUEwMDAyMUVFNjc0MTcxQkZDNjY3RTM4RkQ5RUY0N0I4QzcxRjgzCis6MTA5QUIwMDA2M0Y3OTE1REQ3RTYxREM4MkY3MEJDNUMzRUNFRjEzMkQ2Cis6MTA5QUMwMDBBMTJGRTNBN0QzQTA2RkVDMzYzMkFGMUE1ODRGMjEwNzZFCis6MTA5QUQwMDA5NTVEQzZGRkUwNzhCQkM5OEI3NUNCMDUwNzdFOTlFNzFFCis6MTA5QUUwMDA4MzRCRTYyNDAzNTM4M0YwMTBBNjg2MzMzNTQ4MkY1QTYwCis6MTA5QUYwMDAzMzYyNDJGQUIyODY2RjYxQ0ZGM0M0RkMxMThFRTQ5MEY4Cis6MTA5QjAwMDA3OUY2QzQ5NDc3QTM3RENGQjMyRDI3RkIxRTM1Nzk3NEU2Cis6MTA5QjEwMDBDODNDQUM0NzA5QjFGM0IwMjhEQUJGOUMwODQwRkQwQzQzCis6MTA5QjIwMDBGMDVBNzA0QzA5QjFFNzkzRTIzQ0I4NjIzNkY5QTRBMjRFCis6MTA5QjMwMDBCM0ZGQ0QzMkNBNDFFMTk5RDBFQjA3ODZBM0NCNzBGOEQxCis6MTA5QjQwMDA2MzM5M0Y0NUZGRUUxRkM1NUZCNDMzMTQ3RkIxMTVBMUU0Cis6MTA5QjUwMDBGODhCNzc4NUUyMkY3MTYxMjg5RTQ2Qjg0M0YxOTJCMjY3Cis6MTA5QjYwMDA3QzVDQzhGRDlCNTZFNzg2RjQ2RjdFQkMzMDY0N0MyQTIzCis6MTA5QjcwMDAxOEE0RTA3RURBRDMzMzQzQzZERkQyM0MzN0E0M0Y3NjY1Cis6MTA5QjgwMDBDM0EyOTBGMTk5REVBNTIxRjdCMzVFNUQ3MTQzRjQxRTg3Cis6MTA5QjkwMDBERkIyMjY2NDlDOUVERUI3QjZGREFGOTA3OTM1N0E3QjQ2Cis6MTA5QkEwMDBFMERGQkY4MkRFRTZDNDUwN0FBNzBBRkQxQUVERTRGNUQ1Cis6MTA5QkIwMDA2NUZENDZEQkQzMTJFODIzNEMxM0ExNUU4QjZFN0ZGNzY1Cis6MTA5QkMwMDA2QkNDNDM3ODhBNTVBQTlGRjNDQzY0QjQwRkZEODJFQzJBCis6MTA5QkQwMDA5MjUwMEZBNUMwMTQ4NjM0QUE1RkE3RkFCQjFGMUIwQ0I2Cis6MTA5QkUwMDAyMUZCRTI4OTg5RENCRTI3MjZGMjdDQ0RDRjRERkNEQzRGCis6MTA5QkYwMDA1MjBBRjg4RjY0ODcwQzJDMTAyRjAzMUUyMjMxNUVBNkE4Cis6MTA5QzAwMDA3OEZBQzdDRjYwQkNEQzE0REQ5N0ExNDI3QzZDQzZGRTNECis6MTA5QzEwMDA0RDAxN0RCOUM4QUMzNkY2MDEzRTI2Qzg1QzFGODI5RTU4Cis6MTA5QzIwMDA0QzRCODRGOTNGOTE5RTMwNzIzRkMyNjM0NDNGMjJDNTQyCis6MTA5QzMwMDBDMjNDOTFCOTY0M0YyODdGMUNDREUyMjRBQ0M3OEYwQTk3Cis6MTA5QzQwMDBFODY5RjUxQTEwNkJERjhBMkMzQTA3RjUxRTQyODJGRThFCis6MTA5QzUwMDBBRjI1ODZFQ0U4REQ5QTdFNUE5RTQ5RkFFOUIyMkRENDBBCis6MTA5QzYwMDAwRkJCRkM0MDFBNUQzRjcxQUY5OUY2RkI0Rjg4M0E0NDM5Cis6MTA5QzcwMDA2REZERTc4NERFRkE1M0JEODVEQUYzRjVGNjEwM0RCNkU3Cis6MTA5QzgwMDA3Q0UzRkEwOEY0MUY0RjY0NzA3RjUxQkI1RTgyNzg5QkJGCis6MTA5QzkwMDA4OEFEMkNFQzlBQzU4RUY5QUM3QkMwMzg0NzAxQkU1NzE1Cis6MTA5Q0EwMDA3NUY3NDUyRTYyRTQzNzE2RTNCQTZCMzc1RUI5Rjc0REE4Cis6MTA5Q0IwMDBFOEQ3MTlGQzA5REMzRTc4NzhCRENDQzc4Q0ZDQ0ZFQTJDCis6MTA5Q0MwMDA2RjU4ODhGRjM0Mzc5MUM3RTk3M0M1RkMwQkEwQjEwMzA3Cis6MTA5Q0QwMDA5RTE2MDBGRUEzQjE3RDc3NUEzOUYyMjc1Q0E3RjM2OTdGCis6MTA5Q0UwMDBCM0JCMTlENTlGQ0M3MUE3RDIzRUUzNTFFNkY4NzAxN0VDCis6MTA5Q0YwMDA4MEY4OUQ0NDk1RTA5Q0M3NUNCNDVGRkZEMUJEQUIyMjZBCis6MTA5RDAwMDA3MERDQzA3Q0RBM0NDMDI4RTg2RjdDMUNFRDMxMjY2MDNBCis6MTA5RDEwMDBEQzdGMUJBRjZGODBGNzU5RjBCQUVCOUU5NDI3RDEwRTEyCis6MTA5RDIwMDA2OUVGRkI4OEI5MkY3Qzg4RkJERENDNDFGMzZBRjMzMzA0Cis6MTA5RDMwMDAxNjEzQTI5Rjc2MkM1RkY5NjkyQ0JDNkZDRDAxMDNFNTQ5Cis6MTA5RDQwMDAxM0Q2NzQ5ODI5RUVFQTVGRjFEN0FEMkZDMkZERkI1MjBFCis6MTA5RDUwMDBGQTZFNDJCQkZDQzk4QTZGQzYyMDNGRENCRDAxRjQxMDFECis6MTA5RDYwMDBBQ0IxMzBDQUZENzA2MjUwOUM3MkUyODEyQjExNzgxRjM5Cis6MTA5RDcwMDBFQ0VCQTYxN0QxMzg2RTM2NTM3REVGMjcyQjM2OEYwOUMzCis6MTA5RDgwMDBGNjQ3MUY0RDJDQUFDNUU3RDhFNDFCM0I2RjU4RjI3QTYzCis6MTA5RDkwMDA2NjIyRDU2MzA5N0U3QTU4RjBEMzlBRDdDNjkyMUZCNTRBCis6MTA5REEwMDAyNjYyODA5Rjc4N0YxM0FGRUZEMEQ2RjFBMUUwQzcxNTcwCis6MTA5REIwMDBBRjdGNUQxMDdDQ0U3NDA3RjA5MTNBODZFRjZCQTkyMERGCis6MTA5REMwMDA1MzNCN0IyRUU3RTBGRDU3MTQ3NzEzQzJENzc5RjU3NDI4Cis6MTA5REQwMDAyNEY2NzdCRUY3Mzc4MjlGQ0RCQjMxNzg1MTA2M0QwNTFCCis6MTA5REUwMDA4MUZENjVFRERDRTVDMkY2RDgzQ0E0M0JDODU5MzNDRTE1Cis6MTA5REYwMDBCRkU4MzdBRjVERjgxREUyQTc2M0YzQTZFRkUzOTgxQjVBCis6MTA5RTAwMDAzQzdGQzk4NDdENzEwODNDODA3REExRjhBMDlGODVGM0NCCis6MTA5RTEwMDA3MzFENDI4RjJBQjg4MzlFODZFNzk5MUMyQUYxQjM5MzVCCis6MTA5RTIwMDAxREMyN0Q5N0M2MkUwM0MzQkE5NTQ4RENCNDA5Q0FCM0Q4Cis6MTA5RTMwMDA0NUNBMDZDRDA4MzkyRDQ5QTA5Rjg1NUU3OTI1RjFFNEY0Cis6MTA5RTQwMDA5RDRERTRFNzg3RkEzREY5NkZBRjA4RjE3NzVDRjA4RjNECis6MTA5RTUwMDBGQzlEOTdEQzhEOTgwN0JBQUVERkUzMzMyQzMxNDVEREVFCis6MTA5RTYwMDBCOEZGMDM4MUIwNTMyQTEwNUIzOEYwNkI0QjE0RkIyMjEwCis6MTA5RTcwMDA0MjBGNzdBMjFDNjFGRDNGQ0U4NUY5N0E1RjM4M0Y2N0JDCis6MTA5RTgwMDAwQ0E2MDJGNUY4MEY2MDRERjhCMDI5NDVCNEQyQzUwQzA4Cis6MTA5RTkwMDAwQkU4QzVCRDg5N0Y3OEU2NjlEMDkzOTY3NEJFNUVFQzA5Cis6MTA5RUEwMDAzN0UyREZERDlDREYwNkZDQUJCN0M3OTE5RTYyREZDMjA1Cis6MTA5RUIwMDBEQjEwMEYyMjVGQTFBNzUzM0VDODA3OEIwRDkyMzNGMTMxCis6MTA5RUMwMDBCQzZGRkZERjIyMzE0RkJCMzU0NjdEMUZFOUUwM0YyMEVECis6MTA5RUQwMDBEMzNFNEQ5OEQyNjc4QTFFMjIyRTdCMTNGNTlFODlGQkI2Cis6MTA5RUUwMDA0RDU0NkZERUM2RjM4MTE2RDVDOTMwMEUwOEIzREIyNzlCCis6MTA5RUYwMDAwNDlGQjM2QjE3RkE2RUQ1RkU0RjQ2OTk4MDBFMTcwQzcwCis6MTA5RjAwMDAzRDkxRDkzMDdGQ0RBRTFEOTFFOEM2REY2Qjc0N0Y4QTVECis6MTA5RjEwMDA3Q0I3RjJDNDA3MDU3NjNBQ0ZCNjcxMTQ5RDAzRjA4RDc1Cis6MTA5RjIwMDBBNkJBODNGMTBBRjMyOEI5ODNFMUE4REI5MDRCQzZCODNGCis6MTA5RjMwMDA3NjAzMjVFM0Q5RjhGNkJDODc1MDFGRDVGOUY4M0E3MUI2Cis6MTA5RjQwMDA2RTJDRkNDQjZDNjNENEJGRDhENjE4ODNGM0Q1RkRCNjhBCis6MTA5RjUwMDAyMzE5RTU2NzczM0M4RjEzNUZCRjNBOEUzRkFGMzAwNTFGCis6MTA5RjYwMDBDNzdGOTkxODJERjhEOTZCQzAzODYzQjM4ODRGMkU1RTIwCis6MTA5RjcwMDAzNUQwMzhFREZERTNEQjhBNjQzQkYwNDNCNkFGNzkyRjkzCis6MTA5RjgwMDBDNTQzRUQ2NjE1RTkxQUY2MEFFMzc4NjgwRjIzMzlBRjgxCis6MTA5RjkwMDBFQjlDQzEzMDlGREYxRkNEMUMxMkRDREYxQUVFRkYwM0VDCis6MTA5RkEwMDA5RDMzRUIzMEFCOTgxRjBEQjMzN0IzMTg5ODdGQUJEODA4Cis6MTA5RkIwMDAwRkNEMDQ4RUMyRjM0QURBNzVFRDdENjFFRDNGQzU1OEQxCis6MTA5RkMwMDAwMkY5ODFGMkI0NjE0QTMzQkJDRDE2OENFNzA4QzI3MzQzCis6MTA5RkQwMDAzQ0YyNTMzQ0JFQzc2N0MwRkM4OEZGMTZDNjVFMjZCODdECis6MTA5RkUwMDAwMjcwMzI3QUFGMDY2NzI2Rjk3MzVCNERGRUIzNzg3RTU2Cis6MTA5RkYwMDAwNUUwQjIyM0ZEMzMxOTg3OTNCNThGNTUzMUJFMEZCM0ZBCis6MTBBMDAwMDAzQjY5MUQ2MTc2RDVFMTkxMDZDMzU1OTdDM0JDNjhCRjE2Cis6MTBBMDEwMDA3RkJDOTYwREM4MkJDQTZGNUQ3OEEwNkYwMTE5RDgzQTI2Cis6MTBBMDIwMDA5QTA5RjlCNjNGNUIzQTJEQjgwRjhBNjQ3MkUwRjk3MTZDCis6MTBBMDMwMDAxQjYyOUU2RDFBNDk3MTgzNDdDNjM4MTZEQTg4MTg1QzEwCis6MTBBMDQwMDBBN0NBQ0YzQjYzNkEyODk3RTMwMUY3QzVBRDE2N0U3RkE5Cis6MTBBMDUwMDA2MDNDRjBCNzBERkIzNjNFQ0UxMTY1QjdDRTk0NDg0RTRFCis6MTBBMDYwMDAyOEFGNTcyQkU0RkQzMUM5NzdGNjc2OTBEM0JGRjhGNkM5Cis6MTBBMDcwMDBFNkE4MDA0QkNEQkI3Qjg4NEY1NzFBREE1RjFDMEZGNzYxCis6MTBBMDgwMDAzNzVBRENGOTQ5ODBDRkI3NEUxQUU4MUNFOTlGNUUwQkJFCis6MTBBMDkwMDBGMzU2NjJGQ0I4N0I2MzgyNzMwOEY5RDBDRkZGQzNFMzQ5Cis6MTBBMEEwMDA2QjlGNEY0MUZBRUY5NjU0Q0M5QkY2MUJGREEzMTBERTNECis6MTBBMEIwMDBEQUY2Q0Y0RDU0OEZEMDc2OEFFQTkzOEUyNEI5OURGODg0Cis6MTBBMEMwMDA5RUM5NkQwREI0NkYzQzg1MzVEM0JFNzE5NjM4N0ZERDZBCis6MTBBMEQwMDA5MkM0RjVDN0U1NjM2MzVFNkUwOEMyRkY4MzQ5REMwRjc3Cis6MTBBMEUwMDA2MzdFRjdDRDI4MzdFRDQyM0UzQkQxMkY4MTc2OTdGMDQ2Cis6MTBBMEYwMDA4Rjc2NzVERDlEQTYwNkU1RkQxQUQ4REUxNEM0Rjc1QUU1Cis6MTBBMTAwMDBGNjM2QjVEQUY1N0UyRjNGQ0Y5OEY1OTFFNTNFNjcxMDJDCis6MTBBMTEwMDBGRkI5OTNCODlGRTcxNkVGRjMyN0I5MTcyNEExREM3NkIwCis6MTBBMTIwMDA5RDM2NDVBQTc4NUVBNTY1MTREQTkxMTZGMDlGRUM0MzNBCis6MTBBMTMwMDBFMDY1NDA2RTc1NzI1NEE3Rjg0RDM4QkVFRTFDM0Y3NzRGCis6MTBBMTQwMDAwQTc0NkVDMkZBRkZDRDFGQjU4RDVCMDJENzc3MDFBRUUwCis6MTBBMTUwMDBCMURFRDM3M0MyNEM3NThGQkI4Q0FFMTQxQ0RGRjBFMTQzCis6MTBBMTYwMDA1NzM5QThCNzJBMTA2OUYwQkZBRjNBNTZERThDNzgwMzhBCis6MTBBMTcwMDBCRTJGMEU0N0Y5REFDRTQ4OEY2OUYyOTk4REYyMDlDRkRBCis6MTBBMTgwMDA2NzIzREZFNzYzM0Y5M0Y0RjA1NjUzMkYzRkY3Qjk4QjE0Cis6MTBBMTkwMDA5RkZCMDRCRTI3MzkwMEJFQjdBMzlGOTA2RDA3MzlBMDZGCis6MTBBMUEwMDBFN0M3OTI3QzZGRUQzNUQwRjk1NDBGRThGMTVCQTg1RkZCCis6MTBBMUIwMDA1Qzg1RkRBREJEQTU3NjkyNkZDQ0MzRTdBMjlDRkFGNjk3Cis6MTBBMUMwMDBEMjNDMkQxMDgzMjBFOTI0RTYwQUY2MUZEQjEzMjM4OUY1Cis6MTBBMUQwMDA4RjM1RkQ3ODMwOTFFQkZGOTYwQzM1MEFFQkZGQURCMjcxCis6MTBBMUUwMDAxQzIyMTc0MTc2OTBGNzg1OURFQ0RENTBGQ0VDMEJEM0RCCis6MTBBMUYwMDBEMERFMDlCQjIwRkMyNzc2OUNFQkY5NDc4NUFENUFGM0VFCis6MTBBMjAwMDA0RUUxRUMyREIwQ0UzNTg3RTU4MTdBNkVGNDU3N0Q4MjM0Cis6MTBBMjEwMDA0RkY2MEFGRjE1RUQ4NDlBQzdFQjY3RjBGQUM0MERCQzQwCis6MTBBMjIwMDBDRUI1QzBCOUJBMDRDQjM4MjY1NzM0RUZDM0I2RDBENUIzCis6MTBBMjMwMDA1MjgyNjc4RUE3MkRFQ0REQzdDRjFFRjNGM0UzQUQ3QjEzCis6MTBBMjQwMDBFRkM4QzI3REVBRkUxMzY2ODZGQjI0QUQ3RkYzRkZFMTEzCis6MTBBMjUwMDA3NUMwQzM3NzNCMDFGRjQzRDgyNTU4MEVGMTFGNThFQTVDCis6MTBBMjYwMDAxNDk2MzRGODdFQkZBNEU5OEZGOTk1Mjg2RjE3NUJFNTQzCis6MTBBMjcwMDA0MDFGRUM2MTJEMzAzOEY2N0Y5RDU0RjVBQzA3MDA0QjQ0Cis6MTBBMjgwMDAxQkUxN0MxRDU5QTIzMEQ5NEQ2REZGOTFCRjI1QTAyRDNBCis6MTBBMjkwMDBEODc1OENGQjREQUQyNjY3MTZGMjRGRUJFOEQwRjNGQTdDCis6MTBBMkEwMDA1QUZCNjIxMjNGRTc5QzZGNjY0M0U2MjUwRjA5QkIzN0Y2Cis6MTBBMkIwMDBDNkMzOUU0MTNFQUE2RDk1RUQ1RUEwRkI4NTU2RDk2OTQ5Cis6MTBBMkMwMDAwMkZGRTZBQ0QzOUQ4MDY3NjVDRTMxQ0Y4MkE5NjhFN0Y3Cis6MTBBMkQwMDA0NURDQTg3RDRGNjUxOUZBMjc2MEE3MUU3QzYxNTAxRURBCis6MTBBMkUwMDBERjgwN0NGNDUwQkJDNDdFMDY2QjVFRkVEMkQwRkIwQURFCis6MTBBMkYwMDAzNTYyOUU4N0RCMzZFRTRGMDEzQUFFNzgyNTc0NUM4RDcxCis6MTBBMzAwMDBBODEzQUJEMUY5MkY4NzkyNDQ3Qzk4QzZEMkQwMkYwMUU1Cis6MTBBMzEwMDBGRTIxQkQ2MDU0NThCNzE5RjhGNUMxNjQ3NzA3QzYxQjE0Cis6MTBBMzIwMDA5QkM1NzcwQzQwN0Y5MjFDNzYwOEJFREMyQUVBMDRGQ0IxCis6MTBBMzMwMDA1QjI1REFEN0NCN0NENTJCMUJFMEY5NDJDNTJCQTM5RDNGCis6MTBBMzQwMDA2MkQwRTIzRUMxNjRBN0JCMUNGMTBCRUIzRTg2RkIzNTNECis6MTBBMzUwMDBDQjg1MUU1Q0FFRjk2NTVFQkU5RjAxRTY5NkZDQjIyOTE4Cis6MTBBMzYwMDBDQ0RCMTg4OUVCN0U1NTcyRjg1NEZDOEVDOEEwM0E1Q0ExCis6MTBBMzcwMDA1QTc3OUQ1ODc3Q0Q4NjIzRkIzMThDNUJENTEyM0FBRTQ4Cis6MTBBMzgwMDA0RUFDQkI0RUI3NkU2RDVGRkJDRjQ5QkE3M0M4MzdCOEUyCis6MTBBMzkwMDA2RkYxNjcyM0Y3MTMzRTEwRjM2OEY3Q0QyM0I4M0VBQzk3Cis6MTBBM0EwMDAwNUYwOTA2RTM1NUVEOUVCRTU3RTlEMERCRkMzNzNCRkEyCis6MTBBM0IwMDA4MEY3N0U0MUVGM0FFNjMzQTVDMEI4NTUyRkYwNzVCMjZECis6MTBBM0MwMDA2NzQzRUIzRjFGNkM3REM0ODRGMTk1OUUyRjk2NkYzMUUwCis6MTBBM0QwMDA5MjNGMEE4ODMzQTFCRkE4RTc4QjE1NjJERDJCNzRFQjhGCis6MTBBM0UwMDBBRTc1NEIzQUI4Qjg5RjNDMThBRTk2MDU0OEQ3NTU1QjRBCis6MTBBM0YwMDA4QzBDRUIxMUY1NzAyRDZCNTk1MjhFN0MzNjk4NUYzOUIxCis6MTBBNDAwMDA1RDU2ODhGOTAyNzBBRUE2NzM3QzM3MEFFN0E4MTE4MjAwCis6MTBBNDEwMDAyRkM3QjE3MTQ0OTc4QUQ4MUJBMjhCREU4RkREQkU3RjE4Cis6MTBBNDIwMDA5QzE1RTVGQjcyRjc2ODhBREYzNUJBRUI5RjJGMTc3RTI0Cis6MTBBNDMwMDBGMDhDMEQ4Q0RBMEI2RDI1RDZGMTE4QTdGNDE4MUM5MjUwCis6MTBBNDQwMDA0QUYxNTZFNDc4QzA0NzVFODdDQzJBQTFERkRGOUVCNjhBCis6MTBBNDUwMDBERTAzNzhDRjNEOUM1Rjg1RjE3Q0RFNjEwMzlENzdEQjc5Cis6MTBBNDYwMDBEOTlENEZGQkMwNzkwN0QyNjNEMzI4MUZFREEwRUZDRDU0Cis6MTBBNDcwMDBDMDNDNjQzRkZCN0I3MkQ3RTNCOTgwRkU5RUQyN0M5Q0RDCis6MTBBNDgwMDA1NzgyNzE2OEU3NzM4NTFENjhFOEM5QjUwNjlGRUYyRThFCis6MTBBNDkwMDAxOEMxRTNGNUE3OTIzRUZCMzFGQUUxMzNCNjFCRTk3QzI0Cis6MTBBNEEwMDBDMzBDQTNGRjNEQUM5RkRBRDlBREQwQkU3NUNERTFBNUZECis6MTBBNEIwMDA2QkMzOTBBRUFGNDlCNDZGQkRCRjc3NEREQzYyRTRBQjA4Cis6MTBBNEMwMDA3NkEzMURGN0ExRkJEQkZGNkQyRkRFRjc2QzkxRTg3QjE4Cis6MTBBNEQwMDAxMjc1MUQ2NTU5NUJBMTlGQkIzMUNGMTE3Q0RFMkIzN0Y3Cis6MTBBNEUwMDA1QTI1RjhEODA4MkJDNUMzMzM2RTMyOTI1RDNDOUY2QzU5Cis6MTBBNEYwMDBGRDI1RkEzNzJCOUMxQjQ5OEVDRkVGRDk2OUEyRkFCOUZCCis6MTBBNTAwMDBBRDEyNDNEM0JGM0Y2OURGMUI4ODhGRjM2RjFFMzFBMUFDCis6MTBBNTEwMDA5MzVERDI3QUM0RDRGNzc3RUNGRDA1MkYwNEZFMTQwN0JGCis6MTBBNTIwMDAzNzlCMzA0RTU5QjU1MUVCRjc5OTkwNEUyRUUxRkZENDQxCis6MTBBNTMwMDBCRTcyOEFGQTJCREEyNEQyMzMyQjVFOTJFOTNDRkJCRTQwCis6MTBBNTQwMDA4RUI3NENDOEM3QjU1QjI0OTY5ODFBNzQ3RjgzMTRGMkYzCis6MTBBNTUwMDAxRDg0QTU4Q0YzQzE1MkExNjc1NjMyRUY1M0M5MzA2RUVBCis6MTBBNTYwMDA2NTMzQUYyMzYwNEY4N0Q2RTVBRURDMzI4N0JFREJCNDAwCis6MTBBNTcwMDBBQzc5Njg3REYzQjBFMEVCODczMDFFQkMxNUJGODMxNDY3Cis6MTBBNTgwMDAzQUVFNjFFREJCNUMzQTdFN0U1Q0UzRTc0Qzk2ODlGQzdCCis6MTBBNTkwMDBGQzU1OTExQTk1MEREN0JGM0FCMkUyRTZBMUNFQjFGN0JDCis6MTBBNUEwMDAwODNCQUNEOUMxQ0IzRTAzRDkxMUZEQjg4QjZENTcwODIwCis6MTBBNUIwMDBERUJBOUVDQjI2QjQ4M0U1RUQ5NzA4RUY5NUVENUQ1NEFBCis6MTBBNUMwMDBDNzcxMTc3M0Q3MjA5RUVFNkFCN0RBNTE4RTJCRkJCODhFCis6MTBBNUQwMDA1RTlBRDk2RUY2N0EyNUJDREZEMjg0RjRFQ0VGRTQ3NThFCis6MTBBNUUwMDA4QjlFM0QxMkY5MkY5QUJFN0E0OEUwRUYyMTgxQkY4N0ZBCis6MTBBNUYwMDA0MDQxQTdFNEEyMUZDQkUzREU4NzMzMzZFRThGODFGQjE5Cis6MTBBNjAwMDBCNUUyN0FDRDgxN0Q5MUU4RUZDRDY0OTdFRTQ1N0FDMEQxCis6MTBBNjEwMDA3QjE4QkU4N0JEMTQ4QUU3M0IxOTg3RTNDRTJEQkNERUNECis6MTBBNjIwMDA1OTZGQUZGQTQ3NjRDREE2RkMyM0M0OUQwODRGQ0Q5NjYxCis6MTBBNjMwMDA1MDNDRDdFQUUyRUQ3NTIzQjg3RERFQTRDMzczQTU5RjM1Cis6MTBBNjQwMDA1OUIzMTEwRTU1NzY3ODY5NzRBRjgyRUZFRENFOTEyODJCCis6MTBBNjUwMDBCRkRBQURBNjQ1MERCNUZGQThCNUVGMDlCRjU5RUJDRkUxCis6MTBBNjYwMDAxNkU3QUI1QkVDQ0RCNkUwMzhEODk0Q0NFREZGOEEyOTg5Cis6MTBBNjcwMDBCMjA3RTkzNDEwM0ZBNEVGQ0I1MTBEODFGODAxRTI4NjE3Cis6MTBBNjgwMDBERjhDODhFNzcxMDQxNjc0QkMzQjUyNjY3MTcxODFGOEU3Cis6MTBBNjkwMDBFMTg3NDlFQjJCNzNBMTVGQjc4NUNCRjlDNUM5MzAxRkEzCis6MTBBNkEwMDA3RURGNEI2MUU0NUZENjZEMzFEMzM5QzAzQUEwM0JDNTQ0Cis6MTBBNkIwMDAwOUVERkMxQzgzQUI1RDJBNDM3QTgzRkZGREVFODg4OTlDCis6MTBBNkMwMDA3OEFFODYxOUUzNjBERDczREEzODlGQ0YyOUJENDQ3QzBDCis6MTBBNkQwMDA3MjIwOURBRkY3QjJBMjI2MEVFNThGNkI3RTM4OUVDMzI3Cis6MTBBNkUwMDA1MjgzQ0YzRjgwNUNFMkY4REE3NjVFMEZENEJBRjdFQkE0Cis6MTBBNkYwMDA1MUE5QThENzNBRkUzQTZBMDlCNDU3NDZGMEY1NkI3RURECis6MTBBNzAwMDA5RTFGRkNCQ0QxRENDRjM5ODZGRUU3ODM5QURDRDhGOUVBCis6MTBBNzEwMDAzRURBODNDMkNFMzBBOTg5RjhCQkQ2RDhGMjc2MENGQURECis6MTBBNzIwMDA0RDVCRjlCRTNEREI2REM0NkY5Q0IxODYwRjVFNkY4QUQ5Cis6MTBBNzMwMDA4MTc1NUY3QzVEQTI3QTM0N0NGRTA5RTBCMzhCNEI1QjU0Cis6MTBBNzQwMDA0RUEzMUZGREQ1NTYwQkY5OEYwRjgyOEYzODNENzdCMDgyCis6MTBBNzUwMDAzQzZBNzJBQjdENzdBQTgxQUQyNTdGNzIyRDZCQTI3NkE0Cis6MTBBNzYwMDA5NUUwRTM4QjZEOEQyNkNBOUI3OTgzOUUxRjNERDhFRkM0Cis6MTBBNzcwMDA1OEE1RTMzQjUzNzIyOEJGMzU3QzEwNEVGRTVGRkYwMUE2Cis6MTBBNzgwMDBEOThFRkIyNzgwQTdGRjRFMEVDNjg3RjAyRjVBRjc4NjdCCis6MTBBNzkwMDAxMTNERkI4RkQ4Qzg1RUZDNDlGMEQ5Nzk5MTM3NkU5ODhFCis6MTBBN0EwMDAyQ0QzRkEwRDUzNzg5QkQ1RjlENjY4QTQxRkUyMUJFQjg2Cis6MTBBN0IwMDBERTM3NzdCRTM1OEU5RkE3RjYxMkRFNTdCRThBNDlGMTg3Cis6MTBBN0MwMDAyMDM4NUJBQzk0REJEM0ZBMEQxRjJDQTJFRkYwRDRFRDU0Cis6MTBBN0QwMDAxOTgwNkI4QzI5MkUwMEQ3NzBGQzJGNDkzQzFFMzQ0ODAxCis6MTBBN0UwMDBBMUYxNjBERDZFRDkxNTVDRUYwNUVCQjkwRkY1NEY5MjY1Cis6MTBBN0YwMDA5MDAzQTZGODEzRDAyRjE5OTlBQzkyRkQ2QTY4RTdGNDdDCis6MTBBODAwMDAzNDc0RjAxNkRFQkY4MEU3M0I4Q0Y0RkU0MUY3OEIzRERECis6MTBBODEwMDAzNTc4RkZBQjU0MkJERjRGQkVFQUE5QzRGRTc3NDdDQjk4Cis6MTBBODIwMDA1NDRGRjlERDBGNTY4QzBERDY5QjBDRTEwNDdBRDYxOUU2Cis6MTBBODMwMDBGRDA5MTQzNzFFMzExMDdDNzU0NzJFMjdBNERCNTAxRkVECis6MTBBODQwMDA2RDJDQjU2N0EzREVFMUZBNkVGRjY4RUI3MkU0NjMwRjZGCis6MTBBODUwMDBCRTM3MzEzMENGNkJDMkRFMzI1QzZGMTI3QTE1MkZGMDBCCis6MTBBODYwMDA3OUM1N0FEN0IyQjkyMjNFRTY3Qzk0MkRGQzNEODgyQjdGCis6MTBBODcwMDAyNjI2NEYxQzFDNTdEQ0E4M0YwOUY2RTBFODYyMDlFQkNFCis6MTBBODgwMDA4OTE0MEZDNkI1M0I4RjczN0REMEQwRjFEMEE3QzhFNzMwCis6MTBBODkwMDA3NTlGOThBOUJFRUFCQjlEMEY4REE1M0E1QkI3RkI1Njg1Cis6MTBBOEEwMDBGNDJCQkVFQTdDRjg1NkNBRjM0OTZCMDkyRTBGQzI5NzA3Cis6MTBBOEIwMDA4NEZFQ0I4NzA5NTgwRkJBQUFFM0MzMDRCMkFGQkIyNjA0Cis6MTBBOEMwMDBBRUY3NDRBMDlGOTI3QjI3NUUwN0JGODFGODBGRkMxNzZECis6MTBBOEQwMDBFMkJGOUQzREY5OUFCRjYyQzU3OTU3MUQ1MDVDODg5RkM0Cis6MTBBOEUwMDA1NTA3RjIwRjU1QTIxRjcxQjgzODFGRDVCODc0Mzg5RjlECis6MTBBOEYwMDBGQzk1M0NGNDU3NkMwMUZGNDU1QjRGNjUzMkFGNzdFOTNGCis6MTBBOTAwMDBFRjBBQTMzQzgxQzQ0NjczRkU2MUU5MjFGQzUzRDNGQUVDCis6MTBBOTEwMDAwRUQ5RjU5QTM2MzlBNDZFNTA3QkNFOURBQ0YwN0Q3RTczCis6MTBBOTIwMDA4RDdGNUEyNDI3RjFDNzc2REVENkI0RURBNEY1QUQzNDc5Cis6MTBBOTMwMDBCNjEwQkQxQkI2MThGOUZEQURCQ0Q1RUFBQTNEMkNDNkI0Cis6MTBBOTQwMDA4M0Y4Mzg4NDk3ODAwRTMzNEQ1RUZBNkVDNUMxNTRFRTlECis6MTBBOTUwMDBCRkVCRTlGMTU5MzJDRjYzMUMzQ0UxQkUxOUY5RTU2MDY4Cis6MTBBOTYwMDA5MTdCQUM3RDA4RkJFMDYxQzUzQzNFOTUwNEJFNUJGOTg0Cis6MTBBOTcwMDA3OTI1RkRCODUzQzkzQzhFOEY4QzBEM0QzRjNBNjA1RjAxCis6MTBBOTgwMDA5MjM5RkZDQzM0MERGRDNEQkQ5RjY5RjJDNEQ4MzMwNjJBCis6MTBBOTkwMDBFMDhCQTM5NTQ2RkIzQUUxQjc4RjA4RkE1RTQyRDU1RDlFCis6MTBBOUEwMDA0NkYyMEY4RTMyRkIzQjU4NjczODRCRDNBRjkzQjk1REZECis6MTBBOUIwMDBENUYyRERBRTBEMkFERkQ3MTk3Q0FFOTFGNEU0N0M2REMzCis6MTBBOUMwMDAzRUZENzk2OUUxRDdDQ0Q3RjkzNUVCMzVGRDM3ODY4RDdBCis6MTBBOUQwMDA0MUZERDcyMkNFQjlBREM5MENGMzA2RTdBM0Y0RUQ3RTU1Cis6MTBBOUUwMDBCMThGODFFNzc1QjA2REM4RkM5OEYyMzYwN0JCNEVCQ0RECis6MTBBOUYwMDA0MTc1NjYyN0MyRDg2ODlFOTdBM0ZDRjVBQTYxRjJENzc1Cis6MTBBQTAwMDAwRDAzRjIzODJGODRCRjM0N0E1QzEwREY1NUQxRDNFM0M1Cis6MTBBQTEwMDAwRDgxNzc2RDlGMkQ1Q0VDQjM5RDU2REM2RjI0NTM1REVCCis6MTBBQTIwMDBENjc5MTNGRjhFOUE5RkUyQUI4NjRDRUUxRjVEMjg5MzdBCis6MTBBQTMwMDA2ODVGMUNFMDFDNjUwRUQyRUIxNzQ2RjBCOEVBQkIwQjUyCis6MTBBQTQwMDAyNENBOUI3NkUxNzg4QzlGNUEyNEFBQUI1RUU1RUIzNTRECis6MTBBQTUwMDAyMTFGOEQ2OTVERjIyNEM5QUI4NzFENjM0MURGQTk5ODcxCis6MTBBQTYwMDA2REUxNzY3MTgwNkVEQUJBMDdFQzU2OEM4N0VCRTEzOENGCis6MTBBQTcwMDA2QTcxM0NEQUMxNTlDMkVFRTlDRjIxOEQ2NUJERTUxODk2Cis6MTBBQTgwMDA1NzU2M0IyNTA3RUVEQkVCRTkzRDc3RTE4NDc3RTJGRkE0Cis6MTBBQTkwMDAwMTNBOUY0Qjc2MUYyMUZERDY3Qjc5MDFFNjNGMEY2Njc5Cis6MTBBQUEwMDA3RTNFMEFFRDY1RUQzMDdDRkIzQkMxQjdEQUY3NTkxQzAxCis6MTBBQUIwMDA2M0Q1NDZGQzNFQzk4RjEyREQ5RjIwN0VGQjBEREY0NjJECis6MTBBQUMwMDA4RTYzRjg3Q0RGN0ZBRjkxOTAyRThDRTgzMTlDOUM5QzRDCis6MTBBQUQwMDAxMkYzOUQ0QTE2REYyNThDRTNGQjI0Q0JCMThGRjI2QTdCCis6MTBBQUUwMDBGNDhFQTRGQzQyRjY4REVENEIzNUVDN0UzNzA3RjVENjlGCis6MTBBQUYwMDBDNUFFMDMzOUE2MjAzQTlFNUYwM0YyOEVGNkEzNjM1RkNDCis6MTBBQjAwMDA4MjZBMEJFNjMzMDNGMTk3MjQ2OUZDQTYwOEJCMThDQUQ2Cis6MTBBQjEwMDA3N0U3OTFFRkIyQjFGRDMwMzIxREY1RUVGNkEzOTFCN0I0Cis6MTBBQjIwMDBFMDdDQkI3ODNCQzA5RkVEMzI4RDgzNzg2N0NDRkM4ODlFCis6MTBBQjMwMDA2MEY4OUUyNEY4MkVCNEYwNzkxOEVCMUI1MzM1M0VGOERDCis6MTBBQjQwMDA3RUUzNzA3QzZCNENFMUY1ODQyMTdDQUJBREI3MDVCRjM3Cis6MTBBQjUwMDA4NzgzRkU3REE3OTlCRTg3ODNGOUU2RTgyMEI5NDg0RDMzCis6MTBBQjYwMDBFMUYyMzA0OTdDRkY2NjBBRjNEMEY3MDAyNzg5RUZFMDc1Cis6MTBBQjcwMDA0QzUxOTg0Rjg5QzE3RDJFOUZDQ0Y3NjVGOTc5ODYwMjlCCis6MTBBQjgwMDBDMUJGOTMxNDVGMTdENjM5NEMxMUZCMzI4NUFDOTdDNjAxCis6MTBBQjkwMDA0RDY3N0U2QTlEQ0M0RUU3MTQ4QTk5ODNEQUM5MTZERjI5Cis6MTBBQkEwMDA5RDk4NzZDOTZFNjlBMUZBM0Y1RjgyMTI3REQ2MjJDRTRBCis6MTBBQkIwMDA0MzBDNDFCN0MwRkExNUZBRUUwREYxQTU4Q0U3NjE4NjlBCis6MTBBQkMwMDBGRTZFNEE2NTBBOTc3M0ZBMzgwN0QyRjcwMkEzRkMxNDlGCis6MTBBQkQwMDA3RURGMEM1RjMyNTU2MTE1NTg3Nzc0OUJDMjJDRTEwMDAzCis6MTBBQkUwMDBFRkY2QjcwRDI0QkY5RDdEQUExN0VCNDAxREIxRTJCOTZBCis6MTBBQkYwMDAyRjE4RDVCQjRFNzI3MkY5NDREMzgyNzUxMkRBN0FGNUVBCis6MTBBQzAwMDA3ODI4ODRGOTMwM0YzNjQ5ODFDODkyRjBFOEEzRjdERDBGCis6MTBBQzEwMDBDRUY4Mzk4RDIyQTZEMjA3NTY2RUM3OEYyNzkzNUVGN0RFCis6MTBBQzIwMDA1MzlDNTQwMjcxMTJFQTc1ODNDNTQzRjgyOEMzRTRDQUUxCis6MTBBQzMwMDA0NEJFQkYxMTA5RjMxNDM2NEJFQzM4RUU1N0E0RjFGNUJFCis6MTBBQzQwMDA2QUYzMTcwMjIzRTBCOUJEMzJCMTVFNEM4MTFFOEZFMTc5Cis6MTBBQzUwMDBGQjFFOTE1NDM4NUM2QUU3REYwOTRBQTBFRjA0REQyODQ3Cis6MTBBQzYwMDA1RUZCMTNGODc3MjEyM0VGRjc1RkZDN0U3RTYwRkZDNzYyCis6MTBBQzcwMDA4MURGMEQ4QTBDN0M4RkQyODFFNzRDMzA3RkU3NTNDRTg5Cis6MTBBQzgwMDAwN0ZCQ0Q3N0E3MkNBRDRFOTkxOEE4OTc2MzZFQTZBMkE3Cis6MTBBQzkwMDA1RkExQUY5NzQzRjQ5RDBCM0FERkFDRDU3QkJDRUE5RDM3Cis6MTBBQ0EwMDBBQkUyQjlCOTg1NzExNjNBNEY5QjZCMTk5NTg3NzYyQjM0Cis6MTBBQ0IwMDAyM0QxNUQ5RDQyNzUxRjVCNkVBMTQ5MTRFRjQ0NTc0NDNCCis6MTBBQ0MwMDA4MENGQURDQzM5MTlGMTFDQThEN0UzREY0RjFBMzhDRkFDCis6MTBBQ0QwMDA5NEMwRThGQzlGRDVDQ0VCMTk5RjAxQjlDMEVGMTc4MTU4Cis6MTBBQ0UwMDA1NEE5NThEN0MyOUUyOEExRkFDN0E3QTIyRDBFM0M4NzA3Cis6MTBBQ0YwMDA2MDQ2NzhBRDAxNzgxQjJEQTJFRTQ3NTc3N0Q5NjgzM0FGCis6MTBBRDAwMDBEMEY3MzgxQjU5Mzg5REU3OUUxNUU2RkUxRUFFRkZCMTAxCis6MTBBRDEwMDA4ODYyM0EyRjlEQjU2RDVBMTJGOTgzQjBERTY5REE3QUVFCis6MTBBRDIwMDAwRDgzRUIxMEIxRkUwRjlGRDNEN0ZGNjlFQkMyRTNFQkFFCis6MTBBRDMwMDBGODVFQkJDMDk3QjY0RUJCNzZERUM3QTk4NDlDRjdEMTQwCis6MTBBRDQwMDBENkZGNEMzODVGQTcxMTc3RTJEM0U4NTkxNUY1ODM3RTFCCis6MTBBRDUwMDA3RDFBM0ZGQzNGRERGQjM1NkQ2MDVDMDAwMDAwMDAwMEFDCis6MTBBRDYwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDMxCis6MTBBRDcwMDAwMDBCQkIyNkNCQzBGMEEzMUU4MTU5NjQxODE4MjZGMTI2Cis6MTBBRDgwMDBBMThBRDExMkNGRTA2NjYwNzgwNEM0MkMzQzBDMEM4NUZCCis6MTBBRDkwMDA0MDdCMjM4MDc0MjQxMDFGMDFFMkEzNDBBQ0MyQ0JDMENGCis6MTBBREEwMDAxMDBCQzQ3MTQwM0MwN0M4OUYwQkM0QTU0MDlDMDU3NTlGCis6MTBBREIwMDA2MzJCMEIwMzQzM0IxMDc3MDI3MTM3MTBFQjMwMzMzMEJBCis6MTBBREMwMDBFODMyMTM2RjdGQjEwODAzQzMxMzA5MDQ1RjUxMTI2ODlGCis6MTBBREQwMDBBNzM0RkRGQzNGRDhGMDBDN0RGQURBQzc2REMwQzBCMEQ3Cis6MTBBREUwMDBENDAyQzExNzAzQjI5NzU5QTBBQTU5NkU4MURGOEMxNUZFCis6MTBBREYwMDA2OEYyMkJEMUY4QUJGMEU4REZBNzg3Q0FEN0QzNDA3MzRFCis6MTBBRTAwMDA5RjE2MDM4MzE1NTI5OEU4NkJFMDc3MEIzQUNFMDRFQTVECis6MTBBRTEwMDBDRDAyNjIwMDlGMzA5MENENjgwMzAwMDAwMDAwMDAwMDZBCis6MTBBRTIwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDcwCis6MTBBRTMwMDAwMDBCRTU3RDBCNzg1NEQ1QjVGMDNFNzMxRUYzQzhDQ0ZFCis6MTBBRTQwMDA2NDEyNDIwODEwQzIwOTJGQTMwRDM4MjEyMTA1OEFFRDkyCis6MTBBRTUwMDAxMDIwQTI0NThEOEYyQTU0RDQwOThGMjRFNDM1MDExRjc4Cis6MTBBRTYwMDAxNzZCREIwQzA0MjMyMDY4QjA1OEEyNDYzQjQxNTBGMDFFCis6MTBBRTcwMDAwNjFENjg5MDIwMDEwN0IwMUE3QTdEMDRBRkY1RDFGNjVGCis6MTBBRTgwMDA3QTgzNTI0MDA4MjRFMjBCQkQ2REZERjc1QTdCOUZDQ0JDCis6MTBBRTkwMDAzOTI3MzM0MEZGRjZGRjZGRkZGQkM3QUYzREVDNzNGNjdBCis6MTBBRUEwMDA2M0VERjVEQTZCQURCREY2MUU5OTBDMjREMjBGMDhGOUVGCis6MTBBRUIwMDAxNkZFRTg3M0E2NDQwODdERDVGNzc0QkU0MjU0OTI0ODQ2Cis6MTBBRUMwMDA0ODdEMEUyREE3MTA5MjNFOEE4NDg4NDA0ODQxMEQyRDYyCis6MTBBRUQwMDBFNzExRjJEMDZEMjQ2NENEMjQ2NEZGRUIxNkZDQkVDQUVBCis6MTBBRUUwMDBDRkNBQjQ1REQ4NzIzOUZEM0U5QUJEN0YyQzhCQjZBMzE0Cis6MTBBRUYwMDBFRjFGM0IyNzYyQkJFMDJDMTJEQTRDQ0I0OTg0RjYzNkJECis6MTBBRjAwMDA5MkQwMjFGQ0Y4MkNGMDM2RDhDN0QyRkE0REI3NTk4ODI4Cis6MTBBRjEwMDA1NTI1RTQ1MTNBMEM5OTQ0ODg4QkY4RUM4NDM2NUQzNTFDCis6MTBBRjIwMDA4QUY1RjdDODJDQ0IzM0EyMDAxRjIzNjlGMzY5NzlGNUEyCis6MTBBRjMwMDBGNDkyRkNENUI0QjQ0NjY2NzAzNUNFMjk3OTI2NDhGQjI4Cis6MTBBRjQwMDBGNzU4NDZFMjNDNjhCREM3OUNCNERFQzNFRjk3OTJENTg0Cis6MTBBRjUwMDBCNEREODZCOTE2QTEyNDlCRDY2QjU2NjY4N0IyQTNGM0RGCis6MTBBRjYwMDBENzlFNzM4OUM0REIwNUFEOTY4OUYwRjRGMTY3NDQ4MUZGCis6MTBBRjcwMDBFNzJGQTY1ODcwOUNCNTM1MEMxRkI0OUU2MjQ5MjNBNEQ4Cis6MTBBRjgwMDBCNUYzODBDRDRGRkI1QjVCRDk3QUI4OTA3RTdGNzA5NDMwCis6MTBBRjkwMDBDNTRCMzE0ODFFRUMzQzYwQkY4NDhFMUZDQ0IzNzg0NzU0Cis6MTBBRkEwMDBEM0RBRTk1MjQ0RjAzOEEzRTM0RDIyMTRGMDA5QjQ5RUY5Cis6MTBBRkIwMDA3Nzg3NEQ3NUY2QUY0RkZCOUQwQUYzNUU0M0YxMkU2NjIyCis6MTBBRkMwMDA0NkRCOEQwNzM4NjlCQkI1OTQ2NDYxM0FFRTJGNjVFRkI3Cis6MTBBRkQwMDAyMTE4Rjc5N0Q3MjQwQjQxMTJBRDc3MTUwMDA5RjVFNjM0Cis6MTBBRkUwMDA1QTQ4ODRENjIzNTJBRjhERDA3MTU2NEY3OURCMzY5QUFBCis6MTBBRkYwMDBENjVGNUQ2NDgxNDk5MEI1NUVFREJCRDc0RUEwQkYxOUE5Cis6MTBCMDAwMDA2MzBFOEQwMkJBNUU0NUJGQzMzQ0IyMUY5OTBERjM3RTNECis6MTBCMDEwMDA3OEJBNDIwMEZGQkYxNDY4M0Q4QUUyQzY2MkU1ODcwMDQ1Cis6MTBCMDIwMDA5RkFCODY3OEUwM0Q3REZBNjJFMUI1NERCMDIxMUM2NEFFCis6MTBCMDMwMDBDRDA2NDJGMjA5ODA4MDdGQUI3REExOTUyMzgwQkZGMkNGCis6MTBCMDQwMDA4ODE3Q0FFOTVFREFERUQ5QkY3RDk3NjA0NUJBMzRDQThGCis6MTBCMDUwMDBDMUMxODBCRjc4RjQxQkM1RjFCOTNBNkI4OTFERTg0MUM1Cis6MTBCMDYwMDA0ODQzNUFEMTU4NDJENjAzOUU2MDUwQzlBRjVFRUY4QTFBCis6MTBCMDcwMDBENjVGMjkzMEZDQUM5Mzg5NEZBMEYzNEJDODUzNDJDQjI5Cis6MTBCMDgwMDAyODlFMkREOTlFMzkzMDVGQTc1RjIxNTdEMkYyMkEyMTAxCis6MTBCMDkwMDAzODU4MDRCQThDNTVDODY2MTVGOUMyM0U5QTk2RDc1RUUwCis6MTBCMEEwMDA5QUVDMDVGRUFCMTdDMjY5MTI3Q0JGODY3RUE3NUQxRUI3Cis6MTBCMEIwMDAyODFBM0YwN0Y4QjNDOUFCMjAzRjUzRkUzOTA0Rjg1RUE2Cis6MTBCMEMwMDBFQjRGMjZBQjU1RkNERTg5RUQ5REEzM0M1NkM0MDQ4NUIxCis6MTBCMEQwMDA4N0UyNjUwMEU1MjVDMDZCQ0U3NUY1NTc4RDA0RkE0QzA3Cis6MTBCMEUwMDBCMDc4ODA0MkFCODVBOUVBN0M5MDlGMjQ5QjA3QzY5N0U1Cis6MTBCMEYwMDAyN0RDODBGNDkzMDcyNjBCNDQ0N0VGOUYwM0JEMjk5RTZFCis6MTBCMTAwMDA2QUQ1QTI5RkMzQkM5RUM4RkIyODY5MzRBREJGMjZFN0ExCis6MTBCMTEwMDBDNTQ2QTBEMzkzRjdEODkwN0U0RjRFRTg1QzBDNzJGNUVECis6MTBCMTIwMDBEOEI5RENGN0ZEMjg5NzhBNzczM0VERTdBOTlDNjM5OUI2Cis6MTBCMTMwMDA4NDBFRjhDOENDOEY5MjAwN0ZDMzQ2MzVEQzQ5RENGNDFFCis6MTBCMTQwMDAzOUFCQjc5NjhDQTNGMDkxODZBMjA1OTlDODI3QzI4RDFBCis6MTBCMTUwMDAxNEFGQzM5NjJBNDRCNTMxNUE3RTRCRTAzQkYxODVCMzE4Cis6MTBCMTYwMDA1OUQ5NDlFNzMzOENEM0I5QjVGMzZENUIzMUY0Mzc5N0NGCis6MTBCMTcwMDA0NEM2QjhGMUJEMkQzNTM5QUE2Nzg2RTU5MTQ4MkFFRDU4Cis6MTBCMTgwMDBGRkIxODVBRkEyOUMzRjc5NTlBQTk3Qzk3OTFBRjI0QkIyCis6MTBCMTkwMDAwNkVGMjcxREVBNTNGRDkyNjYyM0MxMDRGQTFDRDZEMTlGCis6MTBCMUEwMDA3QjAzQzAzNTJDRUJEODVDODA3M0ZGMUJBRjBBNDBCNzI0Cis6MTBCMUIwMDBBN0M2QTVBQUEwOEY5MkZDOURBNDhCRDI3RDU4RjZCQkYyCis6MTBCMUMwMDBGNzQxM0Q5NzMzOTQ1Njk0OERGNUZGODJFRDRDRjAzRjU3Cis6MTBCMUQwMDBBOUZBMzYwMURFQjYwOTM1ODc4MDNFQzExQzhCOTdEMUFFCis6MTBCMUUwMDA5QkU5QzEzNTc3QTU4NjQwOEYwQzczRkNGMTdBNzEwNDE5Cis6MTBCMUYwMDBGMjAxMjFBOTE0M0UwRjQxMzlBOTE3MjJCNjkxRDBFRUQwCis6MTBCMjAwMDA1RUQ2NkUzODA5MDk4MEU3NjE1OUMxQzVBMjFCRUFGQjA5Cis6MTBCMjEwMDA4NTIyNTdGRjcxNUI0MTIzODI3QzUwNEUwNzdFRERBRTU1Cis6MTBCMjIwMDA5MEYyQTIxODcyRjAzMjk3RTc3QTgxQ0M0NjdFMjZEMjRECis6MTBCMjMwMDA1RjgxNkY4NjI3MzFCRUQxQ0E0RjAxM0M3NERDRURBRjEwCis6MTBCMjQwMDAyNEZGMzA5QkMyRjNBQkE1MjM3MjQ0MEFDRjQzRDAyRTE4Cis6MTBCMjUwMDA4NkRDQUNFNTcyRTBFODIwNDE4MUUyNzVGRjZGN0Y2QjMwCis6MTBCMjYwMDAwN0JDNkRCNzkwMzJBODNGMzUyQjZDRUJFMjc0MDU3QUMyCis6MTBCMjcwMDAyQzI0QUNGRkE2RUM4RDM2RDQxNzQyMTZGMkREQzI4OTIxCis6MTBCMjgwMDA4QUNGM0UwRUU0NkZCOUUwQTdFREQzM0M0QzJGQkJCQzk4Cis6MTBCMjkwMDA0QTA4RjRCMjJCMkQyODU4MjgzQzZBMzZGMTZDQ0M2NDRECis6MTBCMkEwMDBERDA1MjlGRUU2QzEzRjgwRDEyNTU2N0ZDRERBQTREMDQ5Cis6MTBCMkIwMDA2QUZBN0Q1RTM2MTUzNEMwMUJDNTk1ODU4RUJCODBCMDlECis6MTBCMkMwMDA3OUNFRjNENjJGMDZGQTExNTI2NDAxN0NBRUY2MzBGQTJECis6MTBCMkQwMDAzNEMxMzg3NDJBNERFOUFDOUZCNTc3OTNEMDcyRTAyMzFFCis6MTBCMkUwMDAwRjZCM0YwQTlBNTBCQThEQ0E3QkYxNUYwNERBNkYzQTRFCis6MTBCMkYwMDA2RjA3NzIwRkVEMTJEMjQyMzYwQjZEQTdENjU4MDhDMkY3Cis6MTBCMzAwMDAyNzQ1MEUwOTQwRjdCMUE5MkFDMEQzOTRFNkZERjc1OUE1Cis6MTBCMzEwMDAwMEZGNkNDOUJCOTE3RTFFMDU3MEQwN0U5QTZBMkMzRUUwCis6MTBCMzIwMDBENDE3Nzk0QTMzRThFOUQ1M0VBNkU3MzU3QzY1RjI3MTUyCis6MTBCMzMwMDBEM0JEMTE4MUNFOUQ2NDUyM0Q4OTc4RjI0NUVDMUUyODIzCis6MTBCMzQwMDA2NzMzNzgzMkYzRDhCQ0ZBRTAxRkFCODQ5NkQzQzZFOUYyCis6MTBCMzUwMDBCNjA4ODE3QTFBMUU0QTc4N0YyNTdDMUVDRUI0RDA0QTYwCis6MTBCMzYwMDAwOUUwQ0U2MzcwRDM3NTE5RTE0OUNGNTY5QTQxMEVEMkU4Cis6MTBCMzcwMDBEMzU4N0YyQUM1OEY4Njc3ODBDQkExQzE5NTQ3RUI4M0IxCis6MTBCMzgwMDAxRUY2MkFDREMwMEEwRTBFNUY0OTM2ODM2N0ZGRUI2RkFCCis6MTBCMzkwMDA3NzA4QUMzRjk0MkIwNzg3RDdDMUU3NEYwMERFNTRBRTQ4Cis6MTBCM0EwMDBENzY5N0YyRDcyNDQxMDY5RkREMDA0QTI2RTY0QTNBOUYxCis6MTBCM0IwMDA1MjdFRjRGQjIzMzUxNDBGQjRFMEU0RTM5MEY1NTY5NDg5Cis6MTBCM0MwMDAwN0ZBMkFGODJERTU4M0Y5MERCNDlDMTU5NThGRDEyQjNBCis6MTBCM0QwMDBBRDA2Nzk3MUYyNzk5MzA2MjY0Nzk0NkQyMkQwMkU5M0FCCis6MTBCM0UwMDBCMEIyMDVDQTc0MUUyNTU5NDYzOTIzNUU1RDk5QzJFMTgzCis6MTBCM0YwMDAwMjdFQTdGQTY3RDkyNDg1RjFDRkE1Q0M4RTIxNDQ1N0M4Cis6MTBCNDAwMDAwRkY4N0M4MkZBRjQxQUZDQUVFMEJBOUVGMTUzQzUwMDQ0Cis6MTBCNDEwMDBERkIwOUFENDAyMTFGNDQ5QzdFMzM3NTg4MEFGRUUyMjY3Cis6MTBCNDIwMDAxNjMxMTFGOTU5RThEMzVGNzRCQzFENEIyMjc2OThBNEVDCis6MTBCNDMwMDBBM0EzMjgxOUYwOTY1MTkzNUNBMDAwMUUzQkZDNTg3NkZDCis6MTBCNDQwMDA3NEQ0RjhGMDA5NEJEMzc4NDI4NjEwREQzODk5QTA1RkE4Cis6MTBCNDUwMDAzRDE1MkQxNEFGQTQ0NjA5ODNCRTlFQTA4NzkzN0VDRkQxCis6MTBCNDYwMDA3OEE1RTE3QUEwRDcwMzhCNUYxRDBDRjI5QjZBNkEzRjM3Cis6MTBCNDcwMDBDRTMyMDJFNTc0RDgyQkI0MTY4RTdGRUM2NzUwN0YxNTYwCis6MTBCNDgwMDBENzI3MEU4MDc4M0MzRTVGODFFNzMwMjdENUIzNTQ0RkY1Cis6MTBCNDkwMDA2NzUwMDQyQkUzQTNGQTYyRjVBNUVGRTZGODlEOUM3RkM1Cis6MTBCNEEwMDA5MkYxMTk4MUE3NTlBRkU4RUE1RkNBRUIwNzg1RjNENjk1Cis6MTBCNEIwMDAzQjg2RjUzNDc4Q0NERkNGMDgxNkQ0NTMyRUIwMzMyOTMxCis6MTBCNEMwMDA3RTFGMjY5RTM5QjgyRTdCMkRCODJFMjZGMEY3NjFFRjExCis6MTBCNEQwMDA4MTAyQTQ2Nzk4Nzg4NTRDRDBCNzdGQjVFQUY5RTAyNzU4Cis6MTBCNEUwMDBGMDEyRjRBRDE0NDYzOTUxMzIxQzY4MUY1MjM5NEU4MEE3Cis6MTBCNEYwMDA3NUFGNDlBQTI5ODNGN0UxNzQwNzAxQkQ3MDYwQzZBQjM3Cis6MTBCNTAwMDAwMkUwMzNCRENEM0YxQ0U0NTBCMzczMEJCQ0UxMzQ3ODkzCis6MTBCNTEwMDBGRkUwMjFGRjI1Mjg5RjcxRUM0NkNENEUzNENGNjdFODMwCis6MTBCNTIwMDAxNUNCNTExRjBDRjdGNzc2QzA3QUVGQUM5NEJDNTcwMkRECis6MTBCNTMwMDA3RkY5Mjk1QzRFRDQ5MzJBRjkyRTg1REYxQjVDMDY3QUFECis6MTBCNTQwMDA1NkY1RDNGMjIwRkFBQ0U0Q0YzMkY2N0Q1NTZENTlFRUM0Cis6MTBCNTUwMDA1MTI5REFFRkFBNTFENDFFQTU3QTcxN0RFNzdBREIzNTNECis6MTBCNTYwMDA2MDY3RDQ1ODU0RTBEQkI1REVCNzZEM0UyNzk0MEIwNjE4Cis6MTBCNTcwMDAwMDlFNUI4QjM0QkIyRjIyQzA3OEU5RUZGOEQwQ0U5QkM2Cis6MTBCNTgwMDBFMDUxM0NBMEI0QzY1QTIzODMzREJBRjVBMjY5QzZCQkJDCis6MTBCNTkwMDBFMzAxMEU3MjEzMjVFMkUwRjg3NEE0RjM0NTNFOEJCNzg1Cis6MTBCNUEwMDA5RTAwMkMxNkREM0FCMjNGNkIwN0FFMkY2RjkwNEI5MTg5Cis6MTBCNUIwMDAyRURBQkFBMkFEMjNEODIzRDUyRkYzQjkxQzNEQTg4NjI1Cis6MTBCNUMwMDA2RDAyRUEyQjJBQkI5NDNFRjNCOTFFNzE3MkJENDlGNTk4Cis6MTBCNUQwMDAzMEQzNzM3QzNENTlCQjM4MTVENzEzNEQ3RjgyNkQwRDI5Cis6MTBCNUUwMDA0QTYyM0VEN0I3NkI3MzlFNDlCQTg2QzJFNDA0M0QwQkVDCis6MTBCNUYwMDA3QTI5OEQxNEMwRkEzQjFBRjQwQ0U4MjcyOTI4QzA3ODYwCis6MTBCNjAwMDA0RDEzM0M2NDM1QUU2MzQ2N0QzQUJBODZFOUMxMDdEMzMzCis6MTBCNjEwMDAwOEYyMTM1RDg3OUE2MUJENkI0QTBGQTc0MTNGNEQzNTE0Cis6MTBCNjIwMDAwNzA0QkY2RUZERDRENjNCNTc0RDI3MDEzRDM4MkY4RjAxCis6MTBCNjMwMDBBRDczRjNCMkQ5NzhCRjA3MDQ0RDYwRjA4MjVFMzVBRkM5Cis6MTBCNjQwMDA3QkJGOThCMjAzOTU2NTAyQjdCN0NDRjgxNzJDQ0MwRTI4Cis6MTBCNjUwMDA3Qzc4RDZEQjg4QzdCNTBCMUVDMTI3NjlEODgwRkRBNUNECis6MTBCNjYwMDBEOTE4MEQ1NjY1MURDMEY3NkJGQzk2OTk2MDc3QUY5NzlBCis6MTBCNjcwMDAzQTU3OEVBMkYwQUY5RjM5NEYwOUQyRUY2QkJDQ0NFRjk3Cis6MTBCNjgwMDA1QTNENjVERTMzQjBBRTU5MkQwQTgzQUJBNjBDRURENTFECis6MTBCNjkwMDAwNDBFRDcwNkU4MUJGRDQ0MDVGREEyQkI2RkRCQjg3MkE0Cis6MTBCNkEwMDAwNEVEMjc4REZBMzE4MjBBOTU0MjM2MkJGREVFMDQ5QTdECis6MTBCNkIwMDA4MkZFRjY0NzE4RkM1RTUyNDA2MkMwRkYxRjgyODNGOThCCis6MTBCNkMwMDBBMUZFQ0U4RUQxNDg0RjhCMDdFMDRERjBGNkRBQzA0Rjg5Cis6MTBCNkQwMDA1NEE5MUZBNkFBMDBBRjZBMUY4QkYwNUEzQ0NCRDQ2OEFFCis6MTBCNkUwMDBGQkRGNzE3RkUxNzY1OEY4QzFCRTlGRjNFRTRDOTBBRjVGCis6MTBCNkYwMDA3NUI3MzFCRkNDMENGRkRENTM0MzFEMTYxQzg3QTA1QjEzCis6MTBCNzAwMDBFNzhBODNEN0I5QTBDMTQwRkY3ODQzMDg5NzJCOEJDMTQ0Cis6MTBCNzEwMDA3NTU0NjBGNDdBQjhCM0UwMkFGNDkzOEFFODdCREFEMUZFCis6MTBCNzIwMDAyMzlEMjNFQzIwREZGREVDQ0M4NDBGNzNEMERFMzFBRDA0Cis6MTBCNzMwMDAzMzE3MkEwRjMzRTlGQkIxRDZGMEQ1Qzg2RkRCMkNBODNECis6MTBCNzQwMDBBNzA4NjE3QTRFMjAxNkY1REI5MUIwODgzMEI4OTBGNUU1Cis6MTBCNzUwMDBBOEZFNUUyMTQ3RTYyQ0EwRjU1N0VDNzQxMkMwOTdDNkYwCis6MTBCNzYwMDAwRkU5QkNDRkQ1MzU5NDBGNjJDQ0JCNDMxMEUzRDE5RDFDCis6MTBCNzcwMDBEOTE5OUNFRTlEMzBERUMwMEJEMzlGNEFCMzFERUNCNkE5Cis6MTBCNzgwMDA3MEE4N0U0ODM5RjgxRjM1Q0NERjBENDcwRUEwRkU0OTYyCis6MTBCNzkwMDA5RjdFMzNGQTI5NUI5QTUzRTcyQzAwQkVDQUYyNzkwMUU3Cis6MTBCN0EwMDAxRDFBM0M2MDlGQzRGMjEzQUZCNkQ4Q0VFQkJGQzdEMzBGCis6MTBCN0IwMDBDMzhEOTUyQkQwRUY2REVDOEMzREZGMjkxNkU2NkY4NzdFCis6MTBCN0MwMDBBOTlFRjQ2NkM3MUYzRkRGQzJFQ0U4MjQwQkU3QkIxOTU0Cis6MTBCN0QwMDBBRkE2RTlENzMzNkQ1REQ1RDZEOTYxMTIwOThBQkFGNTFFCis6MTBCN0UwMDBGMDI2OEUzRkYzQkE0OUE0MDZEQjE4QzZFN0U4M0YzNkQ5Cis6MTBCN0YwMDAyRTYwNzE4ODBENTMyQzE4NUZEMUY4OUNENjRCMDNCQzdBCis6MTBCODAwMDBEMjc5QTAzRDQ3RjkzMDA0RjZEQ0MzQTQwMUU1MjY0ODBGCis6MTBCODEwMDBEQjZGMjZGREUxQkU4RDU4MkU2QTdFOTNGOUZDRkFDNkQ5Cis6MTBCODIwMDBFM0ZFRjVFRDVDNUZBRENCQjlDNzBFNUREMUYxRDI4MDIzCis6MTBCODMwMDAzRjAyNkVBNjI3QUI1Q0NDOEU5REI2NTM4RUZDODBDMkI5Cis6MTBCODQwMDA1MUQ1MkNBMDlENjVEOTY3NDczOENGNkNBMjY1REE3NUI0Cis6MTBCODUwMDBDNEE1NjBGREQzMUUxQjk2MDNENkNFODdCRTQ3Q0JCREM1Cis6MTBCODYwMDAzQjQ1ODI3NjY0OTZDMzAyRkM3QThDRjMyQkM5QTM2NUIwCis6MTBCODcwMDBCMDg3RURBQzU4RDVCQ0ZGNzZFOEFGQUNDRDRBRUNCNEEwCis6MTBCODgwMDBGRkFBRERBNUQ3N0U4Rjk2NEIzQjY0MDI1NUFBMzYyRkMzCis6MTBCODkwMDA1Mzg2RDBGMkEyOTAxMDg2NzI0RjAxNURBODAwMkZDOTg2Cis6MTBCOEEwMDA0QTA4RkNGNjFFNzc2N0VBOEZFOEJDNEZENkRBODg0QTZBCis6MTBCOEIwMDA0MUE5NzM3NUE2REU0NEYxNTExRURBNUUwOEVEQ0E1QjNDCis6MTBCOEMwMDAwNEQwODg3NDFFOUI1RjFEMENGM0RBMkE3OEMxQkZBRkM5Cis6MTBCOEQwMDBEODkyNjBCMDA3OEZEMUE5RkM4MDdFNUY0MkU3MDk3MkUxCis6MTBCOEUwMDA1OTRBMUEwQTYxOURBQkRBQkM0RTUxNzVGMTg3OTNCNTdFCis6MTBCOEYwMDAxRTFDNDcyQjU3NkRBNUUzRDA3NkQ1Q0YwQjVFOTg2MjAzCis6MTBCOTAwMDBCNTg1Rjg0MTBGOUREOTZEOUZGREI0MTNFNkI3NEMxOTZECis6MTBCOTEwMDBFMzgyNzkzREEwNDBCREQyNTBGMThCNzYxNUUwNkI1NkE1Cis6MTBCOTIwMDAwQUU5RjdGMkE2NjYwNUUyNUIwMTJCQjkwM0ZDREM4QUEzCis6MTBCOTMwMDAyRDAzOEM3MDM1OEEyOEFGNEI5MjZDMUI0MTlGMTNBNzQ3Cis6MTBCOTQwMDAyRkVEODZCMUZERTk3Q0IyOTZFQUQ4MzFEMTcyMzlFOEEzCis6MTBCOTUwMDA0M0U0QzM5MDcyQkRBRUZFNzAzMTA5RjlCNTYyOEI2OEU1Cis6MTBCOTYwMDBCNEIzRjlGQTFGM0NDQ0U4MUZEQ0VCQzJCODlGNDZCRjZBCis6MTBCOTcwMDAyNURDNUZENkU4QjcyNDg5RDM1M0VBQ0Q4RjA1Q0Y0M0MyCis6MTBCOTgwMDA0MDBGMEE0RjAzRTA4QjNFRDc3MEY4REM1M0M4NTQ4ODUxCis6MTBCOTkwMDBCQkI4N0RDNDIzQzRFMDZCRjNCMzQxMjZDNUMwQkFGRjc2Cis6MTBCOUEwMDBCQUZDRkFBOUQyNjA3NDFGMTY0M0U0QzlCMzYyQ0VENEJDCis6MTBCOUIwMDBFOUI0RkMzQjRCRDE2NjBCRUEwRkFGMEE3MkE0RjlEOThDCis6MTBCOUMwMDA0RjU5OTg1Q0Q2MEY1NjEwN0YwRDMzRjI5RjY2RjEwOUUwCis6MTBCOUQwMDA4MkVCNUVDMzhDOTI2N0MwMkVBMEVEQjc1OTUwMEU2OTAyCis6MTBCOUUwMDBGQkIxRjFEQjdCMEEyNzFBREE3QjBBQ0JCNEY2M0JCMTU5Cis6MTBCOUYwMDBCREVERkNFRDFCMEEyNzFCQzcyRjJDRDdEQUVGNDVGODRFCis6MTBCQTAwMDA5REU3ODdERjczRTUxNEUzRjg1NzU2NjJGQjgwOTVEMTE1Cis6MTBCQTEwMDBBQjM3Qzk4Njc2Q0QwQUJCRDcyNzMxM0IyQTAyRUZBNUMzCis6MTBCQTIwMDBFNDMxMUJBMTlFQThGMTAzRTlGNDgxRkRFRDZDNDkxQUY0Cis6MTBCQTMwMDBCRjlBRThGOUEyRTAwRDgwQzM0NUE1NDVDRjE3ODkxMzQ5Cis6MTBCQTQwMDAxRDA2N0U0Q0YyMjUxQkNBQjQyN0NGQjFFRkYwMzIwQzk1Cis6MTBCQTUwMDBFMkI2MjEzQ0NBMTAwNUY1QzVENDIxMzY4NEY3OUU3RDk3Cis6MTBCQTYwMDA3NjJDREYzMzk5QzE3QkNGMTAyN0NBMTlBRTJEOTQ4RTY3Cis6MTBCQTcwMDBGNzI4RkVDQkY1NzYyQkFDNEMxMDRBN0E1M0Y0N0YwNEIyCis6MTBCQTgwMDBGODhEQkU1NzJERjBERTIxOTIxQUQ0Q0Y1NjgyRkFFOEY3Cis6MTBCQTkwMDA4MUNDRkNBNzgzM0FGQ0FDMUM0NkU5NEJDQkE3QzFGRThBCis6MTBCQUEwMDAxOTE4QzVFQjAzQzM0QUQyOEE3NUUzRDQwRjUzNjY2RkU2Cis6MTBCQUIwMDBDQzY2RUZFNzNCNjFCQ0EyMUVDMDQzNDBFOTFEMDM3NkE0Cis6MTBCQUMwMDBBNTc5MUNFQjg4ODk4NjcxNkMxOTY1MzhDRTM3QTY3MTBCCis6MTBCQUQwMDBBQzE5NjVBNjcxNkNCMzM3RjJGNzdDOUMzRkMzQkNFMjJFCis6MTBCQUUwMDA4REYzQzA4OEM5QzZGOTY0OTRFMzM4NTZEMTM0OUY4QzZECis6MTBCQUYwMDA3MkQzMzgwRTM2MUZGQTlFOEY2MzE3Q0YzNzlGOTE1MzNDCis6MTBCQjAwMDA4Q0YzMTk1RTg5RTNBNDg4OEEyMTZFNjUxRDVFNjkxQTJCCis6MTBCQjEwMDBDNzg5RTNDMDdCMTg4N0E0MzNGRjQ2QjFGNjk2MjBGREEyCis6MTBCQjIwMDA1RkI2MTNCMEE3MTVBQkZGNTlFODk3RkNDMTRFNTA5RjA1Cis6MTBCQjMwMDBBODc0REM0MUEwNTc5MjcxQkZFMDNGMkNDOTM4OUYyRkY5Cis6MTBCQjQwMDAxRDk0RkU0RTNEOUQ4MzlBNUQ4MEY2Q0U0MjBFMjIwOUU1Cis6MTBCQjUwMDBENUEzN0Y1RUNENzk3NDQxQ0JGNTE5Q0JFMEQ5MzYyREQ1Cis6MTBCQjYwMDBBRDE4RkNFQ0Y1MkUyRkM0NEZDRkI0NEQ1M0U2QzdCMDQzCis6MTBCQjcwMDAwQjE2MzZDOEM3QkEwQ0ZDQ0JGNTVFMDFDOUFBMDEzRjRCCis6MTBCQjgwMDA4QkRCMDE1QUY5MThENTVGODRFQUFEOEZBOEZFODJFN0Y2Cis6MTBCQjkwMDA3MTk5RUE2OUZBRkUyOEQ1NkY0NEQxQzNCQjBDREIxRDRECis6MTBCQkEwMDA5MzE4MUU4RjM1QjE3NUU0Q0I3NTg3NjU4Q0YzMDVDOTg1Cis6MTBCQkIwMDAzQjU5NzQxRTM3RjM2OTJDNkM0ODYwQkUwMjg3MjNDMDYyCis6MTBCQkMwMDBFOUQxQkJEQjFBREE4OEY0RjAwRDA1QkI4NzM0MEVBMDhGCis6MTBCQkQwMDBCOEUyRjU0NjAwQkVBOEI4MjQ2MzcxMjhEODQ3M0Y1RTk2Cis6MTBCQkUwMDBCOUZEMzc1MEVENURBMTc4RDgxMjNBREZEOUFERUJFNDVECis6MTBCQkYwMDBBMUI0N0M0NkVFQkFEREVCRDRGNTMzNUJGRTA4RTY2RDBFCis6MTBCQzAwMDBBM0ZGNDEzRjczRkNCNEFDMUJGRkQ2MzI2M0Y5MzYyMjZECis6MTBCQzEwMDA0NUNCOTQ2RTMzQzQxMTlDMUU3QzVDMzUyNDAzQkQ2RUYxCis6MTBCQzIwMDA0RTY1RjBEQzA2Q0ZGMUYwRDk4M0Y0QkFEREMzREE2QUYxCis6MTBCQzMwMDBGMDA0RUU5MzQ5MDREN0EzQUU4MUNDQjgxRDg4RjVGQzdGCis6MTBCQzQwMDBEQUJBNjI4MkVGNzZEOUU2MkJBMkY0QkNGRDVFMTFGMTdFCis6MTBCQzUwMDA2ODg2Qjc2QjVGODJDRjQyRkRBQUFFQzZDRjY0RjAyRjc1Cis6MTBCQzYwMDAyRjA0RkYxRDRCOERERjQ5OTA4REE3RTE1NUUzODM1QkNBCis6MTBCQzcwMDA2NjRGMUQ3MDU0NTc2RjhFRkZBQTAxNDc3NUZDNzI2QjlCCis6MTBCQzgwMDBEOUY1ODZGMjZEMzU3MzBDRjVFRjU4NUE2Q0Y4NUUxQ0Q5Cis6MTBCQzkwMDA1QzY0RjgzRTdGRTU2MjQzNzk2MUMzQkQ4NkZBQTU4RDk5Cis6MTBCQ0EwMDBDQjBDREYxNzg1NTYxOUJFNTc2QzU5NjcyODU3ODUxRjZGCis6MTBCQ0IwMDAzM0Q0MEZCNDM1MUJCRTVCRjY1RDdBMURDODYzRERFRjcwCis6MTBCQ0MwMDA0NDAyRjZEOTE3Q0U2MzBGODE3REY1ODU1MzQyQkZBQTkyCis6MTBCQ0QwMDAxQTc4OERDQUUxODlEQTM0RTRFRjkzQjUyQTNFQ0ZCNEZECis6MTBCQ0UwMDBFNUUyRkU1OEMwNDFFNTk5QUVGNTFCRUEwRTJENUIzOTQxCis6MTBCQ0YwMDAwNUY0MDhBRDRGNzVGODEzNzU2RjJEMEI1MkRGN0QyM0RBCis6MTBCRDAwMDAwNEE5MjlERjhCOEQwQTg5MEMwMDNGMjZCOThGQUY3QkYwCis6MTBCRDEwMDA0NURERjdBRTBCN0M2RkE0MEI1NjZFRkZFRjYyNTdFQzYwCis6MTBCRDIwMDBGNzNENDJFRjE4QjBFRjgyMUY1ODcxRkYyNjlFRkQ0MDhECis6MTBCRDMwMDBGRjg2OTIxOEZFODNGNkVDODZGODg2NEVFRkJDMkMzMjE2Cis6MTBCRDQwMDBCQkZBNzJCMUUwNjU5MTNFMkIxNTI2RUY5NTNCMDYxN0M1Cis6MTBCRDUwMDA0MEJDQTA1Mjg5OENBOTg5NjE2N0Y3OEQxN0E2QzAwQ0Q5Cis6MTBCRDYwMDA4MjdFOThCQzJDMEEwRDhEQ0EyRkQyNkZBNDQxRUVBRkYzCis6MTBCRDcwMDBCMUY4Rjc4MTdFRUVERTJGQjJGRDgxQzhDMTBDRDhBN0U1Cis6MTBCRDgwMDBCOTVDRjRCRDBDRUY0OURCNDA1QzFGREZBREY1MEQzODRECis6MTBCRDkwMDAzQThBOTBGNzZCNjdFMkYzRjdCNTQ1MDMyMDdFRjRDNzY0Cis6MTBCREEwMDBEQUQ5NThGRUIwRDY4RkNGQUVEQTMyN0M3RTU0NUI4M0MwCis6MTBCREIwMDBERjhGRDYyRUM1RjJCMURBMjAzRTRGRDRBRUM0RTdDOTJDCis6MTBCREMwMDBEQTA2RkNERTVEREI4OEU1MzNCNTIxN0M2QTcyQTBEOTNBCis6MTBCREQwMDBBMzI0ODVEQjdGREM1RUE3MkIwNzk2Q0ZGMjM5ODhGNDlFCis6MTBCREUwMDBERjlEMjhEN0RFMzQ5MEVCQjNDRTJGQzc4MDlEN0JGNjQ2Cis6MTBCREYwMDA3RDJCMDZEMUUzRTFDOUNDNkZGMUU5RTdDM0Y1QkUyNEExCis6MTBCRTAwMDA0NEU5OUZEQkZGQkJEREMxRTg2M0I3OTA5OUUwOUZBRERDCis6MTBCRTEwMDAxQUFEMTA4OEFCM0I1RUZFMEVEQUNCRjRCRDQ0NTA1RjJBCis6MTBCRTIwMDA4NkJDRkE3REM0QkVGRTYxQ0U4MzJFNEMyN0FERkVCMTJBCis6MTBCRTMwMDBDN0ZGMkI3RjVFMzZEMDg3RDFENzcxNTBBQzYxNzQ3QjQyCis6MTBCRTQwMDBEQTBCNzREM0UxOEZEOTY1M0JCOTNFMzdFMTUxRTI3MjI5Cis6MTBCRTUwMDA2N0M2RTdFOTgxMUEzRTNCMzMyMERFNTIyNTE2NTkyNDk2Cis6MTBCRTYwMDBGQUVFNkNBQjE1RTc3NUI2M0Q4MUVENjM3QjUyMkUyQTc5Cis6MTBCRTcwMDA5RTU3QjFDNUVFRDFFQjg3QUE3MDkyQzdBODJGMDY3QjVCCis6MTBCRTgwMDBGNEZBRTI2Q0M3RDM2RTkwRkIyNTY5MTZDRkQxNUNFMDYzCis6MTBCRTkwMDAwRjFGRTcwRkM2Nzc1QUZGNTVFMTRDOEZEM0QwOEZCMUY0Cis6MTBCRUEwMDA3Q0I2NDE5OEM5RjYxNUQ1QzQ5QjYyRjgwN0RBNzM0OTg4Cis6MTBCRUIwMDA5QUUyMzk0QUY1QzJDOTJEMjMxMzYxNUNFQUM3Nzk2MDU5Cis6MTBCRUMwMDA5Q0VFNUE4Rjg3OEQ5QkU2RDFGMzY1RTU1MjA3RDZENzU2Cis6MTBCRUQwMDBFMDhCRDdFRjNGMUEzRUQ4RjFGQkQ4QzY2MjREMTBBN0QyCis6MTBCRUUwMDA4OTU3M0YyRTNEQTRDRjE1RjAwRjQ4QkJGQzI1QUMzQjM2Cis6MTBCRUYwMDA4RTJDNkRERDkxQjBBQ0Y1MUIwODhCNDFFQkU1RjBCRUVGCis6MTBCRjAwMDBDNTMwMUU2REE3NkEzRTM0QjQ4QjRGNzc4OTFDRDNFOEM5Cis6MTBCRjEwMDA0OUY1RTQ5NTNDM0Y4NDMyMzNEMkQ5NEY3QjRDQTRGREE0Cis6MTBCRjIwMDBGNTQ4Q0U5NTEwRTdDRDk0NTRENDc3MDExODg4RjI1Mzk0Cis6MTBCRjMwMDA5NUFENEJGMUFCODhFRTRFOEM3QjRFRDRFNDVFQkRFNTA3Cis6MTBCRjQwMDAwRjk0RTUzRUY5MzcxOUUzMTlFNENGQjQ3N0ZBNURFNkNCCis6MTBCRjUwMDA1RjE3OTAyMjM3MzgxOUYzNUEyQjY2ODE5RUZDQzRBMkQyCis6MTBCRjYwMDBEOTAzMERGOTMwRUZEM0M0ODJGQkY5QTdDOURCRUU1QzJFCis6MTBCRjcwMDA5RDVENTYyNkYxRjhFNDRBQjYzRTA3RTk3RjMwM0Y2QUY4Cis6MTBCRjgwMDBBNzE5RDZFQkQyNDY2M0I5ODREQzkwMEFGMjUwQjI1RUIwCis6MTBCRjkwMDA4NjFENUJCMjA4RDY3QkREQkVDOTZDQzk4M0YzMkUyNTM2Cis6MTBCRkEwMDAzNUY1NjBBN0FDOTZEOTNFRUEzQzBGOTE4NjUyQjhBQTA3Cis6MTBCRkIwMDA3NjNEOTkwRkY2NkM0MDYyRkE1RUYzOUYxNzI1MzNCODExCis6MTBCRkMwMDBDQjUzNDI4QThGN0VGRkI4MzVGN0U2RUYxMTY4MUZBQTgwCis6MTBCRkQwMDAwN0JEMTY3NDExNkZBQzc4Q0NGQzk1NDZGODJFMDRCRkUzCis6MTBCRkUwMDAxOTVFNDI5NjFCRTBEMEZBRDVFMDEwQjcwODMxRjMzNDYxCis6MTBCRkYwMDA3RTI2MDkzQ0FFQzNFNDYzQUQ2NEI0NUYxRkUxNzhEMDM0Cis6MTBDMDAwMDBDQTFCNENFNTI2NTM3RDhENEY2NENFMjc5OTkyRkYxMUI0Cis6MTBDMDEwMDBEMDNGNTVCNkRFNDJCNEQzMDhFNThGRUM2ODNEMjU1QUQzCis6MTBDMDIwMDA2RkMzRjlFQTU5QTE5RTg4RjU5QUE0MDlGMUVCRDlBMzQ3Cis6MTBDMDMwMDBGRDM1QzdFQUFGNkFEN0I2MTc4Mzk0OUZDQTVGNzhENDM1Cis6MTBDMDQwMDAwRDQxREY0RkE0ODY1NDg4N0Y1NTZFQkVERjBENzgzQUQwCis6MTBDMDUwMDAyMTA1REQ0MEVGNEY0MjYyQ0NCOEUwN0I3REY4RjIzOTNDCis6MTBDMDYwMDAwNUYwMjM5MEI1MjlERTlGN0JGMDVBRDBENzVGNkU5NkZFCis6MTBDMDcwMDAzMTJGMjZCMEM1MUFCMTUyM0VBRTZFNUQzNDBCRTJGN0Q5Cis6MTBDMDgwMDBCNDdDODQ5NTFGRjgxNEY2MEQwMzZENDY3QTk2M0ZGQjM5Cis6MTBDMDkwMDA2ODJBQzQ4OTI4MjY5OUJENEQyMjY4Nzc1NDZGRkE1M0JGCis6MTBDMEEwMDAyMUU4RjEwMEU5NDUzRTM0Qjc4M0YxQ0YyNUEzREMxNzQxCis6MTBDMEIwMDAyQjg5RkRCRjZCRjkwQTAxMkU2NzgxRDYwNzNGODVCQzJFCis6MTBDMEMwMDA4NDgwODk3RkNBRkFENjkzMkUwNUUyMDgxRDkyMkIwNTNCCis6MTBDMEQwMDBGREYyRUY5MkVGODIxRUQwRjA0MTQyQ0M5RUE4REJCQTc3Cis6MTBDMEUwMDA2MURDMTEwQTRGRjdBNjdGNzMwQjA2QkY5QkYxRTFEOTA0Cis6MTBDMEYwMDBGMEZDNUZCREE0QzZENzMzNjdCODNGMTQ2RDE3QzI3Njk2Cis6MTBDMTAwMDA2QTFCQjM3RjQ4M0I3QjU2Q0ExMTM3RDg5Qjk1Q0RCMjhCCis6MTBDMTEwMDA5NzcyMjhBOURDRjZGNDMzOEY4MzlGRjY4MTE1RkRCNDVFCis6MTBDMTIwMDA4QTZEQkY3OTc3MzIyRDU3NkM5NzUzNjZCMUU5Mzg4NUEwCis6MTBDMTMwMDBENDI4NUQwMkY0N0Y0QkM3NDdFOTUwRkVFQkRGMjhFQUM1Cis6MTBDMTQwMDA1OEY2RkVBN0M5NTE3QTU0NkNERkFGOTBCMUZERjEzN0I0Cis6MTBDMTUwMDAyREJDNUZFOTcyQzZBMDRCRjg0ODIxRDgyQjc1NUJCRjk4Cis6MTBDMTYwMDA1MkMwRUZGQTY0OUY0MDA2NjVGNjZGNUZENkZDMUI1QzE5Cis6MTBDMTcwMDAwRjAxNEY0ODQ3NEVBNzNFQkFGNUEzNTdFNERBOTdGMkFFCis6MTBDMTgwMDBCMDlFMDdGNDY0M0M3QTNEQzdGNTcyRDUyRTE3NDk4MkZDCis6MTBDMTkwMDBGOEU3RUZBREExNTk0MEM3RTdFRjc0QzMzQzhFNEIzNUNDCis6MTBDMUEwMDA4Q0FGOUZCQzNGMTVGNkZGQ0FFNDYwQUEwNzlGRUM3REU5Cis6MTBDMUIwMDBEOTUzNzcyM0JGOTUwQTM1QTk2QzFGRDMzNzk4QzdDQkJFCis6MTBDMUMwMDAwN0MzRkMxNjM2RkQwOEU3NTc0MkZDQzg3NzY1NEY4QTVGCis6MTBDMUQwMDA0NTEwMUZGRTQyMjIzM0I3Qzc5MDhCNkI2NEI2RkY3NEM1Cis6MTBDMUUwMDA3Q0EzMTU5MkZDQzg3MUIwRjNDMUJFN0U1QkM0MzgyQjMyCis6MTBDMUYwMDAyMThCNzExRkVDNkUyRDhFNEI5NjYwRjkwQkJFMkYzNTg3Cis6MTBDMjAwMDA0QUI2NjhGRUExQ0RDMEFGOUIxRUU4MDRGQTlDMUNFNkFFCis6MTBDMjEwMDAxQjA0NzA1MjNDMDQzOUJFMDREOEVGMTcwRkNGMThDNDZBCis6MTBDMjIwMDBFOEMzRjIwREIwMURENUZGRDNFMDNERDRFRjk0NzE5RjZDCis6MTBDMjMwMDA1MEQ3OEVFQjRCMzZGRTVEN0M3QzBBQjcwM0Q2QjNFMzVBCis6MTBDMjQwMDBBOTZDQkZEMjNDQkZBNTdDN0VGNEFGOTNFOEY4NEIyNzI2Cis6MTBDMjUwMDBERjRDREUzN0FENjJGMkFEQzk3QkU4RkE5OUYwRkRGMzUxCis6MTBDMjYwMDA3Nzk4RkM0MDNCNTgzRjI4NUM5MTQxRjg3REZGNEQwMjk4Cis6MTBDMjcwMDBFQTAzMkI4OUM0OTJFQjREMzI5NzZCRTNGNzAwOTU1Mzk5Cis6MTBDMjgwMDA4ODBCNTBCODI1Qzg2Nzg4RjIwOUVEM0YxOUYxOEY3RUY5Cis6MTBDMjkwMDA0OUM5N0FEQTRFNjc5RjA1NjAzQ0FDQTc0NERGRUJENjBDCis6MTBDMkEwMDA4RjUyQUUwNzY2Q0E0NkY5Mjc0RDAzMkZDQTVFQUM5NDdCCis6MTBDMkIwMDA0OTEwNENDQkNBMEZBQ0U4Nzc1NzZFOTM4QjYwREVBNzYyCis6MTBDMkMwMDA1QTBFQkVGQjYzQ0FEN0E3QzI5QTlDMUFGNUE3NTk0RTRECis6MTBDMkQwMDBDQjc2NkMxNjgwM0ZDRDcyN0FBQThDQUVENkIxRTQ5NDQwCis6MTBDMkUwMDBCRThGMjlBNzY1NURGRjU3RjRBNzg2Qjc4MDA5NkY1NEY1Cis6MTBDMkYwMDAwRjBFNEZCMkM0Qzc5RjU5MEZCQTY0MzVBNjFFQTQ3RjU0Cis6MTBDMzAwMDBFRjkwRkNGRTdDQTdGMTlCQzY2N0Q0NDIxQjBFRkFCQkU0Cis6MTBDMzEwMDA4RjFGMzU3RUVCRTM0NzhEREZDQ0YzMzRFMkNERkM3RDIwCis6MTBDMzIwMDAzMjE4NkExNEFFQTJERDMyRkEyNTk1RUQ2Q0ZGODZCNjlFCis6MTBDMzMwMDA3Qjc1NjgxRUUyQzc4N0NCMTc2OTc4NzU2ODhBQkUxQzUzCis6MTBDMzQwMDAzMjk1QzNBNkZBM0U1M0I5Qzg1NERGNkYyQUQ3MThFQTBDCis6MTBDMzUwMDA1N0I2MUQ1NDU4OTI1MUM0NTBDRkJBRjQ3MUYyNzEwQ0IzCis6MTBDMzYwMDBGQjVFNUI2NzAyQUQ5RjJBNDFFMDg3RjQ1RTA1RjQ5Q0FCCis6MTBDMzcwMDBCQzlDOUE2NjEwM0ZEQjJCQTJCRkQ1QTNGNkJBOTNFOTBCCis6MTBDMzgwMDBGQkZCRURDQzhGRURGMUYwNzIxMjJCRjcwRTU0RUE0MTZFCis6MTBDMzkwMDBDRjY5RUY3QkVEMkNDRUQ5NTNENEVCNEVEMkY5Rjc0N0QyCis6MTBDM0EwMDBEQTQ1MzdFQzA3Nzc4NTU4M0U2QTdGNzhFQTUwNkVCQUVGCis6MTBDM0IwMDA0OEJDRUYyQzJFMzg0Mzc0NjYyQzA1RkZBRDQxRjQ4MjQ3Cis6MTBDM0MwMDA2QkI4NjBEOTJENkVEODc3RUI2OTFGNzlERDZDRkE3RTdBCis6MTBDM0QwMDBFMTIxMTFDQzY3RDJFMzcwOEYwM0I4NDhEMDI3MERDRThFCis6MTBDM0UwMDBFN0Y5MTNGNEVGMDQwOUZFNzIwQUU0NERCNDMzRkI3QTYzCis6MTBDM0YwMDBDMTFBOTMzREVDQkM0QkMxRkNCMkY1QkFCODk2OEVGRkE2Cis6MTBDNDAwMDBDQjc5M0Y2NTREQzZFRkU1NjQwREYyNUZCOTQ5MUVGQzdGCis6MTBDNDEwMDBEQzFGMzhBQ0M5NDMwRUM5NjFGQkRCODRGOUIxNUNFRkFBCis6MTBDNDIwMDBDRTEwQjNBRjlCNERGMURFRDMyMTYyREVFQ0Q5NzY5MTE1Cis6MTBDNDMwMDBENEMzM0M1QjA0RENFNzI0QzE4MTI4NTdENUE0MTdGNTlECis6MTBDNDQwMDA5RDg2OTc2RTkwMUIyNUJFM0VFQURFRjkxRkY5RjcwMTI3Cis6MTBDNDUwMDA3RkJDRjg4NzcxNEZEMDY3Rjc4QjFGOENEOTAzRTU1REUwCis6MTBDNDYwMDBFRjY1RkM4MUY0QUYzRjZEREZEN0I4OEZEOEIzQ0Y4QUNCCis6MTBDNDcwMDA3MUFFOUU3REFGNjVEQzA3RTU5N0FDMThFN0VBNTk2RUIzCis6MTBDNDgwMDBDNTdEOTRFMDNFNTc2ODM0N0MxRkM2RkM4MUJBQkQ1RjExCis6MTBDNDkwMDA4RDYzNzk5MjJCOTA0RTdGOTY5OTNGNzJCNkZEQkYzRTg5Cis6MTBDNEEwMDA4NEZDOTFCM0VENzQ1NjYwMTdFQzRCNDBCOTA5QkM2NDQxCis6MTBDNEIwMDA0N0ZGQkI2N0VGNTdGOTdFRTczRjZFM0VENTBBRjEyMzkyCis6MTBDNEMwMDBGRkI5QzhFQzFEQzBBRjQ5MkMxRTFDRDgzM0U5NjlDOEEwCis6MTBDNEQwMDA2RkFFNkFEREFGNDA5QzdEREFDQjdGMTkwNzdBQjI2NzE5Cis6MTBDNEUwMDAwN0IzNzdDRUM4NUQ0RkMxN0U5ODU1Rjk3NEI5NENGMTRBCis6MTBDNEYwMDA3QzA2ODQ2NzA4MjE0RjJCRTNBNzA1QjM2M0UxODVFMTQwCis6MTBDNTAwMDBBMTg3RTIwMUU2NDVGMTUyMDZGQTNEMUUzRTMyOTQ3RkQ0Cis6MTBDNTEwMDA1NjdDN0M3QTNCRDM2M0RGQzUzQ0ZCMjg1RTA0MUY3QkUzCis6MTBDNTIwMDBFRjBBRDkwNDlDM0Y3QkJGRUZBQjcxQTA2NzRFODU5N0E0Cis6MTBDNTMwMDBBMTNENzJBMTc5NUZBMUIwN0Q5NkZGMzlGMzE2MjIxNzU0Cis6MTBDNTQwMDAzM0VGQjlGRkI0RjQ2NkZDRkYxMUFDQUYwM0ZCQ0I0MTkyCis6MTBDNTUwMDA3RjNFREY3NTBGOTY5Rjc3NzkxMURFOEI5NEZGOUZGRUVDCis6MTBDNTYwMDA0RkEzRkIwRTRBNzdGNzg1RTlGRUM0M0ZFREJDMkY0NDhECis6MTBDNTcwMDBGNzQzOUNFRTJFMEZFQzJGRjdFQ0ZEMEJDNjREQjVGOUYzCis6MTBDNTgwMDA1RjY4REUyRkZEM0YzQTZGQ0Q1RTdGQ0RBMkJFOTM0MzQ1Cis6MTBDNTkwMDBFQjFGMjIwREVGOEMxMTIwN0ZGMUUwNjEzODAyNTYyMDU1Cis6MTBDNUEwMDA5MEEyNThGNkM4NDk4NUM1M0YwQTA0OTYyNzQ4OTIwNEM4Cis6MTBDNUIwMDBFRURGMzFCRjY4MjhCNzEzODZERTU1ODI3NkM2RDBGNDI5Cis6MTBDNUMwMDBCNTY4MUYxMDQ5NUQwRkZCNzFBRjY1Q0NGN0IyN0NCMDQ5Cis6MTBDNUQwMDBGMTc4MEVFNTM1Q0YxNUJDNkNGNDBGOUYxMDg4MEZGMjgzCis6MTBDNUUwMDA4Njg3NjZGQ0IwMDNFQ0Q1RjQ3NDExRUQ1OUZBNDQzQjMwCis6MTBDNUYwMDBGNjE1Rjc0Q0Y2QkU1MjMxRjg0NTU3MTE1RDk5Q0VBQkEyCis6MTBDNjAwMDAzMEM1RThGRjRDRTdGRENEMjAyM0RFQzlBMUYwQ0ZCMDU3Cis6MTBDNjEwMDBDOTlFMTA0NUQxNTU1M0ZEMTJDQ0U3QUFDMTAyNjlEMDdECis6MTBDNjIwMDBFRDA3NEQzN0Y5NDlBRjgyNUZBQjhCOTdGREFERjg0QjA2Cis6MTBDNjMwMDBCNzMyM0ZCMjQwMThCMUJFMDhGMDM3NENDNDc4RTAwNUJECis6MTBDNjQwMDBGMTQ3NThGRUQ3NkI5RTFDOTZENzJBNzkxOUZFOTJBQkZDCis6MTBDNjUwMDBCQzE4NEZFNTdFMzM4NDA1QzA1RTkxOUNGNTlEMjBCN0U0Cis6MTBDNjYwMDAxMkExN0UyRjgzMUZGRDY1Q0RFRjhEODc2N0MyRkQ2ODA4Cis6MTBDNjcwMDA4OTBGQTlFMTVENEExNzMxNUY1NUQ3MUZFMjQzQTNDNzcwCis6MTBDNjgwMDBERjRBMDc4RDdFN0YyRjNEQ0U5OEU4OTFGRUI5NDcwMkE1Cis6MTBDNjkwMDBGOTlDQzZFREZGRTk5Rjc3OEE1ODRFRjc0QUI4MUZDNTQ3Cis6MTBDNkEwMDBFREZGQTlDRTI0MDlFQ0ZGMkJBNEMzMjJDODY1QTlBREQ4Cis6MTBDNkIwMDBFRDZBODhEM0RCQkMwMkYyRjUyNUREMTZGNDZGNkM3OUU4Cis6MTBDNkMwMDAwMkUyM0RBQjUxQzJGMjYxOEI2NzAyMThEQUQ3N0U2RjhFCis6MTBDNkQwMDBEN0E5N0IwOUM0ODc3RDBBMUFERUE0ODhDNUU3RkZGQ0I5Cis6MTBDNkUwMDBFREI3NTNCNEYzMUFGODlEOTA2QkE4RkZCNUEwODk0NDM5Cis6MTBDNkYwMDAxQzE0NEYwQjI1MTI0QzRDODZGOEFFNDAzRTMyQzQ3N0NBCis6MTBDNzAwMDA4RDY1RjhGQjdFNkFCNDlGMEJENThGQTc0N0ZFRDFDRjBFCis6MTBDNzEwMDA1RDU0NkY3RDQ0OTk2MzM3M0M3MTVGODVCMjg0Q0UzRjMxCis6MTBDNzIwMDBGRTZFM0JDMzU3RTA3NTEyMUE4MTcxMDU5RjU4QTREQjVBCis6MTBDNzMwMDAzNzdCRDBDQUY0QzdBRTNGRUVDODg1QjhEOEQ0OUVFQ0RDCis6MTBDNzQwMDA0NEE2NEY0N0ExNUYxMEUwN0VDMTU5QTIyNjQyRkVDMTE4Cis6MTBDNzUwMDBEOUY2OTE4OUI4MkZEODIxQkFGQzMxRTIzMjVCQjlGRjAyCis6MTBDNzYwMDBGQ0FGOTA0RjQxOUYzRDlCNDgwMzlDQzNFODIxQkQxOEZGCis6MTBDNzcwMDA4RjBENkVCMkM1RENERkJEQzdBQUM1OUIzOERERTg5RjUzCis6MTBDNzgwMDBBODlEMzc1MjMxNUYyNDk4QThBNzVCRjdBQzRGQTQ3MURFCis6MTBDNzkwMDBGREU5MDA3RjFGRTlGNjRCRkU1RUZDODJCRjBFRjhERDZGCis6MTBDN0EwMDA2QUVGMkE4Qzc1MUU2QzI1QzdERkI1MDdCRUM2MzhFNjUyCis6MTBDN0IwMDA2NUVEQ0QxNkUwREZDQjM2NTkwQ0ZCOEQ0MTJCRjdCQjc5Cis6MTBDN0MwMDBDNjkzRjEwMEQ3QjUwN0VDQUUzQ0EwNEI4N0U4ODVGQ0RCCis6MTBDN0QwMDBDMTQwRkJBNzhBM0ZDNkJFOTUxOTlGRDAzRkM0QzVGNzhECis6MTBDN0UwMDA1OTU5OUM3RjhGMUM5RTBGNzhERDczREE4NkY5MzlCQjBGCis6MTBDN0YwMDA5NTg2OEE1ODcwNUU2MjY3N0E2RTIxMDlERjM5MkVGMzVBCis6MTBDODAwMDA5RjBGQkY1MzdCOUM5MTAyRjAzMzM3MTExRUM3MzBGMzRCCis6MTBDODEwMDAxRjQxM0UzRUJCODVFMEY5NTBGMDRCNDEyRjlDNkQ2MUJFCis6MTBDODIwMDBFNzgwMjk0QUQ2ODIzRjRERTVGRDA3RkFCOENDMjU2RDUxCis6MTBDODMwMDBEQkZGMTVFQzgwRUE3NkMxMDNBOUIzRDU1Mjk3MDJGMTZDCis6MTBDODQwMDBENjQwNUI5MjA4RUI2RThFQUFFNTU1N0FDNkRFQTQ5M0JECis6MTBDODUwMDA4QjdENTY5NjZGN0M3MEYyOUU1QjYxRENDRkJBMTUwMkMxCis6MTBDODYwMDBGNjg4RUY5NTVFMzdBQ0RCOUZCNUU3MjZDNkNBOUJENzQ3Cis6MTBDODcwMDA5RUJGQUUyNTU3NEY5N0EwMUY4Mjc4MzdGMzQzNzY4QjI0Cis6MTBDODgwMDBDMzUwRkU5RUU4MUYwMkYyNzVBREI1RUIyRTZGMENGQTk5Cis6MTBDODkwMDBGOTZEOENDRjJFNUFCRjg1RkUzRkQzNkZFRjY4RkFDRDZFCis6MTBDOEEwMDAyRjE2RTlFNDI4Q0JENjRGQkYwRDhBQTVERjk2MDhFQUZDCis6MTBDOEIwMDAyMEMwRkI5MkJEMjMwNzAxNUQ5NzFDOTIwN0M2RDI2RjczCis6MTBDOEMwMDBEQjZBRDk3RURFMEIzQzFGQjZBNzk1RUFCN0NCNzVGQUJCCis6MTBDOEQwMDBBREQ1ODY3OTcxRTY3NkM5MzYwQjVGMTcyRkEwREY0MjlBCis6MTBDOEUwMDBGRjNERjJCNzBERjQ1QjhDRjk4RUI2MzFCREExRTlCNzBGCis6MTBDOEYwMDA3MUVENDc1MEJGOEQ2QkI1MThGMjQ2RDM2RDE3RDI2RkVGCis6MTBDOTAwMDBDMkMwOUJDMDFFRUU5MEJEMDkzMUY4NjcxQkI3QkY1RjY4Cis6MTBDOTEwMDBFMDc5NzgzMDBFRThCOTVCNkQ2QzdGRjM2MkY1NUNCNjU4Cis6MTBDOTIwMDA5REQxRkI4MjdBRUVCRjA5Q0Y5QTlFNUJCMjUzM0JFNzYzCis6MTBDOTMwMDA2OEU2NDNBNkU3OTZFQ0E2N0E0RTAwN0U2NDdBNkVDOTU2Cis6MTBDOTQwMDA1RTc2OEY4MzU5QkY2NUY1RDM2RjA0RUI1NzQ3NThGQjZECis6MTBDOTUwMDA0MDVCRTY4NkI5QjRCRkYxM0VEOTZCQTNGNUM3NDdGNTk2Cis6MTBDOTYwMDBERDA0QkRCRUJCRDVDNkVFNURFOEE3RUYzQTJFNEVERkI3Cis6MTBDOTcwMDBFREU0RkE4RUVBQjExMUEwNUZDREZDRTE2RDM3RTYxRDYyCis6MTBDOTgwMDBFRjk5NzRCQ0U1RDcyMDJGNkY4OEI4NkY3ODk4OUY0QkNDCis6MTBDOTkwMDA3QjczRDJGMTNDRTBBRjE2MUJEM0JGNzU5Q0ZGQ0VENEE2Cis6MTBDOUEwMDAwNkIxRkY2OUFGQjBGOTU1Mzk1OTNFNzI3NTJCQjMwRjE3Cis6MTBDOUIwMDBBQjVCODQ5MDRBRkY1OTM4Rjk2QjA1RTA1RkI0NTcyMEIwCis6MTBDOUMwMDA4MzY4Rjk3QTJCQUI0RjlFRDVGNkJEQzhBQzFDMUQzRkQyCis6MTBDOUQwMDAyQzk4NTg4MTcxRkIwNTEyQjE0MTVDQkVDMjU5RjgwOTBGCis6MTBDOUUwMDBEOEJGMTUxMzU5MUNCRjgyQkY1Rjc0QThBQjFFRTJEOTE0Cis6MTBDOUYwMDA4QjFFMTM3MERGOTNGMDdDMDAyREJGQjFCNDdEMTlDNjgwCis6MTBDQTAwMDA2QkNENzkwMTlBM0U1RjE0MzJCRUFGMzBFNTMzMzZGMzE5Cis6MTBDQTEwMDA3OTVFMkY3NjIxNUVDODVCNjJDQ0JDODQ2NjMzM0UzQTc5Cis6MTBDQTIwMDAzODNFMzY4OUI4NkVGNkUxODNFMjQ3Q0RFQzhGMEY0QTg3Cis6MTBDQTMwMDBEMTU5MzlBOUQxRjkyRjdBODNDRTJCMkYzQTJGMEQxRjM3Cis6MTBDQTQwMDBFNkY5Njk3MUU3MEFERTJFREU3QzM1RkNGNTlCQUY4NkUwCis6MTBDQTUwMDA0RkQzQkM5RjA2QkQwMTBBMjE4N0U0NDI1RTBDRTUwMzZCCis6MTBDQTYwMDBENDFCQzFERjhBNzg3RUJGNjhFQUU4NDE3QTNEQkM5NTc1Cis6MTBDQTcwMDBFQkYzREM4NkE5RDMwNjEzQzAxN0E5MDFCRTI5Njk1Q0I0Cis6MTBDQTgwMDBGQ0VBNjAzQUVGMDlFRkFCRTM2MTc5RkNERTY0QUIxRkNGCis6MTBDQTkwMDBGNjQ3QjdEQTdCNTFBRjY5N0NGNTBERTdBQjc3MzkxRTA2Cis6MTBDQUEwMDBGNzBDQTlDMTczQUE4MTM2QzEwMzc2NDUyMDYyNDdGQzAxCis6MTBDQUIwMDAwNTI4RkVFMEZDNEE4MDlGNUYwQzUwRkUwMjc5M0FGOEEwCis6MTBDQUMwMDBEODk3MEM1RjdCMDUxNUUyRTM4NURBRkEwM0Y4QTdGNTQyCis6MTBDQUQwMDA3M0RCMTlGRTAzMjEwMUYxOUY0NzdBNzE3RkE0QkE1MURDCis6MTBDQUUwMDBGMDQ2NjhGREVBQjZDNTk4RjdBMEU5NUJGQUU3RDREMzRCCis6MTBDQUYwMDA0M0M3OEY1MjJDN0VDNDRBQkFGNUFGODJEN0JCRDZEQTcxCis6MTBDQjAwMDBGMDJFRjBFN0I1Q0ZDQUE0NTlDNzlGNTlGNEJGNkY2M0ExCis6MTBDQjEwMDBEMDQ5QzNFNzg1RjhGMjFDQzdEMzM2QzBBMzEzRjBENUJDCis6MTBDQjIwMDBDQkVDQTdDOEQ3Nzg4RTQ2RkIxRTkwODIwNjNDNEU3Qjg2Cis6MTBDQjMwMDBGQ0RDNzlGMTM0NDFDMzEzRjAyOUU4QTlGNjYyMTFDQThCCis6MTBDQjQwMDAyNTZEMDIxOTkwRDk3RjlFQjAzRkE5OTdEQjQ1N0I4RjU5Cis6MTBDQjUwMDBCMEZFOUYxNEYwREUxMjMzREY2QUYzRUVDN0I3NzFGODUwCis6MTBDQjYwMDAxNUNFQTU4MTVGNzRCMTdDRkI4RDg5NkZERkI0RjdCRUY0Cis6MTBDQjcwMDA5RTBCN0NCQjU3NjBGMTgzRjYyNEMzRkVFMjEwM0I1QjQ3Cis6MTBDQjgwMDBGRkI3REEyOTdGQzNCRUQ2MjFEOUJCNTFFRDJGREYwOTBDCis6MTBDQjkwMDA3Q0ZEMDJCQjVGN0YyRUU5NTI5ODA4RTQzRDZFQjE2MUQ3Cis6MTBDQkEwMDAxRTE5QzIzMTgyRDk5NTdBQkRCQUNENEUwNkRFOTQxN0QwCis6MTBDQkIwMDBCRkZGQzFCQ0ZGNzg3NjhENTYxRTBCRTM0MUJFNTcxQkVECis6MTBDQkMwMDAxRDJGMkIzQTlFNTlBRjZCN0VGRTg1RTYzNUU2RUY5QzE2Cis6MTBDQkQwMDA1NzVGMUUyNkU5QzQ3REE3NENDOUZGQjA1NTk3MDc3NzVDCis6MTBDQkUwMDAzM0NGMzNBMjEwQTA3REE1QUI5NzZEM0I0RjNEOTJFNkFFCis6MTBDQkYwMDBDMUYzNEY3NzdBMzQzRTYzRjlFRTQ1M0M4RjdEODYzODNBCis6MTBDQzAwMDBFNTNENTgzRjNGRjNCMTdEQkUzQzBCRjlERDE0RDBDRjdECis6MTBDQzEwMDAwNTMyOUVFM0ZCRUM3NTE5RTNCNTlGNEQ2Nzc5OUNENzEwCis6MTBDQzIwMDBCRDcxNTA4MjM4Q0Q3NUEwOUMyODNFQUU5QjIwQTBCRjIwCis6MTBDQzMwMDAwMkM3QjA2MERGNkMxN0I1NkY3QzYzNzAzRUI5NzA4RTUxCis6MTBDQzQwMDAyQjY3NTNDMzM0Mzg3RjNDN0U0QkE4MEU5RURFNjlCREY0Cis6MTBDQzUwMDAyOTZGMDIxRUE3OEEwNEYwRDhFOTFCMzAwREVFNEZCQUU3Cis6MTBDQzYwMDBGMzRGMDRFRjBGQTFFQjJDQjYxRkRGNDEwNjQyQkRDOTA1Cis6MTBDQzcwMDBCRTgxRTgwRTRDNkE1RDNGMERFMkEzRDcxRjc0M0FFMTE2Cis6MTBDQzgwMDA3RTk2QUMyNjBCRjUxOUEyRjg5QjRDNDI3NUIwREYzRUEwCis6MTBDQzkwMDBFOUE4RUY0NjgwQjc4Q0RBMEIxMDc3MkU2QjZGQUU3Mzc2Cis6MTBDQ0EwMDA0M0I5NDlGMEFBQjRGRjQwRDA1RkU4QTZGM0Q4RDZGODVDCis6MTBDQ0IwMDA2OUUxNzc0MDFFNjkzREU4MjZEMEM0RUEwNTM2QzFDNTYyCis6MTBDQ0MwMDA0M0YwN0UxREU2RDk5NDZDMTJGMEUwRDdCNjkwNDA2QzJDCis6MTBDQ0QwMDBBQ0RGOTA4REY2QkJBRDg5QjZDRjgzNzU4MkI2ODc3RTBCCis6MTBDQ0UwMDAzNzdERkFDRThEMjBFRkFGOEJBQzdEMEJEQkE3MkVBMTZECis6MTBDQ0YwMDBFRDU0RTBEQjREOEJCMUJGNDU0RDAyNDlBM0ZEOTVCNTI5Cis6MTBDRDAwMDBCMDc1QTBFQzc1RDkwQkRGNUJGNzNGODZFQkQ4MkMzQUZBCis6MTBDRDEwMDBERUUwNENEMEZCOTFFOTUwMjZCOTgyMDdDRkExNTQ4RUJBCis6MTBDRDIwMDA0MUJBRjU3MDM5Mjc1MzQ2MzNGRDIxRjAzMkY3MUIzNEYxCis6MTBDRDMwMDBCQkU5NUQzQkNCRjcyREYxMkU1MzA2RDA3RURFOUMzODUwCis6MTBDRDQwMDAzMDEzRDIwMjAyNkQ5RkUyRkVGMzUxOEE2NzNGRURGMjhCCis6MTBDRDUwMDAzMENGREIzODM4RjE2M0E1NEJCNzBFN0Q2NjY3Rjc1QkU0Cis6MTBDRDYwMDAyRDY4OUI4QUY5MEMwQjQ5MTFFNjMzNUMzQjg5RDk2QjIyCis6MTBDRDcwMDA2RjVENjEwRkMxMTUwNzZGQzlCREU5RjBGRUUwMTU1NjgzCis6MTBDRDgwMDBCNDdGQ0Y2QzkzOTE4RkNFMENFQkMyRjhGNEYxMjYxOURGCis6MTBDRDkwMDBDRjBERDczNUIxRkJCOThFQjdCMDc1NUM3QzkyRURFQjlBCis6MTBDREEwMDA5N0JBMTQyQzFGNkNCQUIxMTBENkI3RTM5QkQ4NzlDN0M5Cis6MTBDREIwMDA2OTRGQ0U1MEEwNUNEQTJDNzhEOUZENDU0QzNGNkFGRTE1Cis6MTBDREMwMDA1Qjg5ODdFNTIzNjhGQUFGOEFDRkJCNUZERUEyNDlERkM0Cis6MTBDREQwMDA1NTY5RUI4RDQ5REY1NUMxQkVCMjFCOUVDNkY3MDFFMjE2Cis6MTBDREUwMDA2NDdBMTBFQzdFQTA3QkU0NkJFNERGRUFENzY1MDI3NjIwCis6MTBDREYwMDBCRkYwNzE3NzIxRTY2M0VEMTUzMDlFM0ZBOTVERjBDMTZDCis6MTBDRTAwMDBCRTdFRDlGQkQ2MTBEQUFCQTFFMjNCN0UwMjdBRkMwM0YwCis6MTBDRTEwMDAyQjExNTRDODZCQTc3OEE3RkE2MUEyQjVGNzhGQkZBMEYyCis6MTBDRTIwMDBFRjNGMzk2QzgzNEMxOENBMjdDNTg4NjcyREZGMzM2RkQ1Cis6MTBDRTMwMDAzM0NCNjNDOTNCQkMzRTE1Q0U1QjkyRTkwMzUwREY5NjEyCis6MTBDRTQwMDAzNjhBQzRBRkQzMUI5RjA4QkUxQjdGQ0NGNDMyREU0RkEzCis6MTBDRTUwMDBBMUQxMkY0RjY5Mjg4MTc1NkNBNDgzRTkyNTc1QjMwQzg2Cis6MTBDRTYwMDAzOTIyRTQxMDhGOTM1MDdCMUFDRkRGMkVEQUJEMkU1NTc2Cis6MTBDRTcwMDBBMUY1RUE3OUZFQzdBMkJERUI1MjQ1RkFCRTBFRDYyRjQ4Cis6MTBDRTgwMDA1QTdGOTFDMkZBNUZCNDRGRjAzNEVCRkFEN0RBNkJGREY4Cis6MTBDRTkwMDA2OUZEMjhCQjhERkQ4Q0RDQ0JDQjE3RDk4RjA2ODczNjdGCis6MTBDRUEwMDA3RTNDN0I3Q0UyQkY5RjVCMEZGN0M1NEM3QzRCQzRBNEYwCis6MTBDRUIwMDBFMzg5MUZDRjFBQTlERkVGRDA5RTVBRkMzNUZGMUQwQjY3Cis6MTBDRUMwMDBGMUU5RjAzNkYxOEYwRUUyRDNGMTQ1RUIwNDJBREY5NDVECis6MTBDRUQwMDA2RUQ3QjQwOTIxMDBBNTc1QzIxMUE1MkEwRkNCMUU5MEVCCis6MTBDRUUwMDBFNzZBMUVBN0FEOUVDRUY2QUQ1QTczMEVBRjAwRjk5RTRGCis6MTBDRUYwMDA5NTI3MjAxRjkwQTA1RjE5OTA4Mjc2OTAwQUYxRjFEMkI5Cis6MTBDRjAwMDAzQ0Q2QkU5NEI2MDdCOTZCN0Q4Q0M5MjFENTA3MkFFOEZCCis6MTBDRjEwMDA4QkVBQTY3NTg1NTg3RjkzQTA0MkZGQURDREM1QjhERURDCis6MTBDRjIwMDA5NzREMTQwOTdFREY3NDA0RUQ4RkIyQjYyMzI5MjBBRjJDCis6MTBDRjMwMDA1NDNFRDdDM0ZBNUIzREM1OEFGNzc5Njk3MkE3QzlGMTM4Cis6MTBDRjQwMDA1QjMyQkZBRkM5RTYxOTBCNzlGREY3MDE1MDMxRTQ1N0U5Cis6MTBDRjUwMDA3QzlEMzAzRkI1NDU0NjM5MEI0QzY0NzJGOUQ2MzYxMThECis6MTBDRjYwMDBFNUY5RTAxNUI3QTAxQzlFRDkyQ0M0OTFFMzY5MEE5QzkxCis6MTBDRjcwMDA0QjNFMUU2MkRGRkJFNDc4QUJDMEU1OThFOTg3RTM0RUU5Cis6MTBDRjgwMDAyNkQ3RDNFMDNCQzhGMTRFODFGQjgzQ0MxRTM0Q0JCMTE2Cis6MTBDRjkwMDAyNjk3MTc5MkRGOEEyRDI2Nzk4RTIzQjc5RDUyRDc0RDdCCis6MTBDRkEwMDAzMEVFOUQ1N0Q4MTFFRTY5REZERkZERUU5REE4N0Y2NDVFCis6MTBDRkIwMDBDQ0ZCOThGNkZEN0I1MzQxREY5NTQ4MkM1RjQ5QzM2MzVBCis6MTBDRkMwMDA5NUM0RjJEOUZBQzFCMTdFOTkzMkY4QTJFMDMxQzJGMTJBCis6MTBDRkQwMDA4NEREMTVENTFGMjJGMDM5QkI4NzJCQjg0OTQ2M0UzNzczCis6MTBDRkUwMDBDQkUxREYyQjNGRkYyODc5M0VDNEY5NDc4MzQ3RENDQkY5Cis6MTBDRkYwMDBEQTQzRkU1ODg0RTJFOUI1OTZBNzMxNEZGNUY0NzM0NzVBCis6MTBEMDAwMDBBRTA1M0M1N0VDQTE3QzRCRTc3QkE2QzVDNUVGN0IwOTgxCis6MTBEMDEwMDBFMTNBNTNERTJBNjIxRTM4OTEyMkY5MzdCQUY0NzJDOTE2Cis6MTBEMDIwMDBGMjkwMkE1RTcwMjE3Rjk0RUY2MEY5QTRFNTJGN0UzQzk4Cis6MTBEMDMwMDAwRUYzNDQ5NkY3NjI3RTU1RjAzOTZFNkYwNkJCQzYwMTVCCis6MTBEMDQwMDA1Rjk3NEIyQzFGQ0EyQ0U3MzczOTk4RkREOUJEM0I2MTQwCis6MTBEMDUwMDAzNkNDNDNEOEMyQ0VFOTk3ODc2RjkxODEwRkI1N0EzRjFFCis6MTBEMDYwMDA3NEM4NUEzRERDQkYwQzUyQkU4NUZENzU4MDRGN0ZFRTAzCis6MTBEMDcwMDA1Q0NCODNFQURFQ0FFNEJFQkM0RDQ2N0ZBOTdDNEIzMzYxCis6MTBEMDgwMDBDNkIxMDM1QjNFQzUzQ0Y3NjkyRjZDQzNGODQxQTA0REE4Cis6MTBEMDkwMDAzNEU2M0Q2RTExMjM1NkNDQ0IxNDhGNThEOTNBNjVDODZGCis6MTBEMEEwMDAzRkFDNkVBREMyRkRCNkVBMzBDRkVGMzNFNUJGNTVCQzQ1Cis6MTBEMEIwMDBCMEY3QzUyMDQ1NERDNUFGOUY3NTgzMUUzOEQ5QjlEOTg2Cis6MTBEMEMwMDAwREY4QTRGRDYxREVFMEY3M0Y5NzBDNzk1MUYxRjM3Qjk5Cis6MTBEMEQwMDA3REM2N0NDMkYwQUE5OEY5ODQyN0UxMUY5NEMxRUY3NTQwCis6MTBEMEUwMDA3MDdFRDVGMjMwQjcwQ0UwNzlEQTkxRkNBMjE4RjFGQjMyCis6MTBEMEYwMDBCRTczM0JEQkJFNzgwQUYyRENCQjc3OUM3QTBBRTBBRUZCCis6MTBEMTAwMDBGQ0VCNjc0RjQxM0UxM0Q5NjdDNzc1MjlGMERDRUYzMDYwCis6MTBEMTEwMDA0RjU4NkJGNzBCMDdGN0YzQjczRThCRjlENTY3M0VCMDY3Cis6MTBEMTIwMDBBMjlGNzM2NkVGRjEwQ0M4NUYzQkIzRkRFQjU0ODhDNzU5Cis6MTBEMTMwMDBEREI1NzcwNkM2MkJFRkRBMzk2RDEwODlBMURGQjUyNzhCCis6MTBEMTQwMDBGMDY1RTgyMkYyQkJDRDc0MzhEODdBMTBGM0FFNEVCRjRBCis6MTBEMTUwMDA2RjQ1N0RENjk3MTcxQUFFNjI3OUI2MkFDRjA3NkQ4OUNCCis6MTBEMTYwMDA5RDQ3QUZFNTMxNTZCN0RFNzhERDE1QTA5RjVCOTkzRDUxCis6MTBEMTcwMDBENzk3RDc3OEExM0NEMDc3MjgzRDJGQkYwOEJBQjVGMDE0Cis6MTBEMTgwMDAzQzVGMTNERDRFQzMzRjI4N0RDMjI2QkE3REQxQkFGMDg1Cis6MTBEMTkwMDA1NzhGQzNCN0Q2MDE3MUYzNDAyMzE3ODEyRjJENEZGRjRGCis6MTBEMUEwMDBFNzBFREYxRTA3OUNGQkRCOTExMDRDNjNGNDBBQ0QxMkU3Cis6MTBEMUIwMDBDMERFRkIyMjAzQ0UzNTlDOTA3QjMxREZBMzc3QUZENTU5Cis6MTBEMUMwMDAwM0Y5OENFNTdCREY0M0Y5MzhCM0YzMzBDNjU1MDlDRjVCCis6MTBEMUQwMDA5MzNGNDNGQUZFNTg1RUIzQzBFN0I3QzlDNUYyNDczOTdCCis6MTBEMUUwMDBERTIxQkY1NDc1RTM3QjlFNDdDQUY4NTZDQjJGOEQ5NzNGCis6MTBEMUYwMDA1N0RBRUIxOEMxRTJEMEZDREM0MDE1RjU5M0Y4QkQ1OUM1Cis6MTBEMjAwMDA3REY5QTZDMjQ0QTBEMzExNDM5RUFFMzY2RjczN0YxRTM0Cis6MTBEMjEwMDBBRTM3QTNGOUQxQjFGMzc2QjU3Q0MxMjg5REQ4M0FBMjM3Cis6MTBEMjIwMDBFNTNGOUY2OUU2NzlEM0Y0N0RGQTc4Qzg4MzYzRUI3NUFGCis6MTBEMjMwMDAyMDI0QkM0NzYyQzhBMzk2MUY3RENBNjFDQThCMEU1REJECis6MTBEMjQwMDA1QzVFRjQ4NUUwRkRERkM1Qzc4NzBFMTZBRkQ2RjBEMjcxCis6MTBEMjUwMDBGREU3RDhGQTU4NDk2MDc2MjdGNTRGRTUwNERDMTc2MEZBCis6MTBEMjYwMDBGRUU5MUREQzNGRDVGMEE1QzE1QjFGNjY3NjQzRjcxNkNFCis6MTBEMjcwMDBFNjFGOThFNUI5M0FDRTdENDkyOTdDOUNFQUI2RkRFM0U0Cis6MTBEMjgwMDA0MEVGNzQxRkQ4Q0RGOThERjE3Mzc1Q0IxMTk2Nzc0QkE0Cis6MTBEMjkwMDBGNTczNDhBRjlGRjlGRDEyRTZGRTMyNzg3RjgxRjZEODJDCis6MTBEMkEwMDBGRDA1NUEzRThERDlERjQ5Qzk3NzBCQzA3RkIyOTNEOUFFCis6MTBEMkIwMDA0OTI3QzNFMkNDNThGN0RCRDgxMjY0NDNGRTQwQkQ4QjRDCis6MTBEMkMwMDBERDk3MjFCQTFENjgxRkRERTU5QUY4N0U2MjBBM0MxNURDCis6MTBEMkQwMDBDQ0VCQTk1QkM2RjM4MDdFRTZDNTdCNDVFQjVDNTcxM0MwCis6MTBEMkUwMDA4MEU3N0VDMDhGMkVDRTIwN0JGQzA0RUMzNDM5QUQyODQ1Cis6MTBEMkYwMDA0RjU0QTNGMEY2RDEyM0M1NDI0MjdBRkE0QjkxNzREMDMxCis6MTBEMzAwMDBFNzFGRTYxQzk3QTFCRkZGMzRDNTQ3RkU1MzIyRjU4M0Y0Cis6MTBEMzEwMDAyODVDRkYxOTE0QkNDQkQ0Rjg3NkI1NTZGNkZGNTQzNDBDCis6MTBEMzIwMDBDNDMzQUFBREJEMUY4MjdENEU1RUI2RTM3RUI4QjhDRkQyCis6MTBEMzMwMDAxRUM0RjhEODUzRUM1RThEODMzQkJGN0EwNkVGRTVGOTQ3Cis6MTBEMzQwMDA5NTk1NzBCQjUwMDA3RDUwQ0FFMzE0Qzc3NzdFRjVENDI1Cis6MTBEMzUwMDA3RjgxMUQwOThERTlGOEE1NEZEMUZBNjAzRkI3MjRBMDYwCis6MTBEMzYwMDBCRERGQjMyMzcxMUNDNDAxNEE1RkJFRUY1QUQwMTdBNUJECis6MTBEMzcwMDBBMEZCQzBDRTdDNjE1MEE4OEVGNjc3NkMyMDJCMUZEQjAzCis6MTBEMzgwMDAzNjBDQ0YwNTU0RUM3MDYxM0VFMUMxOURCQkFBNDFERjc0Cis6MTBEMzkwMDA5Rjc5MjE4MTgwQkUzRjJENzdGRDE1Q0E4MTNEODlBNEVCCis6MTBEM0EwMDA1OTQ1QkI0RkQ1QUZBQjhCODhBNEVBRURCOTBBMjgxQjEyCis6MTBEM0IwMDBGMjVCMDhFNkI3NjBGQzhERjI3MzQ1NUIyMjlFRkZEMEZFCis6MTBEM0MwMDBENUUzRjIxQzFDQzJFRjg5MUEwMjcyNDdFRDQ2RDU5OENDCis6MTBEM0QwMDBGN0NDQkUyRjQ4NjBGQTJCNjBFREJEODdERDg3QzBFQTMxCis6MTBEM0UwMDAwNzk0REUxMjU2NkUxOEMyRTRCNjEzRUIyRkQ2Rjg5NUVBCis6MTBEM0YwMDA3RkVGREYyRkFCMUY0ODYwRjE4MDY4M0ZBQzdEQjU5NUI0Cis6MTBENDAwMDBEREFGNjFBNkVGNEYxMzA0N0UxRUY3MkY5N0M0QkE3RkRFCis6MTBENDEwMDAyMjA2RkNFQzVFMkU4MTA0RTFGRTU1QjJERDhFRjdGMUIyCis6MTBENDIwMDA1NDJBOTEzMTkwQUZGRUEyQzJGNjNGMkFERDkxMzE5MDhECis6MTBENDMwMDBBRkJFODdFQkJGNEEwNzJERDNGNzQzMzgxQzUwMUZDQTM2Cis6MTBENDQwMDBDNEQ2RjUzQ0RFRUJCNENCOEVGN0UxNTVCREVDRjJBMUQyCis6MTBENDUwMDA5RkYwRTI1N0M3OUVDODgzN0NCNTA0Q0M5M0FFN0FGOTlGCis6MTBENDYwMDA1RjkwRkU1NUQ2QzhFREMwRkZCRERCQUQ3ODNGNjlGN0Q0Cis6MTBENDcwMDBGNjQzMTk2MDM3NzRDQjkxOENFNEYzRUNFQjU0ODVBRDMzCis6MTBENDgwMDA4NjdENkE2RDFFMjc2Qjk3NEU4NjczQkNEQTM5QzNGMkIwCis6MTBENDkwMDAzOEZBRTI4RDA0OTZEN0QxOUNFMEZCMTVEMzczQzZGQjE2Cis6MTBENEEwMDA2NTRFRDZDRTM2REM5QjU4NkU4QkFEQzc1QTQwMkZFODAyCis6MTBENEIwMDBFMjc4NjJGNDVDNjEwQkY0N0I5QTc0RDUwRkExMjRBOTI1Cis6MTBENEMwMDAxMjdBNzE3RkJDN0M0QjY2M0FGOEJCMDdFQzk3RTBCRUUyCis6MTBENEQwMDBENTAxNTk0NTdGMTA5RTdBN0Q3Q0EyRDY5QjJCRTE3OUEwCis6MTBENEUwMDBGQUFDNUM4OUMyRDFEM0ZDNjlDOTEwMDJGOTgxRjZEOUMyCis6MTBENEYwMDBCMUY0RDNERTg0MDRFNEE3NzI5QjM1RTZGOUNEREY3Mjg0Cis6MTBENTAwMDA3RURCMDZGMjM2ODE4REU3Q0Q4RThFN0I0MDBFMjkwMEM0Cis6MTBENTEwMDBDNzE0QTc4QUYzMjlBNzdFMDBCQjI3NkE0RUFFRkVEQzlDCis6MTBENTIwMDBGNjIyQTkwMUVCNTFGOTQyN0MyQzIyRUI5NTNDNjc3RjU2Cis6MTBENTMwMDBCREIyNjg2OTVFQUU5NDhCMEFFQjlCM0U3RTEzQTM3NDBBCis6MTBENTQwMDAyMkMxMTRCNDkzMjQ0RTQzQjI3RUIwMjFERjVGOTI4QjhDCis6MTBENTUwMDA2QzgwMkY4NTE0NzkyNDExNDhERDgwNzJFQTIwNjE3QzZCCis6MTBENTYwMDAzQUE5MTlDMkQ2QTExQTAyRjFGMTEzN0M3RkQ2MkFBOUQxCis6MTBENTcwMDAwRkUzN0QzMzFEMjJFQUYzMEJFMUVEQkQwNDM3QzI2REVECis6MTBENTgwMDA5NTZBODgxN0VEOEQ1OTFFQjBDNzg0QTA5RjdDNEJGOTEyCis6MTBENTkwMDBBMUFFNzY2NjJFM0IxNzRFN0M5MEVGRTYyNjBDM0VCNzhBCis6MTBENUEwMDBFN0Q1QUZDMTNFQTA3Q0M2RUVCMUZBM0UwOUQ1RDFGMUI4Cis6MTBENUIwMDBFMDk4MzFDNkZGMEFEODdERjZFNkYxRkVDQ0U5NDA4MjVDCis6MTBENUMwMDBGQjBERjc5REMzNUZBRjc2N0YxRUY4RUI4OTdGOUQwODRCCis6MTBENUQwMDBGQjMxNEUwRjg5ODBCRDk0RTAyNDkxODQ3MTcwNEY5RTgxCis6MTBENUUwMDA3NDUyMkZCRjZFQzJDQTIzMjgzQjgzNUVGMzRDMzE3RTM4Cis6MTBENUYwMDAzN0YzMzVGMTRBOUZGN0U5NDUxMURCN0Y2RTZBRkZGOTkyCis6MTBENjAwMDBGOURBNkJGODA4RDgzNjdBOEZFNjQ2RjFFMkUwNzMwODZCCis6MTBENjEwMDAxNjc4Q0Y3NTAxM0VDNkI5QkQ3NTQwNDdBNUY3QzNGQjY3Cis6MTBENjIwMDAwMDFGRTM5Q0NDMUY0QzY5MjQ3QTdGMkREN0M5RjRENTA5Cis6MTBENjMwMDAwQTdFRkYzNEZEMkI3MkVBRkEyMzFFMUJDNjQ3NTc3MTgwCis6MTBENjQwMDBCQ0Y3RDVEN0UyMjZGREVBREIyNUMwNkJCRkZBRjY3ODNBCis6MTBENjUwMDBGNTFEQjFFQkJCRTJDMTkzMTAxQjlFQTQzOEZEMDc2MzFGCis6MTBENjYwMDBEN0FGN0VGOUJEMzcyMzJBQkM2NDdBMDM4MkYzRkNEQzkyCis6MTBENjcwMDA3MkFFMTNGQ0FCQzQwRjUzOEIxOTU3QjBGRDAwMTNERDEyCis6MTBENjgwMDAxQ0MwN0Y5NDFGMUNBMzc0RUZFMUZGQjI3NUY0MUIxMTQzCis6MTBENjkwMDA4M0ZFMjQ4MjdDNTdDQ0UxQTE2NUU3NjAwQURGOEYzOUU1Cis6MTBENkEwMDBCOEQzMzdCMUZEQ0FCOTc3QjEzOEQxOEY2REE1RThFRkRFCis6MTBENkIwMDAxRUUxRjcwMUNENkQ2NDdFRjVEQ0E1NkMxRjkxOTRCMTgwCis6MTBENkMwMDA3MzNFMUVGQTFGOEM3NzFCNzQ0MkU5N0Q1QjgzMTA4QUMwCis6MTBENkQwMDA2NEMyQkQzNTI2RkJCNUVGN0U5QzQ1MEFENDJGMzZDNTA2Cis6MTBENkUwMDA1RDM0N0VEMkNFMjNDREU3RjY3NTI2RTdDRjg1QTRENzZECis6MTBENkYwMDAwNTcyNkYzRUY3RkUwQUQ3NkI5QURFMEZBRTIzNTk3MEE0Cis6MTBENzAwMDA2RTVGQjQzOEJDQjAzRjJBRjI3M0E2QzRDREVFRjMyM0VCCis6MTBENzEwMDBCRTYxRUM3RTM5MkQ4RjJCNEI0RDg0RjU4RDg0Rjk3QkNBCis6MTBENzIwMDBCRUNGQjJFNDJBNzU5MEZFOUM5Njc0Q0U4MUY3ODNENDY2Cis6MTBENzMwMDBDOURFMzREMDgzRjIzOTZBRDc1MTU3NEQzOTM3ODJBOEMwCis6MTBENzQwMDBCQTczNjRENDlFNDNFMTk2M0RFQ0JFNDRDOTUzNDQ0QTQ3Cis6MTBENzUwMDBDMTBFRTRGNzAzOTA5NEFCRkJFQ0FFQjcyODFFOTZBQzc5Cis6MTBENzYwMDA1M0YxRENFQTQyMjdCMzMzN0ZFMTJBQkFEMzM5MDFFQzIzCis6MTBENzcwMDBDQjg5NUU3NkNGQUQ5MThFQzE5RDZDN0U3NTMwQkZDQzZFCis6MTBENzgwMDBGRTcwRDcyOTVFMkZEQTlENTc1MzhCMDFFMzM4NUVGQzdDCis6MTBENzkwMDA3RDA3RDFBQUJFQTc4MjNDRkU5QkNDN0VBRkEwMUYxRUY4Cis6MTBEN0EwMDAxOEZEQ0VBNjI0RTNCREVDMEJEQ0FCM0YwNDNFNURDMzBECis6MTBEN0IwMDBFRjIzNUM1OTlCODVDRkQ1QjU2OTY4NzdENkQ3N0FGMUM5Cis6MTBEN0MwMDBBOUUxQzVFNjZEQzA3QkRGNkNBMzU4N0YzNjhGOUZEOTdBCis6MTBEN0QwMDAxNUQ0OTY4MTdDMEFDOTUzMTM4MUIyMkRCRDg2ODBCREI0Cis6MTBEN0UwMDA2QkVGQzM0RjAzRTI0N0U5MkJGQkIxNkNGNUIwREY4RDY0Cis6MTBEN0YwMDA5MDFCNjcyMTlFNjk3QjUyNEFCRjJGNzFGOTFGMDczOTIxCis6MTBEODAwMDBCMUFCOTcxOUVFOTFCM0E2OEQzN0REMzc2OEMyOUJDNkQxCis6MTBEODEwMDAxRkRCMThGRUQ2MEE4QzNGQ0NGODVCMkI3N0FBQjBBRjgzCis6MTBEODIwMDBCQ0Y2QUFCRTdCNjcxMDdGRDRCQzY3RjhGQjJEREI2NzE0Cis6MTBEODMwMDA4QjhCM0Y0RjMyREFBRjBCRjJFQjZGQUZBM0FGMUVFNDJGCis6MTBEODQwMDBGQjhCMEZENDRFNDQ3Q0FERTJGNzQ4REU1RkVCQzNBNzAxCis6MTBEODUwMDAwOEY4QTNGM0IzNjYwNzA5REM4RkNFN0UxQjgyM0U5RERBCis6MTBEODYwMDA0NTNFQjg3RjE2NzgxN0YwMjczQTE5M0VBRDY5MzVCOEFFCis6MTBEODcwMDBCRjY2NzMzMjdDODlDRTIwRTI0NTc2MzI3Qzg5NEVDNjAzCis6MTBEODgwMDA2RjBBMkY0QjgwQkY1QzZDOEZFRjI5RkUwRTAwN0ZEOTkzCis6MTBEODkwMDBEMjI3MUJGMEE1QTQxNDVDMUNGRTFFQTNGOEEzNzBBNDQxCis6MTBEOEEwMDA3MEY5MzJFMzIxNDU2MUY3NTM2QTcyMTVDRjhFN0I5NDhDCis6MTBEOEIwMDBDRTFGRDZFRDBEQjUwNDlGMDNFM0Y4OEIyMzVDNkNERDIyCis6MTBEOEMwMDA0Q0IxRDRFQzk3MDExRkM5ODRBRjI3NDE5MjlFNEY1OEE5Cis6MTBEOEQwMDBFQTIxRkNBNTA1ODkwQTY1ODFDMTQxMUE4NjE5RUU5NUUwCis6MTBEOEUwMDAxNDNEOTJFOTVFMzY3NTAzRjBDMUZBNDNCMjA1RUVBMzJBCis6MTBEOEYwMDAxMzk3NUU2RDM4MEYyQUNFRjYyNUE5ODg0RjNGREVEM0U5Cis6MTBEOTAwMDBGQzYwQUQ4QUY0NUIwNzc0ODQ3QjQwQjlGRjc1M0ZBNzY4Cis6MTBEOTEwMDBFNzAzRkMxRUNBNTU1QzNFRDY3Mjc5Nzk5OENCNDkxRDQ3Cis6MTBEOTIwMDBCRjM3NzlDRDRDOTY2Nzk1OTI2M0UxRjc5NTQ1ODgzRTcwCis6MTBEOTMwMDA4RjI5QzkxQjI2MEE4NTBCNkQ2QTE1OUY3OENGMjI3OTFFCis6MTBEOTQwMDBERjFBMUE0RERCMjU2NDEzMUZGMDQ5RDJGQkY3ODZEODg2Cis6MTBEOTUwMDA3RDhENDU4M0MxMEU0QUQyRUU1RjlDQTIyNkNEQzE4MzQ4Cis6MTBEOTYwMDBCMDExODlGOTFENTQxNUEyMUZEMzY5ODk3NTRGNTU5REIyCis6MTBEOTcwMDBGNzgwMERFMkExRjFFMDQ5RjBGQTMyRUZBN0UzMjUzNDk4Cis6MTBEOTgwMDBCQUQwN0UxRkUwMkY5QUIzOTA5NjlEOEQwOTE4RkY0QjU5Cis6MTBEOTkwMDBFMEJGQ0ZFMkE0NzA5N0VBRTgxREVGMUVFQThEQUVBQkMwCis6MTBEOUEwMDAxMjVEOTQ5RTFFODA5MTNFMUY2OTFDODlCRkNCRjJBODE4Cis6MTBEOUIwMDA1Qzg0QkZFM0YyMjg1RjRGQjU3QkNFQjU3NkRGNzBGREE4Cis6MTBEOUMwMDBFOENFQkJDQ0UwQjdBRTk3N0REOENFMzNDNTI4RkZFQjExCis6MTBEOUQwMDBCOUJFNEQ5RTZFRTQ3MzREREYxRUVERDNCN0ZFMTEwMDUwCis6MTBEOUUwMDA0RkVBQjlFOUE4Qzc1MjZFODhBRDc3RUI2NDA1RUYyRDExCis6MTBEOUYwMDBBRjFCQ0JFNDNDNThBQ0IwRkI0QkZCRUIwMThDNTM5RjEzCis6MTBEQTAwMDBGNThGRDkwODdBNTRFM0FCRTU4NEU5OUQyMDcxNzg3MUVDCis6MTBEQTEwMDAxREUyRjdEQjY4NzZGMDRBQjgwNzkwRUI1Nzc4OEFBM0U3Cis6MTBEQTIwMDBEOEVGMEZBNENFNjVGN0Y5QUVFMUY3NTgzRDQ0Rjk4QTc3Cis6MTBEQTMwMDBFMEJEQTc1RTdDNUVFRDYyRkIxM0NCNkRFM0YxM0VCNTBFCis6MTBEQTQwMDAzQUE3MDVGNTg0RjQ4MTM1MDQyNjg3QjQ3RjkyMDdFMjZFCis6MTBEQTUwMDAwNTkyRUNFREY0NDFCQ0NGMjU4NUUxREVEQzNBNjcxRTkyCis6MTBEQTYwMDBERUZCMkUyNEU1Nzk4MEZFNUZCQTE2MEMzRjVGM0UxRDdCCis6MTBEQTcwMDA5RDI4REU5N0U5NDkyOTIyMUY2NUUzNkUwMDlFNDc5NjlGCis6MTBEQTgwMDAzRDM3MTA4ODFCNkU0OEE5QjEwM0RFMjZCOTU4NUNCRjJDCis6MTBEQTkwMDBCMTM4MUZGMTQ4RjE3QjlENkI2MEI0OUY0MUIzQUZFRThECis6MTBEQUEwMDBCQjA3MEJCQUREMTBFNzVDRjNBRDJFNjYyRjkxRjQyMEI3Cis6MTBEQUIwMDAxOUE1OTNGMzQ2RUQ3NzRFRDQyMEM5RDJDOUZCRjJEMTE0Cis6MTBEQUMwMDA4NTA0RjY4N0ZBQ0I3OTFDM0RCNjk5RTlCMTE1NDI2QzBECis6MTBEQUQwMDAzREE2RDk5OTlBMUU5MzRERkE0MTdCRDYwRjlGNjkzODdFCis6MTBEQUUwMDBBN0E1QTQ3ODgxNzdFMTE5QjQ3OEMxQkU3QkIxRkVENjMxCis6MTBEQUYwMDAyNEM0NDMwREUwODFBNDVERERFN0JGRkU2MDA0RDg4RjQwCis6MTBEQjAwMDBGOTMxRjlDREFDQkYxNkY0QURFN0JFNTRBMEQzMDk1OTM1Cis6MTBEQjEwMDAxRDM0MDdGOEU5NTBFQ0Y1N0NFQTIzOTczRTBDN0NCMDA1Cis6MTBEQjIwMDBFMEI3QTJBMERGNEYyOTNEQjcxMkQ3RDM5MjczMTNGMTBDCis6MTBEQjMwMDA1OUQ2MzgxM0Y5OUU0MDE0NUNFNzg3MUQ2RkJBREIwRDg4Cis6MTBEQjQwMDA3MDFENkZFNDc5MDA0RDcyMDhGMjMzOEUzN0RFOERGNzY5Cis6MTBEQjUwMDA5NTQwOUVCN0E4REJERjI3NzkyQURBOTdEQTNENjNDN0JECis6MTBEQjYwMDA0Mzc3QkFGNUZCQkIyNUJGQjBGQkMwNkU4REM3NUYyNTAxCis6MTBEQjcwMDA0REIxRkQ3QTU4NDMyMTdFNEEwMUNDMDI3Qjk4REEzN0I5Cis6MTBEQjgwMDBCRDExQjA3RjM2NUFCRDQxMTIyRDA3MUZCMUM3Q0M0RjEyCis6MTBEQjkwMDA1Q0UyOUFGMTI4RTA3RDg5Q0JGNzI0QzgzOTcxQjI3QjI5Cis6MTBEQkEwMDA0MUUzRjMzOTFCRjcxODZDMDJDMzdFRDNFMzNDNEY1M0I4Cis6MTBEQkIwMDBGMkJCRjVGN0JCRjVEREM3QzlFMzI0QzQxNkU3QkI0M0U5Cis6MTBEQkMwMDBGQjdEODMzOERGREQyQzlGODM3ODYyN0ZEN0ZDODQ4NEU0Cis6MTBEQkQwMDBBODlGRDAwNkYzQTg2QTNDNTVGRjAxRTI4OUZCMDkxQzA3Cis6MTBEQkUwMDBFRTEzMzI4M0ZCQzQzMzU2RjYzQjM3MjZCRTM4QzFGM0ZGCis6MTBEQkYwMDA0NzE2MDkwQ0FGMUE3RjlGRThCMzc3RkM3ODBGOEQ5OTExCis6MTBEQzAwMDBGRjg0OEQ5NzZFOTg0NEZCRkRBQzQzQzYzODVDMjVFNUQ4Cis6MTBEQzEwMDAxRkUwMUI2MUUzMjRDQzVGMTcxRTk5RjQzMEU0MjU3RERGCis6MTBEQzIwMDBGRUJBODhERkNCQ0ZEOUYwN0JGN0NGQkMxQkU2NDI5Qzk2Cis6MTBEQzMwMDBFNzBEMTlFRkVCRkVCQzYzNDYyMjhCRjMxOEUzRDAwQjI0Cis6MTBEQzQwMDBERDZDOUQzRkM5RTVCRUU0REM2QUU0Q0YzRUZFNjg1ODZBCis6MTBEQzUwMDBBODgwNUM5NTlDN0IwOEVEOTk5MjJEMDJERTEzNDk4Mjg5Cis6MTBEQzYwMDBCREFGNEU5NTM4MUY0RTg2RjZBNzBCOTcwM0JFQTczNDVGCis6MTBEQzcwMDBFMEZFNDZFOTY2QUI3N0I1RDA5RkNFMjc1REFBRTE1RUIwCis6MTBEQzgwMDBGNUQyQUUzNUQ4MkZBMUY2NTQ4QTZFQkZGQjA0Q0YwMzcwCis6MTBEQzkwMDAyRTNEQzdFRTA3MjQ5RTIwNDkwM0JFRTc3QTI3Q0FCRjYwCis6MTBEQ0EwMDBDNjdCNUZCQkVEQjFFM0VDREY3MDdCQTZFNERDNjQ4Mzk1Cis6MTBEQ0IwMDBERjEwOURERkY3OTk3Q0YyRjVCQ0I0NkIyMjgzQUI2RjZDCis6MTBEQ0MwMDAzRTFCMjZDNTlBNEY3NDFFNTNCMDdENzc1MkVDRjEzMzNDCis6MTBEQ0QwMDAzOTlFOEZENTk2QzFDOTBENTJBNkIwN0EyNTBENzcyQkU2Cis6MTBEQ0UwMDBBMDRGNEE5QTkyOTIwNUREQkM0QTFCMkIwQzc5MThBNUNECis6MTBEQ0YwMDA0REM1Q0EzQzVEQkY1MTNBMzg1RTlCM0EyQTRBODdDQzMzCis6MTBERDAwMDA4N0U0MkI5NzNCNjFCRDJGNzJCOTYxQkM4RDhCRjI3RjhECis6MTBERDEwMDBBMjQyN0Y0Q0ZGN0MyMjM3NjRENEEwN0VCOUQzMURFQjk2Cis6MTBERDIwMDA1QzQzQTY1QjM1QzQ5NTRBMUIzOTdEQTg5RDlDQTdBMzdGCis6MTBERDMwMDA4RjQ2MTc3M0ZCNjNDREE1RjkzRjgxNzhGMjYzRUM1NkVDCis6MTBERDQwMDA5MEY4N0FDNzQ0QjdDQ0Q4Nzg5QkRDODdCNzJDQ0MwNzNGCis6MTBERDUwMDBCQTMwREVCRTYzQzhGQkU5ODczNzRFNUYwRDJGREE3QjMyCis6MTBERDYwMDA2QTFGRTUwMkJFMjY0M0MwNjkyMEY0QzNFODdGMjE3QzE4Cis6MTBERDcwMDA0NUM3RTVGNDlGMUE3QjFFRkVCRTc5MkMyNTQxNkEzRkZDCis6MTBERDgwMDAyQ0I4RTAzQ0VFMjM0MURCNzlFNkExRDE5RjVDNjZBMDk0Cis6MTBERDkwMDBCRkZGQTFEMTU3ODIxQzZBRjQ1RTcwRTAzMUU0REYwNTU5Cis6MTBEREEwMDA1NDFFNjE1RkZFNzhDM0REODZGNTIxMEE1RjFDQkE4RkMxCis6MTBEREIwMDAwQTkyRUNGQ0ZGNzM3NEZGNDQwRTY2NDBERTU3NzAxRDQwCis6MTBEREMwMDA1QjQ3NEU2QzdDMzA0MzhGRTcyNUFFQTkwQjgxMkU2NEY4Cis6MTBEREQwMDBEM0MwOEI1QTNGODIwNURFMEUxNUQ3MjUxOUUzNjFCQkYwCis6MTBEREUwMDA1REZFODA5QkJFMkZFMzdFRjU4QUE0QzIzMUIxRDY3RDU1Cis6MTBEREYwMDBFQTE3NEU4MUY4NzM1REVEQ0MyOTEwNkY5M0I5REQwOEY5Cis6MTBERTAwMDBCRkFDMDVGNjI2NUM4MTFFRUI3RUFEMDY0RUQ3RkI2QkU0Cis6MTBERTEwMDA2QjMwN0U0RDZDNDFFMkQxOUZGNzI1Q0MyRUZBODZCMDU3Cis6MTBERTIwMDA3ODhCRDY0RTkxRkQxRTg4N0YyQUZDM0NCMjJDRjk1Nzg4Cis6MTBERTMwMDA2NkU2NDExQzIzMjUyN0E4QzNERjQzNkU2NkQ3QUQ0OTlDCis6MTBERTQwMDAzQkUwODE3QzUyMkJFRDFGRTIzMUI2NzRFOUFDNzE5RjRGCis6MTBERTUwMDA5Mjk1NzM4NDQ5MzJDQzQ3NEUwOTEzOEM2NzY2RDNGNzg5Cis6MTBERTYwMDAzQTdDMkIyOTE0Q0VGM0Y4OUI5MkNEOERGQjQ1MTI2MUExCis6MTBERTcwMDA3NjlBMzY3RkZBMDZEN0IzMDdGOEJBQjQxQ0UyQjgyOTA3Cis6MTBERTgwMDA2MDg3NTlEMDFGNUFDRkUzOTRCRkFDMkRFMjc4OTA3MEQxCis6MTBERTkwMDAxREIzMjZCMUZBNEEyMjgzREIwRTcxNkIxMUQ2RDUwODY5Cis6MTBERUEwMDA5NjVENzBDMzhFODg1NzkzRTFFRjhGMjYxMTE1N0ZBNzdCCis6MTBERUIwMDA2RjAwODlENEUzM0QyNjUzQkJFRTgxRjdCRTA0RkYxNjA1Cis6MTBERUMwMDBFMDgzMkYwNzc3N0UyODQwMUNCQUM4N0YwOUFDQkY4RDNFCis6MTBERUQwMDA2MjMwNDdBNUY1N0YyNUY2RTY0MDNERjg3REFGRjc5MzI0Cis6MTBERUUwMDBEOTczMzhFNDJERkI3NUZCNTJFQzVFNEU1NTFGRDczM0NBCis6MTBERUYwMDA5Nzg3MkY5NTRDRkIzNTdGQkU0NEZGQkQzOUMxQjcwQkNCCis6MTBERjAwMDBFMDQ4Rjk1OEMwN0Q5ODNBM0JCQkQ3QTdDRTc1NzMyMjNECis6MTBERjEwMDBBQ0RGODczOUJEOTBGRUMwM0YxRENDOEUzOTJCQTk4OTVGCis6MTBERjIwMDBDOTE4REZDQ0NBN0RDNTMwQkVENzUwOTZCOEZGQjY4OUI4Cis6MTBERjMwMDBGMkEzQTRCQjk3NzU5NEU0QjMwMEJGOEM2RUEwRUZGNTc5Cis6MTBERjQwMDBGNDhCMTE1NzRCNzZFMkY1QjczMUY3NjEzNEY4RThCODQ2Cis6MTBERjUwMDAwNEYwMjc5RTJCNjRFQkFCODkwRkY2MDgwQ0ZFQTA4QjE4Cis6MTBERjYwMDBGQjVCMjQyODAyM0RFNzY4RjcwNTRCMkI1ODU5RkJCREE2Cis6MTBERjcwMDAwOEEwMjI4NUUzMDM2RDdGODFBQzYwNjVCRTRGMTk5OEQwCis6MTBERjgwMDBDN0Y2MjFDREYwQ0M2OTdGQTAxM0UyRkE3M0RBMDdDRjkwCis6MTBERjkwMDA4N0ZEQTkzOUNFMzE3RjgyRTcxRUI5Rjc0MDAyRDg4MUNCCis6MTBERkEwMDA3NzBCNzhGRUUzQzdCRjdCNDU0RUEwQ0Y5REVGNkNDNEQ3Cis6MTBERkIwMDBGM0M2QTdCOURDREQ0RTdBRjExRTc2M0ZGMUYwN0RGMkIzCis6MTBERkMwMDAxMEJFOUYwNzNGMzA4N0U1QjAwQzdFRkFEQzQ4RTg0NzdCCis6MTBERkQwMDBEN0QwRDI2REFGODRBRTAxQjNFREY2OEVERURGODAxQUZFCis6MTBERkUwMDBGMDg3M0Q4NUI4MDdBMEI1NkJGM0JFQ0FDQUFDNUQxNDE3Cis6MTBERkYwMDAwRjM2NkU4RkRBNzA1RUQxNzlEQjEwMEYxRkY0RTU4RDZFCis6MTBFMDAwMDAwNzkxMUU3RDc4RTJGNzJBNjk3OEU5OUI3N0UyQ0Q1NzgwCis6MTBFMDEwMDA0MzlDMzc5RTNFOUJFM0NDRkExM0RCRkM2MDcwOTlGMTg2Cis6MTBFMDIwMDBGNDM5N0NBMjc2RTRFNzZFOUYzRDkxRUFCNzhGREQzRTNFCis6MTBFMDMwMDAwNzNDMkI2REJEMTlEMjA4OTQxNzM3OTRBQjQ1RkZGMDAwCis6MTBFMDQwMDA1NDhBODdEM0MzRkM5NzBDMDQ3Qzc0MEVCODI4M0RGQTFECis6MTBFMDUwMDBBMTlERTkwMTkyOTc4MUYzRDFFRTdEM0Y3OEVGNzExNzkxCis6MTBFMDYwMDBEODlERjUzQkRGQ0I4MDY3OTVEOEI1RjYxNjhDNkY4QUM3Cis6MTBFMDcwMDBFODBGOUQ2REJERTRCQ0U3QzMzRTg0QjgxMzVERkY0NjY5Cis6MTBFMDgwMDAyNzZBN0NDOEU2NzcwNzNGNUY3MzQ3NkIwMjlFQUZCOThDCis6MTBFMDkwMDA2M0E5NjhCOEI3Rjk4RUE1MkNFRjhFNDg5REUzNkUzMjYwCis6MTBFMEEwMDBEOEVCMkJFMkY2MDM3MTAwNzMzRkYzOTcxNjkwOEYwN0JFCis6MTBFMEIwMDBDMDNFQUI2NzJBQzYwNTlFNjJGQzM1N0ZCQTRGODQ3Q0EyCis6MTBFMEMwMDBFNEM5MkIwNThDQjc0QzNBQUFCNjc1RDFGMkZDNTAxMkI0Cis6MTBFMEQwMDBGRURFRDFGQzdCOTdFNEMyM0QwNEQ1OUQyQ0JFMzc0OEMzCis6MTBFMEUwMDA1QzlDRjMzMzg4OUYxQzYwRUIzODk0MTc4MzdDM0I3REVBCis6MTBFMEYwMDBBQTUzMTdFRkVGOTY2QjcyRTBERUJERTA2RDRFMUZGMDk2Cis6MTBFMTAwMDA0RkYxNERCRTBGRjBGNzEyNzkxQzQyNUI1Nzc3MzUxNjcxCis6MTBFMTEwMDA2MzFFNkJGMTVDNzUyMkQwQkQzODZDQzdERjFGMkNCNjU3Cis6MTBFMTIwMDAxMUM5NDFGNTU4QjE0NDZDRjAxQ0E0MTBDOTBFNEYwNzM5Cis6MTBFMTMwMDBCMUMxMzM3RjM5QkIyN0JCQTRGMTdBQjQwRkRDMTM4Qjk5Cis6MTBFMTQwMDAxNEI4RkZCNkI4RkREOTJGQTA3REE5MTREOUNGQ0VCNThDCis6MTBFMTUwMDAzMEZDMTRCNzFGRkExQUY4NjdBMUFGMDhGMzBFQkZCMzZCCis6MTBFMTYwMDA0NTMxRjg3RjYzQzNDNkYyRTU2REM2NzI0RUM0NThDRTIyCis6MTBFMTcwMDBFRDMwOTZCN0MyMUQ2NzNBM0JFMkMwNUUyQkFFMTMxNTc5Cis6MTBFMTgwMDBBN0Q4MzlCRDk3MDQ1ODlCMjAxRTZDNDU3OTlBNTZEMTYzCis6MTBFMTkwMDA5RTBGRkJEMUE3OUU3NzU5RTBGQjlFQkYzMEJGQjc3NzlDCis6MTBFMUEwMDBBQjFERUY3QkRCRkY3QjA3NzE0MDVFRTEwQkY2OERGMDczCis6MTBFMUIwMDBGRDk0MjM5QzBGNzEzODVBOUZGRENFNTY1MTc4MENGODcwCis6MTBFMUMwMDA2RjJGNUVBNkY5RTlBMTcxMzBBRjE3RkZDQUYyNjQ3QTJBCis6MTBFMUQwMDBCNzVBRjFGNzUzNEVFRDdFRjY3OUQ4MTczQkI1NzUyODRGCis6MTBFMUUwMDBEQTU5MkYwOTQxMEJGNDFCNUNDNUU4NkZFNkQzOEEyRDgxCis6MTBFMUYwMDA0NkJGRjg5RTQ0QTY2RjdBMDQ4NkVGNEIxQThERjNCRTk1Cis6MTBFMjAwMDAzNDY0MkNGRjNDOTFGOTUzRjM4OEVFN0QyNkVDREZBQkIwCis6MTBFMjEwMDBGNTY5QjBBRTNFMURGQkJFRTFGQkI5NUMzQ0Y3OUNBMkNDCis6MTBFMjIwMDBGMUFEQzhFRjY3MjNBQUVFRkNEMjlFRThGRURENUQ0M0E4Cis6MTBFMjMwMDAyMUFGMDI3MDMxMjJGQUJFQzIzNEFFRDY3RjUxMjJEQjRBCis6MTBFMjQwMDA4NzRGRTFGQjMzQkQ2Rjg4ODg5RjkzQTZERjJERUNCMzJBCis6MTBFMjUwMDBFQjZBNkIwNjRGRDdBRDQzMjU4REZCNTM4QkMxM0Y2QUVECis6MTBFMjYwMDBEQTlGM0E0RkI3QkU1NDZFM0Q5ODdBMkJFNjI1NDlGOEFGCis6MTBFMjcwMDBCQjRDOTU3MzlFNzk2ODcyMEFCQzE3QzMwMDJGN0M4N0NDCis6MTBFMjgwMDBCODU3NzdGODM3NkVBODQ3RUREREYxQTIwRUVGQTU4REYwCis6MTBFMjkwMDA3NzBGOUVBRTkzRDNCRjk1MkYzNTc5QUFFNEY2QzlBRTFBCis6MTBFMkEwMDA4OTlEODU5MDI3NUVEMUM4N0VCRkE5MjJGQ0EzMUJFMTcyCis6MTBFMkIwMDBGNzE3NDkxMzNCNjc5QTJGOTEyMjkxQ0E0RkU1RjYxRjMyCis6MTBFMkMwMDBGRDEwN0U4RjJCRjBFNDA0MkZDMDQzQkJCODA5REU1NzRFCis6MTBFMkQwMDBCNDdDOEFFNzA5NTY5QjdFNDc0MDdCRUVFM0Y0QTVGNUM0Cis6MTBFMkUwMDAyMzE2NUE3RkY1Q0RDRTMyRDA0RkI0REY1N0EwN0MyMDE1Cis6MTBFMkYwMDA2QjIzREU2RkUyM0VDMUUyQjRGNEZERkJGMDkzMjgyNzBFCis6MTBFMzAwMDAwQTgyNkZERTRBOUI5RTIyRTE3N0FGQzk4NDc5MUJGOUFFCis6MTBFMzEwMDA4Q0YyQUQwMDc2NTdFRjY2MDE3RkQ3OTY1QTVBRjkzN0RGCis6MTBFMzIwMDA4MDQ5RUQ1Qjg2NzlCN0Y0RkIxREIxQ0UzQjJGMEExOTBFCis6MTBFMzMwMDBGQjMxRDNGRkY3OUM3RkU5NUY5NjlFOEZDQ0Y1MDZDQzJGCis6MTBFMzQwMDAwQUUyQjlDNENBQTU1NERGRTlFQ0ZDQ0FBMzBENzg5RjYwCis6MTBFMzUwMDBBMzc5MUMwQ0MyRTlGMjBENjBCRDU0NTFCRUVEREM2RTE4Cis6MTBFMzYwMDAyMDgyMkQ5RkU3Q0Q4RTY0NjVCQ0I3MTBGODk1MzI0QUE4Cis6MTBFMzcwMDBDNTY1NjRCQTBBRjhCRTgxQ0M4NEU3NEI0MkU0MjE1MUZBCis6MTBFMzgwMDA2NDdBMDJFMzQwREIxMjUwNEY3NDdCQkE5RTc5MDJGODQ0Cis6MTBFMzkwMDBBQjY1MkNDNjlGODZGMEYzOUVERDZBMDRFRjc5RUNFMTU1Cis6MTBFM0EwMDBGMUM5NkUwRjJCOTdCN0RCMzEwRkU2RDQ2OTA1RjVFODlECis6MTBFM0IwMDBCMkYwNDEzN0QwQTNGQjc5QkIwNTdFOTdGNEQ0RjYwMUM4Cis6MTBFM0MwMDAwNTkwMjdEOTFENjZGN0ZGOUUwQzBGQzBERjdGOERCNzI0Cis6MTBFM0QwMDA2RTk5RjU4MUI2NEUxRTgxN0ZDMjdBOUFFOEZCMDZENjA5Cis6MTBFM0UwMDA1QkIyODJFNTkxMEUxQTUwOTMxM0VCRjcyNEI0NzYyOUIxCis6MTBFM0YwMDA0QTREMEVGODI5RkYwQkM5MzU0MDAyMDA4MDAwMDAwMDhECis6MTBFNDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkREN0QwRDc4NTRENTQ3Cis6MTBFNDEwMDA5OUYwQjk3M0VGRkM2NTY2OTI5OUM5MjQ5OTg0RkM0QzE0Cis6MTBFNDIwMDA0MjA4MDEwMjRFNDI4ODQ4NTEyNzIxNjBDMDU0MDc4QUExCis6MTBFNDMwMDAxQTdGOEFDMzdGODBGQzg5QjYxQjk1NkUyNjI2NjI0MkFFCis6MTBFNDQwMDA1MUMzMUExMTEwNzA0MDUxQkE2QTFCNUNENDY4ODNDRjUzCis6MTBFNDUwMDA4MDY4QjFENTdFQjE3NkJCRkVFQ0IyMjNCMDg4NTYyMDgxCis6MTBFNDYwMDBBMkE1QjREQjk2RUY3RERGNzNFRUNDREM0OUEyNzQ3NzE2Cis6MTBFNDcwMDBCRkVFRjM3Q0U5NDNBRkU3OUU3M0NGQ0ZGQkJFRTdGRDcyCis6MTBFNDgwMDAzRjY3ODZCRTZCRjVFRUNFNjdGMDE3Q0M1NzVDOEM5RDcwCis6MTBFNDkwMDAwQkI4QkQxQkEwQkM1ODgyNTc1NzMwNjY3MUZBOERGNjc5Cis6MTBFNEEwMDAzNEM2NkNFNThDRjlFMDlGRjM4OEJDNUI4NkZBRTNCMjc2Cis6MTBFNEIwMDBGN0ZCRjZCMThDMkQ2MzdFMDNDMzY3NzlDMEMwMEFFMDE5Cis6MTBFNEMwMDA5QjRFNjg5Q0M5RDg1Mjg1ODUxNTI3M0MxN0ZBM0U5MDBCCis6MTBFNEQwMDBBNjUwOTkzMUY4N0VFOTc2MjlENDAxREYyRkRCNjg2NEY0Cis6MTBFNEUwMDBDQ0M0RThFRjIyRkM1QkQxMEJFNUUyNTg3OTE1MEIxOTlGCis6MTBFNEYwMDA5ODBDRkZCMTNEQUUxREY0QkY0QTA5MUY5NDkyMTk1QjAxCis6MTBFNTAwMDA2RDYyNjEwQkY0QkJGQTI5RUQ3NzZCNTg5OEU2RDNGMDk2Cis6MTBFNTEwMDBEQzQ1NjM3Q0ZGQjAzRUM2NjA2QUJGNjNFQUJBN0MxRTFFCis6MTBFNTIwMDBGQjM0QzY1QzA2MjhDM0JBODdERUQxODcxMDBFRkYyMUY0Cis6MTBFNTMwMDBGQjY5NUQ2QjU4ODBGQUI5QTVCNThBMUQ0RjY1QUNGOUNBCis6MTBFNTQwMDBFRUQ2Q0M2NUYwM0NEQjdBNEZFNkIyQTk1MDhGRjM4MDczCis6MTBFNTUwMDBGMUFEOEM3RkNGNjA1RDdCMDA2NjZCQUE1OTM4MDdFNjEyCis6MTBFNTYwMDBCNzFDRDY5QjU0MDZFNTAxMjkzQzE5Q0IyNjE2NEMyRTI4Cis6MTBFNTcwMDBFM0VGNTNDQUY4N0E3RDcxRjNBQjY3M0QzNDVFRkQ3NjA1Cis6MTBFNTgwMDBFRDdCRjZFQjU0ODI2NzAzMUJBNDdBRjY1NDVDM0RDMDI2Cis6MTBFNTkwMDBBMzQxQzBBMUUxMzk3ODFGMDc4NzE5Q0Y0OTQxREI2NTQ1Cis6MTBFNUEwMDA1ODBBNzVBNEMzRkM5QTRFMzFCNjAxNEE0REZCMkYxQTg2Cis6MTBFNUIwMDAzNUZEQjMxRUM2MDAwRTE5NDk4Qzk5MDE1RjhGNEFBQzE4Cis6MTBFNUMwMDBBRUFGODRCRTlCMzA3RjMyQjRDMUJGQUJCMURDNEVFRDg5Cis6MTBFNUQwMDA4RTBBRjgzRDdBQzM4QUNDMDBCNDdCRDgwMUU1MkMwMUMxCis6MTBFNUUwMDBFMEU5MzA4NjBFMDdBNzcyRDgwNEUzMjQ0RDhEOTZBOTgyCis6MTBFNUYwMDBCRUUyM0U1RTlFNkYyRkFFRDk5MkNERDg2NjdEMjBEMzBGCis6MTBFNjAwMDAwRTQwNUMyQUZCREZENDAxRkM5RTcxMDY2RTQwQkMyQ0UwCis6MTBFNjEwMDBENUY5NzIxNTVDMkZGMzE1Rjk2MTFFQUM5NUMzRTFCMTA0Cis6MTBFNjIwMDBCMjk2MDkyRDI1QjE3OUM1RTZDN0YxQkI1OUVBMEJFQkM2Cis6MTBFNjMwMDA4MENFODJBRjQ4REUzRDFFQTREQjIxN0RDMDFBNkJEN0ExCis6MTBFNjQwMDA2Qzk3NjgxRDI5ODcyMjZGOEU0MUJDQkYyOEIxREREMDMxCis6MTBFNjUwMDA2RUFCRjRGMTlCNjNFMEJCQUQ3MzNEQUMwM0NBNkVDMDFGCis6MTBFNjYwMDA5MzVDODZFRjU5QTcwNDcwMjlERjNGRkY4RTM3MTBDRkU4Cis6MTBFNjcwMDBFNTQ5REU3MUYwNjhEQzVGMjkzNzVBNjlGREI3RkI2MTU3Cis6MTBFNjgwMDAzRTE5OTY5NjVEM0FBOENGQjhCREI4MENFOTFCRDY3RDY5Cis6MTBFNjkwMDBGQjAyNzg3Rjk3REQ0M0UzNjU1QTM5REVEREY3MDVGMzRBCis6MTBFNkEwMDBENzk2RTBGOEZFM0JERTgwRjE4NjI2Mjc3OTcxRkMwQ0Q4Cis6MTBFNkIwMDA4MDk1Q0Q0OUNGMkUzM0I2NjNFRDEyQjY3QjM0OTlGN0YyCis6MTBFNkMwMDA5RkE2OTM2RjlGOEZFNTMyNUU3NkFFOTM3Q0JCODlGOEYxCis6MTBFNkQwMDAzNkQxQkEzMzhDQUMwNkU3ODlFRjQzMjVCNDY1N0NGQkIxCis6MTBFNkUwMDBBODNFQzRGMTNCQUJBNTE0RkJDQjE4Q0I5RjJFNDMzOEZGCis6MTBFNkYwMDAxQkZCNzk1QkM1Rjc0MEE2OEVBNUUzN0NFMUJGNjEzRUJECis6MTBFNzAwMDA3N0VEQUJDQzcwQzJGNzZGN0Y2RTUyNzQyOUYwNzQzMzIzCis6MTBFNzEwMDAzNjg4RUQ5NEIwOTVFMUIzQjA5OEI3Mzc4OUY2QTVCM0Q0Cis6MTBFNzIwMDAzMjcwMzNCODcyQjVFRENFRUE3RDI5NTMwMTJFQzE3NzMwCis6MTBFNzMwMDA2NTg2RjhGOENBRUE0QjcxNDBCQjZGMTlGODNBMTJGMUQ2Cis6MTBFNzQwMDBCODEzRjEwM0VCNjlCRTAwMzM0RjhEQzM1QkRENzkwMzcyCis6MTBFNzUwMDBGNkQ3N0M0MTYxQTFBOUIxRjc5RkI3OTk1OEE4Mjg1NjZGCis6MTBFNzYwMDA2RUE4M0YzNDA3REIzNUIyQzFGNTQ4NTc4RDdEMTYxNkNDCis6MTBFNzcwMDA4QUEzRjc2RjI1OEQzQ0FFNEFERkNEMTc3NDJDOTg0QURCCis6MTBFNzgwMDBFNDlCRURCNzIxN0M4NkQ2MkZDN0Y5MUY5MEQ4MUU4NjUzCis6MTBFNzkwMDBGNTA2MTY4QzFCQkZGOTgyNTM1QjhFQ0UzMzlERkE4OTJBCis6MTBFN0EwMDBCNTYzREE3NkZEQkZBNzc2NkM3QTI0MTlDNzM5NjM4RjEzCis6MTBFN0IwMDAyNDNCQzVGQUYwQkIyQzk5QjUyMDVFQ0U4Njc0NDEzRDUyCis6MTBFN0MwMDBFQ0UzMzMxRTVFN0Y5NkIxOUEzRTZCQUNCRERBREY5OTA3Cis6MTBFN0QwMDAzQTAzMEIxM0RDODdBODVGODQ0QjEwNzhEQkI2ODEyRkRDCis6MTBFN0UwMDAwQzFFMjgzNzBDMUMyNEI4QThGNDEwMEY5RjYwMUNERkU3Cis6MTBFN0YwMDA0OEVGMTgwQ0VCNjA0RkZGREFCRUFBQUJDNDBDQTgzODg4Cis6MTBFODAwMDBBNEVFREYzNTVEQkU5OTUwMkZFQjM0RkJEOTUyMUVEREVGCis6MTBFODEwMDBERkM0NTYxRUQ1Qzk4MjFGMzQ3NDU1Q0Y4QzJGRjNGNjMyCis6MTBFODIwMDBCMUVGMUI2QkFBNjFGRjk3OTdGMEVGOEZEQTlCOEVEQzNECis6MTBFODMwMDBBN0M0RjgxMUFDMjMxN0UxMTIyRDlCMTJDQTU2Mjg0RjFBCis6MTBFODQwMDA4RTJCREIxM0VBNUQwOUY1RUU4NDcyMzY2RkZGQjkyRDZFCis6MTBFODUwMDA5QzJCN0IxOUZCRDRCRUI2NDYwMUZFRjI3OTY2Nzg5MUZCCis6MTBFODYwMDAwNEU1OEQxRDc3RDU1NDAzOUY2QjJDMUZGNEM5QzgzRjU5Cis6MTBFODcwMDAwNzI0QUZDNDYyRjA2QkYyMzI1RjA4RTA2N0Y1NDYwQzI0Cis6MTBFODgwMDA0QjRCMTAwRTgzNkZFMkZFNkZFODk3RUMxMkQwQjlCNUQ4Cis6MTBFODkwMDA2RjVGOThDQUY4OUQyN0VFQkIzRTg5QkU2QkU4RkI5ODc4Cis6MTBFOEEwMDBCRTFCQjVGRjYyMURFREUzMERDNUM3QTgxRDAwQzA3RUYwCis6MTBFOEIwMDAwMkYwNzQxMzkzNTgwQTgwMzQ1RjA5RkMxMUY5NjQ2MzAxCis6MTBFOEMwMDBERjI3NUNFRUIyMjEwMzVGMUZFNzgzNjczMjdEQUYxMzYyCis6MTBFOEQwMDAxRjNDMjBEOTcxREY0NUU5MEVGQkI1QzZFODVENkRGRjMxCis6MTBFOEUwMDBEMUU0ODE3RkM2NkUyQzc3N0REMUFFNDBGQjdGNkJGQzdGCis6MTBFOEYwMDA2NDFBMDM1NDdEODQ0REFFNDBCRTFBOUE4MEYyNzgxQjkwCis6MTBFOTAwMDAwQjRDNDAzOUY0RERDNjcxMDc3NUQwRUVBODNFQjI4M0RBCis6MTBFOTEwMDAwMUJDOEExRDFCNkExNDY4NzdENDE2Qzk5MTgwODc0Qzg0Cis6MTBFOTIwMDBEQ0Q0Q0JDQjY5OTExRDA4Q0ZFMEE2NDcwOUJFNDc3MzY1Cis6MTBFOTMwMDAyMjM5M0EyODRGNzE4NDc5Nzk1QzY0MDc5NjZGRENGNDQ4Cis6MTBFOTQwMDAyQzJGNEY4RUU0QzhGMDdENDFGMEI5OUE2QTI4RUZCMUMwCis6MTBFOTUwMDA4RkJDNUZGMzFDOUM4RkFCRjMzQjMxRDY5N0U1NDg0M0VDCis6MTBFOTYwMDBCMkUzNzI2Mjg3MUUyMDA2RkM3MEQxRUFDRjlFREYwM0ZECis6MTBFOTcwMDA3MDU4NzQ4Rjg1RjhENDlFQ0ZCRjMzQ0Y0RkVCMEZGQTBBCis6MTBFOTgwMDA5NTBBRTA4NzlDRjRCOTFDMjM3RUFDOTAxRTkwODlCMjU2Cis6MTBFOTkwMDBDQjE5QzM4NzJENzdEMDQzN0M3RTYyQ0IzRTk0RjcxOTg5Cis6MTBFOUEwMDA4QjRBODhDRjVGNDhGMUI1M0JBNkM1OUVCRjRCRTdDRkVBCis6MTBFOUIwMDA3Njg3OURGMzY1NTlFN0EzRjZGN0RBNDhFRjc5RDhDQzY3Cis6MTBFOUMwMDBENzAzRkI4NkYwNkIxNUY4MjgxN0VCMjk3N0U4RTg5OTUxCis6MTBFOUQwMDA2QjlGNERGRDdDMjhGOUI2OUE2NDdDQjJBMDE5RjFCOTAxCis6MTBFOUUwMDAyQTg5RjQ4QzVCNzcwMTVGMDBCRURDMkJFNkREQkI2OTE2Cis6MTBFOUYwMDA0MjI4MDhGRERGMkEzMTNGRjI4RDVFODcyRjEzRjlDM0NECis6MTBFQTAwMDA0QjdGOTE2RkM3RjVGNjk2NDIxOTlFM0YxNUZDQkU3Nzc2Cis6MTBFQTEwMDBCRTJGRDMxMTI3MTc3Qjc3RjE3QTk1RUZGNEU2RjNFRjRBCis6MTBFQTIwMDA1NTc5OTNEMUMxQzdDOTc4NzhDMjZFNUM4NzQ1NjEzRTdDCis6MTBFQTMwMDAyQzJGQUYyQkRBREQ0RTcyN0IwMUNEOTdGOTdDOTkxMjJBCis6MTBFQTQwMDBBQ0Y3QzRBQTAyMURFQTkxMkE3RTk0NDJERjc1NTg3RjcyCis6MTBFQTUwMDAwQkY2NkY4REUxNDkxREJGMURENzlEODY3QTAwQzg3RERECis6MTBFQTYwMDA1ODZGOUIzM0QwOEVGODA0M0Q2MDBBRTk4MTQyMEY2OEVECis6MTBFQTcwMDBDN0Y1QzZDMTk3Mjk5MTY5RjhGRUZGMjMzOEREODlFQkY4Cis6MTBFQTgwMDBGRUVGQzI2OTA0N0UxMUM0NzExQjVCODE1RkU4RTJGODhFCis6MTBFQTkwMDA4NTgwREY2NjI5QUNDRkUwRkNDMjhCNzIwRURGMkYwMEQxCis6MTBFQUEwMDBGRTc4OEIzREYwMDBGNkFGOEVCRkU4REU0NkQyRkJENDk5Cis6MTBFQUIwMDA3OTU5RkVFRUU1OUE5QkQ4RjA3RDk2QTg5NzFERkREMDdBCis6MTBFQUMwMDBCNDkxODExQzNCNkFFODIzQkU3ODc0MUVGM0I2MjNGRjIxCis6MTBFQUQwMDBEMEIxN0E4NEEzQUE1NzU2RENCM0U2NkQwNkZBRUM5NzU4Cis6MTBFQUUwMDAwRTk5RjBEQzJERjkzMjcxNURERDgwNTcxM0NBRTFGOTIyCis6MTBFQUYwMDA4NkQwOUVGQzk4NUNFQzc1ODRCNkFFNDBCQ0RFNTBFMkRECis6MTBFQjAwMDAwRDdBNDgzRUQyN0UwQkI2NUFBODVEQUYyM0MyMTRBQzM0Cis6MTBFQjEwMDBCRkMyNjM4Nzk5MjA5RTA5MUY0MzM3MUI0MkJCMjVDNDkwCis6MTBFQjIwMDAzN0E3OTdERTU1MTM0MzQxODlGMDFFQTRFRjZGRTZGNDMzCis6MTBFQjMwMDBEMzNCOUY5MTdFREY3QkIzOUJFOEM2Q0M0MjY2OUNDRkU0Cis6MTBFQjQwMDA2ODc0OTBERUMxODg4RTk4RTI5QjMyREYxNjgzQzMyRkYzCis6MTBFQjUwMDBDNUJFQjY5NDQ3NUVGQzE3RDQyMzM3OUE0OThGNDQ5OUIzCis6MTBFQjYwMDA4OTc2MTdFQkM5QTBGOTAyM0U1RjIyRkE1MEVEQTU0NzVFCis6MTBFQjcwMDAzMjQzMUJDODNFRjM1NjIwM0UxRUIwRjkxNkQzRkM3RjJECis6MTBFQjgwMDA2MEYxRTBGQ0I3OUI1OTk3QTkwQ0NEMEZENjQ5RkM0RTFDCis6MTBFQjkwMDBDQzg3RjUzQ0M2NTAzRkJCNURFODY3RkY1RTdGQ0U4NjA1Cis6MTBFQkEwMDA3QUMwMUIwRUFFNUYyMUExOTg4MEZGMkQ2MUJDN0VDOThCCis6MTBFQkIwMDAzQUNCQzc2OENGMkM1OTI3ODc4RDYwQUZCMEFFRDlCRThFCis6MTBFQkMwMDA0ODlDOUQ0MTE0MDVGRDA1MDRCRjY0NUI4NjZDNDgzNzc1Cis6MTBFQkQwMDAwMUZDMkUxOUZCRkZBM0NENjNDNTMyN0MzRjA1RDEwRThFCis6MTBFQkUwMDBERjE3QzdCRTdGNUZFQ0RCNDUzMjlGM0Y2QkIzNzgxMDBBCis6MTBFQkYwMDBCRTg5N0NGRDdENzU3RTNEOEZGOUUyQzc1M0M3NDlFQzI4Cis6MTBFQzAwMDAxN0VDQjgwRjkwM0UwMUVFRTExNEQ0RTc3RjIwMTM1RUJECis6MTBFQzEwMDAxM0U3RUIzMjBDM0Q2ODg2RkE0NTZEQjJFMzNFODA2NzQwCis6MTBFQzIwMDBBMEQ1NDZFQjU1RTc3QjdCQzZEMDk1NjQ1RjI1RjQ3Rjg2Cis6MTBFQzMwMDBEMkQyNTRBMUUwRkE4NUZEQzFENjY5RUQyRkM2MENCMTQwCis6MTBFQzQwMDAzMkQwQzU3MjM2NDQ3NkNDQjBGN0MyNkU0REI0RkIxOEU0Cis6MTBFQzUwMDBGQjhCMzFCRTlEQkE1Rjk4NDc0QTk4QkZBMDJCOEZBNDBCCis6MTBFQzYwMDAyMERFMDIxMkM3OUJDMTMwQjQwOEY5NEVFMkJDNTU3OEQxCis6MTBFQzcwMDAxQTlEM0EwMTc3NEUxNzg5RjAzNjNBQjlEQzQ5ODRCN0M0Cis6MTBFQzgwMDBDQjEwQzlDMTdFMDNBRDQ2ODI1MzYyRkZBQTVDN0NDQzI3Cis6MTBFQzkwMDAwQ0ZCMDdFODZFOEIyNDExQkQ2RUI5REI0MjcyOEU5OUI2Cis6MTBFQ0EwMDAzODlFOUI1NzI3Nzk5MDdFQjcxOTg2OUVBNjdERjVBQTM4Cis6MTBFQ0IwMDA5MTIxREVDRjlBODc1RTIyN0U1NUM4RkQwQTY3N0YyOUEzCis6MTBFQ0MwMDBFRkMyNzY2N0QyMzhERDlGNzk0NTRGRkI4RDRGMDZGNDUyCis6MTBFQ0QwMDBBMTVGQ0FCQkE5NUVFMkZEOUU2OUI3Nzg3MEJGMzYyMzBCCis6MTBFQ0UwMDBBNDYxRkNFNkUwN0ZCNjMxODBFRjcxMURCNzkzOUJGQjFBCis6MTBFQ0YwMDBCNUY2RjAxOUY4NTc1RjE2RTMxQjY3MTkxRjI3RDhDRjMxCis6MTBFRDAwMDBGOTA0QUM3NDE1OEQ3MzZCMTJEQjAwRkQzNkU5MjQxRjFBCis6MTBFRDEwMDBFQTRGNERBQjI3ODYzQTM4M0Q5OTcwM0YzNTg4MjkzNTAzCis6MTBFRDIwMDBFOUMwMkUyQzhCRURGRjI2RERCMTIyQjRBQjFBNEMxQkIzCis6MTBFRDMwMDAwN0U1NjRBQTNGOENGNjE4NDM3QjBBQkU1QjhEMUZFNThFCis6MTBFRDQwMDAwRjg3N0ZEM0M2REZGRTE5RTdEREI0NUY0QjE3MEQzMUE4Cis6MTBFRDUwMDBGQTkxMkU0QUY4N0QxQzNERTVDN0U4ODRGNDZGRTQxRjY0Cis6MTBFRDYwMDBENTJDMzQ0RUUyN0UxQTJDNUI2QTA2NDNFOEE3NjkxNjVFCis6MTBFRDcwMDBGRThCQjQ0MzkxMzk0ODNGQjZGMjNFQjYwNDlFQ0RBNzEwCis6MTBFRDgwMDBCOEZFMzE2MzYwRDdFQjY4MDczQjZBMDY3MzcwOTlDREI0Cis6MTBFRDkwMDBBRDZCQTc5RTk4MUFDM0FGM0FDRjJCMDYzNkM5NjhERjcyCis6MTBFREEwMDBBOTdBNEI5QzdEMzk2MUMxRTRGOEU3N0RGNDFEREFBQkFCCis6MTBFREIwMDAzODVFMDQ1RkUxQkU1MUI4QkNEQjJDRTQxREM4NDVFMkZGCis6MTBFREMwMDBDQkNCN0JDNjkzNUM0NEI5ODVGQzREQjU3NzkxREYyMUY1Cis6MTBFREQwMDA3Rjc5QzY1OTc1OUIxM0Q2RTk0REFEQkFDOTM5OEQ4RjY4Cis6MTBFREUwMDA0MzdBM0UxQTQ5NTcwQzg3NjdBMkRDNTFEQkExREREQjcxCis6MTBFREYwMDA2MjFEQkQ1REQ0MEZCNDM1ODVGMzBGNDVBMkYyOEE1RjY1Cis6MTBFRTAwMDBFODc3NkRBMEY5Mjk0NDJGNkI3N0U0MTMzRjU2RkQzNTYxCis6MTBFRTEwMDAwREMyNEZCNTQyRjg3NzU2MDhGRkNFQ0EyRDQ2RTY4OTk3Cis6MTBFRTIwMDBGNzY3ODVCNEU1MDZDMTBGMUE1OTg0RkJCOUY2NDI3RDMwCis6MTBFRTMwMDBCQzVGQTc5QTg1NkQ1ODhGRkUxRDdDRjY2OUJGNkY2NjEzCis6MTBFRTQwMDBBMTU5MEFFMkI3RkZBMjMxRkUzREVCRTVFQkJENURFMDYzCis6MTBFRTUwMDA3REFCOTlGQjc1NjZBQ0RCMjU3MzY3MTU1RjZGNEE5OUNGCis6MTBFRTYwMDAyRkZGN0U5NDIzNkZFOUM5RkZGMDFGMDI0RjJBNUMyQzBECis6MTBFRTcwMDBDRUFBQzUwOEVGMjRCNEQ3QjBEREZENDY4MkNCMDk5MEY5Cis6MTBFRTgwMDBEN0ZCODRERjYzMDFEQUExNkQ4MUNDQzI0MjA0OEYzREUwCis6MTBFRTkwMDA3NzgxNkQzODdDMzdCQzZBQUU0NzdBRTk3MTcyQkQ0NUJGCis6MTBFRUEwMDA3RDNGQzdBOUE3MzJGOTgzMTBFRUVEMTZEMkJCMDFDQzg2Cis6MTBFRUIwMDA1MzkwOEUyQTBBNTQzOUNBQTZBMDFGRUE2MzNERTg2MzFDCis6MTBFRUMwMDA1MDZFQkFEMTFBQzBGRTIyQTgzNzQwNzk4N0UwNUYzQjY2Cis6MTBFRUQwMDA5QzA2RUE0RjJENDdFRDNDNDEyRjMwMEVGNTg3N0UxOUY5Cis6MTBFRUUwMDA3RjFDMUQzQzE1NkRCRjQ5RTg5MzlDMkY2QzVFOTU0NEJCCis6MTBFRUYwMDBGQzI4NDZCNzNBNDY3NDVCRTIzN0EwM0ZFOTU1QzE0NzY0Cis6MTBFRjAwMDA1RTA1ODA5MjlERDU2N0U2N0M0NEUxRkNFOUQ1NTMxMzBDCis6MTBFRjEwMDA4OUVGMURGOTZDMzVGMTk1NzM3NTQ5Q0MyODUxN0I5RkFDCis6MTBFRjIwMDA4NEY1MkYxQTQzRjc0MTc5OTlGMEIzQkUyQTcxM0QzMTI4Cis6MTBFRjMwMDA3OEMwNDZGRDM0MTgwMjVCRDFFRkQwRjBDMjM4MkY2MEE0Cis6MTBFRjQwMDA4Q0JENjQwOEZERTg2OUFDN0ZDRDRDN0VBRDg2NjQzRTI3Cis6MTBFRjUwMDBDRjg2NTdDNzEwOUZGQ0E5M0VGNEVDOEZDOTRGNjEyNEEwCis6MTBFRjYwMDBGREFEMjFDOTkzNDJGNTNGNEY2NTU4REY2NTA5ODQ3MUI2Cis6MTBFRjcwMDAxRjY1MTlCOTVFRDk2MDA4MTczOTAwOEVDNzQyNUMzRjFBCis6MTBFRjgwMDAzRTg2OEMwNkZCMUZCMDkxREUwM0QzQ0NDNEYxOEY3Nzk1Cis6MTBFRjkwMDA2Nzc4Mzc3ODYyNzAzOUZFRTAyNEEyRkZDRDdBOEVCN0E5Cis6MTBFRkEwMDBFMDJCRENFRjc5NENFRjlGOTMwOUU1NjMyRjk2N0FDMTU0Cis6MTBFRkIwMDBCMjY0NjdGRDg2QjAwMUU2RDhGQzMwRDdFNzk2RUEzQzNDCis6MTBFRkMwMDAzQjVCOTEzN0JENjZGMTZBRUNEMTg3NTZENjYyN0RGMzIzCis6MTBFRkQwMDBFQTc1RDcyMTFGMUM2RDNGMjMzRjhGRjdFNzlFNjE0M0UyCis6MTBFRkUwMDBCOTY0OEZENjE3RjQ4NTYxREMzMzAzMTNCQzI0M0U5OUQyCis6MTBFRkYwMDAxQjkwMEQ3NDYyRTc2RDRGRTgwMURFNDg1RjA3RjQ0NDMzCis6MTBGMDAwMDBCRjk3REEzRkFFMTdFRDQzOTQyRjM4NEUzM0YwREZBOEE5Cis6MTBGMDEwMDA5Rjk5Rjg2RjVDNTkxRUE5Q0NGMUQ5RkM2QTg2RDBERkE0Cis6MTBGMDIwMDBCNEY1QjdBNjA0Q0VFMUZFNkFGQTg3REYxRjZEMjVGOEI2Cis6MTBGMDMwMDAwRTExRkY2MzNEREM3RjdFNDJFRjVCODQ3NEVBQTgwRTE1Cis6MTBGMDQwMDAxQjk2QzRDOUVEQTQ1NDJFQ0Y5NzFBODU5RUM3QzI4NkJECis6MTBGMDUwMDBGODdEQTdENjU3NTQ2OUU5NUM3RDlBNTMzOUJEREIwNjI0Cis6MTBGMDYwMDAzOTFGMUY1RUFGMTNGQkUxM0I0Njk0NUJEQ0I1MDNGNjMzCis6MTBGMDcwMDBGNjI5RUVFRjQ4NEFGNTUwRkQ4QzUzNjFDMzUyMjhFNzVDCis6MTBGMDgwMDBBRDBCMUI1Njg4MjdFRTBCODA3N0Q4MDRFQjNFQjFENTJECis6MTBGMDkwMDBDNkY3MzM4MDAxRkI1OTMxOUQ5MUJFQjI0MjA2M0RCNUEyCis6MTBGMEEwMDAwQ0RGN0JGQTIzODA5NzkzMkYzQTM4N0RGRDA5QTAwMjZECis6MTBGMEIwMDBGMDVFQ0M0NDNCMjNFOEI1QzBCNzVFRUU5NEMyQThGNzNGCis6MTBGMEMwMDAyRkRFNjJEQzZEQ0VDNzdERUM5MzZEODhDRjFEMTJGMTEzCis6MTBGMEQwMDBBREM1OUQ5NTQ1NUJBMUJDN0FGRjY0QzI3RkYyNzQ0RUJECis6MTBGMEUwMDA5N0FCNDMwRTkyN0YzMzA0MUY1QzZBMEMxOTQ4Q0Y3RUE2Cis6MTBGMEYwMDA5NkZCRjFBMDdGRDI5NzFCRTBBM0NDQjJFMTcwNDBGRTVCCis6MTBGMTAwMDBBREExODc5MDM2MEUzMUEzNEZGMEQzQkQ3MUYxODc4MjQ4Cis6MTBGMTEwMDAzOEJFREU5N0YwM0RFODc5NUFGQTA4QUE3Mjg3RjMzOUNCCis6MTBGMTIwMDBFNkM5NDAzRUE3RjI2MThCRDMzRjJEOTVGMDUwOTg4MTAwCis6MTBGMTMwMDBGODA1N0M3MjNFQjk0RjIyQjgzNkIyMTYyRTM3MDRCRjlFCis6MTBGMTQwMDA4RjhFMkJFNEM1NDkzOUM4RTU5MjcxMTMzREU3QTVFNkRBCis6MTBGMTUwMDAxM0RFNTZBM0JDMjFCRjNBQjdGRjQ2QTM4Mzc5QTkzQTcxCis6MTBGMTYwMDA2MTI3OEM0QzA3RDcwQTNBNjgzOEM1QzI1N0MyNzgwRDU4Cis6MTBGMTcwMDBFQjU4Qjg3MTBBN0ZEQUE2OTAxQ0U0RjJEMDI0RTIxREE1Cis6MTBGMTgwMDAyNjFFMEZGOTI2Qjk5ODI4MDc4N0M5QkQwNDc5OTc2MTBCCis6MTBGMTkwMDAxMEYyNERFMDM5REVERjhERjI3RUM2QkE5MDhDN0VDRjY0Cis6MTBGMUEwMDA1Q0JCQUYzMjYzNUE0QzdGNjk3RURGNjRGMjVDODY2NTdDCis6MTBGMUIwMDAzRjJCQjBBMkZGQTZGMjU5MzdGQTdGQzE1RUM3N0Q2NTJCCis6MTBGMUMwMDAwMUI4RUM0MkY5QTJFQUI3NkVCRTVFQjc4MUQzQUY1RTdBCis6MTBGMUQwMDBGMUIzNTIyQkUyNjU5MEVDRDlBMTM0NjY0NzdBNTRFMTQxCis6MTBGMUUwMDBCOUMzMDZERjk1RTE3NzdDQkY0NUJGMzdCMUNFQTRCODgwCis6MTBGMUYwMDBFRkFCNUUzNTEzNUYzREZGOEEyRDY0MjRCRDIzOTBFNzlFCis6MTBGMjAwMDA4MEZFRDIzRjMyOTIxRTdBRTY1NTFCQzlDRjMzNDJGRUIyCis6MTBGMjEwMDBCOTU0QkYwMDVCNEZGODU5MjdGMDFBNjQ1NTYzRDBCRjRCCis6MTBGMjIwMDBDQUE0Nzk2MzkwMDVBQTdBNThBMzYzMzQ3RkI3QThDRjlDCis6MTBGMjMwMDAxRkJDOTFEMzk1OTFFQ0M5RjM4RUM4RjdCMTBDRjM2MTYzCis6MTBGMjQwMDBBODVGREYyNUYwRENCQzdGNTZFOUJERjBCRUQ5NkZGNUM1Cis6MTBGMjUwMDA3MkU4MDc0QTkxNUU4REYyNUQzN0EyREY2NThFQkM2RTYzCis6MTBGMjYwMDBFODZFNTg0NzYzOEVENTZFODQ0RkFBRjNGRUY1MzczN0E0Cis6MTBGMjcwMDA0M0Y5RDNGRDdBNjY0NDNDRUY5OTU1QzcwQTQ2RTdCRjg4Cis6MTBGMjgwMDBBQjQyRkE2MzkxQjhGREIyNjZBRkI2RENEOEE3MkQzN0IyCis6MTBGMjkwMDAzM0U1NTgyNDhFMUYzRjlFNkE3MzlEOUM0NEJDQzM3QkZDCis6MTBGMkEwMDAxMUU4REI2ODZDMzlCNTBCRTY2QkZDQTk5MUU0NTE0QkI2Cis6MTBGMkIwMDA2QTIwOTQ5QTg2N0FGOUQwOUIwODY3NjNERUU3NTNEMDc4Cis6MTBGMkMwMDA4RjUxOTVGNzI3OEFGQjlDRkYwMUYzRTJCQ0NGOUIyQjY0Cis6MTBGMkQwMDA0OTdFOUZERjZBRjYwNEUzRjg1N0IzQTBGRkRFREM1QUVECis6MTBGMkUwMDBBQUVGREQ2NkY0NDhCQ0JFNzY1QTA1RUE4MzM0MzZGRUUyCis6MTBGMkYwMDA5OTc0MDBGRkU2MkQ3MzNGMjVCQjA5QjU3NjI4RjdBMjY4Cis6MTBGMzAwMDA3RTg5REZCRDIwODVEQTUxN0ZEQ0MyRTVERTY5RDAxRjUyCis6MTBGMzEwMDA0RDMwOUY5MzA4Njc4QzdCQzgwMzczNENGMDlGQkRDRTI0Cis6MTBGMzIwMDA5QTA5Qzg1Rjk0M0YyQjdFQzRGRjAzRDg1NTlDQkU3QkNGCis6MTBGMzMwMDAyMENBQTdCOTlGRTc1QUY0RjM4QzI1M0ZDRjAxRTQxQkZECis6MTBGMzQwMDA4REE2ODhBMTEyRkFCOUZBQ0Y1RjExNUY1RUQ5QkE4NDhGCis6MTBGMzUwMDBGNEZBOTg5RTZCMjQzRUIyRjJFRTAwQkQ3RjdERUIzNTUxCis6MTBGMzYwMDBCNEFFOTNCMDZFODRDRkM5MUREQzlFNUI5OTZEMERFMTg4Cis6MTBGMzcwMDBGQ0FFNzY3MEZENzcyNTdDMjc0OUMzRTE5MjA4ODc0RjY0Cis6MTBGMzgwMDBCNjVGRTM0NjdDN0ZDMkY4NzhDMTNFQUUyNzdDNjIxRjQxCis6MTBGMzkwMDA0QzI2RkVFMzY5NDk0NjNEQUY3OUNCMzU5RjIyREY1QUMzCis6MTBGM0EwMDBCOTQzRjZBMjFDNjcwNzZDRTQxNzU5Qjk2M0Y2ODRFNTA0Cis6MTBGM0IwMDA1NkVDRTdDQkQ0NEE4NERCQ0VEOTc2OTlERUNCRkUxMDZGCis6MTBGM0MwMDBGN0FGMEM1RTBERUY5NTlEOTc3QjcwOUYxQ0RFNjFFNDlGCis6MTBGM0QwMDBGMzczOTg5RUM2Rjk1RkZENjc5OUU4NUVEMUIxMDBFQUM0Cis6MTBGM0UwMDBBQkJEMDZERjA0REM2RjlFRUQ3QkU2MjA1QzNGOTk5RkEyCis6MTBGM0YwMDBBNUEzRjZDRjRCQ0M4RTcwNzBCNEE2RTNGQjk1OTJFMjNBCis6MTBGNDAwMDBDN0ZENTVCRjY1NTU2REJDM0VEMjk1MkExMzdFMkFGM0M0Cis6MTBGNDEwMDBENkE1NDdBQzQ0RUYzN0EyOUM2QkRDQTEyN0JERUVGMDJDCis6MTBGNDIwMDA4MjBGN0Y3M0IzMkI0NkVGMkJFNTlFMUI2N0M0RTkxQjRFCis6MTBGNDMwMDBDRERCQkYyREU4MDEyNDM2QzA2OUE1ODA5MzMxNkY1RDE3Cis6MTBGNDQwMDAxMThFRkI0REY0QkZGMkJFOTYyMjFFQUZGOUZBN0QxMDZECis6MTBGNDUwMDBERERGREJGOTdFRjgzM0M4RkI4QkU4RUZDQjc2NkFGNEFGCis6MTBGNDYwMDBGQkQxRUMyMEQ1MUY2REYyMzJERjFFMkJDNTE1N0Q2ODU4Cis6MTBGNDcwMDBFNzE2QjgxNEFBMkY0MDAyMDJGQTUyRkVCMDc2RUYzQjBDCis6MTBGNDgwMDAzMEZGRkRBOTAxOEIwQkNBNzlDQzU3OEE3OEY1MENEOUNFCis6MTBGNDkwMDBBQjQwOURDNDI1OTFGRUMzQjYxQkI5M0VBOTcwQkZEQzJECis6MTBGNEEwMDBFNjM0RjZGNDg2Qjg3OUU2OEFGRTYwN0ZCQUIwOUYzMzE4Cis6MTBGNEIwMDAxRkZDRTk0RDg0NUY1M0VFRTc1Mzc4QkNFRDJCOEE1RjY4Cis6MTBGNEMwMDA1OTA3Nzg1Q0QzRUFGNTMzQTQ4QkU2ODFGOTZDNTk0OTg2Cis6MTBGNEQwMDA4QzFGMzY3QjM5QkYxRUM2NTc1QzdBQ0VCRjVDNDNENEM3Cis6MTBGNEUwMDA0RjREMUFFNzY3QUEzRjc4NUI2QjEyRjlGREI2Qjk0MjM4Cis6MTBGNEYwMDA2NjZFREYwNjE5RjJGM0VCQ0E2NTFFOEYxMTdBODk1RjFCCis6MTBGNTAwMDBGOEQxNENCRUQ3MTlDNjZCOTg1N0Y2OEU4M0YyQTBFRjkwCis6MTBGNTEwMDA3ODY3MkE5NERGMjk5RkVEOTVBMTZDRjUzREQ5NTU4MDM4Cis6MTBGNTIwMDBFQkY2RUE0NUZENThGMjI3QkUzREIzOTJGNDkzRUI3QzJGCis6MTBGNTMwMDAzMjhEQ0JFQTkzQzk1RTFGRjRCREU3NUEwNkUzNUVDRjc2Cis6MTBGNTQwMDA3Q0E5Mjc2MDhDMUExMEQ2ODhDNzQxMUMxQkYwNjU1NDEzCis6MTBGNTUwMDAwMkQzNUQ3MTc2RDNCN0JENzM1MzRGQzRDQjRCMUY5N0E2Cis6MTBGNTYwMDBGRjY4OEZGNzg5QjhDMjQ4NzBGMEE2NTY1RTg1RjBCRDc3Cis6MTBGNTcwMDBGQTJBOEU4N0NGOUVFN0Y2Qzc2NzY2RUVFNzU2REI3REYxCis6MTBGNTgwMDA2NkUzNzJDNkVGNTJGRDg0N0RCOUM4RTdBM0U1REI4QTY2Cis6MTBGNTkwMDAzNTcxNjI5N0ExMkYxN0Y3RDk2RjI1NkQzRkFCQkI3NEZCCis6MTBGNUEwMDAxNEJGNURENUM1Mjg1RUZCRDk4RjVFQ0U0NTdFRkJFOUQ1Cis6MTBGNUIwMDA5RTk3NzM5N0M0Q0QyRkYxM0JGNTc5OEIzQTlFRjA0QjE0Cis6MTBGNUMwMDBBOTdFNEE5Nzg4NUIyRkYxMUFCOTNGNzAxNDNGQTVEQURDCis6MTBGNUQwMDA5RTZERTFGNkQ4NTlFMEVFNDg3N0VBNzc2N0VCOTM3Q0M5Cis6MTBGNUUwMDBBODU3OUU2NTI2RTI2NzRCMDY4NERGRDNFNzJCNzRBMUZDCis6MTBGNUYwMDBGREEwN0U5RkQwRkYyMzgyN0VBNDdFODlFQzczNEJDOTQxCis6MTBGNjAwMDAxMEYxRDc1NTI2RkY5QjYzM0M5OEI3RTIyM0ZDQ0M0NTBECis6MTBGNjEwMDAzQzRBNDhBRjNFMDNBRTVCMTE3NjlFNTFGMURGODE3OEU0Cis6MTBGNjIwMDA1OERFQTNDNTYzOEU0QkM0MzNFQzJFQzJCQkExQzlBQTVFCis6MTBGNjMwMDBBMDdDNDhFRjEwRkNGQTdCM0FCMjVGMEM1OTZFMkJGMkJCCis6MTBGNjQwMDBBNUFCOEI5MjNBMzEyRUVGNEE0QTlFODI3RUY1OUNBQzU2Cis6MTBGNjUwMDA2MjZBMUZBQ0UyNzQxRDRDNjdFNEI3Q0E2NDJEMTJGMUY0Cis6MTBGNjYwMDA1QjNCRjc4MzY3NEY2Nzc2Q0MwM0Y5QTk4QkVCMEQ2RTk1Cis6MTBGNjcwMDBFNkREMjI5MzNFRDgyNzUxM0M0MEFDNUZFNUVCNDgyRkI2Cis6MTBGNjgwMDBDOEU3M0U5MzRDNDQyRkQyODA0NEZBOURBQ0VCNUI4NDk4Cis6MTBGNjkwMDBGRDhFNDYzRjVCNUNBQTVEQ0RFOTI3NUFGRTFCRDFDRkFDCis6MTBGNkEwMDA2RTc1QkM2MUY0MTNBMDM4REUxMkI3Njk2NEZBMTE3RTdFCis6MTBGNkIwMDBENzRCNkUzRjVBMUNGMTdCMjZENTBGMkRFMTdBNkI0NTU3Cis6MTBGNkMwMDA3RkI1MjY2QjU4OUU0MkZDRTFGMzc4N0ZFQTc2RDAzMzEzCis6MTBGNkQwMDBEMTFFNTFFMzhFNjMzQTE2N0JCODlFM0UxODQxQkJEQ0M3Cis6MTBGNkUwMDA3MkI5ODlFNERDMEY3NTgzRjlBOENGMjdDNjIxMDFCMzZECis6MTBGNkYwMDAwRUU0RjdDODYzQzhBRkQ4NUFFNTNGOTExQTI3RUYwRjU5Cis6MTBGNzAwMDA3MEJCQTFFOTZFMUZCRDlGMzVDMEU1N0I3M0ExODFGNDdECis6MTBGNzEwMDBDRUU2N0UyOTg4Nzg2RUYyMUI0MkE2N0M4QUJCMkMyNjE4Cis6MTBGNzIwMDBCOUZEQTBEOUMzRTMyODlFNzY4QUEzRkNDMEMzRTMyQzBECis6MTBGNzMwMDA1MTNGNkE2NEU3QkQ0ODZGRjU1NkYyM0IyNEM2NjM1RUVECis6MTBGNzQwMDBGQThCQ0NDNzFGQzc2OEZDREU1MjFFRkZFOTlERUIyMTc4Cis6MTBGNzUwMDBCRjQ2NjI5QzhENzU2OUY3QUYxQTY3Mzk2QjAzQzBDMEVECis6MTBGNzYwMDA3ODRCMzY5QTA5MEY1OTMyODczMzRCMzE3MUY5MzI5Q0Y1Cis6MTBGNzcwMDAwRjkwQkYzNjdEQkE0MDhDODg4NzQ0RjczNTkwMjQ5NjI5Cis6MTBGNzgwMDBCMzQ0QkQxQUJGQjE5NUY4RjM1MUMzNUQ5NEJBRkZBRDUwCis6MTBGNzkwMDBBNDY5N0Y0REJFQzMzRDNGQzQ3Qzg2NTFGMzFEODJDNjI0Cis6MTBGN0EwMDA1QUFDMzdBMUY2MkNFQTcxREEyMDZGRDVCMkNGRUNDMTkyCis6MTBGN0IwMDBGODRFQUM1RTAxQkREMUQ0MkY4OUYxNUVCRTc2MzY4ODlECis6MTBGN0MwMDBFMEIzOTIzQTdFRTcwNjlGOTVFMkM5OUFGMUUyRTdBNzk1Cis6MTBGN0QwMDAyNEY0QUY4N0ZFQUQxRUQxM0VGOEUzQjlCMzBCMjk2RTFBCis6MTBGN0UwMDAyOUVBQTUwRDNFOThERkMzN0E2RDdGMDQ1MkYxM0QxNkRDCis6MTBGN0YwMDBENEYxMEU2N0Q0RkM3MEUzQ0M5OERDMDczREMwOUEzNjk4Cis6MTBGODAwMDAyRDI2RkYxRkY4QjBCNkU3MzIxOENCNjJGRkQyODA3MjA4Cis6MTBGODEwMDA1NTk1RTNDRDJFOUVGRjkwQjg1RkQzRDMzOEJGMDdGRDNCCis6MTBGODIwMDAzNTNEOERFNDBFRDc2QjZCNDVGQzEyRjREOTM5QjhCNTc0Cis6MTBGODMwMDA5QUQ3RjkxOUM2MkY0MTVGQzg0QTIzN0RFMUYzOTMwNzkwCis6MTBGODQwMDAxMTdGMEIzRTIzN0RCRUY5ODJDMkZEMkVBMDc3QTA3RUU0Cis6MTBGODUwMDA2RTEyNzRDRUZBRjUyNDZGNTUzQTU4MkRGODRGQUYwMzU3Cis6MTBGODYwMDBFNDNERDJFQjAxNjk1QTkwRThBMjI1RjcwNkMwQzFERjVBCis6MTBGODcwMDBBN0Y5MEE3MTFFQUFERDk1MzhERjJCRDNCODdEREM1Q0IxCis6MTBGODgwMDA1Q0I1QjUwOEZCN0Y0QTYyMjhFRjM3MTQxRjRCNDdCREI0Cis6MTBGODkwMDBBNDc5RTBFM0Y0RTU3MURGQURFQTdGOTRFMEIwNkFBRjBDCis6MTBGOEEwMDA3RUM0RjU1Rjk5QzZFMzlENERBRkJDNDhGRUMxQ0Y0MjEzCis6MTBGOEIwMDAxMkVERTU3QTI1RDQzRDAzQ0FGNUY1M0FENEQwNTg3OTRFCis6MTBGOEMwMDA2OEYxQ0RFNEVGQUYzM0IwNzFCMEJFQjEyODhGNzAxRUQ4Cis6MTBGOEQwMDA3QkJGMTM5QzgxRjYxOUZDOTNFMEQ1MzZGRjBBOTI3QjFGCis6MTBGOEUwMDBEQkVBNEM1NjhDM0IzNDE3MkZCOTgzRTA2MDRGRjIyMTkyCis6MTBGOEYwMDAxQzM2MTQ1NzY1RTIzODRERjNFN0Q4Mjk0RTAwRkExNTQ3Cis6MTBGOTAwMDBENjM3REQ3RDBCRjk0REQ0Nzk2REU4RDdEN0EwREU1NTFDCis6MTBGOTEwMDAwMTdBRDYzRkMxQkM3MzlDRjM2QUJDQjBGRkM2QzhGQjdBCis6MTBGOTIwMDA0QUVGQjQ2MkRDNzg2NEZFRkI1RTNBQzc2N0E3RTQwRjc3Cis6MTBGOTMwMDA1RTVGNEU3RTQyMTZFRkY3Q0JFQkU3RkFEQzBENjkwNjExCis6MTBGOTQwMDA4RDVGRjg4NjM0ODVFMDMwMzMzODM4MEI2OUVGMzUyNTI0Cis6MTBGOTUwMDA2MjQxQkRCNzk5RjlCRTQwRkI5MkY5QUQ5RTNEODQyNzQ3Cis6MTBGOTYwMDBDRTQ3NUM2RDFFRjIxRjk5NUM5MTFGNUU4NkY1MzMxNUM0Cis6MTBGOTcwMDBCMjFGOTgxMjc5MDRDNzNERDNFREYyNkU2MDgyN0VCMTVBCis6MTBGOTgwMDA3Qzc3NDkwOEY5RThFQjY5ODEyNTg4REYwQUExM0Y5RTY5Cis6MTBGOTkwMDA3OUU1OUE1MkY0QjNBOUZBNTFGNzJFNzMwOEUzODRERDlFCis6MTBGOUEwMDAzNkNGM0ZENDIwMUZGQzgzQzJFM0UyQTZBMUMxNTk4ODExCis6MTBGOUIwMDA4RjNGM0FBOURGNkU3M0E4MUJGMTFGRENBNEE3RkE1NzhCCis6MTBGOUMwMDA2QzgxNDZBNENCNTNGMzZCOEEyODJGQzcxQTJDQzIzOEZDCis6MTBGOUQwMDBCMERFRDVDMzUwNEYwMDczODFGQzA5MjY5NzlGNjFCQ0YwCis6MTBGOUUwMDA3NDU2NzBCMTIyMjE5RjRGRDAzQjY2ODlGQzUyNjI5RUIzCis6MTBGOUYwMDBGMEJFNEFCMEIxNzE0MDA1Mjc0REI0MDUzQTJGQTZDNkY2Cis6MTBGQTAwMDBGNDkwMjM3RjVBQThFMDRCNTUzRkQxOTk3ODNDQUJCQThDCis6MTBGQTEwMDAyRTg5Qzk0OEY3RUI4N0RFRDRBMUZGREEzNTQ4RkE2QkE3Cis6MTBGQTIwMDA2MzlGNDRFMzM0MTZCRjQwRjk2MjZCNDQ1RTUyMzQzRjM3Cis6MTBGQTMwMDA0ODg5NTBCRUQ0RkEzNDhCRDAwMzNCQjkxRUNEMDZDOUQ5Cis6MTBGQTQwMDA1RTY2Q0Y3MTdDMzIxNkExM0NBQTk4MUREMTRFRURENEQyCis6MTBGQTUwMDBGRTBDQzJFRkRFMjhGQzJFMjBDMUE4N0U1MzlBQUE1RkJFCis6MTBGQTYwMDBERUE3RjVENzhCNzEzNzRCODMzRTE5RTE1QTJBNjlGQzIzCis6MTBGQTcwMDBDNUVBNzNBRkY4M0VFNUQwRDAxQ0RDQkY0M0FGQTg3OTMwCis6MTBGQTgwMDA5QzNDNEY3M0VCQjQ4OTVFNTQ5RDg2RTU3MUY2N0YzMUUzCis6MTBGQTkwMDAwN0U5MDYxNDZEREFBRjRERkQ5Nzk2QzdGOUJDRDg2NzM0Cis6MTBGQUEwMDBGRkUzNzk5QzVFQzlCNzFCOUUyRkE3MzlCNDc5OUM1RTkyCis6MTBGQUIwMDAwRTNGMzVDRTk2OThCRjc5MjYzM0FDRjA3Q0FDQzhDRURECis6MTBGQUMwMDAzRDQ4OUZGRDQ2Q0FGM0FBRURGRkQ5RkIyODFGNkI0REE5Cis6MTBGQUQwMDBBQzBGRTM5MDg5N0E0NjlCRkQzQjYxQTRGQkIzQTc0RjMzCis6MTBGQUUwMDBFRUJDOUY2MTFFRUY0QjVFQ0FFNzQ4RDAxRjEyRUQ4NDRCCis6MTBGQUYwMDBEREQ4MjQ3Mzc0N0RFRjM3NTE3QzcyN0QyRjVBRkUxRjQxCis6MTBGQjAwMDBEN0Y3QjgzRTFGRENDM0YzMDc1NDdFREUyQ0VDQjNCMzRCCis6MTBGQjEwMDBGNUU3OTI1MUNFMUM0QjUzRjVDRjg0M0M4N0E3NDQ5RTBBCis6MTBGQjIwMDBDM0MwQzg3OTBFOEFDODE3MDI3RDNENDg3NEIyOEZDNzFBCis6MTBGQjMwMDA3NThFM0M2RDIxRkU3MUNFQUVFQzQ2N0RFOUI0NkRFODZDCis6MTBGQjQwMDBGQjA4MkM0NUU4NDk5RDA3OEMxRUU0MTdDMEVGODg3RjExCis6MTBGQjUwMDAwN0Y3RTk3OTlDMDZFMzM2MThDNzc5NkQ4Mjg4RTM4ODUwCis6MTBGQjYwMDA3OEQxQUIxNkQyNUIxQTkyM0QyOUY4QkQxQUE3RjlBOTM0Cis6MTBGQjcwMDA5MDM3MEQ0OTNDM0VEMzY1MDlGQzNFNkQ4NEI4Q0QyRUNGCis6MTBGQjgwMDBBMTdGRUQ4MkFFRUNEOERGRkI0NjExQzcwNjA2ODFGNkY5Cis6MTBGQjkwMDBDRTgzMzkzQ0VFMjBFMjM2Njc0NURDRTY3OEIxMkU2QzQ4Cis6MTBGQkEwMDBFMDdFMDhGMjUzNzlCQTE0OTYwOUY1OUVGN0NEMjEwRjNECis6MTBGQkIwMDBGNzY3OTk3NDIwRjc5N0FBNzE5QkQ3Qjg5RjZBQTk4OEFECis6MTBGQkMwMDBDRjFDNUYzMDg3RjI4Nzk2NjM3RUJDOEM3RTBDRUU2NzFECis6MTBGQkQwMDA4RUU2RUIzM0JCMEVEN0IzMDZEOEM1MzY2NDMxNDE4MDExCis6MTBGQkUwMDBGQUU1RjA1QUQyNDlBODRGNzgzQUExNENDQUIyQUZBNzY5Cis6MTBGQkYwMDAwNkM2NUREMkE5MjM3QjY0Njk5N0Q2NUY3RTdFQzMxRDRFCis6MTBGQzAwMDAzNTI4QkYxRkU4RTRGMUM3NjA5NzQ0RjI3QjI5RjNCOUI4Cis6MTBGQzEwMDA1MURGNTBFOTYxNUM3QTJBRDE1OUIwNTNFN0MzNzFBRTI0Cis6MTBGQzIwMDA0Q0U3RkUwNDAwN0Q4OEQ2Mjc5RTlEN0FFMTY3MTdGMzk2Cis6MTBGQzMwMDA2ODY3QkEzMDNFNzUxMjdGM0U2MDU3NkE0Njk0Q0JBMjIxCis6MTBGQzQwMDBCRjRFN0Q4QkE5MTJGNUQ4MUMxREY5NzlDRjFCN0M3NTkxCis6MTBGQzUwMDBFNDI3NzUxNjExREUzQTZEMkQ1RDM1QkM5RUY2Q0E3OTI2Cis6MTBGQzYwMDBGMzkwOUZFQUFGNTRCOEEyQzczQzRFRTQ5MzYzRDI0NUU5Cis6MTBGQzcwMDBGQzI2NjFCRENCN0JCNEU1QzRGOEMzQUE5MEI2QkM5NEE2Cis6MTBGQzgwMDAwNUM2NjdFMjM5ODVCRERBRjc2M0QyMzlGRjNGQkYyMTg4Cis6MTBGQzkwMDA1RkY4RjlCREU0RTdFRkQ0N0I3RTk1OEY3Q0FBNUIyMTBBCis6MTBGQ0EwMDAzRUQ5OUVDREUxQTVDQkUxQ0YwMjQ3NzUxREU5MDcwRUY4Cis6MTBGQ0IwMDBEMDJCNjhCRTdDRkUwNTU3QkEyNDk0OTc5RDBFNEU5N0I0Cis6MTBGQ0MwMDBGRkRENzkyN0NFNzc3NjdBMTFENzEzNTBCOUMzN0RENDZCCis6MTBGQ0QwMDAyRDg1MzhCQ0Y4QkMyRkQ1NUZCMTIyNUQ2QjZGNDZDQjRDCis6MTBGQ0UwMDBGRkYzRjYyNkE3Qzc2RTU5RUMzNzNCRjE5RjI1MjJERUJFCis6MTBGQ0YwMDA3ODVDRjIzRTFEQzZGNzU2RDAwQjYwREU0QkJCRTUzMjlBCis6MTBGRDAwMDBENDRGNjY3REM3NEFFQjY4N0FDRDFDMzI0MjdERTNCQTk4Cis6MTBGRDEwMDA0ODJFRUVBM0E2QUE0ODUxQ0IwODcwQzVEOTJBMkFERkRGCis6MTBGRDIwMDA4Mjc2NEI1QzYwMUZFMEJFRUREMkM2QTE4NkM3MTU3RDEyCis6MTBGRDMwMDBGN0E2QTdBMTFENzI3Q0RGQ0YxMERGRkJDQzI0OTdFMEQ0Cis6MTBGRDQwMDBCRjBFMUFEMURGRjE0QTNFRTk0QjUzNTIwMjFERTkyODlBCis6MTBGRDUwMDBDRjkzQzIzQjlGQzk0N0ZEODRFQjQ3OEQwM0M2NURBODg3Cis6MTBGRDYwMDBGRjJERTlENDlFQUI2MTFCQjU3MTJFRDZFNTI0N0YwNjJECis6MTBGRDcwMDBFQkQ1QkVDN0YzMkI5QUVGODZDNUJEQjg5Q0RGNkMwOEU4Cis6MTBGRDgwMDA0QzQwQkRFRUVBQUI3ODdDRkRGNDJBMUQ0M0ZDMkU5NTc5Cis6MTBGRDkwMDBCRDJCOTA4RjlDMzY2QkY1RUVEMzM2OEVBRkRERTlBQTg2Cis6MTBGREEwMDA5Q0YxMTYyMTlFQTNFNTYxNzhGNjE2MjE5RTk3RUE1OEVDCis6MTBGREIwMDAyMEJFOUY0NkM0RjM1NENDNEVFNzc4M0VGREUyRTU0NUI1Cis6MTBGREMwMDA4OEU3Q0ZGNzVENUU4NDc4REVBQ0VGRjFFMUJFNzlDNkZGCis6MTBGREQwMDAxOTc4MUFFMTczNjJCNjlGRjQyNjM1QUZGMjUyRTlCMTkxCis6MTBGREUwMDAzRjgxMUVGQkZGREZEMTYzNUQ3Q0JFNUZBMjFDM0MxQzFDCis6MTBGREYwMDA4NTk3NTYwRUJBMEM5RTZDRTQ4NzRCNENDNkFGOTU4NzIwCis6MTBGRTAwMDBGODM3QTIzRkNENjQyNDdGQzQ2QjdGRkFGMjIxOTQ2RjUwCis6MTBGRTEwMDBDMTAxOTlGNDBGQjVCRkQ3OTRDMDU4RjQxN0JDRjZCRTEyCis6MTBGRTIwMDBEQjFCOTQ0NkVGQkY0NUU4NTU2RTEzMEJBMkRGNDNENUFECis6MTBGRTMwMDBGNzU1QkQzMTkxMUZCRjJGRTA3ODJBREQ1NzhCN0FCNjc5Cis6MTBGRTQwMDBFQTlGQUQxNzdEOUE0MjVGNzJGREY0Mjk4OUZDQUYyNkM3Cis6MTBGRTUwMDA0RjFGQ0ZBRjNGQjBEODhFRkVEOTUzMjFFRThGNkQ3QUIyCis6MTBGRTYwMDBCMTk0RkNCNUFCNDJBRjg3MzFGRjg5MEQ0ODc2QjQxQjI2Cis6MTBGRTcwMDA1NjNERjU3MTMyQzZCM0MxMEVGRDI0M0QyRUJFMzI1QjM4Cis6MTBGRTgwMDBEOEExQTc0MkM3OTMzMUVFMERFM0Q3QTA1Q0I2Qjg4NkUwCis6MTBGRTkwMDAwQzQ4QkY0RDYwOUY0MTEzRDZBNDBDRDFCOUEyMjYxN0MwCis6MTBGRUEwMDAyMzc5NUZERUFGQjVEN0Q0RjhFNDM2QkY4MUY4RERCNjhECis6MTBGRUIwMDAwMTI5ODRGNjU5QkEyMTkwOUY4REYyODk2NURCNEY1QTRBCis6MTBGRUMwMDA2MkZCRTU3N0U5M0UxN0M2MkQ2MzcxNjFERkVGNzE1RTc2Cis6MTBGRUQwMDBBQTVGMjdCMjM1ODVFODMwQTI2NzNFRDIwM0I2REEwNEJFCis6MTBGRUUwMDA1RkUyRjE5QURGNkQ3Nzg0NzhGRTEyNkZGRkJCNTAzRUMwCis6MTBGRUYwMDA5NTU1NzlCRDQyOUNEMzVCMjFDRUU5MjFGRjBFMjdGMEI5Cis6MTBGRjAwMDBFRkY4NzIzNERFQUM5RTQ3MDM3RTFFMUUyOUZFMUQ5NzVECis6MTBGRjEwMDBCNzE0RkY3RDEzMUIxMkY5NzkxNzhEOUE3RUEzRjkzQTU2Cis6MTBGRjIwMDAyREE1MUU5OEY3OUFEQkFDNzQwRUIxMTlFOEJBQjUyQzYyCis6MTBGRjMwMDA0Njg3MEQ2MjI5MkExRDM2MDlCRjZFNzNGRDMxQjIwMzUzCis6MTBGRjQwMDA5QUYxRkMwNUVBNTU1RTRFODcwRDYwMUY2MTdFNjdFMkZGCis6MTBGRjUwMDBCRTY1N0REQTdDQzZEMUY2NzE2OTg2NzYxRjQ3Q0I3Rjk4Cis6MTBGRjYwMDAyMzNGRTZDQzBDRURGRTU1RDdBRkZBQzFBM0VCMUM5MEI2Cis6MTBGRjcwMDBGOEZFNEE1ODU3QTI1RDk5RThCRjU2RURDMjRCRTU2QkIzCis6MTBGRjgwMDBERjg5Q0U4N0MzMjM1QUZFMUJGM0I1REIzMzQ2RTM2QjExCis6MTBGRjkwMDBEQUY4QzA1RkNERDcxMkUzMDQ4NURDRkY4RDcxMDI4Q0U3Cis6MTBGRkEwMDBEQkZFNzdFMzA0OUY3QTdBRDI3NTNDNEY1RjEzM0ZFRDE3Cis6MTBGRkIwMDA5MjVBQUUzMzhEQzVCODIyOEYyRjM3REE4QzE0ODc0RDA1Cis6MTBGRkMwMDA4Q0FCMzY3QkU2ODgzOEUyRTA2RkFFNDBCOUI5NUZDRkU0Cis6MTBGRkQwMDA1MDlFRDc1QjU3NTJCQ0IyNTk3RUNFODA0NzBFODdDNTI0Cis6MTBGRkUwMDAxMzk1ODNBNEI3RkZCNTcxRjVGNTE5MzYxN0YxMjMwRkYzCis6MTBGRkYwMDBDQkM3Qjg3QTYyNUVEMUVCRDYyRjUzMDM3MUY4QUQyQTI2Cis6MDIwMDAwMDIyMDAwREMKKzoxMDAwMDAwMDAxODU3RjA0M0EzNjI5NDExNjdGNUVBRDM3ODNFQkMxMDcKKzoxMDAwMTAwMEFGOEJGQzE3Qjc4MUU3QjEzRjZDMDMzQjBCRDZFN0Q2M0MKKzoxMDAwMjAwMEYxRkM5Q0JGNEZGMzZGQ0U0ODQzM0VDRUUxRjdDNDJCQUIKKzoxMDAwMzAwMDM3MzEzQzc3RjQ4NEJFOEZGODQ0QjBEMUVBNDU3RUE3Q0YKKzoxMDAwNDAwMEZBNTVBMkUzMDlGQkYzNTJFOUZBQzcwOUZCRkNDNzdGQTMKKzoxMDAwNTAwMEUzN0RERUFGRDJGMzVGMUJFRkRBMDI2QkQ1RDAzRkEzQjcKKzoxMDAwNjAwMEI4RDZEQjE4QUZDOTFGNEVBN0EzRjUzMzFBQkRGRTIyQzEKKzoxMDAwNzAwMEMzRkY2NjA2RUQzM0RGMTRDQUJCQkQ0NDdFNjIyOTFGOTEKKzoxMDAwODAwMDNBOEVGRTFCQjZERkU4NDE3QkMyMjRDRTY1QjA4RDk5NjcKKzoxMDAwOTAwMDIyNEZEMjVCMzE5RkYyODVGOUI5MDZGNUZDQzc2ODdBMjkKKzoxMDAwQTAwMERGQzdEMUZEQ0VGNUJFOEY0N0U1M0JGRjM1QkRBRkNERjgKKzoxMDAwQjAwMEU5M0Y4RTcyRjY0NEE1QUYwOEU1RTIwMzM2OTgzRkRBRDEKKzoxMDAwQzAwMDczM0YzMjhFNzhDRTQyM0QwRjAwRjRDNENGOUIzQ0NGQkQKKzoxMDAwRDAwMEUzREM4OTc0RjU4NzA0N0VGOTg3RkYyNTdFQTk3N0ZGMjUKKzoxMDAwRTAwMDhERjg2NUZEMUY5M0QxQUYzOTdBM0Y0MTlFRjc1QjM1OUYKKzoxMDAwRjAwMEU4MTM3MTI5ODY3MTIxNzUxRENEODMzQ0JGMkM1REU0MDkKKzoxMDAxMDAwMDREQTlFRkJGMTI3QUVDRUQ2RTVGODYxQjlFOUY3RjYwNUMKKzoxMDAxMTAwMDMyQjExNDUwNzE5MEM2NTBERkYyNUJDOURGREZENEM3MzMKKzoxMDAxMjAwMEYzNDA5QUQ2MzE4QUVCQUFFNzI4OUJGQUU3MzNENEVCNUYKKzoxMDAxMzAwMEY2QTcwNkYyRjFGQjA3M0VCNDA2RTUxNEY0ODMyRjYwNDAKKzoxMDAxNDAwMEE4Q0Y5REY5ODA5NzVCNTIwM0UzQjBCRTc5NUQ0NDEzNUQKKzoxMDAxNTAwMDU3QThCOEY4RTU3QUY0NTdDMDdDQzlGRTc3MTlCNUU3MTcKKzoxMDAxNjAwMDI5RTZCQjM5M0Y1MzlGRDcwOTc4NDdEN0U1RTJGMzY0QzcKKzoxMDAxNzAwMDdENzIwOEY1NDA4QjY3OTBGQzQ0NERGQkI5NzI1NjIxQTcKKzoxMDAxODAwMEZCQzgxRkNGRDYzOEU5N0M0NEQzRkVDQTUyM0E2RkRFOTMKKzoxMDAxOTAwMDY3MkU0NTNEQjZFMkEzNUEzQkZBMUYzRUJGRDI0NTc5RDIKKzoxMDAxQTAwMDA0Qjk3MjY0MTVFQTUxQUZBNzA1NjZFMjdDNkRFNUExNUEKKzoxMDAxQjAwMEI5QTg4N0U2ODExRThBN0FFREU3RkJFNjk2MDZFMkZDOUYKKzoxMDAxQzAwMEQ5OUJEMTlGMERGRDZFQjY2OUZERDVDQ0M0RjNDMEVCQjQKKzoxMDAxRDAwMDc3RjMzQ0RGNTc2QzgxMzlEOERGNjYzMzlGNkY3MDkzQkMKKzoxMDAxRTAwMEM4NkIxNjdFRUNDNEZEQUZFRUZCRTgzOUM3NUI0RDE0NUYKKzoxMDAxRjAwMDc3NTZGOUMyNjYzRDBCQTA1QzUzRjk0OTg5Qzg4MzAzNjEKKzoxMDAyMDAwMDc4RjAzQ0JDODFGOTNDOUY0Mzk0QUQyRTZEM0VFMkE5NTEKKzoxMDAyMTAwMEY0RDkyNTM4OUYxMjM3OEYwQjJDMzcwRDQ5RTg1NzVGREIKKzoxMDAyMjAwMDJFRTJFQ0Q3ODg3QzA5MzUzRkNBQThGOEJGOEJFREQ5MDAKKzoxMDAyMzAwMEJBOUE1ODdDQkQwMEJGQjc4QjczQkYzQzBGQzY3MjgxQTIKKzoxMDAyNDAwMEVCQzcwNTc2MDNEMThEMERGNjE3RjkzRjgwNkUxMDNGOTEKKzoxMDAyNTAwMDMzODcwNjY3RTE3OUEyQzJERUYwNEM4NEU3NkIxNzc0M0UKKzoxMDAyNjAwMDA0MEY2NUZFREIxNDFGNDk0MUI0NDEzRjYzMzc0NkJBQjIKKzoxMDAyNzAwMEM3QTM5RkM0RkVFQjJCMTEyRjlFMUU3QjE1ODI2RTdGQTIKKzoxMDAyODAwMEFBQkZEMTRERkVFQzk2NjJCNDFCQUJGRTU5Q0ZGM0ZDNzYKKzoxMDAyOTAwMDBFNThDOEZFRUZDRDZEQTAzQ0JGMzMxRjFBNDczQzE3NjgKKzoxMDAyQTAwMEEyM0U4M0VDM0VDQUVCMkJFODdGOEZGQ0Y0QjZGREQyNzYKKzoxMDAyQjAwMDg4Rjk5QTVENkUyQjhGMUYwNTA3Mjk3RjhDQ0Q3NEYxMEQKKzoxMDAyQzAwMEYzODQwNzNFQTJCOEFFRDJBRDkwODdBMjUzRUZEM0UxM0MKKzoxMDAyRDAwMDM5QTg2MDNCMjNGRkU0Qjg1RUJCMEVGMTkyMjdGMjQ3REEKKzoxMDAyRTAwMENFQkVGNjlGNTMwMjY0ODdBODdFRjkxMENGRjdEMTQ3QTAKKzoxMDAyRjAwMEQ2QTM1REE1QjQ0N0FFODIxRENDMUFGNzNCNzQ0RDI1M0QKKzoxMDAzMDAwMEQ4REY1MDEzQ0Y1QkI3MzBBNDkzQkNGRUIxRjc3RDBCQTEKKzoxMDAzMTAwMENBNzk1RDc2MjYyMUZGNzk3NTREMUVGOTQzNjE5REUzMEIKKzoxMDAzMjAwMDQ2NThFNzFENkU5RTlGQTMxQ0IwRTg1MDZFMjk5QjE4OEYKKzoxMDAzMzAwMEU1MTcyQThFRjQyQTlBRjdBMzUwODY3RUQ2MDhCQTUxN0EKKzoxMDAzNDAwMEUzOEQzMDVEMzdDQUEzREJERDgxMUQ4OEVGRTgzOTk4ODYKKzoxMDAzNTAwMEQ2MjQ3RTBFNDY5Q0JCQjRCNTdFRjgzQzlFMkZEOTY5NTAKKzoxMDAzNjAwMEUwRTcwQzBGQkQzNjY5MDFGOUU1QkExNTA5RjE3MERFNTkKKzoxMDAzNzAwMEIxMzhDRjBFRUZGNzhBN0Q2QjUzMDY5OUREMUEwRkZGNjgKKzoxMDAzODAwMDQzOTQ0RjU5NzA4MEU3OUQyOTdBNEUyNzRBQjc2QjE3REYKKzoxMDAzOTAwMEZBRkQyRUE0MDQyODZGRjRDQUNFQjA0Q0YxMkFGQjg5RDIKKzoxMDAzQTAwMDQ3NkEzQzcxNzZDQjE2MkU0NzlBRjY3MjdCMzlEMTRFNEUKKzoxMDAzQjAwMEY5MjZGOTcxRDBBREQ1NEJBMkU1QkY5MTVFRjI3NjgyRjgKKzoxMDAzQzAwMERDRjhBQkVEMEZBNkI1REIxMkY1OTM0NDNCNkQ5ODVFMDAKKzoxMDAzRDAwMDlERDBERjY4N0E4QTlBQjc1MTE1MUI4N0U4RTE3NTlCMzMKKzoxMDAzRTAwMEFBMDcwNTM1NzkyRDU1NTY3MUFFQ0RBNEVEN0ZBRjhCOUIKKzoxMDAzRjAwMEYzMDkzNUNGMjVCREMzRDM4RTc5RTM0MzNGNjBFNDQ3OEUKKzoxMDA0MDAwMDUzRjM2RDgyNTVEQzJFMDhFQTRDNzRERUNEQ0Q3QTI4OEMKKzoxMDA0MTAwMENGNjYwQzBCNEIxMkU5RjcxMTNBRDc5OTgxRjkzNkYwRjgKKzoxMDA0MjAwMEREMDdFRTAyN0UzRTg1NzlCQjY0RTI4NzFFMDlFNzZEM0IKKzoxMDA0MzAwMEM2M0MwRENBQ0IwQzZENUQ4MUUzREM2MEE1NzFDQzk4MjgKKzoxMDA0NDAwMEE3MzExNTQzRURCRUFEQzgzRjY3RDVGMzM4NDMxNkM4OTUKKzoxMDA0NTAwMDVCQTREQkFDNDI0RTg3RTYzQTlFQUZBMUU2NjNBOEY5MDcKKzoxMDA0NjAwMDEzMkExQ0FBMDQ3Q0IzQzZBRkM4NDdGREJGNUIwQUZDQjUKKzoxMDA0NzAwMDQ4M0Q0RjFCN0Y0RTNBN0EzRTdBNTUwMTlEMjc4OTlFMTMKKzoxMDA0ODAwMDhGMkI2NEEyRkVEMkNFNDkyN0MyNTNDRERGQThCMjA3N0MKKzoxMDA0OTAwMEVDOTk2OUMzQ0ZDQkFBRjQxMTg3Mzc5QUQ3QjYwMzVDMUUKKzoxMDA0QTAwMDVGQUZBQTM3RDBGQ0NGQUU5QTQ3N0VDMkIzQUI3NDBDMTUKKzoxMDA0QjAwMEY3NERENTgwOTFEMzVCQzI3OERCQTJGNzYwODRDQzc0MTIKKzoxMDA0QzAwMERGODVDMEZCMzdFOUFCODBDRjYyRjRDMzFFNkFBQjk5MEUKKzoxMDA0RDAwMDdBMDI2MDdCQjhDRDRGQ0ZCMzY2QTk0RkJFOENDRTJCQ0UKKzoxMDA0RTAwMDJFNDJDRUY0NjVFNkI2NUFCQ0E3RTBBQzZEMjgxN0VGRjUKKzoxMDA0RjAwMDM5RjgzMkVCRkU2RjUzMzk2REU4Mjg5NjkzQjM5RUZGQkYKKzoxMDA1MDAwMDM2REU3QjcwNzZEQ0QwNEVCQ0Y3QTA3MDVCMjVBRjQ3NDMKKzoxMDA1MTAwMDFBQ0M2MkVDQjJDQzhBNkYwNzY5REREQ0FGMzQyQjc2ODMKKzoxMDA1MjAwMDNFQkIxQ0UxRDNDODIyRUIwN0M5N0ZDM0YzRjMzMTlGNjUKKzoxMDA1MzAwMDBGRjFFMEI2MUE0ODlGNzE4QjNDNEE1NjJERjIyQTMxRDIKKzoxMDA1NDAwMEMyMDJFNThFQ0M1MjhBNDc1Qjk5NjdGRjIwRDY2N0YzREIKKzoxMDA1NTAwMDczNDA1MDRGRjREQjMxOEVGQjdENEQwMkFGMkM1QkY1QzkKKzoxMDA1NjAwMDEzNDU4MkM4OUYzQUYyMURGNDdEOTQ4RkVFMzc4NkI4MEEKKzoxMDA1NzAwMEJGOEE4RkZGRUU4QjkzMjk3RUE0RTY4NzMyNjZDRjU5MjAKKzoxMDA1ODAwMDM4OTlGMjQ5MzQ2NUY1N0UwM0E2RDg3MzUwNUZFOEQwRjgKKzoxMDA1OTAwMDBCQkQ1NDk0NTM1MzAyRjMzM0UzRjRBMjc3NjdGRjVEMkEKKzoxMDA1QTAwMDA5RUU4M0QzMkZERDVCODg3Q0U5MUEwM0U4RUQyM0YwQTUKKzoxMDA1QjAwMEExN0ZDREUyN0NFOEFDREVEQTI1ODE5RUY2NUU3MkUwQkEKKzoxMDA1QzAwMDE2RUNFNzdEQ0JBMjM5MEU1ODU3NUQ2QUE1QzE4MUYzQzEKKzoxMDA1RDAwMDBERkU0ODQ2QkU5ODI2RjBFRDU4QzhFN0U3QThGNjRCNTIKKzoxMDA1RTAwMENCQTFERjBFMzNFQzVGRjgzRTJEQTBGODI4OEYzRUIwOTQKKzoxMDA1RjAwMDUwQkEwMUU2REQyMTcxN0UwQjFGQTU5MDVENTJFQzQ5REEKKzoxMDA2MDAwMEMxRkNFNDA2NzExRTUyMTZGQkZFOEFCRTREMzJFQUQzQ0YKKzoxMDA2MTAwMEJGNkFFQjlGQTExNEM2RTUzQjg4RjhGMTdCRjlFQ0Y2QzUKKzoxMDA2MjAwMEY5MjNGODJENUIzMzM5REY1RTIwN0IyNjIzMURBRDk3NDAKKzoxMDA2MzAwMEZBREZBRUNEQzRGNzlDMUU2NzI3Qjc5NjYzNUVGMTM1MkYKKzoxMDA2NDAwMDk2OTY3Mjk0M0ZDM0RFQTdDMEZCOTJCOEIyOTFCNzZCODcKKzoxMDA2NTAwMDMwMERFNUUyRjk2NDlGMjVCMDJFMTNFMzNFOEIzRkE2RjMKKzoxMDA2NjAwMEI4RTRGN0IzREUzRDhBNzkwNUVGRUE3QjY2MjVBMzdDMjMKKzoxMDA2NzAwMEM5MTdFN0ZBODU1RkYwQ0RGMUFBNUZEMEM0Q0I5M0I4NzQKKzoxMDA2ODAwMDVGMzA5QUFGMzU5OUU3OEJENTJFRTRFNzEwNkI0NTNFODYKKzoxMDA2OTAwMEMyMUMzQjNGQjczM0E3M0NERkRCMDE1M0JDOEUwRDI5QTcKKzoxMDA2QTAwMEM4RjdFNkJDRUY0RjQ2QkI5RDJEMEM5NEZCMjc4RkFFRTEKKzoxMDA2QjAwMENGMzBCN0RFMTNCRjVGRTc3QUUyQ0FGMEVGREE2MjZERTAKKzoxMDA2QzAwMEY5REI1RTZERjlGQUU5N0YxRTFGNUZERTY1RjE2REM1MkUKKzoxMDA2RDAwMDc1RkY1NEUyRjk4REMxMkI5ODlERDZFOTkyODJBODc3RDcKKzoxMDA2RTAwMDRDN0EzOTRCOUNERkU0Nzk3OEZGMjhFQ0EyOTdBNzMzNEEKKzoxMDA2RjAwMEFBNEZERjZCREE4REY5RURBQTFGNTkxNkY1OTNEQ0NDMDIKKzoxMDA3MDAwMDk0RTdFNEY3MDVBMEJDMUE5MjQ0M0U5RjhCNjIyNUVDNjcKKzoxMDA3MTAwMEE1M0JFQzFDN0VEMEQ2MDBGREJDQjREODQzRkIyM0RENEEKKzoxMDA3MjAwMEFBNjM1N0UxMUUyQTM3OTExRTUyMzFDNjk0ODQ3NDczMEUKKzoxMDA3MzAwMDQ4RDA5RDdBMUU1N0E1QzMwQTg1RjkzMTNGMDE4NjVFRDAKKzoxMDA3NDAwMDg4Q0Y3N0Y1RjY4M0U4M0YwRTdFQ0ExOEM3NTdBNTQyRDMKKzoxMDA3NTAwMEY5ODU2MjJDQzZEQUE5RkM5OEEwRUY0MzYyNEVDMTFGNEUKKzoxMDA3NjAwMDI4QjQ5RkRGQjAxOTA4OUZGMkNGRTU1RDI4MjczMEY2NDcKKzoxMDA3NzAwMDgyN0VFMTczMUIyN0QyRkNENEZEMDNCQkJBRDA5NTRFMTkKKzoxMDA3ODAwMDJFNkJEMUFGQTJDMzQ5MTQwQjdENDJBNTZGRDQ4MEIwQUMKKzoxMDA3OTAwMEREMThGQ0NGN0NBMjczRTIzNzQzRDNGOEZEMDlFRkU1MDcKKzoxMDA3QTAwMDczN0UzMkI0QzkyOUNFN0JGMTc4NTg4RTI5REFBRjBGMjcKKzoxMDA3QjAwMEZCQ0Q4QzhFQzNDRjEzQTU4QjMyNTQ4NTc1QjBFRTRGMTUKKzoxMDA3QzAwMDMyRjM2OUQzNEEwMzNGRkIwM0M5NjVBQjM3ODBFMzE4QjMKKzoxMDA3RDAwMDkyNEQ3NDBFNDZERDM3RjZDRURGQkU1RDdCMDVBRUIzQkYKKzoxMDA3RTAwMEU4N0JCNENFNzkzNjNCQUVCMzE4QzhCQUNFNDk0RjVGN0EKKzoxMDA3RjAwMDJBRjVDN0Y3OEY5Q0U0RjVFMDNFRjk0RUNEMkIzMzk0RjQKKzoxMDA4MDAwMDM4QkE4MUVGMUJGOUY3MTZFREY3NkVGOERFMTlGNzdEQjAKKzoxMDA4MTAwMDMyN0M1RjMyRkNGQkE3NkNBNkIwNkUwQUY2NTNFMTg5MEUKKzoxMDA4MjAwMDEwM0YwRkQzNjJFNjg5NzVDOUU5RkNCQjc5MjJERkIzQkIKKzoxMDA4MzAwMDMwMTlEQUEzQkMyOUQ2RTY2M0IwRTk1RTEzQkZBRjQzMzMKKzoxMDA4NDAwMDlCN0Y3MThEQjQyRTEzRjdENTVDNTNFMzQwMDRGQUZCMDQKKzoxMDA4NTAwMDk5QzBEQjM1QkFDMDU3NzgzRkREQ0YxNjE1MURDNkZERjAKKzoxMDA4NjAwMDU2NjMwQTI5NjgwRjVEQ0JDMkVCMTE5OTY3MkIwMzRGQzIKKzoxMDA4NzAwMDM4QzYxMjNGRjgwQkVFOEIyNjM5MzBERTA5RTVEM0ZBODUKKzoxMDA4ODAwMDlFQzIzQkYyNjlCRjVDQ0M5QzM2N0NCRTJBNURBOEYzNUQKKzoxMDA4OTAwMDQ1RkE0MDNBOEJEMjQ3QzJCQ0EzNzhCQUFFOEYxMkQ1ODQKKzoxMDA4QTAwMDc2ODBERTgzNEY1NTBGMDI0QjlBRTcxMzdCNzI2MkVCMjMKKzoxMDA4QjAwMDAyMjI5QTYzNkEyOTQ0M0RFNDY3RUQ0MUUyMUJENzM4N0UKKzoxMDA4QzAwMDFFQTFCQ0E1MzM2MzAyQUUyQ0MwN0ZERDY1NUZEMEJEMjkKKzoxMDA4RDAwMDI2Q0NCRDc4M0NFQUY3MzBERkI0QUNCNEZGQkRGOUFBNTIKKzoxMDA4RTAwMEZBREVCMDdDREE0RjBEOUE3Q0RBRDFGNjk1M0E2RTMzQTcKKzoxMDA4RjAwMEUzRjdEM0NDMUFEODQ1RjlCMUNEMEJBRDVFM0NFN0QwQzgKKzoxMDA5MDAwMDhDRjk5REU1MTQzRjIyM0QwRUNGMDFEMzNEMjc5MjQ5M0UKKzoxMDA5MTAwMEU4NUQ5NzlBNzdDQkY3NjE2RkEzODdGNEI3MjgxRjE3MjUKKzoxMDA5MjAwMDc5RTNCREE1N0NERUJENzc3OEQ0N0I0RUI4N0VCNzk4RTEKKzoxMDA5MzAwMEYxN0I1MkQ0N0I0RTk2REJBOTVFQ0QyRkVGRERDNUZENUEKKzoxMDA5NDAwMDc4QkQyRjhFQTdGMzUwQTBCRjkxQkVDMDUyNzQ3QzdFOUQKKzoxMDA5NTAwMEY5REFGQjU1RjA0RjRBOEZFNTQzNkZENjczN0Q3MzlCRjEKKzoxMDA5NjAwMENFNUI4MTcwREU4NjcxOUVBRjg5RUZERTk0QTVGNTlCMkMKKzoxMDA5NzAwMEE4RTU0NEJGREUzM0NFQzAyRDU5RTgwRjI4RjFFNTRBODMKKzoxMDA5ODAwMDQwM0Y0QjBEREM2RjA3RjRCNTFEQ0Y0RUQ0QjA5NkE3OUEKKzoxMDA5OTAwMEYwRkVDMEI5QUNFNUQ3QkFCMTQ0NUYwMUEyQUY0OTVGODAKKzoxMDA5QTAwMEYwN0IwNTYzRjRCNTk4RDM1NzkwOTg5MjRBNUY1MUJBOUIKKzoxMDA5QjAwMDJBNEVDQzlGMEFBQ0M2RjZCRDhFQkU4RjlBNTA0RjFERjQKKzoxMDA5QzAwMDMwMTI1RUQ0M0NCOEM0N0QxQzM3OUYxMzdBM0UxRjk3MEIKKzoxMDA5RDAwMDJDRDM3Q0Q2OEUzNDlGNEJBMUYzNzhGQUNBNjA5QzlFQjAKKzoxMDA5RTAwMDQ3QTNGNzBDODUwNTZENjUzMTdBREY2NTA5QjRFM0I4NzcKKzoxMDA5RjAwMDUxQkE1RkNGRUQ5MTYxRjM5NkFENDQxRjM3REUyQ0YzMTIKKzoxMDBBMDAwMEZDNzAwQjk3NTcxODhGQzg4NEYxRTc4QkYxNkZFQ0U2RjkKKzoxMDBBMTAwMDc0NzRBM0NENDA3NDM3N0ZBMDkxRjI4NTU4MzU4RjJCMjUKKzoxMDBBMjAwMDc4RTE3RkRDMEVGNDExN0NFQkM0NzcwQjVEQTU3QTI0QjIKKzoxMDBBMzAwMEQ5ODVCNURBRjg0MzlENTU4RDZGRjhGNUI4MUY2RjVDMTEKKzoxMDBBNDAwMEE4M0YxNjJGRUZFQkQ4QzYyRjMwQUZBRDBFRTMxNEVBNTgKKzoxMDBBNTAwMDc3MzBFRUUzNTlEMUYzN0ZFMzMxNEU3MTU4RDhFOTY3MkYKKzoxMDBBNjAwMDgxQkU5MUZFREY0ODVCQjlGRDBFQTBEQkYxOEY5Nzk0NEMKKzoxMDBBNzAwMEExM0Y2Nzc2RkFBQUE3MzY0MUY5OTk2RDEzQTlGQzQ2RkEKKzoxMDBBODAwMEZBQUQ3N0JEOEJGNTNCOEJBODVDOEQ5N0I4QTBCREQxMzcKKzoxMDBBOTAwMEM4QkYyRkFFQjg3OTVFM0U4QzdCRDgyQ0ZBQzU3RDg1NTkKKzoxMDBBQTAwMDc2NUY1MkEwNzczRUI0NzM0RjI5MjhDMzdDQzM2QUMxRDYKKzoxMDBBQjAwMDFGQ0VERUMxRjNEREFGQkRDQ0M2NTMzODU3N0FDODZGNDkKKzoxMDBBQzAwMDU0OUQyNEVBQkZDQkZCN0RCQkY0NUZDQTMwRUZCNEJBQzAKKzoxMDBBRDAwMDgwREZFM0YyNzZEOTRGMjc2MkY5QjBGNEM1QTI5MUUyNDQKKzoxMDBBRTAwMERGOTM4QUE1RjAwNDgwNEZCNTkzQjdBRjJERkI1MTE2NjUKKzoxMDBBRjAwMERBRjFENTU1QkMzQ0M5NUJEOTNEMTZFQjc1RTcxNjhEQ0YKKzoxMDBCMDAwMDc0RUVGMzE3NjIzRjQ1Q0YzNTg5N0RGQUIyRUY2MzNBNTEKKzoxMDBCMTAwMEM3RTQzNzQ5NUU1Q0EyN0ZGQUM3RkM1RTIyQUI2NDQ3M0MKKzoxMDBCMjAwMEZGQTNERjk3QUZBMDlGNzQ5NjhGRTcyNTU2OTlEQTMzMUUKKzoxMDBCMzAwMEQxRkVCRDJFNjAyOEM3RkM1MkJCQTlGNDMwRUExOTI5QUEKKzoxMDBCNDAwMEQzMkJBNzIxN0U2Nzk5OTgxRUU1MTJEMEY5RkYyMTNBOTEKKzoxMDBCNTAwMEJGRkM4QkRDNjQyNDJFQUI5NkNFNTUzQTlBQUZEMjc3OEQKKzoxMDBCNjAwMEI1OTY4RTYxN0ZGRTczNTZEQTM3RjNEN0QxRTgxOEM2OTMKKzoxMDBCNzAwMEZGNzdFNDEzNzVERkQyQ0E5NTY4N0YwOUZCMkRCMUZGQkIKKzoxMDBCODAwMEQxRjgwMEZFQzVGM0I5RDgzQ0ZBNjg1RjY1NjNENkQ3RTMKKzoxMDBCOTAwMDU4REM3NzNERUFCRTFCQzI3NTE4NzQ4Mzc0QUUyMzRGRDAKKzoxMDBCQTAwMEYyNEVBNDAzOERBM0M4N0Y3NTdFMzlDMERCNThEOUYwRkYKKzoxMDBCQjAwMDc5RTE5RkEyRUE2NUZDQ0Y4NTc2NkVCNkE4ODdFRjdDQzcKKzoxMDBCQzAwMENDMTk5QjE3OENDRkM2QTBEQzVGQ0ZFN0IzNDM2QUUxOUIKKzoxMDBCRDAwMDdDNDNFOEM1QUE3RERDQTRBRUI3NUZCQkRFOEEyNDdFNzkKKzoxMDBCRTAwMDlFRDk4REZFMEJGQ0NFNTUzQUYxRUJFNkREMkNFNEU2MEEKKzoxMDBCRjAwMDQyOTNGRjQxMjNBQ0UxMDZDNzUyQTI4NzlCNThGMDQ1QzAKKzoxMDBDMDAwMEQ0NEY4QzI5MDFFNzk4MzRCNEJCODIwNzIyRjlFNENGOTIKKzoxMDBDMTAwMEE1QkMwMEMwNzdFQTk4MzhGRDQ0OUQ1NzIyM0M5QTQ2MEYKKzoxMDBDMjAwMEUxODc4OUYzNEU4NDQzMEMzRjgzQTQ1RkE5RTdBM0EyMjUKKzoxMDBDMzAwMEVCNEE1ODhGMkFGRjVEMDZBRDFGQzgyOUZDMzY0RUUxRUUKKzoxMDBDNDAwMEE3NDEwQTQxMzk1OENCOTIyODZGNjE5NjU3MjIzOTVFRTUKKzoxMDBDNTAwMENCNENDNDNGNkI2QkI4REM3NDVBQjk5QzU3RTVFQjY4NUUKKzoxMDBDNjAwMDc0N0RGNTU1OUNDRkQ0MzYzMDcxRUU4QUNGM0Y5MUFFNkUKKzoxMDBDNzAwMDMyNThFNDdCRjhBQzM1NzlCNjJFQzNGRDhBRkE4MDI3NkEKKzoxMDBDODAwMEI2REY2QkFERENBRjNCNzc4Q0YwMUJCMkM4MzRCNDZGMTIKKzoxMDBDOTAwMEEzRTU2MTdFQzRDODM0RTQxQjg5Rjc0NUQ1NUVFMDdFRDgKKzoxMDBDQTAwMDQ0QTdCODk3QjVENkZCRjEzNEI0RDc5RDM1OTE2OUM4NDAKKzoxMDBDQjAwMDdGMUU3NEY4RTYyMURFRDRGQkRDMTJGOUNFOEQ2Mzc0NUUKKzoxMDBDQzAwMEFBMUZGMTkyRTgyRDExMEY2QURDMjgzNUM1NUY4N0UzNzIKKzoxMDBDRDAwMDlDOTYwNjJCQjBGMjkxMzRFMUQ3Njc4MTdDQTQ0Nzg3QkMKKzoxMDBDRTAwMDNEQkYxMkZEMDFDMERGMkU1RTQ0QTMwQUFCMDA1RUQzMDAKKzoxMDBDRjAwMDlEODEwMEQyREI0RENDM0YxQkNGRTIzOTZCMDI3QUVFRjcKKzoxMDBEMDAwMEU3NjZCNEZFQjU2MkZEQjM4NURDM0JCNzVEMjYzRjdEOEIKKzoxMDBEMTAwMEI1QUZGODMxNzRBNTM3MUZEMUIzMTBFRDNCMUZDOUIxODIKKzoxMDBEMjAwMDM1NjJGRUU3MThDN0QzMzkyQjk3N0YyQkRGRkFBNzBBNjYKKzoxMDBEMzAwMEEwNUMzNjdFOEIyRTc2OEYwMUZDOUIxMDRBRDJEQzYzNDIKKzoxMDBENDAwMDMwNjlBRjUzNTM5RURDOTdBNTY5N0Y1OTdGODFBNkJFNUEKKzoxMDBENTAwMDM0M0M1MTUzM0ZGNTQ4OTlBNjNDNkQ3MDg2QTZGREU1OUQKKzoxMDBENjAwMEVGNTc2OUNBNTc0NEU2NjlEQTdGRUJENDAyNERGOUNBRjYKKzoxMDBENzAwMEExNUIzNEVEOEYwQkZCOTQwNTdEODNDNUU5NzhDRkI3N0MKKzoxMDBEODAwMEEwQ0IwQjRCMzRERkZEMzY3OUNFMTFBNENCNjUxQjc5OUMKKzoxMDBEOTAwMDlFNzAyNTQwNDY3MzlGNDMwRjk3RUYyREYwM0Y4RTU3NkYKKzoxMDBEQTAwMEJGODJGMDVBMDE3QTJGRTYwN0FGRENBMjk1RkZGNTAzNjgKKzoxMDBEQjAwMDlCRDYyMzRGNEJDQzVGNThDRDVBQUFGMDZBQjhDNEZDREYKKzoxMDBEQzAwMDg1NkFGQjYyMUREMkUxRTM2MzQ0OUVDMkU1RUM3MjcxNjkKKzoxMDBERDAwMEZGQ0FEN0UyQjU4ODE1RkU5N0YwNkE3NDZCRjE2QUY2MjAKKzoxMDBERTAwMDY4RjE2QTI5RDZFMkQ1RTZENUUyMzU2NUJBMTZBRjBFQzYKKzoxMDBERjAwMDlGMTZBRkE5MzU1QUJDQTZGOUI1NzhDREE4RDNFMjM1NzAKKzoxMDBFMDAwMDMzQTBDNUVCOTg3QTJENUU3MzVBQjQ3OENENkJENUUyREEKKzoxMDBFMTAwMDJGM0ZCODVBOEJBRjA0N0NBQkZDNkY2Q0Q3NUE0REJCREQKKzoxMDBFMjAwMDI4REVGREY1OTQ3NzMyQUVFNzFFNERCRjJBREU4M0YwNTMKKzoxMDBFMzAwMDNGOEVGNzE2Q0EwQkZGNkJGMTBFREM4NkZDQTA4OTc4OUIKKzoxMDBFNDAwMEZGMjAwMURGMjAzNzNFNDRCRTAwRjJGRURGRjA1OTM3QkQKKzoxMDBFNTAwMDVFRThENUZFOTFFNUJEQ0E3RkUyRTU2QkJDRkQzODFBQzAKKzoxMDBFNjAwMDVGMUEyNjRGODQzRDM5QUEzQzQ5QjAyNzNGQzBFQzE4OTEKKzoxMDBFNzAwMEQyNTMzNjkyQkZFNTY2NDE5RjVGRTJBQjJCRDA5RkY5MUMKKzoxMDBFODAwMDYzOTI5MzFGQzA0NEE2QzNCQzNFQzA3OUMzMzgxRjI0REQKKzoxMDBFOTAwMDREMjI3QkZGNTYxNkQ2RDNGREJCOThGMTA3OURERThFMDMKKzoxMDBFQTAwMDA5QzAzMkRFOUJFM0ExRTc1MjIxNDc5NzBCN0Y4MENGMzkKKzoxMDBFQjAwMDEyQjgzODg2RkIwMUYyRDI3MURDRUM0MTdFMEZGMkRCMTYKKzoxMDBFQzAwMEE5OTc3NDFGQzAzMUY0ODcyQjhDOUQ0MDdGMzgzQ0NGOEQKKzoxMDBFRDAwMDk4MzkzRDlDNTRGOTgzOEY3OTVDNzE3MDVCMzI0QjJBNTEKKzoxMDBFRTAwMDI2QkQ1MTRFQTJCQzlDMjUzNzQ5MjQ0Nzk2RkM5RTNGMDcKKzoxMDBFRjAwMEQzQjNCOUZFOTlGOEVDNjg1NUUxQzZFRDkyOTlEOTFFQzUKKzoxMDBGMDAwMEUyRUJEOUFDNEZDODNCMTZCMDhFQTU3RUI4RkZGQTQ5Q0MKKzoxMDBGMTAwMDdFMEZFOEYzMTI1M0E2M0JFOTM4MTJFMTMxQzNDNEU3NzAKKzoxMDBGMjAwMEY1QkM5RTk5MTA3RUNGQjI4MDA3RTFGMjQzMDU1ODEzQkQKKzoxMDBGMzAwMENGODc5Rjg4RjRCMEU0RjdFRjE2QTAzRjQ5RUVCMDVGOEIKKzoxMDBGNDAwMDg3RjczQzRGQzBGMTYwMUVCMzZGNkI5MUQwQkY5QUUxNDEKKzoxMDBGNTAwMDZFOTFEMDdGMzNFQ0ZERkU3QjI0M0NDNzE3MkQzM0RFMzIKKzoxMDBGNjAwMDBFRkYxMDBFQUE5RkFDNThDN0UzQzU0Mzc3NzAzREZGMzQKKzoxMDBGNzAwMEE5RUYzMkYyRkY3NEI0MDYyQjgzMTgyNzkyQzEyMEMzNjUKKzoxMDBGODAwMDdDMTIzRDNGRjczQjMzOUJGQkJGMzJEOTIwREQyRkNBOUMKKzoxMDBGOTAwMERFMTRGQTk5Qjg5N0JENDRFNDk3OUYxMUYxOTYxNUJCRkEKKzoxMDBGQTAwMDRDMENGMzE1NEFGNjFENzQ2MjdDNjUwNUUwNzIxMEU1ODEKKzoxMDBGQjAwMDk5MTJBMDdCMkM0QUI2QkVFMUU0Rjc3REVCMUQ3ODVFNkEKKzoxMDBGQzAwMDRDOTVBM0EzRTM1QjYxMjdFM0YyQjQwMThGMjNERTE3MDMKKzoxMDBGRDAwMDc5NUIwRTk3RTMxRDZEMzUzMzMxM0VBMkNFRTdGRTM2QzkKKzoxMDBGRTAwMERGNENBNDBGNTlGMTUyOUUxN0RFNkZFMzg4RkJERUUwNjEKKzoxMDBGRjAwMDgyRkFCOEZEQUI1ODZCMzQ2NUJERDU0Rjk3NDZBQzZGRTAKKzoxMDEwMDAwMDZCMjEzQUQzOEI3Qjc4MUVDODVFNkI4RkJGQkZGRkQ2MzgKKzoxMDEwMTAwMDZDQTE0Nzk4ODJDQzlFQ0U4NDBBOEI0RkU1MjRGMjg3NDAKKzoxMDEwMjAwMDNGMzI2RTBGMUFEREQwNEYzQzVGQkIyQjk3QzVGQjc3NkQKKzoxMDEwMzAwMEJCREFGQzM0REZGNTUyMjA4MDlEMTgwQjU5RDg5QzhDMEMKKzoxMDEwNDAwMEY5MDM3OEM2MTFERTZGQkRFNjA4RTZCMzE4NkM2QkJEMTgKKzoxMDEwNTAwMDYxQ0ZFODcwMzNCQTk1RjNGMTdDQTkyMTVCQ0I5N0ZFQTEKKzoxMDEwNjAwMEExRUQxNEMxQTlBM0FEOEVDNjNCODNCQTFDRkE3NzMyOTkKKzoxMDEwNzAwMEI5N0ZBN0EzNkQzMUJERDdENTc4ODg5RTVFREYzQUZFRDQKKzoxMDEwODAwMEEwMDdFQThGQzIzRkJDOEZDNkU4RTJGMzYyRTVCOTI0NEQKKzoxMDEwOTAwMDlGMTYwOTNBNDBERjUxMEVEMENGRDE1NjNERDFEOTlEOTAKKzoxMDEwQTAwMDM5RDYxMDZFQzIzQkRGMTk3NzEwRUZEMzM0MDA4Q0U0RDEKKzoxMDEwQjAwMEJGNjJERUQxNzEwNDlDMEM4MjJGMDEzREY5NzFCRjE5MTIKKzoxMDEwQzAwMEIyMTRGMkMzM0FFRDBCMDg0RkZGRDVGRTU0RjgxQUNDMTgKKzoxMDEwRDAwMDhDRUU3QjMxRTQ1OEM5N0Y3MkE5RjNEQzkyMkRFQzdDNTUKKzoxMDEwRTAwMDU1Q0U5N0U3MTIxRkJENTNDMEU1RjVBRDNDRkZFN0U4Q0QKKzoxMDEwRjAwMDVEOENGNEVFM0JFRkU2N0VCMDNCQzE4RUM3N0RDOTVBRjYKKzoxMDExMDAwMEUxQUYyMjQ2MzcyQUJGNEVDMzFCMzdFMDY1NEYxQjMwODUKKzoxMDExMTAwMDlBMjJDNjFFNkEzM0UxMDkyNzY2NDE3RkQ1RDgxODFFNzgKKzoxMDExMjAwMDdCN0M4QTAzRERFMjlCQUE1REYzRjFGOUQwRjQxMzNERTkKKzoxMDExMzAwMEM4NTYxRTlFRjlENTIwM0VEMUQ3OENFM0RCNUI1ODA4RkMKKzoxMDExNDAwMEY1NEM4QTg5QzJGODhFN0EyOEMzRjhDOUEyM0UzOUMwMDQKKzoxMDExNTAwMENCMjlBMjNFQTU4RTk3NzM3QzJGNDhENTM4QjE4NDc4RDEKKzoxMDExNjAwMDQ0OEVENTM5QjcxMEY5REUzMkM2Q0ZCNzhBRjNFRDNCREUKKzoxMDExNzAwMDA0REYxRDYzNzVDRUFGQzZGQURCMThFNUJEQUJGNThGOTYKKzoxMDExODAwMDhCRkE0Q0VCQjFBRUIxQzg5NzE3NkFCRkRGMkFFMDkwN0IKKzoxMDExOTAwMDYxM0RENjMzOEJFMjE2REE3QTM1Q0U5MDY2M0Q3Nzg0QTAKKzoxMDExQTAwMEJFMkZEMUQ2M0YyQUJFQjc1OUNGMERDRUMyRkE0MkVEREYKKzoxMDExQjAwMEY4MEY4QTdBOEI5NUYzNDNFNkU3Rjc5NEFBRjUzRjE0ODQKKzoxMDExQzAwMEY1NjYyQjNGRTcwNTNDNTk1M0RGMkRDNkVGOTA0Mjg0NkYKKzoxMDExRDAwMDFGQkE4QjE1Rjc0RjFBRjc1QkVFNkM2MzU3RTJGRUU5MDcKKzoxMDExRTAwMDY5MUJBMjdERjQ1MERCMDVDMkQzMzlDQ0YzOTkxNkRCMjEKKzoxMDExRjAwMDU3RjY1NjM2RTJCOUVCNzM4MjlGMjQ3QjIyM0VERjA4MTYKKzoxMDEyMDAwMEZDNEVBRDc3REFGOUI5NzJEOTZEMjAzQTMyNUEwNUJGODIKKzoxMDEyMTAwMDEwRkIzMENBMkZBNDE2MkYyNzJFRUU0RkZFMjY3QTg2RkIKKzoxMDEyMjAwMDBENzYxRUY1OEI1Q0Y4NDM3QUNFQkU0QkM3MDI3MTdDRkYKKzoxMDEyMzAwMDJCQUIyMTg5MDVFMkRBQkI5NzM5MzVFNUY0REJCMjM0MTMKKzoxMDEyNDAwMEVENUQwQjBCMzRGNUQ2RjI4OTlBN0FFNkNCQTFGREIyQUYKKzoxMDEyNTAwMDU2RDA1NTUyNDk5OUE2NUUzREVGQ0U3QTcyMzRGQUIzMTQKKzoxMDEyNjAwMEJFNzA4NkE2RERCOTYyMEZGRDhFQzdDOUI5RUFFRjdERjMKKzoxMDEyNzAwMDc4NERDODE3RDZEQTBBMzI1MEVFM0NEQjM2MUQ5NTZDMzUKKzoxMDEyODAwMEY2M0NFQzI3M0NBMkY0OUM4M0U3RjkzRTg3RjE1MUE4OTkKKzoxMDEyOTAwMEZGQzczNjFGQkRERjAzRjVBMEI5QjAyNzYxQkY3OUEwMzYKKzoxMDEyQTAwMEZEQUUzNjNCOTU5RjY4NzNEMzczNDc5Qjg3OUU4RkI3ODAKKzoxMDEyQjAwMDE1NTNGREQ2MzYyRjk1MUY4M0ZFRjFGOTI4RjQ4M0VGRTEKKzoxMDEyQzAwMDFGNjlBQkExRjJBNjM2M0Y5NTFGNkVBQkEzRjI4MzZERUIKKzoxMDEyRDAwMDAxN0FGRUIwQUQ5RURFNzdCN0I1NTBGOTgxQjY1NjdBODkKKzoxMDEyRTAwMERFREYxNkE0Njc0NzVCMTdENTE3MEJGOUY2OUMzODJGN0UKKzoxMDEyRjAwMEY4NUMyNTNGRkY5Qjg4QzdDOTM5QzI4RjI2RTJGOEI2NDQKKzoxMDEzMDAwMDU4MUM3RjcyMEVDNkYxRkIyMjlBN0JENjcxRERENDlGRUEKKzoxMDEzMTAwMDk5QUYzRkIxQkYyQUQxREY0NDM2RDg2RUUxRkI5OEUyRTYKKzoxMDEzMjAwMDdGRTNGQUJERjc1OTgwREVDN0I0NzAzQ0U0RjcwRjUxOTQKKzoxMDEzMzAwMDdENjYzREM3NDU5NTk4MkY3MzA1NTk3NjA1M0ZFRTg5MjMKKzoxMDEzNDAwMEVEQ0U0ODgzNTUxNjFFMEYyNTdGMDA3M0MzM0EyQkM0N0MKKzoxMDEzNTAwMDNEMzQ0NDc2MjExRENFNEI5OUNFRTVBNjhBRDdFOEJBMTYKKzoxMDEzNjAwMDFEN0M5RUI4RkU5MUU2RkI2RDMxNUZCOUJDOEZERjMzMEIKKzoxMDEzNzAwMDUxRDMxMzQ2QjI0RkYyQjVEMDNEMTNBNjNBN0YxODdGMzIKKzoxMDEzODAwMDQ3QzJFNTBGRDBCOUY3ODkxN0U2ODA3MTAzN0NFNkMyNDIKKzoxMDEzOTAwMDU1Q0MwM0NGRUMwNkFEREQ5M0I1QUM0QzYzNUZDODE3RkQKKzoxMDEzQTAwMDFFNjI5RUE5RDA2Rjg5RDYzRTQ5MkE1Q0FCRjlDRTk0QzUKKzoxMDEzQjAwMDdEOEZBNkRFRTBCQTRGNTNCRjY0NERGRTdBMzdDMjczMEQKKzoxMDEzQzAwMDBDQTMzODg5NzE2MzNCQzNEMERFRjJERTREMzRBRjdCQjIKKzoxMDEzRDAwMEM1M0FDRTQ4MUUzQTM3MUJEQ0E3QzZDOUI5N0VGRThDN0IKKzoxMDEzRTAwMDkwMkJDQ0I0OTFGNkMzNzgwNzJGMTZBNTA0NzUyODE3NTcKKzoxMDEzRjAwMDNFRkZBNzE0RTI0NzRGM0ZBMTBCQTExRjc0MDIwQkU5NjgKKzoxMDE0MDAwMDcwRkY0RjAyNzUwRkVCMjdFMzREQjUzMjVENUQyMjYzMzAKKzoxMDE0MTAwMEI5OTQ3OTY0MkM0RjY1NDM2NDlGODA3RTdFMjdEMjBCRkMKKzoxMDE0MjAwMEU4RTc0Rjk4MzE0RTk3MTM3ODg2RTcwRjg1NDk2RTE2OTcKKzoxMDE0MzAwMDA5N0MxNkE5RjZDODE2MjVEMTNGN0E3NzBFRjkzRkI0NzQKKzoxMDE0NDAwMEU3ODYzQTg1OUVERUVFQThDOEMwRjhFNDk5NTFGMkJCNjMKKzoxMDE0NTAwMDZDRUUxOTMzRjBGN0FDNkM5OUQzRTlBOUJFN0ZEMEEzMzkKKzoxMDE0NjAwMDFCRjEzQ0VDQzYxQ0Q1OEZDNEU5N0UwMjEwQjlBMEZCNzEKKzoxMDE0NzAwMDhEMzg4RkQzRTVCRjRBNDc3M0FGQTk3MDg4RThGRjhDREEKKzoxMDE0ODAwMEU0NzMyRjQ2QjhCRTI1NzMzQTFDQzhBNDc1MjkwMkFFNzIKKzoxMDE0OTAwMENBQkU0QUY3NjI4MDlGRjJDRTU4NkY5MEM1QzY3OUJBMkQKKzoxMDE0QTAwMENEMzc0MzUxNjJFNTIyOTE5RkI4Qjc2REZFOENFQUI4MDMKKzoxMDE0QjAwMEY3RkQwMjdGQzU2Q0IwMDZFNTUzNzE4OUNFMUJBMjlFNzUKKzoxMDE0QzAwMEREMUFGRTY1MkVFQ0YxRTE3OTZFQTU4Qzc5OTFCRDREQUEKKzoxMDE0RDAwMDYwM0RGN0ExQUM1NkZFMjI1M0JFODk3MkU4MEFFNjAxRDAKKzoxMDE0RTAwMEJCQzA2QTBEMzNDQ0NGRTk4RkVFNkZBNkY5OURBM0FGRDkKKzoxMDE0RjAwMEVDRDUyOTc0MkY1RjU2OTRFRkExNENDNERGMzUxQTQ0MDQKKzoxMDE1MDAwMEZBRjlBQTU3Q0ZENzc1NDg1QjVGNkNFNTc5MzQyQjhBMTcKKzoxMDE1MTAwMDBEMjE4Rjg0RTFFRDFFQkE3RjRFRDkyOTMxNTRGRDk1RkUKKzoxMDE1MjAwMEJGQ0MyMjM4QjA5NzJDNDQ3Rjk2MkQ1M0U4RUFFQUVCRTMKKzoxMDE1MzAwMDk0NDAwOEU5RTM3NEQ4RjM5MjZFQUNBMDQ1NjhENzM4QkMKKzoxMDE1NDAwMEM5QjAxQkY1QjFGMTA4MTc1QzUwNjEzMUMxNzVCOTU4Q0MKKzoxMDE1NTAwMEVGREVCNkM1MDRBNzc3MDRCRTNBNzMxMkU2QzNCQzNFRkQKKzoxMDE1NjAwMEJDOUY3MTQ1QUZFQUZGRDBBRUYzQzFGMkFBRUJGMTNFRUEKKzoxMDE1NzAwMEJCOEU0MTU5RTg0QTVBNzg2RUQwMEY0RUMxREY4ODNCODYKKzoxMDE1ODAwMDFEODE3OUM5MzRDRjc3MTBGRkYyOTYwQUZBOUQyMzEwOTYKKzoxMDE1OTAwMDIwQjRCRUM2MjdDMERFQ0YyNzdFNTQ0MzcyN0I5QThFMEUKKzoxMDE1QTAwMEYyNDQxM0U5RUFENzgyOEYyRENFRTFGRTNDOUJGQkFBRTEKKzoxMDE1QjAwMDE5Rjg3QjZCQjFGMjRDQTJDRjY3NzVEQ0NGMUFENDcxRUUKKzoxMDE1QzAwMEZCNTJDREEzMDBDNUMxODM3NjVENDFBRUVBNjdFQzY0RjIKKzoxMDE1RDAwMEYzNTA1RTNCNzQ5NDdGMjdFRjRBQTI3MzgwQjI0M0ExMUQKKzoxMDE1RTAwMDdDREY0RTZCQjU3RDM1RjY2MzU3MjhCRTMxNDc5RTM5OUIKKzoxMDE1RjAwMDg4N0FCM0QxQTE5QjhBN0FGN0UxRERGNzBDNjI5RTg3RTYKKzoxMDE2MDAwMDlDQTMzMEY0MTc3NURBMTVBRTc3NjRFQjI4MkY0QTcxNzYKKzoxMDE2MTAwMDU0OUIzMDFFNTI2NDNENTE4OUYwM0NCOEVCRkJFNERGMzMKKzoxMDE2MjAwMDkwQkYyNzcyMzU4NDNGNDkyRjUwRDZDOTVBQThGRjYwMTIKKzoxMDE2MzAwMEI2MjJFRUNERjBENTk2QTYwQjU3QkUwN0VEOUY5QTRGN0EKKzoxMDE2NDAwMEQxOEY3MkQ4N0VDRThDRkE4QUM3QkE4MkZDNjk2OUI5MEEKKzoxMDE2NTAwMERDMkVENDYzREMwQkNBNEZBQzNCRTc0MEJFRjVENkFFMDQKKzoxMDE2NjAwMEY1Q0U3Q0Q0OUY0MzBBRTkyMEM1N0ZFRUM4QTJGM0REMDYKKzoxMDE2NzAwMEJCMEM3NEZFNUM4NTZCNUU1MEQxQzRDRjcyNUFCNTY1RUQKKzoxMDE2ODAwMDYzNDIxQzREOUY3MEZFMjcwOUM3QTdGRDVFQzdDMjcxNEMKKzoxMDE2OTAwMEVCRDFCQkI5QkRDNjVDNTZCMjc3RDI3MjI1RUVFNzExNkQKKzoxMDE2QTAwMDY1NkIyRUJGNzc3MEFGM0U5OEU1MDVGODFDREFCNTIyNjIKKzoxMDE2QjAwMDBGRDc3NUZFOTUwMEU1REI4RUE2RUY3Rjk0RTMxMUY4NUEKKzoxMDE2QzAwMDBCOUE3NTc0OEY2OUQ4OENGOUI3NEZCNUIxMzRENEVGRDQKKzoxMDE2RDAwMDRDMjE4NUYyOUZGNzA4N0U1NjY4RTVGNEZGRkI1QzRFQ0YKKzoxMDE2RTAwMEU3ODlDRkMyMUVCRUVGOTRFNzkyNDIxNkM0OUJCREFGRkUKKzoxMDE2RjAwMDJDMDg3NDMyRTlGNUI5Q0MwM0YyQUZEMEVFMjNGRjYxQzgKKzoxMDE3MDAwMDYxQUIyMTBERTNGODczN0U2MjI1M0EzOTY3NEQyMjNGQzQKKzoxMDE3MTAwMEExRDI5QUU0QzVGNzFEQkIyQjhBRTNDRjM1ODVEQUVDNUQKKzoxMDE3MjAwMDY5OTgxRkIzQkJDRDk0ODY3QzJBMzQwQTdGMURFQkQwMDkKKzoxMDE3MzAwMDUxREVCMDQ3QzdGM0RBQkUyNUU2RjVBRDVDMEJCRjQ3MTcKKzoxMDE3NDAwMDM5OTdGMzk5Mjc5NUUwMDI5Q0U3OTM4MDRGQ0M1NzNFNTkKKzoxMDE3NTAwMEI4OTFFQkMzNkJEQjREMzQ4RkI1NkY4RDI1QkQ2QTM0MEIKKzoxMDE3NjAwMEI4M0REREU2NEVDMzdCRDg3NzZGRDQ2NUExRkZBOEIyNDQKKzoxMDE3NzAwMEJCNzAwM0RFNDdCMEQ2QzZFRjYzOTU1MzI2OTJCRjkzODYKKzoxMDE3ODAwMEZENDJDRjUwN0ZFRjQ4OUVFMTVEMUFDN0RGRTU5NDk5OTcKKzoxMDE3OTAwMEM1NDg1N0IyMUNDQzQyQkY4ODdGNjdENUY1OThCNzA4QkIKKzoxMDE3QTAwMEY4REI4NkU1QkFEQzg5RDc2MzVFRTM1RTVCMzAwQkYzN0EKKzoxMDE3QjAwMDFDMDNCOTUzNzgzOTJEQjgwREYzMUNFQjczQ0I3ODM5NzIKKzoxMDE3QzAwMDI3OTg4NUJGRTdENDkyNUJDMUJGMUYxN0RDODZFNUQ2OUIKKzoxMDE3RDAwMERDMTlCQzFFN0Q0RkMwM0I4M0I5NTc1RDFGODRGMTNBQjUKKzoxMDE3RTAwMDBDREU3QTY0QzgzRjg2Rjk5N0MwRkNGQkM0RjMzRTAxNjcKKzoxMDE3RjAwMDE3QjVGRTA1N0MwRjcwREUyRjlFODlGNTJGODlFRkZBNTUKKzoxMDE4MDAwMDQ3QTk3RjU1RDQwRjhDRDJGRjZCRTJCQkYwMjhERjFGQjYKKzoxMDE4MTAwMDEyREYxRDFFRTVGQjM3QzU3NzQ3NDZBOUZGQjlBODdGMzQKKzoxMDE4MjAwMDdCOTRGRTdGMjlCRTFCMUNFNUZCNUY4OUVGN0UzRENBRDIKKzoxMDE4MzAwMEY3QkYxMURGQkQzRjRBRkQ4N0EyRkU1RjEzRkEzRjJBQzMKKzoxMDE4NDAwMERBNDdDNEZCMDJEQkM2MEZDMzQwNzcwNUMwNDc5MDJGQzEKKzoxMDE4NTAwMDE1REIzNjNBNzE5RkVGRUUyQTI3RkFFRkE4RTBGMTFENkIKKzoxMDE4NjAwMDk1REUwQkYwNzc5NEEwRkVDQjVDN0UzRkU4OTc4MkZGN0QKKzoxMDE4NzAwMDZFMTdGRDAzMUQzRThDNzRCN0Y2MUQ5OUYyNUQzQTc0MjgKKzoxMDE4ODAwMERFNTMyMUU0QTMxQjc0QTQwRkFDN0Q4QkRCRTc2QkJCQTEKKzoxMDE4OTAwMDk1NTBGQzM5ODhFRDA5RjM1RjJGRTZENzI5RTZEQjlCRUQKKzoxMDE4QTAwMENCRjNBOThENkU3NzVBNkRCQzFGQzlBRTJENjM3QTE0MjgKKzoxMDE4QjAwMEYyNURFMERGOTQzRjVCREM1REQ1NTUwQ0U1MzE0RTFERkMKKzoxMDE4QzAwMDY5MjA0QUEzMjk4Q0Y3MjIyODM2MjExN0VDRTUzREM1NkIKKzoxMDE4RDAwMDM4M0ZBQjQyRTdDMTE1ODcxMkRFOEJERkJCQ0I0OUJGNzgKKzoxMDE4RTAwMDUzRTdENzY5NTVFODVFMkNEOUM2RTVDMDlDOUZDQ0I0QjgKKzoxMDE4RjAwMEEzOUVENUM5MDI4MzNFRkNERUFEOTBGRTdFQjBBQkNDOEMKKzoxMDE5MDAwMDhFN0NDRjYwNUI2NkM3RkRCQkQ2QzNGNzdGNzU1MzcxMTYKKzoxMDE5MTAwMDEyRjI2QkY5NDExREYxRUZDMzc2QkVERjc3QkE3NUU0QzEKKzoxMDE5MjAwMEI3MDBCOTQyRTc0QTgwNUY3QjUxNDY4QzY3RTE3NjNBNUYKKzoxMDE5MzAwMEE3RjBEMDRCOEJCOTVGOEZEOTRBMkJFOERDODYxQTBGMDIKKzoxMDE5NDAwMDk2OTQzOEZERkYwNEMyMDdDRjRCMDgzOUEyQTA3QzgxRDIKKzoxMDE5NTAwMEU3OTNFNUUyQkM0MTkwRkI5RkYyMTRFNjFFMTM3NzZFMUQKKzoxMDE5NjAwMEYyNDRBRUNDQ0Y2MzI4MDgyM0U4NEJBRUE1RkI4MTcyQ0UKKzoxMDE5NzAwMEQ3MjkxQUZGN0JGNjVEREFCMjIxNDE2RTI4MDk3MjY1MUMKKzoxMDE5ODAwMDZDMTdGMEM5MzhCOTkzMUZCNDZCQ0FFRkU1MEFCRjk5NTkKKzoxMDE5OTAwMDk3Nzk1MTdGOURGMzkzOERDNDBGQ0ZBMTdDOTM0NkU3MzgKKzoxMDE5QTAwMDdCNTFGRTJCRjhGMTkzRTJCRTlCMjc4M0ZDQkNFRUMxN0EKKzoxMDE5QjAwMDhENjUzRjQ3N0NBRkVERDZEMUZEQ0U5N0NBNDdCN0U3REYKKzoxMDE5QzAwMDMyODJDM0I4MDBDODFERDQ2NzE0OTY4NUY2RDIzN0MxRDkKKzoxMDE5RDAwMDYxOUNERUVGQTRGQjBCQkUwMTFFRTMxRTJENzcyMkJGMzAKKzoxMDE5RTAwMDFEMTc1MDQ4RUUwQzkzMUJERjAwQUZFNzI1RUZGQjAxRkUKKzoxMDE5RjAwMEM0QTMyMzg5RUJENTc2QkVFRUNFNzQxN0JGRjc0NzlDMDAKKzoxMDFBMDAwMDAzOTQ4NUJFNzZCRkYwODMyQjI5NzMzQ0Y4NTMxQzlENEQKKzoxMDFBMTAwMDhFMTYyQUFGOTdCQzE5RDc0MkZCMDdBNDgwMURDQjQ3NkYKKzoxMDFBMjAwMDlDNDk1Q0VFRTQyNDExMURFRTQ1NUQ4NkVFMkZDQ0Y0NUUKKzoxMDFBMzAwMEEzN0ZBNDJGNjQ1MEVGMDMwQ0UzRkZFREMzM0MxOUY1MjMKKzoxMDFBNDAwMEJFNDEzN0U5NjdBMkZDRTBGNUQ1RDg1RUIxNEY0Mjk1QkIKKzoxMDFBNTAwMEIzMjhBRkU3NjFGRDk1RDBERUMwQTJFREYxNUNEM0IzNTIKKzoxMDFBNjAwMDg3NzVBMkJGQ0QwRkEzQkVCQTJGODk2OUVFNUJEQzg3NTUKKzoxMDFBNzAwMDdFNzQyQTZGN0QxOEVGNEY4NEYxQUU5NUMxMDY5QkZFRjAKKzoxMDFBODAwMEM0MTMwRjVCQUY4OENENjc2QUU4QTk4N0RCMjk1Rjk1MzAKKzoxMDFBOTAwMERCMjUwRUM2RUZDMzNFRUQ4OTI0RTM3NjAxRkJDNDkzM0MKKzoxMDFBQTAwMDg3NzZGOUFFMTNFOTlBREYzRjEzRUQ1MzQ0RkJBNjgxMjUKKzoxMDFBQjAwMEExQTZFNzNDRDRCRTg4REFGNzBGMjU5N0QwRkUxQUFBNzQKKzoxMDFBQzAwMDg4NkY5RjJDRUNGREI4RjYyNTVGRDdCRTU4OURDRjczNkQKKzoxMDFBRDAwMEJGQkFCMTg0QjcyRkMzRjY2NzNDOTE3NENBM0Q0OTk4MjkKKzoxMDFBRTAwMDRGRUFGMEZFQTc3RjVERkYxMzQ1RkJEM0UxNUY1MUZCOUIKKzoxMDFBRjAwMDMzMkM5MjNFMzk5RkJFQkIzQTBGRThGOEVDREJCRkFBMEQKKzoxMDFCMDAwMDEwRUI0RTQ3M0QxOUI4QTIwRkRGMjc3Qjk4Qjg3N0FEOTEKKzoxMDFCMTAwMDg1RjRFNzNFNTM4RjFERjUzNUIzQkVDNzhGN0NCNzEwRjQKKzoxMDFCMjAwMEVGNEY5QTFFN0JDRUNBMkJFNDdBNTVDMkZCM0UxMzRCNzUKKzoxMDFCMzAwMEFENDU3QTZDRDU5MUZERDI2NzFBMkMyQjQxN0RGQTY1QTMKKzoxMDFCNDAwMDJCNkI4NzMxNzQ3OUVCQkNDODA3RkIyMzZCQkQyNUQwQTkKKzoxMDFCNTAwMDZFNjdGNjRDQjIyQkY2MTk1QUZBRTg5Q0VENjIyQjlEOTMKKzoxMDFCNjAwMDAzREQ2OUVGQjFFM0ZFMzEzQjdBRUMxODQ3OTBFRkU2MTUKKzoxMDFCNzAwMEZBOTNCMkM0MUE3ODBBRTkyOUJDQjY3ODc5RENGRTlEREEKKzoxMDFCODAwMEVBRTFCRjIzRDNGRDg2NzUyM0RBMDFERDdBNkZDRjc4RDIKKzoxMDFCOTAwMEQ0QjM2RDBBRTU4MTJCNEIwNkU2RDFCOUJEMUZFQjE4MTYKKzoxMDFCQTAwMEYxNzc1ODU3MTU5NDNCMUI3NTc0MkY3QzlCNjdDOTMyOEUKKzoxMDFCQjAwMDg0MkI1M0ZDRkUyQUY4MkUzNzREOTFGMDFDQzRGRDhBNkQKKzoxMDFCQzAwMERGODRGMTBCQTNEMERCNzY3QUY5RUZBRUFBRTM2RUM4MUYKKzoxMDFCRDAwMEUzRjI2OTQzMUVCRjFGQUE3QkYxNzNDNTZGQzI3NzNCNTcKKzoxMDFCRTAwMDVCRDdGNkUxNzhFNjA5MjY4NkY5NUUzQkIzNEY3NkUzRUMKKzoxMDFCRjAwMEI5Q0RDN0RENjBGMTAyMUNBQzBEM0FGQTVEOTRDNzZCM0MKKzoxMDFDMDAwMEExNEQwQUZBMzMwQzFBN0ZDNUYzNTIxRkI1MEYzNkVBRkQKKzoxMDFDMTAwMEM4NEVCMDk2MTgzNEZFOERENDA2OUQwRkZEOEUzQjNDMDkKKzoxMDFDMjAwMDgxN0I3MURFNTNERjUxQUVDNUYxRENFMzE0M0JDQUE3MDMKKzoxMDFDMzAwMDA3RERCRjM2RTk2MDlFQzlFNURBN0VFRDMzQjVGRDM4RDQKKzoxMDFDNDAwMEFCQjVGNUFFNUE2RDdERkE0MjZEQkRGQjM2NDM4MkJGMzIKKzoxMDFDNTAwMDQ2NUJCRTg4ODIwOEUxMDgzQ0MwMEE3MjI4ODk1N0IxRjkKKzoxMDFDNjAwMDI0RUI3OUZBNURBRUVFQzBGNjlFRjFCMDFFQTMyNTU4QzYKKzoxMDFDNzAwMEZBMjZDQzM3Njk2MjEyRDlGQjBGQkM5MTg0OUIwRkY4MEUKKzoxMDFDODAwMDBGMjNCRUYzQzA2NDQ2RjlBNzg3NzJCRUVGNDY3OTlBNjgKKzoxMDFDOTAwMDA4OUY5REQ5MDY1QUFGQjUxMEUwOTk4RkY2RkEyOUZBMzgKKzoxMDFDQTAwMEZEMkMyQjhCNkI5NzhGRjBGMTZEQ0Y5QkM2Q0JFRTBBODMKKzoxMDFDQjAwMEY0Q0YzMUUyODNDRkFCRkVFMzFCRjhCOUE2OURBRERDRDgKKzoxMDFDQzAwMDJGRkQ2MDFEQ0ZDRkEzMTU1NEUwRkVFNkVEOTNGMUY3OTUKKzoxMDFDRDAwMEJDQTZBMERGQkVFQjBFQ0MzQjRDODQ2QjA2RTZFM0M4OTMKKzoxMDFDRTAwMDMxRkE1OEFGOUUyM0MxNTM4QzE1OUMyREUzQkUzQkVFQjkKKzoxMDFDRjAwMEUxNzRGMjkzM0MyRUZGRjc4OTdCMEZBMkVENzExRkE2RDIKKzoxMDFEMDAwMDMzNkVDQTQyN0ZBRkU2QTlGRTA3OUU5N0JGNTk4REM3QzMKKzoxMDFEMTAwMDg4MzI1RTE3ODhFNTdEODc5REQ3RTI3RURBQkNEMDU5OTAKKzoxMDFEMjAwMDg2RkJFOTAxQTE5N0E1NjQxQjdDMTM2MEJFOEYxQzMxNjMKKzoxMDFEMzAwMDA0QTVDQkEwQUNCMEMzN0E5MEU3RkI5QzdDNUNDMzVCRjIKKzoxMDFENDAwMDQ5NDEzQ0Q3RjQ4OEJCOUNDRTQ5N0QyNEU2RjU0MkE1QTkKKzoxMDFENTAwMEY3QkQ1QURBOEYwQUU1MzkzREUyRjI5QUNCQjhCRTgxNzcKKzoxMDFENjAwMDc3NEEzM0ZBNDk1NDUwMkQwRUQ2OTY5MTlERkE4OENGNzIKKzoxMDFENzAwMDZCQzZGREZBNDhCNkQ3OEM3OUMyRTY0Q0M1OEVGQkQ4NDcKKzoxMDFEODAwMEU5NTZFOEJFQUE0NzRDMDEzQkVBMkQ0RTEwODBGODNCQ0QKKzoxMDFEOTAwMDZEODY5QzlFQjk3NDNFMDg2MEE4QUJFMDIxMDEyNkYyRDYKKzoxMDFEQTAwMEU5MzA5RjJENTVDMDZCQTc3Qjk5MURDRjkxQkIwQUY3REEKKzoxMDFEQjAwMEZGMURGQUQ1NTNCMUJGNjRGRTFEQzJDOTIxRTA3NDNDQkEKKzoxMDFEQzAwMENGQzNGMzgzNDVGRkE5Q0I1RUEwRjZGOEQ3NTkxMUQ3NEYKKzoxMDFERDAwMDlGOTdEMzk3NjEyRTBCRDFFRjhEODlGMUQ1N0VBMkZEMTAKKzoxMDFERTAwMDMzMUZGOUVERDdGRjlDQzNBRDNEODdERkQzNjM1OEMzRTUKKzoxMDFERjAwMEM4MEU3QkExMzJCMEY3MjBDMjI3MzM4OUVDRUMyQzc3RDgKKzoxMDFFMDAwMDU2MTVEMjQ3RDY5MTZEMEJGMDNDQzBGQTlGNzNGOTY5MTUKKzoxMDFFMTAwMDU4Q0VFMzRENTkwQTMzNUQ4NUVCNEUwQkQ4MTE4RTg5QjAKKzoxMDFFMjAwMEZCMzBGMzcwQ0Y3QzI0MzYxNTJGODlGQjMyNTM2MTVENzQKKzoxMDFFMzAwMEIyNzNGOEZFQ0M3NEJCQUE4QUE2OENCMDRGMTNGNjQxREQKKzoxMDFFNDAwMEU2OTFBMUVGNjFGRjg5RkI3NTg3RTU2ODI5QzJFNUZGOEYKKzoxMDFFNTAwMDAyOUY4QkZBRjQwMDgwMDAwMDAwMDAwMDFGOEIwODAwMzYKKzoxMDFFNjAwMDAwMDAwMDAwMDAwQkQ1N0QwQjdDOTRDNUQ1RjczQzdCQjIKKzoxMDFFNzAwMENCMjZEOTI0OUIwNDQyNDI0OEQ4Q0Q4RDQwMkU2Q0MyM0IKKzoxMDFFODAwMEM1ODhBODRCNDgxMDJERTIyMjcyMzVFMjEzMTIyMDQwN0IKKzoxMDFFOTAwMDAyMDFGNDZCNkNBOTU5MEMzNzJERDZGMDM2MEE1QUQ0Q0UKKzoxMDFFQTAwMDhEMDU4QThBMzYyODIwNTY2Qzk3OEI4QUQ1NkE1QUY1MTIKKzoxMDFFQjAwMDJENTU0QjEzQTE4QTcyOEJBMTdEM0ZEQUZBQjZERkZDNTgKKzoxMDFFQzAwMENGQ0MyNEZCMkM4OUQyN0U2RjdGQkZFRjRCN0Y3NTk4RTAKKzoxMDFFRDAwMEU3OTk2N0U2Q0MzOTY3Q0U5Q0RCQ0MzMjY2NjMyRTNCNTQKKzoxMDFFRTAwMEEzQkY3Rjk4RjFERkFGQUZBRkQ1M0FFRTFGMzY5QTMxN0YKKzoxMDFFRjAwMDdGOEFDNUIzQzNDNTU4NUFFODdCMzdGRUZCRjcwOEQ0QzEKKzoxMDFGMDAwMDM1NjY3MkZEMjM5M0IxNTFBRTc4QzYwNkUyNzlCRENCM0EKKzoxMDFGMTAwMDU3QzBEODFFOUI3M0EyNjMwMDYzNUQyQjk4RTcyOUZFMTAKKzoxMDFGMjAwMDdERTk0QjlCRTZCRUM1RUJGRjk1RTY3MDQ2RjA1NkE5RjIKKzoxMDFGMzAwMEM3OUFEQkYzRjk3Mzc2NDAxRjg2RjZEQjJDRkE5M0QxNTAKKzoxMDFGNDAwMEZDRkRCNkUzODM5ODVGNjMyQzIyOUFENUI3MzkzODU0RTkKKzoxMDFGNTAwMDI2QTZBM0ZDMDdGRUFFQzczODU2MUE2Nzk0Q0JDNEQ4OTIKKzoxMDFGNjAwMDE4QzY3ODE3MDE1M0YyQkY1RUI2MEQxOTkyRTdGNEYwNjgKKzoxMDFGNzAwMEZFMDIyOUVENzZERTZGOUJDNTk5NjdFMUY1OUNBMUNENDgKKzoxMDFGODAwMDBGNTlBRkM1M0MzODhDRTM2OERBNUU1NkMyRDhCMzQ3MDgKKzoxMDFGOTAwMEY5Qjg4MzUxN0RFNEExMzIwQjdGMUZENUYzREU4RkY3QjMKKzoxMDFGQTAwMDdCNEMyNjU5N0ZGNEExQjIyMThDMEQzOURBQjZDNkUxRkIKKzoxMDFGQjAwMEU0RjMxRkRBRkE5MDlERTMyREYyNTdFMkZEMDQ1RUY3OTkKKzoxMDFGQzAwMDY3MDEyRkI1NDMzQkY4RkMwRUE3MkZBMUY5MzdGRDJFNzMKKzoxMDFGRDAwMDgyNDVGMDc2MDU2NkNGNTZENEQ5NDc5MTZDMDdBRkVGQUUKKzoxMDFGRTAwMERBMzc3RUI2OEJCNzZCOEExOUVCRDJGMzE5MkI3MzY5OEMKKzoxMDFGRjAwMDM0RkY1MjU5ODZDRkNCNkNGM0U4MUVDN0U1Q0ZDNzRCRjEKKzoxMDIwMDAwMEJDMzFFNjM5REVDQUU5NUJGMDYzMUI3QjgwQkZDQzA1REYKKzoxMDIwMTAwMERDQTA1NzZCNjRFMDI5RDBCNzc5MEI2MzQ5OEM1NTNCNDIKKzoxMDIwMjAwMDA1Q0RBQkY3M0Y5MDdFODg5NzJGQzc0Q0JCQ0RDNUYxNTAKKzoxMDIwMzAwMDU0MUQ1Mzk2MDQ3ODUyMkYzMUE2Mjc3MkJBMzVEQTk5NzcKKzoxMDIwNDAwMENFNzE5NTNBRTAwNThENzFGODg2MEMzODNBODEzOUMwMjkKKzoxMDIwNTAwMDM3RUQ2QjlDMjhFQkEzOThBRUY4MDdGNEJGNjQ2MUZBRTgKKzoxMDIwNjAwMDI4RjRFN0E1RkVGMDY3NEYwMjE3OEFCRkI1MDkzQTVCNkYKKzoxMDIwNzAwMEMzRTFGMTczNUNFRjAwNzczQUEzM0FCNTQyRkU4RkU0MTcKKzoxMDIwODAwMDMyNkY0N0FFRUMyNzAzN0NDQTY2QjdGMUYxMkE4MTA3QUQKKzoxMDIwOTAwMERFOEY4REQzQzQ1QUNDNEI4NzI1MThEMTQ3RkI4NTEyRDAKKzoxMDIwQTAwMDVGNjZCQjIzNjgxRUM5NEJFN0VCQzdBOTVGODdFNTZDN0EKKzoxMDIwQjAwMDg3QkRCNzlEM0Q2MDIxN0NCMDVBMTZDOEQ2MDg0RkZFM0IKKzoxMDIwQzAwMDA4RDRFMzEyQThDRUJDNUVENzgwMjRGMDNGMjNFNEE2NTgKKzoxMDIwRDAwMDVBRDhEMTA4M0UyRTcxMkY1RjNGMjkyQzQ4RTVFMzFDQ0EKKzoxMDIwRTAwMDNEOEU0QzM0NEE4QkZGMzQ5QUUxMTEwMzFGM0ZDNUQ4MTMKKzoxMDIwRjAwMEU0NTBCRTU2RTVDNTc0MTNDRDIzQUJDMTM0RjAxNEM3MEMKKzoxMDIxMDAwMDRGREU5MTQ4ODJDM0IyOTEwNTIyRjk2MDU5QTAwN0E3MUEKKzoxMDIxMTAwMDVCRDYyNjE2QjBCOEQxQ0UzNkYwNTQyMkJFNzNEMTc3MzYKKzoxMDIxMjAwMDJFRTYzNDMxMUFBRjZEMDRENkQ1RDZENzFEOUI1ODFDNzgKKzoxMDIxMzAwMEQxRjc0RTFGMUY2RjZCMTRBQjAxQkVENDc4OENBRDIxNEQKKzoxMDIxNDAwMDdDNkM3Njg5NzFCNzM1M0E4OThFRUFGRDkwREFDMzYxODUKKzoxMDIxNTAwMDc0NEMzMEQwNTFCNTRCQkQzNDk4RThEOURCNkY4MEZBNjAKKzoxMDIxNjAwMDRENkREODRCRkM5MDdBMjk1REYyODlFQjFCRkFDRkU4RDQKKzoxMDIxNzAwMEE3RkY2NEZBQkVGRkZFODdEMEY4OEYwN0RGOEY5RkNBRTQKKzoxMDIxODAwMDUxRjFBM0FFQkRGMTNFNUU0NjVBOUI3RDlFM0VGMDlDNTIKKzoxMDIxOTAwMDdBNTc4ODNDRTNGRjFGNzk4MEQ3NzM3QkVCMEEyRjkxMzYKKzoxMDIxQTAwMDU2RUY4MDY5MUNGRjkxNzc5QjNDQURCQ0JGQUI4RTFCOEIKKzoxMDIxQjAwMERCNEQ3NjdGMTA4RkY1RDhEQjNFMzg2MDNBREFENzg5NzEKKzoxMDIxQzAwMEY2RDc5QzM2QjZGNzRERDgxN0Q2NUVDMDc3RkQyNTYzOTcKKzoxMDIxRDAwMEJCNzBGQTg0QzNDQkUxMUEzODIzMDRBRTg5RjYwOEMzNzYKKzoxMDIxRTAwMEY3QjMyQjJGODM2QkUwQUMxMEI4NkU0ODM2QjZEN0Q3NTkKKzoxMDIxRjAwMEY0MEREN0I3NzIyM0JFMTYyRUQ1RUU5NjkyMkI2QjE3MjEKKzoxMDIyMDAwMDNFOEZFOTkzMjNGQUMxQkI2ODNGNkJGNjk1RjU3QjdCNjQKKzoxMDIyMTAwMENERDdCN0JCQjMyMTdDMUNCRkRDQUZGOERBRTJFQjM4MUIKKzoxMDIyMjAwMDExRkZFMDRCMjBCMUMxRTQ4RDhDNjVDQ0M5QkExOEQ2NDIKKzoxMDIyMzAwMEQxQzlBMTJFNkE5N0MwOUNCNDlFRjlDMkQ3QjBBRURFQjgKKzoxMDIyNDAwMEMzM0Y1M0Y4NTZFMEY2OUQ3MzhEMDFGRUJEMTUwRkYzQTUKKzoxMDIyNTAwMEE2NjU3MkJGNjI1Mzc4OEY1N0EzNzM1RkMxQUQwNTk3QjAKKzoxMDIyNjAwMEYzMUY2M0Y3MTE1Q0FGNjhCQUNFNjg5RkI1N0I3NkYwNTkKKzoxMDIyNzAwMEY1OUQ5N0NBRUMyOTA5RkM3NTcyMjBFM0Q2MThDNkJFRjUKKzoxMDIyODAwMEVBOTFENzVDRDQ3MDM4NDc0OERDM0QzN0I4NkQ2NTNDN0YKKzoxMDIyOTAwMEFERjM0MDAyRTBGOTY3QzdCNUJCQkQ2NkY3OThERUY2NUYKKzoxMDIyQTAwMEUxRUQ3QURCMEIzQ0Q5NkM2RDJCMDA2NzU3OURDMzgzNDYKKzoxMDIyQjAwMEZERTE3REJDRTJERkZENzg2NjQ0RDBDQ0YxNzVDMUVBN0EKKzoxMDIyQzAwMEQ4QTg3MTM5NzMzQzdBREVFQjAzMzkxRURFOEJENUUzNzcKKzoxMDIyRDAwMEQxRkZFQzU5MzdBRTQ3NUQzQjlDRTg1QUM5RTFCQjUwOTIKKzoxMDIyRTAwMEQ5MzExNjc4RjU0NkVCMDNEREJDREY1QUJCM0UzNDg5QTUKKzoxMDIyRjAwMDRGRjE1QzlBM0UyQzBFRjhGNTI1MTI1RUY5M0YwQTdDRjAKKzoxMDIzMDAwMDdEQzIyRkUwMjlEMzA0RkUxM0UzRjQ3NEY0NTM2NjZBMEMKKzoxMDIzMTAwMDdGQzI4NzY3OTZGNkIxRjg4RTM5MDcxMjdDRTc2QzVDNEUKKzoxMDIzMjAwMERFRjVCMUZFMTUxRTRBNjUzRjg3QUM5RUFGQkFGOEZDREMKKzoxMDIzMzAwMDBFNkQ4RUYzMzQ3MTc4QUIxMzY3Q0Q1QkNFNUYyRDMwQUQKKzoxMDIzNDAwMEY5OTI4MjY2MDNEQ0Y5MDRCN0EzNzI2ODBBRTBCNjRBMjAKKzoxMDIzNTAwMEI4RUQwMzI1REVCRDU5NUYwNzc3MTNDNkMzQkVGNjNENTIKKzoxMDIzNjAwMDJEQjBDMzJENjg4OUZBNEJGRUY4QzAwM0JDMUU2MUJBQkMKKzoxMDIzNzAwMEY4M0VFNDQ3NTc4MUM5QzNGNzA4QjY4REVCMTc3NkJFMjAKKzoxMDIzODAwMEFGQkMyQkYxRkQzODU3N0ZFQzA5RjQ3QzIzOUUyNzQ3MjcKKzoxMDIzOTAwMDg5RUY5MzFGMzEwNTlBRjhGN0JFRDI5Nzg5NEUzRjVFQjkKKzoxMDIzQTAwMEU2RjA5OEY5NTg5NUNDNjUwM0RGNTYzMUFGMERGMEZGOTQKKzoxMDIzQjAwMDcxQzJERjVFRURFMEYzQkJDOUFEOTc4MzNFNzcyNjlBMkQKKzoxMDIzQzAwMEQyREYyNzM4RjRCQzY5OUNERkQ4Nzg4MUZGNkZFMjA3NDEKKzoxMDIzRDAwMEM2MzY5OUQ4NThDNjZFOTVGQUMxMDI4OUM3RTlDQzZCNDIKKzoxMDIzRTAwMEM1MzgzMzk4NkVDNUI4QkYzOTZGRjMzMkNFMUZCRkUxMjEKKzoxMDIzRjAwMEI4NjIxQ0RFNTlDQzRGQ0ZFN0IwMDA5NUI3QjMyMEI1MUIKKzoxMDI0MDAwMEJGODM3NTUwRkREN0QxODU2OTBEMUNCRTY5NUI4NjY1OUMKKzoxMDI0MTAwMDYzM0Q4NkUwRkQ3NkM5MkY3NzBFMTBGQ0YyRDkyMEUwRUYKKzoxMDI0MjAwMEJENjVFMDE1RjFFRjM0NERFMDZGQjA1QkFGNzZEMzdBNjgKKzoxMDI0MzAwMDc1MERGMDAwMjZFN0M0MjFCRTk4OTBGNTUzMzY1MEYwOTQKKzoxMDI0NDAwMDlGQzU5OUZENzVFQkE3QkQzQkI2OTA4RDI0NzlFMDQ4RkIKKzoxMDI0NTAwMEUxNzhCODQxOTJGMjA2RUZEMjI5OTgyRjI0MDhENkVCMDIKKzoxMDI0NjAwMDJENzJCRDk2OUIxRDZDMDBBNzRCQkJDQjFDODhFMEIwQUEKKzoxMDI0NzAwMDRDOUVCMDIyMTlGMzdENjMwREZCRDUyODRFQkYzNzI2NDUKKzoxMDI0ODAwMDk4NTkxM0I1RjREMjc3NTM2NTdGNTM4NzRDRkExQ0ZBRTkKKzoxMDI0OTAwMEM5REIyQzM4NjAzNEZGQUVGQzkyN0UzNDhFRTM2N0FBMzEKKzoxMDI0QTAwMDc5Rjc1QUFFNzFCM0M5NDNBQzlGNzQ4NEM4QjUxQjA3QTIKKzoxMDI0QjAwMEVDQjEzMEFFQkZEQzk0NjU3QzNFMjU5RkQ3NDNFNEVFQTMKKzoxMDI0QzAwMDU0NjZFOTdEQ0ZFOTdGMDhGODgxREM2MUNENjZGMEVGRTUKKzoxMDI0RDAwMDQ2NzdDQzgwNEZGMzc4NzUwNDFCMjFFQzAzNEU4RDkwMkEKKzoxMDI0RTAwMEY5NzREQkZGNkVCQkMwQkY3QkM1QUQzRjA0QkFBQzhDREIKKzoxMDI0RjAwMDNGM0Y4RkY0MEU4Qjk4Q0ZCMjc3Q0NBNDU3N0VEMkM4RDMKKzoxMDI1MDAwMEMwNzlFQzE0RDcwRkJEMzk4QzdEQ0FGNTBCRDQ0RjM3ODkKKzoxMDI1MTAwMDI2NTNGOTA1RDcwNzUwOUU2RENDQTVGN0U3MUIzRDU0MTAKKzoxMDI1MjAwMEZGQzRFRERCOEE3RUU3NkZGQ0QyODI3RDY5NDNBNEMyRTMKKzoxMDI1MzAwMEI3ODA2Mzk1RTRCQjBENjk2M0I3RkM5NUUzNzVDM0RCQjYKKzoxMDI1NDAwMDdDNjE3MDc4NkFEQTlBMjc3MTM1OEJBRDRBRkJFNDNFN0MKKzoxMDI1NTAwMEU4Q0ZBQjlFRDYzQzY4QjdGNEEwRDdFNkUwRjAyQzM4QzUKKzoxMDI1NjAwMEFBQUYwNzk5MTdCREREMzExNTYyQTIwRUZBMkJENzFCNTIKKzoxMDI1NzAwMEVFQjdGQTc2NjJCQzMxMUY5QzRBRDI3OTAzRUZDMUNFMjYKKzoxMDI1ODAwMEQ3MTM3OUZCQ0YxQTRCMDhBRUNGMUJCRDA0RDc5OUM2MjIKKzoxMDI1OTAwMEM5NTRGRUNERUREQjhERjY1RUY2QTUwREVENkZERURERUIKKzoxMDI1QTAwMDY5NDlFNUVEQ0JCRDlBMTdFQkYxM0EyRjBCMDQzODNDQTYKKzoxMDI1QjAwMDVCQUQ0MkJFNkZFNUYyMURFQjczNDJDMUFEOEZERjA1MkYKKzoxMDI1QzAwMDcxRTFENkY3ODMwRjY3MjQ1NDk1MjdGMkU3NTM0QjJBMUUKKzoxMDI1RDAwMDJENjgzN0VCMkIyRUQzRENCRDdDRjhDREVCNTBFMEEzODAKKzoxMDI1RTAwMDRFRDJFNURDQ0YzNUMyRDNCOUZENzlCNzVDQzNGQkZCNzYKKzoxMDI1RjAwMEY5MzEzMzMzNzNCOEJBMkY5OTA4QUVFRUUzNTEwMTI4OUQKKzoxMDI2MDAwMEFEQUFERENBN0Q2NkQyMjc1N0E2RDkwMkMwREZDQTdEMzIKKzoxMDI2MTAwMDc5ODNBMDRGOURFMTc0NjMzOUJERTM5RDc5RUVEQjJFOTQKKzoxMDI2MjAwMDNENDQ4RTlFNDk2OEZCQUYwRjIxQTc3RTJGRTQxNEQ3NEYKKzoxMDI2MzAwMDM3M0Y3RDBDNzI2Q0M4NjAwRkU4N0VERUNBRjU3MjIwRjEKKzoxMDI2NDAwMDlBRDU0NzYzMUY1QjY2OTNFQjhCQ0IxOUQ0Q0Y0NDMxOEMKKzoxMDI2NTAwMEQyNDdDNzNFOUY1QThBRjU4MkYxNUNCNjVFMzk5NEYzNDEKKzoxMDI2NjAwMEZDOTY4Q0VGQkE3QUM3REJENUI2RTBDM0M3NzhGRDVDQzEKKzoxMDI2NzAwMEMwRTRCN0YyN0RFNjFDNkIzQkZGMzNDOEQxRUQwRTBGMTMKKzoxMDI2ODAwMEVDODMwRDFBODcwN0ZCRTg4RUMxNTRDRkQ1MkM1MTBENzIKKzoxMDI2OTAwMEM0Q0YwMTVBQUZCOTlBQ0JEMkMwRTU0RkVEMEI4RjBFMjQKKzoxMDI2QTAwMDA2M0ZCREMyNzE1MEMyREZCRkIyMzk5QUU0RDMyQjU2ODgKKzoxMDI2QjAwMENGODkwNkY0RjdCOEU4RUYyNzNGQjhFNzkzMDMyODFGNjAKKzoxMDI2QzAwMEFDMkJCRTg3OTcxN0REMDlENDRGRjU3RjJDMUU4MUVGMDkKKzoxMDI2RDAwMEY5M0VDRDUyNzg3RkNGQkVBNDA1MjNGOUZBMkM2ODM5OTQKKzoxMDI2RTAwMDc0NUYwQTg3NkZFNEI2NEVEMzYwNUUxNjZERDc5QTUwNUEKKzoxMDI2RjAwMEU2QTVERDc0Q0NDQ0RGRkZDNUVEMTI3NkVCNkVCNzM5MDUKKzoxMDI3MDAwMDE1Q0I2QTcwRTBDM0VCNjlGRjM2RUVFQkY5MkQ1Rjk2RUYKKzoxMDI3MTAwMEMyQkM1NEZCRkIwOEFERUQ4QjU2RDhDM0U5Qzc4Qjc1MjMKKzoxMDI3MjAwMEMyNUYzM0MxQjFFRkUwRjRGNzZFNjc5ODA3RDcxQzAwQzIKKzoxMDI3MzAwMDc3QTVDRDQzRkI0OUMwREYwQTNBOUZEMzczM0QwRjYwQjUKKzoxMDI3NDAwMDRERkJGQzhGODJCRUU3RjQyNDBGRjY5N0ZEMjY3RkVDNEQKKzoxMDI3NTAwMDM4QjQzRjYxQTE3OUJFQjRGREQ3QjE1NjVFOEZEQjZCNTMKKzoxMDI3NjAwMDY1OTFGQzdENUQ1MUQ3MjRCNEFGNEI3MzkxMUQ5RUY2RUUKKzoxMDI3NzAwMEM0MEQ5MzgxOUY2NTdCRjdCNTUyM0ZCNTc2OEY4Njc1MDMKKzoxMDI3ODAwMEI2RUZFMkVCQTlCMDg3NkU2NDlFNkNGMERENUU1MUZGQTAKKzoxMDI3OTAwMDdFOTlENzAzN0VBQjY5RkRCM0E4QjdGQkE4RUUzM0ZCRTgKKzoxMDI3QTAwMEREMTZCNEFGMTI3QUNFMTZCOThGQjE4RTQyOTI3N0M0Q0QKKzoxMDI3QjAwMENBQUU1RTdBN0Q5RkJGQzZGQkFENkU3RjRBQkRBMzc3NzIKKzoxMDI3QzAwMEZGRTNGQkQ2OTAwQ0ZFM0VDNTI2QkY3NzRFNEZGN0ZEQ0MKKzoxMDI3RDAwMDEzRkI5NjRERUU0M0FBQkYyRDM2RTY4RkU0RkRBNEYxMjAKKzoxMDI3RTAwMEU3MUFGNjU1OUJEODZGNzc3MEY5MDI3RTUxRkIyRDFGQzMKKzoxMDI3RjAwMDM3MUZFM0YyRUZCRDkwOTNBOTdDNzMyREUyRjM0OUREMUYKKzoxMDI4MDAwMDEyMTFBMDNERkQwQUM3NTc3QUQyRjIyODIxQ0Y5NEZFQkIKKzoxMDI4MTAwMDMxM0JCMUU5RDUwRThFRDczRkM1RUEyNTE5QkNERDAyQTMKKzoxMDI4MjAwMEI5NUYzMzhCMjcxOUYzM0IxOUVCQkQzQTgzRjZCRkFFODMKKzoxMDI4MzAwMDc0Q0M4MUVGODdEN0EyQkVDQ0NDRjVBN0NDMTBGREM5NTQKKzoxMDI4NDAwMDdFNjVGQjYxNDQ5Qzc3MjJCRUJGRDJGNkUzQTNGQTk2NzUKKzoxMDI4NTAwMEJGRTNCQjRCNDhGRUJFMkFFNUVGQUEzRjlCNTgxMUFGMzIKKzoxMDI4NjAwMEFGN0EzODgyRTQwOUVENjk3REUwRTU1NUJFREU3NTJFNkMKKzoxMDI4NzAwMDVGN0UwMUJGMDEyRkFGRkQ1Mzg3OTlFQzhGQTNBNkRBQ0UKKzoxMDI4ODAwMEQ3Rjk3RTRBNDM2N0UwM0Y1RDRENzFBM0E5RUUwNTk5RjQKKzoxMDI4OTAwMEFGRkI5M0E5NEZGQjUwOTU5QzRFOTVBMDkzRjcyQkEzQUMKKzoxMDI4QTAwMEJGRTFGQUFGOUMzNkVBREY5MTcwNDVGMzM1RjczMzVGNEQKKzoxMDI4QjAwMDczQUM5OEVGNDFDQzk3RDM2RUQ1OTdDNTI0MkYwRjVFOUMKKzoxMDI4QzAwMEUxM0NEMzIyQkMyQjAxNUZGODNDMzhEQzBEQTA0NzM4M0IKKzoxMDI4RDAwMERDM0RGQ0RENzU2NTcwREZBRDMxQkYwOUVCRUM0QjVCQkEKKzoxMDI4RTAwMDAwRUJFQzIwMDcxM0VCRjZFMEUyRkMwMEQ2RjM3RTlCNTYKKzoxMDI4RjAwMEE4RkI2MzZEQTQ3RjFFOEM2MTdFQzg4RjgzRDM5MjAyNzgKKzoxMDI5MDAwMDdFRUNFNzY4MEZGOTMwOTA4OUY3OTFGMkZCMzk0OUY0RDIKKzoxMDI5MTAwMEZERTAwOENFRkZCQ0NFNkU4RjkyRkREN0JGNTU4MEY3OEQKKzoxMDI5MjAwMDZCNTIzRDFDMDJBRURGMDYzNjY2OTA3RTZCMjZCRkUxMjEKKzoxMDI5MzAwMDcxMjlBRjVCRTI4M0I3OUJGOUYzOTYyRjczMThDNjM5MDEKKzoxMDI5NDAwMENFODJBOUNCRDFBRTI2OEFFNDUwNEJCQzM3MjU4MUUzOTkKKzoxMDI5NTAwMDcxRkZERkNEQjQyRkI0MTRGMUJBODNFNDM0Rjk3NzVBQTAKKzoxMDI5NjAwMEE2Nzk1M0UyNzk3REFFQTQ0QjRCNkI2MEM3MjNFODZGMjkKKzoxMDI5NzAwMDVBQUVDN0NGQzcxOTZDNjZGNUQ0Q0UyREZBRjlEMDJBNTYKKzoxMDI5ODAwMEJFRkI5REE0MEI1RkM3QjRDRThGNjZDQ0RGMDNGQ0VCMTAKKzoxMDI5OTAwMDUzQTMyREYwOEI3MDhDQTc2ODFDRkVDN0FBQjMxOUM5NkUKKzoxMDI5QTAwMDRCRTlGNzlBMkQ2OTMwQjc5NzBGQkNGNkIxRDA2QkM1REMKKzoxMDI5QjAwMERGOUMwNTNCMjIyMThGNjdENDQ0OTI1RkVBNzhDRDdENkUKKzoxMDI5QzAwMDMxMkUzRURFMENERDFDOEM4MEZFNzc1QkI5QzFFRjc0Q0UKKzoxMDI5RDAwMDM0QzM0QkUzNzJDMzQyREEwOUMxMkFFMEYxRTc1RDc2MDIKKzoxMDI5RTAwMDA2QjlEQzFGM0RFQkRBMjYyNDlFMEFFMTg3MUE5QjkwOEMKKzoxMDI5RjAwMDFGQTdBNTNFRjQ3MjhDRkUwQkYwQ0RGMjAzMzcyNjlFODYKKzoxMDJBMDAwMDBBRDFGN0FBMTc5NEU3NDA3RjU2RTM3RDEzREYzNDgxOUMKKzoxMDJBMTAwMDRFMjM2OUJERkE0REUwOEZCNjQ4QTJGRkU0NUJFRDQ0NUEKKzoxMDJBMjAwMEVGNkU4N0U5MjlGODI1RUY5NEYyQUEwOTg2MzA3RkRFNTgKKzoxMDJBMzAwMEI0MkYyMjcwMUY3RkI2M0MyMjM4MTNGMjhBRDNGRkU5RUQKKzoxMDJBNDAwMDlEQTBFQkFCOTE0NEZGNUE5QkUwQTdEQTlGRTUxMTdGNzUKKzoxMDJBNTAwMEVEQjc3OURERUJEMEZGQ0YyMzg4RUVCNUIxQUUzODdBOTQKKzoxMDJBNjAwMEZGQ0I0NDI2Rjk4RkY0ODZEQUE4NjA0RTNDQzdFN0M2NTAKKzoxMDJBNzAwMDY4RkQ0M0UwOERGMzFERjk4MzZCNkRFMkY5MDlDOTU3RDkKKzoxMDJBODAwMDI3NzgxRjgwQzM1RjFGNDNGQ0M4NjQ1REZGNkUyMkQ5OTcKKzoxMDJBOTAwMDUzNUMxRjI1RkVENTFGQ0FBM0JBNkVGM0E2MkNDMEZBM0QKKzoxMDJBQTAwMDU4MTk0REYwOUQ5MEZFQjQxM0I1RjFDNERGMTUwRjJERUMKKzoxMDJBQjAwMDdEOUI3MTdBOUVGMEVEQkMzRjg3QjczQjcxRDBFQUMxMzgKKzoxMDJBQzAwMEJFRjQ3MTgzMzk2OEUzNzQzREJGRkFFNEQ4QURCQ0RFNkYKKzoxMDJBRDAwMDcxREY0N0U5N0E4ODFGQURFMkJFQkEyOUY4QUU2MkM5NTQKKzoxMDJBRTAwMEVBQTlEODJGRkJDMzc3NDU2RDA0OTdCOUJENzRCMjY2QzgKKzoxMDJBRjAwMDdBRkYwNEZBQjkzM0Y1RkY4RDc5MkVDRkVGNTgwOEI5NzQKKzoxMDJCMDAwMDc3REVENkZFMDRFQzgzMEZFM0Y0QkZFMkZEODU5NzNGNEEKKzoxMDJCMTAwMERCNDlGMkQwRDI5NTAzRkQ3Qzk5ODVGMzAxRjg1MkVFQTIKKzoxMDJCMjAwMDlGQ0IyNTVGMDYzMjc1OTYzOTg2RjA0N0ZBNzg3NDdFMUEKKzoxMDJCMzAwMEJCOTA3QkFCQUY0Q0NFN0Y3MTcwQzc3RThEOEZCMzM0QjMKKzoxMDJCNDAwMEVBRTAzMjJBQ0Q4MTQyRjQ3MzQ2MEJDNjZBOTlDMDFGNkYKKzoxMDJCNTAwMEQ3RTM3ODdGNjc5REMxNThEMDQxOTc3NkQzRDI1REM2QzEKKzoxMDJCNjAwMDc5RTEwRjdFOTVBNUY4MDdGRjZFNjk5Qjk5RkMyQTFDRjkKKzoxMDJCNzAwMDQyMUJFMDVGMEE0RkFGMjE5RTIwRTQwQUVGRTcyOTVBOEIKKzoxMDJCODAwMDg3OEU4RkU3N0Q5N0UzN0ZDOUQzQzM4QkExNEYyRThEQUYKKzoxMDJCOTAwMDNGRjA4MzZCQTgxREZGNEVGMUI5RjlGMkJBOUFDRkU1NjkKKzoxMDJCQTAwMEYwODhGOTlEOTU3QzdFOTY0OTM5MzhEQkQ2NjM4NzQzNUEKKzoxMDJCQjAwMDBGM0FGRkRDMjAwM0RGOUM3RjdBMzhENUJGRDBCQUI0NTAKKzoxMDJCQzAwMDI4MEVENzc5Mjk4Rjk4QTc2REVDMzQxODEwREVCNkIxOEUKKzoxMDJCRDAwMEQwNjcxRjkxQ0Y5NzI2QjY4RDg1RkM1MUYyODhEOURCM0YKKzoxMDJCRTAwMDBBQzlBRUNFNkQyQjg0M0RBOUU0MTlGM0I1RTVEMEYzNDcKKzoxMDJCRjAwMDQwNUIwRUJFREY2RjEyN0UwQUZBQzNCQzlGNEQ2RDI1OEYKKzoxMDJDMDAwMDNDRDhDNTdBNUNGMjZDMUVFMTQ1OEQxMzRFQkZGMEY5REQKKzoxMDJDMTAwMDVFOUYyOUZDREMxQ0RFM0I3REJDRkRCMEFEMzZDM0ZCRkEKKzoxMDJDMjAwMEUxMDE2M0ZEMDZEOTdFNjgxODVEMDY5QkJCMEU0NTQwMzkKKzoxMDJDMzAwMERFRkY5OEQxN0EwRDFGNzdBQUZDRUU5OTY3N0FFODYwREIKKzoxMDJDNDAwMDk2RjYyMjczMjlGQUJCODRCRTZEMDVCRTdGRDc4M0VGNEIKKzoxMDJDNTAwMEJCNTJCOTNDNUQ4QTM5NjZGNENFN0Y3RjkxOUUwQUI5M0EKKzoxMDJDNjAwMDdGREUyNEZDRDRGQkUzNzkzRDFGN0E4RUMwQTdBQTJCMUMKKzoxMDJDNzAwMDNDODZGM0QxN0RCRjVCOTg4QTc4Q0EzRDk5MjZBOTU0REEKKzoxMDJDODAwMDdBMDY4MURGOUEyMDJGQjlCQzY4QjIwQTdDN0NEMTU4QzEKKzoxMDJDOTAwMDMzRUE5NDA1RjY2ODdENEFCNUE1NzczRTBCQjcxNkQ5OTkKKzoxMDJDQTAwMEIxNUUxNjZEMkJCMkNGMEZCMTc3OUE3NjhEM0FFNkUyMTAKKzoxMDJDQjAwMDc0MzlCQkNCNDI2RTgzMjY0QkUwMDdEMEEzOUI3Njk5MzkKKzoxMDJDQzAwMERCRkM4Q0RFREJCREJDRkQ1OUM3RTE3N0QwNkVFMUI2MjUKKzoxMDJDRDAwMEY4NjJFOEJERUFGQjQ1NUJFRjRFQTkwRUMxNzdERTJFMzgKKzoxMDJDRTAwMDIzRkUwQkRBOEM3NUY4QTM0M0VCNEREMDA1QzdGQ0YzM0MKKzoxMDJDRjAwMERGMTUwNThERjU1MUM3OENGNUNGREVCRjZCMjZEOEY4RjMKKzoxMDJEMDAwMEE1MTJDMUVGQTcwMzMxMDFDNEE5NkEzRTlBNzQwQ0ZCNTYKKzoxMDJEMTAwMERBRTlGRDJGQzU4MjNFNEI3RjVGRkQzQUVDOTY0NTVCQkQKKzoxMDJEMjAwMDhEN0NDNkU5QTY0MUFGRjdFRkQ0ODgzRjE2MDdDMkQ3MUUKKzoxMDJEMzAwMDlENUNFRjk3QURDNzM1Q0FBRjk5MUJDQTI3RTFGNDNDM0MKKzoxMDJENDAwMEMzREE2NjdBMzkzRkQ1MzZBQzFDODU3ODQ4Q0QxNENFQzcKKzoxMDJENTAwMEI4MUM5RUFCREIzNkRCMTAzNzA4MUZBRkJGNzVDRjFDMkUKKzoxMDJENjAwMDVFMTdGQzU1OTUyNUUyRERCODg2NTI3NjEyNEVERjREOTIKKzoxMDJENzAwMEJGOUU4NEY1NTZGOTdEOERGNkZGQ0ExNzg3MUQ4NUZDMjkKKzoxMDJEODAwMEVFREMzM0U3MjYyQTY3NEUyNjNDMjhGRkQ5QTI4MzVBNzkKKzoxMDJEOTAwMDMwODZENzlEMjVBRTAzMURGQ0JCMDUwMThERjY4N0Y5NTYKKzoxMDJEQTAwMDZCMjM3QUU1MTBGRjdGRjVBNjMwMzg1QTQyREU3M0Y4QzAKKzoxMDJEQjAwMDE3MUQzOEY0MTc4REY3NUZCM0NERjhERDYyOEUyRkM4N0QKKzoxMDJEQzAwMEZEMjVEQkZGMTExMUZBNUNEOTdERTMwRUI2OUEzMUVGRDgKKzoxMDJERDAwMDA1MEE3RUZGNzUwQ0YzMTIyMTQ4MkUzQUE0QkU3MjBBMzIKKzoxMDJERTAwMDE1MkVFRkEzMTM3Qzg3MzJGOUZDQzdCNTg4RUZCOEMwNjYKKzoxMDJERjAwMEFBQzQ3Q0VCMUMzNjE3RTY1QjY3NjdDMTY4MEVDN0IxRDcKKzoxMDJFMDAwMDE4OUJEN0M5OUY1RkRDMUE0M0ZFQTk4NTExNUMyRjJDNDQKKzoxMDJFMTAwMEE2OTI0NTE2RTMzQjBGRUREMzlGQkU2QjI2N0RBNTBFMTQKKzoxMDJFMjAwMDYzQTM5RjI3MzVCMjdGRUFFMDZDNDRGREM3QTJCRTk4M0EKKzoxMDJFMzAwMDA1NjkxRUUwMTc2RkU4RkMwMkM2M0E2QjE2NzY1M0FEQzMKKzoxMDJFNDAwMDI1NzgwOEY4NThDMjNBODREREMzRTlFODBEODlDN0Q1NkEKKzoxMDJFNTAwMEYyNzkxRTRGODAzRTY0RkM3RTM5NkJBM0Y2Q0IwRkZDRUIKKzoxMDJFNjAwMDIzMjJGNDc5ODg5Rjk0RUMzOTY1NTc5QTZEQ0MwQkZEMzkKKzoxMDJFNzAwMEQ4N0M2RjE0RURGNzVDMTA0NzgxM0ZENzY5REU0N0VERDIKKzoxMDJFODAwMDY2OTQ2MjVFRkVDRDQyRkY5OURCMkFGNjBCQUU5RkU2QUEKKzoxMDJFOTAwMDAwM0YyRDlCODc3QkEwQTdDQ0U1N0E3NjI0RjQ4OEM1REMKKzoxMDJFQTAwMDUxRDRBRTI1OUU5MTdGQTU2NTRFOEVEMEIzRkZGRTYyQjQKKzoxMDJFQjAwMDEwRTM3NDNEQUM5MTdGQTRBNTQ4RjREQkYyRTA3MDdBOTYKKzoxMDJFQzAwMDBGNzlBOEQxMzgxMUE0QjdCNDRDNTNFRkQzNDg0RkZBQjcKKzoxMDJFRDAwMDEwQTBBNTQwQ0Y5NUNGMDdCQUU4Rjk2MEIzMzcwN0ZBM0QKKzoxMDJFRTAwMDNBRkI2MTI0RDlGQjRBQUZGRDQ5ODJGRTBGRUNGQjZBMzUKKzoxMDJFRjAwMEJFNEEwRjY2MzU1N0E2RkZFRDkwRkI1REQ3NjYxMUZGMDIKKzoxMDJGMDAwMDNEQTVGOTVFMzc4NUU4QTVDRTJDMjFFN0M3OTY3QTc3RUYKKzoxMDJGMTAwMENBNzYxNDA3QTgzNjREN0JFMDdBMEU0RkY1MjMyNjU3NjQKKzoxMDJGMjAwMDkzQkIxN0VGQ0NFQkNEQzFGQzRGNkQ4RTJDMDY5RjhENjQKKzoxMDJGMzAwMDJEMTVGRTlFMTM0NTQyNkU0NzhGNjZERTAwMkY1MzY0QUIKKzoxMDJGNDAwMEJGMjk1OTI2NDM5OTFDQzVGOThGRjc3M0FBNUNGODg3RTYKKzoxMDJGNTAwMDYzNDZGQkM4Q0ZDNjc1MzY5MkRGRTFGM0M4OTZGRDU0RDEKKzoxMDJGNjAwMERCN0NCRkJDQjYwRjc4N0FGOEEwNENFODE5QTc1NjY4OEUKKzoxMDJGNzAwMDRGMDlCODM4NUQ3OTdERUM3RjQ0OTI3RkVFOTREQzU3NDEKKzoxMDJGODAwMDE0RkUzOURGOENBMTdENUFDNTQ5MjU5RjZDMDZGREIxMjEKKzoxMDJGOTAwMDlGMkQxNjc2NTAyRjlGMThGOTYwQUUyNkYwQ0ExRTE0OEEKKzoxMDJGQTAwMEZBNjk0QkJDQTgyQjNFRTBGNjBFRkIyQkY4QTQ5QzExNTMKKzoxMDJGQjAwMERFRkJCMzdCRDQzQzVCNUFDNTdCNEVFRjZCQjNDNjVDODgKKzoxMDJGQzAwMDZFRjcyODdBMzM0QjYwMENFQ0M2RkVFODNEQkYyNDdFREEKKzoxMDJGRDAwMEFDNjZBMkI4QjUxRjcxNkJFQzc1ODQ5N0ZCMkQ4MUZCQjUKKzoxMDJGRTAwMDM4MUM0MzJDMDJGRjY5MTZDMTVGNUMyQUZCQTM4QUE5MjcKKzoxMDJGRjAwMEJERDdDNkVCOTUzRjVDQzRCQ0JDN0Q2NTJBMjM3RjEwNjIKKzoxMDMwMDAwMDZGQ0ZFMkQwOUU3NzYzODY3Rjg0OTdGOEFFMzI0RUY0MUUKKzoxMDMwMTAwMDVCMzk4ODkxOUQ0MDdGNUM1RTY1QTFDQ0EwN0VCREE2OUEKKzoxMDMwMjAwMDA0RjE3RDZDMzE3REVGMzc4OUVGQkQxNjVFMEVDRDE0NTYKKzoxMDMwMzAwMEZBN0NEN0JBODhDMDUzOTBDRjFCRDI3MkMwMDc1MzRBQ0MKKzoxMDMwNDAwMDhEN0NEMDI2Rjk0Njk1QTlEOTJFOTVFNzkwOENGNTNEMzMKKzoxMDMwNTAwMDdGRUQ3MERBMkY5QTIyN0Q3NUZCNDBCN0U3ODRGRTVGMjMKKzoxMDMwNjAwMEI5RkU4RTlCQzcwMEJFRTcxMzNEMDBFRjhCQTk3QjI4RkUKKzoxMDMwNzAwMERFMzA3RkVEOUNCQjNGODBEREIwMkI5MjlFOTc2NEVCRjIKKzoxMDMwODAwMDRCQjNBMDFGNkJBRTc5RkJGODgzRjkzMzhFRDg5MkY5NUUKKzoxMDMwOTAwMEY3N0FEQkI0NzMzRkUzRTU1NEZGOUU3N0EwMEY0Q0JEOTYKKzoxMDMwQTAwMENENENFREE3MzJFMTFGNjU2QkM1MzgzN0ZCQkZCNDI0QUIKKzoxMDMwQjAwMEYzRkU2RTFFQUY1MUNFNDA2N0E0MzM3RDA1RjIxNjI0OTkKKzoxMDMwQzAwMEZEQkUwREZFODUxRDE2Qzk2NkJGRTAwMDVDNjkzOTE5OUQKKzoxMDMwRDAwMEZDRjlDREQwMzBGQjg4NUZFRDkzRkNERTM0NDFEQjA2OUMKKzoxMDMwRTAwMEJENjZFODQ0QjFCRTU0N0JGNDgzN0U1RkM5MTI3QUQwREEKKzoxMDMwRjAwMDdEQjI1NDc1OEU1NzZBNUZCRDMxQTIzMzMzMTZBNTM1NDQKKzoxMDMxMDAwMDM4MENGQjVENEVFOTdBRjBENTk0MEMzNjY5MkJGMDdFRDUKKzoxMDMxMTAwMDhGMTlCOTBBMUNERUFFNEE1QUY3MzEzOTJFRjBBOUNFMDIKKzoxMDMxMjAwMDU4OTBGMjIzMDJDMzg5QUYzQjI3NzQ3NTZFRTBGNUNFNDkKKzoxMDMxMzAwMEQ2NjExRUYyRjk0ODNCN0EwMUVDMkIxN0RFMEIzOUE2NUIKKzoxMDMxNDAwMEU0Q0IwOTY3NDcwQ0YxQUJCNEFCQUIyNDZCRkNCMTYxQ0EKKzoxMDMxNTAwMEUyMjM1N0YxRjY1NTBFNUIyN0Y2ODMwNTBGNEY4RjQ1OTcKKzoxMDMxNjAwMDlFNDk1NThCNTlFNDczNkMzMkRBRDVEQ0ZFMEQwMERFRDYKKzoxMDMxNzAwMDcwM0IzOURDMUUwNkNGODA4RkFBMzc2OUM0ODc0MzlCMUEKKzoxMDMxODAwMDNDQjYxNDkyNjM5QTEzRjNBQjc2MDRCMzIwREZBQjNERTUKKzoxMDMxOTAwMDkxMUVCQzNGREJFODREM0M5NTg1NzhDNDY0MkFEOTU3MjUKKzoxMDMxQTAwMDFDRUY2M0UxOEY2NTk0QzRGMTYyQjZGRTFDRjhBMUIyMTYKKzoxMDMxQjAwMEI5OTJFQ0M1RTg3QzlERTREM0Q5MkNDMTc3NTNFMDRGOUMKKzoxMDMxQzAwMDg0QkNCMTc0QTQ2MDFEQ0U1M0NGMTM5QzM5MEVFMkU3Q0EKKzoxMDMxRDAwMDQ4MDYzQzc0NUE5RDM5ODBBQjczNURBNDA5RkJFNjk0QTQKKzoxMDMxRTAwMEZCMDQ1RkYzNzU2NkI3RjBFRkVGQjdCMDI4QUNGN0VGMEQKKzoxMDMxRjAwMEUyN0IzRTVFQzUxQThCQUY5NUQ3ODdEODk5MjUyNjAxMEQKKzoxMDMyMDAwMDdDNTU0NDdDOUQzOTRDQkYwRkYwOUNGRTFFMkJDMUZFQUIKKzoxMDMyMTAwMDVGQjU2OTMzQzFBM0Y4ODI1OURBQ0IxMkExREZFRDcwMzMKKzoxMDMyMjAwMDE3M0ZDMDdBRjkyODczNThFOTUxRTBBRjg3MUY2RUQzNzIKKzoxMDMyMzAwMDg4MEY3ODc5Mjg5M0Y4RTFENjM3ODkxRjRBODM1OTJCNkMKKzoxMDMyNDAwMEYzMTFDN0FBNjU1RUM0MTE5Mjk5MDdGRTgwNkVENjQ1MzgKKzoxMDMyNTAwMEZBNDQzN0Q3MjcyMENGOTQzQzUxNzI4M0YzODExNzc5RjIKKzoxMDMyNjAwMDNEOEFCRTRBN0VFQzZDRTQyMDcxQkNFRTZBQjQ1M0Y5MzAKKzoxMDMyNzAwMDRDQTM5MzU5QjgwQ0Q4REQ5ODRDRjVFNzFCNUQ1NEI2QjgKKzoxMDMyODAwMDM1RTZEMkYzMTcxQTNENTRERkRCNTg0MkY1RkQ4RDVFNkIKKzoxMDMyOTAwMEFBMUY2ODlDNENFNUNGMUE3REY0OUNFMzg1RTQ5MDkyQ0MKKzoxMDMyQTAwMDJCNEExRTI5N0U1MjcyMjk5QzhGRTY3MUY0NUU1NzRDODAKKzoxMDMyQjAwMERGOTNEQzUzRjIwRUYzMzAxNUY3Q0EyMzQ1REYwQ0NENTQKKzoxMDMyQzAwMEU3NEY3NjQzOEU3NUNDODFCQzI4Mzc5RjdERUUyNUY4N0QKKzoxMDMyRDAwMDQ5NkExQzlFMDgxN0YwMjJFNDVFQjdDMzRFNzIzRUREQjkKKzoxMDMyRTAwMEM2MEVDMDVFNkY1QUUxRUREQzEwQjJBRkRFNUVBMzMxRjgKKzoxMDMyRjAwMDRCMDg5RkRFNTExRkM5MkMyMTdDN0M2NzQzQkNBMTVFMUIKKzoxMDMzMDAwMEQxRjBERTZCODM3OEZGNUFCQ0ZFREZBMENCODk3QjNGMTgKKzoxMDMzMTAwMDdERkNCN0ZDRjk5M0Y3N0U5MTBEN0E3MzM4NzY2Q0MxMUEKKzoxMDMzMjAwMEI4QUJBMzdBRTA0ODQwN0RBRDk1RjQ4N0ExNTFDMjBFQjkKKzoxMDMzMzAwMEMyMUZFODMyOUY4OUY1RjlFNEJEN0ZBNUY1REREOTEwRkMKKzoxMDMzNDAwMEUxMzJGMzc2RjMxQjIyMDg1RjFGODI0RTFDQUYxRjRCNDYKKzoxMDMzNTAwMDNBNTVBRTNCRjlEQzRCNThFN0FCNkQyNEU3RTZBRjk1NDkKKzoxMDMzNjAwMEVCNzIyM0M3Njc4OEJFRjY0OTBBMjNCRDRDRjMzMjg2NDkKKzoxMDMzNzAwMDM4Q0MyN0RGQjMwNUY5OUVDRjNFRDFFQzAxMERCQTBGNTMKKzoxMDMzODAwMDM3OTIyQUY4NzM3REUzMUI5NDdGQTUzNTFDMjM3RDU4NjMKKzoxMDMzOTAwMDQ3NUUxNkZDMDQ3RUFCMjExRjRCNkI5MDc5NUExRDQzOTAKKzoxMDMzQTAwMDBDNzk1NEQxQTNCRDM2QzgwN0YwMzRFODM2M0ZGNzMwNjYKKzoxMDMzQjAwMEMzQkE2NkNEOUExMzVCNDBCNTdDNUVCRDUxMjM3REEzMzUKKzoxMDMzQzAwMDQ3NUZDODM2MTMxRDJCQjMyQzU0RkUwMjZCOUNFQ0M1MTMKKzoxMDMzRDAwMDY2REE5RjE0QkY3Mjc5RTEwRDYwNUQzNDE3RDkxNjg2RTUKKzoxMDMzRTAwMEM4RTFGOUYyNzk1NUFFODk0QUY1QkMzMkNCNDZGREZDMEQKKzoxMDMzRjAwMDAyOEI5MUY3RkI0MDZFODY2RDAxQzkzOTk3MEQ3MjQwQzMKKzoxMDM0MDAwMEI1OUY5RjVCQkMzRTYzMzRGQTk5MzA4MDg1QUNDN0EyMDAKKzoxMDM0MTAwMDZDMEI3RDVGODk0NDJGRUM1Rjc2RTFGRkFGRUQ2NzFGOUEKKzoxMDM0MjAwMDUwN0FDOTY5RkNGMzZBODI5RkVDQUQyNUNGM0ZGQjNDMjMKKzoxMDM0MzAwMEUyNjM0QjNFOEEyMDNBMkQxOTI5RkQxMUY5ODFCMUQzNUYKKzoxMDM0NDAwMDQ5OUZGMTNBMzQzRUNGNjU5MkZFNjVDRkZFM0VCNjgzOEEKKzoxMDM0NTAwMEJGNUZCRTU3RjgyRjc5RDk4OTcyRDlFQTFBRjI2QjJENUUKKzoxMDM0NjAwMEYzRjBGNTkxMDBCOTZBOEMyMzFGN0RGRUEzRDgwRUIyNEMKKzoxMDM0NzAwMDJCRkNBOUM4MkZFNERCNDIyQTRCNDZCQ0U4RTQyNEY4MjUKKzoxMDM0ODAwMEM1OTdCM0FFRjVDOEVCMEFGRjZFQjlGNjU1QUNGMEVGRDEKKzoxMDM0OTAwMDhCMzhCOThBNUY5NkJGRkFFNzI0ODI2M0RGQzUyNEM4RjgKKzoxMDM0QTAwMEI1RTVBRkFFNEJEMkZCOThGN0YyQjBGOEI1OEE5QjJCREYKKzoxMDM0QjAwMDNGRDg3MkI2RTk0QkM0RERDMkRCNTU2NUM3MEMwMEZGQ0YKKzoxMDM0QzAwMEIwQUJEODU1RTRBN0IwMzBDQTYzNTg2OTE3NzhFODBFOTYKKzoxMDM0RDAwMDY0QzdCMTNFQzZFQjE5NzcyQjE3RUNEQzBFRURCNkI4MUUKKzoxMDM0RTAwMEUyM0MxQ0NFMEJGREU0RjFFRENBMTZGQkY5MzkxOTQ3OUQKKzoxMDM0RjAwMEJEQjBEQjRDN0FFMTg1REQzMUM0RkZDQjc2RkZGMEY1NjIKKzoxMDM1MDAwMDZCNzg3REQ5NzYwREMzQjIzQUQ2NEU3ODVBQjZEN0NDMDEKKzoxMDM1MTAwMEVDQTFGNjBERkMzNjg5RkRDM0I5RjREOTk4N0FGMEQzNDUKKzoxMDM1MjAwMEUyMzZDREJCMjMxRjcxNzk1N0RDQzAxMDc4RDY0OTdFQjcKKzoxMDM1MzAwMDVBMUFEMTM2OTZFODIwRTFGRkFFRDQ4RjU0QkJDNTA3QTYKKzoxMDM1NDAwMDdGNjgwM0JENzhCQkYzQTRCN0ZDMzQxQUJBMzZGRkVCMkYKKzoxMDM1NTAwMDdBMDc3MDlFRDkzNjhBRTJCQThCREJGNjJDQTM3RDdGODAKKzoxMDM1NjAwMDc3QjQxMzUzRkNDMjZBRjQ0NzZEOTZFMzZEQ0UxNjdBQjYKKzoxMDM1NzAwMEM2MTlFOUZGM0RGM0JDOTlFNDBGRTBDNDNBRkM0MjEzREQKKzoxMDM1ODAwMDdFNUVGNUREMTZGOUREMTY4OUI3RUIxMDU0MUNEM0RCMzIKKzoxMDM1OTAwMDdFNzE1QjY3NkMxNjZGRkZEOTgxRjdBODZDOTVFRDE3OEMKKzoxMDM1QTAwMDNCREEwQkIxNUY3RUI2Mzc3QTcyODBDQTFGNEQ3QTg1REYKKzoxMDM1QjAwMDhGNzdBRTZEQzIwMDJENjQ1RDNEOUY2REE1RkVDRTZEMTMKKzoxMDM1QzAwMDMzNEYwNkJFNTg0MEU1MTlCNUQxN0NDRUVDNEVENUM4NzgKKzoxMDM1RDAwMEFFMDVCRTM5N0VDRUVDN0QzMUQ2NDRFQkQ2NkZBMEEzQ0UKKzoxMDM1RTAwMEM5MkVGQ0E5NkU4QjRCRUE5Nzc2MjdGNDhDQjk1Q0FCOUQKKzoxMDM1RjAwMDhCRTNGMkFFNkVBRkM4MDcwODdGQUVEQUQzN0E0QjAxMjkKKzoxMDM2MDAwMEJGNzdEOTA0RkZDQkY4QkQ4QzJGMjE0Rjg0RTJGMTMxNzUKKzoxMDM2MTAwMEI2MDBGNkQ3NzkyMzVEQjM2RTg3M0M3QkNCMkFFODMxQzEKKzoxMDM2MjAwMEM0QjUwNTc2RDVCQzc3MTNDOTVGQjFEMkVBMUE4NEZBNUUKKzoxMDM2MzAwMDlGREVCNjkyRkY3Q0RFMjhCOUNFOTMzQkM2QzAzRkQ5NTEKKzoxMDM2NDAwMEU5MTZGQjdBRUQ0NkJFNDJGODk0MDc3M0ZBRkJGOUZDRTMKKzoxMDM2NTAwMDZBMDMyNkNBQTc3QzNGM0I4M0U2Rjc1ODhEQzk2QkEzNTQKKzoxMDM2NjAwMDM4NDczMDA3N0VDQTEzMzZFNjM3NDM0RjdFMjE5MkY0M0YKKzoxMDM2NzAwMEJCREEwQ0UxNzc3RjBDRkNDRUNCREE4NDYwNEUyMkY0MEYKKzoxMDM2ODAwMDFENDlDN0RBNUJGOUZCMTA3QUQ2M0UxNUNDODFERTcyOTQKKzoxMDM2OTAwMEQ2MjZGQzc4NzhFRjQ0NTkyQ0RBMzU0OUJFNDEzRkU4MEMKKzoxMDM2QTAwMEI3RDNFRDNDNEZGQUU1QkUxODA2M0RERkY0NTI4Q0YwN0YKKzoxMDM2QjAwMDI3RkMyNDkyRTIwRUFBREY1M0Q5NDJCRjZGOTI3MTJFRUIKKzoxMDM2QzAwMEZGMEUwMTFGRTA4MkRFQkNEOEQ2OUMwM0JENTI4REJCMkQKKzoxMDM2RDAwMDM4QjY5OUM2M0IyQkM3NUIxQ0Q1MkNFMjA3MzIyRjBDQTIKKzoxMDM2RTAwMEVENjk3QzJCRjNDMjFFRUY3QTNBODJGNEQzMkY1MkRBQzMKKzoxMDM2RjAwMEY3NjNGQzJGOUUxRTRFNzFGMDRFNzc2MEUxMDE3QUNGOEEKKzoxMDM3MDAwMEY1MzY0RTg3MjVDRjQ0MDQwMUVGRTc0RkM3NTA5Q0YzQjEKKzoxMDM3MTAwMDczQUJEMDgzM0U4RjQ5MjIzREU4NThDQzIzRjNEMDVGNzIKKzoxMDM3MjAwMEY3RjYwODBERkU5NENGMzU2NjRCQzZGQjFEMDMyOTVFRTgKKzoxMDM3MzAwMEI1QTRCMTgxRTIwNDRCRjg3MjQ3M0M5QTk3OTMxMTU3QjQKKzoxMDM3NDAwMEZFN0NDNzcwRjJCMzdDRkVBNjk5RTI4QkZDRjk0NjNDODYKKzoxMDM3NTAwMEQ3NTlGM0JDRUY2MERERUQ4QTI2M0ZEQjE3Q0ZGQzZENTgKKzoxMDM3NjAwMDc4NjhGQzQxOTU0QkI2MUJGRDQ5OEFGRUVBQkQzNTQ3OUEKKzoxMDM3NzAwMEQ4MERENjFDODFDN0M4MUNCMUNGRDQ0NUI3M0Q5MjQxRTYKKzoxMDM3ODAwMEYzMTRFQjk1RDM4MUVDMkRCRTNFOTJFMDlGM0VEMUY2MzMKKzoxMDM3OTAwMDcyOTJFNjAwOUU4MzM5M0YwMkRFNzcwOUJCRTY4QkREM0QKKzoxMDM3QTAwMDU2OEE4QjJDNzkyOUM2NEJGRTlCMEQ1Nzk5QjA1RjJDRkUKKzoxMDM3QjAwMDMxMEJGRDc3MDk2NzM3NTEwQUZGRDA5MkQ4MUNGMjBGMDEKKzoxMDM3QzAwMDcxN0M5M0ZERDhCNUMzMkNDNzExRTM3RUJFMzM0REY4OTEKKzoxMDM3RDAwMERGODNCMkJFQkYyMDAwM0U5RjkyQzBFRUJDOTVGNDlCM0IKKzoxMDM3RTAwMDZEODVDMEVCQzVFREQxMjZGMDA1MUZDNzhCQjhGRDkyRTYKKzoxMDM3RjAwMEVGN0M1N0UwMzM2RTIxRTlFMzBDNzlEMDYzMTEyRjE3OEEKKzoxMDM4MDAwMEYyQjI2RUMzMzU3MUM4ODc2MUVGOUExOTQ0REY0NThCRjgKKzoxMDM4MTAwMDY3MTBFNDYxMzhCRTY2RTc0ODc5QjlGRjcxMUJFMjY3NUIKKzoxMDM4MjAwMEI1N0NCRDIwM0Y2OEE5OEM5QjJFN0Q0NjIzN0Q2RUU5MkIKKzoxMDM4MzAwMEZBNkJCNjkwMUM3Q0M3Q0FCMjM5MUM2N0RCN0UxODFCQkEKKzoxMDM4NDAwMDRBOEZEMjFDQTE1N0Y0N0VFRkExRjY0Qjc5N0JGMUZEOTQKKzoxMDM4NTAwMDVCQjEwNENGNEVBQjA3RjA4NEQzRjE4QUJGN0ZDNjdDNDcKKzoxMDM4NjAwMDQ1REZGN0YwNDcxQkRGRDcwQjJGOUZGNzQ1RDZGRUJGOEQKKzoxMDM4NzAwMDNFODIxQ0Q5MURFOUYxRDNEMzM2OEEzQjlGQjFCNjJEQzgKKzoxMDM4ODAwMEM0QkNDRjNDMTc0OUYyRTU0Q0JDNThFRjlGNzE3OUU4QjYKKzoxMDM4OTAwMEI3MDE4RTZGM0Q0NEZFOERERjRDNjcxMEREOEIwMkM2OTUKKzoxMDM4QTAwMDdFRDVCODM3RTQ4ODczMUI3NTg5OUUzOEM0MzNFQTM4RUYKKzoxMDM4QjAwMDFERDAxRkE3Q0IyREY0RkRCQjU2RkEzRTdDMUUzOTM5MTcKKzoxMDM4QzAwMDQyNkVGN0FDQ0ZFN0EyODk1RkNFMEMxNkY0MzhGM0ZDNUEKKzoxMDM4RDAwMDMwREE1NzNBRTMwNTlGNzM3OEQzNjFBNzlDODkxNzI1OUYKKzoxMDM4RTAwMDgzMzJDMkY5NjA4OUI0NDNDRjRDNjgyM0JCRkI4Q0I2RUEKKzoxMDM4RjAwMDg3Q0E0RUFCRjg2RTQ5ODM4Q0RCNzJCRTRCMDZERjgwMDUKKzoxMDM5MDAwMDI3MTFCN0IyNkY2QTg3MUUwMUZGRjREODYyMkE4MzExQUMKKzoxMDM5MTAwMDA5OTdGQjk5QzE5RkQ4ODc5RTk0RUIwQjZBMERFNDNBRjcKKzoxMDM5MjAwMEM1Mzc0ODNGNjlCMzQxMUVFQjUyOEZBQkREN0Q3OUJDOTMKKzoxMDM5MzAwMDhDRTJBMEJCMzU4QUZCRENBQkZBRTE1MDBGNTBGRTcxODQKKzoxMDM5NDAwMENFOEY0QkZEOUExN0Y5NDY0QkQ3QUU1ODBDN0U1RjVBNzcKKzoxMDM5NTAwMEJGRjk3NkYwQkI5QUM3NTIwQjlCMENGQkFBNTMzMzEzRUIKKzoxMDM5NjAwMDNDOUQ5MTdDREQwMDBGQTFFMzY1RjRFMkY3RkUxQ0FEMDgKKzoxMDM5NzAwMDI3MEZEQTk5NDQ3QTI2MjlENzBGRTY4OEZEMEFGNTY2REIKKzoxMDM5ODAwMERFNUZFRDVBNkQxMzhERTM1NkY2QTQ5ODlGQzIxMzQ3ODAKKzoxMDM5OTAwMDhCMEQ3RTMyNkVFNzhCRjdGRENDNUZDMTE5M0U3RjA1NDQKKzoxMDM5QTAwMDRGNkI4RUQwMUIzQUREQUU4N0M2ODNERUJGMzI5M0ZGRUUKKzoxMDM5QjAwMEY0RTI1N0EzRTIxMkJFNDYyRjgzQzVENkUzMkZFNkYwMEEKKzoxMDM5QzAwMDNGQ0ZGNzZBQzBCRjQyQ0FCN0E1RjA0NzczMzg3M0I2OTYKKzoxMDM5RDAwMDE5RTMxRkI5REI4REY1MTFCQjhERjVGQ0JEQzY3QUUxOEUKKzoxMDM5RTAwMDQxNjNERDczRDQ1ODdGMDRFMzBFRUNDNTEzRUM1Q0U0NTMKKzoxMDM5RjAwMEI1QzFDRTQ1MDkzQkQ3OTUyM0VDNUNENDYxRTdBMjg0RTEKKzoxMDNBMDAwMDlEOEJFN0IwNzM1MTg3OUQ4QjNBRUM1Q0Q0NjFFN0EyNDQKKzoxMDNBMTAwMDg0OUQ4QkU3N0Y5MDc4QUE5NTdFNDdEMDgxRjJBQjVFM0MKKzoxMDNBMjAwMDhFNTQ3MTcwNUEyRjE3RTYyNDkxRkM1NEYxQ0MwQjhCRjUKKzoxMDNBMzAwMEYzQTlERUUzQ0Y5OTY2Mjc3RjhFQ0FEM0I5M0Q0RTdGQzcKKzoxMDNBNDAwMDMzODdFMjg2RURFQjUzNDAzNzRCMDdGOTcxOTdGRjRDMTQKKzoxMDNBNTAwMEY4NzE2QjhCMjMxREYwMkY3NEFDRkI2QzNERDRBN0MyQTcKKzoxMDNBNjAwMDM4RkQxREI0QkY2MEVEREEyOUYyOTU4MjI0MzczQUQ2Q0QKKzoxMDNBNzAwMEI4REVCRDVFRDA4RkZDMUMyQUVGQTYxMkZCNUQ0MkZGQjQKKzoxMDNBODAwMDc0MEM4RkEzQjA0REM2Qjg0OTc4MUMyNTNDN0UxMkNFNkQKKzoxMDNBOTAwMDA3MkE2RUYyQTRCNTJCMDVGMkZFRTREM0Y2NEQ4MEZGQTMKKzoxMDNBQTAwMEE0RjQ4RkIxRDk0RUQyQkY5NDVFRERBMzdGM0RBODNENzMKKzoxMDNBQjAwMDg1N0RGQjQyOEVDOEZCRUIzRUM2RjVFRDNFRjY1QjU1QzEKKzoxMDNBQzAwMDU2NUQyQTI2QkRCMUE3QkU0OTMzNTFERTQ4NzIyQ0VEQTIKKzoxMDNBRDAwMDQzQUIyNDRDRTk1QTU3RTcwNkM4QkIxODEzRURFMzE3NkMKKzoxMDNBRTAwMDFEMjZCMjBCMkVCRTZGMjYzRDYyMThGNEYzOTBGOTBDMjIKKzoxMDNBRjAwMDBGNDQxOUY4MkI2RjU3NDI1OEZDNkZCMEExRkRDODAzNTMKKzoxMDNCMDAwMDE5NjFGMUJGMTFDNkI4RDQ2RDZCMEVDMUJFOUVCRTY5RkUKKzoxMDNCMTAwMDk0QTE1REI1RUY5QTMwM0M0QUI4QTU1RURBQjQ3QTZCRjEKKzoxMDNCMjAwMDNBRTRDRkFBOTg2RTgyN0ZENUJFNDhDQUFCQURFNkYwMjQKKzoxMDNCMzAwMDdBMTE5NzQzODVBM0EwQzZFRTlEMEFGQ0Q1QjQ1OUUzM0MKKzoxMDNCNDAwMEIxQ0Y1N0M5RkQ4NzM1MThGN0UzMUEwQkYzM0IxMzdBNEEKKzoxMDNCNTAwMEY5QUVDNkM5QkNGMUZDRkI3MzQ1Q0QzQjREOUM2RUU3OEQKKzoxMDNCNjAwMDRDREIxRTE5RUY0MjVDQTkzNUREQzlGOUVBMkVBRDJERkIKKzoxMDNCNzAwMEU5NkFERURGREYyQzdBREEzMDRFOEY3NDZCRjAwNzE1REUKKzoxMDNCODAwMDkwOTc3QjMyRDkxQURFRUVFNEE2MTc2MzQ5RUY5NjdDNTQKKzoxMDNCOTAwMDk2NkU3NTQ2ODFERUFEQ0Q2NkIyMEJFMDk3MzIyN0Y0QTYKKzoxMDNCQTAwMEYyNDM2QjczNjI1NDk2QTM3NzlFQkRGNEZGOEFFNkM3MTcKKzoxMDNCQjAwMEU5RTJDMTM5QzU2RUM3RTEyMUFCQTBDN0I1ODlGOUQ2MjUKKzoxMDNCQzAwMDRDRDBGQ0E0MjdDQkY5QUM5NEZCMEFDQjEyRkREQzI1MkUKKzoxMDNCRDAwMEVCQTdBNEJEQTBFNjc3NzZGOEExNDIxN0UyOTg4RDA3N0YKKzoxMDNCRTAwMEQyQ0Q5MEUzQTZERDNCNzE3RUUwREUyOEJENjREODQwRjcKKzoxMDNCRjAwMEU0NEI2NkZGNzYzQzFGNzdDOTA3MjI1RkY3OEYyRDEzRDIKKzoxMDNDMDAwMDYzQUY4NkZFRjk5Q0Q1MzM4NUQ3MzczNEZGRDgwNkJCMjIKKzoxMDNDMTAwMDc4ODkyNTYwODNERDU5RjM3NEFCQ0RDQkNCMUI3NkI1QUEKKzoxMDNDMjAwMEQyRjM4NUJCMkFDOURFNUVDNEVBQzk4RTNDQURGMjZGMTEKKzoxMDNDMzAwMDI1M0U2QTRBQjU2RDRFMEVGNzkzQzM4NERDQTg4OTEyRkYKKzoxMDNDNDAwMDc5MUJFNUU2RjFBRjIxMkZGREUyMkVBRDA4RjNCRENERTYKKzoxMDNDNTAwMEI3Qzc1NkM5OUZERjNBNEM5RTNCMDk1QjFGREQ2RjRGQ0MKKzoxMDNDNjAwMDJGMUYwODdGNTI5Qjg4N0JGNkI3MUU2NjA0NzM2OTNENDEKKzoxMDNDNzAwMDRDQkZFNEEyRjJCNjRCMjNDODhFRkQ4MEY5MEE0ODRFMzEKKzoxMDNDODAwMEU0ODdEOUIzNkY4QjNDRTRFRTgzNjIxREQ0RDg4MjAzMDIKKzoxMDNDOTAwMEE2NjM5REZDREM0QUVCQTQ4RUNCQUY5MjYyRDhDOThDQTQKKzoxMDNDQTAwMDhERTNBNTZGQkNEOUMwQUZDQkNCQTIwREZDM0M5QjI1NEYKKzoxMDNDQjAwMDE4RTJDODMzNzE2ODMzQTQ3RURCOTQ0QzQzRkI1OUI3RDgKKzoxMDNDQzAwMEU1ODVGMTdGNzFFRjdCOTIyM0UzMEM3OTI2NzVBQkZEREYKKzoxMDNDRDAwMDJFOERGMjU5NEE4RENGNzlCOTlBRjhFQzI2QzNGNzc1MzMKKzoxMDNDRTAwMEVDRDZERTc2QjA4M0I3RkY5QUYwQ0M1OEJCMERGNjU2MTMKKzoxMDNDRjAwMDhENDlFNEQ1Q0NENjNCRTVGMzBFN0FDRTI3NjI1ODg3QzIKKzoxMDNEMDAwMDQzMzMzREJGMTVGQkEyOTVGQ0YyQ0EyRjNEMUJGRkNFRUUKKzoxMDNEMTAwMEVDNkI1RkU0ODQ5NkUzMjIzRjE0RkUwNTQzN0UyMTA3QUIKKzoxMDNEMjAwMDgwRUM0RjI2RTg1MDI3RkQzRDc1QjlDMkRGNTNFNzZGQTEKKzoxMDNEMzAwMEI3MjFGRjk2RTNERjkyQ0E1MUIyQUM1OTIzN0YxRTZGQzEKKzoxMDNENDAwMDZGNEY0RDEwRjVENTc4QkVENzc4REUwMEZENURDMkZCMTQKKzoxMDNENTAwMDYzRTY0QUFDOTdGMEY3Q0JGOEJDQTE2NzJDODM5RjA2Q0IKKzoxMDNENjAwMDdFMjZENUJGRUM1N0YxRTdBMkFENDZCRkQxMzJGODczM0UKKzoxMDNENzAwMDQyRThGOEM5MzAxN0YxRjM5MjVEN0I1RTFGQ0NGMTMyNTcKKzoxMDNEODAwMEREMTc1Rjg0RjU1M0RCMzZDRDVBOTk3RjM5OUYyOUY5Q0EKKzoxMDNEOTAwMDdFQjFDNjQ0NzFFRUVFQjc4RjEwOUY3NUQ3NTg4ODlGREQKKzoxMDNEQTAwMEJGMDkxRkNCQkNDMjlGMTlDRTdGMEJGOTdDMTA5NzVENUEKKzoxMDNEQjAwMEI4NTdGMzA0MzREMTBFNzgxOTBDQkUwQ0MzNEI2QTFGRUMKKzoxMDNEQzAwMEY4NTI3OEVBQzE1QkQ4RkI0NUY4Qzc2OEU0MEQ2ODgxMTIKKzoxMDNERDAwMEEwQkIyRkJDNDgzQ0FBRkVDM0YwQzQ0QThDNzg1OEE4QUMKKzoxMDNERTAwMEJCREU4NUJDNTk3OENDQ0MwMjU3MzBFRjQ1OTgxRkM2NTYKKzoxMDNERjAwMEU3RjNDM0Y4Qjc1RTEyN0UxMjE1Mzc5ODc5Qzk0MkY1MUEKKzoxMDNFMDAwMDFFM0VGMTg5RkNFOURCQTYxOEQ3NjUwRkRGRjhDNDNBM0UKKzoxMDNFMTAwMDk5NzEyOTg5QkVGQjlGRTY5RjZGRTIxQjA1Nzc3ODdFMkIKKzoxMDNFMjAwMEIyM0FERjczN0E5ODNDRkYzMjg2OERBMUY1N0Y4NTc5QUYKKzoxMDNFMzAwMEMzNkFCRjU3NzgxRTdBNkYwOUU1MTM3NTNCMzI0ODdGMTYKKzoxMDNFNDAwMEU4RDk2RjlDQzZGNzJCNjMzMjI4OEY1ODk3RkUzOTI1MjcKKzoxMDNFNTAwMDc3NzVEOTRFOEQ1M0M5REZCQjQ2ODE4Rjg3MjRDMUVGNUIKKzoxMDNFNjAwMEJBN0U2RDY2N0E0Nzg4NUVBMkFGQjM5MkRGMzQ3RDREMkQKKzoxMDNFNzAwMDIyOTU5NTkxQ0UyNEVDMTc5NTZCQ0MzRUVDODM5RkRDN0MKKzoxMDNFODAwMDNGMjhBOTA0N0VGODc1RDYwMTUzNzhENzlGREMzMzNBRDIKKzoxMDNFOTAwMDlEMTVBMDVFNEVFNUM5Q0QxMUIzNDNGREQ5QUE4Q0NGQzcKKzoxMDNFQTAwMDE1RkI0NkREQkRDNzY5RkYzQTY3N0EzQjc2MzZENkQ5NDIKKzoxMDNFQjAwMEJBN0RCMTQ4QTk1OUJBRUVCREIxNEVBRTdBQjQ1QTc0QzIKKzoxMDNFQzAwMDY3MkVDNTQ5NUI3NzNBODEzNzY3NkIyMUZDRDE3NEY2NjEKKzoxMDNFRDAwMDcyNjBBRjlFQjA2NDVERjkyMEY4QkY2QUZGN0VFNDA5QUUKKzoxMDNFRTAwMEVDRUZGQTFBNkIxMkY0Q0NDRkRGRTdGQjlGNDZGQjE3MUYKKzoxMDNFRjAwMEU5MDdBNzkxN0YzQzAwNzFBQjY4M0FERjc2NUE2MzVFQjEKKzoxMDNGMDAwMEM0NkYxNjlCMEYxNTNBMERGQkU5QzE5OTgwRTNFNTI4QjQKKzoxMDNGMTAwMEREOTUzQjA2RTMwNzc2MjY2MzdDOEY5RkYyMjVGNTM1MUEKKzoxMDNGMjAwMEQ5NzE3REY5NEI1NEI5N0NBQkQwREY3NjJBN0ZBREY0RTMKKzoxMDNGMzAwMEVCNDI2RjQ3MUQ3QTNCODI0MkQwREI1MTg3REU4RTEyMDcKKzoxMDNGNDAwMDdBM0I5RTk3QzI1RjhGQjg2QTUzNTcxMUVDNEU3RjI5MTgKKzoxMDNGNTAwMENCQURBN0ZERDU5MTBCQkQ3Qzk1MTZFNTgxQkM1OUE1RDAKKzoxMDNGNjAwMDc5MDZDMTBGQzZCNkE3ODg3RDM1OENCRUFBQkNCNjhCQjQKKzoxMDNGNzAwMEVCNTYyMUZDN0VGRDI1M0IwQkNEMUY5QkMwRTIwREY1RDIKKzoxMDNGODAwMDg5RjYxNDQzRkI3MkE3REJGMEZFODZFNEUxODZGNzM3N0YKKzoxMDNGOTAwMEJBOEEwQ0Y1NkZFNTVFNkQ2ODdGQjM2NzgyQTE3RTRCRDAKKzoxMDNGQTAwMEM5OEQ4NkY2RDNCQ0QzMENGNUU5OTNFNzE4REFDRkYwQzgKKzoxMDNGQjAwMDU1MUFERUNGOUFCREQ4RjA3RThFQkVDMjUwQkZCREU2ODgKKzoxMDNGQzAwMDFFNDNGQjNCRUFENzE4REU3Qjk5RDM4MkZERUQyMEVDNDQKKzoxMDNGRDAwMDI5OEVGNzlGQzM5RUUyRTVBQTVGNjUzQjQyRTkzQTdFRTAKKzoxMDNGRTAwMEEyQTlCRTJGN0ZGQ0EyNUNBMUNGREMzRkRDM0IxRkZDNjMKKzoxMDNGRjAwMDkxMjZDRjgxQTRDOUYzMUM3N0U3QkE0NERFMDBDRUVENDkKKzoxMDQwMDAwMDkzM0REQjlFMDJCRTA5NkYxN0ZFN0U3Q0Y0RTE4QjJFOTIKKzoxMDQwMTAwMDRFQzNGNkRDNUI2RUIzNzBGOTMwRkVBQUMzQTMzMjc5RUYKKzoxMDQwMjAwMERERkM3NEQzNkQxNjJFNTdDNjVGNzNGOEM1MEM1RThGMUEKKzoxMDQwMzAwMDdFRkE1NTUxMUY3OUY4MjJERUFGN0U3QTgzQTg0RjY3NEEKKzoxMDQwNDAwMEE0NUEyNDNFM0RFRTM2M0Y5RkM3RjhFQjMzMzY3OTg0QzEKKzoxMDQwNTAwMDNGQTRDRjdDNEI1NTAyMEZDODVCMDQxRTUwMDYzOTdGMkUKKzoxMDQwNjAwMEEyM0NDQ0Y5MTNFNTUxQ0U5RkQ1NTk4Q0JEQ0VGOTEzQTYKKzoxMDQwNzAwMEU1MzE2RTU3RTJGOTJGQjk1RDg5RjI2RDZFNTdBMjdDN0EKKzoxMDQwODAwMDg3REI5NTI4REJCOTVEODlGMjM3OERCM0E5N0NCRjUxRjkKKzoxMDQwOTAwMEE3RUZGRUIzQjE4NkNBRTM4REY1RjRGQ0MzQzYwNjJBQ0EKKzoxMDQwQTAwMDNGNkVGNEQzRjNDREI5Q0E0RjExMjQzRjhCOEEyNzJEMkQKKzoxMDQwQjAwMDQzMUMwRjdFQjgwM0Q2QjNBMTcxNTYxNTBGNTRGMUJGNDAKKzoxMDQwQzAwMEE2N0FENjExOEQ3NURBNjE4OUZGRDRERTFCRDdFQjVGMzYKKzoxMDQwRDAwMENFNUFEOEE3MjFGQTU2NkJCNDc3NUIyRUY5MkY4NjM4QzMKKzoxMDQwRTAwMDI5QUUyMzlGOTc2QUQzRDM4QTc5Rjk4NTRCN0YwQUVGNEMKKzoxMDQwRjAwMDY3MTQ1N0FEOEI3M0UzMUM0OEJEMTVGQ0YyODFBOUVGMjMKKzoxMDQxMDAwMDczQzE3NzRCM0VBOTFBRUVGRDA5QkU1MzcxNkMxNTQ3N0EKKzoxMDQxMTAwMEVFQzk0RjA5ODk3MzlCNDJGMjYyRTgyRjI0QkY0NUM1NUYKKzoxMDQxMjAwMDlCNTUzRUNENzU3NjkxOUZBN0UyQzkyQTZGNDZGNTU3RkMKKzoxMDQxMzAwMDdFODk5MUJDQkI3NkEzODVGNDkzMTgwQjBCQTI3Rjk1NjcKKzoxMDQxNDAwMDFGNzNBREJEQUQwOEY5MDJEN0Q2M0EyODBGNkQxMDdGQTkKKzoxMDQxNTAwMDZFMkJBNjc2NUUzMzJGQjdGRjk5QjcyRkVDOEQ1RjBGQ0UKKzoxMDQxNjAwMDkyRjBGM0Y3MDQ3RkY5MjU5REZDQUVEN0NBRjgzREJFNjcKKzoxMDQxNzAwMEI3OEJGNzdFN0M4RkRDMjlFODE5QkMyNEJGREFFM0M4NTMKKzoxMDQxODAwMDczMkFFRThEQTdBMzdEQjQ2ODFGNDQ3RjU5RkZDNUM3NkUKKzoxMDQxOTAwMDhCRUQ1RDNGNjkwOTZENDVDOEE3NEE1QkU2QTA3Q0FBMjcKKzoxMDQxQTAwMDZEMTM4Mjc0N0U0Qjc3RUJFRjAxOUZCRTA4RTdFRkEzQTAKKzoxMDQxQjAwMDY5RkQ2NEE2QzE0RjMwNERFQUJENUY0Mzg3RTM1OEFGNDgKKzoxMDQxQzAwMDBBM0YwQUNGOEEyRTBBQkYyMTc5NDc4NEQ3RkVFODE0MTYKKzoxMDQxRDAwMDRFOUY3MEJBMjg3QTk0NUZFQUM1MzNGMDc0MzkxRDdBMUQKKzoxMDQxRTAwMEU5MDQ3RkVDRkYyQjc0MTg2RDY5QTNGMzdGMTFCNTc2OUEKKzoxMDQxRjAwMDBGRTBGQTI2QkFEQ0Q5QzUyNkUxM0M3MTcyODY3RTM3MUIKKzoxMDQyMDAwMEU4NTM3OUM5RjUzQUVBNTU2Q0MyMjQ2QzRERUFCREZCMTYKKzoxMDQyMTAwMDFCREU0RkZFODZGNzBCRkI3OUZGNTZBNENBNDdGMDNBMjgKKzoxMDQyMjAwMDhBMzg1RDI2NEFGOUIxQUE1Q0UwNzdCMkRCNENGODlEOEEKKzoxMDQyMzAwMDk4QkY4OEY0NTFFNjEwN0E5RDhCRkYwRkYyNjREMjU3MzUKKzoxMDQyNDAwMEJFQjVFODZGRDIwMEEzN0VBOEUyQzEzN0M5RkUyNjg3QkIKKzoxMDQyNTAwMEM1ODE2RjkyN0FFMzRENjE3QUUxQjBFMTMyM0VFQzY2NUUKKzoxMDQyNjAwMDZFNjFGNzg5NzNFRTY1NzI5RjRFOTU3NENFRTRDNkZDNUQKKzoxMDQyNzAwMDc4RDA5MUU5MTYwOEFEQTMzOEU3NUU4ODczRTA3RUFBOEUKKzoxMDQyODAwMERGQzgwMjU0N0U4QjA1NjlERkJBOTkwQjM4RDQ2RjYxQTEKKzoxMDQyOTAwMDhDRjIxOThGNDQ0RkFENThDRUZCOUIzODZBNjIxNjlFNDQKKzoxMDQyQTAwMDg3OUNFQjJCMTkzRTg2Q0VGNUZEQzExOTcyQUVFRjcwREYKKzoxMDQyQjAwMDk5OEJGNDg2QzNGNjRDRDI2M0IwMEVBQzIxN0VCNDM3MzIKKzoxMDQyQzAwMEI5REM0NzJBQzMxMUJFMkZBMDdDOERFRjBCNTk5Q0M5QzYKKzoxMDQyRDAwMERGRTBGQjAyRUEzN0U1QUU2MUY4NkU5MkNCOTg2RkEyQTEKKzoxMDQyRTAwMEJFRkY5NkIzOTQ1OTQ2RjUyRjc3QkY1NUY4RjIxMEY4RjQKKzoxMDQyRjAwMDU3REU4QTFGNTYwNkJGRjM1QkYxNTc5NTYxQkU2RkM1NDcKKzoxMDQzMDAwMDBGMzI4OTMyQzI0NjY1QzE0QjU5N0RFOTU5OEEwRjdCMEMKKzoxMDQzMTAwMEM3OUJDNDJDODk5N0UzNTdFMTMzMUM4RjBBQkZGRjAyNjgKKzoxMDQzMjAwMDNFRTdGNzg1Q0ZCQkE1M0VEQTZEN0YyRjM2MzkwM0YxMjcKKzoxMDQzMzAwMDJGQjFGRUVCNUUyQTE4MDRGODNGMDc2OEM4NEJCNjBCOTYKKzoxMDQzNDAwMEJDODRGQjc3M0U2QjY0NDM4MDVGQjYzRDhFOUVERjJENjEKKzoxMDQzNTAwMDc5RThEQTg2NzFENEZFQkE4NjEyOUFERjM1NTFGQUFBNjQKKzoxMDQzNjAwMEUxMzg3NzUyMUNDQ0UxOUEwM0ZCNkM1QjEzOURCRjNEOTcKKzoxMDQzNzAwMEY3QkNEOTAzRkRCQkQ2RUNEQUU0QzE1QTdGNEI5Qzk3NUUKKzoxMDQzODAwMDYzNUYxRDQ5NDdCQzhENkRFRjNCNkZCN0Q2QUVGMEU2NUUKKzoxMDQzOTAwMDI3Rjg4QjMyQkM3NzhCRkQ0RjlDMjM1NkZCRUY5MDA4QTAKKzoxMDQzQTAwMDkxRUZBQUNFQjNGNkI3MUY4RjhEMTI3MjY1NDg4NDkwMzUKKzoxMDQzQjAwMDgzOEE0RUZDM0JBQUE3RjI3RUM2NzJCOTkxRkE1MDE0Q0EKKzoxMDQzQzAwMEU5REYyNTA5REUwNzgwNEY1NkM2MENGQUFCQjJBQkJCNUUKKzoxMDQzRDAwMDA3OTgyOTZFQkQxMkYxQ0IwMUIwNkJFQ0U0Q0ZCOThFMUEKKzoxMDQzRTAwMEU1REMwMjNEQjgwQ0Y2MjZDNzQzRjk5QjU1NzQ0RjgxQjYKKzoxMDQzRjAwMDNBOTcxMTkxNkMzMkRFNkZFMzhBMzJEQ0Q3MTI5RDlCQzMKKzoxMDQ0MDAwMDYwQThDNzc4MDYxQkRBQzc5NTY0MThERUM3N0I0NzE4MTMKKzoxMDQ0MTAwMERFMjc0RTJFMzZENDA3RkFDNjE5REEwRjlBNUQ2QUE4M0YKKzoxMDQ0MjAwMEE3RTgzNzE5REFBN0Q2REM2QUE4MkJGOTkyMkExRUIxQjkKKzoxMDQ0MzAwMEI0RkFCOTg2RUY4NzM2Q0MzN0I0NzdGQjk3MThFRjlGN0QKKzoxMDQ0NDAwMEYxN0JEQjczOTMyMDk3QzQ1RkU2QzY5NTg2RjczRjhBQkUKKzoxMDQ0NTAwMDE1RTcwRTI2M0IxNkQyN0QxMkQ5Q0RERjMxOEU2RkZFQzkKKzoxMDQ0NjAwMENBMENGQ0E2QzY2OUUyQkUwMDk3OTA3RjdFRkUzRkQwRDQKKzoxMDQ0NzAwMEI1M0NEOTI4MEYyNzNBOERGNjMwRDdENzM0RUNCRkE5RjEKKzoxMDQ0ODAwMEY1MTZDM0YzMzc4NjRCQkJCNzkwMTU5MkZDRkIyN0U5QjMKKzoxMDQ0OTAwMDFDOEU5N0VFMzJFNjA5QTIzREY0MTU1RUJGNEUxRkYxNjkKKzoxMDQ0QTAwMDEwRkMwRTY1MDNBQzlFMDAxM0ZFRUVEMDc5QzFERjFEM0IKKzoxMDQ0QjAwMDhBMDdGOEJCNDNFQkYwNzcxQkVGNkQzMkQyMURGRUVFOUYKKzoxMDQ0QzAwMEQwRjdBMzhFMTlFOTNFQTZERDQ4RjdBQjhFMUJFOUFFMDcKKzoxMDQ0RDAwMEY4MzE5QzNFNTc3NzE4RjkyMTlDM0VENzlDMEVFMzBGOEMKKzoxMDQ0RTAwMDQ5OEZEOUZDN0ZGRjEwRTc5ODg5NUU5MzFDMUE3QkNDMUIKKzoxMDQ0RjAwMEZEQUZEM0U3NkY2MUY0RTlBMTg3QzM0RUZBRTI3NUMxNUUKKzoxMDQ1MDAwMEJDMzhENENCQjFDRUEwMzdDOEY5REM5MDU3RUZDODgwMDcKKzoxMDQ1MTAwMDlDQjRFOUQ2MTEwMzdCRjlBNzI5NDVGMDRGRjdCMTE3RjEKKzoxMDQ1MjAwMDIzMjFGNzIyNDYxOEZCM0Y5RkFBNDdBMUZERUNDNDhCMkQKKzoxMDQ1MzAwMEU5MzZGMDQzOTdCOEFGNkZCRTk0OUYyQTlGOTBEQkJCREMKKzoxMDQ1NDAwMEUyM0NERDc3Q0MxNERGM0Y2MTZBQTZGQjkyMEUzQkY1QkYKKzoxMDQ1NTAwMDA0N0M3RjY3N0VCRDg2Rjg0MTMyRjNFRDU5QzhDNzlCNjYKKzoxMDQ1NjAwMEY3OEIwODhBMjdDQzFCMkFDRTc1QjJGQzBFQ0FCMzU3MkMKKzoxMDQ1NzAwMDcyNkU1RUFBQzg2MzE5M0M0MkM2MjczRDIyOUYyNTZEMTQKKzoxMDQ1ODAwMDg0RDAwQjYzM0M0RUNBN0JBRENDMTdFNzA4Qjg1OTkwN0EKKzoxMDQ1OTAwMDNFQUYwMEY4NzgzQjEyRjcxNjc2QjcwOEZGN0Q4NzU1RDcKKzoxMDQ1QTAwMDlDMkZGNTczM0U0NTVDMEM3QTIyRjRCODM0QTk0NzM1NEMKKzoxMDQ1QjAwMEZEQ0U2RTA3RkNDM0I2MzJDM0JFMzgzQzYwMzdFNDVENDcKKzoxMDQ1QzAwMEU2RUQ3MjFBRUEwNTZEQzk4NkY2MjMwRkI4MENFRjhCN0IKKzoxMDQ1RDAwMDgyQjk4NkY3QTM4RTc5MENGNTMxRUQyNTg2RjY1NzFENDUKKzoxMDQ1RTAwMEY3MUFFQTU3Nzc0QzM2QjRCRkU2QjRDRjUwNEY2NTVENDMKKzoxMDQ1RjAwMDhGMDJCRjQzMzU2MThGQ0UxODIxRjI3OEY4MUFBNTc4NjMKKzoxMDQ2MDAwMEQyQkMwREYxRTJGQ0EwQjQ1Mzk1MUVBQ0YyNzE3NUM5OTkKKzoxMDQ2MTAwMEQ3RTFGQUY0NTA5QjRFRjlCRDREMjlDQzQzRTcwMEVDQUQKKzoxMDQ2MjAwMEQyM0U2MTQ2M0Q1Qjk3RjlCNDRBMUY2NTdFNjMzRUFENUQKKzoxMDQ2MzAwMENBQTNFREQxQzdBNUZFQURGNEUxOTAzQzVBNkY2ODFFNDgKKzoxMDQ2NDAwMEVEM0M3OUNFMzc3Q0RGQUIxQzIxQ0ZGMzg1QzEzRkQ0NjUKKzoxMDQ2NTAwMDI2RTZEQjc0OEY4RENFMkQyOEI4QzJFMTM5MkJGMzNCRDMKKzoxMDQ2NjAwMDc3RDhGQjNFM0ZCMjdDODRCMDYzN0Y5NkU5NUIzNDgyQUYKKzoxMDQ2NzAwMDk3NEY0MDNDNjVGNjM1OUVBN0MzQ0ZGOUFCRTk3QjM2MzMKKzoxMDQ2ODAwMENGN0RBRTZGMUU2RkRFNDgzMTlGMEE5M0U5Q0U2OUY5ODgKKzoxMDQ2OTAwMDk0QjczNEZCODU5MEYxMUIyNTdGNTdFNzZCN0RDRTZGNzgKKzoxMDQ2QTAwMDVFOUNDODJCNjI3MTM2MTdGOEI3RkZGMTA0M0U5MzZEMUMKKzoxMDQ2QjAwMDZDMkQ5RDczOTE3OUU3Nzc2QzZBN0IxMDJFRjIwQTVCMDMKKzoxMDQ2QzAwMEIzNTVEQzVGMTZCMDgyMUZBNjk0NzJGREE5ODhEQkM5QzIKKzoxMDQ2RDAwMERCRkZFQjg3MEVBRUU3M0NEMTYwMjEzRkM0RkE2N0NBMkYKKzoxMDQ2RTAwMDY3NzBDREFCRTcxQ0MxNTA2RTVGODAzRkEwQUJDMDJFQTIKKzoxMDQ2RjAwMEY5NEI5RUM4OUJGREM5MDg0NjY1QjlGOUFCOUVGQzZGOTYKKzoxMDQ3MDAwMEYyQTczMzI2RjcwNzYxQjdGNEMxNkZDNDg3NkExRUZGQUIKKzoxMDQ3MTAwMEVFM0NGMDcwM0MyOUJCOTBDOUJDQkIyQzA5OTdDMjVGMzIKKzoxMDQ3MjAwMDhGMUQyRkYxQTdGMkYxNUQyQkFDQkVBNzFDOTRENzNGRDQKKzoxMDQ3MzAwMDE5Rjk0QzhBN0UzMUY5ODIyRjdGMjdGMTgxNzY5MDQ3RDMKKzoxMDQ3NDAwMEZEQjUyQjM3RTdDN0MxNUZEQkNENUM3MUNFQUZGMTQ3NUQKKzoxMDQ3NTAwMEZFQkJGMEEyRjBERkRGRjk5RUZFRTRDMzY1NzJBMTlGMEQKKzoxMDQ3NjAwMEYzM0VGREYxMjdGREZEMTNFNzdFNDJFNDgzQzgyRjkxNjAKKzoxMDQ3NzAwMEY0MDg2NDk5Mjg5RUJCMjFDNkI4OEVFRDc5NjI1Rjc4RjMKKzoxMDQ3ODAwMDRFRUQxNzdFNkU0RjFBRTUwNDgzN0ZCOTY5OUQ1OUNBQjUKKzoxMDQ3OTAwMDA5QjE2RjYzRkZDNEYzMDVFQkFDQTRDRkIwMDY5MThGRjIKKzoxMDQ3QTAwMDVDMjM2NTMxNjNCRUE0NzFBMzExOEZCNUQyN0Q1NkQ3NEEKKzoxMDQ3QjAwMDc5MTlFOTNCRjMxREI2NDAyQjZGNUZFOTBGREZCN0JERjkKKzoxMDQ3QzAwMEY0M0RDNTZCNUNCOEI3QzRCMzFFRkVGN0FBOERDNjc2QzAKKzoxMDQ3RDAwMDhCMUNFMjVFQUYwNTYxNzZFOTIyNjk5NzJFMEFCMzRCMjYKKzoxMDQ3RTAwMEZGM0E0MkRBQTUxRUU2MjFCRDRDQzY5RjE1OUMzRDdDRDIKKzoxMDQ3RjAwMDE1QzhBNEJDNjBEOEE5NjZFMTJGQTE3QzI1ODUyNzE3MjAKKzoxMDQ4MDAwMEUyMEIyMUY3Njg3MjdDNDZFNTYyREY1RTZCRTkzMzhGNkQKKzoxMDQ4MTAwMEFDMDc5RkZEQzRDOUNGMjI0RUVFQzJGQUVGQTZGMzNGMEMKKzoxMDQ4MjAwMEREN0IyMzQ1MUM0REM1MkY2NEZCQjNGRThCRjQxRUVERDEKKzoxMDQ4MzAwMEQxREJCOUEyRjY0MkM0OTE3QUUyMUQ2MTcxOTM2RTg3MTEKKzoxMDQ4NDAwMDI5QjYwNEZERUQxNkY3MkZBODNDODAyNTdGMEQxNDNBRkMKKzoxMDQ4NTAwMDQzRTI5QzdBODdDOTkwNzcxMTVFRUE2QkY2NTE1RTQwMUQKKzoxMDQ4NjAwMEFCNDVDRkNDNDMzRUIyQzU2M0M3N0Q5MUY3M0IwRTI3MjYKKzoxMDQ4NzAwMEUxQkNGNjE0RTlBRjA5ODdCNzQ3QUYxQUFGODkzOEExOTEKKzoxMDQ4ODAwMDVGRThCOUREOTMzNUQyNzNCOTVDNjQ1ODQ3MkE5RTNEMjEKKzoxMDQ4OTAwMDhEMDUwN0EwNTRGMTAzN0Q2MzA5RTE1OUM1MEYyQTgzRjMKKzoxMDQ4QTAwMDI1MDRFNzhDQTY0NTU2NUNEOUQ3RjFFOEVBRjIyODU3RUIKKzoxMDQ4QjAwMDZGNUNBMTIzNERFNEEzRjQxNzVGOTg3RUM5NDNGREREMkYKKzoxMDQ4QzAwMDc2NjkxQ0Y1NTM5QUU3MTZFN0Y1RDczRUI4MDI3QzM0QjMKKzoxMDQ4RDAwMDYyMTdCMzYyOUUxRDYxRjlEOEFBN0MyMTRGQzg5Rjc3RTkKKzoxMDQ4RTAwMEYzOTREQzk2NzkyRTZCMzRBMUM3NkI0Q0U1QkQ5MERDNUMKKzoxMDQ4RjAwMDU2RjU4QkNEQjI1RTJFRUFBQkQ2ODk3QTg3QkNDNzY4RjcKKzoxMDQ5MDAwMEE3RjQzNzYwOUUyODMxMUZEOEM1QkJBNTNGMDJGMzQwRUUKKzoxMDQ5MTAwMDg5NzlFMDM5RTQxNEVBOTA1M0E4NDM0RUExMEUzOTg1MTEKKzoxMDQ5MjAwMDEyNzIwQUNGRTczMzVGN0E5MTU5QzQ0MUNBNDJENjBENTkKKzoxMDQ5MzAwMEUyMjA2NTIxN0ExMEUyMjBBMTc1QzQ0MTQyREIyMzBFRkEKKzoxMDQ5NDAwMDEyRkExRTcxOTBEMEY3ODg4Mzg0RDYxMTA3MDk2RDhGRjMKKzoxMDQ5NTAwMDM4NDg2ODlEOTVEQ0Q4NUI4NzVDRjM0RTMzRDRBNzczRTkKKzoxMDQ5NjAwMDdEQkYyQzY0REQyMjBFMTJEQTNGRTIyMDg2RkVGNDE1QjQKKzoxMDQ5NzAwMDg2RUY2RjY3MEQ4NkVGMTEwNzA5NkQ3RjY3ODM2Njg4ODUKKzoxMDQ5ODAwMDkzREMyOUNGQTU1NzZENEQyMEZFQjhDOUVENkJDQ0UzNjQKKzoxMDQ5OTAwMEY0RkQ0M0Y0REZFRkI2QzIwRTM0MUY1QzRDRjY1OTVERjQKKzoxMDQ5QTAwMDk0NDdEMEI5NzlCMkEwQkI4OTA5M0E3N0NEMjEzQUFGMDMKKzoxMDQ5QjAwMEI2ODk3QUI5Qzg4QkVEMkJERTUwOTYyNUUyMEQyODExMDkKKzoxMDQ5QzAwMDZGNDA4OTc4MDM0QUM0MUI3MDFGMzZFMjBEMjgxMTZGQUYKKzoxMDQ5RDAwMEMwNzNDNDFCNTAyMkRFODAxMkYxMDY5NDg4MzdBMDQ0QjUKKzoxMDQ5RTAwMEJDMDEyNUUyMERGODBFRjEwNjk0ODgzN0UwMzlFMjBEOUUKKzoxMDQ5RjAwMDI4MTE2RkMwRjMxMzg4N0I2NEY1QzIwNUJEM0RDQjYwMDEKKzoxMDRBMDAwMDNGNzIzRTM0RDg4RjRFNDMxRDdBN0I2ODdCRThFREExMjAKKzoxMDRBMTAwMEVGQTFCNzg3QkU4N0RFMUU1QTg3REUxRURBMUU3QTdCQkQKKzoxMDRBMjAwMDY4RkREMDA4MTdBRDMzRThFRkExREY0MTdGMEZBRDE3NjgKKzoxMDRBMzAwMDM0RkI1RjgzOEZFOUU2NkRFNzhGQTJFQzg4RDE5RUQwQ0YKKzoxMDRBNDAwMEI4MjgwOEU2N0QzQzAzNzFBNDhFNDgyRDNEOUUyRjc5NDEKKzoxMDRBNTAwMEVCOUFDRTE5NjVCQ0FFQ0JGQ0IyNDJENjQ1RjczQkVCMjgKKzoxMDRBNjAwMEYyREUxQTNEQzgyODFGQjZFMDJGQzk0MjJFQzgzODI0RUUKKzoxMDRBNzAwMEZENzFCQTE3RUQ2NTY0MDc5NENBRjM4M0VBN0IwRjczN0YKKzoxMDRBODAwMDlBNTFBQUY2QkRGNUJFREI4NThGQUZEQTkxQkMwQzgxRDkKKzoxMDRBOTAwMDgzMUI4ODQ1Qzg4MzI4NUFFRDI4NDYxRUY3NEU5MzI2NjcKKzoxMDRBQTAwMEYyMjBFRjEzNzlBOEUxN0NGNTI3Qjk2RkVGMzRFRDM5RTcKKzoxMDRBQjAwMDFDODVCQzk2NEE4REVFOEJDRkIxQjA2M0I4QzdCQkEwNDYKKzoxMDRBQzAwMEI5QkUxOEZBQzJDNzc5M0RGN0NCOEY0MzVFOEM4MjVCQzMKKzoxMDRBRDAwMEY5MDFCOTlDQTA3MzU1RTNCQjk4QUQzQTFGRjc4OTMxMzIKKzoxMDRBRTAwMERCMDJDODc3OUJEMDEzRjAxREVDQzczQ0JGRTY3RDJBRTQKKzoxMDRBRjAwMDg0QkYzRkNEMTM3QUJGRUU1RjMxQUU5QTNGQ0ZEQjVEMEYKKzoxMDRCMDAwMDNGMEVFN0I1QTY0NDg5RUY3RUYyNjQyQ0UxNzFFQTVBQzQKKzoxMDRCMTAwMEVEMjk5QzhCMUJCRjlCNzk3MUZFRjI4Mjg0M0I2RkI3QTIKKzoxMDRCMjAwMEQzNTY0REUzM0FFOTlDNTc4RkJEQjIyRDlEQ0VBNTU1ODYKKzoxMDRCMzAwMEIyOEVCMjY0RjJFNTZCNzQ4RkI5QzIxQjlGREY1MUNDQTkKKzoxMDRCNDAwMDhGOEJGODYzNTZEMjQ3QzU3OTkxMjg3OTVFNDQ5RDEzQkYKKzoxMDRCNTAwMDcxNUI3QzdCNjA4RkE4RjMyMkQ3OEU4RTJGNDdCRTE2QTkKKzoxMDRCNjAwMDNCMjhFRUREQkI3OTc0RTVCQTgxQkM3RjNEMjBFRURERUMKKzoxMDRCNzAwMEJCRjY0RkY1QUY1MTdEQkJCODc3OEZEODYwMkM4RDQzMTYKKzoxMDRCODAwMEZCREEzMEJGNDZGNzNENENGNUI3OUEwNkI4NzA3RTc0MzUKKzoxMDRCOTAwMDhEMzUwOUVENzczMzBGRDQ5RjYxNEM5QzgzNTRGMEU1M0MKKzoxMDRCQTAwMEIzNzYxM0VFMURFNzVCQ0M5MUM0MTAzRUUyOUM3QTFCRkEKKzoxMDRCQjAwMEU4NUVFNEIxRDI3RDEwRDMyQzRFMkJFNDQ2RjgzRTdFNjUKKzoxMDRCQzAwMDc5M0U1RDk4OUUxMDk2MEZEMUI0RkE3OEJBMzkwM0ZFRkIKKzoxMDRCRDAwMDI0OTMyNzA4QjlCNTJGOUFGNDA1QTVFRjU0Q0EzQ0E4MjkKKzoxMDRCRTAwMDhCNkI1RkEzRkJBQzJCRjcwOEZENDBFNzcyMDBGMjRGMjUKKzoxMDRCRjAwMEU1NDdENDY1MDZEMjRERDAxNzA2QjcxNjI2OThDNUZFRjAKKzoxMDRDMDAwMDlGQ0ZGMTc4QzZGRkUyQ0MxMjE3Q0UzMUJFNDZGOUZBM0IKKzoxMDRDMTAwMDk1RUJDNkM0ODlGMzNBMjJGRTUwMkRGMTU0MkRGMzVGNzMKKzoxMDRDMjAwMDU4QkUzMzA5N0FBN0JBQzdCNERDM0MzRThFQ0VCQjM1M0EKKzoxMDRDMzAwMDBCN0Q0RUY5NzcyQTdGMzVFQTc1RDBCOUYyNzE3OTFGNkQKKzoxMDRDNDAwMEM4QzY0QTNBMDcxNDlFODdBMkY0NDM3NURGQzlFMkI1ODUKKzoxMDRDNTAwMDU2Q0E2RjU5MUNBNjA3MkU5NTdBRTBEMjMwM0RGMDlBQkQKKzoxMDRDNjAwMDdDRTk5RjUxN0FBMEJBOUY0RUI2QTlGQ0Q1OTExOUE0QjAKKzoxMDRDNzAwMEE3RDQ4QkZCRjgyQUQ2MDhCRDg1RUQxMUY3RDg1N0FDMjEKKzoxMDRDODAwMDk5NjhDMkJEMTUxNUZCQkMxRUFEMEZGRTc4NTdFQTJGMDMKKzoxMDRDOTAwMDUzMzA2ODIyRjI3QzA2NTMzOUYzNTIzMjk1QjMyRUU1MzUKKzoxMDRDQTAwMDkyMUNDMDU5MENEMEJGRTM2NTQ2RkFGNDdCNTI1Rjk5NjEKKzoxMDRDQjAwMDgxM0MzRjlDOEZGMzQ3Qzg3QzNFNDZGQTUyMTE3Mzk2NjUKKzoxMDRDQzAwMDQzNkU4Q0YwNkE0N0UwQkU5RTYyRDVENzIxOEY3MDRBNTIKKzoxMDRDRDAwMDJCQTNGMzMwMzc0M0FGRTEyRjY2NDNDRjE5MDUzRTc3NUYKKzoxMDRDRTAwMDk3RDNCOTgwQzkxQTlEQUZCODc5RjQwQUM5RDc5Q0NGQjgKKzoxMDRDRjAwMDE5RjhEQzJGRjlENjQ3RjU5RUZENDBGMkI3RUVFRkI0NzgKKzoxMDREMDAwMEQwQkRBQzdFQ0Q4NjdCRDk3NDY5Q0YyQUZFMERFN0YzOEEKKzoxMDREMTAwMDc5RjJGNzI2OTg0M0Y4OTk3QUZDNTAwMDE2OTdBQkY4ODkKKzoxMDREMjAwMEM3Q0U4NEJFMzgwRkJFQzFDMTkyOTA3NkQ4NzVFMkZENjEKKzoxMDREMzAwMEREQkJDN0NFNUM4QjFDRUJGRjRCRkY0NDg1RkExRDA2MjkKKzoxMDRENDAwMEFFNjc0MTlFREU3MTU3OTE2RDdFODg1QzI5MkQyQzZEN0EKKzoxMDRENTAwMDI5MThEODRCRjdGOTNERTdDNkYyMDc0MUZGNUY3OTdGODUKKzoxMDRENjAwMEY2QTBBRjNCQkY1OEM1RjE4Q0Y1MzEyRkFFRTM2RURDM0EKKzoxMDRENzAwMDhDRkI3MDNFRjM5NjI1RTMzRTY2QTYyRTkxMDkyMjVGREEKKzoxMDREODAwMDZEQUVBQzFGREU3REU3N0Y2RTc0MTA3RUE4QkUzOUJGQUUKKzoxMDREOTAwMDdDQTY5RkQ2OEI5MDU3Qjc0MzVFOTkyMUE3RjQ4N0YyRTQKKzoxMDREQTAwMDkxMUY2NEVGOTgwNDdBNDRFNzc3QzlGM0YwRjIxQzZCMjMKKzoxMDREQjAwMDk4M0ZFMjcwQkVBMDQzQjg1RkEyMkE1RkM4NzE2NjcxRDcKKzoxMDREQzAwMEE1REY0RUU3NTQ1REU0RDc1M0YwN0Y2MjM1OUUxQjU0NTgKKzoxMDRERDAwMEU1Q0ZBNDdERkRFRkNBQjdGRjczOTJGRTJDRTZGNzg4RkUKKzoxMDRERTAwMDQ5OUNERjFFNkM2RTY2RDIzRjI0N0UyNzQzQUUxRjI2OTEKKzoxMDRERjAwMEVGMzNFOEE1M0Y5NzFBQTBGRkZEOUEzMzk0RkVGQTQ2RDkKKzoxMDRFMDAwMDREOUM5QkVFQzc4RkMzNzJCQjFFREQwMTNGNUVBM0Y4QjYKKzoxMDRFMTAwMDdEOEUyNzczMDQxRjNERjkxRDFCRTlERjE1QjZGNkQ3RkMKKzoxMDRFMjAwMDcwNEY5M0MyRTM0NzBERkY2MUE1RkJGRTU4MzAxQkY3OUYKKzoxMDRFMzAwMDRGQ0RBRDhGQTRGQjVFNEIwQjdEODcyMEY3QTJGMzNEREEKKzoxMDRFNDAwMDQ0OEY5NjAyQzE2NzFENEVERjUxM0NBRkRCNzRFODA5MDkKKzoxMDRFNTAwMDlDMUY1RjdFRDA0REU3MUEyQjBGMTRBREM3QkQxNkE1NjIKKzoxMDRFNjAwMDg1RkE5Qjk4NkZBNUMzNjlDM0ZFQkQ2QzZEM0NFRDY3NjkKKzoxMDRFNzAwMEYzMDZDOUYzODVBQzhCRTI1NDBBRkY5REY5NjIxRkREOEUKKzoxMDRFODAwMDUyQzhFNDNEQTczMkJGOUUwQkNBNjk4Njc2MzJBRjM4NUUKKzoxMDRFOTAwMDZDOUQyOEZGNjBCODlGMjFGQzNFODFGRUQ2OEZGMjI3RDMKKzoxMDRFQTAwMEMwN0Y2MDBCRjEyRjJBRkY4NDM1Rjc5MzM5RDgzRjJCNTEKKzoxMDRFQjAwMDZDQzZGMzcwQUE0QzI4OTA3NkFFQjQwMzE3RjRFQzVGN0UKKzoxMDRFQzAwMEY5OTMwNjQxNUZERUFDRDFFRkQ2NTQzQjVDQjNBRUU2NUUKKzoxMDRFRDAwMEY1RUE2MzU2NjQwQUIyMjkwOTJFNzE4RkM0RkRFMjFFRjkKKzoxMDRFRTAwMDg5Rjk3Q0JENDJERTU0QzhCQ0ExRUFBRDI1QjRERUFBNzYKKzoxMDRFRjAwMDAzQkM0Q0VDN0Y1RERFQkVGOTQ4REFDQkUwOUZBMDk3QTcKKzoxMDRGMDAwMENFODk1NzNCQkRCNjg0OTA3NTVGRDVBQzE5Q0U5OUFCQjEKKzoxMDRGMTAwMEJBQTlDMDJDRDYxMUFFMzAyRjg2QkM3MERCNzA5NzRCNkYKKzoxMDRGMjAwMDA1NTcyQjkwODc5NjUwMjBGODQzN0RDN0RCNTExRUMzNTEKKzoxMDRGMzAwMDk0MENGNkJBQjhDNzg3QzNFRDE2RTMxNTg3RjQzRkJGRTQKKzoxMDRGNDAwMEQ5Nzg1RTlFQjcyNzdEQzg1MTEwMjNDRUE3M0JGOUJDMDgKKzoxMDRGNTAwMEUxRkY3MDNBMDk0RThFMDdDMjUzRDc4M0JDM0YxNzhEQ0QKKzoxMDRGNjAwMDQzRjRBODBBMDZBQ0IwQjcyQjkwM0ZDMUVCNzM5RDAxODgKKzoxMDRGNzAwMDJCQzY5OUJGNTZEQzVCQTE2RjEyRTNFODFCRTM2RDA1RkUKKzoxMDRGODAwMEQwOTcyQzRFNUIxQUYwMjdFRkI1RTdGMDkxMUNBQ0U2RkEKKzoxMDRGOTAwMDc4QzFGOTFGNzUwRTMwMUMzRjk1MTJERUVBRTY3OEEzNDIKKzoxMDRGQTAwMDFFRDZCQ0Q5MEE3QUNDRTlFN0ZDRkM3NTA1ODI2RkU3MEUKKzoxMDRGQjAwMEFGOUQ0MEU3OUZBQjJENUVDQUFGRDcyNTdFRkZCODIyREQKKzoxMDRGQzAwMEYyMDFDNDA3RTZCNDZDQjFCQTc5QkRCMDQwQzg5OUVCNDAKKzoxMDRGRDAwMDBBMDQ3RjREQzkwODY2RDNGRDM0MkIyMjNEODA3MzhFQjEKKzoxMDRGRTAwMEIzOTlFNkQ3ODNERjg3MzkzRTM0REM4M0UyMjNGQzcyNTIKKzoxMDRGRjAwMEJFRjAyMzhGQUNCQUM1NDhDRjVFNzg2MkM0M0Q0NjJENjMKKzoxMDUwMDAwMDk1QjRERTE2NUE3NDlCMzMxNDhFQUQ4N0IyNzFBRTY3QjkKKzoxMDUwMTAwMDBFNUZERkI4Nzc4NzM5NzUzQTZGRjNFOUMzQjNEMjY5QUEKKzoxMDUwMjAwMDlFMUM0RUUwMzVDNkUzOUE4NEZCNjYzODlGMTAxRjJCMEEKKzoxMDUwMzAwMDdFNTFFNzgzRDU3ODMzMEJDNDc5Qzc5OTA1N0RGQkQ3QkIKKzoxMDUwNDAwMDdCRDdBNTk3RjQ5QjI2NEU1RkY4QkRGQjVCOTczNjFDN0MKKzoxMDUwNTAwMDM0RTJFM0RBQUFDNTNENjBFMUVCNTRBRDRGQjUyRUQ1OUQKKzoxMDUwNjAwMDNBNTVFQkY3MDlBQjJGOThBQ0Y1Q0ExOUJFREZENkJGOUUKKzoxMDUwNzAwMEQwMDc5RTVBMEE4NDFDOTkyQkU5Q0FGMTdBMzRGNDVDNTEKKzoxMDUwODAwMEQxRjdFNDdBQUVDODMwQUU3N0Y0NDdGNzA2NEFCQTU3OUMKKzoxMDUwOTAwMDk0MDZCMzcxMEU1MEI1NTdFMzU2MjQ4OEVGQzBGN0UwN0QKKzoxMDUwQTAwMEI3QTU3MjNDQjQ1RjQ5RUQ0RDA2Nzk1MUQ1MjMyRjc2RjMKKzoxMDUwQjAwMEFGNEI4MkJDRDhBMzkxQkVCQkYyQzEyMzY5REY4NjFFNzEKKzoxMDUwQzAwMEZCOUNEMDYzQ0ZENEVFNTg5NjAyQkY4MTI1OTAxRTdBMDgKKzoxMDUwRDAwMDNGNTM3NTUwQzg4NzA1NUNGRjgxQkM1ODI4RjdFOTkyOUIKKzoxMDUwRTAwMDZDRkQzQjA1MjFFQkI3RkE4N0NGRTVFODQyQkUwNDIxMTIKKzoxMDUwRjAwMDVGM0U3RUVFOTUwRkM2Qjk3QUY3NEYwNUZGRkM4REJGNzgKKzoxMDUxMDAwMEI2NTYzQTQyRjFBNUM5RkIyOEJBRTlEQzU3OTVDM0U2ODEKKzoxMDUxMTAwMDQyOUU2REQ1REE0QTkyQjcyQzk5REIxMzVBNDg5RTU0QjkKKzoxMDUxMjAwMDE4MUY1NEFFRDVFOERFQUNBQTg2QjEwMUYzRkZBMDVDMkYKKzoxMDUxMzAwMEFFREEzNDhERUVFNjUxNzQ1MkY3NkZBOEZENTRDMUZGMUMKKzoxMDUxNDAwMEI4ODQ3RkFFRTRFMzgwOTQ2QjczNkJEQ0I2ODVCNEVFMTkKKzoxMDUxNTAwMEREQjYyQUYwQkY3QzNGQTdEQUY4QkM4NzRFM0Q3MUVDODQKKzoxMDUxNjAwMEZDRjVDOUYyMUMwQkQ5MjU5QkFDQzJCRkI3M0I4NkY0M0EKKzoxMDUxNzAwMEQ1MzMyQjVGN0E2NzI2NkZGN0M1MjNBREU5RDA0RjE0N0YKKzoxMDUxODAwMDFDOEJBNDFGNkY4MUY0QzcyRDk0N0EyQkE3RDM0RjBCRDAKKzoxMDUxOTAwMDQyRjI1QjE2M0QyOUU4NTRGNUZDQUY3RThGRkJBMTJBNTUKKzoxMDUxQTAwMDMyQTQzQzdCNTA5QzJGOUZERkI2ODdFODM2NjdFMzY2Q0UKKzoxMDUxQjAwMEFCOUJCN0ZCNDU4MURCMjBBN0FCRUE4QjlDRjA0RkNGQzUKKzoxMDUxQzAwMERERDg2QTg1MUNGODg1OTQzN0UxRkM1RTIxRjM1MjE1MjEKKzoxMDUxRDAwMDVFQjFFRjY4MjFGMTBCRDUxRUYyNkYwRjFGRTdBRTE1MjAKKzoxMDUxRTAwMDkxQjFDODczNTFFMzlDOTY3QzVDNTUxRjlGODBGMUFBRDYKKzoxMDUxRjAwMEVBMkI3RjAwQkI0N0M5RkJGMDc1NzczMjUyQUM4N0Y5QzkKKzoxMDUyMDAwMEJDM0ZBQ0NCOTMxMzNDNzRDRUI2NDJGRUJFNTQ3OEZCOEQKKzoxMDUyMTAwMDNGNDhCQUZEQzgyQUVFMTE0QzhENkU3QjlBRjIxNjk2NjUKKzoxMDUyMjAwMDQ3NzkyMDFGQjJCMjNBMDIxODE3RkMwQ0I4NkQyNjcxRUMKKzoxMDUyMzAwMEVGNjA1NjZEQzc5NzgwODNBQkM1OTQ5RjgyMTJGNzFEQjAKKzoxMDUyNDAwMDQxNEQ0RUUyRjVBNzRDRTIzQzUwODY1OTk0RDY0MkMxRkUKKzoxMDUyNTAwMDBGNzA0REUxM0QxQkQwNDFGNzlGODVFNDY3MUFGOEQ1RUIKKzoxMDUyNjAwMEM2QjY2RkM0RkQyQkI2MDE4QzdFRUY0NUYxQTdFQTQ3QTkKKzoxMDUyNzAwMEYxQTdFMkRGRkVFNkY3REY1NzM4QkY5MzZFRTk4N0M4OTQKKzoxMDUyODAwMEY1QTRFMzFDQzVCQzg3ODZEMUZERkNERjM0NEY5QkJDNzUKKzoxMDUyOTAwMDA3QUY2N0JFMTFFMjc3MEIyRTlCNkY5NjhDOEZGNzNCQTMKKzoxMDUyQTAwMERGOTZGMkE0M0VFNjFCM0U0RkI1NEU1NEVFNzU0RjVDQzIKKzoxMDUyQjAwMEExNTlDNDE1NEU2QTdDRkZFMkRGOUQ1QzExNDk3OTVGRkMKKzoxMDUyQzAwMDZBNUVDQUVGN0RBNUY5RjJFRUMyMDQ5OTM3REMxMTAzREMKKzoxMDUyRDAwMDNEQjI0MkZFMUUwNDBCOEEzQTlFNEYwQjc5QUVGNjdEMUMKKzoxMDUyRTAwMDc1NkY5ODkyQ0ZBN0VBRTVCRUM4M0ExRUM0N0E2NjBEREMKKzoxMDUyRjAwMDk5NzQ0RkM2ODlFNjkzMzFCOEJGRTNFNDA0MDE5RkZBN0QKKzoxMDUzMDAwMEVFMkVBQjM4RjdDQTYyNkMyRURDOUZDOEVEMkJGQUREQUYKKzoxMDUzMTAwMDg3MDU2QjA3OTExRDc5NDc0MzI2Qzk4NTNCRkNGMUMyODAKKzoxMDUzMjAwMEVGMjBGNUZCODU1MjBFNDZERjU1QjlGRTJBQjRERkVBQzEKKzoxMDUzMzAwMDc2NkE3QzlDMDUwRUNGQTc1QkU5RkIzQzBGRjRDMUU4QzUKKzoxMDUzNDAwMDk2NjlCNjBDRDI3Qjg1MURBMEUyNDA3NzY5Q0M0N0U3MTEKKzoxMDUzNTAwMDk5MjAyN0IxQkU0Qzg3QjJCMEVGMkNEQTJBRUM4MDI5MTUKKzoxMDUzNjAwMDI2QjYxMUYxQzJBMTREQkU0OTI5OTAxMzhGOEE3QjIzMjUKKzoxMDUzNzAwMEQ5MzZFM0JENEEyRjY2RkJDNjE3MDI2RjYxRjc5MUREOTAKKzoxMDUzODAwMDY1NkRGMzBFODIxQ0U3RkEwNkZDNEMwQjFDM0VEMkRCNkIKKzoxMDUzOTAwMDVGOTE3MkYyNDQ0QjI3REQ0RkFFRjA3QUQ5MzkxNTlCRkQKKzoxMDUzQTAwMDM4OTdEQTE1NjMyMkZGREI5NTlFNTdBOTk2RjEyNEM1M0QKKzoxMDUzQjAwMDM3MkExRUY1MThGRTczMzVGMDY0QTI3REFEREM1QzQxMjIKKzoxMDUzQzAwMEY3RkFBQzZGOTk0ODY1RjVFNkYyNDdGQzA1MzgwRkVCNDQKKzoxMDUzRDAwMDRCMUE0NzcwNUJDOTNGNTY1RDM3NTE5QzFGN0QyQTIyOEYKKzoxMDUzRTAwMDFFRjY0REJBRDU5RjFFQUE5NzU2Qjc2RUEwNzMyQUE3NzAKKzoxMDUzRjAwMDVCMjNFOTlDNEE5OTczNUE1OUZDMDBCQTZGOTdDRTdEOUEKKzoxMDU0MDAwMEE5NzZCNTg1NjIzRjVGNTIzN0QxNzBDRTY0MDFFRjEzNDQKKzoxMDU0MTAwMDc5QjA3RjZFOEJBNkJDNTI3NTdFRTRERTI4N0Q1MUUxQUIKKzoxMDU0MjAwMDQwNzE4RUU0NkE5NzM4M0Y5MjQyRUQ1RDdERkFDMzU1MzQKKzoxMDU0MzAwMEY5NjlBMzM4OEYxMDcyMkU2NkVBMUNGRTdENkRERDhCMzQKKzoxMDU0NDAwMEIxRTg2N0U5QzNFRjhERTU5ODgxRkY2OTE1RkFFRjM5OTcKKzoxMDU0NTAwMDE3QjM1NTlDOEJCOTBCRjYxMkY0QzgwNERGQ0MzOUMwRDYKKzoxMDU0NjAwMEZGOUI2NkMyN0Y3RkUzRDVFMDQ3NDk0MkVDODgzQjAyNjEKKzoxMDU0NzAwMDcxQTRCN0VBNDE2NjQzM0M1OTc3MzJEMjhCNEY5QjU5QUUKKzoxMDU0ODAwMDAzRjQwMEE1QkZBOEU3MUIyNDVFNEVDNzM1QTc4MzNGRTIKKzoxMDU0OTAwMDE2RUZEQzkyOEVGREU1RjMxODUxQUZEODM5RUI5NzkwRkIKKzoxMDU0QTAwMDU3RkFGNjA4QTE5RjVCMThFOUMzNTU3RUExNUZCMzlBMkUKKzoxMDU0QjAwMDA0NzUyRjY2RTQzQ0NFNDc5QjBCQTNDNTNEM0RGMkZDMzMKKzoxMDU0QzAwMDhDODI0QkREQjdGQUI5NDVEQzE3ODM3MzMxRTBGNzhGNzcKKzoxMDU0RDAwMDJDQzEwNUEwRUY0NzVDN0Y4NTFENUIyQkU1RDg0N0NEMzAKKzoxMDU0RTAwMDY2RkFERDExM0Y1RjI4RDA0MzNFNkE3RTMxMDZFNzczREUKKzoxMDU0RjAwMDk1QkU1NjZFRkVEODhCRkI2ODU2RUUxM0U3NTQ3MUFGMUYKKzoxMDU1MDAwMDM5REQ1OTI5RkQyMENCQTQxRjY0RTVDQkQ2NDlGOERENTAKKzoxMDU1MTAwMDExQUU3RkQxOTM1QTRCRDBENjE3RkQ5NjQ4RkRBQUE3NUUKKzoxMDU1MjAwMEJFNzcwRkQ5NkRCNUJCODVGRTUwREJENjQ5RkE4M0QyNjUKKzoxMDU1MzAwMDQ3RDRCOUI4QTVCQjNCNDk5RjUwREYyRERCMkJGMDUyQjgKKzoxMDU1NDAwMEI3NTczQ0FGNDRERUJBRkNCRDUwMkQwQkY2QjQ0NkY1NjAKKzoxMDU1NTAwMDc3NzZDRjlEQjVDNjUwOUY0M0Y1NzdGMkE1QkZERUQyRDMKKzoxMDU1NjAwMDQ1RkFFMDAzQjlCRjIxM0JCQzZFQURFQzk3RDdBRDIxNDYKKzoxMDU1NzAwMEUzRUQwNzEzOEQxMUNGMzMxREY4REU2NUQwMUJFQUY2N0UKKzoxMDU1ODAwMEM2RDNGN0MxQkFBODhERDhFN0JEQ0IxQzE2OTQ0RDc1MEMKKzoxMDU1OTAwMDBFREFGN0I3RDU5QjcyMkRBMzAxNUM5NDA3N0FEQzQxMzQKKzoxMDU1QTAwMDk5QkYzNTcwRTk3RjQ2QzI3RjkwQzJCQThFRTBERUQ3RTAKKzoxMDU1QjAwMEMzNEVGRDREQzgxOUY1N0I5NkVBRENDQjg1NTczRjFCRTIKKzoxMDU1QzAwMDg1RkVBRjFCREE3MTExNzczQzU4QjU4NUIzMTA5RkY4OTMKKzoxMDU1RDAwMDc1QTE5QzQ3N0VDNzI4RjBGNUMwQzM0MjNFM0Y2RTY1NkIKKzoxMDU1RTAwMDFCRTlGRTYwOEI4RkMxNkYxRjk0NzE0NUZGNUY0Q0UyMUEKKzoxMDU1RjAwMEY3MjVCNEUwOEY0M0Y1MkJFQjQ4QjE5RkZBMjI0NDdDQUEKKzoxMDU2MDAwMEIxQzhBRDdGMDgzODZFRDFBQzA1NDVCMEE5NURFNjZDNzgKKzoxMDU2MTAwMEY0QUY3RTQ3NDVFOUE5QTU1MjNFQTc0OUZCQ0EzNjM4RjMKKzoxMDU2MjAwMEQ5MDEzRUQ2QkM1RTNBODc3ODVGRkVFMTJBRUNDQkRGM0IKKzoxMDU2MzAwMEVGQjJEM0VGQUJBQTNDQkZEMkFFMjhEMjVCRDMwNjRGQkEKKzoxMDU2NDAwMEE2RkQ0QzczNTk1ODQ1MzFGQzJBQTYyMEYyNTVCRkNGMTAKKzoxMDU2NTAwMEVDMjIyRkMwMUVBNkQ3OUEyMjI5MUY1OTNCRjhDNjVGRkQKKzoxMDU2NjAwMDIwQ0Y1M0NENUYxRUMxRUY5NEE0N0U1QkEzRkIyRkU3MzkKKzoxMDU2NzAwMDc1N0ZGQTM4N0U2M0E2ODIwNThBRTgxRUJDNzhGRDIyMTMKKzoxMDU2ODAwMDQ4NzdBMjdCNzJBN0NFNDlGNjdENjc5QkREMjNGNjA5OUEKKzoxMDU2OTAwMDE2MEFGRkMxN0JGRTEyOUI2MEVBODVFQjQyRDdBNzc0MTYKKzoxMDU2QTAwMEFGRTA4NTJFM0JGOTZCNEIwRkNBRkJGNkMyRTBCOTkwMTkKKzoxMDU2QjAwMEVDQTJCQzY4REU4RUY0Q0MwQjBFMTNERDMzNTY3QUYwMTAKKzoxMDU2QzAwMDA4REQ5QjU3QUFFRUQ1QjMxQkVGRDU2M0FFQjQ3OEY4Q0YKKzoxMDU2RDAwMDkzQzk4N0NBOTU4MkE0MjY0MUI3RUJFMjhDNzY2MkQyNDEKKzoxMDU2RTAwMDQ4QTEyNzI2OERENEU0M0RBNTAyN0ZEREY2RjM2RkU5QkUKKzoxMDU2RjAwMDVBRUYzQTVDQUVFMkY3RUFGN0E2NkEyMkU4RjdBNkJBRjIKKzoxMDU3MDAwMDBGNjY3RUVERkQwOUVGNDE3RkUwN0FDMUY3MzJCQ0U5MUIKKzoxMDU3MTAwMDIzQzdGNEVFOUYzMzI0NUVENDNFNkM5NkZEQ0Y5MEY4MDEKKzoxMDU3MjAwMDk5RTEzMDA5N0M4NEZEREU4NkUyMEY0NTdGMDVBRjNBQzIKKzoxMDU3MzAwMDc3QTRFOEM2QkVEM0ZFMUFDRTA1NzE3QTE1M0NDNDg4OUMKKzoxMDU3NDAwMDRFQjkxOEZGQzQ1RkRFNUU4NzYzRkU4M0NEREU0RUREOUIKKzoxMDU3NTAwMEZENkZBMTUzMTBGN0UwNUMzMTlEREFDM0U5MTQ4QzFDOTYKKzoxMDU3NjAwMDA2M0RFMTYxRjFGQjVCRTE3OThEMkM5N0QxM0E5RjY3QjIKKzoxMDU3NzAwMDhFMjIzRkEwMkVFRjA1RTdFQkZCMzVBQzZGQjVBRTg3NzEKKzoxMDU3ODAwMDRFRUUyOEMwRkU3ODgyOUJERTgwQUJDM0Q0NDZDRjE3OTYKKzoxMDU3OTAwMDhEQ0NBMDc1Mzg4NEI1QTdDOEZDOUIzMUQwQ0I5QUU0REEKKzoxMDU3QTAwMEZEQzczREJGNjNCOEQ4NDFGNzhENUMwOEE4RkI4RjAzRTgKKzoxMDU3QjAwMDhGMkVFNEUzQjZDQ0M4MjdCRkZFMDUyNkQ3N0I0RENGOUUKKzoxMDU3QzAwMDNERDlFMkZFRTM5RTdCQjJDRDdFRjI5M0NDODkyMjNGQUYKKzoxMDU3RDAwMDRGQ0YzREQ5RDlFMkJFRUI1NzM0OTY4MzdCNjhGREQzREEKKzoxMDU3RTAwMEVDOTQxRjFGN0U0RjM2REY2NzlFNDYzQ0UzQjE5QTI4M0MKKzoxMDU3RjAwMDhBNDNBOUZCOTE0QjlEN0FFNUM4ODE5N0RGOEZGQzg4OEUKKzoxMDU4MDAwMEU2OUJCMzAwRkQxNTM4QThCRjhFMzk1MUNGRUYxNDY4NjEKKzoxMDU4MTAwMDBFQzI4RjczQTIyMTg2RUU4NTU2N0NBOUZDRDc0M0ZENkMKKzoxMDU4MjAwMDlEOEYwMjRGRUE1Q0U3MUYyNDdGMjlCQ0FCNzM2RDBBOTIKKzoxMDU4MzAwMEZGOEFDRkQ0N0RFQ0RBNkFDMTZGM0Q3OUIyQ0IxOEY5MUIKKzoxMDU4NDAwMDQ3ODY3MDEwQTIyOUVGRDFFMzAyOUUxRjhDRDcxQjAwNjAKKzoxMDU4NTAwMDc3RDMwQTJFMzdDODJGMkVGMjM3NEY5ODhDQkZEQkFCODkKKzoxMDU4NjAwMENBMjZCOTJFOTlDQ0ZGOUYyN0Y3QTk3OTJBREZCRkMxOTUKKzoxMDU4NzAwMDk4RUYxRjdFN0Y2NjYyOUM2RjFEQzYzQkE3QkQzNzE2RTMKKzoxMDU4ODAwMDBGREZGRTZGNzM5RkY5MjMzRjkwNzI3OTc0QjRGRTIwOEYKKzoxMDU4OTAwMERBQUI3MzBGNEEyRjdDQkJFOEIzMzRGQTlEOTFBRjhFMUQKKzoxMDU4QTAwMEQwRUYyOUNFNzVGQTlBQjE4RTIyQjM0NDFDRTAwRjI5QUQKKzoxMDU4QjAwMDFENzQ0RUUzMEY3M0ZFOUE0NjdFRTRENUUyREVDRjJCRDUKKzoxMDU4QzAwMDg1RjNGMjczQjQ4MjBGNTYyRDEwNzk4NkE5QUM5RUY4MzkKKzoxMDU4RDAwMDM2QjlGNzdDNjYyNEUwRjhGRkVEMUM2REVGMzlEN0M5QzcKKzoxMDU4RTAwMEEzNEU1MUJFODU4RjdFQTcyMjlDMUVFMzIzMEVCRkU4RTgKKzoxMDU4RjAwMEUyMTZDQTFCMjMzRjk5NDVFNzRFRTMwRUFGNzJGM0ZBNTcKKzoxMDU5MDAwMDNCM0ZGRDU0RDQ1MzBGNUY3NEUzNUNFQTRGM0Y5QjQ1MkMKKzoxMDU5MTAwMEU3NENGMzBFNUZDNDM5RDRERkZDRjRCNDc4N0YwREEzRjkKKzoxMDU5MjAwMDM4RDZGQjNGRkQ3QzE2Q0U5RERBRERGQTA3QTBFQkNDMjYKKzoxMDU5MzAwMDRCRjVBRjYxNUJGRDYwQ0RBRDBCREM3NDhFNzI1QTVBRDYKKzoxMDU5NDAwMEFFMzg0N0Y5MTZFODM5MjM2OUZFQkEzOEFERjcxQzY1NTkKKzoxMDU5NTAwMEY3NDhERjA3Nzg3RUUxNEJDMUU3NkVDNEMwMDZGRUVCNzcKKzoxMDU5NjAwMEE1M0E0N0FBRTQ2QzdGRjI1MEFEQjc3RkQ3Mzk1OEI1NTYKKzoxMDU5NzAwMDdFRDk0RUNGNDYyQjk4RDBGRjJGOUY0RkVEMTJGQjk5MkIKKzoxMDU5ODAwMEYxN0NFQTZCQUZGRUQ2ODVCQ0MzRjFBM0VEQzRDRkUzRDcKKzoxMDU5OTAwMDFERUQyRUY4MDU1MDg3NUNEQ0ZFQTUzOENGODc3Njk2ODYKKzoxMDU5QTAwMEQwNzYwM0M0MzlCRUYxMzg0RjAxRkY0MUI3Mzg2N0Y4RUMKKzoxMDU5QjAwMERBQUI2RkE0NDBERThGQUZCNzUxOUVDRjE2RjlCQjAwQjQKKzoxMDU5QzAwMDMxQTY0MzY2OENGMzdGMDBCMTQ5MkYxNjAwODAwMDAwOUEKKzoxMDU5RDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJCNTNDMTkKKzoxMDU5RTAwMDBCNTg5NEQ3OTVGNzlGN0Y5RTMwQzA4MDA4Mjg4QTNGMzgKKzoxMDU5RjAwMDgyMDQxM0E0MzNCQzM0NUJEQjhFMEExNEE1NEQzMURENjUKKzoxMDVBMDAwMEE0MUEwOThFOTEyMEFGMDFENEI2NzFCN0M5QzcxODhDRkEKKzoxMDVBMTAwMDUxOUI3NDc1NjMxMjYzOEMxOTUwRDQzNEI4M0I0NjMwNzMKKzoxMDVBMjAwMEEwRDg0QzRDQTRDNjNDOTZCMDVCRTJCN0RCRjg2MTYyRjAKKzoxMDVBMzAwMDhDQUYwQzQ4OTI2RUZDRDZENjNERTdEQ0ZCMzMwRjIwRDIKKzoxMDVBNDAwMDI2RUQyRTdFRURDREI5RUY3QkRFRTdEQ0ZCNEZDNDMwREIKKzoxMDVBNTAwMDYzNEQxMjYzNTMwQzhDMTlCMzE4OEJENzMzNjY4QTYxNkMKKzoxMDVBNjAwMEVDNTkxREMwNTBFRTFENjY1RTREMjQ2MzUzNjMxQTU2RkIKKzoxMDVBNzAwMEIzMUMyOENCQ0NENkE2NjQwNjdGNkVDNjcyMTk0QjlDOEQKKzoxMDVBODAwMEUwOUQ2NDg0RkFDNEI1N0FBQThGRDBGNDI5MEQ2NkM2NjUKKzoxMDVBOTAwMDdDOERERTQ1RTc1MzE5Q0IwRjhCQ0M2NERGODE1MkNGNzEKKzoxMDVBQTAwMEQyQjVEMDhGNjlDMkFDQURCMDVFODE3Q0EzMjcxMUUwQzYKKzoxMDVBQjAwMDM1NUQ5MjBEOTY2NkY5ODY5MjVEMkM4NUIxM0EyRDAwODIKKzoxMDVBQzAwMEIxRjgzRjkzQkIxNUQ3RDFGNjU2RUQ4NzdFN0Q3MTg5MkUKKzoxMDVBRDAwMEQ2MkQwMDRFNDkzOEMyNTJCMzYxN0M3RDUxMDY5QkNFMTMKKzoxMDVBRTAwMEQ4MDk4QjYzOEE3NTIyQjRCM0FEMTI4RTBGQ0ZFMEUzNzEKKzoxMDVBRjAwMDdGNUExNERFMjJDM0Y4QzFFM0I3RTUzQUEwRUU2RTgzMDUKKzoxMDVCMDAwMEQyQzFBQzhDQTU3OEEyOTc2OEVGMDQzODRBQzk5NTJDMEQKKzoxMDVCMTAwMDAwNUI2Mzk3NjgyNzAxMUNBRjc0NDhEMDZFNzQ0NTJGRjMKKzoxMDVCMjAwMEM5OUY4NEU3MzM1QUNFQTczM0Y2MzMyNkIxMjg5OUIxRkIKKzoxMDVCMzAwMDY0QUQyMzFERDc3MTE2N0RBNjY3MUE2QzFGRDI5N0NDNTIKKzoxMDVCNDAwMDYyMkNDMzZBMjEzQzRDM0MwMTc4ODI3RDBFMkQ4QzcwMDYKKzoxMDVCNTAwMEI3QzBGOTU4ODY5MjhCRUQ0OUJBQTE0ODBCRTA2M0YwQzMKKzoxMDVCNjAwMDg2QjZDODZEQTY3MTkxN0YwRkY1MzdGMUVGMDc4Q0VEMDIKKzoxMDVCNzAwMEVFOTZBOTVFODVENUQyNjc4NTQ5NjBCREZBNTRGMzEzQzgKKzoxMDVCODAwMDg4QkZCQTA0QTM5MUNBRUU2Qjg1MENFN0QxOTZBNERFNTgKKzoxMDVCOTAwMDBERjNEOEY1NkM3OTQ5QzZFOEYxMDM1NjBERUQyQjc5NzQKKzoxMDVCQTAwMDIzMTA3NDMyQUVDQkVDNEM4MUZGMEI2MzJBRUM2MjczOTIKKzoxMDVCQjAwMDE4NkJGRTI1NTRGQzFENkY4NzkzMzBGRDBDOEQ4MDZEOTYKKzoxMDVCQzAwMDNCRjI1MzgzRkFEQkIxQkZCRjlERDk4RENDM0ZGRTdFNDQKKzoxMDVCRDAwMEVCOEMxRDFCQjQ2MjNEQTQ3MzA1NzNDRjgwMjMyNEIyRUMKKzoxMDVCRTAwMDA2ODkwMUZFMTI5ODk3RThCM0RCMTY0M0ZCQTIzRkEwOUIKKzoxMDVCRjAwMEQzMEJCMUE2RTYyREQwMkY1NTY2MkU1MzE2OTVDQzAyQTkKKzoxMDVDMDAwMDY1NjIzOEFDMDdFRDg5QUY5OURDQzg1NzdCNEREMDBFODMKKzoxMDVDMTAwMDQzNTMzNUJDRENBQkUxRkRGNTYxQ0M4NTdDM0ExNTYwQzYKKzoxMDVDMjAwMDA2RTUzMTlCQTNDRTM2OTFFNkYxRDIzQ0YyMjExQkYyODAKKzoxMDVDMzAwMEUzMjRFNkExRjVFMzk5OEJGNkEzRjY5QkMyN0E0RDA4MUYKKzoxMDVDNDAwMDMzRUQ1MDFBRDI2QkFFQUMxOTEzOUYzQURCQkNGNTQ4NUEKKzoxMDVDNTAwMDdGNUZBMzlEN0RBMjBEQTA1Mzc4RTRCQTQwRkFENUUxMDEKKzoxMDVDNjAwMDc4NzNFMEI4RjkzNDRFMURFRjVDQTc2MTlGNENDMEMzNTgKKzoxMDVDNzAwMDdCODk3RjlDQTkxQUJCM0IwM0M3QjEzN0E1MkNBQ0VGMkUKKzoxMDVDODAwMEQ1OTc0NEY4QzdGNTM3MUFEOTI3NDA4N0ZGNjg2NDU0NzkKKzoxMDVDOTAwMDlFNjlCNEQwRkFGRkQ5OTg0MEU1MUYxQjE1QUEzRkRCRDcKKzoxMDVDQTAwMDk4NEVFNTQwQTM5NUVBM0Y2QTlDNDNFNUJEQ0IyMjcyM0UKKzoxMDVDQjAwMDkwRkZFQjNCRTdCMTRGOEMxQ0VEMzdFMTdGNEU4RkNFNzEKKzoxMDVDQzAwMDMxMTAwMEY3Q0YxQjlCOEZGNjBCM0VFQTRGMUVCQkRENUEKKzoxMDVDRDAwMDhCRURCOENGRUY3MzdBMEUzRUM4REMyREM5QzQ5NzFCOEQKKzoxMDVDRTAwMDJDMzFBM0U5MEZFNzMzRTFGOTA2MjNEODEyMEZFMEU5REQKKzoxMDVDRjAwMDU4OEU0NEYzMEY0RUUyNzBCMzU1NDdGM0Q5MzU2QzA3MTUKKzoxMDVEMDAwMDhFM0Y5NkEzRTdGMzRGRDc1NDYyQkIzRDg2Q0ZEQjlGMTAKKzoxMDVEMTAwMDA2MzBFQ0E3NjhDRUJDMTcxMTRGRjYzOEE4Q0ZGMkMzRjcKKzoxMDVEMjAwMEZEQjdGMzc2RkI2NDVFQUZFRTU3NkRBRkIzNTk2ODVFQjcKKzoxMDVEMzAwMDk1RUU4MzNBNTgzRjgzRjg5REU2NTdGQjdGOTZDN0U1N0IKKzoxMDVENDAwMDMwQjRCRjNCNTU1M0U0MUUwMzFGMUExQkVGNEY3MjAxQzMKKzoxMDVENTAwMEY4NzBBMTFDMjQwN0M4NDU5RDQyNzJBMUYyQTFDQTdGMTgKKzoxMDVENjAwMEJCNkQxQzhGQTkwNkMxRTdFMTIwMDczMTI0MDczNDJFNDMKKzoxMDVENzAwMDMxMUVFNDQwMjJCQ0Q4MTk5QzY3QUYyNEU0MjU1NDFFOTAKKzoxMDVEODAwMEEwNDQzREFFQ0E4MzJBMDcyQUJGMjc4MjlDNDkzMUZFMjAKKzoxMDVEOTAwMDczN0MyRjg0NUZENUYyOTQ5NUQzQTUzNzJFRTIxNzQ0RjgKKzoxMDVEQTAwMEQ3NkU5RDA1NTQyMUY0MDc0MkM2MjA3QzRGOEUxREM2MzgKKzoxMDVEQjAwMDE1M0M2RTZFMTg0QjdGRERCNEZFOEQ3ODUwRjVDMTM4MDIKKzoxMDVEQzAwMDc4MTg3NTdFM0QyRkJGRURGOTQ5QkZBMURFNDZCRTFEOTcKKzoxMDVERDAwMDQzNUY3RDY2NTVGNTE1RTc1QjlEQ0RGRUE5MTVGOTU1MjkKKzoxMDVERTAwMDMyNjlBNTI4Mjg0RDlDNkY0MkNGN0YyQzg3Q0I4RENBNjYKKzoxMDVERjAwMDNGQkI2RDhDREI0QjNDNjdDQTY4N0RBNzlFNjdFNDlDMEMKKzoxMDVFMDAwMEFCMThFOUJERDQzMDVFMUY0QTVGRjU1QzAxN0FFRkNGNzUKKzoxMDVFMTAwMEI4MkYxNTlGOEM3OTZDMTY5ODY3NEFBREQ5QkEyNUQ5RDkKKzoxMDVFMjAwMENGQkZCRTg5RDcyQkQwN0U2REI2MkFCNDlGRTczNTMyNUYKKzoxMDVFMzAwMEQxNUZCNTI3MjNGNTkyQkM3QzcxNDY5MDlENjExNkEwNzkKKzoxMDVFNDAwMEUzRDA3MTAzQzlCNzU3QzMyQTVGODE3MUFEQjhENDlENDAKKzoxMDVFNTAwMEZFNzNDRjE2RjQxQjVFMzI0M0IzMEVGNkU1RkI5M0Q5MDcKKzoxMDVFNjAwMDg1NzZDQjM3NzlFOEFDMDRFMzdEM0I3NENDNDVGRTgzODMKKzoxMDVFNzAwMEZENDc1MjFDNjMwRjgyNEQ0MUJCNzQxNUY0MUM0QjYzRUMKKzoxMDVFODAwMDRDN0VFRUNCQjMxMkVDQkJFMjM5OTkxOTAwNzUzRTUwNTMKKzoxMDVFOTAwMERCMzI4Q0FCN0YzQUMyNkRFNEUzMTg4MzcxQjU2MjVDOTAKKzoxMDVFQTAwMEQzOEVDRkVGNDVGRUJBMDBGQzY5ODBGNjRGNEM3NUQzMTgKKzoxMDVFQjAwMDU5MjY2MzBCOUVEMzExMUUyQjIyRjQ2RUFDN0Y2M0M3NTEKKzoxMDVFQzAwMDUzQTc5NjAxN0NBMTVENTJEMERGMjg5NENERDQ1RUZEMEUKKzoxMDVFRDAwMDkyRUNDNjc1NkFDRDg1OTcyNEYwNzM3Q0VEQ0RDRjg0QTYKKzoxMDVFRTAwMDQxQkRGMzgwOEU5OTYwNUM2MUJCNjRGNUMyRkNBQjNDNDQKKzoxMDVFRjAwMDExODgxOTU2QjE1REY3RDE0MEJBNUY2RkZFNTBEOEIxMjUKKzoxMDVGMDAwMENBQkQ5MjFCMzg4NjU1RUUwQTZFQUZERTFCMENENzMyMjcKKzoxMDVGMTAwMEFEMUY4NkY5QjM2QzExQjExN0VFMDA2MDI2QjNERDQ0RjYKKzoxMDVGMjAwMEJBNkQ4RjQxNjMzNUEyQjc0M0Y5MEFDRDM2RTlDNzM1NUIKKzoxMDVGMzAwMDVDMUYzM0Y2NDVEQ0REQzA5N0YyRjEyRjkzM0UzMjczRTAKKzoxMDVGNDAwMDc4QjE4MENGMDFGQ0Q5OTcxQ0ZGMkFERUVBODRDRUZGMEUKKzoxMDVGNTAwMDZDMTJDQkYxQzAzOUVCOEU5QjJDMkUzODU4NUQ5NzRDRDAKKzoxMDVGNjAwMEU3RjA3OUEyMDhDRkY1NjEwMzc3OTE5QzFFOTUyREU4QTMKKzoxMDVGNzAwMDg3NkRFRTk0NUREOEVFRUMzNkVERDFDMDM5RUIzQTI0NjYKKzoxMDVGODAwMEE2NDVCOEQzRTBFNjc4QkE1NjgxRURBQjNBNEQxNjA1OTIKKzoxMDVGOTAwMERCOEYxQTk4MENFMzdENDAzNzEzRDI3MUVBMDBEMTFGRDIKKzoxMDVGQTAwMEU5RUE5MjY4MEIzRjkyRjJGQ0Y0OTc5MTVFQjE3RTdBMzcKKzoxMDVGQjAwMDM1RURFMEZCQjk3MDgwRDNBNzUwN0U1ODRCRjQ2QTk2NUMKKzoxMDVGQzAwMDU4N0MwMDlEN0ZBRjc5Nzk4NDVFRDg2RkMxNzM3RkU4N0MKKzoxMDVGRDAwMDQxM0E1N0MwRkUwQzBBRDI1RDI2M0E1RjAwRkFFMEJDOTcKKzoxMDVGRTAwMEZBRTM5RjI0MEQ5OEZERjQ5NjgxREVCRjUyQzc0M0ZGNkMKKzoxMDVGRjAwMDU1QjdBMDc3MjU3MzZENDQ3RkVFREJEMjM5NUNDODNGN0YKKzoxMDYwMDAwMEY4QkQxNzlFNDdCRjM3NDI2RjQ1M0U4QzE1RkVGMUM0NjEKKzoxMDYwMTAwMDlBRkU5M0IxQjA2MDU5Q0MxNUU3NkFBODlGOTFGMDBBMzcKKzoxMDYwMjAwMDRCMDUzRjQxOEE3NjNDNjQ4MzcxNjcxN0JFRkIxODkyMkIKKzoxMDYwMzAwMEEzNkZEMUNCMzZFNDhCMjZERDQwRUJCMzUwRTE4QTBFNjMKKzoxMDYwNDAwMEI3QTIwQzBFMjYyRkRFRjUyQUFDOTMxRjczM0RFOTEwODQKKzoxMDYwNTAwMENBQ0JFRjBDMTY2NEE3MjYyMThGRjg2NzA0RkEzQjE5MDgKKzoxMDYwNjAwMEM3MzdEMEYxMUM5RURGRDk2REYwMUEwMDhGQUNCREMwRDAKKzoxMDYwNzAwMDNFRTIwRjRDNDc3QkVDRDFBMzlFMkFEMDBGOTVBRDQ2NTQKKzoxMDYwODAwMDdGMUNFNkMzNzUyNDYwMjM5NEVCOUFFRURGOUY5MTYwM0EKKzoxMDYwOTAwMDlDQTRDNEIyNTI4NDhENjZBRjhDRjNCNEU5QUU4RTlDREUKKzoxMDYwQTAwMDFCRTY5MTJDRUY1MkJGNURCNkU5QjQ4Rjk0RjhFRjI5NEYKKzoxMDYwQjAwMEE4N0Y5QTk2MzI0NzU4Q0FEN0U5Nzk0NjdBRkUwNTlENTUKKzoxMDYwQzAwMEQwRUZFM0Y5N0ZFM0U4N0JENUVGNjNBRTI5RDExNzYwMkEKKzoxMDYwRDAwMDRFQzQwNTk3MUZBRTc3NTZDRDYxRTI0RkM4ODU4MDJCMjEKKzoxMDYwRTAwMEQ3QkIyMjhERDA3OUQ1MURENjA0M0NGRkE3Qzg2NzkxQjgKKzoxMDYwRjAwMEM4N0ZFRjY4MjdDMEJFNkE1QjI1QTI1QjFERjIwRjlDQkMKKzoxMDYxMDAwMEVCMjREQTM3QTgxRkY0MDgzREYyNTI2RkZFODQ1ODJDQjYKKzoxMDYxMTAwMDI1MkI0ODJBQUJFQTk2QUQ1RTY4QUZFQUU0RkMzNDhBRTgKKzoxMDYxMjAwMDZGODRGRUE4NkVFM0ZBNjMxNDFGQjUwMTFDRTBBN0Q1QzcKKzoxMDYxMzAwMDIxNUZBOTMwRDBGQkE4NUY3RkNDQkEwOUZCN0Q3MTM2MDcKKzoxMDYxNDAwMDEzRjRFNjdBQTI0MENFODgxQTAwN0UxOTY2NEE5NDI1OTYKKzoxMDYxNTAwMDIzQzA2RTQ5RENERjUyRjVDQTZEM0I0MEQ1MDdBQzNCMkUKKzoxMDYxNjAwMEQzNkQ2NERBODA3NUVGMzg2MDA5ODI2Nzc5MTI4MkZBM0MKKzoxMDYxNzAwMDdGQTc1MzA5NkFCNzc5RDM4M0RBQjM0RjU5ODNFMERDMzkKKzoxMDYxODAwMERFMzk0MUZENjc5RkIxMDdDMTc3MEUxNDA1RjVGRkVFQkIKKzoxMDYxOTAwMEM1OTIyMDc4MzgwM0NFMzM5NkRGMjFDQTFGMjY0ODQxQTYKKzoxMDYxQTAwMEZEMTcyQUE2QTBGOThCRDNBMzgzRTA2MUIzQzA4RkYwQkIKKzoxMDYxQjAwMDAzNTVGRkY0QTI4REZCNDFBMUE1OEFERjFGNUI4M0Q3QTYKKzoxMDYxQzAwMDUxRTNFMjlGQ0MwOTVFNkZCMTNENzhCRDZGNEE5NzdEODgKKzoxMDYxRDAwMEUwRjc2QkMxQUYzRjAwRjYxMUNCREY4MkZGQUYwNUJGMjkKKzoxMDYxRTAwMEJFMERGQzdGODRGRjA1RkM3RjJDM0RFMEZGNjNGRDJCOTMKKzoxMDYxRjAwMEUwRkYyM0RDMEVGRTNGQzI0NzIwNUU0MUI4QjNCMTg4MEEKKzoxMDYyMDAwMENBQTM4RDI1NTQ3RjJCRkNGNTg4NzU0Rjg5NzU0RjhCNUMKKzoxMDYyMTAwMDc1RkY1QTNDQTlBNUIzNjg4NkU2MkI5MEQzNzkzMTk3RDAKKzoxMDYyMjAwMEY0QTg4N0VENkIwNjBBMzEwRjMwRjQ5NkNDNUE1MDQwMzMKKzoxMDYyMzAwMDFDRUU1MzhEQjE2ODhGMjYzMEY0NUI1OEM5RDBEQjFBNDEKKzoxMDYyNDAwMDg0M0I1MjJDNUIxNEI0NDNGRkZFMUVCNkZCREE2NTA1OUIKKzoxMDYyNTAwMEY1Rjk4OUNFOEYyMzcxOUVBQjVGODExQzY2RTNCODhGMDEKKzoxMDYyNjAwMDIzMzEzRUFFQkRDRTA4REUwMkVEMEFDMDBCMEY4MTYyQzcKKzoxMDYyNzAwMDIwN0YwNkY0MUFGNjRGNTU2MUI3OUU0MTU5RDI3NjQ4RjEKKzoxMDYyODAwMDhGRjRBODM5NzA4OERBREZGMkU4ODJEQjBGMzQwN0I1QzMKKzoxMDYyOTAwMDVCQjAzRjk0MzU1QTM3QzVGNzk3M0JENUY5QkNENEJGQUYKKzoxMDYyQTAwMDM2NTVCMkEzNUY3Q0Y5QzBCRkM3NTU2MEJGQjZGN0UzRjAKKzoxMDYyQjAwMDU2N0UwREJFM0YzQkYyNzIwNkVBNzUyN0Q4NjFBRkQ5MTQKKzoxMDYyQzAwMDNGOEZCMzRCMjc2MEJFRUZEQUQ0NDM4NTMxNjgwOERBREQKKzoxMDYyRDAwMDI0MzYwMzhBQUI2QzJCNUIwN0ZBQUVBNkIzQjUxNkY1NzIKKzoxMDYyRTAwMDUwNERGQTMyMUQ0QjI2N0QyNEYyMERBMDZERDE1RkMyQjgKKzoxMDYyRjAwMEUwMUVGMDc3RDVGMzc5RTQ0QTk4RjczNUNGQzlCQkVDQzcKKzoxMDYzMDAwMDQ4QkZFRTM3MjI3MUREQzE3NjM5Mjg5RTU5OTRDNUZEMEMKKzoxMDYzMTAwMEQ2NDU1OTdBQTJFM0Q1RjYzNzIyMTU2OERGRUM3OTgzQTIKKzoxMDYzMjAwMEUzNUJFQkE1NzM5RjEwRjAyMDk0ODRFNzRFOTlDRTVENUMKKzoxMDYzMzAwMEY1OTU4NkYwQUZDRTc3NEY5NjRDRjMyREVDOUMxMTgxRkUKKzoxMDYzNDAwMEU3RUFGM0YwRjU5NjY3MjkzNEZGQzJENDE1RTVCOEZGMDQKKzoxMDYzNTAwMEQzMDk0QjczNjVGMkYzNDAzMUEzNUVCREJEQjgxNUYzQUQKKzoxMDYzNjAwMDAzMzUxRUQ5M0U1NkJDQjU1QUNDREJBM0UzN0NGODU2QTgKKzoxMDYzNzAwMEVBRTE5RUM5QzAxRkE3OEIyNkQ4NDhFNzhCN0U1NTU5RjYKKzoxMDYzODAwMERDMUYyRkQ0M0I1MkQxMkVGNDk5OTUwOEU0RTM0NzhCQzAKKzoxMDYzOTAwMDUyMjI5MEFFMjdCMEM0RkFBMjNEN0EwNzk0RDVFRDdDODQKKzoxMDYzQTAwMEJEM0U0QjZGMjRGMjVCNUY3QkI2OEM3RThCM0FERjRBM0YKKzoxMDYzQjAwMEIxRUUwODVGOEZEMENENDU3NEFBNzQzNzlCNzExRTNGMzQKKzoxMDYzQzAwMEZENzhGREYyMkM5RTJGM0FFRDdFRkY1RUY0NTNGQUQyNUIKKzoxMDYzRDAwMEMzQUQ0ODk3MUUzREEzRjhCNjA2RTg4QUY2QTBBRjNCQ0EKKzoxMDYzRTAwMEIxMTlGMUEwQUVCNzNDNEJDNEM5RTkxQUEyQUJBRjUzODcKKzoxMDYzRjAwMDI3RkEyRDZCNjU0MUZENzhGQzdDNzU2RkYwN0UyQ0VFRTUKKzoxMDY0MDAwMDczQkY1OTg2NzZFOTA1RjBBQkExQkE1NkQ3MTA4N0U3NzYKKzoxMDY0MTAwMEZGNzQ1N0YwRkUyQTA1OUU2Qjc1REVCOEI4MDA3RUFEOUUKKzoxMDY0MjAwMEVEMUE5MTE3MzNGMTc3OTcyQTFGMEFEMTUzQTU2MzVGQUQKKzoxMDY0MzAwMDNBRjdEQkZBMTIwQzZFOEMxNzZCMEZCNTEyNUY4RkNFMkEKKzoxMDY0NDAwMEVGRjQyNkEzOUY5RkY4OTA5MUYyODZCNzhBNjc1NTNGOTUKKzoxMDY0NTAwMDIwMjBFRTYxMThDN0U5OEE1MjcyMzVEM0ZERjY3RUQwNEUKKzoxMDY0NjAwMDY2N0YzRTZCMjJDNjQzMjUxNEVGRjVCMUExMEEzNEZFQzgKKzoxMDY0NzAwMDRFRjQ4M0EzNTBFRkZFRjExOTVDNzdCODFERkMzRDU4MzQKKzoxMDY0ODAwMEQ3NjlFQzVDNzQxRUZDQUM2MTJCMDgwQUVDN0I3ODk3MzYKKzoxMDY0OTAwMENFMkRFMjEzMzNGQUE3MTVDMjNGRkQ1NDcxRTRDOTYwNTMKKzoxMDY0QTAwMDVGOURFQjM1NzRCRURBOEMzMEVFRDcwQTNERjlEOUExODkKKzoxMDY0QjAwMEU0OUYyMEJGRDY5RTkyMkQ0NkY0NDMyMTZFMjFCODhERDUKKzoxMDY0QzAwMEZCMDU3NTlFRTQ3RjlBOEJGRTc2OUI4RUZDMDBENUVGRDQKKzoxMDY0RDAwMDcwMEFCRkUzODJGMDY3MkZBQzFGRDI5M0JGN0E1QzYyNzEKKzoxMDY0RTAwMDRGQzEzRTJBM0JCN0Y1MjQ0MkJCMzM2MzExRjlBQjRFOTMKKzoxMDY0RjAwMEI5OERGMjhGQUI3NjA0RkIwNTU1RUU2MEI4RTY0MDMwRkYKKzoxMDY1MDAwMEVDMENGMTFCRDRCOEVENDRENjg4RkYzMDEzRTM4RjAyQjYKKzoxMDY1MTAwMDc5NkUzQ0NBQzEwNzgyOUU2QTNDQjI3Njk2MzUxRUU1MEEKKzoxMDY1MjAwMDdEQjM1NjU5QTRFNjAzMTA0RkY1QzcwRjU3RTE3RURENDIKKzoxMDY1MzAwMEI1NjE1NjhBMEJENjFEMjU3QzBFN0VDMUUzOEVDMTA0NDMKKzoxMDY1NDAwMEM2RkQyM0M2RjEzQUQ4QzlGOUJCNUUyN0YxMzgwM0Q4OTYKKzoxMDY1NTAwMDk1RTYzMzRBRUVGNUQwMzRFODFBOEUyNEJEQzQ1ODExQkUKKzoxMDY1NjAwMENBQzM5QUE1M0M4RUI0NjNDRTE1Q0ExNzg0NUUwQUI1MTkKKzoxMDY1NzAwMDk3REZENzBFQzhEMTAxRkFFMTdDMTZGNzM3RjNGNUNDRDcKKzoxMDY1ODAwMDgxNzY2QTZEODQ5NUVDRDYzNDIzRjdCNzBCMUVGNkQ4NjYKKzoxMDY1OTAwMDkwMEZBNjQxN0M2QzA4Qzg2NzRGMzMwRjQ5RDg2RkVGNDYKKzoxMDY1QTAwMDIzMTBFMjY2RkFFM0ZCQzU1QThCMkUzQUMwRUUzMUI2RjEKKzoxMDY1QjAwMDlFRkFBQkYzODMyNkUxRTM2RjM1QkYwNUU2MzdGQkU3RDEKKzoxMDY1QzAwMDA3N0M0NzIxQkUzRkNGQjE5MjNENEU1QUNDNTgyRkM5RDAKKzoxMDY1RDAwMDYzMDNDOUEzN0E5RUFCQzA2Nzk4OEZDNTlDMDlEMkFERUYKKzoxMDY1RTAwMDc2RDdFQjk0MDc3NkIyNUU4QTQ3MEEyM0Y5M0UwQTcxQTIKKzoxMDY1RjAwMDNGMDg4N0YxOTI2NTczN0NEOUIzQjlGRTU4OUIxRDZDMzcKKzoxMDY2MDAwMDk3QkJCMkVENTIzNjk0M0JCMjFEQkE2Q0QyNjcxNkUyMUMKKzoxMDY2MTAwMENCQjU4MjU3QzA0Rjg5MUYxODQzRUZBRTc5OTdDNzU1NDYKKzoxMDY2MjAwMDlGODMxQ0EwOUNERkRGMjAyOUE5NDE3RTEwRTdFRjdBMjEKKzoxMDY2MzAwMDVFQzVBRTMwNEZGRjVDQzQ4M0NCREU5QjFFODc3MTE0RkEKKzoxMDY2NDAwMDk3QUJFNUVCNEM0QTZBMDA5RkQ2MjM5RjAzNUUyQTJENDkKKzoxMDY2NTAwMDU1M0Y0MkJGREJCMTJFNEVDMTdDN0YzREYyRkQ3NDQ0RkQKKzoxMDY2NjAwMDIzRTdFQjU4Rjg4N0YxQzUyODNFRjcwNEMzRjBCNzBCRDIKKzoxMDY2NzAwMEY5QUI4RTE5QUM2ODQ3RUEzQjQzREJBRDVBQ0NFQkE0Q0YKKzoxMDY2ODAwMDY0ODMxQzg0RkJFNTIwNDlGMDY1QjM0MzcyQTNERTZGOEQKKzoxMDY2OTAwMEJFQTFFNTc5QUM1Mjg5RjI1NkY3NDAyNUYyMjVGRDYxOUQKKzoxMDY2QTAwMEJGQ0E3OTZFOUNGRjFFMDAzMTFFNjJEQjYzNDk2RUE4NzMKKzoxMDY2QjAwMDExRjRDOERGOEJGM0RFQTNGNUJFOEU3MjdDNTJFNzQ5N0UKKzoxMDY2QzAwMEM2N0NDQTQ5QTdEMThBRjMyRjY1RTA3MDgwN0UyOTY1MTAKKzoxMDY2RDAwMEJENTRGNjg3RDc3NTc4Njk3MkQ3NTQ4QzlCM0Y3MDE4NzQKKzoxMDY2RTAwMDI4OEZEM0JDQTEyNTAyRjU2OTI2REI2MEI5OTA4RUM2NDAKKzoxMDY2RjAwMDlEMURCODk5M0RCRTVGMDE4Q0M0MkVBODc0QTFCQ0QwNkQKKzoxMDY3MDAwMDU2MTE4NzcyQkFFRUM4QjZDRkNCQ0UxRDdGN0NDRDFGOTcKKzoxMDY3MTAwMDNBRUVDMjkwQTJFNjE3QURGQTc4Q0UzNkJERTk3OTdFQTAKKzoxMDY3MjAwMEZBRDUzMzRGM0FFRTU3QTVENzA4RkQ2MENGNTMwMDBGODcKKzoxMDY3MzAwMDRCRDg1MDFFQzYzNTJBREQ4Q0YwNkYyQ0JBQTlGODRDMDgKKzoxMDY3NDAwMEQyMERGRDE0NTEwNjc2ODlGNDRCMjgzRDU1RkNENkIxODcKKzoxMDY3NTAwMDA2MURDRjczMzVCQ0I3MTRGQURGQjc0MUEzQTA3RjM4NEQKKzoxMDY3NjAwMDhBQkVCN0EwODNEN0M0OUJCQzExMTJDNTlCRTNEMTQ1OTkKKzoxMDY3NzAwMEE1ODc0QTlGMzNEMTdDREM5OUZCNjVDQUQzRkQ1RkQzRTMKKzoxMDY3ODAwMEE1MkJEQkYxRDBEN0M5NjNBOEZDOEQyNzZGQ0JENzg1QUMKKzoxMDY3OTAwMEM4NjU4OEZDQTlGNDcyQUM4QjI0Mzk1M0U5NThBQjMwMzYKKzoxMDY3QTAwMDhBNUI2QkJCMjNBQzZFRTZBNzlGMTlGRTIxRkRGMDlFQjIKKzoxMDY3QjAwMDgyRjIzMUVEMTJEQjI5N0QxMzM5MUNBMDdCOEQ1MEZBNUEKKzoxMDY3QzAwMDAwNkZEODUxQUYzRjk1MUQ2Qzg3NTRCQThEQTc3RjU0ODkKKzoxMDY3RDAwMEZERjUyMUYzOUVCNDQ4NzQzRkMwRTVGMzk3MDYzN0RFMUMKKzoxMDY3RTAwMDJGQUFGNzAzRUEzREMwNjFBMUY3NDJDQjBGQzFFRkMwNkEKKzoxMDY3RjAwMDdCOTcyREU5N0QxM0QxNUZFQkQ3QUJGM0YwRkJDNzBGOTAKKzoxMDY4MDAwMEQ3Rjc0RTVEMERFMzNGOUNDN0NCN0VGNEQzMDI2MDdCOTAKKzoxMDY4MTAwMDE4Q0ZDMzdEMzhDOUUwNDJCQzdEMjhDRDlDOEY3NkZDNjMKKzoxMDY4MjAwMDQzRTlBMUJCMzgxQ0FGNTcxMDVFMUEzRkRGMDI3MEJGQUYKKzoxMDY4MzAwMDRFQ0REQjNEMkFGNEIwOUJFRjYzRTlFQzdDRUEyN0IxNTcKKzoxMDY4NDAwMDM3MTExRjhBQzQ0QTY4MUQ0OThBMjk4MkZEN0NGODhCNEEKKzoxMDY4NTAwMDE5NTk0RENDN0ZGRTk2NkNFRUNGQkE1NUZEQUVFNkIxMjAKKzoxMDY4NjAwMEZGNDFBMjNDRjY3MjMwMDExNkNDQjdDRjdGQjY2ODNBMzIKKzoxMDY4NzAwMEQ0OUZGREM3MTQxQkRERkZBRDA5NUUxRkVENjgzMkU1MzcKKzoxMDY4ODAwMDA3QjdEMTNDREZGRjZBNDhCNzIyQzNCRkFGMTFGQjk3MDAKKzoxMDY4OTAwMDdGOERENzk3Q0ZBMDc4QTI1MkQwRDAxRTMzOTNDN0IxQTcKKzoxMDY4QTAwMEVFOTQyOEI0NDdBQTdEMUEzRTc1RDgxQzk4QkZCQzA0NDQKKzoxMDY4QjAwMEY2OEJFOTAzRTA5OTRGMjYwNURBQjdEN0Y3RkQzQTBERDUKKzoxMDY4QzAwMEU3QTlENEJCMzJBRDE4NEYzNjNGOUY4NDdFNDBFNUJFNkEKKzoxMDY4RDAwMEM3RDNDODJGRERCNzM5MERFMzhCQ0E5NjVGQTdEOTA5OTcKKzoxMDY4RTAwMDBFNzc1MDdDQTNFNUU3QkU3MkYwQ0UzRDVCMDJGQ0UwODQKKzoxMDY4RjAwMEVBNUM5OUY2NUY2QTdDQkQwMEZERDM0NTc3N0NGNjE4QUIKKzoxMDY5MDAwMEU2QzM2N0ZDQTM0NDc5QjFGQjU5RUY2MzY4MzdDQkQyODgKKzoxMDY5MTAwMEI5MUNCMUVENDZEMkVCMzAxRkREM0JCNkNFRkNGMTVFQ0IKKzoxMDY5MjAwMEQ0RTdBN0QzM0ZENjk1NDNCRkVCRDk1QUMyNEYxOTczQ0IKKzoxMDY5MzAwMDNGMTE4RkY5QjA0RDEyRTVDM0ZDRkRBN0QyM0RFNjhBQTkKKzoxMDY5NDAwMDBEOTIzRTIxMTZFRDYxQjQ0RDU2NzA1QzM0RURFMzgxM0QKKzoxMDY5NTAwMDREQjYxRUFDMkY3Qjk4RDcyRjMyQjhEQkZCNzA5RTY3RUQKKzoxMDY5NjAwMEY1RDY1NjA1MjcyQTk5NUUxMjcwMkY3QzNEOUJDNzVEOTAKKzoxMDY5NzAwMENCOUY5MEM4MUY1N0Q3OTlGMTRDNUM3M0UwMzlBRjBCOTAKKzoxMDY5ODAwMEZBQjMxQkZGNDZGQUVEMjc4MjJFM0Y3QUY4RkQzNzEzNDQKKzoxMDY5OTAwMDE0QkM0RjcyREM0NDNERjJERUQzMTc1MjUxN0ZFNUM3ODEKKzoxMDY5QTAwMDVDQ0E0MDNFOUZBMTc3RUNBQ0MyNzNCNzE4Mjg3Rjk4QjEKKzoxMDY5QjAwMDkzOTkyOEM3NDNGRkFDOUZDRjdCMEFDQkU1MEZBRkQ4OTUKKzoxMDY5QzAwMDU5ODU3OUQwMUQ0NjhBQTNENEZEQUQ5MTE0MERDNjlCN0YKKzoxMDY5RDAwMDZGMzRGRkVDMDFDNERCQzVBNzhERTQ0N0FGNjlCRTJENjIKKzoxMDY5RTAwMDlFOEQyMUE3NkFCOTFGRThBRkE0MzFGNjUyQTM5MUNBQzAKKzoxMDY5RjAwMDk3MUIyRDRDODEyMzFFNkM0QzIwRjg1RjFCMTUyQUQ5NDgKKzoxMDZBMDAwMDEyQ0U1RjZCNDRCQzNBREU3Q0Q5MTBFRjJCQTBBRjcyODQKKzoxMDZBMTAwMDM2QzE3Q0UwNkZEQTRDRjZDOTM5ODBBRjE5QjczQjVCMDEKKzoxMDZBMjAwMDM2OEI3M0NEODBGMTM2NTdGMjAyQzQ0M0NFRTZENTNEQTYKKzoxMDZBMzAwMEU4OEFFQTczNzg3Q0Y0NzZERkE2MjRGMkEzMUYzRUI3RDcKKzoxMDZBNDAwMEJCMEFEQTE3RTc5NEE0RTA3OEUzQUU2QjE0RTdCRkQxOTIKKzoxMDZBNTAwMEY1NzgxOUU1RjU1QjBDRkM3Q0UyREMxNzlGNEU4QkRGQ0IKKzoxMDZBNjAwMDg5NzlEN0I3NzQxNDdGRDdFRjNBQjc3QjMzOTQyQjlGQ0MKKzoxMDZBNzAwMDU4QUQwRkU0Rjc2RjdBREU2NEIxOUY1QkM5RDU3ODc4QzMKKzoxMDZBODAwMEY4RjY3MkY1RUIyNDkyOUYxNjkwQUI4Q0JGNUVBRUVBREYKKzoxMDZBOTAwMDFGNUU0RkY4N0IyOEE3NjQ1MTBFRUNGRkEyQ0U5NTg0QjEKKzoxMDZBQTAwMEYyNzQ3MUU2Rjc4OENGNURDNzI1QzJCRkFBQzdENUYxREEKKzoxMDZBQjAwMDQ1RTJCQzM1MUFDRjEzRTQwRjBBM0RGRTI1NDQ3RTg4MUIKKzoxMDZBQzAwMERGRDdCQjNFNEQ0MzdGRjhDQkNFQTU1RjdCRUUyMzhENUEKKzoxMDZBRDAwMDc4ODM4RTc5MkQyMzk1QTFFRDc5N0E0NzhBMTVDRTk3MDMKKzoxMDZBRTAwMEE3RTE3RUYwMjhGRjU1RENDRkE5RjdFREY4ODc3OUUxMjMKKzoxMDZBRjAwMDVBNjEzRjlEQjBCMUE4MThCNDdGOTIzNzJDMTNFRjM5N0IKKzoxMDZCMDAwMDdFNzg0OThCRjExN0M0NzUxRjA1RkI5N0VDQTMwMDNCRkEKKzoxMDZCMTAwMDNFREU3RTZGNTVENkUxM0M1QUJGREU5RDdENDZDM0JDNEUKKzoxMDZCMjAwMDAxNzZGQkNFODEzMEU2MEQ1ODc3MjRFRTMwMjI0RjQzQkMKKzoxMDZCMzAwMDFDREEzNTg5RjQwMkQyMERFRjY1N0M1RDMzNUIxMEJFNDMKKzoxMDZCNDAwMEE0RTc3NEY0MUQ4MUY4OEFFNzU1OTg5Q0U3M0ZFN0E1MTAKKzoxMDZCNTAwMEFFMkI5OUE4Njc0M0NGNUI3N0Y0MEFGMTQ3NkRFN0UzNjMKKzoxMDZCNjAwMEQ3MjQzQUZGQzI0QkRBQ0M1QjlGRkZGNTdENTczMjkxQjkKKzoxMDZCNzAwMDdFOTc3NDAzNzkxODQ3RjlGNDAzOTk0ODg3QkE2MzVDRTAKKzoxMDZCODAwMDlGN0Y1QjNDQThGNTU1OUJGNDNDQkYyNzU5MjgxRTJDRTIKKzoxMDZCOTAwMDkwQUY1MjFDRUYzQkM1RTNGOEJBQUUzREE0NEY4N0JCQTQKKzoxMDZCQTAwMDc5M0VBNTVFRDM1QjE4OEZGOTg3ODY3MzNEQThDRjg2QTMKKzoxMDZCQjAwMDEzNzg3QzA1RjNEQjExNkY3MzUzODQxREQ0MEUyNTJERTAKKzoxMDZCQzAwMDA2QkRGNkNBMDgzRkYwQjhFRTIyQ0FBRjFFRTdGMUQ0MDAKKzoxMDZCRDAwMEQyN0JBNENDNzA4NjdFQzU2NTk0NjdBODJGNUI5N0JDREEKKzoxMDZCRTAwMDExRjlGQ0EyN0IyMjY2ODJEOERCOTlGRjUzNDdGOUI3RTMKKzoxMDZCRjAwMEQ3QzIyRDMyRjlBRDUwMUI0MEJGOTE3M0I4NjVGRTcwRkUKKzoxMDZDMDAwMDg2QTk3MTdBMzhCMzA3RjRBQkQ3MkIzRkExRjhGODM0RDMKKzoxMDZDMTAwMEJGMjdBQkJGOURDQjEzM0JDQUU1QzlCOUUxNzU3RDQyMjgKKzoxMDZDMjAwMEMwN0NCQjUxOUU2OERGREM3RjVDRjREQUZGOTA1Qzc2NTEKKzoxMDZDMzAwMERCRUNERDI4OTdFMUE4MEI3MUJFODQyOEI3MjQ4OTdFQTAKKzoxMDZDNDAwMDc5RkU3QjQwNzNCNzg4Qzc4QjY0NkFBRkVGOTREOTI0MTEKKzoxMDZDNTAwMDFDOTMxMDQxRjdGNTQ1NkNBQjE2RkRERDQ1Q0MzMzk3MjEKKzoxMDZDNjAwMEJGOTMxOUY4Q0Q3N0ExQkRGODM1MzkxQkRGNjM4MUZGREMKKzoxMDZDNzAwMDRDRjdDNzg1NjE4RUQ0MzVFODFGNjkyNDgxNTc0RkNFMDQKKzoxMDZDODAwMEUyNDA3QjI2REU3OUNDOTUyNUIyNjM0MzkzQzJDOTRGOUYKKzoxMDZDOTAwMDU5QjhDNDU5OEFGQjFERDEwRjVBREUwRkU2MjEzRjhCMkMKKzoxMDZDQTAwMEI5ODczMkYxM0U5Mzc5ODczMkYxOUU1M0VENzdFRjZCREUKKzoxMDZDQjAwMEUxMEQ2NDE3OTkyN0U3REU4MDc1QzI3MkI5RERGQzFDMEYKKzoxMDZDQzAwMEVGOUY0MTlGRDQ4QkZCQ0YwMkY5QzYzMzE4NDdBRDM5RjQKKzoxMDZDRDAwMENFRUYwOUZCMzVDOTFGRTA3QjJEMTdFMDE5RTk3QTA1RDYKKzoxMDZDRTAwMEU4NkE0N0ZCRTM2MDc2M0JDQUNGQUM4OTZFOTQ5RkZBQjMKKzoxMDZDRjAwMDgzMTJDMzc3NkI3NTVEODYxNkNDRUJENEU5MDZFMjkwMDAKKzoxMDZEMDAwMDlGMzc3N0ZFNDE4RkZDNUNERkYxQkU1RTk5ODVFMzc5QUEKKzoxMDZEMTAwMDFFMDhGQzc1MERFMkI3NUVEODJGNjdFNzZEMUY2MERFQjkKKzoxMDZEMjAwMENENzk4QTVCNTFBN0Y2N0Q4QUVCNkJEQTBGNTFGQzVFNTkKKzoxMDZEMzAwMENCQkMxNEJGRDdCNjA1RjNDQjcwMDJDRkIzODdDQTQ3MUQKKzoxMDZENDAwMDU4QUU0MkZBNTI4NTE3RUVFMDcyNzFBRkNDMUEyOERFQzcKKzoxMDZENTAwMDE3NzlEMzg1MDlGMUU0OEZGOEM3MDkzRjUxQkVGMjE4QkUKKzoxMDZENjAwMEZBMkY4M0QzMjVBQjA0NTMwRDg2QjkzNkEwNUZFNDRBQ0UKKzoxMDZENzAwMEUzRkVDQ0UwRUY1RUNFQTkyMEJERTJDRUY5MjlCRThCQ0EKKzoxMDZEODAwMDExRkVFRUMyNEREQkI0NzJDMDdFMTY3NkYzM0NFMTYwQkMKKzoxMDZEOTAwMDE4QUIzQzQyRjQ3NjRDNDEzQTQ0NjY5NTk4NzM3MzQ5N0IKKzoxMDZEQTAwMEFFMzJFOTlEOEY4NkU3MzU0M0NGRjFBNEM4Njc5RUM2MTIKKzoxMDZEQjAwMDNDNEY4NjdGREZDNTg5ODk1QzhGMzEzN0YxNEY4Rjg2RTUKKzoxMDZEQzAwMEFGQUZCRTdCNTFDN0FGQzg5NTgyRTJBNTM1MTJDRjRGOUEKKzoxMDZERDAwMDhEQTc1N0YwMUVBNTVDRENBMzk0OEI3Qjk0NzI3MThGRkEKKzoxMDZERTAwMDUyMkVFRTUxQ0FDNTNENEFCOUI4NDcyOTE3RjcyOEU1RDIKKzoxMDZERjAwMEUyMUVBNTVDRENBMzk0OEI3QjE0QUMzRjhENUJBNUY3RjYKKzoxMDZFMDAwMDcwQ0ZFRjQ0RkJEOTgzMzIzNkQ5MEZGN0M3ODRDMDkzRDQKKzoxMDZFMTAwMDgzRkJGN0M3NDhDMUYwNjQ4OUZBRTdFNDNFQkZEMzk1MjYKKzoxMDZFMjAwMDgxNzk0QzhCOTA2RjI1MDJGREFGOEIyNjlFNUZFQThBOUQKKzoxMDZFMzAwMDcwRkMxREUyQjk3QzYxRDMzRUZFMUVEMTRFRUY1OUYyQ0IKKzoxMDZFNDAwMDYzOTY5NkEyN0MwREM3MUExOEVBQTE4NjVDQzdCQzVDNDMKKzoxMDZFNTAwMEEwRkJBOTUzMEI1MkI3OTE3RTM0NTlGMTlFQkJGRkJFRTQKKzoxMDZFNjAwMDNCQTIyODJGRjc5NkNDNjQ1ODcyNUU3QUY2ODYxQzgwNzcKKzoxMDZFNzAwMEU3OTkyNUUyNUJEMDEzREYyOTUxRTM0OTk4Njc0MTM3NTEKKzoxMDZFODAwMEJGQ0YyODkwNkJDQjcxRkUzNTkzNENEOUE4Nzc4N0IyRDIKKzoxMDZFOTAwMDFDQzVCOTAxRkM1ODM4Nzk1NTJBRkE0MTNEM0FFNTAzMzkKKzoxMDZFQTAwMENDQTdCQURFRDUzMThDQTNENEZDOUJEQUFGMjc2QkRFM0UKKzoxMDZFQjAwMDUyMUNCNzMwM0Q2NTQzMTZFQTFCMTAyRUQ0NkY3NjNENDkKKzoxMDZFQzAwMDZCQzM3REQ5MzVFMTUyMTNFOTJCNDU4QkYyQkY1NEYwRUEKKzoxMDZFRDAwMEVGN0M4NUZCQzM1RUJEQTI4REMxQjgzRDZDNUVBQzRCNDMKKzoxMDZFRTAwMEUxRjc1NUU1RTJCRUFBNUNEQzU3MjE3RERFQzFCQzE5QTUKKzoxMDZFRjAwMDk0RUY0MTNEOTZCRDUwOEY2NUU4N0JBRTY3NzI0QTU2NzAKKzoxMDZGMDAwMEU2NTJCQzNEOTQxNEY4MUU2QzExQ0ExNUQ3MzM0OUM4MUIKKzoxMDZGMTAwMENGM0IwNURGMjYwODNERDM5MzVENTI0REZDQ0UzQzM0N0MKKzoxMDZGMjAwMDRGOERDOEJGNUREMTA1REZFM0E5RTNGQ0UzMTk5NTc3NzkKKzoxMDZGMzAwMDdGODdFQjY3MTZBNUU3RUY1REE3MzAxN0JFQTdCREZCMDAKKzoxMDZGNDAwMEQ1NDk5NDRGRjJCOTM1MkU1RDE0QzAyMEUzQThCRkQ4QkYKKzoxMDZGNTAwMEFCM0NCRTY1MDk1QzVFRUUzRTFDNEZGRDlBNDQxRUQ0MDAKKzoxMDZGNjAwMDE5RDM5QjE2ODM3NjU3Qzg5NTBBMUZGOTBCN0ZFN0UzNjEKKzoxMDZGNzAwMENDMDIxOENBNjMxMjNGOUZGM0VFREVCNDY4ODA3RDkyQTQKKzoxMDZGODAwMDQ5ODNGOTcxNjcwQjZGRUYxMzcyRTc5QzJFRTYxM0U3RTUKKzoxMDZGOTAwMDYxNDY0RjEyRDI2M0YwRjhBQjQ5MEYwMEJDQzVFQ0FEQUYKKzoxMDZGQTAwMEUwRkFERTlCNDY3QTlBNzlEM0YwQkREMDE1Qzk3MzE2MDQKKzoxMDZGQjAwMERGREJBRTNBOTJCNTBDREZENzVFRDE3OTc2MjM1QzczMTYKKzoxMDZGQzAwMDI0ODdDM0QyQTFCMzk2QzBGNjg5OUUyNDdDOEZCQkVBRTYKKzoxMDZGRDAwMDQ4RjYzMjdDOUY3QjY1RTJBMURERDFENjAwNThGN0NBMjYKKzoxMDZGRTAwMDU5NkNENzNGOUFCMzJDMUZFMDYyODNGQjU0MjNGMkNEMzgKKzoxMDZGRjAwMEJGNzJGRTMyMURFQ0I4ODBGOEE5RTlFMkZFRkFGQzgzMEMKKzoxMDcwMDAwMDFENTc1RjQxN0JEQzExNDFGN0Y1MDc3MjkzODlERTREMTcKKzoxMDcwMTAwMDVERkI5RjQwN0VGMzFERDI5MTFDNkM2OUZCQzNFRTVGNEMKKzoxMDcwMjAwMDUxM0YwM0E1NTE4QTBEOUUxQzRDQjkzNEU0RkRDNzdEMjgKKzoxMDcwMzAwMEI4NkU3MUI4RTcwQjg0RDdFN0ZEODBGNjUxM0M4MUNCODEKKzoxMDcwNDAwMEYzQzZCQ0Y5Q0I1MDNFN0QxRDA3N0Y4OUYyNTcxQzA1NjYKKzoxMDcwNTAwMDhFMkNFRUU3NjUxM0QxQTdGQUYwQ0M3Q0NDMDNGODIyOTYKKzoxMDcwNjAwMDdBQ0I3MEZFQkFERjFBQUNDOEE3RDU4N0UzRTc2MzVFQjgKKzoxMDcwNzAwMEEwMjM5N0U3QTdBQjZFREY5QTg0RjY1NTczRjRBNTdEM0UKKzoxMDcwODAwMEJGQzIzQ0U1NkY0RDc0M0Y1MzFGQzNGREJCNkFCOTM5QTYKKzoxMDcwOTAwMDZGMzVEMTZGQ0YzRTdDMzdFMjdCQzk0NEY3QTQ1NTMwQzIKKzoxMDcwQTAwMDA3QUU1N0I1NkYwNkU1RDU4RkZERjlFMzMyQTQ0MzgxRUUKKzoxMDcwQjAwMEJDNkIxRkQ2N0ZCMUQ3QTQ0MTNDRjRFOUVENTFERjQzNEYKKzoxMDcwQzAwMDM5RUNEMzUxOUM1OTI1RTBBQUZFMDk3QzNGRTEwMzg1QTgKKzoxMDcwRDAwMDQ0QkZEOEFENDk2ODVGQUIyN0ZDQzM1REI4RUY2Mjc5QTgKKzoxMDcwRTAwMEVCNkU4QzczRDg3RTAzREQxNTVDN0EwOUYwMDZFMzJFMTcKKzoxMDcwRjAwMEI1RUFFODk1QUFFRkE1MDgyREYyQ0IxNTY5NkJEOTRFMzQKKzoxMDcxMDAwMDlDQkY5NUY3QkI2MkRBNEFGODc0QjVERUM2NzAzREU4RkQKKzoxMDcxMTAwMEM3NTA1RjVEOTFCNjA1RDU1RjZBREQ5Rjg5NzFFOEU1NkYKKzoxMDcxMjAwMERGMTY1MzNDQUFGMkY5NDg5Q0IxRDcxMDY0MEY0OTEzRkIKKzoxMDcxMzAwMEM0ODlGNzEyNjQ2NjVEQ0MwQzc2QjY0QTgwOTc4RjNDQTIKKzoxMDcxNDAwMEU3REJDOUZDRTMyRkI3RTlCQzdBQzA1MTk1ODE2REMwN0MKKzoxMDcxNTAwMEY3QzFBQTNDNTQyN0ZFQjAwOENGNTdBRDY5NEU0MzdGMTQKKzoxMDcxNjAwMEE1MkE3QkEwMENFNUUyOTI4OTE5MTNBMERGREJDMjVFQTEKKzoxMDcxNzAwMDU1QjdBRjVGOEM3RUVGNzhGQkY5OEJCMDNGNUYwQTM5NzQKKzoxMDcxODAwMEZDQjJEM0U0MEVCQzFGMEMyREZGRDhDODk0NzcwMkRFRUUKKzoxMDcxOTAwMDBEREZERjYwMjBERjVEOURFRjZEQkRBNzE2RTNCM0JBQTUKKzoxMDcxQTAwMDE4QUUzRkNFNDJGRjM2RDA2MzM3ODRERTVCQkUyRUI4Q0EKKzoxMDcxQjAwMEZGQjVEQzE4RkUyRTU1M0Y5MDg2NzY0RjlEREY5N0FCQ0UKKzoxMDcxQzAwMEVBQjU4MTM0RDQ1N0ExRTM4QTY1QTE2RjVFOTY0OERGQTIKKzoxMDcxRDAwMDU0Qjc0QkU3NjRDMDUzQjVEMUU1QzZGNzNCRDUxODRDNUYKKzoxMDcxRTAwMEYyNzM2QTZGNEE3QzVDNDI5RUMwM0I4QzdEM0MyRjk5NTcKKzoxMDcxRjAwMENFNURERDY2QjI5QjYwNUM0REQ4NDAyNEZBNDNCNTExOEMKKzoxMDcyMDAwMDAzOTFFOEU3Rjg4RUNBQUM0NTkwMkIzNjRFRDA2N0JBQUEKKzoxMDcyMTAwMDIwNTk0MERFQjFDQUEzQjM5QjMyQzdBMDMzRkE0REY4NjAKKzoxMDcyMjAwMDNFMDdGRjFCRDZERjk1Mzc5REQ2QUJFQzBDQTdGNTk4MzQKKzoxMDcyMzAwMDY1MjAwRkY5QjQ3MjU3RjAzODNDOTcyNTQwRkU3QzlEQ0QKKzoxMDcyNDAwMDdCRTIwMkUzRjE2NEIxRUY0MUU5MUNDOUM5RTA5RjNGNzEKKzoxMDcyNTAwMDRBNDJCQTU3NkJEODA2QkM0N0JDMkNGMUVGMUUwMEE2QjkKKzoxMDcyNjAwMEVGMUUyRThCRkJDOEVBM0Y5OUMzOTA1RjJFN0Y1OTRCRDAKKzoxMDcyNzAwMDcyRUI5MzA2NDhBRkJEN0JBNDg0RjQ4MTRGMzc0MDdBMEMKKzoxMDcyODAwMEVENDRERUJEQTRDNzdDRDEwMzY1QThBN0RFM0Q1MkMxOTUKKzoxMDcyOTAwMERCMjcwRDk0MjlEMERFODYzMEI2NEY2NTY0RUZGRjJCRDcKKzoxMDcyQTAwMENGNDlGQUEzNThFNkVGMUJEODFFOUQ4NUU3ODEzNkY1MzYKKzoxMDcyQjAwMDM3NTI1Q0ExNTMwMkUzRUUzRkU2QTlGNzM2N0FGRkI5RjUKKzoxMDcyQzAwMDY1QkZEQ0Y4OTg3MkIwMURFNUIwRDI0Q0Y5MUNGMDlGOTgKKzoxMDcyRDAwMERBNUU0MTNGNkY2OTlDMTVGM0UyOTUzODhFRjM4MTNFOEIKKzoxMDcyRTAwMEYwRkUyRjM2RTY3QTA1RDI2NzU5OTRBMzIwMkYxN0VGQzgKKzoxMDcyRjAwMDE5MDcyODdFMDBBRTI2M0ZCREVFNzcwNjhBMjMwNzc1NjQKKzoxMDczMDAwMDQzRkI1MDRGNjU0NjM5MTZFNjAxN0ZENUVBN0IzN0EyMkQKKzoxMDczMTAwMDRCN0Y1NTM3RDA4M0Y3N0U4QjY0QUU4RkQ4N0VDRTU3QTgKKzoxMDczMjAwMEJFOEMzREZDM0IwOTcxN0ZCODU0RTAxRkVDMTY2QjQ2RTgKKzoxMDczMzAwMEJFOTAzODdEREZFODNDRkMwRUVBMTU1RjZGMEFFOUUzOUEKKzoxMDczNDAwMDUwQjlCOUQ0Rjk1NDI0RUE4NzMzNjBDNzVEMDE3MUZFOUUKKzoxMDczNTAwMDk5MTVGQkU5OUU3RTA5QkVDQjgwRjI4MTBEQzFGQzMwMDAKKzoxMDczNjAwMDdDRTNBNzE0RUZCMTI3MDJFQTkxMEZCNzA3QzNBMTdDMTIKKzoxMDczNzAwMDg0RkNFODBERDIzQjJFOTJBNzY3NzNCOTFGNTYzM0JGMkEKKzoxMDczODAwMEI3MEVGMTMwMDJERjBEQjAxQzAwOUYwODgxNDNGQUIzNDUKKzoxMDczOTAwMDEyRUUyNzNDOEJGRjhENzg5Q0VBRURBN0Y4RkMyMDdGNEUKKzoxMDczQTAwMDE3REIwNEY2OEJFMDhFNzBCQTM3RDYxQzA0RkIxNENCQzcKKzoxMDczQjAwMEVEMTNEQTg1OUFDODVFQ0E0QkY5M0EwQzc0M0ZGMjY4NEQKKzoxMDczQzAwMEQ3QTdGNDlFMTFGODkwRjIyRjM1NURBRkM2NjFEQzdFMzEKKzoxMDczRDAwMDAwRTM4NDVDQjI4MzcxRjQ0RUE1QTMyQjBFRTMwREI1REMKKzoxMDczRTAwMEJFNTZFMzQ5MTNFRkYxQzk0RjU3RUI5REIyMzcwREY3ODYKKzoxMDczRjAwMDVGMjNGNTY2NjJGQjAxQjFFRjVBMERDMDMyQzI2MkRGNTYKKzoxMDc0MDAwMDEyOTc3N0Q2MjU5MzNFMEZBNURCMEVDMUFGQTAxNzMyOUEKKzoxMDc0MTAwMEU5OURDNTUxOUUxNzUwRjU0MDk1RDAyNzI3QjAzRTgzNzIKKzoxMDc0MjAwMENCQkQ0NUJENTc5MkYwQkQ1Q0Y4OThGQTIxM0U0RkU4QzAKKzoxMDc0MzAwMDM3RDY0MDc5OUJFRDc5N0NERkVBNzg5QTk3RTc5NUE4NzMKKzoxMDc0NDAwMEJERUVEODk1Q0NFOTE5Mzg0RTE5NzkwNzM5QTI4NzUyODMKKzoxMDc0NTAwMEZDN0EwNUU1M0Y4MUU0RkY1MTVEMUM5Q0FCN0FCNzY0ODMKKzoxMDc0NjAwMDZENDIzRDU1QkFCRTEwQkFCMzU1REFENTg1OTQyRjEzODcKKzoxMDc0NzAwMEVGM0Y0M0Y3MTVDQTQ3NTZEODBCRTk0OTRENzQ0MTZDQTUKKzoxMDc0ODAwMEMwN0M5NzIxNUM0RkM4MjIzRDQzRUZFODFGOEM3REIyNDIKKzoxMDc0OTAwMDEwRjMxMzNGMkJERDQ2RkMzQzYyNkYwMkU1MUNDRkIzQkIKKzoxMDc0QTAwMDhCRUI3MTE0OUI5QjlBRDE3Q0JDQUFBMTc5NjNGQzE4Q0QKKzoxMDc0QjAwMEZCMDhERDY3OTVBM0I5MzA0RTE5NURBRkVFRjdCMjQ5MTEKKzoxMDc0QzAwMEREREY3Q0REQzQ0MDNDMkM1OTVGMzgxMUNBNTVDNkJGOTYKKzoxMDc0RDAwMDE2MEZGQ0JDOTdCQjBDNUVCNEFCNTVBNUFCMzc0NjhEMDUKKzoxMDc0RTAwMEMxMzdBM0VDQzFBRTAwRkIzNTFERTlFQkE2N0I4REYxRTYKKzoxMDc0RjAwMEY2MUY1QUQ2NEFERTdFQ0MxMzMxOTBBQjU2OTIyRjkwQUYKKzoxMDc1MDAwMDk3MDBCQjMwMjcyRjI0REY1MEI5NjIxQUM2OURDQ0IxM0IKKzoxMDc1MTAwMDYyMUFEQTE5OTBBQjMyRUIxODcxMjU3RTU5QTJBMUI3MjUKKzoxMDc1MjAwMDFCMkUyQTQzRjc3MzNFOEZFNzQ5RTdFNDcxNzlFOUI2RUEKKzoxMDc1MzAwMEQ5N0RBODM3QzdGQkRFRTJCRkM1M0VDNkZCREUyMjUxQzAKKzoxMDc1NDAwMDMzRkMxRUNBNUI2MjVDODQ4MkY3NDAwNTBCQzI3OUJGQzQKKzoxMDc1NTAwMEUzMjYwQkU2NkQwNjhGNUZBN0JDRUVFMDYzRTYyNUZDMzUKKzoxMDc1NjAwMEJFQzBDQzI2NDE3QjRGQzJBQzk2NDAzQkIyNzUzNjVGNjUKKzoxMDc1NzAwMDI3M0M4N0ZCMkRGNUU5QkFBRkNGMEI2NTQ0OENFNDg1M0EKKzoxMDc1ODAwMEM4NkZDODA4QTc3QjEyNUZFN0U3NjRCNzA2QkI3MzJEMTcKKzoxMDc1OTAwMDc4OUZFMUVCODVFODEwRTRBOUZFQ0ZGRjFEODdGNkQ1QzMKKzoxMDc1QTAwMEQ3RkQwOUJEMDdGM0RERjg5NERFODk2RDE2RUZGNDRFQzMKKzoxMDc1QjAwMDc0OEE3NzU2QkQ0QTA0N0QxNzU3RjQ3MTIxRjZEQjIyOTEKKzoxMDc1QzAwMDRBN0Y3RTgwRTc4OUQ1NTI4REZGMDNFMkRGQzlCM0M3Q0EKKzoxMDc1RDAwMDhFN0Y2MzFDRTZDMEJDODAxMjNGNTYxRTI1MzAyRjkwNjQKKzoxMDc1RTAwMEFBRTU3OTAxMkMzMTJGOTA5QUNBRjMwMjA4NjM1RTAwNTQKKzoxMDc1RjAwMDRCQ0MwQjYwM0RFNjA1MTBDNkJDMDBDMjk4MTc0MDE4ODYKKzoxMDc2MDAwMEYzMDI1ODYyNUUwMEVCQkYxMERGM0YwQzgyNjJFMkY5Q0EKKzoxMDc2MTAwMDRBMzNFOUY1QjVGOEJFMURGMEI3RjYzOEJGNzc1QURCNDcKKzoxMDc2MjAwMDJBRDNGRDJEN0VGRjgwRjY2REQ0QkI5OTc2RjE2RUM2MTAKKzoxMDc2MzAwMEIzOERFRUYxRUEzQjY0MkI5MkE4NUUzNzc0MTJGMzM4RjcKKzoxMDc2NDAwMEY1ODcyNEVCN0FENDJCOEQ0QjY4RkRDREREQjkxRjk0RTMKKzoxMDc2NTAwMDYyN0RBQkNFQUE1MTg4OEYzODFEOUIyNTdBQTc1RkRENEUKKzoxMDc2NjAwMERENEE3OUE3RkNGOEUzN0FBQTZGOTMxOEU2NDlFRjM1NkIKKzoxMDc2NzAwMEYwMzhENzI5NDM2RDE2REQ4MzkyMUZFQzM0RjQ1MkZDQTkKKzoxMDc2ODAwMDUxNzM0MDUyQ0EwM0RGNjlDQ0I5NDY3QTQwQkQ0RkFFNTAKKzoxMDc2OTAwMEUwNERDQ0U5MzEyOUU1NjNCQzAzMTk3OTc3MkVERTRENDUKKzoxMDc2QTAwMDU3RTAzRDMzQkUxNzk3NkZEMEJCN0UyNzA0QTQxMzkwREQKKzoxMDc2QjAwMDBGNzdGMEY3Q0YxNkY4NDdGMjFFRjJBRUE5QkFGQkQwNUIKKzoxMDc2QzAwMDQ2N0MwRjE1N0FERjNDRjIzRDVEQzhCRDczRDk2QzcxMDUKKzoxMDc2RDAwMEFGNkNFM0RGNTcxNDNENUQ3RUIwMDNENjFCREU2QTIwM0UKKzoxMDc2RTAwMDdGQTMyMUQ3RjEyMEYyRDE0OTlEOURGMjIzMjc4RjlCQzMKKzoxMDc2RjAwMDI4MkUzQUJGRURCNkEwRkNDODUwOTZBMzdBMzZFNTlCN0IKKzoxMDc3MDAwMEE2NTBCRTYyOEQ0RTIyN0JCQ0EwMjgyNTFFRjFCOEUwOUIKKzoxMDc3MTAwMDk0OEVFQzRFNEY1NjQ5MkRGNjVCMzM0QkExN0M1NDgxMzEKKzoxMDc3MjAwMDgxRkQ4MkU2MTFFRkE1NTQ3QTE0MzQ0OTZFMERDMDJCMDkKKzoxMDc3MzAwMDk4OTVERUQ5MkYwNzM0NjFCRTcyNTA2N0RFODRFRjlBQzgKKzoxMDc3NDAwMDk2MzNGRUNFNDFFNTlCMzVEQjI0RTIxQjRDMTAyMDNFRjgKKzoxMDc3NTAwMENCMDQzRTk3NzdGRkZFM0FCRTYzNTg2OUUwN0U2QkEyOEEKKzoxMDc3NjAwMDg2REY1RjI3NkVFMUVGMTkxRTY0MEUzRERBRDk1NUM4M0EKKzoxMDc3NzAwMDVEMzJEOUM3REYwRDQwQkQyMzdDNEExMkY3Q0I5NTc4MjcKKzoxMDc3ODAwMDlDN0ZDNTY5MURCREI3MkQ4OEZGNzE5QTgzRUM3NDNFM0YKKzoxMDc3OTAwMEJENjM5MEJDQ0JFNDlCNzc4QzJGM0ZBMUVGMTg0RUVBRTIKKzoxMDc3QTAwMEI4NUUwMTNDNTIzQ0Q0ODM3QzQ5NzkxOTA3OTVBNzFCRUMKKzoxMDc3QjAwMDJCQTlBQzEzREY0MzhDN0VGRjNGNzQxNkUzQzRDNEY4REYKKzoxMDc3QzAwMDA4MkJFQUI5NzFCRjc3MEJGQkZBRUZCRDc2OEFGNzZCMkUKKzoxMDc3RDAwMDg5OUFCRTZDMDVGMUYxMjdCMzE1RjFBMUJFMTNFQ0I2ODEKKzoxMDc3RTAwMDk1MzQyMzlERUM5MUNDNjVBMUVGQzE0MDAzMDI1RTBCNjMKKzoxMDc3RjAwMEYxMjAxMkU2QjUzRDc2RkNFRTY4RThCODY0QTE3N0M5RTEKKzoxMDc4MDAwMEEzRjRFM0I2QzdGMDlENDg3REFBNjQ5MTE0Q0M3RjZGQzIKKzoxMDc4MTAwMDJEODg4MzdEMTc0RTRGQTY3REQ3NzdGMkZDMjg2MTI4RUYKKzoxMDc4MjAwMDBFRjNFNzlDNUU5MTU5OEVDM0IzNzNGREY1QzU0MjZFQUUKKzoxMDc4MzAwMDdDRDA5RkYzQzk3N0REQzg2RkRGMjA2RkJBMTdGQkJCMjEKKzoxMDc4NDAwMDk4ODlCRUE3QTYzRkQ4NEZGMTFENTMyOTdGQUFGMkNEMzQKKzoxMDc4NTAwMDcwNUI3QzBCRjJDREVGNjdGMzM4QjJCNEY0N0QxRERBQzgKKzoxMDc4NjAwMEZGOUU2Q0M3MDlEQzQ3NTlGOUI1QzdFMkU4N0M2M0U3QkUKKzoxMDc4NzAwMEFGRDQ3N0VBQTFGOUFCNDBGREY5RkZGMTNFRkQ5REM2MUIKKzoxMDc4ODAwMDA2MkFERjZCNUM0NzY1NkZBMzhCREEwM0Y0RkY3RjhFRkMKKzoxMDc4OTAwMEEzRkY0M0YzOUZFN0IwNUY2OEZFOTMxOTk1MjhCMjlGNUIKKzoxMDc4QTAwMDIwREYzQ0RGMUM5MkVGMkM5QUYwQzAyNkMwREY4MkVENzcKKzoxMDc4QjAwMDdBMkI1NkE5Rjk0RjdDM0ZCQ0Q2NENGQUUwRjJFQzMxNUEKKzoxMDc4QzAwMEYzOUUyQURFQ0M5NDI3MUQ2NkE2MkNDNEZGRkNGNDE0N0MKKzoxMDc4RDAwMEFEMDZEQUJGMTA3NDUwRjM4RTI4MUY3ODNFOTQwRjJDM0IKKzoxMDc4RTAwMDUxM0VCNDVBQkY3Q0JDQTAwNzExQ0VFMTc2REU0NTc2OEUKKzoxMDc4RjAwMERFNDQ3NEREQjgxRUY0MDdDMDJCOTkyNTQ4N0Y1QzBENkIKKzoxMDc5MDAwMEQxMUYxMDcwREM0N0RGNTU3NTFCMThFNjA5RDU3Nzk0MzkKKzoxMDc5MTAwMEYzQTFGODJBNkIwQzdERTJFMUZBNjQ2QTk4RTcyNUZBOTQKKzoxMDc5MjAwMERFQkYyRThDREVFNzlFMTRFRkUxNEU2RUU2RUZFMUNBN0QKKzoxMDc5MzAwMDU5MDlBRDNCODY1RTg5NDQ3QUFDOUMzMDc0RjY3OUU4OEYKKzoxMDc5NDAwMEJGRjJENzY2RjI1NzM2NEVBQUM4RkI1QkY0Q0FFMDZDQUEKKzoxMDc5NTAwMDhFOEY2N0YxNzcwNUI0NUZGN0JCMDI0RjQ4NzgxRkJBODcKKzoxMDc5NjAwMEU2N0U2NjQzM0FBQkJGMkIxMDJGRUVCM0JGQzVFRjBBREUKKzoxMDc5NzAwMERDMzY2N0UyMzdGRjVEODFDQzM5RjFBNTgxQkYyQjkwMDIKKzoxMDc5ODAwMEQ5Mzk4OUMzRUFFRjBBQjBGOEQyNzE3RTU3MjA3QjRFMEQKKzoxMDc5OTAwMEVFRThERjE1OTgzRDg3QzczOUUzRkRBRTAwRjg5MzczMzUKKzoxMDc5QTAwMDcwN0YzQTlCRkQ0RTJDMTNDNTNFNDNCRkE3M0QyREVFODUKKzoxMDc5QjAwMEVGN0EzNDhFNTIyQzBCMjM1RDVBQUFEN0I4NzNCMDdDNjEKKzoxMDc5QzAwMDVCRTNGOTM5RDYwMzNGRTdFMzNFMEE5RkIyREQ5RTBFNDMKKzoxMDc5RDAwMDcwQTJDMTQzN0FCMjI3Q0I1RTgwRjU4MzM2N0IyMUFFOUQKKzoxMDc5RTAwMDEzOUEzNzQ3REE2MjdDMEZGQjU5ODRFREExRUZBRTU0NEUKKzoxMDc5RjAwMDdBQUU5OEMzRjlGRTAxNTFDRTZEMUFGQjdCRjIwN0U2MTEKKzoxMDdBMDAwMEYwRUZENTZFQjU2RkQ4RUY3REI4MkY3NUZGNkNFQjhBQjAKKzoxMDdBMTAwMDFDOTJBNzJDRkIzMkIxREY1MjJDOTkzOTI2RThGQkQ0RkIKKzoxMDdBMjAwMEQxN0NFNjEyRkJFMkZDMDVGQUFDRjgzQ0Y3MDdBOTRDNjYKKzoxMDdBMzAwMEQzQkFBM0QxN0Y5Q0ZDODgzQjFBRjczQkI5NzlDODg0QTEKKzoxMDdBNDAwMERGNDFCQ0U4MUEzMkExN0Q3RkYxRTEyMTEzRDZCRjY4ODYKKzoxMDdBNTAwMEU3RUY5NTQzRTc3RjcxMEVGRjRFMjA2REVFMTA4RDlGOEYKKzoxMDdBNjAwMDA2RkZERDRCRkVGOTUwMzRGQTRGNjk5NUU3MzdEMjdEQkEKKzoxMDdBNzAwMENCODE5OTY0NUZBNjA5RkIzMkVEOTFFOTlEMDNDMDZGNEMKKzoxMDdBODAwMEQzOUU4QkEyRkI2Qzk2MUY0QkVERDU0NjJFQTdENThGQjAKKzoxMDdBOTAwMDk0MUZFOTUwRThCQkFERTJGMzAxRkVDRTRDMzdFQzNCNUUKKzoxMDdBQTAwMEM4RkZEMjBFRjM3Nzk3MDAyMzlFMEVFODA4NDY5RTQ1NDYKKzoxMDdBQjAwMEZGQ0FDOUY4QkJDQkM5NDI2RkEwOUY1NjBBN0FDMTU5MDkKKzoxMDdBQzAwMEY5RTY3NUJBRjdDN0YxMzgxRkRFRDEyMkZGNzVFQTg2RUQKKzoxMDdBRDAwMEM1Rjc2OTE2OEM0MzU3MkQ1OURGNDM3MUUxOEU5MTdBQjIKKzoxMDdBRTAwMDExNjcxRURBODg3MTMzRjg2RjQxRjVENUU1QUZGN0EwNUQKKzoxMDdBRjAwMEJEQTkzOTEwNUNFRjZDQjg0NkYxMkJGODZGNDFGNUY3NzIKKzoxMDdCMDAwMEZGRkM5QzlFRkY3RTQxNzAzREQwNzcwN0YyOUI0QURGRDEKKzoxMDdCMTAwMDkzM0FDRjRDOENGMzRFM0FDM0FDRkNGREJFODc3RUFGOUMKKzoxMDdCMjAwMEE0NDU3Q0ZGQkNFNzlGRTdFN0YwRjdBMjlDREUzMERFRDAKKzoxMDdCMzAwMEZEQ0RGOEEzODlGQUJCRTZCMzc0OTQ4NzVCOTVBQTVFODIKKzoxMDdCNDAwMDFBRjlGRDEzM0Q3MzUxN0U2RjUxMDRFOTlEN0ExMTU3NjcKKzoxMDdCNTAwMEQ1OTU1QkM4Q0UyN0Q2MTk0OTdGMTVDODYxNTY4NDQ3OEQKKzoxMDdCNjAwMDdFRkZBNDQ4MTY3QUNBNDNGMkRGNzc1NzM0RTVGMUU4N0UKKzoxMDdCNzAwMDAwMDhDN0NDQTI3QjlGQjgyNjBFMEY0RDM0OTA3RTI4RkMKKzoxMDdCODAwMEQwOTRENEVFODdGMjRENERGMDc3RUMyRkEwN0U5MDUxM0IKKzoxMDdCOTAwMDdFNzkzRUI1NUVFRkUxREY4OTZCOTU1QzhDNzM5QjI0NEIKKzoxMDdCQTAwMEZCNzNGOERENjM5MzI0RjI4ODU1NjZCQTJGMThDNEZDODIKKzoxMDdCQjAwMDIyOUM2NzdCQjRGQkI5MEE1ODY3RkIzRDE5RTQxRjBGOTEKKzoxMDdCQzAwMDMyQUU0RjVENEJGOEJERDVGNkU4OTJEMkQ1RDhCRUY0QjMKKzoxMDdCRDAwMDc2NkEzRkYyOTc5NDI3NzNEMDdGQUEwQUIzQTJGRkI0QzQKKzoxMDdCRTAwMEREQzZGREVCRUQ4QkQzQTlGRDk4QTRBQ0M3NzNCQjFFMUUKKzoxMDdCRjAwMDYxQjRDRUY2QzVGQ0RDREI5RjlDMkFCRUJGNzA5QjUwRjcKKzoxMDdDMDAwMDlFQjczN0RCMjdFMTdERDQ3QzhCRTMwQ0QyNkJCMkI4MTcKKzoxMDdDMTAwMDhGREI5RTBDRjU1MDNFMjM5NTJDN0QxMEU3OTlDNUY3MjAKKzoxMDdDMjAwMDVCNjc1Mzg4NUUyNzk3REVGRUU0M0U4NUNDODgxN0VGQkUKKzoxMDdDMzAwMDg1RUExNzQ1NTAxQ0ZDQkY5MzAxMTM1M0YwNDYwMDAwMjIKKzoxMDdDNDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAwMTUwMDAwMDAwMDAwMUEKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyeC1lMWgtNC44LjUzLjAuZncuaWhleCBiL2Zpcm13YXJlL2JueDJ4LWUxaC00LjguNTMuMC5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGQ3NjEyLi4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDJ4LWUxaC00LjguNTMuMC5mdy5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsMTIwMjggKzAsMCBAQAotOjEwMDAwMDAwMDAwMDM5RDgwMDAwMDA2MDAwMDAwNjMwMDAwMDNBNDBDRgotOjEwMDAxMDAwMDAwMDE5MUMwMDAwNDA3ODAwMDAwMDlDMDAwMDU5OTg2NgotOjEwMDAyMDAwMDAwMDgyRTQwMDAwNUEzODAwMDAwMEQ0MDAwMEREMjAwNwotOjEwMDAzMDAwMDAwMEM3Q0MwMDAwRERGODAwMDAwMDc4MDAwMUE1Qzg3MgotOjEwMDA0MDAwMDAwMDU2OTgwMDAxQTY0ODAwMDAwMEMwMDAwMUZDRTgyRQotOjEwMDA1MDAwMDAwMEYxRDQwMDAxRkRCMDAwMDAwMDA0MDAwMkVGODhCMAotOjEwMDA2MDAwMDIwNDAwNDgwMDAwMDAwRjAyMDQwMDU0MDAwMDAwNDU5NAotOjEwMDA3MDAwMDIwNDAwNTgwMDAwMDA4NDAyMDQwMDVDMDAwMDAwMDYzNgotOjEwMDA4MDAwMDIwNDAwNzAwMDAwMDAwNDAyMDQwMDc4MDAwMDAwMDA3OAotOjEwMDA5MDAwMDIwNDAwN0MxMjE3MDAwMDAyMDQwMDgwMjIxNzAwMDBGNgotOjEwMDBBMDAwMDIwNDAwODQzMjE3MDAwMDA2MDQwMDg4MDAwMDAwMDVFNgotOjEwMDBCMDAwMDIwNDAwOUMxMjE1MDAwMDAyMDQwMEEwMjIxNTAwMDA5QQotOjEwMDBDMDAwMDIwNDAwQTQzMjE1MDAwMDA2MDQwMEE4MDAwMDAwMDQ4OQotOjEwMDBEMDAwMDIwNDAwQjgwMjEwMDAwMDAyMDQwMEJDMDAxMDAwMDA3RQotOjEwMDBFMDAwMDIwNDAwQzAxMDEwMDAwMDAyMDQwMEM0MjAxMDAwMDAzMAotOjEwMDBGMDAwMDIwNDAwQzgzMDEwMDAwMDAyMDQwMENDNDAxMDAwMDBEMAotOjEwMDEwMDAwMDYwNDAwRDAwMDAwMDAwMzAyMDQwMERDMDAxMDAwMDAyMAotOjEwMDExMDAwMDIwNDAwRTAxMjE0MDAwMDAyMDQwMEU0MjIxNDAwMDBCMwotOjEwMDEyMDAwMDIwNDAwRTgzMjE0MDAwMDAyMDQwMEVDNDIxNDAwMDA1MwotOjEwMDEzMDAwMDYwNDAwRjAwMDAwMDAwMzAxMDQwMTI0MDAwMDAwMDA5OAotOjEwMDE0MDAwMDEwNDAxMjgwMDAwMDAwMDAxMDQwMTJDMDAwMDAwMDA0RgotOjEwMDE1MDAwMDEwNDAxMzAwMDAwMDAwMDAyMDQwMUQwMDAwMDg5MDYwMwotOjEwMDE2MDAwMDIwNDAwMDQwMDAwMDBGRjAyMDQwMDA4MDAwMDAwRkY3OQotOjEwMDE3MDAwMDIwNDAwMEMwMDAwMDBGRjAyMDQwMDEwMDAwMDAwRkY1OQotOjEwMDE4MDAwMDIwNDAwMTQwMDAwMDBGRjAyMDQwMDE4MDAwMDAwRkYzOQotOjEwMDE5MDAwMDIwNDAwMUMwMDAwMDBGRjAyMDQwMDIwMDAwMDAwRkYxOQotOjEwMDFBMDAwMDIwNDAwMjQwMDAwMDAzRTAyMDQwMDI4MDAwMDAwMDBCOQotOjEwMDFCMDAwMDIwNDAwMkMwMDAwMDAzRjAyMDQwMDMwMDAwMDAwM0Y1OQotOjEwMDFDMDAwMDIwNDAwMzQwMDAwMDAzRjAyMDQwMDM4MDAwMDAwM0YzOQotOjEwMDFEMDAwMDIwNDAwM0MwMDAwMDAzRjAyMDQwMDQwMDAwMDAwM0YxOQotOjEwMDFFMDAwMDIwNDAwNDQwMDAwMDAzRjAyMDQwNENDMDAwMDAwMDFBRgotOjEwMDFGMDAwMDIwNDIwMDgwMDAwMDIxMTAyMDQyMDBDMDAwMDAyMDA4QQotOjEwMDIwMDAwMDIwNDIwMTAwMDAwMDIwNDAyMDQyMDE0MDAwMDAyMTk1RAotOjEwMDIxMDAwMDIwNDIwMUMwMDAwRkZGRjAyMDQyMDIwMDAwMEZGRkY1QQotOjEwMDIyMDAwMDIwNDIwMjQwMDAwRkZGRjAyMDQyMDI4MDAwMEZGRkYzQQotOjEwMDIzMDAwMDIwNDIwMzgwMDAwMDAyMDAyMDQyMDNDMDAwMDAwMDBERQotOjEwMDI0MDAwMDIwNDIwNDAwMDAwMDAzNDAyMDQyMDQ0MDAwMDAwMzU3NQotOjEwMDI1MDAwMDYwNDIwNDgwMDAwMDAxQzAyMDQyMEI4MDAwMDAwMDEzMQotOjEwMDI2MDAwMDYwNDIwQkMwMDAwMDA1RjAyMDQyMjM4MDdGRkZGRkZFNQotOjEwMDI3MDAwMDIwNDIyM0MwMDAwMDAzRjAyMDQyMjQwMDdGRkZGRkY2RgotOjEwMDI4MDAwMDIwNDIyNDQwMDAwMDAwRjAxMDQyMjQ4MDAwMDAwMDA4NAotOjEwMDI5MDAwMDEwNDIyNEMwMDAwMDAwMDAxMDQyMjUwMDAwMDAwMDA3NAotOjEwMDJBMDAwMDEwNDIyNTQwMDAwMDAwMDAxMDQyMjU4MDAwMDAwMDA1NAotOjEwMDJCMDAwMDEwNDIyNUMwMDAwMDAwMDAxMDQyMjYwMDAwMDAwMDAzNAotOjEwMDJDMDAwMDEwNDIyNjQwMDAwMDAwMDAxMDQyMjY4MDAwMDAwMDAxNAotOjEwMDJEMDAwMDEwNDIyNkMwMDAwMDAwMDAxMDQyMjcwMDAwMDAwMDBGNAotOjEwMDJFMDAwMDEwNDIyNzQwMDAwMDAwMDAxMDQyMjc4MDAwMDAwMDBENAotOjEwMDJGMDAwMDEwNDIyN0MwMDAwMDAwMDBDMDQyMDAwMDAwMDAzRTg0MAotOjEwMDMwMDAwMEEwNDIwMDAwMDAwMDAwMTBCMDQyMDAwMDAwMDAwMEE4NQotOjEwMDMxMDAwMDIwNTAwNDQwMDAwMDAyMDAyMDUwMDQ4MDAwMDAwMzJGMQotOjEwMDMyMDAwMDIwNTAwOTAwMjE1MDAyMDAyMDUwMDk0MDIxNTAwMjAyRAotOjEwMDMzMDAwMDIwNTAwOTgwMDAwMDAzMDAyMDUwMDlDMDgxMDAwMDAzMwotOjEwMDM0MDAwMDIwNTAwQTAwMDAwMDAzMzAyMDUwMEE0MDAwMDAwMzBGOAotOjEwMDM1MDAwMDIwNTAwQTgwMDAwMDAzMTAyMDUwMEFDMDAwMDAwMDIwOAotOjEwMDM2MDAwMDIwNTAwQjAwMDAwMDAwNTAyMDUwMEI0MDAwMDAwMDYxMAotOjEwMDM3MDAwMDIwNTAwQjgwMDAwMDAwMjAyMDUwMEJDMDAwMDAwMDJGNwotOjEwMDM4MDAwMDIwNTAwQzAwMDAwMDAwMDAyMDUwMEM0MDAwMDAwMDVENgotOjEwMDM5MDAwMDIwNTAwQzgwMDAwMDAwMjAyMDUwMENDMDAwMDAwMDJCNwotOjEwMDNBMDAwMDIwNTAwRDAwMDAwMDAwMjAyMDUwMEQ0MDAwMDAwMDE5OAotOjEwMDNCMDAwMDIwNTAxMTQwMDAwMDAwMTAyMDUwMTFDMDAwMDAwMDFGQgotOjEwMDNDMDAwMDIwNTAxMjAwMDAwMDAwMjAyMDUwMjA0MDAwMDAwMDFGNQotOjEwMDNEMDAwMDIwNTAyMEMwMDAwMDA0MDAyMDUwMjEwMDAwMDAwNDA2RgotOjEwMDNFMDAwMDIwNTAyMUMwMDAwMDAyMDAyMDUwMjIwMDAwMDAwMTM4QwotOjEwMDNGMDAwMDIwNTAyMjQwMDAwMDAyMDA2MDUwMjQwMDAwMDAwMEE1OQotOjEwMDQwMDAwMDQwNTAyODAwMDIwMDAwMDAyMDUwMDUwMDAwMDAwMDdFMwotOjEwMDQxMDAwMDIwNTAwNTQwMDAwMDAwNzAyMDUwMDU4MDAwMDAwMDgxMwotOjEwMDQyMDAwMDIwNTAwNUMwMDAwMDAwODAyMDUwMDYwMDAwMDAwMDFGOQotOjEwMDQzMDAwMDYwNTAwNjQwMDAwMDAwMzAyMDUwMEQ4MDAwMDAwMDY2NQotOjEwMDQ0MDAwMDIwNTAwMDQwMDAwMDAwMTAyMDUwMDA4MDAwMDAwMDE5MAotOjEwMDQ1MDAwMDIwNTAwMEMwMDAwMDAwMTAyMDUwMDEwMDAwMDAwMDE3MAotOjEwMDQ2MDAwMDIwNTAwMTQwMDAwMDAwMTAyMDUwMDE4MDAwMDAwMDE1MAotOjEwMDQ3MDAwMDIwNTAwMUMwMDAwMDAwMTAyMDUwMDIwMDAwMDAwMDEzMAotOjEwMDQ4MDAwMDIwNTAwMjQwMDAwMDAwMTAyMDUwMDI4MDAwMDAwMDExMAotOjEwMDQ5MDAwMDIwNTAwMkMwMDAwMDAwMTAyMDUwMDMwMDAwMDAwMDFGMAotOjEwMDRBMDAwMDIwNTAwMzQwMDAwMDAwMTAyMDUwMDM4MDAwMDAwMDFEMAotOjEwMDRCMDAwMDIwNTAwM0MwMDAwMDAwMTAyMDUwMDQwMDAwMDAwMDFCMAotOjEwMDRDMDAwMDIwNTAwRTAwMDAwMDAwRDAyMDUwMEU4MDAwMDAwMDc0MgotOjEwMDREMDAwMDIwNTAwRjAwMDAwMDAwNzAyMDUwMEY4MDAwMDAwMDcxOAotOjEwMDRFMDAwMDIwNTAwRTQwMDAwMDAyRDAyMDUwMEVDMDAwMDAwMjdEQQotOjEwMDRGMDAwMDIwNTAwRjQwMDAwMDAyNzAyMDUwMEZDMDAwMDAwMjdCMAotOjEwMDUwMDAwMDIwNTAwRTAwMDAwMDAxRDAyMDUwMEU4MDAwMDAwMTdFMQotOjEwMDUxMDAwMDIwNTAwRjAwMDAwMDAxNzAyMDUwMEY4MDAwMDAwMTdCNwotOjEwMDUyMDAwMDIwNTAwRTQwMDAwMDAzRDAyMDUwMEVDMDAwMDAwMzc3OQotOjEwMDUzMDAwMDIwNTAwRjQwMDAwMDAzNzAyMDUwMEZDMDAwMDAwMzc0RgotOjEwMDU0MDAwMDIwNTAwRTAwMDAwMDA0RDAyMDUwMEU4MDAwMDAwNDc0MQotOjEwMDU1MDAwMDIwNTAwRjAwMDAwMDA0NzAyMDUwMEY4MDAwMDAwNDcxNwotOjEwMDU2MDAwMDIwNTAwRTQwMDAwMDA2RDAyMDUwMEVDMDAwMDAwNjdEOQotOjEwMDU3MDAwMDIwNTAwRjQwMDAwMDA2NzAyMDUwMEZDMDAwMDAwNjdBRgotOjEwMDU4MDAwMDIwNTAwRTAwMDAwMDA1RDAyMDUwMEU4MDAwMDAwNTdFMQotOjEwMDU5MDAwMDIwNTAwRjAwMDAwMDA1NzAyMDUwMEY4MDAwMDAwNTdCNwotOjEwMDVBMDAwMDIwNTAwRTQwMDAwMDA3RDAyMDUwMEVDMDAwMDAwNzc3OQotOjEwMDVCMDAwMDIwNTAwRjQwMDAwMDA3NzAyMDUwMEZDMDAwMDAwNzc0RgotOjEwMDVDMDAwMDQwNjEwMDAwMjAwMDAyMDAyMDYwMERDMDAwMDAwMDEwQQotOjEwMDVEMDAwMDEwNjAwRDgwMDAwMDAwMDA0MDYwMjAwMDAwMzAyMjAwQgotOjEwMDVFMDAwMDIwNjAwREMwMDAwMDAwMDAxMDYwMEI4MDAwMDAwMDA2OAotOjEwMDVGMDAwMDEwNjAwQzgwMDAwMDAwMDAxMDYwMEJDMDAwMDAwMDA2OQotOjEwMDYwMDAwMDEwNjAwQ0MwMDAwMDAwMDA3MTgwNDAwMDA5QjAwMDA1OQotOjEwMDYxMDAwMDgxODA3OTgwMDBEMDIyMzA3MUMwMDAwMzI1RTAwMDAzNgotOjEwMDYyMDAwMDcxQzgwMDAzNTk2MEM5ODA3MUQwMDAwMUFFQTE5RkU3OQotOjEwMDYzMDAwMDgxRDQzRDA1Nzg2MDIyNTAxMTgwMDAwMDAwMDAwMDA2NQotOjEwMDY0MDAwMDExODAwMDQwMDAwMDAwMDAxMTgwMDA4MDAwMDAwMDA2QwotOjEwMDY1MDAwMDExODAwMEMwMDAwMDAwMDAxMTgwMDEwMDAwMDAwMDA0QwotOjEwMDY2MDAwMDExODAwMTQwMDAwMDAwMDAyMTgwMDIwMDAwMDAwMDEyMgotOjEwMDY3MDAwMDIxODAwMjQwMDAwMDAwMjAyMTgwMDI4MDAwMDAwMDNGNQotOjEwMDY4MDAwMDIxODAwMkMwMDAwMDAwMDAyMTgwMDMwMDAwMDAwMDRENgotOjEwMDY5MDAwMDIxODAwMzQwMDAwMDAwMTAyMTgwMDM4MDAwMDAwMDBCOQotOjEwMDZBMDAwMDIxODAwM0MwMDAwMDAwMTAyMTgwMDQwMDAwMDAwMDQ5NQotOjEwMDZCMDAwMDIxODAwNDQwMDAwMDAwMDAyMTgwMDQ4MDAwMDAwMDE3OQotOjEwMDZDMDAwMDIxODAwNEMwMDAwMDAwMzAyMTgwMDUwMDAwMDAwMDA1NwotOjEwMDZEMDAwMDIxODAwNTQwMDAwMDAwMTAyMTgwMDU4MDAwMDAwMDQzNQotOjEwMDZFMDAwMDIxODAwNUMwMDAwMDAwMDAyMTgwMDYwMDAwMDAwMDExOQotOjEwMDZGMDAwMDIxODAwNjQwMDAwMDAwMzAyMTgwMDY4MDAwMDAwMDBGNwotOjEwMDcwMDAwMDIxODAwNkMwMDAwMDAwMTAyMTgwMDcwMDAwMDAwMDRENAotOjEwMDcxMDAwMDIxODAwNzQwMDAwMDAwMDAyMTgwMDc4MDAwMDAwMDRCNQotOjEwMDcyMDAwMDIxODAwN0MwMDAwMDAwMzA2MTgwMDgwMDAwMDAwMDI5MAotOjEwMDczMDAwMDIxODAwQTQwMDAwM0ZGRjAyMTgwMEE4MDAwMDAzRkZGOQotOjEwMDc0MDAwMDIxODAyMjQwMDAwMDAwMDAyMTgwMjM0MDAwMDAwMDAxOQotOjEwMDc1MDAwMDIxODAyNEMwMDAwMDAwMDAyMTgwMkU0MDAwMDAwRkYzMgotOjEwMDc2MDAwMDYxODEwMDAwMDAwMDQwMDAyMUI4QkMwMDAwMDAwMDFFRQotOjEwMDc3MDAwMDIxQjgwMDAwMDAwMDAzNDAyMUI4MDQwMDAwMDAwMThCMwotOjEwMDc4MDAwMDIxQjgwODAwMDAwMDAwQzAyMUI4MEMwMDAwMDAwMjBDMwotOjEwMDc5MDAwMEMxQjgzMDAwMDA3QTEyMDBBMUI4MzAwMDAwMDAxMzgwNgotOjEwMDdBMDAwMEIxQjgzMDAwMDAwMTM4ODAyMUI4M0MwMDAwMDAxRjRCMAotOjEwMDdCMDAwMDIxQjE0ODAwMDAwMDAwMTBBMUIxNDgwMDAwMDAwMDBDRQotOjEwMDdDMDAwMDYxQTEwMDAwMDAwMDJCMzA0MUExQUNDMDAwMTAyMjcxNgotOjEwMDdEMDAwMDYxQUEwMjAwMDAwMDBDODA2MUFBMDAwMDAwMDAwMDJBRgotOjEwMDdFMDAwMDIxQTFBRDAwMDAwMDAwMDA2MUExQUQ4MDAwMDAwMDRFRAotOjEwMDdGMDAwMDYxQTM2NzgwMDAwMDAwNjA2MUEzNjcwMDAwMDAwMDI1RAotOjEwMDgwMDAwMDYxQTUwMDAwMDAwMDAwMjA2MUE1MDA4MDAwMDAwMDRGQQotOjEwMDgxMDAwMDYxQTUwMTgwMDAwMDAwNDA2MUE1MDI4MDAwMDAwMDRCMAotOjEwMDgyMDAwMDYxQTUwMzgwMDAwMDAwNDA2MUE1MDQ4MDAwMDAwMDQ2MAotOjEwMDgzMDAwMDYxQTUwNTgwMDAwMDAwNDA2MUE1MDY4MDAwMDAwMDQxMAotOjEwMDg0MDAwMDYxQTUwNzgwMDAwMDAwMjA2MUE0MDAwMDAwMDAwMDI1QwotOjEwMDg1MDAwMDYxQTQwMDgwMDAwMDAwMjA0MUE2MkMwMDAyMDAyMjhBNAotOjEwMDg2MDAwMDYxQTIwMDAwMDAwMDE2QzA2MUFCMDAwMDAwMDAwMjhFMwotOjEwMDg3MDAwMDYxQUIxNDAwMDAwMDAwQzA2MUEzMkMwMDAwMDAwMTIzNwotOjEwMDg4MDAwMDYxQTMzNTAwMDAwMDA2NDA2MUE4MTA4MDAwMDAwMDJCNgotOjEwMDg5MDAwMDYxQTI1QjAwMDAwMDE2QzA2MUFCMEEwMDAwMDAwMjg1RQotOjEwMDhBMDAwMDYxQUIxNzAwMDAwMDAwQzA2MUEzMzA4MDAwMDAwMTI4RQotOjEwMDhCMDAwMDYxQTM0RTAwMDAwMDA2NDA2MUE4MTEwMDAwMDAwMDJFRAotOjEwMDhDMDAwMDIxQTJCNjAwMDAwMDAwMDA2MUEzMDAwMDAwMDAwMDIyRgotOjEwMDhEMDAwMDQxQTMwMDgwMDA1MDI0ODA2MUEzMDFDMDAwMDAwMDcwMAotOjEwMDhFMDAwMDYxQTMxQzAwMDAwMDAwODA2MUE1MDAwMDAwMDAwMDI3RAotOjEwMDhGMDAwMDYxQTUwODAwMDAwMDAxMjA2MUE0MDAwMDAwMDAwMDI5NAotOjEwMDkwMDAwMDIxQTJCNjQwMDAwMDAwMDA2MUEzMDM4MDAwMDAwMDJCMgotOjEwMDkxMDAwMDQxQTMwNDAwMDA1MDI0RDA2MUEzMDU0MDAwMDAwMDc0QQotOjEwMDkyMDAwMDYxQTMxRTAwMDAwMDAwODA2MUE1MDEwMDAwMDAwMDIwQwotOjEwMDkzMDAwMDYxQTUwQzgwMDAwMDAxMjA2MUE0MDA4MDAwMDAwMDIwMwotOjEwMDk0MDAwMDIxQTJCNjgwMDAwMDAwMDA2MUEzMDcwMDAwMDAwMDIzNgotOjEwMDk1MDAwMDQxQTMwNzgwMDA1MDI1MjA2MUEzMDhDMDAwMDAwMDc5NQotOjEwMDk2MDAwMDYxQTMyMDAwMDAwMDAwODA2MUE1MDIwMDAwMDAwMDI5QgotOjEwMDk3MDAwMDYxQTUxMTAwMDAwMDAxMjA0MUE0MDEwMDAwMjAyNTcxQgotOjEwMDk4MDAwMDIxQTJCNkMwMDAwMDAwMDA2MUEzMEE4MDAwMDAwMDJCQQotOjEwMDk5MDAwMDQxQTMwQjAwMDA1MDI1OTA2MUEzMEM0MDAwMDAwMDdERQotOjEwMDlBMDAwMDYxQTMyMjAwMDAwMDAwODA2MUE1MDMwMDAwMDAwMDIyQgotOjEwMDlCMDAwMDYxQTUxNTgwMDAwMDAxMjA0MUE0MDE4MDAwMjAyNUU4NAotOjEwMDlDMDAwMDIxQTJCNzAwMDAwMDAwMDA2MUEzMEUwMDAwMDAwMDIzRQotOjEwMDlEMDAwMDQxQTMwRTgwMDA1MDI2MDA2MUEzMEZDMDAwMDAwMDcyNwotOjEwMDlFMDAwMDYxQTMyNDAwMDAwMDAwODA2MUE1MDQwMDAwMDAwMDJCQgotOjEwMDlGMDAwMDYxQTUxQTAwMDAwMDAxMjA0MUE0MDIwMDAwMjAyNjVFRAotOjEwMEEwMDAwMDIxQTJCNzQwMDAwMDAwMDA2MUEzMTE4MDAwMDAwMDJDMAotOjEwMEExMDAwMDQxQTMxMjAwMDA1MDI2NzA2MUEzMTM0MDAwMDAwMDc2RAotOjEwMEEyMDAwMDYxQTMyNjAwMDAwMDAwODA2MUE1MDUwMDAwMDAwMDI0QQotOjEwMEEzMDAwMDYxQTUxRTgwMDAwMDAxMjA0MUE0MDI4MDAwMjAyNkM1NQotOjEwMEE0MDAwMDIxQTJCNzgwMDAwMDAwMDA2MUEzMTUwMDAwMDAwMDI0NAotOjEwMEE1MDAwMDQxQTMxNTgwMDA1MDI2RTA2MUEzMTZDMDAwMDAwMDdCNgotOjEwMEE2MDAwMDYxQTMyODAwMDAwMDAwODA2MUE1MDYwMDAwMDAwMDJEQQotOjEwMEE3MDAwMDYxQTUyMzAwMDAwMDAxMjA0MUE0MDMwMDAwMjAyNzNCRAotOjEwMEE4MDAwMDIxQTJCN0MwMDAwMDAwMDA2MUEzMTg4MDAwMDAwMDJDOAotOjEwMEE5MDAwMDQxQTMxOTAwMDA1MDI3NTA2MUEzMUE0MDAwMDAwMDdGRgotOjEwMEFBMDAwMDYxQTMyQTAwMDAwMDAwODA2MUE1MDcwMDAwMDAwMDI2QQotOjEwMEFCMDAwMDYxQTUyNzgwMDAwMDAxMjA0MUE0MDM4MDAwMjAyN0EyNgotOjEwMEFDMDAwMDIwMEEyOTQwNzFEMjkxMTAyMDBBMjk4MDAwMDAwMDA1NAotOjEwMEFEMDAwMDIwMEEyOUMwMDlDMDQyNDAyMDBBMkEwMDAwMDAwMDBDRQotOjEwMEFFMDAwMDIwMEEyQTQwMDAwMDIwOTAyMDBBMjcwMDAwMDAwMDA5RgotOjEwMEFGMDAwMDIwMEEyNzQwMDAwMDAwMDAyMDBBMjcwMDAwMDAwMDBDQQotOjEwMEIwMDAwMDIwMEEyNzQwMDAwMDAwMDAyMDBBMjcwMDAwMDAwMDBCOQotOjEwMEIxMDAwMDIwMEEyNzQwMDAwMDAwMDAyMDBBMjcwMDAwMDAwMDBBOQotOjEwMEIyMDAwMDIwMEEyNzQwMDAwMDAwMDAyMDEwMEI0MDAwMDAwMDFGNQotOjEwMEIzMDAwMDIwMTAwQjgwMDAwMDAwMTAyMDEwMERDMDAwMDAwMDExOQotOjEwMEI0MDAwMDIwMTAxMDAwMDAwMDAwMTAyMDEwMTA0MDAwMDAwMDE5NwotOjEwMEI1MDAwMDIwMTAwN0MwMDMwMDAwMDAyMDEwMDg0MDAwMDAwMjgzNwotOjEwMEI2MDAwMDIwMTAwOEMwMDAwMDAwMDAyMDEwMTMwMDAwMDAwMDRCRQotOjEwMEI3MDAwMDIwMTAyNUMwMDAwMDAwMTAyMDEwMzI4MDAwMDAwMDBFNQotOjEwMEI4MDAwMDIwMTYwODAwMDAwMDAwMTAyMDEwNTU0MDAwMDAwMzBGNQotOjEwMEI5MDAwMDIwMTAwQzQwMDAwMDAwMTAyMDEwMENDMDAwMDAwMDFCRAotOjEwMEJBMDAwMDIwMTAwRjgwMDAwMDAwMTAyMDEwMEYwMDAwMDAwMDE1NQotOjEwMEJCMDAwMDIwMTAwODAwMDMwMDAwMDAyMDEwMDg4MDAwMDAwMjhDRgotOjEwMEJDMDAwMDIwMTAwOTAwMDAwMDAwMDAyMDEwMTM0MDAwMDAwMDQ1NgotOjEwMEJEMDAwMDIwMTAyREMwMDAwMDAwMTAyMDEwMzJDMDAwMDAwMDAwMQotOjEwMEJFMDAwMDIwMTYwODQwMDAwMDAwMTAyMDEwNTY0MDAwMDAwMzA4MQotOjEwMEJGMDAwMDIwMTAwQzgwMDAwMDAwMTAyMDEwMEQwMDAwMDAwMDE1NQotOjEwMEMwMDAwMDIwMTAwRkMwMDAwMDAwMTAyMDEwMEY0MDAwMDAwMDFFQwotOjEwMEMxMDAwMDIwQzEwMDAwMDAwMDAyMDAyMEMyMDA4MDAwMDAyMTE0RAotOjEwMEMyMDAwMDIwQzIwMEMwMDAwMDIwMDAyMEMyMDEwMDAwMDAyMDQ0NAotOjEwMEMzMDAwMDIwQzIwMUMwMDAwRkZGRjAyMEMyMDIwMDAwMEZGRkYyMAotOjEwMEM0MDAwMDIwQzIwMjQwMDAwRkZGRjAyMEMyMDI4MDAwMEZGRkYwMAotOjEwMEM1MDAwMDIwQzIwMzgwMDAwMDBDNjAyMEMyMDNDMDAwMDAwMDBGRQotOjEwMEM2MDAwMDIwQzIwNDAwMDAwMDAzNDAyMEMyMDQ0MDAwMDAwMzUzQgotOjEwMEM3MDAwMDYwQzIwNDgwMDAwMDAxQzAyMEMyMEI4MDAwMDAwMDFGNwotOjEwMEM4MDAwMDYwQzIwQkMwMDAwMDA1RjAyMEMyMjM4MDdGRkZGRkZBQgotOjEwMEM5MDAwMDIwQzIyM0MwMDAwMDAzRjAyMEMyMjQwMDdGRkZGRkYzNQotOjEwMENBMDAwMDIwQzIyNDQwMDAwMDAwRjAxMEMyMjQ4MDAwMDAwMDA0QQotOjEwMENCMDAwMDEwQzIyNEMwMDAwMDAwMDAxMEMyMjUwMDAwMDAwMDAzQQotOjEwMENDMDAwMDEwQzIyNTQwMDAwMDAwMDAxMEMyMjU4MDAwMDAwMDAxQQotOjEwMENEMDAwMDEwQzIyNUMwMDAwMDAwMDAxMEMyMjYwMDAwMDAwMDBGQQotOjEwMENFMDAwMDEwQzIyNjQwMDAwMDAwMDAxMEMyMjY4MDAwMDAwMDBEQQotOjEwMENGMDAwMDEwQzIyNkMwMDAwMDAwMDAxMEMyMjcwMDAwMDAwMDBCQQotOjEwMEQwMDAwMDEwQzIyNzQwMDAwMDAwMDAxMEMyMjc4MDAwMDAwMDA5OQotOjEwMEQxMDAwMDEwQzIyN0MwMDAwMDAwMDBDMEMyMDAwMDAwMDAzRTgwNQotOjEwMEQyMDAwMEEwQzIwMDAwMDAwMDAwMTBCMEMyMDAwMDAwMDAwMEE0QgotOjEwMEQzMDAwMDIwQzQwMDgwMDAwMDQxMTAyMEM0MDBDMDAwMDA0MDBFQQotOjEwMEQ0MDAwMDIwQzQwMTAwMDAwMDQwNDAyMEM0MDE0MDAwMDA0MjFCNgotOjEwMEQ1MDAwMDIwQzQwMUMwMDAwRkZGRjAyMEM0MDIwMDAwMEZGRkZCRgotOjEwMEQ2MDAwMDIwQzQwMjQwMDAwRkZGRjAyMEM0MDI4MDAwMEZGRkY5RgotOjEwMEQ3MDAwMDIwQzQwMzgwMDAwMDA0NjAyMEM0MDNDMDAwMDAwMDUxOAotOjEwMEQ4MDAwMDIwQzQwNDAwMDAwMDAzNDAyMEM0MDQ0MDAwMDAwMzVEQQotOjEwMEQ5MDAwMDIwQzQwNDgwMDAwMDAwNzA2MEM0MDRDMDAwMDAwNUJCRAotOjEwMERBMDAwMDIwQzQxQjgwMDAwMDAwMTA2MEM0MUJDMDAwMDAwMDMyOQotOjEwMERCMDAwMDIwQzQxQzgwMDAwMDAwMTA2MEM0MUNDMDAwMDAwMUJFMQotOjEwMERDMDAwMDIwQzQyMzgwN0ZGRkZGRjAyMEM0MjNDMDAwMDAwM0ZDQwotOjEwMEREMDAwMDIwQzQyNDAwN0ZGRkZGRjAyMEM0MjQ0MDAwMDAwMEZEQwotOjEwMERFMDAwMDEwQzQyNDgwMDAwMDAwMDAxMEM0MjRDMDAwMDAwMDBEMQotOjEwMERGMDAwMDEwQzQyNTAwMDAwMDAwMDAxMEM0MjU0MDAwMDAwMDBCMQotOjEwMEUwMDAwMDEwQzQyNTgwMDAwMDAwMDAxMEM0MjVDMDAwMDAwMDA5MAotOjEwMEUxMDAwMDEwQzQyNjAwMDAwMDAwMDAxMEM0MjY0MDAwMDAwMDA3MAotOjEwMEUyMDAwMDEwQzQyNjgwMDAwMDAwMDAxMEM0MjZDMDAwMDAwMDA1MAotOjEwMEUzMDAwMDEwQzQyNzAwMDAwMDAwMDAxMEM0Mjc0MDAwMDAwMDAzMAotOjEwMEU0MDAwMDEwQzQyNzgwMDAwMDAwMDAxMEM0MjdDMDAwMDAwMDAxMAotOjEwMEU1MDAwMDEwQzQyODAwMDAwMDAwMDBDMEM0MDAwMDAwMDAzRTg4MAotOjEwMEU2MDAwMEEwQzQwMDAwMDAwMDAwMTBCMEM0MDAwMDAwMDAwMEFDQQotOjEwMEU3MDAwMDIwRDAwNDQwMDAwMDAzMjAyMEQwMDhDMDIxNTAwMjAxQgotOjEwMEU4MDAwMDIwRDAwOTAwMjE1MDAyMDAyMEQwMDk0MDgxMDAwMDBEMQotOjEwMEU5MDAwMDIwRDAwOTgwMDAwMDAzMzAyMEQwMDlDMDAwMDAwMDJDQgotOjEwMEVBMDAwMDIwRDAwQTAwMDAwMDAwMDAyMEQwMEE0MDAwMDAwMDVEQgotOjEwMEVCMDAwMDIwRDAwQTgwMDAwMDAwNTA2MEQwMEFDMDAwMDAwMDJCNQotOjEwMEVDMDAwMDIwRDAwQjQwMDAwMDAwMjAyMEQwMEI4MDAwMDAwMDM5MwotOjEwMEVEMDAwMDIwRDAwQkMwMDAwMDAwMjAyMEQwMEMwMDAwMDAwMDE3NQotOjEwMEVFMDAwMDIwRDAwQzgwMDAwMDAwMjAyMEQwMENDMDAwMDAwMDI0QwotOjEwMEVGMDAwMDIwRDAxMDgwMDAwMDAwMTAyMEQwMTVDMDAwMDAwMDE2QwotOjEwMEYwMDAwMDIwRDAxNjQwMDAwMDAwMTAyMEQwMTY4MDAwMDAwMDJGMgotOjEwMEYxMDAwMDIwRDAyMDQwMDAwMDAwMTAyMEQwMjBDMDAwMDAwMjA3RQotOjEwMEYyMDAwMDIwRDAyMTAwMDAwMDA0MDAyMEQwMjE0MDAwMDAwNDBGQgotOjEwMEYzMDAwMDIwRDAyMjAwMDAwMDAwMzAyMEQwMjI0MDAwMDAwMTgzMAotOjEwMEY0MDAwMDYwRDAyODAwMDAwMDAxMjA0MEQwMzAwMDAyNDAyN0M0NAotOjEwMEY1MDAwMDIwRDAwNEMwMDAwMDAwMTAyMEQwMDUwMDAwMDAwMDJENAotOjEwMEY2MDAwMDIwRDAwNTQwMDAwMDAwODAyMEQwMDU4MDAwMDAwMDhBNwotOjEwMEY3MDAwMDYwRDAwNUMwMDAwMDAwNDAyMEQwMEM0MDAwMDAwMDQyNwotOjEwMEY4MDAwMDIwRDAwMDQwMDAwMDAwMTAyMEQwMDA4MDAwMDAwMDEzNQotOjEwMEY5MDAwMDIwRDAwMEMwMDAwMDAwMTAyMEQwMDEwMDAwMDAwMDExNQotOjEwMEZBMDAwMDIwRDAwMTQwMDAwMDAwMTAyMEQwMDE4MDAwMDAwMDFGNQotOjEwMEZCMDAwMDIwRDAwMUMwMDAwMDAwMTAyMEQwMDIwMDAwMDAwMDFENQotOjEwMEZDMDAwMDIwRDAwMjQwMDAwMDAwMTAyMEQwMDI4MDAwMDAwMDFCNQotOjEwMEZEMDAwMDIwRDAwMkMwMDAwMDAwMTAyMEQwMDMwMDAwMDAwMDE5NQotOjEwMEZFMDAwMDIwRDAwMzQwMDAwMDAwMTAyMEQwMDM4MDAwMDAwMDE3NQotOjEwMEZGMDAwMDIwRDAwM0MwMDAwMDAwMTAyMEQwMTE0MDAwMDAwMDk3OAotOjEwMTAwMDAwMDIwRDAxMUMwMDAwMDAwQTAyMEQwMTI0MDAwMDAwMDc2RgotOjEwMTAxMDAwMDIwRDAxMkMwMDAwMDAwNzAyMEQwMTM0MDAwMDAwMEMzRAotOjEwMTAyMDAwMDIwRDAxM0MwMDAwMDAwQjAyMEQwMTQ0MDAwMDAwMDcwRQotOjEwMTAzMDAwMDIwRDAxMTgwMDAwMDAyOTAyMEQwMTIwMDAwMDAwMkEwNQotOjEwMTA0MDAwMDIwRDAxMjgwMDAwMDAyNzAyMEQwMTMwMDAwMDAwMjdEQQotOjEwMTA1MDAwMDIwRDAxMzgwMDAwMDAyQzAyMEQwMTQwMDAwMDAwMkJBMQotOjEwMTA2MDAwMDIwRDAxNDgwMDAwMDAyNzAyMEQwMTE0MDAwMDAwMTlDNAotOjEwMTA3MDAwMDIwRDAxMUMwMDAwMDAxQTAyMEQwMTI0MDAwMDAwMTdERgotOjEwMTA4MDAwMDIwRDAxMkMwMDAwMDAxNzAyMEQwMTM0MDAwMDAwMUNBRAotOjEwMTA5MDAwMDIwRDAxM0MwMDAwMDAxQjAyMEQwMTQ0MDAwMDAwMTc3RQotOjEwMTBBMDAwMDIwRDAxMTgwMDAwMDAzOTAyMEQwMTIwMDAwMDAwM0E3NQotOjEwMTBCMDAwMDIwRDAxMjgwMDAwMDAzNzAyMEQwMTMwMDAwMDAwMzc0QQotOjEwMTBDMDAwMDIwRDAxMzgwMDAwMDAzQzAyMEQwMTQwMDAwMDAwM0IxMQotOjEwMTBEMDAwMDIwRDAxNDgwMDAwMDAzNzAyMEQwMTE0MDAwMDAwNDkxNAotOjEwMTBFMDAwMDIwRDAxMUMwMDAwMDA0QTAyMEQwMTI0MDAwMDAwNDcwRgotOjEwMTBGMDAwMDIwRDAxMkMwMDAwMDA0NzAyMEQwMTM0MDAwMDAwNENERAotOjEwMTEwMDAwMDIwRDAxM0MwMDAwMDA0QjAyMEQwMTQ0MDAwMDAwNDdBRAotOjEwMTExMDAwMDIwRDAxMTgwMDAwMDA2OTAyMEQwMTIwMDAwMDAwNkFBNAotOjEwMTEyMDAwMDIwRDAxMjgwMDAwMDA2NzAyMEQwMTMwMDAwMDAwNjc3OQotOjEwMTEzMDAwMDIwRDAxMzgwMDAwMDA2QzAyMEQwMTQwMDAwMDAwNkI0MAotOjEwMTE0MDAwMDIwRDAxNDgwMDAwMDA2NzAyMEQwMTE0MDAwMDAwNTk2MwotOjEwMTE1MDAwMDIwRDAxMUMwMDAwMDA1QTAyMEQwMTI0MDAwMDAwNTc3RQotOjEwMTE2MDAwMDIwRDAxMkMwMDAwMDA1NzAyMEQwMTM0MDAwMDAwNUM0QwotOjEwMTE3MDAwMDIwRDAxM0MwMDAwMDA1QjAyMEQwMTQ0MDAwMDAwNTcxRAotOjEwMTE4MDAwMDIwRDAxMTgwMDAwMDA3OTAyMEQwMTIwMDAwMDAwN0ExNAotOjEwMTE5MDAwMDIwRDAxMjgwMDAwMDA3NzAyMEQwMTMwMDAwMDAwNzdFOQotOjEwMTFBMDAwMDIwRDAxMzgwMDAwMDA3QzAyMEQwMTQwMDAwMDAwN0JCMAotOjEwMTFCMDAwMDIwRDAxNDgwMDAwMDA3NzAyMEUwMDRDMDAwMDAwMzJEMgotOjEwMTFDMDAwMDIwRTAwOTQwMjE1MDAyMDAyMEUwMDk4MDIxNTAwMjA2NQotOjEwMTFEMDAwMDIwRTAwOUMwMDAwMDAzMDAyMEUwMEEwMDgxMDAwMDA2QgotOjEwMTFFMDAwMDIwRTAwQTQwMDAwMDAzMzAyMEUwMEE4MDAwMDAwMzAzMAotOjEwMTFGMDAwMDIwRTAwQUMwMDAwMDAzMTAyMEUwMEIwMDAwMDAwMDI0MAotOjEwMTIwMDAwMDIwRTAwQjQwMDAwMDAwNDAyMEUwMEI4MDAwMDAwMDA0RQotOjEwMTIxMDAwMDIwRTAwQkMwMDAwMDAwMjAyMEUwMEMwMDAwMDAwMDIyRQotOjEwMTIyMDAwMDIwRTAwQzQwMDAwMDAwMDAyMEUwMEM4MDAwMDAwMDIxMAotOjEwMTIzMDAwMDIwRTAwQ0MwMDAwMDAwNzAyMEUwMEQwMDAwMDAwMDJFOQotOjEwMTI0MDAwMDIwRTAwRDQwMDAwMDAwMjAyMEUwMEQ4MDAwMDAwMDFDRgotOjEwMTI1MDAwMDIwRTAwRTQwMDAwMDAwMTAyMEUwMTQ0MDAwMDAwMDE0MwotOjEwMTI2MDAwMDIwRTAxNEMwMDAwMDAwMTAyMEUwMTUwMDAwMDAwMDJCRAotOjEwMTI3MDAwMDIwRTAyMDQwMDAwMDAwMTAyMEUwMjBDMDAwMDAwNDBGOQotOjEwMTI4MDAwMDIwRTAyMTAwMDAwMDA0MDAyMEUwMjFDMDAwMDAwMDRDQQotOjEwMTI5MDAwMDIwRTAyMjAwMDAwMDAyMDAyMEUwMjI0MDAwMDAwMEVCOAotOjEwMTJBMDAwMDIwRTAyMjgwMDAwMDAxQjA2MEUwMzAwMDAwMDAwMTJDMAotOjEwMTJCMDAwMDQwRTAyODAwMDFCMDJBMDAyMEUwMDU0MDAwMDAwMTA2OQotOjEwMTJDMDAwMDIwRTAwNTgwMDAwMDAwNzAyMEUwMDVDMDAwMDAwMEYzNAotOjEwMTJEMDAwMDIwRTAwNjAwMDAwMDAxMDAyMEUwMDY0MDAwMDAwMEIwRgotOjEwMTJFMDAwMDYwRTAwNjgwMDAwMDAwMzAyMEUwMERDMDAwMDAwMDM5MAotOjEwMTJGMDAwMDIwRTAwMDQwMDAwMDAwMTAyMEUwMDA4MDAwMDAwMDFDMAotOjEwMTMwMDAwMDIwRTAwMEMwMDAwMDAwMTAyMEUwMDEwMDAwMDAwMDE5RgotOjEwMTMxMDAwMDIwRTAwMTQwMDAwMDAwMTAyMEUwMDE4MDAwMDAwMDE3RgotOjEwMTMyMDAwMDIwRTAwMUMwMDAwMDAwMTAyMEUwMDIwMDAwMDAwMDE1RgotOjEwMTMzMDAwMDIwRTAwMjQwMDAwMDAwMTAyMEUwMDI4MDAwMDAwMDEzRgotOjEwMTM0MDAwMDIwRTAwMkMwMDAwMDAwMTAyMEUwMDMwMDAwMDAwMDExRgotOjEwMTM1MDAwMDIwRTAwMzQwMDAwMDAwMTAyMEUwMDM4MDAwMDAwMDFGRgotOjEwMTM2MDAwMDIwRTAwM0MwMDAwMDAwMTAyMEUwMDQwMDAwMDAwMDFERgotOjEwMTM3MDAwMDIwRTAwNDQwMDAwMDAwMTAyMEUwMTEwMDAwMDAwMEZFOAotOjEwMTM4MDAwMDIwRTAxMTgwMDAwMDAwRTAyMEUwMTIwMDAwMDAwMDBGNQotOjEwMTM5MDAwMDIwRTAxMjgwMDAwMDAwMDAyMEUwMTE0MDAwMDAwMkZDMAotOjEwMTNBMDAwMDIwRTAxMUMwMDAwMDAyRTAyMEUwMTI0MDAwMDAwMDBBRAotOjEwMTNCMDAwMDIwRTAxMkMwMDAwMDAwMDAyMEUwMTEwMDAwMDAwMUZCMAotOjEwMTNDMDAwMDIwRTAxMTgwMDAwMDAxRTAyMEUwMTIwMDAwMDAwMDBBNQotOjEwMTNEMDAwMDIwRTAxMjgwMDAwMDAwMDAyMEUwMTE0MDAwMDAwM0Y3MAotOjEwMTNFMDAwMDIwRTAxMUMwMDAwMDAzRTAyMEUwMTI0MDAwMDAwMDA1RAotOjEwMTNGMDAwMDIwRTAxMkMwMDAwMDAwMDAyMEUwMTEwMDAwMDAwNEY0MAotOjEwMTQwMDAwMDIwRTAxMTgwMDAwMDA0RTAyMEUwMTIwMDAwMDAwMDAzNAotOjEwMTQxMDAwMDIwRTAxMjgwMDAwMDAwMDAyMEUwMTE0MDAwMDAwNkZGRgotOjEwMTQyMDAwMDIwRTAxMUMwMDAwMDA2RTAyMEUwMTI0MDAwMDAwMDBFQwotOjEwMTQzMDAwMDIwRTAxMkMwMDAwMDAwMDAyMEUwMTEwMDAwMDAwNUZFRgotOjEwMTQ0MDAwMDIwRTAxMTgwMDAwMDA1RTAyMEUwMTIwMDAwMDAwMDBFNAotOjEwMTQ1MDAwMDIwRTAxMjgwMDAwMDAwMDAyMEUwMTE0MDAwMDAwN0ZBRgotOjEwMTQ2MDAwMDIwRTAxMUMwMDAwMDA3RTAyMEUwMTI0MDAwMDAwMDA5QwotOjEwMTQ3MDAwMDIwRTAxMkMwMDAwMDAwMDA3MzAwNDAwMDBEMjAwMDAyMgotOjEwMTQ4MDAwMDgzMDA3QTgwMDBCMDJCQjA3MzQwMDAwMzFCNjAwMDA4QgotOjEwMTQ5MDAwMDczNDgwMDAzNjUwMEM2RTA3MzUwMDAwMzc1OTFBMDNBOAotOjEwMTRBMDAwMDczNTgwMDAyODYxMjdEQTA4MzVGRjQwNDAxODAyQkQ2MwotOjEwMTRCMDAwMDEzMDAwMDAwMDAwMDAwMDAxMzAwMDA0MDAwMDAwMDBDNgotOjEwMTRDMDAwMDEzMDAwMDgwMDAwMDAwMDAxMzAwMDBDMDAwMDAwMDBBNgotOjEwMTREMDAwMDEzMDAwMTAwMDAwMDAwMDAxMzAwMDE0MDAwMDAwMDA4NgotOjEwMTRFMDAwMDIzMDAwMjAwMDAwMDAwMTAyMzAwMDI0MDAwMDAwMDI1MQotOjEwMTRGMDAwMDIzMDAwMjgwMDAwMDAwMzAyMzAwMDJDMDAwMDAwMDAzMQotOjEwMTUwMDAwMDIzMDAwMzAwMDAwMDAwNDAyMzAwMDM0MDAwMDAwMDEwRQotOjEwMTUxMDAwMDIzMDAwMzgwMDAwMDAwMDAyMzAwMDNDMDAwMDAwMDFGMgotOjEwMTUyMDAwMDIzMDAwNDAwMDAwMDAwNDAyMzAwMDQ0MDAwMDAwMDBDRgotOjEwMTUzMDAwMDIzMDAwNDgwMDAwMDAwMTAyMzAwMDRDMDAwMDAwMDNBRgotOjEwMTU0MDAwMDIzMDAwNTAwMDAwMDAwMDAyMzAwMDU0MDAwMDAwMDE5MgotOjEwMTU1MDAwMDIzMDAwNTgwMDAwMDAwNDAyMzAwMDVDMDAwMDAwMDA2RgotOjEwMTU2MDAwMDIzMDAwNjAwMDAwMDAwMTAyMzAwMDY0MDAwMDAwMDM0RgotOjEwMTU3MDAwMDIzMDAwNjgwMDAwMDAwMDAyMzAwMDZDMDAwMDAwMDEzMgotOjEwMTU4MDAwMDIzMDAwNzAwMDAwMDAwNDAyMzAwMDc0MDAwMDAwMDAwRgotOjEwMTU5MDAwMDIzMDAwNzgwMDAwMDAwNDAyMzAwMDdDMDAwMDAwMDNFQwotOjEwMTVBMDAwMDYzMDAwODAwMDAwMDAwMjAyMzAwMEE0MDAwMDNGRkY2RgotOjEwMTVCMDAwMDIzMDAwQTgwMDAwMDNGRjAyMzAwMjI0MDAwMDAwMDBGNwotOjEwMTVDMDAwMDIzMDAyMzQwMDAwMDAwMDAyMzAwMjRDMDAwMDAwMDAzMwotOjEwMTVEMDAwMDIzMDAyRTQwMDAwRkZGRjA2MzAyMDAwMDAwMDA4MDA5NwotOjEwMTVFMDAwMDIzMzhCQzAwMDAwMDAwMTAyMzM4MDAwMDAwMDAwMUFBQgotOjEwMTVGMDAwMDIzMzgwNDAwMDAwMDA0RTAyMzM4MDgwMDAwMDAwMTA2MwotOjEwMTYwMDAwMDIzMzgwQzAwMDAwMDAyMDBDMzM4MzAwMDAwN0ExMjBCQgotOjEwMTYxMDAwMEEzMzgzMDAwMDAwMDEzODBCMzM4MzAwMDAwMDEzODg3NQotOjEwMTYyMDAwMDIzMzgzQzAwMDAwMDFGNDBDMzM4MzgwMURDRDY1MDBCQwotOjEwMTYzMDAwMEEzMzgzODAwMDA0QzRCNDBCMzM4MzgwMDA0QzRCNDBENgotOjEwMTY0MDAwMEEzMzE0ODAwMDAwMDAwMDAyMzMxNDgwMDAwMDAwMDFGRgotOjEwMTY1MDAwMDYzMjIwMDAwMDAwMDEwMjA2MzI4OTgwMDAwMDAwQzgyNgotOjEwMTY2MDAwMDYzMjg5NjAwMDAwMDAwMjA2MzIzMjI4MDAwMDAwMDRDMQotOjEwMTY3MDAwMDYzMjMyMDAwMDAwMDAwOTA0MzIzMjI0MDAwMTAyQkZBOQotOjEwMTY4MDAwMDYzMjMxODAwMDAwMDAyMDA2MzI1MDAwMDAwMDA0MDBDNQotOjEwMTY5MDAwMDYzMjQwMDAwMDAwMDAwMjA0MzI0MDA4MDAwMTAyQzA4RgotOjEwMTZBMDAwMDYzMjQwMEMwMDAwMDAwMzA2MzI2QjY4MDAwMDAwMDJBNgotOjEwMTZCMDAwMDQzMjZCNzAwMDAyMDJDMTA2MzI2QjEwMDAwMDAwMDI5RgotOjEwMTZDMDAwMDQzMjc0QzAwMDAyMDJDMzAyMzMwODAwMDEwMDAwMDBBQgotOjEwMTZEMDAwMDQzMzBDMDAwMDEwMDJDNTAyMzMwODAwMDAwMDAwMDBCMwotOjEwMTZFMDAwMDQzMzBDNDAwMDEwMDJENTA2MzI5MDAwMDAwMDAwQTAyOAotOjEwMTZGMDAwMDYzMjk1MDAwMDAwMDA0MDA2MzI5NzAwMDAwMDAwM0NEMgotOjEwMTcwMDAwMDYzMjI0NTAwMDAwMDBCNDA2MzIyQUQwMDAwMDAwMDI0NQotOjEwMTcxMDAwMDYzMjMwODAwMDAwMDAyMDA2MzI4MDAwMDAwMDAxMkNEQwotOjEwMTcyMDAwMDIzMjMyMzgwMDAwMDAwMDA2MzI1MDAwMDAwMDAwMjA3MwotOjEwMTczMDAwMDYzMjUxMDAwMDAwMDAyMDA2MzI1MjAwMDAwMDAwMjA1NgotOjEwMTc0MDAwMDYzMjUzMDAwMDAwMDAyMDA2MzI1NDAwMDAwMDAwMjA0MgotOjEwMTc1MDAwMDYzMjU1MDAwMDAwMDAyMDA2MzI1NjAwMDAwMDAwMjAyRQotOjEwMTc2MDAwMDYzMjU3MDAwMDAwMDAyMDA2MzI1ODAwMDAwMDAwMjAxQQotOjEwMTc3MDAwMDYzMjU5MDAwMDAwMDAyMDA2MzI1QTAwMDAwMDAwMjAwNgotOjEwMTc4MDAwMDYzMjVCMDAwMDAwMDAyMDA2MzI1QzAwMDAwMDAwMjBGMgotOjEwMTc5MDAwMDYzMjVEMDAwMDAwMDAyMDA2MzI1RTAwMDAwMDAwMjBERQotOjEwMTdBMDAwMDYzMjVGMDAwMDAwMDAyMDA2MzI2Qjc4MDAwMDAwNTIxNQotOjEwMTdCMDAwMDYzMjZFMDgwMDAwMDAwQzA2MzI5MjgwMDAwMDAwQTA4NQotOjEwMTdDMDAwMDYzMjk2MDAwMDAwMDA0MDA2MzI5N0YwMDAwMDAwM0MxMAotOjEwMTdEMDAwMDYzMjI3MjAwMDAwMDBCNDA2MzIyQUQ4MDAwMDAwMDI5QQotOjEwMTdFMDAwMDYzMjMxMDAwMDAwMDAyMDA2MzI4NEIwMDAwMDAxMkNENwotOjEwMTdGMDAwMDIzMjMyM0MwMDAwMDAwMDA2MzI1MDgwMDAwMDAwMjAxRgotOjEwMTgwMDAwMDYzMjUxODAwMDAwMDAyMDA2MzI1MjgwMDAwMDAwMjA4NQotOjEwMTgxMDAwMDYzMjUzODAwMDAwMDAyMDA2MzI1NDgwMDAwMDAwMjA3MQotOjEwMTgyMDAwMDYzMjU1ODAwMDAwMDAyMDA2MzI1NjgwMDAwMDAwMjA1RAotOjEwMTgzMDAwMDYzMjU3ODAwMDAwMDAyMDA2MzI1ODgwMDAwMDAwMjA0OQotOjEwMTg0MDAwMDYzMjU5ODAwMDAwMDAyMDA2MzI1QTgwMDAwMDAwMjAzNQotOjEwMTg1MDAwMDYzMjVCODAwMDAwMDAyMDA2MzI1QzgwMDAwMDAwMjAyMQotOjEwMTg2MDAwMDYzMjVEODAwMDAwMDAyMDA2MzI1RTgwMDAwMDAwMjAwRAotOjEwMTg3MDAwMDYzMjVGODAwMDAwMDAyMDA2MzI2Q0MwMDAwMDAwNTI3QgotOjEwMTg4MDAwMDYzMjZFMzgwMDAwMDAwQzAyMzIyQTMwMDAwMDAwMDBFMAotOjEwMTg5MDAwMDYzMjMwMDAwMDAwMDAwNDA2MzI0MDE4MDAwMDAwMDI0QQotOjEwMThBMDAwMDIzMjJBMzQwMDAwMDAwMDA2MzIzMDEwMDAwMDAwMDQyQQotOjEwMThCMDAwMDYzMjQwMjgwMDAwMDAwMjAyMzIyQTM4MDAwMDAwMDBGMAotOjEwMThDMDAwMDYzMjMwMjAwMDAwMDAwNDA2MzI0MDM4MDAwMDAwMDJEQQotOjEwMThEMDAwMDIzMjJBM0MwMDAwMDAwMDA2MzIzMDMwMDAwMDAwMDREMgotOjEwMThFMDAwMDYzMjQwNDgwMDAwMDAwMjAyMzIyQTQwMDAwMDAwMDA5OAotOjEwMThGMDAwMDYzMjMwNDAwMDAwMDAwNDA2MzI0MDU4MDAwMDAwMDI2QQotOjEwMTkwMDAwMDIzMjJBNDQwMDAwMDAwMDA2MzIzMDUwMDAwMDAwMDQ3OQotOjEwMTkxMDAwMDYzMjQwNjgwMDAwMDAwMjAyMzIyQTQ4MDAwMDAwMDAzRgotOjEwMTkyMDAwMDYzMjMwNjAwMDAwMDAwNDA2MzI0MDc4MDAwMDAwMDJGOQotOjEwMTkzMDAwMDIzMjJBNEMwMDAwMDAwMDA2MzIzMDcwMDAwMDAwMDQyMQotOjEwMTk0MDAwMDYzMjQwODgwMDAwMDAwMjA3MjAwNDAwMDA3NDAwMDBGNgotOjEwMTk1MDAwMDgyMDA3ODAwMDEwMDJFNTA3MjQwMDAwMzIyNjAwMDA1RQotOjEwMTk2MDAwMDcyNDgwMDAyNDZFMEM4QTA4MjRDQkIwNjRGMDAyRTdDMAotOjEwMTk3MDAwMDEyMDAwMDAwMDAwMDAwMDAxMjAwMDA0MDAwMDAwMDAyMQotOjEwMTk4MDAwMDEyMDAwMDgwMDAwMDAwMDAxMjAwMDBDMDAwMDAwMDAwMQotOjEwMTk5MDAwMDEyMDAwMTAwMDAwMDAwMDAxMjAwMDE0MDAwMDAwMDBFMQotOjEwMTlBMDAwMDIyMDAwMjAwMDAwMDAwMTAyMjAwMDI0MDAwMDAwMDJBQwotOjEwMTlCMDAwMDIyMDAwMjgwMDAwMDAwMzAyMjAwMDJDMDAwMDAwMDA4QwotOjEwMTlDMDAwMDIyMDAwMzAwMDAwMDAwNDAyMjAwMDM0MDAwMDAwMDE2QQotOjEwMTlEMDAwMDIyMDAwMzgwMDAwMDAwMDAyMjAwMDNDMDAwMDAwMDE0RQotOjEwMTlFMDAwMDIyMDAwNDAwMDAwMDAwNDAyMjAwMDQ0MDAwMDAwMDAyQgotOjEwMTlGMDAwMDIyMDAwNDgwMDAwMDAwMTAyMjAwMDRDMDAwMDAwMDMwQgotOjEwMUEwMDAwMDIyMDAwNTAwMDAwMDAwMDAyMjAwMDU0MDAwMDAwMDFFRAotOjEwMUExMDAwMDIyMDAwNTgwMDAwMDAwNDAyMjAwMDVDMDAwMDAwMDBDQQotOjEwMUEyMDAwMDIyMDAwNjAwMDAwMDAwMTAyMjAwMDY0MDAwMDAwMDNBQQotOjEwMUEzMDAwMDIyMDAwNjgwMDAwMDAwMDAyMjAwMDZDMDAwMDAwMDE4RAotOjEwMUE0MDAwMDIyMDAwNzAwMDAwMDAwNDAyMjAwMDc0MDAwMDAwMDA2QQotOjEwMUE1MDAwMDIyMDAwNzgwMDAwMDAwNDAyMjAwMDdDMDAwMDAwMDM0NwotOjEwMUE2MDAwMDYyMDAwODAwMDAwMDAwMjAyMjAwMEE0MDAwMDNGRkZDQQotOjEwMUE3MDAwMDIyMDAwQTgwMDAwMDNGRjAyMjAwMjI0MDAwMDAwMDA1MgotOjEwMUE4MDAwMDIyMDAyMzQwMDAwMDAwMDAyMjAwMjRDMDAwMDAwMDA4RQotOjEwMUE5MDAwMDIyMDAyRTQwMDAwRkZGRjA2MjAyMDAwMDAwMDA4MDBGMgotOjEwMUFBMDAwMDIyMzhCQzAwMDAwMDAwMTAyMjM4MDAwMDAwMDAwMTAxMAotOjEwMUFCMDAwMDIyMzgwNDAwMDAwMDAxMjAyMjM4MDgwMDAwMDAwMzBEQQotOjEwMUFDMDAwMDIyMzgwQzAwMDAwMDAwRTAyMjM4M0MwMDAwMDAxRjQ0NgotOjEwMUFEMDAwMDIyMzE0ODAwMDAwMDAwMTBBMjMxNDgwMDAwMDAwMDA4QgotOjEwMUFFMDAwMDYyMjEwMDAwMDAwMDA0MjA2MjI3MDIwMDAwMDAwQzhGQwotOjEwMUFGMDAwMDYyMjcwMDAwMDAwMDAwMjAyMjIxMUU4MDAwMDAwMDAyRgotOjEwMUIwMDAwMDYyMjMwMDAwMDAwMDBDMDA2MjI0MDcwMDAwMDAwODA2NQotOjEwMUIxMDAwMDYyMjUyODAwMDAwMDAwNDA2MjI2NzAwMDAwMDAxMDAzNwotOjEwMUIyMDAwMDYyMjkwMDAwMDAwMDQwMDA0MjI2QjA4MDAyMDAyRTk1NQotOjEwMUIzMDAwMDIyMzA4MDAwMTNGRkZGRjA0MjMwQzAwMDAxMDAzMDlFQgotOjEwMUI0MDAwMDIyMzA4MDAwMDAwMDAwMDA0MjMwQzQwMDAxMDAzMTlDOQotOjEwMUI1MDAwMDYyMjgwMDAwMDAwMDBBMDA2MjI4NTAwMDAwMDAwNDA1MAotOjEwMUI2MDAwMDYyMjg3MDAwMDAwMDAzQzA2MjI0MDQwMDAwMDAwMDZEQwotOjEwMUI3MDAwMDYyMjgyODAwMDAwMDBBMDA2MjI4NjAwMDAwMDAwNDBBRAotOjEwMUI4MDAwMDYyMjg3RjAwMDAwMDAzQzA2MjI0MDU4MDAwMDAwMDZCNAotOjEwMUI5MDAwMDIyMjExNDgwMDAwMDAwMDA2MjIzMzAwMDAwMDAwMDI2QgotOjEwMUJBMDAwMDYyMjYwNDAwMDAwMDAzMDAyMjIxMTRDMDAwMDAwMDBCQwotOjEwMUJCMDAwMDYyMjMzMDgwMDAwMDAwMjA2MjI2MTAwMDAwMDAwMzAwNwotOjEwMUJDMDAwMDIyMjExNTAwMDAwMDAwMDA2MjIzMzEwMDAwMDAwMDIyMwotOjEwMUJEMDAwMDYyMjYxQzAwMDAwMDAzMDAyMjIxMTU0MDAwMDAwMDAwMwotOjEwMUJFMDAwMDYyMjMzMTgwMDAwMDAwMjA2MjI2MjgwMDAwMDAwMzA0NgotOjEwMUJGMDAwMDIyMjExNTgwMDAwMDAwMDA2MjIzMzIwMDAwMDAwMDJEQgotOjEwMUMwMDAwMDYyMjYzNDAwMDAwMDAzMDAyMjIxMTVDMDAwMDAwMDA0OAotOjEwMUMxMDAwMDYyMjMzMjgwMDAwMDAwMjA2MjI2NDAwMDAwMDAwMzA4MwotOjEwMUMyMDAwMDIyMjExNjAwMDAwMDAwMDA2MjIzMzMwMDAwMDAwMDI5MgotOjEwMUMzMDAwMDYyMjY0QzAwMDAwMDAzMDAyMjIxMTY0MDAwMDAwMDA4RgotOjEwMUM0MDAwMDYyMjMzMzgwMDAwMDAwMjA2MjI2NTgwMDAwMDAwMzBDMgotOjEwMUM1MDAwMDIxNjEwMDAwMDAwMDAyMDAyMTcwMDA4MDAwMDAwMDIxOQotOjEwMUM2MDAwMDIxNzAwMkMwMDAwMDAwMzAyMTcwMDNDMDAwMDAwMDREMwotOjEwMUM3MDAwMDIxNzAwNDQwMDAwMDAwODAyMTcwMDQ4MDAwMDAwMDI5QwotOjEwMUM4MDAwMDIxNzAwNEMwMDAwMDA5MDAyMTcwMDUwMDAwMDAwOTA2NgotOjEwMUM5MDAwMDIxNzAwNTQwMDgwMDA5MDAyMTcwMDU4MDgxNDAwMDAzQQotOjEwMUNBMDAwMDIxNzAwNjAwMDAwMDA4QTAyMTcwMDY0MDAwMDAwODAzNAotOjEwMUNCMDAwMDIxNzAwNjgwMDAwMDA5MDAyMTcwMDZDMDAwMDAwODAwRQotOjEwMUNDMDAwMDIxNzAwNzAwMDAwMDAwNjAyMTcwMDc4MDAwMDA3RDAxRAotOjEwMUNEMDAwMDIxNzAwN0MwMDAwMDc2QzAyMTcwMDM4MDA3QzEwMDQxQgotOjEwMUNFMDAwMDIxNzAwMDQwMDAwMDAwRjA2MTY0MDI0MDAwMDAwMDI0NgotOjEwMUNGMDAwMDIxNjQwNzAwMDAwMDAxQzAyMTY0MjA4MDAwMDAwMDE5RAotOjEwMUQwMDAwMDIxNjQyMTAwMDAwMDAwMTAyMTY0MjIwMDAwMDAwMDFFRAotOjEwMUQxMDAwMDIxNjQyMjgwMDAwMDAwMTAyMTY0MjMwMDAwMDAwMDFCNQotOjEwMUQyMDAwMDIxNjQyMzgwMDAwMDAwMTAyMTY0MjYwMDAwMDAwMDI2NAotOjEwMUQzMDAwMEMxNjQwMUMwMDAzRDA5MDBBMTY0MDFDMDAwMDAwOUNBQQotOjEwMUQ0MDAwMEIxNjQwMUMwMDAwMDlDNDAyMTY0MDMwMDAwMDAwMDhCOQotOjEwMUQ1MDAwMDIxNjQwMzQwMDAwMDAwQzAyMTY0MDM4MDAwMDAwMTA0QgotOjEwMUQ2MDAwMDIxNjQwNDQwMDAwMDAyMDAyMTY0MDAwMDAwMDAwMDE1RQotOjEwMUQ3MDAwMDIxNjQwRDgwMDAwMDAwMTAyMTY0MDA4MDAwMDAwMDFEMQotOjEwMUQ4MDAwMDIxNjQwMEMwMDAwMDAwMTAyMTY0MDEwMDAwMDAwMDE4NQotOjEwMUQ5MDAwMDIxNjQyNDAwMDAwMDAwMDAyMTY0MjQ4MDAwMDAwMDAwNwotOjEwMURBMDAwMDYxNjQyNzAwMDAwMDAwMjAyMTY0MjUwMDAwMDAwMDBCOQotOjEwMURCMDAwMDIxNjQyNTgwMDAwMDAwMDA2MTY0MjgwMDAwMDAwMDI5MQotOjEwMURDMDAwMDIxNjYwMDgwMDAwMDQyNDAyMTY2MDBDMDAwMDA0MTBEMwotOjEwMUREMDAwMDIxNjYwMTAwMDAwMDQxNDAyMTY2MDFDMDAwMEZGRkZEMQotOjEwMURFMDAwMDIxNjYwMjAwMDAwRkZGRjAyMTY2MDI0MDAwMEZGRkZDMwotOjEwMURGMDAwMDIxNjYwMjgwMDAwRkZGRjAyMTY2MDM4MDAwMDAwMjA3NQotOjEwMUUwMDAwMDIxNjYwM0MwMDAwMDAyMDAyMTY2MDQwMDAwMDAwMzQxMgotOjEwMUUxMDAwMDIxNjYwNDQwMDAwMDAzNTAyMTY2MDQ4MDAwMDAwMjNFRQotOjEwMUUyMDAwMDIxNjYwNEMwMDAwMDAyNDAyMTY2MDUwMDAwMDAwMjVERAotOjEwMUUzMDAwMDIxNjYwNTQwMDAwMDAyNjAyMTY2MDU4MDAwMDAwMjdCOQotOjEwMUU0MDAwMDIxNjYwNUMwMDAwMDAyOTAyMTY2MDYwMDAwMDAwMkE5MwotOjEwMUU1MDAwMDIxNjYwNjQwMDAwMDAyQjAyMTY2MDY4MDAwMDAwMkM2RgotOjEwMUU2MDAwMDIxNjYwNkMwMDAwMDAyRDA2MTY2MDcwMDAwMDAwNTIyMwotOjEwMUU3MDAwMDIxNjYxQjgwMDAwMDAwMTA2MTY2MUJDMDAwMDAwMUZEOAotOjEwMUU4MDAwMDIxNjYyMzgwN0ZGRkZGRjAyMTY2MjNDMDAwMDAwM0ZBNwotOjEwMUU5MDAwMDIxNjYyNDAwN0ZGRkZGRjAyMTY2MjQ0MDAwMDAwMEZCNwotOjEwMUVBMDAwMDExNjYyNDgwMDAwMDAwMDAxMTY2MjRDMDAwMDAwMDBBQwotOjEwMUVCMDAwMDExNjYyNTAwMDAwMDAwMDAxMTY2MjU0MDAwMDAwMDA4QwotOjEwMUVDMDAwMDExNjYyNTgwMDAwMDAwMDAxMTY2MjVDMDAwMDAwMDA2QwotOjEwMUVEMDAwMDExNjYyNjAwMDAwMDAwMDAxMTY2MjY0MDAwMDAwMDA0QwotOjEwMUVFMDAwMDExNjYyNjgwMDAwMDAwMDAxMTY2MjZDMDAwMDAwMDAyQwotOjEwMUVGMDAwMDExNjYyNzAwMDAwMDAwMDAxMTY2Mjc0MDAwMDAwMDAwQwotOjEwMUYwMDAwMDExNjYyNzgwMDAwMDAwMDAxMTY2MjdDMDAwMDAwMDBFQgotOjEwMUYxMDAwMEMxNjYwMDAwMDAwMDNFODBBMTY2MDAwMDAwMDAwMDFEMwotOjEwMUYyMDAwMEIxNjYwMDAwMDAwMDAwQTAyMTY4MDQwMDAwMDAwMDY0OAotOjEwMUYzMDAwMDIxNjgwNDQwMDAwMDAwNTAyMTY4MDQ4MDAwMDAwMEFENgotOjEwMUY0MDAwMDIxNjgwNEMwMDAwMDAwNTAyMTY4MDU0MDAwMDAwMDJCQQotOjEwMUY1MDAwMDIxNjgwQ0MwMDAwMDAwNDAyMTY4MEQwMDAwMDAwMDRBRAotOjEwMUY2MDAwMDIxNjgwRDQwMDAwMDAwNDAyMTY4MEQ4MDAwMDAwMDQ4RAotOjEwMUY3MDAwMDIxNjgwREMwMDAwMDAwNDAyMTY4MEUwMDAwMDAwMDQ2RAotOjEwMUY4MDAwMDIxNjgwRTQwMDAwMDAwNDAyMTY4MEU4MDAwMDAwMDQ0RAotOjEwMUY5MDAwMDIxNjg4MDQwMDAwMDAwNDAyMTY4MDMwMDAwMDAwN0M1NQotOjEwMUZBMDAwMDIxNjgwMzQwMDAwMDAzRDAyMTY4MDM4MDAwMDAwM0YxOQotOjEwMUZCMDAwMDIxNjgwM0MwMDAwMDA5QzAyMTY4MEYwMDAwMDAwMDcyMgotOjEwMUZDMDAwMDYxNjgwRjQwMDAwMDAwNTAyMTY4ODBDMDEwMTAxMDFDQwotOjEwMUZEMDAwMDIxNjgxMDgwMDAwMDAwMDAyMTY4MTBDMDAwMDAwMDRCNwotOjEwMUZFMDAwMDIxNjgxMTAwMDAwMDAwNDAyMTY4MTE0MDAwMDAwMDI5NQotOjEwMUZGMDAwMDIxNjg4MTAwODAxMjAwNDAyMTY4MTE4MDAwMDAwMDU0RQotOjEwMjAwMDAwMDIxNjgxMUMwMDAwMDAwNTAyMTY4MTIwMDAwMDAwMDU1OAotOjEwMjAxMDAwMDIxNjgxMjQwMDAwMDAwNTAyMTY4ODJDMjAwODEwMDFGOQotOjEwMjAyMDAwMDIxNjgxMjgwMDAwMDAwODAyMTY4MTJDMDAwMDAwMDYxQwotOjEwMjAzMDAwMDIxNjgxMzAwMDAwMDAwNzAyMTY4MTM0MDAwMDAwMDAwMwotOjEwMjA0MDAwMDIxNjg4MzAwMTAxMDEyMDA2MTY4MTM4MDAwMDAwMDRDNAotOjEwMjA1MDAwMDIxNjg4MzQwMTAxMDEwMTAyMTY4MTQ4MDAwMDAwMDBDNwotOjEwMjA2MDAwMDIxNjgxNEMwMDAwMDAwNDAyMTY4MTUwMDAwMDAwMDQ5QQotOjEwMjA3MDAwMDIxNjgxNTQwMDAwMDAwMjAyMTY4ODM4MDgwMTIwMDQ2QwotOjEwMjA4MDAwMDIxNjgxNTgwMDAwMDAwNTAyMTY4MTVDMDAwMDAwMDU2MAotOjEwMjA5MDAwMDIxNjgxNjAwMDAwMDAwNTAyMTY4MTY0MDAwMDAwMDU0MAotOjEwMjBBMDAwMDIxNjg4M0MyMDA4MTAwMTAyMTY4MTY4MDAwMDAwMDgxMgotOjEwMjBCMDAwMDIxNjgxNkMwMDAwMDAwNjAyMTY4MTcwMDAwMDAwMDcwNQotOjEwMjBDMDAwMDIxNjgxNzQwMDAwMDAwMTAyMTY4ODQwMDEwMTAxMjBGRgotOjEwMjBEMDAwMDIxNjgxNzgwMDAwMDAwMTAyMTY4MTdDMDAwMDAwMDFEOAotOjEwMjBFMDAwMDIxNjgxODAwMDAwMDAwMTAyMTY4MTg0MDAwMDAwMDFCOAotOjEwMjBGMDAwMDIxNjg4NDQwMTAxMDEwMTAyMTY4MTg4MDAwMDAwMDFENgotOjEwMjEwMDAwMDIxNjgxOEMwMDAwMDAwNDAyMTY4MTkwMDAwMDAwMDQ3OQotOjEwMjExMDAwMDIxNjgxOTQwMDAwMDAwMjAyMTY4ODQ4MDgwMTIwMDQ3QgotOjEwMjEyMDAwMDIxNjgxOTgwMDAwMDAwNTAyMTY4MTlDMDAwMDAwMDUzRgotOjEwMjEzMDAwMDIxNjgxQTAwMDAwMDAwNTAyMTY4MUE0MDAwMDAwMDUxRgotOjEwMjE0MDAwMDIxNjg4MTQyMDA4MTAwMTAyMTY4MUE4MDAwMDAwMDg1OQotOjEwMjE1MDAwMDIxNjgxQUMwMDAwMDAwNjAyMTY4MUIwMDAwMDAwMDdFNAotOjEwMjE2MDAwMDIxNjgxQjQwMDAwMDAwMTAyMTY4ODE4MDEwMTAxMjA0NgotOjEwMjE3MDAwMDIxNjgxQjgwMDAwMDAwMTAyMTY4MUJDMDAwMDAwMDFCNwotOjEwMjE4MDAwMDIxNjgxQzAwMDAwMDAwMTAyMTY4MUM0MDAwMDAwMDE5NwotOjEwMjE5MDAwMDIxNjg4MUMwMTAxMDEwMTAyMTY4MUM4MDAwMDAwMDExRAotOjEwMjFBMDAwMDIxNjgxQ0MwMDAwMDAwNDAyMTY4MUQwMDAwMDAwMDQ1OQotOjEwMjFCMDAwMDIxNjgxRDQwMDAwMDAwMjAyMTY4ODIwMDgwMTIwMDRDMwotOjEwMjFDMDAwMDIxNjgxRDgwMDAwMDAwNTAyMTY4MURDMDAwMDAwMDUxRgotOjEwMjFEMDAwMDIxNjgxRTAwMDAwMDAwNTAyMTY4MUU0MDAwMDAwMDVGRgotOjEwMjFFMDAwMDIxNjg4MjQyMDA4MTAwMTAyMTY4MUU4MDAwMDAwMDg2OQotOjEwMjFGMDAwMDIxNjgxRUMwMDAwMDAwNjAyMTY4MUYwMDAwMDAwMDdDNAotOjEwMjIwMDAwMDIxNkU0MEMwMDAwMDAwMDAyMTY4ODI4MDEwMTAxMjBEQgotOjEwMjIxMDAwMDYxNkU0MTAwMDAwMDAwNDAyMTZFMDAwMDEwMTAxMDFBRQotOjEwMjIyMDAwMDIxNkU0MjAwMDAwMDAwMDAyMTZFNDI0MDAwMDAwMDQ2RQotOjEwMjIzMDAwMDIxNkU0MjgwMDAwMDAwNDAyMTZFNDJDMDAwMDAwMDI0QwotOjEwMjI0MDAwMDIxNkUwMDQwODAxMjAwNDAyMTZFNDMwMDAwMDAwMDUzNAotOjEwMjI1MDAwMDIxNkU0MzQwMDAwMDAwNTAyMTZFNDM4MDAwMDAwMDUxMAotOjEwMjI2MDAwMDIxNkU0M0MwMDAwMDAwNTAyMTZFMDA4MjAwODEwMDFGOAotOjEwMjI3MDAwMDIxNkU0NDAwMDAwMDAwODAyMTZFNDQ0MDAwMDAwMDZENAotOjEwMjI4MDAwMDIxNkU0NDgwMDAwMDAwNzAyMTZFNDRDMDAwMDAwMDBCQgotOjEwMjI5MDAwMDIxNkUwMEMwMTAxMDEyMDA2MTZFNDUwMDAwMDAwMDRDMwotOjEwMjJBMDAwMDIxNkUwMTAwMTAxMDEwMTAyMTZFNDYwMDAwMDAwMDBDNgotOjEwMjJCMDAwMDIxNkU0NjQwMDAwMDAwNDAyMTZFNDY4MDAwMDAwMDQ1MgotOjEwMjJDMDAwMDIxNkU0NkMwMDAwMDAwMjAyMTZFMDE0MDgwMTIwMDQ2QgotOjEwMjJEMDAwMDIxNkU0NzAwMDAwMDAwNTAyMTZFNDc0MDAwMDAwMDUxOAotOjEwMjJFMDAwMDIxNkU0NzgwMDAwMDAwNTAyMTZFNDdDMDAwMDAwMDVGOAotOjEwMjJGMDAwMDIxNkUwMTgyMDA4MTAwMTAyMTZFNDgwMDAwMDAwMDgxMQotOjEwMjMwMDAwMDIxNkU0ODQwMDAwMDAwNjAyMTZFNDg4MDAwMDAwMDdCQwotOjEwMjMxMDAwMDIxNkU0OEMwMDAwMDAwMTAyMTZFMDFDMDEwMTAxMjBGRAotOjEwMjMyMDAwMDIxNkU0OTAwMDAwMDAwMTAyMTZFNDk0MDAwMDAwMDE4RgotOjEwMjMzMDAwMDIxNkU0OTgwMDAwMDAwMTAyMTZFNDlDMDAwMDAwMDE2RgotOjEwMjM0MDAwMDIxNkUwMjAwMTAxMDEwMTAyMTZFNEEwMDAwMDAwMDFENAotOjEwMjM1MDAwMDIxNkU0QTQwMDAwMDAwNDAyMTZFNEE4MDAwMDAwMDQzMQotOjEwMjM2MDAwMDIxNkU0QUMwMDAwMDAwMjAyMTZFMDI0MDgwMTIwMDQ3QQotOjEwMjM3MDAwMDIxNkU0QjAwMDAwMDAwNTAyMTZFNEI0MDAwMDAwMDVGNwotOjEwMjM4MDAwMDIxNkU0QjgwMDAwMDAwNTAyMTZFNEJDMDAwMDAwMDVENwotOjEwMjM5MDAwMDIxNkUwMjgyMDA4MTAwMTAyMTZFNEMwMDAwMDAwMDgyMAotOjEwMjNBMDAwMDIxNkU0QzQwMDAwMDAwNjAyMTZFNEM4MDAwMDAwMDc5QwotOjEwMjNCMDAwMDIxNkU0Q0MwMDAwMDAwMTAyMTZFMDJDMDEwMTAxMjAwRAotOjEwMjNDMDAwMDIxNkU0RDAwMDAwMDAwMTAyMTZFNEQ0MDAwMDAwMDE2RgotOjEwMjNEMDAwMDIxNkU0RDgwMDAwMDAwMTAyMTZFNERDMDAwMDAwMDE0RgotOjEwMjNFMDAwMDIxNkUwMzAwMTAxMDEwMTAyMTZFNEUwMDAwMDAwMDFFNAotOjEwMjNGMDAwMDIxNkU0RTQwMDAwMDAwNDAyMTZFNEU4MDAwMDAwMDQxMQotOjEwMjQwMDAwMDIxNkU0RUMwMDAwMDAwMjAyMTZFMDM0MDgwMTIwMDQ4OQotOjEwMjQxMDAwMDIxNkU0RjAwMDAwMDAwNTAyMTZFNEY0MDAwMDAwMDVENgotOjEwMjQyMDAwMDIxNkU0RjgwMDAwMDAwNTAyMTZFNEZDMDAwMDAwMDVCNgotOjEwMjQzMDAwMDIxNkUwMzgyMDA4MTAwMTAyMTZFNTAwMDAwMDAwMDgyRQotOjEwMjQ0MDAwMDIxNkU1MDQwMDAwMDAwNjAyMTZFNTA4MDAwMDAwMDc3OQotOjEwMjQ1MDAwMDIxNkUwM0MwMTAxMDEyMDAyMTY4MjQwMDAzRjAwM0ZDRAotOjEwMjQ2MDAwMDIxNjgyNDQwMDAwMDAwMDAyMTZFNTI0MDAzRjAwM0ZFRgotOjEwMjQ3MDAwMDIxNkU1MjgwMDAwMDAwMDAyMTY4MjQ4MDAwMDAwMDA1NQotOjEwMjQ4MDAwMDIxNjgyNEMwMDNGMDAzRjAyMTZFNTJDMDAwMDAwMDBCRgotOjEwMjQ5MDAwMDIxNkU1MzAwMDNGMDAzRjAyMTY4MjUwMDEwMDAxMDBBNQotOjEwMjRBMDAwMDIxNjgyNTQwMTAwMDEwMDAyMTZFNTM0MDEwMDAxMDAwOQotOjEwMjRCMDAwMDIxNkU1MzgwMTAwMDEwMDA2MTY4MjU4MDAwMDAwMDJFRAotOjEwMjRDMDAwMDIxNkU1M0MwMDAwMDAwMDAyMTZFNTQwMDAwMDAwMDA5NgotOjEwMjREMDAwMDIxNjgyNjAwMEMwMDBDMDAyMTY4MjY0MDBDMDAwQzAwNAotOjEwMjRFMDAwMDIxNkU1NDQwMEMwMDBDMDAyMTZFNTQ4MDBDMDAwQzA2NgotOjEwMjRGMDAwMDIxNjgyNjgxRTAwMUUwMDAyMTY4MjZDMUUwMDFFMDA1QwotOjEwMjUwMDAwMDIxNkU1NEMxRTAwMUUwMDAyMTZFNTUwMUUwMDFFMDBCRAotOjEwMjUxMDAwMDIxNjgyNzA0MDAwNDAwMDAyMTY4Mjc0NDAwMDQwMDBBMwotOjEwMjUyMDAwMDIxNkU1NTQ0MDAwNDAwMDAyMTZFNTU4NDAwMDQwMDAwNQotOjEwMjUzMDAwMDIxNjgyNzg4MDAwODAwMDAyMTY4MjdDODAwMDgwMDA3MwotOjEwMjU0MDAwMDIxNkU1NUM4MDAwODAwMDAyMTZFNTYwODAwMDgwMDBENQotOjEwMjU1MDAwMDIxNjgyODAyMDAwMjAwMDAyMTY4Mjg0MjAwMDIwMDBDMwotOjEwMjU2MDAwMDIxNkU1NjQyMDAwMjAwMDAyMTZFNTY4MjAwMDIwMDAyNQotOjEwMjU3MDAwMDYxNjgyODgwMDAwMDAwMjAyMTZFNTZDMDAwMDAwMDBDQQotOjEwMjU4MDAwMDIxNkU1NzAwMDAwMDAwMDAyMTY4MjkwMDAwMDAwMDBCNAotOjEwMjU5MDAwMDIxNjgyOTQwMDAwMDAwMDAyMTZFNTc0MDAwMDAwMDA5QwotOjEwMjVBMDAwMDIxNkU1NzgwMDAwMDAwMDAyMTY4Mjk4MDAwMDAwMDA4NAotOjEwMjVCMDAwMDIxNjgyOUMwMDAwMDAwMDAyMTZFNTdDMDAwMDAwMDA2QwotOjEwMjVDMDAwMDIxNkU1ODAwMDAwMDAwMDAyMTY4MkEwMDAwMDAwMDA1NAotOjEwMjVEMDAwMDIxNjgyQTQwMDAwMDAwMTA2MTY4MkE4MDAwMDAwMEE2QwotOjEwMjVFMDAwMDIxNjgxRjQwMDAwMEMwODAyMTY4MUY4MDAwMDAwNDA3OQotOjEwMjVGMDAwMDIxNjgxRkMwMDAwMDEwMDAyMTY4MjAwMDAwMDAwMjA4QgotOjEwMjYwMDAwMDIxNjgyMDQwMDAwMDAxNzAyMTY4MjA4MDAwMDAwODBGMwotOjEwMjYxMDAwMDIxNjgyMEMwMDAwMDIwMDAyMTY4MjEwMDAwMDAwMDA2OAotOjEwMjYyMDAwMDIxNjgyMTgwMUZGMDFGRjAyMTY4MjE0MDFGRjAxRkY0QQotOjEwMjYzMDAwMDIxNkU1MTAwMUZGMDFGRjAyMTZFNTBDMDFGRjAxRkY4NAotOjEwMjY0MDAwMDIxNjgyM0MwMDAwMDAxMzAyMTY4MDkwMDAwMDAxM0YzOQotOjEwMjY1MDAwMDIxNjgwNjAwMDAwMDE0MDAyMTY4MDY0MDAwMDAxNDAwNAotOjEwMjY2MDAwMDYxNjgwNjgwMDAwMDAwMjAyMTY4MDcwMDAwMDAwQzA5QwotOjEwMjY3MDAwMDYxNjgwNzQwMDAwMDAwNzAyMTY4MDlDMDAwMDAwNDhDNwotOjEwMjY4MDAwMDIxNjgwQTAwMDAwMDA0ODA2MTY4MEE0MDAwMDAwMDI4OAotOjEwMjY5MDAwMDIxNjgwQUMwMDAwMDA0ODA2MTY4MEIwMDAwMDAwMDc1QgotOjEwMjZBMDAwMDIxNjgyMzgwMDAwODAwMDAyMTY4MjM0MDAwMDI1RTQwMQotOjEwMjZCMDAwMDIxNjgwOTQwMDAwN0ZGRjAyMTY4MjIwMDAwNzAwMDdBOAotOjEwMjZDMDAwMDIxNjgyMUMwMDA3MDAwNzAyMTZFNTE4MDAwNzAwMDcyMwotOjEwMjZEMDAwMDIxNkU1MTQwMDA3MDAwNzAyMTY4MjI4MDAwMDAwMDAxOQotOjEwMjZFMDAwMDIxNjgyMjRGRkZGRkZGRjAyMTZFNTIwMDAwMDAwMDAxMwotOjEwMjZGMDAwMDIxNkU1MUNGRkZGRkZGRjAyMTZFNkJDMDAwMDAwMDAwQgotOjEwMjcwMDAwMDIxNkU2QzAwMDAwMDAwMjAyMTZFNkM0MDAwMDAwMDE0NgotOjEwMjcxMDAwMDIxNkU2QzgwMDAwMDAwMzAyMTZFNkNDMDAwMDAwMDQyMgotOjEwMjcyMDAwMDIxNkU2RDAwMDAwMDAwNjAyMTZFNkQ0MDAwMDAwMDVGRQotOjEwMjczMDAwMDIxNkU2RDgwMDAwMDAwNzAyMTY4MEVDMDAwMDAwRkYzOQotOjEwMjc0MDAwMDIxNDAwMDAwMDAwMDAwMTAyMTQwMDBDMDAwMDAwMDE0RgotOjEwMjc1MDAwMDIxNDAwNDAwMDAwMDAwMTAyMTQwMDQ0MDAwMDdGRkY0QQotOjEwMjc2MDAwMDIxNDAwMEMwMDAwMDAwMDAyMTQwMDAwMDAwMDAwMDAzMQotOjEwMjc3MDAwMDIxNDAwNkMwMDAwMDAwMDAyMTQwMDA0MDAwMDAwMDFCQwotOjEwMjc4MDAwMDIxNDAwMzAwMDAwMDAwMTAyMTQwMDA0MDAwMDAwMDBFOAotOjEwMjc5MDAwMDIxNDAwNUMwMDAwMDAwMDAyMTQwMDA4MDAwMDAwMDFBOAotOjEwMjdBMDAwMDIxNDAwMzQwMDAwMDAwMTAyMTQwMDA4MDAwMDAwMDBDMAotOjEwMjdCMDAwMDIxNDAwNjAwMDAwMDAwMDAyMDIwMDU4MDAwMDAwMzIxNQotOjEwMjdDMDAwMDIwMjAwQTAwMzE1MDAyMDAyMDIwMEE0MDMxNTAwMjA0RAotOjEwMjdEMDAwMDIwMjAwQTgwMTAwMDAzMDAyMDIwMEFDMDgxMDAwMDA1NAotOjEwMjdFMDAwMDIwMjAwQjAwMDAwMDAzMzAyMDIwMEI0MDAwMDAwMzAxQQotOjEwMjdGMDAwMDIwMjAwQjgwMDAwMDAzMTAyMDIwMEJDMDAwMDAwMDMyOQotOjEwMjgwMDAwMDIwMjAwQzAwMDAwMDAwNjAyMDIwMEM0MDAwMDAwMDMzMwotOjEwMjgxMDAwMDIwMjAwQzgwMDAwMDAwMzAyMDIwMENDMDAwMDAwMDIxNwotOjEwMjgyMDAwMDIwMjAwRDAwMDAwMDAwMDAyMDIwMEQ0MDAwMDAwMDJGQQotOjEwMjgzMDAwMDIwMjAwREMwMDAwMDAwMDAyMDIwMEUwMDAwMDAwMDZDRQotOjEwMjg0MDAwMDIwMjAwRTQwMDAwMDAwNDAyMDIwMEU4MDAwMDAwMDJBRQotOjEwMjg1MDAwMDIwMjAwRUMwMDAwMDAwMjAyMDIwMEYwMDAwMDAwMDE5MQotOjEwMjg2MDAwMDIwMjAwRkMwMDAwMDAwNjAyMDIwMTIwMDAwMDAwMDAzRAotOjEwMjg3MDAwMDIwMjAxMzQwMDAwMDAwMjAyMDIwMUIwMDAwMDAwMDE2NwotOjEwMjg4MDAwMDIwMjAyMEMwMDAwMDAwMTAyMDIwMjE0MDAwMDAwMDExQQotOjEwMjg5MDAwMDIwMjAyMTgwMDAwMDAwMjAyMDIwNDA0MDAwMDAwMDEwQgotOjEwMjhBMDAwMDIwMjA0MEMwMDAwMDA0MDAyMDIwNDEwMDAwMDAwNDA3QwotOjEwMjhCMDAwMDIwMjA0MUMwMDAwMDAwNDAyMDIwNDIwMDAwMDAwMjBBOAotOjEwMjhDMDAwMDIwMjA0MjQwMDAwMDAwMjAyMDIwNDI4MDAwMDAwMjA4QQotOjEwMjhEMDAwMDYwMjA1MDAwMDAwMDAxMjA0MDIwNDgwMDAxRjAzMjkwNAotOjEwMjhFMDAwMDIwMjAwNjAwMDAwMDAwRjAyMDIwMDY0MDAwMDAwMDcwNgotOjEwMjhGMDAwMDIwMjAwNjgwMDAwMDAwQjAyMDIwMDZDMDAwMDAwMEVFMwotOjEwMjkwMDAwMDIwMjAwNzAwMDAwMDAwRTA2MDIwMDc0MDAwMDAwMDNDNgotOjEwMjkxMDAwMDIwMjAwRjQwMDAwMDAwNDAyMDIwMDA0MDAwMDAwMDFCMgotOjEwMjkyMDAwMDIwMjAwMDgwMDAwMDAwMTAyMDIwMDBDMDAwMDAwMDE4OQotOjEwMjkzMDAwMDIwMjAwMTAwMDAwMDAwMTAyMDIwMDE0MDAwMDAwMDE2OQotOjEwMjk0MDAwMDIwMjAwMTgwMDAwMDAwMTAyMDIwMDFDMDAwMDAwMDE0OQotOjEwMjk1MDAwMDIwMjAwMjAwMDAwMDAwMTAyMDIwMDI0MDAwMDAwMDEyOQotOjEwMjk2MDAwMDIwMjAwMjgwMDAwMDAwMTAyMDIwMDJDMDAwMDAwMDEwOQotOjEwMjk3MDAwMDIwMjAwMzAwMDAwMDAwMTAyMDIwMDM0MDAwMDAwMDFFOQotOjEwMjk4MDAwMDIwMjAwMzgwMDAwMDAwMTAyMDIwMDNDMDAwMDAwMDFDOQotOjEwMjk5MDAwMDIwMjAwNDAwMDAwMDAwMTAyMDIwMDQ0MDAwMDAwMDFBOQotOjEwMjlBMDAwMDIwMjAwNDgwMDAwMDAwMTAyMDIwMDRDMDAwMDAwMDE4OQotOjEwMjlCMDAwMDIwMjAwNTAwMDAwMDAwMTAyMDIwMTA4MDAwMDAwQzhFRAotOjEwMjlDMDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDAxRgotOjEwMjlEMDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDI0QgotOjEwMjlFMDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkYxQwotOjEwMjlGMDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMDBFMgotOjEwMkEwMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDJDQQotOjEwMkExMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDAxNAotOjEwMkEyMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDJFMAotOjEwMkEzMDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkZCNgotOjEwMkE0MDAwMDIwMjAxMDQwMDAwMDAwMDAyMDIwMTA4MDAwMDAwQzhBOAotOjEwMkE1MDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDA4RQotOjEwMkE2MDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDJCQQotOjEwMkE3MDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkY4QgotOjEwMkE4MDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMDA1MQotOjEwMkE5MDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDIzQQotOjEwMkFBMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDA4NAotOjEwMkFCMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDI1MAotOjEwMkFDMDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkYyNgotOjEwMkFEMDAwMDIwMjAxMDQwMDAwMDAwMDAyMDIwMTA4MDAwMDAwQzgxOAotOjEwMkFFMDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDBGRQotOjEwMkFGMDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDIyQQotOjEwMkIwMDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkZGQQotOjEwMkIxMDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMDBDMAotOjEwMkIyMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDJBOQotOjEwMkIzMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDBGMwotOjEwMkI0MDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDJCRgotOjEwMkI1MDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkY5NQotOjEwMkI2MDAwMDIwMjAxMDQwMDAwMDAwMDAyMDIwMTA4MDAwMDAwQzg4NwotOjEwMkI3MDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDA2RAotOjEwMkI4MDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDI5OQotOjEwMkI5MDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkY2QQotOjEwMkJBMDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMDAzMAotOjEwMkJCMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDIxOQotOjEwMkJDMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDA2MwotOjEwMkJEMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDIyRgotOjEwMkJFMDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkYwNQotOjEwMkJGMDAwMDIwMjAxMDQwMDAwMDAwMDA3MjgwNDAwMDBCRDAwMDBEQwotOjEwMkMwMDAwMDgyODA3QTgwMDBCMDM0ODA3MkMwMDAwMzQwNjAwMDAyMgotOjEwMkMxMDAwMDcyQzgwMDAzNzk2MEQwMjA3MkQwMDAwM0JDMzFBRThGMQotOjEwMkMyMDAwMDcyRDgwMDAzODI2MjlEOTA3MkUwMDAwMTI0NTM3RTNFQQotOjEwMkMzMDAwMDgyRTIyMjAzQkJDMDM0QTAxMjgwMDAwMDAwMDAwMDBBRgotOjEwMkM0MDAwMDEyODAwMDQwMDAwMDAwMDAxMjgwMDA4MDAwMDAwMDAyNgotOjEwMkM1MDAwMDEyODAwMEMwMDAwMDAwMDAxMjgwMDEwMDAwMDAwMDAwNgotOjEwMkM2MDAwMDEyODAwMTQwMDAwMDAwMDAyMjgwMDIwMDAwMDAwMDFEQwotOjEwMkM3MDAwMDIyODAwMjQwMDAwMDAwMjAyMjgwMDI4MDAwMDAwMDNBRgotOjEwMkM4MDAwMDIyODAwMkMwMDAwMDAwMDAyMjgwMDMwMDAwMDAwMDQ5MAotOjEwMkM5MDAwMDIyODAwMzQwMDAwMDAwMTAyMjgwMDM4MDAwMDAwMDA3MwotOjEwMkNBMDAwMDIyODAwM0MwMDAwMDAwMTAyMjgwMDQwMDAwMDAwMDQ0RgotOjEwMkNCMDAwMDIyODAwNDQwMDAwMDAwMDAyMjgwMDQ4MDAwMDAwMDEzMwotOjEwMkNDMDAwMDIyODAwNEMwMDAwMDAwMzAyMjgwMDUwMDAwMDAwMDAxMQotOjEwMkNEMDAwMDIyODAwNTQwMDAwMDAwMTAyMjgwMDU4MDAwMDAwMDRFRgotOjEwMkNFMDAwMDIyODAwNUMwMDAwMDAwMDAyMjgwMDYwMDAwMDAwMDFEMwotOjEwMkNGMDAwMDIyODAwNjQwMDAwMDAwMzAyMjgwMDY4MDAwMDAwMDBCMQotOjEwMkQwMDAwMDIyODAwNkMwMDAwMDAwMTAyMjgwMDcwMDAwMDAwMDQ4RQotOjEwMkQxMDAwMDIyODAwNzQwMDAwMDAwMDAyMjgwMDc4MDAwMDAwMDQ2RgotOjEwMkQyMDAwMDIyODAwN0MwMDAwMDAwMzA2MjgwMDgwMDAwMDAwMDI0QQotOjEwMkQzMDAwMDIyODAwQTQwMDAwM0ZGRjAyMjgwMEE4MDAwMDAzRkZCMwotOjEwMkQ0MDAwMDIyODAyMjQwMDAwMDAwMDAyMjgwMjM0MDAwMDAwMDBEMwotOjEwMkQ1MDAwMDIyODAyNEMwMDAwMDAwMDAyMjgwMkU0MDAwMEZGRkZFRAotOjEwMkQ2MDAwMDYyODIwMDAwMDAwMDgwMDAyMkI4QkMwMDAwMDAwMDE5NAotOjEwMkQ3MDAwMDIyQjgwMDAwMDAwMDAwMDAyMkI4MDQwMDAwMDAwMThBMQotOjEwMkQ4MDAwMDIyQjgwODAwMDAwMDAwQzAyMkI4MEMwMDAwMDAwNjYzNwotOjEwMkQ5MDAwMEMyQjgzMDAwMDA3QTEyMDBBMkI4MzAwMDAwMDAxMzhDMAotOjEwMkRBMDAwMEIyQjgzMDAwMDAwMTM4ODAyMkI4M0MwMDAwMDAxRjQ2QQotOjEwMkRCMDAwMEMyQjgzNDAwMDAwMDFGNDBBMkI4MzQwMDAwMDAwMDAyQwotOjEwMkRDMDAwMEIyQjgzNDAwMDAwMDAwNTBBMkI4MzgwMDAwNEM0QjQ1MQotOjEwMkREMDAwMEMyQjgzODAxRENENjUwMDBBMkIxNDgwMDAwMDAwMDBBMQotOjEwMkRFMDAwMEIyQjgzODAwMDRDNEI0MDAyMkIxNDgwMDAwMDAwMDExMQotOjEwMkRGMDAwMDYyQTI5QzgwMDAwMDAwNDA0MkEyOUQ4MDAwMjAzNEMyRQotOjEwMkUwMDAwMDYyQTIwODAwMDAwMDA0ODA2MkE5MDIwMDAwMDAwQzgwMgotOjEwMkUxMDAwMDYyQTkwMDAwMDAwMDAwMjA2MkEyMUE4MDAwMDAwODY3MQotOjEwMkUyMDAwMDYyQTIwMDAwMDAwMDAyMDAyMkEyM0M4MDAwMDAwMDAxQgotOjEwMkUzMDAwMDQyQTIzRDAwMDAyMDM0RTA0MkEyNDk4MDAwNDAzNTBERAotOjEwMkU0MDAwMDIyQTJDMjAwMDAwMDAwMDAyMkEyQzEwMDAwMDAwMDBBMgotOjEwMkU1MDAwMDQyQTJDMDgwMDAyMDM1NDAyMkEzMDEwMDAwMDAwMDE0QQotOjEwMkU2MDAwMDYyQTQwNDAwMDAwMDAxMDA0MkE0MDAwMDAxMDAzNTZDQgotOjEwMkU3MDAwMDYyQTZBQzAwMDAwMDAwMjA2MkE2QjAwMDAwMDAwMDQ1NwotOjEwMkU4MDAwMDQyQTg0MDgwMDAyMDM2NjAyMkIwODAwMDAwMDAwMDBFOAotOjEwMkU5MDAwMDQyQjBDMDAwMDEwMDM2ODAyMkIwODAwMDEwMDAwMDA0NgotOjEwMkVBMDAwMDQyQjBDNDAwMDA4MDM3ODAyMkIwODAwMDIwMDAwMDBFRAotOjEwMkVCMDAwMDQyQjBDNjAwMDA4MDM4MDA2MkFDMDAwMDAwMDAwRkMwMAotOjEwMkVDMDAwMDYyQTI0QTgwMDAwMDAxNDA2MkEyNTQ4MDAwMDAwMjQzMQotOjEwMkVEMDAwMDYyQTI2NjgwMDAwMDAyNDA2MkEyNzg4MDAwMDAwMjQwRAotOjEwMkVFMDAwMDYyQTI4QTgwMDAwMDAyNDA2MkFBMDAwMDAwMDAwMjhDNgotOjEwMkVGMDAwMDYyQUExNDAwMDAwMDAwQzA0MkEyOUUwMDAwMjAzODhGMQotOjEwMkYwMDAwMDIyQTMwMDAwMDAwMDAwMTA2MkE1MDIwMDAwMDAwMDJDMgotOjEwMkYxMDAwMDYyQTUwMzAwMDAwMDAwMjA2MkE1MDAwMDAwMDAwMDI3RAotOjEwMkYyMDAwMDYyQTUwMTAwMDAwMDAwMjAyMkE1MjA4MDAwMDAwMDE4OAotOjEwMkYzMDAwMDQyQTZBQzgwMDAyMDM4QTA2MkE2QjEwMDAwMDAwNDJCNQotOjEwMkY0MDAwMDYyQTZEMjAwMDAwMDAwNDA2MkFDM0YwMDAwMDAwRkNFMQotOjEwMkY1MDAwMDYyQTI0RjgwMDAwMDAxNDA2MkEyNUQ4MDAwMDAwMjRDMAotOjEwMkY2MDAwMDYyQTI2RjgwMDAwMDAyNDA2MkEyODE4MDAwMDAwMjQ1QgotOjEwMkY3MDAwMDYyQTI5MzgwMDAwMDAyNDA2MkFBMEEwMDAwMDAwMjgwNAotOjEwMkY4MDAwMDYyQUExNzAwMDAwMDAwQzA0MkEyOUU4MDAwMjAzOEMyNAotOjEwMkY5MDAwMDIyQTMwMDQwMDAwMDAwMTA2MkE1MDI4MDAwMDAwMDIyNgotOjEwMkZBMDAwMDYyQTUwMzgwMDAwMDAwMjA2MkE1MDA4MDAwMDAwMDJERAotOjEwMkZCMDAwMDYyQTUwMTgwMDAwMDAwMjAyMkE1MjBDMDAwMDAwMDFFQwotOjEwMkZDMDAwMDQyQTZBRDAwMDAyMDM4RTA2MkE2QzE4MDAwMDAwNDIxMAotOjEwMkZEMDAwMDYyQTZEMzAwMDAwMDAwNDAyMkFDN0UwMDAwMDAwMDA0RAotOjEwMkZFMDAwMDQyQTI5RjAwMDEwMDM5MDA2MkE1MDQ4MDAwMDAwMEUyMQotOjEwMkZGMDAwMDIyQUM3RTQwMDAwMDAwMDA0MkEyQTMwMDAxMDAzQTBCRgotOjEwMzAwMDAwMDYyQTUwODAwMDAwMDAwRTAyMkFDN0U4MDAwMDAwMDBENwotOjEwMzAxMDAwMDQyQTJBNzAwMDEwMDNCMDA2MkE1MEI4MDAwMDAwMEVERgotOjEwMzAyMDAwMDIyQUM3RUMwMDAwMDAwMDA0MkEyQUIwMDAxMDAzQzBFNgotOjEwMzAzMDAwMDYyQTUwRjAwMDAwMDAwRTAyMkFDN0YwMDAwMDAwMDAyRgotOjEwMzA0MDAwMDQyQTJBRjAwMDEwMDNEMDA2MkE1MTI4MDAwMDAwMEU5RQotOjEwMzA1MDAwMDIyQUM3RjQwMDAwMDAwMDA0MkEyQjMwMDAxMDAzRTAwRAotOjEwMzA2MDAwMDYyQTUxNjAwMDAwMDAwRTAyMkFDN0Y4MDAwMDAwMDA4NgotOjEwMzA3MDAwMDQyQTJCNzAwMDEwMDNGMDA2MkE1MTk4MDAwMDAwMEU1RAotOjEwMzA4MDAwMDIyQUM3RkMwMDAwMDAwMDA0MkEyQkIwMDAxMDA0MDAzNAotOjEwMzA5MDAwMDYyQTUxRDAwMDAwMDAwRTAyMTAxMDA4MDAwMDAwMDFBNgotOjEwMzBBMDAwMDIxMDEwNTAwMDAwMDAwMTAyMTAxMDAwMDAwM0QwMDBCOAotOjEwMzBCMDAwMDIxMDEwMDQwMDAwMDAzRDA5MTAxODAwMDIwMDA0MTA2NgotOjEwMzBDMDAwMDkxMDExMDAwMDI4MDYxMDA2MTAxMUEwMDAwMDAwMThCOQotOjEwMzBEMDAwMDYxMDI0MDAwMDAwMDBFMDAyMTAyMDFDMDAwMDAwMDA4OAotOjEwMzBFMDAwMDIxMDIwMjAwMDAwMDAwMTAyMTAyMEMwMDAwMDAwMDI5OQotOjEwMzBGMDAwMDIxMDIwMDQwMDAwMDAwMTAyMTAyMDA4MDAwMDAwMDE1RQotOjEwMzEwMDAwMDkxMDNDMDAwMDA1MDYzODA5MTAzODAwMDAwNTA2M0Q4RQotOjEwMzExMDAwMDkxMDM4MjAwMDA1MDY0MjA2MTA0QzAwMDAwMDAxMDA4RQotOjEwMzEyMDAwMDIxMDQwMjgwMDAwMDAxMDAyMTA0MDQ0MDAwMDNGRkY0MQotOjEwMzEzMDAwMDIxMDQwNTgwMDI4MDAwMDAyMTA0MDg0MDA4NDkyNEE4NwotOjEwMzE0MDAwMDIxMDQwNTgwMDAwMDAwMDAyMTA4MDAwMDAwMDEwODBCMwotOjEwMzE1MDAwMDIxMDgwQUMwMDAwMDAwMDAyMTA4MDM4MDAwMDAwMTA1NwotOjEwMzE2MDAwMDIxMDgxMDAwMDAwMDAwMDA2MTA4MTIwMDAwMDAwMDIxMwotOjEwMzE3MDAwMDIxMDgwMDgwMDAwMDJCNTAyMTA4MDEwMDAwMDAwMDA1QwotOjEwMzE4MDAwMDYxMDgyMDAwMDAwMDA0QTAyMTA4MTA4MDAwMUZGRkZDMwotOjEwMzE5MDAwMDYxMDgxNDAwMDAwMDAwMjAyMTA4MDAwMDAwMDFBODAyQQotOjEwMzFBMDAwMDYxMDkwMDAwMDAwMDAyNDA2MTA5MTIwMDAwMDAwNEE0NAotOjEwMzFCMDAwMDYxMDkzNzAwMDAwMDA0QTA2MTA5NUMwMDAwMDAwNEFGNwotOjEwMzFDMDAwMDIxMDgwMDQwMDAwMTA4MDAyMTA4MEIwMDAwMDAwMDE5NgotOjEwMzFEMDAwMDIxMDgwM0MwMDAwMDAxMDAyMTA4MTA0MDAwMDAwMDA3QQotOjEwMzFFMDAwMDYxMDgxMjgwMDAwMDAwMjAyMTA4MDBDMDAwMDAyQjVDOQotOjEwMzFGMDAwMDIxMDgwMTQwMDAwMDAwMDA2MTA4NDAwMDAwMDAwNEE0NQotOjEwMzIwMDAwMDIxMDgxMEMwMDAxRkZGRjA2MTA4MTQ4MDAwMDAwMDIzRgotOjEwMzIxMDAwMDIxMDgwMDQwMDAwMUE4MDA2MTA5MDkwMDAwMDAwMjQyNAotOjEwMzIyMDAwMDYxMDkyNDgwMDAwMDA0QTA2MTA5NDk4MDAwMDAwNEFEOAotOjEwMzIzMDAwMDYxMDk2RTgwMDAwMDA0QTAyMTA4MDAwMDAwMDEwODA4RQotOjEwMzI0MDAwMDIxMDgwQUMwMDAwMDAwMjAyMTA4MDM4MDAwMDAwMTA2NAotOjEwMzI1MDAwMDIxMDgxMDAwMDAwMDAwMDA2MTA4MTIwMDAwMDAwMDIyMgotOjEwMzI2MDAwMDIxMDgwMDgwMDAwMDJCNTAyMTA4MDEwMDAwMDAwMDA2QgotOjEwMzI3MDAwMDYxMDgyMDAwMDAwMDA0QTAyMTA4MTA4MDAwMUZGRkZEMgotOjEwMzI4MDAwMDYxMDgxNDAwMDAwMDAwMjAyMTA4MDAwMDAwMDFBODAzOQotOjEwMzI5MDAwMDYxMDkwMDAwMDAwMDAyNDA2MTA5MTIwMDAwMDAwNEE1MwotOjEwMzJBMDAwMDYxMDkzNzAwMDAwMDA0QTA2MTA5NUMwMDAwMDAwNEEwNgotOjEwMzJCMDAwMDIxMDgwMDQwMDAwMTA4MDAyMTA4MEIwMDAwMDAwMDNBMwotOjEwMzJDMDAwMDIxMDgwM0MwMDAwMDAxMDAyMTA4MTA0MDAwMDAwMDA4OQotOjEwMzJEMDAwMDYxMDgxMjgwMDAwMDAwMjAyMTA4MDBDMDAwMDAyQjVEOAotOjEwMzJFMDAwMDIxMDgwMTQwMDAwMDAwMDA2MTA4NDAwMDAwMDAwNEE1NAotOjEwMzJGMDAwMDIxMDgxMEMwMDAxRkZGRjA2MTA4MTQ4MDAwMDAwMDI0RgotOjEwMzMwMDAwMDIxMDgwMDQwMDAwMUE4MDA2MTA5MDkwMDAwMDAwMjQzMwotOjEwMzMxMDAwMDYxMDkyNDgwMDAwMDA0QTA2MTA5NDk4MDAwMDAwNEFFNwotOjEwMzMyMDAwMDYxMDk2RTgwMDAwMDA0QTAyMTA4MDAwMDAwMDEwODA5RAotOjEwMzMzMDAwMDIxMDgwQUMwMDAwMDAwNDAyMTA4MDM4MDAwMDAwMTA3MQotOjEwMzM0MDAwMDIxMDgxMDAwMDAwMDAwMDA2MTA4MTIwMDAwMDAwMDIzMQotOjEwMzM1MDAwMDIxMDgwMDgwMDAwMDJCNTAyMTA4MDEwMDAwMDAwMDA3QQotOjEwMzM2MDAwMDYxMDgyMDAwMDAwMDA0QTAyMTA4MTA4MDAwMUZGRkZFMQotOjEwMzM3MDAwMDYxMDgxNDAwMDAwMDAwMjAyMTA4MDAwMDAwMDFBODA0OAotOjEwMzM4MDAwMDYxMDkwMDAwMDAwMDAyNDA2MTA5MTIwMDAwMDAwNEE2MgotOjEwMzM5MDAwMDYxMDkzNzAwMDAwMDA0QTA2MTA5NUMwMDAwMDAwNEExNQotOjEwMzNBMDAwMDIxMDgwMDQwMDAwMTA4MDAyMTA4MEIwMDAwMDAwMDVCMAotOjEwMzNCMDAwMDIxMDgwM0MwMDAwMDAxMDAyMTA4MTA0MDAwMDAwMDA5OAotOjEwMzNDMDAwMDYxMDgxMjgwMDAwMDAwMjAyMTA4MDBDMDAwMDAyQjVFNwotOjEwMzNEMDAwMDIxMDgwMTQwMDAwMDAwMDA2MTA4NDAwMDAwMDAwNEE2MwotOjEwMzNFMDAwMDIxMDgxMEMwMDAxRkZGRjA2MTA4MTQ4MDAwMDAwMDI1RQotOjEwMzNGMDAwMDIxMDgwMDQwMDAwMUE4MDA2MTA5MDkwMDAwMDAwMjQ0MwotOjEwMzQwMDAwMDYxMDkyNDgwMDAwMDA0QTA2MTA5NDk4MDAwMDAwNEFGNgotOjEwMzQxMDAwMDYxMDk2RTgwMDAwMDA0QTAyMTA4MDAwMDAwMDEwODBBQwotOjEwMzQyMDAwMDIxMDgwQUMwMDAwMDAwNjAyMTA4MDM4MDAwMDAwMTA3RQotOjEwMzQzMDAwMDIxMDgxMDAwMDAwMDAwMDA2MTA4MTIwMDAwMDAwMDI0MAotOjEwMzQ0MDAwMDIxMDgwMDgwMDAwMDJCNTAyMTA4MDEwMDAwMDAwMDA4OQotOjEwMzQ1MDAwMDYxMDgyMDAwMDAwMDA0QTAyMTA4MTA4MDAwMUZGRkZGMAotOjEwMzQ2MDAwMDYxMDgxNDAwMDAwMDAwMjAyMTA4MDAwMDAwMDFBODA1NwotOjEwMzQ3MDAwMDYxMDkwMDAwMDAwMDAyNDA2MTA5MTIwMDAwMDAwNEE3MQotOjEwMzQ4MDAwMDYxMDkzNzAwMDAwMDA0QTA2MTA5NUMwMDAwMDAwNEEyNAotOjEwMzQ5MDAwMDIxMDgwMDQwMDAwMTA4MDAyMTA4MEIwMDAwMDAwMDdCRAotOjEwMzRBMDAwMDIxMDgwM0MwMDAwMDAxMDAyMTA4MTA0MDAwMDAwMDBBNwotOjEwMzRCMDAwMDYxMDgxMjgwMDAwMDAwMjAyMTA4MDBDMDAwMDAyQjVGNgotOjEwMzRDMDAwMDIxMDgwMTQwMDAwMDAwMDA2MTA4NDAwMDAwMDAwNEE3MgotOjEwMzREMDAwMDIxMDgxMEMwMDAxRkZGRjA2MTA4MTQ4MDAwMDAwMDI2RAotOjEwMzRFMDAwMDIxMDgwMDQwMDAwMUE4MDA2MTA5MDkwMDAwMDAwMjQ1MgotOjEwMzRGMDAwMDYxMDkyNDgwMDAwMDA0QTA2MTA5NDk4MDAwMDAwNEEwNgotOjEwMzUwMDAwMDYxMDk2RTgwMDAwMDA0QTAyMTIwNUIwMDAwMDAwMDExMwotOjEwMzUxMDAwMDIxMjA0OTAwMEUzODM0MDAyMTIwNTE0MDAwMDNDMTBFNAotOjEwMzUyMDAwMDIxMjA2NkMwMDAwMDAwMTAyMTIwNjcwMDAwMDAwMDA4QQotOjEwMzUzMDAwMDIxMjA0OTRGRkZGRkZGRjAyMTIwNDk4RkZGRkZGRkYzNwotOjEwMzU0MDAwMDIxMjA0OUNGRkZGRkZGRjAyMTIwNEEwRkZGRkZGRkYxNwotOjEwMzU1MDAwMDIxMjA0QTRGRkZGRkZGRjAyMTIwNEE4RkZGRkZGRkZGNwotOjEwMzU2MDAwMDIxMjA0QUNGRkZGRkZGRjAyMTIwNEIwRkZGRkZGRkZENwotOjEwMzU3MDAwMDIxMjA0QkNGRkZGRkZGRjAyMTIwNEMwRkZGRkZGRkZBNwotOjEwMzU4MDAwMDIxMjA0QzRGRkZGRkZGRjAyMTIwNEM4RkZGRkZGRkY4NwotOjEwMzU5MDAwMDIxMjA0Q0NGRkZGRkZGRjAyMTIwNEQwRkZGRkZGRkY2NwotOjEwMzVBMDAwMDIxMjA0RDhGRkZGRkZGRjAyMTIwNERDRkZGRkZGRkYzRgotOjEwMzVCMDAwMDIxMjA0RTBGRkZGRkZGRjAyMTIwNEU0RkZGRkZGRkYxRgotOjEwMzVDMDAwMDIxMjA0RThGRkZGRkZGRjAyMTIwNEVDRkZGRkZGRkZGRgotOjEwMzVEMDAwMDIxMjA0RjBGRkZGRkZGRjAyMTIwNEY0RkZGRkZGRkZERgotOjEwMzVFMDAwMDIxMjA0RjhGRkZGRkZGRjAyMTIwNEZDRkZGRkZGRkZCRgotOjEwMzVGMDAwMDIxMjA1MDBGRkZGRkZGRjAyMTIwNTA0RkZGRkZGRkY5RAotOjEwMzYwMDAwMDIxMjA1MDhGRkZGRkZGRjAyMTIwNTBDRkZGRkZGRkY3QwotOjEwMzYxMDAwMDIxMjA1MTBGRkZGRkZGRjAyMTIwNEQ0RkY4MDIwMDBGQQotOjEwMzYyMDAwMDIxMjA0QjRGMDAwNTAwMDAyMTIwNEI4RjAwMDgwMDA0RQotOjEwMzYzMDAwMDIxMjAzOTAwMDAwMDAwODAyMTIwMzlDMDAwMDAwMDgyMAotOjEwMzY0MDAwMDIxMjAzQTAwMDAwMDAwODAyMTIwM0E0MDAwMDAwMDJGRQotOjEwMzY1MDAwMDIxMjAzQkMwMDAwMDAwNDAyMTIwM0MwMDAwMDAwMDVCNwotOjEwMzY2MDAwMDIxMjAzQzQwMDAwMDAwNDAyMTIwM0QwMDAwMDAwMDA5NAotOjEwMzY3MDAwMDIxMjAzNkMwMDAwMDAwMTAyMTIwMzY4MDAwMDAwM0YwOAotOjEwMzY4MDAwMDIxMjAxQkMwMDAwMDA0MDAyMTIwMUMwMDAwMDE4MDgzNAotOjEwMzY5MDAwMDIxMjAxQzQwMDAwMDgwMzAyMTIwMUM4MDAwMDA4MDM1RQotOjEwMzZBMDAwMDIxMjAxQ0MwMDAwMDA0MDAyMTIwMUQwMDAwMDAwMDMxMQotOjEwMzZCMDAwMDIxMjAxRDQwMDAwMDgwMzAyMTIwMUQ4MDAwMDA4MDMxRQotOjEwMzZDMDAwMDIxMjAxREMwMDAwMDgwMzAyMTIwMUUwMDAwMTAwMDMwNQotOjEwMzZEMDAwMDIxMjAxRTQwMDAwMDgwMzAyMTIwMUU4MDAwMDA4MDNERQotOjEwMzZFMDAwMDIxMjAxRUMwMDAwMDAwMzAyMTIwMUYwMDAwMDAwMDNDRQotOjEwMzZGMDAwMDIxMjAxRjQwMDAwMDAwMzAyMTIwMUY4MDAwMDAwMDNBRQotOjEwMzcwMDAwMDIxMjAxRkMwMDAwMDAwMzAyMTIwMjAwMDAwMDAwMDM4QwotOjEwMzcxMDAwMDIxMjAyMDQwMDAwMDAwMzAyMTIwMjA4MDAwMDAwMDM2QgotOjEwMzcyMDAwMDIxMjAyMEMwMDAwMDAwMzAyMTIwMjEwMDAwMDAwMDM0QgotOjEwMzczMDAwMDIxMjAyMTQwMDAwMDAwMzAyMTIwMjE4MDAwMDAwMDMyQgotOjEwMzc0MDAwMDIxMjAyMUMwMDAwMDAwMzAyMTIwMjIwMDAwMDAwMDMwQgotOjEwMzc1MDAwMDIxMjAyMjQwMDAwMDAwMzAyMTIwMjI4MDAwMDI0MDNDNwotOjEwMzc2MDAwMDIxMjAyMkMwMDAwMDAyRjAyMTIwMjMwMDAwMDAwMDk5OQotOjEwMzc3MDAwMDIxMjAyMzQwMDAwMDAxOTAyMTIwMjM4MDAwMDAxODQxMwotOjEwMzc4MDAwMDIxMjAyM0MwMDAwMDE4MzAyMTIwMjQwMDAwMDAzMDYwNAotOjEwMzc5MDAwMDIxMjAyNDQwMDAwMDAxOTAyMTIwMjQ4MDAwMDAwMDY1MgotOjEwMzdBMDAwMDIxMjAyNEMwMDAwMDMwNjAyMTIwMjUwMDAwMDAzMDYzRgotOjEwMzdCMDAwMDIxMjAyNTQwMDAwMDMwNjAyMTIwMjU4MDAwMDBDODY5NgotOjEwMzdDMDAwMDIxMjAyNUMwMDAwMDMwNjAyMTIwMjYwMDAwMDAzMDZGRgotOjEwMzdEMDAwMDIxMjAyNjQwMDAwMDAwNjAyMTIwMjY4MDAwMDAwMDZFNQotOjEwMzdFMDAwMDIxMjAyNkMwMDAwMDAwNjAyMTIwMjcwMDAwMDAwMDZDNQotOjEwMzdGMDAwMDIxMjAyNzQwMDAwMDAwNjAyMTIwMjc4MDAwMDAwMDZBNQotOjEwMzgwMDAwMDIxMjAyN0MwMDAwMDAwNjAyMTIwMjgwMDAwMDAwMDY4NAotOjEwMzgxMDAwMDIxMjAyODQwMDAwMDAwNjAyMTIwMjg4MDAwMDAwMDY2NAotOjEwMzgyMDAwMDIxMjAyOEMwMDAwMDAwNjAyMTIwMjkwMDAwMDAwMDY0NAotOjEwMzgzMDAwMDIxMjAyOTQwMDAwMDAwNjAyMTIwMjk4MDAwMDAwMDYyNAotOjEwMzg0MDAwMDIxMjAyOUMwMDAwMDAwNjAyMTIwMkEwMDAwMDAzMDYwMQotOjEwMzg1MDAwMDIxMjAyQTQwMDAwMDAxMzAyMTIwMkE4MDAwMDAwMDZENwotOjEwMzg2MDAwMDIxMjAyQjAwMDAwMTAwNDAyMTIwMkI0MDAwMDEwMDRBMAotOjEwMzg3MDAwMDIxMjAzMjQwMDEwNjQ0MDAyMTIwMzI4MDAxMDY0NDA2NgotOjEwMzg4MDAwMDIxMjA1QjQwMDAwMDAwMTAyMTIwMUIwMDAwMDAwMDFBNAotOjEwMzg5MDAwMDYwMEEwMDAwMDAwMDAxNjAyMDBBMEVDNTU1NDAwMDAzNQotOjEwMzhBMDAwMDIwMEEwRjA1NTU1NTU1NTAyMDBBMEY0MDAwMDU1NTVGMgotOjEwMzhCMDAwMDIwMEEwRjhGMDAwMDAwMDAyMDBBMEZDNTU1NDAwMDAzNwotOjEwMzhDMDAwMDIwMEExMDA1NTU1NTU1NTAyMDBBMTA0MDAwMDU1NTVCMAotOjEwMzhEMDAwMDIwMEExMDhGMDAwMDAwMDAyMDBBMThDNTU1NDAwMDA3NQotOjEwMzhFMDAwMDIwMEExOTA1NTU1NTU1NTAyMDBBMTk0MDAwMDU1NTU3MAotOjEwMzhGMDAwMDIwMEExOThGMDAwMDAwMDAyMDBBMTlDMDAwMDAwMDA1RQotOjEwMzkwMDAwMDIwMEExQTAwMDAxMDAwMDAyMDBBMUE0MDAwMDUwMTRDOAotOjEwMzkxMDAwMDIwMEExQTgwMDAwMDAwMDAyMDBBNDVDMDAwMDBDMDA0RQotOjEwMzkyMDAwMDIwMEE2MUMwMDAwMDAwMzAyMDBBMDZDRkY1QzAwMDA2NwotOjEwMzkzMDAwMDIwMEEwNzBGRkY1NUZGRjAyMDBBMDc0MDAwMEZGRkYwRgotOjEwMzk0MDAwMDIwMEEwNzhGMDAwMDNFMDAyMDBBMDdDMDAwMDAwMDA2QwotOjEwMzk1MDAwMDIwMEEwODAwMDAwQTAwMDA2MDBBMDg0MDAwMDAwMDU3NgotOjEwMzk2MDAwMDIwMEEwOTgwRkUwMDAwMDA2MDBBMDlDMDAwMDAwMDdFNQotOjEwMzk3MDAwMDIwMEEwQjgwMDAwMDQwMDA2MDBBMEJDMDAwMDAwMDM4NAotOjEwMzk4MDAwMDIwMEEwQzgwMDAwMTAwMDA2MDBBMENDMDAwMDAwMDM0OAotOjEwMzk5MDAwMDIwMEEwRDgwMDAwNDAwMDA2MDBBMERDMDAwMDAwMDNFOAotOjEwMzlBMDAwMDIwMEEwRTgwMDAxMDAwMDA2MDBBMjJDMDAwMDAwMDRCNAotOjEwMzlCMDAwMDIwMEExMENGRjVDMDAwMDAyMDBBMTEwRkZGNTVGRkZGOAotOjEwMzlDMDAwMDIwMEExMTQwMDAwRkZGRjAyMDBBMTE4RjAwMDAzRTBCNAotOjEwMzlEMDAwMDIwMEExMUMwMDAwMDAwMDAyMDBBMTIwMDAwMEEwMDBDNQotOjEwMzlFMDAwMDYwMEExMjQwMDAwMDAwNTAyMDBBMTM4MEZFMDAwMDAzRAotOjEwMzlGMDAwMDYwMEExM0MwMDAwMDAwNzAyMDBBMTU4MDAwMDA4MDBEQQotOjEwM0EwMDAwMDYwMEExNUMwMDAwMDAwMzAyMDBBMTY4MDAwMDIwMDA4NQotOjEwM0ExMDAwMDYwMEExNkMwMDAwMDAwMzAyMDBBMTc4MDAwMDgwMDBGNQotOjEwM0EyMDAwMDYwMEExN0MwMDAwMDAwMzAyMDBBMTg4MDAwMjAwMDA0MwotOjEwM0EzMDAwMDYwMEEyM0MwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDA5RQotOjEwM0E0MDAwMDAwMDAwMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQotOjEwM0E1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgotOjEwM0E2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTAwMzJGMwotOjEwM0E3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgotOjEwM0E4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgotOjEwM0E5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIwMDU2MDAwMDAwMDA5RQotOjEwM0FBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgotOjEwM0FCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgotOjEwM0FDMDAwMDAwMDAwMDAwMDU2MDA4QzAwMDAwMDAwMDAwMDAwMDAxNAotOjEwM0FEMDAwMDA4QzAwOTAwMDkwMDA5NDAwOTQwMDk4MDA5ODAwOUM0NgotOjEwM0FFMDAwMDA5QzAwQTAwMEEwMDBBNDAwQTQwMEE4MDBBODAwQUNCNgotOjEwM0FGMDAwMDBBQzAwQjEwMEIxMDBCMzAwQjMwMEI1MDAwMDAwMDA5RAotOjEwM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQotOjEwM0IxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNTAxMDBFRgotOjEwM0IyMDAwMDEwMDAxMDYwMTA2MDEwQzAxMEMwMTE0MDExNDAxMUMyNQotOjEwM0IzMDAwMDExQzAxMjQwMTI0MDEyQzAxMkMwMTM0MDEzNDAxM0MxRAotOjEwM0I0MDAwMDEzQzAxNDQwMTQ0MDE0QzAwMDAwMDAwMDAwMDAwMDA2MQotOjEwM0I1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQotOjEwM0I2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQotOjEwM0I3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQotOjEwM0I4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQotOjEwM0I5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQotOjEwM0JBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQotOjEwM0JCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotOjEwM0JDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQotOjEwM0JEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQotOjEwM0JFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQotOjEwM0JGMDAwMDAwMDAwMDAwMDAwMDAwMDAxNEMwMTUxMDAwMDAwMDAyNgotOjEwM0MwMDAwMDAwMDAwMDAwMTUxMDE1MjAxNTIwMTUzMDE1MzAxNTRCRgotOjEwM0MxMDAwMDE1NDAxNTUwMTU1MDE1NjAxNTYwMTU3MDE1NzAxNThFQwotOjEwM0MyMDAwMDE1ODAxNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQotOjEwM0MzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAotOjEwM0M0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAotOjEwM0M1MDAwMDE1OTAxNUUwMTVFMDE2QTAxNkEwMTc2MDAwMDAwMDBGRgotOjEwM0M2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAotOjEwM0M3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAotOjEwM0M4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAotOjEwM0M5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAotOjEwM0NBMDAwMDAwMDAwMDAwMDAwMDAwMDAxNzYwMTc3MDAwMDAwMDAyNQotOjEwM0NCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAotOjEwM0NDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAotOjEwM0NEMDAwMDAwMDAwMDAwMTc3MDE5QTAwMDAwMDAwMDAwMDAwMDBEMQotOjEwM0NFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAotOjEwM0NGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAotOjEwM0QwMDAwMDE5QTAxQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQotOjEwM0QxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMwotOjEwM0QyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDMjAxRjNEQwotOjEwM0QzMDAwMDAwMDAwMDAwMDAwMDAwMDAxRjMwMUZBMDFGQTAyMDE5NgotOjEwM0Q0MDAwMDIwMTAyMDgwMjA4MDIwRjAyMEYwMjE2MDIxNjAyMURFQgotOjEwM0Q1MDAwMDIxRDAyMjQwMjI0MDIyQjAyMkIwMjYzMDAwMDAwMDAzOQotOjEwM0Q2MDAwMDAwMDAwMDAwMjYzMDI2NzAyNjcwMjZCMDI2QjAyNkZEMQotOjEwM0Q3MDAwMDI2RjAyNzMwMjczMDI3NzAyNzcwMjdCMDI3QjAyN0Y3QgotOjEwM0Q4MDAwMDI3RjAyODMwMjgzMDJEMTAyRDEwMkVCMDJFQjAzMDUyMAotOjEwM0Q5MDAwMDMwNTAzMDgwMzA4MDMwQjAzMEIwMzBFMDMwRTAzMTFCMwotOjEwM0RBMDAwMDMxMTAzMTQwMzE0MDMxNzAzMTcwMzFBMDMxQTAzMUQ0MwotOjEwM0RCMDAwMDMxRDAzNUUwMzVFMDM2MjAzNjIwMzY2MDM2NjAzNjkxOQotOjEwM0RDMDAwMDM2OTAzNkMwMzZDMDM2RjAzNkYwMzcyMDM3MjAzNzU2MwotOjEwM0REMDAwMDM3NTAzNzgwMzc4MDM3QjAzN0IwMzdFMDM3RTAzN0ZGNQotOjEwM0RFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMwotOjEwM0RGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMwotOjEwM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAzN0YwMzkxMDAwMDAwMDA5QwotOjEwM0UxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgotOjEwM0UyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgotOjEwM0UzMDAwMDAwMDAwMDAwMzkxMDNBNjAzQTYwM0E5MDNBOTAzQUM5NQotOjEwM0U0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgotOjEwM0U1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgotOjEwM0U2MDAwMDNBQzAzRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNwotOjEwM0U3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgotOjEwM0U4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEOTA0REM3NgotOjEwM0U5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgotOjEwM0VBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgotOjEwM0VCMDAwMDAwMDAwMDAwMDAwMDAwMDA0REMwNEUzMDRFMzA0RTc2OQotOjEwM0VDMDAwMDRFNzA0RUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAotOjEwM0VEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgotOjEwM0VFMDAwMDAwMDAwMDAwNEVCMDUyQjAwMDAwMDAwMDAwMDAwMDBCMwotOjEwM0VGMDAwMDUyQjA1MzQwNTM0MDUzRDA1M0QwNTQ2MDU0NjA1NEZCMgotOjEwM0YwMDAwMDU0RjA1NTgwNTU4MDU2MTA1NjEwNTZBMDU2QTA1NzM4MQotOjEwM0YxMDAwMDU3MzA1Q0IwNUNCMDVERDA1REQwNUVGMDVFRjA1RjJFNgotOjEwM0YyMDAwMDVGMjA1RjUwNUY1MDVGODA1RjgwNUZCMDVGQjA1RkVBOQotOjEwM0YzMDAwMDVGRTA2MDEwNjAxMDYwNDA2MDQwNjA3MDYwNzA2MEUyRQotOjEwM0Y0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQotOjEwM0Y1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQotOjEwM0Y2MDAwMDAwMDAwMDAwMDAwMDAwMDA2MEUwNjE0MDAwMDAwMDAyMwotOjEwM0Y3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQotOjEwM0Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQotOjEwM0Y5MDAwMDAwMDAwMDAwNjE0MDYxNzAwMDAwMDAwMDAwMDAwMDBFQQotOjEwM0ZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQotOjEwM0ZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotOjEwM0ZDMDAwMDYxNzA2MUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQotOjEwM0ZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQotOjEwM0ZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQotOjEwM0ZGMDAwMDAwMDAwMDAwMDAwMDAwMDA2MUQwNjJDMDYyQzA2M0JGOQotOjEwNDAwMDAwMDYzQjA2NEEwNjRBMDY1OTA2NTkwNjY4MDY2ODA2NzdCOAotOjEwNDAxMDAwMDY3NzA2ODYwNjg2MDY5NTA2OTUwNzA2MDAwMDAwMDBDOAotOjEwNDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAotOjEwNDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAotOjEwNDA0MDAwMDAwMDAwMDAwNzA2MDcxOTA3MTkwNzJBMDcyQTA3M0I3RgotOjEwNDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAotOjEwNDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAotOjEwNDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMjA0QzA3OQotOjEwNDA4MDAwMDAwMzA5ODAwMDA0MEU0MDAwMDUxMzAwMDAwNjE3QzA1RAotOjEwNDA5MDAwMDAwNzFDODAwMDA4MjE0MDAwMDkyNjAwMDAwQTJBQzBGMQotOjEwNDBBMDAwMDAwQjJGODAwMDBDMzQ0MDAwMEQzOTAwMDAwRTNEQzA4NQotOjEwNDBCMDAwMDAwRjQyODAwMDEwNDc0MDAwMTE0QzAwMDAxMjUwQzAxOQotOjEwNDBDMDAwMDAxMzU1ODAwMDE0NUE0MDAwMTU1RjAwMDAxNjYzQzBBRAotOjEwNDBEMDAwMDAxNzY4ODAwMDE4NkQ0MDAwMTk3MjAwMDAxQTc2QzA0MQotOjEwNDBFMDAwMDAxQjdCODAwMDFDODA0MDAwMUQ4NTAwMDAxRTg5QzBENQotOjEwNDBGMDAwMDAxRjhFODAwMDIwOTM0MDAwMDAyMDAwMDAwMDQwMDA0MAotOjEwNDEwMDAwMDAwMDYwMDAwMDAwODAwMDAwMDBBMDAwMDAwMEMwMDA2RgotOjEwNDExMDAwMDAwMEUwMDAwMDAxMDAwMDAwMDEyMDAwMDAwMTQwMDA1QwotOjEwNDEyMDAwMDAwMTYwMDAwMDAxODAwMDAwMDFBMDAwMDAwMUMwMDA0QgotOjEwNDEzMDAwMDAwMUUwMDAwMDAyMDAwMDAwMDIyMDAwMDAwMjQwMDAzOAotOjEwNDE0MDAwMDAwMjYwMDAwMDAyODAwMDAwMDJBMDAwMDAwMkMwMDAyNwotOjEwNDE1MDAwMDAwMkUwMDAwMDAzMDAwMDAwMDMyMDAwMDAwMzQwMDAxNAotOjEwNDE2MDAwMDAwMzYwMDAwMDAzODAwMDAwMDNBMDAwMDAwM0MwMDAwMwotOjEwNDE3MDAwMDAwM0UwMDAwMDA0MDAwMDAwMDQyMDAwMDAwNDQwMDBGMAotOjEwNDE4MDAwMDAwNDYwMDAwMDA0ODAwMDAwMDRBMDAwMDAwNEMwMDBERgotOjEwNDE5MDAwMDAwNEUwMDAwMDA1MDAwMDAwMDUyMDAwMDAwNTQwMDBDQwotOjEwNDFBMDAwMDAwNTYwMDAwMDA1ODAwMDAwMDVBMDAwMDAwNUMwMDBCQgotOjEwNDFCMDAwMDAwNUUwMDAwMDA2MDAwMDAwMDYyMDAwMDAwNjQwMDBBOAotOjEwNDFDMDAwMDAwNjYwMDAwMDA2ODAwMDAwMDZBMDAwMDAwNkMwMDA5NwotOjEwNDFEMDAwMDAwNkUwMDAwMDA3MDAwMDAwMDcyMDAwMDAwNzQwMDA4NAotOjEwNDFFMDAwMDAwNzYwMDAwMDA3ODAwMDAwMDdBMDAwMDAwN0MwMDA3MwotOjEwNDFGMDAwMDAwN0UwMDAwMDA4MDAwMDAwMDgyMDAwMDAwODQwMDA2MAotOjEwNDIwMDAwMDAwODYwMDAwMDA4ODAwMDAwMDhBMDAwMDAwOEMwMDA0RQotOjEwNDIxMDAwMDAwOEUwMDAwMDA5MDAwMDAwMDkyMDAwMDAwOTQwMDAzQgotOjEwNDIyMDAwMDAwOTYwMDAwMDA5ODAwMDAwMDlBMDAwMDAwOUMwMDAyQQotOjEwNDIzMDAwMDAwOUUwMDAwMDBBMDAwMDAwMEEyMDAwMDAwQTQwMDAxNwotOjEwNDI0MDAwMDAwQTYwMDAwMDBBODAwMDAwMEFBMDAwMDAwQUMwMDAwNgotOjEwNDI1MDAwMDAwQUUwMDAwMDBCMDAwMDAwMEIyMDAwMDAwQjQwMDBGMwotOjEwNDI2MDAwMDAwQjYwMDAwMDBCODAwMDAwMEJBMDAwMDAwQkMwMDBFMgotOjEwNDI3MDAwMDAwQkUwMDAwMDBDMDAwMDAwMEMyMDAwMDAwQzQwMDBDRgotOjEwNDI4MDAwMDAwQzYwMDAwMDBDODAwMDAwMENBMDAwMDAwQ0MwMDBCRQotOjEwNDI5MDAwMDAwQ0UwMDAwMDBEMDAwMDAwMEQyMDAwMDAwRDQwMDBBQgotOjEwNDJBMDAwMDAwRDYwMDAwMDBEODAwMDAwMERBMDAwMDAwREMwMDA5QQotOjEwNDJCMDAwMDAwREUwMDAwMDBFMDAwMDAwMEUyMDAwMDAwRTQwMDA4NwotOjEwNDJDMDAwMDAwRTYwMDAwMDBFODAwMDAwMEVBMDAwMDAwRUMwMDA3NgotOjEwNDJEMDAwMDAwRUUwMDAwMDBGMDAwMDAwMEYyMDAwMDAwRjQwMDA2MwotOjEwNDJFMDAwMDAwRjYwMDAwMDBGODAwMDAwMEZBMDAwMDAwRkMwMDA1MgotOjEwNDJGMDAwMDAwRkUwMDAwMDEwMDAwMDAwMTAyMDAwMDAxMDQwMDAzRgotOjEwNDMwMDAwMDAxMDYwMDAwMDEwODAwMDAwMTBBMDAwMDAxMEMwMDAyRAotOjEwNDMxMDAwMDAxMEUwMDAwMDExMDAwMDAwMTEyMDAwMDAxMTQwMDAxQQotOjEwNDMyMDAwMDAxMTYwMDAwMDExODAwMDAwMTFBMDAwMDAxMUMwMDAwOQotOjEwNDMzMDAwMDAxMUUwMDAwMDEyMDAwMDAwMTIyMDAwMDAxMjQwMDBGNgotOjEwNDM0MDAwMDAxMjYwMDAwMDEyODAwMDAwMTJBMDAwMDAxMkMwMDBFNQotOjEwNDM1MDAwMDAxMkUwMDAwMDEzMDAwMDAwMTMyMDAwMDAxMzQwMDBEMgotOjEwNDM2MDAwMDAxMzYwMDAwMDEzODAwMDAwMTNBMDAwMDAxM0MwMDBDMQotOjEwNDM3MDAwMDAxM0UwMDAwMDE0MDAwMDAwMTQyMDAwMDAxNDQwMDBBRQotOjEwNDM4MDAwMDAxNDYwMDAwMDE0ODAwMDAwMTRBMDAwMDAxNEMwMDA5RAotOjEwNDM5MDAwMDAxNEUwMDAwMDE1MDAwMDAwMTUyMDAwMDAxNTQwMDA4QQotOjEwNDNBMDAwMDAxNTYwMDAwMDE1ODAwMDAwMTVBMDAwMDAxNUMwMDA3OQotOjEwNDNCMDAwMDAxNUUwMDAwMDE2MDAwMDAwMTYyMDAwMDAxNjQwMDA2NgotOjEwNDNDMDAwMDAxNjYwMDAwMDE2ODAwMDAwMTZBMDAwMDAxNkMwMDA1NQotOjEwNDNEMDAwMDAxNkUwMDAwMDE3MDAwMDAwMTcyMDAwMDAxNzQwMDA0MgotOjEwNDNFMDAwMDAxNzYwMDAwMDE3ODAwMDAwMTdBMDAwMDAxN0MwMDAzMQotOjEwNDNGMDAwMDAxN0UwMDAwMDE4MDAwMDAwMTgyMDAwMDAxODQwMDAxRQotOjEwNDQwMDAwMDAxODYwMDAwMDE4ODAwMDAwMThBMDAwMDAxOEMwMDAwQwotOjEwNDQxMDAwMDAxOEUwMDAwMDE5MDAwMDAwMTkyMDAwMDAxOTQwMDBGOQotOjEwNDQyMDAwMDAxOTYwMDAwMDE5ODAwMDAwMTlBMDAwMDAxOUMwMDBFOAotOjEwNDQzMDAwMDAxOUUwMDAwMDFBMDAwMDAwMUEyMDAwMDAxQTQwMDBENQotOjEwNDQ0MDAwMDAxQTYwMDAwMDFBODAwMDAwMUFBMDAwMDAxQUMwMDBDNAotOjEwNDQ1MDAwMDAxQUUwMDAwMDFCMDAwMDAwMUIyMDAwMDAxQjQwMDBCMQotOjEwNDQ2MDAwMDAxQjYwMDAwMDFCODAwMDAwMUJBMDAwMDAxQkMwMDBBMAotOjEwNDQ3MDAwMDAxQkUwMDAwMDFDMDAwMDAwMUMyMDAwMDAxQzQwMDA4RAotOjEwNDQ4MDAwMDAxQzYwMDAwMDFDODAwMDAwMUNBMDAwMDAxQ0MwMDA3QwotOjEwNDQ5MDAwMDAxQ0UwMDAwMDFEMDAwMDAwMUQyMDAwMDAxRDQwMDA2OQotOjEwNDRBMDAwMDAxRDYwMDAwMDFEODAwMDAwMURBMDAwMDAxREMwMDA1OAotOjEwNDRCMDAwMDAxREUwMDAwMDFFMDAwMDAwMUUyMDAwMDAxRTQwMDA0NQotOjEwNDRDMDAwMDAxRTYwMDAwMDFFODAwMDAwMUVBMDAwMDAxRUMwMDAzNAotOjEwNDREMDAwMDAxRUUwMDAwMDFGMDAwMDAwMUYyMDAwMDAxRjQwMDAyMQotOjEwNDRFMDAwMDAxRjYwMDAwMDFGODAwMDAwMUZBMDAwMDAxRkMwMDAxMAotOjEwNDRGMDAwMDAxRkUwMDAwMDIwMDAwMDAwMjAyMDAwMDAyMDQwMDBGRAotOjEwNDUwMDAwMDAyMDYwMDAwMDIwODAwMDAwMjBBMDAwMDAyMEMwMDBFQgotOjEwNDUxMDAwMDAyMEUwMDAwMDIxMDAwMDAwMjEyMDAwMDAyMTQwMDBEOAotOjEwNDUyMDAwMDAyMTYwMDAwMDIxODAwMDAwMjFBMDAwMDAyMUMwMDBDNwotOjEwNDUzMDAwMDAyMUUwMDAwMDIyMDAwMDAwMjIyMDAwMDAyMjQwMDBCNAotOjEwNDU0MDAwMDAyMjYwMDAwMDIyODAwMDAwMjJBMDAwMDAyMkMwMDBBMwotOjEwNDU1MDAwMDAyMkUwMDAwMDIzMDAwMDAwMjMyMDAwMDAyMzQwMDA5MAotOjEwNDU2MDAwMDAyMzYwMDAwMDIzODAwMDAwMjNBMDAwMDAyM0MwMDA3RgotOjEwNDU3MDAwMDAyM0UwMDAwMDI0MDAwMDAwMjQyMDAwMDAyNDQwMDA2QwotOjEwNDU4MDAwMDAyNDYwMDAwMDI0ODAwMDAwMjRBMDAwMDAyNEMwMDA1QgotOjEwNDU5MDAwMDAyNEUwMDAwMDI1MDAwMDAwMjUyMDAwMDAyNTQwMDA0OAotOjEwNDVBMDAwMDAyNTYwMDAwMDI1ODAwMDAwMjVBMDAwMDAyNUMwMDAzNwotOjEwNDVCMDAwMDAyNUUwMDAwMDI2MDAwMDAwMjYyMDAwMDAyNjQwMDAyNAotOjEwNDVDMDAwMDAyNjYwMDAwMDI2ODAwMDAwMjZBMDAwMDAyNkMwMDAxMwotOjEwNDVEMDAwMDAyNkUwMDAwMDI3MDAwMDAwMjcyMDAwMDAyNzQwMDAwMAotOjEwNDVFMDAwMDAyNzYwMDAwMDI3ODAwMDAwMjdBMDAwMDAyN0MwMDBFRgotOjEwNDVGMDAwMDAyN0UwMDAwMDI4MDAwMDAwMjgyMDAwMDAyODQwMDBEQwotOjEwNDYwMDAwMDAyODYwMDAwMDI4ODAwMDAwMjhBMDAwMDAyOEMwMDBDQQotOjEwNDYxMDAwMDAyOEUwMDAwMDI5MDAwMDAwMjkyMDAwMDAyOTQwMDBCNwotOjEwNDYyMDAwMDAyOTYwMDAwMDI5ODAwMDAwMjlBMDAwMDAyOUMwMDBBNgotOjEwNDYzMDAwMDAyOUUwMDAwMDJBMDAwMDAwMkEyMDAwMDAyQTQwMDA5MwotOjEwNDY0MDAwMDAyQTYwMDAwMDJBODAwMDAwMkFBMDAwMDAyQUMwMDA4MgotOjEwNDY1MDAwMDAyQUUwMDAwMDJCMDAwMDAwMkIyMDAwMDAyQjQwMDA2RgotOjEwNDY2MDAwMDAyQjYwMDAwMDJCODAwMDAwMkJBMDAwMDAyQkMwMDA1RQotOjEwNDY3MDAwMDAyQkUwMDAwMDJDMDAwMDAwMkMyMDAwMDAyQzQwMDA0QgotOjEwNDY4MDAwMDAyQzYwMDAwMDJDODAwMDAwMkNBMDAwMDAyQ0MwMDAzQQotOjEwNDY5MDAwMDAyQ0UwMDAwMDJEMDAwMDAwMkQyMDAwMDAyRDQwMDAyNwotOjEwNDZBMDAwMDAyRDYwMDAwMDJEODAwMDAwMkRBMDAwMDAyREMwMDAxNgotOjEwNDZCMDAwMDAyREUwMDAwMDJFMDAwMDAwMkUyMDAwMDAyRTQwMDAwMwotOjEwNDZDMDAwMDAyRTYwMDAwMDJFODAwMDAwMkVBMDAwMDAyRUMwMDBGMgotOjEwNDZEMDAwMDAyRUUwMDAwMDJGMDAwMDAwMkYyMDAwMDAyRjQwMDBERgotOjEwNDZFMDAwMDAyRjYwMDAwMDJGODAwMDAwMkZBMDAwMDAyRkMwMDBDRQotOjEwNDZGMDAwMDAyRkUwMDAwMDMwMDAwMDAwMzAyMDAwMDAzMDQwMDBCQgotOjEwNDcwMDAwMDAzMDYwMDAwMDMwODAwMDAwMzBBMDAwMDAzMEMwMDBBOQotOjEwNDcxMDAwMDAzMEUwMDAwMDMxMDAwMDAwMzEyMDAwMDAzMTQwMDA5NgotOjEwNDcyMDAwMDAzMTYwMDAwMDMxODAwMDAwMzFBMDAwMDAzMUMwMDA4NQotOjEwNDczMDAwMDAzMUUwMDAwMDMyMDAwMDAwMzIyMDAwMDAzMjQwMDA3MgotOjEwNDc0MDAwMDAzMjYwMDAwMDMyODAwMDAwMzJBMDAwMDAzMkMwMDA2MQotOjEwNDc1MDAwMDAzMkUwMDAwMDMzMDAwMDAwMzMyMDAwMDAzMzQwMDA0RQotOjEwNDc2MDAwMDAzMzYwMDAwMDMzODAwMDAwMzNBMDAwMDAzM0MwMDAzRAotOjEwNDc3MDAwMDAzM0UwMDAwMDM0MDAwMDAwMzQyMDAwMDAzNDQwMDAyQQotOjEwNDc4MDAwMDAzNDYwMDAwMDM0ODAwMDAwMzRBMDAwMDAzNEMwMDAxOQotOjEwNDc5MDAwMDAzNEUwMDAwMDM1MDAwMDAwMzUyMDAwMDAzNTQwMDAwNgotOjEwNDdBMDAwMDAzNTYwMDAwMDM1ODAwMDAwMzVBMDAwMDAzNUMwMDBGNQotOjEwNDdCMDAwMDAzNUUwMDAwMDM2MDAwMDAwMzYyMDAwMDAzNjQwMDBFMgotOjEwNDdDMDAwMDAzNjYwMDAwMDM2ODAwMDAwMzZBMDAwMDAzNkMwMDBEMQotOjEwNDdEMDAwMDAzNkUwMDAwMDM3MDAwMDAwMzcyMDAwMDAzNzQwMDBCRQotOjEwNDdFMDAwMDAzNzYwMDAwMDM3ODAwMDAwMzdBMDAwMDAzN0MwMDBBRAotOjEwNDdGMDAwMDAzN0UwMDAwMDM4MDAwMDAwMzgyMDAwMDAzODQwMDA5QQotOjEwNDgwMDAwMDAzODYwMDAwMDM4ODAwMDAwMzhBMDAwMDAzOEMwMDA4OAotOjEwNDgxMDAwMDAzOEUwMDAwMDM5MDAwMDAwMzkyMDAwMDAzOTQwMDA3NQotOjEwNDgyMDAwMDAzOTYwMDAwMDM5ODAwMDAwMzlBMDAwMDAzOUMwMDA2NAotOjEwNDgzMDAwMDAzOUUwMDAwMDNBMDAwMDAwM0EyMDAwMDAzQTQwMDA1MQotOjEwNDg0MDAwMDAzQTYwMDAwMDNBODAwMDAwM0FBMDAwMDAzQUMwMDA0MAotOjEwNDg1MDAwMDAzQUUwMDAwMDNCMDAwMDAwM0IyMDAwMDAzQjQwMDAyRAotOjEwNDg2MDAwMDAzQjYwMDAwMDNCODAwMDAwM0JBMDAwMDAzQkMwMDAxQwotOjEwNDg3MDAwMDAzQkUwMDAwMDNDMDAwMDAwM0MyMDAwMDAzQzQwMDAwOQotOjEwNDg4MDAwMDAzQzYwMDAwMDNDODAwMDAwM0NBMDAwMDAzQ0MwMDBGOAotOjEwNDg5MDAwMDAzQ0UwMDAwMDNEMDAwMDAwM0QyMDAwMDAzRDQwMDBFNQotOjEwNDhBMDAwMDAzRDYwMDAwMDNEODAwMDAwM0RBMDAwMDAzREMwMDBENAotOjEwNDhCMDAwMDAzREUwMDAwMDNFMDAwMDAwM0UyMDAwMDAzRTQwMDBDMQotOjEwNDhDMDAwMDAzRTYwMDAwMDNFODAwMDAwM0VBMDAwMDAzRUMwMDBCMAotOjEwNDhEMDAwMDAzRUUwMDAwMDNGMDAwMDAwM0YyMDAwMDAzRjQwMDA5RAotOjEwNDhFMDAwMDAzRjYwMDAwMDNGODAwMDAwM0ZBMDAwMDAzRkMwMDA4QwotOjEwNDhGMDAwMDAzRkUwMDAwMDNGRTAwMTAwMDAwMDAwMDAwMDAxRkY3OQotOjEwNDkwMDAwMDAwMDAyMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDA3MDRBQwotOjEwNDkxMDAwMDAwMDM1MDAwMDAwMDAwMUZGRkZGRkZGRkZGRkZGRkY2OQotOjEwNDkyMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5NwotOjEwNDkzMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY4NwotOjEwNDk0MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3NwotOjEwNDk1MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY2NwotOjEwNDk2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY1NwotOjEwNDk3MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY0NwotOjEwNDk4MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYzNwotOjEwNDk5MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAyMwotOjEwNDlBMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkYxMwotOjEwNDlCMDAwMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZGRgotOjEwNDlDMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDBFRgotOjEwNDlEMDAwRkZGRkZGRkYwMDAwMDAwMzAwQkVCQzIwRkZGRkZGRkY0MgotOjEwNDlFMDAwMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZDRgotOjEwNDlGMDAwMDAwMDAwMDMwMEJFQkMyMEZGRkZGRkZGMDAwMDAwMDAxRQotOjEwNEEwMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDNBQgotOjEwNEExMDAwMDBCRUJDMjBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkYwNAotOjEwNEEyMDAwMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAzMDBCRUJDMjBFRAotOjEwNEEzMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDA3RQotOjEwNEE0MDAwRkZGRkZGRkYwMDAwMDAwMzAwQkVCQzIwRkZGRkZGRkZEMQotOjEwNEE1MDAwMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkY1RQotOjEwNEE2MDAwMDAwMDAwMDMwMEJFQkMyMDAwMDAyMDAwMDAwMDQwQzA4OQotOjEwNEE3MDAwMDAwMDYxODAwMDAwODI0MDAwMDBBMzAwMDAwMEMzQzA2RAotOjEwNEE4MDAwMDAwMEU0ODAwMDAxMDU0MDAwMDEyNjAwMDAwMTQ2QzA0RQotOjEwNEE5MDAwMDAwMTY3ODAwMDAxODg0MDAwMDFBOTAwMDAwMUM5QzAzMQotOjEwNEFBMDAwMDAwMUVBODAwMDAyMEI0MDAwMDIyQzAwMDAwMjRDQzAxMgotOjEwNEFCMDAwMDAwMjZEODAwMDAyOEU0MDAwMDJBRjAwMDAwMkNGQzBGNQotOjEwNEFDMDAwMDAwMkYwODAwMDAzMTE0MDAwMDMzMjAwMDAwMzUyQzBENgotOjEwNEFEMDAwMDAwMzczODAwMDAzOTQ0MDAwMDNCNTAwMDAwM0Q1QzBCOQotOjEwNEFFMDAwMDAwM0Y2ODAwMDA0MTc0MDAwMDQzODAwMDAwNDU4QzA5QQotOjEwNEFGMDAwMDAwNDc5ODAwMDA0OUE0MDAwMDA4MDAwMDAwMTAzODBENwotOjEwNEIwMDAwMDAwMTg3MDAwMDAyMEE4MDAwMDI4RTAwMDAwMzExODA2RAotOjEwNEIxMDAwMDAwMzk1MDAwMDA0MTg4MDAwMDQ5QzAwMDAwNTFGODAxRAotOjEwNEIyMDAwMDAwNUEzMDAwMDA2MjY4MDAwMDZBQTAwMDAwNzJEODBDRAotOjEwNEIzMDAwMDAwN0IxMDAwMDA4MzQ4MDAwMDhCODAwMDAwOTNCODA3RAotOjEwNEI0MDAwMDAwOUJGMDAwMDBBNDI4MDAwMEFDNjAwMDAwQjQ5ODAyRAotOjEwNEI1MDAwMDAwQkNEMDAwMDBDNTA4MDAwMENENDAwMDAwRDU3ODBERAotOjEwNEI2MDAwMDAwRERCMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDA0ODdFNAotOjEwNEI3MDAwMDAwMDE1MDAwMDAwMTkwMDAwMDAwMDI4MDAxMDAwMDBDRgotOjEwNEI4MDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGNDAwMDAwMDBFOQotOjEwNEI5MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAxNQotOjEwNEJBMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAwNQotOjEwNEJCMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBGNQotOjEwNEJDMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFNQotOjEwNEJEMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBENQotOjEwNEJFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBDNQotOjEwNEJGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBCNQotOjEwNEMwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDdGRjg2RAotOjEwNEMxMDAwMDAwMDdGRjgwMDAwMDNFMDAwMDAxNTAwRkZGRkZGRkYyOQotOjEwNEMyMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5NAotOjEwNEMzMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY4NAotOjEwNEM0MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3NAotOjEwNEM1MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY2NAotOjEwNEM2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY1NAotOjEwNEM3MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY0NAotOjEwNEM4MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYzNAotOjEwNEM5MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNDAwMDAwMDBFMAotOjEwNENBMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAwNAotOjEwNENCMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBGNAotOjEwNENDMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFNAotOjEwNENEMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBENAotOjEwNENFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBDNAotOjEwNENGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBCNAotOjEwNEQwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBBMwotOjEwNEQxMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDEwMDBDMwotOjEwNEQyMDAwMDAwMDIwODAwMDAwMzEwMDAwMDA0MTgwMDAwMDUyMDA5RgotOjEwNEQzMDAwMDAwMDYyODAwMDAwNzMwMDAwMDA4MzgwMDAwMDk0MDA4NwotOjEwNEQ0MDAwMDAwMEE0ODAwMDAwQjUwMDAwMDBDNTgwMDAwMEQ2MDA2RgotOjEwNEQ1MDAwMDAwMEU2ODAwMDAwRjcwMDAwMDEwNzgwMDAwMTE4MDA1NQotOjEwNEQ2MDAwMDAwMTI4ODAwMDAxMzkwMDAwMDE0OTgwMDAwMTVBMDAzQgotOjEwNEQ3MDAwMDAwMTZBODAwMDAxN0IwMDAwMDE4QjgwMDAwMTlDMDAyMwotOjEwNEQ4MDAwMDAwMUFDODAwMDAxQkQwMDAwMDFDRDgwMDAwMURFMDAwQgotOjEwNEQ5MDAwMDAwMUVFODAwMDAxRkYwMDAwMDA3RkY4MDAwMDdGRjhCNgotOjEwNERBMDAwMDAwMDAyM0UwMDAwMzUwMDEwMDAwMDAwMDAwMDI4QURBOQotOjEwNERCMDAwMDAwMDAwMDAwMDAxMDAwMTAwMzUwODA0Q0NDQ0NDQzU4NwotOjEwNERDMDAwRkZGRkZGRkZGRkZGRkZGRjcwNTgxMDNDMDAwMDAwMDBENwotOjEwNEREMDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0MzRAotOjEwNERFMDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0MyRAotOjEwNERGMDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0MxRAotOjEwNEUwMDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0MwQwotOjEwNEUxMDAwMDAwMDAwMDBGRkZGRkZGRjQwMDAwMDAwNDAwMDAwMDAxNgotOjEwNEUyMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA4MgotOjEwNEUzMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA3MgotOjEwNEU0MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA2MgotOjEwNEU1MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA1MgotOjEwNEU2MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MgotOjEwNEU3MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAzMgotOjEwNEU4MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAyMgotOjEwNEU5MDAwNDAwMDAwMDA0MDAwMDAwMDAwMEUwMjMyMDExNjAwRDY2MwotOjEwNEVBMDAwMDAxMDAwMDAwMDAwMDAwMDAwNzIwMjM2MDEyMzAwRjMzMQotOjEwNEVCMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFNAotOjEwNEVDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFNgotOjEwNEVEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBENgotOjEwNEVFMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBDNgotOjEwNEVGMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBCNgotOjEwNEYwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBBNQotOjEwNEYxMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA5NQotOjEwNEYyMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA4NQotOjEwNEYzMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA3NQotOjEwNEY0MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2NQotOjEwNEY1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1NQotOjEwNEY2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0NQotOjEwNEY3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzNQotOjEwNEY4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAyNQotOjEwNEY5MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxNQotOjEwNEZBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwNQotOjEwNEZCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGNQotOjEwNEZDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFNQotOjEwNEZEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBENQotOjEwNEZFMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBDNQotOjEwNEZGMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBCNQotOjEwNTAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBBNAotOjEwNTAxMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA5NAotOjEwNTAyMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA4NAotOjEwNTAzMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA3NAotOjEwNTA0MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2NAotOjEwNTA1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1NAotOjEwNTA2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0NAotOjEwNTA3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzNAotOjEwNTA4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAyNAotOjEwNTA5MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxNAotOjEwNTBBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwNAotOjEwNTBCMDAwMDAwMEZGRkYwMDAwMDAwMEZGRkZGRkYzMzIwRkZGRkZDMwotOjEwNTBDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyNAotOjEwNTBEMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzBFRkZGRkY4NgotOjEwNTBFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwNAotOjEwNTBGMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZGMAotOjEwNTEwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFMwotOjEwNTExMDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY3RAotOjEwNTEyMDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjNCNQotOjEwNTEzMDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZDMAotOjEwNTE0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNBMwotOjEwNTE1MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkZCNAotOjEwNTE2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4MwotOjEwNTE3MDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3MzFFRkZGRkZDRQotOjEwNTE4MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2MwotOjEwNTE5MDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzAyRkZGRkY2MQotOjEwNTFBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM0MwotOjEwNTFCMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzEwRkZGRkY0MgotOjEwNTFDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyMwotOjEwNTFEMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkY2NAotOjEwNTFFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMwotOjEwNTFGMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZFRgotOjEwNTIwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFMgotOjEwNTIxMDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY3QwotOjEwNTIyMDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjNCNAotOjEwNTIzMDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZCRgotOjEwNTI0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNBMgotOjEwNTI1MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkZCMwotOjEwNTI2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4MgotOjEwNTI3MDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3MzBFRkZGRkZDRQotOjEwNTI4MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2MgotOjEwNTI5MDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzA0RkZGRkY0MAotOjEwNTJBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM0MgotOjEwNTJCMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzFFRkZGRkY2MQotOjEwNTJDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyMgotOjEwNTJEMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkY2MwotOjEwNTJFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMgotOjEwNTJGMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZFRQotOjEwNTMwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFMQotOjEwNTMxMDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY3QgotOjEwNTMyMDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjNCMwotOjEwNTMzMDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZCRQotOjEwNTM0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNBMQotOjEwNTM1MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkZCMgotOjEwNTM2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4MQotOjEwNTM3MDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3MDU2RkZGRkZEOAotOjEwNTM4MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM5NAotOjEwNTM5MDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzEwRkZGRkY3RQotOjEwNTNBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM0MQotOjEwNTNCMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzIwRkZGRkYzRgotOjEwNTNDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyMQotOjEwNTNEMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkY2MgotOjEwNTNFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMQotOjEwNTNGMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZFRAotOjEwNTQwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFMAotOjEwNTQxMDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY3QQotOjEwNTQyMDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjNCMgotOjEwNTQzMDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZCRAotOjEwNTQ0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNBMAotOjEwNTQ1MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRjhBMDQyRkZGRkY0RAotOjEwNTQ2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjNCMwotOjEwNTQ3MDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3MDVDRkZGRkY3NwotOjEwNTQ4MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM5MwotOjEwNTQ5MDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzEwRkZGRkY3RAotOjEwNTRBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM0MAotOjEwNTRCMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzE2RkZGRkZERgotOjEwNTRDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyMAotOjEwNTREMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzAyRkZGRkY0MgotOjEwNTRFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwMAotOjEwNTRGMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZFQwotOjEwNTUwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNERgotOjEwNTUxMDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkY2MzBCRkZGRkY2QQotOjEwNTUyMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzE0RjNDRjNDRjNBQgotOjEwNTUzMDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZCQwotOjEwNTU0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM5RgotOjEwNTU1MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkZCMAotOjEwNTU2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM3RgotOjEwNTU3MDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3MzFDRkZGRkZFQQotOjEwNTU4MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM1RgotOjEwNTU5MDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkYwMzA3RkZGRkYxMgotOjEwNTVBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMzRgotOjEwNTVCMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3MwotOjEwNTVDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1MwotOjEwNTVEMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5MwotOjEwNTVFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzMwotOjEwNTVGMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3MgotOjEwNTYwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxMgotOjEwNTYxMDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1MAotOjEwNTYyMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGMgotOjEwNTYzMDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYyRQotOjEwNTY0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNEMgotOjEwNTY1MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwQQotOjEwNTY2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCMgotOjEwNTY3MDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFMgotOjEwNTY4MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5MgotOjEwNTY5MDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZCMgotOjEwNTZBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3MgotOjEwNTZCMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3MgotOjEwNTZDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1MgotOjEwNTZEMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5MgotOjEwNTZFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzMgotOjEwNTZGMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3MQotOjEwNTcwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxMQotOjEwNTcxMDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY0RgotOjEwNTcyMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGMQotOjEwNTczMDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYyRAotOjEwNTc0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNEMQotOjEwNTc1MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwOQotOjEwNTc2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCMQotOjEwNTc3MDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFMQotOjEwNTc4MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5MQotOjEwNTc5MDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZCMQotOjEwNTdBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3MQotOjEwNTdCMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3MQotOjEwNTdDMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1MQotOjEwNTdEMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5MQotOjEwNTdFMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzMQotOjEwNTdGMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3MAotOjEwNTgwMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxMAotOjEwNTgxMDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY0RQotOjEwNTgyMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGMAotOjEwNTgzMDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYyQwotOjEwNTg0MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNEMAotOjEwNTg1MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYwOAotOjEwNTg2MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCMAotOjEwNTg3MDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFMAotOjEwNTg4MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5MAotOjEwNTg5MDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZCMAotOjEwNThBMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3MAotOjEwNThCMDAwMDA0MENGM0NDRENEQ0RDRDAwMTAwMDAwMDAwNzAxMDA1MQotOjEwNThDMDAwMDAwMjgxNzAwMDBCODE5ODAwMDIwMjUwMDAwMTAyNzBGQQotOjEwNThEMDAwMDAwRjAyODAwMDAxMDM3MDAwMDgwMDAwMDAwODAwODAzMwotOjEwNThFMDAwMDAwMjgxMDAwMDBCODEyODAwMDIwMUUwMDAwMTAyMDA5QgotOjEwNThGMDAwMDAwNzAyMTAwMDAyMDI4MDAwMEYwMDAwMDAwODAwRjAwNAotOjEwNTkwMDAwMDAwMjgxNzAwMDBCODE5ODAwMDIwMjUwMDAwMTAyNzBCOQotOjEwNTkxMDAwMDAwQjgyODAwMDA4MDMzODAwMTAwMDAwMDAwODAxMDAxRQotOjEwNTkyMDAwMDAwMjgxODAwMDBCODFBODAwMDIwMjYwMDAwMTgyODBEOQotOjEwNTkzMDAwMDAwRTgyOTgwMDA4MDM4MDAwMEIwMDAwMDAwMTAwQjBGOAotOjEwNTk0MDAwMDAwMjgwQzAwMDA1ODBFODAwMDIwMTQwMDAwMTAxNjAwMwotOjEwNTk1MDAwMDAwRTAxNzAwMDAzODI1MENDQ0NDQ0NDQ0NDQ0NDQ0M5MwotOjEwNTk2MDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzAwMDAyMDAwQ0NDQ0NDQ0M4NwotOjEwNTk3MDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDMDAwMDIwMDA3NwotOjEwNTk4MDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M1NwotOjEwNTk5MDAwMDQwMDIwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAzMQotOjEwNTlBMDAwMDBGRkZCNTFDRkMwRjAwMzhBMjc3MDMzMzA5Q0UzNDVFMgotOjEwNTlCMDAwRjBFOTgxODMxODI5RDM1RkM2Q0VDMDUwMDFDNDU1NDA5OQotOjEwNTlDMDAwQkMwQjg4M0ZCMTMyMzA3QzY2MjU1RUZGMzUyOTA0REI5NQotOjEwNTlEMDAwNDg4MjgxMjExRTg4RDc4ODMxMzBBODQ5MjJDNDFEQTQ1RAotOjEwNTlFMDAwMTkxODI2MDNGOUExNTBCMTQ3NDAzQTVGOEEzMjc3MEY2MAotOjEwNTlGMDAwMTY5Q0E2ODAyOUU2MkE4NzYwQTc2MzkxNDdDNjE5Njg4NgotOjEwNUEwMDAwRjI0QkU1NTBGOTk5MDRGNDBGMzRCRUEyOEVDQUZGQTJGRQotOjEwNUExMDAwMEFBMTEzQTBFMjU3RDFFNEJGNDJFNTNCQTBGRUJBQTYxQgotOjEwNUEyMDAwOEVERERDNEUzMkZENURDMzAyQTEwMUZDOTlCMDQ3OThDQQotOjEwNUEzMDAwMDMwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBCMQotOjEwNUE0MDAwMDBGRkVEN0QwQjc4NTRENUI1RjAzRTczMUUzMzkzNzk4RQotOjEwNUE1MDAwRTQyNEU0MzE4MTEwNEUxRTIwNjgwODAzODQ4ODhBQjc0QwotOjEwNUE2MDAwMjcxMDMwRjZEMjc2NzhENTU4MkQwRUFGMTBGMjg2NkIwRgotOjEwNUE3MDAwMkRCREI2N0YwNjA4NDk3OEE4QzExRjExQURENUUxMjkxMwotOjEwNUE4MDAwRjY4MjFEMzEyMkI2ODgwMzI4RDJBQkJEMzc1ODdDNTUyQgotOjEwNUE5MDAwRUIxRkQxMEI4QTkwNDQyQTZBRUZCNUU1RUVCNUY2M0VDRQotOjEwNUFBMDAwQzk5QzkzMDkwNDdCREJBRkZGRkZGRDdDOUZFRUVDQzczNQotOjEwNUFCMDAwRDk3QkVERjVEQTZCQURGRDE4QzkzMTgxQTQwRDIzRTQ3NgotOjEwNUFDMDAwMjJGQ0ZCMDYyMTkyOUQxMDMyQTEzNzlERTMyMDIxRDdCNQotOjEwNUFEMDAwMTg0MjkyNjYyRkZEREQ5MjE0NDJEQ0JBRTJCRjQ5QTM2MAotOjEwNUFFMDAwQTlCQkZFRTQxQTlBNUY1RkVDRjBBRkE0NEQ1QjFGNERCQgotOjEwNUFGMDAwNzg2QTA5MkRCRkVGQTEyRkMzNEZEMDdDRkFFQzc5QURBNgotOjEwNUIwMDAwQzVCNDdFQ0UyNEM5MEY1RDFEMUFBQjEwMDJFREU3RDhENwotOjEwNUIxMDAwQzI3NjAxNTI4MUU1OTc5MDMwQTE3RjkyQUZFOEY4NDVCNwotOjEwNUIyMDAwODRCOEU4OUYyNDk3RkUzNzg5MUNCMkE1NjAzRUU0RDE3MwotOjEwNUIzMDAwQTA5RTAyOTk0NjQ4MzYzMUZFNTU2MDdFMzZGQzA5RjUzNgotOjEwNUI0MDAwNDQ3NzY3RDBFRjc1OUU3N0U1MTNFQzdGOEU1RjBBREJCNQotOjEwNUI1MDAwRTk0NzczRjIwMzcyQzg0REQzQzYwODZENDlDNzFERkJGMAotOjEwNUI2MDAwNUQzOTA4RjlDMDBDOTlFNDYzODdCNkQ4RkU2RkNBMEY5NwotOjEwNUI3MDAwNEM3NTE0RDJGRTY3MEIwOEZGRjlEOTQ5MzZEQTgyQ0M4RQotOjEwNUI4MDAwQTZFREUxM0IyMjRFMUYxQUNDNjc5RkQ5RThCOERGRTBCMwotOjEwNUI5MDAwREZERERGNDBGRkE3QzA1RjRCMDlBMUU1Q0IxQzBDOUVGQQotOjEwNUJBMDAwRTREOUQ5QzUzMENFODkxOUQ3MTY0M0JGNzNBNjEzMzJBRAotOjEwNUJCMDAwODg1NjREOUQzREY2OTA0NEYzRUIxQTg5REY0RURCQ0RDMAotOjEwNUJDMDAwMjkwRDFDQ0Y4MUQ5RjhDQkE3OTMwMkU4OTc4RUVFNjAwMAotOjEwNUJEMDAwN0Q1RkM0RkZFQjM4RUY2NDNFREUzRkNDMUUyQjEwRkEzNgotOjEwNUJFMDAwNDFGNjk3OEFBOTVENzJBMEY5NTNEMTRCNDg2QTA1MkRGOQotOjEwNUJGMDAwMUYxOTUzRUU5Rjc2OUFEMEYyRTRFOUU2RjY0MDEzNzI0RAotOjEwNUMwMDAwMUQyMTI1QzQ5MzcyRUExQUZBNzcxNkM5QkEyODQyQUQ0MwotOjEwNUMxMDAwNkEwQjhDRUVFNTBGNkI0QUZGRkRGOTIyRDAwMUZBMTJGOAotOjEwNUMyMDAwRkJENjFGNkE5Q0U5RTlBMEY4NUEzNzdCOTY4N0QwRjQyNwotOjEwNUMzMDAwRjVDMDJDMEZFMEVGRjVEOUIzMTA4RkQ2RjY3MzY2Njc3OQotOjEwNUM0MDAwMjcwMjVFRkIxQkVGRkUwNjNBRDAwOEZBM0RDN0IzQjU0QwotOjEwNUM1MDAwN0U5MDQ4RUEyM0Y0RkIzOTNBRDFDMzMxRkRERjAxOTM0QQotOjEwNUM2MDAwNEQyNTY0MDkzMDFCNERCMzI1RDVBNkQyRkE2QzhERThCRAotOjEwNUM3MDAwOTEzOEUzOTUwMkIxNjkzQjkyNDk5OTI4RTM1MkYzMEZCOQotOjEwNUM4MDAwNjFCQjM3MjZEOTRBQzM3MUU2NzMwN0VGQzc1NTFBQjgwNwotOjEwNUM5MDAwNjcwRUE1NkZENjc0MTI3NTUxQkExMjI5QUFDNkUyNzU5RAotOjEwNUNBMDAwNUQ4QTU0MUE4RTAzQzdERDFDNUU0MjY4N0JDRkMwRTE1QgotOjEwNUNCMDAwNzE2NUQ4MDJEMDlGMzI0NzBDQzRDMkY1MDM4MDY3NDI5OQotOjEwNUNDMDAwNkY0QUEyNENFRUU2RjgxOEZENzJCRkZCNkM1MDhGMzNBMgotOjEwNUNEMDAwOEZCQjAwOEUwOTkwQUFFQzNCMEU4RjBDN0M5MzAxQjIxNwotOjEwNUNFMDAwOTY4MkZDNDNDMjYzMjRFMEZCQ0MxRUI5MjQwMTA3RTU4NQotOjEwNUNGMDAwOEZBMUYwMTcxNUFFMkRBNDdCRDQxMjE0QjI1NkVDNDcyOQotOjEwNUQwMDAwRjRBNDI0MDNCRDU3MTFERTBGMjk1MTRGNTE3RTE1NDJEMwotOjEwNUQxMDAwQUI4NDhCRDc1QzZBOUUxMjM5NjVGMDM1RjBBOTNCMTlDQwotOjEwNUQyMDAwQzdCRjFDNUU0OEEwMThFNTUyMzFENDg4NzhDMDA3RTM4RAotOjEwNUQzMDAwMkJGOTRERUQwMkE1Q0JCQUQxRTU3RTk0NkY4QTIxOTA2NwotOjEwNUQ0MDAwMzM0MzdFRTFERjU3RjQzQjM3RkZDQ0JEOUNEMjkxQ0E5MQotOjEwNUQ1MDAwOTE2QjM5RDM4RjhBREYyQzY3RUI5MjhFQjUwODIwQzgwMAotOjEwNUQ2MDAwNjRCOTQ5MEYxMDEyMjQ0MDc3MDM2RkVCQkVBMjc4QkNEMAotOjEwNUQ3MDAwMDRCRjVCRkJERDZGQzhFNzYwMzI5OEM5Mjc5MzNGMDUxRQotOjEwNUQ4MDAwRkEwN0JENzlEMzdFMDdGMEY1M0FERjVFMDdDQzZCNUQ4RAotOjEwNUQ5MDAwRkU1RTgyN0E4QUQzQzdFOEQ3OTVBRjVENTJDRUQ2ODFCMAotOjEwNURBMDAwN0M4RDgwRUVDMzQ4QTc5RUYyRDFBN0M2MDI3RTc2QTY2MAotOjEwNURCMDAwMkFGNzhCNzQ3RTNCOTMwOEVBRDk3NTZCNDg3ODJCRDAxMQotOjEwNURDMDAwQjU5NEU1QjU2RjY5RTFCNTc0OEUzQjlEQkNCRTk4RDZDMAotOjEwNUREMDAwRDNCQzA2RURBOUJFREIzQTQ5MEI4NzY4N0U2QjhCOEQ4MQotOjEwNURFMDAwQjUxRkFCODU0NTlBMUYzMTkxODQxNDhBNEY2REM1QzI4QQotOjEwNURGMDAwOTU0RTVBQkU3NUEzRUExN0I1NUVGRDM0QTIyNTY3MkRGMAotOjEwNUUwMDAwQjRERkIyREVBNjBBRjBCRDhGQUQyMzNCRjM0OTM4NDRDMAotOjEwNUUxMDAwQzdERkIxMzlGOTlCMjM2OTNFMTRCMkY5ODdEMzRGRjIzQQotOjEwNUUyMDAwRjhGQTQ1RDlBNTQ0MjgwMkI0MzEzQTlDMjE3OTVDQUVGMAotOjEwNUUzMDAwMDQwMkU1QTlCQzdDQ0I3RUZGQkY4RUE0RjAzRDM2NUQ5RAotOjEwNUU0MDAwRjJBRkEwNDUzQkQ2Q0Y0Q0QwMjg5RTc2Njg4MTA0M0Y2OAotOjEwNUU1MDAwNEQ3RkYwQzA3Q0NDRUZDQzBDMjYwMERENzY2RTlDOUY5NQotOjEwNUU2MDAwMDA0Q0YxQzBFNjk5MUI0NjQxN0I2MUQyNjExREU5NkM5MwotOjEwNUU3MDAwRDZGRjQ3MUYyODNBRUMwMDM4NEI5OTlFNEY2QTBEN0U5QgotOjEwNUU4MDAwNTNBMkY5QkM0OTEyQjk4OTRFMjFDRkFEMjFEQ0RCMUZFOQotOjEwNUU5MDAwQjIxMTU4NEZGQkU4NkQ4QkJFNEVENENENzk1N0VCQjRBMQotOjEwNUVBMDAwOEY4MTdGNUQwRjE2MDkyMERBM0IzNTg2RTc0MTM3OTJGNwotOjEwNUVCMDAwRjA4QUVDQkVFM0VGNUNDOEVBMTMyOTVEODAwRTJFQkZDQQotOjEwNUVDMDAwNjI1OTY3OTY1QUY4NTY0Nzc5NzA3MTNDQjk1QTc1MUNGMQotOjEwNUVEMDAwOEY0ODdBODk5MEQ2OEI1N0ZBOUY0NjYyRjBFOTdBRjAxQwotOjEwNUVFMDAwMjg4MUY1RTk4QUU3NjM4MTI3NURBMDdDMEY4M0FCOUM1RAotOjEwNUVGMDAwRUZCOTFFMUNGN0NBNTc2M0UzRjFCMTIxRUYxRUEwN0Y3MwotOjEwNUYwMDAwMjJDNTc3NjEyNDA0RUI1MDdBNjEyNDBBRkNFMkM5NTc2OAotOjEwNUYxMDAwMzRCMDBCOUEwOTMxQzlDNUExRDFGQjdDMUQyMDM3MTNDMAotOjEwNUYyMDAwMjIzRTU4QUZENzhEN0U4M0M5OEY1NjgxRjgzMEU2NkZGOQotOjEwNUYzMDAwQjRGN0U0Qjc5MzU4RkJDMUE4ODc3MkY4Q0U1Mzc4NjlEOQotOjEwNUY0MDAwMzlCQjg3Q0I1OTRGN0Y4NEFENDcyNDczMUNDMjc1NEYzMwotOjEwNUY1MDAwRTE2MTc1NUUxQzdENENDODBBOTRDQjk3NDlFMDdBODE1QgotOjEwNUY2MDAwQTZERUNERUQ1MUE3MDY2Q0FFREYwMDc5Qjc0MDAyOTFGOQotOjEwNUY3MDAwMzhERjREMTNEODdBRDI0Mjc0NURBMEU5QTM0NDJGMTZCRQotOjEwNUY4MDAwNzA5RDRCNjZGQUQ3QjIyRUY1RDE5RkJDNUQxNkU5MTYwRgotOjEwNUY5MDAwNDBERjY4RDQzRTgwMzQ4N0Y4MzFDRDIzMDE0QzQ3OTJFRQotOjEwNUZBMDAwNTY0Q0FGMjYxMTRDRjM0OTNCQTYwNUE0MUI1MzQzQUZGNwotOjEwNUZCMDAwRjg4OTJBNDI3RUM0QzRGQUM5MjBFN0E0REE2MzhCRTVEMwotOjEwNUZDMDAwQkJEMDY0MzJCMjNFQ0UzQzlBMkQ3ODczOTBGOEVCRjg5OQotOjEwNUZEMDAwMUQwMjVGRTc0OEE2OEFGQzQzRjg3QUYxNkVCMDE4RTgyNAotOjEwNUZFMDAwQzU1NDI4RkNCQkRCQ0NFRkUyMjRCRTBFMzhFQTNENjk4OQotOjEwNUZGMDAwODA1NzMzREQ4RDU0NTRDRDdDNUE2REYwQTk0NDI0MUM1OAotOjEwNjAwMDAwQzczMjFGQzQ2M0NDQjhENkZFNTY3M0ZCQzY5ODlGOUM5QwotOjEwNjAxMDAwQTIyMzFGNDk2RTY2Q0Y1MDM4RjRCRDcxRjBEMTI4MDgxNQotOjEwNjAyMDAwN0M5RTQxQUJEQzNBQjIyOUJGNEI0OUI2Qzg1QTlBNkI0OQotOjEwNjAzMDAwNzQ0Rjc2RTgzODJGM0Y4OTQ3NjdFQjdDQUNGMDJBQkU3NwotOjEwNjA0MDAwODFDMUIzQTkwNzlFMEFDQjNBRkE5N0MyRjM0RkE2RkVDNQotOjEwNjA1MDAwQTQ0Q0IyMURENjBCQTI4NjcwREU1NkJDRjZGOURFNDIwOQotOjEwNjA2MDAwOEZGRUU0RDI5MTY5RDY1NzRBOEFENzAyODc4NTlGMDY2OAotOjEwNjA3MDAwNjg3RjdDRTM0QkVBN0ZFNEMzRkExQjIxNDEyQUVDQTk0OQotOjEwNjA4MDAwRjkwMTAxRTY3RkFENDAxQTEzMjk1RUM4NjhBMkVEQTBCMAotOjEwNjA5MDAwNzBDREY1NkFDQzhFOEI2OTM3MTlGNDkxNjYwQkM5NzQ5MwotOjEwNjBBMDAwQkVDRjkyRUUyM0QwM0VFNDI3OTExREY0QjM2N0YzNkQ4QgotOjEwNjBCMDAwQTU1QjY5N0RBQTlGQjY2M0ZEMDU0MDFFQUUxRDZEMEJGNQotOjEwNjBDMDAwNDBCOUQxOUY0RTlFMzJGNTQ3RkQyRTExRjBFMTM2RThFMgotOjEwNjBEMDAwNjNGMUMzRTRCMTM2QjQxRjk1N0NBMjZGODkyMzVGQzcxNwotOjEwNjBFMDAwQjk3QzE1MUQ3MUVBQjA5RUI4Q0E5NEIwMzMxQkZBOEYwMwotOjEwNjBGMDAwMTQ0MzNFQjU5QUY4NjE1RDlGRDRDREU2NTFDNkUxMzBCOAotOjEwNjEwMDAwRTY5REZBNTk0MDAwN0U2QUY3MzEzQkMwNTU0OEQwM0ZDMgotOjEwNjExMDAwNTQzMkRBNzRGMDFGRERCNDBFRjU0MjdFNTQxNzUzNTAzQQotOjEwNjEyMDAwM0ZBMjNGRDgxRjlFM0Q1RjNERUQwQkQwN0U3REQ0Qjk5MQotOjEwNjEzMDAwNkEwN0JFOTJGQ0U5QTA5RjU3OEY1NkM4NjBGQUJERjg2NwotOjEwNjE0MDAwM0IzQkY2RkZCOUE3NjIxODg5OTlDRjQ3MEREMUIxMEIzOAotOjEwNjE1MDAwQTlDMTcwQTZFMTE4QTY2NzFCREEzMUVENkM3ODBCRDNFNAotOjEwNjE2MDAwRkVFOTRBNTk4RURBQ0VFQjdFRTJEN0MwMUUxMDBGM0YxMQotOjEwNjE3MDAwNDczNDBGQzAxREQ1NzU1QzE3MUNBMjEyQjMyRTgwODI0OAotOjEwNjE4MDAwMDZGRjZGRDNEOEJDRjBEQTZDQzQ2QjA4RTY0REQ1Njc1OAotOjEwNjE5MDAwNzg3ODM2RTA1QjBBMDA5RTg3MzgyMkMyRDI3Qzg2NzcwOAotOjEwNjFBMDAwQzAzRkQwMDFDQThCOEUzQ0I3MDJGMTVDNERDNjAyOUU0NwotOjEwNjFCMDAwMzdDOUE0MENGNDNDRTAxM0Q2ODk3RDgyRUQwRTgwMDMzMAotOjEwNjFDMDAwRjJGMzY5RkVGQThGRkFDMUZCNTk4NkY3OEM5NzI5OUU4NAotOjEwNjFEMDAwMDA0RTQ5NEI2NEM2QUQ4RUYyOTUzQjkxMEIxMkQ3MjcwQQotOjEwNjFFMDAwQkQ3QTkyRjlEOUJERjZCREY2RUYwMENGOTY0Njg5QUNERgotOjEwNjFGMDAwODVCQ0E2Njg0QTExQjdGNzQxNEE4MjE1RDNDMURGRENENgotOjEwNjIwMDAwNTYzRUZEMjhEODBCQjlFMjU3ODc2NDVBM0VCNDVFM0EzMQotOjEwNjIxMDAwRDkxMTIzNEY1OTY1NzRGREE0NzZDMkIwRTVFNkYyRUNCRQotOjEwNjIyMDAwOTAzOTRGMDc0MDdGMzRCN0M1NUMzRUM0QzZGNUFFODc5MgotOjEwNjIzMDAwNzg0MDFFQURGMzVBQjZFODU3NzFGREQzNTUwRDI0RUFFOAotOjEwNjI0MDAwOTY2M0YyMDJDM0E3OTExN0JDMTMzQjQyNzQ3RUNCNDYwMAotOjEwNjI1MDAwMTE4QzAzNENCN0IxRjVCMzE1QkVBMzdDNzEyRjRGRDc4QQotOjEwNjI2MDAwNUJGQTMxNTI2OUEyREI0NkM2MzAzRDE5NkY3REJBREQ1QgotOjEwNjI3MDAwNTYzQ0NFNDZGQjZCQjA0RDFFNjdBMzcyRTQ5MjIyMDRERgotOjEwNjI4MDAwRUM3Nzk3NUJEMUUzRjk5M0QzNkQxMjhFOUYyMEI1RUIzQQotOjEwNjI5MDAwMjI4NUFCRkIzQUUyREY0QUYxQkU0Q0VFOEU4MjdDMkNDQgotOjEwNjJBMDAwMkJENkZDMjE1MDQ3RkUzMENBNjMxMkQ1NjE2MkY2MTUyOQotOjEwNjJCMDAwQzE1MzAyNzA1MDc4NEE2QzM4NEUwNEZCRTlBNjM4MDc4NwotOjEwNjJDMDAwRkI3RDk5Q0NGQTVEMzY0QTIzNjgzN0Y2MDNFNzU1MzZFRAotOjEwNjJEMDAwMTlFMTBDRDgwNDA5RkQzNDRFOTc1NTE1MzlGNzREQTMzMwotOjEwNjJFMDAwRDk0RTU1OUYwNUZENjcyNjA1NjdDMTc4NDZCOTZGN0U3MwotOjEwNjJGMDAwMjlGQTYzMTlDM0NDRjQyQjc3RDQ2NzAxN0Y1NDA2MjJBMwotOjEwNjMwMDAwRDM4MDdGNEU3QjVGNkM5MkU5QkNCNzM2MTBCRjQ0RjFGRgotOjEwNjMxMDAwRkY5RTJCNzAxQkY0NTc3MzdCRkQwOEIwN0ZERjA2NUU3QQotOjEwNjMyMDAwOTgwMDJBM0I4MDdBQUNBNTY0QTU1RkEyRTU3Mjg5MTQyNwotOjEwNjMzMDAwOTUyOTNGQ0ExMzBGQkYyNTE3NDAxQTJBODYzODhCOTMxOQotOjEwNjM0MDAwRDQzMzdENDdGNTRCMjIzNUJEMUMyM0Y1OEYyMTdFQTIyQQotOjEwNjM1MDAwODAzQ0QwNzI1NTZGMjU2MDBGMzhBOERCNzAzMjg2RUYxNQotOjEwNjM2MDAwOTQ0QzczMUU2Q0ZBRDg3QzdGN0FFMzcyMjk5OEU3MjdFNQotOjEwNjM3MDAwODcwM0ZFMDlEQUU5REQ0OUNDN0Y5MjI2RkEwQjAwREVCRAotOjEwNjM4MDAwN0JBRkZGQTYwNkYwRkNDNDY2MzNGOTY3NTY3RjRENUExMwotOjEwNjM5MDAwRkU2RjY5NzkxMDY4RTJGRUI2QjRGQ0Q1QjRCQ0YxODAzQQotOjEwNjNBMDAwOTc1NjlDOTc2M0NBMzI5NDBCMDVGMDI0MzJGOTA3QkZDNQotOjEwNjNCMDAwQkU2NzFERTQ3OEY4NUJDRkRCNTgyRjU3MzdCQzM1Rjg0NAotOjEwNjNDMDAwQzNFMTIwQTcxRDgzM0ZBNEM0NTkyRDA1OTFGRjQyM0U4MAotOjEwNjNEMDAwRjBCNTI4MUM5Mjk5OEYwOTc4NEYxMzYyNTI2RTE3MThFNgotOjEwNjNFMDAwRjY5QjlDNUE4ODc0OTREQ0QyQTk4RTk4RjVEREMwOEZGOAotOjEwNjNGMDAwQjJGQ0REQzExRjhFODdGNDZENENBRDc4NTVBNDIwMDEzMQotOjEwNjQwMDAwM0ZEMDY4RDcxM0I3MThFMEZBRUYzNEUyQTk3OUM0MUY3OAotOjEwNjQxMDAwQTUzODczQTRCMDc4NkE3QTVFMjgwQUYzNzI1MkZEMDkyRgotOjEwNjQyMDAwRUJEMzNEMjM1RjZCQzVGMDgxQzUwRjNCOTRBRDIwM0Y5RgotOjEwNjQzMDAwQjQ4Q0I2NjE1Q0IzNjU3OEU0OTAwMkY5MEM2QTQwRDEyMwotOjEwNjQ0MDAwN0E2N0NBNUQyMTg4NkQ0Q0NENjM3Q0UzRjRCM0Y1RDRFMwotOjEwNjQ1MDAwMzUzQzhDN0U5OEExQkZCRDFDMUY1RUFEMUNGNUIzNjc5QgotOjEwNjQ2MDAwQTJEOURFMzFENjAxMjcyQkEyRjQzNkRCNTFDRTk0QTY3OQotOjEwNjQ3MDAwNEZDNTgyQkU3RTlBNTM5Qjc2MUFFNTY5QTRCOTNGMjMyNQotOjEwNjQ4MDAwREVEMTZFRTNGMThCNkJDOUI1NjgzNzU5RTIxMkZERTFERAotOjEwNjQ5MDAwQ0Q2QkY4NzExM0Q5QkNEQ0QzNDkxOEZDRTZGNDg5NTFGMwotOjEwNjRBMDAwQzQ5QkQ3Q0ZGMDY2RDg5QjFFM0VCRjlCNEEyMzA0RkNGQgotOjEwNjRCMDAwQkU5RUY4RjNDRDBDNkZFQkFGOEJBMjdGQjc3RUVDMjlCRAotOjEwNjRDMDAwQjQ2N0JEODUxRDI2M0ZDRUY4MUVDQUExRkVGQ0M0NzY2QQotOjEwNjREMDAwQThBMUY2MThDQjFCNzEyMzhBQTdFOTE5NjlCREVCNjE0NgotOjEwNjRFMDAwMkJCN0RCQUQ3NDUzMjc5MjYyRDA2MzQ3NDdBNzE1ODM2MAotOjEwNjRGMDAwREVCRUI3ODRDMjRFQUIzQzdBNTg5NzYyRjBBREYyN0VGNgotOjEwNjUwMDAwRDQ3Qzg2REY3QkNCRDg3QzY5N0JGNEQzRUY5RDk4OTNEQQotOjEwNjUxMDAwMDRFMzY2RjJGOEIwMTE3RkVFRjFDQkVCQ0Q3ODRGMjhCMwotOjEwNjUyMDAwQjRDNDg1MkQ3RUI3RUE2N0Y0NTI0QkNDRTVBQjM5NUYzNgotOjEwNjUzMDAwMkIyMkE3NTcyQTE5Q0VFODM1MzAzRTRGMzJGOEJDODRCQgotOjEwNjU0MDAwRjE3OTMyREYzNzQ4MkZEMTBFMDExRDkyNEE5OUZGNEQ2NAotOjEwNjU1MDAwMkM3RUYzNEQyOTFEOEM1RTM3OEZDODAwM0ZGQ0ZFQTlCMQotOjEwNjU2MDAwREQzRTY2OTczMEJBMjY3MTdFQkNFRkM2MTEwMkM4NzE1NwotOjEwNjU3MDAwNzI4OTI2NDA3RDcyM0VDMzUzMzJDNTEzQUM3N0M5QTVEQwotOjEwNjU4MDAwQ0NFRkY2NEVENEIwNUQ1MjA5QTM1QjBCN0M0Q0UxNUZCRgotOjEwNjU5MDAwMDM3NDhBODkxRjNCNEI1Qjc1QTA3RjZCRjE0RTFENzRBMgotOjEwNjVBMDAwNTkzMkM1RTEyMDBBQ0ZENDUyMEExQkQ4OURCNDVGODA2RQotOjEwNjVCMDAwRDc1MzE4QzVCODVBNTI0OTcwRDhBNUZDN0E0MkEyODI1RQotOjEwNjVDMDAwQ0Q4N0Y4MTA2QzY4NEJFOTNDMjU1ODdFNjg2MkIyMjA5NAotOjEwNjVEMDAwRDA3RUVGQTc3Q0MwRjE4MDcxM0MxNzhGQTNERjVGNzg3RQotOjEwNjVFMDAwMTJGNURDRkRGMDREMzZDOEE5RjZFQjFDOUEyN0E1MzY0RQotOjEwNjVGMDAwM0ZGODA3Rjc5N0U2MDhGMUUyRTdDNkJDRkI4M0NCMkEzMgotOjEwNjYwMDAwQzcxMkY4MzUzMUZDNzI5NUM4RTNERTE2RkU1RDQ3MjJFRAotOjEwNjYxMDAwNkEyRUM4NTc0ODZGRjdBNUY1RUEwRjgzRkY3QUU0NjUzRAotOjEwNjYyMDAwMTJFM0NCRkVGNDg5QTE4N0REMjQxOEIyNjVGN0Q1MUZFQwotOjEwNjYzMDAwOTJDRUY4REU5RTE3NDA3OUVCMDNFRjI0QzZBRjUyOEE2NAotOjEwNjY0MDAwQjlGQzM2OTFEQjdGODY1RUQxOTIwNzE0MjcyN0ExMDAyMwotOjEwNjY1MDAwQUU3NzIyRDc0RjRGREEwMjBCQzU1NEYwQkJDM0I4NEUwQQotOjEwNjY2MDAwQjhDODc0QUUzNzE5OUZDQTlDRkZBNkU2MzNCREUyNEE4QwotOjEwNjY3MDAwODlCMDc2OTc4REE3M0E5MERGRDYzNEE4QTgxRjVBQzY1RQotOjEwNjY4MDAwREVENTlFNDNGMUIwNjY3ODkzMUZCRTczOEM2QjE5Qjk0QgotOjEwNjY5MDAwOERGNkRCM0M3Qzc5NzAyQjBDQzBGRDMwRDRCRjIyQUM3NgotOjEwNjZBMDAwODM4QzVGOEQ3RDMwMDMwRTkyMTlEMjYxOUZDQzA5N0U2MQotOjEwNjZCMDAwMTFFMDY3MjREQjVGOTAyNDEyQjU4RkVCMURERjk1NDc1NwotOjEwNjZDMDAwRTFDRDY3NjkyODlGQzEwREZFQzlFQkI2RTAyQTlDNkYzQQotOjEwNjZEMDAwN0U2Qjk0QTI5QkNFOUJDOUNCNkEyMTQyNUMyMkNDRUIwMQotOjEwNjZFMDAwNzI3QzFFQjIzMUJFOEU5RkY2Rjc1RDAyRUNEM0M0RTEyMAotOjEwNjZGMDAwREZERDIyREJBNzU5MkQ0Nzg4NTAwODdFMUJFRDg5RjI4QwotOjEwNjcwMDAwQzlFQTZDNkE5N0M3ODFBMzkxRjM2QkQ1MkU2N0Y4QzM2QQotOjEwNjcxMDAwMTg3RUFCODkyNDk5RjI3NUZCMzNDMjFGQzZGQTExNzczNAotOjEwNjcyMDAwMEFCODRGNTFDREQxNTg0MzNBQjIwMENGRUYyOTFBRjZFQgotOjEwNjczMDAwNTc2QkVCNDg4MzdDMTdFOTRFNUIwMjc4MTAwMzhGOEIxNQotOjEwNjc0MDAwNzRGRDc3NTJCRUM0Qjg5MDdCNjBFQkQ2RTVGMEE3ODFBQwotOjEwNjc1MDAwMENEMTg1NDBDQkU0QTkwRjc5OTg4RTE3REMwN0UzNjk0QgotOjEwNjc2MDAwMkEyQkJGRDI3MUUzRjBGNTBCQjE3QzREQzQ1NzU5NkFBNwotOjEwNjc3MDAwRTU2QjdGMTRGOURBOUQxMkM1N0FCNzlGRjFCNUMxOEYyOQotOjEwNjc4MDAwODk5QzFGQUQ3QzY4OENCRjlFQzdBRkQ2NzIzRTVGMzNCRAotOjEwNjc5MDAwQTE0OTg1NzBERkRBNTE5QjMwOUVFNjJDREE1QzAxN0NFMgotOjEwNjdBMDAwREUzMkFBMjUwQzdDREU2NEYwMzVERjE3QTFGRTJFREI3RAotOjEwNjdCMDAwMUZEMzVBQTNCMDRFMjY3MkJFNTZENEVFMDY5MDdCRUI4MgotOjEwNjdDMDAwN0M1RDkzMzhCQzM0MDVCRTA2QjgzOTVGQkYwN0Y4OTNDQgotOjEwNjdEMDAwRkRERDA4QUVDMUQ3NkIwN0NDRDdCQTQ1NkY5QkQzRkVBMgotOjEwNjdFMDAwRkMyN0Q5QzJENzFFODlGMUU3NjdDMEQ3MDA0RjBBQjM4QgotOjEwNjdGMDAwNjNEQzNFOTZDQTdFRUFERkM3RTlFNzA2ODlGOTk5NkI1MgotOjEwNjgwMDAwQjkxQ0FDRTU3MkIwQjYxRjM5RjgzRjIyRjMwM0ZFOUEwQgotOjEwNjgxMDAwNzIzMDhCQzk4MTQzQTJFNTg5OTNBRThDMUYyNUIwRDMxQQotOjEwNjgyMDAwRTNDODdCOUUyNEZDQjVFMURFMzQ0M0JDNzIzQ0ZFMjcwQQotOjEwNjgzMDAwMzBDRDg0QkVGNDM0RDJDRjQ0RTdDMEU0M0I4RkM5NzM3QgotOjEwNjg0MDAwN0Y3MkJFNzY2ODdDMzhGRTUzNjRGNEE3RjgyRTkyMjZEOQotOjEwNjg1MDAwNUMzOUJFRkY1QTcwMTU3MjdFMzZGMDQzODJDNTI4Qjc4OAotOjEwNjg2MDAwMzE3QTY2M0FDMDJCQTk4NjlFNzkwNEQzQTk3OUFEMjhERQotOjEwNjg3MDAwQTc4NkJFODE1ODBBRkEyQjZBMkJDNjNCOUM5OUFENjg0NQotOjEwNjg4MDAwOUYzOUYzOThCRTMxRkMyNEVCN0M4REI4NzgxM0Q3MzM1NQotOjEwNjg5MDAwNDk3OTIxMDJFQjlGM0Q4NTcwM0ZBQTlFRjk1MTk5Q0MyMQotOjEwNjhBMDAwMUYzMEUyRDU4NkZEQTgxODdFRDREMEJCNzA5RkE3Nzk5MwotOjEwNjhCMDAwNzgzRERBOTdDRDM3RDYzQkUyRURDMzM2RkJFRTc3RjA4NQotOjEwNjhDMDAwNEQ1RkQzM0VFQjFBNUEwRUZEQUVDOUJCOUZDNEIzQzM5NgotOjEwNjhEMDAwOEM3OTE4RkI0NjRFM0U2RTczMUVCNUE4NjA1Q0RGMzJBNQotOjEwNjhFMDAwRkNERTZBQzczNDY3QjJGRTdBQkVFNzdBNTdFRUQxQkJFOAotOjEwNjhGMDAwMkM4Rjc2NTQ2RThDOUY2RkU5QzdFMDAzODVFODQzQTMyNQotOjEwNjkwMDAwMTAzNzE4RTQxRTA5RTc0QzlBODQwNDNGRDhDNzREOTIwQgotOjEwNjkxMDAwMjA5RDcyOTAxRTdCQTk1QTg5MTY0MEZGMjc2NkJDOUM1OQotOjEwNjkyMDAwODVGNkIyM0RCODA2RTRCQ0U5QUI4MDAzRTJBOUFCNTNGRgotOjEwNjkzMDAwNUVGM0M2OTY5RjlERjFFNkI3QzE2Q0E1REZENUUyN0VGQQotOjEwNjk0MDAwOEU4MzQ4QjFGQjYzMjdEQ0RCRDE3RTRCQzgzN0M3RTlCOAotOjEwNjk1MDAwOUMxNEFFMDkwMkM0MTNDQ0U1MEE4RkJGMjg5OUU2NzJENQotOjEwNjk2MDAwOTlDNzVGQTQxNDRCMzlFNzBGQjkzNEJFNUU3OTkzRUIzNgotOjEwNjk3MDAwMTVERjAyNzY0RUU3QzQxQzE2RDczQjcxMkI0RjY3MzBFQwotOjEwNjk4MDAwRkUzRUM3REI3NUYzMzRDMkY1RUU1RjUzMUYyNUU1RjYxNwotOjEwNjk5MDAwQzJFRjlCRTJDN0Y4MjI5OTY1NDdCQjNFMkI4NTlEMkIzMgotOjEwNjlBMDAwMjBCMUU3MjZFMDVGNkJBMjQ0NjJGQ0NDQTE4MTk3RkY5NwotOjEwNjlCMDAwMDhGMUQ0NjEwQkJFQ0EwNjNDNkIxNUVBNjE1ODQ2REI5MAotOjEwNjlDMDAwQTU2QzlDQzc2MzQyRjcyODE4Q0ZFNjNBOEJGQkY1MDIwQgotOjEwNjlEMDAwNDVFMzcyNkExMjBCRjREQkRCMjE4NUVGQkRDMDUyM0E0RQotOjEwNjlFMDAwOEY3QjA1OTFCRkVDQzAzNzIyRDAyOThDQTk4QjQ0QjE5NQotOjEwNjlGMDAwREU0MzNBMzA5RjA4MUJFNkI5RTA4NzUxQkY0QkM0MzNGMgotOjEwNkEwMDAwNEM2MTFCQzY4RDdFQ0NGNjQzRDY4ODc4NkU4M0E4MDM3NgotOjEwNkExMDAwQjRCRkM5RUQyQUY4OTc0Mjg4N0VFNzFBRjg3N0JFNDBERQotOjEwNkEyMDAwNkIzMUM4QzRFMEIyMDhDNjkzQURFRDdDNTNEODM5QTAzMQotOjEwNkEzMDAwM0U3QUZCQUY0RkRGMzc1MjczODE4RjU0MkMzN0U4MUNGRgotOjEwNkE0MDAwMTRGNTRFNjk0MkRGRjI1Rjg5ODFGMzEyQzZBQjU4REM2MAotOjEwNkE1MDAwQ0Q1QTVGMkFFOTE3NDBERUFDRTVDMjBCN0YzQTA1N0VDRQotOjEwNkE2MDAwRjRBQTY3NjRGNEEzQTczQzIzNDdCRjQxRjMzNTVCMDQ1MgotOjEwNkE3MDAwRjQ1MzZEMDc5REU4MEY3NzNFQzJGMjUxOEZBMjQzRkI5RQotOjEwNkE4MDAwNzNEQjA1OEMwN0Q1RDlEQkVGQkQwMUUyOEFDRjg4MDQyMwotOjEwNkE5MDAwRkQ4RDcwMTlFRThCOURFMjczMjZGQjU5QkU5QzA3ODAxRAotOjEwNkFBMDAwNkFCNjFDOUEwQkRGNTdFQ0I3MTNEODc3QTg3OTZFRjE0QQotOjEwNkFCMDAwQjc2RkEwRjlDNUM3NjRGNDUxNkE3NkFDNTA2MDdGNjVDMgotOjEwNkFDMDAwNDk1ODg4NDBCRTZCMzJDMUYxNDNGQkM0RjAwRURBQkVCOAotOjEwNkFEMDAwQ0JEQjlFMzZDNzBERkIyQjBFQTI1RDQ1RTFGNkI0QTdCRQotOjEwNkFFMDAwQ0RBNkY0QTkwQzNGMzUwREJFQUJEQzJERjhDMUZGOTg0NwotOjEwNkFGMDAwRjJDQzhFQTMxOUY0QkI5QTI3MDQzQ0E3NTBCNUNCNDUyMgotOjEwNkIwMDAwQjQxOEJBOUM2QTEzQTNERjgwRjgzMzlEMjdGOEM1OEJBRAotOjEwNkIxMDAwNDlFQjM0QzA3QkNEOEUwRDhBMTYxM0I3M0NEMzMwOTIyRgotOjEwNkIyMDAwNjhGNkRFN0NDRDEzNzQxQ0ZBNURFRDkzODIxRkE2NThDNwotOjEwNkIzMDAwNkIyMzQxRTA4RkNFRTc5QzY1REJEQzMwQkYxNUNBMDhENAotOjEwNkI0MDAwMEZDQ0FCNTk4MTc2OEJDM0YzRjZDMTdFN0E2NTc4OEIxNwotOjEwNkI1MDAwMzI4REQ2NTczRUIyNDUyOThGRTFBN0FBNURENzEwMkRCOQotOjEwNkI2MDAwODYzRjRFNkRDRTREQkZENDdBN0I4NkFFNUJCMUYwNTQ3RQotOjEwNkI3MDAwMTJBNkI3ODgxNDU2NjZDNEVDN0I3NkM4NDk5QzNGNDU3QwotOjEwNkI4MDAwNTNGRjA2REY4NzVFMjcxOEM3MEEzREVGNDFCQzFBNzQyMgotOjEwNkI5MDAwNUJBNjMyQkQ2MEQwRURCQ0NBRTkyODc1MTdDRDg4QjNCRAotOjEwNkJBMDAwQUY3QTJGRDBDMTBFRjEyQTE1RDNGQjFCN0M5ODZFNkNFNwotOjEwNkJCMDAwRDA5MDNFOUIwMDdGNTdFMUJFMDY5NjdCMjc5MTYyODg2RQotOjEwNkJDMDAwOEI3ODc1QTJDMjUyOUYzQzVEMkY5NjIxNEUxMjYwRjlDMAotOjEwNkJEMDAwQjREQjgzODI3Njg5RjkxQkU5MjYzOTM4MEY4MjVDQjdFQQotOjEwNkJFMDAwQzk0RjRDOTZFOEJBQkU0OTA5MkUyNTdFM0FCRUI0NzcwNQotOjEwNkJGMDAwNzJDOTc1NjBBNzA1RTdDOEE5QjA5RjFEQUM2MEYxRTgzMAotOjEwNkMwMDAwODgwRkU0QTI4OUVGQ0I3QzRCNjZGMkQ2OTRBMTYwN0MxRQotOjEwNkMxMDAwNjREM0Y3OEJCNkExRUQ0MTE4NUUzNjdEQkY3QzI3RUNCRgotOjEwNkMyMDAwQUJEMTdFRTZDQTU0QUUxQTY1REE0RkVFRTVGQjQ5OUI1RQotOjEwNkMzMDAwM0JEMUQ0NEZEQURDMEFBMzlGQzVEODhGNzM2MEZENkNCQgotOjEwNkM0MDAwOUE3QkJEMTk5RUI5OTU0NjNGRjVEODhGNjc2MEYzNEE4OAotOjEwNkM1MDAwQkI2MzkyMTk5RTNCQUFCMTlGRjREQkZENjgxRjg4MDZCNwotOjEwNkM2MDAwRkY5MDc2REMxNzc1RUY0RTFBQjc5NkM0RjJEMUU0MUY4OQotOjEwNkM3MDAwQzM3ODFFMkE1NUIxN0M5NDM4MzFDMTI0NEY0OTdBQjI2OQotOjEwNkM4MDAwMjkzRkE4NzRCMEE5N0Q2QTIwQzc1NDlGNUU3NkI1ODU1OAotOjEwNkM5MDAwMkZEREE4QkYzMTRGODE4QTI2QjEzOEFCMzI1ODQxQkRCNAotOjEwNkNBMDAwNTMzQ0Q4ODFGOUJCMDZCQjUxRUZEQzc1N0RGMDJBQjBBRgotOjEwNkNCMDAwRjcwMDU2RDBGMzc3MjlDMTMxNkExQ0JFQTFGMzEyMDg0MAotOjEwNkNDMDAwQzZDRjM0MUJBNDdERUMzMkJFRUYzOTc5Qzg1NzIzREUyMgotOjEwNkNEMDAwQTdERkQ3RDlCQTQ3MjREMUZDNDM0QUYxMjMzMEVGQUQxRgotOjEwNkNFMDAwMzJCM0UzOEQzODQzODI5REEwRkU2QkNFMkVEQTE2OEEzNgotOjEwNkNGMDAwQzE2QkNCNTBDQTJGNDI2RkJGMkQ3MkQwMDdGQ0I4NzM0NwotOjEwNkQwMDAwRjU2RjU3NEExNEJFQTZBMTBBMUU2RTdBNUNGRUVERTEyRAotOjEwNkQxMDAwMTBCNTk5OUI4Nzk2RkIwMEZGNzY4NUVBOEZEOEYxMTUxMQotOjEwNkQyMDAwM0E3RTNFOEVCRjFCQzZERjJCMzMzQkQ5M0FCRTNENjc1MgotOjEwNkQzMDAwQTI2OTdDNDc1Njg1Njk3Qzg3NDJDN0E3RjJCMTZGRjU4NwotOjEwNkQ0MDAwM0I3QzdDOEFCRkVCMDk3OTU2N0UwN0M3Qjc2NzU1RTA2NQotOjEwNkQ1MDAwRjhDRDBBQTkzMDhEOUZEMDMzRkUwMTkwOUZDM0ZEQ0RBMQotOjEwNkQ2MDAwM0ZFNzdBRjNGQ0IzMkFDREYzNTdEOEZDOEZBRUZFODAxMQotOjEwNkQ3MDAwOEY5RjgwRjM3RjU5RkU4MENEM0ZBQjkyQ0RERkNFRkE1RgotOjEwNkQ4MDAwRUQxOURGREI4M0ZGNTc2MUZFQUZGNTM3RkZEQzQ5RTYyNgotOjEwNkQ5MDAwRjkwRkFCMzZDRkRGQ0VDNjdGNjNGNTI3N0M3QzM3OEUwRAotOjEwNkRBMDAwRkZBNkZDMDk5QkZGQjA2QTFDNUZCMTA3RkRDMDQ3Q0E4NAotOjEwNkRCMDAwOTA4NDdBRjA5RkE5NjFBNDYxNDA1REEzRTM0MDNBOTI3OAotOjEwNkRDMDAwQzVBOTM3QzgzOTA4Qzc1RDA5OENFRjNFNEZBMEZDRTY1RQotOjEwNkREMDAwRUVENUE3MjQ0QzI1OTBFQUNCNUFDRUQzNTVCQjhCMTVDNAotOjEwNkRFMDAwRTYyRjg0RDA1RjU4QzQ0MTVEQjg1RkM0RjU4QzZDQjRBNQotOjEwNkRGMDAwODc4NzUzNzgzQkY3OEIyMUM4MkZEQzc4MjM5RTVCQUNDOQotOjEwNkUwMDAwQjMxM0RDNzdBNzU2MzBGQTFGRkZGMUMwRThBREIxRjMzQQotOjEwNkUxMDAwQjJBNjhCNUE2NUNCRkUxMzgzQzczOEVGNTQyNEFCQTZCQQotOjEwNkUyMDAwRkMyOTg4QTc1MDNEN0MxMkZDMUY5QTlFOTZFOTc4QjRGNQotOjEwNkUzMDAwRkM0M0YwODNBRThBOTUxQjc2MkU4Qzc2NzcyMjlGQ0UwQwotOjEwNkU0MDAwRUJCQjFDRkU1MzEyQzNGN0E5M0IwNURDNDdGODdDQzMyMAotOjEwNkU1MDAwNTIwNUY0RDlBMjU2OTdDOTZGQThFMzc0RUE3RUNFOEU4NAotOjEwNkU2MDAwRkI4REM2NzlCRTVCNTAxNDA5RjlGREMxNkYxRDA1QkJEMgotOjEwNkU3MDAwNzFGMUU2NDFBNkVGNkUyN0UxRDU3MDE0NzNDMUZBNzk3RQotOjEwNkU4MDAwNDM1NTNBRkZEQkNBRUNFMzQ0OEM2QkVCNDM1ODFDOUM0NAotOjEwNkU5MDAwMEM4MUI4NDk1OURCMDY3OTA4Q0REQzUyMjY5QkVDRjkwOAotOjEwNkVBMDAwNUI4M0U2RkM2RDE1RTY3Q0E3MUM5NjZENjBDRjJDMTEwQwotOjEwNkVCMDAwQzgxNkRBRUZGN0VCNjVDQkI5MDAzNjhFNTc0OUU2NzZBMAotOjEwNkVDMDAwMjUxQkVGQkI5NDg2MTlCNEU4RkI5MDhFODM2MjE1RTkwRAotOjEwNkVEMDAwM0E1NzY1REYxQUYwRDRERDJEOTMyOEFFQzcxREE5Qjg0NwotOjEwNkVFMDAwMEYxNDRBNDVCRjJEQThCMjc5NUJFMTlEMkIzQkY0MDBGRQotOjEwNkVGMDAwODU2N0VFOEY0NEM0QTcxNUZFOEU4MzJFREQ0NkVERjMyNQotOjEwNkYwMDAwOEVDRDdGOTAyMTdFNkM5RDhGMTVGRTNCOTY1QkU3QTMxNwotOjEwNkYxMDAwMkFCMDNFQ0MwQjU5Q0IxOTlGNThGOUE5NkU3RkYxMzY5OAotOjEwNkYyMDAwQjMzRDdCRjNCNjU4RkJCNTZBRDcwQzUzN0U0OUY4NTY5MAotOjEwNkYzMDAwNTNGQkM1OUJFNzk5RUExN0I1MkUzMUQ1MkY2ODU5NkFERgotOjEwNkY0MDAwQ0FDRjBCRkRDOEQ0RkU4RUU1MkI0Q0Y1REZBRjVGNjNENwotOjEwNkY1MDAwQUFCRkFENjI4MzI5N0Y2QkYwMjE1M0ZCNUJDQUI2OTg1MQotOjEwNkY2MDAwRUE2RDA3NDc3RDA3RTQ2OEQ1RUIyMjlFRkRCREUwM0U1NAotOjEwNkY3MDAwNzUyRkQ4OUIxN0RDMTJFRTczN0U0NEVEMTU5MDgzMzM4QQotOjEwNkY4MDAwRDQ1RTgxQjQ3M0ZGNzhGNEE3QTkxRTJDODc0REEyRjlCMwotOjEwNkY5MDAwQ0E5ODU1MkQ5OUEwOTcwOUVBQ0Y3MjY1QzJBQUQwMjQ0NAotOjEwNkZBMDAwOEExN0IwRDdBOTdDODg5QjE1MTIxRDA0Q0U0QzcyMEY4RQotOjEwNkZCMDAwMUY3NzhCMzFGNTFEOTdBOURGNEMwNTdEN0NERjdBQjFGQQotOjEwNkZDMDAwMjM3RTc5RERENjc5QzNENDM4N0U2QUFGREM5MjIxQjBENgotOjEwNkZEMDAwQ0U3NTU5Q0U5RjE4NjlCNUU1M0NBN0IxQkY3RDgxRUI1MQotOjEwNkZFMDAwRDk2QTg1RTk4M0VBQkQxOTkzNjE3Mzg2RkFFNTIzRTJEQwotOjEwNkZGMDAwOUQ5QkVDRjkzRTIyQjAwRDQ4QjBGRTUzODExRjg2OTg1MAotOjEwNzAwMDAwRjY2QkFBNzZFNTlBRTRGQkVDMjExMUUxQUEwNTlENDAxNgotOjEwNzAxMDAwRjVFQTE3NTI2MDhEMDI3MjE2M0Q5MjM1NkIzNEMwQTFBRAotOjEwNzAyMDAwQUY1NTQwRUZFQzRGQzU3NUZENkM0M0U5MzZEOEFGM0YyNwotOjEwNzAzMDAwRDMxMEMwRjRBMzg2MzI0QzRGMzUwNDMxRkRCMEExMDIwOQotOjEwNzA0MDAwRDM5MzBERjU5ODc2MzQyQ0M3RjRCRDg2MTBBNkVGMzY5MQotOjEwNzA1MDAwQjQ2MEZBQkI4NjU2NENERjZBRDg4Q0U5MUIwRDYxNENENAotOjEwNzA2MDAwM0IxQjc0NEMwRDc5RThEMUJGMDE2RTBGMUIxQkQ3ODRGRAotOjEwNzA3MDAwREJDMzdDMkU4REE5M0RFN0MyNzBGRkY3QkNGQkYzMTE4QgotOjEwNzA4MDAwNjBFRjlGN0ZDQjhFRkI2Q0ZERTFDQkNBNkZGREQzNTFEMAotOjEwNzA5MDAwNDc3QkE1M0MzQzA4OUQ2MzZCQkQzMzgxRDFDOTY5MjMwNwotOjEwNzBBMDAwQTU2NDFDRUNGRkVDRjRDRkNGQzdCQ0M0MkVGNTg0RkQ2NwotOjEwNzBCMDAwMzMzQzcxRkE4NTc4NURGQUU1RTk0NEY0RUU4Mjk5OTRGRgotOjEwNzBDMDAwMUVBNzFFRkVBRjIyRThGNzAyQUM3RjYwMDcxQzExNzFGRAotOjEwNzBEMDAwMUQyNkQxNkQ3RUEwRDc5NUUyNEQ3OEUxRjc1OTEwMkY4RQotOjEwNzBFMDAwM0JENzgzQkZGNjJDODg4QjVEQUJBOEQ4RkZGOTM2M0IyNgotOjEwNzBGMDAwODFGOEQyRjkwMzJFQkNDRjc1RkVEODM2MkZDOEUzMzIwMwotOjEwNzEwMDAwOUYxODhFM0Q0NzYxNEQ2QjIyRDk2MUI3QzlFRjM2RTdCNQotOjEwNzExMDAwQ0ZCNzBBQTU3ODFFOUE2ODg5QjM0NzAzNUZBOTYxMzg3QgotOjEwNzEyMDAwMEZEMkQ5RTBDM0Q0RTg2Nzk5NEZDMTcxQ0VFQ0NBNjVEQwotOjEwNzEzMDAwNzEzMzdFNUU4M0VDNEU0MjdFQTU3RTI3QjZGRjlGODYyRQotOjEwNzE0MDAwQTdCRjdFMEM3ODA4NjkyMzFGMzgwODVFNzFCQjk4REJFNwotOjEwNzE1MDAwN0ZGQjdFRjk0OUZBNEM4MUY4MkEzOTIwN0YwRUY2ODJBRQotOjEwNzE2MDAwOURGRTc3MTExQzY1MjI2MURFRThCNzJFMjI4NkVDNjM1NgotOjEwNzE3MDAwQTA3Q0I3NjkzQ0ZBOUQ2NkY4RjQxNzczMkVDNUI3RTY5NAotOjEwNzE4MDAwRkIzNDIyMDQ2OEJGNDY5Q0E0MEFGRTgwRjMzMEY1MDI1QgotOjEwNzE5MDAwQzZBQjhDNzg0OTk3RTQ2RTExQzZGNEM2NEJFQTc4QkM0RQotOjEwNzFBMDAwQjhDNkQxQTEwNDY5RDFCOUI2REM0QkVFOUY5RTY5Mzg0RgotOjEwNzFCMDAwQTZDMjM5QUYwQTQ3QUIwMkNFNEY0NTY0NTQwOUU4QjlCRAotOjEwNzFDMDAwNzM2REFCRDJDMDFFQUMxMkNGREYxNTJGN0U5QjY3NjdFRAotOjEwNzFEMDAwNzFCRDI1NjFCOURCQkM4RTcyRkUyMEI0NUZBMzlDMUQxRQotOjEwNzFFMDAwNzI3NDlGOEFDOTlGQjUzMTNCREJEQUVGMDRGQkMwRjZBRQotOjEwNzFGMDAwMkQ2QTc3MUY5Rjc2ODNENjE3NEZCNUZCM0Y1NTMwM0VEQwotOjEwNzIwMDAwMkUxMTUzNUNDOUMwREY3QjRBNjA4MjlERTJBOTcyRDcxMAotOjEwNzIxMDAwRkI2ODhGN0UyNDg3NDZEQzdEMDlGREQ0Nzc3RTZFOUZEOAotOjEwNzIyMDAwRTk3QzcyODhCNEMzMzhGMzI3RjI4MTg4NzZDQjNCNzQ0QgotOjEwNzIzMDAwM0RGREY4MTU5OTlEREJFNEU3ODA3QkY2OTVGOUJFRkVGMAotOjEwNzI0MDAwMDI5RTlCREY1Njg1RTc4NDNFREVGNzhGNjhGRjJEMjQ4NAotOjEwNzI1MDAwMDEyRkQyODFCNDE2ODExRDc5OEVEODRBMDE0RkU3QzgxQgotOjEwNzI2MDAwNkJERUYxMzE3NEI4OTUzQTRBNDBFRjA1MkQ2NjNCODZFNgotOjEwNzI3MDAwREFCRkE2RkNFMkNERTY3QzM5OTk5OTA2RkFBNDdDQTM5NAotOjEwNzI4MDAwNENDMjAyQ0VDRjU0N0ZCMzVEQzU3RTE3OTNGQTI2NTgwOQotOjEwNzI5MDAwNTcyNUVFOEZDQzU3ODkzNDg0RUFENTlBNjc3RjU2MzRDOAotOjEwNzJBMDAwOEZDMjExQjQzMzNGQzg4OEJGMkM0OTY2NzY2MDY1NEFFNwotOjEwNzJCMDAwNTg4MTdEQzIwRkRBQzY3RkY3MDYyMDgzM0REQzA0NzE1QQotOjEwNzJDMDAwMjg5MjQ4RkMzQjQ4NUZGQzVFMjlGQzU2Nzg4REY1QkE1NQotOjEwNzJEMDAwNEYxQzg4QzMyMUVFMTJFMkVFMDNENkRBMDU2RUNGODY4QwotOjEwNzJFMDAwMzAzREMwRTc2REY4MDVDNzJDRjkxNTc2N0VERTUyMjRENwotOjEwNzJGMDAwMjJEMEZEOUNFQTA4RDkxMkIxREUxRjg1NzhEQzVFQkI4NgotOjEwNzMwMDAwN0Y5NTA2NzFGQ0MwNkE3QjZBNkZEQ0RGNjg5NzY0MEY0QgotOjEwNzMxMDAwNjJGOTU5RTFENTcyM0NGNzIwNDUwQkYwREUyMThGRUY4MQotOjEwNzMyMDAwMkI5QzFGQzQwNDZGMDE5QzIzRjU0MERDMUVDRTc1M0FENAotOjEwNzMzMDAwQkQ1QjIxREZFNEE5QzBGMzFGNzUyMEVGQjRCRjdCQkNBOAotOjEwNzM0MDAwRDM4RTQxOUNEQTQxNUFBMzNBRTU1RkJCQ0ZCMjFGQTA2RQotOjEwNzM1MDAwOTlGMzJFOTA0QkQwNjc1MDgwRTdBMjA5QzZCOTVDMjMwMQotOjEwNzM2MDAwQ0RFRDNDN0U3M0ZFMzEyRThGNzQ4MTQzM0VFRTM5REZDRQotOjEwNzM3MDAwRTY3MDQ3RTEzQzA5OTkyODlERURGMUI3NzJDMERGNjNFMwotOjEwNzM4MDAwRjBDM0ZENTY2ODdGQTdDQURBRDdGMjdEREQzQkRGOUVFQQotOjEwNzM5MDAwOUM5RTdDMDk3RDU0RjdBNTQwQzIzMUVCNDg5REQ0QUQzRAotOjEwNzNBMDAwMDAxRkQ2N0QyOTYxRjlEN0Q2OUIxQTVENTU2M0Y0RTY5NwotOjEwNzNCMDAwMkI0QUYwNTlGQjA0QTYyNzAxM0U4MThFMTNCQkRGNjRFNAotOjEwNzNDMDAwQkQ4NzcwMDJGODYxNDIyRjNGN0M2RDM4NTI4ODQ5N0YzQgotOjEwNzNEMDAwQkZBNzA0OEZDNTgzRTM2QkY3RUZFQkQzRkYwOUUwQkJENwotOjEwNzNFMDAwRkZCMUZFRjNGQUY0REYxMTBGRkU5QTY3RjdFQzBCRDE1MQotOjEwNzNGMDAwRjVCNUYyMTcwRjc4RTExMEQzQzc1MjZCMUE5Q0VGQUNCQQotOjEwNzQwMDAwREVCMURBMEI3MkY5OTExNEYyMDI1RDNGMEU4QjcxRUY2RgotOjEwNzQxMDAwRTdBNjNCMENCRUQzREQ3MDhGQjA5NkYzREQ5OTlGQUYyRQotOjEwNzQyMDAwRkIzNkY4MkY5RkVGOTA1NThDMEZFQ0IyNDdFRDk0Mjk2NwotOjEwNzQzMDAwNkJEQjk2MzBGOUQ4NjU3RjlGRTU5QkYxQkM1M0REN0UxMQotOjEwNzQ0MDAwQjNCRUE4N0NGQzgxMzQwRDBGNTU4NUI4RkYxQzQ1RkZFOQotOjEwNzQ1MDAwQTA3NkZCN0Y0QzAzQkJBQjhFNzRBM0RFQjM3RTA3RTM0OQotOjEwNzQ2MDAwN0Y5OThDRjZDMDNDMjVCMTZGQkQ3MTBFQUI4RUUzQTU0NAotOjEwNzQ3MDAwQUU2RDFEREUxM0FGNkJCQkY5MzQxMzlBMEVGNDNCQUQ0QQotOjEwNzQ4MDAwREY1NTcwQkJERkUxMzA5RkRGMzRGMDQyQzJDQ0VFNUZFRQotOjEwNzQ5MDAwRjVDNDgzMDVFRjUzQjhDRTZFN0ZDNTJCRTRDN0YyMjk0MAotOjEwNzRBMDAwRDM3RkU3MjMwQjFFRkJBNUQ2QkY1Qzc1NTJGRDE4NkI3RgotOjEwNzRCMDAwNUYxQkVCQjRCNjlGRkIyQjA3NTg1QTJENDdCREUwMEY1RgotOjEwNzRDMDAwNTY2RjkxRjFCQzdCRjU5RTZEM0IxRjg2RjhDQ0RCNzY0OQotOjEwNzREMDAwRkY3MERBN0ZENTlFOTdERUI4OUVFNkFCOUU5MjUzQTZFQwotOjEwNzRFMDAwQjM2OUI4RTE5RUEyNDE5RjNBRkFERkYyNzFCREY0QThGOAotOjEwNzRGMDAwN0NGQTI1NDUxQkNEQ0E3RjlDREM0Qjk3QUFBNzBFMjk5OQotOjEwNzUwMDAwNjQ3NDVGN0M0Qzg5MUM1MkQ4N0VCNjg1M0U5MUY3QTc4NwotOjEwNzUxMDAwODE1RkIxRUE4OTJGMTREMDVGMUYxRjE0NDg3QTc2MUM0RgotOjEwNzUyMDAwN0M2RTc5MDlFRDYzQzAxM0QyOTNEM0FCODc3RTk2RjY1OAotOjEwNzUzMDAwNzU5NDJFQTgxNzJERjRCMkI2RkI5OEFGMDdEMDJGQzRDMAotOjEwNzU0MDAwRTMyOTdGM0ZGOTRCRDhCN0Y5OURERDBGNzhBODc4RjI5MgotOjEwNzU1MDAwOUZCQzMwOUZEMzUyM0RFM0YzOUZBRDRFODNGQjIwMTU3QwotOjEwNzU2MDAwNzIyODREQzU5NDk1NTczQ0ZBMDNFNEJGQzVDNzdGOTA3OAotOjEwNzU3MDAwQzZDRUM1RUExOUZDNUM1NzA2Q0M3M0QxMjM3MzcwOUU0NgotOjEwNzU4MDAwRTUyNDg4N0M1OEYxMzM3NkNGRkM4MjQ0NEE5RjhBMjNENQotOjEwNzU5MDAwMjdGNzM5RDgzQTc2N0FBQjFEMzcxMTRGQzM0MjAyRkIzMQotOjEwNzVBMDAwMThBRjg5RTExRDE4MEY2NEU3MEQ3RjYwRUMzRjkxNjUwRQotOjEwNzVCMDAwOThCRkUwNjBGNDVBRTQzMEVFRjFEMUE1MjQ5NjdGQjc4RAotOjEwNzVDMDAwMzdCNzAzOURDRTBDRDVEMzIxOEU1QzQ3QTQxMEM3ODc1NwotOjEwNzVEMDAwNzA5MUY2MkIxRTlGOUFDRUNGMUQ2ODUyMTFGRjhFRUEzNgotOjEwNzVFMDAwRkYyOTUwMEVFRERCNjVERDU5NjBGQThFNUNDQ0VFMUQ5NwotOjEwNzVGMDAwRkY0RTNFM0U4NTNCMDFFQ0Q3RDM2OUQ0MUU4QzMzQkY5MgotOjEwNzYwMDAwMDMwRTYzOURBNjc2NTYwQzlGQzVDODNCOTNGRkVENkI5QQotOjEwNzYxMDAwOThCQzFCRjIxRjlFNTEwQUY1OUY5RDYwNzIwNERGODE4QQotOjEwNzYyMDAwRkQ0MkUxOEFBNjYzRkRBMUQ5MDJFQTA3M0I4OUM2OTMyMAotOjEwNzYzMDAwRjNFRDMyOTc3MzczQkQ5NTVGMjhGQzEyQUNDNzNEN0NBOAotOjEwNzY0MDAwMDNFMzI0MjMxREQwQkUyRERGNDhCRjhGRDVBQjMwQUU2MgotOjEwNzY1MDAwQjc2RkJGODYxQzJGRTZGQTYwQUQ0NTFGOTA0NzUyMDdGMwotOjEwNzY2MDAwQjQ3RjVCMkQ4Nzc3M0UwQ0YyNEJFNTM1QTQ4MUZDQ0FENQotOjEwNzY3MDAwRjg1RUMxMjdCQjhGQkNGMTNEMkFCNzlGNDQwQ0I5MzVEQQotOjEwNzY4MDAwRUI1NUFCREM1NkVDOUQ0MEUyQzlFRDI3NkUzRjg5MkJGNAotOjEwNzY5MDAwQjdCNDNDQUVEQ0JBM0I5MDlGRkZENjdBRDVDMEUzRDNGQgotOjEwNzZBMDAwMTYzQzFBN0FCMjNGN0M1QUY1RTRCNzFENUE1QzNENDk0NAotOjEwNzZCMDAwRkY5RDIwNDU3REY5RDFFMDQzODNGRjJBRkZBNTA2Q0YzQQotOjEwNzZDMDAwMEJGNUYwQTlDMTg3M0Q3QzZBRjA2MTlGNzhBNDA5OEYxMgotOjEwNzZEMDAwRDZGQUJCRTE2RjNBODVDMDczMzJDNkNGQUIwRkIwRkRBRgotOjEwNzZFMDAwNjdGQURERDEyMTg1ODgyRjFEOTczOUQyN0E3NDQ4NEFFRgotOjEwNzZGMDAwNkMzRTZDQzk0NzJDRUQ3NTRCM0U2MDY5MUZCNEU0RUJFMgotOjEwNzcwMDAwNERFREFCRjcxRjUxRDhCOTlFQThBOTlEQjhGQ0E3RTREMQotOjEwNzcxMDAwODMzOEYxMDE2MzFEQUE2QkZCNTQwOTAxN0ZCOEJCRjFFQgotOjEwNzcyMDAwN0I3OTI1MDk3OTIwNUVGRUJDODhGMUYyMkU4QUUzMjY1QQotOjEwNzczMDAwM0E0RUQ3RUU2QzdDOEY2MEI1OTNDNTU3QkFENDZFMkY5NgotOjEwNzc0MDAwRDg5M0FCOTM1OEJFM0I1NTY5MDIzRDY4OTQ3NzNCNTkzQgotOjEwNzc1MDAwRENBRjJCRDBFRDREOEFCMUVGREUzRjIwQTIxRUVGMDg0QgotOjEwNzc2MDAwOTNEMjc4N0UyOERFNDBBMUY4RUQyMEZERDVCM0ZEODBEMAotOjEwNzc3MDAwMkVCMEQ3NjFCQzg0QUMzMEYwRTM1NEQxOURCNTFDRTI4RgotOjEwNzc4MDAwMzVBRDIyREU2QjVCQjhFMjE2MkY5QzIzRTkzQTkwRkIwNQotOjEwNzc5MDAwOUQzMjVBQkVFOEQ3MjJEQkE2MENFOTUyNDY4QzFGRjg3MAotOjEwNzdBMDAwMTEwOTZEOUEyNEMwRkVGNTdBRTQ5RjA1MDc5ODVGQjgyOQotOjEwNzdCMDAwNzA3RDdDNzlBOEU0REY5NUJCRUY1NDQwRUY1MjdGRUVGQgotOjEwNzdDMDAwNjRFQ0JFODdEMTRGQzUyMzk2RjIwM0ZGQzhFNUE2MTUyQQotOjEwNzdEMDAwRTMxRjk1REJDREY1NDExRTNGMThFQ0U0RTdCRUM3OTJGMQotOjEwNzdFMDAwQjFEQzdGQjdDNURFMEY5RTJBRTY3RkE3OENEMkE3RUI2MAotOjEwNzdGMDAwOTg0OEUwM0NDMUY5MDMyMkQyRTdGQzZFNzY3RTAwRTNCNAotOjEwNzgwMDAwRkNENzAxQkY3NzJCQjFFN0E5Q0U4MjdDNURENUJGMUUyNwotOjEwNzgxMDAwM0JGQkNDRUY4QkVFMDYzRURBRjc0RUMxNEY2OTdBNzYzMgotOjEwNzgyMDAwREZEQjIzN0UwNUY5NjdERkNDN0E4N0Y0NkQzRkU1QTBDNwotOjEwNzgzMDAwMTNGNzU1QkEwRTdBOTBGRkJCOUVGRjRERDZERDkwN0ZCMQotOjEwNzg0MDAwQ0U4RUYxRUNBRTgzNUYxNDAwM0Y3NUFEQjQ1NzgwMUU1MQotOjEwNzg1MDAwRUNFMkU3RUY1NjNERkY0NTQxMDdBRUJGOEQ0OEM3QTlCMwotOjEwNzg2MDAwNEVFNjRGOUYzRkYwNUZFRkMxRkQ4MUYzMDdFOEFDQzBFQwotOjEwNzg3MDAwQkUzOEU4NDJGOUFBRkJBNTEzRTM2RjVEQ0Y3RjUxMTQzMAotOjEwNzg4MDAwRUIyN0ZDQTVGM0E5RTVGQjlENUQxRTUyQjYxN0UwNEI2NwotOjEwNzg5MDAwNjJGQjQ0NzVCRkJBNkUxQkJDMkY1MUQzNzY0ODU5NDA2QQotOjEwNzhBMDAwRUJBN0JDRjBBNzAyRDBBRjVEN0I5OURERDQyOTc3M0M3NAotOjEwNzhCMDAwMEFGQjc5ODEzNTBGMzRDQTk0NUU5RDIwNjQ4MzY5RkY4OQotOjEwNzhDMDAwNkJERTI4MDEzOUVBOEI5NzNGNjE1QzcxQTBGODU4RkNBOAotOjEwNzhEMDAwN0YwRDNFMDQ5REU5M0Y0RjE4NEM4NTI5MDdGRkY4REVEOAotOjEwNzhFMDAwM0JBMDI3MEVEQTkxMkY4REY5N0UxMjU5ODFGNkNDRTU1NwotOjEwNzhGMDAwRTZEREY0RkZEQ0JDODVFODQwRTZCRDAzRTYzREUxRUZGNAotOjEwNzkwMDAwNzdERUQ3QzBBMUExRDRCRTcyRDA5N0NGOUZCRjBCRjNCMwotOjEwNzkxMDAwN0IzQzdFODQ3NzgwRkNGRUQyREZGOUZDQUY5OEVFN0I2NwotOjEwNzkyMDAwMjlEREJEOTc5RkY3ODc3RkU3RjNFRTlGRUVCRjlFQ0JFNAotOjEwNzkzMDAwRTlBRUMyNzk5OEJBMTdGRTg0RjA1REE5OUU5MzEyRkU1MwotOjEwNzk0MDAwQkVFNUJEQkZGOTFCRjZGRTVBOUJCRjM1MjcxQkNGOTM4MwotOjEwNzk1MDAwM0FDMEIwNzA3QjY2QjY0MDc4NzFFREM4OTkyQUQ4OUQ2MAotOjEwNzk2MDAwNjIzRkVGRDU0QzQ4NjA3RTk1MjhCMEY3MjFDODUwMTY4RAotOjEwNzk3MDAwMEYyNERDQ0Y4MjYzMERGODBFODg5QkREM0I5M0RDNEQzQQotOjEwNzk4MDAwNjg3NzEzQzlERkFFNTNCQ0FDQkQ3QUJFMUZDRjFBOTE2NgotOjEwNzk5MDAwNzE2RjA1MjE5RjM5Qzk4RkYxNkU4QkJGRDkyODEwNUQ5QQotOjEwNzlBMDAwQTBGNkFFNzRGNTM3OEY4MURGMjM4RkI0NDVFRDA1OThDRgotOjEwNzlCMDAwQkUwRjY5MzM4RjYzQ0FBQTYyRjI4N0RDRjlFNkJDNTM1MwotOjEwNzlDMDAwMzNFN0VEQkMzRjA3NjFGMDNCN0MyNDBDRjE2QzcxRDRENAotOjEwNzlEMDAwNjExNUNFRDM4OTYzMjUwMjRGQTUzODQ5NkIwOEZDMEU4QgotOjEwNzlFMDAwQkJDRkZDN0Q1MjAyRTE3RUVGNUY4NkM3OEEwNDE2QTdGQgotOjEwNzlGMDAwMTI4NTcxRUQzQUUwNzE5NDBERTNEQzc4NDgxQkYxRTJGOQotOjEwN0EwMDAwQzdGN0JBMDhGN0FGN0JGMURBRDQwRUY4OTRDMDNGNjYzNwotOjEwN0ExMDAwRjYxN0ZBRDU4NEZCRDMxMkVGNDIxQTY5RDM5REU2NzZBNgotOjEwN0EyMDAwREM4RkJFMkM5RDE4NURCMkFBMzk5RDk2OTlFODYyRDA3NAotOjEwN0EzMDAwMjEwRTdENEM3NDMxRjA3Q0E1RjRCMUQyQzU4QUZGRUJFOAotOjEwN0E0MDAwMTMxODVGRjc0NzJGODMyRTk5NkUxREVGRDdDOURDN0Y4MAotOjEwN0E1MDAwMjgwMTNGMTNGMjk5MDE4MkZCQUJEQzdGOTA1Mjc0QkM4QQotOjEwN0E2MDAwQTcyNEFBN0VCQzk3MDA3RTVDOTQxQUUwMkZFRkRFODZFNgotOjEwN0E3MDAwRjFBNDczM0Y3RkZGREIwMDRGRDVBRjQ0RTJBMEY4RUJFQQotOjEwN0E4MDAwRENFRDIxNTFGODVFMEEyQkUwOUY1NkI2ODlCODRGNDBENQotOjEwN0E5MDAwQTQ2OEQxQUM5ODdENjJDMzBGQThGQTg1MDdFNzUzQjlGMwotOjEwN0FBMDAwRDcxRTlFNEVCRkFGRENGNzQxMDFEQTYxMkJCQkQxQ0ZCMQotOjEwN0FCMDAwMDlGRDVDNjA3NDBGNzUxNEMwM0U3MEE1QzRGQzExMkJFOQotOjEwN0FDMDAwQkZBQzQ5NjBGMTk2QjNDRkI5Q0EyMEFFMjNFQzYyRTdGMAotOjEwN0FEMDAwN0YyQjIzQjdDOEY2OTg3MzREQTEwNDk5QzU5QjlFNzM1RAotOjEwN0FFMDAwQTE1RTA4M0QyMUUwRjkyODgwMkZGNkRDQTlFMTg3OUMwMgotOjEwN0FGMDAwN0Q0MjYwRjBFRDk3RjE5RDk4Q0E1RDRGNzU0MjdDQUE3QQotOjEwN0IwMDAwRjIyREJCMUZDQ0Y4QkE1RDlGRTI3RUM4OTQ1RkVDRjEwQQotOjEwN0IxMDAwNzZBMDFGMkU5QUUyMTI3REUyMDFCQjQ0RTQ4RkRBQjYxMgotOjEwN0IyMDAwMUFGNDQzNjgxRUY5QTIzNkMyRkRFRjJCRjQ1N0FCN0U2MAotOjEwN0IzMDAwRjFGQzNFQjg3MDU2RjVGNEUzNUU4ODdGOUQ2OURGRTFBNQotOjEwN0I0MDAwQzVCOEMwQUU0QkM3RTdGQUY4RkY5MTM1RENGRkZGRDZFQQotOjEwN0I1MDAwNjk3NjRGM0JCRUZGN0YwNkZFQTA3NkYxRDMwOTk2RkIwOAotOjEwN0I2MDAwQUJCQjA2QjFGNzE0NDlCNEU4NTJFRjcxNTVFREI5RjA2QgotOjEwN0I3MDAwMjhDNEFGQ0ZFRUZERTQ1MTgwQkJGQUNGN0Y3ODE0RkM3MAotOjEwN0I4MDAwMEE3MkQwQTlDMjdEODJCQTlGQkY4RUYxM0VFM0JCREZFRAotOjEwN0I5MDAwNzAzREQwRjlDNEUzMTgyRkVEN0M5QkZBMUZGNDVGRTcyQQotOjEwN0JBMDAwRjNBN0IzQzBDRkVDN0NFQThGNjkxMDRGQjlGM0Y5QTkwMgotOjEwN0JCMDAwRjg2RUNFOURDRjRDNDkyNzcxRjQ4OTkxMDJGRjg2MDc1QwotOjEwN0JDMDAwMTBBRkI1RDJFRDQ4REIxMUY0N0ZDRTUxQkE4M0ZGRDlBNwotOjEwN0JEMDAwMTNENzg5RDRCMDc4OTlDNkUzMzlCQkUzQzdDN0ZCQzREMAotOjEwN0JFMDAwNkZEQTY2N0RFN0M2NDI0ODY1QkY0NjA2MTBDNzM5NDE3MQotOjEwN0JGMDAwRTkzOTY2MDA3NERDQ0RFMzc1OTE2RjVEMzI4RTczMEVFQQotOjEwN0MwMDAwRkVBMEY0M0E2QkExRTM4NUI2NDU4RjNEMEM3NTZEODNGQwotOjEwN0MxMDAwRkE4REUzNDQwNzgwM0YyM0ZFQkUzRjQxRkYyMjAxRTQ4QgotOjEwN0MyMDAwNjhFRkJGNjBGQzBDRTgzNzlENEVCODczQ0Y4NTJDRDg0OQotOjEwN0MzMDAwQkZGODQ4RUU5RThCRUY4NTNDNkY1NzIxMUU1MUY5RkMzMwotOjEwN0M0MDAwOUIyODRGOURDRjFDQzdGODM2RTE3MUYwNEVEMkYzOEZDMQotOjEwN0M1MDAwQzUyQkY5OTlDQ0JBRUQxRTE2RkZFMTc0ODBGODkwRTZCOQotOjEwN0M2MDAwQzU3MjFFMDc2MjdDNkRDNDg3RkE4QjBCOEQ3MUIxNzM3MAotOjEwN0M3MDAwMjdDNkJFNDBDREY2Nzc3OEJDQTU5NzZFQzI0NEEwRDc4NAotOjEwN0M4MDAwRkI5N0RDQ0YzMEYwQTAwMjFFQUU4RDhEN0JDNjhGQzM3QwotOjEwN0M5MDAwRjVDNDNEMkQ3NDAzN0E0MkJDQjMyN0FFNDlEODEzN0I5QgotOjEwN0NBMDAwNzU2MUUxQ0Q3ODcxRjRDRTJEMkM1RURBMjlDNzNGOEY1NgotOjEwN0NCMDAwNjVDNDQxQUY3NjU5RTI5RkUxODFDNTNGMkYzNzhGMkJENQotOjEwN0NDMDAwQzVEMzYwOTc4NkZENUFGMTc1RjZBQkY4RkFGRDVCQUU0OQotOjEwN0NEMDAwODE5RDVGRTg3NzdGQUREQTdDMUZFNjNEMjUzOEREMDVDNQotOjEwN0NFMDAwRkI2QjZERUYyQjA0Q0ZBNzc0QjM3MzJCN0NCRTY3RjlDRQotOjEwN0NGMDAwRjlEM0IzM0YxNzMxMkVENjE0Mzk4MkZBRERBQTNGOEM1RgotOjEwN0QwMDAwRkQ1NzJCQkM3NzcwNzg2QkY3QjNGNUUzRUM1RTRGRDg3QgotOjEwN0QxMDAwNERGQjM5N0JGODM5RTRFQkRBRERFRjYzNUNFRUU4QUU3RQotOjEwN0QyMDAwQTc5NThFOThGNTE2RDY4RjcwQ0M3Q0NFM0U3OUE4ODAxQwotOjEwN0QzMDAwQzU3OUUzREYxQkFCNzEzMTdCQjNFRTQwRkM3MUVBNzZCMgotOjEwN0Q0MDAwN0Y2QTFBQTcyQTE0NTE5ODFENzBFOUYxQ0U0OEZBMkRCRQotOjEwN0Q1MDAwRDBERjk5NzYxOURGNEQzQTEzMTFFM0JFMTcxQzcwQzlCNQotOjEwN0Q2MDAwN0MxRkExOTVDOTBGNUQ0N0YxOUVDMDcxNzY3RkE3RjA3QQotOjEwN0Q3MDAwQjUwNDNDNTc3RkU3RjFEMjc3RTBGREI3M0JBOTU4ODNDNAotOjEwN0Q4MDAwRERERkI2ODJGMTY5REI0RkY0MjE0MEVGQjZFM0RGMTNBQwotOjEwN0Q5MDAwNjFGRERBMDdGODhEQjFGRjhCNEVENDRGRjE1MEZENTBFNQotOjEwN0RBMDAwRjQ2RUEwMTBEOEQ1QUE3N0FFN0RDQjY2ODI5RjhFOTM1NQotOjEwN0RCMDAwMEVFQjQyMjNFRDA3RUU4M0MwQjkzOUJDNTdFRTlENTY1QQotOjEwN0RDMDAwMEFGMDg4QUE0RDc1MEE3REU3MjFCQkY5N0Q1NURFQUYyMwotOjEwN0REMDAwQUM5QUVGMjE5MEFGQzY2QkQwOEY2RjI2OEI0QjY2Q0NFMQotOjEwN0RFMDAwMzI1MjE2OUYwQzE5Rjc4N0NBMTNDMkFCRTg3QzdGQUZEQgotOjEwN0RGMDAwMDYzN0JCMjg1RTdDOUU4REQ5MkYxMTc4Mjc2QUEyMDY5NAotOjEwN0UwMDAwRjZEMzYzMkU3RURFQzE0QkJDRUNCQzgzM0I2NEEzN0EwRAotOjEwN0UxMDAwRkQ2MUZGRjYwRDkzMDg5RTY3RDgwNjdDRDk3MzlFODE5RAotOjEwN0UyMDAwNDQwQjgwMkY4RDc2N0RFQTJERTcxRDMyRTExMzJBNUEwRgotOjEwN0UzMDAwMjI4NzMzMTdFRTI1NTBGREIyNkE4Njc3MkJFNDFGRjFCNwotOjEwN0U0MDAwQjBGN0NEQjI0OEY3MjEzOERGQjA4RERCQTNEOTYwMTU4QwotOjEwN0U1MDAwRTdGNjdERTdFQ0VCQkU2Rjk2MzJBNTc4RTkzMDNGODUxQgotOjEwN0U2MDAwRDNGNTVGNTNFMTVDN0NDQTJEQzU0RjBENTE2OTg1MkQ1QgotOjEwN0U3MDAwNjMxQURDQTM0OTc5QkM3ODZDMDZDRENGNUZGRkY0MzQ3QwotOjEwN0U4MDAwQUNGRkY3RTJCMTU5MzRGRjkzN0IwRUIyRkEyQTAxQ0Y2RgotOjEwN0U5MDAwQzFCRUIwQUU3NjFBRjBFRkQ3OTZGQkQ5MTQzMzY2QjlFRgotOjEwN0VBMDAwN0YwNUYwNzcyRUYwRUU3NzE3Njk3MEFFQTI1QkUxRUZGOQotOjEwN0VCMDAwNjUwNEEwREREMDg5MEM3Rjk5RUU3NzlGMDI3RjY1OThERAotOjEwN0VDMDAwQUQ2MzA1RjBFQjYzQ0Y3RjkxODRGNzE2RjlGQkExMkEzMAotOjEwN0VEMDAwNjk1NEUxREMxNTJEOUE3OEYxMTJFN0YzRkFCQ0ZCQ0M3QQotOjEwN0VFMDAwRjVDQjhENDlDMTc3ODEzRjlBRTc4REJDNkYxQTFERUZBNQotOjEwN0VGMDAwRTE4QTcxMEU3NjBFRDBGMjRFQTM5QTgyNzQ1REM4RTlDMwotOjEwN0YwMDAwNEFGODNEQ0I0NTdDM0U4QkM1OTBDMjAyREZBRDVDN0YxRAotOjEwN0YxMDAwMTlFRjUxNTc4QjU3RjQxRTM1ODdBQkRCRDVFRkZCNjc1NQotOjEwN0YyMDAwN0YwMDc4MzM5MzgyN0YwMEZDNTlERjNGN0JDNTE1QjgxMwotOjEwN0YzMDAwMDBGNTE5RTU1RkUyN0Q1Q0UzM0QzM0VCQkI2ODQ0RUFBNQotOjEwN0Y0MDAwOEVGQjNFRkI1NkZFMkU1QTdGRjBGRTlCM0IyOEJBNjkwNQotOjEwN0Y1MDAwRkYzOTJGNjg3QjhGNTEzOTFCQjM1MEYxQzNEMUNGMzExQgotOjEwN0Y2MDAwQ0IwQkZERDIyMEMyMjYwNDc2MTBBNzFGM0NDRjg4Rjc4QQotOjEwN0Y3MDAwMUZFRTIyQjg1RkRCNjUxNzc0RjBBRkJCRkU0OTQ1N0Q4RAotOjEwN0Y4MDAwOUVCOTcwM0FGQTVGNURBRUVDMDg5QzMzRUFCQTVCQzMwNwotOjEwN0Y5MDAwN0QzRDhBMDEwMUU0NjlFODgxQzQyOEY4ODc1NDFFM0VDQQotOjEwN0ZBMDAwQjdDOEMzRTc2NkZFMzc4RkRCNzU1MURCREY4MUZEQTlGQwotOjEwN0ZCMDAwQkMzRjZBQTBDNURDOEJFRDEyOTk5RUVFNkFEMDEwOEU5NAotOjEwN0ZDMDAwQTEyNDc0MDhENkZEODE4RTk3RTNFNkVCMzdBN0NGNDY1MAotOjEwN0ZEMDAwOUI5RUVCOUU4MEY4MUZFRThFQzFGRjI4NzdCRjc0Q0M2RQotOjEwN0ZFMDAwNzczMzNBRTZCQkUzRDBEMUZBNkVERDdCQUVFMDU4Njg3QQotOjEwN0ZGMDAwNzdCQUZDMjhCRTVGNjc3REFGQ0U0QURGM0FBOUY1MjE4QwotOjEwODAwMDAwNzgzQjJCRURDMEE3QjhGRTE4RjQxQkIzN0MyQ0QyMjkwQgotOjEwODAxMDAwODY5RTkzMDA4RTMxMDczRUI1MDFCQzA2MUQxRkVDRTcxRQotOjEwODAyMDAwM0M3OUE5OUJBRDczRDZGMUQyQ0EzQTA2MDdFM0I0OUY1NwotOjEwODAzMDAwRTVENjRDRjcwRTBBMUM0NTdFODlDQTY5QkE4REM1ODdGQwotOjEwODA0MDAwRkFCNkVGQjdGRjlDNEI5REYzMkM1MDU5QkYxNEZGNzM0QQotOjEwODA1MDAwMDA0RjA2RkU2Rjc1RjNGQkVBN0RGMTdGM0JCNEEzRjg5QQotOjEwODA2MDAwQkYxREU2M0YwMEZDQ0ZCQjE0RkUwREZCQkY4QUVCODdCNAotOjEwODA3MDAwMkFEODlGQTI3Q0Y0MUZEQUNDQjQxQzNBRUUzNEQxOERGRQotOjEwODA4MDAwNzJCMDY0ODdDOEY3MzFEOUZCNUY4NjNFNTk3MjVERkRENwotOjEwODA5MDAwMjFCODE3QjlFNDY3MDJGMkVCNDJGRUZFRTUyN0ZDRkRDQQotOjEwODBBMDAwNEJFQkI5QzFGMkIyMTBFQUNCQ0I5RjFGMENBMzNFQUE5NwotOjEwODBCMDAwREE2NTJFRkY2Nzc3Q0ZCQjk3NTk3OERFMTcyNDM1QUQ4OQotOjEwODBDMDAwRjdCRDRFMkJGRUNGQkJCOURFNThFOEI0QzU3QjJGRDcyQQotOjEwODBEMDAwNDg4N0Q2REI0Q0U3Q0MzM0E2RjRGNDgzRkVBMENGQTZDQQotOjEwODBFMDAwQkQ4OUYxQjg3Rjk1MDlDNDEzNzQyOUE1MTBERTE5MjA0NAotOjEwODBGMDAwODU0MjA5RjQ1QkNDRTVEN0U4NkZEODcyRjNGQTlGMUQ4RgotOjEwODEwMDAwMzJERjQzQ0M2RDMxREY0MzFDREU2QUJFODc3OEQ1NjYzMwotOjEwODExMDAwRjMzREM0NTE2MUYzM0RDNDZCNzY4RDMzRTU0NzQ3QUUwMwotOjEwODEyMDAwMzdCNTFGQjM3RkIyMjkzRjM2RkE0RDUzRkJGMUM3NjYwRgotOjEwODEzMDAwOUFGMjEzREFCRjY3NkE3RkVENUJGMzRERjVENzc1NTQ5QQotOjEwODE0MDAwOUFFQTZGRjg2ODk5Mjk3RjYzRjczRjlCREE0NzE3MzFGRQotOjEwODE1MDAwRkQ3OEI4NjE3OTExREM1QjMwRjA3Mjc4QTk2MjUzQTFDNwotOjEwODE2MDAwN0NFOTA4OUI1QTEwNUI5RUE2NkIwNTkwMTZFOUUwN0ZBMAotOjEwODE3MDAwRjUyNzJGNTMxQzNGMkE4QTVEQTc4Qjg5NkNEMjZGNTMzQQotOjEwODE4MDAwMUNFNjdDRDQ2REZFN0Q4Rjk3MkM3MjM1QTQ3RTUyQ0I3RAotOjEwODE5MDAwMDg5QTFEQkMyNDBGQ0Y2MzUzRjkzQUM2RjVEQkIxMDEzMQotOjEwODFBMDAwRUFCN0RGQTA3Q0Q1NDY5QjIwNkY5NTJGRTNCRDAxOUFFRgotOjEwODFCMDAwODZEODhGQURCMDc3OUYxRjcyOUFGOUQ0RDc4RjVFRjlBQQotOjEwODFDMDAwOUREQjM4MDdENENBRkE1M0NCQzY0QjI2MzkzMUNBM0Y5OAotOjEwODFEMDAwMkE4QzJEMTcxNjRGQzc3MzQwRkRGNUFCRjgxNjVDQjMwQwotOjEwODFFMDAwN0QxMEJDM0IzQzBGNTNBM0JDQTlDQzE2RjdEQ0RGNjc2QQotOjEwODFGMDAwRUVCRkQwN0ZEQURDQzc4RUZBMENGMDdDQ0VGN0RBMjY0MQotOjEwODIwMDAwMzhCRjU2N0I3QjM3RkE1MTE5NzYzMzVFN0FGM0VDNUREMwotOjEwODIxMDAwNjMwMzlFNDcxQTQ4M0VBQ0Y3QzZGREI2NDUzNEUxRUIxMgotOjEwODIyMDAwMzZDRTc3RDFEQjMzRDNFMDlDNDE2NjNGRkU1NUExODc0NAotOjEwODIzMDAwRTlFQjQ3MUI0MkQ3MkMwNEMyMTE4N0U5NUU3OTU2QjQ5QgotOjEwODI0MDAwNkUxQUY4MzlDM0Y4NzlFQjREQjZGOEU3QTA5MjNDMENGQQotOjEwODI1MDAwMkZFOUEwNDhDMTVFNTBERDY4MkY5QzJCN0ZENzBCNEZDNAotOjEwODI2MDAwQzdEQzY4MEYyNjc5RTgzOEYzQzdCNDE3QjFGQkQ0QkE3NgotOjEwODI3MDAwN0ZFNkU4NUVCODBEN0Q5NEU1MEU2QzAyRkQ5MkU1OTMxNQotOjEwODI4MDAwODg5NkREMTc5RUY0REI4MzJERjA4RTc4NjNCMkNERUZGOAotOjEwODI5MDAwQzY3Q0I3MDBFM0Q5N0Y0Q0M4MjAzQTVFRTM5RjQ1ODQ5MwotOjEwODJBMDAwQUZGMUYwNzU3ODNFQzhFRUFFQzdCOEFCMzE0RkMyQ0Y3NAotOjEwODJCMDAwMDkxODcxRTYwQkJFRDk4OTgwQ0ZDNkFCN0JFRTA3RTEwQQotOjEwODJDMDAwN0I5MDE3RENDMTc2RThGN0MyNDYxOUM3NkQ5QzJDOThFNQotOjEwODJEMDAwRUE4RDc5NEI5QkJGOERGN0JFQjJEQzZDREVFNTc0REVCOAotOjEwODJFMDAwMDBCNzNEOTNDMUQ1RjhBODQwMzIxMUFFRkZCREY0MjhDOAotOjEwODJGMDAwRjgzNUZCNUNGOERFMDdDNUM3MTBDMEM3MzkzREZCNzMxNgotOjEwODMwMDAwOUIzMTc5M0FBRjlBNDFFRUFENkJEMTlFODlFRkE3NEU4MgotOjEwODMxMDAwMzdFNkExOEYzNEQxM0JFMzJBMzNGQ0UyNDYxOUZEQzY5MAotOjEwODMyMDAwNDU0OTZFM0NFRjEwNkU4ODcyRkE5QUU3REZFNDlCRjlEQwotOjEwODMzMDAwOUQ1QjI5NUNBQjRFODhGOERFQjZENkQxQkFGNDI4RkQzOQotOjEwODM0MDAwQUVCQ0NERTUwRjZCN0RGMTdGNEU2M0YwNTJGOEE3N0I5RAotOjEwODM1MDAwNDBERTM2NEZDM0Y5RTM3OTZBODBGRjMxODEzQzlDMERFMgotOjEwODM2MDAwRkMxNzJDNDUzRTE4NkMyM0IwNkZEM0M3NEVGMDMwNzkwNAotOjEwODM3MDAwOUVFRDUxRDk3QjM1QkU3MjI2ODdCRTg1RDc2Q0E3RkQ5MQotOjEwODM4MDAwOTU3OUZBNURGNzZGRjNCMDc1RkYzNjRGOUM3NUZGNzIwNAotOjEwODM5MDAwRUYwNzU3OTdCNTFGODU1NEQ0NDVCNDM3MDhBOTFGMTE2NwotOjEwODNBMDAwNkI0NzUzM0Q1NjBFRkQxQjc5MzFGMUM3MDVEMDZGRkY2QQotOjEwODNCMDAwNzY5QUJGNjU0NEY2RTVFRDM0QjBDRjgwMEYwREZCRUM0NwotOjEwODNDMDAwNEU4RkQ5QUU4Q0QxQkIzRkY0MzBCREZCNDNDRkMwRjQ1MAotOjEwODNEMDAwRUU4RkExRkRFOUVGNDVFM0RBMzVBOTRBN0NCREY3QjQ5QwotOjEwODNFMDAwODdERDFGQUM1MzE1ODJFNzAzRkJEOTBGRDhDOUU1REE0NwotOjEwODNGMDAwM0FFRkZFRDZBNUNCRjkxRjM5MkU4MzRGQ0RGQUZFRkNGRQotOjEwODQwMDAwMzEyRDExRjQ1NENBMDc0MkRDNzdCNzg2MkNCRjZEM0M3RQotOjEwODQxMDAwRDA2QjlCQUQ3ODMzQ0NGNzY3MTZGRTc4Njg0RDlGRjUyRgotOjEwODQyMDAwMkJDQ0YxMTg4RThCQzc2QThBNDc5QjA5OEYzQjNDOTdGMAotOjEwODQzMDAwQjAwRkJGQjZCRUFGMzBERkYzRTlFNEY4QTY3QUJGMDlFQwotOjEwODQ0MDAwQzYzQjM3RUJCRDIyODg2QkQ0Q0VGOTFDRjVGRUQ3MUU5OAotOjEwODQ1MDAwQTdDQ0JDQUUxODdFMzkxRDY3MDVFMEExNzNENjlGNzkwNQotOjEwODQ2MDAwN0NBRTAzRTM0QUFCOUVCOTJBMTFFMjU4MzU5MzBEN0FFQwotOjEwODQ3MDAwNDRGMDdEQUFGM0Y5Mzk0ODk3NzNGQkVDM0FDMDc5MkVBMgotOjEwODQ4MDAwOTk5RDEzM0RCN0VGREFBMzEwRjdGOEE0RTE1ODcyMkNDOQotOjEwODQ5MDAwN0RDRjNENzlCQzQ4QTZGRDlEREI3QkJDNDhDMjAzNzcwMAotOjEwODRBMDAwNjFEMzNCRDQzNTE3N0Y1QjE0NzBGN0RFNEJFOEUxMzdCRgotOjEwODRCMDAwMDc1QjhGMzYzQTU5N0NFNTQxMzgxNzM3ODZEQUJGNkE1MQotOjEwODRDMDAwMTJGMjY1N0E5QUVENUUyODE3MURCRjFERkMyMTVDMzlGQQotOjEwODREMDAwM0ZFNjJGQTY1OUIyNEFEMDMzMTZDMTdFRDMzQzM3RUVDMQotOjEwODRFMDAwNjdGOTcyQzlDODZDRkE5RDEyQUQ4N0UzQ0NDNEY5NkEwQQotOjEwODRGMDAwOThDMEVGMDRCODRFNDRGMUY3MDIzQ0VGNzY2MEY4M0VDNgotOjEwODUwMDAwRjE0M0IyMDI5RUMyRkZCRDFBM0MwOTc4NEYzQUFCMDk1MwotOjEwODUxMDAwODkxQUM0Nzc4QTZFMUU0NzUzNjkwQUQzQkZEREI3M0FGQQotOjEwODUyMDAwRjBGNzhDODQwNUFGQUE1M0E4RkVEQTNDOTNGRDhFRERFQwotOjEwODUzMDAwRjk2MzBCOTJDMDFGNjk1NTk5REVGMjBERUJFMTYzQjQ0QwotOjEwODU0MDAwOEIwN0U3NkIzNzE3MjNFNjc1N0M1NzQwNTUxOTFEOTI0QgotOjEwODU1MDAwMzM2QzZCOEEzNThDQzdGOUYzOThGRTI1NTIxQUZGM0RCMAotOjEwODU2MDAwMjlDQUI3MUVDREE2NDMxQ0Q4RjhDRUM1QkYyQjUyRkNENgotOjEwODU3MDAwQkZDRTAzNzg0NkRCRkNGMDRFOEZGQkFCNkYzOENBOTI2MAotOjEwODU4MDAwNjlGQkNDMjhCRTVGNUU5NEMwRTE5REMzREUwN0VGRkJCNAotOjEwODU5MDAwNEVFMzQ1RDM3RDE4QjVENEZDNEVCNzI3RDBCNDE0RTJEMgotOjEwODVBMDAwRkNEMEVGNkRDOUY4Q0U4QkI5OUVBMjM4OTE5NkJCMEI2QgotOjEwODVCMDAwQ0RFNUFFMEE5QThGRTE0N0VCNzdENkY2ODY1RjkyQUVBRAotOjEwODVDMDAwMzIzOEY2MzczODEwMEZCRjZDNTBGRDc5OTQ4RjBFMzQ2NwotOjEwODVEMDAwRjgzMDdGQjA0MUMzMzREQTMwMTJDQjBGMzdGODMxMkY4NwotOjEwODVFMDAwREFGNDZDOTg0RkZBQUY3RjkwMTRCQkVFQzJFRjU0OUQ1MwotOjEwODVGMDAwOENFMUMzNzU3MkU0QURGOTgwOEZERjg4ODhBRjE1QUY2OQotOjEwODYwMDAwOEU0N0ZFREUzNDlBOEUzQTg2QkQ2NzczMzJDNkZFRkUxMgotOjEwODYxMDAwRTlGMjU3RDI0QTI4NUYwREY5RDFBRkQzNEFDNkMzRUY2QQotOjEwODYyMDAwOTZCMEYzMTc3MDQxM0FGNjFFRUU3QTI1QTBGOTkzRTA2MgotOjEwODYzMDAwNzczNEM2MzQzQjg2QzJGQkE0QzE1QkM5NTg5NDIzRkQ4MgotOjEwODY0MDAwQzU4OUYwQkIwQjdCMzM2Q0I0N0U5QTk0RDdFQ0Y4MDdFQQotOjEwODY1MDAwODBBQkRFNjRFN0FGRTdFNzMzMUY5RjZDRDZBRkUzQkNDOAotOjEwODY2MDAwNENGRjY2MEFDNUUzQkM3MUY4MDk3RTUzMDBGREFDMzlDNgotOjEwODY3MDAwQzZCOTA3MzMxRTg5NTRCRkUxNzY4QUVCRTZFRkIzREY1NAotOjEwODY4MDAwNUY0ODU0QzdGQkUxQkRGN0NENUVDM0NFQTlGN0M1QkVCOQotOjEwODY5MDAwRTdCRTk5RkYwRTQ0RTJFMTI1NjgxNzI5M0VGNjNCMTAzQwotOjEwODZBMDAwMjkwQTdCMEY4OTA0OTM0REVGRURDREU1RkRDQzA2MDYzRAotOjEwODZCMDAwOUFEMDU3MUZDRkU2RkQxNTFENzkwRUZCODNERjk3ODhGMwotOjEwODZDMDAwRjVFRjg3RjBERkMzRDhDQ0Y1RDM3NDM1NTBFQzRERUQyMgotOjEwODZEMDAwNkQ2N0Q0NUJCRkVCNTk3NzZEMjFEMTBCRjY0MzAxODlGMAotOjEwODZFMDAwODBCRDA0RUQ4QTY5QkJENDBGMDMwMkRDRUYzM0NFRDcyMwotOjEwODZGMDAwM0UwQkY4Q0RFRkZEREQ5MzdEMDJDM0VCOTMzQzdEOEEwRAotOjEwODcwMDAwRkY0RTQ5RDQxMzk4MDdFM0ZCMTYzQzEyREEwMzc2Q0FFRQotOjEwODcxMDAwM0VCQjA2NjI1Mjc0RTQ4RkY4N0U5NEY4M0JDNTAxRTdENQotOjEwODcyMDAwRkM1MzBGQkNDRkVFRTVEOTNBMTQzOEJGQjhEMjVCN0MwRQotOjEwODczMDAwMTNDNDUxNDVBNTNFMDNGM0Y3NEU2RjgxRkM4MzlFRkFBNwotOjEwODc0MDAwODdEOEEzRERDNTM3MDExRkE0RjNGNzA2MDgwNDAwMDE4RAotOjEwODc1MDAwMEUwOEFBRTE4RjYzRkQ0M0IzNEU2NTY0OUZDQ0YyMkJGNAotOjEwODc2MDAwQkQzNzM2ODczMjIxNUYzRjBGRjgwOEYyOERCNEJGN0RFOQotOjEwODc3MDAwNDlDMTIxQzA0NzZFRTE4NkU2NjMzNzQyREU2ODdGMDM2OAotOjEwODc4MDAwQjZGRjg5NTc2NUZFOEYzQjk4MERGNjRBNEY1RUE1Nzk3NwotOjEwODc5MDAwNEY0QzVFNjI3OUUyNjBBOTMxQkY5QTIzN0ZDNDczRDBFNwotOjEwODdBMDAwQjUwN0Q4M0I1REE5MDc2NjA4MzBDRkQ0RkQzMzEwRkY2RAotOjEwODdCMDAwRTdENUI3QkMyQjM0OEM4NzhGNjBFQjA0OEI5NzFCRjQwOQotOjEwODdDMDAwMzBFRUUxQTZEOTgzRjc3OTYzRjg2MTlERDc2Q0M3QzQxMQotOjEwODdEMDAwREMyN0JDMEZGMERERDMxRjhGQUZDQjM2RjY5RTRBRjdGOAotOjEwODdFMDAwOEZEOEVGQzYwRDAzN0I1NDg0QjhCOTg2NjkyRURDQTNGRAotOjEwODdGMDAwQTdGRUMxNzAxMjVDMzk5OEQ2NUZFM0NENDEzQTVFQjVGMQotOjEwODgwMDAwM0JGQkNEQTk1QTJGNUZBNzY0Mjk3NzgwM0U0RUI1Rjg3MAotOjEwODgxMDAwMzVEOTVDM0Y4RjUwOEI3RjkzNDgyQjM3MEFDMUI1RjAxOQotOjEwODgyMDAwOUU2QzY4OEZBQ0UyN0Q5MzVEMTkyODQ3NjdCOThFMjJGNAotOjEwODgzMDAwRjU4MzMxNUZDREVGQkZDQjJCODM2QjQ3ODExRTU5QzRDRQotOjEwODg0MDAwRjQ2RTU1NzZBMDU4QTZERjU3M0Q5NzhEQkYwQjY3RjBBNQotOjEwODg1MDAwNUQ1NTUyMjQ2RDlDQkJGNzVDQjc5MTM3N0U0N0U0MjE5MAotOjEwODg2MDAwQjVENTA5RUZGMjE4RkI1QUI1RkIzNzY0QzEzRUZEQzcxOQotOjEwODg3MDAwODdERTQ2M0I3MTQ5NjIzNkMyNTlEMzc2NUM4MURGNjkzNwotOjEwODg4MDAwQTk2REEzN0M0N0JGRkJEOEQ5NjNDN0EzNUZGMjg3Qzg5NAotOjEwODg5MDAwQTA2RjAyQkVGRUQwNjhDM0NCRERGREQ5NTUyRjUyRkRCRgotOjEwODhBMDAwQTZEMzg1RUE2ODgzMDNEMzlEN0FGREQ1RTAwQTlDRjBDMAotOjEwODhCMDAwMkVCOEM5NDlGOUU5RjExQzVEMDVGRUVBQkNCNzFFRjUwMQotOjEwODhDMDAwRDhFMzhBM0EwQUY4QUZEM0ZCQzM2NkUwRTdBQTI0OTE1QgotOjEwODhEMDAwRjNFQjBGNUZENkYzRjg3RTNEQ0RFRkI5QjdFREE2QkY1MgotOjEwODhFMDAwNjhERjYwQTFEOUZFQTk3QkM0OERGQzQxRUQ5MkRGMDI1NwotOjEwODhGMDAwMUZENTZFQjY4NTYwRkRCMzM5REFGMUJFNzMyN0U4MUI2QwotOjEwODkwMDAwRDQ1RkU2RkI5OTFCMDVBNjBGNDM3MzU4MUNGQTcyRjc1OAotOjEwODkxMDAwMzQyQkJFNzQ5MTcwOENGREJEMjQ5MUU5QUIwQTI5ODQ3RgotOjEwODkyMDAwRkI3NjE1NUY3QUIxRkUyRjFGQzc2OUJBMEZEQTc3MUM4NQotOjEwODkzMDAwMzdENjFCRTM1NEY3OEU4MzdDNTJGREY2NjFGNENGNUY4QwotOjEwODk0MDAwQkNEQUIwQUY3NUQ0RkY3NzNFQzVDRjYxMzhGNTc0RThCNwotOjEwODk1MDAwRTc0MUQ5RDAyN0Q0Q0ZBNDc4ODZFNzFFNzkzRTI0RjkwMQotOjEwODk2MDAwMDg3OUE5NDdGRkFDNkQyRUM5MDRGQUY2RDYxM0IzN0U3OQotOjEwODk3MDAwRDIyNTRBQjc5NzEyNzgzRTc0N0Y3M0M5QTQzOEVEMTM5NQotOjEwODk4MDAwMkNFRDczOENGQzRGQjE3RjJCM0MwRjNBN0JGMzBFREE0RQotOjEwODk5MDAwNUVGQTkzQkQyNzBGRjA2REIwNTlGQTRCMzZDNkRGODZFRAotOjEwODlBMDAwRkQxOUZDQjdDN0JCRkI2NTc4RUZFOUE1QTQ0MEYxMTA0MgotOjEwODlCMDAwNjZERjY4MjA4NzVCMjQxNTdGODdEMUMwRjMxRUJFM0UyQgotOjEwODlDMDAwNTU3Qzc5OEQwOUZGQkQ3ODJGMzA5NTlGNkVEMDRDRkI3QgotOjEwODlEMDAwQTE4QjE3MkVDMzdCM0Y3QkY4M0E1NjQxNDJFQzNFREIxRQotOjEwODlFMDAwMjNCOUE2N0REMEZGMEZDN0Q3ODVBM0I4MUYzODRBRkU4RAotOjEwODlGMDAwQzY3MDhDMzJFOTgxNUUzOEYyNERFNTVGMTcwRTMxNjk0MQotOjEwOEEwMDAwNzY2OTM2RUM1M0FEQjFBMTlGOTA2NjBCMzk3MkMwNkU5QQotOjEwOEExMDAwRkI1RkVDRjcxQTIwMzQwN0U3OTlBODYxNkNEQTU3Q0VCMAotOjEwOEEyMDAwMzk2MDlGMDdDNjc5OEU0NDhFNDlFMzQwOUU3NDZEMDU3OAotOjEwOEEzMDAwQUM1MzNGOTFEMEFGQTFFNTBFMzkxOTg2NkVENUUxRkQ1QgotOjEwOEE0MDAwMkIyQTk1RDg1RjRFNzVCMDg2MTlGNUU2Nzc2Mjg3QUIwRAotOjEwOEE1MDAwQTQ1OEEyRTVFM0Q1NzlCOEVFRTU5NERENTUwN0Y2RkQxNwotOjEwOEE2MDAwMzY3N0UxQ0Y1NzEzOTNCQ0EyN0RCMjVBNTg4QUY2QzcyNgotOjEwOEE3MDAwOUFDNDE3OUI2MURGMzgzRDgxRDkzMzAyNzlCMUY5NTgyNwotOjEwOEE4MDAwNDZCQzdBMjZBRjJERjdCRDc4MTNDNDMxQjZBRUQ0QUU0RQotOjEwOEE5MDAwMDY3RjZFQUIzMzFDMzkwQ0VCRjkzRDZFRkMzREFBREM1NgotOjEwOEFBMDAwNzVFMTE2RjhCRDBBNzE4MzBERDc0QjMxMjlCQzZCMkJDQwotOjEwOEFCMDAwOUMxNzc4NjA4NDFGRUM4QkFENjBENzQwRkIzNTZFNUNGMwotOjEwOEFDMDAwRkY1QjFBNDI2ODJGQUZFMkVCQzBGNkY1OTM1NDM4RTcyQwotOjEwOEFEMDAwRENFODk2OTI2MUJENkI5MUVCNkYwNUI4NUVCQUVGNjQwRQotOjEwOEFFMDAwQjNFMzNBRDA2M0ZFOTY0MTNDRUZDQjgwNzU0RENCNzEzQQotOjEwOEFGMDAwOENFNUY1MTQxOTVCNTc2ODgzQzE4NTM0RjJDM0ZGNDRENAotOjEwOEIwMDAwQUQxMkQ0MzMyN0QxMEU2Qjc0MkZBQjA0M0I4RUQ2QkY3RQotOjEwOEIxMDAwRUNBMDc4N0EzQzk5RTM4NUQ3RTdGNEU4QTU5M0NEQTA1QgotOjEwOEIyMDAwMDdDNTE1QkRGOTEyM0FFRjFEM0Y2MzdBRUEwOURBM0YyRQotOjEwOEIzMDAwQkMyQjQ1RTcxMzgyNzcxOEJCNDc0OUU4ODcyNTI0QzEzQQotOjEwOEI0MDAwNkZDN0QwNzQ3NDBFRkI5RDVCQUExN0JERThDNzQ5Mzg4OAotOjEwOEI1MDAwNUY2MzFGNDkxOUM1N0UwRjFEREFDMzdBOTM5MDkxODMxNQotOjEwOEI2MDAwRkI5OENBMENGNjVFODNFMjcxRTNGRDY2RTM3NzU2REQ5RgotOjEwOEI3MDAwQzRGOEE3QjM3ODI5REY2NzcxNTlERTQzNzBBRTVGODkwNwotOjEwOEI4MDAwOUJFOTRFNzgzNzIxODY0RjE1Q0I3QjBCMTIwOUNDMDcxQQotOjEwOEI5MDAwN0I0QjU0Q0RFNUJGNDlFNEZCNEE4M0Q4RUZBRDBFQjcxQwotOjEwOEJBMDAwODVEMDJFQTM1Mjg0RTkzNTI0OEFGNkQ5NjhEMjgxRjk3QQotOjEwOEJCMDAwMzFFMDZERTZDMjM1MkMwRDJGOEU4RDI3QkFDOEUyQkI5MQotOjEwOEJDMDAwMDExMUVDQzdCNDVCOEQ3ODRDRjBGNTQ0QkFERUJGOTY2QQotOjEwOEJEMDAwQzhFMzM2RkM3NzhDNTM2NjE0RTI3RTdENjYxMkFCNUY4OQotOjEwOEJFMDAwMTVDOEJCMEZFQ0JDOEQzM0E2NjE5Q0M2QjBFRjhDRjVFRAotOjEwOEJGMDAwRDJCMERGMTY3Mjk4NTdBQjQyNUM3QkMxQjBFQjE2M0EyRAotOjEwOEMwMDAwNTkzRTc1QjZGRUUwNjg4ODZCQjY1MzBCMzQxQkVFMkZFOQotOjEwOEMxMDAwQjNGODZBRjlFNkUyMzRCMENCMTYxRUJBMTVFREU0NENBRgotOjEwOEMyMDAwOTVEOTY1OEIzNkNFNTA4MkEzRTFERURBM0NGNDA3OEExMwotOjEwOEMzMDAwMzc0QzQ4ODQ3RDg0RDU0RTdGRTI3NTg1RTg2N0UyRkIzQQotOjEwOEM0MDAwQjkwM0I1QzdCNkE2NUQzNTE5RTQ3MUFCOEQxMjkwQ0FFQwotOjEwOEM1MDAwRkI0QkIyRUUxRTBCN0NCMTIxMEZFRENDQUQwOUMxQzZCMgotOjEwOEM2MDAwMjREQUVGRDY3RkQ2RkNBQjY4RkVBNzRFQkRGMDM4OEM3OQotOjEwOEM3MDAwQjMzQTgxRDVDM0JCNTFDMDlCM0RFNzEyQjZFMUJCQzkzNgotOjEwOEM4MDAwRkQ4RDZGM0Q5N0YwNTIxMjdCN0ZDQUE4RkY2RjUzN0UxOAotOjEwOEM5MDAwN0M3RDAwODAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBBOQotOjEwOENBMDAwMDBGRkJEN0QwQjdDOTRENTk1RjhGRDY2QkU3OTY1NjZBOQotOjEwOENCMDAwOTJDOTYzRjIyMjA5MTNDMjRCNUU0RTlFODAyMjRDMTI2RgotOjEwOENDMDAwQzI0M0I0NEMxMDJBMjBFOEYwMzQ5MEE3NDg1RERDQkFDNwotOjEwOENEMDAwRkYwQzA0MzA1MEI2MDY1NzExMkJFQTg0NjJDNUFBQkJCQwotOjEwOENFMDAwNDFBMzFCMzVFQTgwODBCOEQ2NkQ0NERBRDIxNkZEOEZEOQotOjEwOENGMDAwNEExNTEwNDg4QUI1RDJGRURENjVDRjM5RjdERUNDN0M0NwotOjEwOEQwMDAwOTMxOUYwQjVGRkI0RkUzRUVFRjdEREU3NzlERjczQ0VFMQotOjEwOEQxMDAwQkQ3M0U5MTJGQzRENjEyQzk0QTQzMDU2Q0FEOEMxNTFFMAotOjEwOEQyMDAwOENGNThDNjE4Q0E5REUyNDA2Q0Y0RDA2NkZEMkUyMzQxRgotOjEwOEQzMDAwQzZGQTdFQTM2N0JCRTFGNTE3NjY2RjkyQzNDNkQ4MjU1NgotOjEwOEQ0MDAwRDEyRUZBNzlBQTk5QjFBMDg5QjFCM0NENkUxNjFDQzEwMgotOjEwOEQ1MDAwRDg5OTY2MzM5NTZCOTYxRjk4QzZBMDlGOUEwRTg1QjlEMQotOjEwOEQ2MDAwRjIxOTVCQzVEQTM2NjMzRkFGM0I5MjY5REM1NTAxM0REMgotOjEwOEQ3MDAwMEI4RTY0RjQ3NzA5RkU1QkJERkMyOEQ1NUZEREM5RUI4MwotOjEwOEQ4MDAwRDdCMjBFQUFCRjkyMzE0RjA3M0M2QkY3NUE1OUQwMUM4RAotOjEwOEQ5MDAwQUU1RkRGNTFBQzY5MUY0QUQyNTFCRkQ3MjVGQjA2M0JGRQotOjEwOERBMDAwOUM4Q0RENUIzREZDQkUyQTc4OUY1NjVENjJGNkUxRkE0NQotOjEwOERCMDAwNTg4RUUzMTNBQkE4QUY4N0Y3M0FFNkVCODhCMUFFNzdFRQotOjEwOERDMDAwMDQ1Q0RFNDk4MjhBNEVBQ0VERDBCMTMyQzZENjNBRTBDMAotOjEwOEREMDAwOUYyRUM2MUU1MEQ4N0M2Q0I3RjZGNzE1MTkyOTYzQzJCMgotOjEwOERFMDAwRURENjJBOUUwQ0M3OThGODcwNkFCQ0E4Njc4MUQ0ODgxMwotOjEwOERGMDAwQjJEQTY3QzRGNTM1NUUzNEQyRkJGMzBFQjM1RjA3NjNCNgotOjEwOEUwMDAwMUVDOUY0M0Y3MDJEQUM3RjI2RUI1MzE5Q0M1MzlGOTBCNQotOjEwOEUxMDAwMzg4RTVEQ0Q1ODhCMjU3MTM3M0U2N0JBMEM3REExMDgyMQotOjEwOEUyMDAwMzgzMDMzNTM3MTdFMzNGODJCRjZFQkM0Njk0Nzk0NzFCNQotOjEwOEUzMDAwRDgzRTQwRUQ2N0Q5OEVBOTBDNDA3M0M0NUU3MzAzODM5RQotOjEwOEU0MDAwRjczN0IwOTBDQTBBMDZDRTBGRkFGRDI4QjJERjU5MjNEMQotOjEwOEU1MDAwQjVFNTFCREREQUYyRUMwOURBMzI2MzdFODJENzRGOUE5MAotOjEwOEU2MDAwOUJDQTRFMUFDMkZERkUwNEE2RDYxMTAzMkVCNzAyNThBNQotOjEwOEU3MDAwQjE3RUVENUU0QkUwNjQwNDFFRUIzQjkyMzVFNUM2QUU4MQotOjEwOEU4MDAwQUNDMEM5ODg3MTZBRjExRjU5RjA1RjEzNUY3NzlENThCNAotOjEwOEU5MDAwRjcwNzQ2REZBRDBFQzA1QjNEMEIxOTcxREQ0MEMxNDZFMwotOjEwOEVBMDAwRUY1OEM2QUMxNkU2NDU3QzFERDg2RkYxQjAxMkU4Q0Y3RQotOjEwOEVCMDAwNjY2RUI3MDA3QzFCQkJBQjk1MjVGMERFNkE4N0VGMzA5MgotOjEwOEVDMDAwM0YyNzk2RTE2OTM1RjBGQThDMDU4ODBFRTA4RkRBMzk5NAotOjEwOEVEMDAwQkQ5OUVENUIxNUU0MTNCN0FCREFGRUNERTdERDAwRkYxRQotOjEwOEVFMDAwREQ5MzAyNEY5NTNEQUMyNDQ2QUNBMzBFRDY5MTFFNUU5OQotOjEwOEVGMDAwQzczOUVCMDc2NTg4MkY1OENGNkZFQ0E1NDgxNzQ2QTZGMgotOjEwOEYwMDAwMjQ4NUQ3RjNBREUxQjU1QzBCQUZDNjVEMzZBMjM3MTg0QgotOjEwOEYxMDAwRTdCRDQ0MThBNzYxQTdDRTZGODRCMkNFREM2MzQ0N0U2MAotOjEwOEYyMDAwQjkxN0U5M0MwNkRFNzIxQzRBNEMzQzZGNDMzQ0M3RTA3MwotOjEwOEYzMDAwQTdFREFDRkMzRUU0QzcxQ0U0MUYxOEM3QjZFRTI3NjVERQotOjEwOEY0MDAwMjc4QjgxOEZBQTM3MTdGQUEwQkU0RDA1RkU4NjcxNTQ3NAotOjEwOEY1MDAwRjhCRkE5MDhDOEQ5M0I2RDU1MzJEMEU5MjkzQkU3QzMxMgotOjEwOEY2MDAwMEQ4OTJFN0FFRTUwQkMwQUUyMzU1REU3Qzk0N0ZBRDU4NQotOjEwOEY3MDAwMjdCODQzQ0NDMUYxQTM2NjQyMTk2MENCQUVDMTYyRjlGOAotOjEwOEY4MDAwQkQxRUU4RUYyMTk4MUJDQjE2ODQwOUYwNzhDOEMyQ0IzMAotOjEwOEY5MDAwMkYzOUNBRUZERDA4RTM2RTRBRTZFNTBEM0ZCREI5RDVDRQotOjEwOEZBMDAwM0YwOUNBMTY1OTlFNDNFNTg3MEM2RDQxM0RFMERERkY0MAotOjEwOEZCMDAwODJDOUY1NDQzRUI1RjcyODU4NUUzMDMyRjAwNDRDNEQ3NgotOjEwOEZDMDAwM0Y4NDY1MjM1RUE2MjY0MkU3MjBCN0Y0MkY5QTc2OUI1RQotOjEwOEZEMDAwQTA1RUQwRUVGQjI3ODRBNzVDRkYzOUZCRjEzQzM2MjY3MAotOjEwOEZFMDAwNjY3RjdFNEQ3Rjc5REZBQzNGMThCRjUzNzc3NUY4RkIwNgotOjEwOEZGMDAwRDRDNDlENDEzRDZGRTdDMjc2MkNBN0U3MDMzRkY0OUZBMQotOjEwOTAwMDAwRkVBMjg5NkQ4NUUyMjMwNjc2OUIxN0RBRDU1RDJDNjM3NwotOjEwOTAxMDAwQzEwODM5RDQyM0YwNzlCNkQ5NDE3MjVCQkVBRjQzRjlBOAotOjEwOTAyMDAwM0QwNkY5QTk4N0U0NzA3RDQ3QUE0NkZFNEFCOTVDN0ZGMAotOjEwOTAzMDAwRjE1QTREN0YzOThFN0NDMjU3QkREQTQzRjJBREZFRTI2NAotOjEwOTA0MDAwNjRGQTFFMTJGMkY0NkM3MzI2RTk4OUY4RTMwQ0QyQzhCNAotOjEwOTA1MDAwRjVGMDM4MTM1OUIwRjg3MkUzNENBMkVGNzIxQ0U2Q0I2RQotOjEwOTA2MDAwMjJCOUJEMDZFNzBDMjRBNDM3ODJCQzg3NzEyRTBDNzU4QgotOjEwOTA3MDAwMjUyNTVGNDY5RkQ5NzYwMjkxNDVBQzY3OUIxQTM0NjNEQwotOjEwOTA4MDAwRkZEQkRDMDcxQ0JFMThGQzIwRTU0NEI4QkQ1MURCMUUyRAotOjEwOTA5MDAwRjQyMzFCODFGNEVENjM0OEI3RkZBQzdBQ0M5MUZBRDQ4QQotOjEwOTBBMDAwNjZGMDM4NTA2RkE4RjY4QTIzMkUzNzM0NEQ3RTY0ODZEQQotOjEwOTBCMDAwMEEyODY5NTEzOTNEN0ZEOUI2ODFFOEQxNkU3MDFGNDFDOAotOjEwOTBDMDAwRkNEQUVEM0E5NzFGQkVBRkI3RTkzQzQ4MjcyRDBFNzM4NwotOjEwOTBEMDAwMDBGMUJENTFCOUMxODE3MjQzRjY2QjA3MzE4RkYzQjgwRQotOjEwOTBFMDAwNjAxQjQyN0EzRERFN0FENThCODk1NDBGNjY5MjE5QTlBRQotOjEwOTBGMDAwMUZGRkY3QzY4M0M1MTcwRjFDOEZCRDMxRjE4ODBCRkExMAotOjEwOTEwMDAwNTc0Qjc0NkUwQkUwMEI5MUZBNzEwNDFENDRGNzYzREY0QgotOjEwOTExMDAwQTlDNjlDNzc3NDNEMDlGRkI4RjgzNjg0MTIxMUZFRTdBMgotOjEwOTEyMDAwNkRCQTE5ODExOEYzMkU0RDU2QkU5QjlFNUExNDI1REYzOQotOjEwOTEzMDAwOTM3RjNCM0M4OEVEOTVEMDBGMEFGMjQ5RkU5NjI2QTMxQgotOjEwOTE0MDAwRkMyREJDOTA1OEU5MjIzOTlGRUVCNTczQjE4NUUzQjY4QQotOjEwOTE1MDAwRDg4RTlBN0RBNDhGOThFRDEzRDlCRjNFM0VGRDQ5QjhCNQotOjEwOTE2MDAwMThERUFBNjQ4ODFGNjAwNDg2N0FFMzRBNzBCMDJCNDEzNwotOjEwOTE3MDAwMkZFMjk3MTVBQTBDRTVEMzQwM0E2RkE3RjlGNEQ3NzdGOQotOjEwOTE4MDAwNDNFNzExRUI2RjUxREQwRUE0NkJGRDc1MUUzM0NBOTlEOQotOjEwOTE5MDAwRjU4RTM5RTYxMDk0MzdBQUFFRDlGOTIwODdGQURFMDJBNwotOjEwOTFBMDAwN0IxMkQ2QjcyOUFEQzgxQzhCOEY1QUMxNkVDNEY5MkQ1RQotOjEwOTFCMDAwNERENjY5RDYyMzlGNjYxREU3REZFOEY3NUI5MkI5OUUxRgotOjEwOTFDMDAwNjhERDNGQjFDNzUzMTI5RjdFNDBEMjc5NTE4RjlCQ0I1MAotOjEwOTFEMDAwNTRDNzU2NTg5RkRFQzBFNzZCODk2MzA3Q0E3RUUzQzE1OAotOjEwOTFFMDAwNkJDQjdFMEJDOTY5NzVBODM5ODBGNjQ0RjQ3ODlCNTQyMwotOjEwOTFGMDAwNzc4RjA3QkU2RjgyRjlGOEIxOUNDM0M3REY1NEEyM0FEQwotOjEwOTIwMDAwNzY0M0Q3MTY1NzAyMzM0N0Q0MzczODRCMDhGRTE3NkNDRQotOjEwOTIxMDAwNjk0QzBGREYzNzIxM0RDNjk4OTc4NEQzQkNFNEVGNjhEMwotOjEwOTIyMDAwM0ZGOUEyRTgzMkY3QjdDM0Q5MTAwRDVEQjZDNkEyQ0I5RAotOjEwOTIzMDAwNzlBODM3NEJGOUZDOTkzOTcyRkU0MzkzQkU4RTdDOEMyQQotOjEwOTI0MDAwQTY5QkIyNDlDQzgzN0M5NzAxQ0Y3NjU4NkZBN0NBNjY5QwotOjEwOTI1MDAwRUM0MzdEODBCNkQ2NDQ5OERGQ0QzNkU2MDA5OTNFMzlBMgotOjEwOTI2MDAwQjU3QzY3MzJBQ0I3QUNFNzgwOTEyMTNGNzQzQTY5MUQ5OQotOjEwOTI3MDAwNzVBMjdERjRCOEE2MTQ4RTNGNTM4QTgzOUU0OUM3M0REQwotOjEwOTI4MDAwNEY0RjAxRjg3NkY2MjRCODE0RjhENDk5MDJGQTMwMDY1NAotOjEwOTI5MDAwN0M4RjA4QkMzM0Q2QzY5RjZBNjgxQ0YyOEZBQzVGQjY2MQotOjEwOTJBMDAwODg3OTc2QzNGMzUwMDI2QjM1ODNCREIyNEZDODA3QzZDOQotOjEwOTJCMDAwRUVFNzRGMTUxODE3QzY5OUZEQ0FFOERENjQyRjhBRjU0OQotOjEwOTJDMDAwMUYwMkI1ODBGNUQzRDM0M0UzMTRGRDc3QzBEQjVFNThBRQotOjEwOTJEMDAwN0QwNERFRUFDRDIxQzJEQkRCNDZERjZCMDg5RkM2RTNGRgotOjEwOTJFMDAwQTE3NDJDNzcxRTNEOTM4N0Y4NzBCNjcwRkJCNUVGMjVGRgotOjEwOTJGMDAwNkIwMEU5NkUyMDdFRDZEM0ZDRUEyRTBFNjJGRUUyODE4MAotOjEwOTMwMDAwNzhBQjUzODNBNDVGRUIyRUU2RDE3NzU4QjdERjlDMTI3RQotOjEwOTMxMDAwRkUzRTFCNkM4NjA5QjAyRTY2RTY3MDQyRjhDNEMyNDc1QQotOjEwOTMyMDAwQkJFMDZCODkwRjUwRUJBM0VEMDIxRjA4QTc4RkM0M0U3MwotOjEwOTMzMDAwQTcxRkVGNEVFMzY2MDY3ODNGNkJFNkVGOTk2NzI0REZFMQotOjEwOTM0MDAwODcwOTdERkU1MTQyNUUwMEY3MzMxRjBEMDdDRTQ2N0EzNgotOjEwOTM1MDAwNTA1REU5OTE3QUE3Q0VFMkI5NkYzRUFDOUJCREFCNjc5OQotOjEwOTM2MDAwNEZDMDYzNTlBNUFEMTVFREFCNjUyNjRGMTJEQTVEQ0I0NQotOjEwOTM3MDAwREVEMzJCRUJGMzA5ODRDNDA3MkIwNDNDQ0YzMkY3NUQxQgotOjEwOTM4MDAwODgzRkZGMzY4QkUzMDlDMjlGNzZGRjk3QkZBM0JDRjhFNwotOjEwOTM5MDAwMUQ2OEJGQTI0QkVGNDY5MzcxNjlBNUNEOEZGRDk2RjU3MQotOjEwOTNBMDAwNTQzQzZEODdGNzJCNUJBRDJFMDZGRDJFOUJFMkZFMDQzMQotOjEwOTNCMDAwRURCRDY1Rjc1OTVDMUJGMjcxQkYzOEE0M0MwQkZBNUQzQgotOjEwOTNDMDAwRkI2MEJFMDNFNTgxNzU5RDM3RDNFQzA2OTNFMDdFRUIzMQotOjEwOTNEMDAwNEMyQkUwNkQ5M0IyNjQ4OTUyMDhBQzdEN0ZDQTE2MTVBMAotOjEwOTNFMDAwRjBBQ0ZFNTdFNTY3MTYyODVGNzU3RkMxMTZGMzc1OENFNAotOjEwOTNGMDAwQkQ4MkIyMUNFRDU5RkZEMDk5NjhERkZFMTJBNzQ2RjY3OAotOjEwOTQwMDAwMkVCNzZGN0Y3OTQ0MjdDQUM1NUJBNjgyMEExOEU1RUNBMAotOjEwOTQxMDAwRDREOTYwQ0UyQjUzOEFCNzk4NjFGQ0Y0MTQ0RkExMEVCNwotOjEwOTQyMDAwQzY1QjkzMzI2MTI2RjZCN0Y0QkVCMTdGREQwOURGNzcwNAotOjEwOTQzMDAwQTRDQzlBQTlFNjEzREU0NDdCRUZDQ0NBQTFEMDZFOTJFRAotOjEwOTQ0MDAwMkNDRkIzNTQ0MjdGNjk1NjE2QjZBNzI3MDBCRjBGMDkyOQotOjEwOTQ1MDAwOEY4RkY2Nzc2N0JGRkRCRDYwRTZENDFDQzA0QjQ1NTNDOAotOjEwOTQ2MDAwQTUwQUZEQkY5RTcyREI5NjMxNTczMTM2RkU4MTcyODdBOQotOjEwOTQ3MDAwMDdDNjNGOThCMjY0QTYxNUYwREY2OTk0RjU5NzZERjFDMQotOjEwOTQ4MDAwQzA1ODlEQ0NGNzg2MDFCRUZGRjFGRUJBOTk2NkE4OUYzMQotOjEwOTQ5MDAwOTZFQTJENzRDMEZBNTNDREY3NkY5OTkxRkIxREY4NjVDQwotOjEwOTRBMDAwQTQxMkJENEYyQzQ4NzExMkRGMUM0NjkwRTZBREVCMzM4MQotOjEwOTRCMDAwNzJGRDJBRjgzRDg3RDM3MTdGNzkyNDk0RUQxMUU1NEMzNAotOjEwOTRDMDAwNUVFRURDMTA1QjdFOUM0RUU1NzJCOTMzMjFGNjc3OEY0MQotOjEwOTREMDAwOTA0QjAwRUZBMDBFRTlCM0NCMUExODk2MUY5NjI3QzA0OQotOjEwOTRFMDAwNEZFNjA5QzQ1RkRCQjkzQzAxQkU5QTYzMjczRThFRDlDMwotOjEwOTRGMDAwREYzN0U1NUY4MDNCRjVEM0E5N0FBQ0U4QkY5MDcyMEQwQQotOjEwOTUwMDAwNjY2NkM1NzFCRTRDNzY2OUU0NzU1OUNGNTI5MkI3QkY5NQotOjEwOTUxMDAwNEExNTdDRUJFMkYwNzE1NjZBRTUwQTMzRjcwQzQ3Qjg1RQotOjEwOTUyMDAwQzg3NjhCQzUzQUYzNDc0QkZGNTJEMDg4RkNCOUQ2RTJEOAotOjEwOTUzMDAwQzlDMEY5QUNERDU3OUVDMTJFNjM4N0Q3NUQyQ0Q3RjgyMwotOjEwOTU0MDAwNEJDMkVCOTg0QUVGMDdGNDBCRkRCOTQ0RkZFRTMxNUZENQotOjEwOTU1MDAwMDc1RUM5NTc4MDU3MUE3REJGRDIzQUMzRkQ2OUZEM0JFQwotOjEwOTU2MDAwMDNGQkUzN0U5RTAxN0FDNTE4N0I5RTFCNTNCODVFNDFDOAotOjEwOTU3MDAwRjhFQjIyRTREQTRBMjE1RjQxNkE5MTNEN0VGRUM1QUJGOQotOjEwOTU4MDAwNzY2RkNEOEYxQzc3MDNGNTBGRjg3RDdBMEFFRTJGNDFBOQotOjEwOTU5MDAwQkVBMjFDMkI1MzNEQjNCMDdFNTk0RjhBMDNFRDc5QTA3OAotOjEwOTVBMDAwQjc4RDgyREU1NEE0Mzc4OUU3Q0U5NEE2NzI1QUVGNzYzRgotOjEwOTVCMDAwQzVCMTNCODYxREY4MTMzOUFGMzZDNTgzRjY0OUM2MjJCRgotOjEwOTVDMDAwOUY3RTQ5QzRGQ0E0RkM4N0ZFM0I0NUZGMjU5QzlFMUY1MwotOjEwOTVEMDAwRURBN0U3QzVDODNGQzIyRkM0REM0MERGNjMwN0NFNUZGRAotOjEwOTVFMDAwQzEzNkNFMDhGREY1ODIyNTgwRjM5MTcwRkJCNkY0MkZDRAotOjEwOTVGMDAwRUQ4N0JBQjg3QTJBOTFEQTY1MUMwRjI2QkFBMDlFMjFBNwotOjEwOTYwMDAwQzVDNUY5QjlFM0UzQzQ2QjUxNUY3NUU5OTlFMkUyRUJEMwotOjEwOTYxMDAwNDZCOTUxMjZFNUE0QkZFNzQ4ODU0QTc2NEM1ODJFQkI4QgotOjEwOTYyMDAwQzg5RTkxNzIzMzY4MzY4N0VCREZCRkJENjdDNjQ2OTQyQwotOjEwOTYzMDAwQUIyNkJFMkY0RkQzODMxNDJGMEFDRkUzRTUxNEFFMkZGMgotOjEwOTY0MDAwMjdGODk4Mjc5NjFENzgyNEQ5MkVFNTA4QURFM0UxNzUxMwotOjEwOTY1MDAwOTVFQzYzNTg5RjVERThENzA5MjEzRkY5QjM5RTRDNjZBRQotOjEwOTY2MDAwQzIzRUUxRjA5MEZBN0JCNjI5RjRBRkRDNEZBNkE1NDdFNQotOjEwOTY3MDAwNTkwNjNCQTU0MTU3MTBFRTFGQkZDRjg5QTBGQjYzODI1RgotOjEwOTY4MDAwMEVBMkYxRjM1REU1MTNDMEMxOEY3MDQ4NERFMTcyQzhDMQotOjEwOTY5MDAwMDk2NTA1RUQwQjE1RjQxN0MwRkY1Q0I1Q0RCRDM1M0Y3MQotOjEwOTZBMDAwNjJERTM2MkU4RjlEN0ExRDk3NjM1N0UwOEJCNDU0RkU5MQotOjEwOTZCMDAwQkRFRjI1M0JGMTczMTgxRURDOEVGOTJGMDFGNzc2MURFNwotOjEwOTZDMDAwQUJDMTdEQzEyMTFERjAwOUQyQTI4REFGRjNGQzhCNTkzNgotOjEwOTZEMDAwRDRFRkU3MjkzQUI5RkVFRjQ1MkVCNzFCNjEzQ0NFRDc1MAotOjEwOTZFMDAwNjQzRkQ2QkYzQ0E4NUQzQjdGREVERkRDNTQ0RThGNjUxOAotOjEwOTZGMDAwQzczRDg1NjhDNzBDRjNEQURDQjg1RjI4RUI5OTczQzAwNwotOjEwOTcwMDAwMDBFNUUxREQ4QTAzNkI0QjNBMUZERUMxRjkxNEE4NEI3QgotOjEwOTcxMDAwQzBFNUFENjcyMkZCQjVBNTcyM0FGQUJFRDYzMUZDMzg3QQotOjEwOTcyMDAwQTc1N0M0Q0JFMjA4M0VDRDREQjU3MTc4QzFGQTRDMDhCRAotOjEwOTczMDAwNEY1NTJCNDdFNUYzRkI5Qjg3Rjc4MDAxRDY1QjA3RjA3RQotOjEwOTc0MDAwNDBCMTJERTFENkQ5QjE2NDgzMDVGOUY4Mzg3MzIzMUZGMAotOjEwOTc1MDAwOUZFRjU4QTIxQjhCNzhEREM5QzhCRUVCOTcwRjBGRjBBNwotOjEwOTc2MDAwNzU0ODdCMTRFOEIyMDNFOUYyRUFENDVDMUE2RkQ4NzE0OQotOjEwOTc3MDAwOEY3NTBDN0MxRjg2NzYxM0ZBOTUzQkVDMDFEQzU3NENGOQotOjEwOTc4MDAwNEVGNUNENEQ0NTc4Q0VFREFCNjQyMDRBMUFBQzRERUI4RAotOjEwOTc5MDAwMkQxMUVGRkJFQjc3NDE3REEyNjM5RjdFMkNDRUYzMzYzQwotOjEwOTdBMDAwQzZCNkJBQzJFQjgxQTlGQUQxMUY1QTZGMDQzRTJEQTBFQQotOjEwOTdCMDAwNzIxMEUxRDY2OUU0RjVGQjE2MzM4QUNGMzRFOEZCOENFRQotOjEwOTdDMDAwRjgxREY0RjcyQ0EyQ0ZBM0JBMTRDNDJGRUU5QkQwNkVEMQotOjEwOTdEMDAwQUVEMzdCNzMxNERDRDc2Nzk4RENBODA3NjAxRjQyRjQxNAotOjEwOTdFMDAwN0VDOEMyNTQwQkY0RkYyNjNDNTE0RTU3RTlFRkQ4OEY4OAotOjEwOTdGMDAwRjBBQTJBNTBEQzJEMjRBRURBODVEQzYwNDFEQzM3Q0RCRQotOjEwOTgwMDAwOUU2MjI1N0E2NDVGREQzOUI0MUFGNUJGOTVFMzA5RkFFMwotOjEwOTgxMDAwMzE4QjdFQ0NFNkEyMzBGRkZEM0FFRjJBREFGRjQ4RkQxRAotOjEwOTgyMDAwNzY0ODUxQTg5RjQzRDc4RERFREQxMkIxMkZDMkZFNTA3RQotOjEwOTgzMDAwRkUxRjUyQUE3M0VFNDBGQTE3RkIzQUIyMEZEM0MyN0E1OAotOjEwOTg0MDAwMTdFRDk1MjI1QjI0REVGRDYyN0VBMTNDQTRBMzQ4N0IzQwotOjEwOTg1MDAwMTRFREQzN0U3QkQ2REZCMTY1M0FDOEQ5RjEzMzNBODJCNQotOjEwOTg2MDAwM0EwNzUyRDFGMzMzRkYwMUQ2NTEwNUY2QUMwNUUwNzA0QgotOjEwOTg3MDAwNUIyQTk3MzM4N0YyRkRGQTQ0OUNERjMwNTgzRkJDM0FBRAotOjEwOTg4MDAwOUNFMDFCRDM2NDBCOEY5MzJFRkMwRkU5NDZFRTJGNDgxMAotOjEwOTg5MDAwNEZFMENGQkZBNzcyM0JFNzI3Njk1QzFFRkUyMThEOTc4MwotOjEwOThBMDAwRDMxMzYzRkIyQkJFMTBGNTU0MTM5NzFGNUJDQkI5RkM4RQotOjEwOThCMDAwOEZBRUI3NDFGNEZCQURFRERFMzE4QTY2N0YwRjc2RUZGOAotOjEwOThDMDAwODY1NDZFRjcxQUI5NUY4OEM3MTM5NjBBRkEwNjNCODc2MwotOjEwOThEMDAwRjAxNEI2QUI3ODNDNTBEQUExNUZGNENDQTNGMjcyRjM4QgotOjEwOThFMDAwN0JEOUU4QkZCRkVEOUZFNkREODdGNEI2RjIzNzdBRjJBOQotOjEwOThGMDAwNTc5QzE0RjE4Mjk1QzlCRUY0NjREQ0JGMjdDNEY2QUI1MwotOjEwOTkwMDAwM0MyN0Q2NzVCQTk5OTExRkY4NTM4QzFCODJFQzNEODk4MAotOjEwOTkxMDAwNzE0MzI4QUZEQUY5RTAzNEU0QkZENTJDNDBGRUUwRTUyRQotOjEwOTkyMDAwM0IzNzUxNUM3MDc5NDA2MTJFMDVGNzY5NUVFRTI3MTY3MgotOjEwOTkzMDAwRjg1OEJENDdBRkYxNEJERkFFMzYxOTkzQzc4NEU5NzdDRQotOjEwOTk0MDAwNDU5QjM2NkU1OEIzQUI1ODUzRkVGNkY2NjkyNTBCNDQ2QgotOjEwOTk1MDAwQzhBMUIwRkM5OTQ2RUZBM0ZCOTVGNDFFNkRBNzdFRDQ3OQotOjEwOTk2MDAwRUNEMkY4QzM5N0VFMUM0NkVCOTdGNTk3MzEzN0FENzdGRAotOjEwOTk3MDAwNTk2QjgxNjZERUFDOTVGMzQ5QkNGOTQ5QkE0NUJCRDQ1NQotOjEwOTk4MDAwMUY3MzlFNDZDREZCOEYwMEZFRkUwOEZGRkZEMjUzNDNBMAotOjEwOTk5MDAwNjkxRTJEQTlCRUZGNDBCQTA5Q0ZDM0NBRkMxQUJGREE5RgotOjEwOTlBMDAwMjRDNzI3QjA1NjY2RTE3RTQ5QTAyM0ZGRTVFQzgxNTAyRAotOjEwOTlCMDAwMkFBN0ZGNkYwRkY3RDE3MUY2MDVFM0ZFQkZFRTBCQ0FDMgotOjEwOTlDMDAwMjY3MTM5Q0NEQTE0MzYwQzFFRTNBNzZBRURCNEJGQTBCOQotOjEwOTlEMDAwQkUyQkM1QTc5NUVCNkI2MTQ3MkQ1RkE0QUQ3NzUxRDQyNgotOjEwOTlFMDAwQkIyOEVBNURDOUJGMTI2OTlGMjkwNTI4RDc3ODdGMEQ3QQotOjEwOTlGMDAwODI4RkYzQ0YxQzM1QkFBMERFRjgzNDZFQzcxNjM5M0QxRQotOjEwOUEwMDAwOTc1MEVGNkNCMzI0OEU0MzdGQ0EzNjRCNUUwMEY1NTJGRAotOjEwOUExMDAwRkZGQUJBMzgxRDZEMzM0ODNGOEEzQjAzRTFENkZFNUYzQgotOjEwOUEyMDAwNzdCNkE4ODhDNzdEQjAwRjAwNzk1OEZFRTg0MTE2OEEzRQotOjEwOUEzMDAwOTA1MzM3QUU1MzNDQ0IwMURFNzYyMUVGRUFEQzdDN0RFMAotOjEwOUE0MDAwNzVFRUEwNzEyOEY0OTM1REM3RTc5NUQzQjE1RjUxMjNGQwotOjEwOUE1MDAwREFFNUQ0MDg3RjVGOUE0MUIzQ0ZDQ0MxMzI0RTI1OEQ3MQotOjEwOUE2MDAwQ0JFMzlDOUFBMDMyMTRFQTY1RUZEQUEzQThEODVGODcwQgotOjEwOUE3MDAwNDI3QTMzQkIwOTAwMTM0MTU3RDkyNURDQkVCOUIxQTRFMgotOjEwOUE4MDAwNUQ1OTM2MjYwQzg3NTY1REY1MTgwN0UwQTczNURERUFFNwotOjEwOUE5MDAwNDY3RDczOEZEMzM3MjQwREU3NzkyMjE4QzRFREZDRjg4NwotOjEwOUFBMDAwMTMzRDJBREFFRjNGNzU3QTBBRDI5QzYxMzhCOEY0OEVGQQotOjEwOUFCMDAwNkNENEE3RDYxMzdDOUU2REZERkI2M0FFNjcyOEEyNERDOAotOjEwOUFDMDAwRkVBQkREREM5RUQxQjMyMzhDREI4N0E0QUZEMjM3OEMxOQotOjEwOUFEMDAwMjRCRDI3RTc5NzlFMjJGNDQ1M0FGMzNENjdBM0ZBQURFQwotOjEwOUFFMDAwOENGMEM5NjgzREU5MUI4NkVGRTZGNjJDQzc3NzU1ODFGNwotOjEwOUFGMDAwNzcwRkJFQUZDQUI4QUFBODA1REUxNzZDMEJBQTRCQTE5OAotOjEwOUIwMDAwRERDQkJCNjJGQjgzQ0I4NTNFODE3NTRDQzJGNUM5NzU0RAotOjEwOUIxMDAwNUM0OTJFQzg3QTg2Mzg3RTBBQzkwRkQ2MTlCMUY3MUY1QwotOjEwOUIyMDAwMzAyMjdEMkY3RjM0NkQyMUNFQjc2RUEzOTE5OTk0MzA3MgotOjEwOUIzMDAwRkM3RkVBRjRDRUM2Rjk2NDc3QjQyQjA4MUJFOURGOTMwNwotOjEwOUI0MDAwRTM0QUZGMUQ3RTQ3RkVGQ0M4MjhGOTk2RDM1RjVDRkUwMgotOjEwOUI1MDAwNUZBN0Y3MkM4Rjk0NjcxQjhEODQyNzY5M0Y4N0U3QzcyMgotOjEwOUI2MDAwRURGREQ1Njk1Q0NGQkVFQUY0MkVDMUY5MzQ3NDZEMjdFMgotOjEwOUI3MDAwN0ZDRkFBM0QxRjFBNjNGOUFCQTNGOUUyNEE3MDU0NkE3QQotOjEwOUI4MDAwRjhCRUEwNkVCRTM5ODBFQjJGN0Y1NDI1M0FBOERENjg2MQotOjEwOUI5MDAwQTQzODU5REQzM0ZCQjg5RkU3MUVFNjQ2Mzk1MUQ3QjFFQgotOjEwOUJBMDAwNEY1OTBFRTNENjNFQjM0RjU5MTEwMUQ3NDE3NTAxMDUwOAotOjEwOUJCMDAwRTczM0MyMkVGOTkwQ0JBRjY4QkE0NzNGMzJEQTJEODczMAotOjEwOUJDMDAwMkQ1QzRFOUMyREI3RjkxNTgwRUI1OTgzQUYwRUVCOURBNAotOjEwOUJEMDAwQ0RCMkJBRkRGOTYxM0NCQ0I5NkZGQTExQ0MzN0IwM0ZEOAotOjEwOUJFMDAwNjcwQUUyQjM1NUI3M0JEMzBDRjU1QTQ3MTlERDQ4NUYxNgotOjEwOUJGMDAwM0Y3NUZBMzYyMzVDNTI1NDZGMjdCNjRGNEVCM0JCRDcyRQotOjEwOUMwMDAwNDM1Qjk3ODkxNUExQkNGQkJBNzAxODFGNDUyN0UzRUY4QQotOjEwOUMxMDAwRTFGQ0QzODU3Mjg4REI5MTQ1QzgzRjgxMzRCQkI0QTc5MgotOjEwOUMyMDAwNDhBRTFEMzZGMDc1M0NDN0Y4N0NGRjlFRUE3OTkwRTg5NwotOjEwOUMzMDAwRjg0ODBBOEQ5QjVEMTc1NEQwOUY5RDdGRTYzOTkyNkI0MwotOjEwOUM0MDAwQjJGRjMwOUQ3OTFFODlFNERGMkJDRkIzQzM4OEY0NTY3MQotOjEwOUM1MDAwMkJFNDUwRjlBMzdCOTQ4RjIzRTZGRDRCMzBGNDkxNkVGNwotOjEwOUM2MDAwQjI5RjAxQkFCNEQxRjdGRDMzRDNBODNFMzNCOUYwQkRFQQotOjEwOUM3MDAwNDJFRDZBRTFGQjhBMDg3OTIzRDcxMTQzRUVFQ0MzRjU4NAotOjEwOUM4MDAwRDg0RUY0MUNFNDcyMjdDOEZEOEQ2MkJFRDFGODdDMTU1NQotOjEwOUM5MDAwRTUxRjdDOUEwNkVBOTlERTFCRkQyMzMxMkU3QTc4NDg2RgotOjEwOUNBMDAwMDJGNTI3RTU0MDM0REZCRTJBRTgxQ0U1QTVDRTQ2RkVENgotOjEwOUNCMDAwNUFCMjJCRTVGQzY0QkQyMjY3QzVGRTM0ODI0MzBGQzE1NgotOjEwOUNDMDAwQTE3RTk3NEFFQkE5MzI3QTg3REUxMUMxMEZCRjE2RkQzQwotOjEwOUNEMDAwMURCOEY5MDMyM0NBRkQwN0ZFRkQ1REEyQzdGQTM2ODU0QwotOjEwOUNFMDAwRTJGMUFDRUQ1REUzM0NENDQ3RkVBN0Y0Njg2N0NFRTI1OQotOjEwOUNGMDAwMjYwMURCRjFDMkJCODRBNzU5OUQ1QzJFRDc3N0VFNTNCQQotOjEwOUQwMDAwOTdEOUMyNzQ5QTdGRTZDMEFENDg2N0Y1MUQyNjg2RkJEOQotOjEwOUQxMDAwMjJBMEJGREYyMDdDQTJFOTU0QzI0N0NBREQ3OEY4QjQ5NAotOjEwOUQyMDAwQ0VFMDcyOTRGOThERTQ0Nzg1RkQ1NDNFRkEyOUE0REMxNwotOjEwOUQzMDAwRkU3QkFBNEVGODA5RjhGQjBCNjlCQzFDQTYxRkRGQTcyNwotOjEwOUQ0MDAwMDg4RkIwRENCNTEwNUZFNDlGMjkzQTYwQzY3REI4NUIzMAotOjEwOUQ1MDAwMjEzRjdGNUEyNTg3NjdFNEJDQUFDN0M2OTc5QkNFNTQ4QwotOjEwOUQ2MDAwQTEzN0Q0NTBERTFDN0I1OEJFRjdDQjdGRDFGRTBCODFEMAotOjEwOUQ3MDAwNkY3ODFGRTRFRkQ5MTBENEYzNzJGRUQxRjhDQjc3NzI2RAotOjEwOUQ4MDAwN0QxQjgzQ0VGRTFCRDcxMUFEREZBNDNEMjBFOUU2QzlDNAotOjEwOUQ5MDAwNURBQTQ2OEZEODlENDZFQUNGMEUxQjczOUNDNzhFNzI3NAotOjEwOURBMDAwMUVDRkQ4NjFFMEZBNkNDNzdBNzMwMEU1Qzk5QjBCNzhDNwotOjEwOURCMDAwNUU5OTdEQTEzMTg4Q0Y0M0JBQTU3NUY4RkQ1MDM2MUY1NQotOjEwOURDMDAwQkY1NUE3NUI4M0U1RDYwRDM2RDY0Mjc4RjUyNDNBNEJDRQotOjEwOUREMDAwOTE3RTEyMTk5NzhGNUMxRTNFRjAzQzk3Njc3NTdFNUJGMwotOjEwOURFMDAwODBDMTNGRUI3QzczOTc1M0RDMzlDREUyQzZCODMzRjNDNwotOjEwOURGMDAwMUQzNENFQjMwRkE0MkJENzczRkI4RDJFNzgzRkFCODNDRQotOjEwOUUwMDAwRjM5RkM0MDNDODUzQTIyRkM5MEYxMkFFNjE3ODcyQjg3MgotOjEwOUUxMDAwNEI3RTkyRjhGOEJCRjQ2NzAzQkQ3Q0E3QkNBQTNEREE4MQotOjEwOUUyMDAwNzhEQ0RCNDZERkQ1NEVCRUNGM0E2QzcwQTE5Rjg2Qzc4QgotOjEwOUUzMDAwMTdFMkQxNkZFREJBQjdCMzRGODIxREI1M0FGMzJEN0E2MQotOjEwOUU0MDAwNEFCRTg1RkRBQzg2QkYyNzA5QkMxNzM4QjlCRUFGNzRDMgotOjEwOUU1MDAwNzJCQUE5MkRFOTIwQkVBQzNERDk0NEZDNkM5QkMxRTU4QQotOjEwOUU2MDAwOUFFRDg0NTYxRTMzRjZDRjYyQkREQkE4NUQ5NUI1NjNDRgotOjEwOUU3MDAwMUFFNjc3NTQzREFFMzg3MEJGMUY0RjZFREVBRUYwRkM3MQotOjEwOUU4MDAwQjg0Rjc3QkQ5MTg4Rjk3MkVDMkJCMEYyMzE5RTYyRTE0OAotOjEwOUU5MDAwRUI5REVCRTQ3MkUyRUM1RTAwMzhEMTdCOTNGMTcyRjY1RAotOjEwOUVBMDAwRkI5NUZBNjNDMTYzMEFDMkIzNTZDMEZBRUMzMzk1MTM0QgotOjEwOUVCMDAwRkY4NDdFRUNCRDQ5RUU2MUIwRTRDRjlFQjlFOUVFM0Y5MAotOjEwOUVDMDAwQzFCQ0NGRUU5OUUyNDZGNzY1NUE4Qjk3RThBN0NGNjlGOAotOjEwOUVEMDAwNzFFMzdFMDNDNEY3MENGNDE3QUVFRjc4MjNGMTVBNjhGMAotOjEwOUVFMDAwNzdGQUU5QUI4QjUwNkVENzhBNzk5RTc5NUVCRjBFRTEyNwotOjEwOUVGMDAwQjJFMUM5N0Y5QjhDREY2QjAzNEFBQTA5QzdEOUZCRjg4MwotOjEwOUYwMDAwN0Y2NzYzQkVFQTlFNDZGMjE3QjUzQ0ZEQkExMUYzMTdCMAotOjEwOUYxMDAwNzQ4MTc2RkU3RTZGOTIwM0VCOURGRUY5RjZDOTA4RUYyMQotOjEwOUYyMDAwOTY4RTE2RkE3RUU2RTdFRDU0M0VGMEU0QkZCREY2Nzc3NgotOjEwOUYzMDAwRjRFMzc4MTNERDU4RUZDQ0YzRkIwOTJGNzUzRTk1RjI2RgotOjEwOUY0MDAwREJFMkQxRjU4RTdERkJCOUJDNDQzRDhGN0MzMDlGQ0JFRAotOjEwOUY1MDAwMzE0OUQ3OTI3RTRGM0Y3OURCQzQ0OEJEMjFERkI3MEEzNAotOjEwOUY2MDAwN0Y0RTZCMDJENzIzOUYwOUZFQURBREUwRjFDRUNGOUVCMQotOjEwOUY3MDAwQjVDQ0E3RkQ4MTMxMzQxQ0Y3QzU3NTYzMzg1RERDMkQ4OAotOjEwOUY4MDAwRTA1MUQ3NzE4N0ExQzE0NkVEQTk5RkRGMDJERkUzNzNERQotOjEwOUY5MDAwMkNEMEU3MjcyMzI5ODU2NENGMjVDQUQ3Rjk1N0FBMEZFNAotOjEwOUZBMDAwRjUyNkEwQkZFN0U2NDUxRjJBMzgxRkVCOTgyNjQzMkQ2QwotOjEwOUZCMDAwQ0RGMzY5RkUxRDU2MURGOUJENkM2RDZDM0ZGQkJGMzhCRQotOjEwOUZDMDAwNkRDMjJFRTA3QzkwREQ1OTlERTMyMjM5NjA3MjBGOEJDQgotOjEwOUZEMDAwQjA4N0IzNkI3QzJEMTgyN0JFN0VBRENGQUQwNzNDQkVERQotOjEwOUZFMDAwN0NFQUU4QjQ0MTUwN0U3MkE0NTI0Q0Y4RDcyQjVDQ0Y4NwotOjEwOUZGMDAwRjk2RDM0NEUzREZBQzE4MThGNzYwQjNFNDk3NzMwRjVDRAotOjEwQTAwMDAwMUE5MjAzREMxRjUwQTUzMkQ1NDY3RUFBM0U5MjEzRjU2NAotOjEwQTAxMDAwQUQ0MjBGRUUxMTdFNkU3MzVGREU0RDc2NkE2N0JCMjYzMgotOjEwQTAyMDAwNjIxRjA2RUQ2QzM2MkFGN0U1RkQxMEYzNEE2N0Y4RTc4NAotOjEwQTAzMDAwOTNERTcxMTk2OUJFNjdBNDNDNjA3RUYyN0I0QTdFOEIxOQotOjEwQTA0MDAwRjYxQkExQkNDMUZDRDE1NzlERTU1RDI4MUZFNTMzM0Q0MgotOjEwQTA1MDAwOEVCRkU0RUZFMkZCQjg3NDRGMTdDQTE1QjYzNzU1QTNBRAotOjEwQTA2MDAwMEZFMkM5OTUwMzM3OUZFNzdBRkI5NTBGODkwRTFCOTA4NgotOjEwQTA3MDAwMEU3MTdDREY0OThEREU1RTRFQzIxNUU4RjBBNTBGODlCQQotOjEwQTA4MDAwMEU5Nzc3NzFGOURBRDA1NTZFQzRGREQ0MEVFMUQ3NjkxOQotOjEwQTA5MDAwMTBGNDg0NzQ4NEZCRThCRjNBOTM2OTlDODZDOUExRTFGQgotOjEwQTBBMDAwMjhBN0NFMEJCQTNCRkYxMkE3Qjc0MzNBMURGOTAxMEUwMgotOjEwQTBCMDAwRUQxRUREREVBMjBDRDQ4RjRBOEQ5N0YwREQwMEY4RTZCMAotOjEwQTBDMDAwNzZGM0RBQTM2ODY3RDVENzMwMzdGMjZCNDNBN0UwMDc5QQotOjEwQTBEMDAwQjA3QjExQkUwRDVERDVDQkIxQkY0MTY5MzNDOURGMEQ3QQotOjEwQTBFMDAwNzZDOUI0NDE1MDZFQTg2M0E1Qzg2RkQ5QkIyQTVFNDIzOQotOjEwQTBGMDAwQkE2MDVEN0MzRjlFNUQwM0Y2MkNEMjRENUFCRDVCOUZERQotOjEwQTEwMDAwOEY3QThGREJCREQ3OEYyQ0EzRjYzQjcyNUQxNEU3RjJGRAotOjEwQTExMDAwNTczMThBRjNFRjQwRkIxOUY1NURENjY4NkUzRkZCMzY4OQotOjEwQTEyMDAwOTJEREM1NUMwOUU0Mzc2NTNFNzUwREQ2NkZGMDJGNjI5MAotOjEwQTEzMDAwOTRENzExQ0RDNzJGMjlCNDBGNjgwODU4MjkxRjY4NTYyNgotOjEwQTE0MDAwMTdCNzdGMUFCQTM4MUY5RjkzRjA5MTRGNDNDRkFERTRGMgotOjEwQTE1MDAwOEY3RkMxQzRGQzExRkVEMDM3NUY5QUNFRjVFQzhCMjYwMQotOjEwQTE2MDAwRDJCMzlGMzU3QkQ4QzdCMEEwQjc4NUJDOTc3MEFDNkQxNAotOjEwQTE3MDAwQ0JENzIxREQzMjc2OTMwOUU3QjE0Q0NDQTNDREMwRjUyNgotOjEwQTE4MDAwNDZCMkQwMDMwNURCRjgzQ0Q0NzRFMTc3NENENzg5QTdGRAotOjEwQTE5MDAwNTE5QkU3RTJGMDkzN0ZFMTlDMTg4RkM4MjI1REU4Mzk3QwotOjEwQTFBMDAwMThCQTdFNzk5MEY4QTRFRTE5REU1RjlBQzk1Mzc4NjdFMQotOjEwQTFCMDAwMDRCRDRBRkIyODlBMUUwQkM0QjhEOUJCMEUyQTI4NENGMgotOjEwQTFDMDAwQjI3N0NERDFGMEY5RjUzNTJDRDgwOEVCQkM3RTk3MkVCRgotOjEwQTFEMDAwMzg2NTFDRDk0RDBCNDk5RUFGMzdCMjU4RjkyQTIzRDJBNgotOjEwQTFFMDAwQjlGRDU2OTVFQTJENDRCRjc2RDVDRDM2NzdBNDNGQjk1MwotOjEwQTFGMDAwMkFDMUEzQjNBMDFENTcyNEZERDhERTEyOEMxQjlENEE5MwotOjEwQTIwMDAwQjdCQjExNkZFM0QyNUREMjBFRDNEODVCMDNGN0RGRENBRgotOjEwQTIxMDAwMEVCQ0ExQ0QzRjBFRjcxRjgxRjUwOUYzMjlBRTA5REE3NwotOjEwQTIyMDAwOERGQ0RDMEU2ODhGRkJGN0RERDdGRTlDRUZERjVCQjhBMwotOjEwQTIzMDAwRkYwMjA0MDdDOTk5NTQ2RjA5RkE4RjlEMDVERUI1NUNDQQotOjEwQTI0MDAwM0ZEOUREQjFENkYzQUE5M0FGRTdDMENEQjcxNkUyM0U1MgotOjEwQTI1MDAwQjE2MUFFOERGOEUxODE1Nzk0QTU5Q0RFNDAxMUUyQkU1QwotOjEwQTI2MDAwREFDN0Y5ODMwMTdGM0NFMTIyN0EyNDNCQUFBMUM5MUIwQQotOjEwQTI3MDAwODg0RDhGOUM1RjFBQzBBRTQyM0IxQkU4NzEwREI3OTNBRgotOjEwQTI4MDAwNkQ4Q0YzMTNBNzRCQjlCRjQ3QjkxNTY5Q0Y0QTNFOEQwMwotOjEwQTI5MDAwRTY3QjQ5QkZGRDdDRkYzNUY5RkRCQzgxRjNFMzc5ODBBNgotOjEwQTJBMDAwMDNEMjdCM0Y5REJGQ0NFOTdDRUI3QUUwNDdGOEJFMTUzQgotOjEwQTJCMDAwRjhCMTI1NDJGRTQ3RUY3RjcwOUVCODFGOTBGMkY2MUU2MAotOjEwQTJDMDAwQTc3NzUxM0FDQUExREQ2RjZEQzY1MEFCOTQ4RjBEMkZBMQotOjEwQTJEMDAwNkYxOTdFMzlCQkNCOEM5NUExNUYzM0YwNkIyNEZENjA4OQotOjEwQTJFMDAwOENENjVFNDQ0RjNGRUEwOUVCQkFEOEZFOEZCQkQyNkRFNQotOjEwQTJGMDAwREZDRDNGM0YzMDJGRTVBRUY0RDI4MTc5MjlFOUE4NzM1NQotOjEwQTMwMDAwMTA2RkJCQUQwMUI0OEZBNTFGMjk3QTNFNEIwNDlGNDk0NgotOjEwQTMxMDAwN0NDQUZEMDNDNjIxQjBGRUZEODJFRjM3ODk3QThGODhBMwotOjEwQTMyMDAwNjdDNEJFODRGOEMxQTVGMzdENDg3OUY2NzFGNDkxNkNEOQotOjEwQTMzMDAwRjc3REY5QjVFNDM4NTIyRjQ2RDM4RDhDQTNFMDdBQUE4NQotOjEwQTM0MDAwQzdDNEFGRDdCNjVGRUNDRkEyRThGODI5QzE1RjBCODBENgotOjEwQTM1MDAwMzc3MERFNkQ4NkUwMTdDNDhGNzdEODE5RTUxM0Y4OTk0QQotOjEwQTM2MDAwMjcxNUUzNzFBRjhERTA3QzM0QjI2RjM4QjZCNzY2RkE2QgotOjEwQTM3MDAwQkU0NEJBOTI3RTVEN0M4RjcxQUE1QTExQkZBQ0RENkI3MAotOjEwQTM4MDAwMDg0NDlFN0ZCOTM3ODNEMTM4QkQ3NkIzNUYwRkZDOTEwNwotOjEwQTM5MDAwOUJFOURCODdFREZEMTVDQzFENDQzREYzOEYxNjhBMkIyMQotOjEwQTNBMDAwODE4MTVCOEFGMkE2OTE4NTEyMTFDRUVGMjVGQjVFMjA5QQotOjEwQTNCMDAwRkFENUY3MEM0N0JGRTMzOTI1MzQwRURGOUYxMEZFREFEQwotOjEwQTNDMDAwMTNDMjVGRkI3RUQ3N0JDRkJFMDJBRDE3QkY3MjZFRjFBQgotOjEwQTNEMDAwOEY5MUNFNUVCNEU0MjE3RDlDQjBGNEU3QkYyNUExREQ3MgotOjEwQTNFMDAwN0Q4MUI5OTIyRTc3MEU2OTkxNTlFRjU1MjNGQzY3MjcyRAotOjEwQTNGMDAwRUNCMUZEN0Y2RjBCM0MzNzhBNzgyQjUzMTlFREMzQjc1NwotOjEwQTQwMDAwNjc3MEY5MTkzRUJGQzRFM0FERUZFQkI0RkUzN0Y5MUMzQQotOjEwQTQxMDAwOTNDMUUxREYxOUU3MUM1MDYxMDZERkQ3NzQwRUUxRkM0MAotOjEwQTQyMDAwRDhEN0FFNTBCQ0FGNjZEREZBM0ZFQjQxMkVENEFDQjUwOQotOjEwQTQzMDAwMDdFOTA5OUZEMThFQUI3MUY4ODMzQTI4OUYzMDcwQjkzNAotOjEwQTQ0MDAwMDQ3RjczQ0Q2NTYxRkQwN0Y1RDQ0OUM4MzM3RTA3QzUyOAotOjEwQTQ1MDAwQkY5NjBBRkRCNUFDRTlDREJGQTE1RkExNDY2NUU2NDk0RgotOjEwQTQ2MDAwNDUxOEM3RjIxRTFFMDQ5RjNFQjUyRDRGNDRGMUJGRjJBMgotOjEwQTQ3MDAwNDc3N0E2QTM3RUNBNThENDI2RjJDMUE2M0FEMEZFNTU4NQotOjEwQTQ4MDAwM0MzN0U4MkY1OTJGNjc2RkE5NjQyNzEzMUQwMERFMUU4NAotOjEwQTQ5MDAwQ0NGMEY2MjIxRjJGNEFFMjdFQzE0NTc3NUEwM0ZFMDgxMAotOjEwQTRBMDAwNzlCODU3RjA2MTM0RkQ3QzEwRTdCQ0NEOTcxOTE1MDFFMAotOjEwQTRCMDAwRUM2RjYxQUFGNzZGRDRFRjlERTczNDcyRURCQzEyRkEyRQotOjEwQTRDMDAwQzUyMzQ4NUY3N0Q4REQ0RkYwRUVGMjIyRjM2M0QyMDU2MwotOjEwQTREMDAwRkM2QjMxMEUwNEEyQjFCN0IwNjdGOEJBN0NBNEUzQkUzRQotOjEwQTRFMDAwQkNERkExNUZBQkRCRTRGMEJCRjBCQjkxQkVDQjc2RjE5MAotOjEwQTRGMDAwRTI0MUYxRTM0MDJFMjNEMjQ3QzM0NTg1RTg2MTY5Rjc4NQotOjEwQTUwMDAwOUJDNzUxQUUzN0E4MjFBMjkzQTU2NjFCRTFCMUUxQTI3QQotOjEwQTUxMDAwQ0FFOUE5RDU3MDM2MjREQjAzRUVEN0E0N0FEMjMyNjAxQgotOjEwQTUyMDAwOUVGRTdCMjcyNTUzM0MwOUY4ODlDMzE3MkE0NTlDRTNFNwotOjEwQTUzMDAwRjgzMkMzMzcyODAzRTBGNzkwMzVGMTM2REM3RjVEMzAyMQotOjEwQTU0MDAwQkI5MjMwOEZBREQxMDhGNDcwMzU3NUU3MzU0N0Q4NDNFRAotOjEwQTU1MDAwMkNDN0FFQTU4M0VFQjdGRTg2RjM1QTZFRjYxOTUxQUYzRgotOjEwQTU2MDAwQUZGMDM0RDE3OUIxNDU0OUMxNTJDNzk4NDhCQzRGRDJGOAotOjEwQTU3MDAwNUYxQUZERjVGMTdFNDlDODk3Rjc4RDNDNkY2NDIwOUQwOQotOjEwQTU4MDAwNzMzQzZDQ0YxMEY1QjIzOUJGQkM5RkM3NkE5RUMzRTc1RQotOjEwQTU5MDAwMjg3ODQyQkJGNzg3ODg3MjkxMjgwRjE3RjVEMjc5NzkwRQotOjEwQTVBMDAwOUFFMDk3RjdDN0YxN0FEMUUzMkMxNUUzN0M5OUUxOTkwQQotOjEwQTVCMDAwOEM3MDgyNzY0MTIzRDJDNzZCMTYzQTY3QzQ0QTQwRkUzQwotOjEwQTVDMDAwQTFCQzVCOTM0Qjc2MkNDOEI5NjkwODc3MTgyNzk4NENDNwotOjEwQTVEMDAwRjU0Q0E0Njc1ODEzQzg0MUMwNjc2RkE5OEJFMEIzQjVBOQotOjEwQTVFMDAwMUNFODA1RTM0MUFGOUEyODFFMjRGMTJCRjExQThEQ0YwOAotOjEwQTVGMDAwODUxOUNBNzdDQjRGMUYxOEJGNUU5ODUxM0EzMDdFQ0Q3MAotOjEwQTYwMDAwRDg1MEMyMTdEMTRCOENGMzFGRjFGMEY1NkIzQkM3MDM0OQotOjEwQTYxMDAwRjBFQkYyMENEMjgzQzFCMTkxN0NCMzQ5QzA1MUNBQjUwMQotOjEwQTYyMDAwRjcxM0I0NzhGRDNDOURFM0ExNUVENEJCODQ3NjFGREFCQQotOjEwQTYzMDAwRDFFRTNFRTJCRkY3NTM3OEZEQjQwMkFFOTdBNDVERkVDMwotOjEwQTY0MDAwNEYwMjJFNUZBNjZCOUY1MkNGNDRGQkQxQkYxNEYyRTJBNAotOjEwQTY1MDAwQ0I3NEVFNDcwN0JDREU4REYzOTVGQTA5RTQ0QzMwMTk1NAotOjEwQTY2MDAwRjg3OEQxRUIyNjkyMzM2QzYzMUZFNUQ1NDBCREZGODNBQwotOjEwQTY3MDAwRjA1QTY0RUFCQjM1MTVGNENBMEZDMURFMzExNjUxQkI3RQotOjEwQTY4MDAwNEIyODQ3MDZFQ0VGQzc0OEJBQjAzM0Q0REJBRDE5MEUwMAotOjEwQTY5MDAwNkUxRjk0RjRGMUI4RDc0OEJFQUVBNTBDRTQ4NzcyNjU3RQotOjEwQTZBMDAwRkM2MzBDMjEwQkU0RjA2QjIyQkY0MkMxQkNBRTE0NjIxMAotOjEwQTZCMDAwNjcxN0Y2MDc3MEZGOTc4Q0QyMzBEQ0EzQzczQjIxRTgwMQotOjEwQTZDMDAwRTBEMTBDNDUyNUJDMTVCMjQyQzREQkFERUY3RTZFNUYxOAotOjEwQTZEMDAwMEM1RDlFMTNFNzY1OTM0REJFNzZFQ0U3RUNERDZGOTE2NAotOjEwQTZFMDAwOUQ3RUMyMTgxQ0RFNjY4QkYxREQxODdDRUMyMTI1RkNGQQotOjEwQTZGMDAwRkRCNkE3RjQ3RUUzRDU5ODdGN0VGNkMxOUI2MURENEI2NgotOjEwQTcwMDAwN0JGNDZFMUM3MkU5M0Q1RkJDMzMxRUVERUMxRTAzQzU4RAotOjEwQTcxMDAwNkI0MERGNkY1MzcxREU0RERDQUUzQ0ExRDNEMkMxNjcxRAotOjEwQTcyMDAwNzc2OUY3M0RBRjBCN0E5MEU3NzJBNURDOTFGQTdDMTU1QgotOjEwQTczMDAwNzM3Mzc5OTM5MEI4MUJDQjFGREQ3MTNCOURDQjVEQ0VCRQotOjEwQTc0MDAwQkM4NzNEMDBGN0QzNkI2NjkyNUQ3QzNCRjM1MTVFQ0ZENwotOjEwQTc1MDAwQjI1NkVEMzlEQjE1NkREQUYyRUQzQjA3OUNDMzI1MzlCNgotOjEwQTc2MDAwQkMyQTEwRkQ1RUY4QTUyQjYzRUJGQkYzODIyRTNGMzM3MgotOjEwQTc3MDAwOEFGOEZEN0E1M0NDRjhGREVGODVGQzA5QzdEOUZCQjQwNAotOjEwQTc4MDAwRjFGQjU3MkYxRkJGNkY4QzhBREY4N0VEODhFOEY4M0RGQwotOjEwQTc5MDAwRUZGNzEzNjE2RjYwQkY5MTcxRkNDRjJBNjJBRkUzQTM0MwotOjEwQTdBMDAwMEM2OUI3NTgzNUY5MTk5RjBDQjA1QjEyRTk3QkUzNDU4QQotOjEwQTdCMDAwNEI5Q0Y5RDhFOEZENjcyQjYzOEZEM0Q3M0Y4RTM2NUY2QwotOjEwQTdDMDAwMjBEQzlFRTcwOUM4RkRCNUE0OTNDNjhCNTlBNDY3NjUzNAotOjEwQTdEMDAwNTlEQUM3RTE3NjM5RjQzREZBQkNCQUY0NkY0QkJFRjhFQQotOjEwQTdFMDAwNTg2MUU2MkNGMjQ3NkQxNzc2QkM5QkYyMzMzRjQ2QkJBRgotOjEwQTdGMDAwMDhGOTcyQkFFQkI1MTA0QzcxRDk4RjI3MEU1Nzg3ODRDMAotOjEwQTgwMDAwRjkyNjdBMUQ0MDVGNjc0MjExRjJEODk4Njk0RjIzRkRGRgotOjEwQTgxMDAwRUI2NjZFM0E5NzI3RThGRUQ2QkJBQkU4N0NDRkZGQkQ3MAotOjEwQTgyMDAwQTczMjIzMzI2RTJBRjc1MzBENDY2OThGRDkzNEZBOTYzMAotOjEwQTgzMDAwNDVFOUUzNjU1RDZGOTExRDA2RjZENzcwMTQzRTdGN0E5QQotOjEwQTg0MDAwRjU2RUQyQzMyQjk5MzcxREU5QkRGN0Q1MTE3NDZFRTVBRQotOjEwQTg1MDAwREJFQTYxMzk5RjlCRkM0QjBDM0NCRjM1OERFQzg3MzlBMwotOjEwQTg2MDAwNjIzRTM3NzU3MzNCNTA2N0Y2MTg2ODFDMEY3MzM5RDIxOAotOjEwQTg3MDAwNjk4QkNERTcwQjQyNTQ4NUYyNzVGREYzNDdFNzFENjMwNQotOjEwQTg4MDAwOTNDNEZDMTU2QzBGRjBCRDRFM0NEOTUyNUYyNkNFREI1NQotOjEwQTg5MDAwODRFM0VBMzEwRDI2OTA4OUNGOTY4OTZFMTczRUE3Mjg2QQotOjEwQThBMDAwNUU5NUNGODNFMzc5MUE2QkNBQzFGQTNBNzM0OENGRDc2MgotOjEwQThCMDAwMDkzMzQ4QzdGNkZERjBBMkIyNUQ5NDM3Q0VCRDcwRUIwOAotOjEwQThDMDAwMEE3QzZGQjM5MzNDMzE4QTc5NENDRjA0Qjk4OEZDNkQxNAotOjEwQThEMDAwNjY2NjVDQjdDOTE2M0M0REYxMzNGMUY0NTdCODg4OEYwMgotOjEwQThFMDAwRkQ0MzE4Rjk0MTEyNTgwNzlEM0ZCNUQ5Q0VGOTcxQjExMgotOjEwQThGMDAwMEVFNjUwQjA2QzcxNUMwOEUyN0VFMjlDQzNFNkM3RjNFMgotOjEwQTkwMDAwQzQyMDJGNjc2NUEyM0Y1RkY5RDU0QUM0MEJDODY3RUUyNAotOjEwQTkxMDAwMTc4QUY3NUQwREYyRjMxMTQyREVBNTg4RjlCNTA4NzlDMwotOjEwQTkyMDAwOTdDNURDOEFCOEM3ODBFNERERkRGNjk1MzdFMDdFMjY2MgotOjEwQTkzMDAwOEQ3OUY3QTNCQzdCMzg3MTA2QzVGRDMyOTg4RkU2OTNGRAotOjEwQTk0MDAwM0E0M0Q1QzgyREE3NTc1QkNFOThBRjQ2Q0IzQjA1RTcxQQotOjEwQTk1MDAwOTdFNUQzQkUzN0IzMTM5NDk3QTQwNEJEOTk5NzUyNjk3MgotOjEwQTk2MDAwMUYzNjEyRkQzMTA2MjEzNzhFNTk3ODNFQzI2NjMxQ0YyRgotOjEwQTk3MDAwM0IzMzUzODg2RThFNTk3ODVFQzJCN0I2NUJEQ0RBN0RBNgotOjEwQTk4MDAwN0Q0MzBBM0ZCRjdGM0VERDZDQzZGMUMwOEVCOTEzRTE0NwotOjEwQTk5MDAwMDc3NkNDMDc3RTE2Q0VERjJDOUNEMjQxNzkwMjlCNkZDNgotOjEwQTlBMDAwNTREQzFCRTBGRDY2QkI2QkJEMEFBNEVCOUZBOTcwN0Y2NgotOjEwQTlCMDAwOEZFQTI4Qzc3QzlDRjYzQzg3MUJGMzQ0MUI0NUJFRjdGNwotOjEwQTlDMDAwNjY4QkEzRjYxOUYyNjM5QTc4M0RENkI3MTlFMzk2RUQzNAotOjEwQTlEMDAwNUIxRDBFQUM5NzU2RDkzN0NEODhGQkFBMTVDQ0IxOUIyMQotOjEwQTlFMDAwQzVBMEY3QUY4MDhGNjBCRTNGQzczMkUwNDkxMUY0NjM2NgotOjEwQTlGMDAwM0RFMkJBODVENjIwQkVFRkMxN0YxN0YwRjI5NDMyREM3QgotOjEwQUEwMDAwQkZGMkJGODJFRTQyM0E3N0M5M0M3QUQyOTc4REREODU5QwotOjEwQUExMDAwNkZEODYwQkM4MkI5ODVFNEFGRjc1NkYyQjgyRjEzNzJENQotOjEwQUEyMDAwNjBCQzFDNTdGMEQ5QjU2MUJBQTdFRjg1QTIzQ0I0NUJGNgotOjEwQUEzMDAwRjg3RkQzNEMzQ0FFRUI4MDIxQ0FDNDkxNDNBQzlGQzY5NwotOjEwQUE0MDAwRjlDMUNERTQxRkU3RDM2QjU4RjgwRkZCQUIwQ0Y3NEYwMAotOjEwQUE1MDAwNzI2OTZBRjg3Mzk4RUY2MEE4MjJCM0JCQTUwRUVBOERGRAotOjEwQUE2MDAwNTc4M0ZCOTFBRkFGMTVDRjQyRjEzQzU0N0UyM0U5RTUwQwotOjEwQUE3MDAwMUU5RENENjVENDcxM0UzNzE3QTBBQkMzQUI0N0I4OTRDQwotOjEwQUE4MDAwMzlCNkI0NjAzRkQ3Mjk0MTdBRTZDREQ4REU4MkQzOUY2QwotOjEwQUE5MDAwMjNGQzRDQzk5OUM2MDA5RTM3NkI5OTAwNzgyNkJGQzgyNQotOjEwQUFBMDAwOUYwRkEzRkY1QUZGMkZBQzE4RjE3NENDMjBGNTlFMjdGRgotOjEwQUFCMDAwODlFN0ZGQjk2ODNERDUwRTNFNTk5N0NFMzM3QjJFQzI0QwotOjEwQUFDMDAwRjkyODNGQ0ZDNkQwNzQ4QkY4RkU5N0E5NTU0OTk3RDc4MAotOjEwQUFEMDAwQkIzQzBGMzAyNTRCQ0ZFNUUzMEMxRTg3NkQ5QzZGQTY2QQotOjEwQUFFMDAwQkNFNTQ2NzEwRjAzNTM3REY5M0Y4Q0YwQUZDOEI4QzU4NAotOjEwQUFGMDAwQkIwNjM2N0Y1RjhDRkQ0NjRBMTZCNzA3RTZEQ0MwRkQxNQotOjEwQUIwMDAwQzI4RDIyMUY0NzdFNEZDQ0UyN0VCMkJGNjQ0RTdCMzdBMAotOjEwQUIxMDAwOTNFQzNEMUU2RkZEOUQ5NDVGMjNEOTQ4OTQ1RjExRjIyNQotOjEwQUIyMDAwRTU4RjI0NUZDQURGOEUyNzdGQjRERjg1RkM5OUU3Mjk5NAotOjEwQUIzMDAwMzZEMEJFNDBDODIxMjlFRkJEMjJFRjY4MDFGMzE4MTBCRQotOjEwQUI0MDAwNEYzREUyMUU5NUEzRTVBQjQ4MEVERENDN0NGNEZFRjc0RAotOjEwQUI1MDAwMTUzQ0ZGMDAwOEQzODBGREREMzQ0MzZCM0ZDREYzNkEyNQotOjEwQUI2MDAwQ0IzN0NGOEZCNkFGMzgzRUU0QjgwQjdDREFFRjczQTRBNwotOjEwQUI3MDAwOUQzQzQzNkIyNzJGRkE4N0FGOTI0OUNGNjdGQ0EyRkUxQgotOjEwQUI4MDAwRDJFMDcwM0U1MTYzNTQzRTUxODNDODI3NkFFQzJBM0NBMAotOjEwQUI5MDAwOTQxNjkxNEZENEQ4Q0RGMzg5MUFCQUFFOTQ0RkM0RUQyMAotOjEwQUJBMDAwMjlBRjI5QjAxRkUzMjRERTVBRDI5NEVDMEQ5MTdGNzJCNQotOjEwQUJCMDAwMTBGMzRGOEFDMjc0NkVBRkIwRjMzQzBDRTZBMUJDQTI5NgotOjEwQUJDMDAwMUM4Nzk1Q0U1REI0RUE4QUM4OEZEQjlBNjhEN0Y4REQxQQotOjEwQUJEMDAwQjdBRTc3NTU2MTNERTlCRjk1Rjk0MzQ4MzdCMUY2QzM0NAotOjEwQUJFMDAwRDk1OTdDNUZCMzQzRTE3RTc0RkYwMjMzRUQzQjlEMDU5MQotOjEwQUJGMDAwNUU0RDVDQzFBOTY3QzdEMUFGRjg2RUE2NEJENjI3M0ZBMwotOjEwQUMwMDAwQzkwRTgzMkZBQjE4OUUwMTg1RDE3OTg5RkVGNjdBQjZERAotOjEwQUMxMDAwOTFGQzkwNTE3MkNBOTlFQUE2Mzg4MDMzNjkyQ0Y5RjVGMwotOjEwQUMyMDAwRTc3NTE3OTIzRjkyRDkyQ0VFNjE0QUI4RkY3OTczREIzMgotOjEwQUMzMDAwNTVDQ0VCNjlFQzZFNTc5N0RCQzI3NDM3MzY0QkVDNDM1RgotOjEwQUM0MDAwQUNDQzhBRjREQUVGRDc3QkNFNDQ3RUJENjQ5M0I3MzBDOAotOjEwQUM1MDAwMEJEQUQ3MTk4M0U0QkY4QkEwNTc3QTFGNEY1RkRFMkUyNAotOjEwQUM2MDAwRThDNTUwRTE1REIwMDJFNkQ3RkI4RUQxOERGQjZCMEFFMwotOjEwQUM3MDAwQ0M0MUZGQ0ZCRjk0NEM3RTQ5NzUwRTIzM0RCNUIxOUNBRQotOjEwQUM4MDAwQ0I5MzVFRjQ5M0MxM0EzRTRERTZGN0ZBNkNBQzY2QTQwMgotOjEwQUM5MDAwNUZDRkE3NEMyMzNBNUVDNTAyODczREU4NDdEQjA1NzRDQQotOjEwQUNBMDAwMTg3OUNGRDIxRTZEQjk4RTc1OTBGRUE5N0I2NjAwM0RENgotOjEwQUNCMDAwOTM3Qzk0RjJCODlFQjlGNDA2OEMxQjc0NkFEQkIzQTE0MgotOjEwQUNDMDAwNUEzOTVDMjhGNDQ3RjFCQ0E5MkQ5OEZGNTBBQ0UzRjI0NwotOjEwQUNEMDAwOTEyRDc3MEY5QTQzRkJGNTQ1OEU0RjJDMjg3MjdGQTE1QgotOjEwQUNFMDAwNUNDRUFFRUJCNTlGRDI3M0ZFRTc3QUExNTRGNDFGQURGNAotOjEwQUNGMDAwQkY0QTg1M0QzNzE5RTQxN0VFNkZBNTdEMDZGNUE5N0M5RgotOjEwQUQwMDAwNTBEN0FEQ0ZENDg1RTc1OTIyREE0OUJCNTBFQTBCODkzOQotOjEwQUQxMDAwQUZGMjA5OENFMTc5QjVCQkIyODQ3QzFBQzI4NjIwQkU0MQotOjEwQUQyMDAwQTE3RkUyMTMwNTM3NTgyOUQ0QkYxRkY3ODVENzhBRjFEMQotOjEwQUQzMDAwODAxRUZDQThCRkZEM0E3MzAwRTk2QkIzRDI0NEZBRDI3RgotOjEwQUQ0MDAwOENGNjNGM0NCNzJBM0VEMjBCRkY1RUUzRDcyMzdENEMwNwotOjEwQUQ1MDAwNjQ0RDM3REQwMEY1MjY5OTdCQUMyOEI3ODA0RUZFMzE3NwotOjEwQUQ2MDAwOTI3RTVBNTgzMDZGOUZBMkExMjNGQTdFMzZGOUVEOTg1MQotOjEwQUQ3MDAwNzQyNEY1NUFGMEY3REM5RTk5QzVCQzc0Q0Y5M0U3MEZBNQotOjEwQUQ4MDAwRENFRTNBQThGMDdEMjZEODlGMDdEMUVFN0E1QjM3OTNBOAotOjEwQUQ5MDAwRTg2NDI2MkMwM0VCNTUzOUI0Rjg5RjlFQTkyRDQ3REZCNAotOjEwQURBMDAwMEZDNUQwNUEyODQzNzQ0ODc4MDY1NDlDNEZGNEJENTFCRgotOjEwQURCMDAwMUUyOUY3OTg1NkVFRTVCM0FGNzhERUY4OTZDMzNGNDIwQQotOjEwQURDMDAwRkY4Mzc1MUQxQjg5RjYwRTU4QUFDNDhGRDFGNEIwMjdENgotOjEwQUREMDAwRUI3QjhGQjdFQ0M5OEExMTZGRTkxNTdFRTU2QjU4Njg3QwotOjEwQURFMDAwRTUzM0NBNDA3QTNCN0Y2ODlEM0UzMzgyMkUyNTdGQkM4NwotOjEwQURGMDAwNkNFMDc5MTNDQUVCM0NBRTM1QzFDQ0M2MDQxMTJFMjVFQwotOjEwQUUwMDAwRENGRjI4RjlFMzFBQTREMzk0MzBGRDk1ODlGNzg3QTREMQotOjEwQUUxMDAwN0MxOUNDMDYyM0JENURENzY1MDlFQTAxM0Y4NUEyQkYzOQotOjEwQUUyMDAwNkI5MEZFOEFDMkY2ODlEQzc3QjQ0QzE4NDA2N0Y5OThCQgotOjEwQUUzMDAwMTcwRUY2NEMwMUQyOTVCNDRGOEE5NThFMTYzQ0U3RkQ1RAotOjEwQUU0MDAwRkM0QkY3QjZFMDdDMjNFOEVBMkQ4NEMzNTkwNUU4OEE3OQotOjEwQUU1MDAwRkM2QTAzRjRBREY2N0IxNERENDlGQzRCN0JCQTlDMzVGMAotOjEwQUU2MDAwRDE3RTY3NkUwMkQ3QjNDMUVBREI0OUNGODJCODI0QkE3QwotOjEwQUU3MDAwN0I3MzBFQTdCQjJBRTYyMUJBMkI2NzVBN0FBOTM0NkJEQgotOjEwQUU4MDAwQ0JEMTc0MDkyM0VBQjQ3NEU3MjNCQThCQTZENzc4NzRCQwotOjEwQUU5MDAwMzcxOEU5NEVFQURCRDQyQkQzRERFNzQ4NzdERkM1OEZERgotOjEwQUVBMDAwMzk5MEVFM0VDRjcyQzZBN0JCNjg3QTkzRjI2QzlGQzUwRAotOjEwQUVCMDAwNTE4OTc2NzU2MzhENDJGQUExRjg5REExMkQ1ODFFNTFENgotOjEwQUVDMDAwOUY0Rjc2RjZCRTY0MzdEOUREOEQ0REZDN0I0OThGNDdBOQotOjEwQUVEMDAwOEY3OTMzMDU2QkM1Rjc3QzZGMjU5NjFCRDdDMTc3RTg1MwotOjEwQUVFMDAwQkFGNDE4Q0ZBQjE5N0EwRkZGNUVCOEExRTkwREJDQkY1OQotOjEwQUVGMDAwQTBEMUNGREJCRjdDN0EzMzlEODcwQTZDMTZFRENCREIwQwotOjEwQUYwMDAwMkFCMURDRDhDQURCN0Y4QTcxQUVBQjMxQkYyREQwODJDQgotOjEwQUYxMDAwRUZBRkRBOTZFRkU2REI2RjZFRDc0RjExRUJEREE3M0NCNAotOjEwQUYyMDAwRjcwNkI1NkJFM0VENkUzRjZDNEU2MEU0MjdFMEY2RkE5MgotOjEwQUYzMDAwNjRCMUNFMjlCQkY4M0FEMzNFQkU3RTg2MEJFODYzNDVBQQotOjEwQUY0MDAwOUY5RkVDQjk0Rjc0NzU2NTI0RUZFMkVDQjNDQjk1QjZENwotOjEwQUY1MDAwMUM3QzRFNDczOUE2NDdCQ0JCNUJGNTQzNzgxQzc0Mzc1NQotOjEwQUY2MDAwMEM3MTc1MzZGN0QzQzhGODIxRTYyOTU0NDdEODE3NTcxRQotOjEwQUY3MDAwNjc3MzNCNDRENjRCNEY2MTc0N0U4REZEQ0M0RUZFNzJBMQotOjEwQUY4MDAwMTlERjBDM0VDNDE0RDQwN0I4NDY2MTk3QzQ4Qzc3NEVDMQotOjEwQUY5MDAwMkY2ODIyQkI2MkZBNjAxOUU3MENBOTRCNjFEQ0MyNEIzNwotOjEwQUZBMDAwOUY0RjhCRTU0NzJBQ0JFNkY2RjMyOTkxNzcyMURGRDczMAotOjEwQUZCMDAwMDRGMjc1NDgxN0ZCOTA0OEU4RkNGMDkwNzdEMDlFREJEMAotOjEwQUZDMDAwOTdDQzM0RTdEQ0Y2RTVGM0YyRDRFQ0JDN0Y2RUNEMDEzMAotOjEwQUZEMDAwRjhFQTlBNTRCQ0Y3OEJFNTI5OTRCN0YyODMxRTE2NEMxNQotOjEwQUZFMDAwNEExQzM4RkZFOTJBMEIxQTI5MEY4QUNGN0Y2NThCNTEzQgotOjEwQUZGMDAwREM1N0MyRTVEQTNDODEzRjM2NjkxOEQxRUY1QzgxQTdBNgotOjEwQjAwMDAwRUE2Q0ExMTc4QjU5MzFDQUE5NzkwMjZGM0YzNDM3MTlGRAotOjEwQjAxMDAwQjhCRTZFMzM0NEM5OEY3OUQ5MjgzRjFFOEU2QkNGNkI3MwotOjEwQjAyMDAwQkY0N0M5OTcxQTMxRUU0QTYxQzdBRjYyN0RFNDNGRkQ2MQotOjEwQjAzMDAwNDREOEYxQTcxRUU2NzZGQzZBRDY0MUZFRDNERTlGNzFBNgotOjEwQjA0MDAwM0JCRTFFOTY4N0Y0MTJFRDA3QUREREFCMkRENzc3NjhCQQotOjEwQjA1MDAwQ0IwREEwREVCMUZGQzZBRTI4QjkzMzg2RkJBNTdCMUZBMgotOjEwQjA2MDAwQUUyRjQzM0Y2NENEQ0U3N0M4RkY1RDIzRTU0QzQwMkIyOAotOjEwQjA3MDAwNjdDMDQwRTc3MkU2QTE1MUU0QkZGQUQ2RjJFMzE5RDhGRgotOjEwQjA4MDAwRDU5NTY5RjI0QkVGQzk3NjQ2Rjg3NzVFRTQ3OTJFMERENwotOjEwQjA5MDAwOENGQjExN0FFRDIzNkZDMTdEMkM4QkQyNEZEMTcyQTUyMQotOjEwQjBBMDAwNTBDODE1RTlGRjkwRjI1QkNBOUI0MkM2RjUxNEVDNzdENQotOjEwQjBCMDAwREZGMTYwOUIyODNCRUZFMTZDQTFBRkM0RkU0REZBNEQ4MAotOjEwQjBDMDAwQTQ3RDU0ODhGNjExRDJEN0E4MjYyMkJBQjA3RTcyQkZDQQotOjEwQjBEMDAwNkREMjQ3RThBNTA1MjU2NkM0N0I5MTE5RjgxQkUxQTY0QQotOjEwQjBFMDAwQjc4REY1RDkzNEY0RjE2OEY2RTVGNzgzREFFRjUxRjQ2QQotOjEwQjBGMDAwMjNGNzYzMEIwNUZEREM4NDkxMTgxOEZGMEY3MjFGQjg0RQotOjEwQjEwMDAwOEFEM0NGNUNFNjNEODRGNEYzRkJENTlDN0VFNEJFRjBBRAotOjEwQjExMDAwOUJFRjAzM0RGQUM4N0RBMERDNEY3RURERkQ2MDNGREQ4NwotOjEwQjEyMDAwNThDMDNFODZFN0IxNUNFOTE3RTBGMUZENDY4NUQzNDU5RQotOjEwQjEzMDAwRkQ5Q0RGM0Q1NkM1QzJGMkUyNjgzMzczQUI4NjcwQjk0MQotOjEwQjE0MDAwNjVBNkM5OEM3RTk3MTYwM0RGMkZDRDk5RjU3RUQ5RDJERgotOjEwQjE1MDAwMDhGOTEzQjQ5NzFGNDBCOEIxNkUyN0Y5NzdFQkFEREE1MQotOjEwQjE2MDAwNzEzNjJCM0Q3N0ZEMTFGNzU1OEY1QUM5QUY3NEUxMDg0MQotOjEwQjE3MDAwMjM5M0U1QzJBRTExOTQwRkZFOTk4MUM3NUJFNTdDNkUwNwotOjEwQjE4MDAwM0ZCQ0Y3QjUxMEQ0NUJCOUVFOTY2MkNDMkZBODU1MDI0MAotOjEwQjE5MDAwMkZENkMxQjcwRkFDQkU3NzkxQkY2Qjc1NDE3MTJGNjdDQQotOjEwQjFBMDAwMEZDNTI3RTRCOEYxRkRCQTdFOTJDN0M2MDM1QzNGRjcyRQotOjEwQjFCMDAwMjkwOTk0REYwQkVGODc0N0M2RTlGRTM4ODhDQkVGREMxRgotOjEwQjFDMDAwNENERjA3QjgxRUE5NDc1QkZBRjMyN0Y4MTNCNDMwMUIwRQotOjEwQjFEMDAwOTQxMkNFQTcwOEU3NEQ3MDdGQ0I1Rjk4RTc4QTc5MTM2QQotOjEwQjFFMDAwMUIyM0UyMDREMDNFNjZCRURCNzkyMUNGNDc2MTcyMDFBQQotOjEwQjFGMDAwQ0M2NzY1QkFBNzE3RDc3RjRBQzQ4NTRGODkzOEUyQTlCQgotOjEwQjIwMDAwNDQxRTU3RkM3QjdGN0RGRUI0MERFMjdBRTg5NDg4M0JCOAotOjEwQjIxMDAwOUU0QUQxQzY5QjY0QkQ0NEYxM0NEOTZDRjY2RTM0NjA0NQotOjEwQjIyMDAwQkM5RTc5Mzc4MkZFNzAzRDY0NkFBMjdDOTU0NTFDNUZBNgotOjEwQjIzMDAwQkQyRjI1NkJFRTExQzgxQTU0M0U2QTEwQjRGQjk5RDM4QQotOjEwQjI0MDAwQUIxRjA0RTMyQzZGRDM5RTgzRUExNUY3REJGNjBBQkEzMwotOjEwQjI1MDAwRTlCNUYwQTcxQzM3NkI1MEY1Mjg2Q0Q3QkI4MERGQjM3RQotOjEwQjI2MDAwREE1RjlFMjhDQjVFRUFCRkY3QkExMEM5QTNGRUYyOEY2MQotOjEwQjI3MDAwNDJFMjlDM0FGNzkzQzhGODQwQkNGODYxNzRCQzMwRkFEQgotOjEwQjI4MDAwOUM2OTc0QkM3RkIxRTQzNzExRUY1RjI0RTRENEUyNkVCMwotOjEwQjI5MDAwMUU2RkI4RDVDQzM2MEY4MkVGQjc3NTY3NTBGQ0I4MjY1NQotOjEwQjJBMDAwRDEzRjVDMTNFRkY3NUJCRjUxOUU4N0E0Q0ZERURDOUVERQotOjEwQjJCMDAwRkVGOEY4Q0YyMkUyRTNGNTIyM0U1QTJGRDdEN0E5NUQ1OAotOjEwQjJDMDAwREY2NDAxQ0ZFRjMxM0UzRTc5OTA3MzYwN0MzQzNBOUY2MgotOjEwQjJEMDAwRTI0NUI0MzMwQzYxM0NBQzcxNzBCODU1RTlFQjJBRDE0RQotOjEwQjJFMDAwNEY3QzYxMzlBMzNDRjczNTZGMkQ2QjQxM0ZGMjlBMkRBRQotOjEwQjJGMDAwRTI5NjU1NjE3N0Q3MEIzOEM3NUI5N0QzQUI2MzJFOEQzQQotOjEwQjMwMDAwQkYzRTgxQjkyMkQ2OTNFNTRCRDE5NEM5OTI4RkM4MzMwMQotOjEwQjMxMDAwMUQ1NDkzQUQ2OTlGREIzNDQ0NTM3RkYwQkE1MTlBRUZDQgotOjEwQjMyMDAwRjlGRTIyNERCOUEwRjUxQTRERkQ2MTZEMTU5QUYyODgwRQotOjEwQjMzMDAwOURENzZCRUExN0IyMjE0OUU0NkYzQkEyNDc1RjEyQkI2RQotOjEwQjM0MDAwMkEzMDQ3RjM3REY0REU4NTlBRjY5RkIyQTYxRDkzQTBCRQotOjEwQjM1MDAwNUVBNzQ1N0IyRjMzRjM3QjdBQzY5NDg1RjNBOUM3NzYyNgotOjEwQjM2MDAwMkNENUY0QzM4MjRBNTAyOTBCREYzM0Y2OTlCOEE3Nzk1QwotOjEwQjM3MDAwNzkwRjhGODc1Q0REQjU1QTMzNEVBREJFOEVGMDE4MUQ0OAotOjEwQjM4MDAwRUYyRDYyN0RFNDM3NkUwODI4RUUyMDFCMThGRjVERDU5NwotOjEwQjM5MDAwRDU0RUVEQUU2NEY3Qzg3OEM4QzY0MTIyREU5N0NEQjI2RgotOjEwQjNBMDAwMzk1RDQ3RDM4NThERUNDMzBCQkJGNEU0N0YyQzY0QzNCQwotOjEwQjNCMDAwMUY5QTQ0RjAzMkIwODA2QjIwRkUyRTMwRUUxN0JCRjBBNwotOjEwQjNDMDAwOENERDhENzk0NUI3QkZCNThDRTY2M0NBRDREMjA1REU3NgotOjEwQjNEMDAwMUYxOEI5NUVFQjQ4MkQ1REQ4REQ1QTNBNDg5QUEwQTVGMgotOjEwQjNFMDAwODM2ODc4Mjc3QkI0NzRDMTQyRjBCRkNCQzAzQjc1ODZCRAotOjEwQjNGMDAwOTY2RUZFQjdFMERDODFGMEI1ODZFMTVCN0NEMEQzNjI2RgotOjEwQjQwMDAwMjNCOEYxQkMzNTY5OUY5OTg0M0QxNDFERDc5MDc2NEVDMQotOjEwQjQxMDAwNzA5MEIwQkI0NTNGMzIyRUIxNTlGMTkzNURENTFGNzc4NwotOjEwQjQyMDAwOUMxMENDMEJFNkEzM0RENUM0Qjg1RkM5N0IxMEU1NkY3QgotOjEwQjQzMDAwMENCRjI0QkQ4RkU3OTc5NDcwOUQ5QkMwRjU2NzJERjNEQgotOjEwQjQ0MDAwOTJGQzNFNjZFMUZFQTQ5M0Q1QUJDODlGQjQ5MjM1OTFDMQotOjEwQjQ1MDAwRERGREQ5OUNFOUMyRUZFOEE3N0E1N0NBNTMxODkwOUYzRgotOjEwQjQ2MDAwMDBGNjI5OEJGMEQ3QUUwNjhCMUFFRjFGOEE4NkE3RDI3QgotOjEwQjQ3MDAwQUQwNEVENzg2RTk4NzU0QjdERTBBM0ZDMTUwRkRFRUQwNQotOjEwQjQ4MDAwQTk4OUZGNjhFRDVGRTY1MTIyRTU5N0I0ODdFNTc4MTI1OAotOjEwQjQ5MDAwOUU1MkFFQzk3MTRDQUM0OTlGODk3QzExMjVFN0Q4QzgzMgotOjEwQjRBMDAwRThGODkzRDY5RjIzRkQ0MTMyOEUyM0UzNENEMUZFOUJENwotOjEwQjRCMDAwMDhCQkI4NTU4RjcxRDJDMUY5MkQ3OENFQjdEOEUxMjEyQwotOjEwQjRDMDAwM0Y2MTI5RUJCOTA1REY0RjMwNzdCNEE4MkVFMUJGQjg1MwotOjEwQjREMDAwOEFGNUZCMkZFMkVBQUIyQkM0QjU2RkYyMkJBMTQ3RjI0MgotOjEwQjRFMDAwMDdDNkIzNjU3QzFDOTZGRkYxMUZBMUYxMjRDNTk1OEI5RgotOjEwQjRGMDAwRjM5OEYzRjIwODI3RDJEMzQwQkZBNkZCRjgyQkQwOEZFNgotOjEwQjUwMDAwNUVENzk3OEFGNUFBMzAzMTNEMjJERUZEQTYxMkEyRjU1QwotOjEwQjUxMDAwRkM5MDc5MzY0NTlFREI2RjYwMUREMzZFMjE3RjMyRTg0QgotOjEwQjUyMDAwNDlCQzI3QTc5M0ZCQkI1ODU3QjQzREFDOTJCRjU5MDcwMgotOjEwQjUzMDAwMkI0MUJBQUY2NTExNzFERUZDRjA3NzJBRUIwNzk2NjVGNwotOjEwQjU0MDAwMUVEMjk1RUM4OUE3RjE4MjcyQ0FBM0UwRjk1MzRDQzhDOAotOjEwQjU1MDAwNDFCOUZGOENCN0NGOTNGOTE4RjI3RTRGOTk3NzU0OTQ4NQotOjEwQjU2MDAwMjNGODc1MUMxQjg3RkQwM0JGOTVFNTk0QTI3RjAxRjhBNgotOjEwQjU3MDAwNTM4OUU0QzdGRTNDMjVGQTNFODAxRkEzRDYyRkYzMzE0MgotOjEwQjU4MDAwRjRGNjEyRjIxQjJEOEI1Q0VGRDc4MDg3QjQ1QjdFOUNBOAotOjEwQjU5MDAwQzNFOEU5Qzg3MUQxQjMzRUUxQzQ2RjNERjhCOUE0NDcyRgotOjEwQjVBMDAwOTMzRkRBNjg4NDBEMERGQTEzNUUxNDc5ODExRDVBQkIzRQotOjEwQjVCMDAwRkQ5NjFDOUQ4MDFCREZGNzVDMDk1RUYxRjEyMUYyRjgxRQotOjEwQjVDMDAwMDQzRUJFQUUxRDI2RjNGODI0MUM5NzBDODRGQjBBMEQyNgotOjEwQjVEMDAwNUNGQkY3OEZGRDcwNUYxMTBCRUUxMjJFRTc0QTdCN0U0RQotOjEwQjVFMDAwODFGOEQyREI4RkE1MjNCQzE3QTY3QTU3NjNGRERDRTM3NQotOjEwQjVGMDAwQTE0RjE0NUQ3ODVFNTVGQUIzOTQ4NzdCQTE0QjRGRTc1QQotOjEwQjYwMDAwRkYxQUFFRTM3MkIwRTEyNTNEODk4NkYzREQyNjhBQjNFOQotOjEwQjYxMDAwRDY3NEJENDE3NkUxRDk2NjEwQjQwNkZDQkQwQzE4NzIzMwotOjEwQjYyMDAwRDg2NUZDMDg1MUYwOEVCNzRGOTJFQkQ5OTAyM0Y2RTUyMAotOjEwQjYzMDAwNjJGRDMyRUYwN0Q2QjkzOTI3NjY1RTQ3M0YxQ0I0REY5QgotOjEwQjY0MDAwMDUxQ0FBRjQ2MzkyRjAxQzU5N0ZCRTkyREE5NzE3NzkxMQotOjEwQjY1MDAwNUY1RkY0M0EyQTcyNzhGRURCMjlCM0Y3M0VFQ0VGQzM2MgotOjEwQjY2MDAwOUU5QzFERDg1Rjk1QkVGQjcwMzZDMjY3QUQ0MkU3QkI5RQotOjEwQjY3MDAwQTY5OEY4NzlEQzJDNzE1RTZGNDJBOEM5OERFNzk5MzNFMgotOjEwQjY4MDAwNzNGODdENjYyMzdFQTRGNzYyMUNGOUZEQjU3N0E2RTAwQQotOjEwQjY5MDAwMzkzNEQ5RkYwODQ1NDdFNzQ3MTk3QkVFODM3RjJDQzEzMgotOjEwQjZBMDAwRjhFNjIyMzdERTZGQkZEODI0RUUyRkJBQ0IxQTJDMDA3MwotOjEwQjZCMDAwMzlGMkJBOTFERjQ3NjUxOEQyNDRFNzY2RkE5MkY1RTRBOQotOjEwQjZDMDAwRDc0Q0QzQjNBOTQ4Nzc3MkRFRjJCQ0FEN0M4RkY3MDFCQgotOjEwQjZEMDAwNjA1RUIxN0MzRkE1QTVBRjc4MERGQTdCMDQzREM4NzVDRgotOjEwQjZFMDAwNEZBOUVDMkI2RUIyODVFMTJGRjMzQ0EzRTE1MzI1Rjg3MwotOjEwQjZGMDAwNDNFRTQzMUJGMDVFNUJEMEJGRTdDREJDMUM3REFGNkQ1RQotOjEwQjcwMDAwRkZGRTc0NThGRjNEMzZGNkM4Qjg3RTgzQzU5MzM0MUVERAotOjEwQjcxMDAwRjk1MURDNkJGQjE3ODcyNzg5REY3N0E0QkRBN0Y2QkMzRgotOjEwQjcyMDAwQzhCNzk3QkY1MzEyRUZERTlCRkZDQzUxQkU5NzdCODIwOQotOjEwQjczMDAwRTJFNTg1Q0JCQ0ZGNzg3MDY5NDg1Njk5N0EzNTlENzNGMAotOjEwQjc0MDAwRjc1RUFFREUyQkZGQUQ4RkI5REZCRTI4QkVGN0RGRDNDRAotOjEwQjc1MDAwRjk2QUVDQkNDNTVFQjFDRTcwN0U2MTg4Q0UyOUY3RTc5MAotOjEwQjc2MDAwMkRCRTU0N0VEOTdCNDcxQUYwM0VEMjA4MzhDOEJDRjZBRAotOjEwQjc3MDAwMDZCQzhGQjQzODQ2QkZEMDlGQ0I3NkU1N0I4N0FBQzQ4MgotOjEwQjc4MDAwQkMxQTMwOEYzMDM1RjIzREE3QjdGMDM4NjkyMjJGMzAyMAotOjEwQjc5MDAwOTQ4ODdDRkJDQjJFM0Q5REUzRkZFNTExREQ4Q0REMzFGNAotOjEwQjdBMDAwRTY5RDlCQ0JFMTMyQ0FBOTEyMUY4RDBFRjJGQkI1RTNEOQotOjEwQjdCMDAwRDU5M0U3NzlFNEI5RDhFOEY5NzU1Njg0NkVDNUY5NjM4RAotOjEwQjdDMDAwOUU3MkFDRjExQ0I5N0MzRjJCRTdERDk5QzJGMUQxRjA0MAotOjEwQjdEMDAwOUE4OURGOUJBQUYyN0NGMkNFOTREMDRBRTIxMzg3MTZCNAotOjEwQjdFMDAwQ0ZDMzA0MUUzQkFGMEZFNUQxQjlCMjk5RENFRjEwOEY4OAotOjEwQjdGMDAwMUUyNkE3RkFDQTUxQkVDODdCRUVDQUQ0MjZDNTExQzFGRgotOjEwQjgwMDAwOEY1N0EyODczMERDRjUxQUJDMEU4NEJCOTFCRUNCN0U2RAotOjEwQjgxMDAwNEYxRjE1N0NDQjNDMzZEQ0NGMkQxMUZBNkVDOTlFNUFEQQotOjEwQjgyMDAwQjI4N0U1N0VFOUY0NEUzREU1NkY5QzY2M0NBRTcyQkFBOAotOjEwQjgzMDAwNERBMUZERDA1MjFGNjNFQjQwMkVBRDdDQTI3ODMzQUEwMAotOjEwQjg0MDAwQUUyNTk5QjA5NjE0RkUxRTdGMUY2NkU5QzZBOEY4QkEwOQotOjEwQjg1MDAwRDg1RjQ5QkQyQUM3NUZCRTRENkIxN0Q3QjA2RDdGNDYxNQotOjEwQjg2MDAwRkJFOUY0NTEyRTNGNTZCMDI2RDIzRjJCMUZEMEY2NTc5RQotOjEwQjg3MDAwQjM2N0Q2QTczOENGRThCQzgwMTFDMjhGMzcyRDU3RUNGRAotOjEwQjg4MDAwNTdDQTU4MTlFQThGMzU0RjdDNkVDNDlGNjA4OUM3MTcxNQotOjEwQjg5MDAwRjhGQjRGNDM4N0YxREY3REMyMjdGRThFMDgzRTZGQzk1QwotOjEwQjhBMDAwRjVGQzIwMTdGRDNFRUZGMkY5QUVDRUY1Q0RDOTQ1N0Y5MAotOjEwQjhCMDAwQzlCQjdDN0UxN0VBMkU3MDNEQjMyQjhERjQ1QjhCRkRFQwotOjEwQjhDMDAwMkU5MkZGRkFDMTVDRkVERjhCRjczNTAwOUM0QzI2NzE4RgotOjEwQjhEMDAwNkZCQUFFNDk5RjQ4RjY0RDgwRThFQzQzRTcxRDczN0U5MgotOjEwQjhFMDAwNDA2NTc3MjZGMjQzREFEM0QzNjc2MEJGQ0VBN0FEMUU5QgotOjEwQjhGMDAwNUNERkQ2NzI0RjIxRkEyRkI2NTZGM0YzQTE2NjEzOEY5MQotOjEwQjkwMDAwREYwNzdFMzlGMTAwODY1Mzg2NzY2Q0FGNDAxNzlEQTMyMgotOjEwQjkxMDAwN0I3RjEwRkQ0MkFEQkEzRjFGQzZCQzk4RDZDOTNDNUZDNQotOjEwQjkyMDAwMzI1RDE3REEzRjI4NjIzQ0E3MzU5MDg5RjE3REU3NjhFMAotOjEwQjkzMDAwN0U2RjRFOUFCRUJDOTBDQjdGNkUyNzM2MDg1QzVDRTg2QgotOjEwQjk0MDAwMkEyMDdGNjJBRjQxRkExNzNCMkM3NDJFQUI4RUZGMkU1QwotOjEwQjk1MDAwQzYyOEM2RjEyRkYzRUE3MDBFOTE3NkYxRDk2NkE2RjlFMgotOjEwQjk2MDAwOUQ4NjUxMUQ0QUQwOTA0OEY3QTg1MDNDQTg2RTQzMzBBMAotOjEwQjk3MDAwRkQxNkQ0Njc0RkE5MTQ0RjkzRjM0QjdCM0RBQjAyRTMwNQotOjEwQjk4MDAwNjY1MjhGRERBMjM4QjhCRjRERDhGRDBCOThGQ0UzNzEyRAotOjEwQjk5MDAwQjdGOTgyOUUxNjA4N0JGRjE2MkI4N0Y3NTJFNkNFQzNCNwotOjEwQjlBMDAwNzYwQkNEMkM1MTA3QUM3NjRCNjU0NzI5QURCM0Q2OTBCRAotOjEwQjlCMDAwOEM3Njg1OEMxRkM1Qjc0NzYyRkJDOTFBN0U2MUU3RTdBNQotOjEwQjlDMDAwOUU5NUJFRTFEOEM5MTlGNDQxNUQ4NjNGREI4NTNDNjk4RgotOjEwQjlEMDAwMThDRUNGRkZCMUExQ0M4M0YxQ0E4NkQ3NDZEMEVGMzBDNQotOjEwQjlFMDAwOTkxMjc4M0MxQ0U0OTYxOUVGMTEzQTg0RkExRUQ2QkRFMAotOjEwQjlGMDAwRUExNThCQzg1QjBBODg3M0NERkNERUQ4QzYzOTM5NDU5OQotOjEwQkEwMDAwNzQxRUYxNzgxRkRERkY3MURFMTBDQTIzRkUwNjc5ODRGMwotOjEwQkExMDAwMzdBNkJFOTJGQkJCMUZFMEJERUIwREQ5NjBENzQxRjk0NQotOjEwQkEyMDAwNzRFRTlGNzg3OTQ4NjgyNURFMUI5OTkyNzc4OTk3NDc0RAotOjEwQkEzMDAwODUzRUMxNzI0RTVFQzI2QzJBMTc4NTU2RUFBMTNDM0UxNQotOjEwQkE0MDAwMkY5Mzk3NzEwMzBBMDQzNjM1NkZGMDZDM0ZEQTJEQzlENgotOjEwQkE1MDAwQzIyRTcwODdFOEJDNzdDM0NCMjM3NDkxRkU1ODc3MUU0MwotOjEwQkE2MDAwOTc2NzY3ODQzRkY5NEMzRUJCNkQwRUMyN0I2NEVDRkE2RQotOjEwQkE3MDAwNjk3OUQyREU2RUEzRjVDOUY1Q0FGNjJDMzM3NkJCRkYyMQotOjEwQkE4MDAwMTA3MjdFOTUzOEE3M0RDNUNBNUEyRDNDRkVFNzRGMDQ3QgotOjEwQkE5MDAwM0MxQ0VDMUU0MUYxQ0I3RkNENERFMUZEM0I0Mjc0NEY5MAotOjEwQkFBMDAwOEZFQzI3RkE3NzFDRTRCOEFCMTVGRTdCNTlFN0EzRjJCRAotOjEwQkFCMDAwQkM3RTk3Q0JFNTJCOENCMzkxQzYxOUVBRTFFNzlCRTdGNwotOjEwQkFDMDAwRTQxNDIyRkUwMDZGQUFDMDlCQ0FGN0M5RUQ3QzdFRDBBOQotOjEwQkFEMDAwMkZGRUZFMTNFODg3NjJGNEZCMUZGQzBBRUFFNzg3RTcwNAotOjEwQkFFMDAwMUQ0RDI3MjdDNTM4QUI1QTc4RENCNjJGQjk4MEU4NjlEOQotOjEwQkFGMDAwOEE1NURDRjc1MkEyNURDN0Y4M0M2RTlGQkFGMzkyQzUzNwotOjEwQkIwMDAwNzkxRDA5QUYwQzg1QzY2OTExNzBDQzA5MEQ5RjMzRjZGQwotOjEwQkIxMDAwOUJBRkZCQUZGRjRCRUI4RUMwOTcwN0VGNkQzOUQ4QzVERQotOjEwQkIyMDAwRUYzNzFFOUZDN0YxODVGNDlDNDI3NkUwNzY0RDdGNjcyNAotOjEwQkIzMDAwRDY0N0I1OUZDMDI4NUZBRTIxQTU4MERBREYyQkVFNkYxOAotOjEwQkI0MDAwOTVGN0Q5NjFCQkZDNzFEQ0JFNDVCQjU3REVBN0MxRkNENAotOjEwQkI1MDAwOTM1OTY0MUNCMkZGREU4QzBFNzFCRjcwRkYzQTZGMjhFMAotOjEwQkI2MDAwMTFFQjc0ODg3NTNBMjJFRjMzRUNFN0NGNjM3RDc5NzM3QwotOjEwQkI3MDAwRUQwM0U5QjgxRkZFRkRGRDhEMjkxMkZENjlGODNDNTY2NQotOjEwQkI4MDAwN0ZDOEQ3RjFGMDcyNTUxRTk3MjdERjFCNUVFNDNDQTNGOAotOjEwQkI5MDAwRTBEOTBGRTdBOEY5NDk3ODIyN0Y1M0JCMzE1QUJBOTQwQwotOjEwQkJBMDAwRjNDQzExRjQzOTgwQkZGM0JGRTU3OEUyN0VEOUZBQkI1QwotOjEwQkJCMDAwNzlCRTM4NzM2OUU5QkFCRTMzNUY4N0Y5MDlCMkREMDcyOAotOjEwQkJDMDAwNzhDMEEwMzRFQzI3QkMyMTRGRUMyNzczNTg0RTlDQkNBNgotOjEwQkJEMDAwNDc2RjlFMzNBNjdGOTFERTQ3RUYyNzdCOTNFNUVGRDkzMgotOjEwQkJFMDAwNjlGRDFBQkQ0RUZFN0IzOUZFNzNGQzdFODM2QkEzRkNBMAotOjEwQkJGMDAwM0MxODhGN0FDRTE2NkUxN0Q2MkZEQUYyNjMwMjdFMDNDOAotOjEwQkMwMDAwRkQ1NDdENzkzOEJGMTI1M0M1RjNGODNCNUJBQkYzNEE2MwotOjEwQkMxMDAwNjdBQjYwNzc5NDI0NTVEQzk5MEZFNUE2QzdDNjkzRkMwMwotOjEwQkMyMDAwMkUxOTU0RjE3OTNFQzhGMzM1OEY0REUwREY0NzU3N0MyQwotOjEwQkMzMDAwM0UwNENCNzkxMzc5Nzk4QUU3Nzk5NEY3NjBCNENDOUU4NgotOjEwQkM0MDAwOUExNUI2MkJFRUNDNzNEMUI4RkE0QTFEREQ2QjY3NDI1QwotOjEwQkM1MDAwMjMwNkQ2NjM3QURENDRGOTgwMTJBRUYxOUUyNTI2NUQ3NwotOjEwQkM2MDAwNTNBQ0YzQkZGN0Y0RDMwMzhGQkY0Q0MwN0ZCQUQwMUZFMAotOjEwQkM3MDAwMjhGQzA1MjE1NUUzMkZFODRERTRFN0NGN0I1RkZEOTJEQgotOjEwQkM4MDAwQ0VEN0RDOUJFNzVCOUYwN0VEMUJBRDY3NkZDRDg3RjJERgotOjEwQkM5MDAwMDZFQjA3MTRFRjUzM0M2MDg3QTAxRkM2RTU2MDhCNjA3RQotOjEwQkNBMDAwQkVDQUQ5QUQ1RUI0OUZEODZBQjc1OTI1QjgwQUZGMTg4NQotOjEwQkNCMDAwREVBOTA3RjA3QkU1QjVBNzdFM0M4ODBGRTNDNTc5NEM4QwotOjEwQkNDMDAwMTQ3MkEwRjFCNUJGRkQxNUUzQzQ4RDY3NkM2RTM0MUIxMwotOjEwQkNEMDAwMjc3NjNGN0MyN0RBNUYxM0JCREZGRTFCRDdDM0ZDM0MxNAotOjEwQkNFMDAwOTA5Q0Y3NDRGNDdGQzJGQjA5NUQyNjlBRkZDNEVFQUIzQgotOjEwQkNGMDAwNTY2MEZENkJERkVCMkU0MDNBQjlFRTQ0QjAwNUM1NDIwRAotOjEwQkQwMDAwRUZBQkZGM0U0ODczMEU4ODdEN0FEOTdDRDFCOEYxMzkwQwotOjEwQkQxMDAwMDk4RjNGMDFBMDkzMDgxRTNGRTdGMEY4OEFGMkQ5Q0VDMQotOjEwQkQyMDAwM0I4RjZFMEU5MTkzNTQ3QkRFMEFFQzc4OEEzQjVGNjAwQQotOjEwQkQzMDAwMDk2RThDN0JDODczRkREMTdFRDVFM0Q1QjAzRTc4N0Y4QwotOjEwQkQ0MDAwNUQxRkNDMjBDMjlFOUU3MkQxMEM4MjI0NUMyRTY3QzlERQotOjEwQkQ1MDAwOUE3MkE1Mzk0QjUzQkZDQTkxQUZGOTNFM0RGMzJBQ0QzNAotOjEwQkQ2MDAwRjc5OUFFNDI0RDc5RDZDODg5OUFGQTM3QkFDQjM1RTVGQwotOjEwQkQ3MDAwRDkxMzY2NkFFQTU3N0JBQTM1RTVDMjYwODdBNjdFRjFDOQotOjEwQkQ4MDAwOTEyRUVERjc2MzRDOEY3ODI4M0FFRTdFMDM5RkE1MjcxRQotOjEwQkQ5MDAwM0RFNDlFMkQzQkQ1RjQwNjNFMjdGRTg1ODMyM0RBQUY5NgotOjEwQkRBMDAwN0NDREM1OEUzN0YwQkRGNDJCNDc5RjlGOTI3RUU2OUJERQotOjEwQkRCMDAwRjVCNjgwMzFCNjNGMzk1MzJEMDhERjgzQTBEN0YxRjNCNAotOjEwQkRDMDAwNTNFRjI1RkJGRTgwNzg5M0U3QTdBNkEwNUYxOTkwNTA1QwotOjEwQkREMDAwNzVEQkI5OUZFMkVGMzI1QzU4QzRGRDZFQzcxMTMxOTQzOAotOjEwQkRFMDAwNEY2RTI3N0ZFNTcxNDNEM0IzN0ZFNDc5MDNCOTI4RjcxQQotOjEwQkRGMDAwQUVFQjlCQUY1OUY3OTQ4QjNFQ0RCQUNCRDlBQTI4M0M3QQotOjEwQkUwMDAwRERBMTI5NTczOUVFRDZENDlGOUVCOTVFRjM3REE2NkI4RQotOjEwQkUxMDAwNEIxNDlFQjY2QkNBMzdCQTFGOEVDMjUzN0IxNDlFOUVCQwotOjEwQkUyMDAwRDI3Qzk3RjRERDJERkM1RkFGQTFERjBBOUU5MzQyM0RFQgotOjEwQkUzMDAwOTU4ODg3QzlBN0ZBMDgxRjEzN0FEQTJBMTE0RkQ3MUNFOQotOjEwQkU0MDAwRUYyMDdDOTUwNEJEOTUyODJFQ0I4RTM0QkQ4MUNGMjA2QwotOjEwQkU1MDAwRUNDQkIwREQ4MUU2NEM3QTFFNkM3NjkxRkZFQjcwRjM5MwotOjEwQkU2MDAwNDg3QTFFNjk3NkQzRkJGRjY4OUU0MENGNUYzNTdCRTgzQQotOjEwQkU3MDAwRjk5RkNEMzNFOEQ5RDNFQ0E1Njc0NzczMDdENTdGQUVEQgotOjEwQkU4MDAwQjk4QkZCQ0Y1MkZCRUZEREM4NDVCRkMxNzk1REE4MDE3RgotOjEwQkU5MDAwMjNDNjhFQzE1QjQ5OUU5RTRGMDg5REM3RjIwNjdGRUI2RAotOjEwQkVBMDAwRUNBOTIwMzRGMDY3MUQ5MDJGN0YyMDlFNDUyRTRGRkI3QwotOjEwQkVCMDAwNjA3ODBFMUVDQ0Y4RkQxOTIyN0ZBMzQzRTcyOTQ0M0I4RQotOjEwQkVDMDAwN0NGNEUzMEZERUE3RTYzMkI2NjlCRDM3MTM3RjNBMTg3QwotOjEwQkVEMDAwQ0I2NjI4MTNCMkU5Rjc5MDFFQkNDRjkzQzNEOEIzQThBMgotOjEwQkVFMDAwNEFFOEJFRjcwNzY3NjNCOTU3RkM5RUU3RTBDNzFGMjQxRgotOjEwQkVGMDAwM0JGQzVCQzdEOTNEMDNFMkVDQTMwN0M3ODhCMzNGN0I5QwotOjEwQkYwMDAwQ0E2NTQ3N0ZDRkQxQUY0NkQ4MTExRTQ3ODVERkNCQzM2NwotOjEwQkYxMDAwMEEwREY4M0IxQ0U1NkFBMTAxRjVFQ0YxMzhFNzIxNTQ2NAotOjEwQkYyMDAwNTM3OUM5RTA1MjVDQjc3QjFFRTU5MTVGNkZBMERGRTFGQQotOjEwQkYzMDAwOUJBM0YwRkRBRkFDOTdFQ0UyRkFBMEY3NDYxM0VEQTc5OAotOjEwQkY0MDAwOEVFOTNDMkI5MDNGN0E5NUJFQzcxMENFMzczREZFMTQ0QwotOjEwQkY1MDAwRTlBOTVFN0I1RjFFQzJBRkZBRjFCREJDRUNFQzdCNEM4NQotOjEwQkY2MDAwNzE0Nzk0MEQxQzNFOTU4RjNGMzlEQjZGRkI1RUUxMzNDQgotOjEwQkY3MDAwMUJENzExMEQ5RkI5ODMxRDdDNUYxMUY0RTRBMjFEMjAxNgotOjEwQkY4MDAwQ0JDN0FBM0RGNTE0NTcyQ0Y3MENDMzc1MUNGNTlBMzg4RQotOjEwQkY5MDAwRkY3QUVEODE2MUU0MzdGMjk0Q0U4QkYwRkZGNDBDMzYzQQotOjEwQkZBMDAwRDBGQUU3QTJERTQ0M0ZFODQyN0QyMEQ2RUYxNTlFMUY3RgotOjEwQkZCMDAwQ0NFRDNEQTIxM0RDNjcyRUIwRDJCRUUwOTg4RURGQTM5RAotOjEwQkZDMDAwMTA1RERGRUVFMkZCQTNDRkUyREM4NzlDMjhCRTU3RENFRQotOjEwQkZEMDAwNTRGRkVDMEJEMDVGRUY1QTBCNzVEREVCMUQ0MUY2NThBQgotOjEwQkZFMDAwNkYxMzQwMTc2OEJBRjc1NEQzMzlGRURERTQxNjIwQTE2OQotOjEwQkZGMDAwMzhFRjJERjgyRkY4RkU2Q0Y3OUQ1RkZDMDZFQTdGQjA1NgotOjEwQzAwMDAwRDZFQTI2MURFMjE4NDVGMDVCMjgyQTJGNEUzNTkzRkQwRgotOjEwQzAxMDAwQjQ3ODRFNkUwNUVBQzU1QjQ0QkNGMDU2QkI5QTRFNjFERgotOjEwQzAyMDAwNDMzNUQ5RTg4MDdFOTZEQjBBMzcwMzA0RDlDQUI0NkE1RgotOjEwQzAzMDAwMjNGRTY0NTM0RENFMUQ5QkYxQjk3QUU4NzYyM0YyNTg2NgotOjEwQzA0MDAwREQ5ODdEOUJEMThDQUQwNzE2MkUyNUY5MTc3QUE3MTk5RgotOjEwQzA1MDAwRTY3NURCM0FCRDhCRUZFN0U0RjlEQURBNkY5NEY3MjJBNQotOjEwQzA2MDAwRTlGNzk4Qzg0RjAyMjBEMDdFMzVDOUE1NjhGNjQ5NDkzRQotOjEwQzA3MDAwODI0RTFGMTgyQ0UyMzE2M0Q5RDg0QkRBNzhENzRFRTRDMAotOjEwQzA4MDAwQTNCMzhCREYxOTFFMjcxRUExRkQyRUVDQzdERjhBN0IxMQotOjEwQzA5MDAwOUVBM0VGNEY5MUUzM0E1QzdDRkY3NUNDMDg5NDg5RjY0MAotOjEwQzBBMDAwRTQ0MkFFMDdDNkNERkY3QzQzMjlBQzdGNUNCNzQzNDc3MwotOjEwQzBCMDAwNzkwREI3RDVCRjgwNzhCOEQwMjVGMDY4NjA1REM4NEZERQotOjEwQzBDMDAwMzdGOTk3N0NGMDFCNDI0QzlBRTZEQ0YwOTVGNEE1QkI1RgotOjEwQzBEMDAwQzc1MTE5QTkyRjRCNDJERUNBNDg3RDM5QTFBRkFEMTIxNQotOjEwQzBFMDAwRjVBMkQ0OEZDMUU2MUEyMThGOUI0ODhFMUU2QzVFNDc0NQotOjEwQzBGMDAwRTVDM0NEN0U3QTFFNjk2RTE1RjJCODhEQkVGRkFBNzlCMgotOjEwQzEwMDAwQTc5MEM3MDEyMThGRjdEMkZCRUVFNkY5RjQ3Q0FERDlGOQotOjEwQzExMDAwNDdDRjg1QTlCRUQ3MTE2RTMyOEUzQkQ3RUNBM0JDRENDRQotOjEwQzEyMDAwNDMwRjlCMThDNkYxMkU3NDlCMjg4RjAzMzhFMkIxNDc0QQotOjEwQzEzMDAwRDIzMDRGQzk0NEU3NDRBM0YzOTVBMkU1N0MzRjNENzQ1OAotOjEwQzE0MDAwMEVCOEI3RTU2REU0RjdGRTNDMjNCNDE3MDdDN0E3QTcwMQotOjEwQzE1MDAwQTNDQzY1NDdCOUY0RjFFMEYzMjQ4NzhFQkE1Qzc2QjREQQotOjEwQzE2MDAwQTc0RjNFMkVDQTFFOTdERDAwRTUzRjBERUUyNUZENzE1RgotOjEwQzE3MDAwRDRFN0IyOUJBMEZDQzlFM0JERkNCQkRGNjVCNzQwRjlDNwotOjEwQzE4MDAwRDNDMTdERkM3QjgwNTFEMEZGRUNFMDJGNDg4RTk1MzNFRQotOjEwQzE5MDAwRTUyMEYyNDdBNTM5N0YyQUE4MEJEMEQ3RTUwNzkxMkZENAotOjEwQzFBMDAwQTY2NzJFOTk4QTdDQjE2MEIwOEJFODcyQTY2QkZENDFDMAotOjEwQzFCMDAwMkNDRjFBRDlBRUUyMTUxNTFFNUJFMTQ2NkM1NzkxNTY4RAotOjEwQzFDMDAwQUQ2MkJCQTkzOTc3NkNDNDc2RDM4NjZFNTcyM0RCQ0RCRAotOjEwQzFEMDAwMThCMzZGMjM5NjZGNzBCN0FCNjg5RjJFNDAzOTU2MUEwRAotOjEwQzFFMDAwRUU0Nzk2RTU3NzI5QTc2NTNFRERENURENUVEMjA3RTMwQwotOjEwQzFGMDAwQkFCQ0E0MEYyNDVDMkFFNjU2NkY0MkZGNjc2Mzk3RTIzRAotOjEwQzIwMDAwQzBERkE1QTk5OEFCRjQyNzMzNjBFRTYyMDNERTkzMEE4MgotOjEwQzIxMDAwRjJGQUZGM0RBRTc3QUM4Nzc1MzY2MkY5MUEyQUI3QURGMAotOjEwQzIyMDAwRkYwNkZBRUQ3RjAwRjZFMjMxRTgwMDgwMDAwMDAwMDAzMgotOjEwQzIzMDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZENTNDMDk3ODU0RTU4MgotOjEwQzI0MDAwQjVFN0NFOUQyRDY0OTI0QzM2MDg0MkUyNjQ5OTI0OTY1RgotOjEwQzI1MDAwMkM0M0I2MjYxMDY0NDgwQ0VFMzAwMUY5NDQ2NTE5MTBFMQotOjEwQzI2MDAwQzIxNjQ4MDRFQjE3QUI3RTE5MUExN0UwNjk4RDZCRDEyMwotOjEwQzI3MDAwQUE2RkM0QjVBRkI2RTQ2MUQ0NTgwOTFEQUE1MkQyODdEQgotOjEwQzI4MDAwM0E1NTEwQjQ3OTc0QTQ4OEYwOTk5MDExREM3OEQyQzcyQgotOjEwQzI5MDAwM0JFN0ZDRjc2NkU2Q0UyNDgwMTRGREJFMDc4NjkzRkZERAotOjEwQzJBMDAwRkVGQkQ5Q0ZGOUZGNUYwMDgwNTNGOEIzMDI3RjYwMzQwMwotOjEwQzJCMDAwRkUzODI1M0Q4QzA0NjgwNEYxNjdCRkQxNkRCMjk1MDM0QgotOjEwQzJDMDAwQUMzNDA3OENBMEEzMkY0MUEzQUIxMDYwQUYwRTk2NzZDMQotOjEwQzJEMDAwMTQwMEE0MjRDM0ZDN0EwQjk2OERCMDc0MEI5NkU3NUQxMgotOjEwQzJFMDAwNjgwMzQ4MDU2OERBQkEyMDZFODE4NURBQkJFMzY2NjBDOAotOjEwQzJGMDAwRkI0NTE3RTJBRjM4Q0U1MjA1NkU1NEUwOTMwQUQ0OUI0QgotOjEwQzMwMDAwOUM4OTM0NEY5QTRERDIxRkNBQzc2Rjg1NTA3ODRBMDYxMAotOjEwQzMxMDAwRThCNzlBM0RCQTA0ODA0NDkzN0JBQzBEQzdFRDlCRkIxNAotOjEwQzMyMDAwNEU4MzU4ODdBRjg4RDYzMTZDQkQxRUVCRTMwMDMyNkM2QwotOjEwQzMzMDAwNTYxRTFGQ0E4MjE5NTQ1RTA5RUQ0NkM4NDZCOEY1Q0Y4RAotOjEwQzM0MDAwRkJBNDIyREE5N0M1MjcyMzg0NEU0MzVGMjA1RkVDRjlENAotOjEwQzM1MDAwNTQxNkZFNjMwNjNENTRFMDdBRTkwMzZFNjk5OUQ3NzA3RQotOjEwQzM2MDAwMjA2MDU2RUFGMTY3Mzk3NEVDNzA2NjIyREU1RUQ0N0U5NgotOjEwQzM3MDAwNkYwNEJGMThCRjQzRkI3RDE1RTI4REJFMzc3NTY5QkZFMwotOjEwQzM4MDAwMDM1NDVCMEY4RDQzMzAwMkNCQjhERkQ5MTJGRTVFODVCQwotOjEwQzM5MDAwRkYwRDhGODc0OTY3QzBDM0E0QTFGMDEwQjUxRkYwMUEyNQotOjEwQzNBMDAwNDE4RURFRDcwQUNCNkVBNjczRTRCRUMwOURDQUZDRDExNwotOjEwQzNCMDAwMDg4MTIxRjdBN0YyNDVGNEZFREEwNUZFRjUwMkZGMjUxNAotOjEwQzNDMDAwMzZFNzc0NUE1RkRERkMzODkwNTMwMDhFNkQzNTc5NEQzOQotOjEwQzNEMDAwOTlEQ0ZGQTkzRDI5NDQxNzkzNzU4MzJEOUEzRTVCNUIzOQotOjEwQzNFMDAwNjc4M0RFMDBCMEFERDVDREQwRDdCQTE0RjQ3NjgwM0ZFOAotOjEwQzNGMDAwQjUzNjczRjlBREQ2MTYyRUVGNjhGNTMwRENEOUJBOEVBNgotOjEwQzQwMDAwRTE1RjVBREJCOTdFNTdFQjQ2MkVCRkRCRUE2NUU4NkY4QQotOjEwQzQxMDAwN0Q5MUJGNUYzQjdGNjU4NkRCMTI0REZGRDVDOUNFNDU2MQotOjEwQzQyMDAwQzQ4RjlFN0JBQTEzOTkzRUI4Rjc1M0M4QUI5RTFBQzgxNwotOjEwQzQzMDAwNkZCNjQ0QzMwMTgzNjU5RDk0QzA2NThGMTFGN0UxRDk0MAotOjEwQzQ0MDAwMTZFMzZEQzM3REZENzM4Q0JCODlDNjE5QTgwOTdFQUQ0QgotOjEwQzQ1MDAwNDM3QzQzNEE4MEYxRDAzMEQyQkQ5QUJFNEI0NjFDM0E1MQotOjEwQzQ2MDAwODk2NkY1RTQxMkZFMEVFQjNDQkYwNzY0RDk1NjlCRDNGOAotOjEwQzQ3MDAwQTU0NzNFMzgxQThGNTUxNzAwREM4MjY1MEZDRUYzNzgzQQotOjEwQzQ4MDAwQUFBQjg1RkE0MTdFQzA0OEUzOUNBMjNGOTM3MTdDMDkyOAotOjEwQzQ5MDAwNjY3N0YwM0ExMEEyMUMwRUM0MDhFOEIxNDkyQzhGRDE3RgotOjEwQzRBMDAwNTBDOERENDBCQTlGRjk2MEUwRTkxMzE5QjY4MjMzQ0I3QQotOjEwQzRCMDAwQzU3MEY4QTg5M0FCMDM5RTMyQTQ2NzY1QUNDMzg0RDU1RQotOjEwQzRDMDAwN0QxMkY4QTQxMjg0NTM0NkQ2MDA4RUQzOTc2RUQ0MTNFRgotOjEwQzREMDAwOUMxNDQ0NTY1MEM3QzM5RkM5REYyMjYzODZGMUNCMTQxNgotOjEwQzRFMDAwNDhENDk0NkJDREEzMzVFREVCQUM5OTlBRkFCRUY0NUNDRAotOjEwQzRGMDAwMUVGRkQyQjQ4QjM0RURGQTQ2NTc5QUM1QkM1MzJGMjM5NgotOjEwQzUwMDAwRDg2NTc0NkY1QzgwNzQwOTU2OTkxQzlCQjBGRUJEOTgwOQotOjEwQzUxMDAwRjgyMjI4MDY5ODE2MUJCRjg5RTA3QjMxMTk1RTZBMzcxRQotOjEwQzUyMDAwRURDMEM5MTRDMDdENEU5MzdEMjM4QjEwNTU5N0RCQzY5QgotOjEwQzUzMDAwNkJDN0VEOTk1MzYzQzM3NjU3RTY1NzY5RDcyMUMxMjU3OQotOjEwQzU0MDAwQjRERkFCMUQ1MzM0REZBNzU3NUVBRUU5RUYzMkZCOTM4OAotOjEwQzU1MDAwMDhBREY1Q0U3QUNERjdDNjk2QUY0MTlGMEMzMEIxRTU2OAotOjEwQzU2MDAwMjRFODRCMDFDNkZCM0EzNEUzOTRFRUVDRDJCNDFGQkY4RgotOjEwQzU3MDAwMUI2NDEyRUI5MjdEOEUzNzA5OTYxRjc0Q0FDNDJBMTU2QwotOjEwQzU4MDAwODc5QkRGMjQ1OEY1QTUzRjgzRjYwMTRFQjA1OTUxOUY5NAotOjEwQzU5MDAwNEI4QURDODM0NzAyM0Q5NjI3MjlFNUNBQTBCNzJEODE0NwotOjEwQzVBMDAwRTg3MDEyRjJGNTQ4QkY4OTMwQzIyMTYzNjNBOUYyQkY3NwotOjEwQzVCMDAwNEUxMDFGNEM1MjIwMDAzMjA3RjZBQjE2NEI4MDc5M0FEMgotOjEwQzVDMDAwOEJENzk4NDU2QTA1RTUxQkY1QzEwNkM5OTFBNjQ3Mzg4MgotOjEwQzVEMDAwNDcwRTU0NTBGOTI4MDQ4QTA4Q0EzQTk3OUVGODZCMkFFNQotOjEwQzVFMDAwMzQ4RkE1QjIwOURDNjkwNDNGNDg3NEJGNEY3Q0RDMkY0RgotOjEwQzVGMDAwMDVEQUM0RTI4MkM5QzRDRjc1M0ZGRjY4REU2REFDMTdBRgotOjEwQzYwMDAwNjIxQzI2NUNERkVGQkFGRTkxNEE2QkZEQkIzRkY1OTFFMQotOjEwQzYxMDAwMzc2QzIxN0U2RkIyN0VDRDc4NTJDQjhEMkRDNzE5N0ZCRQotOjEwQzYyMDAwNkFCOTZGMkRDQzc3RTE5MkRCMEQ2ODlGMTAzNkZFQUZCMwotOjEwQzYzMDAwQ0M3NjBBRUREQTNBQTI1MzIzRkNDOUI4QkEyMEQ0MUU0QwotOjEwQzY0MDAwM0FCRTE4QzQ3NzMxRUFCRjdBNUFEMzA0QzJEN0RGNUQ0NQotOjEwQzY1MDAwNEU2QzU3NkYxMDcyMDg5RTQ1RjU0RTFDQTczRTQ2MjkzQQotOjEwQzY2MDAwODM0RkQ0QTcyQUVEQTFCMjlFQ0JFOTZBN0Q5NTY4NkY2RQotOjEwQzY3MDAwNTdDNzdCNThCNDFGQUQ5Njk1RjEyRTUyQ0JDREEyOUNENwotOjEwQzY4MDAwQTlDRUY3QTAyODE3QUFFNUZGNzA3MTM5NEVCNDNGNjExMwotOjEwQzY5MDAwOUI1NUVGMjkwOEU5RkY1M0FBREQxODBGRTNDOTZFQTBFNwotOjEwQzZBMDAwM0Q5MDMzQzkxRTQ4QkIxQTk4MUZBMkVEODVCNjVFQjFGNgotOjEwQzZCMDAwMTdGMzdGMjM3QjhDQzU0NDhGQ0I2M0RGMjFCOUVFOTBDQQotOjEwQzZDMDAwODBFNEJBRjE3NjgzRDM4QkYzN0Y5RUQ0NTFCNEM2MTI0MwotOjEwQzZEMDAwQzJERkU3QjcwODdDQkI2QUUzOUMzMkI2NUZGOTZBREU2QgotOjEwQzZFMDAwMjZFMjIzMzk2RUY3Qzg4NUY4REQzQTU2Qzc3QUE3NEU5OQotOjEwQzZGMDAwQjYzODgxRTg3QkFGRDBGQjZBRkY0OEQ4RDBGMjg2ODY5NwotOjEwQzcwMDAwOUU1MUY1QjJDNEYzQzE2Q0ZDQzFGOUZBRUYxQkY1RjQwQwotOjEwQzcxMDAwMDZDMjU5OEUzRjk3NzA5Mzk5MjlGNERDNDhENEFEOTVBMQotOjEwQzcyMDAwRjhGMzM2RUE1OTMzRDIzRDI1MUI5QzNBNkM5RkYyMUEzNgotOjEwQzczMDAwRUE2N0EyRjE0MUJGRDBDN0FGQzVGODI0MTQ5Qzk1OEYxQQotOjEwQzc0MDAwQkRDOUY2NkZBMThDNTI4RUY4N0IyRENGOUQ5Nzg5N0M0OQotOjEwQzc1MDAwN0EzNENFOUY0QjdDREJEMEIyOERENzc1OERERENBRTNBQQotOjEwQzc2MDAwODMzNTU4MTA4RUNGRTJDQzI4RkM5NzlFMDFGRkE1M0Y2MQotOjEwQzc3MDAwMjZGRTcxODIwM0E0Q0Y3NTI4NzRCNEJFRTU5NkI3NzhGRgotOjEwQzc4MDAwQkZDQjk1RUZBQzVGMzI0M0VEQjgyQzQ3OTc4RkM2MzlERQotOjEwQzc5MDAwMzIwODFGMEU4NTRFMDc3NEI2MEEwNTVGNTcxM0JFRkE5RQotOjEwQzdBMDAwMTdGQjczMTNCMUVDRjBGOTQ3QkFEOTNFRUMyQTk3ODgxRQotOjEwQzdCMDAwRUVDRDcxNDA3NDNGMkFGOThCRjYwRTQxRkY4RUQ2MEVGNgotOjEwQzdDMDAwQjZDQjVCNUFCQjE4QkU4NDczRDBCQTU1N0NERDEwOERENgotOjEwQzdEMDAwREZGOTY3QzBFRkZDMUYxM0JGQTNGNDAxQTMwM0ZCQUQ5OAotOjEwQzdFMDAwREEwNzNDNEU4NUZGODAxMUMyRjQ0QzJCRjEyNUUyMjc3RAotOjEwQzdGMDAwQTE0QkUyRkEzQUI5MjAyMUEwQTk4RjEzRkU1MjhFNzMwMQotOjEwQzgwMDAwM0NGMUU5Q0ExOUJCQUEzNzQ4MjE3OTk4MUMwQjFEMzFBNAotOjEwQzgxMDAwNDlDQ0Q3MEU4NUFGMURDNEQ3MkFGRjIyM0Y5NkVBMTExNwotOjEwQzgyMDAwQ0Y2RjlEQzQ3RTQzRTAzN0M0QkZDMEYzQTg3OEJBM0I0NgotOjEwQzgzMDAwMUFBRjFCODg4RUE3QzFBQkI2RkUwN0M2NkIyN0ZBQzcxNwotOjEwQzg0MDAwQTQzNzgyQUZDNDc4Mzc2NTQ2RTNGOTc3MEE1RTU1N0MzMgotOjEwQzg1MDAwNkY1M0U0N0YzODNDNkYyMzNDQTc5RTdGM0M2RkNCQjQ4MwotOjEwQzg2MDAwRjFCODkxRjgxRUNFM0U0NUQyNDc1REY3MTA3MjVBN0U2MAotOjEwQzg3MDAwMkU3MjNBMkREQkFBRjhERkU4NzcxNjQ2RDNGRDZEQTJCQgotOjEwQzg4MDAwQkI1OTQzRjc5RTMzQzg1M0NGOEYyOTRGOTE3ODhCODQ4MAotOjEwQzg5MDAwOEQxMkI4M0EyQ0QxREYzRkNCMUM1NkRGOUQxNzNDNEU5MgotOjEwQzhBMDAwMEFDRUQ2Rjg2NzkzQkY3NTZCRkNCMzI5MTg2MTY5RkQ5MgotOjEwQzhCMDAwRDg5QjM0RTUzQUVCQUQ5QUY2OTdBNkFERDVENDVGNkUyQQotOjEwQzhDMDAwNUJBRkE5QkYzMkZGMDE0REY5NkFDNzYzMTE3RUU2RDNBMgotOjEwQzhEMDAwOUFGQTdBRTc2RjM0RjU3MzlCQjc2QkVBRTdCN0Y0NjhCNwotOjEwQzhFMDAwRUExNzc4RkVBQTI5QUI3OERDREEwQTFDMkY2RDZCMzVDMwotOjEwQzhGMDAwMkJGMUQzNjUwQ0FCMDNGRTVBMTI4MzhCMEYwN0Q5REZFNAotOjEwQzkwMDAwQUNGNEI3RDdCMjRCQjJBRjgzRkREMTMyOUZBQjk2QzI3NgotOjEwQzkxMDAwQUE4QTlEQ0Q2RjEyRjRCNTVBOTU3ODJEOERFMTVCQUQ0NQotOjEwQzkyMDAwMzZENkVGM0I1QUYzMTlFRTZDNzUyOEYxNUEyNUMzNURFNAotOjEwQzkzMDAwQUQ0RTI1NEU3MzMxOENCNDBCQUY2NkJCQTc2NDIxM0Q2MQotOjEwQzk0MDAwQTZCREJDNDQwN0I4ODBFOTdGRjg2N0MxNUU1QUJDNzdEMgotOjEwQzk1MDAwQkM4RUUyREMzNUNBNUU4RTU3N0ZCM0ZGMzZFNEFGRTNCMAotOjEwQzk2MDAwQ0QyNjA3OTU3QkI3MUYzMUQ4MEFBM0Y5NjVFRUI3MzJGQwotOjEwQzk3MDAwMzhDM0Y4NkM2RUNCNUYwREU0NjdDRDQ1MEZCQTYzMDgyMgotOjEwQzk4MDAwMzk5RDlBQTU2MzdFMjBGNzAzNTAyRkNDMzY4MzIxMDU2RAotOjEwQzk5MDAwRjVDMUVDRDk5MkEzMERGOEJCMDc5MjE4RkFEQzU4M0YwOQotOjEwQzlBMDAwNEQwRjNFMTM5NkVCMkQ3QTlGMjk5RTk3RTYzMkEzM0ZCQgotOjEwQzlCMDAwM0Q0QjJDMTM0QzdBRjA1MDNEQTQyNDczOUM3RTBEN0Q4RQotOjEwQzlDMDAwQjRBMTNDMzg2NUI4MThCRkNGMjIzRjFDRkI1RDZGRTlBRQotOjEwQzlEMDAwMzA5MEREQkQ2RUU3MkZGQTZGQzM3QUI4RDM1M0NFRjEzNgotOjEwQzlFMDAwM0Q1QzYyMjVGRDJENzkzRUQ2OUQxQTM3QkNCQzIwMzVCNQotOjEwQzlGMDAwRTE1MDE4NUY0RjI1MTk0RUE1RjhEMUUxNzc1MkRDN0E0NgotOjEwQ0EwMDAwOTNDMUYxOUMyREJBREYwNUNBN0VBN0M5MTJGQjZGQzE4NQotOjEwQ0ExMDAwRDc0RERFNEQ1MjQ4M0U3MTdGM0I0REI4Q0YyNkUyMDFFNwotOjEwQ0EyMDAwREE2N0IzQzE5NzU3NDQ3RUY2NzZGNkIzOUIyQUQ3MTZEQQotOjEwQ0EzMDAwMTE5RDlBMkU5MTNFMzExNTg1RTI5REE2OTYyRkQ5OEY5NAotOjEwQ0E0MDAwOEZENENGOTFGMDRDRjE5MEMzNkY2NUZFREJERkJBOTNDQQotOjEwQ0E1MDAwRjk0NThEOEI3QTVCN0Q1QzJFMEJCODZBQzNFM0EzMzlGNQotOjEwQ0E2MDAwOTNGRjREQTZCOEE3RUE0QjExRkY0QzNDRTlEQ0ZCNTMwMgotOjEwQ0E3MDAwREM3N0EwRDVGRjJGRTUxN0Q0QkM4MjlBNjc4OENDNUIwMgotOjEwQ0E4MDAwQTg3QTY0REVBRDc1MDk2RURDRUY5QTJDNTEwNkYzOTQzQQotOjEwQ0E5MDAwNzRBNkEzNUU0MDU1REZERTlBMTU2NTk3RUZDODNBQkREMAotOjEwQ0FBMDAwN0VENkQ2RkZDMEZBRjk2Q0Y5QkYzMTRERDhENTQ4QkU1NQotOjEwQ0FCMDAwREYzN0UzMDUwM0FENTNFNUVGNDhGRTlGNDM3RDcwRkU4RQotOjEwQ0FDMDAwMzk0RDkyRDc4MzdBN0FGNjkyNzZDMzQ0RTlEQ0Y5N0RDMAotOjEwQ0FEMDAwQjlFNUEwODg4QjIzRURDMkY3QjYwNzM2QTY5QjVDMkI4MQotOjEwQ0FFMDAwNzM3QzYxOTI2RjcyNTAxRTQ0QTU0MzQ3MzRERDNBQ0Y4OAotOjEwQ0FGMDAwNDBCN0NFMUY5MzZFRDE3NkYxRTBCQzczQjM4QkEwRjEzQgotOjEwQ0IwMDAwQ0ZERkNCOEFGMjI3M0VDODNBQkQxRkE5QURGRjgxRjcyMAotOjEwQ0IxMDAwNkQxRDZCNjNCODcyNDRFRjNDNTkyN0VBNDU3QzYyMDE5NgotOjEwQ0IyMDAwMURGMkVGODA1N0U2Qjg3NDY5NjY3QjNDQzUzMzUwMTkzNwotOjEwQ0IzMDAwOEMyNzdEQjdBQzVCMDZGMjBGNDFFRkQ0OEY0NkZFNUNDRAotOjEwQ0I0MDAwQTJGMDY3MUZGODNFMjQ3RTVDMDVGNzdFNDEwOTk4MjUxOAotOjEwQ0I1MDAwRDU0QkFFMjIzREI3RjQwOTQzMDg0RkZDQUY5M0YzMjcwMgotOjEwQ0I2MDAwQUI5NDdFQ0IyRDlENDZEQUVGRjI2N0I1RURENDcxMUEwQQotOjEwQ0I3MDAwNUY4QUM4MUY1NzVGRkExOUIwRERGMDczREU2RjU1QTdFMwotOjEwQ0I4MDAwQjZERjc3NTk3MTI5ODc2MjU5MTY0QjA4RUY2N0QyQTcyQwotOjEwQ0I5MDAwNDdDOUFFMUJDMkNBMjc1QjM5QkYyMDNGRjNFMDAzOUVFMwotOjEwQ0JBMDAwQjEyMUZBQzQ2NDQ3RjE3MTVDRjZFOUY5NTg1QkZGMjNERgotOjEwQ0JCMDAwRjNCMTFDRjdBQzkxRThGOTdERjk3OEJGREQ5OTQ1RUI0RAotOjEwQ0JDMDAwNTZGNUYzQTBERTc5QzNDNDdBNjdBMERDMjZGMkE0Mzc1OQotOjEwQ0JEMDAwRkRBRTJEOUVGOEU0MDQzODg4MUQxNjJBRjlEMjg1NkEyOAotOjEwQ0JFMDAwQkU3NDlEMzY1RjNBQjlDRkM3NzlCOTQ5MDdCRDZENzEzQgotOjEwQ0JGMDAwNDhGNzg5QkQxRUNFREI1NUVENzZCNzU5QjBGQ0QzNUQ0NQotOjEwQ0MwMDAwNEU5OUZDQTNGMTZGQjk2NDVBQjdFQURGQThGRTRFNDgwQgotOjEwQ0MxMDAwOEZFNUIwQkVFM0JDNkJGNkQ5RUIzQkQ1MkVBQUY2MzA2MAotOjEwQ0MyMDAwRDIwRTU2MDZEQjZCQzlGRTRERjhCNkUzNEQ4MkU3MkJGQwotOjEwQ0MzMDAwQUYxRTY5RjdERThCMTM3QUUyQThDMTU3QkU5N0ZDOEM1MgotOjEwQ0M0MDAwRDc2MzFDQ0Y0MUY0RkFBRkNCMTY3RUM2NENDRjAyMDM5QwotOjEwQ0M1MDAwQ0IxRjA5MUZDQURCMEM0NTZFQUU0Rjc2NUY5NzRERjVCMwotOjEwQ0M2MDAwOEFCREQwOTk5RDA2QjJBMzc1NzJERjIzRDcxMjVGRjlGMgotOjEwQ0M3MDAwNjVDRTFCREU3Q0M3MDdCRkZGQjVFRENDRjk4NTI2RUI4MwotOjEwQ0M4MDAwNzFGNjNGODY4QjMzOUE3NEUwQTZGOEEyQTRENjU2NEE3MgotOjEwQ0M5MDAwN0UwQ0M1NkQ5NDQ3NTRGMzhBOTFFRDlGQjBEN0FDQzgxNAotOjEwQ0NBMDAwRTYzQzU3QjVERjQ5RUJEOTI4RDYzMzFDQkQ5QTVBQkVBRQotOjEwQ0NCMDAwRDBFNDMxODc5QkJGQTlCQkRDQkEzMDRDM0U1RUNBMTZCQwotOjEwQ0NDMDAwRjEyRUQyREI3QUM4MUNBMkY3RDlGMkM1RkZCN0Y4NjVGRQotOjEwQ0NEMDAwOUEwQzFFMDlFRDZDQTFFNDE1RkUyRjA4M0Y3ODBFRjhBMgotOjEwQ0NFMDAwMTlDRTgzMjA0MzM3NThGOTdDNkEyMTM4MTgyRTAyMTc1MQotOjEwQ0NGMDAwQzM3Q0JCREI0QjdDMzM2MDA4OEUyNEJFRUE3RkY1QkI3NAotOjEwQ0QwMDAwMDJFMjlCRkU4QjI3QjY1N0MxRjkzQjVGOEFGNEZGMDYxMAotOjEwQ0QxMDAwQzZEQjc4RkU4MTU3QkVEQjQzRkMzOTcwODdFMUFDRjQ5QgotOjEwQ0QyMDAwQzZFQTY0NjcyN0YxNTFFNDc5Q0JCQjUzNjQzRUQ3MDE2RgotOjEwQ0QzMDAwRkQ3QTk2OEI3QUFCRTgwMzk3QTQ3MjFCRUJEODRDRTY4RQotOjEwQ0Q0MDAwOEI5MERFMUNGNUI0QUEzNzE3NjBCRkMyNEY3NEFDRDcwNgotOjEwQ0Q1MDAwNjA5OUU0QjU2M0QzQUU4MDhFNDVBQzcwNzFBNjU3QTZEQQotOjEwQ0Q2MDAwNzJBN0E4MkY1Qzk5RTg5NUIwNUM1ODE1MjNFQTZGNEEyMgotOjEwQ0Q3MDAwRjQ0MjI2QzU0MzAxOTZDQkY5MDBBQzBGMTc4MEQwOEI0NwotOjEwQ0Q4MDAwMzc4MjkzRjc4OTkxNDE5Njg0RkQxNzZGMzU5NzcwM0VFRQotOjEwQ0Q5MDAwMTYwMjM5QTRGRjhCMjg4RTFBMjI0RUI3RTYwODc5MkY4NwotOjEwQ0RBMDAwQ0UxMkZBQkVCODQ2OUIxN0Y5MzA1QkM5MUJEQjZCNEE0MwotOjEwQ0RCMDAwNzIxMDU2RTczOEY3MTIxRDhCOTNGQzFCMUUyQUEzN0NCQQotOjEwQ0RDMDAwOTAwRTM2QTE3QzdENTY3NTJCOUY3N0FBRkQxQUVEMzUwNgotOjEwQ0REMDAwQkQ4NEJGQ0QxMjcwQkNFMkU5MzY3OTlGMTNFNzhDMjM4NgotOjEwQ0RFMDAwQzNDRkNERjJFREI1MDdBOEREMTE1QTdCRjlGMDc4QzVCOAotOjEwQ0RGMDAwN0UxQ0Y3NDdDQjk1ODdENzU3NENCMTFCRTdGQkYxNDMxOAotOjEwQ0UwMDAwMjVDRkNCRTVGRjc5RTZFQkZBM0IwQkY4NENDMTQzN0UyRgotOjEwQ0UxMDAwNzJBM0REN0Q5Q0Q3NkYwNEIwRDBGQTlGMTQ3MTE0NDBDQgotOjEwQ0UyMDAwNzMwNkU1NDc5NzNDNjVEMjkxOUZGMTExOUE2M0M4MDM1OQotOjEwQ0UzMDAwRjgxQkM2REQwNEZGMUJFMzY3ODI3RkM3Rjg5OUUwMjc3NAotOjEwQ0U0MDAwMTgzRjEzRkMwN0M2Q0YwNDE3N0YzQjFFODMyMjgwOEQzQgotOjEwQ0U1MDAwMzk0RTRCNEU3OUU4MUMzMDcyQkQ4NjFDODFDRkMxRjkyQQotOjEwQ0U2MDAwQkI4RDNDN0Y5REREQ0RGODFEQTRGN0VCRTBBNTczOTk0QwotOjEwQ0U3MDAwQ0Q4OUMxMEI5MjRFQzM2RjAzRERERkYwRjlFOTcwNzgwNQotOjEwQ0U4MDAwNTFDRjI1MjNFQkJGNTNFODVBRDRBOTY3RkI1RkQ0MTVENAotOjEwQ0U5MDAwODg2RjA4NkI3NzQxOEU5MUVCMEI1RjM5MTg0RkUzMUY1QQotOjEwQ0VBMDAwQjUwRUUyRDcyOUUxOTZBN0U5NDRGOTgyNjcyRDMzMDg0OAotOjEwQ0VCMDAwQkY3NTc2NjcwOUVEMUJFNTNDODNGNjUxRDRGNUMxODM1OAotOjEwQ0VDMDAwMTNDQjc4N0NBQjY0QTM3NTA0MUZFNUI4MjE2MjFGOTE3NgotOjEwQ0VEMDAwNzg1MEY3QjUzOUQxQkY4MUZBNkY3RTI1OEI3NjgyN0E4QgotOjEwQ0VFMDAwMDc4NERDMTAxRjQ5NDNFRDc3MkRGM0NGNzQ1M0IwQ0M4QQotOjEwQ0VGMDAwOEFFQjlEN0U0QTZFMUUwQUZGNzVGNjI5OENFNzc3NTRGMQotOjEwQ0YwMDAwN0U1M0NGQzcxNUZFNTJFOTc2QUVGMjFEMzkxRTkwNkJFNwotOjEwQ0YxMDAwODQ3RUU3NkFEMkE1MzZCMjRCMjdFM0M5MkZBQzU3RUUyMQotOjEwQ0YyMDAwMTk3NDc1RTZCQzQ3RkJGNEVDOTRDMTZFNjMzRUQ2QzgzOQotOjEwQ0YzMDAwREY2Mjg1NUY1NDU4RDg2RDc0MTFCRDM2NzcxRkNBNTlBQQotOjEwQ0Y0MDAwNjQ2MUZBRTQyQ0M2RjZCMzcyRUM5QUJDNjc2MUQ1ODlDOQotOjEwQ0Y1MDAwQzcxRjRBRTFGNjU2OUFFQTNBNzhCQUNFOEFFM0RGNjAwQQotOjEwQ0Y2MDAwREVGRTM2NkQ2OUFFRjU5M0JBNDQyQ0NGNEY5Mzc2MTA0MgotOjEwQ0Y3MDAwNUM2MENCOUM5QTY0QTNFNTdBNzlGRDM3RTY0RkQ5NDE5MgotOjEwQ0Y4MDAwMjI3NTk1QTM5RUZEQjkyOUE0NjRDMkVDNDNBRDM5OTZFMAotOjEwQ0Y5MDAwMEUxRjA3Q0I3NUQ2NjQ0REY5RDJCNDMxOUFGNjk3REJFNAotOjEwQ0ZBMDAwQjIzNUY1NTdFNjhGRDNENEFCRjM1RUU1MjhENUI0MkI3NQotOjEwQ0ZCMDAwNEUwQTY2NTE1Qzg3RkI2MEI5ODBFNzY0QUY1REEyN0Q3NQotOjEwQ0ZDMDAwRUZCRTYyMUM5NkE3M0QzRkNCNDE2RUNBNjZBNTdFREFENgotOjEwQ0ZEMDAwOTY1QTJGRDE2MzAwRjE2OTQ0ODdFQTcwRTVGQTQ3MUYzQQotOjEwQ0ZFMDAwQTJDMTIyRTI4NkM2RUU2Nzc2Mzg2REU3MTAzNzBDMTNEMQotOjEwQ0ZGMDAwMkZBQzAwNzE4RTNGNUNEQzEwMTkyRkEwRkU3QzkwRjRFQQotOjEwRDAwMDAwNjdGMUFCRDc1OERCNzBEQ0NENTUyNzJFQjBFMTNFRUY5MgotOjEwRDAxMDAwQ0NDMTM4ODJFQzhEMTI0NzBDQzczRjgzNzIyMkQ5MDRGMQotOjEwRDAyMDAwRkZGNEM4RjBEQzEwRkMwM0YwMEI4NTFGMDU5Q0Y2M0VGNgotOjEwRDAzMDAwRkEzMzA1REY1RkJGN0Q0QUZBOERGMzA3MUVDNUVGNTc1MAotOjEwRDA0MDAwNjA0NEJFQUZEOEU4Nzg2RjBERTVBN0RFOTE4MUNFRjlEOAotOjEwRDA1MDAwRTEyNEFFMDNFQjFCRTg3NzM5QzRGN0IwRThFOUJCNDYzRgotOjEwRDA2MDAwQTdGMDc3MEZCOUE2QUI5NEZDREYxRjczMTRCRkFBNzFBQQotOjEwRDA3MDAwRkI1REEzQ0I0MkY1NzBGMzI3OUFGNjcwQkI3NEI3QTY5RAotOjEwRDA4MDAwN0M2N0E2QjY3Q0VGOTRCQkMzRkIwRkU3OTczNTZDNUM1RgotOjEwRDA5MDAwNjA3NEEzOUMzNjNDMkMzOUJENDNFODhCQzFGNUE0MjhCMQotOjEwRDBBMDAwRkFBMTdCMDlFQkRCNDNEQjk3MTk2RDcxRDFFRDU3RTFGOQotOjEwRDBCMDAwNzg5NEI3NkMxOEM2REVBQTdBRUEzQTE5OUE4N0FBN0ZEQQotOjEwRDBDMDAwNDc5RENGNzE3RUU3RkIwODcxNEZGNkNERjM5QUIwQzM1MQotOjEwRDBEMDAwMUYyNUI4OERFMTdDQjIyRjQ3OUM3QkY0M0ZGNkMwMUQyNQotOjEwRDBFMDAwNUZEMzc5RUVFQjIyQkVFQTRGMTRGNkEzQThGMzMzOUQ4QgotOjEwRDBGMDAwMEU2MUYxMDhDMTVGNDVENjgwOEVFQ0QyQzBEMjU4MEZDOAotOjEwRDEwMDAwQTA5QzM1MkQ4QkYzRTg4QUM5OEYwODdFNjgxRTRGNUU4MAotOjEwRDExMDAwQzcyRDBGOUE5MUNFMUZFQjc0MUFCQjNDNDBDMTE2OTZENwotOjEwRDEyMDAwRkI5RUZERDk4QzNCRTlGNzAyNzEyRkU5N0NFREIzMkYxMwotOjEwRDEzMDAwMDc4NDdEQUQxMTdBNjMxRUYxOUY2MkI3MDA1NTU2RDMwNwotOjEwRDE0MDAwNUQzMDY4Qzc0OENGMTA1RUE4OUM2QkJGRjVGRDg3QzlFRQotOjEwRDE1MDAwQ0ZFRjExN0E4M0YyMEEzN0IwNUZFMEI0NjhGMzBEMURBOAotOjEwRDE2MDAwMkNFN0Y4QkIyREZDM0VENzU5RUI4RkI3REE4RDk2RjM0MQotOjEwRDE3MDAwQTg0NzQ2RDhCNTc5ODcyMUY0QzVGQjU3MjIzRDlCNUU2OQotOjEwRDE4MDAwOTdGOTVFRDBCMUFERjYwNDA4RDMxRjkxNzg2Q0RBMjgxOAotOjEwRDE5MDAwQjM5Q0FCRTVBMzVCRTVDQkJDNkMwRjgzMTlGNTg1RDFFNAotOjEwRDFBMDAwRjgwNkE3ODNFNTdGQjU1NUNDQjc3QUQyMzczM0M4NEU5QQotOjEwRDFCMDAwQUZFRUQ2OEI0QjJGQzNDREIzNEUwNjVCRDgzQzlCQjc5RgotOjEwRDFDMDAwOTk5NjkyNUQ1M0Q3M0Y2MDU1RjQ0OUY3NTc0OTUzMEFGMgotOjEwRDFEMDAwMDQ1QzNCODQ3RDQ1QkZDMDkwNDI3RTQxQkRDNEYxRUMwMAotOjEwRDFFMDAwOUVFRTUxMzU4NEE3M0QxMkY4NkMyNTNDQzQzNTY2NUMzMwotOjEwRDFGMDAwREY0QzMxMUM3REI3NTA1RTE0RDJGMkY5OUVBNTFBRDdEMAotOjEwRDIwMDAwQUFGMUVDQUNFRTU5NzZGMjYzM0ZFQzVDQjgwNzI5MDc2MwotOjEwRDIxMDAwOTNFQ0Q5Q0M0RkQ3ODI4N0ZERUUzRDg5QUU3NENBOTM4QgotOjEwRDIyMDAwNEM1M0VFM0ZFQzQ5MENGNjkxQkZCRDY3NTJBQzQ0Rjc0RQotOjEwRDIzMDAwMTk3MEZDM0I2OTdDNzU1RjdCMENBRUY0NjZERTk3OTJERgotOjEwRDI0MDAwMkY3NUZFNDQzRTE1N0JGNjcxQTJBQTY3RUJFNERCQTdCRgotOjEwRDI1MDAwNUM0OUU3Rjc3M0MwNEFGMUVDNzQ1OUY4RDVGMDQ3MjFGRgotOjEwRDI2MDAwQ0ZBQTVFNkQ5MkZDNDk2Q0FBRUQzM0E2REIxMTRGQTNFOQotOjEwRDI3MDAwNUE3RUE5RTQ3RERCMzVGNzAwQ0ZENkFGMUU4Q0EzNUZDNQotOjEwRDI4MDAwOTQ5ODdGNTYzOTQ0QkNCMUFBRkFGMzQ3QUVDNUY5NTcxMgotOjEwRDI5MDAwNjFCQzRGRkVEREMyQUVFREZCMDg3RjkxRjFGRDYwN0MwRAotOjEwRDJBMDAwRjUyRkU2N0JBM0UzMzNENzMyREFERkNENzcxQ0RGNzNDQwotOjEwRDJCMDAwMkQ0NEM3Njk4MzcxODFFQTVGM0UxN0NCRTdENkE4NTgzMgotOjEwRDJDMDAwODU3QzI4RkM3QTY0NUJFRURFMzU1ODdGRTQyRjA2NjZBOQotOjEwRDJEMDAwRDczNzI3RkRFQUU4QUQ1OEJFRjlCOTU4QzZGMzkxMjQwRgotOjEwRDJFMDAwRjA5MDFEMzlCMjI5Q0ZFQkMxMDY0Qjc0QzE1RUIyNkYwRAotOjEwRDJGMDAwQjAyNThFQ0Y2OTNFN0IzMkVGQjcyRjUxN0VGMkI3NzZFNQotOjEwRDMwMDAwRjY0MzQ4N0U2Q0U4QzI3QzQ2Rjc4RkU4RkJDQkEzQjlCNgotOjEwRDMxMDAwMUZCOEM1QkMwRDhBNUNDQTJGMTRERTVGNERGNTJGMjRFMwotOjEwRDMyMDAwNzM3RTQyQTVERkUxMjc2MzlDMTRBQzdEMDVCRTIyMkJGMgotOjEwRDMzMDAwQjJERUU3OTJFNzEwREQ1QjVDQTE3QjY5QkY4NDdDRjkxQwotOjEwRDM0MDAwRDUwOEY3MDZEQUY3RjJDN0ZGRjNDMzg5Qjg5RkRBMTdGMwotOjEwRDM1MDAwQUVGRTU1MTVBRTZGRDkwN0E5NDBFMzg0RTgzQUI0REZCNQotOjEwRDM2MDAwNzA2QzZCQjY5MDdGMDUzRjJCNUU4Q0YxMUUwQ0QzMjc0MwotOjEwRDM3MDAwMkIzQjEyMzVFNUE2QUVEMURFODM2MTdBNjhGMDlFNzI1MgotOjEwRDM4MDAwQTNDNEU3MDQ4RDhBNUNFRDM3QkFEQkVEOTREN0E1RkIyNwotOjEwRDM5MDAwQTk0QzNGNzExRkI1ODRDRUFCMDhGRkY3OTkxOEZGOTFEOAotOjEwRDNBMDAwN0NGNkEyNUQzOTY3NTZGMzNDQzk2MDRFMjNCOTc1MEIxNAotOjEwRDNCMDAwRkMwRERDOTdCNzg5RTIzMTlGM0Q0OUYxM0I4MkI5MzNERgotOjEwRDNDMDAwMEFDM0Y5QjM3N0Q1MUI5Q0U3MzE4OTdCOEYzMTQzOUYyMwotOjEwRDNEMDAwRUI3N0RBMTNCOTdEODNGOTRCNEQ5RTY5NTVDQjA5NEQzNwotOjEwRDNFMDAwRkU2NzU1MDFCMDFGNTBEMjY2MkJCRDg5Q0U4NzE0QkE5NwotOjEwRDNGMDAwREM5RkVFN0E4REYxREVGMUMwQUJCQjE4OUY0RkRDRjIwMwotOjEwRDQwMDAwMzFDREJCRDNDMkY0ODM1RDRBM0MxNjExNkYzNTk4QkY1MgotOjEwRDQxMDAwNTBFNEVGNjk4RDdGN0VFOEIxQkQ0NTk0RkYzOEY0Q0FEMgotOjEwRDQyMDAwQjgyMkNBRDMyRTk0RkQ4NzdFOURDOUY3OUNGNkRGODY2RAotOjEwRDQzMDAwNzBDQkNFRjczOTJGMUVCOURFQTg3QjBDOTJEMDQzOEQ2RQotOjEwRDQ0MDAwQjQ4RjY0QkFGRkUzN0FDN0NFNzIyRUY0QzM4MTBEODUyMAotOjEwRDQ1MDAwOEMzRjM1MUYzRDcwNjRFODc4NTA1REE3M0FCRUJBM0VGOAotOjEwRDQ2MDAwNzU3Q0I1RERERkVDMjI1RkQwNkZGNDE3OTFGRDVGNDE3NQotOjEwRDQ3MDAwRTczMDYxRkJFQThGRjcxNzI1NUFFOEJCNTVGODEzNDlFNwotOjEwRDQ4MDAwNTgwRUUzQjc3RkY1QkMyQUYyN0M2QUYwNUM1NkM5NDdCOAotOjEwRDQ5MDAwRUREM0FERkQ5OTExRjlBRkFGRTMyMTgzM0I1Q0VGN0U5NgotOjEwRDRBMDAwQ0Y3MzJBNzVCREVBRkREQTdFQUI4NUZEOUI5Mzc2MjVBOQotOjEwRDRCMDAwMUY5RjBFRTlENDBFRUIxRDNFRjJCRkI3OTgxQ0U0QzdDOAotOjEwRDRDMDAwMjc5QTVDOTA4QkY4NjkzNEZBRjhGRTlBREEyRkQxRTQ0NwotOjEwRDREMDAwRTZFRjkxNzlGOTgxNDQyM0QwQkRFNTgxNTRFNUZDRjc2RAotOjEwRDRFMDAwMkI2MEJENDI3MUU4MTY5Q0I3QUM1NkQ3QkNDNTEyRDJCMgotOjEwRDRGMDAwODdBQUZFMkMxQjg3REYwQkU4MUVBOTNFRTQyNzIwREY0RQotOjEwRDUwMDAwOTQxNTZCREI4N0Y2QTMyREZGN0JBRUEwNjM1OUIyNkUzQgotOjEwRDUxMDAwQzgzOEI5MjQ1N0M4NjUxQjc0Qzg0MjlFODUxRDlEQTg4QwotOjEwRDUyMDAwRTAxRDBEQkYxQ0VFRDdBQzUyRjRGQzQwQkNEOTQzMDc0NAotOjEwRDUzMDAwQkIxM0I3OEE3QkFCMTNGNUJFRUQwNDUxMEI0MDRCMTIwNgotOjEwRDU0MDAwNUQ5OUY0ODlGMUJBQjRGQTlDNkNDODFDQjZDQkUzRDhFNwotOjEwRDU1MDAwMkU0RjUwQzg3REI3RDRDQ0Y3NUI0M0Y3NUNGRDMyQzE4QQotOjEwRDU2MDAwOEIyMUM4RDAwOTU2M0Q0MTI0MDNDMzRCQzBDNTcwMkE0NgotOjEwRDU3MDAwMzQzM0JDMENEQTE5NUUwMTFEMENBRjAyM0Y0M0Y4ODk0RAotOjEwRDU4MDAwQUYwREQ4MUVEQzZFNjVGRkU5RjIyNTNBQjJDQjY1RDc0OAotOjEwRDU5MDAwMEVFRDk3Q0Y1MkYwMzUzQzNFNTBDQjU3OUMzQjNFQTYwQwotOjEwRDVBMDAwMkFGNzcyODdDNUNCRDg3Q0U2N0IxNTJGMjZFMjRGRUM5NQotOjEwRDVCMDAwMTcwM0RFMzQ4MjkzMjBDMEUzNEMyNjQ2Q0VBNjc4RERFNgotOjEwRDVDMDAwQzZGNzdFNkJDMUM5RTVCQUIzQzQ0NzY1QzBBRDc3MTc2RQotOjEwRDVEMDAwMEM4MTk3REFBMUY5NjQ5RUMyMjcwM0I5QzBGODUxRTkxQQotOjEwRDVFMDAwRjU0OEFFOERDQjJBREQzMDUwNEMyMzdCMTA0RDRGQzgxMwotOjEwRDVGMDAwQTA3NTk2QzVENjFDQTdBNzIyQjczRjVGMzY1MzhGN0E3MgotOjEwRDYwMDAwQjRBQ0I0NjYwREE5OTA1RkU2NEUxNUU1ODkzNTJGRDMwRAotOjEwRDYxMDAwNTE3REZCRjM5NzhBNzI3MTREQTlDMTgxNUVFOERBQ0IyNwotOjEwRDYyMDAwNjY1RTgyRkFEOUFEREMyNzM3QTMxMUEwN0I2MzcyQjZBMAotOjEwRDYzMDAwMzgxNzc2MkJGN0NBNEQ3MkU2NUFCQTJGNjZCQTBENThDQwotOjEwRDY0MDAwREZCODYzMDBGQ0VDRDcyMkI3OTFCQ0I4NDUxQzdCQjNCNAotOjEwRDY1MDAwNTVEMEFGM0FENjdENEIyRUQ5MzNCMzJGREU4Njc0Qjg3MgotOjEwRDY2MDAwNzk2REREMjhCMjlCRjcxOEM1Rjg5RkE0REFDNkJEODE5NQotOjEwRDY3MDAwRjgzMjk5QzRCRDU2NzVCRjU4RUY4OUMxNzI0MEIyQUQzQQotOjEwRDY4MDAwNjlDOTBDQUQ0QjVEQzc1OUNDN0JEN0U5RTZDRDRGNzc2NwotOjEwRDY5MDAwNkYyMDNEMDIzNjA3QzcxNTYzMTRGQkJFNjVDQkM0MzQ0QgotOjEwRDZBMDAwRjQzMDcwMUQ1NjVFNDcyMDJFNzc0RDBCNTZERDkxRUVGRgotOjEwRDZCMDAwN0E4NEM2MUI4ODEzN0NGODA4RDEyOTc1NzhFOENCNzU2NQotOjEwRDZDMDAwM0U5NDNCQzRGNzgxQjVERkJDRUEyM0JERjQyOTJFMDRBOAotOjEwRDZEMDAwQzdGOTREQUVGQjcxNUE0NzkzMkU5MDUxOEFGNEZCNDUyMgotOjEwRDZFMDAwMkM3QTAwMDUyMUJFOTY5MDk4NzMxMDBGNkQ0RUYwMUE5QgotOjEwRDZGMDAwNTk1RTk0NzczNkNBRjk5OTJBMTcwMzhCNzEzQ0M0NEY0NwotOjEwRDcwMDAwOTlDQjU1OEJFRTIyNTRDQzZFN0U5MzYwQTVCQkJEMTY5MwotOjEwRDcxMDAwNkI2ODlFMTc2ODNENEQ3MkIwODFGOEU0NjhFMjA3QzZGOQotOjEwRDcyMDAwNEY1OTZFQzcwQUZFNTRGNDU5RjdCNjlFREJDNjg4QTI1RAotOjEwRDczMDAwMEJDMkU0QjI2OURCODlBRkZGODY3NDZGM0E2NjcxNTA0MQotOjEwRDc0MDAwRjM5MDNDM0VCNjQ2OUNFNzVBMzRGQTQ2OTVEMzA5NURDMQotOjEwRDc1MDAwMjYzRTM4OUNCOEY1QTJDNUQ0NkVEMjA3QkREOUE0Qjc3MQotOjEwRDc2MDAwMjdGNzA2REFDODdEMUVFOERFM0I0NkM4ODlFQUQ3N0Y4MAotOjEwRDc3MDAwMjM5RDhCN0RGOUNDOENGQzkxNDAxMEY5MjM1RTlDODMxQQotOjEwRDc4MDAwNzNGQ0Y0OEEzODA3NUZBREU0M0RBOUVDRTE3RDhCNzg0QQotOjEwRDc5MDAwNTQ4RDNCNTdGNkJDMkRERTg1NzlGMDZGMDVCRDJCMTJGRAotOjEwRDdBMDAwN0Y5NjNFNzFFMzU1QzQ2RjkxRUY4QkQ0NzhCNDQ5Njk4RAotOjEwRDdCMDAwQjdBMkQ3N0IzN0VEMjdGMkJENTExM0M1QTM0NUMzQkYzMQotOjEwRDdDMDAwMzc2QTdBQTI5NkUzRDFDOEY3NDZCREI5NEFGRTRBQjE5NAotOjEwRDdEMDAwOEZBMEY4QTE0Qjk0MzZCNDNGMEJDNzg3NDZBRjA5RjcyQgotOjEwRDdFMDAwQjZGQUM5MzUwRTJCOTVEMzJEMEVENkM3NTczRDBFRTE4RgotOjEwRDdGMDAwRURFMTg5NjRFNjE5NTU5RTk3QUQ5M0Q4QkY1NkYxNUE2RAotOjEwRDgwMDAwRkNCQ0M5NDlFQjI4N0U3RTE0RkJDREU4RUY4QjdCRTk5RAotOjEwRDgxMDAwNEEzRTkxREUxMkQwN0I4M0NEODlDMTJDQkE2N0JBQjk1QQotOjEwRDgyMDAwM0JERjQxRkVGODFGNUE5REYwMEY0MzY4N0Q2QTNDNTA3NAotOjEwRDgzMDAwMjdCRjU0NEJFRjg3OEUyREMyMzgwQjNGQURFRTc5QTYzNAotOjEwRDg0MDAwQ0Q4Q0U1RDVFQkU5NTUxMEE1ODRGMzEzQzhBRjJBREZERAotOjEwRDg1MDAwMjk4Mzk3QzYwMUVGNDNENTA4M0IxNTM5MzdBNUU5QzBBMQotOjEwRDg2MDAwMTY4NjhGMThEQjA4QjAwRDkxMEYzMDI5RjQ4QkNENEY0MQotOjEwRDg3MDAwRDJENEM3MzkyRUQwRjQ0RkE4Q0NEMkQ0QjdDNTg4RjdBQwotOjEwRDg4MDAwMzJFMDcxRkEwQjJBNDJFRjQ4MTI5RDNGRDFGNDgzMDAzNwotOjEwRDg5MDAwRkVBRDA4QkQxN0I5Mjc3RUVBNEU3RTRGRTI2RkUwM0MzMQotOjEwRDhBMDAwNDVGMjY1MjU5QUY2MjY3OUFCNENGQzVERkRBNTVFNDNGNQotOjEwRDhCMDAwQ0Y5RjUyQTYxQkYxNTZCOTFCRkQxQzlDNjc0MjlGQjYxOQotOjEwRDhDMDAwM0UyNkUwMDFFQTE3QjM1QkFGQzk0Qjk4NkNEQUYyODVFQwotOjEwRDhEMDAwNzk0QTlFNjIyQzhDRDVFNDI5MDZGMTJFRjhGRUQ4NjE5NwotOjEwRDhFMDAwMURGMzQ1MDVFNEZDQUFCQThDRjA2QzAwQUYyRDFBNkY0RAotOjEwRDhGMDAwQzc0MEY4NURDN0M2NUExQ0Y0OTY2QTQyQ0ZDQjMyQzlGRQotOjEwRDkwMDAwNDFBQTRCOEJGRjUxQjNCNUY4MUZFREQ2RTI3QkNDNTI0OQotOjEwRDkxMDAwMkRCRUQzOUJCNUY4QkVCMDQ1OEJENzRDOEYxNjZGRDlCMwotOjEwRDkyMDAwRUIyNjY4REFEQkRCNkIzNEU1QkM4RDU3NjhEQTVGRTQ0NQotOjEwRDkzMDAwOURBMTI5OEY3QkYxN0E0REZCQzI4RTg1OUFGQUUyQUVDQQotOjEwRDk0MDAwRTU5QTdBOTVDRjg2RTM4M0YxQkVENTExRkNBNjAzREQ3NwotOjEwRDk1MDAwNjlGOEEwNzRFN0NGMzVGM0ZENTBGNDlGOUZBN0U4MDU2MQotOjEwRDk2MDAwODVGRUQ3MkI3NkU1RERGOEMzRjc5MkI4NEU4QjE1N0E5NgotOjEwRDk3MDAwNzAzMERGNTA2REUwNzhFRTNENUI3MjZEMUNFOTA1QzVERgotOjEwRDk4MDAwREVCOTE0N0IwNzM5NEY4OUIyNTU5NDFEN0U3MUJGQTI1MQotOjEwRDk5MDAwNjQ5RkFCMzZERTQ2RjcyQ0M0RkQ4QThBQzNFREI1MDkxOQotOjEwRDlBMDAwRDQzRUUyMURENkY0NEE0OTczREUxREY5MkU2QkE2NjdGQwotOjEwRDlCMDAwQUQ5QzIwRDFCRDQ0NzEzRjMxRjIxRTg0RkEzRUFCREVGNgotOjEwRDlDMDAwMTlBMzM5MjcxRkVFQkQ5NjlBNUZDMjc4MDE4QzE0MkZEOAotOjEwRDlEMDAwRThDQ0ZDM0UzMURBMUY3MjZDOTREOTVGNzNCM0ZGRjY2QQotOjEwRDlFMDAwNjdDOUNENzlBNzZCQ0NGRTBDRTJFRkVDQjFFRUY1NzkwRgotOjEwRDlGMDAwODhCN0EzM0E4NzhERkQzREU1RkRENjAwNkQ4Q0RGMkZGRQotOjEwREEwMDAwRjVDQ0E0M0NFOTAwODZCQjk0RDdENERGQjM2MzI2QkQzNAotOjEwREExMDAwNUJDNEU1NUIwMzE1MjJBQ0E2M0Y4RkU2QjkxRkE0NzE3QQotOjEwREEyMDAwMEU0OEQ2QkI0QkIxRUZCQjEzM0VDRjIwN0I2NkEyNzMzMwotOjEwREEzMDAwRkUxMjNFRkY3RTM4MkZGQ0ZDN0IxNEVFMEZGNTZENDA4RQotOjEwREE0MDAwNjdGM0YwNzlFRUNGMjU4RTUzM0VBN0MxQUFDMkU0NzdFMwotOjEwREE1MDAwOUQ0MTc5NEYyQUUyQjZCOTBBQkVENEI4NkQ4RTMyRkYyNQotOjEwREE2MDAwMDExQzYyMjlFQUYzQjk1RDdGNjZCQ0FDNDhFQjUzRTI2NgotOjEwREE3MDAwQkQ2Njg3MTVDN0JGNzFBQ0E1ODRFRjdCMzk0QjFEMjJFRQotOjEwREE4MDAwREU1N0UzQjgzMUYyRjdCMUIzNjdCQTg3QjUyMkVEODg1NAotOjEwREE5MDAwMjY5RTg2OTc5Mjg3Q0M1NzQ2RTZDNTQyRkIxNkUzMUYyMwotOjEwREFBMDAwNTgxRkNCNzZFOEMwRkE3NENFM0Y4NkM2M0ZDQUY5ODVDOAotOjEwREFCMDAwQjlDRERBRkJEREYzNUIzRUQyRjBERjAyQ0YyNzlBRkE3NQotOjEwREFDMDAwNDA0QUQwMzAwNkY3MUY3ODc1RjRENDFCMTA3RkZEQUZBNQotOjEwREFEMDAwOTgyQTI4OUU0NUJBRjVFNDk1ODdDNjBGREM5Nzc3ODk4MgotOjEwREFFMDAwRjAxQkNFQjRDRkNGNzkxREJEQ0FGRDVBNzU5RkZCNUIyRAotOjEwREFGMDAwRjc3MTM5RDAxQTg4QjhFRkU0RDFDNEJGMkEzNEZFMDlDRgotOjEwREIwMDAwRjJDOThGMEU0QTIzMUM0M0U1NzM2NkU3OEIzOEE5NTc4OQotOjEwREIxMDAwNzk3N0RBQUJCQzNCRUQ1NURFODlGNjJBRUY0MjdCOTU4RgotOjEwREIyMDAwNzdBMUVBQkJERDVFMDk5Qzc0QkY2NDhFRTQ3QTZBODFFQQotOjEwREIzMDAwQzRFRjc2MEZEMTNFOUI5NjA3OEJFODVENjM1MzcxNjAwRgotOjEwREI0MDAwOUUyNEYzQkJERDIzRjQ3RDg4NzdCQjQ1OTI5NUY0Njk3MQotOjEwREI1MDAwRUEzNUY0NkVGN0YwMDhDRjUxQjJEOEQ5Rjk4OUQ3NTAyOQotOjEwREI2MDAwQkM3MEQ4MjhFNEEzRjRDNTZGNjZEMjdCQkRDNzUzREQ3MwotOjEwREI3MDAwQzc4OUJGM0Y5NTY0MUZGM0YzRUIxMjlGMkI4MzMzNjA3QwotOjEwREI4MDAwOUM3MTE2RUY3QUJGQ0IxM0U3MzQyN0YzQzRCOTg5MEEyNwotOjEwREI5MDAwNDdFNjBCQkQ1NjRBQjA5Q0U4NzI2RjJFQkZCQkRBNjhGMQotOjEwREJBMDAwRTI3NzU3Mzg5RjUzMTc3NjFGMjJGMjdENUNDOTFGNERDRAotOjEwREJCMDAwM0VEMjFGNkFERTI3MjE1RjlDMzdEM0JCMzk1QTY3Q0EyMgotOjEwREJDMDAwRkQyNkYxNkUyRUUwQ0ZBMDc3NzY3NDBGQ0E0NUYyQkQyOAotOjEwREJEMDAwMUI5Q0UyMUQ1RURFQTZGMEY3MzAwOUY5Q0EzREJENDU4QgotOjEwREJFMDAwQTA3OUE3QjdCMkU3QzA3RUQyMjdBRkU1Qjk5M0YzNTNDOAotOjEwREJGMDAwNDNFRkM3NTZDNjZGNjc3RkFGMjBERkM2RjNFMjdBNzk3RgotOjEwREMwMDAwRkZBODE3RUUyNEZBOUNDNzdDNjE1NjdFNzlGNEZGRDdGMwotOjEwREMxMDAwNjAzOEJDRjUyRkY2M0Y1QTkwMTk3QUY3MTZGNkRFQUQ0QwotOjEwREMyMDAwMjAzRjJDQUZBN0FFM0YzNENFRTlFNTQyQ0Q3QkE5RTUzRQotOjEwREMzMDAwNDM4RkREOTM0QjcyODY3NDExRjk0ODU5OUEzRjYzODg3QwotOjEwREM0MDAwRkVEM0YzMDVGREVGNEY3NzREQTBGOTk3Mzc4QkJDNjBGRQotOjEwREM1MDAwODg2RkRBNkZGOTk4RThEQzYzMTlGMjNFQkZEQTNGNzIzOQotOjEwREM2MDAwOUYyQkI3RjUzMDNFNzA5RkYzNjg3RjYxRkJCQzhDRjA1MwotOjEwREM3MDAwQTVFRUIzQkY3QkVGQTMwNUI2NzNERkRGRjc3RDc3NkU0RAotOjEwREM4MDAwMUE4MTcxNkREMjUwNzk3NkI0M0U2MTdFOTk0OUVEM0YyQgotOjEwREM5MDAwNTZBRkVEOEYwRTM5RTVCMUJCNDhERUQxNkZFOTU0RTJFNgotOjEwRENBMDAwMUVCMkNCQzQxN0FBNURFRTU0RTIyMDI5QjA4M0VEMDI2OAotOjEwRENCMDAwQ0Q0QjcyNzFCN0U0NjFGQkE4RTYzQkRBMjRCNDdGOTRFNAotOjEwRENDMDAwNTc3MEFGNjE3QjIxNUY2ODcxMTA1Rjc3MjJFRkY5NDk3MAotOjEwRENEMDAwMUVGNENFNThDRTczNDdDNEQ3M0Y4Qjc1REY0NDc4QkM1MwotOjEwRENFMDAwRjlBRjM1QTMyOEZFREVGMjk3MkI5NDM4NEVEOEFCNzJFRAotOjEwRENGMDAwODUzRkNCNjk3RURBNDc0MTAyRjM2RDk5QjJCRTBBNzM2NAotOjEwREQwMDAwMzNGQkM5NTVFMDkxNDU1RTQzQzk5M0FDREZDMUYxREZGOAotOjEwREQxMDAwRkYwMTFBMTRBRkFBRDA0MzAwMDAwMDAwMDAwMDAwMDA2OQotOjEwREQyMDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZGQjUxQ0ZDMEYwMDM3NAotOjEwREQzMDAwOEE3Mzk0MTgxODdBMzUxODE4MzY2QjMyMzA2ODY4MzEzRgotOjEwREQ0MDAwMzA4ODMxMjBFNDY4ODVBRjcxNTNBNjlGOUI5NTgxODEwRgotOjEwREQ1MDAwMTc4OEY5ODE1ODEwODhENzMzMzEzMDZDNjAyMjVFRkYwNAotOjEwREQ2MDAwMTE1MTA0RkI5RTIwMDNDMzUxMjA3RjE5OTBFRTE0NjZDRAotOjEwREQ3MDAwNjA1ODA1NjQxRjAzRTIyRjQwQkU4MDEwMDM4MzBDMTAxRgotOjEwREQ4MDAwRkYxNTYxNjAzMDA1RDJDMTQwNkMwM0M0Qzc0NUYxOUJFQgotOjEwREQ5MDAwN0Y4MjgwN0NCQzA4MkFCRjFCOEQ5RjI3OEM1RkZGMjU1QwotOjEwRERBMDAwMTFGQ0YyMEYwOEM4NjNDMzMyMTZFNEM3NDcyMjA1N0E5NAotOjEwRERCMDAwMDcwMjM3MjlBMkYyOEZDQTMzMzAzQzU0NjA2MEQwNTEzOQotOjEwRERDMDAwODJGMDlCOTFFNEVEODA2MkM3RTQyMUVDMjk5MkMwQjgxNwotOjEwREREMDAwMDdDQUI1Mjg2MjM3NzcyQTUwRkUwNDUwQ0U0Qjg5MzRFMwotOjEwRERFMDAwRjdEQ0QzNDFFNUFGMzQ4NEQwMDBCQzNFMTRFNEE4MDM5MwotOjEwRERGMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA3MQotOjEwREUwMDAwMDBGRkU1N0QwQjdDNTRDNUI5Rjg5QzNERTdFQzZFOTJCNAotOjEwREUxMDAwRERDRDI2MjEyMUJDQzIyNjAxNDQwREI4NDAwQ0EwNDExNQotOjEwREUyMDAwMzcwRjUyOTRBOEUxQTFBMjIyNkM3ODI0MjFFRjIyRjZBOAotOjEwREUzMDAwNjIxRkJGRERGMDg4QzQ1MjFCMUZDNUQ0OEI3NjUxQjA2MgotOjEwREU0MDAwRDE4QjM2NDBEMDU4MTc1QzlFNDU4QjZERTg0NUEwRDVFOAotOjEwREU1MDAwN0ExMzQwNUUwNkIyNDBBNUI2NDVGRENGRjdDRDlDRERGNgotOjEwREU2MDAwNzM0RTM2MjY2QUVGRkZGNkZFRkZEQjlGMURFNkNDQ0MzNQotOjEwREU3MDAwMzczM0RGN0NGM0JERTY5Qjg5NjRCRTkxRDg4NzEzRjIwQwotOjEwREU4MDAwMjVGQzZFMjVFNDUxODkxMDkyMTg0RTlCM0M5M0M2OUY0OQotOjEwREU5MDAwOTQwOUIxRUQ3RTI0RUEzQjk5ODQwQzlFNkI3MDQ2RDFDNwotOjEwREVBMDAwQTI1RjA4NjQ0RTRCMDYyMUM5NjU4RDc1NDZGQTNENzkxRgotOjEwREVCMDAwOTE3REJDRTgwOEMzMTk5ODdDRTRCQUJEMDk4NDBDNzI1MgotOjEwREVDMDAwRDNGNjY2ODJCRjJGRTk3RjNGQjczN0M2OTE3NEM4NzkxMgotOjEwREVEMDAwODVBMjMxRTFGQTRBOUFCQzQ4RkE3Qjg3QUFCRTlCMTQxNAotOjEwREVFMDAwNzVBNkRENDhGQkZCNTFGRDIwQjc4NTkwMUZDMzc4NDYyMgotOjEwREVGMDAwNDJBOUNCNDBCMkU4Qjg3ODVENkYyRUZEM0YzQTBFQUYzNQotOjEwREYwMDAwQ0RFODVCMjkxMDIyMUExQ0IxNDQyNDI0MjYyMzQ4QTAwMgotOjEwREYxMDAwOURCRTlGNjczQ0VERDc0OTA4QTczNkFBQzg0QUU3NDk4NgotOjEwREYyMDAwQzhCNDk2MDhGNTcyODk4MDc4ODhDRDc2MjU3QkU5NzgyMwotOjEwREYzMDAwNTc3RDJFRTJCQzU3MEQyMkE0OURENjI3OTJEMzRFNjg2MgotOjEwREY0MDAwM0E5NUM0NjFCREM3MkQyMzA2NDI3RUQ1QUUzRjEyMDc2OAotOjEwREY1MDAwODUxQjlCMTkyNDVFMTVEQzA2MEYyMTBFMTNDNUFGQzc2OAotOjEwREY2MDAwOENFOTJBOEY5REE3QzlDNDcxMEQyMUFCM0QwRTRDNTc3QQotOjEwREY3MDAwNzk0NjYzRkFEOEQwMjdEQjczMDZEMEY5MEMzMkQ4RTk5QQotOjEwREY4MDAwNDg0ODgzNjNBNkREOTExMTg2MjdDNzJEMzBFNzM4MDlGRAotOjEwREY5MDAwQzkyNjI5QUVDNDU0NUEyRkQxNDBDODREODREQzQyRjM1RgotOjEwREZBMDAwNzUyMzA4MTk0OUVDODQ1MEZDM0Q5M0JDMkNDQTlEMDE5MwotOjEwREZCMDAwNzkwN0U2NDUwMzcxQzM3QzYzMzIwMzJFOTFFMjJEQzZENwotOjEwREZDMDAwNjlDRjk1MUNFMUVGRjgxQjgwREY1Rjc4MkMxNUQ2QzE3NwotOjEwREZEMDAwN0QxQkNDRUYxOUUyRUNGMDAyOUVERDQ2RTcyNjVBN0Y2RQotOjEwREZFMDAwQTVFQzRDNUU0QUUxOEE0NkRBMkU4M0FEQkI5NDEwMUU0NgotOjEwREZGMDAwREY0Q0MwMUZFRDhGQ0NDOUQ1QUNENzMwMTg0NzIyQjQ0OQotOjEwRTAwMDAwNzNEQzA1RUI2NDcxQjI3NTVBMDk3NDE1NjExREU2RjI5MwotOjEwRTAxMDAwNzU1ODY1NzdEOTE5RkQzODQ5MjRGQTExRUQ1QUZBQjFDNgotOjEwRTAyMDAwNjQ2OEU5OEY3RUIxOUZCQTlFRTc2OUJGNEQ0MkVEM0JDMAotOjEwRTAzMDAwNTNFOTNDQkQ0QjBDQ0U0REY0REI2MEExNTEwMEY4MEExNgotOjEwRTA0MDAwQkMyNUM0ODBGRDJBRjk0MTY1NTJBMDYzQjQxQTlFMTcwRAotOjEwRTA1MDAwQ0JFOUY3RjYwRTczQ0ZFRjJEMDZFMjUyRTg3MjUzMkFBMgotOjEwRTA2MDAwN0M3N0M0Q0VBMEUzMjY2NjQ3RUM0QzZCQ0ZGMTg3RTkwMgotOjEwRTA3MDAwMjREOTI1Qzk0MEVGMEU0QzFCMDQ0N0FDMDBFMzdDNDc3NAotOjEwRTA4MDAwMjQ5QjA0OUM3RjcyQTRGNkZGRDNFRDA4RjFFMTdBMzc1QwotOjEwRTA5MDAwRjA3NTU0REE1MTNDMjAzRDc5MUY4QjQ2M0M4ODUwMzQ1MgotOjEwRTBBMDAwMzkwQ0U3MTcxQ0NGMTdBRDQ1NEY0MzRBNDhFMzY4NTg3MgotOjEwRTBCMDAwNUY5QTVGODdGNDYzQTY3OTJCRTY5QkIwREMxRUNBM0ZBQwotOjEwRTBDMDAwOEJFNUM5QUMzRTVENUVCQTE4QkRFMzU1NTkxN0RBNkVGMwotOjEwRTBEMDAwMDNDMjkxNDI3MDVFNDQzODk2NTBCRjlCMzAzRjIwOTRGQgotOjEwRTBFMDAwRkYyNUQ2MUZDQUVBRjdCNzFGMjVFRENFMEQ5RUMyRjk1MAotOjEwRTBGMDAwQkYyRTNCMDA5RkMyREJENkMwQUQ5NDJFMEU2RTEwN0NBRgotOjEwRTEwMDAwMjY5QTBGRUM4QzQxRkU3NTdFRkQwQzlGODlFMjY3RDc0NQotOjEwRTExMDAwMzg5MzBCRUE5RkRGOTg4M0Y5QkNFREVGREIyNDVBNUU1RQotOjEwRTEyMDAwQjU1RDk0MjA2RkQ4NzlENkQ2NDFGMTVCNjM2QTdGRkNFOAotOjEwRTEzMDAwNjZGQTNEQjg1RDI0MkY2MDc3RDM3MTlGOURFMkI0NDhBNQotOjEwRTE0MDAwM0U2M0Y5OTIyODk2QUREQUIwNkIxRUMwMkQ2QjMzOTEwOQotOjEwRTE1MDAwMjgwQUE3RUFDREQyM0I2RkE2RjlEMjAzMzI4MTJBNTUwRAotOjEwRTE2MDAwOUJFQThDODM2OTdFODk0RjY4ODFGQzhBOUQxRjYwM0Y5MgotOjEwRTE3MDAwRERCOUE0MENGNkY3MzlFMDVCOTQyRjc1REJEQTkzRUU4QQotOjEwRTE4MDAwQTZERkNCN0Q1QjBBQTA3RUY5NjZDMTA5NEI1Q0JFN0UzMwotOjEwRTE5MDAwRDc4NzAwQkZCQzU1MUUyMTUyRjgxNUNEMzFDNEExREE3NgotOjEwRTFBMDAwMkY3OURCMTdERjA5RTNBRDdBNDcyNjk0RUQ5MUIyQUIwNwotOjEwRTFCMDAwMEYxOTkxMThBNDQ2MjNFMEI1NkFEMzEzNDZFMDlCRTdGNAotOjEwRTFDMDAwM0MwN0IwMUYwNTlGNTUyRkQzN0U2OEJCRUFENzA0MjdCNQotOjEwRTFEMDAwNENBRERBQzBGOENEODUzN0EzRTZCQzY4ODE3OUQ1MTk5NgotOjEwRTFFMDAwNDc0MUZCMzcxRjM1NDJCRDUyNUZGMUVCNTEwRTE4REYzRgotOjEwRTFGMDAwMDY2MzAxOEM3M0ZEMDY2Mzg5OEE2RjU2MzRGRjU2MzNCQwotOjEwRTIwMDAwQUU1MzRERTkwM0REMTlCREFGRTczOUNFQjc5NTdDMzk4MwotOjEwRTIxMDAwMTU0MDQ4REY5MkNGMzg0M0M1ODc5RTMzQzQyMUZENTc1MAotOjEwRTIyMDAwMzQ4QkM0MTE4MTFGNzhERkU3RkI2MDg3OTVGMTAzQkU1MwotOjEwRTIzMDAwNUU0QkVEQzAxQUMyRUI3NUM5Q0VENzRGMEE2NkNEODhDQQotOjEwRTI0MDAwQzBFNzFFRTdGMkEzOTFDQjhGMjc0MTdFRDBGNDY5MkU2MQotOjEwRTI1MDAwM0ZENjcxRjlEMUU0NzFFMkY3NjczRDkzMzA1REVGNzExQwotOjEwRTI2MDAwNjFGQUJDNjcxQUE2M0U0RjExRDY3QkMxMzMwN0QzOEQyNgotOjEwRTI3MDAwMUUzNzdFN0ZDOTUzODY2OUIzQTcxNkJGQkZFMjU5OEU4QQotOjEwRTI4MDAwRTk2NjhGMTdCRkJGRTY1OTgzNjk4QkE3MTFEM0FEOUU4RgotOjEwRTI5MDAwMjY0QzVCM0QzRUFDRjdCQUE3MTlEMzM2NEYwQjdFRkYzOQotOjEwRTJBMDAwQjVBNzBENTNCRjI3ODBFOTRFNTg1RjlBMDYzQ0VEOThGRAotOjEwRTJCMDAwRUVGNjFDQzM3NEFGQTcwM0RCRURGNzlDQzE3NDJEQzc0QQotOjEwRTJDMDAwQkIyRDlCRTQ0ODE0NkYzNjE3NDEzOTE4NUZFOENBOTE5QgotOjEwRTJEMDAwNjkzRUJFODhFNTkzRTY3QTczOEMzNDlGRTRBNjc5OEExQQotOjEwRTJFMDAwQzdDMTk1ODExQzEzQ0QwRkFFNjVFNTI5M0YyNEI5NjZFMgotOjEwRTJGMDAwOUE0RkYxQjJGMkI0QjVBRURDMjg5QTRGNkI2NEU1QTM0NQotOjEwRTMwMDAwRDY3QjczQTM2OTdFOTQ4Rjk1NUZCNzM5OTAxQjQzRjNENwotOjEwRTMxMDAwRDdCNUIwRjJCMTdFOTI2N0ExRjlCMTAxOTYxRjdGRDA1NwotOjEwRTMyMDAwOTU2N0E1RjlGMUVEMkM5RkY1QTEzN0NGNDZGMzU5MUQ1RgotOjEwRTMzMDAwQUNGRDRENUQ4MUJDNTg5QUJGMjlDOENBNkZCOTRBRjI3RAotOjEwRTM0MDAwRUQwMzQwMkUwQjk4Q0ZCNUU0RTRDN0QxN0NBRTlERTUzQwotOjEwRTM1MDAwMEI4NjE2NEI4RTA4RjRCNzUzRUU1ODA4MjI3Qzg2QjAxNQotOjEwRTM2MDAwRDEyNTUxN0VCM0QzRDhGMTEwMTU3RDY0QTFGMEFBNEIwRAotOjEwRTM3MDAwQTJGQzMzMjA5MzQ1NTBGRUIwRjAzQTk2MDc4QzY0MTkwNgotOjEwRTM4MDAwOTQzRjJBQkM4REU1QkI2NTA3OTZGRjVDMzhDMEYyNDYxQQotOjEwRTM5MDAwMDc5NkZGODc3MDA4RjM3QjY1MTc5NkVGMTBGRUM0RjJBRgotOjEwRTNBMDAwNDYxNzk2RkY1RTM4ODFGOUZEQjIxQkNCM0I4NTJFOTY1MgotOjEwRTNCMDAwMzdCQUIxRkM0OUU5NTM1NzNFRUQyRkRGRTA5RTJFREMyMgotOjEwRTNDMDAwMDg3MkRCNUQ4NjcyNTk2QTQ5MDY3RTU5Q0ZGOUZGMDRFRgotOjEwRTNEMDAwNDAwNjJEQUYxRjY0NDQzOUI4RjNGM0FDMTc0NTgxRDMyMQotOjEwRTNFMDAwRjYwMEM4OTdCQzA0RkEwNTg1MzM1QjQ4MDQ3RDgyQzJGOQotOjEwRTNGMDAwMTFGQjg2NzNDQjE3OTMzNDcwNkVGOUEyNEM4MUYzMjAxNgotOjEwRTQwMDAwQzI4OUVBMUY5QzlENUZEQ0E0MURDRjE3RTUwQTlDMTIwMAotOjEwRTQxMDAwOUM5N0I1N0ZGM0JBRTVDQjZDRUQ3OEJFQUM1NEUwRDRGNQotOjEwRTQyMDAwMjA5Q0I4RkU4RDI3MjA0RkQ0QzAwOUM4QTUwQTlDRTVDMgotOjEwRTQzMDAwMDgyN0IxN0ZFMzcxMTkyNzZCRTBCODhDNEIxNDM4NzU0RQotOjEwRTQ0MDAwMDg2NzUwRkZFMDA0OEMzNzZCQzc2M0FDNTBFMDNDODYzNAotOjEwRTQ1MDAwNzgxRUQ2QkY3OUI5NEM1M0I0RTMzMTU1Mjk3MDlFQzJBQQotOjEwRTQ2MDAwRjFBNEY2MEZDRTZFQUIxNjNGQkJBRDIxRkNBQzQ3MzgyNgotOjEwRTQ3MDAwMjNGQjM3QUY1QzlCMTYzRkI5QjYxMDdFMzYyMTlDNkJGMQotOjEwRTQ4MDAwRkIwNzY3Qjc0RDhCOUZEREI2MTA3RTVFNDNGQzhDRTlDMgotOjEwRTQ5MDAwREZCQzcyNjNCNUY4Qzk4RDBERTFFNzBEMUNDRkI4RkU4NgotOjEwRTRBMDAwOEQ2NzZGQTIxNjNGN0IxMzQzRjgwOTIwOUMxQkZCMzczNwotOjEwRTRCMDAwOUVGQzI0MkQ3RUYyOTM0MkY4NzkwN0UxNENFRTFGOUNERQotOjEwRTRDMDAwQkQ0OTVBRkNFQzREMEFFMUU3MEYwODY3NEFGRkU2OTVBMwotOjEwRTREMDAwM0Y1MDhCOUZGQzgxMjFGQzdDODA3MDcyRENDRDRDQTk2RAotOjEwRTRFMDAwQTQ3MEFDQkRDM0Q5M0Y0QzhCOUZGREMzNDJGODM5ODlBMgotOjEwRTRGMDAwNzBBNjUyMzhFOTdEQzMyOTQ4RDFFMkE3MjAyNTg0OUYyMAotOjEwRTUwMDAwRjMwOEU3QjZGRUMxRDk5RkEyQzVDRkZFOTQxMDdFQUUzOAotOjEwRTUxMDAwMjA5QzNCRkEzN0FGODJFMTVBRkMxNDBDNjdGOEI5NTVERQotOjEwRTUyMDAwMUE4NzcyODZDQTRFMjdEOEU3REYxOTlBRTMxMjMyQzFEQQotOjEwRTUzMDAwNEU2Mjc5RDFFRTI0QTBGNzg4OEEzRTQzREE1RDIyQUQ5RgotOjEwRTU0MDAwNkZEOTFDMzdGRTMxQTJENjZCNzI4RDA2NEFDRjU2QUEwMAotOjEwRTU1MDAwRTVBOUY1OUFEODQ5RDExQTNEMkFDRTE1QUZDOTI3NEM1RAotOjEwRTU2MDAwMUJBQ0E5OUY1ODk0QTYyOTFGMzhFNzNBNERGOTIwRjcwQwotOjEwRTU3MDAwNzg0RDdFNDhEOTREOUFGQUMzNkE3MzM1RjlFMUNCNkY2RAotOjEwRTU4MDAwRDdENDRGRjVDRUQ0RTREM0Q3RENBRkE5M0ZCMjcxODE1NQotOjEwRTU5MDAwQTZGQzlBQTY3MjRERjlCNUJFQTU5QUZDRjVDRERGRDdCQgotOjEwRTVBMDAwRDQxRkQzQjI0MjUzN0U0M0RCNjM5QUYyNzE4MTI3MzU4NQotOjEwRTVCMDAwRjkwOTA3OUVENUQ0QkZCMUZEMDU0REY5QzQ2M0FGNjgxNQotOjEwRTVDMDAwQ0EyNzc3NkNENUU0NkYzRUYzNkI0REZEMjlDMUREOUEwOAotOjEwRTVEMDAwRkNBRDlGQkRBQkE5OUY0M0ZFNTNBQjZGOUIzRkQwRDQxNwotOjEwRTVFMDAwOUY2QTNGQTEyOUZGNEVGMjI3M0EzRDU1NkIxRkFGQ0NFMgotOjEwRTVGMDAwMjFDQ0FGMzI4OEQ5QUYwMUFCMTFGM0M2QzExNjY2QTdFMwotOjEwRTYwMDAwNTg0QjFDMjcyOUZEMTg3NzJGNzQwQ0EwRjQwMzM0MDNGMgotOjEwRTYxMDAwNzY1MUNFRTBCMjZCM0FFOEY3RUZEREU0QkVDNjRFQkYwRQotOjEwRTYyMDAwN0ZDRkU4QkVDMTFFNDFCRkExRjQyNjkwNjQ0ODFEMDZGRAotOjEwRTYzMDAwNDhGNUU1OEZDQThDREU3Mzg3NUMxREQ1NDlEQkQ3MTg5QQotOjEwRTY0MDAwODJBM0UyNjhGRTIzMzFFNzNFQTBDN0Y5MDYwM0VFODMwQQotOjEwRTY1MDAwNjg5MUQ0NDJCRDY4MTM0MUJCRTlEMUQ0QUMxN0JEQUFCRgotOjEwRTY2MDAwRkRCMDY2MThENTMzODQzMERDMzVCMjNCMTlGNTI4QzNDQwotOjEwRTY3MDAwRjgzQUQwOUJFQTg3RDE3OTBEMjY2NEQxOEE3MUJCQkM2OAotOjEwRTY4MDAwMjM2OEZCNjEyNUM5RTA4RjMwMTk5OTNGMjRENEJGOTFERAotOjEwRTY5MDAwRjY5RjgxRkQyRjgxRkU2QjdBRTlERjk0MzY0OUQzQkY2NwotOjEwRTZBMDAwMzlBNTRDRDNCRkQ5NDhGQkI3MTNGMjkwRTEyNkRFQkZBMgotOjEwRTZCMDAwMTlGRDM2Q0I1NjRDQzZGRTREMjk2NUQ4RkZBMzQ2NkFEOAotOjEwRTZDMDAwNzdBOUZCOEYwRUY1RkY4ODgxRjZFQjMxMzBCQkI5QzcxOAotOjEwRTZEMDAwRkNEMzZFRDJDRTNGQTU1QzNCN0YyMzlCRkY0QTQzMkVFQgotOjEwRTZFMDAwRUYzRjFBRTdCRjZBNDUwRTlCN0Y0QTM5OUJCRjg5QzEzRQotOjEwRTZGMDAwMERGNTZGMEJFMUJGMDFGQUZGNjkyRkZEOUJEMkIzQjU5QQotOjEwRTcwMDAwRjMxRjVFQTk5REJGODlGNUZGOTRFMTc2REVCRjA1RkI4RgotOjEwRTcxMDAwN0Y3QUM1NkQ2Q0ZFQzMyQkIxN0ZBM0M5RUQwNEZBMzFCRQotOjEwRTcyMDAwMEU4OUFFRjVEMUZFQzk1MDZBMjUwRDA0NzJBMUZENDBENwotOjEwRTczMDAwM0EzQTFFRkQwODc3MUFEMjcwMUNERjhCNjZGNDc2MjVGNAotOjEwRTc0MDAwOUFEMjFCRjIzMzJGQjNDMzdEOTQ3MzUyQkJBQTlBRDNEMAotOjEwRTc1MDAwN0FDNUU2MUMyM0YwM0QyQzRGMjI2NDMxMUZFQUEyMzYxNQotOjEwRTc2MDAwMTFFOTlCM0M2REYyOERBNEUzQkREMDI2N0EyMUJGRTg3MAotOjEwRTc3MDAwRTkyOTNFRTBBRjM1MjYzMkJGMDhEQTQ5MjQwMERGM0YwMQotOjEwRTc4MDAwRkVEOTk4MTdENEYzRDJBNzhCMUJFNTUzOTFGQzQ1REUzNQotOjEwRTc5MDAwNUMzMkJBOTY4RUVGMDIxMDgxMkE3RjlDREE3MTYwMTg4MwotOjEwRTdBMDAwN0Y0OEVEMUU0MkVEOUYxMzMyRUJFRjIzNkFFRjQxQkUyRgotOjEwRTdCMDAwODNEQTdCNjgzODkzM0FFNjU3RjNCQURFMUY0MUM3NUZDNgotOjEwRTdDMDAwNDQ5NDlGMEJFNzc5MkY2RTI5MEE0RjYyRkJGN0Y4NUFBMgotOjEwRTdEMDAwQzEwN0VCMzE3Rjc5MEM0NTdFNzgzQ0M1REUwNDREQkUyOAotOjEwRTdFMDAwQzZDNEVBMDc2RjEzN0MyRjA4MDhDMzBERjg5OUMxRTE2RQotOjEwRTdGMDAwMTExODJGQ0RDRkIxQjMzNjQ3NzdERUIxNUZCMEQxN0RFMQotOjEwRTgwMDAwQjQ2NjA4NUQ4QjMwOUM1OUM0MjUwRkE0RURFRjVFNTZBRAotOjEwRTgxMDAwMkM4MzZCQTc1RDEwODY4MTlGQjA2NkExNEMwMjY4Mzc4MAotOjEwRTgyMDAwN0IxMzQ5MDYyNzBFM0FERUZCRUQwQ0ZFMEM5NzdDNTI1QgotOjEwRTgzMDAwRUQ0NzlCMjM5QjVENDU3NDNDNzM4QTQ1MUNGRkFDNjk4NwotOjEwRTg0MDAwREFGMjNGRUQ4QzcxMTlDNkQyNzRDRDUzRDhDRkRENDVDNQotOjEwRTg1MDAwREFGMjdCRTc2OEYzRjdCOUI1NzkyQTU3NjU5MEFCMEYyMQotOjEwRTg2MDAwOTRFOUJGNTNCNDI0ODFERjMxRjQxQjAwRTM3QzkwRTNDRgotOjEwRTg3MDAwRTFDMTVBRDlBQjU5NTc2QTc2MUI5NTcyNzA4NEI4MDlCMQotOjEwRTg4MDAwQ0UwQkRCOEIzREVCQ0Y1RkFFQ0QxNzdCQjVGOTg1NkI0OAotOjEwRTg5MDAwNzRGMDM5REQ5Q0UyRUI3RjFDRTg4M0E2QTc4MTNFMjg1QgotOjEwRThBMDAwM0U0RjcyRkEwOEYzNTUyRDdEREMxMzlBMDZBMzBGNjVDRgotOjEwRThCMDAwMUVBNzI0QjYwNEE3RDYzM0ZBNThEQzE4MTM5OTFFOEE2QgotOjEwRThDMDAwNDNGNEUwNTJEMzk3NDIwRkYzMzgzREZDOTlEMzQzNjlBOAotOjEwRThEMDAwOTM5NkFFRUUyM0JFRDVDOUI0RkQwMzZCNzdFMTNBMUQyNgotOjEwRThFMDAwMTE4QTE5M0RGQzQwQTE4NzBFMEQzREI4MzkzREU4RDc4RQotOjEwRThGMDAwNkYxRUE3ODc3OThGMzA3QUQwQUY2NzA3QTc4NzhFQTY1QwotOjEwRTkwMDAwQ0IzMjQ5RUJCOUFFNzQxRDM0NzlCQTBFQkE3NUI3QTNFMAotOjEwRTkxMDAwMUY4QUFFNDc0NDdBNTgxMDlBMzc5RDM4Q0QyRkU0NjU0OAotOjEwRTkyMDAwM0RENjhCRDMwMzk2QTcwMURBMDlFMjA5REJBN0Y3QUM0MgotOjEwRTkzMDAwNEZGOTg0MjY1RkRBMTQ3OUZENkJEQTM2QUMzREE5RkExQgotOjEwRTk0MDAwNUVENUYyRjI1QUI1N0ZCQkEyNzk4QjI2QkZDNEY3QTY3QgotOjEwRTk1MDAwQTY3RTY5RDMyRTREN0U3MUUzM0I5QUZBMEJENzFDRDI2QgotOjEwRTk2MDAwRTQ4QkJEN0ZENEQ0OUZCRkJDNTM1M0ZFNjBFRDU5NERBMwotOjEwRTk3MDAwRjkwMzY1MTczNUY5RkJEQzdGRDNENEJGNzc4RUYwMTMyRAotOjEwRTk4MDAwNzVGRUVFQTJBODlGQThFQkNGOUExNkE3QzlDRjcwMEQ2RgotOjEwRTk5MDAwRDJENDM3RUNCQ0Y2MkVBMEM3ODNFRjhCMDRGNDhGNEY5NAotOjEwRTlBMDAwOURBN0QxRkZGOUE5NTM3NjQyOUQ5MzFFMDdFRTgzNTM4RAotOjEwRTlCMDAwOUVEMTk4OUVGMTM4NzE5RjlDRjM0Q0MyRjQ0MkRCMUVBRAotOjEwRTlDMDAwMEJDODE1MkE0NzRCRTBDOEE2NzRFNTk2QkEzNUQ5MjA3RQotOjEwRTlEMDAwRDcwOUNBREY4QTk1NkZENDc5ODcxMkIyMTQ5NDYzOEFGMwotOjEwRTlFMDAwRUZDMjI2MjMwOTRDMjA0NDAwRTFDNEM3MTUxNDU1RTVBNQotOjEwRTlGMDAwMUQ3RDk0Mzc1MTQxOTFEMEIzQkNCMDIzRjJGNzlBMjdEMwotOjEwRUEwMDAwOEI4N0RCMjM5QzdGODRGNzM1MTkwMjdBNTI3NzJGRTdCNwotOjEwRUExMDAwMjQ5NTAyMjk1MjdGMjc2NDA1RjI4MUFENUM0RkE5MzQwOQotOjEwRUEyMDAwMzI3RTUxQjk3NTUwMkVCMTQxM0UzMEFBRjZBQkZBNkIyOQotOjEwRUEzMDAwQTE5QjZDMjBEMDQ5QkE2NjNGOTczNjVEQUZFMUY3MDRFMQotOjEwRUE0MDAwQkNDRjg5NDA2RjEzMzRERjJCOUE2RkQ2QjRFQkRBMjUzNQotOjEwRUE1MDAwRTJCOEFCODE5NzUwQjlGRDJBMjk3QTUyMDQzRTE1RDgwNQotOjEwRUE2MDAwOTMzMjZCMEM4Q0QzRjUxNEU2REIxMjUxOEZFQ0YyMzQzRAotOjEwRUE3MDAwQUY4NUYzQzc3MzlFMTY0Q0NGNzhEQTMwM0RFNTA5QUMwRAotOjEwRUE4MDAwODU3M0MwOTM5RTAzOTgxRUY3QjQ2M0RBRTEzOTg2RTk3MwotOjEwRUE5MDAwNDc5RTBFNEMzRkY0OUNDMUY0NEY5RTIwQTZDNzNDOUY1RQotOjEwRUFBMDAwNjE3QUM0NDM3RTAyNzAwRTdCQ0M5OEZFQzE2M0M3QjQwQQotOjEwRUFCMDAwREQ5MzhDRTkwNThGMEZGQjUxRjY1RDVGNzQ3Nzg2Q0I5NAotOjEwRUFDMDAwRUQ3MzQwN0YxMUU4NkNCQjc4QUM2RUNERDAzMDlEQkQ0RQotOjEwRUFEMDAwQjlGMjIzQTQzMzA1Q0Y4NTREMjY0RTBGNDkxQTdBMDg4MwotOjEwRUFFMDAwODBFRDc3MjNEMDRCMUZFNTREMzJBN0MzREVEQTQ3MkVFQQotOjEwRUFGMDAwQUY3OUUxQkY4N0RFQUU3QzRCN0EwQkQzRDMxMDFEM0RERgotOjEwRUIwMDAwQTVGNzQ1NEYxRkFBRTlFOThBQzFDRUU0MjBBN0E3MUZCMAotOjEwRUIxMDAwRjM3MzZCN0RCRjUxMTIzQkE3MENFOTc3QUVEQjBDODAyMgotOjEwRUIyMDAwQUFBNUZDREM4NDkwNjk5OEJGQzRGQjVFNDlDMUI1QTM2QgotOjEwRUIzMDAwMUVFODFCMEQ3MkVCRDJFOEJGOEY4MjczODc0QkM3RThDQwotOjEwRUI0MDAwRTJBN0Y2M0UzRjNEOURGNDhFNzcxN0RBNDMyNTNFQkFBNQotOjEwRUI1MDAwRTgwOTExQzYxQkNERjAxQTY1MjBEM0M4Nzg0MjFBNDZDMQotOjEwRUI2MDAwQkVFNDVDOTA4MTc5ODlDNDQzN0I5RjczNDY4NEYzM0EwOQotOjEwRUI3MDAwNDI3NTZCQzA2RjVGNzg1RDY5QkQzMjE2RTA5RDdBRjZCNQotOjEwRUI4MDAwMUY1OTkwNUVFMUZBNzVGNDFFMTFGNTdDMTI3OEQxMDlENwotOjEwRUI5MDAwRjgwREM5MjU5MzMzMTlGQ0YzQzE5MTQ2M0JFQTA5NjQ4QQotOjEwRUJBMDAwQkExNjdGREVEQjM1Rjg2QjQ4NTVDRUNGMUI5MzExN0Y0RAotOjEwRUJCMDAwMjNBRThDMUFENDBGRkNGNUM1REZGQkMyRTcwMjk4RjczMQotOjEwRUJDMDAwN0YwMzNFRkJFMjhGN0RGMTQ1RTI3MkJDRDY0NkU3REY3NAotOjEwRUJEMDAwQkQ3M0NDRjhDNzFDQzAwN0JGMUFERkNBNzk5QzdFM0M0NgotOjEwRUJFMDAwRjk5MkY0QjVFOEI4M0I0OUExRTNGNjE0ODg1QkQ4MjQ2MAotOjEwRUJGMDAwREExMUZFQTVENjZCNjI2MTVENDI3MEZBNTg0RkUxRUQwNQotOjEwRUMwMDAwM0ZBNzgwQkQ3RjNFNTUwQjJGNEIwN0VGRDI4MTE3NkQ3RAotOjEwRUMxMDAwNjA3NzJENEQ1RUQ4NzAzMkMyM0EyODY5NTU0QjVEODNCRQotOjEwRUMyMDAwNDVBRDg3QjY2OUYzOTcxQTg1NjkyRDM4MkU0N0VDRUMwOAotOjEwRUMzMDAwMzEyMDI3NkExQjE4REY1RThFQTkwMjY3Njk3MjA5RjYwOAotOjEwRUM0MDAwNzNBRTM5M0Q5NkQ5N0IzRUM2MEYzNkM3MjFCRjM4RTczNAotOjEwRUM1MDAwMjlDM0ZBRkZFQ0YxRjQwNjQ3MTkwRjIxQURFNDg0MTkzQQotOjEwRUM2MDAwRjgzMTJENEJFRkJEN0VBRkY0MkNGREM1ODhFN0REN0U3RQotOjEwRUM3MDAwRjkwQUU4ODk2NkZBREY5NzYwNzcxMDA5RjMwQURDOUFFNwotOjEwRUM4MDAwMTZEMTZCQkEwMUJFNkZENkY0NDdEQjM5OTQzM0UyMkY0RAotOjEwRUM5MDAwRDNCRTZBREY0OEU0OTQ0MkI3NTQ1RUQ0ODNCRDgwRTdCNAotOjEwRUNBMDAwOUI0QjFBRDQ3QTU5NTVDQjc3MzVGOTlBQjY0NzFBRDQ3MwotOjEwRUNCMDAwN0E1QzA1RkM4M0YyNUY1MjJCNDg0MDM3OTU5QzhDQkFGNgotOjEwRUNDMDAwMjVDQjFBODE4RUFGMTg4MjRGODA4RjA4QUM1RTk1QjkyNAotOjEwRUNEMDAwQzNFOEE2OUZDRUI3QjI3NUVCNkQ3Q0U3M0NFNjU0ODhERgotOjEwRUNFMDAwM0IyODMzMzdFMjM5NzI1OUNCQjVGOTIwNjdDRUI3QUUzRQotOjEwRUNGMDAwNEMwMkY5NUIyMTVFRkE1RTUxODRGNkJGOTQwNDJFNUZFQwotOjEwRUQwMDAwRTRBMDU2Q0ZFN0Y0NDEyODVDRDVCQ0U5Q0YxMkMyMTc4NgotOjEwRUQxMDAwQ0Q3NzE5OTg1RjQ2MEZCNzhEQ0I5MUJFRjA1M0JERjlGMwotOjEwRUQyMDAwNTBDMUNEOEU5RTc4QUE2RUJCNjg3NDIzNUZBNEZGQ0JDMgotOjEwRUQzMDAwMEFFMzQ5QzE1RkIxNTRENDI2RDE3MTk3Mzc3N0EyRkY1NgotOjEwRUQ0MDAwRTI4Q0VDMURGNTgzQUZFMDk3M0RFNzY3NDkzRTE1QTNFNAotOjEwRUQ1MDAwOUE5Nzk3QjQ0MzNGMEIyNkYxOEU4OEUzREUwRjI4MUY2NgotOjEwRUQ2MDAwM0ZGQjVCOTkwMDFGMjI1NzY5QUQyQzc0Q0Q3MEJCQzc2OAotOjEwRUQ3MDAwNDAwQzU5NjFCQjY3NDE2QjQ1MjFFMEZCRUNFQkQzRDEwMwotOjEwRUQ4MDAwRUU1QjQ0OEE2Q0I4MEVBNDMxMEJFQzlDRjNDNDgwNzEyQQotOjEwRUQ5MDAwNTVFN0M5MUY2QzEzNTRFQkYwQjE2NEU0NzhBNjVDMzBGRQotOjEwRURBMDAwODlCQjM0MTBCRTdCMTBEODVGQTYzOUY1RURFMjU4Rjg2OAotOjEwRURCMDAwMkUyOTc2OTBGMDI1Q0ExNUI3ODBGMTE3NzNEODc3MkZEMgotOjEwRURDMDAwMzFENzAxRkQ1MjdCNEE2M0FGNTE3QjRBOTNBN0Y2OTQzQQotOjEwRUREMDAwMjY1RjQyNjYyNjQxM0M0NUM5RDMzMkYxMDk4ODI3NEQ1QQotOjEwRURFMDAwRjk0MUM5OEVFMzJCMjVCNUY1QTAxRkZEOUNGQkUxMTY2QgotOjEwRURGMDAwRDg4OTM0ODRDQTg3QUEzNzlFQ0IyQUE2RjNFOTkyOTg4OQotOjEwRUUwMDAwRkY0Qjg5MEY1ODQyNjVDNTIwNUE1RTVFRTYzM0JBMkMyNwotOjEwRUUxMDAwM0RFNzc3QTI3NUMyM0Q5NEYzMDMzQzE2MDc3MEJGRDE1RQotOjEwRUUyMDAwQzdFMjZCODg0M0NBRTJBQTRGNUFFRkYzMUZEODJBQkE0NwotOjEwRUUzMDAwQTI2QzUwOEY3RTU3QzY5QkZBRjVFN0FGOUYyRjIxNEZFQwotOjEwRUU0MDAwRTIzQ0NBOUI2NzYwMUM1NjhGNzgwNzNFMUZCOTU5NzAxOQotOjEwRUU1MDAwRjkyMkVDMjc1MTE2MzRGMTJFMDkzMkMzOUZFMkQ3MUE1QQotOjEwRUU2MDAwQUVDQjVGMEY3OTk1REY2QkEyQUVGQzFCRjM5NzAxNDQyRAotOjEwRUU3MDAwQzM1RjhBMjVGNzcwMzk5MUYxMTNDMEJGMjAwNTcxN0ZGOAotOjEwRUU4MDAwN0Q2M0Y4QzkzREUwNUYyRkRGRjg0Rjg0M0Y1NEJCRUY0RgotOjEwRUU5MDAwMjlGQzg5RkZENEYxOEZFODMxRkVCQzQ4RjBBQkRFNzg2NQotOjEwRUVBMDAwRjU3NTg4NzcyQ0ZGRDVDRjZDODRFRUI3QjM1MjYzOTI5QgotOjEwRUVCMDAwOTNBRTdCRTVBNkQ1MzYxN0YwMURDOTZCODM3RDcxRDY2MQotOjEwRUVDMDAwMjc0RThCNDQwRkRGOTc3OURDMUY3MTU5MDRGMEJCQzJDQQotOjEwRUVEMDAwM0YyOUZDNzNBRkZDRjg0RUIwQTNBRTZDOTJFREU4NEY0NwotOjEwRUVFMDAwNkQzNjA1NEM5NDlFQUI1Qjk3MTQ5MkIxOThFRjY0RjkyNAotOjEwRUVGMDAwNDcyRjAyRkREN0I0QzlDN0Q1NzQ1QUZFQ0I5RjI1NDExMQotOjEwRUYwMDAwN0MxMEE1OTQyMTg2NjQ0ODAzNjg5RjU0NkZGQ0I4MDA2OAotOjEwRUYxMDAwRjQ4RDFBMTJDNEZEQUE2RjA3RkQ3RjE2OEZGMkIwRDhDOAotOjEwRUYyMDAwMThEQkIzMUMxRDM0NDlEMDlFRkQ2QTVBN0Y3QzUxQjQ1NgotOjEwRUYzMDAwNDE3QURCNjlFMDZGRDRCMjQ0QkY5MEJFNUQxOUI3M0I0NAotOjEwRUY0MDAwMkE2NEVCMDBFNEFCMTNDOTQ0RTBBQjBBNUU4ODhGRDlCNgotOjEwRUY1MDAwMUQyQjVGN0U2NjZDMjcxRDU3RDdDNkRGREEwNDE1QkVGMgotOjEwRUY2MDAwMTQ3QkU5NTJDQkMyNUZGQ0RBRDEzQjFGQkY0MEY3QTM1MQotOjEwRUY3MDAwNUFCRjU1RTQ5NEEzOEREQjRCN0U5NjU2Q0EwMTFCQzQ0MQotOjEwRUY4MDAwNzM1NTZFOTA5RDVFRkFCOUYyRDUxNzVGN0ExNkZDRDk2QgotOjEwRUY5MDAwN0YzNDM5NDc1MkY4MTVBRkVFM0I3MjEzQ0Q1NzZDOTE2MQotOjEwRUZBMDAwMDcxNEIyNjk1ODg0QTRGMEZBRDREMEZGOTY4RjBGQUYzQgotOjEwRUZCMDAwNDdGOUI2N0Q0NkM3MThGNkZEODdGMUUxNzVBOUQ4QjJDNQotOjEwRUZDMDAwQ0I0OEM2RjRDNDQ3NUVDQjJFNjM4NzI1QzJGQUI0NzQxRgotOjEwRUZEMDAwMTY4MEZFQjdGMkU1QkYxQTgxRUY5REREMjk5MDgxQTk2OQotOjEwRUZFMDAwMTFGMEI5NjExRkVBODc4MDI3NUM0RkJFNUVBMUY1RDM5RgotOjEwRUZGMDAwRDVBRkExRUIwMjcyNDZCRjVFRkE3QTg1OUNCRjAwNUM3QQotOjEwRjAwMDAwODhCM0ExRjRGRERBQUYyMTBFRUU0RjI2MjdFMEExRUM4NAotOjEwRjAxMDAwQjU4NzZDMzA5RkQzNTIyREEzRjNFNzU2MjcwMUJGMkI0MgotOjEwRjAyMDAwOTNCRDQ5NzY0Q0Q5RjdCMkU3MUY0NkZBMkIzREY0NzBGMQotOjEwRjAzMDAwMTJGMzU3QkEwNjE5NTA3NjdBMDdDMTNDMTdBRkJGMUJCNwotOjEwRjA0MDAwRTc1OTQyREM0ODg3NjVDRjg5NDUzRTlBN0UyQTkxNjkxNwotOjEwRjA1MDAwNUIyMkVDOTM0QjdDOUY5QzdFODEyRTJFOURFNzY5NDUyNQotOjEwRjA2MDAwMkVGQzQxRTQ3MkUxQkJFODBGN0Q5OENGODU2QTkwOTg1MQotOjEwRjA3MDAwRkZENENDRDZFQjgwNkNEMEM4RDExMEZENkU3QzE0RTVFQgotOjEwRjA4MDAwQzdCOTYxQUU4MTcwRUU1NjEzOTYxNzI4NDdDNDQzNTMzMwotOjEwRjA5MDAwMDdCMjc1NjI3MjA3REI1MUI5OTMwN0RGQTE3RUJCRUM0MwotOjEwRjBBMDAwOEExQUFCNjk4NzcyNDZFOTdGMTlFRjlGOEUzQjFBRjQ4MwotOjEwRjBCMDAwQjdEMzQ5OTFFRDkxRTE0Njg1MEY1MDNENDM0NTY3QUE4RAotOjEwRjBDMDAwRkRDRUY2RkZDNjA2QjZERjk1RkRFRjlCMzEwRENBRkZGQwotOjEwRjBEMDAwNzI5OEVEMjM2ODA3NzI5NzhFMkIzMDEwQ0I3N0NEMTY4MAotOjEwRjBFMDAwOTAzRjk4NDgyMEQyM0VERjI4RjM3REFFMkREN0QzMEIzQQotOjEwRjBGMDAwMURCRjI0QzRBQUU4MDZGQTg5Qzc3NTQwNzk1RkYyMzRCNwotOjEwRjEwMDAwNkRBRkUyQTMzNUQwQUZBRDI3NUM2NTFGOTc3MjdFNzBGRgotOjEwRjExMDAwMUVGOEMxRjU2MTdFNDBENjI3RjYyQjVFQjQ1MkY2QkRDRgotOjEwRjEyMDAwRjQyQ0VDNUZCQTVGQkQwRUQ4QkY3MjExQ0NGRjkzQ0Q0QgotOjEwRjEzMDAwN0I4RURDNEZGN0VEMjcyRENBQkVENUYyNTVGREJFMkRENwotOjEwRjE0MDAwREJGQTMwQzY5RkVCRjdFRDI3NDM2QjQ5QzQ3RDRCQkYxRAotOjEwRjE1MDAwNDdEQ0I3NDMzQkZFNDdGOEFBODJDNzI0QTM5NkFGMkFGMQotOjEwRjE2MDAwN0NCMjM3N0NFQUY5RTQxNkQ5ODE3OEQ1RjM0OUZBM0JDOQotOjEwRjE3MDAwNENCMjdBRDJBMzQyODcwQUZEOTVGRjQ3RDU3MEUwNDc4QgotOjEwRjE4MDAwMjEzQTU1RTgzMDQ0QTcwQTFERUFFN0FEQzVBM0JFRkMwNQotOjEwRjE5MDAwMjNGMDJENTI3QTI5N0E1M0M2RjM5NTRBM0Y4QjAzQTY2MgotOjEwRjFBMDAwRURGNjBGQzk0NDdDQjk1MENDOTFDNkZENDMwNkE4RjNENwotOjEwRjFCMDAwM0U1REJFNDU1N0RGQTVDQjE3RTlFQUJCNzVGOTVBNEQ1MQotOjEwRjFDMDAwRkRDQUI2M0Q0NjgyNzQxMEQwRDQxMzk3RkYzQjM5MzE0NwotOjEwRjFEMDAwMjExMkRERkE5OEJGQTFGNUEyMTFFRTM5RDQ1ODgyRDhEOAotOjEwRjFFMDAwNUU1RTQxQkMxMDFGMTlEQzIxRTJCOTUxMzdDNTcxM0Q4QgotOjEwRjFGMDAwRjgzNzM2QTdGQUJDOTQ4RkFDOEU2MjdFODU2RTdCRDBEMgotOjEwRjIwMDAwMTY0RkQzRDU3MTJDMUY0QzM0RDYwMzFGNTRCRTA3QTMwMQotOjEwRjIxMDAwOThERkIxQkIyODY4OEI1M0Q5NUI5RDdFMTFGOTc4ODc0NQotOjEwRjIyMDAwMkZGMkJEMEQyQTY5NzBERDNCN0FCOUQ3QTE5QzhGNzU4RAotOjEwRjIzMDAwNDdEQkM2NjI3RkQxMjkzRUEwQzdBOUEyMjU2NTM5Rjg2MAotOjEwRjI0MDAwQTExQTQ1MjdFOEVDOEJFQUVFQjVDMTc5NTVCNzNGRkQyOQotOjEwRjI1MDAwQUUzOUY0RkJFMjc3NDQxNjhFRTM3NTQ5ODM1NDc2RDBEOQotOjEwRjI2MDAwMTlFMjVEOTcyRDQwNUNGMDVBQTQ5Rjg1N0U2NjE3MkRBQwotOjEwRjI3MDAwNUExQjc5M0Y5NEYzNzYyNTk2NjU0NkUwQkJENDBFMzk0OAotOjEwRjI4MDAwQUUzRUVGNTFFMDk0QURENzdERjc0RkU3RkJBNjExRUQxMQotOjEwRjI5MDAwRkZGMjhEREE3MjM3Qjc5RjdGNjRFNEZDNjcxQzE5QzdGMQotOjEwRjJBMDAwRUQ1N0U2QkZFMTdDN0JBQTk4NzFENzFDQkEzRUREMDcxQgotOjEwRjJCMDAwNDQ2MkEyRjk0QjdFMTFEN0U3RDI2NkMxMDdGRTM3RTI1RQotOjEwRjJDMDAwNERDNEZENTc0RDgyNDZGNTdEODgyRUQ4NUZEN0Y0Q0VDQwotOjEwRjJEMDAwQzdCQUI2RkYzOUVCMDc0MDQ3QUY3RjMwRjZERjY5REFEMAotOjEwRjJFMDAwRjVGQTFGNDdCRDA1RjkzNzhFQTY3QzQwN0FENkNGREJFRAotOjEwRjJGMDAwMTk4NUYxMDJERDNCQUQ0OEZGREQzQkRFNEJGOTAxRTQ1MgotOjEwRjMwMDAwREYzNDM5NjE5Q0REM0JGRjNBMTZFOEE5N0I4NUE5MEMwNwotOjEwRjMxMDAwRjg2MEY3MzBFNkJGNURCOUUzQUY2MzNCNTBGRUFFQzJDNQotOjEwRjMyMDAwNzU2QzM2MUE5OTlGQzlGRjhGOEZFMERFQzIyNTNGOUQwRAotOjEwRjMzMDAwMTVFODE3M0NBRUJFRTZENzUxM0U4MkYwRkY5QUE1QkU1NwotOjEwRjM0MDAwMEZGNDZERTc1M0NERTM0M0JBQUQ2NENFNTYxODVGMUM5RQotOjEwRjM1MDAwOEI3RkE4Nzk2QkYyOEI3NUI0RkZBQUQ2NURDNjg1QjQ5NgotOjEwRjM2MDAwM0NFRkVEQ0ZDNzYyMUNGRDU2QTYzNzVEOTAzQjlFODdGNAotOjEwRjM3MDAwRjg4NzZEQzZFRkFDOTQyOTlFMkZDMDI2QTM0NkY2NUQ5NAotOjEwRjM4MDAwQTYzNTc5QjA4RjdBRTJFNTczRjRBN0Y1MTcxRkVGMUE2NwotOjEwRjM5MDAwOTk3REZEQUY4RjBGQzFDNUY4OUZENTY3MTY2MERFN0ZFMQotOjEwRjNBMDAwRkJFODAzRjQ4MzlBOTAyRTk1Rjk3RUQyNTI4N0ZBNENBQgotOjEwRjNCMDAwNUZGMzNFRkJCRjg2MEVGQTNCNkYyMUQwOUY3OTlCNEREQQotOjEwRjNDMDAwRkZEQUVCRkRCOEQxODFFQkEyREYwNzNERTk3Q0M3Rjc5RgotOjEwRjNEMDAwMzBGRkFBRDU4OUUzRUQyN0JEOEYzNkZEM0ZCNkVFNUI0MgotOjEwRjNFMDAwRTlCQURCRkE5RUY3NzdGRUM1RTdEREZCQkFCRjMzOEZEQwotOjEwRjNGMDAwQUZCQjFEQ0U1MzZCREVGRTFDQzdGNzc1Rjk1Q0U5RkY5MgotOjEwRjQwMDAwNTJCQTU3RjRGRDc2NDNBRDNEOTM4RTZGMEU2OUI0ODJDOAotOjEwRjQxMDAwNjI3MTVGRTIyNTRCQTYwM0EyNzAyRjBGQzBGODNCMzg0NAotOjEwRjQyMDAwNUY4RDYwNTczNTk5OThCRkNEMjQxODU4QkNEQUREODJCRQotOjEwRjQzMDAwRTI0NzQ0M0JFQjRFQUU1RkRDMzlCNDBDRjU5MDNCNURFQwotOjEwRjQ0MDAwM0Y0MTdEODI0OEI1RUQzOUI0N0U3QkVFNDIyN0M2NkFFNgotOjEwRjQ1MDAwOTJGMUM3REM5MDlGM0Q4NUU3QjVGNkU2RUYwNEUyMTIzNgotOjEwRjQ2MDAwQTg3RTdGNjdFRUY0MDNBMEU3REVFNTEyNTEwRkE2MjkyMAotOjEwRjQ3MDAwRUFCRkVGQTcxNEIwRUY5M0I0RjZEMDdENkU2REZFREU1OQotOjEwRjQ4MDAwMzlEQUZDREQxQ0RFM0Q4NDhERkY5RTIyQzEwNzdFNThFQgotOjEwRjQ5MDAwNTNDRTUzODlFMDk3MzUyRDk2ODk5MDBBNzE0NkI1QUJDNgotOjEwRjRBMDAwQzFFRUI4QkI0OERCN0UxOTI4NjcyQTdGRTMzN0M1RTM4NgotOjEwRjRCMDAwNkY0Mzc4NUM4QTc4MjEzOTIyREUwM0VEMTM4RjdDREM4MAotOjEwRjRDMDAwRURCM0M3RjkyMENFOUE0ODRFODZDNzdCQUE5Q0U4Mzc5MQotOjEwRjREMDAwRTdGNkI4Q0NEQkNCOTYzNUVEQjA5RjY1OUQxREFFRDg3OQotOjEwRjRFMDAwRDNCREUxOUI3MEZCMUNFMUE0ODVGMTJGQkI0NEI0Q0ZERAotOjEwRjRGMDAwNjU5RDdEQUVBQ0NCRDc1RDBGNjUxREJGRURCQTNDMDdGQQotOjEwRjUwMDAwRUI3MjYzNzg1RDg2NUE1QzA0RjZBQkNDRUQ4NzdDOEIzRQotOjEwRjUxMDAwOTNFNTg3MTYxMTc2QUVFOEMzRkFEMjAwMTdGMTY2ODQzOAotOjEwRjUyMDAwRTNEMTk3OTg4QjJCRTA5Q0NDM0M1QTQwN0ZDODVENkIxNQotOjEwRjUzMDAwNDU5NDBGRTYwQzAxQzc1NTM0NDlDNkY4RTM4RjBENDVENQotOjEwRjU0MDAwNTlCMERFODUxMzI2NTY3RjlGMERDMzA5Rjg1Q0MyRjFDMgotOjEwRjU1MDAwNUU0MjZBNTE3RjI1NTdCRkZDMzIzQjBCQ0UyNTA4RUEzRAotOjEwRjU2MDAwQkY0QjVDODREQzQxRURCODkyNkMyMTEwMERGMTZBMTI0NgotOjEwRjU3MDAwRjFDNjhFMDczRkI5NDA4RTZCRkNFNERBM0NGQzZFNDk2NQotOjEwRjU4MDAwMEFDM0U5QUI3RTZGRkNFNTlGOURGRTE3RTU2N0M3MjlCRgotOjEwRjU5MDAwOTE3NDQyM0ExMkJCOTdENDc2Rjc3QzNGQzM2MzREQTU3MgotOjEwRjVBMDAwRTA0QjQzQkEwQkM4RUFGQkQzMDU2NkI2MEZGRUVCODcwOAotOjEwRjVCMDAwMTM5MDRGRTZGQzc0NEMyQ0YzMDc2NEUyN0RDNDFBNkU4MgotOjEwRjVDMDAwMzc1Q0YyM0E2MkMxMEY3NkM5OUZDRUNGNzNGMzZDNkE5MwotOjEwRjVEMDAwQkVBQUE0ODdCODFERkU5RjEwOTc0OEQzRUU3Q0ExNTEwOAotOjEwRjVFMDAwMDQzQjhCMDREMUZGRUJDRDhGQzI3QkM1RkE3NkEzQ0M1NQotOjEwRjVGMDAwMDZCRUFGNkJEMTJGMDAzRjExRUVBRkYyNzk5NEQyQTZDOQotOjEwRjYwMDAwQjFGMUFBNzU1QjdCQzc1OTY5NkNDRjc1ODBERjcxRDU4NQotOjEwRjYxMDAwRjlEREI3QzUyRkQ4RkQ4MEQ3NDM1MTFEMDU0NTExRTY0QgotOjEwRjYyMDAwM0I4OUUzQUY3MEY3REZGMEZFRUE0QzdGQUEwQzc4OTlENAotOjEwRjYzMDAwOTkyRjZBQ0VGOTlENjZFRUNGOTg0MDI2QzBCODBBNzcxQQotOjEwRjY0MDAwREY2NjlCMENFQjcyNDA3NEMyN0RENTFBRkY0NUEzM0I2RAotOjEwRjY1MDAwQzJGOUIxMUU5RjAwMUZGQ0YwMjc2NDY3MDlFMEYzQzRFNAotOjEwRjY2MDAwNEZBMjA4RDhENUVGRjE3M0M5MENCOENGOTE4MUFFMUU2NwotOjEwRjY3MDAwMTdGODFENzNDQ0NDNEZCOENFNkNDNzc0NTY2MThFOUNGNgotOjEwRjY4MDAwNDhGQkNENjhCNThGODM1MEI1QzFCQ0ZFM0FCMzAzQ0IwMAotOjEwRjY5MDAwODdGMDc2NEFCREMxOTVBQzVFQTdEMTVFMUQ2OUZFQkZGRAotOjEwRjZBMDAwOEIxMkY4Nzk5OUYzN0I5Mzg0N0ZCRDc1Q0JGOUE5MzVEQgotOjEwRjZCMDAwOTAwQkZBNDFCRUUyNjdEMUQzMzVDMUZENzE2OTlBRTA4MgotOjEwRjZDMDAwMDNGOTBERjYzMEU2MEIwNUQ0MUZERTUzRUVBRkNGNjQyMQotOjEwRjZEMDAwNzI1NkExN0IzRDlFQUJDRERBRjcwMjFFRTc3ODdGODg5QwotOjEwRjZFMDAwRDM4NzgyNjcwNUJGRkFGMTJBRjUyOUJGQkE1NUVEOUY4NgotOjEwRjZGMDAwQkFBQjZEREM2QkEwREY1NEZCMDVCQjgxODJBQTk2M0FFNgotOjEwRjcwMDAwOENCMDBGNkJEQTlFOTBFMTdDRTYzRTA3ODM0QkE0QTI5RgotOjEwRjcxMDAwQjFFQUY4ODM3NTY2MTYwRkIyNjdGQ0NERjM4MDRFMkUwMgotOjEwRjcyMDAwQUYzNTgxMkMyNEFFNDUxNzZEQzA4N0RGMzMzODdGMEY4RQotOjEwRjczMDAwNzE2Q0RFREY4OTY0RDM1N0YwQUIwRjNDRjZGMjdDNTk3NQotOjEwRjc0MDAwMEQzNzE1RTczM0FCMzI0NzA2NzdEQTAzOTVCQkU0ODExMwotOjEwRjc1MDAwMkE3QTVBNjc4RUM3NzJFNUZCRTA0QTA3QkUwRjQyRkI2MgotOjEwRjc2MDAwQzM3MTc4MUYzNzExQjg0RjkyRDFEMjhFRjc2QzFGQTg5MgotOjEwRjc3MDAwOEQ2Mzc0NThENkIyQ0I4OEY5NTRDRDdCMjI0QTNGRkFCOAotOjEwRjc4MDAwRkQzNEJCNTAxQkFGQkMzMEFGNjMyOEUwQTVEMDE0NTg4QwotOjEwRjc5MDAwRTY4QzQwQTc5M0EzOTQ3M0NBQUYyOTI3NUM5NDZFQzdFNQotOjEwRjdBMDAwRkU3RjI0Mjc5NjI5NzJBMjAzRTNFMzk1RjYwMkRGRTdBMgotOjEwRjdCMDAwMkEzOTMxMzA5MjlDNTg1QUU3MTgwOEVCQjA3NDQ3RkE0RQotOjEwRjdDMDAwNDBEODI0NEJERjk5OUExNDQ5NEVCQ0VGNjFFN0NDNDdFRgotOjEwRjdEMDAwRjk3REY2RUVEOTU0NEVEQ0EwOTIxM0IzQTM5MDRFRjQwQgotOjEwRjdFMDAwRUQzRTUxRjY0OTVGNzI0MjU5QjdGRkNCRkNFNjdEOTA4MgotOjEwRjdGMDAwMTMxMUY2RjcxNzNBMzk3MThGQkYxOEU1QzQzREIzNDVCOQotOjEwRjgwMDAwQ0RCREFDNEZGQjk0MTMzOTQ5Rjc2MTVFNzZDNjQ0QTA3OQotOjEwRjgxMDAwOUZGN0I5N0Q3Mzk0REYwQjgwN0U0MDVFNjQ0NkQ5MTFGQgotOjEwRjgyMDAwNkY3QUI5RDExQjVGRkY1MzdGRjlGQUZGMTA5RTE1QkVBNwotOjEwRjgzMDAwQkU5NERBM0ZBNkQ0NDg3NDQ4OTA5RTk3REU0N0Y5QkE0MgotOjEwRjg0MDAwMDBGNEM4RjhGQUQyMDdCOTlGNTNDNzY3OEI4MENGNjYxOAotOjEwRjg1MDAwQUFGOTJDNkI1RkVENjY3MkExQTYyREY1OTlCOUI0RkNERgotOjEwRjg2MDAwRkU0NkQ5MDlBMkYyRkUzMERGQ0Q1MkYzRERDQ0E4NUUxMAotOjEwRjg3MDAwRjg2RTE5RTNCQjk3RkQxMzUwN0ZFQTZEN0U3RkU2RkNCRgotOjEwRjg4MDAwOTZGMkIzMTFDRTA4RjQzMTY3NkU4Q0U2REVERTg5NzEzNAotOjEwRjg5MDAwQkZDOUQ4MDZGQkU1M0QxMUNGNzkzRkU2N0FDMEMxNzFGQgotOjEwRjhBMDAwQkZDOTA0N0RGQTQ5M0U5RTc5N0MzRDJGNzg0ODc5M0U1OAotOjEwRjhCMDAwQzU1RkRFMjJBNjRGNTc2RDE2MTE3RkQ1QUQ2Q0ZGNTc4MQotOjEwRjhDMDAwMzcwQjNFMDdDRDE3OENGRjFCOUVENzU2RUM2MEU3QjU3NAotOjEwRjhEMDAwNzQwNjg1MzlBQUY1QUY3OEFGQTMxRUNFMDkyQTM2MDg3QgotOjEwRjhFMDAwNzhERTBDRjcxRTAwOUZBNTFDOUYyNUNFMEEzQzU3MjlFOQotOjEwRjhGMDAwNkREMkZBQzExQkEyNkQyRjkwMUIxMDFFRkFDM0FCNzhGQwotOjEwRjkwMDAwRkQ0MjUzMTBDRjFEMEE3RjI5MzgzNzIwOUZENEI2QUI1NAotOjEwRjkxMDAwMUE3MUZCNTlCMDRGMkE5QTc1REY5RDBENzhBRTA0MzdFNgotOjEwRjkyMDAwRDQ0MUFGQUQ2QUQxOTY3QkY4QkMxNzhCODE4QzZEMTQzNgotOjEwRjkzMDAwM0VGOTNEQjNGM0Y0NzhGN0U4RjE1M0Y2MkRGMTczODgwRgotOjEwRjk0MDAwRTIyN0YzOUY4NzlGMjVGRTVENzg1RUYwNzVGMUEyQzdFMQotOjEwRjk1MDAwNDc1RDE0M0YxRjE4NEYzMjYxM0Y3RTZDNzAyMTdGRjE2RAotOjEwRjk2MDAwQkUyQkUyQkI0RThCOUUxOEE5NzkwRkU1QTcxQzJGRUY4QgotOjEwRjk3MDAwMTlEQ0Y1ODNBMDVFQjU4MEY1NEFENzZGRDk5NzQ0RjNCQgotOjEwRjk4MDAwNzM1QkM4MzgzODY2Mjg2REQyQ0FFMzkwRkM2Rjc1QTBFNwotOjEwRjk5MDAwN0M5RjVCQkI0NTgwQjhEQUM1RkNCRTYwOTlFRjA5N0NGMwotOjEwRjlBMDAwM0ZFNkMxRTU1NERFRDNGQTBCQzc5QkRDNzA1RTdFMjhEMAotOjEwRjlCMDAwMkE4OEZDNTNBMURGOUQ0MEJGOTQ2RkZBRjkzODRFMENBMgotOjEwRjlDMDAwMEVFNkEzOUM2QTEzRUNCODJGMDM1MTRDNkVEMTc1ODJERQotOjEwRjlEMDAwNzc2REY2NENGRTZCMDE1RjE3RTY1RjZBNjNFQjU4NDM4OQotOjEwRjlFMDAwRDcwREY2NzU4MTlGRTc1Qjk4M0VGODgwRkYyMjNCRTdENQotOjEwRjlGMDAwRjRFRjkyRDlGQjM4MDI0OTQwN0VFNzQ0RkI1QzkxOEZEQgotOjEwRkEwMDAwNzBFRTlBOTNBNDVBREYxRDlEOENGRTM3MDk0RUZDRTBFMAotOjEwRkExMDAwQTNGRkZCMzZFQkRCQ0JCQTJBRkE0QzdGRDc1N0MxRDMxNwotOjEwRkEyMDAwNEVERDNBMUY4QTZBMkY5QzgwRTc3MjgyMTNERjBCRjI0OQotOjEwRkEzMDAwQzdFMTc5RDFDOTQ2RjZGRUNENDFBRTFGRTlGNzA1RDgzOQotOjEwRkE0MDAwMUZFQUY3Nzg2NkMwQzAyMTJFN0E1QTE0QzY5NTYyQkZBNQotOjEwRkE1MDAwNjk0QzNGNTNGMzI5RkQzQjQ4NUYzNzZFQTk4NkI0QTMzOQotOjEwRkE2MDAwNUUxNjhFN0Y3NERGNkUwNkI5M0Y0REQwQzQ0OUQxMTk0MgotOjEwRkE3MDAwRTFCRUZGMjdDMDk3QTNCRTAyM0U0OTM2QTM3Qzc5QzhFQQotOjEwRkE4MDAwQ0VCRUVFMTk2NjI0RjAxRURBRTUzNTMyRDJEMUJEMDZCRgotOjEwRkE5MDAwQzc5MTZDRTAyRjhGQzkwNEY2QzdFNTgzMzcxRTlEM0JFNQotOjEwRkFBMDAwMDBDQTQ1QTQ4RkUyRjcyNjU0ODM2QkE1OThDNUFBOTE5NgotOjEwRkFCMDAwRTI0Nzk4NUMzQUMxRkJGRjEzOTVEN0FFNkI3ODk3QTBFRAotOjEwRkFDMDAwMDc3QkUyN0M3MEJGNzRCNjczRDc1NDA3Rjg1QjMyMEZDNAotOjEwRkFEMDAwQUQ4NjczQ0Y1OTc5RjYyMzQ3NjAxRDFCRDhCQjRGQzczRQotOjEwRkFFMDAwRDdFNEExOURGNkQwNzcwNURDNjdDN0U4N0EwMTlDQkIxNwotOjEwRkFGMDAwNjdBNzFFMzk0MkM3RjdFMDlBNDQzQ0I3OUNFQjRBQkM2MwotOjEwRkIwMDAwMDdDRTMxRTcxRTE0OUQwRTVBNkZFMTVENTYwQjlDN0ZBOAotOjEwRkIxMDAwNEUxRjJEMTJCNzBBMkYwRjkyNzZGNEVGQ0NBREZERUVFQgotOjEwRkIyMDAwRERCMDRGQ0FBODNDODRGNzlDQ0FGQzg3QTYwRTg0RkNCMwotOjEwRkIzMDAwN0EwMURCRDc3OERENDZCOEU3RDlERTc0RDE5ODQ5RkI4NgotOjEwRkI0MDAwMkZBMUY1MDBERDM1RUI1OUJEOUE4RDAyQkUxNzU4RTJBNQotOjEwRkI1MDAwN0YwMkY5NjRDOTQ2MDExRkM0NjlBN0ZBQUY5OUMxRjVDQwotOjEwRkI2MDAwODEyOUQxQkU5RUI2QTdGOTUyNjgwRjcwMzdDNkREMDM1MgotOjEwRkI3MDAwRTc5MzM1NzQ5Q0Q4N0U1MjFEOUU1Mzk3RDA3NkI0OThFNwotOjEwRkI4MDAwQjQ2RkZDMkVDMjVCQjI1RTIwNzBBRkIwNkM1MkVBRTM4MQotOjEwRkI5MDAwOTMwMERFNDFEOTA5RTU0Nzc3RkREQzA4RTM5RTQ3RkI4QQotOjEwRkJBMDAwMUI0NEUxMkYxNDNCQTY0MjdERjIwM0MxOEVFRjJFMTVCQwotOjEwRkJCMDAwNUU4QkZCQkE5QkVGM0I2MjFGQ0RFMjE0MDRBMkRDRUYyRAotOjEwRkJDMDAwOTNENEYxMkEyNUQxNjlCODlGNEE5NkQ3RDVDM0JDM0FCOAotOjEwRkJEMDAwQkM4OUE5MDZBNEE3OEI0NjkwRTMyNzI5QkVERDU0N0ZFNAotOjEwRkJFMDAwM0Q2MTY0NzEzMDdCQkMyNzhDMUQyQUZFQjkzMjNBMUQwMQotOjEwRkJGMDAwREIyRjZBQ0I0MTNFQjM5ODE0NjEzQzg1QkI4RUU5MjM3MQotOjEwRkMwMDAwOURBQkEzN0NFMDU3RUI5NEVEMjlGMDdEQ0Y2QTEzN0U4QQotOjEwRkMxMDAwQkZGMDJBOTMzQjE3ODY3NUEwN0ZGQkY0N0E5OUMwQkQ4RAotOjEwRkMyMDAwQzc5NUVCRDNEN0MxM0E5RURFMkMzQkUxREM0MDdDOEVGRQotOjEwRkMzMDAwQzUxMTk0QkVDQUZDNjQ3QkQ2MzNCOEE3OUIxOTdGQ0I5MQotOjEwRkM0MDAwN0JFRUVFMDJFMERCQTU5NDRGOTk3MDdFNUEzRTU2RTJDMQotOjEwRkM1MDAwMjg0NzNFRjU1QzE0RTM0QjdBN0VBNUU3NTM2NThEMUI4MAotOjEwRkM2MDAwMjJDQkExNjUwNTkxRTVEMEQwN0FFRTM3OEQyQzlGNkIyNAotOjEwRkM3MDAwODg4NUU5QkJFM0M5NzhGMDYzMTY1NzBEOUJENzA0RjQ3OAotOjEwRkM4MDAwRkMyMEJCNzBEMDFFNzhGM0QzOUY4MURDQURCNEUyM0I4NwotOjEwRkM5MDAwNjVENTkyN0Q5REMwRTg4MzAwRkY5RkVCREZGMjI5RUNFNAotOjEwRkNBMDAwODdCMkI5NTFGODBFRDkyOTU4MEZEODQ3NkIxM0YwMUNGOQotOjEwRkNCMDAwQkJDNDU3OEM3ODU3RTI3OTRCOUJCNEY0QUVGODIxRUY3NAotOjEwRkNDMDAwNzM4QkM0QTU5NjVGNjUzMUM0QTVBQTc3RjQ0Nzk0NkU3QgotOjEwRkNEMDAwNjkzRkYzREIwNDFGQjBDQUEzM0ZFQURDRkY3MDI2RTZFRQotOjEwRkNFMDAwRUQzOEFFRTU1QzNGNTg2QjQ1QkEzRUZBQzhDNUQ1NDAyNQotOjEwRkNGMDAwQjdGMzdFMjgxMEQwREI4OUQ3NUQwRkYyQjBCQTQ5NzAxOAotOjEwRkQwMDAwODA5RkI4RjQ4N0FDN0QyOTZEMEZFMzNFRkE3MzQ2NUZBMAotOjEwRkQxMDAwOTRDRTFEQjAwRkFBRDczRkIxMUZFQjZGMTQxQzAwRkY4QwotOjEwRkQyMDAwRTg4NjYyRDQyN0NBQkMyMkMxRjI4RDlENjg0NzUwNzkwQgotOjEwRkQzMDAwODVGMTY4N0JCQzYyMTJFQzgzRUE1NTI2M0JCODYyMTVGQwotOjEwRkQ0MDAwN0E1MkU4QjM5M0JGQTc0MENDQ0VCMUIzNjgzQjY3QjQ1NwotOjEwRkQ1MDAwMDNGOUIyOUUyRUM1Mzk0MjQ4OUUwMkZERDQ3ODE5QkRFMgotOjEwRkQ2MDAwNzVCRTJBM0I2MThCRjQ0RDlGRUMxRUJENDI3RjIyRDBCNQotOjEwRkQ3MDAwNUY2Njk4RkVGNkFDQ0YzMzAyM0Q5RUY2MDkxODY3OTE5OAotOjEwRkQ4MDAwMDdGNDBCRjRGOUIyRTI5RjIxMTZCNTFFRDUxNzdERUFGMAotOjEwRkQ5MDAwRTlCMDA3RkRDMUNCNThFOTYxRkE1NEU4NTE0Rjg3Qzc3NAotOjEwRkRBMDAwMjU3MjBGOENGQkExRDU1MTM4OEZCQ0ZBMzdFRjU5Q0U5NQotOjEwRkRCMDAwRjYxOTlFQ0ZFNUQ1M0Y5MjA0RkJCQTQ0NjI3MTQwMEEyMgotOjEwRkRDMDAwNUVBQjI0MTYzN0Q2NjM1QzRGRDcxOTA3RjU2NzdDQkE0QwotOjEwRkREMDAwNzFDQzhBMEVDOUVERjEyMEI3QTkzRTRBMDJCNDlGREY2QgotOjEwRkRFMDAwNkM3RTExRTMyQkNGQkZEMjc5MjdFQTM3NkY1MTNBMDBFRgotOjEwRkRGMDAwRkM2RkI2OTIwMERBMjEzRUU0NDdFNUFEMjJDNjY5MTNGNgotOjEwRkUwMDAwMjk5MDM1NEI2NUJGMkI3MTMxMTVCRkIyMjJCRUNCQjdFMAotOjEwRkUxMDAwOUE3Qzg1QjQ3REY5RUIyN0M2NjI1Q0MyMEFBNjdGN0IxQgotOjEwRkUyMDAwNUYxMUQ4Mzk4OEI3NjMyQ0RDM0IyQTk3NTg3QzhFNUVFQgotOjEwRkUzMDAwMkZGODVEMzRCM0MzQkJERThDOTkwMzdBOUJEMENDREU0NAotOjEwRkU0MDAwMTcyQzZGQjk1NzM2QTlGQ0JCRkJBMjY1QTUxRTlFOTM2NAotOjEwRkU1MDAwNzlFOTNBQzNGQjBBMzAzRUY1RkI3NjRBNUM0RUQ3Q0JENAotOjEwRkU2MDAwOENGRUNBREI2NEQ0RTdDQTlCQjc1QzgwNzhDREYyNjNCMgotOjEwRkU3MDAwMjZCNDc3NkI5QTJGMUFDMTlFQ0RGQkQ1QUJFQzFEQzQ2RgotOjEwRkU4MDAwMzY1MTEzQTdENzIzM0VBRTU5MEM5ODIwQUVBQkI1MEExNgotOjEwRkU5MDAwQ0Y3MTY4QkUxM0YzMkQzQzFFRUQ2QkM2NkY1NUZDNkEyNwotOjEwRkVBMDAwQzdFQjVFOEFDMjhBNkRCRkI0RTE3Qjg1RUQ5QjZDNzgzRgotOjEwRkVCMDAwNUZBQUY5QUJFMzU1N0JDNEMzQjUzNEYwNzhCODNCNEVDOQotOjEwRkVDMDAwMTNFNDhGOTFFM0UxQ0VDMTNGMjgyMTdEMTZBRDhEODdFQwotOjEwRkVEMDAwMjNDRDhDQkZEMTcxNjY0NTdBMEYzNUE0NzdCREZBRTk4MQotOjEwRkVFMDAwRjMxMENGRERCNUY1OTNFNzYxREM5NTVGNUM3RTFFRTIzNAotOjEwRkVGMDAwNkNBODgyNjgwNzNEQTVFNjk1RjczMUZFNTU2OTE3MUY4NgotOjEwRkYwMDAwQzNFREEwOTc3Rjg5RjFDMzE3RkU2ODcyMDJCNDBCM0I2MwotOjEwRkYxMDAwNEVBNzgwRkU3MTYxQ0JERjkyMjAyRTc4RDk4RUE5RThBMgotOjEwRkYyMDAwREY1OUI2M0QwRkRGQkRFRENEOUUwNUZBRjVGNTIzN0UxOQotOjEwRkYzMDAwNTlCRjZFN0I1QUY3NjAzQ0QwNzlCQUVFQzAyNzQyNzE0OAotOjEwRkY0MDAwOEUyRDU1MkM3RUQ0QzFFMzFCMzc0NzhFMTdFRjExQ0Y3MgotOjEwRkY1MDAwRDgzQUVCQUUyOUMwMUY1Qjk5OUVEMDY3NUNFMzYxQkFDQgotOjEwRkY2MDAwOUUzN0Y0NjMxRDM3RjNGOEQ1OTYzQkJFMzJBRUYxM0NCNQotOjEwRkY3MDAwRkM4M0FFRDdCODE4NkQ3Q0U4QTdBRDhCN0ZGMTJDOTRDRAotOjEwRkY4MDAwQjUyNkY0MUFENzE4RTgwN0ZFOTQ3OEY0Q0ZBMzVERDkwNAotOjEwRkY5MDAwMzE4OUIwREVGRjgxRjFBNEIwN0U4NTBFRTBENzlGQTY0NwotOjEwRkZBMDAwODBCRkY4OEMxQzQ0QkY0NDcwODcwOUVGNkI5NkVGMzgxNAotOjEwRkZCMDAwOEFGQkU5QzJGNjQzMThFRjRENzg1Q0Y4MDUxMkZBQjFGNgotOjEwRkZDMDAwRjg1REVFMDNBQUQ5Njg2NUYxOTA3QzFEMjA1RUQyNjFEMAotOjEwRkZEMDAwQzNFRjNDMkU5MkQxQjUxMjJGRDk1QjlDRTRCMjk4MzQ3QQotOjEwRkZFMDAwRkUzRTBCOEJFN0FDREFGODAxOEYzRjBDQUY5QjMwMDk3QwotOjEwRkZGMDAwRDZBQkYzMkJFMzUwMTUzQ0Q4MDEwRjEzRDU3MUMwOTE0QwotOjAyMDAwMDAyMTAwMEVDCi06MTAwMDAwMDBFMzUyNDM3MUMwQkE3NTgzRjUwNDNFMUU4QUYzQTVGOTI1Ci06MTAwMDEwMDBBMTEwRUZFOTEzOEU0NjhBMkJCRkIwODFDNTBGNUY5MDA4Ci06MTAwMDIwMDAyM0RGOEY1NkUyODI2QjYyNzRGQkQ2RDdCRjc4RTBCRUM3Ci06MTAwMDMwMDBFNkYxNzVGMTM0M0ZDNkExQTExQjA1NUY1RDU3MjNGM0JGCi06MTAwMDQwMDBGNzI3NjM4NDZGNjRCNzg1RUU5QjU0MEFGQUZCMkM0RjQ1Ci06MTAwMDUwMDBDNEMwN0Q5OUQ2NEUyM0JFOTNBMkQ4NTU3Q0JFNUREQzJDCi06MTAwMDYwMDBERkQ2RjU4QTg4NzFBMkY1MkQ3QjkwQkZFQkY5NDczNTc1Ci06MTAwMDcwMDAzRjQ3RDE4Rjc3MjMxRjZGNzUxQjkzMUY1RDVCQUQzRThECi06MTAwMDgwMDAwQjg1RDNCNUZCNERBNEVCRUFDRDlEMThBN0JBQkY3OTdDCi06MTAwMDkwMDA5QkIxNDM3NUZFMENGMkMzQTcxQTdGRDc2QkJCQzYyMjc4Ci06MTAwMEEwMDAzRkU3RUZBMkU5RkJEOUNBRjk2MzhEM0Y3MjNGMzU5QjY5Ci06MTAwMEIwMDAyRjZBRkFBOUYwQjYxOEVEOTZCRUZCM0IyN0I5RUUwNUZDCi06MTAwMEMwMDA3OEU3REE5OTFFNzVBRTQ1OUNFNjhCRDBGRkNGNjI2NDY3Ci06MTAwMEQwMDA2RTU3MzczMjNGMzg5NUEzRjgzRTlDOTVCRDA3MjdEQTE3Ci06MTAwMEUwMDBBMjUxMkY1QjY2OUQ3NDBDREUyMTVENjYzNTYyNUNDQzhGCi06MTAwMEYwMDBDQTNBMUU0N0YzMjM2NzMyQUNGNzRBRUJFRDA0QzZCQjlFCi06MTAwMTAwMDAxQUYwQUJCMkVGNjVCQjlCODAzRTI3MjcxNzY1QUFDRkRECi06MTAwMTEwMDA2MTk0RjExQjA3MTg4ODRGQkQ4RkFERDMwNjgyN0Q0QUNECi06MTAwMTIwMDAyNEVGNTAxOEM3OUQ2OTdGOTU0MDJFQjY3Qjk4N0Y5RjFFCi06MTAwMTMwMDA1QzNEMzEwMkJFQjc0QkY2N0QwOTE0NkU3QkJFRTAwNDE4Ci06MTAwMTQwMDBENzZDNEZCQTY3RjA0MzdFMDY5N0Y2MUQ1REJDNTM0N0U4Ci06MTAwMTUwMDBFNzc3Qzk2OTQwM0REMTZBMDhEODY5MTU2MjhENkE0RjUxCi06MTAwMTYwMDA0NjAzRDc0MTFDNTIxMjVFQTVDMDc4ODlDNzNDRTYxMUYwCi06MTAwMTcwMDA3MDNGRDQ0NkE4REEwQUY1OUM5MkU2NUQ5NUQ4NDk5MjdDCi06MTAwMTgwMDBFRTlEMTU3Mjc4MDRBNTU3MEJBNzU3QzU1RjY3NjVGRkVECi06MTAwMTkwMDBBNjcwM0JGMEZEOTZCODBDNTIwN0U0QkJENkVBNDY3RDRDCi06MTAwMUEwMDBFMjI5OUIwQkVGM0ZEMkRGNjg4ODkzODgyN0QxNEVGNTc5Ci06MTAwMUIwMDBCQjUwQjQ1RkNEN0QzQkRBQUYyNjFGRTdEMkU2MTNBNjc2Ci06MTAwMUMwMDA0OTI3MjNDOTlCMDQzRThFMDJEMTgyNzg4ODlCNkFFMDJFCi06MTAwMUQwMDBGQUIyQUI3MDY0NTI3OERDNzE4OUM0MTk4MEYyM0IyQzlFCi06MTAwMUUwMDA3ODhGODA2RTJGQUY3QTFFMTY4Qjc2REM3NDdDMUEzRTY5Ci06MTAwMUYwMDAxMTlCRDFFMTM1QjA3MTZBQkVEQjg5MDNERjQ3QTdFMzBDCi06MTAwMjAwMDAzREFFMUJBRjI2NkZCNTcwN0UyNzExMDlGODlEQzVEQzhBCi06MTAwMjEwMDA0RTM4RkUyRjY5RjBCRDRBMkE4QTRGMjI0QzY0QzIzOEZDCi06MTAwMjIwMDBFOTMwMjFERTI1OTZDRjgzRjZBRkE5NkYwN0VGMDFFQjBBCi06MTAwMjMwMDA1RjBCODcwQ0I1QUJFRkI1REVDMEU1RTAxMTRCNTE4QTIzCi06MTAwMjQwMDA4NUVFOTNBQ0UxQjUxOEI4OUQ5RDJDQjg0RTRFQTA2NUQ3Ci06MTAwMjUwMDBGRTAxQzg5RkQyOTZFNzYxNUM4QUQwQzhFODZBQzQ1QTlBCi06MTAwMjYwMDA4MkZCNjY0NDkwQzc1NUFEOEE0NjNERDU2NDI2REVBODFDCi06MTAwMjcwMDBGMTcwM0Y4RTc4RTVGMUQwOEI4RjlGM0YzOTU2MTgyODZCCi06MTAwMjgwMDAyODY5MERBNTM1REFDRTFGQ0MzNTJDQTY4QkQwMDI0NUJBCi06MTAwMjkwMDAxNEZFMTA4QjZCMENGNDVGM0ZDMzlENkMxODA3RDMxQkNGCi06MTAwMkEwMDA1NkJGNzcyOEVFREE2QkMxNjM2OEE4MUJCQUZGQzAxNDhCCi06MTAwMkIwMDA2NDIxRjgyRTA4RjEwRUREMEY3MkI4NTFDOTUzQzYwRTM1Ci06MTAwMkMwMDBFRjA2MzQ0Njg3RjIyRTMzRTVGNzhENjkyQzdGRjNEQTlCCi06MTAwMkQwMDBBMUY1RjA3RTREQTdCREU4NjYwQjhDQzc2Q0JGMEVDRkI1Ci06MTAwMkUwMDBDMzAyRjE5QUY3RDU3QjkzMkZDQTM4NDc2RjBDRTRDMTRDCi06MTAwMkYwMDBGQkM3QjcwN0Q5RkJDNTIzQURBMTdCRkMyODhGMzc1OUI2Ci06MTAwMzAwMDA5NDdDMDBFRDhCQTJENjQzQzhEN0FBNUEwRTYxQjkwMURFCi06MTAwMzEwMDBGMjM0MUQ5RTEwQzgxQjQyRTc3OUJGNjU0QzQxRjJCNTBGCi06MTAwMzIwMDAxNDVFNkI3MTMyM0NDMUIxRDAzMjY2QkZBNEMxQzNCODk4Ci06MTAwMzMwMDBGQUJERDk2MTNDNDgyQjZFRDBFMUUxODZBRjg1ODc4NTU3Ci06MTAwMzQwMDA2QjZGQTg4N0Y3NTVGQTNCNkY0QTE3MEIwMDVGRDM3M0EzCi06MTAwMzUwMDAwQ0Y4OEVEQkM0NjMxNkY0QkZEMDVGMTRDQTIzMEU2NzlCCi06MTAwMzYwMDA0MzJGRjdCQzE1M0I4NUMyMjk1N0QzOTdEMjRFQTFBQjdCCi06MTAwMzcwMDBERUU4MjY5REQ4QUY2M0VGODM2QUU5RTdERjJEQUU4NzFECi06MTAwMzgwMDAwMERFMzI4QjJCREQ5Njg4RjNDNzc3MDVBNkJCOEI4QkZGCi06MTAwMzkwMDBGMjEzQzI3NDREMkNFRTA5RjBBRUZFMTFDQjgyMUY1QTNGCi06MTAwM0EwMDA1NEZFREFFOTM5NEJDNTM0M0FERTFGMDEyM0I4MzEzQzNCCi06MTAwM0IwMDA5RkM0RTVERUE4NTE3NDlFODkyRTAzQzZENTFGQjFCODJGCi06MTAwM0MwMDA1NzQwM0JEQjlDNjAwMDYyQ0IyNjEyRjcwNDQxMENGN0UwCi06MTAwM0QwMDBBM0VDOEZGQTFEQ0M4RUFGMkYzNkY4NTZCMEYzNjBGQzJECi06MTAwM0UwMDBCQjFENjFGQUU4RDBEMTQ3OTBEMTQ3NUIyN0QyNDdCNTEyCi06MTAwM0YwMDBCRjkzRDE0NzVCNUQ2RTM0M0Y1NzAzM0JCQTkxMDRDNzRGCi06MTAwNDAwMDBDMUJBMzc1OTBBMEJBNDYxOTQ2RTYyODJGNTQwMzdCMkMzCi06MTAwNDEwMDBGN0I2ODJDMjI4QzRFQjNBMTg1RjhGRjVFMUUzNTJFNkUzCi06MTAwNDIwMDBENURCRkEzNjFFNDhGQjcxMDZEODk5MDcwRDc4MUVBNjUzCi06MTAwNDMwMDBFMDREQTlCN0MzQzJFMjQ2RkZDREU2N0UxMUZBQTk5OTA1Ci06MTAwNDQwMDBENEIxMUY5NjZGRUI4MTNGNjA1Qzg3RURFMENDNUREMDRGCi06MTAwNDUwMDBERTM2OUJBRTkwMjNEQzZGRTNDMTE1Rjg0RTc4MjM3RjI4Ci06MTAwNDYwMDBENzNCOTYwNEJEMjBENzdCQzcwN0RCM0YyMTdDODBERUNFCi06MTAwNDcwMDA5MzAxRjhFOEM0RkRGMjBBQkY2Nzk2REQyNkI4NDBDRUM2Ci06MTAwNDgwMDAwRjhGNjFFRjkwQkM2RTYxNzZGNUJCMTY5MUE3NENBRkY0Ci06MTAwNDkwMDA0OTNDQjg1QjA0RkIyQjdCOTUwMUVCMjc0MjlBQTE5RTVDCi06MTAwNEEwMDBGRjJBNUU1RkQyRjhERDk1NzU1NUU4ODk3MkQyMTg3ODFCCi06MTAwNEIwMDBDRkU0Rjk3OEY3MUUyREZEQzRDN0E0QTlFMDI5RUQxRUVECi06MTAwNEMwMDBGNzkwQTI0NTk0NTAyNkVFNURGMDEwQzg1NTRBM0YzRTg1Ci06MTAwNEQwMDA0REJCMzE3MjE0RTAyRDQ0M0Y5NDNFMjNBRDBGNkQ3NzM4Ci06MTAwNEUwMDA4OEFENkI3QzBDRTgwQjVCRjYyRTE1RjE1RDhFN0VBRTU1Ci06MTAwNEYwMDA2QjE2QkM0NzQ5RUI2N0M1OTBEQUFEQjQ3RDU2MkM0RDAxCi06MTAwNTAwMDAyMTlGQzBGMzAzNzk3RTA4NEJEMzNGNzQxQTA0RkE3RDEwCi06MTAwNTEwMDAwM0Y3Q0I5RUU1NzgyNTkyRkRCQTk5NjMyMENGRjRCODE2Ci06MTAwNTIwMDBFQ0U0MTg5NDBCQ0FCRTg1Njc1NEUwNUM1QkUyRTdEQjQxCi06MTAwNTMwMDA2OUMxMzQwM0FDOUJCMjhGQTVBMDIxNjBBNTQyMkI0REFECi06MTAwNTQwMDA3MjE4MjBDRUUxNUQ4RkJCMDhDRTBCN0JFMzNCQjc1RjFCCi06MTAwNTUwMDBDQkVFODFFQUJGN0ZDRUM3RjM4REY1RUJCRkY0QjgyRkFBCi06MTAwNTYwMDBGRTM5RTBCN0NBRENGMUY4NEM5QUFGQkVGNjMyRkE2OTUwCi06MTAwNTcwMDA1N0M0NTRERkZDNTVFRjY4RThDN0ZGRUVENURGQzQwMDcxCi06MTAwNTgwMDAxREZBM0YzMzQ1QkMzRjM1Q0VDQUU4RjE4MDY3MEVCNjUxCi06MTAwNTkwMDBDQkUyRUYwNDkyODE0QTFDQjIyQUNFMTVDQUI4NUU4NjFECi06MTAwNUEwMDA0Qjk5ODZERjUxQ0ZCQTA1NTkyMEFDQTc1NzhBODdGNkY5Ci06MTAwNUIwMDAzMUE5NzhBRTc4QUIyRUFFNTUzOTJGQkIyNUMwRkM4MDYzCi06MTAwNUMwMDA1OUIxQkU0MkVDRUZGQTc0RjZGNzQ5M0U2M0ZBOTI5OURDCi06MTAwNUQwMDBGRTBGQ0VBMUE2RjI3MzMzRDczMUZCNUUxMDg3NTkwOTA3Ci06MTAwNUUwMDA4REY5MDgzRjM2MTVGRDVBMzk0NEZCRkU0MUQ2NDBBRjIwCi06MTAwNUYwMDA2NDgwRjJGNDU0ODQ5NzY3RDY5NUE3MTNGNDVCOTE2QkVCCi06MTAwNjAwMDBBRUMzRjk0RDI1MkFGRDBDRTU0NkEzMTNGOEYxRjREMTRDCi06MTAwNjEwMDA5NEZFRjlGN0NCRjRCRkUxMjYzMjdGODZDQUNFQjhDRDdGCi06MTAwNjIwMDA3MTVGNTFCRTQ2NkY2OUM0Nzc4NTdFRkJCOTM4M0Y1MjEyCi06MTAwNjMwMDBGQ0M1NjMyMTNDMTcxNTQxM0M4MDFFOEZCOTBFNjE5NUE2Ci06MTAwNjQwMDBENUQxMTNERjdBRkNFOUYxQURFMDUxOEZCNzlDMEY5RDU2Ci06MTAwNjUwMDBGOUYxOEU5RUY4RDFFMzIzN0M3RUU5NUIwQkVCMzA3NURDCi06MTAwNjYwMDBCNDg4RjI0QkMxN0I0RkZDQjBGNUZBRURCNUI0OUUwMEY3Ci06MTAwNjcwMDBGNDQyRjEwREY4NEMxNzMwQkUyNzJCODZEMzRGNkMzQTVECi06MTAwNjgwMDBFMjM3MEIxNEMwMDE0ODBGOThEN0UzNTU4RkM3QUMwNDZECi06MTAwNjkwMDBERTNFODFENURGMEZGODFBODlGQzAwRUQyMTY1RERCMjYxCi06MTAwNkEwMDBEMjZCRjdDNjQxREVDNEU4NENEMUFCQTc3MkJDNTBCRERCCi06MTAwNkIwMDAxQUY1RTZCQzQ0MkJGQTlCNDBBRjlFOUExNEM2NUI1RUNCCi06MTAwNkMwMDAxNTFCNTdERTQ4Q0IwQjYwOUZGRTBBRkNEMUIxMDgwNjE0Ci06MTAwNkQwMDBERkM1QkM5NUYwNUZFMDU2M0M1RkNBRTI1OTA1REZCNzY1Ci06MTAwNkUwMDA3RUE2RDU5M0E3RkEwQkNFODJGRTNERENFNDVFNjUwNUJGCi06MTAwNkYwMDA3RjhDMTA4N0U3NzkxNEZGQzc3NUY4RDdCNkIzNkJGMzEzCi06MTAwNzAwMDA3QTdDRkMwQUZFMzFCOTI3REUxNDdBQUJCMzcyRkQ3QzI5Ci06MTAwNzEwMDAzMDE5MEFGQUYyRDgzNzMzNjM4MTdGMTM3RjdDNDRCRkU0Ci06MTAwNzIwMDBDNEM0NjM0NTIxMzg5QzZFOTE5RTA1RTIwRTdEQjdBNzM3Ci06MTAwNzMwMDA3RjBCM0U3NjkwNEE0OTE1MUZCQjUzNzJBRkIzREVEODhDCi06MTAwNzQwMDA5MzhGMjlFQjM1ODVBRkM3MTRFMkREMDU3RUE2Mjk0NERBCi06MTAwNzUwMDBGQTRCQzgxRTQ4MERDRkZGNzkyQkY3QjMwRDIxNDM2MDJDCi06MTAwNzYwMDA5RTVGNTgxQzhDRkZGMzc5ODZFNjRERDU0QkU4M0Y5Qjg2Ci06MTAwNzcwMDBGNzlGNkRCNkUwRkQxQjEyOTRCQTQyNzg0RUMzRjc5MzEzCi06MTAwNzgwMDBCQ0M2RjhGMDM4NjQ2NUJENTM2QTA5RDNFN0U2RTJGQkZFCi06MTAwNzkwMDBEOTE0MkZFNENCOThGMDM4QjY1OTA1MDlERjBGRTJFM0ZFCi06MTAwN0EwMDAzOERGNkNGNjQyOUNEQkQzOTJGQjBEMkJGODNEODQ4MzQzCi06MTAwN0IwMDA2MzcxN0U1MjYwMTRDODNGN0RGOUU1QjZCREQ1NTA0RUQ5Ci06MTAwN0MwMDBFQjk1NjAzRDNFRkUwQTkxRjkxRjgyM0I0Q0JFMTc1MkVECi06MTAwN0QwMDA3QkQ3NTNFOUY2NDYzOUExRDA3MTM2REM3QkJEMDFFODAxCi06MTAwN0UwMDAzRTI4QzJCOEZERkM1QzY1RTc0NTc2Q0ZDMTQ1RUNBQjYxCi06MTAwN0YwMDBBRUE3RjBGNjVENjJGNzAyRjIyOERCODE3QTdBRkFFREI1Ci06MTAwODAwMDA4QjRFRjM0OTcwMUVCNEQzRDNBQjIyQ0YxQkY4RkQ1QkU0Ci06MTAwODEwMDA0NTNGQkI2ODc1QkYwRkVCREVDMEVGRTNGQTJGOEVCQTIyCi06MTAwODIwMDAwRUQ2RTcxQkQzRDU2MTJENUQyOUY0NDRFOUVCMzhGNEVFCi06MTAwODMwMDBEMzlERjlGMTNBNTBDQkRGQ0JCQzlDMDRGMjUxRDFFMzBDCi06MTAwODQwMDBDM0ZBOEFFQjYzQThENzlCM0UzRkRDRTZFRUIyN0U4NTE3Ci06MTAwODUwMDAzRUFGRTgzNTdERDkyMzY0QUY0NDQ2RDM3MUNFRTNFQjk4Ci06MTAwODYwMDAzM0Q3REMyRUIzOEJDNjQxOENEMzZGODg1NkRFQ0I3MzY3Ci06MTAwODcwMDA0NDgzM0UzOUFGMjFFRDk1NjYzODU3QUM2MzdFRjkwNzY2Ci06MTAwODgwMDA2QjY1OEQzREVDODZEQkJFRDg5RUJENjczQjdGQjlCNjAwCi06MTAwODkwMDBGQzIzOEFFRjQxRjFGOENFQURENjhFODZGRDkxMTQ3RTExCi06MTAwOEEwMDBDRkI3NjdCRjA2MkZDOEM5NzkyM0EzMzE3RTRFREZBRjBDCi06MTAwOEIwMDA3RTdFRkE3RUY1RkQzNTcwRkJBQUMxRDgzOERBQTlEMjYyCi06MTAwOEMwMDA0RkVDMzYxNjQ3N0Q2OUNEOTNDREYwMTQ1RTZGRjg3MzBCCi06MTAwOEQwMDA5Qjg3QjhENDdGNkZBRUEzMjE3QTRFQTRGNzY4MTQ3OEIzCi06MTAwOEUwMDAwQUJFRTdDMkNCOThFMDBGQTg5NUZGMUVFOTlEREQ2QzFDCi06MTAwOEYwMDAzN0YzMTNGNEQ2RUY4ODYwM0VFQTgzODZBNzAzMjJFODM1Ci06MTAwOTAwMDBGNTIzODIwNEY1RjBFQ0EwQ0JCMDUwNjMwRjMwN0JCOTM3Ci06MTAwOTEwMDA4NzNEMDBFRkE0RDA3QzY1RUIyRTY2MEZCNEQ0QTE1REJCCi06MTAwOTIwMDA1MTQ5RUQwQTkwM0IxQkUwMUQ5MEMxN0M0MDE5NjgyNzlFCi06MTAwOTMwMDA4NEVDNUU4OEFGQ0E4Njc3MzJCOTVEMEM0RkE3QTUzN0M1Ci06MTAwOTQwMDBCMkZBMzMxRjRGMzczNThDMDBCQkQ1OUQwQzJGOTNDRTk5Ci06MTAwOTUwMDBCNDVERkJBODk5REE1N0Y1QTkyNDhBNTBGQkFBQzg3NjlBCi06MTAwOTYwMDBFRDc3RDY0RUEyREMzQkRFMjVDMEJCQTQzNEZGQTg2NUU0Ci06MTAwOTcwMDA3MkZGRURFQzk5QjZEMThGODJCRjgxREE2N0I3RDk1NDk3Ci06MTAwOTgwMDA3NjZGNkZGQkUzNjY5QjAzRjFEOURCRkVFOEI0MTdDRDBFCi06MTAwOTkwMDAwNDM4OEFERjgyRjIyMUU0MDdGRTI4QkVGRkEzNDJGNDc2Ci06MTAwOUEwMDAxNzBCNzg1M0U4RTVGNkU1MEJEMUNFODhCQUU2NkEwQTZDCi06MTAwOUIwMDBDNDkzNjU3MzNBNzBEQkI4NUYzNjg2QzFBOTg5NjE3MEVDCi06MTAwOUMwMDAyNjRBNkUzN0Y0RDNCREZCRUEyOEYwM0JCRjNCRkEwNDVFCi06MTAwOUQwMDBEQTc5N0UyQkYzREIxRkY0OTQxNUE5RTNEQjZCNkQwMjUwCi06MTAwOUUwMDBBNzk3QzAxMEQ4N0Y3N0RDQjgyNzAxRUM5NTZDNTlDMDY5Ci06MTAwOUYwMDBGNzRFRkRCMkVGRTlGMTk5QzA5RjY2REI1N0QyMjk2NjQ5Ci06MTAwQTAwMDA0RjM2RTJGRDMyN0Y1NDYwQzhDMzJBM0RDRUNGREY0RDYyCi06MTAwQTEwMDBGNTVGREMzRjQ0MURGRkRDNkVDREFCQjUzMUY4MjJDMDg1Ci06MTAwQTIwMDBDRkNFREM3QjBDRjQ4MERFRTQ0RTU4QUVCODA0OTAyQkM1Ci06MTAwQTMwMDBFNEVBQTEyNDNDNUY2QURENjcwMzlGNjgxNzdGRTdFMDczCi06MTAwQTQwMDA3Q0VCOUVBNDA1MzRBRERBRjI5RjM2QjBFM0VBMzgzRTgzCi06MTAwQTUwMDBDRTRCRURGODVFNTNFNTc2MTFERjEzQTFGRDI2M0QwMDg4Ci06MTAwQTYwMDA3RUVCRDY4NTU5RUNERTFGQkJBRkE2QzhENUYxOUZFRjU0Ci06MTAwQTcwMDAxOTUyQzQ5Qzg5NzhGRjRDRDEzN0E3OThCRDNFMTg5RjY2Ci06MTAwQTgwMDBCRjhFRkQxRENDMjlCQUY3Qzk2RUU1RUY5M0U5RjVDRjBFCi06MTAwQTkwMDA2NzZDQjJFMjJGQzNGOEE5NjU3NkQ2NEY2RkZCMkJGQkNDCi06MTAwQUEwMDBCMzA0RTI1M0VEQkY2QzI5MjBDMkY4QjMzRjRCQzJFRjUxCi06MTAwQUIwMDBFNzBGQTQzRDU1MDhGNjNEOTE5RDIzMDFBQzQ0RjZBMkY1Ci06MTAwQUMwMDA3RUNCQ0ZBN0U4NkYyRkJDN0JCRTkzNjdERTZFQkQzQ0FECi06MTAwQUQwMDBFQjY2MjQ2RTJBRDcwNEQwQzdEQzAzOThEMzkxQzkwN0VDCi06MTAwQUUwMDA0NUZGQkJGNTMzQURERjU1QUYwNzJCNzIzMkQ3M0Y2RUY1Ci06MTAwQUYwMDBENTEwMDI3ODc3Q0NDMkZCMTMwNzI0OENGN0QyRUJDOTUwCi06MTAwQjAwMDA1MzgzMDVCREU4QzM0RjIwN0Q2RDZENEQ4RjAxN0JGRTg2Ci06MTAwQjEwMDBERjYwOUYwMEREQjY1RUM2Rjc4M0FBNDlFMDFFNzhDNzk2Ci06MTAwQjIwMDBBOUJBNTVCNDA3NjBGQzI0RjM3QUQ4Njc4QTNFQTFFMERECi06MTAwQjMwMDBBNUVERUExRUYzNThEQTdGRjY0NTgzN0QwNTA1RjE3NkNCCi06MTAwQjQwMDBGMDJGNjg1NzRGRjhGREMxMDQ5MDY3RkVBMDg0RTcwN0I3Ci06MTAwQjUwMDBEOTE3RjdDNjJDNTRGMTQ1RkY1NTAzN0U3RkZCRUE2RThCCi06MTAwQjYwMDBFREY3NjBGQ0Y1RDA2RThCODFEOUNCN0JGN0ZGM0QwNkFFCi06MTAwQjcwMDBGOEQ0REI1NzJGMjFCQzkwM0VEMTUzNkY0NkZEM0JDRkJECi06MTAwQjgwMDAyQTg2RkNEMTZBQkQ5OTg4RDk4NzIxREU2QjZBMkMxNTJCCi06MTAwQjkwMDA2QjQyRUZGQTcwQ0U4NzY0OTU5NUY0RDQyQjQyNzgyNzk4Ci06MTAwQkEwMDAyRTA5RjBEMDQzMUY1NkYwQUNEMzMzM0VCMjcxM0Q3N0RGCi06MTAwQkIwMDAxODE5MEZFRjVFQjY1RDREQThDMDdCQzdGRTE4RkIwQTgzCi06MTAwQkMwMDA5NENGNEM4RkVBREU3QkVFQzlFOUYwRkRBMEM4REU5RDM0Ci06MTAwQkQwMDBCODJBRTI3RURBQkRCMzYyNzg4NzZBREY1MjRFOEFFQkNBCi06MTAwQkUwMDA3NjY1RDBDNTBCNkZEMUZBNTdGNjQ1MzNGRkJBRTRCQzMyCi06MTAwQkYwMDA1RTdENEYyMjVDREZDN0YxMTUxOENDQ0VFOUJDODNFMUU2Ci06MTAwQzAwMDBCREE4NkZBQ0NGNzRGNUIwRjdGRjYxNDMzRDM5NTgwMDE0Ci06MTAwQzEwMDBFMjYyRDRGQTRFMjNBQ0ZGQkZEOThBM0U2N0ZDQTUyNTE5Ci06MTAwQzIwMDAwNkY4OEI5N0U0MEUyMUI0REZCMjY4OTIwQjc0MTVBQzEyCi06MTAwQzMwMDAyMzc2QjAzM0I2MUYzMDE4NjA1RDMyMzdBNTYyNUNDRkMzCi06MTAwQzQwMDAyQkZDMUM3MzQ5NEJBMzMxNTU0NTE3NEJGODM5RDgxOTY4Ci06MTAwQzUwMDBEOTlCMTJBRkZBQkUzMjk2RjE5NzMzRkJDQTdGODE3MUVFCi06MTAwQzYwMDAxRDdGMzQ5MTkxMTFGNEQwODVCMTRDRkU2RTMzN0FBNzdCCi06MTAwQzcwMDA2Rjg2N0FDNzBENzhERjY4RUZGRTVGRUY4Nzc3OTM5NzBGCi06MTAwQzgwMDAxQzczOEMwM0JGRTA5NDU4QjYwRkRBMEVCRTUyMEY3MTdFCi06MTAwQzkwMDBDMTZEMUY4MkQ0QTI3MjY2NjNCMTY4QTBGREJFNDUxQ0ZGCi06MTAwQ0EwMDBDQ0FGNzc5OEZEQkRENjkwM0Y5NEI4MTI2MDlFMzdDNTAzCi06MTAwQ0IwMDAzMkJFRkRENjAxODNFNkRDRUMyREZFQkVFRkY1QjE4QzM1Ci06MTAwQ0MwMDAwRkE1QzYzMkJGREFENjAzQjkwOTBCNzBGRkI5NDdDNDA2Ci06MTAwQ0QwMDA4MjFGRjA2NDQ3M0Q2QzQ1QzUwRkE4RTg2RjkzMEY2RjA2Ci06MTAwQ0UwMDA5RDNFODZGRTczNzI5N0MxMEVDQkVEMzhGQzgyMDhGM0YxCi06MTAwQ0YwMDA3NTlDMjEyNDRFMjAzREY0MzkwQTZGQUMxQURFNUI1REYxCi06MTAwRDAwMDAwQzFFMURDNzZFRDhBRjBBRkVBOTA0RkU3MTA2Q0RCRjJBCi06MTAwRDEwMDBENTJFQzU0MzNDOTg4MjdGNjUxRTRBRkY4RTE2RTJEQUM3Ci06MTAwRDIwMDA2MEMxQURFNERBRkExNUZFNjhFNUVGMzE0Q0IwMTNFNUM5Ci06MTAwRDMwMDBFRjMzMjA1RDZFQjdCOTZFODlDNTcyNkYwQUU0Q0ZFQ0YwCi06MTAwRDQwMDA2MzdBRDIzNjJFNEY0OTcyRjE3MEMwOUZCMjRFRjM3OTVBCi06MTAwRDUwMDBBQThDQTdCN0ZFRUZFN0UzNTREMkFGNEJEN0FGQzgwRUNDCi06MTAwRDYwMDAyRkQyQ0Q3NjE2NEZFRUYwMDZDQ0U5MTA3N0Q2OTY4RUMwCi06MTAwRDcwMDA3RjlGNEExNTk3N0IzRjhFRkY4Q0Y2RkRDMkI2MEU4MzkwCi06MTAwRDgwMDAwMUVFOEY1NUVGMTBFMjUwRERFREE3QkUxREEyMzNBOTk1Ci06MTAwRDkwMDAwNUU5QUZFRDE4QzE3RDVDREVGQzVERTY4RkE0NzI5RkI2Ci06MTAwREEwMDBCRkVCODZFN0VCQjA3RkY4MzlGQjIwODFBNjkzRkQxQkY0Ci06MTAwREIwMDA1NjBFNDFGQzA2NkNCMEFGQzI3OEEyRkIwNkQyREE0NkYyCi06MTAwREMwMDAyM0QwRUI5MjY1MkMyREU1RTdENTRCOUFEQ0I4M0Y0QjUxCi06MTAwREQwMDBENkIzNzhDNDY1QjFBOTRDM0U3MzdBMjU4NkU4QzFGOENDCi06MTAwREUwMDBERUJBNEQ3QjhGRjAxRjVDN0U5RTZEN0Q2QTBGRjQ0QkVCCi06MTAwREYwMDBFOUVCRkI4MDhGOUJEQTlFNTgwN0MzNTVFOEY1RUM0NjdDCi06MTAwRTAwMDAxOUUxOTQ0NTZCQ0ZGMzNEQjFDQ0NGQjhGRDMwQTNGN0RBCi06MTAwRTEwMDBDOTFCRTU1Qzc4NEY2Q0IyOTdEOEMxQkZGREQ2QzY0REYzCi06MTAwRTIwMDAyMkYwRUZCNzgwOUU1M0Q5M0UwNzc5N0I2NkRGNjMzMUFFCi06MTAwRTMwMDBERjA3RjlENjY5MjBFMDQ3REY2NjI0NjU1QjU0RkI2MjczCi06MTAwRTQwMDBFRjg2MzczNEZCQjdCQ0I5NkUzQUZBRUIzQkUyMDVFMDBDCi06MTAwRTUwMDBGM0NBQkU1NUYwQkVDREU4QkMwREY3RkY5REJBRkQ5RkFECi06MTAwRTYwMDBDRkRBQjdDMkJBRDA3QTRGRjFGREZGRDQzNEJBRkZFOTc2Ci06MTAwRTcwMDBBN0I4OEQ3MTAyQzBEOTY2OENGQ0NFREM0QkRGOTBGRTJBCi06MTAwRTgwMDA0MjdDQjVBMzA3NUY3RDI5OTZGOTFGNkNFOUI0RkZFQUEwCi06MTAwRTkwMDAzQjJFQTFGRjIxMzQzRTRFMzc0RkU1MkI3NDkzMkEwMEExCi06MTAwRUEwMDBGRTFCRTkwQThFMDA3QzUxQkMwMjNENTMzRDdBRkVDQzBDCi06MTAwRUIwMDAwQ0RDOTUwNzI0M0NGRkUxRTc0QjNDMkUwNDc3OTQ2QTU5Ci06MTAwRUMwMDBCRjg2Rjk5OUIyNkZERDZGQzAzOEIyRjI2QjU3ODI5RTYwCi06MTAwRUQwMDA5RjUwRTg0NUZBM0MyQkI4ODdDNzUzNzk3NjE2RjY3MUQwCi06MTAwRUUwMDAwNDdFQjA4RUUzRTM4QUVDRUVFQjdERkZDMTQwQ0Y2NTdDCi06MTAwRUYwMDBENDYyODRGOTkwRjU4MjFERDY0NTI5NzdBQzY3RUZCREExCi06MTAwRjAwMDAxRUU2RjA5NEVGODdCRjJEQkU4MzNEREUyMTNEQ0NGMDgxCi06MTAwRjEwMDAxRDM0NDI1Q0VCMjgxRjkzNjM0NEM4QzVGRDQwMENCN0U5Ci06MTAwRjIwMDAwRjg2N0RCNjg0Q0FBRkZCNTVGMkVCQUNEQzg4NzRBQUExCi06MTAwRjMwMDBFMEUxMjNDRUI3QUVDNEIxNzkzRkNFQzdFOTA3MUY1RDZDCi06MTAwRjQwMDBBMjBBRkY4MjI0MDk2QzNGOEIwMkRCRTcyMkMwM0ZCQjcxCi06MTAwRjUwMDBFRkE2REI5MERFRUY4ODRDRUY3NkIwQjdFMkUxRUY0NzJCCi06MTAwRjYwMDA2RDQwRkE4QzlCNjZDNzdCMkY0RjQ5Q0VBODM4OEQ3RThCCi06MTAwRjcwMDBFNEMzNzRFRkE2NjdEMENFMDNGQTg1RkRERTFCRkQ5N0IwCi06MTAwRjgwMDAwMUZEOTMwODc0RUZBMzc0QUY1QTNGODUwRTI4NURGQ0YyCi06MTAwRjkwMDAxREYwQTU3Q0Q3RDM4NTcyMEVBOUUwNjU5QkVFMUM3MzZFCi06MTAwRkEwMDBBQTlERTFFOUZGMDA1MjhENkVCNTAwODAwMDAwMDAwMEFGCi06MTAwRkIwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRkJEN0QwOTdDNTRENTk4Ci06MTAwRkMwMDBENUY4N0RGMzY2QzkzMjMzOTk0Qzc2QjIzMDQ5MENBMDFFCi06MTAwRkQwMDAyQzBFNDk4MEIwRDg0RTA4MjA0QTg4QzM1MkQ3QTA5MzFGCi06MTAwRkUwMDAwMDA5NEIzNjEwOTU1Njk0ODEyMDA2OEIxODE1MkRCNkE2Ci06MTAwRkYwMDAyMDgzODVFRjQzMUI2RDEwQTg1ODgzMjYxMDExMkQ2MkE2Ci06MTAxMDAwMDBEQ0IxN0ZBNTQxOTA0NTQxMjJBODFGRUQ4N0Y1M0JFNzY0Ci06MTAxMDEwMDBEQzdCMzMzMzZGMjYwMjZBRkZFMUM3RUZFNkRFNzdERjYyCi06MTAxMDIwMDA1RENFN0VDRjM5RjdDNTZFRDMzMTM2ODQzMTA3NjNBRURFCi06MTAxMDMwMDBFNjAxOEM3RDhGM0ZCRkY0OTc4QzJEQTFFNzczMzdDRkVFCi06MTAxMDQwMDA1RTcxMjQ4MkQxQ0ZGN0YwQkZCQTc5NUU1MEJENzZDNzBBCi06MTAxMDUwMDBBRjU3MUNFOUU3QUZDRkM1NUY1MkUwRkY3MUE2Njc4OUM0Ci06MTAxMDYwMDA4QzU1RjE0N0FDNENFRjg5QjUyNUMwRkIxMTlERDY2QzcyCi06MTAxMDcwMDA5OEI0NjZFMjE5NjM4NDAzOUY3ODE5ODNGNjZGNjMxQzQyCi06MTAxMDgwMDA1NDNFQUE2RkRFRDMyQjFGQ0EzMUNDRTk4NUE2Mzk5QjBCCi06MTAxMDkwMDAzMzE1OEY5OUIxMDUzNjFCQUQ2N0Y5MjdEMzkzRERCMEIyCi06MTAxMEEwMDBERTQ2QzZDNkUzQkE5QkM1N0M3MkRERDkzNjg1QzY5OUQ1Ci06MTAxMEIwMDBFMDI5NzM4Rjg5ODM2NzY2NEY5RTdCQTBGRkY5MDc2NkRGCi06MTAxMEMwMDA0Rjk2NkQ4OEJGM0VBMTcwQkVFQTE4NDA0QjhDQzQ3RTFGCi06MTAxMEQwMDA2MzU1OTgwQ0U2OUZCRkM5RTQzMzY1MzJCNjA1OUZDNERCCi06MTAxMEUwMDBDMzJBREJBMzdDOUIzMkZERUZEOUY0Q0NBNUI3MzM5NkEyCi06MTAxMEYwMDA2QkNCQTQ3NUMxRUE1QUIxRUU1ODY4NjQ5N0MxQkNERkU2Ci06MTAxMTAwMDA2Njk2QjU5QkUxRDFENTFEREVFMjgxQjA4RjJENDZFRjBECi06MTAxMTEwMDBENDg5OTkzODk4RjMxQTFDRkY5QTYyOURFRDAxNTg2QTk4Ci06MTAxMTIwMDBBQ0NCQTYzODA3RDA5MjY5NUVCNjhGQ0Y5Mzk3RURFQzIzCi06MTAxMTMwMDBDRkIyQTFFRTcwRTZCOTJEOEM4RDEyRjg2MkFEMzBDOTM4Ci06MTAxMTQwMDA3MDNGMUM0MkYxQzZFMUQ5MTM1RTE3MjA3Qzg2NTAxNzEwCi06MTAxMTUwMDA3QTdFRTJENUE4MUI3RDY2RkZGMzQ0MDFCRjJGNjM3ODNBCi06MTAxMTYwMDBGOUFEQzFEM0RCNjYwRTFEMjc2MDNFNTU0OTY2Q0NDQTdBCi06MTAxMTcwMDAzQzRCNTU1Q0ZGMjg2NkRCRTRGMDNGNzc4QzYyMkUxQzBECi06MTAxMTgwMDA3RjlBMTg1N0I2Q0JGQThGQTZBRkFFMTBGQTlBODY3ODI4Ci06MTAxMTkwMDBBRDhFRTgyMkJBRUE1M0QwNjk3NEMwQkM0QzE5REQ4QjFECi06MTAxMUEwMDBDMUZBOThFRURBNUVBQzgwQkFFQTcxQkQwMDQ4NTUyOTAyCi06MTAxMUIwMDBFMEVCQzdGNjg0OEQzM0Q3MjM5RUQ5MDExM0NCQzkwQzNFCi06MTAxMUMwMDBERDY3QjVDREMwRTFCNkQxMzBGQTY2RTg5N0UwNjVCODI1Ci06MTAxMUQwMDAwM0MwOEI4M0UzODUzNURFOEFGODZCREM2ODYyODhEN0QxCi06MTAxMUUwMDA2RjYzMzlEQ0FDNTNEOTY4MDNGNEI3NDI3RjI0RjdDNjg4Ci06MTAxMUYwMDBBOTlFMDM1NzQxQkQzMUQ5RTg1MDYwOUUxMzg2MkVDMjg3Ci06MTAxMjAwMDBGQjg5QUJBMDhERThDM0FEMjBCRTRGQkMzQUUyOUFERkFDCi06MTAxMjEwMDA0MEJCNzdBMjhFRTVDMDhCNUI4REIwMDVBNEMzQkZBNzkyCi06MTAxMjIwMDBGOTM2Mjk0OEE3MkRDNDI3RjNDN0IyQzEyNjc4REVCRUY4Ci06MTAxMjMwMDA2OTE4RDFENUFDRTIyQzA1RTk3NkNFRTY1ODA1OUZEQkRFCi06MTAxMjQwMDBDN0Q4NzQyQUYzRUY2M0Q4NDI5NUU4MTNGOEEwREUxNkU2Ci06MTAxMjUwMDA4MDhGNjFERTNBMTVFMUQ1M0JDRTkzNkM4ODY1RUMxMTQ5Ci06MTAxMjYwMDBEQjM1RTMyM0QyODFDRTMyNTkyNDFCQ0NEODQzNTA1RkU3Ci06MTAxMjcwMDAwOTcwNkJCNEJCMTQxNjRCRjUwNjczMEFGMTIxNjMyMzk2Ci06MTAxMjgwMDAwOEFFQUQwQ0YwRDQxOEQ1NUQ3NzQ1NjBGRjJDNUU3RkJECi06MTAxMjkwMDBBNEYxRUE4Njg2MzRDNjlFODk3MTM1MjI5RTNFMzBCQjEzCi06MTAxMkEwMDAxRkMxRjk4NzI2RDVBOTQ0RTc4MkFFN0Y4MENFN0UxMjgyCi06MTAxMkIwMDBCREQ0MkUyQzYyODdGM0UwRjcwRTY2MEVBNDFCOTA0Nzc4Ci06MTAxMkMwMDBCNzZFMDZGODk1RTgzRDlCNzA1RDM1QkQ4RTNFOEVDM0NBCi06MTAxMkQwMDBENUI2N0M2NUY0ODRBMTdCQjk4RTc4MjExN0Q4Qzc4Q0VDCi06MTAxMkUwMDBGMDExRUZBRTUzQ0JDRDdFQjlCM0M1NjYxNzRDRUQ1MkJFCi06MTAxMkYwMDAyNjVCRkNGQzg2NzJFQjc5MzM5NzNCNTk1MDlBMjI5ODE3Ci06MTAxMzAwMDBENzYyQzc3RTNFQTIyM0FDQzdFNEZBRTVEMUNBNjJERDRDCi06MTAxMzEwMDA3ODVGMTgzRTdFMEQ4OUVCNjc5NENGQUNFNTdGRkZGMkQ2Ci06MTAxMzIwMDA5QkExRDAxRjdGNTc4OTlGNUVFM0ZDQzRFNUY1QTNDNTUxCi06MTAxMzMwMDA5RjI2MjIzQzkwOTNGMEJEREJDNTFDRUI5NzNBREZFQTc5Ci06MTAxMzQwMDA4Qjc0Qjk1RjY1OUJBMDNFRDg2NEY0MkEzMUI4NkRFNjEyCi06MTAxMzUwMDBCMDI1OEFGMTkwMEQ1Qjk0NTZDQjIwQThGRjRCNjEyRUVGCi06MTAxMzYwMDBDMEMzRTk3RkE5NTRBRUJGRDczRDNFMTNERUFGRDlBMUJDCi06MTAxMzcwMDA3MzJFODU3RTM1MkQwQUYxODNCMzM3RjM0NTAwMUQzNzczCi06MTAxMzgwMDA0NzU5MDczMTE4QUY3MEI3RDk2NTgwRjZEMzRBMDRDOUY5Ci06MTAxMzkwMDA2NTlDMDBENzYxOTBFQjJGRThDQTY4ODJFN0Y1MkRDMDA1Ci06MTAxM0EwMDA3RjUwM0Q1RDA4QThDNkY1RUE5RDMxNkM4MDFGQkU4MzY1Ci06MTAxM0IwMDBERTdDQjQxRkVDMDBEQTFCOURDODY3NEY0NUYyRjE5RjNECi06MTAxM0MwMDA4QUNDRjA4MTEwODM1MkJFRTc4ODAxNEE2MTU5ODI2RTRGCi06MTAxM0QwMDBGNDdBQzY2MjAwNEY1MDc4QjExQ0I1MzBEQkE1MDczQ0VCCi06MTAxM0UwMDAyQjdBRTYzNTAwQkU0Njc1QjVBQTA4OUZBQzJFODc4RUNGCi06MTAxM0YwMDA5OUZERjNFOUJCMThFRDNCNEJFRkQwMzkwM0Y0RDVENjlCCi06MTAxNDAwMDBCRENGQUI3QTgwRUJEMDMxOERGNTJBOTQ4OTMxOUU2RkI4Ci06MTAxNDEwMDAxMERFMjM0NkQ1RDU2MzdCNUNCMTU3RjU0MEZGN0NBNTM0Ci06MTAxNDIwMDA2RUI3MDVFOUVDMUFFNjQ0QjkyQUY5MjRBRTkzQjVDMUMyCi06MTAxNDMwMDA3MjU5RUM4MTRFOTcxNURBNDcxQzc3QjUwRDgwRkRDN0MwCi06MTAxNDQwMDBCODk5ODJFMzQ5RkQwRDdDQzY2MjkxMEVFMzVEQ0E0NDAyCi06MTAxNDUwMDAxODY3RTgzRjE4QzE0NzhFQjM3NUVGNjgwNUY5M0VCRUJGCi06MTAxNDYwMDA2MzhDRTIxODEwNEFFNzZCOThFM0I3MzhBRTc3OUZDRUVCCi06MTAxNDcwMDA4OUY4NzUzNDMzRDcwNjk0MTM3RkJBNjIwQ0MyNEJGNkUxCi06MTAxNDgwMDBFRjFEQ0JGNUNBNDg4RkE3MDg0NDE1RUUyNzA2RTcxREM4Ci06MTAxNDkwMDA3RUEzNkZCNzAxRDYzMzZDOTY3N0I3RDExMUIwOUZEOUMxCi06MTAxNEEwMDA4Q0M2NEJFREY0RDIzRTUyMEU3ODBBQjFDQ0I2QzZEMjAxCi06MTAxNEIwMDAzODIzOEVCN0I2MEQ4MDdFNDk3NUIwMUY2ODRGRUY3ODIwCi06MTAxNEMwMDA0RjQxQjhBNkQ3NzUyODg4Q0ZBRDdCNzdEMTdBRDMzQTZDCi06MTAxNEQwMDBEQTc5MjlGOEVCNzk2MTE3NzREQjAzNTYxREVEMjNEQjBDCi06MTAxNEUwMDBDQUY1Q0RGMjUzNUM2RjY2Qzc3QUIyQUQwOUZFN0QyQ0FBCi06MTAxNEYwMDAyRkY0MjREN0MxRjg2QkY2NjY3NUVGMTdFNUVFOTUyODQzCi06MTAxNTAwMDBFNDAzRTQ1MjZFQUM5MUM2QjlDQkVBRTk4RkZCQUJCRDA0Ci06MTAxNTEwMDBCMTczMEZEMkUwRjM3QkRGQjExMjdGQjRDNDEzN0UxMzNCCi06MTAxNTIwMDBGNzdENEFGODQ4NUM0OEJBOThBREQ5Mzc1RjQxNzlCMTQwCi06MTAxNTMwMDBBNjE0NzBBNjg0QzI1OUNBOEQzNUI4N0VBMjFGNUJGNDZBCi06MTAxNTQwMDAyNEEwQ0YyN0VEOUU4MkQ4NDA3QkE1Q0MxRTlEMTUyMEUwCi06MTAxNTUwMDA5N0U0N0I4RjJGNjZFRTE5QjA5MDYxRURFNTVCNTkxNjJECi06MTAxNTYwMDBDOUY3N0VCMTAxRjI3REMyQzBGQjIyOTE5RTlBMkMyRTVBCi06MTAxNTcwMDAxN0I2OUY1NkQ4OEQzOENGMzM1ODQyRkIzMzA2NUU5NzQ3Ci06MTAxNTgwMDBGMDdBNDBFMDMzM0I3NjUyQjY3NTA4ODc5MzBERThGODYxCi06MTAxNTkwMDA5OTQ4REU0RjJCOEZFRThERDUwOUJCODNEMzBCRUJFMDQzCi06MTAxNUEwMDBGNDgyRkIwOEI0QkY2NkM2NzIzQzhDNzQ3OThBRjQ5Q0UyCi06MTAxNUIwMDA0RUE2RTJGRTg2MTdGODc2MjNERDBFMUJFRkREOERGNEQ2Ci06MTAxNUMwMDA5RkNFMDQ5RDhDRTc3NEEyQTVGN0RCNjNCOTdDMUQ3MUU3Ci06MTAxNUQwMDBCQzhCMjFEQ0YzMTVFNjBFNjdFRjU0QzY3MkJCMjlCRTQ3Ci06MTAxNUUwMDA2MzM0RDEwRkYwNDMxOUNFMzczNEI1NEUzNUEwREM2NkU1Ci06MTAxNUYwMDBCNjA5QTg3RjdFMTNFQkEwN0U3OTA1QUVERDQ4NkYzNjc1Ci06MTAxNjAwMDA5NzlCRjg3OUJFRDlDNkU5MjY5M0QzMDdCQzNGMjcxQzIwCi06MTAxNjEwMDAzRjZENDMzRTFBRTBFN0EzNzhBNDQ3NzMyODNEREUyNkRBCi06MTAxNjIwMDBFMEY0MUIwMURGRDBGMTNENzdFMUY4RjExRDNBOTcwMkJDCi06MTAxNjMwMDA4MzBDM0I2MEY2MzFFODNBNkMwMUU4NDlFNDUzMDZGNDY4Ci06MTAxNjQwMDAwRjBCQjRDRkIyMTUyMjlGQTU1NjM5MTVDNEVCMDJCM0M4Ci06MTAxNjUwMDBGQjFFRENENzcyOTQ4REY5NDhDRjNBNUYzREJDOTc2Qzg2Ci06MTAxNjYwMDA3MzExRkU3RUI0OUU2ODY3MTE2QzY4OTA5REY1NDAyQ0U2Ci06MTAxNjcwMDBCN0UzNTc5NUExQkM3RUZBNUIyM0NBNTM4N0U0QkZCRDhECi06MTAxNjgwMDBCOUQxRTUwMUY0RjFDNzUwN0MzRjEyMEVERjVBMzlBN0ZBCi06MTAxNjkwMDBDNUI3NUYyRTA0Q0IzOTgwRDc1QThFMEY2RUU3Qzc3NzU4Ci06MTAxNkEwMDAyQzUwQjk3QzA4OTY2QjNERTEyMzQ0M0UwODNDRkNDMUJDCi06MTAxNkIwMDBFQ0RBODRFQkNDQzY0NTQwRTkxRENERkE2MTdCNEZGQUVDCi06MTAxNkMwMDBGOEM1NThGMzRGQjM2NzJGQUM4RjVGOEM0RDA4RDVDNzYzCi06MTAxNkQwMDBCQTg4QUVENzE1ODA0Nzc1OEJFQTUwNjEwQkY1OEJFQzU1Ci06MTAxNkUwMDAyRUM0RkZGQTY2QzU4OTc2RTFFRTE2OTVFODYxRkRGMjMzCi06MTAxNkYwMDAyOEQyOUI3MkJENUY2RThGMTlDNEFFODQ1MkYwM0Y2QkNGCi06MTAxNzAwMDA4RjI1N0Q1QTFCMkJFNjVGMDZCRkMwRkNBNzZEQkNCQUI4Ci06MTAxNzEwMDBEREU2NzkzRDUwMEVBRDZGRjkyNjEyRTFEQzNGNTk3MURGCi06MTAxNzIwMDAxRDQxQkI0QUFCOEY4MTg1MTQ3OERGODRCRjI5MDhENzYwCi06MTAxNzMwMDBDMTBEMkEzMkQ2RjU5RUFEMjY5NUYwRjYyRThFMzc4QzQ5Ci06MTAxNzQwMDA3NUJFMzMwQUQ2RjVBN0E2RDFCQTQwN0JFQkVDOEVBRkI3Ci06MTAxNzUwMDA2RkREMDVFQkFGOERFNkZBQjkzNjlBRUJFN0QzQkJDRTdBCi06MTAxNzYwMDBGNzQxN0FCQjc2RTE3NDkyN0JDM0Y0OUU4RjAzRTVEQzhDCi06MTAxNzcwMDAxQkZEMEU3MzM5Q0M0QTZENDdGQkUzRDQyRUU1RkI2OEE1Ci06MTAxNzgwMDAwMEExMzVBMjlGMUVFRDBBMzVDQUE5MDZEQjE1NDQxQzJGCi06MTAxNzkwMDBGNTM5MDAxRjg0NUY1QjE0QzFBRjNFMDdGODJFOTNENjY2Ci06MTAxN0EwMDA3OTAyRDdEOTZFMzFCMjE0NjgzRjBCRkM4OEZERTRCQUQ4Ci06MTAxN0IwMDA3RkM0N0FDRjg0NUY2RjlBRUQ2OEI0QTAwQkQ1QkZCRUFCCi06MTAxN0MwMDA2RUJDMjAxRTYwN0NENUEyQTc3RDlDNjY1MTRFQzQ2NzZFCi06MTAxN0QwMDBCM0QxQzUxMEZGREU4M0MyM0UxMDc4QUIxMTM0NzdCQUE3Ci06MTAxN0UwMDA2NUM4MDEwRkVDNkZGRDgxMzQyN0JFN0Y3QUM3RDk0OEU5Ci06MTAxN0YwMDA5RDE5RUQ0NzhGNkE4NzdEQTlFOTVENTZENDg3QkI1QjRDCi06MTAxODAwMDBDRTVFREUzOTgwRTQ5QkMxMEVFQjNCQkJFRkIwREQzMzM3Ci06MTAxODEwMDBFMDQ3RURDRjZBQkY4OEZERDVFQUNEMEQ4MTc2MjJBQURCCi06MTAxODIwMDA1OTUyOTQxQTNBNTI1QURBRkVBOTBDMjJGRTYzMjgwRjMyCi06MTAxODMwMDBCRDE5Q0M1NzBGRkI1RTNFNTBEMEQzNTRFNjQwQkVENzA3Ci06MTAxODQwMDBFMjdCQkJDRDlENjEwRkUwREJDRDM2QjcwM0Q3ODVGM0RGCi06MTAxODUwMDBBNEU2RDIzRUIzQjAzRUU4Q0RFOTc5MDYxREVFNkYwQ0FBCi06MTAxODYwMDA0M0JEMjlFRDNEQjk0RkI0QzcyMzczRkRGQjkzRjY1RTJECi06MTAxODcwMDBGN0ZFNzNDRTBGREFDNzY4REY4M0VDNzQwRTc0MkNDNUU1Ci06MTAxODgwMDA3MzVBMkQyODg1MDczMjAzRjdERjRBNzhBOTE2RkJBQzc3Ci06MTAxODkwMDA4RTMwQjdBQUIwMkZCNkNENzBCMjUzQ0E4M0FDRDA3RDBDCi06MTAxOEEwMDAwMDlFODZGMzdEMzgwRjc4MTBDRjdGMzczQkVCMTE0RUNCCi06MTAxOEIwMDBGQTBFMUJEQUFGQjBBRjkxQjgwRjU2NTA5NjhDNzBGODk1Ci06MTAxOEMwMDBDMEVDOUE4Q0YyRkU5OTI1OENFOEZBRjRCM0NDRjcxNEFDCi06MTAxOEQwMDA2QzdBNEJCQjhFRTg2NjAzQkI4MkU4RkYwQUREOTk1QjNFCi06MTAxOEUwMDBERDY2RTJFQkIxRjg3RTdFNDdBMzBFRTU2RjhFQ0ZBMUY5Ci06MTAxOEYwMDA0M0I5N0E3OTQ3QjM0RTQ3RjRFMDE5MkZFMDc0NTYwRjk1Ci06MTAxOTAwMDBFQkVCREY1NEE3RkU0OEJBOTgxNDlFMkU0MkYwRjZBQkRDCi06MTAxOTEwMDA0MEJDNDlCODhEMTJGNDMwMEFFMTg2MzJCOTRCN0ZCMjJGCi06MTAxOTIwMDAzM0MyMEYzN0MwMEI0QkI1ODc4RUM3NTg2NzA2QzJBOUE1Ci06MTAxOTMwMDBFREM1NjM3RDNBNjFCQzlBOTc4RkREOEE3MEE5RjlBQkRBCi06MTAxOTQwMDA4OTg4NjFDQzVGMkY4RjQxQkFGRkIyMzBCQzVENzM3MjYyCi06MTAxOTUwMDA3MTlENUIwRkM0NzhBQjNEOEJFNDdCMTVFQjMwQTJCRDcyCi06MTAxOTYwMDAwMDcyRERBRDBGOTBFQkQyOEVEQjY3RTgyOEM2RjFGNzkxCi06MTAxOTcwMDAwRDUxRDkxMjgwRjM1OUU3QjAyNDE2NDY1RkM4NzIzRjYzCi06MTAxOTgwMDBEQTZEMzkwMDdGRjQ1NUUxRjlFNEM1RkMxODZFNDdEQUU5Ci06MTAxOTkwMDA4M0ZDNUFCMkRDQjc3ODk2N0I4Q0ExRTdGMUY2MEQ4RTBBCi06MTAxOUEwMDAyNDdGNEVCMUM2MUU3QUM4Q0VFRDhEQTdFRDVDQ0Y4MUU3Ci06MTAxOUIwMDA2MDc2RTEzQTRGRkRDNUUyRjM0MkQzQTlEQ0Y3QUQwQzA2Ci06MTAxOUMwMDBFMDc0NkFEQkJCNzk1RUEwQTM1M0FDRTNGNjk3OTBERkNCCi06MTAxOUQwMDBCRTM2RDNCOUFFNzhGMEZCNzk0QjJDN0VGRUJDOEFGQkM5Ci06MTAxOUUwMDA1MkQ4NTUyRkJDNjk3NTQwRkZFMjJEQkJFM0JEMDFGMDE1Ci06MTAxOUYwMDBCQjhBRTlCRkVFQTZFQjRDOUM5N0VGOEZFOTNCRkIyMDNGCi06MTAxQTAwMDAzRUQ4NEIyNzEyMUQ1MDE2QkZGODZBM0NBNzAzMzgzNzQzCi06MTAxQTEwMDAwRDQ1RkYxNEU3OEYzRjYzNTM4MERENURCQ0IwQzYzRENECi06MTAxQTIwMDAyNjJGQzAxRjczMkU5MkY5MDJFQkZBMEUyMzFFODlBQkVDCi06MTAxQTMwMDBDRjk5QTlGRDc2QkIyNTlFRTQ0RDJGRDYwQkU1NEQ4RkEyCi06MTAxQTQwMDBGMEJBNDg3ODZBREIyNTNDRjcwRDNFOTE4MUY2QzU5N0UwCi06MTAxQTUwMDAzREQ4QzUwN0VDQzE3RUFGMzcxNjdCREM2MzcyRkNGNTYxCi06MTAxQTYwMDBCRjdEQTdERUU2MEVGMzVFOEIxOEZGQUM3Mzc4MTJEQTRCCi06MTAxQTcwMDA3REM1QzZENkNCQzJGOUUxRTQzOTUzMEJBNzM3Q0U1N0EzCi06MTAxQTgwMDA0NkUzQjg3RjM5NjcxQTFGNkU1RERCRURCQTlGRTYzRjBDCi06MTAxQTkwMDBEODA3QUIwQUIwMEI0QkY0OUUzN0VEREM1RkIwNkEzMjZGCi06MTAxQUEwMDBENDZCMkUzRjNCOEVDRUQ5OTI1RTg0RENCQjhBNzlEQjMxCi06MTAxQUIwMDA5MDdGQjVGNDIxRjFGREJFQzQ1QjJBNEI0NUJDM0Q2OTY2Ci06MTAxQUMwMDA3NzcwQkExMUZDMjBGOTQzMEI0NzZEMzlDMUM4M0NFMTZFCi06MTAxQUQwMDBDRTAzQ0Y3NUMzMzU5Mjc5NDExRURFQkVDMTQwN0FGRTdBCi06MTAxQUUwMDBDREYzMUY0RUNEMDM3QTNGQjZENjYwNUIwQTUzQ0U1QTc0Ci06MTAxQUYwMDBCNzNCRUQ1MUY0QTcwRDM2RDkxNEE4MUY3M0I0NUU4NjE5Ci06MTAxQjAwMDA3QzVGQjk0RTc1MjMzRDFDNUI3QjdCRTI3NDI4QkYwMDc0Ci06MTAxQjEwMDBGRUFEODI3NTU0NkUzMDUwRkJBQzBENzc1MEZCMDlDMUExCi06MTAxQjIwMDBENzk1RUIxMkZBQTNCQzdDQjNGRDgxNDRDNEUzQUNFRkMwCi06MTAxQjMwMDBFRUJGMUVGMUIyQzU2OEVCM0YxOENBQUEyNkM1M0QyNjA2Ci06MTAxQjQwMDAwMERFNzMzNjQ2MDZENUI3RThEODJDREM4N0M0MkI1M0E1Ci06MTAxQjUwMDAzQ0REQ0YxREIwMUU2M0RDNEZDNDYzNkI4ODFGRDUxOEZFCi06MTAxQjYwMDBDN0VEQ0M5MjI5QjBFRjlBMjE2N0M5QkVERkJEMjc4QUE1Ci06MTAxQjcwMDBGNEM5MkI2Njk1RUNDOEQ2QzFGRkYzQjcyQkExNUVGNDcwCi06MTAxQjgwMDA5RERFNDkzNjlFQzBGMzU4ODE2Nzg2Q0U0MEEwOEY4QTdECi06MTAxQjkwMDAwODVFMkY3QTUxNEY3NjY4OTE0NTI1NzhCNzgyNUMxRDkzCi06MTAxQkEwMDA0MzRBREU2NTFFMEJGRDdFMjFERjUzNDdBRDFFMEVGRDUxCi06MTAxQkIwMDBDNkM2MTgxOEVBQTE1RkI0Q0UyOTY2QTAyNzdGNzk0RTYxCi06MTAxQkMwMDBGRjY5NjdDMDdFNDYzMzk3MUVFREUyNDI2NjA4NkE1RjkyCi06MTAxQkQwMDAxMTY1N0QwQUVENUExODRDOEZGQUIwMjgyMkY4RjlEODExCi06MTAxQkUwMDBDQkFFM0Q4MUY2QzQ1ODVCNzBCQkE0QkY5QzM4QTBCRjkwCi06MTAxQkYwMDBGRTdFQjlCMTdCQ0ZFNzhGNEM4MDdENTZFQzUzQzk5RUZBCi06MTAxQzAwMDBCRTkwNUNERThGRkJDQTQxN0NCRjUxREEwNEVGQkQyOTc4Ci06MTAxQzEwMDBBMEYzRTZGOTYzQ0I1MjkwQkUwQTE0ODY3RUFFNjNFNzZBCi06MTAxQzIwMDBDM0YzRTU1QzQxOUY4QzAxOUVGQkY5RjEzQ0QxMzlCQkNDCi06MTAxQzMwMDBCQjhFNkM3RjVEQzFCQ0VFM0FBRUZGRTJFNUQ5MEZDQjQ3Ci06MTAxQzQwMDBBQjRFM0JGNzZGNjhGNTg3OTY3RkZFNTNGQUEzNzhGMEFCCi06MTAxQzUwMDBBQjE5NUUwQjk1RkY4NUU1QzkyRDVDRkU2QUU1ODU1NkRGCi06MTAxQzYwMDA1RkM4NzU2OUQ3NUI3RDRFMEREMjEzQ0YwOTc5RTJENzc2Ci06MTAxQzcwMDAxNzQ2N0FGRTMzOUU4RjZCRTI4Njg0OUU4RkMxOUUyMTJCCi06MTAxQzgwMDA3ODc5ODdFQUU5NUMwRTc2RDdFREQ4NkY4MEQ5MTE1NzVECi06MTAxQzkwMDAwODRCNUE2NkNCOEE0NkI5RDY2NEYxREMxOTE3RTA5NzJGCi06MTAxQ0EwMDBFQURGRDRBODQzRjlEMUVEQUYzMTA0RkI2REU0RjlGNUQ3Ci06MTAxQ0IwMDA5RTM4QkVGRkYyMzg1RTg3RjMyQjlERkIzNzQ0Nzk5MjQ2Ci06MTAxQ0MwMDBGNTM4NkYyRkEzMzMzMDdFMjVDQkZCODVGQzkwNzZBRkE0Ci06MTAxQ0QwMDBCNDc3QTU5RDJCRUQ1OTdEMDNCNzY3QjM2M0RENDE3RUQ2Ci06MTAxQ0UwMDAzM0Q2QUY1RjkwM0YxOEVENzRFNDczRUZBRTI4REFFN0I4Ci06MTAxQ0YwMDA2NzhBN0IxMEYyNjkxNTczM0QxNDE3QTAwN0VCMEQ3QzAyCi06MTAxRDAwMDBGRERBRjVCQzE2MjdFQzEzRTYyNjNCNDFCNkNGMUMxREM5Ci06MTAxRDEwMDA1RTlFNkY4REQzNTNGRkMyQzc2RkNBNDAzQkVFQjNCNjEyCi06MTAxRDIwMDA5QjMzNTBDRTdFQTZGMUZGRjZDNDBGMEYwQjdFN0Q1MDg1Ci06MTAxRDMwMDBFODkzNThFMTI3NzgwOEY5MDhFQUMwRURBRTJERjBGRUU3Ci06MTAxRDQwMDA4QUM1NkVFMkFCREYyRUJFOTFDQTQ3MTcyRkE0RTc4RjdDCi06MTAxRDUwMDBDNTY1RDJGQ0I2QzI3N0RDRDkwMEE3MjMyQjU1RDIxN0I0Ci06MTAxRDYwMDAzMzhERUUzRUIxRjBERTkxMDgxREY5MUIwRUQ3OTlDN0Y5Ci06MTAxRDcwMDA2RjMzNjMzQkEzRjNFNUNDQzcyNzZDRjIwNkY4MDExRjcyCi06MTAxRDgwMDBDMzdEMENFOTc5OUZBRjA5QkM1RTJBOUQ1NkIzNEUyQkVCCi06MTAxRDkwMDBFQUFENkU3QTNEMTBBMkI3REIxMTJGQTc1OTY3MjJGNjg0Ci06MTAxREEwMDBBQjU1M0FGQTM0MjlBMUYzM0ZDODVDQUY2MUJGNjYyMzUzCi06MTAxREIwMDBFQjhGN0NEMzFDQzVGNTkyQjZERjlCMDI3RkFCRDA5RTI4Ci06MTAxREMwMDA4NUYyMzNENDVGNjFFNENDM0I4MjVFN0I1QjVERUZDNDI0Ci06MTAxREQwMDA5MUJDMzM5M0RENEVFQjU2Mjk0RUY0M0VDRTA3RTdCNDZCCi06MTAxREUwMDAwRkYxMzlDNjg5RDA1Rjk3NkRCNTc1Qzc1NUY4NzlDN0JBCi06MTAxREYwMDBGRDcxNUMxODdGNUM0RkZFMUZFRDNBRUU4OUU3NzBENUYwCi06MTAxRTAwMDBGQTg1NjQyOUZENDJDN0M0N0UxNkM1RDk4MkZDNDRFODIwCi06MTAxRTEwMDAwRjBGRTcwRkJBM0FERTQ4RkJEQjEwRDVFOUM1QjhBOENCCi06MTAxRTIwMDBGNzY2N0UzRTRGMUFFNTU1RDBERjk1NUFEQzU4ODhGRTlFCi06MTAxRTMwMDBCMDdGQzY3MTNGQTY3REJDMjcxOUNGRjFCRDkyOEQ0RUY0Ci06MTAxRTQwMDBGNEUzNUMyQzNGMEU2ODc2RjEzODgxNDc0N0VCNThEM0JBCi06MTAxRTUwMDBFMThERUMwM0VCNEFFQ0YwMTQxQUExMzRDNDI2RDJGODVECi06MTAxRTYwMDA0OUFDNkUwOUUyMERGQTExMzBGMkRCQTM3QzhBM0M3NEI2Ci06MTAxRTcwMDA0Mzk3M0MyMTQ3NjFBNTkxQzg3N0RCQUQxRTUzM0NCQzFECi06MTAxRTgwMDAzNzc0NDY1RDNERkFFRDUzQUI3ODNDRTI4NEUyRTk2RDkwCi06MTAxRTkwMDBDRjBFOEQxQkNCMzIzOTVFRjBBRjg4QkJFNjZGMzREMEVFCi06MTAxRUEwMDBCQUYyMzczRTQ2RjFEMUZDOEQ1N0VCOTUwMDM5OTQxRkJECi06MTAxRUIwMDA2RkEwRkUyNzVFOUREMzlCRkMxODFGODU4RkJGMEU4OEU5Ci06MTAxRUMwMDBFN0Y0NjI0NjFGRTExMDhBODc4NkE1QkY3RUYxM0YzMUE1Ci06MTAxRUQwMDBBRURDMDlGNjUwQjAzQ0VGMTczRjI0MjA2RkExRkEwQzlFCi06MTAxRUUwMDBDOTczN0QzQ0Q3MjM3RkMwN0MwNTU4RDMxRjY2Qzg3QzRGCi06MTAxRUYwMDA4NTBERTQ4RkRENkE2Q0JFMDZFMzUxREUxQTFENDNCQzFFCi06MTAxRjAwMDBCN0VGRjkyQkM1NkI2N0NENzA1MEJDQjZGQkZEN0RDRjJECi06MTAxRjEwMDAyQ0M3RjYzRkNDNjI4MzExRkUyOUJFODcxNUY0Q0Y3QzE3Ci06MTAxRjIwMDAxQkM5RTNDOURGNkUzMkIxMjVCMEE1RDk2RjM3NTMzQzY5Ci06MTAxRjMwMDA3ODREOTU4RUExN0NEMUVFMUI2NjMyRTg3ODVDREJBMEYzCi06MTAxRjQwMDAyQkUwRjg0NzM5MjhGMTBFMDQ2NDQ0N0M0OEJDMjFGQzlFCi06MTAxRjUwMDBCNjk4MzE2RUZDMDJBRDVGQUVDQjgwN0VGMDA0RENDNzdDCi06MTAxRjYwMDA5NjZCOTA0RTdBNTVEOTE1RjQxN0M4NzU1RDQ4OUY0Q0ZECi06MTAxRjcwMDA4QUZGNjlGQUU0NjdENEMzQjdDNTVGOUMxRTlFODE3NDZCCi06MTAxRjgwMDBBRUQ1QzM1QUZEREI2NDcxNTU2MkJGMEJFOUUxMTM0MjY0Ci06MTAxRjkwMDBGRTREODlEN0M0NDMzMDdFMTYwNjZGQzc4NDFDMENGMEYzCi06MTAxRkEwMDA4RkRGMTlGRjIzRkNFMzFGQTExQzA5RTMxRjdGQzZDOEI1Ci06MTAxRkIwMDBFNTZGQTM5REREMzYyOTBDQkZCQzI3RTZEN0FERUUzMjE5Ci06MTAxRkMwMDBBMkZFOEM2RjUxQzJDQUIzNkNBQjUxQzYxMzU3RTBGQTc0Ci06MTAxRkQwMDA2NEZDNDQyQjhGQzNDMEI3MTFGQjVGREVENEJBMEI3QjBDCi06MTAxRkUwMDBFNUM2NUUxNjhERTZEQjE1REZDM0I5MzdDQzNDNkIwNDY2Ci06MTAxRkYwMDA5RjNCMTYzMDhBQTMzQUVBMThDOTJCQThGQkI4OTNCMEM2Ci06MTAyMDAwMDA5NUYyMjMwMDFGNEZFMEI4MTc4QTYzOURCNjE1OTIxRDA1Ci06MTAyMDEwMDAyNEUzNTY4NkQ4RTBGM0Y4OUU3OEQ5Q0ZGNTQ3QzQ2RjBECi06MTAyMDIwMDA3QTBGN0FFMjRGNjI1REIwRkY2N0IwNUZGQzAyMTYxNDcwCi06MTAyMDMwMDA5RjkxNzE5OUY4M0FBRjYyQ0M0Nzc1QzRDOERGREEzQjFCCi06MTAyMDQwMDBDRUIzMDRGMzNGQkE4NjMzRTc1MzUwOEYyOUI1MTVBMkI4Ci06MTAyMDUwMDAzQ0I1Q0Y3MkI2NjFGQzY2RjkyOUVFOUY1RjNFOEZGOTAxCi06MTAyMDYwMDA5NjJBMDE3OTA1OUUyQ0NBMDM0MkJDMDVGQTA3NzYwQTE2Ci06MTAyMDcwMDBGOUI2NTNBQzFCRjRFNDVGRTNGOUJBNUFFMjAzRjRBNEYzCi06MTAyMDgwMDBDNDg3NkU3NUFCNEE3OEVEMEFBRkE3MDJGMERBRkU0MzVCCi06MTAyMDkwMDA3OEZEMTlGOUYyOUQ4QkU0Q0IwRjJGODU2RUZFNzE5MUJGCi06MTAyMEEwMDA3NEYzNEI4QzZGMEMwOTNCREY2Nzg4NTdFRDdDNDA2N0ZFCi06MTAyMEIwMDA0NzgzRjhCRTA3M0FEQjc4ODlGMUQyRjlFNjlGQThBN0YzCi06MTAyMEMwMDA0MkUxRkE1RDdDNDIyODVDNTcxNkVCRkE5MUJDNjY1MUZFCi06MTAyMEQwMDBDRTcwN0FENTk2NjBGRTRGRTc5MUQ4MTI4NjVDN0ExRTU0Ci06MTAyMEUwMDBDOUZBN0IzQjhEODg2NzE5MDc5MUVCRDVFNjhGQzhGNjU3Ci06MTAyMEYwMDA5QTE2MjUwRkNGOUY4NUJCQ0ZEMzM5RTA3NERCQkZFODlECi06MTAyMTAwMDAxQzEwOUEwN0MyRTc5RDBGRTQ4REZDMzk1NjFERDBEQ0U4Ci06MTAyMTEwMDAwQUZDNzdBNkM5NDgyNzc1OTUzOTdFMzcwQUZERjc3QkYzCi06MTAyMTIwMDAwRENDRTdBMEZFMTFEOEZGMEFDNkZCNUZEMUI0QkMwM0ZCCi06MTAyMTMwMDBGRDU3NTczMEJENTc5QzQ3OTVFRkI5MUQxNTgzN0M3Q0UzCi06MTAyMTQwMDBDNTVFOTVGMkJGRDg2NkZFQkM4RTQ1MkM0MUZGNzQ0QzJGCi06MTAyMTUwMDA4MThFMzkwMkUwMTlFQjhBNjI4RTAwNzhDNjhEQjcwNzRFCi06MTAyMTYwMDBENUU1Mzk3OUFFOTgzN0MxREQyQkU4RkRBNDFCQjM4MkU0Ci06MTAyMTcwMDBGQUE3NzhBRTA4N0E5RTNBMkIzN0E4OUU1RTM3MjJBODM3Ci06MTAyMTgwMDA3RkVGODVBMzgzRUE5OURFNkI4M0ZBNjczNzRDMEVBQTRCCi06MTAyMTkwMDBFNzM0REUxQ0Q0RkYxOEFCN0I3QzE0RUNCMzNGRkE1QjU2Ci06MTAyMUEwMDAwMDNGQ0NFQkVBQjgwQ0Q2M0I0M0FDQjdFRjlBRjJBMEI5Ci06MTAyMUIwMDBGNzgxRkQ1QTMxMUUzODUzOTBDOTE3Q0Y4RERGQUIwMDIwCi06MTAyMUMwMDAxQzY3MDhGRkNFRTVCRTM5NDFFM0NGNTVBQjg4N0U2NzdCCi06MTAyMUQwMDAzNjFBOEUwNEZBNjlGNEFDNkI0RjJBQzBCOUM2QTczODE4Ci06MTAyMUUwMDA1QkExNUVCOTI2RjhGOUVDMUQxQkU4QkREOUJFRTBGNjhGCi06MTAyMUYwMDBCOTlCODNFQjgzREU5Q0QyOUZFNzAxQjkyOUJGNzI0NjZFCi06MTAyMjAwMDA0MkIwREY4Nzg1RDA4OTk5RTRGNDk5QjVEQ0ZGQTU3QURGCi06MTAyMjEwMDBGQjZBRTgyNDE4NUZFQzI3RDI4RDQzRDA4RDI5Mzk5OENBCi06MTAyMjIwMDA2RTIyMURDMTc0NTNGOUZBRDZBMTA4MDcyREZDQTNGQjM5Ci06MTAyMjMwMDA2OUU4QzkwQkZGN0UwMEZFMTY2NzMwN0Q2OUUxNEVGQjQxCi06MTAyMjQwMDA4Mzc1NTZFQzUwRDhFRjk1NTBCOENGNkE3OTc4NzkyQUQzCi06MTAyMjUwMDAwQjg1M0I2MzNFMjNENzFGQzFFRDhGNjhFMEZEODFEOTFECi06MTAyMjYwMDBGMzE4Q0E4OUIzM0IxNkE4MTg4NzYzRTM3OTNDRkZFQ0RGCi06MTAyMjcwMDA4RUFGMDdFRDczODQ4OTJGRTU4NEM0OTdENjI1MDRGOEMzCi06MTAyMjgwMDA3RjY0N0NFOTM0QzYxOUFGNjQxNzExNjdEQ0ZENEY4NEE1Ci06MTAyMjkwMDAwN0M4MDA4RjAxRjMxMTBCOUMxMURENzFDNTQ4N0YzQzBECi06MTAyMkEwMDA0OTJCM0Y2NTA5RkFFM0I5MDREMjJCRkU3ODZDM0RCQzlCCi06MTAyMkIwMDAzRDM0RTYwMzM3QUU1M0M2RTU2NEJFOEVDQzJCMEE5MzlECi06MTAyMkMwMDA5RkZDOTc4NDA0Q0MwRkI0NDdFM0Y5NzU0QkZCN0MzQTMxCi06MTAyMkQwMDA3N0M5QkMyMjI2RjIwMkMzRDhGRkE0NEY5QUYxRDcxNEMzCi06MTAyMkUwMDBCMjBCNzYyNjcwQkRGRTBBOEVENzZEMTc4OEJDMkZBOTVCCi06MTAyMkYwMDBENzdCMUE0N0M2REY3QTJBOTU1RDJBQzUxM0JCOTQyODc3Ci06MTAyMzAwMDBFNzUzNjFGNENBNDcwOTNGNTFCRjg1RTY4RjdGMTRBOEEwCi06MTAyMzEwMDA0NzZBRUUzOEJCMDdGNTBCQzBGRDYzNkNCNzU4NDA2RkRBCi06MTAyMzIwMDAyQjdFQkRGREJCNjgyQkQxNkJEN0VCQUFBRjJGMzQ5Q0E2Ci06MTAyMzMwMDA4OTcwQzREODAxOEUyRDIyREZBRjQ1RTRGQkM5RjVENkU0Ci06MTAyMzQwMDA0NUE0QkFGNDc5RDgxRTlDRkYyN0UzOEFEQUZEOERDMjMyCi06MTAyMzUwMDBGRTcxRkUzQUJDMTc2NDk3MkNDRkU1NzZEQjY5MDE4N0U2Ci06MTAyMzYwMDAwRDE2NkUyNzE4MTNCOTlENTBBQjM5MUZENTM2NzBGQjZCCi06MTAyMzcwMDAwQ0E0RDdBQzk2ODA3MThDODkxNkVBREZERjVDNjg0Q0MwCi06MTAyMzgwMDBDNDcxODRERjY1NzlBNjQyNzZDNTcyNDUyMTdCRTQ3NzA2Ci06MTAyMzkwMDBCNkQxRjRGQ0NGMDk4NTg2NDRFOEZGNkYzMUFGMTE2MEY4Ci06MTAyM0EwMDA4ODY1NjMxNjVGOEY0MzkzMTdGRTkyRThGRjUyQzI2OEY5Ci06MTAyM0IwMDAyQThEODkzNkUxN0ZCNjVEODFGNDkxNkE3NjE5QTk1RDJGCi06MTAyM0MwMDAwRDFGQTc4QTRFRTRGQjFBMjlGMjY0QjQ3MTgwNzE0MjkyCi06MTAyM0QwMDA2RUEyREZERkM0RUREMkUyQjE4OTQxRkVGRUY3OENGMURGCi06MTAyM0UwMDBDMkRGQUZEMEVCMkU5NDUzQkYxNDc4RUZDOUZGRUZFQUYyCi06MTAyM0YwMDA2NzZCNDdGMUFERjVGRkFGOENFNEZFN0YxOTFGMDhGMTY1Ci06MTAyNDAwMDBGRjNCQzc4NUY1RkYyMzFFQTJFRDdFRkVFOTkzRDgyRDg1Ci06MTAyNDEwMDA5RkQyNTAzRUVEMzA3QUVBRjFGQ0Q1QjUxREVDNzg2OERDCi06MTAyNDIwMDBFRUU3RUJBNEI4QzBDMDdERDk0RTNDNjcyRENGNjRCQkFFCi06MTAyNDMwMDAyQzQ4NkY0QjE4NDMzQjdGNDdBNzZFNjkyNDNDNUZFOUVDCi06MTAyNDQwMDA2NTM2N0MzRTdDMkQzRkJGNTVBRTcxMzg3MTlCNTIwRTc4Ci06MTAyNDUwMDA1QzlEQzhGRDg3MDYzODFGNUI3MkYxQkRDOTZEMTgyN0VBCi06MTAyNDYwMDA1ODM5OTVEOTUxMEQzNUIyQzYyMjJCREE0NTZCNTlEODVBCi06MTAyNDcwMDBGM0UzNjg0MTRGMTMwQTc3NTFGRTc2NDIxN0NGQjcwRjQ3Ci06MTAyNDgwMDBFREE3OTM3NjdFMjFFMjczNTg5N0U3MkM4RkNGNzE3OTcxCi06MTAyNDkwMDA0MjIyMTFDRkE5RUQzQTVGQjg3MzdEQjJBREU4NkFBNENDCi06MTAyNEEwMDBBRjgxQkVGMEU3ODg5MUMyNEZFNjMyQkIyN0UyRjgwMzY2Ci06MTAyNEIwMDBCN0YxN0NEODRBMjk3RjY3RTg5ODFFRjAzRTQ1RTA3NTYxCi06MTAyNEMwMDBDQTVBOUVEN0MxQ0U3RkZGQkQyQUVENDU0NkUzMzM5NDVECi06MTAyNEQwMDAyQjk1NTMyRDNFRjQxMzU1QjY2NDdBNjk1RDZFQzU5OUZDCi06MTAyNEUwMDA4M0YyQTJFNTZEMzdENjJCRjNGMzZERTg5NzcwRkQ5RDZGCi06MTAyNEYwMDAyOTQ3RkI5MUE5QzlCOEZDRDJCM0EzNTI5RTkwMUU4RjY1Ci06MTAyNTAwMDBBNzM4RDQ2NDQxNkYyM0YxQjA5QzQwNzI3RTY1MzRDMDFCCi06MTAyNTEwMDBCQjcyRUQ5MjVEOThEN0YzRkUxRjE5QzU5QjBFQTg1REE3Ci06MTAyNTIwMDA0MzcxQjA1RjAxNzAxNkU2NjJBOTY3QTVFNEI3NDhBNkRCCi06MTAyNTMwMDA3MUE2OEE3MUJDRkY4Mjc5MjNGQ0YzRkVBQUU1NzVEQUU1Ci06MTAyNTQwMDBDRjAxMDNGMzQ2MDAxRDlEREU3OTgzMDNFREVFRTUwOTFGCi06MTAyNTUwMDAxMUU0Q0Y5MzcxREE4M0FBRTczRTUyNDJGQUFFMUE1Q0Q1Ci06MTAyNTYwMDBEQTREMkREMTM2RjQ4MzlDREVGOTYxM0FDNjREM0VCOTgxCi06MTAyNTcwMDBFN0FDMDVFREQ4N0ZFOEJCMkM5ODJGN0M3Q0QxQkIxNjRGCi06MTAyNTgwMDAxN0MwRjE5MzQ1MkFFNTlEREQyQUY0ODY4NEZCN0Q4OUY5Ci06MTAyNTkwMDAxQ0VFMUYyN0JBMTcyMURDNkY1QkZDREREMEMwM0MyQTg0Ci06MTAyNUEwMDBCNjMwODFFODc5QjY0RkE1OTA1Q0I3OUNERDFDOEQxNkRFCi06MTAyNUIwMDA0QTc3QkRCQTM5MkVBODJFRjU0MEI1ODlENTg1M0JCRkRGCi06MTAyNUMwMDBCQzI0RTg2OTc2RDMwNjYzQUEwM0U3RjdBQzQyRkEzODdECi06MTAyNUQwMDBBRUU3NzQ3NDdDOUJDNUU3Q0RGNEFGQTdCQzY5QjAxMUJFCi06MTAyNUUwMDBFRDgzN0ZCNDk4NTgyQkVBMzM3RDg3ODFFNzQ5QkI4QTE2Ci06MTAyNUYwMDAxNUEwMEI4RkMwQkY3NjlEN0I1RThFQTZGMTY2M0VDNjkyCi06MTAyNjAwMDBFNTQ3MTlDQ0I1MTBFMEVCNjk5OTRENzI0MUJCOEY5OTQ0Ci06MTAyNjEwMDA5RjM4QzYyNTAxNUM2N0FFNTAxOEZBRTNCMEZGMjJDMEIwCi06MTAyNjIwMDA5RjY3RTFGRDVGQTFGREE1REQ2Nzk5Mzc1ODBFNDhGOTY5Ci06MTAyNjMwMDA1NTI5RjAzQ0JEMjFGODc5NjVDQjZGNjk5QzE5Q0M0M0Q1Ci06MTAyNjQwMDA3OTIwNjAyNzY5OUU1RjczMENGNTBBRDg0NzQxRUQ2N0QyCi06MTAyNjUwMDBGNjY2OUI1MThGNkY0OTE0RjFFREExNkNEOEY3RjBGRTJGCi06MTAyNjYwMDBBRTg4RUMxODRGMTg3RTkyRTVDOUM1MzYyMkQ2Q0YxNzMyCi06MTAyNjcwMDA0NzUwNzk3QzMxQTM3MjUxMjJBN0UzQUE5NkI3RUY0NDYxCi06MTAyNjgwMDA3QkE5NjZDNzE2MjM4RTczQzlGMTgxOTYxM0Q2OUI5OUQxCi06MTAyNjkwMDA1RkVGOTZFODNEQUYyMTFFRDkyQzI1Mjg0RTUwQjNFMUJGCi06MTAyNkEwMDBBQzkxRUMzMjAxOUY1MkQxNUU4QUYwMDAzQ0RDQzIxQzNFCi06MTAyNkIwMDBBQkYxM0M1MDVBNjVGMEM3RTlFMEZGNUI3MkJGQzM2MDA1Ci06MTAyNkMwMDBCRjgwREFEMTkxMzkxN0I1NUZCOTRGQjk2RkY5QkM1QUVDCi06MTAyNkQwMDAwNTdBMENGM0JFRTQ4MzQ1NDIxRkNERDgzODY5NzkyRkMzCi06MTAyNkUwMDAwMDUxRkRDRTYzMTk5REZDQkM0OUY2Nzg5MUMwNkI1MTM5Ci06MTAyNkYwMDBDNEZENjQ4RjE3ODVEOEUzRUMzRERDQjdBNEM3NEFFNjc4Ci06MTAyNzAwMDAyNDNEQTJBNTNCNDkwN0NDNkNBMEY3MjM4NEJEREU0RDM4Ci06MTAyNzEwMDA2RjJEMEYxMjVDMjQzRENDNUM1RDY4RTRFNjlCQzdDODVFCi06MTAyNzIwMDBFRDRBNkZCMkYwRDcyNkEzQkYxNkU4MzBDODNFMDZCQTBFCi06MTAyNzMwMDAwQkFBNkJFREYxMkYwRDlEMTkyODFGQjQ3NkI4Q0NFN0NECi06MTAyNzQwMDBENEMyRTc2MDIyQ0Y1RjlBRTE3MDhEQjMwREMwNzM4MDcxCi06MTAyNzUwMDA3QjM5Rjk4NUYxNDZDQTEwRTREQkM2M0Q3NzIzREY2RThECi06MTAyNzYwMDBFNDdDRjMwRjQxMEZCMzkyM0MxMTQ5RjBEQ0IzRjQ5QUNGCi06MTAyNzcwMDAxQUM0N0ZFNzEyNTMwNkYyQjM2NzY5OEExQTBGRkQzRDQ4Ci06MTAyNzgwMDBBQjE0OTJDM0EzOTdBNjE4MTFDRUQzOTcwRDFFODc3Q0M2Ci06MTAyNzkwMDA5RENCNUMzNEZFQjQzODE2RDY2RTE4OUNDNEU1NDc3OUUwCi06MTAyN0EwMDA5RDgxMTk2MzA4Mjk0NkY0MEI5RjZBNTBDODJGOEM5QUEzCi06MTAyN0IwMDA2NDIyRTA2Qjk2QzA1N0Y1OEFCN0FEQTRBRjFDRjA2RkVBCi06MTAyN0MwMDAyODVFMUZFMDNGQjNFQTJBMDkxRjcwRUUwOENCQzc1MjBDCi06MTAyN0QwMDBBRjU0QjE2NjYzMEE4QzNCNjc2NTFCRDEzMTlDNDc4MjVECi06MTAyN0UwMDBGQUQ3QjI5NTg0QUZFQTY2NEQ3QkRERDU4NDNGRDhCOTgwCi06MTAyN0YwMDAxMUNGODlCNTNCODI5RkY3NEYxMjc2ODI5MzM5OTFCRUY0Ci06MTAyODAwMDAzRDc3NUEyMjMwQUY3MUI0ODA0RkQ5NEFDNTg2NzI2QjdBCi06MTAyODEwMDBGQUIyQjY4NDFCQTAzRTdEQUZFQTg0RUQ3NEMzODc4NTBGCi06MTAyODIwMDBGQTIzMjgxRkVEQ0NERTFDRjI1NzlDNzEzODkyQjA5RjIyCi06MTAyODMwMDBDN0NBRUQ1MjQ1RUYxOTg2RUREM0UyM0NDM0QwQ0ZEOERECi06MTAyODQwMDBGNTkxODU2MTdFREZBMTczMkE3M0U0MTE5NTBGQTJGQ0Q3Ci06MTAyODUwMDAyQTFCMUIzNDI5QzBCRTJGMzNEODEyMzExRUU5NjVGMzYxCi06MTAyODYwMDA5M0M1M0RCODg4NDBGOEQ0NDZBQzI0N0VBODQ1N0U4ODAwCi06MTAyODcwMDBGMEYzQzMzNDhDN0JBMURERjNBMjQyNzk4NDZDNDczMDQyCi06MTAyODgwMDBCRDlGNzAzNDI2QzI5MTkwQjlFRjMzOTA5QzJFNkY4QTExCi06MTAyODkwMDBBNUYzNzFGOUIyMjIyM0VBRDVGMjZEQjE2NDFGQzFGOTMzCi06MTAyOEEwMDBGNEJEQ0I4NkZBRjE3OTY4NTlERTlFNjQxOEI3QkMzOTVECi06MTAyOEIwMDBEM0E5MDZFMzMxRjREQzE5QjBDRTM5MEQ4NzI0RkU4RTlFCi06MTAyOEMwMDBGNDgwQkYyM0UxRjAwNzc4MEI2QTJGNEYxMjcyNDlFMEMyCi06MTAyOEQwMDA4RDJEOEEyM0JENUEzQUVGRDU5QzA4NThENzk5QkE0ODBFCi06MTAyOEUwMDBDQTkzRUNFOTdDQzQ2NjhDQTBGQzAzRTlCRjFBREZBQjk5Ci06MTAyOEYwMDBEQkNGNDQ3OTNFNjc1NzBFMjFGQzY5RjEzNkZFREZEMzBBCi06MTAyOTAwMDA4N0ExQkRDQkZFNkU2MTY4Njc0RENCNjZCNzREODZGNjdECi06MTAyOTEwMDBEQjE0Q0U2RkQzRUFBRjE5OEY3NkM0REQ0OTVDOUVCRDYwCi06MTAyOTIwMDAwNTcyRDBENTk3QjFCNzQxMEVCQTQwMEVCRTBCRjIxMTY5Ci06MTAyOTMwMDBFQkVGMkY0RUE2RkE4NzhCMUQ1NDdFQjRCODFGOTU0NzM4Ci06MTAyOTQwMDA4NEJGNUZGMjFEMTAwMkQxRUQ5MjI0MkUxNzk3MjRDOTg3Ci06MTAyOTUwMDBGOEZBODI2NDM0NjlDNkZGRkJERDIxM0ExQkRFNjc2QzNFCi06MTAyOTYwMDA5QjMwMzY5REIxRUI1Q0MxRkFGN0M2QTlDMUZBQjVEMzZECi06MTAyOTcwMDA2MDFCOTc4Q0U3REIxNTBBRDlBM0U1RUU5MTQxRkRFMUQ5Ci06MTAyOTgwMDBEQzY0QzQ3QjJCQUM1RjlFQkY5REY0ODZDMzM4MTlFODIyCi06MTAyOTkwMDBGMUE2RTJCOEEwRkVENzM3QTQwNkQ1OUY0ODcyRDBGQUI4Ci06MTAyOUEwMDAyNjhEQ0YwRTZBQkZCOUI0N0Y1MEJERUM5QzkxMzFBNDg3Ci06MTAyOUIwMDA3NzQ3MDFGMUNGMDI5MTY3MDQwNzc3OEUxNzFCRUZGQjcyCi06MTAyOUMwMDA3NUREQjBBNEJCNjBCRDVGRUYzM0QwNzMyRDNFMjQ1RUQ4Ci06MTAyOUQwMDA2N0FDNTE5OTA3QzY5QkJFMDZFNDFGMkNGMTQ4RTM3NDBGCi06MTAyOUUwMDBFMkFGMkYwRTU4RTg1Q0IyQkMyOTZGN0YwMUQ0MEYzNURGCi06MTAyOUYwMDAxOTI4MEZFOEQwQjJCODU1NjhBRjFENkE0QUIwMzIyODFFCi06MTAyQTAwMDAzRENCNTU2MUQ3RDg4QzJDNDBERTE1MkQ1QjQyRjlBNjA1Ci06MTAyQTEwMDA2NTNFOTM5M0VDOTc3NkVGOTNCMkVFQzBGMzJBMkUxMkI1Ci06MTAyQTIwMDBGOUU0M0RENUQ3QUExMEZFNUMwNERGNjcyMkU5NUVFMTM4Ci06MTAyQTMwMDA3MUIwMjdGMTJBRTFGNDRFQkVBRUUzMEE1Qjg2RjUxM0NFCi06MTAyQTQwMDA5MTFGRjdCOTBCRDY3MTZBNjI2Mzg1MEVGRDE1RUFCRTU4Ci06MTAyQTUwMDAwNDkyOUZDRkFCMENFOUI2NzQ5RTgxRjIwQzY2QkZBRkI3Ci06MTAyQTYwMDA2RUMwM0E1MzcyNTMzOUJFNTVDQUEzNjZDRjk4Njg3QzdDCi06MTAyQTcwMDBENjA1MTQwMkZEMTYzQzZEN0FFQTAxQUVGRjc4N0RGQkE3Ci06MTAyQTgwMDA0MERGMDM4MjNFOTE4RThFQzczMjU3MkMyRDU2QTFGNTIyCi06MTAyQTkwMDA3RUZFNzZDMjA2N0NFRTg3QTc2RjEwRUU3QkJEQzFGRDgxCi06MTAyQUEwMDA2NjEyRTBFRkYzMEFERjIwOTI2RjhCMTI4OEFGQjQ3MEVBCi06MTAyQUIwMDAzRjYyRTRGMkNCOEI3Q0EwRjhFNUE2OUZDRjk2OTI3RTk2Ci06MTAyQUMwMDA5ODZFNzAyNjNBNDk2RUU1QTdBMERDM0FCMkQyNDA3NkZECi06MTAyQUQwMDAzMEQzQkJBQzkzNDg4RjNFNEY3NDJDRTczOUEyNzc4QzMwCi06MTAyQUUwMDBDM0Y1MUQ2OUM4NjQ5ODVGNTFCRTUyQTVGMzBBRDIxRjkxCi06MTAyQUYwMDBFRkVGRTNFN0Q0ODc1NTBGRDgyNENDREJBMDc4NTg1MjBBCi06MTAyQjAwMDAyOEREREMzRTZGMThFNTVENkFFRDZENTk3RTA5QkNFQTkzCi06MTAyQjEwMDAwOUIwNEJFNkVDRTQ3OTgxMkNCRjUzM0Y3NTYwRTAzRTkxCi06MTAyQjIwMDA5NkYxRjkzQzA1NDFGOTRBNTU1OUFGMUQzNEVCQzgyRUQxCi06MTAyQjMwMDA4Q0MxNzNDMjg5Rjc1NEEyQjMxMzU5OEQ0MzkzMDE5RjdCCi06MTAyQjQwMDAyNzc1QkI4NkRFMDVGNTJGMjY3QThGRUFBMTNFMjJEQUFECi06MTAyQjUwMDBGMzJGODRFQjVDRERDQTBDMjUwQkYzRkEwRkFGMUEwOUQ3Ci06MTAyQjYwMDBFRjdERkVBQ0MxNDk2QzJFRUNGQzM5Q0ZDQ0VFRkQ0M0MxCi06MTAyQjcwMDBGNjE1RDgxQkJEQjhEREUxNEFDMUZCQ0Y3MzFEQ0QxQUQ4Ci06MTAyQjgwMDA3QjgwQzNDNzgxNDkyMDAwMTdEQjZBMDU2RDM3NzY3OEUzCi06MTAyQjkwMDA4OEU1MDEzQzU3NEZENzMxNEZFMDc5RTBCMEM4RTNCMTQ5Ci06MTAyQkEwMDAyNEYzNzNBOEI0MUJBNjI0NzMzOTMzNURDN0U5OUJCRDE2Ci06MTAyQkIwMDBBQzcwN0EwM0ZCMkE1MDBGNDhCOTNEMTdGM0FBNTVCRkYyCi06MTAyQkMwMDAxRTkwNzJCQjhBMzU1MkZFOEEyMzk5REIyRkIzMTUxRkU0Ci06MTAyQkQwMDBEOUREMzU5ODg5MDJGRDJCNkMzQzY4NTZCNUQ5RTRGM0Y0Ci06MTAyQkUwMDA2NUQyOThCNjQwRkI2MDdBMzI5NzI3NzM4Q0NGM0U4RUMxCi06MTAyQkYwMDBFNDVCQzkzQUY4M0UzNUZEM0UzN0Y4MkEzQTMyNDNGNUYwCi06MTAyQzAwMDA0Rjg1NkRDMzMyM0I4RDZGNzBBMjlGQjc1MkYwNkI3NUNECi06MTAyQzEwMDBBM0UyNkIyNTNCODVFQjUxRTk1NzlEMjlGNEE4NTYzRjZDCi06MTAyQzIwMDA4NUU4MjU4RDNFOUFBOUQxQkJBQzMxNThDRkMyN0FFOTRGCi06MTAyQzMwMDBERUIyNUNBRjc2OURFRTY4MEJDMTYxMEVBQzBCRjU2RjNBCi06MTAyQzQwMDA4NUM3QjdBNzg0RDZBRDM4MDFBMzIxRUJBOTY0RUUzMUJGCi06MTAyQzUwMDBCMUI4MEY3OERFRUEwODVEOUY3NjVGMjFFQjE1RkJENEYzCi06MTAyQzYwMDBBRUJCQzJGOTU1MkJFNkJCNTQzNTI5MDQyRkVEM0UyNEVCCi06MTAyQzcwMDAzRUI0NzY5Q0M0NEI4NTk3QzNCN0EyNDUyMTdDN0VENkQzCi06MTAyQzgwMDA2RDFGMzJGMjZGNEJCQTYxQ0RGMDJGRTA3RDQ5NDdCMDM2Ci06MTAyQzkwMDBBRjEyOTQ2Rjk1QUI0MTFFNjc4NkQyRDMxQ0Q2NkM0NTlDCi06MTAyQ0EwMDBCQUE5NjFBRENCNTM5MERGNUE5QkFGMUY4RTdFODZCNTFDCi06MTAyQ0IwMDA2RkQzRjlBOUQ0REU5QUEzOEIwNTUwN0E3MzU3OEVCRkQwCi06MTAyQ0MwMDBDQTRGRTcxNzhBMjdGQzVDRjBDM0RERTlBNTlGMUVFMDI5Ci06MTAyQ0QwMDAzNTczQTNFQThBMUMxNEQ0NEZFNDNGN0EwOThFQjNCQzNGCi06MTAyQ0UwMDA1RTIzRkE2MzY3MDkzRkU1ODVENjU5QUJFN0Y3NUYyRUE4Ci06MTAyQ0YwMDBCODVFMDFDRjlGN0JERDBGMjdGNzY0Nzc4NTNGMTc3NjlFCi06MTAyRDAwMDBEQjVCMUEzREZGQjE4MUZCNUJBNTdDRkU1QUVGMjJGRjI2Ci06MTAyRDEwMDAyRUI0MEIzQkFDQ0VDNkUzN0QxQUI5OUU5RTRGNzJCRDVFCi06MTAyRDIwMDA0MkU4NzkzOUNGRDEzNTVCMjk1RTMwMTNFRDgwODBGNkVBCi06MTAyRDMwMDBDRjU2NkZBNTc4QTVGMUQ5OTk1NkI0Q0I4RkFFOTlCRTcxCi06MTAyRDQwMDAwQUYzNTI4RjM2NEQyN0JENUZGOTdCQTlGNzNEQzY0MDg4Ci06MTAyRDUwMDA3QkEyNjg0REQ5RkE3QjkwOEUzNzQ3NTI1Q0IxQTJEREQ5Ci06MTAyRDYwMDAyM0NFNDUyMDY3QTE5RjYzMEQ5N0FCNkMzNTk3QjM5NTM0Ci06MTAyRDcwMDBBODFGMDc5MDdFRUM4QkZERUVBQ0YwRjQ0NTdFMDg2ODUyCi06MTAyRDgwMDAyN0JENzlFNzc0Q0Y5Rjc3QzJCODc3RkUyOURBRTkyNUE2Ci06MTAyRDkwMDA1MEQ4NUE3NTY0Q0ZEQjVBNTEzRjU2Q0ZGRkYwMjBERTMyCi06MTAyREEwMDBEMzAxN0JFMEZENUY0QjdCMDBBQTQ1MDY0RjVCMzJFQTE3Ci06MTAyREIwMDAyMTYxMDc1NEFCMUIzMjZDNjgzNzA4QkRGMTFGODA3RjVGCi06MTAyREMwMDA0NDc4RjhFNzEyRkNDQjExRkUwMUYxREI0RjFCMzg5Qzc1Ci06MTAyREQwMDBBNzZCRTA3Rjc4MjVDN0NCRjJBNjZDMkI5RTJGM0Y2REFCCi06MTAyREUwMDBDODI2QkJFQkQzQTYxQzgyRkY4QzA3MDBGRURDNUYxRjRFCi06MTAyREYwMDA2Qzc3MzUwMEZDRjE3QzgxRjA4N0Y1OTZCNzNCMDRGQ0RECi06MTAyRTAwMDA5RDFDRkUwRDFDRUU2QzI1MkY2Nzg0QzBEOTRCRjk1NzE1Ci06MTAyRTEwMDA3N0ZFRDFFNDQ0M0JFMjc4NjQyQkQ5NTdDN0I3QThBQzFFCi06MTAyRTIwMDAzRUMwMkU5Mzc2RDEzN0FDRjE0OUI0REYyNEZDNjdGNzZFCi06MTAyRTMwMDBFOTE4ODRGMkE3RjRFMUQ3QUM4ODg3RDk1Qjc4NTAzMUUwCi06MTAyRTQwMDAwNEZFQ0M5NTQ0RjFDN0VFRjlCQkVEQTg2RjExNUZERDMwCi06MTAyRTUwMDA3NkQ0NDVFMkE5ODZCOTE5RTlDNzk2RDcwRUUwMzk0MjdBCi06MTAyRTYwMDA3MTcxQkY0NThEQkM2RkI2MjNGOEJFMTlFNjkyOTVEQTM1Ci06MTAyRTcwMDBEMUM1RTI4Qzg4QzBGNUE0NjlFRkQzNzkxOEM2QkRCRTcwCi06MTAyRTgwMDBDREY5RUFENkY5QzRFNzVENDE3OUI5MjVBQ0Q1ODBGRTI0Ci06MTAyRTkwMDAzNkQ2QUNEMDNERURFQTA1ODVENjQyODY3MUI1M0E1QUI0Ci06MTAyRUEwMDA4NzMzNDUwOUNBQ0JBRTU2NzU2NDRGNTYxOTQ1N0M0NEU1Ci06MTAyRUIwMDBFNDU1MjQ4OTdFNDkyOURDMkY5MDlDNjJBM0YyNzQyNDc2Ci06MTAyRUMwMDAyMzdENzBEQTYyRjRFMTdEMkEzODVGMjVFM0ZDREU5RDI0Ci06MTAyRUQwMDAyNkMyREI0MTVDMTNDMDVGMzUwQTNGMzNBODQyQTRCNzZBCi06MTAyRUUwMDA1QjE4QTdEMzVCQ0M3QjI5QUUwNzI3OTc3NUE4MUZBN0Q0Ci06MTAyRUYwMDAyRDM0MzlDOUNFOEQ4RkExRjhEMkNENDJERURENjI1RTkwCi06MTAyRjAwMDBFRTQ2M0QzMUNENkM3NDYxMDlFMzdBMzFGOUQ3MzAxQTYwCi06MTAyRjEwMDBBNjg3RjkwREJEOEM3NEVGQjAzNEEyRjM1OTNDMTJERkQzCi06MTAyRjIwMDA5NjdDRjg4RTA4NThFQTk1NjA4RUEzMUYxODdFRERGNjExCi06MTAyRjMwMDA3RDVDMjg1RUZDRjgwOUY2NEJENzQ2ODVGNzhCMEMxN0FECi06MTAyRjQwMDA3MDUwNUMyRUYyM0Y5QjYwRUMyODU4QzdBODE0MDc2RkE2Ci06MTAyRjUwMDA3N0Q4QjgzRjdBMkRFMEM5RTJDN0FGQjY5RDc5NzlGQzQyCi06MTAyRjYwMDBCMjBBRjNCMUY5Rjc1OEJDMjQxRjU0NUQ1MEJEQ0FDODZBCi06MTAyRjcwMDA5RjRGNzk2MjQzRjFFQTM0QzZERTYxOEU4MTg4QjcyQUI5Ci06MTAyRjgwMDA5NDIxNzhFRTJGOEJGMTYxN0NFRjNBRjQ4N0RCQjFENDlBCi06MTAyRjkwMDAxM0JENENENjMzQUY4RTk3MEQ2NjNCMEVDN0ZERTMyNUIwCi06MTAyRkEwMDAwMjlFQkYyQTYwQUQzMTAwRjdENkQ3ODNGREYzMzdCNDU4Ci06MTAyRkIwMDBFQTVBRkIwMjdDQUZEM0I3QjYyMTdERUEyMjFDMDYxQjdFCi06MTAyRkMwMDBDQ0UzMUVBRkU0RTIzOUE1NkFFOUM1QURCN0UyODlBNjU0Ci06MTAyRkQwMDBFMkQ1QTNBMEFFRTNGOUFDNURCRkU2RkU4OTVCODA1OTA0Ci06MTAyRkUwMDAxMTZFQjdFQTU5QkI5QUNCRTkwMEUxNTI2Qjc3NzhBOTI5Ci06MTAyRkYwMDBERjNDODVFMjM3MzIyRTIwRjEzRjE4ODYwRkM0RTMyREU3Ci06MTAzMDAwMDA2MjdEMzA0RTgzMTVERjM3ODZDN0Q3N0M4MTJGQ0M4QzBECi06MTAzMDEwMDA0NkI4Q0YxNTdDMzc1N0YyNUI1MzMwQkYzRDgyNzgwNEZBCi06MTAzMDIwMDAzRTU1RDAyRTA2QjhERDIyQ0E5RUY4RTJBMTE0NkU0N0E2Ci06MTAzMDMwMDAzRjk0QzJDRkVGRjc1Q0UyN0NDQ0RDOTU0MTc5Nzk4MjlBCi06MTAzMDQwMDA1RkFBNEQ3QzdDMzlGRjc1QTI3QzMwQzU0RUUzQ0JGNTgxCi06MTAzMDUwMDAwMEJEN0U4QUUzRTg0MDAyMjBCRDFFNjlBQzI3RkI2ODA0Ci06MTAzMDYwMDAxNjBCODhDMzY1RkFGQjQ5QkEwRUFENzdDQjExRERGN0I1Ci06MTAzMDcwMDA1ODFBQkI2NjIwRTg5NTVGNDQzQTUxOEVERTYyNkNDRUVBCi06MTAzMDgwMDBBOTMzODdGNjkzNzFFNjUyRDY2MUEwRUYwMzQ5M0Y5OUMxCi06MTAzMDkwMDBEMDNGNjM1NTMzRTUzNTk1MkFGQzFFRjRFOTQyOEI1NzQyCi06MTAzMEEwMDAwNzc2RTJDNzIyQkU3QjA2RUM0NjlDQTczNDU2QTFGQ0ZECi06MTAzMEIwMDBBRjY5MzE3Nzk2MjA1Rjk3NUE4RDdBMkMzRjE2RjFERkYyCi06MTAzMEMwMDA1QjU5MTc4REZGODkyRDJCRTYwNjg2REY0RDUwMzFFNkMzCi06MTAzMEQwMDAwNzBCRjhBNEQ4MDVGQkFENDdGOUMzRUIyQjVENjlFNEZBCi06MTAzMEUwMDA4RDEyRjU0RkY3NjE1QzY2RUE3OUEwMDNBQTFGMkU3NjcwCi06MTAzMEYwMDBDMUJDQTc1RjE1Q0ZEOTkxNjI3QzdFRkEzRTQxQ0ZERTdECi06MTAzMTAwMDBFMzM0REVFOUM3RTRGMzUzRkNGOTBBRjlGQzJCNUU3RkY0Ci06MTAzMTEwMDA1MDhFMkZFQTBGNkI5RTJGRDEzQzdGODJENzVCOUZGODlBCi06MTAzMTIwMDBBQUQ4OEJGNkVCNjg0RURBQTUyMzE0OTI1NzQ2MjEzN0JFCi06MTAzMTMwMDA0QTk3QjYxMjlDNEI3NUJCNzgzOTlBQjVFQUYyMkZEQ0U4Ci06MTAzMTQwMDBFRjY0OEFEQjk4OTI4MEY3Q0U4RjU4NTAwRkZGMzNENTBCCi06MTAzMTUwMDA2NTRDODE3RTlGMjY3OUZFODZFNTlDNDk4QUQ3ODg3MkQ4Ci06MTAzMTYwMDBGNzNEMUZFOTg1OTIxRUYyMjc4RDQyQUU5RkVBRTVBNjQ0Ci06MTAzMTcwMDBGN0E1MUU4MzcxREVDM0YxMkY3NTlDQkI0M0M3RjlFNDJECi06MTAzMTgwMDBDNzhDNzM0RDZBQzgzODQ3N0ZDQ0JFRkU5Q0NBRTEyNDA5Ci06MTAzMTkwMDBDNzkxNzY1MTcxQkE0QkU5ODVGQzNBNjY2NDkwQkY3MDZECi06MTAzMUEwMDBFRUJEQ0UxOEY0NEIzMUNDNzcwM0QwQ0Y1RERBOUM5MUQ1Ci06MTAzMUIwMDAwN0UzQ0Y3REVFQzU4QzBBQjQ5Qjg0QkVBRjM5QTczMjNFCi06MTAzMUMwMDAxN0M4QTNEQTczMEE5NTVGQjQ3RDY0QzQ3QkIzMzVEQjlCCi06MTAzMUQwMDBEQThDRTNBMDVGMkQ5NDQ1MDFFQkFBMTJFQjA0N0RBN0U2Ci06MTAzMUUwMDA5RjFDQTBBNzhEQkQ3NDQyNkUzQ0NDRjMzMjlFM0JBMUM4Ci06MTAzMUYwMDA0NzdDQ0VENTM1MUZGRDNERUFFRjExNEFEOEY4RjI5NzRFCi06MTAzMjAwMDA2MjdGMDc3QkI4MUY2MUVFQzVFNTUxNjE2RjU3MzRFRUYxCi06MTAzMjEwMDBGMzE0MDYzOTYwRkNBMkZBRjBGOTAyQkYxMkVCMjgxNThDCi06MTAzMjIwMDBGQTZGRkE1MDRCODQwM0UwM0NFNDNEMUU1RkFGNTg5QkJECi06MTAzMjMwMDA5OThCRkU2MjYzRjJFODA0ODI1QjhGN0VENjJFRUU2Nzg2Ci06MTAzMjQwMDA2REUxN0VENjUyN0JDNzAyRkM0RTk5QkI1N0VDODNGOEVBCi06MTAzMjUwMDBEREIyMDlCRjkzN0MwNjJDMEJFRjhFMzdDOTdBQkY4OThDCi06MTAzMjYwMDA2MzQ2NzEzRjE4RDZGMzdFOUZGOTIwRjJDRERFMjg2RUJCCi06MTAzMjcwMDBDRjRFMUIzNjMwMEFFNTQzNjc2NkI0Q0UwNkZDQUM0RjMyCi06MTAzMjgwMDAyQTczRjc0QUMwRjZBQkM2NjE3QkExQzlEMkE3OENFMDBFCi06MTAzMjkwMDBDQjg4MkVGNDQ5RUVGRUI4NEVFQzhGRkUxMThGQjEzNTdGCi06MTAzMkEwMDBFMTA2RDg4N0U3MEQ5NUVFMDM3ODA2NDU3QkMyQzVDQkNFCi06MTAzMkIwMDAyRkVGQzVFNUI5QkI5NzhERTBCMTU3MDdFQkNDRjVBRjY0Ci06MTAzMkMwMDA0M0NFMEY3NkZEODIwRTE4RUZDOEQyOTRDMTBGMzgzMDZFCi06MTAzMkQwMDAxRTUzNzg1REFGMDRGRkZDQjM5MjNDQTMwMkU3M0ZBMjBDCi06MTAzMkUwMDA2MzdERjA2ODcxQjFFQjE4MkVGMDcxMURDMjA2NEFGN0NDCi06MTAzMkYwMDAyOEEwQjc4MEYzREVFNDMxRDE0MUY1QTlDNTcxQ0MxNTIyCi06MTAzMzAwMDBFOEJGOUQ5QTFBNTRCRkIxMzQzQkE4RkZDRDMzRkEwN0VBCi06MTAzMzEwMDAzRDlGNjhFQUM4QUYwQkIwNjc3QkI2OTdCQzA0OUY1QTY1Ci06MTAzMzIwMDA4QjI1MEFFREJBNEY1QUJFRjlFMDE2QjQwMzM3QUE0RTAwCi06MTAzMzMwMDBCNDU5NjdFRkRDRjRDMTQ4RTg3NTA2RjAxQjQ3N0U0OUQ1Ci06MTAzMzQwMDAwN0Y5RDEzRTk3Nzk3NDdBOTczRTMwN0U3NDhBNzU1MDJBCi06MTAzMzUwMDBCRUEyM0NENzVFNkNEQzY4QUVBRDlERjIwOTdGQUU3ODU0Ci06MTAzMzYwMDBEMUJDNUVFMkZDOUJDQjcyNTEzRjlFQTk3QjlGRkM3OTU2Ci06MTAzMzcwMDAzNTY2QkVDRjUzMkYxRUUyREYyRDQ0QkQwMjc0N0YzNTZDCi06MTAzMzgwMDBCRTg4RjZFMjM5MTBGQ0MwRkY0NTNCMEU1MTlDQ0Q4NjRECi06MTAzMzkwMDBDMTREQjRGN0QzRTZFOUYxRkU2NDJEOTRBODVGQzY4MTcwCi06MTAzM0EwMDBEQzhBMDFCQUU5Njg2MzAzQjc2MURFNDhBNjg1REJFNTFDCi06MTAzM0IwMDBFN0E2OTBCRjdDNkYxNEY3RkJFQzREOENBNUVGNDhDQ0QzCi06MTAzM0MwMDA2REI4ODZEQTZCQ0U0NUQzRjg2RkE5MURFMzI4MkZGQUM2Ci06MTAzM0QwMDAwNTg1RTIxMzEzNTNBNzJEQzVGREVDOERGMjBFQjgxRDI0Ci06MTAzM0UwMDBFNjlERjhFN0FCQzcyM0RDNkFCNkYxN0IwMjEzRDU3NzFECi06MTAzM0YwMDBGMkU3NDE1OUQ1NzgwREJEM0Y1MTY1N0IxNUIwMUY2MjhECi06MTAzNDAwMDBDRURENDJFMzRFNDQxQjAwRUFFQTUwQ0IwM0E4OTc1NUI5Ci06MTAzNDEwMDA2MzZCOUYzRkEwQkMzMTVBNDhERUQ0OUU4QkE0RjcyNjM1Ci06MTAzNDIwMDAxNDcxRkRGRDdCMjE0RjBDOUQ3QzVENjNDRjREQTJFN0E4Ci06MTAzNDMwMDA5MjJFN0NCREIyODJGMkY3MEQwOTFCRjVGOEJEMjE0MzM3Ci06MTAzNDQwMDBBNzQyRkRBRjNERDc5RjRBQjlERjM3RkFGRDkxQkUyRkE2Ci06MTAzNDUwMDA2MDQ4Rjg3QTFDRTY4REJFMTFBRkQ4QzgyQ0QxQzhFM0ZECi06MTAzNDYwMDBCMzc1QzM2MjU4MTg3OUQ1M0RDRjM5OUU2RjZDM0FDNzkyCi06MTAzNDcwMDBGMzhGRkYzQkNERjUxN0U0QzM5MjQ1OUQ3QThDMTczMTRFCi06MTAzNDgwMDA3Mzg0MERFMTU1NTIzMEQ4NTExMUMwNjdFQUFFOUI4QzYwCi06MTAzNDkwMDA4ODFGQzNFQUI3OERBOEFGNEQ1MDE2MDUzQ0FGMTZGOThCCi06MTAzNEEwMDA1ODVBNzlERDIyRTQ4M0ZDOEU5QkQ0M0YyQzc5MDZEMUQ3Ci06MTAzNEIwMDBFN0FEMzY0MUEwODI4RjlFMTY3QzJDREZFRkEwMzMwRTQ1Ci06MTAzNEMwMDBFMDcxM0JGN0YzQjdBNjc5REU0MjM5RDE1MUM4NkU3QzgzCi06MTAzNEQwMDA5RUU0Njc0NzA2QzY2OTdFQUVGNTAzOUUyMzE0QjIxQkMxCi06MTAzNEUwMDAzQjI5QUZCRUE0QzBBMUMzRjhDMDdCREQ3QTg3RjNGMzRDCi06MTAzNEYwMDA4NUY2RDEyNkY2RkQ5NkNBMTZFMkI4NkZGREYyOTcxRDQ1Ci06MTAzNTAwMDAyRTE4QUZFREVFQkMzQ0Q0MEI3MkRFQ0Y3QUYxN0IwQjA0Ci06MTAzNTEwMDBDQ0Q2NzUxRUNGODdCNTJGNDczQjkwRUYyN0UyRTEwQzQ1Ci06MTAzNTIwMDBFM0EyM0I0RDc0NkU4MTc2OEE3N0Q0QkU2QzdBMEFFRjQzCi06MTAzNTMwMDBCQkQ1NUFFMUZDMEFGMzE3QkQxMkQ5OEE3NERDRjY0QUVFCi06MTAzNTQwMDBBNDFFRjVDNzFEQkQzRDlGMjE3QzhBNUVFOTNCMDZDRkM5Ci06MTAzNTUwMDA4QkFFMTY5MzlFOTFGREUzM0E0QUYyQjY4N0Y1NUU0ODJDCi06MTAzNTYwMDA3RTY5RTk0Q0YyQTdBNzgxRjM0Qjk5QTBEMzcyQzE3RjgyCi06MTAzNTcwMDAxRUMxNDc2N0VCOTI4ODBGQ0YyRTgyNDU2MzNDNzU5MTQxCi06MTAzNTgwMDAzMjcwMUJEQTBCMEUwQjdEOTc0RUYyRTU0NDNDMUY0MTY3Ci06MTAzNTkwMDBGQkM0RkVCMTc0OEZBMUVBNUM2QzEwMUY1NjlGQ0IxNDY0Ci06MTAzNUEwMDBGQzFENDdFRDkyREZDQTA1OUY5ODg0N0QzMTQzRDBCNTVECi06MTAzNUIwMDBCNDVCMjQzRkIyNzQ0RjYyMkFFQzYzNjIzREYwQkQ5NTY4Ci06MTAzNUMwMDBFMkZFRjlDODRGN0VCQTMxREE5MEJFODA2RTkyMkIwMkNECi06MTAzNUQwMDBGOEE3QkVFRDI2ODY3NjhBMjlERTRENzQzMzAzQ0E0MEVECi06MTAzNUUwMDAzQjY1NjZCNzlENjIxQjk3MDhFQjJGNTk5NkE5QzM3Qjc1Ci06MTAzNUYwMDA5QkYyNzk2QUVBQTVEMTdGNDRBQUM4MjczMEI3RTZBMDMyCi06MTAzNjAwMDA1RDZCQTg4Qjc0RTI3RDlBMzNGMTNDMUUzNDdGMDU4Nzk1Ci06MTAzNjEwMDBFMzdDODNCQjA4RUQ4Q0Y5NEYyOEU0M0Y0M0ZCMDNFNUQzCi06MTAzNjIwMDBEMkQwMDM3NUM2NDBCRkNBNERFNzA2NTEzQzdEQ0FCOTJBCi06MTAzNjMwMDBDQkE4MzQyNjdCMkU0NzM4OTQ5REJCNUVFMDZCRDA4RkExCi06MTAzNjQwMDA4QTNGMEU3MTcxQkY5MkMxNjc3MjZFQzg0NEJGOTI0N0M0Ci06MTAzNjUwMDA0NTNDMUY0RjY3QjY0NzAzRTM3RDZCNTRGMjhGQzlCOEYzCi06MTAzNjYwMDBBNEY0MzM5OUYwREU0RjgwM0VGRDQ2REY5ODQxREZBMzlFCi06MTAzNjcwMDBEMUZBOUQwQUI5RkUzRkI5RDE0MEZBQkZBQUVEOURBMThBCi06MTAzNjgwMDAzQTc4RkU3OUE2MkIwOUY1Qzk3QTgzQTcwOEY3MzM2NzNDCi06MTAzNjkwMDBCMkVGMzkwM0Q0RTczRUI4RDUzQURDRTE4NzY3QjNCRTcxCi06MTAzNkEwMDAzNTA3RjU2OTMzQzAxMUZENUZDRDJCRDVGMTNFNkVGN0JGCi06MTAzNkIwMDA0NEYzMzgxQUE3NkY0OUNGNUEzQTlGNzMyRTlCRTA3MzkxCi06MTAzNkMwMDBCNkNFNDQ3QUU4MkNEMDJEMEJEMDQzNTJFRjQ4MzkyRjk4Ci06MTAzNkQwMDBGNThGQTRFQjZBM0Q5NzVGRDVFNjE4Q0EyM0YzRUI5REZGCi06MTAzNkUwMDA0OUVFNDJBNEJCN0UzQzFGRDBBRjc3OUU1QTM1MDJGOTBCCi06MTAzNkYwMDBFMDc0M0NFNTVENEJCRDIxRjlFMDg1QzVDOTk0NDcyNEU0Ci06MTAzNzAwMDBGNTkyRTQwMzI5Q0ZBNTdDOTc3NDJGRjVENkU4M0ZGRDA5Ci06MTAzNzEwMDBFRkQ2QkZDM0FGOTNEMjNDNzdBNTAyN0Q1REFCRTdGQThFCi06MTAzNzIwMDBFQjVBQkQ4NUU4Njc2Q0ZDMjQzREQyQ0RDNUNCRDE0M0I3Ci06MTAzNzMwMDA0MjhFMUUwQTkyQTMzNTNERTg4MTQ1QTk1MjdFNUUxQzQ5Ci06MTAzNzQwMDAxRkNDMTE3QzMzREVDNEVENDg5NEYzODFFM0I1QTY4RDI0Ci06MTAzNzUwMDA3RTA4RjdCMTNBOTVFQkQ5OUY2QkREM0RDOUZGRDVBOTNFCi06MTAzNzYwMDA5NzI2RkY5N0E0NUU5Q0ZDRkZFRjU0RkU5RDBBQURCQzFDCi06MTAzNzcwMDBDNzBGNzFBM0JDM0ZCREYzNzIxRkVBODM4MzBDRjQwMzMwCi06MTAzNzgwMDBFQUMxOTY2OEM3MjZBMTBGNDg1RjQ0QzVGODdFNDgxRjY2Ci06MTAzNzkwMDAxNEY2OUVGRURGQTlFMUY1QzE2NjZDRkZCMUZBNDBEMkQ2Ci06MTAzN0EwMDA5N0U0MUJDOTI3OTIyRkI0N0MyNEY5NjJDMjZGRTFCQzU1Ci06MTAzN0IwMDA4ODc4N0E4QkRGOEZBQUQ2N0I5QjI4MEVFOTg4MUU4Q0FGCi06MTAzN0MwMDBGQ0Q5NkRDNzZENTM4OERGNDJGNDg0RTAxRjNGQkYwNDBFCi06MTAzN0QwMDBFQjBEQzkxRjkyNUYyNEZGNTQwQkZFOTgyOUY4NDNGMkFBCi06MTAzN0UwMDBDNTZFQjVGOUQxMTE5ODBBOTBFNkY5MDhFNTg4RTQ5MzE5Ci06MTAzN0YwMDBBQUU3QjVGQUExNDdCQTQyNEYyMzlCMTk1RkM3OTBBRTFCCi06MTAzODAwMDBBQUExMENBNDJCNTMwRkZDNzBGMDEyRjVDMkJFOEJBNDFFCi06MTAzODEwMDBBN0FGRkVGM0Y0RjQ1NTBGRjQ3NEU2QTdEMDUzQTgxRDM4Ci06MTAzODIwMDBGQjYxQkUwM0Q2NzMzNjFGRTQ2REE2OUZERTI2RkM4REJBCi06MTAzODMwMDA3MUZCMjE5QjlGMDdGNjQ2RjE3REVFMzVBNjkzRkY2NzRFCi06MTAzODQwMDBDMkY3M0NDRjU3REEwMzMzODVCRjQxRDI2OTFFRDgwMTk2Ci06MTAzODUwMDA2OTQzRkNGOEM3RjNDMEJDOEI5MzdCODQ2NzUzN0M4N0I4Ci06MTAzODYwMDAxMUNGMjczM0ExMENCNDAzN0FCMjdGNTNEMzJFNERFRTgwCi06MTAzODcwMDA0NThBRkUxN0MyRjM4MEI0OUZERDZFMUM5MDE2MUVBRjAyCi06MTAzODgwMDAwM0QzN0UwMjVFMjc2MkEyMkFGOTJCQjI0QjVDQTMwMDBGCi06MTAzODkwMDAzRjBGODlCQUI3NEYwOUMyRjFGQTAyRjlGQ0IyNTUyRUFGCi06MTAzOEEwMDAzRENBMDdENkZEREQ3NUY0NzdCQ0E1Q0E3QUNFRkUzMUQ4Ci06MTAzOEIwMDBCMDlFMDk4RjMyQkYxRjFEOUU4RjFEMTVEM0VEMUY1MTY2Ci06MTAzOEMwMDA5OEJGN0Y3MTVBRDZGRTk1QTRFNzFCNDVERTRBQTc5RTk2Ci06MTAzOEQwMDBDNzgzNDQzRDFGRUE5NjgwN0E4MUE2QkU5NkY3QjdFQTcxCi06MTAzOEUwMDAzQjU5NjAzRTA5RDI4RDkyQ0JGMUVDMEVCMDFGNjBGQUNECi06MTAzOEYwMDBGNkIzQTgyRjZDMEE0M0ZGNDY2REZDODY1N0NGQTI1QzM3Ci06MTAzOTAwMDBEQkExNTA2Q0FBMUIwRURFODEwNDA3RkEzRTM4RDUwN0Y2Ci06MTAzOTEwMDBFRjc3NURDNkQ4Q0REQjc4RkRGNkI1NDM1Njc5MkYxMzJBCi06MTAzOTIwMDBFMzA2REMxQjMyMzQyQjJFQ0E0NzI4NTA3QzU5OTlBMTYwCi06MTAzOTMwMDBGMEJFM0Q0RENBMTNCOTFFNDZGNzE0MDJERTY3OThBRkJDCi06MTAzOTQwMDA3NzI5RUY3N0U3NEQ2N0QxRkJBREE2NEI5OEZGODY1MUZFCi06MTAzOTUwMDBFMUVGNkZBQzEwRkRDNkU0Qzc4NDdERkU3MDlBQ0FFMTRBCi06MTAzOTYwMDAyRkZDMDYzNDNGMzQ0RDY5MEU3RjlGRkYwOUMxMkYxRDg4Ci06MTAzOTcwMDAxODNGMjE3ODRFNUE4NUZFRUQwRUEzODRCNzdCMTVDMjAxCi06MTAzOTgwMDA3QjJDNjM0MTdFMzQ5ODlGRUExQkQ3QkE0QjFBRjQ3Qzk4Ci06MTAzOTkwMDBCQjJFMERCQzdFNjhCRjc3QTUwNURCMDNGNDlCMDY1RkRECi06MTAzOUEwMDBBNjFGODBGN0RENjFERTc3MDRCRkRGRkE0M0Y4NUExMjA1Ci06MTAzOUIwMDBGMkJFQTBEQjU5OTI4RTVENDFGNDFFQTM3NzEzN0RDNjQzCi06MTAzOUMwMDBDNDJCMzZCNEEzNkJEQzkxMkJGMUJDRTBFN0NGRDIxMjUxCi06MTAzOUQwMDA4MjlCOEMxMzg0RjBERkI0OTIzMTAzQzg0RTEyQ0Y2RkY4Ci06MTAzOUUwMDA1Qjg1RkNFQkQ2NzVGN0U3RkMyOEU5MUFBRjM2MDE1QzdFCi06MTAzOUYwMDBDOUY1MDdFRkJGOUM3NkVCMkFGNDRGMDI1REQwNzNBQTlFCi06MTAzQTAwMDBFQjAzRDZBREU1Qzc2NjREN0Q5NDg2N0YwNUZGOTFGQzNGCi06MTAzQTEwMDA0MDdEMDA3MENBNDFGOTE2N0ZDOEU4MDhBMDkzNEYwNEEyCi06MTAzQTIwMDA5QzRFODk3Q0YyOEVEMURDOUVFQ0M4RTJFNTc3NjkzQzQ1Ci06MTAzQTMwMDAyRUY1OTlBMENCNTM5MjlFQTIwMkUwOTAxNjQ0M0ZGNDNCCi06MTAzQTQwMDBGNzIxMDJGNjRENzBCQTI5NUVGMkYzQkQyNUM1QzBCRjVECi06MTAzQTUwMDAxRDc2RkVGQzdGRDZGRTY2OTUzN0NENUZENzhFRjdDRkZECi06MTAzQTYwMDBCNUY3OTYyMDVDQkFDN0Y3MkVEQThGNzZDNDREMDI2RTkyCi06MTAzQTcwMDBERkFEQkQ2N0JGNzc4MEMwNzNBMkZGQkJBQjQwMUZGNDUzCi06MTAzQTgwMDAzRDlFNkFBNDBGMjU5NDNFNUUwREE1MkZBRkU2N0RGQUZDCi06MTAzQTkwMDAzQjA0M0RCREZGQjc1MDc5RTBEMkJDQ0ZGMDdCMTAxNzlGCi06MTAzQUEwMDBGRkJFQzA1QkIxMDZBRkUzMzU3ODFEQTNBOTk3Q0FCQUM0Ci06MTAzQUIwMDAyRjQ4RkU0QUI5NUNCRUUzRTFGQjEyRTNEMUFGQTlEMEM3Ci06MTAzQUMwMDA3NTI0M0YzRDNGNDhGNDNDRDcyNkU5NzcxNUMxRDU0RkQzCi06MTAzQUQwMDBDRjBGRUQ0N0ZBOUREQzJDRTlCNTkxRjRDRjI0OTRDM0M4Ci06MTAzQUUwMDAyM0ZDRjUyOTI4ODdBOEZFNzAwOUM2QzVGQ0ZBRUE5MUNGCi06MTAzQUYwMDA1NTI4Qjc2RjY4OTBGRDFGQTVGRTM3MkY5M0UzQURBNjNECi06MTAzQjAwMDBFNzEyOEY4QzNENDZGQUVFQTY3Q0E5QUYxRTI3QjkzRjdGCi06MTAzQjEwMDBBNzg1QkZFRjRDRkZEREZFMUZFNDg3NDYwRDVDRDY2QTJDCi06MTAzQjIwMDBFQTVFNERGRkQ1MTdEMDZGQ0IzNEVGMkZEMjNDNUZBOUEzCi06MTAzQjMwMDBBOUFGRDFENDFCODJERjJGOUJBMTEwMUY5NjE1RjAzODlGCi06MTAzQjQwMDBBNTk2MkZCNUY0RTE0QUVGQjY3M0JBRjVCOTYyMjZGQjM0Ci06MTAzQjUwMDAyRTg4QUYyNkQ0RjNGQUI1RTkxQjRCMUFDQzAxRjU3NUM0Ci06MTAzQjYwMDA5QjRBMzg1RkMwNkMwMUY3OUY0MUU2N0E1NUEwMDc0MzM2Ci06MTAzQjcwMDAwRjcyQjMyMEJEMDdCOUQ5NEZBQkVGRjlGMzdGRTBBRkI4Ci06MTAzQjgwMDAyOTE0MzcwQUIyNEI3NkFCQzFGNTM2NTVBQ0RCQkI3NUExCi06MTAzQjkwMDBGRjgyMDE4MUYxRDVFNzRCRjA1Q0RENjMxQ0M3REI1Qzg0Ci06MTAzQkEwMDAzMjI2RDAyRTYyQ0QyNUFFODA3RENBRkVFM0JFRkI1RUZFCi06MTAzQkIwMDBDNUY5M0NFQkZFNUNCMkQxOEM3MTRGMTFERkI0RjMxMjRFCi06MTAzQkMwMDBGNEE1OEFGQUJBNTZGODZGQzY2MTFFMkZDNjkzQTI1QTk4Ci06MTAzQkQwMDA3M0U2MEYwOEQ4Mjc2QkVFODNGQjZDQkI1QkU1REZCN0EyCi06MTAzQkUwMDBBQjA3RkMwMDlDQ0E5ODgzRjI1MEE3MzMxN0U1QTVCNjMzCi06MTAzQkYwMDBDNUM0MkNGQzJGNzg2RkY3RERFQTQyRDREMzA3MTdDNjczCi06MTAzQzAwMDA1MTVFRDMyQkU5RkM3Q0IxM0JBNjc3RTI0Q0E4Qjc0NUNCCi06MTAzQzEwMDBERjQ2RjJCNkVERkVCMTU0RUU1MjVEQ0JCQjZDOEMyRDlGCi06MTAzQzIwMDA1RUY3NEE4OUY5NzI3QzFFNDM3MEJBM0JGREE1OTIyNTY2Ci06MTAzQzMwMDA0MEVGRjdBNjNCRTg3RDhGREQ5NkI4MDNFREVEMDcwQzZFCi06MTAzQzQwMDAxNDM3MDQwRTc4OTJFOEU3NDFEMzYwM0M2Rjk3MkRFOTcyCi06MTAzQzUwMDA0RjcxQjFGMkM3MjY4REMzN0JBNEU1RjcxOTI4NUVEMjU4Ci06MTAzQzYwMDBBOUIzOTE5RkM4RjNDMDU4Q0E5MzlBQjE0Qzk0REVBQkU0Ci06MTAzQzcwMDBBOTdDRTVERjdGQUNDNzdCQTY1REVCMTRGQTRFQ0Q1NTgyCi06MTAzQzgwMDA1RjM3RkY2RDEwRDQyQjFCQjJFOTdFQzZDQkU3NzQ5NDZGCi06MTAzQzkwMDAxN0ZFRTk5QUJFM0VDQzUzM0UxQzU5NDdGOUE1RDA5RjZBCi06MTAzQ0EwMDBFRUJCNTY5RTc3RUMyRkM5QzdGRUFBMEQ1MzM4OEU0MjQ1Ci06MTAzQ0IwMDAzQkRBQ0Y0NzU3QTg0RkUxM0RDRTMyQUIyNTBBRjNCQkU1Ci06MTAzQ0MwMDA4RjdFQzdDOEFGNzNGNDNFMTM3REVGRTY1M0IzRTdENkRDCi06MTAzQ0QwMDAzNUYxNzQ4RjA5MkQ3RDc2NTQ3MTU4MTU4MEMzREFGNDRGCi06MTAzQ0UwMDBGRDI1QzkyOUQ4NkUxMkY4REM2RjJEMDMzRTJGRDM3NTQwCi06MTAzQ0YwMDBEMzBGRTk5MzhBNTg1RTVGQkJFRUNEOTI0REIwOEZBMzkwCi06MTAzRDAwMDA0RkY0QTU3Q0IxODQwQ0Q3QkE3NDgwRDdFMTBDRDc5MzVCCi06MTAzRDEwMDA1NDhBRkJEOUFGRkM5QkM3MjU1RjNBNTk5RTg4RjRCNUZFCi06MTAzRDIwMDA1OUQwRjVDQkU3Q0ExMzAzRkY2RTQxQzUyOTNERDFDMTc4Ci06MTAzRDMwMDAyQjQ2QzcwMkZBRUU2OTU0QkE4MkU3NkNBMDgzMzhGNEM2Ci06MTAzRDQwMDA5QkNGMTBFNzE2QTBFNzg1NUJDM0Q4NTc0QkQzQjkzRDhGCi06MTAzRDUwMDBENkY2REI4NDUxOEUyMEJBRkU5OEU0Mjk5RDM3QTBGRTZBCi06MTAzRDYwMDA2MkZBNDdBNEU3OEU5ODE2NjIyRTc1NzczRTI0REIxRDEzCi06MTAzRDcwMDA0OTcwMzIzNDQ1RkEyMjMzRDE3RkVBMUFFN0EyRjM0RjcxCi06MTAzRDgwMDA3MzlGQzk5NjAwM0UxNEZEM0ZGMUYyRkNERjRGQTAzRjQ4Ci06MTAzRDkwMDA5RUZCM0VGMUZFM0Y0QjYwM0M0M0Y2QUZCNDVBQkM2ODFECi06MTAzREEwMDA1QzFDQjM1OEY0ODg4RjgzRkFDNTQ3MzEzRkFENjI5REUwCi06MTAzREIwMDA4MUY0NDBDNUJBODQ0NTVEMjg3RjgwNkVEMEJGQTZERDAyCi06MTAzREMwMDA5NzI5QzNDMEZEMTgzREM2NTczRjJGMTk5MzE2Nzg1RTNCCi06MTAzREQwMDAzOTQxRjJCQjI3QkU3QzM3RkQ0NEM5QzYwMTNERjM2NUJFCi06MTAzREUwMDBBNThEQ0JBNzcxRUJGOEY3NzUyQjg3NThGNDc0QkY3QkMzCi06MTAzREYwMDBEREFCOUJFODFFRjBCQ0M4NUNCQzU3NTFCOUNFNDRGOEEzCi06MTAzRTAwMDBFQUI0NThCQ0I2MkJGMUJFODE0NTFGMEJFNUExNzRBRUQ4Ci06MTAzRTEwMDA0RkY1MTkwRUMyNDc5MUNBRjQxMUI5NTREMjNEMEExOThGCi06MTAzRTIwMDAzRjNDQjFGMEQxQzczMTFERjM3M0U2QkI3RTE4QzBFRjQ0Ci06MTAzRTMwMDA4QzhCRDNFOTk5NkQyQUY5MUZCNUYxQzRFQUQ3QjcxQTZCCi06MTAzRTQwMDAwQkQ5OEY4ODI3RjYxMDQ3QUM2MjlERTJCQkUyRTFFMzE1Ci06MTAzRTUwMDA4OURBMzhFMkJGRDJDNUJEQjNFRTM4QTI4MUJFODc1MTQwCi06MTAzRTYwMDAyOUUyODg0NTZCMTU1QTdGRTU0MkZFQkQ5MkEyMzhFRUU1Ci06MTAzRTcwMDAzRjNFQjIxOEU4QTAyRkVEREY2QkNCQzUzQzY5QUU3RkFCCi06MTAzRTgwMDAyQTk5RTI4QjgwNUZBRjVFM0I4RkZDOTk3NUU5MUM1RURGCi06MTAzRTkwMDA2NUUyM0JCMDg3MjM5RDE5NzhERUFGNTgxNzQ5NzBBRUI1Ci06MTAzRUEwMDA3QzcyRjYwNzRGRTRFMzdEQzA4OUYxODFFNzZCOUJBMDRDCi06MTAzRUIwMDAwRjE4OUZFMTNENjgzOUNFQjEyNUY3RDA3NzY3OEJENkQzCi06MTAzRUMwMDBDMzM5MTlGM0I0NjNEOTczMzc2NTIyREU1MjMyMzBERTU5Ci06MTAzRUQwMDAyOUZCNTUyRUJEQkIwRkVGMDdFNzZDRDg3N0Q5MEE5NUE0Ci06MTAzRUUwMDA3RjBGNkJCQjg5RjQyMUYwN0MzMjBCQjgyRjNFNjNEOTc2Ci06MTAzRUYwMDBFQjQ2MjNENzY3MkM3OUE4QjBCMzFERkVGQjZDOUZDMjlECi06MTAzRjAwMDA3M0ZDMDQ0MUFEQjhCNzI2RTEyN0VGNUI5NUU5RjhGN0ZDCi06MTAzRjEwMDAzNjRCNzUwQUREQzMwMjg5NDZGNzk3N0U5MUMxRkRBMzMyCi06MTAzRjIwMDA3OTE5RENDRTJEQ0I3MEQyM0Q5RUVBNTUyNkU3RDI0Q0Q2Ci06MTAzRjMwMDAzRTRFRjdCRDc1MzhFNzU1RUIzQTJBMjhBRUY5MTcxMzEwCi06MTAzRjQwMDBGOTU3NkE5NzQ1QkEyMkFEM0MxRkUzRjkwMTk0NzdBRDYyCi06MTAzRjUwMDAzNzAyM0NBQTFDNUM2RUZDNDJEMDYzQUQ2M0QyRDU5NEEwCi06MTAzRjYwMDA5RkFFNjcwN0YwRUYwNzU2NUJCODlDQUM4RTA1Qjg5QjE5Ci06MTAzRjcwMDAzOTAxRTk4NkUyRjczOTE5RTU1M0UyQjgyOTgzMDJFNjA3Ci06MTAzRjgwMDA1NzQ0M0I4Q0UzQjBGQUM3RERBQjYzMERFOEE3QzFGRTM1Ci06MTAzRjkwMDA5NzBGNDIzOEM2NUQ3RjIzQUVFRjU5OTVGODFBODBCNDZCCi06MTAzRkEwMDBBQTAwRURCRjY3RDUzQzNDNzc5N0FERDgzRDBFRTVGMDU0Ci06MTAzRkIwMDBEQzJEODNGMTQ2MDUyQjdCRUU1REQyMjM3MzA1RkUzQkEyCi06MTAzRkMwMDA0NTNFNUEzOUQ0RjFCQjgxMzc2NDcwQjlFOTUxQjlERjQ0Ci06MTAzRkQwMDBFODA2MDEyRjQ5MDdGMjc5RjUwQTAzRjdFMzgzQkM0N0E2Ci06MTAzRkUwMDAwMTUzQkRFNDQzMUFCN0RBRDI5MTg4NzJCODdBQkI4MTIzCi06MTAzRkYwMDBFRTg3REY4Q0VCMDYzODk3MkY0OTFGNzUwMEU4QUFEQ0E3Ci06MTA0MDAwMDAxMDQzREY1MUFERjI0RTM0NjJCREFBNTFBMUJBRkZCRERCCi06MTA0MDEwMDA4NDBDQTREMzJGOTZCRDYwNDVGQTM5MUNEOTlBODNGQTMzCi06MTA0MDIwMDBBOTZCNUVBNDkzRUUyOURBQjhERkVFOEI2NTM5NzRBRjI1Ci06MTA0MDMwMDA2OTg2QURDMzgyREY2NTk5QjEyMERCOEU3MkZDQTBBRENECi06MTA0MDQwMDBENTg4Q0YwRjM2NjdFQUIwRUVCMkQ5NDY2MUREQTVCRjlECi06MTA0MDUwMDA5MkVBNUY4ODdDMTdGQTQxQkE1MjM4OUVBQjlBNzYxQjc3Ci06MTA0MDYwMDBGMUVGMkZERDJCRThFMkQ0QjNFRkY2NDEzRjUwNzU0Njc4Ci06MTA0MDcwMDA0NzFGRDQyRjQwMDc3RDUyMTFDRUNGMjhBNDlGNkI5QUEzCi06MTA0MDgwMDA3ODFFQkNBNDgzMUFBNDAzRTBCQjM5ODIwRTZBQjZCREI1Ci06MTA0MDkwMDA3MDE3RjI0MzBERTIzRjM3OTQ4RTgwOUVEQkE5RkRGOTQ1Ci06MTA0MEEwMDAwREUzMTg3RkJGMURFOTQ0RUEzM0E4MkYzM0EwM0ZDRUFDCi06MTA0MEIwMDBDOEVCOEIwNUZFQTE3RDBDNkZGNzBFRTBGOTc1RERGOUZECi06MTA0MEMwMDAwODQxN0NEMDEzN0VENzY2RTgwNDNFNEMyNDc3RDc4QTFCCi06MTA0MEQwMDBGRDc2QUVEODZFNDVGQzlEN0E3NkY3MUU4Q0I3NTQzRkMwCi06MTA0MEUwMDAwRkRBREExMTg2MUYwNDNDNkE3MUZGNTY1QTNGRDkxOTVDCi06MTA0MEYwMDBCNUI4NUZBQjdGRkZERDc0MkZGOEIwOTZGMUZEQzlGRDU5Ci06MTA0MTAwMDBENkVBQzVGRUU1NzNGMUZFM0FCMUNGMkEyNkUwQjVBRDk5Ci06MTA0MTEwMDAyRkU3M0JDMTY3QzhDN0Y0REQyMUIxM0Y4RjNERjhCQjM2Ci06MTA0MTIwMDBCQUJCQzVGRTlBNDRDOTZDQ0Q1Njg0MEZFMjE3RTUwRkExCi06MTA0MTMwMDBEMDhGQ0IyOEU1MDk3NDM5QjU2NTAzRTVGNzRCN0NDOTA5Ci06MTA0MTQwMDBGNUJGRUZENzJCMkVGQzkzNTQxMjhGOUQzRDdDRjdCNjE1Ci06MTA0MTUwMDA0NUYwQzlBMUZCOTIzMjc2MDBGQ0JFRDg0QzlGMEQyNERECi06MTA0MTYwMDA3QUQ1MDdDQzI3RTk0NkNFNTdGNEE3NDlEN0UyQkU2MUY2Ci06MTA0MTcwMDBGQzU2MUM1RkNFN0JEMDFCQURDNzcxMEUzMkNFMUY3MkJBCi06MTA0MTgwMDBGRDkyMkY4QkVBQTc1RDNCRDg4QUZENEU1OUIyRDE1RUQ2Ci06MTA0MTkwMDAxMTc4N0MzRkMzNDZFRkJCRDA2RTgwRjc1RDNCMTRGMkQ1Ci06MTA0MUEwMDA1RjFGMTJFN0ZENDNGN0JENjAyRDFGRTBBN0Y3NzdDNTNFCi06MTA0MUIwMDBCQTI1OURFMTBGRkFDOUU0N0FGN0RBQjkzRjU4QkI2RTI4Ci06MTA0MUMwMDAyOTg3RTRCQThCRUVCRkUxNUE2Qzk3RUJDN0Y4NTEyMDEwCi06MTA0MUQwMDA5RDRBMzg0QTdBOTVGN0ZBQjQ3NDRCMzQyN0Y1QUFEQTJGCi06MTA0MUUwMDAzMzdERDdBNjFEQTJGQzlEOTA3NkVENzhDMjNFM0EyQzc5Ci06MTA0MUYwMDBGMkNEQkI5RTU2Rjk3REU3NjVDOUVENDFGNzhFMTgzM0M4Ci06MTA0MjAwMDAwN0VBOUYyNUYzQUVCNjE1NjIzQ0I3NDlBMTdCMUU1MjYzCi06MTA0MjEwMDBBRkMwQ0Y0QTdEODAzRTkyRjZDMUYwREUzQzdGQTUzNjJFCi06MTA0MjIwMDBERTc1MDJGMTU5NzVCQzYzMUM3RTkyNDREQUE1NTc3RDk4Ci06MTA0MjMwMDBEREFBQzZBMEZGNkExQkNGODM5Mzc0NTM3NUIyOURGOEE1Ci06MTA0MjQwMDBBMTVBREM5MzJBNUJGMUVFQzQ2MTQ4Rjc0RjFCMjhDRURDCi06MTA0MjUwMDA1Mzc2REY1ODIzREFGQkIzMzc0RDFGOEFFMEMwN0IxMjU5Ci06MTA0MjYwMDAyOERGNEY2QzFDOTI0N0UwNjFCNkM0RUJGMUJFQzRDNkI4Ci06MTA0MjcwMDA0N0FGQzdCRjVGM0E2Mzg3NEFERkExQzE3MTkwOEZDQjU5Ci06MTA0MjgwMDBFRUM4MjM3RkVCRTFDOENFODkyM0QwQUVGRkI1NkE0M0U5Ci06MTA0MjkwMDBCQjdFRTRBNjIxOEJCMEZGNDg0QkVGNThGQTc4RDBDNjFFCi06MTA0MkEwMDAzOEFBQkJGNDMxQTQyN0E0MUQyQ0YzMDNFQkM1QkQ5MEExCi06MTA0MkIwMDBFQ0RFOUNBRjdBNzU5NzhBQzgwQkFDRUY4M0YxRjlBRTUwCi06MTA0MkMwMDAwRDkxRjREREE4NTJBM0EzQjkxNUU3REI5OTQ0RTc4RTVECi06MTA0MkQwMDA1QTM4MjYyNURCRTk5RTJCRDk2OUIzOEMyQzIyMjU5N0U5Ci06MTA0MkUwMDBEQTIzMzA0NUY5NzU0M0M3MURBODRGNUVCRkMzMzIxOEE2Ci06MTA0MkYwMDBCRjhCQ0JENEYzNDNDQkI5N0RDREUzOTA3MUMxREY2MUVDCi06MTA0MzAwMDA5MkVCQzhFQUNERTk1NzNCOUU3QzdGMkY5RTJCRUM3NDQ1Ci06MTA0MzEwMDA5RjkxREUzRkIxRUNFOUVCNTExRjlFRDg5QzYzQzc3REI2Ci06MTA0MzIwMDAxRkRCMTk0OUY3MEI4RTE5ODJCRkU3NzhBOUY3QzJCNEQyCi06MTA0MzMwMDBGN0E5RTQzREQ3RkNERUMxRjY5Q0E0RkIwQkRFQ0JCOUFDCi06MTA0MzQwMDBFQ0QyRjI5ODRFMkU2Njc0NEZGQzVDMDZFM0ZFRTRFODc1Ci06MTA0MzUwMDBFRkI2NjI3RTYxNDVBM0M5ODZGNzY0OEUyMEZENjM3QzVCCi06MTA0MzYwMDA2QkJCNEFERjAxQTJCQkRGODBBRjIzREJGM0U4M0U3MDBCCi06MTA0MzcwMDBDNUM3QkM1RUQxQUNGOEYwRkU3MkZCQzNGNzUzRkVDMkZBCi06MTA0MzgwMDA0Q0IwMzdGMTZBNzlCNzNEQkRGQUUxRUI5MTBEQ0UzODBCCi06MTA0MzkwMDAzRENCRjEzQjAwNjczNkYzN0M4QjkwRUYzQUJDQkU3NUFBCi06MTA0M0EwMDA0RjhBRTNGRkJGRkQyQ0ZEMTNEMzdCMDdERjQ3OTNGMDVDCi06MTA0M0IwMDA5NkU3QUE1NzgwMkUwQTcyRkRGMEZCNzJGMTJDQjI5RjhECi06MTA0M0MwMDA0RjJFRjY1MDc5NUEzOUI0NkEyNEQyQjMyNTg2RUUxNUE5Ci06MTA0M0QwMDBCQ0I0RTM1MTE1QkY3MzUzQkQ2REYwNzkzQzFGOEYzMEYyCi06MTA0M0UwMDBDN0QwRjc5RkJFNUNCQzkwODI5QTI3MTdENzg5M0Y4QUI3Ci06MTA0M0YwMDBCNjU0RjgxNTdDNTQ1RUI1QUQ4RERFRkI3MjQ3NUUwQjhFCi06MTA0NDAwMDBERUVCN0REOTFDQzNDNTlBQUIyMEU4M0I5OTEyQkYzREJBCi06MTA0NDEwMDBERDU3OTZGQkZBRkNENzFDQ0Y3MkREOUY2RjlFNkVDNUYxCi06MTA0NDIwMDA3REI1RkQyMUFFNjUzOEUyMzczQUM2ODY3NjYwQTVDODBGCi06MTA0NDMwMDAyRjM5QkE4NkRCRDlDNzIzNjJGRUFCMThGMDdDN0NFRDNFCi06MTA0NDQwMDA5NDQ0RkMwRUQxQ0NCNkE5RDc2MzdCQzU0RUM1ODZFNzk0Ci06MTA0NDUwMDAwM0U3Q0U0OTU2M0NDRjdEQTZFRkI0RTIzREFBQ0ZENkM2Ci06MTA0NDYwMDBDOEZCNTczRUZBQkI3QjIzQzZCMzI5RDg3RjQ0QUI5RTFCCi06MTA0NDcwMDAzOTMyMjk4NDRDRjQzMkZDQTQ5RUVFQ0I3RTAxRURFNDZCCi06MTA0NDgwMDAzRjM5MUY0NUZFMTNGODg5QzM3QzkyOTkyRjcyQkY0QkE5Ci06MTA0NDkwMDBGN0Y5NTc5Q0ZGNDY4QTdEQjdGN0I2Q0JGODA2QjUxN0Y0Ci06MTA0NEEwMDAxNUYwRjY2MzZCQjc5NkQwREY0RkRFNjhCMEUxQkFCRkE4Ci06MTA0NEIwMDBEQzY4QTBGMUU3QzBCOTREMDdFQjNEQkU5OTlGODNCMDIyCi06MTA0NEMwMDA4RUU3RTgxMzlCRjk3OTY3NEUzMzNGRUY1NENGMzNCODRCCi06MTA0NEQwMDBGOEZERDI2MEJBMkMwQUU4NDdERjJERUJFMUJCMjM3MzZECi06MTA0NEUwMDA1QzdDN0Y3MzQwN0ZFMjdFMkY0NEJGQjFBQzk5RUU5RjJFCi06MTA0NEYwMDA1RDZBM0VBOTk2N0VGRkFBOTExN0RENzREQjEzQkQwOEE1Ci06MTA0NTAwMDBCODIyRkYyM0RENEFCQTk4QjM4NkM3RjVFRENEODMwQkY5Ci06MTA0NTEwMDA5MUZFMjQ5RDY4QkYwMzU4NkY2NEZDM0JCMkJBMjhGQTMxCi06MTA0NTIwMDBFRUY3MjRCM0MzODBGQTYyNEE3Q0U3MTgwNDRGNUYwN0IyCi06MTA0NTMwMDA5N0FGNkE5MUNFODVGN0U0NThCRDI5RUM3N0M0REUxNUI0Ci06MTA0NTQwMDBGMjc4MUFCQzRCRjdCQjdBREJGOEY3Q0ZDNDdEMzE1OTUwCi06MTA0NTUwMDA4MkJFNEE0NzdEM0UyOURBRkU4RDAzQkE3NEFFRkZGMjcxCi06MTA0NTYwMDAzQTNERDBGNUE0OTFGNjNCQjI5RDgwRDdGNTVGRjM3QTQyCi06MTA0NTcwMDA5RTdEN0IxNkQ0M0ZFRjdERjYzQTNERUM2RkQyOTVGNkVCCi06MTA0NTgwMDAyMTA2QTgyRjU5RjJDRDc1NjNFMEI5QzlFMTNBRDgzQkFECi06MTA0NTkwMDA2MDlFMTM5QjkyRDI3MTdGRDA3RTA4REJBNzI3N0E4RTE0Ci06MTA0NUEwMDA2MDU5MkJFRThGOUQ1NkJBMDYyRENDRjRGNzdGN0JBNzcyCi06MTA0NUIwMDBFNUUwNEIwRTdGQkREM0MwRThCQjNCQTc3QkNCRjU4N0M3Ci06MTA0NUMwMDAyRjlEMEVEN0E5REUwOUExRURFNThDREQ0N0Y5N0M1RUI0Ci06MTA0NUQwMDA3RTZGMDc3RURDMTE4OTc4QUY4QUQzNURCOUJDQzdEMzAzCi06MTA0NUUwMDBBMEI5QzdFM0U0RjdENUU0RkQyQTc5N0ZFQTcyRkZGREJECi06MTA0NUYwMDBCM0I1OTc3MkZGRUNGRjAwNjlGM0IyNEYwMDgwMDAwMDgzCi06MTA0NjAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMEZGRTU3RDk3Ci06MTA0NjEwMDAwQjc0NTQ1NTk2RThCOTU1QjczRTQ5MkE0OTI1ODQ1NDM4Ci06MTA0NjIwMDAyNUE5ODRBQTdDMkI5MEMwMjU3QzBDMzE0OEU1MDMwNDg1Ci06MTA0NjMwMDA4ODU4Mjg2QUQ0QTAwNUEyODA4MjE0MDExRDc0RjQ1NUZDCi06MTA0NjQwMDA2MTMwN0M5QUU5OEU5RjE3MjI0NjJEMTA5NTcxNzhERDk2Ci06MTA0NjUwMDBEMUIxNkQ4NjhGNTMyMDMyRkM5QTBFQjQ2M0VCOENEM0FDCi06MTA0NjYwMDAxREQwRDE2ODYzMUIzMTM4RjQwQzM2NkZFRjdEQ0U0RDExCi06MTA0NjcwMDBFQTU2MkE4MEJFRTc3QjZGQUQ5NzVFRjY2MTlGNzNFRUM4Ci06MTA0NjgwMDBGOUVDQjNGRjY3REY1QjVGMTkyQ0VCQTU2NEM2MjQwRjYxCi06MTA0NjkwMDA2M0FCNTNBMTc0NUE1OTYzMTk5NDdCRkZFOUNGRDI2ODc1Ci06MTA0NkEwMDBDNjlBODNBQzNCMkU4RkMxNUZBM0Y1RDM1MTUwQ0Y3QzBDCi06MTA0NkIwMDBCQTRCNTAyRTRCNDgxQUNEQzY2MDk5MTM2MkQwNkY5OUYxCi06MTA0NkMwMDA4OUIxQUUxMkU4MjYzQjZEQ0NDMkQ4MTIwOUZFOUQwMTFECi06MTA0NkQwMDBGRkY5Q0ExOTRCNjc2Qzk1MTVGRUVENDRCODQyODdGMDk3Ci06MTA0NkUwMDA4MzY2NDY3RjlGMDU5ODNGREZDMEQ4MUY0Rjc0MjUzOUVBCi06MTA0NkYwMDBGNThDOUQ5RDFEMkUwQ0JCMThGQjY1QkNDRkU2OUMwMDY4Ci06MTA0NzAwMDBFRDFEQ0Q4RUE2MzRDNkJFN0NDM0E0RDQ0M0ZGOUVEMDdGCi06MTA0NzEwMDBERjI3Rjk2MEZDQTU3QUU2RUY4NDkyNkQxRkNFRDgyNERFCi06MTA0NzIwMDAyODJGRUFDMzUzQTBERjYxNTdGMUI2OERGMEJDQ0JBOUE3Ci06MTA0NzMwMDA2MzBDOUUzRkVCMEFFN0ZDRjU3OEM2ODIyRTkzRjIzMkJCCi06MTA0NzQwMDBBMzdFNzczMjgwRUIxRTlGM0UxQ0ZCOUQ3RDdENURGRTMwCi06MTA0NzUwMDAzREIwNkU5M0NDNTgxMkVDN0IwNjhDNTkwRTc4MzAwMDJECi06MTA0NzYwMDBBQzJGQzMwNzQyMzQwRUI0MDc5M0EwQkVDNUY1NzQwRTM4Ci06MTA0NzcwMDAyMzdDMzAyRjlCQzhEODBEOENFRkVCMDYzOUJDMUZGMTgyCi06MTA0NzgwMDBDNTk0NjQxOUY3Mzc5QjZGMEZEQjgzMzI4Q0EzMzMzM0U3Ci06MTA0NzkwMDAwM0FFQkI5ODc1NTgzRjREMDA5OEIxOEU0QkMzNjA3RkY4Ci06MTA0N0EwMDA2NkMwNjMzMjk2ODBDNzI0QzZBNkVBQTExM0FDQUZFOUZGCi06MTA0N0IwMDA5N0ZBOTAwOUQ2RDc4NDc4MTQ3MEQwODUyMzdBMkNEN0FECi06MTA0N0MwMDBDM0Y4OEJDNUJDQ0I4RUJDNkJDNEMxNTgxMEZFMDdFQkM1Ci06MTA0N0QwMDA1OTIyRTY1RERDNzE3NzNEOUVDQjkyOTBFMTRDQjdDMEVCCi06MTA0N0UwMDBGNTI1RkE3RjBGOURDNzcyRDFFRkZFRjJBRDQ2OUNFMjMwCi06MTA0N0YwMDBGRTFEREE3RUNCRDlBNkFGRjVGMEZDNTJENjZEQzRGRDE2Ci06MTA0ODAwMDAyRUVCOEM2QUVGQThGOTBDRDdCQjdDOTdCNkJFREU5OTZECi06MTA0ODEwMDA5ODg2NzRDMkM2QjJCMTk3RjQ1NDRERTdCRDQ4RjQ5OTc2Ci06MTA0ODIwMDBBQTZGNzRDQUI4OUZFMTY2QzUwNDEzMzczRDlGNDdGNDY5Ci06MTA0ODMwMDBDMkRFMENCMEM4N0VBQzYzMThEMTRGOEI0QjRGRTdCMUQyCi06MTA0ODQwMDA2NDk3QzQ5Q0UzMThCQjdFNTcxNjczNDI1M0ZEQUU2MTU4Ci06MTA0ODUwMDA1NDI2NURDOEEwRkFDRjVGMzkzNkRFNTczMjcwNUVENzc2Ci06MTA0ODYwMDBCRjZBQUJDNkY1NURGRjZBMTE5NUVBM0E5QTA0MUQ0RTIwCi06MTA0ODcwMDBENTk3NzQ4NjYxMURFNzJDQjAwRTgwOUI4RUMwNjI4MTM3Ci06MTA0ODgwMDA3RTlBNkVENjg3MThFMTk5OTlCMUJGNTcyQ0M3NkI1OTlDCi06MTA0ODkwMDBERkE1NEY0MjU4MEU4QUZENEE5NzI0M0E4NDY0M0MxRjk0Ci06MTA0OEEwMDBFRjYxM0Q0MzdBNjIxRTAzQjUzQjk5NzlDREE1NUNBMENCCi06MTA0OEIwMDAxQkJCOEUzOTYzRTBERjI0Q0UyRkNFMTlDRjlDRUU4MTU3Ci06MTA0OEMwMDA3NjM5NThGQ0IzNEE1ODg3NjFBRTQxMDk0MTdCNzM1QzI1Ci06MTA0OEQwMDBEMjM2RTQzMzE2RjQ3NEU1QzM3MzBERTJCOUFFMzg0RTQ0Ci06MTA0OEUwMDAzNzA5RUU1NENERjMyQTFEREMyQUZBQUQ0QjlBNzYxODFGCi06MTA0OEYwMDBFOUIyQzFCMzg4RTgyMTUxQzlENEFDQzdBNDVGNkE0MDBBCi06MTA0OTAwMDBGQUI5RDU2N0Y4QTQzQjYyMUNBMjVGNThDNzBENUUyOUFGCi06MTA0OTEwMDA4NEZDNzg3MzgzQjZERDUwRjk3NUFENDQyNUQ0NDc4RTk5Ci06MTA0OTIwMDBFN0Q1RjZGQjI5RDIwM0QwM0IxMDdFNzEyNDNEMEM5Q0M5Ci06MTA0OTMwMDA4M0M1QTNDMzczRjAyNDEyQkRDQkNDQjlCOTEyRTA1QjFECi06MTA0OTQwMDAwRTFCMThFRURGMTRDRkY3NzkwRTMxOTc4NkZEODAwRjFFCi06MTA0OTUwMDA2MEUyNzU4ODE3QTg0RjJFRDdFMjM3QzVBM0M1RTdCMDI4Ci06MTA0OTYwMDAzQTJEN0U4NjdCQjVGQkI3MzVFNDZBREEzMzdDMjMzNTk2Ci06MTA0OTcwMDBFRDU5OEJDQjM0NzBCNkJGNDJEMzdGQzRFQTZBMERFQ0RECi06MTA0OTgwMDAwQUNFRDRGNENGNUI3RkEzMDYyRTY4QkQ1REQzQkZBODRCCi06MTA0OTkwMDA3RDgxQTZCRDM4NzQ5RkE2N0RENDhFMjYwRDVDREFGOTg0Ci06MTA0OUEwMDA4OEE2RkY5ODVEOEY2QkRBQzc4NjM3NkFEQUM3MUQ3RUU3Ci06MTA0OUIwMDA0QTAzNEZFOERBQTJFOTdGQ0QwN0RCMzRFRDkzQkE1RjEzCi06MTA0OUMwMDBEM0I0NUZEQkYzODYwNjlFRENCQjVCRDM3RkNBODUwMzczCi06MTA0OUQwMDAxQUI4OEExREQzRjRBRjMxRkY1NjAzNEZCNUZFQUJBNjBDCi06MTA0OUUwMDBGRjc0RkJDNzlBRjYxOUNFM0Y2QURBNjdCOUJGRDFEMjE2Ci06MTA0OUYwMDA2QjNDOTc5M0Q3MkJGRkE1NzlFRTU5OTNFRkRGNTA1RjcwCi06MTA0QTAwMDAzNDRCOTVERDQxODZGNEVCMjQzRUJBMzU0REE3ODQwMTQ1Ci06MTA0QTEwMDBGRTgzMkE5NzA0MUQ5RTFDNjEyNTM5QzFGMjU5OEVCNzY5Ci06MTA0QTIwMDAxNEU5QjAzMjhDN0M3QzZFOTc0NEYyRTBBQjI4QkQyODUwCi06MTA0QTMwMDBGRkQxRUI5MUEwOURGRDRBNTI1RTc2MjJERDQxNURDNDFGCi06MTA0QTQwMDBGQzI5MUUzMzkzMjNENjM5QUNDRUFBODE4NzdCRUQ5QUZECi06MTA0QTUwMDBGRUI2MDZBN0E2M0RDM0U3RDZCNDY3MkQ1NjM0NzBCNjlBCi06MTA0QTYwMDBCRjVDRDM3RkM0NkE4RjA2NzYwNUVCMzRGREYzRDY3QjNCCi06MTA0QTcwMDAzNTcwNDE2QjgzQTY3RjUxQkI0RkQzNUUxQzVBQUM2OTI2Ci06MTA0QTgwMDAxRkI1QzNBRjgxNEIzQjU3NkJGQThGRDkxNUQ0QjQ4Rjg5Ci06MTA0QTkwMDAwREFGRDdCNDhGM0JEQ0FBODEyNzc0QjU2QkZBNUZGM0Y3Ci06MTA0QUEwMDA0MTQ4RDMzRUE5N0I4N0E2RkREQTlFNEUwRDNDQjk3N0RGCi06MTA0QUIwMDA5N0E2RkY5NDBCNjEwRDVDQzU4RTY4RkFENzk4NEY2QTc0Ci06MTA0QUMwMDBFMEE5RDYwRjM1RkRBN0RCNEY2QkRBNjczODNGRDdCNEM3Ci06MTA0QUQwMDBBQjc2RDAyQ0Y3RDdEQTdBNjExNzVEQUZGQzU5RjM3QzRGCi06MTA0QUUwMDBCMERBQzM5MDNFODI2RjQ4NEFCMzEzRDZFQjAyRTEzRjdGCi06MTA0QUYwMDA5Q0U0N0M3NzlDMUVFRDI4MkYxODE0OEMwMTI5QUQ0MTc1Ci06MTA0QjAwMDBGRDkyMEM0MjBDRTkwQTQ4OEMzNUE2RTIyODQwQUMyMDA0Ci06MTA0QjEwMDBCNzQ5NTVDMUYzQzk2ODRGMDA5MEFBNzNCOUZDQTAxRkVCCi06MTA0QjIwMDAxM0Q4NUFFQkE3NjZCMjFCMUM5NzQwREY1REMyQkYyOUEyCi06MTA0QjMwMDA4MzRCOTRBMDlGQUFFQjg1Rjk2NkExNEUwMjNBNkY3MjRGCi06MTA0QjQwMDBGOTNDMkU1OENGN0Q5REFGNEZDQjYyNjgyNzA0NUI3MDM4Ci06MTA0QjUwMDAxREEwMDc5M0JCNDE2RjlFODg2Mzc3Nzk0QjA2OEYzNzAzCi06MTA0QjYwMDBDMzBDNzg4OTk4RUY0ODVDQUJBM0NDMzJGNEZDMzNDQzBGCi06MTA0QjcwMDA2N0E5N0ZGRkI4MDYzRUFFMDRGQjZCOEExOEZGQTdBMEFCCi06MTA0QjgwMDBFRTY1QjBGQjVBMDNDMDM3MDU4QzNEMTVCMDEyRkM0Q0U2Ci06MTA0QjkwMDBDMDRFNzA1QkMwNDk2NTdCQzA0REU1OTY4MDQyRUQxREZGCi06MTA0QkEwMDA4MTcyODI1RjA4NzgwODBFMDVFQUE4REMxNkYwNTJGREQzCi06MTA0QkIwMDBGNjQwMDNDMUFGMDQ3QzU0RUUwODJDQTZGMkI1ODA5RkVBCi06MTA0QkMwMDBEQTc3MDY1NjEzRkNGMzQwOTBDQUNFQzA3QUFBN0YyMzQ4Ci06MTA0QkQwMDBEMDRBRjA5QjgxNzY4MkRGMEE4NEE4REMxNUQ4NDFFNUIzCi06MTA0QkUwMDBFRTQwMjdCNUVGMERFQzIyRjhFRDQwOThFMDcwRTAzMDk0Ci06MTA0QkYwMDBDMTA3MDI1RDA0MUYwQzdDNDBGMEExNDAzNzk1ODcwMzdDCi06MTA0QzAwMDAzRDU0MUUwREY0NTJGQkYxQzAwNTgyMDdDRTRCNkI1NzhECi06MTA0QzEwMDAzMzYxNTcyRTEyNzRDMEQyQjgzRDc5MkYzRjUyRjY4NUJBCi06MTA0QzIwMDA4RTJENDZCQjc3OTFBMDQzNDMzNTk4ODc0MDc3ODZDQzNECi06MTA0QzMwMDBDMjZEQ0QyRTNDNkFBMDEzMzdEMUM5NzFCNDJGQUY5Njg3Ci06MTA0QzQwMDA0RUQwNzA0MDdBMEQ1NjMzMzdEMjlCNUFCNjU0RTlDOUNDCi06MTA0QzUwMDBGRTBDQUU5MDQyMkY3M0JCODhFQjZGMzM1M0Y1MzdCNTI0Ci06MTA0QzYwMDAzNzNFMjg4NUQwOUU5QjA3NzZCMjExRjhFNjIzNjE5RkQ4Ci06MTA0QzcwMDA3QzE0QzdFNUY1MzlCRkMxOEQ3NjVGQTMxNEFGQzA2NjVDCi06MTA0QzgwMDAwMUZFNzdCMjNCRTAyRjhDQTQ3RkQ3NUVEMzU2QjQ5RjUyCi06MTA0QzkwMDBENEY1MzVDMjM4M0ExOEU3QkZFQzJFNUE1NzIzM0I2QzhGCi06MTA0Q0EwMDBDMEY1NDBCRDQ3MEZGQzcyQzZFNkRCRTIwMkJBQkUyRjdDCi06MTA0Q0IwMDA1QjE3MzQyMjEzNTk0Mjg1REU0NEM2OEM3NkRGRjM0OEY1Ci06MTA0Q0MwMDBFN0U3RkNGNzFDQzJDMTE3NTk5NTQyOUNFNzdBNTM3ODc1Ci06MTA0Q0QwMDBGOEFEMzA3RkVGMTFCREIyQ0QzOTM0NUU5NkI3Q0UwMDVFCi06MTA0Q0UwMDBFMTdEOTlGNkI3M0Y3N0EwMUQ1RkY3MTdCRDBGQ0ZFMUM0Ci06MTA0Q0YwMDA4NDIxQjEyMTA0NzREREU5OTI4OENGM0E1RDNBNEREOTFGCi06MTA0RDAwMDA2NkY3RkQwMkQ3Rjk2REEyRkY0RTFEQTBGMkRCRUI1NjUwCi06MTA0RDEwMDBCQ0IyMTJCNkQ0QjhBMjIwMTlFRDU1RjAwRjBDNjg1RkUyCi06MTA0RDIwMDBDRjYxNEUwM0NBODc5Qjk4RTc1RDFDRUE2NkU2MjNGOENECi06MTA0RDMwMDA1NjE2QTQ1MkI2Rjk3NkUxQkU2RTYzMjE4MjdEMTVBNkExCi06MTA0RDQwMDA5QzU4RkI4QTVFRDczQjM4RDg3MDJDNzU5QUYyOTBERDYwCi06MTA0RDUwMDA3NzAwQzdGQjM2RDE0M0VCM0EzMTY5N0EyMUVFNEI1REUwCi06MTA0RDYwMDA5NzM5QzM0OUZENjZCM0RFMTc3MDdEREZFRUZCRkE1MzVBCi06MTA0RDcwMDAyOTZGMzA5REZDODhGNDYxODE2OUIwM0YzM0MyNzkzNzc3Ci06MTA0RDgwMDAwM0VGRTAzOENEMEY0QjIxQTQ3Mzk1M0UxQUMxNENBNzE5Ci06MTA0RDkwMDBGMTFGODU3QTI5OTI1RTgwNEVEMDdGNEJFQkNEOTk5MzlGCi06MTA0REEwMDA0OEY0RDI0REYyNkY5MjNFNjgwNDdCRkE4NDJFNTQyODY4Ci06MTA0REIwMDBFOTg5NEU4QzEyQUM3MzUxMUFEMDQ5RUVEMEY0RjBDMDkwCi06MTA0REMwMDA3QTI4MjNFNDIwRDBEOTE3MzhERTlGRkVFMTFBMzdFMjkzCi06MTA0REQwMDA2REY5REI5MzlDODhCNzY2MUQ5QzA3RDA3M0YwQTg5RTg1Ci06MTA0REUwMDBFQzA0MjY0NEJCRkVEQUQyMTBGOTA3QjJBMkNDMjlDNUU2Ci06MTA0REYwMDA3M0UzNzI3MUJGOUVBRDdFM0Q4NkRDNERDOEU1RjQ3NEYxCi06MTA0RTAwMDBDMjZFQTgwQkQxQjg5Q0VGRDU3NjdEMkUzRjQ3N0QyRTg0Ci06MTA0RTEwMDAzRkRGQTYxNTlGMkRENUMzRkE0RjFDRjhEQ0U4MkM4RDdCCi06MTA0RTIwMDBCMThGRDUzRjc5MjgzRjgyQUU5N0VGM0EzRENEODM3RTUzCi06MTA0RTMwMDAxN0VCMkVCOTMxNzFBMEJFNTBDQ0FCRDI5MURFOThFODAxCi06MTA0RTQwMDBEQjZBODk1QzU3M0Y1REM3RTcyMjVEQTcwMDVERTcxMTFDCi06MTA0RTUwMDA1RDdGOEE3NkY5NkM5MzMzRjk1NjI4QkIwMTM1NjEyODVBCi06MTA0RTYwMDA3RDJGNUFDOTdGNUNDMDE0MkExNzMyMkY5NThCODAwQzc2Ci06MTA0RTcwMDA5MDhFQkRDMTI3OEQ4OEY3RkI1ODI3RDUzRjUwN0U3NzkwCi06MTA0RTgwMDAzQUQyRjVCRDNBMUZGOUQ5NEI1OTE3RDUyRjY3QkRCNUExCi06MTA0RTkwMDA3OEI0MzdBRjVGRjNBRTFENTY3RDUzRUI5MzUzOTE0NDE3Ci06MTA0RUEwMDA2RjBDQ0Q3RjE3Q0IzOURCQTU0RjgzNEVFMjkzRUM1Q0MzCi06MTA0RUIwMDBDMDQ3QjdFNDdGMjIxM0U2QkY3RDY3RDUxMzU5NTAzRjQzCi06MTA0RUMwMDA1QkNGQ0Y4NTFERTNFN0EyQ0E5MUU4N0QwMzVGMTRFMEM1Ci06MTA0RUQwMDBGM0RGQTY3ODY4NUZGQUE0M0EwRDVGMzQzRUNFM0MxMjQ5Ci06MTA0RUUwMDA4Q0QzQkJDRjE0REFFNjhBRTA5M0YyRkJGRjkwODVGMjE1Ci06MTA0RUYwMDA0Q0VFQkQxM0NGN0JGOURCQTY1NDNDRUZGQjE4RDdGQjgwCi06MTA0RjAwMDA5MjQ3OERBRkE4RkE5RTExQkRERkNGRTIxNUVDRjc4NTcxCi06MTA0RjEwMDBBMEVGMkZCMjE5RDFGNzE3MTIzODhBNjUwMzc2MjhDQjg0Ci06MTA0RjIwMDBGMUQ5Q0JGMjA2RjRGNjcyRERDRUQxODgyN0QwRUI5NTFECi06MTA0RjMwMDA3ODBFRjc3RERDRDkzMkQ2ODVGQTIwOTQ4Mzc2ODhFMTI1Ci06MTA0RjQwMDAzNTkzRDJFQ0QyRTgxNzc2MjkwMTg1OEQ5RjIxM0U3RkRCCi06MTA0RjUwMDA4QUUzOEUxOUJDMkVBOUZDRDA5RkQxRUUzMDE5NTlEMDBFCi06MTA0RjYwMDA1QzQ2N0NDRTI2MjI3RjY3MUE4OUJGOUExMUI1NzkzOEI0Ci06MTA0RjcwMDA4RkQ3RTlCNzBDMUVGRjg0NThFRkUxRUZCODNGMUQ4NENGCi06MTA0RjgwMDBGREJDMkNDNTlBODdFQjJGNTNGQ0MwM0MyNDQ3RDIxOTlCCi06MTA0RjkwMDBDRDczNDcyRUU3NjM3NTNFNjZFOTc2QTA5RDdFMzRDMUVBCi06MTA0RkEwMDA3NzNCOUU4RjFBNDc1MkZEQzhDM0FFQ0ZGMkYxN0M2NkE1Ci06MTA0RkIwMDA1NzZDNTBFNTMzOERDN0FFRTM3MkU5ODRDMTE5NDRGOEVDCi06MTA0RkMwMDA0NDk1NEIwMTA5RDYyRjZGNkYyOEZGQTcwRjcwMUQzNzJGCi06MTA0RkQwMDA5ODJENjE4Qzc3QjA0QUMzRDk3RUZGMzU3NzQwMUZERkFCCi06MTA0RkUwMDBBMEVBRTNDQUE4Rjg4RTFBRjc2MThBMDFENzU3Q0MzRTI3Ci06MTA0RkYwMDA1MkYxNDFGMTFENTU0RTBFRDJCRkIwQjEyRUM0OUY4ODYzCi06MTA1MDAwMDA5N0Y1Qzc3OUZFQjkzRkNFQTNDMzc5OEQ0MjhFMzJFNkJDCi06MTA1MDEwMDA3NzdCMjNGOEQ0RDYwMEFFOEJDNjdGMzBCMzdDOERGRjcwCi06MTA1MDIwMDA2MEQ1QzBEOTdFQkJBNkZGODhENTRFNERCQjJCRThENjM4Ci06MTA1MDMwMDBCNEU3QUQ1NzM0NzA0MTZCQjlBNjdGNTFCQjQ3MDMxNzM2Ci06MTA1MDQwMDA4N0VBMzRGRDQ3RURGMDZBRTBEMkNFMDY0REZGMzFCQjcyCi06MTA1MDUwMDA3QzlBRjZCMUUxQzU5QUY2NzE4N0ZEMUE3ODQyRDc2QTUzCi06MTA1MDYwMDA0REZGNkIzRTA4NkFEQTI3NzVBRkQ3QjQ1RkRCRDNBQTcyCi06MTA1MDcwMDA4MTI3RjdCNjZCRkE0RkI5MTBEMkI0NTdCMUJGRDVCNDg4Ci06MTA1MDgwMDBENzk4NUZEN0MwMkZDNkYxNzhFNzU0RUIzRjY4OUU5QjU3Ci06MTA1MDkwMDA2RURGQUY4MTVGODhFN0YxOUExOUNFMjNEQUU3QzVGOUIxCi06MTA1MEEwMDAwNjZGOEIyNzdFOThFNTNFQTk2OURGRkZDOEM4Q0Q4REM2Ci06MTA1MEIwMDBDMDJGQTE0Nzc0RTQ3RkI2RDU3MTNEQzUxQUFBMzkxRDJBCi06MTA1MEMwMDBDNEYxQkVENzJCMUY2QUU2Q0JEMUY3QkE5MDhFOUQ3QTdBCi06MTA1MEQwMDA2QjI2RjI3NTdFRjk5QzAzNDA3NkFDRDBCM0EyMUFDNTVDCi06MTA1MEUwMDA5REJCRUVDOTAzNTg4RUY0QkU1RThENkM1M0QyNzBGMjM4Ci06MTA1MEYwMDAwMDk2QTM3RDVGNTcwMzE5MzM2NTcxQ0EzQjU4OTZGOTMzCi06MTA1MTAwMDBDN0Q2RDg3MDg5QUJFN0JDODNFNUM0RTA4QTFBOTRCM0VDCi06MTA1MTEwMDA2MDI2N0VCMTA4RDY3RDNFMzg5MjZEODQ3NTI1NjVBQURECi06MTA1MTIwMDA3MTVFMEZEMUVEQUEwQzFERjFGOUFBREIyQzE0Mzc0QkRGCi06MTA1MTMwMDBCRkQ2MjJBMzNFREYxQ0U4MUE3OTEwRUNEQ0Y0QTdEMzFCCi06MTA1MTQwMDBENzYyREM2OTNERDhGOUExMjJCMDE3QzBFRUM3RjI1OTg5Ci06MTA1MTUwMDBCMEVCNDNFMDFDNkQwNEJCMUZDQjRENjBGNzYzRkQ3M0U4Ci06MTA1MTYwMDA2MEY3MjM5Q0ZFNzREOTdBN0M2RUQ1Qzk3QkVBNzI2MUE0Ci06MTA1MTcwMDBGQzExMEZDQTU2MzQ1M0Q3Mzk3NTJCMEVDMDdBRUMwRjc5Ci06MTA1MTgwMDAxQUFEMjg0QjhDQUU2N0UyOUNCMDhFRUM2NUIwOEUwQUVGCi06MTA1MTkwMDA0MjhCMDc1MUZERUM1MjMwMUMzMjM5MUMwN0ZERUMyQkMxCi06MTA1MUEwMDA3NDFBQjgxREZGNDVCMDJFNTg4QkNGOTczRUU5REVBRTdFCi06MTA1MUIwMDAzMEY2RjlCNkIzMzcxOThBNjE5Rjc5NURCNzZENEQwMTQ1Ci06MTA1MUMwMDAzODk3NzlFNjAyQkVEM0YxMkM2MEZDOTM3OThGQ0QwOTM0Ci06MTA1MUQwMDA5NjBDODY5NzE0N0FGRjQ4NzI0OUVFMkM0NjNFQjUxNjE3Ci06MTA1MUUwMDA3RDk0ODFFQkRBNTBGRDg1QTJCM0UyM0M4RkNDMzkwODg3Ci06MTA1MUYwMDBFQjdFN0U3OEJDNThFNzIzNzNBQUYyQUY2NjVDQ0Y3OTZBCi06MTA1MjAwMDA5NEVGNTBFRkVGOEMyMTQ3RkU1M0U4RkY5Mzc5NUMyRjJBCi06MTA1MjEwMDBDMzlGMTVFNTkzOEQ5MzA4QjM4MTlEOTQwQ0YyNzZGM0FCCi06MTA1MjIwMDBBNEQ1QTdEMUE3OTBBRDQxMDlFNTIzQkIwOENGNEYxNDYyCi06MTA1MjMwMDAyOEM4MjM3ODRBRkM0NDFFQjI0Nzc5NTM1NEU0MzNFNzI0Ci06MTA1MjQwMDBDMTc4MzYxRkQ4NEU5MUYxQjFDNTVBNzgzMzlDRTcxOTExCi06MTA1MjUwMDBDM0MwN0EwQzc3RTk4MjMyRUNDMUYwOTI1NzUxNjA5RTVDCi06MTA1MjYwMDA4RTc5QjA1RjgwMzcxQkI1RkU2NTkxOEU5MTdENzE5RjAxCi06MTA1MjcwMDBCQUVFOEIzNzI5NjhBN0REOTdDN0Y1RjA5NjgwQkJFQ0FGCi06MTA1MjgwMDAxMzAzRkE3RjRBRDkyNzQwNDc5OThCRkQ5MjBGRTRBQjZECi06MTA1MjkwMDBBREQxQUIwNEExOUZFMUQyREZFRjM3MjI2MURGQzUzQTg4Ci06MTA1MkEwMDA1MTlGNjNGRDlBMDhCQjI3NDc4QzZCQjhBNDI3QkMxOTk0Ci06MTA1MkIwMDA5QUJENEE2QUM0RkMwNkJERTRFRjhDNjE3Nzk1RTZDOUU1Ci06MTA1MkMwMDBGQ0I5NjY0NkVEODY3NzFFOTY5QzMwNUY2NjYzNDhCQUU5Ci06MTA1MkQwMDA4N0M2RjE0QjBBRDREQkMyQkMzRUFCQjE1MzVBMDhGMENGCi06MTA1MkUwMDAxRDc5NEUzQTA3NzU5Q0FDQzVCMEZFMDgzQ0Q5RTVBMEM3Ci06MTA1MkYwMDA2NDg1RTdFRDhGMDYyNUM0ODNEREVBNTU1ODIyRTJEQTlFCi06MTA1MzAwMDA0QkZDQkQ1MkYwQjQ3REY1QzRCMjRGODZFMUJBQkQ4QTA0Ci06MTA1MzEwMDAxN0U3OUJBNUYyOUJERkNBNzAzRDFGMkJCRkE5NDJCREJCCi06MTA1MzIwMDBGNjFCM0RDM0ZCOEM2RjlDNEE3MjVBOEM3REE4QTVBOUM1Ci06MTA1MzMwMDA1QkNGM0M5N0YxNjc5MjcyMUVGMTkzOUVCQ0RERTIyQzJECi06MTA1MzQwMDAwMEZFN0RGMTM2NEJDM0Q2MTg3NDc2NDcxRUE3QjM3NUExCi06MTA1MzUwMDA5OUFBREVFMkVCNDlENzczM0NBOUZBRUExQjJCQTcxRkY3Ci06MTA1MzYwMDA1NTZFQUQ0Q0UxQjAzQUNFQ0FFQ0YxMjQzNzg2NUE4Rjc3Ci06MTA1MzcwMDBBRDNEOEVGOTIyRDZCQjE5RTZCMUUyRkRDQzc3MkJBQzYwCi06MTA1MzgwMDA4ODM3RjAyMUJDMzQ5RkNDRTVFOUQ2RTdEREU0Mzc0NjI5Ci06MTA1MzkwMDBEM0NGMjAzRTAwRDE5QjVDODY3NEQ5MUQ2QTA2QkEzMUZBCi06MTA1M0EwMDBDRDMzMkE2ODJGREFGRTVCOEI4NDcyMjQ5M0I1NEEyOEFBCi06MTA1M0IwMDA0NzZERDlCNTg3NjVENEU3QjJBRkQ4MUJDMzhFQkUxMjhGCi06MTA1M0MwMDAzRkE4RTdBOURBMjU4M0NGQ0ZGOUJCMkFCMjQzMEQwQzVBCi06MTA1M0QwMDBFOUI2QzlFNUI0RTFGOUE5NzREQTc0NjQ3OEFBMkZFMkYwCi06MTA1M0UwMDAzQ0Q3MEIzQTJFNjdBRDdBRTREMzBBRDY0OTY1MjVFQjU0Ci06MTA1M0YwMDBBMkYyM0FENjRCQTU4NzU5NjUyQ0FCOTk0MjY1MkRGMzlECi06MTA1NDAwMDA1MjM5OERGOUE5QUM2M0FENTRDRTY0OUQ1NEQ2QjMyRUY4Ci06MTA1NDEwMDAyQUMxQkZBM0QyQ0JBQ0U0ODdERTA4NzYwQzk2NzM5OTgxCi06MTA1NDIwMDA5N0NBNUI5ODlGQ0EyRDQ4REYxM0YwRkVBMTk1RTBEQjc5Ci06MTA1NDMwMDA1OTI3OTVCQjgwRkY5RDQ1MTgxRjMxNTNCOTE3RTQzOTkzCi06MTA1NDQwMDA5NjZGODMzQ0M3MzIwQ0YyREM2OUMyRjg4ODlCQ0E4MzMyCi06MTA1NDUwMDAwMTg1Q0E0MzgxNzIyQTBGMDczQ0Q0RUY2OEEwOEVDQTI3Ci06MTA1NDYwMDBFMzAxMkY5NTI3MDIwRDU0NzYwNTdDRDRFRjU0NjAzMTZCCi06MTA1NDcwMDA5NUVGMDVGQzU0QkUxRjU4NERFNTA3ODEyMDk1RkYxMjlFCi06MTA1NDgwMDA1ODRGNjU5MTExRTQwQUUyREJERDNEMTZGRDlBOUM4RkQxCi06MTA1NDkwMDA4RDFFMjdFOEEzNEZGMzg0RkZFQkQxRkRGN0UyRjE3OEVGCi06MTA1NEEwMDA4RTNBQkE4M0IxRDVBRTk0OTAxRTZENkU5RDI3MDRFNUY5Ci06MTA1NEIwMDA0Njc3OTM3NDM3OTRFQjRFNzAzQkQ2NjQ0QjI0M0JEOUJDCi06MTA1NEMwMDBENkJFNEE3MkMyQjhCQkE0NkU3RDAyOUNFRERFQkMwRjk0Ci06MTA1NEQwMDBFNzk4NDE0RjU0RUQ2NTZCMTMxNDg0N0ZGRkE0MTlFOERFCi06MTA1NEUwMDA3MEFCQzFERkJCMTVEQTdGRjVEMkJGQ0UzMTgzQ0VBRTU0Ci06MTA1NEYwMDA0ODNDRjVDN0Q3Mzg0Q0VEOTMwRUIyNjYyQkMwMDdGMjg3Ci06MTA1NTAwMDA0RTNGOTkyNkYxNzVBMDEwM0VGRUQyQzc3M0Q2RTRFMzU0Ci06MTA1NTEwMDAzQUI5MUM3OUQ1MDU4RTM2RkExOTBGNUJDOENGMThEQjVFCi06MTA1NTIwMDA3RTY2QUMwRUUwNDlBQjJENjVFODFGNDdGNEEzQjhGNUU1Ci06MTA1NTMwMDA1MEZEQTJEQkQ1RTczQTU2QTQzNzIzMUVENjdEMEFFRUVFCi06MTA1NTQwMDA4OTEzRTU2NUY3NTg4Q0NGNDU4RUFCQkJCQUY5OTlGRTQ4Ci06MTA1NTUwMDAzMkYzNDdGNjkzMkUzMzVFNTE5MUU3NTRERUZGMDM3NDI2Ci06MTA1NTYwMDAxRTREREY4NjRCMUZCRkFFQTNGODk4MzUxNUY1RkFGNjMyCi06MTA1NTcwMDAxNDJFNzc3QUIzRTM0M0RCNjBERERCNTMwNUJDMjE5RjU4Ci06MTA1NTgwMDBGNkI1MEU2MUQ4RDdCQThEQjk2NEM3NkY4RkYzMzYxREUzCi06MTA1NTkwMDBDMUY2QkZEMTI5REJBMDY5N0JCQzZGNjMzMUMxRjkxNEFGCi06MTA1NUEwMDBBRjU5OTdFQTc3QTM1RUNBNDlFMEZBQjFDREYxNDg5Q0JBCi06MTA1NUIwMDAzMzgyRkZGRjIyRTRFRUU2Q0FCRUFFQURFODRGQUREN0MwCi06MTA1NUMwMDBCMTAyNzg2RURCRkEwNTFCREMzMENFNEI5QkMwMkUwMjlECi06MTA1NUQwMDAzODc5RjJDMjBEMDVEMDlFQkI0MTM3NTEyRjY0MUVBRTAzCi06MTA1NUUwMDBFM0E1NEQwQjVGRDkyOEUxQjgyMzUzMEI2MURDM0MyMUM3Ci06MTA1NUYwMDAzRjczODY3NThGNUQwOTc0REU2NkQ0QzYxNUZBRjU2MzUwCi06MTA1NjAwMDAzRUU3OTc4NTMwQ0MxOUQwQkYzOTIyNUVCMUQ1QzAxQTlDCi06MTA1NjEwMDAyMkY1NjY0MTNFOTdCNzM1NDVCQzM0NENFMUYxM0NEM0E5Ci06MTA1NjIwMDA4OEY4RDBFM0IwRkZBQTExM0NGRTkzQkVENjRDRjE5RkEwCi06MTA1NjMwMDA3NEM3N0Y5RTlDMEVFREU5MUQzQTA1NEQ1QUQ5QjY3NDhDCi06MTA1NjQwMDA4RDAxRkQ5RURCNTgyN0YyRTM1Njg5M0YxRkNDRTY3NjlECi06MTA1NjUwMDAzMjE4MkNCOTczMjJGQzFFQjAzN0NBRjIyM0UyQTdGNjI3Ci06MTA1NjYwMDA4NkEwODQ3MThDQUExMTRCMjU4QzM3QTczQkVFOTMzMDEyCi06MTA1NjcwMDBGRTkxREVFMDkzN0M4OUU4MjdGOUE5RkRBRTIyOUYyQkZECi06MTA1NjgwMDAxRkQ2Njc2Rjg0RTczNUY3QjFCRTBDM0M1Nzk4Qjc4MURBCi06MTA1NjkwMDBGMjA5NjQ1NjE2MzlERkVDMjI4RTg3Mjc2NDIwM0RCNDY4Ci06MTA1NkEwMDBERkQ3MUE2OTVERDFGODlBRTVBRTFFOTkzRjdDRTAxQzAwCi06MTA1NkIwMDBBM0RCQkZDQ0U3RTdCOEZENzE5ODAyRjk2MDEyOEYxRjNBCi06MTA1NkMwMDA5Qzc4Mzk5M0VDRTVEOTZERjExRUY0MjM0RjNDMzlCMjQ3Ci06MTA1NkQwMDA5NkUwQTcyQTNDNjhGRjlFNzhCOTYyMUE5NkIzOUY5QTEzCi06MTA1NkUwMDA0OUZENEU0OEVDMzBDNjA1NjYzRjc1QkI4Q0Y1Mzk3OUVGCi06MTA1NkYwMDBCMDJFMUNFRkI0OTFFODcxRjY1M0Y3ODlFNzFGQTlDNUU2Ci06MTA1NzAwMDBGNjcyNURGMEVGRDA5RjJFNkY3RTJEMDFFMzA1MTU4OUI3Ci06MTA1NzEwMDA2RjY0NjE3OTQyRDdCRDZBM0ZDQzdGODM5NUZEMUFENTBFCi06MTA1NzIwMDBCNTc3NDNEQURGRDRDMTNGRTYzQzk5NkJDMDc4OEMzNzVDCi06MTA1NzMwMDAzRjk3Q0VGMzI2RTYzMUYwN0MwNzJGRjlCNzk1M0JCQUI5Ci06MTA1NzQwMDBERTAxOEI4RTVERDdEOTVCODNEN0JBOUU1REQ2ODM1ODM5Ci06MTA1NzUwMDA1Njg3MTUzNEEzNTlFRDYxRUY0MTJDQTc3NUY5NkJEMTJDCi06MTA1NzYwMDBCQ0E5RkJBMEY1MjA5NkREMjM3RDVFQzRGRkFCRkZFRDU5Ci06MTA1NzcwMDA5NjM3NUUwNTc4QzQ2M0FCQUM2ODg3RTYzRkRFM0Q2MzcxCi06MTA1NzgwMDAxQkM1MkYwRDBDRjlBMTYwOTJCRjU1OEYwNDZDRjZBNkI2Ci06MTA1NzkwMDBBMjdDNzhGNjE5NTk4N0ZBRERFNDZBOEQ0M0Q4NzQ0RkY0Ci06MTA1N0EwMDBBRTBFRTM0Q0RCNTM1QTE3RDNCRTBCRTIxOUUyRjEyOERECi06MTA1N0IwMDBFODIxQTQ4QjgyMTQ2RjJBRjIxM0YwMjU5REMzOUQ4MkU5Ci06MTA1N0MwMDAzRTREMjk3RTZCMEFENjhCN0I4RUZFN0VGMTFDNUVEODA5Ci06MTA1N0QwMDBERkFGMzU0RUEyNzk1MkE1QTBDNENEMDhCNDIzRUM0MjY4Ci06MTA1N0UwMDA5RkI3MzM3RjA2RTJDMzk2RThERjhBRjFBRDgyMkFDRTA3Ci06MTA1N0YwMDBGRjJDOTFEMzA1NzY2Rjk5NDg4RjUwMTAzRUJERDUzRjUxCi06MTA1ODAwMDAwQkNGQzFFNkVCQ0YxQkUwNzQwNzZBQjBERjNFQzkyNUMyCi06MTA1ODEwMDA5OEVFN0YzNjRCMUMwNjM5NDNFQkMyM0Y4Q0U3QTQ1QjA2Ci06MTA1ODIwMDBEMkM5Q0U1MUQ3NkY2QjgwRjEyMkVDMEVEQ0M3OEQ5NkJBCi06MTA1ODMwMDA4MUU3NTRCQURCMjBGNkY1ODQyODBCRTZGM0YxRDRGNUMyCi06MTA1ODQwMDA2RUNDRTc3QTFERDZFREQ0RTE3QUY0NjIzREIwMEY1REZGCi06MTA1ODUwMDBDNDdBMjJGQUQxRkVGQUQ3Q0QxNDNCRDIwNTYzN0U4OUYxCi06MTA1ODYwMDA5N0NDMjk0N0VFN0ZBMUNFMTMzNzFBRDdGRkQ2NUY2MUI5Ci06MTA1ODcwMDA1QzI5MDlFNTA4QUNGMzY3RkIyNzk5OTE0RkEzRjdGMTgxCi06MTA1ODgwMDA0MkJFODhGQjgwQkQ4Q0ZFQzM0QzFGRTdERkU2NDZCRkVGCi06MTA1ODkwMDA4NEZFOTQwRDYxRENCRjQzRjY2MDVDRDQ2NjY5OTIwQ0IzCi06MTA1OEEwMDAxMUZCQjUzOUI4OUU5RUQ5RThERjhGNzI2NTY2Nzk4MkEzCi06MTA1OEIwMDA4MkY0M0Q4Qjc1QUVCNTcyRkUzRTk4MEZFQjJCNjJGRDA4Ci06MTA1OEMwMDA3RjE2MzY3MUMwNEU3Q0ZFOTlGNzRFRTI5MTNBNTg2N0NBCi06MTA1OEQwMDA1NTMxRUFDRkM3RUVBNUJDODlDRDhGQ0MzQzhDRUJDRjQwCi06MTA1OEUwMDA3NDNGQjkzRjE1MDZGNDdFMkRDRTdEM0U4RjZGNjU3N0YwCi06MTA1OEYwMDBDODlBQkM4NzJDQkZBQ0M5OEJDODU4QUM2RDA3N0FEMDhFCi06MTA1OTAwMDBDMDJBNUREOUE1RDUyOUE4NkY3NDA5MjUzMzY3QTA5RDQ0Ci06MTA1OTEwMDA5MkE0MjNGOTBFNzI0QTlBMUJEMzFFOERBMjJCODE3RjZCCi06MTA1OTIwMDBGNTdDREVDRENGQTc3M0IzNTlGODM5QjA1RUM1N0M3MzczCi06MTA1OTMwMDBBMkQ4QUM3QTRFMzA2RjMzQjA3OTMyRDA3RDczQUQzRUExCi06MTA1OTQwMDAyNEExMUY4RkZERjEzMkIyOTcwREY3MjYwRTNFQTdBREIxCi06MTA1OTUwMDAwNkU3Q0MxOTI4QTcxRkQ0NTkyOUFGMkEwQUFGQTA2Nzk4Ci06MTA1OTYwMDBGRTk5RkM5NDA3RDNBODFERUE2NTMzQzUzRDIzRDZBQjQ5Ci06MTA1OTcwMDA4RjA1NkJDRkUzNEFGRDNCNTg3OENFMENEN0UwRkE0QzRECi06MTA1OTgwMDBDN0RDOTlBODY3MzM5NzMyM0FGRkU4RjZBMjQ3QjVFNzM0Ci06MTA1OTkwMDA0QTdFRUY3ODhDQTNCMTUwRjgwNzlDRTc0Q0M3RjY1QUMzCi06MTA1OUEwMDBCNEVGQTNDRjU1QTVCQjlDNjFCMUY1QzIyMzA1NUMyRjE1Ci06MTA1OUIwMDBFNDI0MjhBN0VBQzhBRTkwQzk0RUYwNjZDQkMzMjNGRDA1Ci06MTA1OUMwMDBBNEVGRjJCOTFGMzBFNTU3MTZEMjQzRUM2MzczMDgxRkZBCi06MTA1OUQwMDA1NUMyNUQzRjI5ODY3M0E4RUVEM0ExRkJDMkRFM0Q3RTkyCi06MTA1OUUwMDBFMEU5OTk1MDRFRkRGNTdCNERDN0EwREZENEVGMkNFM0U1Ci06MTA1OUYwMDBCMDdFMzdFQjlFODE4MUEwRTA2MTAzRjk4RDZCQkU3Q0E4Ci06MTA1QTAwMDBBNTE1MDM0NENEOEQ0QzQxQkRBQkNFRTMyOEUwRkE2RTI1Ci06MTA1QTEwMDA4RjIxRTQyNUY5NUEyQ0IzNkQyNDA3RDlDNTRCMTFGNDE1Ci06MTA1QTIwMDAwMjkwOUVFODg3QjczMTZGNjMyQkY5OTFCNkZDMTI4NjFFCi06MTA1QTMwMDA3OTNDQ0RBQ0YzMEVEMjk3Njc4RDBDRTNBRjM3MzYzODk3Ci06MTA1QTQwMDAwRDU1QjBGRjFCMUI5RDg2Rjk3ODlGMjFCMzNBQjQyM0Y3Ci06MTA1QTUwMDA2RTZBNTBBOEZFQTY0Njg1RDc5Qjc5RkREQzA2MEZENTU5Ci06MTA1QTYwMDBDRjZERjRGMDdBMEJENDVCMzAwRjI5RDQxNTgwNzE2RkIxCi06MTA1QTcwMDBCNkE0M0E3NTc4MUZEMEU4RTVFRDE3NENENDdFMUNGQzJGCi06MTA1QTgwMDAwMUNDMjc4QzhGMEI5MUJDNkZFREQxRjE3QjIzN0Y3Q0Y4Ci06MTA1QTkwMDA0ODgyQjU5QTEyQ0IwRTNCMTE3RkY3RTgxNDUwMTdDQzExCi06MTA1QUEwMDA5NDJEMzMyQkMwQ0YzNjc4NDM3QTY4N0Y4RTg1MzIxMEExCi06MTA1QUIwMDA5MUJCMTczNjc5MEJBMTdFQjc0M0I2RTJGRTc2ODM3QkE2Ci06MTA1QUMwMDA4QkY5NDdDMUE1MzJFMTlERkUwMERFQkREODQxRjczQTEyCi06MTA1QUQwMDA1QjQ1RkMzRUI4QzQ0Q0YxNjZCMDc1MjhERUNDOTY2NERDCi06MTA1QUUwMDAwQTNCODZCNzc3MkNCMDg2RDAxRTAzMzk0OEU3RDg3QkFGCi06MTA1QUYwMDA4RjRDNzYwMEM4QzNBMzZFQjQ4Qjc2RTYyQjE4OUZDQTcyCi06MTA1QjAwMDA1Q0FBRTVCN0Y0ODUwQkFBNjhCQzQ2NjY0NTNGQkRCRUY2Ci06MTA1QjEwMDA5MThGRDdCQzUzMTdEMkExNUQ2NUI5NzEyNkQyNDFGM0RECi06MTA1QjIwMDAwRUE2QTAzRkZCRUNDMjUzQjVDMzEwRUU1MDE0MkUzRjlGCi06MTA1QjMwMDBCNDcyQTE3OUUxNTM0NzlDQjgxRkJGQ0U1QTQwRkQ3OTlBCi06MTA1QjQwMDAxQ0FGRDk1RkJENUQyRjBERjAzMzlEQjc3MzQwN0UwQzQ4Ci06MTA1QjUwMDA5NjM3Q0E2MTFDMjc2MzVFQjU4MkYxQzE3NEQ4MjdDNjI3Ci06MTA1QjYwMDBGMzNCOENCQzNFNzhBNzRDRjcyREU5MEJFNUIwNzVGNDAwCi06MTA1QjcwMDAwMDdGNjcwQjE0QTYyMzFGMjY5MTdDRDFGMEQ3Qzg5RDA4Ci06MTA1QjgwMDA1QUY4NzlDMUE3QzBFRjMyRUUyQkI4OUQ1MTNFNjdEMUNDCi06MTA1QjkwMDA3NjZEM0Y5MDkzM0E5NDU3RDlFRERBRkE1QjhCRkFFMzNFCi06MTA1QkEwMDAwMjFBM0M0NEUzRDlFNkU3NzIyRjdBOUYwM0ZCMEFDNzQ3Ci06MTA1QkIwMDAxNUQxQkU3NDdDNUYyOEQ3QTBCRUQ4NzI4MEVBOEIxQjNCCi06MTA1QkMwMDA2NUM1RTk0NDc5RDc3OTBBRjc1RkI0NTM2NjYxODBFQjFDCi06MTA1QkQwMDAxNzk2Q0Q0NDdBQUFERkE0QTNGMEM4RjVBQzhCRTRDMjMzCi06MTA1QkUwMDA5NUY2QURDNjNCQTJGNzE5QkRCRkVGRjJGNTVDOEVBOEU2Ci06MTA1QkYwMDBGNkUwMTM2NkIyMDdEQjFFQjZFOEYwOUUxNUVDQUQ3ODUyCi06MTA1QzAwMDA4QzJCREM1NTU0MUQyQzQwN0I0MEM4MURDMzI1M0Q5NzczCi06MTA1QzEwMDAyN0NEMTZBMjUzODNFRDUxNzc2NEZDQTE2NTU0RjUxMzhCCi06MTA1QzIwMDAwNUQ0NkZEODhENzUzQzZFNDFGQjhFOTY2MzNGMTdFM0FDCi06MTA1QzMwMDA0REVBRDZFNkUzNUREQjEzMUY5NTNGQTZDREM3OUI3MjA5Ci06MTA1QzQwMDAyMTMzMkE3RjJDMkYyQTdGNkM5NEE2N0RBQTc1NUM1NDYxCi06MTA1QzUwMDBGRUQ4QjU1MUY5NjMzNTFBNzg5NjdCOTZBNkZGRjVDQTNBCi06MTA1QzYwMDA0RDFBRjg4NkYyM0IzNEZERTc3OEVFRDZCNERGNTQ3NzcwCi06MTA1QzcwMDBCRkE2RkQ2NkVGNEEwRDdDNkJDMzVGNkJGQURGRTY2Qjc4Ci06MTA1QzgwMDBENkI0REZCMUY4Mjc5QUY2NjhGRjQ5MkQ3NzE1NzBGOTc5Ci06MTA1QzkwMDBCRUQ5RUUzRjQ5MDE2Q0QwRjc5MUY3M0Q2QTk5REUyOEY1Ci06MTA1Q0EwMDBGNzQ2OUU3QjUyMDJCN0E3QTJGQkZEQjk4MEQzRkI4QkMwCi06MTA1Q0IwMDAxMjlGOEYwNUVEOUE3ODFDRjNEODM1RjFCQTcwNDU4NTlGCi06MTA1Q0MwMDBCOTFCQzY3MTFBOTVERjIxREQ2MkUyMEVCRkJGQjY2QjRDCi06MTA1Q0QwMDBFRUQ5RjYzRjBFRkQ2MEJDQTZDNDVDMUJFQTNCOENGRjEwCi06MTA1Q0UwMDBGQTQwQjkzNzg3NzQ3NDVGNjE1QkJGNEEyMjNEQjg2OTc3Ci06MTA1Q0YwMDAxNThGQUI1QzMwNTIzQ0FGN0YxREFDOEVDNkZCNDZEQ0QzCi06MTA1RDAwMDA2QkE5RUJFQzEwNzFBNDJEMTg0NzQyODVFNDk5NDFGRDc1Ci06MTA1RDEwMDA1NkM2RjE3RTNGNEQ1N0UzOEUzRTFBMzdBM0RDMThBNERBCi06MTA1RDIwMDBGQ0JDODU3RTA5RTNDMENEM0U2NkM1N0I5Mzc0Q0IwMjg3Ci06MTA1RDMwMDA5QUZGOUIwNjI1OTk1RDI2MkVEQTE2QjAzMzBGQ0M2N0E1Ci06MTA1RDQwMDA1RjE1NUM2Mzg0QkQ3RDUyRDBGN0Q0QjNGMEJDRERDRjZBCi06MTA1RDUwMDAyODFFRDM1QkYwRUQ1MzE4OEZFOTQzRTEwODc0OUQyMUIxCi06MTA1RDYwMDA3MzNDM0ZGN0MwRUVDRjVGODFGOURBRTZBNTk3QTE1Q0ZGCi06MTA1RDcwMDA4RDZFQ0Y1QUJFRjdFQjQzOTc2OTdGNkVEOTVCMUZERUZFCi06MTA1RDgwMDA3QkI5RTcxRkQ4NzVCQTI1QTI3REM4Mzg2OTQzMjZGM0M5Ci06MTA1RDkwMDA0NEQwMDFFMDJDRTZGRDgwNUNDOEY1RjlGMjBBMjNDNTg5Ci06MTA1REEwMDBCMUFFMDFGQzE1MDJCRUJGQUFGOENGODkzQkUwQjkzRkY2Ci06MTA1REIwMDAzOUZCRUU0NDNCMURFQTY1QUM4NzdFODRENzNGRTU5RjA3Ci06MTA1REMwMDBBM0ZDOTI5QzUxNjBERkEzRkQxRDE3OUI2RUM3MTU3MjRCCi06MTA1REQwMDBCQTk1NkQ4REJEMTgwNzZBNEEzNDNBRDFDRkNGMzJCQjIwCi06MTA1REUwMDBDQTNFMTkwNzc0NkRFMDdFNzVCNEZGRkU1Q0JGQkZERDZGCi06MTA1REYwMDA0OUZFNzc5MTE4Mjc0Qjk0N0EyQjdGOUU5OTgzNEM0RUJFCi06MTA1RTAwMDAxN0Y3MTQzMUYwQTE0RjZBOTc1MDVFNjUyRTk0M0Y4REJECi06MTA1RTEwMDBFNDhCRkQ4OTQ2OEEyM0E0NUI0NERDQzFCMjU4MTMxNzg2Ci06MTA1RTIwMDA1MEUzMDZGQjEzRUY5NTkwRUVEM0MzNEIyODlFOEZGMTAyCi06MTA1RTMwMDAwMjFDNkY1Q0ExOTNENjExMUQyRkM4MzJFN0QzQkE4NjFFCi06MTA1RTQwMDAxRTlGRjVENzI3NDgzMUU2ODk1QTg3MUE5Rjg4OUUyN0QzCi06MTA1RTUwMDA4NEY2MDRFQTk5NjVGMTY0NEY0NEVGN0I0OTYxNTU3OTEyCi06MTA1RTYwMDBFMTcwRTREN0RFOTNEMzUxN0U5RjMyOTAzRTFDOEE1RTcwCi06MTA1RTcwMDAzMENGM0MxNDMxRkVCNDQyRUVERjYzRkU3ODY0M0RFNjgxCi06MTA1RTgwMDA4Nzg3MjJFM0Q5Q0M0MUVGMkIxMDBDMkE2Njg0QjE3QkEzCi06MTA1RTkwMDA0MzExQ0U3Nzk0Q0Y3N0MyQTBEOEM5MUUwNEI1ODdGRTMwCi06MTA1RUEwMDA1RjdEMjFENzAzRDMzMDk3NkQzOEYyMTlGN0NCREI4MUIzCi06MTA1RUIwMDBBRkIxREMxMkIwOTI3REQ2MDFGQzg3RjAwQjAxMjc5NUMzCi06MTA1RUMwMDBBMTgwOUJDQTZEMDE4NURBQjcwN0NBMDk3RTI1RTAyMTRBCi06MTA1RUQwMDA3ODQ3QTA4RUNBRDcwMjVFQUFERjE5NjgyMEY4RTcwMUNBCi06MTA1RUUwMDAxRjk1OUQ4MUM1NTRGRjQ2QzA0RkYwOUI4MUQ1MDRCRkNGCi06MTA1RUYwMDA4NUY2NjAwMUM2QTlENzUzQjkzQkQwNEFFRDdCMDNFREM3Ci06MTA1RjAwMDAwNEJGMUQwODUxMTkwRUVDQTBGQTAzODE0RTgyMEYwNjQyCi06MTA1RjEwMDA3NjExN0MyODEwMjZGODcwRTAzMDk1NDcwMzVENTQ3Rjk5Ci06MTA1RjIwMDAzQ0YwMDFDMTM3RTMzRUM5QUU1OERGMTVDMDc4ODU0RjVDCi06MTA1RjMwMDA3NkEyN0RGN0FDNkZBMTE1RUQ2QkZCN0M5RDE1QzU3OTQ1Ci06MTA1RjQwMDBCQjRGQjcwNEUzMUMxRDhERkMxRTEzRUYyMzMxMEUwNDYxCi06MTA1RjUwMDA3NjY4MDhFRDM5RkJGQzY3OEU0Q0E1RjZCOUQ0QkUxOUZFCi06MTA1RjYwMDA4NzA0QTdDNEI2ODJEQkFGNkM5OTkxRkFEOTMwMjEwQUI1Ci06MTA1RjcwMDA5RUVCNThEQTE4RDIwM0RDNUExODRGRURCNjE1MzJGOUY5Ci06MTA1RjgwMDA2RENGRTlGQzI5ODVEQ0VFMjJGOTZEMzM3MEZCNDFBNTZDCi06MTA1RjkwMDA4MzM1ODU1Q0RFQUUyOUU0Rjc1QzFGMTZGMTczNEFDQUNGCi06MTA1RkEwMDA4QkFENDc5RTJENTRFREE2RjU4NzcxN0ZGNjc5QjAzRkY2Ci06MTA1RkIwMDA1Q0VGQkM1NTY2QkM5N0I1RERBM0IzNzI3QjkzREZDQkJBCi06MTA1RkMwMDAzQTYwQkZCODdFNTgwRkM1ODVEOTdDNkUyRkRCRTZBRDMxCi06MTA1RkQwMDBBNTc1MzlFNkRGNDhFREQ2QTI0NzUzRDA0RjZGRjdBRjJFCi06MTA1RkUwMDA5QTQzRUI2RDk0MjlBRUQ5RUUzQjkwODJGNzZDQ0Y4OTQyCi06MTA1RkYwMDA3QzI3REJGMDc4NkZBODY0RjA3QTlFOEQ1QTdGMDdFM0U4Ci06MTA2MDAwMDA3RTgzMDNFQ0E1RDc2M0VDMDNEMzZFNDlDRjMwMTFDNzcxCi06MTA2MDEwMDA3QkQ0MUMzMzhFRDcyOUU4RDcyMTcxRkU2MzBGQ0FDNDA1Ci06MTA2MDIwMDA3RjJGMzBCMEZCRTBCOTJENjBERjA1NTEwRTU0QkZCNkI1Ci06MTA2MDMwMDAwMkUzNTVCRDg1QkU5RDI4Mzc5Rjc3OEUzRjIwMDM5Qzg4Ci06MTA2MDQwMDA1QUM3QzdDRjVEMjVCRjgyNzYzNDlDRjdFNzJENTBCRjc2Ci06MTA2MDUwMDBFMUJFNEQ1RTVDRUFCMDREQ0UzNUM4NkVFREYzREZDQUYxCi06MTA2MDYwMDBDMEY4OTc0M0QyOUU4RjVBQkUyREY2Rjk4Mjg3OEZCNzFDCi06MTA2MDcwMDA2NTk1NENGMTY0REI4QTM3NUQwN0Y5QkNCQjkxRkYzMzUyCi06MTA2MDgwMDA4QjNFOEFDMzMwNENERTVDQTcwRTQ1ODY2MzlFRkMzNTkyCi06MTA2MDkwMDBDRTE3NzdGRkE2M0E0MkNEMjY4RjNBREY1ODlDRUY2QTlCCi06MTA2MEEwMDBGMTM0RTJCMTVBOUIyRkM2QkE4NjkyMjc1NzkyMjNCRjhBCi06MTA2MEIwMDAyOTE0RUY4MTY0QjEyQzk0MjNDRjE5QjhEQzBBOUVFNDMzCi06MTA2MEMwMDBGNjI0MjUwNTREMUEzQzhGOUEyRkEwRTYwRjQ0RTcwQkM2Ci06MTA2MEQwMDBGQzVFRTAyOUNCQzQ2MkRFRTc3RUQ2NEZCRjQxM0FEN0YzCi06MTA2MEUwMDAxNzNDMUJCRDk0NjdFMzkyMzE0OTg3MzUxOUQ4MTI3QTYyCi06MTA2MEYwMDBFRkE3MkFERUJBMjYwNjNEQThFNTUzMjhDNzAwQzExRjMwCi06MTA2MTAwMDAxNjMyNzEyRTlCRUFGODM4M0EzRUNFNjRCNjgyRTAyQTA3Ci06MTA2MTEwMDA4QjM1MTg0MzVFQUJFNTMzNjI5QzdGMkJFNDc0OUI3NTMzCi06MTA2MTIwMDBERkNFMEQ4N0YwN0M4RjFBMjgzNzZBOEIyRUI0MDFGREU1Ci06MTA2MTMwMDA4NEUwMDkzREM5RDc0QzdERTdENjU3MjJENkY1MTc0MUYzCi06MTA2MTQwMDA5RjVCOENBMTYyQkM4NzZFODdGMTRBNTBBRTIyQkY5NEUwCi06MTA2MTUwMDA1MEZDODJENTQ3RTA1RDdERUUzRjg0MURGMEZDQzU3NUE3Ci06MTA2MTYwMDAyOTc0RkYzQzZGNkQxQ0RBNDdFRENDNENGNDYwMzNGOEJBCi06MTA2MTcwMDA1M0M2NDZEMDgzMERFOTMyMDY3RDM4OEI4QzM0MEVGQzM1Ci06MTA2MTgwMDA1OUFBMjZFMkJEMENEN0NCMzUyODk3NjBEREZCMTYyNjMxCi06MTA2MTkwMDA5MTNFQUM5OUZGREVBQzMxMDA1N0Y2Qzk5NENGQjI2NUExCi06MTA2MUEwMDAyOUNGRDM5Q0Y0RUYzQUNBMTM3OUZCMzFFRUY3NURGN0IwCi06MTA2MUIwMDA1MDJEQkQ5Rjk0MjFDQTY3RDFDRjgzQjI3MjNENTNDMjg3Ci06MTA2MUMwMDA3MDJFOTUwQjJEMTRCRjk5N0M0MTNFMTNFOUE3NTE0OEMxCi06MTA2MUQwMDA3QTNDRkExNzNDNUU3MzZEQUZBQzc5MEY2RDUyOEZCNjk3Ci06MTA2MUUwMDAzRjYwNTQ4Rjc2NDY0NkI3QjZERTNFRUZDREQzNTM2MTVGCi06MTA2MUYwMDA5RUY2QTVGQ0UxRjY4QkJGM0I4MjcwNzA5NThFRTIyNDgzCi06MTA2MjAwMDBFQUZCNjQ1MDkzNDFGMTREMzk5ODgxRjk5QjFCQ0M4QzhBCi06MTA2MjEwMDBFNEI5NkRCRUQ5OEFGMjYwN0Y3QTNDQzlCRkY2REIyQzQ3Ci06MTA2MjIwMDA2NDg3QUVDQjZGOEE0MzNCRDkzNDZGNTUwQTk2MjM4QzczCi06MTA2MjMwMDBDMUFEMTgzQkJERTZENTJEMzdEOTI3OTFCQzU1RjM1NUQ3Ci06MTA2MjQwMDA4MkFDMUNFQzgxQkI4RERDQzgwOTNFRjdGNDU0MTlFNTI3Ci06MTA2MjUwMDAyNUNGNjc5OUY0RUE5NkE3ODNGOUQ4QUQ5NUQ2RTFENDBFCi06MTA2MjYwMDBCMTRDQkVGOTdFRjg3NkJBQjc5NkI4QkU3MDFBQTExREM5Ci06MTA2MjcwMDBFMDc5QTM3Q0Q3MTU0MTdCNDY1QTcwM0YzNjZEQjY5Q0JBCi06MTA2MjgwMDA2OUE0N0M2QjRDMzI4MkY5MEQwQkZEQ0M4OEY1OEQ2NUQxCi06MTA2MjkwMDBFNjQ4M0U1N0Y5RTRGQkYyN0YzQ0M2ODc4NzVGNTkwRTFDCi06MTA2MkEwMDA1QzY5REMyQkYxN0I0MTNFRTc5QkExRkM2OUQzMTBGMkRBCi06MTA2MkIwMDA1NEY1OEYxRjI5RTBGQzhCNkM0QjdBRjU4QzMxQTY3RDUxCi06MTA2MkMwMDBGNUFCMjJDRTY3RTU0NjlFQTczMkJCNjE1QTFERERDMzAyCi06MTA2MkQwMDAwNEJCNjVDQ0U3N0I1MURDMEJCNUE3MjdEMjNENzE3QkI2Ci06MTA2MkUwMDAyRTBCRTNCRDQxNzA4MThFQzc3QkQyRjg3RkVEOERCOTU3Ci06MTA2MkYwMDAxNDFGNkE5M0ZDMjlDMTNDQ0M5N0YwQjlGMEZDREEwMTc5Ci06MTA2MzAwMDA0Nzg5MzA3RjVCMEU5N0VCMkNFNEI3RTI3RDM1OENCMzg5Ci06MTA2MzEwMDAzODcyRkRFMEVGMDVCNTc0Q0NDODFFQTZGODg1OUU3OEVFCi06MTA2MzIwMDBDRjY5OEM4OEI3NjM1QzFDRTMxN0QxQ0Y0REVFRDVDMjIzCi06MTA2MzMwMDA1MzJFNjhFMTJBNjZEMEMwMzU2NjJEM0NENUFBODUzNzM0Ci06MTA2MzQwMDAxNTcxM0I3REJBNUQ1QjNGQzNBOTg1MUREOTA3RTM3NDE5Ci06MTA2MzUwMDAzQ0NGREZDMjIyRTI0OUYwRjc1RTdFNDQxQzY4REQ2ODc0Ci06MTA2MzYwMDBGRTNFNUY3NkY3NTI4QUNCQjZFNUYwNzg4RjYzOTUzNkJFCi06MTA2MzcwMDBDRTkxQzU0MjEyRTIyRjczNjk1NDNDRDZCRDY2M0Y4NjZBCi06MTA2MzgwMDA5N0VEMEJBM0UzNDFGQzVFMDJGMEExQTk0NzMxOEE3Q0EzCi06MTA2MzkwMDBGMEVBNjg5RTg3REUzREQyQjdCRDA4Q0VCMzYwMEM1RkUxCi06MTA2M0EwMDBDN0FCMUQ0RDc0M0ZDNURBRDM4OEFGNUMyMjVGNjlCMEJGCi06MTA2M0IwMDBCRTdDOEFFODQwMUQwRkY5MjIxOEIxN0ZFNDg3NDhGOEI3Ci06MTA2M0MwMDBBMTUxQkUzNzcwMUVFNDhCNjBBNEZFMkNFOTM2RDBGQkQxCi06MTA2M0QwMDBBQjYyQkVBMUY4NDNFNUNGNzI3MThGQTJFNkRERjQ4OTBFCi06MTA2M0UwMDBCMUQ0QkM5QjU1MjI1RjcwNTc1NEJFNEU5RkEzMzYxOTQzCi06MTA2M0YwMDBGREU3QkVBRTk1RjFCMUY4MTBGOTJFNjhFMjdDODhFNUI0Ci06MTA2NDAwMDAwNjkxN0Y4MzdDMTgyQ0UyN0M4OEY1QTZFRjU2Nzg2MzkyCi06MTA2NDEwMDBEOThCMEIwNTVERENCRjYzQzk4NjRGMjJGNkI3QUM3MzIxCi06MTA2NDIwMDA4NTA2NUVCRUVCRTEwRDkxRjk1MUY3RTMzRjMwMDhCRjAxCi06MTA2NDMwMDA5RTUxN0VFRDUyQjE5RDJGNEZGRkNCMkJDRDBDQ0Q0ODAxCi06MTA2NDQwMDBERjA3MjhDRjk2MTU5QzMxRjI3QkE3NUUyMzlFRUI0Mjk3Ci06MTA2NDUwMDA2MUZGOTlDQ0IzRjJEMTJGREIxMUUyRjI2QzlEODgzNzRBCi06MTA2NDYwMDAzNDVCMTUzM0M2ODE5OTNCNTUxM0M3NTBFMzExNEQ0QjJGCi06MTA2NDcwMDA1Q0I2NTREODQ3NzI3RjdDQzE2QkE1N0NEQ0UxRjkxNDEzCi06MTA2NDgwMDBERjQ4QUFGMURDQ0VDNjMyRDY1MzY0OUM2QjA2NjJERENGCi06MTA2NDkwMDA4RUMxNTZDMEU5Rjk1N0Q5MzM0MUM3QzBCRTREMTdGODcwCi06MTA2NEEwMDA3QkM5RkRCMEVDNjcyNDhGMkVFNDY4RUFEQjQ0OUNBMzMzCi06MTA2NEIwMDA5RkJGMkQwQkFBNzAzRThCREI0OUZCQjAzMUZGMUExRTJDCi06MTA2NEMwMDAxN0Q0QzZEMTRDRTIzREU3QzFFMzNCMzRGNTZEMjI3RUUzCi06MTA2NEQwMDA3MkU1RjFCNTcxMzlEMzg1QkMyMUM2MkY4QzFBREYxQTRDCi06MTA2NEUwMDA3M0ZDODE3MUI1RjFCREFCQjgzNzRGNzE0RjE4M0EyRUJGCi06MTA2NEYwMDAzNkQyQ0RFOTY5OURERERGODU3MTMxODNFMDdGNjYwNkE3Ci06MTA2NTAwMDAzQTk5ODhGMjgwRkZFOUUzNzk3RUFFQzFBMThEOEYxOUI3Ci06MTA2NTEwMDAzMEFGMEJGQTNGOTdCODk4RTQ4QUZBM0VCNUZEOTkwNTdCCi06MTA2NTIwMDAxMkNBQ0IyN0YwRkRFOEE0QzFGMjI0NUE4RUQ4NDRERTZCCi06MTA2NTMwMDA3Q0I0MUM4MUY5MzQ3MEQzQzM1Q0NGMzY0QjhBMEZFNTMxCi06MTA2NTQwMDA3M0Y0N0VGRTdGRjE4Nzc1ODlFM0JCQzhBRUNFOEU3NzhDCi06MTA2NTUwMDA5QTJFNjMwRkI3MDU4MjYzRjFCOTc1RjFGRUM1NzgwNzBFCi06MTA2NTYwMDA3RUY3OEU5MTY5NEY5NEUzN0JFQjhDRjg2Q0M1OEUyOTk2Ci06MTA2NTcwMDA3MzMxMEZCNjRERjBFQjEzNjkzQUEyQTdGNERCRDNCNzMyCi06MTA2NTgwMDBFQTIzRTgyOURERTg3M0ExM0Q5Q0FFMTNGOTVGRjg4N0EzCi06MTA2NTkwMDA3MUI0MjdEMkI3NkQ4QzMxQkY2QUQ3QTlCMEFEMDFENjFGCi06MTA2NUEwMDAxMTcxOEU2REMyOUVFRTlGRUY4RUNDQURGQTg4NzFEMkM2Ci06MTA2NUIwMDA0REJFQjEzNDVGN0ZGRUEzOThBRkU1ODdDREI3NTlDNDE4Ci06MTA2NUMwMDBDM0Q0Rjk2Qzc3NkFGNzY3MzNGQTY5N0YzNkExODdENDQ5Ci06MTA2NUQwMDBGOTM2RTNGRTYyRjBENTE1RTcxM0ZFNzVGRjdDNzc2OUE3Ci06MTA2NUUwMDBGNzY3MzNGOTY5N0YzNkY1M0IxQkVBN0MyRDNGNkMzRTNDCi06MTA2NUYwMDBCQkUwQ0Y3NkYxREU5NzNEOUU3RjM3NjRBOEY3MjM5QTA0Ci06MTA2NjAwMDBGQkYzQ0NCRDY2OTQyRkVENkFCQzUwRThCQjczNTFGQTI2Ci06MTA2NjEwMDBBRTQ5RTgzQkY1Rjk3MzY5QjkxNEZGM0Q3N0Y4MjY3Mzg1Ci06MTA2NjIwMDAyQzNEODdGQThEMDkzQjkzMDkzQjkzMDkzQjEzRTFEOTM0Ci06MTA2NjMwMDAzNUE3NTcwRDA3N0FGQ0JCMUQzN0NGOTU0MUFGQ0ZCRUFECi06MTA2NjQwMDBGRkY0RjgxQzgwREZEOUYxOEJCOTMyRThBOUQ5QUY5RUVECi06MTA2NjUwMDA3RTMzMEIxRTI5RkVEQkZCMzhGQ0Y0RTkzRTA3QjQ1QkZFCi06MTA2NjYwMDA4MkNGQ0NBRDA1Mzg2OTE4RDdDRkVBQkFENTc5NzdCOURBCi06MTA2NjcwMDBCOTVEQjk3Qzc1MUU4RjZGODI5QzQ1M0RENjlDRTM2N0UyCi06MTA2NjgwMDAxODdGRkNDQUQxOUIzNDFGRkEyRkNGRUU0RDVGMTAwMzQ5Ci06MTA2NjkwMDAyRjZBQjk3Qzc1MjE3RjFFQURDMDg5OThDRkM2NDhBRkRGCi06MTA2NkEwMDBEREE4QkVDNzUyQTc3RDhGMjUyOTY5MjNEOTg3NzEyQzA0Ci06MTA2NkIwMDA2NDQ1Mzk5NjYwRjZEMEZCOTdENzE2NzNCRDcwMzM1Mzk3Ci06MTA2NkMwMDAxQUI4NUZFMTJDMTA3OTFDRjRERUNCNERFNTYyNUM2QkVGCi06MTA2NkQwMDBFNTJGQjFGRDY2OURFNzA5RjQ3N0ZGNzlEMkJDRTE2ODRCCi06MTA2NkUwMDAzRUFCNzk3M0EzMDZERTNCRERGRTdEREU0RjlFRkRCMTQyCi06MTA2NkYwMDBDNDZERTU2NDFFOEY5OTM2Q0FDOURGN0I4Qjg4MkJBMkQ3Ci06MTA2NzAwMDA1RDNDMTQzRTNGNzU3M0ZGN0UwMDlGMUU4RUNGNTQwRjdECi06MTA2NzEwMDBDN0E3QjUzNzY5MEQ5Q0ZGRjI5NERFRjRDNzg5NEZDMzU0Ci06MTA2NzIwMDAzMUYxMzUwOEFGNTFGOEZCOTM5QkE5N0VBMDFFRUQ4ODhGCi06MTA2NzMwMDAyQkUxNUJDNUFCOUE1RkQ4MkMzOTBCQzg1RTY3MTk5QTAxCi06MTA2NzQwMDBGQzYwQzYxNDY3QUM3QjFFQTRDRjQ4M0Q2QkI0N0IxOUJDCi06MTA2NzUwMDBEQUEzODYzNEM1OERGOUVGQ0Q3RkQxQzdDQ0RCNzMxNUI1Ci06MTA2NzYwMDA4QkY4NUU1MjNDRTU3RDM2MjcxOUM5MUZERjlGMzQ5M0I1Ci06MTA2NzcwMDA2MUZDNTlCNjRDMjNCQ0Q0MjZENTUxM0VBNjdFMThFQkZECi06MTA2NzgwMDA0NDdGMzUzQTBGNUQ5RjdDM0JFNTA5RTk2REU4NjE0MDQ4Ci06MTA2NzkwMDBEOTlGQzdFQzMxMjM1RkU5M0Y1NjkyNUQ0ODAwNTc5OTc2Ci06MTA2N0EwMDA4NzJFNUYyOTBGM0Q3NTI2Q0Y0MzRGMzIzQTMxNUVEODkxCi06MTA2N0IwMDA5RTY4OEM5OTg3RkVBRDlCRkI1REZCNzE3RjY5QjgxRjVFCi06MTA2N0MwMDAyM0ZGNkU4OEQ4OTc2Q0U1RjdFRTU4OUYwMEY1NDZBQjJGCi06MTA2N0QwMDA4RjUxRkM1REVDRkY1QjYxMDdBOUZENEQ1NjNGNDNGOTBFCi06MTA2N0UwMDBBMDM3MkE0RUI0NUZGNEE5NUM3RkUwNzc1QkRDMzFFMjJFCi06MTA2N0YwMDAyODVGQkIwREY0RkNGREEzQUM1Q0NGOTlCOUREM0VGQjdCCi06MTA2ODAwMDAzN0IxREYyNzI4MkI5NjQ0QkMyNDM2REQwRDQ1MzczN0JBCi06MTA2ODEwMDBFQTc4REU5RENBOTc3MzJENDZDQTA3OUM2QkIxRDNGNzAxCi06MTA2ODIwMDA2Q0U2MDIyMUY2QTQ0NkY0QkZFRTU2RkUzRUI1QUNEOEE3Ci06MTA2ODMwMDA5MTlFN0U3QkVEOTQ1RkZFOTZFMUI1MDA5N0RCQTc2NkE3Ci06MTA2ODQwMDAxOEU4QkRDMjUzMTJGMzI4QTk4M0YzNURCRERFOTRBOUY1Ci06MTA2ODUwMDBCOENDMUJFQTRGQUY0NTc2MkMxOEMzQzg0RTdBNzVDMTI5Ci06MTA2ODYwMDA0M0FEOTU0RUYyOEZFQThBOTE5RTdENzNBNkEyMEY3NzczCi06MTA2ODcwMDA2M0MzRDg3N0IxRkZGMjA0MkVDRkQ1RkJBNUU1MDlGQ0ExCi06MTA2ODgwMDA3RERFNkI2NERGNkNFQ0ZGNTVDNTE3NDlENTQ4NUY3MjQwCi06MTA2ODkwMDA2RjBFQUUyQkEyM0ZERDMzNDVGNDlGNUIzQzgxRkFDRkY4Ci06MTA2OEEwMDBFNkFGRERGNUQyNzczOUNFQTU5REY5QzhDN0U4N0NFQzE3Ci06MTA2OEIwMDBCMUVDMjlGNEI3NThFNEJEODY5MDFGRTg3NzQ1RDZBMzFDCi06MTA2OEMwMDBCRkM1MjJDRTUzNUE1MDZFRUI4RTIxNEZENDMyQzMzRUY5Ci06MTA2OEQwMDA2RUU0NDJBMEQ3OEM4Q0IxNTRBQUY1Q0Y3QUY0NzVBMTlFCi06MTA2OEUwMDAxOEU3RkM5MDM4RTcxRkVDRjdCNEMzNkEyNzBFRjgzREIxCi06MTA2OEYwMDBFMEVGM0M4NEY4Rjg3MkUxQTlGNEYxQjBBNTA3NkFCRkIzCi06MTA2OTAwMDAyNkJGQzc2RUVDRkZDRTE2Rjk3MTAzQjBGNkJFQjMyREVECi06MTA2OTEwMDBEMDVCOENERjE5NjA4ODg3ODkxMUY5OEI2MkJGRjYyNUZGCi06MTA2OTIwMDA2QjUyRDBFRjgxQjNGNDIwREQ3NjA0QkMyMzZCMEQwM0YyCi06MTA2OTMwMDBDRkJGMkNFNDA4MEIxNkQyRjMwNkIxMkU0NzVBRUIwQzRFCi06MTA2OTQwMDA4Q0JCMzgyQzNBQ0E3MzYwQ0NBQTkxNjc3MzZBNTNBNjgxCi06MTA2OTUwMDBBNkExMEJCQjlDMjkxNjI3RkFGNzVERTQxNzY0RTBGQkEwCi06MTA2OTYwMDAwRDE4OUY3Q0U3MzY4NkY3NUY1OTY5OUQxMkRBNzVGRDMxCi06MTA2OTcwMDBGMzg4RjdDNjU3ODk3QkUxM0U1RjJERUQyN0MzRDZFRjNECi06MTA2OTgwMDA5NzMxRjI1RkQzODI3MzUwNkVGNTNEQzM1Nzk0RjE5MjA1Ci06MTA2OTkwMDBCNkREOTFDNkYzMUZFRTVEMTgxRjcyMDJCRDY3MkRFREM3Ci06MTA2OUEwMDBDMjRGNEZCMDBDNzBGODMwQTY5RjcxQTlEOUQ1ODI3MjMyCi06MTA2OUIwMDBFNjU3MDkxNDc3RDZCN0U3QjMyMEM4RkJCMEVDRkIxQjRBCi06MTA2OUMwMDBDMjc3QzhGOTkwMkU0RjZDMTY5RTVCQjYyODlFRUNCOTI0Ci06MTA2OUQwMDA3NkE5NzUwNkY5MzFGN0U4NThBQzc4RDFDRTYyRUVBNzAyCi06MTA2OUUwMDBGQzhGNjIyQkJGQ0ZCNTRGRTRGNDYzMUYzRjcyRTFCODU5Ci06MTA2OUYwMDBBQkU3RkY3Nzg0OUVGOTQ5QjI5M0RFN0Y1MkVEQTM0RDVBCi06MTA2QTAwMDA0M0Y4NDc4RTkxM0EyMTVGODQ1RTExRjgzMzMzOUYxOTIyCi06MTA2QTEwMDBGOTQ1MkY3OTc5QjA3NEM3NkJBRkJEOTZDRUU4NTM1QjVCCi06MTA2QTIwMDA0ODQ3MUI4NEZEQTM4RTEzOUYxRkEyQzY3OEM1NDNGMjVGCi06MTA2QTMwMDA1MkIyN0FCOEJFQjBGQUVENDEzOEFGNzVERkU5NjNDRTM1Ci06MTA2QTQwMDBGRjg1QTBGQjM1RDkwRkQ5QjE3RkFERDNFN0M2MzJGQUE4Ci06MTA2QTUwMDAzRDk4OTY5QzdCREQ3ODNFMkQzM0ZCRTk5NUVDQkE5NjBDCi06MTA2QTYwMDAzM0NFREY2MTNFNTZGMDI4Q0YzN0Q4OUY1RDY4QzNFRjQ1Ci06MTA2QTcwMDA0MTU5MEUxQjY0RDM2NUUyRjE0NkQwMjdDRUNCRDgxOTFECi06MTA2QTgwMDA0NjkxQUZERTcyODBFNzk5QjY1OENBQkEzMEFGQTFDNTU5Ci06MTA2QTkwMDA5MjU2NDY2QUQ4QzJGMzU2RDVGRTE2Q0IyMUQyMDcxNkI3Ci06MTA2QUEwMDA4NURGREY1QTUwN0Y0OEI4NENDMDQ3MDlBRUVCMTBFMTk0Ci06MTA2QUIwMDA0M0VENzc1MEM4NUQ4QjEyNjZGODVFNUE5Q0QyNEFGRDUyCi06MTA2QUMwMDBDQ0IyRDc4Mzc5Q0FFNjM0NDZGNzQ0NjYyQkYwMTdFMjk2Ci06MTA2QUQwMDAzNTVGQzdDQzMxRjRDOUJFNjJBRTRGNUE0QUNBQkFBQUIyCi06MTA2QUUwMDA2OTdEMzI3RUI5OEVCNUQ4Q0JFQ0E0RTcxMUVGRjA3QzhFCi06MTA2QUYwMDA3Mzg2OTZDRkJGMTM3ODU3Qzc2OTE2RjlCNDc3QUU0RTMxCi06MTA2QjAwMDAwOUQ2OEVDMzM4OTNGNzFCQTRFNzE2Q0IwMjczMTBGNTkyCi06MTA2QjEwMDA1QUUyRjhDQjhFNjcxQTM5RDQ3OEZCRDc4QUYxQkU0Mzk0Ci06MTA2QjIwMDA3OUFFNEYyQ0IzRTI3ODA2QzZGNzE1OERGN0UxNjI5QzdCCi06MTA2QjMwMDBGRkQ1RkI3QkMwMkNCRDQ3NEQzMDFENThEODFFRUI3RENCCi06MTA2QjQwMDBBQ0ZFRjMxM0Y3RjJEMUNGRkQ2MDc5QkM1NjFCODcwMjgwCi06MTA2QjUwMDA3OUVDMUUwOUZCNUE1NjcyRTY1MDM1RDVGMEY4RDMwQjg2Ci06MTA2QjYwMDBDMjlGNTFGRDkyNzQzMUY2MEIxMjdGQkYzRjI4QzUyQjk3Ci06MTA2QjcwMDBGNDVEMENFMUE3QTRDNzY5RjEzMEYwM0UyRDNGODc2RkFCCi06MTA2QjgwMDAxQTc4MUVERTM3Njk0QzdDODc0RUNCRDdERjFDRkYzODY2Ci06MTA2QjkwMDA0NTkzOUYwNTdDRUMzMTcxM0ZDNjIzREVBN0Y1ODgzODBECi06MTA2QkEwMDAxREMyMTg2RkEwMTc5RDA0RkZGN0M3ODkxQjlDM0ZDMzI4Ci06MTA2QkIwMDBFRkFDOTk0MDhFRUI2MDVDQzlFMTI3RkEzNjM5QkE1RERCCi06MTA2QkMwMDBDOEVGMzlFMkZCMEZEMTc4RkVDOTQ4MkVBRkE1NDc3QTRFCi06MTA2QkQwMDA1Qzc4QUY1MTlCRDY5QjExOEJERjVGN0NGODQyMDZFRTUxCi06MTA2QkUwMDBFN0M1MTlGRDc5M0I3NERGRjRFMjY5RTdFNjAyQzRDQjNGCi06MTA2QkYwMDAxMUVERkI2RkVBRjg0RDQ3Q0VBN0Y4MjJGREE1QzBFNUUxCi06MTA2QzAwMDBERjJGNEIzQUIzNzEyNUQ5OEQwQkI4RERGODdGRkE3REI0Ci06MTA2QzEwMDBCMzE3RTY3MzNCNzU5N0E0OTVDRjRGMDhCOTFDMTRGQ0M2Ci06MTA2QzIwMDA2MEJCMjBEM0Y3NDNFRTJBRjJBRDQwM0E2QTkzQUMwQjM3Ci06MTA2QzMwMDA1MDJFRTczQ0NDRjNGMjlBMUU1QkQ1QjMyODA2N0ZCNDA2Ci06MTA2QzQwMDA4Q0YyRkRENUM4MDhCRkJBN0NCRDkxRTQ1RUIzMjUzNzkwCi06MTA2QzUwMDBGOTcyRjcyODQzOUZCQjlGRTQ5NDdBREU1NThGOTg3OUE5Ci06MTA2QzYwMDBCRThBOEZEQkQxRTlCRTdCMjkwRjI2M0EzRjY1QTg3RTFECi06MTA2QzcwMDBENTIzOUQ0NDBGNkE3RjEzOEU4RkYyQzU3MjIzQzUxNUVECi06MTA2QzgwMDBDRUExOEY4MTcxM0IyQkI3MzNBMkQ3NTk4OUM4OThDMDQ5Ci06MTA2QzkwMDBGMTYzMDY3RDk5NzQ2MDQ5MUM4RTZCMTBGRURDMEI2QUYzCi06MTA2Q0EwMDA1Q0E0QTFDQ0VDODk3OERFNzA1Qjk5QjkzQTgyNEU5QUVCCi06MTA2Q0IwMDAxOUNGMEY4RTFFRkYzNzIzNTVGQjIyQUNCMTYzMENBOEYyCi06MTA2Q0MwMDA3RjMxQzY5NDI2OUZFRDk3M0I2NDc4RjJGQ0I0OTUwMzIwCi06MTA2Q0QwMDA3Q0NDRTMwRTQzRTdBM0M1NzFCRTJEMjM3QkFDMERGMzQzCi06MTA2Q0UwMDBEMkMwMEU1RUQzQjA2MDA0RTJCNzRERjZCRDY4MDMzQzdGCi06MTA2Q0YwMDBGNDdFNjhBMjNDRUFERjBCM0VFRDE2N0MzQUQ0RjkwNTNGCi06MTA2RDAwMDBEOTAxMzBEMjE4N0I5QzFEQzQ5N0UyODA0RUM2MjcyMzQwCi06MTA2RDEwMDA1RjM0RTdFQkVBNDIzMUY2Nzk1Q0VDRjMzMkY2Nzg3OEVGCi06MTA2RDIwMDBFNEY3QjNDNzBGODlGRTFBN0IxQ0VENkQ0RkQ0RkQ0NjA3Ci06MTA2RDMwMDAyNDhDNzZCNjI3ODYzRDdFNDIxMkYxMDU5MTI3NzRDMkQ3Ci06MTA2RDQwMDBFMERDRDUwRDc4MzkzMTM5OTlCRTk3NTY5MEMwRUY1REFBCi06MTA2RDUwMDA0RUEwN0Y1MjA2N0VDOEFCQTdGM0QxN0U5OTJERjU3RjVBCi06MTA2RDYwMDAxNzQ5Rjg0MzhDNjBGMDQ3RkUwNUY5NjIwRUYzQkZCNjkxCi06MTA2RDcwMDA0ODIyM0VFMkY3MzU3ODFCOUY3RUU1NzNERTM2OTJEMURFCi06MTA2RDgwMDBCQTM2QzBGOUUxRkQ0NkRCQzVGOTMzNjJERDY3QTQ4RTkyCi06MTA2RDkwMDA1MkZEMzc1MDY1MTFFRjEzMzMzQzlEODhGQkFDNDFGNzMyCi06MTA2REEwMDA3NDUxRjc3Mjc4NkREMzlGNzdBQzFGRENGRjg2NzJFRDVDCi06MTA2REIwMDBCREQ5ODY4QjNDMkU2MjVBQzI0MjhGNEI5ODk3QUE2REUyCi06MTA2REMwMDBCRkE5Q0UxMDdEMkZBOEI5NEZCQkQ5NkI4ODVFMEY3REIwCi06MTA2REQwMDAxN0Q0MjFENjlCREQ3MTFGRERCRjRGQ0RFNkY5NDRBNjQ4Ci06MTA2REUwMDA2NThDRTIwNEQxRjc2REE2QjE1RDFFM0REQUNGMEQ4QzQ2Ci06MTA2REYwMDBFQ0ZERTgzODM5RTZBOTUyRkNCMDgxQjEyRDEyRTU3OUY1Ci06MTA2RTAwMDA2QkRGNzM3OUE2RkU3M0ZFN0Q5NEQ2M0E5Q0M3MEU3NjJGCi06MTA2RTEwMDAxMERBRDNEMUVGNDlBOEY3NUFFQUY3NTE1NTNDQUJERjY2Ci06MTA2RTIwMDA4RjRBQkY0RDQ3RUI2M0MxMjlENEFFQzZGREYxN0JCODk1Ci06MTA2RTMwMDA1NUU5MTFGOUU0MkI1ODdGN0Y3QTdGMkIxODdCREY5Qjc0Ci06MTA2RTQwMDBEQkVBMjlDRjIwNzNCQzdGNkMxODlBQjIxNDQ2NzhDODRECi06MTA2RTUwMDA1QUM4Qzg2RjAwM0M2OEYyMDk0Q0Q5REI2OTlGRTcxNjM1Ci06MTA2RTYwMDAzMzM2NEMyMjNDNjhEQTMzNDBEM0QzRkRDMDQyNkQ3RUNBCi06MTA2RTcwMDAwMUVDNTMwMzQ3RkJBQjU3RjI1MzRERDlGOTk3OTVGMzA4Ci06MTA2RTgwMDA1NzhBNjM5QUM0QkRFNDk0NTFFMkZCOTdBNUFDMTRFRDE0Ci06MTA2RTkwMDBBMkY0REI5RUExRjMzODA3RTc4MTcxNUY3NDlDNjJERDg5Ci06MTA2RUEwMDAzQjZFODJGMUQxOEZGQzc3QzEyRkNERTI2RTVCRkRBRUUwCi06MTA2RUIwMDAwRkYzQzhGNDFFOUI1NENFRDcyQzBERjNGMjdCRTkxMkNFCi06MTA2RUMwMDA0NjdDNkU4QTY3NjZDQzhGOTcyQTRDMUVDNEJCQzkwNDY5Ci06MTA2RUQwMDAzMDZDNTkzMjMyNzMwNkQ0RUI0NTNDN0I4REM0NjQ4NEVDCi06MTA2RUUwMDA5OTU1MzFGM0Y4QTNGQTVEQTExMDdENTc2OEE4NzlENEJDCi06MTA2RUYwMDBFRjJCQjIyMDdGNEU5RDY3RDA3N0Y1MkVGMzNDRjk3QkM4Ci06MTA2RjAwMDBENkU4RTc2QjI5OUVBOUNFM0YxNEZFODdGQThFREVCRjM2Ci06MTA2RjEwMDBENUJDMzc4MUM3NTMxRDQ0QUY4RDAzRjQ0QUYwN0M0MTgzCi06MTA2RjIwMDA4RkY4M0NDQTg1QkJENTY2N0I1NzI5RkEwRjY3MUU0Qzg0Ci06MTA2RjMwMDA1MDM2NEExMUZCMDhDRUQyRjNFRjAzN0VCRkYxRkFEN0U5Ci06MTA2RjQwMDA2MTc3OTJCQ0VGREY5NzE4RUZGQkVFOEJGRTIyRTREQTVECi06MTA2RjUwMDAzQTdDNTkwOUYzNUUxQTE5RTUzMUE0RkJBQTNGOTcyOTM3Ci06MTA2RjYwMDBGRjAwRjZBMDkxMTMxMURGNDk4MEYxRDYzRENFRUYxRjRGCi06MTA2RjcwMDAzNkUzNzczRUYwRkVFN0MwNDBGRUVEMTMxNjZDRjdEMTI2Ci06MTA2RjgwMDA3NzM2RDRCQzVDQ0NBMzVENUIzMkYwM0U3MkY0N0Q4MzdCCi06MTA2RjkwMDBCRDExQzY4OTk4NkZCMjk5MDUxMzQwOUZBNEY0MzEwNUJECi06MTA2RkEwMDBCRkYzRUNCOTY4NTRBNjAzN0U2QzdEQTA1MDAxQkY5MzdCCi06MTA2RkIwMDA5OTg5RUVBNTJBQUQ3RTMzRkYwRUUxMEExNjY5NjdFRkM3Ci06MTA2RkMwMDA5NzZFQTVFRkJEODZCRjY0OTRCRjE0M0VDRjg4RUVDMzE1Ci06MTA2RkQwMDA5RkMzQzQ3MDJFRkZGOERERkI3QUU0Q0JBOTdENUQ3QUY4Ci06MTA2RkUwMDBENEYzOTNGQkZDQTQ3RkY2RDk0RjNERURFMkU3NjI5OTIxCi06MTA2RkYwMDAxMTkxMUY3NTFENUI1NENGRTk4QTlGOTcyQ0VBMjc1RjdCCi06MTA3MDAwMDAzMDZBRjhGRERBNUVBMzQ2MUVDODE3NUJCRTQ2RkQ2NTEyCi06MTA3MDEwMDBFQTg5QUE2N0QzM0ZFM0UzRjkyOERFMkREQkI1RUQ1MzE4Ci06MTA3MDIwMDA0NDNFRDBEQjJBREY1RkMzQUVBMTczQkM5ODE2MzNDRkRBCi06MTA3MDMwMDA2RUUwRENENTczNkVFMjcxNzRDNkM3Nzk2RTk0Rjc5RjBCCi06MTA3MDQwMDA0NjRENDBGRkMwNDc3MUU4NjRDNDJGRDgxNzI5OTVERDJECi06MTA3MDUwMDBDQzhFNzk1OEU1NEM5OThFNzJCREIyRjMxREE0ODdFNEFECi06MTA3MDYwMDBCMzNDMEYzQzdBRkNGRDVGQkU5NTg1N0VDMzlFQzk5REY3Ci06MTA3MDcwMDA1OTY4MkZFREY5RjIxNTNEOEU1N0Q1RDNDQkIwM0UxOTk3Ci06MTA3MDgwMDA0QTFFQTQ1ODRDNzhBQTEwQjQzMzUwQ0ZFMzQ0OTFGNTZCCi06MTA3MDkwMDBCNDlFNEFFNzY1RTVFNENGNTA0RTFBODc2RURGMzNEOUQ4Ci06MTA3MEEwMDBDMkMyRTQ4Nzc1MjZBMDNEQzc3QzdDRkU2NEIzQ0E1Nzg0Ci06MTA3MEIwMDBFQzJGOTc3MDVFODQ4MTlGRjY1NEVBNTI2QTYxOUY3QjQxCi06MTA3MEMwMDA5RTkxMTU2Q0RDRDNGMzQ2MDJDRUJGRTdFQzM5Q0Q3QTQ2Ci06MTA3MEQwMDA5OEZFMjJGMzQ1QUNGQjVBNzFFRTUzMkI3QkM5RkU3RTIyCi06MTA3MEUwMDA0QUFDMkJGOTZDMkZDNUExNTM5NURFMzBFQURCRDRDMzMzCi06MTA3MEYwMDA3QUZBRkUzN0IzRjBCQ0M4NjE0Q0ExMzg5QUJBNUVGQzhDCi06MTA3MTAwMDA2RTJBM0VENzgyNzJERTg4RkJCMzMyNTYyOEVDN0UyODg4Ci06MTA3MTEwMDAzMzJBODM1NTk4OEY5QUNDNzY0QTQ4NkI1MzJCN0Q0MUZFCi06MTA3MTIwMDBBNEU3RTRBNTlDOUU5M0FERkVDMzE4QkY0RjVFQUZBMzNBCi06MTA3MTMwMDAzODQ1RjI1OURGMDZGNENCOTJDQjY1MDVDOUU0NEFGODJECi06MTA3MTQwMDBFQzEwRjNCNzhBRjlENEY5RDVGNThDQThGNDRCRTg3RUE2Ci06MTA3MTUwMDAyNEIzRTM2MkZFQUUyQTEzOEVCRjVBQ0NFRjE0RUI1OTcwCi06MTA3MTYwMDBDNUU4M0IyQ0M5NjdBRDU1RTgyRjI3ODM5RDQxREYzMzI4Ci06MTA3MTcwMDBCOEUyNzk5QTM1RjM0NUI3Mjc0RkQ5OTk0NUU3RTBCMTk5Ci06MTA3MTgwMDAxRUQ5MEFFM0E1NjQ1QjM2NTQ0MUI5Q0VBMTIzRkYzMjcwCi06MTA3MTkwMDBBOTg3NTEzQzNEQTkyNzlERTQ3RDUyNEZBMTI4Mjc4QTBDCi06MTA3MUEwMDBGQTY5NDIwRjcwMzk5M0Q0RjM1MDJEQUY2RkExRDJBNDc2Ci06MTA3MUIwMDBDQTE3ODczRjhDRkI5OERBQ0JCODdDNzE3ODQ5QkU5OEE4Ci06MTA3MUMwMDBEMkI4N0M1MUU5Qjg1Njk1MkJDQzVBMzIxRkVBRjcwRjRBCi06MTA3MUQwMDBGRkFDQjUwNjlFN0JGNzczRkVGRUU1QkJEOTVDQkVCQzdCCi06MTA3MUUwMDBGQjI1RjdGQjRENjlCRkQzQTM1Q0FBNDJDMzA1RkE0RDRCCi06MTA3MUYwMDBCQkMwRUQzMzk1MUZBQkJBMjUzNjExNDg2MzlBODNFN0MwCi06MTA3MjAwMDA4NzFGQkFDODlGM0I4NEQ5RDUwMEFGNjMxMkM5Mjk5NTlGCi06MTA3MjEwMDA2RTZCMDVEREFFQjNFQTgzNDlEOEZFODE4OURFNzczNDMzCi06MTA3MjIwMDAzOUNFRTU5OEMxMUVGRTgzQUVGNzQxN0NFRkY4RjczMzA3Ci06MTA3MjMwMDA3QUVGNUQ0MUY1ODI3RTQzNEI0OTJFOUE4NDZDMzlFNEE2Ci06MTA3MjQwMDA1ODYwNDEzRTg0Nzk0OEFFMUU3MjE4RTlCQzBFMDgzQTc3Ci06MTA3MjUwMDAzRTY3QUZFOTA4QzMzRjVCQ0NERkZDNjkzRUQ0RkZDMUFBCi06MTA3MjYwMDA5RUVCNDA5MzRDM0Q5NzFFNDEyRjVGODhGMzNCMkJFOEVDCi06MTA3MjcwMDBBNjI5REQ3QjUzQzkwNEZDRkU2MjFFQ0Q3QkNFRkUwRDJDCi06MTA3MjgwMDBCRDdGQjJEQ0Y2MUY5RkM2RkEyRUE3M0E4RUZBN0M0RjVFCi06MTA3MjkwMDA2OEE1MTlDRkY1RDA5QjFGOUY0MEI0QUJFMzVGMjM3QjVDCi06MTA3MkEwMDBFRkU0RTM3RTMzOUFGOEQwMTIzQkNGNzg5MEZDRjNBRDU1Ci06MTA3MkIwMDA4ODk2N0Y4QjRBODYwRkM4QkY3QTY2OTE3OTFFMTJFNzNGCi06MTA3MkMwMDBFQjU5NDIxRTRENTVCOERENUU2RkU1RTc1NTVGQjI1Rjg1Ci06MTA3MkQwMDBBNkZFOEE4QkY2NTVBRkQyOERGMkU0NUFFNDdGOUJGMjdDCi06MTA3MkUwMDAyNEQxNEI3RDNFQTc5N0JEODI5RTBGMEE3Q0NFRUM2M0Q2Ci06MTA3MkYwMDA5REU4OTdFRDJGOTg2RTE5MEJGODNFRTJEMjEzRkYxQzE0Ci06MTA3MzAwMDAxOUJCQzY1MjA2Q0YxRDI5OTVGMDRCMDI2QzdBQzlENjFGCi06MTA3MzEwMDBCNUE5MDBDRjUyMjRBMkE3RkE5MkFEMUQ0REQwN0Y5NkY5Ci06MTA3MzIwMDAzNTQxQTkwM0Y4RThGOUIzMTYzNEFGMEUwNUJDODQ5N0NDCi06MTA3MzMwMDBFOTcyRjhFMzU0MTc5RTFCQzdEM0NDQ0FCMDhDRkU0RjNBCi06MTA3MzQwMDBCRDYzQkY4Q0ZBRjY2REM0QUIxMUUzMkUxRUMxNjc3NTI5Ci06MTA3MzUwMDAwNDFGNTc2QTJDQjg4RjIzQTUyNjIxMkYzREUzNTE1RUM5Ci06MTA3MzYwMDBDRUNBMzdENThGQTE3NTdDN0Q2QzRDMUFCRTc3NkY1MDE1Ci06MTA3MzcwMDBGODk1M0NBN0ZGQzk4MjdFRUFDQzI3NkI1M0EwREZDQ0VGCi06MTA3MzgwMDA5MjY2MTlENzdCRDQyQzkxRkMzQ0RBRDc0NEY5OTNDNzg5Ci06MTA3MzkwMDAzQjM5QUNEMjJEM0QwNzc0NzlCQzZGNUI3MzEyQjY2RjZECi06MTA3M0EwMDA5NzQ4M0VENTJCMkYxREUyRUE4RkQzQTczQTdFMEYwQkNECi06MTA3M0IwMDBCNkUxNzczMENGMjlBRkI3NjAzRUY1QjFCRTA1Q0ZDQzhGCi06MTA3M0MwMDAwMTNDMUM3RjUzM0ZDNEI4NEQxRkFEQzA3MURGNEMyNDNFCi06MTA3M0QwMDAzQTlFNkQzNTY5RjRCMThDNEU2OTg0NUVBRDFFNkZEM0YzCi06MTA3M0UwMDBDMEY1NEEwREM1RDNDRjI5OTJFNTA2NzhERUYzNURBRDMxCi06MTA3M0YwMDA3QjM5OTFEMTUyREE3N0JERTg3QjRDRTE3Qzc5Q0NBMTI1Ci06MTA3NDAwMDAyM0JFM0NENkY3Qjg5QzhBRjA1OTQ2RkI5MTk5NzZERUFDCi06MTA3NDEwMDBGQTkyMUFCMkFGQ0UyOTVCRjU0NDY3ODIwRkQ1RjE1NEM4Ci06MTA3NDIwMDAzQTNFOEE0RjIzMUVFRDlDRkY4RkY2NkRCMzIwQkQxREEzCi06MTA3NDMwMDA3NUJGMjNFMzM5NUQ2Nzg5MUE1N0QwQTFBQURGRjA1REQ0Ci06MTA3NDQwMDA3MUE0OUZEQTUxRkJGMzdFODZFQjUxMzhGRTZCOTRENzIzCi06MTA3NDUwMDA4RjIzN0RENTNCNjRBMkE3QTNDQUZFOUExNDg2QkYyN0JCCi06MTA3NDYwMDA2MkQyRUNGRkZFMURDOTlBRjE5Nzc1REEzNDcwQjQ1REYzCi06MTA3NDcwMDBCNUNGRkREQkE3Q0JDNDBFNjZBNDQ3RDg0N0Y5QzIzRTAzCi06MTA3NDgwMDBEMjFGNzdFMEZBQUU2ODE3MjlFQkU4Rjc0OTA2RDk0NTJECi06MTA3NDkwMDBGOURDMkU4QUI2ODc1NEJFNkVENjg5QjhBQzhFQzc2NTI1Ci06MTA3NEEwMDBBM0Y5REY1OEZBQzNFRUYxRDgyQTQ5OEVCQ0JGNUJDNkY4Ci06MTA3NEIwMDBCQTczOTBCRUU2QTMxMjg2RjExRUQwNzVBNzIzRkMxNTAxCi06MTA3NEMwMDBFQjZEOEIwNzM5N0NBRENDNzY2OUJGQkZDQUJGMzczRjQ4Ci06MTA3NEQwMDBCRUQ0NzcxRUU1OTU3NDM2NENERjYxNjVBQjE4RTUwN0MxCi06MTA3NEUwMDBFODZCNzg5RTExNUU2NkFEODhENDhCMjVGREYxMkQ4REZECi06MTA3NEYwMDA1REE0NEJEODlCODU3OEFDMzg2QkU0RjE4RjlFRTgzODVGCi06MTA3NTAwMDA5N0VBMUY4NTI1RjIyQkFFNTIyRUVBOTNGOUI4N0JFNjU3Ci06MTA3NTEwMDBGMDc4Njc3Rjc5MzM4RjkzMTUwOUZDRTU5NDFBNjk1RERDCi06MTA3NTIwMDA4QTgwRjdEQzE2RkI5RUI1QTQ1NEZBNDFGOUEyREYwNzY2Ci06MTA3NTMwMDBERjI5ODBFRkFGOTBFNjYxOUUzRDU1QjFENzkxNTJDQUU5Ci06MTA3NTQwMDBFM0I1Nzc5Nzc4RjI0QUExMkMyQUYxMTU5NjIyNUUzRDkxCi06MTA3NTUwMDA2MDVGRDM3N0M1M0Q2NDlGQTlFM0JDMzNDQUUzMTZGREUyCi06MTA3NTYwMDA0NjYxQzlCQ0RDMEU4RkVFMDdFRDYzNjg5Qzg2RDhFM0VDCi06MTA3NTcwMDA0MEZCMzg3QTdFNkVFQ0Y2NDNCODM5RkM3RDIzRkIzMDU1Ci06MTA3NTgwMDBEMjQzMDYwQzY0QTZGMjUyMkFFM0U1MTZGQUFFNDY4ODA4Ci06MTA3NTkwMDBGQkU3MEQxRUQyRjM0NjkxQUY4ODM3MTA5MUZDQzdGNDdDCi06MTA3NUEwMDBGNTM0QkUxQzlFNDFGNzU4MkREODI1ODNGQkY5OTE3NjAyCi06MTA3NUIwMDA5NEFDODQ2QTIyRTNBRDZBQjlBODk0REY3M0NFMjgxNTJGCi06MTA3NUMwMDBFRkYzNEM2MDEzQzhBRkE4QkNGQzNDRUFGMzQzQ0RDMzU3Ci06MTA3NUQwMDBFQzY1NTdDODdCNUVGMzYzRDM0OUZBQzNFNDI3NUZBNTI0Ci06MTA3NUUwMDA3RDYwMEU0QTkxREYzOTFGNkFCRjg5NEE5NDFDOEFDMkE2Ci06MTA3NUYwMDBEMzUwRjM1Q0VENzlEQzIyRThGNjZBRDc1RDY1N0FDQzhFCi06MTA3NjAwMDA0RUY5RDEyRUNFMDc2QjA1N0RGNURCRDUzRjFFM0ZCRTczCi06MTA3NjEwMDAzRjFGODZGRUNBRDlGQkZFOTNGODdFNEE0MjY4QTUzNzEzCi06MTA3NjIwMDBDNjdFNUUxNEZCRjkzMUU1QzFEMzcwQ0UxQjhDQTFGQjg1Ci06MTA3NjMwMDBEMURFOTkwN0E3NjMwMkQyN0JDN0YyRjFGMDA1QjA5RUI1Ci06MTA3NjQwMDAzN0M1RkMyRDk2OTVFQjZGODU0NzVCMUNCQTk4RjkxRUU0Ci06MTA3NjUwMDA2RkZFNzg3QUEyMEQzRkQ5RkY5NUUzRENGQjZEMjBBNzgyCi06MTA3NjYwMDA1QjFFN0REMEFDQjA4MTc1MzA2QkQ5MTVDRUY5NDdFMzg4Ci06MTA3NjcwMDAxMzc1NUQ2RDVCMzA1RTYyNERCREFBRjcxNDVBNUNBRjQ5Ci06MTA3NjgwMDAyNEUwN0Q2OUVERTc0RDc2RkMwRTQ2QjQzREEwQzY0MzhGCi06MTA3NjkwMDA1NEJEQTVDNjRENTRCQkE0QzJDMUUzMUYzM0VERkM3QjUyCi06MTA3NkEwMDAzRDE1RjY2OUE0REYwRkIyQUUxQUYyQUYzMDNCNkQyMjgyCi06MTA3NkIwMDBCMTBBRkQxOURENUFGQkU0M0FCRjU3NDYzQjJBREE5RTcwCi06MTA3NkMwMDBBODREMzM0NUQ5MDdCRDdBOTRERjE1MTdCNUZENTRGRTkzCi06MTA3NkQwMDBGOEFDNTRDNDUxNTQ3OTE3NjU0NzlBQ0Y5RjQ5NDBCQkMxCi06MTA3NkUwMDBFQkVEMEI2NzI4MkUxNDhEOUZFQjJFNUNERTlGQkRBRTVECi06MTA3NkYwMDA1RDRGRjc4M0QxNzFBREI3MkZFNEQyRkRBMDExQUYxQjYxCi06MTA3NzAwMDBDMUQ0Q0FDQzNGQzQ4QzgwOTc0QzdCNkI5NTExRUMxOENDCi06MTA3NzEwMDBBMzgzMjlGOEREMzZGQzU4MzNDNjBEOEQxNzc4OUM3QzgxCi06MTA3NzIwMDA4NDlERkJENzg5OEJDMTJGODU1MTMzOTVBMDdEQzE3ODZFCi06MTA3NzMwMDA3Q0NFNDhFRkQzOTk1REVGOTFCREJEMDlFQTg2MjE5RUNECi06MTA3NzQwMDBDNzlFMTlBNjhCMTEwNzUzQ0Y2MzhBQzBFRjZFRTZCN0E5Ci06MTA3NzUwMDBFM0VGODE0REIxOEJGN0Y3MkU0NkRCNTlGQzNDMkRBMkIwCi06MTA3NzYwMDA3RkUyNjIyRDNFMkRFMjNDMjc4MzVCNDNERjc5RUNEMzQxCi06MTA3NzcwMDAzRTZGMTFFNzZCNTkxQUZCMUNFQ0EzNjM5RjQzQTI3QTdGCi06MTA3NzgwMDAwRTEzQjZDNUUxMzk2QzU5QkM0RDhBNzUwRTk5OEIyRjE1Ci06MTA3NzkwMDA3RjBFNUI4NDVGQTlEMkVGQjRBQzA0QjJBRkY3QTZFODZBCi06MTA3N0EwMDBFOEZCNDE3QjEzQzM1OUNCMzFGRUZEQjI5OURFQ0ZBQzcwCi06MTA3N0IwMDAxMDcxMzZCNEE0MTA5RjZCQjc5N0JGODQ3MURCNzFBM0FGCi06MTA3N0MwMDBGNTc0OEU3QjI1RDFGRkJDOEVGRkZFNjBDRjc4RUExRjVCCi06MTA3N0QwMDAyN0IzODNGOEJCODAwN0ZCQUFFOUJCMUJEMUZDQkJEMzUzCi06MTA3N0UwMDA3QTAwREQzM0I2Q0VCOTNENkIwMTlDODMyNUZCODA5OUQxCi06MTA3N0YwMDBGQjlCODNDRjA3RUYzRjRBMDVCRTRCN0JGOEI5NTRBNkVFCi06MTA3ODAwMDA5REQ0QTNCRDVFRjI2NkVDRjM1MUUzOEY3QkE0OUQzQTU5Ci06MTA3ODEwMDAyMDJCMzZBQUFGOEJGQzk4OTEzQkEzRUNFOUIzMkQ2NEU3Ci06MTA3ODIwMDA2NzVCQzY0N0Q1RjdDMDM5RDFCRDhFOUZFQzE2RDlBMThECi06MTA3ODMwMDAzREFGRUI4NzM4QTc0QTExODczMDdGN0Q4QUUyNjVGQjMxCi06MTA3ODQwMDBGQTRFNzE3RUU5RDFDNjI1MjdGNzVERkU5QzVFMTNFN0VGCi06MTA3ODUwMDBCNDUzQzRBMTdFMkVFMjAwOURDMjdGN0UyM0UwQTRGMjM5Ci06MTA3ODYwMDBDRDgwOUJFQURGMEEyODA0RUYwQTk0MEI2MUMxQ0Y3NzMxCi06MTA3ODcwMDA1NjNFQ0I0NzE3QUZBQTg0RkJFRDQ3Q0Y3M0JGN0Q3RjQyCi06MTA3ODgwMDA2MkE4ODNCRUVGNzRERTQyREYxN0E0QkQ0RDE0QkZEQkQ4Ci06MTA3ODkwMDAwNzdDNzIyQ0NFNDlCRjFGNzgzNERCNENGMUIzQTNBNTEzCi06MTA3OEEwMDBCRkZCN0I4QUJCN0M2QkQxRjFCODBCQzdCMzdBNEVFQkM1Ci06MTA3OEIwMDA3MDRFMTg2RjVEODU4QkVFQTUzNkUwNDcxNEExRkZFRTg0Ci06MTA3OEMwMDAzMjg5QkVGRjM0MUIwRTA0RUY0NTU0M0EzN0Y1NjlGMTk3Ci06MTA3OEQwMDA1OTBGRkY2NTk1RjFERjFEQzg0MjdGNjE4QzhCRThBNENECi06MTA3OEUwMDA0MkVGNzMyMjNFMzdCQTRGOTE1RjFFNTdEOEVFMUI4Nzg3Ci06MTA3OEYwMDA3MTgwRjE3QTI2QkVGQjE0MzQ0NUFDM0IwRTZGNDJFMDNBCi06MTA3OTAwMDA3OTUzODk0NERGNzMxQTBBQkZEMUU1ODY1NEFFMkZBMzk5Ci06MTA3OTEwMDBFQkZGNzUzNEQ3ODMxQkREREJFODNDNzczQkJBQjI1MDE1Ci06MTA3OTIwMDBBRkVGMTNGOTEwQjM2NDI5NDhCRjVGMjg3N0REQjExQ0FFCi06MTA3OTMwMDBGNjVCOTE2NTFGQkIxMUMwMkRBMzUzNjhGREZCNEE0RjM5Ci06MTA3OTQwMDA1MzFDRjhEODg1NTdDNjIxRkQxREIzNzY1QTMwQ0U3OTIxCi06MTA3OTUwMDBDQ0M5REY1Mzg3MTM5NUY5N0JCNzlERjIyRDMxRjJBNDgzCi06MTA3OTYwMDBENUYyNThFOTIyRkFGRDk1N0ZGQzdDRUZEQUQxN0NERjc1Ci06MTA3OTcwMDA0QzUyRjUwQThDNUI4MUZCNEQ0MkY5REVCMjAyRjlDMzMxCi06MTA3OTgwMDA5OEI5ODNGQ0NDRTg3M0FBNzA1RkIzODhERUYzNjRGQzFCCi06MTA3OTkwMDA3QjRGQkZCNjg2MkM3ODNGMUNFRDY3MDI3RDZDNDJGRkEzCi06MTA3OUEwMDA3OEY3MDQzRDdEQUZBRDVFRTZFNzgyRTc4OEU3QTQxRjg4Ci06MTA3OUIwMDBBMzEzN0U5OTc2N0M2NjY1M0U2M0ZBQzA3OTYwMURERTBFCi06MTA3OUMwMDBEN0QwM0FGMTNFQUFFRkFEQkY5MjYyRjhCNTgzRDZDOURGCi06MTA3OUQwMDBGQzlFNThGOUIwRDFDRkNENzZCMjIwOUE4NkIzMTUxNjU5Ci06MTA3OUUwMDA3NkExOUY3MDMwOUZDNjk5NkRFNUUzQ0MxMjcxN0M5QkE4Ci06MTA3OUYwMDBBMEZGNTkxNzc1OTRERjgxRjRENjgwQ0Y5NUNDMjc3OUY1Ci06MTA3QTAwMDA3MkNDRjU1MDU3MURBQ0I3MUVDRUM2NDFGRTQ2OTM1NkZDCi06MTA3QTEwMDAwRTA5Mzk1QjVGNTI0NUY3QkRDN0RDMDdDNkEzQkVCRjgxCi06MTA3QTIwMDBCRTc0RTVFMTMyMjdDMjlGRDQ1NDQxQjcyOUE1MkZENUIyCi06MTA3QTMwMDAyMDVENUE5NDJFOEEyRjRDNzZDQjc0NUQ3ODdEQjkzNkIyCi06MTA3QTQwMDA0RUQxQUYxN0EzRjQ0QkI0QkVBODhGOTIzQjExRjc1NDlECi06MTA3QTUwMDA0RTQzQzRGOUNGNzI5RjRCODhBNDgzQUJDN0NCMUMyRjc2Ci06MTA3QTYwMDA3RUFGN0JENjA1MUVBNzFEOEM5N0Y3RTk3M0E1MDM3ODFCCi06MTA3QTcwMDA4OTNFRUZEODc4ODkzRUE3MDEzQ0FERUFBQUNCMUQ4Q0EwCi06MTA3QTgwMDA1RjE1NkZCRjJFNzlDOTFBOTlFNzFCOERCNzFGOEFBRjkzCi06MTA3QTkwMDBFNkQxNTY0MUFGNUM5RTU3MDhCRTdEM0IzQjQ0NzFCNzczCi06MTA3QUEwMDBCNzRCRjlFRjRCMUQ3M0ZGOTZFMkJGQjM1OEE4NjMwREI4Ci06MTA3QUIwMDBDQTQ1RTBDQjM5NDJGOUU4MjNFNDRDMzQxRTA2RjhGNDE5Ci06MTA3QUMwMDAzRjI4MkVCRkZCRjNCNzI4MkVBQUNBMjExM0YyMjVFQUJFCi06MTA3QUQwMDAxM0MxMUZFQUI5OTk5MDFGOTE2RjJGRjBFRjg3NUUyREE4Ci06MTA3QUUwMDA3RkE4N0M0NUVCMjEzRjM4QTQ4RkNDMUZGQ0RGQzU1RjBFCi06MTA3QUYwMDA3QjcxQ0QxODE3NzYxNjUyM0NCOENBRDFBNUM3N0JBQzlFCi06MTA3QjAwMDBDOTUwRDIzRDkyODg3RkQyM0E5QzkxRjUzQzZFMUM1OTY3Ci06MTA3QjEwMDA0RjcxMkZBMUY3RDRCOEE2REFCRTNFQkIyQjQxMTg1NTQyCi06MTA3QjIwMDBBNDQ3NERDMkRFNTFGREM0N0Q4RTUzNjQ3RkFBRkE1NDMyCi06MTA3QjMwMDAxNkY3RkU1N0FCNEZGNzA4N0QzQTU0RkJERTczQkI3OTVGCi06MTA3QjQwMDBEQ0U3Q0I0MzNEMEY4MDFDOUY5QzZGQTRFRkI4NEMwRTJECi06MTA3QjUwMDAzRkNDREZBMzcwODQ0OUZFNkY3NDM3OTExRjBDRkI2OTIzCi06MTA3QjYwMDA0NkEzMDRFNjc1NDRFNkYzQTlFNUJFRjM2RDBBRDZFRjM1Ci06MTA3QjcwMDA5NUJCRjQwQUY1MDdGRjE2RTAwMzg2NTZGQTlEODYwREJECi06MTA3QjgwMDA4RjczN0QxMzU3RjQ1MUQ2RTVERTgzQkFCMzRGOTlFNjcwCi06MTA3QjkwMDA0QUMyRUY2MTZGNUY4M0RGMDEwQjJBOENCRUVCOThCNUExCi06MTA3QkEwMDBCNDhCNDVFRUY3QTUzMURDQUY5RDlDRkZENjFEMDc2ODcxCi06MTA3QkIwMDBERDFGRUE2OURENjg1NzAzOUQ0Rjk2OUQwRTA1RTdDRkVGCi06MTA3QkMwMDBGNkRCMjNGREVDN0REOUY3REE5RDAwQjc3QzY5NkMwODA0Ci06MTA3QkQwMDBEMTdBQzNBMzdFMDFGM0VDMzM1NzhEMDc0QjhERUQ3MzQwCi06MTA3QkUwMDAxRjE4RjUwQkMwQzc0NjczRDUwNENDQTNBQ0I2REZEQkJBCi06MTA3QkYwMDAzRTFGRTVEQUQ5NUIyNjYwRkMxQkVDQkM1NkQ0Qjc4MzhDCi06MTA3QzAwMDBGNkRGQjdDRDhDQkYzQjVERUQ3ODlGRDYzMUEyQUZBQjMxCi06MTA3QzEwMDAwNkJGQkY1QUVERTBGNzQ4QkVEMUJFODdDNjRDNDA3QkQ5Ci06MTA3QzIwMDAzOUVDQzE3MzRGMzQ5RjBDMjJERDRDMTZFQjY1MTcyRkQ2Ci06MTA3QzMwMDA1MUZDNDFCRDk3RDk3MzlFRDM0N0ZGRjg0MDBGQjg4RkQxCi06MTA3QzQwMDA2QkJGNUM0NUY3MjJCOTdEQkFGOTI2QTBENTc1N0QzQzlFCi06MTA3QzUwMDA3RjBDREJGMTdCRTA1OEJGMjg4NjFEMDBGMzVDRTc0QjBGCi06MTA3QzYwMDBDNkYzRUJDQUJBMzc4NkRFQ0RFREZCMzZFMDgzRTdGNjI2Ci06MTA3QzcwMDA2NDcwQkM0NEI3NkYxRUMzRUQ4MkI4QUZERUNGNzI5MkEyCi06MTA3QzgwMDAzREMwRjU3RkIwQzAxMkYzM0I1NUI3QTlGQUQyMUEzQkZECi06MTA3QzkwMDAwRjQ1MkQ1NTc5QTVEQTIzODA1RkIzMjEwMkJGOUJDNjFFCi06MTA3Q0EwMDA3MEZGRkQ3Q0E5QTcwM0YxRjc3REU3N0YwQTcxMEJFNTYzCi06MTA3Q0IwMDBGMTUyQ0ZGNjMxQzM5MUFFMDQ1RkFEOTc2M0M2MDFFRUNBCi06MTA3Q0MwMDAxQ0YzQTNDNTJCNkU0MTEzRUZBQkJFNzNFOTZGRTk4NkJFCi06MTA3Q0QwMDBBNkRCNDE3NDY1NTBFOUY4MjFBMkUzRkY4QkY0N0JFMjU3Ci06MTA3Q0UwMDBGQkQwRUYyMDc5NzRGRTE0RERDMzQ3RDNCMTRBQkYwMzQ0Ci06MTA3Q0YwMDA3NEM4RTY5QjkyMDZFODc5MjhCQUMxN0U4QjkyMDZFOEEyCi06MTA3RDAwMDA3QUE4N0VGQkNFQkYxRjkzREUwN0M2RTlCRDJDRERBQjk0Ci06MTA3RDEwMDBGNEI3NTlEMDkxN0EwRjU0MjlDRTc5RkRENzhDRUNGRTY3Ci06MTA3RDIwMDBBMzNENDZGNTc3QzYzNTdFMTFFODNGQ0FBM0FFQjA3MkQzCi06MTA3RDMwMDBCOTdGQjQzNzk3RkIxOTNENjZCQTlGOUFFOTVFMjlCRUIxCi06MTA3RDQwMDBCQjBENUQyM0M2QUQxMUYyN0VBNkRCNzU1OTM5QUZFQUQ2Ci06MTA3RDUwMDAwQjU1REZGRDRGN0M3NzQzOTgwMDgwMDAwMDAwMDAwMDRBCi06MTA3RDYwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRkVEN0QwQjc0NTRDNzVFCi06MTA3RDcwMDA5NTYwQkRFRUQ3M0ZBOTkxOUUzRTg4MTY5MkEwODVDMDIyCi06MTA3RDgwMDAxNjQ2NDBFQkZGMDUzRDdEMTAzMjFGQTdDMTE4MEI5MDMyCi06MTA3RDkwMDA0QzhCRTAwNDFCNDlERDYwRTI5MDNEOUVBMTMxMzIxMjI0Ci06MTA3REEwMDA5RkNENjIxRkNDNzg2NkJEMzkwRDAzOEM5REIxNzdDMDI1Ci06MTA3REIwMDA1NjFDNjEwQkRDRTIzNzM4NEJFQ0M2NzExODlDNEMzQzBFCi06MTA3REMwMDBDMjQzMDg2QzZDRDMxOEM3NDNCMjRBQkNGN0RFN0EwRkMzCi06MTA3REQwMDBGNTZCNzUwQkRCNDNFQkNDNjQ1N0U3NDBBOTVFQkRBQTlFCi06MTA3REUwMDBCQTc1RUJGRTZGRDVEMzdBMzM2M0NDQ0VEODE3Rjg1MzgwCi06MTA3REYwMDAzREJDQUMwODFBMTlDQjY1RjRGMzA1RkNEQkUyRjJFQkYxCi06MTA3RTAwMDAyNTJCNjNERkI5RUVDQkI0NDNGOTkzMkNERjBBNjcxRTUxCi06MTA3RTEwMDA2M0FGNUYzNUNBQUM4OEIxQUVBOUUzRjZFQUIzODdGQUJGCi06MTA3RTIwMDA4Rjc1MDg4QzE1NDM3QjEyNzQ4Njc2RUY1NEMxNzcwMEVBCi06MTA3RTMwMDAxRTMxRDEyNzJFOUQxRTdEREU5RjRDRkRBRUNEOTU4NzM4Ci06MTA3RTQwMDBCM0ZBMzI5RDYzNjg3QUFGM0U4REIxNTlGODlCMEVDQTgyCi06MTA3RTUwMDAyMDkzMkQzM0EwQ0NFRDVBQzcxMkEwQ0MyQ0Y5MzY5NjI2Ci06MTA3RTYwMDA0QzYyMkVCMTg0MzE5M0YyOUVFOUNBNkJERjE1RjAzOTcyCi06MTA3RTcwMDA5MzE5ODNGRUVCOTVGNTU2MzA3RjVEMERDMDMxQ0ZDQzY1Ci06MTA3RTgwMDBCQ0YxODkzODdBRDNDOUM5RDA1RUNEOTcwQUUzNjlEN0U2Ci06MTA3RTkwMDAxRERFOUZGRUE1MjlGM0U0MzAzNjJFNTdBMEY1Q0RGQjVECi06MTA3RUEwMDA4Q0Y5NENGMDZCNzU2RUVCMDIzNjAzRTc4NzcxQ0NEMTIxCi06MTA3RUIwMDBDN0E5NjAxRTk5RTkwMTFERTU1RURCMkFFODNGNkJBQUIwCi06MTA3RUMwMDBDOUUxRTVBRjRCRjhERTZDQzZERjFCM0VDRTdBQzY0QTkxCi06MTA3RUQwMDA4NkM2RDlFMjA5QzhGQTU0QzY4RTQ5NENFOTJGNUI2RkIxCi06MTA3RUUwMDBDMTY3RTdGOEMzN0E4NUIyM0U1MzZFQ0Q1NUM0Q0JFQjdDCi06MTA3RUYwMDA5MkM3RTEwNzc4NjcwRjg2OEQ2RjFEQ0I1ODNBNjM1NTlGCi06MTA3RjAwMDA5RjY5OUY4QjBFNkQ3RDM4NUMzMEZCNThGQUU1NEY1RkEzCi06MTA3RjEwMDBDMDdDNDYzM0M3OEYzOTVENDdGODc5NUQzMkZBOTAzRUIxCi06MTA3RjIwMDAyQUFFRDRFRTYyOTMxODRCOTZFQzg3RkNGMERDMkE5OUNCCi06MTA3RjMwMDAxRDNFMDUzNjMzRjY1MzdFQUZCODAyMDQwNEVEOUZDMkYyCi06MTA3RjQwMDBCRjE0ODA3MzlCNkVFRjVBMjdEMEREMTY2QzRDMUZBMkI2Ci06MTA3RjUwMDA5NzI1MEI0QzFBMzg5NjJFNDlENEQ0OUI5QUM3NjlFQUI4Ci06MTA3RjYwMDBDQjU3NEZENEVDNkY3M0RCREQ5QUZBNDMxQjY2NkFFQTlBCi06MTA3RjcwMDBBRTI3NEEzNUY1NTU5REQ1OUFGMTU2RUY5Q0FCNjlGRjcyCi06MTA3RjgwMDBENkVFNkY2OEVBNkI5RTdGNTA1MzdGNzRGRkNBMTFFOThCCi06MTA3RjkwMDAyMjFBNUY4OEI2OTFFOTg5NzkwNTNCRDJCRjg4NEQzQUFDCi06MTA3RkEwMDBGQ0NGQzU5Q0QzQTNGN0Y3MjE3RkMyN0VCRDZFQUZCN0QwCi06MTA3RkIwMDBBRDgyRkVENTU3M0Y4REU3RkRCNEY0QzVCQzcyMDBGOTI0Ci06MTA3RkMwMDBBMzU2RDkxNzk4QzcyQjQwN0I4RDUyQUQ5NUJFNDVGNDZCCi06MTA3RkQwMDA1RTYzMzY0NUU0MUI5NUVFQjYwQTU2MTFDN0FGNjZEQTA2Ci06MTA3RkUwMDBGREFBQjA2REJEQUU0NzdFMkUxQUQwRUI2MUJFNTkzN0VCCi06MTA3RkYwMDBCNUZDNTcyMTM1RkMwNkM3NjdDQ0FGQzdGNTg0Q0JBNUM4Ci06MTA4MDAwMDBGRkVFMTg5MzdBMzk5RTYwQjU3RjAxRkNDNEFDQzk4QzMxCi06MTA4MDEwMDA5NTQ3QzdBMzRBQTdCNzVEMzc2MzVGNkZERENBRkNFQTIwCi06MTA4MDIwMDA3QTJCNThBMDBFRTkzRURBQkE2NzNCRkM3QTkyNkI1MTg0Ci06MTA4MDMwMDBENjFEQkU1RTE1RkVFRjZGODY1RjgxRUY1RkZGMjNGM0Y3Ci06MTA4MDQwMDBFRDEzMTBEQkIyODhGQ0U2REY1REVCQ0ZCNTJCNDAwMjExCi06MTA4MDUwMDBCQzI3MTU3QUE4OTE4MjI3MTI4QjkwMEU5ODAzNjU4MzBFCi06MTA4MDYwMDA3MTkwRjk1MTBFRDQzM0MxNkY4NDUyOTYxQzA0QUYzODBECi06MTA4MDcwMDA2OEVGMzQzMDJBRUI3MTdFNzExMDg2QTZEMjQ1RUIzNTVECi06MTA4MDgwMDAwRUNBOEQyODZGNDUyQ0E5RUU5Q0M3RUI4RTA2NUU4NzI1Ci06MTA4MDkwMDBGN0E4MkVENUYyQkFFNzNFNUU4NzkyRUE1RTI3QUY0Mzk1Ci06MTA4MEEwMDAzRkFBRUY1QThDRjVDRUI4QzA4OTQ0MDFFQkJFMjU1OEUzCi06MTA4MEIwMDAzNzBFMUU1QUNBNEJGRjA1ODE0QTk5RTQ5NjM4RTg1RDhGCi06MTA4MEMwMDBBN0E3N0VFQzIyQUYwNzM3NzFGQUQwRjI4MzMxNUVGNkI0Ci06MTA4MEQwMDBGOUIzMTk1RjNEM0MzRjgxQkY0REMyRkQ1Q0Q3NkYwMEQ2Ci06MTA4MEUwMDAzQ0Q0OEE4MkMzMEVFRkQ1MEMzMjg3M0YxNUY3RDVFNDE2Ci06MTA4MEYwMDA5MEQ5OTdFMDMzQTAzMzMxNkQ4OENGOEMyQzk4QjE0QTVBCi06MTA4MTAwMDAyMDNFNzkwRkYxQURDQUVERTFFMzY4RTlBQjFFRjU1QTA3Ci06MTA4MTEwMDAwMUVDM0JGQ0JFMzExOUU1MzBBN0E3RkFCMkUwMTIyQzA2Ci06MTA4MTIwMDBGMUY5MTNEMDNFN0IzMkZDNEIxRTRFMUYyQTVDQTIzMjZCCi06MTA4MTMwMDA1RkE1QjU1RjhGQUFCNjMyMTgyNkI3NTkxN0QxNTk4NUYyCi06MTA4MTQwMDA3OTlEMkNEOTg3Q0I2RDcxNTBFNTJGMkUyRkMyRTE1NjJBCi06MTA4MTUwMDBFNUFEMzkxRkY4NkMxQUZCM0E3Qzk2QjkwQTZBQjNBRUUyCi06MTA4MTYwMDBCRUFCRjBEOUJBMzAzRTkzQURGNzk2ODRGMDE5MTAzMjE5Ci06MTA4MTcwMDBEM0YwRDlCNzg5OUU2RTI3NUY0RTA5ODM3NTI2MTg0RkI1Ci06MTA4MTgwMDBGNjBDRTgyM0NBOTk1NEMwNDM0MjI0M0U5QkZCMUJCMjIxCi06MTA4MTkwMDAxRkEyQzg5NzM3RjAxNzU4Njc2RTdFOTg5QzUxRjQ1QzAxCi06MTA4MUEwMDBCNUFBRTdGRUE4QjNBMkRERTI2NzdBMTFDQjcwN0NDODVFCi06MTA4MUIwMDAyQzNCMzFEMjczQjUzQ0JFMDkwNkJBNkJBODBFRjg5MEMxCi06MTA4MUMwMDAwRjgxQkU2MzFGMTVEQzA2Q0Y5QkM5Q0U2MkI4NUE4MEYzCi06MTA4MUQwMDBDN0FBRTIzMThDNkVBRDcxMkY5RDkwRUNCQzA1RjVFQzE5Ci06MTA4MUUwMDAxODg1NkU0RTY2QTcxMURGQzM3NkJEQzc0MkU0OURCNTA0Ci06MTA4MUYwMDBFOENCRjEwMUNEMzcwOUM3NzM2NjIyQkZENTQwREJDNjk2Ci06MTA4MjAwMDA4MkUxRkQzM0IxMEZGMDk5MzVDODdDM0U3OENGRUEwOEEyCi06MTA4MjEwMDAwODU4QUY0NkZEOUU4REY0Q0ZFQTUxRkU1NzVGMDlFODNFCi06MTA4MjIwMDAyNUVBQTVFNTk3NUI3NDAwQkYzRjAxQTQ1NzhCN0M1MUZECi06MTA4MjMwMDAzMDlDMkU2NEU2RDNFMzdFN0NENUZEQUZCNjFGMzQ5MDMwCi06MTA4MjQwMDBCQzBFREJGRjlBNDFCMENGMDA0RTM5RDVFNDIwRkExQUJDCi06MTA4MjUwMDA2NDY0Q0ZDODRFQzFDNzQ4QkVBQzIxQkNBOEY2RTNBRDJDCi06MTA4MjYwMDBGNjI2NjgxN0U4OTEyRTYyN0JCMzQwRjZEMEE3NkNCMzcwCi06MTA4MjcwMDA4MUYzMDVGM0ZBNTU3QTg2RTdDQkFGMzAzOTExRUQzNDQ3Ci06MTA4MjgwMDBDQkYzRDQ3RTZDMTMyM0ZBQThCNjk3M0M1NTY3NDdCODU2Ci06MTA4MjkwMDAwNjc2Q0M0NEI4MjRCRDBBOTczRjE1QzdCRDYwRTI3MDhFCi06MTA4MkEwMDBGOURBMDg3RkQ1MEFGRUU0NDExRDMzNDNCQkJGNEY2OUFECi06MTA4MkIwMDAwRkEzNUZGRjIwQjdEM0ZDNEZDNDJCNzBEREM4RjA0MzgyCi06MTA4MkMwMDBCRjA3RDA0RTA2OTM2OEU1REQwM0ZGNDM4NEY3REM2OTAyCi06MTA4MkQwMDA3NzNGREYwMTVEQUUyOEYwRkM2Rjg1NkUzRkRBMjQ1MUY5Ci06MTA4MkUwMDBCOTNFQ0RGNUZEN0NBMEM3N0Y5MTZFN0NFMjY2QzgwRkRDCi06MTA4MkYwMDAzOTQ0RjdENUY2Q0YyNzkwMUU1MkYxRDkzNzg2RjQxMEJFCi06MTA4MzAwMDBDMjRERjhFOEIzNDQ4M0RCQUExMDc1MzhCQzBBQkZFNTU4Ci06MTA4MzEwMDA4Q0M4NTcyQTlDMkE3QzU3N0M3QUFCMEJDNjdCQjNFNzY4Ci06MTA4MzIwMDA1RjEzMUNGNjIxRjg0QjQ1RTc3RTg0RkJDREMxNEY2N0Y4Ci06MTA4MzMwMDBCODg4RUY5MjM1NzY2NjM0Rjk2NjUyRkM4OEE0NEM5NjdDCi06MTA4MzQwMDAyQkE2QTIzRTg4NzNDQzg1NzU4Q0NCNzREMUJBNEMzNkUzCi06MTA4MzUwMDBBMzFERkQwMjRCMjc5M0YzNjA0ODczODJDRjhDRjBGNzg3Ci06MTA4MzYwMDBBNzM3RUNEMjQzRkJENkE5MjIzM0MxRkI1QkIzQkMzNkEzCi06MTA4MzcwMDA1QUE3RkUwOTg2RUI5OTkzRTk2MTAzRDZFOEYzNzc2NTdFCi06MTA4MzgwMDAzRTI5MTE5QzgzNTA0N0JGQzdDNkYxQTI5RjY4RjRGOEVECi06MTA4MzkwMDBFMEI5NUZDN0Q2MUMwQUMxQ0JDMTAyRUU4RjlEQ0RFNzA1Ci06MTA4M0EwMDBFNURBMTcxRUQ5NzYyOTg0M0ZEQTBGQUREM0Q0RERCREM3Ci06MTA4M0IwMDBERkRCNzYyOTU0REU2RTEwNDREQzk3MzY4NThFREJEOTAwCi06MTA4M0MwMDBDMDA0RjQ1RjVBNDUzQkUxQTE0MzM3OTA4NkY1NkIyQzFFCi06MTA4M0QwMDA3ODdFMEFBRTBGRTc4RjAwRkYzRkU3NUI2MjNERkZEMjdBCi06MTA4M0UwMDBBOTUwRjY4RkUxRkU2OUZGMjQxRkY5MERFQUZDMUYyQjRGCi06MTA4M0YwMDBFQkZGMzg1RjE3NzMzOEE2MDExRUJBQjNCRkM1NzA5Rjc1Ci06MTA4NDAwMDA2QTZDN0MzRjRENTA3MjdBRTY3MjQzRjU3Nzg2OUU3M0I0Ci06MTA4NDEwMDA3OTUxQTUzRTBGM0FERTczMTIxREU5MUNBODc2NEM5OURFCi06MTA4NDIwMDBGNjExRTk3RDI3RDJCQjcxQThCRUI1NDhEN0U4OEJGMDFECi06MTA4NDMwMDBGRTczMDUyMkMxN0JDMDE2QjkzRDVCQTE5NzlEMTM1Q0ZECi06MTA4NDQwMDBEREQ5RThERjNGQUI3MzZDODYyNUNFQ0JEQzNBMUVFNTg5Ci06MTA4NDUwMDBGRDU2REI3QUEyNTNFNkUyRUI1OEMwMzhCRkNFQ0JGNDMwCi06MTA4NDYwMDA3ODE5RThEMTc5RkVCNzgyNDIyQUQ2OERDQ0MyODZGODM3Ci06MTA4NDcwMDA1N0Y1MEJFNzg5M0VEMTAxRkRCQkYyRDc5OTcxREQ1RDYwCi06MTA4NDgwMDBCNkY1NjYxQ0NGODRENjgyNkUzODNDRUFCQTBGRUNFNkFECi06MTA4NDkwMDBGM0NFQ0JGNDg5RTBFOUIyQjlCOTdCQzUwMUE4M0ZBMzFCCi06MTA4NEEwMDBBQzdCNUVFRTNBNkFBRjZBRjQ5RjE0MDk3RkUwNjc0M0UzCi06MTA4NEIwMDBEREU4NjhGNUUyM0MyNjg3QkQ0NkMyM0E3MzZDQzZCMjc5Ci06MTA4NEMwMDA0Rjc4ODlFQzEzNTVCRjBERTk0RkFEOUQ3MkZBQkE5MTAzCi06MTA4NEQwMDBFNDYzRDcxNTlEQ0Y0NEYyNTM1RTMwMDdERTlGQUZCQ0Y3Ci06MTA4NEUwMDA2RDBENzI3QkJFNkJCRkEzNUZDNEY3MUMwMkY5RTNGMzkzCi06MTA4NEYwMDA3M0JGNEQ3NjlEMzU3NzJFQjdFN0IzNTY3OTkxNTQ5ODczCi06MTA4NTAwMDA0RkYwQTEzRjMxNEZDNTVCOUU1NjVGMTkxRDE3QjdBMEI1Ci06MTA4NTEwMDBGQTMwREVENEVBRDE1OTJDQzA5MEJFMkFDMkZDRjM3MEU2Ci06MTA4NTIwMDA3RDNCQkI0MEIxRDc3MjU5MzFEQTJCMkQyNkRGNjNDOEIyCi06MTA4NTMwMDAwRjk2MEQ0MjNBQzJBMUUyNzU0NTgxOEVFODIwODY3Q0Y1Ci06MTA4NTQwMDBCMDY3MjY5NDVERDk2NUI0QUZGQUNDRDMxNzA0OTg1RkIxCi06MTA4NTUwMDAxN0RGNjY0M0JFRDBEQjhDN0VDNDFCQjM4QTFGMERBODE5Ci06MTA4NTYwMDBGMzREQzJGRjMzMjVCMkI3QjA4RTg0MkY3RDM5NzlGQzJECi06MTA4NTcwMDA2RTk2Qzc4NkVCRUMzMkIwQTY0OEYyQTdCNjgwRjNGRDQ0Ci06MTA4NTgwMDAwNzU5N0U5MjBGRDFEQThEMUIwNEQyN0JBQTdDMzc2NjA1Ci06MTA4NTkwMDAzMkQ5MzdDMjc4REI4QzVDQ0U4MDVGRDIyQjQwQkYzRUI1Ci06MTA4NUEwMDBBNDE3QTBGRjE3NUFCM0Y3RTkwNUEyN0IxOUU1RjFBREFGCi06MTA4NUIwMDA1MkIxRUYxMjBCQjkxRkZFNjY4MTg5Q0E5M0NBN0U1NDZECi06MTA4NUMwMDA3RjcxMzZDMzM1ODJGQ0FGQUFGMjMwODRERjk0Q0FDNzBDCi06MTA4NUQwMDAzMzY1RjJGMTRDMjIyRjczOTU3MTNGMkVFMjdDREM1QzA3Ci06MTA4NUUwMDAxNDdCQjk1RjlBMzM3QUZCMUM0QjdBOEQ4NzUyMjg5MEEzCi06MTA4NUYwMDBFODc5REQ5ODg3NDkyRUM1MTI2RjM5QTM4ODM3QTM1REM2Ci06MTA4NjAwMDBBMTNGMDdBNzEzQjVGRDczNDVERUZGQUEyMEU2NzRCMkFDCi06MTA4NjEwMDBCNDcyMTRFNTQxMkNFOUE0RTJDRjgzREVDRjk3RkY3OTUxCi06MTA4NjIwMDBFQzQ3REE2OEFFRTNBMzk5RjJENDQyRTA5M0JGOUMyRTA0Ci06MTA4NjMwMDBERjgzRTU5NkQ3MjNEQkJCRjM2MzJGNzdEMzFFODA3MkVFCi06MTA4NjQwMDBGMTA0REYzNzIzRTlCMzc5ODVCMTk3RkI0QkQxQkU0OEZECi06MTA4NjUwMDBFMUY2NDVGOEZDQ0IxNTNEMTQ0Qjc5RDIwNDY1QjMxMTE2Ci06MTA4NjYwMDBENjFGMDFGRjhGOEVDMkZDQ0I3MzUwRUY3MjdCODFFNTZBCi06MTA4NjcwMDA5RUI5QTQwRkIxREZFMTY3QjIyRUM0M0UwNjdCMTQxQzg1Ci06MTA4NjgwMDA0MUI0NDMwNTM5OTJEREVEOERGRDdFMkQ3RDQ4M0Y2NDdCCi06MTA4NjkwMDBBRkNDNjE1QzFGQThGMzJGMkNFMUY4N0E3QTE0RTBCMDFDCi06MTA4NkEwMDAwMERFRUEyNTZFQUY5QkMyRTA1MENCQkYyRDhDQkQ3REI2Ci06MTA4NkIwMDAyQUU5NDNFMDQ4MDVCQjFGQ0IwNTQyNDQ3QkFGQTdEMDY2Ci06MTA4NkMwMDAxODczN0UxQTBCNzhEOUUyNjA4RDkxRTRDOUM5RDhFRjhFCi06MTA4NkQwMDA0QjlBMERDQUFBRTlDRUQzMjhENzk2NEI4N0U3NjA1Q0EwCi06MTA4NkUwMDBGOUZCRjgxRkU2MUJEMjc5QkU2MUE1QzFFNTQ1RkZBRUQ3Ci06MTA4NkYwMDA0QkIyM0JCQzc2OEM0N0FDQTJGQUNBN0NCQjQzQUY1MkIwCi06MTA4NzAwMDAzRUI2REY5NDdDREIwNTZDRDc1MTdERTVFRjI0MUZEQUE0Ci06MTA4NzEwMDBDM0RGMTdENjlEQzlDNkYxMzZFQjFERkIxOEM2OUQ5NTY0Ci06MTA4NzIwMDA3QzgzOERFNzFCQUMzNjlFOUYxMDZEM0NFRjYwQjUyOUI2Ci06MTA4NzMwMDA3OTA3MUJDRjNCNTg2RDRBREVDMUM2RjMwRTU2OUI5MjlDCi06MTA4NzQwMDA3N0IwRjFCQzgzRDVBNkU0MUQ2QzNDRUY2MEI1Mjk3OTA4Ci06MTA4NzUwMDAwNzFCQ0YzQjU4NkQ2QURFQzFEMzM4MTVFMzkxMzY5RUI3Ci06MTA4NzYwMDA3N0IwREE3OERFQzE2QUUzNzkwNzk4OTdFNzFENkMzQzQ5Ci06MTA4NzcwMDBFRjAwNzBGMUJDODMyRDcyREVDMTNBOTQ3NzIwRkZGMUQ3Ci06MTA4NzgwMDAxODk2QTQ2N0I4NUY3RjU0QTlDRjA2N0JERDM0NjM3ODYxCi06MTA4NzkwMDA1RUI1NkFFN0ZFMkQxODE3QUIwOTcyRkM1NTM5Nzg1RTk1Ci06MTA4N0EwMDBEOTE0QjQ3NzBBMzA3RTQ1NjZCMERGMDRGRTY1NDUxMTAyCi06MTA4N0IwMDBDM0YwRDVCMEY5QzNGMzEzREREOUU3QkQwMkZBQTNCMDE2Ci06MTA4N0MwMDA5NzI5QkMwM0U1MjlFQTE4N0YzRjdDRkU2MTcxNTczQjdFCi06MTA4N0QwMDA4RkU3RDY2NTdFOEJGMDNCQkIyQzQ4NzhDM0U3MTg4N0M0Ci06MTA4N0UwMDBBRDUzRjIxM0I1NTZBREZGMkE3RkU2QjJGOTcxNUY5OTJBCi06MTA4N0YwMDBENDk5MDhGODkwNDU2REJCODhGOTJGOENCQjVFRjFEN0YyCi06MTA4ODAwMDA2MURDQjc2QTUwMUI3NzE1MzMxQkQ0QjgzQ0NGNEI4NDVGCi06MTA4ODEwMDBDMTM5REZFMTFDNUYwNDZCNkEwMTdGMkEwMUU2Q0ZDMTI5Ci06MTA4ODIwMDBBNDE1QUU1MzEyN0M1RUE0QjdERDFCODhCRUJDM0I0NUNECi06MTA4ODMwMDBDNzE0NjhBQTA0NjQ2MDlFQTUxMjIwNkE4NkQyNTRDNjMyCi06MTA4ODQwMDBBQ0QyNENGMjlCMzg5REZFRDdENEJERjFEOTI4MEYwMzkyCi06MTA4ODUwMDA3QTQ2MDQ2QzIzM0NBOEY5ODUwNDU4QkYzNDgzRkMyQjZBCi06MTA4ODYwMDBGMkVGMkEzM0ZEQkY0NzNBNTBFQjgyQ0NGMzM4ODI1REZBCi06MTA4ODcwMDA2MkNEODAyRkY5NkUyNjVDMzY5M0FCQ0U5MDZGRUI0NUMwCi06MTA4ODgwMDBFNjM1QzM3MzQxRTkzNzlCMDUyOTRFMkQzMzg5RjI3NkNFCi06MTA4ODkwMDBCNUNDNDE2NUQxNzQ1NzY5MTFGMEEzQ0VFQzc1RTE3QTdFCi06MTA4OEEwMDBBQUVDNjYwOUY5ODUzREVFM0NEQjQ4RjFFNDdBRTkzMjUxCi06MTA4OEIwMDBFMDQ5MDBGNkY4NjJEQTQ4NzY4QUM4MkVBQkY4MUM0NTIzCi06MTA4OEMwMDBCQjQ4MUYyRjc4MjJDOUFEOEFEOEVCNjFCMjgzMkEwQTMwCi06MTA4OEQwMDAxOUM5QzcyRDJDQjJGQzdDQUM4NENCQ0YzNzRCNURERkU0Ci06MTA4OEUwMDA0NDNDRDdGQjE2RDU4Rjg3MkU4RkJFRDA0QTc5OUI2RDFGCi06MTA4OEYwMDA2MUYxQzI1QkZEOEE2MjZGNDcyNEU3OTAzREI5MDFFOUVGCi06MTA4OTAwMDA3QUYxMDQ4RjBERTE4ODE2Qzc3ODJBRjZGMEVDNDkxQjNFCi06MTA4OTEwMDBDMUFFN0I3NjE0RUM1QUQ0NDNCN0VDMkFGQjk5OTNGQTk4Ci06MTA4OTIwMDA1MDNCQ0FCMTBFNEZCQUQwRUZCQTkyOTAzOEFBRERDMzBECi06MTA4OTMwMDAzQzE0Njc4RDFDQUY3OTY5MTRFMjIwOTlBOEJGMTNGRTFGCi06MTA4OTQwMDAwQjlENjNFQTNBMDJGQjg3RTVGQkJDNTRFMUY4OEU0MkRCCi06MTA4OTUwMDA4N0UzNEI2M0NGMTdEM0EwRDQyNzNFNjEwQjhEMUI3N0UyCi06MTA4OTYwMDA1OTA0MEU5NzQxRDBDMEY1Qjk2MkZGRkRBMDI0RjY3OEY2Ci06MTA4OTcwMDAyQTgxNzI3REE5RkMyRUYyNjFENTc0Rjk2NzU4QUE3QzEwCi06MTA4OTgwMDAzQkRGRTFCQTQwRkMyOTJEQUE0RjAyRjlCQzY2N0Y3Njk1Ci06MTA4OTkwMDAwMUVBODkwNkRCNUVFMzJBODBGN0Q1NTJGOUZEMjIzQTI3Ci06MTA4OUEwMDA2RkY0MUY1QjFFNkVCMTFFOEY0N0JDRjdCOTIyQ0JBM0JECi06MTA4OUIwMDBCQjExMDlDNUU0NEZERTI4RTJGRUU0Njc4NDg3MjhGRTg4Ci06MTA4OUMwMDBFNEFGOEI2M0JFMkY3QkVBNzM4NkZDQzk3MEZFMUY1QjJFCi06MTA4OUQwMDBDQ0UzOUQ2MzQ3MDE4RTA2Mjg1NzQ2RjFFQkE2OENDMjc3Ci06MTA4OUUwMDBGQzhENUFCRjZFQkYzRTQ0Q0UxMDQxODVFNjY5NkNEQ0ZCCi06MTA4OUYwMDBBRjYzMTFGQzNEOTczNUJBQkYzNzdCMTRENkIxMTBGMzg2Ci06MTA4QTAwMDA3MUI1OTFGNURBN0RDNTMxRjdBRjk2N0UwM0NBMDczM0FDCi06MTA4QTEwMDA1QkZEQTlEMEM0QkMzMDZGREE1MEJFQjJDOUQ1QUYwRjcwCi06MTA4QTIwMDA4RDczM0YzOEUxRTAzN0U1MDg3MDdFQjMzOEU2NzJGMkM3Ci06MTA4QTMwMDA3QzlDMUVGOTc1QkQxOUUxRTk2QTA2N0U4REIwNUYyNTQzCi06MTA4QTQwMDAyNURDRkY5QjNCRTExMTk2ODg3NjYzM0E0M0Y3MTFFNEZFCi06MTA4QTUwMDAwOUNGMzczNjI5N0U2MzgzQTI3Rjc2MkE3MkQ0NTMyQ0JFCi06MTA4QTYwMDA1MkU5MkNFNUY1Qjk1MUU4RkFEN0NBRkI4RDRBOUNCNjE0Ci06MTA4QTcwMDA1MTYyRjIyQjkxRjQ3RkVDRTlFNkZDMzgyOEU3QzY3MUVECi06MTA4QTgwMDAzOEVGMERGM0NGREY1M0Y0QzQ5RUQ4RDNDRjlFMENBMEE0Ci06MTA4QTkwMDA5M0I5QjU5MUYxNzUzMEY2NzRCMTc0MDJDQ0JGRDRGNkM4Ci06MTA4QUEwMDBGNDFDOTBGOEIwMkY5QjBEOTQ1RjlDMkVCRjU4MENFRkQ4Ci06MTA4QUIwMDA2RDhCQzI1NzlGMkI3ODY5ODYzRTNBQjBGQjVCQTAzNDIyCi06MTA4QUMwMDA0MkY5MTA5MDgxNTQ0MEZBRUQ1NUVDNkYwMThFMzAxNDRDCi06MTA4QUQwMDAyMDA0REVGMUU4RTdGNDNBRTQxRTdDQ0U1QzZERTQ3RjJFCi06MTA4QUUwMDA4NEM4MUJDQTlGNTY5OTM5REY3NEE3ODNGRjg4RkUwRTdFCi06MTA4QUYwMDAzM0QzMzk5M0FFMjBDRjlGNzY2NUYyRkM2ODM4M0M2QTU5Ci06MTA4QjAwMDBGRUY0NkY0NThGMTlDRjcxNzc2NTE2QzQ4NUYyRERFQkUyCi06MTA4QjEwMDA5Qjk4MjY2RkRDNzU4NUU3ODVDMTRGOEFEM0ZBNDlDOUQyCi06MTA4QjIwMDBFNDI3ODU4RjlGOTBCOTc0NUVBODdGMjRDOERDMUYwMjVDCi06MTA4QjMwMDA3RjI2NTA1QzNDRTQxN0E5RkVDRjk4N0NGOTVDRjE3RjVFCi06MTA4QjQwMDAwMkZEMURDRDlGMTE0NzQ5MEY4QjMwMDczRUZGREQ3NDlECi06MTA4QjUwMDBGOURGMTA4RjIzRDBEMzFGQTNEMEQzOUZCMERGN0YzNDkyCi06MTA4QjYwMDA3QTYyQ0MxMUI3NjhDQ0YwNzFCQkIyMUVCN0I1OEU3MDBCCi06MTA4QjcwMDAzRjIwMjFEMzE5OTFDRTU0RkEwMjdBOUI1MDMyNzZFOEU1Ci06MTA4QjgwMDA3RDIxRjNCNDRBNkYxMzRCOEFCRjNFQkQ1REMwQkVGMDdBCi06MTA4QjkwMDBFRkFDRTFBRkVDRDY0OUQxRkI5REI1N0FDQzI4MEZGQTBBCi06MTA4QkEwMDAzMkQ3OUJGMTlFQzRENDk5MkUwN0NFNkIxMTk5NkMwMERECi06MTA4QkIwMDAzOEJCNUMzRTMzOUU3QjAwM0IyRkJGNjQ4NEJDQzFDRDgxCi06MTA4QkMwMDAyMjJFM0Y3RUFERUNGRkRDMDk5Q0ZGMkE5NjBCQkU3RDdBCi06MTA4QkQwMDBDMDdGNEQ2Qzk3MDFGNzREN0RGRjU4NDlFQ0ZEODg3QkI4Ci06MTA4QkUwMDA3MjQ4RUUzNTk2OEMyMEY3NUU1NkY4RTI3MzA1NUYyQkRGCi06MTA4QkYwMDBEQUQ2MjlFNzk5NTg0NEZCNjc1NUVDRkQ4QzM0MkI5NDYxCi06MTA4QzAwMDA3MzUyRDc0NUE0RTM1Qjc0ODdFNzg1MjJBQzY3MTRFMjBGCi06MTA4QzEwMDBFMEU3QzdFNEUwM0M0Q0NEMkI2RDQwRkMzRTU2QzRGMTkwCi06MTA4QzIwMDAxN0NERkU3RDZBMTRGQ0IzODkwMEQ3NEFGNjk5MDFGRDgxCi06MTA4QzMwMDA2OTU5RkZDN0FDNDhFNzExOEUxNUQ5Mzk5QzA2OTAwM0Q2Ci06MTA4QzQwMDA4MERGOTU1OUJBQjczMUZDRDk5NUE0QjU4N0Q0Rjc2N0I5Ci06MTA4QzUwMDAyQkZFQUU2NzE0RTQ2NzUyMEVDRUMzRjExQTdFMEU0Q0EzCi06MTA4QzYwMDAyRENGQzUzRTFFQjBCNDg4RkJCOUZGODBGQzBFRkM3MzRGCi06MTA4QzcwMDBBOEE0NThFM0U3RkVBODY0NjQzRkY3QjU3RjhGREMxQTI5Ci06MTA4QzgwMDA1MEU4QThDQjExRDk5RTdEMjFGNkZCNDBFN0UwNjBERERFCi06MTA4QzkwMDBFRjdDMTVCOTExNkU2RkFBRTU5RUQ4REI3QjY5NTk3QTE2Ci06MTA4Q0EwMDA5Qzg3QzNEMUM4QjRFNzI0NkVGMURGMjhFMDJENUQ4RjI3Ci06MTA4Q0IwMDBGMzY4RTk3NzI1RTNGQTVGODVDMzU4MUFGMzczOENFNzA1Ci06MTA4Q0MwMDA2N0U4MzFGRkMzRjk3OTdEQTkyQkJFOTRFQzM2OEYxOTgzCi06MTA4Q0QwMDBGNTM3RDgwNzE0Njc1RkI5MzkyNTFGQ0QyQUQ4Njc2QkQ4Ci06MTA4Q0UwMDBBOTk2QkU5MzRBNDdBNkVGRTREMjNCNDBERkFBOUNGQzdDCi06MTA4Q0YwMDAxNzYxNEM1M0E4QkM5OUE4Qzg5QjY5QTVCMURGQUYyOURGCi06MTA4RDAwMDAxOEFGNDg4RTJDQUYyQjYzMUZFN0RCNzM3NzRFNzQ3OTU3Ci06MTA4RDEwMDBBQzlFMzdGQjQ3NDExQjRGNkVCRDI1OEY2MzRFNDc2OUE1Ci06MTA4RDIwMDBBOUZBMjE3OUFDRUE4NzcwM0M4RDg2NUU0ODBDRDEwQjlDCi06MTA4RDMwMDAwRDUxRTRDQzY4QzAzMTM2MDQxRkI1OUQwMkU1QUY5OEYzCi06MTA4RDQwMDA4REY5QTZDMEFGOUREODM5RTRERUM3OTY1MTg4MTM0RjgwCi06MTA4RDUwMDAwRjhEN0ZDODYwQUY0N0EwRTNEREE1QjFDRjdGQTNCQzc3Ci06MTA4RDYwMDBFOTM3N0NEQjM2RDJGOTQ3QTNENUM1MjgzRjYyNzMzMTlBCi06MTA4RDcwMDAzQkVDOUZCMUIzOTVGMkY2QzYwNUFEOTQ4NzY2OUQwMkI0Ci06MTA4RDgwMDBFNUZEOThGNDJFRjk3OUFCNkNERUE3MzA3RDM2NUM5RTVDCi06MTA4RDkwMDA2QzhEMzk1RThCNzJEODk3RjYzN0M1Mjg3RUNERUJGODhGCi06MTA4REEwMDA0QTNBRjkzN0FGQTMzQzE1MjRFRTQ3QjMwRENDNEVGNzQyCi06MTA4REIwMDBBNEFGN0NCOUZCNTgyRjIwMTIzMDJGOUFDNEU4M0U3NjFFCi06MTA4REMwMDBBN0UxQzc3QUNDNDcxQjA1M0VGRTVDRTZFN0Y5NEY5NzYzCi06MTA4REQwMDA3N0ZDQTNGMDlFRTVBMDMxN0YzQjU0N0Y1MTlBNERGQjc5Ci06MTA4REUwMDBERTY5RTVDRkJCRjY5QkYzOUY4NEE1OUVCNjE1OUVDMUI5Ci06MTA4REYwMDBGM0UxNTNBNzI3NTMxQ0VDQzUwMzhGNkJFQ0VDNUFCQzczCi06MTA4RTAwMDBDNzgwN0VERjBCMUU4NjdFQTIyOUQzMzU3MTI0M0I5QzUyCi06MTA4RTEwMDAzMTdGOTJBRThDNTA5QUE4OTQ3QTVFRkEwNTlENkRGOEQ3Ci06MTA4RTIwMDBGQjNCRjdGNzQ4RTg2N0JENzhDMDRDNzI3RkVBODE5RTRDCi06MTA4RTMwMDBGODU1MjFFMzI3OTY3MTNFQjYwNjNERkUxOTAwQUYzNTgxCi06MTA4RTQwMDBEMzczMzIwOUVGMUQyQkY5NzM5MTc5Q0VENEMyMkI2MzAyCi06MTA4RTUwMDBBNDAwOUQwRkRGOTE1NzZCMEVBNUJCMkVBOUQ2NEM3OUIwCi06MTA4RTYwMDBFNDVDOUQ2MzhBMURFQkZDMUM0M0ZDRjREQUZEODI0MDRDCi06MTA4RTcwMDA3RUREMkUxMTUwRUY5QUUxQkE4NjdBRUMwRDg5RUJDM0I0Ci06MTA4RTgwMDBBOTUzNkI0OUFCNzUyQUU3MUU3NkU0MkQzOTgwRUZDN0VECi06MTA4RTkwMDA0RkFGQTdGMTNCNTk2NDdCQ0M1OEM2RTVGMDhCMDY5OUUwCi06MTA4RUEwMDBFNjdERjE4MDQ4RTdDODU1QkNERTY5N0NENkNCMzAwRjQzCi06MTA4RUIwMDBFMEEzREVBNkE3N0JEOEE3OEQ0RTExRTVEMEU5MzQ4MUNCCi06MTA4RUMwMDBFRDgyMkRERkU5Nzg4NUVFOTlFQzg4MDJFRjJGNEFCOTIzCi06MTA4RUQwMDA5RkNBNkNBOTQ0N0ZBN0Y3NzcyRThGNzQ3RTVGQTVCRkNBCi06MTA4RUUwMDBDOTMzNjRBOTBDRURDMDQ5OUUyNjk0RkZDQ0I2RTQzNjg0Ci06MTA4RUYwMDA3Q0YxMjRERkJGNDM4N0U2Q0YwM0ZDQ0Y3REMxN0YyMjE3Ci06MTA4RjAwMDAwRUY3MjE2QkNGNzg1Q0Y3MDdBNTc2NkFCRjQ1MEYxRjc4Ci06MTA4RjEwMDBCRDQyRjRCMEM1QzhFRkUzNzg3NTcxOEUwM0IwOEU4NTlECi06MTA4RjIwMDBENjAxMTFDRjRGMTg1MjgzOTRFNzZEMkFFM0YyNzQ4QjY4Ci06MTA4RjMwMDBDQTBGNjM4MTFGRTAzRDdEMDZCRjA3QzUyNkRBQTlDRUIzCi06MTA4RjQwMDAyNjA3Mjc4NERFQTM5RTU1QTZBQzk3MDUzMkYxRjlDMjA5Ci06MTA4RjUwMDBGODc3MzdEODFEOEMxNUY2QTYzNzhCQjBGRTg1ODlFRkNDCi06MTA4RjYwMDA2RUM4ODY3QTQ5RUY3ODVFQ0Y3OEY3QjM2Qzg5QjFCMjc0Ci06MTA4RjcwMDBERTBDNUU5RkY2RUU2NzkzQTA1RUQxOUJDOUVCOTUzMDQ5Ci06MTA4RjgwMDBENDc4QjA5QjdBQjM5QUJENzkzOEJFQTQxOUJGMTUwRkI3Ci06MTA4RjkwMDA3MjE0N0ZGRDUyNkZEMjQ1OEM1RjM1MjhFQjg3MUYwMzFCCi06MTA4RkEwMDBDRUUzRUNGQjQ3M0FFRkUyMzQ1QkZENzgyRTgzQzk4NkQzCi06MTA4RkIwMDBCMEY4MTkzNDg1REM3NzYwQTkwOTI0RkZENEZCMEJGM0UyCi06MTA4RkMwMDA0NTdGM0ZGNkQ3OTlGRDg0REZCQjU5MjdEOTczODBBRDI0Ci06MTA4RkQwMDBERDVGMTQ3RTc5N0IyRTVDRUU2REQ5Qzg1Qzc4NEU4QzlCCi06MTA4RkUwMDBCMTY2MDlFRjMzMDg0Q0Q2N0RDMUUzNzg0RTlDNUY4NUFFCi06MTA4RkYwMDA0NzlEN0YxODVDQjBCNUM4OUY0MzcwM0Q0RkUzQTg3MDk0Ci06MTA5MDAwMDA1RENCMzc3OTUxREU3QTZCNTlBRTI3MDQ0RkQ3ODRFMEI4Ci06MTA5MDEwMDAwRjE4NkM0NURBQUMxRDBGRTEzRTVEMUIxMzlDMjA0MDIwCi06MTA5MDIwMDAzREI5N0MxQkVEREJCNUIxQzExRjA4OEU5MEJBODFFRjU1Ci06MTA5MDMwMDA2MzVCNkYwOUVENjM5NzI4QjcyMTlEOUI4Q0Q2NkUyMUVBCi06MTA5MDQwMDA5MUIxRUVCODg0MTkwQ0U2RDkzMUQ2RTVDNTdCNkU0MEY2Ci06MTA5MDUwMDA3Nzc0RUZEODlCNjU3NDFDMDAzOEVCOEJCNEY5QTFDNzBCCi06MTA5MDYwMDAxNTNBRkI4MzIyMEZFNjk4NzY3OUNFMDE1REJBN0IwNDMwCi06MTA5MDcwMDA4NkY3NzBEQzgzMzc4Q0E4RkYxNkY2NUQzNDYyQkVBNEQ5Ci06MTA5MDgwMDBBM0U3QTIxMUU5QkUwM0VCMzA0RUM3RjNDNjg4Rjk2RjIwCi06MTA5MDkwMDA2M0I5NUVCRDJGNEFFNzkxRDY0QjFDNEZBN0IyRUU3QTVCCi06MTA5MEEwMDAyQTE1RTBFOTU4MkREMEJEQkNGNTQ3OTJFNjYwN0Q3RERDCi06MTA5MEIwMDAyQkFFOTJCMUU1NTU4N0U3MjBCOUI0MzhGQjlGQzI3MjU5Ci06MTA5MEMwMDAyNTFCMzg5NTBBMjRCNENDQTU2N0Y2MTAzREI5NjI0RDJFCi06MTA5MEQwMDAzQ0IzODdFOEM5MTY0RjhBQTZCRTcyMTdFQ0NFMEMyODlGCi06MTA5MEUwMDAzNzY2NjhGQTMxRTVGRUVBMzIzNkY0ODNFNzk4OUE5NEY3Ci06MTA5MEYwMDA3RDVDNjZEQjE5QzBCOEVFMzI5N0MxM0IxMDMyREVDMjMwCi06MTA5MTAwMDBCRUNENjIzMkMyRUQxMTFDNzQ4REQyQ0JDRjNGQURFMDJCCi06MTA5MTEwMDAyQjg0NTIxQzdBMUZDRkY3RjQwQUM0RUYxRDZEN0FCQTY0Ci06MTA5MTIwMDBDN0QzRENDQkVEQUVFNjM1ODJDRjJFMjAxRUY4QkQwREM5Ci06MTA5MTMwMDA3N0FGNDBFREVFREVBN0VCOTMxMUVGMUIwMDBGMDA0NzdBCi06MTA5MTQwMDBEQUY4ODQ3RDJDMTE0NzkzRTlEQ0Q1NEEwNTU2NzdERkEwCi06MTA5MTUwMDAzOTAzOEVCM0UyM0IwMkRENjc1NUJGOUJBMEMyQkZCMkFECi06MTA5MTYwMDBBOTkxQ0U5MTAxN0M1RUE0NEY3NTlENERGNjQ3RTk1Q0I3Ci06MTA5MTcwMDBENUNBODk5NzBEQTg4NzYxN0Q5NzA2MzRGOEQ0RDY1QjQ4Ci06MTA5MTgwMDAzQ0RBRkFDQThEREFGQUQxMzJFNTlFRjIzNDM2MERGOUJDCi06MTA5MTkwMDBFOTc4OTkyMEUyMzkyNEI1RkU1MUQ2RjlCN0YxNUVFN0I2Ci06MTA5MUEwMDA2RUQxNzkwQUU5QjNDREU4OUY4MUZBN0VCN0U4QTJCQTE5Ci06MTA5MUIwMDBEQTBFQ0YzQjE4RjE5REY4RTEwMEYxQjE0MEZDQjlDNUUyCi06MTA5MUMwMDAyMDRCMzVGODNEOTc3NjgxRTg3NjA1QjZBQkYzNjcwRjBGCi06MTA5MUQwMDBCRDRGNzVGREYwRkE0RDU1RUU1QTlDMUJFOEJCMzA0NzZDCi06MTA5MUUwMDAwNTA5RUQ5MDdBNTExNjkzRjM4ODJGMjI5RTc3RjlCREU5Ci06MTA5MUYwMDBDMjA3NkZBM0Y2MDNCOEVFNDIyMjg1N0RCQUVCRkU0NEE4Ci06MTA5MjAwMDA5RjE3RTZCREVCQ0Q1NjNBRTc3NjU3MjFEMDgxMURGOTgxCi06MTA5MjEwMDA1RTQ3RTdENkU2RTM3OTJGMjhFRjAzNzk2ODgxRjIyRURGCi06MTA5MjIwMDBGREExMjY5MkVGMzM4RDEyQzk3N0U1OUM5NzJBMkZFNDkyCi06MTA5MjMwMDAxN0I1RTdCNkU2Njc5RTIxM0JFQkJFRTc3NkQyNzlCNTc4Ci06MTA5MjQwMDBDOTM5NzJDMUQzQTgwRjJEN0NGRTFENDcwNERGNjYxOEYzCi06MTA5MjUwMDBBNzIzRUYzNEM5Q0Y3MTMyM0YyRkQ3NjE1M0U0NjgyRjcyCi06MTA5MjYwMDBDODUxNzVGREIwQkZFMzUwQUU2MTIyNjk0MTFFQ0Q5QjcwCi06MTA5MjcwMDA2RTU2QTk1RDI2MzkyOEY4NkI3NUU4RkY4RTUzRTZERDNBCi06MTA5MjgwMDA1RjZEQTc3NUE3M0Q3QTQ4QzA3NTY3MzFFRjY2MDFFNjQ3Ci06MTA5MjkwMDBCQjgyM0E3Q0VDNTBGOTU1RUREN0I1RjgwQkU4NUQ1NjNBCi06MTA5MkEwMDBBRkI1NjM1QjQ1RDdFMzY1MzA1RkJCNkRDMEM4Q0YyREZECi06MTA5MkIwMDAwNjhEQTgxRkVFRTBGOERFNDhFM0MzRjI3NTc0RUU1MEE5Ci06MTA5MkMwMDBFMkZCMzA0NzNGOTg4MDc2Q0VGQUEzMzlFM0Q4MDhGNjIwCi06MTA5MkQwMDA4RERFQUNEM0M4MTE4MzE0QTc5MTM3RjM3M0I1RjI2NzUxCi06MTA5MkUwMDBBMTQzMkI3N0JFNTE5NkEzNjk1RjI0NEZEM0I0REZERjMwCi06MTA5MkYwMDA1OEE4QTkzRkUwQUNENEJDRkY2MDUzOURBNjZFQjJDRDg4Ci06MTA5MzAwMDBEM0JDNkZCMTJGRDZENEUzNzM5NzZCREUxRkUzNThBNUEwCi06MTA5MzEwMDA2OTM3QkRGNUEzMjYwMUVENzFCMzc3QzAwNTc4RTgwNjdFCi06MTA5MzIwMDBERTI4NEIxRUQyMjNEMzEyRTA2NTI4RTMwQTJENTYyQ0VCCi06MTA5MzMwMDBCQkYzNEQ3NDRFQjY3QjNDRTg5NzQ0RUNGRjFEM0E3Nzg3Ci06MTA5MzQwMDA2OTRFN0NDOTVDMDNFNURGMEJCRTVBRkM3RTBFQTBDOUVBCi06MTA5MzUwMDA4NUY2REIzRDRGNjhFM0YwQzdBQjM4NUZBOTY1NDNCOURECi06MTA5MzYwMDBFQkMxMEEyOEYzNUVCMDY3RjA3QkU5ODE3QjcwN0ZDQ0FDCi06MTA5MzcwMDA3MThDREI0NUFGOTlDOTJFOUE4OTc2NTM4OEJGNzFCMDNECi06MTA5MzgwMDBCQTY2N0UzOUY2N0I0MkJFMTdGOTgyRjUzMjY5MEFCQ0FECi06MTA5MzkwMDBCN0NGMDgzQjhCN0FFRTM1MjNGNUNCRUIxREQwODVFNkI2Ci06MTA5M0EwMDBGNzdGNTlDRUU1QzFCM0NFREE3QjcxRkM4RTNFRDBCMkU5Ci06MTA5M0IwMDBDODRGQ0Y3RDY4NDRCRkFFQTNBRjNGMDFGNUQ5MENFN0RFCi06MTA5M0MwMDA4NzQ2QjRDRjg3OUUyQjdBNEUwQ0M2NjE5Q0UzMUYwRTU2Ci06MTA5M0QwMDBFOTIzREU2M0RENUU2RUE0RjE0RjJCNzJCREU1M0I3QUJGCi06MTA5M0UwMDAzQTRGOEJGNzM3NkI0QTg2RTQ3M0NCRTFBMDFGRUY2M0VDCi06MTA5M0YwMDBCN0I0RjM3QjlCNzg4RTM2OTI5QzA2RjlGQzYxQThCQ0NGCi06MTA5NDAwMDA3RDM2MURGNEMxNEMxQTRGQTMwRjk2OTdGOUU5REUzRTQ1Ci06MTA5NDEwMDBDODZGQ0RGQjJCOTczNDVDQzU3QzI1Qzg3MUVERjM0QzMwCi06MTA5NDIwMDA3RTFFOTZCMTAxMDNGQTczMjBENzM1RUQxQkNCOTVGQjU5Ci06MTA5NDMwMDA5Q0QzNThERTE3MjAwNzJFMzgyM0RGREI3REJCOEE5RkE1Ci06MTA5NDQwMDAzM0I4RTBBQUEzN0Q3ODE2RjA4OUU3NDc5RjFEODYzRkQxCi06MTA5NDUwMDA4RUQ3REJFMUVENjVBNDgxOTBGRDFCNjZGRjU3NzFGRkEwCi06MTA5NDYwMDBFQUU1Mjg3MkZCQTJCMkJGRkI4NDQwMDEwQTU1QjczMzdDCi06MTA5NDcwMDA4RUU4Nzc4NUI5NzVFREE1NDJEQzk3Q0ZCN0EyQkZERTQwCi06MTA5NDgwMDBGMjIzODFFRUMxRkZCMkZGQUQzNDNCQUNERjc4Rjg1NDdDCi06MTA5NDkwMDAxQURFOTc3NjFGM0E5NTg2Rjc4OURCMENGNkNENjhDRkYyCi06MTA5NEEwMDAwMzdERDAzREU0OEU1RTNGQzFERjdFQThCMDFGOUZCNzM1Ci06MTA5NEIwMDBGNzBBMEUxNEM5RUU5RUVCMERCNDRFMzZCMDE1RkRBMzlGCi06MTA5NEMwMDA3RDUxRTAzQTU4Q0VFREFCQzNFNTc2MkFERDJFOTgxM0Y4Ci06MTA5NEQwMDBGNTdFOEZDOUU3MTM5MDFFNDAzRTIxNUM0N0MwMEY4Mjg2Ci06MTA5NEUwMDBGQUJFNkRFNkE2NDhGNkQ0NjUwNURGMjdCNzE5MTlERTgyCi06MTA5NEYwMDBGQjZEODNGRUI4OEVEMzU5QTc4REY4QkQ4NTk2QzNCMDlBCi06MTA5NTAwMDAyRTAxRDc3MUVFODE3ODFDN0Y4MzgxQTE5REExQzJGN0M2Ci06MTA5NTEwMDA3MTU2RTAwMzVDRkZGQkFCMEQwQ0NGMkQ2RjU5QUQyN0VGCi06MTA5NTIwMDA3Q0JGQkY4MURCMjdGQTg3N0ZCRDM1MDNFQUNCODAyRTY2Ci06MTA5NTMwMDBGMTNCMEYyNzU2REYzODlEMDFFM0JFQkY4NkRCNjk3NTFGCi06MTA5NTQwMDAwRjFCODgyRjk3QUQxMzZFREQ0QjBFQTU2Qjk1NkVGRjJECi06MTA5NTUwMDA0NkExRDM3MEZBMERBN0RCNjFGNEJBRTZFQkQxRUJEQkUxCi06MTA5NTYwMDBFNUI3RUM5MDE5QThGNzYxRkZFNzhDNDMzQUZBMUU3MzUwCi06MTA5NTcwMDAxQzQwN0UxQTNDNjExODA3NzA0RkRBMkEzOUMwQzM2MzU5Ci06MTA5NTgwMDBEM0Y1QkVBN0QyNTA2RTlDRTBFREY5NkQ3QjA1MkU3RjIyCi06MTA5NTkwMDBFQ0NCNzE3RDE5REQ0Njg2RjcwODJFMkFGQjc2NTFEOTcyCi06MTA5NUEwMDAzNzNCMEIwQUYxQzhDRjYyNjAxMkNBQTk2QzI1Q0VGOTBECi06MTA5NUIwMDA4QTgxMzUxRDQ2RkY1MkU0RjI2N0ZBOEY2RDdCQjc4N0NCCi06MTA5NUMwMDBEMEVGN0YyQkU3NzRBQkNBQzU2OTQ2RTYzQTZDQzVGN0E2Ci06MTA5NUQwMDAwRjhENUYwNEUzQkM2Q0UwRTczNTI3MjhFMzREQzkwOTM0Ci06MTA5NUUwMDAzNjJDODI1MjU3QzFFNUU0NkYxNTM4RDRGQTlGMTQzRUU5Ci06MTA5NUYwMDA2MDI3N0Y0M0Y4NUM2OEU2Rjg5RkI3RDFERjhDRUJGODEzCi06MTA5NjAwMDA5OUM5NzVCRDFDREU1RjMwRTE3QzFCRUFCREVFNDkzRkE4Ci06MTA5NjEwMDBDOUUzREZCOTczOTAxREVFNTZGMDdGQTJGQzM3Q0Y2MzJDCi06MTA5NjIwMDBFRUNGMzIzNThFRjZENzcyRjQ2OTA5RTlEOTMyQTU2OEUyCi06MTA5NjMwMDBEQzQ4RjEzMEY3Q0Q2Q0U2NEEwMUJBQkE5OTQzQTU1QTM1Ci06MTA5NjQwMDA1Rjc0RkNBQTcxODBGQzgyRUIwREM0MkYzN0QzRTlCOTlCCi06MTA5NjUwMDBEQUVGNTMwNUVFRTk0NjhFMDdENjk3NEE3QTFCRTRCNjUxCi06MTA5NjYwMDA1ODE2OTI2NzUwRjFBMEZBRTM5NjI5RkI2OUJGMUU1QjdBCi06MTA5NjcwMDBDNzI4RUVDRkQ4RDM4NDhGMTU2REU3ODQ1NjE4RTc0MUZECi06MTA5NjgwMDA4MzZDQjAwMkJFQ0YyNzM2QURCRDM0ODVCMTlGNkM2MjBFCi06MTA5NjkwMDBDQzA1MEIzQUJCQzlDQzVDNzcwMzdENkM5MkE4MUVEODc1Ci06MTA5NkEwMDA2NEEzRkFCQjlCRUM1NDVFQjYzOEM3QTJGRTc5RTBBNDczCi06MTA5NkIwMDA2NzBBRTJFRDQ0RDYxRTY3MkRDQzczRURBQzgxRjA0MTE0Ci06MTA5NkMwMDAzQjA2RjRGRDk4NDI2QjM3RkFGNENDMENFRDM3N0E5NEY0Ci06MTA5NkQwMDBFRkFEMjhGMDNGNzQzMzgzQjk0MEJFRkMwMkU3ODM4RUMwCi06MTA5NkUwMDBFRDFCN0Y0NjcyQ0ZCMUU2N0EwM0ZBNDlGOTZEMTdCN0UxCi06MTA5NkYwMDA2MkREQkRGMTc3MEQ2ODVGN0MwMEZBMDRFOTBDRUM3RTU5Ci06MTA5NzAwMDA2NjEzNTA5RTlDMzNEQTgxMEU5QTZGQTZEMDM4MkZFQkU5Ci06MTA5NzEwMDA4MjBEQzg3N0RFNjMwMjQzRkFGQ0EwRjdCQTcxMUNENzRBCi06MTA5NzIwMDA1Nzc0MkRFMUY5NEQ3NEU2OUYyREFENDgyMkZDQjhGQjJFCi06MTA5NzMwMDBGMjc1N0M3RjhCNzRBMUY3MjlGQUVGRjk0MzAyRUU4NzZCCi06MTA5NzQwMDA3OUEzRkQ5RDRBRUM3RjQ2Q0Y5MEFGQjdENzA2MTNBNDBGCi06MTA5NzUwMDAwODcyRjgwMjhDOEI5N0EzNzAxRDU4ODZCNzM3MTlCRDE1Ci06MTA5NzYwMDA1M0YwM0M0MTkzNDJDN0UxRUQ4QjE1RkEwNDRDMUI5NDM2Ci06MTA5NzcwMDBFRjI5MzIyMThEOUYyM0MxOUYxNjU4NTI2MjMyRjk0MTQxCi06MTA5NzgwMDBGRTM4RTBFNzk2QkVCQUFCMjI5NjFFODE3REE4RjVDRkUzCi06MTA5NzkwMDBEODg3MjE3NjdDMzQzQUZDQjIyNTdFNDNFNkMzMjk0MzQwCi06MTA5N0EwMDA3NUY0MjM0M0VGN0ZBMDFGMTlFOUZCODJBNkFDQzlFMzQwCi06MTA5N0IwMDA0NjhBNzdCOTA3QzBCRTgzRkRFQTAwQzNDOTlFODJGNDFBCi06MTA5N0MwMDAzRThEQ0E0RjhFNzREOTkxN0ZDQzcxQzEzREE4MkZEOEUwCi06MTA5N0QwMDA1RDNBRjIzQkRBQkQ1QTdCQTg0MUUxODcwNkM1MUU3QUE1Ci06MTA5N0UwMDBCNDQyRUIzRjgxOUZENDVFQzFGREE0ODRFMzRDRTMzRkQwCi06MTA5N0YwMDA4NTNGMjdGRkM5OEM3QzA1RjM0RTgzRkQ3OTI1RDJGRTdBCi06MTA5ODAwMDA1NEQ1QUVDNzdFMTNEODJFQTI3MzA2NzQ4RUY0MTVCRTNGCi06MTA5ODEwMDBDRUJGQThFMDdBNTRFNUVCNjVDOEQ3NDhCRkJEOUNBRjgyCi06MTA5ODIwMDBDM0M3NkRBOUFBRjkwQjFDNzc1Qjk0N0IxMEY3NTdGMTlFCi06MTA5ODMwMDBGMURBOUYxMzA4NUZFRUU3NTIwODRGMUZCM0U3OUNCNUJDCi06MTA5ODQwMDA0MDk3MUYwMzFDRkI4MDJFQUYzOTlERjE0OUQwRkY5QTMyCi06MTA5ODUwMDBDQjE5OUY2QzFEOTIwMzFEQ0ZDNTUzQkY2RDkzMTdBN0U2Ci06MTA5ODYwMDBCNDQyRkQxOUE0N0IxOEVGOTNERTNBOEE2RjNFRjQxQ0Q0Ci06MTA5ODcwMDBFNzNGNzVCRTBGRkNDQjUyOTA5RjhBMEQ0MUEzMDNEQUUwCi06MTA5ODgwMDAzM0ZCMkUyNkEwMUQ1ODdDRTRGRTE0RTRDMzY4NzA2RUUyCi06MTA5ODkwMDBBRDU0RTBEQ0Y4RDhEQTRCMjk5QzFFRjAxQ0VFNUE0NTlBCi06MTA5OEEwMDBCRkI5OUZGNDFCMTFGRjZCMzczMkEyREZGRUQ3N0VEOTAxCi06MTA5OEIwMDA4MTdDRkM0OTVGQkM4NEZBRjBFM0EzRjE1RTk0RkZENzlFCi06MTA5OEMwMDA4RTk5N0MzQTgxRkMxMDZGMjJDOEI1OEYwRDAzRjc5MUY5Ci06MTA5OEQwMDBCRDc5NDQyRkExRkZFODNFRjZEQjNEQzg4RkVFRDc0Q0EzCi06MTA5OEUwMDA2OEY5QjFCNTdENURENzUxRUZCNUY1REQ3QjU1QzRGMkIzCi06MTA5OEYwMDBBNUQxRTU4N0Y2OEQ4RkQzN0FENUZBNkYzNzk5RUQyODA0Ci06MTA5OTAwMDA0NzNGMTFCOTlDNThEQkZCMkFEOUJGNkIwNzZGQ0NDMDBFCi06MTA5OTEwMDAzOEVBQzc0N0ZGNEYwOUNBMzVGNzlCMzc0QTUwOUVCOTA3Ci06MTA5OTIwMDBERkI4NTE4MkVERUUxRkM3N0IyMkQ5MkQ3MUIzRjQ4NENECi06MTA5OTMwMDA1NzU1NUY2NkJGMjc2QUUyNDUxQjE0RkFDOEVFRENENUFGCi06MTA5OTQwMDAzODA5RjA1NzdDNkU4OTAzRjNCNjZBN0JGMTE0OUQxM0Q2Ci06MTA5OTUwMDBERjJGRkU3OTdEQ0FDMzIxRkQzQTAzMjJFNThEOEFDRTMxCi06MTA5OTYwMDBENUM3QUYwRUExQ0I0N0FBMEM5QUVGOTQ3REQ1MzgwRjdGCi06MTA5OTcwMDBCNkUyRjcyRDZGQzU3NTAyM0FGQTBFRUNCNjgwQzhCRjk1Ci06MTA5OTgwMDAyRkJCNDZGMEExQkYwMUY2NEI3ODNGQjJBN0FFM0Q5Mjg4Ci06MTA5OTkwMDA0MkY3MTA5OUU4OUMzRkJEMDhFQjUzMUNEQkVEMjg1NkJECi06MTA5OUEwMDBDQ0E3MjY4N0Q4NEJDQjAyM0FCRjA5RThBOEE5Q0ZFNEI5Ci06MTA5OUIwMDAyNzdCM0YyMDVFQTRCQTYyNDczRDc0RkQzNzYzQjI4NUMyCi06MTA5OUMwMDAwODcxOUFEQzc3RTdBMDFDMEY4RkQ3QzBDRjE4ODQ1QjkzCi06MTA5OUQwMDBCNUFGQ0VBN0YzRjg1MUE2NDdEMjJEMDRCODlBM0I5OTVDCi06MTA5OUUwMDA4NDc4MUQxNkQ3Njk5QTRCRjFBMkYwRjg4RTNEQjBEQjUyCi06MTA5OUYwMDA4Q0ZERUM5Mzc1MTJDMkFCREFBNUI4OEYzRDExRTRDMEIzCi06MTA5QTAwMDA1RjU2NzI3OUE2RjI1NzY3ODBFN0Y1M0EwM0I1RTZDOTYzCi06MTA5QTEwMDA1MDdFNTc2OUVGOTE3NENDMEI3OEU5RUNCQkZGMDBDNjIwCi06MTA5QTIwMDAxNzNBMDcxRjhDOUYwRUYzNzRCRUI3OTg2MTlFRTc5QTkyCi06MTA5QTMwMDA1NDZCOUU4MkZEMDZFNzlBMUZDODFCQTI5QkYwRjkxQTgxCi06MTA5QTQwMDAyQUI5NUQzNDY0MkY0NEQ2N0ZBNTBBNUY4Rjk2MUUyQ0Y5Ci06MTA5QTUwMDBBQ0ZDRjNEMDgzRTA5RjU3NTQ3MkZGN0MwNThGOUY3MDVFCi06MTA5QTYwMDBGRjNDNUM3RkE4NzI1OTFENzdBRDgyRUZFMTcyRjkyQTQ1Ci06MTA5QTcwMDBEOTM5RTA0NzkzNUM1RTVCNjlBN0Y3MzJGQjE2QTU5MDg2Ci06MTA5QTgwMDA3RkZEREU5MjE0QkI3NUY4RjgzOUEyNDM5NzlDMzc3Q0IyCi06MTA5QTkwMDA3Q0Q1OUU3MzdCRTU1MzY2RjQ3QjY0M0RGMUE3N0I4OTlGCi06MTA5QUEwMDBFMEMzRkM5NzZBRkZCOTlEMDJEOUU1RUU2NjgzMEZERjNDCi06MTA5QUIwMDA1M0UxMEEyQ0UxRjFEODA3NjQ4M0NGMjIwQ0Q5ODlBQTlCCi06MTA5QUMwMDAxRDc5QUJERDIxNTBCQjZBNTdBQUY2NjNDMEM5RTNCQjYxCi06MTA5QUQwMDA0QjhBNzhGQjY1OEI2QjU1RTU1ODVDQTc4NTlFMTc5NzdECi06MTA5QUUwMDBGM0U3OEMzOTRGQTE1RkY1RTA1MjgxOTExQzUwRUM0QUFECi06MTA5QUYwMDA5NTRFQzNFRENFNEZGQjcyMTI0NzhBNDMzREFGRDBBN0MwCi06MTA5QjAwMDBDQTY3MTNDMkY4NDNENTYzQ0Y1NDcwN0VFQjQwM0Q1RTA1Ci06MTA5QjEwMDA4ODdBRkNGNzFBRkIzQzdDNUNEMEUzOEY1NzUyM0Y0NkI3Ci06MTA5QjIwMDBGRDhCN0UyRTNBMjNGOUVCNjY2NUZDQURFQUZFMDU0RTExCi06MTA5QjMwMDBENjIwQkM1OTJDQjAxOUZEQ0M2OEZBRjU3QjhBOUQxMzUwCi06MTA5QjQwMDBBREZEMTlDNTdFQkMxRDNGMUY1NkU0Qzg2OEYxRjNDQkJGCi06MTA5QjUwMDA5NUI3RjI3MEZGQTlGOUY5OTY3RDY4OEM2MkJGNTdENTY5Ci06MTA5QjYwMDBCQzg2RkIxRkE3RjcwNDZBOTBGRkZFOTc4MUUyRUVFMTM3Ci06MTA5QjcwMDBFRjNEQTVGQTlGMjJEM0VDQ0ZBOTJDQTMwRUZEMjNGNzJFCi06MTA5QjgwMDAxQTFFM0ZFODRFQjJCRjQzN0VDQzVCN0E4NkUzQUMwNTNCCi06MTA5QjkwMDA3RjEwRURCODQ3NkYyNjUxRDk4NkY2MzI5NDJCNUUzODg4Ci06MTA5QkEwMDA0N0Y5ODgxNTZCQjRGMDc3NjM0QzE3RkJBRkNCQTZGMzdFCi06MTA5QkIwMDAwMzJEQUM5RUUyNEMyRDdENDlEMjE2NTAwQURENjMwRjc5Ci06MTA5QkMwMDA5RDQ2QkVGMjFFRDBEQjBGODRCRUZGODhGQUJFOTlDNzQ5Ci06MTA5QkQwMDBFMTM2QTZGQjI4RjcxQTY2MEZCNDc4QzJFRDdFQUQ3RDlDCi06MTA5QkUwMDA1MEE5QzQ4REEyRDkwOTZGRjQ1QkI4NUMzOUEzMjczRTk0Ci06MTA5QkYwMDBFRkMwNzhEMzRDQzY4QzdENUMyRUI4MzdGMjM4NDk0NzFECi06MTA5QzAwMDBERkU2MDRGQzA4NkFCQkQyN0U0NTBDNTAxQzhBRjI2QjZFCi06MTA5QzEwMDBGMEVBRDVCRUE3RDNFODNFOTdBQ0NEMjdCNUVGRkYzOTI0Ci06MTA5QzIwMDBDOUNCRjBCQzUyNzIwRjk3NEJFRTM2QkQ5MjQ3MkFBMUJBCi06MTA5QzMwMDBFRjk3Qjc4MzNGMzkwRUVENEJCQkZEMUI4ODc3ODA4QkM5Ci06MTA5QzQwMDBGOTQ4REVDODlBQjhDQjNFMjVBRkY0RTk5OTdGMjUzRkE1Ci06MTA5QzUwMDA3NEM1OTEyODc5QTRFRTc5M0M4RkE0N0MyNzc3NzgxRTZGCi06MTA5QzYwMDBFOUY0QTkwQ0ZCRURGMzQ4MURCREU3RTgxRUNCRURGMkNFCi06MTA5QzcwMDA0OUE2QUE1QjcxMUM4QTNCNEUxNDc5N0M3NzYyOUYyMEFGCi06MTA5QzgwMDA2MUJDNkE2MjFGNUY3N0U5QjYzOEIyQUYxQjdFQjUzQTM2Ci06MTA5QzkwMDAwNUU1ODFCQTRGOUYyQ0UyRjhGREU0RkRDRjZBQjA1Rjg1Ci06MTA5Q0EwMDBDOUFGNDRDOTAyRUI3QUUzRkQwRDNGQ0JFMDc1QkJEOUU4Ci06MTA5Q0IwMDA4RUZEMzZDNEEzM0ZGM0M5QUZENkM3MjM3RURGODAxMjIzCi06MTA5Q0MwMDBGN0U3QzcxN0M0QzhGMUM5QTE3ODc1NjYxNUM1OUQ5NTkyCi06MTA5Q0QwMDA3OEI1MDhGQTcwQ0M1MDVDMjdCQ0RGOEI1NTVDNkU3NDhECi06MTA5Q0UwMDA4M0JCNDI3MUNEMjMzQ0VGREY5REVFOUE0N0Y1QkY5RUNCCi06MTA5Q0YwMDBDNEY4REYyOTkwMjkxRUZEMkFEMDM1QzY4REE2QzE2MjgxCi06MTA5RDAwMDAzMTJGRkQzRkUzNTgyN0U2OTFCQUM3QkE3RTQyN0NGNDczCi06MTA5RDEwMDBENzNBM0JGMjExRjRBN0ZDOTNGN0IwOURGNDIzODY2QTdGCi06MTA5RDIwMDAzMUNGMzMwMzNGNUI0MEY3MzE1MjI5REY3MzhGQjI4RjVFCi06MTA5RDMwMDBFOUUwQ0ZBMjVGMDlEMDJDQzEzQ0Y0MzQyNURGMzMyMzA2Ci06MTA5RDQwMDA4RTg5MzhGRTBFODM2QkZCNTRDQzJGRjU4QjhFQ0RDNEUxCi06MTA5RDUwMDAwNDhFMTQzQzZGMTk5RTc3MTI2NDlFMkY1N0YzNEY2QTNFCi06MTA5RDYwMDBERTNDNUFGRTQ5QzA3OTk0RUY1NkYwRjM5NkIyODBGOTgyCi06MTA5RDcwMDA3NDM1Q0ZDNDk2M0EyOUY5QjVBNUNDNDNGNzQyN0M4MDE3Ci06MTA5RDgwMDBCM0FGNzNERTZCODRGQ0NGQzMxNTExRjIzRkVCMkI5ODlFCi06MTA5RDkwMDA2MjlGNjlGMzhEREI3MzVGMjEzQUZEQUE3OUM2QzM3OEIwCi06MTA5REEwMDBBRUUyOEVFNkM1RUNEQzBGMEQ4M0JCMjhFOUQzMzRGMkJFCi06MTA5REIwMDBCQkZFRjg2RjA5QTQ2N0ZCNkU5MDNFQkMxNjM0QjEwMDgxCi06MTA5REMwMDBDNTFGMDc3OERDQkRDRjQwNzE4NjZCRTBCRjhEMEREMTFDCi06MTA5REQwMDBCM0VGNTRGMDcxOEZGN0Q1MTFGREY3MDRFQUUzRjFGRDBECi06MTA5REUwMDBERjJCQ0ZCN0JEQjdFNDdFQjRGN0JEMDFGRTFEMEJDNkI4Ci06MTA5REYwMDBCODNGRDYxMzEwOEJEMTZFQjk4M0ZCRjI2NDY1ODRGNTNFCi06MTA5RTAwMDA5OUUzQjg3RTBBRTdBMzUyODVGRjRBQUIzODlFRUJERUEyCi06MTA5RTEwMDBFNzdFOTg3QjAzQ0ZBRjQ4OEE1QzcwN0I3ODVFRkQ3NEU5Ci06MTA5RTIwMDA1NjlBQTBDNkQzQzc0NUNBQkYxQzA5OTJERTY4Nzk0NEJBCi06MTA5RTMwMDBBMEVGQzk3Q0Q5RkNDQjMzRTk5MUYzRjEyQjdBMkY0NjAzCi06MTA5RTQwMDBDRUJGMzQzNjkwRkM4QzE2Q0YwRThGNjNGRjlEMkFGRjU5Ci06MTA5RTUwMDBBNkYzMzg3NjdBOTU0NEVCNEVGNkU0RDc4QzYzNDNFQjYxCi06MTA5RTYwMDBCRjgzRkJCMDc0NTY4NDdEQjg4M0UzNkY5QzFEREJGMTI4Ci06MTA5RTcwMDBFQkNBNjMzQkZFMTMzMTFFN0Y3QjhDQzdGRjYxNzk2QzlECi06MTA5RTgwMDBGM0VCQkE4QUQ4QzJGRkRCMThDM0RGMUYwOUZFRkY1NzA2Ci06MTA5RTkwMDBDRjA3ODRFN0ZGQzNDRjBCODQ5RjAzMzBCREY1QjAxNzE2Ci06MTA5RUEwMDBEQkJBODQ5RDQxM0ZDM0VGOERCRkQ2MjQ4MDFDMTQ5MzQxCi06MTA5RUIwMDBGNkQzN0RDRTA1RTUzQzFGQjZBRERFRUNEQjJCMEM5RDZECi06MTA5RUMwMDAxQjUwRjFGNTY4MzVGNzIzQTVCQ0VCNUVGQzVFRDQwNEFFCi06MTA5RUQwMDAzOTUwOUY4MkYxQjI3MkZFNzc0M0FFNTk3ODVFOEM4OTE5Ci06MTA5RUUwMDA1MjNBRTZDOUUwQ0RGNEM1NjA5Nzc0NUIyMkU3NTk1MzU2Ci06MTA5RUYwMDA5NUYxQTJFOTkxODNENTM1OEI2NzE1RTMxRjNEOEE3Q0U3Ci06MTA5RjAwMDAwRUZGODc0QTFDNTJFQUU1RjdFOTk5Njg0RjVGNENGMzY4Ci06MTA5RjEwMDBEQUQzRDExRTRBM0NDOTlGMjdGODk5QkM5N0UwQjI2N0IzCi06MTA5RjIwMDAyRkU2N0ZEQzIwMUJFMTdCNDZDOUZGMjZDRkJCMkIxQjI2Ci06MTA5RjMwMDBFM0QyQzk2MDE3NjI1RUYwNjlDQzBGOTIzRjJCRDE3QkYwCi06MTA5RjQwMDBFQTdDOTc2NjcxM0ZFQTE5MDMxMzMwOUZFQjlEQ0FDRkY1Ci06MTA5RjUwMDAzOUIxOUVERjkxRkRBNkU2RjVDRTFBRkM5NzVBMDVDQUU3Ci06MTA5RjYwMDBFQkI1MjNGQzNGRDVGOUYzRjY2NTJCNDQwQ0Y4Q0RFQkFDCi06MTA5RjcwMDA5MTI4REZGODc2RjlERkU1QkE2ODFFOUVFNzdCNENFMkIwCi06MTA5RjgwMDBBRjlDNDBCRjE5RTA3OEVDNjgyMUQxRUY4QUUzRTVGRjkwCi06MTA5RjkwMDBENDhDRkVDNzY0OTFGMDNDQ0NBRjU0RTIwNTE3OTQ3OEEyCi06MTA5RkEwMDA4NzFBMkY1MEYzNUJGRkFDQzQ0OTNFQzBGODBCOTQwM0YzCi06MTA5RkIwMDAxODBGODE3MkZCMkNERDlERDY0RkRCNjc0NUUwRkY2N0Y0Ci06MTA5RkMwMDAwNDFFMUZGMkZFOTRDNzg3MEE4RDhFOUNEMEYzOTQ3RkU3Ci06MTA5RkQwMDAzNThCRUY2M0FCOUZFNzJGRDQ3OENGMEY5NUY1MTQ3RUM5Ci06MTA5RkUwMDA0RkVGQzdFRkExMTU2RTlENkU0NDNENUZCODM1MkIwRTQ4Ci06MTA5RkYwMDBDQjE5QjI0Rjk3MDZGODVFQjZGQUIwNEVEREJGNDg3NDgzCi06MTBBMDAwMDBCNDU3NTlFN0I2MzM0MUNBRUZCRDFBOTZGN0JGMzQ4QjQwCi06MTBBMDEwMDA5RjY3NjhBOUU2RkI3QjA5RkZBMDE4RDQxRjlCMjI2RUVGCi06MTBBMDIwMDA0MUYzMzFCMTRBRDI0N0NBMkJCNTgwNUY4QzcwQjY3NjA2Ci06MTBBMDMwMDA3M0I4NTU3Q0I3RjhFRDc1MzhDRkM1NTNDMUFENTgxNjE4Ci06MTBBMDQwMDBBQ0M5QUVBM0I4N0JEQkY1QUQ2OEJGQjkwNzZGOUNBRUZBCi06MTBBMDUwMDBBNjc4OTlEMThFRkVDNDQzMDNEQUI4REIxM0Q1M0NGRTUzCi06MTBBMDYwMDBGRTJBMUFFMDg4Qjc3QjQ1RjI4RjBCRUYxNTg5N0U5MkE2Ci06MTBBMDcwMDA1QjJDRTRCRjI2MUI5OERFOEFGNTQ1REMyRTJBNjg0QzUzCi06MTBBMDgwMDBBREMzM0E1QjkyNDRGNjYwQzExOTdCRDJDMzc5NDM3MTg4Ci06MTBBMDkwMDBCMEU0N0IzNzhDNDUzQ0REMkVDRkFBQzZEMzJFNUJFNEUzCi06MTBBMEEwMDBFM0I4OUY1RjM1Q0ZEQTdFRjYzRDNBNkZBQUFFNEJDNTc3Ci06MTBBMEIwMDA4QjlBMkY4RDk2Njc1NUNGM0RCODFCM0ZEMzlDRDM3MDlECi06MTBBMEMwMDA4QkMxMDY4QzNGMTYxRUJENjg1NENFNUY0QUI2RUNBMTBDCi06MTBBMEQwMDAzQzZDRTE5MUVCOTQ3RjU1RjNBRDZFQ0Y3NUIyQUJBMUMzCi06MTBBMEUwMDA5RjExRkJGNzZDRTJGOUQ3RDcwMDBFMkM3QjYxRERCMjM0Ci06MTBBMEYwMDAwOUVGQTFEQkE4RUM4Mzc1RTNGMzYzOUI3MkE5RjQ2RjBFCi06MTBBMTAwMDA3MjUwNzk3QzUzMTk5NUY4OTlDOUY0NjRDQ0RCNUVBNzM5Ci06MTBBMTEwMDBCQ0VERDU1OUMzQ0U0RDUyNUU2RkI3RThGQzA4RjExNUMyCi06MTBBMTIwMDA5MkY3QTM3QTc4REU0RjFGQzdFMzM1RUUzMzA2RkFCRTA3Ci06MTBBMTMwMDBBMUZCQUM5OUU0Nzc0RDVGRUI0NEY0MEYzRTNGRTc5QTA3Ci06MTBBMTQwMDA4ODcwNzc2MERFMkQ4NDJFM0U5MTFEOTYyNEY0ODM5REM5Ci06MTBBMTUwMDAwRTBCRTZEQjBBRkJBRjFBRjEzQzRDODcxODMwNjIzQzcxCi06MTBBMTYwMDAwQzIwQ0ZDMDIzOEJFRTlFRUJGQ0RDNkY1RjhEMDVGMUU2Ci06MTBBMTcwMDA3QkRCRkM1OEVGRkZDRjhGN0Q5NUZDNTg3NzM1M0YyNzcxCi06MTBBMTgwMDBBRENBOTEwMkE3NEVERThCRTUxOUQ5RjI3MDg4OUNEODMyCi06MTBBMTkwMDBFNkU0Rjk5NDZEOTMyNzExMUZFRTc2NEU0QTVBMUQzMjZDCi06MTBBMUEwMDA1RTY3MjM4RjVGMjRERjNCRDkxMkZBRkM5N0Q1M0MxRkYzCi06MTBBMUIwMDA5NjJDMzA2NzI0Nzk1NjMzRkJFQkREQzcxQjQxNkVEN0Y1Ci06MTBBMUMwMDA0NEIyRkIzRkY5MjlEMEU1NENBMDhCMjNERjlFMzg5MEE5Ci06MTBBMUQwMDBDNzE5M0YzNDFFQjdBRDcxRjVDNDMxMjg5RjJFOThEOEVBCi06MTBBMUUwMDAxNDFFQUZEM0M0RTM1ODU4NUUyRTVBNUM2RTQ1QTM0RTdFCi06MTBBMUYwMDBCNkQwNzlBMUUwMDRENERCRTFGMTMzMjYwNjI3NzBCREE3Ci06MTBBMjAwMDAyRTY3RTBCRDE0OTgzMTgzOTVCMTYxRjlCOTVGMzBERkY1Ci06MTBBMjEwMDBDRjI3QzNGQkNCMUE3NUE0MkZENDNDNUQ0MUEzQzgzNjBFCi06MTBBMjIwMDAwMTdEMTY2QzM0RjgyODNGRDcyODVFQTQ3NkM1NkZFQzA0Ci06MTBBMjMwMDA5NDBBMzI5MENFM0YzODZCOTQzMEFFMTYxRTFGNzMzNEEyCi06MTBBMjQwMDBFRUVGOUUwNEZEMUQ2RDAyREQwQkJBNUQxRTRGM0QwNzU2Ci06MTBBMjUwMDBERUQyREIzRjA3RTM2REY5NkM1Nzc3M0RGNENGOUZBQzVGCi06MTBBMjYwMDA5M0YwRkNGNEYwN0MxRTNGRkY1REEwRDgzOUUxNzEzNjFECi06MTBBMjcwMDBBNDMzQjQ0QkMyRTNGMDFCMTUzQUQ4Mzg5QkVCQUREN0VGCi06MTBBMjgwMDAxNDdGNTMxRDQ3RUQxNzRFM0YzRjlEQ0RGNTZEQjRCODdDCi06MTBBMjkwMDBGRTUxNjVCQ0NFQzY4MjZEOTM3MTdGMTdFODE4RUE5M0I0Ci06MTBBMkEwMDBDRUM2NUFGM0U0OTBGMTc2Q0NFNkU3REI5RUMxRkM2MEMzCi06MTBBMkIwMDA2QTY4N0U5MEU3MDFDM0YzODJBQTlDMkJFQ0ZGN0QwM0MyCi06MTBBMkMwMDBFMjdCMzdDODZCRDQ2MzZFMUJDRjFGMTQxRUFCMzk4MzgwCi06MTBBMkQwMDA3MjYzMDg0RUFFQjc3N0MzOUUwN0M4QkU3MzI0MzFCRTAzCi06MTBBMkUwMDAyRUZBN0I0NURFQTMwMkM1RTcwQTE2N0M3NjNDMUVFQTAxCi06MTBBMkYwMDBDQzk5NDRGN0IwREM2NzI3NkZCMUEyM0M1QTIwMTZFMzMzCi06MTBBMzAwMDBCRDFFQjc1M0I4OTU2N0MyN0NEMkZERUZBQ0ExRUZCQ0MwCi06MTBBMzEwMDAxNjNFOTA3RjBFRjdFNTgxNjYwMzlEMEY1NEY1REVGRDM2Ci06MTBBMzIwMDBFRjM0MzVGMEY2QkQ0RkM2NjE3QkFFRTBCMEQ4RjE3OUMxCi06MTBBMzMwMDAyMzdEM0Y3NkZFNEI3RUZBQkI1ODBCMTEzQTkwRTc4MUE2Ci06MTBBMzQwMDBCMzk3NDRFNDlCQ0IxNkQ3REYyMzFGMTUyRTUyRjI0QzU0Ci06MTBBMzUwMDBDRDVDNEYzRkQwQjdDOEMwQzhDRUQzRUFDRDEzNTk5RjBDCi06MTBBMzYwMDA1MzNDRTg0NjVGMjFFNThGNTJGMEZDNDNERTkwQkUyOTY2Ci06MTBBMzcwMDAzQzBBN0E2Q0NDOUREMzYzM0Y5RDJEMTEzRTY3ODIxRUIzCi06MTBBMzgwMDA0Mzc4OTIxN0YxM0M3REY4RkVFRjUwRjYzRjlBNUU4QUQzCi06MTBBMzkwMDAyNjg3NTFGRkYwRkI2M0RFMENDMTM2NUM4RkRCMzFFRUFDCi06MTBBM0EwMDA1MzhBRjYzQTk0RTNBMkQzREYxRjY2NzFCQTRFOEE2MkVCCi06MTBBM0IwMDBDRkZENDlBMURGQThFN0E3N0E0NzI3Q0ZGNDg3RDk3RjQ4Ci06MTBBM0MwMDAxRTc5NjNENUZGNTJGMzREQUFCRkY2QTA2MjBGQUI2NUFECi06MTBBM0QwMDA5MzUyRkVCQkVGMzdBMDcyOEQ3OEJGMjEzOUYyRkQ4NjE0Ci06MTBBM0UwMDA4NzBFMDk2OEE3QThGNzFCNEUxOTU5Q0RFMTU0M0M0RkI5Ci06MTBBM0YwMDBBQkRDNzdGMjJEMjIzQkU5RDRERkZDNjJFQjhCQTk3ODUyCi06MTBBNDAwMDBERjQ5OTA1MDFEQjUxRjNBNDc3QUJFMURFQzIzQjJBNzE1Ci06MTBBNDEwMDBGQTdFQ0JFM0FEODdGOEY5RjBGNkRFQzhERkREREJBRDIxCi06MTBBNDIwMDBEOERGRjUzMjIzQjlEMUFFOUNCNzZERTg1MUYyNDRCNzBECi06MTBBNDMwMDBFMjk2OEY4QkExNzE0QkI3M0QzMDU2M0RDN0VCMjM3RjIyCi06MTBBNDQwMDA0RjFCQzc4QzE2QjdFQzYwNDEzQUI3REJCMTQ2NzBBMDIyCi06MTBBNDUwMDA3RUI4REQzOURDNURDQTc5RERBODcxNEM3OUU0NzNCOTY5Ci06MTBBNDYwMDBFMTcxNENCOTVBOUJDN0I5NkY5NkM0RjdEQjI1MDg2OEYwCi06MTBBNDcwMDBFRjlBNzVDRTM2M0FCNzdGNEM5MDIyOURGMzVFNUFDRDU3Ci06MTBBNDgwMDBFNUY0N0MyNTBGNzJEMEM4RTlFMzYwODU0MEY3NkZGMEYyCi06MTBBNDkwMDAxRTFFRUVGQkMxNjNGQzFFQ0VDMTAyN0UwRjQ3Q0Q3QkFDCi06MTBBNEEwMDBBOEY3NkJBNjBFRTUzREU4RkU5RDdBMkY0N0JENjdDMzcyCi06MTBBNEIwMDA5ODhGRTA1QUY0NUMxQzdEQzc2Qjg3RTE5MDhEREJCRDAzCi06MTBBNEMwMDA1RTdFM0YxQTY1MTBFNjQzNERDQzEzODk1RjZCQUI2QjI0Ci06MTBBNEQwMDBDNDZBN0FFRjhFREI0RjhGNTQ0N0YwN0I3RDhBMUZFOTg5Ci06MTBBNEUwMDBBRThFRUEyRkFDQUZENkZBMEI1NDBGRjcxN0VFNTRERTUwCi06MTBBNEYwMDBFMzhCRDlFQzRFRkJGQjg3NjMxQzhGOUUzMjNCQjZGMTlFCi06MTBBNTAwMDBDNEVDNDhGQkI2QzVBMkZEMUVBRjVBNUU1NkU0REZCMEYwCi06MTBBNTEwMDBFRkM1MERCQjJGQzlGNTdBQjc2MEZGQTc0QUNBQTcxQkM1Ci06MTBBNTIwMDAyODlGQUVDQUQ1RUUzMTdDRkMxRjI5RTNBOTY1NDAyOURFCi06MTBBNTMwMDBCQkEzN0NEN0Y5OTc0QUJDQUM0Qjk0N0IxMEVFNjkyRjM4Ci06MTBBNTQwMDA2OEUzOTdEMzBGNjlFMzk3MzM3QjkzMzVGNTdDRkY3ODA2Ci06MTBBNTUwMDBDREZCODU2NzI2NjlEQThCMDNGNzY4REE0QjJGMTQ2ODIxCi06MTBBNTYwMDBFQUU1MDMxNTlBRjcyQkFGRDQ2QUVBQjM4MkRBRjg2NTA1Ci06MTBBNTcwMDBGNUNEQzU2MUY3Mzg3REI0QkUxQUEwRENEMDdFNzVFNjk2Ci06MTBBNTgwMDA2RjZBREVDQjU4QTM1RDU3OTY0N0JCQUU4OTFCQjVFQjEwCi06MTBBNTkwMDA1MkM3Q0RGNjZBRDc5N0QzQUQ1RDVGMzJFNkUzRjJCRTIwCi06MTBBNUEwMDA3RTNFMkU3RkI2NURDOUM3RTU1OEIwREYzMzhEOTMyRDUzCi06MTBBNUIwMDA2OEI3QTlGN0E5RDVGN0ZFMkYzNzY2NThERjQwN0YwMEE3Ci06MTBBNUMwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEQ5Ci06MTBBNUQwMDAwMEZGQjNFNDY2NjBGODUxMEZDMTdCQjkxODE4NkU3MkMyCi06MTBBNUUwMDAyMUY4NDMwMUNGNjc4NkQwNkEyQzBDMEMxQTQwQ0NDNkU4Ci06MTBBNUYwMDBDNEMwQzBDRTQ0QkM3RTcxNEUwNDdCMUQwNzAzQzM0QzU3Ci06MTBBNjAwMDAyMERFQzgzMUYwRkUxQTQ4N0M5RDg3N0U3NkE5RjM0MjkxCi06MTBBNjEwMDA2ODU5QzE4MUY3MzcwODU3MEEzMTMwQjQwQTMzMzBDNDVBCi06MTBBNjIwMDA4ODQwRjgwQ0EyQThGMjU1NDIwOEI2QTkyNDY1NzYzOUVDCi06MTBBNjMwMDAwMkY1MDMwMDI0Q0M3MTM0ODAwMzAwMDAwMDAwMDAwMDA4Ci06MTBBNjQwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDU4Ci06MTBBNjUwMDAwMEZGRTU3RDBCNzg1NEQ1QjVGMDNFNzMxRTMzOTM3OTNBCi06MTBBNjYwMDA2NEYyMjAwRjAyRjE4NDAwQTI0MjE4MDI4NDg3MDgyN0I2Ci06MTBBNjcwMDAyMUM0QTgwMTgzODBCQzU0MjYzQzQzNDgzMjExQThCRkEyCi06MTBBNjgwMDA2REJENzcyNjA0MTFBREI1NTE2OTFCQkNFODFEMTAxNEQyCi06MTBBNjkwMDAxNTc1QTBEMTA2MUNFODQwMTRCMURBREJBOEY4QThENURFCi06MTBBNkEwMDA3NjUwNDQ0MDQ4QzJDQjhCMkRENTdGQUZCNUNGNDlFNjFECi06MTBBNkIwMDA5QzRDNDhENEY2QkZGRkZGRkRGMUYzREJFQ0IzQ0ZEOUUwCi06MTBBNkMwMDA3QkVERjVEQTZCQURCREY2MUVDMTMyOUEyNDRFMjJFNDY1Ci06MTBBNkQwMDA1QkY4QTM2NTg0Mjc4NEY0RTkyQ0RCMEFEQThGOTE2NEE0Ci06MTBBNkUwMDA0MkZDMkY4QkYyMzY4RTEwRUU3NzhFRjBBNDUxODRCQzk0Ci06MTBBNkYwMDBCNTk5MEI5ODY5M0RCQ0NGNDYwOEFEOUZERTM0M0Q2MEVGCi06MTBBNzAwMDBDRTIyNjRGRjA4QjMwMkVGOUZERTlBOEZGNUM5MkZCREZBCi06MTBBNzEwMDBFNzE0Njg3QkQ1NEJCQzAwNzVEM0JFMTNDRTg4OUQxMDYzCi06MTBBNzIwMDBBRkI5RTVBMTZCRTlGM0Y2OTc3OEIyODUwRTQ1RkM5M0Q2Ci06MTBBNzMwMDA0RDI0ODU5MDYzMTZDMkZFMkVCMkZBNTIyQkFCNTY2RDk1Ci06MTBBNzQwMDBERTdGMDdGNDVCREU2NDI2NTZEQTRGRDVFRTY1RDNBRUM2Ci06MTBBNzUwMDBBNUY1NjU4NzQ0MDJBRjU0NkRBQjk1RkFEMkZBRjIwMEM1Ci06MTBBNzYwMDAxNzg0RkE5QTdEN0ZDNjcxREEwQTQ4Nzk3MDI4MjEyNzAyCi06MTBBNzcwMDA3RDE2MjI1RjQ5RUJDRTk2OTQ1OUY0Nzk0NTYwNjcxMUI2Ci06MTBBNzgwMDBCQzVGQjE4MzczOUJFOEZCMTU5QkY2N0YwQ0ZENTczNEQwCi06MTBBNzkwMDA4QTAzNzlEQUZGOEFFRDM2MjIwRjYxNjM3RjRCNjAxRUYwCi06MTBBN0EwMDA0QkE2MDFCQzU1NkY4OEM0NENFQkU1OTc1NjQ5MDQ3MDI1Ci06MTBBN0IwMDAyNEQ0NEJBNTBFMThGRjYxNDk3NkMwMzg4NzcwMUMwRDU0Ci06MTBBN0MwMDA5RjU1Q0ZEMDcxRTg3N0Q1MkY3MDZFOTg1QUI1ODk3ODlDCi06MTBBN0QwMDAwMDlFRDZEREQ2Mzk0RkRBNjE1RUI1RDI2MEY4N0VGN0RECi06MTBBN0UwMDA3RDEyQkNCNzJDNTBGNkIyNTUwNkY4MzY0QjQ1MDBFNzQzCi06MTBBN0YwMDBBNkNERDJEMkExOURGREFERDhGRUE2MEVBRTYzMEREOUQ5Ci06MTBBODAwMDBBOTlFQTg3NjYzNzlEMjQ3ODg2Q0VFQUM1NzEwQTIwNDUzCi06MTBBODEwMDBFRDAwNzc0MDlBM0VBQ0YzRjk3OTJFODE5MEQxRDAzRjhDCi06MTBBODIwMDA0RjY0NEI2N0ZGOTQzMEM4MDdGRUY3RTgzRjgxMEZGNjhGCi06MTBBODMwMDAzQTAyREJCMjNBRTlCNUQyNDVGRjJENzdEMkVCQUM0QjA5Ci06MTBBODQwMDBBNTlGRDA5RTE3RERCRjU2M0UwNDc0QTBGMEQ0RkI1Q0RDCi06MTBBODUwMDA1ODNFRTI0QkMzNzI4MzRGNDZCQ0ZEQ0EzNzA0Q0IwNjU5Ci06MTBBODYwMDA5RjFCOUYzRkU2MUI4QkU1MjY5RjgyRTUxM0JFNjIyQzU0Ci06MTBBODcwMDAwM0JFNTI3QzZGOEI2RjBFOTY1QjdEMUU3Q0ZFOTRBRjg5Ci06MTBBODgwMDAxQ0NCRURCRTFBN0NGRUFDRUY2RTJDNzdGOEZDRjhGQzBFCi06MTBBODkwMDAwNURGN0EyQzgzQkU3QTJDNzdGOTFBQjA2Q0Y0MDVGMEI4Ci06MTBBOEEwMDBCRDk3N0REQkIxNkNGMjA1RjFGOTFFNUYxMzk2MjE1RjU4Ci06MTBBOEIwMDAxOENCN0Q0MDVGNUE4NjdEMkQ1ODFFRjA3RDg4RTVBQjE0Ci06MTBBOEMwMDBCRTA4N0U3N0QwNzcxQ0NCMDc1NUJDM0IyNzkwN0M4MTk4Ci06MTBBOEQwMDBFMkNEQTkxMDE3MTUxNzkyNThBMkU0OEJCNDlFNThDQTVFCi06MTBBOEUwMDBFQTI5QjdGOUYzMjU1QTRGRjFEMDNBQzU2M0RGQ0E3MEE4Ci06MTBBOEYwMDBCRTk5RDZGQkQ2QjBGNkNDN0I0ODgxODVENjMzRkRBQzZECi06MTBBOTAwMDA3REMwODM0QTgxOTVENjA3RDRCM0Y2QzE5QkZDMDU3MUZGCi06MTBBOTEwMDBCNDNFMzhDMERBQUZERTExMkVCMEQxRkFENTQxRDY5RUEyCi06MTBBOTIwMDAxMzIyOTNFREI0OUUxMzY2RjVEQ0I3OTRDOTBFNUFDRjhCCi06MTBBOTMwMDA2RDYxRjVCQzhGRkQ5MzlEQjQ5RTE3NjFERjhGM0YxNTUwCi06MTBBOTQwMDA5RTFDNEZFQkUzREI1OUZCQzQ0QkE0RDA0NUVCMTMwOTMyCi06MTBBOTUwMDA4N0Y1MDI3QjdFNjEwMkFEMTdCODU4QkRBODVGOTkyMENDCi06MTBBOTYwMDBDN0UwQkY3RDYyNjQxMUExQkNCMEREN0ZCMzIyQTREMzc4Ci06MTBBOTcwMDBCQTE0NTk0NURDMTQ5RkZFMzk1ODBGOEI2NDMxQjRCRkFCCi06MTBBOTgwMDBFNTJGNTM4NDcxQjQyRTkxRDVEMEZFMTc3RjA1QjYxRkU1Ci06MTBBOTkwMDAxMDY1NkM2RkY3QUZDMkY2MDM5MjhDRURBNkRBN0JCMDUwCi06MTBBOUEwMDBGRUFBQTg2MDdCNzJFREJERjhGRUFCOTI4MkVEODM2QkQwCi06MTBBOUIwMDAxRkMyRkE0MUQxODNFRDYzNkI3RjhERUYxRjk0M0NEOEFBCi06MTBBOUMwMDBGRUM4REE4MDUyNDhFQkZGQzE3OUI2MDA1RkQ3NzE5RUFFCi06MTBBOUQwMDA3MjkyMERGQzFBNEMyQkE1RkNCQThFMjM3MzQwM0UxRUJFCi06MTBBOUUwMDAwMEE2QTZGMkIwMkU1RDUyNDBCRkVERkI0N0RFOTMzQ0MxCi06MTBBOUYwMDBBN0YyNzYzMkQ0OTczRUY1NDAxNkY2RjMxQ0Y2MjNEMjMyCi06MTBBQTAwMDA3RUY4OUVGQjk5RjhDRDU4NUQzRjEzQkYyOUQ3RkE2OUIwCi06MTBBQTEwMDA4NEY3RUFBQ0JERUI2N0RGMzdFM0Y1RjA3QzUzQTFGNUQzCi06MTBBQTIwMDBCMzE3RkI3MUY0NkU1RTEzQkY5REEwODdFN0RCNEFBREUxCi06MTBBQTMwMDA5RjgzRDg0RjQyRUZFMDA5OEI2Mzc0RkQ4NEM1NjU1QTRDCi06MTBBQTQwMDAzRjdGQzQ3RUZBRjQwRTFFNDUxQUE3RUI0NzkxOTY2QjIyCi06MTBBQTUwMDBGRDdDODhGREE0RjdBRTlGQjA3NEFEMUUxRTY5ODVENjNGCi06MTBBQTYwMDBDRjExRUNBNzdGRUZFNkE1OThBRkQzQzM2M0FFRDJGQUMwCi06MTBBQTcwMDAzOTg5NzRDRkVBNUQzRjA3MUM3QUZDMUM3MDc0RTBFN0VCCi06MTBBQTgwMDAxQ0MyMzNBODc3RjMyQTcwRUFGMTUzRTBFQ0MwQ0YyNTVCCi06MTBBQTkwMDBFQ0U3QUFERUY1NzNDMEE5QzdDRjAxNjcwNzdFNDQwRUI1Ci06MTBBQUEwMDBFNjM1QUM3N0YzMkE4OEQ3RTNBNzIwQkUwMzNGNEUwRUU2Ci06MTBBQUIwMDBFMDE5RDEzQjc4NUVFREEzQzdDRkFCN0QzQUYwOTM4QTI2Ci06MTBBQUMwMDBGMDhDRUUxRDNDODUyOTdBRkMxNEE2NzRFMDQ3NDY3ODhDCi06MTBBQUQwMDBDNkY1QUU5RjU3NTNGNEY4NzkzNUE1MDMzRjU3NjEzRjRDCi06MTBBQUUwMDBEN0Y1NkU1RTg1QTk3QUZDMTRBNjc2RTAyNzE3RkJDOTE4Ci06MTBBQUYwMDBGNzZDNDc3ODA4RURDN0QxN0QzRjA3RkJFQkYxNzNCMEVBCi06MTBBQjAwMDA3RjA3N0VBRUM1N0VBNkQwN0VCMjdCRUVBNzI4NTM4RjkwCi06MTBBQjEwMDA5RkEyQ0MwRUZDMTQyMjlFNkZFODVEM0YwNzMzRjVGODMwCi06MTBBQjIwMDAzOTk4RDk4MTlGQTlEOENGRDRERUNEQUJFODBBM0Q3RTM0Ci06MTBBQjMwMDA4QUFFNjBGODk5MjQ4Q0MwNzU4NkFFOUQ2RTlFN0U3MjNBCi06MTBBQjQwMDA3REJGN0M4NUEzRUZGMzJFNTZFNzVENkUwMjc2MEZBRkQ3Ci06MTBBQjUwMDBEOTMzQTQ0NUUxRTlGQkY2MUQwOUI5MEY5MDY4QkJBNkZFCi06MTBBQjYwMDBFMDc2QzA4RjgzNUE3OUQxNzY0REZDRDgzODlEMUQ5NUZCCi06MTBBQjcwMDBBMDI0RUFFQTQ5QzU3RDc1RUZGNzI5MURBMDZCNEY5RDFBCi06MTBBQjgwMDA3M0I1QUUzREREOTNBQkFCNjc5NDhGRDdCRERGQkZBNjhBCi06MTBBQjkwMDA0MDU3QkZFMkVFMUI3NUVGNjdGOTZGRDFENUIzRDdDRjQyCi06MTBBQkEwMDBEM0JEM0ZBODdFQTFBRUZEQ0E4NjBBNURGQjU1ODE5NTQ3Ci06MTBBQkIwMDBCQUZBMzVEQjdGQTI3QjdGNTg3MDhEQUU3RDc4RDMwM0U4Ci06MTBBQkMwMDBCQUY2MTFFMTQ3NzRGNTkxODcxRUQzQkQzRkJBNjU4Qjg0Ci06MTBBQkQwMDBBRTdEQ0M4N0NGRUFEQUM3NDU3NkU5RUFENzFFREZBMzk4Ci06MTBBQkUwMDA3QkZGQkFGNjAzQkFGQUE0OEJCRkQ3QkQ5RjRGREVENTYxCi06MTBBQkYwMDBEQkRCOTYzRkVCREU5RkUyRkE0Q0Q3N0U3RERBOTcwNkYxCi06MTBBQzAwMDAzQkQ1RUUzQTc2OEQ1QUU3NDFBRTA4RkEyNUZFNzQwOTM3Ci06MTBBQzEwMDBFREQ1QjA0M0MyQkFENEQ3Q0VGQzE0Qzc1MkY5MjhFNTVCCi06MTBBQzIwMDAxRkU5QzAyMjM5MTlGOTkyRkU1MUJCMjFCRjZGRjk5NTc2Ci06MTBBQzMwMDAxMUZBRkNBRUYxOUUyQjVERjRGOTVEOTI2N0I4MkI4NjlDCi06MTBBQzQwMDA3RDQzRjk4RDIzNjk1MENBMjYyODhERURGNzg5OENERjY1Ci06MTBBQzUwMDAwQjMyMkUwRDNFNDJCRkY3OUFEQTA3MjdEMEZBNzAzRTJDCi06MTBBQzYwMDAzRjA4RjJGMTMyNjc0MkJCM0E4RTI3MzVGMDVFOUM5OTdECi06MTBBQzcwMDBBMERGNzQ1RjU2REU5M0ZFMjg3OTU4REY5RkRBMTk1Q0Y3Ci06MTBBQzgwMDA2N0JGRUI0NTRGMUFEQTUxQjU5RkY4QzFDRTU5RDc5RjMwCi06MTBBQzkwMDBDRUFCMkYyMUFGNzA5Rjg0RkQwM0U5RjdGRDk3QTY3OTE2Ci06MTBBQ0EwMDA2ODdGNjY4OUZBMTlEMUUzNEI3NEZDQTEzODdFMThFNEY5Ci06MTBBQ0IwMDBFMTIwOEMzRkJBRUJGOEU2MDE2Mzc1RTM1QjMyQ0I3NUJDCi06MTBBQ0MwMDBFMzVCMjQzQUJFOEI5MERGRDc3RUFFOEU0Rjg5MzA5RUY5Ci06MTBBQ0QwMDA5MDM3QjlDRjcxN0M3MzY2Mzk4RTdGOUY0NEZEQUVFOEEzCi06MTBBQ0UwMDBGMUUzM0FDNjZGODFGOUJGREZEREZDMDc4Q0Q3Q0YzRkI4Ci06MTBBQ0YwMDBCMzQyM0Y3Rjg5Q0RGRkEzREFEM0VBRjg3MTM4RkYzRjMzCi06MTBBRDAwMDA3M0E3RDlGQzMzMkJEOEZDQ0RBQ0RGOEVGMTlEMURGODk5Ci06MTBBRDEwMDA4RkMwRjhDN0JBMTlERjlDM0Q0MTNGRkYyQjJBRjVGM0RFCi06MTBBRDIwMDAzN0IzRjE0RkQ2NUU1MEM3QjdFM0Y4NUY3MjE3RDhGQzYwCi06MTBBRDMwMDBBRkE4QzRGMTI1QjNDNzBERkMyMzY1QzRENTA0RThGODVBCi06MTBBRDQwMDBBNDFGNTU3Q0E5QzAyRTc0MUMyODg3MjQ1MkExMjE2NEZECi06MTBBRDUwMDAxQjM3MDBFMUI4MkI4RUYxREI1NzcxOTRERjUwOUZGOTYwCi06MTBBRDYwMDBGMTM5MDk1MENEOTk0N0ZENDY5NUQ3NTdFQ0M4OTc0MDIyCi06MTBBRDcwMDBFRjYxM0JGNUI3OTZBOEEwMkU2RUUyOTFCRkM5MDY3M0FFCi06MTBBRDgwMDA2MDEwODVCN0I1ODlGNzQzN0RGMTg2RUIwMkEwNUZCRDAyCi06MTBBRDkwMDA2NkIyQTAxNEJFMTM0ODE4OUU3RkZFQ0I2MTVCQTJFNzhCCi06MTBBREEwMDA2NTJDOTdENDhCQzcyMjUxRjJENkUxMDcxNjkwMjEzNTM2Ci06MTBBREIwMDAxNEJFMjlDMDA0QTMzQkVCOUY1MjNGMEUxQ0UzOEZBOTk2Ci06MTBBREMwMDBERjQzQThGRkYzOTlDOEM2RkIwQkY1RjdBMDFFQTFGRTUxCi06MTBBREQwMDAxRTNBQ0VBNDE2QkZBM0REMUQ0RUEzRjA5N0FBRjA3RkE2Ci06MTBBREUwMDAyQTMwNzlGREY0MzYyRUUwQTdGMkY5RDU4RjQ3QTA3RkZGCi06MTBBREYwMDBCREUwNkUxQjQ1N0EyNzFDNjVGRTI0NUQ5RENFQ0IwRjAyCi06MTBBRTAwMDA3NDZBREY2RDBFNkNFMTEwQkYzMkUwNkIzQThBMjYyMTY2Ci06MTBBRTEwMDA4QkQ2Njc1MDVDNzdCRUZGQzFCRUE5MDczOTI3MjFCNzIzCi06MTBBRTIwMDAxMjQ1NENBNUVGREZCRTlBRUJFRkEyRTNDRTUyQ0NCOUIwCi06MTBBRTMwMDA2QzFENTIzMjRDMjhENzI0QzMzNDk2OTA1QjFBNDc4ODM1Ci06MTBBRTQwMDBCNDA3MzI1RDExM0Y4RDQ0OEQzQkEzNTg1RjlGNTVBQUQ3Ci06MTBBRTUwMDBBRkI3OEE4QTY4QTI3MEI1NEVFN0M4NjZEQUVGRUMzOUY4Ci06MTBBRTYwMDBGQTc2NkQ5QzgxQTY0NDQ2Njc3NUJDNTI4QTkzNzRGQTQzCi06MTBBRTcwMDA2ODM2OTRCOUYwRDg4NTc0OUVFMzYyREY2QUYwNzgxNzdCCi06MTBBRTgwMDA4OTI0OEM3RUJDQkYwRjAxQkFGQTkzRjFCRDc5MkUzNkFFCi06MTBBRTkwMDA2RjIzQkM3MzQ0OEI1MjRBRTczOUE3OEMwRjAwN0YxQjhBCi06MTBBRUEwMDBFMUZGNjg5RjREMzFFNUQwNzJGREEzMjIzMTc1OUQ4RjgyCi06MTBBRUIwMDAxMUZFQjkxRUUzN0M4MjIyQUNGM0YzQ0I4RENGMTlERkY4Ci06MTBBRUMwMDAxQzUzRTlGRjI5RjAwNzJEQkYwMEZFQTBGMDFGNTVGOTI0Ci06MTBBRUQwMDBBMzUzQUYzMkZFRjA5QTNERDM4MDFGREEzN0YyMDRFOTc0Ci06MTBBRUUwMDBBQUYyQ0JBRDJBQkYyQ0E5RDdGMzA1MjExRTExRThCOEQxCi06MTBBRUYwMDA2QzBFOTdGQjQwMTQxRkNDNTZGOTYwNTk4MzlFNkY2RTAxCi06MTBBRjAwMDAyNzdFMzEzRDA2NURFNjZFRDg3QzZGOUFEQzc1N0U5RkFDCi06MTBBRjEwMDBBODdDMzNGRkMxRkQ4ODlGQUVGMzY0NzRCQTQzQTVEMzA4Ci06MTBBRjIwMDBFRDM1RkFGNjVCNTVCQURFQUVEMjc1NEVDM0MzQUY1MUZFCi06MTBBRjMwMDBGNTQxRTZDOTAxMTFFNERERkI1MzhEOUUxMTFEM0QzRDM4Ci06MTBBRjQwMDAyQTNEOEQ3MERFQTFEMkYzOEUxRjMzN0ExQUUxOERBOENGCi06MTBBRjUwMDBGNDhDMzQ5QzEzQzk4MEFFRjAxQUUxNUI3MDc3OTdGOURBCi06MTBBRjYwMDA2MDVDQUJDQzFGOUI5RURFQTZGQzU1NDdBMzlFNTcwNTlECi06MTBBRjcwMDA2RjU4NzUzNDRBQ0U1NjZDOUZBRUFCMkYwRkNDRDVCREYzCi06MTBBRjgwMDBCRkFDQTE0Q0Q3QkVBNDdFQjlBRTdERDFGQTNCNzVGNTVFCi06MTBBRjkwMDAzMkZGOEY3NUVGMkZCOEJCNTZENzdFN0JDREZEQkFGNjRCCi06MTBBRkEwMDBGOUU1MEZFQkVBNzMzRDFCNzVFRkNGOUVCMzU5RDczRTIyCi06MTBBRkIwMDBBQkY0MTk1REZCOENFMjlEQkFGQTc0NjVCN0VFN0REM0Y0Ci06MTBBRkMwMDBCRUFCNkUwNkZFN0NFQjNEOUU4MDNENzFDMUZEMDVDNkFECi06MTBBRkQwMDAzMzJGQjg0NTM3QkM3M0Q0MjcyMzVGMUZGMzBEQzFGMjVECi06MTBBRkUwMDBCOENGOEQ3QzdGRDIzNzE2Q0JENkE2NjYzQkFDMTM3NDE4Ci06MTBBRkYwMDA1RDVDNEExMjA4NjkzMkNEQUI1RERGMEZENjY5ODJFQjJBCi06MTBCMDAwMDA2OUM4RTRBOUY1RDM3QUIzNDk0Njc5Mjg2OTkwNDg3OEE0Ci06MTBCMDEwMDAyNDIxMUMyQzM2MkExQ0VEN0M1NDdCQTQ4N0Y2MDZBQTFFCi06MTBCMDIwMDBGODkzQkFCNjk3NDQ2MjNGRjczRTUyNzYwNUYwNjU3N0RCCi06MTBCMDMwMDBFQjAzRkRDQjAwQkJBNzREQjVFQjhERUQ5NTFDMjk4RDJBCi06MTBCMDQwMDA3RTRFQzgxQTg0QzM2QTYyNzY0N0E1QzRFNEJGNzI1N0FECi06MTBCMDUwMDA3QTAxNzE0MjNEM0NCOEU2NzJFMzA1Mjk5M0E3MDI5RjRECi06MTBCMDYwMDA2NEVCRTQ3ODU5QzMzNTNBRkQ0RTIwOUFEQzA3Rjg2RDVECi06MTBCMDcwMDBBNEVFRjk4QUVERDdFQUJFM0JCNTlGNDdCOEFCNDE1NzdFCi06MTBCMDgwMDA4QzgzNjVCMUY0MzMxM0U4RTE3MDczRTY4QzYxMDBBNzNCCi06MTBCMDkwMDA3MjE0RUI0RDdERDAyRTNDRTUyQjVFNzU3NDEwRDBBRjU1Ci06MTBCMEEwMDAxNENCRTNCRTM5NTgxRUYzNzlCMDNDRUEyQkM3RjI1M0Y4Ci06MTBCMEIwMDA1RjBEOTYxMURGREQ1OEZFQzVFN0M3RjI2M0RGN0EyQzFFCi06MTBCMEMwMDAzRkYyRDU2M0Y5QTFBRjAxQ0JGNzdEMDEyQzBGRkJCNkExCi06MTBCMEQwMDA2M0Y5OEUyRjg4NjU4QkFGMDlDQjU2OUY4MkE1MjY3N0EzCi06MTBCMEUwMDAzREYxREQ3MTc1MUQzRTA5RkMxNzgzQ0ZBNDNBN0ZFRDVDCi06MTBCMEYwMDBGQTA5OUQ3QzE2QzdERjg3N0NBNkUxQjlBNEMxQUNGMjMyCi06MTBCMTAwMDA0MzhBOEUxRjEyQzA5NzQzM0VFQkExQkQ0MTU0RjlCMDU0Ci06MTBCMTEwMDBCQkVGNjNCNzdCQjdGQzZCRjg2REVBMEZFNEI3NEU3RTBECi06MTBCMTIwMDBDQTMwRjA1Mzc2NEZGQzM0OEM4RkUyQTdBOTI2MTdCM0IwCi06MTBCMTMwMDA3QjU0N0VGQTE5Q0MyMzg2NUYzMTBGOEM5MDNFNTFGNkZBCi06MTBCMTQwMDA5QTkyNkY4Mjc1NkNBNUJBMEY0MjFGNjBGREFDM0E3Njc5Ci06MTBCMTUwMDAxRDdEQjcwNUVEQkFDMDEwNTgzN0NFMEVGOURCNjBEOEFCCi06MTBCMTYwMDA0NzM4RkIyMTI1N0U1NkY3RjMzM0YyNDlGNzc4NTdEMDVECi06MTBCMTcwMDBCRjU5MUFBMDQ0NEZFQURBNkU4RDYzNzhCNTlBNDgzMTA4Ci06MTBCMTgwMDBBMUVCREFGRDgzOUU3MjJGMUM4QTc1ODEyNEMyRjcwMTIwCi06MTBCMTkwMDBGNzc0NDc4QzdFQTlBRDBDRjhFRDA5QUY3NThFQUY3MkQwCi06MTBCMUEwMDBBMEJGNjM4RkZEM0QwRkNBQTkyNjY2MkZDNzM1RjM2ODgwCi06MTBCMUIwMDBCNzkzRjA5MzZFQzA2RkM3QkE2NDc2QTc0MUJDQkQ3REVDCi06MTBCMUMwMDA5MEU0NDJCQjgxNENENkUzQ0Y1RkEwQzNERkZEMTQ0N0MwCi06MTBCMUQwMDAyREI4RUVENkE3MjFGRTA2N0UzNTM4QkQxN0Y4RUI0OTBGCi06MTBCMUUwMDBCRkY3ODRDRjg1MzBFRjdGMDEzRTdCRDI4RjNERTk0NUFECi06MTBCMUYwMDBBMkM4MkYzNEQxRjlCN0VEMUI5NkZCODAwQ0UzNUUxRTdECi06MTBCMjAwMDBERkRBRkU5QTExOUU1RjdFNDczRTZFNEJEMUY4QjgyNTdECi06MTBCMjEwMDA5MzgwMUZBNENBQ0JEOUM2MkJFMzgxMkUxREZERjQ0MDE5Ci06MTBCMjIwMDA0RkVFNzc5RjY0ODJGRjdFM0E0QkRGREY3REM2RkVFMjAyCi06MTBCMjMwMDAyNUMyMERBN0UzM0EyNDg5QzQ1M0JGOTJGNzZDRTNEMTJBCi06MTBCMjQwMDA5RjcxNDdGQzEwMzdEODY3NzNEN0M5RTAzNzlFRkNBRkIyCi06MTBCMjUwMDBCMDBDM0RFQkUzMEI2NzBGM0RFOTA0M0Y2QzY1MUE1RkYzCi06MTBCMjYwMDA3MzM0MDYxREI1QjIyQTk4NTU2MzhGRjY1NzlBRjRGNUQ0Ci06MTBCMjcwMDBCM0Y1NUM3MTEwRTcyNUM3Q0YxQzA2RUI4Q0FCRTZBOEQ1Ci06MTBCMjgwMDAwODdBM0YwRDRCQUQ5Rjk1NjkxMjhFNzM3MjdCNzYzQ0E5Ci06MTBCMjkwMDBGM0ZGMDI0QzlGRUM0ODQwN0Q3M0QyNjdDMUY3RkZEOUEyCi06MTBCMkEwMDBGMDc0RDc4RjA2MEYyMThERTQzMzBCRTg3M0RBOTZERDQ3Ci06MTBCMkIwMDBGREZCRERDQTgzNzA1RTgyRjgyOTA5ODk1RjgxQkY2OTYxCi06MTBCMkMwMDBBNUZGN0YzQjAwRkExNUIwQUVGNUVCMERGMjdFRjM3MEYzCi06MTBCMkQwMDA3OEJFNDMzNzFFRkQ0RUQ2RjY4Q0UxQkJFRUU1NEUyMDIwCi06MTBCMkUwMDBDNzM0QkVBN0Y0RkJBQkJBQkZCRDYyQkJCNTQ2NkZDN0UwCi06MTBCMkYwMDAyNkU4RUFERUE2RjQxQTlENUQwQkZGMDBDM0JEODYxM0E3Ci06MTBCMzAwMDA2MDA5QUI1NEQ5QjA0REIwQUYwNzdFREEwM0MxNDlGMDQ0Ci06MTBCMzEwMDA1RjM4RjY1RTk1MjUyMjc5NjQxNDk3MTZFMEQzODU2MzJECi06MTBCMzIwMDAzNUZFOTc2N0ZGOTlFQUE5MTM2RjhBMDRFNDhDNUNBMjQzCi06MTBCMzMwMDA1MEU1QTlBRTIwRjI5Qjg5OTg2ODdEOTFGQUY2QzJDNkM1Ci06MTBCMzQwMDAxNTI1QjA2RTlENzhGOTI2RjQ0MzE2OTM1MjI3RjhDNzU5Ci06MTBCMzUwMDBFNUE0M0UwRkUyQjVBNzg5QTkxOEU0RjMzNDc5QzczOTBCCi06MTBCMzYwMDAzMjRBMUVBRDgyODQ5RDJFNUFBRkI3RTNBOTdGQUZBQkEwCi06MTBCMzcwMDAyRjZCRDBENzk3OTI1QjUyNjBERjdFRTkwNjkxMDQzODNECi06MTBCMzgwMDBEMDFCRkFGNkFGNzkxN0Y2QkI4Q0Q0QUM4Mzc1RkI1NzlDCi06MTBCMzkwMDA2QUJDNkJBMThCMDgxOTU0NkY1NUZERjZGMUJDMzIwQURCCi06MTBCM0EwMDA4NzRCNjA3MTE2NkQxRjdBNzkyMkYzN0YyQTY2MDYyNDE3Ci06MTBCM0IwMDA4NUJFRkY1OUUzQzg1QkE5MDZBMkRGMDdENkMxN0VCQ0U0Ci06MTBCM0MwMDA3RjNBNzE2RjIzNURFOUY3NURFMTM3QzJBQkQ5MDM1RDY5Ci06MTBCM0QwMDBGNkMzNTUzODkyQjc3MzRBMjA4NjFFQ0IxNDM4MjY2N0I5Ci06MTBCM0UwMDBBQUJFMkIxMDVDQkFCOEM3MzQ0M0ZEN0JGMzUzMzJEMUVECi06MTBCM0YwMDBGMUQzMUVERTkzMjc4QzY2RkMwM0ZDQzAwOUVEOTJFN0I3Ci06MTBCNDAwMDA4N0Y0OUZENkE1RkY4MjdGNkFGRkZENjhGRjc5QkFGRUE5Ci06MTBCNDEwMDBBN0ZENTNGQjFGRDgwNUZFNzlCMUZBQUZGQUVERjMyRjY0Ci06MTBCNDIwMDBGQkE5M0VBOTc4RjE5NzRFNDJEN0M5MTM0MjdEOEE5QjZBCi06MTBCNDMwMDBEMkI1NzJEQkJENEU4NTk2QzcwNUJGMTNGOEY1NDQ4MEMzCi06MTBCNDQwMDAyRjhFNDVFRjg3MDU0RTE1NDJDNUNFNDFEQzBERkU0OUQ2Ci06MTBCNDUwMDBGQjNGRjlFQ0NGMzAxRUYxRDUzNkQxODVGMUI0RURFNkU2Ci06MTBCNDYwMDBCMDk5Q0E2MTc1RTNGMjEyOTI4M0Y1MjNBQzdFREYxOUJECi06MTBCNDcwMDAxRUVBNEQ3QUZFQUI3OEZBOTcyOTkwMUY0MjM5NDU4RDI2Ci06MTBCNDgwMDAyRjg1RDE5RUFEREVGQTc5MTFBQzRGNUVEMjhFNzI2NEZCCi06MTBCNDkwMDBGQzBFQzZCRjk4ODhGQUFGNEM4QUVGREE0RUUxQzQzODhBCi06MTBCNEEwMDA4MTU3QzU4QkI3RjE2NzY3NzgyNzk0Mzc3QzAxRkE4MjlCCi06MTBCNEIwMDA3QTIyRThDNzFCQkYyQjU3RURENDM1ODIyM0Y5OTg4RDJDCi06MTBCNEMwMDBGRTdCMEMxOTAzN0E1MUMzMEIwOTMwM0JCNUVFOTk1RjMzCi06MTBCNEQwMDBFNzFDQTE3MDlEREFGQUE2OTM4QkMyOTcyNjRGNjc4MzZCCi06MTBCNEUwMDA4QkZFNzM4RkRDQkRERTZEQTVGMjE2NkQwRjY5RUI5NkRBCi06MTBCNEYwMDBEQ0E0REFENzIxNTY1NjhBNjEyN0U0RjM1NDZFMTZEREIwCi06MTBCNTAwMDA3RUZBQjhGMkY5Mjc5RjdBMENFMjk5N0YzMkJCMDdEMTE1Ci06MTBCNTEwMDBGRTU3M0NGRkRBRkJFMzY5N0RDNTRFMzFCOTg0NERDMzZDCi06MTBCNTIwMDBDRUE1NzREMkM3NEJGRkJGM0JCNzkzMUUxNUJGNzk0RDU1Ci06MTBCNTMwMDA5Mjg3QjFFN0Y3MjQ3NkQyNjVDNUNFRkQxMjE5RDYxNUVDCi06MTBCNTQwMDAxRjkzODNGQkE1ODgzRDA2N0Q4MjQ3OEFDMDVFQTg3QjRBCi06MTBCNTUwMDBFNkJGMjU4ODMzOUVEOEM3OTFENEFDMThGOERDRkMxQTE2Ci06MTBCNTYwMDBEQTAzODAyN0E0QTc0QUFGMEVGQTE5REVGNzUyQkE4MDkxCi06MTBCNTcwMDBERTM2RDJDQkY4REUyMjU1QkY0MEJGOTA2NzQxRjlGQkUzCi06MTBCNTgwMDA4NTNEOTAwN0Y1OTFEOTBENzgyODdGNjE5NTEzRTZGM0Y1Ci06MTBCNTkwMDA4NTUwQzNGOEZDRjE3QjUzNDA5Rjk1OEJGRTE0MTc5NkEyCi06MTBCNUEwMDBFQzc5RjkxMzNGNDJGRTVCRjZGNjhGNTIzMEJFNDQ5NEJECi06MTBCNUIwMDA3NDEzQUU0NUZFNzQ5OEU3OTI0REIzNzA5RTRCODkwN0E1Ci06MTBCNUMwMDBGOUIwRkM3MUJFMzQ0MENCMEIwMjI5REUxOTQzNEVBQ0ZFCi06MTBCNUQwMDAyMjkzOTMyRkI2NTBFMkQyNzk3RTAxRkUyNEU4RUY3N0QyCi06MTBCNUUwMDBGOEMwMzZCNEJCRUYyNEEwMEY3RUE0Q0U4NTVBMEM1ODA5Ci06MTBCNUYwMDBCRjYwNjFGNEZBQUJCQTJFMTBCMDNFQTNGOTc3RUI3REQxCi06MTBCNjAwMDAyRDQwQTc5M0ZEOTU1NEQ4NzdGMTEyQzFBRkUyODNGQjhCCi06MTBCNjEwMDA5NkY2Q0JCRjNEMjU5NUQxODlDODQyOUVGQTFENURGN0IwCi06MTBCNjIwMDAyN0MzNzM3OEJGNDU1NEFDMzlCQUVGQzhCNzU5OURFMzA3Ci06MTBCNjMwMDBBRjU2QzdBNzcwQzdDMTdBRkQ0NTRBNkNGQjM1NEZENERBCi06MTBCNjQwMDBGNDAwNURCN0EzRjgyQzRBREU5OUZDNkZCRDlGQzlCQjFGCi06MTBCNjUwMDAyNkZGODFFOUM1RDA3RUZFMzA5MzIzRjgwRUQ2NDMwQTNCCi06MTBCNjYwMDA1NzM4MTVEQkY3Q0ZFNDUwM0Y1MDNGM0E5NjlDNkYxNUEzCi06MTBCNjcwMDA1NTM5RDdCNzFCRjk4NUMyMkY3MEYxNTE3QzAzRTMyNEVDCi06MTBCNjgwMDAyMjFENzBERjY1RTkwNkZBN0Q5NDFFRjVDMkI4Q0VBRUM0Ci06MTBCNjkwMDBGRDZBNzJCQzRDRjM1QjQ1QkQzRTIwOUI5ODFFRThERTA0Ci06MTBCNkEwMDBBRUYyMjM5RTJBQzVDMDUzOEY4MUZDNTI3OUY1Q0IyMDgwCi06MTBCNkIwMDBCRjYyMjlDQ0ZGQ0IxRENERUZDRkEzNzJGQjY1NTA5M0FBCi06MTBCNkMwMDA1QkJENUUzNUNBNkRGOUFFRDEyNDk2REM3RTY5Nzc5Mzk5Ci06MTBCNkQwMDA5ODcyNEI5RkM3OTQ1QjdCMDRGOUY5RkZCNDVFRDVGMDc5Ci06MTBCNkUwMDAzODBDRjA3ODREMjcxRTM1M0REOTFEM0U4RDdBRjI5MEVECi06MTBCNkYwMDAyMDIzNUU4RDdBOTJGRTFEMjY3OTVERjk1MUUzNDM4REZDCi06MTBCNzAwMDBGRjJBOUVBQkJBMDJGNDUxMDc5RjZBN0NEOEMxQTcxQUUwCi06MTBCNzEwMDAxRjc2ODlFRkVBRjA2ODZDQkYwMEZCMzQxNEFFRjk5NjJGCi06MTBCNzIwMDA4REQzOEU1MjU3RDJEMjRFNzBERjI2N0YyNjhGRkJBQTQyCi06MTBCNzMwMDA5NkYzODRFNTgxMTAxMUYzNDMzRjMwRDU4QzA2M0I3NUI5Ci06MTBCNzQwMDBFMkRGNkYzRDdEMTc4NTc3M0VGMThCMkMyRkEwNUU0NEE1Ci06MTBCNzUwMDBCQkZGRDJCN0RGNEVBMEYzOTlBN0UyNzkzRTQ1RkI1NDc5Ci06MTBCNzYwMDA0QTk3MzkwMjE3OEVBMzcwQ0UxNTg4M0YzRTExRTJCNzczCi06MTBCNzcwMDAxQ0Y5MzQwQThFRjlFNUZBM0FGQzRENENFOUVDQTdBNzFFCi06MTBCNzgwMDBGN0JGQUI5RkYyN0RDQkI3Mjk1RDNGMUQ0NEM4QkI1MENGCi06MTBCNzkwMDA4QTM4QkMxMENENTdEMzgxQUUxNDdGREU1MTVDNjAwMDc3Ci06MTBCN0EwMDBFQUE5ODg1MDFBRTU3N0JEMjAzMkZCRjNFREMyMTlBMzUwCi06MTBCN0IwMDBDMUJFQzk5RjNEMkM5RUYxRkI2MEY0N0JCREFBM0UzQjAwCi06MTBCN0MwMDBFQjk3RTM0MUNGOUYwRDY1QTM3RjdCRjZEMDIyNDdBQzdCCi06MTBCN0QwMDBCQ0QwNjY5NUNGNUU1M0Y3NUREQUVDNUMzRDRGRjlCRkE4Ci06MTBCN0UwMDA4REI0QTM3REUzQjc1QkM5QjYxOEZCODIxQjQ1NEQ1RkUzCi06MTBCN0YwMDBBQjc0QTM3RjNDMUQ3RjhFQ0E4NzczRTlBN0YxQjk1MTUzCi06MTBCODAwMDA3NDlCMzlGNTg0RTBFQzRBMDdGOEZCMzRDQTBGRkJBMUJFCi06MTBCODEwMDBGODA1QkUwNkZDMzY1QjIzNDVBNTMxRTI3OUNGQTlGOEQxCi06MTBCODIwMDA5Qjc4RTA2QkNDQ0YyRDBDRTUwQjgwQzc0MjNCQUY4QkY4Ci06MTBCODMwMDA4MzNDQTlDOUVCNTAzMjE0RTA5QTc4NjBGOUNGNDc1M0EyCi06MTBCODQwMDAzRUY2MUVFMkREOTA4RkVCMEQ5RDkxM0MzMUZDNjEyM0I1Ci06MTBCODUwMDAzRUExN0ZCMDMzOEY4ODJFQzRENzdCNjJFOTEyQzBFQjQ0Ci06MTBCODYwMDA3QkIzQUMwNEY2MzVERjk1REM1NUIxRTAyQzMzQjNGNTkyCi06MTBCODcwMDA2NjJFMjlCRDMwOEFGQkJGMEZCRkY5QjMxREUxMDI4QUQ2Ci06MTBCODgwMDA4RkIzNzY5NkY3REQ5NUZGOThEQzlGNzU3MTgxNUEwRTIwCi06MTBCODkwMDBGODkwNjdGNTY0MkUwMDcxQjQyMkUyRjlGOTA0MEVFNTIwCi06MTBCOEEwMDA3RDUyQjRGRUNBNkY5QUZFM0NFNEY1NTQ4NzM4OTc4OUZFCi06MTBCOEIwMDBCNjU3MEIxMTA5RjhEOERCQjQ1MzAwRkJGRDI2OTkyOEM1Ci06MTBCOEMwMDAxODhGMTA2QTg2Q0Q4QzhBN0IxRDExMDVDNDU3RjNERjUzCi06MTBCOEQwMDBFNkREMEVGODNEMzdEMzRDMDAyRTY1RTgxOTI3RDgwMTc4Ci06MTBCOEUwMDBFNzQyMjM1MTBFQkE5QkQ3MUY3QzY0NUFBMTA4RkQxMDcyCi06MTBCOEYwMDBFNDBGMjMzRjE0MjVEQjc0RjU1OTkzNDkzRjM3QTVEQjRCCi06MTBCOTAwMDA0NDczNjQ5NTNCMDZGREVBMjRDNjY3QkRENjZGOTZGRjc3Ci06MTBCOTEwMDBDRkY0REIwNEFBREYxODVGOEJEMUZBRUQyNjg5RjE3RDI1Ci06MTBCOTIwMDA5NDdFNEI4REE1REY1NkQ2Q0FBOUMwMTcyQkY3NjZBNzA0Ci06MTBCOTMwMDAwMjVENTdCRUIxQTQ0RjJDRkRGNkJBOEZGOUY3NkZBODgwCi06MTBCOTQwMDA3OUU2NkRGREE4N0UxQjFFQTVERkZBNTFGRDE2MjNBRTFDCi06MTBCOTUwMDAzQjVBRUFBNTdFQjNGQ0NGQzhERkVCQTBERjYyQ0NCN0QxCi06MTBCOTYwMDA1OEM1OUZBNkRGOEE0M0I1QThERjhBRkJGMUJBN0NBOTM4Ci06MTBCOTcwMDA0OTUyNEZGQUFERUM5N0IzQjAyRUJBNkQzMUY4MDdGMERCCi06MTBCOTgwMDAwQUZBRUQwRDU1Q0ZDMTM4QTBFN0ZFNUQ3MjdEMjczRDY3Ci06MTBCOTkwMDA1N0Q1NUIzREY3M0Y4NDY3NERDRkFERUNDRkExM0REMzhECi06MTBCOUEwMDA5NTBGOTk5RTVCOTlDNUY0RENDQUJENENDRkFEMUNDNDA0Ci06MTBCOUIwMDBGNDlDNTFCRjE1NzREMTZGRUNGQkVBMjFGNDdCRjQyM0E2Ci06MTBCOUMwMDBCMzdFN0QxQjZEMkY5OTIzQkEyREY0RkQxMjU5M0I5RjM5Ci06MTBCOUQwMDA1MTMzM0E1QURGRkRCQkQ0OERCRTczOUZDMTczMkUzREU4Ci06MTBCOUUwMDBFOUJCM0Y4MkJFMUI4NDdBNkMyMEM4OTE5MTNGNkUxQ0RDCi06MTBCOUYwMDA2OEQzRTVEM0JERjdGNUIxRTc1RTA0NzlGOTAzOEZGRUFGCi06MTBCQTAwMDBGNzA3MjZFNjI3RURGQkZBRDg0ODkwQkJGNzAwMUVBQUY5Ci06MTBCQTEwMDBFRjlFNTFGOUFGRDVFNzQ3N0QzQTc5Mjg5M0Y3QUE3Qjk2Ci06MTBCQTIwMDAxOEZFQUExQjM5MzZERkQ1N0M0MDg2NzVFMDZGMTdEMTJBCi06MTBCQTMwMDA4RkJFN0QyRkYzQTM2NzlCNUJGQUQ4QzBDRkZGNUYyMjM5Ci06MTBCQTQwMDBDQTI1RkQyQjI5OEJFMjg3MzkxNzJCMzBFRUI5MkJDRTc3Ci06MTBCQTUwMDBCOTA1RkNDQzM5MDJCMTgwMURCQkUwRDA4RDI3QzA3RTdBCi06MTBCQTYwMDA1RDcwNzEzRERBQkQwQkUwNzkyMkU5QzhGQjk4REJBMTdFCi06MTBCQTcwMDAyN0Y1RjZFQkJDQTY5REFGNjU5MEFFRjkxMDEzQ0Q4QzAzCi06MTBCQTgwMDAyRTEzNTc3MTgxQ0Q1OTVERjMyM0E4NUQ4NkY5MkRDNjFDCi06MTBCQTkwMDAzQzg5REZBQkYzOUZDRDQ3MTA1RkU0OEY3Q0NDRjhFNUFBCi06MTBCQUEwMDBFRjhENzg3MjMzQkM1NEFERTZGNTc4QUFFMTYyRTI4OTk1Ci06MTBCQUIwMDA1MkJBQTQyQ0E1MTMyRkI3QkYxNDU5OTcwMUVEQ0IzOTU3Ci06MTBCQUMwMDBGNEI3OENGM0Q2RjA2NjlDQkY4NjQ3Q0RCRjU5QTBCRUI1Ci06MTBCQUQwMDAzRjNGNzQyNDY2OUU4ODg2RTcyRUY5MjIxQURFMERGODExCi06MTBCQUUwMDA3ODRCRDMzM0Q3OTA2MTIwOTcxRjk4M0MzRjFGMEQ3QzM0Ci06MTBCQUYwMDBGNDdCOEExNzBBRTdBRDczMDdFOUNFMkJCREEzRTI2NTk1Ci06MTBCQjAwMDBBQUU3NDg2MThBMEM3ODI0MzVDMDY3RjNDQTc3QkU5NkU1Ci06MTBCQjEwMDA0MkU3NzdCMzkyOTUwQjIxRjU1OTdGOTMzQzEwOEY2OERDCi06MTBCQjIwMDBCNkI2QTMxRUQ0Rjg3MDk0OTlDOTg1NTlENTJCRUZGNUY0Ci06MTBCQjMwMDA3NTE1RTI3QUQzQzRCOTUwQkVDMjA2M0RBN0U2OTk3OTFECi06MTBCQjQwMDBFRjYxRjJEN0NDRkRGN0JBOEM1MTg4Njc1ODJFNDg5MTM3Ci06MTBCQjUwMDBCNjVFMDE1REU4M0ZBNzg2MTg1REJDNDAxN0ZBQ0Y2OTY1Ci06MTBCQjYwMDBBNEZEMjBFMEJEM0E5OTczODdFMUZEQTY5REY3MDIzRjUxCi06MTBCQjcwMDBCRDZFQTVDRjQxQ0VDQjM5RjcxNjg2MEU3QjdBQ0E2NTRFCi06MTBCQjgwMDBGOTU4ODhDNUM3MThDQ0M4RUI1QzNGMTdDMDdCODk1REU2Ci06MTBCQjkwMDBFRDkzODlFNjk2RjcwMDhFODk1NDZFMzZDM0MzMDBGRDk3Ci06MTBCQkEwMDAyRjhBRkU0NkZCQzVDODA3M0RFNTAzNzVDN0VGQjkyQUQ2Ci06MTBCQkIwMDA5RTVGMDczQUQ4MDFERkVEMTJEODQzREUzMDVCN0ZCNEQ5Ci06MTBCQkMwMDA3NkFGMjAxNzIyREUzNDNBMzREMUY1NjUxNEEzODMyOUU5Ci06MTBCQkQwMDAwNjlFNkZENkVBMkE5RUJEMjE0RTg0RUY2RkEwRkU2RkFGCi06MTBCQkUwMDAxMjA3QkI3RTVGMUZENEY4REQyQzc3QzUxM0M0MTVEMkI2Ci06MTBCQkYwMDBBM0Y0MDZFOEI3RTg3RENERUFBNkI3MTE1RjM3QUVBNjk1Ci06MTBCQzAwMDBFNjk5REMxNTVGMUE3RDQwMEY1RTBFNkZERENBNEZEM0RCCi06MTBCQzEwMDA5MTk4Nzk2MURGNTU3RTQ2OTlGNUYyQjNDRkRBRkVFNjY5Ci06MTBCQzIwMDA3MDg4QUJFREU1NTBBRjkwNTA4MjJFN0UzMEQzQ0NFQ0Q3Ci06MTBCQzMwMDA5NjY2QUIwN0Y5QkNGRDBERDFCRDQ1RUVBQTdGQTZBODVGCi06MTBCQzQwMDA3NDAxN0YyNUZBN0NFMjY0OTgwOEU4NEQ5Nzk1N0NBNkZDCi06MTBCQzUwMDBDRDdCMDBFM0I3RThGNUUwNzVBQjA3RTlENzVERkYzM0NGCi06MTBCQzYwMDBDQ0NDRkVFRENFMUVEM0VBRDdDMzc4OTBENzI4RUJDNzU1Ci06MTBCQzcwMDAzM0FFNDc1QTVDQTlBNzc5NzlENDcxQkZFRkJDQjQ3MUQwCi06MTBCQzgwMDBCRUVCQkU4NDk3QjQ2MDNDNEVEQjlGRDhDMzdCNzY4OTA1Ci06MTBCQzkwMDA2MDNGMTY3M0JBN0QxMDBBMzlFRTZGRkUxM0ZBQkY1OTcyCi06MTBCQ0EwMDAxQUREN0RGRjEwM0YwQTUzM0NCRkJFRTM0OThDNjM5RjAyCi06MTBCQ0IwMDA3RUY2QzgzNDkwOUYxNUFGRjBDNDQyRTVBRjc1ODc4MzE4Ci06MTBCQ0MwMDA4NDU5OUU4ODA0NzY0MjQ1MjM4RkZCNUQ0NDA4RTdDRDY2Ci06MTBCQ0QwMDA4OEIyMzNBODI3QzNGMEYxQTIwM0Y1NUVDNTJFNzNBMDg2Ci06MTBCQ0UwMDA4NDdFNUZGMUYyNjczOTEwN0Y2QjVEQzNGNDlGRkY1OTZCCi06MTBCQ0YwMDA5NTFGRkQ5MTFDQzgwN0E4MTBEOEZFQkM5MTNFOEZBOEM3Ci06MTBCRDAwMDBGQzc5NkFCNzZEMEVFODZGNkUzQjNCQzc1QjExOUMyREVCCi06MTBCRDEwMDA5QUEzRTIwQ0Y3OUI0NTE2RTdERTZEQzMzQzZDRkYzMzNDCi06MTBCRDIwMDAxQ0U2MzEwMzdDRDFFNzQ4QjVGQ0QwNTNDRjMwQkQ1Qzc1Ci06MTBCRDMwMDBEMTI0MDZFMDNDNzBDNUY2OURBRDEwMTdBRkY4RDA4QzRECi06MTBCRDQwMDBGNkFCNzdGQjE5MDlFQ0QzQzkyRjNFQ0ZDRTFCMzdGMUU5Ci06MTBCRDUwMDBCQTc4Njg5NzM4RTQ3NjNFNkM4NkY4NTk2MzE1RUEwMTNDCi06MTBCRDYwMDA1QTNGODJGNUEwMUFGN0ZCOEU3MUIyMTUyRkVFN0REOURFCi06MTBCRDcwMDA0RjUxQjhFMjM3NEYzQkYxNUM3MENCMzYyN0M2MjNCNzQzCi06MTBCRDgwMDA1RjdFNUZBMDRCREMzMTc4QkYxQTc3OUNGQTA1QzFGNTY2Ci06MTBCRDkwMDAyMTc2RENGMUE0Q0EyNzIxQjMzRUVFNDhCNjI3NjEzQ0U4Ci06MTBCREEwMDA5MkMyOTk1NzFBMjM3RUQxQzFGRkNGNUY3ODAyRjZDRDk4Ci06MTBCREIwMDA0RUVERkFGMjA5ODBCQkYyOUI3MzRGRkM5NEUyOTMyQTlBCi06MTBCREMwMDAyMDE3QUNEQkRFNjdERkMzN0QwNkVEQkJGNzU1N0REMjA4Ci06MTBCREQwMDBGQUNDRDNCODRGRDNGQTI3QjMxQjdBNkJEREZCNDUyNkQ5Ci06MTBCREUwMDBFQzUzQjRFRUZDM0EwNUUyQjhBQkY3NEU0MTdGNkRGNThCCi06MTBCREYwMDA0QjkzNTM0OTBDN0Y0MDJCODE3RjAzQkREODI3MzJEMjEwCi06MTBCRTAwMDBBREI5QjEzOTEzRTAzQzRERTkwRUVCNzc0NzNDMzk1OEY5Ci06MTBCRTEwMDBDNUUyRjRCMjFBNDdERTExN0I1RkFFNEJEQ0I4NzFDNkU3Ci06MTBCRTIwMDBDREQ3QzEzQURFMjhCQTY1RDI4QkY4RjE2MTRBQ0ZFMUFECi06MTBCRTMwMDBCREEwRTMwRTc1OUYyMDM4RjVCMkYxRTNEM0YwMEY0QUIxCi06MTBCRTQwMDBBRjBCNjY3RDFDRkU0MkUzOTJGRjdDMENEQTFBOTNCQUJDCi06MTBCRTUwMDA4RDFGODc3QjgxM0Y2RERGNkZCRjU5MjExNjkwQTM1RERBCi06MTBCRTYwMDBDRjYxREMxRUU4NDc3RDBGRDJGQUZDODU0Qzg4QkIxQ0Y1Ci06MTBCRTcwMDAxN0RCRUZDMEZDRUJCRDY2Q0NBM0FBRDhGQjAxQ0E1MzBECi06MTBCRTgwMDBFQjRCNkZFM0JFMUE1MUY3REY1QTQ5QzcxRkRCMjc1MTRGCi06MTBCRTkwMDA3RDNBRUY1NjA3OEIzQkFCNzQ4MEI4QjRFQ0M0RTc2QUNECi06MTBCRUEwMDBGQzk5RjFCNTE2OTdFRTJFMUUzREQ2MzI4MEVEQkZBQjU0Ci06MTBCRUIwMDBGQjkxNTU1QkZGMkMxMTQzQkM5RjFCMEJGNDNBNzJEOUNECi06MTBCRUMwMDA3RDU0MEQwRjJFQzBDMzk4RThGRDk2RDhGMUZGOEVGRDZFCi06MTBCRUQwMDAxNjAzREQ4MDlFNjA4Rjc1RUNBN0QwN0EzRjg4QUIwNzk0Ci06MTBCRUUwMDBCODBGNjJFRERGQjU2RTY2RkIzNEFENjJFQ0JDNDU2RDNDCi06MTBCRUYwMDBGRjY1QTRDNUIwRUYxMkU4RERCRTRCNEZGM0Y4QUU3ODk2Ci06MTBCRjAwMDBDQTA2MjdCNDRGNTc3QzlEQkExNDVCQkZERjZBRTFENEUxCi06MTBCRjEwMDA3QjAzQkVFN0JFN0UyNTY3Q0MxQjk4MDU3QzU5RDU3ODkwCi06MTBCRjIwMDA0NDAyN0I0QTVCREZCNEY5OUU1MkZERTc1M0NGRjI3OEJGCi06MTBCRjMwMDA0RTY0NURCMDE5RjVCQjUxN0Y1NDEzMTYzNzM0QzI1QkE0Ci06MTBCRjQwMDA2RTYxN0FBQkJBODlBRDFGQTc3NjM5MDI3NkRBQ0ZBOUNFCi06MTBCRjUwMDAwM0JCOTFBRkFCNzcxQzkxRkNCNEJGODNEQjdGMjM0NTYwCi06MTBCRjYwMDBBMkYyQUM2MEZEMDg0NEMxN0ZFQTg1RkQzOTZDN0Y4OThGCi06MTBCRjcwMDBGOUVCQzY3MUVFNTJDN0YxODY2MjhGRTNERDcxNDYzNzg5Ci06MTBCRjgwMDBDRTBBN0Y1MDYyRTc3RTJFM0ZERTQ5NDE5OTBERkQ5RDJFCi06MTBCRjkwMDA2QzExMDlFNEZEOUYwQ0YyQzU4MTE4RTNDRkI1ODg1QUY2Ci06MTBCRkEwMDAzQzhCQzkwRjVENDdGMTFDQTY4MzlEQkJFNDEzMjVCNEYwCi06MTBCRkIwMDBCQjU3M0JDNjdFMDhFN0ZENTczQjI0MTlFMjE3NzVCNTEyCi06MTBCRkMwMDAyQzJGQjVFRURGREM2OTQwRUZCQTg0NUI3MTNGQUVERTRCCi06MTBCRkQwMDA4MDVGNTdCMjJCMUZFMjFBQUVDMkQyNTFDMEFFNDZCRDJGCi06MTBCRkUwMDA5M0EwOTg3NEYwQUY3NjE0QTdDQTE0Q0VCNUFBOUQ0NjU0Ci06MTBCRkYwMDAwNDM3OUUwQkU1OUQ0NUM1MzAxRkRFNjU3MjU5NjNFQzI1Ci06MTBDMDAwMDAzQjg4RjY1MkUyODlDMjhCRThEMjlGRTMyNDk3NDZDQTY2Ci06MTBDMDEwMDBEMDhGOTY3RjUzNjk2OTM5ODg4RDJFMDU1MzhDODVCMUYxCi06MTBDMDIwMDBFQ0RERkM5OTJFOUM3N0RCMEVENTdGNTA4OEVDNEE2MUM1Ci06MTBDMDMwMDA3OTY0QjA4RUI0RUQ4QUNGMjFDM0YxNDNBMjUwN0VCNEFGCi06MTBDMDQwMDBBOUNGQjkxREZCRjc4MzVFNUFFQjI0NEEwMjk1MzM4QUM4Ci06MTBDMDUwMDA1NTk5Q0Y4NkYzQUMyMzJDNUMzNkYwRTk5OUZGN0E4NUFECi06MTBDMDYwMDBGNjZCMERGMUU4NTdCNEQ5QjU3QzUyMjUwMUU0Q0M0NjA2Ci06MTBDMDcwMDAxRUM0QkM0MTYwRTU2RjkzM0FFMTM0RTYxMzEyNzgyNUEzCi06MTBDMDgwMDBFQTNFOEQyOUJDMURGREExQjM5QjU4N0M4MDI3NTdGRjNDCi06MTBDMDkwMDA3QTAyOEJDRjkxMDBDMEFGQUUyRjJCNTQzOENGMTJFMjczCi06MTBDMEEwMDAwRUMzRkIzQjFDMTgwRjU4RjZDNjIyOTQxRkEwNDMzNDQ2Ci06MTBDMEIwMDBCRTkyOEFGNUU3NUUxQkFDQ0UxQ0YwNjczNjVBNTVCRkMwCi06MTBDMEMwMDBDNkFGQjRDMDM5OUJDNTZBQkY3RDRBRjVFNzYyQTkxOEZGCi06MTBDMEQwMDBGQTQxNUU5N0E4RjJGQUU1RDJBMjQzOTg4RkU2NTk4QTEwCi06MTBDMEUwMDA3QTNFNzU4RUZFRENBQzMxNEY0QjIwQUE5RjFDNjBGRTYxCi06MTBDMEYwMDA3Mzk3QkNBREE2Q0QwOEI3MzE3RjZCQzU3NjdENURDM0E4Ci06MTBDMTAwMDBFMzI3QTAzN0FGMDI3NDEyRkJFNUUyODAzREUyMzczMjRECi06MTBDMTEwMDBGOEQ3MTM0NjdENzdGQzlBRDNGNEY4QjVDQTdBRkNEQURGCi06MTBDMTIwMDA4NjE4RjFBN0M3QUZDM0FEQzc5N0U2OTc3Njg3REZGODQ0Ci06MTBDMTMwMDBCMUZBNzNDOEZGMkFGQzhBNTZENThFNTRGMTRBRkY0QUQ5Ci06MTBDMTQwMDAyRDI5NEM2NTAzRENFOTQyMThFNUMyMjg0NzE5RjYzMDcxCi06MTBDMTUwMDAwN0ZGRUU5RjFDQThDNUFGREMwRUQ0RUY2OUVBN0NCOEUwCi06MTBDMTYwMDBDNUVDM0IxQkM4MTEwRkYwQkE1MThFRTAyNDIwRTg3OUQyCi06MTBDMTcwMDAxQkY5RDg3NUNDMEFDNEZBOEM3QzdCNERGN0Y0NUMzNTdFCi06MTBDMTgwMDBGREQ1MjMwQkU5NTc5QjgwN0Y4NzIzM0ZCMEYzQkU4OTAyCi06MTBDMTkwMDAyNDUwOTcwNTcyRUE3NkMxRkExREY0NTlEQzhCNDVCODM0Ci06MTBDMUEwMDBGNzg1QjgxNzBGODJGQjVFNUM1ODNFQTRFNkFCQjQwRDcyCi06MTBDMUIwMDAyNTc4NkUzMDE4M0U5RjAyRkFFOUExRENGNjY5QTBGN0Y3Ci06MTBDMUMwMDBCQzRCNDgyOUU4QzExRkM1QjFGMzAzMEZBODY1QkYzOEIwCi06MTBDMUQwMDA0OUQ1QUI4NTZGNEM4MkVGNDNBMjBDRTdENURCNDJEQjQwCi06MTBDMUUwMDAyQzgzQTBERUM0RTMzRDJBREU4NEZBQUI2MEZDRDY5MDRCCi06MTBDMUYwMDBDOEUwNUE2QzA5MEM4MjM4Qzg1RTExQzc2RDVEM0MwMUZECi06MTBDMjAwMDBDRjY1NzZEODZGMjE5NjJGRDIxNkZBQ0NCOTI4NEE5RkRGCi06MTBDMjEwMDBCNzM2M0Q3QTE1QzRCOTM2OUE2MkU3QTk0Q0IxOUE3RTExCi06MTBDMjIwMDBEOEZBMUJFQzkyQjczN0M1Q0FGMkVBMUUxQTQwRTc1MTlBCi06MTBDMjMwMDAzREZEQUNCQTBFMzM3OUI4NTZBNUYzQUI0QjZGQzRGOURDCi06MTBDMjQwMDBCRjE0RTI2NDU4NDc4QUY4REI2RTFBNDZFNzM5RUUzREMwCi06MTBDMjUwMDA0MThEQ0ZCMDc4RTUyOEY1RkQzQUQwMkZBODVGRUJERjEwCi06MTBDMjYwMDBFNUU5QzNERDQ3MDUwMkU3RjQ0NkQ1MkM0NTdGRUIxNTJDCi06MTBDMjcwMDAyN0U1NzNDQTE3Nzk0QTcwMjRGMDZENjEyODAxRUZDRDY0Ci06MTBDMjgwMDBGMTdFNENEMEFFMUZERDIyRThGODMzNEY1RDU3RjMyMjJDCi06MTBDMjkwMDA1NDVFQzA0NEY5NTBERjNFMkUyMjE4RUNBMDAwMEZGQzgzCi06MTBDMkEwMDA3NUVENzFGREYzODU1NkQ1RUU3MjkyMTRFMEYzMEQ5NzlFCi06MTBDMkIwMDA3ODBFRjI1RURCREE4OTdCMEQ4NUJCNkQ3MTVGODRBMzNFCi06MTBDMkMwMDBFRDNDOUNGQUE1RTUyNUJFMzhENjdBQkZDQUNBRjg2MjBECi06MTBDMkQwMDBBMzQ0NzA5REQ5QjhENDhFRjFDNTAzNEIyQkFFODBGNTI1Ci06MTBDMkUwMDBGREFCMUY3QkFFODg3NThFM0M0QTNGQzVCMzdDMkMyNUM5Ci06MTBDMkYwMDA5RThDMDVGRTVFQ0IzMUJDRDdBNzk3QzZDOEY3RDdGODkyCi06MTBDMzAwMDA1OUUzNkY4REFGRDM5N0M2Nzk2MkU1MzU3RTYzNjU3NjY1Ci06MTBDMzEwMDA1QUMxRDIyMTlDMDRGRURBM0UwRThGRTNCNkFFRjE1QzI4Ci06MTBDMzIwMDBGNkRDOEQ5RkFDQzkwMDc4QkM0REU3RDBFRUI2ODQzODAyCi06MTBDMzMwMDAyNTk2QkRCMUMxRUFDNEZFNUJEN0Y4NkIyMThGRUYyRTA1Ci06MTBDMzQwMDAyQTlDQTAyN0JCRUY3NzAzRkE1QjNGODFBMDJDN0M2Nzc4Ci06MTBDMzUwMDBBOTJGQzM3M0JDNEIyQzY0MEJDNEJCODVGQUY0NUIxQ0M0Ci06MTBDMzYwMDBDMEZGOTM2RjU4NDdFMTdEQUNENDg0RUJFQjQ2RDE4RDkxCi06MTBDMzcwMDBGMEZCQUIwOEMxRjg4MzFBQ0ZFRDM3OEQ2QzhFM0VDRjQyCi06MTBDMzgwMDBGQzg0MzVGRjU5MkJBNUM3QjM1NjE3RDIyNUM5RTNFNjYwCi06MTBDMzkwMDAwMDdFRjczRkZFREIwOUYyREQ3NkQxOEM3NEVDQUJGQTYwCi06MTBDM0EwMDA0M0RBNzdBRjU5OTlERDM2MzM0RUQ5MEFERjkzRjI2NDE5Ci06MTBDM0IwMDA5NDEzQjdDN0U5NUUzQzEyRUU0REEwNzg4RjkyQTM0RTVFCi06MTBDM0MwMDBGQUY5RjFCQjQ0MEZENTcxMTQ5RTQ0QkIwOUY5OTIyOEM4Ci06MTBDM0QwMDA4QUVDRDJDNTI5RkQyODQ3OUE1QzkwMzA0NzIwOEY0REMyCi06MTBDM0UwMDBEM0FCNUM4ODBCM0JBODFDOENCMkQ4QzNFMDc3MjQ5NkY3Ci06MTBDM0YwMDBEMzc5NTMxMEFDQzRDMkZBNkIxMTRFNzU5Q0NCQzYzQ0JBCi06MTBDNDAwMDA3OUNBOTc3OTcwMzg4QTYwNDgxNDEyNzFBMTdGNERERjFDCi06MTBDNDEwMDA2QTdBN0E2RDAyNDE3OTU5RkJCMDEwQThBM0ZENkMxMkJCCi06MTBDNDIwMDAyMjU2ODhBRjY0Mjk3MjAxQTQxQTI1MEEzMjlFMTdFRjlBCi06MTBDNDMwMDA1RjRFMzBGRkQyOTZGRDc4NDI4N0RENDI4NTdFQzQzNzVECi06MTBDNDQwMDBGQzgyNThGQjc5N0M5Qzg2MkZDRjFGNDA2RkU0MUM2QUNFCi06MTBDNDUwMDAzRjAwRTY4RERCQ0FDNjczQkY2NjQxM0JCRDQzN0ZBODg0Ci06MTBDNDYwMDBGNjU4OTFCQUZFOEVGQkRDQzRGMjA5QzI5MzQ4RjQzRTQyCi06MTBDNDcwMDA5QjUxN0Y2OEY2QzlCOEVCMjI2QjYwQkY2OERDOUYxOEUwCi06MTBDNDgwMDA5Q0I0NUIwNUJFMUJBRENFQjc0MzlGQThFQkU2OTgxMEVFCi06MTBDNDkwMDBENTI3RjRGQkRDRDBDODY2QjgwNzJCRjc2MzI2Qzc1RDQ5Ci06MTBDNEEwMDBGNEM5MjEzRjBGRjhGQkJFN0FDNEM4MTcyM0MyNTQyRTJCCi06MTBDNEIwMDBENUY2QTEzMkRDQTdFMUVBQTg0M0ZCMTk4M0RFNDk5RTQ5Ci06MTBDNEMwMDAzRTJBMTVFRDVDOTVERjhDNzhENkU0REIyOEY3Qjk3NzRBCi06MTBDNEQwMDBCQjlCQ0QwQzJFRTY0NzFBQzYyMTVDMjcxQzcyMzZFOEEyCi06MTBDNEUwMDBBNUI3NzhCMEY3REJGMjI5MUUyODVDQkYwMkY5QTNGNEU4Ci06MTBDNEYwMDA0QjM4MUZCODAxRTZCRjIxNzRCRDE1RTRFNDdCQUYyN0JDCi06MTBDNTAwMDAyMUZBNzU1NDlFRjZEM0JDMjczRUFFMEZBRTI3NEVDMDFGCi06MTBDNTEwMDA0M0Y1RkVGM0VBN0ExMjQ2N0E3N0M4MDE5NTkzRTg3OEY0Ci06MTBDNTIwMDA4OUM2RkY0NjdFRDdFNEEzMEUyRURFQzhDNjczNzYwNDA2Ci06MTBDNTMwMDBENjU5OUUwQkUyNjUzMDY2QjJDOTA1NzhENUVDRUQzQTY2Ci06MTBDNTQwMDBENUJFMjVGRTc0QjRGRjU2QkI4OEJBMUU2NTA2ODA0RjYzCi06MTBDNTUwMDBFQTQ0Q0Q1RTc3NUJBMkUzNTNBQjFEMDVBOTk3REI0RkExCi06MTBDNTYwMDBGNTVFQTRGRTU5RDQzOTFCQUZEMDhFRkU5QkY3QTI4NDkyCi06MTBDNTcwMDBDRkJGMzdGRTlBMjgxNDc5M0FGQzhEODkxQkREMTU3RkQxCi06MTBDNTgwMDBGMTcxODRCMEZCQzJGRTlGOUZERjBDMjM3RkRDMjc3NzE1Ci06MTBDNTkwMDBDRUVGNUFFMjc5MjU0MkY1NDdERUFBRjU3NTM2MTkzRjA2Ci06MTBDNUEwMDAzOTlDOTZENzU1MkY2OEZCOUZEREU5MDFBM0JDOEZBOTY1Ci06MTBDNUIwMDBBQzZGQzY3MDRCMEZGMkVFQjVBOUY4MjU2NDA2RThCMzcwCi06MTBDNUMwMDBGMTYxNkFCNzY0NzU5NUZGRjNFQUZDQkMzNjg2RjdCNjhECi06MTBDNUQwMDA1QkRCMDc4MzNDQURFNzNEMzU3MTY4MkY0NjRDMjZCMEU5Ci06MTBDNUUwMDAyQjc2MTNCNDdCRENGQjhGM0E1MURFNUI5Mjc0RUI0RkZFCi06MTBDNUYwMDA1N0JCQzA4RkYyQTlEOUE3OUE1RDZBN0NBRkMzMkU1NUVECi06MTBDNjAwMDBENzFCMkQzRUNBMzU1MTc5QTFGMDNDMTlFN0YxMDMxQzI3Ci06MTBDNjEwMDA3NTJFRTZCRkMyMDE1N0QwNjM0RjU4M0Q3NUMwNUYzNkQ3Ci06MTBDNjIwMDAzQTk3MzhEODJGMTkxMkNFNjJGMTk2QjA0RTNFQkI5MzhFCi06MTBDNjMwMDA0NzlCNDFERTgyMTQzRkIwRkVGOUU5RkEzNzg4RUIxRUQyCi06MTBDNjQwMDA5RUIxNzEwOTBDNUVBQTg1QzBCRUU5OTc0N0Q4NjBENTM2Ci06MTBDNjUwMDAwNEYzQzdGQkU1QjBGQjZCRkFFNUIyRkIzMjM3QzczMTM5Ci06MTBDNjYwMDBGQjY1OEJBMTdDQzI1QUZBMThDQzRCMTQ4OERGOUNGQjZCCi06MTBDNjcwMDBGREUxMDY1MDIxMEVGOTY0OUNEMjAwRjhCMDE0MkIzODZECi06MTBDNjgwMDA4RjBDMTc3MTczOTRERTE5NDI5MDgzQkM4OUM0NEE5OTQ4Ci06MTBDNjkwMDA2M0YxNDdEMkI5RkY0OEZCQ0IyODkxRjM4MTNGMzIwNkMzCi06MTBDNkEwMDAxMjNDMzc5QTExOEE3RDlFRTg5NTM4RjE4N0Q5RUI4RDM3Ci06MTBDNkIwMDA1RENFQzFCQ0EyQ0FDRjQxODlDRTM3QTk4NDlEODNFOTkyCi06MTBDNkMwMDA4OEZCNTBGMDAxQkZBRDhFNUI3MUIyQUQxN0Q4M0VBQkE5Ci06MTBDNkQwMDAzRjgxRTFEOUU4QkYwMUMxNjA1RTgyNUFCRjU3MjI4MjIzCi06MTBDNkUwMDAzNTExRkQyQjNGRjBBRkRGNjQ0MUZGQ0E0NkRDNDFEMDdFCi06MTBDNkYwMDBCNzFGQzRCMUY4RUMzQUNFQkQxRUVBQkYxMERBMkQ3MEY4Ci06MTBDNzAwMDBDRjhGMjYzNzlBM0MzQzM0RTExNkI3NDA1Rjc1NUU3NzkxCi06MTBDNzEwMDAzNjA3N0M1RjJBMTdFRjAwOUU1QjI3OUMxREJDMTY2N0JGCi06MTBDNzIwMDBEMjlFQzlGODRFRTE3NUY5RjYxQUZEOUE0NDFERkRBQzhBCi06MTBDNzMwMDAxMDU3ODlENkYzMEU2OTA4RDhFREFENUM5QzFCRkNBQTk2Ci06MTBDNzQwMDBENkU1MUM4Mzk3QjNBOEU3MTEwNEREM0NEMzZDQ0MxRjVFCi06MTBDNzUwMDA2OTUzRjVFN0RGRTNCMjkwMUZCNUY1ODRDRTZGM0RDNkIwCi06MTBDNzYwMDA3RjBERjNFODM4ODc2QTM4Nzc2QTNDOTc5QTk2REQxMTJGCi06MTBDNzcwMDAwNzRBQzc3Q0RDNTIwOUVFMzIyMzY3NDMzNkI0RTNCQzc4Ci06MTBDNzgwMDBDRUY2NEMxMkUzQkM2NDZBQzQxQUYzNUNCMDU2NTJCQ0Q5Ci06MTBDNzkwMDA3RDBENzg0QjE1NkIxMjQwMUZBN0RFQ0VGNDg4MTExRjVDCi06MTBDN0EwMDA2RDlDN0ZDNDQxRDg0N0ZCODMxODMzMUY0NTJCRDNEMkUwCi06MTBDN0IwMDA2RTRBNTg0Q0RGNEY0QkJGMDE0QkVENzk4MzVEODgxOUIyCi06MTBDN0MwMDA1NzRDQjI3MTNGRUNEQzY0MDNCMTE4RkNDRDI0MUJFRDc3Ci06MTBDN0QwMDBFRkI0RTc5REY3MTUxNEZGNzY4Q0JCMzdDNDMxQkMzNzM3Ci06MTBDN0UwMDBDNDMxQkMzNzQ4MUEzRUU1Nzg5MEJGQ0VCQTVCOTdGN0E0Ci06MTBDN0YwMDBCNEMxNjc0OTEwMjAwRkQxOUY4RUYyQjlDNEM1RThERERFCi06MTBDODAwMDBGOUJFODJGNjREMUZBMkRDMzAxNzk0QzQwNjkxNkM0MzJBCi06MTBDODEwMDBCRTY3RjEyMUVEN0NDOEFGN0NDRjI0NDBCRTk0REI5NjhGCi06MTBDODIwMDBBNUZBRkIxNjQ2REYwNDA2RjdGOTBENTM3MERDMTRCMkM3Ci06MTBDODMwMDBDNjNBOThFMjc5NjlBOUM5MEQ3MUEzRDMwQjNGNzJDMkI4Ci06MTBDODQwMDA5MUU5ODUxOTJENzkyMDBGQTc3OThGMUJFNjk3NEE5OEQyCi06MTBDODUwMDA1RkI4NkM4RTE0MDhEMzJFOTMxQkE4QzI2Mjc0QkEwMTAxCi06MTBDODYwMDBGNzNCQ0I0QzMxRjNBRUM3RDhEOEZFRTlEMTM4MTc5Njk5Ci06MTBDODcwMDA2OTY5RDM5MDRFOURGNTkyMDRGMDRCOEM3QzRBRTUzNTY2Ci06MTBDODgwMDA3REYxQThDRTczQ0M5NDZGMTQ1QjBDNzk2QjEzNDkxM0I0Ci06MTBDODkwMDA4N0VCNUIxOEYxOTVBQ0IxQjNBQUI3MzU3OTQ5MDYzOTg2Ci06MTBDOEEwMDA4NDdEQUI1MkFBNDczNTNBMEY1MDVGNERDMUI4MjhGRTgwCi06MTBDOEIwMDA3MUExRDdCRjA2N0ZDMzc5NUQwMUVBNDU0RDhFQzgxMENGCi06MTBDOEMwMDBBNkU3QURBMDc3QTNFMkExNkQ3QjNGRTgwRkZCOEU5RkFCCi06MTBDOEQwMDBGQ0RCMzkwN0VDM0JGRDU1Njg3NzgwOUUzRDdFQ0ZCQjg2Ci06MTBDOEUwMDAwRTM4QzdGNEM5M0QyQzJFNzI4N0MxNEY1QjY0NjNGQUMyCi06MTBDOEYwMDA3RjhGQUQ3NDFFRTA3NzgxRUYxRjc5OUUyODdFMjU3N0FDCi06MTBDOTAwMDBCM0ZEOTNFNTAxREU3MERFNUQ3RjZGNTA1NTMwQzk3MDc5Ci06MTBDOTEwMDA4RjkwMUZGMTVBQTVERTFGNjZBNEM3NDYxQjhCQjcyQzRDCi06MTBDOTIwMDBERkIxNTlDQTkwNjE3QzRGMjU4QzdGNUNGNTQzOEYzNzBFCi06MTBDOTMwMDAzQUQwREZEMUUwNTlCODYzODQwNEJFRDk1RjQzNjY3NTRECi06MTBDOTQwMDBGRkJENDU2NEVCODc1MjAyRkI2NzFFMTU2RjQ2MzgwRjJCCi06MTBDOTUwMDBBQUY3NkEyRkY5MjVDQjhGMjlBMzYzREQ0REY1QjAyNzAwCi06MTBDOTYwMDBDNENFN0IxOEU3QjFFNDEzQjkyODk1MTI2RkM5RkQxQzNBCi06MTBDOTcwMDBGQURERjBGRTNENzQzREYzREM3RDFGRUVCMzE5RTdEOTFGCi06MTBDOTgwMDBGNTVFMUYwNUZEQjM2NTJBQkQ4REU3NkQ5Nzg1RDgzRTIxCi06MTBDOTkwMDBGODYyRTI0MUY5RUM3MkZFMzZDNENFQzUxOEUzOEQ2NzQ5Ci06MTBDOUEwMDAwRjY1REIwMDBGQkZCMEE5RjFDNDNDMzIwNkNFNkRFRkJFCi06MTBDOUIwMDAzQTM0MjBGRTcyRjc1NjlGNTJFRjhCODI3QkJCQTEzQzJDCi06MTBDOUMwMDBFRTIzNThDRTAzMjM5MEUyQkYzMkY0RjY1REMwNUZENTZDCi06MTBDOUQwMDA0RDNCRjEzRUI0RUZBQThGQUE0MjI3OUM5MDRCQURFOUE0Ci06MTBDOUUwMDAyNTZBODc2RTAzRjkyMDhCMzk5RDdENUFCREY5OUNDNDU5Ci06MTBDOUYwMDBGQzZBODY5RkRCRDRFN0I3MDEzRTcyMjBERjVCRkVEOTdECi06MTBDQTAwMDAwNDRBRUZEQjJBQzVGM0QxRjdBNTNENkZEM0VGQzNGNzk3Ci06MTBDQTEwMDA3NkJFREEzQ0I1Nzk2QkVENTU2QTVFOUNGMTNCNEQwRTA2Ci06MTBDQTIwMDBFNkE5N0NCOTc4RUJGNDc1N0QyOThBRUFGNjdFOTFBOUFFCi06MTBDQTMwMDA5RTkzQzNGMzQyMUE5RjJEMjNBNTQ1RTkzMUY4NDlBM0RDCi06MTBDQTQwMDA2RjA3REY4NDdFOEVGM0QzRThCQUI4QkU0Q0M1ODMzRjUwCi06MTBDQTUwMDA0RERENEY0QzgzNzg5NTkxOEY3QTNBQTdERDJBNDYzMjg3Ci06MTBDQTYwMDA0MUJFOEQ3Q0QyREFDRDdEMjgyMTFCQjMyRjE2Q0I0QTU3Ci06MTBDQTcwMDAxMUM0Q0ZBOEY5QkJDRTE1NjVERjFDMTdFQTBGRkUxNDUxCi06MTBDQTgwMDBFNDZFMkJFM0ZCMEUzRDA4NEUzMUU4RjczNzQ1NUNGRkMzCi06MTBDQTkwMDA1NzNBRTQ1NEI4RkYwRkU5MzcwRUYyMTNDQzdFNzg0RkMzCi06MTBDQUEwMDAxQkU3OTg0RjUxMDY4QTgwRkY2MjJDNEZGQTRBOTU4MTA2Ci06MTBDQUIwMDA4MzNBREI5NzZFM0NFNzA0RkJCQjZEMDhDMUI4NTFBQjEyCi06MTBDQUMwMDA0MzBGRUY2OTFCOEY3QUUzQjQ0QThGNEFBMUU1OUIzRjdFCi06MTBDQUQwMDA4M0NFREFEQTgyNzkxN0M3MkVBOTcxQTc0QkU2RTI1ODFFCi06MTBDQUUwMDBGM0I0RDgzOUREQkQ3ODc3QTg3MkE4RjkzNTBCNTRGQUJDCi06MTBDQUYwMDBERDExNjJGQkU5MEIzNzRENDc3QTc0QzlCRjU0RkRBMUM0Ci06MTBDQjAwMDBCMjQ2MEVGNThFOTEzRTRCRENENzYzM0VEQUEyNDAzRTM0Ci06MTBDQjEwMDA3RURGODU1RUU0NDFBNEJCOTE2RTc3REE1REVDMUUzNzYzCi06MTBDQjIwMDBBMTQ2ODI3QkVEOEU2REUyNzBGRjcxODUxMDdCRkY3M0Y1Ci06MTBDQjMwMDBCNkRERjQ5REU2NjM5QzQ3NzdGMDJGREI1QUJCQUUyRjQyCi06MTBDQjQwMDA4MUY5OEY5MDgwQ0Y4REYwNkJGMzVGNDIxNEE2QTdENDRDCi06MTBDQjUwMDBGOTc2MzcyRjEyOTlDNEYyMzRENDc1N0YzOTlDNUI4MUYyCi06MTBDQjYwMDBGRDkzMDc3OTk2Q0ZBREM2QTEzNEY4MzU3ODhERjMyOEJCCi06MTBDQjcwMDBFMjJCRjE3QzQxNUIwMzhGNzlEOTc3RjhEOTdEMDY3Nzc5Ci06MTBDQjgwMDBBQ0U1NzBGREVEOEU0RTlBNUVEMUY2N0JBQTlCQ0EzMDY1Ci06MTBDQjkwMDA2RkNCNDNGQjAxM0JCNkVENjNDMkY2MjlENjczNzhDRjZBCi06MTBDQkEwMDA1QkI3RjQwQ0IxN0NBNUVFRTg0OTA4QTNEQjYyNEEzNzE5Ci06MTBDQkIwMDBGMDNGQkJERTlGOTBBRjBDOENERTI3MEFEQ0EwMEM4QzE0Ci06MTBDQkMwMDBERUI3MjI0MUNDNTc1OUIxN0RCQUVFRjk4RDc2MzU4RTVDCi06MTBDQkQwMDBBNUVBRjU5RUU0OEZENDI0QzQ4QzZGNjlGMkE2Qzk5RkEwCi06MTBDQkUwMDAyNjhGNzdEQTY1NjY2RjBBODE4MzE5NTk4MDlGODdEMTBFCi06MTBDQkYwMDBCRkExRkE3QTlFOURGOTNEMEZDREE1QUY1NDZGM0NBNzFBCi06MTBDQzAwMDBEQkE3NTgzMjk2RDE2QjA5NUY4MkNGQkJEM0JCMTQwRjIxCi06MTBDQzEwMDAzQUJEQkREOEFFQ0ZDM0Y4QTFGM0QxRTZBMUM5ODkzNkRDCi06MTBDQzIwMDAzRkEzOUMxOEJGMzdEMjQzOEJFRjE5RTk2MkE0MDdDMDFBCi06MTBDQzMwMDAwOTdFQzY1QjdCNkQ4MTM1MTRDRUI3MzgwNkI3N0ZBRkYyCi06MTBDQzQwMDAxNUUxNkU0RDlCQUNDMEI5Q0RFQUY0Rjk1OEZFMDEzRTNBCi06MTBDQzUwMDA0QzA3RkJCMEI0Q0U4RTc2QUVFQTg3OERFQTVENUMyMkRGCi06MTBDQzYwMDA1N0I1Q0I1RUIyMkEyM0Q5QjlBN0QyMjRFMDkzODlCNUIwCi06MTBDQzcwMDA5MTE5MTYxNzIxOEYzRTU4NUMwNEY3QTQ0RTdDMzgzMjY4Ci06MTBDQzgwMDAwMzQyRjFCRjdFRjA0NjU2REYxNjc5RDdFMjg2RkJGQzAxCi06MTBDQzkwMDA0QjhBMEE2OUZENzFEMDJGQTAyRkZBOTVEQkUwRkI2RTVECi06MTBDQ0EwMDBFQkM0NzNGOUJBQ0NERTFGNjUyRTlEQ0ZFRUIxNjZFREY1Ci06MTBDQ0IwMDA5NUQ0M0VCM0QwRjVBRUYyRjBFMDU3NDE3RTJCNUI0QUZGCi06MTBDQ0MwMDA4QTIxMkU1NDA5MTE3OEJBREU1NTI5Q0VCMDJEODdBREIwCi06MTBDQ0QwMDBGQkUzRTk3QjFGRDkzQzRGRDkyMUVFNzY3MTJEQUU4QjVBCi06MTBDQ0UwMDA5NTg3MDU5NDJGNzI4OEM1NjcwNTNBNTcyQkZENkU2REExCi06MTBDQ0YwMDAxQ0I1OTMyOTdFRDcyNjVBRENFMDE3RDNFNzdFRjA5NzQwCi06MTBDRDAwMDBENzI2MkFCMjFDRjU1Q0EzMUY3QzA3NzBBQzM1QjE3QzFBCi06MTBDRDEwMDA4MkZENkYwQzhFOEY1Q0M2MkVEOEVGMjMyNUUwQ0YzNEJBCi06MTBDRDIwMDBGQjJDNTgxQURCRjMyNTE3OUVFN0M4MzdCMTc4ODlCMTc5Ci06MTBDRDMwMDBGRDZEQkI3NkFFNDlDRTAwQkVBODNFMjRBMUZDQzMxRjRDCi06MTBDRDQwMDBEODlGNTU4NEM5NDkzNTYxRTdEMEFBMEUxMzNDNzc1MzYzCi06MTBDRDUwMDA3REE4MDhDRkREQzBCOTg0NEY3NTdBRTA1RjczRUVBNjc5Ci06MTBDRDYwMDA5M0FGMTg5RTBBMDRBRTQ0ODgxQUI3RDA2RUQ1RDVGOTkxCi06MTBDRDcwMDA1NEQzMTA5ODBGRTFFM0RDNzA2RTg0Q0YzMEQ1RUNBMjcxCi06MTBDRDgwMDBGM0U3QUZBMDI1QzU4N0UwNzJGMzcwRkY0Q0ZERTQ4OTlGCi06MTBDRDkwMDAzQ0RDOUY1NTI3QUE3OTJEMjY3NjNFQkU2M0RENTdFNUZDCi06MTBDREEwMDA0RjJCRkIzOTRBOEYwMkRENEZGRkIxMjVDRkM2RjY1MzFCCi06MTBDREIwMDBEMEFGRDZFNjVCQzcyOTg0MDM3RkVEMzU4MkU3MTk3MkQxCi06MTBDREMwMDA5MzQ5MzNFMENGNDY5NEIxQzA2RjE2NDdBMkNBOTc2QzFGCi06MTBDREQwMDAzRjlCRkU2NTQwRTkzNjlCN0UyMzUzN0VGRkZBQzE5RjUxCi06MTBDREUwMDAyMkZGQkJFMzREQUJCMjY4OUQ3M0Y4NTkzREMzNzQyRTZGCi06MTBDREYwMDA4QkIyMzBFRkE4NjVGNTZCNENFNzA2RDBCQUU4NThDM0E0Ci06MTBDRTAwMDBFQUIwRjE0QTE3M0VCM0EzQUVDODNGMTRDNjcxMzFCQUI3Ci06MTBDRTEwMDBFRTUwQUUwMUZFMTY0QzJDQUUyMzFDOTA3MDdGNDdDQjFCCi06MTBDRTIwMDA1NzU5NEI3OTA2RjhEMUUyNjA3QTc0NUQ2REMxNzMzNjVCCi06MTBDRTMwMDA4ODlCMTcyODMyRTQ0RkVDNTFFRjQxRkFCRUE1ODY1Nzg0Ci06MTBDRTQwMDBERTY2NDI3RjA5NEFDMDdGQkM4M0UxNTNBMzBCNjk1NDZECi06MTBDRTUwMDBBRTgxM0M1RTEyNTRBRTgxN0RCRDdFMEU0RkEyODM3RUJDCi06MTBDRTYwMDAzRkYyQUQ5Njg5QTBDRjFCREZGOTI4MEZFRjczQkY4Mjg5Ci06MTBDRTcwMDBGNTMzRjIyREVBNDNEMkY5OUNGRTZERkZDREQxRkJFNEYwCi06MTBDRTgwMDBGRDFDRjlBOUYwMUQyNTAzREFBRjlDRUMyMkI3NTEzOTNFCi06MTBDRTkwMDBBQzUzODgyQzY1ODM5RkFERjcyRjFCMDlEMzRGMUZEOTQ3Ci06MTBDRUEwMDA0QUFGNzBBMDNFMDlFMzNBRjYxM0JCNjcwMEQ0OEQ3RTBCCi06MTBDRUIwMDAzMzY5NDlFQzU1REU5RDk0NzMzN0VFMTcyNTY2MzQ3RDUyCi06MTBDRUMwMDBCODEwRDY4NURGQjE3QjRBMzg0NUMxRkNEMzE3M0JFRTlECi06MTBDRUQwMDA2QjIzMTg5N0IyOTEzODM3QzQ4RDg5OUJBNEY5NTNENDJBCi06MTBDRUUwMDBGODlBODlGMTU1NzI1RTk0RkZBQ0NFODc3RTVGMDg3OTFGCi06MTBDRUYwMDBGMjYzNkMyQ0JGODFDRThGMDdGRDNBODJDODU4OEU4NEI2Ci06MTBDRjAwMDAzODU5MzZBMEQ4ODNGNTNEMjRGOEUxNEY2OUZGOEY1ODkyCi06MTBDRjEwMDA1OTdDQ0FCMjlERThFMjhGNjUwRTE2Qjc3OUMwQzlFMkE2Ci06MTBDRjIwMDA4RjcxNjJGMDE2QjAyQkUyQ0UxMDE3RDgxNTZEOEY0QkIzCi06MTBDRjMwMDAwMkVFQ0YwQkFFOUI3MERGRUVBMDA5RTNEQzRGOEIwMTVFCi06MTBDRjQwMDAxN0VDMTdCNTVGMjVDODVCNDg2NzdGNkQyQUREQjU3RTk2Ci06MTBDRjUwMDAxRjkxRTRBQjIwRUVGNzBCMjdBQjNGOUQ0RjMwOEZCQjBCCi06MTBDRjYwMDBGRDg0MTQ4MEZERENDNDBDNEI0RDc0M0M2OTlFODNEOTU4Ci06MTBDRjcwMDBCQkJGNzMxNUNDMDQzQTA0RjdDNjExMTg3RkNDQkUzODdBCi06MTBDRjgwMDAxM0QwRTNCOTFEQjk1NkUwOEIxNzAxNDcxNDBGODk2NjFBCi06MTBDRjkwMDBENzlERDA1RkUyMzkwQTZGMTYzRTY3RjlGRDgyM0MyMkM5Ci06MTBDRkEwMDA5RUUyNzdGQzhENzYxOUVFRDE3QURBMUFCQzExRjM1NjJGCi06MTBDRkIwMDA5RjM3RTFCREMxMkY0QUVFRTk1MDdGRjFBQ0VDMDIzRDU1Ci06MTBDRkMwMDBGQzc0NTYzMDBFRTdGM0JDMDlFN0YzNjI1Q0ZCRDUyQjJCCi06MTBDRkQwMDAyOURDMEYwQzYxRjEyRUMxNDYwNEQwQ0Y4MkE5NDBCRURFCi06MTBDRkUwMDA5MzNFNUZBRUYyQjFBNkFGMzc4MTFDRDFGQTIzMUNDMUNDCi06MTBDRkYwMDA3MzBDODIyOTFGRTU0OENCMjc2QTZCMjc5ODRGRDQ2N0FCCi06MTBEMDAwMDA2NjBCMEZGQzFDMzc1RDhCM0I4NTc5ODgxNzREMjgyNUY3Ci06MTBEMDEwMDA2OENGNERCMDhCNzhDRTA1RjI5OUUxQkNEQjQ0NTUwRjVCCi06MTBEMDIwMDA0RkZDQjhCMjg0RTUwN0JCMEZDM0JEOUVDRDc2RjU3RTNECi06MTBEMDMwMDAzMDc1OUY3MzkyQ0EyN0Q3OTEwODZGQTFFREQ3NUQyNEYxCi06MTBEMDQwMDA2RTg4Mjc0REJBQThERjhGNzhDQTYwNUY0RTUxRkI1N0I0Ci06MTBEMDUwMDBEQTVEODVGMDM4OUZFOEVEQkYyOTBENDUyNzYwM0QyQzRFCi06MTBEMDYwMDAyMDhBMDBGQzM0RDk2MjY4MDczQkQyMDlGN0YwRUI5RkI1Ci06MTBEMDcwMDAzRkUwNTBGRERDNEM5MjE5OURDN0E2RUQ0MzRERTE4NzgyCi06MTBEMDgwMDA2RTQ0RkJCNTU4NzIwMzVFNzZEQTk1MEYyMDNGQzBERjIxCi06MTBEMDkwMDAyMjkyQ0JDNTI1OUZGMkIxN0NDMzIxMTc2RDA0QUUyQzIzCi06MTBEMEEwMDBBNEZDNjk4N0Y5NUNERDUwRUZCN0QyNzk1RjNEOTBGNTVDCi06MTBEMEIwMDAwRjdDMDhGQUU1Q0FDNzkzOTM0MERGOEY1N0U5QTU5NTFGCi06MTBEMEMwMDAxQURGMDE3RkI5RTIxOTdGQjk4Njc3Q0FFN0QzOEUyQ0MwCi06MTBEMEQwMDA3QzRGOTMzN0UwM0JFODY3OEYxODk4MUY2QkJGOUJGMjNDCi06MTBEMEUwMDBFQkQzQzBBRjNCRUQwNEZEQjg5RkE1NUJFNjgwOUM2OTI4Ci06MTBEMEYwMDBFM0I0QUE3QzZEMkNEN0Q1QUVEQzBGQkZGQkU0QkZDMDc4Ci06MTBEMTAwMDBENjhEQzJCRTE3QTVFODc1QkY0RjAyODNENzJCRDdDRkU4Ci06MTBEMTEwMDA5ODA2Nzk2ODc2MTFGM0NDNTJENDczNTFEMUZDOTIxRUUzCi06MTBEMTIwMDBDNTJGMUFERkI1REE1OTlDNDhFMzlGQzlCQkRGRTVFMTlCCi06MTBEMTMwMDBGOUU0MEI4NEI4QjI0ODg3QkZBMkYxQ0Y0NDdGMThGNzU3Ci06MTBEMTQwMDA4MTI3MTJFNjlGMThGOTY3NTczN0ZDOTM3RjVFMTY0MEQ4Ci06MTBEMTUwMDA2Rjc1RTE5RjQzOEM3RkJBRTMxQkRBMEZERTZCNjFFNEVFCi06MTBEMTYwMDA5Rjc3MUNBQUJEREQyREZGNUNDMkYzRkNBQkY3NEVCRTYyCi06MTBEMTcwMDBFQzdFNjU5MzRGOUY5RjZBMkNDN0Q5NjJFNzJGQkI1NDAzCi06MTBEMTgwMDBCQ0VGOTZFQTZGQ0EwMUJEMzFENUM0Q0VFRjA5MjRFM0U2Ci06MTBEMTkwMDAxNjBBRUZFRTM4RURERUZDOUE2Q0E4RUYxNDk4MUVEQTUyCi06MTBEMUEwMDAxOTMyQTMxRURBNjlGNzc4MzA3RTlCNjY2MUU3NTcwNTZFCi06MTBEMUIwMDA0RjA0Q0UyM0I4RkI1QUU0RThERjIxRDlFRTYwNzY1ODVECi06MTBEMUMwMDA1MDBDOEZGQjAyRUNGMTM3MTgxRjhDOUQ5QUNCNDMyQTMxCi06MTBEMUQwMDA1QUZBNjJBNjE3NDYxRDk3MzZDM0VGQ0YzREVBQ0NCRjc5Ci06MTBEMUUwMDAwMDdDOTYwNkI4QTNERjc5OEY0QTc4Q0Y1MkY1NTEwOUIzCi06MTBEMUYwMDBGNUUzNkZGN0JENUQwNEYxNTEyRENGNzlDQzlFQjc4QjcwCi06MTBEMjAwMDAwQTg2QzJGQjhDREZGRUExRUE2NUFEOEU0NzQwNDA1RjE3Ci06MTBEMjEwMDAxQUVFREQxRkQ3NzExRTRCN0Y2RjdFMjlGMDUxNEU2N0NFCi06MTBEMjIwMDBCQkYxM0VGOTYwMUNEQjNGOTk0RDY0MTE4Njk4NzFCNEU3Ci06MTBEMjMwMDBGNDVFQjhERUNDNzhBRkZDRUMzMDNCRkYzNkYzQjAyN0MxCi06MTBEMjQwMDBGNkJERjIyQTdGMThFRjM3QTdGNjc3OEExM0VDRUZFN0RGCi06MTBEMjUwMDA1QUY2NDE2ODg0Qzg2Q0REMEU0QTM1RDczMDNGQTMyNkE0Ci06MTBEMjYwMDAxQkY4NDk5MzQzRkNBM0Y4MEI3RTMyNDRGN0JCMDZCNzg3Ci06MTBEMjcwMDBBOUYzN0ZEMDJEQjBGQkE5MjIxMkVFNEJGRTlDQjBFRjlDCi06MTBEMjgwMDA4MkVBM0EzNkNBQzlGNDQwRUVFQTE3RTYwMzlDMjNDQjk5Ci06MTBEMjkwMDA5NTY2QTBDQkIzMkUxNkQ3RjkwNTA5NUJCMjgxNkU2RUU5Ci06MTBEMkEwMDAwMUY3NTM4MkEyM0NGOTBCQUVGMzNEMjI5NDBFQjFEM0E5Ci06MTBEMkIwMDBGNjNEN0RFMjQ2QzJGODhGM0EzRDYzOUM2MDlGMDlFREUyCi06MTBEMkMwMDA4N0UwQkIzMUUzNzM0NzgyMUVCNzhGNTg5QjA0RUI5QTBDCi06MTBEMkQwMDAwNjM3ODVBQjc4OUJCRDEzMEUwREFFODE0RUM2OTc4RjdBCi06MTBEMkUwMDAzQUNCQzYwMDFFRTAzQkQwNEI0RDQ3OEU1OUUwN0I4REJDCi06MTBEMkYwMDAxRjgyN0JDRjMwM0U4OEUyMEJFMDgzNEVCRUUwMTY0MEJCCi06MTBEMzAwMDA1REMzODNBMkFFQ0ZCN0ZEOEJGODQyOEI2QkY0QzgxNzE5Ci06MTBEMzEwMDAxMEI3NzA3RTJGQkU5ODBCNzgzNUYyMDVCNUU3M0NDRTdFCi06MTBEMzIwMDAxOEY2NUM1MDYyNzk5M0M2RTczRkIxRTdFM0ZCNkU4OTdDCi06MTBEMzMwMDA2MERFMTNEOTY3NjVCRjZCRTg0OUMwN0Q5MERGQjhEODYwCi06MTBEMzQwMDA5ODZEOUYxQ0NCQTRBNjI4NTlFNTY0NzZCREY2M0IyQUIwCi06MTBEMzUwMDAyM0MyMUNEQTlGMjNBOEEyQjgwREVEQkM3RUE4MjdERDRFCi06MTBEMzYwMDAyQUZFQzgzMThFODNGQjQ2MzEzNzNFMDNFQ0QwNzAxMjYzCi06MTBEMzcwMDBEODZCMjNDQzI1NjE5MDg3NURCNjg5MTk2MDNGRTZEQUNBCi06MTBEMzgwMDAyNjY0QzNGQzVGMUVCMkZBNEQ1OEQyNUVFRTVCRkU5Qjc0Ci06MTBEMzkwMDBBRDcyQTc3REE1RTlDMzY2QjU1QjZERkMzNTJBN0Y0Q0YwCi06MTBEM0EwMDA1MkQ4NzkyN0QwRUJEMTcwNjhFQjAzOTAwOUUwRTBDMjQ2Ci06MTBEM0IwMDBCMzREREZEQTUwOEY4NzIyMTQ2RjkzMDAwRThBODdGREZBCi06MTBEM0MwMDAxQzY5MDRGQjIxREZBNDI0NEYwNjNCQjA0RjU4MDAzOEYyCi06MTBEM0QwMDBEQkY2N0U5RDA5RjFDRTkyRDBFQjFGMDJCQzI1REEzRTMyCi06MTBEM0UwMDBBQzVCQkYwRjZCQjRCNzM1N0I0OEYzM0YzNDdCNDlGMzdECi06MTBEM0YwMDA3QkMxQUU4MkY2MzJENTFGNzE5OUQ5QkVEODg0QjAwNUYzCi06MTBENDAwMDBFRjUzNzhFNEFDN0M5NUEyQ0FCMzQwRTc1MUEyQ0VFM0Q3Ci06MTBENDEwMDA2NkQyODI3MDY5RjdBOTRDNTNGMTUxNzI4OEZBQUIzOTIwCi06MTBENDIwMDBEMDRFQzg1NDhBODdBOUVBN0QyQTUzRERGQUZCMjI2RUMyCi06MTBENDMwMDAxRTFCRkIzRTE1QUQ5RjlFREUzN0FFMUJENzFBRjZBMzEzCi06MTBENDQwMDA3RTY4NzlDOEM3RUU0RkY5QkQ4RkY5QzNFMzA3RjA3RTU4Ci06MTBENDUwMDAwMUQ2REZCMTU5RUNGRTA5MTdDM0MzMjEyOUY2M0E3NjhDCi06MTBENDYwMDA1MTk1RUJGMUE2NDgwRTlDQzdERUJGRTdFRkI4NkUxRUU0Ci06MTBENDcwMDBEOEYzRjdGN0MxOEUxQzc3NDIyMDkwOTczQkZFQzRBOEUzCi06MTBENDgwMDA3OENDMEYxODJCMjM1RjY5RkQ3QTNGNkZCNDExRjY5QzlGCi06MTBENDkwMDA0NEZGREVDQzQxMEE4RjcyMjVDMDY3QzFGMjk1NTM4RkRECi06MTBENEEwMDAzQzBBRkQ5RDNGMkE5MEU4NzMxRjQ1OTI2NzIwQzRFNTIyCi06MTBENEIwMDA4QkQ0REYxRDNBQzgzMTdCNEE2QjNGQThGRURFQzcxMTEzCi06MTBENEMwMDA5NTZGMjEyMTQzQkI2N0M1MUM0NUU3QTlFQUZEMUYxQURCCi06MTBENEQwMDA1REE3MUUyRjNFMjFFNDc0QTUwRkZDRkQzM0UyMTA1QTE4Ci06MTBENEUwMDBGQ0UxOUNBQTBGNDlGMzlGRjA3Q0NFRjU4RDc3MEE2MDkyCi06MTBENEYwMDBCRjVGOUZDNjEzMjU2QURDMUI2NEVBRTk0N0M1MjE0RTVFCi06MTBENTAwMDAzQTBERjY2RkYzMzM4RjRFODNCQ0U1Qjc3ODRDODFGNDU4Ci06MTBENTEwMDA4Njc2QkU5OTAzRjUxNjNFRTZCRDJBNDZGQzVFMUZCQTI2Ci06MTBENTIwMDAxM0VGNTU5OTFCQ0ZFNEEzQTdGMUM3NUY0REY5NjQzOEZBCi06MTBENTMwMDBEMDlEMzAzQjMwOEZERDRCNjJBNEVGODEzREZGOTExNEQ1Ci06MTBENTQwMDAxOURBM0RCRUJCQTNCRjkxMEVBRjlDMkFDMDdEQUM5RTM1Ci06MTBENTUwMDBFODYxRTREQjdENzQ5RUZFMkJFMTc3NTMyREM0OEZCRjIxCi06MTBENTYwMDA5QkVBQzJGQUFCQkUzNEFDNkJGQ0VBRERGQjY0MTJEOEJBCi06MTBENTcwMDA3OTFBOUY0RTQ5NjI3QzMzNkVGN0EzNDlDNERFNDkyRjY2Ci06MTBENTgwMDAyM0RFODZDNTMzRkU3RkM5QUFEOTI1RUU1OUQzRThBMzg5Ci06MTBENTkwMDA3N0U5M0E4NDhDRUEyNzJEOTAzNzU2QUFDMjNBRkI3MDc1Ci06MTBENUEwMDAxMURBMjU0NDNEQ0Y2MjVDREY2NkYzQjc0RDAxNzVEQUQxCi06MTBENUIwMDBEM0VGRkVDQzk0Q0I3QUY1N0IzOUM1NkZENTBCQjAwRThCCi06MTBENUMwMDAxNjA5QUI5OTFFNTNFRDc4MEQxRTIzOURERjIzQTUwODg4Ci06MTBENUQwMDA3Rjc3RjAxOUY5QzAwOEU3NEIxREY5RjYwQUFFMDdEQUI0Ci06MTBENUUwMDBFRkUwQ0MxODk4MjUyNkM2OTg4Nzg2OEY5OTg0QUVDNzE5Ci06MTBENUYwMDBEOUJENUY4RjZGOENEN0RCRUZFNzhFMTdGRTExRDBEQUM2Ci06MTBENjAwMDA5REJDMTlFOTY2NkNEN0Y0NDcxMTBDOTA4QkE1MUZFQ0YzCi06MTBENjEwMDA5M0I5RjEyOTQ4REZBMjhCMTI1MUU4M0E0M0ZBRTlDRkQ2Ci06MTBENjIwMDBGNTkzOTIyQjkxREY1NkI5RDhCM0VFRjhBREZBMjI0RkFECi06MTBENjMwMDAzQzIzM0JGOTRFNkM3QUQ4MDY3Q0I3NUJBOEI3NDExQ0ZCCi06MTBENjQwMDBGNTNBRkJGNDNBMTBCREMyQ0YwQjY2RTJGRDE1MTExMzlCCi06MTBENjUwMDA4MUQwREE5NEQwOTk2Njg4MzM3ODNGMjQ3OEJFQTEyMEFGCi06MTBENjYwMDBCNDdGMzJGMEU5QUI0MjBCRkE1OTZERTcwOTc5MzhDQTU5Ci06MTBENjcwMDBFRTZDMEFENUQ5QzAyRTZCNEE2NkU3RjMwRTI2MTA1RDE0Ci06MTBENjgwMDBGRUY0QzU3OEE2NkY5QThFOUU5REE2QzQ2ODFGRUU2MkIyCi06MTBENjkwMDBGQzNDODMyOEM5MzlGNDlGNDVFQjI5N0Y4MDFGRENDN0Y4Ci06MTBENkEwMDA4MTcxOTI0MkNFRkQ1QTMyRDgyRDczMzlGNDIzREFGNkM1Ci06MTBENkIwMDA4RTc5MkQ5OUMyREI3QTdCMDJFQTk5Mjk0REY3RERFOTUzCi06MTBENkMwMDBBMjg0MDhGRTYzMjQzRTZGMkZFM0YwRkU4NDIyRDk4REVFCi06MTBENkQwMDBGNUEyQzU1OUU4Rjc4REY5MjY2OTQ2MDlCNERGMjBBMkZECi06MTBENkUwMDBERjMzODVBRjE0MjA1RTc1M0E4REMzQUIzQ0Y2NzA5MTg1Ci06MTBENkYwMDA1QUY4M0Q2MkZGNzQzNjBFNzFGOTkzQzAzRjdEQTcyNDNFCi06MTBENzAwMDA2OTA0RkU2NjlFQUNENTA3RTFFRjJFMTI4M0ZGQjZGQUUwCi06MTBENzEwMDBBNTczRkJDREI0N0RGNTJDMEVGMzhEQTdCODMyODgzRkYxCi06MTBENzIwMDA4QTdGOEFENjRCMzhBRjVCNDJBOTA1QzBENzMzOEFGNUNBCi06MTBENzMwMDBFNzFFQzNBQTNEMzlBQkQ0NDYwMkQxRkJGOTlDMEJFNUU5Ci06MTBENzQwMDBGQUEwQjVGRDU2RkMxREYxQkQyMjgxRjk2OTcyN0VBM0Q4Ci06MTBENzUwMDBDQUVGQjNFNzI0RTlCRTlCNEU5OEREQTlDOUQ1NERBQTBGCi06MTBENzYwMDBGQ0REQThGQUNENzMzRDE5QkFGMTRCMDlCMzg3RkU0MDMxCi06MTBENzcwMDBEQTBCODE2NEY3QjhEODdFRjRCNEY2OTZDM0YzRTEyNUVBCi06MTBENzgwMDBCRURGNjhEMDg3MzcwRDMxRjhCRDdDRTU1QUU0OEIzNEI1Ci06MTBENzkwMDBDRThERjdDOEI4RjVFRDM3OEZENUQ3OERGMjZCRDQwRjk2Ci06MTBEN0EwMDBCMzIwOEI4RkVGQUEyNzM0N0QzMDZCMkYyRjQyM0M2ODNDCi06MTBEN0IwMDA1NjNFQzUzM0RBQzU3QUJCQkQyNzdEMzEyNkFFMUI3RDBCCi06MTBEN0MwMDA3MTQ5QkUxN0NDOTAyRUZBRTJFM0UyRUZBNTJGN0U0QjEzCi06MTBEN0QwMDBERDk2QjE1NEFFREY4RTU3RDdDREZFQTQzRkU4OEQyOTNDCi06MTBEN0UwMDBGQzhFNDc4MThGREFFOEJBNjk4RUMxNDdEQUJBQTNDNUUxCi06MTBEN0YwMDAwMThBQTgxQ0EzMUUzOEM1RjY2M0E2NUM0QzI3RkU5MUJGCi06MTBEODAwMDA5RDcxODAwRTNENDJFRDEyNzcwQzdCQTkzNTNFMUJFNUU0Ci06MTBEODEwMDBBQjQzRUY2ODdBMjVDQTJFMTFGMzdFQjg1RDMyODVEQTA0Ci06MTBEODIwMDBBMzUyMkVDMEQ3MEZFMTJCNTJFRjI1Mjk4Mjg0MkI4OERCCi06MTBEODMwMDAxRkE2OURDMTM4OTA1N0EwRkUyQ0FFQ0Y0RjIyN0Y4MUVFCi06MTBEODQwMDBGRUUzMTIzQkU1QzM2OEFGNjg3MUU4MEE5NzY2NEZFOUVCCi06MTBEODUwMDBGOUE1MjMxRTM5OTNEREMzQUFGMTQ5MTFFMDEzRTQ3RjMyCi06MTBEODYwMDAyNjhGRkIwNEZGMUJENDdGMDNCMzAwODAwMDAwMDAwMDYxCi06MTBEODcwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRkM1N0MwOTc4NTQ1NThDCi06MTBEODgwMDA5NkYwNzlGNTVFMkQ0OTU1OTJBQTZDMTQ4QkYwMTJCNjdDCi06MTBEODkwMDA4NDI0NTg4NDgwRUMxNjU5NThBMzE0QTA4MENCNjg4MTQ2Ci06MTBEOEEwMDAwQjZCMTI5QTcxOUNFRTY5RkZBNjQyMDI0MzQzQjc4MzQ5Ci06MTBEOEIwMDBEMkRBQ0VFOEY0NTdEODNBODMxQUI0MDgwMTAzOUREMERGCi06MTBEOEMwMDAxNTUwNEM1ODM0MDgyRUY4RDkxQTZEMUFEMTBFNDk4NEM3Ci06MTBEOEQwMDBENjQ2QkJCRkNGRkY5QzczRUY0QkFBMkE4NTRERkZGRkY3Ci06MTBEOEUwMDAzRkRGOUZCNDdEQjlFRkRFNzdFRkI5NjczRkU3OUU5N0UzCi06MTBEOEYwMDBEQjlCNTVCM0FEMDhFMEY2OTk4QTA3MTQwMEQwRjE3N0E5Ci06MTBEOTAwMDAyMkMwNDJFMDdGQzNBQ0FEMTZGMDhFQzdCRUQ3RkM2OTIzCi06MTBEOTEwMDA4NzBERjhFNzNCRkMyRjlDOTBGQzJDQTQ1MENGMEI5MDdDCi06MTBEOTIwMDAwOUIwNTRDRTVGRkM1NzdEMzMzRDVFM0MyNzdBRkU1MkYyCi06MTBEOTMwMDA5OEZEQjk5MjBDNzAxQkY4Q0QzMDFDRjdGM0M1OEVGRjIzCi06MTBEOTQwMDBFQzRCMTVDNzk3MkU4QjdFOUVFOTRDNEFCRjkwODdGRjA0Ci06MTBEOTUwMDAxODAxMjNCRTUzMDFDQUQ0QkE5REI3MjJCQ0REMjc1NTk2Ci06MTBEOTYwMDA4RjU1NEMzM0QxRkUwRjM5QzVGRTBGMzU5NzBDODA3Qzk3Ci06MTBEOTcwMDA4MERGNzQxNkE3RjhCMTNEQjYxMTIxMUMwREQwQkFEMUM1Ci06MTBEOTgwMDBDNkVENzFFQzA3RjFDNUVGRThFNzY2M0M5RjA1RkMyMUE5Ci06MTBEOTkwMDAwN0I2QjQ1MjIxQjcwMTQ4MDUxOEVEQzQ0NTI3NjBGRjBBCi06MTBEOUEwMDAyQTlFM0YwREM3ODYyNEMwRUY3MzI0NUNEOTAwQUZFN0UxCi06MTBEOUIwMDA5OEU3MDRGMUJEQzNCODVFMDBENzBERTNGQTAxNUNGNzQ4Ci06MTBEOUMwMDBDODQ2MjdGNzVGREJFOEU2RkUwRDJFNDQ2QTA2QzBGQTdDCi06MTBEOUQwMDAxNDI3QUYzNzJGRjc3Njg3MUZERjVCRTNDQ0U2RTc1MERFCi06MTBEOUUwMDAzRURBNDRGODM2RTAyRjdCNkEwODA0MTBERkFGNzdBQ0VDCi06MTBEOUYwMDBEMDk0NzQ4MDJBQjdFMkIxNjZGNUQxMDE0RkUzNTg4RTE2Ci06MTBEQTAwMDBGM0NCMjVCRTJCQjcyQTEwQzRFN0U1MUZBRTJCMDdDNDA2Ci06MTBEQTEwMDA1RjU3MzNFRTg3RjhBOTJBNTU4MzM2RkM2NzQ5RDM2M0VECi06MTBEQTIwMDAzQjQ1REYwQ0Q2MDhGQURFMjI4RTAyMzNCNTE2Q0Q4NkQyCi06MTBEQTMwMDBGQjJDRjAyODFFMTVGN0YxMzY4OUY3NkZGNTJBNDExREVBCi06MTBEQTQwMDBGRjc5OEIyNzlBMUU4NzYzRThCRTU4QUVCMzgwRkUwRjFFCi06MTBEQTUwMDBERjVCMzA0NzA5ODY3MTlEMDU5M0EyREY1QjdDNzVENjNECi06MTBEQTYwMDBFN0NBRDhGRTdDQjQ5OEU4M0VCNjNGQkZEQzRFNzRCNzM4Ci06MTBEQTcwMDBFMzNGODZDMTMwQTJGQjk1OEJBNTZGOEQ4NTNFQkFDNTZECi06MTBEQTgwMDBCNkIxNzQ4RTFEQkYxNjlERUYyNzNBNjc1QzlCQ0VDNjVDCi06MTBEQTkwMDBGQjdGOEJDRTBGMTE0RTkwQkU3MEY0MUI4QjlFMDQzMDFCCi06MTBEQUEwMDBCQkU5MDcxQUQxNzlGNjU1OEREN0FEMzJDRTMzMTQ4NjNFCi06MTBEQUIwMDBEMjc5RkVENDU5Rjg2RkI3NDJERkZDQUFBNjJGMkRGRTBCCi06MTBEQUMwMDA4MjZCOUZFNzZGRURCRjIyNDVFN0ZENjk1RjZGN0VERkU5Ci06MTBEQUQwMDBCRUYzMzQ4MEMxNzhDRUY5MzlEMUY4OERBNTZCMkNCRDU5Ci06MTBEQUUwMDAxNkNBRjc2MkU5QjUzNUU2MUMwNjVEQTAxMzk5Njg2MEIxCi06MTBEQUYwMDAxQ0JDNUY1NTE5OEU2QkQxQUQ5NzJFMTZGRjA4NEY3RTVCCi06MTBEQjAwMDBGRjcxODA1RkYzQjlGQUQ2OTM3NDgyNzZDRDU3MjBFMDI3Ci06MTBEQjEwMDAzMjQ3QzgwM0YyNzUyMDA1RTk1QkRFMEFFMTQ0MDRFQ0Y0Ci06MTBEQjIwMDA5NjhCNzMzRUQ3QThGNTI4RjA2OUM0MzlFOEU3NTM4MzhDCi06MTBEQjMwMDBDRTZBREZGQTY1NTcwN0IyRkMxOUZCOTY2OTEwQjAxNDdDCi06MTBEQjQwMDBEMjczMjE5N0IxRjA1NUQyM0EyMzY5N0U4MEY5NjhDQjIwCi06MTBEQjUwMDAyRUQzQjIxMDlFNjNCQTA1RUVGNTUxOUIyOERBMDM0RTIwCi06MTBEQjYwMDBBMTA3MUE5RDI2NUVCN0ZCMkI5QjA5NkUwNDc4RTVGMDkyCi06MTBEQjcwMDA4MDYyNDBGODNDNTZFNzA5RDI4QjIxMzNGMEZCNDVDOTVGCi06MTBEQjgwMDAzQUNGREY5QzA0ODEwNERDMUZCNDc2OUIwRkY5NDQyQjUxCi06MTBEQjkwMDAwNkM4NDEzOUQzMDY1OTgyMzVCODY0OUQxNkY2OTFEQzIyCi06MTBEQkEwMDA3NTdCMzRBODQ2QjlCQkQxNzhFRjQ4RTAyRTQwOTI2QzIzCi06MTBEQkIwMDBGRTc0OTRBOTI2OEJERTBGQjc0RkM1NzkzNzE1NkFGQTI0Ci06MTBEQkMwMDAzNjlDRTJCMkVBM0ZBMEYxQUU2NkFCOTNERUVCM0VGOEU0Ci06MTBEQkQwMDBDRjJENjY1QUU3MkJGMDIwODRGMDVBMzMzMjE1OEU0RjQyCi06MTBEQkUwMDA3Mzk4ODNBNDM3Q0FENDkzQUEwOUZCREQzRDAwQTQ4RkEwCi06MTBEQkYwMDBBNjJEMEI5NzAwRDI2RDNBQjRENzM4QjE5RDQyNzQ4Q0U0Ci06MTBEQzAwMDA0M0JGQkZEMDc5MzM4NERFMUE4ODc0OUEyMUU5MzQ0MzQ0Ci06MTBEQzEwMDBFQUFCOTI2Njk1RjU0NjQ5OTIxQTg0QUMzRUZENzRCMzIwCi06MTBEQzIwMDBBNEQxOEM0MDdCNDkwQUVFM0I0MzUzM0MzNUQ4QkZGOTI1Ci06MTBEQzMwMDBBQTE2QzU4RjJGOTMzRUJBQjE0RjFGOTVDOUY1QkQzREFBCi06MTBEQzQwMDBCQTg2OTYwMTY2NDIzNEZGOTYzNTBBM0Q1NDYyOEI3OTU2Ci06MTBEQzUwMDAyRUVEMEZCRUM5N0M1NUU2OEMxRTlGNDJCQTEzRjlGQjEwCi06MTBEQzYwMDA2MjhDNUU4MjE4RkI1M0E2RkUzNUI5MDNGMUYwOEFDNUJCCi06MTBEQzcwMDBGQkRFNTQ4NEJCRTdCNDE5OUVDNUU3NzAxMTNCOTNGQkYwCi06MTBEQzgwMDBFM0E3MzFDNjFFQzVCNjA3MEYyNzdBNzU4NEVCMTVFMkU4Ci06MTBEQzkwMDAyMzA3RjUwNzc5RjVCMUQ3OUUzRkI2QTNBNzk4OEVGMTc0Ci06MTBEQ0EwMDA0QUREMjIwREIyOTkyRENGQkEzM0ZCRjBERTBGQkY5MkMxCi06MTBEQ0IwMDAwRUIxNzhBRDk3N0FERURCRTg3QzhEOEVEQjBGOEZBRDExCi06MTBEQ0MwMDBCM0Q4OUU5N0ZDNDlENzQ4RjVGREJERjgzNEU0RTU5NUY3Ci06MTBEQ0QwMDAwQjg5NUVFMkZGNTcyRTBDRjJCMkZENEFEMjU5M0UwQzgwCi06MTBEQ0UwMDA3OTM4NzhGRTcyMjJFOTUxQzRBN0FFMjE5RkY0Qjg2QzRFCi06MTBEQ0YwMDA5RTY3OTk5Rjg1MUM4NDA2OEUwQTZFQzNGRTg1MjRDMThCCi06MTBERDAwMDBGN0FGMjRGNjFDQ0YyM0JDREY2MkYyM0M0QkRCNjhFQkExCi06MTBERDEwMDA4NzJGMkEyMEZEQjk3NUQxNzkzMzgwRTIwNUU1ODcyODYwCi06MTBERDIwMDA0RjhBRUU4NEJCQjEwREEwM0MxMUZGMDU1MjIxNDg3MjExCi06MTBERDMwMDA2Mjg2MTBEMEJFMzU1RTc4OUFEQTE5RDNGNDE0QzJGQjJECi06MTBERDQwMDA2NTVDQjNERDQxRUJFOTI5QzRGN0YwRDcyQjEzN0QwNTAyCi06MTBERDUwMDBGREYxNUZCRjExN0MxQUVFRDNCMEQxRTZEMzUwMkYxQzdBCi06MTBERDYwMDBEOEU4RTQ3RUUzNDYzN0I3ODczNkVBREM2RTNBOTFGQ0MyCi06MTBERDcwMDA0M0YyMUZBQUJDMTY5RjE2QTE1N0U2QTUwQUZEMzAwMzYxCi06MTBERDgwMDBGNTBFQzEzNTAzOTQ2MDAwNzk2RkM2MjNDMEYyODg3MjI2Ci06MTBERDkwMDAxMERDQTQxMEJERjAzQzM5N0RGODQ0RkE1Q0VFODhFODU0Ci06MTBEREEwMDA0M0FENTYzQjIxOTNBNTgyRTk1RTk4NjdFMkY3RDEwOTFFCi06MTBEREIwMDAwODNFOUZENTdGM0VEMjNGQUFCRjhDRkMxNjg0QzNFRjlFCi06MTBEREMwMDBGMjk2QjlCMDBEMzk3Q0IzNUQ4OERGN0E2NUU5RDE0QjQ1Ci06MTBEREQwMDBDMEZEQjlGNEJDNUVCOTQzQkQ4NEVCOEYwRkNGODQxRjg3Ci06MTBEREUwMDBBMkJEMTg4Rjg0MjFCQ0UyQ0Y1RDA0RkY4NDE2MEIxMDA2Ci06MTBEREYwMDA3REQwQjBCMjdDMTYxQUYyRjlCNUEyNUNDMEZENDg4NEExCi06MTBERTAwMDBCRTFCOENFRjU5Q0JDM0M0NEYwN0EwMjM4REYwNUU2NEJCCi06MTBERTEwMDBGM0Q5NDk3RTk3QjkwNDNGNzg5NURCREQwQUFFMzczOUVGCi06MTBERTIwMDBDM0UyNTEwOUI0RTFCRUYxRUIxMTdGMkQxOUI4MjFDRTQ3Ci06MTBERTMwMDA2RjY5QzkxQ0EyRTcxM0I3QkRGMTNFQzlCN0Q3RTYwOEExCi06MTBERTQwMDBBQjZDOThDQzlEMUQxMUY2N0MwMDNDRTMyNDdGOTI3NDUyCi06MTBERTUwMDBEQzc3Njg0NzVBM0Y0RTBFQjA5RUJCNkEwOTkyNUU2QkY0Ci06MTBERTYwMDAzRDkzRUMwOUUzM0VEM0FGREFEOEJGQUNBNzE3NTE2RUIwCi06MTBERTcwMDAwRjI3MjY4RjY1M0QxMzQyMEQ0M0YyNjMxM0U3OTg2RDFDCi06MTBERTgwMDBGNkFGMjMzQ0EwNjUzRTdBMEFERkZCRUQ2NTAwRDJBRjFBCi06MTBERTkwMDBEM0RCM0Y1NEM5MEYyRDMxRTUwRUU4NDAzODhGMkFBMzVDCi06MTBERUEwMDA1M0E4N0RGMkUzRTQ3QzZFQ0YyNDc3MTI3RTBFOUJFQ0M4Ci06MTBERUIwMDAzQUVERkJDRTQ2QkQ3NDA0RjJDQkE5OEQ1MDNBMDJGOTdGCi06MTBERUMwMDBFM0FEOEQzNjZFNEY2Rjc0NzI3QjY2QTM5QkRCQTMzODE4Ci06MTBERUQwMDA0RUZDRjMzQThFMTM3RkJEODFFM0Q0NkZDMzcxNkE0RjVBCi06MTBERUUwMDBFMDNBRDQ3QURGNzI5ODQ4N0U2N0JDRTVEMEE4MkRCQ0IyCi06MTBERUYwMDAyQjg5REJGQTNCOTMyQzc0OEVDM0M5NTA2N0VDNEZGQzIzCi06MTBERjAwMDAxNDRFMEMzNzgwMDdFNTJFRDVGRDUzREIwRDY4M0ZBRDcxCi06MTBERjEwMDBGRTAyNjUxQ0MwRDQ1NEY3NUM2RDNBQUUzQjdCRTg4RkMzCi06MTBERjIwMDBCRUMyRjExOUE5QzM3RTZBNDM3ODZGM0JFMzY4Mzg4OUEyCi06MTBERjMwMDBGREQyQzdGNTlGM0E4ODNGNEYyNEEyOTIyNDNDNjRCNzk0Ci06MTBERjQwMDA3OTUxMzZDNzkzRDIxOEM0NjhGN0MyMjRFQ0E3MTlGRERCCi06MTBERjUwMDBFQ0I5QTVDODBBNEI0QTNBRjJDMDA1QjBGM0IxRTE3Mzc3Ci06MTBERjYwMDA2RDg4REYyNTc2RkYzRjUxREYxMjY4OUI1MzNBOURGQTlCCi06MTBERjcwMDAxMDcwOTJCQzJCRTYyMENCRkIxMDI1N0QxMURBQkZBREQzCi06MTBERjgwMDAwRUZGQzRENDA4N0ZDMEFCRkMyMThERjRDMzQ0QUYwMkE0Ci06MTBERjkwMDBBRTc0QTY3NzcwQTREMkY3REM5OEI3RDU1MTM2MzExNTk4Ci06MTBERkEwMDBGOUY3RDcyRTk1Rjk2OUMyMzRDNTFCNzRGNDk3NUY2M0VFCi06MTBERkIwMDBERTg0RjM3QTI5RDE2RkUyQzU1OUI1RDQyRTk4RTNFMjE1Ci06MTBERkMwMDBCRTZGRDk0REI1MjRGRkE1OEU2QkJENUZDMkVGODc1Q0Q4Ci06MTBERkQwMDA2NkQ2NDdDNTFBQ0U4QjYzMTc4RDc5RTM5MUM5QzhGRjAyCi06MTBERkUwMDBFRTY5NEIwQzNFNEI3QzdERDY1RjkzODRGRDMyNzc1NkI5Ci06MTBERkYwMDBBMTJBNzUzNDcwREZCNTZCMUI4RDk3QkZERUMwNzJFNTRCCi06MTBFMDAwMDA0OUYyRTg1OUM0OEFFREE1NjkzODNFRDNBMTc4QzIyNDAzCi06MTBFMDEwMDAyQUQzM0VBOTREQTM3MUE3RTIyMUI0Q0RGNDhFM0I1NTdFCi06MTBFMDIwMDA0NEUzMjM1NENGNENFQTlGRDU0QjlERDg5RUQxNjY0RUY2Ci06MTBFMDMwMDBCRDg0RjM2NkU3QTQ3ODZDRjhERTk5RjA4RkFFMTBGRjJDCi06MTBFMDQwMDBDRUNDNDlGMjI0RTgxNDE3MDQ5RkFFQTRCRUM3RUFBOUI3Ci06MTBFMDUwMDBENkU5MUM4Rjk1MjREMzNBQkFFMjMxNjFCRkZFRDY5MjNECi06MTBFMDYwMDBGRjQ1NzAxNEZCNTI0MDUxNjhEQ0E1OTExRkZCRTRDN0NCCi06MTBFMDcwMDAzRjI5NzVFMkJDRkFBMTBBOTBGQzlDMDlFN0ZFOTFFMEY5Ci06MTBFMDgwMDA5RkQ5OUFBODI3MjA0MEY1MTY2NzI5QkQ1NzZGNTE5QzQ0Ci06MTBFMDkwMDA5QkI4RUYyQkExRjk4MTUxNjZGRDc5NUNGN0U0OUQ3NjgxCi06MTBFMEEwMDBCNjA3RTU2RkU1QjM1Rjc0RjJDRUMxNkMxN0NBREY5QUFECi06MTBFMEIwMDA1NjRDRUQ0OTkzRjBEQkNCREYyQTlGQzNFMzI2MDg5MzUwCi06MTBFMEMwMDA1MjI5QkZFQjFGRjhCRDFEMjUzRjI5NERDN0Y1NEYwQzQ5Ci06MTBFMEQwMDA3M0IxNkU0MTNBOTU2QTExN0EwREU3ODM0MkVGREY1NUNECi06MTBFMEUwMDBDMUYzNUI5NDAxM0YzQThGRjNBRkU0QTcxNDVBNzFGRjc5Ci06MTBFMEYwMDA1OUU5MDk1MUYzRTcwQzcxNDVGNUU3OEQxODU4QUE0NTIwCi06MTBFMTAwMDBEOEIxRjJGQ0FDQThGRUFENDU0QUU5ODg4OEY5QkU2OUYxCi06MTBFMTEwMDAwOTUxRkQ0NUE1QUVEMjExMTFGMzZGMkIxRjE4RDU1RjI0Ci06MTBFMTIwMDA3MjVCNTY1NDdGQTY2OUIyRDAxRjFCQTFCQzU0Qzg3RDM4Ci06MTBFMTMwMDA3OTI5RkI5QkQ5QUM4NzBBOUQ2MkVFMUIzODdFM0Y4RTA2Ci06MTBFMTQwMDAxN0I2MDk3RkFBRDA4NUZFMTREMkE1QjRBRDg4RkQ4MDhDCi06MTBFMTUwMDAzNjdDOEZDNjhCRUM1MjhGMDVBMEREM0Q5MUVDODBGQ0E4Ci06MTBFMTYwMDAwOUUyMkZGNjhCNjU3NzY2M0JGQTA1NjM4OUFFNjhCN0RGCi06MTBFMTcwMDAyM0UwMkY3NTQ0REJGMUZBNDRFMTI3Q0MwMTdGQUQwQjlFCi06MTBFMTgwMDBFOTM5QTc3NTFFRkI1NzY1RTlENTQ1NjEyMDdDNDZCRjc3Ci06MTBFMTkwMDAxRjBCMzcyQUQxOUQ3NzEzMUZCNjZBQUMzN0U3MEM4OTVFCi06MTBFMUEwMDBEOUFGQURENEMxN0U4Q0Y0RUZFNkM4Qjc4QzdEMjFFMDQ5Ci06MTBFMUIwMDA2RDI3RkZDNjM4ODdCMUZGQjVDRTMzNDc5REM2N0VFMUQ4Ci06MTBFMUMwMDBERjNBRDdBQzlDODVBNUE5NzFFMTVGQ0ZGRTRDMkM5Q0IyCi06MTBFMUQwMDA3OUE5MzI0RjgxRkUxNUZCODVBREE5RUMyRkUyNEY3QTZDCi06MTBFMUUwMDAzQzNGQzFGMDdGQ0E1MUNGQjkyMkY1OUM0MzQ5NUY1OEVCCi06MTBFMUYwMDA3MDZEM0Q2N0FDN0IyREZGQ0Y1OEQ3NzgxRkVBNTRERTlBCi06MTBFMjAwMDBERjc4QkZGN0I5QUVDNDdGQkUxQkU3MjdDNTc5OUVBRUU2Ci06MTBFMjEwMDBDNDdGRkU1Q0Y0RkMxOTlBNUVFMzQwNzkzRTBFOEEyN0M3Ci06MTBFMjIwMDA0MDc4M0ZBOTZCRTQ5QTk1OUNGNUQ2NTI1QkY2QTE1RkM2Ci06MTBFMjMwMDAyM0I3NzBGNkY5NDAyREI1NTMzQjgzMjdBRDc4RkVCOTZGCi06MTBFMjQwMDAzOUFBNEVGOTA3QzMyRkVBMTc2N0E1MEE3RkU0Rjg1NUU0Ci06MTBFMjUwMDBEREFFRTM3ODdENDBCNzUzREM1MUZGODg2RUE3RjhBQUE2Ci06MTBFMjYwMDBERTBCNzMyODhFRjQwRTM3QURBNzM4QzQ5Qjg3MkRGNkNFCi06MTBFMjcwMDBFRjREMTVGQTdFODU3Q0RGNjgwRkE5RkUxNTA0N0Y4NUJBCi06MTBFMjgwMDBBREUzNTFGMjQ5MkFCRkU5QjExMDVGMUMyNzdGMkZCRkQwCi06MTBFMjkwMDBCRkJGNzc1QzBCM0E2OEJGRTM4RjA0MURCRTA4N0Q3RTZECi06MTBFMkEwMDBCREZFREUyMjYyQTYwQ0UyNTNDNTE3QTk0RjRBNkMwOUQ3Ci06MTBFMkIwMDBCRTQ4RkQ1MUU2NzQ0NUY1Qzc5M0ZGODNFRkNENzYwRjU5Ci06MTBFMkMwMDA4QzdBNkZBRTlFMTUzNTBGRkREODFDRjI4NzZBMkM5MEE0Ci06MTBFMkQwMDBBMzkxM0UzNTI1N0FDOENGOEJDNUUzRUZFNUY5M0QwRTE2Ci06MTBFMkUwMDAyN0I5NTE2MDRFRDc1NTdGMUNGQkU0MjkxMUY4OEI3RDZGCi06MTBFMkYwMDBCRTNENTVDNDczODNDODlFRTMzQTI3NTI3NTZFNkI1NTc1Ci06MTBFMzAwMDA5RjcwRTZEMDdGMjY3RTg4RUQ2M0FDQkE4Q0Q2QzM5NTJECi06MTBFMzEwMDBEREM0NzcxRUJCRTkwQUJBRTBGMEQyRTNGM0U3NkE2ODJFCi06MTBFMzIwMDBGRjNERTM0REZGMzgxQ0ZCQzcxRTVGMjFGQTUzNERGQjM5Ci06MTBFMzMwMDBCMkIxREZGQUY4N0RBMjdGQTM2OUJDRDk4M0VDMTlCODJBCi06MTBFMzQwMDA3RjZFMjlGOTBCRTlCRTdGMjdGQTc1OUIxRDVCMTVENEZCCi06MTBFMzUwMDAwMzk1MDlBOEQ3QjBENTRDMEExNEE2RjdDNUM3REIyRDdECi06MTBFMzYwMDA2ODVGOTFDMEM4NkM1RTE3RDJDMDZFMTVGMTc0NjVDMjRCCi06MTBFMzcwMDBEMDIwRDkxM0FERDhBQjEzREUyQTEzMEM3QTc3NjQ5MjcwCi06MTBFMzgwMDA5RDg3REEwOTUxNzE5REREODJFRkUxRkI2NTM2RkYwQjU4Ci06MTBFMzkwMDA4MjZGQzJDOTNBRUFBNTg3MEU5NjBEMjBGRTM4OTFFQTJGCi06MTBFM0EwMDA2NDNDRTRFRDlCRUEyNjdEODVGMEVEMjFGQkZFRkYwMTU4Ci06MTBFM0IwMDBCRUU2NzhGMEQ1OUFDNTNFOURGNTc5MjU2NDhGRjM4NjQzCi06MTBFM0MwMDAyMTc5OTQzRUZBMTU2QTNBM0Y0RjA4MjFFRkIwQkZFRTJCCi06MTBFM0QwMDA3NTUzRkVCMUM2NjVGMTkwRkY3RTQyRjJFRkY1QjYzNTlBCi06MTBFM0UwMDAzMjhGQTFEQTA1MUZBOTI5QTZGNTdCQjE3RDVCRjJDRjlCCi06MTBFM0YwMDAxOUI5MkY2QUJFQTEwQjkxM0ZDMEQ5MzM3NDUxODFFODdFCi06MTBFNDAwMDAxMzdGQTg2QTYxMEZGOUUxM0RGRjkwRTRBMUY4Rjk4MzU5Ci06MTBFNDEwMDA0NDgxM0YxOEQyRjNEMThGRjFGOTdCNzdFNzc5QjZGMUQ4Ci06MTBFNDIwMDA3MzgxQTc2NUMxRUM5QTBFRUM4RkIzMDY2RkEwRkNFMzc1Ci06MTBFNDMwMDBBMTM0RkY0Nzg0ODczQkFEQzE5MUNDODc4RUY1NDlCNEE5Ci06MTBFNDQwMDA4RkUyMDU4RTUzOENGODBGRTMzQ0REMzJCQzdGNUM3MEFECi06MTBFNDUwMDBFREZEQzE0Njc2NjVFOTY0ODE3NzYzN0ZDNEIxOERFOERGCi06MTBFNDYwMDBGMURFMjRGMURDODAwN0UxRTgyNjNFMzBFMEVBODUwN0IyCi06MTBFNDcwMDA4NjM4Mzk4RjAwMjJGRkQ0MjVFMzhCMkU1QThGRUNBN0U0Ci06MTBFNDgwMDBFQTEwNzlEQzNGOTgzOEZGNTI0NUMyOEFGRDdERTc0RDlFCi06MTBFNDkwMDAxQzBGMUE3OUUwMjIxMEZCNEQzRUI1NDk2NUUwMDNGOEU4Ci06MTBFNEEwMDAzQjUxQTI5NjVFNjk1Q0NCRjFGRDg0NzYyRDI2RkVGNjhCCi06MTBFNEIwMDBCMjNEOUQyQURGQkZBOUQ1NUZFMkEwRjZGREU4Nzk1MzAyCi06MTBFNEMwMDA2NTFDM0YwOTgyMkFDNTU5OTMzQjYyQzYxQkU3N0Y0NkZDCi06MTBFNEQwMDBFQjRGQkQxOEZEM0MyOTREREFDMzQxMzAyODMyNEZCMjE1Ci06MTBFNEUwMDA0MUM2NEQ5NzRGNjZBNzEwMUY2QjE4MkJBODQ4MEY4QjdFCi06MTBFNEYwMDBBRUMyQTRENDNFM0REM0IwMTFFNzU5NDk5RkRBQjgyRDNFCi06MTBFNTAwMDAzOEVCQkM4RkY2NjlEQzg4MEMzRjlBRjRBQTlCNUI0MzFFCi06MTBFNTEwMDBFRTBBQ0VDMkJEMzAzNjYyMUYyOTE3MDYxRTJGQkYyRjRFCi06MTBFNTIwMDBGMDM4QUUyM0U3OTdEM0IwNkY2RTM1NDM1MEVGQzNDM0Q3Ci06MTBFNTMwMDAxNDg5MkYwQ0RGMzhGRUJCN0NEMUMxRjY2QjYyREI2MjI1Ci06MTBFNTQwMDA5NUU0RDlFQTM2ODExRTcxQkUwNDNEMTFGNDA4N0Q2QzU0Ci06MTBFNTUwMDBDRjQ5OERFQUFCOTI5RUI1MDlEMTdFQ0E3OEI5NEY5MjY4Ci06MTBFNTYwMDA2NzUwRDQ3QTg2QkY2MkQwRjM1MEVBQUM1NkYyNjNDNkU1Ci06MTBFNTcwMDAzQjU2QjFERjkyMzIyOTNCNkFGREEyOTNEMUY4MkUwNEJCCi06MTBFNTgwMDA5Rjk3RTI2M0NGODdDMDcxQzBDNEIzNUE5NDdGMzIyOThBCi06MTBFNTkwMDBCQzgzRjk2M0QyODdEMUNGQTc5QzhGRUU5N0E2QzlGQzI1Ci06MTBFNUEwMDA1NjJDRERBRTg1NEYxOEZCQ0I2OUU5N0YzRjNFNURERTIzCi06MTBFNUIwMDA2ODdDQTZDRDg5QzY2Nzg2MkYxQTlGMDM5NjQ1RTM2QkI0Ci06MTBFNUMwMDBBMDNGMUExRjgzNTc4RDg5MUFCRjYxN0Q2MTU0N0ZEODgwCi06MTBFNUQwMDAwRkE3NDRDRENGNDI4MzE5RDkxRkJFNzU1RUQ0RkM5MURECi06MTBFNUUwMDAzQjE2NDVGNTQ3M0Y3NTY3RDRGQ0RDRTA4QUE4RjFCQ0QzCi06MTBFNUYwMDBERDZCRkUyRUZBMTc4NDM2NDRDRDI3MzQ5QkJFODdGRTkyCi06MTBFNjAwMDAzNzM2RkU0QkQ0N0VGRjUzRjRBRjhEQTFGRjU2RDJFN0QxCi06MTBFNjEwMDAxMzg4NUVBODM3MEJGQkVDMTlCOTI1QTQzRjVENEQ2RjNECi06MTBFNjIwMDA3QzQzNzk5QjQwQjFDRUY5QUFDMDNDRjBENEUwRDgyRjBFCi06MTBFNjMwMDA1NDlGNDI3QTZFMzBBMkRBODQ3QUEzRDYwNEFCQzgxRTA1Ci06MTBFNjQwMDAzQzZBMzI3MTFFRDM5MEYzMTdEMzg0M0ZGMjYyOUFDOEFBCi06MTBFNjUwMDA3QjE5Nzg3QjFBRUQyMkQ5NDE1NUVBNDM3M0ZBOEUyNDRGCi06MTBFNjYwMDBGMjUzNTQ5MzA5REFDOUZFNjkxRUQ2MUZFNzFDMTBCRTg3Ci06MTBFNjcwMDAxOUY3NTUwNzAxRTdDNTRBOTIyNzJEOTg4OEZDQThCRUNGCi06MTBFNjgwMDBBOTcyRkNBOTBFRjI4MzhFRjZBNEU2RTRDRTUzODQ5RjExCi06MTBFNjkwMDAyQjBFOUI0RTdDQUJBNkZBMDM2NERGRjA5Q0ExRTdBMTk2Ci06MTBFNkEwMDBCRjlGRjNERTQ2NTg0OUYxOTZEMTVGRTY1RUJGOTlFNjFCCi06MTBFNkIwMDAyRkJCN0JFNjQ4OEE3RjdCOUZERkFEQUMyQzhEQTA0M0QwCi06MTBFNkMwMDBFNDM5MTdDNUYxQUIwRUE0MDlGQjY3RDgxM0MzN0VEQzkwCi06MTBFNkQwMDA2OUQ1NkIzQUQwM0U4QzUzODU3RDQwQkI3MTIwMERGMURFCi06MTBFNkUwMDBGMTgxRjI4ODU5Rjg2OTAxMzM5RDFGRUQyQURGMjdCOEJGCi06MTBFNkYwMDBEMDIxREY4MDZENEE5RkRERDJCRjQzRTZGQTIwM0JEQUFFCi06MTBFNzAwMDA2RjdEOTMwMEEzMzg0NEY3RjAzREUzMUQ4NkZFNUQ5NUQxCi06MTBFNzEwMDBDQkY4QkJFQzg4OUU3RkY5RkVFMTAyQUZGNzIwRjY5MEM0Ci06MTBFNzIwMDAwRUU3MkNFMjNDMDZGQzE3QTU1RUZFNDJFQUU1NEVEMjVGCi06MTBFNzMwMDBDNzExRjlFQjU1QkI3NjI2OTE3RjdFMkU0N0Y4RTNDNkNECi06MTBFNzQwMDBGM0RGNDkzQUZGMkU0REU1RjNBRkREOURCMEZFN0MwNENCCi06MTBFNzUwMDBERTJBNDJBRUE4N0U1NUUzQzBGNTkxRjlDREI1QzYzOUEzCi06MTBFNzYwMDBGQzhBNDZFNzU4MjdFNUE4QTJCNTIzRjk0RTYwN0ZGRTRDCi06MTBFNzcwMDBDMzM0NUNCNzcyRDc5NTdCMEVEMEZCQTY5RTRDNjE2NzA1Ci06MTBFNzgwMDAwM0JDREZEMkY3ODBFMzgyQTU3RjgxMjhCRkI2MzNDREZCCi06MTBFNzkwMDBDQzcwNzVBNjg5Mzg2MTA5MzY0RUU0QkIyNUU4MDNCODBDCi06MTBFN0EwMDBBODdENjNEQTJDRTIzRjdDMUU1NkIwQkZBMDE1Q0NBNDM2Ci06MTBFN0IwMDBCRjE2RkFCM0NDODRGNDMzRTA3OTY3M0YxRUVEQ0Y2OTFFCi06MTBFN0MwMDAzQUVGNzMxQkY4Rjg3RUZCREQ3QjJBOTJEODBGMzRENjI0Ci06MTBFN0QwMDAzM0Q2NDE4MTIwM0ZFRjNENTdDMDlDNDk3OTlGRTkwQURDCi06MTBFN0UwMDBGQjE3Qjg5RjhEOUVGQkVFMUVCQzk5RUNCMEIxREZCQjUyCi06MTBFN0YwMDBFMEJGRjQwRUYyQzUyMkYwRjBCQUM2RkE0MEQ3MzQxMUU5Ci06MTBFODAwMDA3QUY5MDM0QjJGMURFRDQ0QkYwRDZEQTYzMEU1ODUzNjFCCi06MTBFODEwMDA5Q0IzRjJCRDRBNzc3NUNGQ0IwRjIzOUMxRkFGRjk2NjJGCi06MTBFODIwMDBCRjgyNzA3RkI0QkNFN0JGMEVFMEYzM0I5RTUyNDE0NzBFCi06MTBFODMwMDBCRUYxRDlGRDVBN0E0NEJDNzlFRUZFMkIyQzZGRThBRkJECi06MTBFODQwMDAzQ0ZGMjQyOUE1OTdBQzFFOTI5MzBGRDZCQzM0MkEzMkU0Ci06MTBFODUwMDA1RTQ4NEU5Rjk5OTA0RUY3M0I5M0QyRTJERTZGQzRDNjVFCi06MTBFODYwMDBBNTZCODgzRjU5N0U3NUY2NEIwREJFNUMyREY5NzJDM0MyCi06MTBFODcwMDAwQkEzRjlGOTg2QTRERUYzODhGRUYzMkFFN0MxMzYzNDQ4Ci06MTBFODgwMDA1QjM5QUZGMThFRTQ4NzM1MkY3RTMzMzEzMkNGNTc4RjJFCi06MTBFODkwMDA3Q0E5NUJBOTc1NzI0QkY3QTYzQUZBMDlGQjRFNUUxRTdFCi06MTBFOEEwMDBDQjcxQUJFQUNGQTI3MzFFQkVGQTY5MzJGNUY3QkRGOUEwCi06MTBFOEIwMDAyRDlGMDc2RUJCM0VGOEJCMTE3OTkxNzhBRTRBRUE3OTdECi06MTBFOEMwMDA5N0Y0NEFDNTAxQUI0RUY5QUM5MjAzQjkyN0VFQzI3RTZDCi06MTBFOEQwMDA2NTJCRUExRjNDQ0YyNTU3QzdCMUE3MjkxRTNCQTgwMENGCi06MTBFOEUwMDBFNUI3MkFDMzA5QUNFNDJCMUI5NDIwRTVDM0Q2MzRFRTZDCi06MTBFOEYwMDBERDMyMThGQjZCRUExNjE2MTFCQjU2MjUwQjdENTY1OUY3Ci06MTBFOTAwMDBBRjA0MzdCMTFGM0U4N0U5NUMyODY1QTNFNDUwRUVCRjMyCi06MTBFOTEwMDBFNUUzNzhENzcxQjFGRTg1OERCMEY2M0NDNjlENURGNTE3Ci06MTBFOTIwMDA1RjVFMjAzOEQ2MzU1QTM5Q0Y3NjIxMjk2QzE5OENGQjk5Ci06MTBFOTMwMDA1RURBQUI4NDAyN0E5RkRDNzZCOTQ0MUNCNjJBRjQ5ODdFCi06MTBFOTQwMDA4NUY2NURGNURDQzIxMUU0MzY3NjFEMzg2RDIxM0RCOUUyCi06MTBFOTUwMDBBQUUxQjE1OUYyNzk5MTMwRkY0MTk2OEJCNUJCOTU5NUZCCi06MTBFOTYwMDA5MTc5QUNENUU4MEU0MkE0RkQ0MkY4MDIxM0ZCRUE0MENGCi06MTBFOTcwMDA0RTQ5RkEyQzZCMUE1RTQzRTg0MkJEQjZGRjY5ODVGNTM1Ci06MTBFOTgwMDBEQTQyRTI5NzBGMEVFRkY5REQ2RjY4REY4M0ZGM0Q5MjA5Ci06MTBFOTkwMDBGMTVGNzQ3REY4MDc1RjgwRkQ4QjRBQjkwRjVDM0M2M0MzCi06MTBFOUEwMDBBMUY4QjJCMkMxN0MyMURFRkQ1MjYzQkFFRjFFREFDRjBDCi06MTBFOUIwMDA4ODhGNjNGREVFMkQxNjEwRjczRkQ5MTA3QzlFRUM4MkY4Ci06MTBFOUMwMDBBM0M3QjIxQ0UxRjk1NzlBODBGMDY4Q0UxRUNCMEFFQ0JGCi06MTBFOUQwMDBEQjQ4Q0VDODVFQjgxREMxNzg3MUY1QkU3NDhERjE4NDc4Ci06MTBFOUUwMDBCMUM0RkE3OEY3QTAyMTM5NUVBMjc3NTgyODlGNTdFOTc5Ci06MTBFOUYwMDBFRUI0MTA1RjU3ODYzRjE3RjdGRjhEOUZDQ0YyQzY4OUE0Ci06MTBFQTAwMDBCNzVGNEU1N0E0MzMzRjI3NEFERTM3NjQ4QzYxQjkzMDc1Ci06MTBFQTEwMDBGN0RBQzM5MDhERTVCRTYwNDUwRkQ5QTkwRDA3OTEzQjhDCi06MTBFQTIwMDAxNEEyQjdCRjg3RTAwRUVDNEZEMEU5N0MyNTA3M0U5RkNDCi06MTBFQTMwMDBEODExQjFDRjFGQTU3Q0Y0RTY1OTVFRjk2NEFDOTlGMDBBCi06MTBFQTQwMDBCOUVGOTNCMTVBNTJERkYzQUU0Q0M3QUE3ODc5OTk5N0QwCi06MTBFQTUwMDBEMzg1RERERTlDRUNCQjE4MkQwNzA5OUUzMEVFNUJEOTFCCi06MTBFQTYwMDA2NEU3N0IxNDk0ODMyRDJENDU5MTcyNzBDN0FBNURDNDExCi06MTBFQTcwMDBFNzREQUEwNzI1MDIyQTFCMTdGQUFCNzk3RTkyODdDOEIxCi06MTBFQTgwMDBBMzM2Q0UwQzEwMUZBQTRFMUZGMzI3RkMxNUY3OUIyOEE4Ci06MTBFQTkwMDBFRjhGNTBGRkNENERGNzNGNEQ3MkFDMzk2MDY1NjQxRTZFCi06MTBFQUEwMDBBNEQyRDRGMUFCMTY4NUU4QkFDMzZCQTJGRDBBODFGNUY2Ci06MTBFQUIwMDA5NkVBRjA3NTcwM0M1NTk0QTk1M0RDN0I3NEMyMkMyMDA3Ci06MTBFQUMwMDAzQ0ZEQkM1OUUxQkNBRjM5RDVCRjM1OEJFODdCNUNFNTdCCi06MTBFQUQwMDBGOTk2QTMyRjA0RThCRUJCNkIxQzE0MTE3Q0M2Nzk3RjhBCi06MTBFQUUwMDAzRTJFMEMyQUFFQjNCOTAwM0NCNEVERTY4MzRCRERDNDM4Ci06MTBFQUYwMDBCRjNGQ0YzOEM2N0U4NkREMTMwMkQyMkIzNUU4M0Y1MEFDCi06MTBFQjAwMDBERUM3OUUxRjBBRDMzQTA5MzlCRTIyMTVGNzU5OTNFRTg0Ci06MTBFQjEwMDA2NEJFQjQ1OEZEMUVDQTI3M0QyMEZCMzZDREI3OEFFMDNGCi06MTBFQjIwMDBCM0E1Mjc4QUY4N0JDOEY1RTVGOUJBNDhGRUNENzQ2RjFFCi06MTBFQjMwMDBFOUU3N0M0Qjk3NTlGMDY5RDcwREMwNzEyMkQ3RkM0QzlGCi06MTBFQjQwMDBBNjIxMkZFM0NEMDYzQkI4QUQ2QTU0RDY0NkRBRDc0NEFBCi06MTBFQjUwMDBGMERCRTg3OUQ3QzFBNTFFODJERjlDMkRGOTNEMzM5MTBBCi06MTBFQjYwMDBFNTIyNzZGRjhGODg5RkE5Q0VDMEI0NjI2QjE2RTE5OTJCCi06MTBFQjcwMDBGMEE2Rjc5RkY3QTFFNDdCMDMxRkEwRjk3MzQ4NUUxMThECi06MTBFQjgwMDA1NDZGQkNGQzkyM0ZCREY4MkNEMTc1NzNBQTJGQzc5NTZBCi06MTBFQjkwMDBDRkQ3QkNDMjI5NzYyN0M2OTUzQjlDRkYwMUM5QjczMUE4Ci06MTBFQkEwMDBCRjk1RjA4OUVGNkZEMUZDMzZDMkVGNTE4OTVGQjNDNUQ1Ci06MTBFQkIwMDBBNzNCNTlGRTdEM0FFRERGN0JCRTQxRjFDRkY3OEQzQzlGCi06MTBFQkMwMDBERjk2NkNGRkY3OUVFRkNGRjI3Q0U2NTRFNDM3NUEyRkM2Ci06MTBFQkQwMDAxOTc4OUUzOTM5MTgyMEZFQUI0RDgyQTI0REY4RjhBODVECi06MTBFQkUwMDA2Qjk2OUJFNDZFQ0I5MTZGODY5MkJDRDcyNjc5REM0MDA2Ci06MTBFQkYwMDA3OUIxRTY5Qjk2OTFEQzZGMTk3NDI3RjNGRjE3MkZFNDI4Ci06MTBFQzAwMDAxNkFBMTFGQjI0QTcxNzdGNDVFNzNCMkZDRkIxQzVFMjFBCi06MTBFQzEwMDBDRkExNzM3QzJDQ0Y2OTlDNkI0OUJBRUYyRkU5MTFGOTE2Ci06MTBFQzIwMDAyNjE4OTI3RTVERkNCM0Q3QjhENzk0NzE5RTQ3REE2MUZGCi06MTBFQzMwMDA4Q0YzMzg4RkQ4MEQ4OTVDN0ZCNjU3RkFFMTFBRjg5OEIzCi06MTBFQzQwMDA3RkVDRTBEMUQ5QkZGMkMyMDlBQTJCQTk2OTMxQzEzNjQ0Ci06MTBFQzUwMDAzQTNFMjVCNTIyRUVGRDkyNTU5MzExMEM3QTZEMThCMjBECi06MTBFQzYwMDBEMzM1MzQ4RDNCOUZEODM5QUYxNkUxM0UwODAxNTVGOEI2Ci06MTBFQzcwMDA2OUQxRjkwQ0YwMkE1RTI1MzI4RkYxREE5QUVCQ0I2Mzc5Ci06MTBFQzgwMDAzQ0UzQUYyMTc5OERDRDYzNEMwRTlCOTY1QjUyQUUyMzU2Ci06MTBFQzkwMDA5RkYxREFCQ0I4Rjk4Q0QxMTlEMTcxNTE0MTg2Q0VDMDNGCi06MTBFQ0EwMDA4NTcyMDQ3Rjg2QzI4OTQxOTEzNzgzRjE5NEJGRUEyNjM5Ci06MTBFQ0IwMDA1Qjg1RTM5RkUzOTk1OURFOTVBRTFDOUIwQkVERTAxMzVBCi06MTBFQ0MwMDA0RjZDREIzQTBERTU3MDg0QzAwM0Y1NkI4OEM5RjVGMTM0Ci06MTBFQ0QwMDBFQzA3RjVFNjQ3NUUxQkMzN0UzOEVBM0Q5NUYzMDI0RTJFCi06MTBFQ0UwMDAwOTRCMEMxRDhCRDA3RjEzNDFBNTI3MkFCRjEyM0VGNjdFCi06MTBFQ0YwMDA2RDMyRjFEQjlFNTRGRDJEQTI0RjRGOUJDQTc1MjgwOTQyCi06MTBFRDAwMDA1QTg3QzUxNTQ3RUUwRTkwN0Y4MDc2RTA5RjMzODQzRThDCi06MTBFRDEwMDBCNzM1OEE3QjRCOUJFRTY1M0Q5OUUwNzQ4RTUzMjNFNEI3Ci06MTBFRDIwMDAyNDJGNDNEOEE1OEE2MzFGMENCNUEwMkM1RDMyOUQ0Q0JGCi06MTBFRDMwMDBDRUM3RjVEN0VEQUY0RkE2MzRERURBNzM2RjRGQTREMjRFCi06MTBFRDQwMDA5RjNCMzVGRjgyMEMzQ0ZGMTdDQUFFNTEzNkYyNUJCN0QyCi06MTBFRDUwMDAwNkM3MTI3RTQyRTE2Q0FFQ0YyQ0QwMjBBMDE1RjY4N0ZDCi06MTBFRDYwMDBBN0VBMjkzQzE0QkEwNDk1NEZBNTcxNUJEMDM0N0UyNURGCi06MTBFRDcwMDBGMTVGNTU1ODlDOTdGNjMwQTM4QUNDNkQ1NEI4REZENTE3Ci06MTBFRDgwMDA1ODkzNEFFQjU1RkRCNjc5MTBFOUFGOTczMjg0OUZGMzVCCi06MTBFRDkwMDBFMkQ1M0NGMUJFMDYxQUNEQkYzRkMzMjU5OTJBNjhBMjMxCi06MTBFREEwMDA3Q0UzNEIzMjRGRDk3NTU1RTU3OUM2RkUwNThEMzM1NTU5Ci06MTBFREIwMDAyN0YyNDE3RTc4QzcxMUNFOEIzNjU5NzVBMjZGQzI3Mzg4Ci06MTBFREMwMDAyMEYwRDE5NEMwN0U2OEQ1RTFEOTQwNzZBRkRCMDUxRTM2Ci06MTBFREQwMDAwNUM3RjcyNEY2N0M0NEZDRDBEMzZDRDVFOTNFMzdDMTk3Ci06MTBFREUwMDBCOTAzNTI3MUZEM0RCMjFFMkMxNzE5QjZERUQxRjdEQzA2Ci06MTBFREYwMDBEODJGQTFFOTk3OTQ0MzI0QkVFMDdCRTUwNDZEMDc0QzJFCi06MTBFRTAwMDA3NzQ0RTIzQjQ5RDg1OUM5NTc3QjEyQzMyNkJBNjdFOTEwCi06MTBFRTEwMDA0MURGRUY1OTg2QUIwRjRFRTA3RDBEMzg3M0Q5MEVFQzE0Ci06MTBFRTIwMDBCMUY0NUNGODcxM0FDM0U1MjQzRUM4MDUwMTI3MzQ4RDdFCi06MTBFRTMwMDBENjQ5QUYyNjM4QkQ3QzhFMDRBN0VFMDkyOEZERTFBQThECi06MTBFRTQwMDAxQThCOEUyMENBQ0ZBM0E0Q0NBNkY0Qzk3NzU1NjI1RkQzCi06MTBFRTUwMDBERjg2QjJCMDI3MUJBNEZDQjc2RTJCOUQxNkQ5NDc4NTYxCi06MTBFRTYwMDAzM0E5RUZGREZGNzhFMkY4QjZEQTIxOUNGRjBCQTg0ODQyCi06MTBFRTcwMDA3RjNCQjY0OUE5NzQ0RTIxNTcyODEyREU4QzQyODEwNzg4Ci06MTBFRTgwMDBBQTBCQjREQkM0NzhFRjdDRTQ3MzQ3MkFEQjdGOUVFN0YwCi06MTBFRTkwMDBCMTNBRURGM0IyNTg1RUY4N0VEMUYwMEYxRjUyQzIxN0FGCi06MTBFRUEwMDA2RTQ2RDI3NjNFRTY0QkM5Qzc3Mzc1OUE4RTNDNUM4NzM4Ci06MTBFRUIwMDBGM0ZFQjgzQzM0MkE4Q0ZEMTZBQkZGNzlFMkNGNTczRjA2Ci06MTBFRUMwMDA1Q0IxQkQ4MEY0RUYxRUIzQTc5Q0Y0NEY0N0UwNzFGNjMwCi06MTBFRUQwMDBDQjVGMzRFQkRCMjJFNDBFODZGNDY0NzJERDYxQ0MzRTYyCi06MTBFRUUwMDA1NUU3MzYzRDRFRkU3NkY3NDE0NUE3RkJGNDZFNzNDRkVFCi06MTBFRUYwMDA1MDgyQkJCMkU5MzMwQkQ1NjM1NjFERkM4NEZERUJCMkU3Ci06MTBFRjAwMDA0Q0ZGNUVEQTZGNTI2MzM1RDdDRjREODYxRDVDM0Y4NzZECi06MTBFRjEwMDA3QTkxRUIyMDQzNkVBMTRGMkU5RjFERjU2Qzc1MDQxRDU5Ci06MTBFRjIwMDBERTkzRjIwNjNERkU2MTY0QkY5QUE0QkMxRUE2MzgxQ0E3Ci06MTBFRjMwMDBEQkZEMkQ3NzBDQTdGNUY3Q0JGQzgwRjE1RTM1MUMxOUI2Ci06MTBFRjQwMDA0Qzc4REYwNEFGNzE2QjNDRUYwRTZBNUNCRjlDRjdBRTkwCi06MTBFRjUwMDBFRDVFNkZDNEZDRDM1MkZFNEZDQkZENTY2N0ZBREYyMDQ3Ci06MTBFRjYwMDA3OEQ3QjY3QzZBQTFEMkMyQUFGM0ExQTExNEY3ODYzNERECi06MTBFRjcwMDAzREM1MTk0NzhGRjRDQTZGOEMzQzU1NjkzRDE2OUE1RkExCi06MTBFRjgwMDA3NTExNThBRjIwQkQ2QjUzOTA3RTJGQkREQjM4NjYzOUFECi06MTBFRjkwMDAzRURGOEYzNDQ5MjEzQjhCRjEyQUQ5RTNGRDY2REY2MEU4Ci06MTBFRkEwMDA5QTVGRkRDRUQ3NjM0OThGMUQyNDIwRjA3RjVGMzdBRjc2Ci06MTBFRkIwMDAxRDQ2Nzg0M0ZFMkY0RTI0MzlEQjBCQUNENzBDMzlDREUwCi06MTBFRkMwMDAyNzM5QzVGN0YzODlGRjhCQTg5RkNCN0E3OThGQTU3RDY5Ci06MTBFRkQwMDAxRUNCRTU3RTEzOTA1QzIyRkZCMzNDMjBGRjNCQzlERkQ0Ci06MTBFRkUwMDBDQjc3QTIzQ0YwRkJBMzU5Q0VGN0I0OUJCQ0VDMzdBMzg0Ci06MTBFRkYwMDA1RTFGQzlGREUyQzVENERGRDM1RUVBNjQzOUE3M0E4NDU3Ci06MTBGMDAwMDA0MjkyRDdGMDExNUUyNzA0NDBEN0YyNDUwQUY4MjJGRDVDCi06MTBGMDEwMDBGRkJDOEM2NDcxMkYyNEYxMzkzOTQzRDg4MzUwOEU5RTA0Ci06MTBGMDIwMDBFMkMxNzNEODU1MzU0QTNFMjJFQ0E1RTg0QjdCNUE5QThCCi06MTBGMDMwMDBGOTk3NkRCRjk4NDY1MjI2RUQ4NDUzREE0OUZGNzhENjhBCi06MTBGMDQwMDBGQkZGMjg2REQ1ODZEN0E3MkNBOEMzNzM2RTM4QTVGMjExCi06MTBGMDUwMDBGODYxMTlGNzg1MjU5RjFDOTFGOTFBQjIxQjdBOUFBOEI1Ci06MTBGMDYwMDAxRkE2RTcxM0IwNEZGNUU1MTNCREVCNEJDODFDNEQ5QTM3Ci06MTBGMDcwMDBCM0UzMjhCNTUzN0NBMTEyNzJEQkE2MkQ2QjNGNkExNjUxCi06MTBGMDgwMDA2MjlFNDdGQ0Q3NzA2NDZFMUVENUUzNzU5RkIzNDIwMjQzCi06MTBGMDkwMDA4MkQ4RjA2RENGNDcyRjIyMUUxRTNFOENGODhGNjNBN0JCCi06MTBGMEEwMDBGMDM4Q0M3RkU4N0YwRDA2NzdGRkYxNkU0NUVBOTE0MDlFCi06MTBGMEIwMDBEMjdDRTJDN0FFMDZCNUFGOEY4MDU0MjI2MzUzREZGRDJBCi06MTBGMEMwMDBBNDdEN0IwMDZERTc3RjY3N0EwNzY3MjIzRUNGMENGMDU3Ci06MTBGMEQwMDA3M0RCN0RGQURCNEMxMkNCRkQ2NzQ1NUNERjYwRjFFNjRDCi06MTBGMEUwMDAxMUZGMzQ2NDYzQTgxQjg3NEZBRDk5MjJFRjUzNjQ4NUU5Ci06MTBGMEYwMDBCOEY3OUMzNzY3MEEzOTE4MTU4MEVEMEFDN0VCQUEzM0IxCi06MTBGMTAwMDA4ODc0QkZENEEwN0EyREU4MkY1RDg0QzA5MkE5QTQ2RjIzCi06MTBGMTEwMDA2NDVFRjcwMTkwM0Y1RUZDNDVGQTNDMjhCQjBGOTBERjMwCi06MTBGMTIwMDA4Mjc2RUJDMTVGQzRENjExNzhEOTZGMzFGMjU4MDBFQjBCCi06MTBGMTMwMDA0REM0NUYyQjlCMTRGODBGQzRDNUFBNjdBMkU3QUY5MzE5Ci06MTBGMTQwMDA3NUYyQUIxQjc3MUQxQjhDNzQ1REYzNUNDQzM4RjkyRDBECi06MTBGMTUwMDA3Q0ZGMTFFMjc4Nzg1RDVENzQzREMzQ0Q5OUQyN0YxOTUzCi06MTBGMTYwMDAwRUMzQzk3RjQxQkU2MjNENjFENkEwRDU4QTdDQUM2MDJBCi06MTBGMTcwMDAxNDQzMjJGNjkyNDlFMDBCRjUyQkNCNjdCRTYxNkY4QUYwCi06MTBGMTgwMDA4NTVFRUFCOTA0NUNBNzk0QkIzQjc0OTRFQTgxQTZENDdCCi06MTBGMTkwMDA2NTc5Njg4RjI5OUExODlGRDI5ODI1RUVBN0I0QTA0QTVFCi06MTBGMUEwMDA3NTBDOTNCQ0ZFNTlFQzc3MDdCQzY3QTlERTY0OTVENDU3Ci06MTBGMUIwMDA5N0UwQzQ1RkNBRkJDOEQzQUY5MkZFRERFQTYwNkM5REU2Ci06MTBGMUMwMDBBOEMwNTM5NTlDMzcxOTgyMzVCNEVGQ0FEREEyREU2OTE5Ci06MTBGMUQwMDBFREVFRThGOTU1MTI0RkVCOUUzQTdEOENEMjg1MTVBMUU0Ci06MTBGMUUwMDA5ODcxODlBN0FBQzY5ODNBMTZCMTM4REM5RjI5RUZBRDY1Ci06MTBGMUYwMDA2NDdERkJGNUQ2NUJGQ0QxMkNGQzhEQjdFNTNBQzZGOEY3Ci06MTBGMjAwMDBFNjRDOTFFRkFEQzQ2MzEwN0RENzA1RDUyMEYxRDEyQTJFCi06MTBGMjEwMDAyNTkwMkNGQzVFNzAyQ0M3RjNERDY3QjA4MUFDQ0ZCREIwCi06MTBGMjIwMDA1RkUyRTkzRUM5M0Y3QzdFN0NCRkUyMTlGMTdEQzVGRDBFCi06MTBGMjMwMDAzRjhCODY3RjBERjgyQzgzRjFGOTgzMEQzRkIwNTBERUI0Ci06MTBGMjQwMDAzMTk2REY1NkQ1OTlEOUZGNUQyM0YxMTNDQjVGNkI3QUU5Ci06MTBGMjUwMDBGOTY3ODc4NUVDNUIyQzdGNTVGQTk1NkJDMDJGRkNGNjIwCi06MTBGMjYwMDBGRjVCRjgwRDNBQUY5MUNCQUMzNTg3MzkzRkI1RjYwOTY2Ci06MTBGMjcwMDBDNTQzRjlBQjZCOURBQkY3M0NGMjdDN0ZFRkI5OUUzNTk0Ci06MTBGMjgwMDBFODNEMDZDNjMwQkRFN0E0NUQxN0JENjNGREVEQkQ5NjQ0Ci06MTBGMjkwMDBERUJDMjZFNzA1MkZCNzY2NzMzRURERTBBQkQ4NzU2NkFBCi06MTBGMkEwMDA0OUJGN0RGNjUzQzI3RkJERDQ1ODYyMjdGRkEzRkJBNDlDCi06MTBGMkIwMDBDOUEzRTg5Q0FGNEMyRUMwRjM4RjZGNTY4MUZDOTFFRTMyCi06MTBGMkMwMDBBNkUxM0IwMzA4N0ZFMUE5QTJDNTk0NUYxRjdGMEFFRDc5Ci06MTBGMkQwMDAxM0REMDdCNzE2RkQ1NzAyREYwNzdCRDI0OEVFNjdCNjhFCi06MTBGMkUwMDA4RDQ4RkJCRDgzRDc2MUZCREU3REIyNzA2NzM5RTlFOUVDCi06MTBGMkYwMDA5M0E1NDVCNEFFODJFMzU0OUY1RTI4RUQ1NEY1Qzk0MjEwCi06MTBGMzAwMDA3QjQ3ODRCREZBNERBNkM4Q0Y2RjcxRkZGRTUxOEExQkEzCi06MTBGMzEwMDA2NkVGMzU3QjI4M0YzMkRCRUNERjk0ODBGMDE1QkVBMDMyCi06MTBGMzIwMDA3OEFBNzFCNzYzRUQ0NzlFQTQ3NTUxQkUyOENEOEFGM0M0Ci06MTBGMzMwMDBGRUU5MDg4RDU3RUQ1MTE4RkVFRUE2QjJCQzNENjQzRkM0Ci06MTBGMzQwMDA4M0FBODdFQzYyNzdEMzdERjkwRjkyMUZENEZDNDBGRTJECi06MTBGMzUwMDA3RDExRkIxRDRCMTVGQTY2RjYwRDY2QjZENzlEODNFQzQ1Ci06MTBGMzYwMDBCRjJFQTdCQ0E4NzcxN0VCOERDRTQzRkIyQ0ZDN0RDMzJCCi06MTBGMzcwMDAxRTA1REM3OENFNjNFRUEzMkYxMzFFM0EwRjlDQjY1MDA5Ci06MTBGMzgwMDAxMDUwRDI3MERBRDIxMTQ3N0YxQkVEMjUwQ0YzQzI5Q0NFCi06MTBGMzkwMDBBRkRENjFFMUZBQ0RGRDdGQjBEMDc5MkI5RkZCODRGMzI3Ci06MTBGM0EwMDA2RjZCMjg3RTIwM0ZFRjE5OTVCRjc3M0FEQUZDQUE4NTZDCi06MTBGM0IwMDBGOEI0QjI0RTgxMDE1OTkxRTM2NjFFMjdGRDRBRkRDRjk0Ci06MTBGM0MwMDBFQTg0OUUzNkY4N0Y4NUU0Nzc4M0ZGMEQ3OTU4MjFGNTJFCi06MTBGM0QwMDBEQTdENUJFM0YzQkJBMUZGMUUwNEVGOTY0MUI4REUwM0M5Ci06MTBGM0UwMDA3NUNCQjkwRUU5ODExREQxRjM1NzUyRkM3QTIzQ0QxN0E1Ci06MTBGM0YwMDBGQ0JFRjJBOUU4RjFENUJEN0MxRTYwRkQxRkFCNDdCRjg2Ci06MTBGNDAwMDAzM0Y0N0YyRUU0MTI5RjVGMEVBRjE4QTZBMTNDN0Q3REUyCi06MTBGNDEwMDA3QUNEMzA4ODkzQUYzQzI5RkQwNkMzNkU1RjBFOUJEODMyCi06MTBGNDIwMDBFRUM1Q0VFQjZBQkM2MjIxN0I1QkQ1RkEyN0Y2NzM2NzJCCi06MTBGNDMwMDAzNTdEQzlGNDI4NkY2QUUxN0FEOTVCQzBCRjhFRjA3OTU3Ci06MTBGNDQwMDA0QjkzREQ0OUZFNzY3OTg3RDAwM0YzOUFBQ0MxQTA0Mjk1Ci06MTBGNDUwMDBFM0ExNUFBMjczRjc2MUYxQkQ0OUUwOTBDMkZFMTY0OERDCi06MTBGNDYwMDBCREI4NTJFMjc1QTVDNEUzNEE4Q0UzMDY1MzdEOEM4QzhCCi06MTBGNDcwMDBFMzJCNjVCQ0JFM0E2N0Q3MzEyQTI5QTk5NEUzRUJEQUJFCi06MTBGNDgwMDA4RTI2MTMxRUU3ODFEMDVCRjM0MjQyNkYxOUY0MzFFQ0Y0Ci06MTBGNDkwMDA1MEFDQkU0MDBCNzcwRkQxNzc2RDkzOTVFQkQ2RTc0QjExCi06MTBGNEEwMDBCRDM1QkYwRUY1OTZEMjVGN0Y3NDBGQjQ4QkZDRjE3RTM1Ci06MTBGNEIwMDAwMTc3QUNEREFENkM4ODlFRUYxQTIwRkNEOENCRDI3RkYzCi06MTBGNEMwMDAyRTFDMTA0RDk3RjIxRUIwNTM3RTdGOUVBRTdBODJGQ0FBCi06MTBGNEQwMDA1NkJCNDZGQkI3OEU0NTdFQzNGNTVCRjVFMTI5RjFFQUU1Ci06MTBGNEUwMDBCNThDRjY0RDE5MTcxOEZEMDU5NDY3QzNGOTIxRTcwRTgxCi06MTBGNEYwMDA0NzY0RENGRjlGMDM4NDdGQjM2NkIyMUEyMEJBNDZDNDE4Ci06MTBGNTAwMDA0OTBCMEFCM0UyQzY0OTczMDlGNDM3ODZEQ0Y3QjM3MUQ1Ci06MTBGNTEwMDA5MTcxOTI3N0Q3MjhFMkI3N0Y3NUVGMkNBN0JBQTZBQTg4Ci06MTBGNTIwMDAzQUExMkZCQTI2RTFCQTI5RTRGNzAzRkJEMTU1NzVENkUzCi06MTBGNTMwMDAyMEM1MzM1NUM4MkZGQzdEMUFGMTA5Qzk2MzkzNTI0NjgzCi06MTBGNTQwMDA3QzgyNzFDNkVEQjRGRTQyQkFFQUM0RjMyRjZDNDRGQjcwCi06MTBGNTUwMDA4RUNCMkYyQ0ZEOTJGOUFCNkQ4NDM4MzdFMjZENDBCQzE5Ci06MTBGNTYwMDBCOEMzODgzNzJBQUYwQUJGRDY3ODVFQTk3NTcwREM1MTU4Ci06MTBGNTcwMDBEOTI0RUFCNTFCOEU3QzMzMzQwQkUxRUQ2RUZFRjNEMDVCCi06MTBGNTgwMDBFNTU0NEYzRTQwRDhFNzg2RTJEMEE3NTQ1N0Y0RjUxRTI1Ci06MTBGNTkwMDA1QjVDRkZCNTU3RkYyQkI1MkMwRjk1RTY4RTRDRjY2QkQ5Ci06MTBGNUEwMDAwRUEyMUY3OTEzRUFEMUI3QkZFMDM4QTVFMTQ4QzJCRDZBCi06MTBGNUIwMDA5NENGRUI1QUUxMUZFNkZDMUUzQTU1QzMyNkY2ODMzNzdCCi06MTBGNUMwMDA0MTJEQjdFNDFGNDVGQThEMkI5REEyNEVFOTQxNjkzRkJECi06MTBGNUQwMDBBOUZGMDhGMkY1ODMzODc3NDY2MTdGRjkzN0Y0NDk4NTRBCi06MTBGNUUwMDBFNEVCRDUxMEQ4MzI1NUU5QUYwNzJBQTREQ0FDQ0RERjY3Ci06MTBGNUYwMDBCNTg1QUVGNjYzRkRBNzBBMjk0RjE4MzFCMEJEOENGNTZECi06MTBGNjAwMDA5RkZFMzM4NjVGQUJERjRFNjRGRkI4QkI0RDc1NTJBRUQ1Ci06MTBGNjEwMDAxOUYxRkJBQjQxRTQyNzYyNUM5MDFEMjc1RkZCODVFNDk5Ci06MTBGNjIwMDBDRjRFNzk3RjVDM0Q0OTY1RkM5OTI2OEJENkYwQjcxMEFCCi06MTBGNjMwMDA4RkNDMzdEREE3MUQ0MUIyNkY3OTg3NUZDRDI2M0U1ODRECi06MTBGNjQwMDBCQjNCRkFERTg5RThFOEU3QkFCMUEwQzg0Nzg1RUM3Q0E1Ci06MTBGNjUwMDAxNzY1OENCRjc0RjhENTMxQzQ2RkQ1NkY3RjNCNEFEMDI2Ci06MTBGNjYwMDBFNzlCNTE5NkY0NkJDMzY3QjQ4QTIyRTI2NjkzMjJFMjY5Ci06MTBGNjcwMDBFNkZENUE0NzMyQzU2QjU1MDc1NTVGNjQzREJGNDFFRjA0Ci06MTBGNjgwMDA5N0E1M0M4MTI2RjIwM0Y1MDM3NEU2QUJFQTI2QzExRjc5Ci06MTBGNjkwMDBBNjY2RDFFMkZFNEI0NDdFQzhDQ0ZCRjcxQjJGNDZCRUNDCi06MTBGNkEwMDBGOTFFN0IwNjA0MTdGMjQwOTVCOTg3RjlBRkVBQjQ4OUQxCi06MTBGNkIwMDBFMUE5M0E3RDM5NzM0NEM0N0IwMTVBNzcwMEU5QkZFQTc2Ci06MTBGNkMwMDA3NUMwRkFDNDBFQTQ2RkU3RDNGNzkxRDg5RkZGN0UwMkVFCi06MTBGNkQwMDBGQjYxQzdCMkI3OTc4QkZCMkYxNTQ4N0YzREZDRjY5QUFECi06MTBGNkUwMDBEMTkxRjY2MEUyMDA3MTJGMEU4NDA3Mzc3OTNGQkYxMDg5Ci06MTBGNkYwMDBGQjRCM0M2QzgyNDUzMkJGMjBGODc5QUY4QzlCMzAyRTlGCi06MTBGNzAwMDA3QjczNDA5Q0I4RUM3QUZERTlFQTY2MkI1MEZFQjlFQUJGCi06MTBGNzEwMDAwMzJCRDcxOTdERERCQzkyRTM3RUI4RUExRjRERkEwNkI0Ci06MTBGNzIwMDBGQ0ZFMUJBOTdERjhGMENBRDFGNEZDRUJDM0FCNkZFNDdGCi06MTBGNzMwMDA3Q0E5QjIyOTJBQ0YxMTIwRjhEQ0U0NUY3REY1RUU1RENCCi06MTBGNzQwMDBFNDdGQjY2OUVDOUYxNEI2OUQ3RDk3RUU2OUY3MzU5ODE2Ci06MTBGNzUwMDBGOURCRDE4QUZEMTM3NjA2OTJDOEFGMkE5QzRGREYxMUUwCi06MTBGNzYwMDBFRDZCRDU5OEZGRDBERjMyRkMyQjNCRkI1N0E3OEFEODM3Ci06MTBGNzcwMDBCRkMyNzU3QzQxNkU4QjRFOTREM0JBQTc4QThCNjg5QUIwCi06MTBGNzgwMDA4MkUzQTREN0M2OTM3RkU1RThGM0I3MEM3ODNFOTNGOEZECi06MTBGNzkwMDBFQzZFNDlFMEJDOEIwMkQ5ODJDRjYwNDQxNERDRUIxQURBCi06MTBGN0EwMDA1RTY3RkY2NDVEQTMxQUY1RkQ4OEYxREU1RjA2ODg3QjY2Ci06MTBGN0IwMDA4N0VGMEMzRTBCMjk1RUU2QTNCREEyNUREN0I4MkY5MzYxCi06MTBGN0MwMDBDRUIxRDYxQzYyM0VBOUFFMzM4QkYxM0RBMjA1QkEwNzdECi06MTBGN0QwMDA5QUMwMUY0MTA3MDgzRjI3RTgxMUQyNjU5RTI1Mzg4NDRCCi06MTBGN0UwMDBGQ0ZBQkRCREY3OEFCMjJFMjQyOEVBRjU2QTVBODdGM0RGCi06MTBGN0YwMDA3NzRDOTc1QkY3QTVDN0IzNDMyN0U5OUUwNzFEQkVFMzg4Ci06MTBGODAwMDA1OTIyMUU4QTFERkZBRDVCRTQ0MThFOUYxM0ZBRjFGODY5Ci06MTBGODEwMDA0Q0ZGRTg3ODdBMzIwMEM1MjI1RkEwNDhGQTM1ODhFRkJECi06MTBGODIwMDBFRDYzRTczNUQzN0E3OEZFREQ0MzAyQzc4OThGM0JGNzc2Ci06MTBGODMwMDAyNkYwRkQ2M0E3NEJFNDc1NEJFQURCMzRGQTFFNjY2REQ4Ci06MTBGODQwMDA4MzMyODFFQ0QyREE5Q0Y3Rjg3QjE5RUMxNzkxOUU1QzNECi06MTBGODUwMDAxQjNFQzhGN0FGMTU3NTdCNjc3OUUzQzBCMUREMkRFQ0IyCi06MTBGODYwMDBDMzNDRjk5RDcyRUNGODdDMzk3RTA2M0MxOTMyOUVEQjc0Ci06MTBGODcwMDA0RUY3M0U2N0NBQ0Q0RUYxREQ5QkY4RUVGNTU2QTlENzlGCi06MTBGODgwMDAxN0RGNjI2NjNGRUEwQ0U4NjY3MTdGMjJFRTM5MTY0OEEwCi06MTBGODkwMDBCRDdEQUJENEY3QjFERjYzMUJGQUZENzZCOUNFQzI2NzhECi06MTBGOEEwMDA2MDMzREQ3M0M0N0U5RjdEQkJGNDBGMTc4MTk3RDdFRjY0Ci06MTBGOEIwMDBGNzVEQkRGNDEzNjNGRkZFNDI4OTVCRUFGNTUxMzA4QUMwCi06MTBGOEMwMDBGNDdBMDhFRDBERDc1QkU0MjZCMEREOUU1RjMwMzJBRUYyCi06MTBGOEQwMDBERjQxREZBOUVCRjIzQjc1NkEwREZBNTdFN0JFQzdGNkM5Ci06MTBGOEUwMDBGMDc4Q0JCOTk3RjlGQjg2NzMwOTkwMURFNzlFQURDRkYxCi06MTBGOEYwMDAxRTFBN0FFNDM2NDE3Nzc5RUY1MUUxMTQzMDFBRjRCRkQ5Ci06MTBGOTAwMDA4NDExNUE2NDdFQ0RBMEZGODM5MjBFRkZDNzc1NDUzOURFCi06MTBGOTEwMDBBMDQ1RTY2MzBFQTlGRTA3REQxOTU0NDdEREM5RkUzODkwCi06MTBGOTIwMDA5RTgwRUQyMTlFNkJBODNDRDc1MDZCODQ5REJCMzQ3MEFDCi06MTBGOTMwMDA3OTVDM0VFRTNCNUY2QTQwRDg5Mzc0NkU1QjcyQURFQ0NGCi06MTBGOTQwMDAzNzU2ODQxNEZFRUVCMDIyMENBMjdGOUJDMkY5Q0E1MTM2Ci06MTBGOTUwMDAwRDJENUNCRkIxQTQ1NEYxNzg4NTVBM0M0QkYwMTk3QzU1Ci06MTBGOTYwMDBCNEMwMjZGQzAzODM1RjdBRjEyNUY5ODhDNkM5NUZCODY1Ci06MTBGOTcwMDA1NUZBMEJCMUZDMzQxQURBNjdEMUZBNEJCRDhBODdFQTIzCi06MTBGOTgwMDAzNkFGQzk0N0NCQzZCRDRFRTFFRUI1RjgwOEY5RDI0QzRCCi06MTBGOTkwMDA3QTMxOTY5RjVFNzNGQjFGMjVGQzc1Qjc1RjVFNTI4MEMwCi06MTBGOUEwMDBFQjFGQ0ZGRDZDMjhGMTRGRTUzNUU0RTg0NTQ5QkZERDlECi06MTBGOUIwMDA4RUMwNzFBRTYzQTk5Nzc1MDRGNUI5OEQxRDg0OTc1NkY1Ci06MTBGOUMwMDA2MEJGQjJEM0Q1QkU2NTgzRjBCN0I5OEVBMDIyOUNDMDBDCi06MTBGOUQwMDBGNUE1MTU0RDc2RkU2RUFEQTJBMTNBNzEwQ0U5RTMyNkIwCi06MTBGOUUwMDBENTYzQzc3RTc5QzNFOTUyQ0EyMzk0MTc4OTNBOTcyQTA3Ci06MTBGOUYwMDBCQkE4QkJBQkIyOEJCQUJCQjlFOUZFRTdEQzEzRjhFRjJGCi06MTBGQTAwMDAwMzQ0RDcxMTU4M0E3RUI1RTE3QkY4M0U1NkRGMzU5MzczCi06MTBGQTEwMDAwRjM3RTE3RjRFMEYzNTRCRkM2QzY4QkI5MjM5ODZDNEMzCi06MTBGQTIwMDAzNEREN0Y4OEUwRUU3RUZENDUwQjdEOEE1MTM1RTZENURECi06MTBGQTMwMDA1OTU0ODJENkVDRDY3OURFMkQ3NTJEQjU5NDU2MzZFMDI0Ci06MTBGQTQwMDBCN0JCOUQ0MkVGOUE4MzQzRDg2RkNEQkZCRTdBOUJFQTg2Ci06MTBGQTUwMDA4MzZGOEMyNUZCRDVENUQyMzZENjEyQzFFRjlEMUI1MEI2Ci06MTBGQTYwMDA2RkM3QTE2MzM1OThBNDFDNkJEQzJBQ0EyMkU5NDcwOTM5Ci06MTBGQTcwMDBCOUFFNkEzRTlBNDlGOThCNEU5MkU3N0M2QURGNDkxRTFECi06MTBGQTgwMDA4MTZEQzVERTMzQzkyM0M5OUZEOTJGNUE2M0JENEI0RDQ0Ci06MTBGQTkwMDAyQUNGMDNBRDYzRDRFRDQ5OTFGMDZENjZGODJFODVDNDhECi06MTBGQUEwMDAzQTAwMURBMzE2MTc0NDhFRDdGQ0JGRDYwNzE3ODUzRTE0Ci06MTBGQUIwMDBFODg4RDIwNzA2OUU0MjE2RTBFRjg4MDM4N0FENUNBNzcwCi06MTBGQUMwMDA0MEY3M0ZBRTA4M0E2QTAzMDVGRDZFQzI2MDhBRTQ3NkVECi06MTBGQUQwMDAzMkREN0IwRjI3OTc0RjgzQkJBOUFGNDE1ODRCQTVGQjY2Ci06MTBGQUUwMDBFOUIwMkFFQUZCODZCMEJFOUYyOEY3QkY0OTBCQjc1MEEyCi06MTBGQUYwMDAzREYwNjQ3OTVGM0EwNURBNzlERTBDRThFMUQ2MEI0RTI5Ci06MTBGQjAwMDBGRTBFQkExODNDREM0RUIyODVFNzUzNUEyQjNGMTRFMjg2Ci06MTBGQjEwMDBFRjdCQzI5OTlBRUI4MjREN0U2RjFEODdERTdENzhEMzk1Ci06MTBGQjIwMDBFMDgyODEwRjk1RUVENTQ0M0Q1M0VDNzk2RTE4MjhGQ0E4Ci06MTBGQjMwMDBCQzlCQkM0MjBGOTE0QjQxRjVDMDkzMjBDNEY3RjlEMzU1Ci06MTBGQjQwMDBBMTQzREVFQkM3M0ZDNzU0OEMwQkU5MUU2RjNBQkEzMUI1Ci06MTBGQjUwMDA4OThDOEYyMENGOUY0NkU3NTFFMzlEQTc2MzNFOTMxOTgxCi06MTBGQjYwMDA0QTlEMDQ5RjEyQ0UzNDdENjdCRkZFNzM3NDUzMzUyOEJGCi06MTBGQjcwMDBFNUJERUZFQkU5RkE3MTUxREYzREE4QTdFOThERjdBOUUzCi06MTBGQjgwMDA3RTU5RjE3QUI5QkVEOTQzREY4RDUzRkMxM0Q2M0E3QjQ3Ci06MTBGQjkwMDBGNTU5MzZDMDk4ODEyQjcyMDY0RUU4RkI2RTA0RkNDMDA2Ci06MTBGQkEwMDA3NTI0QjFERjhENDQ3QzI3MDIxNzIzRkUyRTkyNTFFNzg2Ci06MTBGQkIwMDBCQjNCQjg0OEE3M0E5MTY1RTkzNkZFN0IzQjg1QjZBMUM5Ci06MTBGQkMwMDBFMzI5QUY3OTI4Q0Q5RjMzMzA4M0VBN0RFQjQ2RjI2MjlCCi06MTBGQkQwMDA1QTcwMDJGQkI5OTJCRkVDRTA5RDQ0Nzg1MEJDQzZGNzY2Ci06MTBGQkUwMDAyQkMwN0NEM0ZCRjcwQjMyODFCRjI3QjI1QkM1NzczRUJFCi06MTBGQkYwMDBEQjkxMUY2REE5MkMwNTNBRDU1RkMzMjMyNTNBRjlEM0I0Ci06MTBGQzAwMDA1QjVDMzYwRjdENDc2QzI1QjhFRDdENzBEN0Q4NDQxRDAxCi06MTBGQzEwMDA0ODhENERENDc5MThGNTcyQjE3OEFEQjExOTc5NEU4RjAwCi06MTBGQzIwMDA4REZERjE5OEVGOTA3RTYyRjNERjQyNzg3QTI4QTk5OEYzCi06MTBGQzMwMDBGRjBFNTNERTJCRDNEQzVDMEYyNUJGN0ZBQTQ5MzBGMENCCi06MTBGQzQwMDA1MDZDRTNFNzdERjU5NEVDNjdENjUyM0QzN0MyNTk5MzhCCi06MTBGQzUwMDAwMTVDRkY3ODM0Njk1NDBBRDU2NUQ1QjQ4OTdBRUU5QTg3Ci06MTBGQzYwMDA4QzAwRUI3N0IzNUY2MTdENUZEMzVBRDI0QUY2RTJCMjg0Ci06MTBGQzcwMDBDM0MyNzVERDM1MkU1MTA3MUZDODgwRDBGMzdBMzQzRERECi06MTBGQzgwMDBBNjE5RjRBMEZCNEI1OThGNjREMDY1NUMzQTk0RDA3QkU1Ci06MTBGQzkwMDBFM0MyREU5MTg0OTM0MkRCQ0IzN0QwRkRDMkI4NzA3NEVGCi06MTBGQ0EwMDA3RDE5RDI2OTM1RDFBOUY3M0IxRUNEQzlGNTFFMDY3RDU4Ci06MTBGQ0IwMDA5MDcxOThEOTlEOTJFRTA2QkQ5Q0M2REYyM0YwNkE1MUUzCi06MTBGQ0MwMDA3RjhGQzBBMEUzRjY0NDQxMkYzMzU1RTAwQ0U3Nzc3NUYyCi06MTBGQ0QwMDA1QTM3OTY0RUZGMUJFMTE0QzFCQUIwNEIwMDAwMDAwMDJBCi06MTBGQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDYyCi06MTBGQ0YwMDAwMEZGQ0I5MzY1NjBGODUxOEZDMEY5RDIwQzBDREVCQ0NECi06MTBGRDAwMDBBODYyQjRDNDBDNUMwQzBDNDE0MDVDMEVDNDFBNDA3QjZECi06MTBGRDEwMDA2RjAxRTlEQjQwMUNDRUNEQzAxMDAxQzRGQjgxRjgxRjkwCi06MTBGRDIwMDAxMEZGMDc2MjBEMjBENjA0RTI1RjQwNzk0NUE4MUI1QkY3Ci06MTBGRDMwMDA5ODE4MThEQTgwQjgwMzg4QkI4MDU4ODc5MTgxNDE5NzVBCi06MTBGRDQwMDA5MTc4RkI5Mzg0MTkxOERFODkyM0Y4N0ExMjBDMENDRDc0Ci06MTBGRDUwMDA1MkY0RjNGRjYwQzMzMTU2RjRCNUVGMjlEMDNFNEUxNzhECi06MTBGRDYwMDAwNDNGQzcxOTk4MjQ1QzUwRDU3MEJCRTAzNzgzMDc0RDFBCi06MTBGRDcwMDA5RTE3OERDRjg3NDc3RjlFMjEyQUJGNUMwQjk1M0Y0REY1Ci06MTBGRDgwMDA4NzgxRTEyMzkyOUEwQTJERkM2RTQxQzc4QTQ2MEMwQ0FBCi06MTBGRDkwMDA0QTQ2QzRBQkRGNjA4Q0NBMEYzMDgxRDAwMEY5QURCMUU4Ci06MTBGREEwMDAwOUE4MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTBGREIwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRkU1N0QwOTdDNTRENTgyCi06MTBGREMwMDBGNUYwN0RGMzk2OTk0OTY2MjY5MzkwMEQwODcxMDI4QUE1Ci06MTBGREQwMDBBODgwMTMwODY5NDBCNEMzMjJBMjIyOEU1QkM1MEQyNkY5Ci06MTBGREUwMDAwMkQ5MzcxMEZERjBBRkZEMzIxMDM2MkRENkQwODI0NjQ1Ci06MTBGREYwMDA4Qjc0QzBBMEMxODIwNDBEMTgyNEUwMDAyRUY4MkZENTBBCi06MTBGRTAwMDBEOEJGN0I1QjBDNEFDMzE2OTI4MDFCN0VCNUU1N0ZDRUM0Ci06MTBGRTEwMDBCOUY3MjVFRjREMjY4MDZEQkY1RkZCRkRCRjY5RjFFNkE5Ci06MTBGRTIwMDBCQzdCREY1RENFNzZDRjNERjdEQ0ZCMTREQjI4OTZGODlDCi06MTBGRTMwMDA2M0M2Q0VFMDBGRDJBQjJDOENCMTUxRERFOTZDREJBMEY4Ci06MTBGRTQwMDBBMTg3RkE3NEU3RkY1OTY1RDNFQTg3NDIxRUFCRDA2RUVCCi06MTBGRTUwMDAxRUQ2RkQ5Q0IxODU1NDdFNDA4QzZCMzhCQjFDRDNGNDAwCi06MTBGRTYwMDAxMDFCMEU4RjZEQzkxNjk2Q0NEODdENkU0NkJGMDEwOTRBCi06MTBGRTcwMDBCRTc0Mjk5MUIxQ0UxNTU2RjdCQTBDNzhBRTdBNUMwOEVCCi06MTBGRTgwMDBERkY3QzgyMDc3NTBDMkY3M0NDOTUyMTZFNDNGQTJCQTQ4Ci06MTBGRTkwMDBENzAxQ0NCRTNGMjNCMzZDQzY2NkRBRTA2RjBGRkNDMzVDCi06MTBGRUEwMDA3QUEwQkU3Q0FDNkMxMDYzRUE2OTk5MDVBMDdGRUE3NzAyCi06MTBGRUIwMDAxMkE1MDMzNDM2QzNFRjAwNzhGOTJENkNEQ0QwRUVGRUNBCi06MTBGRUMwMDBCOTEzRkRFQzczODBCN0U4Rjk4OTdFNUJDMDkwN0YwOUI4Ci06MTBGRUQwMDA5M0E4RkZFQ0ZCNEFBQTVGNkY2RkYxRjI1QjZDM0UwN0UxCi06MTBGRUUwMDAzNjE2OTQ4RENGM0I5NjdGRTlDMkU3OEI5QjZFQTE3QTQ1Ci06MTBGRUYwMDAxODUzMkNEOENGNzJCN0M4NEZGQzVDNjM5NkVFRkFCQjkwCi06MTBGRjAwMDBGMTE0QTI3Njc0RDhEMzA0RURGRTg4MzFFOUI1QkZCNkZBCi06MTBGRjEwMDAzMkMwNDNENTU2RDU2MzA1QkM0Q0Q4QUE4NjdGMEM3MDM5Ci06MTBGRjIwMDBFOTVBMjk4NEIwNjU5NzlEMzFDMDRCRkI2QTBFODc5REM1Ci06MTBGRjMwMDA5QTBGQ0I5RkE4MDUxOEFBMjhCNzM2RkZGQzBBQzREQjg2Ci06MTBGRjQwMDA1Njk5QURBMzY2RkM4NEY3NTYxQkM3M0I2QkU0NzA5RUM1Ci06MTBGRjUwMDA5RDgzQTU2Qjc3NEZDN0Y3MEIxQUFEQ0MwRUY1OTU2RTQ5Ci06MTBGRjYwMDBDRjlGN0EwNUMwRjlGQjU0ODY0NTRBRDcyRkQwRkEwMUI2Ci06MTBGRjcwMDA1QzE4OTJFQTExRUUxOENGQThGREUwMzYzOUI0MUVDQTFCCi06MTBGRjgwMDA3N0I4OUE5MzZGODNGMTFGQUJCNDMxQ0ZDNUQwNkY2NzQ5Ci06MTBGRjkwMDA3M0YyQUQ4MDg3QTJEMDk2NDlGODVFRDE0NkM5OEIyQzBBCi06MTBGRkEwMDAzNDYxRUJGQTM3RkJDMjdCQTUxQjI0QUYxNUYwNTI1QzIyCi06MTBGRkIwMDAxN0NCM0M0Mzc4MUZDRUMwQkZENjA2MzlGQzYzQzg5RjIxCi06MTBGRkMwMDAwQkUzNjQxOTQ4RDdFQTQ5NENDNkY2NTc2ODFFNjczN0YxCi06MTBGRkQwMDA5RThFNTUwRTYxMUU2QjM3NUNCQTAxREE4MUY3Q0E1RUUwCi06MTBGRkUwMDA5NEJDMzhDNDMyMEIwQjIwNUZCNjZGQjc0RjdCRDY4MTAxCi06MTBGRkYwMDBFMzVCQTAwRDc2RTJCODk2NkE1ODJFM0Y5NEJCQ0RFRTM3Ci06MDIwMDAwMDIyMDAwREMKLToxMDAwMDAwMEMxRkVBREQ1MjY0MTdFRDFFQUI1NUE5RTgxRkVDNTc1QTkKLToxMDAwMTAwMDk3MzE4RkNERDBBRjlBNDEyOTQ2RkU4ODRDOEYwMTlCRjYKLToxMDAwMjAwMDE4RkI1M0M0OThBRjFFRjk0NDA5NjkzNzE5RTRBMjlGMUQKLToxMDAwMzAwMDE0NEZGNDJFQUU5MzRERjUwMzI2MTk0QjgyRkY3RTAwMkMKLToxMDAwNDAwMDdGMDJCRTgyM0I5RDg0NTc5RDZFNzMwNTFGRTk3NDNCMDIKLToxMDAwNTAwMDI1RTQ4NzI5OUREOUM2RkFGNUY0RTc0ODA3RTg0Rjc1RTYKLToxMDAwNjAwMEE1OUJEMjVGNTRBNjUyQkFCMkQyNDNGNDc5MDJGMTA3RUIKLToxMDAwNzAwMEU5NzJEMTZGRDc1ODM2NEU4MTc2NUQzRUU2NDYzMTRCRjgKLToxMDAwODAwMDk4RTIxQkE3MDI5Q0UwRTc3MEYyREQwMUM5NzM5NkYxQ0MKLToxMDAwOTAwMEVCRTkxMzZBMjAxNzY1NzIxNTlCRTQ1M0ZBMDJBQzA1NkQKLToxMDAwQTAwMEU2MzAyRkI0QUZEQ0U4OUIzODlBQjFENzU5RTA3MTFDMjkKLToxMDAwQjAwMEZGMjIyOTUwODA3NDY1QUMzRUQ1MEY3NDU5MjI4MTFFRjEKLToxMDAwQzAwMDAxN0MyREM1NDEwMjFFOTZGNDA1N0UwNjNBM0Q3MTRGMTYKLToxMDAwRDAwMEY2QjNCMjI0QzY5QTg4NzBERTczOEY2NjUwM0QzNTU0RUQKLToxMDAwRTAwMDhGMEFGNTBDM0E3NzNEQzlEMzczNENGNTI0NEYyRkQwQzYKLToxMDAwRjAwMEVCNTk0QkY1RDhDRkFGOUUyN0E2OEYzMUY3Njc3QTkxOTIKLToxMDAxMDAwMDVFQ0YwQjU4NkU5MUYzRkNDNjk1M0M2M0FDQjkzRjMzQTAKLToxMDAxMTAwMDRBQTg5RTk0QkJCRDJDMDBFNTY1OUQ3RjU4QjM0Rjg2RDEKLToxMDAxMjAwMDdDQzdDNkY4MTE4RjMyMjMxRjhEREY4NkY1Mzk0MUFBQUYKLToxMDAxMzAwMDhDN0MxNDk3MTM2MzkyQTc3ODVGODIwOUVFMzNCOTlGODIKLToxMDAxNDAwMEE5N0M5MjdGQTAyOTNGNjVEQUE1MTE3Q0U5NzBCNzVFOTIKLToxMDAxNTAwMDI2NjBFODU0Mzg1RUEzRkU2QUZEMzREMjNCRTNGQUQ5NDgKLToxMDAxNjAwMDA4N0VBMDlGODNGNENFMDM2MzAyMTdCQkExREZEODU3OUMKLToxMDAxNzAwMDA2RjQ3RjQwMEI1Q0VFOEVDMjM3MzAyRTg5QTU2MkVBMTIKLToxMDAxODAwMEIxNjAxQTk5QkY1NEU1NzgxQkRGRkZGQkMxMDdFMUZEQTEKLToxMDAxOTAwMDcyNEJFN0UwNzg4MEZGNEIxQUY3MjE4RUZCOEZBODRDNUIKLToxMDAxQTAwMDgxNkUzMTMyQUJDMDcyMzE1NjQ2RkE2RjY5NDZGNkIzOTIKLToxMDAxQjAwMDQxMDM1RTk3MEQwMDdFOTFCQUVCNURBNjA2NTI5MTFGM0EKLToxMDAxQzAwMDVCODIxNTQxRTRDRjI1MzA0MUIwN0U4QzFENjQxNUUxODIKLToxMDAxRDAwMEUwODVGMEZFODBCQzU0QzRCRjU1MDNGRDYxNkM1RjgzQjUKLToxMDAxRTAwMEY2ODc1MkZCQUREODdFNUIyRkVENUIwN0U2OThEQUI3NUEKLToxMDAxRjAwMEE1MTc5OERBQjc2OUQwM0VDODQ3Njc3MEJFNjgxRkYwODgKLToxMDAyMDAwMDM3ODZCMTkzNkMzRUI1NkY0RDJGQTBGNjk3NkFBQ0MwQTAKLToxMDAyMTAwMEQ0N0U0QzU3RkJERjYwQkJERjYzRkI0OTUxQzYzRjcwQTgKLToxMDAyMjAwMDhDNzlGQ0U5NDVFNkYxNkI3Q0ZDNkM0MTUwQjQxRjQzRDIKLToxMDAyMzAwMEUzOTdBNDIwMUY3RjdBMTExRkJGOTVEN0RCRDVCRUFCRjQKLToxMDAyNDAwMDBCRkY5QTA0RUQzQUE0NUVDNjNGNjhBQzc5RkMxNzk0QTQKLToxMDAyNTAwMDk4Qzc2RkU1RURCQjE3MkMxM0VEM0JBOEZENzg2OTE5MjYKLToxMDAyNjAwMDFGRkYwNTI1RDRCRTY2MEQ3ODkxOEZCNEZFMzExNTIxOTAKLToxMDAyNzAwMDlDNEZEMzQwODA1MjQ4MDdGQTI4MUQ5MkMwMThFODkzM0IKLToxMDAyODAwMERGQjI4MTg0ODcwNzYyMzhERjdEMTMwM0ZDRTZFOEQ2OUUKLToxMDAyOTAwMEE3MkMwNDEyMDhGMzcwOTlFMEU5RTI4REUzMzQzRTNGQTUKLToxMDAyQTAwMDA3Njk1RTlGMkRCQTNBQUI1MUE2Rjk4Q0FEQjQ4NjJFODQKLToxMDAyQjAwMDgyRkVCNjM3Q0E0MTg0NjdBREJDMzIyNEQzN0MwQTc2NEQKLToxMDAyQzAwMDAyQkVBN0IwMzAzRUZGRjNBQTYxRUI4Q0UzOEE0QzY3MTUKLToxMDAyRDAwMDU3QUJBRDJEMDZCOUVBRDJFRkUzRDk5MDBBRTg1RjA1MzYKLToxMDAyRTAwMDMyQzFBODZFQjgxNUY0MzQwMzNERkMzOUU4NjM0QzBGRjUKLToxMDAyRjAwMEFCREMyRTM5MDQ3QTlDNUQ2Qzk0OUIwNURDMkUwOUIyMzQKLToxMDAzMDAwMEY3ODc0MEZGN0YyMkZBREZBQTcwN0NCN0NFOTM0Mjg4M0UKLToxMDAzMTAwMEZGNkY1NkNDRDE1MDlGQ0RBRThFMDVBNDc3RjdBMzVDNkUKLToxMDAzMjAwMEQwQTk3M0JCMzU0NEY2MTQ0QzA3ODg5RkRCNDkxNDE5RDgKLToxMDAzMzAwMEZCRDNBRTFCREU5NDVDMzAzRkQ2RjQzMUJENzczNzBCNzgKLToxMDAzNDAwMDJENEU4NUYyMzM5N0U3MEU3MEMzRjhFRjlBNjYxRDIxQTQKLToxMDAzNTAwMEUzRkNDNDdDRkQyRDI0QzdBQ0JGMjU4N0IxNjkwRDJCMDAKLToxMDAzNjAwMEQ0RkUwMERDM0U0REZEQkNDNUYwRkUxRDAxMzM3QzU3QzQKLToxMDAzNzAwMDgxMTk2RTU3NDNBQTA1RUQ5OTQyODlBRDg1N0FFRkE5OTcKLToxMDAzODAwMDMwRTdFQkVENEM5NjEyMzg1RDQ1N0IzRjAxMUNGNDg1NjAKLToxMDAzOTAwMDQ3Rjc2MDNBMDIxRkJCODlBRUQzRERGQzVEQkQzRkU1ODgKLToxMDAzQTAwMDBGQTkyQzRDRjM3MTRCMTIyM0ZBMjc1MUI5ODA5QjhGNjQKLToxMDAzQjAwMDNCQjJCRkQzNTU5QkNGMEZGRDk5RkVBMDRDRjg4Q0VDMDAKLToxMDAzQzAwMDdGQ0JBRTU4OUYwNUVDRDk5NjlBMkY1NTY0QzFDOEYxRTIKLToxMDAzRDAwMDQ0RjY3RkM2RkNDOEYxQjgzNTlDMUY3MjgzOTFDRjM5QjMKLToxMDAzRTAwMDlGNDRGMjUzNzlFM0I4NUYxRTMyRjA1MzY5RkRCNUJGMDUKLToxMDAzRjAwMDNDNjQ3OEFGQjhFRTI2MTM1QzE4QkFDMzU0M0VCRjI2RUYKLToxMDA0MDAwMEQ3OTQzRkJCQkFEMDk0M0Y3M0Q5MUMxMzlDMUI3Q0QwQUMKLToxMDA0MTAwMDU0N0VDNkZDMDVBNkZDN0IyQTFFMzFFNURGNTVCMEMyMjIKLToxMDA0MjAwMDA0REYxMTc4Q0E1NEZFRjY2OTZCNERGOTk2NUQ5N0RDQ0UKLToxMDA0MzAwMDg4NzI1NEY1ODFDQzcwREVGOERBRDFGQTczQjQzN0JGMjQKLToxMDA0NDAwMDc2Mjg1RUE0QzcxMUIwNTc1MDBFOEU4MUJEODI2OTdCOUQKLToxMDA0NTAwMEUzNDhCMkFCNDEwRkU2MzEzMEExNTY0QkZCODNDQkM2MkMKLToxMDA0NjAwMEEyNUU2NkE0M0Y0M0QyRUY4M0MxMzRDNjlFOTczQzg0MEMKLToxMDA0NzAwMDNGQjk0NjYzNjE2MDYxODkyNTc0RjE3MUE3NkNDODZGRUIKLToxMDA0ODAwMDM5NDc3RTBEMDhGQUM4OUVGOTcyNEJGNEU3RTVFQjcyMjYKLToxMDA0OTAwMDJGNDBCREQzOUIzRTgwNUY3RjlDRTczQTg0M0QxMDk5RkYKLToxMDA0QTAwMDVGMjIzMUJGRjFCOUJFN0VCQTVDRTI3QUJFNDRBQzUzODIKLToxMDA0QjAwMDRBNUVFQTNCOUVCOTEwMEUwRkFFMzg1QjdCRjU4MDU0NjYKLToxMDA0QzAwMEQ0OTM2OEZEMjcyMTNGODAxNDE4RTg1MTVDMzdDODI0NzUKLToxMDA0RDAwMERGNkRCQjY1RUE1NzE5RUEwNEQwQUI5OUNDQkY1NzQyMzAKLToxMDA0RTAwMDNEMTNERTlCN0VDQjMwRUM4N0VGNzVENEZCQUMzMTg5QkUKLToxMDA0RjAwMEU2RjVCNkNBQzlCRjNDQTQyMjdERkM5NDFFQTk5QzQ2NjEKLToxMDA1MDAwMDY5NkI2NTgwRDI0Mzk1MDU5NDdFNUU1OTQxNjk0QkU1RTAKLToxMDA1MTAwMDdDNEEwRjU0MDYyOUZENjNFNTMyNEEzRkFEQUNBNkY0OTAKLToxMDA1MjAwMEUzQ0ExQTRBM0ZBQzBDNTFEQTVFRTlBMzU0OTc4NzJFMEUKLToxMDA1MzAwMEZERUIxN0Y2QjA1OEI3QzAwMzZFMEY4QkIxMkM4MkIyMkIKLToxMDA1NDAwMENEMjRFN0RFNTQ5NEYzNTM4RTZGMDZBM0JEN0ZFQTYzOTgKLToxMDA1NTAwMDYwQTI4Q0RFRjExNUM5NkZCREQzRDE0N0Y2NEE1RTA4QTMKLToxMDA1NjAwMDk4QTc0RkNGN0M3QjBDQTc5M0REQzIyNjMzRDA0NzhGNTMKLToxMDA1NzAwMDVDRjQ5Q0Y3REVBMTA0MkJDODMyQzBBOURFOUI5QzUxMjEKLToxMDA1ODAwMEVBODVCOTBGRTk3NTJFM0EzMTVGRTc3MDVDNjdCNzNFQ0YKLToxMDA1OTAwMEZEOTc2Q0FDRjc3MjY5MjA5Rjg3RjdDQTM0MEZCM0YwRjAKLToxMDA1QTAwMEIzNUVBNEQ3MEZDNTlCRjREQTlGRDI1QkEwREM4OTJFODMKLToxMDA1QjAwMEZDMzVBNzMzNDhFNzQ4NkVBQUZGNTQ4Mzk1Mjk4OEM3QkUKLToxMDA1QzAwMEE2RDgxMDJFOEQ0RkVEN0JENjg1RjIzODM3NTVBRTNFMkUKLToxMDA1RDAwMDM0QjI3NzdDOTVENjY3NTQzQjBDRTMyOTZGMzRDM0E3QkMKLToxMDA1RTAwMEFBQTVDOURDN0ZFMDg5QkI3NTE4RjI5NUJCRkFEMDQ1OTYKLToxMDA1RjAwMDQ4RkY1NDRBRjU3QUU2QTY2QUQ0Q0VCMUJBNDE3MTdDNzYKLToxMDA2MDAwMEZFMEVGMTc5NzA2MzNDRjEyQkFDM0JBOUZDM0ZCQjNGODQKLToxMDA2MTAwMEJERDVBM0Y3ODdCMTA2RjY4NTBERjUwMUU0MEQzQUY3RDAKLToxMDA2MjAwMEZBQTgwN0REOTVBRjM0M0ZEMkFCNDlGRDA2RUQ4NTE4M0EKLToxMDA2MzAwMEY4Nzc2NjIwRDZBQjEwQUNENzVCNUUyRjA3QUQ5N0UzOUIKLToxMDA2NDAwMEYzOERBNkY2RTAzRDhGQkVBNkM3Rjc3QUU3NUI4NUI1Q0EKLToxMDA2NTAwMEVBRTMwNDdENzVBNUYwRTcxNEQ3RDlBQkNERjM0QUJDMjYKLToxMDA2NjAwMDA5MkU2RkVDNUI2RDlBNjdGMDBGOTA3RjU2MjEyOUM4QjkKLToxMDA2NzAwMDNGMjU4MjlCM0ExNEM3MzIwOUZBOTc2QUYxNTBCREU1Q0IKLToxMDA2ODAwMDEyMkY1NzZBNkJEMTAyMUU2MkM3NjZCNDMzRUVDREQxMEEKLToxMDA2OTAwMEY5Q0Y3M0ZCMUY0MERGMUZGREFEQ0ExRUM1N0NFMUQ3M0MKLToxMDA2QTAwMDUxRjU2Q0IwNkYyREU4RTcxMUQwQkQwREM1NTM1MEVGN0IKLToxMDA2QjAwMDFEREQ3NjNERDkyN0IzOThERjg1OEJBNDAyNTY5RDhEMkQKLToxMDA2QzAwMDc2Q0UwOTY2OTk4Q0ZDN0Y4MkZEREUzNUQyQjBERUM4MUQKLToxMDA2RDAwMEI3NjhENDlGOTlDQkNDRjMyQ0Q4NjcyNjM4QkZDNjBDMEIKLToxMDA2RTAwMEU3QjE5QjkzOTFERkYzNTZBQTMwQjdBMDVDOUFGMzZGMDIKLToxMDA2RjAwMEI3Qjg0OUJFRjI1OUM1MTI1QUVGMDgzRkQ4QkQ2RUE2MjkKLToxMDA3MDAwMEY0MDdCOTJGN0RFNTk5RUNEQ0ExRTg4N0UwRkE1QkY3MDcKLToxMDA3MTAwMDBGMTQyNjcwM0JBNTI4MzFBNEY5MjBGRjhCODY5MTNGNEEKLToxMDA3MjAwMEI5ODJFMUZCQTEyNUE4QTc4MjRFRTY1RENGN0FEMkVGODAKLToxMDA3MzAwMDg3RjYzRkIyQkZGQTdDRDJDMzRGMjFGQTIxRDc0OUJFMTgKLToxMDA3NDAwMDUwOTQ3NURBQzMxNjQ5RDg1QjQxNEE5NzhCNzFFQjc2QTIKLToxMDA3NTAwMDZCNEQwNDVDMUIwMUQ3NDdDMDdGMzdCRjI1MzIxM0JGRTkKLToxMDA3NjAwMEE1NUEwMjM1OTYyNENFNUY2ODJGNDg0QUE3MTZGODQ3NDcKLToxMDA3NzAwMEVBNEZFRDUxN0ZFRDNGQjVGRTM0QTgzRkRCNTQ3RkZEREUKLToxMDA3ODAwMDNGQjVGRTBCN0JGNEJGMjk1QUZEQTVBRjZDREExNjA0MEEKLToxMDA3OTAwMDdENTNCNDc5OTU4QkMxM0M3NDU0QTk0RUY2MDJERDRCNjAKLToxMDA3QTAwMEQ2MkY3NjIxMUYxQzUxODIyRUU0RTdBMzIxNzk3MjM0QzMKLToxMDA3QjAwMDdFRjhEMjIyRkNBMkNDRTc5MDcwNUQ4NTdGNDJGREM3MTcKLToxMDA3QzAwMDVFRjhEOTU0QjRFN0JFNTlBRkJBNjlCRDU0NjcwRDVCNDIKLToxMDA3RDAwMDQxNEVDQjFBMEFBN0EwREYxN0UwODMxQzVFN0E1MjQ2NkYKLToxMDA3RTAwMEI4RDFDQzlGNDVDRkFGNEE0NkZGMUU3MDhBNTg0Rjg0ODAKLToxMDA3RjAwMEM5NUUyQUFCRkRGMzI0OUM4N0NBNTkyN0M5NTlFNDdCRkIKLToxMDA4MDAwMEQ4RkVFOTA0RDI4RkI5NUE1Q0NGN0NFODI3RDlGOUU1NDQKLToxMDA4MTAwMDAyMkZFNTBEM0YzQjI5QkIzMEJERjYzMEVBMTNCMDRDNEIKLToxMDA4MjAwMEM4MEU4RjdDQUY0MEQ4NDE4NzJDQ0VDNDU2NTg0MkIxRjkKLToxMDA4MzAwMDFGQjExRkExREVENEYxQzI0MkRDMEVBQURBRjBFNEYwNEYKLToxMDA4NDAwMDgzRDBBRkI2REFERkJBMjQwM0JFNzQ3OTNCNTUzRkYzRTkKLToxMDA4NTAwMEQ3QUY3QTdBRDdDQkVENjJCREQ3RkQ1RTg4REVGMzM0QjEKLToxMDA4NjAwMDBBRkJBRDg5QTcyNTZBRDg4NUY2NzFDOTVBRDUxQjg0QkMKLToxMDA4NzAwMEM3MjU5QjlFN0RFRTY5NUNBRjdFNjJGNTVFMDRGNTE3MzEKLToxMDA4ODAwMDZGN0FFM0MzMzEwMDE3NkY1MTEzQTdGMDYxMzhBNEU0MDYKLToxMDA4OTAwMDZFRkE5NEMzQkZGOTIzQkFFOTUxRjRGMjFCOUE2NzE4QjAKLToxMDA4QTAwMDdGRkU3MDQyMzc1RDhBQjdFQ0Q2RDhCMDlFRjg5ODUwN0MKLToxMDA4QjAwMEJGNUI2QjcxNDRBMTRGRkRDMTQ5Njg2NzU1NkRGODU2MjgKLToxMDA4QzAwMEMzNzVFNUQxNUQxMjRCQzk4ODgyQ0ZCNTZGOTBCRDgwRUQKLToxMDA4RDAwMDc4MjI3QTBBN0E3NUQxMkZBMjdDMzlEMDA1RjU3QTI0NEMKLToxMDA4RTAwMEJEMjJDQkJEODFGQTY1MTRBRjE3RkQ5M0MwREYyRkJFQ0IKLToxMDA4RjAwMDhBN0VFQzRGQUQ1RUM0NDNDMThCRjdCOTcwM0M4Nzk1REYKLToxMDA5MDAwMDBBQ0VFN0NGMkM0RTQ2M0Y3RDgxMUE0Qzc2NTNDQTlGQzQKLToxMDA5MTAwMDE3QUNCOTlGRjgyRkZGQkRGQjkzRjlGQUQwRDdENzQyOTgKLToxMDA5MjAwMDczNTVCMDJGOEU3M0Y2RUFEQjY4OUM3OTJDNDA3QzU4QTcKLToxMDA5MzAwMEYwOENFQzBGNDFGQUI1QzIyNjZGODkyMjI3QzUzMjk3OTkKLToxMDA5NDAwMDkzQzNFQjgwQjgzMENFQzNCODRFNDFCRkVFRUZFNUQwRDUKLToxMDA5NTAwMDdBRjI4RkNDNjFBODBGRUVEN0ZERjE2QzJFQzE1RjhCQzAKLToxMDA5NjAwMEZEODQ3MUIyNDU1RkU3REE0Q0ZDNUJCQkI0MTlFOTc0RjYKLToxMDA5NzAwMDZDODAyRjA1RkQ2QUU1NEMwOTBBN0M0ODY3QTA1RUY5OEEKLToxMDA5ODAwMEJEQUI1MzM4OUQ5ODQ3QzkxNkVGODE1RDMwMDE5RjYzMTkKLToxMDA5OTAwMEY5NjZENTY3MUY2RTdBOEY5REM5RTg2RTdGOUU2ODFGQzYKLToxMDA5QTAwMEZBMUQ4M0YzRjlFMTY0NTY1MDFGNjU3QzM1QjJBRTA3M0EKLToxMDA5QjAwMDYwNUUzN0YwOTk0MURFQjlGQ0Q3M0VDMkU1NUQ5N0ZGMzYKLToxMDA5QzAwMEQwNEQ5MzMxRkZBQkY3QjkxQ0UxN0IzODVGNDJCRkMyMUEKLToxMDA5RDAwMDI5OTRCRkZCNTY4OUY0ODM5NTg1QTNDOTc5QUQyQUU0OTAKLToxMDA5RTAwMERDOUMxRkM5MkZEMDdGNDU4QTMzRjAwREI2OTM0MDc0MkQKLToxMDA5RjAwMDIwQkY1QURFNEE3OERGQTg1N0IxNUQ1N0NGN0E3NTM5RTQKLToxMDBBMDAwMENFMTdGQTIwNEYwNjdENzA1OUI3M0U2MEFCQjkxRUU4OEQKLToxMDBBMTAwMERERUUwQUYyRjU5QjFBN0FFRTY5OTQ1RjkwRDdBMDA3OTMKLToxMDBBMjAwMEU1NTdGNUUzRjg4RjZGRENGQkUxOUQyMEI3QzdFQjc1NjkKLToxMDBBMzAwMEI5MzVFQkQ1NDhCOTJENzg2OUJEODQ3QzFBMjlCN0M3N0IKLToxMDBBNDAwMDBCQzA0QTg5MjZCN0YwM0NBQURDMTZCNEZDNEJGNEFBQ0EKLToxMDBBNTAwMDhFQzdDNzY1QjM1RUQ1RjU2NDZGRjg4Q0Q0OTM5N0NBMUIKLToxMDBBNjAwMDlFQTg3QTEyN0VFRkIzRUM5RUZDQThGM0ExQ0U3RjQ1NDAKLToxMDBBNzAwMEJGMjlCRDgwRkMwOTNBOUZFQTdDRDhDNUE3M0ExRkY2N0EKLToxMDBBODAwMEYwQ0Y5OEYwMTg5OTdGM0JGMjA0MENDMUJGNUQyNTdGMzEKLToxMDBBOTAwMDYyNDkxM0RGOEY4M0Y3REVFQzlGNDVGOEYyRDEzNEM3NEMKLToxMDBBQTAwMEFBREZFQzlGNjg4NDQzMTE3MDdENDQ3OTVGMDRFQzhGNkEKLToxMDBBQjAwMDI4MUY4ODgwMkI0Q0U1NEIxQUY3NkE4Q0Y4MjA2QzJBOEIKLToxMDBBQzAwMDY3OURGRjJCRjY0NTk0NzVBQzNFMEY5NTM3OUNENDgyRkQKLToxMDBBRDAwMEM4MUY2OTlEMUFFQTNGNzUyMTk4QThFODNGREMyOTkzNTEKLToxMDBBRTAwMEZGQjAwMzcwQkMwNERBRTlEODk4MTEwQTgyMUU1OTZDNzEKLToxMDBBRjAwMEU3RUJDRDBFNzdBNzJCMDFEMkM1RjExQ0VFNENEMjk2QjkKLToxMDBCMDAwMEEwMUVENDlGNzdEQUI5MUZBNEMzREZFOThBMzdGODMxNzIKLToxMDBCMTAwMDBFMzZDOUE0Qzc1QjQyNkM3MjM0M0YwOUNDMzQ4NERGMDMKLToxMDBCMjAwMDE2RDY1QjNFRjc4Rjc2RTBCRTMzQjY4N0ZCQ0U0MENGNUUKLToxMDBCMzAwMEFCNjU0N0ZBN0M1Q0JGNTZDQjVFNjAyMzM2NkJDMUVEN0MKLToxMDBCNDAwMDJFNzRBMTc3MzQwREJBNzExQTNDOUZGREI2Q0NCNzZERTcKLToxMDBCNTAwMDgyM0VBNUFGNjFERDcxODQwNTlGMTgyQkUxN0VERTcyQjgKLToxMDBCNjAwMEUyOUY5OTREN0MxRDMyNkI3OTc0NzkyODEyRUZFNTM5M0IKLToxMDBCNzAwMEU2NjlBODc3NjFGREYwQjlEMTBGQUNENzUzQjAzQUUyN0UKLToxMDBCODAwMDc5RDNGNTQyNkVBQTY5M0Q1ODU0NkJDRTBGODhGNUQ0REYKLToxMDBCOTAwMDM3QkFGRUM5NjQ5OUE0N0Y3MEExODRFQjdBQTFCN0FGN0MKLToxMDBCQTAwMDk2ODdERTM4MERFOEQzQjE0RjY2QjhCRjdBQUE0OTI2REEKLToxMDBCQjAwMEZBOUNEQUM4Rjc1MzU5MzA4OUU0QUY4Qzc1OTJCRUQ0RTkKLToxMDBCQzAwMEYxRDY4NkYyNzU3MUVGN0FBQzZERUI5RkIyMUY0MjNFQTMKLToxMDBCRDAwMERBRjY4N0UxQkY4MkI0NkREQjI3ODM3NzIwRkNDQTQ3NTIKLToxMDBCRTAwMEU5N0Y2MDNEQ0I0RkQ4NjUyNzNGNzNDNzJFMjdGMTdGNDQKLToxMDBCRjAwMEM3Q0VERkE1M0Y4NEYwNzYyQkY5RjczQTc2N0QzQjFDMTQKLToxMDBDMDAwMEY5QjE2M0ExQjUwMEY1NjBDNzAwQkU3RUFBREFGOUVEQkYKLToxMDBDMTAwMEYwMTY5QTdGMTcxMTFEMzMxNDhERTg3REFBRTkyRjA3NkUKLToxMDBDMjAwMDMwMkVFMDU0MTM4QzBBRUQ4QjVEQjEyNDVGRTVBRkRBMTIKLToxMDBDMzAwMEM5MUZEMUIxRjNEQkVDODBFMzlGMzc5RTMyQjFGRkQzMDQKLToxMDBDNDAwMEUxNjREMzVFQzJGRUM1NzNCRjc5Rjk4RUQxQ0YyRUMwRTkKLToxMDBDNTAwMEZERjE4NkREREE0Q0M4OUZGMERBNUY4N0EzN0VFRDc4ODAKLToxMDBDNjAwMDg5REI0REVENkFDQjFBRENERjE4QkE0ODVFQTgwMkJERkQKLToxMDBDNzAwMERBNTFDOEZBMzFCNjZGRDFDNEYxMjg0NzNERjFGMjU3QzUKLToxMDBDODAwMEYyQjM5QzJGM0UyNjI4N0MzREZCRUY4RjBGQzlDN0Y1QTIKLToxMDBDOTAwMDlGMzM2NDkzNzBEQ0RGMURGODAzRUE4OTVENTZFMjRCRjUKLToxMDBDQTAwMDdEQkNDN0VCMTc5MDNENzNBRTcxREZGQjNGNkVEQzUyMkUKLToxMDBDQjAwMEY4N0NDNkJERTBERjlDRkZBRDhBODdGQTE3MjkwNzNEQTcKLToxMDBDQzAwMEY5N0NFNzAzMDQ2RjcyN0FBOUJGRTdDOUVGNkJGRkE3NEUKLToxMDBDRDAwMEQxRkQyNUEwQkJFQkRDRTMwRUZGM0Y0QkY3QjdBNzBCMjUKLToxMDBDRTAwMEJBQkIzMTNFQTBGQ0I1QkY1MkZGN0VBODlFNkJGOTM3NjAKLToxMDBDRjAwMEE3N0I2RkUzRDdFREZEQjcyQzlFRjczM0ExRkM2NDU2QkQKLToxMDBEMDAwMEVENDBDM0UyREFEMjNENkY2NzQyRUU1QjY5N0JFM0IxNEYKLToxMDBEMTAwMEJGRTMyM0Y2N0JGNDM0NUVFNUZFQjZGMUI4RUYwM0VERjYKLToxMDBEMjAwMEIyNzg0OUFDMTdGOTNBQUJCRkIwMkZGQUNGQ0IyMzNCMUYKLToxMDBEMzAwMEE0N0ZEQTYzNjQ0RjMwQzVCMzEyRjcyQkRGNEE5RkU5MTMKLToxMDBENDAwMEE1RDgwQjM2RTJFMzAwQzJFRTJCMDU2QzVFNkZGRTRBQkYKLToxMDBENTAwMDYyM0VEQzRBRUQ5RjdFRkQzRUI0NzNEM0QyNjRCMjgzMjMKLToxMDBENjAwMDIxMjVGQkY3NzVENzY0RkVCQzQ0MzNBRDg3QUVGNTk4RkIKLToxMDBENzAwMEQ3NDc5MzEyQ0RFQkE4ODlBMkJFQUIxOUVGRkZENTBFRDIKLToxMDBEODAwMDI5MTQwMjNDOEMxRkYwQ0I0NEY0QTc4RUJGNDg2NTEyOTcKLToxMDBEOTAwMEMwOTM1ODYwMTFBRTNCMjYzQUNDRjU5REMwN0Q2QzgzNjQKLToxMDBEQTAwMEJGRjFFRkM1RTNDNDJFM0MwRTVDRTk0NzNDMEU5MEM5OTEKLToxMDBEQjAwMEFGN0E0RTNDNjJCRjA5NkY5OTIxOENDNzYxOEE5N0UzNzUKLToxMDBEQzAwMDMxQTFENDRCN0U2QUIxMUVDNzZFQTIxREEzMzg5NjM0RTIKLToxMDBERDAwMEEzM0MyQkI4OUVFNjc4QTA3NUI4QkU5RUVFMERERjRDMDYKLToxMDBERTAwMEFDQ0YxNUQxQTQ4RTdGMjU0REY2RDlDREY1RDFGQTVDQzcKLToxMDBERjAwMEE3Q0IwRkE1ODc0RUM3N0Y5NDJFQzlBQTk5MkU2OThFQkYKLToxMDBFMDAwMDM5MEFDQUVCNjQ1QzNGOENDNEYyOTkxQzRFMEIyQUI0QkQKLToxMDBFMTAwMERGMjRENjBGRDc3OEU2Mjg0MTgwMjdBNDY1MkE0OEFGN0IKLToxMDBFMjAwMDdDREJGNjIyOEMxRkI1NzkyNUVBQzdDNTZEMTY5QTFGQTMKLToxMDBFMzAwMDZDNTkxMkUxN0Q0ODhENDJGMDdCMTZGNzI4QTRGN0Q0NTcKLToxMDBFNDAwMDJCNUUzOUZFMjA0MzNGQkI0RkUzMDZCQTlGRUY5NzdDRjIKLToxMDBFNTAwMDdGRTZDQ0Q4NkNGNEM3RjAxRkM2N0ZERTAwRUJCNzU5MzUKLToxMDBFNjAwMEFCNTkzODA2RjAzNDVCNjFDMUI4MDRGNDkzNEJFQzczQjIKLToxMDBFNzAwMDkzOUZEQzBDRTNFRkFBRTRFRTdBQ0U1NUJFMzdCREYyQzkKLToxMDBFODAwMENGNEU1RjAxM0RGNkY5NDU4QzZEQzc5NDZGOEEyOEM2MzkKLToxMDBFOTAwMEY1RjY4RjlBMzhCRUNBRjdCM0QwNDAxRTg3MjFGQjBERjYKLToxMDBFQTAwMEZCOEEyRkFCREMzRkYzQ0ExRjVGMUE4OUVCREM3MTFEOTUKLToxMDBFQjAwMDQzRTNCODdFQ0RFMjcxQTk2MkJENzA4QTc5RTJCQzBFQ0YKLToxMDBFQzAwMEQ0QUY4M0UyNjhCRjc0OUZFQzhDMTZFN0I4NDFBQ0JGMjcKLToxMDBFRDAwMDdGODNGMTI4OTA3NkQ0QjI2QTE5RDc1N0FDOTNGQ0JFQzEKLToxMDBFRTAwMEMxNUExQjVCMUYyNTFFNjY4RDZBMTE3RTIyNDEzN0Y4OTEKLToxMDBFRjAwMEM5RDlCODdGQzNEQjlGMERBRkM2MTlFOUQ2MzZFNUE4QkYKLToxMDBGMDAwMDMyQkMyNzFERjBGN0I5NjFGRkVBMUZDNTJGQUVGNzExRkMKLToxMDBGMTAwMEJGMUJFQzJEOTNGQzUxRjQ0N0JEQzBERkQ0M0RERjkxRTYKLToxMDBGMjAwMDlGRjREMkE2QjUxNkU0REY0QjZCMkRBNkZERDgzQTU1M0IKLToxMDBGMzAwMEY4MzE0NkIwMTFEOEFGQTk3QkVDQ0UyQ0E0Q0IzRUQ5NkEKLToxMDBGNDAwMDhCRjFBNUU1NEQyN0I1NDA5NDdEQzQ0ODdDNjJGREU4NTIKLToxMDBGNTAwMDdGNkY1NURERDRFRTBFQjU3RTI2RTI3NUM3MDkxQkMzNDMKLToxMDBGNjAwMDc1RjU3NkFEQkEzODVBM0ZFRkI0RjI3RUNFNjZGNUY3MzYKLToxMDBGNzAwMDBEQ0ZGOEY3QzNFRkI4MEU0Nzc4M0NBRTNGNkI5OUYwNTIKLToxMDBGODAwMDgzNDRGMjFGMjMzRTNFNTVDNzQyMzhCRkUyN0ExNUY1MkYKLToxMDBGOTAwMEMyQTk4RDhDRTY3NzQwQzk2M0I4RkUwNjc5RkZCMUQxNEUKLToxMDBGQTAwMEFGNzM3MUUzOTZERkEwNUQ1MEQ2MjRCOTcxNEJBMjRDQUMKLToxMDBGQjAwMDY5RDFEMDhGNUJERTE4MkZFMzNDOUNFOUQxRTM2RkRENzQKLToxMDBGQzAwMEMzNkUzNUM4NDVBQkFBMTBCRUY2OEVEOTcxMTdCNkZCRjUKLToxMDBGRDAwMDY1OUJDNkQwNEVGMUJEREVFOUMyNzlGQ0NCQTY5MTI0NUIKLToxMDBGRTAwMDA3QkQ4REVCRTU0QTU2MzQxMUUzMUM4NDNFOENFNDg3NDMKLToxMDBGRjAwMEExMUI2MzRDRjAxNTcyQTAxRkNBRDc1NDZCQ0IzQzZGN0EKLToxMDEwMDAwMDE0RkEyREQzMjRCMThGNzg5RUZBMkRGNEZGOTk3RTdCQUMKLToxMDEwMTAwMDVGRDc2RjAxRDk2RjkwMjNCRkMwOUI0MUJGQTU0NEQzNTkKLToxMDEwMjAwMDZGNzMyNTRGMEFFMjdERUVDRTQxMjk0OEQ3Qjk2RkFCRTkKLToxMDEwMzAwMDQ5RDFGNERCQTY0QUJFMkZCQTU5QzQ0RDc3MzQ4MDdFMUQKLToxMDEwNDAwMEJCRENBMERGMUE0MEJGNDU4OTFGMTlBM0U5N0VGQTczRjQKLToxMDEwNTAwMEU4QjdEMEJGNDZGRTM2QTE3RThCMzJERTFCMDRGRTc0OUQKLToxMDEwNjAwMEZEMzZCQ0U5MjBFOUI3RTEwRDE2NTMzQ0YwNDQ0REY4REMKLToxMDEwNzAwMDlCN0FENTZGNTJEMkFENjgxRkVGNTNCREIxNTFGODY3NUYKLToxMDEwODAwMDkzQjBDNzM3OEIzODQ2NkMwN0Y1NUM5NUY2QzNGNDVDQjQKLToxMDEwOTAwMERFRjlFQUI5N0YxMTlFNzUzRDM3NzcyQkEzQjhFODlFM0MKLToxMDEwQTAwMDdDQzhGNURDRENFREEwRTcyNEU0NDdBRUU3RTZFRTY0QkYKLToxMDEwQjAwMERDMkYxN0ExREY4NkY0RDA2RjhDQ0E5Nzg1RjlGQkU1OEEKLToxMDEwQzAwMDhEMTk0RkRFMERGNThERjBBOTVFMUI5NDFGRDFBREVGOEMKLToxMDEwRDAwMDQ2MTlGNTVEOTVENjhCQkVEQjc3N0VGQTZFQUJEMDc3ODEKLToxMDEwRTAwMEEwQzcwNkEyN0U4REU0MEY2RjkzMzlERTdDQzdFOEMzRUMKLToxMDEwRjAwMDFCNUY0Njc5Rjk5RDRDRkI5MkVGNTlGOEZFRDEzQkEzNUIKLToxMDExMDAwMDBGNjcyMTdGN0QyQUZBRjNBMkM2RTlEOTVFMTlBNEZBRjYKLToxMDExMTAwMDI3QkNDRUM3NTdCQTkxRkJDQkNCMUFCODdENTg1NjJCRkMKLToxMDExMjAwMDg3M0NGMEU3QTQzMURGNjlEOEZGQzI5RDEyNEIwMUY4N0MKLToxMDExMzAwMDI2NkJGNTEzMEVCNEVCOUY1Nzk5NTgxRjREQzkzNEYwMjkKLToxMDExNDAwMEMzQUM5QzYyRjJGQjU3RDk1REVCRjBGQ0QxMkM4NUQ5ODYKLToxMDExNTAwMEQwQkY1RkVDOTg3NDE0RURFMEUyMUNCRTFGNTAyQzlFRDMKLToxMDExNjAwMEVCNzFCMEIzQkJGNDY0NDQzQzQ4RTM5QzM3RkJCMzlFRTMKLToxMDExNzAwMDcxMTY1M0FEOUNBRTUzOUY5NTQyMThCN0RBMzNFRTIyRTkKLToxMDExODAwMDQ0N0FBMUI4Q0VGQ0ZDNUQyMTdGMzdDOTJEODQyRkY2QUYKLToxMDExOTAwMEFFMUMzNUVFNDMyRkQ3ODVBNzdEMDI0RjgwMTcxMzlFRDcKLToxMDExQTAwMDQyNTI1NDNDMDFBNUE3NjQyNjc3RTNBNUYwNzcyRDRCNjYKLToxMDExQjAwMDcwNUZBMEYwMjk4OUY2OTEyM0M3QURFMzJENzJGQzNBNDgKLToxMDExQzAwMDFFNzUzRjc3QjFBODJGQkY2OTJEOUQ2QjhBQzQ4QjhFOEEKLToxMDExRDAwMEU3NDg3Qzc0RTEzRDAyMUZFRjY5NUQ3RUVEOTExOEQ3MTEKLToxMDExRTAwMDA0N0M0MzdBMjZGODlGODAxNzY4QzczRkVFMjJEM0Y5MjQKLToxMDExRjAwMDlCOEYwNDVFNDY1NjhGOUI4MEUxMEYzNzYxMUMzQUU0NUIKLToxMDEyMDAwMEU3RDVDQzc5QjMyRkUwNjNENEM3OUUxMTM4OUQ1RTMxMEEKLToxMDEyMTAwMEM2MUFDMDdEREEwREY2NEVEMjgzM0ExRjBFQjM3MjNFNjcKLToxMDEyMjAwMEQ0ODQ1RUQ5RDFBRjYyM0NBREYzMUIyNTM3REEyMUU1MUEKLToxMDEyMzAwMDYxM0JFMUI1MUNGOEQxMEU0NUY2M0VGNUNEMjQ4MTU3NTIKLToxMDEyNDAwMDM3OURBRjZBMTRGMzEzRDBDMTgyRUIyNjdEQkUwQUYxM0QKLToxMDEyNTAwMEYzNTgyMzlCMzg1RENBRUIzODVEQjI1ODI3RURDNzk0MkQKLToxMDEyNjAwMEQ1NDhERTMwOENBN0FDNzEwRUM1QTFFQkZBMTk3RTBFMDUKLToxMDEyNzAwMDIzOURBMkYwQUYxMjhEN0YxOTNBOUJCM0JCRTdDRDYyREQKLToxMDEyODAwMDUxNkVBQUI1RkE0M0RDRTc5OTBBRjJCMTk2RDgxMEZFN0UKLToxMDEyOTAwMDc3MTZGRTNFNTdGQzUwMjRCRDJFMTM3OERCODQ3ODc1RkMKLToxMDEyQTAwMDIwRkUzQUI5RkQxNUZFOEVDRTY5RTlGOUU1NEFEMDg0RjMKLToxMDEyQjAwMEQ3MDk0RjlGRTZGQ0I3NTNGMkEwNUZBQzBCNkZDOENGQzYKLToxMDEyQzAwMDkwM0Y0QUM3MUJGMjMzRDJBMTI5NTc0NjM4MEZGMEREQjEKLToxMDEyRDAwMDI3QTNFNzc4NzFCRkQ0MjhGNzg1M0IwRkYyRkE5RjkxRDcKLToxMDEyRTAwMEJDMkNDQUI4N0YzMDdGRkY0MEJFRUU0RERFODc1OUM1QUIKLToxMDEyRjAwMDNBNDFGMEY3M0JGNkNFRkQyMzkxQkY3NzRBREMyRkQxODAKLToxMDEzMDAwMDE0NkZEQUY3QkNDMUNBRDc0RDFCRUMyMDA3QjhERkY2NjMKLToxMDEzMTAwMEI2RUE1REU3RTlBOTFGQUVCMjcyMzlDMEY1ODRDN0UwNEQKLToxMDEzMjAwMEY3QkEwNDA3ODJGMUE2NzUzNjhBMTdBNDdFMENFNEY2OTQKLToxMDEzMzAwMEFBNTE1RjZGQjJCM0E0NUJCMzdBQUY3RjhBQThCRjM3RkQKLToxMDEzNDAwMDdCNDk4Nzg3NjE3QkE4NDcxQkExQkQyMURERUQ0NUNFODkKLToxMDEzNTAwMDE3QkFGRkUwNUNFM0JBNDNGMENGREYzQjJFQkQ5RDFGMjEKLToxMDEzNjAwMDFBNEY1NUNFOUE2OTVGNEM4RkFCNEFCNTA0NUU1MUQxODYKLToxMDEzNzAwMEJFOUIyQzk5RTJCN0EwRTc4MkNFRkY3MEZEQjc2QUEzQUYKLToxMDEzODAwMDdBQUY5RkE1REFDODhFRDBDRkNCNUUyRDNCNTgxMEYwMzgKLToxMDEzOTAwMEY2QTU0RjI1NzkwMTJCRTM4M0IxMzg3RjhDODc3OTEwMkYKLToxMDEzQTAwMDkyMkZGNzhGRkFFODZFQ0E5NzY5OUZFREM2REZGNTI5OEQKLToxMDEzQjAwMEM1N0RDODFCNzkwQzFEQkIzMTUzMjJGQkUxM0RBQzZDRDQKLToxMDEzQzAwMDM0REFFMTM2RTZCMzhBMjYyMTNGRTc0N0YxMjEzQ0Q3RkMKLToxMDEzRDAwMDkyNTk1QjNEQzEwMzcyM0RBMjJFNTQ4NUE5Nzc0MjY3QTUKLToxMDEzRTAwMEUyM0I0OEFGNzEzMjQzN0EzNUZCRkE0Q0MwRjlGN0JFQTUKLToxMDEzRjAwMDNGQjM0Q0RDOEEwNzNCODFFQTE5QjE4RjI1NjFCOTMxRDMKLToxMDE0MDAwMEJFMjQ1QUNFOEM2RUY4RUFGRDVCQTA3RkEzRjdDQjVFQkMKLToxMDE0MTAwMDBGOTRCQjY5QUZDMzgxNzIzNjY0QjU4NTA1MEM3ODE5MkEKLToxMDE0MjAwMEMzNDI1NUU4NzcxQTdEQzg3NzBCRUE4MzAyQjA3QkYwOTgKLToxMDE0MzAwMDdDNDk0MUQzREEyQTE3QzJBQjI1N0FCRjNDMTg5OEU0MUQKLToxMDE0NDAwMDgyRkU2REFBMzkzOUU5MzJENDBCNTAwRUFCMjk1RkNEM0IKLToxMDE0NTAwMENCOTVENzRBNUUwQzcxQ0U2QjVBNDFGMTQ4NzlCNTEyRTMKLToxMDE0NjAwMDFENjBEQzE0OTI5ODhERDcxQkIyNDFCRDlCNTZDM0ZCMDcKLToxMDE0NzAwMDU5Mzg3RkMxRkI1ODZGRURDOUY3NkY0MUJEMDNGREE0MUIKLToxMDE0ODAwMEY3MzdGMkZERkEzQzc4Q0Y4MzcyNTIzQjg3RUEyQjVDNDgKLToxMDE0OTAwMDJEMzEzQzA3NTNCMDkxQ0Y0RjA1RkI1NTJGRTYzN0VDNkMKLToxMDE0QTAwMDdFOEFFNkREMjlEMDVFREYwQzlDOEZDMjEzRTkzQ0QxMzkKLToxMDE0QjAwMDQ4Qzk0REU3MzgxRkJFODBGNDU2MDcwRTE4NUZGMEE1RTcKLToxMDE0QzAwMEYzRjgwOTQ5QzA2MkZEQTNEQjdGRkQ2REZDNUM1MzlFMTAKLToxMDE0RDAwMDc3ODFENjA3RUE3OTI3MjcyOUMzNDJGQzc0OTJGNkUxN0YKLToxMDE0RTAwMDBGMDFCRTAzNTY5QzM3NzkzQ0NCREU5QzJGQjQxNkMzNEMKLToxMDE0RjAwMEZDOTg2MzFCNDRFRkNGNkExQzQ3NzExRUIzOTk5RkUyQUYKLToxMDE1MDAwMDNDQTY4RUU2NzZFN0JCNTdEQTQzRThFRjdCNTdFRDRDMTcKLToxMDE1MTAwMEMzRTc3QkFGQjREMkYzRjY0RDVDMEZCNzBGNjgyMUJGQzIKLToxMDE1MjAwMEZCRTFENTJBQzNGMzJGNTVBQjY1RDIxMzg3MzdBQTc0RDUKLToxMDE1MzAwMDZFNTc3RTg2QzczN0U0NkZFMjc2QzhERUQ1QkNERUMzNjEKLToxMDE1NDAwMDc1REM3RTlCRjBDQzZEOTM3MDFFQ0U1RkNGQ0ZGOUVBMzkKLToxMDE1NTAwMDdBNUE1Rjg3RTZCOTBCNERGMzVCQTQ5RUQ1RjU3MEE5NjcKLToxMDE1NjAwMEMwNDc0MUY1NUFEQTRGOEZENEJCQTVGQTdDMThBMTZGNUEKLToxMDE1NzAwMDRCNzE5RjlERjZEM0MzMjQ0N0E1RjU5MUYxNjU4RTZFRkYKLToxMDE1ODAwMEJGMERGMjQzRjgzQkUyRUZCMkZEMkFDMzc1OERGNDQ1N0YKLToxMDE1OTAwMERCMjQ4QTY3QzNGOTFFRjI0NzM3NDkzRThDN0IyOEY4NjMKLToxMDE1QTAwMEQ4MUEyMjdCM0M5NDNCRTMzRjcwOUVGOUM0Q0FGMEM4MzIKLToxMDE1QjAwMDQ4MkJEMjAzRjQ1NDhFQjVGMzhGQkY4NEU3NDdERkIzRDMKLToxMDE1QzAwMDYxRTQxMEYwNEYyRUUxNUY4RjEzQ0U1QUNGRTM3RUIyNkQKLToxMDE1RDAwMERFNUI5OThDRTc4REQ5QzQzRUE0MDdGMjZCNjQxNjMwQUMKLToxMDE1RTAwMEU4OERBMzkyRUY5NjNCRjlGQ0UwNDZGQjQ3QTc2Qjk2OEMKLToxMDE1RjAwMDU2OUQ4N0YzNkM5MThERUI0N0NGN0E5NUNFOEJDNzBCQjkKLToxMDE2MDAwMDE4RDYwQjNFQjQ3NzBBQjdBRjQ4RDYwQ0ZDNTBCODczNjcKLToxMDE2MTAwMDQ1MzJBODBFQjY0NEM0Q0I1NDg5NzNFNjg1MUE2RkE3MjkKLToxMDE2MjAwMDcwOTdFNDVFNkI2ODQ3QUY0N0FGNTdEQkNFREYxQkI0MDQKLToxMDE2MzAwMDkzQTdCREQ1NUY4OEZEQTM3MTdFQURBMURFODhBQ0E3NjEKLToxMDE2NDAwMDQ3RkJCREQ0OTNGMzVGQTc1N0UyQjlGRjlDNzc2NTBBQzgKLToxMDE2NTAwMDc2Q0ZGOTYyQ0EyMEUzM0U4RjlFRUE3RUU2RUNGNzJENTQKLToxMDE2NjAwMENDNjdDMDVGQ0UxRjYzOThDRjQwRUY4NjUxMjBGRjQwMEMKLToxMDE2NzAwMEJGMUIxQUI5M0RENzMwRUFBMDU2OUE0NUIwMUJFNUJENEQKLToxMDE2ODAwMDRDRjhBM0NCMjZGMkZEQkI4NkNDRjcxNkExRkM0RkM5QzQKLToxMDE2OTAwMDkyODgxRjU4MzBBMEY1NDkyNEZCQ0Q4M0ZCMDBGOTU5RUYKLToxMDE2QTAwMEZDRkQ3Qzc4MUZFNUIyRTEyOTJFQTdBMDJGM0NBODRGQjYKLToxMDE2QjAwMENBNTZBRjk4NDRFNTZCMjUwRkQ2REZCMDM2OTdFQzkyNEIKLToxMDE2QzAwMDgyMUM5OTUxN0VFRDQxQjI5MzBBMUEwRjI2QTIzQzgzRTcKLToxMDE2RDAwMEZDQUU0NDdCQTA2Q0FDRDU4REVBNTg5NzRCNURDRURGNTkKLToxMDE2RTAwMDE1RTc2MTk5Q0QzRDBDQ0Y3N0UwNzY1ODM0Rjk5NkY3NDAKLToxMDE2RjAwMDMzNjFCNzcyQjkyQ0NGRTE3MkZCRUUyNjE1NDc3ODNFMDUKLToxMDE3MDAwMDcyNEU3MkFEQ0JCMThDNzI5Q0Q1MkRDNzdCNTc0RkQwMkEKLToxMDE3MTAwMDUwQUUwRjg3MjQ4QUEzOTk4MDdBMDBFNTdDODMxRUU3NjgKLToxMDE3MjAwMEM0RUREOEYzOTVGMzczRDk5OUE1MjBCRjM4NUZFQTcyNTkKLToxMDE3MzAwMEFFQ0I3NUE0M0MzNzJCMkRCNzYyM0ZFRUJCRDI0RUUzNDgKLToxMDE3NDAwMDk4NzBENUY2MEZFRkUzRkE4QUY2NUYyNzVDRjU2MDMyMDIKLToxMDE3NTAwMEVBQzczQzg1Qzc3OUU5NzgyRDU1Nzg1QzYwOEY3RUFEMDYKLToxMDE3NjAwMDVDQTBGNTNEOUZGRTQ1RjRFMzMzQUJEOTVGMTI2RjhCNzAKLToxMDE3NzAwMEU3RjFFRkI1MkFGMUZEQjlFNEIzODc5QzlEQTc3QzlFMDQKLToxMDE3ODAwMEFGNUM5RDRCM0VGNUY2RTU5REU2N0FFMjkxNjk0N0Y1NDMKLToxMDE3OTAwMEFDQUYxREYwMTgwNjNDQkVCNUYxNTk4QTBGM0VGMUMyNDAKLToxMDE3QTAwMEMxQTk0ODg3RTIxREMwRTdDODVGMUI5RDJDOEM3QTRFRkIKLToxMDE3QjAwMDA5RDFCQzU1RDQyMEQzMzkwM0E2ODRCMzZGNzExQUU1N0YKLToxMDE3QzAwMDk4Qzc3NTE1NkY3NjEyM0YxNUJENjQwRDREODFGNzhCNjcKLToxMDE3RDAwMEI2N0QzMTlDRTI2QTE2NzY1MkRDNUFGMDA1NjEyRjA3MUQKLToxMDE3RTAwMDVCODZBMzFDMTQyOTNDQkUyQzUyMkZGQ0RBQzZFREU3MDUKLToxMDE3RjAwMEI2RURCMUQzNzA3QzUyMURCRkRGQTJBOEZFNzZENTZBQ0MKLToxMDE4MDAwMEQ4QTc3OEMyQTY1MkJCNTA4RUY2Nzk4M0MwQzc3OEZFOUYKLToxMDE4MTAwMDE3RkI2N0JDNTc0MThGMkI2QkRCQzBGNTQ0NTFBMzFBRjQKLToxMDE4MjAwMEMyN0IzMjhBRUFCNkI0NjNCQzcxRDFDNzU2RjI3Rjk1RTcKLToxMDE4MzAwMEQ3OURBNEYzMTQxMzM2NkYyMkZGNEE3OUEzNkNEQThGNzUKLToxMDE4NDAwMEVCMTFERjU5Mjc4N0FEMTg5N0Q4NTA0QUZCOTAwMDFGM0UKLToxMDE4NTAwMDI0Qjg1RUM0NTNGRUMwRjhDM0UyQ0QzQkI3MDUwMTg1OTIKLToxMDE4NjAwMEM1MkYzRkVGNDJGRDcyQUM3OUJEMEJGMTBFRjU5RTM1RjEKLToxMDE4NzAwMERFQkE0NzNDNjdGRDIzMjI5RUYzODZDMzc0NkY0QjJGNkQKLToxMDE4ODAwMEYxOUNDN0YwMEYxMDk0Qjc2REU2Nzg0RTU2RDc4N0VDRjEKLToxMDE4OTAwMDRCRTg2N0I2M0ZDQUZFNDc5NzdEQkVFOUVCMzU3ODFFMzkKLToxMDE4QTAwMEExRURBNUUzNkJCMERGMjU3RkZCNzIwREM2ODlCMTVEQUQKLToxMDE4QjAwMDc2OUFGN0NBNUZGODgwRTJCN0Y1RjdCRUIwMDk3RkM4M0QKLToxMDE4QzAwMDg2RTcyOUZFQkRGRDEzQUIxNzZCNkJERjc5MzgxREUzOEYKLToxMDE4RDAwMDA2REJCNzdDOTc4Q0ZFQ0M3OTNCQUYyNjdGRUZCQ0FEQTcKLToxMDE4RTAwMDEzNTI1ODk0Nzk0MzRGOTE3RjQzRTcxMTdGMUY0OUI3QjMKLToxMDE4RjAwMEJEMEQ3QjI5OUVFRDA0RDAxREY1NjA1NzlDNkU3RDI5QTIKLToxMDE5MDAwMDhGN0ZGNjg4RjhEQzhERDFDRjNCRjQ4OEM3NkRCOEU1QzIKLToxMDE5MTAwMEM2MkI1MUZGMzc3MDdCRjI5QzcxQjlFRjAzM0QyRjNGMEYKLToxMDE5MjAwMDBGM0E2RTE0RjFEN0Y1Mzc5QzM1MkVGNzA0RkUwMUY0MEIKLToxMDE5MzAwMEIyRDhDRDc0RkNCQTYxRjZBRjlGQzZCQzg2M0VCREM2QjgKLToxMDE5NDAwMEU1ODZDRjAzN0ZGQTc5OEE3NzZDM0VBNzFERTVFOEE1ODcKLToxMDE5NTAwMERGNTAzQzM0RDI2RjhBMDdFN0EzQUZEM0YxM0NDQTExMDIKLToxMDE5NjAwMEI1NzMzQUNFM0Y5RDNCQUQ3NERGNEZEMUNFOEY0ODlFQ0QKLToxMDE5NzAwMERBQjdCRTQ3N0U2QTI2Q0UzNUI0QjNBRTFGOEYzRjk3MjcKLToxMDE5ODAwMEM0Nzg2QjlEM0M5RTU3RDAwMUUzN0QzRDJFN0EyRUUyQkMKLToxMDE5OTAwMDdBMzk1RkVCRjFCRUJEQzVGOTVFNkQxRjI4RUUwRkUwMzEKLToxMDE5QTAwMEYxQzhBNUI1N0YxMEYxQjNERDc0OTM3MjkwNUUwN0NGRDcKLToxMDE5QjAwMDFBNDdBREUzQzEyREY0NzI3NzFDN0JGNEI4RUFBRTM4NTgKLToxMDE5QzAwMEY2MDhCQTIxM0Q3MTlFRUE4QTUzMDczODZEMDRGOTQ5MzkKLToxMDE5RDAwMDNFOEE3NjJFQTI3RDJEOEY3RjZGNTdBMzlGMzdENkUzNDkKLToxMDE5RTAwMERBN0QxMUY0RDZDN0RCOUJCQ0U4NzI3QkFFNzFGQzUwOEMKLToxMDE5RjAwMDNDRDE2NjQyNTI0RjdDQjU3RDFGNURCRkNGQjQ0QjdGNUIKLToxMDFBMDAwMEQ3RkFCRUVCQkM1NDg5MTQ3OTFFRUI1RUU0Q0JEMjg2QzgKLToxMDFBMTAwMDgzRTRDRkVDNUE3RjhCRjFCNjA5RkY3QkRCMEIzMkM1MzkKLToxMDFBMjAwMDM5MkZBOURGNEJGQTNENTI3Rjk0RTFCRDJENTFGQTdCNEUKLToxMDFBMzAwMEJGNUREOEU3OEQ3Q0ZFNjg3QkM5MTk3MjQwM0Q2RDdCMjgKLToxMDFBNDAwMEI2MTM1Rjk3NkQzQzQ4NzFENjZGRDZCREFDQjUxOEUyNDIKLToxMDFBNTAwMDI3NzBGRTA4MTlDNkQzRjZFMkVFRTFBNENGQzVGRDMwMkIKLToxMDFBNjAwMDkxRUQ1NDg5NzZDQTlCQTJCNzUzQkVGMUE0QTk5REUyMTkKLToxMDFBNzAwMDYwQkRFNjc2OUNCQkJENjM4QUVGNzZBQ0VGNTgzM0I3QUEKLToxMDFBODAwMDEzOEZENUNCOTM0M0QxRjY2OUVDQUFEOEVGQUZFNjI5RjMKLToxMDFBOTAwMENDQTM3NDBGOEU5M0RGN0IyM0JCNjJDOEVFOUNFN0NDOTQKLToxMDFBQTAwMEY5MzgyRTExNTM4REUyQkFBQTE2ODgzOEIwOUY3QTUzQUUKLToxMDFBQjAwMDkxREU1NUNFRUIxOEY2NzczMUUyRDdFMEZGNTFERDAxMkMKLToxMDFBQzAwMDg2RjZBQTlBRUFDRjQyQkY0M0E0REVEMTEyMkQyQzY0MzcKLToxMDFBRDAwMEEwRjczQ0U3RTQxNDBGRUQ4Qjg0RDM5MDlFMDczMjBGMDAKLToxMDFBRTAwMEFCNThFRjY3MTFGRUFCQ0YxNEI2MjQwNUZBRjc1OTUwODcKLToxMDFBRjAwMEYyMkU4MDdBRDlGNzVGMENGMDNCN0JENkFGQzM4MTg3OUIKLToxMDFCMDAwMDY1OTNCRkE5Q0NEQTc5MDBENzJCRUMzNTNCRUQ0N0M4RkMKLToxMDFCMTAwMEJCRUM3NDdGNDhGOTFBM0I4RDc3RUZENjZGOUYyM0JCRTAKLToxMDFCMjAwMEZCRDc1NkM2Rjc4NzYwNTU4M0Y3OTZCOTc5MUQ4N0I3RjcKLToxMDFCMzAwMDdFQkJFNjJGNjg1N0UzQ0JEMDdFRkUxQTI4OEZFQjg5NTkKLToxMDFCNDAwMDhEQjFCNEZFRTk3ODI5OEVFRTUxQ0I3RkVEQTFBOUE4MjUKLToxMDFCNTAwMEQ3RjI2MzM5M0ZFNjZGNEUwOTU1NDE3REFENDkxQzZFQTIKLToxMDFCNjAwMEREMzQ4MEVFQUIyODdFQzk0OUYxQTU3QkI3QkU1Mjg2MzUKLToxMDFCNzAwMEYzNTRGQkU2NTgwQzMzNjBFREFGMDlGQkZGMzdFMjdFMTAKLToxMDFCODAwMEFEMUFENTYzOEMzMzJGNjQ4QUM3NzgyRUE4MTg2MTUzOTkKLToxMDFCOTAwMDVDMTMyMzNGMDZDOTExRkFCMTFBRTNFODNDMTFEOEM1MUEKLToxMDFCQTAwMEE2N0E0RUE4OUQwRjc4ODk4RjgzRkRGODM5QUE3MDNGRDkKLToxMDFCQjAwMEQ0MDc5MUU1RjRGQ0ZENzY3RThFQkREQzBBRUYzOUJBRTAKLToxMDFCQzAwMENCOTc2QjlENzkxQ0FFRUVDN0Y1NDkzMzk1RkY0NEU3ODMKLToxMDFCRDAwMDczOTFERkIzNUU1RUZFMjNCRERFQUU3QUY4RkI2NUUyOTUKLToxMDFCRTAwMDdFOUI0OEZFM0RENEE1NTdGRTdBNzFCNEZCNUJBMkY0MDAKLToxMDFCRjAwMDlGOUVERjJGQjFBMDA1RUQ5NjJENzZCQUI3MEJFRjY3NEMKLToxMDFDMDAwMEMwNzMwRURCMzRCRUZGNTVFMjBBRDNGRDM5M0I4NDNFODAKLToxMDFDMTAwMDJFODkwOUQzN0QzRUZENDQzRkIwM0NDMkNDRDZGMjIyOTIKLToxMDFDMjAwMEQyQkRGNDE1M0JDM0Y4QjNEMkQ3OUMzRUE0NzdFOUI2MzYKLToxMDFDMzAwMDZGNUI3Rjk1ODVGMThCQjFFNEQ3MkI3REVEN0YxMTFGMTUKLToxMDFDNDAwMDk0NUFDM0QzRTlGRUJDMkQ1Njg2RjdFN0I1NkQ3OTNCQjAKLToxMDFDNTAwMDFERTVCNTREMERBNzI3OUM2NTVGQUZCNERFNkFCRTU3ODUKLToxMDFDNjAwMDQwOENFMzU4NjVFODQyQkM3NzQxM0ZBRjVCRDQ4QjlFMjQKLToxMDFDNzAwMEI5MzI4NkRCRDdGNjE4OUYzNTg2RTRERDdDNEZENEIxQzgKLToxMDFDODAwMENBQzY0MUM2RjNGQjQ1OUVFODdBQjE3RjhDRkE4RjlEQTgKLToxMDFDOTAwMDQzNzdGNDM4RjdEQTNGMjYwOUVEOTlFNjY0NzQ0MDk2MDUKLToxMDFDQTAwMDgxM0Q4RUZBQkNBOEVFRTQzMEY0MUY3QzE2QTNERjZGRjIKLToxMDFDQjAwMEUwODlDM0Y5RTgzM0FENzMxOEVBQkZDRkQyM0I4NzE5ODcKLToxMDFDQzAwMEU3OTkyMzk1MzY4RkEyOTI1Rjg3RDI4RUI1MjdGM0ZBRDQKLToxMDFDRDAwMDMxOEMzN0I1NEY4QkE2Rjc4NkM1QzQxMkZFOEExRThFOEYKLToxMDFDRTAwMDhEN0E4RTdBNEMwQ0U3QUIzNDY4MUY1MzZDMTdFNTQzNDIKLToxMDFDRjAwMDZGRjczMzJENDQ3QUI4MzFDNkMzRUI0OTBCNjlGOEJDOTIKLToxMDFEMDAwMEI4NkVGQjIwMjMxRTBBOTU2QTJBMDc3MjRBRjgyQzY0RDMKLToxMDFEMTAwMDJCQjUyQzgzRkVENkRCMkI5Q0VGRjAyODc0M0Y4MUYyOTEKLToxMDFEMjAwMDdGQkFGODU1RUVBNjMzMzk5MTMxOEU1MUUwMTQ2NjVDRDYKLToxMDFEMzAwMEYyMzNFQkU3NDgxNEQ1NkY0M0ZDNjlDQ0VGNTY2NDY0OEIKLToxMDFENDAwMDk1NkE5MkY3MTg1NjRGQTkwM0NDMkU3RTVGNUEwNTQzMjkKLToxMDFENTAwMDNENzk0NEVDRUZBMzFGMENEMzZFN0MzRDQ4N0EzRjM4QUQKLToxMDFENjAwMDgwQjE4QjMyRjBCRTA5NEY5Q0RCODBCRjZCNzBCMzNFRkQKLToxMDFENzAwMDA5RTM2OTJCMThENzE3NTNEQzY4OEY0OEMxMDAzQjAzNzAKLToxMDFEODAwMEZDNTQ1NTU5Mzc4OERGMDNDMjdDMTgyRjQ5MjYyQ0Y0QTAKLToxMDFEOTAwMENGRTU3RUYzM0JCNDgzODA0RkY5M0Q4NDU3QjE1MDE1QjYKLToxMDFEQTAwMEEwMThDMzg2QzlFRjNBOUVGMUZCRjM5NjdEQ0M4Q0VCNkQKLToxMDFEQjAwMDhGMTI0MTA3MTZEQzREN0FDQ0MxQkE3RjlEMDBBMzVBMjEKLToxMDFEQzAwMDQ1N0Q1QjE1RjdCNzFDREM5RjczQjg1OTE4RURDMzU4RjgKLToxMDFERDAwMDA3MEJDNzQyRUExOEFBMUMzM0NBQkYyQjBCNjAwMzVGNkMKLToxMDFERTAwMEJBQzc5QUYzMjNFNTAyRjQ1QTQ0QkJGNTg0M0ZBOEY3MzcKLToxMDFERjAwMEFCODg3QUJGOEFBOEY3QUJCM0Q1QUJFM0E5REMzNjI4QUEKLToxMDFFMDAwMDAzRUZBNTU4NUM1OTJGRjBDNkRCQjMwOUJDMDE3RTg2RjEKLToxMDFFMTAwMEUwM0Q3RkNDMTJFMzE1RkJFNjg0RDcxOEQxMUIyQjk2NEYKLToxMDFFMjAwMDA3QkE2RThFQzkyMDdFRkE1OURDQUU0RThDOTc2Njg5NTEKLToxMDFFMzAwMDM1MENEN0MzOEIyNEZEQkU0RkU2NzcxOERFNjM2RTFCQ0YKLToxMDFFNDAwMEM5RTEyM0EyOURDRDAyQ0Y4Qjc0QkY1NThGRjI3NkIyMkMKLToxMDFFNTAwMEJGN0E5NEI3Rjc1NjNFMjY3QTc5Njc2RkZEODk4RERFOTMKLToxMDFFNjAwMDlGRjg1RUVBQUY4RThENUFGRjBGRDU0QjY1QUY3REY0QkMKLToxMDFFNzAwMDBFRUVFRjc2RTkyNzM3QTBERTZDNjc2RTQ2RkQ1NDFBNEEKLToxMDFFODAwMERGRkFCNzE2N0FDMkVENEM1QjlBOTlERTMxQzhERkMwMzMKLToxMDFFOTAwMDZGMzExNzlBOUY0N0YyNDkxNEZFNzJGNDg1NzFERjI5NUEKLToxMDFFQTAwMERBQkJGMzYxN0U1RTRERTc4MzVDMzFCRTg5QjU3QzlGMTIKLToxMDFFQjAwMEZDRUU3OURDOEYwN0NCNDYxRkU2REYyNUYyRUZBRUUxQzMKLToxMDFFQzAwMEY2RTNERDBGQ0JCNDBGMUI3OUJGRDVDMUZGQ0RFRkUxM0EKLToxMDFFRDAwMEI4MDcxRjgwQkNERDMzNUYwQTg1MzNBMkREREJDNURFQkEKLToxMDFFRTAwMDhGODc3QTY3ODhGRTQ0REU4MzE1NjA5RTQ5Q0JFNDY4NUQKLToxMDFFRjAwMEY3NjA3MUJFRDRDRkUxNDVERTdGMzE4QkY5QzVGRDY2NTkKLToxMDFGMDAwMEU2RTc1OTMxNkVFMkRCMjIyNUE0NTUwRkVEOUVDNzgyMkMKLToxMDFGMTAwMDJCODBFRkQxRkUwNEJFQzdGRDJGNTk5Q0M3NjYyRThEQzYKLToxMDFGMjAwMEM3RDdERjlBNjBEMjdGQTc4Njc4RTI3MEJFNjZBRjhCOTQKLToxMDFGMzAwMEU3NkVGRTdDRUVCNTlFMTRFMzc5NDVFNTc0QUNFOTFFRDAKLToxMDFGNDAwMEEwMkFENTlCOEFGQTREM0Q3RDNERjM4MDFDNkFBNzA3RTgKLToxMDFGNTAwMDMxOEYyMTFGRUM1NjEyN0UwQ0YzMjQzRDk1QUE4NDUwM0MKLToxMDFGNjAwMDJGMkE2RTNGQ0I0N0JCMzc5RUYzQjM1RTVFNEJCQ0FFQjIKLToxMDFGNzAwMENCQ0U3QzE3RkUxRDQ2RTY4MUZGQ0Y1REUxQTFGM0RGRUUKLToxMDFGODAwMDU3MzlGQ0E3NzFGRTk1NUQzOURFODBBMzI3M0YwNEI3NjIKLToxMDFGOTAwMEYyNzE1N0UxQjgzMzdBOEVBNzRBRjM3QUM5REVCRTBFRTIKLToxMDFGQTAwMEU2NDVGMkNCNzk2REQ4M0ZEOUVBRjlDODgzRkRGQkFEQTAKLToxMDFGQjAwMENBRDAwRkQzMTMzRkRFMjMyMUM4M0YxNUVBNEY3MTI0NDcKLToxMDFGQzAwMDcyREM5NEMxRDhGRTcyQkM2RjE0RjRGRjMyNzFCRkU4QUEKLToxMDFGRDAwMEEyNEEyNjUyMUU1N0I3MDhFRjFGQTUzNDQ3QTQzRTkxQzgKLToxMDFGRTAwMDRFQTY3MjhGOEE3QjRBOTc1NDdBMjlENUYxNkJGMzU2QTUKLToxMDFGRjAwMEQzM0Q5OEI2MEI3OUZCMzZCN0EwNUZBMjQ1RTAyRjQwRTIKLToxMDIwMDAwMEY2OTcyREI1ODJGNjFERURFRThBMzBERTI3QzdEMjYwMzkKLToxMDIwMTAwMERFQzE2MUI5QUIwOUJGOUE5QjkxQkYxM0NBMTM2QzQ1NkUKLToxMDIwMjAwMDE4NTJCNTY2MEFEMTQ5NzE1N0IwN0NDODRGNzUwNDA2N0QKLToxMDIwMzAwMEM3QTI3REUzMzFERjg3Njk0RDFENzFENkZCMzFCQkY4NDcKLToxMDIwNDAwMDZEMTNDN0ZCNjMxMkU3Qjc0OEJDM0ZBNjM2N0IzMDZFMDMKLToxMDIwNTAwMEUyQjE2QkJCRUVBQjIyQkNDMzcyODhFM0ZEM0ZGOTdFRkQKLToxMDIwNjAwMDZFNEZCQzM3NEY5QjY5QzBCQjMzN0IzMkUxRkQ2NzAyQ0IKLToxMDIwNzAwMENGNEIwNTVFQUIwNDFEQUEwNDNFQUJDNEJEQUY1NUUyMTkKLToxMDIwODAwMERFREMyQTgxREYyQUM0M0JBNDhGODg3QjdCMTcyMzNEQkIKLToxMDIwOTAwMDIwOTUxMUVGQzBCRkQ2QTE0MTI2NDM3QjdDMEYwRjUyODQKLToxMDIwQTAwMDg3RTA1QkI3ODVGQ0E0QjJDM0VGNDNCQzVCMTMzOURFQUEKLToxMDIwQjAwMDZEMEVBMDAzRjEzNUUwREQ4M0Y5NDFDMkE3RUFFMDc4QjcKLToxMDIwQzAwMDg2RjI5QzBFMDI1NjEwRUYyM0YxMzlBNzA3RTBGREI2MDkKLToxMDIwRDAwMEQ4MjRENDg3NjM0Qzc4RDYxMkM3OUYxRkRFOUZFMkYzQzMKLToxMDIwRTAwMDVCQTI5MEYzNDhGQzI1NkFGQzVFNjA1REJFN0JCMzhGMEIKLToxMDIwRjAwMEFCNDQ1Qzc2OTVCODk3MTFGMTg4NzZDRDJBQzAwRkJCQkEKLToxMDIxMDAwMDk4RTM5MzNGMUYyMjYwMkZBNTQ5NjJGRDVGMDU3NEMwQ0QKLToxMDIxMTAwMEZDMjc4NTNEODQ3OEM2NzQ2NzJDNUZCNzI0NUEyQTc2REQKLToxMDIxMjAwMEFCODhBNzA0N0VERjBGNEIwQ0IyQjQ2Q0M2NDM4MEYxQzIKLToxMDIxMzAwMDk3MUE2NDFFODRGNUZERTE1QTMzRkZDODZFMjVFMjdFQ0UKLToxMDIxNDAwMDQ5Q0Y5M0M4NkYyQkRGNTYyREI4N0YyRkNGQkZERTc0REEKLToxMDIxNTAwMEFFNUI5RUU2OEJGNzEwRkUwMzEyREEzNTNGMTM3MkI4QzIKLToxMDIxNjAwMDAyRjk4NUZBQzdEN0MzOEIwNTFGMkMxNUY3MDYzRjIyNDYKLToxMDIxNzAwMEY4RTczMTIxQ0Y4RkVCN0NFM0U1RTc0ODk2NEZFNkYxQjYKLToxMDIxODAwMDhFODk5OTE2NzFCRjYyOTgxOUUzMDlFM0JERjU0QzgzRjYKLToxMDIxOTAwMDdFRDFEQUM2NDMyOUREOUZDOTNFQjY5MkRDQzYwRTY1MDQKLToxMDIxQTAwMDNFRTRBRkY4OEYxRjBDRjFGQjcwRkQ3REQxMUU4QUQ3ODYKLToxMDIxQjAwMEVGQkYxREVCODlCRjgzMEVCNDg3MTU3MUNGQTRDQ0Q3QjkKLToxMDIxQzAwMDkzQ0Q1MUVGOERBREYyRUVCMUExNUZBNkI3RkVFQ0JFOUYKLToxMDIxRDAwMDY5MUJGMTczREVFNTQ0MUVENjI3RTBCRjYzMzZDMDhFNkYKLToxMDIxRTAwMDFBNTg1N0MxMkZENjFCQzg1RThDN0FBNUM2NDlGQ0VCN0UKLToxMDIxRjAwMDgwRkVFNzFCRjgyNEI2MTdGRkNFNTRDN0I1MUI1MDVGMEYKLToxMDIyMDAwMEJDODAwNjI0MzBDMTJGNkEwNkQ5MTFDRjgwNzMwRkZBMjMKLToxMDIyMTAwMEIxNTZBOUZFQkUzODJGQUM4QThGRUU4RkZCNjUyQ0RGM0UKLToxMDIyMjAwMDg3NzA2NTVENkFGMjJCQUM1NDdERjQ5RTdCQUM1OUVGRjAKLToxMDIyMzAwMEFDMTRGMzQ0QzI0NEIzOUNFOEYzQzI0RjQ1N0Q1NzM5MTQKLToxMDIyNDAwMDAyM0JCMTVGQzlBNzI3OTIzQzI3REUxQzdEOUVBODUyQTYKLToxMDIyNTAwMEI1MjBERUY3NTEzNThDQ0I3NzMwNTdFM0Y2NzMwRkZEQTEKLToxMDIyNjAwMEMzNjg5RkU0NTQ2MEYwM0FGNDgzRTk3Q0I2OTA3MTdERDIKLToxMDIyNzAwMDE3NjREQ0FFRDRDN0Y1MDRGMkJEMTVFNzAzMzdGMTNGQjAKLToxMDIyODAwMENFMDcwOENCMTc2QUZDREVFM0JCMkRFNDg3NTgyMkU0QjcKLToxMDIyOTAwMEVENTEyMTY3Q0I4NTdDRkQxQ0U1Q0I4QUY3NTg3QjI5NjYKLToxMDIyQTAwMEZEODU5MEFCOTUyODg3OTAxRThGQ0RFMEY2QkNCODNGOUEKLToxMDIyQjAwMDRDNUZDRjJDQjQ4REEwRkIyMkFCMUMxNjlBMTc5NDRGMDkKLToxMDIyQzAwMEFDMjEwN0FFMEY3NjhGNzZBM0ZGNDc3NjY2QjkwMzRFMzMKLToxMDIyRDAwMENDQ0ZBMkZCRENBNUY4MkMzN0YyQ0QzN0NFNTkxNzlDMUEKLToxMDIyRTAwMDJEMUUxNkM4NEZGNzE2MkIyQUY3NEJFQUY3Qzg1Nzg5NDkKLToxMDIyRjAwMEZCMDg1NEY3Q0QwQ0ZERDU0RjI2NTZEODI5REUzNTk2NzAKLToxMDIzMDAwMEM3ODdEN0U0NjYxM0RFODExRTlEQjE4Njc1NUFDQUI0QUQKLToxMDIzMTAwMEVCQkFFRUZCQzNFQTlGRUNFNTVFODNFRjg1REU2MDY5MTYKLToxMDIzMjAwMDQxNzZBMTQxNEZENDg4RkIyNDk5MjdDODg2MThGNEM1NkIKLToxMDIzMzAwMEMyOEIyNjMxRjRFRkY1RDQxM0JERThDREY1NUM2RjJFREEKLToxMDIzNDAwMDkyQTJFQjREREQ4RUQ3RjU2NkE0N0VEMUQzQzUxNzRDOTYKLToxMDIzNTAwMDM2OURCRjU0MUQ1RTQ2N0E2NzQ4NzQzRjQyQjJDM0NBNzkKLToxMDIzNjAwMEY3MkY5OUQ3OUI5QkQxMzMxRkYwOTVFQzMwRTAwQkVEMDUKLToxMDIzNzAwMDIxREQ2RkYxRTMyOEUzODlENDkzNDdBRUQzRTdENzAwOUIKLToxMDIzODAwMEREM0IzNDRCRjMzQzM5RkFBQ0YzQUI3OTVFQzgzRkZEMkYKLToxMDIzOTAwMDA4Q0Q0Rjc5QTc0NzUzNUE1MDczMkREOTIzMEM3NzY5MkQKLToxMDIzQTAwMDBDRjcyRTFDNUU3REJGMEJFOTdCQjg0NkVDOUZBRjU2NDkKLToxMDIzQjAwMDQzMThCRjc0Qjg2NjcxMTlDMUQ1NzYwRkQyNjZEQzJGODkKLToxMDIzQzAwMDFFNzRFMTNENERCM0Q2QzhCNDlGN0UyNDI2OTg0RUYxQ0QKLToxMDIzRDAwMDlGREY5RjM5MjMxQkUyNjMxNkFDNUQ5QThFRkMzODZCM0UKLToxMDIzRTAwMERENTIzQTM3N0IyNEMxMzdEODZGODA1OTk2ODdFQzc5MTQKLToxMDIzRjAwMEZERkVDNkJDNjdBRDNFQjRDNzdCRTNEQkJDRDVEMUZERkIKLToxMDI0MDAwMDNENTVGODI3QUU1Mzk4NzcwOEFFNDM3NkJCQzY3NDg2MjEKLToxMDI0MTAwMDgxMEY4RUZDQzI0RUVCODIyQTJERDg4RTcwRDVCQTU4MTEKLToxMDI0MjAwMDdDODM1NTI1NDRCRjBGMjhENTcxQjUwRkU5OTRFQUYwOTgKLToxMDI0MzAwMDVEOEIyOTczMjREMDdFNEZFRjcyQzREQjZGNDU1RjNCMDkKLToxMDI0NDAwMEVFQkIzRTJERUU0NTAyM0FERDY0RjJCQkYyN0RENzU2N0YKLToxMDI0NTAwMEUxNDc2M0I2NUVGMjYzNDRCRUE3OTc3QzE3OEY5MzYyMzEKLToxMDI0NjAwMEVFRThGOTdGQjdGRjY5Njg4RkY1NUQzMThFQkZCNEU2OUUKLToxMDI0NzAwMEY4OTI0RkU4ODk3OTFGQTE1MEM0OEJDRjVBMTcxQjVBODUKLToxMDI0ODAwMDE4NDVDRTY2ODlGM0M3QjNDNDdFOTlDRThGODVEN0VCNDYKLToxMDI0OTAwMEY2MzlFN0UzNDgzRTk3NUVCODg0RjhGQUNCN0QyQUNENUIKLToxMDI0QTAwMDZCNjVDMEFGQThFRkE1MTc0NkQzN0Q1MDBCOUVCQkUyNkUKLToxMDI0QjAwMDcxOEMwQkZDNkFCRjRDRjkyNUE3RURDNEM3RUQzRkY1NDUKLToxMDI0QzAwMEQyMzk4MkNFREZBOUY0OUQ4OEFGRjY1RDRERTcwMURBRkYKLToxMDI0RDAwMEM1RkREMzNBOUVEMjlDN0MzREJDQzZDMUY1NTBERUU5MTkKLToxMDI0RTAwMDlGOTEzQzc0RjE1NzY4QTY4NjcyOUU3N0ZBRTc1QzVFMEUKLToxMDI0RjAwMEYwRkVEOTMxMzhFQ0VCREUxQzc3QTFFMDZCODBENzJDRjUKLToxMDI1MDAwMDlGMzQ2OTIxRDQ5QkRGQzJFNThBOEQwRDk2OTExRjdCOTQKLToxMDI1MTAwMDZEQUNGN0QxMjhGMkJGQzZFMTMxRjlCNUYyNUI5NkYzQTUKLToxMDI1MjAwMEY3QzBBRTRDMzRDNDk5Q0MxMkRGN0JDODNGQ0RFRjY1MDkKLToxMDI1MzAwMDY1RUUyMDRCNDU3OTEyRkFCMDVCMEVDQ0Y3NzJCN0RCMzMKLToxMDI1NDAwMENERTNENEQzMTdCQkM2Nzk4NTY5RkRENjNEQ0VBQkU4QzQKLToxMDI1NTAwMDc5OUVCMDUzRjI1QjQ2MTNEQzNEOUU1RjhEOEUzNjlFQjYKLToxMDI1NjAwMEVFNzE4Q0E1RjJFREYxRDFEQkZGNTBCNERGNUE1OUMwMEEKLToxMDI1NzAwMDdDQTA0RjhCQzRGREJGNzlBMUZCMzRENDFGNzlBQkUzQTIKLToxMDI1ODAwMDEzMjRDM0I4RjI2QjhBNERGMTRGNzkzNUI5NzRERjVGMEMKLToxMDI1OTAwMEZFRUE1Q0VENUU4M0JDNzZEMTg1Q0QzNkQxRTU0MzQ3NUUKLToxMDI1QTAwMDgwRTgzMkQ1RTFERkUzNDBCOTdDQTFGMDgxNEYzRDU4QUUKLToxMDI1QjAwMDJGQTdEMzExMkQzOEJDODJGNERCN0RBRTY4RTdBNzNFOTAKLToxMDI1QzAwMDhDQTQ1MzhEQTAxM0FDMUZCMjBDNzREMkU5MTNGOTdFMDYKLToxMDI1RDAwMEVCRkFEMjA3M0VDNUZEOEJBN0Y4RUQ0NUJERUJCMTA4ODAKLToxMDI1RTAwMEZBNjU0NEM3NUZBNzgzRjM2QjJCRDgwRjgxRjNDMkRGNzMKLToxMDI1RjAwMDY1QTZGOEJCNUVGMTI3RThBREUzNDc3RjBFRjZERjUxMzUKLToxMDI2MDAwMDk0RkI0RTk0Q0Q1MTU4MUZFNzg3NzNFMUFEQkI3REMxNUMKLToxMDI2MTAwMDBGRTNBMjhGMjdDNUE5RjNDMzdDMTYwNDAxM0VBQTcxNUMKLToxMDI2MjAwMEZCQTNGN0YxM0NDNDgyQjZGMzE4NEY5NzlDMkUzNkYxMEEKLToxMDI2MzAwMDQzOEE3MzAxOTc1MzQxRkZBMzdCMUUyMUJFNkUwREM1RDQKLToxMDI2NDAwMDdBRUQxOUJEOEYyN0M1RDkwQjFGNUMxODY0NDNCM0ZGMDIKLToxMDI2NTAwMEVGRjFDMTExQ0QzN0Y4Mjk5QzQ3NjBERUMyNzlCREYwOUEKLToxMDI2NjAwMEY5Qzc4NjFCRkI5N0VBMTg5N0U2QzQ3OUE5RkFGQ0Y2MjYKLToxMDI2NzAwMEI3ODNFM0JERkI3MDFEMUU1QzI3N0JBQjYwNDgyNThFRDYKLToxMDI2ODAwMEMwNjA3Q0JGQzhGNUY0MzdFOERGNUIxNEZGQzRGMDY4QjYKLToxMDI2OTAwMDc2RjRFMkNBN0Q5N0EwREZCNUFBQjI5OTUyNTVEOEM1QTMKLToxMDI2QTAwMDBDRURFMjBDRkU1RDhGNjhGNzA1NUUyQkY0RUJFMkNBRTEKLToxMDI2QjAwMDY2RUVCN0I1MDU5OURCNzBDRjAwM0IzMjkyRkNEODhBNDUKLToxMDI2QzAwMEMzNkNDRjY5NkFDMDhEN0U3MzREREM4M0EwMkE4MTY1OUYKLToxMDI2RDAwMDE5NTlFODY3NEFDQzBDMUFGMDc3OEQ5M0VGRDcyQzRGMzUKLToxMDI2RTAwMERERTNDNkZEMTAyQkQ0OEZGRTMzNUI5QTcyQ0FFNDc3MEMKLToxMDI2RjAwMDdCNUQ5OUU1MDQzQUU5RDc0NEM3QjA3QTlGMjQ5MTFGREUKLToxMDI3MDAwMEYyNTQ4NDFGRjI5NEE5MUY4OUNEQTY3RDhBNDhCQzI4NjMKLToxMDI3MTAwMDM2RkUxRDI4ODUwOUZGQjNDMDg3RkU5REE0QTU2RTNFMjkKLToxMDI3MjAwMENFOTVDMjhGRkQwNEZBQUYyRjAyM0IzNkQ2NDVGNkMxRDcKLToxMDI3MzAwMDkyMEIyQzdDN0Q2ODUzRThCRTJCNkIzQzJGQUZDNUYxMTAKLToxMDI3NDAwMDcxRDg3MUZGNDNDNkY1NTk5ODYwMjdERTEwMjZEM0Q1OUUKLToxMDI3NTAwMDhCMTJDMkYxQ0MyMzIxREM4Nzg1OTdFMDdBQTM2MzVDREUKLToxMDI3NjAwMENCMDNGOEZDNzk3QjIwRDcwOTc4RkZBNjZGRjMwMTA5MkEKLToxMDI3NzAwMEY3MzNGQzgxOEIxMUNGMzU3MjMwRDMwM0U1N0YyRDc3OTIKLToxMDI3ODAwMDY2NjJCOTc0QzhGQTM4ODFBNzE3RTAzOTg3ODA2MTlGRkIKLToxMDI3OTAwMDk0REZEN0RDMERDQjNERTEwQkU2MkIxMUZCODZERjVGMzEKLToxMDI3QTAwMDZDQ0NCN0M3RjgyQUIwMUY5MURGQ0I0QUZDNDJBMkZEMjAKLToxMDI3QjAwMDQxRkM0QzA3OUZGRkZEMzQzRjJGNzdGMjc1MDVGMTA3NzEKLToxMDI3QzAwMEYyRDczRTZFM0Y5RDUyM0M3MUI4RUY4N0Q4NzlEREI0QTkKLToxMDI3RDAwMEVGNjNGM0JDNkU2ODRGMTFFQkQ4NUFFMDU3QzVCMDRGQUEKLToxMDI3RTAwMDc3QTFFMkIzMjAzRjVENTQwRENGOERGRDhENjIyNzI3ODkKLToxMDI3RjAwMDM4RThEQUYyQTg3NkJEREUzRjNDQUY4M0Y4OTQ0RjRGNUQKLToxMDI4MDAwMDIyN0IyNDkyMkY3Njc0RUQyN0YwRUY2OUREQTEzMzlFQjEKLToxMDI4MTAwMEIyODhDM0YxNENGRkQxRkFFRTkzQUVGREFBNDUxQzc2MDcKLToxMDI4MjAwMDczQThGQzVFQkUzRkZFNjk2RTFDQzU5OUVBRkRCOEEzQTUKLToxMDI4MzAwMDY5NjkzM0RBQzU3NzM0RjU5RDg5RjhCQ0EzRTBFMjNGRDYKLToxMDI4NDAwMDYzQkE0M0VEREMxMzhCRkFFMjdFODlDRTk3RERGOUMxRTIKLToxMDI4NTAwMEVCNkEyQ0E0NUJERjVGNDdGNzFGM0MyRkU0NzEzQUVCNzgKLToxMDI4NjAwMDU0OTFGRTAxRTZENkY4N0U1Nzg4REY0N0M1QkMwMkFFMUMKLToxMDI4NzAwMDU3RDE1RjcxNzczODc0REIwRDAwRERGMzdBRTgwNjM0RTkKLToxMDI4ODAwMEY3QTZFRkVCN0MwM0Q1NDNBMERFM0Q4OUY2OTRGNEY3ODEKLToxMDI4OTAwMDFBQkQ2RjcyOThCRkQ3MzU3RUM1NDZFM0U5MUVBRjhENkUKLToxMDI4QTAwMEM2QUY4RjBGN0E0QUY4RUZDMjhGQjhGNzREQzdDN0Y4OTcKLToxMDI4QjAwMDk5N0NEQzc3QzRERTc1MUQzQkNCM0FFMDBFREJCMDNGODQKLToxMDI4QzAwMEYzNzgzRURFOUY0OEZDN0M4NTU5QTAxRjVGNzRGQUY2QzIKLToxMDI4RDAwMDIwM0YzRUUzRjRFRDQ1QkQ1NzYyRUI0QzU3MDY5MkJDRkEKLToxMDI4RTAwMEJDODVDRkNCRTRDMDA1QzkzMEZFMTMwMzAyMTcyNzIxRjYKLToxMDI4RjAwMDFFOUFGQjlDOTdCRDdGQzBDRUY5RkI4MDlERjNGNzgxQUMKLToxMDI5MDAwMDBDOURBRjVCOUNDOEQ3RUM3NDIyOEQ1M0ZGN0VDNzkyQTEKLToxMDI5MTAwMEFEODcxRkJCMURGOEZCQzREQkZDM0VCQjUyRDk3M0UzODQKLToxMDI5MjAwMDQzRTQ5Nzk2OTkzMTJFM0UzMjNEMjBGQzBDMkQ1RDdDODAKLToxMDI5MzAwMEM4QzczQjQzRTFGMjMyQTMyMTk2Q0VDMUNDOTgyRjlCNkUKLToxMDI5NDAwMEVFREI5RjMxOUZDN0MzMzJBNTc5RjhBREE2NzVDMjIyRDEKLToxMDI5NTAwMDExRDdEMkIzMUVGNDgzNDRENjMzNzNGRTA0QkExNzY1N0QKLToxMDI5NjAwMDlCRTYxRTQ3N0U5MTM1OUNDRjY2NEVGNEM5Nzg4RTYwRkIKLToxMDI5NzAwMENDMzI4OUY2RjE0NzFGRjIzNEI2MDAzQzMzMTRFRjQ1RjAKLToxMDI5ODAwMDMxOURGOUUwN0YwREMyRkI1MUNBOUFCOTdGMzQ0NTlFNTMKLToxMDI5OTAwMDkzRjk1MzQ4NTdFREUxRjMzREMyNzMxMDRGMEU5RkM3QjMKLToxMDI5QTAwMDYxRDhDRjY5NTMyQjMyRERDOENGRjczODdDQTgwNzcyQzYKLToxMDI5QjAwMDZGRjU3RDgyNzRENUZEMjJGQUJDRkIwQUQ4MDExODE3ODkKLToxMDI5QzAwMDlBN0JCNzI3MDdGOTI0QjdERUVFQTNENEM2OTQxOEQwQjQKLToxMDI5RDAwMDZCQjkwQUIzNjE5QUEyMzFDNThFNjkwQ0IzNjE5QUJEMTUKLToxMDI5RTAwMDUwRDg0RjM1Mzc5MUZERTBDQUYxNkI3OEJGNzk2RUQzN0YKLToxMDI5RjAwMEYzNUZFM0ZCRjk0QTc4Qjc2NEUwQUJEQ0E2QjdCRkEzQUIKLToxMDJBMDAwMDczNzYzRTNGQzVGRDVFNTZBNzk5RDY5RkMzRUFDREYwQ0IKLToxMDJBMTAwMEU1OEQ2NjM4MzM2Qzg2NDdFRTMzQzM2NTM4MzY2ODY3QjQKLToxMDJBMjAwMDhDRjgxRUUxOUU5RDU2ODZERjJCMkJERTZDQTUzOEY0QkMKLToxMDJBMzAwMDU3NzFBRUEwNzg1RTNCRTlDNTA5QzU0REQ5MTgyNzcxMUQKLToxMDJBNDAwMEZDNDVBNzA1RkQ5NTNCRkVGQTMyQzU1OTc0NkU4QTY1QjMKLToxMDJBNTAwMDE4NjdCOEZCRDMxODE2ODM3MUJDOUJFREVCMzBCRjE4MTkKLToxMDJBNjAwMDY4ODdGRUQ5RTJDREY2QjUxODRGQjNFRDUyOUQ0RjQzQkUKLToxMDJBNzAwMDE0MEZCNUVENkZGQ0JDNEJFNzA2NkIwOEUzMkU4RTZGQjEKLToxMDJBODAwMDdGRkU0NUU0Q0JFMzFCRkE5MzFERjZBQTE0QjQ2MDdERTgKLToxMDJBOTAwMEMxNDczOEREQzcwOEJEM0U0NkU4RjVFMjNBRjM3QUZDQTcKLToxMDJBQTAwMDBBOTc2RUFGQkE4N0UyRkMzNzI2ODFFM0JCQjVCMjJGMzcKLToxMDJBQjAwMDg3QzU3NzI1NzRGQjZEOENCMDY3REQ0MENGQ0Y4Nzc2RjcKLToxMDJBQzAwMEQzNzk4OEQwQ0Y3OUExN0IzNTFGRDE2QjQxMENFQUIzODQKLToxMDJBRDAwMDhFQTNEQTBDRjQ0QjVENUM2M0M2QTNDRURGOTc4NENDODcKLToxMDJBRTAwMENGMjdCQTI0QTFFNzBDQ0YzMzMwNUVDNUIzMjQxNUU3NTYKLToxMDJBRjAwMEVGNjdBM0RGNTM3RkJEOEJEQjE5MkZCQ0EwRTlGMjIwNkEKLToxMDJCMDAwMDhCN0IyQTk5Qzc3MEFFQjI1QkVGQjM3OUZEMzE5RTA4MUIKLToxMDJCMTAwMEU5MzVCMEZCNzk3MTQ0QkI3QUZEQjEyRTJFQ0Y1RkRBNzcKLToxMDJCMjAwMEY4Nzk4MjQ0ODE4NzYzOTVGQkM4NkVFOEIyMjMyQjdERDgKLToxMDJCMzAwMEJFODkwNjM4QUY2Njc3NzIyRUUxNkY3N0YyQkQ4NkY5RUYKLToxMDJCNDAwMEFBNjRDM0RFRTRCQjMwNEVBRTRFNDE4RjM2MkJCOUUzRjAKLToxMDJCNTAwMEI5OUY4RjQ5QzRFNzcyM0RGNjEzRjMxMThGNkRGNTZGN0UKLToxMDJCNjAwMEI4QjAxQ0Q4RDkyMzhDNzE2N0Y5MzU1N0ZCMjYxQUU0MDUKLToxMDJCNzAwMEZFODdGMkI5NEVCNzEyMzdDN0NCMkIzOUNEOTNGMDlDRjUKLToxMDJCODAwMDQ4NzEwREZGOEU2MTcxRkQ2REI3REM4MEY4NUVDRENGQjEKLToxMDJCOTAwMEQzNjcyQkNDMkY4MzNDOTY2Q0I5RURGQTYxRjBCQ0ZDNkIKLToxMDJCQTAwMDk5NTE1RUVDMEY1NDcxMkIzRTJGREU3ODkyQ0UxNTNEN0QKLToxMDJCQjAwMDZBRTFGRThFNDhGQTA0MDU5RjNERkExMzQ3MDFFQTM5OUYKLToxMDJCQzAwMEE4RUY3NUNCMDg3QTdGOUYwNUVDOUIyM0UzODNFRkRDQUUKLToxMDJCRDAwMDA1NDU4RUIzRkEwRjZGQTBGODMwMzM5RjAyREY0QjY4QzQKLToxMDJCRTAwMEJGNzVBRTk3QkNFQkU4RTlDMkVDOUJEMTU0RjcyREEwQzIKLToxMDJCRjAwMDc4NzlDODhGQkE3RTI5MEM5OUVCODlBNEVGNkFDMTZGRTYKLToxMDJDMDAwMEYwMUI2MkU0OTNDODcyN0RBNjA0RTlEQzc0Qzk3Q0QwMzEKLToxMDJDMTAwMDkzMDZGRjQzQzlBMTZBOEFDRjhENkMwNzIzNTg5OEMxRDgKLToxMDJDMjAwMDBFREE4MUUxNzUyODk3OUI3ODlDMTZGQzI0NUJCNjg4QTgKLToxMDJDMzAwMDYzMUZDNDYxQkFDNzE1RjkxMTE4QTJGODUyMzZEMTgzQkYKLToxMDJDNDAwMDc4QkQ5OTREQzY1NEQ3Mzc2RDM5RjVDM0IxRkNBQjUyMzkKLToxMDJDNTAwMENCNzNCRkEyRkE5QzI0RTc2REVFMzBERDZGREI0RjlDOTcKLToxMDJDNjAwMDQ3NkZGMzcwNThGRkVFOEY5RTVGRDQ2NEE3QjhBRUUzNTIKLToxMDJDNzAwMDI3MzREMkJGMEIzMDlFMTRDQkJGNjhCNzU4QzA2ODNEMTUKLToxMDJDODAwMEJFQTVDRjc4OEM1MzZFQUJFN0Y3QTUxRkFCRUYzMzVFRDUKLToxMDJDOTAwMDNCQ0JCQzFFQTk0RkY0RjlGNjIwRkUzOTFBRkQ3QUJFRDMKLToxMDJDQTAwMDI2MTdDRTgzOEI3ODFDNzc0QTlGOEFDQzhBMjg3NEQyQzkKLToxMDJDQjAwMERGNEJENDJBMzI3MUZERDM3OThGQzNCQjhFRjAxNENDOTUKLToxMDJDQzAwMDUwQzhFRjlGNEE3RTlBNUNFMTlGM0FFOEY2QkZFRDAyNUEKLToxMDJDRDAwMEJBMzlBMUFDMEZGRTI1RUM5M0Q3QTFERkYzMEJEOUZCREEKLToxMDJDRTAwMDgwN0I1MEY3M0VGREFDQUMwMDlEREZBMzBGRjQ0MEZCQjIKLToxMDJDRjAwMDMzMTUxNjU2ODBERjY2RTIzQzM1OUM2MDlBNEY2N0FFMEUKLToxMDJEMDAwMDk2Mjg5RTcxRDY3MkYzNzhGMEJFNkVFM0ZDNUFDMEFBODQKLToxMDJEMTAwMEE5REUyMjU2NEY2OUMxNkE3MzdFMjFDRTQ3MkUzQzI3MTkKLToxMDJEMjAwMEM3RTM3NjhBNkFDREY5RkFCOUMwOTI4RDY3QUNEMUYwNjMKLToxMDJEMzAwMEY2MzVEM0M3RTdGQjAyQzcyN0RENkNBM0ZFRERCNzJBNTQKLToxMDJENDAwMDhFRUY3NzY5Q0M4N0YzNkRFNzJBMjdFOUZGNjIxNkEwM0IKLToxMDJENTAwMDdFREMyOUU2RkRGMjA3NzM3REIzMjBFRDk4M0ZEMzM3ODMKLToxMDJENjAwMEFCMEY5RUNCRTdGMzIzMkQxOTQ5OUVGOUJEN0VDNTEzMEEKLToxMDJENzAwMDU5NzgwMEJGQ0Y4N0UxQkM1QkRDMjQ4NTg3MjE2QzAzRDkKLToxMDJEODAwMDUxMURDMTlGRTNCRDI2Mzg3RUUzNzkzNjdERkMzODZFNDgKLToxMDJEOTAwMEUzNzNGNjNFQTc2RjExOUU5QjkyRjlCODhERjkyNTAyNTkKLToxMDJEQTAwMDFGMjUxQkFEMjY3RkQxOTg4RDUyRDA3OTM5OUVBRjZBRjEKLToxMDJEQjAwMEExRjdDQTFBQ0U1ODRERjU4QTc5MURFQzAxNjYwN0JBRkIKLToxMDJEQzAwMDhEMjk1ODJCRTM2MDU2NzVFOUYxRDAyNUQxQ0VDQjFDNjcKLToxMDJERDAwMDEwNzg1Qzc1NUI1RTVGOTREQkM3RDFCRUVEMjcxMDlERkMKLToxMDJERTAwMDQzN0E0QUY4QTM1OEQ4MDZFREM1OENFQzgyMjkzRjdCN0MKLToxMDJERjAwMDIxODc5M0UyMUVCREE2MjY4REJFMkY0QUZCNjEzMzY1NTcKLToxMDJFMDAwMEZGOUI3ODBFQjMzMjNFRDAzNzBFREE5OTY5RjFBNTJCQ0QKLToxMDJFMTAwMDI0QkZCRUMxRTQ2RjlEQ0ZGMUYwRTQ4ODhBNEIyQUEyQTMKLToxMDJFMjAwMEFDQjc3NTNBM0YyMUQ1NTM5QzQwNzAzQjlGQTc5RDU5NDUKLToxMDJFMzAwMDlENkFDMDIwMTcyM0UzQjhCRThDREJEMzQyRTc4RjNBRUMKLToxMDJFNDAwMEI3NEE3NEZFRjkyOUU5MjA5RDBGN0VFQTVBMEY0M0ZGMjUKLToxMDJFNTAwMDQwMkFEMDA5RjVFRjUzMTI1Qjg0RjdGQzY1MzVEQzM0NkEKLToxMDJFNjAwMEU3MERBNDczNTY4QzE3RTMwRjRBMUJDNkM5QTUwRTFBQUIKLToxMDJFNzAwMDNGQjdFMzYyMkJENkUyQkU1NENBOEMyMTIzOTBERjYxQjgKLToxMDJFODAwMERDMzM2RTg2RTdBM0UzM0NENDVFNUYwN0E3N0JFQUMyMzAKLToxMDJFOTAwMDYwQzZEQ0ExRDhCRTdGQ0UxQjI4OEZDMzYyRThCQzdDOTUKLToxMDJFQTAwMDBBRTBDQTk5NDBFOTMyQjRDRjUyNTlFNjZFQjQzMzUzQkUKLToxMDJFQjAwMEE3Nzg0NkEwNEY3Rjk1OEJCNzkzNjQ5MTY3REM4NEY2MjMKLToxMDJFQzAwMEUzMDgwRTI3M0MyQ0Y5RDYxMTEzQUVBMDc2NTJBQ0ZDQzkKLToxMDJFRDAwMDkzN0FGODFDRUQ0RDFCRkEyNzFDMDY3QTRGQThDOEM0M0MKLToxMDJFRTAwMEY2NTMwNkYxMzQ1MTBCQTc2MTNERkJCQkU4MUVBMDc1RkMKLToxMDJFRjAwMEM4M0MzNzIzN0QzREVGQkI3MTI5QjgyRURDREYwNjBCQzQKLToxMDJGMDAwMDc1RDA2M0ZCRDNGNEZEOTdCMDgzRUNGQjBCODdGMEYyMzUKLToxMDJGMTAwMEMyNEU5OTk3QzlDRkU3MjRBNkVCRjYxNTJGRDdBMUZBOTEKLToxMDJGMjAwMEUyNDZBMjVFN0Q4RkRCRjk1RjM5N0NFNDA3QkY0MkVCQUUKLToxMDJGMzAwMEU1M0M4MEEwNTNGOUU5NTgxNjMyQ0MwQkU1RDNCRTIxMEQKLToxMDJGNDAwMEZCQjNGQ0I0Q0JGNDFDRUYwOTM1QzY5NTk3MTRFQ0ExODgKLToxMDJGNTAwMEVGM0I5NEIyNjYzQTlGNTA1QTZGOEU4M0JGMjIyNjdBMTcKLToxMDJGNjAwMEJCM0E5Rjk3OUY5NjU5MzA2QUJCOUFGOUY5RTkzRTJDNzQKLToxMDJGNzAwMEQ4Mjc1QUI5NjRGM0YzRDM5MjE5NkVGQzU2OTQ1M0U4RTgKLToxMDJGODAwMDM5Q0I2OTcxRTFGQTcxMEFDRTQ3QTg2NzQyOTZBMDdBRjcKLToxMDJGOTAwMDc5Mzc1RERBREQyREE2NzlBOEREQzNFMTBFQjFCRkE4RDIKLToxMDJGQTAwMEU3RUJGNUI3NEZEM0M0MzkzRDdFQ0Y3QjVCMjUyODIwQjcKLToxMDJGQjAwMEMwQ0ZEMzREMjdDOURGNUREMkI0OUJGMEEzRjM0NTM3MTMKLToxMDJGQzAwMDlFNjI1OUQwODBBN0U0QUFFNkIwMDU2NEZDRTlCOEZEOEEKLToxMDJGRDAwMDRCODc1RTAyMjREOUEzQ0JGMzNCNEI3RDYzMjExRkJGRkMKLToxMDJGRTAwMDZCNjE5MEVGRDhBQzJFNzkyNzc1QjNDQTIyMEJGREYwMzgKLToxMDJGRjAwMEVFRDI4OTYzOEQzMDJGREZGRDdFRjMzNTEzODFCN0IyQkEKLToxMDMwMDAwMDg2RjJGNzZCRTNERTdCNkIyMUM2MDY3NTlEM0JFODRDRDEKLToxMDMwMTAwMEY3M0IwREIwMkQwMjc2MDAzQ0NDMDBCQjIzRjIxMzIzMEUKLToxMDMwMjAwMEYyNTMyM0UwMzQ1RUJFQ0QxOTRFOTdCRDhDNkQ4RUZCRkUKLToxMDMwMzAwMEUwMUEwNUY0NUM1QkRGRjA3NEJDNzk2NDc5RDU0N0Q3OUUKLToxMDMwNDAwMEUwRjc4RTRCQjNGOEY3N0JDQjlBMjRBRjY0RDBBMzY1M0YKLToxMDMwNTAwMDVFMUU4N0U0RjBCNjY4MzM4NzIyMUU5QURGNDQ3RDUwRjcKLToxMDMwNjAwMEQyMjhCOTcxRkRFMEE4REYxMjI2MThERkYzMThERUFCMTUKLToxMDMwNzAwMEU3RUJEMzkyRkE4M0Y0NUVBRkY1MEZCMTkwM0MzRjNBQTEKLToxMDMwODAwMEU0NzMyQTc3QUVGRDJEMzZDNUZDM0RBRkRFRjZCQjUyQUMKLToxMDMwOTAwMDJEODFCNzUwREZFQUY3QzdCNzZERjlBOEZCN0JBQTIwRUYKLToxMDMwQTAwMDdGRUQ3RDdEN0I0OTlGNDY5QzVCMkZDN0ZFMzhCQUU1NEYKLToxMDMwQjAwMDQ1QzdFM0EzNDM0RUQxN0RCQTdGMThENkY0MDE5QTA3RTIKLToxMDMwQzAwMEIxRjM0RTJFQzBBQjc1RkY1NDdBNzgxNERBNUY3ODI3Q0YKLToxMDMwRDAwMDJGQ0UxRjRGNDhBMTRCNzA1RTdBOUEwNTJFQzE3NkVGMTYKLToxMDMwRTAwMDI5QkQ2ODM3N0U2QUVDODBEQUYyMEM1RTA5RjM0RERDQUMKLToxMDMwRjAwMDQ5QzJGRjAxNjdDQjAwRkM2NERERTlDN0ZGQzJFMUE0NjAKLToxMDMxMDAwMDE2QkEwOUU2QjZFQUVGQUZDMUVGQ0QxRTE4RDAzMkMwNEQKLToxMDMxMTAwMDAyRjBGNzhGNUYzQTk5RTA4QjVBOUU0MUY4QzJFQTA0QjkKLToxMDMxMjAwMDBFMEY2QjE5MjBDM0ZCMDM4MzdEMjYyM0ZERDZCQkEzQTMKLToxMDMxMzAwMENCRkQwOUExNkZGNEZFQzUwRUY2MUQ4OTQzRkJBQTg0RTEKLToxMDMxNDAwMENGM0I3ODJDREEwNjdBNzU3QUQxQjE0REVCMDExRkQzREIKLToxMDMxNTAwMEZGMjM5NkY0RERGQUI2NUJBRUYzMTMxRTgyN0U4QzZGMEUKLToxMDMxNjAwMDRDMTFGOEE2Nzk5MUY0QkI0MkY2NDQ1RjlDMEIxM0JBNUMKLToxMDMxNzAwMEU5RTk0QzZGRjZEMEJDNzE2OUM1MTZCNDFGNTJBNjBGQjEKLToxMDMxODAwMEE1NzlFMzU1OTdFRjI3RUU1MURERTlFOTI0OUVGRUM0Q0EKLToxMDMxOTAwMEVERTZGQTVCQjY1MEJDNDZDQTQzNEVCMkFCMUUxN0RGMzMKLToxMDMxQTAwMDY3MDBCOTIzRkU3MDA4QkE1OERDN0MzQ0ZGMEQxOTczMjgKLToxMDMxQjAwMEQxMUIwMDgwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwRjEKLToxMDMxQzAwMDAwRkZERDdEMEQ3ODk0QzVCNUYwQkNCQkVGRkVFRjI2QUEKLToxMDMxRDAwMEJCOUI0REIyMDlGOTc5RjM0MzA4MTA3MTEzOTMxOEE5RjkKLToxMDMxRTAwMEQ2NEQ4ODE4MzFCNTBCMjI2MjZCNzE0OUY4NDkzMEM5NDgKLToxMDMxRjAwMDQ2QUQxNjJEQkQ1OTQ4NTQ4MjA4RDE0NjA0MEFCOEUxOUYKLToxMDMyMDAwMDAyNjIyQkZEODI0NThDMUFFODgyODhGNjJCQkRERjcyQTQKLToxMDMyMTAwMEVCQUQzRkJERDcxQjdFOEE4ODQyNTZCNDVDRUE2REVCQUUKLToxMDMyMjAwMDlENzM2NjI2RDk3NzkzNUNBODdBN0I5RkU3OEI4RkJFQzgKLToxMDMyMzAwMENFM0JGM0NFOUMzOTczRkVFNjlDMzNCMzFBQkI4NjkwMkIKLToxMDMyNDAwMDY0NDI4RTI1REMzMEM3NEU5RkRGMzFFNjE1OUQ0QzIyNEYKLToxMDMyNTAwMEE0QkIzM0Y0OUM0OTRCQzg3QjEyMjFDNDQ1NDhGMDA5RjgKLToxMDMyNjAwMDUzNjg3QjBFMjFERkVERDEwNDc1ODlCNERFRTE0RDczMjcKLToxMDMyNzAwMDE2RDFCMjQ0N0NCRDQ1QzNFNUJEN0ZENURFRTVCM0QyRjIKLToxMDMyODAwMDcyMzEyREQzRTdBQjEyOTk4QkY1MzNCRDY5MEU1QUZFMUYKLToxMDMyOTAwMDAyRkVBRUE3RTUxRTU2OUZBRTI1QUQ1ODlGQzNCRTdGNkEKLToxMDMyQTAwMEFBODREQ0U1QTNDRkQ0NzYzQTZFMjk3REFFOURCOEI1NkQKLToxMDMyQjAwMDlEOEU2QjkxODkxN0NBMEJFNzE2NkM1RDRFNjE2QTczMjAKLToxMDMyQzAwMENDNDI3ODg5RDc5QjI2NTFGODRFMzZFNjZBNTZEMTc2OUQKLToxMDMyRDAwMEJGQTdBRkM4MzU4NDVDNTFFMENEQjA5N0QxRjk0MEZGQUUKLToxMDMyRTAwMDc0MUNEMjQ0Mjc5NTM2M0NGRTFDOTgzN0FEQUZENzdBNzQKLToxMDMyRjAwMEIzNjQzQUNGREIxREZFMzlEMEJFNUVFMzlENDJCNEQwNEQKLToxMDMzMDAwMDg5QjdDMDc3MDVCNDIzODg5RjM5NzYzQkI2MjdGMjQwNEEKLToxMDMzMTAwMDE5QkNGRkZGMDg0Rjk1QjhFRTVGMTE0Rjc3RUYzNDc1N0EKLToxMDMzMjAwMDlEMkMyNEY4RjcwNUZEQjdCOUQ3QTEyQTA3RkFEMkJBMjAKLToxMDMzMzAwMDRFMUE4N0NCNzdDM0ZGRDA3MTQ4QUQyNDkzMTQzQTJDMzMKLToxMDMzNDAwMEFCMjI2RThERkYzNkU4QkY3OUU5MDc3QUEyODEzNzUxNEIKLToxMDMzNTAwMDNERjQyRkYwQkU0RTBBRUI1MkU5RkM4MkZCMjRDRjc2RkYKLToxMDMzNjAwMEMyREVDRkIyMTE5Mjk1RThCRjEzRTYyMUUwOUVGN0MzMEIKLToxMDMzNzAwMEU2MzQ3RkQxRjA3QzJDM0Y3OEE5RTY3NjVBOUNCN0U0RkUKLToxMDMzODAwMENDQUVFREY0RkI3OTBGNTkwODUxODZEQkQzMUU3MTlENEQKLToxMDMzOTAwMERGN0ZDRkI4OUE1QzQ5OUZGQURFQjA4NkUyRUJGRDE5NzkKLToxMDMzQTAwMEM0QjM5Q0I2N0I1RjQzMUEwMEZGRUY3M0JDOTUzRjc0QjgKLToxMDMzQjAwMEY3MTEzMjg1OTA1RkQ5QjVGODlENDlEMDgzRTREQkJEMjQKLToxMDMzQzAwMDg4RTJCNzUzMjI0MTIzRDBDMzRDM0REMkMzNjA4OEQyOTgKLToxMDMzRDAwMEMzOTVCMEZFNzQ3REU4RkJFRTA3Mjc4NzgyNzQ3RDA2RjcKLToxMDMzRTAwMEM5MDA5MTYxM0UxNUM0QkU1RDg5QTlCRkEzMDBFQjI5NDgKLToxMDMzRjAwMDlEMDQ0REI0M0VEQTY4MEU2RDk1ODA1RTI4QTBBNTUwMDAKLToxMDM0MDAwMDNGMDlFQjVGOTVEOEZBMDdFRjMwRTIzOEREMzMxOTFEM0QKLToxMDM0MTAwMDc2MzczQTQzQzExQzAwQjY4QjAwREVDNkEyQTM5NDc2NzEKLToxMDM0MjAwMDgyNzQ0ODY0RUY5NDk5QjY2MTdDNkNFMzcyQzE1MjNBM0QKLToxMDM0MzAwMEYwRTJEQkI0M0ZCMkRBRTQxOTRGMUZCMDg0MzI5NEJCNDAKLToxMDM0NDAwMDUyNzEzQzRBMEZBQjkxQkU2NDA2NDdGRDhGRDM0MkFCMkQKLToxMDM0NTAwMDcwNUM0RjM5QUNDQkEzMzZFRjdDNzgxRkZEOTE0NTAxRjIKLToxMDM0NjAwMEY4Mzc5OUM4NEE2MzA5N0Q0QUE0QzNFOEE0RUJDMEUxRDAKLToxMDM0NzAwMDIxNUQ0RjEzQTA4M0JCNjAwMDhBODc3RjZGMzg2RjUzMzUKLToxMDM0ODAwMEU4RkI5RkQ4MjU4NDAzMDhDRDU4NEU0ODFENjFGNTc1OEIKLToxMDM0OTAwMENCMkNDN0E0MjlGMEQ0ODYwRDA5RjRERENBMUJCQzAzQ0MKLToxMDM0QTAwMDgyQkU3MkQ5RDM0OEZCRjM3M0JBMjJFQkEzMzZDMDgzMzIKLToxMDM0QjAwMDFGQkU0QjgwRkUzRkI3Mjk1NjI4RDNFRkE3QzBGMkQzREIKLToxMDM0QzAwMEVGMEI4N0JGRkYzOUYwN0QxOUMwQzdFMDI3NkQxNjY1ODgKLToxMDM0RDAwMEJCMzQ4QzFGRjFGQ0I5ODBBRkVCNjk2RkVDNzg2MjlDNTgKLToxMDM0RTAwMEY4N0U4RkQ5QkRGRjA3RjA0NUYxMUU0RTc0MDE1RUI0MjIKLToxMDM0RjAwMEI4QUVGMUYwQkFGNEQxQzc0REI0N0U1RTlCRDZCMTgyQkUKLToxMDM1MDAwMEUyRDNCRkQ0ODZGMzE1RjBERTk1MUFCRDhFRTQ4REVDQzAKLToxMDM1MTAwMEZGOTRBNUE1NUM4NkY5MkY2NTc0NEY5NjE5MjhFMjYyODEKLToxMDM1MjAwMEYxQTIxRjJFNTNEMjVENDhBMjg3MzVEMjI4RUZFNUYwRDUKLToxMDM1MzAwMDAxODA3RjUxNzdDQ0Y3RjhERkJGMUE2MkRCMDlCRTIxMkIKLToxMDM1NDAwMDhBMTQwNzNGQTcyQjQ1OTI2MURERkMxMjVCMzdCRDNFMTUKLToxMDM1NTAwMDNBMEZFNDU2M0NEQzAyOUZGRkM2RTU4REEwOEI3ODdDRDkKLToxMDM1NjAwMEZGMUJFMEJCNkMyNEJFNURGQTgxNENFOEQ3QkZENDgwNjIKLToxMDM1NzAwMDc4OEFFRjlGOTAxMDdFRjdCNDg5MDQ0RDk0RUVENjRCNzUKLToxMDM1ODAwMDEyRDJFQkZBMDcyRDIxOTA5QjgzQTZFODBFQzA2NzYwNEMKLToxMDM1OTAwMEZGOERCOERFRTcxQUNEMEFBMTREMzZFQTE5QkYwNUY3NEYKLToxMDM1QTAwMERCMTgxRjE3MEMxNDgwREMzQjQ3RTdFQ0E1RUI3M0VFMzAKLToxMDM1QjAwMDM3REE5RUEwMjQ4MDIwQTRFNTM3REFBRDQwRkZFNzVFMkQKLToxMDM1QzAwMEJFODlGNUIzRENBMjEwNUEwRTAwODZFOUI4ODFFMDdGMEYKLToxMDM1RDAwMEI2MTE4QTU3Njk5NjExQzczRkIxNTcwQTE5QTBCRThGMTUKLToxMDM1RTAwMEUyMzk0NjVFOUVBM0ZGMzY5NDBDQ0I4RDQxQTgwMDM4OEQKLToxMDM1RjAwMEZBMkMwODA3OUQ2OTIzOEVGNzVEMzM1OTQ1Qzc2RkQxQjMKLToxMDM2MDAwMDQ4NUUwREFENkY1OTMyMjlENENFRTAzMUM2Q0FENTE2MDkKLToxMDM2MTAwMDBERTk5MDRBODZGOUJGNDU3M0JDRTBERTIyNTYyN0E3MjQKLToxMDM2MjAwMDcwNzlBQzYwQkI0MzEyODVCM0M5QjgzQUEyMDVGQTA1RkMKLToxMDM2MzAwMDNFQTBGNTRCQTAzRTY3NzgxRDVBNTY3RkY0MTc5ODQ3NzkKLToxMDM2NDAwMENCMUUzNTdEMzQzREFGOUVDNzkyNThCQUNBMTlBNjE3MTYKLToxMDM2NTAwMDRCMjlDMzE3QTkyNkExRjExNDVFMUIyRjVCNkEyMjIxRjcKLToxMDM2NjAwMDJERTA2M0U5MzQ3MkUyMkFEQUY0RTBDMDc0QTAyMzVCNEYKLToxMDM2NzAwMDY5MkZBOUEzQ0ZDMDY5RTIwRDUxQjhBN0Y2RjdCQzM2RjAKLToxMDM2ODAwMDhFQjY3N0Q0NDQzMjYxQkE4MUE1QkZDRDNCNzlENUYwRUYKLToxMDM2OTAwMDNBMEIzOEFGRTk3RjQyNEJBQzM4MUU3RTQ3NDFGMUVFMjIKLToxMDM2QTAwMEI2NjJCQjg5QjNBRTg4N0RBRUMwRUY5MjM1NEMyRjBGQUEKLToxMDM2QjAwMEMwMkJFMDFGOTlFOUNENzU1QzZGNTJGRDhBRjI3QTYxRUIKLToxMDM2QzAwMEQ3MDRENEFGQTBGRjQwQ0UzRDk1QzBGNDMxQzgzRDkwQTMKLToxMDM2RDAwMDMzNkQ4RUFBQUIxQzc0OUU2NjY3RDUxNDQ3MTkxQkM3NDEKLToxMDM2RTAwMDY3ODNFOTI3QTFGRTg4QTdFQjc4M0QyNERBQTVFNkI1MzQKLToxMDM2RjAwMDE2Qjc1QUM3NkU0N0Y5MENGMTE2REQ5MEM4RTQ4ODJDNEUKLToxMDM3MDAwMDYxNzlEMUFGNzUzREFCMTAzRTE5RTlFNkRFQ0QzOTI4QzAKLToxMDM3MTAwMDk3MUI0ODk3MUVFOEJDODk4NEY0NDBDNzhCOEMyNDk4N0IKLToxMDM3MjAwMDQwRTk2MjExNkQ5NjQ4OUY4QkQ3MUI4ODEyQjM3RThEM0UKLToxMDM3MzAwMDIxNzVCOTg5Q0I4NUJCNDkwNEJGQkY3QjY3NUM3RDM1RUIKLToxMDM3NDAwMDA5REI2ODdEQjM5MTg0MkRGMEVDNTVEN0I3NTA3RDhFQTEKLToxMDM3NTAwMDdDRDZGNzg1MjFGNjNERTk2NkYzQkQ4QkFGQkJBMzNBNzYKLToxMDM3NjAwMEE0RjVEMzc5NkYzMDUxRERFQTg0MDY1REI4M0U1Mzk3RjYKLToxMDM3NzAwMEY1RTA3QTI2OTY3ODczMUUwNkJERjIyQjlENjcyQkE1ODEKLToxMDM3ODAwMERCM0ZGMEY1MTJGODM5NjZBRkFBMDBCQzlCQjUxQTlDNzYKLToxMDM3OTAwMDdGRjQ2MTAzRTJFNzI0RDVFM0IwRkU2QjFERTRBRTU5OEMKLToxMDM3QTAwMEY0NzlBRThENzhGMzc1ODAyNjdCRDYyQ0RCNDgzQ0FGNjAKLToxMDM3QjAwMDdBQzVENDAwNzREM0UwRDBBOEU4MkFEM0ExQzM3MkY5QTMKLToxMDM3QzAwMDBBOEVGRkU1OTZEMEQ2MUM0NEY3MTRBMEE3RjI1Q0ExQTAKLToxMDM3RDAwMDU3Qzk5NDk5QjQ3QzRDNDdFRDNCNUE2RTk5NjNGNTQzQjUKLToxMDM3RTAwMDdGMDM2MDRGRDBGMkZEMEUyNkNGRUU3N0U4NzEzRDQ1QTYKLToxMDM3RjAwMDU5Q0M1N0QwMEQxRDA3RkIzMzVGQzU5RTAyOEU2NTQzMjQKLToxMDM4MDAwMEVEOUY2MDc0QzNGNUYwQkE0NjczMEZFQUUxMjFGQUQ1NzMKLToxMDM4MTAwMDEwQTRERjIyOUYxRUYwRkEwQTk3MkJGM0MxNkVBMUY4QzUKLToxMDM4MjAwMDdFODUxMjE0Qzg4RjYwMkZCMzVGMjkzRUU2MkRBNUU1NzMKLToxMDM4MzAwMDU3NEUxNzc5NTYyOTQwNjc0Q0RFQkNGMjFEMzM1OTQxNkIKLToxMDM4NDAwMDg3N0NGM0NDNEYxRkZCMjc1QTdGRkVCNDVFMzFEMEZBNDIKLToxMDM4NTAwMDA1NDA2Qjc0RkQ1RTkxODgxN0M2MEJCRTY4MDg4MUJFN0IKLToxMDM4NjAwMDZDRDIzMzdCQjQ2OUZGMTVDQzlFRDFGQjM3MkM4NDcxQUQKLToxMDM4NzAwMDVFRDA3OUMwREU2OTRBMDgzREI3MDNFQkQzM0M5NEEyMjEKLToxMDM4ODAwMEM5QUIzQTg2Q0ZFMENCMTZGNkJEMzlGNEIzOUZCQkEwRTcKLToxMDM4OTAwMDNFRDUxM0E0RURBMzI2RkY0NjU4RDc3NDgzOTI4ODdBQTkKLToxMDM4QTAwMEY5RDc1QUMyQzYwOTE3MzgyODVFOEY4Nzk4REQ3RDlDRTQKLToxMDM4QjAwMDU2NDkzMDRFQkYwREZCQTE3QzlBQjY5MEY2NzNBMjMzRTkKLToxMDM4QzAwMDE1RTc0M0U1MkZEQTU5MjdENjE4QjY4MkZDNUQzNzM0NjEKLToxMDM4RDAwMEFFODRFRDhGRUI3Q0QzRDM2OEY5Rjg4QkM1OUVFNUI0NEQKLToxMDM4RTAwMDZBRDBBNzBGRUIyOTNEMDdENjMyQkJBRjVFQTM2QzAxQjAKLToxMDM4RjAwMEZDOTBGRDE2OUM4NzU4OEZDMDlBQzVCNTUwMUY1OEIyRDIKLToxMDM5MDAwMEVDMTY5MDhGNjNGMTM5Qzg3QjEyMjMzN0NGOTE2ODE2N0MKLToxMDM5MTAwMEYwRDNDNjg2RENERTMwRTg5NUZFODkxRTU0QUZDNDRENzgKLToxMDM5MjAwMDE3OUZEMjhEOURCNTNEQTk2M0Y4OERFRUQzMjEzRDVGRTQKLToxMDM5MzAwMDZFRkY0MDE3NzIzOUQzNDMzMDRFODBDQTY1MjJGODBGQUMKLToxMDM5NDAwMEU1NzI0QzU5M0I1QTk5QUQ2M0UwOTU1NDZFREZBOUVCOTMKLToxMDM5NTAwMDUzMTJGQzQ3NjA1RDVBOUVGQzhGRjc5NzJBMzA1RTE0MjUKLToxMDM5NjAwMEU1MjJFOTRBNDZCRTNDQTlGM0NFMDNCQTc1NTQ4N0Y1NzEKLToxMDM5NzAwMDc1MzE3QUZEQTQ4M0Q5OTlGNTA2NkUwNzkyQjAzRTk2MEIKLToxMDM5ODAwMDBGNDU3RDc5OTU5QUVFQzVGMzA0QTc3RjVCODRDOUY3NEYKLToxMDM5OTAwMDkxRjUxQUNFMUZCNzFBNDA4RjRENjUyMDkzNkNEMDIzMzYKLToxMDM5QTAwMDU2RTg1RkMxRkVBNzlFMEVFQkVCNjkzOTdCNTk1OEJGMDUKLToxMDM5QjAwMDg4M0Y4MTRGMjhCRUMzNDYzQUVGOTMxQjZDOENCRjI5Q0EKLToxMDM5QzAwMDFBQTA5RjQ1MTUwNEY1RTUyMjJEQjU2MzRCRTBCREQyNDUKLToxMDM5RDAwMDM3NDBEN0U1RDQ4QjBFQTQyRkYyNjc4QTE1OEFFRkY5MEEKLToxMDM5RTAwMDg0QjczMzUwQkI5N0NBQjE5NzNBQTQzMEVDMEJFNkFGMUIKLToxMDM5RjAwMDM3NkMzNUU1MDA1RjdCQjUzNjU4Q0ZDRDEyQ0FCMUY5Q0IKLToxMDNBMDAwMDFEOTUwNTFCNjg3OUM5OUUyQjcwRkQxMzJBMTg1RDJFMjQKLToxMDNBMTAwMDA5Mzk1MDJGNEVFNUYyQjFERTEwRDJBMzFERkUzMzg5RDUKLToxMDNBMjAwMEMwM0U4OEY2OEZGNjc0MTNGRDI4QUQ2NDI0MUU0MEFFQTgKLToxMDNBMzAwMEFCRTgyMTE0NTNBNkY2RDFENDVFMjY1NzA5OTVFNzI0QTYKLToxMDNBNDAwMEM2NkUxMkYyMUVFNDM4ODlCMzAzRDVGNDExMTRGQTg4NTUKLToxMDNBNTAwMEM5M0RBMkE0ODJEQzEzNzJGOTk4REQ5N0U4NDQzQjNFOEQKLToxMDNBNjAwMDNGMTVENjk3QUUyNzkzOUJCQjI1QzQ2QjMzNjk0NTdEMjUKLToxMDNBNzAwMDIyRjRDMEQwQjg1QzhGOUNEMjA2OTlCRTMyM0M4MUNGNzQKLToxMDNBODAwMDdDNjcwRUFFRUIxMkQyOEJGQTQ0RTg5NUIxRTgyMERGRUEKLToxMDNBOTAwMEE5RTFGQjg4RDFFOTYwQkM1M0MxRkU5QTRFOTNGMDc1NTEKLToxMDNBQTAwMDc0QkNBNjY1MjREQzNDODUzRDZENTM1MDNGMzIzRDY5QjYKLToxMDNBQjAwMDY0N0ExMjlFRTZDQkQwOTdGMUZBMzE1RTFGQzZFQkMxNTUKLToxMDNBQzAwMDU0M0REMzc3NjI5RDg1M0Q5MzNBOEREOTAxNTM5Nzg1QjcKLToxMDNBRDAwMEI0QTQwOEZDMzVERUVBOTRFNDYxQkIyNkYwOEVEMUE4REMKLToxMDNBRTAwMDVDMDk2NTFGQzkwNUY5OUU1MEY5NjIyQUFEMEZDOEM0NkIKLToxMDNBRjAwMDBCN0M2NUExNzhFOUExRUYzNzczRkJCNzI3OTVDREQ3OEMKLToxMDNCMDAwMEFENjdGNEFCOTM3REE0RDgwQUVCMTJDMTdENkYzNDk5RjUKLToxMDNCMTAwMEQ4ODExRTA1M0UzN0RCRTg3NzI1RjAxREUzQjdBMUVGMUUKLToxMDNCMjAwMDhEQTRDMzFDRjM3REQ1MkIyNkQ0M0YxNzVFQjY4NTBDMjAKLToxMDNCMzAwMDY4OEZGOEIzMURCNEJGOTRERjFCRDA0RTNERjc4QTBEREMKLToxMDNCNDAwMEY1RTkzOUFFMEY1REMyRUY0MDFFNjE3RTE2QkVBRTQxOTMKLToxMDNCNTAwMDUyMzU4RTAwRUQ0QjMzQzY4MTA4MTRGNjU5QjM4M0Q5MjQKLToxMDNCNjAwMDU5MjNFRDIxNUU5RjEzOTlDM0U4Q0E4MEZCQ0QwQjhFQ0MKLToxMDNCNzAwMDgxMDdBMDRDRTEyMUEwN0Y2RTcxMzI3RTBGRUM5OTU2MzcKLToxMDNCODAwMEZDNDNGQTNFRTBCMzdBMThGNkZEQzU0MEFGMDZFREY3MDgKLToxMDNCOTAwMEU3MTgyOTdENERENzJFOEIzRTQ4RTdEMTlDNjlCNTgzMjgKLToxMDNCQTAwMDdFQUJDRUZFRDdERkRENDFDQjFGRUVEMTExMDNBQ0YzRjAKLToxMDNCQjAwMEY2Njk3MzQ5RUVEOEYyQjczMUE0M0IzRTEwQzMyRjc3QjQKLToxMDNCQzAwMEVGNTQ5NzlCN0JENUU1NDA5RkJBN0NCRkQzRTYzQTY1MUYKLToxMDNCRDAwMDQxRDlFMUY5ODJEMkI1QzFEMDdBQkE4N0MyNkI3OEQ1MjIKLToxMDNCRTAwMDgwRkE2ODg2RDNGRjkwMTNFNEFEMjY3QTE4RjA2Q0M4OEIKLToxMDNCRjAwMEZFNzgwQUY4M0IwMkZEOUY0OEYwMzQ1MDM2OEExNDMxQjMKLToxMDNDMDAwMEZDMDM1RjVGMzBDRENGQjY4RjgyQjc2MUZDMTFBMzA2OTYKLToxMDNDMTAwMEYxNENBRDc1RjY0NDM5MTdFMDdDRTJEMjdCM0YzQzQwNzUKLToxMDNDMjAwMEU3QkY2ODk2RDlCRTAyREY3ODZCQ0JDQUMxOUU0NDE4NDUKLToxMDNDMzAwMDQ5NjBGRDREMUZDMkJFOEJCNjZCODRGNTNGMzU5M0I2MTAKLToxMDNDNDAwMEEzNzAzNUFDNjdGQUIwODk0NDEyODA2RjVCQThERDY5NTgKLToxMDNDNTAwMEE0NEJGQzFCQ0U2Rjc3Nzc0NENCQzNGNDdGQkI5RDM1NjEKLToxMDNDNjAwMDEzMDE0RUY5MkZCMjBGRThFMzUxRTgzN0M2NEVERUVBRjIKLToxMDNDNzAwMDY0NzJGQzRCRkI5OTMyNDZGODk5QjYwMkZFOUE4RDAzQUEKLToxMDNDODAwMEZBNEEzQUZFRjU3RkY5MENFNUZERTJBNUFGRTEzRTgyODYKLToxMDNDOTAwMENFNjMzRUIzQUI0RDBBQzhBN0M1MEYxRUMwRjc2MkRGQTcKLToxMDNDQTAwMDc2MkFEMzhBRkJCNkQ3MzYxODU4RDlBMUM3RjJBOUNENDAKLToxMDNDQjAwMDZDNUZCOUI4NTcwQUMxM0NBNTU5MTc5MzJBNDEyRjZDQkMKLToxMDNDQzAwMEQ2RDkwRDY0MjQ1RUUzRjFGOEMxQTZCNzEzQzBFRkY1QjEKLToxMDNDRDAwMDAxMjIxREY2N0IxMkIzQzdFQ0FEMDlCODdGNTA1QTEzMTEKLToxMDNDRTAwMEMwQkUwQ0FDQkZGMTQzOTA4RjhCMzc2QjNENjAyRjkwMDMKLToxMDNDRjAwMDdEMzZGNENGMkNERTdDQzNDNDg1NTZFOEU3RDNBNDRBRDYKLToxMDNEMDAwMEYwMTM2REI5MDEzQzU0RDBDRTE3NjI3RTlFQzhGNUY0MTUKLToxMDNEMTAwMEJEQkNFNTZBMDVGOEYxRDA2NjA2RkY2Mjg3NzEwN0QwODEKLToxMDNEMjAwMEQxRjU3RkQxMjI3RkM5MUFFMjA3M0JCOTVCRUY5RDA4MkQKLToxMDNEMzAwMDdDQUQ2Q0RBM0UxREQ2RTc4Mzk5RTkxQTZDQkY0QjIyNDUKLToxMDNENDAwMDc2QzA4QjYzNjkwQUJDNUYyQ0M5M0VFMEUzODZGNThEQzMKLToxMDNENTAwMEI1QjE3NjRGOUQ5M0Y5QzcyQUIzOTdBNTBDNTg5MUFGOEIKLToxMDNENjAwMEU2ODAzRTZEREU0Q0Y5MDhDNjlGRjVERUVGRUU3MDBEODUKLToxMDNENzAwMEYzOTUzNDZCRkQyRDUzQTFGRjY3NzUxRUUwQkIyMTdCQ0UKLToxMDNEODAwMDY2RDNCNzkwQkVFMDJGNENGMUI1OThFM0VCQUJGMjk5NTgKLToxMDNEOTAwMEMxMjJGOEE0QjUwMEU0RUFFMjE1QUQwNUY2NTFFQzhDQjkKLToxMDNEQTAwMDIxM0VEOTQ0Rjk3MjMyMjFBNzlEMTJGOTAyRkM5MzE5RTAKLToxMDNEQjAwMDRFRDVCRTYzQUM3RDlBQjU1MDgzN0FDNkU4MjFERUVENjAKLToxMDNEQzAwMEY0OTk0QUI3QzlCMDFGQjcyNUM5NTg2RjRCRDIyMzdEQTQKLToxMDNERDAwMENCN0ZCQTc3RTc2RkU4QkM5RTc0RkEyRjgwQkVDQzI2MDMKLToxMDNERTAwMERFNjJEMDZCNEFENDVFNDVDRDVBNDAzNURBNjE2NDEzNDkKLToxMDNERjAwMEIzQUY4OUNDRkM4NUVCOTJDOThFNTUzMUZCNzM1MzEyNUUKLToxMDNFMDAwMERCNEY1MDM5RjEwNUY0NzNFRUREM0YxRjA2RkNCNjY0NUQKLToxMDNFMTAwMDdEM0MwNUVDODVDMEM1Q0ZGNEUwNUZCM0Y2NEIyOERGRjEKLToxMDNFMjAwMEFEMUUxRjAxQkEwOUY0Q0YyNDBCOEE4NkU1NzJDMEMzMDgKLToxMDNFMzAwMEY0NDZGQ0JDRTYyNEU5OTgxQzc1NDVCMTlGNEE5NzgyN0MKLToxMDNFNDAwMEU1NkUwNzQxN0FEQUI4RDQ4Q0Y2RkU0NjU3QzgwNDQwQ0UKLToxMDNFNTAwMEZGQUQ3QzJCRUNBNzQ2RUUwRjM0NkVGQjg1NTcwQjc0NDEKLToxMDNFNjAwMDFFOTJFQ0UzQTFBQzMwRkUxODZDOTgxN0QyRDI3MTNFRDIKLToxMDNFNzAwMERDOTYxN0M0RjI5RTRBOEY5NkQ2NTlCN0ZERTNDQTVDMEEKLToxMDNFODAwMEMwNTM5RkNFMDNFREFEOUU4MTA0OThERjg3REI0RTI0QTcKLToxMDNFOTAwMEMwRkMxQUI2Njk3MURFMERBMTRGNTIxNjE2MERDQjA5ODIKLToxMDNFQTAwMDlEQzY1RjkwMDQ3NjgyNURCMkMyRjg0MjVFN0NCOEVEM0EKLToxMDNFQjAwMEQzOTQwNTU2RTYzRjQwN0Q1QTNBM0E1RUNDQ0VDQUM5MDUKLToxMDNFQzAwMEYwRkRGNURGNjRFQjcyNjY5NzIxMDQ3MkYwOEM4OUY5REUKLToxMDNFRDAwMEY3NDVCQjMzMzZBNkZGQUU0QjEyRkVDRERFMkNEMDNGRUUKLToxMDNFRTAwMDQzNjU3OUEyMDZFNEM0RjdFRDZDRkUyRTdENkYxNkYwRjMKLToxMDNFRjAwMEU1NDc5MkJBOUYyNTJCQjUyNDQ0RTU1MkUzNEE4OTg0Q0QKLToxMDNGMDAwMEE4Q0MzRkYzREM0QjU5MjBGRjNGRENGRTUyNTY1RDBDNDIKLToxMDNGMTAwMDdDRjFERjg5RTc4RDQ5NkE3RjlBRjBBRkJBRjRFMTBDNTIKLToxMDNGMjAwMDE4QUZDRTYzNjA3RUNDMzFGQ0FCQTIzRDU5Q0ZGQ0E0NzAKLToxMDNGMzAwMDgzOTQ2QjgxMEVDNTc3ODMwRDY2MkZEOEJCODNDNDE4MUQKLToxMDNGNDAwMDAyOTc1QjVEM0ZGN0Q3N0FCREY5MkVEOEQ3ODhFRkUzQUMKLToxMDNGNTAwMEZBNUYwREY0NDRFMTkyRkEyNEY0Mjc1ODhBQTIyODlGQ0MKLToxMDNGNjAwMEJGQjRGQzc3RDFGNThDOTFGRjc0OUQ4REIwNEVDREM2NUEKLToxMDNGNzAwMEU4RTE3MTA0RTk0MzBGNzhEM0I3NTg2NUQwNTcyOUVEQ0MKLToxMDNGODAwMDhDQkVBMkY3NkI3MDlGRTUzMjI3NEM4MUI4ODAzRURENzYKLToxMDNGOTAwMDZEMDVGOTc2N0Q4MUI5NDM5MzA4RUZCMzQyRDAzRTMzODYKLToxMDNGQTAwMEJEMTBCRjBCNTYzMUZBMEZBNjEwRjRDM0E1OTE1NjA5RTgKLToxMDNGQjAwMEZEQjQ3NkU2RTdDRkE4MjBGNjU1QjRGOEIzMjQ2NkU3NUIKLToxMDNGQzAwMEI4ODk2N0JEMzYwRkQ3NUZDMjM4MDdDNzhCRDAwRjQwOUYKLToxMDNGRDAwMDQ3MjAyRkNGNDg0NkE0MjNBOTVGNDI3QjU0QUJFOTlEREQKLToxMDNGRTAwMDA3RkQ4RTQ1NTcyQkM1QkE3MkJBMUEyQUZGOURFOEVBMUIKLToxMDNGRjAwMDQ5NDFDNzIzRThDQUFGMjA1REI5OERBM0QzMTVGNzIzODQKLToxMDQwMDAwMDVGNzY3QjEyRjRDMUJFMzY5NUUzNkIyRDk3M0ZEMUZCRjMKLToxMDQwMTAwMDhEQzJBRjJFQzE3QzZCNzk3RkI1NDY2QjU4MEI3QUM0Q0QKLToxMDQwMjAwMEEzRkIzOEQ2M0ZCQzg5REFDNUIwN0Y0QTAzQkI5RTNFQUUKLToxMDQwMzAwMEM3QjVDRjU3NzBERDQ4NjQwMEZDMDg5NkFCOERBODJGM0MKLToxMDQwNDAwMDFGRDM0NDcyQzA4RTQ5OURENEJBMUJFODIzNzU1RTUxQkMKLToxMDQwNTAwMDQ5M0JFRTBCMzMxQ0EwMTc0MEQ3QTI3Rjc0RTkzNDFGRjUKLToxMDQwNjAwMEIzMjM1ODFDMjgzQTUzOEZGQjlDOTYwNzJCN0RDQzhFOEMKLToxMDQwNzAwMEE4NDE3RTA5QUMzNjI5QTAwN0E3RjVFNzJDMDdGQTA4NjYKLToxMDQwODAwMDJDMjMxRTAzRDI3MUNGODY0NUUwQ0Y5RDZERjU4MEFDMDkKLToxMDQwOTAwMDEzRjEyNUIyNTJDRDc3OUQxMjhCNTMwNTZGMjIxODBGNjUKLToxMDQwQTAwMDFCOEUzMzBENkNGOTIxRThGRkM2MjJGNDlCMENGOThGQUYKLToxMDQwQjAwMEYzMDlFQThEQ0I4RDQzRDZBRDM2MjFERTQ1RkM2OEQwQzEKLToxMDQwQzAwMDQ2MTE3NDI1RkE5MUIxM0Y5MjY4NjQ3QTY4QTQ3QzQwRTUKLToxMDQwRDAwMEZGNzM0QTA1MTE3RkVCQTE5QzJFQ0EzQ0RFMjNGODVGREIKLToxMDQwRTAwMEM0QTM2QzQ1QkUxQ0IwQzgyQjlDMzlCRjMyNDM5QzA0OTIKLToxMDQwRjAwMEZDNzc2Q0IzMTY4NEZEMDBGQThENTkxOUREQ0E0RjY5M0YKLToxMDQxMDAwMDI4MjBFOTUwRkI5RkFCQUEzMzYyQ0FCQ0ZERDBGN0MxOUYKLToxMDQxMTAwMDU1Mzc1NzVGOEJGQTc3QTgxRUMwQTY3QTU5OTRCRDI2RUIKLToxMDQxMjAwMDA1RTI1NUMzRjUzMkI1ODM4RDdEMTJGRkJFRTJFNjFCNzUKLToxMDQxMzAwMEE4QUExRTk0QzRGODdGRUVGNDgyMUZEMTQ0NTRFM0M1QUMKLToxMDQxNDAwMEMyMjdDN0Y1QUZBM0ZENUIxNURFM0UzOEVFMjZFOEVGQ0MKLToxMDQxNTAwMEE5MTI1MTdFQTBEMzRCRTE1QkFCNTNGNzg3MjhFNURGNzMKLToxMDQxNjAwMDQzNDE4Q0Y3N0Y1MzBFQUY1QTlEMzE2QzFGNTA3QkUxNUEKLToxMDQxNzAwMENGNDk2NUMzNzZDMkEzRUZENTc2NUQ0OUM3QjJEODNGQjQKLToxMDQxODAwMEQ1ODNGRTE1RkEzRUUwOTJEMDBFODlFN0Q3MDQ5N0Y0NjYKLToxMDQxOTAwMEQ1RUM2QjY1ODQ3RDlERTA2MkY2RjU3NDYwNDlCQTJGQkQKLToxMDQxQTAwMDQxRjkxRDU4RTYyMzYwREY1MkJCQzRFOTQyQkJFNEUzOUEKLToxMDQxQjAwMDUzMDc2OEZEQjk1OTlGMUYxRUE3NDBCQjdCRTZDMUJFRDAKLToxMDQxQzAwMDJBNzA1MTQ2RjkxQkQ4QTkwRDQ5OTQ2RjhDRkRDQ0FFQ0QKLToxMDQxRDAwMEE2RkExQ0UzMDU4MjdFOTZEODM5RkQzODgyMDRGQzk3NDYKLToxMDQxRTAwMERERkJBNDMyQTA3NzQyNUFCMzZFQTM2QkY5MDM5NzM3NzUKLToxMDQxRjAwMDEzQzdFMUZCQ0RGODc5OTdCQjk4NUYyMDUwNThCNUExNjQKLToxMDQyMDAwMDAwRkFERjI2MTFCMDE3NTYxNTFFNEY1OTgwRkJBOTYzMUYKLToxMDQyMTAwMDI5MEI2M0JFNkJFQzdCMEFGMUQ5Qjg1MzM3MkExRUNCNEUKLToxMDQyMjAwMEE5RTEwNDc4NkM3OUY5NDUyRkM4OEQzMzIxMDk2NTQyREQKLToxMDQyMzAwMDgzMUNFQTA0QkJCNkExNDEwMzE2MjEyOTBEQ0RCRjAzOUYKLToxMDQyNDAwMEUzMUY3M0Y1NjQzQzlENUYwNkQ3Nzc4MTlEQjcwNkE3OTIKLToxMDQyNTAwMEMyQkNFOUJGMTI3REI1RDFCNzA4RTVDNEM2Qjk0NjJCQ0IKLToxMDQyNjAwMEM2OTEwQUVCRUU0MTNDRDhDRDVFQzBDM0FBQzJBQTM0QzcKLToxMDQyNzAwMDE4QTc2NUU2NzQzQkM2NERBODNEMDdGNTJEMEY3RTA3RDAKLToxMDQyODAwMEZENDUwMkFFNTU3REJBMUFCMDc3Q0FBOTVERjcwQjBBOTMKLToxMDQyOTAwMDc3QTY3MzQ2OEQ4N0YyRjUzOEVERUVFMkZCQUMxMDU3NEEKLToxMDQyQTAwMDFGNUQ4RUZGQkY2NDQ2MTcxRDkyMkZGOEVENTJGNDhGRUQKLToxMDQyQjAwMDkyNTg3RjY3NzYxRkIzMUY2RjcxRTk1NUZFRjE1QjVDMDMKLToxMDQyQzAwMENDQUVCRDM2MTg5OTA2RTRCMjVGMUVCMDgwNUQxRDIwRUQKLToxMDQyRDAwMERFNEY2MDVGNEQ3QzU2NjUzQkFFMTM5MzVGQUUzNjA1OTcKLToxMDQyRTAwMEZENjY0NkQ3QzA2MzU3NDJGREI1MzJFRTY3ODgzQ0YwQTUKLToxMDQyRjAwMDYzMThGNzVDQTdDQkIzOEE3MDNFODBGMjgzNDUyMTkwQTgKLToxMDQzMDAwMEM3RkI1Q0ZFRUZDMkZBOTY3MzdCRjVEQ0NCMzcxNjgzRjYKLToxMDQzMTAwMDdGNTFEODVGOURDRjk5NTA2Rjc2REE5NDI3NkI0MDRFQ0UKLToxMDQzMjAwMEZFNDk2Njc5MDNDNjY4NjQxQUVENjdDOUU3NEUxQ0I3OTMKLToxMDQzMzAwMEQzMTRFQTg0RjUwRkY2NjhCMUJFQzlFQTVGMDRGNERCNzIKLToxMDQzNDAwMDc4RUJGQTI5OTg4NzYwMEQxNTgwMUVENUI5QkEwOEQwODgKLToxMDQzNTAwMDMxRERCRUEwMUZDNUU4RjIxMTg4MjM0RjBCQ0U5NzI1OTMKLToxMDQzNjAwMEQwMTc3MTc2Q0QzNEYwNjNFMUJFQzU4NTdFREMyQUNFRjAKLToxMDQzNzAwMDFGRTMyOTE1OUMzMjIyMkI3NDdDOTEzNDZDRTdCQ0Y5MjUKLToxMDQzODAwMEU3RDkzMkJDMTRGNjhGQzZDOEZDRUVENTczQ0QwNEVDNjkKLToxMDQzOTAwMDVDRjI0OEY0QjAwNkZDRjhBRTA4MDE3QkI4Qjk1N0MyMkQKLToxMDQzQTAwMDcxOUEwQjVGRDBDM0ZFRTVFRTVFQzZERjAxQkVERkEwRjMKLToxMDQzQjAwMEY4Q0JDMjc4OTRDQkMyRUQ4MTBFNDY2NzI0NzI3ODFDOEMKLToxMDQzQzAwMEUwRjk3OUI2OUU4NEQwNzYzMTdFNTc0Mjk2MzM3OUMwMzMKLToxMDQzRDAwMEZCRDNGM0Y4NDMzM0Y3Mzc1MTREODhGNUFCNUNDMkNFQ0UKLToxMDQzRTAwMDU4QTE4RTVCRjA3MUQ3NDkxMUFGMTZGMDVBMkNBOUZDNzkKLToxMDQzRjAwMEU0RTJEOUMzQkY0RjNDMTg5RDBFRkMxQkE1RjQwNTdFMUIKLToxMDQ0MDAwMEE3MEREMkNDN0I1RUE3RjNEQjUwMzZDOTAzQTY5ODlCRTEKLToxMDQ0MTAwMDkyOTNCNjA0REU1MzUyQTQ3ODJGRURGQjY0M0FEMDBEOEMKLToxMDQ0MjAwMEE5MjFDOEFGMkQ3RDk1REE2NjJCOEJFQjYwNUU4Q0E1M0MKLToxMDQ0MzAwMEI1MDdFQTUzRUYyQTQ0RkQwQzcxOTM1OUY0RkRCMzFDMDAKLToxMDQ0NDAwMEFGNjk1NkU2Qzc3M0FGMDhFNjQwMUMzNEYxQTBFRjlFOTMKLToxMDQ0NTAwMEQ3NjFGQzJCQ0NFODg3NERBNTZCNjM3M0UyNzMyNUY4MUQKLToxMDQ0NjAwMEJERENBNEY4MDBFODY3NzdBRDUyMDJGMDg4NzgxRkM0N0QKLToxMDQ0NzAwMDBCNjcxNjBERTdFMzM4M0Q5Mjc3MkI3REVFNzYzOTk4ODIKLToxMDQ0ODAwMERGQ0U0MDZBMDA1RTc4MUZCMjBFQzcxRkMxOUYwN0UzRjAKLToxMDQ0OTAwMDQyN0MwRjlFRTdEMkMyMzJGQUZGQzlDMDk2RURCOEVGNTgKLToxMDQ0QTAwMDM3NjAzRTQ4NkRERjFCRUY4MEZFQUQzNTkyNUU4Q0M3RjYKLToxMDQ0QjAwMEM2RDkyREQ1ODlCN0JFMDJGNDNGNzhGNkQ0OTY4NzAxQzgKLToxMDQ0QzAwMEFFREJGNjdBMzBFRjI1Q0UxRUI5RkU5QkNDM0UzRkIzNzUKLToxMDQ0RDAwMEREQTIwMDNGNkNFNTcyOUJEQThGQzgyN0MxNUQ2QzNGOUYKLToxMDQ0RTAwMDE5NkY0NzFFNzVBOUY3Mjc0M0U1QUZERDhFNjRGMDA1MDgKLToxMDQ0RjAwMEI3QjMzQzBCMjFERjAzN0NGRjM3RDg3MDNFMDFGNEQ3MDQKLToxMDQ1MDAwMEJGMERDMTEzOTcwRkIyOERFNzgzRjQ4RjlFMEZGMkU2QjQKLToxMDQ1MTAwMDBFNEIxMEU4RTE3Q0FGMDlGRDkyMzI4RjdCOURCNTQ1RDMKLToxMDQ1MjAwMDFGMDAyNDc1MzgwRUNGMDE3OTFCNTg3MkU2RTcxQUNBQUUKLToxMDQ1MzAwMDdGNzIwRjhCMjNDOTEyOEYzM0ZENEE0QjU4NUNDQzZCQjMKLToxMDQ1NDAwMDA3RkY4QjgwNUI3NjRDNzc3QjhCNDAzRUIyNzkzNzcxNkYKLToxMDQ1NTAwMEJGNTE5M0IzNDA2MUYxMkU5NjM3RDQ5NDEwMkUwMDdCNTcKLToxMDQ1NjAwMEVBNTVBRTg3OUFDQzJDNUUzNUU4RDA4NzYxNURBMzI2RUMKLToxMDQ1NzAwMEZGMUY1RDE4RDc2MkRGOTM1RjFBOTREOEI4NTY0Rjg4MzMKLToxMDQ1ODAwMEQ5NzUyNzBBMzU2MTNEOUQ2NzBGRDgwN0IwNkVBQjU5QzUKLToxMDQ1OTAwMDdDNkIyODlGNjBCRkExQzdDMEUyOTA1ODFFRUNDQzQxNDUKLToxMDQ1QTAwMDM5NTkyRkUyNTZGQjk5M0ZBRTlFQzdBNzRFQ0M1QUY0MUQKLToxMDQ1QjAwMDBDQTQ1Qzc0NDhBRDM1QjAzRkJCQjBBQTEyRkRFODBGNDcKLToxMDQ1QzAwMDNDMzkxMzlGRjUyQkQ1N0VGRjQ1RTBBN0NGMUI4RTIzRUIKLToxMDQ1RDAwMDBCRkY3QjFERjFFODk5QkQzQ0VDNDdENDUwRkI0NTU5REUKLToxMDQ1RTAwMDI5NTc4MUJFQ0MyMUY2MTUyMEZGOTUyMDVEQURBQkU5QTIKLToxMDQ1RjAwMEIzODMzRUMxNjg5NzM0MTJEODM5NzJBN0NCMENFQkZCNUEKLToxMDQ2MDAwMDY4ODcwNkY1NTRCMDQzRTM4NTc2MDJDRjM5QzlDQzhGNkQKLToxMDQ2MTAwMDc0NEQzMkYzNkJEMEE1MEFDMTM4RTJEOUExRTM3MTA3MUEKLToxMDQ2MjAwMERFREY3MkEyMDlDMzUzMjNCMUU3QTM3NkI5NjYzNDdERjYKLToxMDQ2MzAwMDJERkFFQkQwQjUxQUMxNEYxN0NERDRBMERGRkI4MkRFMjcKLToxMDQ2NDAwMDNCMTdGREM2Q0UwMjAyNzk1NDFEQjZENjk1MzVBQzFFNzkKLToxMDQ2NTAwMDc5RTc4MjI5RUFDM0ZBRUI2NDY2NDgxMkM1MDlGMjMzQTYKLToxMDQ2NjAwMDM1OTlFN0NCQzVFMTZENjE5N0JBMUMxRjhGNjkwQ0E5MUQKLToxMDQ2NzAwMENCRjVDNDNGMjEyRDhGQzUwRjYyREZBNzI2MzNGOTc1MTcKLToxMDQ2ODAwMDYxNTUwRUM3QjcwN0YzRTNDNEZDOTc2NzMwQkM2OTMyQzYKLToxMDQ2OTAwMEQ5MzMzN0IzNkEyRUQwNDEyRUM0OTc3M0UwQzlGQ0FCMkYKLToxMDQ2QTAwMDc0MjYwODdGRUU3NTJFMDlFOTIzMEVERTBFMzBEQTgwQkYKLToxMDQ2QjAwMEJFM0E1OTNDRjQ2Rjg1M0YxRUVFQ0FFNDE0QUUxRkJDRUYKLToxMDQ2QzAwMDZFODg1RkQ2REJGNTE4OEZCRTVDM0Y0OTVEQjI1QTBFMkYKLToxMDQ2RDAwMDBEOTVCRkZFRkQyQ0RCMjc3NTZBNzk5RThEMURFNTUwN0IKLToxMDQ2RTAwMDlEOURDREU1ODRFNEQ5MTE4NkY3NTY2QTJGQzAzQzNBRUEKLToxMDQ2RjAwMEI1MjU2MDNGNENCQkQ1OEFGMzY4RDk2RjQyM0Y3MEYzNTQKLToxMDQ3MDAwMEIyODEyQ0QwRTMyRDU1MDMwNTEwQjc4OUM3MkY0MDJCNUMKLToxMDQ3MTAwMDBCRjk0NURCRDVCOUU4RkUwM0VDODREODc2M0M1RjRCNUEKLToxMDQ3MjAwMDFENjdGNUZFMjBCOTBDRjYzOTI3NzZCRjAxRkE2QUI3ODYKLToxMDQ3MzAwMDA5RjUxNUZEQkYwMzA2RjBCM0JDOUM4M0Y2Q0M4NzM2QTQKLToxMDQ3NDAwMDdGMUJCNDBCOThDMzVCOUVDRDAxQkI4NUQ5NERDREZEQkUKLToxMDQ3NTAwMDg2MUVCMDBCRUIzQTYyRTI3Q0YwOUZENUVBQjgxRjU5OTcKLToxMDQ3NjAwMEU5NDRGRjNCRTk1NkJGNkZEODE0RjdERDg4Mzg2MDE3N0UKLToxMDQ3NzAwMEFFRjMzQUJEN0YyMkYwM0JENTNCOTg3RjcwQjY1MTgzQjQKLToxMDQ3ODAwMDc5MDNGNTVBQ0YyMjkwQjc2NzRENkE3QkZDQUM4REFEQUIKLToxMDQ3OTAwMEQ3OTZBMTc1RjZBMEJEQjU2NUNDNzVGNjE0QzAzQUQ3MEQKLToxMDQ3QTAwMDZCODgzRkI2OUY2NjU4NjdCQUJFNEQ3QzlEQ0ZCRTc4N0EKLToxMDQ3QjAwMDc1MDFBQ0YzQzdCQkFGMkU4MDc1NUVBN0VCRjIwMkRGQ0QKLToxMDQ3QzAwMEI0MzlGQzVCOTM2OUJGMjc2RkYwQTEzRDI1RjI1ODJGRTgKLToxMDQ3RDAwMDk3MUVGNzI0QUJGRDJCNDNFNUZGMjFGRkNBNThGQTMwQTMKLToxMDQ3RTAwMDNDMDQ4NzVBMUZCQUY0NEEwNkM4ODMzQUEzRTFCRkQ1RUUKLToxMDQ3RjAwMDhCRjAzN0FBMUZDRjY4NDA3RkM3RkUzRjdGQkE2NjA3OUUKLToxMDQ4MDAwMEM4ODE3RTJEREEyM0EyQkZGREIyM0YwRkVDQTFGREVGRTAKLToxMDQ4MTAwMEI4M0Q0MTY5RUNGRTFCQjk1RkQ4NkQyNDQxRjBBQjg4MEYKLToxMDQ4MjAwMDdEODBCMDI3RTNFNUYxNUI3QzNFMUYyNTdCNkYwMEJCRkQKLToxMDQ4MzAwMEU2Q0JGQThEMUJGODNCNjNFODUzNjZFNzZFOTMzQ0NDRkUKLToxMDQ4NDAwMDZGREM4QjdFRTQ5NjdERjNFREUwMjczRTFENjI3RUUzMTgKLToxMDQ4NTAwMDk2MTc4QkQxNkZEQzE4N0EyRDBDNzk2NUE0NUZCMkMzRTMKLToxMDQ4NjAwMEZFQTM3MURCQjEwNEM4MDcxMEZCNUNCQUFGM0Q5MzhDQUIKLToxMDQ4NzAwMEY0QThERUVGOUUwRTlENDg4MEZDMDEwQTc3MjVFODcxQzIKLToxMDQ4ODAwMDhCMkJBQTA3QkE2RkExRkIzREM4MjM2QzkxQTM4N0ExMEMKLToxMDQ4OTAwMERGMTYxN0MxM0M5N0QyM0VGNUZFNEZDNDc5MzdGQUY0QzQKLToxMDQ4QTAwMDI4NzczN0Y2NEIyMTkwRDcyOTdBN0Y0RTA2RTgzNTkyNDQKLToxMDQ4QjAwMDYxQzc3ODIwRTdCMzhCQzlERUQ0OTRCMkQ4RjhCQUY3RDEKLToxMDQ4QzAwMEYzRTRFNEUxN0NCMDgxMEQ4OTQ4QkYwMzNBRTJCNTgzQUIKLToxMDQ4RDAwMDNDREI2MEUzRjI0QzQ2RjlGNkM3NEQ4RTEwQ0IwRjYzMUMKLToxMDQ4RTAwMEVERkYxODYyNzY0MkEzQzgwQjkzNDk1OEE2RUJCNTY4NTIKLToxMDQ4RjAwMEI2Rjc1RDU4NkY5MEY3RTEzODc5MUY1QjE2NzFGQkJCMTcKLToxMDQ5MDAwMDQ5MThGNTUyMzMxOTE4Q0EwRjhCNkQxNzFGRDc4Nzc4QkUKLToxMDQ5MTAwMEI4QUExRkQyNUFBQzgwMUZFQzRFQUIwN0UwODFGOEI4QTIKLToxMDQ5MjAwMEJBM0VDOEY2RUI5NDFGOTY5NjBDRDNBRjU4MDc0MUJGMUEKLToxMDQ5MzAwMDJEREMwRjFENjgzOEZFMDhEMDZGQTA0RkIyODM3REQ3RTUKLToxMDQ5NDAwMEU0NjFGNERCNDRGNzVCOTA0NzFCQ0ZFRkE0NTc5RDM3M0UKLToxMDQ5NTAwMDNBMTZGRjk3QTZBOEY1RDE1MEY5RUZFNDVGQkQzRTQ1QTIKLToxMDQ5NjAwMENERjc2MkZFQzI2RjNGMzRDRjdFODlGMTY1RENCQ0UyRDkKLToxMDQ5NzAwMEY3QTlGMUZFNzZCMUNGQkM1Qzc5MzgyNzQ1MkQwRjg3QkEKLToxMDQ5ODAwMENBN0Y2Nzc5NTgzN0I0MkVGMUYyNTAxRENGRjg5QkU1RjYKLToxMDQ5OTAwMEUxRkY3MDVDRTM5OTdENEYyN0MwQkUwM0VDNzhEOEE3OTgKLToxMDQ5QTAwMEFDRENBRTYzRjkxMzE0RkRCMUYxRTJFOTVBQUI5N0M1ODMKLToxMDQ5QjAwMDRGQjVBMjVFMUQ4NzU3QTZGMzM4M0NFM0VCRDc1RUQ0MTQKLToxMDQ5QzAwMEUyQkEzNUYzMzg3MUYzM0U5QjA3OUEzNjU4MTc2MzlDNjkKLToxMDQ5RDAwMDM2M0U3RUJBODRFQzlFMEU0QjE1MUY0NzZEMDI3RUNFOEUKLToxMDQ5RTAwMEJCNzQzQzc1NzUwQThCOEY1MjU4NzIyMDZGMjEzRTZGRDUKLToxMDQ5RjAwMEVCMzVFQkE3NDlGRTk4NzVBRjJBQTIxQjgyNTFFOERCODUKLToxMDRBMDAwMDI4MDc4OTMzRTZGREM2MTQ2NjU3QkZDNkYzOEJEQzdBRTgKLToxMDRBMTAwMDc2OEU2MEFEQ0RFMjg1RkQ4QzVCQzNGMjlGN0VFMEYyQzkKLToxMDRBMjAwMDZEODJCQzE4QTNDMkYxRkFGMkVENDQ0M0YxRjI4Q0FFRjAKLToxMDRBMzAwMDE3RTU0QUIwRDlFQTAxMzkyOEZDMzdBMkZGOEIzQzVFNjIKLToxMDRBNDAwMDcxRDlGQTNGOEVERUY3RkMwRkQzN0IzQzdFRjY4QkYxRkIKLToxMDRBNTAwMEZFRDZCOEREN0E4QTFCMTU1RjEwQTRFMzIzMTA1RkNBNjcKLToxMDRBNjAwMDE5NDlCRjYzRjUzMzE2MUQxRjRERjExRDQ5NjE3NkZFQ0YKLToxMDRBNzAwMDE0Q0M1N0I4NEMzOTYzMjk4RDlFMDAzRjExRDk2MzUwMkYKLToxMDRBODAwMEMwQUYwOTdFMTJENDhGQUJEMzc4M0VBQUE3N0MyNkU2QUUKLToxMDRBOTAwMDY5QjM3MzI1RTIxQ0NFNTg3NkU0MDc0M0VCQzNFQ0M4MzgKLToxMDRBQTAwMDBGQzY1QzlGMkY2NzQ3REVFRUYwN0QwODc0NzZCMkQyQUEKLToxMDRBQjAwMDhCRTcwMTFFQjU1MUY4NjE3RkY4OUM2MUQ0NzMyRUUyM0IKLToxMDRBQzAwMDNDQzZBNUZDMkQ1RkM0RDFENTE3RkY0QjcyRDQ5MjNBREEKLToxMDRBRDAwMDk2NURGOTc1Q0JEMUNGMTNDMDdGM0E3NjNGNDE5RUZGRUIKLToxMDRBRTAwMDE5NDFCQzQ1Rjc0OTY0NkI4QzVGM0IxMDYxRjk3QjE5MzgKLToxMDRBRjAwMDFDNUVGMUZFM0ZGOEJFQTEyMUQ1OUI5OTRBREY3RkZDRTkKLToxMDRCMDAwMEFFRDE0ODEyQTk5RTJFNjU3MkIxQzU2N0M1Qjg0MjRCOTkKLToxMDRCMTAwMDJGQ0I3RjY5NTk0NjUwOEVCNzgwREZCNDA4RkM4OTMzQUMKLToxMDRCMjAwMDA5RDg3RDRGM0FGRDEzMjA4RkVFRDFGN0FDNDE2RDIyQUQKLToxMDRCMzAwMEY4REI2NzExQjBGM0NFQkRDQkNBMzM5Q0ZFQzk5ODY3RDIKLToxMDRCNDAwMEI3NkMwMEUzMThEREIzQ0U2MDFFNTZGOTE3OUYzRTUyRDYKLToxMDRCNTAwMDUzOEFGMEEyM0ZDMTY1NTA5RjY3QjkzRDk1QzkzM0YxQjMKLToxMDRCNjAwMDlDM0Q4NDZGMkZGQUYzM0Y2RTYwRjlEQTAxOTdENzBFMDAKLToxMDRCNzAwMDdFMDlFMTBGQjcyODExOEMyQkI0RUM2MUM2NUJCOTk2QTYKLToxMDRCODAwMENEODdGQzMwMDNFOUE5NjU0RjY1MzFGODRENDlBRkE5RTAKLToxMDRCOTAwMDE4RUNEREYyREY1QjcxREZGN0YxODNFOTk4MjdCMUNGMjUKLToxMDRCQTAwMEU1QUYwMjdDRDg0QTQzMzc4MTdEOUE0REM3MDFCQkY3RjgKLToxMDRCQjAwMEUzREQzNzE1MDNEQzQyRkVBRDAzQkYzOTFEN0Y5RDREOUMKLToxMDRCQzAwMEVEMTcyNzQ2OTY3N0JGNjQ0NzI2RUUzMzlCQUNGRTVBMTcKLToxMDRCRDAwMDk4RkYzQTEzODMyM0I4OUQ5RjRGRTFGRUYyNzhGRTE3QUEKLToxMDRCRTAwMDdDOUZBQUQ1RTAzOEE5REYzNTYyOUM1Q0M4ODU3NTNBMDAKLToxMDRCRjAwMEUyMzdFNjBEQ0I5MzEyOUU2NzE4NzBGMTNDQzdGRTk5MjEKLToxMDRDMDAwMDJDNEY4NTk3QUQyRTc1QkVFNzQ3QzkzNzk0MDAzQzI1REMKLToxMDRDMTAwMEE5RjI1NzhCNjc1OTQ3RTQwQjk0QTRCMjc4OTZFQTVDRTMKLToxMDRDMjAwMEEyRTUyMkIzQTc3M0VEN0FBNDI3REI0QUMyRTI1NDk0MkIKLToxMDRDMzAwMDlFQzBBRUJGMzYxQTk5MDZFN0JDRjJCQkMzRDcwMjlFMzAKLToxMDRDNDAwMEY3NUZENDIwOUVFNDk5NDczMDNFOTMyOEIxRjFGMjU2QTUKLToxMDRDNTAwMDBGNzQ0RTAwN0Y4Q0ZEQURFQjYwNDk5NTJFN0IxNUEwNDcKLToxMDRDNjAwMEY0NDlBN0VGODE1NEU0RkZENjQyMThBRkVBNUY3NDJDRjEKLToxMDRDNzAwMEJGNzI5RjA1RkQwQ0RENTk0RDk4NUY3OUVFM0Q4M0VBQ0IKLToxMDRDODAwMDdDNEVGQzMzNDg1NjYwM0U2NTZFREY2RjMxNEU2MERCMTQKLToxMDRDOTAwMDIzOEQ5QTI3RkI0NEFBMTVGOUE2MjUxODk5OEUzOTM2MzMKLToxMDRDQTAwMEQ3QkE1MENFQ0FGQjdFMUYwNEJCNDNFRTk0NDEwMjkxOUIKLToxMDRDQjAwMDBFOUQ1NzAzRTdEMzgyQ0IwOUZBRjVDNzc3REIzNUIwRjIKLToxMDRDQzAwMDVFRDkzQzNGNjY3MEZGN0Y0RUYxRTNCRTQ1QzQwNTQyQUUKLToxMDRDRDAwMDJDQkY0OTM3RjAwOEVDQzdFNEU1MDNERjBDQzI3QUVDREYKLToxMDRDRTAwMDcxNjg1QUMwN0ZBQThCQjZBMERGNjU5RjA1RkRBQ0Q5NUQKLToxMDRDRjAwMDdENzkyQkJFNDFDQkQ5MkJFRDE4MDcxQjdDRTVFRTZDRTMKLToxMDREMDAwMENDRTdBN0YzMUMzRkNBM0MxRjRBNjVGOTQ4RjIzRThCMkIKLToxMDREMTAwMDA2RjQ5OUZDMDRGMUMwQThCMjIzQTUwQUUxN0U4QTk2QTQKLToxMDREMjAwMDY5M0ZERjA3N0E0QTFFOEU5QjgyM0YwQUY0NTQ0M0FBRUEKLToxMDREMzAwMDdGMDdEMENERDBCOUE0QTU2Njc2MkU4OTlGQTdCNTJEQzMKLToxMDRENDAwMDdENkYxNzlDRjdEOUMyRkRCOTA3Rjc0RjlFODVGRUJGNEYKLToxMDRENTAwMDRFNTk4Mjc1QjhFMDYwRjk5NTJGQTRCMjc4RTI0OEZDMEMKLToxMDRENjAwMDFGQzQzQ0Q2REM3REJGNjU3QThERTIwMkZBOTc3NThDNTQKLToxMDRENzAwMDVFRTQ0RTU3MEZGODE5NUY0OUYwNjNERUVFNzUxRDYxNzIKLToxMDREODAwMDJEQzZDREVDMjc3RjVDQTNDNEVDNzdENjMzM0REM0IyRTAKLToxMDREOTAwMDkzRURDRkUzRjczNzk3RDIyRkJGMUU5MjMzNENCRjBDNjIKLToxMDREQTAwMDk1RkY0RTc2Q0JFRkUyRjRDQURGQkM2RjIxRUFGRDVFRTEKLToxMDREQjAwMEJDRkQxMkJGQkYxQjYxOEZDN0Y1Mzc5NjFEMjNGMjUwOTQKLToxMDREQzAwMEFBODZDNzYxRjZCNDRERDg0OTQxNTU5RTRFOTU5NTlGMjgKLToxMDRERDAwMDNCMzRBQUZCNUY5RjY0NDc3QTEwNzkzQjI5RURDQTcyODYKLToxMDRERTAwMEM4REI4RkZFODhBMERGNEVFNDE1ODkzQ0EyNjAxNUNCOUUKLToxMDRERjAwMEY3MDk2QThDNzgyRUQxNERCQTMwN0Y2ODFDMDk0QjEyQTYKLToxMDRFMDAwMEZBRDcwNkYwRkM2RDJBRTQxMUQxRUY0RkE0RTY2MkZGNTkKLToxMDRFMTAwMDlCODk2N0E1MTZFNUE2MjIwMUZDMjZDODNGNDkwMkI4NzIKLToxMDRFMjAwMDQzMUIxNkMxNzhCNzU5NzEzQzEzRTQ5RjI0RTEzRTAzM0MKLToxMDRFMzAwMEY5MzlEREM3RjI1NkE3MzVCMEI4NDMzQUQ1Q0Y1MDRFNTEKLToxMDRFNDAwMENGNjc3NDY5OUFBQkM3M0M1NjkxNTcyMkYyNEYwNDVFMDQKLToxMDRFNTAwMEFBMzhCRUQzMjcyQ0NBMDFCOTI4RjI1NEQ2OTkzREU1MDkKLToxMDRFNjAwMDYwMTdDMTM5NjgzOEJGMUM2QzM0RjNCQzEzRDY2Rjc3MzgKLToxMDRFNzAwMDYzMkU5RTRGRkVCMjc5MjlGMTc4MTZGOTI5RkE0NDdGMDQKLToxMDRFODAwMEE2QkI2Q0U0Mzk2NzQxMzczMUVCODk3MDZERENDN0VDNDgKLToxMDRFOTAwMEZDQUEwNjNEQ0U2M0IwNzEwNkZBMkIwNzFCMzUwNEVDNjUKLToxMDRFQTAwMDgxQUE3RTAzQTNDM0I4RjEzNkNFRDU5MzMwRjQyQjg3MDUKLToxMDRFQjAwMDRDMjA0RjA1M0Q1Q0NBQ0VBNUVCNUIwOEZFRTA4MzZENDAKLToxMDRFQzAwMDNCRjM0RTUyREUzRkQ0RDY4QkNGNDE5M0Q0QUJCRDEyRDEKLToxMDRFRDAwMENGQTFDRTAzQzlGNThEQjRGQzVBRjkxQUM4Qjc4OTY2QkIKLToxMDRFRTAwMDQ5OTQ4NDZBRDNBRkZBOTY0Q0Y1QzQ2MDcyRjQ3RDI4NzUKLToxMDRFRjAwMERGQkVFMTdCQUMzQzNFQkE0NUEyRUQ5QkQzM0U2MkVEMEEKLToxMDRGMDAwMDgxMzZEM0E5RDg1RUZGRUZCNTQxRUI1N0QwN0Y3RjI2MUUKLToxMDRGMTAwMEYxRjkxQzM1RUU2NEY0RUIzQzEyNDEzRjEyRDc3RkE1NEEKLToxMDRGMjAwMDRDM0VCQUFEN0FCNDlGREMzQzFGOTU1NEYzRkM1NDg4RDgKLToxMDRGMzAwMEY4RDA3MjdCNUEzMUM2RUZBRDQ0RDkxMzgxRkEwQzAzMTUKLToxMDRGNDAwMEIzMjcwOEUzODdGNkYxQ0M2RjZERTRGNDQwMzI4NEJGRjkKLToxMDRGNTAwMDZBMjAwOEYyQUUzREM3ODFERjBGQzlFNzNEODYxMEYzMzYKLToxMDRGNjAwMDlCQjFGMThGQkU3ODA1OUU0QjEyNzlCNjg0RDgzMzY3MUEKLToxMDRGNzAwMDVGODFGOTM2QUFGMjVBMTMzRkE3MjlEQjMzRTFCQzdCRTQKLToxMDRGODAwMEJCOEVEQkMxQkM3Q0M0RTY1Rjg4RjMwNEJFQTRGNkRENDcKLToxMDRGOTAwMEQxMUI3RTUwMDRGQzc0NzZFRjBGRjM0MUNFRERBOEE3NDEKLToxMDRGQTAwMEZCODQ1MUU0NUE1OTNBOTM2QjgzM0FFQjRBODk3RUI3QjIKLToxMDRGQjAwMEM2RTY2RjAxM0E3Q0M3MzI2RjNBMUMzMTlBOUI1NEE5RkUKLToxMDRGQzAwMDc3MDBCQ0MxRTdCNDgwRDc2NDRFMjc4RUQ5MEMzRTQ3MkEKLToxMDRGRDAwMEI1NEY4MjNDRDQ3NjEzMUIzN0Q5MkY3QkYxNUM4NDdGOEQKLToxMDRGRTAwMEI2NzQxQjg1QkI1RDYyRjI5QjdFOTQ4ODc2NTVBMTkyNTgKLToxMDRGRjAwMDA4NzFDODI2N0VFRTU1Q0JFNTg4OTZDQjkxN0Y2RTFCNTcKLToxMDUwMDAwMEM4OTdBOUMxNzg0REVGMTM1QUIwRTc3RkNCRTNFMkJGNTEKLToxMDUwMTAwMENENTE5RjlGRTg3MTMzQjhDNTczOTY1NkI5MDJFOENGNUEKLToxMDUwMjAwMEE1QUIzQTUyNEJFOTQwQUJGNzg0NzBGRDMyNkQxODM3QUYKLToxMDUwMzAwMDNFNjAyQjc3MEZEMEVGQTVFQzFGOTU0MjNFNzc3QkU2QzUKLToxMDUwNDAwMDhGNEEyMUJFQTc3NTdBRENCRTk4NzI4RjlCRDE3RjM1QkYKLToxMDUwNTAwMEI0MDNCQzU5NUE0QkMxRUZGQkI1RjU5NzQ4RkIyQkZBOEIKLToxMDUwNjAwMEYyRkQwREY1NjM2MDcwMzUxOUEzNTk3MDZFRkU1OTkzMEEKLToxMDUwNzAwMDdGM0JBQ0ZGODVGOUM3MzAyRUZDNDBGQUQxRjcyMUFGNUEKLToxMDUwODAwMEUzQTg4RUQxNUQzMDkzRTdFMzkzRUU2OTA5OTRFRTBFQzkKLToxMDUwOTAwMEU3Mzk3ODVFMEE4QkJGMUU5RUMwRkNBODU0N0VCMUZDMjcKLToxMDUwQTAwMEQxODkxMkU2MjFENkNFNjZFNzYyNkYyNjkxOEUwMUZBOEIKLToxMDUwQjAwMDNEM0E1OTY4RkRGNDhBMUNCNDdGNkI3OTlFQzhGNDc3MzkKLToxMDUwQzAwMDdDMDlCMDdFRDM2RjhGQ0EyMEY3QzdCMkU3NkU3NEVCNEUKLToxMDUwRDAwMDk0ODExODNFQkU0OTUxOTc2RjJFNTQ5N0JGRTU1MTk3NjIKLToxMDUwRTAwMEJGNURGMTk3MDlCMTY1OTNEOTdCMTBFOEY1NTU4OURGNkMKLToxMDUwRjAwMDQ3NzEwREIxMjM3RkJBQTQyMEQ4NUQ5MzVGNEFFN0U3REIKLToxMDUxMDAwMDg5NTkzRUU1NEZGOTdFRjFBNTBBODJGNTI5M0I4RDVCNzEKLToxMDUxMTAwMDhENTBDRkZERUY1QTVFM0ZEOTREOENEOTRFQzQwN0VBNzIKLToxMDUxMjAwMEU5QThDNEYzMzI1RDE4OTMyMjdCRUZCMTMzM0YzNDZEQUQKLToxMDUxMzAwMEFCQTdGREVDOURBRjIwMUZBNzU4MzVFNDlCQzBFQkE1QTYKLToxMDUxNDAwMDQ2QjRDMzA0NUZCNDlCMjg3RDUzM0M5NjhGMzM5QTgxNDkKLToxMDUxNTAwMERFREI3NTlFRjVEMDk3RDY2QzUwNDAyRjU3MjYxOEIxRTAKLToxMDUxNjAwMDZGRUQzRkM4QThENzk2OUIwQ0M0NEVDQjA3MUYzNzYzODMKLToxMDUxNzAwMEI5NUMyNjNFQzgyM0ExMjBDRTg2RTc1MTlEMjdENDBBREMKLToxMDUxODAwMEYzQTVFRDYwQkVFRDBFMTY1N0Q3OTZFQjUxQ0ZEMzdFNEIKLToxMDUxOTAwMDcxNUQwRjNFQTEwOTExOUM3RkE1OENGOUE2MUM2NkMxMEIKLToxMDUxQTAwMDc3NzQyNDdDRkYzNEU3NkJBRDg2ODQ1MThFQTVCMzdCODYKLToxMDUxQjAwMDM5MEVEMUZFQTFERjgzQkZEMkY2QTBERkFFNTBCOTEzMDYKLToxMDUxQzAwMEVBQ0YxQjI3RTBCOUE4QzBEMDc5MkY1OTAzQzAxNURBNjAKLToxMDUxRDAwMEI5N0NFODY3RTdGMjA0M0YwQkY5NDJBNTVFQkUyQjg1NzgKLToxMDUxRTAwMDMwOTAxNEY4MEYwNTNCMDVFQzA0ODJGQjAwMTFCN0NDOUUKLToxMDUxRjAwMDM0OEE3QUQ5MEJGREE2MERCNTY3RTdFMDUyNzg5OTU2NDcKLToxMDUyMDAwMDg1MzUyNTYwQTdCQ0YxMjdBMEMzQjFFNDQ1NjExQTkzOTkKLToxMDUyMTAwMDEzRTIyOUU0QzUxNkMzQzM0NzZBQUYxOTZEM0QwQUVGMEYKLToxMDUyMjAwMEM3RjIwQzlCOURBREM3ODQwQ0UwNEJBRDc5NDIwNkU4RkMKLToxMDUyMzAwMENENzY4NzQ3RjFDNTk0MEJFOTc2NkFBRTEzRjA0NURCNkUKLToxMDUyNDAwMEQxRjJBRDM1QzdGMkU1MThGRDU0OThDNkU0MDA2REU3MUMKLToxMDUyNTAwMDREQTJGMDFFMzQyOTE5QzBCRkEzOENEQkNDQzZCNTdDOEYKLToxMDUyNjAwMEJERTNCQUU5QjhCNERENDExQjFEOTdCNkRCNjYzMjg0RjUKLToxMDUyNzAwMDM1MDlBMzhENUZBMUMwNzg5NzFBOTdBMjFEOTEzRjgzMkUKLToxMDUyODAwMEFGMDNBNTkzMjBGOEMxMEVEQTM0NDhBRjMzNzhCRUYyRUQKLToxMDUyOTAwMEMxNjQzNjFFMjk1NEU3RkZFNDlCRTlGODk4NUZBNkNFNjcKLToxMDUyQTAwMEY3Qjk1MURBRDQwMTdBRkE2OTUzQzI1NkEwQ0YzNzM4MjgKLToxMDUyQjAwMEREMUNCNkZDNDMzRUQ4Njk2RkNDMkIzODg0NzIyNjcxNTYKLToxMDUyQzAwMDc5MDcxMEQxMENEMjhCRjI0NkM4QzEwQjY5QzdDQUExQUQKLToxMDUyRDAwMDRDRTVFMThENjk3NERFMEZFNDFFOUQwNzlEMUY3MjNDNTUKLToxMDUyRTAwMDlEOEZGNkE1RDk1QjkzNTYzNjEyN0U0MTlGMDI2RUEwMjQKLToxMDUyRjAwMDUzRTA4QjIxM0E4RDgzNUZEMDFCQjlBNTE3MTMyNTM3NTcKLToxMDUzMDAwMDUzM0IxNzlFQzJFRTI1QTQ5NUU1QzUyQjk5QzNGM0EzODUKLToxMDUzMTAwMDQ0M0VEREQ4Q0FFNkQxMTg0NEI4NkY3NEZDMThGM0U2RjEKLToxMDUzMjAwMEVFMThFN0ZGMUVDMDM1RjdDQTRGRjBCRTIyRTI5RTNGREYKLToxMDUzMzAwMDAxRjY3NzE0REU3OTY5QzlGRjdCRjBDNkRCRjk5N0NBRkQKLToxMDUzNDAwMDBGMUY4QkNGQzVGOEQyQUM5RDk4MUYxRTk4NkRDNTdDRTIKLToxMDUzNTAwMEYxNjkzQzNGMzZEMEEwQzFCODAwREQwRkUyM0VBMjg1MjYKLToxMDUzNjAwMDE4NDMyMDk3QTc3MkJCNUM5QzVCNzg0NTYyRkVENkUwMzEKLToxMDUzNzAwMDhCMDY0NTdEM0Y1MTdDREVCODgyNzlFOUMxNjUyQ0JGNDMKLToxMDUzODAwMDdDQzg3RTZGNTZEMDdFMUZEMjczRkM5QzQ0NzczMTkzQ0QKLToxMDUzOTAwMEVERERGNzI4RUFGQjg5RTYxM0Y1RkQ0NDBCRUQyMTcxRkQKLToxMDUzQTAwMDZGOEE5NDMyOUNCRkRGREQ0MzkwRkVCQjZEQjk1ODlGN0UKLToxMDUzQjAwMEFFNjVGQTg4N0M4M0U5QTNFRTFDQTJCQTFGNjk5RDM5MDkKLToxMDUzQzAwMDM0MTFGMzk0Nzg1RUMxNDZDODNGRjg2RkYyMEI3RTlBQjEKLToxMDUzRDAwMDI2QTlGQ0MyNDNFNUFGQzkyRkRDRTZGMEVGMDIzQTVCMzkKLToxMDUzRTAwMDU4RTRDRDkyMjgzREQ2RUI5OTdGOThEMkVCQTYwODgxNjAKLToxMDUzRjAwMDc0QzVENjdDRDhBN0RENDQ1QURGRDJFNDIxQkRGRTAyQjUKLToxMDU0MDAwMEU5NzUzMkE1RDczQzE1QkRFRTYxRkMxNTQ0MjEyREU4QTgKLToxMDU0MTAwMDc1ODg0RTBCRTNGMzAwRkRGQjYwREM2RTQ3RUZFRjVCM0UKLToxMDU0MjAwMDYwNUZEMzZGRjBCMDNDNjg5NkQ3MTkyRjFGNjJFMDU5QzgKLToxMDU0MzAwMDIwMzM3ODVDNUEyREMyRjMzQUY0MTMwRkNGRTVGMDREQzgKLToxMDU0NDAwMDJDOURBNjEyQzYxRjYzRjE0RkFBNEM4MkI2OTI2MUZFMzQKLToxMDU0NTAwMDMxOTlGRDZGQzFCODQzN0NGNDA4REJDRjhFODA1QjZCNjQKLToxMDU0NjAwMDQ1N0E5QTczMDc4QjdGMDUyQ0NDMkU4MDM4NTgxQTFERUQKLToxMDU0NzAwMDdGMjYxRjdGNEVBN0FGREEwMUVENjY0QTBDMEY2MUZBNTcKLToxMDU0ODAwMDBGODU3RjE2QUY5RkQ5REY4Qzc5NzBCM0FBNzVDNzYzN0MKLToxMDU0OTAwMEVEMjAyMTJGNDVEQzZEMkU2RjdGQUI3REE2MEVGMkQyNjUKLToxMDU0QTAwMDY3RDdBQUUzNUQ3M0VGNjRGMUI2MzlCM0Q1RkRDQzI1QjgKLToxMDU0QjAwMEFCM0ZDMTdDNEREMkFBMDNGQ0NEQkQ1MzVERkY0OURBQTEKLToxMDU0QzAwMDUwOUM2QzAyQzRDOTBFNzEzRkQwMjBFNTEzRTBBM0Q3RjUKLToxMDU0RDAwMDkzMTc2RkJBODdEMkY5ODQ5RjE0OTU4MERGRjA4Njk0NzIKLToxMDU0RTAwMEM2NkQ0RkQwRjJCMzFCMjc2MUY5RjU5NEVGN0VGRjI4MEMKLToxMDU0RjAwMEQ0NkYyOUMwNzIzNTVDRTIwNEZCNTZFMDQzQ0E2Nzg1NkQKLToxMDU1MDAwMEU1NzdDQ0M4NDkwMDdEQzJGQkJEODdFMDdCQjdEOURGMUEKLToxMDU1MTAwMDNEOTNCNjczNEZDOUM1M0NENjZBRUVENzE4NUNDOEVBNEUKLToxMDU1MjAwMDZGQkVEMkM2NTI5NUVGNTJEMDVGNUM2RDY2RjczNTFERTcKLToxMDU1MzAwMDI5N0VCQjA0RjJBQUFCNzM3OUI5RTRENTQ5NTAzRTI0NjUKLToxMDU1NDAwMDdEODJGNzNBOUM2QkI2Q0FCMDBFMkRFOUNDQ0YzRUI5M0UKLToxMDU1NTAwMDUwMEE0RkE0NzhBOTc2RjJGRTlCRDlCQzZBNEI5RTRCQTkKLToxMDU1NjAwMDA3M0VBOUFFNjJGRDRDRjY1NDc2RTY0MTNCQ0Q3OTJDNjAKLToxMDU1NzAwMDlGNEIzNzI2MDBGRTA1QkZFNUYwN0Q5NUIwMkI3RDVDODcKLToxMDU1ODAwMDRFQkNFNDNERDY5MTQ0RkJGNTE5MjUwRjRDRDE1NzcxMjMKLToxMDU1OTAwMDhDREQ0QjY2NjVFNzAzN0RERTFDMTlGQ0Y0RDNCQzJDNjcKLToxMDU1QTAwMEVGQjZDQUI4M0MwREU0RTEyRDdFN0QyOUNDQ0I2RTJDNDQKLToxMDU1QjAwMDNFMDQ3OTExODkxNTk1NjU5OEE3NkQyNEI4QkU5NEZFQUYKLToxMDU1QzAwMEM3QTcwMzNGNUVGRDQ5NTYwMjEwOUQ1NTRERkY4MkJFQTEKLToxMDU1RDAwMDY2MEFCQUFGNTZEMzM3RTVEQkM5RTk2NTk3OTZERjJBODUKLToxMDU1RTAwMEZBMzYwREQzRjc1OEY2M0U4NUFCMDJFMUZBODY1QUFGOEMKLToxMDU1RjAwMDBEOEQxM0M3OUZGMUUzOEUyNTM3RTAyRjU2RkUwRUMzQTYKLToxMDU2MDAwMEQ3OEI3Qzk4MDFEOThENzlDMEE3NUQ4MjRGNkYwMjM4MDYKLToxMDU2MTAwMEY0OUEwODlFOEZDQTk2M0M5M0YwODA3MTg1Qzc4ODdBNjkKLToxMDU2MjAwMDJGOEU1RjA1N0M5OUUwMzMyRjE5MDkxN0ZDQzlDMjZFRDQKLToxMDU2MzAwMDY1N0YyRUYwQTM2NEYwN0FGQTlEOTczODg3RTFBMkUzQTQKLToxMDU2NDAwMERGOTEwRTdBRkMxMTA2Q0Y2NkE5OTVDOTE5QkUyRjExRkMKLToxMDU2NTAwMEZFOTcxNjMxREYzRUY1N0NDQkNERUMxRTAzMzdGOENCNDEKLToxMDU2NjAwMDMwNzY1MjNDNjkwOEVFQ0I1ODA3MzE5RjAwRDdFN0IzM0MKLToxMDU2NzAwMDhEM0U5QjlFQ0VFRDM2NDczREQyQ0ZFRDU0QTMzQTI4Q0EKLToxMDU2ODAwMDVFQzI3NEZGMEY3MDFFRDQwNEY3QzE3RTZGMjFGMTYyRjkKLToxMDU2OTAwMEZDOUNEMjQ3MjAzREM2NkUxMkYwQzZFM0E5NjUwQ0I5NEEKLToxMDU2QTAwMDFBM0Y5Rjc4RkMwQ0FGNUIyNDBEOUVFMkZDRTFEMDdDOUUKLToxMDU2QjAwMDJGNzM5RUYxRjY4QTRCQUZGNjVCM0FCOTdGRDEzOUVDODYKLToxMDU2QzAwMDRGMkM4NEZBNUE2MkY2QTAzRkQxMjNFMTdFQUY5NkRBREUKLToxMDU2RDAwMDFGMjBBNzZCNkIwOEZBNzE5QzU2MERGQTEzODUxRDMyQkIKLToxMDU2RTAwMDE2OUY1Q0ZGNEQyNkI3NkE5QjA4M0ZGN0M4RTYxNzRGMjkKLToxMDU2RjAwMDhGQTk2NEUwN0U3OEQ2MUE5NTBEMEI4MEZGMUJBQ0FBQUIKLToxMDU3MDAwMDczMDZCNTU2MTY4Rjc4NEVDODExMzI1MDA2N0E3RkE4QTgKLToxMDU3MTAwMDNDNDJFRjBGOTQ4MTFDOEFCRjdGQUVGNjIyRjM3QjNCQTUKLToxMDU3MjAwMDJGNEFGOEFDRjUxQzJCMDNCREVGQUMxOTI4MDM3OTU2QjIKLToxMDU3MzAwMDY3RjdGRTE0RDY1NURDMTMxOThGQ0ZCREU5MUE5MTk3ODAKLToxMDU3NDAwMDcyNTk3NDFBQ0Y0NzIyMEU3QUM0RTY3RjM5M0RDNjNGOUMKLToxMDU3NTAwMDc1NTY4QUEwOUY3NUI1Q0JDRUU3RTdDRjAxN0E3NkQ4OEMKLToxMDU3NjAwMDczMkFDMUVGMzREQkQ4QUEwM0JCMzhEMUUxM0Y5MENFMTYKLToxMDU3NzAwMEU0RTgxNzVGQzBFNjE3OUE1MjNDREU1NkVEN0Y1ODY2QTQKLToxMDU3ODAwMEMzMjIxRUVFRTU3OEI4ODFFQkQ5RjM5QkI0QjgwRkE5MUMKLToxMDU3OTAwMEY2MTYzRTBEQTFBMEMwOUIzQTEyNDJCRUY1QTI3RTE0QTEKLToxMDU3QTAwMEY3QzY5REE3MDY1NTE4REEzRjZGNDM3REJCRjg1N0Y1M0UKLToxMDU3QjAwMDE4Mjc5QkIwNUU0Mzk0MTg3RDM5MzE2NDU2REQ3RjMyRTMKLToxMDU3QzAwMDc5QTc1MzU1QkVBMjM3NURENUZFQ0FCRTVDNTU3RDcxMjMKLToxMDU3RDAwMDc4OTJBQUZFQUEzNzRCNTRFNUIyQzg1NDU1RkJBQkRGMEEKLToxMDU3RTAwMEE5NTI5NUFGMTk5OEExNkFCRjAzRjQzREM1RTMzNzRFOUUKLToxMDU3RjAwMENGNTJCREZGNjhFM0Y0MzcyMTNFN0Q1REY0M0JBQUVGNTUKLToxMDU4MDAwMDRGNzAzRjA0MDk3QTIzODU3NEZFMEIwNEJENUVBQzUzRDAKLToxMDU4MTAwMDdENEZDRDlBQjA1NDBFN0NDRkZFMTZBQzY2NzlGNzk1Q0QKLToxMDU4MjAwMDE0NjNCMUZEMkRFQzUyREIxMzM3OTAyOEU2MkJCNjg0QzAKLToxMDU4MzAwMDI0NEY5ODQwREU5REJBQkVCMUFGMDdGMTdBQTk3QjBGMjUKLToxMDU4NDAwMDI2QjhFNjZCQzA1NDk3QzY1MTNCNjMyMjIwODI1QzBEOUMKLToxMDU4NTAwMDc5ODM2M0YxRkJBNUQ2QkY4MEU0N0ZBOUY1MzdCOEQ1N0UKLToxMDU4NjAwMEVCNkY1MkQ0RUI2RjI5NTRBRkJGQ0RBMzVFRkZDNDBBRDgKLToxMDU4NzAwMEY1RkEzQkJDRUFGNTRGQUE1MUFGN0ZCMjRGQkRGRUE5ODYKLToxMDU4ODAwMDczRDVFQjlGRTY1N0FGRkZCODA2RjVCQTY3QjZBQUQ3NTAKLToxMDU4OTAwMDNCN0JBOTdBNUQ3MzgyNEI1NEY1RjE3NDIwRTg0OUM4Q0IKLToxMDU4QTAwMENGQkM5NUY3QUFEQjUzQTQ2ODYyRTg0MkQwRDkwMjVGNjcKLToxMDU4QjAwMDAzRTY2MzhERUY3QTQ4MzU1RTNDN0Q0QzIwM0M4RkY0RTcKLToxMDU4QzAwMDJCRDI0N0U1Mzg2RTdGNzJCQUEwN0FBOTZBNUMzMkRBQzkKLToxMDU4RDAwMDE5MzdDMDczRUUwNDZFRkZGQjQ2QjczMzg0RkM4QUQ1REMKLToxMDU4RTAwMEVCQjFGQkU2QjFFNERBMDg3REM1RjdEMTYzRUEyQkQ4NkEKLToxMDU4RjAwMDQ3OUI4NkY3RDE2M0QxRUZCQjg0RUE1OTFDN0MzNUZBMEMKLToxMDU5MDAwMENGRUVCMDMzMzgwRTlBOTkzREZGMjk1NDVENDNEQkQxNzkKLToxMDU5MTAwMDM2MTUxNERFNzc2MTNFNzRGQzc3Q0Q5M0QxMEZGMjFERkUKLToxMDU5MjAwMEQyQUI4MzcxRUYyNDExN0NDRTIzNTE3Q0ZBODk1RDc1NTMKLToxMDU5MzAwMEJFNjUwMUYxRTlCOTVGNjQwOUUwQTlDOTM4NTAwRTdBODIKLToxMDU5NDAwMEZGQzJGQ0EzRUY2MzdDRUU0OEQyNjVERDA3NzIxQ0UyNjgKLToxMDU5NTAwMDNGRTMwOTM5QzVFNUM5NDk4ODAzRDFGMjM5MTNGNzI3NkYKLToxMDU5NjAwMDdBODlFMjhBQzFFNzI5RUVGN0FDOUIyNkExOUUyNTVBRTcKLToxMDU5NzAwMDMzRTZCMUQ1REQyRUExOUVBQUZCMEZGNjZDMUZDN0Y0NEUKLToxMDU5ODAwMERBODhFNzUyODFENzJFNkUxRjMwM0JBMTBGMEVERDYyMDEKLToxMDU5OTAwMEZDOTBGOEFENjg4RjdBRUNCMERFQjQzRjE2ODdGOTQ3MUIKLToxMDU5QTAwMDc2N0ZCMURCQzhFMERDMjUxMUI5QzI4OUM3MDY3MUREOUQKLToxMDU5QjAwMDYxRkRFMTdDOUJEQkM4RTBEQkE1MjM0NkMwRUY2NEUyMzAKLToxMDU5QzAwMDQ3RkJGMDMxOTk4QTNDRDZFRjI0RDZFRkQxNUNGMDE3MzMKLToxMDU5RDAwMDlBQ0Q2RjdFQUIxQUYyQTlFNUUwNzJGNERGN0Y4RkE4NTMKLToxMDU5RTAwMEZERjc3N0I2NEFFOEJGRkYxRTg1OUIzRURENzY4RjFCMkQKLToxMDU5RjAwMEY0QjIyOEVGMDJCODIxMUUwMEVERThGQjU0NzdBQjA0QTcKLToxMDVBMDAwMEZFQjFBRkFEQkYzRDBGQjE3NjVGQjJCRkExN0UwODgzREYKLToxMDVBMTAwMDBCRkU2MDNEODU3RjM2ODNEMkI3ODFEMkNCQjZFRjExQzYKLToxMDVBMjAwMEY0MUZDNkZCNkJDNzY5QTkwNjgxRkMzMTFEQkI5N0MwN0IKLToxMDVBMzAwMDJEQUY2N0ZCRTJDMzFFQkJDQUNGNDQ3NDBFMzg0NzdBNTIKLToxMDVBNDAwMDI5N0IwRUYyQkU0RkM1OUNEM0EwNzQzNEVBRkRCQTFGNjkKLToxMDVBNTAwMDY1QjA3Q0E0RjZCNkM4NDQ4ODRCOUVFMzcxRDc4N0RCNUIKLToxMDVBNjAwMERFQzRCMjU2RjY2MDVFMjZEQ0Y3RTU4OEY5NUVFRkEyOEEKLToxMDVBNzAwMEY1MzE3MjRFQjZEMkVGNjNFNDhEQ0VFQUMzQ0I2QjFFMjYKLToxMDVBODAwMDY5OEI2MEJDNTNDN0VGMjU3QjM0RTM1RUJCM0ZDNkJGNjkKLToxMDVBOTAwMEYyQ0UzODZFMjcxOTgzQzQ5RTQyQjg2OTRGRkY0RTRGMkQKLToxMDVBQTAwMDIzNDAzRjVBQkI3QzJBNzYxRjZENzBEM0ZFNjJGNUVFMTEKLToxMDVBQjAwMEM1NjQxMjFCN0Y1OEQ5RjYwRUMyRkQ4OEU0Rjc0MzY3MTAKLToxMDVBQzAwMDg2N0MxMjM2NTE3QzFCNjQzODAzNERERjZGQjgxMUU1QkMKLToxMDVBRDAwMEFGREU3NkFGMDdFRUExMUEwQjdGMDZCNzdDMjE1NjdFQUMKLToxMDVBRTAwMDdFMzg4RURGQ0ZDNUU1RTc5MzZERDFDOTMwNEU3QkRCQzUKLToxMDVBRjAwMDgwMEE2RjVENkQxN0YxRkQ5QTM2NTJDNEVBM0ZDNDdBOTEKLToxMDVCMDAwMDREOEQ4MkY0NzM4QUQyNDIwNEUyN0FGMjgwMERGQ0MxOTgKLToxMDVCMTAwMEQ0M0UyNjEwN0ZENkI5OEQxODZGMzBCODE4QkNFNEEyRDkKLToxMDVCMjAwMDBCRTk2MzlFOURDMTAwM0VCRjRDNEExRkVGMkZENUUxOUMKLToxMDVCMzAwMEZFRkFCRTRDMkJCNkJGRUYzN0UzMEY3ODI5REZFQTI5MTgKLToxMDVCNDAwMDFBQjQ3RkMzN0M4NkM3NjFGOEQzNzNGOTQ5NjRCRjBGNjkKLToxMDVCNTAwMEU0ODAzRTVEQzYzODg1RDMzRTBCRDdGMUNCRjYyN0YwMDcKLToxMDVCNjAwMEFFMzcxMUNDNDdENjY3NUFEMTVFQjg1QzM4REQxOTZBQkEKLToxMDVCNzAwMEJDQzdFMzhGRTIwOUU1RkY3RDFDNEZGNzNEQzhGQzkzRUUKLToxMDVCODAwMEY3REQ0RkYwM0MwNTU5NEFGRkNBODdFOTZBMUM5Nzg3NDEKLToxMDVCOTAwMEE5QzQ4N0NGQUUzNjJBMDgwREIwNUU0NkUyOUY0MEVEMUQKLToxMDVCQTAwMDExRDI4QjhENERFMEE3ODI3QUFGRUM4MEQ0ODgyN0FBRTIKLToxMDVCQjAwMDVEMzNFMUI5QTZFMjY0MTdCMEUzREE2QjNGOEJDMDEzNDMKLToxMDVCQzAwMDYyMTE4MDJGN0IwMzA5QzE1NUJDOThBQjQwQzc3N0Y4QTEKLToxMDVCRDAwMDU5Mzk4MUQ3MjdDQzY1RTU0NDVFOUZFODYzRTU0Q0VGRjIKLToxMDVCRTAwMDBCNTIzNTAwMTYxNzQ3Q0JCNDNBNkZDQTA3NzlCQzgwMDEKLToxMDVCRjAwMEIwNzNGMUZDN0U4RENEODRDQjBCQUI3MzY2MzVENERGRjcKLToxMDVDMDAwMDQ5RjA5QzhCQThGRjA5QUY0RkIzMUU1Rjk5MDc3QTYzRDkKLToxMDVDMTAwMEI2RkFGQjBEMUMwRkE5RDZFMzVERDMzMERFQTZBRTE3OTYKLToxMDVDMjAwMEYxQUM2NEVCRjkzN0YxRkIyMjc1RkQ1M0ZDN0I5QkY1N0UKLToxMDVDMzAwMDdDNjQxQUQ0RTdBQkM3N0Y5Q0Q3NUJBQzJDRUY4RENBRDIKLToxMDVDNDAwMDdFNzY3RjAzQUY3RjhDRDc5QkEwMUVDNjJGNjRGNTVBNEMKLToxMDVDNTAwMDcxREYwOTZGRDdDOUUxMThFMjMzMUU0MzBDMjYzM0JGNDkKLToxMDVDNjAwMEYyOTYzNjIzRjI1NzNDQkZERDA3Rjc3Mzk1MERGMzlCOTEKLToxMDVDNzAwMDdEMjkxOUY1REU4NkZCMzI5OERDNDk1MDA2QkNERTUxRTEKLToxMDVDODAwMEU0QTJBODc3REE2NUNDMzdEMEJBRjU0ODRGMDYyQjk3NEYKLToxMDVDOTAwMDI3OUMxRjg3RTQ4OUQ0RUE2MTQ0QzZFNEY0QTVFODlBMDYKLToxMDVDQTAwMDEyRjAwNTkwNkI1OUY0MEZFODNBRTNGQjFBRTI4RjkxN0EKLToxMDVDQjAwMDczRTk0RDY2RTI4RkU1ODMwNTRFNTUzOUU1Q0U3NDU1OUYKLToxMDVDQzAwMDdCRDdFQzVDNTVCREI1NzQ5MkFBOUVDQzc2MjI5RkRDNDYKLToxMDVDRDAwMENCRTlDQjVDNTRBMkFBMTdGNzY1OTA2REJDOUQ5REI1MkUKLToxMDVDRTAwMEQzRTU0RjU1QjUzQjVGQTgyNDAyOEQ5RkJBNDlEQ0EzOEQKLToxMDVDRjAwMEU2MzE4MjdDQjhENzk2OUIwQUZDRjhCM0I2MEE0NDRFQ0MKLToxMDVEMDAwMDNCRTUyN0Y2QjRGM0E3MUI4QzU5RkE1NDc4QjkxMENCQUUKLToxMDVEMTAwMENGM0I1ODdFN0Y3QjlCODc5NTczMDg5RUFGNkY2RkFCQTEKLToxMDVEMjAwMEMxRjIyRUNBOUZGMEZDNjk5QjE3OUZEQjY5NTlBMUNGNzYKLToxMDVEMzAwMDdGQTRGRDJCQjQ5RjFFREEzRjk0OUZBMUZEQzM3MzMzNTQKLToxMDVENDAwMEVEMUY5RTNGQTFGRDQzRkQwNkRBMkY5NDlGQTY3MEMxNzMKLToxMDVENTAwMEYzMjlEQTBGQkNGRjMxRUQxRkNBNEZCNEY5QjBCQ0I2NUUKLToxMDVENjAwMDZEMkU5NjFGNkZGM0UzRjNCMUI2MDY3Q0RGRDlENjhBQUEKLToxMDVENzAwMEU1NDdEQjk2RTJGM0UxQjYyMDNFREJEQjU2NjI3RDJGQTIKLToxMDVEODAwMEE3OTNFN0Y5NzlEQ0U3MkJEOUJEMDNGMUVCREY5RjIxN0UKLToxMDVEOTAwMDYxQkIyRjlEOUY1MzRBMTU3QUI5MkEzRkE3M0YwM0ZDNDkKLToxMDVEQTAwMDAyQkRFQUZDNTRDMDFGQzI2MTYyNzg4Qzg3RTM2ODA2QkEKLToxMDVEQjAwMEIzMEYyNzkxQzg3MjBCOTMxRjE4MDcxRkRGRTc1OTYxQjQKLToxMDVEQzAwMEExRkMzNUFFOTVBRDdCNEU1RjE0RUJEMzFBRDg3ODQ3NjYKLToxMDVERDAwMEI5OUQ0MDVDNDE5MjUxQ0U4RTlCNDNCQjczNTJBNENBODUKLToxMDVERTAwMEMyRjIwN0QwMEY0M0RDMTQzRkU1RUM1QTcyNDZFNjIxQkQKLToxMDVERjAwMDBEQzAyNTU3NTAzRDFFMzNBRjIxN0MzOTE4OUM4MEI3MEMKLToxMDVFMDAwMEQxRTBGRDU3OEUzNzZENjkyRkJCNUZBN0E2MkIwQzZDQjkKLToxMDVFMTAwMDY2RjZCNkUyRkQzQUM2QjlCRUIwNEM5RjJFOUYxRkVGQTQKLToxMDVFMjAwMEU5OTg3NDcxM0FERDI0NTJGOTc2RjE5QjQ0QTFDRjhDNDQKLToxMDVFMzAwMDI2RjVGRTMxN0Q0MTg5NkE3RkE2QkRCODg2Mjg1N0QxRjcKLToxMDVFNDAwMDdFOEJENEZCM0M3M0ZFQkRBQUVGOEMxOTBGQTlFQUY1M0IKLToxMDVFNTAwMEFFMTVBQUZBQkFCQjczMUU3MTAzM0VDN0IxQjg5OTYxRjkKLToxMDVFNjAwMEY1NzIwMjIxRTQ4NURENEYyMDVDRTY0QzM2OEY3MzkyOUIKLToxMDVFNzAwMEMyN0U1RjYwMzdGRjNEMTNCRTdGNzlENkNFRjE2NTVDOTEKLToxMDVFODAwMDhERkJGMjA5MEU1NjJDNDgwQzZBNDAwRjdERkM4QjQ0QUEKLToxMDVFOTAwMDk0N0YzQjlFRDFBMDlGN0UyMjA5Njk0MERFNENBNkU2RkUKLToxMDVFQTAwMDI0RDQ1RjAxMzc4QzZCRjFBQTI2MkQ5NDhCODlBMjg1QUYKLToxMDVFQjAwMEYyNTUyNDhBRkIzQUJBN0ZEMTY0RDJGNTZCRDFGQTlGQUUKLToxMDVFQzAwMDMxRDFGMkQ5NENGRkIzMkNCRjMwOENGQUJBODBBRjY3MTYKLToxMDVFRDAwMDgxRDhDN0FEOTdFM0ZERENDNjRDRjQzN0E5Q0YyNTc2NTIKLToxMDVFRTAwMEYwRkQ0Qjg3ODlGOTBEOTczQkNBNTNDMTBFM0UzNzQ2RUIKLToxMDVFRjAwMDNFQThDRDdERTI4RDA1MTRERkI2QjQ2M0Y4MTRFRjFGMjQKLToxMDVGMDAwMDU3MzRBMzlFRDdDRkNCOTRCRTVBNUVGNzdBQUE0RkQ0MEMKLToxMDVGMTAwMDdDOTMwN0YzMzg1QkZBQ0YyOUUwNzY2QkM5OEYyMkZGQjkKLToxMDVGMjAwMDc0RTg4NDNDNTMxMjQxOUUwRDk3M0Q4OTI0NjYxRTNCQzQKLToxMDVGMzAwMERBREVDOTkzNTEyMUZBMTE2RjMyNUYzNzMxNUZGOTRGQzEKLToxMDVGNDAwMDk1NzZDODRCMkNFMDc5RDEzQkRCRDJGMkFCQzcwRjdGMDMKLToxMDVGNTAwMEVGRTM3NDUwNDgyMjM1QTA1RjBCOEIzNDlFMTA3NEUwNDEKLToxMDVGNjAwMEI1QUJGQzMxQTZGQzJFMkY5QzBCOTM0Qjg4MDdDNEYyREIKLToxMDVGNzAwMDQ0RDI4NUY3MjlDODdGRDU2MjNFOUE3Q0YwMUFBMjUwOTgKLToxMDVGODAwMEZCRDg2QTBEOTM2MEQxNzBCRjg0RkI3NUJFQ0ZFNUZDNzIKLToxMDVGOTAwMDY3RjY2QTlDOEY5QzI1RUMyNjBGRTg3NEYyOTlENTFCNTYKLToxMDVGQTAwMDAxM0FGQ0FDNUJDN0Q4RjRCOEJBQkVEMDRBNTBFRjJENkEKLToxMDVGQjAwMDJBRDQ4NzE0MDlFRUNCRUJDMjdCNDBFNTJEMTJDOUM4NjkKLToxMDVGQzAwMDAxMzhBNkI5RTc4MzdFREY2QjQxM0FCNkFDMkZDNzlGOTUKLToxMDVGRDAwMDMwQjg1OUUzQUY0MEZDMEUyODdCMzVDMkU4QTJFRDlBRjkKLToxMDVGRTAwMDI3RUJCNzgyM0QzOTAxRjA2MjA1QkNEQzkxNUYwRDQzQzAKLToxMDVGRjAwMEU3MTcyMjFFMTdGMjc5MkZFNEYzRThDODFDQzIzRjgzOEIKLToxMDYwMDAwMDg3NzhCQzcwMUZFRkEyNkVFMThGNTJDRkYzRjFEMkFBNTYKLToxMDYwMTAwMDZGQzNCREEyRUQxMTJERkY5OTIyMzUzRTU3RTkyMjUzRTIKLToxMDYwMjAwMEU2NEJDMzcwNTEzODE3NjY4MjVDMDFCOEFGODIwRkQ4NTcKLToxMDYwMzAwMEZDOUE5RjkxQzhDNjFDOTQ2QjM1Njg2Rjk0NjkzMDNGNzkKLToxMDYwNDAwMDNEOUUyRTlCMzI5OURDOEY2NkQ4RDk3REU0RUU1MzQ4NzUKLToxMDYwNTAwMENGQzNFNTkzNkYyQzQ4QzJGRDMzQjM1QjZDMzJDQjhGNUIKLToxMDYwNjAwMEY0N0E5NTU4QkZGNzJBRTE1RkU0RTc3MkNDMUNERUExMTEKLToxMDYwNzAwMDdCMDUyN0IxQkM2MDJCODlBQzg3QkNCNEIxRjZGNTJCOEUKLToxMDYwODAwMDMyNzM3MERDRTE3RDNEQjU1RDIwM0ZBNUNDODg3OTVDNDUKLToxMDYwOTAwMEFCNDQzRUExNzI1NDk5Njk2MzRGMzg1NzY1RTQ3NEZBNzIKLToxMDYwQTAwMEE4NEQ5REY3QjM5RENGNkYzQjVGOEY0MUEzQzg3QkYyOTcKLToxMDYwQjAwMEQ2MTZDNzlDRjNBOUVCQUY0NzNGOTY4OEQzMEU3MkZGNjUKLToxMDYwQzAwMEUxQTA1OTFENTc2REU0QTQzMDc4QThBQkNBMENGMUMxMEEKLToxMDYwRDAwMDJFMTZBNzZERUNCRjk5REQ2QkJCRUZDNzc4MkYzMEVEQTcKLToxMDYwRTAwMDUzMDE3QUE4RTdFREVCNTdBQUZENTgwQjc3RkE5MTVGQjkKLToxMDYwRjAwMEUzRkQ2NEYxN0UzMThBMzkzREVDMUZFM0ZENjI1QjMzRTEKLToxMDYxMDAwMEY5N0VDMjQzOEEyMTBFN0I2Mjc1REU2MTMzRUM3NzcyQzEKLToxMDYxMTAwMDA4OUUwRjFGQTc3RDAxRUZEREE2QkI4MTJFQjg0Rjk3MEMKLToxMDYxMjAwMDE0QjFGQkEzRTJEN0ZGNTQ5NjFFRjFCMjUzQUNFRjc4NDMKLToxMDYxMzAwMDJCREFBNTNCQ0I5ODFDRDg3OUUwRkMyREUzNjkzRjJCRUIKLToxMDYxNDAwMDczMjRENUY5ODA5NTM5M0E1Q0E3QjcyOTdEQzNCMzk3RjUKLToxMDYxNTAwMDkwOUFEMUVFMjkzQjk0QTlGOTZBNzJFRjVBRjVFRkMxRjIKLToxMDYxNjAwMDM0RjcwRDFDQjYyODI4RkY1RTAzQkExRjNDRkM3OTQyQTkKLToxMDYxNzAwMDExRjI1MTE0N0ZCRkM0MDhDMjMwOTlDMTBERTdCMzc2NDQKLToxMDYxODAwMDZCM0U5OTE3NEIwRjZGNjdDQTU4RkYzNkE3OEIyRjBEQzEKLToxMDYxOTAwMDU3QjUxQUFFQjM0NTZGQTVDQzYwNzBGRDBFRTRDNkI5MTUKLToxMDYxQTAwMEYwRjE5NDU4N0I0NkMwQjU3QjhDREYwM0Y4RjBBQkUyOEUKLToxMDYxQjAwMEE5NDJBRDFGNjJGMDc0RkFCRkMzRDM2RUZERThGMEZDRDQKLToxMDYxQzAwMDk1QzNGM0IzNDNFQzVFOUI5MUY1NUY1MTlGNzVBQkUxRDMKLToxMDYxRDAwMDNERkI3QzY0MEU4ODQ5MEFFRjVGMTE3RkVFOTMyOTE4MUUKLToxMDYxRTAwMDEzRTZGOEVCMkRFNUY0NTlDQUU1OEYwN0NGNTA5MUMwQkYKLToxMDYxRjAwMDdCNTc2MzFFNjZBRjRDOTI2QUExNUNCRTAwN0ZGNzJDOTIKLToxMDYyMDAwMDkzRUZDMzAyMUEzRjlFQkYyMUVGMTk0Njk1N0ZENzY0RDMKLToxMDYyMTAwMDMxQkFERTlEMkU4RDhBODdEMjJDMzZDRjAzNDdFQUIyNjMKLToxMDYyMjAwMEMxQkZGMUQ4M0IwNjAyNzI2MTMzQ0ZCRjdFQ0NERTZCQkIKLToxMDYyMzAwMDg0N0JBNjA1MUVBMTVDNDI5RjAxN0Q3NDExMjhCQ0M3MEEKLToxMDYyNDAwMDRBM0YzMzJBRDY1MUM2RDNCMEYxRDZDNkYxOEQxODRGODYKLToxMDYyNTAwMDNDQTc2NDE1MzI3QjU1M0FBNDg1NzMzODZCQUY3RDBCMzAKLToxMDYyNjAwMEVGN0Y1QjVCMkFBM0VDRkREMkY4NUYxRDg3RkZGMDVCM0QKLToxMDYyNzAwMDI5QjczMDdBOTk5MjQ1RTE2QjkxRkU5MEYwNkQ1QTBFRjQKLToxMDYyODAwMDQ4RDE3RjJBODI3QzE1QkQxRkU3MUZBMDc4RUM5MTQ2N0MKLToxMDYyOTAwMEUyMjkyRDhCRDE4Qjk4OUY5OEJGODBEQjc2REQwMjVDNDUKLToxMDYyQTAwMDA3REJCQjA2NTQxQUE1QkNCREQwMTc4OTVDRkZDMUJDNzcKLToxMDYyQjAwMDUwNUY1QzJCQjM3MzRDNjUzMkFFRkJEQThBQTk3OEVFODMKLToxMDYyQzAwMDZDMzdDRjE3ODk1RUEzMUZGNTc3NDQxNjcwQkMzRDc2RjcKLToxMDYyRDAwMEYxQjcxMUI4NDczOUQ4QUZDM0ZCM0Y4ODNDRTBCRTE1RDIKLToxMDYyRTAwMEVFMUZGRjhEOENGNzg5NTM3QUFBODFGQkNDMEUxQzM5RTcKLToxMDYyRjAwMDlGMDBGQkVCRjk1OTNBODQ3QjNFOTc4NzgzMTdCNTM1QUUKLToxMDYzMDAwMDc4MUVFQ0M4Njc3NjZEMENGREQ3NjU2OUI5N0QxMjg5N0EKLToxMDYzMTAwMEMwMzlBRjM1MjVFQzNDOEI5NURCMDNENjIzMjcxQjAwMUEKLToxMDYzMjAwMDdFNkJDNTQzMDYyOTg2REU2NjY1MTkxMEFFMzVGQTY4QjAKLToxMDYzMzAwMDhBODdGNjE3RDhBNzI1NjFFNkZGQzE3QjE5ODdDRUIzRjgKLToxMDYzNDAwMERBMTkxRTVBNEEwRkExQkQ2MEVENjdGNzM1RDY2NTI5RTcKLToxMDYzNTAwMDRDQ0U1MkI4RjdEMkY3RTY4OTlGRDlFQkExQkU5NDhFMDYKLToxMDYzNjAwMDk3M0JGQ0JEQ0RDRUQ2RDM1Q0M2RUU0QjVBN0JFRDNGMDIKLToxMDYzNzAwMERCRTEzRUM4NDRGODFENDdEOEVGRjI3OTBBQjg5MjcyQzMKLToxMDYzODAwMDM1QkNERjQ4MjQxN0Y4Q0IyRTYzQkU1QTZGRjg1RTIzNjYKLToxMDYzOTAwMEQ4RkI4MjJGREVDQUQ1NjJCQjQ3RjkzOTg5NDcyQjBBNjEKLToxMDYzQTAwMDQzNzBBRTRDRDBCMTM1REJGRjQwMTZDQzhGRjJDNTBCM0QKLToxMDYzQjAwMDY4RUY0NDdDRDMxMDNGRjY2MkM4MzNERjI1NDVFNjMyRjAKLToxMDYzQzAwMDNCNDQ2RjA3M0UyQ0Q0Njg1NEZDMTZFMUVCMjY5RTU0RTgKLToxMDYzRDAwMEZEQTNERDczM0ZBNzVEQTFGNzNCNDI0NjAyRTc0REZFRkIKLToxMDYzRTAwMDc4NzE2NjIyRDhBNzFEMTlDMkRFRjMxQTAxNUY5QjI1QkEKLToxMDYzRjAwMDVGNjIwRThDRjMyRjVBREMwRjFFMzg3MkJDMDFDNkVEQTMKLToxMDY0MDAwMEEwRjMwMkJFN0RGODc1RUI2QUIwNTMzQUVDNUVFNDUzM0MKLToxMDY0MTAwMDMxQkVFQ0QwRjBGNTYwRkRFQ0Q2N0JERjA0N0Y2NEQ0QjgKLToxMDY0MjAwMEMxRUVDRDNBMzg3NTg2MTFFODlGQjZEMzQwM0Y3RkEwQzQKLToxMDY0MzAwMEZCRjdGMDA0RThBNzFBRkQwNjBCRURCM0E2QzM3NzhCQjQKLToxMDY0NDAwMDg4RkYxMUIwNkYxNzc1NkI1NUY3ODMzQ0NDRTVDNUMyNUIKLToxMDY0NTAwMDhCMTYxMjhFRDkyRjJDQUNGODBFOUU2QjVDNzgzMTAxMDYKLToxMDY0NjAwMERGM0ZDQ0NGRUQzRkNDQ0ZCREVERTJGODc4OTkzRjVGNzkKLToxMDY0NzAwMENGRkE4QUZCNkY0RjlDREU0QUZFREQ4RTNBQzZGN0JCMzEKLToxMDY0ODAwMDYwRkQ5QUE1MDEzREE4RkEzNTUzM0ZDN0YzNjQ3RjY4QzQKLToxMDY0OTAwMEIzOTNCMDIxMDZERTExRjM0QzIyRTE5ODcxODdEQTVERTcKLToxMDY0QTAwMDM0OTE3MDUyRUNGQTMyRkExRDlFQUYxNUVCRkZEMEU2MzQKLToxMDY0QjAwMDQ2M0M4RURERkYzODE1MUU4N0ZCQ0Y1M0UxNzE2NEZGMkMKLToxMDY0QzAwMDA1NThGRjg3QjZDMjRCRjQzRjc5OENGRTczNTRGMDBGMkEKLToxMDY0RDAwMEY3OUI4RkVGQ0YxREFDN0JENjQyRjlFRTYwNzhDNUM2MzcKLToxMDY0RTAwMDU3NEJFMUY3RjcwQ0Y4N0IxQkE0QUZCNzBBQ0ZCOUVFMTcKLToxMDY0RjAwMDIyNzgwRUZBODFGRDdGN0ExRkYyNTIxRkQ4QUFGN0MwQzgKLToxMDY1MDAwMDE4ODNCQUU4M0NDRjI4N0EyNjlGRDg4MzcwRUY5Qzc4MEUKLToxMDY1MTAwMEJFOUQ5NTg3RUIxQ0ZGREUyODg3RUM5MDY3NkEyQzk0NjQKLToxMDY1MjAwMEVEQTBFNzhDMjQxMjVBMDFGQjk3NTIyM0NBMzkxMURGRTAKLToxMDY1MzAwMDEyRkRGRTM0NTNBQjkyQjNFMjdFQTE0NjlFN0ZEODY4MzMKLToxMDY1NDAwMDYxRjFBRjI2QUJGRjJDQUNGRjEyNEQ1N0NCQ0Y2ODFGQ0MKLToxMDY1NTAwMEE3MEIzQkYwN0MzQjIxMEVEQ0Q3ODhGODhFMENGQkM1RUIKLToxMDY1NjAwMDNDNzA3REY5MDg5QzBCOUI5N0UzRkYwQ0JFRkIwOTE1NjMKLToxMDY1NzAwMDJCMTBFRkQxNUVCMUNEMEZGOTc5OEZGMzdERTRFM0E2NTcKLToxMDY1ODAwMDg4REIxMzIzM0Y3NUQ5RjI1N0IzMUJCQUUyRThCN0VDQTcKLToxMDY1OTAwMDc3M0JDMjhDN0U3NUQ5NDBCRkRBQzhDRkVCNzJFMDdDMDYKLToxMDY1QTAwMEUzMDBCRjY3NEU0MUZCQjlBRUY0MzBERTQ3NTkyN0ZDMkMKLToxMDY1QjAwMDAyMkJFM0YzNTYzMjFENjA0RjhCNzg1NDAyRTQxNzgyQUUKLToxMDY1QzAwMEREQjA4NkRENTM1ODZGNjFFNUZBNUYyN0UxQjkxN0JBOTAKLToxMDY1RDAwMDFGQjIxNDgxOUNEOUFENjVGRTIyMUUwNzNCQ0Y2MTFFMDAKLToxMDY1RTAwMDM0QUVDOTAyRkMwRUYyN0M5N0YzRkRBRkUxQkRBN0U3MjQKLToxMDY1RjAwMDU3OEU0NzNBQThGRkU1MEZGMTFFQzNEREU5NEM5RjBEMEEKLToxMDY2MDAwMEVFQjNBMTNFQUIzNzc4Q0FFMTVFQ0REREU5Q0M2RUVERUQKLToxMDY2MTAwMDk1QzMwOTI1MzE3NkVDQTMxOTU1MjhBNzNGNUUzOTVFNEQKLToxMDY2MjAwMDEzMUIyNzE5OUZDREU0QzIxQUUxRkY5NEEzRTU3MENFOTYKLToxMDY2MzAwMEVBRTNEMkYwM0ZBMTNFREQ2M0MyREYxQkQzRUNGRDUzQTIKLToxMDY2NDAwMDM5REVCRkJBQzY4MEJGNjM1MUI1NzdFMkJBQjlCMDVGNzEKLToxMDY2NTAwMDRDOTAzMTFGNUJCM0Q3ODRGMDlDNURDNUVFODM4MzZGOTQKLToxMDY2NjAwMDQxRUUzNUVGMUQ4N0JGQ0I1NjZGODk2MkRFNjRCM0Q5MkIKLToxMDY2NzAwMDUzMDBGMUMxRkFCRERGQzBERjlGMzhGMUY4QzQyQzkwQTAKLToxMDY2ODAwMDgzQzc5Mzk1MkNCQzZGRkI3MThBNzQzQUVGRTNGQjI2QUEKLToxMDY2OTAwMEIwRjc5RDU3RTNCOTZBREIxQThCN0YzNEZGODhEMDRCODQKLToxMDY2QTAwMEYxRjdDREVENEUyRjNFRDcwN0Y4OTk2OEY0ODAxQzVFQzgKLToxMDY2QjAwMDM4RTQ1RjY3RjcwN0Q2QkYxOTlEQTUyNEEwRkYwNkYzNEUKLToxMDY2QzAwMDE3RUFFREE3RjBGNzFERUJCQjhGREQ0OTMwM0VFOTQyM0QKLToxMDY2RDAwMEZBMTVGQkJDRjg3MUVCQjlGRURBQUQ4RkNFODNERkQ1Q0UKLToxMDY2RTAwMEFCNkZFN0Y4RTdCRkY3NTlBRjI5QzZERjlCMTRGODVGMzgKLToxMDY2RjAwMDEzNzcxRkYzRjczOERFQzVGM0M0MTExOUVGQjlBNDc2ODkKLToxMDY3MDAwMDQ1MTZGODhGNEVFQzM3MjBCRDlENTgzMzE5RUY1NzEwQzIKLToxMDY3MTAwMEUzRDU1MzU4RUQ5NDRGOEYzQjk1MjlCMEJFMEJCMjE1N0UKLToxMDY3MjAwMDM2RkY3NkI2N0YxNUVGRTlGODExRjhCRENFRTgzRTJEQkQKLToxMDY3MzAwMEU2QUYwRERBQTMwOTEwQzcxNEVENDQ3OTY4M0VGRDVBOUYKLToxMDY3NDAwMEZDQkRCN0RERTkwNzcwREQyOTVEMTFBMDJCQ0QyRjZERjQKLToxMDY3NTAwMEE4QjcwM0JGNjRCRjFCRjc3MTI5MDk4MjlGMzRGODhFNjUKLToxMDY3NjAwMDAxRjc3QjA3RjcxOUQwOUUxRTdDOTc5RENGMUY3MUVGMTUKLToxMDY3NzAwMDlGMzU5QTA1RjdEQzA2N0UzOTBFRTVEQTYwNjY3NDBCMDQKLToxMDY3ODAwMEIzQkY0RDc4Q0ZFNEUwNTFGRkQ1M0M1RTlDQzZFRkQxNUUKLToxMDY3OTAwMDRDMDNCQkVGQzIzRTUzMThFQzNFRkFDNEI4NDM5MDZDQjYKLToxMDY3QTAwMDczRTNGQkZEMTZCQzJGODgzRUQ5RjkyNDY5OEYxQjdGNEMKLToxMDY3QjAwMDM3ODk3NEYxRUYyM0Y4RkQwMzU5RkUwOTIwQTcxRkM4OUMKLToxMDY3QzAwMEEzRkQ1QkUxRkI5M0Q4RUU0MkFFRkY0QThDNTkxMTkyRDgKLToxMDY3RDAwMENFQzc0QkM3N0UzM0ZERDlGODVFRkFDQ0NEN0UwRkE4NkQKLToxMDY3RTAwMDhCRDc0N0IwM0U2MEYwNUY4REYzRjhCRDhERjQ4QzMyRUYKLToxMDY3RjAwMENGQUY3QTVGRTQ3REQ5NDlCODhFMDI2RThBNjdCNDIzNDEKLToxMDY4MDAwMEUzRjFEMjkzQ0RGNjlGMDIxRkYxNzQzOUI0OUU5NzgwQzUKLToxMDY4MTAwMDBGRkMzMjc4QkZDMDNFQjY4RUFCMjZFQTk5M0NFOTlDQUQKLToxMDY4MjAwMDhDRjYzMkRFMzAxNDkzMjdCODdDREYwNzQ4OTc4MzNBMjIKLToxMDY4MzAwMEVGRDNBMDk3QTI0Nzc1ODREREMzNDgyRDAzRjA1NzU0Q0EKLToxMDY4NDAwMEIwNzZGNTE2RTZGNzEwNzA5Q0UxRTcwNzFBM0I1OTFFODMKLToxMDY4NTAwMEUxOTlFNzNFQzg5QTZGODVGM0YzMUZBOENFQ0YwQkZGRUYKLToxMDY4NjAwMDIxRUQyNDAxRkMzMzU2OEY5MjUwNTdDNEVDNzYyREMyOTMKLToxMDY4NzAwMEM1N0U4RjZFOEQ0RUMxREYwQjBDM0UzRTExRkQxMjI3ODMKLToxMDY4ODAwMEY0Q0E1RUJDMDc3NkQ1MTUxQUEwMjc2RDMxOTdCRjRGQTUKLToxMDY4OTAwMEIwNzk4OUZCRERDNDNENkRGMTc4MTlDODY2RkFCMjk5MEIKLToxMDY4QTAwMEY4RUY4MjNCRkU4RjEzMjU4NTA3NEJGMUJFNEE3NEZGM0MKLToxMDY4QjAwMDZCMjBDRDUyRjY5QTU4N0UzQkVBODU5MUY3NDJFQTJGM0IKLToxMDY4QzAwMEYxN0I4MkZGQkJFNTUzQjA1NjY1ODA5RjYwMDJFOEQ1M0YKLToxMDY4RDAwMEQzNzZCNjdGQzQ1QjIyNDBCRjZCRDkzQzNCRTAwM0I4QTQKLToxMDY4RTAwMEZGODJGODRFODM1RUM0NUIyNTI4MUU0RTRCQUMzRTlFNTUKLToxMDY4RjAwMENFODRCQzFCODEwRkEwMUJFODE3QkVBMzdEN0Y5RTlEOEQKLToxMDY5MDAwMEMzRjYzRjc2MjczRjk0MTdENDQzNUVBQUQwNTcwMTQ5NzgKLToxMDY5MTAwMEQ2QzA3RDBGMjcxRDRBMDJEMEU1QzlDRTNDRTc3MkM4MUMKLToxMDY5MjAwMEY3NzEyODI5QjFGNjc2RTAxMEMxN0IwRTE0MzhGRjczOTkKLToxMDY5MzAwMDM1RkMyRTkyNzcwQUY4MDU3NzNCRDVGRTg4Nzg3ODVFOEQKLToxMDY5NDAwMEE4MUM0MEZERjM1Rjk4QzZDNTUzMDA4MDAwMDAwMDAwRkUKLToxMDY5NTAwMDFGOEIwODAwMDAwMDAwMDAwMEZGQjU3RDBCNzg1NEQ1QTgKLToxMDY5NjAwMEI1RkYzRTczNjYyNjMzNzk0RTFFODQ4NDQwOTgyNEU0MzYKLToxMDY5NzAwMDAxODQzMDA5MEY0MTQxMDc0ODEwMTU2ODc4MDkyODg1QkUKLToxMDY5ODAwMDkzMDcxMDQyMUU4OEI2MTc1QkRCMEMyNDIwNUFCNDQxRDMKLToxMDY5OTAwMDUxRDE4Qjc2NDA0MTU0QjQ0MTQxNDEwMzc3MDBBNTU4MTEKLToxMDY5QTAwMDUxNjNENTU2NkRDQjBEODhCQzFGMzFBODk3RkZBREFEOTcKLToxMDY5QjAwMEZGRjU1QkZCOUM2NENFOTBBOEI1QjdGOTNFRDhEOTY3Q0MKLToxMDY5QzAwMEJGRDc1QTdCRURGNURBM0JERjdDNDMzRkQ3MDk2MTc1RDIKLToxMDY5RDAwMDJCNDJGNDEwMjJDRTZEMTE2Mjk4MTBBM0RDODJGMzQyOTgKLToxMDY5RTAwMEQ4ODVDODExRkNGMzhEQ0E4OURCM0E1Qzg4ODVGODhEOUYKLToxMDY5RjAwMEFBQUFGOURBQjU5RUM4MkJFQjJENUMxRkUzNzU0Njc3ODIKLToxMDZBMDAwMEYxQkRGMUI1RkY1MEYyMjhCMzIxNEMwODg3RkUzRDVEODIKLToxMDZBMTAwMDg4MEYzMTFFOEQ3QkVBOTBEREE3MEM0NjFBMkVBQzA5M0IKLToxMDZBMjAwMDQyNTRBQzc1RkE0NTFBQTU2RjRFQ0NCQTUzRTY4NTQyNkUKLToxMDZBMzAwMDc1Qzc2QzVDOTlEODRBRTM5NjZGMkFDQTEyOTFCMjFGNDcKLToxMDZBNDAwMDQxRjNBQUQwRTc1NTlFRUFDRDUyODcwQUQxRjZBOEVBQ0IKLToxMDZBNTAwMERBODRGNkVCNTU5RThGNkFGM0I4MUVBNUVGMjdENkRCRDYKLToxMDZBNjAwMDVDQ0JBOTlGMEE3RDNFMjc3QTZCRDFDNUI5OTRCNzBBNDIKLToxMDZBNzAwMEFCQkQ4MEYyNTYyRERBNDVGRDJFNzg1NDJERjY3N0IxNTgKLToxMDZBODAwMDNFQUFGNzgxQjVBMDBCRjg2MDREODkzQTdDMzJBODFFNkEKLToxMDZBOTAwMEQ2Njk5NEUzQkZGNzY4NzI1N0QxRkNDMkU5NzdDQzYzM0IKLToxMDZBQTAwMEEzRTJGN0QxRkM0RUY0RDFFNjIxN0ZGQzkzMzBCMTgyMTIKLToxMDZBQjAwMEYyRUFEQTQ1RDFFRURDMkJFMTdEQzJBMTQ1N0I3MjAxMjEKLToxMDZBQzAwMDVGQjkxRTAzOUVBMUUzMThGMEJDMDg3OEM2MjBCREJBQ0EKLToxMDZBRDAwMEM1NEJGMEFCN0Q0OEY1QTBDRUJFRTY0QkQxODBERjk4MkMKLToxMDZBRTAwMDNENDU0N0FFQzFGN0I1NjEyMjhDREFFQzNCOUNGRUNFNEEKLToxMDZBRjAwMEFEMzQ4RjhCQUI1NTQxM0Q4QUQyM0QxOTg5ODJDNkRCQkYKLToxMDZCMDAwMDZFRjk3QzJFRTA3M0JGNERDQzdBOTFEMkQyQjdBNzQ3RjUKLToxMDZCMTAwMDVCMjhGRDQ2QTcxRkY1MjEwOTI3MzU2QTdBRjQ3Q0FFNkMKLToxMDZCMjAwMERGM0VCOTk4RjJDN0RDOUVDNDgyQTA3QTNGRDZFOTJDM0EKLToxMDZCMzAwMDE0NUY2NTZCRkYxNjhENzEyQUQ2RDg3ODVEMDY1RTJFQzAKLToxMDZCNDAwMDYyMUQzNEJGOEI4RDExRkVFNTA0OTc4QkJEREJCODVGRjIKLToxMDZCNTAwMDAzNEY0NkJGMTVDMDgzNDE0RjU0NkZBNURCQTU4RkUzOUMKLToxMDZCNjAwMEIzMTc0NzExNUNEM0I0RTE5RTJFRTg2NEMxODMzNDJFODEKLToxMDZCNzAwMEZBNUIxRkU1NzVFNjdERkY3MTBENzg3NEUwOUI5NjI1NDUKLToxMDZCODAwMDBDRkMwMzhGNEZBNDZEQkM5N0JFNTlERUIzMEFEMTkzQTIKLToxMDZCOTAwMEUwRDA3ODdEQUE0MkRGQ0JGNjg0MDk4NUZBMkI1M0RBNjAKLToxMDZCQTAwMDhFMjgwOTlDNzdGQjE0QUM3RkYxM0M4QzU3RjY3MTk4Q0EKLToxMDZCQjAwMDA1RTVDN0Y3NUU5RkM3RjMwQUMxMkJDMTI5QjUyQjdBM0MKLToxMDZCQzAwMEJGOThENjk2RUEwOTgyREZDNTNFNkQ3Mzc5QkUwNjdEMTEKLToxMDZCRDAwMDc0Q0U5QkU3NTFCQjM3NEM2MDVGNUM0QzIzN0M0Njc2QTAKLToxMDZCRTAwMEMyQjEwMUY4MTlDNkY1NUQ3NkE2NkY2RjFFRTBEN0IxODgKLToxMDZCRjAwMDVFNTdDODdBNUQyMUVCRkQ0MDMwN0QwQjhGQzZFQjI5RDcKLToxMDZDMDAwMEZGMjRDQzgyRUZFNTBGREM5NEU1QTY3MThFREYzQjhFOEUKLToxMDZDMTAwMEQ3NzUzQ0NFOUI4N0ZENzUzQzk1RkFDRkJENzI5REU1M0YKLToxMDZDMjAwMDBGRDAzQTczQkY2NTlEOEQ0RUM2NTdCN0VCOEM2QjdCMEIKLToxMDZDMzAwMDQyN0NDQjNBMzdFQTc0NjhBQ0YzMzNBQjNCREE4QUZBN0UKLToxMDZDNDAwMEJCNTVCMTlDOEE2QUZCMTRERjdGOERDQ0JCNTZEMEQwN0MKLToxMDZDNTAwMEI1MzY0OTBGQjU2QjIzRkNDMEQ3ODU2NkRCMDQ3RjZFNjQKLToxMDZDNjAwMDI3MUZBMEYxQkUyNzNENTg5ODFFOEU4Rjc1M0YzQzAyMEUKLToxMDZDNzAwMEY0NzU5RkVBRjJCOTAxOTcyMUVGRkM5Q0YyQzdFRjU3MzgKLToxMDZDODAwMDVEMDJGOUIxMTI3RUM0MEYyQ0UwMEZDNzUzOEIyNzczM0UKLToxMDZDOTAwMDdFQUZDREI1ODJGQUY5QjRGMTZGN0YwNEZENUNEQzYzQTEKLToxMDZDQTAwMDczMEI1RTVGRjFGREIzOTBBN0Y5ODJBRjExNUM2RUM2MDYKLToxMDZDQjAwMEI4NTRDRUVCNTdFRjE5RDY4ODcyRjFFODYwNTdBNkJCRUYKLToxMDZDQzAwMDBCQkUxNDAyRTc4QTM1QUE2OTFGRDIwMUMxRTNENTNFODMKLToxMDZDRDAwMDkwRTJDNjNBMEMzODEzODdDRDlBM0FBODEzMUVDODRGRDMKLToxMDZDRTAwMDFGRDQwOTk3NUFCQkQwOUFGOEZCMTJGQjk0NDE0MUZDODAKLToxMDZDRjAwMDBDRjA0OTk3RTc0NEZGM0NDOUM3RDJBMjgzRjY3M0M4OUEKLToxMDZEMDAwMEZDNDJGOThGNTFDRjQ4RkZEMkMxNTdDQ0ZDNzg1MTcwNkIKLToxMDZEMTAwMDlFRTA1MDE5OTI1RjFDQzIzN0FBNDJDQUFCNDNDQUI3NjEKLToxMDZEMjAwMEY3RkE5Q0Y5NDBFOEY4MTNEM0U0QkUzMUUwNThBQUMzNUYKLToxMDZEMzAwMDcxQkI0NTkxN0NFNDNFQzVCRjg5N0UyREI1QkFFRDRCNTQKLToxMDZENDAwMDY5RkUyRjhFMTFGM0QwNEY5OTU1MzhBRUU1N0REOUNFMUYKLToxMDZENTAwMEVCMkJCNThBODZCMDAyN0NGNzcwM0Q2M0RERDQ1RjQzRDAKLToxMDZENjAwMDU4MUNFNUMzMjUxRkEyN0ExM0VDNDE3OTgzREYxQUYzN0YKLToxMDZENzAwMDA5NEY5M0YwMzBEMkM1NUI5RDhEQzc4M0UwNTlERDE0NzgKLToxMDZEODAwMDZCQ0FEN0VFNEE2RTNDRUVFOENDMkZDNjJGQzlGNDZGMjMKLToxMDZEOTAwMDIyQUQ3RTM4RTAyMjdGQUE3N0I1MUU4QzIwRkE0OUIyNTgKLToxMDZEQTAwMDY4RTE2OUQ0RUZDNTgzRkYxQjlERUI2NkJDMEYyRjI2RkUKLToxMDZEQjAwMEZDMTZBOEU5MkYxREE2RjVCNkVENTYzRDlCRDBFRjlCMUUKLToxMDZEQzAwMEYyRkMxMTVGNUY3QTc4MUI3REFGRDk5QjIxRUU3NTc3NUUKLToxMDZERDAwMEFFM0YxNDhFMTc3NzVEOEE0RUE3RUYxNzBFRDlDMzA1MDUKLToxMDZERTAwMEM5MDFBNUNERjE2M0VERDFCQ0JGQkE4NEJCNUI4N0JCNDQKLToxMDZERjAwMEQxREYwNTZCNkJGNDk0QTA3QTE3NDQ2QkY0RDQyMDdBM0UKLToxMDZFMDAwMDI5REQ3NUE5NEVFNDMxRkM3QzZBMTAxRkZGNzQ0RjhGOTkKLToxMDZFMTAwMEIxMkE3RDJGRkI3REFGQjExNjRBQzdFOUZEREU2RjczNDYKLToxMDZFMjAwMDNGQjk4NkU2RUREQjFERTZEOTRDRjNCRUYwRTYyQzBCNTAKLToxMDZFMzAwMERBNUY3OEIzNDI0RjdGRUFFNUY0QjM0RjUzMzE3RUI0NjMKLToxMDZFNDAwMDQ1RDJCQjMxREU4ODM0Mjk0Rjk1NTk4RTNFMzExQUZDMkMKLToxMDZFNTAwMEZGRDU5RTY5RjU2OTlERTU2NTk2ODIyQ0UwNzk5QkFEMkQKLToxMDZFNjAwMDZEMkVFNjdENDExMUFCOTVCOENFN0VDNkE1QjlCOUZEQjQKLToxMDZFNzAwMDg1REQyNzlGMDA3RkY4RjRGRTNFMDU2MDJCMTc3NjY3QkYKLToxMDZFODAwMEU3Njk1NDdFRTFFMzIxNTkyRUVBRjdDMjdEQzkxRUYwN0QKLToxMDZFOTAwMDg1NkQzNkY3NEY5OURFRUU4OUYyNjBERjFCRkQ2MTlDNTAKLToxMDZFQTAwMDI1RTg3RkY3NTVDMzM1QTQxRkNCRjk1MjNFNEY5M0UzMzYKLToxMDZFQjAwMEZBOTQ4MkNFN0VBMzJERUU1RjhGMDJCRkY4QkRDREIzRDQKLToxMDZFQzAwMDk5OTJBNTdGQ0ZFODE5OEJGNTYxM0Y3NzgxODdCMkQ1N0QKLToxMDZFRDAwMDYxQzI2REUyMjcyQjc4REVBNUMyNjM4NzFDODQ3MjExMjQKLToxMDZFRTAwMDQ0NUZFNUEyOThCRkNGNkYzNDdGNUY0MDdDMDJERjE3MUQKLToxMDZFRjAwMEFFMzc3RkFGMTA4REFCNUE2OTdEOEJGQ0U2RUY4MkY2MjMKLToxMDZGMDAwMDhGMkYxMUZCREFGODY5RTJGMzdFRjFENjZGQzI0Q0Y1RjAKLToxMDZGMTAwMDg0NEZFNzBGMEVFNkM3QTVCNDFGQzFDNzlFNTdGQ0ZFRkUKLToxMDZGMjAwMDE1QzBFRjNEMkFBRjMzNzQ1RENCRDNEMjc4MUQ4RjQ0QUIKLToxMDZGMzAwMEZDNjM2RTZCMTA1RThGNTk4NDM1ODlFMDdBQ0MyRTFDMTEKLToxMDZGNDAwMDQ5MDVFODQ3MDg5Q0FCQkUzRDYxRkVDREQ0RTRERUZFQkEKLToxMDZGNTAwMDVGQTU5NjMyREY0QkIyRTAzQ0I4QzMwNUNFNDdGREVERUUKLToxMDZGNjAwMDM5OTk4QTdFQ0E1NjE3Nzk1QjgzRTY3N0QxRTY3REU0NDQKLToxMDZGNzAwMEU3OTA1N0RGMjM3RTRERjU4RThERjUzNzhFQTU3OTFENzEKLToxMDZGODAwMEJCNTdGNUQ0NzczMUFGMzMyNDlGRjlFMzA5MUVGNzI4QjcKLToxMDZGOTAwMEMyM0Y4NEYyQ0Y5QzRDMkQyMUJDOUNERTdDMzJCNTM0QTgKLToxMDZGQTAwMDk4RkUxNTMxMkI5ODFFOEQ5NDY2QzJFQjgyQUM4OUY0NDUKLToxMDZGQjAwMDE4QUQwNUVCMDlBREQ3ODk1RkYzN0MwRDc4M0E1NUIxNzMKLToxMDZGQzAwMEE0MkI3QTc4MTQ3NDRGRTUzOTdGNTcwNUU0Q0U5QTNEQTcKLToxMDZGRDAwMDM2M0ZFODMzNjJFMzE3MEZERjBBRkE2Q0I2Qjk0MERBREUKLToxMDZGRTAwMEI1N0I1NDJGRTQ3NEIxNUJGNTY3RTIxQzZCRkUzNEJBRDkKLToxMDZGRjAwMDEyRTdDQ0VFMjEyRTM1NjhERDc0MEUxN0UzN0NCOUIwQjQKLToxMDcwMDAwMEVCNTI2MjU5MkVGNzMzMTlGMjQ0RUQ5RTg3M0NBMERGMTQKLToxMDcwMTAwMEVFRTZGMTVDOUFGQUFGRjEzRkFGOTlGRjlEQ0ZGRDIwMEMKLToxMDcwMjAwMEYxNDZGMDgxOEQyN0IyQzBERjg5MEYzRTk3ODZGRDk5MkEKLToxMDcwMzAwMEY1QjUxRDc5MjE1QTg3ODNGRTY4N0UyQ0JGNUZGNDdGRUEKLToxMDcwNDAwMEM1RjJBNUEzNTlGNUZBQkJDMEMzOUUzNDNCQzNGRjA3RTUKLToxMDcwNTAwMENGNkYwMkNEMkZCMTczN0UzNDlGM0RFMENCQzYzQzZCMkEKLToxMDcwNjAwMERDNkQ3NjlDQjMxNzFERDE3OUUwQTdCNEEwODlGOTg5QUUKLToxMDcwNzAwMEZBRjlFNDA2N0YyRDlCMjg4OEJGMTZFRTlFQkZDMjA5NTEKLToxMDcwODAwMDc5QTE1MUYxNDAwRjI4NkY1NkY5REMyQURGQTBGQUREMTMKLToxMDcwOTAwMDg0OTdDMkVDQkJGNjNCMjE5RjNFNDRFNUQ0NzRCQzNBRDYKLToxMDcwQTAwMEVBOEZCM0E4RkVDMkZCNTRDRUVGREJGOEQzM0ZEQTgwMDEKLToxMDcwQjAwMEQ3MEQzNjExMDYzQzg2NDc2RkQyQzc2Mzc5Njg5MTNFN0IKLToxMDcwQzAwMEJGNDVDRDM3OUQ1NkEwQjdFQzUxM0QwMUI0REYxQ0U1NUYKLToxMDcwRDAwMEMxRjdCMkQ1QjY2M0MxRjQzNTFGQkY1MDdGRjNENzJCQ0MKLToxMDcwRTAwMEZFNDAxQUY4ODRCOUZDQzIzMDlGQ0UyNzQyQkU2RjVDQzYKLToxMDcwRjAwMDM1NzU3RjAyNTIyQkVCODk4QkZDRTY3MkZDQkM0RUYzOUMKLToxMDcxMDAwMEE5RDU3RkRGOUFCOUE2MTdGMDczQzEyOTQ0MEJGNkFCNTYKLToxMDcxMTAwMEI1OTVGNTFEMTE2ODREMDUxRTJGRUNGRTJDMTU3OEFDQUMKLToxMDcxMjAwMDdERjU3RkIyNDQxN0Y4RUJEODRGQ0Q1MTA5MjcyMjg0NjMKLToxMDcxMzAwMDM4NEJFN0M2MzcxNkQwRkRBNUM5QzU1REQ0N0ZCMThGRTIKLToxMDcxNDAwMERDMTc1QjZEQkU1RTkwNjNGNzZGRkM4QUY5QzFDNUREMkQKLToxMDcxNTAwMDVBNUY1NzE3RjREQkI5NUY3RDRFNEIxMkQyODA1MzIwMzQKLToxMDcxNjAwMDFEREFFNEJBMTFGQjg0RTRDMTdCNDExRjlCNTY0RERENUYKLToxMDcxNzAwMDQ0NzlFNzZCMzY0ODQyQTIzNjMzOTJGNzBCRjZDN0ZDRTgKLToxMDcxODAwMEEwN0U4RDdEQjIxNTdDMDFFOTMwQzkxRjVFRUMyM0U1NDAKLToxMDcxOTAwMDg0RDVCQUJDQjA3NTVGRkJFNENDMkVFNkIzM0FDRDI2RkQKLToxMDcxQTAwMENGREIzRTkyNkZDQzREMkIwRTRGODc5QzYxRjE0NTAzOTgKLToxMDcxQjAwMDFGQzJFQjc1MjcxMDdDMTU5REJFRUE5NzJENTFGMDNEM0YKLToxMDcxQzAwMDQ5MzQ3MkRBNUIzNDcxRkFCODEwNUEyNEVBMEI4RjBCMjcKLToxMDcxRDAwMDcwMTZBMjRGMkNFMEM3N0I5RUQ3QUIzMURGRkM4OThFQTcKLToxMDcxRTAwMDNCRjA2QUQwODMyRjU2RjgzN0QzRUZFQTQ2ODc1MDYzRDcKLToxMDcxRjAwMDIwRURCNTQ2QTM1MUQ0QTBBOUJGRUU0QkU1QjYwRjU0ODAKLToxMDcyMDAwMEQ2OUZENDNFMDYzRTNEMkVFMEY3Q0JDOEU5MzFDMUY4MEIKLToxMDcyMTAwMERCNzdCODc0MDJGQUFCREU0OTdBMkVGNTc3N0U4NzREQkMKLToxMDcyMjAwMDA0QTA1NzU5NjlCRjUwM0REQkUxMkZFQzY5RTA0QkNEMUQKLToxMDcyMzAwMDhBODBCQzVDNEI3OTdDQUYxRDY1RjVGQTgzRTA5Mjk3NDAKLToxMDcyNDAwMDJFRTE5MTlBOUVDNTcwQkI2MEY1MUU5QTA4RkE3Mzk1NUYKLToxMDcyNTAwMERBMjFEN0RCMEU5NzRGQzA3OTYzNEIyQUI1NjM1RUZCMEIKLToxMDcyNjAwMDBFOEY3NUE0MDE2RkIxNTZERTM3QUI5QThENzE1QjVDRTIKLToxMDcyNzAwMEU4M0YyQUY2MDM5RTZGNDNBRTQ1NDQ1M0JCODY4RkMyNTgKLToxMDcyODAwMEZDMEM0Qzg3RTQ0MzYxM0E1QzFCMDI4NTBFNzcxN0Y4Q0YKLToxMDcyOTAwMEYxODlDMjE0MzE4MkNBNzdBODEzMzBDRkYzQUU1MjE3RTYKLToxMDcyQTAwMEYwNjg4Qjk1NzY4NzMwOUI3NzAyRjQ5QUIwRDhCODc4REYKLToxMDcyQjAwMENDNkY0NDdBMDZDRkZGQUJEODI1M0NDRkFGNDhCQzgwMUIKLToxMDcyQzAwMEJFNDFGMjdBMzFGMjBEQkRDQjU1ODY3REUzMjNCQzhGRjIKLToxMDcyRDAwMDZCMUQ3MkZDQTgzRDJBOUZBMzYyQTQ0M0U3REJFRkJCQjIKLToxMDcyRTAwMENBNjg5Q0M4QkVEQTI0RDA4MzMxOUZBODYxQUYwQkYwNzYKLToxMDcyRjAwMEU3MUM4Qjg1RTVCMzg2MzcyMkQ3ODAyRjE4RTUxQkQyOTQKLToxMDczMDAwMDI1QkQxOUY4NTg5OTYwNzU4MTdGM0NBRUQzRTc0QTU3N0YKLToxMDczMTAwMEIxQTMyMDY4OURCNjFFMTYxRDVFQzUwRUMwNjlCQkJEMUIKLToxMDczMjAwMEY4MTBDRTk3MzZGQThFNzM3MzdGRDI1NDA3RjQxNEFBRUUKLToxMDczMzAwMDY3NDEzRjI3RUE2OEM3NjRBM0RGRTkwRUMwNzc0MTQyOEYKLToxMDczNDAwMEU5NzhCNDVCMjg5NkFDQzI3RTVCQjg1RTE1ODEyMDNFQkUKLToxMDczNTAwMERCNjA5M0UzMkVCODFDMjEwMjQzM0FDNzVENDBGOEUzOUIKLToxMDczNjAwMEY2OTdBM0Y5N0I4MzUzRDY2Qjg4OTJGQkU3Q0U3NDI5RkIKLToxMDczNzAwMDJGQUVENEQzQjU3QUZBODNGOUJBQzdDQ0Q3Q0ZDN0ZFMkMKLToxMDczODAwMDcxNEJBOUU0RUY3N0E2NTNCRkQ1NEFFQjc4ODgyNkFCQkIKLToxMDczOTAwMDkyREFFRDgwRUY4OTNBOTcwODg0MDVDREY3OEE3NUM2QjEKLToxMDczQTAwMDhCNDBEMDM4MURGNTJFM0I0NTIwM0UxODFGNkVDNjQ3M0EKLToxMDczQjAwMEU3N0EyM0I5RkM0NDVEMTJDM0IxRkJGRTUzNEM3MEVDNzkKLToxMDczQzAwMEVDM0ZDMzA0QzcyQkZCQ0ZFMkYyMTM3NTM5REZEMUZGQ0IKLToxMDczRDAwMEMwNkVGQTRGMzNDREJGQjNERjdFRkM1REVDRDJGQTgyRDQKLToxMDczRTAwMEJGRENFRDIyN0VDMDc0RDNDQTc2MjZCQkEyRkQwNjc2MzIKLToxMDczRjAwMDJGRjE3MTk4ODBEQ0Y3OTU1M0NCNzYwNUYxODc2REU5MTUKLToxMDc0MDAwMDc2NUQ5RjBCQTQ4MERGRkFDNDNBNEU2Qjc3NUQxQThGQ0UKLToxMDc0MTAwMEY2NkVFMjBCNkNFN0QwQ0I2QjQ1MUJDRjEzRkMwMkZBODgKLToxMDc0MjAwMEJENDhCNkJBQjk3Qzk3OTYwREJEQzg5ODQ3ODczQ0YzNUUKLToxMDc0MzAwMEJCNDg5Rjg1RjY0MUQ4OUVCRjQ3NjMxRjVGQjRCNjREREEKLToxMDc0NDAwMDg2N0RBQUE5NTk4RDA4REVENzA3RjRGRDMxQjZDRjE3N0UKLToxMDc0NTAwMDc5QjBEN0Q1QTAxREYxQkQ5RkVFNUQ5QzBERjhENDg0MDkKLToxMDc0NjAwMEI1RTU2MURFRkJGN0ZFMkQwRkU3Qzg1NzdCMTZGN0M1QzQKLToxMDc0NzAwMEY3QUQ1NDlGRTUwRjdCNUI4RDI3QThCRjdFQzJFNUIzQjgKLToxMDc0ODAwMDhDRTg0QzlCRjVGRDFGRkE3REVCOUVGQTVFOThDNzM2QTMKLToxMDc0OTAwMEQ4M0Q0ODJFQUM1OUY2NTZDNkYxNzhCMDIxRUY4M0UwQkUKLToxMDc0QTAwMDVGODJGODE2RUI0M0JCQTZBOTYzMjBERjdENDgzMjBGNEQKLToxMDc0QjAwMEU1ODdFRTk2NzJDM0QwM0VDMjZGNDk4M0RDRjdFMTJDQkMKLToxMDc0QzAwMEYwODk5QTYxNzYxNzU0RTFGMEZDMTY5NkI3QzM4NzM5QjQKLToxMDc0RDAwMDVDMzg5RjlGRUQ5M0MxRUJCMzQzNEVDODQwRkJBMjc4NEQKLToxMDc0RTAwMEE2RTc1NEYxQUZDOTZEMUI0MkY2NEZFMDBGMzVEQjY4REMKLToxMDc0RjAwMEJDNkFCNTc1RjIzODg1RjdEMTMxRjBBOTlBQjdCRjc4NzMKLToxMDc1MDAwMDQ3RDc1RjEzODE5RjVBOEM0QkYwNzg1RkVGMjcyMTQzNTkKLToxMDc1MTAwMDNCODk3QTlBQTNGNUJFQUJBOERFOEM5QjkzNTNBMTFGM0YKLToxMDc1MjAwMDk1RThGQTk5OTg0ODQwMTlDOUZDNjgxMEVDMjA1NzlFRDQKLToxMDc1MzAwMERCNTIwRjdBNEREMTM0QzBDMTk3RUNGMEUwRkMxQTk4QzEKLToxMDc1NDAwMDIyMUNDOTcxRDhEMEZFRjRBOTM0RUU1N0U5MTZDMzJFMTcKLToxMDc1NTAwMEFBNjBERTAzRjQzNTNEREZBQjY5NjkyQzlGOTNGRTM4RUEKLToxMDc1NjAwMEQwRDEzRjNCQUUyNUMzRkI3N0YwMEJBM0ZFODczN0RGQkYKLToxMDc1NzAwMDNBNDhFQkUyREMzMEU0NzlCQkJERTkzNkNDQjNBRDNBNTYKLToxMDc1ODAwMDkyRjU0Nzk4RjNEMEVFQzk5QkMzMDIyQUVDOEFCNkM4OUQKLToxMDc1OTAwMEQ1RDBFNzNGOEE5ODdCQjAwN0MxRTNGRTI4MkQyMjgzMzAKLToxMDc1QTAwMERBQ0Q5QTc5QzMyQUU0OTVGREYxRUVBNUEwRTc5MkQ2NEIKLToxMDc1QjAwMEUxQzBFN0QzNEUyRDI2ODNDNkFGNzI2ODdEMTM2OTg5N0IKLToxMDc1QzAwMEU3RkI2OEQ5MzEzOEU0OEJFMzI1OUU0NEYxQTBFMjJFMzUKLToxMDc1RDAwMEU3MkZFNzUzQTJDOEYxMEY0NzY5NDlFOEE3QzREMkYyRTEKLToxMDc1RTAwMEM0NTVGODY2NkQ2MTdCODM2OEU4QzFGRDlDQjc4QjhBRTIKLToxMDc1RjAwMEFFRTQ3RjAzMEU0N0Y0NzVFQ0IzODk2QjJGRDNGQUY2MzQKLToxMDc2MDAwMEFEOERGMUQ0RDM3Q0NCRUY5RTM5Qjc5NkQyRjk5NkUyMEIKLToxMDc2MTAwMEM0ODA2QTlBNzcxNkQ2NTVFNTJCRTk5QjRDRjJGMzc5MkMKLToxMDc2MjAwMDlCM0VFRjY1RkFCQ0FEQUVBQ0UwRkQxQzNBRUY3QTQzOTEKLToxMDc2MzAwMDVFRjk4NUMyRkEyMEZGNTBGRTE1NUZBQ0ZGNUVDQTg3NzcKLToxMDc2NDAwMDU5MkU3RDMwMERFN0Q2MjAwQkRCNDkzNjg0RDNERTIyNjAKLToxMDc2NTAwMDNERjI1RDdEOUU4RkQzQkU3M0M0RjFGN0Q1Rjg5RTE0QzUKLToxMDc2NjAwMDJFREIyNzNENkNGMUMzN0U1MDNDNzYzN0UzRTlDOTlBQTcKLToxMDc2NzAwMDQ4OEY0QTYzOTUwOEI3MUQ3MjUwOTlGMEIyNUNGQ0Q5RTcKLToxMDc2ODAwMDk4QkZFRDY5QTU3NTE1NjY2OEQ3MDE2RUYzRTIyREE5NUYKLToxMDc2OTAwMDFGRjAzQ0I0ODE1MzIwNkY4RDkyRUJGODE2Nzk5M0Q3OEQKLToxMDc2QTAwMDMxNTVCODZDMkM5NDg5MzUxNkM4MUY1MzVENzIyOUYzNzcKLToxMDc2QjAwMDE1QjkzRkE2MDlBRjBERTNDRDEwMUFEN0ZCQzMwNUJCMjMKLToxMDc2QzAwMDE3RkFDNDFGQTAwQkQxQkM2NzBBMUY3RjlGMkRGQzlDMUIKLToxMDc2RDAwMERFMkEwMjVDRkZDN0EyOTVGMzA2QkM4OTNFRTYyNTQ4NzgKLToxMDc2RTAwMEZBMzhEOTUzNjVGOERGOEM3OUJGMTc5MUQ3NjcxOUFEOTAKLToxMDc2RjAwMDYzQ0EyM0Q5OTlBQzVGQURFQkMxRjBGOUFFNzk0RkQxMzQKLToxMDc3MDAwMEU5ODZGNkVGM0NGNDgzRkQzQjlERkE5OTdBNjNDOEZFNjcKLToxMDc3MTAwMDJERUM2MUUwMzNGM0RCRjY1MTRCN0I4N0ZFMTQ5OTRDODMKLToxMDc3MjAwMDcwQjg1RTQ3RTlGNURFQzVBQzNGMTVBOTkxQzI0N0Y4RDAKLToxMDc3MzAwMDY5MTlBNUZBMjE3NzFDRjIyRTRGNDhBMDc1RENGREI5MTYKLToxMDc3NDAwMEQ0ODM3RUI3NUNCQzNEODRDQTdGMzc0NjE1RjVEQ0QyNTYKLToxMDc3NTAwMENCRjJENDY0QkQ5RkM5QkRDNzlGODY5REY1QjAwODI0RjgKLToxMDc3NjAwMDBDQTVCOTE3NURENjVFOEZBMUY5NEU1NkI3MzVDNDUyMzgKLToxMDc3NzAwMEY5ODRERUE0QzcwNEYxQkQxQjEyQjY1QkExRDdEREQ4MjYKLToxMDc3ODAwMENGRkM3RDYyQUU1OURGOTkyNDFBNTVDMDc5RjI1MDczNEYKLToxMDc3OTAwMEJEN0Q4MDBGRDFENzhBMENBOUI3ODgwMTYyODBFRURGNEEKLToxMDc3QTAwMDYzQjlGQjQ3N0ExRkVEMTMyRkQ5RTEwQjc5MzU0M0JCNDIKLToxMDc3QjAwMDA3NzA1QzNBRTlCM0I5MTg1NzU4RTU3QTZBREU1MUQ5Q0YKLToxMDc3QzAwMDlFNzc4Q0U0MkMyRjlEREZDN0VCRTg4NDA4OTNGMjA4QUEKLToxMDc3RDAwMEYyQTc0ODZFNDA3QUE2Q0VDREU5MzkzQUU3NTE3RUExQUMKLToxMDc3RTAwMENFMjNFQjY3MTQzRjgwN0Q1NkJBRkE3MzJCRjA3MkI3NDUKLToxMDc3RjAwMDUzQzJGOTZFNjdBQTFGNzZCNThBQTZDNkYxOTg1RUU1RjAKLToxMDc4MDAwMEFFQTY4MzQ4Q0IwM0M1RTM3MUNDMkUzOEI0RTQyMEQyQjYKLToxMDc4MTAwMEJCM0JGNEI2MjUwRURENUZDMEYzQkY1REE3RDNEQkEzOTIKLToxMDc4MjAwMEE2REUzNDg4RjZDOUVEQkJBNURGRUJGNjNFNTNBNzREQzcKLToxMDc4MzAwMDRBNDBERUM2RjlFRUU4QThGQUIyMjIzNERBMjJDRkE4MkUKLToxMDc4NDAwMERFQ0Q1OEI3QjdGOUU4QzE3ODVBRTdDOUJBMTEzQ0ZGOUQKLToxMDc4NTAwMEQzNzU1RTlFRkZEOUJBMDk5Q0ZFM0RBM0Y4MzlBRTI3QzkKLToxMDc4NjAwMDNFNjc3OTZDRDJCNkEzRDYxNEFBNUZFNDU1QkNEOEI3RUMKLToxMDc4NzAwMEQ3N0E4NURGNEY3NEIxREUyNkNGODFGNTc0MEU2MDFGOTUKLToxMDc4ODAwMDhGMTkzNEY1RjEzQjMwRTkwQzZEMjdEQUNGQjg3MTUxMUYKLToxMDc4OTAwMDExQzY5OTNDQTJDNDhBN0EzM0JGMTYyMjNFQUQ5MzRFREMKLToxMDc4QTAwMEJGOEJFRThERjU1N0VCRjgzQkJGNTc2MTc4OUVERjFCMjIKLToxMDc4QjAwMENCRjA2Q0RGOTExMTAzRjk2MEU5Q0U4QzlFNDg4OTZGQTMKLToxMDc4QzAwMDFBN0E2RjA0RTBENzdFRDlDMkYzNkRGRjI4OUNGNThFM0IKLToxMDc4RDAwMEQwRjY0Qjc3MEVFQzg5N0E2NzA5REYyMjQ4REUzQ0ZCNTUKLToxMDc4RTAwMEZDN0ZCODgzQ0Y5NUIzNzE0RDVGN0QwMkZFRjY1N0M5MUIKLToxMDc4RjAwMERGNDhCMjM5RjExOEY4NUZFRjVFMUVEMENCMDU1RENFRTAKLToxMDc5MDAwMDI2M0QyMzAyRTc1RjhENkU1NzA0N0Y0MkZFNkNCOEI0QkMKLToxMDc5MTAwMEU3MEU3RjIxNjUyQ0Y2MTdDNjczMTM5Q0MzMUMxOUI5OUIKLToxMDc5MjAwMEM3ODc3MDdGNDc3RTQ2RkRCREZDNTg5MjA3RkFFRkI5QzYKLToxMDc5MzAwMEVEOEZBNDYzRkNBRDRERjMzRjc5OENGQTNGRUZCN0Y4QzAKLToxMDc5NDAwMDZDNzQ0RTlEMTc0RDE3NUUwNTFGN0UyQTkyRUQ3Qjc3NTYKLToxMDc5NTAwMDJCMzQyRjlDQzM5QjdCNzEzRTQ3QjE4NjJGQzMzOTJDQTAKLToxMDc5NjAwMEZDQkNDRjczMTRCNzc1MTlGMUFEQUExNzFGRUQwNTdBREEKLToxMDc5NzAwMDdDOEQ2MDMwODJDQTVGNUIxQkMxN0NFRDM1OUJFN0M4QTQKLToxMDc5ODAwMDMyRjRGN0I4RUNFRkU5RkJFRjNDQjYwQkU5N0RENTA1MzcKLToxMDc5OTAwMDc3NTJGQTY1NDYxQ0UzQTFGQzgxNDUwM0QwOUVDRTc5NUYKLToxMDc5QTAwMDkxNENGRDNERjc4QTEyODBCRjZBRDBCQTdEMkI5MjY5NTcKLToxMDc5QjAwMDdFODMzNzFDQjVGNEEyMzRGRjI5QTUxRUU5QzAzRTM3RUIKLToxMDc5QzAwMDFFODJGREY5NkYxOTZFNkUzRjY0NUI5QTlBODI2REQ5QzMKLToxMDc5RDAwMENCRkZDOTc1N0NGRTlCRTU4MkRDNzU5RjhGRUQyNTNBNTgKLToxMDc5RTAwMEU1ODMwMTRBRDM5OThEMzREN0IwRDQ4RjBBMzQ4NjYzQTYKLToxMDc5RjAwMDIzQUY2NzY3RjNCNEY3NkYxNTU4MDc0OTFFOTg3Nzg5NjcKLToxMDdBMDAwMEREQzNFNzkxREZCNzExNzgzRUFGRTU3ODU4QkYyQkY2QkQKLToxMDdBMTAwMDNEMEE3QTNCQUYyNTdBNzAzRUJENENGQUZDRDVBODdGNzMKLToxMDdBMjAwMEM0Q0FFQjdDRTVBOUY3QTI2MURGODkyMTNERDkwOUJGNzIKLToxMDdBMzAwMDQ4N0VEQjc4RDRBRkVFRTMxNkYwODdGNTc5RTJGQTA5RjkKLToxMDdBNDAwMDgwNEZDRDhFOUQxQkI5OUYyQTg3MDdGQTZFQzVDRTRCRkUKLToxMDdBNTAwMDA3NTMyMDJGREUyMDNDOTlBMEM3MUQzMkZGQUI0MkFGNTkKLToxMDdBNjAwMDQ3QTVBNTU2NkNGQzUyRTY1QjhBMzk1RjRDREEyN0ZDQzkKLToxMDdBNzAwMEZFQTI0Q0NBNDk4RkU4RTdBMDY4Q0Q2MzdFQzkyNEVFMTgKLToxMDdBODAwMEVFQzREN0FGQTgxOEU1RUJEMzdDQzlCMDZGMUJFNzI3Q0UKLToxMDdBOTAwMDlEN0JBOUZEQjA2NUVDQjI3RENCRDg1QjUzMTkyRURGODEKLToxMDdBQTAwMEYzRENCM0VCRTc5N0QxREYyMzc2RTE3MzUyM0YzMERGQUUKLToxMDdBQjAwMEMwOUVCRUMxMkVDRkVCQ0RDNDY3NDAyRkM2Nzk0REUzMkIKLToxMDdBQzAwMEU2RjU5M0VEQkRFMEFGMjlBQTMyNjgwN0MxMjNFNTkxNDEKLToxMDdBRDAwMDMwOTYzN0JFRUZGOEIzNjI1NkYxRjk2REM4NUJCNUUxODkKLToxMDdBRTAwMDkyMkZGMkQ5NDFFRDVGODhEMkFFRUUzNzBDNzYzMjc5MjMKLToxMDdBRjAwMERFMEJBQjNCMTdGMkM4RTM1MURFNkJGQUIxQkNENTk2OTcKLToxMDdCMDAwMDhBMzVEMDM5N0ExREU2NTNBMzkyRkM5NTExMjQ3RjQ1MUUKLToxMDdCMTAwMEM2N0RBRjczMzQxMEU1MkQ0MkZCRUY1QjdGNkMwNENENjcKLToxMDdCMjAwMDMzMDYyOUYxRUY2OEE0ODZERTQ1NUE0ODk3RkMzOTdENzMKLToxMDdCMzAwMDVCMTNGOEYzNDM2MTkyM0Y0NzBENjFCRTY0QUMzMzc0NEQKLToxMDdCNDAwMDlDMDNDNDA3MzRFMjNCNkZEMDM5QTMxMTNGMTgxNzM5QTcKLToxMDdCNTAwMEM2Q0E3ODdEREQ1Mjc1OTBDRUU1MjIzOTAyMDhEQTFBNjAKLToxMDdCNjAwMDNCOTRGM0RFMjg4MjYzNjFBNDJBQjQyRUY0NDcyMzI1RDQKLToxMDdCNzAwMEJDQ0RDNzNBQzcyNzQ0OThFQTE1MjVDNERBQjE4RkJGRjAKLToxMDdCODAwMEVGRkE1NTFENEY2QUI4M0NCRkQ0NzA4M0JGQkExMzc0NjcKLToxMDdCOTAwMEJGN0RDOEZBRTU3QTZGNzcwRTYzQkUzQTU2Rjk3RUVCODEKLToxMDdCQTAwMDJFQjIxNURGMDkzQzhGOEJDQ0U3NzM3MzVDRTQ5NDIzMTIKLToxMDdCQjAwMDlBRTA3NUQ0RTE3QkU4N0E0M0Q3MjUxQ0RGNEY4RUZBMzMKLToxMDdCQzAwMDg5MjI3QzE2RUNDN0NGRUQ2Qzc3NkJCNkI1M0VGNzVCQzAKLToxMDdCRDAwMDgyNkJGM0EyNUMwRkVDNDcyRkQzQkU3MDgwOUY0RUI1MzMKLToxMDdCRTAwMEIzOUNEQjBDRDk5MkVBMzdGNzcwNzE1Q0NCNkJCQURGRDAKLToxMDdCRjAwMERDMzc1QjZGRUYxNDdDQkUzNENGRUVDNTdFRjQ1RTYxODQKLToxMDdDMDAwMDM0MTBFQzQ4RjVEMjZGRDI2QzVCRjIxNkNFRUJFNkU1QTEKLToxMDdDMTAwMDI5MUU5QTgxNTBDMUVGNjlDQjdDRTQ5N0ZDQkM1RTA5QjgKLToxMDdDMjAwMERDMEE3RjgxRUY3M0JCNDBGRDc1QjFGRUQ1RTk5NDVGM0YKLToxMDdDMzAwMEY3OEIwQzlFQ0Y0N0E0OEZENzYyQkM4QTcwRTY1QkVCQjQKLToxMDdDNDAwMDYyQkRDOTcxMDQ5Rjk3RkZBMUYyNzlCMjJFOUZGMjkxOTQKLToxMDdDNTAwMENDRDdEOTZFQjM2RThBMzcxOTdFQUQwNDFENkZFQjM2NjMKLToxMDdDNjAwMENBRjI1RUIwOTNBMjNDNERCNkZGQzQyNkVCREZBMkQ3QUEKLToxMDdDNzAwMDRCRDBGMUZCQjE0RUE3QjRGRjk5M0Y2ODkzMjNBQ0EwNjIKLToxMDdDODAwMEZGNzdGQjk1QkVDNkZCNDY3ODkzRTExNzdBQUMzQzkzMzEKLToxMDdDOTAwMDZEOThCNzU0REU5MEM2RjRBNERCRDM2NkU5RkNEQ0U4NEIKLToxMDdDQTAwMDE3MEQxQ0MzMjE0RkNCOUZEOUYzMzczQjQxREYzMzJBM0MKLToxMDdDQjAwMDlDNDcyMTFGN0U1NEIxMjIwQTdBRkQwQzREMEQ4NDIxNzAKLToxMDdDQzAwMEJFNkE3QTkxQjc0M0FFNEJDN0I4NUUzOTZFQjlBMTFGOTEKLToxMDdDRDAwMDA2Q0EwMERGQkQ2RDBFNzEyRkNCRkY4MTIxQzFGQTk2NjAKLToxMDdDRTAwMDgxRTc0NUZBQkVBRDZFMUFGMzYwQjA3RTVENjkyN0ZFOEUKLToxMDdDRjAwMDMzMThFNTcyM0Y1NzQ1NkFCRjA3N0RENUVFQkFFMUMxM0IKLToxMDdEMDAwMDYwQkRGQjU0Rjk0Mzc5QkNFRkY0NzFDRkQ1NzkxRjNDQ0EKLToxMDdEMTAwMDlFMDkzOTZGMDJBN0M2QjgxREZBMTFGMDQ5RkRGNkQ1QzQKLToxMDdEMjAwMENGNzNEQUVGM0UwQkYwREFFNDk0RkE5MkI1RURFMzg1MjcKLToxMDdEMzAwMDk0QUY5RjM1ODBDRkY3MDk1MzFENUVEOEY1REE3Nzg0NkQKLToxMDdENDAwMEY5NjFBRkFEOUYxNUVFQzVCQUVBRjc0NEY5NjE1Nzk4RUUKLToxMDdENTAwMEE3RUYxQkQyQkJGOEJCNkZCQjhERTlBRENBRUU3RjY2NDgKLToxMDdENjAwMDBCQjVBQkRBREI5RkU5ODlFODk1RUQ5NkJFNTcyMzY0NDYKLToxMDdENzAwMDc5QjQzNzZERTU1MDk0Rjc2NEZBNzlDREU2OEVFMUYyODcKLToxMDdEODAwMDM3NTVDMUU1RTE4MUFDNTg4Mjc3OUI1MzNCODU3NTEzMkMKLToxMDdEOTAwMEJEQjJGREJDQ0EyRUJGMUZEMUU5MTJGQTI1RkJGRjk2NkEKLToxMDdEQTAwMDQ0NzFCRjQyQ0Y2QjNGOEY2NzdENEY1OEJEQzlGMzkxODAKLToxMDdEQjAwMEJGN0QyMEFGNDdCM0NCN0QyMTZBQTQ3RTc4QzQyNUU3ODEKLToxMDdEQzAwMDc1QTQzOTlFRjc4NTQxOEY0NzhBQjdEQzkzOTU4MEVGN0MKLToxMDdERDAwMDI0QUZEMkZDRkVCMjRDMERDMDFGNkVEMDlGMzJGNUYyMjQKLToxMDdERTAwMERCNTc1MUJCNEY1RjU1RDk2RjMzRTdENzhCMEZFM0ZCQTEKLToxMDdERjAwMDlDMTVENTEzMzlBREJDNkIzMjlGQ0JGNTFGQTdFRUEyRjYKLToxMDdFMDAwMEYyODRBOUE3RDhCRjZCRTA3RjRFOTVEOTlGOUE5OEU5RDUKLToxMDdFMTAwMDU1MzM4MURGNUNGRkY2ODM1NEZGRTFEOTI3MTYwMEFGQUQKLToxMDdFMjAwMEMzMzMzNTQ3MjZFQ0RCRjZENjk3RkY0Q0YzNkQ1REZFOEEKLToxMDdFMzAwMDI3RDZBMzM2NDQ2QjExRjg3RTcxRjdEMzVDQkY2NkM1QjUKLToxMDdFNDAwMEZGMkM4MDdFNTA2Mzk1NzQ2MzlDREJCNTNBM0RCRjkxRjcKLToxMDdFNTAwMEE5QzVBMkZGQUExNUJGNjMzRDIyMjJCNzQ1RjJEN0JCMzEKLToxMDdFNjAwMEJFMUYzRjNBRDNCQ0Y5NjU4NURBMkQwRTZGQUVFMTU0RTMKLToxMDdFNzAwMEY1RTdFMUZDM0JBQjA0QTI5NTBDODYyQkVCNzVFNzVDQzgKLToxMDdFODAwMDgxNjhFMDQ3QjM0OEI5NzJGMUQ2MTBCRjMxNTA5MkE4NkIKLToxMDdFOTAwMERCOEJBOERERTIyNjU1OEY1N0Y0REI0MUE3QTFGNTE3NTAKLToxMDdFQTAwMEQzNzdBRUY3M0RCRjU3OEEyNkY5M0Q3NkQ3RkRENzMwNTkKLToxMDdFQjAwMEZFNDUwMEZFQUUzM0NGNjQ2RTAyM0Q5Q0RGRjk3NDU2ODIKLToxMDdFQzAwMEIwOUYzNjM0QkQ3MkJFNzJGREU3RjQ3RDczOEVCRUQ4QUUKLToxMDdFRDAwMDQwNkZEQkMyNENGNjg1MEJDRjI0RUJGNDI2RTlFOUMyRjgKLToxMDdFRTAwMDMzRDlFQ0U3NEVENEY3RDkwNUM1NjcwOTQ3QkI1RjA4MUUKLToxMDdFRjAwMDhFNjcxMDlFQTZFMTFDOTdFMzZEMUEwRUI5RkI2MTlEN0IKLToxMDdGMDAwMDJGMkU4RTZGMUEwRUJFNjdGMDQxRTE2OENBNjNCQjQxMjcKLToxMDdGMTAwMDRFNTMxRUY0NjQ4MzdGOEFFMkE2MkNGRUVFNkZDQTQyQTMKLToxMDdGMjAwMEZCOTcyREQyMEU2M0NDQTdGMkI5MTQ4RTdCQTJCNUYwQ0QKLToxMDdGMzAwMEZFQUU3QzZFRTAyNkU0OEQ3MUVBOUQ5MkVGRDQzQjI1ODcKLToxMDdGNDAwMDdGMDk1REI3OTYyOUVERThBNDRGRTYxRUE3QjNBNDNFQ0UKLToxMDdGNTAwMDk2RjQ4MjVDRTQ5MzY1REUyOUYzMEIzNzk0RDhFMTZGRTUKLToxMDdGNjAwMEFGQjdDOUJDNkI3RDg5RkQxOEU2RjczNTY5QjVDNDRGNUQKLToxMDdGNzAwMDczNzRCRkM1MDI3RkE5REQwQkZCRkVGQUU1RTExQzNGNzAKLToxMDdGODAwMDMxREIzRUNGNEI2OUY2N0FCQjY5NUMwMzBGRkRGREU2NDIKLToxMDdGOTAwMEVGOEJGNEY5RjQwRDg5MEJFQUE1QjZFRDBCQzMzOUY2QjYKLToxMDdGQTAwMEE0RTgzMjhFNjA0OUE2QjRFMzNFRkI2QzQ3N0M5MUFBRkMKLToxMDdGQjAwMEVCREJDMjZERDBBMTVCRUExQjhDRDc4RkVEMDY1RUVGQzkKLToxMDdGQzAwMDQ4QTFGOTJGRDZFM0E1NUVCNjQ4QjhGQTlFOTU3Q0UzQTIKLToxMDdGRDAwMEU1N0MyRDA1RTdENTA1QzAxREU3NUMyQ0U1NzMyMUVGOTkKLToxMDdGRTAwMDQ5QkMxOTc5MDM1RkExRjA1REYxRjE4MjE0RDg5NTlGMjYKLToxMDdGRjAwMEM4OTRGNkM3NTA3QzJDOEYxQURFMTNFNTA2NUNDRkQ0RUMKLToxMDgwMDAwMDFEQ0EwMERDOEQ3NTlEQThGMzdBRTk2OEVCQjRCRkFGOUIKLToxMDgwMTAwMENGNzc2ODhDOEY3QzQ3MzA3REQ3NkYxRDcyODgyNDIwODYKLToxMDgwMjAwMDcxNkVBQkQ1ODMyNUQ0NUJGREY3NDNCRkE4REZBQTM2QkQKLToxMDgwMzAwMEY5MDQ5NzNCODA5NzczOTFGQkRGNDFCRDA1MUI2MjBCRjEKLToxMDgwNDAwMEEwMEYxOEVEMTdBRTJGRjI5NjA3Q0Q3QkUwNTYzMzVFRUEKLToxMDgwNTAwMDA2MzU5OUYzODM3Nzk5RjM1QjcxMDYwREZCRTdEQkU1NTIKLToxMDgwNjAwMDA3Q0NGOTIxODdDQ0Y5OTMxRkRDNzEzM0I2NEY4NUVBMzEKLToxMDgwNzAwMEJCNUY4NUJFRjNFN0YxODc3MDRFOUY3QUY5OTU2OEUwQTQKLToxMDgwODAwMDZCRjE1RkNCMEY0MjhGMEI4RDY3MjEzQzJBRDA3MzdDNDUKLToxMDgwOTAwMDVCMTRBNjk3MkJFMjVBQkFFMTQzNDZEQzA2NzY2MjMwQkYKLToxMDgwQTAwMERENTQwQURGNDE2QkRBOTVGNUNGOEFBNjlCQkQ0NDY3QTQKLToxMDgwQjAwMDU1Q0JERUNGOTA3QUIzRUM3NzY0RDM1QTNCRTRDRUQwODUKLToxMDgwQzAwMDcxQkJFMzNCMjJEMkVCQzYzRTJBMTkyMUNCQUU1RTM2MTIKLToxMDgwRDAwMDRFN0M4QUZFRDZCQzM3MUVGNDU4RjIyQjg1RTU5QjkyNjcKLToxMDgwRTAwMDk3QjI1RjA3REQxQ0REM0VGQjQ2NEU2RjlFQzBGMDMwNTEKLToxMDgwRjAwMEVDOTIwQjlCOTU0MDE0RTU1RDIzNDQ4NzdGMUZGMThCMjkKLToxMDgxMDAwMEE1MEQyMUYxOUY2QjQyRTI4MkQ2OTlDQjE3RUVEQUY3RUIKLToxMDgxMTAwMEZGMTA0NzUwRTE3ODgyRTMyRUFFOEM2N0Y0MUY4MDVFM0IKLToxMDgxMjAwMDU5Nzk0QUIwN0RBQUYyQTk2RkMyQ0NFNTcyNURGM0Y1MjgKLToxMDgxMzAwMDc1MThFN0FERjA1RENCRjE3QjU3Q0JBQUUyMzhGRUEzMTMKLToxMDgxNDAwMDczRTlBODRCM0I4NTczQ0IzODc3QUY1RUI3NTE5NUYyOTcKLToxMDgxNTAwMEJDQjc4NEZEQzg5MTc2OEU4QkFDNzY4ODQwMDRDREVCOUQKLToxMDgxNjAwMDUwOTREREVCQTJFRjk3RDY0N0IxQkNCMjgwRTQ1Q0U4NTcKLToxMDgxNzAwMDhCOTQwQTI3Qzc0RDdBNjJEMEVFQzRCQjJBQ0I2NUQ1NTMKLToxMDgxODAwMEYxMTIxRUQ1QkY1MUZDQjAxRDU3QzNBODhCRkM5MzMyMTIKLToxMDgxOTAwMEJGNDgwNEQ4QkUwQjNBRjIwNkFEMDNGODBCQ0U4QjQ2QUYKLToxMDgxQTAwMEE5NUY1NjU5MDNGQjAwOUY4RTczNjhBQkI5NUUxNUFEOEUKLToxMDgxQjAwMEYzQTMzOEM4N0JFNkVGMzVBMjhERUJEN0VFRkEyNjJDNzkKLToxMDgxQzAwMEY4N0I5MDNEOUFGNTVFNDNGRjU2NzVGOTRBRkQ2NTM4OTgKLToxMDgxRDAwMENCNEY3NDIwODQ4M0JFNkNCQURDQkVFRTFFOTIyMzY4NDMKLToxMDgxRTAwMDdEMkIwRDdCRjg1QTI5REZEREIyNTE5RTYzMjQ5RjY3RkEKLToxMDgxRjAwMDAxNEVFQkQ2OTI3Qzg2RUZBNDZGMjBDRTQ0MkMwQUY3N0EKLToxMDgyMDAwMDRCRjk1RUVBMEJFQjY2NjdCMTVDRjRGMjNGNUUwQTQwNDUKLToxMDgyMTAwMDFGNjk3QjQ4NjFCQkQyQkE3Q0Q5RUZCQUZCRkE3MzM5Q0MKLToxMDgyMjAwMEY4QTdDMkUzODRCMTFDQjY2RThBNTFERTg3RjU5MTRGODAKLToxMDgyMzAwMDMwQzU2NEM4RjlGQUY3MUU2RUZFREU0QkY1NjZDMTNFMjYKLToxMDgyNDAwMDIyMUU3NEIyN0RDNDkwRkIwREI5QkUyRTU2Q0JDOTFBNDYKLToxMDgyNTAwMEQ2QjlGRTc1QjE2RDUxRjBCQjg5OEFGOEVGMjVCNzZDQzAKLToxMDgyNjAwMEQ2Q0ZFMzM2NUEzRkZDMkFDNzk1RTI4M0YwOEYxOUY1NDMKLToxMDgyNzAwMDQ2NjZDOTczNjVGODU4RUYxNkJEMUVGQjVGQ0EyRDUzREQKLToxMDgyODAwMEVFQkQ4RUU2NTVGRUIwQzUwRDdCQTE4MTA3RTFGNTY2MUEKLToxMDgyOTAwMDAxMEVDN0Q3M0EwQjQwNzdDM0M3NEE3QkQ5OTE3Q0M5MzcKLToxMDgyQTAwMEU3MjM4NjBBOEUzNzFBQUJGNzNCMzZDQjYyNEE5M0MyNzYKLToxMDgyQjAwMDg5MUVBOTlGRTM0NUQyMUUxRjM1QjQ5OEVEOTYyNDEzNUQKLToxMDgyQzAwMENDRUIyQTZFNjVCMkRFNEZCOUJERjhGN0EzQkI5ODRGNzEKLToxMDgyRDAwMDA3NUQxNDRBRjlGQkY4NkRDQTI2MzkyRjJGQzcyNzBFMDAKLToxMDgyRTAwMDdGQzBDOUY2Q0VFM0ZBMzk2NEUwODFFODY4MThDQjBGQTUKLToxMDgyRjAwMDNBNUY4QjBEQTE5QkI1QTAwNzlDODdBMDA3MjU5ODZFQzAKLToxMDgzMDAwMENDNzQ3MThCMjJFMTJCRUU5M0YyRjdCQTU4OTkzN0U4Q0YKLToxMDgzMTAwMDgyRjQzRkYxQkZBMDlCMjJDMUYwRUY0RTBGMzRENkRCQjkKLToxMDgzMjAwMDlEMUU0ODc0QjAwODc0RDA1MTJGODQwRTg0RDUzRkVDNDQKLToxMDgzMzAwMERCRkM0MkE1MjM2Mjg3MkI4NDgyMTRBQkYwMjFDRTE3OEQKLToxMDgzNDAwMDY3MjRDM0VCMUVBQjFGQjE3OEJEQUQxMjJGN0RBQzkyN0QKLToxMDgzNTAwMEVFRThCNEYxODUxNzcwN0QyRkUyN0Q0QjFFNUMyOEJDRTIKLToxMDgzNjAwMDU0QkYyNDQ1QjA3REFEMUZDOTU1MzE3MURDNEUyMDQ1NDkKLToxMDgzNzAwMDU4OEUwQUJCMTNBNTY4NUYxMjIzRkIyRkU5MjkzOEZFMkMKLToxMDgzODAwMDhFRkFGMzVBRTI3NEU2MzYxQ0ZFNUVDMTcyMDVEQTQ3RDUKLToxMDgzOTAwMDE3NzA3QjlGNDVCNkY3NUEyOUVEOUIyMUY1OThCNjk1NDYKLToxMDgzQTAwMDYxMUNCRjVDNzI3NzlGMkNEMEM5QzRCMTY2M0EzOUEyRjgKLToxMDgzQjAwMEQzOTU5MURFOTRFREQ2OEQ3NTlFMjRGMDgzRDI4NkZFMDIKLToxMDgzQzAwMDdDREVENDNCOEJBQjc3MDI5RkNGNDdCMEZDNTlCMkVBM0YKLToxMDgzRDAwMEM3OTM4NjYxN0UyRkM0N0I4MEMyMzM5M0I3QjMzRkE4MTcKLToxMDgzRTAwMEI0NjFGNjRGM0U4NEJFQjRENUM5REYyQkIyQjVGNTU5QTIKLToxMDgzRjAwMDkwRkYxNUY3REM5REY0QTE3NEM2MDE3QjEyQjVENzlBRTYKLToxMDg0MDAwMEE2OUM3Rjk1RDJDOUJFRURFRjQwOUU5ODNDNURFNUZBRjMKLToxMDg0MTAwMDkzODVCNDNGOEIwNjM5Q0UyNERGRTdENjI0RUE2RkQyQUEKLToxMDg0MjAwMDI4ODVDMzY5OEUzQTVEQTlCN0MxMEZBNEUzRjdBOTJDQ0IKLToxMDg0MzAwMDQ1OTc3RkU0M0Q4MTkyNTU3REIyRDI3M0UxM0YyMUM5REEKLToxMDg0NDAwMEI4MEIzOUZENTNBM0ZFMTg2NTAzRTRBNUJFRTNFNEZFQjMKLToxMDg0NTAwMDMzRUFBMzFGRjQ3QjNBNEJDQTU1QkZENUUxNjJFNDA5NjYKLToxMDg0NjAwMEFFNUNCRjdDNzVEOEQxOEM2OEE0QjY0MDM2QTVFOUZENUEKLToxMDg0NzAwMEM3QkU4NDc1NEU0QzE3RTNENzAzRUU3N0FBNjIxM0NGQkQKLToxMDg0ODAwMEI3QUQ4NEY5NDI1NDk2MUJGNEFCOTE0MkNERkFFM0Q2RDIKLToxMDg0OTAwMEZFQ0MyNzhGOEU2OTNCN0EzN0U1OEY2RTFFMjRFRDhDREMKLToxMDg0QTAwMEJBN0Q2MUJFNEJCMDdDNzA3NDhDRTQ3NzZEOUIyMzk4NzEKLToxMDg0QjAwMEZFOEZCODVBQTNFMkE0M0Q4RUVEMEQ2NTNBNDk3Q0I2MTUKLToxMDg0QzAwMEFDRkU3RUY4QjlDQjIyRUQ0NzcxN0VDQzdGNjgxQUM3MkYKLToxMDg0RDAwMDI3OTRBRDUzMDM2MUI4MDdCMEM2NkM2RkE4OEFENERFODkKLToxMDg0RTAwMEM2N0UwOEI1MUI4NERBMDc0MDMzQTBBM0YyMzUwQUQzNTEKLToxMDg0RjAwMDYxREY3QThGM0Q5OUY5OUNFMkMyRkFDQTIzMDNGRDcwQ0QKLToxMDg1MDAwMDBFOTQ3QjlDMUNDNzdDODVGREUwNkI4MkZCNzBEOEI5MDgKLToxMDg1MTAwMDA1MDc4OUI1Njc2QjlGMDA0RTI1OEQyNUFDRUY0NkU0QjYKLToxMDg1MjAwMDZBQ0NCRkZBQUEwNDE3RUMxNzlERkUyNkMyNUUwQkJFRUEKLToxMDg1MzAwMDY0NkQ0REM2QkVGQzU1OTY5QkYxMzAzMUNFOTUxNUM5ODQKLToxMDg1NDAwMDc0RURFNEZCMTE0NzZEQUUyQ0NDRUZFODRBQTcwNUU3Q0MKLToxMDg1NTAwMEVEQzQxNTkyQkU2OURGMzk3MDhGRTExRUFCMDgwNzNGOEQKLToxMDg1NjAwMEQ4OUEyNUZCOURCM0RDNUFCQzkxRjJCRDFEQzIxQTE1RTkKLToxMDg1NzAwMDA3RkFDQTY3RkE1RUQ4NUZGQjJERTY3NUVBMTc2MjA0NTAKLToxMDg1ODAwMEU0ODlCMjM1NkJFNUJDNzRGQTEwRDY5NkMyNzgxQUU3NjYKLToxMDg1OTAwMEQ0RTZCNDAyRDgwMTNBRTREQkZFNjNEQjAxQzcwRUJBQ0QKLToxMDg1QTAwMDk4QUUzMDNERDA3QTBFQzE4RTlDREVCRkY0MzJDQUU5NUYKLToxMDg1QjAwMEZCM0VEMENCQzRCMTgxN0U4ODFCMkY1MkFCMzhCRUI2RjgKLToxMDg1QzAwMDNENDk3OEUwNzc2QzE3NkQyQzhGQjQ5MzNDMDJCRTY3MDEKLToxMDg1RDAwMEYwMTk4MzlGMTA1RDc4MUQ4OTlERjhERTUyNDc1MzIyNjQKLToxMDg1RTAwMDFFQkVCNUNFQzFFOUIzNzUyRTYxMjU3ODZGQUI0QkUyRTcKLToxMDg1RjAwMEZDMEI3NTZFNEU5QkVBNzJGOEZCOEI3NTFFQ0VFRkE4RDYKLToxMDg2MDAwMDFCQzFGOTk3RUJCQzlDREY1NTM3ODFEMzU3RUI4QUY5MzcKLToxMDg2MTAwMEJCQzFBRjA4M0VDQzk3MENCRTYzRjAyNzgzQkUwQzNFQjcKLToxMDg2MjAwMDE1NEE1NzczMDlDQ0I4MTc0MUVEOTkxRjFBN0MxMEVCMDYKLToxMDg2MzAwMEIwMTQ3NEYyMjcwM0NGRTk0QUIxMkYwOUZDNTBCNENFMkQKLToxMDg2NDAwMDA2RkYyODUyQ0YzREZGMEFDMUI5QkQyMjkyRUQyMkVEQUYKLToxMDg2NTAwMDQyRjJDMUY2NDgwNzlGMDdBOTc2QjEwQkY2ODlGQURCMEIKLToxMDg2NjAwMEJDNDdFRjBFM0E4NzZGQUQ1MDg0MzU4ODhFN0ZCQ0M0MEYKLToxMDg2NzAwMDI5QUM0MTc0M0M2RjU5QUMyOTNGNjdEOUZCNkZGNEE0MTYKLToxMDg2ODAwMEZFREY4REQxNzJCMzY5MUU0NzdFNzlFMkYxM0ZEMUY3RUIKLToxMDg2OTAwMERGRkNGMjRDMjZGMDRFRjNEOEZDMDhDNkJEMkI1QzlGRTUKLToxMDg2QTAwMDQ3QUI5Q0Q3NUQ3Njk2OTdGQTg2NEI3REFCNkZCOEQ0NzcKLToxMDg2QjAwMEI3RjBFMzA4OEFDRjNEQTJFM0EzMjQyREY2OURBN0IxMkUKLToxMDg2QzAwMDZGRUNBRTlCNDdDMDRFQjQ1MkRFNEJGQTA0RjhBM0YyRjcKLToxMDg2RDAwMEJGRThGODJCNUQxNkM2NzAyRDZERDBGNzZCNzBEQzM2RDkKLToxMDg2RTAwMEMxRjU1OEIyNjBGOTRFRjEwQTAxQkZEN0IxNUZEODAzQTYKLToxMDg2RjAwMDI0MkI4ODYzOEFDM0FGNDA3NjIyRTU2QjBFRUM5OEFCREYKLToxMDg3MDAwMDdGRjcxMUU0NzY2NUQ5MjE5NkIzMzU0NzI0Qzc3RjA4RjIKLToxMDg3MTAwMDlGRUQ1QzcwN0ZDQUIyODM1QzRGQjRGNjM2QzU2RjQ2N0UKLToxMDg3MjAwMDBDRjVEQUMxMzc0MEUzQzA1RjY5Q0U3RTgxRkQyRTFBQjkKLToxMDg3MzAwMDE1QkU3RjU0QUU3RjJGNUZBRDk4RTJBMjY3NjRBQkYyQTcKLToxMDg3NDAwMERFNDU5Njk1RDNGMzU5NDIzRjQ3MUFGOUJDMzJFODk2NzUKLToxMDg3NTAwMEY4MDhDNzYxOTYzN0U2REIxNzA0RjFFNzUyRkQ3QjU5NEQKLToxMDg3NjAwMDhFQzUxNEE3Nzk3Rjk2OURGQjM5OEZDRDQ5RkRERTlCODEKLToxMDg3NzAwMDkzNkU5RkNGRkNDRkNERjcwNThDRkFBNTM5MDVBQjYwODIKLToxMDg3ODAwMDRGMkU1RDgzQThBNkNFRjYyNUQ5NTY3RDVFMkVBOTdGRjUKLToxMDg3OTAwMDM5RTg1QzhCRTJGOEEyMkVDRjA3NDM5RTM5ODU1RjQ3MEMKLToxMDg3QTAwMEYyRkM1OUVGQUE3Q0UxQjkxN0UwOEZBQ0ZDNzMxODlGN0IKLToxMDg3QjAwMDUzOTU4Mzc1RkI0QUFFN0ZGODM0OTY4M0JDOTFDQTcwOUIKLToxMDg3QzAwMEM4RTExMkZGODVDRkZEMzUxQTcxNURCNTNCQTRCRDk3OTkKLToxMDg3RDAwMEQyQTM0ODZCRUVBQTYwRkI1RThEODdGNjQ5MUNGOEFEMEMKLToxMDg3RTAwMEQ5RUZGRkZBMEI3RkU2RkI5RDg0QjAxNDNENkU5OEUzNTIKLToxMDg3RjAwMEQ0NkE3NjdDQ0FGMTZCQjBDN0Y5ODY3MjdGMUM1RjFEQTQKLToxMDg4MDAwMERBQkU1NkY5OUFGNTU3NDIyQ0MzQTc2OENGOTc4OTNDMzAKLToxMDg4MTAwMDhGOUQ5NzEyQzFFNzZBRjdBQzRDRUMyQThFMjhCNDFGRTMKLToxMDg4MjAwMDIzQ0VDMUIwRkZENThBMzU5RkMzQ0Y1OTdCRDc4NDkzNjAKLToxMDg4MzAwMDkyREU2NUZGQTFFRDFFQ0E4RTRBMzgzMTUwMjBDNkVFODkKLToxMDg4NDAwMDJBQjY5MzU4MDVDNzlGMkNENUVEMzhFREZFNENGNjYzM0MKLToxMDg4NTAwMDc3Mjc3N0Q3QUVBNzQ2MjQ5MkI1NUJERDMxODhCM0JFQzQKLToxMDg4NjAwMDI4QzQ4NEFFRjBGNDQ5QjY5NDZCQ0ZEMzNFODIzRkZCNkMKLToxMDg4NzAwMEUyMzY5NUU1Q0E4QkRCQTI3ODNGRDQ2QzdCRjAyMEUyMzAKLToxMDg4ODAwMDA0NkI5RTUyRDhFRDU4MkQ1QTM4Q0VBRjY2ODcyQTFDRkQKLToxMDg4OTAwMEMxRTcxREVDNDdGMUREQ0Y3M0YxNzM1MTRCNDA1RjhCQTYKLToxMDg4QTAwMDlBMTRFRjY2OUE0RkJCQzMxREQzMjM2ODNFQUY4MEJFQjgKLToxMDg4QjAwMDg4MzQxNzg3MzUwRDQ3RkZDNkZDOUYwNzdGMEI5MjM3MUIKLToxMDg4QzAwMDE3MzUzRkM4RjE4RDU0RUYwMkNCMzdCRjhERTAzODNDRjAKLToxMDg4RDAwMDNBQzlERUMxM0NDRjZFMThDMkZFRjU0NTREREI2QjU4ODAKLToxMDg4RTAwMDNFRDgxNkUxODJFOUU5OENDRDdDMEZFNDgwM0VERTgxNDIKLToxMDg4RjAwMDZDMjk4RjlDRDVFREQxNjc1RjUwNTkxRkMyM0NCMTJGQjkKLToxMDg5MDAwMENGRTg3MUI4NDZCQjM3RjU3NjZGNjY0QkY5QTcyNjVCQTMKLToxMDg5MTAwMEVFNEZBM0ZFQTJBNkEzRDFGREE4RkVDOTVERUY3M0ZBOTgKLToxMDg5MjAwMEJFQkU2RjE2NDVCNkYwM0RDRjkzM0IyMkY4OUVFMEM5MjAKLToxMDg5MzAwMDFERkYzOUZFMzUxQUVGN0NEMzk4MDQyNTY4OUY5REM4MkEKLToxMDg5NDAwMEI2Qzk3REJBNDFDNjJGRjMyNTE3RDYxMzlBNzgzRDY3NkQKLToxMDg5NTAwMEI3QTUyOEFDMkYwM0RFQTRCNzlGRERGMTEyREY0MzM2QTUKLToxMDg5NjAwMEU0RUIxRjFDMkYzODRCQjE4NkRDQTMxODNEMDg3MjhEMzkKLToxMDg5NzAwMEEzNTVCRkQ3RDFBNkRCNjNGRTZGRkFBRkQxQkYyNzU5OEUKLToxMDg5ODAwMDhBRjU3MUU0M0QwRDYxQzQ2RkI4NjRCRDIyMzVCNzI3MjcKLToxMDg5OTAwMEY2REREQ0MxRUU5OUI4OTcyRERFOTI3MTk3QTJCN0ZCOTgKLToxMDg5QTAwMDExRTg3RjczREY4RDY3QkJDQjUyOUJCQjI3RjI1RjFDNDcKLToxMDg5QjAwMDI2ODU5NUUwMzM3Nzg4Q0U1NzkyNUE4N0MxQkU3QjM0OUYKLToxMDg5QzAwMDREQ0ExNTg2M0ZBRDZBQjUyMkJDMDRCRjVFNDQ2NzNFMDIKLToxMDg5RDAwMEU0RkRBQUQwNjAwN0M5NDk2NzdDM0Q1NjYxRjFEQTcxQjAKLToxMDg5RTAwMDNFNDZEOTk5MkVFQUI3M0IzN0MxQkU3NUM0MkU3Q0VDMDIKLToxMDg5RjAwMDdGN0JEMTI5RkQyN0U5RDIwRkYyMThGNjE3QTU1NTcxMTMKLToxMDhBMDAwMDgxQUM3OEQ4RjE3NEJBQTk5QTRBRTU0MUY0NTNCNTI5RjIKLToxMDhBMTAwMDkwMDUzOUVBOUM1RERBMkI1MTBFRkRBOUFBNDBENkFCMzAKLToxMDhBMjAwMEQ3RTkxNEZEQTBERkEzNjlBRTBCMkNGN0VFOEMxMkQwQjIKLToxMDhBMzAwMDNGMkNBRjQ0NDlCQkM4RDNDRTRENjE0MUU3NzZCRjFDNDQKLToxMDhBNDAwMDhCMTE3N0M3RkU0QURGNjYzOTNGQ0MwQkYyRkMyMjdCRTUKLToxMDhBNTAwMDYzMTZFNDVENjNEQzQ1RDE4RDNDREUzOTdEQkM0NUUxQzgKLToxMDhBNjAwMDhERDI5RkEzQzcxMUEyM0U4RjZGMTNFQzc3NkE3QjI2MkUKLToxMDhBNzAwMDhDRTVFNjMzQzkyRDJGNjNGQzMzQ0ZGNEU3Qjg4N0EzMjkKLToxMDhBODAwMDY5RkUwNUJCQjhEQ0M5RjFFNzk1Q0Y4NjA1MzBERkQzQjkKLToxMDhBOTAwMENGNDRCMTVERUJCNDREQ0E2M0E3QTMxMjU5MUUzQjE0N0EKLToxMDhBQTAwMEY1RjA1Q0Y2NjMzRDE1QTZDMDJFNzQ1QTExRjYyNDk0QjkKLToxMDhBQjAwMDZGRUVDMUYyNDA2NUREMzJGNkQ3NTQxMjdCODExQzRCNUMKLToxMDhBQzAwMEU5MDRDODdGQTczN0Y3Njc3QkQxRTkzNzU1QkU1QzQxMUEKLToxMDhBRDAwMERGNTdFM0JCMjYxQUU3RkU4Q0Y1ODAwOEI2MjM5RTc5QTQKLToxMDhBRTAwMEY2NkZGRDgzRkQzQjQ2NUFGOTk0RDkzRTY2RDA4MzUxMUIKLToxMDhBRjAwMDVFOTQyM0Y5NjA1MThFRDQ1MzZFQzg3MTcxNUExREQxQTIKLToxMDhCMDAwMEY0NzAzQUFGNTNGMjA3QzIwM0VCODFCNDFGMTM2MUVGNjUKLToxMDhCMTAwMDNGRDJCNDNCNTE4OTA0OUMwMzU5RkYwOUI4NkY5NUZBQzEKLToxMDhCMjAwMEQ2OTk2RDM2RjY1MzU1QkUxMkU1NjUzQkQ0REQ1N0YxNDcKLToxMDhCMzAwMDdEQzk0QTU1Q0FFMzk1MTY3OURGNTBGOUU1NTZCNkZGNjcKLToxMDhCNDAwMEQ0M0ZFMzJDMDAzQzA4REVBQ0RGQjY2RDU2RjU3MUU0OTMKLToxMDhCNTAwMEI4QTdCN0Y0OTE3RThEODA5RTdGNzkxMEZCMzUyNkM2MkQKLToxMDhCNjAwMDg5Nzk1MzU5Q0VEQTkwMDdCODVFN0EyQTgyRTNGRTY5OTIKLToxMDhCNzAwMDFDMkZFMjM0MkE3RkY2NzMwOUNGOTgwNUFDMjdEMEMxQTkKLToxMDhCODAwMENERkNCOTRBRTdDRkQ1Nzc1RjEzODNGQjEwRTI1RDk1NDMKLToxMDhCOTAwMEVGNzk1Q0IyN0E3QTgyRkY4NkMyRUJEMTFDOUQzRkJGMkYKLToxMDhCQTAwMEZDMzhGMzgzMkFEQTM3ODgwRjVCQUNGQjEzMTczRkFCMzMKLToxMDhCQjAwMEIwNUNCOTc4RDUzNThGMzBERjdEQzcyNjcwMkZFMjVDODkKLToxMDhCQzAwMEQzODNEMUMxRjhBOENGOTFGQ0IwQjNCRDg3RUIyRkE2NUEKLToxMDhCRDAwMEZBQjJGRDVCRDEzQzlGMkQzNjBGRTYxMzhBQzdFRkRENUQKLToxMDhCRTAwMEZFNTlGNTA3QjVBRjZDMjJGOTIyRUZDQUY1NUYxMjJERDkKLToxMDhCRjAwMDNGRkQzM0Y4Q0IzNjI3RkI1MTA5RkY3QzNGRUFBQ0FEOTQKLToxMDhDMDAwMDY5MDFENjdGRjY3OTI3RjM5REIzQjE3MkRGOUZBNEYzOTQKLToxMDhDMTAwMEQ0OTc4REY5RENGNDZCQjZDQkZDNjE5QUMwMzlCNEQwMzMKLToxMDhDMjAwMDZGRUVENzk4RDdFQTFDOUJBNEI3Nzg0RjBDRkM0NEQ1QkQKLToxMDhDMzAwMDg0MEZGNDQ3RjhGOTExQjc3RkQ3QzZFRDQzRDdCMzQwOTcKLToxMDhDNDAwMDZGRDdCMTRGOUY4RjYwQkEzOURCNEJFMkU1RUMwQkQ5QTAKLToxMDhDNTAwMDdDOUUxRDhEOTVGNDRFRjM0RDg1REU3NDM2NTZBNkI4NzgKLToxMDhDNjAwMDk5MDQ3QUE4NzQ0OTdBMzgzQkE2ODlFRDAyNjc5NUVEOTQKLToxMDhDNzAwMDlDMUVCNUM5NzY5NUNCNzQ3RjNCRDE1RjEyRTgwN0I0RDMKLToxMDhDODAwMDA5QkJBQTYzNEQwQkU0MTlGMEY5RTEwNTlDMDY3MDRGOEUKLToxMDhDOTAwMDNCRDQ4RTBFM0FDNUY5RDdBQUVGMzNFMzFEMDVGNkVCQTgKLToxMDhDQTAwMEIwOUZBNzg5RUZDNzZCQkEzQzU5QjVFRDRBN0YyNUYwNTUKLToxMDhDQjAwMDU0QjU0RDYxN0ZEQTdGMTlGREQwQUMxMzBDM0YwMEQxNjQKLToxMDhDQzAwMEU1NjI5RkMyRUYyMjJDNkVCODZEMTFGQkQzOTZBQ0JENEUKLToxMDhDRDAwMDE1NzQ2RkFDNjNCMTdFNkZGQ0E4QTJGMjdDOEUzQTY5MEEKLToxMDhDRTAwMEZGRTQ1RTM5OUUwMURGREZFNzI4MURFRjc1Qjg4Q0YzRTYKLToxMDhDRjAwMDhCRjZGMDNCMzk2RTQ5NDc5NDZEQTRGRUFBMUE5NDM1NjEKLToxMDhEMDAwMDNDNEU5QUExRTdDQUY1MTk3MDIyQjBEODYxRTczQkFBOTgKLToxMDhEMTAwMERGRDNFRTZFRkRDNjNDQkI5QkNGMzE5RENGMUY0RDkzODUKLToxMDhEMjAwMEY3OTNEQkRFOTZGN0NDMkY3RDNEMjQyNkVFNUJFNDQxMDYKLToxMDhEMzAwMEJFNjE2MEY0ODdCODYzRDAyMEY1RjMyMkY4MUNGNjM1RTUKLToxMDhENDAwMEVDRUIzNENGQUMwRDY2RkY0RUNFNTNFNkZDODA2REU2MDcKLToxMDhENTAwMDdDRUUwRTczM0VBRkQ5OUNGN0JDNkVDRUZGMDlFMzBFREUKLToxMDhENjAwMEVCODQxM0Y0NkZDNDM1NDJGRjQ2MEFGRERCMUQyNkY1ODQKLToxMDhENzAwMDZGRTRBMTdGMjM4NUZFOERFRkQwQkY5MTg3RkU4RDNDRjAKLToxMDhEODAwMEY0NkZFNEExN0YyMzg1RkU4REVGRUVGRTEyNEU1NUJBRkYKLToxMDhEOTAwMEJEMTQ3OEUwQjhCQURENEUyMzNFODFGN0NCQzVEOTg5NDIKLToxMDhEQTAwMENDNDc4NTU1RUFBNTE3MTdFNUIyRkNEODYxNkY5QUUyNjIKLToxMDhEQjAwMDYwN0I5MzExOEY5NTE4QUQ4NUY3NDcxQzgwRDJCMjJBM0UKLToxMDhEQzAwMDM5OEREQkIxMURCQUY2NTU2OTg3QUUyQTcwNDZDMkVFMDEKLToxMDhERDAwMEQxQkFGMkU0MkE4ODNEQTdBM0I0MThENEJGNjg2QkRCRUMKLToxMDhERTAwMDAyRjg1NjJGM0JDMDdFRkZENkU1RUU3N0FGOTNGODYzQ0YKLToxMDhERjAwMEZCOEIxMTVGNTU4MjczMEY3QzlCRjQyNTE5NzdFRTcxMDUKLToxMDhFMDAwMDA0REI1MzQzRkQ0NDYyNEQ1MDFFRjJEMzNBNzMzRUQ0MEIKLToxMDhFMTAwMDJGMDRCRUU2MzVFREFCNDZDNkM3NkY2QzZEQzlFMEZCRUYKLToxMDhFMjAwMDlGM0VFM0UwRkI2OTlGRUFGNjNCMzFDQkMxRjI5ODIxMUMKLToxMDhFMzAwMENGMjNDRTFCNzA1OTdBOUZCMjA5RTc5NUE3N0YxQ0MzMzkKLToxMDhFNDAwMEI5RkQ1MEE2RTk3RTYxNjg1QTc2NzkwOENCRjMxREY5MjEKLToxMDhFNTAwMDM1OEEwNUUzOTQ0RjVGQkU4RkY1NkFDRENCRTdEMkVEM0YKLToxMDhFNjAwMEZBRENCMkQ3NUI0Q0YzRUVFRjBGMzdEMUQxQzBBRDcxNjYKLToxMDhFNzAwMDIxN0VDQzVFQTZGQTgzNzdBNTg3RjgzMTA3OThDQUE3MkEKLToxMDhFODAwMEFEMTk2MkJFOEY1RjdDOERBOUJDQUZCRDIzNkVDRkExMzMKLToxMDhFOTAwMEZCQjlFNEZDNUNCMkNFQTVDODAyNUU2RjY4QkQ1NEM1RTgKLToxMDhFQTAwMEYzMjdGODZGQzVEQjUyNEUyREE3NzNDNjFCQUZCRjJCNDAKLToxMDhFQjAwMDUyMDA3RjlENzczMkUwNTdEMTY0OEI4NTlEQUQ0QzNGNEEKLToxMDhFQzAwMDg3QzQzMkYzQjk1QzYxMTUzRTU3NUMyN0RENTVCODg0MjEKLToxMDhFRDAwMDM3OTZEQTdGNjk2RDRDNjUzQUZBRTU0N0E5MkE4MTY4QzkKLToxMDhFRTAwMEQxODA5NjNDRThBRjhCREU3QzcyMzhFOEFBNUFERDk4RDgKLToxMDhFRjAwMEVBQTJGMjNCMTRGRjE2NUMyMDNGMTNCNzNENzEyNDk1QTQKLToxMDhGMDAwMDI3QTk1QTQ5N0ZDMjczQUEyRDcwRkYxQ0YwRDFFRDE5MTEKLToxMDhGMTAwMDAyRUZBNDdDQkFFNkE1Njg4RTFGRDRFOTJGRDVFNjBBMzUKLToxMDhGMjAwMDA3MUQ2QzZDNTQ1OTRGODFGRDRDOERFQkE0OTM4RDhEQjYKLToxMDhGMzAwMEYxRTFEMDZCMkFDNjI4M0VDOEM3MDY1QzBDRkEwODg1NEEKLToxMDhGNDAwMDA3QzlFRkVGQkE2OUJEOTcwRUM5Rjc5NDhDNzUyRTc1RjYKLToxMDhGNTAwMEM5RkFBMjQxQjYzN0RFMDczMEQ2N0I1Q0Q3NDcyQjM3M0MKLToxMDhGNjAwMEJFOTE3NTNCN0QzRkQ3N0Y1RjlFMUI3RURDQkE1REJDQUIKLToxMDhGNzAwMEVFQzU5NjZENUI5MjI5N0RDN0ExREQ4NTc1MkQ3RDdCNDQKLToxMDhGODAwMDVDRjQ0ODFBRTdDQjZEMzJBRUZEQjM3NTRGM0VFMTIzN0EKLToxMDhGOTAwMDdFN0E3N0UzOTM3NkU4MEY5NTU2QkY5RERGQ0Q3OTY2QUQKLToxMDhGQTAwMEEzMURGMTBFRDc2RkREQzhERjE3NkMyRDYxN0I4MDcxQkIKLToxMDhGQjAwMENGRUU5NDExOTdBREMzQTM2MkFDQjJDMTQ1RUIzQ0RFREEKLToxMDhGQzAwMDVGQ0E4NTE1RTEzMjlFQTY0ODFERjU0NjAyRDZCNTU1MDUKLToxMDhGRDAwMEM5QzdCQUE2MTc2RkI3RTNGRDgxODdGNTdBQTFGQkE2Q0IKLToxMDhGRTAwMEZERjBCNEEyMUVCMDdCMzUyOTFDQzdENEREM0U5OTExMUIKLToxMDhGRjAwMEU4Q0ZGQjY0REFFNTM0NEVBNzVGMUVDODdBREU4NzgyQ0QKLToxMDkwMDAwMEI0MkY5QzIzQjkyMUZBRjU2MTU1REFGNTlBNTVGOTRFM0EKLToxMDkwMTAwMDk4M0Q5MDMwMERGMkMyNUVGOTZFNDUzNTlENDMyMzBBQUUKLToxMDkwMjAwMEEwQjcwQjcxMzVBNUM1QTM1NDEzOURENzE2NDY5OEY2NjYKLToxMDkwMzAwMEMxMkMxMUI0QUZBOEJGOUI0NTJGNTM3RUZBQzQwQzUzNkIKLToxMDkwNDAwMEZEOTlEMzA3ODZGODlEMEIzQUNCOTk3RjVENkQ3QThGOUEKLToxMDkwNTAwMEE2RkEyRTlGNUI2MUJCQzc1OEYzNzc0QUVGNjIzQUJCMTMKLToxMDkwNjAwMEQxRDRCRTVBNEMzNUJENDdCM0U4QTlGNzE4Q0U0NDY1RjQKLToxMDkwNzAwMDc2QzRFMTU0RThGNzU4NjY2OTQ3RjVFRkFERkM5RDE2RjQKLToxMDkwODAwMDYyREFBRjdEMzMzQzdGOTJFN0E1OERGRDA5ODYzRDdEOTkKLToxMDkwOTAwMDE2N0VDRkU4RUFCQzBDRUY4ODE3NDVCQzMwRUMxRDlBNzEKLToxMDkwQTAwMDU5MUU2OTYxM0Q1NTQ4M0M1NEVCRjZBOEVBMUM2OThGOEUKLToxMDkwQjAwMEFBRjZCNUQ4MTE4RjRERjBCN0E2MTA0ODZBMUExNUI2QTIKLToxMDkwQzAwMDM3NTI3RDQ3NEE5Q0NDREY4NUVGM0JDQ0Y3NTJEMERGNEYKLToxMDkwRDAwMDY1OTQxRjUyNEJCMEJGNDJDQjZCNjhERDM4MTc2QTYwOTYKLToxMDkwRTAwMDQ3NjIzQkQ4ODQ5MzZDMDczM0M2RDFGQjM3RTgzNEY0MkUKLToxMDkwRjAwMDdEODBEMEZFMDYwQzcwMzNGRkFFRENCQUZENjAyRjgyOUYKLToxMDkxMDAwMENGQjRFMkQ4N0NDNDlENTQzNTREQjE5NUU0NUU0OTZGMkYKLToxMDkxMTAwMDA2RkZCRjU0NjE2MUJGN0VGQkUxMDM0QzZGRUQxNTU2NDYKLToxMDkxMjAwMDhGOEM0QkZGNzZCOEQ0NzhBNUREMzU5NDBFMTdEMEJBNjYKLToxMDkxMzAwMEUwN0Y1RUIwNDNGMUY4MTU1OTBGRjBFOTA1RkEwQzgxQjQKLToxMDkxNDAwMDRGNEExNzcwMzNFMEQ1MDFCRjkwNzI3RTNGNkUyOEUyMjAKLToxMDkxNTAwMDI2RTQ3QjBBNTdDMDI1MTQ5RUZBMzgwQjM0QzE3MjI3QzcKLToxMDkxNjAwMENEQ0JDRkYzMEFFOTU3OEMwOEREOEZCN0RCRDlGRkIwNDEKLToxMDkxNzAwMDQxMTEyRUU1QkJFMTMxRjVCMkI0RTNGNENEOTBFQjZGRDQKLToxMDkxODAwMERCQTk3ODIwQkZERjdDRDlDQURGM0JFOEE3NThDNkQ5NjYKLToxMDkxOTAwMDRGOUY2OERFQUYxREY0NTQyQ0Y3Q0Y4Q0NCODlEQ0VFRUIKLToxMDkxQTAwMERGNDU1N0RGNDU0Rjg2RkYyNjM0N0VEREI4NDdFNjE5OTkKLToxMDkxQjAwMEEwREZCNzFBMjY4NjdERjM0RkM0RTExQkYyNDE3N0U3QTMKLToxMDkxQzAwMDRDQzczOUU0RDJGMTEwOTlERUU1RjlCQzM0MkE5REUzQUQKLToxMDkxRDAwMENDMzVEREJFNjhGMDY5NEQ2RjY3OEM1QjQyRTVFRTc4OUIKLToxMDkxRTAwMEQwN0I2RjdFNjc3MTU1NDM0NjZBRjBGQjM3REE0QTFCQzYKLToxMDkxRjAwMERCODE1Mzk3Qzc3MzVBRTI3NDI1RTI3QzI5NTkyRURGMkQKLToxMDkyMDAwMDY5Mzk3NjRGQ0Y0NEY4Mjk4RUFEQjQyNTRDQTRBRThGODIKLToxMDkyMTAwMEREMzkzNDU1MEM0MkJFODhEMzRGRDc4NkNEMEFCNkNGNDAKLToxMDkyMjAwMDFCRTkyRDAzRTRGOTYxOUNFRkU3MkQ4N0EzNjc2MTNGRkMKLToxMDkyMzAwMEFFREMxOThEOTBBMUM1MkJERjFGRUVBMjczQkVEOUEyQTMKLToxMDkyNDAwMDJEMUFDMEZFRTA4RDdDQ0UwQkQ3QzYzQ0Q4RTcwQzM5N0EKLToxMDkyNTAwMEEzNzI2NTUxNEZDODAzNTVGRjM4RjAwNEU0MDE2REI5OUUKLToxMDkyNjAwMDJEMTE3MkVBRTkwRjU0ODFEMDFBM0FFNzU4QkUzOEU1NTkKLToxMDkyNzAwMDk0RjQ3RDZBNzMwNERGQUIzQ0E1MDgyRkZDNTE4QkQ0QkEKLToxMDkyODAwMDdENzkyRUQzNzlEQjdDMzNDNjhGNzBEMkI4QzMzMEFFRjQKLToxMDkyOTAwMDdGNEIxMkM2RjVGOEIyMzBBRUI2M0MzM0E2MkJCQjhCNzMKLToxMDkyQTAwMDkxRDZBRTk3RjJERjE2QzNDRUFDREJBMzIxRjcyMzBGMjYKLToxMDkyQjAwMEI5NUY2NDRCQjkxRjc5QzhGRDQ4MjFGN0UzN0IwREZDMEEKLToxMDkyQzAwMDBFRjAxQkQ3QjdFNTQzNkZGNThEMTUzOTRCRjgxQzhFQTMKLToxMDkyRDAwMENDODE1QzdGQkIxMkVFMDEzRkJBNURGMUY0RTQ3ODg0OEYKLToxMDkyRTAwMDBGNjJFNUY5MUI4MjU3MjMxRERENDZCMjU5MTBERDVFODIKLToxMDkyRjAwMDc3RDkyMTgyRTNFQkM2ODg1ODUzN0U5QzIzRDk1NEJGOEIKLToxMDkzMDAwMEM4OTU2NjJBQkYzRUE5QkZBOUZDMDY3N0JFMjk3RjUzMzAKLToxMDkzMTAwMENFNDg1M0ZENDk5RTMxQTZGQzhGNDZEQzYwQUEzRkM1NkUKLToxMDkzMjAwMDNCQzU5NDlGMzY2MUI2QTlGRThDRTIxMjUzRjlDQzU5MjUKLToxMDkzMzAwMDhCNENFNUIzQjVEQjRDRjk1QjJCRUUzNEQ1RkZGMTkyRUEKLToxMDkzNDAwMEU1QTY3MkFGNzA1OTcxMEUzNjQzMUYyM0I4RUY4NTNFMDQKLToxMDkzNTAwMDQ2RTlFRDZGNjc0NjA2RTM3NUQ0Mzg0Qjk3RUYwQzM1NTkKLToxMDkzNjAwMDBEOTBGQTU2NzRBRUY3MzlEMDI1RUUwOTgxMEVGQkU4NjAKLToxMDkzNzAwMEY3ODBGNkUyOUMxOTA2QkY2NTQwOTFGQTcwNEIzMkU4MUYKLToxMDkzODAwMDI2QjQ1RTY4RjlBODg4RkQ5N0YwOTQ2NUZGRTc2RTlGQTQKLToxMDkzOTAwMDYxMjUzRTMxRUFBQUZENDMzMjI4N0ZGQkMwRTYxOTU2MUIKLToxMDkzQTAwMEUyMkZBM0FFRDlGRjUyM0FFNTdGRjFEQzM3QjI3Q0YwNzEKLToxMDkzQjAwMEZFNEIyODU3NzJGN0NCRkMzNEMxMjJDOEFGMDZDRTlCQjgKLToxMDkzQzAwMEUxQTM3NThDQkEyRTdEOEQ0N0RBNTNCQThDNTMzNTUyOTIKLToxMDkzRDAwMEMwMDE3MTlEODAwM0QyMDBEMTI3RDJGRDQ0OUY0ODVGMTgKLToxMDkzRTAwMDI3RkEyQ0I3MDk3MTkwRTgxM0U5MjFEMjRCRjFGREY3NjgKLToxMDkzRjAwMEE0OTcyMjNENEM3QTI5RDI3NzQ4MkY0NURBNDI3QTI5MjAKLToxMDk0MDAwMEQyM0ZENENERTJGNDgzM0E4RERCRkRCMUFFODJEMzhGNkYKLToxMDk0MTAwMEVBOTZGMEY3NEZFQTk2NzFGQTk3M0ExRjdGRkY2NDgwNTkKLToxMDk0MjAwMDYxN0YwOEIwOURDNkYwOEJENUMwMUYwOTdCREUyRURCQTcKLToxMDk0MzAwMEI5NjBCRkIxRTI5NUU3QUJFMUM3QUM1RjIyNUEyM0IwOTgKLToxMDk0NDAwMDRGNUJBREIxMjcxQzlERkVDOUVFRjlBRDU1OUMwODkyNEUKLToxMDk0NTAwMENCOUNFMURFQ0YwNkYwRjhCRDVEQ0NCN0Y1RUY0N0M0OUQKLToxMDk0NjAwMEI0M0UwNTg0QTc0RkQzQjVCM0UwMDczMzBBQ0E1NkM2NDYKLToxMDk0NzAwMDEwRkZCOEVFRUIyNTM2RDBDQjg3OTZBRUVGQTNFRkQ1MzUKLToxMDk0ODAwMEY5REJBNzAzQkQ2REU4Rjc1QUZENURBNjZCMUQzMkFFOTMKLToxMDk0OTAwMEYwNUE2QjZCM0REQkRCQkYxNDZFQzQwM0VEMzNFQ0VGQjYKLToxMDk0QTAwMEY3NThGOTVFQjFGMjg1RTBGQ0U4MDRDMUY5RkEyRjVCRTgKLToxMDk0QjAwMDM4MEVGMTVBOTcyNzg5Q0YxRDNENkZDNDA1NzVGOEZEMDkKLToxMDk0QzAwMEYxMTMxNEVGNjNGOEUxOEQ3ODlGQzIyRjVBQzc0MTNFMjQKLToxMDk0RDAwMDE4MUQ2OTc3ODc4NUM0MERDMERGQkUyRkVBOEZDNkJDMTMKLToxMDk0RTAwMEY4N0QyN0MzQkZGRkQ0OTcyMjgwRjdGMjBDM0ZGRUI1NkIKLToxMDk0RjAwMDhFOTYzNEQ4MTU0NkRGRTFGMDA0QzczMzE5RkU3QUU1QkQKLToxMDk1MDAwMDhCMTYxNUU3ODkxMUFGNjQ4QzYzQ0MzQkNBNEFGRDE1RjUKLToxMDk1MTAwMDc0QzYyMzVERUI2QUNBNDc1QzQ2N0Q3NTI0RjdENzkzMTIKLToxMDk1MjAwMEJFRTNERDQ5QUFFNzU1Qjk1RDUzM0VFQ0M3QTNBQjIyQzQKLToxMDk1MzAwMDNENDJFOThDMTNFOEE5QUY5QkVBRjEzQTBCQkZEMDM4NjIKLToxMDk1NDAwMDRFNjJCNDFFMjc4MTdFMUNCMjlDREYwMTFDOUQxMDQ4MTgKLToxMDk1NTAwMEM2RkI5RkEzOTdEODNEQjA4MzNFOEVCOEIzODJDRUI4RUEKLToxMDk1NjAwMDA1RDQ4RjA4REFDNzk4MjdGQUVERjcxNUNEMTdGMkJDQTYKLToxMDk1NzAwMEQ3Q0JGMDlERTY5MkY0MjlEQzdBNUUzRkFGODU2MzJDNzEKLToxMDk1ODAwMERCQkI1NDNENUYxQ0U2RkE2QjA0RDFDRkFEMTlEQTkwMUEKLToxMDk1OTAwMDgxRDRERjFGOTQ4Q0NDN0NENjE3MzI3QTYwREY0RjA5RTAKLToxMDk1QTAwMDc5NDdCMDBCRkExOTMxRjBGRjg0N0VCQzEyRUZCRDA1OEMKLToxMDk1QjAwMERCRTE0MkU5QzhDMDhGNDE0RjA2REVCQkEzMkI4MzBFMUYKLToxMDk1QzAwMDgyRTJEMDE4RUYxRDcxNjU3QTdGQTFGNEQ2MUQ5RDE5MzYKLToxMDk1RDAwMEY0NzVBRDQzRDIwMUYwOENGODIwODNBRTk0MkY5QUY4NDUKLToxMDk1RTAwMDFFRUJFODJBMDc5RjdGMDY1RDg1RDJDNTk1NzQyNUU5QTUKLToxMDk1RjAwMEI0RkUyNzBFRUVFRjRBQkFFQUE0MDdDMEU1ODdEMzU1QkEKLToxMDk2MDAwMDhCOEFGM0Y4OUZBNUE3Nzk2RDYyM0NFRUZGOTc1Qzc2OTUKLToxMDk2MTAwMDFGNDREQUFCOUZCNjE3N0NBNjRDOEMxOTBGMTIxMzJFODEKLToxMDk2MjAwMDc1MTBFQzYyQTFGNTMyQkFBOTE3NEE3RkExRUQ2RUJDQTQKLToxMDk2MzAwMEEyNUQ0NjZFNzBCQjcxRkE1OTE5REFBRTEyRUQ3QTA0NkEKLToxMDk2NDAwMEI3MUJDMjcxMTE2RkU5RjcwOERFNzIxQTcxMkQ5RTk5NkUKLToxMDk2NTAwMDkwNTMwRUI5NkRGMjJEMkZFMThEQ0MyN0JBMTlBN0YzRDcKLToxMDk2NjAwMEYzNDM2MjA5OUZCRjI0RUVGQTQwNEY4NTNBNjk4RENCRTAKLToxMDk2NzAwMDVEQzhGQTQyNjE2NEQ3NzEwNTM3RUFFREM3N0Y1RERDRUEKLToxMDk2ODAwMDgwRjk4QzRGMzBDQkUzMzdFQUYyRkNGNUEyOTFGQjBGNjcKLToxMDk2OTAwMDdENDdFMUM2RENFQjU5Q0UwRjdENDc2MUYzNDAzREZFQ0YKLToxMDk2QTAwMDIwNERBNDgxREYxNzBBOEY5QzlGRkUwRTQ2QTFCRUNGREUKLToxMDk2QjAwMDUzNzRCQUM5NzBBQjYyNTQxQ0VFOUI2QTU2MUMzMkFGMkQKLToxMDk2QzAwMEUzMUQ4QzNDOENFQkUzRkMwREMyQ0ZFOTREMjJDMEZEQzkKLToxMDk2RDAwMDRDQTIwMzA5RjkxRjA5NjE5M0VGNUZDOEZCQkEzNUFBRDEKLToxMDk2RTAwMEY2REY5MDU3OEQ3QkJBNEYzQkI1NTdCMENGMEY0NDRDNDgKLToxMDk2RjAwMDlFODM3NzRBQzYwRDE5RDcwRkVERjYxN0JBNTlDRURCMDAKLToxMDk3MDAwMEVGQzg2MEI5MTNGQkQyMTZEN0M5MjdERUE0NzNCQTVGQkUKLToxMDk3MTAwMEE2QkMzNzhBMTRGNzQ2RkJEMTc5RkEzQjNBQzc5MUJGMEEKLToxMDk3MjAwMDMxNjdCOTQwQkJGMTZFNzNCQzkzRDFGRTI2RDczODYxNjcKLToxMDk3MzAwMDhERUZGRTlDQkMyOTZGNzc2RkQ4Q0RERThBQ0QyRTA0Q0QKLToxMDk3NDAwMDdFREY4QUJEQUExMEVCN0QyQkI2QTc0NUE2NjE3NjRFQkIKLToxMDk3NTAwMDA3QkREMkFGMkJCOUQ4QTBGQkNFRjFDNkYzNzhEREMxREYKLToxMDk3NjAwMEQ5ODA2QjI4M0MwRDM4RkYwMEI4MUVFQjBBQUU3QjA3OTIKLToxMDk3NzAwMDA4OTYzN0FBMjMyNDVGQUQ4RTkwN0NENTgwNzM3NTU4RTgKLToxMDk3ODAwMEM3N0RERTlFQzFGMTI3NTUwRTA5QUZGOUNCQUUxMTU2NEMKLToxMDk3OTAwMDEyRjUxNzJDMUJDOUY5OTM3NUMyMDdCODlGQzY5MjYwQzIKLToxMDk3QTAwMDEwMEZCMUY3MDlFQjU4Q0UxQkVGREM5RDdERjhCREU4M0IKLToxMDk3QjAwMDI0OUFFNzJBODdGNjNGOThERkI5ODI0MDE2NDk4NEUyNjcKLToxMDk3QzAwMEU0ODY3QUJFOEY3RkZFMDVENTAzN0RBQTRBNzVBRkYxODgKLToxMDk3RDAwMEMwQ0VGQTk2MkFFRjcxN0Q3RDIwMTVGRTU4RjE1NEQ3NDAKLToxMDk3RTAwMEYxRTg1NTBFMDk1RjQzOUYxQ0QyQUY5OEY3QURCMTVGMEEKLToxMDk3RjAwMDg1RkVCRTgwMjE1RkY1MEU5M0YxRENDNjNERjdFRUU0RjkKLToxMDk4MDAwMEFERTFFMTkyQUZGNTBFOTNGQ0Q4QzBFQjA2QkI3RUVFNjYKLToxMDk4MTAwMDUzM0ZDMzg5OEZBNkZDM0E5Q0Y1QUI5ODU4NkY0QzJFRUEKLToxMDk4MjAwMEVDODM4NUMyQTQ5RjE4NzY5NUY2MDRGOTdFQ0FCNTIyMEEKLToxMDk4MzAwMEVCOTE1MTk0MkYzQzY0MTM3RTJBNkYwNzQzNDA3OTkyMzkKLToxMDk4NDAwMEY0QjNCNjFGQkFBNDgyRUYxNzQ1MjlGQzNFODY3MTZGQTgKLToxMDk4NTAwMDI5MkNDOTIyREM0MTdDQzJFOTBFMzdCRDRCMUI5MTEzNzgKLToxMDk4NjAwMDY3Q0E0Nzc5N0E5OUVBQzc4QzQ4Mzc5NUM3N0EwNzk4QzMKLToxMDk4NzAwMENBRTMyNzE0OThGMjNEOEFBRjM2RDVFRjM5NkJBQzI5OEQKLToxMDk4ODAwMDlGQUNERDY4QUE5RjUyMzFENTk0MzdGODU4OEFGQzI0RTIKLToxMDk4OTAwMEZBMkNCOUM1RDRCRUVGQjI1MjUzRkQzNDVGQTVBOTVDMTIKLToxMDk4QTAwMEM1M0I5QjMxNDBBQkI3MjUyNzExQ0Y4MUNBOUY4Q0Q1RDMKLToxMDk4QjAwMDRCNDNERUUzQjUwOENCRjBDRTc3NkJGRTMzNUFERUNCRkQKLToxMDk4QzAwMDk5MTBCOTgwREZBRkM5NkNGQzk5Nzk5RUVBNDQ2QjJDODIKLToxMDk4RDAwMEE1RDdCQkNEN0NCMTI4Qzk5QzFGMTdCOTRGODFERjcxQkIKLToxMDk4RTAwMDlDQ0JDQzlGNTM5NjU4NERGOTFGRTVFQUZDMzQ0RkU0Q0UKLToxMDk4RjAwMEIxRERFM0JCRjBBRjBEMzBFMTNGMTQ0RTQ0MEZGQzdFMTEKLToxMDk5MDAwMDY4M0I5REVGM0VDQ0VCQ0QzMjdFMEYwNzdFOTNFMDc1M0EKLToxMDk5MTAwMEMwNkYxMjBDMDdGODREODJGM0YwOUIwNEQ3ODdERjI0NDkKLToxMDk5MjAwMEI4MUM3RTkzRTBGMjIxODdDQ0Y4MUZENjYyQzZGRjU1QTMKLToxMDk5MzAwMDFGOTlGMTZGRDA2NTc3NzgxQUQ5NkFBNjBGQTEyOTlBNzUKLToxMDk5NDAwMEYyMkQ3OEJBRTY5NDk5N0U0MkYxNzMxRDg5NUJCMTA5RDQKLToxMDk5NTAwMEMwODdFMjA5Qjg3RjM4QkU1Njg2RTA4QkYwQzNGNzM3ODAKLToxMDk5NjAwMERCN0I0NzMxN0UxRUQ3RDc3NTZENjAyMERGOTcyRTNBOUYKLToxMDk5NzAwMEE0MEFCQzZGNjNBQ0YzNzFGRERDM0Y2REQ1MUE3Mzg5MkIKLToxMDk5ODAwMENGRkNDRTVEOTAwNDNFNzY5RDkwN0VEQkYxNTUxNjRGNjgKLToxMDk5OTAwMDgwQkE3RjIwNjQ5Q0Q5MjlEQTQzQTgzRjJCRkU1MkFBQzMKLToxMDk5QTAwMDFENzREMjI2REZDRjdCMEU3Qzc5RDg5NUYxQjIzRTEyQTIKLToxMDk5QjAwMDRGRjhCRUY2Q0Y1NEJFMjc3NUM0RDJBODgwOEZBRjhFQTUKLToxMDk5QzAwMEQxOUUwMDlGOTk5N0JCODRENzlCMjQ4QUI3MkY0MDVDNzgKLToxMDk5RDAwMEQ0N0Y4NUE1MjIzRkI3QUZCQ0M3MkQ3MjVCRjlGRTg5NDYKLToxMDk5RTAwMEMxMjdFN0E2QzhCOEE5MkRCOUJBN0ZERDIzRTNBNzlFOTIKLToxMDk5RjAwMEM5OTU3Mjc3OTRDN0M1NzFERTI1QjlGMjdFMERBOThCMjIKLToxMDlBMDAwMEE5NzMwNzAxM0U4NzlERDk4MENGM0EwQkJGRUJEOThBNTYKLToxMDlBMTAwMDdCRTQwOTlERjdDODIxMEY0M0ZFRUNBM0NCN0ZGNTFGMjQKLToxMDlBMjAwMDNCMUM1ODQ3RjY3QTYxM0E3RkZCRkIxREE2RjhFMjgxQTIKLToxMDlBMzAwMDVCNURBNkZDQTBBNjI0NTNGREMxQkJEQ0E2RjJGQzQwRTYKLToxMDlBNDAwMDhFQTk3Q0M4MjE4RjI5M0ZBQzY1ODRBOUZFNTUxRjc5NUEKLToxMDlBNTAwMDRERjk5MUFEMTM0Q0Y1QUYzOTU1NkNDQUE3ODhCNjQ3OEYKLToxMDlBNjAwMDAxREZCRThBQjQ1MzFDQ0Q0RDk3RkFCOTVCNzBEQ0U0QkMKLToxMDlBNzAwMERDQkI2M0U1N0Q1RkREN0U2MUM4RkI0NkRDQjlBNkQzNTgKLToxMDlBODAwMDc1QTgxRUQxRDcyRUU1RThGQTY0MjFGNTQ2ODdBRTFGRUEKLToxMDlBOTAwMDBBQjMzRUExRTk3MUUzMURGNzU4N0NFNkI4NzEyMzVFNzUKLToxMDlBQTAwMEJDNDNFRkQwRjU4QThFN0IzNDlERjFFMkRFRTA3OEYxQTUKLToxMDlBQjAwMEI5NjE1REJGMUY3RDVFQzc3QkU4RkNGQkRBRTU3QUVCMzEKLToxMDlBQzAwMEVGQjRGM0JEMUQ2MzVFQTFGMzQ5Qzk5Njc0QkJEOUQxNTAKLToxMDlBRDAwMEY1QkRBQUJGRTU0QUZCNDY2QjY2RjEyNUQwRkQxMzM2RkUKLToxMDlBRTAwMDRGMkJGRjZEODQyQkM2RjNCNDIyNUVCN0ZFMTc3NkNGRTMKLToxMDlBRjAwMDBBRjc3NzhGMzc3N0IwNUNDRjFDOEI2NURFOTQ1QzhFNkUKLToxMDlCMDAwMDhCMzNGREREODQ4ODQxOTJCRUFEODM3NUZCNEFDODc4RjYKLToxMDlCMTAwMDczNjM2NERDOUE4OEIxQkI0MUJGREQ4RjI3RTE5OTY0MzAKLToxMDlCMjAwMDE3MEQ3Q0ZGNEJCRjY3RjFFMzM1NERGN0ExNjg4RUJEODQKLToxMDlCMzAwMDUxN0YzRkNFNkYwMzNENEMxQzRCRjI1OTNFQzkxMzVCMjYKLToxMDlCNDAwMDdBM0QxNDQ5NzJDQTEzQ0JBQzZDOUY4QTdCRkU1NzM3OUYKLToxMDlCNTAwMEZCRkE3NURFOUZFOTRCRkExMEU4MDNCMjBFRjRBODA3OTIKLToxMDlCNjAwMEYyNTQyOUI3MEM5MkVCMkI1MkJGRUVCOEU3QzA3RTE4MjcKLToxMDlCNzAwMDIxRjRGMzQzNzBCQzRGMTdGNEM2NzQ2OEFDRTNERjc1OEYKLToxMDlCODAwMEVGQzFBMERCNTAzODE5RkFBRkQwRTMzQkZCMTlGM0QyOTkKLToxMDlCOTAwMEUxNjdFQzA3MDM3RUM2RkQxM0Y3NkRCNkUyNEQ5MTdDREQKLToxMDlCQTAwMDhGNjUwMkUyRTUwQ0ZDNkRDOTkzRjZDNjA1M0EzQzUwQTAKLToxMDlCQjAwMDBGRkNBOEJCN0E0NTZBNkUwQ0VDRjdFREMyMURFM0VBMTgKLToxMDlCQzAwMDgyMEUzQkVBRkY5QkUwNjJDMEJGQkJGQjZERERGMTg3MEQKLToxMDlCRDAwMDUwQkVGMDVERjdEREJBQTNEMzdGRjZERTVCMTA5RjkwMzkKLToxMDlCRTAwMEYxNEIzQTVFRkNGRDJDMUMxNzcwNzc5NDc5M0YzRjMyQTUKLToxMDlCRjAwMDQ4RjI4OTkxODNGNEZERTQyM0ZERDZDQzJGMDRGQzBGQjkKLToxMDlDMDAwMEY1MkI1NTlENUZDOEYzQkMyNEFEOThERkFGQzZGOThBMkMKLToxMDlDMTAwMEZCNUJGMzM3NEFGOTQ3ODhFMkM0QUI4N0MyOEY2RkUzMzcKLToxMDlDMjAwMEZCQ0JENzdBMDVEQjZENEExQjE1M0ZERUY5MkFGMTc1QjAKLToxMDlDMzAwMEFEMEZCMzlGQ0ZDRDcyMDdCRjNCQzgyNjRENkE1NzQ2QzUKLToxMDlDNDAwMEVERjZBNTVERjlDRUZBQzI0OEY5RUU2MEU4RkJFQTBCNDUKLToxMDlDNTAwMDc1QkQxOTJGNkE2MERGODZGQUJERUUxOUE0RkJCMTNDMTEKLToxMDlDNjAwMEMyQzNGMjlDMUVENzUwQTFEN0U5QTAzN0JGN0M2RjBFQUMKLToxMDlDNzAwMDdBMzJGNjMxQTUxQzFGNjdDMENEMEQzRkQ0OTBDRTNDODMKLToxMDlDODAwMEMxMzczQzA3RTc3OTgzQjVDQkY4QzUwRUY4MUE3RUFCMzAKLToxMDlDOTAwMDBFQkZFQzYxQkUyNzExMUE4RjcxQ0U3NzIwQkEyQjNGMTEKLToxMDlDQTAwMDk4RTExRkVCNkUxRjc0RjhDN0JFQzNFRkQ2MUU2OTg5MUIKLToxMDlDQjAwMEM2REZGMTY5REYyNkRGNjdFOUY0NUJGRDY1QjhDQjIyMUIKLToxMDlDQzAwMEZENTMzMUYwM0ZCNUVBRkQ4OThENzk1REREMEZENTk2MDUKLToxMDlDRDAwMEVGRTQzODk0NjY4QkI2NzMxMEFERUYyQ0Y1OEY3NzdCN0QKLToxMDlDRTAwMEVGODlEQzlGODg3NzExMjZFQTc2QTkyQkQ3QURDQkNERkIKLToxMDlDRjAwMEEzMTRFOThGRjZBOThDRUZGNjA5RjI1RTNERjE1MTgxQ0MKLToxMDlEMDAwMDdENjdDNDRGNEMxMTgxMDRBNDg2MUY0QTVCM0Q5MkUxREMKLToxMDlEMTAwMDZGRjhBMTRBMDIyMzc5OUUzM0VBMTdEQUYwRTQ2OEVCODAKLToxMDlEMjAwMEEzNzcxNTg1QkIzQkZENTNBRDdENjQ1QzU0Nzc3RUFBNUMKLToxMDlEMzAwMDY5OTdGM0I5QkZFOTk3QUZFMTdFM0UxODk0MjZFNUI2N0YKLToxMDlENDAwMDg2RkI2RTAzOUQwREQ4MkE2QzU4NjdBQkFERUJCRjRCRkQKLToxMDlENTAwMDUxQThGM0FCMTJFODlBM0Q4MkUyQUQ5NjJCQkMyRjk2NDgKLToxMDlENjAwMDJBQzI4OEJGNjIzRTZGRTQyRjM1RUFGOTIyOTlCRjdEOEYKLToxMDlENzAwMEE1Q0NCN0VBRUZBNzZERDFFRDIwNTgyNzUyQUMwNzdBRjIKLToxMDlEODAwMEY5MzZERDRFODI3NTIwQzUzQUYwMUQ3QzBENzlGMDM1MkYKLToxMDlEOTAwMEU0QzFENzkwMDc1RjQzMEFCRTg2RUZBNUEyMzgxNTc2QzcKLToxMDlEQTAwMDVCRjhEMzBBODNGNjA3RkM2OTg1NDE3MjEzRkM2OUMxMkQKLToxMDlEQjAwMDc5RjhEMzgyRUJDMzlGMTY1QzBFN0Y1QTcwMzlGQzY5MjkKLToxMDlEQzAwMEMxNzlGOEQzODJFQkMzOUYxNjlDODczRjJEQjgzRUZDMjgKLToxMDlERDAwMDY5QzE3OUY4RDM4MkVCQzM5RjE2NUMwRTdGNUE3MDM5NDQKLToxMDlERTAwMEZDNjlDMTc5RjhEMzgyRUJDMzlGMTY1QzNFNkY5OTYyMjAKLToxMDlERjAwMEYyQjdDREQzREY3RjI4NUIxRkNGRjQ1MTk4NTExQzlCNjYKLToxMDlFMDAwMDQ3RjhGREVGODg3RkZDQzQ5NjBFM0MzNzJGMDJERDJFMEQKLToxMDlFMTAwMEFEMEVGNzQ4M0MzNzRFOTA3OEI3MDg4OUU3QjZEOThDMzUKLToxMDlFMjAwMEU3QkJFQzMyNUYyNEUzQjQ0M0U5MDc3RUFCNDI5QkY0MkIKLToxMDlFMzAwMDVCMjE4NURGMEEyOUZDNTY0OEUxQjcyQUNDOTQ3RTJCQUEKLToxMDlFNDAwMEE0RjA1QkUxM0JGQzU2NDhFMUI3NDIwQUJGMTU1MkY4NkIKLToxMDlFNTAwMEFEOTBDMjZGODUxNDdFMkJCNDgzREYwQTI5RkM1NkY4QkYKLToxMDlFNjAwMDBFQkYxNTUyRjhBREYwRkQwOENEMDNGRTJCNjM1RTkwREEKLToxMDlFNzAwMEYzRkI5OUY0NTJBMjQzOTM1RUVBMzJFNTIxRTcwN0Q3NTgKLToxMDlFODAwMDg3OUMxRjVDMEUzOTNGQjgxQzcyN0U3MDFFNzI3RTcwRkMKLToxMDlFOTAwMDdEQzhGOUMxRjk0OTgzRENCQ0JGMjBFRjA3Qjc4M0JDOUIKLToxMDlFQTAwMDFGOUMxRkQ0RTg3QjAzQjZBQjQ5MUIyRUJDOEVCNDM1NzgKLToxMDlFQjAwMDRBNzk0MjcxMDkzMTM1MkY3MzI2RkM4QkFENEUyNTM1MTkKLToxMDlFQzAwMEQ2MjM4NDZERjk4MDk5ODU5NEQ3RjQzOEM3M0NEMTY2NDAKLToxMDlFRDAwMDAxQkUzOUFFODBGMEE2MDUwNEM3NjUwRkZBN0ZDOTVDRTQKLToxMDlFRTAwMDZFRjhCM0Y5ODdGMDlFQkY0M0IwREU1MEEzREZBRjM1MDUKLToxMDlFRjAwMERBN0I4NDRCNDU2QUQ0RUZDQzc3NUQyRjc0N0NBMzFFNEMKLToxMDlGMDAwMEYzQ0JBMDc5OTA2Mjk5OEY3ODkzRkNCQjIyMEI3MEFGNTIKLToxMDlGMTAwMDYwOEI0NTkxRjFCODJCNjQzQzc0Mjg1REFEQ0E5M0U3MjIKLToxMDlGMjAwMEZCMTZDQkY2RkRFMTg4NTMyOTUxM0NCOEVGOTE2NTE1M0UKLToxMDlGMzAwMDg3NkMwNTgwRDM5MjAyN0VGNzJBMkY1NjVGRDc5MkFCQUIKLToxMDlGNDAwMDExODc2NUNDREJCMDRCMTI5RkUwN0I4NkEzREE4NEJEMjIKLToxMDlGNTAwMDlDQzYxOUZEODVCMEUzRUY3MzRDQjQ0Qjc5MDJFREEwQkMKLToxMDlGNjAwMDZGMEVGNDI5REU0RDQxRjRCRDJDNEY5RTdCOUFFRkI2NjcKLToxMDlGNzAwMEFCQ0JFOUZCQzA2RDRCQUVDNkZEQzU4OUUxQjJEREQzMEQKLToxMDlGODAwMEJGODk2NjM4NEU2RTUwRjg5RUNFQTg2REMyOEJGQkM5NTUKLToxMDlGOTAwMENCNzU3RTNBNzA5QkNCNUVDRUUzQkFGOERFQTNEMTZGNzEKLToxMDlGQTAwMEM5ODY1NEJFQTc1OTIyNUEwQjcxMEY0NTBDNTVGODNENkUKLToxMDlGQjAwMDdDMDM2RUI0QkVEN0IxQkUyQ0RBMkFCMDJGRkZFMEZCMTMKLToxMDlGQzAwMDRGMjQyRTdFOUZGQjRGQTM4N0M2MTYyMUFFNTAzNENCNjUKLToxMDlGRDAwMEY3NDIyNzBEMkQ1OUQ5ODNFNkE1RjlFNTdCQTFBM0JGNEIKLToxMDlGRTAwMDU4RjIwNkU3OUY5MkVGODUzMkY5MENFN0Y5RjE3OTk4N0MKLToxMDlGRjAwMEVENTNGOEZEOTVDOUJFOEQ5NjA0MzdFRTY1MkZCNzI1NTQKLToxMEEwMDAwMEEyRkUzNkUxODE1ODA1RjUwOEY3OEE4RDc1RTU4QTE2QjYKLToxMEEwMTAwMDhCNTMwMUJEODgwM0YxNDFGNDQ3OUM2MzNBRTgyNURGODcKLToxMEEwMjAwMDYzRTNGNzU5QTY1ODVEMzZGMDFCNDNDRTI5NzFDOUIxRDkKLToxMEEwMzAwMDhCRDQ1MTMxN0NDRjMyNDQ0RUI4RDREMDgzRTM2MjdFOEUKLToxMEEwNDAwMDc4OUM0RTNCREZFNzVGQkFEM0M5NzI4NUI2NUU2MUJFQ0UKLToxMEEwNTAwMDc5M0U1RkM2QkI1NkRERjZFMTcwNEI3QTY3OUNDRTk5QzAKLToxMEEwNjAwMDM0RkYxNkJDMDM3QjI2N0Q3QkY0MDg4NUU1ODhCRDc5MkIKLToxMEEwNzAwMDA0RDdBMzBEMkZGMTNEQ0Q5Mjk1NkZGMDNEOTQ0QjBEN0MKLToxMEEwODAwMDBGNDVDQkZCNkNEMkZGNTJBRUMzQ0RCMDNCQ0REN0YxNjkKLToxMEEwOTAwMDUzQUVDNzY5MURBQjkzRUYzQUQzMzlDQ0VGQUU1QzZBRDAKLToxMEEwQTAwMEIwQjE5QzExMkEyRjFBRjJBN0YxMUU5MTEwQUUzRkMyMzcKLToxMEEwQjAwMENFNTNEMTYwRTMzQkMwMEJENzk0QUM0QTEyNTdDQTkxNDAKLToxMEEwQzAwMDhCNzUzOTczNTE4MzhERTNCMjJBRjRGN0Q0NDJGRjZFNTYKLToxMEEwRDAwMENGNjIzRDFFNkJGMTU2RjNGNzRGRjI0MkU0NTBFMzdENDEKLToxMEEwRTAwMDREQkQ0RUM5REIwNzY2QjAzQ0I0QzRDNkZFQ0QzOUNCMEUKLToxMEEwRjAwMEE1N0MyNEI2MEIzRkVFOTNDQzU5M0VDRTgyRjc2NkU2QTQKLToxMEExMDAwMEVDRjQ3QTk0MkVFOEU5NUQ1RDRFOUFEOEVBNjRGODRGNTMKLToxMEExMTAwMEI5MUNDMUZDNjVFQUU1MTRDRURGN0MzOTk5RDM5OTk3NjcKLToxMEExMjAwMDY1REMyQUVFMjI4MTZFNUE4QkU0M0IwN0VGRUJGMkQxMUQKLToxMEExMzAwMDBDQzRCMUM2NDMzRUVCQzlGNERENEVGNDhEMjFGMjc0N0MKLToxMEExNDAwMEJFMzVDMEFCMUM4MDc4MzhEMUE2QUQ0NDlDRUNDNDhEMjQKLToxMEExNTAwMDgyRUY4MzREODIxQzQ1RkRDRjgyNUMxNThGRkQ5MTU2QTkKLToxMEExNjAwMEM0Rjc2MTI2Mjg3Q0JGNjhEMkQwREJGNEZENDBGQjQzRjYKLToxMEExNzAwMDMwM0ZFMUY3NTdCNEMyMjk3RUM0MzlDREQyQjY1QjgwRjcKLToxMEExODAwMDdGNjM1RjY4QkVBM0ZDNUVFQTI0OUY2MkM3M0I5MjlBMkUKLToxMEExOTAwMEFFNkYxQjc0MUZCQTNGRTY0NkU4NzZCMjQ4NjkwN0VCMUMKLToxMEExQTAwMEIwOTM2MUIyNzgyNEM5Qjc2QTI2RTREM0I5QjA2REY2MkEKLToxMEExQjAwMEQyMDk4MTYwMUY5NTJCQ0I3QkZDNzZENUNDMDY5MjQxRDIKLToxMEExQzAwMEZGNTVGQkM5MUM4QjQ1REUzRjIzMzk5MEVGMEI4ODk2NkEKLToxMEExRDAwMEEyOUU5NDJGNTlBMzE0NDAzRjMyRTZGNUI5NjdFQzM4OUMKLToxMEExRTAwMENGQjA0RTNBMjhFREQ4QTdGMjFFRTVEMjdCMzI0RDdFOTUKLToxMEExRjAwMDlCRDBCNDhDRTA4REZEMzQzN0E2RjUyNzBBNjE2OEY0NTYKLToxMEEyMDAwMDYwRTEyRDFDODFGN0VCODVGMTI4NTQwMEYxOThCN0U4NDcKLToxMEEyMTAwMEY5RUFDMTNCRkZCNDNBOTdFMUM0Rjk5MUJGN0Q2OEE2NjIKLToxMEEyMjAwMDJGRjI1RkUwOTM3MzE0NkJGMERGMUI0QkIyNjg1NzBEOTYKLToxMEEyMzAwMEVFQzFGNzUwQzcwM0JGMTFCOTZERkM5RTQ0NEFCNjRCM0YKLToxMEEyNDAwMEYyQTkxMDdCNEJGNTYwODlDNzUwQkI0QjU5QUUzQzc3RTgKLToxMEEyNTAwMDg0RDU5RDdBMkJGQjdCREM2Q0I3MzRENjdEQ0M2NkJFNzcKLToxMEEyNjAwMEU3NkJBNEYzMDdFQkU3NUVEREJGRTc5RUNBQzMxNkY5MTEKLToxMEEyNzAwMEZFQzI2MzE2RkZGNjU3ODg1RTJGRjdEMDY2NjBCRDhGNkIKLToxMEEyODAwMDIxREU5RUU3QUZGMUZBOENGNzRDM0FGODk1RkU2RTg5MjUKLToxMEEyOTAwMDQxNEY0Nzk2NURFMkZCMkFBNTkxNzZCNzFBNDQ0RkU1RjgKLToxMEEyQTAwMEFCMTVCRTBGNUFCQTRDREVFN0Q2NTYyQkYyNUQ4NDZFNjQKLToxMEEyQjAwMEVDNThCRjk5RkRCRkZDOUVENTZGN0UxMTJFMEI3NUY4MzMKLToxMEEyQzAwMENFQjFCN0JDRTE0OEVCODRFRjlGOTczRDYwOTM3QzM0RkYKLToxMEEyRDAwMDkwODlGQjBFQjcyQzcxRjJCQkQ5OUY3QjhBQUIwNjBGMUUKLToxMEEyRTAwMDAzOUUzQzhDQTc3MUQ4RTU1NDdGNEI4Q0I2MDRERjRCQTIKLToxMEEyRjAwMDQ1Q0I0MUQ4MURFN0ZFRkM2RDdFOEZCQUI2Mzk4RERGQTgKLToxMEEzMDAwMEJGMkNEOTk1QkYwQUVGRDk3Q0VFRDE3RTgyRjU5NzQ0NTgKLToxMEEzMTAwMEJBRUM5MDQ3NkExQTYyRjk3QzlFREI1M0JGQ0YyQkRBMDYKLToxMEEzMjAwMEQ4Q0Y2N0UwRTdCRUMxRDI4RTc3N0RCRTFDRTdBMkFFNzQKLToxMEEzMzAwMDU3MTFDMDZDNTM0Q0Y1QkFCNjYzMUFGNkQxNTAzQjRCNkIKLToxMEEzNDAwMEU4QkIyMURGNjU1NzgxRERDNDFFNjQ1RjM1RUMzMkI2QTIKLToxMEEzNTAwMDlDNjNCMzcxQUVDRkIxNzdGREY3M0VGN0VBRjMzN0Y0MDQKLToxMEEzNjAwMERBRjkxRDdBNkRFRUY4OUU5MEZGRDcyQTJFRDhEM0NCNUUKLToxMEEzNzAwMDIzREQzMzcxQkZBMUZDOTAwRDkxQjQ2MjYyOUM1QkJFODIKLToxMEEzODAwMDFGNzM4RjdDM0ZBNkY0OEU3Q0U2Njc3MzgwOTMwMkRDOUMKLToxMEEzOTAwMDNCMTlDOUZCQjhEQzRGRTk5MEVFRjdGQkFENkIwRkY0NEUKLToxMEEzQTAwMEQ5MEQ3QTBBNzhGOTFEODI3Mjk3RDcxRTE3MjQxRjk1NDYKLToxMEEzQjAwMDM1MkFBNjc3MjQ4Q0ZDMEI4MzU1Qzk5NzQ4REQwMEZDMTEKLToxMEEzQzAwMDdFN0M0NzlBMUQ2RjM5Q0QyMTMxMDlGMTk5N0I0MTI3NTgKLToxMEEzRDAwMEMzM0FEQjUxM0Q4RTNGOTk5ODJFMEVDQUY3QkQxNEZFNEQKLToxMEEzRTAwMEJCRTQxODJGRjhFRjVCOTUzNjlBREZDM0EwRkEyQ0RGOTkKLToxMEEzRjAwMEVEMUExQ0M1RkQ5NUI4NjhERDY5NDg1RDNDNEY4MjAzQzgKLToxMEE0MDAwMEMzQTlFRDNFRUFDRkNERTMzMDNFQ0EwMjdFMUJFQzA3ODYKLToxMEE0MTAwMDczMTBGNzQyRjk1QjVDN0UxQkM2Mjk2RDkwRUZENDY4MjAKLToxMEE0MjAwMDZCRTQzOERBRUE1OEZCMjBDODA3NTY5N0JENEZCMDVDOUEKLToxMEE0MzAwMEQ4MjBERkJEOUVBM0ZGREQxMTlBMkZDQkNERTUwNDI3RTkKLToxMEE0NDAwMERDQjMzM0VFREQ4NkMyQUI0NDlGN0Y3OTYzQUM1OUNFN0IKLToxMEE0NTAwMDZDNUM2QjAzN0U2Njc3RjM1RUM2MzlERDBFNUREQTMwQzkKLToxMEE0NjAwMDg2REYzNzI4Qjc3QUY5QkU4QUE2QzNGQkIzREI5Q0Y3MzEKLToxMEE0NzAwMEMyNUYzMjdCREQyM0I2MzRDQUZGNjVCMDk0NkJDRkU5OEYKLToxMEE0ODAwMEZCNzE2MjdBMjA5M0RGQTlCQUNEQzlGMUUzQjM1RDhEODgKLToxMEE0OTAwMEJDREUwRTc4M0Y0NEYwODFEQ0UyMkE2Njc4MTM5REY4M0EKLToxMEE0QTAwMDEwNkY1OUJFQ0U4Q0RGQ0VGOTQ0Qzk3N0ZDRDc5NUYwM0EKLToxMEE0QjAwMEZFNUI2MEQ1RUNBRUUwNzlBQ0RGOTc4OUY4QTFEOUI0NEEKLToxMEE0QzAwMEVGRjEwRTk3NzA2OTdDMUZGNkM0NDMzM0Y5RUYwNTYyMTQKLToxMEE0RDAwMDlFMUNDRkU2NzE4RkM3QkI1MzQ0Mzc0Q0Q3MDZGRDE4N0YKLToxMEE0RTAwMEY3RjM4REYxQUMxRUFCQjRDNzdCQkU2QjlGN0EwRjQyMDYKLToxMEE0RjAwMDRFQUYyNzdDQzMwRkQwREQzRUI1RTMwMjI2OEQ2QjJGMTgKLToxMEE1MDAwMDk3RUYwNzVFQzFFRkY0RkRGQUZGMDE2QTkxNkNEMzAwOEIKLToxMEE1MTAwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZFRDdEQTAKLToxMEE1MjAwMDdCNUM1NTY1QkFGMEJCRDZEQTU3RDhDMDY2OEJCMDUxQTQKLToxMEE1MzAwMEMwMEQwMjYyMTE2RDEwMTAxNTc1QTE4MDVCNzM2QTYzMDYKLToxMEE1NDAwMDM3MjlDNDhEQjc1MDAxOTFBQ0E4OUZGM0IxMEQ2RkE5MDUKLToxMEE1NTAwMDk1MjYyQTk2NzVCNkE2OEQ5NTc1NzBCMjQ2MUI5QkQ5MjEKLToxMEE1NjAwMDZBOUE1RDBGM0E4REQzMzk1M0I2Q0QzMkJCMDlEMjM0RDYKLToxMEE1NzAwMDlGN0REMzk5QkVFNzc5REVCNTYwQUYwREE0NzVBNkY5Q0UKLToxMEE1ODAwMENFRUZGQzNFRkNFM0Y1N0RENzdCN0RFRUNGRjM1RTc2MzAKLToxMEE1OTAwMDIyNjM0Q0IyMzEzNjc4OTg4M0IxODE4QzE5MTg5MzQ1NzcKLToxMEE1QTAwMEM4M0ZBMTc3RkJFRDAyNjM5NTcxQUNCRTJEMTNEMjI4OTUKLToxMEE1QjAwMDU2RkY2QjBCNjNERkUzREZGODlFNzRBMjUzNjQyQzhGQUUKLToxMEE1QzAwMEIxREJBMDVEMUI3Q0FGMTBEOUFCQ0NENkYzM0REMzI5NUEKLToxMEE1RDAwMEQwRjc4QTE0MzZEMzFERDQxRUZCQzM3RUUzRDVFRjEzMDgKLToxMEE1RTAwMEZDNjk4QjMzN0JFQUFCRTM1NkQ4NzhCQkE5RDA3RTlBNjMKLToxMEE1RjAwMDA1RUI4QkRERjUxQkE4M0VDRkIzRTkyNjkxQzUzMjM2QkUKLToxMEE2MDAwMERCMDRGRjg3QTU5NDQ4N0I1NkM0RTYzMkQ2QjA1NzcwNkEKLToxMEE2MTAwMDFBQTFBOEUxNDE4OUIxMTg0ODlGOEJGMEIxNjRDNkJFNjgKLToxMEE2MjAwMDY4RjhDRDNCQjc0MEJEQ0YzNzZGQUY2NDQzN0JFNjM1QUQKLToxMEE2MzAwMEM3M0Y4QTM5NDYzMDM2Rjc1MjM2NzMwQzYwNkNERUE1NTgKLToxMEE2NDAwMDMxOTQ1NjBGRjM2NDM4MDcwNkQ1REJGODVDQkEwN0M2QjkKLToxMEE2NTAwMEJGQUQyREZCREM3RjMwNUFCNzlGRTUzMEY2RkU3M0JGRjAKLToxMEE2NjAwMEZERTM2OEU4OTczMTlGREU3RDREQ0YzQTY2QUQzRUExQjAKLToxMEE2NzAwMEFGQjIwNEMzOERBRjczNEQ0NjU3MTU4Mzc5Q0VCNjE4NkMKLToxMEE2ODAwMDFDMTIxNENENUU1RUM1NjQ5ODI3QjMzMzY3MUFFNDEzQjkKLToxMEE2OTAwMDc1Q0MyQjQyQkY2Q0ZEMTZEOTA0RUJGMzMwRkU1N0I1RDkKLToxMEE2QTAwMDVDOTBBOTVENjNCRTRGODJGNTBDODY3QUM2MUM1RURGQTYKLToxMEE2QjAwMDBDRjBGNzU4MEM2Nzg0NDhBOEU4MkQ5MTAzMTlCQ0NEMUQKLToxMEE2QzAwMEY3MjkzREY4MUQwQ0E5MjFBNzA3RUY4OTBBMURDQzVFQ0IKLToxMEE2RDAwMDU3MDY2RDdCRjAwNTAzMzM5NjBGRUI2NTFDQUVFQUZDNjUKLToxMEE2RTAwMEE3MkFGM0JGNkRCRDIwRkJBMERFMEQ0RTA3Q0Y1NzI3NzUKLToxMEE2RjAwMDFCRTZDMTdBRTdBQzRGMzZDQzg2QjQ1Q0Y5NUUzRTQ3QzgKLToxMEE3MDAwMDVCREU4RDJGQUI4QUFGQ0M5NTc2NTg0RjU3MUJDNzU3NjIKLToxMEE3MTAwMEQ3M0EzREUxQUI2QjRGMkY3QzI1MzFBOTY3MUU3NzAwRkYKLToxMEE3MjAwMEJFRDgwMDhFMkYzNjgyRTMwQjUzQzA1N0E1MzMyRkE4MTcKLToxMEE3MzAwMERFQkY3MDdDQ0Q3RUZFRUQwRjVFNzZEMEZBQThGRkNFMzgKLToxMEE3NDAwMDA3OERCRTFERDBGRkFDQjZCRDg0QjdGMkQ1MUJGNEM5RDIKLToxMEE3NTAwMDUwQUZDRTk5NEM3MDUxREJDRkFFQ0ZCNjMyODBFNzZEQTMKLToxMEE3NjAwMEFCQjdFQjFEMTZGQ0VFRTg5M0VFMjE5NTU5MTAzRjQxNzcKLToxMEE3NzAwMDlFMDk5MDY3QkE0MEJDM0JBMkE3N0UzOUE0N0I2MTlDMkUKLToxMEE3ODAwMDI1OEJDRDkxRUNEQTlFNzFCNjI4RjQzQ0JCM0VEQTg2N0YKLToxMEE3OTAwMEUzQ0RBRUFGN0E4ODY1NzFGQTc3NjdGNkU2QkZCMzY2NDgKLToxMEE3QTAwMENFMTdCM0EwM0ZFNENGQjM0NUNFMjRFNDhCMEE1MUQ0RjcKLToxMEE3QjAwMEYwOUI5QTNFODQ3ODgzNzkzRDA2RTAzNTIzRkVDM0RCMjcKLToxMEE3QzAwMDlFNDYzODBDNUUxNEU2NkM4NjRGQTlBOTAxMUY4RThCM0QKLToxMEE3RDAwMEY0OENGMzM2ODhDQzZCODI3QUE5MzU4MThCMzg4RjU0MTAKLToxMEE3RTAwMEEwMjg2Qzg3Njk4NDhENTIxNjBCRjkxRDMwRUQwMjQ4NDQKLToxMEE3RjAwMDUzMjQ5RUVFNzNGMkY1QzM3NzNGN0U2NzMxODEzQzVDNTQKLToxMEE4MDAwMEJGNEFDRkExRjQ2QTYwM0I1N0E3MDBGRTBEMzFDQ0Q5RjcKLToxMEE4MTAwMEVDRThBMTRGQjUxRjk1M0U1NUZBRUQ2RjdEN0JBRTcwMEMKLToxMEE4MjAwMDdENjc5MzM5M0M1OTg2MzNDOTA0RTM1NjNFM0NDQ0I5MjUKLToxMEE4MzAwMDQ2QjhGQzNBMEQ2MTAwMEY1QkQwN0E4MTU4MEI2QzdERjUKLToxMEE4NDAwMEFDMzczNTkwNTc3NkNEMEZBREI3QTUyNEI2OEZGNTg2Q0EKLToxMEE4NTAwMEFFNTNFNTkzMzkyNkNFQzNDMDI3NTEwMTk4NzdEN0ZBNzYKLToxMEE4NjAwMEExNTEwQ0YxMkQzMDJGQ0E5REIzOEJDRDIyQ0U1QjVENTMKLToxMEE4NzAwMEQ3NTM0RDUwMTlFNkI2QkJDOTQ0RTkzMzREQzA2OEMzNDAKLToxMEE4ODAwMDAwM0U0RDc2Q0EzRkRGRTRBMEI0QUQyOTgzQ0FEQjlEMEMKLToxMEE4OTAwMDM2OUEzRjYzODE4ODY5ODBBNzhBMzA4NUZGRkQzQzhGQTcKLToxMEE4QTAwMEU1NjU0MUU1NTM2RDlDRUU0RTVCMDMxMUI2MjAzOUZEMjUKLToxMEE4QjAwMDcxQkQ3OTBEOEI0MkZBMEUzQzg4RkNDQzFBODdCMjVERDMKLToxMEE4QzAwMDMwRDRFOUY1NjcyM0M0NENBNDRGM0UzRkI1REQxMjdEN0IKLToxMEE4RDAwMDI3QzkzRjE2NjE3MEVDMDI5NjlCQjEyNEZCNzQyM0UwRkMKLToxMEE4RTAwMDZCRUVGMjM4Mjc5MDEyOUJEMTM4OTRFNEMyMEM2RkI0MEYKLToxMEE4RjAwMDkzMDBCMDdFMEI0Mzc4Q0M1M0U0NjBGODkyQUE5NTIzODIKLToxMEE5MDAwMEIxN0U2QkIyNTU4MDcxRTY1QTlDRTc1QUE5RkRENUNFNEYKLToxMEE5MTAwMEZCRjE3QjRCOTkyMTI1OTNBQUNBMjY5MDYzNzcyODcyNzUKLToxMEE5MjAwMDZDODlDMERDQzg4Nzc3QTA5QzQ0RkUxMjBGQTVBMkZFRUMKLToxMEE5MzAwMEI5QTM1NUYwMUIyOUNGNTYwQjAwRDcyMUNERUVEMjc4MDUKLToxMEE5NDAwMDk0MTM1QjA1RTcwRTZDQkIwREU0QTlBOTQ3OUU3NjBEMzkKLToxMEE5NTAwMDczN0Y4MTdBODE3RDA3RjQwN0ZENUYyNTIwMDI3MTVEOTkKLToxMEE5NjAwMDZENzIxQ0NBRjE0RDgyNzUxN0MzNzlCOTBEMDg5RjA1MjgKLToxMEE5NzAwMDBBOUQ5QzZFMzkxM0UxQzhFQzgxRUJBM0Y4NUYxMDY1NkEKLToxMEE5ODAwMENDMjM4QjI4NkYxQjE0M0Q4NjY0NDA3OTQ1NEUwRTMxRDUKLToxMEE5OTAwMDcwRjg0MUNBREExMTNGM0FBNzA5RTlBMENCOTIxMkM1NzMKLToxMEE5QTAwMEZBMjg2Rjg4NDg4OUMzRjIzOUFEMTJDOTQ1OTU5RUFBMjUKLToxMEE5QjAwMEQ1MzUyODdDMzMxN0JFQTNERTJCOTEyQTYyOTFCRTU2NzMKLToxMEE5QzAwMEI2NENBNDc0Q0U4NjkyQ0Q1RUEwRTMyNEMxMUQzQjlBMDIKLToxMEE5RDAwMEQ2QTM2N0I4OUUzOUI1MTNBRjQ3QkM1NUVGMzA0NjlCMzkKLToxMEE5RTAwMDAwNkY0OTdBNkY1MjRFMTAzRkNFRDlCRTJBODk0MUJCQzMKLToxMEE5RjAwMEYzREJDREQzNTFGRTE3NUJDQjhBQTNBMUZEQkM2REQxOTgKLToxMEFBMDAwMEQ5NTI5MDFFNDlDQUU2N0E2NDQxRURDNDM4MDZGMEFDQ0EKLToxMEFBMTAwMEY5RkI5MTI3QUNBMDhGRTc0MjlGNTZFOEZGOUJCNjcwRTkKLToxMEFBMjAwMDlGMTdBQUQ0MzRFRDRGOTI4MEU3REUzMTc5RTJCM0ExQ0IKLToxMEFBMzAwMEZFNDJGMUUwMkRBMzUwMUYwOEJFQTdFMkE5QkUyM0NFMUYKLToxMEFBNDAwMERBODczQzUwRDM3M0MwMEYwRUEwRjdEQUZGRjUxRUY1N0UKLToxMEFBNTAwMEYzOTVGOEQ2RjVFNUQwQkVBNkY2ODU0OEVDNjdFMUE2RjUKLToxMEFBNjAwMDNGRTQ1QkExRkNBMEU4NDlDM0ZFM0YxN0I2M0Y2NTQ1NDQKLToxMEFBNzAwMDAyNkNERDlFODU3QTdDRUVBNkI0Mjg0RjFGRjIxN0Y5OTIKLToxMEFBODAwMDAwRjE1MUJENUYyMEY4QUFFNTMzN0M1MTA2ODRCQkM3QjUKLToxMEFBOTAwMENGMEM1NjRDQURDQzgwRjQ3RTVFNjI4RDY4MEZBOEY2NkMKLToxMEFBQTAwMDhDNUEzRTMyOUJDQkFERjM1MUVCOTM5MDRFRTYzRkI1QzMKLToxMEFBQjAwMDI1MDlGNUNDNjcxMTNDNUZGMUQ0QUQ2RkEwRENGMkVDNTkKLToxMEFBQzAwMDM0MUExMEFGMUUxRDMzMzg1MTlGNzk0MUJGMjIxRDU1RDYKLToxMEFBRDAwMDAzRkZDNjkzREQ2MUFFMDQ3QTJBQ0EwRTI3QjhDRTZGOTMKLToxMEFBRTAwMDFENDFGQTUxOUQxNzdDQTdGMkNGNzRDQzg1RjMxOEQyODMKLToxMEFBRjAwMERDOTk4RDc0RkY2NzlEN0YyRUUyRjNDRkY1NjZBNzE3NzMKLToxMEFCMDAwMEYxOTlDREY1REI5RkQ3NEJBNTU4RUUwNTg2NDE3QkU0NDcKLToxMEFCMTAwMENGRUI1Rjg4NDhCNUY0RDg2RjI1RDJGQkIyODQ3NkQ2RTgKLToxMEFCMjAwMDhCNDIzNkVBRURGMENDNzZDMzJDQjIxQjE4RDE1OTlEN0UKLToxMEFCMzAwMDk1RDM1OUMzMDE3REU5RTAxOEIyQzdBOEE0NDZFNzM3MDkKLToxMEFCNDAwMEY0ODVBRjA1OEFCREQ1OURERkI3RDc4MDdDNTJCMzg3MkEKLToxMEFCNTAwMERCMTEzNTZENjdDODhFNTBFRDkyNUE4NTlGMTdFRTM5MUYKLToxMEFCNjAwMDQzNzY4NURBQUU2RTFGODc0QkVEM0U1RTVFOTUwMUM4N0IKLToxMEFCNzAwMDFEQ0RFNTgwMDA0MkJBMEFGMTA1RjlGQkZFRjVEN0QzRjkKLToxMEFCODAwMDk3NjlGMjdCMjk3RkRGQjU1NjJFMEY3NTlENDlBOEI3Q0YKLToxMEFCOTAwMEQ2NjQ5QzM0MjBGRTZCOTcyQkZENDI1RTFGMzRERUJDRDYKLToxMEFCQTAwMEVDODEwNDJGMkMxRjZBQzFGNjBFOERGRDUwQkIyRjlBMkQKLToxMEFCQjAwMERBRkI2QkMzNTZBM0JFOTdFQjJDM0E0QzlCNkIyREE0RDAKLToxMEFCQzAwMEZGQjdENThCMTlCQTVDOUM1Qzk4MTNFREI5ODM2MTkxODIKLToxMEFCRDAwMDU5Mjg0NzA3MkUzQzY1MDY0ODAyNkEzQjhGODg1MEJFQkQKLToxMEFCRTAwMDNBQ0E3MzJGRDI2NzFDMDNBRTkwNTA2RkY4MDVCNDVGNUEKLToxMEFCRjAwMDNCNUVGOTc0MDRGNjNGNkU0OEUwNkIwNjUzRDcwQkJGMUIKLToxMEFDMDAwMDlCNUUwQ0YyNjQxOTk4MkQ2NDFGNjcwNjQ2MjAxRDBGODkKLToxMEFDMTAwMDNDQ0NFNUY0RTM3QUI2MUFGNTFCRDNCOUQ5MzQyOEY3NUUKLToxMEFDMjAwMEEzREM0MjNDN0YxQkU2REIwNUZGRkYxREYzMEZDNkZFRTYKLToxMEFDMzAwMDk5QzkzRjE0REJCREE0RDBBN0RCNjg1OTJEQzBCQ0FFQjkKLToxMEFDNDAwMDFFRUE1OTgzNEJCRTQxRDA1RjkzMkQyMjBFQTQzNEFDMzMKLToxMEFDNTAwMEQ3QTFFN0RGNTU3Qjc1ODIyMkE3MTNDMThFNDBCQkM4MDEKLToxMEFDNjAwMDMwQzg2RTQxM0E2RTM2RjNGNTA5QjJDQzFBNjExRUY3NjAKLToxMEFDNzAwMDY3MUU5RThEN0E3QTZEQTc4OTE5NjE5RDEzM0FDM0M4QTQKLToxMEFDODAwMDdFNEQxQ0U0MjJCREQ2NkM0RTIyQkQyRDM4NzRBQzAyMjQKLToxMEFDOTAwMEVBMUZDRTE0RkQzQUFDQ0Y0QzNFQUNDRjRDMjE3NkFFODEKLToxMEFDQTAwMDY4OTZCMTlENzBGMEI1NkY1MUJFMEY5NjJFMUU4OTgyQzkKLToxMEFDQjAwMEY1MERCRTQ3NzAzNjQzOURDQUFFNzM4RkZGMUJBNDE1QkEKLToxMEFDQzAwMDk3NzZFQ0ZENTc0OEZGMkRDQUIzMTNFMTdBQkFDQjc1REUKLToxMEFDRDAwMEM2MDNBODVCNkI2RDMzMzlCOURFNjBDMUVCMzg3OEVGMjIKLToxMEFDRTAwMEI3OTEzNkIxNjc3RTFEOURFNzlFRkI0RDJFQTYyNjI3QTgKLToxMEFDRjAwMEVBOUYwOTA3MjVEMjFGQTFGM0U5QjBDM0M0ODc1MjNEREIKLToxMEFEMDAwMEIyM0IzQjJDQTI0RjEwQjBGRTkxRjc3MDdFMTM0QzE2NTUKLToxMEFEMTAwMEJGODRGNkJBNDlGRjY1QjA3RTYxOEVDNEU4NzM1NzkzNkQKLToxMEFEMjAwMDRBNjFERjgzOTExMDhCOTM0NzdENzREMTQyNzZFQjM4NzMKLToxMEFEMzAwMDg1MEY1NTNBN0IyQjlCREI4RjZGMjk3MjU1ODUzMzczQkIKLToxMEFENDAwMEM4MkM1OEFGQThGMDZDRDZBQkZBMjIxMENFMzI3QkY4RTQKLToxMEFENTAwMDc2OTE1MkFGRUI5MjI4OTMxRDVFNkRGNDMxRThCMkVCMjEKLToxMEFENjAwMEUwNTBEMjMzRkRDOUQ5M0ZBMEREMDFGNkM0RjI1NEY5NTkKLToxMEFENzAwMDVEODQyNzUzRjRFRUNEMEFGQzU0RkQyRDI5RkRERkFDOTQKLToxMEFEODAwMEMwRjE2NjhCQzhFMTc2NTMwOERDMTQ3QTBBQTU5NzFFRDkKLToxMEFEOTAwMDdBODg0MURCQTMxQkNGRUNCRUY2QTM1MUM5ODRERjZCREQKLToxMEFEQTAwMDFFRTY3OEZEOTBGMEZBRUQ1QjJCODBDREQ4QTBCRjRENkMKLToxMEFEQjAwMDIxRkNGRTBDNzhGNThCQjkzRjAyQUZFREExNzhGNTlCMzUKLToxMEFEQzAwMDg3MjE1RTM3ODk2NDY3QTAxRDg4NzZBMzA3RTVDMEI1MzMKLToxMEFERDAwMDk0RTdGNjYwMDYyMzM5NTEyOTg1MzlENzI0RTM3NzgwMzMKLToxMEFERTAwMDQzMTZDOTg3QTMyODFGNTRCOTMwQzQxNUI4MDZGNUU5MUUKLToxMEFERjAwMDY5NzBFNTcxN0UwMUIxOEQ5N0U3QTQxMDVEMjRCMEY2MEUKLToxMEFFMDAwMDc4MkMwN0JDRTdBMTdEMjc5OTg2NjY3RTBDNzJCN0U1OTIKLToxMEFFMTAwMDAxREZERURGNDAzRkNEODI2RkVCM0M5ODhGRjc2NjhCMjIKLToxMEFFMjAwMDEzRURCNzBFOUZFOEQ1QzMzQzVBQTI1OUQ2N0UxOEJGODIKLToxMEFFMzAwMDY1RkU1NTRFMkY5NjMzNDU2RTRDMzdGOEQwN0U4M0VGMjYKLToxMEFFNDAwMDQ5OERGOEJEOUM3RjdGRTlFRjY3MUY0NEZCQUMzMzhERDQKLToxMEFFNTAwMEQxQkE1QUIyNTkzQURBNjcyRDY1MTlGNEZEQjdBQURDQUUKLToxMEFFNjAwMDc5MzA4MkI3MkZFM0Y0REQzMkRGRTY0MzNERjRFOEEzMjcKLToxMEFFNzAwMEJFRTFBODI3NUFCNkNCRjEzNjQ4MEQ1MTlFRjgxQzk4NzIKLToxMEFFODAwMEZGMjA4OUQzN0Q0QjMyOTQ0M0JBNTk3MDk3Q0ZDNTdFNEEKLToxMEFFOTAwMEFFRTFGMzBEOTQ4NzNERkYxNDc0NjU0RTA1RDEwNkU1RDAKLToxMEFFQTAwMEE3MUIyMzc2QTA1QzU1RTk3NEYwMzAyRURGODc3OENGOUUKLToxMEFFQjAwMDZDNDUzODc5MjdCMDhDN0FFOEZGNDM4NURFNTRGODBCNkYKLToxMEFFQzAwMEMwMzY4RDAwRjc5ODEwM0NBODc0MTdBM0MwNUY1OENBMEQKLToxMEFFRDAwMEU5Q0YzQjQxNTk0RjFERjNBMUJGOTEwMDUzMDkwNzM4RkEKLToxMEFFRTAwMDU3MUFDMUYwODM3NDk2RDU5MzhERjM2RjVFMENGODkxNjkKLToxMEFFRjAwMDcwMUQxQzBGQTc0NTU2RERENjA3NUYxNUU2MjhGMTBEMUUKLToxMEFGMDAwMDE4MDJGOUE2OTI3MUJFQTk0NEJBNDI3QTZDMDRCQTBBMzAKLToxMEFGMTAwMEEyNDcxNjQ4ODgzRTE3QUVEMDE1Q0E4MzA4RjdCODFDNUEKLToxMEFGMjAwMDU4RTc1N0MyMUZGMkIxRjBBREZGOTRBNkY3MzVDRUE0OTMKLToxMEFGMzAwMDFDMkUyRjFFMzM3QjRBNzM0OEVGNEREMEQ4OUQ2RjY1NzIKLToxMEFGNDAwMDdGOUE4OEZBRTVGNEJEQUYyNTYwOUExNEU1OUU4Q0VCRjQKLToxMEFGNTAwMEQ4NUNGRUQ3NTIxNEZGMUZDNjA3RjRCODhFMEZDQkZGODQKLToxMEFGNjAwMDRGMjJEQTJEOTU0QjVGMjNGQUJGRDI3OTk2OTk5ODM3MDUKLToxMEFGNzAwMDFDRTAxRTVEMkMzOEZEMDBCRjc5MkQ0NkU3MjRGODE2MzUKLToxMEFGODAwMDU3NUM3NTBDRTE1OUQ2NkE3NDE4OTE1NkQ4NjI4RDFDQkQKLToxMEFGOTAwMDNCMkI4RjQwMzc4QTFEREE2QTI0QkEzOUY3NEI4OUY0ODQKLToxMEFGQTAwMEMxQjk5MjhCQUYwRTgwMEZFNzU2MDg0RUFDNTdENjMyMjAKLToxMEFGQjAwMDZDMjU5MDM3MkIyOTE2QTg1RTk5NTdBMDdBNjVBOTFDOTUKLToxMEFGQzAwMDVGMjcxQTA1QTIzNzQwQUYyNTNCMjhERTMxQTdGNThFNTMKLToxMEFGRDAwMEE5ODhERjEzQzU1RjBGQTRGOEMxN0ExODQ3RTU2MzJFNkYKLToxMEFGRTAwMERFNDg5RTk1MjlGNUFCNTYxQjkxNDdCQkJGOTdCNUFDODQKLToxMEFGRjAwMEJBODhGQzNGRDMxQjUyREUzQUU5NTNFQ0I3QUM1MTVCNDUKLToxMEIwMDAwMEVFQzYzNTgyMUQ3NzU3NEU0NDBDQ0EwN0U2NjRDRUVGNzQKLToxMEIwMTAwMDExNDhGMjQwRjIwRkZBOTNCQjQwNzE0NENGMzAwRkMyOTcKLToxMEIwMjAwMEMzODlCQzYxN0FBNEVCOTkwODU3QTBEQkU4QTU3Q0RENTUKLToxMEIwMzAwMDMzQTcwQUJFNDlCMENFOTkxNkNFNjcxRjk2MDlCRUZCNEMKLToxMEIwNDAwMDA1M0VGRjA5NDBFRjY1NTAxRTBCNzQ1RDE2QzNFNDM4RTIKLToxMEIwNTAwMDQ4REQyNkU2MEZDNzc5MkUxREY2MDlDQURCRDMzOEQ0QTIKLToxMEIwNjAwMDI4QUFFRjhGQjRBMTVDRjdFODExODlCNzMyMkZBNUU1QzQKLToxMEIwNzAwMENDNDdFOUVEQ0M0RkYzOThDMTNBOTM3NDkwQUY5M0ZDNzEKLToxMEIwODAwMDJCMzE4RUYzMkJCMzY3MDNEMkQ3NUY4QjRFOUMxNkUwMjgKLToxMEIwOTAwMEZCREQzOTQyREUyODk0NDM4RDAzNjhERDk3NUIxRjcwMkEKLToxMEIwQTAwMEE1ODA3NjA2QUE0MUFDNUY5NkUzN0UxNEZCQjNDQTRDM0EKLToxMEIwQjAwMDhGNzFBQjc0OTU4RTVBOTkzNzE1RDYxN0JCREVFMjlCMEMKLToxMEIwQzAwMDA0RUI4QjZCRjUxQ0MyRjVBNjRGMzczODEwRUY4MzEzREEKLToxMEIwRDAwMEY4M0ExMzc0REM5RjNGNTQ2RTYwQTM4MTBFMzYzRjE4MUMKLToxMEIwRTAwMEU2NDMzQURCQkMzNTIwREFBMUZFRTYwMzgwMDFDQzk3Q0IKLToxMEIwRjAwMEFGMTRCQ0YwRERFQTYxNEU4Q0QzNTk3NTFFMTFFREZFMjQKLToxMEIxMDAwMEEyNTY4RjE4MDhFMkE3RTFCMjQxNDQzOTkxQkVEMzIzNzkKLToxMEIxMTAwMEEyOUVCNDVBRDc1MzNEMzU1RkFDRDQ0RjM3NzkwNjU5MDgKLToxMEIxMjAwMEM5NEU5RTRFRjQzMzVDQTExRkI1OUZENDU2ODM1RjA0NzUKLToxMEIxMzAwMEI4MTdDOTRBN0Q5OUI3NTdGQjYxOEE5RTU2REI2MTM5QkEKLToxMEIxNDAwMEQyNjc3QUFCQTM0RjNGNDU0RDVCNTAzRjgzOEZGODA4RTIKLToxMEIxNTAwMEM2MDVEMjdCQ0ExRjcxRkREQTg0RjAxQjc4RjNBQjM2Q0IKLToxMEIxNjAwMDRDMzcwMzIxRjg3MTFDOURDNzRDRTM3OUY4M0NEMzE1OEIKLToxMEIxNzAwMERBODdCRkJGN0Y4RkUzNjMxRUYwQkJCOUY1RkUyMkU0MjEKLToxMEIxODAwMEEzQ0QwMDFGQzRGM0U2OURCM0NDRDRDRkY0NTk5QTc5NzQKLToxMEIxOTAwMDMxQTk4NkYyMjUwODA3NEJFRjc1M0NBMkNDMkYzREQ1OEYKLToxMEIxQTAwMDIzNUE2OUJEQ0U0MzY4RTdBNUNCOENFMjAxNkEzRjc2OUUKLToxMEIxQjAwMDFENzQwNUY0NkE3NzdBODU3QUNDQ0I5MDVBOTRCODQ3OTcKLToxMEIxQzAwMDNBOEVCMzRFNDBGRjMxNURDMTU3NDk2QkZENjEzM0Y2OTYKLToxMEIxRDAwMEUzNjYxNDVGNENDRjg1RkVBMUZFMjY4NDgzQTEzN0ZDNzUKLToxMEIxRTAwMDQyRTc5OTVFQ0NFNzczNDJBOURGOEVGMTk0NzQ2Q0U3NzUKLToxMEIxRjAwMDU4MTE0Mzc0QzVFN0Q3RDVFQTE0NjIxQzk3QjE4RkEwRTQKLToxMEIyMDAwMEZEQzk5MDdFOUVDMkI4MENBNENGNEU3RTZENEEyRUI0NkUKLToxMEIyMTAwMDdGRkVEMTk3NzZCNEQwNTIwRTNFQjMwRkU1NTZBQkY1MTQKLToxMEIyMjAwMEU2OUI3MDlDODMyMjlGRkY0RDcyRTI1RDk4REY2RDIwNEMKLToxMEIyMzAwMDNEOUFCRTUzNEVEQjQ0Nzk5MzEzRkRFQkFFNTZERjU1N0EKLToxMEIyNDAwMDJGNDJCRDJDMThDNjY0RUIzRDhGMTMwQTlDREExNTNBQzkKLToxMEIyNTAwMDM4Mzk3OUNCMjA1Q0VGNTM0NTc3MkM1ODAyRUQ4NzVGNjYKLToxMEIyNjAwMEY3Mzg4RDNCN0NDQUZDOTQxNkM4MEY5QkY4Q0JBQjMwRUIKLToxMEIyNzAwMDdGNUY4RUM3M0MwMkU0RkVCMEQyNUZERUI2MEZFNTZBQTgKLToxMEIyODAwMEU5RkMxQzgyOTdDNTc2NDVGMkE5MzlEQUUzRjUwMkJGREQKLToxMEIyOTAwMDM3NDdEQzUyOEVGQ0I4RDI2NjcwNDgyNDc3RUIxOUZBMzcKLToxMEIyQTAwMDU5Q0QxMTc3REJCMUJGRTVEMUY5MjY0QzBERDZCRjM2QUMKLToxMEIyQjAwMEExOUMzQzZFQzkzMTIxMUU5QTJEMTMxODk2RUJBQzBBNDUKLToxMEIyQzAwMDlFQkUxQjRGRkE0MDUyODg3Mjc3ODQ3M0JBNEM3NEU1NjUKLToxMEIyRDAwMDY0MjgyNzBDMDkwNkFEQkNENjcxNzkyRkQ5MUQzRUI0NjAKLToxMEIyRTAwMDlGQkFBQ0Y1NDg4MUNDNjAwOTU0QTA3QzkzNTQ3OTY5MkQKLToxMEIyRjAwMDcxN0E3MTNDQzlFMkI0QTNCRkI0NDI5MTM3MkM4NkFGRDYKLToxMEIzMDAwMEQzNjAzOUY3OUYzOEFGNUVGRDYzMkU5NjUwNEI3Rjg2MzIKLToxMEIzMTAwMEIwQ0MyODQxRjkzRkRBOUJDNjEwM0U1NzUzODNDNUJCREEKLToxMEIzMjAwMDE4RjU0NDY4N0Y1RDIwNzA1MDhFQTM0RjQ3NzYzMzdFQkEKLToxMEIzMzAwMDQ4RUVERDVFQjIxQjM0N0FBNDVCNUU3QUEyRjUyMUYyQTAKLToxMEIzNDAwMDUyMUU4MTdBQTI1ODIwNzlFOTYxRUIwQ0I4RkUxMjBDRUEKLToxMEIzNTAwMEIyMDA1QzNDREJCODVFNTRGOTdCMjZDRTA1RjBFNTQ5RDMKLToxMEIzNjAwMDY1OTE1QzVFRTlFNDczMjYwRUM2RUZEMUFFNUMyQTQ1QkEKLToxMEIzNzAwMDIyMUUwMjVFQzlFMEU5QzM5RkY3Nzg5MzdGNTAxRTlEQUQKLToxMEIzODAwMDQxRkE4N0E5MDc5MEZFMjFGRDQ0RTEwRjhGOEEwNzZGREMKLToxMEIzOTAwMEQ5RjVBMzUwNUZDQjEyRDkwMzk1Q0I4NTM2QjRDRkUyNTQKLToxMEIzQTAwMEJDRDE0NzY5QkVDNURDMkU2ODk3QkZBNkY1MUMyQTg5QUIKLToxMEIzQjAwMDRCNDQ3OTc5NjJEOTk5QzdFRjQxQkRCRTI5OUNGNEZGMEUKLToxMEIzQzAwMEE0QTU2NzU2NjAzQzZFQTY1NzcwMUEyMUVGNTkxQTdERTYKLToxMEIzRDAwMEY3N0I5ODZGMzQzQTVEOTAzRkFCRjA4MUZCOTc0NTkxRDYKLToxMEIzRTAwMDY4NEYwOEI4Q0U4QzlFNzU1NjE2MzI4MzlCRTIzOUYxQjEKLToxMEIzRjAwMDMzOTY0MDNCNEZBM0UwMzQzQjdBRTBBMUM3N0E1MkVGNEIKLToxMEI0MDAwMEY1MDVCQzM3NDZGRUQwRkEzRkJDRDdBOEM4NTk3NzNFRjEKLToxMEI0MTAwMENBRDlBMkM2RTQ4NzBBNzA1REVCRjU3QzlFOEREMUQ3QjAKLToxMEI0MjAwMDUzREUyNzM5Mzk3NkI5MUM5RUE5RDgzRjlFQTVCMzU3NUMKLToxMEI0MzAwMEM2QzNGN0MwNkE0MUY5Q0VGMTU2QTlDOEU1NDBFMzg4MTIKLToxMEI0NDAwMDYzMTgzRjBEMkMxNzQ4M0U3OUJDNTJBMjFGREFDRDVDMjEKLToxMEI0NTAwMDlFNEQ3OEVGMjgwQTkwNUREOEU1M0RCNDkyNUEyQjcyNDQKLToxMEI0NjAwMERFQTM3NDM2MTc4QzU4OTQ2RkE3REZFM0ZFOUY0N0ZFNjgKLToxMEI0NzAwMDYzMjVCNjlCRDNBMkI1ODMyNjAyRkQwQzQwQjhCQzY3RkEKLToxMEI0ODAwMDI2RkRFOUYxOTZEMUJBRUZGMDQ1NjlFQTU1QUQ4RUQzQzQKLToxMEI0OTAwMEU0M0RBQjhCQUVDN0IwRTdBQzdCMjc1MjNDQUY5MjM5RjMKLToxMEI0QTAwMDIyOTFERTJBNjU2RTM3QzE5RjI1MUJFNjMzNTc5RDRGREIKLToxMEI0QjAwMDMxQjdDNzJBOEJDMTdFQTJFRjVBN0JCMEM3RkU4OTMzNTIKLToxMEI0QzAwMDIwREZBODc4NTRGMTEzM0FFRjVFNzYxOUUzNzZEMEFDMUEKLToxMEI0RDAwMDc1REE3QURENzYxMDMwMTY4QUJBQ0FFNURBNzZCRjMyQzYKLToxMEI0RTAwMEJCOUY0NUI5RThERTM4RTAxQkYyQUJBRTUwMUU4MjgwNTAKLToxMEI0RjAwMDIxN0Y2RTI2RTM3MTFGQTZFODQzRDVDRTJGNTk3QTUxREUKLToxMEI1MDAwMDhGNzI2ODY2RTM0NTNEQzI3M0U2RDIxRkU2QTc1RjM4RDcKLToxMEI1MTAwMEI1RjNCRUExMjA0QUJCM0UzOTRFOTNCRkQxMzU0NDUzNEIKLToxMEI1MjAwMEZGNjZGNzMwQ0RGNzVCQTc1RkFCRjk1RUVFMTlBOUM5RUYKLToxMEI1MzAwMERGNUUzRDVFNTM3RjQ2RkQyNEFEMUM3QTM3OUFENkEzNkQKLToxMEI1NDAwMEUyQTdCRjc5QkZBNUU4QTM3NzQyRUMxMjM1OUQzQUUyQTYKLToxMEI1NTAwMDNGMTM5MUJGM0YyQzY3RTRCRjdDNzgzM0QzRjgzMTFEOTQKLToxMEI1NjAwMDIzMjQ4MkU3ODA1QzNERjkzMUY3RTVDOEVGOEYyMEJGRTcKLToxMEI1NzAwMEM5NEZGNEExQzJGMzQzNzNBMUM5MjhBMjdGNjJFNDdFM0MKLToxMEI1ODAwMDc5QTg1RjcyOTAzOTUwNUVDRUQ0QjFGRDQyNTQ4RkZGREUKLToxMEI1OTAwMDY3MEVGMzlDQzdGRUJBRTMwRDRCMEZGMTc4NDM4ODFGOEIKLToxMEI1QTAwMDczQTU3OEZGNzAwNkNDQkYwRjc5Nzk0RDJFRjdDMzE2QkYKLToxMEI1QjAwMEVFMzZBRkZGMzgwODhFQjU2REQxOUFGQ0EyRkRGMUVCRTcKLToxMEI1QzAwMDNGMEVENjNCNEIwNDFEQUVCMzQ2RTE5MzVBMTZBMDdEMDkKLToxMEI1RDAwMDUyQkJFOEEwRkVFQUM0NDAyQ0U2M0I1ODY3NkNCNEY0Q0EKLToxMEI1RTAwMDhGODM4QjBBMEY4MDhGMjUzNzI4REVBOUZBQzMzRjE5NzYKLToxMEI1RjAwMDNFNDUwQTlFQ0JCNDcwMUE5M0NCRTM5MDVGOEYxMDI5MUYKLToxMEI2MDAwMEREOUMyM0M3RTdGRTAzRjExQ0I0OUVGNERDQkM3RkRDQTkKLToxMEI2MTAwMDdBMjI0N0M4NTkwODlGOUYxQkFGREZFMzFFMEY5NDE3N0MKLToxMEI2MjAwMDhFOTAwQjdGMjZCODRDRkU0N0MyQTU0N0NGNDcyRkQ4MzgKLToxMEI2MzAwMDBERkFBMzcyOUQ4MUZCRkRERTMzNUNCRjM3NzJGREZFMDgKLToxMEI2NDAwMDdDQjQ4RkY2ODc5QkYzNDRFNzBFMDdFRDk3RDIzRUU5NzMKLToxMEI2NTAwMEExN0I4RDYxMTkxOERGNTlBMTIzN0Q3OTdBOTk5MDgxOTkKLToxMEI2NjAwMEZFQzIyNjIxOENGQzM2MEZBQjQ4MTZDOEJFQjk3OEM4N0UKLToxMEI2NzAwMDQ4RkQzMUFBMDdFREZEM0E5MEYzNTEwNTNFNkIwOUU0MTAKLToxMEI2ODAwMERGQ0NFNTcxQjEzNTZFNzE0QThBMDNGNUY2MUZBQzFFNDkKLToxMEI2OTAwMDhBOEI3QUUyMTExRTlFRkQzMEUxNkI2OURGNDVFRTJCNEQKLToxMEI2QTAwMDdFMTJEMDZCRTVEMTEyODU4RjVGQ0NENUQxM0ExRjJFOUIKLToxMEI2QjAwMDE0Qjk5RDk0MkFCQTcwMUY2MzE1RDhBOTY4NTcwNjk2QzUKLToxMEI2QzAwMEVCMjg1RjkxQzdFOTU5NkRGNzFGMEE5REM3OTRERDE0RjgKLToxMEI2RDAwMDg2RjM4OERBMjRCQTdEN0Q4Q0ZCNTEyRThGMEYzRDc5NUQKLToxMEI2RTAwMDU3MThFREIzMDEyQTc0NjhFRkRCQkRENjY5MkU1OEFGNDkKLToxMEI2RjAwMEJERDA5NjhEQjZERkRBREM2OEVBNkY0RDQ2OTcxNUNGODAKLToxMEI3MDAwMEExRkM4Qzc0NzhDQThFRkVBMEMwRkE4QzMzQ0Q1NUU2QUQKLToxMEI3MTAwMEFCRUUwRjU4OTRGRTM2RTk0MUJGQTI5RDIyOTgyODFFMzkKLToxMEI3MjAwMDYxRjExQUY5RjkxNTY3QjEyNkRFQ0ExQzAyMEI2RUE3ODIKLToxMEI3MzAwMEQ2RjMyOEY0NkFDNzQyMUJFMTk3RjZFRkQ1NzhCMTVEREUKLToxMEI3NDAwMEExMTdBNDFCQzRCQjRBQ0ZBMUZEODM4OUVDOERDQ0U5MTIKLToxMEI3NTAwMDg5RjNEOTE1NTI4RTFBRTVEOThENzQ4RkZERUE5MDFGQTEKLToxMEI3NjAwMEJDNUNGRTA3NkVCRUM0RTMyQ0RFRDdERUMzNzk4OEUxODUKLToxMEI3NzAwMDVGNTI5QzBDRUM0QUNFNUY0QjQzRTJCRTNGOTE0RjAyQkUKLToxMEI3ODAwMDY2MEVDRjQwODQ1NjFFREVBQkQwQzlEQTdGODJERTQ4MUIKLToxMEI3OTAwMEJBMDJCQzNFOUNDQkU1OEZBQkMwRkQzNkNBM0JDN0IyRkMKLToxMEI3QTAwMEQ0MzBBMkZCMUYwQjI3OTY2MDQ1Mzg1MTVFQkE3MjM4MjEKLToxMEI3QjAwMDc5RjMzRDFGMTA5RTc0Q0M2RkI0NzE3RjBCRjlFMTcyNjkKLToxMEI3QzAwMDdDQTRDMjMxNDk2NDlFQkVGNEYyODgzQ0U1RkIxQkNBRUUKLToxMEI3RDAwMDdFQUVCNzZBQzgwRkQ5NjEyODc3QzUwMkM2RDIyQ0NDMTUKLToxMEI3RTAwMDYxQkNCNkZGN0EwRTlDOEY4NUU4NkEzOUQyRTVBRTk2QzkKLToxMEI3RjAwMDk0MzBFNENGNjQ2NUJDQ0E5QkQyQTcwQzc3QTA1RjIwQ0QKLToxMEI4MDAwMDE4RDAwRTA0QkZDM0MwRTMzRkRDNEU1N0U1N0E0RkI5RjIKLToxMEI4MTAwMEQ2N0VDNDcyNEY2NjhGMUZBNkRBRjdFQTc3M0M5NzgyMEUKLToxMEI4MjAwMEUzQUFGMzU5QTVEODYxRkRDRDc3NTUxMjRCNzJBMkRDN0UKLToxMEI4MzAwMDVBNzY4RjgwRjBEQ0IxNUFENEY4N0Q3MTVFNjEyNTAzQjEKLToxMEI4NDAwMDNGM0VDRTdGQUYxM0ZEOEUzOEIwQUZDRDI4Q0Y3NUY1MUMKLToxMEI4NTAwMDgyMzMwODVFODE3QjgxMEEzODEzODdGODJCRTA0RkUyNDAKLToxMEI4NjAwMDNBQkQ2Nzg5NUU0MkM3NTdEN0IxQUI4NThGMUJFNzVEOEQKLToxMEI4NzAwMDJDQzg5MDlGNTQ1MTJGQTBERkI3NTY5OTdGNUMwNUEzMjkKLToxMEI4ODAwMEVGNjk5OTNFMDFFMzIxOUUxNjU2OEFFMzU1NTYzMzAzMkMKLToxMEI4OTAwMEM2RjUyQTMzOTk1Mzg2RjJDQUM2NDM3NERFRURCOTAyNUYKLToxMEI4QTAwMDM5MjU2RjIwQzk0RjNBNEZFMzJBRjBBNEU3MDExRDREMTcKLToxMEI4QjAwMDREMjg0Mzc2NjdCODRCODZGMTg5N0YxNjFEQTdCNTRDOTYKLToxMEI4QzAwMEYwQTJFRjU5RDRFMjNDODRGRTAxRDAxMUM1N0QzQzJEOUQKLToxMEI4RDAwMDAxMUE1RkU3RTU3MTcyNUQ4QkMxRTk4MDc1NDg4RDY1N0UKLToxMEI4RTAwMEI0RkYyMTU1MUI5QzMyRDQzQkI2MjlERjhGRjE5NTJEMzcKLToxMEI4RjAwMDhERENERjBERjU5Mzc0RDZGQUQ3QzNEMTVGQUIxMDk5MDkKLToxMEI5MDAwMDQ0MDEwQTc5MkFGQTU5NTY4NTJFNTYzMDc3M0JFRUY3Q0MKLToxMEI5MTAwMDMzMTlGRTQxQkI0OEE1REM1QTNENkYyQTY2MjJFNUQwQUIKLToxMEI5MjAwMDc4ODNEQzEzOUY0MDlFNkJEQzQwQjJEMzk0QUE4RDY3NzIKLToxMEI5MzAwMDQ4MkQyQkM5QUYzMzYyN0RBOEFDMEY4OTc3NDhENUE1QjgKLToxMEI5NDAwMDE0MTc5N0FDREFGMjVCRjMyMjYyMDg4RTU5M0MxRTlFMDQKLToxMEI5NTAwMDczRUY4ODhEQjdDMjdDNzI3Rjc5RTMxRjMwM0Q4NzQxREEKLToxMEI5NjAwMDMzODA1QkZFQjIzQjA3NEM4N0ZGMTZBQ0Q4NzgyM0E2MkEKLToxMEI5NzAwMDRGQkNDRUU4OUNDMThGRTA1NzY2OENGQUYxRkNGQUU4MjgKLToxMEI5ODAwMDk1RjJBQkIyMjYwRkQwQjlDMkFGN0REMkJGMUE0RjA5MjQKLToxMEI5OTAwMEU1NEY5NUZFNDNGOTRFNERENzVFODY3RkQ3MjYwNTEyQkIKLToxMEI5QTAwMDkxMEY0RkRGM0IzMjAzREI1NzM2REU3M0M4Qzc4ODVGMkEKLToxMEI5QjAwMDA1MDdEMDc3QTU3NzcxMTEyM0JBNjA1Njk3RDA1QjVFRTMKLToxMEI5QzAwMDg0MzcwQjQ5RUNCRjM3MUYzRjg2N0MzQkZFRUZFNzEzMDQKLToxMEI5RDAwMDdGMDhERjk1MDk4Q0NFNjM4MUZENDlGNjlDOUFBQURGMkEKLToxMEI5RTAwMDIzRjJCOTNFQkQ5MDY3MjRCQzRFNDZDMTBBQUMzQjA1NkMKLToxMEI5RjAwMERBRTBCRUM3Nzg2MDRFMkJBNDdGMkVGMDNDOEJFMzREN0YKLToxMEJBMDAwMDgxM0M5RUVGN0JGRDQwNkIwQ0FFMzc0QkM3RjU4RUE3OUMKLToxMEJBMTAwMERCOEVFNjc2NDhCN0ZGQThEODBGNTkwNjM2MDVFRERDNzEKLToxMEJBMjAwMEMwMjYxMTc3NkU1OUUwQzBFNzNCRDZFMkJFNkJCOUM5QkMKLToxMEJBMzAwMDk5MDZFQkNBQkFERjQ4RjQ4NDA0OEFGNjUxOTY2OEE3REYKLToxMEJBNDAwMEI4RTVBRUI2OEZDQjY5OUZCMUQxQzBEMjI4NkVFMDBFRkIKLToxMEJBNTAwMEMzNzM2NDAwQ0ZCMEFBNENCMjU3QzNBQzY4QUY3QTg1NDkKLToxMEJBNjAwMEE0QUE4ODFFN0IwOEY1MjIwQUI0MkNFRkFENTNBQzMwOTMKLToxMEJBNzAwMEZFQUU0MkIwNDczMzdCRUMxQ0Q1RkU1OTlDOUY0Q0VCOEQKLToxMEJBODAwMDU3RUQyMDY4QzdCMEREOEZFNUE3NEEwQjRCMjJCQjE5RTUKLToxMEJBOTAwMEU2ODNGQkY3QjY0QzI2OTBFRDEzNTJGRkY0MzIyM0Q5MjAKLToxMEJBQTAwMEFGNzZBRjdCQ0E3MEI0NUI5N0E3RTZBMEREMEFFMzlBRDYKLToxMEJBQjAwMDI0NkU3RkZEM0JDQTY3QkI0RUY5NUUyOEU2RTBCOTQ5QkMKLToxMEJBQzAwMDc1MUY4MDA1NzREMTE4ODc1M0VEQUFGRUU3QTU2M0U3QkIKLToxMEJBRDAwMDU0QjkwNTk1N0Y5QjJGOUZDMTdFRkY1OTcyREQ2MzU1MzkKLToxMEJBRTAwMEU4NEQ0RDYzRjg3OUUwRTkwQUJEOERDRjM3NTM5QTlFNTIKLToxMEJBRjAwMEZGQjNEQjczQTdBRTkzRkU3OUVCRkUzOUQ3RTFGQTlGNzQKLToxMEJCMDAwMEIxOEVEOEZGMjFGOEQ4M0NGOTdGQzYzQTZFOTlGMjRGMzIKLToxMEJCMTAwMDVDODczNzVGNkVDOENGNDM3OUQ2NDZFNzg4RUMyRTdFQzgKLToxMEJCMjAwMDJFMUNFNERFM0RCQzlDQ0IzOThCOTMwOTY0QzdGRjc0QUIKLToxMEJCMzAwMDc5RDc4NEZEOUQ0MTFGMUNDRkExNzg3NzA4M0ExODY3RkIKLToxMEJCNDAwMDg4QTVBMTg4RUNDREE1OENGNjgxODYyQ0U1RkI0MDQzMjkKLToxMEJCNTAwMDk2M0E0RDIyREEwMzE2NkUyNzBFNTJFQ0NFNDE0QkI5QkYKLToxMEJCNjAwMEREMTlBNzlDMkI4ODhCMTE3RDMyRDQzRkY2Q0I1QkNBQTUKLToxMEJCNzAwMEU3QzZFMEJFOTA5MUVDRDVFNjM2RERGNTE2RDQ1MzVFMEYKLToxMEJCODAwMDg5Q0U4Rjg2REE4OUQyRDI5NTRBOUM1RjZCOUZBQUY2QkUKLToxMEJCOTAwMDY4MUFFMzc5RkRCMkIzQjQ0RkE3REFBMzQzOTRGMkI0QzEKLToxMEJCQTAwMEE1N0MzRjYwNDg4QkQ2MUU4REFCRDZEQThGRkE4MjEwMEIKLToxMEJCQjAwMDNCNzNBOUJBN0ZEMDQ5RUJEMzJERDdFOUYxRkM3RkE4MUQKLToxMEJCQzAwMEREODk3QkIwQTgxNDA3QUI3QTA2QjRGRTRERDczMEY2RkEKLToxMEJCRDAwMDc0N0VGN0Y5OEMxQ0RDMUY5QUI5NUFEMEU4Mzk1NUNGMUUKLToxMEJCRTAwMDAyMjQyODdFQTRFMkUzNDNENDczODgzRkY3MzRCNTVGOTAKLToxMEJCRjAwMEQyNkYzRUFGNDg3MDRDMkU0RkQ3OUM1MzYyRUM3RTFFRTYKLToxMEJDMDAwMDJGNzE3MzNBRkFGNUVBMTE2QkQxQUVEREI3RUVDNjM3OTQKLToxMEJDMTAwMDMxN0Q2OUZEOURFMUU1MDRBRkY1NTQ2RjdGQ0JDNkVCNDcKLToxMEJDMjAwMDMwRkY1MDc2QkIzRDEyRTZGNUQwQTg1M0VGMDlEMEVGQjgKLToxMEJDMzAwMDZBM0NFMzg1RUJCMzc4Mjk4RkI2MTQ5RThCRDBCMzdBMzgKLToxMEJDNDAwMERBREZEQkE0MEY0QzlGMERFNTJCMTI0NTFDOTFCRTIzQzAKLToxMEJDNTAwMDFEOTgzMjE4OUQ5RjMwNTk3ODdFRjUzNThDRUVFMzMwNzMKLToxMEJDNjAwMEU1NUM5RjFBODcwOTNERDdCN0NBQzNDNzU5MDVGMEM0MTkKLToxMEJDNzAwMDczMzU5NjE4N0UxRkE5MzlFMUZFRTkwOEVGNjY4NzgxQzIKLToxMEJDODAwMEUxMzkzOThCNzJFRTRGNjJENUFFMkFBODc3REM3RUJGRTAKLToxMEJDOTAwMDdEMTZFRTBCNjcxODg4N0VBNDk4Q0UyNkM0OTNEOTlFOTUKLToxMEJDQTAwMDYzQUZDMjcxNDJFMjM1Q0QyOUU5MzcyMDU5QkNCNUZCRkIKLToxMEJDQjAwMEYwOUU2NzIwN0Q3QkNGQzkyRjMxOUQyQUI1RUZDM0YzNUUKLToxMEJDQzAwMDI1NTI0Njg4OUZEMjZCQkY5ODExREM5Qjg3MzM1RjRBMTEKLToxMEJDRDAwMDMyOTYzQjZFMTA5MTRFNzVFQjZGOUE4NkZFNTRDMTUwQjIKLToxMEJDRTAwMEU3MUE1ODRGNTgwMkYzMUI2MDFFNjFCREY2ODk3OTdCMzUKLToxMEJDRjAwMEE5MjA5Q0NFRDU0ODk2RjUxNTBERDhERkE4MDhCQTdGQTcKLToxMEJEMDAwMEMwQkUwM0FFQ0JBN0YzNERGNDU3RjY4MEE4NDczQTBFNUEKLToxMEJEMTAwMDUzRjY4RkMzMzI3QkVEMUZEM0ZDQzIzMDRERTE1OTNCNEMKLToxMEJEMjAwMEU0QzMxNTdBNUY2MzdCQ0E4N0ZCNzc2QjEzNTI2RTEwOEYKLToxMEJEMzAwMDFEM0RGNTY5NUYxOUQ2QkJGMkJCMUJBQjY4NUZGRDI2RTUKLToxMEJENDAwMDkzMTVDRjlGODUyOUZCQ0FBMUUzNzRBNTNBNUI2NzQzOEUKLToxMEJENTAwMDZBQjQxODY0NzMxNkYxNTUwRjVGNzJFMEQ4NTM4M0U2MjYKLToxMEJENjAwMDAxRjVGQTlDQTczQTZFNzMxRUM3ODNEQTlGRDFDMjY0QUQKLToxMEJENzAwMEI0MjM0M0Y3QUQ0M0ZCODE3OTcwQkU1NkVBQTlGRDMxODgKLToxMEJEODAwMEQ2NDZFNzAxNzQ4ODhCNTE3REI1QUJBN0I5MERERkU5QzUKLToxMEJEOTAwMDI0QkIxRkZGODJFMzgyQ0MxQTQzRkMzNUFDNTVEQkNFQkIKLToxMEJEQTAwMDlDQ0FDRjBEQThGNDE4MkEyRkE1RDBGREY3RDQ3QTZGMUUKLToxMEJEQjAwMDM4RTE4MTlGMjcwOEFEMUYwQUQ3RDBGNkYwQjczMzU4NzYKLToxMEJEQzAwMERFREQ2MEUxRkI4ODVEQTk5REI5MjJBQzdCQTUzRDQ3MjYKLToxMEJERDAwMDMzN0Y1QUJGRDBEMzdGRUZGRDNDNkRCRTRDMzZGNkI5RjIKLToxMEJERTAwMDNFOTQwNzdEQ0Q3NzgyNEVCQjZGNTk2Q0QxQjYyRjhEQjcKLToxMEJERjAwMEQxN0U3NzI1NjhGMzkyNDVFOURGOTE2REEyRjMxQThFMjMKLToxMEJFMDAwMDdDMTM5RUY3NTNGOUQ4MThFMkVGRjc4QURGMkFGQTJFNEYKLToxMEJFMTAwMDkxQzk3NDFFNzU5M0RFNzkwRUU1QzRFMzMzNDBEMjAxRjcKLToxMEJFMjAwMDdEM0MyQ0Y4Q0M1ODJFNTVCNDVCNTEwRkM2QUREMzkzNDYKLToxMEJFMzAwMDlDN0FGQ0FFNUJDRUUwQkRBMDE2QTA2Qjg0RTU3MUY3RUEKLToxMEJFNDAwMDQ3OUI2RUM1N0NCMTQ4RjEwRDlCRkI3MDM5RDI1MUNCM0QKLToxMEJFNTAwMDc3NUZCRjM3MUJDRjlGM0EwRDc0Q0U1QjNEQjdCMTc1OEYKLToxMEJFNjAwMEFDNjEyQjFFMEI4QUNCOTRDRDY5RjBGREExMkFFNjg0MzAKLToxMEJFNzAwMDk5QjAyMzYzNjMyMzcxRkMyREQxQTIxNUY1RERGM0QxQjUKLToxMEJFODAwMEY1RkY4RTcxOTRFNjE5OENGNjE5NDJFMTU3MzdEMjQ2QzgKLToxMEJFOTAwMDcyMzY2RTc1QjY4MEY3NUIxRTFFOUI1Rjg5NzIzMTA2MjcKLToxMEJFQTAwMEZDNjU5NEFGOTBDQTdEQzUxN0M3MTVGMEY4QzBCNkM1M0MKLToxMEJFQjAwMDJGQzUyM0JFMzc1ODBGREI2OTlFMTVBMjEzQTdEODUyOTIKLToxMEJFQzAwMEMxRTU3RjhCODVEMTNFN0JGM0E4NTIzNzFFNERFQzcyQzYKLToxMEJFRDAwMEM5MEUzQzhCRDhFMkRFNDFGMzVFNTkyRDcyRDlBQzlDODEKLToxMEJFRTAwMDk3MDE1OEM4NTEzOTlDQkUwQzM2NEFGRDk4NkUzNEIzNDAKLToxMEJFRjAwMEY4MzkyODk3OTJDMkU4N0M1MDdGRjY4MUI0ODRDQjU3RkEKLToxMEJGMDAwMDZDNkZDQ0U5QkZERTQzMTE4REYxQzg1Q0NCNjdFNDlGNTkKLToxMEJGMTAwMDlGMEJGRDZEOURCMTk5RjJBQTNDOEQ1M0U4QkJCQkRGMzEKLToxMEJGMjAwMDEwM0RCQTFCRjA0QjcyMzYxQUU0MkM5RUM3NjM4RTg3MDUKLToxMEJGMzAwMDg5Qjc3NUY1QzJCNDIwM0FENTU1ODA3Q0NERTJFNzJFOUQKLToxMEJGNDAwMDMwN0VCQkJFQTgzNEUzODdGQzRDOUQ5QkNCRTUxODU1RTcKLToxMEJGNTAwMDFFQkJFQjk3NjFEQzA1REFGQjUxNUY2MzNGNzhDRTBGQzgKLToxMEJGNjAwMDUyMTlEN0I3NTFBODNGNDQ3RUYzMEM4MzAzRUYzOUU4NDkKLToxMEJGNzAwMDJBNDAwRTQzN0I1RDgyNTY0RjFDMThDOUYxMzVGQkMxMjgKLToxMEJGODAwMEJCQ0M5RUEwMzg0RDhDNzIxRTY2QTNCRURFOUMwNkVCMTkKLToxMEJGOTAwMEQ5Mzg0Mzc0NkUwNzc4NkNBOTY4MTBGQThBQzdDNDU1RkIKLToxMEJGQTAwMDcwN0U5OTBERjVEMTZGREU1MjkxMTMxQkJDOUU2NjhDOEQKLToxMEJGQjAwMDczQzBEMDM2RDcwRjlGREJEMzg1QzhCRjVEMjM3OUJDNTQKLToxMEJGQzAwMEJENjdERDFDQkU3MTQwM0ZBODg3OUE0Nzk3QUVFNjZBMDEKLToxMEJGRDAwMERBNDE3MjU1NjdFNTZENkRBRTdBM0EwN0Q5NTVDMUNGMzIKLToxMEJGRTAwMDVEQUQxM0Y4N0U4MkE0QzRDQjlCOEJGMjQ5QkZGNDRCQUEKLToxMEJGRjAwMDJGMTUyQjQ5OUY4NEUyNTc5RDNGRkRFNTA3RTkxMTk5RDUKLToxMEMwMDAwMEYxRjExOTg3OUJCNENFNENGQUUxMDdEQTNCNzRGOTRBOTcKLToxMEMwMTAwMDdERDQwQjFFNkQ3RkJBNjI1MTM2RTNGOEE4NUYxMEFGNzYKLToxMEMwMjAwMDNBRTZDNTdCOTNBMUZEOTUyQUZDMTYzQTFGQzk2OUUwNDMKLToxMEMwMzAwMEVEQjE5RDhERjg4QkY0REI2OTAxRTBDOEU5ODJDRUExRkEKLToxMEMwNDAwMEIzRjczODNDQjcyNDNBN0M2QkY4MDEyRUQyODc3NEFFMzQKLToxMEMwNTAwMDJCQTVGNzc4OEYwOThFNjVCOEVGRTg3RDVEQTJGM0U3MzEKLToxMEMwNjAwMEExN0E0RkNEQUI3MDMwQjEzNkU3OUMzRUVDNEQ5QzBGQzIKLToxMEMwNzAwMEVBMzU2OUE3RDc4OUZBMDFEMDk3OEFFRDM2MkE0QjA5QTQKLToxMEMwODAwMEJCQjNENDVDRTBFOEFERDdCQTVDNkRBQkFGODI3MjkzNjIKLToxMEMwOTAwMDgzOTlGNjAzM0M0QzUzOTk3RjMwQzA3OUVEMzNDRjFDMjQKLToxMEMwQTAwMEJGOEFGNTNEMEVBRTAzRjg5OUUwQkNFNkY5NDczM0U2RUEKLToxMEMwQjAwMDQwN0JGM0VEQUQyNkI0Qjk0M0NGQTFGNTZFRUZBNDc2ODYKLToxMEMwQzAwMDcxNEJBQjRDRDMxOUM1MjM2NTU0Qjk4NjA4MEJEOUFGNTYKLToxMEMwRDAwMENDNzQ4NkU0QjMzNEM5QzZFREE3MTAzREI5MEVGODUwNTAKLToxMEMwRTAwMDhGRjA0QTY0MDRBRkQwMzg3MUU4Rjg0OTA1QzlGQ0RFMjYKLToxMEMwRjAwMEU0RTI1MjFBNzc0MzQ1QTcxRUUzOTA1REFFN0FDNTRFM0YKLToxMEMxMDAwMEYyRjRBOUVGNDJGQkIxN0IzQUE3MjNGRjc3MTUxQUM4RDcKLToxMEMxMTAwMDFFN0VGOEMxNDk5MzExQ0ZERTY1MTJDNUQxN0FEMTdCNUQKLToxMEMxMjAwMEM4QkEzRDIzRjU5Q0FFMUM4QkNEMjg3RkI3Q0NCOURCQkMKLToxMEMxMzAwMEVDRThDM0ZFRDg1MjMxOEJDRTJGNUE5NjcwM0I2M0E1RTQKLToxMEMxNDAwMEJEODFFNDg4QTU0MkI5RTdBMkQ4Q0I3MUFBQkYxM0EyRUEKLToxMEMxNTAwMDI3Qjc1NDM3OThGMURFOUI3QURFOTA4NUQ4REI5N0VERDAKLToxMEMxNjAwMEJGMUZCREJCNjFGOThCRjFBODRGRUUyQTY5ODhDNzc5NjMKLToxMEMxNzAwMDZGODlGMDRGNzcxM0RGRDU5MzlGMDJGMjM4MUVFNUYxRjgKLToxMEMxODAwMEEyOTEwRTkyMkZEREYyN0ZDNjM5M0IwRTFFMTg2OTU1MjMKLToxMEMxOTAwMEY4OEFEQjQzNUZFMjdGNDFCRjY2OEQ5MkE3MTQ2MDFDODMKLToxMEMxQTAwMDJEQjU0NDhFNzY2MEJDNzRERkJCRDMwMEFFOTNCRDdBRjAKLToxMEMxQjAwMEYyNjM4REZCODFGNEMxMkYzMjI2Mzg0OTVGOUUxRTY4RTEKLToxMEMxQzAwMEIwMjI5REFDNkFGQzQ2OEZGNzZCQ0VFMkU5NTVFODdGNjIKLToxMEMxRDAwMDU1MDJCNzg3NTZDNTE4OThERjQyRjNBMTQ1NEY3NTJFMTMKLToxMEMxRTAwMDY2QThBN0Y1MDlEQzM3MDFCRkM1OEY3OTE2MjMxMEZEQjYKLToxMEMxRjAwMDRDOEVGMUJBQUQwMDg3MjkzMUJFQkIzMEFENEFBQ0Q3MDkKLToxMEMyMDAwMEQ5NjA5QzEyNDdCNDgwRjA5REEyNjNDNTA2MUVBRjlEMDUKLToxMEMyMTAwMDg1RjM1QzExRjMxMUM1NTkyN0E3QzVEMTdENTRBM0M1N0EKLToxMEMyMjAwMEFEQzNGQkM5N0E2N0Q1RjZCNThDQ0U4QjUxQkMxNUIwQzIKLToxMEMyMzAwMDRBRjdFMThDMThDN0JEQjYyNzhFQUJFRTEzQTlGMURDMjcKLToxMEMyNDAwMDc1MDUyOTA0MkYyMUMxRkYyREUyMjNDQjFBMTBGMTFFMDEKLToxMEMyNTAwMDdFOTgzRTQwRjZGOEFBNDYxM0Y5NDFDRDA5M0JEQTkxQTMKLToxMEMyNjAwMDNEMzIyM0Y4M0VBNDdBM0UxN0UwNjNCMTAyN0M1NjBDQkYKLToxMEMyNzAwMEJDOUJENjk1OTQxNEJCMTdFN0E1RkE5MUYxMjBBRjUwNUIKLToxMEMyODAwMERFNjUyNUNDOUI4QUVCNEI3QUMzRUQ0QTg2N0FDNjBDRDkKLToxMEMyOTAwMDVEMzY2MDE2RTBFQUI5QTI3OEFDMUVDNjIxM0M1OEQ4REIKLToxMEMyQTAwMDM4NENGQkFCQkYyMkQxNDBGMUQ4RDBGMjI3MEI3ODVDRTEKLToxMEMyQjAwMDMyMEIwNTIxQUVFQjVFMTNERENGNUQ3NUUwQkVGN0FBNTQKLToxMEMyQzAwMDUwN0UxRTMwMzlDOTY3Njc4MTE0QkNGRkRFMUQ3NzY2NUEKLToxMEMyRDAwMDdDRkZEREFFOUNCRkI1REIwRDc0M0ZBNjNCQkVDQ0Y4NEEKLToxMEMyRTAwMEJFQkMxQUU3ODgxQUU1RDk4Qzc4RjIzMUM3MjFGNEM3QTkKLToxMEMyRjAwMEZFQUI3MThGMUI0NkNBNEY2MDdGQUM2REMwMTVDNTYzMjYKLToxMEMzMDAwMEMyQzZFQTY4OUYyNzI5ODU3OTgyRjcwNTU2MjlFQjVGMUYKLToxMEMzMTAwMEQ1MEQ4NzdBM0JFQUY1NzUyODk0MDdGNjBGODc4RDM3OTgKLToxMEMzMjAwMEU3QkIyNjIyREQ0NkVDODg0N0ZEREE0N0JDNDMxMzE3RkUKLToxMEMzMzAwMEMxN0IyODc5QjEwNDYyRkE5M0FBNzk5QzI0NjZFQTNDMEQKLToxMEMzNDAwMDhBNzc0ODUzRjkzRUQ5MEExNjYwRkNEQ0EwQzA4NDdDODkKLToxMEMzNTAwMEJBRUE0QkZEMEQ3MDg3RThEN0NDN0E5MjkzOTFBRTkwRjQKLToxMEMzNjAwMEI4NDgyRjdGNDVFNjc2NjU4OERDREJBMkYwRjlGMTAyNUMKLToxMEMzNzAwMDI1RUU5MUNGRjJCRkU3OTMyNUJCMjg1MkQ5Rjc4OTE4NTQKLToxMEMzODAwMDk1NDI3MkU4MTE1NzBBRDk0M0M0MUM0MUYwQkU5QzlERTYKLToxMEMzOTAwMDczNTBCMTg3N0VBNzlDOEZGNzJCRTc4MzBGMkJFNzgzMjIKLToxMEMzQTAwMDVGQzU3NzBCQzA5MDNGODZFRjE2NDA3QUJDQzk0OUU1NjAKLToxMEMzQjAwMDZGMzQxNTI4Q0E5OUUzNkY0NUVFOTI0OEIyMUY5NEY5N0QKLToxMEMzQzAwMEU5OTRGOUFEQjA0RTczMjUwMzdFNTY2REQzRDM3OTU4RjkKLToxMEMzRDAwMDYzQzI4NEU5NjhDRjMyQUZEQzlFMTFEQjczRUY4Nzc1RUYKLToxMEMzRTAwMEMyQkZGQzlFNzNBNzVEMDkxRTNBNEYzQUM3Q0FGNzNGMEEKLToxMEMzRjAwMDU1N0MyRDU0RUFBRjEyQjYxOTkwNUZDNzc2NkFFMTM2QzQKLToxMEM0MDAwMEZFNTJBNEM2QUUyQzYyREFGMzk3MTM0RDQzMzRGNTRCQkIKLToxMEM0MTAwMEFDREFGMzk3OTNFQ0Q3NkFCRTRGNzY2OENGNUY1RTk3M0UKLToxMEM0MjAwMDMxM0U2NDFGNTY0QjU3MEIxMzgwNkU4MDRFQUEzMzdERUUKLToxMEM0MzAwMDM0RkY4NUQ2NTI4QTdCQ0QwREI5Qzc3NDQ3QUIzNjNGRTIKLToxMEM0NDAwMERGQTdDRDJGRENBRENEQUJFN0M5QzM0NjI5RjQzMDkyRDEKLToxMEM0NTAwMDhERkMzMUYxNEVFNEY3MEM4NUVGMDcwMUJGNkZCMzNBNjUKLToxMEM0NjAwMDk5MTFEQUNGMTY3OEJGRjgxRUM2MDAxQkVENEJDOTc2QkUKLToxMEM0NzAwMDhDMjNBQ0UzRjc5RkIwNUNDN0NCQkRDMzk1RjY3QUJFMDcKLToxMEM0ODAwMDZGQzU4RURCRThCRTFENEJDQ0UxRUQwNkYwRUY3RUZDMDgKLToxMEM0OTAwMDhFQTRGMTcyMEVBRjg3RkUxMkQ2MUJBMkY0NTNDM0U1MzEKLToxMEM0QTAwMDkzOUM0NUZFODI5QkVDMzMyMzZCQjM2MjZBMDFGRUMyMTAKLToxMEM0QjAwMDM0OUEzOUU5OUU3NTBDQUIyN0JGNzU5MDcyN0YzMjUxNjMKLToxMEM0QzAwMEU4QTRCQzQzQjA4NjYxM0U0NTcwQTZGMEY4ODU4RkU0RDEKLToxMEM0RDAwMEMzNTA0OUZFNzUyQUYxODk1Qjc0NDdGNEU2OTcwREI5OUMKLToxMEM0RTAwMEJBMDdGMEFBRjg4NjAyOTFFNEUyMjM1NjQ2RUZGOUQ4OUIKLToxMEM0RjAwMDVDRjcxM0JGNkVDMzE2QjA2RTMzNkI4RjQ5MTU3QUY4QjUKLToxMEM1MDAwMEU3RURCQzYxQzQ1RjEzNUMwRURBMkZCNTE1MjQwQjc4MjAKLToxMEM1MTAwMDJFQTU4ODg1OUNDQjM2NDU2OUU4QTNDNDFBMTc0MjVGQ0YKLToxMEM1MjAwMDQzNDJFODRCNEI3RjdGOURFQ0Q1NDUzOTkwQ0U0MkU4QTYKLToxMEM1MzAwMEYwMkZCRUU1NTEyQzE4QUY0QzhGRkEwNThGRDU4OTc2QjgKLToxMEM1NDAwMDRBMDU5RUNBMDI5NjRGNzU0NjlCMzFFRTY3OEJEMTczQTIKLToxMEM1NTAwMDc5QTVEODNGQTU0QTlGQUJFNDU5RUJCMkUxRkI2QjU2RjYKLToxMEM1NjAwMEQxNDlFNkY2QkEyRDNERjEyNTE4REY5NjAwRjYzNUVBRjkKLToxMEM1NzAwMDYzOTk5MTVDN0RCMEQzMUY3NjM1RDQ3RjA0RkNGRjY1NTEKLToxMEM1ODAwMDBDRkQxQkVCNjRCQ0VGNjVCNUU0MTA1RjNGNjI0OTc5QkQKLToxMEM1OTAwMDAwRjM1RUQwRTg1ODdGNDMzMUY3QUZFNUU4NkM4MkVGRjcKLToxMEM1QTAwMDUxQTFCRTA1RUZBNTNEQzJGMjRDQTlDMUY1MkRCQ0ZFQkYKLToxMEM1QjAwMDdBNTk2NDUxOTA5RjE4MzE4MkVBQkY5RDY3NjZGOENFMjAKLToxMEM1QzAwMDgxNzdBMEQ5ODc3MUVDNjNGMkFDNzdERDQxRUI3RjdCOUIKLToxMEM1RDAwMDE0RDcwN0FGMTkxQ0YxQTgwRjFFOTk3Qzc3QTY4N0QyMzQKLToxMEM1RTAwMDc0OEQ1RjY4NEIxMEU0QkVDRTE3ODU4RjM2NzJCRDkyOTYKLToxMEM1RjAwMDVCRTJDNzc4N0M3NEMyMzQ1Nzk5MDNGRDFEQjcwQkU5MjEKLToxMEM2MDAwMDQyRTcxMkYxRTg1QjM3RkQ0NDJCN0VBOEU0MDZDMTBGMzgKLToxMEM2MTAwMDRCOUI3NDVEMEU0M0ZGRTMxMTBCNzczNTFFMjk5RUQ1QUUKLToxMEM2MjAwMDUyODZGOTAyOTFFRTAzRDk1Q0UyRUJEOUI4QUUwMjdFRjQKLToxMEM2MzAwMEZFRjA0QUU1NzFBODFFMTgzMjlBREJCRjkzODY0NDNDOEYKLToxMEM2NDAwMDMwMTRGQURGNTAyNDVBQjFGRjBEN0EyQkRERTdGMTRFOUEKLToxMEM2NTAwMDY2RTQ1NzE3QkJFQTk3RTBCQzZEMDkxMTBDQ0Y2RkRBOUYKLToxMEM2NjAwMDBBMUE3OEJFRDhDMENDMDA0RjkzNkJCRDE3RjE2OTRBNDcKLToxMEM2NzAwMEY1OENDMEY2NDcwNzdFN0ExQ0VEMTk1QjgyNDgzQTcwNEMKLToxMEM2ODAwMEEyQ0JGOUFFMUJFQjE3MjhGMTlERTI3OUVCNzAzQzlCMzYKLToxMEM2OTAwMDQ1QjQ5QTU5MEYxQzU0QjlCRTlFQzlDQkM5RkZCMjBBMDIKLToxMEM2QTAwMEY0REVDQzBBNkI0MzBEQ0VFNzkxODQ3MEIyRjM2REFFMkQKLToxMEM2QjAwMDA2MEJFMjc5QzM0MDNERDE0MTQ5MjI3RjU3NkE1NUMyRkEKLToxMEM2QzAwMEI0MEFDQ0ZGNjJBMDkxNzFCRUYzMkYxRjhBRkU4MTUzODIKLToxMEM2RDAwMEEwNzUzNTVCMUE2ODVFQzcyRTg5MzlDMUVGOTZBOEE5ODcKLToxMEM2RTAwMEQ5QTE4NUNGRUY0NkYxRjg5MDA5RTNGMTgwOUZCN0Y1MjYKLToxMEM2RjAwMENDOUM5QThCRjRBM0E3Nzg1MzdGN0M2QjczNURDRTdFMjIKLToxMEM3MDAwMEZCNjFGRTJBOTQwMzBCMTFCRTg1OTdDMjk4NEY0MEZBMzUKLToxMEM3MTAwMDNEMjk2MUZFNzc3RjAxNUI4MEQ2RDk2MEMxRkU0MTZFMDUKLToxMEM3MjAwMEJCRkFBMkJGODhEMTlDN0U5QjBCMEU0QkY4NEU4MkQ3RTIKLToxMEM3MzAwMDIxMTAxRjM0NUI0RTRFNDQzRTc4MjhCNThDRThFOEExQUEKLToxMEM3NDAwMDgyOEY5QTg5MkY4NkYzRkNEQjc5RjdFRTQxM0M3QTEzQ0UKLToxMEM3NTAwMEMzNjk3RkU3QTE4MjU5MzFDMUY0QkU2MDk0NDhGNDMyQzUKLToxMEM3NjAwMEVFNkY2MTRFM0ZFMjYzOTQ4MUY4RkI5MTA4Qzc1NjhDRUYKLToxMEM3NzAwMDRGNzlGM0NDNjRCRjRCODI3NUQ5NkM5OEU3QzQ2MjI4QkIKLToxMEM3ODAwMDg3RkVBMjVENjIzRUYxN0U3NTA1OEYwQjJCMzA3RUQ1NTQKLToxMEM3OTAwMDY1M0I4NEY4OTA0QTY2MzE3RUFFNDkzOUY3MTQ5MUVGRDMKLToxMEM3QTAwMDVDNDMzNUI0RkE2Rjk1MjU5N0RFQ0ZEODkyRDA3MDQyQUUKLToxMEM3QjAwMEQ5QjYyMEJCNkE5MDIyNTcwNjk0ODg0NTI4REYwNjU5Q0YKLToxMEM3QzAwMEI4NUQ2NUVCOTQwNTk0QkJBMUZCNDdBQUJFRDcyOUVERTQKLToxMEM3RDAwMDhDMzI1QkE2QTM1NDFCMzdEMjE1NzA3RDFCNkE3RkU5OTAKLToxMEM3RTAwMDJDREM1RUMzM0ZCQzhGQUVDRjM1M0Y4OUU3Mzg3NDMxNTgKLToxMEM3RjAwMERBN0E3RjE5QTU5QzczMEFCMUFGNTQzQURGNjBFNTdBMDMKLToxMEM4MDAwMDYyNDNBRUQxODc3NEJEQTE5OERCNTkyQTFGQUJGMjQ3QjIKLToxMEM4MTAwMDg1QkYyQTg3RDQ3QjdFRUYyOEY2OTU1MTRFNUUzNjg3RkEKLToxMEM4MjAwMEU0RUE5OUU1Nzg2RjA3RDQ5RTczMTdDMzdCODk1NkZBQkIKLToxMEM4MzAwMEZFQUU3MjFGRjE5NDYyNkZCREE3RDg1QkZGQTFEODVCRkIKLToxMEM4NDAwMEVGQTNCRDA1Rjk4NjUxODMwOEJGMzcxNDJFNzZERDA4QTYKLToxMEM4NTAwMEYzMUE5MDIwMTFERjE0M0E0RTRDQzRFREFGNzExOTI3MzIKLToxMEM4NjAwMDJDN0REOTYxMTFEMUEyMEVFMzA1OEYzNEYyN0I0OTM2QkMKLToxMEM4NzAwMDk3RUQ5ODE1RjE1OUNGOTVGOTJDNkI3NjY5MzRCQkJDQkYKLToxMEM4ODAwMDdDRjJFMzdBRDJEMTNFRTRFQjdCNTVCOTRGNzk0Qzk5RjcKLToxMEM4OTAwMEZGNzE2NUZFNkYyOEYzNTdFRDhGNDk0M0JFMzJBMUJDOEYKLToxMEM4QTAwMERGMTBBRkVGNDc3RTI5RkMyOUE3RDBCOUE4NTA3OUI1OTIKLToxMEM4QjAwMDAxQzQwOEU5RUIyMjkxRkM5RjIwNzhFNzZBRTRCRDI1REEKLToxMEM4QzAwMDIwRjdGNTRFNTlDOTY4MUVCRkRCNjA3NjU3MkM0NjdDQjEKLToxMEM4RDAwMDRFNjYxNEE3OURFOEFBMjdCOTY1MDNCOTQ1NzJCM0Y4NTcKLToxMEM4RTAwMDVDRUI2Q0NBNDczODgzRTU5RTUxODE2M0IxQ0I1QThFQUQKLToxMEM4RjAwMDcyQkUzODQ2NEYxRjU3MjRBNEQwQkQ1QkQ1RkUwRTFEMTcKLToxMEM5MDAwMEY3NzJGMDBDOTU2N0E2ODJGNTVFRTJGM0ZGNDc3MjZDNTIKLToxMEM5MTAwMDJDRTNFMzhFQkQyNDNBRkQ1Q0RFMUM0RjI2NzkyMzkxODcKLToxMEM5MjAwMDdDMEFFRDVGOTUzNzZGNjNDQzY0MjBCRTRGNjRBMUZCM0EKLToxMEM5MzAwMDAwNzcwQTYxNEU4NEU3OUQyODdDMzAzRjk3RDE3REZGQzgKLToxMEM5NDAwMEMxOEEzRDY3NTdERUQxMDE0RUExQjhDRUQ4NEVCMEY1QjEKLToxMEM5NTAwMDgzRjg3QUZDMjU1M0Y3MUI2Q0RDOEU4RkQ2RTQyNzlBN0MKLToxMEM5NjAwMEUyMzVGNTRCQUNDOTlBRUY5M0VDQzMzNURGMjczQkIyMDgKLToxMEM5NzAwMDM1RjlFQjMyNDY2OUVBRkZDMjU5QTRDOURGNTAzMDU5OTQKLToxMEM5ODAwMDUzQkY0QzJFRDNFNDY1NjZBNTc3NDgwRTM2RUQxRUZBRUMKLToxMEM5OTAwMEIxMUVGREE3QjZBMTFGQTdGNTg2NEZBMUYxRjAwQjBFQTIKLToxMEM5QTAwMDYwRTFCNUEzOEI2N0U4MDA0Njg1NTE4N0VGNEM4NkZDQjQKLToxMEM5QjAwMEM2RDE5MzY3RTg4MEVGMEEwNzFGRkUzQTE5NTg2OEQzN0IKLToxMEM5QzAwMEU4MjkzQzdGRjVFMUFGNTMyMEJGNjVGNDc1M0MzRjg2MTUKLToxMEM5RDAwMDkxRjBEQzNBN0FFQTBDMkZFMDU5MUNFQTc5NzQzNEQwRjEKLToxMEM5RTAwMEYxMkQ5N0VBOEZBMjNERjhDNzY1RDNFNjI2NEJGODRFQTYKLToxMEM5RjAwMDQwNTk2MjA2Q0NFNzZDOEFFNzYxRkM3RTczRUNBQzE1QUIKLToxMENBMDAwMDc4MTE3NkZDNzdGNTc0OEZFRDM3QTM3OUJCOEU4QkZDQUMKLToxMENBMTAwMDVEOEQ4RThCRkMxRDBEQkJDOEYxRjY1MzUzRjVCRUNCNUYKLToxMENBMjAwMDA0MEU5QTdFREY1RjExNjQ3RUFGMDVGRENEMzk2OURDQUYKLToxMENBMzAwMERGQzQxNEZENEQ0Q0QxREZDNDE0RkRDRDM5N0FFRTZGNDcKLToxMENBNDAwMDYyOEFGRTI2OTZBM0JGODlFOTVCNEQzMkE1RUYzNEI5MTEKLToxMENBNTAwMDI4NkQ2RjcyNTNEQTdEQkZFMDI5RTc2QTNEMEEzOEVGMkYKLToxMENBNjAwMDRGOEI1Qjk4QzNFNDE3MTE0RUExRTc0QTNBRjQ5RDRGRjAKLToxMENBNzAwMEQwN0VDQTQ1RTZDMEZCMTI4NzIyNEUzOTcwQkZBQzM5NjIKLToxMENBODAwMENGNDQ3NDJFNzRCNjNCNENGMEJEMzA5N0U3OUIyRkI2NjUKLToxMENBOTAwMDNCNTA3RTYxMUVFRDlFOEVFOEI2NkM5NEJGQ0RCNTE2MDAKLToxMENBQTAwMDI3RUVCQjM1NUZGNEM3MjM5RjE0RDYxQkU4REU0QzcxMUQKLToxMENBQjAwMDY3MjdDNUU5MEEyREZDQkQ4NDQzMTFDNzhFMjhFMzkxODEKLToxMENBQzAwMDVDREE3OTkxRjk0NTdDMjdDN0RDRUVCMDJBRTM2MDNGNTgKLToxMENBRDAwMDMwNkUzMkVBQjdDMjI1MzAyRUY1NUJCRjk4RkFBOUIwQTYKLToxMENBRTAwMDc0OEYyQjg0OEM2QkZBRTE3MTI3MEE0MUUzQTY3NjMxQUYKLToxMENBRjAwMDdBMTcwMUM3NzU2OEM2RjU0Qjc0M0ZGQ0EyNUZDMjc4MTAKLToxMENCMDAwMDYxNDdCNEQzOEU3MTREMzU1RjhDREYyMUJGNDVDRkRGRDgKLToxMENCMTAwMDVGMkM3NEY4MjVENDkzQjhCRDg5RUY1QkM2ODFEODMzRjgKLToxMENCMjAwMEQzNzkwRDFGQzk2NUE4NDc3MUI5OUQ1RDdDOUQxNzlBODIKLToxMENCMzAwMEZDMEI5MDlGOEE5NTc3NjBDMDhDQTU3QjlCNEMwQzczRjcKLToxMENCNDAwMEEyQkUyODkxQkUzQjM2MzgxN0RGMzlFM0VGQTAxNTFCOTQKLToxMENCNTAwMEREREI5MDFGRUI3NDVDREVCMDE4MzNERjU3RDBCNUNGNTAKLToxMENCNjAwMEZGMTVENDNCMTkzQjk4RUM5NTA0RkI0QjJDNzUwNEI0OTIKLToxMENCNzAwMDVGRTRDQTQ0QkJFMzI0NUI0RjcyNjg3NTk0RTc3RjhGMjAKLToxMENCODAwMDA2N0FCRTMxQjM1RTUwRjQyN0Y1NjM3Nzg1RUZDMEZEQkEKLToxMENCOTAwMDg4OEU1Nzg2RTUyMTFGNEQzMzNBNUU2NEMwQkY3RjFGRTQKLToxMENCQTAwMERENDRGQzNDMkRDQTkxODcyRkFDRkQ3REY0MEE5RThGOUQKLToxMENCQjAwMDczQkM4ODM3ODNBREFDNjk0NjcxRkM4RjNGMkY0NUYxNUMKLToxMENCQzAwMDBENzQ5QUE3MEEzQUI0N0ZENDczNTM3NkQxMTMzNjA2RkMKLToxMENCRDAwMEUwNTRFQkZBQ0FDMEU3RDc2OUMwNzg3MEQ0MTgwN0MxMkYKLToxMENCRTAwMDZGRTA2MTQ2RTc5ODNBMjc0N0Y4NzZFMDdFREY4MEZBMDMKLToxMENCRjAwMDZDOEM4N0IyNEM0NzFFRDY0QkQyNzdEMjdERjI4RUVGMkIKLToxMENDMDAwMEY4RkQyN0E4MTk3OTUzNTBGQ0ZFODk4MzkyQUJBRkY4NDEKLToxMENDMTAwMEUzQzkzMURDNEU1RDk0NkE1OTg3NzhBOEIzOUI0Qzk0ODQKLToxMENDMjAwMDFFQkM0OEU3ODI5OUNFOUQ4QUYxNkJEOUQwRjc3QkE5Q0IKLToxMENDMzAwMEFGOEVFMUZBMjE3OUE1NDEzMTAyNDE3NEMyOTRFNTMwMDkKLToxMENDNDAwMEE2RTZCRDBDRjREMEY2QkJDM0JBREY4QjAzNzAzMjQzNEIKLToxMENDNTAwMDlBQzhGM0RFMUQ4RjE3RUIzNEY1NjVBQ0RGRkQxREUzREQKLToxMENDNjAwMEY0QUNBN0JERkNEQkNEOEYyRjRGNTVDNjQzN0E5OUM3RDcKLToxMENDNzAwMEM4N0YwQ0Q1M0I2QjBCNkRFQTNCM0Y4NEU3Qzc2M0NDQTkKLToxMENDODAwMERCRTkzRDUyNDk3OTg3MTRFQTVBMzE0RTExQ0VFODNEMkQKLToxMENDOTAwMEFFQzFCRjM3RkI5QTgxOUU3NjlBMzkzREE3OEEzQ0REQUIKLToxMENDQTAwMDI5RjJGQUVBM0JBNUVBQkI2QkNGMTQ3QTZFMkJDQ0EzMzAKLToxMENDQjAwMDdFRkNENDhGQjQzNzFCREZDQjg4Njc2RDM0QkVGQTZFMzEKLToxMENDQzAwMDk0NUEyRjAxRjQyMDA5MkI1RDY3M0FFMkFCNTAxMkZCMTYKLToxMENDRDAwMDg0RTdFNzYzOEFFNjIwMUQ1QzY4RjJCMjRGODJGNENERjgKLToxMENDRTAwMDg1RjBDOEM2NjBGQ0Q1NDlEQUY3NUEzRjFGMzM4MURBQjAKLToxMENDRjAwMEE5RUQ2QjFCMjdCMjRGMjg3OEU5MjczQUFBNEQxNTY5OTEKLToxMENEMDAwMDFGQkQ0RTYyQUZFMjNCOUMyMDU5MERBODk3RDU3NkE3NzgKLToxMENEMTAwMDQwREVFMjc4RUY4MkZDQzVGNDNEOTBCQjlGRThEMTNFNTcKLToxMENEMjAwMDlENEVFOUZCNEQxRTJBM0ZERDU0NEQ2OUEwQTk5RUNBQzgKLToxMENEMzAwMDNGNkE2QUE0RjQ5NkRCMjM3MjkxN0YxNkVENUZDNjNFQ0MKLToxMENENDAwMDA5QTJGN0RBMzZCRDI3MTA5NDNGNTVENDM3MURBRDUxRUYKLToxMENENTAwMEU4RTg1NDcyREZERjlGMUNDM0VEQkI1M0UzMzgzRTNCNzIKLToxMENENjAwMEMwREVDMEY3REE4MDJFOTc1QjZERkREQjFEMURDQUZEQUUKLToxMENENzAwMEFFQTNFM0Y5RkU2NTQ3M0NDRjJGMUZDM0ZENkU1OTY0OTgKLToxMENEODAwMEFERDhGRUU4NzgwM0VGM0Y0NUFDQzZFRkIyOERGNzdCMzgKLToxMENEOTAwMDJBNURBNDc3QTQ3RTM1QjFFOEZFMzE1ODNGMTZDQTczRTgKLToxMENEQTAwMDdBRjJBN0FFRTJERkU1NDFCQzVDOURBRkZBRkRCNjQyODgKLToxMENEQjAwMEFCRkFFRTYxM0E3RkNGOEZERkY3MDI3QUE3RkVENUZBQTIKLToxMENEQzAwMDYzMjY3MDNFMENBREVGNEJFNUU3Qzk0M0UxRjFBOUMyMjQKLToxMENERDAwMEI3QzQxNzY4NjcyMzFGMjQwN0YxNDU5RDgzRjg0MkE1NTAKLToxMENERTAwMDQzOTVGRUQ2MTY3MjM4QTcxQTE1M0EwRkU3RTdFRTA3RjUKLToxMENERjAwMEEzMkU4NDc2ODNFM0NDQjQ4RjIwRTNCQkNCQjA5RTlEN0YKLToxMENFMDAwMDgyQzIyRkExRkNBMEJDNjNBQ0YyODNDQTA3MkFCRDBGNkIKLToxMENFMTAwMDA2M0VFM0VGMzRGMzc1OEM5NUZBNzk1RjU4NTk0NzdCRkEKLToxMENFMjAwMDZDQzQ1RDg0RDc4MzdBMkJFQUFEQjExMjdGMkY3OUIwQzEKLToxMENFMzAwMEQ4RjVDRUVEQzg5RkIxMTEwRThDOTE5NkFDQjJENEY3NTcKLToxMENFNDAwMDI1QzczRUZFQUZDMjQzOTUwQkZEQzBBMzE3MUMwQ0NBRkQKLToxMENFNTAwMEJCQzMzRjEyMEUyNEU3NTA4RTIzRkRGNjIxQjc0RThDNDQKLToxMENFNjAwMEIxMjk3NjE3QTdERkNGQzdDODZGMjIxRDc1MDg2NjFEQzkKLToxMENFNzAwMERFN0JFODMwRjc3RDVGRjBFODc4QkUwRTk1OEVENjE2NDMKLToxMENFODAwMDMyNEEwN0UzM0E4N0Y2OTY3QkVBN0FCQUQ3NzkwNzIzREMKLToxMENFOTAwMEY5OTcxQUM2Q0I0M0YxQUNBRTJCNDhGRTlEQzE3OUE5RDgKLToxMENFQTAwMEYwNjQwQ0VDMUZFODI3QTFDNjQyRUZFOERENTZFOEUwOEQKLToxMENFQjAwMEZDMzZGMEQzQ0EwREFDNjdGRDM1OEEzRTdCNEM5NEY4NDYKLToxMENFQzAwMDdCQzg4QTdFRTkyRTE3QTQ5OTY1OTkxQUJENDM0N0NGN0UKLToxMENFRDAwMDNBNUZFMUVGOEFGQjQ1NTY4REVGNzJBMzZGMUQxQzE3NzkKLToxMENFRTAwMDFGNTJDOEU1NDNEN0Y0M0MxMUY3MTMyRkZDRDU0MkY3ODYKLToxMENFRjAwMDhCMkYwQ0VBM0M4REY2Q0U4NTU2M0Q1M0RFMjM5QjJBQzQKLToxMENGMDAwMDgwREU5RDhCM0UxMzBDRjlBNUYyOUVGM0U3RThGNzBFNDkKLToxMENGMTAwMDgzN0E2RDE3NEZBM0JEQjU2OEFCQzQ0Qzc4OUU2MEVCQTgKLToxMENGMjAwMDM3QjcyMDNEQ0Q3QjQ1NEZFNzk5OUE1QjM3MUU0NzdBNEYKLToxMENGMzAwMDNDQjc0RkMwRTc2RkQ5ODU3RDAyQzUzMTZCNUIyMjdDNjIKLToxMENGNDAwMDY2QTg1RjBBNzlBQzdGQzc2RUM5QzdFMzhCMzJDNTM5NjMKLToxMENGNTAwMDZBOTRGMTNFMzFEN0E1QTA1RDNFNzFFQjVEM0E4NEZCNEEKLToxMENGNjAwMEJDRUQwMjhCODM3RThGQjRERTc5MENERjFEMzlCNzhENkIKLToxMENGNzAwMERGMkY2QjM2NDdFRUMwRjk5NzRBRUIwQzgzQTA3Q0MxREMKLToxMENGODAwMDc2NUU1RTYzMjlGRDBDRjc0MzE3M0NDRDI4RkVCMzYwNDcKLToxMENGOTAwMDZGMDRGOThGRjM1QUY0MUYwNTgyRUM4RUVBNkREQUZDMDgKLToxMENGQTAwMDdDRDY2NjQwM0E1OEIwNTM1QjVFQjMwN0YyNDFGMjc5RTMKLToxMENGQjAwMDUwQTExMjJGMTlDRUIyMjk1RUQyQzJFMzA3QUE3Q0VGOEMKLToxMENGQzAwMDZENUY3QkI5MUM2RDUwREVGRjY2N0Y4OUE1RjcwRjVGMzMKLToxMENGRDAwMEY5MjZFOTIzMEJDRjk3MjlGOTMzOTBGRkVBMUI4RTE3MjcKLToxMENGRTAwMDE1MkU3NUNBRDg1RkM1QjNEQzM2NTg2N0REMkI2NjJCQTYKLToxMENGRjAwMEZBRUQ3NTA3Q0U0NkUyNzlCMDQ1NjEwMTdBMTc5OUJEMjEKLToxMEQwMDAwMDJDNTlEMURFN0I2MEJGRTQ0NUY4RDYxRTM0M0Y4OUZCNDYKLToxMEQwMTAwMDk4NzUyRjlFMzA2MDNDQTE3NERGNjJCMjU3MjYzMUVGQzUKLToxMEQwMjAwMDRBRjQ5QkZEQTJDOERBODk4RURBRTk3RDVGMjY3N0NFQzUKLToxMEQwMzAwMEMzN0UyRTFDMzA1QkQxMEVBODdCRjk0RkM3NkVDN0ZDOTgKLToxMEQwNDAwMDhCMDJEREE3QkM5MDE4MjAzQTk5Qjc1NUEyN0I0MzBDMDAKLToxMEQwNTAwMDJEQjRGQzFFM0E5MTEwQUY4OEU3QjYyODdBOEZFNTBFMDIKLToxMEQwNjAwMEM0M0JFMjE5RjBFRTQ4NDYzQUUxNzFEMDc5NEY0QkY0RjcKLToxMEQwNzAwMEJEQjlCNUQ5ODBGNUNGRjkzODdFNTVCQzk3NEE0QjA5NzMKLToxMEQwODAwMENGMEIxRUU3Rjg5Q0I4NzVEN0U2MzBBNDgzQTdGNTY0RUMKLToxMEQwOTAwMDhGMUY4MTc2ODM3ODNCMEQxRDE4NUVFMUZENUZEOEM1M0IKLToxMEQwQTAwMENGOTE3N0QzQzEwMTYzMzcxREUwM0MyRjQ3MDdDMEE3NUQKLToxMEQwQjAwMEE0RjcyRjQ3MDc5REU4OTc5MkJGRkZEREI5QzdEMDBFQjEKLToxMEQwQzAwMDhGRTBFNzg3RDU3NzFCRDU3NzFBMDcyRTNDNzUxNERGREQKLToxMEQwRDAwMEU3NEFCM0JGNDA3Njc3QTVFRDhCREFDNThDREUwOTlEQjQKLToxMEQwRTAwMDUzODhFNzRCMjZCRkJEMDJEMTc3NzJDQUIzRDkxNDJGM0MKLToxMEQwRjAwMEQ1MDc3NjZEQzE3ODQzNzQzOEM1QzczQTkyQ0JCNkUxOEYKLToxMEQxMDAwMEZCOThDNUI2NkY5M0Y2QzIzQTE2RkRDRTQ4RTcxMUVCMTEKLToxMEQxMTAwMDE1N0VDNjNGM0MwN0EyQkU0QjBDNzhBN0YzMTlCNTA3OTYKLToxMEQxMjAwMDhERkM1Q0M2M0VFREZCRTExREYxOUNDRTRCMEM5RDk1NEMKLToxMEQxMzAwMDhCRDE0RjgwRkU3MDFDNDFFNkZFRTlDMjgzRkMxRDQ1ODkKLToxMEQxNDAwMEQ1OUY1Q0E4QkVBN0I4NDdGQjZFODM2MDdEOUJFQTNENzgKLToxMEQxNTAwMDUwOTg0MjcwMTgxQTM3RDY4MTc2Nzk3MzM5RjM4NDBENTYKLToxMEQxNjAwMEZEMjE3REMxREZBOTdDNUNGMThCRkFCNTI3RkJEMTFCQ0EKLToxMEQxNzAwMEFBMURDOUJDMjFGN0RBMTVCOTc1NDcwMTlGRTNEMUJCRDgKLToxMEQxODAwMERGRDBFMTdCOEMxRDNCRjlFRjNCQ0MzRjA4RjIyQTA2NTgKLToxMEQxOTAwMEY3MTlGNTFBQjk1M0E3RDRGRjE0RTkwRkUwNzZERTVCNEYKLToxMEQxQTAwMEZGOTIyODA1Q0I5N0Y3OEJCMTlGOUFBNzc5M0Y3NTQ4RDcKLToxMEQxQjAwMDU3MTQ1N0Y1NkYwRTgzRkVCRTZDRDMzM0U0OTcwNTRDQkUKLToxMEQxQzAwMDkxMzdGQjIzMjg2RUQ0NEJCRUVDRENCRTEyQ0RGNzUwNUEKLToxMEQxRDAwMEJBNUEwODc2MjYyRTIyOTRCRUVBRjY2OUVCM0Q1REE4N0YKLToxMEQxRTAwMEVDN0IwRTY3RDdFMEY5RkZBRjMxRTA5MEQ3MjM1RkJBNTEKLToxMEQxRjAwMERGRTk2NzhFMjhFNEVGNkU3RDI4NjhFRkVGMEY2QjA1OUYKLToxMEQyMDAwMDk2MEZFQTc3QjhDRkM0NjNBNDRBRkVFQURENTY0REZFMTYKLToxMEQyMTAwMDlBMzZCQkE2RkVCNUZCMUQ5QUVGRDlGRTBDQ0RGNzExRDEKLToxMEQyMjAwMEM3OUQ5QTdDNUU3QjgxQTZGRUM4Rjc2NDREN0U1NEMwODQKLToxMEQyMzAwMEE1QTkzRkU2QkM1QjkzRUZDQTg0RjVGNDYxQ0ZBOEU5RUEKLToxMEQyNDAwMDI0QkJBMEE5M0ZEOTYxRDZGNDdGNUQ0NkI0MjZERjY1MzMKLToxMEQyNTAwMDUxRTBBM0Q4OTlBQUZERkJBNzQyNkVGRjg2QTYyQTdDQkYKLToxMEQyNjAwMDdGRTFENDhFQTNGQUVEMzcxNDY4QzcyQjkzQjVFMzVENDUKLToxMEQyNzAwMDI5NUVGMDFENDE5RDlFRkY3RTAyQTZGOEZCMDlCQTM0OEYKLToxMEQyODAwMEZFRkIwOTk4QzdERjRGQzAxNDdGM0YwMUNCN0ZEREU0NzEKLToxMEQyOTAwMEE0RkNCRUE2MDJDQUJGMDQ3RTA5RTZGNzgzOUY4MkU5MEEKLToxMEQyQTAwMENCRTA5RjYwRjlFNUUwNzc0QzE5RjdCODMyRUUxQkNBODYKLToxMEQyQjAwMEI4M0YxNTRFNkYyOUZEQkRBM0Y0ODdFRjBERUFGNDNEOEQKLToxMEQyQzAwMERGNkI1RDc5RTIyNUUwRTMyMkRCNjc3NDVGNTk2RTA4NkUKLToxMEQyRDAwMDk0NjIxQ0EzRjM3NTg5RTFGOTY3RTZGMTFENkY4QTQxMzkKLToxMEQyRTAwMEZEMzY4MEExOURDNERDOUQ2RkUyM0U2RUREOEI0M0FEQkIKLToxMEQyRjAwMDc4QUVFRjgxRkQ3Rjc4MDdCRjVGRDgyNzUxQkNFNkYwOUQKLToxMEQzMDAwMEZFQjM5MUQ4Q0Y5Nzk3QzJFOTMwMEFFOTQ1QzhENzdDRDgKLToxMEQzMTAwMDJCNTA3RTBEN0NDNzczNjc5M0Y3NEFDQUJCNjc2REE0MTkKLToxMEQzMjAwMEVGQkU0QzU1RjMzRUJBMkZFRERFQjNENzgwNzg1QUI4MzYKLToxMEQzMzAwMDdCMkY3RDdGMURGODVBRjM3REY3NzZDRDc3MkJENjg3MkYKLToxMEQzNDAwMDc0QTFDRTQ3NzE4NUNGRjdBQkZERjlBOTdFNEQyQTdGMzkKLToxMEQzNTAwMDNGRkVGM0RENDc1NjhFNDE3REJDQjc2QTAwQzZCNTE3NjgKLToxMEQzNjAwMEVFMzkxMTNCRkIwN0YwRjFENTRCQ0Y2NkEyMUVBODNENkQKLToxMEQzNzAwMDIwMjlFN0QxNzg3RkI1MDdGNDRBOUVDRkJGMjY3NTZGODUKLToxMEQzODAwMDI5OUUzNzYzN0IwNEJBQjNGNDI1NUI0RkU3QzQxNkVFREUKLToxMEQzOTAwMERGNTU4MzcyNzY2MUM2RUQ3QThBN0ZCNTQ5NEFCQzgzRDAKLToxMEQzQTAwMEJGRDM1MDYzNjVEQ0FFNkJGQjNBMTJERkE5RkY3RERCQjgKLToxMEQzQjAwMEQxRUJGMTFFNzRDN0MxMjNGNDVFNENDNzNFNDlFMzRGNjUKLToxMEQzQzAwMDhEMURDQkYxM0I3NjJDRjdGRkJFREM3NzI0MTJDRjA5MDUKLToxMEQzRDAwMDNFRDA3Njg0QzM1REU3QTdGNTFGNTZGMjFEOTAxMkJDQzAKLToxMEQzRTAwMEY3NEJCNEZFRjk5NzI0Q0RFRjAxQjhDMDcxQTFGQkNEODYKLToxMEQzRjAwMEZCRDMyMjcwNUQyN0RCRjg3OEQzNDA3RDUwNzk2QUQ1NjYKLToxMEQ0MDAwMDFDOUNGRjFCRjZGMjNDRTU3RDMyRkFEREExOEVBQkFFMzMKLToxMEQ0MTAwMERCODU3Mjc2NjE5QkQ0RTc3OUY3MzlEODJGQ0NFRjk4MEEKLToxMEQ0MjAwMDlFRDNFOUVCQTkyRjFDMUIwNDcwN0ZDMzM1MjA5Qjc0OEUKLToxMEQ0MzAwMDg0NTJBRjYyMkNENzlCQTUwNjRGMkFFQTkxOTMxNjQ3RDgKLToxMEQ0NDAwMDA0RDJGOUZEQUVBMTExODhERkMzOTg2MkI5RUI0OUJBRTUKLToxMEQ0NTAwMDA3QkU2MDFGMUZFRkE0QjUzRDEyRTlFRUU0QkUxMTUyRjYKLToxMEQ0NjAwMEYwRkVDQjJEQ0E3QUJBRTlCQjFCNkY1RUMyNTNCNTZGMTMKLToxMEQ0NzAwMEJCMDVGQkU5QzExRjJGOUYzNkQ2NEFGNURGRjA5REI4RUIKLToxMEQ0ODAwMDA1RURBQzkzMTlGQ0REQzA2MzA2NDZGRUY1QzIzRERDM0MKLToxMEQ0OTAwMDRFM0U3OTcwRjBGNkUwRkI1OUQzMTQ3Qzc0NjRGMDdENTUKLToxMEQ0QTAwMEY1MEJGQkY1NEFCRERCNzczMTREM0QzREM3RDc0RUVENjIKLToxMEQ0QjAwMDdDQUNCRTMzMEZBMTdENUVGM0I4NDQ2NzFENkFGNEY1MDIKLToxMEQ0QzAwMEIxQjhGRTRGQjc2OUU3NTdBREMwQjk0NkVGOEY4RDBEQzQKLToxMEQ0RDAwMEEyRDc5QTAzREQ3QzYzMjEzQTNGQTBGMjg5ODNGMEE5QTkKLToxMEQ0RTAwMEUyRjE2NDg2QzRFNzY1RTdFRkY4RDVFQ0RENDU3NERENkQKLToxMEQ0RjAwMDNCQkVDNEUzQjc4M0VGMzEzOTI5QkU3NDE5N0Y1QUI1RjcKLToxMEQ1MDAwMDFCODJGQzJERkFCRDIzQkQ2QjY4OUU5OEQyNjMxRjlDQzUKLToxMEQ1MTAwMDJFOTQxRjFBOUI4NzdFOTg5QkZDQ0M5MzBDRUM1QjE4NzcKLToxMEQ1MjAwMEIzMTZFREVCMjhGQTFEODlDRDM4NkVENzNFM0RCREZGMTEKLToxMEQ1MzAwMDVGNkIzQUIwMDBERjIzRUY3MjAyQTNDMEJDQkJCNkU5NTkKLToxMEQ1NDAwMEJCREY2NzQ2M0I3NzlFNjJFNzdFRUFGMEU0NEJBMDdGNTUKLToxMEQ1NTAwMDZCOTc4OUI0QkU5QTNEOTIwRkNGMTc1QzUwRTRERTU3QUIKLToxMEQ1NjAwMDdCOTM2RjQwN0FBRDM5MkU1OUQxM0Y5QUQ4OTZGQzcwOTMKLToxMEQ1NzAwMDYxMkVFOTc3QjI1N0VCREFCODlENUNCNzVCMjBCQjU4RjgKLToxMEQ1ODAwMEI1NDM2QTE1M0JFNDlDNjIwNzlGNUJENkM5RURFMzU3NDAKLToxMEQ1OTAwMDA0QjYxMUVBQUQwRDAzN0IwNEU2NUQ5QjM5ODVFQ0RBMzgKLToxMEQ1QTAwMDVBNjlERENBQzEwRTNDNDdBNUI1MUJFNjFGM0M0NEU3REUKLToxMEQ1QjAwMEFFQzBDRUQxOTQyRkRDQURDREQ3QjY2OUYzQUFCRkY4RkIKLToxMEQ1QzAwMEQyRDg2RTNCNjMzOEZBMzcyNTUyNjExQ0YyQzM5QjBBRUUKLToxMEQ1RDAwMDVFNTU3RkU3Q0U2QjlDRjRGQjI3MEZFODFDNTNENEI4NTUKLToxMEQ1RTAwMDA0QzI2QkQxMkIyRkNDQzc3OUZCNkFDMjlDRTQ3RjM0NzkKLToxMEQ1RjAwMEZFOTZFMERBRjExN0VFRDc3NEUwREUxQkYyMzNFM0YwQ0IKLToxMEQ2MDAwMEVERDhDRkU5N0M5MTVFRjBFMUVGQkEyQzQyNUQ4MUZENkYKLToxMEQ2MTAwMDk5MDRERjMyOEMzQjdCQkIyMjQ5M0UyOUU3MDgxQUNBQkEKLToxMEQ2MjAwMEI5RkYyQTYzMEMxOEE2QjI3RTJDRjdFNzQzRjVFQTM4NTcKLToxMEQ2MzAwMDVENDA4QTBFOTIxMzgxQjEyOTU0QUZEOEMwQ0Y1N0RFMTYKLToxMEQ2NDAwMDE5RTEyNEZEMzZDNEM0RURGNTIxMjY2RUFGMEZEMTc1NjYKLToxMEQ2NTAwMDJFQTNERjg1MTgyNEYwN0Q4RUFDOTc2OUZGNjA2RDlENDkKLToxMEQ2NjAwMDg1RjYxNzA0N0I5NTBFRTFCMTc2NTA5NTBFRTk3RDg4MUQKLToxMEQ2NzAwMEI1MkQwM0ZEM0EzNTVGOENERjMzN0JFQzgzNTI4QjQ3NEUKLToxMEQ2ODAwMDg3RTNFQzhDMTc5NDdEMDRBRTRGQ0I3NDU2N0Q3NDkwNzkKLToxMEQ2OTAwMDdFNjU2Qzk5NjY3RUVBM0RDQzlGN0Q3RTU2OTg5RkE1RkYKLToxMEQ2QTAwMDY3N0U4MEVGMjg2Q0ZGNzVBRTkzRUM4NkE0MzJGNUY3QTkKLToxMEQ2QjAwMDFBRUE0OTJFQThGMEZDMTJFOEJEMTg3MDQ1Nzc2QzgxNzMKLToxMEQ2QzAwMDZFNkFCNjFEMjJGRkIyOTZCNUFGQzQ3NkE1OTE3QzFERDkKLToxMEQ2RDAwMEE1MDZGRUJFNTE2OTE4NEY3NUUzQjhGQzJBNTFEMkE1QzQKLToxMEQ2RTAwMEUzQjRGNkMzOTE3MUIyN0UxQ0E0M0JDNkI5NERFM0YyMUMKLToxMEQ2RjAwMDY4M0Y5NTc5NjE3RDBENkZGMzc3RDY0M0U1M0U5NDEzQ0UKLToxMEQ3MDAwMDNEN0QwRDdDODhGMjZGNDZCRDYwNERENUQ4Njk5Q0JGQ0MKLToxMEQ3MTAwMDE2RjFBMjZFM0U1QUY4RjY5M0M0MjdFQTM5Q0M2QUM2Q0YKLToxMEQ3MjAwMEY5N0I2NkEzRDk5QTFBQzQxNzhCOTBERkQwREU3N0MzMzIKLToxMEQ3MzAwMEJGN0M4QzEzRjBCRjZBRUI3QzNBOTdFOTY5OENCNUEyODkKLToxMEQ3NDAwMDVGQjc0OEZBOTJGNjI1N0UyQ0RGMkREQUFGQ0RGQkNEMDAKLToxMEQ3NTAwMDlDRkVGRDExMDJGOTQ5MTlFM0JBRTMwREM0OEY0OTBBOTEKLToxMEQ3NjAwMDdGNkNGNzA4NzQwRTYwRkI3NzNBMUVDRkFCMTAyODdFRjMKLToxMEQ3NzAwMDc3MzMxNDM2REE5NDQ5NjJCREVBMjJCQTRGNzIzM0UzNDIKLToxMEQ3ODAwMDQ3NjM1OTRCOENGMkJCM0QzMUI0NkY3OTkzQjJFRTlCM0EKLToxMEQ3OTAwMDc1RkU0MzI4NTc4RUVBREI5MjMxOUU3NEI0RDZFNEM0RkEKLToxMEQ3QTAwMEZFQ0I1OTFCQkQ2RjVBQzFEQTI5M0QxNTVFRjdBMjlGMEEKLToxMEQ3QjAwMDNBRjcyNjIyRERGREM5NjNBNDc4RDZGNkU1M0IyMjUwNzAKLToxMEQ3QzAwMEJFNjdCMUU1NTZEQzRGMDQ1MEVDQzZCNzAxRkJCMzczM0UKLToxMEQ3RDAwMDQyRjcxREQ1RkJDNDYwMkZDNzIxN0QwMkZFMjcyMTFEMDYKLToxMEQ3RTAwMDlDMDdEQ0Q4NzM3QUI3NUZGOEM3MTcyMzExN0Y1RjJDQ0IKLToxMEQ3RjAwMDc5RTE5NjVCMTlGQTVGOURFNDQ3MkRBODVGNDZGNzVERDYKLToxMEQ4MDAwMDgxOUNEQTMzRjI3QkYwQUFFMjVEQzU1QjM3NUUxREYwRTYKLToxMEQ4MTAwMDJGMThBRkIwQTYwNDg0OTNGNDY1MTlDOUE1N0Y5MUU4QzkKLToxMEQ4MjAwMDlDRDZFNUYwQUFDMjdEQkM4MjlGM0IwRTcwRjkxNThBOUEKLToxMEQ4MzAwMDZGMTUwRkI3RTJCQkY1NDM0OUVGNkUyMzNDMzEyM0M5QTcKLToxMEQ4NDAwMENCNTA3QUI4MUNCRTgwMzBFOTNDRDlDNDE4MjNGOUExNkEKLToxMEQ4NTAwMDgzNDUyRTRGMDdDRjEzMjg1RTc5M0JGM0JDMTI4MEY0MkIKLToxMEQ4NjAwMDk2RjBGN0Y1RkNERTBBQzc1Qjg1ODJCNzNGMzFERjJGMDQKLToxMEQ4NzAwMDMyOTJGRjcxNzgzQjMyQ0VERDM0NkU2MDZGQkUwREU1QzMKLToxMEQ4ODAwMEQzRkVGOEIyQzZFMUZDMzc1NTVGRkExOEYyNjMwODNGRTEKLToxMEQ4OTAwMDg3RjA2QjM3MUU5REYwMkYwODhGOUVDNjQ4RTJDQjZFMzcKLToxMEQ4QTAwMDdDNEI3QkFFNEMyRkUyN0YzMDhFQjU1RkYwRjk5M0FGQUYKLToxMEQ4QjAwMDgwNUYwNTQ2QkZCRkY4RjgzOEFEREU1NEYxQTZDMkE1QkIKLToxMEQ4QzAwMEJGQjhFMDA3Q0M3RkQ0MkFEMEJFMEFFN0UzQkI4RDc0OTMKLToxMEQ4RDAwMEZGNDNERDU3NTFGNzRGNUUxOUM3RjU1QzY4RkEwMUQ4NzEKLToxMEQ4RTAwMDRCQjg1RkI1MjZFM0U0NDBCNDMzNEYxOUQ0N0VGOEZFNUQKLToxMEQ4RjAwMEVGMDdDQkRBMTNGMUY3QjYzRTI4RTJFOTI5MDNGRkREQTMKLToxMEQ5MDAwMDBGMzUyRjg3RjFCOEU0MDdGMTQ2MkZDMkU5MDM2MUY4MUMKLToxMEQ5MTAwMDA0RDQzMzFGMDhGNzVDQ0ZGMzcxMDYwN0U2Q0JFMzI2ODgKLToxMEQ5MjAwMEUwM0Q5MDUzN0EzNThFNzlCRjEyN0ZGMEYxNzk5NDhGNzQKLToxMEQ5MzAwMDJDQTY3QTAyRkY1RDRBMDdGRURFMURGNjJCMDgzNjE3N0QKLToxMEQ5NDAwMENDRTc4M0JCRDJFODdEOURFRTdEOEQ3MURDMEU3RjQ2RkEKLToxMEQ5NTAwMDU5NDc3N0RDRkY1RTgxRTJGRTMzNTEzNUUxRkVDNDg0MzYKLToxMEQ5NjAwMDJEMkU3Qzg3RjNGNDdENDNCMzY5REZCNDQxM0IzRUVBNUYKLToxMEQ5NzAwMEZENjQ4QTk3NkVFMEU3RkUyRTc1RUFBQjgyRjQ1QkI3MzIKLToxMEQ5ODAwMEJFMkRCRUM4Q0JFN0U0RDFFRjhDQThCRjQ3MjdEQjg2MEUKLToxMEQ5OTAwMDczRkZEQ0M3N0ZERjUwRDU2NzVEQzc1RkIwMDRDNzczMTcKLToxMEQ5QTAwMDNGNTNFMkRGRERGOUUxMEYyNjA1RUJDMzQzNEZBRDRERjkKLToxMEQ5QjAwMEM3N0VBQTBEREUyQ0E3MDU3Rjg3RUVCMTI0QjQ1QkFBMzMKLToxMEQ5QzAwMDlGNUE5NTRFRjZGNDUzMEZBNEEzNUY1NEJENjM2REJBRUUKLToxMEQ5RDAwMDRDRjk3MDBGRjk2NTNBQkVFRTJGOUUxQjQ1RTdGM0Q0NjQKLToxMEQ5RTAwMEZFRjZDQURDQUZBODMwMUQyQTQxQkQzREU1RUFBRjU2QzAKLToxMEQ5RjAwMEUwRkU0MURBN0QwMkM1RkY2NkIwRjYxNUE4NjcyQjMzNUQKLToxMERBMDAwMDM4NUZCMTE2MTNDOTdGRTg4RkY2NkI3NzBERkZDNTRFRUYKLToxMERBMTAwMDk0MDc2RjY0OUNENUNGODE3QTEyM0UyMDM1MTBERkQ1RjQKLToxMERBMjAwMEYyQURBM0RGMDk1Q0NEN0YyN0IwQTc3RTIyRURGRjU2QzQKLToxMERBMzAwMDJEMTdFODlEQUIxOUY1RkM3N0YzQTRGMUQxMDRDNzU5NzQKLToxMERBNDAwMEFCQjM4RkQxRkI1NzRCNzlGOTE0QTM2RkRGNDlFQzY3NjgKLToxMERBNTAwMDhCODFERjNGNjRFRTk0RTBGQjcwOTJCMjVGMzg3MzlEODAKLToxMERBNjAwMEYyN0I3MUNBMzg2OTlCNjNCNzA3QUY1MzUyRjYxRDU5RjEKLToxMERBNzAwMEVBNzcyNERGNkU1MEYwMzI3NUU5ODk1N0VERDBFRjU0MjQKLToxMERBODAwMEJEQzczQzFFQkVCRkIzRTk1Q0FBOUY2MTFDRjQzMzNBMUMKLToxMERBOTAwMDVGOTg2NkYwM0MzQTFGRDdCREMzNDg3MUQyRENBQ0MxNzkKLToxMERBQTAwMDUyMUNENENGNTk1MkI0MTFEMzk5NEJBQjFFOUQ4RjcyRDcKLToxMERBQjAwMEI4RDU5NENEOEYzNUYyRjkzNTA4NEUxMUU1RjQ5MUVERDYKLToxMERBQzAwMEI3Q0U0MkI4OURERkM0N0ZGRkFCNjFGQjMwRkFEREMyNDkKLToxMERBRDAwMEZFRTRERUFGOUFGOEVGRjkzRERENjRBMkY0RDkyNjJCMUYKLToxMERBRTAwMEMzQTNFQkNGMzVEOTI5RkZBRjREMEU0QUQ5RjQzQ0NEQjYKLToxMERBRjAwMEVGRDhGNEQ3REY4ODRCRTFGNEJCNzNCOUFCQ0RGNDNCN0YKLToxMERCMDAwMDg4MEQ0NjM5NzUzQ0MwMkJFREFBREExRDBGMjhFQkMyRjMKLToxMERCMTAwMEY3QjhCMkJEQzkxMzExMEVCOTBGMkMzRTg2QTZCMzc1NjYKLToxMERCMjAwMDNDREY5NzdERjNFNEVBMjQxNEQ2NzcyQzNERjNDNDdDRTQKLToxMERCMzAwMEY4N0VGQjc4RjczNTA4MjdEM0I2OEIxNEE3Mzg3MjYwQzgKLToxMERCNDAwMDU1MjVDMkJCN0E4NzkxQUY0RjU5RjdGOTRERTk3MThGQ0YKLToxMERCNTAwMDYyN0NGOTc1M0RDNTBEMTY2RDNCRjNDNDAzMEM3Rjg3RTAKLToxMERCNjAwMDc3QjEyMTk4REVBRjc0QkQ1NzhGRTc3RUU2RTVGOEFBNUUKLToxMERCNzAwMDNGMzhGQzc4QkU1QTlCNDRGQ0IzMDNGODJBRjNBN0YzNjIKLToxMERCODAwMEQ1QTJBNUNCMDg3RUNCQzZCQjZGNDJCODlERDc3QjkzRjEKLToxMERCOTAwMDkwOUZDRTBGMUY0Qjc0RUU3RDQ1MjBGOEFCNzJCQ0RCMUYKLToxMERCQTAwMEFGNTZFMEJGNTA2QzVCNTc5OERDMjNDN0JGNjFCOTA0MjgKLToxMERCQjAwMERGNDMwNzNFNEQ0N0ZCRjk5QkZERTUzRkI4RUU5NzYwMUQKLToxMERCQzAwMERERkU2MTE4QUYzMzUxMUFGQTNEREZFMDE5RUE4NEY1NDIKLToxMERCRDAwMEU1RjdGMzNFRThEMkYxNkFGQzlGOUY1M0MwM0YyMTM2NDAKLToxMERCRTAwMEY4OUQyMUU2OEQ4MkY5RDQxQzE0RkM2MTU5QThDRjI2M0EKLToxMERCRjAwMDdEQTY0M0JGMTFGQ0NGOEYzNEU3OEMxOUZCMjg0ODlGQ0IKLToxMERDMDAwMEY3MzdERkNCQTU3NUQ4NEY1QThGREMxREY5OUVDOEZDQkUKLToxMERDMTAwMDQxN0E3QjU0MjA4Q0Y5ODNDNkVERjY3M0EwQ0M0MEZCOEYKLToxMERDMjAwMDRFRjEyNDE3MTA2Rjc4MkVFQ0MyODFFMTNCMzBGRjk5NDIKLToxMERDMzAwMDgxRTNGMUMyNEI2MDRGRjE3ODEwOTNGMjdCRDZGOUQ5QjIKLToxMERDNDAwMDgxMkZCMjUwQ0U4NkFFQjdFRUU1MkY4ODNFNkFGNkFGOTIKLToxMERDNTAwMEJBMjhEMEZBMjc3RkE2Q0JCQUZDRkEwRjNERjU0NTE2QjUKLToxMERDNjAwMEUyRUYzMzdEMjAxRkZEQjYwQjg2NDAxNkUyQTFFRUI3MzIKLToxMERDNzAwMDVDOUVGRjU4MzhBOEU1RjM1NzFCRThGNzNBRUIwNDEzMEUKLToxMERDODAwMEQxNDk4OUY0MjVDNTFGMkUxQ0U3RjE4N0JBMDM0RjkyQUQKLToxMERDOTAwMDNDRUQzQUM4RTM0MDhCQzRGNkQyMzg4QzlCRDQ5RjM5MTQKLToxMERDQTAwMDg2RjJBQ0NCQ0VGRDMxRTg5RkRFNzEyQjFDQUFFODQxOTkKLToxMERDQjAwMDVENjcxMkRFRjczQkQ4NEQwRkRDOEYzQzhGRkMzQjBDRDEKLToxMERDQzAwMEZCNjlBM0YzQkQyQzJCOUNBMTVERjEzOUYyRjMzMDdDRjEKLToxMERDRDAwMEJGMzA3OTI1RDJGOTc5REZDMDFDOTQ4RjZGNjZGREFEMTYKLToxMERDRTAwMDhFRTI4NkJGMEZBNzdCQjJCNTZEOTJFNjlDNzlGNzNBQkMKLToxMERDRjAwMDdDMTIzRjcwQzQ1NEZCMjk5Q0M5QzFFN0I5MEM4RTFCMzAKLToxMEREMDAwMEM4NkU3RTgzRUYxMzJFQkE4QUYzMTM3Qjk5RjM1M0VEMUIKLToxMEREMTAwMEYyNDMwNjdCNTA3RkJCMTU3RTUyRURDODI5QkZGRjFCMjcKLToxMEREMjAwMEYxRTVCMzg1MzJGRDA0RDU0RkE1QzdGRjlGRkVGNzRDNDMKLToxMEREMzAwMEZGMkY0MTMzRUM2MzAwODAwMDAwMDAwMDFGOEIwODAwQzAKLToxMERENDAwMDAwMDAwMDAwMDBGRkE1NUEwRDcwNTQ1NTk2M0VFRkJEMkYKLToxMERENTAwMEZFNDkyN0RENDkxMzQyMTIwODg0MDY0Mjg4MUE2MjAzRUQKLToxMERENjAwMDgxNzJENkM0RTlGQzZFMjAzM0JCMDE2QjJEQzQwODhERDMKLToxMERENzAwMDIyMjQ5RDc0ODJFOEVDNkFCOTZFMUEwMkFDNjQ3NTM2OEUKLToxMEREODAwMDhDNTk0NzFENDc5QjlGODAyOEVDNzY5NDQwQzBBMDBEN0UKLToxMEREOTAwMDBBQ0JBMjZCNDVBQTI2M0E1NTVCNTRBQkFDMEVFMEE2NjMKLToxMEREQTAwMDIzODIzQkQ2RTJCOEU3M0JFRkI1REQxREUyNEZFREE2OUYKLToxMEREQjAwMDhBQkE3REVFQ0ZCOUU3OUU3QkNFNzdDRTNEOEZCNDUyNDcKLToxMEREQzAwMDIyQ0EyMjZBQ0ZDRDA4MkEwQUZGQTY2RUEyNDU0NDZENTgKLToxMERERDAwMDI5MjQ3RkY2NDE0NTFGQUZEMzY0QkM3RDQwQTNDOTU4QjkKLToxMERERTAwMDkzRUIwOENFOUU0MTU0NDdERDI2OUE0NUI0ODQ0MjY1QTQKLToxMERERjAwMEE0NzFCRjI5RjJDQjVCNzlCQ0ZFMEQ2RDQxMTc5MzYxMTUKLToxMERFMDAwMDFCQUQ2QUIwMTNENUE2N0EwQjM2MTQxMzBEQUJDQUFBOTQKLToxMERFMTAwMDg2NjJDQzBCOTUyRTlENEJGNDBERkU3RTRBNzQ5Qjg3M0IKLToxMERFMjAwMDk5NEYyMjJBRDMxNDBGRjYxQjlEOUMxNkRDQzk1RDhCREIKLToxMERFMzAwMDk3RkIxQjQ5NEQ5OEE3RUFGMzk4NEY1MzA4N0M4MkEzQTAKLToxMERFNDAwMDI1NEIxREQ4NjhCNDY0OTkyMzNFRUY4RTM3RDJENjA3OTAKLToxMERFNTAwMDMxNEVBMUQyM0IxMkY2Rjk0QjhGODU2ODIxRDExN0NCRjkKLToxMERFNjAwMDE3QUEwRjY1RjI3OUFFREEwMzc0MzM1MThENzZFRDI5NzYKLToxMERFNzAwMDg1RjdERDcwQ0M0QzU2MDVGQzY3QkNBRkYyMzkwMjY3MDQKLToxMERFODAwMDM0RUE2NUZBNTI0NzBBNzlBQ0NDQ0U0QjFFMEZDRjFCNTEKLToxMERFOTAwMDk5M0IyOUQ4QzVFNzZGM0ZBMDkwODlFN0I1MURCMUVFNDIKLToxMERFQTAwMDRDRTE3OTZERTY0OEI2OUJGN0REMzZGMDNCOEI4N0RCQkUKLToxMERFQjAwMEY2RkVGNzJDQUVCOTU4Q0Y0NzM2NDM5RTE0MTVGQTZEQ0YKLToxMERFQzAwMDc3RjI0RjE3OTE3RjYwQ0VGQjc3MzEzRkZGNjk0REY0QkEKLToxMERFRDAwMEVEMzdCRDY3MjFENkQ3MDU5RThGRkQ1QTBFRjZENTgyNDgKLToxMERFRTAwMDZFQTVGMDU2MjdEQUZEM0NBRjQ4QkY5QjZGRjhERkU1MjMKLToxMERFRjAwMDVDNTc4NkIzMzg3RUJFRjgzOTVEQTJBNzE4QkRGODY5QjUKLToxMERGMDAwMDNFRjcwMkQ2OEI0NkVCNDM3NjU5RUUyMTk2N0I3MTZFMzcKLToxMERGMTAwMENFOEUyRTI1NzE5REFFNUY4Rjc2Njk0QjBFQ0IxNTlERjMKLToxMERGMjAwMEE5QjgxNTY2MTU0RDBENkM3NjQyMUY4NThBQjM5NzE3RjMKLToxMERGMzAwMDQ3NUY3RkI5NzQyREY0OUIxMjJDQkQ5RENGMTdCNTkwMTAKLToxMERGNDAwMERDQzdFMkM3QjY5QkI0MDQ3OTE2MEY2QTFFREM0MzM0MDMKLToxMERGNTAwMDk1OUEwRUM5QkQ3QkE3RTIzRUE4QkM2MUE5NjcxMkQ2RkYKLToxMERGNjAwMDhEQkU3QjJCNkYxOTU1NzlCREZERkE3MzA0Q0E3NTc5ODcKLToxMERGNzAwMENFQjBBOUM5N0QxQjcyRDdFN0U1RUQ4MEZFRDkwMEM0RkMKLToxMERGODAwMDhFNEVBOUZBRkUxRTk1QzdFN0M3RDdCRjY4OUNBNzQ2NjUKLToxMERGOTAwMDJCQ0U4OUYwRjgwNkM1OURFMzFDNjc5RjU4QkI4N0Y1MUIKLToxMERGQTAwMEJFODZFRkU5NDVCRTZGQjQyRjc1Mzg2OUNENkNBMkZEMTIKLToxMERGQjAwMDFEQjk0MkZGNzM4NzRCREE1MDQ3OTFGNEJGRDJFMTE2ODcKLToxMERGQzAwMEZBNjBDNzJENDIxRkVBRjAwODNERDA1MTI3RUREMThFRUYKLToxMERGRDAwMDA2RTkzRjAzNTFGRjhDNzBBMDIwRUNFMjE0N0M2RDRBRUYKLToxMERGRTAwMDlDMUVDRTFDNDM0RjQ5OUUzRjlDQTkyNEQzNTMxNDk5OTkKLToxMERGRjAwMEZGNzBCODNDMTg2MEZBQTUzMkE3OUM5MzhEQ0FEMUMwQjcKLToxMEUwMDAwMEZBNjg0RTRCMkZBMTBDQjRGOTQxNEE2N0JCQjE3QjAzQjAKLToxMEUwMTAwMDFFQjZGQjNGRDRFRERBNDMzM0M1Q0Y0QjMwQUYzQUYzRjYKLToxMEUwMjAwMENFNDZGOERCRTUyQzJCNjlBQ0NGQzMxRUVGREY2M0RFRjkKLToxMEUwMzAwMEU5RDM1NTA1REJEMTNGNjg3MzVCRjlGRTg3NTdEQzk0NjQKLToxMEUwNDAwMDAxQkQ0N0ZGNEQyMzhEQjdBRTI4NUFCMEI5OTRFOTBBRjgKLToxMEUwNTAwMEJCMjI3NkNDRkM2RTZFQzg2NkJCQzY0RkU2NTMzNUI4QTUKLToxMEUwNjAwMEJBRDRBNEUzODQ3M0I2MDJGREI3QUVDMTNFMUIyNkRCNkYKLToxMEUwNzAwMDE2NTg3OUZDNEFCOUY3NTdEODI3QTZGN0RBMjlFQjBBRDgKLToxMEUwODAwMEJDRDA4QkQ5RjVCRUNBRjMwMkZGNkVBNjVFOUVGNzgwQTgKLToxMEUwOTAwMEMzOUQ2NERGNDdDQjJCODJCMDlCQzU0NUIzMzZDRjA3MEEKLToxMEUwQTAwMDdGNzZCQUQ5QkMzRkJCRjU3RUM4RTc1MUQzOTQ0RUMxNDkKLToxMEUwQjAwMDMxOTcwOUI4MTBDNEZERjMzRTk1MkU0NUVDMzA2QzcxRDQKLToxMEUwQzAwMDk5MzI5OTdGMzhCNTIyMkJDMEVCNEUxOUY3N0REQUI4MUIKLToxMEUwRDAwMEVGMzNDNjdEQkZDM0ZERDVEQ0JFQ0JGRDY4ODdCODFGNUYKLToxMEUwRTAwMEVEOEE5ODlFNERBMzg1RDA1RkYwQTcwRDJGNzk0NEVGNjAKLToxMEUwRjAwMEEzRjlBMEEzNjY1QTBFM0I1QzAyM0ZEM0YxMjdCRjgxNzAKLToxMEUxMDAwMEU1NzhBMjVDOTdFMzZFMDM3Rjg2NkU2QkU4RDNENzg1RDQKLToxMEUxMTAwMDg0NEY4Qjg1QkNCMEZGNEI1ODlGNjA5RkIxNzVGMUY1NjQKLToxMEUxMjAwMDI0RURCMjlCMjk5MEMyRTdBMEMzQjYyMEY0NDQ1Mzg5RTIKLToxMEUxMzAwMDgwNUZDQjBFRTcwODJFNjkyOUIzOEFDRjRGNjQ3QTAxM0UKLToxMEUxNDAwMDA5OUVEMkFCNTY3RDVFQUU2QjIxRkM4NTc1MjRGQjhDOUYKLToxMEUxNTAwMDA0RDU4MDk5RURDNDlGMzk1NDk4QzlGMjhFMTg3RTE2NjMKLToxMEUxNjAwMEEzMEZGRDQ5MTNGQ0Y2Q0Y2NzlBREJENzE0RkQ3Q0ZFQTUKLToxMEUxNzAwMDY1NDM4NTEzQjA1RUIxQTlCMDMzRkY0RTdERkNBQ0UxQzEKLToxMEUxODAwMDg3RkU5OTA2M0ZFMzNDOTQxMkNBQzc3RDQ0OEYxRENFOUIKLToxMEUxOTAwMEJGODdFOTJFN0I3OEFEMUUwN0MyODU4MkRGMTQyRTVDMTcKLToxMEUxQTAwMDA2OUM1NDQyRTdDODRERDQ3N0ZDN0RBRkU5MjdEMDQ3QTEKLToxMEUxQjAwMEU4NzlEMEZEQzc3RkFGRDM0QURGMzk2N0UyRjhBNDUwRDIKLToxMEUxQzAwMEJFRTIwNEZEODE0MUY3M0QzRkMxOUQ0MDlCNUYzOTg3MjEKLToxMEUxRDAwMDcxQ0JBNkRGN0JBQjI3MzM2RTU4ODNBNzNCNjAzN0ZGM0QKLToxMEUxRTAwMEEyREI5N0VENDBGRjI3RDA1QkNCMTEyQkMxMkUyQjBGNkQKLToxMEUxRjAwMEY0N0ZGNjBBOEZCN0Y0M0JEQzgwRkJBODY3ODZFOEJCQTgKLToxMEUyMDAwMEYzQzhERUM3NjE2RjIzN0Q2NkYxODdBRUZEQkY3QkZFN0QKLToxMEUyMTAwMDExOTk2NzI1OTg1QkJEMzU1NDRBQkNDRkQxRTM3RkUzQTQKLToxMEUyMjAwMDM1NjE5RkI0RDAxNUQwNkY1NzlDMTczOUVBMjdFQUZFQTUKLToxMEUyMzAwMDNENTRGMUE5MzcwMEJERjUxRkY4NkJDNEI1RkEwQzBBQkYKLToxMEUyNDAwMEMwNkVFOTY1QkU0NzY2RTQ3QkY1ODY2QTJBRTE3MUM3NjAKLToxMEUyNTAwMEQwNEFGMDZGN0JDOUVBODY5REZBNUVDREE5ODQxRjVGMjQKLToxMEUyNjAwMEYzQ0MxNEZCNkJCRUIxM0IxRjcxNTczREJBNkZDRjIzOEMKLToxMEUyNzAwMDU5OTg2NzIzQzhEQjlFQzk3NkM0N0FGNTY5M0IxNkRERDkKLToxMEUyODAwMDJGRjdCNzZCQ0Y2RjIwRjczRTFCRUQ2NDNFQ0RDQzAzNkQKLToxMEUyOTAwMEZCMzVFRjk5MUQwQ0YwRDE1RUZCRkFFMzk1Qjg4NzFBQjgKLToxMEUyQTAwMEVEQjkzREU4QkZCMkRCQTY0MjBGNjcyRDlFOEM3MkY4MzgKLToxMEUyQjAwMEUxNTlCM0JCMTdFQjBDQkE3OTc4QTIyRTRGNUFBNDU2OEEKLToxMEUyQzAwMEVFMkZBQjNCMUY3MUQ3MzdGMUUxQkY4MERDRjU1QUY3N0EKLToxMEUyRDAwMEYzQ0ZFMjNDN0JBRDg0Mzg3MTYxMUZFQjhERDc1REU4RjUKLToxMEUyRTAwMDM1Q0ZDNzJEOEZFQzczOTg2MDJGOTc5NEVFOTVDRjgyMjIKLToxMEUyRjAwMDdGQUYzRUVGOTJBRDVCRjQxOUU4OUQ0M0Q4OEZFNzExRjUKLToxMEUzMDAwMEUyRjIyNTY1N0I1MkZGODVERUJEMjU1RUQ2REZDNTk3MkYKLToxMEUzMTAwMEVBOEJCRDA5RjYxQkYzMTdERjZFNkI1MjdDMTQyNDYwODkKLToxMEUzMjAwMDVDRjIxOUJGQzkxOTIwM0JDN0RGNjY4M0JDNzhFODk5NDYKLToxMEUzMzAwMDkxNjcyOUJFRkVFMjdFNzNEOEMyM0E2QUI2RDJFNjk0RUQKLToxMEUzNDAwMENDQjgzRkY4RjJGRUJDMEVFN0YzQTkzQjBBOTFDNzM0MDQKLToxMEUzNTAwMDJGODhBQzg0NUY1Q0IwNTE0QTJFQ0Y3QkRCODg1RkJFRDgKLToxMEUzNjAwMDgzMUI5NzJBMjVERjJENEY0RDg1RUVDNzU3NzNGNTM4NTAKLToxMEUzNzAwMDc2NzVDMDE2MEMyOERGMUQ4RkZFQTM4MzlDRUZDQzhFMTQKLToxMEUzODAwMEQzNzdBRjY3N0UyOTcxN0U2RjVCNDJBRDZFREVCNzJEQUUKLToxMEUzOTAwMDUzQzc4RjczM0M3RjNGRTM1ODk1QjFDRkFBODc5MkU3NkQKLToxMEUzQTAwMERGNTI5MTI5RjZEMzY2ODkxNDIyMEVDNkY4MkZBQzg4NjUKLToxMEUzQjAwMEUxNUFBNDEwNzgzNTc2NUQzREQyMTNFMEM4Q0I4QUUwRUYKLToxMEUzQzAwMDg4RUZBMEYyQTE5NjZFQTgzNDNCQUU0RjVGNEEyMEE4MUEKLToxMEUzRDAwMDk1OEM3RjBGQjk4QjhDN0I2MDVFRUY1NUU4N0VFNURCMUIKLToxMEUzRTAwMDZGRjNEODk4NEY0QjZBMjQxRDc5NTNBQjIzOTI4RTdDRTAKLToxMEUzRjAwMDY4RTRBODQ2M0I4REVCQ0I4QUYxOUYxOURGQUY0OTQ2MTUKLToxMEU0MDAwMEI4M0Y2NEY2RDhDNkRCOEY4RjQzM0M2RjFEN0VCMzJBQkUKLToxMEU0MTAwMDNFQTlEMEZEQTY2OTIwNERGNjIzNjc2NDExRUNCNkU5NEMKLToxMEU0MjAwMEI5RTQ3NTM4QTczM0MxMUY0NzA2NzY2NTdCMTNFMjhGQzEKLToxMEU0MzAwMENGOTAzQkFBN0MyODdFMTNGREZBQTM3Q0Q4ODE0RkE1MDAKLToxMEU0NDAwMENEMEFBQkY2MjJBRkIxNjUwQTREMjkzQTFEQjBCMUU1NTAKLToxMEU0NTAwMEZCQkVCNEE3QzI3RTJFNUU2RDE1M0YxRTUxMjI4MjczOTUKLToxMEU0NjAwMEI5MjdBRTBBM0U4Qzk4MjM4MjczOEVDQUZGMTFGQzE4MUUKLToxMEU0NzAwMDk5MTA1OTA5RENDQUFEQjRBRjk2RjFDOTkxOTUyRTFFMTkKLToxMEU0ODAwMEZGQjJDMkEwQTc5MUU0MDM4NTI3MzI1NzAzNEZFQUI1MzQKLToxMEU0OTAwMEQxQjcxMTM3Njk5N0Q5MDkzRjg5RTk3QjlEQTEyN0EyOTcKLToxMEU0QTAwMEM3ODYzQjc4RkMwRjQxQjMwQkYxNjE0RUE1NjJFNDBCQ0MKLToxMEU0QjAwMDk2RjhGOUI1QjgzRjhEOTBFQkMwNDFGODY3OTNERERENzQKLToxMEU0QzAwMDJCQTNDMUZEQUYyMDFGQkMzM0RCRERFNUJBNUU2RjMyOEQKLToxMEU0RDAwMDg3RTVDQUNBRkM2QTJERUUyOTNCRERGQjhGMTVDQ0RGMzAKLToxMEU0RTAwMDVGMUNDOTA3Q0VCMUI1NEIxQzZBN0JEREJBMTNGQjQ3NzUKLToxMEU0RjAwMENEQTM3QjgwNUYxNzFDREUyNzJCNTg5RkFEOTZBMUFENjcKLToxMEU1MDAwMEE1MkNEMjY3RTZDODI5QTRGODRCNjA2RjgyMjNCQUJENTgKLToxMEU1MTAwMDhEMTRFRkIyMDg5RjFFNTYyQUVCNjc5NzcxMEY5NDRCMkMKLToxMEU1MjAwMEI0MDNGNkExRThGN0ZDRTZDMEFCRUYwMDZGNDY4NjY2RTEKLToxMEU1MzAwMDA5NEU4RkY1QTcwQjAzNEZBNjAzMzczRUUwRjgxRTk4NTAKLToxMEU1NDAwMDEzRUZGRjYwRjU1RTBCRkE5N0JGQjhDMzEyRTFGNjlFQkEKLToxMEU1NTAwMENEQzlFN0JCN0NFREY2MENGODBCM0Q5RUQwMEY3QkVDRjQKLToxMEU1NjAwMDQ5QTZDN0VBMDU3NjE5NEVGMjgzODBFOEZEOUNDNzI5QzMKLToxMEU1NzAwMEYyQjc1NDBFQjU0MTBGREZEMkNCOThENjEyRTgxMzYzMzEKLToxMEU1ODAwMEU4MzFGM0E5NDFDRjFGQ0U3OTQ4RjhCNjRFMEIwRjQzQkYKLToxMEU1OTAwMDZGMjMwN0NDMDQ3Q0VGRTRCODI2NzQ3RjVBMTBFRjFBN0YKLToxMEU1QTAwMEY1MDBDN0FEMkMzRDZFMjE1RUI0QTQwRkFEQzRCRDhDOEIKLToxMEU1QjAwMEY0NUI5RDk4QkZFOUM4QTdGOTM4M0ZEQjYzM0VDRURCMkIKLToxMEU1QzAwMDcyRTQ3MDM2QzFDRThERjcwNEM3Qzc2QzhDQjdGNDFGRTgKLToxMEU1RDAwMEM5QzZCQjI0RDZERkFBODYwQTIxMTc0N0I4MTJFMDQ3NkUKLToxMEU1RTAwMEFDREZBRjg1MEIyMTdGOEIzMjU0ODJGMTI4RTQ5NkY5QTIKLToxMEU1RjAwMDRDNkJBMDQ5Q0VEMUFBRTg3RTRGNDczNEMxRjlCMUY3QTAKLToxMEU2MDAwMEY2NTE4NTZFQUY4QzBGMjVDODA3MzcxREJENTQxMkIxNkEKLToxMEU2MTAwMEM3RjFBMEQ5QzA5NTEzRTgyRkQ2RkRERkI5QzhDMDA5NEUKLToxMEU2MjAwMDVFREEwQ0JGMUYwNzI3QkMzMURDQTNGNTE2Qzg3REFFMzAKLToxMEU2MzAwMDQyOTczQkI2NUVGOENBM0IyMzIwRTM2REFGNUQyQTk5NTMKLToxMEU2NDAwMDU5OEM3NUM2M0M0QUMwQTM1OTcxN0MwMTBFRTQwQTBFNzAKLToxMEU2NTAwMDZDMzI2N0YzQjk3Q0NGMkJFRTRFNUVEMkRDQjhCMTk2NEMKLToxMEU2NjAwMEE3RDMzQUQzRkRCNUQwNkIxMzA1RTQ1RDM3NTZBRUIxRjEKLToxMEU2NzAwMDc2RjQ3MDg1N0VCRjNFNTU3RjhGRkJGNjI4QzE0RTk2OUYKLToxMEU2ODAwMEVCMjI2MzdERUU3Q0MxOUIzMEYwNjc1REY1QzY1QUY4RTYKLToxMEU2OTAwMERGN0Q1OTdFNEJFMkJCRjk4N0Y4QUZFRDQ5QTZEN0FERDgKLToxMEU2QTAwMERGNTg5QjMzOEU5RkZCMUVEQTdFNkExMjVEQ0ZBRkQ5OTcKLToxMEU2QjAwMEJCQTMzNkRCNzU3RDdGNENFRThCQjY5ODlDOTVFNjQ5MDcKLToxMEU2QzAwMDg5RkE1OEJFQjE3NjEyQjdFQjUyRkVBRkZBRDBDRjdEQzEKLToxMEU2RDAwMEYxODgzNThDQjhDQkZBQjVFMEZDQjdGRDcxQkQyNTA5RTIKLToxMEU2RTAwMEI3N0Y4MDVGMzMwNTZCOUQzM0JFNUJGRUIxNkRBQjEyQjAKLToxMEU2RjAwMDFFNTY4MDRGRUM1RkJERTI2N0VDMzcwOUZCNkRBQTE4MzAKLToxMEU3MDAwMDUzQTc2ODVBM0QxRDc5Mzc3OTU3NEY0RkFDNTM4QzZEREQKLToxMEU3MTAwMDE5MjhBN0E4Qjc4OEJENDlDQjdFQjhEMjNEOEUzRTYyRTYKLToxMEU3MjAwMEYzNkZBRUQ0NjQ5RjREODYxRDRGQTk2Rjc5RTYxNTFFMTkKLToxMEU3MzAwMDdGQjlDQzUzNTZDOTdFNTVBRUE5OTJCRjhGRERBN0E2MkYKLToxMEU3NDAwMDUyQ0YwRjg2QjIxREJGODAzRDQ1MDdDRDRFRjg0OUI5NjcKLToxMEU3NTAwMEE2RUIzMzRGQkRGQzJFRkMzMTJGREJFMUVBNjQ3RTM1QTYKLToxMEU3NjAwMDU1NjlGQUJDNjMzNjI3RUE0MEQxNjM1RkU1N0JFMEZGNzkKLToxMEU3NzAwMDVCRUNDQkE1Q0U2MkIyRDM2NDFFM0Y5NTNCNTdGMDNEMTgKLToxMEU3ODAwMEI2Q0ZDN0M2M0U2OUE1N0FCRUQzNUU2NEZFRkUzQTUzRDUKLToxMEU3OTAwMEIxRTNEQjNBOTNFNDFCQzU2OUMxRDkxMjg3QkY5MEY4OTYKLToxMEU3QTAwMDE2MUQ1Q0U4RDQ1Q0MwRjdBMDFERkVENkZFRjU3RjY3QTEKLToxMEU3QjAwMDIzMEU4RjBDRkU2N0JBMEJCODc1RUREMzc0RDhDRkI2QTUKLToxMEU3QzAwMDgxOEZEMzgxMEYyNzA2NjYzOUQwOUUxRDcyMzlEMDFGRTUKLToxMEU3RDAwMEFERkJCODE2RjNCQThDMzY1RTY3MzA4QjlDQjEzNkY2NUIKLToxMEU3RTAwMDdFOEVENTEzMTJERUQxQ0REMDZCQUY3M0RCMkY0QjYxOTQKLToxMEU3RjAwMEVGQTlERDgyNjNGQzhFQ0U0NEZDODhENzE5NUMzOUUzMzcKLToxMEU4MDAwMEQ1NjUxMkVCMEMwNUIzRjUzQTAzNUFENDE5MEFDQzdBNDQKLToxMEU4MTAwMDlEMDEzNEVBMEM2ODUxNjc0MDNGRUEwQ0EwNTE2NzAwNDMKLToxMEU4MjAwMDhEM0EwMzY4RDQxOUQwQTJDRTgwRkUyQkE4NkJCMUJDNjAKLToxMEU4MzAwMDUxNEVERTUwREZBQUQxRUM4MkZGMEZGNDZBNDFFNEY1QkQKLToxMEU4NDAwMDBGMUNEMzc0N0E4NzEyQzQ3RDdGQzZGQjIzMEU0NkFGOUMKLToxMEU4NTAwMEU4NzVCMDI4Qzc1Mzc5RTcxRjM0Q0JGQjIwMUFEQTVFN0UKLToxMEU4NjAwMDM3MTNGN0Q2QUZCOTcxNTUxNzExMzdEOTE0REJDREEzQ0MKLToxMEU4NzAwMDI3NTExRjZBRUY1M0RDMUI1REU4NUYyRTcyNkMxQjVDMzcKLToxMEU4ODAwMEY4N0UyM0ZBN0JDRDZFRDU4NUZCQkE5QThERkE5NzZGMDkKLToxMEU4OTAwMEIwNTdFQTU4RDUzOUM3MkM3MkNGRkIxNUNBRTFGREVGNDYKLToxMEU4QTAwMEIwRUFFRjY0QkZDNkJEMkNGN0IwNDU5NTNDREE2RjFERUEKLToxMEU4QjAwMDkyRjc0QkNCOEI4QTczNEQ0MjFFREE3RUNCRTc4MjEzRTUKLToxMEU4QzAwMDlEQjZGNDlEOTBENzFGQjIzOUQ3MjRDNTU3OEZFNDdERUMKLToxMEU4RDAwMDdFRkM3NEMxOEQzQzQzNDU0Q0FGRDVBNzkwREY1RTdCNzkKLToxMEU4RTAwMDAxMzgyMUY5NDg0MjdFQjRENkQ5RkMzM0U0NjdBNDVERUYKLToxMEU4RjAwMDMzRTFGQzdFN0VFODRFNjRGOUQ2M0Q2REZFMjg5MkIwOTEKLToxMEU5MDAwMDdGNzMzMDk5RjYwREY2NkRDRDIzQzg5OURDOEY0QTAzREQKLToxMEU5MTAwMEUyQjIzRjk0REMxRkFBNzQ2NDdEOTJDNjNGRTZEMTNDMEMKLToxMEU5MjAwMEU0NUI3NUZGQjRFNjQwM0ZFRjc3QjlEQjJBRjlDQTYxRDMKLToxMEU5MzAwMDhGRjc3MDI1RkJGMTQ5QjM0N0VBMkYyNzhGRDlFNEJENDQKLToxMEU5NDAwMDc1N0VGQjlDQTRGQTRCOEQzNjU1RUExRjFCQ0M4QUM0RkUKLToxMEU5NTAwMEYxMkJFNURFNjNCMENCQUFCQTdCQTVFRTUyOTVFQjEwQTYKLToxMEU5NjAwMDdGOEVEOUUxRDFGMjg2MzdDMDc3QzM1Qzk3RDRCRjZBNzYKLToxMEU5NzAwMEFDRjQwQkUxQzc3RTJGRjczQzY4MTY3RkFCRTk1NDgyRkQKLToxMEU5ODAwMDJBRDNBQkM5NkQ4MTdGQUQ2Mjc1OEEzRDk5RUQ4RjI5MjAKLToxMEU5OTAwMEVDMEZBQjc4QUZDNjA0QkJEQUIwNUQ5MUJDNDIwQTEwOTUKLToxMEU5QTAwMEFDRTc5NTg2M0U1NzBERkVFQjU3MEFGQkNCQkQ1NjNEQjcKLToxMEU5QjAwMDBGQ0U1MzU1RTE5RkQ3QzU3MThCRTdERjQ3NUUwQkZDNDgKLToxMEU5QzAwMDY2MURDNzU1QjQxQzY3NUY4RjcwQkYzNzZENkFCRTlFRUEKLToxMEU5RDAwMEU3QkI3MkMwN0ZGNTE5MzMwMTRGNkE3MjdFNUVFODk1MUUKLToxMEU5RTAwMDc4NUZFREZDODRFRjVCMDlERkE1N0Q3M0QzRjdFMUE4QzkKLToxMEU5RjAwMDg5M0U0OUM4NkI0RjlBNzVGQzYxN0RDQTdCRUIxNEVDNkMKLToxMEVBMDAwMDU1RUEzRTVFNjlDRjc0MzQ0OUJCQTI4Q0M0RkYwQjM0MTcKLToxMEVBMTAwMDNENkYyRkUwQkI3MjY2NEFEREEyMEZFQjZCREFFRDZFNDUKLToxMEVBMjAwMEU4M0Y4NjBCQkI4REZDQkU0MEU1OTZFN0VENEVENTVCMUYKLToxMEVBMzAwMDBCRDMyOURDM0Y4RDVCQ0ExNDdFNjFFNzdDRDQ3MTVDMEIKLToxMEVBNDAwMEMyM0Y0RjNEQkJDMDA1N0Q3QzY5Nzc0MzFGMzUzOUM3NDkKLToxMEVBNTAwMEU2RTFERDMxQ0JFMEZGNzI1OUMzNTVEQzk3Mjc5RDAyMUIKLToxMEVBNjAwMEQ4OUY4RjQzRERBQ0RGNUExQzQ4NDE1RDNERTREMTUwNTcKLToxMEVBNzAwMDI3M0ZBNjM4RjFBRUJGMUU0RkI3NkY3MUMyQ0YwQTE0NDEKLToxMEVBODAwMDI3RUFCN0I1QTlERDM1RDlDQ0JGNzZFNjBDMzdGMDlDQkYKLToxMEVBOTAwMEYxNTVFQTYxMjNEQ0VBNzY3MDZCNTA1M0Y0QjVBNjZDNEQKLToxMEVBQTAwMEQ0RjMwREZGMjlGN0E2NTQ0RDhBRjdENzFCN0UxNDFEMEEKLToxMEVBQjAwMEZDMjIxREYxRjU0N0Q0NkQ3NzgzN0Y4MDZDRUU1RTgzNzkKLToxMEVBQzAwMDNGRUNBMEZFQTY2OTUyQkY4REQ5RDFFNUZEMzkzQjYxNkYKLToxMEVBRDAwMDQ3NTNBQkY0NzU4RDhERUY5OTkxNEYwQ0RERTZDREMxQTkKLToxMEVBRTAwMEZFMkJENzdDQkUyNTVCQ0UzOTdFQkQ4QzcxMzcwM0I4M0IKLToxMEVBRjAwMDNCQjY1RTE2QzNGMTNENDZGRDFENzg2QjMyRUFCQTI2ODEKLToxMEVCMDAwMEEzQUU2QjMyRUFCQTI2QTNBRTZCMzJFQUJBMjZBM0FFNDQKLToxMEVCMTAwMDZCMzJFQUJBMjZBM0FFNkIzMkVBQkEyNkE5MTNBRTk3RDUKLToxMEVCMjAwMEY2REQ4RTg3QTQxREVBMDhDODc4NDJCQ0I4QjlFQUM3RUEKLToxMEVCMzAwMEQ1NUQxNzU1OEQ1Mzc3QTUxNDU3ODZDNDVERjY3QkJERkIKLToxMEVCNDAwMERFM0RBNkNFQ0FGRUFFMjZGODdCRDVFMDg0N0IxRTQzMTIKLToxMEVCNTAwMDVFRDI2MzcxQjMzODU0NkJGMTE2M0M2MDE3N0NGMDU0OEQKLToxMEVCNjAwMDhENUI2RjhERTlDRjJFRjVEOUNCNjQ5QjhGN0JBODJDNjUKLToxMEVCNzAwMDlBNjU1MjUxQzczNEVFMjM1NkVGODRERkUwOUNGMDFCQjgKLToxMEVCODAwMEI0RjAxQkQzRUNCOERGRkNENkMyQUU1REFBRTcwOTAxMzYKLToxMEVCOTAwMEM5MTM2QzcyQkY1QjM3MzJBRTMwN0QyRjM5OTM3MEU1OEQKLToxMEVCQTAwMEIzMzFCOEMyMEY5QTE1OTA2M0VEQTA5NUJBNzQzRjIzQTQKLToxMEVCQjAwMEY4NEYyNTM3N0Y5QzNGMEVDRTg0NzQ5Qzk5OTYxQURBQzUKLToxMEVCQzAwMDg3N0RBNkI1QTVCQTkxMTdCM0JGOEI5RDlERENBNjg4OUUKLToxMEVCRDAwMEJGQUZBMTA2RDk3NzFDQkM0OTQ3OUU3Q0VGQzREMTczNTcKLToxMEVCRTAwMEJGRTFGOUY3RkU4MzVERjI5REFEOTNENzJFRkFGRkUwMEEKLToxMEVCRjAwMDRENEQ5NUFFOEY1Rjc3ODQ3REU3NTk5NkVBNTRCNjQzQzUKLToxMEVDMDAwMDhFNTdENTE2MkE5MkJBQjg5QTJBRkU1MEEzM0RBRTU4MEUKLToxMEVDMTAwMDgwQTM3N0QzM0NEQzc3QjVCNUUxMzlDODk5QzNGRTJFMjQKLToxMEVDMjAwMEVGREYyQ0EzQkU2QjFBNkFERUNCRjREOUVDM0MzN0JFMDcKLToxMEVDMzAwMEFCNERDRDNENDQwNTBCODA0Nzc1QzVCMEFCQjNENEFERUUKLToxMEVDNDAwMDYwREQ2MzE5REVCRjgzQkZEQzVFQ0NBNzU2RTNGRTk2QjIKLToxMEVDNTAwMDUzOTdCNkIzNEJFRTYzQ0U0MkRDRkIzMkFCQUIxRkY1NDIKLToxMEVDNjAwMDg2MkQ2RjlFOTA3QUMyQjIwQ0Q3NDJENDFCQjZCQzc5NjcKLToxMEVDNzAwMDVBQTc3MzVDRkQ4QTFCRTVCMjEzQUJBQjdGODJGODY2QzMKLToxMEVDODAwMEVCM0U5RjEwNjdGREExMDk0OTc0RkJDMEU0RUVGMzA5NTgKLToxMEVDOTAwMDcxQUUwNTNGRjg5RDRFM0Y1MzRDQjhBRjU2NDM5NDVDNjAKLToxMEVDQTAwMEQ1QkIxREYyRjlFQkZFNEI3RkNGRDNBOEM0QzlBN0FBRjEKLToxMEVDQjAwMDc0NUM5Qzc0ODJDMkIwRTdEMUM1MEVGOUZFOTczMzcxQzMKLToxMEVDQzAwMEZEM0NENERCQThEOEI1MTBGMzM4QUZGRDM1RUNGOEUyNDUKLToxMEVDRDAwMEFEOUVBN0MxMjdDRjM4NzcwRUYxNzkzNTU4Qzc5MDBENzMKLToxMEVDRTAwMEVEMTlFM0JCRTQyOUQ1REI4OEI2MzYzRDYwOTI3RTM1NkQKLToxMEVDRjAwMDU4OEFGNjZEMzVGNDIwRkFEOTJGNzY4MTRGRUQ5M0YzQ0IKLToxMEVEMDAwMDZFMkM2MjNBQ0YxQTlBQjdERThFNzhFOUQ5OERGRTczRUYKLToxMEVEMTAwMDY1OUU1RUVDMzdCNkVFREY2OTlDOEZFNUQ5ODc3OUMzRDcKLToxMEVEMjAwMDg1QUFFNEY5QzMzN0VBNkRDQzJFQzI1NTNBMEUxRDM3RDkKLToxMEVEMzAwMEZDQThBQzkzRTRGQkU3NThGQjM5NUVBNTFBNzhGOUZEMTMKLToxMEVENDAwMDcyQjNCQzQ3MjA0RjRDN0VFQTVFNUQwQTc5NThERUEzNjEKLToxMEVENTAwMDg2QkNBRjYxOUNFQzk5NTI4RkY5NkU3QjBEQzg3RUM3NjMKLToxMEVENjAwMDBEM0I2NTdDNkMzOUFGRTNBM0I0ODVBNkUwMDRFNDBERUMKLToxMEVENzAwMDUzMUUwRDRFODBCQzUzNzY4Q0RBNUNEQ0JFMTAxOEI1ODkKLToxMEVEODAwMDIxN0Y3OEUxNkY0NzZERTg3RkMxNDM3NUUzRTFCRjU2QUUKLToxMEVEOTAwMEFEMDlERkMyQjI1MTU5M0Y5REY3MUE5Mjc3QzJFODA0MUMKLToxMEVEQTAwMEU0NkY4NTRENkY1OTAyNkNCNzczOUVFNjdEOTNGMkI3QTEKLToxMEVEQjAwMDIyODk2M0QzMEQ1QjlBRkVBODRBQjA4N0U5Q0Y5MEU0MUQKLToxMEVEQzAwMEFCNTQ5RDI1RTNCRTE0RERGRjdEOEYzRUE4QzI4RTZFNDEKLToxMEVERDAwMDA4QjJEQzA5RjYzN0U3NjlEM0U1NDgxMkRGQjBBQzZCNUYKLToxMEVERTAwMDMxNzA4M0YzQjVBNDcxM0YzMzQ3QkUzQ0M1QzAyM0U0MDMKLToxMEVERjAwMDhGOEQ4QzM3RkVBNkI3QkU0MkJFQzg3OURDMTg3RThDREMKLToxMEVFMDAwMDREMzExQzI2QzQ1REVGRUIxMTE3RkMyMDc5REVEQUJCMTcKLToxMEVFMTAwMDFFRDk4QUY3NkQ1M0UzNzY4QkJDOEZEN0Y0NkQ0NURCMzMKLToxMEVFMjAwMERBRkE5RTI1ODcyNEJGNEM5QUNGRjk2NTEyN0Q5RDlDMDYKLToxMEVFMzAwMDYzRTQ2ODdCRjBGM0FEMzlFM0VDQ0I3NjcwMkREMTBFNTMKLToxMEVFNDAwMDRFOUE0MzM3RTBCRDdBRDI5RkVBMEU0ODFDMDlERDBGODcKLToxMEVFNTAwMDdDRDlEOTZBNzcyM0FFRUNGQTU1QTVEOEQ3QjdGNUE5RUUKLToxMEVFNjAwMDMyOEZBOUZBNDdEOTUxQTdDQzBGNTQ1MjExRkNFNjg3MkIKLToxMEVFNzAwMERBMTFFMEUxRUMyNDNDMEM0OERENzI4OTQzNzBBRUREMzAKLToxMEVFODAwMDc4MDdCNkFENzE0QTNFMTJGM0VCMzY1M0U4QzNBRDk4M0UKLToxMEVFOTAwMDk3RTU5MEVGMTEwQ0I3NDVBNjJDN0M2RjlBRTJFRTRBRUQKLToxMEVFQTAwMEM4MkJDRTJFOTkxNTA0OURERDE5MEE4M0VGRThDRjE1RTYKLToxMEVFQjAwMDM3RUFDOEQ1NjkzQUFFRDZBODBEQUQ3Qjc5RkMyRDM1QjkKLToxMEVFQzAwMDJDQjhGMTVCRTAwN0YzNkZCN0FDOTc3NjQ1RDk0Q0IxM0UKLToxMEVFRDAwMERCNUMwQTI5RkFGRjY3NzAyREM0N0IzREY2M0RBRDY3MDgKLToxMEVFRTAwMDVCQjBFRjIwREVGQjRBRjA5OUI1QTg4RkZFOTU1REU0OUMKLToxMEVFRjAwMDg5MDZENTgwOTlDRkQzMzM4MTA0Qjc3QkVFMkM5NEI4QTMKLToxMEVGMDAwMDEzQTU4NkM2RkI5MUZGMkM0Rjk1M0E2QUNGMDRENzEzMDEKLToxMEVGMTAwMEY4NkVEQUQzN0NBM0U0RjU4N0ZFQTRDN0ZCRDFBNTI5NUMKLToxMEVGMjAwMDZFRTQ3MTNERjM1QzFCNzFBRTlFNDc1RDMyRkU5QUEyQUEKLToxMEVGMzAwMEYzMEIzQ0ExRUJBNzY3QTk3RUNFOUVFNjRDNzk5RkM1NUIKLToxMEVGNDAwMEVFQTE2Nzg3NjczMkJFQkY1OTMyQkNFNUQ1QTgwMzE4NkEKLToxMEVGNTAwMERGMUY3QjY2NzAzRkI3NEYyOTBENzdERTA3M0U3Mzc1NjUKLToxMEVGNjAwMDc5NTc5NEI5RTRERTRFREU3OUUzMTM3Qjc0N0Q4NkYxNDQKLToxMEVGNzAwMDFEQUM3RDg5MjNFOUZERkVCRkZFODBDQkIzMjAyMjAwQkUKLToxMEVGODAwMDAwMDAwMDAwMDAwMDAwMDAwNDA4MzUwMDAwMDAwMDAwNDAKLTowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyeC1lMWgtNS4wLjIxLjAuZncuaWhleCBiL2Zpcm13YXJlL2JueDJ4LWUxaC01LjAuMjEuMC5mdy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OGM4NjMKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9ibngyeC1lMWgtNS4wLjIxLjAuZncuaWhleApAQCAtMCwwICsxLDEyODU1IEBACis6MTAwMDAwMDAwMDAwM0JCODAwMDAwMDYwMDAwMDA2ODgwMDAwM0MyMEIzCis6MTAwMDEwMDAwMDAwMTkyQzAwMDA0MkIwMDAwMDAwQUMwMDAwNUJFMEMyCis6MTAwMDIwMDAwMDAwOERDNDAwMDA1QzkwMDAwMDAwRTQwMDAwRUE1ODZECis6MTAwMDMwMDAwMDAwRTQxNDAwMDBFQjQwMDAwMDAwOTQwMDAxQ0Y1OEUxCis6MTAwMDQwMDAwMDAwNThFODAwMDFDRkYwMDAwMDAwQzQwMDAyMjhFMEUyCis6MTAwMDUwMDAwMDAwRjk3ODAwMDIyOUE4MDAwMDAwMDQwMDAzMjMyODBBCis6MTAwMDYwMDAwMjA0MDA0ODAwMDAwMDBGMDIwNDAwNTQwMDAwMDA0NTk0Cis6MTAwMDcwMDAwMjA0MDA1ODAwMDAwMDg0MDIwNDAwNUMwMDAwMDAwNjM2Cis6MTAwMDgwMDAwMjA0MDA3MDAwMDAwMDA0MDIwNDAwNzgwMDAwMDAwMDc4Cis6MTAwMDkwMDAwMjA0MDA3QzEyMTcwMDAwMDIwNDAwODAyMjE3MDAwMEY2Cis6MTAwMEEwMDAwMjA0MDA4NDMyMTcwMDAwMDYwNDAwODgwMDAwMDAwNUU2Cis6MTAwMEIwMDAwMjA0MDA5QzEyMTUwMDAwMDIwNDAwQTAyMjE1MDAwMDlBCis6MTAwMEMwMDAwMjA0MDBBNDMyMTUwMDAwMDYwNDAwQTgwMDAwMDAwNDg5Cis6MTAwMEQwMDAwMjA0MDBCODAyMTAwMDAwMDIwNDAwQkMwMDEwMDAwMDdFCis6MTAwMEUwMDAwMjA0MDBDMDEwMTAwMDAwMDIwNDAwQzQyMDEwMDAwMDMwCis6MTAwMEYwMDAwMjA0MDBDODMwMTAwMDAwMDIwNDAwQ0M0MDEwMDAwMEQwCis6MTAwMTAwMDAwNjA0MDBEMDAwMDAwMDAzMDIwNDAwREMwMDEwMDAwMDIwCis6MTAwMTEwMDAwMjA0MDBFMDEyMTQwMDAwMDIwNDAwRTQyMjE0MDAwMEIzCis6MTAwMTIwMDAwMjA0MDBFODMyMTQwMDAwMDIwNDAwRUM0MjE0MDAwMDUzCis6MTAwMTMwMDAwNjA0MDBGMDAwMDAwMDAzMDEwNDAxMjQwMDAwMDAwMDk4Cis6MTAwMTQwMDAwMTA0MDEyODAwMDAwMDAwMDEwNDAxMkMwMDAwMDAwMDRGCis6MTAwMTUwMDAwMTA0MDEzMDAwMDAwMDAwMDIwNDAxRDAwMDAwODkwNjAzCis6MTAwMTYwMDAwMjA0MDAwNDAwMDAwMEZGMDIwNDAwMDgwMDAwMDBGRjc5Cis6MTAwMTcwMDAwMjA0MDAwQzAwMDAwMEZGMDIwNDAwMTAwMDAwMDBGRjU5Cis6MTAwMTgwMDAwMjA0MDAxNDAwMDAwMEZGMDIwNDAwMTgwMDAwMDBGRjM5Cis6MTAwMTkwMDAwMjA0MDAxQzAwMDAwMEZGMDIwNDAwMjAwMDAwMDBGRjE5Cis6MTAwMUEwMDAwMjA0MDAyNDAwMDAwMDNFMDIwNDAwMjgwMDAwMDAwMEI5Cis6MTAwMUIwMDAwMjA0MDAyQzAwMDAwMDNGMDIwNDAwMzAwMDAwMDAzRjU5Cis6MTAwMUMwMDAwMjA0MDAzNDAwMDAwMDNGMDIwNDAwMzgwMDAwMDAzRjM5Cis6MTAwMUQwMDAwMjA0MDAzQzAwMDAwMDNGMDIwNDAwNDAwMDAwMDAzRjE5Cis6MTAwMUUwMDAwMjA0MDA0NDAwMDAwMDNGMDIwNDA0Q0MwMDAwMDAwMUFGCis6MTAwMUYwMDAwMjA0MjAwODAwMDAwMjExMDIwNDIwMEMwMDAwMDIwMDhBCis6MTAwMjAwMDAwMjA0MjAxMDAwMDAwMjA0MDIwNDIwMTQwMDAwMDIxOTVECis6MTAwMjEwMDAwMjA0MjAxQzAwMDBGRkZGMDIwNDIwMjAwMDAwRkZGRjVBCis6MTAwMjIwMDAwMjA0MjAyNDAwMDBGRkZGMDIwNDIwMjgwMDAwRkZGRjNBCis6MTAwMjMwMDAwMjA0MjAzODAwMDAwMDIwMDIwNDIwM0MwMDAwMDAwMERFCis6MTAwMjQwMDAwMjA0MjA0MDAwMDAwMDM0MDIwNDIwNDQwMDAwMDAzNTc1Cis6MTAwMjUwMDAwNjA0MjA0ODAwMDAwMDFDMDIwNDIwQjgwMDAwMDAwMTMxCis6MTAwMjYwMDAwNjA0MjBCQzAwMDAwMDVGMDIwNDIyMzgwN0ZGRkZGRkU1Cis6MTAwMjcwMDAwMjA0MjIzQzAwMDAwMDNGMDIwNDIyNDAwN0ZGRkZGRjZGCis6MTAwMjgwMDAwMjA0MjI0NDAwMDAwMDBGMDEwNDIyNDgwMDAwMDAwMDg0Cis6MTAwMjkwMDAwMTA0MjI0QzAwMDAwMDAwMDEwNDIyNTAwMDAwMDAwMDc0Cis6MTAwMkEwMDAwMTA0MjI1NDAwMDAwMDAwMDEwNDIyNTgwMDAwMDAwMDU0Cis6MTAwMkIwMDAwMTA0MjI1QzAwMDAwMDAwMDEwNDIyNjAwMDAwMDAwMDM0Cis6MTAwMkMwMDAwMTA0MjI2NDAwMDAwMDAwMDEwNDIyNjgwMDAwMDAwMDE0Cis6MTAwMkQwMDAwMTA0MjI2QzAwMDAwMDAwMDEwNDIyNzAwMDAwMDAwMEY0Cis6MTAwMkUwMDAwMTA0MjI3NDAwMDAwMDAwMDEwNDIyNzgwMDAwMDAwMEQ0Cis6MTAwMkYwMDAwMTA0MjI3QzAwMDAwMDAwMEMwNDIwMDAwMDAwMDNFODQwCis6MTAwMzAwMDAwQTA0MjAwMDAwMDAwMDAxMEIwNDIwMDAwMDAwMDAwQTg1Cis6MTAwMzEwMDAwMjA1MDA0NDAwMDAwMDIwMDIwNTAwNDgwMDAwMDAzMkYxCis6MTAwMzIwMDAwMjA1MDA5MDAyMTUwMDIwMDIwNTAwOTQwMjE1MDAyMDJECis6MTAwMzMwMDAwMjA1MDA5ODAwMDAwMDMwMDIwNTAwOUMwODEwMDAwMDMzCis6MTAwMzQwMDAwMjA1MDBBMDAwMDAwMDMzMDIwNTAwQTQwMDAwMDAzMEY4Cis6MTAwMzUwMDAwMjA1MDBBODAwMDAwMDMxMDIwNTAwQUMwMDAwMDAwMjA4Cis6MTAwMzYwMDAwMjA1MDBCMDAwMDAwMDA1MDIwNTAwQjQwMDAwMDAwNjEwCis6MTAwMzcwMDAwMjA1MDBCODAwMDAwMDAyMDIwNTAwQkMwMDAwMDAwMkY3Cis6MTAwMzgwMDAwMjA1MDBDMDAwMDAwMDAwMDIwNTAwQzQwMDAwMDAwNUQ2Cis6MTAwMzkwMDAwMjA1MDBDODAwMDAwMDAyMDIwNTAwQ0MwMDAwMDAwMkI3Cis6MTAwM0EwMDAwMjA1MDBEMDAwMDAwMDAyMDIwNTAwRDQwMDAwMDAwMTk4Cis6MTAwM0IwMDAwMjA1MDExNDAwMDAwMDAxMDIwNTAxMUMwMDAwMDAwMUZCCis6MTAwM0MwMDAwMjA1MDEyMDAwMDAwMDAyMDIwNTAyMDQwMDAwMDAwMUY1Cis6MTAwM0QwMDAwMjA1MDIwQzAwMDAwMDQwMDIwNTAyMTAwMDAwMDA0MDZGCis6MTAwM0UwMDAwMjA1MDIxQzAwMDAwMDIwMDIwNTAyMjAwMDAwMDAxMzhDCis6MTAwM0YwMDAwMjA1MDIyNDAwMDAwMDIwMDYwNTAyNDAwMDAwMDAwQTU5Cis6MTAwNDAwMDAwNDA1MDI4MDAwMjAwMDAwMDIwNTAwNTAwMDAwMDAwN0UzCis6MTAwNDEwMDAwMjA1MDA1NDAwMDAwMDA3MDIwNTAwNTgwMDAwMDAwODEzCis6MTAwNDIwMDAwMjA1MDA1QzAwMDAwMDA4MDIwNTAwNjAwMDAwMDAwMUY5Cis6MTAwNDMwMDAwNjA1MDA2NDAwMDAwMDAzMDIwNTAwRDgwMDAwMDAwNjY1Cis6MTAwNDQwMDAwMjA1MDAwNDAwMDAwMDAxMDIwNTAwMDgwMDAwMDAwMTkwCis6MTAwNDUwMDAwMjA1MDAwQzAwMDAwMDAxMDIwNTAwMTAwMDAwMDAwMTcwCis6MTAwNDYwMDAwMjA1MDAxNDAwMDAwMDAxMDIwNTAwMTgwMDAwMDAwMTUwCis6MTAwNDcwMDAwMjA1MDAxQzAwMDAwMDAxMDIwNTAwMjAwMDAwMDAwMTMwCis6MTAwNDgwMDAwMjA1MDAyNDAwMDAwMDAxMDIwNTAwMjgwMDAwMDAwMTEwCis6MTAwNDkwMDAwMjA1MDAyQzAwMDAwMDAxMDIwNTAwMzAwMDAwMDAwMUYwCis6MTAwNEEwMDAwMjA1MDAzNDAwMDAwMDAxMDIwNTAwMzgwMDAwMDAwMUQwCis6MTAwNEIwMDAwMjA1MDAzQzAwMDAwMDAxMDIwNTAwNDAwMDAwMDAwMUIwCis6MTAwNEMwMDAwMjA1MDBFMDAwMDAwMDBEMDIwNTAwRTgwMDAwMDAwNzQyCis6MTAwNEQwMDAwMjA1MDBGMDAwMDAwMDA3MDIwNTAwRjgwMDAwMDAwNzE4Cis6MTAwNEUwMDAwMjA1MDBFNDAwMDAwMDJEMDIwNTAwRUMwMDAwMDAyN0RBCis6MTAwNEYwMDAwMjA1MDBGNDAwMDAwMDI3MDIwNTAwRkMwMDAwMDAyN0IwCis6MTAwNTAwMDAwMjA1MDBFMDAwMDAwMDFEMDIwNTAwRTgwMDAwMDAxN0UxCis6MTAwNTEwMDAwMjA1MDBGMDAwMDAwMDE3MDIwNTAwRjgwMDAwMDAxN0I3Cis6MTAwNTIwMDAwMjA1MDBFNDAwMDAwMDNEMDIwNTAwRUMwMDAwMDAzNzc5Cis6MTAwNTMwMDAwMjA1MDBGNDAwMDAwMDM3MDIwNTAwRkMwMDAwMDAzNzRGCis6MTAwNTQwMDAwMjA1MDBFMDAwMDAwMDREMDIwNTAwRTgwMDAwMDA0NzQxCis6MTAwNTUwMDAwMjA1MDBGMDAwMDAwMDQ3MDIwNTAwRjgwMDAwMDA0NzE3Cis6MTAwNTYwMDAwMjA1MDBFNDAwMDAwMDZEMDIwNTAwRUMwMDAwMDA2N0Q5Cis6MTAwNTcwMDAwMjA1MDBGNDAwMDAwMDY3MDIwNTAwRkMwMDAwMDA2N0FGCis6MTAwNTgwMDAwMjA1MDBFMDAwMDAwMDVEMDIwNTAwRTgwMDAwMDA1N0UxCis6MTAwNTkwMDAwMjA1MDBGMDAwMDAwMDU3MDIwNTAwRjgwMDAwMDA1N0I3Cis6MTAwNUEwMDAwMjA1MDBFNDAwMDAwMDdEMDIwNTAwRUMwMDAwMDA3Nzc5Cis6MTAwNUIwMDAwMjA1MDBGNDAwMDAwMDc3MDIwNTAwRkMwMDAwMDA3NzRGCis6MTAwNUMwMDAwNDA2MTAwMDAyMDAwMDIwMDIwNjAwREMwMDAwMDAwMTBBCis6MTAwNUQwMDAwMTA2MDBEODAwMDAwMDAwMDQwNjAyMDAwMDAzMDIyMDBCCis6MTAwNUUwMDAwMjA2MDBEQzAwMDAwMDAwMDEwNjAwQjgwMDAwMDAwMDY4Cis6MTAwNUYwMDAwMTA2MDBDODAwMDAwMDAwMDEwNjAwQkMwMDAwMDAwMDY5Cis6MTAwNjAwMDAwMTA2MDBDQzAwMDAwMDAwMDcxODA0MDAwMEE5MDAwMDRCCis6MTAwNjEwMDAwODE4MDdDODAwMDcwMjIzMDcxQzAwMDAyQzJEMDAwMDQzCis6MTAwNjIwMDAwNzFDODAwMDM4QTIwQjBDMDcxRDAwMDAyOEVGMTkzNUFECis6MTAwNjMwMDAwODFENjgxMDUyRkUwMjI1MDExODAwMDAwMDAwMDAwMDhECis6MTAwNjQwMDAwMTE4MDAwNDAwMDAwMDAwMDExODAwMDgwMDAwMDAwMDZDCis6MTAwNjUwMDAwMTE4MDAwQzAwMDAwMDAwMDExODAwMTAwMDAwMDAwMDRDCis6MTAwNjYwMDAwMTE4MDAxNDAwMDAwMDAwMDIxODAwMjAwMDAwMDAwMTIyCis6MTAwNjcwMDAwMjE4MDAyNDAwMDAwMDAyMDIxODAwMjgwMDAwMDAwM0Y1Cis6MTAwNjgwMDAwMjE4MDAyQzAwMDAwMDAwMDIxODAwMzAwMDAwMDAwNEQ2Cis6MTAwNjkwMDAwMjE4MDAzNDAwMDAwMDAxMDIxODAwMzgwMDAwMDAwMEI5Cis6MTAwNkEwMDAwMjE4MDAzQzAwMDAwMDAxMDIxODAwNDAwMDAwMDAwNDk1Cis6MTAwNkIwMDAwMjE4MDA0NDAwMDAwMDAwMDIxODAwNDgwMDAwMDAwMTc5Cis6MTAwNkMwMDAwMjE4MDA0QzAwMDAwMDAzMDIxODAwNTAwMDAwMDAwMDU3Cis6MTAwNkQwMDAwMjE4MDA1NDAwMDAwMDAxMDIxODAwNTgwMDAwMDAwNDM1Cis6MTAwNkUwMDAwMjE4MDA1QzAwMDAwMDAwMDIxODAwNjAwMDAwMDAwMTE5Cis6MTAwNkYwMDAwMjE4MDA2NDAwMDAwMDAzMDIxODAwNjgwMDAwMDAwMEY3Cis6MTAwNzAwMDAwMjE4MDA2QzAwMDAwMDAxMDIxODAwNzAwMDAwMDAwNEQ0Cis6MTAwNzEwMDAwMjE4MDA3NDAwMDAwMDAwMDIxODAwNzgwMDAwMDAwNEI1Cis6MTAwNzIwMDAwMjE4MDA3QzAwMDAwMDAzMDYxODAwODAwMDAwMDAwMjkwCis6MTAwNzMwMDAwMjE4MDBBNDAwMDAzRkZGMDIxODAwQTgwMDAwMDNGRkY5Cis6MTAwNzQwMDAwMjE4MDIyNDAwMDAwMDAwMDIxODAyMzQwMDAwMDAwMDE5Cis6MTAwNzUwMDAwMjE4MDI0QzAwMDAwMDAwMDIxODAyRTQwMDAwMDBGRjMyCis6MTAwNzYwMDAwNjE4MTAwMDAwMDAwNDAwMDIxQjhCQzAwMDAwMDAwMUVFCis6MTAwNzcwMDAwMjFCODAwMDAwMDAwMDM0MDIxQjgwNDAwMDAwMDAxOEIzCis6MTAwNzgwMDAwMjFCODA4MDAwMDAwMDBDMDIxQjgwQzAwMDAwMDAyMEMzCis6MTAwNzkwMDAwQzFCODMwMDAwMDdBMTIwMEExQjgzMDAwMDAwMDEzODA2Cis6MTAwN0EwMDAwQjFCODMwMDAwMDAxMzg4MDIxQjgzQzAwMDAwMDFGNEIwCis6MTAwN0IwMDAwMjFCMTQ4MDAwMDAwMDAxMEExQjE0ODAwMDAwMDAwMENFCis6MTAwN0MwMDAwNjFBMTAwMDAwMDAwM0IzMDQxQTFFQ0MwMDAxMDIyNzExCis6MTAwN0QwMDAwNjFBQTAyMDAwMDAwMEM4MDYxQUEwMDAwMDAwMDAwMkFGCis6MTAwN0UwMDAwMjFBMUVEMDAwMDAwMDAwMDYxQTFFRDgwMDAwMDAwNkUzCis6MTAwN0YwMDAwNjFBMzZFODAwMDAwMDA0MDYxQTM2RTAwMDAwMDAwMjdGCis6MTAwODAwMDAwNjFBNTAwMDAwMDAwMDAyMDYxQTUwMDgwMDAwMDAwNEZBCis6MTAwODEwMDAwNjFBNTAxODAwMDAwMDA0MDYxQTUwMjgwMDAwMDAwNEIwCis6MTAwODIwMDAwNjFBNTAzODAwMDAwMDA0MDYxQTUwNDgwMDAwMDAwNDYwCis6MTAwODMwMDAwNjFBNTA1ODAwMDAwMDA0MDYxQTUwNjgwMDAwMDAwNDEwCis6MTAwODQwMDAwNjFBNTA3ODAwMDAwMDAyMDQxQTQwNDAwMDAyMDIyOEY0Cis6MTAwODUwMDAwNjFBNDAwMDAwMDAwMDAyMDYxQTQwMDgwMDAwMDAwMkNDCis6MTAwODYwMDAwNDFBNjJDMDAwMjAwMjJBMDYxQUQxMDAwMDAwMDAwMjA5Cis6MTAwODcwMDAwNjFBMjAwMDAwMDAwMTI0MDYxQUIwMDAwMDAwMDAyODFCCis6MTAwODgwMDAwNjFBQjE0MDAwMDAwMDBDMDYxQTMzMDAwMDAwMDAxNEU0Cis6MTAwODkwMDAwNjFBMzNBMDAwMDAwMDY4MDYxQTgxMDgwMDAwMDAwMjUyCis6MTAwOEEwMDAwNjFBRDFDODAwMDAwMDAyMDYxQUQxRDgwMDAwMDAyMEE0Cis6MTAwOEIwMDAwNjFBMjQ5MDAwMDAwMTI0MDYxQUIwQTAwMDAwMDAyOEE3Cis6MTAwOEMwMDAwNjFBQjE3MDAwMDAwMDBDMDYxQTMzNTAwMDAwMDAxNDI0Cis6MTAwOEQwMDAwNjFBMzU0MDAwMDAwMDY4MDYxQTgxMTAwMDAwMDAwMjY4Cis6MTAwOEUwMDAwNjFBRDFEMDAwMDAwMDAyMDYxQUQyNTgwMDAwMDAyMERCCis6MTAwOEYwMDAwMjFBMjkyMDAwMDAwMDAwMDYxQTMwMDAwMDAwMDAwMjQxCis6MTAwOTAwMDAwNDFBMzAwODAwMDUwMjRBMDYxQTMwMUMwMDAwMDAwOUNCCis6MTAwOTEwMDAwNjFBMzIwMDAwMDAwMDA4MDYxQTUwMDAwMDAwMDAwMjBCCis6MTAwOTIwMDAwNjFBNTA4MDAwMDAwMDEyMDYxQTQwMDAwMDAwMDAwMjYzCis6MTAwOTMwMDAwNjFBRDBDMDAwMDAwMDAyMDIxQTI5MjQwMDAwMDAwMDlDCis6MTAwOTQwMDAwNjFBMzA0MDAwMDAwMDAyMDQxQTMwNDgwMDA1MDI0RjI5Cis6MTAwOTUwMDAwNjFBMzA1QzAwMDAwMDA5MDYxQTMyMjAwMDAwMDAwODY4Cis6MTAwOTYwMDAwNjFBNTAxMDAwMDAwMDAyMDYxQTUwQzgwMDAwMDAxMkJCCis6MTAwOTcwMDAwNjFBNDAwODAwMDAwMDAyMDYxQUQwQzgwMDAwMDAwMjUzCis6MTAwOTgwMDAwMjFBMjkyODAwMDAwMDAwMDYxQTMwODAwMDAwMDAwMjI4Cis6MTAwOTkwMDAwNDFBMzA4ODAwMDUwMjU0MDYxQTMwOUMwMDAwMDAwOTMxCis6MTAwOUEwMDAwNjFBMzI0MDAwMDAwMDA4MDYxQTUwMjAwMDAwMDAwMjFCCis6MTAwOUIwMDAwNjFBNTExMDAwMDAwMDEyMDQxQTQwMTAwMDAyMDI1OUQ5Cis6MTAwOUMwMDAwNjFBRDBEMDAwMDAwMDAyMDIxQTI5MkMwMDAwMDAwMEY0Cis6MTAwOUQwMDAwNjFBMzBDMDAwMDAwMDAyMDQxQTMwQzgwMDA1MDI1QjhECis6MTAwOUUwMDAwNjFBMzBEQzAwMDAwMDA5MDYxQTMyNjAwMDAwMDAwODE4Cis6MTAwOUYwMDAwNjFBNTAzMDAwMDAwMDAyMDYxQTUxNTgwMDAwMDAxMjdBCis6MTAwQTAwMDAwNDFBNDAxODAwMDIwMjYwMDYxQUQwRDgwMDAwMDAwMjQyCis6MTAwQTEwMDAwMjFBMjkzMDAwMDAwMDAwMDYxQTMxMDAwMDAwMDAwMjBFCis6MTAwQTIwMDAwNDFBMzEwODAwMDUwMjYyMDYxQTMxMUMwMDAwMDAwOTkwCis6MTAwQTMwMDAwNjFBMzI4MDAwMDAwMDA4MDYxQTUwNDAwMDAwMDAwMjJBCis6MTAwQTQwMDAwNjFBNTFBMDAwMDAwMDEyMDQxQTQwMjAwMDAyMDI2NzlBCis6MTAwQTUwMDAwNjFBRDBFMDAwMDAwMDAyMDIxQTI5MzQwMDAwMDAwMDRCCis6MTAwQTYwMDAwNjFBMzE0MDAwMDAwMDAyMDQxQTMxNDgwMDA1MDI2OUVDCis6MTAwQTcwMDAwNjFBMzE1QzAwMDAwMDA5MDYxQTMyQTAwMDAwMDAwOEM2Cis6MTAwQTgwMDAwNjFBNTA1MDAwMDAwMDAyMDYxQTUxRTgwMDAwMDAxMjM5Cis6MTAwQTkwMDAwNDFBNDAyODAwMDIwMjZFMDYxQUQwRTgwMDAwMDAwMjg0Cis6MTAwQUEwMDAwMjFBMjkzODAwMDAwMDAwMDYxQTMxODAwMDAwMDAwMkY2Cis6MTAwQUIwMDAwNDFBMzE4ODAwMDUwMjcwMDYxQTMxOUMwMDAwMDAwOUYyCis6MTAwQUMwMDAwNjFBMzJDMDAwMDAwMDA4MDYxQTUwNjAwMDAwMDAwMjNBCis6MTAwQUQwMDAwNjFBNTIzMDAwMDAwMDEyMDQxQTQwMzAwMDAyMDI3NTVCCis6MTAwQUUwMDAwNjFBRDBGMDAwMDAwMDAyMDIxQTI5M0MwMDAwMDAwMEEzCis6MTAwQUYwMDAwNjFBMzFDMDAwMDAwMDAyMDQxQTMxQzgwMDA1MDI3NzRFCis6MTAwQjAwMDAwNjFBMzFEQzAwMDAwMDA5MDYxQTMyRTAwMDAwMDAwODc1Cis6MTAwQjEwMDAwNjFBNTA3MDAwMDAwMDAyMDYxQTUyNzgwMDAwMDAxMkY3Cis6MTAwQjIwMDAwNDFBNDAzODAwMDIwMjdDMDYxQUQwRjgwMDAwMDAwMkM1Cis6MTAwQjMwMDAwMjAwQTI5NDA3MUQyOTExMDIwMEEyOTgwMDAwMDAwMEUzCis6MTAwQjQwMDAwMjAwQTI5QzAwOUMwNDI0MDIwMEEyQTAwMDAwMDAwMDVECis6MTAwQjUwMDAwMjAwQTJBNDAwMDAwMjA5MDIwMEEyNzAwMDAwMDAwMDJFCis6MTAwQjYwMDAwMjAwQTI3NDAwMDAwMDAwMDIwMEEyNzAwMDAwMDAwMDU5Cis6MTAwQjcwMDAwMjAwQTI3NDAwMDAwMDAwMDIwMEEyNzAwMDAwMDAwMDQ5Cis6MTAwQjgwMDAwMjAwQTI3NDAwMDAwMDAwMDIwMEEyNzAwMDAwMDAwMDM5Cis6MTAwQjkwMDAwMjAwQTI3NDAwMDAwMDAwMDIwMTAwQjQwMDAwMDAwMTg1Cis6MTAwQkEwMDAwMjAxMDBCODAwMDAwMDAxMDIwMTAwREMwMDAwMDAwMUE5Cis6MTAwQkIwMDAwMjAxMDEwMDAwMDAwMDAxMDIwMTAxMDQwMDAwMDAwMTI3Cis6MTAwQkMwMDAwMjAxMDA3QzAwMzAwMDAwMDIwMTAwODQwMDAwMDAyOEM3Cis6MTAwQkQwMDAwMjAxMDA4QzAwMDAwMDAwMDIwMTAxMzAwMDAwMDAwNDRFCis6MTAwQkUwMDAwMjAxMDI1QzAwMDAwMDAxMDIwMTAzMjgwMDAwMDAwMDc1Cis6MTAwQkYwMDAwMjAxNjA3MDAwMDAwMDA3MDIwMTYwODAwMDAwMDAwMTM3Cis6MTAwQzAwMDAwMjAxMDU1NDAwMDAwMDMwMDIwMTAwQzQwMDAwMDAwMTkwCis6MTAwQzEwMDAwMjAxMDBDQzAwMDAwMDAxMDIwMTAwRjgwMDAwMDAwMTA4Cis6MTAwQzIwMDAwMjAxMDBGMDAwMDAwMDAxMDIwMTAwODAwMDMwMDAwMDFECis6MTAwQzMwMDAwMjAxMDA4ODAwMDAwMDI4MDIwMTAwOTAwMDAwMDAwMDZFCis6MTAwQzQwMDAwMjAxMDEzNDAwMDAwMDA0MDIwMTAyREMwMDAwMDAwMTg2Cis6MTAwQzUwMDAwMjAxMDMyQzAwMDAwMDAwMDIwMTYwNzQwMDAwMDAwNzg0Cis6MTAwQzYwMDAwMjAxNjA4NDAwMDAwMDAxMDIwMTA1NjQwMDAwMDAzMDAwCis6MTAwQzcwMDAwMjAxMDBDODAwMDAwMDAxMDIwMTAwRDAwMDAwMDAwMUQ0Cis6MTAwQzgwMDAwMjAxMDBGQzAwMDAwMDAxMDIwMTAwRjQwMDAwMDAwMTZDCis6MTAwQzkwMDAwMjBDMTAwMDAwMDAwMDIwMDIwQzIwMDgwMDAwMDIxMUNECis6MTAwQ0EwMDAwMjBDMjAwQzAwMDAwMjAwMDIwQzIwMTAwMDAwMDIwNEM0Cis6MTAwQ0IwMDAwMjBDMjAxQzAwMDBGRkZGMDIwQzIwMjAwMDAwRkZGRkEwCis6MTAwQ0MwMDAwMjBDMjAyNDAwMDBGRkZGMDIwQzIwMjgwMDAwRkZGRjgwCis6MTAwQ0QwMDAwNjBDMjAzODAwMDAwMDAyMDIwQzIwNDAwMDAwMDAzNDA2Cis6MTAwQ0UwMDAwMjBDMjA0NDAwMDAwMDM1MDIwQzIwNDgwMDAwMDAyMEM3Cis6MTAwQ0YwMDAwMjBDMjA0QzAwMDAwMDIxMDIwQzIwNTAwMDAwMDAyMkI5Cis6MTAwRDAwMDAwMjBDMjA1NDAwMDAwMDIzMDIwQzIwNTgwMDAwMDAyNDk0Cis6MTAwRDEwMDAwMjBDMjA1QzAwMDAwMDI1MDIwQzIwNjAwMDAwMDAyNjcwCis6MTAwRDIwMDAwMjBDMjA2NDAwMDAwMDI3MDIwQzIwNjgwMDAwMDAyODRDCis6MTAwRDMwMDAwMjBDMjA2QzAwMDAwMDI5MDIwQzIwNzAwMDAwMDAyQTI4Cis6MTAwRDQwMDAwMjBDMjA3NDAwMDAwMDJCMDYwQzIwNzgwMDAwMDA1NkQ2Cis6MTAwRDUwMDAwMjBDMjFEMDAwMDAwMDAxMDIwQzIxRDQwMDAwMDAwMThGCis6MTAwRDYwMDAwMjBDMjFEODAwMDAwMDAxMDIwQzIxREMwMDAwMDAwMTZGCis6MTAwRDcwMDAwMjBDMjFFMDAwMDAwMDAxMDIwQzIxRTQwMDAwMDAwMTRGCis6MTAwRDgwMDAwMjBDMjFFODAwMDAwMDAxMDIwQzIxRUMwMDAwMDAwMTJGCis6MTAwRDkwMDAwMjBDMjFGMDAwMDAwMDAxMDIwQzIxRjQwMDAwMDAwMTBGCis6MTAwREEwMDAwNjBDMjFGODAwMDAwMDEwMDIwQzIyMzgwN0ZGRkZGRjlDCis6MTAwREIwMDAwMjBDMjIzQzAwMDAwMDNGMDIwQzIyNDAwN0ZGRkZGRjE0Cis6MTAwREMwMDAwMjBDMjI0NDAwMDAwMDBGMDEwQzIyNDgwMDAwMDAwMDI5Cis6MTAwREQwMDAwMTBDMjI0QzAwMDAwMDAwMDEwQzIyNTAwMDAwMDAwMDE5Cis6MTAwREUwMDAwMTBDMjI1NDAwMDAwMDAwMDEwQzIyNTgwMDAwMDAwMEY5Cis6MTAwREYwMDAwMTBDMjI1QzAwMDAwMDAwMDEwQzIyNjAwMDAwMDAwMEQ5Cis6MTAwRTAwMDAwMTBDMjI2NDAwMDAwMDAwMDEwQzIyNjgwMDAwMDAwMEI4Cis6MTAwRTEwMDAwMTBDMjI2QzAwMDAwMDAwMDEwQzIyNzAwMDAwMDAwMDk4Cis6MTAwRTIwMDAwMTBDMjI3NDAwMDAwMDAwMDEwQzIyNzgwMDAwMDAwMDc4Cis6MTAwRTMwMDAwMTBDMjI3QzAwMDAwMDAwMEMwQzIwMDAwMDAwMDNFOEU0Cis6MTAwRTQwMDAwQTBDMjAwMDAwMDAwMDAxMEIwQzIwMDAwMDAwMDAwQTJBCis6MTAwRTUwMDAwMjBDNDAwODAwMDAwNDExMDIwQzQwMEMwMDAwMDQwMEM5Cis6MTAwRTYwMDAwMjBDNDAxMDAwMDAwNDA0MDIwQzQwMTQwMDAwMDQyMTk1Cis6MTAwRTcwMDAwMjBDNDAxQzAwMDBGRkZGMDIwQzQwMjAwMDAwRkZGRjlFCis6MTAwRTgwMDAwMjBDNDAyNDAwMDBGRkZGMDIwQzQwMjgwMDAwRkZGRjdFCis6MTAwRTkwMDAwMjBDNDAzODAwMDAwMDQ2MDIwQzQwM0MwMDAwMDAwNUY3Cis6MTAwRUEwMDAwNjBDNDA0MDAwMDAwMDAyMDIwQzQwNDgwMDAwMDAwQTBFCis6MTAwRUIwMDAwMjBDNDA0QzAwMDAwMEYwMDYwQzQwNTAwMDAwMDAxRkU3Cis6MTAwRUMwMDAwMjBDNDBDQzAwMDAwMDAxMDYwQzQwRDAwMDAwMDAzQUFCCis6MTAwRUQwMDAwMjBDNDFCODAwMDAwMDAxMDYwQzQxQkMwMDAwMDAwM0Y4Cis6MTAwRUUwMDAwMjBDNDFDODAwMDAwMDAxMDIwQzQxQ0MwMDAwMDAwMUNFCis6MTAwRUYwMDAwNjBDNDFEMDAwMDAwMDFBMDIwQzQyMzgwN0ZGRkZGRjI5Cis6MTAwRjAwMDAwMjBDNDIzQzAwMDAwMDNGMDIwQzQyNDAwN0ZGRkZGRjgyCis6MTAwRjEwMDAwMjBDNDI0NDAwMDAwMDBGMDEwQzQyNDgwMDAwMDAwMDk3Cis6MTAwRjIwMDAwMTBDNDI0QzAwMDAwMDAwMDEwQzQyNTAwMDAwMDAwMDg3Cis6MTAwRjMwMDAwMTBDNDI1NDAwMDAwMDAwMDEwQzQyNTgwMDAwMDAwMDY3Cis6MTAwRjQwMDAwMTBDNDI1QzAwMDAwMDAwMDEwQzQyNjAwMDAwMDAwMDQ3Cis6MTAwRjUwMDAwMTBDNDI2NDAwMDAwMDAwMDEwQzQyNjgwMDAwMDAwMDI3Cis6MTAwRjYwMDAwMTBDNDI2QzAwMDAwMDAwMDEwQzQyNzAwMDAwMDAwMDA3Cis6MTAwRjcwMDAwMTBDNDI3NDAwMDAwMDAwMDEwQzQyNzgwMDAwMDAwMEU3Cis6MTAwRjgwMDAwMTBDNDI3QzAwMDAwMDAwMDEwQzQyODAwMDAwMDAwMEM3Cis6MTAwRjkwMDAwQzBDNDAwMDAwMDAwM0U4MEEwQzQwMDAwMDAwMDAwMUI3Cis6MTAwRkEwMDAwQjBDNDAwMDAwMDAwMDBBMDIwRDAwNDQwMDAwMDAzMjVCCis6MTAwRkIwMDAwMjBEMDA4QzAyMTUwMDIwMDIwRDAwOTAwMjE1MDAyMDg5Cis6MTAwRkMwMDAwMjBEMDA5NDA4MTAwMDAwMDIwRDAwOTgwMDAwMDAzMzhDCis6MTAwRkQwMDAwMjBEMDA5QzAwMDAwMDAyMDIwRDAwQTAwMDAwMDAwMEI1Cis6MTAwRkUwMDAwMjBEMDBBNDAwMDAwMDA1MDIwRDAwQTgwMDAwMDAwNThECis6MTAwRkYwMDAwNjBEMDBBQzAwMDAwMDAyMDIwRDAwQjQwMDAwMDAwMjZCCis6MTAxMDAwMDAwMjBEMDBCODAwMDAwMDAzMDIwRDAwQkMwMDAwMDAwMjQ5Cis6MTAxMDEwMDAwMjBEMDBDMDAwMDAwMDAxMDIwRDAwQzgwMDAwMDAwMjI3Cis6MTAxMDIwMDAwMjBEMDBDQzAwMDAwMDAyMDIwRDAxMDgwMDAwMDAwMUNBCis6MTAxMDMwMDAwMjBEMDE1QzAwMDAwMDAxMDIwRDAxNjQwMDAwMDAwMUNFCis6MTAxMDQwMDAwMjBEMDE2ODAwMDAwMDAyMDIwRDAyMDQwMDAwMDAwMTEwCis6MTAxMDUwMDAwMjBEMDIwQzAwMDAwMDIwMDIwRDAyMTAwMDAwMDA0MEYyCis6MTAxMDYwMDAwMjBEMDIxNDAwMDAwMDQwMDIwRDAyMjAwMDAwMDAwM0U3Cis6MTAxMDcwMDAwMjBEMDIyNDAwMDAwMDE4MDYwRDAyODAwMDAwMDAxMjdDCis6MTAxMDgwMDAwNDBEMDMwMDAwMjQwMjdFMDIwRDAwNEMwMDAwMDAwMTRDCis6MTAxMDkwMDAwMjBEMDA1MDAwMDAwMDAyMDIwRDAwNTQwMDAwMDAwODg0Cis6MTAxMEEwMDAwMjBEMDA1ODAwMDAwMDA4MDYwRDAwNUMwMDAwMDAwNDVFCis6MTAxMEIwMDAwMjBEMDBDNDAwMDAwMDA0MDIwRDAwMDQwMDAwMDAwMTQ1Cis6MTAxMEMwMDAwMjBEMDAwODAwMDAwMDAxMDIwRDAwMEMwMDAwMDAwMUVDCis6MTAxMEQwMDAwMjBEMDAxMDAwMDAwMDAxMDIwRDAwMTQwMDAwMDAwMUNDCis6MTAxMEUwMDAwMjBEMDAxODAwMDAwMDAxMDIwRDAwMUMwMDAwMDAwMUFDCis6MTAxMEYwMDAwMjBEMDAyMDAwMDAwMDAxMDIwRDAwMjQwMDAwMDAwMThDCis6MTAxMTAwMDAwMjBEMDAyODAwMDAwMDAxMDIwRDAwMkMwMDAwMDAwMTZCCis6MTAxMTEwMDAwMjBEMDAzMDAwMDAwMDAxMDIwRDAwMzQwMDAwMDAwMTRCCis6MTAxMTIwMDAwMjBEMDAzODAwMDAwMDAxMDIwRDAwM0MwMDAwMDAwMTJCCis6MTAxMTMwMDAwMjBEMDExNDAwMDAwMDA5MDIwRDAxMUMwMDAwMDAwQTRDCis6MTAxMTQwMDAwMjBEMDEyNDAwMDAwMDA3MDIwRDAxMkMwMDAwMDAwNzIxCis6MTAxMTUwMDAwMjBEMDEzNDAwMDAwMDBDMDIwRDAxM0MwMDAwMDAwQkU4Cis6MTAxMTYwMDAwMjBEMDE0NDAwMDAwMDA3MDIwRDAxMTgwMDAwMDAyOUQzCis6MTAxMTcwMDAwMjBEMDEyMDAwMDAwMDJBMDIwRDAxMjgwMDAwMDAyN0I2Cis6MTAxMTgwMDAwMjBEMDEzMDAwMDAwMDI3MDIwRDAxMzgwMDAwMDAyQzg0Cis6MTAxMTkwMDAwMjBEMDE0MDAwMDAwMDJCMDIwRDAxNDgwMDAwMDAyNzU1Cis6MTAxMUEwMDAwMjBEMDExNDAwMDAwMDE5MDIwRDAxMUMwMDAwMDAxQUJDCis6MTAxMUIwMDAwMjBEMDEyNDAwMDAwMDE3MDIwRDAxMkMwMDAwMDAxNzkxCis6MTAxMUMwMDAwMjBEMDEzNDAwMDAwMDFDMDIwRDAxM0MwMDAwMDAxQjU4Cis6MTAxMUQwMDAwMjBEMDE0NDAwMDAwMDE3MDIwRDAxMTgwMDAwMDAzOTQzCis6MTAxMUUwMDAwMjBEMDEyMDAwMDAwMDNBMDIwRDAxMjgwMDAwMDAzNzI2Cis6MTAxMUYwMDAwMjBEMDEzMDAwMDAwMDM3MDIwRDAxMzgwMDAwMDAzQ0Y0Cis6MTAxMjAwMDAwMjBEMDE0MDAwMDAwMDNCMDIwRDAxNDgwMDAwMDAzN0M0Cis6MTAxMjEwMDAwMjBEMDExNDAwMDAwMDQ5MDIwRDAxMUMwMDAwMDA0QUVCCis6MTAxMjIwMDAwMjBEMDEyNDAwMDAwMDQ3MDIwRDAxMkMwMDAwMDA0N0MwCis6MTAxMjMwMDAwMjBEMDEzNDAwMDAwMDRDMDIwRDAxM0MwMDAwMDA0Qjg3Cis6MTAxMjQwMDAwMjBEMDE0NDAwMDAwMDQ3MDIwRDAxMTgwMDAwMDA2OTcyCis6MTAxMjUwMDAwMjBEMDEyMDAwMDAwMDZBMDIwRDAxMjgwMDAwMDA2NzU1Cis6MTAxMjYwMDAwMjBEMDEzMDAwMDAwMDY3MDIwRDAxMzgwMDAwMDA2QzIzCis6MTAxMjcwMDAwMjBEMDE0MDAwMDAwMDZCMDIwRDAxNDgwMDAwMDA2N0Y0Cis6MTAxMjgwMDAwMjBEMDExNDAwMDAwMDU5MDIwRDAxMUMwMDAwMDA1QTVCCis6MTAxMjkwMDAwMjBEMDEyNDAwMDAwMDU3MDIwRDAxMkMwMDAwMDA1NzMwCis6MTAxMkEwMDAwMjBEMDEzNDAwMDAwMDVDMDIwRDAxM0MwMDAwMDA1QkY3Cis6MTAxMkIwMDAwMjBEMDE0NDAwMDAwMDU3MDIwRDAxMTgwMDAwMDA3OUUyCis6MTAxMkMwMDAwMjBEMDEyMDAwMDAwMDdBMDIwRDAxMjgwMDAwMDA3N0M1Cis6MTAxMkQwMDAwMjBEMDEzMDAwMDAwMDc3MDIwRDAxMzgwMDAwMDA3QzkzCis6MTAxMkUwMDAwMjBEMDE0MDAwMDAwMDdCMDIwRDAxNDgwMDAwMDA3NzY0Cis6MTAxMkYwMDAwMjBFMDA0QzAwMDAwMDMyMDIwRTAwOTQwMjE1MDAyMDg1Cis6MTAxMzAwMDAwMjBFMDA5ODAyMTUwMDIwMDIwRTAwOUMwMDAwMDAzMDIyCis6MTAxMzEwMDAwMjBFMDBBMDA4MTAwMDAwMDIwRTAwQTQwMDAwMDAzMzFFCis6MTAxMzIwMDAwMjBFMDBBODAwMDAwMDMwMDIwRTAwQUMwMDAwMDAzMUU4Cis6MTAxMzMwMDAwMjBFMDBCMDAwMDAwMDAyMDIwRTAwQjQwMDAwMDAwNDIzCis6MTAxMzQwMDAwMjBFMDBCODAwMDAwMDAwMDIwRTAwQkMwMDAwMDAwMjA3Cis6MTAxMzUwMDAwMjBFMDBDMDAwMDAwMDAyMDIwRTAwQzQwMDAwMDAwMEU3Cis6MTAxMzYwMDAwMjBFMDBDODAwMDAwMDAyMDIwRTAwQ0MwMDAwMDAwN0MwCis6MTAxMzcwMDAwMjBFMDBEMDAwMDAwMDAyMDIwRTAwRDQwMDAwMDAwMkE1Cis6MTAxMzgwMDAwMjBFMDBEODAwMDAwMDAxMDIwRTAwRTQwMDAwMDAwMTdGCis6MTAxMzkwMDAwMjBFMDE0NDAwMDAwMDAxMDIwRTAxNEMwMDAwMDAwMTk5Cis6MTAxM0EwMDAwMjBFMDE1MDAwMDAwMDAyMDIwRTAyMDQwMDAwMDAwMUMzCis6MTAxM0IwMDAwMjBFMDIwQzAwMDAwMDQwMDIwRTAyMTAwMDAwMDA0MDZECis6MTAxM0MwMDAwMjBFMDIxQzAwMDAwMDA0MDIwRTAyMjAwMDAwMDAyMDk5Cis6MTAxM0QwMDAwMjBFMDIyNDAwMDAwMDBFMDIwRTAyMjgwMDAwMDAxQjc0Cis6MTAxM0UwMDAwNjBFMDMwMDAwMDAwMDEyMDQwRTAyODAwMDFCMDJBMjgxCis6MTAxM0YwMDAwMjBFMDA1NDAwMDAwMDBDMDIwRTAwNTgwMDAwMDAwNzBFCis6MTAxNDAwMDAwMjBFMDA1QzAwMDAwMDBGMDIwRTAwNjAwMDAwMDAxMEUxCis6MTAxNDEwMDAwMjBFMDA2NDAwMDAwMDBCMDYwRTAwNjgwMDAwMDAwM0NFCis6MTAxNDIwMDAwMjBFMDBEQzAwMDAwMDAzMDIwRTAwMDQwMDAwMDAwMUI4Cis6MTAxNDMwMDAwMjBFMDAwODAwMDAwMDAxMDIwRTAwMEMwMDAwMDAwMTc2Cis6MTAxNDQwMDAwMjBFMDAxMDAwMDAwMDAxMDIwRTAwMTQwMDAwMDAwMTU2Cis6MTAxNDUwMDAwMjBFMDAxODAwMDAwMDAxMDIwRTAwMUMwMDAwMDAwMTM2Cis6MTAxNDYwMDAwMjBFMDAyMDAwMDAwMDAxMDIwRTAwMjQwMDAwMDAwMTE2Cis6MTAxNDcwMDAwMjBFMDAyODAwMDAwMDAxMDIwRTAwMkMwMDAwMDAwMUY2Cis6MTAxNDgwMDAwMjBFMDAzMDAwMDAwMDAxMDIwRTAwMzQwMDAwMDAwMUQ2Cis6MTAxNDkwMDAwMjBFMDAzODAwMDAwMDAxMDIwRTAwM0MwMDAwMDAwMUI2Cis6MTAxNEEwMDAwMjBFMDA0MDAwMDAwMDAxMDIwRTAwNDQwMDAwMDAwMTk2Cis6MTAxNEIwMDAwMjBFMDExMDAwMDAwMDBGMDIwRTAxMTgwMDAwMDAwRUM1Cis6MTAxNEMwMDAwMjBFMDEyMDAwMDAwMDAwMDIwRTAxMjgwMDAwMDAwMEIyCis6MTAxNEQwMDAwMjBFMDExNDAwMDAwMDJGMDIwRTAxMUMwMDAwMDAyRTVECis6MTAxNEUwMDAwMjBFMDEyNDAwMDAwMDAwMDIwRTAxMkMwMDAwMDAwMDhBCis6MTAxNEYwMDAwMjBFMDExMDAwMDAwMDFGMDIwRTAxMTgwMDAwMDAxRTY1Cis6MTAxNTAwMDAwMjBFMDEyMDAwMDAwMDAwMDIwRTAxMjgwMDAwMDAwMDcxCis6MTAxNTEwMDAwMjBFMDExNDAwMDAwMDNGMDIwRTAxMUMwMDAwMDAzRUZDCis6MTAxNTIwMDAwMjBFMDEyNDAwMDAwMDAwMDIwRTAxMkMwMDAwMDAwMDQ5Cis6MTAxNTMwMDAwMjBFMDExMDAwMDAwMDRGMDIwRTAxMTgwMDAwMDA0RUM0Cis6MTAxNTQwMDAwMjBFMDEyMDAwMDAwMDAwMDIwRTAxMjgwMDAwMDAwMDMxCis6MTAxNTUwMDAwMjBFMDExNDAwMDAwMDZGMDIwRTAxMUMwMDAwMDA2RTVDCis6MTAxNTYwMDAwMjBFMDEyNDAwMDAwMDAwMDIwRTAxMkMwMDAwMDAwMDA5Cis6MTAxNTcwMDAwMjBFMDExMDAwMDAwMDVGMDIwRTAxMTgwMDAwMDA1RTY0Cis6MTAxNTgwMDAwMjBFMDEyMDAwMDAwMDAwMDIwRTAxMjgwMDAwMDAwMEYxCis6MTAxNTkwMDAwMjBFMDExNDAwMDAwMDdGMDIwRTAxMUMwMDAwMDA3RUZDCis6MTAxNUEwMDAwMjBFMDEyNDAwMDAwMDAwMDIwRTAxMkMwMDAwMDAwMEM5Cis6MTAxNUIwMDAwNzMwMDQwMDAwRTEwMDAwMDgzMDA3RDgwMDA1MDJCRDM0Cis6MTAxNUMwMDAwNzM0MDAwMDJFQ0EwMDAwMDczNDgwMDAzMTFBMEJCMzI0Cis6MTAxNUQwMDAwNzM1MDAwMDM2OEIxN0ZBMDczNTgwMDAzOUM2MjU5RDgwCis6MTAxNUUwMDAwNzM2MDAwMDEzRDUzNDBGMDgzNjMwNzAzOUYyMDJCRkM5Cis6MTAxNUYwMDAwMTMwMDAwMDAwMDAwMDAwMDEzMDAwMDQwMDAwMDAwMDg1Cis6MTAxNjAwMDAwMTMwMDAwODAwMDAwMDAwMDEzMDAwMEMwMDAwMDAwMDY0Cis6MTAxNjEwMDAwMTMwMDAxMDAwMDAwMDAwMDEzMDAwMTQwMDAwMDAwMDQ0Cis6MTAxNjIwMDAwMjMwMDAyMDAwMDAwMDAxMDIzMDAwMjQwMDAwMDAwMjBGCis6MTAxNjMwMDAwMjMwMDAyODAwMDAwMDAzMDIzMDAwMkMwMDAwMDAwMEVGCis6MTAxNjQwMDAwMjMwMDAzMDAwMDAwMDA0MDIzMDAwMzQwMDAwMDAwMUNECis6MTAxNjUwMDAwMjMwMDAzODAwMDAwMDAwMDIzMDAwM0MwMDAwMDAwMUIxCis6MTAxNjYwMDAwMjMwMDA0MDAwMDAwMDA0MDIzMDAwNDQwMDAwMDAwMDhFCis6MTAxNjcwMDAwMjMwMDA0ODAwMDAwMDAxMDIzMDAwNEMwMDAwMDAwMzZFCis6MTAxNjgwMDAwMjMwMDA1MDAwMDAwMDAwMDIzMDAwNTQwMDAwMDAwMTUxCis6MTAxNjkwMDAwMjMwMDA1ODAwMDAwMDA0MDIzMDAwNUMwMDAwMDAwMDJFCis6MTAxNkEwMDAwMjMwMDA2MDAwMDAwMDAxMDIzMDAwNjQwMDAwMDAwMzBFCis6MTAxNkIwMDAwMjMwMDA2ODAwMDAwMDAwMDIzMDAwNkMwMDAwMDAwMUYxCis6MTAxNkMwMDAwMjMwMDA3MDAwMDAwMDA0MDIzMDAwNzQwMDAwMDAwMENFCis6MTAxNkQwMDAwMjMwMDA3ODAwMDAwMDA0MDIzMDAwN0MwMDAwMDAwM0FCCis6MTAxNkUwMDAwNjMwMDA4MDAwMDAwMDAyMDIzMDAwQTQwMDAwM0ZGRjJFCis6MTAxNkYwMDAwMjMwMDBBODAwMDAwM0ZGMDIzMDAyMjQwMDAwMDAwMEI2Cis6MTAxNzAwMDAwMjMwMDIzNDAwMDAwMDAwMDIzMDAyNEMwMDAwMDAwMEYxCis6MTAxNzEwMDAwMjMwMDJFNDAwMDBGRkZGMDYzMDIwMDAwMDAwMDgwMDU1Cis6MTAxNzIwMDAwMjMzOEJDMDAwMDAwMDAxMDIzMzgwMDAwMDAwMDAxQTY5Cis6MTAxNzMwMDAwMjMzODA0MDAwMDAwMDRFMDIzMzgwODAwMDAwMDAxMDIxCis6MTAxNzQwMDAwMjMzODBDMDAwMDAwMDIwMEMzMzgzMDAwMDA3QTEyMDdBCis6MTAxNzUwMDAwQTMzODMwMDAwMDAwMTM4MEIzMzgzMDAwMDAwMTM4ODM0Cis6MTAxNzYwMDAwMjMzODNDMDAwMDAwMUY0MEMzMzgzODAxRENENjUwMDdCCis6MTAxNzcwMDAwQTMzODM4MDAwMDRDNEI0MEIzMzgzODAwMDRDNEI0MDk1Cis6MTAxNzgwMDAwQTMzMTQ4MDAwMDAwMDAwMDIzMzE0ODAwMDAwMDAwMUJFCis6MTAxNzkwMDAwNjMyMjAwMDAwMDAwMTAyMDYzMjgwMjAwMDAwMDBDODRFCis6MTAxN0EwMDAwNjMyODAwMDAwMDAwMDAyMDYzMjNEQTgwMDAwMDAwNDVFCis6MTAxN0IwMDAwNjMyM0Q4MDAwMDAwMDA5MDQzMjNEQTQwMDAxMDJDMTUwCis6MTAxN0MwMDAwNjMyM0QwMDAwMDAwMDIwMDYzMjUwMDAwMDAwMDQwMEY4Cis6MTAxN0QwMDAwNjMyNDAwMDAwMDAwMDAyMDQzMjQwMDgwMDAxMDJDMjRDCis6MTAxN0UwMDAwNjMyNDAwQzAwMDAwMDAzMDYzMjQwRDgwMDAwMDAwMjIwCis6MTAxN0YwMDAwNjMyNkI2ODAwMDAwMDAyMDQzMjZCNzAwMDAyMDJDMzA0Cis6MTAxODAwMDAwNjMyNkIxMDAwMDAwMDAyMDQzMjc0QzAwMDAyMDJDNUYwCis6MTAxODEwMDAwNjMyREE0MDAwMDAwMDAyMDYzMkUwMDAwMDAwMDgwMDU0Cis6MTAxODIwMDAwMjMzMDgwMDAxMDAwMDAwMDQzMzBDMDAwMDEwMDJDNzVFCis6MTAxODMwMDAwMjMzMDgwMDAwMDAwMDAwMDQzMzBDNDAwMDEwMDJEN0ZGCis6MTAxODQwMDAwNjMyMjQ1MDAwMDAwMEI0MDYzMjJBRDAwMDAwMDAwMjA0Cis6MTAxODUwMDAwNjMyMTAwMDAwMDAwMUEwMDIzMjNEQjgwMDAwMDAwMDc2Cis6MTAxODYwMDAwNjMyNTAwMDAwMDAwMDIwMDYzMjUxMDAwMDAwMDAyMDI3Cis6MTAxODcwMDAwNjMyNTIwMDAwMDAwMDIwMDYzMjUzMDAwMDAwMDAyMDEzCis6MTAxODgwMDAwNjMyNTQwMDAwMDAwMDIwMDYzMjU1MDAwMDAwMDAyMEZGCis6MTAxODkwMDAwNjMyNTYwMDAwMDAwMDIwMDYzMjU3MDAwMDAwMDAyMEVCCis6MTAxOEEwMDAwNjMyNTgwMDAwMDAwMDIwMDYzMjU5MDAwMDAwMDAyMEQ3Cis6MTAxOEIwMDAwNjMyNUEwMDAwMDAwMDIwMDYzMjVCMDAwMDAwMDAyMEMzCis6MTAxOEMwMDAwNjMyNUMwMDAwMDAwMDIwMDYzMjVEMDAwMDAwMDAyMEFGCis6MTAxOEQwMDAwNjMyNUUwMDAwMDAwMDIwMDYzMjVGMDAwMDAwMDAyMDlCCis6MTAxOEUwMDAwNjMyNkI3ODAwMDAwMDUyMDYzMjZFMDgwMDAwMDAwQ0QxCis6MTAxOEYwMDAwNjMyREE4ODAwMDAwMDAyMDYzMjI3MjAwMDAwMDBCNDE5Cis6MTAxOTAwMDAwNjMyMkFEODAwMDAwMDAyMDYzMjE2ODAwMDAwMDFBMDJDCis6MTAxOTEwMDAwMjMyM0RCQzAwMDAwMDAwMDYzMjUwODAwMDAwMDAyMDcyCis6MTAxOTIwMDAwNjMyNTE4MDAwMDAwMDIwMDYzMjUyODAwMDAwMDAyMDY0Cis6MTAxOTMwMDAwNjMyNTM4MDAwMDAwMDIwMDYzMjU0ODAwMDAwMDAyMDUwCis6MTAxOTQwMDAwNjMyNTU4MDAwMDAwMDIwMDYzMjU2ODAwMDAwMDAyMDNDCis6MTAxOTUwMDAwNjMyNTc4MDAwMDAwMDIwMDYzMjU4ODAwMDAwMDAyMDI4Cis6MTAxOTYwMDAwNjMyNTk4MDAwMDAwMDIwMDYzMjVBODAwMDAwMDAyMDE0Cis6MTAxOTcwMDAwNjMyNUI4MDAwMDAwMDIwMDYzMjVDODAwMDAwMDAyMDAwCis6MTAxOTgwMDAwNjMyNUQ4MDAwMDAwMDIwMDYzMjVFODAwMDAwMDAyMEVDCis6MTAxOTkwMDAwNjMyNUY4MDAwMDAwMDIwMDYzMjZDQzAwMDAwMDA1MjVBCis6MTAxOUEwMDAwNjMyNkUzODAwMDAwMDBDMDYzMkRBOTAwMDAwMDAwMkE5Cis6MTAxOUIwMDAwMjMyMkEzMDAwMDAwMDAwMDYzMjQwMTgwMDAwMDAwMjA3Cis6MTAxOUMwMDAwNjMyRDAwMDAwMDAwMDA2MDIzMjJBMzQwMDAwMDAwMDc3Cis6MTAxOUQwMDAwNjMyNDAyODAwMDAwMDAyMDYzMkQwMTgwMDAwMDAwNjNGCis6MTAxOUUwMDAwMjMyMkEzODAwMDAwMDAwMDYzMjQwMzgwMDAwMDAwMkFGCis6MTAxOUYwMDAwNjMyRDAzMDAwMDAwMDA2MDIzMjJBM0MwMDAwMDAwMDBGCis6MTAxQTAwMDAwNjMyNDA0ODAwMDAwMDAyMDYzMkQwNDgwMDAwMDAwNkJFCis6MTAxQTEwMDAwMjMyMkE0MDAwMDAwMDAwMDYzMjQwNTgwMDAwMDAwMjU2Cis6MTAxQTIwMDAwNjMyRDA2MDAwMDAwMDA2MDIzMjJBNDQwMDAwMDAwMEE2Cis6MTAxQTMwMDAwNjMyNDA2ODAwMDAwMDAyMDYzMkQwNzgwMDAwMDAwNjNFCis6MTAxQTQwMDAwMjMyMkE0ODAwMDAwMDAwMDYzMjQwNzgwMDAwMDAwMkZFCis6MTAxQTUwMDAwNjMyRDA5MDAwMDAwMDA2MDIzMjJBNEMwMDAwMDAwMDNFCis6MTAxQTYwMDAwNjMyNDA4ODAwMDAwMDAyMDYzMkQwQTgwMDAwMDAwNkJFCis6MTAxQTcwMDAwNzIwMDQwMDAwOTMwMDAwMDgyMDA3ODAwMDEwMDJFNzAwCis6MTAxQTgwMDAwNzI0MDAwMDJBREYwMDAwMDcyNDgwMDAyRTA1MEFCODgyCis6MTAxQTkwMDAwODI0RTRBMDYxRDIwMkU5MDEyMDAwMDAwMDAwMDAwMDU3Cis6MTAxQUEwMDAwMTIwMDAwNDAwMDAwMDAwMDEyMDAwMDgwMDAwMDAwMEU4Cis6MTAxQUIwMDAwMTIwMDAwQzAwMDAwMDAwMDEyMDAwMTAwMDAwMDAwMEM4Cis6MTAxQUMwMDAwMTIwMDAxNDAwMDAwMDAwMDIyMDAwMjAwMDAwMDAwMTlFCis6MTAxQUQwMDAwMjIwMDAyNDAwMDAwMDAyMDIyMDAwMjgwMDAwMDAwMzcxCis6MTAxQUUwMDAwMjIwMDAyQzAwMDAwMDAwMDIyMDAwMzAwMDAwMDAwNDUyCis6MTAxQUYwMDAwMjIwMDAzNDAwMDAwMDAxMDIyMDAwMzgwMDAwMDAwMDM1Cis6MTAxQjAwMDAwMjIwMDAzQzAwMDAwMDAxMDIyMDAwNDAwMDAwMDAwNDEwCis6MTAxQjEwMDAwMjIwMDA0NDAwMDAwMDAwMDIyMDAwNDgwMDAwMDAwMUY0Cis6MTAxQjIwMDAwMjIwMDA0QzAwMDAwMDAzMDIyMDAwNTAwMDAwMDAwMEQyCis6MTAxQjMwMDAwMjIwMDA1NDAwMDAwMDAxMDIyMDAwNTgwMDAwMDAwNEIwCis6MTAxQjQwMDAwMjIwMDA1QzAwMDAwMDAwMDIyMDAwNjAwMDAwMDAwMTk0Cis6MTAxQjUwMDAwMjIwMDA2NDAwMDAwMDAzMDIyMDAwNjgwMDAwMDAwMDcyCis6MTAxQjYwMDAwMjIwMDA2QzAwMDAwMDAxMDIyMDAwNzAwMDAwMDAwNDUwCis6MTAxQjcwMDAwMjIwMDA3NDAwMDAwMDAwMDIyMDAwNzgwMDAwMDAwNDMxCis6MTAxQjgwMDAwMjIwMDA3QzAwMDAwMDAzMDYyMDAwODAwMDAwMDAwMjBDCis6MTAxQjkwMDAwMjIwMDBBNDAwMDAzRkZGMDIyMDAwQTgwMDAwMDNGRjc1Cis6MTAxQkEwMDAwMjIwMDIyNDAwMDAwMDAwMDIyMDAyMzQwMDAwMDAwMDk1Cis6MTAxQkIwMDAwMjIwMDI0QzAwMDAwMDAwMDIyMDAyRTQwMDAwRkZGRkFGCis6MTAxQkMwMDAwNjIwMjAwMDAwMDAwODAwMDIyMzhCQzAwMDAwMDAwMTU2Cis6MTAxQkQwMDAwMjIzODAwMDAwMDAwMDEwMDIyMzgwNDAwMDAwMDAxMjU5Cis6MTAxQkUwMDAwMjIzODA4MDAwMDAwMDMwMDIyMzgwQzAwMDAwMDAwRTJECis6MTAxQkYwMDAwMjIzODNDMDAwMDAwMUY0MDIyMzE0ODAwMDAwMDAwMUNFCis6MTAxQzAwMDAwQTIzMTQ4MDAwMDAwMDAwMDYyMjEwMDAwMDAwMDA0Mjk5Cis6MTAxQzEwMDAwNjIyNzAyMDAwMDAwMEM4MDYyMjcwMDAwMDAwMDAwMkFBCis6MTAxQzIwMDAwMjIyMTFFODAwMDAwMDAwMDYyMjMwMDAwMDAwMDBDMDdGCis6MTAxQzMwMDAwNjIyNDA3MDAwMDAwMDgwMDYyMjUyODAwMDAwMDAwNDRFCis6MTAxQzQwMDAwNjIyNjcwMDAwMDAwMTAwMDYyMjkwMDAwMDAwMDQwMDQ4Cis6MTAxQzUwMDAwNDIyNkIwODAwMjAwMkVCMDIyMzA4MDAwMTNGRkZGRjczCis6MTAxQzYwMDAwNDIzMEMwMDAwMTAwMzBCMDIyMzA4MDAwMDAwMDAwMEY2Cis6MTAxQzcwMDAwNDIzMEM0MDAwMTAwMzFCMDYyMjgxMDAwMDAwMDBBMDdBCis6MTAxQzgwMDAwNjIyODYwMDAwMDAwMDQwMDYyMjhDMDAwMDAwMDAzQzc2Cis6MTAxQzkwMDAwNjIyQjAwMDAwMDAwMjAwMDYyMjg4MDAwMDAwMDA4MDNBCis6MTAxQ0EwMDAwNjIyOERFMDAwMDAwMDNDMDYyMjQwNDAwMDAwMDAwNkI1Cis6MTAxQ0IwMDAwNjIyODM4MDAwMDAwMEEwMDYyMjg3MDAwMDAwMDA0MDZBCis6MTAxQ0MwMDAwNjIyOENGMDAwMDAwMDNDMDYyMkI4MDAwMDAwMDIwMDUyCis6MTAxQ0QwMDAwNjIyOEEwMDAwMDAwMDgwMDYyMjhFRDAwMDAwMDAzQzEwCis6MTAxQ0UwMDAwNjIyNDA1ODAwMDAwMDA2MDYyMjgwMDAwMDAwMDAwODdFCis6MTAxQ0YwMDAwMjIyMTE0ODAwMDAwMDAwMDYyMjMzMDAwMDAwMDAwMjBBCis6MTAxRDAwMDAwNjIyNjA0MDAwMDAwMDMwMDYyMjgwMjAwMDAwMDAwODBCCis6MTAxRDEwMDAwMjIyMTE0QzAwMDAwMDAwMDYyMjMzMDgwMDAwMDAwMkRECis6MTAxRDIwMDAwNjIyNjEwMDAwMDAwMDMwMDYyMjgwNDAwMDAwMDAwODBBCis6MTAxRDMwMDAwMjIyMTE1MDAwMDAwMDAwMDYyMjMzMTAwMDAwMDAwMkIxCis6MTAxRDQwMDAwNjIyNjFDMDAwMDAwMDMwMDYyMjgwNjAwMDAwMDAwODBBCis6MTAxRDUwMDAwMjIyMTE1NDAwMDAwMDAwMDYyMjMzMTgwMDAwMDAwMjg1Cis6MTAxRDYwMDAwNjIyNjI4MDAwMDAwMDMwMDYyMjgwODAwMDAwMDAwODA5Cis6MTAxRDcwMDAwMjIyMTE1ODAwMDAwMDAwMDYyMjMzMjAwMDAwMDAwMjU5Cis6MTAxRDgwMDAwNjIyNjM0MDAwMDAwMDMwMDYyMjgwQTAwMDAwMDAwODA4Cis6MTAxRDkwMDAwMjIyMTE1QzAwMDAwMDAwMDYyMjMzMjgwMDAwMDAwMjJECis6MTAxREEwMDAwNjIyNjQwMDAwMDAwMDMwMDYyMjgwQzAwMDAwMDAwODA3Cis6MTAxREIwMDAwMjIyMTE2MDAwMDAwMDAwMDYyMjMzMzAwMDAwMDAwMjAxCis6MTAxREMwMDAwNjIyNjRDMDAwMDAwMDMwMDYyMjgwRTAwMDAwMDAwODA3Cis6MTAxREQwMDAwMjIyMTE2NDAwMDAwMDAwMDYyMjMzMzgwMDAwMDAwMkQ1Cis6MTAxREUwMDAwNjIyNjU4MDAwMDAwMDMwMDIxNjEwMDAwMDAwMDAyODY2Cis6MTAxREYwMDAwMjE3MDAwODAwMDAwMDAyMDIxNzAwMkMwMDAwMDAwMzc4Cis6MTAxRTAwMDAwMjE3MDAzQzAwMDAwMDA0MDIxNzAwNDQwMDAwMDAwODE0Cis6MTAxRTEwMDAwMjE3MDA0ODAwMDAwMDAyMDIxNzAwNEMwMDAwMDA5MDZBCis6MTAxRTIwMDAwMjE3MDA1MDAwMDAwMDkwMDIxNzAwNTQwMDgwMDA5MDNDCis6MTAxRTMwMDAwMjE3MDA1ODA4MTQwMDAwMDIxNzAwNjAwMDAwMDA4QTEyCis6MTAxRTQwMDAwMjE3MDA2NDAwMDAwMDgwMDIxNzAwNjgwMDAwMDA4MTkzCis6MTAxRTUwMDAwMjE3MDA2QzAwMDAwMDgwMDIxNzAwNzAwMDAwMDAwNkVFCis6MTAxRTYwMDAwMjE3MDA3ODAwMDAwN0QwMDIxNzAwN0MwMDAwMDc2QzAyCis6MTAxRTcwMDAwMjE3MDAzODAwN0MxMDA0MDIxNzAwMDQwMDAwMDAwRjU1Cis6MTAxRTgwMDAwNjE2NDAyNDAwMDAwMDAyMDIxNjQwNzAwMDAwMDAxQ0VDCis6MTAxRTkwMDAwMjE2NDIwODAwMDAwMDAxMDIxNjQyMTAwMDAwMDAwMTc0Cis6MTAxRUEwMDAwMjE2NDIyMDAwMDAwMDAxMDIxNjQyMjgwMDAwMDAwMTM0Cis6MTAxRUIwMDAwMjE2NDIzMDAwMDAwMDAxMDIxNjQyMzgwMDAwMDAwMTA0Cis6MTAxRUMwMDAwMjE2NDI2MDAwMDAwMDAyMEMxNjQwMUMwMDAzRDA5MDc1Cis6MTAxRUQwMDAwQTE2NDAxQzAwMDAwMDlDMEIxNjQwMUMwMDAwMDlDNEEwCis6MTAxRUUwMDAwMjE2NDAzMDAwMDAwMDA4MDIxNjQwMzQwMDAwMDAwQ0NBCis6MTAxRUYwMDAwMjE2NDAzODAwMDAwMDEwMDIxNjQwNDQwMDAwMDAyMDg2Cis6MTAxRjAwMDAwMjE2NDAwMDAwMDAwMDAxMDIxNjQwRDgwMDAwMDAwMTQ3Cis6MTAxRjEwMDAwMjE2NDAwODAwMDAwMDAxMDIxNjQwMEMwMDAwMDAwMUZCCis6MTAxRjIwMDAwMjE2NDAxMDAwMDAwMDAxMDIxNjQyNDAwMDAwMDAwMEFFCis6MTAxRjMwMDAwMjE2NDI0ODAwMDAwMDAwMDYxNjQyNzAwMDAwMDAwMjJGCis6MTAxRjQwMDAwMjE2NDI1MDAwMDAwMDAwMDIxNjQyNTgwMDAwMDAwMDM1Cis6MTAxRjUwMDAwNjE2NDI4MDAwMDAwMDAyMDIxNjYwMDgwMDAwMDQyNEY5Cis6MTAxRjYwMDAwMjE2NjAwQzAwMDAwNDEwMDIxNjYwMTAwMDAwMDQxNDM5Cis6MTAxRjcwMDAwMjE2NjAxQzAwMDBGRkZGMDIxNjYwMjAwMDAwRkZGRjM5Cis6MTAxRjgwMDAwMjE2NjAyNDAwMDBGRkZGMDIxNjYwMjgwMDAwRkZGRjE5Cis6MTAxRjkwMDAwMjE2NjAzODAwMDAwMDIwMDIxNjYwM0MwMDAwMDAyMDlECis6MTAxRkEwMDAwMjE2NjA0MDAwMDAwMDM0MDIxNjYwNDQwMDAwMDAzNTU0Cis6MTAxRkIwMDAwMjE2NjA0ODAwMDAwMDIzMDIxNjYwNEMwMDAwMDAyNDU2Cis6MTAxRkMwMDAwMjE2NjA1MDAwMDAwMDI1MDIxNjYwNTQwMDAwMDAyNjMyCis6MTAxRkQwMDAwMjE2NjA1ODAwMDAwMDI3MDIxNjYwNUMwMDAwMDAyOTBECis6MTAxRkUwMDAwMjE2NjA2MDAwMDAwMDJBMDIxNjYwNjQwMDAwMDAyQkU4Cis6MTAxRkYwMDAwMjE2NjA2ODAwMDAwMDJDMDIxNjYwNkMwMDAwMDAyREM0Cis6MTAyMDAwMDAwNjE2NjA3MDAwMDAwMDUyMDIxNjYxQjgwMDAwMDAwMTYwCis6MTAyMDEwMDAwNjE2NjFCQzAwMDAwMDFGMDIxNjYyMzgwN0ZGRkZGRkIyCis6MTAyMDIwMDAwMjE2NjIzQzAwMDAwMDNGMDIxNjYyNDAwN0ZGRkZGRkZECis6MTAyMDMwMDAwMjE2NjI0NDAwMDAwMDBGMDExNjYyNDgwMDAwMDAwMDEyCis6MTAyMDQwMDAwMTE2NjI0QzAwMDAwMDAwMDExNjYyNTAwMDAwMDAwMDAyCis6MTAyMDUwMDAwMTE2NjI1NDAwMDAwMDAwMDExNjYyNTgwMDAwMDAwMEUyCis6MTAyMDYwMDAwMTE2NjI1QzAwMDAwMDAwMDExNjYyNjAwMDAwMDAwMEMyCis6MTAyMDcwMDAwMTE2NjI2NDAwMDAwMDAwMDExNjYyNjgwMDAwMDAwMEEyCis6MTAyMDgwMDAwMTE2NjI2QzAwMDAwMDAwMDExNjYyNzAwMDAwMDAwMDgyCis6MTAyMDkwMDAwMTE2NjI3NDAwMDAwMDAwMDExNjYyNzgwMDAwMDAwMDYyCis6MTAyMEEwMDAwMTE2NjI3QzAwMDAwMDAwMEMxNjYwMDAwMDAwMDNFOENFCis6MTAyMEIwMDAwQTE2NjAwMDAwMDAwMDAxMEIxNjYwMDAwMDAwMDAwQTE0Cis6MTAyMEMwMDAwMjE2ODA0MDAwMDAwMDA2MDIxNjgwNDQwMDAwMDAwNTUxCis6MTAyMEQwMDAwMjE2ODA0ODAwMDAwMDBBMDIxNjgwNEMwMDAwMDAwNTJECis6MTAyMEUwMDAwMjE2ODA1NDAwMDAwMDAyMDIxNjgwQ0MwMDAwMDAwNDlBCis6MTAyMEYwMDAwMjE2ODBEMDAwMDAwMDA0MDIxNjgwRDQwMDAwMDAwNDA0Cis6MTAyMTAwMDAwMjE2ODBEODAwMDAwMDA0MDIxNjgwREMwMDAwMDAwNEUzCis6MTAyMTEwMDAwMjE2ODBFMDAwMDAwMDA0MDIxNjgwRTQwMDAwMDAwNEMzCis6MTAyMTIwMDAwMjE2ODBFODAwMDAwMDA0MDIxNjg4MDQwMDAwMDAwNDgzCis6MTAyMTMwMDAwMjE2ODAzMDAwMDAwMDdDMDIxNjgwMzQwMDAwMDAzRDUyCis6MTAyMTQwMDAwMjE2ODAzODAwMDAwMDNGMDIxNjgwM0MwMDAwMDA5QzEwCis6MTAyMTUwMDAwMjE2ODBGMDAwMDAwMDA3MDYxNjgwRjQwMDAwMDAwNTVCCis6MTAyMTYwMDAwMjE2ODgwQzAxMDEwMTAxMDIxNjgxMDgwMDAwMDAwMDFFCis6MTAyMTcwMDAwMjE2ODEwQzAwMDAwMDA0MDIxNjgxMTAwMDAwMDAwNDA5Cis6MTAyMTgwMDAwMjE2ODExNDAwMDAwMDAyMDIxNjg4MTAwODAxMjAwNEMzCis6MTAyMTkwMDAwMjE2ODExODAwMDAwMDA1MDIxNjgxMUMwMDAwMDAwNUNGCis6MTAyMUEwMDAwMjE2ODEyMDAwMDAwMDA1MDIxNjgxMjQwMDAwMDAwNUFGCis6MTAyMUIwMDAwMjE2ODgyQzIwMDgxMDAxMDIxNjgxMjgwMDAwMDAwODUxCis6MTAyMUMwMDAwMjE2ODEyQzAwMDAwMDA2MDIxNjgxMzAwMDAwMDAwNzc0Cis6MTAyMUQwMDAwMjE2ODEzNDAwMDAwMDAwMDIxNjg4MzAwMTAxMDEyMDNGCis6MTAyMUUwMDAwNjE2ODEzODAwMDAwMDA0MDIxNjg4MzQwMTAxMDEwMTNFCis6MTAyMUYwMDAwMjE2ODE0ODAwMDAwMDAwMDIxNjgxNEMwMDAwMDAwNDE1Cis6MTAyMjAwMDAwMjE2ODE1MDAwMDAwMDA0MDIxNjgxNTQwMDAwMDAwMkYyCis6MTAyMjEwMDAwMjE2ODgzODA4MDEyMDA0MDIxNjgxNTgwMDAwMDAwNUMzCis6MTAyMjIwMDAwMjE2ODE1QzAwMDAwMDA1MDIxNjgxNjAwMDAwMDAwNUI2Cis6MTAyMjMwMDAwMjE2ODE2NDAwMDAwMDA1MDIxNjg4M0MyMDA4MTAwMTg3Cis6MTAyMjQwMDAwMjE2ODE2ODAwMDAwMDA4MDIxNjgxNkMwMDAwMDAwNjdBCis6MTAyMjUwMDAwMjE2ODE3MDAwMDAwMDA3MDIxNjgxNzQwMDAwMDAwMTYwCis6MTAyMjYwMDAwMjE2ODg0MDAxMDEwMTIwMDIxNjgxNzgwMDAwMDAwMTU5Cis6MTAyMjcwMDAwMjE2ODE3QzAwMDAwMDAxMDIxNjgxODAwMDAwMDAwMTJFCis6MTAyMjgwMDAwMjE2ODE4NDAwMDAwMDAxMDIxNjg4NDQwMTAxMDEwMTQ4Cis6MTAyMjkwMDAwMjE2ODE4ODAwMDAwMDAxMDIxNjgxOEMwMDAwMDAwNEYzCis6MTAyMkEwMDAwMjE2ODE5MDAwMDAwMDA0MDIxNjgxOTQwMDAwMDAwMkQyCis6MTAyMkIwMDAwMjE2ODg0ODA4MDEyMDA0MDIxNjgxOTgwMDAwMDAwNUQzCis6MTAyMkMwMDAwMjE2ODE5QzAwMDAwMDA1MDIxNjgxQTAwMDAwMDAwNTk2Cis6MTAyMkQwMDAwMjE2ODFBNDAwMDAwMDA1MDIxNjg4MTQyMDA4MTAwMUNGCis6MTAyMkUwMDAwMjE2ODFBODAwMDAwMDA4MDIxNjgxQUMwMDAwMDAwNjVBCis6MTAyMkYwMDAwMjE2ODFCMDAwMDAwMDA3MDIxNjgxQjQwMDAwMDAwMTQwCis6MTAyMzAwMDAwMjE2ODgxODAxMDEwMTIwMDIxNjgxQjgwMDAwMDAwMUEwCis6MTAyMzEwMDAwMjE2ODFCQzAwMDAwMDAxMDIxNjgxQzAwMDAwMDAwMTBECis6MTAyMzIwMDAwMjE2ODFDNDAwMDAwMDAxMDIxNjg4MUMwMTAxMDEwMThGCis6MTAyMzMwMDAwMjE2ODFDODAwMDAwMDAxMDIxNjgxQ0MwMDAwMDAwNEQyCis6MTAyMzQwMDAwMjE2ODFEMDAwMDAwMDA0MDIxNjgxRDQwMDAwMDAwMkIxCis6MTAyMzUwMDAwMjE2ODgyMDA4MDEyMDA0MDIxNjgxRDgwMDAwMDAwNTFBCis6MTAyMzYwMDAwMjE2ODFEQzAwMDAwMDA1MDIxNjgxRTAwMDAwMDAwNTc1Cis6MTAyMzcwMDAwMjE2ODFFNDAwMDAwMDA1MDIxNjg4MjQyMDA4MTAwMURFCis6MTAyMzgwMDAwMjE2ODFFODAwMDAwMDA4MDIxNjgxRUMwMDAwMDAwNjM5Cis6MTAyMzkwMDAwMjE2ODFGMDAwMDAwMDA3MDIxNkU0MEMwMDAwMDAwMEE1Cis6MTAyM0EwMDAwMjE2ODgyODAxMDEwMTIwMDYxNkU0MTAwMDAwMDAwNDJFCis6MTAyM0IwMDAwMjE2RTAwMDAxMDEwMTAxMDIxNkU0MjAwMDAwMDAwMDA1Cis6MTAyM0MwMDAwMjE2RTQyNDAwMDAwMDA0MDIxNkU0MjgwMDAwMDAwNEMxCis6MTAyM0QwMDAwMjE2RTQyQzAwMDAwMDAyMDIxNkUwMDQwODAxMjAwNEFBCis6MTAyM0UwMDAwMjE2RTQzMDAwMDAwMDA1MDIxNkU0MzQwMDAwMDAwNTg3Cis6MTAyM0YwMDAwMjE2RTQzODAwMDAwMDA1MDIxNkU0M0MwMDAwMDAwNTY3Cis6MTAyNDAwMDAwMjE2RTAwODIwMDgxMDAxMDIxNkU0NDAwMDAwMDAwODRGCis6MTAyNDEwMDAwMjE2RTQ0NDAwMDAwMDA2MDIxNkU0NDgwMDAwMDAwNzJCCis6MTAyNDIwMDAwMjE2RTQ0QzAwMDAwMDAwMDIxNkUwMEMwMTAxMDEyMDNECis6MTAyNDMwMDAwNjE2RTQ1MDAwMDAwMDA0MDIxNkUwMTAwMTAxMDEwMTNDCis6MTAyNDQwMDAwMjE2RTQ2MDAwMDAwMDAwMDIxNkU0NjQwMDAwMDAwNENDCis6MTAyNDUwMDAwMjE2RTQ2ODAwMDAwMDA0MDIxNkU0NkMwMDAwMDAwMkFBCis6MTAyNDYwMDAwMjE2RTAxNDA4MDEyMDA0MDIxNkU0NzAwMDAwMDAwNUMyCis6MTAyNDcwMDAwMjE2RTQ3NDAwMDAwMDA1MDIxNkU0NzgwMDAwMDAwNTZFCis6MTAyNDgwMDAwMjE2RTQ3QzAwMDAwMDA1MDIxNkUwMTgyMDA4MTAwMTg2Cis6MTAyNDkwMDAwMjE2RTQ4MDAwMDAwMDA4MDIxNkU0ODQwMDAwMDAwNjMyCis6MTAyNEEwMDAwMjE2RTQ4ODAwMDAwMDA3MDIxNkU0OEMwMDAwMDAwMTE4Cis6MTAyNEIwMDAwMjE2RTAxQzAxMDEwMTIwMDIxNkU0OTAwMDAwMDAwMTU4Cis6MTAyNEMwMDAwMjE2RTQ5NDAwMDAwMDAxMDIxNkU0OTgwMDAwMDAwMUU2Cis6MTAyNEQwMDAwMjE2RTQ5QzAwMDAwMDAxMDIxNkUwMjAwMTAxMDEwMTQ3Cis6MTAyNEUwMDAwMjE2RTRBMDAwMDAwMDAxMDIxNkU0QTQwMDAwMDAwNEFCCis6MTAyNEYwMDAwMjE2RTRBODAwMDAwMDA0MDIxNkU0QUMwMDAwMDAwMjhBCis6MTAyNTAwMDAwMjE2RTAyNDA4MDEyMDA0MDIxNkU0QjAwMDAwMDAwNUQxCis6MTAyNTEwMDAwMjE2RTRCNDAwMDAwMDA1MDIxNkU0QjgwMDAwMDAwNTRECis6MTAyNTIwMDAwMjE2RTRCQzAwMDAwMDA1MDIxNkUwMjgyMDA4MTAwMTk1Cis6MTAyNTMwMDAwMjE2RTRDMDAwMDAwMDA4MDIxNkU0QzQwMDAwMDAwNjExCis6MTAyNTQwMDAwMjE2RTRDODAwMDAwMDA3MDIxNkU0Q0MwMDAwMDAwMUY3Cis6MTAyNTUwMDAwMjE2RTAyQzAxMDEwMTIwMDIxNkU0RDAwMDAwMDAwMTY3Cis6MTAyNTYwMDAwMjE2RTRENDAwMDAwMDAxMDIxNkU0RDgwMDAwMDAwMUM1Cis6MTAyNTcwMDAwMjE2RTREQzAwMDAwMDAxMDIxNkUwMzAwMTAxMDEwMTU2Cis6MTAyNTgwMDAwMjE2RTRFMDAwMDAwMDAxMDIxNkU0RTQwMDAwMDAwNDhBCis6MTAyNTkwMDAwMjE2RTRFODAwMDAwMDA0MDIxNkU0RUMwMDAwMDAwMjY5Cis6MTAyNUEwMDAwMjE2RTAzNDA4MDEyMDA0MDIxNkU0RjAwMDAwMDAwNUUxCis6MTAyNUIwMDAwMjE2RTRGNDAwMDAwMDA1MDIxNkU0RjgwMDAwMDAwNTJECis6MTAyNUMwMDAwMjE2RTRGQzAwMDAwMDA1MDIxNkUwMzgyMDA4MTAwMUE1Cis6MTAyNUQwMDAwMjE2RTUwMDAwMDAwMDA4MDIxNkU1MDQwMDAwMDAwNkVGCis6MTAyNUUwMDAwMjE2RTUwODAwMDAwMDA3MDIxNkUwM0MwMTAxMDEyMDg4Cis6MTAyNUYwMDAwMjE2ODI0MDAwM0YwMDNGMDIxNjgyNDQwMDAwMDAwMEE1Cis6MTAyNjAwMDAwMjE2RTUyNDAwM0YwMDNGMDIxNkU1MjgwMDAwMDAwMDA2Cis6MTAyNjEwMDAwMjE2ODI0ODAwMDAwMDAwMDIxNjgyNEMwMDNGMDAzRjc0Cis6MTAyNjIwMDAwMjE2RTUyQzAwMDAwMDAwMDIxNkU1MzAwMDNGMDAzRkQ2Cis6MTAyNjMwMDAwMjE2ODI1MDAxMDAwMTAwMDIxNjgyNTQwMTAwMDEwMEJFCis6MTAyNjQwMDAwMjE2RTUzNDAxMDAwMTAwMDIxNkU1MzgwMTAwMDEwMDIwCis6MTAyNjUwMDAwNjE2ODI1ODAwMDAwMDAyMDIxNkU1M0MwMDAwMDAwMDQ5Cis6MTAyNjYwMDAwMjE2RTU0MDAwMDAwMDAwMDIxNjgyNjAwMEMwMDBDMEIzCis6MTAyNjcwMDAwMjE2ODI2NDAwQzAwMEMwMDIxNkU1NDQwMEMwMDBDMDFCCis6MTAyNjgwMDAwMjE2RTU0ODAwQzAwMEMwMDIxNjgyNjgxRTAwMUUwMDQ3Cis6MTAyNjkwMDAwMjE2ODI2QzFFMDAxRTAwMDIxNkU1NEMxRTAwMUUwMDczCis6MTAyNkEwMDAwMjE2RTU1MDFFMDAxRTAwMDIxNjgyNzA0MDAwNDAwMDE3Cis6MTAyNkIwMDAwMjE2ODI3NDQwMDA0MDAwMDIxNkU1NTQ0MDAwNDAwMEJCCis6MTAyNkMwMDAwMjE2RTU1ODQwMDA0MDAwMDIxNjgyNzg4MDAwODAwMDIzCis6MTAyNkQwMDAwMjE2ODI3QzgwMDA4MDAwMDIxNkU1NUM4MDAwODAwMDhCCis6MTAyNkUwMDAwMjE2RTU2MDgwMDA4MDAwMDIxNjgyODAyMDAwMjAwMDMzCis6MTAyNkYwMDAwMjE2ODI4NDIwMDAyMDAwMDIxNkU1NjQyMDAwMjAwMERCCis6MTAyNzAwMDAwMjE2RTU2ODIwMDAyMDAwMDYxNjgyODgwMDAwMDAwMkZDCis6MTAyNzEwMDAwMjE2RTU2QzAwMDAwMDAwMDIxNkU1NzAwMDAwMDAwMEUzCis6MTAyNzIwMDAwMjE2ODI5MDAwMDAwMDAwMDIxNjgyOTQwMDAwMDAwMDUxCis6MTAyNzMwMDAwMjE2RTU3NDAwMDAwMDAwMDIxNkU1NzgwMDAwMDAwMEIzCis6MTAyNzQwMDAwMjE2ODI5ODAwMDAwMDAwMDIxNjgyOUMwMDAwMDAwMDIxCis6MTAyNzUwMDAwMjE2RTU3QzAwMDAwMDAwMDIxNkU1ODAwMDAwMDAwMDgzCis6MTAyNzYwMDAwMjE2ODJBMDAwMDAwMDAwMDIxNjgyQTQwMDAwMDAwMUYwCis6MTAyNzcwMDAwNjE2ODJBODAwMDAwMDBBMDIxNjgxRjQwMDAwMEMwODY4Cis6MTAyNzgwMDAwMjE2ODFGODAwMDAwMDQwMDIxNjgxRkMwMDAwMDEwMEUyCis6MTAyNzkwMDAwMjE2ODIwMDAwMDAwMDIwMDIxNjgyMDQwMDAwMDAxN0NBCis6MTAyN0EwMDAwMjE2ODIwODAwMDAwMDgwMDIxNjgyMEMwMDAwMDIwMDVGCis6MTAyN0IwMDAwMjE2ODIxMDAwMDAwMDAwMDIxNjgyMTgwMUZGMDFGRkJECis6MTAyN0MwMDAwMjE2ODIxNDAxRkYwMUZGMDIxNkU1MTAwMUZGMDFGRjRFCis6MTAyN0QwMDAwMjE2RTUwQzAxRkYwMUZGMDIxNjgyM0MwMDAwMDAxMzA3Cis6MTAyN0UwMDAwMjE2ODA5MDAwMDAwMTNGMDIxNjgwNjAwMDAwMDE0MDQ4Cis6MTAyN0YwMDAwMjE2ODA2NDAwMDAwMTQwMDYxNjgwNjgwMDAwMDAwMjk2Cis6MTAyODAwMDAwMjE2ODA3MDAwMDAwMEMwMDYxNjgwNzQwMDAwMDAwN0U5Cis6MTAyODEwMDAwMjE2ODA5QzAwMDAwMDQ4MDIxNjgwQTAwMDAwMDA0OEJDCis6MTAyODIwMDAwNjE2ODBBNDAwMDAwMDAyMDIxNjgwQUMwMDAwMDA0OERBCis6MTAyODMwMDAwNjE2ODBCMDAwMDAwMDA3MDIxNjgyMzgwMDAwODAwMEYzCis6MTAyODQwMDAwMjE2ODIzNDAwMDAyNUU0MDIxNjgwOTQwMDAwN0ZGRjA3Cis6MTAyODUwMDAwMjE2ODIyMDAwMEYwMDBGMDIxNjgyMUMwMDBGMDAwRkNDCis6MTAyODYwMDAwMjE2RTUxODAwMEYwMDBGMDIxNkU1MTQwMDBGMDAwRjA2Cis6MTAyODcwMDAwMjE2ODIyODAwMDAwMDAwMDIxNjgyMjRGRkZGRkZGRkRDCis6MTAyODgwMDAwMjE2RTUyMDAwMDAwMDAwMDIxNkU1MUNGRkZGRkZGRjE2Cis6MTAyODkwMDAwMjE2RTZCQzAwMDAwMDAwMDIxNkU2QzAwMDAwMDAwMkJFCis6MTAyOEEwMDAwMjE2RTZDNDAwMDAwMDAxMDIxNkU2QzgwMDAwMDAwMzlDCis6MTAyOEIwMDAwMjE2RTZDQzAwMDAwMDA0MDIxNkU2RDAwMDAwMDAwNjc2Cis6MTAyOEMwMDAwMjE2RTZENDAwMDAwMDA1MDIxNkU2RDgwMDAwMDAwNzU0Cis6MTAyOEQwMDAwMjE2ODBFQzAwMDAwMEZGMDIxNDAwMDAwMDAwMDAwMTVFCis6MTAyOEUwMDAwMjE0MDAwQzAwMDAwMDAxMDIxNDAwNDAwMDAwMDAwMTZFCis6MTAyOEYwMDAwMjE0MDA0NDAwMDA3RkZGMDIxNDAwMEMwMDAwMDAwMERFCis6MTAyOTAwMDAwMjE0MDAwMDAwMDAwMDAwMDIxNDAwNkMwMDAwMDAwMDJGCis6MTAyOTEwMDAwMjE0MDAwNDAwMDAwMDAxMDIxNDAwMzAwMDAwMDAwMTU1Cis6MTAyOTIwMDAwMjE0MDAwNDAwMDAwMDAwMDIxNDAwNUMwMDAwMDAwMDFCCis6MTAyOTMwMDAwMjE0MDAwODAwMDAwMDAxMDIxNDAwMzQwMDAwMDAwMTJECis6MTAyOTQwMDAwMjE0MDAwODAwMDAwMDAwMDIxNDAwNjAwMDAwMDAwMEYzCis6MTAyOTUwMDAwMjAyMDA1ODAwMDAwMDMyMDIwMjAwQTAwMzE1MDAyMDBECis6MTAyOTYwMDAwMjAyMDBBNDAzMTUwMDIwMDIwMjAwQTgwMTAwMDAzMEFBCis6MTAyOTcwMDAwMjAyMDBBQzA4MTAwMDAwMDIwMjAwQjAwMDAwMDAzM0E4Cis6MTAyOTgwMDAwMjAyMDBCNDAwMDAwMDMwMDIwMjAwQjgwMDAwMDAzMTcyCis6MTAyOTkwMDAwMjAyMDBCQzAwMDAwMDAzMDIwMjAwQzAwMDAwMDAwNkFBCis6MTAyOUEwMDAwMjAyMDBDNDAwMDAwMDAzMDIwMjAwQzgwMDAwMDAwMzhECis6MTAyOUIwMDAwMjAyMDBDQzAwMDAwMDAyMDIwMjAwRDAwMDAwMDAwMDcxCis6MTAyOUMwMDAwMjAyMDBENDAwMDAwMDAyMDIwMjAwREMwMDAwMDAwMDRECis6MTAyOUQwMDAwMjAyMDBFMDAwMDAwMDA2MDIwMjAwRTQwMDAwMDAwNDIxCis6MTAyOUUwMDAwMjAyMDBFODAwMDAwMDAyMDIwMjAwRUMwMDAwMDAwMjA3Cis6MTAyOUYwMDAwMjAyMDBGMDAwMDAwMDAxMDIwMjAwRkMwMDAwMDAwNkRDCis6MTAyQTAwMDAwMjAyMDEyMDAwMDAwMDAwMDIwMjAxMzQwMDAwMDAwMjY2Cis6MTAyQTEwMDAwMjAyMDFCMDAwMDAwMDAxMDIwMjAyMEMwMDAwMDAwMUVECis6MTAyQTIwMDAwMjAyMDIxNDAwMDAwMDAxMDIwMjAyMTgwMDAwMDAwMjZCCis6MTAyQTMwMDAwMjAyMDQwNDAwMDAwMDAxMDIwMjA0MEMwMDAwMDA0MDM1Cis6MTAyQTQwMDAwMjAyMDQxMDAwMDAwMDQwMDIwMjA0MUMwMDAwMDAwNDA2Cis6MTAyQTUwMDAwMjAyMDQyMDAwMDAwMDIwMDIwMjA0MjQwMDAwMDAwMjAwCis6MTAyQTYwMDAwMjAyMDQyODAwMDAwMDIwMDYwMjA1MDAwMDAwMDAxMkY3Cis6MTAyQTcwMDAwNDAyMDQ4MDAwMUYwMzJCMDIwMjAwNjAwMDAwMDAwRjBDCis6MTAyQTgwMDAwMjAyMDA2NDAwMDAwMDA3MDIwMjAwNjgwMDAwMDAwQjYwCis6MTAyQTkwMDAwMjAyMDA2QzAwMDAwMDBFMDIwMjAwNzAwMDAwMDAwRTM2Cis6MTAyQUEwMDAwNjAyMDA3NDAwMDAwMDAzMDIwMjAwRjQwMDAwMDAwNEFCCis6MTAyQUIwMDAwMjAyMDAwNDAwMDAwMDAxMDIwMjAwMDgwMDAwMDAwMTAwCis6MTAyQUMwMDAwMjAyMDAwQzAwMDAwMDAxMDIwMjAwMTAwMDAwMDAwMUUwCis6MTAyQUQwMDAwMjAyMDAxNDAwMDAwMDAxMDIwMjAwMTgwMDAwMDAwMUMwCis6MTAyQUUwMDAwMjAyMDAxQzAwMDAwMDAxMDIwMjAwMjAwMDAwMDAwMUEwCis6MTAyQUYwMDAwMjAyMDAyNDAwMDAwMDAxMDIwMjAwMjgwMDAwMDAwMTgwCis6MTAyQjAwMDAwMjAyMDAyQzAwMDAwMDAxMDIwMjAwMzAwMDAwMDAwMTVGCis6MTAyQjEwMDAwMjAyMDAzNDAwMDAwMDAxMDIwMjAwMzgwMDAwMDAwMTNGCis6MTAyQjIwMDAwMjAyMDAzQzAwMDAwMDAxMDIwMjAwNDAwMDAwMDAwMTFGCis6MTAyQjMwMDAwMjAyMDA0NDAwMDAwMDAxMDIwMjAwNDgwMDAwMDAwMUZGCis6MTAyQjQwMDAwMjAyMDA0QzAwMDAwMDAxMDIwMjAwNTAwMDAwMDAwMURGCis6MTAyQjUwMDAwMjAyMDEwODAwMDAwMEM4MDIwMjAxMTgwMDAwMDAwMjgxCis6MTAyQjYwMDAwMjAyMDFDNDAwMDAwMDAwMDIwMjAxQ0MwMDAwMDAwMENCCis6MTAyQjcwMDAwMjAyMDFENDAwMDAwMDAyMDIwMjAxREMwMDAwMDAwMjk3Cis6MTAyQjgwMDAwMjAyMDFFNDAwMDAwMEZGMDIwMjAxRUMwMDAwMDBGRjZECis6MTAyQjkwMDAwMjAyMDEwMDAwMDAwMDAwMDIwMjAxMEMwMDAwMDBDODU3Cis6MTAyQkEwMDAwMjAyMDExQzAwMDAwMDAyMDIwMjAxQzgwMDAwMDAwMDM1Cis6MTAyQkIwMDAwMjAyMDFEMDAwMDAwMDAwMDIwMjAxRDgwMDAwMDAwMjYxCis6MTAyQkMwMDAwMjAyMDFFMDAwMDAwMDAyMDIwMjAxRTgwMDAwMDBGRjMyCis6MTAyQkQwMDAwMjAyMDFGMDAwMDAwMEZGMDIwMjAxMDQwMDAwMDAwMEY4Cis6MTAyQkUwMDAwMjAyMDEwODAwMDAwMEM4MDIwMjAxMTgwMDAwMDAwMkYxCis6MTAyQkYwMDAwMjAyMDFDNDAwMDAwMDAwMDIwMjAxQ0MwMDAwMDAwMDNCCis6MTAyQzAwMDAwMjAyMDFENDAwMDAwMDAyMDIwMjAxREMwMDAwMDAwMjA2Cis6MTAyQzEwMDAwMjAyMDFFNDAwMDAwMEZGMDIwMjAxRUMwMDAwMDBGRkRDCis6MTAyQzIwMDAwMjAyMDEwMDAwMDAwMDAwMDIwMjAxMEMwMDAwMDBDOEM2Cis6MTAyQzMwMDAwMjAyMDExQzAwMDAwMDAyMDIwMjAxQzgwMDAwMDAwMEE0Cis6MTAyQzQwMDAwMjAyMDFEMDAwMDAwMDAwMDIwMjAxRDgwMDAwMDAwMkQwCis6MTAyQzUwMDAwMjAyMDFFMDAwMDAwMDAyMDIwMjAxRTgwMDAwMDBGRkExCis6MTAyQzYwMDAwMjAyMDFGMDAwMDAwMEZGMDIwMjAxMDQwMDAwMDAwMDY3Cis6MTAyQzcwMDAwMjAyMDEwODAwMDAwMEM4MDIwMjAxMTgwMDAwMDAwMjYwCis6MTAyQzgwMDAwMjAyMDFDNDAwMDAwMDAwMDIwMjAxQ0MwMDAwMDAwMEFBCis6MTAyQzkwMDAwMjAyMDFENDAwMDAwMDAyMDIwMjAxREMwMDAwMDAwMjc2Cis6MTAyQ0EwMDAwMjAyMDFFNDAwMDAwMEZGMDIwMjAxRUMwMDAwMDBGRjRDCis6MTAyQ0IwMDAwMjAyMDEwMDAwMDAwMDAwMDIwMjAxMEMwMDAwMDBDODM2Cis6MTAyQ0MwMDAwMjAyMDExQzAwMDAwMDAyMDIwMjAxQzgwMDAwMDAwMDE0Cis6MTAyQ0QwMDAwMjAyMDFEMDAwMDAwMDAwMDIwMjAxRDgwMDAwMDAwMjQwCis6MTAyQ0UwMDAwMjAyMDFFMDAwMDAwMDAyMDIwMjAxRTgwMDAwMDBGRjExCis6MTAyQ0YwMDAwMjAyMDFGMDAwMDAwMEZGMDIwMjAxMDQwMDAwMDAwMEQ3Cis6MTAyRDAwMDAwMjAyMDEwODAwMDAwMEM4MDIwMjAxMTgwMDAwMDAwMkNGCis6MTAyRDEwMDAwMjAyMDFDNDAwMDAwMDAwMDIwMjAxQ0MwMDAwMDAwMDE5Cis6MTAyRDIwMDAwMjAyMDFENDAwMDAwMDAyMDIwMjAxREMwMDAwMDAwMkU1Cis6MTAyRDMwMDAwMjAyMDFFNDAwMDAwMEZGMDIwMjAxRUMwMDAwMDBGRkJCCis6MTAyRDQwMDAwMjAyMDEwMDAwMDAwMDAwMDIwMjAxMEMwMDAwMDBDOEE1Cis6MTAyRDUwMDAwMjAyMDExQzAwMDAwMDAyMDIwMjAxQzgwMDAwMDAwMDgzCis6MTAyRDYwMDAwMjAyMDFEMDAwMDAwMDAwMDIwMjAxRDgwMDAwMDAwMkFGCis6MTAyRDcwMDAwMjAyMDFFMDAwMDAwMDAyMDIwMjAxRTgwMDAwMDBGRjgwCis6MTAyRDgwMDAwMjAyMDFGMDAwMDAwMEZGMDIwMjAxMDQwMDAwMDAwMDQ2Cis6MTAyRDkwMDAwNzI4MDQwMDAwQzAwMDAwMDgyODA3QTgwMDBCMDM0QTA5Cis6MTAyREEwMDAwNzJDMDAwMDMyRkQwMDAwMDcyQzgwMDAzNTdFMENDMDhGCis6MTAyREIwMDAwNzJEMDAwMDNBRTQxQTIwMDcyRDgwMDAzOUNGMjhEQUM5Cis6MTAyREMwMDAwNzJFMDAwMDFDM0MzNzRFMDgyRTM3MTAzOTFFMDM0Q0NFCis6MTAyREQwMDAwMTI4MDAwMDAwMDAwMDAwMDEyODAwMDQwMDAwMDAwMDlECis6MTAyREUwMDAwMTI4MDAwODAwMDAwMDAwMDEyODAwMEMwMDAwMDAwMDdECis6MTAyREYwMDAwMTI4MDAxMDAwMDAwMDAwMDEyODAwMTQwMDAwMDAwMDVECis6MTAyRTAwMDAwMjI4MDAyMDAwMDAwMDAxMDIyODAwMjQwMDAwMDAwMjI3Cis6MTAyRTEwMDAwMjI4MDAyODAwMDAwMDAzMDIyODAwMkMwMDAwMDAwMDA3Cis6MTAyRTIwMDAwMjI4MDAzMDAwMDAwMDA0MDIyODAwMzQwMDAwMDAwMUU1Cis6MTAyRTMwMDAwMjI4MDAzODAwMDAwMDAwMDIyODAwM0MwMDAwMDAwMUM5Cis6MTAyRTQwMDAwMjI4MDA0MDAwMDAwMDA0MDIyODAwNDQwMDAwMDAwMEE2Cis6MTAyRTUwMDAwMjI4MDA0ODAwMDAwMDAxMDIyODAwNEMwMDAwMDAwMzg2Cis6MTAyRTYwMDAwMjI4MDA1MDAwMDAwMDAwMDIyODAwNTQwMDAwMDAwMTY5Cis6MTAyRTcwMDAwMjI4MDA1ODAwMDAwMDA0MDIyODAwNUMwMDAwMDAwMDQ2Cis6MTAyRTgwMDAwMjI4MDA2MDAwMDAwMDAxMDIyODAwNjQwMDAwMDAwMzI2Cis6MTAyRTkwMDAwMjI4MDA2ODAwMDAwMDAwMDIyODAwNkMwMDAwMDAwMTA5Cis6MTAyRUEwMDAwMjI4MDA3MDAwMDAwMDA0MDIyODAwNzQwMDAwMDAwMEU2Cis6MTAyRUIwMDAwMjI4MDA3ODAwMDAwMDA0MDIyODAwN0MwMDAwMDAwM0MzCis6MTAyRUMwMDAwNjI4MDA4MDAwMDAwMDAyMDIyODAwQTQwMDAwM0ZGRjQ2Cis6MTAyRUQwMDAwMjI4MDBBODAwMDAwM0ZGMDIyODAyMjQwMDAwMDAwMENFCis6MTAyRUUwMDAwMjI4MDIzNDAwMDAwMDAwMDIyODAyNEMwMDAwMDAwMDBBCis6MTAyRUYwMDAwMjI4MDJFNDAwMDBGRkZGMDYyODIwMDAwMDAwMDgwMDZFCis6MTAyRjAwMDAwMjJCOEJDMDAwMDAwMDAxMDIyQjgwMDAwMDAwMDAwMDlCCis6MTAyRjEwMDAwMjJCODA0MDAwMDAwMDE4MDIyQjgwODAwMDAwMDAwQzczCis6MTAyRjIwMDAwMjJCODBDMDAwMDAwMDY2MEMyQjgzMDAwMDA3QTEyMDRDCis6MTAyRjMwMDAwQTJCODMwMDAwMDAwMTM4MEIyQjgzMDAwMDAwMTM4ODRDCis6MTAyRjQwMDAwMjJCODNDMDAwMDAwMUY0MEMyQjgzNDAwMDAwMDFGNDJECis6MTAyRjUwMDAwQTJCODM0MDAwMDAwMDAwMEIyQjgzNDAwMDAwMDAwNTdCCis6MTAyRjYwMDAwQTJCODM4MDAwMDRDNEI0MEMyQjgzODAxRENENjUwMDI0Cis6MTAyRjcwMDAwQTJCMTQ4MDAwMDAwMDAwMEIyQjgzODAwMDRDNEI0MDc4Cis6MTAyRjgwMDAwMjJCMTQ4MDAwMDAwMDAxMDYyQTI5QzgwMDAwMDAwNDVBCis6MTAyRjkwMDAwNDJBMjlEODAwMDIwMzRFMDYyQTIwODAwMDAwMDA0ODk3Cis6MTAyRkEwMDAwNjJBOTAyMDAwMDAwMEM4MDYyQTkwMDAwMDAwMDAwMkI3Cis6MTAyRkIwMDAwNjJBMjFBODAwMDAwMDg2MDYyQTIwMDAwMDAwMDAyMDIyCis6MTAyRkMwMDAwMjJBMjNDODAwMDAwMDAwMDQyQTIzRDAwMDAyMDM1MDc0Cis6MTAyRkQwMDAwNDJBMjQ5ODAwMDQwMzUyMDIyQTJDNTAwMDAwMDAwMDA2Cis6MTAyRkUwMDAwMjJBMkMxMDAwMDAwMDAwMDQyQTJDMDgwMDAyMDM1NkJDCis6MTAyRkYwMDAwNDJBMzAwMDAwMDIwMzU4MDYyQTMwMDgwMDAwMDEwMEFECis6MTAzMDAwMDAwNjJBNDA0MDAwMDAwMDEwMDQyQTQwMDAwMDEwMDM1QTI1Cis6MTAzMDEwMDAwNjJBNkFDMDAwMDAwMDAyMDYyQTZCMDAwMDAwMDAwNEI1Cis6MTAzMDIwMDAwNDJBODQwODAwMDIwMzZBMDIyQjA4MDAwMDAwMDAwMDQyCis6MTAzMDMwMDAwNDJCMEMwMDAwMTAwMzZDMDIyQjA4MDAwMTAwMDAwMEEwCis6MTAzMDQwMDAwNDJCMEM0MDAwMDgwMzdDMDIyQjA4MDAwMjAwMDAwMDQ3Cis6MTAzMDUwMDAwNDJCMEM2MDAwMDgwMzg0MDYyQUMwMDAwMDAwMDBEODdFCis6MTAzMDYwMDAwNjJBMjRBODAwMDAwMDE0MDYyQTI1NDgwMDAwMDAyNDhGCis6MTAzMDcwMDAwNjJBMjY2ODAwMDAwMDI0MDYyQTI3ODgwMDAwMDAyNDZCCis6MTAzMDgwMDAwNjJBMjhBODAwMDAwMDI0MDYyQUEwMDAwMDAwMDAyODI0Cis6MTAzMDkwMDAwNjJBQTE0MDAwMDAwMDBDMDQyQTI5RTAwMDAyMDM4QzRCCis6MTAzMEEwMDAwNjJBNTAyMDAwMDAwMDAyMDYyQTUwMzAwMDAwMDAwMkNDCis6MTAzMEIwMDAwNjJBNTAwMDAwMDAwMDAyMDYyQTUwMTAwMDAwMDAwMkZDCis6MTAzMEMwMDAwMjJBNTIwODAwMDAwMDAxMDQyQTZBQzgwMDAyMDM4RTg2Cis6MTAzMEQwMDAwNjJBNkIxMDAwMDAwMDQyMDYyQTZEMjAwMDAwMDAwNDQyCis6MTAzMEUwMDAwNjJBQkNEMDAwMDAwMDAyMDYyQUMzNjAwMDAwMDBEOEY3Cis6MTAzMEYwMDAwNjJBMjRGODAwMDAwMDE0MDYyQTI1RDgwMDAwMDAyNDFGCis6MTAzMTAwMDAwNjJBMjZGODAwMDAwMDI0MDYyQTI4MTgwMDAwMDAyNEI5Cis6MTAzMTEwMDAwNjJBMjkzODAwMDAwMDI0MDYyQUEwQTAwMDAwMDAyODYyCis6MTAzMTIwMDAwNjJBQTE3MDAwMDAwMDBDMDQyQTI5RTgwMDAyMDM5MDdFCis6MTAzMTMwMDAwNjJBNTAyODAwMDAwMDAyMDYyQTUwMzgwMDAwMDAwMjJCCis6MTAzMTQwMDAwNjJBNTAwODAwMDAwMDAyMDYyQTUwMTgwMDAwMDAwMjVCCis6MTAzMTUwMDAwMjJBNTIwQzAwMDAwMDAxMDQyQTZBRDAwMDAyMDM5MkU1Cis6MTAzMTYwMDAwNjJBNkMxODAwMDAwMDQyMDYyQTZEMzAwMDAwMDAwNDk4Cis6MTAzMTcwMDAwNjJBQkNEODAwMDAwMDAyMDIyQUM2QzAwMDAwMDAwMEQ3Cis6MTAzMTgwMDAwNDJBMjlGMDAwMTAwMzk0MDYyQTUwNDgwMDAwMDAwRTdCCis6MTAzMTkwMDAwNjJBQjAwMDAwMDAwMDA2MDIyQUM2QzQwMDAwMDAwMDkzCis6MTAzMUEwMDAwNDJBMkEzMDAwMTAwM0E0MDYyQTUwODAwMDAwMDAwRUQyCis6MTAzMUIwMDAwNjJBQjAxODAwMDAwMDA2MDIyQUM2QzgwMDAwMDAwMDU3Cis6MTAzMUMwMDAwNDJBMkE3MDAwMTAwM0I0MDYyQTUwQjgwMDAwMDAwRTJBCis6MTAzMUQwMDAwNjJBQjAzMDAwMDAwMDA2MDIyQUM2Q0MwMDAwMDAwMDFCCis6MTAzMUUwMDAwNDJBMkFCMDAwMTAwM0M0MDYyQTUwRjAwMDAwMDAwRTgyCis6MTAzMUYwMDAwNjJBQjA0ODAwMDAwMDA2MDIyQUM2RDAwMDAwMDAwMERGCis6MTAzMjAwMDAwNDJBMkFGMDAwMTAwM0Q0MDYyQTUxMjgwMDAwMDAwRUQ4Cis6MTAzMjEwMDAwNjJBQjA2MDAwMDAwMDA2MDIyQUM2RDQwMDAwMDAwMEEyCis6MTAzMjIwMDAwNDJBMkIzMDAwMTAwM0U0MDYyQTUxNjAwMDAwMDAwRTJGCis6MTAzMjMwMDAwNjJBQjA3ODAwMDAwMDA2MDIyQUM2RDgwMDAwMDAwMDY2Cis6MTAzMjQwMDAwNDJBMkI3MDAwMTAwM0Y0MDYyQTUxOTgwMDAwMDAwRTg3Cis6MTAzMjUwMDAwNjJBQjA5MDAwMDAwMDA2MDIyQUM2REMwMDAwMDAwMDJBCis6MTAzMjYwMDAwNDJBMkJCMDAwMTAwNDA0MDYyQTUxRDAwMDAwMDAwRURFCis6MTAzMjcwMDAwNjJBQjBBODAwMDAwMDA2MDIxMDEwMDgwMDAwMDAwMTk1Cis6MTAzMjgwMDAwMjEwMTA1MDAwMDAwMDAxMDIxMDEwMDAwMDAzRDAwMEQ2Cis6MTAzMjkwMDAwMjEwMTAwNDAwMDAwMDNEMDkxMDE4MDAwMjAwMDQxNDgwCis6MTAzMkEwMDAwOTEwMTEwMDAwMjgwNjE0MDYxMDExQTAwMDAwMDAxOEQzCis6MTAzMkIwMDAwNjEwMjQwMDAwMDAwMEUwMDIxMDIwMUMwMDAwMDAwMEE2Cis6MTAzMkMwMDAwMjEwMjAyMDAwMDAwMDAxMDIxMDIwQzAwMDAwMDAwMkI3Cis6MTAzMkQwMDAwMjEwMjAwNDAwMDAwMDAxMDIxMDIwMDgwMDAwMDAwMTdDCis6MTAzMkUwMDAwOTEwM0MwMDAwMDUwNjNDMDkxMDM4MDAwMDA1MDY0MUE1Cis6MTAzMkYwMDAwOTEwMzgyMDAwMDUwNjQ2MDYxMDRDMDAwMDAwMDEwMEE5Cis6MTAzMzAwMDAwMjEwNDAyODAwMDAwMDEwMDIxMDQwNDQwMDAwM0ZGRjVGCis6MTAzMzEwMDAwMjEwNDA1ODAwMjgwMDAwMDIxMDQwODQwMDg0OTI0QUE1Cis6MTAzMzIwMDAwMjEwNDA1ODAwMDAwMDAwMDIxMDgwMDAwMDAwMTA4MEQxCis6MTAzMzMwMDAwMjEwODBBQzAwMDAwMDAwMDIxMDgwMzgwMDAwMDAxMDc1Cis6MTAzMzQwMDAwMjEwODEwMDAwMDAwMDAwMDYxMDgxMjAwMDAwMDAwMjMxCis6MTAzMzUwMDAwMjEwODAwODAwMDAwMkI1MDIxMDgwMTAwMDAwMDAwMDdBCis6MTAzMzYwMDAwNjEwODIwMDAwMDAwMDRBMDIxMDgxMDgwMDAxRkZGRkUxCis6MTAzMzcwMDAwNjEwODE0MDAwMDAwMDAyMDIxMDgwMDAwMDAwMUE4MDQ4Cis6MTAzMzgwMDAwNjEwOTAwMDAwMDAwMDI0MDYxMDkxMjAwMDAwMDA0QTYyCis6MTAzMzkwMDAwNjEwOTM3MDAwMDAwMDRBMDYxMDk1QzAwMDAwMDA0QTE1Cis6MTAzM0EwMDAwMjEwODAwNDAwMDAxMDgwMDIxMDgwQjAwMDAwMDAwMUI0Cis6MTAzM0IwMDAwMjEwODAzQzAwMDAwMDEwMDIxMDgxMDQwMDAwMDAwMDk4Cis6MTAzM0MwMDAwNjEwODEyODAwMDAwMDAyMDIxMDgwMEMwMDAwMDJCNUU3Cis6MTAzM0QwMDAwMjEwODAxNDAwMDAwMDAwMDYxMDg0MDAwMDAwMDA0QTYzCis6MTAzM0UwMDAwMjEwODEwQzAwMDFGRkZGMDYxMDgxNDgwMDAwMDAwMjVFCis6MTAzM0YwMDAwMjEwODAwNDAwMDAxQTgwMDYxMDkwOTAwMDAwMDAyNDQzCis6MTAzNDAwMDAwNjEwOTI0ODAwMDAwMDRBMDYxMDk0OTgwMDAwMDA0QUY2Cis6MTAzNDEwMDAwNjEwOTZFODAwMDAwMDRBMDIxMDgwMDAwMDAwMTA4MEFDCis6MTAzNDIwMDAwMjEwODBBQzAwMDAwMDAyMDIxMDgwMzgwMDAwMDAxMDgyCis6MTAzNDMwMDAwMjEwODEwMDAwMDAwMDAwMDYxMDgxMjAwMDAwMDAwMjQwCis6MTAzNDQwMDAwMjEwODAwODAwMDAwMkI1MDIxMDgwMTAwMDAwMDAwMDg5Cis6MTAzNDUwMDAwNjEwODIwMDAwMDAwMDRBMDIxMDgxMDgwMDAxRkZGRkYwCis6MTAzNDYwMDAwNjEwODE0MDAwMDAwMDAyMDIxMDgwMDAwMDAwMUE4MDU3Cis6MTAzNDcwMDAwNjEwOTAwMDAwMDAwMDI0MDYxMDkxMjAwMDAwMDA0QTcxCis6MTAzNDgwMDAwNjEwOTM3MDAwMDAwMDRBMDYxMDk1QzAwMDAwMDA0QTI0Cis6MTAzNDkwMDAwMjEwODAwNDAwMDAxMDgwMDIxMDgwQjAwMDAwMDAwM0MxCis6MTAzNEEwMDAwMjEwODAzQzAwMDAwMDEwMDIxMDgxMDQwMDAwMDAwMEE3Cis6MTAzNEIwMDAwNjEwODEyODAwMDAwMDAyMDIxMDgwMEMwMDAwMDJCNUY2Cis6MTAzNEMwMDAwMjEwODAxNDAwMDAwMDAwMDYxMDg0MDAwMDAwMDA0QTcyCis6MTAzNEQwMDAwMjEwODEwQzAwMDFGRkZGMDYxMDgxNDgwMDAwMDAwMjZECis6MTAzNEUwMDAwMjEwODAwNDAwMDAxQTgwMDYxMDkwOTAwMDAwMDAyNDUyCis6MTAzNEYwMDAwNjEwOTI0ODAwMDAwMDRBMDYxMDk0OTgwMDAwMDA0QTA2Cis6MTAzNTAwMDAwNjEwOTZFODAwMDAwMDRBMDIxMDgwMDAwMDAwMTA4MEJCCis6MTAzNTEwMDAwMjEwODBBQzAwMDAwMDA0MDIxMDgwMzgwMDAwMDAxMDhGCis6MTAzNTIwMDAwMjEwODEwMDAwMDAwMDAwMDYxMDgxMjAwMDAwMDAwMjRGCis6MTAzNTMwMDAwMjEwODAwODAwMDAwMkI1MDIxMDgwMTAwMDAwMDAwMDk4Cis6MTAzNTQwMDAwNjEwODIwMDAwMDAwMDRBMDIxMDgxMDgwMDAxRkZGRkZGCis6MTAzNTUwMDAwNjEwODE0MDAwMDAwMDAyMDIxMDgwMDAwMDAwMUE4MDY2Cis6MTAzNTYwMDAwNjEwOTAwMDAwMDAwMDI0MDYxMDkxMjAwMDAwMDA0QTgwCis6MTAzNTcwMDAwNjEwOTM3MDAwMDAwMDRBMDYxMDk1QzAwMDAwMDA0QTMzCis6MTAzNTgwMDAwMjEwODAwNDAwMDAxMDgwMDIxMDgwQjAwMDAwMDAwNUNFCis6MTAzNTkwMDAwMjEwODAzQzAwMDAwMDEwMDIxMDgxMDQwMDAwMDAwMEI2Cis6MTAzNUEwMDAwNjEwODEyODAwMDAwMDAyMDIxMDgwMEMwMDAwMDJCNTA1Cis6MTAzNUIwMDAwMjEwODAxNDAwMDAwMDAwMDYxMDg0MDAwMDAwMDA0QTgxCis6MTAzNUMwMDAwMjEwODEwQzAwMDFGRkZGMDYxMDgxNDgwMDAwMDAwMjdDCis6MTAzNUQwMDAwMjEwODAwNDAwMDAxQTgwMDYxMDkwOTAwMDAwMDAyNDYxCis6MTAzNUUwMDAwNjEwOTI0ODAwMDAwMDRBMDYxMDk0OTgwMDAwMDA0QTE1Cis6MTAzNUYwMDAwNjEwOTZFODAwMDAwMDRBMDIxMDgwMDAwMDAwMTA4MENCCis6MTAzNjAwMDAwMjEwODBBQzAwMDAwMDA2MDIxMDgwMzgwMDAwMDAxMDlDCis6MTAzNjEwMDAwMjEwODEwMDAwMDAwMDAwMDYxMDgxMjAwMDAwMDAwMjVFCis6MTAzNjIwMDAwMjEwODAwODAwMDAwMkI1MDIxMDgwMTAwMDAwMDAwMEE3Cis6MTAzNjMwMDAwNjEwODIwMDAwMDAwMDRBMDIxMDgxMDgwMDAxRkZGRjBFCis6MTAzNjQwMDAwNjEwODE0MDAwMDAwMDAyMDIxMDgwMDAwMDAwMUE4MDc1Cis6MTAzNjUwMDAwNjEwOTAwMDAwMDAwMDI0MDYxMDkxMjAwMDAwMDA0QThGCis6MTAzNjYwMDAwNjEwOTM3MDAwMDAwMDRBMDYxMDk1QzAwMDAwMDA0QTQyCis6MTAzNjcwMDAwMjEwODAwNDAwMDAxMDgwMDIxMDgwQjAwMDAwMDAwN0RCCis6MTAzNjgwMDAwMjEwODAzQzAwMDAwMDEwMDIxMDgxMDQwMDAwMDAwMEM1Cis6MTAzNjkwMDAwNjEwODEyODAwMDAwMDAyMDIxMDgwMEMwMDAwMDJCNTE0Cis6MTAzNkEwMDAwMjEwODAxNDAwMDAwMDAwMDYxMDg0MDAwMDAwMDA0QTkwCis6MTAzNkIwMDAwMjEwODEwQzAwMDFGRkZGMDYxMDgxNDgwMDAwMDAwMjhCCis6MTAzNkMwMDAwMjEwODAwNDAwMDAxQTgwMDYxMDkwOTAwMDAwMDAyNDcwCis6MTAzNkQwMDAwNjEwOTI0ODAwMDAwMDRBMDYxMDk0OTgwMDAwMDA0QTI0Cis6MTAzNkUwMDAwNjEwOTZFODAwMDAwMDRBMDIxMjA1QjAwMDAwMDAwMTMyCis6MTAzNkYwMDAwMjEyMDQ5MDAwRTM4MzQwMDIxMjA1MTQwMDAwM0MxMDAzCis6MTAzNzAwMDAwMjEyMDY2QzAwMDAwMDAxMDIxMjA2NzAwMDAwMDAwMEE4Cis6MTAzNzEwMDAwMjEyMDQ5NEZGRkZGRkZGMDIxMjA0OThGRkZGRkZGRjU1Cis6MTAzNzIwMDAwMjEyMDQ5Q0ZGRkZGRkZGMDIxMjA0QTBGRkZGRkZGRjM1Cis6MTAzNzMwMDAwMjEyMDRBNEZGRkZGRkZGMDIxMjA0QThGRkZGRkZGRjE1Cis6MTAzNzQwMDAwMjEyMDRBQ0ZGRkZGRkZGMDIxMjA0QjBGRkZGRkZGRkY1Cis6MTAzNzUwMDAwMjEyMDRCQ0ZGRkZGRkZGMDIxMjA0QzBGRkZGRkZGRkM1Cis6MTAzNzYwMDAwMjEyMDRDNEZGRkZGRkZGMDIxMjA0QzhGRkZGRkZGRkE1Cis6MTAzNzcwMDAwMjEyMDRDQ0ZGRkZGRkZGMDIxMjA0RDBGRkZGRkZGRjg1Cis6MTAzNzgwMDAwMjEyMDREOEZGRkZGRkZGMDIxMjA0RENGRkZGRkZGRjVECis6MTAzNzkwMDAwMjEyMDRFMEZGRkZGRkZGMDIxMjA0RTRGRkZGRkZGRjNECis6MTAzN0EwMDAwMjEyMDRFOEZGRkZGRkZGMDIxMjA0RUNGRkZGRkZGRjFECis6MTAzN0IwMDAwMjEyMDRGMEZGRkZGRkZGMDIxMjA0RjRGRkZGRkZGRkZECis6MTAzN0MwMDAwMjEyMDRGOEZGRkZGRkZGMDIxMjA0RkNGRkZGRkZGRkRECis6MTAzN0QwMDAwMjEyMDUwMEZGRkZGRkZGMDIxMjA1MDRGRkZGRkZGRkJCCis6MTAzN0UwMDAwMjEyMDUwOEZGRkZGRkZGMDIxMjA1MENGRkZGRkZGRjlCCis6MTAzN0YwMDAwMjEyMDUxMEZGRkZGRkZGMDIxMjA0RDRGRjgwMjAwMDE5Cis6MTAzODAwMDAwMjEyMDRCNEYwMDA1MDAwMDIxMjA0QjhGMDAwMTAwMERDCis6MTAzODEwMDAwMjEyMDM5MDAwMDAwMDA4MDIxMjAzOUMwMDAwMDAwODNFCis6MTAzODIwMDAwMjEyMDNBMDAwMDAwMDA4MDIxMjAzQTQwMDAwMDAwMjFDCis6MTAzODMwMDAwMjEyMDNCQzAwMDAwMDA0MDIxMjAzQzAwMDAwMDAwNUQ1Cis6MTAzODQwMDAwMjEyMDNDNDAwMDAwMDA0MDIxMjAzRDAwMDAwMDAwMEIyCis6MTAzODUwMDAwMjEyMDM2QzAwMDAwMDAxMDIxMjAzNjgwMDAwMDAzRjI2Cis6MTAzODYwMDAwMjEyMDFCQzAwMDAwMDQwMDIxMjAxQzAwMDAwMTgwODUyCis6MTAzODcwMDAwMjEyMDFDNDAwMDAwODAzMDIxMjAxQzgwMDAwMDgwMzdDCis6MTAzODgwMDAwMjEyMDFDQzAwMDAwMDQwMDIxMjAxRDAwMDAwMDAwMzJGCis6MTAzODkwMDAwMjEyMDFENDAwMDAwODAzMDIxMjAxRDgwMDAwMDgwMzNDCis6MTAzOEEwMDAwMjEyMDFEQzAwMDAwODAzMDIxMjAxRTAwMDAxMDAwMzIzCis6MTAzOEIwMDAwMjEyMDFFNDAwMDAwODAzMDIxMjAxRTgwMDAwMDgwM0ZDCis6MTAzOEMwMDAwMjEyMDFFQzAwMDAwMDAzMDIxMjAxRjAwMDAwMDAwM0VDCis6MTAzOEQwMDAwMjEyMDFGNDAwMDAwMDAzMDIxMjAxRjgwMDAwMDAwM0NDCis6MTAzOEUwMDAwMjEyMDFGQzAwMDAwMDAzMDIxMjAyMDAwMDAwMDAwM0FCCis6MTAzOEYwMDAwMjEyMDIwNDAwMDAwMDAzMDIxMjAyMDgwMDAwMDAwMzhBCis6MTAzOTAwMDAwMjEyMDIwQzAwMDAwMDAzMDIxMjAyMTAwMDAwMDAwMzY5Cis6MTAzOTEwMDAwMjEyMDIxNDAwMDAwMDAzMDIxMjAyMTgwMDAwMDAwMzQ5Cis6MTAzOTIwMDAwMjEyMDIxQzAwMDAwMDAzMDIxMjAyMjAwMDAwMDAwMzI5Cis6MTAzOTMwMDAwMjEyMDIyNDAwMDAwMDAzMDIxMjAyMjgwMDAwMjQwM0U1Cis6MTAzOTQwMDAwMjEyMDIyQzAwMDAwMDJGMDIxMjAyMzAwMDAwMDAwOUI3Cis6MTAzOTUwMDAwMjEyMDIzNDAwMDAwMDE5MDIxMjAyMzgwMDAwMDE4NDMxCis6MTAzOTYwMDAwMjEyMDIzQzAwMDAwMTgzMDIxMjAyNDAwMDAwMDMwNjIyCis6MTAzOTcwMDAwMjEyMDI0NDAwMDAwMDE5MDIxMjAyNDgwMDAwMDAwNjcwCis6MTAzOTgwMDAwMjEyMDI0QzAwMDAwMzA2MDIxMjAyNTAwMDAwMDMwNjVECis6MTAzOTkwMDAwMjEyMDI1NDAwMDAwMzA2MDIxMjAyNTgwMDAwMEM4NkI0Cis6MTAzOUEwMDAwMjEyMDI1QzAwMDAwMzA2MDIxMjAyNjAwMDAwMDMwNjFECis6MTAzOUIwMDAwMjEyMDI2NDAwMDAwMDA2MDIxMjAyNjgwMDAwMDAwNjAzCis6MTAzOUMwMDAwMjEyMDI2QzAwMDAwMDA2MDIxMjAyNzAwMDAwMDAwNkUzCis6MTAzOUQwMDAwMjEyMDI3NDAwMDAwMDA2MDIxMjAyNzgwMDAwMDAwNkMzCis6MTAzOUUwMDAwMjEyMDI3QzAwMDAwMDA2MDIxMjAyODAwMDAwMDAwNkEzCis6MTAzOUYwMDAwMjEyMDI4NDAwMDAwMDA2MDIxMjAyODgwMDAwMDAwNjgzCis6MTAzQTAwMDAwMjEyMDI4QzAwMDAwMDA2MDIxMjAyOTAwMDAwMDAwNjYyCis6MTAzQTEwMDAwMjEyMDI5NDAwMDAwMDA2MDIxMjAyOTgwMDAwMDAwNjQyCis6MTAzQTIwMDAwMjEyMDI5QzAwMDAwMDA2MDIxMjAyQTAwMDAwMDMwNjFGCis6MTAzQTMwMDAwMjEyMDJBNDAwMDAwMDEzMDIxMjAyQTgwMDAwMDAwNkY1Cis6MTAzQTQwMDAwMjEyMDJCMDAwMDAxMDA0MDIxMjAyQjQwMDAwMTAwNEJFCis6MTAzQTUwMDAwMjEyMDMyNDAwMTA2NDQwMDIxMjAzMjgwMDEwNjQ0MDg0Cis6MTAzQTYwMDAwMjEyMDVCNDAwMDAwMDAxMDIxMjAxQjAwMDAwMDAwMUMyCis6MTAzQTcwMDAwNjAwQTAwMDAwMDAwMDE2MDIwMEEwRUM1NTU0MDAwMDUzCis6MTAzQTgwMDAwMjAwQTBGMDU1NTU1NTU1MDIwMEEwRjQwMDAwNTU1NTEwCis6MTAzQTkwMDAwMjAwQTBGOEYwMDAwMDAwMDIwMEEwRkM1NTU0MDAwMDU1Cis6MTAzQUEwMDAwMjAwQTEwMDU1NTU1NTU1MDIwMEExMDQwMDAwNTU1NUNFCis6MTAzQUIwMDAwMjAwQTEwOEYwMDAwMDAwMDIwMEExOEM1NTU0MDAwMDkzCis6MTAzQUMwMDAwMjAwQTE5MDU1NTU1NTU1MDIwMEExOTQwMDAwNTU1NThFCis6MTAzQUQwMDAwMjAwQTE5OEYwMDAwMDAwMDIwMEExOUMwMDAwMDAwMDdDCis6MTAzQUUwMDAwMjAwQTFBMDAwMDEwMDAwMDIwMEExQTQwMDAwNTAxNEU3Cis6MTAzQUYwMDAwMjAwQTFBODAwMDAwMDAwMDIwMEE0NUMwMDAwMEMwMDZECis6MTAzQjAwMDAwMjAwQTYxQzAwMDAwMDAzMDIwMEEwNkNGRjVDMDAwMDg1Cis6MTAzQjEwMDAwMjAwQTA3MEZGRjU1RkZGMDIwMEEwNzQwMDAwRkZGRjJECis6MTAzQjIwMDAwMjAwQTA3OEYwMDAwM0UwMDIwMEEwN0MwMDAwMDAwMDhBCis6MTAzQjMwMDAwMjAwQTA4MDAwMDBBMDAwMDYwMEEwODQwMDAwMDAwNTk0Cis6MTAzQjQwMDAwMjAwQTA5ODBGRTAwMDAwMDYwMEEwOUMwMDAwMDAwNzAzCis6MTAzQjUwMDAwMjAwQTBCODAwMDAwNDAwMDYwMEEwQkMwMDAwMDAwM0EyCis6MTAzQjYwMDAwMjAwQTBDODAwMDAxMDAwMDYwMEEwQ0MwMDAwMDAwMzY2Cis6MTAzQjcwMDAwMjAwQTBEODAwMDA0MDAwMDYwMEEwREMwMDAwMDAwMzA2Cis6MTAzQjgwMDAwMjAwQTBFODAwMDEwMDAwMDYwMEEyMkMwMDAwMDAwNEQyCis6MTAzQjkwMDAwMjAwQTEwQ0ZGNUMwMDAwMDIwMEExMTBGRkY1NUZGRjE2Cis6MTAzQkEwMDAwMjAwQTExNDAwMDBGRkZGMDIwMEExMThGMDAwMDNFMEQyCis6MTAzQkIwMDAwMjAwQTExQzAwMDAwMDAwMDIwMEExMjAwMDAwQTAwMEUzCis6MTAzQkMwMDAwNjAwQTEyNDAwMDAwMDA1MDIwMEExMzgwRkUwMDAwMDVCCis6MTAzQkQwMDAwNjAwQTEzQzAwMDAwMDA3MDIwMEExNTgwMDAwMDgwMEY4Cis6MTAzQkUwMDAwNjAwQTE1QzAwMDAwMDAzMDIwMEExNjgwMDAwMjAwMEE0Cis6MTAzQkYwMDAwNjAwQTE2QzAwMDAwMDAzMDIwMEExNzgwMDAwODAwMDE0Cis6MTAzQzAwMDAwNjAwQTE3QzAwMDAwMDAzMDIwMEExODgwMDAyMDAwMDYxCis6MTAzQzEwMDAwNjAwQTIzQzAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMEJDCis6MTAzQzIwMDAwMDAwMDAzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTAzQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTAzQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxMDAzMjExCis6MTAzQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTAzQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTAzQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMjAwNTYwMDAwMDAwMEJDCis6MTAzQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTAzQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTAzQ0EwMDAwMDAwMDAwMDAwNTYwMDhDMDAwMDAwMDAwMDAwMDAwMDMyCis6MTAzQ0IwMDAwMDhDMDA5MDAwOTAwMDk0MDA5NDAwOTgwMDk4MDA5QzY0Cis6MTAzQ0MwMDAwMDlDMDBBMDAwQTAwMEE0MDBBNDAwQTgwMEE4MDBBQ0Q0Cis6MTAzQ0QwMDAwMEFDMDBCMTAwQjEwMEIzMDBCMzAwQjUwMDAwMDAwMEJCCis6MTAzQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTAzQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1MDEwMjBDCis6MTAzRDAwMDAwMTAyMDEwQTAxMEEwMTEyMDExMjAxMUIwMTFCMDEyNDE3Cis6MTAzRDEwMDAwMTI0MDEyRDAxMkQwMTM2MDEzNjAxM0YwMTNGMDE0OEVCCis6MTAzRDIwMDAwMTQ4MDE1MTAxNTEwMTVBMDAwMDAwMDAwMDAwMDAwMDRCCis6MTAzRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTAzRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTAzRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTAzRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTAzRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTAzRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTAzRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTAzREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTAzREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTAzREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTAzREQwMDAwMDAwMDAwMDAwMDAwMDAwMDE1QTAxNUYwMDAwMDAwMDI4Cis6MTAzREUwMDAwMDAwMDAwMDAxNUYwMTYwMDE2MDAxNjEwMTYxMDE2MjhBCis6MTAzREYwMDAwMTYyMDE2MzAxNjMwMTY0MDE2NDAxNjUwMTY1MDE2NjlCCis6MTAzRTAwMDAwMTY2MDE2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTAzRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTAzRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTAzRTMwMDAwMTY3MDE2QzAxNkMwMTc5MDE3OTAxODYwMDAwMDAwMEM1Cis6MTAzRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTAzRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTAzRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTAzRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTAzRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDE4NjAxODcwMDAwMDAwMDIzCis6MTAzRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTAzRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTAzRUIwMDAwMDAwMDAwMDAxODcwMUJFMDAwMDAwMDAwMDAwMDAwMEJCCis6MTAzRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTAzRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAzRUUwMDAwMUJFMDFFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTAzRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTAzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUU5MDIxQUFCCis6MTAzRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDIxQTAyMjEwMjIxMDIyODE1Cis6MTAzRjIwMDAwMjI4MDIyRjAyMkYwMjM2MDIzNjAyM0QwMjNEMDI0NEQxCis6MTAzRjMwMDAwMjQ0MDI0QjAyNEIwMjUyMDI1MjAyOEEwMDAwMDAwMDZECis6MTAzRjQwMDAwMDAwMDAwMDAyOEEwMjhFMDI4RTAyOTIwMjkyMDI5NjA1Cis6MTAzRjUwMDAwMjk2MDI5QTAyOUEwMjlFMDI5RTAyQTIwMkEyMDJBNjYxCis6MTAzRjYwMDAwMkE2MDJBQTAyQUEwMkZDMDJGQzAzMTMwMzEzMDMyQUZDCis6MTAzRjcwMDAwMzJBMDMyRDAzMkQwMzMwMDMzMDAzMzMwMzMzMDMzNkE5Cis6MTAzRjgwMDAwMzM2MDMzOTAzMzkwMzNDMDMzQzAzM0YwMzNGMDM0MjM5Cis6MTAzRjkwMDAwMzQyMDM4MzAzODMwMzhBMDM4QTAzOTEwMzkxMDM5NUY2Cis6MTAzRkEwMDAwMzk1MDM5OTAzOTkwMzlEMDM5RDAzQTEwM0ExMDNBNTExCis6MTAzRkIwMDAwM0E1MDNBOTAzQTkwM0FEMDNBRDAzQjEwM0IxMDNCMjg0Cis6MTAzRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTAzRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTAzRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDNCMjAzQzQwMDAwMDAwMDU1Cis6MTAzRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTA0MDEwMDAwMDAwMDAwMDAzQzQwM0Q5MDNEOTAzREMwM0RDMDNERjgxCis6MTA0MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTA0MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTA0MDQwMDAwM0RGMDQwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTA0MDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTA0MDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDBDMDUwRjJDCis6MTA0MDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTA0MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTA0MDkwMDAwMDAwMDAwMDAwMDAwMDAwMDUwRjA1MTYwNTE2MDUxQUI3Cis6MTA0MEEwMDAwNTFBMDUxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTA0MEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTA0MEMwMDAwMDAwMDAwMDA1MUUwNTVFMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA0MEQwMDAwNTVFMDU2NzA1NjcwNTcwMDU3MDA1NzkwNTc5MDU4MjM4Cis6MTA0MEUwMDAwNTgyMDU4QjA1OEIwNTk0MDU5NDA1OUQwNTlEMDVBNjA4Cis6MTA0MEYwMDAwNUE2MDVGRjA1RkYwNjExMDYxMTA2MjMwNjIzMDYyNzYwCis6MTA0MTAwMDAwNjI3MDYyQjA2MkIwNjJGMDYyRjA2MzMwNjMzMDYzNzA3Cis6MTA0MTEwMDAwNjM3MDYzQjA2M0IwNjNGMDYzRjA2NDMwNjQzMDY0QTc0Cis6MTA0MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTA0MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTA0MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDY0QTA2NTAwMDAwMDAwMEM5Cis6MTA0MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTA0MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTA0MTcwMDAwMDAwMDAwMDA2NTAwNjUzMDAwMDAwMDAwMDAwMDAwMDkwCis6MTA0MTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTA0MTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTA0MUEwMDAwNjUzMDY1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTA0MUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTA0MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTA0MUQwMDAwMDAwMDAwMDAwMDAwMDAwMDY1OTA2NjgwNjY4MDY3NzI3Cis6MTA0MUUwMDAwNjc3MDY4NjA2ODYwNjk1MDY5NTA2QTQwNkE0MDZCM0Y3Cis6MTA0MUYwMDAwNkIzMDZDMjA2QzIwNkQxMDZEMTA3NDIwMDAwMDAwMDdGCis6MTA0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTA0MjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTA0MjIwMDAwMDAwMDAwMDA3NDIwNzU1MDc1NTA3NjYwNzY2MDc3NzM1Cis6MTA0MjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTA0MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTA0MjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTA0MjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTA0MjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTA0MjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTA0MjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTA0MkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTA0MkIwMDAwMDAxMDAwMDAwMDIwNEMwMDAwMzA5ODAwMDA0MEU0MDU5Cis6MTA0MkMwMDAwMDA1MTMwMDAwMDYxN0MwMDAwNzFDODAwMDA4MjE0MEVECis6MTA0MkQwMDAwMDA5MjYwMDAwMEEyQUMwMDAwQjJGODAwMDBDMzQ0MDgxCis6MTA0MkUwMDAwMDBEMzkwMDAwMEUzREMwMDAwRjQyODAwMDEwNDc0MDE1Cis6MTA0MkYwMDAwMDExNEMwMDAwMTI1MEMwMDAxMzU1ODAwMDE0NUE0MEE5Cis6MTA0MzAwMDAwMDE1NUYwMDAwMTY2M0MwMDAxNzY4ODAwMDE4NkQ0MDNDCis6MTA0MzEwMDAwMDE5NzIwMDAwMUE3NkMwMDAxQjdCODAwMDFDODA0MEQwCis6MTA0MzIwMDAwMDFEODUwMDAwMUU4OUMwMDAxRjhFODAwMDIwOTM0MDY0Cis6MTA0MzMwMDAwMDAwMjAwMDAwMDA0MDAwMDAwMDYwMDAwMDAwODAwMDNECis6MTA0MzQwMDAwMDAwQTAwMDAwMDBDMDAwMDAwMEUwMDAwMDAxMDAwMDJDCis6MTA0MzUwMDAwMDAxMjAwMDAwMDE0MDAwMDAwMTYwMDAwMDAxODAwMDE5Cis6MTA0MzYwMDAwMDAxQTAwMDAwMDFDMDAwMDAwMUUwMDAwMDAyMDAwMDA4Cis6MTA0MzcwMDAwMDAyMjAwMDAwMDI0MDAwMDAwMjYwMDAwMDAyODAwMEY1Cis6MTA0MzgwMDAwMDAyQTAwMDAwMDJDMDAwMDAwMkUwMDAwMDAzMDAwMEU0Cis6MTA0MzkwMDAwMDAzMjAwMDAwMDM0MDAwMDAwMzYwMDAwMDAzODAwMEQxCis6MTA0M0EwMDAwMDAzQTAwMDAwMDNDMDAwMDAwM0UwMDAwMDA0MDAwMEMwCis6MTA0M0IwMDAwMDA0MjAwMDAwMDQ0MDAwMDAwNDYwMDAwMDA0ODAwMEFECis6MTA0M0MwMDAwMDA0QTAwMDAwMDRDMDAwMDAwNEUwMDAwMDA1MDAwMDlDCis6MTA0M0QwMDAwMDA1MjAwMDAwMDU0MDAwMDAwNTYwMDAwMDA1ODAwMDg5Cis6MTA0M0UwMDAwMDA1QTAwMDAwMDVDMDAwMDAwNUUwMDAwMDA2MDAwMDc4Cis6MTA0M0YwMDAwMDA2MjAwMDAwMDY0MDAwMDAwNjYwMDAwMDA2ODAwMDY1Cis6MTA0NDAwMDAwMDA2QTAwMDAwMDZDMDAwMDAwNkUwMDAwMDA3MDAwMDUzCis6MTA0NDEwMDAwMDA3MjAwMDAwMDc0MDAwMDAwNzYwMDAwMDA3ODAwMDQwCis6MTA0NDIwMDAwMDA3QTAwMDAwMDdDMDAwMDAwN0UwMDAwMDA4MDAwMDJGCis6MTA0NDMwMDAwMDA4MjAwMDAwMDg0MDAwMDAwODYwMDAwMDA4ODAwMDFDCis6MTA0NDQwMDAwMDA4QTAwMDAwMDhDMDAwMDAwOEUwMDAwMDA5MDAwMDBCCis6MTA0NDUwMDAwMDA5MjAwMDAwMDk0MDAwMDAwOTYwMDAwMDA5ODAwMEY4Cis6MTA0NDYwMDAwMDA5QTAwMDAwMDlDMDAwMDAwOUUwMDAwMDBBMDAwMEU3Cis6MTA0NDcwMDAwMDBBMjAwMDAwMEE0MDAwMDAwQTYwMDAwMDBBODAwMEQ0Cis6MTA0NDgwMDAwMDBBQTAwMDAwMEFDMDAwMDAwQUUwMDAwMDBCMDAwMEMzCis6MTA0NDkwMDAwMDBCMjAwMDAwMEI0MDAwMDAwQjYwMDAwMDBCODAwMEIwCis6MTA0NEEwMDAwMDBCQTAwMDAwMEJDMDAwMDAwQkUwMDAwMDBDMDAwMDlGCis6MTA0NEIwMDAwMDBDMjAwMDAwMEM0MDAwMDAwQzYwMDAwMDBDODAwMDhDCis6MTA0NEMwMDAwMDBDQTAwMDAwMENDMDAwMDAwQ0UwMDAwMDBEMDAwMDdCCis6MTA0NEQwMDAwMDBEMjAwMDAwMEQ0MDAwMDAwRDYwMDAwMDBEODAwMDY4Cis6MTA0NEUwMDAwMDBEQTAwMDAwMERDMDAwMDAwREUwMDAwMDBFMDAwMDU3Cis6MTA0NEYwMDAwMDBFMjAwMDAwMEU0MDAwMDAwRTYwMDAwMDBFODAwMDQ0Cis6MTA0NTAwMDAwMDBFQTAwMDAwMEVDMDAwMDAwRUUwMDAwMDBGMDAwMDMyCis6MTA0NTEwMDAwMDBGMjAwMDAwMEY0MDAwMDAwRjYwMDAwMDBGODAwMDFGCis6MTA0NTIwMDAwMDBGQTAwMDAwMEZDMDAwMDAwRkUwMDAwMDEwMDAwMDBFCis6MTA0NTMwMDAwMDEwMjAwMDAwMTA0MDAwMDAxMDYwMDAwMDEwODAwMEZCCis6MTA0NTQwMDAwMDEwQTAwMDAwMTBDMDAwMDAxMEUwMDAwMDExMDAwMEVBCis6MTA0NTUwMDAwMDExMjAwMDAwMTE0MDAwMDAxMTYwMDAwMDExODAwMEQ3Cis6MTA0NTYwMDAwMDExQTAwMDAwMTFDMDAwMDAxMUUwMDAwMDEyMDAwMEM2Cis6MTA0NTcwMDAwMDEyMjAwMDAwMTI0MDAwMDAxMjYwMDAwMDEyODAwMEIzCis6MTA0NTgwMDAwMDEyQTAwMDAwMTJDMDAwMDAxMkUwMDAwMDEzMDAwMEEyCis6MTA0NTkwMDAwMDEzMjAwMDAwMTM0MDAwMDAxMzYwMDAwMDEzODAwMDhGCis6MTA0NUEwMDAwMDEzQTAwMDAwMTNDMDAwMDAxM0UwMDAwMDE0MDAwMDdFCis6MTA0NUIwMDAwMDE0MjAwMDAwMTQ0MDAwMDAxNDYwMDAwMDE0ODAwMDZCCis6MTA0NUMwMDAwMDE0QTAwMDAwMTRDMDAwMDAxNEUwMDAwMDE1MDAwMDVBCis6MTA0NUQwMDAwMDE1MjAwMDAwMTU0MDAwMDAxNTYwMDAwMDE1ODAwMDQ3Cis6MTA0NUUwMDAwMDE1QTAwMDAwMTVDMDAwMDAxNUUwMDAwMDE2MDAwMDM2Cis6MTA0NUYwMDAwMDE2MjAwMDAwMTY0MDAwMDAxNjYwMDAwMDE2ODAwMDIzCis6MTA0NjAwMDAwMDE2QTAwMDAwMTZDMDAwMDAxNkUwMDAwMDE3MDAwMDExCis6MTA0NjEwMDAwMDE3MjAwMDAwMTc0MDAwMDAxNzYwMDAwMDE3ODAwMEZFCis6MTA0NjIwMDAwMDE3QTAwMDAwMTdDMDAwMDAxN0UwMDAwMDE4MDAwMEVECis6MTA0NjMwMDAwMDE4MjAwMDAwMTg0MDAwMDAxODYwMDAwMDE4ODAwMERBCis6MTA0NjQwMDAwMDE4QTAwMDAwMThDMDAwMDAxOEUwMDAwMDE5MDAwMEM5Cis6MTA0NjUwMDAwMDE5MjAwMDAwMTk0MDAwMDAxOTYwMDAwMDE5ODAwMEI2Cis6MTA0NjYwMDAwMDE5QTAwMDAwMTlDMDAwMDAxOUUwMDAwMDFBMDAwMEE1Cis6MTA0NjcwMDAwMDFBMjAwMDAwMUE0MDAwMDAxQTYwMDAwMDFBODAwMDkyCis6MTA0NjgwMDAwMDFBQTAwMDAwMUFDMDAwMDAxQUUwMDAwMDFCMDAwMDgxCis6MTA0NjkwMDAwMDFCMjAwMDAwMUI0MDAwMDAxQjYwMDAwMDFCODAwMDZFCis6MTA0NkEwMDAwMDFCQTAwMDAwMUJDMDAwMDAxQkUwMDAwMDFDMDAwMDVECis6MTA0NkIwMDAwMDFDMjAwMDAwMUM0MDAwMDAxQzYwMDAwMDFDODAwMDRBCis6MTA0NkMwMDAwMDFDQTAwMDAwMUNDMDAwMDAxQ0UwMDAwMDFEMDAwMDM5Cis6MTA0NkQwMDAwMDFEMjAwMDAwMUQ0MDAwMDAxRDYwMDAwMDFEODAwMDI2Cis6MTA0NkUwMDAwMDFEQTAwMDAwMURDMDAwMDAxREUwMDAwMDFFMDAwMDE1Cis6MTA0NkYwMDAwMDFFMjAwMDAwMUU0MDAwMDAxRTYwMDAwMDFFODAwMDAyCis6MTA0NzAwMDAwMDFFQTAwMDAwMUVDMDAwMDAxRUUwMDAwMDFGMDAwMEYwCis6MTA0NzEwMDAwMDFGMjAwMDAwMUY0MDAwMDAxRjYwMDAwMDFGODAwMERECis6MTA0NzIwMDAwMDFGQTAwMDAwMUZDMDAwMDAxRkUwMDAwMDIwMDAwMENDCis6MTA0NzMwMDAwMDIwMjAwMDAwMjA0MDAwMDAyMDYwMDAwMDIwODAwMEI5Cis6MTA0NzQwMDAwMDIwQTAwMDAwMjBDMDAwMDAyMEUwMDAwMDIxMDAwMEE4Cis6MTA0NzUwMDAwMDIxMjAwMDAwMjE0MDAwMDAyMTYwMDAwMDIxODAwMDk1Cis6MTA0NzYwMDAwMDIxQTAwMDAwMjFDMDAwMDAyMUUwMDAwMDIyMDAwMDg0Cis6MTA0NzcwMDAwMDIyMjAwMDAwMjI0MDAwMDAyMjYwMDAwMDIyODAwMDcxCis6MTA0NzgwMDAwMDIyQTAwMDAwMjJDMDAwMDAyMkUwMDAwMDIzMDAwMDYwCis6MTA0NzkwMDAwMDIzMjAwMDAwMjM0MDAwMDAyMzYwMDAwMDIzODAwMDRECis6MTA0N0EwMDAwMDIzQTAwMDAwMjNDMDAwMDAyM0UwMDAwMDI0MDAwMDNDCis6MTA0N0IwMDAwMDI0MjAwMDAwMjQ0MDAwMDAyNDYwMDAwMDI0ODAwMDI5Cis6MTA0N0MwMDAwMDI0QTAwMDAwMjRDMDAwMDAyNEUwMDAwMDI1MDAwMDE4Cis6MTA0N0QwMDAwMDI1MjAwMDAwMjU0MDAwMDAyNTYwMDAwMDI1ODAwMDA1Cis6MTA0N0UwMDAwMDI1QTAwMDAwMjVDMDAwMDAyNUUwMDAwMDI2MDAwMEY0Cis6MTA0N0YwMDAwMDI2MjAwMDAwMjY0MDAwMDAyNjYwMDAwMDI2ODAwMEUxCis6MTA0ODAwMDAwMDI2QTAwMDAwMjZDMDAwMDAyNkUwMDAwMDI3MDAwMENGCis6MTA0ODEwMDAwMDI3MjAwMDAwMjc0MDAwMDAyNzYwMDAwMDI3ODAwMEJDCis6MTA0ODIwMDAwMDI3QTAwMDAwMjdDMDAwMDAyN0UwMDAwMDI4MDAwMEFCCis6MTA0ODMwMDAwMDI4MjAwMDAwMjg0MDAwMDAyODYwMDAwMDI4ODAwMDk4Cis6MTA0ODQwMDAwMDI4QTAwMDAwMjhDMDAwMDAyOEUwMDAwMDI5MDAwMDg3Cis6MTA0ODUwMDAwMDI5MjAwMDAwMjk0MDAwMDAyOTYwMDAwMDI5ODAwMDc0Cis6MTA0ODYwMDAwMDI5QTAwMDAwMjlDMDAwMDAyOUUwMDAwMDJBMDAwMDYzCis6MTA0ODcwMDAwMDJBMjAwMDAwMkE0MDAwMDAyQTYwMDAwMDJBODAwMDUwCis6MTA0ODgwMDAwMDJBQTAwMDAwMkFDMDAwMDAyQUUwMDAwMDJCMDAwMDNGCis6MTA0ODkwMDAwMDJCMjAwMDAwMkI0MDAwMDAyQjYwMDAwMDJCODAwMDJDCis6MTA0OEEwMDAwMDJCQTAwMDAwMkJDMDAwMDAyQkUwMDAwMDJDMDAwMDFCCis6MTA0OEIwMDAwMDJDMjAwMDAwMkM0MDAwMDAyQzYwMDAwMDJDODAwMDA4Cis6MTA0OEMwMDAwMDJDQTAwMDAwMkNDMDAwMDAyQ0UwMDAwMDJEMDAwMEY3Cis6MTA0OEQwMDAwMDJEMjAwMDAwMkQ0MDAwMDAyRDYwMDAwMDJEODAwMEU0Cis6MTA0OEUwMDAwMDJEQTAwMDAwMkRDMDAwMDAyREUwMDAwMDJFMDAwMEQzCis6MTA0OEYwMDAwMDJFMjAwMDAwMkU0MDAwMDAyRTYwMDAwMDJFODAwMEMwCis6MTA0OTAwMDAwMDJFQTAwMDAwMkVDMDAwMDAyRUUwMDAwMDJGMDAwMEFFCis6MTA0OTEwMDAwMDJGMjAwMDAwMkY0MDAwMDAyRjYwMDAwMDJGODAwMDlCCis6MTA0OTIwMDAwMDJGQTAwMDAwMkZDMDAwMDAyRkUwMDAwMDMwMDAwMDhBCis6MTA0OTMwMDAwMDMwMjAwMDAwMzA0MDAwMDAzMDYwMDAwMDMwODAwMDc3Cis6MTA0OTQwMDAwMDMwQTAwMDAwMzBDMDAwMDAzMEUwMDAwMDMxMDAwMDY2Cis6MTA0OTUwMDAwMDMxMjAwMDAwMzE0MDAwMDAzMTYwMDAwMDMxODAwMDUzCis6MTA0OTYwMDAwMDMxQTAwMDAwMzFDMDAwMDAzMUUwMDAwMDMyMDAwMDQyCis6MTA0OTcwMDAwMDMyMjAwMDAwMzI0MDAwMDAzMjYwMDAwMDMyODAwMDJGCis6MTA0OTgwMDAwMDMyQTAwMDAwMzJDMDAwMDAzMkUwMDAwMDMzMDAwMDFFCis6MTA0OTkwMDAwMDMzMjAwMDAwMzM0MDAwMDAzMzYwMDAwMDMzODAwMDBCCis6MTA0OUEwMDAwMDMzQTAwMDAwMzNDMDAwMDAzM0UwMDAwMDM0MDAwMEZBCis6MTA0OUIwMDAwMDM0MjAwMDAwMzQ0MDAwMDAzNDYwMDAwMDM0ODAwMEU3Cis6MTA0OUMwMDAwMDM0QTAwMDAwMzRDMDAwMDAzNEUwMDAwMDM1MDAwMEQ2Cis6MTA0OUQwMDAwMDM1MjAwMDAwMzU0MDAwMDAzNTYwMDAwMDM1ODAwMEMzCis6MTA0OUUwMDAwMDM1QTAwMDAwMzVDMDAwMDAzNUUwMDAwMDM2MDAwMEIyCis6MTA0OUYwMDAwMDM2MjAwMDAwMzY0MDAwMDAzNjYwMDAwMDM2ODAwMDlGCis6MTA0QTAwMDAwMDM2QTAwMDAwMzZDMDAwMDAzNkUwMDAwMDM3MDAwMDhECis6MTA0QTEwMDAwMDM3MjAwMDAwMzc0MDAwMDAzNzYwMDAwMDM3ODAwMDdBCis6MTA0QTIwMDAwMDM3QTAwMDAwMzdDMDAwMDAzN0UwMDAwMDM4MDAwMDY5Cis6MTA0QTMwMDAwMDM4MjAwMDAwMzg0MDAwMDAzODYwMDAwMDM4ODAwMDU2Cis6MTA0QTQwMDAwMDM4QTAwMDAwMzhDMDAwMDAzOEUwMDAwMDM5MDAwMDQ1Cis6MTA0QTUwMDAwMDM5MjAwMDAwMzk0MDAwMDAzOTYwMDAwMDM5ODAwMDMyCis6MTA0QTYwMDAwMDM5QTAwMDAwMzlDMDAwMDAzOUUwMDAwMDNBMDAwMDIxCis6MTA0QTcwMDAwMDNBMjAwMDAwM0E0MDAwMDAzQTYwMDAwMDNBODAwMDBFCis6MTA0QTgwMDAwMDNBQTAwMDAwM0FDMDAwMDAzQUUwMDAwMDNCMDAwMEZECis6MTA0QTkwMDAwMDNCMjAwMDAwM0I0MDAwMDAzQjYwMDAwMDNCODAwMEVBCis6MTA0QUEwMDAwMDNCQTAwMDAwM0JDMDAwMDAzQkUwMDAwMDNDMDAwMEQ5Cis6MTA0QUIwMDAwMDNDMjAwMDAwM0M0MDAwMDAzQzYwMDAwMDNDODAwMEM2Cis6MTA0QUMwMDAwMDNDQTAwMDAwM0NDMDAwMDAzQ0UwMDAwMDNEMDAwMEI1Cis6MTA0QUQwMDAwMDNEMjAwMDAwM0Q0MDAwMDAzRDYwMDAwMDNEODAwMEEyCis6MTA0QUUwMDAwMDNEQTAwMDAwM0RDMDAwMDAzREUwMDAwMDNFMDAwMDkxCis6MTA0QUYwMDAwMDNFMjAwMDAwM0U0MDAwMDAzRTYwMDAwMDNFODAwMDdFCis6MTA0QjAwMDAwMDNFQTAwMDAwM0VDMDAwMDAzRUUwMDAwMDNGMDAwMDZDCis6MTA0QjEwMDAwMDNGMjAwMDAwM0Y0MDAwMDAzRjYwMDAwMDNGODAwMDU5Cis6MTA0QjIwMDAwMDNGQTAwMDAwM0ZDMDAwMDAzRkUwMDAwMDNGRTAwMTY4Cis6MTA0QjMwMDAwMDAwMDAwMDAwMDAwMUZGMDAwMDAyMDAwMDAwN0ZGOEZDCis6MTA0QjQwMDAwMDAwN0ZGODAwMDAwQ0RGMDAwMDE1MDAwMDAwMDAwMUVECis6MTA0QjUwMDAwMDAwMDAwMTAwMDAwMDAxRkZGRkZGRkZGRkZGRkZGRjVCCis6MTA0QjYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjU1Cis6MTA0QjcwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjQ1Cis6MTA0QjgwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjM1Cis6MTA0QjkwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjI1Cis6MTA0QkEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjE1Cis6MTA0QkIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA1Cis6MTA0QkMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY1Cis6MTA0QkQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMEUxCis6MTA0QkUwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkQxCis6MTA0QkYwMDAwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkJECis6MTA0QzAwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMEFDCis6MTA0QzEwMDBGRkZGRkZGRjAwMDAwMDAzMDBCRUJDMjBGRkZGRkZGRkZGCis6MTA0QzIwMDAwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRjhDCis6MTA0QzMwMDAwMDAwMDAwMzAwQkVCQzIwRkZGRkZGRkYwMDAwMDAwMERCCis6MTA0QzQwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMzY5Cis6MTA0QzUwMDAwMEJFQkMyMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkMyCis6MTA0QzYwMDAwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDMwMEJFQkMyMEFCCis6MTA0QzcwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMDNDCis6MTA0QzgwMDBGRkZGRkZGRjAwMDAwMDAzMDBCRUJDMjBGRkZGRkZGRjhGCis6MTA0QzkwMDAwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRjFDCis6MTA0Q0EwMDAwMDAwMDAwMzAwQkVCQzIwMDAwMDIwMDAwMDAwNDBDMDQ3Cis6MTA0Q0IwMDAwMDAwNjE4MDAwMDA4MjQwMDAwMEEzMDAwMDAwQzNDMDJCCis6MTA0Q0MwMDAwMDAwRTQ4MDAwMDEwNTQwMDAwMTI2MDAwMDAxNDZDMDBDCis6MTA0Q0QwMDAwMDAxNjc4MDAwMDE4ODQwMDAwMUE5MDAwMDAxQzlDMEVGCis6MTA0Q0UwMDAwMDAxRUE4MDAwMDIwQjQwMDAwMjJDMDAwMDAyNENDMEQwCis6MTA0Q0YwMDAwMDAyNkQ4MDAwMDI4RTQwMDAwMkFGMDAwMDAyQ0ZDMEIzCis6MTA0RDAwMDAwMDAyRjA4MDAwMDMxMTQwMDAwMzMyMDAwMDAzNTJDMDkzCis6MTA0RDEwMDAwMDAzNzM4MDAwMDM5NDQwMDAwM0I1MDAwMDAzRDVDMDc2Cis6MTA0RDIwMDAwMDAzRjY4MDAwMDQxNzQwMDAwNDM4MDAwMDA0NThDMDU3Cis6MTA0RDMwMDAwMDA0Nzk4MDAwMDQ5QTQwMDAwMDgwMDAwMDAxMDM4MDk0Cis6MTA0RDQwMDAwMDAxODcwMDAwMDIwQTgwMDAwMjhFMDAwMDAzMTE4MDJCCis6MTA0RDUwMDAwMDAzOTUwMDAwMDQxODgwMDAwNDlDMDAwMDA1MUY4MERCCis6MTA0RDYwMDAwMDA1QTMwMDAwMDYyNjgwMDAwNkFBMDAwMDA3MkQ4MDhCCis6MTA0RDcwMDAwMDA3QjEwMDAwMDgzNDgwMDAwOEI4MDAwMDA5M0I4MDNCCis6MTA0RDgwMDAwMDA5QkYwMDAwMEE0MjgwMDAwQUM2MDAwMDBCNDk4MEVCCis6MTA0RDkwMDAwMDBCQ0QwMDAwMEM1MDgwMDAwQ0Q0MDAwMDBENTc4MDlCCis6MTA0REEwMDAwMDBEREIwMDAwMDA3RkY4MDAwMDdGRjgwMDAwMTkzQ0Q4Cis6MTA0REIwMDAwMDAwMTUwMDAwMDAxOTAwMDAwMDAwMjgwMDEwMDAwMDhECis6MTA0REMwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkY0MDAwMDAwMEE3Cis6MTA0REQwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEQzCis6MTA0REUwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEMzCis6MTA0REYwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEIzCis6MTA0RTAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEEyCis6MTA0RTEwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDkyCis6MTA0RTIwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDgyCis6MTA0RTMwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDcyCis6MTA0RTQwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAwMDAwN0ZGODJCCis6MTA0RTUwMDAwMDAwN0ZGODAwMDAwNUM3MDAwMDE1MDBGRkZGRkZGRkZFCis6MTA0RTYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjUyCis6MTA0RTcwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjQyCis6MTA0RTgwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjMyCis6MTA0RTkwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjIyCis6MTA0RUEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjEyCis6MTA0RUIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAyCis6MTA0RUMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYyCis6MTA0RUQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY0MDAwMDAwMDlFCis6MTA0RUUwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEMyCis6MTA0RUYwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEIyCis6MTA0RjAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEExCis6MTA0RjEwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDkxCis6MTA0RjIwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDgxCis6MTA0RjMwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDcxCis6MTA0RjQwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDYxCis6MTA0RjUwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAwMDAwMTAwMDgxCis6MTA0RjYwMDAwMDAwMjA4MDAwMDAzMTAwMDAwMDQxODAwMDAwNTIwMDVECis6MTA0RjcwMDAwMDAwNjI4MDAwMDA3MzAwMDAwMDgzODAwMDAwOTQwMDQ1Cis6MTA0RjgwMDAwMDAwQTQ4MDAwMDBCNTAwMDAwMEM1ODAwMDAwRDYwMDJECis6MTA0RjkwMDAwMDAwRTY4MDAwMDBGNzAwMDAwMTA3ODAwMDAxMTgwMDEzCis6MTA0RkEwMDAwMDAxMjg4MDAwMDEzOTAwMDAwMTQ5ODAwMDAxNUEwMEY5Cis6MTA0RkIwMDAwMDAxNkE4MDAwMDE3QjAwMDAwMThCODAwMDAxOUMwMEUxCis6MTA0RkMwMDAwMDAxQUM4MDAwMDFCRDAwMDAwMUNEODAwMDAxREUwMEM5Cis6MTA0RkQwMDAwMDAxRUU4MDAwMDFGRjAwMDAwMDdGRjgwMDAwN0ZGODc0Cis6MTA0RkUwMDAwMDAwMTEyRTAwMDAzNTAwMTAwMDAwMDAwMDAwMjhBRDY4Cis6MTA0RkYwMDAwMDAwMDAwMDAwMDEwMDAxMDAxNTAwMDVDQ0NDQ0NDNTZDCis6MTA1MDAwMDBGRkZGRkZGRkZGRkZGRkZGNzA1ODEwM0MwMDAwMDAwMDk0Cis6MTA1MDEwMDAwMDAwMDAwMDAwMDAwMDAxQ0NDQzAyMDFDQ0NDQ0NDQ0M0Cis6MTA1MDIwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQ0VBCis6MTA1MDMwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQ0RBCis6MTA1MDQwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQ0NBCis6MTA1MDUwMDBDQ0NDMDIwMUNDQ0NDQ0NDMDAwMDAwMDBGRkZGRkZGRjg5Cis6MTA1MDYwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwCis6MTA1MDcwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDMwCis6MTA1MDgwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDIwCis6MTA1MDkwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDEwCis6MTA1MEEwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDAwCis6MTA1MEIwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEYwCis6MTA1MEMwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEUwCis6MTA1MEQwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMEQwCis6MTA1MEUwMDAwMDBFMDIzMjAxMTYwMEQ2MDAxMDAwMDAwMDAwMDAwMDgxCis6MTA1MEYwMDAwMDcyMDIzNjAxMjMwMEYzMDAxMDAwMDAwMDAwMDAwMERGCis6MTA1MTAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEEzCis6MTA1MTEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDkzCis6MTA1MTIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDgzCis6MTA1MTMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDczCis6MTA1MTQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDYzCis6MTA1MTUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDUzCis6MTA1MTYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDQzCis6MTA1MTcwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDMzCis6MTA1MTgwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDIzCis6MTA1MTkwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDEzCis6MTA1MUEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAzCis6MTA1MUIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEYzCis6MTA1MUMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEUzCis6MTA1MUQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEQzCis6MTA1MUUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEMzCis6MTA1MUYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEIzCis6MTA1MjAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEEyCis6MTA1MjEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDkyCis6MTA1MjIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDgyCis6MTA1MjMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDcyCis6MTA1MjQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDYyCis6MTA1MjUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDUyCis6MTA1MjYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDQyCis6MTA1MjcwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDMyCis6MTA1MjgwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDIyCis6MTA1MjkwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDEyCis6MTA1MkEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAyCis6MTA1MkIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEYyCis6MTA1MkMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEUyCis6MTA1MkQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEQyCis6MTA1MkUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEMyCis6MTA1MkYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEIyCis6MTA1MzAwMDBGRkZGRkZGMzMxOEZGRkZGMEMzMEMzMENDMzBDMzBDMzIyCis6MTA1MzEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDVGCis6MTA1MzIwMDBGRkZGRkZGMTMwRUZGRkZGMEMzMEMzMENDMzBDMzBDM0E1Cis6MTA1MzMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDNFCis6MTA1MzQwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzEwCis6MTA1MzUwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDFECis6MTA1MzYwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0E2Cis6MTA1MzcwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREU2Cis6MTA1MzgwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0U0Cis6MTA1MzkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREQ3Cis6MTA1M0EwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0RDCis6MTA1M0IwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREFGCis6MTA1M0MwMDBGRkZGRkZGNzMxRUZGRkZGMEMzMEMzMENDMzBDMzBDM0ZFCis6MTA1M0QwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDdGCis6MTA1M0UwMDBGRkZGRkZGNTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0ExCis6MTA1M0YwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDNGCis6MTA1NDAwMDBGRkZGRkZGMzMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0ExCis6MTA1NDEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDVFCis6MTA1NDIwMDBGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDMzgzCis6MTA1NDMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDNECis6MTA1NDQwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzBGCis6MTA1NDUwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDFDCis6MTA1NDYwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0E1Cis6MTA1NDcwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREU1Cis6MTA1NDgwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0UzCis6MTA1NDkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREQ2Cis6MTA1NEEwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0RCCis6MTA1NEIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREFFCis6MTA1NEMwMDBGRkZGRkZGNzMwRUZGRkZGMEMzMEMzMENDMzBDMzBDM0ZFCis6MTA1NEQwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDdFCis6MTA1NEUwMDBGRkZGRkZGNTMwNEZGRkZGMEMzMEMzMENDMzBDMzBDMzgwCis6MTA1NEYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDNFCis6MTA1NTAwMDBGRkZGRkZGMzMxRUZGRkZGMEMzMEMzMENDMzBDMzBDM0MwCis6MTA1NTEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDVECis6MTA1NTIwMDBGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDMzgyCis6MTA1NTMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDNDCis6MTA1NTQwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzBFCis6MTA1NTUwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDFCCis6MTA1NTYwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0E0Cis6MTA1NTcwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREU0Cis6MTA1NTgwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0UyCis6MTA1NTkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREQ1Cis6MTA1NUEwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0RBCis6MTA1NUIwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREFECis6MTA1NUMwMDBGRkZGRkY5NzA1NkZGRkZGMEMzMEMzMENDMzBDMzBDMzA4Cis6MTA1NUQwMDBDRjNDQzAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREIwCis6MTA1NUUwMDBGRkZGRkZGNTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0JFCis6MTA1NUYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDNECis6MTA1NjAwMDBGRkZGRkZGMzMyMEZGRkZGMEMzMEMzMENDMzBDMzBDMzlFCis6MTA1NjEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDVDCis6MTA1NjIwMDBGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDMzgxCis6MTA1NjMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDNCCis6MTA1NjQwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzBECis6MTA1NjUwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDFBCis6MTA1NjYwMDBGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0EzCis6MTA1NjcwMDBDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREUzCis6MTA1NjgwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0UxCis6MTA1NjkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREQ0Cis6MTA1NkEwMDBGRkZGRkY4QTA0MkZGRkZGMEMzMEMzMENDMzBDMzBDMzc1Cis6MTA1NkIwMDBDRjNDQzAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDRERGCis6MTA1NkMwMDBGRkZGRkY5NzA1Q0ZGRkZGMEMzMEMzMENDMzBDMzBDM0E3Cis6MTA1NkQwMDBDRjNDQzAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREFGCis6MTA1NkUwMDBGRkZGRkZGNTMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0JECis6MTA1NkYwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDNDCis6MTA1NzAwMDBGRkZGRkZGMzMxNkZGRkZGMEMzMEMzMENDMzBDMzBDMzNFCis6MTA1NzEwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDVCCis6MTA1NzIwMDBGRkZGRkZGMTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDMzYxCis6MTA1NzMwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDNBCis6MTA1NzQwMDBGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMENDMzBDMzBDMzBDCis6MTA1NzUwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDE5Cis6MTA1NzYwMDBGRkZGRkZGNjMwQkZGRkZGMEMzMEMzMENDMzBDMzBDMzhDCis6MTA1NzcwMDBDRjNDRjMxNEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREUzCis6MTA1NzgwMDBGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0UwCis6MTA1NzkwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREQzCis6MTA1N0EwMDBGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0Q4Cis6MTA1N0IwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREFCCis6MTA1N0MwMDBGRkZGRkZGNzMxQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzFBCis6MTA1N0QwMDBDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDRDdCCis6MTA1N0UwMDBGRkZGRkZGMDMwN0ZGRkZGMEMzMEMzMENDMzBDMzBDMzUyCis6MTA1N0YwMDBDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDNCCis6MTA1ODAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0QyCis6MTA1ODEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDhFCis6MTA1ODIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0IyCis6MTA1ODMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDZECis6MTA1ODQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzkyCis6MTA1ODUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDRDCis6MTA1ODYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzcyCis6MTA1ODcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDJBCis6MTA1ODgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzUyCis6MTA1ODkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDA2Cis6MTA1OEEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzMyCis6MTA1OEIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDRERFCis6MTA1OEMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzEyCis6MTA1OEQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREFFCis6MTA1OEUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0YyCis6MTA1OEYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDZFCis6MTA1OTAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0QxCis6MTA1OTEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDhECis6MTA1OTIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0IxCis6MTA1OTMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDZDCis6MTA1OTQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzkxCis6MTA1OTUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDRCCis6MTA1OTYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzcxCis6MTA1OTcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDI5Cis6MTA1OTgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzUxCis6MTA1OTkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDA1Cis6MTA1OUEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzMxCis6MTA1OUIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDRERECis6MTA1OUMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzExCis6MTA1OUQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREFECis6MTA1OUUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0YxCis6MTA1OUYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDZECis6MTA1QTAwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0QwCis6MTA1QTEwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDRDhDCis6MTA1QTIwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0IwCis6MTA1QTMwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDRDZCCis6MTA1QTQwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzkwCis6MTA1QTUwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDRDRBCis6MTA1QTYwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzcwCis6MTA1QTcwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDRDI4Cis6MTA1QTgwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzUwCis6MTA1QTkwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDRDA0Cis6MTA1QUEwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzMwCis6MTA1QUIwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDRERDCis6MTA1QUMwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDMzEwCis6MTA1QUQwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREFDCis6MTA1QUUwMDBGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0YwCis6MTA1QUYwMDBDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDZDCis6MTA1QjAwMDAwMDBDMDAwMDAwMDcwMEMwMDAwMjgxMzAwMDBCODE1ODJCCis6MTA1QjEwMDAwMDAyMDIxMDAwMDEwMjMwMDAwRjAyNDAwMDAxMDMzMEI5Cis6MTA1QjIwMDAwMDA4MDAwMDAwMDgwMDgwMDAwMjgxMDAwMDBCODEyOEFFCis6MTA1QjMwMDAwMDAyMDFFMDAwMDEwMjAwMDAwNzAyMTAwMDAyMDI4MEUyCis6MTA1QjQwMDAwMDBGMDAwMDAwMDgwMEYwMDAwMjgxNzAwMDBCODE5ODM3Cis6MTA1QjUwMDAwMDAyMDI1MDAwMDEwMjcwMDAwQjgyODAwMDA4MDMzODJFCis6MTA1QjYwMDAwMDEwMDAwMDAwMDgwMTAwMDAwMjgxODAwMDBCODFBOEU1Cis6MTA1QjcwMDAwMDAyMDI2MDAwMDE4MjgwMDAwRTgyOTgwMDA4MDM4MDBCCis6MTA1QjgwMDAwMDBCMDAwMDAwMDEwMEIwMDAwMjgwQzAwMDA1ODBFOEFBCis6MTA1QjkwMDAwMDAyMDE0MDAwMDEwMTYwMDAwRTAxNzAwMDAzODI1MDBDCis6MTA1QkEwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzM1Cis6MTA1QkIwMDAwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzM1Cis6MTA1QkMwMDBDQ0NDQ0NDQzAwMDAyMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzI1Cis6MTA1QkQwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDMDQwMDIwMDAwMDAwMDAwMDQxCis6MTA1QkUwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkZCNTFDRkMwRjAwMzJBCis6MTA1QkYwMDA4QTU5MDUxOTE4RjQ4NDExN0M3QTYwN0U0RUNBRjQzQkU4Cis6MTA1QzAwMDBGMjMyMzAzODAzQjEyQjEwMzcwMEYxNjE2RTA2ODYyMzczCis6MTA1QzEwMDBEQ0M0RUIzRjJCOEY2MDA3Q0EzMjMwRDQwMkYxN0U2OUJGCis6MTA1QzIwMDAwNjA2MkIzOTg0QjhBMTAyMDNDMzEyMjAzRjBEMkFGNkMxCis6MTA1QzMwMDAxQTQ4MTdDQTUzRTZFRUMxODI1NTU0MzFDNTE0OTUxMTVFCis6MTA1QzQwMDA2QzU1MkNGMkM4NTgwRDREQkU0MTE5OTVBRjRFNDBGRjEyCis6MTA1QzUwMDA0MEUzNjQxRDU0RkUwNDJEMDhGRDVFMUI0MkE3QTBDOTRECis6MTA1QzYwMDA0Rjg0Q0FCQjQyRkQ5NUFBODNERDVDMzcyMkZEOURDNkU5Cis6MTA1QzcwMDA4MkNBNEY0MEUzQjczMEEyRjJDRDM4RDBEQzBGNTUwRkM3Cis6MTA1QzgwMDAwMDAwMTc0QjY3QzgwMzAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTA1QzkwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0QwRDc4NTRENTJGCis6MTA1Q0EwMDBCNUU4M0UzRjczRTZDQ0U0Q0NFNDI0MjQ2MUMyRUYyNEEzCis6MTA1Q0IwMDA4NDEwMzRFMjEwMjIwNjRCRUIwOTdGODY5QTdBMDdBQUY5Cis6MTA1Q0MwMDA5ODVBQzUwMTIzMDYwODI0NTJGNUUxRDM3RTk5NDgwMjZCCis6MTA1Q0QwMDAwMTExMDZCNTM0MTRENEUxNEY2OTJGQjY5MThCOTY1QTUxCis6MTA1Q0UwMDA4QTAzM0UyREI2QkVFRjA1OUZCNTdBQjU3REQxNTJGQzM1Cis6MTA1Q0YwMDAyOTRBQ0FCQjUyRkJBRUFENkZBRkI1Rjc0RUNFMzlDQzE5Cis6MTA1RDAwMDA5MEUwNEZEQkZCREVBNTlGREREOUU3RUM5RkI1RDdERjQ5Cis6MTA1RDEwMDA1RTZCRURCNUNGNzg0ODNFMjlCODlDOTA0RkUwMUYyREMzCis6MTA1RDIwMDBGRjk3NDEwODdERDQ1NzdBNzQxMkNGQkE5ODkwOUMzQzYzCis6MTA1RDMwMDAyQkRFNTM0RUM4RDAzQzJCNDUyQUU5NzM1MzBCN0JBNTcxCis6MTA1RDQwMDBGRTdFQTIzQzlDMzMyQjA0RUREQUYyQUQxMEExNjNCNENECis6MTA1RDUwMDBFNUNDMjMzMTE4MkJENjQwNDgwMTIxQUE0RUYwOUY2ODhDCis6MTA1RDYwMDBFRjMxRTdFQUE0MUMxRkZERjUxM0YxNUUyMUE0REQyQzQxCis6MTA1RDcwMDBDRTg2N0VFRUYxMDk0OTEyNzI4OUJEMkUxMzIyQzZBNDg5Cis6MTA1RDgwMDBGRDdDMDJERTEyRkEyMDhGMTA3Rjk1OUNCQ0EyODhDMjk3Cis6MTA1RDkwMDA1RDkyNEM0MUREMDgzM0I4MEYxN0JENTIzMzg2QUU2M0I4Cis6MTA1REEwMDA1REI1MUNGMTg2QTFGN0FEODQ0QzI2NjQwNThDNDVFQkVFCis6MTA1REIwMDBFQjI2NzZENzhDQzk4M0Y3NkEwNERFQ0U1NEY2QjY2QTMyCis6MTA1REMwMDBCNEJENTE0MkIwN0Q3MDYyM0NBNTYxM0ZDQjI4QTRGREJCCis6MTA1REQwMDA3MjE4MDgyNEE3NkM1MTJEMDkxMjYyQ0VEMEZBRTFDMkM0Cis6MTA1REUwMDBGRkI3NzBGRDA2NkZBNzk3MzhERjFCNjRGRDFGOTUwOThECis6MTA1REYwMDA1MEVCMjVEMThCRThGODUzNURFRkNCNjZCRDBERTMxQTcwCis6MTA1RTAwMDA4NDNFMkZFM0NGRTlCQUVFODczRjBBMDlGOTEyMDlFNDhECis6MTA1RTEwMDA5REM4QTI3RjVGNEEyRTA1M0M5MDlBNUM0MkE2OUM4RDRECis6MTA1RTIwMDBCRjdFQkNDNTkxQkU4NDMwQkE2OEE0RUYxRkQyNDFFN0UzCis6MTA1RTMwMDA3NEI4NjI0NjRGQTc0NEQ3RUQ4QkM4QzQ0QjFGQ0Q1MkYwCis6MTA1RTQwMDA1RUQ0OEIwMTJGNDcxNUM0QzNCQTNBODZFNzc1MzNFNDk1Cis6MTA1RTUwMDA2NDVDQzI3NUQ2MTZEMkZFQTMwOUMzNjNDRUY4NjI4OTBDCis6MTA1RTYwMDAxNDEzQjJCMTg1RDZDNzlEOERFN0VDOTI4NDA1RjRGNzgzCis6MTA1RTcwMDA5NTEwMDlGODJBOUIzRTFCNDJENzk1M0QzNTg1N0MzMzBBCis6MTA1RTgwMDBCQThBRTE5M0RDQ0RGMDExQTdGRkZCQTRCODFGOUZEOTFDCis6MTA1RTkwMDAwMjlGMTEyN0JFQjIzOTNFNzM2QTZDRjg4MkU3NTUxNDJGCis6MTA1RUEwMDA4RjEzRTBCRDEzOEY0OUY4ODNFMkFCNUVFMDMxOUY4QzI2Cis6MTA1RUIwMDA0NTNDQzY3MzExQkYwM0UxRjEwQThBODMyQzBBQkZGRjc4Cis6MTA1RUMwMDA1NTZGRDI1QkQ0OEY1N0MxMTcwMkFGMjZDN0VCODY5OUE3Cis6MTA1RUQwMDBCRDNBMzBDMzQ2OEJGMTM5MjEyOTQ5MEVFMTc4OTI1Q0Y1Cis6MTA1RUUwMDA4NUVCQzNCMjAzRjBFNkM1RkVGODVFQTczMDFCN0M5RUNGCis6MTA1RUYwMDAzMDlEQzc1Rjk2NDBGQ0VCMTQxRDQzMjRFMDUzNDM1MjkyCis6MTA1RjAwMDA4MUFGODE0RkQzQ0NCQjRFNEZFQTEyNkRCRjY5QUE0QzEzCis6MTA1RjEwMDA4MDVFRUIyQzk5ODQ2OUZENzQ5OTlBNTQwMEVFQjhENTkzCis6MTA1RjIwMDAxREIyRjFBOTAxRjhBN0Y4QkE4RkUzNDcxQjIxM0JGMDk2Cis6MTA1RjMwMDBBOUU2Rjk1RDdDRUU1Q0M3QTZCRUY1NTk3QzVENkMxRERCCis6MTA1RjQwMDBBNDNCRDkwMTcwOUM5OTI5OTM3NUQyQzBFMzBFODQyNzk0Cis6MTA1RjUwMDAzMUVFODBGMEY1OThCRTEyOThGNzA1MjVCMjhFRjJEQTkwCis6MTA1RjYwMDBCQTcwQjI0M0E2RjhEQTM4ODNFMUUzNkNGQTdFQzZGOTc4Cis6MTA1RjcwMDA3QTdCRjU5MjRBREI3QzkxNUVERDJDRkYwMkU2MjEzOUNCCis6MTA1RjgwMDBDRTc1NTU5OTNFMzNBREZFM0NCRjc5ODhCOTYwNzQzNDA3Cis6MTA1RjkwMDA5MDk5MUU5RjFCRkM2MTBBQkYwRDRGN0FEODk0NjA3Q0JDCis6MTA1RkEwMDA3REZDM0QzQUE4Nzg0Mjc2RThBMDE3RERGMzlDMDVBRjZBCis6MTA1RkIwMDA2QjVFRjczQzZBNDlCM0E1NjJDREE5ODczNDMzNDFEOEZCCis6MTA1RkMwMDAzQzE2REJBNzA4N0JBRTgyMUVBMUZBQzcxRjcxRUExMTNGCis6MTA1RkQwMDBCN0ZFRDY0NjM4RUI2QTE1RDNENzJBQjEzRDJGMDJFRDZFCis6MTA1RkUwMDA0RUY1Q0I4NUE0NUY0RjU3MEU0RUJGMTBBQjAxRTE3NTQ4Cis6MTA1RkYwMDBFQjkzMzE1Q0FFQTdFRkVEQTk1MzI5RkQ0QkI2MDkzREZDCis6MTA2MDAwMDA3REY3MkZDQTY4N0QzN0U4Njk1QURGREQwOTczRDFCMkExCis6MTA2MDEwMDBDQkE5QTcyN0YwQzFDQUJGRjM5MjBDN0E3QTQ3MDYzREY1Cis6MTA2MDIwMDA1RDlDQjBBNjgxOUUyRTQ5RDA4RDgwOEU1M0JDOUVFOThBCis6MTA2MDMwMDBFOUUyOEU2NjE5RTgzNDgxRUIwOTcyODBFMTQ5QTdGRjM1Cis6MTA2MDQwMDBCM0VCRTk2MjNFQ0Y5ODZENEUzQzE1NzMzRDVEQkVERjBDCis6MTA2MDUwMDBGNTlDRUJFOTYyOTc5RURFMDg3RjUwN0MxNTRBMUM4RjA5Cis6MTA2MDYwMDA2MzQ5MjlFMjcxRUEyMEY3M0I4RTQ3Rjc3RTU3MEM3M0FDCis6MTA2MDcwMDA4RkExNzg3QzkwRUQ3NzM5NzkwQzhGRUQxRDMyMDFGRDgxCis6MTA2MDgwMDA3MDdBOUI4Q0ZBNzE1QzUxNTQ4Njc2NDI0RjcyRDA0ODdDCis6MTA2MDkwMDAxOTVGRkY0RUFFQUYwNTlDNjM2Njk4RDVBMDRDNEI4ODQ4Cis6MTA2MEEwMDA1OTBERjREMUQ2OTM0ODJBMEM3QUJBMzEwRUYzNkM0QUMyCis6MTA2MEIwMDAzMDNENUQ5MjIwNzJDQzY2MDc2OTFDOUU0REExRENEOUYzCis6MTA2MEMwMDAyMEQ3QTcxMzZBMDQ5NkI5OEI4NDY1QkRBODFGQUY3RDNFCis6MTA2MEQwMDA3NjA3QzdFM0Q3QTA5NTQzMUU5Qzc0Q0NFMTc4NzVFMzlGCis6MTA2MEUwMDA2NzVDRDJDOURGMjUwRkJBRThCMURFNTlDRjcxRDFFNUJGCis6MTA2MEYwMDA0QUM5NjU3RjBDOTIxRTVFOTVDNEJEQjk1MDRGQTI1RDIyCis6MTA2MTAwMDBBN0QzQjVFNkQzQkFGMjJGQ0Y1QUMwRDc0NjI3N0JBNjdFCis6MTA2MTEwMDA3NUM4QzkyMkNBQjc4MTM2NTZGNzc0QThDOTZBNUFCRjZBCis6MTA2MTIwMDAyMThGRjFGNUQ4Mzg0OTgyNURBNzg0QTIwNEVDQ0ZCMTY0Cis6MTA2MTMwMDA3OTU0N0ZEOEYwRTlFMUY4MTQ3NDgzM0YwMTFGNjNCODA0Cis6MTA2MTQwMDA3RDkxM0QzM0Q3MDdGQ0JEMjk4RkUzN0IwNkMzMzc1NUNGCis6MTA2MTUwMDA4MDNFRDA3RjAyREYxRThFNkZBM0IyMUJDMDIzQjNDMzZECis6MTA2MTYwMDA0RTdDNEYzQUVBRDQzN0Q3RDYwRDcxRDRBRjg5MEUzRjYzCis6MTA2MTcwMDAyNzdEM0M5QzhFMUU0RTI3QzE0NzY3RTEzRkVFQjIwRjQ0Cis6MTA2MTgwMDAyQjlENzU4RjhCM0UyRDkyNEJFRjBDOTIzRURBMTE1MjY4Cis6MTA2MTkwMDAwNjdDM0I0RUY2NDc3NjE0OURERDJFMjFDOTQ4MzczQUUyCis6MTA2MUEwMDA3OUYyMzg5RDdGMDEzNUUzQjJFOUY4Q0I0OENGMjg0MDNBCis6MTA2MUIwMDBEMDAxMjM4Q0UzMkM5NzdCMEFBMDdFOEFGNDZFMUUzOUQzCis6MTA2MUMwMDBBNjdGRkM1MTJBMzkyMDUxMjM0RUEyRTg1RDQ5NDExQThECis6MTA2MUQwMDBBNjkzNTQ1NjEwQzE4RUVBMDVCODc0QzQ4QjQ0RkZCQjE1Cis6MTA2MUUwMDAxRUY5NDQ5NTAxNUZDMzRERjY5Q0M0QjM1NUE4ODc4ODNBCis6MTA2MUYwMDBGODE3NDYzQTc5Rjk5Rjg1MkI5RkZGQjM0NEYxMjhGMUIwCis6MTA2MjAwMDA1MjAxM0E4RTAxRkNDNDUwNkZFQTI0ODE3NTNGRTlDMjA1Cis6MTA2MjEwMDBEMjIwREQ1ODA2QTlBNjg2RDIyNEE2MDQ2NTJFODk2MDYwCis6MTA2MjIwMDA0OTJFNDgzRTkxNDJGRDc5Qjc4OUZDRUVGQjFERjkyNEM5Cis6MTA2MjMwMDBBQjdGM0RGN0MyOUYxNEFGQzM0OEY0NzEwOUZDMjczQTA2Cis6MTA2MjQwMDA5RUFFRjRGM0ExOEZGMzIxQjVEMzkwNkY3NTkzRjFBREFBCis6MTA2MjUwMDA1RTQyRjdEMzcyOTQ3QkY0NUZEQzc4NUVDQkY1RjI4NjE2Cis6MTA2MjYwMDAxNjFEQ0JGNTJEMjYyRTcyNjgyODE5OTcyOTdEN0NCNTMxCis6MTA2MjcwMDA0QzhGRTQ4NDdBM0FDMDZGRjEzN0FCOTEyQjY4REQ2RkI1Cis6MTA2MjgwMDBGNEJFN0ExM0Q4N0JCNzZCOTE3QjY4RkRGMENDRTc0MzAzCis6MTA2MjkwMDA1MEVGQjhERDYwRjY2MTFCQjM1M0ZEMUM3QjFENjM3QkMzCis6MTA2MkEwMDA3QjU2NTFCODM2RENBRTQ3RjgyMzg3M0VEQTMwQkVGNzZFCis6MTA2MkIwMDA5RDlEQTBCNzZFRjM0NzAwQkY5QjQyNDdDMkFCNDA1RUI3Cis6MTA2MkMwMDA5QTM1OTQxNzZBN0IyMkZERDY1N0ZDQTIwOEVEQjU4RjRDCis6MTA2MkQwMDAyOUZDOTQzRTI4NDJCNEJGRkUxMTZEMzU4OUI2MUJEMTBFCis6MTA2MkUwMDBEQjgyNzY3RDczNzdCNTkyODdFRkUzODE3MEZGN0EzQjJGCis6MTA2MkYwMDA4QTg3RTFGRURGNzE2NDJEMDlEMzk3Mzk5NTcxMEJGMDIwCis6MTA2MzAwMDBFNTJCQTNBNjJDRTU0MzVGQTUyOUM1MEQ5MENBRDhFQkM0Cis6MTA2MzEwMDAxMkU1M0ZGRjhDMThCMTI4RkUwMjIxQjMxNTc4NDVFNzNFCis6MTA2MzIwMDA3NDIzNkEyMjA0RjJFQkM2NjdDN0M4Nzg2ODIxOUQzN0Q4Cis6MTA2MzMwMDAzRTVFOEJFQzQ2QjYzMkE1Nzk2OURBRjVFMTdGRTYxRDYzCis6MTA2MzQwMDBENzU5NjlFQ0E5NkM1OTQyRkUzRjMyN0UxMUZBQkQ1RTA1Cis6MTA2MzUwMDAxMjBCNjU4MTRFMkFEM0M4NkUwQUU3QkFGMThCNDZDNzg1Cis6MTA2MzYwMDBEMkQ4N0IzNjM5RTNGNjRBRkEzMjUzM0Y0RDIxQ0Q1RDIwCis6MTA2MzcwMDAzNjc4QzZDQTMyRjI5RjI0RUI0QzZFNDM5NDhGQTg1Q0U5Cis6MTA2MzgwMDBFNTk4OEM5RkI0MTlDNDRBQTY4MUUzNzIwRUJGQUVDNkNECis6MTA2MzkwMDA4OTg5RjZCNTI5ODE5REY1NDVFMUVCNUQ4OUMxQjk1NjNECis6MTA2M0EwMDAyMjc1NUQ2OURFNkYwNzc4RjI0MTNFRUU0RUMxRkU5OEMwCis6MTA2M0IwMDAzRDkzRjEzNUZEQ0ZFQUEyRjBFN0E4QUMxNEVENkIzOEMwCis6MTA2M0MwMDBGQzdCNzhCRkYzRDA0MzA1MEYwMjdGOTQwRkNFRkVGMjIzCis6MTA2M0QwMDBDMkJDNjlFMDlERjgyOUU2REQ0OEU3OTU2NTEzOUYwQjhGCis6MTA2M0UwMDBCQ0JCRTkyOTRBNDlGNkUxRkFDRThDREYxQzAyRkIzNDNBCis6MTA2M0YwMDAxMzlDRTFEQjUwQjc5MzcwMzMyRDg3RDJCMjk2OTcyNjZBCis6MTA2NDAwMDAyQkRERjM5REVGNzg1Rjk2RDkzQURDRTM5MjVEQ0M5RTZECis6MTA2NDEwMDBGMkYzRkRFQkYwOTQ1NzJDODVEMjZENzQ5Q0YwQjg4QUEyCis6MTA2NDIwMDA1MzdGOEMyRTkzRDE1RkREQjQ4NzZFRjg0NUEwM0Y1ODIzCis6MTA2NDMwMDBGRDkxNUQyNEE5NTA1NDlFQkVGQjFFMTlFMDFBNDlFRDQyCis6MTA2NDQwMDA3QzY4M0Y4NEM0NjRDMDVCMTEwOTRCNTAwQTNEQjg4NjI4Cis6MTA2NDUwMDBFQkMxMEY0OUY0M0EzOTFGRjQ3NDE3REE0NUI1OTVCNzEzCis6MTA2NDYwMDA0RTRCMTczN0FBRTdGMjcxM0VGQkQ0NTc2OEI5NDA4RkZECis6MTA2NDcwMDAyRTgyRjE4REM4MzE4QkVFRTQ0NDdCMzFCRDVDRDFFREQxCis6MTA2NDgwMDAyQTM0RDcyNjBGNDQxMTdDQzFFNEE5OURGMzNCQzhDRDIzCis6MTA2NDkwMDAxQzVBOUY3NzdEN0EzODM3Q0RENDg2MzFCQkM1MkM0NEMyCis6MTA2NEEwMDA3RjQ3MzUwQkU3REFFNDcxNTMyQjk1MkJGQTNFMDlFMzZFCis6MTA2NEIwMDBEOUU0RTBCQjdDN0RBRDVDMUVDRTg3MUY2QjY4Njk0NjZFCis6MTA2NEMwMDAyQzRCQTFBRjZBOTI4OTE5NDBCN0FCQTVEODZBOTk4RUI3Cis6MTA2NEQwMDA1M0QxMUM3OTU2QTU3NTYzNEZCN0U1NjdDRkQ3QzJGMzgzCis6MTA2NEUwMDA3OTI1Q0RFREMwMTI4NkQ1NEQ0MERGM0U3MkY3MEEwQkZGCis6MTA2NEYwMDBFODc4N0EwNDVEN0ExQTNCNDE5NEFBMjUzQkVDMTQ3RDM2Cis6MTA2NTAwMDA4NERGNjkwRjBENTIxRTJGODgyNEE2MDFCQzY1RTE2MzRDCis6MTA2NTEwMDBENUI5NjFBMDUzNkMxQkQwNjlDNEQxQzg2MTU4QTI1MUQwCis6MTA2NTIwMDA3NzJDOTU2RkEzNTdEODY0NjUyMzAwNERFMUQ3RTI5NDhCCis6MTA2NTMwMDA2RTQ4OEY2ODA4RThCMTk4NDQ3NzQyRkY0MDY1OTRDNTdCCis6MTA2NTQwMDAyQjA3MDk0NzI2RkUwRjg3OThERTBBNzM3RTZGOEY1MDUwCis6MTA2NTUwMDA3RTk3RkFFNUMxQ0ZFNUExOURCRjNGNUQ0OUQwQkY2OEY5Cis6MTA2NTYwMDBDRkFCMzBEM0VEMTc4MkRGMDVGRjBCN0RFODZFNzdGOEY4Cis6MTA2NTcwMDA1M0YwRjk3ODVBOTYxMjEzRkQ5QTBGNDlFQzM5QzAwMzdCCis6MTA2NTgwMDA1RDNEQ0E5RjE2RUE0MkZGNEVDODU1NkRFNEQ4OEMyMTg2Cis6MTA2NTkwMDAxMDQ3QUQwQzU3MjhCNkZERkE3RENFNzcwQjc0RUI5N0ZDCis6MTA2NUEwMDBEMDdGREVGNTBCREFGMzI5MUVDNkRENEQyMkEwNjZBRkUzCis6MTA2NUIwMDBCRDdFMDFCMUYzRkJBRkZCREE0NzVGNDJGOUJBQkIxQjBCCis6MTA2NUMwMDBEREQyODFGQTc1RjNGNTVEMkQ0NTVGQjNGMzIxMURFNzRCCis6MTA2NUQwMDA3NTFDQTdBNDNCMkVEQkY0NEUwRUM3QjMzMkIzOEYzRjFFCis6MTA2NUUwMDA0RDEwQ0Q5QURCMTIyQUQwQTdBMjM2QTI0OEI2NzU1QzEwCis6MTA2NUYwMDA1QkU3QjRFNzI5QkZCRjAzRTNCQUY5NzQxRTY5RjY5MEZECis6MTA2NjAwMDBGM0Q4M0Y0NjQ5QjE1RTgwQjdCNkE0QkIwREUwRDM0Mjk0Cis6MTA2NjEwMDA1MUY0RjcyOERDQTdFMUY5MTcwMEY3MjdFNzgyRkIxRDAzCis6MTA2NjIwMDA4ODc1ODBERThDNTQ1QjQzQzIwODlGQUE1QzAyN0U1NDRFCis6MTA2NjMwMDBBQTJEM0YwQzc4M0ZBNjAyREUyOTlFMzVDNTg2RTdDMTBDCis6MTA2NjQwMDBDQUY5RkQ3Q0JGMTg0OERFREJFMDBGQjQ5NzYzNzkwQTE2Cis6MTA2NjUwMDA2RDNGNDQ2NzcyNEE3QThFMTFFNjc3MzlFMzk3QzI2RUNFCis6MTA2NjYwMDAwRTg2MDhDNjU5NzM2QTdCMDhGODZCMTcxRjU1RDBERTczCis6MTA2NjcwMDAxRDVBNEIyNEIwQzM4NDVEM0JDNDc1REVCMDAxRUM2NjhCCis6MTA2NjgwMDAyQTNGRjdCNTg0NTA4ODJFMzY3QThGQzIzOUMwODY0MkE5Cis6MTA2NjkwMDA5OUQ5Qzc1M0NFMEM4M0ZFM0ZBQUVFMDk4MTNGNjg1NkI1Cis6MTA2NkEwMDA5RDU5Nzc1MzE4RUNFRDMwQjY1RkRCMTJFMUZCNEYxNUM3Cis6MTA2NkIwMDA5Njg5REFCN0Y2RUNBNEYzNkYwOEY5RDE1RUJFQjdBNUY4Cis6MTA2NkMwMDA0Q0M0NkIxMUVFMjEyMkRFNUJDQkVDN0IxMTE3MTY3MEY0Cis6MTA2NkQwMDBEMUZFM0EwRkI2M0FEQTkzOTAwRDZGQzVCNkZFNjFBNkI5Cis6MTA2NkUwMDA2RjA2RUE5RjU1RTlDNDdCNUY3RjZCNzBGRDIxREU2RjBCCis6MTA2NkYwMDBFRjVGNkRGNTFDODVGODlDQzlFM0ZFNDJFRjA1NzkxQjQxCis6MTA2NzAwMDBCMzRBNDZGRjU5RTBEOTVCRTY4Q0NCMjVGOEZDOTlGOEYzCis6MTA2NzEwMDBDNTNEMUYwOUZCMURFQjI3RjEwNjg0NkYwNTk3OEI0Q0M4Cis6MTA2NzIwMDBFM0I0NzNGRDI4RUExRTkyREU2RTVCQTZGMDdEOTI5RkI1Cis6MTA2NzMwMDA0Qjk5N0NBRTFGNTk0RTdDNUMyQ0U4Nzc5MEUzQ0Y2NDdDCis6MTA2NzQwMDBGMjJFRkMxQThDMDcyOEY2RjlEODNBQjA4RTcxOUEzOEQ2Cis6MTA2NzUwMDBEM0M3MkVGODQ1N0Y4REY3Q0YwNDg3RTYxRUVGMzgxRDhGCis6MTA2NzYwMDA2N0IyNkQxQzE3OUM5OUUwNzM5RjkzOTE3NzlDRTM2NENCCis6MTA2NzcwMDBENjVGQUU3RTI3MDc0Nzg3QjNGQTExOUJEQzYzM0RENzEwCis6MTA2NzgwMDA1NTFGRTY2QTVGRUM3QTdGODFFQjdEODVBQjdFOTlBQjI2Cis6MTA2NzkwMDBGRDM0NTdGREFCQUVGNjczNURGNUVCNUNFRDE3QkFERTdECis6MTA2N0EwMDAyRjcxQkQ1RkUxQUFGRjU3NjdGQkYyQzU5RjBFQkZGRkM4Cis6MTA2N0IwMDA5RkUxNDlDOEQ1RDk3ODQ5M0FDRTc5REQ3MjU1NEM1MjE2Cis6MTA2N0MwMDBBMzUyQjREQzkxRjNFMjIyNzhENUEzNDhFQTA5OTg0N0IyCis6MTA2N0QwMDBDNEI3NDg2QTgyREQ4RkZEQkQxMUZCMURFQzYzM0IzRUYzCis6MTA2N0UwMDBCNkZDNTEyQTU3QkIxMjJGMDU2MTdGMTNDRjRGNEE2RjVBCis6MTA2N0YwMDAwNEM3ODdBOTdEQThBNTk2QjM3ODUwMDJFNUM2NEZENEYzCis6MTA2ODAwMDBCNzdBQ0E4MDRBMTJDNkQxNzRBMzFFNTFBRTk3RDBFNzk4Cis6MTA2ODEwMDAzNjdERTUyNTUxQTRCMzM2QzJGOTlDMjQ5ODFDOTY0MEQ4Cis6MTA2ODIwMDA4MDhBOEUxN0RGQTRBMUJEMTcxRjQ5OTI2MzQxOUVGMzkyCis6MTA2ODMwMDBEOEY4RDhCRUI4MUZERTQ5MkFEMzRGQTE2OEEyMUE2NDdGCis6MTA2ODQwMDA3ODU4NURENzYxMjhERDc4MEE0RDhGNEY3QzlFRUE2NUM4Cis6MTA2ODUwMDBGMjAwRjNDQjc3Q0Q3NEZBRDVEN0YxNzFFNkFCRTdFRDYzCis6MTA2ODYwMDBBN0JFMzI0OUU5MUY3RkQ3Qjc4RDQ4MkI2REIyMEI4MDg5Cis6MTA2ODcwMDBBMEY1RjhCN0Y1MjRDNDM3NDY0MUJDOEUxRDIyNjBCQzk0Cis6MTA2ODgwMDA2RTI0RTFGRjc4NUM2RTA0RkM0REZCOEQzNDhFNjJGQzVGCis6MTA2ODkwMDAyRERDNjAxRTAxOURGNzc1QjUxNEUxN0E0NEVBMUQwRkU5Cis6MTA2OEEwMDBGM0M5NTkyNzI3QjJGM0JEQkY3RTgyRjE3ODhFQUZEMEVFCis6MTA2OEIwMDBCRDkzN0JFMjEwNEZEOUE4NDVDNjIyOUUyMzg4NjdFQTg0Cis6MTA2OEMwMDA4RkI3NzkyQjgwNEQxODdFNTdDMUVFQ0I5RUFCODE1Qzg0Cis6MTA2OEQwMDAzODc3RTFGNDAwRkQ0QjRCMUZGMDEzRUM4QjI0ODVGNTZBCis6MTA2OEUwMDAwMEU5QzE3QTM2Qjc3M0NCRDQyMjVDN0YwRUY3MzMwOTQ3Cis6MTA2OEYwMDA4OTQ4NjA3Rjg0QUU0Q0VGOTc0N0E1RUEzMkY1OTJGRTU3Cis6MTA2OTAwMDBCOEE1MTQ2NkYxNDk2OUZERjM3Rjk2MjBBRTU1NDZDMkRECis6MTA2OTEwMDBDQzdFRTE3MUMyQjU4QUY0MDlDNDVGQ0RDMUQ5OEJBMTI3Cis6MTA2OTIwMDA2RjNBRTk0QUQ0NjYzMkM3RTY1RjVFQUYwQTNGOEZFMTRECis6MTA2OTMwMDA2QjRDODhBRDNGQjQ1MTZCMDZCRjY2RDc2QzI3MUY4ODgwCis6MTA2OTQwMDBGNkVBRjlGM0MxRTYwOTYzQkUzODNFQzg1NUM3NjRFMDBDCis6MTA2OTUwMDA4M0VCNEQ4ODU3NEI3MThBQjdBQ0MxRTNDRDU0QUM2RjE0Cis6MTA2OTYwMDBBQUI4NEU4MkUzRkU0MEIyNkVCMEQ3NTU2MkREQThFNjBCCis6MTA2OTcwMDBGN0Q3N0ZBRDQ0MTdDMkZCRjgzNDUyRDY2Q0Y0OEY0MzdGCis6MTA2OTgwMDA5RkRGMENFREQyM0M2RjQ4RDc3RTFDOEZEQkQyRkQxOTA4Cis6MTA2OTkwMDBGN0YxNTJBRTAzODY2RTMzNjVCMDI3OEIzQTU3RjhFREE4Cis6MTA2OUEwMDA3OTJFQTU3Q0JGN0VBQzczOUYwRkQ2QkJCNUYxRENGNjBDCis6MTA2OUIwMDBEMTdEMkRDOEZDMTlEQjA1QTVFRTI4RDA4MzVDQTI5MjAxCis6MTA2OUMwMDBERDY5Q0VCMTdGQ0FGOUJCQUZCRENCM0U5Q0QxMTZBRjVFCis6MTA2OUQwMDA4NkZFQjk3NTMyODE3ODM0RERFN0QxQkUyQkUyN0VFRERCCis6MTA2OUUwMDBFNkE5NzE0OUEzNzJGOEMwMTY4Mjc2NzI2RURCNDI5RkU3Cis6MTA2OUYwMDA3RDNEODU3QzNEOUI2QjBCRkM2MEI3NkNBRjVGRjg1NUI0Cis6MTA2QTAwMDBGNDEzQThGREFGQTBERjFCNUIwN0UzMTdENkIwRjM3RTNFCis6MTA2QTEwMDAzNzdDRjdGMkY1MjVFQTE5OUVEQ0VGQjMzNDEyNEIyN0U5Cis6MTA2QTIwMDA4NzNGNTVGOUY5ODM0QUREQzc4MkZFNzM5NDdCMEZERkY4Cis6MTA2QTMwMDBGOThCRjE3NEJFRDIyQTM5RTIwQkY3QzMzOUFFQ0Y2RUFGCis6MTA2QTQwMDBFQTQxN0M2NTVEQTY5QUVCNDAwRjc3NkEwRTdCNzNGQjhCCis6MTA2QTUwMDBCNkZCQjdENEMzQjkxRjdEMEVFQUUwRDEyRjM3MEY4QjM5Cis6MTA2QTYwMDA1MkI4MUVGQkRBQTIxNzE2MDNERkI3Q0IwNEY0OTE4MEVECis6MTA2QTcwMDBDMzI4NzdEQUJCNDdGQUU0Q0MzOTJGMURCNzFBRjE1Mjk1Cis6MTA2QTgwMDA3RjZFRkZFOUQzRTI2MzBCOTdGMzRDN0NFMkRFNTdEREM4Cis6MTA2QTkwMDA3QzcwM0VGQkMzNTVDQTY3NUZERjdFOTA0MzNBNkUwMTUwCis6MTA2QUEwMDBGN0ZCODZENjg1QTUxRUEzNUY4RTg0OUYyMkU2MjlFMDhDCis6MTA2QUIwMDA3Qzk2NUI3QkJGMEZGODZDNEI1RDA1Q0FDRkU5REE4NTJFCis6MTA2QUMwMDAxMkU4OTM0REQwMzI4RDlFMTBGMzY1ODIyN0NCOTNDMDkwCis6MTA2QUQwMDA3Qzg5MkRGNUY3NEJFOUYwNTYxODYzRjEyMkY3RjM2QTNDCis6MTA2QUUwMDAwRkEzRjM3QTM1MjE0MUZGNENFRDQ2N0JCOEJFRTY3MjI5Cis6MTA2QUYwMDA1NUM4RDcxNTlBOUE4QTAyQkUwQTIyMkFCOTg3RTJFQkFDCis6MTA2QjAwMDA4MURBODVENUE1QzA3NzU0MEUyMUJFMzJBMzg2QTBCREZCCis6MTA2QjEwMDA1MDY4QjE3MzIyOTNFMkVCNjlCQUVGNkRBRTI3OTExNDFFCis6MTA2QjIwMDA2REI3RDlEMkYwMUNDNjJEODc2RTdFREM1QzdGNkVGRDAyCis6MTA2QjMwMDA0MjJDNUI3QkNBRkYxRThGQzFDRTczNEI0ODA5RDg1M0QyCis6MTA2QjQwMDAwRjBDRTBCRjBEMTZCRkExN0E5OUM1NEI2NzU0MENBMDdFCis6MTA2QjUwMDBDRjVCQ0YzNzhFMzlFRkNCQzA4RjMzMDY5OTA3RTBEMkFBCis6MTA2QjYwMDAxN0U0RDkyREIzNEJGMzIwMUU0MkY1MDU0OTg3MUZBNzIzCis6MTA2QjcwMDA3RTE4MDgxRjZFRkM1RjBDRjhCQ0YwOEJDM0E3RkI3RDcyCis6MTA2QjgwMDA5RTg3QzcwMTA3ODk4RkY1NzVDNUZGMDM1MjI2MzNCNTY4Cis6MTA2QjkwMDA3N0FGNDdGNDEzNzk2MTVGMjFCRDBBQzhCRjA1MUMzQTdFCis6MTA2QkEwMDAwNkJDOEEwODk2MzM0ODE0Q0I2MzZBMkNFQUExRUQ2N0M5Cis6MTA2QkIwMDA5MTY2QUNENzkwMDQ5NjhCNTU5M0QxOTlFN0MxODhGMzMxCis6MTA2QkMwMDA2RTc1M0FFM0ZCNzE5NzkyMjQ5QzNCOTNBOTczRjk2MTJDCis6MTA2QkQwMDBCMDZBOUREMDA5ODY1MjNGNDlFMzU3MTE3MjBGOEUzNzM0Cis6MTA2QkUwMDBEQ0I1MUY4QjM4QzVEMEM2NDQ2RDA1MUQ3Nzc4MkRDQjFECis6MTA2QkYwMDBGQjFDNUVCNUNGQjE4RjA1QjlGQzg4RjFCNjU2MEQ2RUEyCis6MTA2QzAwMDA3RjdFRDRCNTNGM0ZBQUY2RTg0MDlGNDdBQkVFNjk4NTRCCis6MTA2QzEwMDBFRDQ2Q0Q3RDI3OTRBRUZGQjg0RTI3NUUzNzdDRENFNTkwCis6MTA2QzIwMDA4QkE2ODE2NzZCRkQwMTFGRTQ4RDZEQUQ0QTlGMTdFQjRECis6MTA2QzMwMDA4NjIzRDNGQjcxMTlDRTk5QkVFMjY1RTc0QzVCNzNGNEYyCis6MTA2QzQwMDA2RkIwNjQ5RDk1OEVCQzA0QTIxODQ1RjY3OUI3N0U0QzUyCis6MTA2QzUwMDA3MkEyRTdENDI3NEU3OUQ5RThFMUY5MjEwMTEyMDBGRUFBCis6MTA2QzYwMDBDRjg0MEY1MTdFRDE3ODc4NkM1QUYzOTI2ODlBRkVBNTQyCis6MTA2QzcwMDA1RTI2MzdFRDM5MjQwRUU3RDI4RkJEQTYzMkZFRTM3QUM5Cis6MTA2QzgwMDA3OEYyMzdDMjQ5QjAxN0RBNDE0OTUwRkRGQjU4MzVFMzc1Cis6MTA2QzkwMDBDRkM5MzlGQ0ZENDM2MUNDQUYxQURFNDlFMjFBRERDRjIyCis6MTA2Q0EwMDA4NkJGNUFGRjQwMEU2RDc3NUYzREY1MjA2RENGRUZBQjhECis6MTA2Q0IwMDA3Q0E5MDNDRTg5OUY3QTU5QzZCOEVFNjQ1RkI3MUVBMTNFCis6MTA2Q0MwMDBGMDU0RjE3RDcwNkJGRDRCOTg5RjFDREZBNjQ2QzZBMjY5Cis6MTA2Q0QwMDA3RTk3ODgzNDE5QkQ3OUE0ODc4MEY3MTk4RkNBRTg1NjQyCis6MTA2Q0UwMDA3OUJGMkYwQ0ZCNTdCODQ3OEY1MEZDREMzRUU1MjUzREE0Cis6MTA2Q0YwMDA0Q0NCRkI0NkE0NzQ1OEU3RkFBQUZCOTFDRkY3RDUxNzAzCis6MTA2RDAwMDA3RkJEMTREMUVBQ0MzQjk5QTU0Q0VEQjZFODdDRUJFQjBBCis6MTA2RDEwMDBEOUI5NUQ0RTRGNEFGNzQyOUNCNTRFMjU1NzUwRjg4MjdGCis6MTA2RDIwMDAwNjVCRUY3REVEMjQ3OThGMDQ3MDMwRkE0QTY0MEVGQTI5Cis6MTA2RDMwMDBDNTg1QUVCQ0FFMDI1N0RFOUI1OTM5RUI1REM4NjczMUU1Cis6MTA2RDQwMDBFMTlDMUYxNkExMzQzRTcwMTFFOERCMjY5OUI5NUJBRUI5Cis6MTA2RDUwMDBGQzY4QTNEMjdBMTdGMjAzNjYyOTA3N0Q5MDdGQjVBNTU4Cis6MTA2RDYwMDA0RDM1NzFGRjczOERFQjVFODc0OTYyODcyRDA5Qzc4OUE5Cis6MTA2RDcwMDA4MzFGQjhFNTQxQjY0RjlBMTM4RDQ4M0MwQzVEMzlEQzUyCis6MTA2RDgwMDAyNjg1N0IwODlEQjJDRDA5QjdDMEFCN0IxRTc3REVGNUFCCis6MTA2RDkwMDBCQjgyOUY4NzkzQjFBMDg3NDRCQzU5QzBFRkU2REJCQ0EwCis6MTA2REEwMDA4QUU0RkU5NzI4MUM1QjVGMzY3MEJGREU1QUY1RDIzNzQ3Cis6MTA2REIwMDA5QjYwOUYyRkYzNjJERUM0NTdDRkVDNjlGQzExMkQ3RkRGCis6MTA2REMwMDBGOUM3MDMyNTUwNUU1OUI4QUJCMjg5QjYwQkYwN0MwOTAwCis6MTA2REQwMDAxMUNGMkI4MDkxRDE3RUU1N0E4REYzMDMyOURGREVFNjlBCis6MTA2REUwMDBDOUMzNDc5ODQ3NzFERjExMUZEMkFCQjA0RDRFRkE4MDJGCis6MTA2REYwMDAzRTZBOEEwMDdGRTU1RDk2NDBCQkU5QkVFQkJBMzFFOUE5Cis6MTA2RTAwMDAyMjUwRDcyNUM1NkQ3MjE2MTBGNjQzNjM0QzgyRjNGQkYyCis6MTA2RTEwMDAyQkVBMTJCMzgxMEYwRDlFNDc2ODQ0MTI2ODFGQ0Q1NEIwCis6MTA2RTIwMDA1RUQ0MzFDRUNFRTk2NjcyMzg4NERDQjlFOTUyNUE5RjFECis6MTA2RTMwMDBEMjIxMkY2NTc4OUIxQTAxNzA4NzM3MzZDQjIwMkZBNTdBCis6MTA2RTQwMDA1NTJDNkZCOUI0QjM0QkUyNzlDMjk4NEYzRjhFMjM3MTgyCis6MTA2RTUwMDA1Q0I0ODFFNTE1NkU2M0Y4MTdGOURGQzE0NjI3REQ0Qzk4Cis6MTA2RTYwMDA5RUE3NDlGRDBDMTlGQ0VFQTI0RUQ3RkI2ODBERTY2MzA4Cis6MTA2RTcwMDBCQUU5NUFBQ0YxQkNBODUyOUU0N0M4RjEzMDlDREJCM0NBCis6MTA2RTgwMDBFQjFCRjlGOTlDQTEyN0NGNjVDRkVFRTNFNzczNDc2MUQwCis6MTA2RTkwMDBGREUzQ0U3RTNGMjk4M0RFQkQwQUY0MkVENTM3OEE5Q0UyCis6MTA2RUEwMDBFQTQwRkZFRDMyMTlGRDM3MzcxQzFCMUE5OUJFREJBNUVFCis6MTA2RUIwMDBDOTBFRkJGREIzQ0U3RjAzRDdGQjhBRENEMzAxRUJGQzBECis6MTA2RUMwMDA1QkNGREZEOEI3RkVCRkNGRkM3N0ZEOURFNzVGRjc3N0RECis6MTA2RUQwMDBDNkZGOTZCRkYzRkFGN0ZDOERENzVGNTMyNjM5RkNCMzk0Cis6MTA2RUUwMDAxRDkwOTg0MkM3RkJCMTU3QzREMzlDN0E1QjkxRDNGQkVBCis6MTA2RUYwMDBEOTZGNjlCMjIzOUY1OEU0Mjk0RUFGQjMxNjY4NzgzRTI0Cis6MTA2RjAwMDAyRTEzN0JGRThCMTg2RkE2RjI0NjA3RThEMzJENUM5RkVECis6MTA2RjEwMDA1MjNENEEyMDVGMjA3QjhBQzg5NzYxRkFBRjg2RUJCRjVCCis6MTA2RjIwMDAxQUFFRkZGNjY1RDBBQjE1OTAyQjk2ODc3NjA1REUwNzc3Cis6MTA2RjMwMDA5OTQ0MTJFOEM3MDQ4RkFBOTg2N0JDOEZEMEVEMDVGNDc2Cis6MTA2RjQwMDA1QUQ4OUIzNjJGQkI4MEMzRURENkE3MDU1QzlGNTZCQzk1Cis6MTA2RjUwMDBFODdBQ0VGNUE4N0I3RjJGRUE4QjlCMTI4QzlCRkU3NzdECis6MTA2RjYwMDA4REVGOEYyRUJEMkFGMEIwQTU4QUQ5Qzk3OTczRDNEQkY2Cis6MTA2RjcwMDA4MUVCNUQ3NDM0MkE5QjMxRkZDMDREOEZCNzM0RTY3RkJGCis6MTA2RjgwMDAwQjdBMkNEMEFERDdCNUZDQ0NGNEVFRTFGNEJFOUNEMzlCCis6MTA2RjkwMDBGQjU3MUFGMzNGNDRCRTQ4MjY3QTU3NzlEOTNDOTcwNkU3Cis6MTA2RkEwMDA4RTg3NUE2MTM1RDE2QUE0ODNDMkU5QTQ5MEY1REQxOEIxCis6MTA2RkIwMDBGNzI1QjcxM0JCNUZCOUUxNjM2QTdGNTA3QTZDMzU4Q0Y0Cis6MTA2RkMwMDBDODNEQjQ3RTY5MUU5MTQ1RDJGREM3OTNGQkYzODkzRDUwCis6MTA2RkQwMDBERDJDN0VBQUU0NjkyRTNGQ0I2REZGRUE5ODM3QkVENTQzCis6MTA2RkUwMDA5MjkzRjEyMkIwMjM3NjZDNUQwRTc2QzRDQkZFMDhDNDdBCis6MTA2RkYwMDAwQkI2RTY3NEJFODg3RTVDNjI5MjBBNzAwODdCOTFGMEU0Cis6MTA3MDAwMDBCODJDOTgxMjA0RUQyNkY3Qjk5M0QzREVERkZBNzE1NzQ2Cis6MTA3MDEwMDAwQUVDMkVCMzQ4QzI3ODVGNDdGOEZFQkNCNEY3RjE1Q0M3Cis6MTA3MDIwMDA3NkJFRTEwRDM4RTIwNkU0OEFDMUQ5RUJBQjM4QkRBOUUyCis6MTA3MDMwMDA5Rjk4RUZCNUM1Mjk1NzA1NjY0RDYyRTdFNjMzNEMzODkyCis6MTA3MDQwMDBERjkxQUM1OTMyQzREMTMzOEQwMzExREUxM0I2RjNBNkYwCis6MTA3MDUwMDBDNUFBMzUxMkM2OTNDMDZGMkNFQkY3MUIwOTE5QzFFMjA0Cis6MTA3MDYwMDBGMjYyRkQ4M0JEM0ZEMEI4OTg5RDdCNzNCQ0U2NURENkQwCis6MTA3MDcwMDBGNUI5Rjg4RkMyREYxN0VEMEM2QUFGQTVCQkJGRTNGNjE5Cis6MTA3MDgwMDBDMzZCM0NENjE0RUYyNTgzODdGRjExNjAzOERBRkU4NTg5Cis6MTA3MDkwMDA3MkE1MjY1RERDQTA4N0VCRDdDMEQxQUVEOTczRTlGQTIzCis6MTA3MEEwMDAyQTVGRTQ3MTdENkFCNkQ5Q0ZEM0VFQ0I1M0QzRjZGRjE2Cis6MTA3MEIwMDAzOTk3OTM1RkMxRTU0OEQ0RUJBOTc4QkU4NEY5MjQwNERECis6MTA3MEMwMDBENjI1RTREMTNERkY0NDNFRUZDNENGMzhGRkNCNUNBRUM0Cis6MTA3MEQwMDAyNzcyQjkyNjI0ODJFNzMwOTlFNkFERTY3QTQzOTQ5Rjc5Cis6MTA3MEUwMDA3NkRFMUVCRUVFNkFDREU0NzFERjczQ0YzQjg3QUY3M0YxCis6MTA3MEYwMDBDRTY3NUNFRjQ5M0VFRjlDNDFBRTc3MDE5RjZGQzE2NzYxCis6MTA3MTAwMDA5Q0Y3MjMzRUVGODI0MUNFN0IyQkM3RUZBRDlGMTFDRjgzCis6MTA3MTEwMDBBQTJFRjE3MTA2ODdFNzU2M0U1RkVCNjc5Q0Q3RTRGMzMyCis6MTA3MTIwMDBCNjBFNzJERTREMUNCRjlCM0UyMzlFNDdGMDc5MzdCOUU5Cis6MTA3MTMwMDBGMDlDNDk3RTc3N0NDNkY5Q0E3NDI2M0ZCQkI4RkNCQTdFCis6MTA3MTQwMDBGNTlBOTgzRjUwMjg0N0ExRkZENjEwMURDN0E2QTdBRUI1Cis6MTA3MTUwMDBGNEIyRjk0NTQ5NTI5RkEwREYzQTlDOUZFNzRFNTk3RTExCis6MTA3MTYwMDBDN0MyNzQ3OUUxQTJCRDdCM0ZDRTM0Q0YzNzc5OUM0NjRDCis6MTA3MTcwMDA5NDYyOUUyMDNGMDc5RDcyMTk5RDI3Q0RGQTQ0RkI4OTlBCis6MTA3MTgwMDA3MDU4OTA5Rjc5RkMyNTFDOUUyNUU3QjkwRUQxQkU1QUY4Cis6MTA3MTkwMDA2MzdBMzZEM0Y4Nzc3MjM4RUU3NEMxM0ZEMEY4QTJGRDI3Cis6MTA3MUEwMDA5QzAxRTBFRkUwNzA3NDlDMjdGQ0EyRkQ4MjAxQzZGRjA5Cis6MTA3MUIwMDAyRTg3RTNCQkU3MDlCRjY4N0ZFQjAwRjg3OTk0QzNGMTQyCis6MTA3MUMwMDBFODc5QzIyRkRBQjcwRTMwRkU5MzFDOEUyN0NGMTM3RURDCis6MTA3MUQwMDBEMTdFRDMwMEY4Nzk5NkMzRjFFQzc5QzIyRkRBRUZFQUM5Cis6MTA3MUUwMDA5Mzc3QTdGQzE5RTJGQjA2MTE1MjA2RjdCQzQ3MTE3RjAzCis6MTA3MUYwMDAwNEJGNkYxMEU5Mzk4Q0RGMzc1OEE5ODVGMUZFNzk5NzA0Cis6MTA3MjAwMDBGQjVFOTRFRDNFMTUxNUYxQzM3Nzk2QzZBMUZEQzM4QkM5Cis6MTA3MjEwMDA1OTlFRjJDMzEzMDlGQTExMEZFN0IzQkNGQ0JFNzgxNkVFCis6MTA3MjIwMDBCNzA3MUY5RTI4NjMzQ0U5RTE5MDMzOEZEOUUwRkVEOTcwCis6MTA3MjMwMDBDMzExMUUyNzE5QzFGMjk4OEQ3MjcxOUY5NjRFNTdDMEM3Cis6MTA3MjQwMDA0REM0MzBFNEQzQjBGQjU1QzJERTEzRjdBQzU2QTk3Qzc1Cis6MTA3MjUwMDA3RThCMjQ1QjY5RkY4N0NCNTk3REVCMEM5Mjk0OEI2QzAyCis6MTA3MjYwMDBGN0FGQ0E1Mjc4MEYwODBDNUI4OEMzRjZERjFGQjNDOEFDCis6MTA3MjcwMDBDQTBBNUIxRUM2Q0ExNEU2MTlBODNDNUY4NDIyODQzODc5Cis6MTA3MjgwMDBGMjMxNUNGN0I2QzRCOUUxMzUxMTZCMjZBOEI5QTI0QTUwCis6MTA3MjkwMDA3NjhFNTcxNDc1RkEwRjhENzA5OThCQjZGRjJERDc5Mzk0Cis6MTA3MkEwMDA2NjY1RkE3QjM1N0I3NTE2OTcxNUY5OUE1N0YzRjUwQkRBCis6MTA3MkIwMDBCQzU1NzA3QTZFOThGM0M3RUVFOTc0OUQyRjRDRjU2MDVCCis6MTA3MkMwMDBGRUU4MEI0NzM5MUVBNzJBNDk3NjZFNEUzQ0U5RUVFM0VECis6MTA3MkQwMDA2NDhBQjMxOTlEQ0Q0NzdDMTQzRkQ3QkM0ODIyNDBDNjcxCis6MTA3MkUwMDBDMDM2QUIzRDhDNzFCNThGOTFGRjMwQUU0NkU3QkQ2NkMxCis6MTA3MkYwMDA1QjQyMDVGRTlCREQxOTlFMEVGMUMwQUI1RjBDQUY4MkI5Cis6MTA3MzAwMDBFRjBBOENFQjI0MTEwQkQwRkJGMUI3NzA5Q0RDMzYxMjJBCis6MTA3MzEwMDA0OTMyNTJCNTlBMkNERUU3OENDRjg5N0JCRjNDM0UwN0MxCis6MTA3MzIwMDA2MTZBQkI3RjM5OUJBRkJCQTJDRDZDODcyM0JCOEExOTM3Cis6MTA3MzMwMDA1RTg3RkQzQTlCRkI5OUZGNjQ3OTFEN0VFNjZDN0U3RjNDCis6MTA3MzQwMDA3QUI2Q0JDRkVDRDQ5REYxM0FBMzMzM0ExM0UyRENDQTQwCis6MTA3MzUwMDBENUM3MkMxREUwOEY0QTI2NUM0QkI5MjFCQTQ5ODU3M0VECis6MTA3MzYwMDBFNEQ5REI5QUQ5QkREQTBDRTc1QUQ5MEZDRDBERDhFREE3Cis6MTA3MzcwMDA3NzcxOEVGREFCNkRFN0I2RDc0NTlDNDFDNDFENUVFMUNDCis6MTA3MzgwMDBGN0YxNUVFNjc5QzU3REY5Mjg5QzNGNzJBRjk2MUM3Q0NCCis6MTA3MzkwMDBEMkE5MzMzREQyMDk3QzkyRkY5RjdDRjI3OUYzQzk2RjY5Cis6MTA3M0EwMDA3NDY3RkNBMTEzREU1MTc5MkM4REE0M0Y5RjZGRDBCNTdCCis6MTA3M0IwMDBGRjk0RDcyRjgwMEU0MTVGN0EzQTkwQzY2QzQ3MUVCMTdBCis6MTA3M0MwMDBDOEE3NzJFMzZEMERDNzlCQThFQjE5RUVCRDhDRjBGMTU5Cis6MTA3M0QwMDA3REQ2RUREN0JGMTFBQjg2NzU4OTM4MEQyMTc3QjlDRTMzCis6MTA3M0UwMDAzNUE3NDZDRTE1OTc1MEM0Qjk4RkZDODYwMkVCMjlGMzFBCis6MTA3M0YwMDA3MUZEQTMxMjE1Qzc3N0FEMDNFNUJFMDBGMjBEMzkwQzgwCis6MTA3NDAwMDBBRUYxREE0MTVGNzhGQkQ3RTUyOTg5NUExMkRFMTcyNUZDCis6MTA3NDEwMDA3OENFMDdGOUVBRkJDQTYxN0YzNDFERUJCNjdDNkNCRkZFCis6MTA3NDIwMDA1OUM3RUYwQkFEMkI1MzkzNTkyQ0FGQ0FGOUREQTI5MjdDCis6MTA3NDMwMDAxRDdBM0FCQjQyOTQ3MDJGRDU5RUU3RTE4NjU3MkI4OTdGCis6MTA3NDQwMDBDNUVERjA2ODFDMUVGNzM4NzMzM0MyRDNFMDg4N0Y5RDBBCis6MTA3NDUwMDAyRjNDREVGMTg0NzQwM0RGQUE5NDhCOTE3RkJGRTUxODgzCis6MTA3NDYwMDA0RjJFNEI5MjlFNzQ3MTI4M0UwRURDNTVDMzc1QjlFOEMxCis6MTA3NDcwMDA5MjY5N0U3RDg0MzNGRjQ5Q0I3M0RFNEY1MThENUM1NzFCCis6MTA3NDgwMDA3RTk0OEJCRkZBRTI0MjgzOUI0RjdDQ0Y2NzM1RTc4M0M0Cis6MTA3NDkwMDAzNjdFMUZDNUREREZBNzI2NDgyNDBEREU3RDYxNzcxRTAxCis6MTA3NEEwMDA0NjEyRTlFMDBEMzlCRjNCRTAzMTVENzBCQkM2NUYwRkFFCis6MTA3NEIwMDBDRkQyRTRERkI4RUY1N0FFNTU5MzY4NkZDNTI5OTg5MEU3Cis6MTA3NEMwMDBFN0Q5Q0VGOTUyMzU5Mzc4MkZFQjNCM0UyOUVERkE0OUI3Cis6MTA3NEQwMDAyNEZEN0VBQjk2QTQ4N0RGN0QyRjQ4Q0JDQjc1RDIyMUQwCis6MTA3NEUwMDBDM0ZEREJCNTQyRUVDRDVEMTZGMDA5OTIyNjBDRkZFNzM5Cis6MTA3NEYwMDA5NkYzODM5MTczRURFNzU5NDI2RjQ5QkY1MTNFQTE0QjFCCis6MTA3NTAwMDBEQUVENzM3RDJGNjE5MEY0NTUzRjFBMDI5NzU2RkJFQjJECis6MTA3NTEwMDA1NEFGNDJCQzk2Q0EwOEU2RjFCQURCMUYxM0Y4N0I2MzhFCis6MTA3NTIwMDAwN0MyMkZGNDc0RDYzNjkxNEZGQkU5RDYwMUI5MDZFQ0E5Cis6MTA3NTMwMDA3Q0RDRDkzRkEzMUM3MjNEQTc3MEJFN0U2RTgwRjU2N0QwCis6MTA3NTQwMDBBMkFGQkZDNDlENEYzODM4RkFGQTQwRUU2MURGNTMyRDI5Cis6MTA3NTUwMDA3RTg4RUU5NEZCNENGMzExOTNBREY3N0NFNUZFRDNDMjJECis6MTA3NTYwMDAzOUE0MjY0NjQwOUY2OUExMTg4OUQxN0RCRTMwOTQ5MEU4Cis6MTA3NTcwMDAyMENFNjA0OEJENzFGMEM3QTg0Qzg1ODFDRTFCRTE1MjdBCis6MTA3NTgwMDA1REJFQjNERDM0REFDRjUzMjRDNzNERDkyMDdGOTFDMzJDCis6MTA3NTkwMDBEMDNFMUUyMjVERDA3RTdEOUU1QUIzQTNCQ0JGOUQyMUVFCis6MTA3NUEwMDA5MTI4RjBCQjkxQUY0NkUxQjkxODJGN0JBQTczM0M2QUQyCis6MTA3NUIwMDAyNjI4RjY3QjU4RUVFRjJENzhBNjMwRkY1NEEzNzZFODA4Cis6MTA3NUMwMDBGNjc0RkFDNENGRUNEMEFDNjc3RDc4QUYyRjEwMzU5MjRCCis6MTA3NUQwMDBDMDkyODU5NTQ5Q0NFMzJDNkMyMDExRjBFNzRBM0JCQjY3Cis6MTA3NUUwMDA0OThDMEVCQTk2QzM1MTU4OTlDMEZDODBDMjZEMDkzQ0IzCis6MTA3NUYwMDBCN0NGRjM5MjY2RDg5NzBCMUIxM0QyMDJEQjNDNjU3RUE0Cis6MTA3NjAwMDBDNkRGRDNFNkVBQjg0RjdDQUI5QUREREJFQjBFMkQ0QzQwCis6MTA3NjEwMDA1NEMzN0M1NUVDREMyQjkwQTc5MjYxMTQxRjgxNTdCRDlECis6MTA3NjIwMDBDQ0ZGQUNFQzgxNkY0OUIwN0MxMUZBRkU5RDE2NTI1MTMzCis6MTA3NjMwMDAzRjk2OTBGNzVBNzQyQzRGQjY5ODU4OUExRkZGQ0YxMDY4Cis6MTA3NjQwMDBFNEI3QjQ1RjMyMzkwQ0Y5MDg2NzAyMERBMzYxREZGOEMzCis6MTA3NjUwMDBBMDI1ODRFRkVGRkI3NjI0MEM3OTQ0Q0E5MUQ3RjAzQjQ4Cis6MTA3NjYwMDAxMkZERkMxRTU3NDgxNUU0QkZGNjU4NDAzRkRCRkE3NzgxCis6MTA3NjcwMDBGODZDRTdGQzdERUJBMkVCNUQ0MEU3Qjk1NzkyNkY4NEI1Cis6MTA3NjgwMDBGOUEwQkUxMEY5NTQ1N0I0MDI4RUVGMzBDMzMzRDg5NzI3Cis6MTA3NjkwMDA5RTc2MTI3REEyMUNCRTY3OTI5NDZFMkRCNzNERjc1MTY3Cis6MTA3NkEwMDBCQjBERjZENzRCNENBNDdCM0YzRTkzQUQxQ0RGMTNDMTAzCis6MTA3NkIwMDBERjJEN0M5MUUzNzU2RUQ1MzlDRjRERDZCN0E0QkE2NzZGCis6MTA3NkMwMDA4Q0VEQUYxQjE5RUVCQkNERjU0Q0JCREM0RkU3OTkwOTM4Cis6MTA3NkQwMDA5N0Q4Mjk5RjRGOUY1QjM2MTRGMEY1QTBDNzc5OEY1QzMwCis6MTA3NkUwMDA5NDhBMzkyOTUyMDI2REUzODUzMkNBMjFGRkRFQ0E4QUEzCis6MTA3NkYwMDBGMUUxQTEzOUI2RjE2NzcyRjg5NTIzM0Y0MUZDNjY5NTM3Cis6MTA3NzAwMDAyN0M0Nzc3NzZBMEI2RDc5RkYyMzYyMERFQzNCN0VDRDQyCis6MTA3NzEwMDBFQzdFOEMzODg3MUM3RDdENEYyQjFDNDk4QzVFRTlCQzMwCis6MTA3NzIwMDAzNzMzOEJERkYzMkM2QTk3MzFFRkI1NjgwQUVBNTA1MjkyCis6MTA3NzMwMDBENDRBMzBCRjZBQTcxMkE5MDBGRTdFODhCQzlDNjMyOTg4Cis6MTA3NzQwMDBCMDJCMTMzMjkyOEE2QTUxREMzOUNFQ0U0NUI1Q0Y0Mzg1Cis6MTA3NzUwMDAxQzQwREMxQjVERDVDNkM2MUIxNThFMUMwRDQzRkNBNDRFCis6MTA3NzYwMDA1QzQ2N0I3OTM0ODlFODMwRkU2ODQzMjY3MEFGNjgwQzRDCis6MTA3NzcwMDBCMThENDNFQjIzOUI5REUzQkFFMTJEMEFDOEY4REQwMkVFCis6MTA3NzgwMDAwMUNGMjhCMjVGQjdGMjcwN0M5MkE0RkQ0NzUwMzc2RkVCCis6MTA3NzkwMDA3ODFBRjhEQ0YzOEMxMUVEMkVBQUE4NDg5MTM0RjM5MkY0Cis6MTA3N0EwMDBERTU2MzgxNzNBNkJGRTAxQzY2REYxRjdFNURGMDU0MThECis6MTA3N0IwMDA5RjZGOTNEOEZBRTMyRjI4OTFERDQwRDc1QkY3NjBCQzI5Cis6MTA3N0MwMDA2NkM0OEE0RURDRDczQkZEQ0NCRTVCNERFRDAxQzMwM0U2Cis6MTA3N0QwMDA3NjBBMkRDNzY2RTY0M0M1QTQ4OENCQzZGRDIzMkRGRkQ4Cis6MTA3N0UwMDAzREU2QUZERUU4ODc3ODk4N0ZEQTQ2RTA0M0JGMUFCRTExCis6MTA3N0YwMDAxNkU4RTEzRkVBMjE3MDhFRTlCNzEyMjg3RkE0ODREOTA4Cis6MTA3ODAwMDAxOUY3OTYxNzY3ODNCQ0Y5OUJCNUI0RkU1QTlCREY4M0MzCis6MTA3ODEwMDBGMDZERjM0QjJBRTQ4MzUyREVDMjc1QTk4REUxRUZDRTAxCis6MTA3ODIwMDBBMkQ1RkY5NjZGM0QwMkYzQkM5RjFGQzM1MjNDMEYyREE0Cis6MTA3ODMwMDBBQzBCMDM3RjRFQkZBNTFDRTM1RkE3M0IyNThDN0ZCRDMwCis6MTA3ODQwMDAyRDI1MzU0OEQxNUU3QTc1RjM4NDJCMjgzRUU2RTRDNEI1Cis6MTA3ODUwMDAxRTg1N0U4RDc1RERDRkIzMzNEQUU2NTJGMEVCNkEyMUZCCis6MTA3ODYwMDBDRjJGMUZBNjhCMzM3RjcwQzQ1QjExMTVFRTgzOEQ1MDE1Cis6MTA3ODcwMDA1MzlFMjA3Q0NGRTdDOEFCQUM4QzU3MDNCRkVCNzAwM0EzCis6MTA3ODgwMDA4NkQyMzM1ODYyQkQwQjdFNTM4MERGM0Y1MjQ4NkY1QzE3Cis6MTA3ODkwMDAwMkZGNjgyQTIxNkZEOUU4MDYzRTlEQkQwRTY3QkFGNjQxCis6MTA3OEEwMDA3QTI2RkMwRjU0RDZEM0JFNkY4RDg1NUQzRTYyNDk2ODQzCis6MTA3OEIwMDAxNzI0RDk3NzEwQ0NDODA0ODA1MzA5MUQyRDI4QjFFREE5Cis6MTA3OEMwMDA3MzVFQkUzRUVGRjQ4NUZDN0I0OTE2Rjc2RjIyQzRFRTczCis6MTA3OEQwMDBERjdBRjlCQTQwODdCRjY1RUJFRjA5MzlFQjhBRjlGOTJFCis6MTA3OEUwMDBBRTQzRDhEREQyMzM3RjM5MDE3NDVDRjVBNDA3RTM5RTQzCis6MTA3OEYwMDBEMzlGRjRBNDJFQTdGNTY1REIyNURDNjdFNDQzNENBRkVBCis6MTA3OTAwMDA3RkIwNEI0MkI5NEYwNTM0RDQwM0VGOUIzQUQ2OUJCQ0IyCis6MTA3OTEwMDBERDFCQkU0NEVCQkQ0RjJBNjQwN0EyQTUwRUJGMkY3NTI5Cis6MTA3OTIwMDA0MkVDQTcwNzU4N0QxMTc3OTA5NjZEM0YzQzFGQzY2QkMwCis6MTA3OTMwMDAzOEUwMjVCMDRGMkNGQkM5MkQ1NzdEODlENjZGQTE3QzJGCis6MTA3OTQwMDAwQzREOTZFRDZFRDU4NkQxRkFFMkE0RDQwNUY1NTNEMzRECis6MTA3OTUwMDAwOEYyNTkzQzU3NEI0MjVFQ0JBOTYwNzdDMTM1MDZFRTIxCis6MTA3OTYwMDA2MzI0M0MwRUNFQjdCQjBCQUVBNkZDQjgyNEY5QzQyQ0U2Cis6MTA3OTcwMDBFOEI3NjRBRjA0OTE1NEJBOEVERENGMTc1MkI4OTY3RDQ0Cis6MTA3OTgwMDA1RkMyRkQ3MUU5OUUyQzEyQjZFMUYzMDQ1RENBRTVGNDE1Cis6MTA3OTkwMDBGRDBBQkE0RUQwODdCNzkwQzQyQ0EwRDdCMkREOUIzNDc1Cis6MTA3OUEwMDBGQjNFRjc1RTRCMTlBNjdFODhGQUIyRUZEMzc5NjhCRjJCCis6MTA3OUIwMDBFNTNGOTQyMkIwQzRFNTkwRUYwMEZCRTU0RjdDNzUzQkJBCis6MTA3OUMwMDAwRDU4NUZBQjU2MUE4MDc1QUREMUEwREQyREM5MDU0RjlFCis6MTA3OUQwMDBGOUMyMDBERjc2NkQxNjdEQkY2NERCNzY2RDUxMzlFMDRDCis6MTA3OUUwMDA4RERDMDhGQkVBRDIzRDE3OTJCMDhEQUUyNzNBMTVGNDM0Cis6MTA3OUYwMDAxNzU2RTRFODNCRjA3QkEyODYxNTlBOUIyNjFFRjI1RUEyCis6MTA3QTAwMDAwQjcxQzBCNTg0RUIwREVBRjc2OTczNkNFRDlGQ0FDQUMwCis6MTA3QTEwMDA0MTNFNURCQTQ3NzFDQzIzRTgxRjNGNDZEODNEQjQ5RjM1Cis6MTA3QTIwMDAwNUYwMUU5QUEwOUZEOEFGMDRGRDU2ODgwRkU1QTlCREFBCis6MTA3QTMwMDA5M0QzQzEwM0RGRDUwMjc4MTJENEJGODFGMkZFOTYxMDMyCis6MTA3QTQwMDA5NjBGQjY4NDkxNEU5QjAxOEZFMzU4NUUwQTNDQTc3MjU1Cis6MTA3QTUwMDA4QkRGRjMwQjVBRjBBMTI5Qjg4RjYyNTU0M0ZFNjU2RTk4Cis6MTA3QTYwMDA5NEQ1MEJBRThGNDlFMTczRDhFOUEyRENFQzg5MkQwMEU3Cis6MTA3QTcwMDAyMzY3NkFENkY3NjZBQUQ0MUZEQkFDQzU2RTg1OTBCNUJFCis6MTA3QTgwMDBBOUVFOTgzOTgzRUU3OThENTlEMUM5NTlCNjczQkZENTBFCis6MTA3QTkwMDBGQzNCMzIxNzY3ODU3MUZEQUIwQjM1QzRGN0U2MUIyNjNGCis6MTA3QUEwMDBFRkU0RjEyN0RDMjczN0RGQjBFODUxODg4RkQzRkU1RkEyCis6MTA3QUIwMDBDOTAyRkY4MjlGRkY2NUVBNUYzMEJGQ0FEMUJGNjA3RTA3Cis6MTA3QUMwMDA4M0U4M0YwQkZCRUJFN0VFQkY3OUZFNjVDRUY5RTcyRkNFCis6MTA3QUQwMDAxMUZEQUY0MkY4OEQ3M0MzNUY3MEUzNTRFN0ZDMzczNjk2Cis6MTA3QUUwMDA2MkZGMjYyRkEzNkY2RjhFOEU3OUQ2NkRCRTQ4Q0EwM0I0Cis6MTA3QUYwMDA3NDU2MDk3RTg3NUFDRDJEREQwMUVEQzRCRTQzMkQ0QjUyCis6MTA3QjAwMDAwQkYyQjY4REJEMzkxNUVCODg5RDhGQTZDRDA3MzgwMkQ3Cis6MTA3QjEwMDA1NEJBRUM3Qzk0NURFNTc3Qzg1NThFOTVFQkE4MEZBOTE3Cis6MTA3QjIwMDAxOUU2Njg5RjFGMkQ3NkJDMUY1QTc3ODE4QjJGMERCQ0RECis6MTA3QjMwMDBCNzg4NzUwMDBBMEM3MzBBQTczNjRDNDM3RDU0M0Q4Q0Y4Cis6MTA3QjQwMDBEOUMxNzcxQ0YyNjFGRDhFQ0JEOEZBRUUxODY2QTAxQzY1Cis6MTA3QjUwMDAwM0NDRTA5N0RGQTFDNTJFQjY3RjI3OTZBRTRCODJDMzNDCis6MTA3QjYwMDA5QzlCOEREODlEQjA4RUZFRTc2MTE5OUVGQjc5QkU5M0RDCis6MTA3QjcwMDBERjRCNTBERkFEMjk5QUJDMzM2RUMzNjdDNzQ4Q0EwRkNECis6MTA3QjgwMDBCNERFOTZBNTMxQkM3MzNBQUMxOUI5Mjg2NEI3RDc1NzlGCis6MTA3QjkwMDA4RkQ0RUFDMERGODBFNzM3MTkzMDVGNzQzNUNDRDdBNEMzCis6MTA3QkEwMDBGNTk2ODJEREUxOUVDNzVCNUNFNTk4NDcxRkQ1ODBGM0MzCis6MTA3QkIwMDA2Q0NBNjJGMTU0MzE4Rjc3NTQ4MzZCMUVCRDZFMDc3RkEwCis6MTA3QkMwMDBDRUU3NzkwMEY4MkNEMzNDNkI4QTJGNzNBRTY3RDQxMkMyCis6MTA3QkQwMDA5Q0U3NjFENzNDNkI0NjJENzFDREUzNjdFQkExQ0ZGOUY0Cis6MTA3QkUwMDAzQ0M5NzNDREUzMUQzM0Q1Qjk5RUQxOEQzOENGM0ZCQjkyCis6MTA3QkYwMDBENzMzQkFEMTM1OEY4MUYzQzA3Mzk4ODcxQUJFNjFGODM1Cis6MTA3QzAwMDAzRTk2RTZFRDVEODRGNDdGQzY4Nzc2OEVFNjhEM0Q4NkYyCis6MTA3QzEwMDA3NkNFRUIzRUI0NzM2ODJCMEJCRkEzNTVDNkZDREJEQjAzCis6MTA3QzIwMDBCMjcyOTEzRTY3RkM5NEZFODY5RENFNzE5RTc3MTA0NzlFCis6MTA3QzMwMDBCRkY4NjYwRTIyNDk1Mjg4QTg3RTVCQ0U3OUIwN0VFRkVGCis6MTA3QzQwMDA5QzUxQUQ1MDFFOTgxRTVBMDBGRUU4ODMwMThDRTM3REM2Cis6MTA3QzUwMDA3MDYwQkE3NjUzMUE3RDc0NzNDMjczQTJDN0M2Q0Y3REEzCis6MTA3QzYwMDA3QTk1Qzc2MzQzNTlFQzFDNTJENDRGRjBGOENGNUIxMEEwCis6MTA3QzcwMDAyN0EyRTVEQjFFODJGRUQwNzExRTJGRUE4N0I3MTVGQjE3Cis6MTA3QzgwMDA5REUwRTc3QTI3QjZCMTdERUFDQ0E2NjNFQ0JCMzk3MUZCCis6MTA3QzkwMDBGMjcyRjk2NEY4MUUwREZCNzc3MzIyQ0JFMThGMzc3MTE2Cis6MTA3Q0EwMDA3QUY0RkVDNDlCREM4MUY0QjA4NkUzNzc3RjNCODczOEFGCis6MTA3Q0IwMDBFMjg1QkYzOUY0QjVFNzU5REUxRDE5MEVERkNCQkJBRTQ3Cis6MTA3Q0MwMDBFMzg5RTdBMEQ5MkJEMjgyOTEyQkU4N0FFQkY2NkZGMjA5Cis6MTA3Q0QwMDAwQ0E3RjUwRjNDM0RGMzIzODY2RDlDM0EwRkRFQkIxN0Q2Cis6MTA3Q0UwMDA3RUM4Mzc2MjFFODdGREZDQ0QwNjY3RkQwNjk3M0RGRDA5Cis6MTA3Q0YwMDA0NjU2QjEzODlGNjVGMzg2OTMxRUEwRDczQzM4NjNBNURFCis6MTA3RDAwMDAyNEJDMDE0QTRDQkUzMzkxNUVGMzRERDY1N0MwRDM3NEE4Cis6MTA3RDEwMDA5Nzg3QTQ3MEJGRUJDOUM3Mzg2NzNDMUZFMzM0MzFCMTA0Cis6MTA3RDIwMDA2RkI5RTA5QkVGRDFBRDI4QTVFN0ZDM0IxNUM0QTMxQkMxCis6MTA3RDMwMDBERTlFNDM1OTk2NENGRDlDOUVDRUZGRUQ4MUZCM0IwMzlFCis6MTA3RDQwMDBDMTdGRTM0QUU3N0IxMkY3MzhCRTQzMjBGOEUwREFCQTk2Cis6MTA3RDUwMDBFQTlEQzc2REZDRjE4REQ4RUM5REM3MUQ3ODlBRTNBODBDCis6MTA3RDYwMDBERkQwRkMwRDQ3RkIxQjU3MkU3MEJDNUYxMDVGRUM3ODFCCis6MTA3RDcwMDA3RjUzQzdBRDhFRkFDRDg5M0IxREVENkZFOTZDNzVCQ0E1Cis6MTA3RDgwMDA1RjlDNUNFQjc4QkY3NENGMjY0NzdENTlENzE2NDdGQkM1Cis6MTA3RDkwMDBBNjAzREIxREVGRTU0M0UzRkYwOUZEQzA1RjI5NzhDRkI0Cis6MTA3REEwMDBGOTQzRTNDNDA2QjBERjNFMzREOTc3RkVERkUxRTc3NzdECis6MTA3REIwMDBFRkYxRUZGRDJDMDdERTlCMDJGMjMzNDkwN0JGQTFDOUFCCis6MTA3REMwMDA0RkU1OTlEQTEyMTM4Q0ZDRDUxRDUzNDE4RjEwRkNBNDlBCis6MTA3REQwMDA0Njg1MzE3Qzc1OUMzQUJCNTNGOEJENDRBNTUzMjNBOTE1Cis6MTA3REUwMDAyMTcwQkNEMjFGODdFRDU1RkFERkFCM0RGNEZEQTRDQzZBCis6MTA3REYwMDBFRjk1NEUzNUVEN0JCNTQ3NEQzQkVFMjlBOUI3MTRFQzE5Cis6MTA3RTAwMDBDN0Y4NkJERUI0RjdCRkZCRTU5MjBDODdGRDIyRDNGQjBFCis6MTA3RTEwMDA5MzMyNjlCMEZCNkZGMzBDMTYxRjdBM0U2QkRBM0MwM0FBCis6MTA3RTIwMDBGQzIxOERDOTdCRTNCRUMyNjlFMDM3MzQ2QUE5RDI3NEY0Cis6MTA3RTMwMDBFNzM2N0RGMzc1NDlGODlEQzA3OTA2OTM5N0M1NDlFNzA0Cis6MTA3RTQwMDBGNzZGOTdFRTE5RTM5MEZCNTdGREIxNkIwQ0RBRUVFNDk4Cis6MTA3RTUwMDA2MTg1N0QyRjJGRjVFQ0E4QUY1RjA0RjM1QkYzRTAzOTZDCis6MTA3RTYwMDAzOTkwOEZGQkUzMkIyREQ2Q0VFM0Q0MEY3OEI1QTUwNjQyCis6MTA3RTcwMDBDQjdGNkQ4OUVFM0M0RTFEQjUzNzVBRUFCMEZFREI5NkRFCis6MTA3RTgwMDAxODk2M0QyRDBENThCRUQ1RDI4Q0VGOEZCN0FDQzRGQUU1Cis6MTA3RTkwMDA4OTk2Mzg5NkVGQjQ3NDYwRjk1RTRCMDJERjlGNkNFOTA3Cis6MTA3RUEwMDBDNEZBMDcyRDQ5MkM4NTFDMDg3Qjk3NDRCOTNEMjkwRTNGCis6MTA3RUIwMDA0QzA4QUI5RkU2NkI1MDBBNDQxQzMzODJERjhGM0E2RDRGCis6MTA3RUMwMDA5QzI5MDUzQkZBRjRBQjVFQ0NCQkNEODQyNzM3REY2NTNDCis6MTA3RUQwMDBBNjlGODVGQkZEQTJBNDMzQ0UyQzRBOUY5RkQxQzcyNzI2Cis6MTA3RUUwMDA5MzFBQzg5MTU4M0I1NkMzMzg5QUZGOTkwQkQxMUVBN0Q1Cis6MTA3RUYwMDBDRjU1QzJCRUI3MUNCMTdGNEZBMjZGN0M0ODFFMUUzQTQxCis6MTA3RjAwMDAzMDlENDRGQjEzREZGQkY3QzkwQkNCODEzRUM1ODgyN0FGCis6MTA3RjEwMDBGRkIzNEEzM0EzREJDRUM4RDcyRjFBMTg3RjY4RjMxNUY3Cis6MTA3RjIwMDA5RThENDdFOTk5REY4QzgyRjhENEZCRjkwMjlGRERBMzhGCis6MTA3RjMwMDAyMEI4QTUxQUQxMkRDMDg3QTdGNzdCNzE1REE3MEY2NjYyCis6MTA3RjQwMDBCMTdDMTQwOEFBMEQyMkZGNzVFOTFFNUZEMkFFMUY5NjAwCis6MTA3RjUwMDA3NUU1MjQ5REZBQTIzMDY5RDcxN0E3OEZFRTBDODJEQzU1Cis6MTA3RjYwMDBBRjA4MjlDOUUzOTM4MDNGMkNDRTFGOENFRkM0RjhDQjE4Cis6MTA3RjcwMDBCQThBOTI4NjYzMUM2N0ZENzQ0MkFBRTlDMkI4NTgzODZGCis6MTA3RjgwMDBGQkVBMzRGRTg3Mjg1Nzg0MzQ5Q0U3QkQzRDYzMzBGRjBECis6MTA3RjkwMDA4MEZBODlDOUUzMkNERTk5NjRGMzg2OTI3NkJFNkM1QzI0Cis6MTA3RkEwMDA5OTk1M0MzRUE0MUZCRTRDRTM3RURFRjAxMUIyOUZGQ0NGCis6MTA3RkIwMDA0RUNGN0MwRjc3QTA5MkE4RkZBNkUxRjcyRDBGN0FDRUM3Cis6MTA3RkMwMDBDMEJFRTNBNUZGN0Q4MkY5NDIyQUQ2QzVCODRENUQ0QTAxCis6MTA3RkQwMDBEQzBCRjc3OEM5NUVDNzdDQjQ1RjU4RjhFOEY2RUZFNkNCCis6MTA3RkUwMDA5QzRENzc2NzNFRjg2RjgxOTc3MERGNjZGN0NBNjM3MEM0Cis6MTA3RkYwMDBBRjlDOEU3NzRBMzUzQUE0OEJGQkVGOTUzNzcxQkU1QzA4Cis6MTA4MDAwMDBBNkY3NjgzMUZBRThGREZENjNDRTk5MEZGMjVFQ0I1MTE5Cis6MTA4MDEwMDA1MzFEMEI3OTA0MDlGQzYwNDQ0M0Q3RjgxOUEwMUZERkY2Cis6MTA4MDIwMDBERkJGQUEwMEUyNjk0Qjk1RDM3N0E0QkIyRkZCOTFDMUI4Cis6MTA4MDMwMDBFMjZDMjRFOUU5RURCMUFENDdDNDY3MDhBMUUzRUFGRENDCis6MTA4MDQwMDBGMDAzQTc5RkIwRDVEREZBNUE5NDcyODBDNUREOTdFRjkzCis6MTA4MDUwMDAzRDM2RUI0QjE0RkVFNTA3RkVBODAxMUMwNzhDOTgxQzZGCis6MTA4MDYwMDBCMEFENUZFMkY3RUE5N0VDNzk1MzgzRjVCREUzODk5NzBBCis6MTA4MDcwMDBERTc1MEUzRDc1MzY5QzQ2Qzg3MTFFMUEyN0REMjBDNzc5Cis6MTA4MDgwMDAwQkQ5NkYzMDAwM0Y1REZCM0ExNUNENzc3RkU5MjFGMENBCis6MTA4MDkwMDBCQjBFRTJCQzQyREM3QkE4MjdEMTIwRTA2QkUxRkVBNTUxCis6MTA4MEEwMDAxODFGN0VGN0E5MkJCOTNEOTc5ODBDRkNGMTNFOTE2QkY4Cis6MTA4MEIwMDA2MDdERUY5Mzk3ODI5MzZDRjgyQjA5MzAzRjg2NzQzMDg0Cis6MTA4MEMwMDAzQjQ2REMwQkE0RjZBQ0MzQUVCOUE1RDM1OTVGNDRFNjdFCis6MTA4MEQwMDAxNjgwREU1OEY0QTAwN0JFQTE0QTE2MTNEQkY3OTdFODE2Cis6MTA4MEUwMDBCQUYzMDJDQ0RFQkQ4NTM0QUYwNjdCNEVGNTMyRkY2MEJECis6MTA4MEYwMDBBMTQ5RDRFMTU0OUYyRUZCRjE0MzkzQzFFRUJGMzBDMEEwCis6MTA4MTAwMDBDRTFENDUxQzYzNzEyRUIzRjc5NkU0MjUzNTM4NEZGODI0Cis6MTA4MTEwMDBEREZFNDlGM0JFMDREQ0U3NERBRTg2N0Q5OTY0QTczRkUyCis6MTA4MTIwMDBGRkJCQTlDMzA5REY0MEYwQkJFMTE1RjdERENGOEFBNzhDCis6MTA4MTMwMDA3MDM4OTQzRDUyREFGQ0I0MjkwMUNFNzc1QzhGREMxM0ExCis6MTA4MTQwMDA3MERBRjk2QjVDRjVEQTAwOEZCMzJBNDQwMTNBQkY2RjNECis6MTA4MTUwMDBFQTcxMzkxQkRGRTNGRERBRjgzRTZGNjQ1NTE4QkVBN0ZDCis6MTA4MTYwMDAxNThEMDI3RjUxQkI2MDAyQjFCNUZCQkQxMUMzRTcyNzdFCis6MTA4MTcwMDBBNTE3MTdFMUZENzIzNTM1MDFGM0YxNzRBMkRBN0Y4RjhGCis6MTA4MTgwMDA0MUYxMDcyNzkwOEIyMTRFREE4QzRFRkQyQTVGNzAwNzU0Cis6MTA4MTkwMDBENDU3MDdEODNEQTgyNjkwNTNCODNGMUQ5Qzc1MTRFMkNDCis6MTA4MUEwMDBGQTNBNDlBNEFDMjIzOEZGNzZDNkJGN0Q2MTY3M0QwQjIxCis6MTA4MUIwMDBFNDA5RjQwOTNDMDA3QTQ0MDhDNjhCQjJDQTlDRUQwMjdCCis6MTA4MUMwMDAxMTY3N0Q0OTFGOUU1MjhBRkRERTQ3NTAzNzUyRjg3QjZBCis6MTA4MUQwMDA0RDU1RUE0OUJCRERCQzVDNjdGMDEzRjg5RTJBNkQ3RjA0Cis6MTA4MUUwMDAxQkI3RTc5NzkzNzAxQ0YzMTY0MzhDMEY2RTlCQ0RGMjcxCis6MTA4MUYwMDAyNjZFMEI4NEYxNUVCMkE0NUE3ODNGNjIwRDc0QjVFRDIxCis6MTA4MjAwMDA2MzREMUY0OTI0NjlEM0VCNEQ2QUFGMDY3Q0Q5RjQ5MUM1Cis6MTA4MjEwMDA4QUNGMUYzNjYyREYwNkJDNkFDNDQyM0I1N0E3NDg4MzM5Cis6MTA4MjIwMDBGMzZCRDVBODcxRDhCRDY0MDRGRjJFQTAyQjdGNjE3REIwCis6MTA4MjMwMDBDMDc0Rjg3QjQyMkY3OEI4NUVBNEZBNjI0RDIwMUZGNDE4Cis6MTA4MjQwMDA2MEVGMkM3NkFFREVBM0IxRjMxREQ2NEVFQjZGQjcxRUZBCis6MTA4MjUwMDBFMEM4RDRDRUQ3REY2RTUzQkE3NkNCN0VGQ0Y4NTM3MTJDCis6MTA4MjYwMDAyQUVGNEI3RUY0OUQyMDFDQTZCREFCMjYwQTIwRkZBMTYxCis6MTA4MjcwMDA3MTc3N0IxMEY4RjgxRDM1MUU4NDc1QkY5QjRDOUZGN0Y2Cis6MTA4MjgwMDBGRTczQUVFRjIwREYwOUVFQzkyRkU3NzQ3QUVGMDdGNzMwCis6MTA4MjkwMDA1RTA1NzgzRkIzREI4M0Y3RUM5QkY2Nzg1MzVFNEFDNDA4Cis6MTA4MkEwMDBFNUZCMTczMzdFREFFMzdEOTNENUQ3RTBFRjJFMzQxRDVGCis6MTA4MkIwMDA3MENBREI5MkM3QkU1MzEwQzZDM0JEMzhGMzFCNDkwQTUwCis6MTA4MkMwMDBFREU3RTVCQjdFM0YwQkVDOTEyNkQyOEI3QUMyREQwRjRBCis6MTA4MkQwMDBFNkZGMjgxN0Y3QUYwNTcwREZERkZENUVFNDVCMzU3MTYxCis6MTA4MkUwMDBCRTZGREE3RjJGRTY1NTM1RUQ5RjhENzk1NDREMkUzOUNGCis6MTA4MkYwMDA2RkUwN0VDODgxODBGMzc3MzYwNDNFNDg5MkQ5QzVBQkUzCis6MTA4MzAwMDBCRUZGREQwOTZGNTI3ODRFRUVGQTY1NTA3MkM0OEY5ODQ5Cis6MTA4MzEwMDA5RTM4REQ3NUQzMjM0Rjg3MzNFQkY3MEZCODVGREZERjcwCis6MTA4MzIwMDAyRjg5RkRDMjA3OTgxRDRGMEVCMkIyRDE5MzBBODJERjhBCis6MTA4MzMwMDBENEI4REQxM0ExMUE4NDM0M0VCRUYzRDFFRjAxN0ZCRjYwCis6MTA4MzQwMDBFNkM1NzhDM0QyQzc5RjdCRTUzMjVBNUZGQTg0MjdBRjcwCis6MTA4MzUwMDA5NjJEQzM4MDNDNjA0MTE3QjhEQjBFRjlCQTgyMEU0QkY0Cis6MTA4MzYwMDBGRUU1MzkyRDdDMTE3QjdFNzc2RTNGM0Q5NjNFNzE1ODQwCis6MTA4MzcwMDAyMzE3OUQ4REJGRTk1RDg3MzVGQzRFOTA5QjJFNUQ2RjY5Cis6MTA4MzgwMDBDRTAyQkI3QkQ1RjdGRkE0ODE3Q0JEN0I0ODIyNDM4QjBCCis6MTA4MzkwMDBDRUVFREZCMEZEMzlCNEVCMDA0RjQ4NDc0RUE3M0VCQUYyCis6MTA4M0EwMDA5RDQ1QUZENDU1NEY1NzYyM0IxM0Y2QjE4MUU4RjUzRDdCCis6MTA4M0IwMDBFMDk5N0NFNEVCMUYzRTBERTcwNUZGRUE4RDAwMUUxQUY1Cis6MTA4M0MwMDA3RUY4QUQyMEFDRTc2REI1OTlGMUY3NDNFRDA1NzA4RTAxCis6MTA4M0QwMDBERUUwODkxNzk4NThCMkU3MEQwRkRGOEU3Qzc3Q0JCMUJFCis6MTA4M0UwMDBEQjBCNTgxRTk0NTVDODdGMTdBMDEwRTM4MERCQUVDMThECis6MTA4M0YwMDA3NTJFMjIzMUU0QkY4Njg3OTQyODlDOTM3REE4OTI5QTlCCis6MTA4NDAwMDAyN0QyQzhDN0U1NDFBNkM3REVERUUxQzU4RkRFQkQwREI4Cis6MTA4NDEwMDAwQTE3RkNDNTk3OTQyNEJCNkZDQkYyMTI2RjE3RTcxRUE3Cis6MTA4NDIwMDBGMERENDY1QUZGNTA2N0Y0Q0EwRkNBRTI3QjU2QkE4M0EyCis6MTA4NDMwMDA2Rjc3QURFOTA2M0FCRDM3RDIxQTBBRjE0QThBODczODEyCis6MTA4NDQwMDBDNzlCMDQ3QTQ4MzkzNjczMjhBMzEzMDlBQjkzNzkzRjQ1Cis6MTA4NDUwMDBBQTI3QTdDMzczNjhERkVEQjE3QzEzMUNGREY4QkVDNjY1Cis6MTA4NDYwMDBFNkJGOERDRjRGRTFGNjgzN0RGNjc2MDFCNTc3RDJBQ0NFCis6MTA4NDcwMDA2RjY5NTBDODNGQjUzRjZDN0M2NjkzNzMyNkY3QkJENkQ3Cis6MTA4NDgwMDAzMjM5MTc3MjlGOUM1MzAzRUZGRkVENjUyNjQ3RDAwRkRCCis6MTA4NDkwMDBGNjc5MEE1NzZBMjhCRTNGN0NCNTg0N0FDMTRCNTJFOTA3Cis6MTA4NEEwMDBFNDdCOTc4N0NCQjdGMzNERjVDQUQxQkUxNTdDNDJFMTlCCis6MTA4NEIwMDA1NzYxREZFQUU3MTc3NkNFNEJFOTgwRjZEQkEyMDc2OTYyCis6MTA4NEMwMDA3RkJCN0QwRUYzNjIzQkFERkZCOTZEQkZCRjg1RUI4MzE0Cis6MTA4NEQwMDBDQjgyQUVERkRERDk5NjNGQThFRkU0MzU3QTkyOEY3RTZFCis6MTA4NEUwMDAwRkU0OTdDQTJCRUMzRjhEOEY3QjMwNEZFNDBGN0I5RkJGCis6MTA4NEYwMDA3REU1M0FDQUU3N0ZFODEyNzJFQkQ0QTc2RUI5NkREODcyCis6MTA4NTAwMDA3NzA5NDkyN0I3N0YzMDIyMjRBRERDRDJFNzY5RTVENjY5Cis6MTA4NTEwMDBFODQxN0VGRTVCRTk1MzgxQkY4NTQxNjc5RTkzRDA4RjIyCis6MTA4NTIwMDA5OUYwRThENjhGN0YwRDg0RDlFRjIyQjhGNDIzRkRGN0I4Cis6MTA4NTMwMDAzMjk5N0MzNjFGMEFGRTEzN0NCN0U0OUY5N0UxRUY4M0U0Cis6MTA4NTQwMDBGNEYxQTdFMEJGM0VGRTE0RkNFNzVFQUYxMzdGRUVGNzQ5Cis6MTA4NTUwMDAxNzgyQTEyMkUyQzVCNEY0REM0M0UyMDE4OEE3RkU0Q0Y1Cis6MTA4NTYwMDBDMTc4RUEyOTBBRDM2QTRBRTc1MzdCOEJGMDFFNzFCQkI0Cis6MTA4NTcwMDA4RkY5RTdBN0NDREU2MDZFMzk3RUZGMDZFQkJERjlEQTM2Cis6MTA4NTgwMDA2QUQwMTdFMjc5QUY4RkM1QkY0RjQ1N0I4M0Y2M0M5MDI5Cis6MTA4NTkwMDAzNzBGMkE0MTM4RUZFQTQ5OTI5QTc0RkUwOEQ1QzgwODg1Cis6MTA4NUEwMDA0NzBGQzlGNDlFQzU4QjRGODFGRDA3RjNGOTQ3MjU4MTFECis6MTA4NUIwMDA2RTMzMTU2M0Q0NEFGMEYzMTNFQ0JFN0M3REVCQjU0MTBBCis6MTA4NUMwMDBDODUzMzg3NTcwQ0M0NkQwNUYzN0JGQTAxMEZFQkI4NTRFCis6MTA4NUQwMDAyQUU0OUJEQ0M0RTlGRjBFODk2RjlFNEFENzc5RDM0MTE4Cis6MTA4NUUwMDBFNjU3RDRBRjRGQ0YyRjRCNzhGQjQ1QzY2RDFBRTgyNTIxCis6MTA4NUYwMDBFQTE3QkM2NThGODcyRkUxQkZDN0Q0QjBDREY1RkNFMDhCCis6MTA4NjAwMDA5NUM4NTc0QjVDN0MxNUUzN0VFM0UzODJBRjI2OTI4OUU1Cis6MTA4NjEwMDBEQzZGOTNFREY5NkMzMzk1RjI4RDYwOTc5QzNBQ0FFMjZBCis6MTA4NjIwMDA5MEE3MEYyQTQ4OEZEMzdCMjU5NkZGMDRGMUUwMjlDMDNECis6MTA4NjMwMDAwRkJEOUEzRDhGRUQyNEYwNUY5QUVGMUJGNEJEN0ZGMkUyCis6MTA4NjQwMDAzNzkzRUZBMjREMUE5RjdBN0RDMjU2NUE5RTdDRUFCNUE3Cis6MTA4NjUwMDBEMjlGNDJGREM3QkYxRUY1M0EzOUJCRkRGNDQzN0ZDNjJBCis6MTA4NjYwMDBGM0VDNTM4N0JDMDhDN0E5NDMzRjFGNzUxN0Q0OUZGNjg3Cis6MTA4NjcwMDBFMjc3NkE0RURERTM2NUY5OUY4NzAyQzlCMUYwN0UyNDk3Cis6MTA4NjgwMDBDQjE3NUFGNUIzM0Y0RDYwREY3RjY5NDNCQUJEMUE2NDFCCis6MTA4NjkwMDBGRUQ4RTk4M0ZGRkU1QkM4MUYzRTdERDAxQjg2NzUzNDg0Cis6MTA4NkEwMDAxRENBQzJGM0FEQTZBNzdEMThBNzM5RjVCMzNGNERCNkQ1Cis6MTA4NkIwMDBFNzMzN0RENkY1MkNFN0RGNDEzQzE1MjA3NTkwQTc3QzhDCis6MTA4NkMwMDAyQTg3OUQxQjM0RkQ3NENBNEVCODQ3QjQ2Q0ZGNjEwREY4Cis6MTA4NkQwMDBDRTYzQTYzRkYzOTcwOUEwNzc0RUVENjNGNkM0MDc5RURECis6MTA4NkUwMDA5RTg3RTE5Q0Y1NzdDMTFCRDc3ODIwQkUwQkZCRjUzMDQ4Cis6MTA4NkYwMDA0MjVBQjI5MzU3QzQ4RDc0Nzg2MTc4Mzg0NUYxMDBFQkQzCis6MTA4NzAwMDBBMjc4NjkwMDdEOTkwOTFGRkZFNzFGMTYxRjdGOUMwRjQ0Cis6MTA4NzEwMDBGMzM3MUVCQzE0RTVBNjFGMkY5MkM1OUUwNzkyNzBCNUI1Cis6MTA4NzIwMDA4OUFFOUYzRDNGRjRBNzA5NjAxRkZEQTFBQjE1RjdGOTg2Cis6MTA4NzMwMDA4MUQ2NUQ5OEZERkZEQUJBQTVENDYwRDY1REY1MEZCQjkyCis6MTA4NzQwMDA2RUM2RkY4NzgyNjE5NkY3RTc5MjgzQjNGOUZDQzc3NzFECis6MTA4NzUwMDA2MEZEODc4MTA4QzIzQjQ4RjlBRkZCODc1REZGQTdBNDk2Cis6MTA4NzYwMDBGQjNFNEFGN0UwQzA3NEZGMkZEOUVDNUNGODFGNkZEREM5Cis6MTA4NzcwMDAwM0QxRkQwNTRFRjc4MDA5NzkwOEE3N0VGNjE3OENBRjY3Cis6MTA4NzgwMDA4QkY1MEZCNEVFQ0RGRjQxRDcyREVDQTE3NTcyMjQ1MUJFCis6MTA4NzkwMDA1QzA0NzlEOEE5RUVCMDA0QkZDMzMzMzcwMTYxMjk4NUUxCis6MTA4N0EwMDBFNzVEQkJFMTdBM0U5QkY5MTc4QUM0RTIzNjY0MjQ4QjBECis6MTA4N0IwMDAxRjExRUU2RkY0RkQ1RUFDQzFFRTU3QTlDNjZBRjYzRDFGCis6MTA4N0MwMDAzMjM1ODJERkQ1NUI3N0MxQzIwOEU2NzY5MDhBNTc2MzdGCis6MTA4N0QwMDA1MDFGMzExNTdGRTdENkVENzdCNTQ5QzQ5MkE4RkRBN0E0Cis6MTA4N0UwMDA1RUYwRDVBMzYwRkY3QkNBRTQ5NDc3MDI5NjZGNDJCOTJFCis6MTA4N0YwMDA4NkM3QkQzQ0E2RTZGMDM3MEM5NzlGRTAwQjNCREY3QkJFCis6MTA4ODAwMDBGOTc4M0FBOTQ4QzBFRjc3RUI4NjZBMjZFOUZDNDYzNTQ1Cis6MTA4ODEwMDBGQkZENjhDOEVENENEOENFMERCREM0RDY5RjhFQjcwMzA2Cis6MTA4ODIwMDA3RTkzQzU2NjRGOUUyRkZFRkU5NENERkM0RjQ1QUFFODcxCis6MTA4ODMwMDA4NkJDNTgzMjVFNjZERjM1MjdFQzVFRjFCQTExOTFFNEYyCis6MTA4ODQwMDAzQUY0NDM5OTdGRDk4RkNGRDVERDgwNDc5NTUwRkY5MDdCCis6MTA4ODUwMDBBRDBGRkQ0QUMyRkQ0OTk1MEZBMTk2Qzk5NkNGRDk4RTlECis6MTA4ODYwMDBGQjRCMDNEMjg3RDE2MzU0MjNBN0NGMEEwNzNEMDRGRUY1Cis6MTA4ODcwMDBEM0QwQzU0MTBGODFERkYzQTU4QjlCMUU2RUJDRkYyMkI5Cis6MTA4ODgwMDA5QkM1RTdEQzc0NzJFNDgzRTQzM0JGMjQ0NTBERTQ5RkE5Cis6MTA4ODkwMDBFRkREODk3MTkxRjc3RkYwRTY1NUQwN0VFOTRGMTUwMjQzCis6MTA4OEEwMDBCRjhCRjZDMURFMDA0OTgxRkNBQTQ5MERGQ0FDMjVGQjVCCis6MTA4OEIwMDAxNThDMEJGRjVGODI0MkZDRkYwMDgwMDAwMDAwMDAwMDZGCis6MTA4OEMwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0Q3QjdDNTRENTYxCis6MTA4OEQwMDBCNUYwM0U3M0NFNEM2NjkyNDkzMjQ5NjYyNjMzNzkzMTAzCis6MTA4OEUwMDA0OTIwODI0Njk4MDQwOEE4MjgxMzAyMDg0MkFGMDM4QTQ4Cis6MTA4OEYwMDA2MDZGRDQ5MTY3MzA0RjkwQjZCNEQ1MUYwMzg5MzEzQzc3Cis6MTA4OTAwMDA2QzgzMjIwRjRCNzU0MDU0NUFBOTBEMTgyOTI4REE0MTVGCis6MTA4OTEwMDAxRTYyQUQ1RkEzRDI1QjZDQjEzN0UyMDMxNTA4MjlBRENGCis6MTA4OTIwMDBGREU4QkRGNjcyRDc1QTdCRUZDQzM5OTM4OTY4NkY3RjJCCis6MTA4OTMwMDBGN0ZCRTdDQjNGMjdGQjlDN0RGNjVFN0JCREQ3REFFQkYxCis6MTA4OTQwMDBFQ0I5NzQwOUZFQzYzMzc2NDk1QzE5NkI2NkNDQzU1ODIwCis6MTA4OTUwMDBFRENGNTMxOTczMzI3NkNGOUVBNEM4RjQ0MkI4RUVGRDIyCis6MTA4OTYwMDA2MDM4QkI5QUIxOUU1NUJENDc3M0UxN0VGOEE3OEFGRjc4Cis6MTA4OTcwMDAyOUVDMUVFRTFFN0UwQkRDQkY0NzYzNzcwNTRCNjNFM0RECis6MTA4OTgwMDBDODZCQTZDM0M0RDg2OEM2Q0VFRTRGOTkxM0IxMzNBNjQwCis6MTA4OTkwMDBFQzNDNzgyNzhEREIzMURCOUNBNEM0RkFEOTFDNjY5QUE5Cis6MTA4OUEwMDAxN0ZBMDVGMDc5RjgyNzRBNjQ4OEQyN0YzQ0M2NTZGMjU4Cis6MTA4OUIwMDBGMTdFQTI3MEY4RjY5OTIzMzY4NDZGRTczNjRCMDhFMDEzCis6MTA4OUMwMDA2OERDRjkyNzRCMDBFMEE4RkFGOUNGRDJCQTYxQkVDNjNECis6MTA4OUQwMDA3RDJBOEIwRTY1RjQ3Nzg5RTE3MzM1OUEzNDlDQUVFRjZFCis6MTA4OUUwMDBFMzk1QjE4MDVEQTk2MEFDMDFGRkY1QzFCNUIzN0UzQUY2Cis6MTA4OUYwMDA0QjgzNkJDN0RBM0ZBOTY5RjhCRUY5NTRCNzM1RjY3RUU5Cis6MTA4QTAwMDBFRENGNUZERTFCMDZENEQ0M0VGRjRDOUEwRkFFOUY3NUIwCis6MTA4QTEwMDAzRDk1QzY0QTY5QkNCQjJERTk4QzY5NzZDREQwMUZDNzkwCis6MTA4QTIwMDBCRDk4RDk3RjFDOTg5NzMxMzdEQ0U3Qjc1ODYzQzc2QTgwCis6MTA4QTMwMDAzRTVGRTczNzRFMzM4NDhGQzEzODEyNkU1OERGNjdGOEQ4Cis6MTA4QTQwMDA4Rjk3QjFCMThFNTRFN0M3NTdDMUZGNjNEODk4NEIyQUFGCis6MTA4QTUwMDA1Qzc3NjYzMTc2NEQ3RjNDQzVGMDE1RTZGNEZDRDlFN0NFCis6MTA4QTYwMDA4Rjg3MDEzRjY3Rjc5Qzc5MUNFMUFGRkJBRjNGM0ZGRTZCCis6MTA4QTcwMDA3REMwMUY3QkM1RTY3ODBBRDZEREY4RDNERkE2MjE3RDUxCis6MTA4QTgwMDBFNTdCMzMxRDBBQkRENzkzQ0ZDMjVFRThEN0YzNkU1MkE0Cis6MTA4QTkwMDAyNDBDQjc3QTVFM0U1REUwODNGNUY2RUNGRTlCREIwN0M3Cis6MTA4QUEwMDBGRDk3QkQzQzI5MUJEN0JGRUM4NUFBNkM2NjFGMTg4RUFECis6MTA4QUIwMDA5RTE1OEM0NTkyRjQ3MDQ1ODg4RUJFN0QzMDY4MzYzNEE0Cis6MTA4QUMwMDAwRjg4NkIxQzNEMEU3NTFFMkE0MDM4Q0Y5RDQ4RjIyNzNCCis6MTA4QUQwMDAyMTlFRTBERUYyNzJBNDBGRDA2OTM4NkZERjA3Rjg2REQ3Cis6MTA4QUUwMDBEOEY1RTA5RkQ0RTE4OUYwMUNDRTM1Nzk5MEFFMUY0Q0NCCis6MTA4QUYwMDA0NjM4MTk4QkU2MzIwRkUyQjdCN0Q1NjFFRkRGQkY4RjhCCis6MTA4QjAwMDA1RUM3ODE5RTIzQkUwMkRENzZBREU2RjM3NjAwREREMjQwCis6MTA4QjEwMDBGQUQzRUQxQ0ZFMDNGNDY5NDRCQUE1QzRFOEY2MzkwQjk4Cis6MTA4QjIwMDAzREUxMkQ4Njc2NjcxNkQxMzUxMUJFQTI1RjAxNUYzNTE2Cis6MTA4QjMwMDAwQTFGRkY3QTQ3RTA3QjBFOTQ5RjNEMjk3REY0OUE4RUIxCis6MTA4QjQwMDBGNEZBRDlFNzA1MENFOEZEODlCOUY3NEUzNjhBQjFERUFCCis6MTA4QjUwMDA5NzkzMUNEQkUxRkUzRDJGRkY4RUU0QTRFNzg1QjcyQzQ1Cis6MTA4QjYwMDA0ODQ3RjhCMzJCQjBBRTFFRDZGN0Q3ODVFQjZDNTBDNDkwCis6MTA4QjcwMDAzQTc3QTQ0NjkzRDI2Mjc4NkY4OENDOThFMjRCQTNGQkY1Cis6MTA4QjgwMDBFRkQzRkQwOEU3NUZDNDVGMkVEMjI3NzJGMDU2MjUwMUIwCis6MTA4QjkwMDAzRDNBMUM0NUI0MEUxNjcxRDFCQUVCNzdGQ0MxODI3QzBDCis6MTA4QkEwMDAyM0U5ODRGNDUxQzYyMkJEREU5RjhDRjcyNTlERTRCQUVCCis6MTA4QkIwMDBFM0M3NzMyMDFFQzZFOEU4QjY4M0NCNjE3RkJBRjY1QUQ2Cis6MTA4QkMwMDA1ODcxMjI3QTAxQkNGODFFQzIwQkVEOUU2RDQ5OUE5MjMzCis6MTA4QkQwMDBDRUVGRTdDMTNBN0FDQzZDNEUwN0MyMTE1MTdFOTc4ODJFCis6MTA4QkUwMDBCRThDQURBMkY1M0MxQjJGOTc2MjdEOTc5M0NCQ0JDMTdBCis6MTA4QkYwMDBGRDhGRTJFNUM3MEUwNzhEMkZGMTczRjY4QkM0RkFGOUVFCis6MTA4QzAwMDAyOENBMzlDMEJGQ0YxRTNBODJGQ0MzOTgzNUYyMjE4Q0U2Cis6MTA4QzEwMDA3MzE3NTM1ODdBNzEwQzZGMTJERUIzMUEyM0JEN0JGNkFCCis6MTA4QzIwMDBBNzZBMjQwQ0VCNkZFRDM4NDQ3QTM2NUVCRTYxNUQ4MTM1Cis6MTA4QzMwMDA4RTA0RjNGRDRFQ0NEN0IwRUZFMDcwRDQ0MzY3NUZERDE4Cis6MTA4QzQwMDA0RkZDRDdCMEVCN0Q0QjE4QzYzOUJBRjM3OTRCNzc2OTM3Cis6MTA4QzUwMDA4Q0RGNTE3RjQ3NzRGQUZCRUM3MzA3ODc5M0JFQzVGMTM1Cis6MTA4QzYwMDAxM0U4OUIwRkM1Rjg4RDA3OENFMzM3RUVGQTkzNjFGQzkwCis6MTA4QzcwMDBEQTcwODdDNTYxQkZGQzNDOUY2OTgxRDlCOERFQ0ZCQTg1Cis6MTA4QzgwMDBDQzBDRjVERjY3MURFQTk0NDg4Mjc5NUYxN0Y2NEJFMjVBCis6MTA4QzkwMDBBOUY1MkQwQkQ5QjE1MTZGMjc0NzkyMDA0RkNCREU5QTIyCis6MTA4Q0EwMDBGMjg3NzQyNzVFMkQzRTQwMkRFQjVDQzlGOUFBRjNGRUQ2Cis6MTA4Q0IwMDA0MDJFRDJBNUYzQUQ2RkFBNjg0RkY2MjIxRUFGODg4RDY1Cis6MTA4Q0MwMDA1QjcxQkNBOTJBMTVFNEI2RTI2NDcwMTRCMjU1QkMzRUNGCis6MTA4Q0QwMDAxODczQzI2NDgwMUJFNkM5NDZGRERDMDJFM0Y4NjAxQzIxCis6MTA4Q0UwMDBBNkY5M0Q0MTE4NTc0RDlCM0MwNUUxNTExRDI2ODcyREE2Cis6MTA4Q0YwMDBBMTVERTVFMzk5RUQ0MTE2MDJCOENDNjBCNzdEM0E3RUZGCis6MTA4RDAwMDBGMkNDNEMxQkNFRDI3MTc5NUUxM0VBODVBNUMwNUVBODY5Cis6MTA4RDEwMDA5RjNEMTYzNjU0MDNGODk4MjlEOUZGMTQ4Q0JCNzQ1ODFDCis6MTA4RDIwMDBBMEVDMDhCNDk3MkVGMEY4QzNGMERDN0IwQjdGRUY5QzJGCis6MTA4RDMwMDBDMzFFMzY4REMwNzY0MTA0RTUyOEU1QTJDQTdDQTBGQUEwCis6MTA4RDQwMDBDRTJBQkY1RUM4NDAyNUE0MDhCRUNBRUQ0ODIxM0I5Mzg5Cis6MTA4RDUwMDBBMkY5MzY1NTQzM0JBNTQ2RjMwMzQ2RDk0N0Y2NTA3RTY0Cis6MTA4RDYwMDA4NjBCREZCM0QwN0JERTBDNDVGQjE4RDc5REM2RDI1MEY3Cis6MTA4RDcwMDBERUU0RjhCMjlGMUM5NzY5RDFFMUI4N0U2NjY1MUEwM0ZDCis6MTA4RDgwMDBCQjkyQzczOERDQUE1ODRGMzFFQjUyOTBCRjlCNjdBNDA3Cis6MTA4RDkwMDA2REM3RjZENkQ0MUFCMkZGMDVBQ0Y3NjAwMEU4RjY2NEVBCis6MTA4REEwMDBEQUU0NjNBOEM3RTA1RjEzRjZDQjZGMzJEQUY3NDFDQkEyCis6MTA4REIwMDA4REVEQzJCMDE2MjdCRjNFNTMxMEY4QUZCOENENzhERkE3Cis6MTA4REMwMDA1OTU1Qjk2NDkwMUZFNDZDN0RFNzE0MERGNEI3NzM3NkMwCis6MTA4REQwMDBFNUVFNUNDMEU5QjQzNTZGRjNGNjMzOTU2NTVFNjgxRjY4Cis6MTA4REUwMDA1RjVGMzc1NTAzM0RFMkZDNEQ2NTU5MDFCNENGM0ZGQzUxCis6MTA4REYwMDA5REE5RjRCQzE2OTA3NDJEQThGRUY1NTc0RjBEOTdDNjhCCis6MTA4RTAwMDBFNEQ2MDU2MEE2QUIyNENGMzcyMDFFQ0UwNUNGQjZFMjUwCis6MTA4RTEwMDBEM0ZBNTk3RkI1QzAyM0ZDMEIyMjFFRjJDNzcyM0NFNDgzCis6MTA4RTIwMDBEOTRGRUU2NkQwN0Y5MEE5N0IyNUYyRTUxMzJGRkZERkE3Cis6MTA4RTMwMDAwQ0VDRTc2MzBFNUFBRjgzQjUzODNFQjZFMkUyRDlEODAwCis6MTA4RTQwMDA0QjIzQkY0QzlGNjlFQzYzQzk4NzZBNEMwRTU0NzdFODhCCis6MTA4RTUwMDBFNjBDRTBBQkQ2Qjk0MzM3NEQ0NjVENUJFNzI3RkU4MkIzCis6MTA4RTYwMDA5OTFENjQwRjY1N0Y4NzkzRTgzMzVGRDAwN0UxQjQwMkYzCis6MTA4RTcwMDA5RjJERTA1REQ4MjIzNTZDNjEzNDZFQkIyNTQ4RjY2QUMzCis6MTA4RTgwMDBBMjAzRTc1M0MyNzVFQUE1QUJCRTNFNUNGMzkwN0Y5MEE4Cis6MTA4RTkwMDAxRUE5MkMxNUVGNkI3NTNFODJFRkIwMkJCMDkwRjBFNjVCCis6MTA4RUEwMDAwQUQxNTVERUY3Q0M5REUzMEIwMTlFNkZDODA4RDZFMEQyCis6MTA4RUIwMDA3QUJDMEIyRjE2RTAzQUE2NjczMDFBQUY2QTkxM0Q4MDU0Cis6MTA4RUMwMDBGNkY1QzIwMTUwODMwOUU0NEI1RUI3QUY2MDdFNkRDODEyCis6MTA4RUQwMDBDMENGODM5OUExNkZFM0JDNDVCRkY0RUQzOTA2RTM4REE0Cis6MTA4RUUwMDA5ODZGRjFEQjYwOEExMUNCNDdGOUI1MkNDNjE3ODRGRTY5Cis6MTA4RUYwMDA4N0EwOUYwNzY5OEFGMkY3NkQxNjQxRjkzQjlGQTQwNDhBCis6MTA4RjAwMDAwMkQwM0U3RkFGODNGNDczREVGQ0U5QzdEMEFFOUQ0RjQ1Cis6MTA4RjEwMDAyOUVDODhFMkZERUZGQjQ4MkVDMTEzNTA1MDJFRjIwRkQyCis6MTA4RjIwMDBBNDQ3NkQ2OUM0RDc3RjhERTNFQkJGMUFGOUQ4MzhFRjNBCis6MTA4RjMwMDBGOTRCQkU3REREMzQ5RTQzOEMwNzhFMTEzQ0NGMTdGNDc4Cis6MTA4RjQwMDAzQUFGNzJGRkZDRkMwQTFGQzEwMTZFRTQ0MUI0QkI1RjgzCis6MTA4RjUwMDA3NUJFNDczMzg0M0QxNUY0QjlERjE2RDg4ODc4MDFGQzE3Cis6MTA4RjYwMDA2RkQ2RTM3RkVCQzA3NDdDNDJEMEYxODk0NDc0NUM2OEI3Cis6MTA4RjcwMDA2RDJBNDBGRDcwNEZCMDYzMzI2ODZFMzYyMzIzQjQwMzEwCis6MTA4RjgwMDBDNzNEQkRGMDY4QUIxOUQ2NTM1RkRENTQ4MjRDREY5RkZGCis6MTA4RjkwMDBCRTBBRTk3M0Y3ODFCQjU3OUFBMUREODhGNEYxRjVBNzAyCis6MTA4RkEwMDBFMzg4RTU2NTQ0MkYxRDVEM0IxMDhFMTEwN0ZFNjQ0MjhBCis6MTA4RkIwMDBCODI1M0QzNzI5REMwRUM0QkZGRjUyODYyMkU2QUQ1QkUzCis6MTA4RkMwMDA2OTA2M0M1RUQ4NjcyMUZGMzdCRURGOTEwQzFGRjU5MzIxCis6MTA4RkQwMDBFREUxRDYwQUJGMDY3MjlBNkQ2MkExNDRFMzFFRTkzNzNECis6MTA4RkUwMDBBRUQ1OUY5NDAwRkVCRUYxMUM3QzNDQzBGQjZCN0FCQ0VFCis6MTA4RkYwMDBCRjIxRjU2RjdGQkNGRjFGRUMwNzc4QTdFQjU3QzBGQkM1Cis6MTA5MDAwMDAzQjVGODY3N0U5NkZENzBBQkQ1MENCRDY5MTlGRjk1MTY4Cis6MTA5MDEwMDA2MEE2N0IzMENDM0I1OUI1MTNGRjJGN0U0QTI1Qjk4MzIwCis6MTA5MDIwMDBGRUQzQkRFRTk4MUU1OTdDNEREMzQxNUNFN0UyMUYyQjY5Cis6MTA5MDMwMDBDNEE3RjM0MzVDQkY5RjU5MzhGRDI4RUFGNTA1RUQ0NjA4Cis6MTA5MDQwMDBCRjY5RTExQ0QwMzMwMERGQTJDREM2RkI4QjIzNzE3MTU5Cis6MTA5MDUwMDAyMEQzRTk3M0UwODczMzMxN0UxREM0RjU4Qzg3RUNBNEZGCis6MTA5MDYwMDAyQUU0QTE2QTUxNjkzQUZBNDlBRjk4N0RCRjIxM0ZGQ0QxCis6MTA5MDcwMDA3NTk1NkQ0RjgwRjdGQ0NDNDJCMkMzN0RFRDI2NDA4NkRFCis6MTA5MDgwMDBDRUJFQjNGOTM2MTNFQTQ5MzlFRUM0NDVBNUQ5RThDRkM3Cis6MTA5MDkwMDAyQzRERjU3RDY5RkMzNTY4QjlEMTlFMTc4NjkzOTk0RkEzCis6MTA5MEEwMDAzNzZFNzE1QkE2QTEzREE0M0RDN0QwRkY4QUNENDU4NjMyCis6MTA5MEIwMDBFN0MzMjI1NzFBOUU1RkI1QjNEQ0QwQkVCQUUzNUE0MzZBCis6MTA5MEMwMDBGRjExRkIyNjE4REE2NUQxOUIwQ0ZENDcxRTlCNjk2OEQyCis6MTA5MEQwMDA4RkVFRkFBNkExRkY5ODEzNzMwRENGQUZFOUJFQzdGMENDCis6MTA5MEUwMDBGQ0JBNEY5NjFBREFEN0Y3N0VDRkU4QkY5ODE4RTk0NTUxCis6MTA5MEYwMDA5NkFDOTA5RTNDQkNFMjkzOEEwRjkxMDE0NzI5MTMxMUQ0Cis6MTA5MTAwMDA5RjU1NjM3OURGQzM0QjJDMjY0NzFBNUU0QjRDMEVFMDBDCis6MTA5MTEwMDA4RjU3MTc0QzI3RkI3Rjc4ODkzQkUwQTM2QjQ1MDBFMzEzCis6MTA5MTIwMDAxRUE2OEUxQjE1NEFFMERGNEU3MjdDNUFGMUExNkVERTQwCis6MTA5MTMwMDAyQUFCRDlBMEQ3MjYzOThDRURGMjRDMTExNzBFRTI3QzYwCis6MTA5MTQwMDAzMzI2RDMyODU3NkFEM0Y0QTgwNTlBMzk4QjA3NjdFM0U3Cis6MTA5MTUwMDA3QzIwNUZENzY2NzJCRDQ2RDdBRjIwNUZFM0IxREZFOTAxCis6MTA5MTYwMDBCNDY4MkJCNkE1N0MzMTYxNUYyQjA1MUZDMTM1NjAyOTIyCis6MTA5MTcwMDA0Nzg2NEEyNTNCMUNDMDlCM0VCQTFGRDYyMDNFOTk2MEJECis6MTA5MTgwMDBGNUU3MURDMUY1OThGQzRFNjRCRTg5NzM4Mjg3Q0Q5Q0JFCis6MTA5MTkwMDAwM0I5MUQ2NjQzNEQ1RkM3MEU0QkY5RjY5ODdDNjFCMjZCCis6MTA5MUEwMDA1Rjk5OENGMjQ5NUIxNjk0QTQzMzFENUVFNzY0RjJGQzcwCis6MTA5MUIwMDAxMUQ4N0Q3RTc1RUMxQ0E5NDlGQzE1RTlFRjRGMTlBRDVFCis6MTA5MUMwMDAwRDhEREQ1NzE2NERDRjQ2NzlGMzBDQTAwNzJEOUVFMjhECis6MTA5MUQwMDA2MTNCNDBGRjVBQkM4NTc0OTVGNzVCRTc5OEE2NDQxMjQzCis6MTA5MUUwMDBEMEI1MzY1MzExNzA3MDNGNkI1OENDQ0ZBQTI1N0E3ODIyCis6MTA5MUYwMDBERURFMzgwNEYwRDU1MERENEI3RTk2QzdENEJFRTQyOEMxCis6MTA5MjAwMDBBRUVCNTcyQUNGOTM4MTI3ODVGQTYwODFGMDlCMTc0Q0VDCis6MTA5MjEwMDA3RDc4Qzk1MUQwNEIwQkRFMUM0MjdBNDlDRUIzNzU0NURGCis6MTA5MjIwMDA3NDk4REUzRkM4MUIyMDhFN0EzQTkzRUJGMUM3NTcwNDNGCis6MTA5MjMwMDA4NkNEMUY0MjcwOTE1RTkwN0U3OTQxQjg3RTMyQzYzN0VFCis6MTA5MjQwMDA4MzU4MTNDNTg5MUI0REFDMjZEMTM4MEY4QTcxQjI5MTUyCis6MTA5MjUwMDBFNDA4QUZDMzRFRjI3MTZFRTFDOTM0MERENjkxOUMxQTg5Cis6MTA5MjYwMDA3QTEwRDczNzc3NDQ1NzA1OEYwMzAzRkU5OUUwN0YxNUFGCis6MTA5MjcwMDA0NEVGRDg4OEZEMEIzQzFBOEIyOEZERTdDRkFFMEVCNTI2Cis6MTA5MjgwMDAxNUMyRkE1QTMyNEQ3RTNCQjU3QjE1RUM5Rjc0MUY2M0I1Cis6MTA5MjkwMDA1OUQwQkZFNUJGNTQ4MkE3RTVENTZCMThDNjY3NDlGNjFDCis6MTA5MkEwMDAyNjg2N0VBQzVDRDdBMUNDQzcwODNGNkE2NzBBRDkzRDQ5Cis6MTA5MkIwMDA4NjJFMjhFMEVGNUI4MkY2OUY3QkU2NzdBMTdGRjFGOUFGCis6MTA5MkMwMDAwNjMzQ0RGNzM5QUNEMTAxRTM3RkRFQTk0NkQwNTkzRjUzCis6MTA5MkQwMDA5QTk5MUMzNTQxNUI2RDRCMjU3QjVEODAzRTI3RjQ1RjgxCis6MTA5MkUwMDBEODk5MUFGMTE1QzZGMEEyNkQxRUM3QTI2MERGOTJGMkRFCis6MTA5MkYwMDBGOEZBNUIzMkVEMTE3QjIxQURGQjg3OTlBMzYzNzBDQTRECis6MTA5MzAwMDA3NUU3MEYxMDc3QkUyMkUwNjY4MUExMDYzQTdCMjEwNjQxCis6MTA5MzEwMDBFQkMyQjkzNTcwRjY2MTFDNzU4Mzk5RTJDMjA1MTk3NjA2Cis6MTA5MzIwMDA4MjMzQjIyMjNDNkNCRUI5RkZGQTVBM0QzMzZGQkUxRDg4Cis6MTA5MzMwMDBFMDY5M0VBRTMyMTVDNkYxNzVCNzEzM0UxNjAyM0UyMjA1Cis6MTA5MzQwMDBCRUZFRjgzRUU3MkJGQ0FCNDkyNUI4NUY0MTdBQTk5QkVFCis6MTA5MzUwMDAyN0QzQkExOEZBRjFGMDVFRkQxMzBBN0JBQzEwRjkzMjhDCis6MTA5MzYwMDAzNDg1RTg5QzYzNjI0RjE1MjZGMDBGNTBERTVDODgzRjIxCis6MTA5MzcwMDA5RTNGQjA3ODRBQjg5Qzc4MDYwRkRCMDFFM0ZEMkE3MzY0Cis6MTA5MzgwMDA0MDdGRUJDRDRDNkVGN0U5MUFBRjk3QzBGRTg1MTE4RThBCis6MTA5MzkwMDAwQjlCMTVBMkU3NjkyNTYyMzEwM0NBNkE2RjhEMUFFQzJGCis6MTA5M0EwMDBCRTFBNTBDOURGODg4NzBCRjREODg5NEM5RDlGQTNBNkFECis6MTA5M0IwMDBERjM3MUNDNzFERDgzRkRCN0REMDgyRkU5OTgzOTE3RkFDCis6MTA5M0MwMDAyNkY1RTc0MEZFMTlGQTY1Qzg3RkQyMkZGQjM4NEUwRjBECis6MTA5M0QwMDBDM0ZBM0UxNUVCRkIzNEQxRkExMkU4REQxRUQyQkJERjM3Cis6MTA5M0UwMDA4QzI2RjQ2QjVDOTZDNDdBMjkzNzhCRUJCQjQ2ODc4NTU5Cis6MTA5M0YwMDA1MTFFNkE4MEJDQkEyQjRCRkE3MURDQUYxODQ4Q0Y1REE2Cis6MTA5NDAwMDAyRURFMjg1QTVCNEFGQUY2NDI5NzJGM0QxM0FFQ0UwRjU2Cis6MTA5NDEwMDA5NEE2NDRFM0E4Q0I5RjFEODk3NDU5NkNBQjRDQ0EwMjM3Cis6MTA5NDIwMDBGOEVDNTk0NkZDNkM1OUREQ0Y0RUE1Njc3MTdDRDFCNTdGCis6MTA5NDMwMDAxRkJFRUM4MDJGOTMwMTVGQ0VBQzJGRjUwM0I5REVDREJDCis6MTA5NDQwMDBDMUJDMTRDQ0Q3MjNGMDAzRkFGNzIyRTlERjVCN0E2RUI0Cis6MTA5NDUwMDBDMzU4QjFGRTk2MkY0NDlDQ0JGQkJCODU5RTg2MzhGODQzCis6MTA5NDYwMDA4NjhGN0NENEZGQ0Y0OEJGNTgzQ0RDNUQ4MTcxNTBGM0MwCis6MTA5NDcwMDAwQjU3QTRBMzFGMzU3MUVGRUQwRUJDNUU3MDBFMjZCQzFBCis6MTA5NDgwMDA5Q0RCOUIxNEMwNzlDRTY1ODJGRUI0NjM3QkNDNTFDQzRGCis6MTA5NDkwMDAxMzlDNTk3MTJDNTM4RkQ3NzNDRkJENTU2MTg2NzFDRUY0Cis6MTA5NEEwMDBFRDc5QUI0MkMzN0M4M0M4QTdDOEU3RjU5N0RFQTkwODZFCis6MTA5NEIwMDBDMkZCRTEwOTZDNjg5MzVENDc1RjJCRDdFRjFCNkMzQ0U3Cis6MTA5NEMwMDAxRkUxNzI1QjVBRDkwOEYwNkI1RDE5RjRGRUEzNkVEM0VECis6MTA5NEQwMDAwRkYwQkU2QTdEQTdFMDQzOTRFN0I4RkNDQjA2QjNBRkJDCis6MTA5NEUwMDBEOTBFN0MwRTMxOTYxRkYzRjg0Qjg3MDVCQzBCMzBGRjZECis6MTA5NEYwMDAzMkMzNDM3OTkzNjY4NUVCQkRGMDAyMUUxRjNBOEJEOEM5Cis6MTA5NTAwMDBEMDQyMThDRjZDNTI1NTdDQUZEN0NCRkNEQkExNEJEMkVECis6MTA5NTEwMDBFMUY2MjhBQUE5RTRBRThFMDA4MjNGMkEzOTkzRjA3RUI0Cis6MTA5NTIwMDBERDU5ODc4MkZFQkVDQ0Q3Njg1NTdDQkNERTU5OTZDODEzCis6MTA5NTMwMDA3NjVEOUVDNjMzNDcyMzNCOTZBMjc1MzBENEFCQjM1Q0IxCis6MTA5NTQwMDBGQzdEOTlBRkE5OUEzOTI3NTg4OTcwM0Q2MEEyNzgwM0FDCis6MTA5NTUwMDAxNEE1ODJGQTJCNTdBQ0EzRDBCQjY3QjVGNDQ1MzQzN0JBCis6MTA5NTYwMDBCMjE1QzNFNDBDNUIwQkZDM0IxOEYwOUNFNjMzMDUzMEYyCis6MTA5NTcwMDAzRjlBOTYxNzNENjEwNjNGMkNCNzg1QjE1MzNBN0YyRjJFCis6MTA5NTgwMDAwNTk5MEZEN0YzQTYxQUQ5MEVGMjlGRkFDNTc4RUIxQ0VFCis6MTA5NTkwMDBGMDY3NTI5MkI5RkNBNDA1NUI5NzYwREUxQUVGRkY2QjhGCis6MTA5NUEwMDAzOUQyODVCRjRGRjQ1MTMxOERDNEMyRTkwMDcyRUE1OEY3Cis6MTA5NUIwMDBFM0I4OTI3RTlEMkJBQ0ZFQzFDMEE4N0I1NjM4RThGQTdBCis6MTA5NUMwMDBGNDBBMEZDMUY1RjAwQTFGNUQ3RkI4NjIyOEREMUY0ODVECis6MTA5NUQwMDBDRTJFNzc3RDY4MDVDQ0FCRTMyN0U3MThDMDBBQUNENzYxCis6MTA5NUUwMDBBOTMyOTJDNzg3NDY1N0E0Q0Y0REEwMDdFNEY1QjExNTFECis6MTA5NUYwMDBDN0RDMTM4NzA4MDQwMjNENzJFQTFDREJENjE0MTI5REY3Cis6MTA5NjAwMDA1MTY4NjA3NUFGQUQwRThDNjNFQzAxNzM2MDA5MDNENkQxCis6MTA5NjEwMDA3QTIwRUI4Qjg5OTg1NzVBQUI5ODI4OEZENDlBNzU3MDFCCis6MTA5NjIwMDA3NTM4MEZBRjNFNEVCNzQzRUYzMkNDNDc3QTQ3QjUyQjc0Cis6MTA5NjMwMDAyOEFGREVCQTc2RTI4MzUxNUQ1RDJDMjRFRTA3QTBFRDAzCis6MTA5NjQwMDAzRENFRUYzRjYwRTM3ODVFQzdEODE0ODREN0FFQjAyMDNDCis6MTA5NjUwMDA1RTdCNkNEQzlFN0M2Q0UzN0FFRDUzNzEyRENDMEEzRDE1Cis6MTA5NjYwMDA5QzA1RjdGRkUyMzg1MUYyMDA4MDY3MkJGRDdEMDFFRThCCis6MTA5NjcwMDA0N0E0MUNGQTFCRTU2QkQ1RTExNjJCQ0E4N0Y3QzBGQjg0Cis6MTA5NjgwMDBCNDRGQTE5QUJBMkQwQzRDRThGMzhGQkM0QkY5MkZENUVGCis6MTA5NjkwMDAxMjJDRTRFRDlGQUZDMTc1QjhEMjgyREJEMEM1NjJFMTc4Cis6MTA5NkEwMDA3N0E3MUVGNjgwREMyMDNGNUM0QkQ4MDhBMzFDQUZCNTIzCis6MTA5NkIwMDA4OTc2RjhERjA4MEY2QkNEQkNGREZDMjNCRjVEMURBNkNFCis6MTA5NkMwMDA3NjcwMzFFMjA1REIyRDg4OTc4QzBFOEYwOURBRjY5NURFCis6MTA5NkQwMDBFRkFDM0U3NjNEQjY2NUZGNzdBOEZGNzM1OURDM0UzMkFFCis6MTA5NkUwMDA3QkQwOEJGQUEzQUZFRDgwRjZENUJBQjZDNkRCQ0NDQTc5Cis6MTA5NkYwMDBBRjcyN0RGNTg3RkU3NjM0MTdGOEI1RTE4MEQyODFBMDkwCis6MTA5NzAwMDA3OTBGQUM1NzcwOURERTdERUIwOURGRjQwN0YyODFDQjVBCis6MTA5NzEwMDBBMDNDQTYzNTRDNzlBRkE3NTcxQzczQjQwMDlEQjVDQ0JGCis6MTA5NzIwMDAzNjM3RTJGRDBBNEYyODEwNDhBMEFGN0ZFRTkyRkUyQTlFCis6MTA5NzMwMDBGNEQ3RTdCRjIyRTZERTZFOURGRkVDNjU1QzZFNTgwQjRBCis6MTA5NzQwMDBFODg3MDRGRTQwOTFBQkYyM0QyN0FDNjM4MzEyNUFBMzM1Cis6MTA5NzUwMDBBMjlFRjk5OUQ5ODE3QTg0NzU3MTNENzQ1NjhDQzUyMjdGCis6MTA5NzYwMDAzOUU0OEZENEQ5NzhEM0JDMkFCNDY2MThFQTg5M0IzNDVCCis6MTA5NzcwMDAzRkM2QjlCNTg1RUQ5NTY4OEY2QkY3MTdGQTU3QjIxOEU0Cis6MTA5NzgwMDBCRkQ0NjY3NEI4Q0I5MTdGMzI4Q0VENjY5MTE3QzlDRTg5Cis6MTA5NzkwMDA2OENBQzgyOEM1RkQ4MkY1MDU5OENGNkY2MEVENzc3RTUxCis6MTA5N0EwMDAwRkUxRkRCNUNBRDBBRkZFRjRFMDM1RTlENzQxQkIxRUVECis6MTA5N0IwMDBEQTY4RTdFQjNCREZCMjIwN0YzRUU4RTRGQUIzQTExM0JGCis6MTA5N0MwMDBGODA3QzY1OTA3RjIxNTAwQzc2MzlCRTY0ODQ2RkRGNDQzCis6MTA5N0QwMDA3NEEwRTk0QTc0Qzk3QTFGRjlDQjU0MUIzODc1Q0YxNEE5Cis6MTA5N0UwMDAwNTFDNDQ2RkU3QTVENTU2NkM1QjFDQzM1ODE5QjYyREY0Cis6MTA5N0YwMDA2QjkwREY2QUNCNEM1QzhFOThFNTU3MDE0REVDNEY0Mjg1Cis6MTA5ODAwMDBGQkI3OEY1NEREMTRCNkM3RUM4RDU3RDhBN0M2QURGNjlECis6MTA5ODEwMDBCMDg5REJBN0YzNjhENzFBMzY5QkMyQThCRjRDRDYyRUY3Cis6MTA5ODIwMDAwQkQyRDc4RTdCQUY0NDFGMDdFMTZEOTlENEU3NzFGQTU1Cis6MTA5ODMwMDA3QUQ5RDRDQzlCQjBCREVDODEyMjQ3Rjg0QkYyOEEzNTYzCis6MTA5ODQwMDAxNzUzNTg0NEU3Q0YzQ0U4RTQ3MjVDQTM4NTY5OUZBM0IzCis6MTA5ODUwMDBFNjYyMUEzREZGRTdDRDY3NjM5MTkxNUYzNjlGOUQ5RTVCCis6MTA5ODYwMDBDQkY5RUE2MkYzMTE1RDBGOTVGRjZBRTM2MEEwREJCMjBBCis6MTA5ODcwMDBERDY2NTM5MjhFRUY5NkVEMTZGQkM5QjY0MDM2OEVFMzQ5Cis6MTA5ODgwMDBCMjMwODE3N0YwQ0YwMUJGNUE2MTVGM0JBQzgxOUMzRjIyCis6MTA5ODkwMDBENDI3RTdERTM1MTNDNzIxREQ2MkNGRDk1ODgzMUUwOEYwCis6MTA5OEEwMDA2MDdDRjg1MEIyRDQwMzg1ODlGQjI3QzdGNTJGOTJFRDcxCis6MTA5OEIwMDAyQkE5N0YzQzNDQUVFNDU4REIwQUZEQjVCRjI3RjVCNUNDCis6MTA5OEMwMDAxMUJFRjVBNkI4RjEzMkU1RkNFNTZCMjZFNkM1RjhFQTZGCis6MTA5OEQwMDBCNzU5RDdGRDJBM0MxODlFNjdCNDU3NjI3RDQ1RUYwMjAxCis6MTA5OEUwMDBFNjQzQkI4Q0ZDRUFEN0U5RkRERjBBQkZBRkU2NjJCMTE1Cis6MTA5OEYwMDA4MURFMzFCQzk3MThFRTlGNUVFMTMxRUNDQjJEQUE1RTg0Cis6MTA5OTAwMDA0NkZCODdCRjE1N0FCRTg2ODUyOTBFQUFEOTlBQ0IyMjM3Cis6MTA5OTEwMDBCQUJDQzRGRjg3RTMxRjg1RTNCQTAxRTBCOEUxN0YxOTUxCis6MTA5OTIwMDA4RTQyODM3Q0M2RTAxODZDQjhGRjhGQzJCMUZEQjY5MjQwCis6MTA5OTMwMDA5QjBBQTFDQkEzNEFEODVBODQ3NkUxN0UxM0U1MzlENDk5Cis6MTA5OTQwMDA4Qzg5QkU5NUI4MkY3MEJGNDY3RTFFQkEyNDU4OUY1MTkxCis6MTA5OTUwMDBBNEIxNjM1QTM5Q0E0RjdCMDBFMzcyQjY4QUU3N0JFMDUxCis6MTA5OTYwMDA3RTlCQjk5Q0VDMTBGOUMxQzUwNzkyRUU0NjNGQURBOEFECis6MTA5OTcwMDAyNkIwMThBRjJDQUY5NEY2MURFNEJFMUQxMzc5MkJCOTk5Cis6MTA5OTgwMDBDRjMwQzRDMTJBMzU3MERFNDZCOEVFMjYzQjU1MTRBQzQ0Cis6MTA5OTkwMDBBRTQ1Njc0RTREMUQ5NThDRjZGMTUxNTMyNDhDRjM4NUUxCis6MTA5OUEwMDAxRkU2RjNCOTRDOTEwRTJCRUFERUI0QzEwRUI0NzdBRUNDCis6MTA5OUIwMDAzNEFFRkZEODlBNTJCMjdGREI0RDQ1NTcyRTAxMzgxRTg4Cis6MTA5OUMwMDA1MDJBOTM1RjQ3M0M2NzE0NTE5RTE2RUYyRjg1RkJEQkFGCis6MTA5OUQwMDA4NURENTIzM0ZDMEVCNDUzREI4NURENkExNkZBNURERTlECis6MTA5OUUwMDA0RkM5MENERThERkVDNDQ5NjdDMzRERDY2QjUwMEYwNUMxCis6MTA5OUYwMDBEQUIyQzBERUZDQzFEOUIwQzY3MzBEREExQjVGOTExNUI3Cis6MTA5QTAwMDBFQ0NCMUYzNkQ0QUY0MTdCQjM3REE1MkZDNzkxMTE2QjMzCis6MTA5QTEwMDAwRkY5M0I1ODZCRDIxM0Y1NkJEMDVGNjlCMTJGQkQwN0JGCis6MTA5QTIwMDBGRDFENzhGRTJCMkJBQ0YzOTk0Q0ExNzdDNEYzQTIzRTFECis6MTA5QTMwMDAzRDA1N0EwOUY0OThCQUIyQUYxRDQ2QkQ1NEQ0QTc3NzU0Cis6MTA5QTQwMDBFQTQ5RUZFQzc4NUNBNUY2NDE5ODBGRkQzRTU4NDc1ODdGCis6MTA5QTUwMDBDNUY1MEVEMUM4QUZCNzAxMkNDOUQwQjYwRDJCQTJGREVDCis6MTA5QTYwMDAxQjU4Mzc0QjQ2RkY3QTE4N0YyRUYzRUU5NjIxMjZDQUY1Cis6MTA5QTcwMDBCQjYzN0ZDNEEzQ0RDQkZCNUI2NjMwM0ZFRTM3NTk1MjRGCis6MTA5QTgwMDBFRDE0ODdDODNDQkUyQUY2OEY5MjQ1MUQ4NUUyOThDMTI5Cis6MTA5QTkwMDAyRUMxRkJENjc1RTU0QjMxMUVCMzBFMzZFRTkzNUFFMjVFCis6MTA5QUEwMDBFQTJERDRGOEZBMEI3Qjk0RkNBRkY3OUMyMkZGOUVDNUZECis6MTA5QUIwMDAzQzk3OEE2M0Y3MTlGMzk3RTNENTdEN0I0QjI1QzJCQkFGCis6MTA5QUMwMDAzNDk1Mzk1NENDODM4NEEyQjQwRjE5NkZEN0FDNjA0NzU2Cis6MTA5QUQwMDA3RDNBRjlCMERBNTkyMEQxN0VGRjhCMkVFRUQ3REEyRkZFCis6MTA5QUUwMDA2QTE0REY2QzUwQzBCRjQxM0I5QUNBRjk0Q0ZBNDc2NjEyCis6MTA5QUYwMDA4N0U0NUJBM0REOTVGRTkyMzk4M0FGNjVEOUQ0MDlEOTlDCis6MTA5QjAwMDAxODdGQUJGNjgwMTVGRDlDODM4RTcyOEFFQjU1RTZCRkZECis6MTA5QjEwMDBCOTUyRTdFRkI0NDRBNzUyQkU0QzczMDRDODBGQ0ZDNjg2Cis6MTA5QjIwMDAzODExRjMzRDBFM0ZEM0ZCMzlBRDJCMjBCMEJDODJCMUQxCis6MTA5QjMwMDAyNzJCNEEyNkEwM0MzQzY2OEI1QThCOTFCRThGOUEyOEQ1Cis6MTA5QjQwMDBERTNCNTQ3RTRGNThDMTdDRDk3MjQ2NzJGQTY0ODU3QkU1Cis6MTA5QjUwMDAwMkU2QkJCNzY5QzFGNDNCNTA1RThFQzM3QzNFNEUzNzE0Cis6MTA5QjYwMDBCRUNGREFBQzYwN0VGNzczNkIzMDFERjVDMTQzQzhGNzJBCis6MTA5QjcwMDAzQUJDM0NFOUUyN0VGRDA1MjdGNzNCMUYzMDczQjk2ODJDCis6MTA5QjgwMDAwNTc4QTIwMDg3NzZGMTJBQ0E0NzNERTBFMkZBQzk1Mjc5Cis6MTA5QjkwMDAzRDkxRjIzNTE2QzAwN0U2RTM5MjU4NTNEODQxRUJFNTA0Cis6MTA5QkEwMDBGOUI1MjQ4RkM5NTBCN0E3NUQxQzRFRUY1RjcwOUEwQ0IyCis6MTA5QkIwMDA3MTc1MUJBQ0QzQTdEMzVGMzYxNkE2RkMxQUUyRjhBOUMxCis6MTA5QkMwMDAwNEZFQ0I0MTQxMzcyQkY4NDMzRUYyNEZFMkY2QTFGQkI2Cis6MTA5QkQwMDBGQjQ3RTRBRjQ4RkFGNEY5MjkwQUY4Mjc1RjEyOEYzNUZBCis6MTA5QkUwMDA0MkJDQUNEN0Y3OEQ1QTJGRTlERjQ2ODg4N0YxN0U4RkNDCis6MTA5QkYwMDBDMzRBRkVBMUFDNEJCMDBCN0RENkVBMDlCNTVGODc3Q0FBCis6MTA5QzAwMDA5RTlDMzYxQ0YzMDAxQUVCMjBBNEFDQzNCQTA0RDQ4Nzg0Cis6MTA5QzEwMDAxRUFEQjc4RkZGNDFFNjlCNkQ2OURCQjE1RjhCQTg1MzJCCis6MTA5QzIwMDA0OEYxMUJFNTI3OTlCNTQ3MDMyODlGNDM3NTcyQzMxMDc4Cis6MTA5QzMwMDBERjYxMUEzN0M5NjdCQ0NGNTg4ODYxOUNBMTc5RTJFQjE0Cis6MTA5QzQwMDAxOEMyN0RGNTRBNTQ2RkE3QjEyREI4QUYyQ0ZEREU1QzZDCis6MTA5QzUwMDA1MTJGNzQyRUU1OEYxNTI4QzdFMEY3OEVDRUEyQkM0RDhDCis6MTA5QzYwMDAyRkM1MkQzMjVGRjM3NUZERTQ2QzFDMDNFM0QxRTU3RjU2Cis6MTA5QzcwMDBBRUY4MTBFNTZDQzZFNDQyQkM5RkEyNzEzRTAxNTc1QzkxCis6MTA5QzgwMDA0QjJBQzdGMDZBRjJFMjBDNThGRjM3QjIzOEZGMzlENUQ5Cis6MTA5QzkwMDA3NkFBRUI3ODVFRDhCMUJGMzhFNjc4Mjk4RTAyN0M1MjdFCis6MTA5Q0EwMDAzRDRDQjJCRjlCRTI0NUUxQTdBOTdERkFGMURERDUwMUFDCis6MTA5Q0IwMDBBM0RGMTlENkZCNzkyQjFFN0Q3Nzc1NEIyOUM1MkJENEQ1Cis6MTA5Q0MwMDA3RUZFOTExN0Q3NjAzQ0Y4ODA0REI2NUZBMDM2RDhCOUJDCis6MTA5Q0QwMDAyOEM2NEI2QzZGOTIwRkY5MTBERTBGQTBCQ0IxREI0QUE3Cis6MTA5Q0UwMDBDOENGNTY4QjU4MEVFMjYzNjI5QTk1RjRBNkJBMzc2OUNDCis6MTA5Q0YwMDAzQkZBQzExMDE3M0Y5N0E1Q0I3MzlFNEIzRDUxODBGRTk5Cis6MTA5RDAwMDA3MDgyRjFDMjg2RjEwQUJFREU3ODMwN0YyN0Q2Q0JDOERBCis6MTA5RDEwMDBFNzEzRDMzNjQ3NTVGRTlFMEZERjYzNzk1RDdGMENDMzkzCis6MTA5RDIwMDBGODhGQkU5MEM0RDYwMDBBMUYzMzFCRTU1RDVFMzc4QUVDCis6MTA5RDMwMDAzODEzRjU4REJFNUVEMTUyM0QzRjgwNEMyREU1M0FDOUJBCis6MTA5RDQwMDA5M0NDQTIzQTdFOTI3MkFFNUQxQ0M2QTIzQTM5Qzk3NjE1Cis6MTA5RDUwMDAxNTEyQkQzNDJENDA3OTI0RUQ2MjI5M0RCRkUwRTQ3QzJECis6MTA5RDYwMDBEMEJBQzI3MTk5NzkzMjA3OTg2NzI0RTk4RjgxRTdBOTNGCis6MTA5RDcwMDAxMEZBODU4OTdDQTM0Njc1MkY1MjJGMEMyNEU3RjFGQjNFCis6MTA5RDgwMDA1QUYxN0E1MTVFQTU1RTRDQzFCMUUxRkE4MkNCOTg0Nzk3Cis6MTA5RDkwMDBCRjY3NzNDNzUxNjRBMUNGRUNBMTdEQUVEMTU4QkY3NDJBCis6MTA5REEwMDAzMjBENEQ3ODlEMjkzQTFDRjlGOEEzRkVGNzFCNzA3MTBFCis6MTA5REIwMDA1MUNDMzNDMEZEOTI5RDRCNUU0NTc2M0RFQzBBN0Q4QUM5Cis6MTA5REMwMDA3RUQwMkIyRTkxOUZGNTgwM0Q1NEQxREU4MUJEMjhFNUJDCis6MTA5REQwMDBGOTZCMjdFNjYzNDNCRTREOTMxOENBRDM2RDk0OEY1NTM0Cis6MTA5REUwMDBERDQxOUYwQkYxM0JCMzgyNzIwRTEyRUVCNTJCNzgxRDU1Cis6MTA5REYwMDA5OUQ0QjM3NjJENDRGOEIyNkE2MTdFNzU4NEMwODYzM0Y3Cis6MTA5RTAwMDBGNkIxRUJEMjREMTg5QjY5MUE5N0EzNUYzRjdBOTZGQzg3Cis6MTA5RTEwMDAwQTlCMTYyMEJFQjIzOTRDM0VGNDBCNkMxMDE3QTJERTIyCis6MTA5RTIwMDA1REU5MzBGMUZEMTY4Rjk1RjJGNUFEMEE0NDg4QTAzNzUzCis6MTA5RTMwMDA5NjY2MTQ3REU5M0VCNkU1QTI5QkVDMkQ0MEUyRDFFQjlGCis6MTA5RTQwMDBFRDdGRkUzQzRFNjExRjhDRjM2ODBFRUUzN0IwNDNEQ0I1Cis6MTA5RTUwMDAwRTIzMTIzRUQwRTk2M0U5MEZDNEJGMTczRkJFQzRBNzZCCis6MTA5RTYwMDBDNEFGMTVGMTVBNEFGNjMwQTFCRkYxNzc2MTM3QTVGRUFDCis6MTA5RTcwMDBDQzk2RkFENjc1QTIyNDBBNzdFQjk1RUUzNEY0NkI0MEIzCis6MTA5RTgwMDA4RkZFMURGOUE0RTFFQURFMzQ5MzhGRjRBRjlCRkI0MTEyCis6MTA5RTkwMDA2MUYxM0VCM0VCRjk1QUU2QTlFNUJBMjRGQzRCNUY1RkVBCis6MTA5RUEwMDA2MEQ1RUY5N0M0QzMxQjZGNjdFREE1QzZGQTAyOUJDRkMxCis6MTA5RUIwMDA1ODVGMjBFQkY2NTUyRDQ4N0M2MzFFMTdCMEEyOUNBQzcyCis6MTA5RUMwMDA3NDk0M0JEMENGNjlEMTdDQkYwQjUwNUQ4NDk5RkM2REZECis6MTA5RUQwMDBGMERGMERGM0NCRUI0MzIwRkYwOEM3MTBCN0M5NTBGN0Y1Cis6MTA5RUUwMDAyMkFGQTlCODBGOTJFMEJENDk2RThFQkY4NzBFREU0RTNECis6MTA5RUYwMDA3QTU4RjNGMzdEQTE3OEZBMzFENjRFRkM5MjVBQzIxQ0ZGCis6MTA5RjAwMDA5NDNGMTVGMEE2NUQ2NkRDODFGOEU4MDcwNzZERTQyNzRECis6MTA5RjEwMDA2QjYzQUQxMUFDQkI4QzlGNEYzNTA3MDMwQUVBREQzMjkyCis6MTA5RjIwMDA0NjdFQjI5QUNGRTc1Nzg3MzBBQUQzNEUxQjk1Qzk4NjkzCis6MTA5RjMwMDBFQUYwRDhFQTk5NDlDRjk3QkExQzBDRTlBREE2OUE4MjAzCis6MTA5RjQwMDA4OUY4NDVFMkM5RTMzNjE5RjZBRDNEOTI2RkJDQkZBNzZCCis6MTA5RjUwMDBGRDE1MURERjRDNzRCQkZBRjM4REM3Q0RGNTIxQzJBMUYxCis6MTA5RjYwMDBBNzZGQUJBNzI4M0IxMTdENjI3QTkxRjNENUU1RjhBMkU0Cis6MTA5RjcwMDA2MjFDRjAzQkRBNzlCODZFODM3NTc0NkE2Q0NBRUU1MjczCis6MTA5RjgwMDA4NDhCNTE1RDdCREQ2QzNCNzM4MDVEQkJDMzUzNzk5QkUwCis6MTA5RjkwMDAxQkM2QUJFODdBOTVENzhCNzdCQTI4NjhBQzEzRUZDN0E2Cis6MTA5RkEwMDBDRkZGQjY5QkVCREJCN0RENUMzRkE2OUYwODNDM0IxRUJCCis6MTA5RkIwMDBGMERDRDk5NUVDNTNFMDUxNjc2NjYyM0RGRDAzQjc2MjcyCis6MTA5RkMwMDBBQzM3RDBCQTg3QTNGRjIyRkI1NzU0MUJFNzBCMEJGQTIxCis6MTA5RkQwMDBERjJGREYwQkRGOUM4OUZFREM3NEM2NjVBM0Q4QUZGMEYyCis6MTA5RkUwMDBGQTg2N0QyOTkxMjE2ODU3NTk1NEJCMDVGMEJBNTNDNEFDCis6MTA5RkYwMDA4RDNCMjE5RTlDMDFFM0JBOTM1OTA4RDdFRENBODI3NjI2Cis6MTBBMDAwMDAyOUJEMUZEODZEOEY4REY3NkI4RTMyMzZBOTM4QjgwM0Y2Cis6MTBBMDEwMDBDNzlCOTRFRDJENkIyRUU0RUZFMzM4NDc5MjU5OEJCNTM3Cis6MTBBMDIwMDAzQzg2Rjc5QjkzODBFNTMyRjE3OTM4Njc0OTY5RUNGRTBECis6MTBBMDMwMDAxMTUwRUVEOENGRURFRTFFQUU4MEZDQ0YzNzA1REM2OEI4Cis6MTBBMDQwMDA0NzNFN0NFQjdCNTQyN0JBODgwNTlFRkMxMEU4NzMzNUFECis6MTBBMDUwMDBEQ0M0RjhBQUUyNDREMDgyN0FFMTUzN0MwOEY4N0VEQ0MyCis6MTBBMDYwMDAxRTVDOEQ3Q0IyQTA3REVBOTNGQTNBMTdCNjgzN0Y4Nzk3Cis6MTBBMDcwMDAyMkYxRDU5RjFGQjhGRTAxMzhDM0Q2NEMwMzlDNkMyQzJGCis6MTBBMDgwMDBDMjZERTVFRkM1RTM1NzVFRUYxMjdDMkNFOTA5RThCOTM0Cis6MTBBMDkwMDAyQTU1RDA3MzBEQTA3RTZFMEFGNzk3M0IyRDlDNEU3REZFCis6MTBBMEEwMDBGQ0UzQjJCNEUyM0VDQTU5MkI3RkNFMDI0M0I5N0Y2RkM0Cis6MTBBMEIwMDBFNUY0OTk5QjUyMTA0MUJGQkE1MzBCQTRBMDdGM0ZCNzYwCis6MTBBMEMwMDA2RkJGM0U0MERGRjVENEQ5MDJFOUQ3MjBGRERFRTJGMUQzCis6MTBBMEQwMDBEN0U5NEE3QjlCMDJFMzlDMzYwN0QyNTE2RTRGQkZBNTVFCis6MTBBMEUwMDAyQTJCQTlGRTgxRDc0N0NBQkFCM0QzNjZERkRBMkJFMUEwCis6MTBBMEYwMDBGOUJDMUZBOTgxOTVGNEQ4MTg1NzlDNjU4MTkxNkY2MkFFCis6MTBBMTAwMDA5Q0I1NEZBNTdEQkJDMjg3RUY1NkFGODZGRUYzMjFFMDFECis6MTBBMTEwMDA0MEJEMzRCN0NBMUU0NjdGQUVGM0Y3NEQ3RjQ0QkIzNjExCis6MTBBMTIwMDBFRkYxMjRERjJBOThFN0YwRTY5MTdGQzVGNkM3RUI1MkZFCis6MTBBMTMwMDA3RDQ5OTRBRjJENTJCQzk4NDc1RDVGRThBMEZEQjdFNTFGCis6MTBBMTQwMDA0Q0Y4QURGNzRFQUIxQUNDRDg0RkYxNUZCOTBGMDI2QjlDCis6MTBBMTUwMDBGRTk4QzlFNzRGQUM5RDA4RUJCQ0QyRDU2OUIyMDM0QzYxCis6MTBBMTYwMDAzNzY0M0ZCMUQ2MEFGNDdFNjA2NUQwODM3OTg4NzMxQjZCCis6MTBBMTcwMDBCRkI1MTZGMzEwNkU3N0EwNkJCQzFGRTBEQkY0OUQ2OUQyCis6MTBBMTgwMDBEOEVFN0M0QzhDMTc1RUJFMTZGMzBFMkY5OTQyODUwQUQyCis6MTBBMTkwMDAzQzlGQjI2OUZEMzRBQTUzMkU5NkUzM0ZCNTM2MDBGNkQ0Cis6MTBBMUEwMDA3RkVFMTM1N0ZDRjUwNDhDREY5MEZEOEI2OUU4MUYwMEYwCis6MTBBMUIwMDA3RDA1M0MwNzA4QkUwNUUzNjRGQjYwNEExNUY4MEVDRTNBCis6MTBBMUMwMDAxNDY2QzhDNzlBNjM3OTBEQ0FGNzc2NEEzRjlEMUQ5OUYwCis6MTBBMUQwMDA4NkY5RDg3OTEzOUFBQTM0MTg3RjUzRjYxQjZCNEI4N0VDCis6MTBBMUUwMDAzMTM2QTZCREQyMTE4MEY2RDZFQzM3QTdBNTAwOUY3NEY0Cis6MTBBMUYwMDBCMjQwMkRFNjREMjJEOUJGOTk2NkJEMUVDNkNGMzI4RTI0Cis6MTBBMjAwMDBFRjU0NDU1RTNGRkNDRTVBMUNBRkEyM0E1MDg2RkU0QzNFCis6MTBBMjEwMDBBOUU3QzNCNTU2NzhERjg1NzVBQzMwREY2RDlCODdBRDk4Cis6MTBBMjIwMDA0M0JGNUVFQUQxN0YxMTdBMTRGNEU2MTk5NDg3N0E2QjAyCis6MTBBMjMwMDBGNzUxNENGNTE2MkNFRkI1RjBGQTY2QTEzRkYyMzg1RkY2Cis6MTBBMjQwMDBGN0I1ODc3NkYzN0E3NEQ5RjZGMDc2RTdBQUM0RkFFODE4Cis6MTBBMjUwMDAyRjFFQ0VGNzlEQzk4OTlGRTc2NjczRkQyM0U1MjZGRDc2Cis6MTBBMjYwMDAwNDBCRUM0QTIwM0ZBNjZDRkJGRjQ4RkVCQ0Q5RkY4RkQ1Cis6MTBBMjcwMDBGNDVCQzY2NUY0NUI4NkQ0NkYwMjlGQTU0NjdEMEREMzYzCis6MTBBMjgwMDAwOEJEN0Y2NTExRUE4OTYzNkU5RkMxNUU1Nzc0Q0QyNDU2Cis6MTBBMjkwMDA3QkYyQUU0N0U4MTUxRjdGREY1NUM1RUI4MTdBRjdBNzQ0Cis6MTBBMkEwMDA1MEJFOEI1OUJCNEE5MDRFRjJCREQxMDJFRjU1MEY0RUI2Cis6MTBBMkIwMDBERjg0RkRFQUJBQ0M4Q0JFRjNEODVERjlBNTdFNjUxREJFCis6MTBBMkMwMDBFNjg3NzU3MTQ4OUQxNkE1QkM0MDFERTY4NzQ3RTI3ODc0Cis6MTBBMkQwMDBCRkI2QTAzRjg0RTNFMDc3MUNCODBGODJGOTVENTc3M0U3Cis6MTBBMkUwMDA2MkZBNEJCRkFBRUU2MjA2MEI4RkVDNkY3RjYzRTMzQjEzCis6MTBBMkYwMDBFOUY5RTVENjE1MUJDRjk4QkZFODNGOUU0NUVDMjdDNTg5Cis6MTBBMzAwMDBEOTQ5NEI2MjM4QUIyNTlGMDJCRTREM0FGRTVBMjBGODIwCis6MTBBMzEwMDAwREI0MjdGOTkzM0Q3Qjg3NkQ1RjUzQTg5Rjk3N0Y1RkFGCis6MTBBMzIwMDAwNUZBRjlEOUYxQTgyRjQxREZBM0JGNTlBMTA1QTY2MTBDCis6MTBBMzMwMDBGRjhBQUU0Q0RBQTc5MkZDMjFGOTQyRDJCNTMzQjM4OTM5Cis6MTBBMzQwMDBGMjdFQkQ1QjE0RjJBN0UyRTE5QTI3RTFEQUFDNzAzRjNFCis6MTBBMzUwMDBBNDNBQTRERUFEODM0RkNBMDM4Q0RGMjlDNjFGMzU5NjBECis6MTBBMzYwMDBFNEU3QzdEQzlGMDZCOUI5MDNFNTE3RjdCRDcxMURGRTI5Cis6MTBBMzcwMDBFRUUxMzNBRkVFMEZGRkFGODUxRjA1NzRFNEY4N0ZDMTQ4Cis6MTBBMzgwMDA0Njc1MEFGMUY2MzI4NkZGRENDQkQwQjM4MDlFNEI3RjU4Cis6MTBBMzkwMDBBODZFNDBCQjk5NDZFRjY1OUY4OEE2RjlBMDVGOTdFMDNECis6MTBBM0EwMDBGRkNFOEUwRkQyQUU0M0I5RDhBNzMyQzVDN0Q3OEQ3QUFDCis6MTBBM0IwMDBBQjQyRUFFM0YwODgzNzI2NjhFNDk3QzVFQzg3OEZGQzY4Cis6MTBBM0MwMDAzM0E5M0ZBMzU2NkJBQzdGNzBFMzg4NjkyREE4QkY5Mzc4Cis6MTBBM0QwMDBCOEJDM0E1NUIwMzZFNTMxMzgxRUNFRTY3QTZDNkMyOEZBCis6MTBBM0UwMDA3MTdDRjMwMzc3MkEzRDk3RjhERUIyQkM4QTdEMDBFQkRGCis6MTBBM0YwMDAzQjIxRUNGREQ4RUVCMDgyNzQ1OTIwRjBEOEU3Q0YwOEFECis6MTBBNDAwMDA3RDc2NzM1MkY3NzNFMkZCMTAwMzNGQ0EzNkY4M0IwREJCCis6MTBBNDEwMDBBNjYyREQ3MzNCRDdCQjcyM0U4MEI3ODU2MUM5MEE1QzFCCis6MTBBNDIwMDAxNUI4REVFNjI5MTRFMzcwQkUzQ0I1Mzc3QjFCRUEwRjk2Cis6MTBBNDMwMDA2NzcxQTAwQ0Y1OERFNDJGQjAyNzYyQkRBNkJCNjZEQTZDCis6MTBBNDQwMDAzOUZGQ0Y0QzQwODdFNzg1RkU1Q0IwOTlBRkJGRjMzRjQzCis6MTBBNDUwMDBBQUE2MjExRjc0QkU5RDk5QjE0QUM3RUZBNzg0MUYyOUUwCis6MTBBNDYwMDBDNzk1RjIyNERGOTNDRkY3OEJGMTVFQzk0RTIzN0M5QzE2Cis6MTBBNDcwMDAxMkY4NDMzODEyRDU4QkM5Rjc3MEJEQTRBRkRCQjhCRTU0Cis6MTBBNDgwMDA4Njc1ODc5MTRFQjBFRUIwNTI4RUVCNTYwQzc2QTJDRjA5Cis6MTBBNDkwMDAzRTA4N0NENzVCMDBDRjgwQzc5REU2NzAwRUQ2MzFCOUYxCis6MTBBNEEwMDA3MDNFRkJFNUU1MTdENjQzQ0Y3QkY3QTc5MkRFODkxRjA5Cis6MTBBNEIwMDBGRjVDMzY4RkU3QjY5OTc4OURENTExMTNDODMzQ0E5OURBCis6MTBBNEMwMDA5REMzREJCM0Q3NEJFMzc2MEIzRUJBQkMzRUZDNkFGMkNFCis6MTBBNEQwMDBCM0NEQzJFQjYyMDE3RUFBNEZBQzdGMzE3NzlCMTFGRUY4Cis6MTBBNEUwMDA5NTAyRkU1MDMzN0U4N0U3RENDNEZDQ0Q4Q0YwMTY0NTI4Cis6MTBBNEYwMDA3Q0RERUJGMTcxRkQ2NDA5OTFGRkQ2QkI4NTUxRkMzQTFGCis6MTBBNTAwMDAwNEZDMDgxRkI0MUI4M0Y2NzJBNTMwMjZBNzI1MUQwQTdDCis6MTBBNTEwMDBEMUIxNjIwM0Q4NjlDNDlCNTVFMkVERjU1REZBNzkzRjhDCis6MTBBNTIwMDBDRjRFMzU3QzRGNTgyN0U4M0YwNEVDRkJCMzAwRUYxMENCCis6MTBBNTMwMDAxOEU3Mzk4MjlCQzM3NTZBNjNDNzc1OThBN0VCQjNGN0IxCis6MTBBNTQwMDA5RTM0QzEwRkYxNzA0NjJEQjkxQzRFQUFDQjQwN0ZDNzc3Cis6MTBBNTUwMDAzNzJBMDYyNzhFOEZGMzMwN0I3MDE1OEVEQkYwQ0U5RTY4Cis6MTBBNTYwMDA1Q0ZEQjhFOTFFQ0U2RjRFNzVFRTA0MUJFQUIxRjVBMDk2Cis6MTBBNTcwMDA1NzQ5MUQ4NDBFRTE3NzE2RjMwRjY0MzhENjMwOEExQkQ1Cis6MTBBNTgwMDA0QzE4MUZDQTc5RTc4QjdDMkRDODY1QzUwQzU4NUE0OUYxCis6MTBBNTkwMDBERjNDQTAzRjc1RkFBRkM4NjNFN0ZEQUQ1NTAxQUE3NzcwCis6MTBBNUEwMDBEM0I4N0Q3MkI1OUZCRTFGRjczMTA2QjJBQkZGMkM3RUNDCis6MTBBNUIwMDAwMDNBRDJCQTdCNzdDM0JBN0MzMUZDNzU3NkRDQkRDQTZGCis6MTBBNUMwMDA4NkZBRjIwNEYzQTNCRTk0RUIxQTUyREQ5RDg2NzUzQzI1Cis6MTBBNUQwMDA4RDQyOEYwMjVFNENDODA3Q0UxRkY5NThCMzRGQTc5RjFDCis6MTBBNUUwMDAwNUZEODYzMjJFNkYzMjNFMTk4QTFCMkNEMEJFRDYzMzIzCis6MTBBNUYwMDA1Q0VBMUJDQTE3OUM3QUYxRTU2N0Q3NTA1Q0MxRTlENUM0Cis6MTBBNjAwMDA1OENERTkyQkU1RjUwRTRGRTg1RTBGQ0FDMUVDRkI2OEFCCis6MTBBNjEwMDA3RjA3RkE1NUEwQkVBQkRCQzBFNzgxN0UxRDhDRTRCNjk4Cis6MTBBNjIwMDBBQkEwMUFGMEY3MkY5RUQ0ODQ3NDczMDYzQjZDRjRCRTczCis6MTBBNjMwMDBFMEZGNzNGQkFGOEUyMDFGQkE2RUVEQURDMkZCQzAwRjAzCis6MTBBNjQwMDAwNDRGNjc0NzZBMDRFMzY2RjI5N0YxRkQ5NzE1NkVCRjAyCis6MTBBNjUwMDA1ODg4RjAzMkJGREFFMUQ3RjM4OTg0QUY4RkVFMENFODg3Cis6MTBBNjYwMDA3RTc1RUNGRTkwNkEzRTZFRTMzRTE4OTc4RjQzRjI1MzgwCis6MTBBNjcwMDA3NzE3QTM3Q0IzQTQwRjgwMUNDNkZDQkVENDNCMkVGQzcyCis6MTBBNjgwMDAyQzNFMzM4NjQ3ODkzRkY5N0UwM0JFQ0Y3OERFMDBFMzU4Cis6MTBBNjkwMDBCRDQ2RDY0REY5RDMzQTM1OTg4N0YxMUFDQjRFQTJFRjg1Cis6MTBBNkEwMDA1NDIxMEUyNkZENzNDNEM2MzQxQkJDRkYxQTVDRDFCRUY4Cis6MTBBNkIwMDA0RjUyOTdEMEY3NDI5MzhBMTU5MjczRDAxMDMyNkYxNjhCCis6MTBBNkMwMDA0NTNGRjJFNkYxMjlBNDFGRDgxN0Y3MEVDNkY1Qjg1Mjk4Cis6MTBBNkQwMDAzOERGQzEzODU2MzE4RTk1RkM1NEExMEY3RjUzMDBGQUY0Cis6MTBBNkUwMDA1MDg5RTlGMTIzOEE0MkUzMUNCOUZFQUFFRDU0OUIyOTYzCis6MTBBNkYwMDBENjg5RTNBMURGNzA0NDk5OTE0N0ZFQUNDODZGMDBERUI0Cis6MTBBNzAwMDA4NkVCRkRCMzE4RkY4NjA1NUNERDA1Rjg1QzFGMjc2MTRECis6MTBBNzEwMDA1Q0QzMTc2Nzg1QzdBRkJCMTFFMkFDMzE1MzNBQTIyNkIxCis6MTBBNzIwMDAwNzRBQzM4NEU5REY4MTc5Mjc0MTlDNjU4M0Y1REY4RjgwCis6MTBBNzMwMDA3QzhDRkFCRTMwQUNBNjIxNUM0MzYwREQ3MEVCNjg3MkE1Cis6MTBBNzQwMDBBOEI0QzkxRTlCQzcyREYyNUY2RTUxQjc4Q0ZFM0M1RTRDCis6MTBBNzUwMDBDRDVFNkU1N0Q2N0JCOURERTgxNjU3NzAzQjEyRTZDQjVGCis6MTBBNzYwMDBGRTUzM0NGRjc3M0JEN0UzNkIyQTEzRDczNzZGRjExOEMzCis6MTBBNzcwMDBGMzlEMzc4QkZEMjI4OEI3QjYyMEZGNDBCQzI1RUE3N0QyCis6MTBBNzgwMDBGOUZFMTJGOEI1ODRERkFBMDdBQjY5REZGNEYzQUU1OTFFCis6MTBBNzkwMDBFOUZDQkMwNzJFRkYwQjQ0RkRFQzVERjdDRkZBMjFGMjdDCis6MTBBN0EwMDBERDg3NTg1NzBGNzRGQzQ4RUNFRjdERTgwOEE0NjE5REU1Cis6MTBBN0IwMDA1OTdENzJFMjNBRUE1RjdBRjgzQUVCMDUxRTRFQUZFMDU1Cis6MTBBN0MwMDBFNzMzMkNDMDdENERGMDgzNzc3QkI4RkQ1QUQ0N0VDQjI4Cis6MTBBN0QwMDA2NEE0RkIyMjg4RTM3MTVGNTNENjRGNDgzQUQ3NkM1NTg3Cis6MTBBN0UwMDAwREZCMTMwQjcwNUYzM0VCMUY4OTIzQ0EwNjg4MjM0NkNBCis6MTBBN0YwMDAxOUUyMDgzOTZGN0MzQzcxNkE4NUM3QjA4RjMyQjdCREVBCis6MTBBODAwMDA1ODlDOEZDMUZCQ0Y2MzdFODI3QjVFNUJBRTYxMUY5NkRGCis6MTBBODEwMDBCNUI5QkVEMkI5MDYxODNGODQxM0MyNjczMURDM0ZCNTYzCis6MTBBODIwMDBDMjBBMDJBRTgzRTM5M0MxNTQ3RkIyQzUxM0ZBOURDNzM3Cis6MTBBODMwMDAwMDQ3MEEwQjFCRjJDOUUzMUNCNERGNkZFMzc5NkNBMDdECis6MTBBODQwMDA3RjU4RUY1N0M3QzM3NUM2RjM4RkM2NkJDNTAzRTBCOTEyCis6MTBBODUwMDBFNDdGMjU1RUFCMThDN0Y1MUE2QjU3QTg5NjY2Q0NDNDgzCis6MTBBODYwMDAzOEZGNTlEOENCNEI5RTE0NDMxRTYwN0VCNUIxOUZFQThBCis6MTBBODcwMDBFNUYxQkZFQTREMzFGOENEMDNFNTAxRjQ3RUIzNTI4QzJBCis6MTBBODgwMDBGQTgzOEZENzIwRUM1NkUxNjc2RjUzMURFQjc4MkZGN0QzCis6MTBBODkwMDAzM0M2RTYwNDkyQkQ3MDVEMjdFQUQ4RDdEOUY4NzdGRUIzCis6MTBBOEEwMDBEQkZFN0VDODMzMEZGRDhEMzdDRDU0NzdDMEY2NzFGRUM5Cis6MTBBOEIwMDBBOUZDRjFCMjY2M0MzN0MwREVBMTM4RjRERkI1N0U2Mzk3Cis6MTBBOEMwMDBCOTEyOTgwRkYyRTAxNjdBQTJDRUNGRDc1M0U3OEY1QTdCCis6MTBBOEQwMDAwNkRCQjFBRTk5QzM5MUQ3NzE1MEQxNzQ3QTIzQUY4NjlDCis6MTBBOEUwMDBGN0YzNzlDRDg2RkE4MEMxNUU3RTJFNDM5MTU3RTYwRDRGCis6MTBBOEYwMDAyMzA3QTczQUIxN0Y0MDQzM0I5M0QzQTE5MDFEQ0E2OTc4Cis6MTBBOTAwMDA2MkY0M0Q0RUNFMjhFRTlGN0Q2M0Q0MzY2NTVFNjk2QzYxCis6MTBBOTEwMDBCRDZEQTYxOUE1MEU3OEFGQ0Q5REUyNDdCREJEMkEyNzE2Cis6MTBBOTIwMDA3NEE1MTdFMTNCMTk4RDYyM0E2N0NDQzkyRTBERTNBN0Q4Cis6MTBBOTMwMDAwRDM5ODFBQjEwMEY3MjlEM0VENTkxODNGNjI3RTUyNDJBCis6MTBBOTQwMDA4N0FGQkQyRjJGQzFGNTM2NjM2QjA1NUNEQjc5N0NBODIzCis6MTBBOTUwMDBCMjYzOENGQkJEQjQ4RkVCNUUzNTk0RUM4NzVDOEYzQkIwCis6MTBBOTYwMDA1M0U4NUYzNzBCRUQyMUZGOUJCNTkxRkRCMzcyN0JFQTk2Cis6MTBBOTcwMDA1RTU1NDI3RUIyQTQ2QjJDOUYzMkFDMUNGMzI5QzVFQjEyCis6MTBBOTgwMDBBMkRBNUM3OEVGQzVBREE2ODRFNzU4NEMxNTc4ODc3NUQ4Cis6MTBBOTkwMDA0Q0Q0QUZFMzcyRjIyRUZCOTkwN0M4NTM0OUJFNEY5OUNFCis6MTBBOUEwMDA5MjM4RkU4MzA4OTA5RTU3RkVEOEY5NEQ5MkNGMTYwQjMxCis6MTBBOUIwMDBDM0ZDQTZDNEZGODY5Q0UwNkM4NDI3QTc2MzlCODJCODc3Cis6MTBBOUMwMDAzOTI1RUEyMzRFMjVGM0ZDRURBOTM1Q0YyQUU4ODdEREFBCis6MTBBOUQwMDBCQjk4Mzk1NDM2MzBEQzc1Q0JENUMwN0NCRDNDQjc1OEZDCis6MTBBOUUwMDA4ODJFMzIwRTg4QzFDM0UzOTYyNjJGRDdFQkFGRTcwNDNCCis6MTBBOUYwMDAxNzIxQkQxQkY2QURBN0ZDREVFMjFERUY1QkJFNzRGRkE5Cis6MTBBQTAwMDBFMzJCRTI0REE5RTFGMTREREQxQzJCRDU1MTU1RkU1ODRDCis6MTBBQTEwMDAyM0JBRDdCNjU4NjhCRkIyNkVENzZFRkE4RThERERDNzJGCis6MTBBQTIwMDBGQzI4RkY3NTFEQkI5NUY5MzA2RkVEQUVERENBMDIxRDI4Cis6MTBBQTMwMDAxRTczRUIyMjU0Mzc3RTQ1QUFDQzVGNDcyREE4Q0ZFMzg3Cis6MTBBQTQwMDBGOTFCRjNGRjY4Rjc4RkRBQjhGQzlGQURCNDg3MzE5RjJECis6MTBBQTUwMDA3REQ2MUNBQUMzN0U2N0JEMjk3RURDM0Y5NTc4N0Y2REJECis6MTBBQTYwMDBGNzhENzQ3RTQwRUE5RUE0Mjg1RURCNENEQjNENTZFODAxCis6MTBBQTcwMDBENzc2QTVDNThGRkNCNDIxMjdCNDBFRTk5MkE5MDUzQjcyCis6MTBBQTgwMDBGMUZEMEM2N0FBMUZGM0UxQkUyNDU2NEU3NkVGMkJFMkQwCis6MTBBQTkwMDA2MTRDMUM1RjhDQjk4RkNCQ0IyQjQyQkZDMDFGRDU3MUQzCis6MTBBQUEwMDAzREVERTU3MTJFNkUwN0EwQkUzQTZBRTZFQkQ4QzMzOERECis6MTBBQUIwMDBCQzY2NkZFMDQ3QzRCN0M3MzI2OURFOUNCQUE4ODI3NTJFCis6MTBBQUMwMDAxRkYxRjNDNkY4MkFCMENERUJGQTNBNzA3NjU4NTBDRkEyCis6MTBBQUQwMDBENzBBN0Q1M0Y5RTMxRENBMDczQUI4M0JCQzJBQzE5NzkwCis6MTBBQUUwMDBCMzZCOUI4MkY5MTY3ODRFRkEwNkZBMzNBQ0IzQ0FEOTI3Cis6MTBBQUYwMDBDNUYzNENCNUYwN0M4MTRFQkZDODc1MjREMDMzQkZDMEMwCis6MTBBQjAwMDBGNUQ4NEY3NjFERTY3QTI2Q0FGM0NCMDJERTc4N0ExRTk4Cis6MTBBQjEwMDBGMkZBNjhGRUM5NjA2NkU5QkUyNTNDMTRFM0QwQTM0NTlECis6MTBBQjIwMDBDOTM0OUU5NEZCNzgzOTNERTRFNUZFNThDRUQ2MUQ4QUEzCis6MTBBQjMwMDBDOTRFNzk3OEYyQ0IyNDdDQjJERkQ4OUMwOUFGMjEzQzk2Cis6MTBBQjQwMDA2M0E2NzQxMTFFRUFCNzZBQjQ5RTQ5OTZFMEUwMjUzQUZFCis6MTBBQjUwMDA3OUY4QUQ5MDlCNTc2N0ZGOTFDRURCRDlGMDhCQjc4ODIyCis6MTBBQjYwMDAxRkVCREIxNTFFMEZCNEJGNjU5OTg1NzYyNkZDMTMxNTA4Cis6MTBBQjcwMDBGNzREQTY3MUQzQ0UzNjhBRjNBOEE2NzU3MjNENUNERjc5Cis6MTBBQjgwMDBCOTVCOUI2NzhGRjE2OUUxNjdBRkQyMzk1NkY1MUQ0OTEzCis6MTBBQjkwMDAwQ0Y3NTM4MUZGRkU4MEY0OEJFNzUzODkxRkE5NjcwN0U5Cis6MTBBQkEwMDBBMjI3RTgyM0ZFRkQ0M0Q4MjJGMkQ3QTFDMjk5QTkzMUZBCis6MTBBQkIwMDAzRDZEMTY3ODYxNzY3RUZGQTI1ODU3OEM3RjQyRTc3MDE0Cis6MTBBQkMwMDBGRTk4OUVCNTkxNUMxNDdFNTZGRTJBRDY5OUQ2RkIxNTRBCis6MTBBQkQwMDAzQUJGQzM1OUM1RjFBOTg3NkI0NkMyN0QzMkFFMjczMTUyCis6MTBBQkUwMDA0RkNFRjMyQUREMDUzMzc1REY5M0Y1RTk3QkYxRkU3RjY4Cis6MTBBQkYwMDAyMkJEQjlERDg4RjJGQkFDMDhFREI3ODQzRjlFN0U1N0RECis6MTBBQzAwMDBFNDcwM0YzNjAxOUY2OTM5MDlFQzk5QjRGMzg1OEZFRjAxCis6MTBBQzEwMDBEMUYwN0IyMEM5M0ZEMzkwRUUzQUZFQzlDQUIxRDBCODdCCis6MTBBQzIwMDA1OTM5MUFDMUIzQjE5MkVGNUY2RDM0NzMzQkI2NzFBNTU4Cis6MTBBQzMwMDA5NUVBNDI1RkJCOUREN0E5QTU3RUQzMTJDNUVCMTFEMzgwCis6MTBBQzQwMDBEQzNBN0M3RTI0ODdDM0QxNjY1QTQ1REZDNzgxNUMzQUYzCis6MTBBQzUwMDA3MzQ2MjNGRkE0MzFBRTFGQjkzRURDRjAzQ0Q3Njc3NUM1Cis6MTBBQzYwMDA2MTdCMDRDRkFCQTkwQkREM0E5RkVBMTA5QzM2M0ZENjNGCis6MTBBQzcwMDBFRkIyRDA2MUNCQUNENEZFN0NFNURCNzNEMDgyRjA0Rjc5Cis6MTBBQzgwMDBFQkUwRjIyN0U5MDBGQTk0Rjg0QkNBODNDNDZCMEM5RkZGCis6MTBBQzkwMDAxMTgzM0M0OTdBOThGQkZDODk1MDIxRjc5Nzc4OUM1MkE0Cis6MTBBQ0EwMDBDQTU0REExN0FBQjEwNjhFRTI3NzhDMzU2MjNGMTVFRkU3Cis6MTBBQ0IwMDA2MzlEQUJEQzRGOUQyQkU4RjJCODNEMzgxMkQ3RDk2RkJFCis6MTBBQ0MwMDAzRkY1MkJGQUQ5QjVDQkRGQTBCOEU2MUVDRkVCNzQ5NUQ0Cis6MTBBQ0QwMDA3MjBCRjFBMDQxQkUyNzA4QkEwRkNCRTFGNjdENkEwRUQ4Cis6MTBBQ0UwMDBFNzlCREE1MTFEMjQ5N0I1MUYzNjkxM0NEQkE3NzBCRDU5Cis6MTBBQ0YwMDA2NjNGNjlENEM3OEMzRDI0RDZCQjhFREU5Qjk0RDIzMThGCis6MTBBRDAwMDAxOUY3MjEyNzNEQTEzODMwNEUxRTA4Q0U0NUY4MUQxOEYxCis6MTBBRDEwMDBDNjRCNUIwRkE1REQ4REY4RkQwMkJDNzVERDc3NDJERjBDCis6MTBBRDIwMDBDQzExRTc0M0VFMDQ4NDEzQkYzNzU5QkVDQzFGQkZEQzAwCis6MTBBRDMwMDA3ODJDN0E1Q0ExRjM0MjA0MkVDRkVFQUFCQUU2MjNEQzhCCis6MTBBRDQwMDAzN0Q4OTlFRUM3RUZGM0NGRUNCQUU1QkIxRjAxREM2NzRDCis6MTBBRDUwMDA3NzhDRjdBMzlGRTA2QzBFMTJGRkY0QkE2Q0ZFRUQzQzBCCis6MTBBRDYwMDAxRjNBMDVGMzNEMkIzQjBFQTVFMTc3NDU5RjNFM0JBMkU1Cis6MTBBRDcwMDAxQ0Y1RjYxMjAxRTc2N0NGQUJDQjExMkZBQjlFRjlGOUFCCis6MTBBRDgwMDAwREY4QkMzNkEyNjRBMUZGN0E3NkU3MTNGRjk1MDNFM0MyCis6MTBBRDkwMDBENEVDNjhDNDEzQzg1OEYzQjNCRkE0QjhDMDE0RDlDNjYwCis6MTBBREEwMDBFRkVGNEMyNzNGRjdEMzI3RDdERjgwRjg2RUVFNjhBNjhBCis6MTBBREIwMDBFNzlGM0RCOThEREFBRjNFRjNGMzU3RkUwM0YzMUZDMUIyCis6MTBBREMwMDAzNEZBM0VGQUIzRTcwRjEyNURFQTQyMUFENUM1MEZDNDUyCis6MTBBREQwMDBENzFCNzcxRkU0RkExMkVEM0NDQUMxMUNBRUM3MjQ1RjMzCis6MTBBREUwMDA0QkZFRkRGNDk5QkJBRUQxREIwRDc5QkY0REU0NDFEQUVBCis6MTBBREYwMDA5MkI5MUQzOTIzRTRCNjc2ODJCRDBEQUY2NzdFNjZBMzk2Cis6MTBBRTAwMDA3MzNCMUIyQ0REMjUxODFGRDc5NTcyQkU1ODkxQzNGNUQ3Cis6MTBBRTEwMDA2MDVEQzcxMjczODM5RERFQTc3MUZFMERFNDFEQUY1NzAxCis6MTBBRTIwMDAwMzdGNjJGRDE5RjREQTcxODlFQUE4OUVBM0ZFRDA2RjUwCis6MTBBRTMwMDAyQ0U2NDk2NjU3QkZDRkJGMkIyRDZEMzJENzEyOUNDRjYyCis6MTBBRTQwMDBGMkU3QjA2QUZERjM4QTY1ODlGNzM1QjZFNEQ4MERGOTAzCis6MTBBRTUwMDBEMTlDQ0UxOTc5M0VEMjAzNDlGRTIxM0FGRjM3QTcyNjZECis6MTBBRTYwMDBENDhDNzUwMjM3MkQwQkY5RjEzQkZBMTczRjc5N0IzMjAxCis6MTBBRTcwMDBFNkQzOUUxOUFBOEMyNEZBQUIwQUI3NzM2MTNCQ0Q1MzczCis6MTBBRTgwMDA4RkZCMEUxMDdGM0MyQkU0QzRFRDYwQ0U2QjYxM0Q5M0Q1Cis6MTBBRTkwMDAzNEU2QjRFMzk1QjFFMzY2RDIwQjRGRDFGOEUwRTc5MDI2Cis6MTBBRUEwMDBGRkU2RkJFNUVDQTdEMEVGRDk2ODBFNzk0N0UzMzg2REY0Cis6MTBBRUIwMDBDMjNFRUVFMEYwQzNGQjBFN0IzOThERTdCODk2RkJFQkFDCis6MTBBRUMwMDA0QkYxQkRGMzJCQTczQkQxQkY4NzcxQkJDQ0JBNzgwQzNDCis6MTBBRUQwMDAzOEIyMDBFRDIzOEUzNzBBRjEzNDI1M0M4N0VDOTRDRjRECis6MTBBRUUwMDA0MkVCOTNFNzgxQzJGQTI5N0YyQUU1MzMzRTRGODNGQThBCis6MTBBRUYwMDAwOUYzQURBRkU3NTQxRUNFNzFDNUFFRUUwMUYyMUNENjFDCis6MTBBRjAwMDA1Q0ZFN0M0QTZFODBBRTVGRjU3Q0QxNTc2N0Y3NzAzQjg0Cis6MTBBRjEwMDBGRkQyRkJDNEI3MERDOEI3Mzg3RkU4NDM4MzlEOTdGNUQwCis6MTBBRjIwMDAxMTFCRjdCRjRGN0MzQjdGMUZEN0M3MERGQjJBMkQxODg2Cis6MTBBRjMwMDA2RjlENTkxMTYwMUY4MEEzREIyMEY4NkZBM0QyQkQ5MEQ1Cis6MTBBRjQwMDBCRTRGREI2RkEzRUYwRTdCMjQ3RkI2QkZGRjMxRUE5RkJFCis6MTBBRjUwMDBBMjdENUVBQUU3RTlEOUNGRjlGNDg4Qzk0NDc5ODAyM0I0Cis6MTBBRjYwMDBEQkFGREFENkFDRjRCN0FCRTA2RjkzOUMzNDM0MzFFMUFECis6MTBBRjcwMDA2RjJGN0IxQkZEQjNGQTFBNUUwN0RGMTBDNzQ3ODU4RjYzCis6MTBBRjgwMDA5RjZBNDU3RUM5MDBFRjE4RUIzMkMwOUY5OTRDREY2RDc4Cis6MTBBRjkwMDBENkIxRDEyOEE3MzkxMzAzRkI3MzY5RkY5QkM3RTczOUUzCis6MTBBRkEwMDAzNUEwNEZBMDdEOTM3M0IxMUY0QjA3MzIyNjgyNUY4QzczCis6MTBBRkIwMDBGQ0U3QkNERThGRjlBNjhERjkxREFERTgzRjg3MjczMTkwCis6MTBBRkMwMDAzQTc3NzVBM0I5N0QwMkM2QzExQjI3RjkxQzgwNDlDMDE5Cis6MTBBRkQwMDBEQjBFRjJBRkQ5NTA4QkIwNjdGM0M5MkY2RkYwRkNBQjJCCis6MTBBRkUwMDA5RkYyQzFGMUYyQkY3RjI1Rjk3NzBEQkU2NDNGOUU4M0NBCis6MTBBRkYwMDAzQjZEOUZCMjk0RkIzMzc2ODZGMDM3MDA3RUIxM0QyRERBCis6MTBCMDAwMDA3MjVEMDRFMTM5MjdGMDI3RjFEODYzRUVBMkYzNzg3QjczCis6MTBCMDEwMDA1RTQ4QTJGMzBEQTc0REU0RkM5QTMxQjE4M0Y0Qzc2QkVGCis6MTBCMDIwMDBGQjZGMjQ3QjJERjkzMjc1NkYxMkQ5RUQ0Q0NEQTFGODUxCis6MTBCMDMwMDAyOTVGNzQ0QjEyQzIzMzRGQzBEMzJFRUE4NDMzODQxRDcwCis6MTBCMDQwMDAyOTVFQzdGREI4Q0M1QzJFNEY5OUI5MjY3MUI1MThFQkI3Cis6MTBCMDUwMDBBQzFDNjFDQTNCOUMxM0Y0MjczNkQxOURGQjU0M0YzRjg3Cis6MTBCMDYwMDA0QUYyNTRCNzhCOEZFNzRDMEE5NEREQUJFMzVGRTk1RjlDCis6MTBCMDcwMDBDOTdBMDNBQzFCOTg5MTgwQkZDN0U2NzIzQjU4RjhGOEI5Cis6MTBCMDgwMDA1MkEyRkJCQzFBNzEzRUM0M0FFRTU3MzBFMDBCQzQxQjBGCis6MTBCMDkwMDBEMDkxRjhFMDI2RTcyMkEyREJCQzc1Q0EzNzg5OEVFMUExCis6MTBCMEEwMDAwQUNBMUI0QUZGMkM3RUZDNzE2MjdEM0I2REMxNTE1ODYwCis6MTBCMEIwMDA2N0Q4RUI0QUY1RTM3RUQ3Q0U4QzgwODlGMkVFNjUxOTJFCis6MTBCMEMwMDA5NDA3NzE2NTcxN0ZEMTI1RkNDNTk4REMwNzQ3OTk2MEFECis6MTBCMEQwMDA5RTRGRENBOTlDREU5MURGNjg5ODE3OUU5MkVCNEJFOEFGCis6MTBCMEUwMDBFN0Y1OEZGM0Y5NzhEM0RCQzNDMzMxRUU5MUY1NjExMjQ1Cis6MTBCMEYwMDAxRjkxOTVDOTczRjRGQTc0ODJBMDRCNjQxODlCODM3QUVDCis6MTBCMTAwMDAwM0UyMDkzQkU1QUYxRDMwMEZFNjEzQjY1RkY3MjRDRjJFCis6MTBCMTEwMDAyN0YwNzNBMUFGQ0FFNURGMzU0RkNBMEE4RUEyRkRCRjgzCis6MTBCMTIwMDBFMkUwMzI2RTNGRjkzQUUzRjFGMUJBQjA5QkFGQ0VCRTQ2Cis6MTBCMTMwMDBCMzBDRTNEODg2NUJFRDdFOTRCQjBEMkYyOTczODlBRkVBCis6MTBCMTQwMDBDMzU2M0MzQzA4Rjg5RUNCMjEzODRDNTQwRkM1NDIxQURDCis6MTBCMTUwMDBEMUEzQTEyOTE4NDlDQ0Y3MzM0OENFMUFDMEVGQzMzODgwCis6MTBCMTYwMDA2MDFBRjJCOTkzRjgzRUMyRjk5RURCM0Y5OTZGNDAzREY5Cis6MTBCMTcwMDBBOUY3QjdBNTNFOTA3QTA2RUQxQkYyQjM5NDhCODYxQjE4Cis6MTBCMTgwMDBCQTRCOTBCRTVGNTVBRkY0OThCOTlDRjcwMDFFNTA4RTM1Cis6MTBCMTkwMDBBNERDQTRCRUM4RTU2NUNENEE1RjI1M0U1RjAzNzJBRjVGCis6MTBCMUEwMDBBNzc3N0M3Qzg2NzA2MkJDMjJGNUZCQUE5Q0UwQjc3MzEzCis6MTBCMUIwMDAxMTRFNTNCNDk1QkU3RDE1RkFCOEUxQzVENTI1ODlCRUFCCis6MTBCMUMwMDA1RjkyRkFEODJBQ0VEM0I0NDY1MjIyRkE3RDA2RENCMzc3Cis6MTBCMUQwMDA0RjJEQTc2QjE4RUQ1MUNBRjJDNEY5OThENUI5RDJCRTVDCis6MTBCMUUwMDBGNkFCNzc1QTlERUJFQTVGRUZFNDQ2REI4NUYyQjMzREMxCis6MTBCMUYwMDA4NUJFQTM5M0Y5QTlGODcxQkYyRkY4NEREMjQ1QzYyOTkyCis6MTBCMjAwMDBCODVGODBGRDlGMTJGMkIzNTlDOEU5NzNFMkFBOEI3RjQxCis6MTBCMjEwMDA4OEZGN0RBNkQwRkJCOERGM0Y5MDFEOTNFRkZEQjNGMjEyCis6MTBCMjIwMDA2NTcyMUU2OTRGRTNFOTJGRjczQjcwM0QzMzRBMDdFRTI1Cis6MTBCMjMwMDBENzdFNTBDNDgxNzFGQ0Y4ODJGMEE3RUVDRDY1NzQ2REE1Cis6MTBCMjQwMDAzNzQ3M0YyN0I5NUE5MkNBNjg5RjZEMzMwQjY0RTE3RTM2Cis6MTBCMjUwMDBEOTJCNTc3MDc5MDhGNDk2RTBGODU3RTY4NzMyRjI0NjEyCis6MTBCMjYwMDBDN0YyQzI3ODFGRTM5MzVBOEQ4NTcxOUZBQzc2QTczOUQ4Cis6MTBCMjcwMDBBMkZGOEU2NzI3N0U0ODA5RkRDRkE3NUFDMzJBRjBGOTlGCis6MTBCMjgwMDBCOEZDRDA2MUE0Njc3ODAyRkY1RTJGRkMzRDFCRURGRjg4Cis6MTBCMjkwMDA4MDIzM0QxQUY1NEIyM0VCNEU0MzNDMzdBODVEMjU5OEEwCis6MTBCMkEwMDBDN0RDRTIwRUJEOEVGRDRGOTlCQTBBNzhCRDA1REY5RjVGCis6MTBCMkIwMDAzQTI5RjJCRTI3NDVERUI3RDMxMkNERkY4RTMzNzZDRUM0Cis6MTBCMkMwMDBERDA1QzZFQjc1MkU3NDk5MzIzMTBFN0M2RkRGM0IzRjg2Cis6MTBCMkQwMDA3QjA5REVCRUUzQTU3Mzc3N0MxRkIxQjUyNkU1Q0UxRkUzCis6MTBCMkUwMDBDMUI1REFBQTA2RjVFN0ZGOUM0QzREQUM2NzRGMDkzRUE1Cis6MTBCMkYwMDBFQUFCQTc1OTk5OTQzMEVGQkYyNzhGRjM0MTYzRENGRTg3Cis6MTBCMzAwMDBFRjlFM0MxRkJGREZGNzVEMTZERkZGN0Q2RjgwNzNCMkRFCis6MTBCMzEwMDAyNkU3NzFGQTc0OEEzQTlGRjhFN0QzQzQzQzNCQ0RBQzc4Cis6MTBCMzIwMDA2NDMzQzJCMzJEOTVGNkQ3OTlDNkNGMzdBQjc5QTREMDg1Cis6MTBCMzMwMDA4RkZCOTI5RDQ1RkNGQ0ZDREU0NzE1QjIwMzI3Q0Q1Q0RDCis6MTBCMzQwMDBGRkMwREZBREQ2OEE5ODFENDUzNzA1RkRDNDFBNDczOEMyCis6MTBCMzUwMDA2QTAyRkQ1MUIzMkMzNThBRTc2N0MyN0Q2RDFDQ0E1QTVCCis6MTBCMzYwMDBEODQxRjVBNjczODU3RDlDRDdGNERBREYzMEVGNTFBMzgxCis6MTBCMzcwMDAzMUVCMzg3OEVGQjQ3RDdFMUE5QTg3ODVERkJBMTc4RjY0Cis6MTBCMzgwMDBDMDYxRDlENUVEQTIyRTUxOUNENzE2OThBRTVFNEFGOTcwCis6MTBCMzkwMDAzMkJGQ0VGODVEQ0JERUJDQTAxNUY5QUMzQTlERTNCQjY1Cis6MTBCM0EwMDBGQTVFN0U0RUFGRUNGRjkyOTBEQjdFRkM4NkJDMEFGMDJDCis6MTBCM0IwMDBGRTUxRTFGNjI1N0UxRTc3RkU4NEU3NTFCRjJERjcwNDhFCis6MTBCM0MwMDBCMzY4RkM3QkNGMTlGNDVBOEZEMkZERjQ4RjkwMkY5NzdFCis6MTBCM0QwMDBBNDhBNzNENDU4ODFCRTVFQ0E5RkM3RUQ0QjJERUUzNzQ5Cis6MTBCM0UwMDA4MTZBM0M1RkQ2NTVCMkJDMTBGOUJGQjdFMDc3OTg3NzU5Cis6MTBCM0YwMDAzQjkwNDQ3NUIxQjVCOEVGQTRBQjY3MUI2OERGNjlFMDVCCis6MTBCNDAwMDBGRDI2OUYwNUY5QkNFMUEyNDI3QzMyRjdDMDZCMjc1MEI0Cis6MTBCNDEwMDBBRjM3NjhEREM0M0Y3M0FENzZBMjRGQzM0NThEOUVCMzkxCis6MTBCNDIwMDAzNkYzNTlGRDc3N0FFRDlFQzA3MDVDNUZGOEMxNzExOUYzCis6MTBCNDMwMDBCNDZGOTUwREY3MDlDRjQzRTk5QzhGQTVBMjFFRDk5RDQ2Cis6MTBCNDQwMDAxRjFBOERGRDM2QTVBNEREODVGMUUxMDUyQjNGOTdBOUQ3Cis6MTBCNDUwMDBEMUMyRUI4RTk5RjhGRTU5RjIwOUNCNEIzNUYyQzE4MTdFCis6MTBCNDYwMDBEN0ZGODY3MENEQjc4NkU4MUNDQjA1NzM5QUU4RENEQzg1Cis6MTBCNDcwMDBFQUY0RTg2ODQ3QTk5RUZFRTNCRUQ2QjlCOTVFQTEzN0YzCis6MTBCNDgwMDBERUIzRjBGQTlDRkVGQ0NGRTlCMDI3OEZFQkFGRjc3MjhBCis6MTBCNDkwMDBCODFDQkQ1N0MwNkFGNkUwRjU0QUI4QzI3QkVGMTU4OTAzCis6MTBCNEEwMDA3NjM5NkZDNzhGRDMyOEU0RThCREUxREM3RTg1OTdBNkE3Cis6MTBCNEIwMDAyNDNDOTdFNDZFMjE4RjdCRjMwMkI3MjNCRUU0RkRBNzAzCis6MTBCNEMwMDAwNTFDRUVGQzQwNzU5RThCRjQ2MzQ4RjA2RDM0MDNDNjlBCis6MTBCNEQwMDBBQkZFMjVGRjFEMDNENkQyNEI3NTI1N0RFQjJBMTFGMDVGCis6MTBCNEUwMDBCQTEzQzNENTEyMUI3NzExOEUwN0ZEMDJFNEM3QkY2MkUyCis6MTBCNEYwMDBBM0VGRUZEODc0RDBEN0E4OUY5N0U2MzNENENGMzA2RjlGCis6MTBCNTAwMDA2MzFFMUYzNzlBNDFGRDkyNjgxREFDMERGNDM2RjBFRkIzCis6MTBCNTEwMDBGOUQxM0VBMkNCOUE0QUUwRDM1MUUyNUM3RTVGOENBRjc4Cis6MTBCNTIwMDAyNDNGQzVGM0QxN0Q3OUNBNDBGQkUyRjdFMTdDRjFGQjEyCis6MTBCNTMwMDBFMjhDMEQyNjdBMTNCRjdEOERFRkQ4NDY2NDcxQkM4MEY2Cis6MTBCNTQwMDBEQ0I3RTY5MUZEOEQ1RUFEOTczQjg5NjdBOTJGREY0Qjk4Cis6MTBCNTUwMDAzNkYyNDVBQTgwRjMwN0EyNUYxRjlFQzUzOTVBQ0U2MjE0Cis6MTBCNTYwMDA2RTA3NjVCQ0YwQjhFODlGMjFFODJGQUZEMkFFQzVFRkZCCis6MTBCNTcwMDAwRjY0ODg3MTMzRjJEMjI0NUQxRTEzRjRDRTQ4NDhFRjc1Cis6MTBCNTgwMDBBRDlDREVEMEVGMDlFQzU3OURENDdCNjcxNkQ4QjNEQkJBCis6MTBCNTkwMDBDMDRGQzI3MzJGRTEzRDJGREVFRjk3Qjc5OEM4RUQ3MDEzCis6MTBCNUEwMDBFM0QyNTQ4NjdFQzI0RkYyNDRERTZGNTQyRkRGQkYxQkJFCis6MTBCNUIwMDBEQTRCRkE2ODJFMDNCREEzNUM5RTdFOTgyM0YwODIzRTkwCis6MTBCNUMwMDA3QzQzRDQwRjI5NThDRjkzNDk2QUMwODdFMzAxQkUzQjFGCis6MTBCNUQwMDBGMzVDMzE3Q0M3Q0Y3NzEyMUY4MTVGRjg0QTlFRjhCRUJCCis6MTBCNUUwMDBBRjhDOTUyMUJERUU3Q0VCQ0ZBOTc3RjhGMDFDNzRGRUYzCis6MTBCNUYwMDA1REYxNDdGNkQwQUIzOENFRDlFRkJFNEU3MUMwNDk0QkE2Cis6MTBCNjAwMDBCNEE0REQ5RUUwQjkyNUZBRjgyNjI1RjZGQ0FFOUZBODg1Cis6MTBCNjEwMDA2MUZDREQ4QkNFQUVCMzhGQ0UwNkJFOUNEQkE1RkE3MThFCis6MTBCNjIwMDBDQUI5Rjc3REZFRTYxOEY0QUZCQkNDQjQwRjA1RkVDNTcyCis6MTBCNjMwMDAzQTNDMTc5NDM1NzE3RkY0QTRDOTQ4RkYzM0RGMzZENkZFCis6MTBCNjQwMDA3NTc0MEI3OTk1REYzQjRCN0QyNUZEODZDNUNDQ0ZGNTE5Cis6MTBCNjUwMDA1NDMyM0Y4N0ZERDQ5MjQ1RjRCREYzN0MxNjNDOEFFNzEzCis6MTBCNjYwMDBCMDdGQkE3NDJBRjlEMzhCNTg4ODdFOEY2MDVFOUJGMUM1Cis6MTBCNjcwMDAzQ0RFRjg3MzdDRTNDRkVGQzUwNDNGRTIyRkZFMUNERjE2Cis6MTBCNjgwMDBCRTdDN0I1NTYyM0YyMzM1OUZGM0UxMTk4QkE4MkYxOEIxCis6MTBCNjkwMDBDMENGQjgyOEY4NTdENjE3MzRDQUZBODI5N0JGQkNCRUI1Cis6MTBCNkEwMDBBMDMxQUVCRTIwRTY4RkM4RkE4MjJGMjg0RjY4Q0VGN0IxCis6MTBCNkIwMDBEMUY4Mzg5RUJFQ0VFMENDODRDNDcwMkJGOUQyRUY0OUNECis6MTBCNkMwMDAzMThDMkZDNzg5Q0Q5MzQ2Q0YxQkYxM0M5Rjg0REZBQkQ0Cis6MTBCNkQwMDBEQkU5RkU5OTg1ODlFNzQ5Q0ZFN0VCNkU4Q0FCNjc4ODlDCis6MTBCNkUwMDBCRENGRUIxODY0OUMyRkY5QTJGMUEyOTdFQ0IxNkNGN0Q3Cis6MTBCNkYwMDBGRDBFNDNERjdCNzlGNDNDRkVGQjdDOTlBNzk3NzJGMDRCCis6MTBCNzAwMDA4MUMyQUM1RUNBOUJBRDE3N0FEMTNGMUNGRERGMEZEMDYyCis6MTBCNzEwMDBBRjQyMzlCQ0QxRjc0QTM3ODAzOEVGRkJENzk0Njg0NTQwCis6MTBCNzIwMDAzMTM5ODk1RjA3RjBEMzY3RkFFRkUwODdFNDhCNzM3OUVCCis6MTBCNzMwMDBGRENDNEZERjQ5MEEzRUJGRjNCQjkzRDI3MTlGRjVERkNCCis6MTBCNzQwMDBFRkFCMzI3Q0ZGRDZGNzdEQkM0NUZBNzM3NjgzNUQ2NjNFCis6MTBCNzUwMDA3MTc2N0JERUJFRDdDOTVGOUI2RjBERDI3Nzc4MUZCRDM4Cis6MTBCNzYwMDBGQzVEQjJENzBCNTlEMDhERkM3REZFRTUyQjBBNDJGRjY0Cis6MTBCNzcwMDAwMzdCMkRFMUI5MjU3Q0I3OTlGQkU5NEVGMjMzNjYwQUNDCis6MTBCNzgwMDA3ODZFMzlDMEZENDU5MzM1NjBBNjc5MDJDQ0U3NzA1M0Q5Cis6MTBCNzkwMDAyOENFRTEwNUE1ODlFN0YwNURERjA3N0YyOTlEREYzMTMwCis6MTBCN0EwMDA0RUMwQUZFMEZCODBERkVCQzU5NUNEMEQ3OTEwNkU3OTEzCis6MTBCN0IwMDBBRTAwNzA5MzA3QUZDREQ3Rjg3RDc4MURBRjA0MzVBNkU2Cis6MTBCN0MwMDBGQkRFNzQzMjZCQ0FDM0ZFMjY2QkI3MkFDRTNCQTNGM0YzCis6MTBCN0QwMDBFMzkzNjJGOEEyNzZBQTY4QjdEQzdBRTFDRTA1NzhERjU3Cis6MTBCN0UwMDBDRUNGMjdCNjA4MzgxNkU2OEJFRkE4QURDQzhBRUI0RTQ1Cis6MTBCN0YwMDBCMjQ3M0ZBNTdENDA3MTBENEZFMEZFNzdCODg4RDdFRDg5Cis6MTBCODAwMDAyNkUzNzkwQTMwQUZERDdFMkU4QzhCNzUzMDA3OUQxM0QxCis6MTBCODEwMDA2MDczNUM4ODYyMUNBMkZCMUQ4OTdCRjI1REJBREY5MUJDCis6MTBCODIwMDA2MDUxOUU5RjFBRTg3OURDRUY0QzY0MEFGODlBODU3RTk1Cis6MTBCODMwMDBGM0UyNzk4N0M1NzRBRTAzRTlCNzg3NTMxN0QyMzlFNEM5Cis6MTBCODQwMDAyRUZCMzJEQTlGREU5MjM2ODVGNjJGREQ4ODc4QUM1M0Y4Cis6MTBCODUwMDA5RkEyM0I5NzAxOUVCQjgyQzZGMzE4QjJFNzE4REJERUJFCis6MTBCODYwMDA5MEIxNkQ2NTI3QTkzRTRBODkwNjNEOTdCMjYyRTc0RUMxCis6MTBCODcwMDA5QTg1QkVCODM1OTlDMzc1NkIzMjhGRDc1NkU3MUJCRjEzCis6MTBCODgwMDAxMzBEQ0FERjdGQzlFNEU3MzZGNEI4QUQ1NkFDQjdDMEQ0Cis6MTBCODkwMDBGODNGOUZDN0ZGN0YwNDRBNDM1Q0M4N0YxRkE2NkM3Q0FDCis6MTBCOEEwMDA2MEM4QTNBM0YwNzc0RjU0RkYyQUEwNTM2QkFBNkZBNURCCis6MTBCOEIwMDA4NkZFREJFREUyNzdDMkI0MEVBQTYzRDg3NjY3MDZENUMyCis6MTBCOEMwMDA4OUI2REExQzk1OThGNzBDRTdGMzdDNEZBM0E4RjcwNzI1Cis6MTBCOEQwMDA4QUQ0RUU4MkY3QjZDRENDQTU3RUNFQUE1RUNBOTdGNjA0Cis6MTBCOEUwMDBBRTY2RTQxRkY1RTNEMzJGODBGRjAxREY0RjYyMUJDRjZECis6MTBCOEYwMDA5Mzk4RUZFRkMyRUY4OEJEMDE5NUVBNzRFNUYzMURGODY4Cis6MTBCOTAwMDAxQ0UwNTQwNDVGRTBGREYxMTVCMURGNzEyQTNFNTA3NjcyCis6MTBCOTEwMDAwOENGQzM2NDIxQzVDRkQzOEYzRUUyRjc1OUMyMkY2RjQyCis6MTBCOTIwMDAzQzUwNzlGMzY4ODBBQkI4NkIyNEIxRjFFMDAzNjJCRjlGCis6MTBCOTMwMDBDNTk5MjRGNjhERjlGOUJERjFGRDA3NjM3RjY4QTcxQzUxCis6MTBCOTQwMDBGM0ZENkIxRDNFMzI0MTlDOERFRjRENDhBMTc1MUYxN0Q1Cis6MTBCOTUwMDBGOTI2MjZGNEMzOTgzOEY5QkIyRTI2MEZGNEJDNENCNDU0Cis6MTBCOTYwMDAxQjQ1N0QxRDlFNjExMUE4RTBFOTBDRUFFN0U0RjJFMUM4Cis6MTBCOTcwMDA2N0YyOEZDQkVEQjUyQ0Y2ODdFMzU0QzVDNjI1M0QzNTcwCis6MTBCOTgwMDAzMUY2MzgyNjg3QjBDNDcyQUJCRkI5MEVGQTFEOTlDMTIzCis6MTBCOTkwMDBGN0Q3Qzc2OEQxODMyOEVGRDc4OTZCOTlCOEIyQjlFRENCCis6MTBCOUEwMDA4NERGMzUyQjAzMkFBMzEyODg5MEJBMUVEQTYzQUQ1REJCCis6MTBCOUIwMDA1OUM4REZFM0FDREQyQjVEMzBDRTM1NzNFRUY2NjBCQkVFCis6MTBCOUMwMDBBNEEwOThGODBERkMyRjNBNzcyOEMzNkU4QUYwRUYyOEQwCis6MTBCOUQwMDBDQkZDMjg0N0IzRTdGMDdDRUNBQzM5NTZBQTNCOUVBNURDCis6MTBCOUUwMDBGMUYzQTE5ODE2MkFCQzBEOUVERjU2Q0RGM0MwRDhBRTU4Cis6MTBCOUYwMDBENkU1NTlFNEJFQzc3MTg4NTM3NjI3ODgzNzRCMEFCODE1Cis6MTBCQTAwMDA1RDk0RUYzNzhBRkExRkY5QkMwODBGOEFDNjNDNTlDMTBBCis6MTBCQTEwMDBFNDhGRjJDOTlFRjBGREREMzM1MkNGMEM2NTQzRTM3RTI3Cis6MTBCQTIwMDA2RkU2N0MzRUVFNUY1NkJFMzE5MDlFMzAzRTE3N0E2MkU2Cis6MTBCQTMwMDA1NkUwMTEzM0Y5RTk0MjVGNDhCRDFDMTQ3NTRENURFMkQzCis6MTBCQTQwMDA1Qzk3NzcyNzcwQkNCRjVEQjk5OEY0QzVBREFDODlGNDNECis6MTBCQTUwMDBGOTZEMkM2QzQ2N0NGN0U5RkYyOTNBQkYwNkU2OTkxNThCCis6MTBCQTYwMDAzNEZBMzlCM0U3QzRGQjNEOUM1RkU1QkNCNzg3OENDRkE0Cis6MTBCQTcwMDA2NzRBRkY3NThBRDE3RkFERkVDRTE3MTk2NDE3QjM5RjUxCis6MTBCQTgwMDBBRUJGMzQyODU2QkZENDE4NTdCRkQ0MjBFQTk3MUFGNzUwCis6MTBCQTkwMDAyRDM5RTJEMkQ1MkYzNTFFRTBGNTRCMERGQjJFNTdCRkM5Cis6MTBCQUEwMDBENDRCRkI0OEM3Q0Q5MTgzQjhCRjcyN0MzMTg4MDRDMEFBCis6MTBCQUIwMDA3OTQ4RDRCQjFDQzY3QTk3RjIxODVGQTZDRUU0Nzk1NkIzCis6MTBCQUMwMDA2MDVGREEyRkM5NzNBNEY4RDE1RjZGMzM5NTUzNUVCNjA4Cis6MTBCQUQwMDAyRDJERDVBRkNGODNBRTU5MTk5QUE0Q0ZDN0NBN0FBNTU5Cis6MTBCQUUwMDBFMzAzQzRCN0MzMEJCOEZGQkE1MUUxNzlGMUYwRUQ1NkU3Cis6MTBCQUYwMDA4QUU3NUNDNTQxQzMzRTg0NEI2NTI3MzBCRkY4MTFGQTI1Cis6MTBCQjAwMDA1OUEzQTkzRkU1M0Q3MDFGNkYyNDVDMjMwQUFGQjNFRjMzCis6MTBCQjEwMDA3QjFGQkYzQkMyN0M2NDlDM0U3MjY1Rjk2OTFGQzA5NTY4Cis6MTBCQjIwMDA3RTM1RTVGM0U3MUMyOERCNDFGQUM2NkVGM0UzRUYyMjJFCis6MTBCQjMwMDBDQUYxRTc4NEI2Njk1ODQ3RDQ3ODYwOUIzNkRGMUVFM0M0Cis6MTBCQjQwMDBCQkNBMDJDMUFGMjkyQzA1RjlCNTJGQkZCNzI3ODlGMkFGCis6MTBCQjUwMDA3QjFGRDk4MzkzMEFFMEZEM0E0Qjc0MzgzM0YyMzNERDBGCis6MTBCQjYwMDAxRkM4QUUyRDEyRkM2MjlFMTBCQzdEMDFDMDczRkU0RDNECis6MTBCQjcwMDAwQkNGNzNEREM3NDg1RTlGREY5RjQxRjk0OTZEMjYyM0Q4Cis6MTBCQjgwMDBGQkQyNTJDOUY4RUZDMDZDRTNERjBCOUNDRUUwRTcxOEE0Cis6MTBCQjkwMDBCNUNDNjA2NDA3N0IzMjI3MTNGRDE2QjNDODUxM0NBN0IwCis6MTBCQkEwMDBBODY2QUJEOTcwMUVEMTNEM0I4Q0VEM0FENjQxRjZBNkM2Cis6MTBCQkIwMDA2RTU3M0Y3RTI2QkQyNUY1NjMzREYzQTk2NkRDMDdFODk5Cis6MTBCQkMwMDAzNEJFQ0YwNjFCRjU2Mzk5QjAwNzIzNjc0RDZDQzY3QTY4Cis6MTBCQkQwMDA4RDkxQTZBMDRBRjZGNzNFN0ZFRTRDOEE5RkFCQjkxRDI5Cis6MTBCQkUwMDA2NTRGRDNGOTU3RTc1MzNGNTFCOTlDNzM3RDNDM0FBNjUzCis6MTBCQkYwMDAzNTBENzY2OUI0RjBBRjZFRDBGOEVGMkE0ODdGNjlCNDlFCis6MTBCQzAwMDBGODlEODVDM0E2MDMyQUZENzY4RjgwNjc5NDc4NEZGQTQ2Cis6MTBCQzEwMDA2OTUyNUZGN0QxNzMyQ0U4NTJFMEZCMDcyNTVEOEI1ODIyCis6MTBCQzIwMDAxMUQyMTVDNjI3Nzk1MDMwQzBDOUE0RjFFOUY3MUFBRTcwCis6MTBCQzMwMDAxM0YzMDFEREY5Rjk3NzI2NkIwNEY5QTg1NTY5MjIzRDY0Cis6MTBCQzQwMDA2RDY1NDI1RjJCQTE2NjdDRjkxN0UxMzBFOUVENkI1ODE5Cis6MTBCQzUwMDBEMzJERjg3QjlGRTNBQzVEMjlFNDk3REE0MzZCMEI1QzUzCis6MTBCQzYwMDAzMTNFNjk2NkQxODJERDhBODE1RkU4RjlEOThDMzcxMjZECis6MTBCQzcwMDBGMjhCQjQyQkQxNzdCOUJGMzE4RDgxMUYwOEYzMDY3RUNCCis6MTBCQzgwMDBDRkZEQTBDMzBBOEZGM0MwMUYzQzhDNzFERTFCQTZBOTk5Cis6MTBCQzkwMDBDNDBGNTM2MTE5RDg2RjkyQzM0OEU3MUIzREM2RjY1NEQxCis6MTBCQ0EwMDA1RjNGM0U1MEY1QkY1RjAxMTJBNzIxM0NEMzg2MUFGQkQwCis6MTBCQ0IwMDAwNUE0N0U2MzQ2RkQ1NkM4QkVFMDc1RTVBQjhGN0UwQkRFCis6MTBCQ0MwMDBFM0ZGOTRFNTZDMjhGQTMxRTAzOUZBMTNGRDFFRTk3M0JECis6MTBCQ0QwMDAwNTAzRUU5MzNDNTc5MDYwOUZFNEJDQzhGNzVFQ0JCQTc3Cis6MTBCQ0UwMDAxN0VFNTJGQUYzNERDRjkxRTVBQTQ3Qzc1RjkyOUY1RkQ3Cis6MTBCQ0YwMDAxNDc1MTVDQTJGQzU3RUVDMjg5RUY3OEJEOTc5Q0UzN0RGCis6MTBCRDAwMDAxNUEyNzUyREYyNUQyNjdFN0YyMkY4NDVGQ0JFQzhGNTkyCis6MTBCRDEwMDBGQjZDNTFGQ0ZEOUMzMjMxQ0VCNUM4M0ZFNTMxQkIxRUZBCis6MTBCRDIwMDAzNUQ5N0Q5NjIyRTQxMzdGOUJBQUY2RjdFN0REOTkzRThECis6MTBCRDMwMDBFMjk3OTEyNjY5RTdGRDU5OENFQzdDNDdCMzg2RjBFRkRBCis6MTBCRDQwMDAxRjkzMUJCMjFCRjhFMzFEQUU0RjgwM0YyODJGRDVDRkFBCis6MTBCRDUwMDAzRTFBOUZDN0YxOEZBNEUzMzFFMTQ3REZDODdDMTQ0NzQ3Cis6MTBCRDYwMDA0QzExN0U3NEI0OTBGMzRGOTVGRDU2MERERjdGQUQ4ODc2Cis6MTBCRDcwMDBFNzA5MjZFMjA2MjI3REVGNjlCNDhCNTU1NjIzMUZDNERFCis6MTBCRDgwMDBGMzE3Q0M2OEQyQ0YxQkNGNkYwM0YxQ0QyMEU0MUI2OTMyCis6MTBCRDkwMDAxN0IzMkVDRjM3OUYwQjNGMjMwMURGN0M1RTMwN0E2MEQ1Cis6MTBCREEwMDBCRTg5RTcxN0E5NTc3NkRCMUM1NTc4QTY3MDYzOEQ0MkNDCis6MTBCREIwMDBGQTc4RTQ5QjgzOUJCMTdENDU3RDIxRDVCREVDQ0VGMDI3Cis6MTBCREMwMDAxRkEyRTc0REZDRjlBOEFFODA4QTc1MzFDNUNCQzRGMzNDCis6MTBCREQwMDBDMjYwMTVCNjFCOTdGMzdEODlEMUM3NzlERENDRTBGQjM2Cis6MTBCREUwMDBGOEYzQjI1NTREODdGMEJCQjhDNjMwN0ZGRkM1NEY1QjQ3Cis6MTBCREYwMDBFOTdCQTE0OEFCNzhCRkIyQkQwQURCOEQ2REZDRkREM0ZBCis6MTBCRTAwMDBCOEJGMzQwMkVCREQyMkNENzg3RkQ4QkE0MjNGMEY0QjZBCis6MTBCRTEwMDBCOTVGM0I1RUYwRTk2RTY1Q0YyMTdBQUY5REJGQjdFOEIxCis6MTBCRTIwMDBBODM1OTk3RTY3NTBGOEFEMzc4ODc1OEVERkNBRDdFOTk3Cis6MTBCRTMwMDBGQ0UwMjZGQURERDEwNUJENjFGMjlGM0UzNkQ1NTU5MDc2Cis6MTBCRTQwMDBERTE5MjBGRUFDNTREQUYzRjA3QTIzRUExMzE1RTkwNzgxCis6MTBCRTUwMDA3QzVEQzRGNzFGQjdDMzE0NjU4Mzc4RkU0MkVFREI2MUQ3Cis6MTBCRTYwMDAxRDgxQkU2RUEwNkMxMEI3RkJCMjlGM0I5MzdGRDdDNTAwCis6MTBCRTcwMDAxRTRCQTVCQ0FGREM1NzhDNkU2MjBBQ0ExOUFFNTFGOEQ2Cis6MTBCRTgwMDAwMTA5RjcxOTZGMkM2RUEyRkRDNTFCMDdDOUZEQzU2RTEwCis6MTBCRTkwMDAwRENGNzUyRkJCRjRFN0M5ODlGMjJCNjNDNUJDOUY4ODEyCis6MTBCRUEwMDBCQTA4NzlCRjI2NTI0OEJGMjNCNjFCOTk4NEJFQzc3RTA1Cis6MTBCRUIwMDBGMjM3RDQxNkU3OTQzM0YxMUREOEVFNDJERTlFM0NFODBCCis6MTBCRUMwMDA4OTFGQjZFNTAxN0U0RDREMUE5RUVCQzYwQTE0RkEwRTg3Cis6MTBCRUQwMDBFRTVGQkE1ODM0M0RBRDNGRkMzNzZBMkM2QUUxREZCMTAyCis6MTBCRUUwMDAxMUZDMEI5QjJEREJGOUY3ODg1QzJGQ0Q5MjZBNjdEQzg4Cis6MTBCRUYwMDAxMDkyRDM1QjA1OUQ2RTE5MjRGMjkyMjNEOTQ4RDQzNzUyCis6MTBCRjAwMDBCMzA0REQ2RUIzODJERjRBN0FBREREMUMyN0ZGQjMwN0QxCis6MTBCRjEwMDBBMUZERDgzMkEwRkY2QzdDMUVBNzFGNkFDNEJDMEI4NTk0Cis6MTBCRjIwMDBERkJDMTg3RkFGNTRDNUYzRTZCOUZGRkNDOTE2RUUzNzg2Cis6MTBCRjMwMDBERkMzM0EyODhGNzhGRTMxRUUyRkQ2QzNGMjkwNUZGQTM2Cis6MTBCRjQwMDBGREFFRDc0RTYzQkJCRTIzRkU3NzY0RjlFRjEwRjZGQjYwCis6MTBCRjUwMDA5REQ2NTI5RTlGM0RCRkE1QkUwMkYzNzMzNTlCREZBNEM1Cis6MTBCRjYwMDAzQzcwOERENDE3MTFBM0JFMDAwNzgzRUI4QjRENTc1MjQ1Cis6MTBCRjcwMDA1RUM3NjRFNUJGQTMzOTEyRjQwNUQ2OTc4Q0M0QkE1MUU1Cis6MTBCRjgwMDAxODdGQjgzODg3NjczNUJFQzJDRkRGRjlFRTIwQjIzN0U5Cis6MTBCRjkwMDA1M0E4QUU5NEM2NTM2OTNGRjdDRDgwMkY0NjFGNjkzNzJCCis6MTBCRkEwMDBFMkY1NDU5OUNDRDcwQ0NFQTQ3Qzk2RDQxRjY1OENEQkVBCis6MTBCRkIwMDA4Qjc4RkZFODExNDk0RjExRjc0ODNGQTMwQ0ZEMENFMEM3Cis6MTBCRkMwMDA4RjJFOTMzRDYyMzJFOUZEOEEwOEM5MjFDNDhERDM2QzVFCis6MTBCRkQwMDA0NUM4M0FEQzlGMUE3OUZCMjhBQkEwM0Y4QkEzRUYyNjFDCis6MTBCRkUwMDBBMkVGQzBGMTkzRjE3OTFDRkQ2NUZDNTIyMUU4N0YzQjgzCis6MTBCRkYwMDAwQjUwNUNCNDU3RDBGRkVENzdGOUVGQkRDREIyMkYyM0Q2Cis6MTBDMDAwMDBGRTdCRjdGN0RDREY5NEYxRDNENzhGOUIwMkVBM0YxMjc4Cis6MTBDMDEwMDAzN0Y1RDFEQjA2N0U2NDBBRkUxRUM2RDQyMThGRTI3RTkwCis6MTBDMDIwMDA3OEE3OERGRkFFQjVDMkU5RUJCRUZENzg4MTNFQUZGOEQzCis6MTBDMDMwMDAzNkZFN0U4QkVFNzcyNTlBQTcyNjU5NzExRkIwRDlDQzk0Cis6MTBDMDQwMDBFMzhBOTlEM0RFQUI5OEFCRDMxQjg1NTk5NTJGMEQxQTk0Cis6MTBDMDUwMDA4REY0RThGQUY2MUYzMENFNzg1RDlDRTM3QUMwNDVGNEEzCis6MTBDMDYwMDBCRUQwQzVFRjVGRDg3QTk1M0YwQ0I3Q0Y5OEM1Nzk0NjVCCis6MTBDMDcwMDA0QUQzNDIyQzgxOTI3MDJDMTRCRkY3RjI1OUNBMkJCNEM4Cis6MTBDMDgwMDA3RjNDMjMyMzc0MENFOTcwQ0YxQjdCMjk1RjU5QzdCQTBGCis6MTBDMDkwMDBGOEVGMDI4QjcxMDdDRTRCODY0OTdGNTk1RUU1RjZCMDBCCis6MTBDMEEwMDA1NzQ5RjZGM0VGODZDMzI1RkFGREE0NjMzRUFFNjdDNzkyCis6MTBDMEIwMDBFNTA3OEZFMzNDRDJERUM1RDcxNTlDNUM3MjIzN0REN0E0Cis6MTBDMEMwMDBGOTE3MTY0OEM3RkQ0QzQ1RTNCRkRGMUMzRjJGRDYxMUJCCis6MTBDMEQwMDBCNEU4RjJEOTI3NkQ4OUJGMzMzRDM1ODhFNzAzOEExMDZDCis6MTBDMEUwMDA0NzU4MDc5MTFCRjgwMEYxRjc4OTg4MDMzRjExRkI1QTY1Cis6MTBDMEYwMDA5RkE0RjE3REFFOUVCRUZFRkNBQUY5ODQ3RTE2RkI2MDc1Cis6MTBDMTAwMDA5RjY0MUFFMzQ3RDlDRjIyQUUxRkFFQjAwNjVCNzRGNDJBCis6MTBDMTEwMDBGNDZENEE2QThBNTAxRDk1QTgxQjU5QzY3OEJDQjQzRjc1Cis6MTBDMTIwMDBDMzcwMEU0MTg2QUZCMkM4ODdGQjE0QzUwMTBCRkVCRUJCCis6MTBDMTMwMDA3N0VGN0U2RTg3NzFGRjE5Rjc4NzIzMzlBMTJGMTBFRUY1Cis6MTBDMTQwMDAwNjFGMEJFMEZFMkFGMzc1NUI2RUMxN0Q0NkYxN0RFQkE5Cis6MTBDMTUwMDA3OUMxMkZFNzZERkMyQUUxRkE2RkMzQUZCNzJFMDA4MERCCis6MTBDMTYwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRDU3REMwCis6MTBDMTcwMDAwOTc4NTRENUQ5RjBCOTczMjczMzEzMzIxMzI2MUI4NEE5Cis6MTBDMTgwMDAyRDRFMTZCMjkwNkRCMjYxRDgyNzA5MjBCODYwQzI1MjA4Cis6MTBDMTkwMDA1MUI2NjFERkIyMDlEODhGQjZGNkNGNjAxMDkwNDc1QjE5Cis6MTBDMUEwMDBBOEI2QzVDRkU1MTkxMEE4NTYyQzExODM0NjBEMUE5NEQwCis6MTBDMUIwMDAyMjU4NUI0NzA0NDU0Qjc1QTRDQTIyMjE4OTYwMkRGNjlECis6MTBDMUMwMDBBM0U1N0ZERkY3OUM5Mzk5N0IzMzYxRkJENUU3RkZDODNECis6MTBDMUQwMDBGMzcwNzJFRTNERjcyQ0VGNzlGN0YzQkUyNzUxOEU4QTlDCis6MTBDMUUwMDAyNDQ3MUM2M0VENzdGQjRENEM2NTJDNEFENjJCQTA5RTUzCis6MTBDMUYwMDA4Q0Y1RjIyNDQ3MTFENEE3QzhGN0EyRkUxMEFGQzMzRkI1Cis6MTBDMjAwMDAwM0VCQzVEODFDRkNDRDAxQTVDNURBQTJFNkMwRUZFQjU3Cis6MTBDMjEwMDBDMjVBRkRFOUY0OUU1RDRBNjI0QzUxOTk4NzQ1NDMyNTE3Cis6MTBDMjIwMDA5RDM5Q0E2REY4NzRCOEZENDQyNjE0RTFGMDFFRkFBOUQwCis6MTBDMjMwMDAzMTU5RDcyOUI5RDRCQ0RDMDJGRENEMTBGREIxRkUzNjkxCis6MTBDMjQwMDAyM0Y2M0Y5RDc3QzU2NjM0MUZGQzU2ODk2NDZDQTY4NTJFCis6MTBDMjUwMDBBREU5MDdFRjY3MzVGNzM2QzEwQ0Q4QTI0ODRGQUEzREM0Cis6MTBDMjYwMDAwQjVCOENCNjlGODA3MTE1NEY4NDdBMjkwMkZBQzY3RkNBCis6MTBDMjcwMDBBM0JBOTY4QzE5RDkwOTM5M0Y1QTg3ODczMTVDRjcwMEUwCis6MTBDMjgwMDAxRkFENkI3RDQ5NDdDMjdGMTczMkQ2QjFDNzZDREYwMjQ1Cis6MTBDMjkwMDBFMzU0MzVCRjc1NTQ4MTc1NTVDOUY1MzU2QUQ3OTdFQkE5Cis6MTBDMkEwMDA1MEU4N0JDNjJDREVDRjJEOENERENFMTRENjEzRkE2OTc4Cis6MTBDMkIwMDBCMkJBNzMxMTVFNTUxNjNGQ0QxMzdBMzQ5NTY3QzM2OEQxCis6MTBDMkMwMDA2Qjg3NDdEMUZBN0JDM0Y3MzA5RjE3RUI1Q0VDRUY2MUNDCis6MTBDMkQwMDAwMTc4MkVCM0YzRjU4RjUxMkJDQjRDQjE4QzlEOUJDN0JFCis6MTBDMkUwMDBFQzY2NzhCNEVDRTBEQzdBMEJENDk3M0RDMEVDN0M3NDVGCis6MTBDMkYwMDA5NzgxMEQ4NkZFMDVCQ0JBOUI1RjVDQjk4MTM5MkNBMjgzCis6MTBDMzAwMDA4RUMzNEVFREMxMUNFOTgxN0ExRjc3QjRBNjBFRkQzMkIzCis6MTBDMzEwMDA5Q0M3NTJEMTZGQkY0NTdEMzVERjBGQTg0REQyQjRCRjRBCis6MTBDMzIwMDA2MUU1MjBDREZCNDQ0RkJFQTY5RUJDNkVBOEE2RkRDMDE1Cis6MTBDMzMwMDAwREE1OUE3QURBQTY5QjM1RURGMzU4NTI0RjA2RjBBRjY5Cis6MTBDMzQwMDAzOUEwMzIyRjgwMzZDMzNCNTFGMzNFRjNFOUJCMzRERkQzCis6MTBDMzUwMDA5RjY0QjVCRjE5MEVFRDFBQzMyMzczMThFMDUxN0Q3OEExCis6MTBDMzYwMDBFNDE2MkM5OUM3RTVDQjAyRjhDQzEzRUJDODZFOThBMzYyCis6MTBDMzcwMDBFOUU3NENFNEQ4MDNCOEFGRjM3QzBCNkU2NTgwNTdCOTlFCis6MTBDMzgwMDA0RDRCMzRGRDJFNTUyQkY5QkU2RDA4M0JFRTg3RUY2QTAxCis6MTBDMzkwMDBFMTA3RTE5OUNGM0FGNkY3ODNGOTU1N0IxNTY3MEJCQ0I2Cis6MTBDM0EwMDA1RUI4ODlCRjk3REYyRDZFREE0Q0RGMkRGNjZBOUYyRkJFCis6MTBDM0IwMDA3RDVBNUJGNzk0QjJGNDVBMkI2M0NCMURCNjU4QzI4N0YzCis6MTBDM0MwMDBCRUFDRUZBNTIwQkEwQUUwMDEzNDgyRjFDRTNEQUU3QUQwCis6MTBDM0QwMDBDRDg5MDg5RkQ0REYwRTI3Rjg4NDMxQUZBM0VCN0U5RDczCis6MTBDM0UwMDA2M0NDRDk4MkVENzdEODlDMUVBODJGM0MzODk3RTY2M0EyCis6MTBDM0YwMDA4RUQ3RTI0MUI4NDM4QjA3MTFFOTVBM0NCMDM5QjVGQkZGCis6MTBDNDAwMDBERUIzNThCQkVGN0FGODQ2QjkwNjVEMTZCRTMxRTNCNDI5Cis6MTBDNDEwMDA3ODIxRTE1QTBDM0ZERjI1NUM5RkQwQzFCMzYwOUZBQjEwCis6MTBDNDIwMDBERTRBNzA2MjkzMkQ4MzExN0U3Q0JFNjY1NkFFMjI5RkRCCis6MTBDNDMwMDA2M0IxQzA2N0UwQjk5Mzc3QzFDRURBQUQxRTAzRTBDRjM4Cis6MTBDNDQwMDA3MzBFQzU3OEMyMTJFODI3Q0ZEOEIyMTdEN0IzNDZGMTFBCis6MTBDNDUwMDAzMEZDMkU5Qzc5RTM5MTVGRDQxN0I3MjRCNEMwQkVFNEJFCis6MTBDNDYwMDA1QjZBNzFFN0Q4MTdENkYyRTc5MUVFMkI0RDJEMzlGOEJDCis6MTBDNDcwMDA1RUY2Rjc4NUQ1NERDRjVCOTU3NzE2MzA1ODJGMzNCNkRFCis6MTBDNDgwMDBFNDEwM0ZCNDMwMUE1RkMyNzE3MDBGOEVDNzRCNTkzOTM4Cis6MTBDNDkwMDBGMUUxMTcwNTNFN0ZGRUQxMjI4MkUzMDI1NkJCREYwNUE0Cis6MTBDNEEwMDBFMzlERjk5OEMzNzczMUYzNTBCQkY5MUJCNDcwRTgwMkYwCis6MTBDNEIwMDAzRjFEREMwMDZEMUMzODZFOEQ1OEY3MTJDNkJDODZFNDNCCis6MTBDNEMwMDBBRUYwNTQ5QTk1MTY1QjBFODJBMTU5RjI2REY3QTUwMjUzCis6MTBDNEQwMDA4RTc2MDhDRkExQUNGMzFGRjE2RjA5NUY2OEEwMDRGMzVCCis6MTBDNEUwMDAyNzFDQ0ZERTJCMzA5RTg0QTdFNDVCNzIxQzMzQUI1NTM4Cis6MTBDNEYwMDBFMzkxMEU3NDdDOENBNTZCRjcwOTM2OEU2MTdEQjBBODM0Cis6MTBDNTAwMDBCRDAyM0NENDEyMkQwNkVCODVGREUwRTQxOUJCNTE4QzM1Cis6MTBDNTEwMDBDM0U2QjhFMzExNEUxNkI2ODFGNjZGQkRFMjVDQTdDMjYyCis6MTBDNTIwMDAzOEVBMEQ4OUY1MENFMDU5NjA3N0E5Qjg1RjQ1Q0MzNzNBCis6MTBDNTMwMDAwRDlGMTc1QjFBRUE4REQwRDUwREVDQTJGRDA0QzgxMzMwCis6MTBDNTQwMDBENjdCN0JENUE1OThDMDNBMTRCOTJFOEZDMjhDNTAxRkNDCis6MTBDNTUwMDAyMUVBOTMzQzhBRkZCMTQ0NUNDRjVCREZFMkI4MjM0NDFECis6MTBDNTYwMDAzOTA5NEJEODNGNThFNkRGRkYwQTFGMEY1NzFDMDM3MEVECis6MTBDNTcwMDBCQzg5QUZBNEM1MjFERUFDNTE2QTk5NkU3RTQ3NUY4NTQ4Cis6MTBDNTgwMDA3RTU0NDM0NzBDQjYxQkMzREM0NjJFNzdCRDM4NDlGNkI0Cis6MTBDNTkwMDA5NkUyQTc3OUZGODhCOUVFQzc1MkNBQjc2QUQ2MzA3NjU1Cis6MTBDNUEwMDAxQUQ0QUIxQjQxNkU0NTYyMTlERUEyNDJDOTlBNzRGMERGCis6MTBDNUIwMDA2NEM2RTM1ODM3QzA0QTEwQkY5NzYyNURFRTdCNjJFMDA1Cis6MTBDNUMwMDAzREQ1RDVBRUY1NTVCMDg2M0VEMTU3OTZFRjFCMTNFRDUwCis6MTBDNUQwMDAzNDVGOTA3RkE5RkMzREU3NkY4QjA0QkMxNjQ5QjlFNTM5Cis6MTBDNUUwMDBENUNFRUYxOEZFRDI4N0IxM0Y5QTAwMjZGOTQ4NDcxNkZDCis6MTBDNUYwMDA4RkExMjdBODA1ODk0MDk3RDgyRTg3RTU2MEZGNDA1NzZGCis6MTBDNjAwMDA4RTQ0RThCRjU3MzREMEExMTI0Qzc3QkNCRDdDREY4NTg3Cis6MTBDNjEwMDBFRTc0RUI2N0I1QjBCOTQzMDBERUI2NDI5MzFCNThFRTNCCis6MTBDNjIwMDBEQ0UwRjU1RTA1M0NBNDFFMzEwRkRCNDJGOTJGODc4MzY5Cis6MTBDNjMwMDBENjVERDVFM0Q4MDcyRTdDNURFODRCNDBGOTJGRjdBOUVFCis6MTBDNjQwMDBDNkM0REMwREE4QjczNEM0RDFCOEYyRjlFODQ0ODNEMDJECis6MTBDNjUwMDAyNzAwMUZBRjAyNEVEREVGNDMwQUU5NDM3MjFGQUU1NkJCCis6MTBDNjYwMDAxRkNBNDUxQzJGMEFDMEVGRTZBRUYwOUU5MDE4MTcwNEIzCis6MTBDNjcwMDA0RjA2RjBDQ0Q2QzA1QkZCNUVDMDVCQzJFMzZDOTE2RjMzCis6MTBDNjgwMDAzQkVFOTM2QTNCREMwQkUxQkMzMkJFN0MxMkVFQ0Y4MDBBCis6MTBDNjkwMDBBM0ZFMTM4QTIxMzBBRjMxNkFFQkY2Qzc1MDhFMzVBOTVECis6MTBDNkEwMDA0RUE0RTVFQTExOUNDRjU1QkZBQzEyRTlCNzM1OUJCRDRFCis6MTBDNkIwMDAwQUY0QjNBOEU5NEREMkNGNUFFQjgwOTE4Njc1MEZBNzQzCis6MTBDNkMwMDBDRUY1RUFFMEREMTUxRTdDMUZFNTdBOTZFQUQ2M0ZGMzRCCis6MTBDNkQwMDBCREYzQjYxOTBFNUE2N0NEMTVFMDUwMTMwQTBFNjc3RUVBCis6MTBDNkUwMDBDQzY2OTU2N0UxRkFCMjdBRkFCMzAyRTM2NkUxQkUwMzdCCis6MTBDNkYwMDAxQzdFMUU1OTdFMEZDMkEzRjBGREZFOTEwODlGMzE2QTc5Cis6MTBDNzAwMDBGM0ZFQkUwODg3MTU4QUQzMENFMzhFMzIzMzRGMzhFQzI0Cis6MTBDNzEwMDA3MzlGOTU2NUVDRUZCMDU3QzVGRTVBQTcxREUwMTFERjdBCis6MTBDNzIwMDBERkVBNTQwMTFFNjlGN0E4RTU1RUU4Rjc2RjJCOTY0NzJDCis6MTBDNzMwMDBDRjg1RjJDQjNBMTg3QTIwM0M1NzBDRTU4NDZGNkNENzQyCis6MTBDNzQwMDAyNzNGODVGRUQyNkNEMzlERUJBMTM2QzMwQ0YzODE3MURDCis6MTBDNzUwMDAxMjdGMUNEMTkyMEM3Q0UyNzUxM0IzMjBCRDg1MjVENUM4Cis6MTBDNzYwMDAxRTFBMEZGRDc2NDRBOTRFRDQ4MzYzNTUzNjFBRjE0QjM5Cis6MTBDNzcwMDBDMjM5MzY4MkFGNDMzRTJGNzk2MkFCRTJCNzA2OUU4RjU1Cis6MTBDNzgwMDBBQUVGMjg1ODA2NjU0NTIyREY3N0I5Q0U1MTY1MUQwNTA5Cis6MTBDNzkwMDBBOEY3NDgzOEM3MjZGM0Y2Q0NEODkxMzAzMTg4M0U3MkQ2Cis6MTBDN0EwMDAwNTNDOEVBMTVFMDdGMEFDOEUzM0FENDEzOUQ4NjZFMTExCis6MTBDN0IwMDA3NUU2NEEyN0ZENzc4NTg1RDNDN0IxRjAwNDJGQ0FDNzMwCis6MTBDN0MwMDA2M0IwNTYxRkY1RDc2MjYzRDYyMEJFMThFRUVBNzkyMzEwCis6MTBDN0QwMDBBQzlCQkRBN0IyNkQ1MDdDNkQ3N0Y1OEMyMjc4RDg3OTczCis6MTBDN0UwMDAzRjQyREY2QTYzNkMxQ0MyNjlDNUY4RDJERUQxNTBDNjE1Cis6MTBDN0YwMDBENTczRjhFOEYxQTQzMTkxRUJGRDk1MTc4MEYwMEEwMkFBCis6MTBDODAwMDBDRjJCOEQyRDI2QkIxNTlGOUIzNENGOEYwM0RDM0NFNkIxCis6MTBDODEwMDA0MDdEQ0VBOTk0QjE4Q0Y4OEM3MzBEQjY5RkJCMkU4MjRGCis6MTBDODIwMDA3OTgyRjRBQjQ2MzE4RkVFRTA1MjFENjU2NDQ2ODA0NzU1Cis6MTBDODMwMDBCNUMyQ0EyRkQ3RUVENUZGQTgwNDVGRkRGQ0ZGMkFGOENBCis6MTBDODQwMDA0QzVDNTlFOEY1MUQxMkVCMkI1QjdCRUI2RjUxRkZBQzk5Cis6MTBDODUwMDBGNjg1MzEzMzNDNUFGMTcyNDk2RjE2QTJCRjRFMzg1RkVDCis6MTBDODYwMDAxOEM2QkMzMTQxNzVBMzlGRTA1MTdENjEyNDNEMkY1QjBCCis6MTBDODcwMDBEQjZBNDJCQ0M3N0UxQ0YwN0M0NUI4QUJCN0YzMzI3MEI0Cis6MTBDODgwMDBDRUM1NzlFMDdBMkY0NDMxNEY0Q0YwNzM4RTU3ODFGRTNDCis6MTBDODkwMDA2M0U5RkRFRjExODA4MEI3OUUyNkQ1QkIwRDNFRkRGREZGCis6MTBDOEEwMDAwMUMzQjgyREExRTYyQkQ2M0YyOENFNDhGNDkyRDlDMkI5Cis6MTBDOEIwMDA1QzlCNDM4QzJGREJGNThBMDY3RTZERTU3MEFFQzhFRTdGCis6MTBDOEMwMDAzQUJGQzY1MkZGNEM5Q0ZGOERBMzk5MkJENDc4RTc0NDA2Cis6MTBDOEQwMDAzQjM5RUZDNjY4RkYwMjgxRjdBOTE1QjZBMEJBNURCQjY4Cis6MTBDOEUwMDA4RjNEQzVGODhEMzdGQjEzQjBGRkI2RjE2QzZBNDM4OEY2Cis6MTBDOEYwMDBGRUU1N0VDRjg4Nzc2NzIyREZBOUJDMDMxQTAzN0UwQzkyCis6MTBDOTAwMDAzNkQ2MkFGNjIwN0FFQjZFQkYwMzcwMDZCQkFCRTA3MjE4Cis6MTBDOTEwMDA3MDM2RDE3QkQ5REZFOTQzODIxRTk5Q0JBQTAwMURDREE5Cis6MTBDOTIwMDAxNkYyNkFGNkQ2QTVCNzAyQ0ZFQ0I0NUY0RTZGMDJGQkUzCis6MTBDOTMwMDAwNTg2MzhDRDZBREZCNDYxN0Q4MzQyRjZDOTFDMzdDOEVECis6MTBDOTQwMDAwMEUwMzcwQkI2MTVBQzQxQjEzNTNCOUVCMTkxRDFGQzNGCis6MTBDOTUwMDBGOUJENThBRTBFMEJDODU5RkFERkM1ODJFNUEyMUM3RjlGCis6MTBDOTYwMDBERTgzNUFCRDc1MTE3QkYwMkJENDdCNEUxRkUyN0MwMTE4Cis6MTBDOTcwMDBENDUzQjJCRjE3M0NBMkVENkZEMUQ2NUI0RUUyM0MxNzQ5Cis6MTBDOTgwMDBFOUY0OUYzNDU0RjA0MEZGNDg0QjEyRjZDNDYwMzYxODY3Cis6MTBDOTkwMDBGOUZGQjI2REU3NEQ5MThFRUVGMUZGNEJBMEYzOTQ4MTVDCis6MTBDOUEwMDBDODI3RUQ1NDBFNEQ3MkU1MjRBMTdGRTEzRDNFQ0ZGMTQ1Cis6MTBDOUIwMDA0OUVFRkMyNEY0QTNCQ0M3RTc3NUFFRjIxQzk3MEY4RkI5Cis6MTBDOUMwMDBDNzkyNUMzMjIzMTM4NzVGQ0REMzJDREU3QTk4Qzc1QTg3Cis6MTBDOUQwMDA2MDIzRTEwMDFGQjM5OUVCNDE1MkZGNTNENUU1NkEyNDcwCis6MTBDOUUwMDBCQzFGRjJDNThBNjgzN0YyRTE2NzZGMUE4N0ZEQzUzRDQzCis6MTBDOUYwMDAxQkUxQzJGNUFDMkY3MUU1QTFCRjYwN0Q4NUQ1NTkwRjU0Cis6MTBDQTAwMDA1RDVBRTA3Qjk0MUJERURGMEY3OUEzMkY2QTA3MEQxQkI1Cis6MTBDQTEwMDA0QkZCMjFCQTM1RUY2RDQxN0ZDQTNBQzM1N0ZCRkI0MTRGCis6MTBDQTIwMDBGQjc1MjM5OUIzOUUwNUM2QTk2OUFFNzgxRUU3OTMzMEJFCis6MTBDQTMwMDA5OUNCOTdGNTg5QUUzQzdCNTBCRjRDRTg3M0Q1MDI3NjE1Cis6MTBDQTQwMDBFRDdCRDI3RTM5MENGNkY3QjEwM0E0NEVDM0ZBQzA5RTNCCis6MTBDQTUwMDA4N0Y5MEQ2MjdDOUZEOTQ1ODAxM0UwMDk4RTFEQUNCNzI0Cis6MTBDQTYwMDBCNjgyOUM2MjY5ODFGQUEwMDZBNTI1MENENjUzRDVGODNBCis6MTBDQTcwMDBCQzAxRTU2MEU1N0QyREJEQTZBMTNDN0FDNkU4REMxMkNGCis6MTBDQTgwMDAzNEJGRDhEN0ZCOTQzQTIyMDM3MjY4OUE2MjI3M0Q0MTlCCis6MTBDQTkwMDBFQUU1NzczMkY5MkY4QkYwNjZBQUMwOUIzQjg1M0UzRUQ0Cis6MTBDQUEwMDAyRDgyQzM3NzBFNzMyNkUwNzc3NzU5NThBNDAxNDg2OTIxCis6MTBDQUIwMDA1QTU5NDMxMUM5QTlBNTYxNTEyOEZGNzEyREExRjY1QkVGCis6MTBDQUMwMDA5NkRERjk5NUFBQjdEQjNDMEFFQzdCOUJEMjkxOEE5RDU3Cis6MTBDQUQwMDA3Qzg5QkUxRUVFNUZGMjZFNDlFQ0RBNEY1RDkyQTBDMzE4Cis6MTBDQUUwMDA1NEExMUZBNjMwOTcwREQ2NURGRDVBREFFNkY1RjBDQUJGCis6MTBDQUYwMDBEQzAzRjYzMTlGRjg5MUE1Mzg5RkY0NjMwQkRBM0Q4Qjg4Cis6MTBDQjAwMDA1RjBENkY1MTIyMDM3MDYxNzY1NzlFMDFCRUFCOTlEOEJECis6MTBDQjEwMDAzRjdGM0RFQUE0NDc4MUFGMDA4MUI1ODVGOTEzODg4RTM4Cis6MTBDQjIwMDA4MURGMjgyMEYzMzYyNThEQUQzMDAyREU1NUY3MDVGRDc3Cis6MTBDQjMwMDAwQkVBRkJCNzRDQUEzMDAyREU1NzI3RjkxNzE4QTBERTI0Cis6MTBDQjQwMDA5NjU0QzVFQjgzRkMyN0IwN0UyMTY5MjVBRkU3RkIxNzIwCis6MTBDQjUwMDBBODUwOEY0OTVFQzNFQjY4MDgwMjYyMzk5MjFGQUFGMEExCis6MTBDQjYwMDA0MEZGNUY0NjA5QjlFRUY0Q0Y0NEZDQTk3RTI1Q0RCMDY1Cis6MTBDQjcwMDAzRTY4QkRENjY0Q0VBRkJFMENFN0VEQkU0QzY0QjMyNkI2Cis6MTBDQjgwMDAyMkJDRDNGREE5Mzg0RkQ5QUUyMzQ5RUFDMzFCQThCREE3Cis6MTBDQjkwMDA1Q0E3RkM4RUM1ODdFRUZGNzc0OUJDRkZDNTY1NDIxRkM5Cis6MTBDQkEwMDA4OTYwRUIxMDZFQjA0RDlFNDg4MEZGQkVFNkI0MkREODc0Cis6MTBDQkIwMDBGRUMxQTQ2OERFQkYxREZBMjkwQ0Y0MjNFMTI4RkI5MzEzCis6MTBDQkMwMDBFMzJFNDE3OThCN0MzODBDRjg3MDEwMUY2RDRDRTJGMjJCCis6MTBDQkQwMDAxMkM2NTk0REUzQTQwMEZDQjFCRjg5RkRGMzcwREY2MEJDCis6MTBDQkUwMDBCRjhDNjJCRjhDREM0RURENENFREIxREZBODFDRTJGQkRDCis6MTBDQkYwMDAwNTQ2NThDN0JFOEJEMDNFMzEzMDZGM0Q3RUVDMTVGOEYwCis6MTBDQzAwMDBCMUI4MUUxODIxRTk2N0M5ODQ0N0EzMjJCODVFQzgwQUQzCis6MTBDQzEwMDBCNUVCODg0OUU2RjBCMzI2NDdGMTc1NzZFRTQ3NkY4NUE4Cis6MTBDQzIwMDBDNkE5MTc3MEVDMEY3MENGQkVGNjc1QkYyRkU2RjM1RDg3Cis6MTBDQzMwMDBBRjNCNjhCRjVDMkFCRTZGQ0FEODEyQkMxRUIwMkMzNTkxCis6MTBDQzQwMDBGRDdDQjk0QUY3NUQzMTEwMjBBRTMzM0E5OUJFNUIxQkNCCis6MTBDQzUwMDBDRTJDRjQ5QzZERTlGQzJFMzE4N0VCQTNBOEE3NTYwOUQ2Cis6MTBDQzYwMDA3RDlBNzk0NjkyNTNBMTUyNzA4REFBNzUzRTkzMDNERjQ3Cis6MTBDQzcwMDAzNzI4MkVBRjM1Nzg3REI3MTY4QUY1RDlDNUZBRUM3QzAyCis6MTBDQzgwMDA3RDVFMEQ5RUIyQzMxRDA5OTM2RDVERjFCNzEzRUU5REUwCis6MTBDQzkwMDBGRDY1RTU4QkZFMzQ3NDFEQUEzRkE0OEZFRUY2MjMyQ0IwCis6MTBDQ0EwMDBGOTNCREUwRjM5NEYxRDNDM0JFMUFDOUI5Rjg0MjdEMjAzCis6MTBDQ0IwMDAzMzdEOTdBNUM1NDczOUNGMEI4MjNFQkJEMDc1RTI3NTUyCis6MTBDQ0MwMDA4RTU3QzJCRkFCRkEwOUVDMjNFQTI3MEUyRDNFNTczNTJCCis6MTBDQ0QwMDAyNjFBRTY2NDA1QkU2QkMyQkQyQzBBRjhFN0QyOTM4NTFFCis6MTBDQ0UwMDA5REQ3OUZGNTQ3RkVFRDI5RTU3RTU0Q0YyRUIzQjNERUU5Cis6MTBDQ0YwMDA0MTdFQkRBQ0U0Qjg5MDdFM0Q3QUFFQjdGM0RBQTM0QzhBCis6MTBDRDAwMDA0QzIxQkQ0OEVCNjc2ODhGNzNGQTVDQTg5RjlFNjVDRTg3Cis6MTBDRDEwMDA2REQwRUYzMDlEREVEMTBFRkJCOUNCMUFGODJFMjA0RjJGCis6MTBDRDIwMDBCNEY1OUYwODNBRThFQTM3RUE0OEMwRjkxNTlBNEI1RjJDCis6MTBDRDMwMDA3MDM4MTkxQjlCRkMxNEYxRjdDMjlFQTVDQjEzQTE3RTgyCis6MTBDRDQwMDA0QkYyMzZFMkQ3ODVGRDRBQ0ZBMzZCRTZCNkU0RURCQ0U1Cis6MTBDRDUwMDA5RTU5N0EzRTA5RUI0RjZERTdFRDQ3Qjk1RTQwRkVDRTM2Cis6MTBDRDYwMDAzQ0RCMkI0NjBGMDlFODBGMTM5MjFENUNGRjI4MzMzMDg0Cis6MTBDRDcwMDBDNDIzQjM3QUI3MTNFNUE0ODQ2Nzc3NjVBMUQ5NTAxQkEwCis6MTBDRDgwMDA0QTZGQkRBMzkzOUVGOTc5NDZCMTkwQ0ZDNUQyOEVGNzc1Cis6MTBDRDkwMDAxQjM1NzY3QzdCQTRDNUEzMDI1Q0RCNTE5RUMyN0FFNzdGCis6MTBDREEwMDAyNEJCQTcyM0ZDNkIyMjVBNjdBMjBBN0M1RkM0MjcyNkY4Cis6MTBDREIwMDBENDg3MTQxN0U4MUJFODE3NzFEOEQ5NzQ5OEE3RDJCQThBCis6MTBDREMwMDBCRTlDRjRDMDI1NEU4QjkxRTAyOUZDNTRCMEY2NEJEMEFDCis6MTBDREQwMDBDRkFCQUYzREYzQjM3RTdDOTg3MjlDQzcxMDQxRkYzNTVCCis6MTBDREUwMDBBRjdERkJDRDVGNTE4RTdFNjk3NUEyMUI3MDQ4RjNBM0FBCis6MTBDREYwMDBDQjUxQkYxQUQyRkNBNzZGQjlCQ0I1RDIzOTk1OUNGN0ZECis6MTBDRTAwMDAxMEY0MzdDMkYzRTIyNjMzQ0Q3RjQ4NzNDNjdDNkMzRjAzCis6MTBDRTEwMDBFQ0ZERTY2NEM0OEYxMUM3NUFFQTkxMURCNEVGNzlBOUZECis6MTBDRTIwMDA5RjNCRjhEQzhBOUQ1NDJFNjU1RUJCN0VEMTA5OEYyRjE3Cis6MTBDRTMwMDA0QzBDRjU0QjgwQzdGRkUxRjBCOEI4MDBGRDhBNkQ3MTZFCis6MTBDRTQwMDA4N0Q2Rjg0OTRGRUJDRkZEOThFMjdCRDBDQkQzOTFDRTdDCis6MTBDRTUwMDBDRkIxMUU0RTNDNTc2OEI3RjE3RUY0RkVDREEzMTVCMDlFCis6MTBDRTYwMDAzRTc4M0VBMjAzNjYxMEE0Mzc4RkJBNjAwMTA2MTJBODZFCis6MTBDRTcwMDA5N0IwMjg0REJEQ0NEMjQ3RDM3RThDM0Q1MUYzRkVBNjUyCis6MTBDRTgwMDBGODBDQ0RGQkYxOEUzQzRERkQ5NkY0MjE5QUY2QjczOUE2Cis6MTBDRTkwMDA0QjM0RjVEQjhCQzc2QkRBNTdCODJBMzRGNUJDOTYwNkYyCis6MTBDRUEwMDA0REZCODIwMzREREFGNzg3MURCNDBGMDVDN0NBQ0I1MDdGCis6MTBDRUIwMDA5Rjc3RkFEQ0Y1NThERUQ4QkFBMUFDQTc4Mzc1RjFFQjAxCis6MTBDRUMwMDAxNkZBQkRGNUY4N0NEOEM1REFBMjE2RDZENUJGQ0I5NjMyCis6MTBDRUQwMDBCOEU5M0NDMDhDRkJBMjA2OUQwRjk0Rjg4ODFFREIwQ0MxCis6MTBDRUUwMDA0RTQ3QjAxRkY3RDE1RUVFMTc3MDlGREU1MjAwRUMwMDg4Cis6MTBDRUYwMDBFQzkxOTY4RTE4RENBRjMxQjMxRTUyMjM3MTVGM0ExODU1Cis6MTBDRjAwMDBGOUJEMUE0REZFNUYwQzQzMzkzRjQzMjVCREI3RDFDODZCCis6MTBDRjEwMDA0ODdGNkM5QzlBRUQ0NURGREY1MUM1RkZFMjVGOTE0RjgyCis6MTBDRjIwMDBDRDg4MjA3RTMyMDIzNDVDNUEzNzlFODEyQUI4NEY2RUZCCis6MTBDRjMwMDBDREJBNEJEODYyREQzRUREQURBOThGQjFGRjQ0RDNGRTQzCis6MTBDRjQwMDBBNkY4NTU5QUY3RTMxRDBGRThGNjY5QTNBNjdFOUJGM0IyCis6MTBDRjUwMDA1MUREM0U2REQ2RUREMzMzOUFGNzIzM0VGN0Q3MjMxOTMzCis6MTBDRjYwMDA4RDZBRjVBODM2OThGRkQwQTMxQkNBNzA1Rjg2MURGM0EzCis6MTBDRjcwMDBDQzQwN0EyOTZDNzFENzEzMEJEOTU3RkIyNjk2MkQ2MEJDCis6MTBDRjgwMDA1N0ExM0ZFQjhEQkE3ODJBRjdENTM5QzgxRkI1QkYyRTA4Cis6MTBDRjkwMDA5RENBMDM3NTRFN0FGRTc2NUQzMTk1RUZENEI5QThGQzMzCis6MTBDRkEwMDA0QkREMzgyQTdENzVFNTU0MzZENDM1NTBGQjVENzU0RDIzCis6MTBDRkIwMDA1NDAyMDQwN0EwQkM4ODhEMTFGMjA3RUE2OEU3QjcxOThDCis6MTBDRkMwMDBGQ0Q1NzhFMjdBRkFBOTZGODg0RkI2RjVGMEI3NjFGRDIzCis6MTBDRkQwMDAzRUY2OEY4QUQxNTAzRjlDQzI4OEJGNTlBMTRGQTRDNzRCCis6MTBDRkUwMDA3MzI5QUVDQTE0QTg1RjQ4RTZDRkRCQzNBQ0VCNTAwRTgyCis6MTBDRkYwMDAzNDE4NUM3OUE4NUZGRkZCQTlGRjZDMzQwRTYwRUNGRTZGCis6MTBEMDAwMDA1NUU1RjFGNjI4NUVCNzQwOUQzNjFCMEQzM0NGN0YzNkQwCis6MTBEMDEwMDBCQTg2MzNGNjFDOEE4Q0ExNTRBRkMwN0E3QjM4N0Y3RkU2Cis6MTBEMDIwMDBFMUE5RkY5MDdFMkRDRjlCMjcwN0NFOUJGRjlEMUNFMkExCis6MTBEMDMwMDBCQ0Y5Qjk1MzBFMUJGQTU5MEU1RDRDQjNFMUJBMEUwOTk3Cis6MTBEMDQwMDBCRjkyOEJFNTg1Q0Q4NkIyQzQ5ODE3ODY3MkYxQTg0RTQzCis6MTBEMDUwMDA4RjkwRTVBN0Q2MTI1MzRBMUNDRURGMzkwNUY1MDhDRkNECis6MTBEMDYwMDBDRDYxNkMxQkYwOEI4OTBBQjc0NzNCRjVDMDE0MkVDRkZFCis6MTBEMDcwMDBEQjZGMzM5M0JENzNEOEUwOUE4Rjc4MEU3Q0ZBNDk4NEM2Cis6MTBEMDgwMDA1NzQyNEFDRjg5Mjg1N0RBNkQxRDA5MDg4N0ZFMjk5MTMyCis6MTBEMDkwMDBCQzFFRDdGMUE0RTIwQ0FBODdGMTc1QzZBNUQ4MjY3NkU2Cis6MTBEMEEwMDBCM0NFQkUzODFGRkQzQTZGNDgxMUU3MEMyREFFMDEyOEY0Cis6MTBEMEIwMDA3RjY1RkQ3MDg1QUIwQUU1QzRFMTEyRDc0MDlDQ0ZBMTI2Cis6MTBEMEMwMDA3MjMzRDE4RkE3RENFNjFEODg0Q0NFRTgyQTlBMTJFNDkxCis6MTBEMEQwMDA2Rjc5MzQyNThDQkU5QjZDRTI3NEM2RUU1MkJEREI0Mjg4Cis6MTBEMEUwMDBEODY5MkZBNTcwN0Q5RkY2MERFREI5M0IyMzQ4MEYzRjAyCis6MTBEMEYwMDA2QzYwOEI3Njg1ODBFM0JCMjk1Q0NFOURFOTExREFGRkZECis6MTBEMTAwMDBFMjEzRjAyQjlENjRBM0ZFREE1Nzg0RDM3OTZGN0I3OTA5Cis6MTBEMTEwMDAxQUU5NDFFREI1MDAyNUEwOEZGNjUzQjU2Nzc3RDM3QkFCCis6MTBEMTIwMDBCMzNDMEFBMzczQ0Q2OTgyNEYzREQ3QkNGQzFGNDdBMDE3Cis6MTBEMTMwMDBGRDI3MkIyMjlDQzRDM0VEODM0ODNFREQyNTFBQ0Y4OEYyCis6MTBEMTQwMDBCMTkwREUzMjYzRTI4MDUyOTQ0QkQzQzRGOUQ4NEM5QjQ5Cis6MTBEMTUwMDBCMTE3MUQ5MzE5QTM0Qzc2RTg2NzlFMzU2RjBEOEFGRkIyCis6MTBEMTYwMDAwNUIxMTVBNjI4QTgyRkVBN0ZGNzFBMkM5N0E0NkMzNENFCis6MTBEMTcwMDA0NTQzNTk5OUY1RkMxQTU0MUZBQjgwQjQ4QUM4NUVGMjM2Cis6MTBEMTgwMDBGRkI5MEVFNjM1NkJBNUVBRTBGNjkzOTA2QkFFQTVENzM2Cis6MTBEMTkwMDAxNDhGMjFGMTEwRTE4ODc4MEFGMDI1QkJGMDNEMDE2RjcyCis6MTBEMUEwMDBGOUREN0IwMjlFQjM1MkM0Mzk2RDM2Q0JCRUE0M0RGNzg4Cis6MTBEMUIwMDA5OThCNzhEMjNBRTNDRkE5RERGOEU3QjVFRjg1REVGNkIzCis6MTBEMUMwMDA4MTg5OEZCQkY0RTkzMDZGQjAzRjQ5OEU3QjQ4Q0NFMzU3Cis6MTBEMUQwMDBCMDg5QjkxNEQ0RTNFRUIyMTE3RUU0NEMzRDdGNUYxMTA3Cis6MTBEMUUwMDBBQzNGQTdEOTZFQTA3MzdCQzlDNzdEOENGQ0Y2NDU5RjY5Cis6MTBEMUYwMDBCQjg5Q0ZEREQ4RUFERjdFODQxMTlFMzcyMTlENUM0OTUzCis6MTBEMjAwMDA0RTRERjJBQzIyRjkzMEU0NkI5MDNGQzgxNzJGQkEzRjc1Cis6MTBEMjEwMDAzOTQyN0M3MDkxRTA4M0I1QzRCRkY2RDVBREE0RkFGRTY3Cis6MTBEMjIwMDAzQTBGOTUwN0VBRDYwOTNFQjg4MURFQkY1M0I3NDlGMEY5Cis6MTBEMjMwMDA0MUFGRTA4MzRGRDNGM0U2QkFBOTU0QkU1NkU3MTY3QzVDCis6MTBEMjQwMDA5MDlGQUI0RTE0RjhCNDMyREVCRDBFRjk5OTNDQkY5Q0YyCis6MTBEMjUwMDA2QzcxODcyMUJDRkVGOEE4OTlBOTc4MkVEMTZDMjYzQzY4Cis6MTBEMjYwMDAwNTBBNzhGMkIxNTg4Qzk3MzFEQkQ3M0JCQUM2Q0RFOEM2Cis6MTBEMjcwMDBGOTZERTdGRUVCQ0U3OTM3QzRCQjFFQzFGMTNBRTM2NDJBCis6MTBEMjgwMDA1MDNGQkJBMTdCRkMzOUM0MUMzNkU0MjczQkI2NEUyNDdGCis6MTBEMjkwMDBGRTcxQzhFMUIwQTFERUZBNUNDQUE0ODlDOEFGMEZCOUJCCis6MTBEMkEwMDAxQ0I2MzBBOEZGNjFFQjI0RkVERUVEQjA5OUExQkUzM0MxCis6MTBEMkIwMDA2NTMyN0ZFRjcxRDhDMkExREVCMDU1RDRCRDhDMEVCNUZBCis6MTBEMkMwMDA3NzZGQkQ5M0Y4NEYwOTUzRjYyMTNEOTQ1OTEyNDcwM0U4Cis6MTBEMkQwMDBCQjA2Rjk1OEIyMEZFOUUwQTZGOEQ5QTM5MTBFNTI1MjU1Cis6MTBEMkUwMDAxQzg0MEZFMzFEQUJGNjYxRkQ5NkY0Q0RDNjE4MDc3QURBCis6MTBEMkYwMDA0M0YzNTZFMzc3QTVCMTE1NDZGQzZFNzRGRkJCNTdFM0M1Cis6MTBEMzAwMDA3NzYzNTMzNjFBODNCRjFCOTdGNUZDNkFBQ0RGRUFEQzAwCis6MTBEMzEwMDA2QzQ0N0QzMDA1Rjk1NjVDQTAxRjU5OTdFRjI1N0Y0NTc5Cis6MTBEMzIwMDAzQjAxRjEzNEI3Qjk5Q0Y4Nzg0RTUzMzlGMTcxMDk5NzQ0Cis6MTBEMzMwMDBEMkM5MTVGN0EzOUZBRUE2NDlCMTJCMzg4RkM5NEFFN0NBCis6MTBEMzQwMDA2MUJEMDIzQTQ0RjU0NUEwMTZFMEIzRkJCNkNFOEI1RTU0Cis6MTBEMzUwMDAwNURGRDU2MDdEMjhENTdGQjUyQTM0REYzRDk4MTI0MkEwCis6MTBEMzYwMDBCRTdDMjhFODE0RTU2NjA1N0NGNzIxRDBDRjJFQTg2NzlGCis6MTBEMzcwMDBFMEZBQzg3RjM4REIzNjlCRkE3M0RCNTBCRUU2QTY3MDU2Cis6MTBEMzgwMDAzOTU5MjBFNEU2NUM1MTJFMTJDRjNGQjVCQURFNDdCQUQ4Cis6MTBEMzkwMDBGQzM4NDVEODYzNURFOUZBMTM0MUI3MEJGODNDQkFEMEM1Cis6MTBEM0EwMDBCNUY2QkRBMDZCQkY5NDBGODUxRDA5NThBRjYyMUJDOEIxCis6MTBEM0IwMDA0Rjc4QTVGOEFFQzVDMUY2NUIyMkM2NDkzNDUwRkM4NTRFCis6MTBEM0MwMDAzRTRFQTI5MkY5Nzg3RjBEQkEzODBCRTYzN0QxNzk2Q0QwCis6MTBEM0QwMDA1M0QwNzNFMjQ3QzJGRUU4QzFGOURFNTQ2NEQ2ODA5RkExCis6MTBEM0UwMDBERjc2Q0ZDRkZFOERGMEJGQ0NCQUI1RUZDNUJBMTczMzFECis6MTBEM0YwMDAyRkM1QjVFOUQ3QzFEQzcxNDQ1QjRCQUQ4NzY5M0ZCQjM1Cis6MTBENDAwMDBBRUM3MUY3QTNENURENkMxRUQ3NzE5QzcyMkZERjJBMEU4Cis6MTBENDEwMDAwN0Q5MDYxNjIxMUZCNDMxRjRERjA0RjM4OTIzOTdFMUZECis6MTBENDIwMDAxMzdBN0VGNDVERjFCOUNCRjA5QkE0ODEyMUY4OEQ4QzQ5Cis6MTBENDMwMDBDRkQyOTc1MjlGODNCQTA3RTNGMzNDQUY4NTkzOUZGRTA5Cis6MTBENDQwMDBBNEMzOUQ4REZEQjQ5Nzc2N0M2MzQwRkIyQ0Q2NEY3OEFBCis6MTBENDUwMDBFNkU5RTc3NkUyNzNDNUM0Q0ZFOUUxNDkyQUVFREIyOUM0Cis6MTBENDYwMDA4M0U3MEZBODE3MERERkY2MjRGMTlEMzYxNDBFNDA4RkM5Cis6MTBENDcwMDA4NTUwNDdCRUUzRUQ1QjNFMThCRjYzRTkxQzdGREExNUJDCis6MTBENDgwMDAyRTE3MjVERDgzM0U0OEU1ODg4MTVDMUU3NTJEMzk1REFDCis6MTBENDkwMDBDOUI4QzZGNkNEREYyNjkwMUZFQjBBRjhERTFEMUNDNjA0Cis6MTBENEEwMDBBOEMzRkQxRUU0RjdDNTExQTRGMkI0MkFBQzQ1MDFGREUyCis6MTBENEIwMDBBRkI1QTQxN0U5MTFBRDAzNEM0NjJDQkY2QjNCQjE3NTVBCis6MTBENEMwMDA0MDJBRjVBRkI3MTc1QkZCMTQ1QkY4Qjg2M0M3NjFEOUE3Cis6MTBENEQwMDA2NDcyNkY5QThENzZEMjEwMzNEOTQ5RUY4QTc4QzAwOTc5Cis6MTBENEUwMDAxMTNDN0VFQTVEM0MxRjg2NzYxMzhFNUY4QzQ1RjlBNTY0Cis6MTBENEYwMDBCNzM3NUIwRjRFMkY3NUU0NzRCNTNCNjE5REEzNzE5REVCCis6MTBENTAwMDA5NTlGMTlFRUM3NjdENzZBODc1NkFFRkM4NjE5NjM0MEE4Cis6MTBENTEwMDA2RUFGQkNDODhDMDU1NzYzOTczMjE1RDk0NUZFNTFFN0VECis6MTBENTIwMDA5QjU4MTY3REVFOEJDRTcxQTBGRDI5RjUwNzYxOUY1RTlECis6MTBENTMwMDAyMTBFQTlCODgzRUIwQkEzMkVCMjc0NjMyMUZBOTk3QTVBCis6MTBENTQwMDBEMEY5OEQ1MkZDMjc2RUI3OEE1MjlFOEIwQ0U3NTM2MDQwCis6MTBENTUwMDAzMzBENTZBRjI5NDkxMzg3MTQ2Rjg0NzJCQUVBMUY4Q0IyCis6MTBENTYwMDBGNTM2RTZBMzczMTJCRDNERkI5NkYwNDM4MTVERkIwQkUwCis6MTBENTcwMDBDNERCMzUyMjNFMDk3NjI0MDZGMTc3Q0M0RjNGOUFGOTc5Cis6MTBENTgwMDAzM0UyMDNFMUE0MEY3NURBQjVCQjBEMTQ1RkQwNjg3NDA0Cis6MTBENTkwMDBGNTFDODE3NkVEQ0E4MUNFNTU1MEZGRDQxN0Y3RUI1N0I1Cis6MTBENUEwMDBBMUFDQjE3RjQzNzA5M0Y0NUJCOUYyM0NDMTUzRDY1QjNECis6MTBENUIwMDA4NURGNzc0MzE4QzgxRjI4MkJGRkEzOTIxQ0FBNjQ2QzMxCis6MTBENUMwMDAxREVEMUI3QkMzQjQyQzQ4MkVCMjg2QUYzQUUxOUYwQkY2Cis6MTBENUQwMDA3Q0FGMDIwMTQ4NzZENkM4NDkyRTY4NTcyMUVDMEZFNjg5Cis6MTBENUUwMDA3OTlERDc4NUREMDUxNkM1MjQxN0Y0NUIxMTI3REFCM0JECis6MTBENUYwMDA4N0Y5RkIwMUYyRkQyM0ZDRkQ0MEQ5REZGOTg5RjRCRTc4Cis6MTBENjAwMDA4RkFDOEJGRTMyNjRGRDRGQkM5RTI4Qzc2QkU1RjU2QzdBCis6MTBENjEwMDA1OTBGRTdGREQ5NzhGQjk3MDYzNjRDRjI2NDA1RjhGRDAzCis6MTBENjIwMDA5RTgxNDIzRUU2QjEzQzExOTdCMzc3RTBFNUUzNTFCNDA5Cis6MTBENjMwMDBFRjg1N0M5OEY1OENFQTMxRTVFMkZFOEM4RkY4MzNEMkU5Cis6MTBENjQwMDA3NzgzNDJCMTczOTVGNzg2OTFCRkZCNEM3NDQzQ0VGMjVBCis6MTBENjUwMDAyMDdCNDVDNkFGOTQ5N0Q5NUNBOEZGNTVCRDk4QjY0NUM5Cis6MTBENjYwMDAxNUYxM0NBODdGRkNDQkMxRUQ5ODMxQUE5NUNFMjdDRTExCis6MTBENjcwMDAzREM4Rjk3RTc3RkFEQjgyOTVBRjZBRjZCM0NCN0I1NTZFCis6MTBENjgwMDBFMUY2MzgxRURDQzE3ODY3MUZFQUJEOTlFQzhCMTQxRkU4Cis6MTBENjkwMDA5RDlCN0YyQUY4NUQyRkUwQURDNUQxODE3OEIxRDg2NDFDCis6MTBENkEwMDBFNjQyN0IzNUY2MjVFMENGQjhDNzlGRkI4ODFGMkY3ODcxCis6MTBENkIwMDA4OUZCN0ZBQjFFN0Q5M0U0REUxQ0Q1NDFGRURDQjE1OUI2Cis6MTBENkMwMDBFRTJGMTA2RkRCNkMzRUYyMkIyRTU4RjkxQUNERUI5QjMwCis6MTBENkQwMDAwQ0ExMzdEODNCQjI4MkUxNzlCNjJCRkNCRkJBMDJGQzcxCis6MTBENkUwMDBCRkZBMjFFMUFGRjczQjJGQjFFRUEzRjUyRUI5QzZCOEQzCis6MTBENkYwMDBCNjM2MUIzRjE3NzU4QTdEM0E2RTcwMEMxNkYwOEE0ODU1Cis6MTBENzAwMDA0NUZGRjk3QzVGNkE5NDhBNDFDN0JFNUUzQzVFRTk5RDM1Cis6MTBENzEwMDAyMkI0OEJDRUQ1REExOEVFRkJGNEU1N0ZDQjcxODdGMDFGCis6MTBENzIwMDBGQkVBRUQ4MTE5Mzg2NjVDMDA1RTdENTI4NTFFMTQ4MDJGCis6MTBENzMwMDBFRjAwMUNFRjMyRjBENUJFRkY5RUUxREJEQkU4MzczOUFFCis6MTBENzQwMDBGMTFDRjUyOEEzN0UwNkZCOEU5QjgyRTM2MjQ2QTQ3MjQxCis6MTBENzUwMDBCQ0VDRDlDNENGOERGNEYxNUUyMzUyNkREQ0VGMkRDRTNECis6MTBENzYwMDA2N0FBMjZCRTMzMUNDRjY3MjQzRDhDOEE2MDBERTg2RjA0Cis6MTBENzcwMDAwN0JDNzYwQUJDNzYyMjVFNEJGQzBEOUNEM0MwNzcyMTk5Cis6MTBENzgwMDBFODJCODBCRjVBQjg4RTRFRUQ4MkI3RTNBRTAwRDc3MTVBCis6MTBENzkwMDAzRjI0NUMxQjQxMUZBNjczQ0REREUxRTQ0RkQxQzM3OTZCCis6MTBEN0EwMDBBOTgwQUI4NEY3QkQ1NzgwRjNCRERGMTM5Q0VGNEQ3NUE3Cis6MTBEN0IwMDA2OEZDMTExMkRFRERDOTI3RkRGRUM4Nzk4N0EwRDNBMjVGCis6MTBEN0MwMDBFQkExRDM0QjY5REM0RTY0NDYzRkM1OTlFQUY3QkRCRTc5Cis6MTBEN0QwMDAyQjNEQURCREMyQkVBRkZEMjFGNzVEMEYzNzdENTkyOTkxCis6MTBEN0UwMDBDRTNCRjVDRkI3QTU3NkNCRUZCRTEzMzhGRTZGRjNBN0QwCis6MTBEN0YwMDBDRkE4RERBQjc5M0Y2QkU1NDFDREZCRDk5RUY3MzRGNTgyCis6MTBEODAwMDBFMTdFNUYxOUEyQjlGNDhGOEYzQ0Q1RjEyNkQ2QUZENzUwCis6MTBEODEwMDBDRkRFOUQ3RjdEQzIwQjBCMEQ3OEZFNTZFQ0UzRkVGRDQ3Cis6MTBEODIwMDAwNUU5RUU3RkE1MDI5Q0RGMzU3OEVCNkQwMEQ3MUI4RkY1Cis6MTBEODMwMDAzNUE4NzQxRUU2Q0RBMzczQzBFNTYyOEVFNzg3RkZGM0JCCis6MTBEODQwMDA5MzlGMDFERTlDNjc2NkYyN0ZCNkVDQ0QzMDNBQjJCQkE3Cis6MTBEODUwMDBFMjQxQzkwNTk1Qjk4MkY0QzQxMjRCOTQxMUY1QTkxMjlECis6MTBEODYwMDBEMDk0NDNFMUNEMjU4MTM3MTQwRjA0RjQzRUQ1QzJDMkQ0Cis6MTBEODcwMDA2MjgxQ0VBNzRFNTUyOEZFNjkyQUUzRjFENDUwQjZCODhFCis6MTBEODgwMDBFMUZEMDQyMzZCMzE0M0JEQzI2QTZDMzFEM0I5MUZDRkI0Cis6MTBEODkwMDA3Nzk4QzJBN0M5Q0M0NkU2QzFGNzJDMzY4NkVDRTBDOTFBCis6MTBEOEEwMDBGODEwRTZBQkJBNTQ4QTY3OUI1MkNDQ0YwQkVGQjIzNjc2Cis6MTBEOEIwMDA4NEExM0NCREYzQzA3RDY3N0YwNkVGRDk2QTRGMTE4RjBECis6MTBEOEMwMDBENzk2Rjk2QjFGMUJBRUU1MUNGMDUyMkFBN0YzNzY0NURECis6MTBEOEQwMDA5QzJCMkI2MTRFOEM2RkQ1N0ZGNzdFMkFGNzk3NEU1MDhECis6MTBEOEUwMDA1N0E5MThGRkQyRjExRTIzQkQ1QkQyMURBQ0VGODAzOUMyCis6MTBEOEYwMDA5RkU3NjcwQ0M1NzVCMkIwOTZCNDQ4RDQ5RjM3OTY2MTYwCis6MTBEOTAwMDBGQkNBQzMwRTgyNEI0REYxQUExQ0RDQzc5QUQxQ0E2NzcxCis6MTBEOTEwMDBFNjlDODA3RDUzQjNGMjZCRDJEM0M3QTgzQkVBQjFGRDNFCis6MTBEOTIwMDBCOUEzREMzNTdFNjNBQjQ3NDU3QjI1RTBCRkY0Q0Y0NDJDCis6MTBEOTMwMDBCQUJDOTIxRDI0RTc3REFDQUU4NUYwRTk5M0JBMDM1NERFCis6MTBEOTQwMDBCRTNCRjI0RjQ1QTg2N0Y4RUI3QzIxRkQ5N0Q3RUIyRjQ0Cis6MTBEOTUwMDA5MDdFMDJFOTM3OTA3Q0UwRDM3QkNCN0EyMzVFNjZBNDhECis6MTBEOTYwMDAwOTNERDBBMkY0NDNCRUMwOENCQzk0RkMzMjM3QUQ4QkQxCis6MTBEOTcwMDA1QzJENDhCQkJDM0VBODdERkYzREYzRDdBQkM1RjNDQUM5Cis6MTBEOTgwMDA3ODJFMTdGNUY4QURDNzZCODlDRkYwNTk5MTAyRTNERTE5Cis6MTBEOTkwMDAwNUZBMUVDQUQ1NjlDQzkzNUQwOTdDNzZFQUMyMEQ2MTkxCis6MTBEOUEwMDBDMzk0RUJDN0VCMjVENkNGMTM1ODg4M0M5NTZCRTdFN0JDCis6MTBEOUIwMDAwRURBNDdCNTRDMjVGQjQwQzYyQkM4N0Q1ODkwRDY0NTlFCis6MTBEOUMwMDAyRTJFQjlDMkJFMkRGOTIxRjdBREFCNUNGQjdDRTZGNTdFCis6MTBEOUQwMDBDOTM1QTZDOUVCQjhCRjJCQkUzRTkwNzY3OTdENDBGQjFBCis6MTBEOUUwMDBGRTdCNUU3NzUwRkVDQzRDRDUxMEM4MTdDMTc4NjI4Qzk4Cis6MTBEOUYwMDA2QjZDRjdGMjdDQzg0NTg5MUIyMjI5MzhCM0I4MjMxMjE3Cis6MTBEQTAwMDBGNUM2QzU3QjU0QzI0MzY2NzQxOUZCMDBCRTJFMTRGOERDCis6MTBEQTEwMDBEQUNBNUEzRTQwN0M1QzM4N0MyMUU1RDEyRDdBM0M3NEQwCis6MTBEQTIwMDA1QzcxQjU2OEJGQzREQTY4QzI3NTJFRDlBQTZENTcyRDZFCis6MTBEQTMwMDBFMjhBMkI3NzY4RkRBMkQ1QzM2RjNBODlGRDU2RUJFMkU3Cis6MTBEQTQwMDA3OTc2QTY4OUY4RTE3Qzk2Q0ZFMzJFQjRGQUE5QkU2QzZDCis6MTBEQTUwMDBBQjYzMUE3RjY1REJDNTNBRjIwN0JDRjRCQkQ2ODczREUyCis6MTBEQTYwMDBGRDgzRUNGRkFFNzhCQkY3MEFGQkI3Rjc4N0RDM0YzREUxCis6MTBEQTcwMDBERUFBQjZBRDk0NTc3NUFENzhGQkQzNDFBRTBGNzBERTFDCis6MTBEQTgwMDA5MjFGNEY0N0RFMDRFMzRFN0ZENUVDRjVFMEY5Njg5MTM1Cis6MTBEQTkwMDA4M0ZCMzcxNTZGM0Q5RUI3QjU3RkNCQzg3RjM0NDdGODAyCis6MTBEQUEwMDAzOUJCQ0I0Qjk3RjEwNjQzMEU3QkVCNzlCQzgxNEJDNTYxCis6MTBEQUIwMDAzQ0QxQzEwN0NBQ0JGMEI4QTJFMDlENUFEMjQ3QkEzRENCCis6MTBEQUMwMDBCNzkyRjk1NTIyN0VFODZBRjk5QUY0RUIwRDNFNTU0QjcwCis6MTBEQUQwMDA3QTk2RDM2NzI3N0Q2OEU4ODU4NjM3NTEzRTdFNTdGRTY0Cis6MTBEQUUwMDA2RTI5MEY3MzYzMzhEQzBBRkRFNUE0RTdCNTg1QjUxNDJDCis6MTBEQUYwMDA3RDg4N0FDMkNCRTEyMUY1ODQxRUU5NUM0Rjk4RTQ5OUQ4Cis6MTBEQjAwMDAxREM2RjMwREJCOUMwN0Y2NDhDN0YzNDBDMUZGMEQxNkI5Cis6MTBEQjEwMDA1NzE4QzI2OThDREFGQUVCM0IxMDdGN0MyQUY5Rjc1NjZBCis6MTBEQjIwMDBGQ0ZDRkQzRjNDRTZCOEIyREQ1RjYzM0Y0RjdBNDM3N0Q0Cis6MTBEQjMwMDBGQTdGOEQ4MUU3NURFNDk3MzkyOENFMEZFRDI5RjRFRjY4Cis6MTBEQjQwMDA0OTdGOUZCRTdERjFBMEQyRkVFOTcxRTRBRkY2Qjk3MEM2Cis6MTBEQjUwMDAzRTlCRjg3Q0JBREI5RjlBOTU1RjY5RkM4QkREOEQ1RkZECis6MTBEQjYwMDBCM0E3QzgzRTI3ODgwRTY2QTQyQjEyQ0ZFRDI3MkM4MUMxCis6MTBEQjcwMDBGREJENUEzQzE4RDEzMTU1QTNGRkZDRkY2RTU3NEM1MEU4Cis6MTBEQjgwMDA0MUI1MDRGOTk5QUQ3OEI5RkVDQUI4MUUzQjlERjlBODE0Cis6MTBEQjkwMDA5Q0M5M0FBODc0MzMxRTdGM0Y4NzM5QTk5QzI3RjI5ODA1Cis6MTBEQkEwMDBERkNFNzA1N0E0NTMzQzRDNDcyRjhBOUY3Q0YxN0ZCMjQ1Cis6MTBEQkIwMDAxMDZGQ0U4RTFDQjYwMTYzRURCRTJGM0RBRTNEQ0Y0MTQyCis6MTBEQkMwMDBFM0I3RUZGRTlGMDQ4QzgzQjkxMjVGRDgxMEVGOUE5N0VBCis6MTBEQkQwMDAxRUUyM0NFODJGMjUyQTlEQjdCMDUzOEY5MTlDQTgxMEQ4Cis6MTBEQkUwMDBCNzMwQjBEMUZDMUNFRDVGOEU0NEEyOUIwMDVGRUNCRDUyCis6MTBEQkYwMDA1OUYyNDUzQzlGQ0RGRUNDQzBFMzQ5MTYyQkRFODFEMEM3Cis6MTBEQzAwMDBCNEM5NkYyMEQyQ0E5RTlGRTg1NUIxREVDOERGNjc1N0ZFCis6MTBEQzEwMDA0NTc5MTVBODY3MEYwOUU3RUZFRjhFRjJBMjFGN0QwNjgxCis6MTBEQzIwMDBGMzEzM0RDRTYyOENGOERENkNDNkY5REU1Q0U2RTJGOUZBCis6MTBEQzMwMDAwRUFDMjMwOUY1QjBGOUNEMTYxRUVGQ0ZGQzI5QzhERkQ1Cis6MTBEQzQwMDA3M0JBQjE3RjVBMDQ5REU3MjY3MTdFOUU1QkFBRjU1Mzk1Cis6MTBEQzUwMDBBQzQ5RTc3Q0ZDNjQ0NkU5Njc0ODRGNjdEMjVENkJCMTJECis6MTBEQzYwMDBDQzhERjZBRDdGQjg5MEZDRjYwQ0VEODc5MzQzN0U0MkU5Cis6MTBEQzcwMDBFNzhERjJCQkM4NDFBNTBGNjJCQjlEMEE4RjRGRjdFQzQxCis6MTBEQzgwMDAzMTUzN0MwNDdDRDFBQjNDMjhBRUZGRUQ4Q0IyNUY2MTlDCis6MTBEQzkwMDBCQjQ3MTFGNjQ1RERDMzE1QkVEM0U0Q0QwNkU4QzlDM0M1Cis6MTBEQ0EwMDBFNzhGMzYxN0Y5REZFMTQxMzE4RDRCRjVERjNGM0Q2MUZECis6MTBEQ0IwMDBGMjZBMkJGOUY4M0RBOEY3NDYwRTcyM0Y4NUZCOUE2Qjg2Cis6MTBEQ0MwMDA2MkNDOEFGMzdGQzJFQ0RENDJGQTY5NkQwMkZBMkIxNzRGCis6MTBEQ0QwMDAzRTY5MzZBMERFRjAxMTg4NUJDQzQzRjk2QjlEODVDQUE2Cis6MTBEQ0UwMDBCRjgxMUQ4Q0U1QTc2MDA3NjNGOTE5RDhDMTU4RkUxREQ3Cis6MTBEQ0YwMDBFQzYwMkNFNzVGQzgwMzYxQzFEOEQ4MEM1NzMzQzdFRjdECis6MTBERDAwMDBEMEY5NTlCQjA1M0MzQkM3REY2M0EyRjE0RjY2QjgwOUE4Cis6MTBERDEwMDBCRTlERkJGRDMyRjNFMkExQ0VDRUE4OEVCRUQxOTdDMTRGCis6MTBERDIwMDBCN0VFRjk4QzQ3RDg4M0ExRTNCOTlFMTVGM0M4NjkzNERGCis6MTBERDMwMDA5MjdDQ0Y2OUYyNDcyRTA4NkFGNzc2QkE4OURFNjdFRkUwCis6MTBERDQwMDBGRTlDRjI0RkRCRUM5REYwNzUyOUIwRTQwOTA2NUU3Rjg2Cis6MTBERDUwMDBGQkU5Nzk5MzU3NjdFMUZDNUQ5RkUxQkE4MUJFRkY4MkUxCis6MTBERDYwMDA2NTRFRDNGQkJGQzJGQzFGRTg5RkUyMEVEQTk1OEVERjQzCis6MTBERDcwMDA5MDFEQTA1Qjg3MUUwRTcyNUQzQkEzN0NFQkYxRkI5REFCCis6MTBERDgwMDBCQjkzNzAyNUMwNkYxOEE3MUJDNDIzMjVENDdBNTdEMTI1Cis6MTBERDkwMDA3QzZGMzc3NzE0NjI1RUNCRUQ5N0Q0OTA3MUM2MjczM0QyCis6MTBEREEwMDA0QTA4Q0UzRjk3RjgyNkUxMjRGNkVCN0FFOUJBRjNGQzZECis6MTBEREIwMDA1QkUwMjk5M0Y3NzcyMEVGNzRBMDFDQkExODg5RkE1RTBDCis6MTBEREMwMDA4NTM4REY2RjZBNEM3OTE3RDdFNzM5QTBCMjgxMEVDMjY4Cis6MTBEREQwMDA1RjBERERDNTY2RjBGRDkxNjVGNjFFNTMzOUVFRDNDRUJECis6MTBEREUwMDAzRDI3NTJFNjU5Njk1RjUyRTY0MzdCNjNDNjQwOERGRjhCCis6MTBEREYwMDAzMTdCQzhCN0ZGRkQ3MDJDQjVCN0UzNTA3N0IyQ0Q2MzY4Cis6MTBERTAwMDAzMEZFNjQ5QTY1RUYxRjcxNDkzM0VDOUY4REMxRjg5MzIyCis6MTBERTEwMDA1OUYxQ0E3RTJDNjczQjEyQzc2MkRDODk4QzhGOUY5QkFECis6MTBERTIwMDA1RUIyMUY0OUU5NTY2NzA1RTk2OTI1Qzg1QzgyRTQ0MThECis6MTBERTMwMDA5OTI1MDIwRjA1M0JFQjYzRUMzMTlBRkE0REYxRkQzNDY1Cis6MTBERTQwMDBFREM3M0I5MjM1RUY2RjQ5Q0ZENEJDOTdFM0RFRUEyQ0E4Cis6MTBERTUwMDBEMEI0Q0I4REVFNDg0MkZCMENENjQxRjRDMEI2QTkxNDI5Cis6MTBERTYwMDBBNzk3QkRGQkYwQ0Q5OTUwOUZCMDdEOEExM0Q1OTI5REE5Cis6MTBERTcwMDBFMkZEODQ1RDY1NUVEQzhGNzY4MEE3MDkxNEE4NTNDNTNBCis6MTBERTgwMDAwRkZDRTY2MUVDNENBN0ZGNTdFRTc5NkFCRkNCNzEwRDMyCis6MTBERTkwMDBGQTdGMzc3QUJGRTRCMzRCOUIyRDQ1Qzg2N0FGRDYwRUU4Cis6MTBERUEwMDBEMEVGNEY3RTg2RDYyRUU4MEU2RjNBRTk0MjcxNzBCQ0Y1Cis6MTBERUIwMDAzOUE4QjI2RDIxRjAwNjIzNTIzOTFFRjI3MkMyMjE5RTlBCis6MTBERUMwMDAzRjc2QURGQ0VDMEJFNDY3MzEwMUZBRTgyQzc1N0VCOUM2Cis6MTBERUQwMDA1QzkzRjNEREU1RThBN0ZGQjNDQTI4MUY0RkU0RjUyREY3Cis6MTBERUUwMDBDMERGRDUwMEJFQjM3OTlCRUZFRjEzNEJDRjNEQThFNzYyCis6MTBERUYwMDA2MjdFQTkwQkZBNUY5MjIxRjRBN0NBQkRGN0Y3MjkwQzNECis6MTBERjAwMDBCQzY3MkIzRUQzQjQ2N0Y3MkE2QjM0RjVENTg5REFGQUIwCis6MTBERjEwMDA4MzI1NkI4MkJGRUY4RTJGMkVEODM0REJFNEE2RkM0RjE3Cis6MTBERjIwMDBDNUU1MERDMTFGRTQ3Q0M2QkMxMTRFNzE3REI3NjFCQzU3Cis6MTBERjMwMDAwQTNDQUEyRTdDQ0Y4OEU3QjBCNzc1MjM0NzI1RkZCOUU2Cis6MTBERjQwMDA1MzY1QjVBMURFREY5M0MxRkRGQ0I3QkUxMTRFNzEzMDQ0Cis6MTBERjUwMDBEN0RBRUY0NzAwNEI4QTMzN0M4OUNCRDE4RjdBRkE4Q0EyCis6MTBERjYwMDBDMUZCRUUxMUZEOUYyRERBRjhGMzZGRjA3Q0Y0NjU0NkVFCis6MTBERjcwMDA3MTlGNjdBMzM4RkZDRjY5M0M2OTMwQTAxQ0VDQzFGMUU5Cis6MTBERjgwMDAyNUM3RUUzN0EwNUM2OTVGMTRFMUMxQjhGRTlBQzUzNkJCCis6MTBERjkwMDA4QTA3Q0Q0REVBRjhDMDAyNUJCRkVFOTkwMzhGNTgwMEE3Cis6MTBERkEwMDBERjNFQzYyNEM4MjBCOURBOEU0NjExRDQzNzY2MUMyMDVECis6MTBERkIwMDBCOTdBQ0IxQkUxMkQ4NkVCNThDRjQ2M0M5NzQwMzk1OEI4Cis6MTBERkMwMDBDQUU5N0MyNkUyOEQ5MDJGRTg2M0FGQjk5Rjc1Q0ExQjIyCis6MTBERkQwMDBFNDBCQjg3RUFDMUY3OEU2NEY4NzFGODE3OUQ3MUNFNDJECis6MTBERkUwMDA3NDhFMTE3NjdBRkI3RTVBOTA3RENGMUVFNzc0Njk4MTFDCis6MTBERkYwMDAxRjFFQTdBNEEzRUY3RDFCNENENkNCRDI3OTAzQzVERDkyCis6MTBFMDAwMDA1QzJEN0RFRjQwN0E4RUI4MkMzRDFGQkEwNUY2QTdFNjUxCis6MTBFMDEwMDA2NTdFOUZDNUI5RTY4MTk0MTdEQjlEM0NBRkQ5QTQxMkZDCis6MTBFMDIwMDAxRENBN0E1QkIzM0EwRUYxNTY5RjdGMkVFMUNBNUM0RTUxCis6MTBFMDMwMDBBMjRGNzk2RkQ0QjIxMUZGOUM4ODcyNzNEOTFFMjMwRjNGCis6MTBFMDQwMDAxMkU5NkU5Qzc1MkE3MzA0OERCM0YzMzVGMzIyQ0E3M0ZCCis6MTBFMDUwMDAxM0YzNkY5N0YyN0FDRjNGQTI0QkIyNzhCOTJBODREQ0UwCis6MTBFMDYwMDAwMzM5MUQxNjhCNzJCQTQyMjFCQkYyQzg5RURFQTUwODg5Cis6MTBFMDcwMDBBNzIzMEE2QjcxNTBERTE2OEY1MzlFQzRCQkMzRTc1NkFECis6MTBFMDgwMDBCQUFGMjQzRTlERTI5M0E1N0QyOUVEQ0EyOTdCQTYwQzVCCis6MTBFMDkwMDA0NEJERjI4M0M2Mzk0NzYwRTdEOEE3MTlDOTg0RTc3NzNBCis6MTBFMEEwMDAzMDBGRTlDMTQ3QTJDQTA3QTA1RjYyODI4ODBGMzgxMjA5Cis6MTBFMEIwMDBENUQxOEE3Q0Y5Qzg4ODA4MDVDRkZCQTFGRkQ1RDhCRjg4Cis6MTBFMEMwMDA1Q0Q3OTFCMEYyMDFGQ0RFMDkxOTk3M0NFOEJBRUU4OTAxCis6MTBFMEQwMDAxQkEzREU1QjcyMEI5RTZGNEY2Nzc2QjQyQjZGNTdCOTM1Cis6MTBFMEUwMDA5RUNCNUVFN0Y0MjlGOTVFOERFMjhCQzY3OUJFOUQzMTQ5Cis6MTBFMEYwMDBGMUFCMEMzQzJGNUVGOTBCRTE1NzE1NzAzM0YyMzhDNENECis6MTBFMTAwMDBBQkQ1NzMzQkVERDlBNzE1N0UxRjhBOTNFQkZGRDVDMzIzCis6MTBFMTEwMDBDRkZDRkEwRUNDOTMwM0JCNUI4MUY5Q0M2OURBNEJGN0U5Cis6MTBFMTIwMDBGRUU4RURFQzRFN0JFN0ZGRDE5RkRBRDU1RTJBOEYxODMzCis6MTBFMTMwMDA1NDE0RjA5M0VCRURBNjRFM0Q1REVBN0JEQjc4OUNGQzNFCis6MTBFMTQwMDA5QjIzN0VEQkI2MTRFQTJCQjY0NTEwMUM0RjNGNjlGNkM1Cis6MTBFMTUwMDAyMDFGM0ZCREM1NENGNkNGRTlFODhFNjNDQkIxQkUyQjg3Cis6MTBFMTYwMDBEQkU5QTFEMTlDOUE3QkQxMTYxQTFDMUZBMkZDNjE2RjFFCis6MTBFMTcwMDA4N0QxN0QxRTI3OUYzMEI3RTBGOUVFRTJBNzMyQjZBMDI3Cis6MTBFMTgwMDAzRDc1NzI4MEUzRDkxREU4MEY3QzM2OEVFRTE5NjA2RTA2Cis6MTBFMTkwMDBGRUZENkQ4MjFFOTFCRTFDQTA3QUE4QkZCMzkxMUVCMTc4Cis6MTBFMUEwMDBGODg1M0VDNEM3RTRGRTlEN0EyMjlDRjJFODRGMUY5ODkyCis6MTBFMUIwMDBENDEzRkQ2NUFEODZFNzI5OEY4N0E5NTYwRkYyRTNBNTM1Cis6MTBFMUMwMDA1QkMyNDkwRjVDNjk3NzY3RTNGQUNCN0U3N0RCMUQwNTlECis6MTBFMUQwMDAzOEZFRkI3MTBDRDdEM0RFRkMwMkY5MkIwM0ZCMUI1QTc0Cis6MTBFMUUwMDBCRTlGNkI0RUU2N0NBMDUzREVGMkI4REI1OTE4Nzc5QkRFCis6MTBFMUYwMDA0QzcxQjcwNTgzRTIzMDVFNTVERUJCQzhFMzZFRjM1NTY0Cis6MTBFMjAwMDBDNTQ1NzkwNzBGODVDRTIzMUYzRDQ4OUNBQjRBRkY0OTgyCis6MTBFMjEwMDAwQ0IzQzQyMzFEQkExOUFEQjdGREExQjQyRDY4RUY0Q0UyCis6MTBFMjIwMDAxRjI0RjI5RjU5ODdDODk3OTRGODc2QUNGQTU1RjI5RjRECis6MTBFMjMwMDA5ODc5QkM1Rjc4RTg3M0VDRjI0MTNDQUY3ODgxRTU2QjhDCis6MTBFMjQwMDA4REZGQTY3QUU1QjcxQUJGNEE3NTE2MjNCOTlCNUZFRjEzCis6MTBFMjUwMDAyOEI4MUJDQUU1MDJDRTU1NDlFNTkzMTA3RTRCMUEzNjA1Cis6MTBFMjYwMDBCRUY4MEVDMUU1RjExRjdGOENFMzFFQjA5MkRGODZCREM0Cis6MTBFMjcwMDBDM0UxQTdCNzY3MTY1OEJFMTJGNEI0NTlBMzA3OUY3ODM1Cis6MTBFMjgwMDBGNDQzOEEzNzM5QjEzQjMzMDdGNzZEOEVFQTNCODFGN0E4Cis6MTBFMjkwMDA3MUI1RDk3QzlGRkMwQ0NBNUQwNzBFRDFCRUU4RTdEQkU3Cis6MTBFMkEwMDBFNURDNUVFMTdDQTUxMkQ3MTE4M0YxMkVFNThCMDdEMTY5Cis6MTBFMkIwMDBCOTMwQTdGN0UzRUJCMzA5N0VEMjlGREI3RTNBQjRCRDVBCis6MTBFMkMwMDAyNUU3MjlGQjk3RjM5M0ZEQ0I3NkZGMjVGNkVCQUNDOTQ5Cis6MTBFMkQwMDA5NzgzRjJCOTdGQkE0MzkzODc3RDM2RDI5NzEzNjVDNThBCis6MTBFMkUwMDBFN0ZDMUNFQTZDMzRENDgzRjBFNkZCM0FERkI5NEJGODY4Cis6MTBFMkYwMDA3OThFMUE1NkRENjMwMkZDNkI2RDc4MzhDQzFEQ0M0N0U1Cis6MTBFMzAwMDBBRkYxNUM0N0NFNTdDNjk1Q0EzQ0RBNEQ4Mzg0M0Y3QjVDCis6MTBFMzEwMDAwMDFCRDA0REZFRURFMzg4Mjc5NTVERjM2RkU5Nzk3NzFCCis6MTBFMzIwMDBGOUI3OURGOUI2RkZFMEY5QjYzMkJGQjZCMENDNTAxQkQ1Cis6MTBFMzMwMDA5QzY3MkJGOTYxNjEyNjNDQ0ZDMjczN0ZBRDdDMkZDQ0VCCis6MTBFMzQwMDBENUI2RUY4RTNGMEVDRUU0N0U5NUMyOThEMEY5QUU3RjYzCis6MTBFMzUwMDAxRUM0REZEN0IzMTY3RUZGQTA5MDhCQzMwNERDRTVCRERGCis6MTBFMzYwMDA1RjUyNEZBOTE2N0M1QkU2NzkwRTZCRTY3MTlCQzM0NDQ2Cis6MTBFMzcwMDBERTBFNzAwMUNBNzNFRDcyQkY1QjdDMjZDOTU1NzkzRjEyCis6MTBFMzgwMDA5RjAyN0Q0RDhGMEU5NTJGRUNBMzc5OEM2NDFENTRCQTlFCis6MTBFMzkwMDA5OEREODgyNTgwOUZDQUQxQUM5Q0NBQjFBQzk2Q0E3MTYxCis6MTBFM0EwMDA2QzAzOTUzN0IzMDYyQTZGNjUzRTJBRDlBMDE2MTFFRjg0Cis6MTBFM0IwMDA3OTJGQ0YzMzFEQkZEMDgwRjJCNUYwOEVEMDdBNzFGQkFDCis6MTBFM0MwMDAxNUUxRTBBMUZCMDNBRjE1MEU2MzE5QkZFN0FGMEIzQ0VFCis6MTBFM0QwMDBGQUE3MTM3RUVCRTFBMUNGRDcxQ0MxRkM3NDcxQzkyODQ5Cis6MTBFM0UwMDA0NERDNjRCNDgzMUQxNERGNUFDNjVDNTQxRjczOTU3MEZCCis6MTBFM0YwMDAyOEY2QkI4RDNDQkY1NzA3OEZCMkQwNzg3MTQxQzA2MzAwCis6MTBFNDAwMDAxNUNBQ0VBMkMwM0U2NTY3M0FFOEI5REMyRjMwQzRFMjM3Cis6MTBFNDEwMDA5MUZGRUJGNzUxM0UyRjhDMjgzREVGQjBFMzdEMzBBQjAxCis6MTBFNDIwMDBBNjUwMUU3NzQxRTlGMjY0QThBNzY2RkU2QTBBRTU3OTVDCis6MTBFNDMwMDAwRjJCN0QwMUYzQkNEMzlGN0Q5OEJGQ0YyRDJEMDg3MzhCCis6MTBFNDQwMDBDMkI4QUIxRTk5ODJGOThDNkUxMTM3RUQxNkYxRDJDQ0ExCis6MTBFNDUwMDA5REE3QjkxRkNCQkRFQTFFQkE2RkNDM0RDMEVBQzQ3NUZCCis6MTBFNDYwMDBDQUJDNzAzNTk5OUZBRkVFQjFCQjdCNjZDMjdDMTNDNjQ4Cis6MTBFNDcwMDBGOUQ2NzA0ODk3RjY5RTBBNzREQ0VBMEI2MzE4RUZCRjcyCis6MTBFNDgwMDBENkM0REJDQkZCNkNFNEZBRTQzRDM3QkI3NjY1MkU1Nzk0Cis6MTBFNDkwMDA5MkFFM0MwRjE4NjcwMDhFRTM1RTM1OTBGMkUzRENCQjcyCis6MTBFNEEwMDAxNUU3RTVDNjBCNEY3MjI3NjVBMkRFODU0OUYxNDAxN0Q3Cis6MTBFNEIwMDBGRDg0MUM2RUREOTU5OTg5RkI5NDlEMjlFMjdFNjIxMzkzCis6MTBFNEMwMDAwQjEwOEVEMzkyQ0FCM0IxN0Y5OTE3OUQyREY2QTVCQkMxCis6MTBFNEQwMDA3MjRBQTYyQjEzREJFQjlGQ0JCQ0VDOTE5OUVFM0MxQzU0Cis6MTBFNEUwMDBCRjI2RTIyMkU1OUJCNUU1QkRCRkM2OUZEODM1NEZCRDJGCis6MTBFNEYwMDBERUM1QkMyNkUyMkJEQUZDRjRGNkY5MjZCQUNGQTlCMEM5Cis6MTBFNTAwMDBEQzVEOEYyMUNBMzc0RUVGMTg4Q0ZBMzFGNDNCMUNDNzAzCis6MTBFNTEwMDBBRDMxRjkxM0YyNTQ4QzQyRTZGOUVGRkE3Q0VGM0RBRkRFCis6MTBFNTIwMDAxREQ0RTRCNzRCM0FFQkNDNkYzRkM3RjNEQjAzRjRGNUY0Cis6MTBFNTMwMDBFODcyMTY5NERGMkVFOTQ2RDJERDUwQ0M2RjhGQzQ3QTk0Cis6MTBFNTQwMDBDNjdDNkMzN0UyRkQ2Mzk0REYzRUVBOTg1RkU0Qjc3RkY4Cis6MTBFNTUwMDBBOENENkY3N0ZERjNCQUYyREI0RjhBRkJERTRFNUFGODk3Cis6MTBFNTYwMDA3RDQ5RjIzRUE5NjVCQkY5RjlFRjMyODVERjI3QjVFQ0FECis6MTBFNTcwMDAzOTdFOUY5NEI0MEIxNzg5RjU1NTFERENCNjA2Q0ZGOThCCis6MTBFNTgwMDAxNjNEM0U5N0VFQTM2MkUyMUU1NDA3RkMwNERCODVGMkMzCis6MTBFNTkwMDA1RTUyN0QxRTRDMEREQTgzQTQzN0I3OTBERUE1Q0Y4NzdGCis6MTBFNUEwMDBBOTc5QkM4Q0VDQzExQTlEMUU1RDlEMjlFQzQxMjFDRjNGCis6MTBFNUIwMDA5OEQwRkYxNjhBNkY3MTFENTZCMkNGNENBNDc3MkU3QjcwCis6MTBFNUMwMDA2MkI5RDM4RTc1NDE1NzZDQzcwRTNBNzc5M0VERDlFMzk0Cis6MTBFNUQwMDAzMTg0MEI5MkNFMTZBRjUzNDg3Rjk1RjBDQkRENkU3NjJCCis6MTBFNUUwMDBEMTNEQzZEQjdCOTNERTBBRkFCNkM4NjNGNjcyN0IxQkFECis6MTBFNUYwMDA3MDA1RTNFMTc3NDY3NTI0QTE5RUJDNzM0RkJBMTMzOENBCis6MTBFNjAwMDAyQzdCQTVEQkZCQTc3N0U4RUU5RjdFNEE3M0ZGRjQzOUVFCis6MTBFNjEwMDBGQzBGRjVCNDUzMDYyRkY2MzM5OEE1RkYxMkVGMjUyRTA1Cis6MTBFNjIwMDAzQTY1NzQ3QTFEODFGQjk4QUY3NEVGQjA4NEJGNTlFQ0UyCis6MTBFNjMwMDBEN0I1REU0M0FDQkZFRjU5RTYzRkU4RUYyMzVFMkJFRUU0Cis6MTBFNjQwMDAyMzFFRDFDRDdEQzQ2NkI1NTkyNUZERTE2QkEzRTY1RUUxCis6MTBFNjUwMDBFMjFCQzUzQThCMURDQzhCRjdGQzBFNkQzNTZBRjZCRkZECis6MTBFNjYwMDBEOEJGODFBMTNFMTQ3RUQ4QThGMTIzOTgxRERBN0E4MzAxCis6MTBFNjcwMDBDNDA3NzFCRjQ4NTc3ODVCM0JFMTY5MjY3OEE2RDAzRDU3Cis6MTBFNjgwMDBDRjQ1QkE3QjlFMjU5QzNBRUY3OUVFNkYyNUJDMUY3QTY5Cis6MTBFNjkwMDBGMDA1MTVGOUMxQjVERUY3RkQ0M0RGRUY3REE1RkJCQzQ1Cis6MTBFNkEwMDBGNUY3NzRFQkVGRTVFRUVFOUU2RkI5RUY3OTJEQ0IzNDE1Cis6MTBFNkIwMDBFREY1RkI1RTcwRTBBN0RBN0JBOEM1N0U3QkUwRTdCQkVCCis6MTBFNkMwMDBEQ0VGQjY0Q0UxREYxNUZCRkQzNTVFODAwNjc0Rjg5Nzk0Cis6MTBFNkQwMDBDODUzMEYyMjU5NEU4OEUwN0NBREQzQUUxRjFFNDY3NjNDCis6MTBFNkUwMDBENkJCOEU5ODMyMUJEMkJGOTA1M0U1NDI0RTgxMTVDN0UwCis6MTBFNkYwMDBFQjAyNUY5QzNFMUU0NzkwN0Y5NERGNUY1MUU4RTdGMTlECis6MTBFNzAwMDAwNDgzNEY4NUNFMEZCQUJENThEMTlDRUY3NkJEQjc5ODI0Cis6MTBFNzEwMDBFNzE5MEZCQkM4RTNGNEY0RTdGRTMyNkZBOEMyMTVBRUU5Cis6MTBFNzIwMDBCREJGQTE5QjNDMjJFOUM3MDEzRDlFOTk1MDhGMzdGMEE4Cis6MTBFNzMwMDBGQkVDNDJEQzczQkM0OTREMEVDRTIzNzI5MzdGNjdCMjczCis6MTBFNzQwMDBDNTk3ODBGODZDNEI3NEM3NjcxNTA1RjI4RDQ2NjE1RUZFCis6MTBFNzUwMDA5MTQyRjZBMDEwNEE1MTNGQzIzOENGNzY0Q0IyRUQ4QkIxCis6MTBFNzYwMDBGOUEzOTEzRkMyM0MxOTk4QkVERDNGOTg5QkJCRjg2RjVGCis6MTBFNzcwMDA2MDk2M0IzMTBCRTRDOTcxQzVCRUE2MDBCRUZEQ0JEMDhGCis6MTBFNzgwMDAzMzA5Mjg5RkNDNzhBRTlENEZFN0JFQzlGODVFN0YzRjI2Cis6MTBFNzkwMDBCRkRGRTAyMEZEQzJGMzUzODVFQzg3MzNEOEQ5OTAyMDRBCis6MTBFN0EwMDA3QTVEMTcyNkYyMUE3NTdGQkY0MEQ4NTNGMkVGMTcxQzE3Cis6MTBFN0IwMDA4NzJFMTYwMURGOUVEMUM0RjNBODk3QzZCNzBBM0I4Q0ZCCis6MTBFN0MwMDBERkRGM0FCN0JGOTVFRTdGNjJBRTAyMjdCN0MzQTU3RDA0Cis6MTBFN0QwMDBENTRGQkQxNkI5NzlBNUY4QTJBNUYxQTczNTc2MkVEQkUwCis6MTBFN0UwMDAxMTczNTVFNzg5ODE3NUYzRkU4RjNGMTA0MUYyRTZGODBBCis6MTBFN0YwMDAwMzAzQzhDRjE3RThCRjhERUNGRTE5QjVEQTM4RTM1OTJCCis6MTBFODAwMDAyQjNGRDJFMERGNkNDRjY3OUFGN0ZFRDg4RUIwN0VCMDk4Cis6MTBFODEwMDA3RUZGOEI3REM2NEUwM0Y4OURERDZEMUU4Qzc0MDZGQjVFCis6MTBFODIwMDAzNjM1MkJDODBFRjYzRjk0MzY5QUVCMDE1NzVBRTcxOTQ2Cis6MTBFODMwMDA5QUM3MzExMTI3MkFEN0Y5NDlERDUxQUFGQkVCRkNCQTU3Cis6MTBFODQwMDA3ODFFOEZDNjJFOTVBNUU5MEQ0NkY3RTQ3NDI4M0Q5Q0U5Cis6MTBFODUwMDBBMUZDMkM5RjY2NzFCREZEOThDODgzM0MyNkYyMjA4RkQ5Cis6MTBFODYwMDA4OUJDQzU2MzIyNEZGMTk4Qzg1Mzk0RjlBM0M3MTRFNjM1Cis6MTBFODcwMDBDMjc4OEFFOTRBRjk5M0IzMTVDQTFGQkQwN0YxQUY2NjlBCis6MTBFODgwMDA0OTQ3MEVFNkRCRDVFNEZBNjcyQTJBRTU4RkFFQzRGNUUwCis6MTBFODkwMDA4N0M4MUZDREMxQkNGNzVENTk3N0ZFMDhGNUY4NTMzRDE5Cis6MTBFOEEwMDAzQzc0MkZDOUVGNzc0Q0U2NzUxM0E3OEY1N0IyNDYxMTBBCis6MTBFOEIwMDAzRDc4RkJCQUVGQzM3RUJFNTBENDE2QzJFNzk3MTUzQTM3Cis6MTBFOEMwMDA0RjY1MkVCRjY5RTI2NUYyNEIxRkM4RTJFNzBCRUI3NTlGCis6MTBFOEQwMDBFNUQ2MkNDRUNGNUUxMUU1MThGNUMxNTRDQUZCRDk2NDNDCis6MTBFOEUwMDBBNkJDMUYxOEM3NjUwODNBRkZEN0U3NjdFNUJGNkU2RTdECis6MTBFOEYwMDA0MUJFMjFGRDMwNEY2NDI1RjI3M0NGNjRFRTVGODlGRDg4Cis6MTBFOTAwMDBBNTk5RTc2REY5N0QwOTk4RTc4NUYxM0U3ODZGMDYzQjlCCis6MTBFOTEwMDBDQzVDM0MwRjhDREZERjI3RjdFMTA5QjEwRjc0OTE3RUVGCis6MTBFOTIwMDA2MTIwNEZBQ0VBRTBGMTRGOTA4RjhDQ0Q3MjZGQzZGNTRECis6MTBFOTMwMDBDQkZDQTVBQUM4QkQxNDM3RjE0Mjk2ODNCRTgzRjlEMjk5Cis6MTBFOTQwMDBGQTgxMUZBQzU2MDhDRTVERkM3MENGRTBGRUU4RjNERjI1Cis6MTBFOTUwMDBCQjVCRkZEOUY5QkVERjY0MjUwNkYyQTc4MkYyQTY1RTkzCis6MTBFOTYwMDBDMDc5Qzg3NUNCNzkwNEZBQjkzQzVFNEI3RjUyQzBERkUxCis6MTBFOTcwMDBCNTM2MTVFOTQ0REU0RjlCQUYyQUIzMjY4NkY4RkUwMzcxCis6MTBFOTgwMDBCMTZGNTU0OUU1N0I3MTFENEI2QUI5QkZBREQzMUU1N0I5Cis6MTBFOTkwMDAzNkZDRjg2M0RDQUY4MzU2RTI3M0REN0RBRjVGNjdENThECis6MTBFOUEwMDA2QjA3MDkxRUIwQ0U5OUI4QkVBMDc1QkU5QjE1RTQxN0MzCis6MTBFOUIwMDAzQ0JCRTdDM0RGMjBBOEFGNzc3REQ3OUFDNzZDRUVDMTE5Cis6MTBFOUMwMDBFRjQzRUNFQThGODYwRDBERDJBM0NDRjJGQkZFREE3QjhGCis6MTBFOUQwMDBDNkNDRjhGNzEwNjBCQzQ2NjE3RjM0MEFGQkEzMjk0QzEzCis6MTBFOUUwMDBGQ0JEMUE5RDNEREFFOEUzRjEzQzhERjEyNjhBRDc2MTQyCis6MTBFOUYwMDBFMkVGMkI0OEY5QkJFMjNEMUVERkIzMjI5MUQxN0I5Q0I1Cis6MTBFQTAwMDAxRkQyODFFMkRGNEZGMkEwRjNCRTI4MDVFNDFDRTBDMzcxCis6MTBFQTEwMDAxOUJCRkIwMkMyOEZCOTk3OTM3QzUwNkZCMDNBMTE5RjFDCis6MTBFQTIwMDA3N0JEN0RCM0IwQUJCOEJDMjkxMkYyQTUwOEZCQzE3NUE4Cis6MTBFQTMwMDA2NEY1MjRCOTUzMjhDNjFENkNBOTI1QkQ3NjA4RjMwOEQyCis6MTBFQTQwMDAzRjhCRjA0NzNDQjA1RjYzOEZGRDVGMERGNjJEMzkxMEIzCis6MTBFQTUwMDA2ODAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDlDCis6MTBFQTYwMDAwMDBCRkI1MUNGQzBGMDAzOEFENzk4MzMzMDM4NUEzMUFFCis6MTBFQTcwMDAzMEU0NTkzMzMwNUMwN0UyMzA3Mzg0REM0QjcxMDQ5QjIzCis6MTBFQTgwMDA5QUY4QTczQzY1RkEzNzQ4MzIzMDZDMDJFMjJENDBCQzU4Cis6MTBFQTkwMDA0RDkyNzRGREI3QjQxMEVDQkRBQTBDMENCNzgxRkM2RTlFCis6MTBFQUEwMDAyMEZENUQ5RDgxNjExNzkwN0QwNzg4MkY4M0Y4NDBDQzA0Cis6MTBFQUIwMDBBQ0M2QzAyMDBFRTRBQjAwNjkzRjIwRDYwN0UyQkI0MEU1Cis6MTBFQUMwMDA3RTlBMUE2RUYzRUY2OUUxQjc3RjlCMDYyQUZGMUQxQTQzCis6MTBFQUQwMDBGRjkyM0E3RUZEOTk5QUY4RTVERjExOTBDNzg2MUZEQjE5Cis6MTBFQUUwMDA5MTFGMUZFQUY2QjQ0OTI3QjRDMjA3RDBEMkY1NEUxM0RFCis6MTBFQUYwMDAwNjg2MEJBNjBDMEMyMkQwQjRCRjE3NDk1RTBEMjhCNkIzCis6MTBFQjAwMDBDQjA0QzI5RUFCMDc0QzdCNjY0MDNFOEU3QzMxMEYyODA3Cis6MTBFQjEwMDBCRjExMjg2RjY0OEVERjdFMDU2NjU0QkUwMDJGQTY5QTUzCis6MTBFQjIwMDA2RjRDMDhGNjA0MjE1NEI5QzNDMjk4RUFCOTQ0MTkxOEM1Cis6MTBFQjMwMDAwMDY1ODM4NDg2RDgwMzAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBFQjQwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkU1N0QwRDc4NTRENUY4Cis6MTBFQjUwMDBCNUY2M0U3M0NFOUM5OTY0NEUyNjkzMTBDMjQwMDI0RTg5Cis6MTBFQjYwMDA3RUQwQTgwOThFMTAzMDI2MTM3MjI2M0YyNDI0MDFDM0JDCis6MTBFQjcwMDA0RjY5NUE2OTlEQTA0NURBODIyMkRBNUU2RjJGNUYxOUNDCis6MTBFQjgwMDA3RTFBMjI0NUM1MTZBRERBREVERTgxMkE0RkRCRUI3MzM1Cis6MTBFQjkwMDA5RjYwQTlFNTg2NDQyNjEwMTAwRDNGMTFBRERFN0VCNkJDCis6MTBFQkEwMDBERjhEREE4QkExMEQzOEMxNjBFOUY3NjBGOUY2NUE3Qjg5Cis6MTBFQkIwMDBFRkNDOUM5Mzk5MDRENEVGREVFRjA3MUY5RjkzNzNDRUE1Cis6MTBFQkMwMDAzRTdCQUZCREY2NUE2QkJGNkJFREI1Rjc1OEM5NDRFMjVCCis6MTBFQkQwMDBBQTIwRTQwQUZDQTM1N0RGNjQ0MkU4QTM5MUFCNzg1RTY1Cis6MTBFQkUwMDA2OTI3NDFDNzJEODRBNEQ5RjdGNkNFQzgyMDY0OUUyNjk0Cis6MTBFQkYwMDA3QjZCM0Q4NDRDQjJCN0Y0OTA2MjQyQ0E4OUNENjNDQjQzCis6MTBFQzAwMDAyMUE0NUJGQTRERUYwQzdBN0YzNEM1RUFCNTExRjhGNzExCis6MTBFQzEwMDAwMDIxNzMwODU5NjdBNzdGRDJGMjQ3MkZEMjJCRkRGRTQwCis6MTBFQzIwMDBFODVGMkQyMTIyMTE1MjIzMzcxMjA5QkVCNzRCQkNCQzFECis6MTBFQzMwMDBBRTJEQzgyNEE0OUFCMDdGNzMyRjkyNkE1QThDNTRCQjBECis6MTBFQzQwMDBFRjZEMjQzMzA4QTk3MkQxNTI3NkY2RUUwQTJCNEYwOEU1Cis6MTBFQzUwMDAyRDVGNDY1OEZEQkFEREY4QkU4QzZDMUY5MjlENzAxNzczCis6MTBFQzYwMDA5MTlCOEE2ODdEOTc1NUUzN0I3N0VEMDdDNDA5RTU2MjQwCis6MTBFQzcwMDA5RTQzM0ZFMDBGQ0E4M0VCNDk0QUM2MTkwN0ZERkIzNkE2Cis6MTBFQzgwMDA3MkRCMTU5OTVFOTUwOTg0REMxRUU1OEJGOTRBNDgxMDA0Cis6MTBFQzkwMDBGOUQ2QzFCRjU3NDhEMzBDQjgyN0U0NDU2QzNGNURGMEE3Cis6MTBFQ0EwMDBCMUFFOUZCODY5QkYzMzRBODhCNzk2NzY3MDUyOURERTgxCis6MTBFQ0IwMDAwRDdDMjlBQjU2M0QzNjdBREY1RDMzNjc3MkJGNDZDODlGCis6MTBFQ0MwMDAwRkNGQjU2NzkxNDJGQTc5NjgzNUYyMzE4M0YzQjFGQjIyCis6MTBFQ0QwMDBEQzRCRUZEQzQ3QkZGN0Q1MTFBRjhEREUxRkIwN0EyN0Q1Cis6MTBFQ0UwMDAzNzE1OEVBNkM3NTc5NzlFNDQ2ODNENEYzNDFENzI2MEY2Cis6MTBFQ0YwMDAzRDg0RkNFRDRBMjZBRjI3OEY5MENFQTZEQ0Q0NDA5QzA1Cis6MTBFRDAwMDBFRkM0RjVGMTBEMkU0MjZDRDFGQjFEM0FBOTZCRDc0NjJECis6MTBFRDEwMDA5NzdCMDkwNjczMzY1NEJGMUNFOTJDRTNCQ0ZDQTE0NDY1Cis6MTBFRDIwMDA5QURCQjFERDY2MUNBNzAzOUNGRTFFRkQ5MEEzQkYxMEZECis6MTBFRDMwMDBERTg3MUQxNkRBOEZFMDkwODUzQzRGQUJFODFDQUM0Q0FCCis6MTBFRDQwMDAwNjdBMzdFOTk2MzAzQ0VGMUM1NDQzQzAwRkUyNkVDRjkxCis6MTBFRDUwMDA1QTU0MzQ5QUZFMDM0MzJCNjY2MkJGMDJBQjBERURGRTlDCis6MTBFRDYwMDA2MDkwRjY1NzgzRkVCREU4OTg0N0VCQjkzMDY4NzFDOUVCCis6MTBFRDcwMDA3NDVDOUZFMENGMEYwNERBMUQyRUY4NkUyMDFEQzdGM0UwCis6MTBFRDgwMDBGMTBERjRFRjFCMTJGM0UzRjFCOURGQzgwRDY4NTBDRUJCCis6MTBFRDkwMDA2RUU0QzdFMDg1NjM3OTc0REMzQTc3MkE1RUU4RDc3ODU5Cis6MTBFREEwMDBGQ0ZDMDE2RjQ3RENBNzdCQzM1NTJFNUFBRjJGRTI5NUMxCis6MTBFREIwMDA0MDhGRDIwNzA5OTk5MDAzN0FEMTc5RDgwOUUzREI0OENCCis6MTBFREMwMDA1MDJGN0M0RDk1NDlEMzU5M0ZCQ0IyMDdERTFGOTc0MTY4Cis6MTBFREQwMDAzRTdDQUUzMEY2NjM4NDFFQTBFRjA2QTBEMzhERDdBNzhECis6MTBFREUwMDA3OTdCNEZDMTM4NjJGRjM2MjU1RDRGRTlCRDUwQTI2MDg3Cis6MTBFREYwMDAzREJCRjU0RDdFMDVFQkJCMUM5NjQxMUU1NzMzNzlDQUQyCis6MTBFRTAwMDBGMDA0MzY1QTgxRkZGNzEwNkZEMDAzRjUxMkVDRjc0RjdDCis6MTBFRTEwMDA3OUZGN0ZDMkVCMTNFRDc0MEVBNkZCMTVBMEFGOTk3OEI2Cis6MTBFRTIwMDA0MTRENkFFNEY1RERGMEJENkYxNUEzN0ZEQUMzNkIyNUI0Cis6MTBFRTMwMDBFMERGNzVFQkZCRjExQUUyNzRFRTgwRUY2OTgxRUNCNTZGCis6MTBFRTQwMDAxMTA5RjgzNkY1QTEzMDVFNzc2RUZDN0QzN0QwOTdCQUEwCis6MTBFRTUwMDA4NTI0ODEyRDc4QTJEQTkyMDZERjNEMzE2RjRBMTJCQ0ZCCis6MTBFRTYwMDA3NzM2NTFDNUE3RjZDMEU3NzUzREQwNDNGQkIzQjM1QTFCCis6MTBFRTcwMDA0MTNBNzcwRTUyRkVEMzcyQ0VBMENCMEI3QUVEMEM3QUNDCis6MTBFRTgwMDBGOEQ1RUI4NUYyMDczOTNGMEVGMDc2QkIzODFEQ0VBMEUyCis6MTBFRTkwMDBDRUNCQUQyRDg0NzJDRTYwMTBBRjIxREU0RkUyNTk4MzEwCis6MTBFRUEwMDA3MkI3OEVDQkRENDE2QkUwMjZFMDdCQzYyMDcxMTNBQUUyCis6MTBFRUIwMDBDRjA3Q0VENzRGODY3NjQ1RkRFNkYyN0I5RUZEOUZCMzBBCis6MTBFRUMwMDBFMEZEQzQ0MUYyQUU3NTA2NUNDMzJERDBERTBERDAwRjVGCis6MTBFRUQwMDAyN0RDRjdCNTQ4NjhBNzQyQTg0N0ZBNjUwQjIxMDU1MTFBCis6MTBFRUUwMDAzQjk1NzFBOTY5RkUxRDFFQjhBQjQxM0QxMjc2QTA2QzIxCis6MTBFRUYwMDA1MEI1NDhBOUIxN0E1NjhEN0FCMDkzRUI0MUY1NjAxOEI4Cis6MTBFRjAwMDBFNTg0RUFEOTYxMEJFNTUzRjAxQ0Q1MzMyQTVGMDc5QUYzCis6MTBFRjEwMDAyQzM4REVDRjQ1NTRCNEMzQTQyMDlDQjUyODY1QjQxRTVDCis6MTBFRjIwMDA3NTBFQUQ5QzA5RkMxNkZBMzREQTdFRkNCRkExNUYzQjdFCis6MTBFRjMwMDA2OTNGMDI3MUVDOUE2ODRGRTg5QkY5RkRCOEZBRTYwQTVFCis6MTBFRjQwMDBBMkJFNzU1MjdEMEIwMjNGOUIyQzQ5RjlBMDdGNkQxNjI2Cis6MTBFRjUwMDBENDEzNzc3NTdCMzdEMzk3RDVBODZGMTlGNzMwN0EyNkY2Cis6MTBFRjYwMDAyRDBGQTExRThDQTc3NzNCM0QyRUJGMDJGNTM3MzMzREY5Cis6MTBFRjcwMDBFRDFDN0M2RkEzMERDNjYzMzlFMTc2RTI3MjM3RENGQkQyCis6MTBFRjgwMDAxRTY2N0E2REQ2MzNCMzFFQTZGQUZBNTAzRjczQjY0NEE2Cis6MTBFRjkwMDAwODVDM0Q5QjFCNTFBRTY5MkI0OUE4N0YwOUY0QjAxMzU3Cis6MTBFRkEwMDBGNEIwRjhGRjFGM0RBQzgyNzk5Q0VBNUQ5QTc2NkI4RkQ2Cis6MTBFRkIwMDA4QkY2N0I3RTg0MzAzQ0E0M0REMTAzRjM3ODREQjY4RDM3Cis6MTBFRkMwMDBDREUzNTNERkJFRjM3RTdBN0ZDQ0VBNDBGRTFGOUI0ODQxCis6MTBFRkQwMDAxRjE2QzNCRDhDN0FENzlEQjMzNTdCMUQ3RDNGM0Y0MzQ0Cis6MTBFRkUwMDBDMkY3ODRBQzQyRkRBRTE1NzgwOTFFNTFGREYxRjc0QjE2Cis6MTBFRkYwMDA2NDRFM0E5NDdCN0Y0NzE1RkRGRUQ1MDFFMjg1NTdBRkZECis6MTBGMDAwMDA2NkNCNThERkUxNDFDMkY0OThFQjY3MkRFRkVGNjFGRTZDCis6MTBGMDEwMDBGRUMyMjUxMjAyRkRBQzAwNDg0MjlGN0Y3QzM2MzJDREY1Cis6MTBGMDIwMDA0RTVGN0Q2OEI5NUM0NDcyRTk3QzJDRjhDNTcxNDYwRDcxCis6MTBGMDMwMDBEN0ZGNTczMzY0MURFQ0M2RTFGNTI5MjE5MjgzRjU4NThFCis6MTBGMDQwMDA0MURFNUU3REQ4MTY5MjY5N0IxN0YyRjM1RTA4MTNDMDJECis6MTBGMDUwMDA3RjkxRUJEN0QxRjczREFFOEY1MjYyRjU3MzgwQ0JFRjQ2Cis6MTBGMDYwMDA5RkI4RkMwRTcyM0NCMUUzRTZBNjQ1MTJFNUVGQUJGOUEyCis6MTBGMDcwMDA3OUE4NUYxN0YyM0Y5QTQ2MjhBQkVGQ0ZGQkNCMTlCOEMwCis6MTBGMDgwMDAxMjEyQjYwMjVFMzJENzIzQkU3RkQ1MURGOEIyNDQ3MThDCis6MTBGMDkwMDBENTQwRTg3RDI3OENFN0I5N0QxRkNEODAyQjcxNEY0MDhGCis6MTBGMEEwMDBEQzM1MUUzRUYzMDkxQzE2RTlEQjBDMzg4NDU0NTMzOTU5Cis6MTBGMEIwMDA5OTEzOTU5MzQ5OTFCRUMzQzAzN0RGMzBDMzYzQTQ2RUUzCis6MTBGMEMwMDAwRDhFNEJCOThCRjFBNUZCRTI1QjU5RjA1RDA3RTc1QjU5Cis6MTBGMEQwMDBENzUwNUYxNkRBQzczQTYzM0Q1REQ2RkVFNTREQUM3RThDCis6MTBGMEUwMDBGQ0RFRTc2MkUzMkFFODc5OTlGN0VCNjk0OTIyMEMyNzBECis6MTBGMEYwMDBCMkYxRjNGMUVGRTcyQTdEMTM2RUExNzRDQzNEMjY3QkNDCis6MTBGMTAwMDAzN0QyNDc3MzA3RkFBQjQ5MUMzQkI0NUI0QTQzNzlBRDJFCis6MTBGMTEwMDBCODY0OTREN0FFOEI0NzY1RTAwQkE1NTcwNjdBQ0IyMzJFCis6MTBGMTIwMDA3RDMyQjNFMzRDQ0U3QzVDQ0VDQTIzQTcwREY2NURCNDMyCis6MTBGMTMwMDBERjE1MzlERDAwRUQ1RjE4NjBGNjJBMTE1Rjg1RkMxQ0Q0Cis6MTBGMTQwMDBFMkUzRkNCMkQwNTcxMjcyREM0MkU1RTUwOEE1N0ZEQkIyCis6MTBGMTUwMDAxOERGRDdCODY0MDNERDQyRkZBQUVDMEUwMzVFQUZCODM4Cis6MTBGMTYwMDA5NDZFQzJGRjQ2N0E0Qjk1MzBGMkFCMTRGOEU1NDlDQzY5Cis6MTBGMTcwMDBBRkY1NTIzQUQ2NUYzNkYwRTlGODY1QjYyQkEyREUyRTJGCis6MTBGMTgwMDBFMDYzRTE2OEJBMDgwOEI1QTA1QkZFM0Y5RkFGOURGMDYxCis6MTBGMTkwMDAwN0YzNUY4RTgyOUU5MkZFQkQ3MjUzMEFDQzI3MUFEQTY1Cis6MTBGMUEwMDA5M0IyNkE4OUUxNzJERUNGNDZGODk2MzY1NTI3RjRDQUUzCis6MTBGMUIwMDAyM0ExOUY1N0VGOTM0MkI1ODAzN0JDM0Y0MzNGRjE0MkI1Cis6MTBGMUMwMDBCMUNEMDM3NjY4OTJFNzA5QTUzRjQ2REVFQUY5RjcyMzU5Cis6MTBGMUQwMDA3Q0RDQTA2MzNGQkI2N0JGOUQwNUU1QkFBNjZGQ0M4NjBDCis6MTBGMUUwMDA3MTk4RUY3OURCQjE4RUYyRkYyOEQ3OUI4RTBENzU1OEExCis6MTBGMUYwMDBBRUVDMTI3OUY0NTYxODk3N0NBNjY3NzM3OTVGN0EzODZCCis6MTBGMjAwMDBERjBFNzFCQjcxOTBDRjlCNkY2RDA4RTBGNUNEMERBQjNDCis6MTBGMjEwMDBGMDdBN0FDMzVBQkNCRTdBRTk0NTBEQzZBRkI3MjAwRjYzCis6MTBGMjIwMDBFN0FGM0FBNTVEODlFNzU3OTUwRTFBRTVFNjY1MEZDNTg0Cis6MTBGMjMwMDAzQkI0N0NDM0UwOEFFREI3RDI3RTFGQkY2NDQxRkI3QzQ4Cis6MTBGMjQwMDBCQzIwNkY0Q0JDMjJFQzg3MjhGNzhBRkI2NzU1QzBCN0ZGCis6MTBGMjUwMDBDNjAxNEE2RUNFRThGMjY2NzkyRDIzNTIzQkUwQkYzMkZBCis6MTBGMjYwMDBFRkVCMEFBMUY2NzI0MUYxMkUyRDE2QzcxQzM4OTc1OTAzCis6MTBGMjcwMDAwNEY1MUU5MEZFQjA2NDk2MjczMTFENjVCRTNFRUNFNzk2Cis6MTBGMjgwMDA4MkYwRUYxNDRGNEFFMjcyMjc5NEJFQzY1OUU4QTczMkMzCis6MTBGMjkwMDBGRDJBRjNCRTVCQUREM0Y2NkEwQjc3MzVBMjVDMEMyQjZGCis6MTBGMkEwMDAxNjkwOEJDNkMyQkQ3QzdDNUQzODFFMEJDNDdDNTYyQzcwCis6MTBGMkIwMDBENzg1ODA5RUMxMEI0ODY3NkZBMTNDMTFFOERCNjY5MTQyCis6MTBGMkMwMDA1MTJFMTc3ODZDODg2NzEzQjYzRkFDOTAzMEU4OTcxMkQwCis6MTBGMkQwMDBDNjcxM0E0RUVCMDFCOTM4NDFFRDFFN0JERUM3RUU2OUNGCis6MTBGMkUwMDBCREYwQkUzQkM3QTY3OTgxOUY2RTExOEY1ODY1OTA4Rjg4Cis6MTBGMkYwMDBDNkZDNTlDN0JEOTRFRTVFQjc4Q0Y4QjJGNzUyQTU5MjIyCis6MTBGMzAwMDA0NkVGNEZDMEZDRUE4OUNBNjcxOTk3Q0YxMzMwRUUyMDQ5Cis6MTBGMzEwMDBDNzIxMTlFNzNGODE5NzQ1N0Q1RDk3NzIxRjJEQTZFREE3Cis6MTBGMzIwMDA5RDA4NTlFMzdFREY1NDZERDRDNzNCREMwRUMzN0Q3NTY5Cis6MTBGMzMwMDBGNjA0QzNGRDg5QzE5OTZGMzY0MTdCOTQ3RUMwNzMyNDY2Cis6MTBGMzQwMDBCOERBNDA3RjE3RDg3QjY4Q0YyNUUxRkM3RkY0NzJGNUVGCis6MTBGMzUwMDBFMEZENTAyRTY0QTRDQjRDNDdFRkE1REMyNzk3RDI3QTcyCis6MTBGMzYwMDA4RkVGOTM1MTRFQUJERDQ2QkFBQTJFQkU3OTFDRTIzODIwCis6MTBGMzcwMDAwREQ0QkUwMERGNUVENjE1MURGQTdENjI1RjRBNjgyMzlDCis6MTBGMzgwMDA5NUNCOTcwQjVGNzcwMDZFQTBGRkI0MDVCNDlEMkFDMkEyCis6MTBGMzkwMDBDNkI3MzJDMzU4Q0ZGMUMxRjdCRTBGNzZFQTgyNUQ0NkQ5Cis6MTBGM0EwMDAzQjU3RjlENzQzNUIwMDVFOUQyQTdFQjAwN0Y4N0M4MDBGCis6MTBGM0IwMDA0OEM4QTdGMjczQkI2NUE4NkY1OUM4RjhGREQyRTU0NkU3Cis6MTBGM0MwMDBGRUFDNTkzQUMxNjRGRjhERjFBNTJBMEY4QjEzQ0RGNTIwCis6MTBGM0QwMDAwRTYxN0RBNTEwRkZBMUY3OTU5QTMxMkUzNDE3OEM0MTRGCis6MTBGM0UwMDA0Q0JERTVBNkI4NTBBOTg3QzU4NTRBMjEyRTI0Q0FFNTlCCis6MTBGM0YwMDA5MDUxNzY5RkRFNjNGQkU2NzlEREFDREYwOUY1REY0MkY1Cis6MTBGNDAwMDA1NjQxM0M4NTQ0MTY4RjgzNUIzNkYxRjg4QUQxREUxMjczCis6MTBGNDEwMDA2NUE3MDRGMjUwQ0FEQkVGQjBCNjNCODAyRURGQURDQzVGCis6MTBGNDIwMDA3RTkxNDg3QURDNzg5NUQ5OEUxMEYyMjBDQTk1RTAyMzM3Cis6MTBGNDMwMDA3MTA1NDlDNjFDRTgzRjJGNjNCNjdGOUMyRjZENzQzODU5Cis6MTBGNDQwMDBBRUUwM0MxMEU0RjhDNTEzNTdERkNEREY2NzczN0Q5RjU2Cis6MTBGNDUwMDAzNzQwRUQ2NjA2OEM5N0VDMDJCQjcxRkMxMkQxNDAxRjYxCis6MTBGNDYwMDA0RjUxNzk2NzJERjc1Rjg5OTVEQjg2ODE3Njk0NEI1QUVBCis6MTBGNDcwMDAxRTQ2OTA5NkY3QTJGRTM2NEQ2NkZBREI5RDUzQUJBNDZFCis6MTBGNDgwMDAzMUZCMTk1N0RGQ0Q3QTMwNDA4MjRGMTVEMzcxM0Q5RTQ1Cis6MTBGNDkwMDA5RkY3RTQ1MkZBNURFRjNFNjEwNzJDM0FFQUQ1M0U4NkNCCis6MTBGNEEwMDA3QjRGMENBRTQzNzlCRDQwRTUxNUQ4M0U1QUVGNEY2QjBDCis6MTBGNEIwMDBCMUYzRkU3Rjk2QkU5QkY1N0M0NEZGNDdFOTNCQjM1QjBGCis6MTBGNEMwMDBDNzg3MkREODlGQUE4QjBBRDZEMzcwOTlFMDNDNkVENkY5Cis6MTBGNEQwMDBGRjEzREM3RjdCNTk3RjUzRjNDMjdDNThGODNFRkFDNzk5Cis6MTBGNEUwMDBFNDUzRUIzQkYzNDMwRTBDMTA2Q0JGRkNEQzdCMzJFREMyCis6MTBGNEYwMDBGOUU3QTZFRjQyQ0Y4NURFNUVCM0JFRkYyN0U5QjlGOTkzCis6MTBGNTAwMDBGOUI3MkQxQ0Y3MjdEMEQzQThGRTA3QjFEQ0U2MTQ1MkJCCis6MTBGNTEwMDAwMDcxQjYwRTI5RDlCQjI5MDdGNDlEQzU3RENDRTUyNzFFCis6MTBGNTIwMDBDODIyMUU2QjBGRkU5MUY2QUI4NTBBNEIyQTY1RjUxQUIxCis6MTBGNTMwMDBEMjNGMERFNDYxRTI2NDBGRDY3NzlGQTUzRjEzRUUzRjAzCis6MTBGNTQwMDAyNDkxQ0M5QjY1QzBDRjY0M0ZDQ0JGOTI0RUM4QzM5NDdFCis6MTBGNTUwMDAyNEM5RTMyMkNCNjcxMkYyQjgxQ0IwQ0JCNDNFNjkyMEI5Cis6MTBGNTYwMDBGQzU3ODlGMjk5M0M0NDNDODAwNzZGOTAwMjBFNzg2RUZDCis6MTBGNTcwMDBBMzdDRDI2ODc5QTI5QzQ2OUM0OEZEMzdFNEQ3NDJBRTcyCis6MTBGNTgwMDA3NDBCRUQ1QTE4RTNGMDI1RDZDMTdFQzE3NzlDM0Y5NkU3Cis6MTBGNTkwMDBCQkNFREM0Q0VCMjU2MUU5Q0FDREQxN0VFRUIxODZCMkEzCis6MTBGNUEwMDBCQzFBRjQzM0Y0RTNGQjIwNkVGNThDRUE3RDNFMEVERkVCCis6MTBGNUIwMDAyRDlGQjI5RjYwN0U5MDlGMTZDNkNGQTAyNUQ5RkI3QzYxCis6MTBGNUMwMDAxQ0JDMzVGRkRBRUI3RjJCOTk1RUNCODA4RkI3OENFNkM2Cis6MTBGNUQwMDBBMzM0NDhGOTA3N0M1MEZFNzYwNUZDQzQzMjM3OTMyRkRDCis6MTBGNUUwMDBGOTQzNTU4NzM4MEQ5MUVEQTFFOTcxRTg1OEMzRTk3OEUxCis6MTBGNUYwMDA1Q0Q2NkZBM0M4ODZDODU1RURDODlGMDMzMEZFMUFGMENECis6MTBGNjAwMDAyRjgzN0MzQjQ2QkVFNkM5MkFEMjI1Mzc5MEI1MzhCRjRBCis6MTBGNjEwMDA5MEIwMDVFQ0M4NzhFMzYxNTU4ODIyQzMzOEY2NUQ0MUE3Cis6MTBGNjIwMDBCQkRCQ0FFOUIzRDFFN0RBQ0NDNEUzMjUzNzc4MjM2MTgxCis6MTBGNjMwMDAzQTRFRTQ0MzM2NEUwN0U2MUJFNTcyM0RBN0ZGNDE0RUM2Cis6MTBGNjQwMDAxNzk4MjdBOEJGMTRFQUE3RkM5MkZGQUNBRThEMzc0RkRFCis6MTBGNjUwMDA2QzE3RkNFN0ZDMzI5NzNGRjAyNUQ2N0Y1MTdFQUJDQzkwCis6MTBGNjYwMDBGNDI5NzhFREUzQjY2QzUyNUVFMjcxMTNGMjJFMEQxRUIyCis6MTBGNjcwMDA0RDM0N0U2QjQzNzFGNDdCOEU2Q0UxRkQwRDRBNTdBM0Q0Cis6MTBGNjgwMDAwRkYzQjg1Q0NBNTU3NERDQTA3RjM1NDYzRTZFRTZGRENDCis6MTBGNjkwMDA1QUNFRUJCRDRCRDJGRjFFRTRFMTA2QTlFOTFGRTA0QUJBCis6MTBGNkEwMDBBQUZCNTBGRjQwQzZBMURDQ0Q0NEZGNkZGQ0ZEMDZEMDk1Cis6MTBGNkIwMDA1MzUyNjc3QzRGOUY2RkMyRUY5QUZCNzA3RDRBM0MzRjZECis6MTBGNkMwMDAyQ0U5NUI2NEY2QkUxNUJGRDM4REVGQTkxQ0I2QzE3M0UwCis6MTBGNkQwMDAyQTJGNDQ5RTA5Q0YxOTNGQTk5QzEwM0JCRDZGREQ3NUIxCis6MTBGNkUwMDBGNzk3ODFBRkY0RkJDN0IwN0U3MkRBRjBCRDE1MEM0NDFBCis6MTBGNkYwMDAzQUJCNEEzM0Q5RjU1OTkwM0JFRTlGNkU2RUQ2OTFBRjI3Cis6MTBGNzAwMDAyQTU5Q0JGRDY3MzY5RkNERTVGMzk5RkRBRjZDMUVCQzQyCis6MTBGNzEwMDBFMDUyMzFBRUE1MjRFOUExMzBCREE2QkJDMjNBQzQwMzc0Cis6MTBGNzIwMDAyNzkwQkUyMEY4NjNDQjk2Q0EwNjNCREY2QzlBNUZCRTdCCis6MTBGNzMwMDA3QzhGNzFGRTVEQkUzQUNCNzBGRkQ1ODdGMjBDRjc4MUVFCis6MTBGNzQwMDBGNTM3MUJFQTVCQjE2NTk2RTFGRTlFRUQ2NTg2RkI5NTlDCis6MTBGNzUwMDAzQkFCMENERkFGRkE0OTgzRTFGRDM3OUU1QjYyQjg1RkRDCis6MTBGNzYwMDBGREMyOUQ3MUQ3MzdDNTdDRjc4OEU1RERENTREQjQ1RjA3Cis6MTBGNzcwMDA5QkUxNTUwQzVFNTRBMkVCOTcxNjg2Qzc4Q0RGNTFGMUM2Cis6MTBGNzgwMDBGMzI4NzNBMDFDQzE1MDg0NTk0RTE1RDNGQTY3RkY4ODIzCis6MTBGNzkwMDBGRUFDMzNDQ0I3ODc4MjM5MTkwMDE1RjQxQzQ1NDNGQzA1Cis6MTBGN0EwMDAxRkQ0RkJGMjMzQTM3OEEwQ0FCM0IyMzFERUZDMkJFODNFCis6MTBGN0IwMDA1MTc4MzkzRkU5QUY4MjcxRDMxNTYzMzk4NUFGRDc2QTg0Cis6MTBGN0MwMDBERTA4QzY2MUNDRUJCNThBNjcxRUNFRUY2NjdBREY5MUE0Cis6MTBGN0QwMDA1MzMyQzAyRUQxQkEzREI4NEVBQjVEREQ3QzNBNkVGRkUwCis6MTBGN0UwMDBBODI1QkNBQUZFRjFGNkZDRDBDRkJDQzRGRDlBNUIxQ0Q4Cis6MTBGN0YwMDA5MTgxQkNBQkVENTc5NDRFMjNFRTExRUJFNDBCNTg1MUM1Cis6MTBGODAwMDA1MjlBRjMxQ0ZBNjMwQjgwM0U5ODlGOEIxOURFQjFEMzlBCis6MTBGODEwMDBGRkQ4M0NDQkY4REZDMENCMzczREU0QjIwMjNFNkVBQTQ2Cis6MTBGODIwMDAzNkQyRDlDMDcxMTRENTQzMDVFQzQ0Njk4MUU5M0REMDg1Cis6MTBGODMwMDAzOTAzQ0ExOUYxNTIwRjk3NDc0REUxRUJFNTczQzgxQzI0Cis6MTBGODQwMDAxQzA3QUVCNzhCODRERUQ2QjAzODA3NzFDNTVGNDdBRkYzCis6MTBGODUwMDBCRjQ0MEJDREMyRjY1MUZFQzRGM0Q3MEFGMjkyRTFCQjBFCis6MTBGODYwMDAwNTZEQzQ2M0EzRjhFNDkxRDkxQjVEOTU4MEYzNzVBQjc2Cis6MTBGODcwMDBCNzhFOTZBRUYyRjI3ODkzMkUyMzlFQkRBRTgwREQzNzIyCis6MTBGODgwMDA1NkIzRjg1MzdEQTAwRkUzODA4REY3ODQzNkMyNzVDQTU2Cis6MTBGODkwMDBBQUIwODI3NDk4RjhGQUFDMjc5NDg2RDg4MEYzMzc4Qjk0Cis6MTBGOEEwMDBGMzJCNEJGMDk1RjM1MUQ4RjEyOUFCOERFM0Q4NTg2QzdECis6MTBGOEIwMDBFNEQ3NDJDRTRGMzM5RjE3NzIzRTJFMzRGMUIxMEJGRTg4Cis6MTBGOEMwMDBBMDdDOTk5RDgwOEYwQjM4MUVCNUNGRTZGRURENzA3QTQ3Cis6MTBGOEQwMDA1Q0JGRjE1OTFFMUYxM0YyQTM5OEU2MzU2MTNGNDZFNjVGCis6MTBGOEUwMDAzNzJFQkY4RjgzMUQwNzlDRTdFMjM4ODVDRjdCODlGNEQ1Cis6MTBGOEYwMDBDODlGREZCMkMzMEZGMUQ2MENBQjYxRkQ2MjFFRUY2Qjg4Cis6MTBGOTAwMDA2OTNFNUJFRjI4Q0Q5MDExRjc5N0JBREYzMEM0OTk0QjcxCis6MTBGOTEwMDA0N0UyQTNCQTU2MzMyNzJBOUY1RDAzQ0NGRjY4NzU5RjQxCis6MTBGOTIwMDA5NjYxOUMxQUYyMTlDRURGQzJGOTIzRTI3RjA3RjhCQTdBCis6MTBGOTMwMDA5MTk5QUVBM0QzODJEOTgwOEY4RTVEMEM2NkFGMkI4NjUyCis6MTBGOTQwMDBGODhGODQ3MkQyNzlFQjAzRDkyQzVGODBDNzczNzk3QkVGCis6MTBGOTUwMDBBRjBDMDVEMTdGM0IzNjMwRjZGQUEyQzBGOTY2QjkyOTYzCis6MTBGOTYwMDBGNTg2NzA5REIxNzRBMDVEODZGRUQ2NDVFODFDNDRCQjRCCis6MTBGOTcwMDAzRTJGRkMwQkQ5NTM4NDcxNjkwNUU4Njk3NEFGNTAzMDkwCis6MTBGOTgwMDA1RUU2NkU1MTIwQkU1Q0U3REU1NTA1RkNGMDkxRDA2NjY4Cis6MTBGOTkwMDAyN0M0RDUzQzkyMzcwQzdDMkM2NEZBQkI4QUZFMTdBQjhCCis6MTBGOUEwMDBCRjgyREVEQUMxODAwMkZBNUVFQjMxRkEzNTNFMkU2RjlECis6MTBGOUIwMDAzNTZFRDNGM0ZDNUE5NDM3OUY0OURFMzYwOTM5OUI0RTk2Cis6MTBGOUMwMDBBNkM3Q0E5OTg4NUJBQjQzQjk1QzVGRTNDQjU5MjdFNzBECis6MTBGOUQwMDBDN0JGRjMzOEVCMUY3ODdDRkExREJFQUVGN0JCMEQxRTE4Cis6MTBGOUUwMDBCQ0JFQjJBMTAwOUYxRkQ5RTBDNUZCQjczNzk0RTBGREI0Cis6MTBGOUYwMDA2RjIxQ0U0QkVGREZFMDcxRENENzM3MzRFMUZEQTkwRDhECis6MTBGQTAwMDBDRDc4REZDQkUzQjQ0MjhFQjdGMkY1OTQxQUI5MTNFM0E1Cis6MTBGQTEwMDA4QjBEREU4MEREMTUyMzRGMEQ5QzZFMTQ3REMwMjE4NTdFCis6MTBGQTIwMDBGMUUzQUZCNjY5RkIxNTkwQUZEMzIzN0E0MkQwNUUyQ0Q5Cis6MTBGQTMwMDA2RUNDRDlCRDhERjJDNUY2NUQxMjAwNUM2OTNCRjRBRkFBCis6MTBGQTQwMDBDQUY1NTRGRTFCRUE3MkFDMkJBMUJENjBCQjMyMEJFNEJECis6MTBGQTUwMDAzMUZDQUY0QTFFM0M2RkJDRDU3QTc3OUNGNjQ1M0I4OTlBCis6MTBGQTYwMDBEQTM3REJCNzI1NzU0NjNGQjg1NEM0RDEwNzAyNDFFODAxCis6MTBGQTcwMDBFN0E0ODE0MDE4RTgyQjc1QUI5RTc4NzFFMUVFQzkyQkE1Cis6MTBGQTgwMDBERDIwNEZBRDY3MDM2RTkwQTdENkM5N0I2NEU2QUZCM0E4Cis6MTBGQTkwMDA3OEI4Q0FFNTU0OTQyRjc1RUYzNkU4QTFDQUU5RUVBMDBDCis6MTBGQUEwMDBDRjgxREU4RTcxRjRFMDAwRTc5QjI4RTc1M0MyQjI0QkIyCis6MTBGQUIwMDA0QkRDM0Y5RjI5NUVCRTQ1OEFFRkI3MjY1QjE5QUU3NUNBCis6MTBGQUMwMDBGMkY1NTU2QTMzMTVEMDMzMTA1MUEwN0YxMjE1MUJEMEIzCis6MTBGQUQwMDAyRjRENjM3MTBCODczN0MwRURCMjcxMUU0RjJCNjk2QUQyCis6MTBGQUUwMDAwMkJCQTQ2NTEwNkYyRDk4MzdBRERGMEQ3MjIzOTdDQzQ0Cis6MTBGQUYwMDAzQjBCRjMyQzI5OENCMURCRTBGNzk4RkRGRkQ4N0IxOTg5Cis6MTBGQjAwMDBBN0FFNjA0QTNBNUNDREU1MTg3RjM1MkU0MjZEQjczMjFDCis6MTBGQjEwMDBGQTFFRTM3MTBFQzE1RjhERjNCN0Q0NzNFQ0RGQzBBRTk0Cis6MTBGQjIwMDAzRUU2NjVGMTk4QzczMkQ4QkFFQzg1OTIxNTg4Q0I0QTgzCis6MTBGQjMwMDBCOTVGNjAyMzNCQjA3QzMyNjlDN0VCNjZBRTY3MTc0QTlBCis6MTBGQjQwMDA0RTEzRDA3QjU5QTFCODM5MDNFOEIxODc4MkY0N0JBNzYzCis6MTBGQjUwMDBDOUJFMkI5QTkxREYxMkU1Qzk3MkMwRDcwMzhBQzFERkYzCis6MTBGQjYwMDA5MDRBOTg5REI3ODNCRjBFN0UwQ0M3MkY1MTNGMkY0MDAwCis6MTBGQjcwMDBBRTAwRjNBRjEyNEY2REIxMUFGRDMxNzExRDUwMkMyODNDCis6MTBGQjgwMDAwRjJFQUIyOTlGRUVGRjdBRkUxREZENUNGOTI3RkNDNDBBCis6MTBGQjkwMDAxMTlDNzdGOEVCMDRENjYzNDQzRUExMjhGRjhBMjlERTQ2Cis6MTBGQkEwMDBBNDY2QjM3NTE4NzNCRDc3NTgxOURGMkJBQzFDMUYwQkY3Cis6MTBGQkIwMDAzQ0UxMzNCNzkzMTQwNDdFQUFENDlGNEE5MjQ2RDc5MzZDCis6MTBGQkMwMDBBODNEMzIzMDczOUNCOEY1NDY2Q0ZGOTRFMjYyRkUwNEE3Cis6MTBGQkQwMDBDRjA3QTI2RUI5NjRGMDRGRUNCQTNCNzZCRDdGRTQ3QkYxCis6MTBGQkUwMDBCN0M1QTBBN0EzRTk2NkZDRjlCQ0U5NUQ0MDFENTJCODAyCis6MTBGQkYwMDAyRTE0NzZCODg0RTFDOTQ1MUU4QTI3RTk5RjhCMzQyNkU2Cis6MTBGQzAwMDBBNzI3RkQ1MjY4MTNDQUE5NkVGMEI3RUE0QTZBQ0ZBMkM1Cis6MTBGQzEwMDA1REEyRkU4ODNBODdFMzc0NEE3RjFCRDQ0QkVCNzk3RDYzCis6MTBGQzIwMDBCMkY4NkVDNDlFNThBRURDMzJCQTlFQTY2QTg2N0I0ODk1Cis6MTBGQzMwMDBGMDk3RjM2M0UzMDc0RDU0NUMwQTY2NDJCREVDN0I1QUQwCis6MTBGQzQwMDBCNEZCNEEzQzNBQjhERDZBMkE3OTYwQTFFNjg0N0I1RDYwCis6MTBGQzUwMDA3QTFBRjA1RTYxMEMzRTAwQkVFNkRCOEM3QzM2RDlCRkMyCis6MTBGQzYwMDBFQTUxNzZDRjY4NkZFNzUxRjlERDRGREJBOTkzRDczNkJDCis6MTBGQzcwMDA0MkM4QkJGNjg5MTVGQjVFNDU3Mjg0MUZFMjg5NUJFRkMzCis6MTBGQzgwMDA3MUY4RTM3NjQwN0Y0NkJDNDJCQzJDOEZBMzJBRTg2OTFBCis6MTBGQzkwMDA0NEJFNjc0ODI0OTQwM0Y0MUJFOTk4OTc2REYyQzMzMjdECis6MTBGQ0EwMDBDQ0ZERDg4MUUzNzg0OEExRjMwODFEQUY0Mzc0MUM3N0RECis6MTBGQ0IwMDBBMDdGMUNERjlGMTI3RTVFNDVDRTMwRkE1M0MyREYyMzQ5Cis6MTBGQ0MwMDBEQ0RGNzNEMUZGNjJGMTU4MzkyRkVGN0ZDOEEzMDBGRTRDCis6MTBGQ0QwMDBGNURCNEQ3MUU2OTFGQzYzODJGRTU0MDUzMUQyNUJDRUJCCis6MTBGQ0UwMDBGREJFNzI5M0RGMjdGNEZEMjU2MTJGODU1RkNCRURFMTJCCis6MTBGQ0YwMDAxREMyOUYyQTFGN0I3REI5Qzc5NDRGNTc0RDA5NkZCRjA3Cis6MTBGRDAwMDAwNjNEMjA0MDE1QUMzNzkxMTEzRTE5RTRBQjNCRTdGQUI0Cis6MTBGRDEwMDBGNjMwRTVFQjFEREUyNEI2REU0MkU5NTQ4NDNENDczRTc1Cis6MTBGRDIwMDAzMTlDQkQ5MDk3QkZDM0EzQTJGQ0ZCMzRCNjdFRDEzOEYzCis6MTBGRDMwMDA0RURDQzI1N0MyRDYwRDRFRDkyNTM2MUYwNEM5OUIyNEFFCis6MTBGRDQwMDAyNjNGQkNDQUMzRUNCNTY2OTI4QjZDNEY1MzM1QUMwM0VGCis6MTBGRDUwMDA2OThBRTQwRDkxRDFGMjVBQ0RGRDM5Rjg3RTNENjU0NUIxCis6MTBGRDYwMDA3NTNFRjVDOTY3QzZDQjJGRUY4M0QwMkEyOUE3MzQzQzRGCis6MTBGRDcwMDA5QjkzNzg3Qzc1NkZBNDBBODZFNzZBQzc5Nzk4NzBGNjlDCis6MTBGRDgwMDBBOUM4N0I5OEQ3NzVBMTUwQzI3NTlGRUU5QzhGRDEzRkIzCis6MTBGRDkwMDAxMEVCM0I1MUZFMURDNTdDMTQ1RkM5NDdFOEFGOENFNEY2Cis6MTBGREEwMDA2REYxRkExNjhBRkE0QTBFRTM3QUNERjc1Qzg3MzE0Rjg1Cis6MTBGREIwMDBFNDI0QUNFM0QyRUY0RjJBMTEwREZDOTBGOTAyNUY1MTFECis6MTBGREMwMDA4RTg2MDUzRjczMjA0RjgyRDUxN0U2N0VENTI5RkIxQjEzCis6MTBGREQwMDAwRUIwOUIyMkVGQTRDQjI3RDdDNThCNzM1NkM4MkNDRTcxCis6MTBGREUwMDAyQ0FFMzdBOTZDREU5OUEzMzIzQzI3RUVDNUY4OEVDODNECis6MTBGREYwMDA5MzdDQkM5OEY5RTFERjMxOENCQkI5N0UyOERGOENGMUI0Cis6MTBGRTAwMDBDMTcwRTE1OEZFNjhBMzg5Q0ZEMzU0M0VFRjcxQkNEMUQ1Cis6MTBGRTEwMDAxOTE5MUJENzhBN0U5QUY5NjBFRUE3RjkzQkE3Q0FFMkE3Cis6MTBGRTIwMDA2NUY3NThGNTlCRDVEOUQxNzZDNDdDNjcyRUJGQzgxRTFGCis6MTBGRTMwMDAzRjJGQzc1RjYyOEM0RjlBRjM3MkVFQjEwNjRBNTVDQUU0Cis6MTBGRTQwMDBDRjJBNDVEQTkyRUE0MUJCODZGQTc0RThCMjg2MzhFNkYwCis6MTBGRTUwMDA0MkU0RDAxNjE4RDYyM0MzMkMzRTVBNEVFNDkwOERDREUyCis6MTBGRTYwMDAwQjhEQjA2RTI3RjQ0NkM4QkY5OThFRjFEQTJGMUZFRUM2Cis6MTBGRTcwMDA0NzdGREM3RjI5NTIwREYyNzc4N0FGMUJFREVBMDI2QURDCis6MTBGRTgwMDA1NzI3QzRCMUFCRjNFNEMxMkQxMzQwN0ZCRDZDN0ZDN0NFCis6MTBGRTkwMDBBOURGRjc1NUUzQkQyNjYxM0VBQzVFOUVBNzRDMDAzOTU1Cis6MTBGRUEwMDA3MEM1OEY1N0NERTU3MjMyN0EzRDRGRDg1NTk3MDJCODVECis6MTBGRUIwMDBDMTFDNkY5QkNCRjU2RUFFNDkxRTAyRUEwODBFQkFFRDZGCis6MTBGRUMwMDA0QURFRjhFMzk0NDgxRTJFNDQyRTNDMTgyRjhFMkFBRUFDCis6MTBGRUQwMDA1NTA5QzZGNzNFNjJFMjZGQTczMUZFNkNBRTQ3QzQ4Mzk4Cis6MTBGRUUwMDA4OERDOTkwREZBMkNGQzVGNzNCOTM2OTVBRDdCMUMyOTIzCis6MTBGRUYwMDBCQTk3QzRFNjU1MDk3QkEwOTZCNDZCMTAxN0VGMkQxOTdECis6MTBGRjAwMDA3QkJFMzBFNzBGRkE4OTMxNEZBQ0NBNkU1QzhGN0Q0QUY5Cis6MTBGRjEwMDBEMTFGMDE3OThDRTJBNDE2RTZBRjk2QjRBMEJGQkFCMEE3Cis6MTBGRjIwMDA5MEVGMEIyQUJBMTdGRDUzRTE1N0I3REVCRTE3RjNCOUFFCis6MTBGRjMwMDA0NEJFOTZGMDRGQ0Q3NEY3NEU3RTExRjM3OUM2QTM1QkE1Cis6MTBGRjQwMDBGOEYxQzc2RDMyNUI4N0EwN0VCQjA3RkQ3NjhBRkJFMkM2Cis6MTBGRjUwMDA3Q0Y3OEE4REYxRUI1NzhBQkUwQkY0NzU4QjU1NzdCNzFBCis6MTBGRjYwMDBDMDNBNjM5MUNERkI3QzlDNzExOEIwMzFGREVFNERCMDcxCis6MTBGRjcwMDBERUZBMDc1OEY4OTg4REZENDAzRTk4RTcxQkUxQzc4QUU2Cis6MTBGRjgwMDA3RDRBOTNEQzRDNkYxQkI4MUY1QjU2RDg4MkZBOThFNjBCCis6MTBGRjkwMDBBNjdFMkJGMENEQ0JGQzU2MzI2OEY0NTMxNzZBN0Q1OTAwCis6MTBGRkEwMDAzMEZFRTZGOTRFMUVFNjdFRUQ1NUZBQUQ1QjkzOTgxQ0U5Cis6MTBGRkIwMDAwNTVDQzRFRUE2RUY5MzE0MEE0REU5RkNGN0E0NUM3OTQ2Cis6MTBGRkMwMDAxOEY4QjEzNThEQTAzRjcwMzI0RDBERUQ4RTEzNkY3ODVFCis6MTBGRkQwMDA5QkNCNUI4REJDREEyMDZGRTUxQzk3QThENUZEMUFDNEJFCis6MTBGRkUwMDAwMzRFMEVCMzM4NUVBMjcxREI2NkMyRTlCOTA1QzQ2Rjc5Cis6MTBGRkYwMDA3M0MyMzVFMjA3N0VEMDdCREQ4NkQ3MDhFNjY3N0ZCRjE4Cis6MDIwMDAwMDIxMDAwRUMKKzoxMDAwMDAwMDY4NjU2RUJDRkE3NkI3Mjk3MUU3QTUzRkYzNzE1QjJDODIKKzoxMDAwMTAwMEYyQjVFQjU4M0NGMkJFNDIxNUUzQzI5M0VBREUzRDhBRUMKKzoxMDAwMjAwMDcyREFDOEU1NzQ4MTBERkJERDVCQTRFMEI4RjRERTlFRjYKKzoxMDAwMzAwMEQzMEVFQjlBQkQ0NTc2Q0M0N0U5MkVGQUNERUYyMTVGODIKKzoxMDAwNDAwMEJCQkM0NDMyRTQ5NzA4RjkyRDA3NUMwREY1REI1OUJDQzUKKzoxMDAwNTAwMEYzM0UzN0IzQzNCRDFBQzcyRjNDNkY2NDBEMUZEMzkzNTQKKzoxMDAwNjAwMEZCREU3N0M2RTY4RDJDMTE3MkRGQzhFM0U0MjZGQzQ0ODQKKzoxMDAwNzAwMENENDhEQzc1MUM5MTQ3N0NCRTkxQzU4NUVGMTNGREREMzUKKzoxMDAwODAwMEJGNzcwQkU4NUQwMzk3OUJFRThCMkJEREE4OUZGQjU5OTkKKzoxMDAwOTAwMDdFNUU2QjUxMEJDNjhCQkEyN0JGQTVDMkZEMUFGNzE5M0UKKzoxMDAwQTAwMDE1RUVDREI4NDI4Q0VCN0QyNUJGNjJGOTkxN0M1Q0Q3MTMKKzoxMDAwQjAwMDQwM0M5RUNBRkJDQjk5Mzc1QjNERjQ3RTcxRjg3NjJCQjIKKzoxMDAwQzAwMEM0M0I0NTdDNzZENDNBMTQ1RjRGQTk2NUREMjdCNTZFRjUKKzoxMDAwRDAwMDg2QUY4RjY2M0E0ODcyMDZGMDRCMEU0OUMwQjc3MDEyNzEKKzoxMDAwRTAwMDQ5ODZGQzMzQjczNTk0NDRFRjFCOTRGRTY5ODA1QjFDNTIKKzoxMDAwRjAwMDI2QkM3OEZFRDc3QkIzNDFCRjhGQ0NGODQwODE3NkFGNkEKKzoxMDAxMDAwMDJCNzlCNzE1RkEzMUE1NjQyRkM2RkJCM0Y2RUZFRDQ5OEQKKzoxMDAxMTAwMEE3RjUyQzJDMjA1RUREMzM5QTlFMUEzRTNGREQ5N0MxNTkKKzoxMDAxMjAwMEYyODVFRUYzODY4MkIwRUZFQ0RDNjVCNjlGQTJGMkQ3RTMKKzoxMDAxMzAwMDZGNTRDMUI0MzY3QTVENDYyNzgwNDNDNEJBOEVFMkU2NzYKKzoxMDAxNDAwMEVCMjI3QzdEODI1Q0JFMjJDNThFNUI4MzEyQjA4M0ZENzgKKzoxMDAxNTAwMDZEMkQ3OUMzMDlGNDJFRTY3Q0NCREQyN0I3ODA3QzU3NjMKKzoxMDAxNjAwMEZGN0FENjU3NDA0RUM4RUQzNkQ3NzREQUUwMzlENzZGRUMKKzoxMDAxNzAwMDlERDc2QkVDRkRCREFDREVCOTAxNUFCRUExNzA2RkY2MjgKKzoxMDAxODAwMENBQTJEMUY2NjU0NDdGMEFGRkIyMjE0MEU5MzkzOUZGOUUKKzoxMDAxOTAwMDM3RDk4MERCREVBMDc2RDcwM0VENzJCQjY1RjY5N0NDNEUKKzoxMDAxQTAwMEYzQUEzOTJGQzZEQ0VGNEM2NTUxOUQ2RDM2OENGNzhGNjUKKzoxMDAxQjAwMEREMzkzMTcyNDZFREMwMEFBMDdGQ0REMzc2Q0NFMzRBNUIKKzoxMDAxQzAwMERCRkZCQTJBODM3REEzRjhCRDU2OEFDQUQxMUEyRTQ3MEYKKzoxMDAxRDAwMDBEMUFCMzdGQUQ0NTI0QjQ0OTAyRjkzQkQzNTgwNjdBRDIKKzoxMDAxRTAwMEY3MkFDQjM3OUNCNEZGNUQ5NjNGNkE5QTFGN0FGOUJDMTkKKzoxMDAxRjAwMDIxRTZFM0RFQzlFRkExRkU5Q0RGQzdGNTI1Njg5MTYyMjkKKzoxMDAyMDAwMEUzNDk1QTQ5NjQyOThDOEJFMDRGQTdDOURFRjhFQ0YxMjkKKzoxMDAyMTAwMEUzMjZFRkQ4MTg1RTJERDdEODdCOEREQTZGNThENzM2MDYKKzoxMDAyMjAwMEJGQUZFNEZFNTQxNTVDNjNFNjg1MDc2RDBDRjc4QUVCRkYKKzoxMDAyMzAwMDM1RTQyMTNDRjU1REFBRkZERERCMEZCOUVGNDYzQkE1QjgKKzoxMDAyNDAwMDIxNkU1RkIzN0Y2RjAxQUNEOTY0RUVEQjVCQ0RFRDA1NTIKKzoxMDAyNTAwMEZBNjUzMkVGRTcyNEUyNDEzQkI1NTBCM0IzRjUwMzkzQkYKKzoxMDAyNjAwMDlDNUI0Qjc2ODUwMTNFOEI3OTFBMUM3MjI1MzM2QTQ3NUQKKzoxMDAyNzAwMEU0RDgzODQ0MUMzRjhDMDRGNTM3RjM2M0YyQkVFOEZDNDUKKzoxMDAyODAwMDRFQzBBRTU0Qjk1OUZDRDUyQzI3NjkyNUQ0RUVFMDIwRDgKKzoxMDAyOTAwMDUwRUVDNUFDRkI5QUU1QjY0MTBCQjg2MTNEOUJFQUNGODkKKzoxMDAyQTAwMDU5QjZGRTQ5RTcyQjg4NEZDODhENUUxQzRGMkU5RjE2MEUKKzoxMDAyQjAwMEZBMUZDQzdGMEVBRjUxM0VBRDA1QUEwMUFGOThFOUY4MDkKKzoxMDAyQzAwMEE5Q0Q4OEZGQzVGQzlDRTZFRTQ3RkExNjZBRUREOUQwQTkKKzoxMDAyRDAwMEZFMjQ3NzNGRkE1QkQ0QkU2N0MzNTVDODk5QjBENzIzRDUKKzoxMDAyRTAwMEYyNTc3NDVCM0REODc3OTA2QjU4MjIzRjU5MzIyQjE5RTcKKzoxMDAyRjAwMEVDNjA4MzlCRTExNDYyOEFBN0Y3QkFDN0Y2Mzc3QTRDQTEKKzoxMDAzMDAwMEYyNzhEMkM1RkNBQjg2MTI5MkVDNEEwNTdENjc3MUE3RTQKKzoxMDAzMTAwMERFNDdEMzc3Mzk2MkUyNzJGRjY0MEQ3NEQ4NjJFMkVCOTQKKzoxMDAzMjAwMENFQzIyRkQ2QkI5QzYwNjc1OEZFNTYyOTM1NUZENkJDMUYKKzoxMDAzMzAwMDY4M0M1M0M0NERDNTdBOUY4ODkzOEU4QTY3MTY3NjYzNEUKKzoxMDAzNDAwMDdFOTc1NUU0NURGMEY1QkY1MTc5M0YwOUQ2MURDNTU1M0YKKzoxMDAzNTAwMEM0MzM2RDlCREExNTJGNUYyRjQxM0NENkM4RTM3MEMzQzEKKzoxMDAzNjAwMDMzQzc4OTg3QjJGODAzQzU2N0JGQjU0RDFDMUY5RkVEMjIKKzoxMDAzNzAwMEUxN0VFNjAwMTgwRjdBNUQ2NTczRTE1NTgzN0MxNDRBQ0YKKzoxMDAzODAwMDZBNkY1MjdDREM3NjkwRkI2REQ3QTI5RkM3NjRGODhFQjMKKzoxMDAzOTAwMEI1RjMyNzkzN0M4OUU3NTEzQ0NDRjQ2MDUyQzlERTlFQ0IKKzoxMDAzQTAwMDU4M0M1Q0RFNDY3OTQzQzc0OTZEMjNEMzQ4NkE2MkI5M0QKKzoxMDAzQjAwMDVCMzg2MkY3N0U2NTkwQUYxMTdDM0MwRTJFMTZGMjc1QUQKKzoxMDAzQzAwMDUxRDZGRjY2OUI5OEI4NUMwM0E3MjNEMUZCRDYyMjVCNkUKKzoxMDAzRDAwMDMzRTQ1QkQxNzI2NDUyMkFCQkRFNDBBRjNEMzNGNjY2MzQKKzoxMDAzRTAwMDVCRThGM0Q3MDA3RkM1RDBEMUZCQ0M3RUVDQzcxRjU0QjAKKzoxMDAzRjAwMEI2Q0ZBNkY3RTJDQTVDQzAwN0E3MTQzREQ1M0VGMUVBMjYKKzoxMDA0MDAwMEU1QzdBQzRGRjZEOUJBNjcyM0Q1QkZBRTZDM0JDRUNGQUMKKzoxMDA0MTAwMDVENkU4NjQzNUU4NzkyMzFGMkI0NEUwRDVDNjc5RjhEQjAKKzoxMDA0MjAwMDEwNDQyN0U5RENDODA5MzkwN0EzNTk3RDc1RkJDNEVFRTAKKzoxMDA0MzAwMDcyRjQzRkQ0MTQzMzNGNkM4NzU3OTM2MTlEOEZDOUNEQkQKKzoxMDA0NDAwMDIzNkEzRkU2RTNEQzQ1NkJCN0QxNzYwRTZCNzJFNjBBQjIKKzoxMDA0NTAwMDdBM0ZEM0NFRTRGMTcwRDAxQTM3RkY3OUE2OURFMUU3NTkKKzoxMDA0NjAwMDc1NkFEMzRDQTA5M0I0QUY0NTNENkI5MUU0MjZEMDdGMjEKKzoxMDA0NzAwMEUyQkRCQUY4RENFNjhFRjg3OUE1NTVEMUZBRTc2MkZENUYKKzoxMDA0ODAwMEZCNjhGRDgwMUJCQzNDRkU0RTVDOTk3MUUzRURCQ0RGNUMKKzoxMDA0OTAwMDYxNDJFQTQwNUYxRTRCMzNGQTlCM0UzQjlCRjdFNjQ2QzgKKzoxMDA0QTAwMEVCQUY4RkFEMUZGM0IzNjZFM0YzMDUzOENFMkZCMEU3QTQKKzoxMDA0QjAwMDA1NzZBNjE3RkUzQzk2RDcyNkY4MjhFQTVEMUFBRDZGOUEKKzoxMDA0QzAwMDI5RDZCNzlGN0Q5NzZGRTdFQjA2OUM2RTgxRjNDREY5MzgKKzoxMDA0RDAwMDRGMzU0OTZDM0NBMkZCRkEwOERBQ0Q1MjhBQzNGMTdDNTUKKzoxMDA0RTAwMDg1NDhFODMwRENGQjA5REY5NzI5MzE5Q0RFOTVDMkY2QjAKKzoxMDA0RjAwMDMxNzU1OTg3RjA5Qzg1RUU0RjNFN0UwN0Y2NkIyQThBNTAKKzoxMDA1MDAwMDExREZEQkI4RUMyODk3RjdDODUwQUUzNEZCODIyM0Y2MzYKKzoxMDA1MTAwMERDODE3MkZFQkU3QkQ4QjhBRUFBNzNCQzczOTBGMDdDNEYKKzoxMDA1MjAwMDBENUU5RjNGNDE5QzRCRTBGODBFNUUzRUJBMEVDQ0Y2NEUKKzoxMDA1MzAwMDI5NEUxQTYwRkIxMjJCNUNGQzlDODhCNDZGQTM1RjJEQzQKKzoxMDA1NDAwMEY0N0NFQjI3NkIxOTlFOUZDQUY3QUY2NUVGOTE2M0U5QzcKKzoxMDA1NTAwMDUxMzgzREE1Q0FGQkRGREMwQkZEOEYxMDE3QzY1OUMzMTAKKzoxMDA1NjAwMEJGNzNFNEQwN0VFQkM3NjQ2RjEyOTQzNkY5MTkzRThFRTgKKzoxMDA1NzAwMDZCQ0IzOTZFNEQ4NEVGOEY0QTgxRTdDMjJDQkU2OUMwQzgKKzoxMDA1ODAwMEY5NDczM0ZGNTkwNjFDNUExQTY2RUI0QzE1MUNENzU3MEUKKzoxMDA1OTAwMDI4QTEyQzk4MUY2QUIzNTkzQ0FBRTM2MjVGMTZFMkY5QkUKKzoxMDA1QTAwMDhGMzM3MUJFQjg0RUQ5ODVGRDlFQTIwQzYxOUVDNDNDQUUKKzoxMDA1QjAwMDEzRkVDRjFBMjBFODM3RjhBOURGQTBDN0MxMkQzNTcyODYKKzoxMDA1QzAwMDc2MzVFQ0NGMkRGNUIwRkRCNUE1NUU1NkJFOEJCNjFGQ0EKKzoxMDA1RDAwMEE0RTUyQjJGRkVBMDA3RTBGQTY4N0M2RkM0MjlFNTlFRjYKKzoxMDA1RTAwMEExMkEzNDIzMjZEQzdGQ0Q3ODNBOUJDNUE1MkE0QzdFRjAKKzoxMDA1RjAwMDgyOTAwN0NBMEZEQzM3REZBMTNDNjgwNzNFRTQ2NjVCRTgKKzoxMDA2MDAwMDk4N0YzMEQ1QjIxQ0Y4NDZBQ0NDM0ZEOEVBRkE5NjFEOUMKKzoxMDA2MTAwMEZEMDNGQTFFRkM4MzBBRUUxRjU0NUM4RTY0ODE3RjYwMkEKKzoxMDA2MjAwMEVFOEY5MEFGRENDQjFGQTM3RkQwM0RGNDMxRjIzOUZDQ0QKKzoxMDA2MzAwMEM5OUUyQ0IwQ0IyMjhGNUNFMDdBNTEzRTUzRjExRjAxNTIKKzoxMDA2NDAwMDNEMkUzN0UxN0M5QkMwRjlDMzZCMDlFMEZDMEFDNTg4RUQKKzoxMDA2NTAwMEYzNkQ1Q0NFMkEzOENFRUY4MEY1MkU5MEQ3QjM5OUM3RDQKKzoxMDA2NjAwMDczNjgzRjBFMEE5QzNGRUMzMkUwRkM1MkNFODc4M0EwQjkKKzoxMDA2NzAwMDhGMzEzOEZGRTA1OUI2QUZCMjJCM0JENzgwRjM0N0ZDNDAKKzoxMDA2ODAwMEM4NEY4OUYzN0Q0OUNDRUUwODFDNUZDQkYxODI3OEZGMUYKKzoxMDA2OTAwMDIxQjdFMzY2N0M2RjdFN0ZBREY4OUU3MEZDMUVDNUM1RkEKKzoxMDA2QTAwMDQ2QjlFRERFOUU4QkVCMkFBNTJFM0JDQTZERjk0MDYwNjQKKzoxMDA2QjAwMEY4MDFGQTJBNzM3OEVEMUY5RjAwN0VCQjFENUVGOENDMEYKKzoxMDA2QzAwMEM2Qzc2NURDRkM0RjEzREU5RjQ0MjI4NzUzNDE2RkYyOUYKKzoxMDA2RDAwMDU5QkU1MTVBQjYwQkY1QTQ4MkVBNDk2RDNDN0QzMEUzMTAKKzoxMDA2RTAwMEZGNkMzNjZFNTU0QThCQzg4QjFCMTNFNzU3NjgyRUM0QjgKKzoxMDA2RjAwMEQ5OEE1MjdCNTUzOERGQUM1Nzc1RjlCNjMxRkREMkFDOEIKKzoxMDA3MDAwMDI0MjMwRUYzMEJCQkE5M0MxMDQ0QkJBOTNDMTAwNkZERUYKKzoxMDA3MTAwMEYxNUY2NkY5MzNERDlGN0NEQjFEN0I5RUMzNTY2RUZGNjgKKzoxMDA3MjAwMDg1M0QxN0ZBNzhGMDkzOEY3OTFFOEQ0OUFFOTU4RjFDMTEKKzoxMDA3MzAwMEIxRkI4QTBGNjYzMzFDRjIzMzI1ODJGQTdCRjBGMkNDRDAKKzoxMDA3NDAwMEU0RDgzODk1MTlFNzFGRTQzOEJGODJFM0ZDOEFDQjRDMjQKKzoxMDA3NTAwMDRGMEU4RUM2RjlCNzI1QzVFMDM2RTdFNTY1ODhGM0FGREQKKzoxMDA3NjAwMDM2OUY0MEY4QUZCNTI2RkZGNTVEQkJEMTdGNEQyNEQ3NEUKKzoxMDA3NzAwMEZGQzFFN0YzMjgzRjg3MzYyMzlFNTU4NkQ4N0NDQUY5MDgKKzoxMDA3ODAwMEE5NzAzQzZCMDMxQzc5MEJDRUEzQjgzRjVFRThGMTI4M0YKKzoxMDA3OTAwMEJFNUEzRjMyQ0M5MzdFOEVFRjBFMkE1NzhENjc5QjkzQzUKKzoxMDA3QTAwMDY2MjcyRTU3MzEwRTlFRERGQTg5REE4Q0ZDRTc3OEI2ODMKKzoxMDA3QjAwMDQyRTBEOUJGNDVCMjYyRjEyQ0QxMTgwRTNCRjhDQzI1RUUKKzoxMDA3QzAwMEVDQzdDMTM0ODY2M0NEMzgyQzMxRUU2MEY3N0U0REUyNDQKKzoxMDA3RDAwMEVCMzA0NjNDMjFFQUU5NDgyMUQ5MTg5RjkzREU0NkJFMUEKKzoxMDA3RTAwMDc1NTlGRjEyMTc4RjA4RkM2MUM2MURDNDg0Mzc0NkVBOEQKKzoxMDA3RjAwMDA1OUMwMjc4NjBGODgyMDNGNkMxNzYxQzkzRjlCRUJBQjQKKzoxMDA4MDAwMENGOEE0MzIyNzIyQ0VFMTBERjc1QTVFOEU4Q0YwQjVDOEYKKzoxMDA4MTAwMEIyRjU5MzMzODgzM0I2MEUxMTNDMzk0MUUwMTI4QTM3NzIKKzoxMDA4MjAwMDBFODMzRkE3RDNGOTNCQzkxM0E1NUZFMDEzODEzNzQ2NzkKKzoxMDA4MzAwMEZBQTFCMEJDRDEyRTE3QjdGRjA5RTJBMDlGMzczRTExMzUKKzoxMDA4NDAwMEI4QzRDQzlGODM1Njg2NUIzQTJFQkVGNTk5RjA4QTE5QzAKKzoxMDA4NTAwMDlGOThFOTlEQjc2QjQ3NEYyQTJEMzczRjdGMDhFRDUwOTIKKzoxMDA4NjAwMDg3QjcwRkY3OTk3NzBERTc2NjAwMUZDNkM3MkQ3RTVDMjcKKzoxMDA4NzAwMDg3MUY4OTUzNzJGQzcxQURCODI1MTE1RTQ5ODQzMzBFMTAKKzoxMDA4ODAwMDAyOEVEMUEyMzhDNjhDNUZDQ0ZDQ0NDRDI2MkQxMEY3QzEKKzoxMDA4OTAwMDE3QjgyNjkxREU0MkI5N0I5RDUxQkM5M0E4MUNCNURCRUQKKzoxMDA4QTAwMDg4ODMxMkQ2NzMzOTcyQUQzOEU4NENEMjk4Mzg4ODEwRTQKKzoxMDA4QjAwMDI2MzcyQzNGMjgxMTNFRDlFQTc1NjlCMUY5QUE2MjNFNjQKKzoxMDA4QzAwMEU5Q0VCRUYwMEVFRTJCMUY1MEYxN0M4NEVFQjNDQzdFNTEKKzoxMDA4RDAwMDI2QzI0Nzg3NEM3QTc3MTBFQzg1MTY5REFGMTJGMjY1RDkKKzoxMDA4RTAwMDgwOURGMzIxNzA1NEEyNzI1NzhCOUZDNDNDRTI0QjYyRUYKKzoxMDA4RjAwMEYzNDRBMkY1QzlBQzY0ODZCMzFFQzk2NUZFQjJGOTdEQTYKKzoxMDA5MDAwMDM0REZDNDg4QTM0ODQ2MTFDQUYzRkQ3Q0RGNjUyMjVDNEUKKzoxMDA5MTAwMDQ1NDhDNEM5RTI1NDQxN0NCRThDRkI5QjE4MUI5Q0MzNTgKKzoxMDA5MjAwMEYzMEQyOEE5NERGOTI0MUZFNjg1MjYzQjFCQUY5M0IzOTEKKzoxMDA5MzAwMDI1RjQwMzE2QzE3MzJBNEZGRTZBQjYzRTc0QkE4OEQ5RUQKKzoxMDA5NDAwMEVCOTM3RTFCREFFRkUzRTc1OTNFNjI3NzBBOEJCMzlFQTcKKzoxMDA5NTAwMEJDMzVDOUJCOUI5MjcwMUVFQUE1RjNGMEU5QTRCRTYyNDgKKzoxMDA5NjAwMDk4Rjc2Nzg4N0VBNkIzN0UyRTcwODQ1N0UzRkFGOEFDQkEKKzoxMDA5NzAwMDlCMkRDMTlDRDFGQUZENDgzMkE3MjM1REMzNzVCNjA2RjUKKzoxMDA5ODAwMDhFM0Y2MTlEMzA2QkU2RThGRDA0Q0YyNEU3MjA5RjIwNzkKKzoxMDA5OTAwMDRGM0U4Qjk2REI2MkU5RkI3RTJFN0Q5NDY0NjFFQkFBNzEKKzoxMDA5QTAwMDY2QkVGRTk5RDMwMzhDQjFDNUYwQTEzMURGQUUyNzUxRUQKKzoxMDA5QjAwMEY5NEZCQTg5QUQ0Rjc1NTVEQjMwMUYyNzA5OTZEMjY5QkIKKzoxMDA5QzAwMEJEREIwQTcyNTNFMkM5OTFFODk3RjlGOTRGOTM5OUZGOTkKKzoxMDA5RDAwMDdEN0E2QTA0RTdCMTUzM0NCRjc3OEQyMjA1MDk3M0IwNzUKKzoxMDA5RTAwMEIwOUZDQTg0MjlCQkI2RDFBMjVGNEU2NkU3RDU5Q0ZBRjgKKzoxMDA5RjAwMEY1RUIxODI3M0E5MUM2RjlBMDRCOThDNzcwMTI2QzIxRjUKKzoxMDBBMDAwMEM0RkI1QzVBMDhGNjY1RDJFRkFEQ0JDNkM4RkJFOEYzNzEKKzoxMDBBMTAwMEQ3MTZCMEY1MzI0MjI0NTg0NzgzM0Y3MjQ3RjM3QjQ5REIKKzoxMDBBMjAwMDlEOENGRDVFRTJEQUZFMDBFOEUzRTlCQTM3MUM3MEZFNTkKKzoxMDBBMzAwMEU0QzI2MTBCMDFCRDVCRTIyQUJEMTc5RTc3QTczMDM5ODYKKzoxMDBBNDAwMDA2M0UwMzZFNUE1MkZEQzU2RkMyRjNDNjQ2RTM3ODFDREMKKzoxMDBBNTAwMDQ5Q0U2NUU3QzgyODZDM0M2MEZDQjI2NjhFNkU5N0NFQzYKKzoxMDBBNjAwMDdFMDEzNTMzODZGRkJFREZGQzlEMTQzM0FGODhCQzE1OTUKKzoxMDBBNzAwMDdCODIzQ0JFNDRGRDk2NjJFREFGMUM4RDNCNEUyQUQ5NzUKKzoxMDBBODAwMEI1MDNGNkM3MzQxNUIzNzMyRjFBM0MyNDA4RUJCQzBEMUQKKzoxMDBBOTAwMDVFMTJDRUUxRjI4NUY5MzQzREY5NkM1RjEwRDdBRkI0NDgKKzoxMDBBQTAwMDkyNUQ2REI5MTBBNzFDNTZEOEZBQjM2OTNFMjlBMzYzQUQKKzoxMDBBQjAwMDk1OUQwRTcxNzMzNjNFMjc2N0NCRThENzk1OTUzMDVDRDAKKzoxMDBBQzAwMDVGQzY3MTdEODNERTgyRUI3QThEOEZGNjZDQ0Y4NUY3MDIKKzoxMDBBRDAwMDcyNzY4RERGQzNENzQ3NjNGODQ3RjZCMzM4REMyMjkzQ0QKKzoxMDBBRTAwMDlDQTc5OEUyRkM2NTVFNTM3RTIwQ0ZFQkVCMkE3OENFODQKKzoxMDBBRjAwMDA1RjJGMzQ4M0E5NzlGOTkxMkVBRDFFQjkyRTdEMURDREQKKzoxMDBCMDAwMDk4RjlBODNFNTlFNDFGMTE4RjM1NDYzRTQ2RTQ4MThGN0YKKzoxMDBCMTAwMEFGOTlFRjg5Rjg2OUU2OTM1OTJFQ0NGQzNFOTk2MkUyRDEKKzoxMDBCMjAwMDU3MDJGRTI3RTI3NzU5ODlGRkJGOTRCRkU3QUMzNjJCMDcKKzoxMDBCMzAwMEM4NkRCN0Y1ODM2Q0VFMEYxMTM5QzY5RTk4Rjk3NjRFRTUKKzoxMDBCNDAwMEYzQTQ4MDlEMzgzRENDRTY5QjEzNTMzRDVGQzE3M0IwNDkKKzoxMDBCNTAwMEE4MUVFMzM5OUU1QzFGQTJFMzQwRjVDMTE5QUJDRjZGMUQKKzoxMDBCNjAwMDRGMDM3REE2NzI2Njg1N0ExQTc1NDk0RjAyRkREQkI3ODEKKzoxMDBCNzAwMEY1MDFFQzM3RThBOTMzQUE0NzY2RkU4RkQyM0ZGQUJGRUEKKzoxMDBCODAwMDIyRThDRDFCQUQ0N0U2QkNCMTRGQUI3RkRGMDE3QjBFNEEKKzoxMDBCOTAwMEYxODI2NDBGRjI0RkQ4RDM0NkUyRkE0QUVDM0U1NkIxRTYKKzoxMDBCQTAwMDlFREU5REQzREEwNEZCQ0YxQjA2MkM3OERFNEZDN0YwMDgKKzoxMDBCQjAwMDhCQ0EwQUQ4RDc1QTI3RTFCNEE2OTEzRUE0NTc2QjYzRDMKKzoxMDBCQzAwMDc5MTFENzNGRkIzMDgxQkNGNTQ3QTcxMjJGRDgyQkFENDkKKzoxMDBCRDAwMDhERTU0OUQwRjc5ODI3MjE3MEJEMzhCRjkxQkVENzU5MTAKKzoxMDBCRTAwMDVFODhGMTlDQTUxNEFGMzFDRjY3RjE2MDI1QUUyRkY0N0MKKzoxMDBCRjAwMEYwNzM4RjQ2RkMwQjIyRTREMkI4QkZBNTE1OUU0QzhFMzUKKzoxMDBDMDAwMEVFODc2QUJCMThDMkY4NEM0NzgyRkQyRUUyNkFGNjE3REYKKzoxMDBDMTAwMENDRDcyMzg3N0VGMUNEQkQ5MDVGOTFBRkJBMDA1Mjk0QkYKKzoxMDBDMjAwMDBGODdFRDUwREZGNzBCMEZENTYxM0U1QjlERTQ4Mjc1QkEKKzoxMDBDMzAwMEI3MjMxRkI3NkY4NkYzOEUxNjE3QkUxNzM3QkZFN0MwRUYKKzoxMDBDNDAwMEI5QTdCQ0QwOEYwM0Q2MURERTc0QjAwRjlCRDhCQzk1NUUKKzoxMDBDNTAwMDc0NDNFMUQ0MTU2M0UwQTM0MDlEQkYyRTY3NDZFMjdDNTgKKzoxMDBDNjAwMDkyRDUwRTFFRjdFRkZFRkFFRTQ3NjA3RDdCNTBGNTgyQkYKKzoxMDBDNzAwMEZGNTJDRkZEOEUwNjY1NDdGMzBBM0E5RTNERjMyNUVGRkUKKzoxMDBDODAwMDQ2RkFCQ0U3QzYyN0Q2MUU4MjM4RUI1OTE1Mzg0RTdBOEQKKzoxMDBDOTAwMDJGRUVDOTA2M0ZFM0I1NjdFQ0U4N0YxRUY5NzhDRjRGMkEKKzoxMDBDQTAwMDMwOUY2NDUwOUQwM0ZEMURBMTdGQkFDNkRFOUY3RkU5ODIKKzoxMDBDQjAwMDE4RDg5OUM1MDU4QjhCQTE5RDI0ODVFQzAwNzlCQTZFNTcKKzoxMDBDQzAwMEI4RkQxRDM4MTdBMTYxNDA5RDBERjY2NzcxREQyRUZCNDMKKzoxMDBDRDAwMEQ3ODA0Rjc1QkZCMjRGMDdGRjYzRDg1MzAzRTM5OTlEODkKKzoxMDBDRTAwMDFDRDAxRDU0MUVCMzBBNzNCRTk3MDFFRDc4ODk1NzQ3NzcKKzoxMDBDRjAwMEJFRjYxMUUwQUJDODQzMTBCODVFRjg5MzFERjM3MzUyMTMKKzoxMDBEMDAwMDQ4MEM1RjRGMEZFN0E2NjAzQ0IyOEVFNzJCQ0M5NzlCNTkKKzoxMDBEMTAwMEMwM0YzRUVEOUE5RTgyNzFDODNBOTZBNzYwRTZENzYyQzAKKzoxMDBEMjAwMEMwRTlBOTQwNUZDRUQ0OTU3MUU2RUZEQ0JBQkY2QzA4OEMKKzoxMDBEMzAwMDQwRENGNzQ2NUI3MzNDN0UwNzM4QkY5M0ZFQkM3MjM3REUKKzoxMDBENDAwMEY0MzdFOUM3NzYxN0MwRUJBNDA0Nzk5ODc5MEUxRThGQTMKKzoxMDBENTAwMDczNUY1RDdDNDRFMDE5Q0E1N0JCMzUyNkVFNDdGMUZFNTAKKzoxMDBENjAwMEQ3MUMzMTcxOTc2QjZERkY0RUM4RDk5RTBENzE4QUMwMkIKKzoxMDBENzAwMEZENTA0RjE5OEY4Rjk0RjNGODQ4MjJCQTRBQzc4OTVCMDgKKzoxMDBEODAwMDUwMzk0MjNFMkQ4NkI4QzUyREVDN0EwM0JERjZENEU3MjYKKzoxMDBEOTAwMDRDMzVDNDJEODhFRTA2M0I3QjFBRDZFMTAwOEYyOThCOUIKKzoxMDBEQTAwMDM2Mzg2MDFERUUxQzhCNUYyNDkyREZDNUY5N0JFRTNDNkMKKzoxMDBEQjAwMDE0NjNFRjdBQUQ3QTM2RjhCOTNEMzdCRThEN0VEMkZGMzcKKzoxMDBEQzAwMDJFRjkxRDkxQjNCQTVGQjVDMUY5NTlEQjBBMTc0RjA0NkIKKzoxMDBERDAwMEZCMTcyM0M3Q0YwMEZERDcyQUM3NjZGRTc1Q0NDRjRCQzQKKzoxMDBERTAwMDIxNUE1NDlFODUxQzhGOTY0QjA5RkQ1MTIxREY4OUM2REYKKzoxMDBERjAwMDAzQ0E4MTNGMkFFNDNDNTFCOUQzRjM2Rjg4MkJGRkQxNUEKKzoxMDBFMDAwMDdBODZDNkQ0ODMyRjM4MTg3RTA5MzhEOEZDNTI0RTc0OUYKKzoxMDBFMTAwMDE3RDhFMTc5NTlFRkEwREZGQTBBQjdDNzIzNzI5MkQyNDcKKzoxMDBFMjAwMDc3RTdGREQ0RUUwNDlGQjdFMzdBNzlENzQ1MTVDRjU5MUMKKzoxMDBFMzAwMEVGN0E2RUQ1Q0Y2MERFRTgxOUFFNzQ5REMxNzlEQ0VGMzQKKzoxMDBFNDAwMDVBNDJFOUJBMTFGQzg3NDIxQzlGMUUyNTI2NEVGODI3RkMKKzoxMDBFNTAwMDg3RjAxRjhDNzlCREZGRTJGQTYzQkE5RkNEQjM5QTlGRUEKKzoxMDBFNjAwMEYyRkIxNjNFNEZEQzk0RjM1QzMyQ0NFN0I3RjA3RDEzMTcKKzoxMDBFNzAwMDMzM0FENUI4RjMzMjg3MTBBNDMwRTM3NTBCNDBGRkMyODQKKzoxMDBFODAwMDdEQzY3MkRBQzgzRUY0NzYwQkFDMDNERUY0ODJFOTNEMkYKKzoxMDBFOTAwMERGM0Y2RENFODNGQ0JEQzNCNENGQzkzNERGREEyRjhFMDQKKzoxMDBFQTAwMEVERjdGRTEyRTYyNzBBMjU1RUUwNzlCRUZGQzJDRjBEMDAKKzoxMDBFQjAwMDZDRTdFNzA2QkUwOEZCNTlFOTc1MUZFQzY3QTVDRjVGMzUKKzoxMDBFQzAwMDgyRkRBQ0Y0N0UzRkRGQ0Y0QUIyQUZFRTdDNzg3MUFFRUMKKzoxMDBFRDAwMDkzQ0FGOUQwMzYzOTY0ODg4NzhBN0RERTFENzA2RTEyMTgKKzoxMDBFRTAwMEUwMDFCN0NBQ0U5QjczNTFCNDA1RjkyODFDMkY1QTFDRDgKKzoxMDBFRjAwMDNFQkI0QUM3NTVGRDEzQzE3Qzk0NkY5REVENDM3OUQ4MjUKKzoxMDBGMDAwMENFRTc1OTMzOEUxMUU3M0E5QUU5NTJBMzdDNTQyMDRFMkEKKzoxMDBGMTAwMEQ1MzUzNUQwREM1NEM4MDcwQ0U0NjZGNkE0NUREQjYyMzkKKzoxMDBGMjAwMEYwQjRBNjMxQjk2OEU1N0U1QkYwMjIwOTNEMkY0NUNCRDAKKzoxMDBGMzAwMDlGQjg0OEY2NkM2MzcxQjZBMDBDQjgwM0ZFQTIyMjVDQTEKKzoxMDBGNDAwMDNGNDAxMEM3RDUxNzZGNDVGRjBCNzAyMEUwMzIzQzY3NUMKKzoxMDBGNTAwMDJDMTdGNkE1QkU4NDc4QUU3RTc4Q0VCRDBDQjdFOEEzN0MKKzoxMDBGNjAwMDcwREMwOERGNjRFNDEzQzNFN0M1QUZFM0Y5Q0NGNTAzMzUKKzoxMDBGNzAwMEYxRTUyRDlBQzdENERDOTMxRkIzRkZBMDcxMzhEMEM4MTgKKzoxMDBGODAwMEYxOTEyQkY2N0MwNEQ1MjQ1N0U2N0FEMjhBMjUxQzk3NUEKKzoxMDBGOTAwMDA1MDUzQ0RFQzNENzNGQzQ3ODZFNUVEQjg3RjkxRUJEMTYKKzoxMDBGQTAwMEM1MzYwRkM0MTdDQzM4RDE4Q0YzRDU2MkI2NUY0Q0I5QjcKKzoxMDBGQjAwMDlERUQ1QkFEQkY0ODMwM0YxRTA1MjYzMzdBMEU5QkNBQzAKKzoxMDBGQzAwMEYzNzkzQjVDMDEyRkM0MzExQkJDMjZEQ0NCQ0Y5MTJBQ0IKKzoxMDBGRDAwMDJGMzBFMjc5MzNERTU3MDc1NDEzREUwRkIyRjk3MDEzNjYKKzoxMDBGRTAwMDFCQ0Y5M0U3MDlGQTUxQ0ZFRjY0RjE4MTAzNkUwRjkzQTIKKzoxMDBGRjAwMDNGMTI0MkJGQTdDMjZEQjk3NTlCMDdENkE5RDgzRUNDOTgKKzoxMDEwMDAwMEQyNjE4MkYxOTJEMjAxMEZFRUFCQUUxODI0RTFFQjY3MTAKKzoxMDEwMTAwMEUwNzlDMzZENzg5RTkwODk3RjE1MTBFQTREODc3QTNDMDAKKzoxMDEwMjAwMDNEMTMyMTlFQTc5MDJENzA4RTRDQTZCRDQ1MDczRDUwQzcKKzoxMDEwMzAwMERENkI3MURGMERFNDMxNEM2MDcyNjQ4RkU1QUY5QTdDM0IKKzoxMDEwNDAwMDdDMzNBODQwMDU4RkFCODlERkE3OTg2NERGOEI3MjEwRDMKKzoxMDEwNTAwMDMzN0U2M0FFODdBOTVDRUVDNEZBOTY5RkQ3RUYxRjY0MTgKKzoxMDEwNjAwMDc5NkQ2NjM5NDhCMzBGNjEzQ0JFNzI1OEMzRjM5RUNEQUIKKzoxMDEwNzAwMEUzNkUxRUQ3NEEyREYyRkVFM0IwM0ZFMzYyQjI3NzEzNzAKKzoxMDEwODAwMDhDQjM5RDhEQjMxODQ3NTVFRTk0NjExRjA3NTFEODc4RTYKKzoxMDEwOTAwMDg5RjUyRjczRkNCNUNDQjQzRkNFNEM5NzM4MTc2MUJEQTIKKzoxMDEwQTAwMDY2REEyRkM2NzE3QzI1QTdBRTJENjlBRkUxN0NEQTRBREUKKzoxMDEwQjAwMDZFNjc0NkU2NkQ3QjFFNUZDNzYyRTc5OTFFMTgxQzdCNTQKKzoxMDEwQzAwMDFERUI4MDhCOURFRjQ3NUM4QkM3QjE3QjlCOThGRkNENjEKKzoxMDEwRDAwMENGMTEyODJCMjFDOTgwNzNDQTA2MDk5M0FGNDcyRDIxNTAKKzoxMDEwRTAwMDQ3NEU2Q0Y5OTA2MUZGQjg3MzcwNTkzRDlFQzdFODcyMjYKKzoxMDEwRjAwMDU1NDM5Q0FEOENCMEY1NEE3RDgwRTBGQUE1NEVGNkNBMEEKKzoxMDExMDAwMDgxOTg3RTg5NzUxMDk1QzdDNTU0ODlGNTRCRjBDOTRDRjcKKzoxMDExMTAwMERGNURDMzQ2N0ZFODJCNDFFM0JFODczQjFGMzZFRUQzM0UKKzoxMDExMjAwMEY4RDJEQTJDQzNGQkRBNTU3OTg2RjczNTlFOUIwREY3OUEKKzoxMDExMzAwMDVGNzQxQkNGMDlGQTQyQzA3ODRFRDA5MkU2MkE0M0Y5NzkKKzoxMDExNDAwMDQ1NERDNjczODJFRUE4MzM5RTEzRDRBMERGNjlEMjVGRUIKKzoxMDExNTAwMEREMjBERjVENTJERjBGQTFGRjE2QzdFRkYzQzY4QTA3NjAKKzoxMDExNjAwMDk3OEZCNzZFMUM2NEU3MDZBMTFGMTg2N0JGOEI3OTVGNjYKKzoxMDExNzAwMERCMDc5QUMwMEI0NjNERTgwOUZBRDlCOTNBMDM5RTlEQjAKKzoxMDExODAwMDdFN0E3Rjg4NzgxNTc0NzBGOUY5NDEzNTg0OTVBQjcxNTIKKzoxMDExOTAwMEIzRjU5NkVBOENGOEZFQkNCMDgzRTZGNTBBNzFGRTVGMDMKKzoxMDExQTAwMEQ5NjAxRkNBNDFCOUU5QkNCRjUyRjdCQ0I4RTc3OUJFRTQKKzoxMDExQjAwMEE3NzFCQzIwQ0VCRjQ4NzBDRUM1QThGOUZCNkFGQkM3OUIKKzoxMDExQzAwMEQ3OTlDNkVEMUY2RkI3OTRGNDFENzZFNjI0RUVERkQ1RjAKKzoxMDExRDAwMEY2NkIyNDhGMEJDRTFEQTRGQ0U4ODM0NzkzRDk3QjhEM0YKKzoxMDExRTAwMEVBREI5NkI0MDIzQ0U3MjJDMzVFMjlBNTRDOENDNjNCRTEKKzoxMDExRjAwMDg5M0VFQkFBRjJDRUJBNzkxQzlGRTg0QkFFRUFEQ0QyNkMKKzoxMDEyMDAwMDBDQkI4N0U5QkZDRUYwRDExNjQ5MEZDMTM5NzlFNjc1MUQKKzoxMDEyMTAwMDUzOTVDRkE3OTMyMkVDQkMwQjFGM0ZFRjIyNjkwQkQxNTQKKzoxMDEyMjAwMDBCMjk4QjgyOTUwNEQ3RjE4M0I5RjZEMDY2MDlGMkM2RjMKKzoxMDEyMzAwMEQ5N0VEMkQ2MUIyRDM4RkZCNDBFRTkzQkUwNzcyRERBRUMKKzoxMDEyNDAwMDZFNTQ3MDNGNjM4REFDNjE3OTM1OUJDRDRGM0VDOEIxMTQKKzoxMDEyNTAwMDg3N0M4OUQ3RjQ2NkMzMzkxREVFNEQyRUQwMTNGNTI3NTAKKzoxMDEyNjAwMEVDN0RBMkZFNzQ0RTU2OUJFM0Y5MEJDNTI5NENFRTRGNjQKKzoxMDEyNzAwMDI5NEQ4NTI5MjgxRkJBOUJBRDQ3ODRGMERDMzM5MTdGMjcKKzoxMDEyODAwMDlCMjhFRjk2MDI0NzE3REE2RDIyRjAwMTFCQkZFRkMxRDIKKzoxMDEyOTAwMDdBNEExQ0ZERjVBNzMwQkZEODU3Mjg4NUFDOTA0N0JBQ0QKKzoxMDEyQTAwMDk0ODRBQzYzRjg5NTlENkU0QkRDNzhDNjREMjlEQzVGNjkKKzoxMDEyQjAwMEJFN0MwNUNGQjM1M0M1Rjk3QTU5RUM3Q0JENkVEM0I5NkEKKzoxMDEyQzAwMDk1MzdGMTdFMUU0QUIxRTNCNTNCNjcwRkRCQTc2QTNBNUIKKzoxMDEyRDAwMDFGQkRERUIzOTJDNEUyNTk3MUNFOEYxQTc5MEZFMzRDNzEKKzoxMDEyRTAwMDI3QzczOTVGNDRBQzNGNkRFN0ZCOTdBQjJFNUE5QUUyQjQKKzoxMDEyRjAwMEQxRkY2MThBODI3NDNDQUY1OUUzRjZFRjVCOUNERUNFOEUKKzoxMDEzMDAwMDY5NUUzQzU3QjVGNTQ5MEI5RUEzRUY3M0I3NEVDMUZEMUYKKzoxMDEzMTAwMEREMjk1RjIzMkNERUM1RThBRkU3N0FFQTczODczNjkzRDEKKzoxMDEzMjAwMDE0NUNBNzdFMUE3RTI3NDQyREIxNDEyQzhGOUNCQ0IxNDIKKzoxMDEzMzAwMDA1Q0Y4NUREMEU3OTczMzlEMUZFQTU4ODc1RUI5RDg3QzQKKzoxMDEzNDAwMEVBRjI4QUQ5RjlGMzEwRUZBOTFENjA3OUU1MEI0Qjc2MjMKKzoxMDEzNTAwMEYxM0M5MjdFRENBRjY4RkU5RDkyRDJCQTgwMEVGM0YyMzEKKzoxMDEzNjAwMEMyQzZGMDY2QzQzRjVFOEYxRjdGQjc4NDc4MzdFMkVGNTYKKzoxMDEzNzAwMEE4OENEQTU3QTkyMUVFRUExQzY2NzJERkY5NzM2RjM3ODEKKzoxMDEzODAwMEZFMEU4ODVCRTA0NkJEQjEyNjMzN0EzRTU4RjlEMEExMDcKKzoxMDEzOTAwMDJEQjAwNDYzM0UxRkNDN0NCRTkwRjBDQjU0MTNBRTE0MzIKKzoxMDEzQTAwMEZFNTgwMzA5MUQ1NkE0RDE3MUU2NDRGRUQ4NjMyOTFDREEKKzoxMDEzQjAwMDhGREM0OEZEMzEzQUZFNzdEOTU4M0VBRDZGQkQ1NDAyRkYKKzoxMDEzQzAwMDRFNjNEMjdBNjkzMkQ4QUYxRkYxNzE3QUIzM0M4MEU3QUQKKzoxMDEzRDAwMEI0QjQyNkQ4Njc3NzY5QTQ1QzE4RjczMzc1RTYwNERDRTMKKzoxMDEzRTAwMERFMzFDQURGOTQyMkIzN0Q3OTk3RDlGOTFFQUE5REU1MzMKKzoxMDEzRjAwMDcxOEQ1Qzc5RkU4QjkwRUI1OTRFMUI5NjJGNzEzMkJEMkYKKzoxMDE0MDAwMEE4QjhGMjQyRDY1OEYzNjdBOTJGNDBBMDNGRDRCRUM0NzMKKzoxMDE0MTAwMENEMEY3QjMxODVFRDQ3NTRDM0VDOUMwQUI1RURCREVBOTkKKzoxMDE0MjAwMDc4RkEyQ0Y0NzA5RERBQjQwRkVDQzcxNjY5NkQyODA5QjAKKzoxMDE0MzAwMEVEQzBENTlGNUY3OThCRkNEOUVEQ0Q2NTREM0Y5QzQyQ0EKKzoxMDE0NDAwMEZCRkY5QUY1NDcxRUQwOEZDRDAxRTNFRjRCODlFQjZCODUKKzoxMDE0NTAwMDVBQzA4RUZDNzcxRjcyODBCRjc5M0UzOTcwMUNFODg2QjcKKzoxMDE0NjAwMDc4MzdFQzIzRUM4Q0JDNjg0NzdCNkFFMkJCQjk5RUI1NEQKKzoxMDE0NzAwMDRFQzY3N0Q1QzNERTkzN0ZEMzNEOEI2M0UyMjQ3NTRFOTIKKzoxMDE0ODAwMDg5Q0YxRkZBNUI0MEQ3NENBQkZFMzZCNEYzNDg2NUZDRkUKKzoxMDE0OTAwMDc1Qzg0Q0E1RjIxRDc4NUZBOTM1RkQwMUFFOUQ5MUREQTMKKzoxMDE0QTAwMDE4M0Y0RTRFRDZGRjA3N0M1RkFFRThGRjBFQ0ZGRkM5NTgKKzoxMDE0QjAwMEFBRjczMzNCNURFRDNBNTMxMERERDc5MDY4OUM2MUUxQUMKKzoxMDE0QzAwMEUyNEM0MTJDQkYzRTFCOUYzM0VDNEQ0MzZDOUNGNTgwOUUKKzoxMDE0RDAwMDc2OERFM0VDQTRENzJGQzFEQzQyOUZGNzk3Qzc1RjZGRUYKKzoxMDE0RTAwMEZGMTE5NzI3QUE2Nzk4QUYyMEY2QkRGOERDNDQ4RjM3MjUKKzoxMDE0RjAwMDdGODlGMjc0RkM2NTI3RTZCNTA3OUIyMEFGRjNFNDE0RkYKKzoxMDE1MDAwMDBCRDkxRDYzRTdDNDc5MDVBRDExRTYxNzVFNzg0OERBOUIKKzoxMDE1MTAwMENERkM0MjgyRjczRkZGN0FDRTZFNThERjVEM0E4REVCMEQKKzoxMDE1MjAwMDMxREY3NzcxRjc0M0M2RkREMEEyREQzOUE5N0NGQ0M3NTYKKzoxMDE1MzAwMEQxQ0YzNjVFNkU3MzJBRDNDRjFGQTRCMjc4RDg1NUVCQzUKKzoxMDE1NDAwMDY3MDZBQjQ3RThBOUFBQjBFQjVEMkUyNjVGRUZBN0IyMEUKKzoxMDE1NTAwMEFCMkQ0RDEyRjlFQkQzODEwRjU0MEZGQjUzQUU2RDdDQzUKKzoxMDE1NjAwMDlFNUE5MkY3RDlFNTQzRTg4M0VBMzVFNkU3NkRFM0ZBNTgKKzoxMDE1NzAwMDIyRUMxNUE1QjNENEM5RUM0NTIwRjlEQUU4Q0MyQ0ZENTIKKzoxMDE1ODAwMDFDRTQ1OEVDM0Y5MDFEOTIyMTFFQkVDMEM5RTM5NTVDM0YKKzoxMDE1OTAwMDdGNEYyOUZBNDJBMDkzRUFFRjFEMjg1Rjg5RjU3Nzg5RUEKKzoxMDE1QTAwMDkzRTlFRjE3OUM0NkZENURFNjY0RkFGQjQ1MjdEM0RGMjAKKzoxMDE1QjAwMDY2RTc2N0QwREYwRkI4RkVGODc5MUM5RjFDMzdEQTFEOEQKKzoxMDE1QzAwMDhBOEJFRjgxRkFFQjE1ODlFRkU3MjY3Rjk0NjJGQzhGMTcKKzoxMDE1RDAwMEZBODEwMEQxRDk2NEY5NUMyQzZFQTBGODU1QzdGRDFCQzcKKzoxMDE1RTAwMDZGMUFFQjdCOEI4RjE3QjU2M0Y3NDNCRDZGNDFGQkI0NkQKKzoxMDE1RjAwMDNGOUJGRjNCRTMxRkYwRjFDNTM4N0EyOUY4MjhEQjVBRkYKKzoxMDE2MDAwMERDQjBGRjM1RDEzQ0I3QzBDOUU2MTlCRjhERURBRjIwQzYKKzoxMDE2MTAwMEM3NjhGQjQ1ODZGRTdDMTdGODM3RDI5RjIwRjVFQ0UyQzEKKzoxMDE2MjAwMEY3MjcxOEI3M0Y3REM2RkE2MkZBRjMwOEQ0MkJGQTUzQUUKKzoxMDE2MzAwMDcxRTVGODk4RkFFODEzRkFFODBBQ0IzMDZGRkI5NEY4RjIKKzoxMDE2NDAwMEYzNDJBRjkzQ0REQjFGM0FGNDI3QTE3RUIzN0M4OUVCNDUKKzoxMDE2NTAwMDNGNzI3RDQ4QjQwRkU2OTQ1MkY5OEZDMEVGNTI4NUQ5OUUKKzoxMDE2NjAwMDQxQTI4NUZCRTU5OEZFOTUxNkI0ODg3RTA3MkNCMTcxRTIKKzoxMDE2NzAwMEI2ODFGODc2RjIxN0NFMTFGQkYwMEI5NEJGOUQ2Q0RGQUMKKzoxMDE2ODAwMDBFOTVFQjVGQzJGRDVEMTM1Q0NCNzA5RkQ3NDdDQzZFQjAKKzoxMDE2OTAwMEJFRjVDOTdBNkIxQTZEQTczOUUzODlFRkMxRjUxRDY3RUQKKzoxMDE2QTAwMDFBRDJEQjMyOTRFQjg0NjFFODJGNjdGQjFGNUIyN0IzMTAKKzoxMDE2QjAwMDczRDM1QTI1RTNGOTY5RUZGMEY2NkVFMkY2RTkxQUY0MEUKKzoxMDE2QzAwMEZCQUQ1Q0Y5RDNFQkM3NjdCNTBCOTQzRjI3ODRGRDRDQUEKKzoxMDE2RDAwMENBQkIzNkJCMzRGQjczNjg3RkU5MzQ4MkY4Qjg3NTk3QjAKKzoxMDE2RTAwMDhBRTc2QzA5QkRCOTBCQzY5NjlENzdBMDQzMUVDNTU3MDYKKzoxMDE2RjAwMEU5QkQ4NURFMEY4MUQzMERGNjJBOUIxMEY3NEMyQzE3MjAKKzoxMDE3MDAwMDU0RjEzQzA0RkQzRjk4M0REMkNGQzA5NURBQTEwRkI4MEIKKzoxMDE3MTAwMDFEMUE4MDJCQjU0MzY3M0Y4QjFEM0FFQzY0NzZBODhENkMKKzoxMDE3MjAwMENBNTAxRkM4QTExMjYyRjlCRERDOUZBQUU3N0QyRDJEMEEKKzoxMDE3MzAwMDM4NkM4OERCMDk3RkFBNzM2MEI3MTY4NEJDQzEwMkI2MTcKKzoxMDE3NDAwMDFGMzU1MUJCNjFGMDM3MjA3MTI1QzFFRjU2ODlBQkZGQzIKKzoxMDE3NTAwMEM5MTU3NjcwMDIzNjUzNUMwNzcxNTRGMTNCN0E5REQwRkYKKzoxMDE3NjAwMEJFMDZFRDU5RjA3NzdFNUUyMzMyQUVDMzlCRUI2QjlERDgKKzoxMDE3NzAwMENBRTdGRDE0MkVDRjkzNTdBMjdGNjVGRTFEQkQyQTc3QzEKKzoxMDE3ODAwMDY4RkI0QzVBOEZFRkQ4REQ2QzlGRDVFNUJCQzlCMjIyMDAKKzoxMDE3OTAwMEMwMjcwMTAyRTc2REFBRjQwQUY5OUI4MkVFNjlBOUQ3NzYKKzoxMDE3QTAwMDkzRDhERjIzNTY4OUE0Q0MyQjhDREE5MUFBMDgwOTU3NDkKKzoxMDE3QjAwMDE0MjNCRUMxRkQ1QzUwOEY4N0Q3MTMyODgyRjkzRTREOUMKKzoxMDE3QzAwMDgxRjVCRUQ3MTJGQzFFRDM5MzcyNjA3QTZBNENGRDdFRkYKKzoxMDE3RDAwMDYyQzQyQjc0RkNBRjRGOUQ4REUzN0YwMzk0QTNFMzVGNDIKKzoxMDE3RTAwMDkwQ0FFNkExMUJFMUY5NTkyN0IzN0Y0RkNBNEQ4NUYwOTYKKzoxMDE3RjAwMDNDOTBDMTk2QTA2OUY5MjI1RTdFNDZFQUU3MjAyNzlCQ0QKKzoxMDE4MDAwMDA5RkJGRDVEOTBERkQ4RjVFQUREREMzRTc0NEMwQzk0RkQKKzoxMDE4MTAwMDQzM0JENTNGNUZENDMzODU3RUIyQkFCRDA1Q0YzOUFFRTkKKzoxMDE4MjAwMEI4MkVGMkQxMjlDOEJGQ0Q1MjcxM0RCMEY1NTFFMzNDN0QKKzoxMDE4MzAwMEYyMUNGRkZFNDBBQTg4REY1RDFCOEVBMEY2QUYzRTE1QUUKKzoxMDE4NDAwMEU5NjNGNjJGRTg2NkJGMzNEQTMyMzlGNzMxMDYxRkE5QUMKKzoxMDE4NTAwMDgzOTkxOTNEQkZCNkRBQjUwOENGRTdGQUM2MEIzOTMzMUQKKzoxMDE4NjAwMEUxQkMyQjk1REJFNzc5RUU2RTc1MDU4QzZCQTQzRjZFQzIKKzoxMDE4NzAwMEJFRTk1NzQ2RUMyMEI1REU4Njc5MkFGRTM5MkZGN0E3NTgKKzoxMDE4ODAwMDMyNUM0QkY1RjhBQjdDRkNFRTAyM0E1RjlDQTgwNzUyNDkKKzoxMDE4OTAwMDY3RkZEN0Q5NDc2MTg3MDIwQUIzMzdENDZGMEE4MkRGNUYKKzoxMDE4QTAwMEI0RUNEMkRBMjMzMDREMzU5MzI3NkE2MDdEODNDQUU1RTQKKzoxMDE4QjAwMERGMDE5RDVGQjZFRjNEQzI3RTdBMzAzODA1REFBNUYyRDIKKzoxMDE4QzAwMEY4NzAyQUIzNDc3RjlGQ0FFQ0QxNzc1Mjk5M0RGQTg3QzcKKzoxMDE4RDAwMENGMjI2N0Y3QTY5MjMxRjFBN0MwRTEwMjdGNTMzQkJGNDkKKzoxMDE4RTAwMDJEOTVFMTRGOEZGM0YzOTkzNzc2RjJGQTAyQ0U2QjlDODgKKzoxMDE4RjAwMDM3QkVGNDM5QjQ0RkYxQzZDRjUwNUYzOTFGMTJFMURCNjgKKzoxMDE5MDAwMDVGNzBCOUZBNjVBQTg4RkJFOUJGMDRGRTJGQjRFQkZGNEMKKzoxMDE5MTAwMDlDMUE4QjM3MEE4RkZEMTFGMkU0QTI3OEEzNUJFNjc4NUMKKzoxMDE5MjAwMDQzODk4RDY3RkIyOEZFRTI3OTc1Rjc1OEU2NDRGNTQ0NTQKKzoxMDE5MzAwMDhEQzRDNzIxRjM1MzQ3NzA0ODA3OEVGNzc2ODY0M0U2NzgKKzoxMDE5NDAwMDhGRDBFRDFEMDg4MTFFNEVFMUZBRkUzQjY2OEY1QkQ0MDEKKzoxMDE5NTAwMEZFN0JGMDFDREM3NDQ2Qjc5NENFQzZGMTI4RUZDN0JCMDMKKzoxMDE5NjAwMDUyNEFEQ0Y4RTZCMTY4N0JDN0IwQkRGNUFDM0REOTcxMzEKKzoxMDE5NzAwMDJCRkJERDBGNjE1N0FDMTJCNjIzRTJDM0YzRDNEOTc3NEIKKzoxMDE5ODAwMEEyOUQ3OUZDMkE3MEFBQjk5RERGNDZEQkY5MkRCNkYzM0EKKzoxMDE5OTAwMDkwRDgwN0FDQkYwNUY3QkUyODVGQzNCMTdDMDVGQjYyREEKKzoxMDE5QTAwMDk5MTNDMzRGOEVFQjEyRTFCODE4RkVCRDg3NzZBMDhENTgKKzoxMDE5QjAwMEI1MzNDMkJGNDA3QzNCQkJDQzI1MEIzOTE5NDgxRDQzMTYKKzoxMDE5QzAwMDNFQ0U3MUY5MzgxRjk1OEZGMzVDM0UzRTRDNDU3Q0MyOEMKKzoxMDE5RDAwMEM2RTFBRTA5QzZGREU1QzM1Q0FGMUVFMTdDMTJFMzY1NUUKKzoxMDE5RTAwMEE2QkY5NUJGMUZFMTg3RTdEODczQjFCOEQ2NTc5MEI2QTkKKzoxMDE5RjAwMEFDMTlFMjk2NkRCMkQ3RTIxOTJENkZGNDVGM0VFMEREQ0YKKzoxMDFBMDAwMEZGMDVDQzUyQjFFRjAwODAwMDAwMDAwMDFGOEIwODAwRTIKKzoxMDFBMTAwMDAwMDAwMDAwMDAwQkU1N0QwQjYwMTRENUI5RjA5OTlEMjYKKzoxMDFBMjAwMEQ5RDk0REIyOUI0Q0RFMUI0OEMyMjY4MDBEMUE3MDA5RDUKKzoxMDFBMzAwMDIxMDYwODNBNzlGMjBBMTAxMTEwMTQ2MTc5ODVGMDRBRUEKKzoxMDFBNDAwMDIyNjJFQkYzNjczMTIxM0NENUU4NTU2QjVCQjQwQjgyMjYKKzoxMDFBNTAwMDYyOEIzNjYwQUE4ODAxMzcyMDg4RUZEMDJBNjhGNUI2RjUKKzoxMDFBNjAwMDQxQUNBMDIyNTk1MEVCREFEQUYyOUZFRjNCNjdCMjMzNzgKKzoxMDFBNzAwMDlCNURDMERBRjY3QUZGM0ZERURFQzMzOTczOUVERkZCODMKKzoxMDFBODAwMEZCQ0UzN0IzNDU4NEZEQzkyN0JEOTIzQjk3OTBCMTdFMEQKKzoxMDFBOTAwMEEyN0E2RDg0OUM4M0JGQUI4MkE1NTUxMTA4NDkyNjY0NDgKKzoxMDFBQTAwMDk5NUM2NTU1ODZEMjAxNjVGNUNFQUE4MTg0QjQ5Nzc0OTgKKzoxMDFBQjAwMDJFQTkwQUQzRkZCNjA0REE5RkY2OUI5RUJFQTkyQ0Q5QTUKKzoxMDFBQzAwMDQ5RkI3QjY4N0IwQTIxQzMxREY0REYyMjIxRDdENUI0RjMKKzoxMDFBRDAwMDhCNkVEREI4RTk5RjdFM0M0RjBEMzNDRjRGMTI0Q0I4NzMKKzoxMDFBRTAwMDZFQzMwQ0Q3MjE2NzNFOURDNjYxNzI2RDI1M0RGQjM1RTcKKzoxMDFBRjAwMEM3Q0JCOERFQTg2Q0FGMTQ0N0ZCQkQ3OTg2Mjg5QjY5QkQKKzoxMDFCMDAwMEJGRUIyNjBCQUE5NzlFQUI4MjlGQ0I5NkMwQ0U5MUE1MkEKKzoxMDFCMTAwMDQ4RDg1RkU1RkIxQzI1NzdDRTBCNzc4RTdDRkU3Q0I0MjYKKzoxMDFCMjAwMDkzQTgyRDc0OUVEMTBBNTE3Nzg2RTk1NzA4RkI4NDc5RDIKKzoxMDFCMzAwMEEyQzNDRjMzOERDRjMzODZCMDc5NDI5RkNGRTBGQjFBNUIKKzoxMDFCNDAwMDU1MTI3RUZDMDgzRUZGMzRDNzhFRjIwNDAyRkJEOTY0QjYKKzoxMDFCNTAwMDA2RjhFNTk5RDU2MTBBMURCNzM2MDIxRTUyQTQ5MjkxODYKKzoxMDFCNjAwMDgwQUYyODBBM0E3MzFFMjEzM0U5NTgxMzlENjAxNkUwQUUKKzoxMDFCNzAwMDlDOTYwRjhBRUU1Mjc4RUVBNkUwNzBFNDAxMjU3ODdBMDIKKzoxMDFCODAwMDAxNUU0QjZDNkExOUI0NDc0N0FCRTUzMEZGNDg0OUFEN0QKKzoxMDFCOTAwMDgwRjI5NzY2NzUxNEUyOUZGODA4MjkyMDY0MDJBNzlGRDcKKzoxMDFCQTAwMDA5NTY5QjRGOENBNUZGMjgzNDlGRUFCNEIyQjY3M0Q5NkYKKzoxMDFCQjAwMEYwRkY2NzI4MUY1RjQ2ODg0MDdDQzJCOUNCQTBFRTE1QjYKKzoxMDFCQzAwMDYxRkVFMUNFNDNFRjBBQjRGRjcwNkREQzQ5Mjk2NDVDMkQKKzoxMDFCRDAwMEJBRjI3MTBDQUY4QkI4MkY4NENGNkVGMzRGOUQzNjUzOTIKKzoxMDFCRTAwMENGNzM2QUU1NkU5QkRCMEE3MDM4MURFRDlFMDlGQjZDQjYKKzoxMDFCRjAwMDcwNkNCNjM5MjlCQzVGNzVCNzU4NURCNEZENjQxQzQxODMKKzoxMDFDMDAwMDM4NzZDNUE4NkU3Q0JFOUJENEI0RDA3NjMxNDZBODZGMUEKKzoxMDFDMTAwMEQxQzE2RkJFQzJFMDVEQUQzMEJDQkQyNUE5RDU3MEZFOUYKKzoxMDFDMjAwMDA5NTY3NTAxOEM5QjlDNDlGMTQ0RTc5RDk1RDhCOTVDOTgKKzoxMDFDMzAwMDBGRjc3QThFQTc4NTlDNkU2N0NBQUM1RkU4M0VBQkY5NUEKKzoxMDFDNDAwMEYzMjI0OUYwQzRDMDlFNkM4NzNFMTI4MTNGNDhGNzVGODMKKzoxMDFDNTAwMDNGMTNBRDhGODU3RjUxRkUyOTNBQTk0QzlEOTY0NDcxNjMKKzoxMDFDNjAwMEI2NDY3NDk5Njg1RENFMTFDMkYyRTk5RDdDQkY5NDRGNkYKKzoxMDFDNzAwMEVGODRGRDEyMjdFNTUzM0JBNTBGMzkzQzdEN0NDNUZCNjYKKzoxMDFDODAwMDk3NDdBMENCM0M3RTlFMzI3ODFFNjZGQ0E1OUNBRUNCQ0YKKzoxMDFDOTAwMDkyREE0NTQyQzcxNzcxN0UwQkVEMzczNzQxQzQ3RTBEOEUKKzoxMDFDQTAwMDJFMzIzQURDM0MwRjA0RTVDQjAzNDg1RjBBREI3NzlFMUIKKzoxMDFDQjAwMEI5RUEyMUE4Q0Y1MDBFOTdDN0QzRTZFMkJCOTNBNjkyMEMKKzoxMDFDQzAwMDI0ODA4Nzg5NThCMjEwNEU1NjQyRTEyNDcxMzhEMTZENzQKKzoxMDFDRDAwMDEyQTgyRkIzQjJCQTE0QkQ4NEM0RDEzMkQzRTE1RDNGOTAKKzoxMDFDRTAwMDA4RTBENzY4NzYzOTY5RkRDMzkzMUY4QTg0RDJEOUQ2QjQKKzoxMDFDRjAwMDA3Q0UwQTg0Q0E4QkREN0U0MjEyQjM2MDFFMTk2Njg0NDkKKzoxMDFEMDAwMDNGRDMzOUExRTc3Q0Y0OTk1M0QyRDZBM0EwQjlGMjI0RUEKKzoxMDFEMTAwMDUxMkQ5NDdFQUYyQ0Y0NEYyMkIxODZGMUU0MUM5RENGNUYKKzoxMDFEMjAwMEU2RUZGMDA4ODAzRjJCRjFDNDVDOEU2NEZDNzZCRjE0QjQKKzoxMDFEMzAwMDlDMTVFNzRCQTVFQkMyNzlFNDJGODkxN0NFQTMzQURDQkIKKzoxMDFENDAwMDk1NjQxMDIxRjFGRUNFNUZENDYxQkJDRDM1MEFDRjQ1M0QKKzoxMDFENTAwMDZDQzA2RkMxNzMyRTQzRkVEM0Y2MjVEQjNBMUZCQjk3RDEKKzoxMDFENjAwMEY2NkZGQjJBREE3NTE3OUNEQjVGRjEwOURCMEZGMUQ4MDAKKzoxMDFENzAwMDgxQUZDNTRBMTdDODc3NDIyQ0I4M0YxM0ZEMEZGODZDRTYKKzoxMDFEODAwMDY0ODBFRTM3ODdFRjE3MTZDOUQ3RUQ5RkY0M0NDRjgzRjkKKzoxMDFEOTAwMDYyRDUyMUMwQzcyQzJCNTE2M0YzNTAzRUJDMDJGNUJFNjcKKzoxMDFEQTAwMDY2REE4MUMyQjE0OTExQkMxRURBQUZFOTgxNzk2QkIyNDIKKzoxMDFEQjAwMDQwNUU2RjkwNUNGRDA5RDAzOUQ5MjU1MDNBMUY0MUQ3NUMKKzoxMDFEQzAwMEJEODVDQTFEQjk5MEQ4MTQ1QTk3MURFQ0ZDNEQ3NzI3RDQKKzoxMDFERDAwMDZEOEExMUUwQjk0NDY1MjEyREZEQkU2RjA0MEE4NzU4NTQKKzoxMDFERTAwMDQ3NzVBNTQyQ0YyMUYzRjEwMjA1MUM4QzE3OUMwQTk5NzcKKzoxMDFERjAwMDkxMDc3NERCMjExMjk0MEYwRTg0ODdDNjNGRUE4Rjg4MDcKKzoxMDFFMDAwMEYwQjExNTU1MEQwMUZBMkE5Mzg4Qzc0QUZCMEIwRTM2MUYKKzoxMDFFMTAwMEVGOTVDNDJGOTJCRTgwMDdBQTA4Njg1OTQyNUM1OERFMkQKKzoxMDFFMjAwMDJCQkEzRjA2QkVCMUNBMTRBRjc0RkY1NjkzRDVCQjUyNEUKKzoxMDFFMzAwMDAwRkM1NUJEM0UxQUUxNUVBNjdDOUMxMzk0Njc5MUU0QkMKKzoxMDFFNDAwMDEwNDBFRTYzMERBRUUyRjc5NzdCRTVDQkMzRjNENURGMzEKKzoxMDFFNTAwMDgyN0NGMzM3MjY5Nzk5NUU5RTlDQ0RFNENFMDE3QkU3OEEKKzoxMDFFNjAwMDBDM0RERkFGNTI5OERDNTlDNUM3MTE4OUYxRDkzMjU5MDEKKzoxMDFFNzAwMDM1QzU5Rjg3Q0ZEN0YyNzE5NzgyRjIwMTdENENDMkYzQUYKKzoxMDFFODAwMDcxNEIzQzkzMDc5M0VGRjIzNkY1QTJGMDlCOTAyMEI4OEMKKzoxMDFFOTAwMDQwMEY5NzZGOUYyREY1NzYwNkZCQTU3MjdEQTdBNEE4MkUKKzoxMDFFQTAwMEYxRjEzMERGNkVENzQ5NkYxMjY4MUYxOUY1N0JEMzdCRDQKKzoxMDFFQjAwMDY0MUFDQzNGOUJDQkNGMDA5RkY3MkZGMTZDMUZFOUJDN0UKKzoxMDFFQzAwMDdFNENCMDRGMEIwNzk3Q0NGODZFQjg2NEMyQjk4ODlCQjQKKzoxMDFFRDAwMEMxNDU4QzE5RUNGN0QxNzU0ODZGQkU4RTU5QzA3NURBQzMKKzoxMDFFRTAwMEIzOTk3Q0NDRTZGQkQyRDZFOUMzRTUxRjk1RkI5N0MwM0UKKzoxMDFFRjAwMDNFMjc2NzdBRDNBMURGQUI2NkI2QkZEMDc1MDcwNkQ3OUEKKzoxMDFGMDAwMDFEODhFQjJFNjFFQjhFMDUzOTBGRkNFRjNDRjQxMkM4RjcKKzoxMDFGMTAwMEY5MjI0RUE3NjNGRDZFMDI3NjBGRjBCMEE5MjAyOEVGREMKKzoxMDFGMjAwMDY1QTc0RkFDQTdFRDQ1MTFFNEZDRjBFMDNBQzM3MTlEMDUKKzoxMDFGMzAwMDdBODZDNzNEMjlFQTA4RDgyN0I1MEI4QUEwQkQzRDVCNDQKKzoxMDFGNDAwMDQxNzlGOTY2MkYxM0Q5NENGOTcyNzY1QUY2M0QyMDM2NEQKKzoxMDFGNTAwMEI1Nzk3NkYyNzNCNjY3MzUzOUU2NTA3Q0M5N0VFMkIyNjAKKzoxMDFGNjAwMDIwOUREN0EwREMyQkUyRjJBNTYxQjc5QkMwNzM0RjJGNTkKKzoxMDFGNzAwMDJBMzM3NUUzNjVGRjFDMkJCMUUxNTFGRTcxNEVFQjRGMjcKKzoxMDFGODAwMEY5QThDOTlGMURFNzBFODMxN0FENUNCRjgyODkyMkUyQzUKKzoxMDFGOTAwMDVDOEFFMzk2RjE3MUExRkQ2QzBGRUU4QjgxRjkzNzQwRkQKKzoxMDFGQTAwMEZGMUYxMTMyOTFFQjFCN0E2MERDREY1OENFM0IwREZFMzgKKzoxMDFGQjAwMENEMzE5REI0REZFRTlDQjk4NkZERTA3M0NBNDc0RDM5NDMKKzoxMDFGQzAwMDhGQzU4MEJERDQ5NjQxRjUwMEM4QTk1NzQ0OTQ5MzRENjAKKzoxMDFGRDAwMDc2ODZDN0E2QjQ2QUEyQjc0NzRCMUQzRUYxNjM5OEU3NjEKKzoxMDFGRTAwMERCQjk2NDJBQzU1RjkxQzM0RDJFQTFGMDVEQzdGNzUxREYKKzoxMDFGRjAwMEU0QUFGNjA4NDlEOEZFNkMxNDlENjc3OUZDMjUwODQ3QzkKKzoxMDIwMDAwMDM5Qzc0RDJBNzIwMTJFNUU1MjREQzdDQjhBNEY3NEQxMEIKKzoxMDIwMTAwMDdBQTk5RkY4QUVDQTg3RkU1NENFMEI2QzNFQTc1RDNGRUYKKzoxMDIwMjAwMDBGNjk4MTc5RTQ1QzQ2MEZCMkJGODUwMEZDNzY5RjNDNjYKKzoxMDIwMzAwMDNGMUM2MzcyNEMwNkY5QURGMTI1QjVFQjU2MDAxRDk0QkIKKzoxMDIwNDAwMDI5NTc5N0M1RDNGOTE3NkRDRkNBMTNFOUZDMTU4RTc2QkEKKzoxMDIwNTAwMDc5NEUyRUNBNkQwRkQwQzdDRTY0NzU2NUZDRkZBMDNEQ0EKKzoxMDIwNjAwMDM3OEQ3OENEODBGNzUxOTk0QzBGNENBODE1QkM5QjI5MjIKKzoxMDIwNzAwMDdDOUE0MkVDODQ5RkM2MzMzRTJDMENDQUJCOUZFMUJFQzcKKzoxMDIwODAwMDBCMzUzQjQxRkQzOUQ0Q0Y2MzA3M0YwQUYwMzg4RjFEMzQKKzoxMDIwOTAwMEJDMDU5RTg3QjE4M0I3NDIzQjg1RDdFM0YxQ0MwRTdFNkEKKzoxMDIwQTAwMDAyRDZBMTc2RjBCNkVGMDNCNzA5MEE5M0EzRDQwRURERUEKKzoxMDIwQjAwMDAxRjNDNjgzNzEwM0Y2RDExRjk4M0QxQUJBRkZEQkY4MEUKKzoxMDIwQzAwMEY5RDdEMEIzNzYwMDVENEE1RTg5RDEzOUUzRDNFMTlDN0MKKzoxMDIwRDAwMDRGQzc5RUE0RkM5MkRCOTNGRURCMjhGRDdCMjhGRDlENzEKKzoxMDIwRTAwMEE1NzY5Mzk4MTU5OTlFN0MxN0M5OTdDNTBGMzJCRTZGMzgKKzoxMDIwRjAwMDcwRUM0M0JFN0I5MUYzNDUxQjVGQkYyRDQ3QUMwNDdDNjYKKzoxMDIxMDAwMEJFNEE0NDQ1MTQ3QUNFRDc5NEUxNzY4MDVDMEZFNTNGMTEKKzoxMDIxMTAwMEY1NUIyMzNEOTczQUJDMUJGMjgwNkYwRUNENzVDMUI2QkYKKzoxMDIxMjAwMDQyRjk1MUE2NjVGNUMwRTBCRThGMDMxRjBFRDVDOTI3NDEKKzoxMDIxMzAwMDIyNDhDODhGMTdFMDQzOThDNzNEMTBFQzhDNzg0OUNERjIKKzoxMDIxNDAwMDA1M0U2MkVCN0EwRTg5QTgyNzIyRjExMUE1OUI1MzgwRTgKKzoxMDIxNTAwMEJGNkVCODAwQjA3NUZCQTc3NEYzMzkzQ0E3N0M3NkZBNjQKKzoxMDIxNjAwMEZCRDBDQjFBNEUxRkQ0MEZGOTFBRTZFQjFGQ0ZFODY3NEUKKzoxMDIxNzAwMDc2MDRGRkUyMUZGMUREN0VDMDNGQTAzRjk5QzFGNDUwMUQKKzoxMDIxODAwMDY2QkM5MzhEMjM0OTMyRTgxNzU1Q0NDODA0Rjk0MkU3NjEKKzoxMDIxOTAwMDM1MjVEMEY2QjdCODdGMTQ2OURFQTg4NDZFRkU4QjRBNjkKKzoxMDIxQTAwMDgwRjNEQ0MyRTYzRDA0NDZGNkQwOUVGMzhFNEFBMEY2RUMKKzoxMDIxQjAwMDQ3OTg3OUQyQjgxQ0JGMkU4MkJGOTBDNUZEMTI5MkRCMjIKKzoxMDIxQzAwMDZEOUZBNEMwN0E1OTlDNkY3NjI3QUI4RTA0MURERjE0RDcKKzoxMDIxRDAwMDcxQkJFNTY1QzFBODk3NzNCQUZEN0RDNjNGNDkwOUFDREYKKzoxMDIxRTAwMDNGOTlENzNENkY1NjgyMEU5RTlBMUQzMDlCQ0IwNzZENEYKKzoxMDIxRjAwMDlFRkU5Q0ZGOUMwOTBBMUI1RkMzQzZDNzQzOUQ4RUFCMTYKKzoxMDIyMDAwMEUwRkUxMzg1NEIyRUNDNDdBQ0VDRjk4NUZDQTI3QjE0ODkKKzoxMDIyMTAwMDE5QzdDRkU1RkIxMkUyMTU0REJGMjE1QzQ3NDdGMkJCNjIKKzoxMDIyMjAwMDgyNzI3MDM4RTJDMUM1RkE1RkFBMTAwREVGMjM3MTFGRTgKKzoxMDIyMzAwMDk1NkMxRjg1MEFDMzdCNjhGQzIwMTI3RTM0RjgyNzZCREYKKzoxMDIyNDAwMEU3Q0Q2MUYzMTM0RjM3REM0NkVCRTkyNTEyRENERThBN0MKKzoxMDIyNTAwMDYzRjZDNTI4MEUyN0QyQzhFNzA5OTEwNzc3NEIxRDU2QUMKKzoxMDIyNjAwMDI1Q0MzOUFGOEQ3NzFBRjhEOUVFMzJDQTg3NDhGMTk0NjgKKzoxMDIyNzAwMEJDMjA3QzY2MjIxQ0YyRDlCRTIzQzU1NzBBRjg3OTQ3RDgKKzoxMDIyODAwMDcwRkI5NjhFOUI4RjcwQjVCMUZEREVBMzc0QjdEN0UwNUYKKzoxMDIyOTAwMDdDRTk2Q0JFRkEyMEJDMTc2M0JCODNGNThGRTRGN0Q3RUIKKzoxMDIyQTAwMEYzN0Q1NTI3NzQ4RjVCODZFQjI0QjE3MUExRjEwNEFERUEKKzoxMDIyQjAwMDVDQzJGN0I3MzAzOEVFNTY1Q0FGMUYxQjk3MUNEQ0M3MEIKKzoxMDIyQzAwMDFERDgzRTlBQjU3RkRGRjg1QjMyREZFRjRGODJFQkFFNzEKKzoxMDIyRDAwMEMxRkRBQUVDRkM4MUI4NkVCOEFDQzdGNjIyQjY2RTI0N0MKKzoxMDIyRTAwMEY5MTE4ODYzRTc2OEUyNzBCRTEyRkM2MjNBNDc3QzgwQUQKKzoxMDIyRjAwMEU0NDg0OUUwMzU0NUJCNDZEMTJFQTkwMUQ1MDdGQUEzRUMKKzoxMDIzMDAwMEU0NEJEOTA5NzJCQTVDQjQ3OTA0MkE4RjI1QTcxNUZENkMKKzoxMDIzMTAwMEU0Mjg4OUE4RTBEN0I2N0ZGNTYzNDc2NzJFRDY3REEwNkQKKzoxMDIzMjAwMEQ3NTc0NzE1NUJDMUVGNUM5MzI1Qjk0MDFGMTZERjI3RDAKKzoxMDIzMzAwMDMxRkZGQTk0MDlFNTdEODVCODA0RTdEOUE3Njg3NkVFMDAKKzoxMDIzNDAwMDhEMDYzRkRBQTkzODJCQTM2MDFGNTY5MTM4OTlGRjVGOUQKKzoxMDIzNTAwMDM5OUUzRUJGOEFDQkVCN0RENjQ0MTNDQzM3MjI4M0M1NTIKKzoxMDIzNjAwMDBCQUU3MjU2QTNCRjRFQkU2NTdFQjQ0QUZGNjNGMjVCRUUKKzoxMDIzNzAwMDQ1QkQyQ0YzNzE1MjdBM0QxMUIwMzRGQURCMzJEOTcwN0QKKzoxMDIzODAwMDQ2MUM4NDdBMDFFREE4MTE3RUEzRkYyRDNCMkI0RUMwODUKKzoxMDIzOTAwMEZDMzJEMThEQTNFQjNFOUY2MDRGNDI3QkFBMUZFOTdGQTkKKzoxMDIzQTAwMDhFRjI4RjI1NDcyMDE2RUE1Rjk0NEJFRTNEODA4NzMxRjEKKzoxMDIzQjAwMENFNkFBNTg0OUVDNzkyRUVCNjgyMUNFRTY3RjZGNTg2QkQKKzoxMDIzQzAwMDc4NDI2M0JBRUNGMjAwMUIzRTUwNjZDRDAyN0ZBQjk5QjcKKzoxMDIzRDAwMEZBRTcwODA3MzVFMUVBODE0MTNDNTk4QTU0MDI3NDQ4MUEKKzoxMDIzRTAwMDcxODJGQ0Q1NUREQTU4OTk5MEM4RjBGODQ5ODIwNUNCMjYKKzoxMDIzRjAwMDEyNUVENzlFODdFMjdENDg2MjM0RTM3RjYyRjU3Qzk0NkIKKzoxMDI0MDAwMDAzNzI0MjIwNzE5NDBFOTc5MkNFNENBMEM3RTQzNDI2RkEKKzoxMDI0MTAwMDlGNkE0RDlEMjk1MEVGMjJGRTk0MjQ1QTM2MzQ0QkEzRDcKKzoxMDI0MjAwMEMzRjkzRjFCNzlGQzZDQUQyOUJDQkRGNDRCRjM5ODBGOEQKKzoxMDI0MzAwMDAwMEUxMkM0MEQyRUM3Qjg4MERCRDIzNzE4M0ZEMEVDODcKKzoxMDI0NDAwMDU1MkQ4RTEwQzk2RUJENTdBQ0ZBMThFNjExMTRERjM3NDIKKzoxMDI0NTAwMEQwQkZBN0ZERUJDMTdENDhFOTRDNEU2QkE1QjY4Rjk5NjcKKzoxMDI0NjAwMDg5OEM3RjFDODk1Njg0Q0ZERTNCNEFDOTFDMjdFMkU5NTAKKzoxMDI0NzAwMDJDRjAyOUM1RDNBMTJCMDAyQTU5RjMxNEMwRDMyQjU5MTIKKzoxMDI0ODAwMDBGRjU4M0I4OTQzNUVCODEyNEUwQ0ZEMTg0RDlBN0U1NEIKKzoxMDI0OTAwMDc0OEM4Mzk2MEZEOURDREYyNEU4RTRFMTk4N0VCM0QxMTUKKzoxMDI0QTAwMDZFMkFDQUFDNDc3QjZBNzUwNEJGRjRDNzdDMUYxMkE3QUIKKzoxMDI0QjAwMDkzMTI5QkRCOTQzODE0RTI1RkNCQUMzMDVFNTJBQUEyM0QKKzoxMDI0QzAwMEExREMxQjk4ODQyNUI1N0JBNTQ0REE3Rjc1M0FBQjVGMDgKKzoxMDI0RDAwMDA4MEZFRjcyRjkxMDY5RkZBMzQwMkY0MEJDMjZCREZCMjcKKzoxMDI0RTAwMDFDMDkzMDNGN0RFRTkxRjM4MkU3RDBFRDJGMjVEQ0ZFMTUKKzoxMDI0RjAwMENDODk0QzFGNjlGQjkyRkE3MUJBQ0MzMUQyREQ3ODRFOEYKKzoxMDI1MDAwMDhGMzk4OTlBQkY3OEQxNzQ3N0U0NjJFODJFRjRCQzYzN0UKKzoxMDI1MTAwMEIyOTY4RjFFNDA4MkZCRDdDRUFCOUQ5RjlFRDcwNUU3MUMKKzoxMDI1MjAwMDJEOTdEOEY5QjcyQTZFMTVBNkEwNzAxRTBDRUQzRENFREEKKzoxMDI1MzAwMDY1MERBRkY3MzMxMjREREZGNTNDMEYyNUY0QkRGOEYzMTEKKzoxMDI1NDAwMDdDODc3OUE3MjY3RTA3MzgxRDE4QTkzQTQwOUUzNDI2MzUKKzoxMDI1NTAwMDUzRkFBNDc4NkExNDU4QTlGNThGRTY3ODZBRTE3NEZBRjgKKzoxMDI1NjAwMDVERTQ0NEZGRUY3MEJFNjI4N0YwMTJFOEMzQUJEQ0M3RTYKKzoxMDI1NzAwMDRBNjE5OUIyQTJDMUEwNzY4MDFGRTcwMUJEOTVFNERFNTEKKzoxMDI1ODAwMDI3Q0RBMUY1QTYzQkU2QTJGQzNDMzBCMjFFRjdCRERBOTIKKzoxMDI1OTAwMDZFRENBRjU2MjY3MDdDMTQ2NUFBQzg3RjhEOUNGRkNBN0UKKzoxMDI1QTAwMDA5RjMyM0I1N0U2REZDNUNBMUZDMTEzQTVGMjg1RjNGMDcKKzoxMDI1QjAwMDY0NTM2RjA2RkE0ODQ4NjRGQTMyRThGRjc1ODg3QUZGNzgKKzoxMDI1QzAwMEFGODRFQkFGOTFENjlCMENGMThGOTFEQ0ZGNUJGRDY1ODcKKzoxMDI1RDAwMEI2Q0Q0MzBGN0E5NkVBQjU3Rjg5RkZGNzBEN0QwMjdFNkYKKzoxMDI1RTAwMDUyN0E4OTU1RUZGRjM1NUE0QkIxN0Q3NTg2M0FGQUYyMkEKKzoxMDI1RjAwMDI0RDBDN0EyRUIyRTgyRjA0MzdGRDAyMzg4Q0FENjMwRTYKKzoxMDI2MDAwMEZFRTBFQTBDRDk3NzE1N0Q2RTUxQzhFM0IwQkY1MkFBM0YKKzoxMDI2MTAwMDJGMjFGRTYyNTE1NDcyQzlDMDlFN0VFMTNFNkIyOTgxMUEKKzoxMDI2MjAwMEI4Qzk1OTg1M0MwQkZFRDg4NUNFRjM3OEEyRDEyRjk0M0EKKzoxMDI2MzAwMEMwMkZFNEYzQTM1RkE4RDQ5MzRFOENGNzk0MTJCMDZCMzEKKzoxMDI2NDAwMEEwREQzOTEwRTQ4RTRBREM3NkQwMjNENDJGRDRDOUE3N0MKKzoxMDI2NTAwMEIzRDY5QjkwREY0M0Q3QTM3MkVCNjlBMEEzNDY4NUYxNjUKKzoxMDI2NjAwMDcxQTgzRjI4NzIzRUQ3RTQ2QzI4M0Q5NDNCMThERDQ0QTYKKzoxMDI2NzAwMEQxQUQ5Qjk5REM3ODJFMzFCOTI3NUQ3Qzc3RjkzNEFGRTkKKzoxMDI2ODAwMDBDNUM4MDZCQzlDQTAzRTBBQTREMDlGODI1NzA3OTk2RTUKKzoxMDI2OTAwMDI3M0FCMTVGOTU2RDQ3MjMzQ0Q3RTYwRkM1MEYzREI5OEIKKzoxMDI2QTAwMDBBRjE3NEIwNjc1OEZDODZEQTZCRDQ4RTMyNTM3QjZEQjYKKzoxMDI2QjAwMDlEMTA1QzdGMzU4Nzc3MjQ3Q0FDMDY3RDFEODY4RkRFODAKKzoxMDI2QzAwMEVFOTY2QkExNzFBMjlCOENGNzJGOEE4NzI0MTVCMEI4NjgKKzoxMDI2RDAwMDNFMDkwMzdGOTFEQjQ5NkIyOEJGQzBGRENENkFCM0NCQjgKKzoxMDI2RTAwMEExMDA5RDY2MTRCREVCMDY3RjNFNDNDNkZCMDgyMkQ1QzQKKzoxMDI2RjAwMDNCQUVCNkY3M0NFNzFBODg5Rjg1RDlERjE3ODkwOTA4RjIKKzoxMDI3MDAwMDU3NkJCQUM5NjA5RjExNzJBN0MxN0U4Qzc0NkVDMkY3RjUKKzoxMDI3MTAwMDY1RTZFNzEyMDA5RTM5N0E3ODg2OUNCQjRDQzE3MzgzQ0MKKzoxMDI3MjAwMDU5MEZGM0M2OUE1Q0M0NDdGOTIyMzY5M0I4NTA2MEM1NzYKKzoxMDI3MzAwMDlBMzAwRUFCRjFCOUMyRjk1QzkzMDczNjg1OERBQjRDN0MKKzoxMDI3NDAwMEVBQ0JFRUY3NDQ5QjVGQTRFNzVGOUY0NEVENjkzQTRGMDUKKzoxMDI3NTAwMDgzQkEwRkY1QUEzNjNFOEU5RkRGMzY5MkM1MUI2RDc2ODMKKzoxMDI3NjAwMDlGQTI4NDgxQzNCRDlDQ0YyMzlEQjM1OTk1RTJDQkU4NDIKKzoxMDI3NzAwMEZFRUU1NTk4RkQyRDhEMzQ1NTc5MzExRUM1RTJCNTBBMTIKKzoxMDI3ODAwMDg3OUQ1ODlDNkYwNUJCN0Q1NDUyM0M4QjdCQTkzQjE1QTQKKzoxMDI3OTAwMDdEREM0QUU0RkI4OUIxRDNGRDlDNDc0RUFFMEREOTRGOTkKKzoxMDI3QTAwMDU0NEU2NzE5RUM1RkNBNTI5NTc4RERGRTRCOTIzNEJERUEKKzoxMDI3QjAwMEQyODFGQzFENjlCRUJCQjk5QzhGRUFFN0MyRjhBREQ1REEKKzoxMDI3QzAwMEU2RjJDMUJENTY5NDVBNUQwMDYyMzEzQUM3NDVFNkVBNjkKKzoxMDI3RDAwMERBQTNENTgyMjExNjFEMUQzNjY3Qzg2MUVGMjM2RUU3ODcKKzoxMDI3RTAwMEVCREIyNUI1MEFDNkQ5MTU4OUMwM0Q5OTlEREJDQjkxOTgKKzoxMDI3RjAwMEU2OERCNDhGMEJBRDM3MkQ4OUU5RDMxRUVCMzlDM0RCRTIKKzoxMDI4MDAwMDE1N0Q5MjE4RkY0OTIzNzc1NjgxOUMyNjAzMjVEMjNGRDgKKzoxMDI4MTAwMDhDOUU0ODQ4NjJGMjI1NTZFRTc0ODJCRjRFRTlEMTFENjcKKzoxMDI4MjAwMDZFM0U5MjI0NzM3RUZFMzdGMTg3NjY3NzE3QjcxRUNBMTUKKzoxMDI4MzAwMEE2RkI2REIwNDkyRTAxRTQ1N0UxQzkwRUE3MEUzRTU0MjgKKzoxMDI4NDAwMEFGQ0Y0QUQyQzk3REQxRTY0NkY5MjYzQUQ5QkRGQjY4NTkKKzoxMDI4NTAwMDBCRjNCNzBGOEMzNERFOTNDREU3RjhGQTgwQzMzMTkyRDcKKzoxMDI4NjAwMDVDMjhFMkYwRjg3NzlERjNCQkUyQUYyNDg5Qzk3RDBEQzcKKzoxMDI4NzAwMDJFQ0QwMDE3MDJGQzc1N0Y2MzQzMTg3OTQ5RTFEMzkwOTAKKzoxMDI4ODAwMDk0RkNEREUxQjM5NkMzRTVFOTBCQzA2N0QwN0YxODNFNDkKKzoxMDI4OTAwMDE3RTJFQjIwOUY3OUM5RjEzMDcwNkNCMENCNjk3MzBERjIKKzoxMDI4QTAwMEZDREY4Qzc2NDhCODdFRDVCQUYzNDZFMjQzOEQzRTIwRjUKKzoxMDI4QjAwMDc3MDNFMUQwQUMxQUUyMDI3MjkyQTc4M0Y5OTUzNzFCMzUKKzoxMDI4QzAwMEY1OUNCOEM0QzVFNTMzRjk5NkMyMkQ5RUY3OEZCNzExQjQKKzoxMDI4RDAwMDVGNEM2QzcwN0VCOUNDMTg0RjY4NEJFMjcxODEyODEyNDYKKzoxMDI4RTAwMDA1RjAzOUVCOUEyNDQwOUU4MkM1MzQ2M0IwOTIwRDRCQkIKKzoxMDI4RjAwMDM0MEJBMDI3NTI2MDlFNDE4NERDQzdFNTY3QTgxRTRDQkMKKzoxMDI5MDAwMDU2OTk5RkRDOUJENDBCNENBRkE0RTNGRTkyRjgzRTQyNTkKKzoxMDI5MTAwMEY1NjAxQUY1NkIyMDFFMDM0NzA0N0ZCQTM3QUQ1QkMxMjMKKzoxMDI5MjAwMDA2MjEyQURFODMwQjFFMTNGQUNCMEVFMjE1NjBGRTc0MUQKKzoxMDI5MzAwMEQyODk2NTFGNDg0NUEwRjM2NzkxMEVBMTFGQzVERjdEQjEKKzoxMDI5NDAwMEU1RDU4MzQxN0VCRjEzNzI4RTBCRDlBMzVBQTlEOTFGMzcKKzoxMDI5NTAwMDZCRkY0M0YwRkVGNDdGMkZCQzU3OTZFQUUwMkQyNjdGRjUKKzoxMDI5NjAwMDNGNzhDRkU3NzIyNzM0OUU1NzA0RjFCQzJDODhFN0Y5RjMKKzoxMDI5NzAwMEY2MDM5RkNBREYzMkZCQTNGREVGMzJDNkY3MUFCMzU4NDYKKzoxMDI5ODAwMDNDQUY1Q0FDN0MxOEVGNDE5RDMyQkExRjUyNEVFNzdBRTcKKzoxMDI5OTAwMEM4NzNEMkVDNEVENDc5N0Q4MzcxM0ZFQjk5RkIyNTg4QzcKKzoxMDI5QTAwMEEzMTBFOTI0QzIwOUVGODY5QzI4Q0YzMjkzNTFERTMwNzAKKzoxMDI5QjAwMDNCRTIyQUJFN0YzOTZCOUUxNUVFQkQ4M0ZFOTM0RjY0Q0EKKzoxMDI5QzAwMEY2MDZCMzk3NjQ0RTA3NDU4RTEyRjQ1RjFBQkYzREJGRkIKKzoxMDI5RDAwMERENzFCMTdFRDI1RUU5MDBERTVGNkJGRTUxODM3RjBFNUEKKzoxMDI5RTAwMEZBNEJBMUUzN0M5MkVGN0QzOEJGQ0YyRjNCMjFERkE0RDAKKzoxMDI5RjAwMDhEREY4QkI1OUQzOTY4ODhEMzg2RkE0MTlBNUQ3NTE1NTAKKzoxMDJBMDAwMERGN0ZBOURGN0RFODcyQjhERjUyRTYxMDE2REY2NDcwNjEKKzoxMDJBMTAwMDkwRjkzQThEOEVCMzc4MEZGRUUyQjcyNkY0QjdDRTcyRjYKKzoxMDJBMjAwMDdGQUIwOEZDMkMzQkYzNzdBQUVEM0RDRjM5MjEzOUJDQjUKKzoxMDJBMzAwMEZGMDRFMzIwQUZBRTU0RjE4OTYwQ0Y2OUZFMTNCNDNCQ0QKKzoxMDJBNDAwMEVEM0RGREE3RDExNkZGNkJCMEJGMDlBRjg5OTgxNzEyRjYKKzoxMDJBNTAwMDA5QkVBMTdFNTNBOEZFOTk5RUNDRjRDRTREQzlEQ0FFMzIKKzoxMDJBNjAwMDBCODFBNzE2RUYwQkJEOTc2RUQyRjg0RkYyMDg3QUZFRDYKKzoxMDJBNzAwMDBGNUQ1RkRFMzcwNkY3NEYxNDVEM0MzNjNCMTg0RjE0OTEKKzoxMDJBODAwMDU0MEZCOTI1MkYxODNGMEMxMzM3NUMwQTc0QThDNTBERDUKKzoxMDJBOTAwMDM1M0RBNkQxQjE4NUY2QjVFMjNENzNGODc4NjI1QkQ2RDcKKzoxMDJBQTAwMEMxQkVDQzJGN0MyOTExRjhCMzVDNjE3MTIzNkQ3RkQ0M0EKKzoxMDJBQjAwMDJGQkMyRDU5ODc4RjIyM0ZEM0RCOTZGRjUzREZCOTkyNkUKKzoxMDJBQzAwMEMyOTcyNDEwMTdGMzBGRUE5RDU2NUFBRjUwNDhFMjNBQzYKKzoxMDJBRDAwMEU0MzMxQkU2NjkxNTI1MDlDODc3OTIyRjBBRUIxNUE3ODEKKzoxMDJBRTAwMDVDREUyODVBQjdFQzdCNDUxNDkzNjBCRDM5MjQ0QTA4NTQKKzoxMDJBRjAwMEQyOEY5NkQ3RDFFOEZGNzAzREUwRUZFQzI5Qzk3NTNFNDMKKzoxMDJCMDAwMEJGQkIwMjgyNjgwNjNGMjkzQTg4NEY5NDZGMDk4NkZBNTQKKzoxMDJCMTAwMDQzOTJGQkExNjRCNDE3N0IwNUM3ODk5MDBGOTY2REM4REIKKzoxMDJCMjAwMDNGN0I0NjUyN0YwQTcwOUQ2QTU1MUZDNkZFM0YzQ0JDRTQKKzoxMDJCMzAwMDZGNEZDNjc4RjFDMTdGMEFFRkMxNzU5ODNFMDA5QjhEM0IKKzoxMDJCNDAwMEE0RTlENkIzRDFDNjYxQjA4RTkzREQxNzZBNzFFOUU1MDkKKzoxMDJCNTAwMDA0RUY2M0I2MDFDRTIwQ0VGMjM5RjE0MjlDRTUwNUYzRDUKKzoxMDJCNjAwMENCMjJFOEEzMjYzRUNGNzBEMkVDOTRGQkIyRkQ0MkJGNEQKKzoxMDJCNzAwMDI3QjczQTM2MDE1REZDMkUzOTBCRDc3RkMxRTZERTMwMzAKKzoxMDJCODAwMDk4QjYxRkRBMjIwRDg2Qjg0RDgzRjMxOTJCRTRDRkVFRTkKKzoxMDJCOTAwMERCREE5NERFQTlFM0JGNDM0RkJBRkI4NEYzMEZCNTkyQUYKKzoxMDJCQTAwMEZFQzU5OTBBRjE1Q0IxQUM1NDQ1OTMwM0RCNDVBOEY3MjcKKzoxMDJCQjAwMEIwQ0ZCNkI0MkFCMENFOTM1QkFERDNDMkM1MzVDNDE0ODIKKzoxMDJCQzAwMEM2RUZDM0I3MzBCQjc2NzQ4RUM5MDVFMkFEODg3OEE0NzIKKzoxMDJCRDAwMDA0Qjg4RjcxMTE5NzhGMzZDNDBDRENEOTgxMzY3MDk2OEEKKzoxMDJCRTAwMDg4RjcxQUI0QkUzRjk2RDY2Mzg2QUFFODFGMEMxOEI4QjkKKzoxMDJCRjAwMDEzQzcwRkY4QkNDNEM1RjIyODNEQjYzQzVBNUY5RjUzQkIKKzoxMDJDMDAwMDMyNzQxREFEQTc0N0JCM0YwNkZBQTI3QUE2NTk0MjdEOTIKKzoxMDJDMTAwMERBMTIwMzc5MDAzMTAzMjcyNUFGQTNCNTE4ODE1NDg1NTMKKzoxMDJDMjAwMEIzNzNGRjlBQ0NFQ0VGMjdDRDFBNUMyNUNDODNEQ0I3Q0QKKzoxMDJDMzAwMDU1NDZGRTNBOTQyNkUyRkQxMzg1REIxMkE4RkYyNTJEQUEKKzoxMDJDNDAwMDg2NTA0QTI0NjVBQUE3MENFMDU4NEU1QTFBQzA5RjJBRkIKKzoxMDJDNTAwMDczNUVGRDUyMkNGOTI3RTA5N0JGNTMwMUZFNUYxRkMxNDEKKzoxMDJDNjAwMDBFRkYxRERGMUYwQTExNEEzRjA3QjczNDVFNDdDMkU0NUIKKzoxMDJDNzAwMDUxNkI3NEY4NUM4QzJBQTVEMEZFNkJGOUJEMkU3MTRDOUIKKzoxMDJDODAwMDQyRkE4OThDRUZCQjk4QkZEOUUyNkI4OEE2NzAxQ0JFNTQKKzoxMDJDOTAwMEJEQjk5NzdFRkUyMzEwNzQ0REVFODk2RkM4N0YyNjk3Q0QKKzoxMDJDQTAwMDQzRkVBRDFCRjM2OTFCNEU5QTEwN0VBRkU2MEE1RTgxQjAKKzoxMDJDQjAwMEMyRTc2MDhFNDg2RDM2QkFBQjdFNTY2RjdGNUFERkMwNzIKKzoxMDJDQzAwMEU5Qjg3MkZCRTFDNjVFQzBDMjI5NDlCOEVFQUIzOThGRTQKKzoxMDJDRDAwMDU5NTk3RUVCQzVDN0FGODc1MDNFNTgwNEY5NTMxNDFGQUUKKzoxMDJDRTAwMEEzOTQ2OEFGOTNFMjZCMzE0QzQxRUIyMzE1QUJENzQ3MEMKKzoxMDJDRjAwMEQ3NkJCNzc3OTRDNkQxMjU1RTQ4MTY1QzlCODE1RTcyMTAKKzoxMDJEMDAwMDg4MDJGMjAzNUQxMDEzNDM5NDQyRUIyMDMyOTA5RTkyQUUKKzoxMDJEMTAwMDA4RTY3M0FEMkZDOEREMEM3MUIxNzVFOUNFMTZDODM3NjIKKzoxMDJEMjAwMERDMzNEMDhBRjk2NkExRjlDNDdCODRGQTk3RTIyMTJFQkMKKzoxMDJEMzAwMDE1MkZBMEJDM0U5OEYzM0JCQ0E3M0I5ODZFMjE0MEFGM0IKKzoxMDJENDAwMDk4RjA0QjlGMzcyNjMwM0U4REM5MzdEQTlGRTUyOTU5RDkKKzoxMDJENTAwMERDQ0YyNjFFNEI0MTcwNUYzMUZEQUM2QTE0MjVBNDk3NzEKKzoxMDJENjAwMEUzRDlGODQzRkQwNDJGRDBEQjIxMjc5NzBGRjRCQzVCOTgKKzoxMDJENzAwMEMxMjA5MjlBQTVBOTAzMjNFM0Y1OTVGRUEzOUM5QTVEMzEKKzoxMDJEODAwMDJDNjhFNzM0RjUzQ0M3MEI4Mjc3NEQzNjlDNjMwMDNERDkKKzoxMDJEOTAwMDA3QUREQjczMDQ1Q0RGQUVBQ0JCOTE2MDU5QjgwMEVFRUQKKzoxMDJEQTAwMDMxNDNGN0JGMjI4NUY5NDczMjI1QkIxQzkwNkYyRDZCNEQKKzoxMDJEQjAwMEM2RThGMzYzRTRDMjFCMjdEODYyMzE4RjA5RURDQUQ0OTkKKzoxMDJEQzAwMDFDMDFDRjMzRTYyNEJCQ0ZFRDkxOUZBRDEwQjc2Q0MwOTMKKzoxMDJERDAwMDBGQjUzQTUyODJGM0M1N0NGOUVDNEYyMEZGNzc1Q0ExMjYKKzoxMDJERTAwMEUwOEI4MkZERjBGQzY2RkE3RkVEQTA1RkU0N0VCMzU5RDQKKzoxMDJERjAwMEZFNzVDRTI2M0NDRkQ4NDJCMzBCRUU3MkM2REFCQ0NEMDAKKzoxMDJFMDAwMDI1QjRGRUNBMjcxMkM2QjNDN0Y1MUI4NUY5RDVBMUVCQjkKKzoxMDJFMTAwMEFGNTM4ODZGMzQ4NUVGMkJCOTEyQzIzQkVBOTJDNzcwNkIKKzoxMDJFMjAwMDlFMzc3MzREMjg2RkM2NDEzRTM2RTQyRkVCRjNBQTUxMEYKKzoxMDJFMzAwMDFGMUFGM0I5Qzc4OTFGQThDNUQwRUM2MkZDNEEyNDRGRkEKKzoxMDJFNDAwMDJGOTBFRjEzMUM0NkY4RDk0RjFBRUY4QjJCRjMyRDg2REEKKzoxMDJFNTAwMEZBQjg1QzM5NDQwRjdCMTBERTJGNjczMEJBNzg3OTgwN0UKKzoxMDJFNjAwMEUwREQ5QzE1QTRCM0IxMjcxM0JDNDA2N0YwMjcxNjE4MEEKKzoxMDJFNzAwMEUwNjgzODY3OEM1RjU2MDE3RTg3MDYzQ0YxNUY3MDRGRDMKKzoxMDJFODAwMDEyRTM1QzdEMjNERTgzNzNGODZCNzQxMkMzRjE2RTRGMjMKKzoxMDJFOTAwMDdGRUUyN0EwQTczNEY4ODdEMkMxQzVFM0ZGRUFBQTYyNzQKKzoxMDJFQTAwMEMwN0ZCRTc2N0YxRjgyRkYxMDdDNjMwQzUyM0I0N0RGRTIKKzoxMDJFQjAwMDlFNzhDN0Y1QjM3QUUyNUJBMzgzMUVFN0JFQkI3NTRENzAKKzoxMDJFQzAwMDM2QzVFQkFCNzZGQTAwRjBCQzQ5RjZERTI1MDRGMTc0QUEKKzoxMDJFRDAwMDQxQkNGNjJCNDZCQTU5QTczNERCNDBFRTQ3NUQ3MkRDQTUKKzoxMDJFRTAwMDA2RkU4MTQ2MTc0NDZDQ0JEN0RCRkJGRjJBN0M5NzZDMzAKKzoxMDJFRjAwMDEwOTgzM0U5MTJCQzEwRDc3QjBCMUUwRDBCQUVGMzUyQUEKKzoxMDJGMDAwMDRBNzdCRUNDNEIyMEY3NDkxNUNCRTM2ODUwRjNEODdCMEEKKzoxMDJGMTAwMDU3Rjk0QzlGODZDQTg3M0ZBNEIwRjczQURBQ0QyRkE3NUUKKzoxMDJGMjAwMDlGMkY0RkI1RDJFNjI2NzAzRkQ2MDBGOTc2RjQ3Q0YyOUIKKzoxMDJGMzAwMDg2RDlGMDQ2MDM5MTI3Q0Y0Njc5NDkzNjA4MkMwRkExNTAKKzoxMDJGNDAwMEU4RjcyOERGRTczOUJDQUI4NDMwRUJBMTI1ODNGQjc0QkQKKzoxMDJGNTAwMDMyQkJCRjI4MTFGQjkzNjk1QTVFNTJENTA3QjhGRkM5MkYKKzoxMDJGNjAwMEFDN0VCMUZCN0FFMzVGQjRBRkEzOTQ1Njg4Q0VGRjlDRUUKKzoxMDJGNzAwMEM4RTNGMjlBREQzREMxQzZGMjBFMjcxNDg5ODg4RjM3NjcKKzoxMDJGODAwMEI3MDg1RUNDOEZBNEZEM0M5NDRFMTY3MUIyOURDOEVEN0YKKzoxMDJGOTAwMEMwQjM4NUNGMzQwRDc2ODIzREE4MUFFQzRFQTFBODFEOTIKKzoxMDJGQTAwMEVEQkVCODQyQTMzRjE4QUY0NjFCRjA5RjM4M0FDMTUwNjAKKzoxMDJGQjAwMDRGQUVFQTY1RTg5RjNBMkREQjE4NTc3MDVGNkE3OERFRkUKKzoxMDJGQzAwMEJCMjZDRjUwQ0ZBODFGNkVFOERGRTc5NjEyNDMzRENCNUMKKzoxMDJGRDAwMDMzRDZEMEJGRUY5QTQ5ODY3QUZGRTZFQjBDRkQ3RkY0M0IKKzoxMDJGRTAwMEYwMUNDM0YzMDFERTQ1ODZFNzk3NkQ1QjY2QTgwRjZDQTYKKzoxMDJGRjAwMEI5Q0REMEZGRjI1RDc3MTk5RTBGRjZBRDMzM0MxRjcyNEQKKzoxMDMwMDAwMEU4N0U0MzdENjhDN0NGMERGREFGNzg3N0IzRTFGOUIwQjcKKzoxMDMwMTAwMENFNUYxOTlFOEYzOEI5RDM1MDFGRTlERjZERTg3RjU1MTkKKzoxMDMwMjAwMDYwOUZBMTVFNEM1RTMzRjQyRkI1RkVERTUwMkY1N0RFNUQKKzoxMDMwMzAwMDM3RjQxRkU1Mzg2RTc4M0VDNkY5OTlFMUI5NDYwN0UzRTMKKzoxMDMwNDAwMDcyQkUzMEI0OEY3N0ZEMkRFNDNEOUQyQTE2RTc4MDc4NUYKKzoxMDMwNTAwMDQwNUY3OEQ0OEM2NTM0Njk2MUY3M0FBNDAzQ0I4NTA1NjkKKzoxMDMwNjAwMEVFRTI1NEUwOEY0NzNENEQ5MDkwRDRFMEYxRkYxMUFFNzkKKzoxMDMwNzAwMEE2REYyQ0VDMUJDN0VDMjc5NUU4RTVBNzk2OUY0QUZEMzkKKzoxMDMwODAwMDE2NEYxNDI1ODVEODAwQTVEQjIxOTRFRTAyMDI5NjRBM0UKKzoxMDMwOTAwMDgwNEFENjQ0ODhGNzQ0NjE5OTEwNDhDNEY2QzQ0MDNDM0QKKzoxMDMwQTAwMDk2NDk4MURFRDg5RTFDNDhDMzMyMjVEMDE3Q0JENDQwMjgKKzoxMDMwQjAwMDE2OTY4RUMwNjU1OEE2MDUwNjYwRDkyQjMwMDRDN0Y1NTQKKzoxMDMwQzAwMDBFMENDNjMyM0QzMDAyREIzMzAyQzNCMENDMEM5NDYyMkUKKzoxMDMwRDAwMDdCOUY0MDMxOTZDRUMwMzgyQ0IzMDI2M0IwQ0MwRTVDREYKKzoxMDMwRTAwMDgzRkRGQTA2QUVDNkIyNUZFMDdBNkNFRjFGOTg4RUU1RkMKKzoxMDMwRjAwMDI1ODFCOTU4RkUyODMwMUJDQjlDQzA2MjJDMDcwNDE2RDIKKzoxMDMxMDAwMDYyNzk2OUUwMjYxQzc3NTlFMDQ2MkM3MzAzQjc2M0ZCQUMKKzoxMDMxMTAwMEMwQzBBRDU4MEUwQTM0NjA3OTc5NjAyNTk2QUVDMDdBODkKKzoxMDMxMjAwMEVDMzczOEIwMTZDQkJDQzA3RjYxRkI5MEMwN0Q1OEU2NTEKKzoxMDMxMzAwMDA3N0U4MUVENDMwMzNGQzNCMjIwRjAxODk2NTcwNDM2NTMKKzoxMDMxNDAwMDYxNTkxOEY4MzU5NkMzMDI0RjYyMzkzQ0YwMEM4RTFCNUEKKzoxMDMxNTAwMDExRDg4MTY1NTFFMDA1NkMxRjE5NzgxRUNCMkIwM0ZCM0MKKzoxMDMxNjAwMEIxRkRBQTQwM0I5NjZBRTAzNTZDMkYwRUJDODI2NTQ5RTIKKzoxMDMxNzAwMEUwRjdEODVFMUEzODhDNjU1OUUwN0Q2QzJGMEZCQzg3NUMKKzoxMDMxODAwMDY1NDVFMDM4OTZBMzAyQzdCMDFDMURGODBDQ0IzMTgxMTEKKzoxMDMxOTAwMDRGQjAxQzFCRjgwMkM3OEQwQjlDQzFCMjMyRjAzNzZDQ0MKKzoxMDMxQTAwMDFGMUZGODA2Q0I2RTc5MTczMTVGRDk2RDQyN0Y5NkZCRjIKKzoxMDMxQjAwMEE5OTFGRDA1MEZDQTQ5MzM3RjJGMEU3MkFCMzFGRkJGQjYKKzoxMDMxQzAwMDVFRjA2MkJDMzBBOUYzMjVBODlCMEIyRDE4MkZCQzgxQTMKKzoxMDMxRDAwMEY4RjEzRDgxRkYyNjlENzY5MEE3RURDMzRFQTQ0M0JDMzgKKzoxMDMxRTAwMEU5Q0Q2NDVGODYzRURGQzFDQ0UzMDBFNUUyMjkwOUZDNUUKKzoxMDMxRjAwMEQ1MDk0OUZCOTI0MTlGREU0MDlCMjFDRjg4QThFNzMwNEIKKzoxMDMyMDAwMDBGNzIwMkNGODNCQzQxQTIwRTE2RERFQTYxOTg2MTE4RUQKKzoxMDMyMTAwMEY2RjM1OTY4N0Q0NjI1NTFGMzY4RkZBNjYxMTY4Q0VCREQKKzoxMDMyMjAwMDM3RTU1MTNGODg5Njc3NjdCMTdDRDkxREE5NEM1RkZFODEKKzoxMDMyMzAwMDhBOTdCQjUyOTkxREVCMjk2MEY3RkIzMzZFRUNDRkY4RjAKKzoxMDMyNDAwMEE5MkNGMTAyN0UxMzgzQzNERjA3RjIzQzVCOUIzRjEzODMKKzoxMDMyNTAwMEYzNjMyRjcyREM2NzI5N0MxQ0VGREY5QzVBRDU5NjBBM0EKKzoxMDMyNjAwMEZCMjgyMTM5RjVCNjYwM0ZEQUZFNjI4NEY2N0RFMURBQUIKKzoxMDMyNzAwMEY3OTkxODNFM0M0NzQ0RUUyNzU0QzU0RDNBOEY5RkYwQ0UKKzoxMDMyODAwMEU2OEE4RTRCNUZFQTFGQUNCRjE1QzEwRjI1NjQyNUVFQTEKKzoxMDMyOTAwMDM3NzZERjI3OTVENzUyN0QzOEIxNTA3NDUxQzk0MTNFRkEKKzoxMDMyQTAwMDU4QjE2QkU0NDdGREQ5QkE5MDlGRTkyOTExMzE3RTMxQkQKKzoxMDMyQjAwMEEzRThGMDgxNDQ1QTlGQjEzQzFFRjNFRUJCRjc1NTYyODAKKzoxMDMyQzAwMEM2RTcxMzFDNDcyRTdEODkxRUZEODZGQUU3NDc3RTY0RkMKKzoxMDMyRDAwMDg4OEJCQUQxRUVCQTg5RDMyODUxQ0Q3RkVERDQ5RTIzMDUKKzoxMDMyRTAwMEJEQjJCOEVGNERCMEI4MTNFNDlGMTlFN0VENTBDRERFOTUKKzoxMDMyRjAwMEYzRTVDNzEwRDU0MjU0MDNERDMzNzhBRDg3RkQ4M0VGODYKKzoxMDMzMDAwMDRGQUMyNjU4Mzc5NkY3QTE3MDQ1QkRFRjg5OTVCRDBEOTYKKzoxMDMzMTAwMDAyMzhFRkNFMzhBMEJCOTg1QzNGMzk1RjdDMTlFMDI5QkEKKzoxMDMzMjAwMDYxQTI0MkE3MERFQzk4NDhGMDRDNzAzMEZBOEIyQjUyRkEKKzoxMDMzMzAwMDFEMUU4QTlGQzZCRjhCNzhDRkI1M0ZCRTQwMDFGQUJGMjYKKzoxMDMzNDAwMEM3RDYyRjE1RjgyM0Q5QzFFMjI3OERFREVGNjE3QzJCNkQKKzoxMDMzNTAwMDJFREY0RjNDMzY3NjdGRUVCNDQwMUNERjhBRTVBQTE1OUYKKzoxMDMzNjAwMDJFMkMxQjU3MTQ2MkI5MkVGRDdFMkJDNDRCQzQ2NDA5NEUKKzoxMDMzNzAwMDMyODE0OTU0QzYzQzhDMDc2OUVCOUJFM0U3NTg4QjVENkYKKzoxMDMzODAwMDk0NkMxRDcyMjU4NDkwNDQ4ODMzMEM4N0Y3MzZFNUNBMDcKKzoxMDMzOTAwMDk1RkQwOEY5MjY5NUU1N0RCRkU5RjhDODA2RkNGMDRERDYKKzoxMDMzQTAwMEFBMTNFQkEyODlERDFCQzdFNEZCNTRDODRCODg3MTI5MjMKKzoxMDMzQjAwMDI1OTIzM0Q4OEU3RjQ5RDhCRTE5RkM5MTM3NDlFNzg2Q0MKKzoxMDMzQzAwMDZCMDA4RTJBN0IxRkEzODFCRjZGREE1MERDOUZDMzU1MzEKKzoxMDMzRDAwMDFCMTc4MkY3MTAzQzhCQjIwQkVGQURDNTY4REEzRjM3OTUKKzoxMDMzRTAwMDMyNUUwNzM4RTI3MTlGNDA1RjEyQTUyRjNGREYzNzUxRjEKKzoxMDMzRjAwMDYzNEMzMDlGODZERkIzOTIxRkYzQTkxQTg0RjA3OTk3NEMKKzoxMDM0MDAwMDQzMzg3RTFBMTU1NTM5REYzRDBBNTFBNEJGRUFFNUE5QjQKKzoxMDM0MTAwMDJENzc1NzA4M0REQjUwQkU2MjFERjJCOUI4QkNEQTlGNkMKKzoxMDM0MjAwMEFBMEU3M0QwRjlDNzVDQzlGM0VCRDMxMzUwMEVEMEY2RDQKKzoxMDM0MzAwMDAxQzMyMTlGQ0U0NDE1M0FDMDJENDE0NjdFQTE0MDg4NEMKKzoxMDM0NDAwMDgzM0M1RjYyNzVDNjREM0E0RjFFQzREQTE1MEU1NTMyODUKKzoxMDM0NTAwMEMzRkQ4MDMzMEVFMEI1OTY5RjBGREU1MEQ2Q0I4MTdGNDMKKzoxMDM0NjAwMDU3QkZBMEJDRjAyMkREODZGNjZGRDFFNDQwODIxNUU1OUYKKzoxMDM0NzAwMDkzQzhFMUExOEQ1QkU4NjBGMkQ4OTQ1RDM1RDMzMTk0QjcKKzoxMDM0ODAwMDhEMDMzRUEyNzUzN0MwOEI1ODY5N0QyMEQ2RTdFMDczNjcKKzoxMDM0OTAwMEE1QkIzRTBGRUIwRUQ2MUYxMzY5MkU0MjBFRDM3MThCQzgKKzoxMDM0QTAwMDcxOUNENDNEQ0Y1MkFDREJCQUQ3QURDMzc1OTNCQUVCQTgKKzoxMDM0QjAwMDM3NjIzRDlERjVCRkQ4NzVCNEIyRkJGQ0JGNjM3MkYyQjUKKzoxMDM0QzAwMDRCNDk4RDRCQTBGNDNDRjY5NkI5NTVBMDBBQzZERkIyMjUKKzoxMDM0RDAwMEIwQUE4Q0VBRUYzRkFFNzg1NzA1QjlGNDAxOTUyNzhENzUKKzoxMDM0RTAwMEI0MUMzQjYwN0YyMkY4MzlFMzg3RUU4RjcxRUFFOEY1ODAKKzoxMDM0RjAwMDA2MUVENzZDQkJDNTNDMUFGNDVERDFBRDYyRDUxNjg0RUYKKzoxMDM1MDAwMEY3NEFDM0JEQ0YxQTg3OTlDNzlCRDgzRTY2NDg4NERDNkIKKzoxMDM1MTAwMDkxMDBGMkY3RjBBNThEMDZCRjkzRjNBMUMyREFCQUY3RDYKKzoxMDM1MjAwMDdCOUI4MEZCRkRBMDlFQzlEQjBGOTYwQjI4NkZCQkY5MzAKKzoxMDM1MzAwMDM0OUU3MDNGREU5NzBDNzA5QUI5NUMyN0I3NDkxOEI4NzMKKzoxMDM1NDAwMEQ0NUI4OERCMjBENzIzQzE4NzkwQkZEMkZBOTdCNjdFQTEKKzoxMDM1NTAwMDE4OTdBNTk2OUFCNTJBOEMzRUQzRTAxNDA5MEYzNzQ0RTQKKzoxMDM1NjAwMDg4RkY2QTcwRDJFMEFEQjVGRkU5OEUyMTBBQjNBQkJEMkEKKzoxMDM1NzAwMDA2MzhDRUJBNzMyOEM2MkI2RkUwRjE3QTEyNkZFNUZDREQKKzoxMDM1ODAwMEM5RkFDREEwRUJFQ0NDNDU3QTcyMDJCRDQzM0Q2QzlFRUUKKzoxMDM1OTAwMDBENUY3NzA2RkRENzFENzkxNzg1MDdDQzk3RkZBMEZFMzUKKzoxMDM1QTAwMDgwRERBREJCRkYwQzg1N0I0NDNBOEMwMEVGM0EwQkMxNEMKKzoxMDM1QjAwMEY3MkFGQzVCRUQyQzlFOTQzNDBERTdBREUxRUI5MkE0NzEKKzoxMDM1QzAwMDE5Qjg4RjFBQkVDRTRCN0I2MzdDMjZCODg3REE2QURGQzgKKzoxMDM1RDAwMDBDRkU3MDU3ODkyNzY1MjJFMDZCQjMxOUYzREFFRURBMzcKKzoxMDM1RTAwMEJCRkVDODJGRTAzRTc4OTMxOUVGNEUxNjdFRjE0MDAxRTYKKzoxMDM1RjAwMERDQ0I3NjcxM0Q0NjE1NDEzQjdDNDdDMTREQjQzRjU1MTAKKzoxMDM2MDAwMDgwRjkxNzEwMzY3Rjk3NzYwRkIyMzUwRUUxN0FCMjZDREIKKzoxMDM2MTAwMDRCRDMwODVBNzZFRTU5NUEwOUYxOTcxMzdCQzcxRjA0MEEKKzoxMDM2MjAwMEZGNzk2MTM0OTFEMkMwREVBQkRGMjEyMzNDM0NFNjhGRDEKKzoxMDM2MzAwMDhDNzY4MjE0QUM4QjNERUIwQkEwQUU4QjIzMkRGNDlBRDEKKzoxMDM2NDAwMDgzNzVGQUJGQzVEQjhDNzUzREJDNEM3QTc4MzlDQjhDNjEKKzoxMDM2NTAwMEYwNzI5NjFCRTAyNUJDNjhGNzg5M0E3ODk1OUQ3OTI5MjgKKzoxMDM2NjAwMDExRjRGQjUxODcxM0U3QUIzOUQzOTgwMkYwQTlEOUIzMTIKKzoxMDM2NzAwMDE2Q0JDNURCQTIzQzFGRTlENjVEREExMjZGQThEN0VERTkKKzoxMDM2ODAwMDRBRjNFOEY1Q0JEOTQzOEZDNUMyRjk5NzM5NDRDRjQ3MDAKKzoxMDM2OTAwMDU0N0U5QzVBQTEzNjAwMUQ5RjVFMzFCQTQxNEZDRjRCREMKKzoxMDM2QTAwMDVCQjIzQzM2QzMzQ0M2RkFEOTY2MDFFRDE0RDAzMzkzMDUKKzoxMDM2QjAwMENGNjMyRjJFNzNDOEI4Q0VBN0RCOThERkY5RTkwQUFCMkEKKzoxMDM2QzAwMDA3RDYzOUI1NDJGMUIwNzUxRDFFNjY0RjMxNzgyREI5NTgKKzoxMDM2RDAwMDI1QzZGM0QxOTBFMEZFMjJDREZCQUZERTFGMjFBREU0ODUKKzoxMDM2RTAwMEI4OTVFMEJCM0JFN0NFQTNCRjIzRjI4QkY0QTU4Q0YyRTkKKzoxMDM2RjAwMEJEQ0RGQzE3QTAxQjJCRkRERjM5OENBNzRBNThEN0U2QTAKKzoxMDM3MDAwMEFENkIxMTNEOTA1NzRDQzg3NkMzN0E3NDlDRjM2MzlEQTIKKzoxMDM3MTAwMDVEMTA1OTNGMThCRjM3MzEwMjYyNjIyOEE3RDk3RDg4RjIKKzoxMDM3MjAwMDFCRUU0M0U4N0M1RDkyNkQwREM0MTNCNEZCOTAzQTU4RDgKKzoxMDM3MzAwMDg4RjY1RDZBRUQ5NEREQjRFOUYzRDZCRUU3N0RERjlDRTMKKzoxMDM3NDAwMEUyMjkwQkY0NzM4REI1NTkwNkE1NUJEMzMyQTAwQ0Y4QjIKKzoxMDM3NTAwMEU5RjNENjg2MTRCMDY3MTc4QjY3N0YxQ0VFQkRBRjI5REYKKzoxMDM3NjAwMDY5OUM2RkJENjZCRkQxNkZGNDZBRkJDQzkyMEM3QzQ2M0UKKzoxMDM3NzAwMDZDRERFN0E2RjU1MzExREVGMzk5QzVFN0FEREQ3RUI4NDQKKzoxMDM3ODAwMDYyMDRERDdGRURBRTMzMzJFQzIzMzlDRDNEMkIyRDM5OTQKKzoxMDM3OTAwMDc4N0U4MURGMDcyRERBNzYwQ0Y5RkNBNEQ5NzNDOUVEQTgKKzoxMDM3QTAwMEU3QjNGMzdCRUNEM0U2MzBFNDFGN0E0ODA3RjBFNzlDRkQKKzoxMDM3QjAwMDQyQTIzMUVDQjVFRjUzNzlGM0M5NkI2NjAyRjc4OEU0QTYKKzoxMDM3QzAwMDVCREE4QjNFQ0ZFNDRGRTc5MUFBNTg4MEQ3OUNENkM1RjEKKzoxMDM3RDAwMDI4N0YzRTc5NzZEQzQxOTY4N0Q0NUMwMEY0RjEzOTMxNUMKKzoxMDM3RTAwMEUxRkJFRTlGOTNERkM1MEVEMUMxNkY1RDlBOTY0N0M5OEQKKzoxMDM3RjAwMEJFNzNBM0U1QjlEMDBEQTY2MTlFN0E0RDUzMDdCQzNGQjkKKzoxMDM4MDAwMDY2MjE5Mjg3Q0IyNTgxN0RCN0M2MkJBMEZENTJDM0RBRjYKKzoxMDM4MTAwMDNEQzRCQTEyQ0ZCMTg2QzkyMzBGRkQwRkVBRjM5QjhEQzkKKzoxMDM4MjAwMEYyNjlDMUMzQzY3QTM1OTk5NDAyNzlERUQ1MEY5ODIxMjEKKzoxMDM4MzAwMDkzODgyQ0Q0Q0IzRjBBQkYxQkQzOThGRkI5ODBENDM3RDEKKzoxMDM4NDAwMDgxNURGNzg4Q0NGMkJCRTcyODQ0RUE0REY1RDFEMkU3OTkKKzoxMDM4NTAwMDFFMjk5ODRERUJGN0E1MzE3QkVDNTNFRTZGQzA3QjhDQTYKKzoxMDM4NjAwMDY5RjRGOUEyNUJCQ0IyOUFEQkYzN0NDNzVCODc0QzFEQTEKKzoxMDM4NzAwMDQxNzAzRUU2M0YyREQyRUM1N0UyODQ3ODdFNkZGODU3RDgKKzoxMDM4ODAwMDc2RTRGM0Y3NkUxNUYxRkVBOTM3QjRFQkU0RjNEQzM1MUIKKzoxMDM4OTAwMEM2RjM1REU4RkNBMUU3MjVFNDdFM0NDN0EyNkQ1N0EzMTMKKzoxMDM4QTAwMEZGQTY5RDQ3QzM5Nzc2MUVGM0I2RjBFRkZCNkU0QjEzNTIKKzoxMDM4QjAwMDBDNzZEQzJFMEUzRkNERkZERTEzNTJERjk3QzZFQzdBN0UKKzoxMDM4QzAwMEFERkU3MjQ4NURBMzZGMzNFNzZGNEFGNzdCODBFRTk3REEKKzoxMDM4RDAwMDVBRkQxNThDNEUzQTY1RkRCREE4MUNFQ0I3MkY2RDY4REUKKzoxMDM4RTAwMEU0N0UxNkNFMkZCNERGQ0JFN0VCMTcxNTlDRUZGNTcwMTcKKzoxMDM4RjAwMEVCMkU3REVFQTk2N0MxMkY1REY0OUIwNzYzRTE1MkU4RDMKKzoxMDM5MDAwMDEzQTkzOTA1REVCNzU4QjI3NTU1MkNDMEU5QTRFNDg5NkUKKzoxMDM5MTAwMDA1QkFGOUM0MkI4RTBFMDcyRjUzMkYwRDVFQUE0REEwQUEKKzoxMDM5MjAwMDc4QUZENUU4QkY2OEU1MDREMEVGN0ZEOTZBNTZDMDNGQ0QKKzoxMDM5MzAwMEFDREI2NkYxQzE3Nzk4NkE1QjE3RTJCRDBEQUQxRjYzMjIKKzoxMDM5NDAwMEY1RDVGODdFNjVERDJFRjM4NzdBQkMyRTdBRTJDMTE0QjgKKzoxMDM5NTAwMENDRjMyMDlFREVFQzVFRERENzFCM0UyMTU0QkJFNUNGRDEKKzoxMDM5NjAwMDE1RTAyRkQ3MTEzRkQyNzNFODM4NTgzRjkwODBGMjdBOTQKKzoxMDM5NzAwMEI2MUNEN0YzQjkxNjNGQUQ2MzREQTRBRTc1RkQxOTg4REIKKzoxMDM5ODAwMDlGRDZCNThFMzkwMTdDNUY0N0E0MEZGNUY0NTQwMzM0RkMKKzoxMDM5OTAwMDRERkQ5NjJGRDI3OEZFREQxNUU0MEE5MDJGMUEzQzg4NTMKKzoxMDM5QTAwMDM3MTlFNTczQzM5MzNGMUQ3NDhDRUVFN0Q0OTZENzYyNDUKKzoxMDM5QjAwMDA1QkRERkNBRUZERENGQjZDQ0ZENTNFMjc5RjRDMzY5QjQKKzoxMDM5QzAwMDRBQTdGQUY3MzIzNEI5RUJEQzQ1Mzc5MDRBQUI2REFDMTUKKzoxMDM5RDAwMDVDNjJGNkM1OEVBMDcwNURCMkM5OENFRjg5MkU3OUVBNjMKKzoxMDM5RTAwMEIxQzc3RjBFRjk0NEVGNTlGMDFFNjRGMTUzMDc4RTBDRjYKKzoxMDM5RjAwMEE3RjVDNTNCQ0M0OTk1RUMxODM2QjgxN0Q2RjA1MjQ3MTkKKzoxMDNBMDAwMEZGMDdGNzE0MUExRTE2M0Q3MzQwODZGNzY4QTAxREZDQzkKKzoxMDNBMTAwMDA0MEQxRjhCNzdCNENCNjQ2MDRGRjg5NUI2QjRDQjlEODMKKzoxMDNBMjAwMEI2MzA3ODY5Mzk1NjgxRUYxQjNERjlCNTBDNzhGRjY0RTMKKzoxMDNBMzAwMEFGNDA1MkIzN0E4RUFGRDk3NDAwRUQxODgwMTNFMjkxODMKKzoxMDNBNDAwMEUzQTkxQjZGM0RGMEU1OUJCMDNCMUZGQjI5MjBCNzJGN0YKKzoxMDNBNTAwMDg0QUY3N0I4NUVBNTc0RkRGNDZFQkE4RjlBM0Y1ODVDNTgKKzoxMDNBNjAwMDAwODc5QUE3NkY4QTg1RjM5QzkwRUExOTdEM0ZCMjJBNTYKKzoxMDNBNzAwMDA1RjJERDZBQ0M5RTE0MDU0QkQ2NUVGM0U4Q0Q0ODc3OUYKKzoxMDNBODAwMDBCMEVERjlDQzJGMjBGRDUzNDlFRTc5MTA2RTc5Q0JGNzgKKzoxMDNBOTAwMDcxMEE5RUIzOUFCODkxRkU2QTFFMTFBQjIwMUZFNjJCRTUKKzoxMDNBQTAwMDg5OENERTExODYzRjZFRTNGQzcxNjIzMzQ1MkUzREU3NjMKKzoxMDNBQjAwMDA5OTA5NzNBQkY0NzdCQkZGOUU2RUU3ODA4QkI4RkZDQzkKKzoxMDNBQzAwMDhBREY0NzU2RjUzMjE5RjQ0QjM3REQ2RTU5OEQ3MkY1QTIKKzoxMDNBRDAwMEQzMEMzNTE1RUUyOTI5MUMzNDM5OEFGMjU1M0M1QzlFRUQKKzoxMDNBRTAwMENBRjBDNEU0MzE4RUEzRjQ1NzBBRUREMEJGQzM4Q0Y3RkIKKzoxMDNBRjAwMEMzQkE3MTVDN0VCMkY1OTdGM0Y1RTlCRUEzQzExRTM5NzYKKzoxMDNCMDAwMDkxMTJGRUJEQTBDNzdCMDlEQUZFM0E4ODhFQ0U3NDdDODYKKzoxMDNCMTAwMENFRjg3RUNCNUFDNkU3MUFERjdCQUYxRTBEQ0ZCRjdDMzcKKzoxMDNCMjAwMDlCRjExMThDMDM3RDQ0RjdFNTRCQzVFN0VEOTMwNTk0QkMKKzoxMDNCMzAwMDBCMTZFMjBCQzdERjVCQ0M5Q0JGOERDRkE5QzU4RUY2MDEKKzoxMDNCNDAwMDlDNDYyNzc0RkYxMjdDOTcyQzQ4MkY3NDlEMDRDNDAzNTUKKzoxMDNCNTAwMERBMkJENTBGRDBGMTNBM0JCQjBFRDZDNTdFNzJCMDNEMDUKKzoxMDNCNjAwMDJCQzhDNzBCQjgzQ0I4QjkxNzk1MDc5NzA1RTUwMUQ5MUQKKzoxMDNCNzAwMDk4N0M1MUYxODEyNTY2RUZFMzNGMDdGRUE1RkNFQTcxRDEKKzoxMDNCODAwMDAyRkY5QUYxRkQ5QkNGQjZFRjNGNzIxREE1RjNDRjVBMEUKKzoxMDNCOTAwMDM0QkUzNUNBRDM1MEJFQUREOTc5MzNDNjA5NDNGOUY2MjAKKzoxMDNCQTAwMEIzRjQ3QTEyOTY2RkQzRjlGQjczQTE3QzlCREVGOTFGRjUKKzoxMDNCQjAwMDk1QTcxQUZDMUUwOTgxMUY5NThGQkZEQ0VEOEMwQ0M3RTEKKzoxMDNCQzAwMDUwRjkzOEFDOTczM0FDN0NBNDdGNkY5MzgyOUU3NEE4NzUKKzoxMDNCRDAwMEQxOUY0Njc3OEI3RUJEQjQwRkM4QTE2RUZBRDRFOEFGRjMKKzoxMDNCRTAwMDlCM0UzNUZBMEIzREFGMTE3RUExQ0ZBQjIxRTk0OTY3NzIKKzoxMDNCRjAwMDNGOThFRjIyMUUzQkM1Qjc3RjhGODhERjRERUE3MkZBRjAKKzoxMDNDMDAwMDYzMjEwRUI0MkE4QUNDMDIzQkJDNEJFMUY1Nzg1NkY3MEYKKzoxMDNDMTAwMDI3Q0I0RDIwMjdCNDc2N0YxNDhCQUI3NTU1Rjk2M0UzMjIKKzoxMDNDMjAwMDc1RjZGNUIxMzYzMTE2RTJCQzlEREVGMERGNzlDM0NDMTYKKzoxMDNDMzAwMDQ0QkE3RTY3ODRFRkMwNjk3MTg5QUVFOEQ4NDFCODVFNDYKKzoxMDNDNDAwMDc0QTYxN0YwNTUyRURBMzI2RjgxRkNEMTY2MTFCRkU3RUEKKzoxMDNDNTAwMDMzNkZFNUI1QjE5MDI3RDJENUQ2NzdFMjM0REEzRUZGOUYKKzoxMDNDNjAwMDE1RkUzOTNGOEYyQUE1NTEzOENGRTU3ODNGNDkzQzBGRTMKKzoxMDNDNzAwMDE1RDFGM0NENkQ2M0Y2RjNCQzBERTFFOTQ0QkIzRkFGNjUKKzoxMDNDODAwMEI2MkQ5NzQxMUU1MUJCRjU0MzdERkM2ODExRkZERTQyMDYKKzoxMDNDOTAwMENEQzY5MEY2QjY3MTQ4NEY4QjQyRThDOUNERkRBMzEzNEYKKzoxMDNDQTAwMEJEQjg3RTFFNEMwNjczRkZDNEE0Q0YwQjI5MTc3MzI3MjMKKzoxMDNDQjAwMEMyM0IxRTVEODc0NENDQkIzRURCMjY5MjI2MzhFNzc2QUUKKzoxMDNDQzAwMEMxNEI4MEJGM0RDOTQ4OTdCNTU0N0VFOEUzQzBBNzgwOEIKKzoxMDNDRDAwMEVFQ0VGMzNFRERBOURGRkU3N0MxRURCNENCOTI2N0RGMTgKKzoxMDNDRTAwMDFGRjQwQjVBOUU3QUY2QkQ0QjVFODBGQTczNDczM0RGQTIKKzoxMDNDRjAwMDI3M0RGQjk3RUVGRDY2MjZDOEZGQUVCRDE2ODI3MTk1ODcKKzoxMDNEMDAwMEJEMkY2N0RFMEVGNUREMTZDQzNGRUFCQUNCQzJFMkMxQUQKKzoxMDNEMTAwMDdCRUQ5ODRGRDc5NUMxREU4QjY5RDhGM0Y1MjBDQ0RGQ0EKKzoxMDNEMjAwMDI2OEQ4OEI3ODRERUNDRUYzOERCRjZCNzNGRTI3QkI2NzIKKzoxMDNEMzAwMDZERjQ1NEEwNkZGN0M2QTAzRDVFQjczQkNBMEI0RTZBNDgKKzoxMDNENDAwMEQ3OUVBRjBCRjRGNzE4REZGNzNDQjUzMjhCRTM3N0Q5OEEKKzoxMDNENTAwMEM5MzQ4ODdGNzVDNUIzM0M5QkJBMTc4NjNEQjY5MkFFMTEKKzoxMDNENjAwMEJGQjRCNTVEODZGNzc3NEE1RkZDRkIyMDkwMzc1RDNCQkIKKzoxMDNENzAwMDk5MUQ3MURBRENGOTI4NzExMTkyRDFGQjhFQkJDRDE0M0IKKzoxMDNEODAwMDVGQTdDMUI2QTNCQ0YyN0NFRjNERTNFMTlFQTMyNzVDMzUKKzoxMDNEOTAwMDE4MUNCQTI4MUNFMDVDMTQyRTM1MjAyNzIzQzEyM0JGMzEKKzoxMDNEQTAwMDM3RkI0RUNGMEYwRjFFNjc2NkMyRkE0QkRBQUVDMDdCRjEKKzoxMDNEQjAwMDg4MjA1QzA0OTVCNURCQkQ1NjAxQ0ZDRkRBRjc3RTNEOTgKKzoxMDNEQzAwMDA4RTRGMTY3MkQyQjUxQkY1RkU4RENEN0ZDNjBFOUUwMjgKKzoxMDNERDAwMDlGM0RCN0UwQkI5ODczMkZGQkMxOUU5QkQxN0YwMEY0NDIKKzoxMDNERTAwMDUzNzI0RjNFRTg0OUU3Q0ZGRDE4RUI0RkRCNURCOERGN0MKKzoxMDNERjAwMDhCRTRGRkZCRkY1RkEzRjc5RDAyRTZCMTVDMDhFRjNCOUUKKzoxMDNFMDAwMEZFRDdFMkZEMTU4RTc3QkIwMkY5MTI1RDdCRkU5RTQ5NUYKKzoxMDNFMTAwMDc0RTdCRkQwQjkzQjdFQjBGODNFRkZCOTM1M0JBOEMzQ0QKKzoxMDNFMjAwMDU0QUZFNEQzRkRCRDQ3OUFBNzY0RDFGMjJERjU4QjI0OUUKKzoxMDNFMzAwMDcwNUIyRDkxRUU2QkQyOTk1RjYxMTE1OEZFMzc5OTIyMUMKKzoxMDNFNDAwMDY4RjFBNTBFNDNGRTUzN0EwRERBMUIxM0Q0QkJEOTc3NjQKKzoxMDNFNTAwMDlBQTRGQTBFQzgzRkVEMjg5OUVCNUE4NzNERjJGMEJCQzEKKzoxMDNFNjAwMDAyMUQ5MzQ3RjJCQUQxREY3QTUzMjBBQTQwRUREQjA5NTUKKzoxMDNFNzAwMDI1RTMwRTgxQkQzNzUxMTVEMTFFQTQyNURBODFFRjY0RUIKKzoxMDNFODAwMDU2QjBGNjQyQTM5RjMxM0RDNDNGQjg3NjlBRjFGOTE0N0IKKzoxMDNFOTAwMDNFREY1NEIyNENDOUE3RjA5QTlBMkUyOTVFMEFBMkU5RDUKKzoxMDNFQTAwMEM1RjU2NjM4Q0ZGNDFCMDREMkFDOEI2RjRFMDk5OUVGODEKKzoxMDNFQjAwMDAzMDhBMEU5RUNDOEVGMEFCRkJDNzRFNjc3NUE4NDY1MzIKKzoxMDNFQzAwMDA4MEY1MjJDRjJGNzhEMkUwMDNGQzJFMEREMzE3OTMwMjEKKzoxMDNFRDAwMENCMzM5NjVDMEM3RTUzOTdCQTMwNkVDQUZENTAzMzFGQkQKKzoxMDNFRTAwMDZGQjZBREU5MDBCRTM1MTNBM0ZGQTlGOTkxOTFFMDRDN0YKKzoxMDNFRjAwMEI4NUY4QUYzNjQwN0UxNkU1NjQ1RjQ0Qjc1RjMyMTNDRDUKKzoxMDNGMDAwMDM0N0M3QzU3M0M2OEY4RkJCRUY4OTBEMjg5RTE1RTU1NjIKKzoxMDNGMTAwMDJCMTc1QTY3MkY4NjdCMDgyQkU0QkREMzc5Mjc2RTYwNTkKKzoxMDNGMjAwMEVGOTE1ODczMDU4NDYzNTVBMTE5REZFM0ZBQjNBOUFBODkKKzoxMDNGMzAwMDAwMENFN0NBMjE1N0Q0REVDNkE2NzUwMTdDMTY3MjM4N0MKKzoxMDNGNDAwMDU2OTM3QUI0M0JDOUI3RTdDRTE1MTVFMEFEMUZEQUFEOEQKKzoxMDNGNTAwMDBCNTU0MkM2NTNCRkE0QkE0OEYwNDVEM0YzMkY5MDg4RkYKKzoxMDNGNjAwMDI3MkUwRkUyQTAwMkY5NTAxRjA3RjUxQUVCRjA3NzY1MzQKKzoxMDNGNzAwMDRBNzA5RTBCRjU4RjI0MUZGRUQ1RTU5RkE4M0NGQTkwNTIKKzoxMDNGODAwMDIyRkQxODk0OTgzRjQzMjRCREZGMzhBQjhEQzFCMTZFMUMKKzoxMDNGOTAwMDg5RTBDRDQ2M0FGMjk5RjVGN0MwNEY3MEJBRkVEMzFEQ0QKKzoxMDNGQTAwMDQzNTBDRTE1REYzQjMwOEVGOUI1Rjk5OEQ3NTNDN0VEQTYKKzoxMDNGQjAwMEZEQjMxRTY3MUNDNDczQ0VCNkY1OEQ4Mzc4Q0REOTQzOEYKKzoxMDNGQzAwMEE1QjFFMUYyNzkwRTczQkZGMkY3MkJBQzU4NzY5NTA5RTMKKzoxMDNGRDAwMENENjIxQ0JFN0YzMjAxRjU3MDU5MTQwMUI5MTMzQTZFREYKKzoxMDNGRTAwMDc1QkExNjk3QTk5NzMxOEU0RjU4M0U3RTM1M0ZDNzAyNTYKKzoxMDNGRjAwMDNBMzQyRTQxODdCNzBERTMzRjkxMDZGNUM0MDNGQzdEQUIKKzoxMDQwMDAwMEE4QkI1N0Y5QkVGMDA1M0YxNkUwN0EzOEFBQjMyMkRDMDgKKzoxMDQwMTAwMDc3MEE3RkM2RTU2QUU1QkU2RjY0ODgxRjRDNkFDQkMyMkIKKzoxMDQwMjAwMEVGNEM0RTJBMzNCRTBGNzg1RjNBRjdDRjg3OTAyMUIwMUUKKzoxMDQwMzAwMEFGQ0E3RDYzNjI4NzAxNUUwRTg5QUUyODBBREZCQUI2MTkKKzoxMDQwNDAwMDMzQjIzQkNDRkQ1QzI4M0M2MTdFODgyMzFGMzdCQkFBODIKKzoxMDQwNTAwMDAxOUVDN0VGOEVDMkVGMDBCQ0MxRUY4QjcyRjlGNzIxNTIKKzoxMDQwNjAwMEUxMTM0MjEwM0ZEQjlDQ0VFRTIxQkU0RTY3NzFGNDZCMzQKKzoxMDQwNzAwMDJBOEJDREM5NzRERERDNTY2NTMwRTQ5N0Y1RTJGREJGQ0YKKzoxMDQwODAwMDRFNzdFMkYzREU3QzlDRDZBRkQ3MTJENkVGOThBQ0Q0NTUKKzoxMDQwOTAwMDg2M0I3RjQ2MjZBMzlGMDVDNEY1RTM0MkUxODc4N0I3QTkKKzoxMDQwQTAwMEUyN0JFRDNFNzgzRkVFNkM5OUMwREY5RjA5QTU2QjgyMDUKKzoxMDQwQjAwMEZDNzE3NkI0RTAwNUZEMEI3RTJDRDYyQjA1RDRGRjZGOEEKKzoxMDQwQzAwMDY4NzkxNTkzOThCRUQ0RTgzRTE0Q0U2RjcxRkFENUQ2QjAKKzoxMDQwRDAwMEVGRTI3MDdGOUJEMzg3MDY2NzBEQkVBMUZCRDVGQTUzMzUKKzoxMDQwRTAwMDc5NzU5NTNFREUzMjcxRDdFMEE3QzEzRUE5NkQxMzE0RjQKKzoxMDQwRjAwMDEzOURBQTU2RUE5NDgxMEZFQjc2REQ2Nzg2RkI4NUU5NkUKKzoxMDQxMDAwMEZDNzc1QTg4NTQzNTQ4N0ZCRkZCNzVCQTg0RjNFRENGRUUKKzoxMDQxMTAwMDFCODFGNkUzMTcxQjk4N0RBQ0NFM0IxMzBCNzZEMDFCQUYKKzoxMDQxMjAwMDI2RDc1QjIzODAxRkRGMTQwRERGMzcwRjJEREY1RkExNDQKKzoxMDQxMzAwMDJDMkEzM0VCRTdDRDYyN0VEMjkyNjIzMzg0ODdBRTVGNjYKKzoxMDQxNDAwMEQyNkU0RUQ1RDFEM0Q3OTA4RjM1MzREOERFNkI4OTEzNEMKKzoxMDQxNTAwMEYzMThFOTdBQjgwRkNGM0QxNjAyRjk0QkI5MkQxRDI1OUEKKzoxMDQxNjAwMDMxRjRGOUY1RjVGMThDMEU2QjVBREE2NUFDQjNFRjBENUQKKzoxMDQxNzAwMDZCRUI2OUVCODRGMkQzRTRDQTE4NDM3RDZFNjk2NzNBNEUKKzoxMDQxODAwMEMwQTVEMkUyNUJFRTBBNDNBN0Y3Njc3NEM3NTVCRjlCOTEKKzoxMDQxOTAwMDlFNTAyOUREMEVGQUZGNDE0RjlDQTkwOEY3M0RENEQ5NjYKKzoxMDQxQTAwMDFDNkUzQUZEOTAxQTRFM0YyQzVCRTk0QzA1RjgyRkRCNTQKKzoxMDQxQjAwMEQzMzcxNTk4NjNEOTJCRTUyOUUxRjRDMzNCMkJEOEZEMDAKKzoxMDQxQzAwMEUxNTE5RTdGRDkzNTk5RUE4N0NCNzVGQTYxNzIxNEQyOTUKKzoxMDQxRDAwMDQ3RThCODcxMTlEQTc3NTUyRUEwMUYzNDdDRkQ4N0U1QzIKKzoxMDQxRTAwMENDM0JBMDFGQzJGMEY1Q0MwQ0EzN0U5OERBMzYxQkY1QjEKKzoxMDQxRjAwMEMzRDRDOTIyNzFFQUUyNzE1MzMyMkVBNDFGOEE1M0E2OTYKKzoxMDQyMDAwMDYzRERFQzhBMDk0MzM3RUY3MEJGMDRFMDBBMjVBQzAzOTUKKzoxMDQyMTAwMDdBRTJFRTBDMjZGNzQzRjU0NTI0Nzk5RTdEQjFGMkZDNTcKKzoxMDQyMjAwMDdGMDhDRTlBM0M1RjM2ODVCRENGREY5MzBFMDlDQUVCN0YKKzoxMDQyMzAwMDY1RDMwNUZDMUQ5MzY1N0I5ODNDNUY3NjAzOEY0Qjg2QTkKKzoxMDQyNDAwMEM4RDcyQTkwQUZGOTdBRjlDQUM2RDdCQTk5M0VBOERCN0YKKzoxMDQyNTAwMDk1RjVEMzE5RjRGOTc1Q0Q2Njk3OTVGNkJGMkUyODZGQUQKKzoxMDQyNjAwMDBCRjRGMkY2RUUwQzQ5ODM3M0E2MTIwNkJGRDM2NkM0QjQKKzoxMDQyNzAwMDEwQTc1MTVFRjUwMzM5NzU3Q0YwQ0JCOUNGMDBEREJGRDcKKzoxMDQyODAwMEMxREUzN0ZCMzNEN0UzQUYwRjdFMzkxRkUyRTkxRkYxMDEKKzoxMDQyOTAwMDc5NUIzMzE4NUU0RUFGMjA4QkNBMjgxQzRBRTczMTdCMEUKKzoxMDQyQTAwMDc4RTk3NjExRTE1MERCQ0FFQ0JDREE2RDAyQkVENzVCNkYKKzoxMDQyQjAwMDkxRjcwRERFMUIyRURFQzNFRTBERTFCQkJFQzUzQTNDMTEKKzoxMDQyQzAwMDJFN0VBM0IzQTkzNzNDREYyNEUwQkQ2N0I1NkIzMTdCRkQKKzoxMDQyRDAwMEZGRUY2MTE2MjdCNkQyRkYyMDVGNjI2RDc0RUM2NjgyMzUKKzoxMDQyRTAwMDc5M0EyQUM2OUI5NzcyQjg1NTVBRkMwNzYxN0NFNTEzNDgKKzoxMDQyRjAwMDgyNkIxM0NBMzU2MzdDN0E2OUJGQjE5RjgwN0ZCMDc4QzcKKzoxMDQzMDAwMDVCNDhCQjZCMkRERTY3MkM4NUI4QjNDRTFGRjkzREU3NEMKKzoxMDQzMTAwMDkzRjlBMjJGRjcxOUM4MEY3QzRCMENGQkJCNjc1QUJGNTAKKzoxMDQzMjAwMDZFMzhENDdDNEYzODFDQTY3MEM4RkZFN0UxNTBENzc2QjIKKzoxMDQzMzAwMDFGRTZERjdDREZGM0JGOTNDMUUzRUQ3OTI0MUZGOEU1Q0YKKzoxMDQzNDAwMENGMjYxNUY5REZGM0FBODhFRjE3Q0ZCQkFGN0ZBQTNFQzAKKzoxMDQzNTAwMDRGRTkzODg3QzMxQjI2Nzc1MzFBRjRBQjY1RUYyMTJGM0IKKzoxMDQzNjAwMEQ4QjhFMzAwQkMyMjNFQTM4NTBDODZCMEZEODI4NzhEQzEKKzoxMDQzNzAwMDdBQjI1QjJGQjczQTUxRUZDRUE4REYyMUMwNzdGREU3QzUKKzoxMDQzODAwMDhCMDQ3RjBGNkM2RTlFQzUwREY3QUY4N0EzRkMyOENGMDMKKzoxMDQzOTAwMDM0M0FCNDY3QjJERjhGOEJDOTY0RUIxRUVGRTUyRjQzNkQKKzoxMDQzQTAwMEJGNjI5N0EwMjA5RkMwNzczNUEwNEVGMTAwREZENUQ4MUYKKzoxMDQzQjAwMDNGRUNFQjBBMEU3NzhDQ0ZENEVENjI3OEFBQTM3ODAxOUMKKzoxMDQzQzAwMDNFQUJBMEY2MkVFODkxRUJBOURFQzFGQkIyQjY3NjMzODgKKzoxMDQzRDAwMEY0QUZBMUZEMTI1MUVFQjhEMERGRDVGNDEzRENERjE1MzgKKzoxMDQzRTAwMEE3RThGMEI2RTcxOEEzREZBRDgyOEI4NEMxNUIwRUZEQjIKKzoxMDQzRjAwMEVGN0M3ODhCODQyRkNEN0VCODU4QkM2OUYwQjA2NzFBRkIKKzoxMDQ0MDAwMEYxNzczOEFBQTM3MjA4REU1M0IxREYwMzIyNkRGMTc4ODkKKzoxMDQ0MTAwMEFGRjI1MTczNUZDNDYzNkYyRTY3NDNFOTFCRUM3REE3NTYKKzoxMDQ0MjAwMDJFQkU3NDM1NkMxQzNGNjAxRjg1Nzk3MkI4NkUzNkIzMzIKKzoxMDQ0MzAwMDg3RjRGMjI1RDQ4RkFFMjMxRDY4RDcyNEE3Qjk3RjlEQkEKKzoxMDQ0NDAwMEFFQ0I4QjlCQ0FGMzU3QkFFRjc1ODNGREU2Njc5Q0E3OEIKKzoxMDQ0NTAwMDFGNzE5NEUwRkQ4Rjk2NTcwQkJGMjA4NUY5NjBCQ0JFOUQKKzoxMDQ0NjAwMDNGQTNFMEU4MEM3QURFMkZENjg4Rjg5RUYyQjUyNkU3NjcKKzoxMDQ0NzAwMDkxMjJFMEUzNzU2NjAyNzRGOUM1RUI2Njk1RDlBMTMxMjYKKzoxMDQ0ODAwMDI4ODc2N0JGNzFEQzBDQTE5MUQ5OTA1RjQwRkJDREJFM0UKKzoxMDQ0OTAwMDkzQzlEQkUzMzAxOTZERkIwM0Q1NjMyQTdDQkY4NEI0NzkKKzoxMDQ0QTAwMDBDODVGQ0ZEQzlBRUY2NzJDOERGOUU5MjdGNzgxNURDRTQKKzoxMDQ0QjAwMEQzNUQ1M0FBMUMzOTAyRjA1RDJCMTI4MEVGODc2QjRBNDMKKzoxMDQ0QzAwMEQxNUZCOUU5NDYwMUU5RkFERDE1Rjg5QjU4NjRDQUU0MDEKKzoxMDQ0RDAwMEFDMjM0N0U4QkEzN0FDNDlDNjdCQjYxOUVBODE3MkEwNkIKKzoxMDQ0RTAwMEI3QjkxM0VEMzZCOEE3MUI5NzIzMDZGMzdCMDlCQzBGQUEKKzoxMDQ0RjAwMEQ1QjEwQUU0Rjc4Q0ZBMUJBN0MwN0U2QkE4NUU4MEI4MjIKKzoxMDQ1MDAwMDZCNEREQkUxRjI1NEE4NkYxNEYwRjdENEVBM0M2RTE5NUUKKzoxMDQ1MTAwMDVFODVFQTc4Rjg4QzBDRjE4RjZBREEwRkQwNTNCNzkxODgKKzoxMDQ1MjAwMEY1QUJEQjIyRTA3QjNFRDU1NDNFQzBGOUFBQjcwODA0QzgKKzoxMDQ1MzAwMDVFMjhFOUEwRjY5Rjk1Q0RFQjg1MEYzNDc1NkNBNEUzNUEKKzoxMDQ1NDAwMDY5N0QwMThDODc3OUI3QzRFM0VGREVENUJEQ0VERTEzN0MKKzoxMDQ1NTAwMEFBMkU1Qzc5MTBFNDUzMzUxRDQ3MUY5MzhFMkQzN0UyNDgKKzoxMDQ1NjAwMDdDMEIzNzBBMDQ1MjgzNkIwQUIzRUUyOTg0Rjk1RTM3NTkKKzoxMDQ1NzAwMEUzRjc0MThFQjZGRjRDODY3RENGQTRFQkE1RDFGOUU3REEKKzoxMDQ1ODAwMDhBOURFNTk4NkY3REJCQTBFMDdCNEQ2NUI3MjExRjc0QzgKKzoxMDQ1OTAwMDcxM0UyMDQ5QjdCMkZCNjY4MUQ3Qjk1REE4RTlDN0M3QUMKKzoxMDQ1QTAwMDMyQjM5MUJFQUI2RjU5RDkwNEU3RUFGNDI0Njc4MTRCNkIKKzoxMDQ1QjAwMDU0QjdFQjhDMEM3NkRFNDcyQkUwMDMzNDE0NkYzQzBGQzIKKzoxMDQ1QzAwMDZFQkZFN0I4RENBOTkzNTNCRUNDQkU0ODhGRjM3NjE1MTcKKzoxMDQ1RDAwMDIzOUZDRjI3NTU3ODJGRUU1RUM5RjRGMkIxNTU1MTVFNzcKKzoxMDQ1RTAwMDAxRUMxMUIzODI3QTczRkZBQTFGM0QwNEU3M0ZGRDk0RUIKKzoxMDQ1RjAwMDE5RUY0QjRGNjc3NDYyN0NGNkM0NDYzMzdFM0ZBNDYxNkIKKzoxMDQ2MDAwMEEzODg3MkU0QzQ3NjE2MTcxMjFGOTk1MjkxMDZGMEEzN0MKKzoxMDQ2MTAwMDcyMDBFODZFRkZDNjUyMTlFNEUxMDlBRjgwRTM0QjFGNTgKKzoxMDQ2MjAwMEI5Mzk4NUM1N0Q4REYyQTNEQUI5MDhFNUM1MjM1MTRDQUEKKzoxMDQ2MzAwMDNFMkM3ODM4RkNGRDZBNDQ3OUIxQkM4MkM5RjcxMDc5MDgKKzoxMDQ2NDAwMEIwMzRCRDA5RTM3RUExNzJBMjhFRDgzNEY5OTAwN0Y1OEIKKzoxMDQ2NTAwMDBFNUYxQUQyNkZFREVCNjYwMkY2NURBREE0Q0M3QzE4NEUKKzoxMDQ2NjAwMEU4NjY0NjE0REMyNDUzQkVGMDFEMDBGOUY2ODU1NzcwNDkKKzoxMDQ2NzAwMDdBRThGM0VCNjczRDNGMTRFMEY3MzFDMDFCRjg2MjQzODMKKzoxMDQ2ODAwMDIyREVBRjU2N0I2NzIzNUNCNTdDQzQwNTBGMUJFOTU5NUUKKzoxMDQ2OTAwMENCN0I5QUVFMTY4M0VGRkJEMEZGNUQ1RjEzNDM1NDVEMzcKKzoxMDQ2QTAwMEJGQTM3NzUyQkFBNEVCQ0REQTI1NzhFMTNCNDg0N0VGQjgKKzoxMDQ2QjAwMDNDNzZGMEU2N0NBQzJCNDA4N0I1Qjc3MEJEQkFDMThFQjYKKzoxMDQ2QzAwMDc0N0JGNEQ2MzNBQjgwMkU2N0RFMjFFMEZFODlDN0REMzQKKzoxMDQ2RDAwMDA0N0FBNUY2NjFDMTA5NzFDRDA1NzdCMEYxMEJFODc4RDAKKzoxMDQ2RTAwMEEwOTdBMzNGNjNGNDQzRTlEODA5NzQ1RUJCRjFCRTgzOEUKKzoxMDQ2RjAwMEQ4N0Y4QkUwODRGOThGNkU5QThEN0FCOEM2MjMxMjdDQUUKKzoxMDQ3MDAwMEJFRTUxOERBQ0I1NDFGNjBERUQwN0U4Rjk4MDI3NDVFNEYKKzoxMDQ3MTAwMERCNjg1MTAwQUYxQUJENjhGNDc3OEM3Rjg3OUE1ODVEQ0IKKzoxMDQ3MjAwMDgzQUVBMUUzNkVDQzc0ODZBNTNCNzE1QTE2RDI1N0RERDkKKzoxMDQ3MzAwMDc2MzNEMjRCOUQ4N0QxRDNCMUE3NDRBNEMzRkRBQkFFOTIKKzoxMDQ3NDAwMEFEMDBGQTM5QkQ1NTg4NDA3Rjk0QkVGMjgzRjQyNTNFMTIKKzoxMDQ3NTAwMDYyQzZGMTBCOUU2NEYxODVGRDFCMTk1RDlGNjg2NUY2Q0QKKzoxMDQ3NjAwMDY5RTkyM0ZERDFBRjU5RjA4Njk5QjBGODAzQjFFOUVEQkQKKzoxMDQ3NzAwMDhGMEJEMTYxMjhEREY1RDA0QjlDMEUyM0QxOUREQkRDNjYKKzoxMDQ3ODAwMDMyMTVGMjBGNjYzRjRERjdFRjBDQzJBQkI0RTk1NjhDMTEKKzoxMDQ3OTAwMDAzOTQzNjREQzdGMzZBRkM1MzJEQjFCQzhENzlDRDJCRjQKKzoxMDQ3QTAwMDU5M0VBM0M0RjI3QkJFRjNCRTQyRjY3MTVGNTAzRkU2QjIKKzoxMDQ3QjAwMDgxN0U4NEZDMTMxRkREQzdDQkRCMUY0MzNCRTBGMzVGMkYKKzoxMDQ3QzAwMDFEQzNGQ0M2QzUyRjUwRkNEM0ZFQTdCN0RCODkwRkVENzgKKzoxMDQ3RDAwMDZDMkZDQTk5NDVBRDIyRTY5NzEyQzk1NzcwOERFRTdEQjAKKzoxMDQ3RTAwMDBEMkQyRjYzRjE2RkVDMDhGNzQ1M0IyRERFNEEzQTdFMjUKKzoxMDQ3RjAwMEQxQjNDNzA3RTEzREY5NURDQzRFRjVGQzhBN0Q2Rjg2RUMKKzoxMDQ4MDAwMDc4M0EwNzVEMDNGOTk5MTJDQjBGMDlENUJGRDE3RDU4Q0UKKzoxMDQ4MTAwMDFDRTdENEYzMzFGODVEMjY2MTVCM0JERTMzMkQ2QUI5Q0EKKzoxMDQ4MjAwMEQ2NkNEMUM1MkQ4NTNFNjZBRDFGREVERjc4MjhGRUUxNTIKKzoxMDQ4MzAwMDdFMTFGNkE3RkY1RDA5MkQyRkU0RDQ5MzhDN0YxNkVEMzIKKzoxMDQ4NDAwMDMyQTM3REI0NjhEQjI2OENGN0Q1NkQzQjgzRjlCM0E1MjUKKzoxMDQ4NTAwMEJGNzkyQTE2RTA1MEI3NEIzNEU2NEY2RDEzN0QxNkNDNjYKKzoxMDQ4NjAwMEYzMTI4RjU5RDhGNzM5MEM3OTRDQjVBREVDRkQ4RURBQ0YKKzoxMDQ4NzAwMDE2OUUyNzE0OTIzRkIzRjgzNzdCOUVGNTUwRDAyQzdFQkUKKzoxMDQ4ODAwMEU2ODk1OEUwQTc0RjNCQjZDNjAyM0NFOTdDOTg3RjM0RTYKKzoxMDQ4OTAwMEIxMzA0MjdFRDI4NUYyOTI1QUQ2RjJCQ0E0RjFGODdCQjYKKzoxMDQ4QTAwMDFEQTE3OTQ5OUZDMjNGQTgxRTc3RjUzMUU2Nzk5MjZEMjcKKzoxMDQ4QjAwMDRDNkU1MUVDMTc4NDdCMUY0OUIzNUYxNjNGRjVENUEzQUYKKzoxMDQ4QzAwMDkwNDc3QjZBRTc2NzhGQzJGRTk3RkNFMzhCNDcyMUFGNzcKKzoxMDQ4RDAwMDgzRUM4RDUyQzA5RUE4RkJENTNCOTg3RkE4OEQxQkRCMzcKKzoxMDQ4RTAwMDg3RkI0NzRGM0U4MUY5OUJBN0RGQjNBMDVENzg3QUNGNjYKKzoxMDQ4RjAwMDg5NENCMDE3NEVFRkY4MjYwNUYyMzI5N0VGMjlDN0Y4MkEKKzoxMDQ5MDAwMEM0RjJERjk2RTI3QkEyOTFGQzREQTA0RkVGNDVFNDhGMEQKKzoxMDQ5MTAwMDg2RTI2MzdGQUJFOEIzRDE3RDdFRkVBRTA1RjlCRjNCOTcKKzoxMDQ5MjAwMENGQUM2NTI5Q0JERjczRjJGQ0IyRURFMUYzNzRCNTdDNUIKKzoxMDQ5MzAwMEE4REFENjZCMjY4RTA0NzlEN0NBRjQ3QTc3N0VENDg1MjYKKzoxMDQ5NDAwMEYyQ0FERUE2NzhCREZDMjJGMEI3OURFNzBGQjY4QzBGNDkKKzoxMDQ5NTAwMDlCNTdGNjM5RkM4M0UyQTlBNjhGMzFBRkVDQUJENkY5QjEKKzoxMDQ5NjAwMEJGRkMzOTNDNkIwREZGQkVCNkM2RDcxNzgyOUI5NjA3QkUKKzoxMDQ5NzAwMDNDQjQ4RjdBNTMxRkUwOEY5REJGQzYzQzNFQzA1QkE1MDEKKzoxMDQ5ODAwMDEzRjRGRjU3OTkxMERGM0M2OUY2NjNEQ0QwQkZDN0EyNzAKKzoxMDQ5OTAwMDQwQkVEN0EyM0Q0NzkxNUY0RUZGRjYzMEU2RDkxMjlFNEEKKzoxMDQ5QTAwMDhGN0I5QTc0RkZCMUJDNDkxRUJCQThEQjYyNjdGOTY4QjQKKzoxMDQ5QjAwMDFDRkU5MEFGRTY4Q0M1NzY5RTk3QzZFODU4Q0I1NzhCMDkKKzoxMDQ5QzAwMDk0QTdGNjY0OUY2QzY2NUZGM0ZDRTRBNUNFMEU1OUIxMjQKKzoxMDQ5RDAwMDA1RjEwNUY4MTEwQTAxNUZDNzBDRjk3RkRBQjk0M0U3NjEKKzoxMDQ5RTAwMDUzMDAwRTU3RThGMzJGMjNFNTAzNzIzQkJEMDdCRTk4MzMKKzoxMDQ5RjAwMDVDM0VCRDg5RTc2Mzc2RTc1OTEyOTI5RTA3Rjk0MTRDMDgKKzoxMDRBMDAwMDFGRDY3OTg1QTNFMUYwQUJFNTVGNkUwOUMxQUY3NkJFMzUKKzoxMDRBMTAwMDQ4N0NBMUYxRTc4NUY3RkRDRkMxRTVBMTNFRUM3RDAwMjMKKzoxMDRBMjAwMDBEM0VBN0JFMEQyRkE3NUZFNEZDNEVGRDk2QkQ3RDc0MjUKKzoxMDRBMzAwMEVGQkRDQ0UyN0U4Qjk2NzdBNkVEQjdBOTg1RTlFNTUzNkQKKzoxMDRBNDAwMERCOThERDE4Q0FERkI1MTE3RTU3RUIwREJFNEVFREFFMUIKKzoxMDRBNTAwMEY2NDEyMDg3NEVFRDdCOUVEMzlEOTdCRjg3NzM0Q0Y2MjIKKzoxMDRBNjAwMDcwQjlFREQ1Q0JFRDA4QkY2Mzc2QjQwRkYzMTdBOUJGQ0UKKzoxMDRBNzAwMDFCNzZCRUJBRUQ2N0MyQ0VGN0E5QTQ1RTBCRkJGRkI0RUUKKzoxMDRBODAwMDgzRDkyMTlGQjY4ODYxN0YwRkExQkQ4RkYxN0RENTI2ODcKKzoxMDRBOTAwMEJCOEM3RTk3MTgxQjhERjI2OEI5QkRGMDVERjhCRURCNEMKKzoxMDRBQTAwMDcyQkI4Q0Y5MEUwRDJCNzk3RUM0OUQyRUZDM0Q4RjA2QkEKKzoxMDRBQjAwMEZCNThGQzFEODg1NTAwMUY5RDFGNkE1NkRDRjhGQjEzMzAKKzoxMDRBQzAwMDY2NDc1NTNFRjg1N0ExRUY3N0NBNDkyNkUyRDVFMzVGMUUKKzoxMDRBRDAwMEYyQTRFM0Y3QkJCMkJGOTY0MEVGNzRBQzMwQkUzN0QyNUUKKzoxMDRBRTAwMDIxMjkwNzEyRTk3QzFENjU4MjBCRUNERDlFNzQ2NjlDMTIKKzoxMDRBRjAwMEZGNkE1NTM0QzRDRjIwNTYwREU3M0FFQjYyREY0NUIzNjkKKzoxMDRCMDAwMDlCN0MwQUVENDJFQzUxMUQwRTc0RjQ5Q0VDNzdBQkUxRkEKKzoxMDRCMTAwMEU3QkFFMDNFN0NERDBBNkIzRjc4OEZFQkZGMDIyRkI2RjEKKzoxMDRCMjAwMEQ1ODQwMDgwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwRkEKKzoxMDRCMzAwMDAwMEJCNTdEMDk3QzU0RDVCOUY4Qjk3M0VGNEMyNkNCODEKKzoxMDRCNDAwMDI0OTM2NTYwMjAyQzM3RkIxRTI2MTAxMkQwNTgyNjFCOUMKKzoxMDRCNTAwMDA2MDkzODIyNTVENDgwMzc2QzYxMEI4OTY4NkQ2Q0ZENkQKKzoxMDRCNjAwMDk3NjEzMTQ1RTVCNUExMkU1MEE1Q0YwMUMxQzdBM0Y4ODYKKzoxMDRCNzAwMDFBMTY2QkFDNTEwNzA4MTQyRERBRDBFMjkzRkE1NzFCQzIKKzoxMDRCODAwMDk0MkEyODk4MTE5NEYyNUEyQ0ZGRjM3REU3OUNDQ0RDRjAKKzoxMDRCOTAwMDlCMDk4NEJFRkVBM0ZFQUVFN0RFQjM3RUZCRjc5REVGNkUKKzoxMDRCQTAwMDlDODkyNTJFODlDODg0RDg1QzhBQjcyNzlCRTBERjE1QUQKKzoxMDRCQjAwMEZBNUYxQ0ExNjUyQjJGQTdFMEUzNzg3QTA5MjEzMUVDN0QKKzoxMDRCQzAwMDE1RkQ2RURGNkY5MjA4ODlDQTI2RDk0QTMxMjE3NjEyMDcKKzoxMDRCRDAwMEU1OTI2OUY5ODk1OEY3NjEyOTk2OTBGNTM2QUQ5NkQwMzYKKzoxMDRCRTAwMEU3MTVGODlCRDRGRjQ5NUNDQTI5MThDRjRBRkZCOTkyNTAKKzoxMDRCRjAwMDRBRkI5QjQwQ0JENkUwRjhGMTZFN0QzOTkxODQ5NDcxRUQKKzoxMDRDMDAwMDNFNkU0Mjg2QzA3QkZBQTcxMjMyNTlBNjMzQTNGMzg4QzAKKzoxMDRDMTAwMEFGMzZGOTIyMjRGQzVFOUIzMTI0MzhERjc4MDc3MUY5MjYKKzoxMDRDMjAwMEUxRkJCNDE4OTc5N0Q2OEY4OTYxRjMxM0YzQTVGM0Y5RDUKKzoxMDRDMzAwMDE4RTZBM0QyN0Y3MDNFRjkzRDVFMTNDMTc5N0QxQzNBMjAKKzoxMDRDNDAwMDBGRkEyNzc5NkMzOEJGOEYwREYzRkIzODc0N0UwNUFBRjUKKzoxMDRDNTAwMDJERTlEMzY4NUE1MDg4NzI4NUMyMzdDNkRBNEQzODlDMjAKKzoxMDRDNjAwMENGODdDMjk5MTAyRjUxNEEwMDlFMDJBRUY0M0JFRDI3MjgKKzoxMDRDNzAwMDQ1N0E1MkI5MjIwMTVDRUQxMjQ5QzNGMTBDRUQ0NkQ4RDgKKzoxMDRDODAwMEIxN0YyOEQzN0VDN0MwOUEyNzEyNTJFNjk0RENBN0M2MEMKKzoxMDRDOTAwMEQxRkZFRjRDMjI2NDE4MjFBOTJEOTVFNDEzNUE5NkRBMUUKKzoxMDRDQTAwMDA4QzIyNzdEM0RGMTQ1RDBGOUE1MDc0QzU4MjY2QkEzRDYKKzoxMDRDQjAwMDdDMTlCNDZEODQ5NTc4MjNDN0QyN0EwQUYxOUFDNzQyRDkKKzoxMDRDQzAwMEFGM0U0MkM2MjM3MDU3OUI2ODU3Q0EzQTQyMUVBM0VEQjcKKzoxMDRDRDAwMDNBMDMxNUE2MDUxNEE4RURGMDg5RjYzRjUxNzU0RjUxMUEKKzoxMDRDRTAwMDY5QkRENkRCMzRBN0E5MDg5NjkzRDdENjU1NDYwODFEQ0IKKzoxMDRDRjAwMDJFNDc3MjExNjI1QTk1REI3RDY0MjQyMTQ5NTBGRjA2Q0MKKzoxMDREMDAwMEY4OUVEQkVEOEVDMUVGQUM0Qzg4OUZEMDc1QjU0NUY1QjQKKzoxMDREMTAwMDk1REQ1NjI3MkRBN0IyRjI5REJFRENCNjc1QjRCRjBGNDgKKzoxMDREMjAwMEQyM0Q3N0FBMEVGQUNFNkFDRjA1RjgxMzdGMDJBRTc3OEUKKzoxMDREMzAwMDQwRkFBMjcwMjU4RUUwM0NCM0I3RjkyQkEzRTgyNDZFQUQKKzoxMDRENDAwMDA5NTA4MDUyRkM2N0QwM0VCQUYzMDEzRkREMTYyMDkyMzUKKzoxMDRENTAwMEVEMzFBMkVDQjcxMEZBRjRFQzNCNjZFOUExQ0ZDNkY2NTAKKzoxMDRENjAwMDYzRjhERDA0NjVGQTFDOURFOEFGNENBNkVCN0M1MEJERjIKKzoxMDRENzAwMEQxRTNDQ0ExRkRFREFCNzc5QUVDODRBQzU0NkZFQzU2NEIKKzoxMDREODAwMDFDQTE3MDk4QTQ4MzgzQjJGQTI2MDMxQzZFQkEyRTM4MzUKKzoxMDREOTAwMEFDRjRERDg0NzAxOEVDQkFDRkE5OUUxRjAxNUVBNjk2MTQKKzoxMDREQTAwMDlCODg0NDA3MkQzRDExRTM5MzE4MUY0NzdBMEE4MkZEMjMKKzoxMDREQjAwMDZDMzE5MTQ1RUQzMUUxRkE1OUM1RjBDRkVCMDkzQTFBNjIKKzoxMDREQzAwMDg4NEVEMjg4M0QxN0U4RDQ0ODJGNzQ3RDM1RUQxNDhFNzcKKzoxMDRERDAwMDUzQjU3QTRGNTU2MjkwNEU4OTVEMUIzN0EzMDBFNjM5NzMKKzoxMDRERTAwMEY3NDk5OEE3MTg3NzZBRjkwQTM5OTVDRUU3NDk4QTIzQ0YKKzoxMDRERjAwMEU4RDdEMUUyOERDQ0E0NzRFQTcwOUI1Q0MwRTdFNzU0OUQKKzoxMDRFMDAwMEVERTc1MDNGNzY1NkMwNkZBNjU1NEE4OTc2QkY5NDE2OTcKKzoxMDRFMTAwMEVDNUZEMDdERUI2QjMyRDI3NzZCQkRDOUI3MUFFNTQxNDEKKzoxMDRFMjAwMDhGMDRFQjBFRTJCREM3ODBGNzAwQzM3QkM3NDlDNEZCMEMKKzoxMDRFMzAwMEYyQ0U5MzBDRUYxREFCMkFBMjhBQTEyQ0Q5MjM1NDU4OTEKKzoxMDRFNDAwMDRGQTAwOEYwRjkyQkRGOUQxRTg1RTI3Mzc0NzRBMDE1NDYKKzoxMDRFNTAwMEU4QzE0Q0JFRUJBOUNENDFCOEJGMDg3NERBMEZFRTdDQjcKKzoxMDRFNjAwMDVFMDJGRTAzRTFBREVENDhFQUUzRjlCNEFBRjdBOEM5OTIKKzoxMDRFNzAwMDk1QTEwNkUxMjVFQTFENTcyRDU4NkY2M0FBRjYxQjE4NjgKKzoxMDRFODAwMEE3Njk0MkNGNjFCQTUyQjJFN0M4MUY2MjM1M0FERkQ4OEMKKzoxMDRFOTAwMEEzMzNGNjQzRkJEODk5MTQxMzZBNzBEQ0I2QTNBQjJCOEIKKzoxMDRFQTAwMDgwRkVEQjgwRkU1MUNFMDRCQ0Y2OThBQkMxODNGMTQ1OTkKKzoxMDRFQjAwMDFGM0NGNjlENDRGODk4QTA0Q0RGRUZCNDMwQkEyOUVCQzQKKzoxMDRFQzAwMDkwREMzRUUwOEI2ODcyQUY4NzNFREY1NjREMzhCRjkzNzMKKzoxMDRFRDAwMEFBQ0M5RjEyQzNFM0QxMDNCMjRBREI5N0FEMzU2MTdEMDMKKzoxMDRFRTAwMDA3M0NGMzQzRDdCRjE2RUI5RDU0MTUyRTc3MTgzQzA0QUYKKzoxMDRFRjAwMDVFMDUxRDUxQzI4OUJFOERDRTc5Nzg5NkY2M0VBQzNGRDcKKzoxMDRGMDAwMDQ4MzcwOUQxQTlGNDdCNjlEN0RDRkI0OTZBQjBERDRGOEEKKzoxMDRGMTAwMDU2MTJDRjdDNzNCMDFFQTU5Rjk3NzVGNDU2NjA4RTA0MTEKKzoxMDRGMjAwMEI4RjVEMTBGQTU0QjkwMkY0NkZDRDA3NkE3MTkzRjI1OTkKKzoxMDRGMzAwMDQ0QUJCNEZFRUVBRTE1QjI5NjNGNzhCQzk2NDQ5MDY2OTQKKzoxMDRGNDAwMDk4N0Y0OTM0NjlERTQzREI5N0M0RDEyNzk0MTM3OTc5N0MKKzoxMDRGNTAwMDI4MkYyN0YzRTc2OEZFM0U4Rjk1RDMzRTcwOTkyNDVBOTkKKzoxMDRGNjAwMERFMDI3MDA3M0NBNDk4MTg5QzE0N0IyRUYwOTEyOTg1RDIKKzoxMDRGNzAwMEMxQjlDQzE5OERGMjVGRjBBQjQyQzExOTk3MDA2QTg4QjQKKzoxMDRGODAwMDc4RTE5OTFBNDgzNTAxMUUwNUZGMkEwMTkzREY0NkY1OUQKKzoxMDRGOTAwMDVGQUFBMjlBNUNGNEZENUIyQjM1NEY1NUM2QzBGMkU1QzMKKzoxMDRGQTAwMDk2MUNEOUUzMEIyMzJGRTI1MjE4REVBOTgwRjY5RUNBODUKKzoxMDRGQjAwMDA2RUQyQzkxMzgyMDgxNjE1QTVDMEE5RDU3QTNCNUU3MTQKKzoxMDRGQzAwMDI3MzNFOEQ3RTUzOTE3MkM4MDlGRDVEMUNCNkZENEYyQTIKKzoxMDRGRDAwMDA3MUVDNzM4OEZCNzJFRkYzNjFBRThBQkYzNTI0NDREODEKKzoxMDRGRTAwMDM4Nzk1NTAzRUJBN0UzMUY1OTM5MEJEQjNEMUExNTVCRTUKKzoxMDRGRjAwMEM4OTUyQURBMkRERjQxRDE0NDlGRTk0QjZBNDkyMUUwNjcKKzoxMDUwMDAwMEMzQUIyNDgwRkU4Qjk2NUNEQjA5RTI4NUU5QzNBMTI5NTIKKzoxMDUwMTAwMEJFRUQyOTgwMUY1RjJEOTZGM0QyQzg3NjA5RjBBNEFEQUUKKzoxMDUwMjAwMEIxNDE1OTRFQzFGQTE0NzJDMjNFOTJBRTQ0NjBERkFBMzkKKzoxMDUwMzAwMDQyRUQwRDQ0NzkyQUUwQjNGOUEwMEQ4NDdEMDRBREFGQjMKKzoxMDUwNDAwMEMyN0JCRDNENDVFN0I3OTU4QzAxN0NCNzU1MjU0MEJEN0EKKzoxMDUwNTAwMDM4REVFRjI1NjZFNzA4QkJBODNBRkQ5NjMzMTJDQzc3MTkKKzoxMDUwNjAwMEI0NTcwMUI5NEFEMjUyNzAzRUU1QzRBQ0IzOEY0QUIyQ0MKKzoxMDUwNzAwMDI4Qzg2MTdFNTlCOTNFRjg1RTY5MzU3Q0U3NzQ1NEREMTUKKzoxMDUwODAwMENGOEU2QTczQ0RBMEY0M0UzNTlCRDIzRjdGN0Y4MUZFRTkKKzoxMDUwOTAwMDM3M0E4MkRDN0I1QjdFNTBCRTRGNTFFRkYyNTRFOUVDMzUKKzoxMDUwQTAwMDhGMzYxN0YwRTFFRkJFOTU5MUVGOERGOEQ4Q0FFOUYxOTAKKzoxMDUwQjAwMEM4NEE4RkE3OEFGMkRGQUYyMjI5M0VFODdBMkI1NDY5Q0IKKzoxMDUwQzAwMEFENERCRDM2RkM4Qzc4MzNDMkVGM0I5RDBCRDE3RTMzQUEKKzoxMDUwRDAwMEMyQUJGQzAzNTc1NTgyREExRjNFNDY3ODA4RjhEM0Y1NzkKKzoxMDUwRTAwMEFEMDdCODU1NjdDQkE4QUYwNEJDRkJDMzg5RDFDM0VGRUMKKzoxMDUwRjAwMDcyNjgzRDg5RDEwRkMzODc0NDkwNUUwNEZEQzRBNTIxMjkKKzoxMDUxMDAwMEZDNEI4MEY2RTA3Qjc0MEE5NjhERjAzNUMyOTNDQTAxQTEKKzoxMDUxMTAwMDM3RDZFN0Y4M0IwQzcwQ0I4MEFGRUVEQUVBMjE0MTM4QTYKKzoxMDUxMjAwMDUwQkFFQThBMEZBMTJCMDE4NzdFNzIyMzhCOTczOURFNTIKKzoxMDUxMzAwMDg1QkQ1Q0NERkJBMUY2MzJEQUMzOTUwRTlCMEJDMDVGM0IKKzoxMDUxNDAwMEQ5QzhFNjVCOTkxMUIzRDU5QjgyRjhEQThBRkNFM0E3NEMKKzoxMDUxNTAwMDE4MjlDMTdGRDlERjI1NjZFNzUyQkI5NEQxNjdFN0U0MDAKKzoxMDUxNjAwMDMzNjAzRjhGOEVEMEQ2MDI3RjA0QTQ3OEIyOTUyMEZDQTYKKzoxMDUxNzAwMDNGMzZDMDVGNTdBRTM2RDhDQjQ2NzhGQzBBRkU2NzYyMzIKKzoxMDUxODAwMDdGQjgwOUJBRkI3OTBBQjVBRkYzNjg3MTM4MTkwMUY2MkYKKzoxMDUxOTAwMDZGRTEyQkM1NzEyMEM3NDk2NzAyQ0E2MzIzM0Q5NjlFMDQKKzoxMDUxQTAwMEYwRjRGNUMzRTkxN0U5NTMyMjVBREY3QjNCQjUyMzNBMDQKKzoxMDUxQjAwMEIyMUY3OTAyQ0M5QTFCQUQ2RDMyRDBFMThEQzRCREU2MzEKKzoxMDUxQzAwMDk0MTVENjJGRTMzQ0M1QkNGRUVFRjRFQzRDQTFGMjY2ODAKKzoxMDUxRDAwMDYyNEZDRDlBNTNBMTdDQzFDNzE3RjBCRTg5QzNGQjI2OEQKKzoxMDUxRTAwMEUyREQyRkM3QzI1M0Y5QkFDRjhFMEZFOTZGNkYwQUY3MEUKKzoxMDUxRjAwMDE3OTI0OTMyQUNDNzlFQTIzMkY5Q0VGQjEzRUIxQjlEMkUKKzoxMDUyMDAwMDQ2RkMxMkMyRDlFQURCMkFDMUZDODlENzkyMTAxQ0NGMTYKKzoxMDUyMTAwMENDRDE5NDkxMzFFM0I1MTQ5NEM3Q0QwNEVENjU2QTVFQTkKKzoxMDUyMjAwMDAyMTJDQkY4RjczMjZCOEMxRkU2NDMwMkNBRDkzRTNDMjAKKzoxMDUyMzAwMDIwREZENUQ5MDFBRTE0MkVFNDRBNzQ3MDdFQkY0QjkxQTUKKzoxMDUyNDAwMDk0NEZCMzgzRjMzQkI3QzNFQTk1ODE5Rjg3NjlCRjg3QzgKKzoxMDUyNTAwMDcxQ0U0QTQ3MEI5MTZGMTU3RjI2RTg0MUUzRjcwQjFEOEUKKzoxMDUyNjAwMDVEQ0JFMTNCQURCNzEwRUJGMTc1MkQwNUE3OTFEMjVEOUMKKzoxMDUyNzAwMEUwQjUwOERGRDY5NEFCRDhBMTU2QUFDMjQyRTQ0MTU5QTIKKzoxMDUyODAwMDE0OTMyN0Q1MjQyMDgzREREOTE5QzlGOEY5RjVBRjE2NzEKKzoxMDUyOTAwMDIxM0ZCODg5N0Q2RDFFRURFRkQwRjlDOTQ3ODA5RjJCNjYKKzoxMDUyQTAwMEE5Nzg4MTdBOTMyRUU5RkRCNjZCRDE2OTE1MDlDQzgxNzUKKzoxMDUyQjAwMDc2RDU3NkIzQzEwRkY0QTJCRTU5Q0JFNTlBQjBEMzRDRTQKKzoxMDUyQzAwMEE5REFCOTE0N0MzRkNBMDc3QUE2RjNBQkM5MkFFMDZEMDQKKzoxMDUyRDAwMDZCRjZGODVCNkVBNzU1NTI3M0M2Q0QwMEY3Q0M2NEVENDQKKzoxMDUyRTAwMDM2ODNGRTlCQ0RFOTZCMDJEMDk3ODQ1NjkwQTBBRjhCOUUKKzoxMDUyRjAwMEQwNEZEQTNBMDM3REQ5MTM3NDdFREQyREM0OEZFQjJGQTYKKzoxMDUzMDAwMENCMzZGRjREMzczRjZFOTcxOEVERjVBMDlEREUxNkQ2RDQKKzoxMDUzMTAwMEJGMjM1RDBBQzlBNjcwOUVDM0UxQkMzNkRFRTIwNUI5QjMKKzoxMDUzMjAwMEE2REMyN0Y5NDgwQUNDOTc4QzVBNDVFNzM5QkJEOUFDOUIKKzoxMDUzMzAwMEYzNDdFN0M0MkI4OEM3MzlBQjIyN0Q4NEY5REZDRTdBRTcKKzoxMDUzNDAwMDVBRDZFOEZCQzdBMDk4RUQ3Njg2REE1NUE0MjVBNDNEODkKKzoxMDUzNTAwMEQwNDM4QzhBRjQzQkM3Q0VERTdENDRGQjE4OTYwMEZEMUIKKzoxMDUzNjAwMDlFNzJBMDEzRUYzNTlGMEZBNTUzRTNGODAzRjY2QjY4MDkKKzoxMDUzNzAwMEI3NTYyMkIzQzA3RTVBNkI3NjNCNUQyMUY2QzdBODU0NjAKKzoxMDUzODAwMDY2QkY5Q0I3NTc2RDMyQTUwRTZDOTc2OEQ2NjRCNzkyMEUKKzoxMDUzOTAwMDE4MkNGN0M0NUI2N0Y5QzJEODMxQTIzRjQxMjc2NTFBQzAKKzoxMDUzQTAwMEYzQ0IwN0VBMzczRDUwODU3Njk5RTk0OUJGMENGNjc2OEQKKzoxMDUzQjAwMDdBODBBMDdENUMxNjcwOUJFNkU5RUM3NEU2OUZGNkIzRkMKKzoxMDUzQzAwMEQzREJGN0EzOURCRTZDREY3RTY2QTdCN0FGNDI3QjdGQzIKKzoxMDUzRDAwMDE5QjVGNzQxQkU1M0JCMTE2NDI1OUI1MDNFREFFRjdERjIKKzoxMDUzRTAwMDdFMjZFNTJENTJENjJFRjVGOUExMEE0NTQ1NUExQkFCNkUKKzoxMDUzRjAwMDdGRjdENkVDRjg0N0QzQzE0RkQ0OUM2NkVBRjdEQzlEMjMKKzoxMDU0MDAwMDVBQjBDMTRBRkQ5RUQ2MTQxMjQ5QThERjMzMkJCNUUwMkQKKzoxMDU0MTAwMEI2RjUxMzI4MzUyNUI4MjUxMjhGRTUwRDMxMTMwN0VGQTIKKzoxMDU0MjAwMEQ3REU5RDlBQkYwMUZDREE4MUZDQ0JFQTU0RjVBQUZFRDcKKzoxMDU0MzAwMEU1MDdFOTlFQkI1MzQzRTIwMjU0M0U4NkI1NDczMjMyNEMKKzoxMDU0NDAwMDJBRTY0MDNEMjEzN0NBQTIxODdGM0U2QUYyQTdGRDE0MjIKKzoxMDU0NTAwMEZDQURCNzY0MDJGQUY0OTY5Njc5RTgwNzRDNkI1OUVDMDgKKzoxMDU0NjAwMEE5QTJGM0U5M0Q3MDM5OTM5ODQwNUUzMkJDMzdBNjMyNjkKKzoxMDU0NzAwMEJCQTYyOTlBRDk5NzRERDFCNDFGMkE2RkRFNzQ2QThEQzUKKzoxMDU0ODAwMEQwN0Y3N0Y2RjNFQkM3NTI3RUE5RUI5MDVERTAyRjQ2MTUKKzoxMDU0OTAwMDY2NUQxRTA1RkMzRjZERkNGMzRGOEVBNUUzN0MxODUwNDYKKzoxMDU0QTAwMDMwRkVEMDY5QTM3NDQ4REY3RjQ4MjRCNDY3Q0I4RTQ1QjMKKzoxMDU0QjAwMDc4RjY1MUJDN0NERjU5REU5NjFBRTI5RjdDREY1OTg1NzUKKzoxMDU0QzAwMDY1NTI0QjFEMkJDQTFGMkJBQzhDMkYzRjI0RkJEMzdFNjgKKzoxMDU0RDAwMDRBQzdGMTM2NEI2ODA3OUM2RjRFODkwMzNBRTgzNEQzQ0MKKzoxMDU0RTAwMEY1ODdEMEUzRUE1NDA1RTk2RjM1QTdDN0JBNEIzMjA2MTIKKzoxMDU0RjAwMENEM0FDREZFRTQ2NjVBQkY0RUYxOUJDMTBGQUNCQjY0MDIKKzoxMDU1MDAwMEMxRjczMDBGOTg0RjY3QTRCRTlGQzc3OTNGOEZGN0Y1NUIKKzoxMDU1MTAwMDQzRTEzMDBFRUExOUZCNTFEODdCODlBRENGODg4N0QzQTAKKzoxMDU1MjAwMDI5OTUzRjg1RjU3Q0RGRTk2RTQzQkM1MUY5MDVGQUEyNjgKKzoxMDU1MzAwMEFDQjhFQjA0RDgxMUQ3RDY0QjZFMDlGNDUyRDM2NUM5NzkKKzoxMDU1NDAwMDNGOUFDMkYzRUMzRTMzRkFGNzY3QzEzRkE0RTM5RERCMTkKKzoxMDU1NTAwMDc3NzBDODVDRkE2Q0RDRkRDNzU4RjAwN0I3NzA3QzlEQUIKKzoxMDU1NjAwMDUzQkE2MzYxN0VDQjVFQTJGRTBCREE0M0ZFMjFGNzYwODUKKzoxMDU1NzAwMEZCNzkyNThGQjE2MUFDQTFGQTdBRUNCNzA3OTMzRDJDOEEKKzoxMDU1ODAwMDc4QTg0MjdDNEVEOEE1Mzc1OUJEM0U5ODVGRTcyQTE5QzYKKzoxMDU1OTAwMEU1MDhENUU3MjI2RTJBODFGQzlFQjQ0Rjc2NDdDNkY2MTEKKzoxMDU1QTAwMEI3NTc1RjRFMzUwQjc5NkIwMjNERjY4MDlEOEQzMzkwN0EKKzoxMDU1QjAwMDNDMjhCQjk0NDg3QzIxRjJBMjRDRjFDQjMwRkZCMjRCOEIKKzoxMDU1QzAwMDQzRjBGREI5MjNBOTRGRDQwMkREMTJCMzBCQ0Q0NDg1QkUKKzoxMDU1RDAwMDc0QTFCRDJDMTFGMUQ3OTU0RUQ3RjMzQTJGQkNCMUVGODIKKzoxMDU1RTAwMEMyRUQzNzIyMzM1MkJENDhFQjdDQzdBRjI1QTFGRDBDN0QKKzoxMDU1RjAwMDIxRDI5MkEwNUQzOEU5OTIzRUVFNkFCNEEzODU5RUFEQjkKKzoxMDU2MDAwMEU4MkM1QTlCNEMwMEVFRUFFRDM3MDIxRDFFNTE5MDdGQUMKKzoxMDU2MTAwMDhDNzY3Njc1NjBGMjAwRjZGNDA2QTRBMzNERkJEMkEyNjgKKzoxMDU2MjAwMDIxMkVCMDkxRjM3OUQzQkUwQjkzNDEzRTJEMjdGRTNCNDMKKzoxMDU2MzAwMDZFNEM4MkI4ODM2Q0Y3OTNBQkM1QkJENkZFNkUxMjFENjEKKzoxMDU2NDAwMEZGOEQ4MEEyODIzQzc4MjNEMDY1MkRDNEIyMDlFMzFDNzMKKzoxMDU2NTAwMDY1NkY5N0U1MDFGRjc2MDY5NDFBRjA1QkNCQkVFQThBODgKKzoxMDU2NjAwMDlFOTcxRkI0NkIzQTJGOUJGMEZEMUI5NzBGRTA3QkQxRTkKKzoxMDU2NzAwMDZGNjcyMDIxMEZGNEYzNkUxM0YzQjdCQjBFRkYyRDFBRTMKKzoxMDU2ODAwMEU0RUIxQjk3Q0YyN0EyREYyRkVDOTJGRTc2MzVGQTAxRDEKKzoxMDU2OTAwMDk1MzZCOTJGMEUxRDZBQkYxM0I5RUNCODE1RkM4RDM4QkQKKzoxMDU2QTAwMDMzOTExMTBGQ0MxRkVENjc5NzdDNDBENkRBNDg3RkZCMTIKKzoxMDU2QjAwMDQ0QzAxRkM4MTJGOEE2OUY1RDFEODRCN0NFQkVCRTkyMUYKKzoxMDU2QzAwMENBRURFNTkxNjRFQzE1QjA3MzJGMjcyRTA1N0RERERCNjcKKzoxMDU2RDAwMDE5NkQ1RjhERjEyOTY2NTdGNDc2N0RGRUIzQTlGMEZFNTIKKzoxMDU2RTAwMEE4OENGMUI2REVDQjMyRjJENTgxRDc5NzhFRUU4OTA5NDAKKzoxMDU2RjAwMDg1N0IyQkUyRUZFMkIwQUZCRTdDOTVENkJGNzgyODBBNUYKKzoxMDU3MDAwMEUzRUE0NDcxRTU4NThCOUYwNEUzQzlGRUUxMjYyNzNDNkIKKzoxMDU3MTAwMEJEQzM0RDEzOTBFRDMwNUVGMDlENjBCQ0MwOTE4NkYxMkQKKzoxMDU3MjAwMDgyQzA2NDUwNTc5OTlCNEY1QTIwREVCMjMxRDUzMzM0MzIKKzoxMDU3MzAwMDBEREJCNzQ3QzNCQTE3NDUzMUY5RTQyNTE1QzlENDc4NEQKKzoxMDU3NDAwMDIyMkYxRDMxNTUwMEJEMTRBRjUyMTFFRjNCQ0RENEM0RjMKKzoxMDU3NTAwMDAyRkVEOENFRkNGQjlENTRERTgyNUZCNEI4QkRDRDkyNzQKKzoxMDU3NjAwMDEyODJFN0M1MTQ0MUIwQkVEMzY2RUZBODg0OTBGNzNCMjAKKzoxMDU3NzAwMEQyNTgzQ0UxRjRBMTI1Q0YwMTlDQkM3RjhBMjAxOTYxNUQKKzoxMDU3ODAwMEVDRDM4N0QyOTgzQ0RDNkJGMTRFREQwNUY1M0UzNjExNEIKKzoxMDU3OTAwMDE4QUZFQkYwNkYwRTBGQTc3ODVFN0M0MjJEMDIzRDMwMDQKKzoxMDU3QTAwMDJCNERDNTdBMUQ0Nzc3QjYwRUE3RjUzQTNFMDBFRDQ5NTkKKzoxMDU3QjAwMDRERjI2REY1QjI4OThFRkIyQTUxNTlEQ0VGQjgwOUU3M0QKKzoxMDU3QzAwMERCMTcyNzI1RUU0NDU4RUYxRDY5NEM4RUJEN0E4NEQxMzYKKzoxMDU3RDAwMEFCMThGRkQ1MjhBNkVGMjZBNzMxRjk1Mjk2QzZFMjZFODAKKzoxMDU3RTAwMDdCOEU1NDI0Q0U0NUJFRDIyNjAxREM5QTRFRjVCNEM2M0IKKzoxMDU3RjAwMEFBQzEzOEExQjAwRjI3MUVERjMzQjU4MEZFRUZDNEIzQjYKKzoxMDU4MDAwMDI2M0JBMDRGM0RCRTU1ODZGNUFBQTcwOTg5OTdGQUM3NDIKKzoxMDU4MTAwMEIxNjg3RjUzRDIxQ0MxRkU1RTNEQ0JGQUEzRjMzODAwQzIKKzoxMDU4MjAwMDdDMTc1ODQ1RUM1QjkxRUEzQzhGRTdEM0YyQUJERDRBM0QKKzoxMDU4MzAwMEMyNjMyQUUyMDNGNTgxQzA4MzU4OEY5ODg3REE0RURDNzEKKzoxMDU4NDAwMDVCNjI5MDQ1REM3QkFFMTY4RkE2N0UyN0YwREIzODJFQTAKKzoxMDU4NTAwMDNGREY0RDc1REY5NUM2RUNBQzUxNDA3N0E3MEY0NUExRjIKKzoxMDU4NjAwMDNEQjY5N0M3QjU4OUIzN0UzNEMwNEZFMEU5N0JGQzY5OEMKKzoxMDU4NzAwMDlDQ0Y0MEUzMzc3MzNBMTBDRjlENjZENThCRjRGMDEyN0UKKzoxMDU4ODAwMEQzQkIzQjZEN0U2QjFBQzhCRjU3RDJCMEFDN0FCREQxQ0IKKzoxMDU4OTAwMDg1RjQ3QjUzNDc4NjRCNTY5MTlFOUIxOUREMzIzQUJGNjgKKzoxMDU4QTAwMDg5RDNCOURBMUVCMEE0ODRFMDYxNjBGOUM2RTBERTQ3QUUKKzoxMDU4QjAwMDNGNEEzQkQyNTVDNzA5ODJGQ0I2NjRDNzdEMkMwRTQ5Q0UKKzoxMDU4QzAwMEZDQzk4QzlGQkNDOUMwNUZDMDE3OENDRkZDQzMyNEY2MzkKKzoxMDU4RDAwMDhDMDUzRTk5RDhCOTY1NEQzMjZERDcwMDc0OUYxRjg0RjEKKzoxMDU4RTAwMDgzMEE3QzAxN0MyNkQ2Njk2Mzc2RjJDRjc4NTk3QzZGNzcKKzoxMDU4RjAwMDRCNjM3MUM3NkEzOTNGQUVFNzJBRjFCQjM3NTYzQTg5MjUKKzoxMDU5MDAwMDEyMTJCRkZCMTk5RkZGNjJCMjAxRUREM0M1OTdEQkQwMjYKKzoxMDU5MTAwMDZFNTU5QkQ5NzNGMTAzRUM5OUI5QjlERTAyRkE2MEYxQzcKKzoxMDU5MjAwMDI2QzkxRENFQUVCNjczRkM5REUzN0M0MDRDNTFDMzg5QTUKKzoxMDU5MzAwMDMzRjhEREMxRjlFMENDQkUyNzBFQzIzQTI5QkQzRTA3REYKKzoxMDU5NDAwMEYwQkZBMTYzQzNEMzAwMjY0MUZGNjdCNjk5QjFCRDkwRjQKKzoxMDU5NTAwMDIzQTJGRDM2REVGRjRCQzcxOUZGNENEQzY2QUVCODlCQjkKKzoxMDU5NjAwMEMyN0JBMjk3RDgyMTlFRkVFQUI2RUQzMkM4Rjc1NzgxRDYKKzoxMDU5NzAwMDNGNTI5OERDMDBCRDdDRkFEMDYzRDEzRjAwM0EzODY5RDEKKzoxMDU5ODAwMDIyMTBCN0RGNkIyMThCNzY4N0UwQjc2QkNCQ0IzQTc5RjAKKzoxMDU5OTAwMEIwNjRDN0FBQTlEMDRGNjk0RjgyMDQ3QTQwQzgwMTgxNzgKKzoxMDU5QTAwMEVGQkQxNkQ3MTQ5NDI3RDMwREYyQTQ4QUI1M0YwNkYwQTUKKzoxMDU5QjAwMEE0RUI3QTgyQ0I5MzI3NkFBODNDQTFBRkUyQjdDNTRCOTAKKzoxMDU5QzAwMEQwQ0Y1RTFFMjczNkMyQUY4QkUzNTNEMEUzOEQ0MUI5RjMKKzoxMDU5RDAwMERCQzVFNDZFNEYyQzc0QkQ3Q0RBNzk4Q0QzRjY4REMzQjUKKzoxMDU5RTAwMEU5RUU4OTJBNDE3NzI5MTJDMDkxREFGOUE2NzQ1ODM3NkQKKzoxMDU5RjAwMDg1MEZEMDNGQjVGM0VGOUQ5MThGNUM3QTQ0QzFGRDIxQjcKKzoxMDVBMDAwMEJFREY0NDU2MEJGQjQ3QzdCRjQyQ0VCRDlCQUExRDg3RDYKKzoxMDVBMTAwMEYxNEJBQTlBRDc4MEZGOTE1OEVCNDVCQTNFMjM2OUEzNzAKKzoxMDVBMjAwMDEzQThCRTNBMDM3QzFENDYyRUJDQ0FFNUM4NDVCMzM2NTIKKzoxMDVBMzAwMERBMUVFNjdCOTA4RkM4NzBFMDgzNDU0NDMzQzEzQUM4RDQKKzoxMDVBNDAwMDY2QzkwRTcwMTVERkQ1Q0Q4Q0RFM0VFN0YwMTFFRjNGNTUKKzoxMDVBNTAwMDM3QzA2QjEyQzAyQjBERTFGNTM5RDc1MzE2MkI5RDZGNTQKKzoxMDVBNjAwMEE2OEZFOTI5MjI1NTIwM0QxMkQzMkRDMzgxREZDRTk4ODAKKzoxMDVBNzAwMDA5RDJDRjE5MkExNzAxNkU4QkEzRjRGRTg5NThENzM3QTQKKzoxMDVBODAwMDlDQUYyRUM2QjM3NUVDRTVFM0ZFMDk3QzlFRjE1ODBGODIKKzoxMDVBOTAwMEVEMEE2RkI5MDlGNzZCODEzRTkwREVBNjI3QTBERDQ1QzAKKzoxMDVBQTAwMDFEMjYwNUY5QkM2RjNGQzIyRjRCNEMxRUM4MzAwRjNCNjMKKzoxMDVBQjAwMEY4NzUxODI3REE4MkZEMkVEREI1MDVFOTI2QkVDNjVFMkIKKzoxMDVBQzAwMDA0RkI0NzRGMjhBRUM4Rjg5MDc4NkZEN0Y2OERFODRGQTMKKzoxMDVBRDAwMDAyM0QwMTVGMEU0NDhGOEI4MDFFNDkxODNBRjQ1MTNBMDMKKzoxMDVBRTAwMEE0RUQxMjZBOUExMThGMTRCRkY2NzREQTZGN0M5NTI2QjIKKzoxMDVBRjAwMDAzREQxOEYxMkJGNjE5MDUzQ0Y2MUFGNjI1NjdBNjMzRDcKKzoxMDVCMDAwMEY4QTRBNDMzRkU1NEI5RkMxQTU4NEZFOEU1MkRDNTk3MDQKKzoxMDVCMTAwMDlBRUVEMEQzMzdFMDRERjA1QjRDM0E5MzRGMDNEMUY5NzYKKzoxMDVCMjAwMDQzRTk3NkVDQjdGNUMzNzk0RTkwMTc2MjNGNEFFQzJGMDQKKzoxMDVCMzAwMDhCRjFDN0E2MzM3QTFDNjgzRkU5OUNBQTE1QTUxQkY2MTIKKzoxMDVCNDAwMDNCRDVGQzIwOUY1NDczRkI3MUM1RjYwOERDQTdERjBEMjUKKzoxMDVCNTAwMDVGMDBFRTVENTFCODJGRDEyNzA3MTVFMjA2N0M5NkE3QUUKKzoxMDVCNjAwMEE3RTA3ODAyQkY2QThCODVBNEQzNzEyRkE2RDQ3N0M1MkUKKzoxMDVCNzAwMEQwNEYzNzc3N0I2QjBCRTgzQTc2NUJCQzMzQTdBMURENjAKKzoxMDVCODAwMEVEOUEwMkZENEZBOTM1RDkyMThFMURFRkI2NEIxMDA3QjYKKzoxMDVCOTAwMDQxMTIwN0JFMzhDQUM2MjFBQTRCMzdFRkE5MUNFRTAyMzQKKzoxMDVCQTAwMDRGMDIwRTAzRTlBQjgxRjBGMzEwODc4RjgzN0YzN0YyNEEKKzoxMDVCQjAwMDc1MDZGRjZFNEU2N0Y0N0Y2REJFRjZDQTQwRjdCMTQ0QkUKKzoxMDVCQzAwMDVCMkRDM0ZDQ0I5ODFDRUFFM0VCMzI4MkZCOEQwQkQyM0UKKzoxMDVCRDAwMEY1N0MyRENBNjFGODdBNDE3QTI4NUY0RkU4RDFGMzM1MTgKKzoxMDVCRTAwMEI1NzBCOTNFNDVGRTcyNkMzM0JCOTkzRkM5RjhFQzYyQTMKKzoxMDVCRjAwMDI0OUJFRjhBNzRBNjg3MUNBMDNGMjhGRTFDNUVCNkVGOEMKKzoxMDVDMDAwMDNBOTVEMzE5QTVBMDM5MDBFRkI2NkQxMUI4OUYyMEY4QzkKKzoxMDVDMTAwMDNFNzYyNkE5MzBDM0ZFMkRFODFCQTgzNTUzM0I3MTEzRjEKKzoxMDVDMjAwMEVDREIzQTJEMkFFQzIzOUYzMTA3MTA0RjY3QThBM0RBNEIKKzoxMDVDMzAwMDg2RjhGNDYwM0VDQTk5NDMzNzMwNzkzMEFENEZGRkI4RUIKKzoxMDVDNDAwMDRENTA3RTdGMDRFRTI3NTRDQjlENDhENzJCQUEwOUVBRkUKKzoxMDVDNTAwMDhGQUVFREE1NDgwNzhCNkE1MzI1QTBCMzI1M0JFMjI1RkYKKzoxMDVDNjAwMEY4OUU1MDY1MzdDOTIxNzJCMUI0NDU0NjdBQTI3NEJCMUIKKzoxMDVDNzAwMDJFM0QwNDdFQTVERTY2MTlFMDMyM0E1MTczOUFFM0E5RkYKKzoxMDVDODAwMDlFREQzNjc1NDY2ODVDRTg0OTVBNUVFRjBDQzY4NTY4NEQKKzoxMDVDOTAwMEY5NjczMUMzMDYxRjE3REE5ODdFQ0JDRkQ2OERBMDRBOUQKKzoxMDVDQTAwMDI0Q0RGRDE0OEM3QjRFRjU2QzA0QkM5NDI0Mzc2M0JDNkUKKzoxMDVDQjAwMDczQjA3OTEwNEQzQ0FFRjRDMTIzNkY2REFGQTdFQkFFNUUKKzoxMDVDQzAwMDdCMzRGMDA4N0NCRDE3RTJBRUQ5OTAzRkMwRTJBRTREMDgKKzoxMDVDRDAwMDlEQzczMDFFREJDOUY5RjlFRjRFQ0YwQjMwRUVFQ0U2NzUKKzoxMDVDRTAwMDI5RkFGODZCNjA3MEUzMjY3MUJFMjUxRjEwODQ3RjkyM0QKKzoxMDVDRjAwMEE3NTk4NkI4ODQ5MDBCRkJEMjEzODRGRjI4QzFGRTlCNjIKKzoxMDVEMDAwMEUwMDc5MDJCNjA3RjhBM0MwODg4ODdEOTEyODI3MjE5M0QKKzoxMDVEMTAwMENBNzEyMTdBNzU3RDJEQjU4M0MyRjBEOUMxRjQ5OEIwQ0UKKzoxMDVEMjAwMDcyOTA3NEZFRkRENzNGQTBGRTdFMTM3QzYyNzJGMTYwMUMKKzoxMDVEMzAwMDdBODhERTdGQTJGNkUzMjExQThCN0I2MEJDRTk3RUVFRDcKKzoxMDVENDAwMDQzM0VCN0RBRjVGQjJDOTA0M0VGQzgyOEZGOEIyMjJDOUIKKzoxMDVENTAwMDVFMDlGNjg3REM0NEI1MEZFMUZEMDE5Qjc0NEE3RTFCQUEKKzoxMDVENjAwMEY1M0Y5QkZFMjYxMTM3QzRDRkZFMjZFM0YzQjkxRjc5MUEKKzoxMDVENzAwMDZBNTJDMDlGRUYzMEI5QTgyNTAwRjkxNDQ4QzdBRUQxQzgKKzoxMDVEODAwMEM0NjdBNUY0RDdDRUY3NkJDQjBGQzZCOENERjQ3REFGMDMKKzoxMDVEOTAwMDY0NDVGOUQ3QkIzRkNBMEI3Q0RENkIzMzYxNUNCOUVCNjMKKzoxMDVEQTAwMEI1MDg4NEVCODVGNDI4RUU1RkZCNzQ3RUI4RDhGRjg4RDUKKzoxMDVEQjAwMDhDRThGOTQzMTk2REJGMzU5MkY1QkIzNTkyQzVFOUI2NEMKKzoxMDVEQzAwMDNFOUExOTA3RjZFNzQwRkJFMzY1MkQ2OTE4RTcxM0YxRTIKKzoxMDVERDAwMEM3RDQ4MDZBNjI0OTY0NkMxQzI1NDA3MDdENjJCRjdDQjgKKzoxMDVERTAwMDEzRTQ2QjE0MEY5Q0FGRjFEN0Y0QkU3QzhEMDBEMDUzM0QKKzoxMDVERjAwMEQzQUM5RUMzMzA0N0EzMUYzNkU0RThDN0ZCQTE5RjIxNjUKKzoxMDVFMDAwMDJEMkM0Q0IwRTlFODBBMDlENkI5QTkyRUJDMUYyNkU4MEEKKzoxMDVFMTAwMDY4MTM4RjdCODVFNDQ1N0NBQkQzMkZGNTA5RDFBOTIxOEQKKzoxMDVFMjAwMEYyNTNCNDdCOUFFNzQ1OTQ3NkNEREQwQjc2MUVFNUVGMTEKKzoxMDVFMzAwMDczQTFGQzNEQjVFMDkxQzg3MEZCRjM5RTk2MUY2MjVDQjgKKzoxMDVFNDAwMDc0MjBGQUY3OTg4ODE2MkVFRTM3M0E4M0NCNUIyNTMwMEMKKzoxMDVFNTAwMDFDRURDMTM3MkU0NkE5NjFGMjI1M0NBRjk5MUMwMDE3RjUKKzoxMDVFNjAwMDExOUZFOTNGRkU4RjcwRkM2MTE5N0RGQjdGQzMwN0IzNzMKKzoxMDVFNzAwMEZGNjc5Qzc3Qjc5OThDMENBNzU3MDQ5RThERTM4NTY5QzMKKzoxMDVFODAwMDNGREIxNUQyREU2MzIxREFFRTk4RkVFRDg0RERFQjkxODcKKzoxMDVFOTAwMEY4RkVFRTg3MDRGNUFCQTAxMzBBRjc3MTE5RjQ3QkUxNjUKKzoxMDVFQTAwMERCRjNDNjQ1NDFDMkExQjU1OTA2Nzk3MEExQTMyQjE5RjAKKzoxMDVFQjAwMEUyNTYwM0Y5ODc2MjNFRjQyRjIzNUNCQzg1OEVFNzA5MjYKKzoxMDVFQzAwMDg3ODc2OTE5NENCRjdBQ0NDQzBFOTVDQTBGREQwM0YzRDYKKzoxMDVFRDAwMEYyN0M2NTkxMjI0MkU4NkMyMkFGNjdEQ0M3RUNGQ0VBRjkKKzoxMDVFRTAwMEJGQzdBMTlDMzRGQjkzQzNDMUNGQjhCRjM5MTE4MjkzMDQKKzoxMDVFRjAwMDRDREZCMTcxMzk1QzVBQ0I0OTQ1NDQxMkM2MEJDODU2QzgKKzoxMDVGMDAwMDE1RkM0MDI2MkZENTE2ODI3QzNFNDY3MkUzQkFFQjIwNjQKKzoxMDVGMTAwMEU4RTIwMDNBRUZDNjNDQzgwQjQ3NjVBQzU3Nzg5RkVBMDkKKzoxMDVGMjAwMDAzQkY4OUVBODVCQjAxN0VBNTQ0REI2QjRBMEJDMjRCRUMKKzoxMDVGMzAwMEQwNDNFQjhCRDQ0RUQxQzVBRDE4RkYwOEZGNzUyNDhGMkQKKzoxMDVGNDAwMEZGNTA1NUUzMEVDNURGRDA1OTk0NTQ0M0U0RkUzMENERTUKKzoxMDVGNTAwMDRBOTQ5MDM4NUJGMjIyQkJBRTNDQjJEOUE5QUJFRkY0QzUKKzoxMDVGNjAwMEZBMjVFMDJCNjc4QkFBN0IxRjk0NTc2Q0JEMjNCRDY0NzkKKzoxMDVGNzAwMDBCRThGRjREQTQwN0Q3Mzc4QUNGNjc4Q0E0MjE3RDVDM0YKKzoxMDVGODAwMDM4RkE0OTAyQzQyNTdGQzBGOTg3QUVCNzA1RDdEQkEyMkUKKzoxMDVGOTAwMDVEMDhBNTBGQjFERTZCQURFQjgzOTU3NDNFOTRFRjNGQ0EKKzoxMDVGQTAwMDAyRkY5QzNFNjczRjcwNTIxQThBNzBCNzgzM0FBMDdBMEMKKzoxMDVGQjAwMDkxQjUxQkY5RjAzMUY0MjM0NzM2NzdBMzFEM0ZBNzY1NTAKKzoxMDVGQzAwMEJGMDRGQThCQ0EwRDZDQjc2OUE1MTU5RkNGQUNCNEEzRkIKKzoxMDVGRDAwMDlGMkZGMDNCODJENjgzM0MyNTZGMDVDOTg2N0Q4MTgxNEEKKzoxMDVGRTAwMEY0RDNDNjhDNDFFQkE3OEQxOTYxRjQ5M0M5MUE3ODEzQzkKKzoxMDVGRjAwMEY2QzExQjNCNjUxNUU4NjBDREMzMDk5OEZGRjI1Q0JCOTkKKzoxMDYwMDAwMDg0RkIyRTA3M0I1OUZFREY3M0FENTFBODQ3QzRCODVGMzAKKzoxMDYwMTAwMEJFMTQ4N0ZCM0Y1RkYyN0Q0MEQyMTU4RkY0REQxNENGQjUKKzoxMDYwMjAwMDcxQjIzNjFFRjdDOTdCRjkzRTY0NDdCQUY2MUYxOTIxRDMKKzoxMDYwMzAwMEYyRTBCOUNFNkYyMjQxN0ZFNDg5M0M1QjgzREUwMTQxMEYKKzoxMDYwNDAwMDJDRDFGNkUwMTMwMTFEQjdBNjE0QUQ5MzYxNUQ3NzY4RkUKKzoxMDYwNTAwMEUzMjI2NUU0RjdERDhDNUU5OTdFRkFFNUFFMEE5MzE2REQKKzoxMDYwNjAwMDgyOUYwQjFENUZDRjM5QTBGNkRGNUYxMkZCNTA2MjdGNkUKKzoxMDYwNzAwMEVBNERBN0Y2NkE0Njg4QkMzNkVFM0IxOUY3NEJFNDU4NjIKKzoxMDYwODAwMDJCRTY2OUJCRTQyODk3QUNEN0I3NDg4NzZCMzI5ODNFQkMKKzoxMDYwOTAwMDVEQjMzRjBBRTFCODI2MjMwNkY3N0JFOTdDOEZDMDM4NjEKKzoxMDYwQTAwMDVEMzYwQjE5NDZERjVGMzgxMTgzRjVDNEZDRTk3QzBCQzQKKzoxMDYwQjAwMDhGODY5OTZGOTMyOTMwRTc4MEE0OUJFRkIxQUJDRjU3QzAKKzoxMDYwQzAwMDlGQ0YyQ0U2RDc4NzFGMUUyRjkwNkQwQUFFQTM5NzQ0NTMKKzoxMDYwRDAwMEI5MDBBRkVEMTZENzA5MERGNEVGM0I1MTJDN0Y4QUUzRTEKKzoxMDYwRTAwMDZGMzlFN0NENUU4QTJGODlFMkFCQjdFMzQyMjREMEYxNjYKKzoxMDYwRjAwMEMxNzRFRDI0Q0M0MzFFMTk4ODA1RkZFNTYwRTc4NTFDQkIKKzoxMDYxMDAwMEUwOTc4MUY2MEQ5NThDOEFCRjAwQkUyMEZGMEZGMTY2RTcKKzoxMDYxMTAwMEQ3MkVFQzIyOEMyRkI1QUJCNENCQzhBODM4MEJGNUFGN0IKKzoxMDYxMjAwMDAzM0VERjVDMEY3QzlBOTQ5ODc1QTFGNjk3QzRFNUIzQTMKKzoxMDYxMzAwMDkxMUVBNUNFRkRGRjAzRkIwMTk0MUYzMTFGRDUzQjhBQTUKKzoxMDYxNDAwMEY4RDY1MEI4QjUxNjcwQkE5QzQ5NTQxNjlGRDFEMzRCQTcKKzoxMDYxNTAwMDQ3QkFDNzlDRTkwOEYyRjE1NUUwMTMwOUY1N0U5OUVFQkMKKzoxMDYxNjAwMDg5ODYyN0NDMjM3OTJDQ0EyOTFCOTRBOTVFREI2QjQ5MkQKKzoxMDYxNzAwMDBEREE1QkEzRDM5OERDMEJDNDEzQ0M1RjMxRUVGNzY2NkEKKzoxMDYxODAwMDY0Q0M0OENBQTQ3MDRCQ0Q1NjRERjZGQ0VCRTI4NzkxMjcKKzoxMDYxOTAwMDk5NTc4NTlGMUZFOUEyOTFDM0E5MTFGNjE5Mjk1Q0M4RDcKKzoxMDYxQTAwMDNFRjM1OTVEQkU4MDAxMEUwN0QzM0Q1OTBDMEU0MTNBQjYKKzoxMDYxQjAwMDVCQTM1RTE1MUU3OTBDMUU1QTIxQUNDMzY2QTZGNDAyQzEKKzoxMDYxQzAwMDQwOTk1MEVGQzRCQzE4RDU3RDM3RUM3RkVFNUNDNUUwM0MKKzoxMDYxRDAwMEQwRkIyMjgzQzNFRTJFMTNEMkY1MTY5MjhCRkM5OTZCNjMKKzoxMDYxRTAwMDNBM0YwN0ZBQTdGMjY3MDJGNDUzRENERDY2ODI3Q0MyMEQKKzoxMDYxRjAwMDBDOUY2QTgyQjg3MjRFNzdCQkM5NzQ3NUJBMkRDQjQ0QjYKKzoxMDYyMDAwMDdEQTE0RENBNjRGNkM1RkQ4MDg3QkM1RDJDMUU3MzE1NEIKKzoxMDYyMTAwMEJBQURDQzFDN0Y1RDcwQUZDRDFDM0Y3ODM5NDRFOUNBNjQKKzoxMDYyMjAwMDEzNEE1NzgzQ0Q0QkEyRjQ0MTkyMTNGQUY3NDc0ODBGMTQKKzoxMDYyMzAwMEM2RkRGN0JGMTI4MUYyN0VGOTFFMDlFNUQzRjJENzNGMDIKKzoxMDYyNDAwMDlCMDNGMDVERkU5QjA4MjRDQUFBREY0NEUyRjdGM0ZCNDAKKzoxMDYyNTAwMEQ4RjcyRkNCQzNFRjRGREY5NTk5ODA3QUI2QjFGRDNFQ0IKKzoxMDYyNjAwMDRGQTg3RTE3NzZDMzRGRERFN0VERTk3MjcwOUYyRjcxNUYKKzoxMDYyNzAwMDFBM0I2RkIyMjY1MkU0OUJCMkZEQkU1ODRFNjc4OTIzOEIKKzoxMDYyODAwMDNENkVEMDUzODlENTJDOUUxNDFCQjMxMEY3RkJGQTlGOUIKKzoxMDYyOTAwMDJCNjE3Q0VCRTBFREVDNzYxNUVEMDdFMzM5MTMzOThBRTEKKzoxMDYyQTAwMEU1RTUzOUM4RkFBRjAwNEU4OTM1RkFFRjhFOTgxQUNDNzkKKzoxMDYyQjAwMEM3NzMxOEY2RkYwNEJDQkQ5OURDNkVCNjEwMjdDQTU5MjcKKzoxMDYyQzAwMEMzM0VCRjc4RkUyNTkzREJFQjZCRTM0REExRjIwNEY0RjQKKzoxMDYyRDAwMDAwQzA3NTg1Q0Q4QUVCNUVFMTIwODlCNTEwNTdCMDI5RTUKKzoxMDYyRTAwMDJFMUNDQkQwOEY3OEM2QkI0RDQ0MEQzRDJGNTMxMzQ1OEMKKzoxMDYyRjAwMEQ0MTBCQkM4RTE0OUQwOTU4N0NFMUFBRUFCM0Y0QzRCMEEKKzoxMDYzMDAwMEQ1N0Q0RjVFOTRBQkZCM0VCMjc5QUNBRTNDQkFFNTA2QjAKKzoxMDYzMTAwMDVERkQxNDBBODBEMDcyREFCQTVCNzRGNTMzREE2NkU4OTAKKzoxMDYzMjAwMENBNTk5QkVFRDZENUNGRjFDREQ1N0RDRkRCQjE0NEY3QTEKKzoxMDYzMzAwMEJEQTA3RDg1QUUzQ0E2RTMwN0JBRkFGMjAwRjZCODgwQjAKKzoxMDYzNDAwMEIzMkNFQzcxNUJCMTA2NzQyNURCQUM1MkE4RERGMjIyRjQKKzoxMDYzNTAwMEFGNTcxRTZCNDVGODNGQzJGNUY1MjMzNjBCRUFFQjQ3MDYKKzoxMDYzNjAwMEI4QkVFRTcyOTQ1Qzc1NUZFNjlGRjVERkRFMTZGNEMwOTIKKzoxMDYzNzAwMEVEQjUwQTFFMkZGQkYyODBDNTA0RjRCOEZDMjBBNThCRjYKKzoxMDYzODAwMDMxNjhBRkJEOURDOUVDQjVFOUY1QjhGQTgwMDVFNDVFQUEKKzoxMDYzOTAwMEY3MDBGOTIwRUY2NTcyM0Y0M0ExN0U0QzE4N0ZGMDkzMjAKKzoxMDYzQTAwMDRDNTUxN0I3MTNGRTAzOTU2QkVGNzNGREMyRkMyNkQyNTUKKzoxMDYzQjAwMDJDODMxQzEwNzJBOTI5OUFBMDlERDcxNDZEQzczQzlGRUQKKzoxMDYzQzAwMERFRDg0Qjk5QzA0RjU0NUU3RDBDRURCQUIzOUY2ODNFNEEKKzoxMDYzRDAwMDAwNzJBQTMzMDJFNUQ0NUJEOTlGQTAzRjdFNEJDQjQyMkIKKzoxMDYzRTAwMDZDRkY2MkE2OURFMUM1RTI1MkVEMjhBN0Y0RkFGN0E4N0EKKzoxMDYzRjAwMEI5QkIxNkYwNzA3NEJDNEM1NjgxMURFNDJBMUQ0QUFFMjAKKzoxMDY0MDAwMDAyRjc3N0MwREZBNjc2RjJCNjJDODJGRDVFQ0I1RjNENDkKKzoxMDY0MTAwMEJBNzIxMUU2NEQwRkQ0REZEMUEyNDg4QzlCRDYwMjVEMzMKKzoxMDY0MjAwMDg1OEMxQjlEQzVFMDk5QzE5RkQ0MTA0NUJGRjNEQ0FGOUYKKzoxMDY0MzAwMDZEM0UyRkY4NEI2M0RGOEQyNTM2Qzg5M0Y5RTMzODJGNzcKKzoxMDY0NDAwMEU4MjNEMjdEM0ZFQ0RGN0JCRjhFQzFCODRFNkREMUJCNjAKKzoxMDY0NTAwMEUzNTY2MUJFQTg5QkY5N0QxM0Q4OUE2RjdBRjlFRDU4N0YKKzoxMDY0NjAwMEYwRDc2Qjc3MUY0Q0YyODZFMEQxRThFRjY1RjBGNTExQkQKKzoxMDY0NzAwMEE1MjcxM0YzNEU1RjNEMzM0NEE1Q0ZEQTU3MEUyNUIxNjAKKzoxMDY0ODAwMEI4OTIzRUZGQzVFOEU3RDdCNjJDRDdEMTY3RTNBNTQ4NTkKKzoxMDY0OTAwMDVEMUU0Q0EzRDI2RDAxN0MzNDVFOEFDMUY3QkQ5OUZBQjIKKzoxMDY0QTAwMDM4QzA4MEYwMUEyNDNDOERFRjA1M0M4RjE2OUQxOTA1RUQKKzoxMDY0QjAwMDcxRkEyRjIzQzNEM0YxNkRCQzlFMjgxQkNGMkYwQzk0RjAKKzoxMDY0QzAwMDI3M0Y4MUI3QkJFMDlBMzgxNEUyNENCNTE2N0ZGQTYwREIKKzoxMDY0RDAwMEUyMTIwMjRFNkY1RDZFQzA3MzExQkYxRUUwNUM0NDUxNEMKKzoxMDY0RTAwMDE2REIzN0Y5NzVGNjAyQ0M2QjlFNjg2REFFMDRGRDNEODgKKzoxMDY0RjAwMDkxQzczRkMzRTQzNTU3Njc4MTlEN0JFMjVGOTNENzNDRUIKKzoxMDY1MDAwMDNEOEJFMzg3RTcwRDBGQ0Y1MkMzRTYzNTVGRUJEQ0M5NjgKKzoxMDY1MTAwMDU0MEI5NTRCNjFGODJCQjcwRjdFN0Y5QTM5OEVEMkYxRDEKKzoxMDY1MjAwMEZEQkYzMERCNjE1RTBEQTBGMzIwREVCMkM1OENGMUQ3N0MKKzoxMDY1MzAwMEI3MkY0NzEwODg4NzdGQjZEOUZDM0NFNEJCMkNGQUM1M0YKKzoxMDY1NDAwMEMxMTE0RjQwRkNCQjI4MDJGM0YxMUFCNjk4NTlCQ0I2RjIKKzoxMDY1NTAwMDI4RDIwNzIxODc0NTVCQkUzNzA0RjIyRUJGQTA3Q0JCNDMKKzoxMDY1NjAwMDhDQ0VBQkUxMTcwRUNDMDc3QUJCRUJCMTIxODBBNzMzMDEKKzoxMDY1NzAwMDlDOUYxNzdERkJFMzNCMDBGRUJCMkRGNkJDMjJGQTVDMjMKKzoxMDY1ODAwMEI2NEJEMkU1OTkyRkQ5MTZBOTJCOEI3QzIyODEzRjIyQkQKKzoxMDY1OTAwMDA1RjNDRjU1MkE0RjVCQjJGNEU3NjhDNjA1RjcyNTVBRDUKKzoxMDY1QTAwMEIyQjg1Q0JEOURDRTc3RjlGODBCMTZDMEUzQzFDMzUxRkMKKzoxMDY1QjAwMDM4RUYzNzYyNjRGNDczRkQ0NTdGRkRERDE4NUFBRUZDOTkKKzoxMDY1QzAwMDU2QzFCQzdFNjM3RTEyMjE4ODc0QjI5MEU3MTE1NkJFMUMKKzoxMDY1RDAwMEEyRjQ5RDAzODBCMjdGNjUzM0YyMDk2RDE3NTMxRDkyQkIKKzoxMDY1RTAwMDZGNURGOTczRTY0RjU3NDZCMjNDRTAwMUYzOTYwQ0Y5NDQKKzoxMDY1RjAwMDRBRTI5QzQ1QkYzQ0E1RTAzOTBCOUQ5RDIyRThFNkE5RjcKKzoxMDY2MDAwMDJDM0Q1RjFGM0NDQ0YyOTIxNjFFRTU3NkU1MzVFNEU2QTQKKzoxMDY2MTAwMDNCQjA4RTBDQzBENzVCNzVCMDZGRjkzNjg3QzZEQjk3ODEKKzoxMDY2MjAwMDNGNUIzQjhDOTYzRjlCMjA0MTY0OEU3Qzc2MzkzQ0RGMDAKKzoxMDY2MzAwMDdDMjZGNDEyOUMwRkM4MEVFMjY3OUE2QjcxNUYxOUQ4MjIKKzoxMDY2NDAwMEYyRDYwOUY3RTlDRTJEMEM1RURFNUM1RDlFREM5NTY1MjkKKzoxMDY2NTAwMEMxRjE4REYyREQ0OEY3RkZCRkU0N0I2REQxQTE1MTVFNDIKKzoxMDY2NjAwMDFCM0U1RjgwRTdEOURENEMzRTFBRjlEQzI4Q0Y3MzBENjUKKzoxMDY2NzAwMDcyMzAyOEM3NjU5RDFDQ0ZFNTcyMjAyOENGMkRGODlENkMKKzoxMDY2ODAwMDlBNjlCODFFNkY4OUUyNUIyM0ExRkZGMzFFRDA3RDdFNUQKKzoxMDY2OTAwMDhDOUE1ODRFOUJBQ0I1QTc0NjZCNTdGNzQ3RkYyRkQ0NDMKKzoxMDY2QTAwMEVGNEFEMTNFQ0FBMjdDMzRGQTk3Qjk1NTYwOENFN0VEMjcKKzoxMDY2QjAwMDZBMzMwMUZGRjYwRTYwODcxNEE0MUFGMjgyNzg3QzQ4RDAKKzoxMDY2QzAwMDdDM0Y5QjU1NUUwMEY5QUE3QjU0RjYxNEZDNTk0Qzk5MEIKKzoxMDY2RDAwMDkwRUYyRjlGQ0Q2MkZCQ0IzRjAxQkI2N0Y5N0Y1RTQ0RkMKKzoxMDY2RTAwMEZFREMxMkE1MzkxNTU4Q0Y3MDhCMkI3NEZGNTYzQzJGNEEKKzoxMDY2RjAwMDcyN0UxRkY4N0NBRDNFREZGOTc0M0E2MTc4Q0ZDRUQ2NUEKKzoxMDY3MDAwMEVEQ0Y4MDdGOEZGOTAxMDdBMjEwNkVDRjNBREQ5NzAxQTAKKzoxMDY3MTAwMDBFRUQ0RUY3QjczMEFGMzJBN0ZCMUY1OTIxNzg1OUNCOUEKKzoxMDY3MjAwMEQ3QTk5OEY0NzE2QkYxMkNDRDE2RjRFRjQxM0RCRUEwQzIKKzoxMDY3MzAwMDIyQkNGQzREQ0Q2Njc5QzFFNTRGREYzNTBBRUNDRUJGRkEKKzoxMDY3NDAwMEVDQkY3QjE0QzhDN0FFQTc0QUFGNkE4NzZFRTBGQ0Y5RkUKKzoxMDY3NTAwMDZGNUNFRUM3RjNCOEUzNEY4MTZGNjgzOTAxRTI5NkI0MUUKKzoxMDY3NjAwMEZEMDI4QjI3MzMzRUE0MUY3Mzc2M0NEQkVGMkVGRjgzQTUKKzoxMDY3NzAwMDI3OERDMkU1RDQ3QTE5RTVGN0E5MTgxNjY3RkMyNDQ2RDcKKzoxMDY3ODAwMEE5RDlDNkRCMjVFOURBQjE3OUNBNDBGNzk0OEY5NTE4MDMKKzoxMDY3OTAwMDQ1Nzc1RUEyMTQ2OERBMzFGMDNBNEJCMzk5MUVCNTEwMTIKKzoxMDY3QTAwMDk3MTVEQTVCMEVEQzYyMDVGQ0NBOTJEQkNFRjJEMjE5RDkKKzoxMDY3QjAwMDNENENBNDIzMDAzREZDOThDQkIxQkYzQkI1QTI2QzZDMTMKKzoxMDY3QzAwMEM3RjRFRDQ0QUU2Rjk1MTg4MzdFMUQxMTVFOUU4OUU3NzgKKzoxMDY3RDAwMDRCNEU3NzA5RjQ3M0E3RDM1RDlBRUQ4MEI4MTdDOTAzQzAKKzoxMDY3RTAwMEJFNjk4RjBBOUZFNzczMTNDN0RGREY4NTNENDY2MkQwMUUKKzoxMDY3RjAwMDZGQzZGMTY0REM1Nzc1Njc2MzVDQ0I1MzAxRkRDMUJFQTYKKzoxMDY4MDAwMEFBNTkwMjNFQjBGM0ZBNkU4OUM1MkIzQzM3QzM3N0UyMzIKKzoxMDY4MTAwMDc0NEJEMzI4QkM0QkZFNENGMDNDQzdERTIzMTUxMkVDNjYKKzoxMDY4MjAwMEZGMjY3NTU3NDkyMEM3OTIzOEZFOENGM0U4RTE3MERCRUMKKzoxMDY4MzAwMEMzRjMyNUZBRjMxREYzMkI2NjcwRjhFRjUxM0RDODVGRTMKKzoxMDY4NDAwMEFEMjk5QTEzRkM1NUM4Q0IwM0JDMUFGMzJDN0U5OUNEMDUKKzoxMDY4NTAwMEY2RDVCNjQ0RjVFMEZFQTBGNzZFODJGOTc3NDNDQkJDREYKKzoxMDY4NjAwMDEyRTQwRjI1RDdCNjk1NTM4QzkzRjlEOUNDOUY0RkE4MzYKKzoxMDY4NzAwMEQxOUNFMDg3MEY3NzVBRjA5RThBQzFGMjVCN0VCQjFCRUEKKzoxMDY4ODAwMEUzMjVDNTFBM0JBRkJDQTlEQjFCOTk0OUU3MzVBNDVCREYKKzoxMDY4OTAwMDJCQjdEMDY3N0FDRTEwNUNERjUwRDJCQzhBRjkwOUFBMzgKKzoxMDY4QTAwMDJFQkZBOTU4QUJDMDdENzIzMUVGOTJGOUNENkIyQzJBNjcKKzoxMDY4QjAwMEU2QzNBQ0M4MEVGMTZCOTI5Nzc5QzNFNjNCMTlGN0I5MDIKKzoxMDY4QzAwMEQ3MDhCRUU0RjkwOEM1M0NGRkEwNzhEQjUzOTg0RjUwQzkKKzoxMDY4RDAwMEJDRUQ2NjQ1MEE5MTMzOUJCMkNEQjhGRTMzODc5NjhDRUEKKzoxMDY4RTAwMDg2RjUwRjk0QzdEQTk2Q0RGMEYwRkQ2QzI2NUYwNkNBRTgKKzoxMDY4RjAwMDFGNUJERjI3MTdGQUU1OEZBRENGNzY4NEU0RDczNDlFOTAKKzoxMDY5MDAwMDQ3RjlENzk4Q0RFNEZDQjM5MDU3NDNFMUZBRUM3QzkxN0EKKzoxMDY5MTAwMDU3QjM0NTgyRjVFRUI1QjQ0RkQ5MDVGMzVBNkVDMjNDNzQKKzoxMDY5MjAwMEE2QkVCQ0EyRjkyQ0NGQURBRjNERTQxN0QxRjdDRjJFNTgKKzoxMDY5MzAwMDYyRjk0NUMzN0MxQjcwNUZFMjYyMjRDQkEzQjhCODNEMEIKKzoxMDY5NDAwMDgyQzBCOUE0NjdCNzZEMUMwMkU3MTA5RkQ1NEM2ODA3RDkKKzoxMDY5NTAwMDFBRTcwRjA3ODI3ODVFQTQxOUYyMjUwMThGMjBBRjA0OTEKKzoxMDY5NjAwMEZFRkFGMjhGNzhGRTVFRDdGNjk3NzFERTYyM0U5NDUwQTMKKzoxMDY5NzAwMDJDMDBGN0Y0MUMzNkFGMjUzQjc2NEYwMUUyMUZCRTJDRUUKKzoxMDY5ODAwMDQxODJCODlEOThEN0I1RTRGRTRCOUMyRjA2NEI4NzJGQ0MKKzoxMDY5OTAwMEU0MzBGRTA4QTMxRjVGQ0RCRTNFRkRGODA2RTA4OUVBQTUKKzoxMDY5QTAwMEM3MDNEMEVFQkFGNTIzRDc4QjQyNEY4QUVGREQ5QzJFN0EKKzoxMDY5QjAwMDY2NjYwRkE4MUZCQkIzQzNFODQ3MTVGMjlFMzFFRkM4NDgKKzoxMDY5QzAwMEU0REExRTA2NUYzMzc4QkYzN0JBQjU0QUUwRTdBMjM0OEYKKzoxMDY5RDAwMEVENEZEMENGQzQwOUJFODMxMDA3MkRBREYxMUUwNDdFNEMKKzoxMDY5RTAwMDJGOTZGODc5RUIyOTRDMEUyNEY2OTBGRDEwODM4QjNGRkYKKzoxMDY5RjAwMEQxRTM4NjNDRTVBQTZDOTY2RjcxQzM2OTM3RUVCM0M3RTUKKzoxMDZBMDAwMDc5ODgwNEVEQzUzRDA2NkQwOUVDQkNCMzcxRkM0OTlDNjkKKzoxMDZBMTAwMDJGNEM0RjA2MzAxRjJFQTkzMzdDNUU2QTQxMkFCM0Q3MTQKKzoxMDZBMjAwMEE4QkMzQzBCNzAyRDE5NERFNTY5NEE3Rjc5MUEwNjdGODkKKzoxMDZBMzAwMDE3QTA3RUNFMkVGRjAxQTgzNTM2M0UzRDFBQ0NBQUFCNUMKKzoxMDZBNDAwMEUwRUZBRjBDN0ZFRTRCRjAxNEY4Q0FCRDIyRUJFMjc4MUEKKzoxMDZBNTAwMDAyNUY1N0Y4RkM2RkNENzBGRjAzQzYzOUNDRjk3QjIwN0QKKzoxMDZBNjAwMDNDQzZFNjUwRkM4RDA3RkE2Njc4MTQ3OUMwM0IwRDc2N0IKKzoxMDZBNzAwMDZBNDUwRUMzQ0JFNDFDN0Q1QzI4MDRERkIxMzlFM0ZCMUYKKzoxMDZBODAwMEUzNUJDOEYxQkQ0N0Y2Qzg4MEI3OTJBQUI2MzU4MDA3NjgKKzoxMDZBOTAwMDhBRDdBNDFDREFDRjBENjVGQUZDNEYyMzVFODUzQzM0RkYKKzoxMDZBQTAwMEUyRDc4ODU3OTEwNzQ4RjEzMTNBMjc4Q0ZFMTJGRDE4M0EKKzoxMDZBQjAwMEY1NTg4ODlDRTBGQkNFNkE1RjdFMDdEOENGMjI0RjVDRkEKKzoxMDZBQzAwMEFDNDNGMENGMjQwRThGMUIzNUFERDJDMkU4QjQxMEM2NTQKKzoxMDZBRDAwMDlEMzhDQjc3RDAwQzc0QkFDODdCRDAxMjRBQTc4QjA5RUIKKzoxMDZBRTAwMERCQUZFMkYzNDhFRUYxRTI3QTg2OUREMENBRTE3OUMzRUEKKzoxMDZBRjAwMDY5M0ZERUUzMzFCNDk5QUU4NzA0RDczM0IyRkIzOEU2QTEKKzoxMDZCMDAwMDYzQzJCRTJDQzQ5QkY2MUUzOTgwRjMxRUQxRERDNTlFMjgKKzoxMDZCMTAwMDNDOEZDOEE4NkY4M0Y5QjdBQzlGMTdCOEZDNkEzREM3MTQKKzoxMDZCMjAwMEYyRjg1QUNCOTlCRUJEMzdDMzVEOTk4MzdDRUNBRTgyMzcKKzoxMDZCMzAwMEY5QUZDODcwNTc0M0I5MjA5NUQxNEQ2QzhFRkI2NjI4Q0MKKzoxMDZCNDAwMDhGMUM0MERGREY5QUQzQjc0RjNEMURFQTI1M0Q0MEJDODcKKzoxMDZCNTAwMEUyMUUxNDg4QzMyNzQxMjQxMEI2RjA5QkJEOTI4NUMyNjMKKzoxMDZCNjAwMDM1Qzk0REQwRUYxQzlEQThBRDgyQkNCN0MwNDRFMjgyQjAKKzoxMDZCNzAwMDdDODBCODNBN0IzOUMwMkI2MTkxNkIzRkMwQjNGNTFDNjgKKzoxMDZCODAwMEJGQ0ZFNTNFODJFN0JERkFGMkFCQjQ1NENDQTcwMEZFMUUKKzoxMDZCOTAwMDBERTU5NzdBM0U4RkZBMUNDNjA3RDRERTk5OTNDM0U2QkIKKzoxMDZCQTAwMEE1QzFCQzg0QkQyM0Y4NzIyMEZCMjU4NEFGMUJBMEZEQ0EKKzoxMDZCQjAwMDc1RjBGNUYyOUNFQkUzRUIxNTM5OENBRkVGODc3NkQ3RTgKKzoxMDZCQzAwMEUyRUIxRkU0RjRGMUY1NDNEMEVFNUE3Q0ZEMjhFN0VCNEQKKzoxMDZCRDAwMDE3QUVDMUQ3M0I3OEJGRkZDNUVCODdFMUVCNDdDM0YxRTkKKzoxMDZCRTAwMEI1Q0FFOTRFRjBDNTlFMjM2M0EzMjE1RjYwMUJFRjJGNUEKKzoxMDZCRjAwMDQ0N0U2RjgwRjZENzkyREZGRjA0OUY2Rjg2N0VBRjY1N0QKKzoxMDZDMDAwMEE3OEE3RTA1QkVBRkM1MjdCMUI5MUU4NDgzQjA0NzRGQTIKKzoxMDZDMTAwMEE3MzNCQzBCQkVBN0ZDRjI5RjAwN0ZDQTJGM0IzOUJGMzYKKzoxMDZDMjAwMEZDOTJGMThCOEFGNThDRkNENUE3RUZCQTRERkMxRTExQjYKKzoxMDZDMzAwMDdCNzQ2OERDRkJDRDlDN0VGQUVFRTU5QzMwRkE2RTI0MUEKKzoxMDZDNDAwMEUxRjBBQTYxNzI2NDA0RjFDQUIxRDA2RkFEMURDQkY2NTgKKzoxMDZDNTAwMEIzNzY3NEYzNjM0RjA1QkMwMEI3Rjc3Mjk4QkQ1MTNDMkYKKzoxMDZDNjAwMDQwM0NFMTc3OUM0RjkyQkEyQjUwQkU1MDc4MUVDQTA5MjcKKzoxMDZDNzAwMEQxNjM0OUM0M0UxNUZDOUNDRjczRDhCQUM2NEQ3MDFGNzIKKzoxMDZDODAwMDA0Qjk2NDc3N0IzMDlGREI5MUNCRTAyMkUwNDREQkJGMkIKKzoxMDZDOTAwMDEzNEVFRUVFMDM3Q0U0RjdGNzFCOEM3ODM4QzhFN0ZCNjUKKzoxMDZDQTAwMDM5QTcxRjYzRkY0MkZFNDBGRjA1RDhCRjZBODJGRTQ1MzkKKzoxMDZDQjAwMEZCM0YwN0U1RDA0N0IwOEVEMjA3OUE2NTU4NTcxMjcxNEYKKzoxMDZDQzAwMDQ3ODNGQzExNzI5MjhDQTBFRDhCRkJCN0ZGMzREOEZFOEEKKzoxMDZDRDAwMDUzNTg0NzY5MzM2RDlGMUY2QzNGOTJGODMxNUYyNzYxQUUKKzoxMDZDRTAwMDExOTU1MzA0RUM3NzE3REFCM0VCNTVDRkI5MUM5QzI3RjkKKzoxMDZDRjAwMDYxRjJBQURDODRGMjIwMkJERDhEN0MxNzRFRkY0M0ZENzAKKzoxMDZEMDAwMEVCRDFGRkIwMUVEMEZGODM5MTEzNTczODNEODFGRTg3MzIKKzoxMDZEMTAwMDcxM0VDRUJBODZGRUNGNjVFQjhFQ0JCREJBOUM4OENGRDYKKzoxMDZEMjAwMDY1RkQzQTcyMDdENkZGQjk2MUU0QzQxRUQ1OERGQzE0MjcKKzoxMDZEMzAwMDg2OEYxMjcyMUQxMDY3NzEyNzQyM0JDQTQ3NDk1MDE2NTEKKzoxMDZENDAwMDdBODdCNjFCMDJFRkQ3QUIwQzhFRUI2QjRERDk2ODVGMjEKKzoxMDZENTAwMDkzMjg1NzM4N0YyNjJEMzc2NkIwRjk0NTY5N0M5RUQ3MzIKKzoxMDZENjAwMDk1RkZGQURDOEY3QTJDMDA2RjkxQTcyMkM2MzVFNkJEMUQKKzoxMDZENzAwMDBBM0MyRUVGOTRDNjQxNUNBRUZDRTA2NThDOTNGNEVFQzkKKzoxMDZEODAwMEZGMUJDNjQ5OTQ4Q0I5RTM2MEZDQUVENzU4QkM0NEU0MDEKKzoxMDZEOTAwMDk1ODhGMTU3NzAzRkIyNUFDRTZGODczOEVERjkxRDE2QkUKKzoxMDZEQTAwMDhDN0ZDQTQ0REQ1ODQ2RTdEMzc0QzQ0QzdDMjgwN0Q5OEQKKzoxMDZEQjAwMEY5NjVCMTRGNkJERUQxREEwRDcxNzkzMzA5Qjk2NzA3MjcKKzoxMDZEQzAwMEY1OUQxQTA3NzQ2OTNFQzJFRUJCMjE0OUVDN0IzM0IxRDUKKzoxMDZERDAwMEFFNjJGNzMwRUFGNzY5RTNEREZBN0REQUM0MUFGRDNFMDgKKzoxMDZERTAwMEFEODgyMzJFMjU2QzlFMEU4RjdFREY3NkU4MkNGREJFQUYKKzoxMDZERjAwMEVEMzA0REJGNkY5QkJDNjhBQzYxMUY1N0JGNkYzQkJBOTYKKzoxMDZFMDAwMEE1QzJCMDhGQUJERkI3NEQ1QjM3QzNCMDhGQUJERkI3NzkKKzoxMDZFMTAwMEZEOEMzNDNGNUQ0NkQ3OUQyQkVFRkJGMUJBQkJFMTVDQTgKKzoxMDZFMjAwMEY0N0MzRURGQUM0REZBN0RERDJGNzZENkUwN0QyMUYzOUMKKzoxMDZFMzAwMDc5N0MzQkM3QTdERkU3NUQyQTJGNDMzQTI2NkRFQzlDQTAKKzoxMDZFNDAwMDczMzNGRDA3RTBBNjkwQzBFMTY0QzgzRkYwNDkyRTNGRDAKKzoxMDZFNTAwMEZERENCMDQ5N0YwRTdBNzFDNzE2NkNCN0Q4QTc3RkJGMkIKKzoxMDZFNjAwMDc0ODdCRUZDNDAyRUJGMDc4NkM3QkRGQkQzNDEwQ0NCNDkKKzoxMDZFNzAwMDYzRDhDQ0UyRkRCMjM3Q0I0MDA3N0E3Q0ZDNkZFOTQyQTUKKzoxMDZFODAwMEU1NzQxMUUxRDREMzQ1QTRBQUE3OEI4NjM3Rjc5NkMwNDEKKzoxMDZFOTAwMEJBOERGMDhEQ0VENkQzOEIxMUJFMzY5NzlFNUUwNDVDMzQKKzoxMDZFQTAwMEE5OUVFNEY5Mzg2RTVDRUZDMjBFODkzQzIzRjU4N0VCQUUKKzoxMDZFQjAwMEEyQ0UwREFENzAwRUREMDg1NzQyN0NCOEVGNkM4NEFGRUEKKzoxMDZFQzAwMENGMDBERjczQUFGNjNDRjBERjg1OEUwN0YwQkUxRkEyNkQKKzoxMDZFRDAwMDY5RTNBMERENTVGMjYzRkU4M0Q1MUY3NDdFNEMzQkQ0N0QKKzoxMDZFRTAwMDBGRkFDOUZBRkM5ODVFQzhFMzFBNDMwNjkxQzc3NUYwMTkKKzoxMDZFRjAwMDdGMjBBRjIzODJDRUQwMENGMUM2MDkyRTZCRjhCQzJEQkIKKzoxMDZGMDAwMEVERjU1Q0Q0MzM2RTgyRjE5RTNGMTBENzFBNUE2QjhEMkIKKzoxMDZGMTAwMEFEMjRFRjFBNzE4MTAzQjk2ODQ3Njk3ODlGNDY2OTM3RDQKKzoxMDZGMjAwMENCNzMyMzRBQjcxREUyQkZFMUVFNkYzNDlDNkIzQTBBODQKKzoxMDZGMzAwMEVERkZEOUZCRjE4NERENDhFREY0M0ZFNjMyQkRGQjJFRDkKKzoxMDZGNDAwMDNDRkJFQzc0NkVCNzA5N0I3QkEwN0VGQUYyNUMwNjc4QTIKKzoxMDZGNTAwMDRBMDc2NENDQjMwQTQ4NTFBRTcwRjcwRDlEQ0U5NUMyNzYKKzoxMDZGNjAwMEVBMERBQTI3NEVFNzNBNDJFMjVCREZCQjcwMThGNDA3NEUKKzoxMDZGNzAwMDg1RjcxN0YwREU2NkEzRkE1QjFBOTRGRUVFMDUzODZEMEUKKzoxMDZGODAwMDhDOEU0NUJBMEVCQzI5RkJCMjY4ODNGMzU2MzUwRUNFMDMKKzoxMDZGOTAwMDlGMUJFRjI3MTE3OTRGQ0Q3MEZGMDhENTI3NjVFN0IzMDkKKzoxMDZGQTAwMEUzQUU5NjY3NTA2NkI4OUZDNjc4OEY0N0VCNTg5RTY3RUEKKzoxMDZGQjAwMDkyQzdENkY5NkI3RThGQTAzMzRGRDI5RDk3MTFGMUE4NUYKKzoxMDZGQzAwMEE2NzUyQ0ZFMEFGNzBFNzY4NkY0RTNDQzYzODc1NjZFMjAKKzoxMDZGRDAwMDU2Q0I5RDc5MEU4ODc3QjE3ODYxNkI4QTg0NzY0MkFCMDcKKzoxMDZGRTAwMDI0QTFEREIwMzlCREMyOTk0N0ZCM0Y5NDVCM0UxNEVBNTIKKzoxMDZGRjAwMEQ5RjlCODRFODg0NThGQzdGMzNFMzgxRkQ1NzA1RUVDN0YKKzoxMDcwMDAwMDE4QUY3RjJDQjcwMjlGQ0UzQ0UxNkZEOTczMDFGRjEzRkQKKzoxMDcwMTAwMDU1MzdGNjZCOTFDM0VGQUI4RkNDNjNGNjRGMzVGMEI0QjkKKzoxMDcwMjAwMDIzQzg0RkQ3NzM0RjgzMjVBOUZGM0QwREM2RkJDRkRDODcKKzoxMDcwMzAwMEQ5RjYyRTUwMDdDNjdEQ0YxN0FGNzU0RkMzQkVGMEY3RjgKKzoxMDcwNDAwMDM0MDBEQ0EzMTM4MkZDNTA5MkE3QkZFN0FDMjNBQTA3NEQKKzoxMDcwNTAwMEY3NDEwMzZGQ0JBRUFEQTRGRkJBNkZFNjc4NUNDRkNGM0MKKzoxMDcwNjAwMDg1Mzg3OEZFRjcyOEJFOUZEMkJGM0U4M0QzOTYwMUUyRDMKKzoxMDcwNzAwMEJEMTNENUYyNkE4MEYzMDdFOTlFOUIwMTBGRTI5RTlENDYKKzoxMDcwODAwMDBFOEJCNjA2RkM4RkMwNEIwNEU3OTFFRDIzMDdBMDVDODYKKzoxMDcwOTAwMEUwNTUzMThGQkMzNUM1MUI4REY3MDExNDk5RDA5RjU3MzIKKzoxMDcwQTAwMDM3QjUxRDhDNENDMjczQjYwOTkyMUE5NDI3NjY4NTc4NDEKKzoxMDcwQjAwMDZEOTRDRTE2QzI2NTVENjBERkY1Q0MzRDYwQTNERjFEMkIKKzoxMDcwQzAwMDlCNkY5M0UwRkU5NjM2RDI1NjE5MEI3NkQ3NjYxMjM2MzIKKzoxMDcwRDAwMDNFNThDRkU5Njk2QUY5MDE4Q0IzM0IwMkVDQkM1RkZGMTMKKzoxMDcwRTAwMDdBMjZFMTI3NkFCMDhFRDI4MDM2NEU0QTBEQ0EyNTE0MjAKKzoxMDcwRjAwMEI5RTAzRjc1OTk3Q0UxRTJCNTU5RTk5NTBCQTE1RDgxNTUKKzoxMDcxMDAwMDhGODQ4REZGNTVGMzdCNjZFQTU0Q0YzMkFDQjdDRjhGQjcKKzoxMDcxMTAwMDdFNTE4MzkwRUZGMzREMDRFRTM3QkM5RENCRjNEQjM3MEMKKzoxMDcxMjAwMEIzQkM1QzcyRjlDQTE1QjkyNDc4N0U4QUY2NEY0MDNFMkEKKzoxMDcxMzAwMDM1Q0NCNEUxQkRCMTBEOUQyOTc4RkYxNkYxNDg3OENGNkIKKzoxMDcxNDAwMDRCNTNFNzMxMEY5NDFCOEE4QkVEMTA2Rjc2QkY0RjI0QTIKKzoxMDcxNTAwMEI4OTcwRENGRUNBMTFDNTRDOEE3NDJERkEyRkQ5MDg0QzQKKzoxMDcxNjAwMEZCRkQzMzM4NUQ4QkZCOTRBODFFNTkxRjRERTFERUIwNEIKKzoxMDcxNzAwMDc5RDUwMUM4RUI3RUY3NzlEQTA3RkQ3NDQyRDY0RUZDNkIKKzoxMDcxODAwMDkwRjZGQjVEQUFDNDVBQzZDMjUzMjE3NTE4OEY3NjYyNjkKKzoxMDcxOTAwMDNGMzM3OTNGREVCRkQxNzFBREMxNzFCRkRCRjkyNkFFQTAKKzoxMDcxQTAwMEU3ODQ5OTc4QUQ5NDdFQ0QxNTZDNjhGMzBGRTIzMERGRkIKKzoxMDcxQjAwMDU4RTRBRkRDNjE2REFCMDYzRERCNkIwOTE0QzJGOUE5ODUKKzoxMDcxQzAwMERFRDdERTFCMDlGQkQ0MUZGRTlGMEIzNkIwOEZGRkFDNTIKKzoxMDcxRDAwMDA0NkNGMEZFRjRDMzdGQjRDMUZEQzgxRjNFMkNFM0JFQjcKKzoxMDcxRTAwMERFMUNBRTc3MDRCQzlGRTc3NDdFMzFDRkYzMENEMEU3OTIKKzoxMDcxRjAwMEJEMkJCRjJEMDlDREEzMjcyRDBFRTQ5RkM1M0UxOTUzRUUKKzoxMDcyMDAwMDFFMDRERjJEREQxMTBEMTY1MTVGQjlCMTNENTE1NzE2MkEKKzoxMDcyMTAwMDdBQTQxMUVFNkIwRDQzNDcyNzM4QkYyQ0RFQjVDNTAyQUIKKzoxMDcyMjAwMEY3MEI1Q0NDRDM3NkMxRjhBNzE1NDYzRkE3RjdEOTdDRkUKKzoxMDcyMzAwMDcwN0ZBMjk4Q0ZEQzVENDUxNkIwNEZGRURDMTk0MUZDOTMKKzoxMDcyNDAwMEEwMEY5NTZFMzMzQjRGRTZBRTk1MjgzRDY4MUNFRkM2MDgKKzoxMDcyNTAwMDc5MUU3RTNEMUFGQjVCRjAxNDkzNEZGNTc0QUMxNjBBNTEKKzoxMDcyNjAwMDU3QUQ3MzMxQ0EyMUUzM0ExNjdDQTg0RTg2NzMxQzBCQzYKKzoxMDcyNzAwMDFFOTUwOEVDQUY0MEZEODcyOURFQjQ5NjFGNjM5RUE4REIKKzoxMDcyODAwMDcxOURGNTVFRTM3RDc2NkU5NDhGMEQxQ0JGRjNENkU5OUMKKzoxMDcyOTAwMEJGMzc3NDNFOEVGRENDMjdFQTdBQjBBNzE3QjQxOUJGNkEKKzoxMDcyQTAwMDRGRjkwQ0VDOUYwNjgzM0M3QjI3OEZEQjVCMjVBNDE0RjYKKzoxMDcyQjAwMEVFOUQzOTYwNEQ4QkJCREFCREFGNjc1N0RBOTEzODNGMzEKKzoxMDcyQzAwMDVGNjlDNUU3RTk5NTA0OUZDRkU0QTkwOEY3NjU5REM3MDUKKzoxMDcyRDAwMDFFMDRGQTU5REVCMURCMDJGRDFDRjQ4RDRGODJFM0EzREMKKzoxMDcyRTAwMDUzM0JBNzI4NjA3NzRERTVGQkFDQjNGOUI5NEU3NEFBQzAKKzoxMDcyRjAwMEQ5NzlDRTFFQzA1MzU1OENFMTNDMjc1Rjc3MURDNzAzNUIKKzoxMDczMDAwMEIxMjYyMjlERDVDMTdBMEJFMUJERjI3NUU4N0FDRTFGNzgKKzoxMDczMTAwMDQ5OEJDMTdEM0FCMUFFNTJCQTJFNzlGMEVCMTJFQjExMjYKKzoxMDczMjAwMEVCMTNERjFCNjU3NjNGQjBCMTlEQTBGMzY3MzhERENENzEKKzoxMDczMzAwMERGNzY1QkVCNzAwQThBMzVBRjdEMzZBQTg3RjlBOTY4REMKKzoxMDczNDAwMERGNTc3MkJDNTU1QTFGNDdGQkJFOTJFOEVGQTVBMjdGREMKKzoxMDczNTAwMEM3ODE3RjA1QkQzNTEwOTcwMkNDNkJBNDJCODE2NzEyQzYKKzoxMDczNjAwMDYzRjZGMkZCRjlEMUZFRUZBM0E3Q0U3RjQzQjgwODdDMEEKKzoxMDczNzAwMDUzN0U3MUYyRkQzNDI3RUNBNzUxQkFEMkQ5REI5NDhFM0IKKzoxMDczODAwMDc0RTUwNTZERkFGMjk3RTY5RTUxQzBFRjBEODZGQkExRkMKKzoxMDczOTAwMEJFMzRFNDVGODhFN0E1QkM1NDA2MDdENTNEMTlDRTA3ODcKKzoxMDczQTAwMDJDMjA5RTU2QjZFRkNBQ0UxRjlENTZEQTBFRkYxMEY4NUYKKzoxMDczQjAwMDcwMUJFMzgzM0Y3M0ZDQjdFNDdCNDZFNzgzRkU1MkRDM0MKKzoxMDczQzAwMDg1MjBFRjJCNTYwRjkzOTM2OEJERkFGNTkyMURGODZCNEQKKzoxMDczRDAwMERFREFBMkM5QzA5NzYzODkxQkZCOUI5RDE4REU3RUFCREEKKzoxMDczRTAwMEM4Njc3QTY0NkVCMzk5NThBOEREM0Y5NzhFMDE3MjZFQjQKKzoxMDczRjAwMEVFM0UxOUY5MUVGMkE2QTYwRDgxN0IyNjE4M0UxQTFGMzUKKzoxMDc0MDAwMERENkQxOTQ2OUY4QjlBMUI5OEZERTA2MzdDMjNFRUFCRTQKKzoxMDc0MTAwMDE1RjQyN0U0RkY5MkY1RkJGMURFMERFQUI3RThGOEFCQ0YKKzoxMDc0MjAwMDA5RjJCRDBCODE4RjBERUY5QjZGNDYzQzM0MTFGNkZCQ0IKKzoxMDc0MzAwMDA1MDI3RTM3RTU3M0JCQzE0NTVDNDA5RkRBODMzNjJCN0UKKzoxMDc0NDAwMDlDMTdCOUQ2QkE0OUZGQjgwM0M2MjVDRTFGQzk0MEJCQTEKKzoxMDc0NTAwMEYzQkNBQTBFODU3QTFBMURCMzFCRUM0ODQ1MkI4NUY3QTEKKzoxMDc0NjAwMDE0NUVBOEE3MDJBQkEyRjExRUNGOTM5NzY0QTI0MjdFM0UKKzoxMDc0NzAwMDlCNUQyQjA1M0JBQUU3RkQ5MTc4Q0U1REQwQUI1ODZGQTUKKzoxMDc0ODAwMDkzNzUzREQyNkIxM0QxRkJBM0Y1RDRGMTgxRkRDRkZBRjcKKzoxMDc0OTAwMEVEODk5OEQ3NDRGQjJGRUMwMDdCNjNCQjE5RUQwOTJGRDYKKzoxMDc0QTAwMDU5RTE4NEYzRjY5RTQ3Q0MyODI3RTc3NkM0QTMzRjNDRjYKKzoxMDc0QjAwMDc3MkREQjI3OThCQjJCMUVDRjA3NTI3RjE0RUYxMTE2QjkKKzoxMDc0QzAwMEY4MzhCOUI2RDIzMjBDRjE5NTgyRjdGMzkwMEUzRDlEQTMKKzoxMDc0RDAwMDBCM0NGNUY3MjcwRDc4NUFCN0ZGQjA1M0VERUY1Rjg2RjkKKzoxMDc0RTAwMEUwRTlENDAwNzgzQTE1OEFBNzE1Rjk1QzhFNzAzQzkxRDIKKzoxMDc0RjAwMDg3QjlGQ0I5RUY1MDA2REM1Rjc1QkUzOTEyQ0Y4MzE4MkYKKzoxMDc1MDAwMEU5NTBFODI5MzJGRjA2Q0NCRjEyNzFBQTlBRTEwQzJGOEMKKzoxMDc1MTAwMDQ0NzE2MTlFRTI4NUY1RTMxMTZGNDY3Q0Q1RkM2MzFFRTQKKzoxMDc1MjAwMEUyODVCQzZGQzNGQjhCNjdBN0IxN0I1QkVFOTUxOEJGOTEKKzoxMDc1MzAwMENDNUUzM0E1MDZGNEY5RTNGOUNDQUVGOTNEOTU1QkVFRUMKKzoxMDc1NDAwMDJDNkE4RjUzQjlFNUE2NzJFQjhGNTQ5RTQxRjlERDk1RjUKKzoxMDc1NTAwMDRFMkNCRkI3NTJDNUU3OUY1NjY2RTNGMzE0REY1NzE1QUQKKzoxMDc1NjAwMDdDNDQwOUMxMDI3NkUzODY3QzI2QzczNkU0OEJCOEUxMDkKKzoxMDc1NzAwMDAzNEUzMDJENkFGRUYxQzdGMUYwM0IwQTBFRUY5NDNCNEIKKzoxMDc1ODAwMEFBNDcxMjcyQUI1QkFGMEY2N0NERDRFQkJCMUVCMzdEQzYKKzoxMDc1OTAwMEIyMTNGQ0RCNDdEOTNENEM3MzNEMzdFQUVBMTM0NUI1REUKKzoxMDc1QTAwMEMwNzk2ODkyM0QyRUY4MUVGOTREQjVDMDdERTk3N0Q1QkEKKzoxMDc1QjAwMDI2RUFFQURGQjEyRTU5NTdGRUNGN0MxNUQ3N0Q1QjREMDkKKzoxMDc1QzAwMDlBRUVGRERENzU3OUJBNzIzRERDOUIwODc0QUU0RTQwRDMKKzoxMDc1RDAwMEJFNzk4MEU3NTU1MjA3OURFMTg1OUYyM0ZDQkFCOTc0QjcKKzoxMDc1RTAwMEU4RjdFOTdDQkYzRTZBQzZFRjQ2N0MwOEJDQ0VERjI0RTQKKzoxMDc1RjAwMDEzOERGNjM3NkYxMzk1NUY3NDhBQTdEQTI4OUU2OEJCRTAKKzoxMDc2MDAwMDJGNEVEOEQwMEY2OUREMzVFRTlEMDlCNDdDNzI5NzE5RTUKKzoxMDc2MTAwMEUzMDcyN0Q3MjZGRTA0RUNBNzkzQkIxQ0IxODQzRUI1MzUKKzoxMDc2MjAwMDU2OTlEQjE5NzZCQzRGNDlGNDVCQjk3NjE1OUU4N0E5NEMKKzoxMDc2MzAwMEY3NDVCOEQwOUVFOEYyRkVCQjI4QUJFMEI3QzIyNDgxODQKKzoxMDc2NDAwMDZGOEVDQjNFQkY4NEY4NjNGMTgzOUQxMTY4MEY5RkE2QjgKKzoxMDc2NTAwMDc2MUQ1QzNEN0I1QTIyNkJFMTA5MDdFNkUzRThGNzZGOTQKKzoxMDc2NjAwMEJBMUQzRUUwRUI5QTdGQzg2RTI3RDBEM0NFNDg3NjdGMTYKKzoxMDc2NzAwMDA4MzhDM0Y0RkJFN0M3MzJCNjNFODZGNEE1QjZGQjkxRTMKKzoxMDc2ODAwMDdGMjNEMDVGOThEN0MzRDY0N0E0QjFDOTgwRkZEM0YxNzkKKzoxMDc2OTAwMEM0MUQ0RjI3RDFCOEUyQkQ4RjE0OEFBN0M1OTlERDg1RDcKKzoxMDc2QTAwMDdFREFBRTJFQzVFRkI4OTNCNjNCQkJDRENDRUU5N0EzM0EKKzoxMDc2QjAwMEZEREE2OUI5RjE5NzExNUI5ODNDNzEwRkJEQUQyMDE0RUIKKzoxMDc2QzAwMDlFQkU0MjU4NzdENjcwQ0Y4N0Y5QjA3RkIwRDA1Nzg4MkEKKzoxMDc2RDAwMDcyRUQ2MTA3RjI5NTExRUVBNzJDMUFDMkQ3MEI3QzIwMzAKKzoxMDc2RTAwMDA1RTU2NDkwQ0ZEODdFMTAxNTZFQzM0MERFQ0MzM0JCNjkKKzoxMDc2RjAwMDg2ODBCRTNBQjVERThDNzYyOUQ1MjdCMUI3NjExQzY2ODcKKzoxMDc3MDAwMDBGRDJGMTI5NDU5RDBDRUIzRUI1MkU4NTgwREMxMkUzQUUKKzoxMDc3MTAwMENFNUQyRkYzN0I0MjI4NUQ0MkZEMERCMjQ2NkQwNzIyMDAKKzoxMDc3MjAwMEY0OTY3NzlEQTQ5MUExRkRFOUU2RkVGQjRBMzEyRkRDOUEKKzoxMDc3MzAwMDY4RkY4QUU3OTc5NDU3QjUxMDNCNjJDOTZCRUM3RTdFNzEKKzoxMDc3NDAwMDUyRENBM0NDMkMwODVEMDdGQjdEMDVBMjRERDBFNTZCNzgKKzoxMDc3NTAwMDJFNEJGREVENDczMTI2QjQ2QkUyMjA5RTdFRTZCODhDQzEKKzoxMDc3NjAwMDc0NzYyNkI1QURDNDQ5NDlGRkFDRTk0MEM5Rjc2OUY5NUIKKzoxMDc3NzAwMDhCNjlERTRGMTU1QUJFNkZCNDE2NTU0MDk3QjRENEI0MUEKKzoxMDc3ODAwMDdFMTRGODRGQkQ5RDlGRkMwNEVFRERGQkZDNDUzMzFDRDEKKzoxMDc3OTAwMDg3Mjc0Qjc2MkUxRThENzExRjZFN0ZGNzk3NUJFMkZFNUIKKzoxMDc3QTAwMDNGRjczMEI4M0Y2NUE5REE4RTdBNUM4NTQzNzJCODdFQzAKKzoxMDc3QjAwMDFGQ0U1M0U4NzVGQjkzMTJEODU4RTQ5M0YxQjZDN0MwQjcKKzoxMDc3QzAwMDlGOUU2NzM4OUZGMjg5OTlEOTA5MjMwQTk4OUMxMkZBREIKKzoxMDc3RDAwMEZFMUU1RTlFNjc2Mjc0NEQ1RTk3MzAwRjlDRjA3QkU1RTcKKzoxMDc3RTAwMDg1M0UxMEYyNUFDOEZERkMwMjY2NUYwODc5MEQ5OTc2NTUKKzoxMDc3RjAwMDIwQjcxNkMyRUQyRDc0OURDQjc2NDRGODdDMjlEOEQ2REYKKzoxMDc4MDAwMDBFNzA1Q0NDRDA0NDE2MTdBOEQ4NkU4OUU1QzVBNzgxNDgKKzoxMDc4MTAwMDk3MUE0ODM3Q0VGRjczQjM2RjYxNzcwQUI0REZCMjM2NzkKKzoxMDc4MjAwMDAxREI5QjVEMThBN0U1RkEwNUFFQjUwNkI5RDRDMEY5MzIKKzoxMDc4MzAwMEFGQjE0REYyRjk5MTdGOTg5RTVDQzBGQjI3QTA2NzQyRTMKKzoxMDc4NDAwMEU0NTgzRkZENjJEMDJCMEJCODVFNUQ0MDBDNzFERTM2MTQKKzoxMDc4NTAwMEJEQkVGMzQ0REI3MDVENEJFOEI4QTAzRjgzRjNBMkY2RjYKKzoxMDc4NjAwMDMzODVERDQyQ0Q3Nzc4M0FDRTVCNzJGOUMyQ0NBMzgxMDUKKzoxMDc4NzAwMDA0RkM5MDdGRDdCODhCQzVCRDhERjMzMkFFNjNCMEYzRjcKKzoxMDc4ODAwMDVDRThCQUFEMkFCRTM4NjQ1Q0MzQkMwNUJDMzE1MDFDOTAKKzoxMDc4OTAwMDgyMDcwMUY3ODU1RTA2Q0Y4NTlEMTJFMkVCMkZEQzVFNDUKKzoxMDc4QTAwMEEzN0YxODlGMzZFMkJGODE3OEE2NDM5RTQyQzM5MzU0QkMKKzoxMDc4QjAwMDdFQTYwNEU5NDFEMEMxRTJERDNFMEJEOENCNUY5MEI2OTUKKzoxMDc4QzAwMEQ4MThDQTA3Q0IzNkVEQkU2M0EyMEFGRUYzMzFGNDQzRTMKKzoxMDc4RDAwMEVBMTJGQzE5QTY3ODQyMTJCRDJGM0Q1RDczRDNCNUUzQzEKKzoxMDc4RTAwMEZDRkYyQTM4QzEyQUUwN0U1QTZDNDdFMUIyNjA5QkVDNkIKKzoxMDc4RjAwMDhFMkNENEQ1RTM3OURBNUU4NEQ3MjJBRkQ3MDI3MUQwNEIKKzoxMDc5MDAwMDQ1M0NBRTc4QUQ3OTM2MjlFQzNDRUZCNUU3Q0JFMEY4RjUKKzoxMDc5MTAwMEFGOUVGN0QzMDU3QTNCMzY2ODFGNjU4NEY1QjdGQUVDNUUKKzoxMDc5MjAwMEEyNkJFOEUzMEZDQ0ZFOTFBMDhGMDMyMzE1RDQ0NzVGMzEKKzoxMDc5MzAwMDJCQUVGN0NBOTM0MDNGNjdBMERGMzA5MEJDNURDOEY1MUYKKzoxMDc5NDAwMEYyMDJEMEQzRjRGOUU5QTZCRDc4NkVFQzJGNEZFRUM1NjQKKzoxMDc5NTAwMDdENDNDQjhCMEI2MkMxNUVGRTc0RDNCQzlGNDBERUZDQ0IKKzoxMDc5NjAwMEE3QkJFNkExNUU2RTc4NDZFODY1Q0QxMkFBRUYyQjM3N0QKKzoxMDc5NzAwMEQ1M0ZGNzdGODA0RTc3NDRFMjA5ODU4NTVEMUFCN0M3MEEKKzoxMDc5ODAwMEE5RkMwM0I5Qjg4OUM5M0ZGMjI0OTM4RjBEQjFFQ0RFOEQKKzoxMDc5OTAwMDZGQUFCRkIyQTBERTgzMEJCNTJDQTBGNzkwRjdBOEQ3RDMKKzoxMDc5QTAwMDFFOUNBNzk1NjI3QjYyRjdCMzdCMjFFRDdFRDA1RjQyODAKKzoxMDc5QjAwMEJGMEFCRDdCNzQ5OEQ2NTUwMDdBNDEzRUZBRUU0Mzc0RjcKKzoxMDc5QzAwMEZERTdGNkM4MThEMzY5OTRCNzhDODJERjQzMTg0ODhFNTgKKzoxMDc5RDAwMEZGRjNGMDM2RjVDMTNCNjUxMEYwOUUwQkYwNDY3Qjg4NTcKKzoxMDc5RTAwMEMxRkJFMzc1MENDRTlGQUM2NzcwNkZERDk1MTYwQjdFMDcKKzoxMDc5RjAwMEYwQzdFQkQyRDAwRUZBNzg1NzA2QzI3QkZFNjMxNERFRDYKKzoxMDdBMDAwMDY4MDdBQjdBM0I2ODFEODUzN0Q4RkYwMDZGM0FFRURDMUMKKzoxMDdBMTAwMDJFOTVDM0RCQzVFMEJEOEVFQkExRjVFQzM5QkYxRjVDMzUKKzoxMDdBMjAwMEJEOTg2RkZBRTBGMzExMkVEMEVGQTcyM0ZEMEVGMDUzQUYKKzoxMDdBMzAwMDRFRUY5NjA5RUNFN0Y3RDk0OURDOUUxMTcwRkU4NkI0NEIKKzoxMDdBNDAwMEZEM0JEODU1RkRFQzlCMEQxMUM0NEVGQjVCRkM5MjBEMkMKKzoxMDdBNTAwMENGRDU3QzJFOTUwRjA1MDQ5QzZERkI2RDJDOEMxNzFDQ0YKKzoxMDdBNjAwMEJGQ0ZBRUI5NTQxMDZBRDcwQzEyM0ZDQjg5MDdGM0RFRjMKKzoxMDdBNzAwMDk3NzdGRUY2MDREOEY1NzBCRDBBRjhGRENCQzUzOUY4NDYKKzoxMDdBODAwMDBFRkQzOTc4NDkwNTk5MDYyMTBBOTdENTBBNzQzMEMyNDYKKzoxMDdBOTAwMDc4NEY4MDg2QkYwRjcxMzFFM0FCMzkyQjkwOUYwMzk5RUMKKzoxMDdBQTAwMEExRkI0MTRENTE3RTMzQzRBMzAyQkIyNUM0NzdFMzAzNDAKKzoxMDdBQjAwMEU1QjFFNTA0RjZCMzlBNzExRThFNDJBNjlGMjVCNzFCNjkKKzoxMDdBQzAwMEUzOEMxMTk0NkVBMkU4NzhDRTQyMTVFNzJCQTk3NjE2QzYKKzoxMDdBRDAwMDc3REM0Q0M3QjUwNUU3NkI3QzNGMUQwNDExRThGNzE4NTAKKzoxMDdBRTAwMDEzRUE3N0UzRkEyN0YzNzExQTY1MTNGQTIxQ0IyQ0NDNEEKKzoxMDdBRjAwMDFGMTE3OTEzMTlGQzdCNDYyMUYzRUJGMzBBRDkzRTQzOUUKKzoxMDdCMDAwMDZGMjQ0MUZERDFCQjIxREFCNzBBRDc1Nzg1RjE0Rjg1RTQKKzoxMDdCMTAwMDMwRkE1NjA0RENFQ0NBOTdCQTdCQ0E3OTdDMDE3RUJGODYKKzoxMDdCMjAwMDAwOENFQUY5MTEzQ0ZFNEI1NTJEQjRCRjg3QjdCRkE3QjcKKzoxMDdCMzAwMEVENkREQ0NGQTM5RUNDMkY0MEZGQ0U2RTg5NzA4MTNERDIKKzoxMDdCNDAwMEVCODVGQkFEMjhEREZEMzg4QUVEQkY5MEE0MzgwNUY4NDQKKzoxMDdCNTAwMEVBNkUyRTY3RUY2OTdCREMwM0ZBNjg3NjVCQjQxQjlFRTYKKzoxMDdCNjAwMDc0MUMyRkUxRjFENjYyRDhCRjFENkVDMTc4NkI5REI1MzQKKzoxMDdCNzAwMEU3NDUzMEFGRUY3NTdFRjIzRDJCNUREQTJBMTNCMzVGMzgKKzoxMDdCODAwMDU2MjUxMENDM0IxOTQzQ0Q3ODg4REZEMjRGRkJBRTI0NkQKKzoxMDdCOTAwMDVFOEQ3RUY0RjFFNDY1MTBENzY1RjdCNTc5NTE5RUM4MjYKKzoxMDdCQTAwMDI2NUQ3OTE5RkY1RDgxQkFDMkNDM0I5RjFDNDFDODFGN0QKKzoxMDdCQjAwMDg4NUEwMEY4NUUwNkIwMDE3QUE4OEZDM0Y4QzBBRDEwRUQKKzoxMDdCQzAwMDVGNEU4MEE3ODI3NDM2NDMyMTVFMTM3QkFFOEJDMTczRjgKKzoxMDdCRDAwMEZFMkNERTNDOURBRkZCQkIxMzg4M0Y4RUFFRDdGRkE2Q0QKKzoxMDdCRTAwMDNFREU3REE3REZFNENGQTI3OEI4NTVGMUVGMDdCQTM2QzUKKzoxMDdCRjAwMDU5NTUzM0Y4MDc5RTFBNjkyQ0Y4Q0RDQjU2MEY2RUJFMzcKKzoxMDdDMDAwMDREODU0NTM4REY2NTI2MTM5QkU3NDMxMkRFQ0I3MDBGQTkKKzoxMDdDMTAwMDY1NzJBMENGMzkwQUU5OTJDNzMyRkMwMUZEMzUyNUIwNjMKKzoxMDdDMjAwMDdCODAwM0Y3MzFGQTE2NzE3NjgxQTcyMkRBN0QyODdDRjIKKzoxMDdDMzAwMEVGRTFGM0EzRkRBQzhCODVGNjk2RjBGMUE1MUYxNjBBRDQKKzoxMDdDNDAwMEJGOThEOTlENEIzOUJGMkUxNUY0QjY0QkNGQTdDRjAyQTUKKzoxMDdDNTAwMEJGMDAxRjgxOUQ0QkUxNzYwRjdGMEU0NEVGOUIzOEJEMjcKKzoxMDdDNjAwMDZGRTJGNERFQ0FDQjgzMURBRjMxODJGODQzN0ZBRjQ1QUMKKzoxMDdDNzAwMDhDN0IyQjdGM0U1RDk4OEFGRDg5NzkwODdBMjYzQzNFNzUKKzoxMDdDODAwMDY1QTI5MjAzRThFODU0REIxQUI0OUIxNjE5RTJDNTI0RjYKKzoxMDdDOTAwMDM0OEUyNTg3MkJGN0M5MUZEMzE1Nzg1QTAyRjM2MTNFMUUKKzoxMDdDQTAwMEQyNzcyMjVENDBEN0Y3NThEQTMzRDhCRDEyRkE3QTYyMUMKKzoxMDdDQjAwMEZGQjcwRTZFRUVDMkYzM0E0NEY3N0IwQUQ1NzIwQ0U2QkMKKzoxMDdDQzAwMDEzRDU0OUVDNUU5OURFNzI5QkQ3NDRFREM1MEZGOEJEMjQKKzoxMDdDRDAwMDBFRTc5QkQ5RjlEMEJBODdGOEVGQTBDNDNEMzgxREVDNjgKKzoxMDdDRTAwMEMzQkE1ODhCMDJDRjBGRjhGRDcyRjc5MjZFNUI0QTRBMDcKKzoxMDdDRjAwMEQwM0U2OTJEOTdGOUVGNkVDQ0JERDM5RDBGRjc0NDEwQTAKKzoxMDdEMDAwMDUxREVFODFFODE1MTI1NUU2RTc4MEZGNjNCNjY1RUE2NTkKKzoxMDdEMTAwMDc0ODBFNTQ1NzdCQUE5RENFODNEQzRCRjdCNjkxOUYwRkEKKzoxMDdEMjAwMEY4ODhBMEU3NDZFQ0FGRjcyOUYxRkQzRTU2N0U1NDdDN0IKKzoxMDdEMzAwMDdGOTA5NUZGNERGNENGQ0IxQjBDREY1NzE5QkVGRjlDRjYKKzoxMDdENDAwMDk1REYyQzdDRjA0RTJGRDhCNTdDMUZBN0VFMDYwOUU1RjkKKzoxMDdENTAwMDhBOTVEMzVCREQ2QTNGQzJCOUNFNzQ4MDNEMkI4ODFGMDQKKzoxMDdENjAwMENFRDc1RUFCREUzNzg1MUU2QkExMDNFRTM3Mzg2NTAzRDkKKzoxMDdENzAwMEZERkRBRENCOERFNUYzRjlEQUYxNDI1QTdGQzk2RDkyODUKKzoxMDdEODAwMEQ3MDJGMkYyQjgyRjkzQ0JGN0IwNzlCOTU2NEVCRjE3OUUKKzoxMDdEOTAwMEM2RDBGRUM2MDdFMTRERkJGOUYwOUZFOTY3NzVGRjdFOEYKKzoxMDdEQTAwMDNFODU3OTVENkYzRkQzNUQ2QzdEMjFGREY0RkUzM0ZEMzMKKzoxMDdEQjAwMEVDNzVFOUU3MjNFQ0EzQTk2M0RENTE2MzQwM0U1NEREOTQKKzoxMDdEQzAwMEE4OEJGQjJERkQ5MTJCMEVFQzJCRjIwRUZCMUQ5M0E1MkEKKzoxMDdERDAwMEFCREI0NzhEQTNGRDJGRkRBRjU3NDYyRDBDRjFDNzk3QTkKKzoxMDdERTAwMDVGOTI4OTFCRUU0N0I4MjRFMUYzOEJGRDdGQjJDMEY5QTcKKzoxMDdERjAwMEZDRTVGQkY2NUIyNkU3QzNFRjJGRUNCNzU0ODZDQzZCQjQKKzoxMDdFMDAwMDk5QzhCMzI0M0RDQThDMTBGRDFFMzdDNkM0RTUwNkZCRDUKKzoxMDdFMTAwMDFEODdBNUZGNzU0NjAxN0MyRTM1QjU3RkZBMENDNDgxMDAKKzoxMDdFMjAwMDZFOTBDMkVFRDdGRTk1QUZFRkEzMDFDRTgzMzlDNjMwNzgKKzoxMDdFMzAwMEY5NTc1NkVDNEU4Mjc1NUUwNDE5NDRFQjU3QUUwOUJGRjQKKzoxMDdFNDAwMENGM0Y2NzBDOEIyN0Q2RjE3Qjk1RTc5NUQ4QUMyQTg1NzkKKzoxMDdFNTAwMEYzRjhFMzZDN0Y3QUUxRTY5NEIxMTBFNzc1MTQ1NDhDODMKKzoxMDdFNjAwMDFBMDNGMzFEMzA1RTFBNjBGMUQyNEUxNjJGQUQ0QkU4QTcKKzoxMDdFNzAwMDdFMDBFRTMxQkRFQjU3NEY2RDg0N0I0REE3NkUxNDdDQjkKKzoxMDdFODAwMDQyRjBGNzcyNkEyMjA0REZFREJBQjNBQTBDRTM1RjU4M0UKKzoxMDdFOTAwMDJFMUJGM0MyNDZFMDlCMjNGQzVFRjFEOUE1MDU1MTIwQzEKKzoxMDdFQTAwMDFGN0E1MkEyNEQ3NjJBNDc0NkU0RDdERjA1RjM5ODVENDQKKzoxMDdFQjAwMDdBRDM2NDc4NUYxRTYxQ0JBQzY3NzE3N0E0OEIxMUY5QkMKKzoxMDdFQzAwMDlFNjJGODBFRjUyMURFQTE1OTU4RkM0QjdCNEJDNkY4OUIKKzoxMDdFRDAwMDk3NTYxOEFEODVEQjdGMUVDQkUxNzBENzE4NzY0RkYxMzIKKzoxMDdFRTAwMDExMTM5REU3RDhFMDNDQzRGOEQ0NjA3OUEwOUJGNjc3RTUKKzoxMDdFRjAwMDZBRjVCMDIyQjg5N0JGMjVCRjdDMTZEMjEzMUZCRjI1RTUKKzoxMDdGMDAwMDVGQUI4NkIyMTg5RjJFQjcxMERFMEY3NjFFMTU5QzJFMjMKKzoxMDdGMTAwMDY2OEQ2MTc4RjM5NDUxN0EwQkYxMUI2NzU0NDVFQkNBNzcKKzoxMDdGMjAwMDMzNkIxMzg5M0IzNDBFM0IzMzU5NTc5RTU1OTdBNkFCQTEKKzoxMDdGMzAwMDdGRjdGQzNDRERGNzY5MTFEREM1Q0RENzYxMDczN0Q5ODcKKzoxMDdGNDAwMDZDNTE2MDhGN0REOEY5Q0Q3RkRGMDNGNkREMzZEOTI1MDIKKzoxMDdGNTAwMEQxRjUyQzdFNkRGQjdGQzNFRkEzOUM4NzFGNUM2MEU3OTAKKzoxMDdGNjAwMEFGMzAxRUY2RjkxMUY2N0I3RkQ0QUU1MzQyRjc3NUNFRDMKKzoxMDdGNzAwMDkxNkVDQzJCMENEOTJGMDhCQjlGMkFGNjBCOTZEQUJCM0YKKzoxMDdGODAwMDMwRkZFRjdGQkJBRkQzMzI4NkVGMTc4QzI1NjM0MTFGRTUKKzoxMDdGOTAwMDlFNkY3RTE3RTM3MENCNjNEOEJBQ0VCREMyRUYyMTA3QzgKKzoxMDdGQTAwMDNENDJFOUZDNjY2ODA4Rjc4NTVENUE4NUJGRUY1M0M5MTUKKzoxMDdGQjAwMDdGQkY3NUQ4MTg5NUY5MDUyM0VFNTNFMERDNzcxMzdENjQKKzoxMDdGQzAwMDgyRkM5RjRDRTU1NDFDQTU5M0VFRkRBNDYwMUZFNDVENkMKKzoxMDdGRDAwMEE0RDgzMDlGQkNGMUQyRUQxOEU3M0UxMkU1Q0RCRjhGOUIKKzoxMDdGRTAwMEQ2NUJCQTZFMEE5Njk3NUY4QUM2N0U3RjJGNzc0RkM2OUEKKzoxMDdGRjAwMEJDRTY5N0Q5RUYyMTRFNEI5RUJEMUFFNjBGRjVFRkE3RDEKKzoxMDgwMDAwMEUzNERGQkQ1Q0QzNTAwQTdFNUZCRDhGOUE5NjlGMjFGRjMKKzoxMDgwMTAwMDhBQTE5RjY1NkQ1M0IwRkQzNDk5MUM5MUE4QkQxMDc3NUUKKzoxMDgwMjAwMEU5MUVFQzc3MUFFODdBNUE5NjRCNkM4RjgxRkU5NTJERjMKKzoxMDgwMzAwMEZFQ0M2NzQxQUU1ODZDMjg1NzlBMkU0NTYyQkJBOTk1NzUKKzoxMDgwNDAwMDRDNEZGQkM2MzAzQkM2RENDM0U2NTU3REU5MzZGQzJFMDMKKzoxMDgwNTAwMEYwRkZDMjk4NTRERDNEMzI2NkM3MzYwNUNFMjc5ODdCQzcKKzoxMDgwNjAwMDI0QUM3RkNCQTUzQzdDOEE3NUJFOTVGRDNDREU1NzYyNzcKKzoxMDgwNzAwMDc2N0MzRDE5RjIzQURGNEE5MkVDNjg3RTE4RTRFRTg1OTAKKzoxMDgwODAwMEU2RDIzODEyNDYyRUY1OEQ3Mzg5RTUwMTQ3NUM2Mjc5OTgKKzoxMDgwOTAwMEMxMkYxNEI5M0I4MUJGQTczRkRDQTNDMEZFMEU4OUIxM0QKKzoxMDgwQTAwMERBMDE1RUQzMjcxNEE5MEI0M0Y4NDkzRTcwOTcwNUYwMTcKKzoxMDgwQjAwMDYyN0VGMjk4MDVGNDdFMDQ3RDU2ODY3QzZGMTRGOUVCOUYKKzoxMDgwQzAwMDA2Qjk3QzgwQ0IwMTcxN0U0MUU4MTlBMjc2RTg3RTVGMUIKKzoxMDgwRDAwMDRERjBDQkFGMzhCRjhBRjZERDQwRUI4MEM3OTcyMkQwOUEKKzoxMDgwRTAwMDlGN0FBMzQ4N0IxN0U2REI1RENFN0UyNzgzMjhEREEzM0UKKzoxMDgwRjAwMDYwNUZFNTVGMzU3RjhBNjdBQjg0RjY3RTBGRTZDNTRGMkMKKzoxMDgxMDAwMDlGQTA5QTYwQkZFMEZEQkU3NTMwQkVCREQ2M0E3RUNCNjMKKzoxMDgxMTAwMEVCRkY1RTI2MkREMEVGRUYyNzRERUE3NkQzRkVGNkZGN0MKKzoxMDgxMjAwMDcwREMzODkwRkY2MkRDMkZDNkIwNzNDM0M0MUVCODBDN0QKKzoxMDgxMzAwMEZFNUREM0VCRDEyQUYwRjczNDcwOTY4QTgzNzYyRDdEREQKKzoxMDgxNDAwMDhGRjdFNTM1QkQxRUIxNTVBMkRGOUI2MkE5N0Y0QkM3RjYKKzoxMDgxNTAwMEFGN0MyM0QyMEY3NEJDRkY4RDQ4MDU3RkE3QTg1OEZCQzYKKzoxMDgxNjAwMDAyRTQ2NUU1MUI1OTU1RTBDRkI5M0IyMzE0ODI3NjhFQjYKKzoxMDgxNzAwMEZCMkNDQUQ1MDFFNjdCMkQzOTY1QTQzM0MxOTdEQTNBQzkKKzoxMDgxODAwMEM2MkZGNTlDNEVFNzcyRkVEMzM4MUY1RDY4MUU4QTdDQjEKKzoxMDgxOTAwMDc4RTE2MTNBNjlEODBGN0Q1ODJBRDgwNzc2ODE2QUMzOTkKKzoxMDgxQTAwMEZCODkwNTVGNEUwMzNGODhCRUZGN0Y0NkU0OEUyQzAwQUYKKzoxMDgxQjAwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDNTdENDAKKzoxMDgxQzAwMDBCNzg1NEQ1QjVGMDNFNzNDRUJDOTI5OUM5RTQ0OTQyQzAKKzoxMDgxRDAwMDFFOUM0MDA4NDEwMjRDMjYyMTg0MTA2MDEyMDJBMjAyMUIKKzoxMDgxRTAwMDBFNTAxNTMwQzg4MDA4MTEwOTA5NTE1QkFDRjZDRjg0RDgKKzoxMDgxRjAwMDI0MTA0NTJENTZEQjA2OEI3NEMwNDc1MTY5NkY0MDZDQzcKKzoxMDgyMDAwMEQzMTY2MTc4Njg2M0Y1RDM2OEVGNkRGMUQ2REFGOEI4MDQKKzoxMDgyMTAwMDg4OEEzNTgyRjVBM0I3MjhGRjVBNkJFRjlEOTkzMzQ5QjkKKzoxMDgyMjAwMDEwRURCREZGMUZFNTNCNTk2N0VGQjMxRjZCQURCRDVFQTIKKzoxMDgyMzAwMDdCRUQ5RDc5RTMxMjQzMkQwQTYzRUJDRTI1MzI5NkNDN0MKKzoxMDgyNDAwMEQ4M0M5NTc1MkI0OThDRDU5RENCNjVBQzk4QjFGNUU3OUQKKzoxMDgyNTAwMDkyRTk3REZEMzkzQjNENTc5RTFCNDdFRkFERTc1NEU2NjQKKzoxMDgyNjAwMDAzNzhENTM5ODVGOTAwQkU2QUE2MzM2ODRBNjBFQzQyQzYKKzoxMDgyNzAwMDUxMjBEMzkzMEFFREI0NUMzRTg3QjkxODBCNkNDQTI4MjEKKzoxMDgyODAwMDA5MzgxODlCN0Y1N0FGNjY0QjYxOEMzOTJDRUVDN0ExMUMKKzoxMDgyOTAwMEJGRjk2NTQ1RTlBQkUxRkQwNUZDOTlDMTU4Q0I5MTI1RDYKKzoxMDgyQTAwMDRDNzc0MkJCMjk3RThCMEZERUFGODJFN0NDQThGMjlCRDYKKzoxMDgyQjAwMDE4RjM3NTAyQ0M5ODdCNzY1QTA5N0NERjlBNkJCQTg3RTMKKzoxMDgyQzAwMDQ1Q0E3NThGODlCMTQ5NThERTRDQ0ZGOUIyQkVERUM1QkIKKzoxMDgyRDAwMDU4MUE2MzM3QjgxOUZGRDkwODgzQ0I2MENDMjlFQUFGQTUKKzoxMDgyRTAwMDc0ODQ0NzlCQTAzRDczODNEREIzMDlDNjc1MjY0NTlGMDMKKzoxMDgyRjAwMENEMDA2RUJDMUIwMDQwNDFBM0Q5M0ZEMzA5RTM2RURDMjcKKzoxMDgzMDAwMEFFNzg4MkYwRjk4REE1NEUxQjgzNzk5NjlFNjhCMDA0RjUKKzoxMDgzMTAwMDBBMjNGRDJGMzkzNzgxRTk4MDg3NDVFN0YyRTg5OTNBNEEKKzoxMDgzMjAwMDNFMzAwMUYxQjBFMkRDQjU4NEFGOTU1MDhFNEZBNjk3OTgKKzoxMDgzMzAwMDk5NzAzQ0I3RDlGMDc3MUMxMEMwQTU4Q0REMkFDNkY3MjAKKzoxMDgzNDAwMDU5QzNFNDYxREY4MUZFM0Y3QkQ5NENFNTkzN0NDMTFCQkYKKzoxMDgzNTAwMDcwM0NFNjkwRDVCMzBCQzY3M0NBMUU1MDE5OENFNzU0MTcKKzoxMDgzNjAwMDM2NzMzRjA4NDMzQzY1NjY0MTM3RDBFQkM2MEU5NTA1MzIKKzoxMDgzNzAwMEExRkQ1NUYwMENDMEYzNTQyMkYzMjU3QTExOUYzMENGQTQKKzoxMDgzODAwMDAyREVGNjA1RjhGNzc3NkQ1QjBFMUIwNUY0NkRGQ0QzODYKKzoxMDgzOTAwMDVCREE0OEM2NkVDRUVGOTkxMDg2NzY2QjJBQzNBOUQ3RjIKKzoxMDgzQTAwMDQxQkJBNzFGMzM3QjgyRDBFRkJBMjNBRjk3OUFBMEZDQzMKKzoxMDgzQjAwMEMzNUNERjMwQTYzMjM2NjY3ODYwMEVDRTY3RURDMkQwODEKKzoxMDgzQzAwMDJGQ0MwMERGNzJERjMzQUUyOTdBMDQ5RjlENUE3OEI0MzgKKzoxMDgzRDAwMDA2REY3NzAyMUU4MzMwQUVDRTdCRDUzOTIxQTIxNzhCMDQKKzoxMDgzRTAwMDVGMzAxRTFGODAzREE4M0E3QjgxMTI0QzAwRkNCMUVBMzEKKzoxMDgzRjAwMEE5N0NERTM2M0VCNkI1RTc0NjExN0VDRTM2NThDNzFGOUQKKzoxMDg0MDAwMDgwNzZDRUVBNEUwRkJFQUYzQkI3ODhERURGRDI3RTA1NjgKKzoxMDg0MTAwMDNEQ0RCRDU3MDhCRThDRTdGQzlBQjk2QzEzRjI1OTlENEYKKzoxMDg0MjAwMDA2OTVFMUJCM0E0NzQyMjgwOEYzOTlGNzZGQzA3RjgwNzEKKzoxMDg0MzAwMEYyRjUwNzE2RjgyQjkxRUYwQTE0Q0Y2ODc4QUNEQjc2Q0IKKzoxMDg0NDAwMDg1RTBGM0RERjc5NzAzNUVFNzdEOTJFMjY5ODFGN0JGOTAKKzoxMDg0NTAwMDZBNEEwNzY0NDVGODdGRDZCOTA1NTQyRkUxRENGNUQ0QTQKKzoxMDg0NjAwMDlGRTQ3RkFCRTA3NzMzRjI3RjE0REZDMzc3OENDMTc3NzMKKzoxMDg0NzAwMDgxQTJDMDlEODhBN0FBQTdGRkY5Q0M3RkMyQUIyQkI1NkMKKzoxMDg0ODAwMDcwRkU0RjUyRjBFOTI0RkU4OUFDMDM5QkZCRjE1QzVBNkQKKzoxMDg0OTAwMDA3RkFFQTI4M0U1MjhGMkVCMUU4ODAyRkYzNDM2RkQzQkMKKzoxMDg0QTAwMDNBQjBDMjczNjY1NEY5N0FFNEVCNDJDNDRDQUZCNkQwMkEKKzoxMDg0QjAwMDE5NzkxRkZDOUFGQ0JGNUVENDlGNjM2NUNCRkREODlFRTMKKzoxMDg0QzAwMEQ2OTMxM0REREVFMUEyQUEwNzNENTBERUUxNTE3ODdCQjEKKzoxMDg0RDAwMEZGNDNFMzA2M0NEOTEwQkYzMDdFMUZEMjZCN0U5OTZFRkUKKzoxMDg0RTAwMEJBMjcxN0ZCOTFFM0U3N0NGMjU1RTM2RjEzRjU1RjU1NkQKKzoxMDg0RjAwMEQ5NDY2Q0Y3RDUxOTMzN0E3Q0QwREU5MTNCOEI4QjU1RkUKKzoxMDg1MDAwMDNERDJFRkQzMUUwQkI1MzcwRjY4ODdFQkE4RUYzOTZCNjEKKzoxMDg1MTAwMDY4NzcyRThBMTFDNjE0QThGRkM5NzM2MzQzRjdDMDE0ODUKKzoxMDg1MjAwMERGNjI3REU3NzEzQ0MxODNGMTNBQ0VBRkZFNTAzQ0Q1QUUKKzoxMDg1MzAwMEFGOEY0QjA4Mjk1MDVFRUZFQUNCRjdDMzc4NjYxRUI2QzMKKzoxMDg1NDAwMDg3OTFBRjhFMUNCNjZCMENGQUFEMjhCOUYxNjlDNEQzMTQKKzoxMDg1NTAwMENDQzM2M0FBMTVFMDQzREY0MUFCQzZBMERFREYyN0Y4M0EKKzoxMDg1NjAwMEY2MjIxRjBDMzU3RTM5QkVEOEE3OUNCRkU0MkJCOTVFMUUKKzoxMDg1NzAwMEU0RkE5MEVCMjE3NkZEQzhGNTcwRDU1NjRGQzI3NzkwOUUKKzoxMDg1ODAwMDRFODA5OEM3NzFGRDY4QzFCRDM4OEYzQTNEQkUwOEQ3OEYKKzoxMDg1OTAwMEE1NUM0N0VCMEYyOEI0Q0U0MEU4N0E0NkVCOTE3NTI0RjIKKzoxMDg1QTAwMEQ3NEQ2NDlEOTgwODBGRjM4NDlFMTg2QTlERDQ4OTc1RjEKKzoxMDg1QjAwMDcxOTM1ODE3NzIzRDFDNTMzQjFGMkM4N0VGNjYxNjA1QUQKKzoxMDg1QzAwMEZFODI3ODkyRUI2MkRERkU1OEJEMzAyNDVGMzFFNEFCNzEKKzoxMDg1RDAwMDlCNTIxQTE4RjI1NTFEM0NBM0Y5Q0EzQUM0N0E3ODA3N0YKKzoxMDg1RTAwMEY5MjNGNUQyRDc0M0NGMjVGMkQzREY5MTlGMjZGREFGRjQKKzoxMDg1RjAwMEYyRDNERjkxNkYwNkUxQTdDRkZGMTU3RThBRTU5N0IzMkYKKzoxMDg2MDAwMDBEN0YyQUQxNjEzQzY3NEI0MENFRTY0NkY4RURBQTk3MzQKKzoxMDg2MTAwMEQ4RjgwM0YwOUU4RDcyN0E5MDdGQkFFM0Y4M0NCQjJEQjgKKzoxMDg2MjAwMEQ5QTExNkFDNzc4MTM1MjAxRUE1RkVCRjA5RTk5RTFDOTUKKzoxMDg2MzAwMEUxNTNBRjM3MzBCQzY4NTI4NEZFREQ3MUMxQzIwRDg1OTUKKzoxMDg2NDAwMDk3NEU2NzZCNEE4RkM1NTc4OEY0RUUzMUU4RkZCQTIxMjEKKzoxMDg2NTAwMEU4M0NBMkU4RUJEMUQ5MjlFQTdGMTU5RDNENDU1QzZFNDcKKzoxMDg2NjAwMDMwMzdEMEIxODRFOEE3MjM1RDYzRTk4RTc0NDVCQUQ3NkIKKzoxMDg2NzAwMDFGQjJFRUJFMTg1REQ3OTcwNEE2MTYwRDIyMjc5ODhGNUQKKzoxMDg2ODAwMERCMDMxMUJBNTgxNzIxREY5QzBEODM0MjUzODZBNkFCM0EKKzoxMDg2OTAwMEI5ODNFMzVEQzI2RDYxNERFQURCNjRENEI3QzAyRjE1QzkKKzoxMDg2QTAwMEQ4REYzN0U1OTc3OTMzRTFEN0UxMDgzRUI1RDg5NzA1QUMKKzoxMDg2QjAwMDc0RkZCRTgwRDkyRjE2MjM3REFFMkQ5M0U1NEY3N0Y4M0EKKzoxMDg2QzAwMEYyNTBFRUMwRUZFNUQ0ODM4RkQ5MDhCRjFDMEVFRTNEMEIKKzoxMDg2RDAwMDUxMERGNUFGN0FCMEJGM0M4OEU1QjMyQTEyNDQ3QkNDOEMKKzoxMDg2RTAwMEE3QjA0OEZERUJGNzNENzlFMjVFOUFDNzM2QUUwRjAyQzAKKzoxMDg2RjAwMEJEOUE3RjdDMTQ1QzAyQjAzMzBBMkU4QjgxNzdGMEZBMkUKKzoxMDg3MDAwMDJFQUQ5N0I5QTk5RDEwNUZBRkQwQkVFMkU1RkNFMzhGMTcKKzoxMDg3MTAwMEIyNDc4MDkyQjMxM0QxOUUzQ0EwQjhFRjAxRkEyRkFEQkYKKzoxMDg3MjAwMEY4QzQ4MkY0OEFDQ0ZGMDBDRDdGRkQ0MTQ1QzA1RDI3QUYKKzoxMDg3MzAwMDcwQkU0QjBGNzBCODc5REZDMThFQTAyNkRBMDMzQ0FGNTQKKzoxMDg3NDAwMDEzNjgzNjc3MkEzRTE1REE1RDU3QTY4NDQ2RTYwRUM0Q0UKKzoxMDg3NTAwMDczNzM5MTUxREZFMThGNjZGQzlFNTk1MkJFREVGN0I4MEMKKzoxMDg3NjAwMEJFRTlGQjkxRjQ3REQ4RkEzNUZBQkZBRTgyRjk0MjhFQUMKKzoxMDg3NzAwMDgxRjUxRTkwRUJFQjNDQzBCMjdEQzBFNTIyOTg1RkE4NkUKKzoxMDg3ODAwMDcwNjBGREVEQTJERDFFOTM0OUUwRUJCNTBFQzQ1RjhGNzYKKzoxMDg3OTAwMDQ1RTJCM0E3QzM1NzAxRjQ2NzFDN0U3NDVGQ0ZFMjYwNjQKKzoxMDg3QTAwMDIxMUZCRTJGNjZGRTE3MUI3RjVCRkZCQThGQ0M1RjM3ODIKKzoxMDg3QjAwMDdFMUZCRTE4RkVCNjBFQzA5RkUwOUY1QTIzM0YyNTY4NUQKKzoxMDg3QzAwMEZFRTM2N0ExOUQ4NDE0QzU4RDc2RjE3QUJGRkQ1RUI0OEEKKzoxMDg3RDAwMEZGMjNGQ0YxNjdFMjhGMUUzQkVCRTc2NzIzRkZCRkI5ODYKKzoxMDg3RTAwMDE4Rjk3RjNEOTNGNURGRUFDMEY1RTMzN0Y1RDdFN0VCRkUKKzoxMDg3RjAwMDQxRjIxNzdDNUYwMEZDODQyNjMyN0VGRkRDQkVCRjc0MzIKKzoxMDg4MDAwMDA0MUQ0NDFGMkEyNzM4RUYyMkVCQTEzMzA2QUU4ODU5RjYKKzoxMDg4MTAwMDNGODJGRjY5RkRBMjlDMDdGQzhDMUU0NENFQkMyOUYwNjAKKzoxMDg4MjAwMEZCQjFDMjE2QTM5Q0VDQTlFMjc2NjJDRjQ4RkUzQzVGODYKKzoxMDg4MzAwMEM0RURDMkY3MDQxRTRGOEJGQTNENzE1MTc4Qzg4QUQwM0YKKzoxMDg4NDAwMDE5N0VDMkU4ODc0NENEOUJGMEI0MjQ0NUNFRkJDQkM1NEUKKzoxMDg4NTAwMDczNjFERTNENDlCQ0ZDRjNBMkZGRUUwODY2NDVFMEQ4M0IKKzoxMDg4NjAwMEY2Q0UxNTdENDk3QzEzNjlGRkZDMDlDNEVCMTI4MUI3NzQKKzoxMDg4NzAwMEYzNDU1RjlDMTA3Q0E1RTBCQUFDMjMwNjAxQkUzOEEwOEUKKzoxMDg4ODAwMDA0NTVGNDEzOTAyRjA2OTlGN0YxODE3QzE1OENGOURFQ0QKKzoxMDg4OTAwMDY3QkVDOEY3QkYxRkI4MkU3RDMxREYzMzczQzlEN0Y5NjQKKzoxMDg4QTAwMDVFRDA2RDZFMEM1REU3QzREMEI1M0EwNkFFOTE3MEM4NkYKKzoxMDg4QjAwMDIwRkZBNDVDNUNEOUY1NDA1QjFBQ0NFMzk2M0QwQUFBODQKKzoxMDg4QzAwMDk5Mjg3RTc2MkNDMUY1Nzk4QjVCRjJBRkYzMERCNEJCQTIKKzoxMDg4RDAwMDIyRkNFQzIyNzg2MUE3OTQ4NzA5REI1MTFFMkU0MDc5OTcKKzoxMDg4RTAwMDU4MUU4MTE3QTFCQzIwRDhCREM0MzczMTVBNUYyNDUyMEQKKzoxMDg4RjAwMEY5NzVFREIyN0UxMkMxNEI1QjY1N0JDOURCN0Q1QTg0OTUKKzoxMDg5MDAwMDhFMkM5OEIyMDRGQjVCNTIyMkY0NDUzMEY1MERBQ0JGQkYKKzoxMDg5MTAwMEY2MjBGRjdFRTJGRUI0MzcyRUJBMUVCNkM1RTA2NTQ3RUMKKzoxMDg5MjAwMDBDMUM4Q0E5RkZEMDU3RTg5N0Q2OThFRkVGOEEyOUJGODcKKzoxMDg5MzAwMDM3MDZFRTg4ODFEQjhEREZBRjU4QTVEMDNBNUMwMUZDQUQKKzoxMDg5NDAwMDgwODRGOEFBNzUzOUMzREI2RkE3RjZFQjUzQzU0MTc2NkYKKzoxMDg5NTAwMDlCNjE1RDVERDVDMkUxMkJGNjhGNUFEMkVFODg4MkJENTgKKzoxMDg5NjAwMEEzOTcwNDFEOTE3NTYxNjZGQ0M3OUFDMjY4NUQ5ODg3REMKKzoxMDg5NzAwMDkwOTc5M0JEQjFFQjQyQ0NBNzIwNTZERkYyRjJCRkUyNTUKKzoxMDg5ODAwMEFGMTk2ODA3MzM4MzVENzA0QzM1QzI0NzU0MzlFRUUyNDYKKzoxMDg5OTAwMDM3NkUyQkM0OTcxMkY2MkVDMUY4Q0E1NTNGMzZDRTBCNTAKKzoxMDg5QTAwMEZDNTUwMTdCOTY1NDU3NDREOTI1QzE4OTRCNzBGRENCQUEKKzoxMDg5QjAwMDc5Q0FGQUIzQkZCOEEwNjI3RkNCQkQxMzk3M0MwNkU1NzYKKzoxMDg5QzAwMDM1NTVFMUQxMEQzMENFOUEyNEZFMDRCREE2QTJERUFDMTEKKzoxMDg5RDAwMDE3RjE5OEQ5Q0ZBOTdFRDQ2QjM1NzFFMUQxOEQ4NTUxMkUKKzoxMDg5RTAwMEYzNjQ5REY5MzhDRjIzNzdBQTQ0OUY2MDBCRDAwN0YwM0EKKzoxMDg5RjAwMEI0OTI4MTQzMDBBRUQ5OTE4NDg0OEQ0RjQwRkQ2Mzc3NUEKKzoxMDhBMDAwMEFBMUI1MThGQkVCNTMxMzkwREZEOUI4MzVFRUUyRjFDMjUKKzoxMDhBMTAwMDRCMTg5MTc2MTNDMDQ3RTI5NzVCNzRBODc3NjRDQjJDMTAKKzoxMDhBMjAwMDdBMUU1NTdEOUJGQjYwQUQ3RDZGRkZGNDI1OEVCMTU4OUUKKzoxMDhBMzAwMDlFNDBGOEI5QzM1QkJFQTQxOUY4RkEyRUFGNEVGODBDRUQKKzoxMDhBNDAwMDI0QjlEM0JBRDA3RUJFQzdDQzFFRDc2OUZFM0I4OTZGOEUKKzoxMDhBNTAwMEVFQjMxNkExRkZCQ0EyNzk1QzFBREE5MzJCN0ZCODYwNDMKKzoxMDhBNjAwMDc2MDZENDVCRDk2NkY2Mjg1NDhGNERDMDcxMDdFRTk5MEYKKzoxMDhBNzAwMDY1QzFGMjU1QURFMjE5QkM5QzlFODdCRjdDQjRDNTA1QUIKKzoxMDhBODAwMEY1RkIxRTUxM0NCQkExRkVCNENGM0E1RjlBMDBGMDlBQjEKKzoxMDhBOTAwMEY2NTExRTI0Q0RBMTczMjZFNjg2N0VERUU5MTgxMzUyMTgKKzoxMDhBQTAwMDgxMUZERkI1MzdCQzMwOUZENzY3NTg3RkNENzlGRDk1RTMKKzoxMDhBQjAwMEY5MjU1ODVGNzU2RjgyRkEyN0UxM0REQUMzMjdFRjU2MzMKKzoxMDhBQzAwMDc3MkIzODJFOTczMzRFODEyOTlERkM0MjdGMDVFRDVBMzYKKzoxMDhBRDAwMDI4Nzc2RjgyRjcyN0RCNkU0RTQzM0JFQkE0QTJCQjE0RDMKKzoxMDhBRTAwMDk4RkZGNkZENzM5N0E0MDNCRkFDRTlCMDBBN0FDRUNEMjgKKzoxMDhBRjAwMDU4MDFGMzVGNjFFQUU3MTdEMjFGQUIxMzM5QkNERDNCQzYKKzoxMDhCMDAwMDc3QzlFMzMwRkU5M0RCQzdCODEwQ0Y4OUM1QkU4N0JERjgKKzoxMDhCMTAwMDgwRTdCNzhBN0QzRkYxQTZFMjM4Qjk5RTNBRkNBNUJBNTQKKzoxMDhCMjAwMDFDRURGMURGOUU1RTk5ODZGQ0Y0Qjg1ODNGODdDRUFEMTAKKzoxMDhCMzAwMDRDNUIxOTY1RUZBQ0ZFNTgyM0JBMUZCNkU4QjdFMTM4QjUKKzoxMDhCNDAwMDBGQzc2NTJCRTgyRjAzREQ5MzE3QzBGQTVEMjVGQzBGRDcKKzoxMDhCNTAwMEUwREY4RENGMEM2MkY3MDRCRDJBQjU3QjY0NkI2QTg1QkMKKzoxMDhCNjAwMDZFRTBFM0VCREY0MEJFMjRCRjAxRTA1RkVFQkY2RTNCOTMKKzoxMDhCNzAwMEVBQjVGN0FDMUJEOUJCQjhGOEVFODI4MjI5RjAzQzY2QTcKKzoxMDhCODAwMEE3Rjg5NTc5QUYzRDY0Q0ZDNUY4QTc2RjM2Q0EzRDk2NzMKKzoxMDhCOTAwMERFOTlCRkQwMTlCNUVFNDRGREJGMDQ5RDU0RkYyRjUwQTAKKzoxMDhCQTAwMDFGRkRCN0JGMDRGRkVDNjQ4RTgxNzZGQzFBOTczMzg4RjMKKzoxMDhCQjAwMEM2QzRGQjRFQTc4Njc0Nzg0QjZCM0E3OTA3N0NCN0ZBMkMKKzoxMDhCQzAwMDExMzNDOUZERDU4RkE0REVENTg3RjIwNkY4MDVFMzYzMUUKKzoxMDhCRDAwMEIxRjM1MjhCQ0QzNEFGMjFENzYxQjBENkI4MEU1OTJEMzkKKzoxMDhCRTAwMEM5RUJBMUQ2NjFDRkZFMzUxNzVEODc2Qjg0OUYzMkZCNDEKKzoxMDhCRjAwMDExQjMxRkQ3RDE5QTQ5NEU4RDgxRkVBODdBRTRGOUM3RTcKKzoxMDhDMDAwMDkxREZENzZDQjA3QkFEMzBGMDM1OEY1ODg5NUVCRDRFQUIKKzoxMDhDMTAwMDY3RDAwREU1MDE5NzUzNEI4NEU3NUI4MkJFQUM5OEFGRkMKKzoxMDhDMjAwMDlCOTkyQUQzNkM1RTdBQjY2MjlDRjQwQzhDMjcxOUUwNkYKKzoxMDhDMzAwMDBGMzYzRUY4QTNDOTUwRUQ0MzE2QkE3NjMyRTBFRjBDN0EKKzoxMDhDNDAwMDEyMENGMDcyRTY4MDRBRjE0M0E2RjlCNDc5MjAxRjZCNEEKKzoxMDhDNTAwMDE5OTcwQjc1MkYzRTYzQTlDNEQ5MzVBQzk5OEI3RURENkUKKzoxMDhDNjAwMENEMjFGMzNCQkRDMjY3QkIyMEE2ODlGMkI0OUVCRjAyRjMKKzoxMDhDNzAwMEJENkEyQ0FGNjdGNzdFQUE0RTIwMzZCNkUwN0FBQ0VCMjEKKzoxMDhDODAwMDhDMjk2RkI4RkM3RDhDQkZENDMzRUQ5RDVFMTlBRjg1MDgKKzoxMDhDOTAwMDcxN0NFRTc1QTY5QzhDNDc3MUM4QkM4MDIxNzZBNkMxRkMKKzoxMDhDQTAwMDlDQ0Y2MDhBNkIxQ0IwQUU2MEJFMzM3NzI4MzRFRTM1NDMKKzoxMDhDQjAwMDFCRDU5MDE1RUFDRjRDRTY3MURGRjc5QTgwRkU2MzY4MEEKKzoxMDhDQzAwMERFNDEzN0MwNkIxRUUyN0E2NjBENTM0MjM2RjhGNUYyOEMKKzoxMDhDRDAwMDFEMUIzNDVDMEZFQjg1N0M1OUExMzAzRkYyRjdCQjc2NEUKKzoxMDhDRTAwMDRGMEVGQUVCQUIxRkIxMTM3RUQ3RUNCQ0Y5OEZEQkUxNzMKKzoxMDhDRjAwMEJCREVFNjc5MjlEMUZFQjE0M0YwMDVCNENGNkM0OTkxRDIKKzoxMDhEMDAwMDc2REU2RkZFNUUwRUYyRkZDQzlGODI5RjBCRjM1RDkzQ0IKKzoxMDhEMTAwMEM4N0VCMTI0MTdFOTk1OTFBMzNCMjJGNUQ2NkNCQTMzRUUKKzoxMDhEMjAwMDlGRDcwMzNGMTlFNkJERTI2RTk1RTZDMTlFQjU5MkRFODAKKzoxMDhEMzAwMDgzQjU5RTRFNzI1OUUwNzM1NUVCOEIxNjRCMjFDQUU5RjEKKzoxMDhENDAwMDdCN0I1NEE4RkYwRUMwQUE4M0YwMTUxNDc4QjQyMEJFMTQKKzoxMDhENTAwMDk2RTNCNzE5RkM5QkY0NTI2MTc3RUIyNDQ3MDIzOEJGQzYKKzoxMDhENjAwMDFBOTNCMjdDMjFDOUY1M0UwQkFFRUJGMjYyODVDNjMzOTUKKzoxMDhENzAwMEIxOThEQkIzMkI3MjNDMzc1MDFDRjk3RUFCMDdFNTE0N0UKKzoxMDhEODAwMEZFQTg3MjFDRTA1N0Q1OTk3QTU2NjMzQzk3RkREMjRBRUIKKzoxMDhEOTAwMEYxOTFGQTU2QkJDRkVFMjJCRkMzQjcxRkM3QTczMUNEQTMKKzoxMDhEQTAwMDAyRjg1OEE3NzM3OTUxMkVGOEIwNUU1RjcwMzlGMjBENTIKKzoxMDhEQjAwMDk0OUZEMDcwN0ZDNUM5RTU2MjVEMjJFMDlERUI2MzlGMDMKKzoxMDhEQzAwMDA5RkFGOTA0N0YxQkM1REJDRDk4MTBENUJGMjJERTQzMUQKKzoxMDhERDAwMDNCQkEyQkQyNkVCNzg5QjU2MzlDMDVFQjhGOUQ4MDc4MkIKKzoxMDhERTAwMDRDQkU3NjMxOEVFRkU3MkFBRDY3OThGQ0ZENjU2OEU3RUIKKzoxMDhERjAwMEZENUMyRDQ2RkY3NkM1RERDNzY2NzcyMEJDQUZDODhEMEMKKzoxMDhFMDAwMDREQUVGOEM1MUY0ODZGREMyMkU4REY4QkY2M0VFQTExNTUKKzoxMDhFMTAwMDgwRjdDMTczNTEzMUQ3RkIwMTk1Qzc3RDE2MDk3QzQ5OTUKKzoxMDhFMjAwMDNFOTBFNTc1Nzc5Qjc5RkNCRENENEE3NjRDNURGMzlGMEUKKzoxMDhFMzAwMEE4REQzQTY3NEYxQUNBREZCQTY3Q0RBNTI4QTdBRjE1RDQKKzoxMDhFNDAwMEUzNUVEOTlDNUQ3MTAyRjg2QUE1MzlDMUFEQzBBQjc1MEUKKzoxMDhFNTAwMEMxNzkxNjg0RDc2RDUzMDg4RTdDOTc5QTgzN0NGQTUxMUEKKzoxMDhFNjAwMEVCQUY1Q0M4M0ZFRkRBQzNBMzUxMUZGNTZEQjA3Qjc2NjMKKzoxMDhFNzAwMEUzMDQ0NERDRURBM0Q2RDFCQjMxM0VCM0NBRERFMzU0RjkKKzoxMDhFODAwMEEwN0NENTZEQTM5MjUwN0VCRkU1MEU1QkIwRkNBRENFNEQKKzoxMDhFOTAwMDVDMTNDMjNFQjdCQjAyNjE5RjM2OTFFMDhGNDA5NDc1NzAKKzoxMDhFQTAwMDBBRkYxM0Y5NkRCREMyRTlCQzZFRUYzMUNCNDhFOEVGQTQKKzoxMDhFQjAwMDRFMzFERjhGN0ZGRTg3N0NENDU3NzUzOTNERjlBODU3MzcKKzoxMDhFQzAwMDgwMEZGMjMzMTFDRjRGMjlBNDhGRDdFRjU1N0RGNjA5Q0MKKzoxMDhFRDAwMDExM0U1ODhGN0MwMEVCNkVBREUwODNGNTA3N0VGNTFERUIKKzoxMDhFRTAwMDVDMEZFQjkxRkVERTgxN0MwNDdDN0E5Q0RFRUZERjM1NEIKKzoxMDhFRjAwMDlCRjFFRjhGMjM5RjQ4M0QwNjcwQUIxOUUzNjkxNjAxODQKKzoxMDhGMDAwMDQzM0YwOERGODVGODlDNDRFNUQ1QkMzQzU4NDhGMjk0QzMKKzoxMDhGMTAwMEY1NUFEMEVFQUNFRjMyMDc3QkEzRjY3Rjg2QTJGMzc2NEMKKzoxMDhGMjAwMDQxQzc5NUNENTY5MkJCREJDNUJDN0JFRjdFRDY4NTc0MjEKKzoxMDhGMzAwMEZDRjhFN0M3NUVDMEZEOTJCQUZEQTBBREY1NDFENjg1NEQKKzoxMDhGNDAwMEMwNEIzREUyQzE0NUYzMjBGQkEyMUVFN0VEOEFFMEExNDQKKzoxMDhGNTAwMDlGRkZDNTdBQUM2NzdDOUU3MkRFRjU5QUMwODMyQzE3QTIKKzoxMDhGNjAwMERGM0YyQ0Y4NjYxRDEzNzgzQjMwODZBRjNGQjFERTcwRDMKKzoxMDhGNzAwMDNEQTM1Qzk1RjMwQjI0RjFFRjI1OUYxRTJFRTY3QTYxNEQKKzoxMDhGODAwMDhGNzhBRTAzQkVGMDE0MTJGRkY4MkM1MjRFNDBEMUM3QkEKKzoxMDhGOTAwMEZCNzY1MUZDNDdEMjRCOEVGQkI1ODgzRUYxMjUyNjQ1MkEKKzoxMDhGQTAwMEU4RDg2QjYyQjU5RDgzQzQ0REJBMDRGRURFNkUxQjk2OTUKKzoxMDhGQjAwMEQzMDU3OEZCMDhGQzJDQjRBNzkwNUZCNUE4RkUyNERGOEUKKzoxMDhGQzAwMEM4RkU2NjNFQkRFMDRBOUMyRkI0MUZDNkY2NjVCRjZGNjMKKzoxMDhGRDAwMDA1RTMzNTZDRTcyREM2RDcwN0YyMjdDQTRGQjkyRTY3RDAKKzoxMDhGRTAwMEI2MkNCQkIyQzg4NUY1M0U3NjhFNDIzQjQ2QzhCM0Q3OTkKKzoxMDhGRjAwMDhBRERGNEJEMEZFRDA1RjhERUQ3QTU1MEZDRjk2REUxNzMKKzoxMDkwMDAwMEQ3QkZEREY2MkJEN0NBMjgzQ0JEMkFDNjJERjkwQzdGNjkKKzoxMDkwMTAwMDMwMkUyNUM3REI5REM0RTNCOUIxRTM5NjcyNDg4RTdCNDEKKzoxMDkwMjAwMEU2OTZFQkFFQzRGNzcyRkM5MjVGMjU3RjRBM0M0QTNFNUYKKzoxMDkwMzAwMDY1NzdBNTkyNUQxM0NCQUZDNDZCNTJBRkFBMDY3OTRGOEIKKzoxMDkwNDAwMEZBRjFGMkFDNEYyRDAxQzdDMEY3QjFCMEI0ODdERUM1NUQKKzoxMDkwNTAwMDM4MERDQThGMjdENTEwQzk4RkQ2RjRFMzc5NTE3QTFFRkYKKzoxMDkwNjAwMDdFMUNEMTdBQTc3OUMzRTVFRTRBREM3RkREQUI3OEQwRjAKKzoxMDkwNzAwMEU0ODlEMjJGRjc2QTUxRkE0NURBMDUyNTI1MjMwOUVGNEQKKzoxMDkwODAwMEY1MjlCRTBGOTA4RUVCNEVGNUNDNzZFOTExM0I3NERBRTQKKzoxMDkwOTAwMDY3NjEzNTAxRTM1MjA3NzJCREQxRkE3NERERTlFM0M0QkIKKzoxMDkwQTAwMEZGNzVBQzY3MzNGQTUxMkJFRUZFQzNCQ0M5QzhFNzRGNUUKKzoxMDkwQjAwMDlBNjk3RjY2NDVEQjJDMEJEQUY1MzczRjdFNjMyOUYyMzAKKzoxMDkwQzAwMEQxM0JFREEzNDhBRTdGRjBEOEE0NjJFMjJCRTY0RUJCQzUKKzoxMDkwRDAwMDE2Rjg3RkQ1NjMwRjVFQkIxNERFQUZFQTUyM0QyNERGODYKKzoxMDkwRTAwMEExMUQ1Q0I3MkI2RTJGNjZDODM3RUZEQTdCRTc5NUEzMUYKKzoxMDkwRjAwMEZEN0U4N0VBNDZGQjdERUFFMzkzRUVDMkZBNTM5RDIzQTkKKzoxMDkxMDAwMDEyNzExRUJFQzc5MjA5RjY2OTA5QTQxRkE0RERGQjk2NjEKKzoxMDkxMTAwMDkwOTMyRDY2Q0UxNzM5MjU3QzFEQTU5NjcwQjk5MTVBNkUKKzoxMDkxMjAwMEMyRjk2NjY2NEI0QjNFRUVBN0Y3RUQwMkY5OENGQkNBMUYKKzoxMDkxMzAwMDE2QkQzMzhDRkQzRDM3OENGQzhCN0E3MDg3RDI4MUVFNjcKKzoxMDkxNDAwMEE3MTQ2RTk3RDU1QTk4MkRDMzRCRUY2RDE5RjBGRTQ1QjUKKzoxMDkxNTAwMDczQ0ZFREE4NDc1RUJDREQ1OUQ0OEMwMzUwQ0Y5N0FFREEKKzoxMDkxNjAwMEU0RjYzNERGM0Y0Q0U2RkQ0QkJDQzk3MTY0OTc3MDdFN0EKKzoxMDkxNzAwMDhGNkQ0RjdFREY4RDdFMDRDQTUzMzFGRTBGNUE5RkJDMjgKKzoxMDkxODAwMDE2RjVFMDA3N0I0NjI3RTFCQ0RGN0ZDRURFOEVGNkQ0MDYKKzoxMDkxOTAwMEZCNjYyRTE3NjVGQjYwRTdCRDE3NkRBNzgxNUQ2NzgwRDUKKzoxMDkxQTAwMEMxOEUzM0MwQzBCRkVGMTlFREMyNEQzNEFFODkyNTYwMEEKKzoxMDkxQjAwMEM3OEQ2M0ZENzY5Q0U0Rjc5QTBEQTMxM0EyRjMwODYyQjIKKzoxMDkxQzAwMEVENzc5NjE3QkI2RjMzMzk4MTBEMjI2RkU0RjM3NDEzN0IKKzoxMDkxRDAwMDIwMEExOEY1MkNFRTExNDJCRkQ1RjE1RjNDRDM4M0Y2N0YKKzoxMDkxRTAwMEZFMzZBQkRCMEFGMzdDMEZGOTFGRjdBNTlFNTU0M0I4OUIKKzoxMDkxRjAwMDBGODNCNjM5QUU4N0Y3RjYxNTg1RDA4RjVDRkQ2NjYwQjQKKzoxMDkyMDAwMDM2QjY3RkZDODEyRDk0Njc3MDEzRDg5N0MzOTQyOEJCMjIKKzoxMDkyMTAwMEY5QTEwN0FFNDVGNjNGRTMwOTZDQ0U4MEVGQ0VFQ0UxNTUKKzoxMDkyMjAwMDc5MTE1MEVDODhCMTk3NUZDOEQwRkY3NTdCRjk1MkVEOEEKKzoxMDkyMzAwMDY0MTk2RkE4MjkxMUY2QjI4Nzc5MTBDRjEyQkZEMjZGQzcKKzoxMDkyNDAwMDNBMEM3QzUwRTY4REUwRUI2RjREQjU2NDI3OUY2RTBBQkIKKzoxMDkyNTAwMEQwRjMxM0U1RURGQkE3MjJGRjNBMTMzQ0JCRTFCM0RGRUMKKzoxMDkyNjAwMDc2M0RBODY2MjI5RDBGMTQ5RDQ3QkZCN0RDOTFFMEM2RUUKKzoxMDkyNzAwMDc1RkJCN0E2OERCNEY5NzhCQUE5ODE5RTkyQ0UzMkRFN0QKKzoxMDkyODAwMDM2RURDMDExRkFFRTZGNURDNTA3QTdDMjc3ODcxQzA5REUKKzoxMDkyOTAwMDVDRkUwRkQ4RUZFMUY0OENDRDAzQjk3NUMzRTQ2MUY4M0YKKzoxMDkyQTAwMDVFQ0VFQkMzM0IzODVERTVCODNGREM3M0EzMEJFNzc1REYKKzoxMDkyQjAwMEU0MjdDOTA3QTcyMDNERTMxM0RDNjhFRkFEMTFGOTFGRDAKKzoxMDkyQzAwMDI3M0JCODNEN0RDQTk2RjBDNDVDQ0MxQkQ5QjEyODhEMzQKKzoxMDkyRDAwMDgxOUNCREU5QzhCN0FFQzVGN0FCOUY1M0RDRTgwNzc4MDIKKzoxMDkyRTAwMDlFNUJFMDQyRkZGNEJGQjQ1RTk3MUI5RkYwNUQxOEM3MjIKKzoxMDkyRjAwMEEzODU1NDk0NDdFNTczMThFRDQ3OTU4NzM1QTZFN0QyQzMKKzoxMDkzMDAwMDU2MkZGMUNCOTREMzVBMDhGMzQ2M0VDMjdEMkE4Qzg3NjAKKzoxMDkzMTAwMDlDOEZBMzc4MDgxM0ZCNEYzN0ZEOUFDNzUxRkFGRDVCNkEKKzoxMDkzMjAwMEUxREY0RDE1RjNFRTJBNDk5MkZCMEFGNDdFNjYxOTdGQzAKKzoxMDkzMzAwMEZGRkU4RTY3RTY2MzdCMUYzQzY2NzZFM0I4RkZGNjk4MTgKKzoxMDkzNDAwMDk5REE1RjBCN0U5OTA5QzY3QjZBMEZGNzc3RDY3NjJBODIKKzoxMDkzNTAwMEU0Mjc3RkIwMDdGNDM1Q0NBQjZFODNEOTY3NDkxOEM4RDIKKzoxMDkzNjAwMDg3MzNBMUJDRDcxMUUxQzNCNUJFMTBGMTM3MTNGQzY4MzgKKzoxMDkzNzAwMDgzRkYyRThDMUNDODhGODlBQzczMzNFMkUzNUZFNUNCOEYKKzoxMDkzODAwMDVGQzRBQ0ZCN0U3RTFDOEEwRjA0QkU3MDFEMjMzRjRBNjcKKzoxMDkzOTAwMDdBQUZFREUwRkJFQTQ5OUQ0NTk1Qzg1NzkyRkU1MjRFRTMKKzoxMDkzQTAwMDA0QUI1ODAxRUFENTE2MEIyQkMwM0M5Q0EwMjlDRTgzRjgKKzoxMDkzQjAwMEVCN0I4MTQzMzcyQjgwODc0NTI5QkRENTI4NEUzMzI3NEEKKzoxMDkzQzAwMDcxMzlBRENFMzRGOTRDQTg1RjVBQUMyNDA3NjJFNUM4QjgKKzoxMDkzRDAwMEVGODQ1QzlGOEYzQzBERkZERTJERTE3Njg0OTkzNTkwMDQKKzoxMDkzRTAwMDFGMjI5RkEwNzdCMjUxN0YyRjg4NEZGQUJCMEU1NUZFRTgKKzoxMDkzRjAwMEZENDBFRDUyMERDNkJGNjA2QUQyRURBMzNDOENCRDc5MzUKKzoxMDk0MDAwMDYwRkQ1MjBERjg3NzQxNzFEMkIzMjMwMTdFQUJBNDhFN0IKKzoxMDk0MTAwMEMzMTM5MzI2OTkwMTZFNkVBRTVGNUEwREY1RkY1OUUyQTQKKzoxMDk0MjAwMDdCQkQyNEFBMUZEOTJFQkNGRjhGMTI4MDM3OEQwQjlDQzkKKzoxMDk0MzAwMEMwNjdCREM1NDE3MkZBMTNBNTZGQzJDNkRDNDhGREQ3MkYKKzoxMDk0NDAwMDE0RjZENjZGOTUwOERDNkI2NjM5NjhERkJENUIyMkM3MDIKKzoxMDk0NTAwMDNGRjgzMzZGOTJFRkVEOTI0MURFQUY2NEFDMERFMzJBM0IKKzoxMDk0NjAwMDJCODNCRjNCQTE3MDNGQ0M2RjAzN0E1RDJERjg2QUE1QkIKKzoxMDk0NzAwMENEMTEyNjdGQkVERDdDQkE5RkRFQzg0NzlFMDQwREU5NzQKKzoxMDk0ODAwMDNBNUZGMEQxRDU1QUY4MDg3RTNGOTZCNUJBNEZEQUM4QTAKKzoxMDk0OTAwMDg0REE3MTIxNzk2OEY5MEQwQjhGOUQ5NEVEMDFCRjdDMDEKKzoxMDk0QTAwMDYyODZGOTAyNUYyQkMwOUUxQjYxQzkyODgwRTQxQTkwNzYKKzoxMDk0QjAwMDVGQ0FDMURGRkQwM0RCNkQwOUIyNUUzQkQxQTFDNjhEODIKKzoxMDk0QzAwMDdDQTZCMDgwRTkwMjNDRUJFMjVEMTMzMDZFNTIxNzlGNDAKKzoxMDk0RDAwMDEzNDJCRTZGN0NGNkUzRTNDODVFMzc0QkZCMjU1MDQ2NzQKKzoxMDk0RTAwMEZDN0U5QjlCQ0Y4NzA1Q0E4OTFGNkYxN0ZDRjg3RTEzRjQKKzoxMDk0RjAwMDZCQzg4M0E1Nzc3NTRGOEY0Qjg3NDE5RjlFMUZDRUM3NDMKKzoxMDk1MDAwMEY1RkU2OTRFMjA2RTEyRkFGOTNCNUFCMjFBODE3RjNFN0YKKzoxMDk1MTAwMERFNkZGNUNDODVGQUE3NDJDRjUwMUM2RTlEQjA0N0Q5QkYKKzoxMDk1MjAwMDYzQTk2MkREQUJFMTE5NTBBRjNCNzdFQzZFRDQyRjI5MTQKKzoxMDk1MzAwMDkzMzg1RjlEQ0UwREU3REM4OTcyMjM5N0ZCM0Y1MDhGRjgKKzoxMDk1NDAwMEYyRENFNjZDQkEzQzE1RUI5RERFQjcyNUVGMjZBMDlGNUEKKzoxMDk1NTAwMDU1NjM0MTY3MTIzRDk5MEJFNjdEMDVCNDVEMDZCMDE5NzAKKzoxMDk1NjAwMDYwOTVGNjczNDM0NDJGQUNFNzQyN0RBRkRGOThDRUUzQkUKKzoxMDk1NzAwMEVEQ0M4RjcyNDVEMjRCRDI2MTAwN0Q2MDA4NjhBRjlBMDYKKzoxMDk1ODAwMDZDQ0M4Q0UzMUZDQjc2Qjg1MTdGNDgzQUJENkYwMzNDNUYKKzoxMDk1OTAwMDYyRkNDQzA2Nzg4NEY1M0QwQjgzMEUyNTg4NEYxRTZGNDgKKzoxMDk1QTAwMDY5NTQ3QTVCOTMxMUZFQjk0Mjc5NzMwM0Y1RTBFMzE2Q0YKKzoxMDk1QjAwMDQ0NzlFRDhFMUI0OUZFNDhCOUEzQzM3RjgzQzk5REFGOTMKKzoxMDk1QzAwMDFEMzdEQTMxNzM1MEI5MzM2RDkyRDA4MzQ1QUNFODAyNjAKKzoxMDk1RDAwMDM3MTA4OUJFNkJDNEI3QjNENDFBNURDMzcxQTdEQTNDMjgKKzoxMDk1RTAwMDE4NEY2QjdDNjQxNEU5MUJENkZBMDcxNjVEOEZFRDQ4QTMKKzoxMDk1RjAwMDI2N0VEOTlDQUIxMkRFNkZFRTUyMjhCRjcxNUU1NzI2RDUKKzoxMDk2MDAwMEQzQTE2ODZFNTczMjNENURFNzMyRThGRDA3NEZCQzU0ODkKKzoxMDk2MTAwMEMyRTUxMkE3Q0JCQzlGMERBQkEyQkNBMjlGOERBMUE3OTgKKzoxMDk2MjAwMDFDNDdBM0UwQkI1OTZBNjE2NzE4RUQwODA3OEMwM0UwOEIKKzoxMDk2MzAwMEM2MTdCOURFNkFCQzQ2QTVCODI2NDMxMTlEODZDNEU0QTgKKzoxMDk2NDAwMDNGN0U0NzNCQzU3RkZDQUNERkJFNTcyRTUwOUM1NjRGM0MKKzoxMDk2NTAwMDQwQkFGOEJCNTU4NkZDMDNERTQ2OTBFM0Q5RDY4Qzc4MzkKKzoxMDk2NjAwMEI2QTY5Qjk4M0U4OEZENjExNTc0QjJFQjcxNEM4RkYyRTMKKzoxMDk2NzAwMDNCQjRFMEQ4RUY1NzYwM0NGNjVCNjY0RjA4Q0E1QkVDNDIKKzoxMDk2ODAwMEFFRERCODlFNThEMEQ3ODNGRUMyNjJGMTVEOEY5REYzRTgKKzoxMDk2OTAwMDQ3N0M0MTkyRTFGQjJEQUVEOUREQzg2RjhCN0Q1Q0VGM0QKKzoxMDk2QTAwMDM4M0RDMzBERkQ1QkQ1NzU2NjY0MzIxNkUwRjZBMkU0NjUKKzoxMDk2QjAwMDA3RTI0QkU4Rjc2QUJGNDJGQUY1OUFDNTUwMUVENUFFRUQKKzoxMDk2QzAwMEI5RTI1MzkyRTNFNjBBQTM5RDY5RjUxQkVCN0Q2RjkyMjUKKzoxMDk2RDAwMEQwM0I2M0Q5RDg2OEZBNDdGMEVFRjBBMTlEN0VDNkU3OEIKKzoxMDk2RTAwMDI0M0UwNkVERkVFMzBBODBBRkVEMzYzMzlDQUYzNThFQTcKKzoxMDk2RjAwMENGRUIwQzYyMEFFM0EyM0UzNTg0RjE5MjJEODgwNzc4MDUKKzoxMDk3MDAwMDlGNTA2NkM0NjdBMkNGODhCRkU0Mzk0NjdDQTRGQThEMTcKKzoxMDk3MTAwMEYzMUZCNjc4QTRBMTNDMjM3MDk5QTEzQ0IzRDY2QjgwMEIKKzoxMDk3MjAwMEIzMUJDQTBERjU0NzZDQUMzMkMwQjlDMTJCMERGNTQ3NjAKKzoxMDk3MzAwMEI1MkYzNEMwQTNCNzJEMzVENDFGRDNCMUQyNTAzRTM2ODgKKzoxMDk3NDAwMEI0RDY1MDNFNkU0RkEzMDExRURGRjk1RDQzRkQ4OTVEMjcKKzoxMDk3NTAwMDlCMENFNTQ1RTE3QjBDRTVDNUREM0YzMEMwOTM3QTFFRUYKKzoxMDk3NjAwMDM2RDQ5RjdDNjJCN0ExN0M0QUVGNTM4NkYyQTlBN0Y2NTQKKzoxMDk3NzAwMDFCRTA2OTdEQkYzMUQ0OUY3MUVFQTgwMUFFNjQyRjE5NDMKKzoxMDk3ODAwMEVBQ0ZCNEZEQzEwMENGNzJGRkQ5NTBGRkYyRjQ3NzBEREMKKzoxMDk3OTAwMEU1NTdFODFGMTlDQUFGMkEzODZCRTRENzM4MkVGRkU2MjEKKzoxMDk3QTAwMDc5RkU2OUY4NEVDOTBBQkMzQzA5NkQwNEY1QjQ4NjdDQTMKKzoxMDk3QjAwMERCQjI0QzYxQzkxODRGRUY1RTY0NDMzOUYwOEE5NDQzQzEKKzoxMDk3QzAwMDgyMEY5RjQ3RkQ4Q0Y1RjM1ODBFQ0FCMzU5NkE0NTE4QUUKKzoxMDk3RDAwMEQ3RUQ5OTJFODVENjdGQUNCRUQzM0VGMkZCMzA5RUM3MjcKKzoxMDk3RTAwMDdFQTU3ODMwQ0U5NjAwNkE0QjhCRUEzRkQxNjcwMzQ3NUYKKzoxMDk3RjAwMDMyMDIyN0NGNzExQkUwNTQ3RkJBQTFGRUIwQzVCQUExRDcKKzoxMDk4MDAwMDNDMjM1MDYwMjhDRkFDRjUxOEUwRUM4NjMyNDNGRDExQzQKKzoxMDk4MTAwMDFCN0QwNjM4MzczOEM3NTA3RjU0QkJERjAwOEZERUI2NUMKKzoxMDk4MjAwMEQ4NTA3RjRDNDdDMDUwM0UzNjU0NkIyODFGQjdBN0MxNTUKKzoxMDk4MzAwMDAwOEZFRkRDNjhBODNGQjEyQjY4MjgyRjBBQjcxQkNBM0UKKzoxMDk4NDAwMDhCQkJCNzE5RTA0OTNEMUQ4NkZBOTM0Rjg0MENFNTUzNTUKKzoxMDk4NTAwMDdBRjcxOENBQTc5RUVBMzRDMEQzRkFCQTBDRjU2NzlDMDcKKzoxMDk4NjAwMDBCMUJFMDRBRjZBMkExRkU0Q0RCNkIwNjc4OTZGQjBEQzMKKzoxMDk4NzAwMDQzRkRDQkQzREYzNjk0NUZBMTdGNjAyODk3RjZDRDU1QUIKKzoxMDk4ODAwMDA1OUYxQURGMEI3QjY3OUVFNzFGODZFRjgzNTUzRTg2OTkKKzoxMDk4OTAwMEZDMTFEQ0FGNzg1QTc0QzYwQTRCNDc5MjdEMDE3MkJENDkKKzoxMDk4QTAwMEQ3QUVBMjdERTRBN0I4NTExMjI2MDgwMjVGMjY4MDEwMjkKKzoxMDk4QjAwMDQzQkU0MjU3QTE4NkUyNEYyOTE0RjcyNUQ1QTQ2M0JFQzMKKzoxMDk4QzAwMDBGRDgwOTAwMjQ5OTcyNzNEMTlFOEU4RkQ4NkQ1OTE3QzUKKzoxMDk4RDAwMDhBMkZERDZFMkIyRjY1QzRFNzM3OTcwNjI2OTZBNkEyNDIKKzoxMDk4RTAwMEJGQjI2RjM2REFFRDM3QjNFMDY2MUMwN0U4QkQ4NDVFQzEKKzoxMDk4RjAwMDVDMUY3NjYzM0M0MzNFQUZCMDAxNUVBMkZBN0JEMUJFRjMKKzoxMDk5MDAwMDJEQ0I3QjExQkZGRjBBREI2OUFBREZERkFFODg3MzI4OEUKKzoxMDk5MTAwMDMwQkZDNkE4RjZFRjA3QkY0MjAzQkI2RTVCMTNBQzFCOUMKKzoxMDk5MjAwMDcwMTg3RkQwRTQyNkY4QTFBNjc0ODI3RkQ0QTREM0IzQTQKKzoxMDk5MzAwMEEzQTk4MDlFMEYzNzc5QTg3QzQ3NTMxOUMxM0I5QjdDMTQKKzoxMDk5NDAwMDA0ODc5QUU2RDA3Mzc3OTM5RkRFM0ZENkI0OThFMDI3REEKKzoxMDk5NTAwMEMwOEZDNkU3MUVGMEFCRjFGOTE0RjhDNzU4QkUxN0ZDNkMKKzoxMDk5NjAwMDY1ODQ3RkQxMTRBNDY3Njc1MzNCQkRERkRGQjQ4REUwMEUKKzoxMDk5NzAwMDAzNEQxRDA0RkZCMjI5NDRDRkFFQTYzREY0RkM0RDUzNjgKKzoxMDk5ODAwMDI3OTUxRjZDRUEyMkY4NTA1Mzk4RTA3MDUzMzdDMTQ3NkYKKzoxMDk5OTAwMDlCN0EwODNFREU3NDgyRTAxNzlBN0FFOUQ5REQ3NDhBRjAKKzoxMDk5QTAwMDlFQkY2RkVBQTNGMjk3OUJDRTExRkNBMTg4RDdBRTI5ODgKKzoxMDk5QjAwMEU1RjEyMjg5MTcwOTMzNTY0REZDMjBFREMzRjk2OEU3MUMKKzoxMDk5QzAwMDIzNzM5NDk5RkY2NkIwRjM2M0VDRUQ1ODdBQzg3RUNDQUMKKzoxMDk5RDAwMDU1MTgxMzg0RTdGMEZDREQyRDUxN0VENkFEQTJCRjJEQzYKKzoxMDk5RTAwMDcxMkM2ODA3N0U2RjM2NzFCRkI2Mzk4OTUxOUUzNTEzNjkKKzoxMDk5RjAwMEY2RUIxQUMxOTcyQzg1REJBREFCQzVCOEQ2ODhGNTMwMzAKKzoxMDlBMDAwMDA5RjlCMzgwRjhGM0U1QUZFMzU3NDhCRkYxNEM2MUEwMjMKKzoxMDlBMTAwMDg1RjgzM0RCMTQyNEZGRDkxMUNBNDdGQjM5NzU3QzYwMDQKKzoxMDlBMjAwMDczRTkyNERDNkZCQ0U5MDVFQUNGRURBMTdEQzc3OUQ2RTcKKzoxMDlBMzAwMDcwRUE3NTE4MUY3OTUxQTU3OERFNTBGREQ1OEJGQ0YxQzEKKzoxMDlBNDAwMDIxQ0IwRjdEOTA4NUY2RjY5QzJGRDUwMEUyRTkxNUIzNkEKKzoxMDlBNTAwMDczMzFDNjBCQjY5NzcyRkY3NDdCQTlDOUYwRkNDOUY4QzUKKzoxMDlBNjAwMDQwMDc4RUU3NzM2N0MzMEQyNjE4RkZFN0QzMzczQzcxQjUKKzoxMDlBNzAwMDZCNkVDNDlGQkUxQTVENTJGMDgzMTYzMERENENGOTg5QkYKKzoxMDlBODAwMENDRjc3QzJFMzQ3NTBEMTg1ODA4NUZDNzgyRjRDQzJBQTkKKzoxMDlBOTAwMDBDRUNDMkY5MkUwMTQzMUNFMTQwQjkzNTY3QjA3OUM1MjEKKzoxMDlBQTAwMDhFNkJBRjE4RDc1RTMxMUVGOTdDNzE3Q0UwNjk2Q0VGNkMKKzoxMDlBQjAwMDczQTc4RkM2RjVDQTk0Q0JGMzcxNUU3MjVDNzExMzc0OTEKKzoxMDlBQzAwMDcxOUVBMTZGMjc4RUVGRjNFNzNFM0RBOThDOEFFMDVGODAKKzoxMDlBRDAwMEZBRUQ5QjJCNDU1RUM5MDY4NUM3RTVBNEJEMjZGMjUyNkIKKzoxMDlBRTAwMEE0REY1MTczQkIxMjQyN0I3RDE5RjgzQkI4QkZGNEE2Q0IKKzoxMDlBRjAwMEIwM0ZERkI0NzNGRDdDQTZDMTVDODA3NjdEOEQxMkU3M0MKKzoxMDlCMDAwMEMxN0RCODMzMERGRkU1NDA3NzFBRUEzM0RDMjc2OUMxMjAKKzoxMDlCMTAwMDlDMDMyODZGQjk0M0ExN0NFRTFBNjhDNzA0RURENDYwOUEKKzoxMDlCMjAwMDIwMTBCRkJCNEIyMUZFRkI2MjdDMkU4REFGMDZDQzNGQ0QKKzoxMDlCMzAwMEYyQjM1MkZBNzI3MEJGMTRGOEU1NDVBNEMzREEyOTZBODkKKzoxMDlCNDAwMEQwMDJGNkYwMkJBNjUwQkU0MkZCRDIzNzU5MTQxOEU3Q0MKKzoxMDlCNTAwMDlBMTRFMDkzOTE0M0YzQzM3QTcxRkU0MEJFMDczRUZCMzMKKzoxMDlCNjAwMDAzQjZGN0I3NUY0RjJFQTAzOEZFQTEyOTNBRTJBREM1ODQKKzoxMDlCNzAwMEM0Q0YyMzA1N0ZBRjdBNzhCRTBCMTdENUVBRDRGMTE0OTIKKzoxMDlCODAwMEE3NjQ5QUM3ODM3MUE2NzlFMkZDQ0ExMTk1NkREQzM3ODgKKzoxMDlCOTAwMDg4MUNGREJCQTBEQjJCRTlFNjM5MjE2QUQ3Qjg1RkYzNEYKKzoxMDlCQTAwMEIxQTBFM0M3QTJERUJDQTMyRjY2RTNGOUFCRjVERDY2ODcKKzoxMDlCQjAwMEIyNDc1ODQ5NkZBMURGMzlDODdDMzY2RUZENzY1RTE0MTYKKzoxMDlCQzAwMDdGRDc3N0JEQ0RGMzM1NTg2RjYxNzQ3RUJBNkIzMjZGMzYKKzoxMDlCRDAwMDU3RjI5MzZBNzEwNjc2MzlBMkM3RDdDRkRGOUYxMTdGRkMKKzoxMDlCRTAwMDI3MDI3RjhGMjJGRTNFODlGNkY2N0NBQjlFNzAxRDNDREQKKzoxMDlCRjAwMDdCMDE0NTYxNzgwNjdFRUFBNjdDMjM5OTc3QjQ4QUY5RDEKKzoxMDlDMDAwMEU5QjkwNkQ4MDFGOUQ5MUY3Q0MwODJGODVGQ0IzQUU5REYKKzoxMDlDMTAwMEZERkFCMjFCNzMxMEFFNjc3REQ1RTlFODRGQjQzNzNGNEMKKzoxMDlDMjAwMDlGMEVBMzVDQjRFRDgxNTkxODlGNUQxODVBRjEzQzNFMUMKKzoxMDlDMzAwMDE3M0NBNjlDNDRGRjE1RDY4Nzc5MzJDNjRGOTQ4NkI2NEEKKzoxMDlDNDAwMEUxRDBERkQyQkQ5NTZEOTlGMDdFQkVDQUU5QzE1RUUyN0EKKzoxMDlDNTAwMEY0MDBCRUYxQTk0OTAzRTcwOUVCQzEzOTk5RTZFMUEzOTQKKzoxMDlDNjAwMDc5QThBRTM5ODZGNTUwQjM4OUY5OTQ5NDQ4RkU3Q0ZGMDMKKzoxMDlDNzAwMEZBMjhCQkU1QUY5OUU4MEY2OTdEQjRGRjVFN0ZDODlBMEIKKzoxMDlDODAwMDg0NzQ1RUNCQjhGRThFQzQzRkE0REU2NkM0RTdCN0IwNzIKKzoxMDlDOTAwMDM4MEZENkZCNTBGMEY1ODdEOThDRjhGQTQzMDUxQzNDRjkKKzoxMDlDQTAwMDZGQzQ5RTY0Mzk4MTc0RUZBODg4RkVGREQwMTQyQTc1QjQKKzoxMDlDQjAwMDhEMjJGRDlDODdGMzdEMjE3RDkxOEU3MUIzNUI1MjZDNkIKKzoxMDlDQzAwMDFFMTVDQjEzNDMzOTdDMUZCNTVGQ0VCMzBCRjE5MUI4OTIKKzoxMDlDRDAwMEQ3RkQ2NjFFODc4QTFEOTc1MkY2QzIzRkQwN0VCMDVBQzYKKzoxMDlDRTAwMDU4MTBGNzM3NjA3REIzNTI1Q0Q3QzMyREI0QUU1QTEwMEQKKzoxMDlDRjAwMEI1MTgzRkFCRjJFQjgzQjVERjJBREFFREZFODJGQkMxOEMKKzoxMDlEMDAwMDQxOTgwRjlFOTcxQ0QwOEY1QkY0MTNDN0ZCOTE3QTA0ODgKKzoxMDlEMTAwMEZCMjMzOTkyQzYwQ0ZEQ0RDMjI0MTdBMENCMkI0RTFGQkUKKzoxMDlEMjAwMDhEQkZEOTk0NDg3MkU3RTMxMTgxNkFBNDk3OENGRjQ4RUMKKzoxMDlEMzAwMEZGQjAzQkY3RkQzQ0YyRTNDRkI3NjRBMTlEMEVGQ0NCMzcKKzoxMDlENDAwMEYzMTJBNzczRjlGNDhBNTkwRjIyRkM0QTY1MkVDNUZGNTYKKzoxMDlENTAwMEE1RENCREJBOENDN0NCQUU5NkYxQjE4QTk4Rjg1ODRDNDkKKzoxMDlENjAwMDVDODY1NTBDMUUyRjYzQ0M2M0M2N0VDN0IyMzcyNTdFM0EKKzoxMDlENzAwMDI4MUU3M0I0NDIyM0JBMDc4MUVFMTg2RjNFMkFGQ0Q0MjIKKzoxMDlEODAwMENBNzhFRTlGNzc0RTRFMjY3RTRBQkEyMjZGRDA3RDE1NTYKKzoxMDlEOTAwMEY5QkM0N0M0NTdFRjA1M0I4ODQ1QzVENUVGMjk2OUI0RTEKKzoxMDlEQTAwMDYxOUVDMTk2NDI4NUY2QkJFRUFCOEFBQjhEQ0U3M0RGNkEKKzoxMDlEQjAwMDNCQ0RDQ0Y3NTNBNzU3RUU0NEJDMTUzQTQyNTVBNEFFNjEKKzoxMDlEQzAwMDdEOUE4RUYzNTBDNEJDQzZCOTAxRUYyNjZDREEyRkUyM0YKKzoxMDlERDAwMEE0MUUxQjhGNEI1NTkzQkU5NkY0QkU1NDdERkQ5NDE2NjYKKzoxMDlERTAwMERBMTQ4N0YzNEU2MUI0RkU5QzFENzY5MkEzNkFBNzJGMDYKKzoxMDlERjAwMDhDMjlENzVGNEU1Qjc4MjdEMTUxRjMxNzYwM0Y0NzRBRDQKKzoxMDlFMDAwMEUzOTgwM0VBN0Y3RUM0NDJGRUZEMjFEM0NBOUY2MjNFRUYKKzoxMDlFMTAwMDdDREYxQjU2ODZGQjlFOURDRTRDMERGNTQ1RTcxNzk3QzQKKzoxMDlFMjAwMDU1RDNEMzM5NzUzNkUzNzFDRTc4MTMwODg4MjIzNzdCNDIKKzoxMDlFMzAwMEY0REY5MDU4RTJEQzU5QTdDMkJBMTlDNURCN0NGMTI2RTEKKzoxMDlFNDAwMEYwQzEzQTRERUNFQzBDMThENzdFODdGN0MxODlDNDcyOEIKKzoxMDlFNTAwMDdFMTVFN0Q5NTUxMUI4MUZENzUzMjk2QjIwRjgzRThCRDMKKzoxMDlFNjAwMEJGNzYxN0Y0N0I1RjkyOERGOEM0NUZFMTdGODA4RjkzOUMKKzoxMDlFNzAwMEI1Q0Q4NUYxNEQ5RkE5MzAzQ0M3REI2NjAxQjk1Qzg4NDMKKzoxMDlFODAwMDcxOTIzOEJFMjdDNUI4N0RFRjNGOTc0RkZERUY5OENDNTQKKzoxMDlFOTAwMEY3Rjk1QUQzN0QzRDc4NjA2NDQ4QkNCOUI1QkVGRUI4QzkKKzoxMDlFQTAwMDA4RjE1QjE2QzVGMzI0MUVBM0U5RTUyRTM1RDAyQjYwMUYKKzoxMDlFQjAwMDhFQTY1NzE5RDA2QjdDMzRCRDdDQ0FEN0ExRDdFRDk4M0MKKzoxMDlFQzAwMDVDMzY2OTIwN0YwNkFCRjQwN0FBNEJCODVFQzMxNEI5QjEKKzoxMDlFRDAwMDRBNkI3NjIxREFFQjQ3RTIzMjBCQTNGN0Y1MjQ1RjRBQUYKKzoxMDlFRTAwMDNFMUQ4NDNGMzcxQzQzRjk5MEE1QjkzMTdFNkE5RDE3MEEKKzoxMDlFRjAwMDQ3RkIyRDkyNUYyNTlGRkU3NTRBM0ZCRjdBQ0JFMUI5QTQKKzoxMDlGMDAwMENDRTE5Rjg1MzIyNDk2NUYzMTFFMTZDRDk3MzU0M0YyMDIKKzoxMDlGMTAwMDJGNzM0N0FGRDdGOTYwM0YyNDI0QTFERDczRUFCMUNFOTgKKzoxMDlGMjAwMDI4QkVBQzY5Rjg1NEUzRjJFM0MyOENCOEQyNDhGQzZFQTgKKzoxMDlGMzAwMDdFODVDMkRFODlBNjJGRkM3QkE3NDBDQzhGRUMxRThERDAKKzoxMDlGNDAwMEZDMkQ4OUM3NEJDNUI3Rjk1QkNEMDU2OEM3NkRDNkYzNTYKKzoxMDlGNTAwMDg5ODBBRjc2QzVFMzFCODY3MUFEODZCNzZGQzVGNzZEOTcKKzoxMDlGNjAwMEUyN0M3MEIwRDBDMkVEMkJCMTRFNjQ3QjVGNEVBQjdBMTkKKzoxMDlGNzAwMDA3RjlENjM5Rjk3NEZDNkFBOEY3Nzk5QTQ5NDdFNEI0MjUKKzoxMDlGODAwMEU5MkJGRjhERDZERDg5Nzg4NkRGQjk5MjdCNkExRkE1MjQKKzoxMDlGOTAwMDc1MzQ4NkUxRkVFMEU3MzcwNzQ2RTA3RUZEREQ0MEE3NDkKKzoxMDlGQTAwMDc3Mjg5OTNBMzRDQzQ0N0I1OUJEQzM3MDFEMDE3MkQzRDQKKzoxMDlGQjAwMEY5MzM5MENFREYzMzUxMUUyMkY4M0I1MzQ2MEFCRkMzMUMKKzoxMDlGQzAwMDI3RUFGNzUyRkRCQjJEREI2QzcxRDg0RkFFQ0RCRDNCMDAKKzoxMDlGRDAwMDhBREY2Nzg4RjgzQTFFMjNFN0ZCNjcyRDNBREE2NTdBNEQKKzoxMDlGRTAwMDE5RDdCRjBGMzZFRDk5RjZERTY4MUM0RkU3QjRGNzYwNUUKKzoxMDlGRjAwMDNDQzk3MzQzMkMwMDdDMUM1NzEwRDQzMTA1QzRGNkU1RDIKKzoxMEEwMDAwMDRDMDVDRjJGQjBDQjU4MjdGMjBEQkU2RjFFMUY2OURGNTYKKzoxMEEwMTAwMDVDQzZENzk5MERFRDE1QTA5RjZENTM1MDRGOEE5MjdGNjYKKzoxMEEwMjAwMDM2OTMxMjE4MkNERkU1OEUyOTFBRkY2RTEzQTM3MkRCMEMKKzoxMEEwMzAwMEQxRUQ3NDlFM0YzOUNGQTM2MERFQjM2REQzMzY4NkZCN0UKKzoxMEEwNDAwMDMxRjYzMDdGOUY5MkU3NTM1NjQ1QjU5QjMyMTdDNjFEQjgKKzoxMEEwNTAwMEM1MTdGM0YxMjQwMUM4MUJEQjZFNjBDQzEyQTQ0MzFDQUUKKzoxMEEwNjAwMEM1MUY2M0ZCOUQ5RjVBRDVBREI5ODZFNjkzNTg3RTYzQTUKKzoxMEEwNzAwMDgyREYyNERGQzg3OUQyQzk5NEE4NzNGOUQ1MjNCOTNEMEEKKzoxMEEwODAwMERDQjZEMUIyMEJFREVERjJCMjQ0QzJFRjY3Mjk1NTA5NEYKKzoxMEEwOTAwMEVDMjI3QTY1MjdGMDQxRDA4QUZFQjE4RDlFQkJDMUJGMEMKKzoxMEEwQTAwMDBFOEU0MUZGMzg5REUwMjdDMEJGQzZFNzFFRjBBRkYxMUUKKzoxMEEwQjAwMEY5MTRGOEQ3NThCRTE3RkM2Qjg0N0YwMUZFMzVDMjlEOUEKKzoxMEEwQzAwMEUwNUYyM0JDMUZGQzZCODQwRjgwN0Y4REYwMkZDMUJGMkUKKzoxMEEwRDAwMEM2NjcxN0Y4RDdGOEZDMERGOEQ3NTg3RTEwRkM2Qjg0Q0MKKzoxMEEwRTAwMDY3NTg4MTNGNzAzRTA1QzFGNDg1NDBEN0Y2M0IyQzNFNTIKKzoxMEEwRjAwMENDMTdEQzIwRTg3QUNDMzczMkQ5MDNGNEI3MTc5ODI4OEMKKzoxMEExMDAwMEY2NkQ3RkY5MDcwQ0U3NjM0RjM3RDFGOUFGQ0RFOTNGMjMKKzoxMEExMTAwMDYwMzdBMkRGNUFFQTI0QkJBOUVERTdEQzFFQjE2QjBGNjIKKzoxMEExMjAwMDMyOTQzQjNCOTU2MDJERjMzMEI2Qjg2QzZDMERFRUYzN0EKKzoxMEExMzAwMEU1QTU2RkE4NEEwMkY4ODZCMjg5M0I2Q0IwM0VGMkY1RkQKKzoxMEExNDAwMDA1OEI5QkEzNjBEREU5NURCQkNGMUQ4MTQ3MTRFRUQyN0IKKzoxMEExNTAwMEMwMzM2MTM3NzYxNUVEQzBBMzNGMzgwRUNDMTNBRTJCNUMKKzoxMEExNjAwMDJCQTk2OTA2MTYwQThGNjQ2NDU3RjRFNTVBMjgzRjY3REQKKzoxMEExNzAwMDE1RDI2QjM0OEU5RkM3MERBRjYyMkRFOUI4NkYzOTQyOEYKKzoxMEExODAwMDA3RUY0N0ExRkE2MTk2NzJFOUY1Mzc5NEU5RjQzRUY2RDQKKzoxMEExOTAwMEJCOEJENTMzOTU1QzUyM0RBNjVFQTQzRDJDNTcyRUQyODkKKzoxMEExQTAwMDhFNEQ1OTY0RUI4MUIxNkYzNTBCMzk5NUVBMjAzOUQ1NjUKKzoxMEExQjAwMDhFNzExQ0MwN0JCQjlEM0ZCQkE3RjBCOEMxQUUyOTU1QkIKKzoxMEExQzAwMERFMjlGMEY0NEVFMTc0NkRCNzA3REQ1NUQ4RkY3ODEzNDIKKzoxMEExRDAwMEU1MkRCMDhEQjk3RjE4MDlGRDdERkJGNzFBQzNCQzRGODMKKzoxMEExRTAwMEM5OUZFRDgyMEY0NjhGNzBEMkY5N0I3NkE3OERGNkVENzEKKzoxMEExRjAwMDJGMUZGMUYzRDYyNDgwNDczRkVBRjE2MDdFQzM1NkU2NzUKKzoxMEEyMDAwMDg5NDMzRTA5REU2QkEyRkNDNkE3NEI0NjI1MkQ4MEVBOUEKKzoxMEEyMTAwMEUzMjYzRDlCODQ3MkZEQTQ5MDM3MjE5MTE3RDREQ0I2RDAKKzoxMEEyMjAwMDdBMDRFQUIxQ0Y1RkUzRjJGMEM3NDIzRUVEMzJGNzM0OTEKKzoxMEEyMzAwMDEwM0QyNzM5QzhFRTYwNkMxQkQ5MTdDREU5NDA2Q0QwQjIKKzoxMEEyNDAwMDkxQTYwQ0ZFQjQ5OERENEJCMTlFMDUwQzAxQ0NCRkI2QjcKKzoxMEEyNTAwMDdDMzFEOTg2N0U1RENCMzlFQjFDOUUxRkRCNDM3Njg3MzQKKzoxMEEyNjAwMEM1MUU3MDI3QzJGQjZENDExM0M5ODUxNkRENDFGOTZDMEYKKzoxMEEyNzAwMDVCMURERTZFM0NDRjFDNzQ5QjI4RUY3NTZCQTE4OUYwRDMKKzoxMEEyODAwMEQ4RUFCODM2ODRGNkJDQTYzNEQ3QTIxRTBCQjlGN0RCRTEKKzoxMEEyOTAwMDcyRTE3REE4RDA0NDc5OEMyMURGQzIzOTA4MDcwMzFBMDYKKzoxMEEyQTAwMEU1NTlEMTBGOTYwNzkyRTgxQ0Y3NTZENkY3RDI0NDJDMDEKKzoxMEEyQjAwMEFGRTE3NjU3NUJEQTdGMUY4REM3MzhGNzM1NkUwRkRGNUEKKzoxMEEyQzAwMDU2NjEzQUU2ODE1MTRBOTgwOUZERUJERTRERjEzODhFMzAKKzoxMEEyRDAwMDI1NENGOEFENDFGMjUzNUQ1NjRFQkZFRjFGQjlDMjNENUMKKzoxMEEyRTAwMDkyRUM4QUE4RkQyQjJCQzZFNDNDMzYwRjk0NEY3MDc4NzUKKzoxMEEyRjAwMEU3QTAxRkE5MzlCRDM2Q0NFRjZCNzU3QjZEMkI2OEZFQ0YKKzoxMEEzMDAwMDNDMkY4REYyMkZBMEREMTZCNzg5RkM1OTJDQkZCMTkwRTAKKzoxMEEzMTAwMEQ0RTFGMUJDNTI5MTcyQUZFM0JDN0Y3MDA0RjFBMURERDYKKzoxMEEzMjAwMEM0NThBRThFRTNEMzgyRDFGQjgzQjY1MTE1REQzQUNDNEYKKzoxMEEzMzAwMEEzN0Q3NTEyQ0Q0MzUzM0MwNEIzOUIzNDFBRjc3MDNEOTMKKzoxMEEzNDAwMDhFQ0UyRjNGNjg5OUQ3OERGNkUxNzBEQjJEQjQ4Rjk1QjcKKzoxMEEzNTAwMDUxQUIxOUY2OTk4NjA1OEM3MEVBNjIyMzlDQ0NCNEM4N0YKKzoxMEEzNjAwMDNFMTVGNEZCQUVFMDlCNThCQ0M1RTIyM0MzRERGQTFBRjAKKzoxMEEzNzAwMDhFM0YyMzQwODc2QjA3OEM3RkJCRkJBMUM0NEE4NkUzREIKKzoxMEEzODAwMDc0RDAzOEQzMUMyQjJCRDE3RTRBNjVGRTY2RTRCRjdGODgKKzoxMEEzOTAwMDc1OUMxM0RDMEI2REI5RDBGRjg0MTQxMzk5NDcxMzU5QzYKKzoxMEEzQTAwMERGMjY2Qzc3QUJFMEY3RjY1QzRFQ0ZDOEJBNTIzOUJGMDgKKzoxMEEzQjAwMDRGQTlDQTlDOTI4QUZCMDQyNjcwQ0MyMkVERTcwNkMxMDUKKzoxMEEzQzAwMDQxMzNFQzEzMjQxOUUwRDFEQjg2MUJFQThGRTkxODY5Q0QKKzoxMEEzRDAwMDI4MUYxQkJBQ0M1MDNFNkU4RkQ3MDA4RkVGMkMzN0Q0N0UKKzoxMEEzRTAwMDlGRDg1NTY1ODA4QkMyNTcxQUVBMTc3NzJGMzRDMDkzRDAKKzoxMEEzRjAwMDdBOTYxQUVBNEYzRUIxRDI1MDNFQTU3N0FEQTE3Q0VBREIKKzoxMEE0MDAwMEE5NDYwMzNDQURFRkJCODZGQUQyOUU4RkQ1OEZBOTUzRTgKKzoxMEE0MTAwMEJFOTkxRDZGNEQxRjZFQjhDNzI2RDY0Rjg4QjVGMzZEMTgKKzoxMEE0MjAwMDVGQjZFODlCOTA5RjVEMTZFMjY3MERGNTM5RUUyQkRGNzYKKzoxMEE0MzAwMEMxRkQyMURCNzQ4RjhFRjIyNTVFQzhEMzU3QTZGQjQ2ODMKKzoxMEE0NDAwMDIyREQyQTVEMzZEMjBCOUE4M0Q3RDMxQ0IzQzk1RUM5RUQKKzoxMEE0NTAwMEU5QjBEMEZEM0E5QTlCRjU5N0M3QTM3QzZFMEE0RUNCMjQKKzoxMEE0NjAwMDFCMUQxOUI3RERCRDhERUVBOUE4NzRDRDYxOTg3NzI0QTkKKzoxMEE0NzAwMEJGRDdEQzNFMTY3MDYyN0YzQUI3OTNEQzQxQUE2N0Q3M0MKKzoxMEE0ODAwMEUxRkJBODc5MUMzMjk5OTgwM0U1MzhGODZEMTgxRjE5N0IKKzoxMEE0OTAwMENBNEY5M0ZFOTlGNENCODZGMkM3QTQxRjk2NjM2MjcxRUMKKzoxMEE0QTAwMEY4RENBNUY0REU4QTdFN0E2MUMzNkI1NUMzMThGOTZCQkMKKzoxMEE0QjAwMEQ1QTg0N0VFQzNGM0Q5RThBNzRERTA3NjU2NUJEQTk1MDkKKzoxMEE0QzAwMDNBQzY2RERBNzMzQkJCNDdFMjc4NTI0RDE0MTcwNUJCQjEKKzoxMEE0RDAwMEQ5QjMzMENBNUU1QzJGRThBOThENkNFRjQ1RkRENzk4RTMKKzoxMEE0RTAwMDY4RDNEMTVFRDI2Q0JCQTZCRDA3RjhEQTY5RUU3RDEyRTcKKzoxMEE0RjAwMEUzMTBBRDhBN0I1RDI3Q0FDNTNCMUM5NEVGRjFBMEMwNzkKKzoxMEE1MDAwMDlCRUUzNDE1NkY4Mjc2M0I5QjdEMUE5RUMzRUZCQzlCRkUKKzoxMEE1MTAwMDc5NUE3MTdEQTQ1NDZFNEE4NEY3QTNCMzU2OTgzMERDRkYKKzoxMEE1MjAwMDMzMjZBRjc5MTMzRTAzQzI1RTFFNUJCOENCOTQwQ0U1QjUKKzoxMEE1MzAwMEUzNEEyQTE3NjM3QzRCNzU0MzdGMTc4OTM3QUJBRTBFMEUKKzoxMEE1NDAwMDg2RjM2MTc5REE0OUU0MkJCNEVFMkZDMEQwMkI5MzZDRkIKKzoxMEE1NTAwMEI0RkY2ODQ3N0EyQkY0MjQzQ0Q4Q0YzOTQyNzY4NEYzOTEKKzoxMEE1NjAwMDM4NUVFQzNFMjUxNEFGNzBCQjE1RjNFNTJBOTMzQTg4QUMKKzoxMEE1NzAwMEJFRDI5RTQ1M0IxN0RCRjc1NzA0RDYyMzFGQTVDQzM1MkIKKzoxMEE1ODAwMEQyNTVCMzNENDZGOEQ4NkFFMkVCQTIzRDUxN0YxOUY1QUEKKzoxMEE1OTAwMDczN0I2RTVFMTJFRTVCRjVDQjExMjE1N0VFMTBGQTUzMTIKKzoxMEE1QTAwMEJFOTc3MkU1MjNGNDFENTIyM0Y2MERGMDc5MDdDNkQ5NDQKKzoxMEE1QjAwMEVDREEzNjNBN0Y2OUJGNkIxQjQzQkVCNkUzNjk3NUIyMEUKKzoxMEE1QzAwMEY3ODNCQTlGRjQ4N0RGOTA2RjU2M0Q3MkIxMERGNUY1QjIKKzoxMEE1RDAwMEQ5MTQyRkQ5QjNGNjhEQkZBNEYxQzVFMkNEREVDQkYzRUMKKzoxMEE1RTAwMENFODZDMkFCMkJGRjYxRDJFRjIwODA3NTNDQjc3MzM0QUYKKzoxMEE1RjAwMENENTExQjFEREY5NENGNjQyMUY3Q0QzMjNGMDgzQzA5QkMKKzoxMEE2MDAwMEQ0Njc2NzY1RkU5MTJGOUU4RjJGOTFDM0M3RjI5N0QyQjMKKzoxMEE2MTAwMEY4NkU0REY1MEVCQjk4QkQ2RDA3N0YzMzEwNDVGN0JCNDcKKzoxMEE2MjAwMDM1QkYwREYxRDA3NjdFQzExQzlBQjc0NjhCODE2REZEOEEKKzoxMEE2MzAwMEEyNzAxN0M1OEQ4NUJGOTQyQ0YwQUIyMzNFMDE4RjM5RDYKKzoxMEE2NDAwMDE2N0U1RUMwOTMzMjk3RUUyRDkzNzE4RkU3QTcyNDUxNEIKKzoxMEE2NTAwMEI5MjdDODU0MUVBRkVCQ0Y0RjM3NUQ5ODQ4NjNENTJENEYKKzoxMEE2NjAwMDUyRUY5MjI5Q0JGNTE0RkM3RjA0RjM1MjQ2QjU2QkM2MkEKKzoxMEE2NzAwMDdDNzZBMUM3QTU5RTFFQkRDRDU4M0VBNkMzMDg4RjBERjIKKzoxMEE2ODAwMDBERjhGRURGNTFDRjVGQzM3RjA3M0Q2MDJDN0Y1OEU4OTgKKzoxMEE2OTAwMEVCNkI1MDVGRTNCRUQ1Qjc3ODVFODgwRDQ2NzQ4MUVCRjcKKzoxMEE2QTAwMEQ5ODhERTAzMzk5MEREMTlBRTQ0QjE5OTc1OUI2NkM4MkYKKzoxMEE2QjAwMDI3MTkxRUEzMEZGRDE1M0FFMUNCREZBRDk5NTFDRkNBODMKKzoxMEE2QzAwMEI4NENBQzFDNTZFRTNDQkQwMUQ3NEI2NTdDQkM4RUYyNDEKKzoxMEE2RDAwMDEzRTMxODAxMkJGN0NCMDNFMEE3RENBNzc5RkU1NDgzMjMKKzoxMEE2RTAwMDdFNTVCNzRBRjk1MjkyNEVCMTc0OUQ1QTJFRUQ1Q0ZGRDkKKzoxMEE2RjAwMDFGQTc5MDdGREM1QjhDRkUzQUY2MTc4OEVBNEZDNjU3OUYKKzoxMEE3MDAwMDBFNEQwRkJDODlGNTY0OUNFNUNDMUNFRDc5NDU4RkM0REEKKzoxMEE3MTAwMDUxNjQ1Q0MwM0I4NUFGOUZBRDlFRDcxQjhFQzEzODhFMDgKKzoxMEE3MjAwMDlEQjA1MjBDNjQ5NkZBNzI3NzEzRTY0MzY1NkIyNEJGQjIKKzoxMEE3MzAwMERDOTNEN0ZEMTRGREVGQUEzRjQzMzlDQ0UzOThBRTBGNkQKKzoxMEE3NDAwMDIzQkJCQ0RCNEM3MTgwMkFDMUM3NTVDMkRGOTJGMTk2OTYKKzoxMEE3NTAwMENGODQzRUU5OUIyMkVEOUM2MDFDRjdFQkMzNzE2OEJGODAKKzoxMEE3NjAwMDhFREIwM0IyRDc0OENGNzg1RUNFRTM2QUUzM0I2M0NCQTAKKzoxMEE3NzAwMDdEOTRBNzc0OTlFMDE3Q0MyRkFCNENDM0I0MkUwRTc3MDEKKzoxMEE3ODAwMDMyMjVEOTBENzQ5Q0I4QjhGNzI4QkEwRTg1MkYzRTFGMTQKKzoxMEE3OTAwMDg3N0NCOENGQ0VFREI1QTcwNDNGQTQzMUM1ODM3OUY4NDcKKzoxMEE3QTAwMDY5N0IxQzlFMTBENDczQUE2QzVGMEZDQ0MzNzM1QzMzOUYKKzoxMEE3QjAwMEU0OTM0RDM4Njg4NDBCNTkxNDlDOEJFMzMwQzJGN0VBNUMKKzoxMEE3QzAwMDBEQjhDNUNDRUVBRDAxOUIxQ0E2RUMyODE3Nzk0N0Y5NTYKKzoxMEE3RDAwMDJDMUZGOTZCOTZFQTI4NDJGRkE5QjFEMkMxMTBBRkQ2NUYKKzoxMEE3RTAwMEI3QzdGQ0I4MDdFNUM1NkJGQzdFMkE3N0JDRkU0MDM1RDEKKzoxMEE3RjAwMDdDRUY3RTI5RDlEM0FDNDdFOEZGMTRGOEQxQTgxRjdFOUYKKzoxMEE4MDAwMDc0QzFDMzVBQ0Q1MTcxMkRBMDY3MUVFRDIzQkJBOUJDRTUKKzoxMEE4MTAwMDEzRTg4QUYwN0VGMEFCRjM2ODFGQjk4MERFRkYxMkZDMEMKKzoxMEE4MjAwMDZBODRCQkMwQUZDNkU3NkZDMEFGQzZGNzA3QzFBRjQ2MEIKKzoxMEE4MzAwMEQ4MzdCRDcyMkNDNkMzREU4NDdBQzgxNzcxNDUwNzZDNDEKKzoxMEE4NDAwMEEzMzA5RUVENTBFOTdDNEQyQzNGNkU2OTc4RDc3MTFEODkKKzoxMEE4NTAwMEM4QUFBOTFERDk3MzUzOTExRjZFNTNFOTFDRjJEOERGMDIKKzoxMEE4NjAwMDY0Q0Y0NUJGMzUzQUFFMTYxRDU3OENDNEQ1N0ExNTE5M0QKKzoxMEE4NzAwMDU3QjMwMjdENUU5OEFDRjNCQzQ1MTk1RjBCRjBGOERBNzQKKzoxMEE4ODAwMDU3QjdFMzkzRUQ1MEJDNzI0MDNCRkQ3MTRCNUJGMEJEOUQKKzoxMEE4OTAwMDAyM0M5QUE1QjAwNDc4RkZGMTFERkZGOTA0RUE5OUQ0QUYKKzoxMEE4QTAwMDhDQzA1NDlDNzdEREE0NzcyQ0RDRUVFNkU3QTZCMkM0MUUKKzoxMEE4QjAwMDNBREE2MUU3NzlBMzU5MjJERjI3MzY1RTM5N0RFNkRCOTQKKzoxMEE4QzAwMEI3QTYwMkNBRTY5NzhGNTk4NkZFRkZGNDVCREUyRUNFNEUKKzoxMEE4RDAwMDAxRjg4N0U1M0Y1ODg2NzlCREQzN0ZGNkY2MzM5OTgwMzYKKzoxMEE4RTAwMEE3N0ZGRTY2MTEyRjdGRjBFREIzNTkxRUNDQkJGOERFQkIKKzoxMEE4RjAwMDMyQ0NGMzc1MjU3M0ZEQjY0MzlDM0Y5MkY4QkQ1RUFDMzgKKzoxMEE5MDAwMEY3RkE4RDhGOTIxRTA3M0I4MzIxM0U1QUQyRkNBNDVGM0IKKzoxMEE5MTAwMDNGNDlFOTczQUQ4MEZBRjVBOTdENjkyQjJGQTIwRkVBQjMKKzoxMEE5MjAwMDM3M0U0MURGRUY1MDNDQTc0MjM4RUUyOTM2OUU1RjJBODIKKzoxMEE5MzAwMEY0Q0QxOUMxQkI1MkRGMzREQTM5MjhDN0MzNTgzQUJENDgKKzoxMEE5NDAwMDdGNTBDNDgxOTgyRjkzQkU0QkI2NzNGODk4QUI5Q0Y0OUMKKzoxMEE5NTAwMEQyRkQ1NUZBQUIzQURGOUYyNEZGRjg5OEVCQjJFRjYzRDQKKzoxMEE5NjAwMEZFNUNDQjFDOERGNjBEMUY3NDc4RURBOEI3MzY4Qjc5ODUKKzoxMEE5NzAwMDQxRkI0MUNBNTM5OTY1QTNGRDFDOTZCMjk4RDY3NTkyQzYKKzoxMEE5ODAwMEVDMjdBNTg2RjIwRTkyQzQ3ODhFOTdDNzg1MzEzRUQwMEIKKzoxMEE5OTAwMDUyNkREQjhENzJGNDA3OEU5MUQ0NUU0Qjk5MjU4ODcxRDAKKzoxMEE5QTAwMDE5MDk2RjJBODdGMTAwM0UxMzVENDlCOUQ0OUY5MDczNEUKKzoxMEE5QjAwMDMyNkVDQzcwRjcwQ0RBQUQxMkQzQUU5MkY5MEMzNkYzREUKKzoxMEE5QzAwMEU5NjhGQkRBQzE3QTg4N0YzQzI2NUQ0NUZCMzA3OUFBQ0QKKzoxMEE5RDAwMDRFRjJBQjk4NzkxNkUzN0I4QkQyMTA0NDY2QzQ3OTk4MUIKKzoxMEE5RTAwMEEyRTdBMTU3MUJFN0ExQ0YzMkNDNDM2OUI0ODVEMTJFOTIKKzoxMEE5RjAwMDZDOTkwNUYzODBGQUM3OURBNTM0REU1OEJBQzlGOTdDNzUKKzoxMEFBMDAwMEI3OUNGMzczRUMzQzk5RDgzNzkyRTcwNEFBREMxNTA3OUUKKzoxMEFBMTAwMDcwNUNCMzRDQkU1NjFDRDdGM0ZGQTg0OUMxMEIyMzY3MkIKKzoxMEFBMjAwMEIzMDYwRERGOEY4QUU0RURCNDdFOURCQzg4RTlFRjJBODIKKzoxMEFBMzAwMDdDOUZFQjE2MEJDRDZGRTczNDhFODc4NzJEQTE1QzNBOTgKKzoxMEFBNDAwMEMwQTE4NTMyNzA3Rjc3MjgzRUVFMkFFNzcyM0ZDMkM3RTkKKzoxMEFBNTAwMDNFODZFQkFCMjVDOUM3RjlEOERERTc2QTQ2M0U0RUVDMkEKKzoxMEFBNjAwMDRCREI0NEYzMEEwRjRBOUY1ODdFOEVBNUQ3MzFCQzEzQTcKKzoxMEFBNzAwMDgxRjQ2MjUwNDVGQzdGMTU3RDI1NUQ2M0Y3QkQyNEJGRTEKKzoxMEFBODAwMDI0NEY3NTRCN0FBN0QzM0NDMzM5ODZGRDQwNjg0MTFGREMKKzoxMEFBOTAwMDZDMUY3QzMzQjRBNzQ3RUQ5RjU5RDJGRDY0Njc5QjUzNkQKKzoxMEFBQTAwMDNDMDUxODZGNkVGOTUyMURGNDdDRTQ1OTgxQTc2NjU3NzYKKzoxMEFBQjAwMDFDRDlERjJEMkU2RTdGMUY3MTVENjlGMDlCQUFDMThGOUYKKzoxMEFBQzAwMEMyRkQ2MjM1OTk3NUUyQkE1MjEzOTY1MjFDNEQxRDg2MkQKKzoxMEFBRDAwMDk2MTdCMTg1RDFBRTREOThDQkVENUFCN0Y3QTJFN0E0NDIKKzoxMEFBRTAwMEI0NUVENTcwN0ZEQTAwQkIzNkU5NEE2RUQ3QkEyQzY0MDMKKzoxMEFBRjAwMEQ3RUU3MDVBMTZFRjFBNDRFRUJDNTRDRUZEOUYyMzM4QTEKKzoxMEFCMDAwMDhGNDFGQzQ2RjAxNzI5OUUyOUZENDU4QjNCNDA3RTlGRDcKKzoxMEFCMTAwMDlDRTc0QjgyREY2NTdEQUJCQjgxNjE3QzREQjU3ODc0NzIKKzoxMEFCMjAwMEI0NjM1NTcxOEUxNUYzOTcwQkEyRUMwMkQ5RkYwQkU1QjgKKzoxMEFCMzAwMEZDMUNGRTMzRDMzOUZENjQxRUZCRjQ1Nzk1ODZDMUYwMkYKKzoxMEFCNDAwMEFFNEQ5NTc2QzlFMDdDRjcyRkYwMERDOTA5QUZDM0UyOTEKKzoxMEFCNTAwMDQzQkJDM0VCNDhBNzdDRUZBMUJFQzNBREVBNTM0OTExODkKKzoxMEFCNjAwMDM5RTNGOUIyNTQyNTdEQTQ3OTI4N0ZCRkQzRENGQkNDMkYKKzoxMEFCNzAwMEFCRTgwRjNFRUYyMEJEMjNFRDcxMzA1NjI5RkYxOEZDRTYKKzoxMEFCODAwMDVFOUYwNzFBRDlGNzRGNTg4OUE2ODhCRjBCRkU1N0Y2NjQKKzoxMEFCOTAwMEQ0QThGREM3QTM4RDI3NjlGRjI3RDY0RThEOEQyN0Y0MzYKKzoxMEFCQTAwMEFGNzNENzEzQjk3QzFDQTEwQzVDQjc0QTYzRDkzMEU0RUUKKzoxMEFCQjAwMEE3RDg3NTJFOUZEOUU5QzU5N0FEODI3MTY1NjcxNEQxNjUKKzoxMEFCQzAwMDUzQkU3Rjg0QTk3MzA2QkIxRkFEQTQxRkZGNUMzRjhGREMKKzoxMEFCRDAwMDg1Q0UxMjU0RDJDQjI1NTM4MThFMUZERkY2N0E5QTQ3NDkKKzoxMEFCRTAwMEM3NzNCNDlGOTI3RTNFRDM1MDk2QjAwNUY5QkMyMDg5QkUKKzoxMEFCRjAwMEU0NkE5NjM4MUYyNkM3OTM3NUYzOTFDNDI0MDdFNkU5RTMKKzoxMEFDMDAwMEY1OERDNUZDQjY1MDkzRkZCMjZBMzNGOTE3QkVDMUM2QzUKKzoxMEFDMTAwMDFCOThDQUY1MTEwQjhGNjBEMUY3RkZFODI5M0Q1NzhDQkYKKzoxMEFDMjAwMDAxN0NFQjBFOTM0N0E3NzVFNTI2QkQyN0Q3N0ZBNTk2MzgKKzoxMEFDMzAwMDU4RUQwNkZFQ0U2RTYyMUU4NzhFNTcyM0JCMjkxRTk2RTgKKzoxMEFDNDAwMDdENDEyNTNFQ0IzRUM2RUY2RjFFOTFEMkE3RTBCRDVCOTYKKzoxMEFDNTAwMEZERkQ4ODNDMjZCOUFGRjI1OTQzMzVBRENCRUM2MThDOTQKKzoxMEFDNjAwMEY1NTBEQ0QyNEZGQjBGOUZBNTg0MTdFMEJBRkVFQzIxMTQKKzoxMEFDNzAwMDNFQTJFQzQ3OERFNUEwNkIyOTVFQkRGQUI2Qjg5MDBFRkEKKzoxMEFDODAwMDREOEZCODBCQzY4N0UzRjlBOUMyQjI3MjcxMUNDNzcyQTcKKzoxMEFDOTAwMEI3NjBCQ0U3NTdGMTE0RUY1MTNCRjIyODVFQjMyNjIzQUYKKzoxMEFDQTAwMDMwMDdGOUUxRTM5MEZFNkREMzI4MzE1OUE4NTdGNzlEOUQKKzoxMEFDQjAwMDM4QkEyRjYwODdEMjczMDVFNTRCREM2RTYyOEYwRjEyQjYKKzoxMEFDQzAwMDhGNUEzMzk1RkI4OUI1ODJDRkIzRDM0QjM5QkREMzRCNjQKKzoxMEFDRDAwMDJFNUI5NTdDRTlFQkU4ODc0MjVFNkY0RDA4RDFGRTlDQzgKKzoxMEFDRTAwMENDRkJCQUQ3M0MzODVGQkQzRUQ1MjRFODk0NjNDODAzOUIKKzoxMEFDRjAwMEIzQTFGNzAzRkNBMjJBQzJERURCRjNENDUzNEZBNTMxODQKKzoxMEFEMDAwMDdFODQ3MDI0REY4NzhDREUyRjhFQ0IwQjUxNjE5Q0M3MzUKKzoxMEFEMTAwMDQ3NzI0NzcxRkJCODdDNzUzN0E0MDc4MUJGQjc3Q0ExMjgKKzoxMEFEMjAwMDBFREFGRkEzODI3RUNERDlERjRFQzdGQUQ1QkE4NzlFNTEKKzoxMEFEMzAwMDQ3QjI0QjRGQUMwMEZDMzkxQzE2NjY4RDkyQkY5MjRGNDgKKzoxMEFENDAwMDYyRjU3QkEzNzNFNDQ1RkQ3NzBCQzg2MUZEMjJGMTA1MzUKKzoxMEFENTAwMDhCQzhFRkRBN0M3NDhBMERFRjA3RERFQ0YwRjZBMEREMkUKKzoxMEFENjAwMEI1RDk5MUUyQTVGOEJCMDNFNDQ1NTQzQ0NBRTE3ODgxMkEKKzoxMEFENzAwMEY4RDBFMUUxNzEzQTA3Q0E1RDhDNDdFMUZDMEI3MUZDNDgKKzoxMEFEODAwMDJGRDBGQzY1QkQyNjIxN0YxQzlFMzBFRDkzREEzRERCODQKKzoxMEFEOTAwMEE4OUU0REYzRDNGOTM4NUIwQUEzQkMwNTlCOUJERjJCMjAKKzoxMEFEQTAwMDFBOTc2NzYyQjY0MUU0RjBDNkE5RENGRkRCNUNFOEVEMDgKKzoxMEFEQjAwMEE5QTJGMTY5Nzg2QzhBNkQ0RUY3QTY5MzFFNDQzQ0MzMzQKKzoxMEFEQzAwMEY3Qzc5Q0E1MDlEMUY4Nzk1NkM4ODM5NjIzN0M3RUZFRTcKKzoxMEFERDAwMDhEMTlFRUVBNjJGNDY3RkQ3QjUxMUU2Qzc2QUNCNEUxMkUKKzoxMEFERTAwMDdENURBQUIzRTRBMkVEMUMxMkY0OEFCNEIzM0RBRDNBODIKKzoxMEFERjAwMDk5REE3OTE2Rjk1Rjc1N0FEREQ4OEU1OURDOEYzQTQwODkKKzoxMEFFMDAwMDhGODk3MTdDRDMzODFBNjA5MEYyNzQwODJGNDQ5OEIwRkYKKzoxMEFFMTAwMDgxMkVCMTRGMDdDNkMzOTIwN0ZCOEVDQkM1NUNFMUI3NEQKKzoxMEFFMjAwMDgwNUNGQzEzOEVCRkFFRjA5RDE3RjgxQUUzRkU0QUQyODkKKzoxMEFFMzAwMDE1M0MwRkU4MEM3MDM2REU0QjE1OUI2NzExNkJCRjQ4NTUKKzoxMEFFNDAwMEJEMjNGNTEwQjRBMzYyM0IwRkEzRkQzMjI2QjI4RTY0N0UKKzoxMEFFNTAwMDFDMjdCM0Q2Q0ZENzRCOEE5RkY4MDVFQzE5MURENzhCOEIKKzoxMEFFNjAwMDJBRjJGODA2RTg4MTBBOEUzRkM1NTVBNkEzQkVBODNFODEKKzoxMEFFNzAwMERGOUI4OURGMUQ3MjlFQ0FFNEY2QUI3MTdGRjlGODNGNTQKKzoxMEFFODAwMDlFQjA2M0Y5NjdCNTU1MTdCNTUzRTQ3RUYyNTBGQkM4MjEKKzoxMEFFOTAwMEFFRUY3RUI4MjFEQTRFMTk2QTVGRjlBQkY2OTM4RkJBM0UKKzoxMEFFQTAwMDJDMTRCN0RCQTkxOENGQkYwRkFCRTBGMjJGNDlDQzZGNDIKKzoxMEFFQjAwMEQ3OTQ4MEJEMjIxNUVCRjkzREZDNDAzMzhGQ0JCQzMyREIKKzoxMEFFQzAwMDNERTBBOEMwMzg1QUJCODUwNTkxRUZGRTUxOUExRTg4MTcKKzoxMEFFRDAwMDZBRTc1MkYxMkNFM0VGQzM4NTFEMzVEQ0YxODQ4MkVCODgKKzoxMEFFRTAwMDc0Nzg2RDQ4QzFGODc5NjY2REE3RTJCQjQ4QkRGRjEyNjIKKzoxMEFFRjAwMEVCNTlENjM3OEJGNjY3Njg3RDJBRUFBQjE5NkVBRTE3MjkKKzoxMEFGMDAwMDMzQ0Y2OUFDMjA0QUVFRjQ0RUU1NzY5NDU5RDhFREFFRDUKKzoxMEFGMTAwMEEzNEZEQUIxQkRBMzI2N0Y3QjNFRUEwNzk3NDk3RjNDNkEKKzoxMEFGMjAwMDZBQkQ5QjZGRjZEQUFBQTJFNkQ3ODJGQjQyODNEMEQxMzQKKzoxMEFGMzAwMDU3MjFGNTYwOThGNEI3RDRCNzY2QTkyNzUyMzQ4MzlFOTkKKzoxMEFGNDAwMEE4OEZFNzdDMkNFRDlERkE3MkVFMDdENUM3NzM3RkZDQzYKKzoxMEFGNTAwMEM1RjRDMDE0QzRGMzI3RTUxRkNFMUZBNUUzMzlEOEIwNEMKKzoxMEFGNjAwMDM5MjVGN0FCRjc0N0ZBRUQxQjUzNjg4NUY0NjM5MEZGN0IKKzoxMEFGNzAwMDNCQ0Q3QTU3MkZEOTU5MkUzQTNGMjFFREFBQTI5RjI5Q0UKKzoxMEFGODAwMEEzQjA5RTQ3RjE5MUZEMzcwOTZGMUE1MTcxQUI5NkRCNjMKKzoxMEFGOTAwMDgzNjA2NzVENTk5MUNBQUZFNDhGRTYwMzE2NzNBRkUwMzMKKzoxMEFGQTAwMDUwRjNGNEUyN0RBNkE5MTgwRkVDQTE3OEVEN0RFNzk1QUEKKzoxMEFGQjAwMDQxQ0Y0MURDNTcyMUVEQTVGRUZENDE0M0RDMzU1M0U4OEYKKzoxMEFGQzAwMEJENEM1MUFFNjNEQzM1MTdGN0JCOEM3MUQxRTI2RTIzRkIKKzoxMEFGRDAwMDNDQTlDNzA4NEYzRTExMTM2NzBERkFGRTAzQ0ZGOTYxNzQKKzoxMEFGRTAwMDNFMDEzNkJBMDNENjFGQ0E4RjU1NjIxRjM0MkIxOEFBRUEKKzoxMEFGRjAwMEM0RjNFMUQ5QUM5M0Y2MUIzMzZCOTMwQ0Y4OUVBRThBODUKKzoxMEIwMDAwMDNDMENCQ0RFNTg4RTEzN0UzMkI1NzkxRkUwRjc5QkZBRkMKKzoxMEIwMTAwMEU3MTU2NDg2QkNGRUVBNTVERkM2QUIzMEQ5MzY3RUJFODYKKzoxMEIwMjAwMENGMDY5RDIzQkVENjVDQjE3MDE2RDI3QjQwRkNCNkMxNjQKKzoxMEIwMzAwMDE4QjdDRDhDMkUwNzNDQUNERTYxM0MyN0U4RjcxNTkxQTQKKzoxMEIwNDAwMDdGQjBFODVCQzZGMzgyMzIxRjFERTc5QkU5MUREOEZGODYKKzoxMEIwNTAwMDU3RjcwQkZGOTIwNkY2MkZEQjdEMThFNDEyQzk1RDcxREUKKzoxMEIwNjAwMDhGNzAzNjE2NjEzQjVBNThDMTdERUZFMTBEOENFRTEzOUYKKzoxMEIwNzAwMENFQkM4REY5MDZEQjNGMzgyMEYwMTU4QjY3MTY5QzQxNUUKKzoxMEIwODAwMEY4OUIyOURFMEQ3N0YwM0NENUUxQjc5OUM4NEUxQzBFMzAKKzoxMEIwOTAwMEYyODJGRUNFQzAzQUYwMzUwMENFNUNBNzkzOUQ3OTc1NjIKKzoxMEIwQTAwMEFEODlBMURFNjBFNzlCMENERkMzNzAyOUJFMkFFOUZFRjMKKzoxMEIwQjAwMEIwODNFN0UxNjZEN0IxOTAwOUU3RDM3MDE5QUQzMzFBRDEKKzoxMEIwQzAwMEQ3QzgwODNGMDBCRTBDRjcwOTVDNUQ2NjNDQTc5QjFEMTYKKzoxMEIwRDAwMDczM0U1N0YyNDE2NkNDRkI2QjJBREM4Njc1MDFGQUVGQjIKKzoxMEIwRTAwMDQwMDVDOTBGQUUxNzQ3QTM1RTg0MjE3RDNDRTVDNDEzMUMKKzoxMEIwRjAwMDk4NkYzNzdEMTNFM0Y3RDkyNEM2RjFGQjZDMjJGQjEzNUQKKzoxMEIxMDAwMEVBMDVFMEQ3QTNCNjk5MDU2OEM3NkM3NUM3OTkzMDBGRjMKKzoxMEIxMTAwMEUyNTA2MkVGNEY1ODIyRjg4RDE1MkM1ODlEODVGNzFDOTAKKzoxMEIxMjAwMEY2OEQ1MzAwN0VCREEyN0U2N0ZCMzQyOEI3RjczRDhEQjgKKzoxMEIxMzAwMEMxNjU4N0UzREIzN0NDQzk4RUMwMkVENzNEMDRCMzMyNUYKKzoxMEIxNDAwMEE2RTM3RDQwOTg3MzhBRUIyRUNFN0RFNTFFQkNFNzNBRTAKKzoxMEIxNTAwMEFFRDA0MUMxQ0EzODY2QkM3N0E3QjU1Q0JGMTdGMzQ4MEIKKzoxMEIxNjAwMDVBNDc5QkM0RjlFOEE4NzI5OEM3OEM2OTZFOTlGRjQ2NDQKKzoxMEIxNzAwMEY5Nzg2QzBFQ0YwQjg4NkUxRkYzQjI4NzZDRkY0QTY4QUMKKzoxMEIxODAwMEJGRTQ2QkI0NkZFM0UzNEZDMzU3QTA3RkQyNzBGQzE4RUEKKzoxMEIxOTAwMDE3QzdGNjkxQkUxODQ0OEFFRTVGQjRBN0IxRTAyRURDNjMKKzoxMEIxQTAwMENGODFGRTFDMEFFRkNGOEQ3OTJBNjlDQzk4OTdEMERGMkEKKzoxMEIxQjAwMDlGMUJGQTFCRkZGRjYwM0U4QjA3RDJDMzdDMzE3QTJDQUEKKzoxMEIxQzAwMEZEN0FGNDY4MzVGOTY4QkNDMTA5MEVGMjhGRjBGRTJBRTkKKzoxMEIxRDAwMEJDQTdDRTJFRkFCMzhCRkJCQTEwQUZBREE1MTFCQzgyQzMKKzoxMEIxRTAwMDdENDhFRDQyRjVFNjBCMDJDRjk4Nzc5OEU2QjYxMDlFQzMKKzoxMEIxRjAwMDg3QzJEQjUxMzdDRjkzQkFEQjFEMTc2QUNFRkRGRjQwMDQKKzoxMEIyMDAwMEFGNzQ0RUFGRThGRUQwQ0VCQ0U0RkU5NjQyN0YyOTk3RTUKKzoxMEIyMTAwMERFMUZFMjE3RDc0RjNGN0U4MTI2OUJEMjJFMURCRjMwMDcKKzoxMEIyMjAwMEFBRTBBNUUwRjcyOEI0NkI4QUMyNkIyNDFGNjlCQjFCOTgKKzoxMEIyMzAwMEZEMDVCQkQ5NkZDM0ZDQ0NCOUQzMTI2OTdDODUyOTBCNDIKKzoxMEIyNDAwMDZEOTQ5RjkwQkE5MEYyOEREQjBBMURGNEY3MDVEQUYyNDcKKzoxMEIyNTAwMEJFNjUzMzQ3RTlFOUI2QzIxQTJBODdGQTk0NDc1NTE4RkEKKzoxMEIyNjAwMDhFQzNGMDA1MUJDRjdBMjgzRTcwNzc0NTc1M0FGQThCNkUKKzoxMEIyNzAwMEMxMDY5RTk3MjVGMzk0QTQzRTY0NjIzRjk0RTYwNTFGQTEKKzoxMEIyODAwMDI2NEMzQkQwNzcxNEVBREZERDUwNDI3OTY4MDk4OUZGMEMKKzoxMEIyOTAwMDRERjk1NzVCNkIzRDFFMkNGRjg5OURFRjZCRkU0OEVDMTMKKzoxMEIyQTAwMDZCMjFBMzUyN0M2RDQyRjlBM0I4QkZFQjFERERBOEQwODIKKzoxMEIyQjAwMDdFRTZCQThCRUY2NzdBM0ZFREE5QzIzQzJFQjY4MkU3RjUKKzoxMEIyQzAwMDY5QTVENzY4MzFGQUQwQjg2RUI3MjI1RTc5M0U1NTQ4ODUKKzoxMEIyRDAwMEUxRjgzNUI0Qjc2OTVBMkFFMUVERUVCQ0REMENGRkRFQ0EKKzoxMEIyRTAwMEQwMzNEMDk2NkE1QzVGMjZDQzZCOEE1RDhGOUFDNTQ3NTcKKzoxMEIyRjAwMEY3OEJCMTQ2MTM4RDIzMTM1MzA1NDBDNTc5QzdDRjRENDYKKzoxMEIzMDAwMDVGMDFFRkIzNkVEMkU4MUVERjYxODU3NzUxN0UxMzU4N0YKKzoxMEIzMTAwMEZGNjQ2RjE0MTZCRTVDODVGMDgwNzlBRTMyQ0UyMzc2NjIKKzoxMEIzMjAwMDVFQjFFMzk2RjcxQjRCN0E3OTNGRjVDNEEzREZFNTFEQzkKKzoxMEIzMzAwMEJEOTBGMkNGRTg0N0FFNzczNTY2M0U2MDI3REI1MzRDRDEKKzoxMEIzNDAwMDc0MEY1QzVDNUVENEJDOThBMTlFRjBFQkZFNjdFMTA2RDYKKzoxMEIzNTAwMEQwNTVCNDhFNjJGN0M5RkUwRjNGMkY2NDY1MUU5Qjg1RTIKKzoxMEIzNjAwMEJFOTNFNzZCRjhGRURCNzA1QzNCNDhGNzFDQzZGM0MwOEUKKzoxMEIzNzAwMDYzQkYyRkU1REZCMzc0QkUxRjY3OEQ2MzM2M0M1RkEzRTkKKzoxMEIzODAwMEFDOERBM0I4QTZENTBBMzA5RUJGMTFGNzhDM0QyQ0UyMzgKKzoxMEIzOTAwMDcwQ0QwQUQzMzJCQ0QxRkQ4NTI5OEY1RUI1NUQ5NTg3MEUKKzoxMEIzQTAwMEZFQzQ1MURCMjIzNzlENkIxM0ZFOTUzOUQxNEY3OThDNEEKKzoxMEIzQjAwMEFDMjBDOUUwQTcxRTE1RTdEMzFBNkZDRTFEODY3MUJENUMKKzoxMEIzQzAwMDA0MjhFQjQxN0Y1QkYzRDg5MERFMzI5RUUyMUFENTdCRjYKKzoxMEIzRDAwMDNERUFGMURGM0VGN0M5MEQzNkQ0REJFODFDOTczM0Q2RTIKKzoxMEIzRTAwMDNERURDMzlENzhCRkIwNUM5RkQ2NzNGQzlFOEU3RTU4QUEKKzoxMEIzRjAwMDZCQTAzQzExRUJCOTFDQzNGQkIwRjBDRkZBRkQ5NjE0NjcKKzoxMEI0MDAwMEFEOUFFRTlGMTI3RTQzMjU3M0I3RTI3Nzk1ODAxQ0MzRjkKKzoxMEI0MTAwMEJEMDBFMkRFOEY4MUVENjcxOURFODdDMUVGOEVERTI3OEEKKzoxMEI0MjAwMDE4QkFGRDc4QzNGRDAyNTZGMDgzMDY2RjNGM0ZBNjdEMzQKKzoxMEI0MzAwMEY3QTBFRDQ3REE0RDM2QjREQkE2NzFCOTExNEM4OTBCOTQKKzoxMEI0NDAwMDBEMTZGN0ZCNzI1QUQ1N0JCOEE0ODdDQTYzRkI2MjlBQzQKKzoxMEI0NTAwMEM4QkZCNzgxNDRDMzdEMjlDMTNGNUJEMjFCMjhBRjREMTQKKzoxMEI0NjAwMDhERTNGQkE4NjYxMDIzQzg0RkM3OUNCNTNDMUYyM0NCQjgKKzoxMEI0NzAwMDk4RDcyNkVGMTU2OUMzRkI0MkEwQkNDQTYxQjRENzJCOEQKKzoxMEI0ODAwMDU5REZCMTg5MEFGQUFGNDY3QjdEM0E0QTUyRENBRjYyOTYKKzoxMEI0OTAwMEIxNzY3QzAzRUQ5QjlBQjM4QzcyQTE0M0FDMTc5M0IzNDYKKzoxMEI0QTAwMEE0ODdGMkUwNTIxRDk0RTczMDU0RENFMUNEMjY0NkY5NDIKKzoxMEI0QjAwMDU5RTY3ODdGMDNFQUJDQjRFOURBODhCNjMyODAxMzM4RkIKKzoxMEI0QzAwMDlGRTU0RENGNTg4RTcxREUzNzA1M0ZCNzgxMUNBMEYzNDUKKzoxMEI0RDAwMEEzOERDMzc2QTk1MUVERDY1OEMyQTM1MUFGRDQ5OEY4MjUKKzoxMEI0RTAwMEI5MDBGQTgxRkVERjRDMUQ0RUYxRDdEODdFRTVCRDMxQTMKKzoxMEI0RjAwMDEyNUVENkEwNENDQjhCOUFERjlCNjI3REY0Rjc3NzZCMDQKKzoxMEI1MDAwMEU2MkVCNDZCRkJGQkIzODYyNzUxN0ZGRDc5NDZBMkJGQzUKKzoxMEI1MTAwMEI0NkZENkRGNUZDNEZBOTZGRDJERkJCNjcxN0VDQjJDREYKKzoxMEI1MjAwMDNEMzRCRjY1RTJCRTUyRDlERjVGNzA3RUI5REZBMDNGMTgKKzoxMEI1MzAwMDkxMUZENkRGREY3NzhDRjM1QjY2RURBMUY5MkRFQkY3N0EKKzoxMEI1NDAwMDJGNDU3RjY5REZBQzNGOTlGRjYwQjUzNkQ0MjIzRjBEQjAKKzoxMEI1NTAwMDk1MDcyMUYzMUYyNjc3NjQxQUYyMUY1ODMwNzM2RTY1MjIKKzoxMEI1NjAwMDFFNjMwRjI4OUMyRjU2MUQxQUZENTNFNDhCQjM3MzFCQ0IKKzoxMEI1NzAwMDNENjRBNzA4N0Y4RkNFMEJBOTc0NUU4OEY0RThENTU5ODcKKzoxMEI1ODAwMERDMEU5MUVERUY2OTJBNjNCRTMxM0M0RTg0Q0Y4MjBBMTYKKzoxMEI1OTAwMDg1Q0UyMzhDMkQ1MzdDQjhFRkI2MDNFNDA3REU3RkI3NEUKKzoxMEI1QTAwMDEzRDYzOTk2ODc5QUQyRTlCOUJCNDlBN0U3NjNFMDVGMUEKKzoxMEI1QjAwMEZBMjgyRUU2MjFGODg3RDM3OURDRTU4MTBDRjc5MjU1M0QKKzoxMEI1QzAwMDY4N0Y1NEM2RjE3Q0VDOEFBOTYwRDk0NkZDMzc1ODJGQjUKKzoxMEI1RDAwMDQ3RUQ5OEY3NzgyRDJCQzI3MzY4RjkxRDFDOUYyOUQ1NkMKKzoxMEI1RTAwMDY5NzRERjdENUNEMUYxOUUyNjgwQjc5NEE5M0FFNjk5MTMKKzoxMEI1RjAwMDZGRDEwNzhGRjM2QzlCQ0VFM0JGNUI0NDFFNjUxMENGMEEKKzoxMEI2MDAwMDQ5OTI1MjAxN0YxMkU2QkY1QzkwOEFBOTczRTlGQ0NEOTIKKzoxMEI2MTAwMEQ1REY0OTI0RkJBNkU2NUJCRDRFMzc4Q0UzMDZBNUU4RTMKKzoxMEI2MjAwMDNGRjIwMDFGN0YxNUY2Q0RGMjlDMkI0OTFFQzRGQUE3RUUKKzoxMEI2MzAwMDI5QThBOTRBMzBCRjUwMEQ4NUUwRDc0NUNFNDVFNERGQTMKKzoxMEI2NDAwMDJFQkE4NkIxMjRGOEZFNkFGQzBFRjRENEFCQzIzRTdBNjAKKzoxMEI2NTAwMEE1RDdDQUQwRkYwQjU2RjNGREVDMUJFRTMyRkFBNTBGQUYKKzoxMEI2NjAwMEQ4QzM2RUI0MEIxRjI4NEE2MTQ4OEY5QURCOENFNTVCMDgKKzoxMEI2NzAwMDJDN0NCRDJEOEFGMTUzQUY4RUM5MDM5MkY3MUY2RUMxOEEKKzoxMEI2ODAwMDVGQTcwMDNFQTc4QjdCNUY0NDFFRDA1NUQzNzVBRUFGM0UKKzoxMEI2OTAwMEIzOTIyOEU5NUI5RUNGQjQ1QUQ5QTBGQjk0QjJCREJENEEKKzoxMEI2QTAwMDI4Qjc1MENFQTZGODA4MEYzMjZGOEVBOTdCOEJGMDdCOUYKKzoxMEI2QjAwMEQ5OUZGQ0VFNjE2NTZGQzZDNUUyQTk2MDA3OUVFQzJEQkYKKzoxMEI2QzAwMEUwRkExRUVERjVEREQzOERGOTRBNjdFNzhFRkM3RTM1OTUKKzoxMEI2RDAwMDFCOEM2RkZCMzQ4QzUzQzhGMUZGNkZGMTZCQ0Q3NDNFNDQKKzoxMEI2RTAwMERGNTc2NzdFNTZDMkNGREQ2NUIxRThGMzc2MzIxRjZDNTcKKzoxMEI2RjAwMDUxM0ZBQ0QxN0RDMjMyMUY5MEE1RjcxNTIyQkRGRjdEMTEKKzoxMEI3MDAwMDVBQkNFNzFFRTIzRjYxOEY4NERGMzA1RDg4RkZGQUVEQUYKKzoxMEI3MTAwMEY1OEYyM0REOTc2RDM4QkYyQURBMUIwQUNGNDNERDM3NUIKKzoxMEI3MjAwMDQxM0Y1MUY5OTIyRENEOUU3NDNBNUY5N0NBRjdERjg2NUIKKzoxMEI3MzAwMEE3NTQ3RDgwRTdCOUIwRkMxRDAzN0YxOUNGNkRCNTFDMDAKKzoxMEI3NDAwMDc5NTI0MUJGRTUyNzc4REVDRDFDRTkxN0UzQzM2RDBFQzIKKzoxMEI3NTAwMDZDMzdDNEUzNEFFMTI3MjkyRTlDNTUxQjU2NUEwQjIzMEMKKzoxMEI3NjAwMEU3ODM2MkU1NjJENjNBRTNGOUIzRDg3QjE0RTczOTdBMjYKKzoxMEI3NzAwMDM1NDVDNzdEODAzRTNBRDc5ODMzNDNFQ0RCMjA4RUIxMDgKKzoxMEI3ODAwMDVFMkFCNzI3RDU0QzEzQ0YxRjE5QTE3M0ZCMzJBRjJGRjkKKzoxMEI3OTAwMDI3N0ExRjQ0OURDMUVEODY3OUYxQUZERkE2ODNFOEZEQ0UKKzoxMEI3QTAwMEM3QTFCQjk2NjM5RUQ0QkM4NEQ3NkZDQjA1RjhGQ0ExMjAKKzoxMEI3QjAwMEVGMkRDNzNDQUE3OTk5QUY3Rjk2MEJGMkY2Q0I0M0ZGRUEKKzoxMEI3QzAwMDg3OTc4RjdCRkRCMzkxNjgyMzFFNkVFMkU1NTMxOTIxQTUKKzoxMEI3RDAwMEM5NzQzOEI4OUNGNjg3NjZDODdCMTM3QkU4QkM3NjJBQTgKKzoxMEI3RTAwMDFFQUM5OEY0Q0Q5RkFBRDUzNEU4QkE3NENDOTA3MTRCQjYKKzoxMEI3RjAwMDQ2RTdCM0ZEMDc3Rjc3MDJFNTk0NUZDNjc5N0RDNjdEOTYKKzoxMEI4MDAwMDRGMjZFRTREQkM0QUIyNTc4QThCRUNBNTJCRjE3N0MwODAKKzoxMEI4MTAwMEU3NTVFMkJFMUQ5MzJENEM3ODFEMTNCOUNGRTRBMUFGQkYKKzoxMEI4MjAwMDczREY0RUU0N0MzQ0JGM0ZBODY1MjMwQjE4RUY0NUY0NjMKKzoxMEI4MzAwMDA5RkVFNzc5NDQ3MjNDQjJGRjAxRTNDMjdCMDE5M0EyQTcKKzoxMEI4NDAwMEM3QjU4M0RBOTFFM0ZBQTRDODFBNTQyNjQ2RjY3MUU1MUYKKzoxMEI4NTAwMEI4M0U1MUZBNzY2MkQwQTNFRUQ4MkY1NzIwREQzRTcxNjQKKzoxMEI4NjAwMEY2RTVFMERGMzczOTNFRTMxREEyRTMyN0E5N0QzQjE1NkUKKzoxMEI4NzAwMDRGMTQ2Q0U2NzRGNDFFREU0RUY2NTQ0NTg2Q0YzQjIzMUYKKzoxMEI4ODAwMDE1RUYwRkUwRjcxNkI0MEIzQjcyNkI2QTIwODg3RTNEMTQKKzoxMEI4OTAwMEYwMUJFNTcxMDZCM0Y5Qjk4NkVBMTJFM0RGNjFBQjEwN0MKKzoxMEI4QTAwMEZDRjU5QjE5N0NGRjc4OTY3NTVCQzM2QjI1Nzg4RkJBODYKKzoxMEI4QjAwMEMyOUFBMTdFRkRGOUIzMTZGNEZCRTcxREU0N0ZBNzc1REMKKzoxMEI4QzAwMEZEODFCNzJERjQ3NzE5MTA4Njc2RDZFRkIwMENGQTc3OTQKKzoxMEI4RDAwMEUwMEVDRjUwMjVERDBERkVDQUYzRDlGOTZEMjkzMDlFNUIKKzoxMEI4RTAwMEY1QUJGOEZERDg4REJGNEU5Qzg1NzBFMzBBOUMyNUZFMTQKKzoxMEI4RjAwMDNEQkQ3REIzRjBCMzY1RkUyMzZERjg1Q0NFN0E5RkM3ODYKKzoxMEI5MDAwMDczN0Y0QjAyNDYzRkUyRkE1QUEzRERCRkFDQzE2OEFGN0EKKzoxMEI5MTAwMDJGREYwNkQ0MDFCREI2N0M2MzY2Q0MzRDdFRkM3RUMwQzUKKzoxMEI5MjAwMDI1ODI5RTRCRDJFRkVEQzE3QjA3OTZCMDk4RkIwMTgzMzkKKzoxMEI5MzAwMDNDOEU3NDNEOUYwMTNDOERGMTkxNzlGOEY3QTQ3MDFFMDcKKzoxMEI5NDAwMEVCNTQ4QUYzM0U5RkJENTlDM0YzNzBGNTBERkM1RUIyMTQKKzoxMEI5NTAwMDU5NUQ5RjVBQTgxQ0VBRTE3RTUzREE3MDdFMEY5RTk0Q0YKKzoxMEI5NjAwMDlGNTJCRjVGRkZEQzJFMzNDNjBCNjJFRjA5NUNCRTc4Q0YKKzoxMEI5NzAwMDBFREQwN0JFNTg1RkNCRjVGQjg4M0ZDRTRBODJGN0IxOUMKKzoxMEI5ODAwMEY3RkZENTc0NzFGRDVFQjM1MTA5RTE3REJCRDdENzFBQkUKKzoxMEI5OTAwMEZEODE2NUFDQTcwREZEOTk2NTBEQzZGN0NCMzcxQUUxQTIKKzoxMEI5QTAwMEVGQ0QxMDdBNkQxQzFCODdFQjYzRDMwQzQ1QTM3M0Q1QzkKKzoxMEI5QjAwMDAyM0U5REZEQzc1N0MyRDA3RjU1ODZCRjZEMDZGMEM5QjgKKzoxMEI5QzAwMDNBNEI3ODAyRUFCOUFBOEMwMEMxQjIxQ0RFQUZFNzdBMjIKKzoxMEI5RDAwMDg4RUI3RjEzQUMyNDkyQkY2NjFFQjcwOEQ2RjE3QkQ5RTMKKzoxMEI5RTAwMEFFMUY2MDBGNDREOTBCRUE0MEI4NEJDQTRGQkJGRjM2QkQKKzoxMEI5RjAwMEYyQzM5RTUzRThFRjgyNTc2QjNFMkQyOUNBNEY4RUU1NjYKKzoxMEJBMDAwMEMzNUYwQkJFN0U4NUY1MTZFMkI4RjI5MUU5ODAyRUY5OTAKKzoxMEJBMTAwMDhCRjhERjdEQ0UzRkJDODJGMjJDRjM4QjE1OEY4OUQ2NUQKKzoxMEJBMjAwMEIxODk2REM0RkJDNDQwNUVBMDVDNDBGQjEzRUZDOUM4ODQKKzoxMEJBMzAwMDU3M0IxNzkzOUM5RTY4NzFGM0ZCNzZEMjU5RjRGQUY3NDMKKzoxMEJBNDAwMDNEQzkxNEM0MTcwRTFERkJCRDJBQUI5QkVFREI5OERGNkUKKzoxMEJBNTAwMDcxRUZBNzI4RTdGMjQ2RjlCQzBGQzBGOEI2OEFGQkI0MkQKKzoxMEJBNjAwMEI3RkU1QTIxN0I3NjdERTEwQjI0MEY4NzAxNUI2MEJGMTcKKzoxMEJBNzAwMEVCRDM4NTVDRUMzMkRFODMzMTBDRTUxNDFFNjg5OTVCRjgKKzoxMEJBODAwMDQ4RkQ2NkM4RkQwNzk5RTcxQkFFQTI3QkE1ODY4OTdFQTcKKzoxMEJBOTAwMDdGM0Y0QkE3NzlBN0FERUQ1NDcwREVEOTJDRDg4QzcxQzAKKzoxMEJBQTAwMEE4M0QyODBCNTMyMzRGQjk0RjcwNEQ2NEZGQkMwMkU5RUEKKzoxMEJBQjAwMDU5OTdERTRCRjdDMkM4RkRGMzQxRUFDRDQ2QjkzM0EwMzIKKzoxMEJBQzAwMDlFOEYxOUYyODA2NkE5RTc1REI4QkZEREY4RENBODhCMTAKKzoxMEJBRDAwMEU2NzVBODM2RTNGRDkwNjZCN0YxN0VDOEFCMEE4Q0VCM0QKKzoxMEJBRTAwMDdCOUVDN0I4QUVBRjJFMUI2NTI4NUZFMDFCNjcyODVGNDMKKzoxMEJBRjAwMDM0QTdEODAwNUZFMzlGNkFBODdGRERFMjk5QzYzODQyODkKKzoxMEJCMDAwMEJBRjE3RTQ4QkI2RUJDMUYzMkJFQzA3ODNGQTREMzYzN0YKKzoxMEJCMTAwMEJDMUY5MkE1NzQ1MjVFOUFDNTE2RUMwREU4NzhCRjAwNjIKKzoxMEJCMjAwMEJGODc1NkNBRTk3MTJFMUI1RDJBMTc1NzZDNzdFMEIzQTEKKzoxMEJCMzAwMEJEQzgxQTQ2QkFCNTBGRTdGQkI5RDYxNzZGNEYwRjIzMkEKKzoxMEJCNDAwMEQ2MTNGNkRBMkFFMUY5QjQxMkFBQzJGRDI4OUJGMDFCM0IKKzoxMEJCNTAwMDJGQkI4QjE5RTRGODk1MzNCOTFDOTc0RkU2MEJDNDU3RUMKKzoxMEJCNjAwMDYyNUM3NjhGOUVDOUYzQjY3QjJFQkI1ODdFQzVBNTNFMjAKKzoxMEJCNzAwMEZGMkZDMjc4NEI2QjAwODAwMDAwMDAwMDFGOEIwODAwNzUKKzoxMEJCODAwMDAwMDAwMDAwMDAwQkVENUE3RDUwNTQ1Nzk2M0ZCN0ZCNjQKKzoxMEJCOTAwMDc1RDMwRDg4MEQyODFGNDFGNEExQTAyNjIwNjk0MThDODIKKzoxMEJCQTAwMDRFNjYzNkFGQkI4MTY5M0YzMjY5RkM5ODYwMTBEM0VDQkEKKzoxMEJCQjAwMEU4MTYxMzgxMjZEMTRDOTFBQUREQTI1NTg2MzQ2NkZFODMKKzoxMEJCQzAwMDQ4QUM0Q0M2QTQ1MkI1QUQxNTMzOTlBOTcxMTcxMzU2OUMKKzoxMEJCRDAwMERCNERFQjM2MkFBRUM5OUFCMUREMzExOTREMkEyOTc0RjUKKzoxMEJCRTAwMERENENBQzhDMEEzMUUzOTg1RDc3REQ3M0VFN0Q4RkVFMzIKKzoxMEJCRjAwMEQ3M0MxMkIyMzU5NUFBOUQ1QTI4RUE3MkRGQkI5RkU3NUYKKzoxMEJDMDAwMEZCRkNDRUIzQTUwM0MwMjJGQzNCNjgwQkVGMkIwMUI4QjUKKzoxMEJDMTAwMDk3RTFGRjRCMDFFRUQwQ0YwMzAwQTdFQjVDMTZBNTA2MjIKKzoxMEJDMjAwMEEwRTJBRjk1NjUzMDBEREY0NUMwNTE4NkUzRjY1QTQxN0QKKzoxMEJDMzAwMEExN0VGMEEwOTVDRkFCODgwQzlCOTRDQ0M0QkNFNzE0M0MKKzoxMEJDNDAwMDVDNjgzQUMwNEY3REVFNjVCNDdFNDc5NDM5MDBDNzc1OTUKKzoxMEJDNTAwMEVDQkU2NDk1MkJBODNGOThBNTYwNUJFOUJCNjQ4NUNDREUKKzoxMEJDNjAwMEU0RTcxN0FERjRCQzQzMUE0OTc3NjBGQkY3RkQ2NjZGNTQKKzoxMEJDNzAwMEI4MjJCMUFFRDZCQTE0MkI1RkZGNjQzMUI2Nzg4RUU2MjcKKzoxMEJDODAwMDI3Q0RFMTM0M0EzQjI4MkI1RDhCMDExQUU5NUYxOTlGRTAKKzoxMEJDOTAwMDFGMTg4OTk5NzFGRkU2NzZFNjBDRTJBMzQ2RjlCMTk1ODMKKzoxMEJDQTAwMDkwODVGRkY4MkQ5Nzg2NkQwMDM2RkNCRDMzMUJDRjU5NkMKKzoxMEJDQjAwMDk4QjUxN0VFRTVGMzAxRjIwMDFFMDVGMUYzQzg5Mjk4NkUKKzoxMEJDQzAwMDA1NEMwMDREQUQ2MjNDRkREQ0MxQkY0N0Q3RDQ1RjYxODAKKzoxMEJDRDAwMDk1Qjg2RTY3Q0FGMzE5QkRBM0U2MkM5QTJGNUQxQTlFMUMKKzoxMEJDRTAwMEFGM0UyN0JBMkE1M0E2N0Q1QzhFOUQ3MkE4QjgzMzA3NTMKKzoxMEJDRjAwMEUwQkNDRjY0NzhBRjg3M0MxMkJGRDc3OUJGODdEM0ZCNTYKKzoxMEJEMDAwMEE3NDgzNzMzMjMzQUE2RDI0OUQwRUZBQkU4QjMxRkNGQzkKKzoxMEJEMTAwMDlFQ0NBN0Q0NzE2QjNDODI0RkZCMTkzNEY2Njc4RTdGQTMKKzoxMEJEMjAwMEZGMzM5NThGN0I1OUJDMEFDQzAwMDExRjBBQ0M1NEE0NjkKKzoxMEJEMzAwMDg3QUQ2NUYzRTU2QUEyRkZDRDVFNDZGNEZGMDcwNjY5QUQKKzoxMEJENDAwMEI4RkUwNzgzNkZFNUM5NTMwMEFDMDc4NkYyODY3MUJENjQKKzoxMEJENTAwMDQwRkY1MDFFMkMwMDY4QjNDOERCQTQ2OTVDMEU5Q0RCNUUKKzoxMEJENjAwMDkwMkYxRDkxMTgzRjdGN0I3RkY1MjAzRDZGOEYzMEE3NkYKKzoxMEJENzAwMDFEOEYxQTE4MThBREU3Rjc4NEUxNUU0NzI2RUQ2QjdDM0UKKzoxMEJEODAwMEFFNjZDNUM0Q0ZENUFBQzhCQzBERjg3MUNGNjkzNDNGMjMKKzoxMEJEOTAwMDJEMUM2NkM0Rjc2MTJCOTc4QkMzMEM5RUM1RkVERTNFM0YKKzoxMEJEQTAwMDVCNjNEODYwOUQ3NTQ0NkY5NEVGMTM3RDU2OTA1MDRFNDEKKzoxMEJEQjAwMERBNzAzRURERTM2NEYxNDlBQjhERTRFNjAwREU4QkQxNjEKKzoxMEJEQzAwMDNEQ0VBRUNEQTBGNUI3NUE0MDY2ODlGMzVEMkQ4RTdGOEUKKzoxMEJERDAwMDQ0RjdCRkIwRDEwMjQxN0NCRTYzQTM5OUQzRkJDMjU2RTYKKzoxMEJERTAwMDMzNUZDN0JDRTlERjdCOEJCMEJGMEVFNTJGMEQ4RjdBQzkKKzoxMEJERjAwMDdDRTM4RDkzNDVCOEVFODU1NkVDRTM3RDNEOUIyQzVDNTIKKzoxMEJFMDAwMEZGRDYzRENFRjhGODU0RjlENUU0RjUyNTU1M0VEN0Y5REYKKzoxMEJFMTAwMEY1RjI5NjJBQUZFM0U0QjRGNUVCQzk2OTBGQzk2OTA2RjgKKzoxMEJFMjAwMDk3RDNDQTNCNjZDRUY3QkE3QzkyOUZBN0MwQjk4RkY0NkUKKzoxMEJFMzAwMEU3RjY3MTRCM0U5RTc3NzZBRkMzQjkxREZCMEJDQ0UxQTUKKzoxMEJFNDAwMDFGRTc5MTVEMzgyRURFMkY2Q0RCQzM0ODVGRjBGMDhGNkIKKzoxMEJFNTAwMEQwQkQ4QTQyNTZEOEM5NDg4RTA0QkY3RUE2RjI0Qjg2MTIKKzoxMEJFNjAwMDExOTY0MUZBMkFDNTY3RkI1MDNFNzA2Qjg1RjhGQ0JBMDMKKzoxMEJFNzAwMDA1MUEwRjU0RDA3MzYxNUYxNjFDMkFEOEIzMzM0OTZFNkMKKzoxMEJFODAwMEVCNTU3OUI0OTlDMERGOEZFM0NBQURFMDNGOTA0OUUzNDkKKzoxMEJFOTAwMEZCRUY2QUMwNzVGNkUzN0M3QTNFNTM1REFGNkNDRTQ4MkIKKzoxMEJFQTAwMDdEMDNCNjg3Njg3RkU0RjMxRUY1MUM1QUZGMDcyNEZGNjUKKzoxMEJFQjAwMEQ4QzJDQjI2MDY0OEY3MDc2RDgyRUVDQkJCNjJFQkU5MTIKKzoxMEJFQzAwMDFFOEI2NkY4N0Y0RUY2NkZFNUNDRjdEQTAwRUQ0NDY4MUUKKzoxMEJFRDAwMEY2REIxNTdFM0ExRjM4NEQ0NEY3ODA0QUY3RTM0QjdGNzcKKzoxMEJFRTAwMEY3RjIxNkJDQUZGREVFNzRDRUQ3ODY2MzJGQzY4OUNGQUUKKzoxMEJFRjAwMDFEQTUxMjEwREZFRDY1OEJGMkZEMDZGMkE3QjU4MTVCODMKKzoxMEJGMDAwMDI1RTBDRjRERjQzQkEyQTNGNThBODE1RTZGNTBGNTc1MTUKKzoxMEJGMTAwMDgxNTVEQzFGQTI0OEE0NDI2RThGQTUyNTU1ODk3MURBOTAKKzoxMEJGMjAwMEZEMDFCNkYzRkJEOUNCNUVFMTdDREFGMjM4MkMzNEYzQjkKKzoxMEJGMzAwMDEzM0ZDN0Q3Njk2QTNCQ0I1QTcwOUQ4NzJEOEEyNTEzNUIKKzoxMEJGNDAwMEU5RkNERUQ0QzZDRDk3Q0IwMERFRUU0NjEzODkxNzM5NjcKKzoxMEJGNTAwMERENkQwM0ZGM0M4MDVGNzczQjc4M0ZERTVEQzBGQkZGMUMKKzoxMEJGNjAwMERBMkRGMzc2REU0Q0RGREIwQUFFQjNGNjQ0NjcxOUQxODcKKzoxMEJGNzAwMEVCNzhGMTBCM0UzN0VFNzNGREI0ODVEMzAxQzBDREU5MEMKKzoxMEJGODAwMEI0NDU5NUJEMUI1MTMzRDhGMEZEOEQwMTE2MDY5NjM4OEEKKzoxMEJGOTAwMEZGODY1QjQ1RTA0NzdCRjIzRUVEODcxM0RCQkI3RUMzNEMKKzoxMEJGQTAwMEVEOUNCMzc1QjQ1RUNFMjRCOUJBRDg0QkZENDBENzFGMTMKKzoxMEJGQjAwMEVBMDFEQjhGRDA0RjkwN0MwNTIyMEMwQTcwOURGNUI3MEIKKzoxMEJGQzAwMDcyRjlGQ0Y2Qzg1OUFCNEM3MjYwMUFBOTI3RkEwNzhGQjAKKzoxMEJGRDAwMDMyMjBCOTBDNzQ4RTcyRkJGOTMyREU0QkMxNzNBN0JCRjEKKzoxMEJGRTAwMEIyMzk1RDAyRDE4NTI2QzFDRjQ1MjZFMkZGMTMyQUZGNzMKKzoxMEJGRjAwMDA3RUZGOThGMkNCMjVGQjYyRUY5Q0NGREM0Qzc1MzY2OUMKKzoxMEMwMDAwMENFQzc5REVFOTEyQzg3MDE1RkNFRTNCQTkwMjZDRTRGMkUKKzoxMEMwMTAwMDZERUFGQjQ2NkJCMENDODlGMzFBNTVCOTREN0Q2Rjc1NEYKKzoxMEMwMjAwMDA5Qjk0NDBBNUI3QzUzMDRBRDE4RDI2REJEMkE1RkNEQkIKKzoxMEMwMzAwMDc4OTVBOTM5RDg4RkIwNTgzQUVBNkQ3M0Q0NzM0NUEyNzAKKzoxMEMwNDAwMEI2OTNDMTI1OUQzRDAwQjhBNEU5QjM3OTYyNzk5QjZDOTQKKzoxMEMwNTAwMERCNDFFQjk1MjVEOTRCM0YyRTNBM0ZCMTVGNTM2QjA2NDEKKzoxMEMwNjAwMDM5RDFBNEZEODNGQzFFNjlDNUE1Rjk3RTgzN0I4RUM5RTkKKzoxMEMwNzAwMEZCNzAxMUM4QzhBRjhFMTAwMzE5RTVCRUZENTYzOTZGQUQKKzoxMEMwODAwMEFGMUQ3RTVBMjYzREIxQTU4RkJDNDA3RTAxRTY5QTFDQUQKKzoxMEMwOTAwMEZCOTBCRkVENDE1MDkyRkREQ0E4NUJFOEVEQTg1QkU4QUEKKzoxMEMwQTAwMEYxNEMxNzkzM0VCNjcxQkI1NTRFRjc3NjE3RkE0QjVDQzEKKzoxMEMwQjAwMDc4OEVERjE3QkY5Nzc1MEMxRkI3NTk2Mzk1NjBGQ0JDNkUKKzoxMEMwQzAwMDAzRDAxRkRCNDg5RjcwREY3MkU0Q0ZFQjA2RTdCRUU5QzkKKzoxMEMwRDAwMDc2Q0ZBNTc5MzNFMTU5MkVERjgwRjI0RDcyOTU3QUNGNzQKKzoxMEMwRTAwMDg1MkU3MTJFNEQ5RkQ3MURCQjYyMUQyNkI5OEQxOEVCNzUKKzoxMEMwRjAwMDMzRjNCODE2RDJCQTdEMDA1RTIzM0ZGNzQ3RjU5RUVEQzUKKzoxMEMxMDAwMEJCMTlBNzU3NjA3NzJFQTdEMzU1RDhFRDczQTM1QzVFRjQKKzoxMEMxMTAwMEM1NzNFQzQ1QjlCQ0VFRjM2NTY0RTNGQ0VCN0U1RjQ2QUEKKzoxMEMxMjAwMDRFNjY0MkZGM0I3NjY3RjA3OTdEQTVBQjcyNUJCMDVGRjAKKzoxMEMxMzAwMDRGNzI4RkZCNUQ4Qjc4NkM0NEU3MERCQjg1REU2OUZCMkUKKzoxMEMxNDAwMDdEMTQ1Qjk3NEJGQTUzNjMxOUIxM0FGMUZEOENFOEM1NDYKKzoxMEMxNTAwMDJDOEFFQjZBMEVBRkNFMjVGRDlCRTg5QzhCRERDMjJFQjAKKzoxMEMxNjAwMEI1Nzc2REQ5N0MzOTU3Qzg4MzE5RjU2OUIzRUFDNzAyMjkKKzoxMEMxNzAwMERCNjM1NkEyRkZFNjJFRTBGMjNCNzhGMDgzMEVEMkRGQkYKKzoxMEMxODAwMDZCRDEwQzA3RjlCREFCNDczMjgyNjRFRkFGMUY0RDBCOEIKKzoxMEMxOTAwMEEzMjU4NjM2OTI3N0I0Njc1NzJEQzNERkUzRjFFMzYxQjkKKzoxMEMxQTAwMEIzMjM4OEUzMDI0NzNGN0Q4MUY0MzE3MDEwQjUxMUQ3ODYKKzoxMEMxQjAwMEREMUM3RDdBOTRGQzVCNUI3NEQ5MTU4OURBNUY3REIzRjUKKzoxMEMxQzAwMEZBRDBERUY1MjM3RTVGQURGRjY5Qjc0RDI2RkI3OTRERDIKKzoxMEMxRDAwMDEyNzY2MjczRTQwRDFFQ0Y2RUJFN0RBM0QyNTc0MUY3NzcKKzoxMEMxRTAwMEZDQ0ZDNTY0Q0YwMkZGNzQ2MzMxRDlCMUMwOUIzNzE2NTEKKzoxMEMxRjAwMEQzRkJDMEExOEM0RUEzRjhBNEQ1NjNFNkZDRDdGQzYzQTcKKzoxMEMyMDAwMEM5Mzk0OTQ5MUU5N0FERkFBRjkyOUU2N0JEQjM5MTdFNzkKKzoxMEMyMTAwMDM1NjdENzM4Q0Q3MkUyN0Q0RDk5Qzk0N0UzNkJERUFEMDYKKzoxMEMyMjAwMENEREQ5NDM0QUYyNzJFNzlFOUY5QTJCM0I1MTkxQjkzNkMKKzoxMEMyMzAwMEU0RDJFQUIxQTg3NjA4QjUxQUVEQ0YzQTk1ODZFQjBBQjIKKzoxMEMyNDAwMDdFMTIzNzU3NTI1RjBBQUE3MTA0QkJDM0UzNkQ5MDI1NzMKKzoxMEMyNTAwMEU0NzMxM0ZEODdBQUQ4MTc5Nzc4M0MxMzZDMzU4N0NCMDYKKzoxMEMyNjAwMEYwN0Q1M0RDQTREODJCRTkzRENFNEI4QTMzMDA3QzJCRTgKKzoxMEMyNzAwMDE2MTBCRjdGMzhEREI5NTNFNkZFMUVCQUE5RkY1NDU5MjgKKzoxMEMyODAwMDk4RkMzRDA0NkQ0M0E1NDk3MUQwQkFCODI5OTY4NjcyRDEKKzoxMEMyOTAwMEQzMTg0RDhCNTEzQ0I0MkUyRTVERTQ3RDM1M0VGQUM4NEIKKzoxMEMyQTAwMEYxRkE4RjY3MDM4RjhGMkUyN0M3MzkxODBGNURENkM3MTYKKzoxMEMyQjAwMDRCMzA4NUNFQUJDNTRCRUY1MTVDODVGMTZDRjNENjk4MTYKKzoxMEMyQzAwMDg1RkMxNUM2NDlCQUYxOEYzNjdFRjcwQUEzMzhBOTRCMEIKKzoxMEMyRDAwMEZGQkMyNDJFOTkxRUM0N0I5NkEwQjkyMzMyRjRDNTlGQkYKKzoxMEMyRTAwMEI3OTE3RTY4NzEyNkYxNkJDMDQwREYyQjU1M0REMUY0Q0MKKzoxMEMyRjAwMEE4Mjc2RUUyN0NFODg5QkI2REE1RDhDRTUzREYwRjM4NDYKKzoxMEMzMDAwMDRDMTBDNEY1N0JBMkFCRjczMThBQ0I2RTNGOUM0MUY0NTUKKzoxMEMzMTAwMEVBMzlCNzBBQjY5M0JFM0JEQ0I2MzI5QTc3RkJCQkI2QjYKKzoxMEMzMjAwMEI1MTUwOUY5MTg2NzNGNUNBQTdEMUM4QjA3OENGRERDRUQKKzoxMEMzMzAwMDI3MkUzNUFFRkE4NkZDRERFNTNGMTc3RkE3RjgzRjI1QUYKKzoxMEMzNDAwMEZCNURGMTlBREM0NEYxMjFERUU3MUU4QTY3NTNGRDg0MzAKKzoxMEMzNTAwMDY2N0ZCNTc1OEI1NDNFOEZCN0JGNTc3OEZDODJGOTJGMzcKKzoxMEMzNjAwMEI3QkY0NTZFOTk4RjlCMTE2REM4RTU3OUYxQjkzNUI5QTUKKzoxMEMzNzAwMDcyRTZGOEY1RTc0ODRFNTM0RUM1RjhGNUI1NzgyRDEwM0UKKzoxMEMzODAwMDU0ODY2Qzk0QzcyODY2QUU5RjgxMzUyQ0NDQThFRjYzODkKKzoxMEMzOTAwMDNDQ0UwRUFDQjc4NEU5QkQ3NjlFRjgxQUM2QzdBRDc1MjMKKzoxMEMzQTAwMEIyQjA5RDI1RTIzRjJEM0UxQzdCQkYwOERGOTcyNEUyMDMKKzoxMEMzQjAwMDQ1MkQyRThDRkIxOENGODNENjI4MTZGRTdFREU0QzdGQjMKKzoxMEMzQzAwMDhFQkI4NkVFNjdFN0NGNkI5NjhBNzVEMTBFMEM1MTdFRDkKKzoxMEMzRDAwMEY0RjBGNzE5NzAzQkEwQzY4QjlBN0NBNkM2OTM5RjQ1RDQKKzoxMEMzRTAwMEU3NEM4NTJGODkyQjVFNTZFNTUyRDNBRjk5Mjk3QUExNjgKKzoxMEMzRjAwMEY5QTk3QUQ1NEY3NzkwOUZBRTI2M0ZGRDg1OTVGNDYwRDkKKzoxMEM0MDAwMEEyQjgxQkZERjQ1QzM3OUYwNzdDRkVBMjc3MjU5RjUxRTUKKzoxMEM0MTAwMERFN0Q1ODVENzdCMUM2QjdGODA5MTc5REI3MThFMkRCMjYKKzoxMEM0MjAwMDI4NUY5Q0M4N0ZFNjc5NEMzQUJCOTBGQUJFN0U5MjdBMzAKKzoxMEM0MzAwMERDQTJDNjBCREY5NDFFMzdBQkYxRDdGRjc1M0QxRThCMTgKKzoxMEM0NDAwMEZGQUNDNkY3QkNFOTc2RkQxNUM5NkZCQUI5MzNFRTIyNjkKKzoxMEM0NTAwMEJERkIxN0Q0M0I3OUZDQjgyMjJEOUY5NDQwQzc5RkExMDgKKzoxMEM0NjAwMDYyQUI4OUYyOUU0MEFCQzAwMTQyRDlGMjE5OUU5RkJDREIKKzoxMEM0NzAwMDY1MDY1QTY3RjNBRDQyMUVBNzNENzYyQjlCQjdBMTQyRDYKKzoxMEM0ODAwMDEwN0VGNEM5MTI4RURCM0NGNkRBNTk4QjgyRjM5QkI2MzAKKzoxMEM0OTAwMEIyODU4NDA3MzVCNUVBRUYxMzlBQUU3MDlDMkQ3ODg0ODcKKzoxMEM0QTAwMEYxNzgzOTU0RDg3RjkyRjQyQUI4NkY4RTRDRUIzN0QzOTkKKzoxMEM0QjAwMDY1MDkwRjY5Q0QwRUVGMjBGQzgyNzA5QzdCRTk3OTdBQ0IKKzoxMEM0QzAwMDgyMEVCODRGQkJGQUZDN0UxNURGODE5NDM4RTBDREMxRjcKKzoxMEM0RDAwMDBCMUNFRjA5MEMzMDIwRkRCNTQ2RDE3RTkwM0QzOTI1NkYKKzoxMEM0RTAwMEYwOEU4RUE4QjAwQjlGNzREOUI5M0RGOTQ0MTJGNzA4QUQKKzoxMEM0RjAwMDc0QjFGMDM2OTY4ODIzQUU0NDlGQ0IyMzNEMUIxNzRGNzMKKzoxMEM1MDAwMDI4MTg0RkU0MjVFMjg5RjY1N0RFRTVGNjMwMzU3RUM4NzcKKzoxMEM1MTAwMDE5MTBGQjA0REFDQzYxQzI2Mzg2OEExNzMzRUFCNzYzNjkKKzoxMEM1MjAwMDNFOTg0RjcxQTIyQzNGNTQyNENFMDU2MTZFNTcxNDFEQzYKKzoxMEM1MzAwMDRFQjJGNzJFRTFGNzNGM0JGNTZGM0M4RjZDM0FDQzIwQzMKKzoxMEM1NDAwMDk3QzcxRDRBQkMzNDJGMTE3NzNDMUE1QUNFRkRCRjE2MkYKKzoxMEM1NTAwMDY3M0MzQUVCRTQ1MDExQURBN0M2MTkwRUZDMjVGQzMwNDAKKzoxMEM1NjAwMDM1Q0VFODg4OUNCNTUwNUUzMDJFOUU0ODg5MjM1RTc3OTQKKzoxMEM1NzAwMEVCNzFDMTU5OTJDMDU5Njc0NTk5ODNGMEE0NTkyQTNEN0UKKzoxMEM1ODAwMEVGRUI0QkU3NzE3MUZEODcxQjczNDlDRjM1RkU1QzZCOTkKKzoxMEM1OTAwMDEwRkNCQTc2RTE3MzE3Q0Q1QkZDQTFFNDIwN0JGQkU2Q0YKKzoxMEM1QTAwMDg1QURCRjI5MTI3REQ5MjZEM0JDQUQxOTk0ODc1Q0ZCMUMKKzoxMEM1QjAwMEYwODkwQ0EyRTc5QkQ4MDJFQUVCQTFGMzkyMjE3RTI4MzYKKzoxMEM1QzAwMEFCRjYwOEZEREIzRkJCMzlGRTJCMTc3MTVDNDc0MkZGMjIKKzoxMEM1RDAwMDM2MjU4MUJGQTRDRTdCQzAyM0VDNDEwOEQzMEM4RTNCMTMKKzoxMEM1RTAwMDFFMDYyRUJGQTE0MkZGNzJERTdGNzEzNkVDRTNCODhGQ0MKKzoxMEM1RjAwMDkwRDczN0EyRDkwRThBRjdDQUYxQjI1RDY4MjdGRTJFMEUKKzoxMEM2MDAwMDFEN0FFQzU1MjRDRkZFQjdCOTdFQkM2OEUyRjI4QkYzRkQKKzoxMEM2MTAwMDgzOENGQTA3NjRFRUVGODg2NEVCNzE3Q0E1MTVDRjUyMkEKKzoxMEM2MjAwMDA1NjIzM0Q0Qjc3QjU0QkUxNTYyMUU0QUY5MjA5RTY2NUMKKzoxMEM2MzAwMENEMURBNDUzRjk4QzUzNUYxMDFGMkJEMzQxQTJGNTlGM0UKKzoxMEM2NDAwMEIxRjg3N0RFOEQ1MzlFMTk5NDlDREI2ODhFRTRDQzZEMzcKKzoxMEM2NTAwMEMwN0IzRDYzMTc0QjNENzMxOEU1MTVDRjg1RDJDRENGMTkKKzoxMEM2NjAwMEQ1NTE3MUYyM0NDRDY3QjIwM0Q2RTNGQzhFODJDQzE4NzMKKzoxMEM2NzAwMEUxNjcxMEIxRkM3RTRDMkU1MTBFMThFRDUzMjlFNEVEMEMKKzoxMEM2ODAwMEUzRjkxNDFCMkFFQzBFOUE5QUI3RUI2NDYxMTdCRUVGMUMKKzoxMEM2OTAwMDAzQ0E4Mzc2MkNFOTA0Q0EzQjRGRDY4MTFBMDdEOTgyOTQKKzoxMEM2QTAwMDk3NzFGQzVBOUMzMTE1OUY0RjJGRjQxNzUyNUNEMTVFNDUKKzoxMEM2QjAwMDMwNkMxNTcxQzU4ODk1RTI4QUI5MkU2REJDQzBFRDRDMDEKKzoxMEM2QzAwMDM4OUVFQ0U1Q0VGOUFGNzM3OTZCQTJFNzQ5RkEwQ0M5NTUKKzoxMEM2RDAwMEY4OUU3OTdDQkZDNTNERDFGRUIyQzhFNzUyRjY1Rjk0QTMKKzoxMEM2RTAwMEZENTkxRUNGNUZGRUVCOEY1OURDOUY0NTZGNzBCRjczMDYKKzoxMEM2RjAwMDdEMjQwREUyMUNCNzFCMTYzODc1RDRDMkYzRjVFQjk4RjgKKzoxMEM3MDAwMDA3NEQ0RkYyNjczQjVDODIwRUM3QTIxRTJFOEYwM0YxQ0UKKzoxMEM3MTAwMERBMEMxQUZGNEI5N0Q4QUZFRkRDOUFENTBGOTI5Q0M0NzYKKzoxMEM3MjAwMDI1NjcxOTNGQTVDODZCMDZFMjUyOEQ4ODBGQzZEMUE5QUYKKzoxMEM3MzAwMENBNkQ3MDRFNUJCQUIwRTdBOUYyNzlDOTJERTRGQTEyNUUKKzoxMEM3NDAwMEREMUJDRkUxQjkyMEYyOTVDMDU2NTEzRjcwQThGQTE2MTMKKzoxMEM3NTAwMEU4NjREQ0FFOUMyQ0NFNjMxQThFOUM2RjU0NUYzODNDMzAKKzoxMEM3NjAwMEMyRUQ2Q0YzMEY5OTMzMjg0RjVDNUZEOEE1RTYxOUE5ODkKKzoxMEM3NzAwMDc2QTgyMzcyNDBGMDJEMTVCN0Y1RDY3M0JCMzM1OURDN0MKKzoxMEM3ODAwMDE2MjgxQjVFOUNCMEQzREZGMUE4NzY2NTgxQzA3MTRGN0YKKzoxMEM3OTAwMEI4MURGQ0JFMzk5RDBCNURGOTkwQjhCRjAxM0RGNzdCMUMKKzoxMEM3QTAwMDZBQzZEM0QzNjA1Q0I0RDY4MEVFMDZFM0ZFRjBDMEU0ODQKKzoxMEM3QjAwMEQ2QUI1NjI2Qjc5RTZCOTJFMzVBOTRDOUVEN0I2ODkyMkUKKzoxMEM3QzAwMEVCRUQ5OUU0N0E0RjFBRTkyREIyNURDNDAzMEUyMTM3REYKKzoxMEM3RDAwMDc1RTZEQjU5MjRGRjRGMUM5OTkzRkY2NUYxQUMxOTBERTkKKzoxMEM3RTAwMEFEOUNDNDdGOEIyMzFERTQyNEJGQkY2MjdFQUVBRUZGMzEKKzoxMEM3RjAwMEEwQjM0ODM3RkVBMTI1NzM3NEVGMUI5NDcyRERGQkQ1RkYKKzoxMEM4MDAwMERFNkE1RDdGQURFRjdFRERGODg3MUIzREJBN0U1QUMxRTMKKzoxMEM4MTAwMDcyREQ3OEJCQkM0QUQ3Q0Y5OEZGODg2RTdDMDg3NTY2RkUKKzoxMEM4MjAwMDA5REFDRjM0NkI2Njg4QTFGQzRGNzFGRUE1NkU3QzdBNjUKKzoxMEM4MzAwMEI1M0Q5M0Y0MjJCNDMwMkQ0NkYyOUVGNkQ2QTYyMEJEMjcKKzoxMEM4NDAwMDdCOUFGRDY0MjQ0NkQ0Q0QzQUQ4Qzg1MDY1QTVFQzU3RjAKKzoxMEM4NTAwMDZDQTQyNzJCOTc4QUJBNDA1RkFEMkRCQzg3RTI5Q0JCQTYKKzoxMEM4NjAwMEIyMkE2OUJFNDZBRjdENzUyMkZFNzI1NDhDMDY3MzkxNjIKKzoxMEM4NzAwMENFMzM5NTc4NkQyRUVBRjNGNUE1QzBGMzg3RUI3NjUxQUMKKzoxMEM4ODAwMDFGMDBDOTUxRDhDMEY5RTcyODVDODU3NjNGNjQzN0FFRjAKKzoxMEM4OTAwMDMzMzVENkE5NzlGMTA0RjZFNDc0OURFQjE3QTQyRjBFNzUKKzoxMEM4QTAwMDhBQ0IwREY4QThBODc4QkQyMzAyMUNCNzAxNDkyRTVDREQKKzoxMEM4QjAwMEM1Rjc5NTBCQzlERjRDM0QyMTlFNjdDNTQwRDlDM0NGNTUKKzoxMEM4QzAwMDI1OTdBQ0UyNzFCNDVDNDJFN0RCQTVENkJGNzI5NkNGODgKKzoxMEM4RDAwMDJEMjFCQzJFMDdGRDJFRDU0NzlFQTMzQTA5Q0YwMzFDNjAKKzoxMEM4RTAwMDdDOUNCNjlGQjM1NkVDQjdDQjAyOENFQTU5QzFCQjE5RkUKKzoxMEM4RjAwMDhGNTNDMTMxNTU1N0RGMzg2RDg5NUQ2RTYxQkNCRTcxOTQKKzoxMEM5MDAwMDgyQ0VGRjhFMjk1NkIxQjc0NEYwODVFODVCMzFFMEUwNzYKKzoxMEM5MTAwMDc1OTc1RjJGRkRGOTdDM0ZERjQ3RDQzQkI2MzhDNDkwNTUKKzoxMEM5MjAwMEUzOTQ2RkUwMzlCNjFDQTlFNkYyREI3NDZDRTk2RkQ3Q0IKKzoxMEM5MzAwMDUzNUM1ODJBNzEzQThGOEJDN0Q1M0NFQkJDOUEyNzZBNTcKKzoxMEM5NDAwMDc5RDYzMEU1OEI0OTc5Qzc3OThGNjkyMkJCNzRERTYzNkMKKzoxMEM5NTAwMEEwNTdCQjk4Qzg4MzgzRUY4ODNDQjhEQUVBOUNEMzk5ODgKKzoxMEM5NjAwMEM0QTdDQjZBM0NERTEyMTM3OEFDOTZERjU2MkE2MTUzMUIKKzoxMEM5NzAwMDFFRDJBMUZBMjk3MzJDMERGRDc1NzVFRjAyMkJEOUVEOEUKKzoxMEM5ODAwMEVBREVFMjc0OEUyRjZEM0M2MEQyRTg2REM0Rjc2QkVBOEMKKzoxMEM5OTAwMDM5RkI0RThERjBGQUM0MUIyOTc1NEE2N0FEOTVCRkZGNzAKKzoxMEM5QTAwMDVCNTUxRTlEQjVDMERCMkQ2NUQyMEU3MkMzNTNCRkVEMjYKKzoxMEM5QjAwMDMwMUJFMUUzQ0QxOEZGRDNGOTVBNDJFMkJDNUEzREE0NDMKKzoxMEM5QzAwMDM5MjY3QjY4OUY4QjQzMjNCREQ0NTZCNTk2NzgzODdFMzUKKzoxMEM5RDAwMEQ4MzZEQTRCRkUzMzcwRkJDNkM5MDczODFFNjA5NTI5N0UKKzoxMEM5RTAwMEJFNEE1REY3NTA5RDk5Q0JDNTFCMTQ5MDEwQkQ5NjQ5NkEKKzoxMEM5RjAwMDYxMUE1N0JENENFMkZDQ0U2OUI2RjM3QzNDQzcwMkU2MzcKKzoxMENBMDAwMDRDRUEzNzA4N0Y1NkU1OURFNkExM0VBQ0M5RTZGRUI4ODQKKzoxMENBMTAwMEVBOTQ5Q0JEQTkyMjkxRUZFNzJDREIzQTlERThGNDU1RkUKKzoxMENBMjAwMDc1MjIwRDM3OTgzNzUzOTk0QTdFRTNFQkQ2ODlEQTRGNTIKKzoxMENBMzAwMDlGQjNEMkJEMzcwQ0VCRUI0NDVBREQ2N0EyM0E5MTU2NTcKKzoxMENBNDAwMEE3MEQ3ODNGRDdENTk1MDNEMjQ4M0RFMTJCRDU0NzJFOEEKKzoxMENBNTAwMEYyM0E3MTIwQzIxQzA1MjU4OUZBNTE2MDYwRDRDQUU5RjYKKzoxMENBNjAwMEFCRDY4RDcwQkM5NUU2MEQ3NDhCRkFEMTQxREM5RkRBQTQKKzoxMENBNzAwMDA4REU1N0MxNzNGQzIzREU5N0RBMjhERTk3OUUxRkVEOTAKKzoxMENBODAwMDlFQ0ZEQjU4Qjc5M0I3QzdCQTk3RjBCNjFBQzVBNjMwOTIKKzoxMENBOTAwMDg3RUE0RUEzQkNFRTU0NTNBQkFGNUI2ODc1MDk3N0ExMzAKKzoxMENBQTAwMDZGNDk2RDhEQUU2RUMxRkJBOTc1MEI3M0JBQzg0NzAzOTQKKzoxMENBQjAwMEE3MkNDRUJERjgzQzcwREFDNkVEQUMyQkRBMzI4QkUyOTcKKzoxMENBQzAwMEIyOUI2N0ZEQjMxQ0JDMEU5MENCRjNDQTMxRjk1NTlDRTkKKzoxMENBRDAwMEY2NkNDQTA3N0M0RTNCRDUwQkFBMDdBRjU4NjU2RTc3M0MKKzoxMENBRTAwMDYyNDU1MDQwRjg1M0RDNEE3OTNGRDE0MUUxRjE5Q0NCOUIKKzoxMENBRjAwMDRFNzRGRDRBN0MzRkYyRkZGOEZFRDdDMUY3QTM3NTAyRTIKKzoxMENCMDAwMERGRDdFQzQ3OTVDRkE0RUNBMUY2OTQ2MkRGOTQ2NDFGQzUKKzoxMENCMTAwMEZBN0MwMjI3RUUyQjlEQ0RGNUVGNzlERkVDRUM4REM5ODkKKzoxMENCMjAwMDc4QkU1N0U0NzEzOUNCNEFFREM5Q0Y1OUJENDVDNDdEQjQKKzoxMENCMzAwMDBDN0M0Njc2QUNCNzc2NDI3QkRCNkIxQ0RGMTlENzA1RTUKKzoxMENCNDAwMEZBQkNDMjhFNjhCOEZGRjgzQTgxRjNBREQyMjRCQ0ZGQkMKKzoxMENCNTAwMERBM0IyOEE3OThCNzBFMUU0RUUzRkVGQ0U2OTFCNEJENjMKKzoxMENCNjAwMDE0N0Y1Nzc5MzdDRTlBODJGREFBRjM2OTUwMjJGQzkxM0YKKzoxMENCNzAwMEFFQkVEMEU0MzUyOUY2MkNBMzdBODI1MjY0NDJCOTFEQTgKKzoxMENCODAwMDU3MzdGMDlBQjg3RDFGQUIxQjc4QTU4QkJDQUZDNkU5QjEKKzoxMENCOTAwMDFCNDY3RjM3QTU4NDExRkRDMzIxQ0EzM0RFNjg2N0NFRUIKKzoxMENCQTAwMDQxMTg1RjQ3QzA4NThCNjAwOURFQzI3QjhFRDc5NTlEOUIKKzoxMENCQjAwMDlEQ0MyOUNCNUY1RDVGQzg1MzcxODY4RTQ4QjY5OUU0RTIKKzoxMENCQzAwMEJDRjkwNDQwMkUzM0FBMzM3ODc5QkM1RjA1Q0Y4NjZBNUUKKzoxMENCRDAwMEU5N0JBQzUyOTM4M0ZDNTkyQTVFNDA3MjQyRkUzRjE1QkEKKzoxMENCRTAwMDI3OENBQTdDOENENjBBN0Y1M0U3MTFGRUE2NEE4RDRCNzAKKzoxMENCRjAwMEI0NzlBOUZDQ0Y1NkZERDM0NEI4MjM1M0UzOUYxRTZGRUQKKzoxMENDMDAwMDU1MUZGMTJGQjhEMjA0RTQwNzdBQkM2RTVCNjlEMjdBNjMKKzoxMENDMTAwMDY3NkFDNTc3NEJCQkE4NkUzMTJEQjk2RTIxRUExM0E5OUYKKzoxMENDMjAwMEY1MEFDRDRFNTUwRjdFNTE0RkZDN0YzRTJBRjBBNDQwQjEKKzoxMENDMzAwMDgxQzAzN0FCOEZCQTRFOTFERTI3Q0UyOUVFRjczQ0YyOUEKKzoxMENDNDAwMDM4Q0VFMzI4NjczNjg4N0I4MTRERTA1RTFDNjdBODVBQTIKKzoxMENDNTAwMEY5RjlCMTBDQTI5RjBGRkQxNUQ5QTVEM0E1M0IzMkM5OTcKKzoxMENDNjAwMDlFQUM5NDZBOThDQ0YxRUUzMUZDOUJGMEE5RDU2NzVBNDIKKzoxMENDNzAwMDk3MDNGOUZGQjUwQkNGMTJEREQ3QUVCN0YwRUY5MDM0QzUKKzoxMENDODAwMDdGQjVGQTRDNjNCRDc4QkY2NzdCM0FCRDlGQ0Y5Qzc2N0EKKzoxMENDOTAwMDk5OUU3QkRERjQ3Q0M1QUY2Mjg0RjRDMTgzNzQ3QkQ0NDAKKzoxMENDQTAwMDlCRjhFOUNCMTJFOUNCQkM5OUZFRUJBNDNGRDUwRDJBNEEKKzoxMENDQjAwMDBFQkU1RUY4RDdCNUQxMDYwQjY0OEVGNzc3Qzc4QjZGQzMKKzoxMENDQzAwMEYyM0NGQTQ2QjQ5QUUzREJCOTU0N0ZBRDQ4Rjg4QkVBRkMKKzoxMENDRDAwMDIzRTg4N0E2RkNFOUZDNTA3NjlEQzgwN0VGNDUzRjQ0NTIKKzoxMENDRTAwMEU3Qzk2OTEwNzVDMjU0RkU5RjUxRTNDOTg5RkNDQTQ0NjMKKzoxMENDRjAwMDc2OTRGQzg4Njk4OUQwMUI1NjkwRjBCRjMyRTVEN0Y3NEYKKzoxMENEMDAwMDI1RkNCMDIzODJGREZDMkZDMUJENTVCOUNFOUUyMDBFNUYKKzoxMENEMTAwMDczQUJGMjNCRTFGNzFCOTE2RjA2MDdGRjhCQkEzRjhGQjYKKzoxMENEMjAwMDdBOTY5NkU3Njg3OEI4OTYxN0JEQThEMjU5NkI1RjUyODUKKzoxMENEMzAwMERCNTRCQzRDQzNDOUYyMTU4MEFFMkZDMUM5RjIwOTQ3MDAKKzoxMENENDAwMENCMjFCMzVEQzE3MUJCNDJGNTBDNjNCODU5MkNDNzc0REMKKzoxMENENTAwMEE3MUNDN0E5Qjg5RDg2OUZFNTZERTg2NzE0NjcxNDQzQjMKKzoxMENENjAwMDcwMUJEOTk3MjEyQkI4MEU0Q0EzRUZGNjE4NkMyM0ZEM0UKKzoxMENENzAwMDBFMzdGMDM4NjdFOEE1Rjc3QjdGNDFERjFCMEUzMDA3RTEKKzoxMENEODAwMEI5OUZGNkZFQjNEQzRGQjc2MzVDQzNFM0ExRThBNzAyMkIKKzoxMENEOTAwMEE3RUExN0RGOUJCNjQ3OTg2Mjg0ODMwRUFBRkVCOTU2QUUKKzoxMENEQTAwMDAxNkUzN0RBRDVFRkZBRUEwNzg0NUUyNzcwQTIxRjQ5RDEKKzoxMENEQjAwMEM5Mzg1MTQwOEU0RkQ3QkUxNzBDMEJGRjY0Rjg1RDVGMkEKKzoxMENEQzAwMDA3OENGMEVGMDEzQjVBOTkzMzg2Q0Y1MzcxQTM1NEJDQzMKKzoxMENERDAwMEU4NTlGNTNCQzAwOTcxMjNFNUVCN0RFRkI3QkQ2RUVDN0IKKzoxMENERTAwMDdCM0Y4RTNGRUZGMzA4QkJEMEU4Njc4Q0Q2Qjc5OTdDQ0EKKzoxMENERjAwMDZERkNCQkRGQTNDQzYxRjRGREU4NkU1NUVFNTdBOEY4REYKKzoxMENFMDAwMEVEQUI1NjIxMEZBRjdFOEI4NTI5OUU1QjAxMDJBNzdEN0UKKzoxMENFMTAwMEY1NjgwQkM3NkY1RkFENjI0RTEzREQ1M0M1NkI5N0FCMDMKKzoxMENFMjAwMEY0QjgzQjgxRDczRTRGNzhFREY3RDA5RDEwNEVCQjQyMTIKKzoxMENFMzAwMEU1M0Y0MDk4OUZBQjYxNzc3QThDRTI4RDY3MkNGRDA1Q0EKKzoxMENFNDAwMEE0OEZEQUY3NDY1RTE1NDc0RDRGODM0RTIzRkRFQ0E5QkMKKzoxMENFNTAwMDczNzlFQjZBNjhEQzg0RjFDRTJCNzUwNkY4Q0U1NThGQkEKKzoxMENFNjAwMDU4Rjc5Nzc1MThBN0NGMDdBMzM4N0Q3RkRENzQ1RDlDQjEKKzoxMENFNzAwMENFRkJBOTcxRkE5RjBBQUZGNUQwM0Q4RENGRkZERjkzQUUKKzoxMENFODAwMEM0RUQxRUFGOUREQ0I4NEQ3NTA2RjFERjBFMTUzRjQ5QjAKKzoxMENFOTAwMEE1NkY2NkJENjY4NzY3MzhCODNDOEQ5RDFGNDQzRDU3QkEKKzoxMENFQTAwMEM1QkQ4NjU0M0YxNzYyRjI2RkVGRTdGNTJGMEJBRjdGREEKKzoxMENFQjAwMDY5NzYyNjM0NDVBQ0ZGODE2QTVGQjRGNkE2REE4NjJDMjMKKzoxMENFQzAwMEM2MzgwREFCMTc3RUVBREI4NUNBRkJDNEM3RjJEN0Y0QzAKKzoxMENFRDAwMEI4RDk4MjdFM0Q2RTc2NkYyNDQ3RDc1RjE4QkI0QjM3M0IKKzoxMENFRTAwMEJFRkFENDZDRERGQjlBRjgzREJBRjdGNzlEQUZEMkY1RTgKKzoxMENFRjAwMDk3MEU3RjRCMzdGRUZFNEZEQ0JBRkU3NzQ2RjRCOEQ5NkIKKzoxMENGMDAwMDAzQjdGNEI4OTkyNkRGMkU5NDg4RTQ3OTFFREIwRjc0RkEKKzoxMENGMTAwMEUzOEE1QUY1RjcyQUVFRDRERjZCNTY5N0ZFNUVEQUJBNEIKKzoxMENGMjAwMDI1NDFGREZERTY4NEY0RjdDQjIxNUNCRkUyN0Y4RkVCNkEKKzoxMENGMzAwMEZGNERBRENDRTk3RjJDM0FDNzRFRjM3Njc5NEJFRDE0MUIKKzoxMENGNDAwMEM3NEMyRjE0RjJBQThERkIxRkFDMjdFOEQ5NzAzMDAwMTQKKzoxMENGNTAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMUYKKzoxMENGNjAwMDAwMEJFMzE0NjA2MEY4NTEwRkMxRDNGOTE5MTgzNkYzQzAKKzoxMENGNzAwMDIzRjhGNEMwQzc5ODE5MTg4RTgzMzAyMzAzQzMzRTIwQ0EKKzoxMENGODAwMERFMEFDNDZCODBGODNEMDMwM0MzNTIyMDNEMDc4ODI3QTcKKzoxMENGOTAwMDAzNzExNzEwQkYwNDhBRDVCMTYyMzc4Nzg1OEQ4MTgxRUYKKzoxMENGQTAwMDBEODg0RjAyQ0QzQUM1NENCQ0ZEOEE3QzA4RjYyMTVFNDcKKzoxMENGQjAwMDA2ODZCNTQwN0M5NDk3QkU2MTMwRDhGMDBDNDFGQUQ5MTIKKzoxMENGQzAwMEY1MEM2QUQ3NkVEMTgxRjczNzA4QjM4QTMzMzAzMDRBMEYKKzoxMENGRDAwMDIwRjhGRDEyQThGMjZDRTIwODc2OTYwQzY1NzY5NTAxQjEKKzoxMENGRTAwMEY1MDMwMDI5NTEyODE1ODAwMzAwMDAwMDAwMDAwMDAwMEYKKzoxMENGRjAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDA5Nzg1NDQ1RjAKKzoxMEQwMDAwMEI2NzBEREVFN0I3QjQ5QkEzQjlEOTA5NTI1NzQ4MDIwMDAKKzoxMEQwMTAwMDJBNEJDQjEyMDExMTNCMjE4OTAxMDMwNjQ0MDkyOEQyNzYKKzoxMEQwMjAwMDZDMjE4NDI0OUQwMTY2MUUzRUZERkY2RTA4NDJDNEQxMjIKKzoxMEQwMzAwMDg5OEExQUZDMTk1RjgzRTAwNDA3OURFMEEwMTM5REMwNTQKKzoxMEQwNDAwMDM0OEI4ODMzRTgwNEM3MDU5Nzc5NUY0MDFFMjA0MjEyNkQKKzoxMEQwNTAwMEEzMzhFOEYzQzlBQjczQUE2RUJBRUI3NjM3NjlCN0ZGQUEKKzoxMEQwNjAwMEY5N0ZGRjg0MEY4QUJBNTVGN0Q0QTlCM0Q1QTk1Mzc1QjAKKzoxMEQwNzAwMDRGMTQ5MjQyOTJGQTEzNzIwOTdFNkUyMEU0NTU4NTEwODUKKzoxMEQwODAwMEZBQThCQkVDOTAzQTg3Q0IwMzgzRUQ2QkJEMkVFMjMyNUUKKzoxMEQwOTAwMDEyRjI4MEQ3ODRFNTdBNkYzQTcxNUQ0MTlGOEZENjE1ODEKKzoxMEQwQTAwMEY5MkQ4NERDRUZCNUUzRjNDN0JEMjU1ODNFRUEyREM1NjUKKzoxMEQwQjAwMEYyMTFBRjFCRkIzREU0MkRDN0YyNTdERTFBMkNFRkY1NDIKKzoxMEQwQzAwMDE2NjE3QjlENzcxNUQ2NkY1NDE2QTRDMUI4ODRCODRDRjEKKzoxMEQwRDAwMDU5Qzk4NDc4NUUxRTM4NzIwM0FEQURDRjFDOUYyMDhGNzYKKzoxMEQwRTAwMEE2RjVCRkVBODkzRThCQkUzNzVBMkVGMjBGQTUwRDcyMDgKKzoxMEQwRjAwMDQ5NTFENkU4NjAzRjE1Q0YxQjk1QkNCRTAwRTdGMUIxQTIKKzoxMEQxMDAwMDNBRDZDRjU0RjM1QTc2RTQ3RTU5NjQwQ0M1NzNBQzhDOEUKKzoxMEQxMTAwMEY4MTM0QkM5RTRFQ0U0ODhGRDA2MDNCQzQ3ODZCMjc5RkEKKzoxMEQxMjAwMDEyQkJGM0I1NDE5MUUxNUQwREYwMUUxQUNBRjE0QkI2ODkKKzoxMEQxMzAwMDRGMUUxNDE5OUUxM0ZBRkRDQUM5RTFBNTc3MUUxRTE4QzkKKzoxMEQxNDAwMEI5REYxOEU4NTdFN0U0RjBGQUZBNEMwMzIyOEYzQjFFRTgKKzoxMEQxNTAwMEZBQzVDMDI3OEExMzIxQkUxNkEzM0YzQkVCRkJGMzhCMTYKKzoxMEQxNjAwMEI4RTg1RjhBNEZDNzVFRjNENjBEMTJGMjZGMUFEMDY5MjYKKzoxMEQxNzAwMEFEN0RGOTk5MkQ3NDlDRjY5NjYxNEVCRDgzOTBDRjVDODAKKzoxMEQxODAwMENFMDRCQjI1MjZCRUREMDJGMzg4ODE2RkE1MzA0RTBDOTAKKzoxMEQxOTAwMDdDOUIxQjIzREYxNjQwQkYxOEY4QjYwNEZBQzVDMEI3NDYKKzoxMEQxQTAwMENBMThGOUY2QjM5RjA4REZFRTA1M0NCRTA3REYzNkM0QTgKKzoxMEQxQjAwMEE4NkZCRjhBOTE2RjFCNjNFNERCQTYxOEY1RURDOTE4NTEKKzoxMEQxQzAwMEY5RjY1NDI4REZENEU3NkFCOTgzNDg2ODE3NkY1NDRBRTAKKzoxMEQxRDAwMDc2NDAzRjRGNjY5QjZENDBENjRGODI3RjdCQkVBN0RFNzkKKzoxMEQxRTAwMEVEOEY5MTdGQUZDNkM4QkYyMzQwOUYxOEY4NzczNDQ2QjQKKzoxMEQxRjAwMEZFQkQxMzIzRkYzRTg4NTFFRkRBNzA5REIxQzg1RkI1QzUKKzoxMEQyMDAwMDBEMjFGODczNjkwMEZDNkJCMTlGQkE5QUQ3RjU4MDc3NEUKKzoxMEQyMTAwMDEyMjExOUUxNzJBMDk2OTRBMzI4MEYzMjcxQjdCMzc1NDkKKzoxMEQyMjAwMEFCRTA5QjRCMzk4NEFDMzBEMUZGRDJGNzdENzkyNEEwQTEKKzoxMEQyMzAwMEE3RTNGQjZDQzQ1RjJCMDlGRDNGMDczQzA5QzlGRkU2NzAKKzoxMEQyNDAwMDUyQUFEMERGQTc4QkQ4OUZFOEEwRkQ2MTkwMkJDQUZGMjAKKzoxMEQyNTAwMENEREUyMTU4RDY3MzM5REE1Q0E0NDM3OUYwMjUxQjUwMTIKKzoxMEQyNjAwMEJFOUVGMDNBQjFCREMxM0IxNkNCQzdCODVDNkVFNDcyNEUKKzoxMEQyNzAwMEY0MDBDOEREMTUyMDg3QTU1Q0FFOThEQzExNTJFMjI4QzkKKzoxMEQyODAwMEE3NzRFREQ4MTM0RjM2Mzg1MEFFQ0MxMkUwMjkzMzc5NUQKKzoxMEQyOTAwMEJCNzdDRjk1NUIzNzUwRjg5QjZCNzQ1NzZFMEI5MUIzOTAKKzoxMEQyQTAwMDI3OEE1NEY5QTI5Mjk5MUNFQ0Y3NDRGOTA5REI4MkExNzAKKzoxMEQyQjAwMDQ4NkYxQkMwNjkyOEQ2QTlGRDdDQTFGRDFBRENEREZERTUKKzoxMEQyQzAwMDdBNDFCRkM3OEFCOTdDQzkyNDEwM0FFRTYzQTVEREZENTcKKzoxMEQyRDAwMEQyMjU0QTk3N0IyNTUyREE2NDA5RTdDQjE0ODlFOTI5REMKKzoxMEQyRTAwMDU1MTRFNDg3Q0NFOUJCM0ZFRjJDNjlBM0VGREJFQzIzQkIKKzoxMEQyRjAwMEQzMDgyRDlGMDRGRDQ0RkQ3MzYwQTlCRTVGNEZFOUVDODgKKzoxMEQzMDAwMEE2RjRDODM0OTI5QTI2QzA5N0I0NEEwQUM1NTcxRUVCQjEKKzoxMEQzMTAwMDQ4MDQzOTdBNjg5QzhCNDg1NjQyRkE0MzNCMURCRkNGN0MKKzoxMEQzMjAwMEU4MzY5MjQ1Q0JDNEYxNkQ0NDFBMDZGRDY4M0JBREE3QzMKKzoxMEQzMzAwMEYwRjY4Q0ExQjQ5REMyNzkwOERBQURDMUY2NTRERTlFMzgKKzoxMEQzNDAwMEU2RTBFRjVGQzdEQTFGRjYxMjFDNUZFRDc3MUZFNUIzNkIKKzoxMEQzNTAwMDlCRTJCNzhFRTI4QkNGOEI4OTBCRTgyODUzNzZGQTQzOUEKKzoxMEQzNjAwMEU2M0Y1QkQyRTNCQzJCNzlBOUUyN0Y1RkY2QTk4Q0Y5OUIKKzoxMEQzNzAwMDQzODNGODlBMDc1RkNDOTgxRjgyREY3RDgzRTc2MDVENjcKKzoxMEQzODAwMEM1Qzc3QzQ1MjVENkZCQUZFQTREM0QzMUFFMEYyNDlDODkKKzoxMEQzOTAwMENFQTkzMzA3MDhFRDBFRDk4OTdFOUFFMzg4OUVGODI4MzYKKzoxMEQzQTAwMEJGMUM1NDNDMjNGMUU3MEIyQUNFM0ZBOEZFQjkxODNEMjEKKzoxMEQzQjAwMEI0RUQ3NzZCRThCMDJFNDNBNDgzQTFCNzQ4ODc3NUJENjEKKzoxMEQzQzAwMDQ1M0ExOEZBNUM5RTBFNTMyNDA3QzI4RjQ2MEY3NURDNEYKKzoxMEQzRDAwMDBENTc4QUUzQzY1RDI1OEVCQkUxMkE3MURDQjhBQjdGQjEKKzoxMEQzRTAwMDk4NzFEN0Y3MTNDNzM1NjY4QUUzQUVDRjE0QzczNUY2MDEKKzoxMEQzRjAwMEZGN0VFMzEyRDk0OTFGMzI3MzQxMUNGMENGM0NDMUJFRkUKKzoxMEQ0MDAwMDVEMjBFRTg3NDFCRkMxQ0VFOTkzODM3NjRFQjY5NzEwN0IKKzoxMEQ0MTAwMEI3MjVDODRGMjJEMzk3NzM0MkUxREMyOUQ4NTUwQUU3RDQKKzoxMEQ0MjAwMEZGNzAzOEFFQ0JDM0IxNkJFMENDRDVDMkQ5QzZFMTkwQUEKKzoxMEQ0MzAwMDUwM0IxRDA2ODdEQ0ExOURDNzZGRjk3QjAxNURDOEY4RDUKKzoxMEQ0NDAwMDc0N0QyNTI1RDZEMEY3OUM5QUYxNkZENzhFQkYxQkVDNDMKKzoxMEQ0NTAwMDE4Q0M0Mzc3RDlGMTFEMUFCQUNFRDFFMkIzODdDMzIxRDQKKzoxMEQ0NjAwMEJBQ0JEMTgzRDgzNTcwNjY2QkUxMUNFMjcwMDJEMjY1MEQKKzoxMEQ0NzAwMEUxOTQ2QUU3RjFCQUNBNTc0OTU4QkYyODNEODYwNURGRUIKKzoxMEQ0ODAwMEVCQzhFQjNDODU3RUQwOEI4QTYzM0I2RDk3RkU2NDBEQzkKKzoxMEQ0OTAwMERDNDBGQjFGRDkyMkY5OERCNDFFRDgxQjhGRUJDN0Y5RDYKKzoxMEQ0QTAwMDZERDNCMUJFRUYxQTIzQUUxM0U3OUQ5M0ZENDY2QTRGQ0QKKzoxMEQ0QjAwMDI2QkRGMEI2MERFQzRCRDUwQjdBMTlFQUJBQkQxRkRCRDEKKzoxMEQ0QzAwMERBMjg1RTFFNjNFQjgzRDdEMUU3OUQyRkU4Qzk1Njk0MTcKKzoxMEQ0RDAwMEM2NDIxREQwRkQxNDk3NERCMjhBRDVDQkNDQUM1QUI1RkYKKzoxMEQ0RTAwMDY1REY5RDAwQjdCQ0Q5NDhDQzE0NEVENTRCNEJBNjVEMkIKKzoxMEQ0RjAwMDQ3RUI0QjBFMkIwNEJBNTQ2RDVGNkRFODRERUI0QkZEQzMKKzoxMEQ1MDAwMDUyMTNENDNCRjI0ODM5RThEMzlBQkRGRkQ5MEVFQkQxODAKKzoxMEQ1MTAwMEY5REQ0QTM2OEM3Rjk2QUUxMzBFNkE4RjhGNTg1QjUzQjcKKzoxMEQ1MjAwMDY3NTIzQzJBRkNCQjBBRTFCRDhBOUQ5MjkzNUEzODhBMTUKKzoxMEQ1MzAwMEVGRjY0MzE5ODBFRjBFQzk2OUE0RjQ1RUQ2MTg0RjFDQUMKKzoxMEQ1NDAwMEFBQkRBMzdGNEZFREQ2RTNGQzk3RDNGOTEzMEE2RjA5NjkKKzoxMEQ1NTAwMEE5MkYwNDdBNTYwMTcxNjA3Q0E3RDE2Rjk2ODJGQTc2NjIKKzoxMEQ1NjAwMEQ2N0IxOEM3NTNFQjU1M0JFODc4RjRGREVBRTcyNDI3NTAKKzoxMEQ1NzAwMDRDQjU1QTQ3REM4MDY3RkI0QkU2RDJBNzJDMzBDRkQ1QTEKKzoxMEQ1ODAwMDg2QzE1Njk4REY3QTAzRjQ1QkUyOUZGRkEyRDkwMTc4NDcKKzoxMEQ1OTAwMDZFMzExNDAyQkU5QkI3MThDQTg2MDJGREM4QkM5MkExQTgKKzoxMEQ1QTAwMDgwREY1RjQ0RkMxQUY0MkU5OEVGRjI2QjhDNUJGNUMwQzEKKzoxMEQ1QjAwMDRGNEI2MEQwMEM2QkI4OUQzRDRCRDcyQjQ3QzhGQTU5RTkKKzoxMEQ1QzAwMDQxOThERDI3QjJERjMwN0Q1OEYwRjk0QkZBNDQ5NDgzNUYKKzoxMEQ1RDAwMDY1OEQ3QUUyMDhCNTFCNUMzRTdDNDcwOUYzNjNGNjU4MUIKKzoxMEQ1RTAwMEZEREJCMzgyN0M1QzZFRTdGMkNBRjlCODNDOTFGMzU1N0YKKzoxMEQ1RjAwMEVFQ0M5OTMxMkMxQzlGMDc4MTJGNDZFNjFGNDFGOTMwNTQKKzoxMEQ2MDAwMDVEMzcxREU4RkYzODkwN0U4RjUxRkZDOTgxRkU5MTEzNzEKKzoxMEQ2MTAwMDlGM0Y0MUZEMjQyODM3NTMzRjA5Q0EyN0E5OUYwNEE1RUUKKzoxMEQ2MjAwMDlGRkE0OUQwNkYyQkY1OTNBMERDNDZGRDI0NzhGRTM0OTkKKzoxMEQ2MzAwMEY1Q0ZBMTZDQTRGRTM5M0M3Rjg2RkFFNTUwRUVGNEZBRjIKKzoxMEQ2NDAwMEYwRjk3M0RFM0EyQzlCQkNGNTU4M0VFRjZEQzA3MkI3MTMKKzoxMEQ2NTAwMEQ3OEZGRDVFRjQzNjYyRDlFQzZEQzJFNzJGN0I5QkIxQUMKKzoxMEQ2NjAwMDZDRjEwNkIwREMwQjdDQTY2NUMwREI4QUU1N0VFRjMxOTEKKzoxMEQ2NzAwMDJDMEY3QURCRjBCRDQzREUzMzU4RkU5MkQzREQzNjgxQ0EKKzoxMEQ2ODAwMEU0Q0E1NDVFNkMyRTYyMDczNjI1MTVCQjcyQzE1RjQ5MzEKKzoxMEQ2OTAwMDJBNjFGNUQ0M0I3Q0I5MDY1QTRGNzVEMzNBQTU2M0VGOUUKKzoxMEQ2QTAwMENBNDBBRTkxRDY3QkQ3QjBGNkNDN0I0ODlFODlENjMzQTQKKzoxMEQ2QjAwMDdEQUM3REMwMkY1RDc5NjY1QTFGNTBDRkRBMDc2RkY2QkIKKzoxMEQ2QzAwMEU1QzVEMUZBNjAzRjZCQkY2QTY3MjAyRjlFRDZBRjZBNkYKKzoxMEQ2RDAwMDYyRURDMzVCQzgyNDBCQUQwRjBGQjBGQUM4MjNBRTQ5OEYKKzoxMEQ2RTAwMDU2NUExRkQ5Q0FFQTM5MUZGQTI2RDk2ODNEQTc4REJERjcKKzoxMEQ2RjAwMDNGRkU1QzYwNTIwMkFEOEZFRjY0RUQxM0JGMjZGOTc2RkEKKzoxMEQ3MDAwMDVBOUY0ODI0QUNFNzU5NzJGMzEzNjkzRENGQ0VFQTg1OUUKKzoxMEQ3MTAwMDdERTdDQjhFMDhFQkZCNUVBNTZEMjE5OEI0OUZFQjcyODUKKzoxMEQ3MjAwMDcyNjVFQTI3RUMzNUI0QUQwMDkzQkI1RTc3NDNBRTNDM0YKKzoxMEQ3MzAwMDhFRDI0RjIxOEJBMDdEOTNBRTg4RDUwRDY0MjVCNEZGOEEKKzoxMEQ3NDAwMDU2MzcxREVCRkIxNTA3QjZFRkQxQ0Q2MTc1ODMwM0RCQjMKKzoxMEQ3NTAwMEZGQUE1Qjg4RjU4MzhBMEJEQjhGRUIyQTU5RERFMEMyRDkKKzoxMEQ3NjAwMEY2Q0Y3NDNGQzdGMTBFMjk2RTZDNTdGNEZGOUJENTBEQjEKKzoxMEQ3NzAwMDZFNkM3RjU4NUU5RjlCNEZGQjU3RUFERDFFMUQ5NUVCM0QKKzoxMEQ3ODAwMDVBQzk1RDRFMDY4MkJDMzZBNTgzM0Q1Q0M3RkRENjU5OUQKKzoxMEQ3OTAwMDNBMDdDQUZEQkEwQzAzRUFEOURFRkZDQTc5MEFGNTBDQ0EKKzoxMEQ3QTAwMDdFOTJBMTVFRjYzNEY4QkQxNENFMkE4NEEzNTAzOEZBRDYKKzoxMEQ3QjAwMDlFRTE0Q0ZDNjZBQzAwNjdFMjM3RTUyQTlDRDUwOEM3QzEKKzoxMEQ3QzAwMDFDMUI5Q0JEREY4QzE3RjFGOUE2NDI4NUIzNDE0N0VEQzgKKzoxMEQ3RDAwMDdEQUQzNUI2Nzk0REJDMzQ0MUM0RTc1MkE1MEFFNzExOTkKKzoxMEQ3RTAwMEM0MjczMTM2N0MwMkNBQjUwMjlDODBCMjQ0ODVCMzE5ODUKKzoxMEQ3RjAwMEUxQTRDNDg2OEZDQjMwNEU4MEUzMzIyQzU1RTE2QzQ3RDgKKzoxMEQ4MDAwMDM4MTlCMUMxMDkxOEFFMTNGMTMxMkM1M0UxM0M4N0Y0M0EKKzoxMEQ4MTAwMEU5MTdEQkJDNUNDNkVCNDU3QzhDNTUyQTlDM0YyMDNFNUYKKzoxMEQ4MjAwMDU5QjFDMUQ5NkYxNUU5QjNERkRBNEQ5RjAwQzJDOThFNzYKKzoxMEQ4MzAwMDZENUU3OTM2OTEzRTc5QjY2RUZBQkM4NjcwQUU4QzBEMEYKKzoxMEQ4NDAwMENFN0U5QjQ4OUZGREI2NkVGQUJDODk3MDg2QzUzNkFGMEEKKzoxMEQ4NTAwMEJDMDQ5MTNFNzkwOURERjRGOTAwRTE1QzEzMUIzRTA3M0QKKzoxMEQ4NjAwMDUzNDRGQTFDNENFOUE2Q0Y0OTg0MzMyNjM2N0NGMjUzNDQKKzoxMEQ4NzAwMDQ1RkFFNEE3NzZEM0U3M0NDMjE5MTcxQjlDODNBOTIyN0IKKzoxMEQ4ODAwMDdEMEVBNjc2RDNFNzBCODQ3MzdENkNGM0NBNEYxM0U5NDQKKzoxMEQ4OTAwMDkzOUZENjREOUY0QjA4MjdEN0REODhGODEwMEFDNzFBRUIKKzoxMEQ4QTAwMDFEQ0VBMTdFMjI3RDBFRjVFQkE2OEY0OTBGNzAwQTI4QjIKKzoxMEQ4QjAwMDlDODEzREMzMjlDQzE0RTk1Mzk4RDk0RDlGNDQzREU4NDAKKzoxMEQ4QzAwMEM1RTREOEUwMUNDQTE0RTk3MzI4QjM5QjNFQkQxMTlGODAKKzoxMEQ4RDAwMEE5QjFDREFCQjBCRjQ4OUZDMkZFOEMzRTFFNjNFNzI0MEEKKzoxMEQ4RTAwMDNCRjg4RDg5QzRCOTk1QkUzMjI5Rjk2NzA3NjFERDUxQ0UKKzoxMEQ4RjAwMDJDQzQwOTYwOEY0ODgxNkQwMDlGQUVBREU4OTdDQTRFNzkKKzoxMEQ5MDAwMEQ1MEY3MjEyRjA3MzhCNkQwRTI3QzQwM0Y0QUFCRjQzQjgKKzoxMEQ5MTAwMDVBNzEzRjYyRDk5OTI4QzQ5QjVFRDJFNzBEMDc3Q0FENEUKKzoxMEQ5MjAwMEQ0MkIwQ0Y1N0IxMkM2QzYwOUZFNTZBMjJCNDlBOEY3Q0MKKzoxMEQ5MzAwMDJBRUEyREY0NEYyOTE5MjBCNEE3OTU1RTI1QjQ2N0I4QkIKKzoxMEQ5NDAwMDQ3MEFGNTNFRTVFMzg1RkVGRDZBRjI4NDdBRkY1NTUzMEEKKzoxMEQ5NTAwMDg0RkU1OUJFMTk0MjdENjBERDFDQTE3Rjc2RkQwMkExQzcKKzoxMEQ5NjAwMEZEOEE4NjBBQTFGRDRBRkY3MkExN0U3NUUzQkYwQUZEMEEKKzoxMEQ5NzAwMDg3MzVBRDExREE0NzM0NkYxMERBQUYwOTNDMkNENDQ3NDQKKzoxMEQ5ODAwMDFEN0U0MkU4M0ZBNjc1QUJEMDdFRURCMTY3ODRGNjcxOEYKKzoxMEQ5OTAwMDZEQ0YwQkY1RUJDRUJDMkNGNEJGQkU3M0JGNTBCRkUxMTcKKzoxMEQ5QTAwMEUyOUY4NUZFQjlFNDZGNDI3RDkyRTkwM0ExN0Y4MUZEOEMKKzoxMEQ5QjAwMDIzQTFGREM2RjQ0RjM0N0VBQzE4QkZBOENEMjVDQzlGNjMKKzoxMEQ5QzAwMENEMzBBMDNGMUJCMDFBQjA2RUQ4NkI2NkZCMUJBODI3RUEKKzoxMEQ5RDAwMDQzMUNBMjE4RUI4NkZEMEIxREM5MTAwRjAwMDBENDlGM0QKKzoxMEQ5RTAwMEM4RUQ1RDdFMDVDNEFCN0UzMURFN0QwNUM0NzE3RjYxMEYKKzoxMEQ5RjAwMDcwOEZCMDQ3RjA4M0RBNjVGNzNEN0E4QzI3QjY0QTI0RkEKKzoxMERBMDAwMDFENEE4NzBFQ0EzODNEOEYyNzE4OTlGQ0FFQ0ZDQTc5QjgKKzoxMERBMTAwMENBMTdBMjA3NzVGREE4N0Y0MUVCRUJGNTE0OEYzMTQxQzIKKzoxMERBMjAwMEZENTlERkFGMkM3RDdFQzgzOEVCRkExOTRBQjcwRTY1NzkKKzoxMERBMzAwMENGMTc1QTYwQkM5MkZCNjAzQzhGQTE3MzMwRTBBNTFERUMKKzoxMERBNDAwMEM3Mzg2MEFDMzA4RTI5QjMxQ0M3RDkwOEUzQTQwNEM3MUIKKzoxMERBNTAwMDMxNjY5NjZCQzYzMTk1NkVFNUNGRjkzODhGODFERTQ0MUQKKzoxMERBNjAwMDFCNjdGRDgwRjFFMjdDMzIyQjcwOUMyRDlBNzFENjY3OEEKKzoxMERBNzAwMDU2NjhDNjg5NjNGM0ExQ0ZGOTM4NEY1RDZFMUNFM0MwQzkKKzoxMERBODAwMDA5RTI3Q0ZBNTdFMjM4Q0Y2OUU3RDNCRjUyMzM4RTA1RkIKKzoxMERBOTAwMEM3ODFFNzMwMEVFOTRCNzczMTY5OTRDRkM2Q0UzMjk0MTcKKzoxMERBQTAwMDgzM0Y5OTMxNEU2NkU4NTNGMTFCQTg5MzBGQ0MyNDFCOUEKKzoxMERBQjAwMEM2NzFEMDcxNjkzRjMyMjQ4OTBBMzUyMUZGQTI0RjQyRDUKKzoxMERBQzAwMEZFN0MxMTQ3RjkxRjEyNEYwQkVFQzc3REI4QUY1RkNDM0MKKzoxMERBRDAwMDUxMjQ3RThBMTFERDI3NTU3M0Q5NUNCNDczN0FFNjBBMjYKKzoxMERBRTAwMDA3MkQ5QjBGMEM3QTA0QzZEOTY4NzU2NkQzN0E3QkYzMzEKKzoxMERBRjAwMDI0QzNDMjA4RjJCNEI4NUUzOUQ1MTYyMkU3RERGQkIzMDEKKzoxMERCMDAwMDNDMzJBNDg2OEVCRjIyQ0U4RUY4QTg3NUI1NENEMjg5NDEKKzoxMERCMTAwMENGNEZEMDdEMTdBMUZCOTMwRkU5M0U4NUQwRkRDQTQ3QkIKKzoxMERCMjAwMDBBREI2N0ZFM0JERDlGNDFCRDhERUVDRkEwOUQ5MEQ1MEEKKzoxMERCMzAwMEY4REUwOTFFNjczRUYxNEJDOTBGRjRGRUUyQUU5RjI5RTUKKzoxMERCNDAwMEI4NEVGOEM4NUJFOUE5MTA0RDYwM0ZGMzU2QzU1MzI2OUYKKzoxMERCNTAwMDA0RjE5QkVGRUIyNUQ0QTkzOUVFQTM0QkM3N0QyREM2NkQKKzoxMERCNjAwMDBGM0E1RjMyRkFCNzAyNURFQkZBNTA5QUYyN0UwMzA4ODEKKzoxMERCNzAwMDc5NzdFRkQ0NDM5MjBEQUI3RDc0NjMwOTk5NTkzM0JEMjYKKzoxMERCODAwMDIwMERCNTQ4RUFCNzlDRTIzOTYzRjczNTBBN0Q4M0I0QzYKKzoxMERCOTAwMDJCNkQ3NzNBMkQ0MUI4QzRBNTlDMDBGQTk4RTgxRjgwRjgKKzoxMERCQTAwMDczNEIxMUFEODc4QzdGNkI4OTU4OUY0NUU0NjA5REYyNjQKKzoxMERCQjAwMEZCQTQ3RTAwNjFGMTdGM0VBRUMzQTUwMDVGNEJFODFDNzUKKzoxMERCQzAwMDMzMjhBQjY3NDEzOTEyOUE1OUJDQTZENENFREU1NUYxNDEKKzoxMERCRDAwMEYxMkM1NDQ4MDBGN0Q3QkUxNDg4NjMxMzVGMzJGNjlCQ0MKKzoxMERCRTAwMEEzRUU5MzM1Rjg5NTJBMjY1NzA5QTU2QkU5N0MzREQyMUIKKzoxMERCRjAwMDU1OEJFRkZCN0JFMzVEQkFFMUI0QUM3QjQ0ODFEMDZDMjkKKzoxMERDMDAwMDRGRjhDRjc2OEJFREE0OUM4REE3RDI1NTk1OTc1MzlDNUEKKzoxMERDMTAwMEJGMjc4MEZGQjQzQzBERkNBNzc4OUZFNEZDMEZDQTMxRkUKKzoxMERDMjAwMEUzQkZDN0U4OUUwNkZDRUZEQ0E0MjdDODJGQ0VGN0RCRDYKKzoxMERDMzAwMDM4REYxN0Q3OEI3Q0JGMERDRUUzNjhGRkRCNTY2NkIxQUMKKzoxMERDNDAwMDc4NTM0MzJGODFCRjc0RTIyMjFERUExRjJBQTA2NjM1NTQKKzoxMERDNTAwMDBDRkZCRjczMzk5ODUzQjdFQjE1NjBFRkVERTU5QUY5RjgKKzoxMERDNjAwMDcxM0VEQ0M5RjkzMDU3NDM4RkRCMzhERkU2NzJCRTJERDkKKzoxMERDNzAwMDIxQkU3QjMzMzA3RUUxNTcyMEFFMzdCQjVDMjI2MDJGNjQKKzoxMERDODAwMDNDNzdBQjdDNkIxM0Y4RTY1NkY5QTZDMUY3NEVDRUI3REUKKzoxMERDOTAwMDNCRUY2MjdDRDNFMkREQzZGOUQ2RDZGMDk5NDIwNjg0MkEKKzoxMERDQTAwMEUzQURDNTczREUyQUNEQkM3QzVBQkVENTczQjlCNDFCQjcKKzoxMERDQjAwMEMwOUY5QUVFQ0E1RDcxMzJBNEZGMkQ0NTkzNTc5QzBDMEMKKzoxMERDQzAwMEIxMEJCNzk2NEMxN0VBQjM0QTY3MEJGRDY3QkJFNzBCN0UKKzoxMERDRDAwMEVEQjc5NzJGMTVEQUU3RDZGQzRDQThDRjVCNzU5N0QwMzgKKzoxMERDRTAwMDdGQkU2RkI1RDBCRUIwRUUzRUExN0Q3MUZENDM0MjdEREIKKzoxMERDRjAwMDQ5QzMyNkExRkY1MkZGMTZBMTdENTlFMzBFQTFCREFBN0IKKzoxMEREMDAwMDY5OTc1MEY3MzRCRjI0RjREN0VEQkRGMjY2OTBBRjIzODYKKzoxMEREMTAwMDZGRUIwOUM0RkIyRTM4NEY2MzlDRjE4MjUzNzE0MjlGMTUKKzoxMEREMjAwMDkzNUUwN0NBRjEyOUVGMTAyQ0NGNzg5RDI4RTc2N0JERDUKKzoxMEREMzAwMDYzQjFBQzA2OTkxQzA3NzZGNjgwMDVFMkE3OUUzODZBQTcKKzoxMERENDAwMEY3MTNFOTNBMkU4RjVCNTMzNzAxRDYxQkRBM0U5RTkwQ0MKKzoxMERENTAwMDdGOTU2RjU4RTNFQjRCQjUwMEUyREU5NEZFQzUwRDA2RjAKKzoxMERENjAwMDEyMTg0NUE4NzRGN0VFOTZFNzRFN0Q0ODdCNUIwRkVERTEKKzoxMERENzAwMDBEMzIwOUY0MEE2RjJGNkU4QkZDQkM0M0VBMUM5QzAxMjgKKzoxMEREODAwMDcxRDlGNzhDNjQ3QjQ4QkMzMUZDQkM4NUY0MDFCRjIyOUYKKzoxMEREOTAwMDVBRkIzOTFEMjkwRjNERUZEOTJBQjM3MzlFMjNGQUJDRDQKKzoxMEREQTAwMEFEMzJDNUFCRDJDMEY0QkZGMkY5OEMzQzYyODM3QTYwNkQKKzoxMEREQjAwMDcwOERFNTMyRTMzNTUxNjREMjgwQ0YwMzA1QkQ1RkQyNkIKKzoxMEREQzAwMDcwNzU1MENGMDk4Q0MzRUNFOTUyRkYyOEUxRjlCMkM2NTcKKzoxMERERDAwMEVCODRGN0RFOTBEQzVCMDA4RjczRkJGNEI4NUU5M0MwREUKKzoxMERERTAwMDgxQ0M1Qjg2MDE3RUFFQUQzMkFDQTNDRDI5RTg3N0I1QTAKKzoxMERERjAwMDdBNUQyQjRFMkE4NEJDRTkyREMyRjIyRDZGMDk5NkVGNzUKKzoxMERFMDAwMDc4NEJCMTNDRTY3NTYzRjlCRUI3MUNDQjBGQkQzNTU4RjYKKzoxMERFMTAwMEZFQkI3NzE1OTY2RDVFMUY5NjI3QkM3NTU4OUVGNEQ2OEYKKzoxMERFMjAwMDYzNzlDQURCODBFNTE5QUYxRkNCQjNERTQ2MkNDRjc5MEYKKzoxMERFMzAwMDlCQjA2Q0Y3MzY2M0E5REFDRjlFRTRFRjBDNUY1RkNGM0YKKzoxMERFNDAwMDgyMUMxQUMzRTVFQ0UwREE3OTZCRUFGQTA2RTVFQ0IwN0QKKzoxMERFNTAwMDVDODY3MkE2RDJCN0I4QzFDOEU1MjE1NTkwODdCRkMyMEIKKzoxMERFNjAwMDNBOUMwMkYyRDI0MzdCODNDMkU1MzBEQUZCOTFEQjQxN0MKKzoxMERFNzAwMERFN0FGRjA4RjI0NkM4MUE5NDAzMEJDOERERjc5MDM3MjQKKzoxMERFODAwMDAyQTcwODI5MjA0RjdEMzRGMjI0Q0FBMTJBNDdBQTlFNUUKKzoxMERFOTAwMEJGMjE5NTlDMDNGOTUyRTVDQTIyMzM3RjQ4OTVBQkZCMUQKKzoxMERFQTAwMEMxNEY4Q0UwNkZGNTU2MjRCRUZFMzFGRjg4MDQ3Mjc1QjkKKzoxMERFQjAwMDQwQjJFNUZDQkM4MkY4NUM1OEVGRTI2M0Q3NTI3MEFEMkIKKzoxMERFQzAwMEQwNEZGNjBGODE3NUE0NkJDODU3ODMyMUJFREY3NThDQzgKKzoxMERFRDAwMDBBNDE1NkY0Rjk2OUU1MjUzQURENURCODdGMjhGMzUzMjgKKzoxMERFRTAwMEU2RjcwQTZGMzdDNzMxQkE5QTc1QTQ4ODhDODRGM0U1RDAKKzoxMERFRjAwMDlDNjM2RUNBQ0ZCODNGNUQzRDEyRjZDREY0Qjk0QzkyMkIKKzoxMERGMDAwMDAwOEVERjM5M0RDMjc5MDExOTQ0OTBDRTNERDE1N0VERTUKKzoxMERGMTAwMDdGRUE4OUZGQ0M4MTczN0YwQkU4Mzk5RDdCREMwMTdEMzMKKzoxMERGMjAwMDBERDNERkE3OUNCNzg0OUMyRjc5OENDRTc0ODg4Mzc3MjAKKzoxMERGMzAwMDY2MUJFQ0NDN0Y5ODI0RDI5MTRDQzJGMzAzOTU4RTA3REMKKzoxMERGNDAwMEIyQkYxODBDRTczM0Y3NTEzOTA0RkRFQTFBMzQzODgxQUYKKzoxMERGNTAwMDVDNDYzRTdBQjJGNzNERDE3MzAxQ0MzNzI2N0ExQTA4NzcKKzoxMERGNjAwMDlDNzM1MTdBNkU4NUZCOEVCMUQyQjMyNzNCRDk5MzdEREEKKzoxMERGNzAwMDNDQjE4MUQxRjkwOEY3NEZBM0QxNTkzRDBGRDNFMjcxREMKKzoxMERGODAwMDhCMjI3MzNFNzAzOTI2Nzc2OEU4NUYyQUQwQkZBRkQ1MDEKKzoxMERGOTAwMDgxRkQwRkVFRkQyMDEzQ0VGMUJBNzY1RjkxNDA4Njg2QUIKKzoxMERGQTAwMEJFNUZDMENFN0JCQURGQ0YxN0Y0NDBGQUQzREYzMzYxNTgKKzoxMERGQjAwMDdGN0NGMDg1NzdCMTVDNEI5ODFFNkVCNDk0Q0M1NUM2Q0YKKzoxMERGQzAwMDA0RTFDNTdBOEYyMERBQkMzQzhBMjRDRUFCMDdGREVDOTUKKzoxMERGRDAwMDQ4NTVGNUIzMzUxM0U0NjkzN0I3MDM2MUYzRUI0MTNFQjgKKzoxMERGRTAwMEQ1RjkxRDgwRjk1MTM4NTM0MUE2RTkzQ0YyRTU5MkJCQzEKKzoxMERGRjAwMDg0Rjk4RDRFQzE3OUY3MzQzRjRGODI4MTQ4MjMyODdFQzIKKzoxMEUwMDAwMDU2ODM4MTI0NTA3OTU0REM2QjE1RENENzM5REI3QzEwQzYKKzoxMEUwMTAwMEE3RDgxQkVGQUNBNTJDRjFEOENFQkUxMTcwQzA3QjYyODcKKzoxMEUwMjAwMDNDNjM1OUEzQjk0NkY0OUYxMjZCNDRGRjI5QTMyNkQ0M0QKKzoxMEUwMzAwMDdGRUEzQUZDOTRDRDRERjE1QjlFQUVBRjM5RDkwQkQ2NTkKKzoxMEUwNDAwMDM5MTc1RkU3RDhCQUFBRTI1N0Q1OTQ1NTYzMTFFMDg4MkIKKzoxMEUwNTAwMEY1QUU3QUE5ODhEREMzNzEyNENDOEM3MERFQTc5NkNCOEYKKzoxMEUwNjAwMEQzMEQzOENFRDlDNjgxMDkzMEVFNTlBRkE5ODZBREFGRjAKKzoxMEUwNzAwMEY2MUEzNjZFN0E0REU4RkE1QUI5MkFCRUU2RTRBODIwQjYKKzoxMEUwODAwMDdFRDFFMEZFRDBGODUxODkyMDFGOTk2MDVEQTQ2RDAzMTgKKzoxMEUwOTAwMEEzRjc4RkNBNEZGOTczMDM5RUFCQjcyODVGODBGRjZFNUIKKzoxMEUwQTAwMDFFQTJGQUVGMzJENjU1Qjg5RTI2QkRDRjM4MDI5RUVGOUIKKzoxMEUwQjAwMDE0QzZBM0VGMzlENEIzNzE3ODJGQkFEQ0M4RTQ5NENBN0MKKzoxMEUwQzAwMDRGM0Q5Qzc3MTFCRTNGMzAyMTlGREQxNDYyMDI4NUQ3MDIKKzoxMEUwRDAwMDIxNUJFQTQwQUVGQzBBRDM2NzBGOTdEMzJBNTM5QkMxNUEKKzoxMEUwRTAwMEVENDA3MkI3ODI1QzJGMThBQkNBQjk2M0Q2MDdENDRFMjUKKzoxMEUwRjAwMDdGRkMxNzA1RUY5OTkxQUYyOUY0OUNFMDU1ODc0NUE0NjMKKzoxMEUxMDAwMEM0MDY0MUQ1MDVCQjk3MTVDM0JBRkRGMThCMzdGMTdEMjgKKzoxMEUxMTAwMDdBN0QwRUNDRkIzQ0QxMTU4MTVEM0E0RkRFQjQ4RDBBODEKKzoxMEUxMjAwMEQxRDdEMzBBOEI2MzkxM0FCNkNGRjFEMTNGMzBCRkM1NzcKKzoxMEUxMzAwMEY1RTJCRTY3NDk4MzU4MkYyMzMzNTJDMURFOTY2RDU0RjIKKzoxMEUxNDAwMDg4OUZFMkJFMTRGNjRERUFCQ0E5RkQ3RDU3QjEyMzcyNEIKKzoxMEUxNTAwMDRCNDhDRDNBRDhBNzNGQTZCMDc4Q0YwMjNCOTFGQjUwQjEKKzoxMEUxNjAwMDdCNURGNTg3NUZFNzQwRENBNzVENjFGRUFFN0ExRUJFOTIKKzoxMEUxNzAwMDM0ODlFRDA3MkI2NkZBMEQyRURBRkZBM0REQTM2RUEzMUIKKzoxMEUxODAwMDE2OTdCRUVGNUY4N0ZFQ0Y3NEUyREM0RUMyRTlCRUIwRTkKKzoxMEUxOTAwMDRFQzRBRjI3RkNCNUY4QUE3RTUwRDhCOTNDQzcyM0I5MDYKKzoxMEUxQTAwMDUxOEE3ODVGRUE2QjZFRTc1NEZENDgzMkQ4ODVCODRGRTQKKzoxMEUxQjAwMDlBQTZBRUNBODFDMkU1QzBBRkI4QUQ4NjE0QzY3N0UwRjQKKzoxMEUxQzAwMEEzMjQ3NzFBREMyMUZEMENDMTdFNDk4NjMxRDFGQjE5Q0QKKzoxMEUxRDAwMEExOUYxRUZCQTVCMTdFOUQ4NUI4M0YyNjU0OUU4NjA2NTUKKzoxMEUxRTAwMEZCOTk4M0YwRkFCMjcxQzU3RTU1N0Y3OEY2NDUxRjk1OEQKKzoxMEUxRjAwMDk3OEFERjNENkEyMzc0RERGQzU4QUU0Rjc1RDJFNzk1RjAKKzoxMEUyMDAwMERCRUZCNUI5Njg3OTQ2RjZEOTgwOUYxRkZCRjUxMUVGQjIKKzoxMEUyMTAwMEZCREU2MjUwRTlFMUIyNDgxMDRGRTNGMjQ5RUE3QzE4QjQKKzoxMEUyMjAwMEE3Rjg2MkJCNjJDNzczODQ0NjYzQzA0OEU1QjM3QUY3NTgKKzoxMEUyMzAwMEQyNjIzMjFDRUJDNzU5N0RGREE3N0FBODM3OEJGQ0FBQTYKKzoxMEUyNDAwMEY4Q0RBM0E5MEU3NjRGODhDNTkzNDgwMEZERENFQTZEOTIKKzoxMEUyNTAwMEZGNTEwOEVCODU4Nzc0QTI5QzY5REY4M0YxMkYyNkExMEIKKzoxMEUyNjAwMDVFQ0YzNzI0ODRCN0UzQzVFMDU0Nzg5RkZENzg3NkRGMkUKKzoxMEUyNzAwMEZGQTlERTA2RTVFNEQzQTA0NzFFOEQ5Qzk0NzNCRjE1NkQKKzoxMEUyODAwMEU4MDVGQkZEN0M4MzM1MTlFREZEQjVFNDVBRDA3Nzk1QTMKKzoxMEUyOTAwMDJFQzRDRkZDRDdEQTFEOEYwRjNGNEVGMTNBQjdFRDJGQ0EKKzoxMEUyQTAwMDM2Njk2OEE4OUQ2MEYyRDZENUI0RjBERjRDQkFFOEY2QkUKKzoxMEUyQjAwMEE0OURDQTYzQTg5RjQ0MDFFMzdCOEU2NkVFNzdCN0IwNDYKKzoxMEUyQzAwMEIyNTIwOUQ4RTAzRTRFRTUxNkM1NDkyNTkxNTQzRUFCMDEKKzoxMEUyRDAwMDI3NzAzRjgxQkM2N0Y0NDM3Qzc0RDlCM0FGQkMzMzlFRDUKKzoxMEUyRTAwMEQyN0ZEOTJFMjVCOTk4NERDNzIyQTUwNkY5RTNBMTdGODMKKzoxMEUyRjAwMDU3OEQwQ0YyQTNFMkY3QUYxODFDQzNEOEYzN0I5MjgyQzAKKzoxMEUzMDAwMDdDNTlCNjZCOUY4MTBDMEJBN0UzQTRBNjdEODYzNjRCODgKKzoxMEUzMTAwMDA0RkUzNDFEMkY4NEY1QjY3NkM3M0YwQzEwNTdGQzc4RTkKKzoxMEUzMjAwMEFGNDREMkIyQzJERjJGREZGMjBBQUU3QjQwMjdFNDI3MzAKKzoxMEUzMzAwMEU3NTczN0ZGQzJGODE2OThGNkYyNjhFQzY3MDc3QkQ4MDQKKzoxMEUzNDAwMDEzREZCMjYxM0Y5NzgyRjJGRERDQ0I3MDhGRTk3REEzRDIKKzoxMEUzNTAwMDEzRTg1MEZFREMwQTFCQ0NFN0I0NUNDM0U0RkNEN0Y3M0YKKzoxMEUzNjAwMEE2ODJCRTk3MkJCRTU0M0I5NkVDNzlGOTkzM0Y0N0Y5QjIKKzoxMEUzNzAwMDVCNzJGNEU3QTlFODNGMTA1Nzg2MEU2REIzMkYwM0U2RjIKKzoxMEUzODAwMEI5NzhGM0FEMzhDRjMyRTI0NjM5MkNGRkI1QkUwNEVFOTIKKzoxMEUzOTAwMDk5NUU5MDQ5RDFBRTA4N0FGMjE3MDNEQkJGOUNERTRBNDIKKzoxMEUzQTAwMDk5NEJFNzc5MUFGMDAzRkJGNkE2REVCRjFERTNFNjNGQzMKKzoxMEUzQjAwMEMzN0I3MDNGRTc3M0E2MkIyMUQ2MkY5ODE4QkZCNjE4RTIKKzoxMEUzQzAwMDc0NkEzQ0Q0MjRDOEVGQjZGNUFEQzBBN0IzRkQ1QzY5NTAKKzoxMEUzRDAwMDcwRUU0MUU5RTBFMzc0OTMyRTUxQjhGQUEzMDU2OThDMUQKKzoxMEUzRTAwMDRGQzQyMUU3RjBGN0E4QkQ5RjA0Q0ZBMTdGQUJFMjMyNzUKKzoxMEUzRjAwMDBGMTdERUUzRjY5MThEQkY5MjhGNEZGMThFODNGNUVCMTEKKzoxMEU0MDAwMDc0NkE2NEZGRUYxRjdDN0VGNEE3OTU4NEM4NTk4OEJFQTgKKzoxMEU0MTAwMDMzRkRERjc2MUZEMzc3NTVGRkZERDM4QkEwRkRGM0I3MTgKKzoxMEU0MjAwMDk4MUVDMTdCQjA1RTUwQkMwMjY5RDhCRTZGQTY4NEY2NTAKKzoxMEU0MzAwMDgxRUVCMzIzRTlGOTM2ODVFQkI5RDg0RTc3MzhCOEZFQ0IKKzoxMEU0NDAwMEFCNzI0MkYxOTdBNTg0NTA3OUExRTMyNDIxMUY3MDdGMUMKKzoxMEU0NTAwMDVDQjY5MUJFMUZFMjk3Nzk2MDVDRUM2NzA4M0UwRjU5OEQKKzoxMEU0NjAwMDM3OTY3MEJCNzA0ODYzMEZDOEU2OTQ5OEZDRTg0QUM1QkQKKzoxMEU0NzAwMEZGRjQxM0EwQkZFRjE5OUQzRTA3RThBRjUyMDJGM0ZGNzAKKzoxMEU0ODAwMDY0RTc4MTc3RTY1MDM5RkZBNDQ5RDU1QkQxQUU2QUY1RTAKKzoxMEU0OTAwMEI2RkNGOTMxMjQ5MkRFN0U2MkExRkJBRTQ4N0E0QjlGMzYKKzoxMEU0QTAwMDQ3RDQ1QjRCMUJDQUYzRkYyREJCQUFEMkFGNUQ0MzNGRTIKKzoxMEU0QjAwMEIwOEYyRjNCQTJEMzUxNkIxRjM3MTgxQzExRUQyM0ZEREEKKzoxMEU0QzAwMDc5OEJFNDg0Q0JBMTJBN0ZBQURDNTVGQ0I2QUEzRkQ4N0QKKzoxMEU0RDAwMEExNkVGOTU0RTVBRjVCM0U1NUY5RDNDRTU3QTQ5RkI2NzQKKzoxMEU0RTAwMEZEMEZBMERGMTRBRkRCNEQ5QkE2ODFGRjZDRUEyNDE4NjMKKzoxMEU0RjAwMDg3Q0Y5REE5Qzc3QjlBQTZDRjA5QkJBNzcxNDczQ0Q2RkEKKzoxMEU1MDAwMDY3RTlEQjdFMEYzRUUxMDc1NUIzODZDMTNBN0YzQkYxRjkKKzoxMEU1MTAwMDI5RUNEQ0JFNUU0MTNGRjZFQjRCOTcyNkQwRjlDQ0UxMEYKKzoxMEU1MjAwMEY0QkQ5RDkyN0IyQUU1NDdBOTJDMDVFMjI4OUVCMzY1QTAKKzoxMEU1MzAwMEUyNEI0ODgyNzhCMjQ0NEU4NEUwNzE3QkI5NTg4NzlGQTEKKzoxMEU1NDAwMDg5QTk0MTM4M0RGNUZGQjY3RUY3NzcyRDhGNTJCRTlFRTMKKzoxMEU1NTAwMEM4MjZFNDZGNTBFMkZFODMzQUQ2MjFGMjM0QkQ4NTlEOTEKKzoxMEU1NjAwMDYzNzg0NjRCRkUwMUE4ODc2RDcyNDlDODNFQzI2MzY0NUEKKzoxMEU1NzAwMEY2RTc2OEZFMkQ2MzgwN0VCOUIzODYyNTMwMzkxRjhDOUYKKzoxMEU1ODAwMEZCNDUwRkI3NjM1RDNFNDcwMkQ4RjdBRTk2ODFCODJGQzMKKzoxMEU1OTAwMEVDM0FCQ0QwRUE4RTYwQ0YwRTcwMzk3Qjg1OUZDMzc0OTUKKzoxMEU1QTAwMDU4QTQ3QTNEOTVGQjBFRDI4OTdFOERDRjYyOEUxODk3NDYKKzoxMEU1QjAwMDlCNjM1NEVEMzRFNzFCRkREMUQzRjE0QkI5MUNDRUE2QzAKKzoxMEU1QzAwMEFGMjY4QzBDRTFEQkNDQTkxRkNCQjY3MDNFQzBDRjg5NDcKKzoxMEU1RDAwMDkwN0RDNUY3QTUyRkM4MzVEMEY3ODBCOUFEQjAyNDQyREUKKzoxMEU1RTAwMEZDQTY5MkQzNkZFMkZFMkYwREIwRUVFNUI3RTRDQTQwNzEKKzoxMEU1RjAwMEM3N0M4QjVFODg4NzJDMzI3MjdEMUQ0QTg2MDI1RTEzMzMKKzoxMEU2MDAwMEY3MkY3RDYwMEM5NTYzQ0Y2MUJERDM0Q0U3RTc2OUY5QzcKKzoxMEU2MTAwMEQ0RTA4RUIwQkZEM0QyMTNFMDgzN0ZCOUQ1QzhGQ0U1NzgKKzoxMEU2MjAwMEI3OTU5MkM1NDBEN0I3NkY2NUU3QkQ3RjMzMzhBQjIyNEEKKzoxMEU2MzAwMEUxOTk2RTY2RkVFNjZDNTI3MjYxQjRGNEQzQTM2RkVFOUMKKzoxMEU2NDAwMDJDNkIyMDhGRDJBM0NCQzJFRTZCODdDQjFGRDNGQjJFQkMKKzoxMEU2NTAwMEJCRTQ1RjJEODExQ0VBNTkzRDk5REQ2RjJFMjRFRTA3NDYKKzoxMEU2NjAwMDI2NDhBOEVGMzc4NERBQUZEQ0U2RTlDRkMyN0Q5QUVBMjQKKzoxMEU2NzAwMDE2QzlBRUEzRURENTcyOUIwMUU0RDhEM0JDNEIwNkJGM0YKKzoxMEU2ODAwMEZEMjYwNzcxRTFGRTVBQUUxOTM2MzMyNEZFNDU5NzNENEIKKzoxMEU2OTAwMEE0RDc4MUFGRTZDQzA1RkE3RTM2RDM0ODAwMkZEN0QwNzkKKzoxMEU2QTAwMDRGNkRCMEZFN0ZENjMyMEFGNTIwREFCQzVFRjc5MjY5NzQKKzoxMEU2QjAwMEY5MEFDMDYxRjY0QzJCMEY4NUM5RjE0MkZERDY0OUE0NzkKKzoxMEU2QzAwMDJGOUMwMzRGMzRCNkFENzA0NkUwNUZCRTg5Qzk1OUNDNkMKKzoxMEU2RDAwMEY2Q0RGNEZGOTk3RDlCNDBFRDFCOTM2QjI1RDRCRTU5N0QKKzoxMEU2RTAwMDRDNjFGNjJEMkQ5MjdENUJCRURBOTEwNjcyQjE3Q0NGMjYKKzoxMEU2RjAwMDQwRkM3RTZCRjk2QjhCNTMyMkQ5Qjc1N0Y5QkVGNzM1QzcKKzoxMEU3MDAwMDdFMEZCQ0EzMkZCNTZGMjM0MkVDNUI1RjZBREYyMkM0OTAKKzoxMEU3MTAwMEM5QkY4OEQ1QkU5OUZFNjdGNEVGNTVCMDZGMTFFNjZCOUYKKzoxMEU3MjAwMDM2ODlGNkFEQTg2NTM1REFCN0EyQkU3QUUxQkUxMjMxRjgKKzoxMEU3MzAwMDUxRkIxNjdGMzlGQjM2RkZEMTVCQjFBRTM4RTMyM0M4RkUKKzoxMEU3NDAwMDBGRDAxNUVDREI2QkRDQ0VDMTM4NjBFNzZFMzBCMUY4NzIKKzoxMEU3NTAwMDY2QUM3NkFFNUZBQzc2RUU3Rjg4Q0VBQTlENUJERTRGNzAKKzoxMEU3NjAwMDQyRkYyNTVDMEU5OTlENUI5RUM1RUNEQ0YyM0RDQ0NFNTQKKzoxMEU3NzAwMDJEQ0Y2Njc2NEU2QkRGRjJDMkVDMUI3QkJGN0EwODdEMzUKKzoxMEU3ODAwMDFGRjc4RjU5OEZERjAxRjcwOTRCMTVBNzg5RjYyRjc2RjEKKzoxMEU3OTAwMEE4REY0RkQ0OEMwOUI1NzczNzk4NjRBNDczOThCRDczRkMKKzoxMEU3QTAwMDdFOEFERkMxRjQ2NEVGRkUwQUY2MkUxQkVERDgyMEQwN0UKKzoxMEU3QjAwMDIzQUQ3QzRDMTkxNDJGREM2NzdCRkJDQjUzQkZGRDFEQjUKKzoxMEU3QzAwMEU4Q0JFQjdBQkMyRkY0QUU4RUVEOEZGNjdFNzk2QTE0MkYKKzoxMEU3RDAwMEU4REQ0MzI2NjY3Rjk3OTgxODNGREJCRDNFQjRBNzkzREMKKzoxMEU3RTAwMDg2MzI3REFGQkE4N0QxQUY3QUI3QzRFNkJCNTJFRjc3MzYKKzoxMEU3RjAwMEMwM0FGMEQ1NDVEQzNGQ0ZEREMzRjZDRkIzOENBRDI5QjEKKzoxMEU4MDAwMEYxNzAyRkU5NUYxNEMyQkVGQjIwQzVGMzQzRTRBMUY0MEQKKzoxMEU4MTAwMDYyMDVDNjAxOUY4RkIzNkQ4NUZENjVBOTRDNENFMEM3QUQKKzoxMEU4MjAwMENFM0IzQ0U1NjNGMDVGRTc1REFDNDNCRjc3MUUzQzg3QzIKKzoxMEU4MzAwMDczMTI3RTRGNDJCRDQ3MzFBNzc5RDcyQjdENDhGOEZEMzMKKzoxMEU4NDAwMDg4ODk0NkM2ODc4OTJCMjRGRjk2MkNCODhGMjBCNkNGOUYKKzoxMEU4NTAwMEQzRjhGNUVCRjgzQ0E5M0Y4Qjc0MjE3RkQ1NDc4Q0RGQ0IKKzoxMEU4NjAwMEFERDNEMkMzQzlFNjVGQjU1MjJGRDJBMzQ2OEE0ODBGQjMKKzoxMEU4NzAwMENBRDFFMkY5QTlDMUY5Q0Y3REExNkQ1RDFGNjg1RjJBRjgKKzoxMEU4ODAwMEUxN0U0QUE1ODc3NjlFMkE3REQ0RkRDQTNDQUUyMzlFQjIKKzoxMEU4OTAwMDk2NUQwQUYwNEIzQjdGOTU3RTYxRjM1NkU5QTk5OTdGMUYKKzoxMEU4QTAwMDlENkEzRkFFMjZDMzQwREZERUQ1QjkxRjE4MDNGMkYxRTMKKzoxMEU4QjAwMDY3NEEwNzhBRDc2REIzQjNEMzQyRURGMTgzREMyRTREOUYKKzoxMEU4QzAwMDc1MUZDRjRGNzUwMERERDg3Nzg5NzNDQTc3QkQ5MjRBMUYKKzoxMEU4RDAwMEU3NzNCMzJCNkIyNDdDM0Y3Q0VCNTcwNjM3QzQxNzBFRDIKKzoxMEU4RTAwMDk4M0JEMUJFQTlGMkY1MDk5N0Y3MDA4N0YzNzY2RjdCQzUKKzoxMEU4RjAwMDNFQUUyM0NEOTIxREY1MjZBMEIxNUZGQ0ZFOThFNzFFMkIKKzoxMEU5MDAwMEE2NTcwN0E0N0ZBQ0VCMzMxQUU5MEFDQjAwMjk1NEQ3RUEKKzoxMEU5MTAwMDIxRTAwM0ZERUZENDE2QzYwNzBGRjA4MUZFNzcxQUU5NTgKKzoxMEU5MjAwMDNDMDQ3NEFFNEU5NjlDMDFFOERGQkNFQjVFOTA5QjU3QjYKKzoxMEU5MzAwMENERjQzOUU4NkZCOUU0NjRERjk3MTE0QjQ2RUE2NUU1MzkKKzoxMEU5NDAwMDUzOEUyNDlGMTg5Q0M4MDlBRThCRjNBMDVGNTJCOERGOEEKKzoxMEU5NTAwMDMxRDFEOEZBMzZFMDMxOTFFQUMzMTYxMkVFODdBODdDOUQKKzoxMEU5NjAwMDFGNDJGRjVDOEE3NEVGQTcwNzM5RkU5OENCRTdBQjQwRTQKKzoxMEU5NzAwMDZGMEJEMEI1RDMwMEZFOEMyN0MwRDYwRkI1REQyMzNCN0YKKzoxMEU5ODAwMEYyOTEzRTJBQkQ5QkU5RkEzMDlBRDE1QjE3ODE5RTM3RkUKKzoxMEU5OTAwMEFCNzU0RTRGNEY4QkE0QzBGQjkzRTlGRUI1OTcwNEE3MTAKKzoxMEU5QTAwMDVCNUYxRTUyRTUxOEJFODdEM0QyMDNFMjAxMTkyMTdBQkMKKzoxMEU5QjAwMDBGRjYyOUY0N0NCMkJBRjkyOEQyNjVDQTRBRUE1RTg1MTQKKzoxMEU5QzAwMEQwMURFQ0Q2RTVFODEzNEQyRkFBOUI3RjE4QkRGODQ0NjcKKzoxMEU5RDAwMEEzMTc3QkNEOUQ3RjE5MDFGMUFGM0QxMkRBMDdEMjkyQ0IKKzoxMEU5RTAwMDI4RUNGN0UzQ0RDQ0NGMzg2MDc2QTNGQzc2QkVBNkUwNkEKKzoxMEU5RjAwMEZENzNBRDFERjk5QUNCM0RFQzJGNDJCRkZCOUIwNDEzNzkKKzoxMEVBMDAwMDAxM0I2NzM3OTM4RjU0M0MwNjMwMzkwQUI1REZBRjlBMjQKKzoxMEVBMTAwMEREQzhBRjY4RjBFM0Y4M0ExQ0NEN0Y1MkVCMzdDMjc4MUYKKzoxMEVBMjAwMDcwMUZEMTIxOEUxN0U2NUZGMEY4NEY0RkYzNEFFM0UzRjIKKzoxMEVBMzAwMDdFRDc3OTc1OUY2NzkyNTYwMzYxRjFGRjE1QzY5MDczNzMKKzoxMEVBNDAwMEE5REJGOEI5NDA3NzlDMkNEOENGNkVCQTRDM0Y4OEJGNzEKKzoxMEVBNTAwMDA0RThCQzVGRERGOTE0QzY3RkNGM0Y3MzdDMUFDOEVGQjIKKzoxMEVBNjAwMEIyM0ZFQTg5ODlGMkI5N0RBNzk1MDREOEJEMEIwM0FDMDIKKzoxMEVBNzAwMEIzMTVCQkY1MTFDRjUxMDhBOTY1REYzOUZFQ0U4QUY2NzMKKzoxMEVBODAwMEE1RTI3OUEzQkY5OEJFNUZGMUUyNDdDMzIxNkVENUJFNzAKKzoxMEVBOTAwMDg2RDkxOURGMzM1QzNFN0M2REMzRTE3Q0JENDI2NkU3RkQKKzoxMEVBQTAwMEMyNUE3OEQ3NzE3OTM5Rjc1MjdDMjlEODQ5QTk5MTdEMTIKKzoxMEVBQjAwMEJGNUFEMTM0NEIzMTg2RUNEMzQ3OUExNTFDOTdGNkMzMTUKKzoxMEVBQzAwMDdCQ0JCRTFEMTJDNkNCQzNGMTVCQ0RFMEVENjBGNkFGRDQKKzoxMEVBRDAwMEEyNTlGMUMzNzdCMDE1OEQ1QjcwN0ZFQjY5RkNENDAwNTAKKzoxMEVBRTAwMDdFRERBNERGM0RDQkJFQUY2REQ2OEJGMUMzNDY3REMwQ0UKKzoxMEVBRjAwMDg4NzE0RUZENzFFMzcwQTZCNzkyMTA4RkFBNDJCREFDMkIKKzoxMEVCMDAwMDZFRTI3MTMyNERGQzY4RDlFRkY2QkNFOEEzQTQ1OUY2NjkKKzoxMEVCMTAwMEZCREZEOEMwREU5QzZEREQ2RUMzRjg1QzIzOEJCRkM5MDQKKzoxMEVCMjAwMDE2Mzk3MjdDQUVBN0I4NUNEMzdEM0MyRTM3RjUzNDE5MEMKKzoxMEVCMzAwMDFFMUU5NzNCMEJGRkExN0EzOERGQ0NGNTU1OEQ2QjM2NDcKKzoxMEVCNDAwMEY2OEFFOUZDN0NEOUIzMTc5RTg0RjNBNDczQ0Y3RkYyRDUKKzoxMEVCNTAwMDI0RTA1RkY5Q0Q2NzRGREUwREU3MTI3QkNENzY1OEZGREQKKzoxMEVCNjAwMDNDQ0ZCQzhERjE3N0Y1QkRCQkI5OUNCN0VGRjhDREQzRTkKKzoxMEVCNzAwMDRGNTAzRDZDN0ZDRjg4RjdCNkRBRjc5Q0NFODRFRjE5MDMKKzoxMEVCODAwMERCNzc3RDk5MEFGMUNEOTU3QjBBNzAzRkIzRjI4NTQ5MTkKKzoxMEVCOTAwMDY5OTdCQjdGMDJGMkU5OEZFMUZDNDRDQjhGMDNCQkY1QTEKKzoxMEVCQTAwMDA0QkVFNzNDN0ZDQzg4RkU0Nzc3OUNCNUE5OEFDNUFGRjkKKzoxMEVCQjAwMDFEM0NCRUJBMzNGMjc5OTUxQTBGQUNERTdEQ0JDREQ3QjIKKzoxMEVCQzAwMEMzM0FCODVCNzEzQUYwMzk4RjBGRjYxNDU3N0Q4QkYyNjgKKzoxMEVCRDAwMDc1NDQwQ0ZDREJDOUUzRTc0RDUzMjNDNjU1Q0ZDMzdGMTcKKzoxMEVCRTAwMDI4OUYzNjk5QzVCOEVBODVERDhCRkZFRDA5NjhEQkREMjYKKzoxMEVCRjAwMDJCNkE1QzM1MTAwM0RERDRGM0IwMzJCMzZCOUIxOUY0OTAKKzoxMEVDMDAwMEUzRjlERjYyMUMxQkY4NDY3RDcyRDJGRUVDODU0Qzg4NkUKKzoxMEVDMTAwMDQ3OUM1MTNBRUZDNDdCQ0E3QjhDNzhDRkE4NjJDRkJCQUMKKzoxMEVDMjAwMEE4MkZFRDJGMUNDNTczMjZDMkNGQTNEQTQ5RjcwRjNCREYKKzoxMEVDMzAwMDM3RTA3QjFEQ0YzNjJCOEJDNzcyRkE0M0JDRDY2MUMzM0UKKzoxMEVDNDAwMEU3M0MyRUNCRTQ1ODhERDc0NjhCRDNCRTZGNjZGN0ExMzkKKzoxMEVDNTAwMEQ0RjNCOUFBNkQxRjE4ODgyNkZFMkQ4RDA1N0UxRDE3QzkKKzoxMEVDNjAwMENFMTVENTc5NkJFMUQ5ODEwRUQ3ODY5RTNGNDQ4Qjg3MkYKKzoxMEVDNzAwMDczQkIxQUM2MkY3NkVFRDBCRTg1OUY0Nzc0OUYzMzEwQTQKKzoxMEVDODAwMEQyNzcyNDlDOEZCMzczNzM4RjVGN0EzNzEyN0ZENUYzNUIKKzoxMEVDOTAwMDg3QjdCNUZBRTk4RkVERENBMTY3QkNCRjFCNUQ1RTM1QjgKKzoxMEVDQTAwMEIzRkRBRDRBOUY3MzVGNDdCNkQzOUQ1Q0RGRTkzQUQzQUUKKzoxMEVDQjAwMDYxQzY3MzYzQjZDRUNDRTNFQjRDMzVBNTFCRkJFRThEODIKKzoxMEVDQzAwMEUxN0I4RUVGMDNDRjNEQTNGN0MzN0U3OTVERDMwMUI0MjMKKzoxMEVDRDAwMEI3NUEzREFGMjYyQ0ZFQTUxRDRGOEE2M0ZFNDE3NUYzNDIKKzoxMEVDRTAwMEJFRTE2MDhGQ0VFRDdGMDlFNUFGN0FFNzcxODM4RkMyMTkKKzoxMEVDRjAwMDM5RDRGODdCNDNEQkQwQTBCQzgzMURGNzg3RDhGMTczRjAKKzoxMEVEMDAwMENGRUQxQkNFQ0U0NTIyRTc2OUIxNzFGODlFMTYxMUJFM0MKKzoxMEVEMTAwMDY3RTdBNzAyRkM2NUJFMjY4M0RERDJGMzM4Njc2NUQ3QjcKKzoxMEVEMjAwMDJDOThFRkQ5NTY4NUMwN0RGNkIzNERGQTIyN0Y4NDcxQjkKKzoxMEVEMzAwMDNGODM3NTZDNEM5MDRFRUJBQ0VDM0IzRTdEOTIwMUZERkQKKzoxMEVENDAwMENDOTVENkIxQzdFMEZCRjE5NTU2ODMwM0Y2REJCNUFCQTYKKzoxMEVENTAwMEQ5QkRDQURBRkZFNTRDMDdCRUQ0MjZERTg2RTc0NkY1MDQKKzoxMEVENjAwMDFBM0FEQTkzRURCOUIwMEZCN0U3OTc4QzA2QjFEMkRBNTkKKzoxMEVENzAwMDgzNDQ5NzRFQzA3QkE1QjUyOENENjE4MUJDNUVDQzRGNDYKKzoxMEVEODAwMDIxQjIxM0JGMzNENERCMEE4QjYwMUU3QUJCQ0U2RThFRUEKKzoxMEVEOTAwMEI4QkUzMjc4OEE4NUU1Q0Q1MEVDRTI3NzdGREYyMTBGNkYKKzoxMEVEQTAwMDA2ODE3QzFDREYzQTBGNDZBNzI2MEY0NkY5OERGRkFGODAKKzoxMEVEQjAwMEU1QzFGMEMxMzgzRjgxM0MxODAxOENFRkE4NzkzMDkyNTEKKzoxMEVEQzAwMDdGRTQzQzE4MTA1RjFBMUQ5MjA3QTM1MzkzMDc4M0YzNDcKKzoxMEVERDAwMEYxOUY3OTMwRkU5OTA3MDM0QTM1MEZDNjNCMUJDQTBBREIKKzoxMEVERTAwMDIwNEY4NTlBMDdFM0NDMDY0RjAxRTRBNTUwRjM2MDdDRTEKKzoxMEVERjAwMEI1NjExNUFCRjMzQzE4OTZGQjU3MTc4NEU2QzFDOEJDNDgKKzoxMEVFMDAwMDdGMDNCNkFCNzkzMDlDRjczRjUyMTA5QTA3MjNFRkZFOTEKKzoxMEVFMTAwMENEMDVBMTc5MzA2NkRFQkZCRDIwMzQwRjQ2RDlGRENGQzgKKzoxMEVFMjAwMDE1MDg3OTMwRDZGRUExMDBGMjYwQkMxRUVGNkU4RDRCNDYKKzoxMEVFMzAwMDg5OUUwN0EzMzlDRTExNTMxRTBDMEFFNzNEODQxMzI1ODIKKzoxMEVFNDAwMDBGODYxNjRFQjQzQzE4MTRDRTg5QjgzMUQxRjM2MDg0QzUKKzoxMEVFNTAwMEUxMTMyNTBGMDY4NUYzMDlDMjg5OTIwNzIzMEM5RjI4MjkKKzoxMEVFNjAwMDc5MzAyODlDQ0Y3MTVFNTFGMjYwNjhFMTQ0Q0I4MzQxRDgKKzoxMEVFNzAwMEUxRkMxN0MyODk5MjA3NDMwQjI3NUExRTBDMEFDNzEwRTAKKzoxMEVFODAwMDlGMTIzRDBGNDYxODNFNTFGMjYwNTAzODA5MDgyNzRBM0MKKzoxMEVFOTAwMDFFOEMzMDdDQTJFNEMxQTA3MEQyMTE0RTk0M0MxODVBNTIKKzoxMEVFQTAwMDM4RDFGMjYwNTAzODU5MDgyNzRBMUUwQzJEOUM2ODc5RDkKKzoxMEVFQjAwMDMwMjg5Q0FCRTJDNzQ0Q0Y4MzExODY0Rjk0M0MxODE0OTIKKzoxMEVFQzAwMENFMjhDNDI3NEExRThDMzA3Q0EyRTRDMUEwNzAyNjIwMjQKKzoxMEVFRDAwMDlDMjg3OTMwQjQ3MEEyRTVDMUEwNzAwQTcwNUU1MUYyMkUKKzoxMEVFRTAwMDYwNjhFMTQ0Q0I4MzQxRTE0QzQzN0NBMkU0QzEwOEMzQTgKKzoxMEVFRjAwMDI3NEExRTBDMEE2NzE2RTIxMzI1MEY0NjE4M0U1MUYyRTgKKzoxMEVGMDAwMDYwNTAzODZFQzQyNzRBMUUwQzJEOUM2ODc5MzAyODlDQUUKKzoxMEVGMTAwMEE1MDgyNzRBMUUwQzJEOUM2ODc5MzAyODlDRTUwODI3RjcKKzoxMEVGMjAwMDRBMUU4QzMwN0NBMkU0QzFBMDcwRUU0NjM4NTFGMjYwREIKKzoxMEVGMzAwMDg0RTFGMzVERjM2MDk4MDM4M0E0ODE5ODA3MDNGMzcxODAKKzoxMEVGNDAwMDc2RTdDMTQ4RkVENjc5MzA3RTA1RjhGRTMzMEZDNjNGMUUKKzoxMEVGNTAwMEYzNjBGQzE4NzkzMDZFQjVCQUZGMUU4RkZCQzZFRjk2RDIKKzoxMEVGNjAwMDA3RTM0Q0JDMjY2RjQ0MEY3OTMwNkVCNTk2OUMwNTc5NEIKKzoxMEVGNzAwMEZFQjY3OTMwMkVDNDdGQkIzQzE4NzQ5QzdGNUM2RTlDQkYKKzoxMEVGODAwMDY4NzkzMDc0OTY2Rjk3MDc4MzhFMjM1QkM2NUM2NjNFMDQKKzoxMEVGOTAwMDUxRjI2MDI0NThDNEZDMjEzRjU2MUU4QzYzRjE0OTM4NUQKKzoxMEVGQTAwMDlGNjg3OTMwN0U3MkY5MjZFODM2MEJGNjY5RDM1MTE0RTIKKzoxMEVGQjAwMEM5NEYyNkZGQzQ2ODBCOEYxQkZFNTBGOTI3NjBEMjM5NUEKKzoxMEVGQzAwMDNGQTVGQzEzNkExRTgzMjYwNUQ2QzNGNzM5REZERkUxQjAKKzoxMEVGRDAwMDcyRjEwMUNGNDM3MTJDNkExRTBBRkY1NDhDRUYyRTE1N0IKKzoxMEVGRTAwMEYzNTA0Q0UxN0M5Q0VEMTZFNTYxMEE2MUU3Mjg1M0YyOTEKKzoxMEVGRjAwMEIzRkNCNUIwNUYyRkQ3RTRBMTE4MjI5RUQzMTdCQjhGMDcKKzoxMEYwMDAwMEU2NTM3MDY0QUE1MzlDQzc1MTJFMEZEMzRBM0YzRDA4NjQKKzoxMEYwMTAwMEVDQjk3OTZDRTQzQzE0MzMzODNGQTY2QkU4MzI4NUYzRTUKKzoxMEYwMjAwMDZEM0EyRjZGODc0RjczQTgzQzE3OTcxRjk1ODFBRUQzMEEKKzoxMEYwMzAwMDFDNkQzMkM2RTk2RjUyRjlFNzEwRjgzNzkzQzNENUUyNzkKKzoxMEYwNDAwMDNCODNGMzZGQzY2NEM2M0YyRERFNkYwMUZGMjhERTZGODIKKzoxMEYwNTAwMDk1OEY0MkZFNjlGMUQ2RTJBOUU1M0YwOUU1Nzc0OEZFQzIKKzoxMEYwNjAwMDkwNUMyMkU2OUY5ODY0MTJGMzRGMTREOEM1RkMxMzM3QzYKKzoxMEYwNzAwMEE2OEJGOTI3MjYzQkM0RkMxMzM3MEQxMUYzNEY0Qzc1QjMKKzoxMEYwODAwMDhBRjkyNzZFMUUyQkU2OUY5OEVFNUFBREM5N0Y3MTlGQjUKKzoxMEYwOTAwMDI2RkZDNTQzOUFGQzE3OUIzNEY5MkZCNjY4RjI1RkVDNDQKKzoxMEYwQTAwMEQwRTRCRkQ4QTVDOTdGRjE5MjI2RkZDNTNFQTFCRUIwNkUKKzoxMEYwQjAwMEVFMzVBMUZGRTJGQUEzNDI3RDQ5QzM3QjQyRkZBNUZFRTQKKzoxMEYwQzAwMEUzNDJGQkIyQzY4Rjg1RjZBQUE2NEY4NUJBQTdGOTRCRDUKKzoxMEYwRDAwMEExN0Y0RkY5MDdERUUyREY0M0JGQzNCRjg3M0VDNkJGNTQKKzoxMEYwRTAwMDg3N0VCRjg3RkMxN0VGNTg5NkFFMEJDRDdGRjFCRUM1NkMKKzoxMEYwRjAwMEIzMEVGMjEyMUNCNzM4Nzg1RTgxQzhGOTJEQkFEQkEzQzMKKzoxMEYxMDAwMEU0QkYwOEJFRkZFREYzNUZBNDI0RkZGMEY5MDg3NDU2RDYKKzoxMEYxMTAwMEY2M0Q2MDZGNEI5RUNFOUFGMkRERjMxMURDNUEyMjdFRjMKKzoxMEYxMjAwMEQ3M0RBQjU0RkNBRTVCNjc2NURGNkJDRjc2OEJERjc3OEIKKzoxMEYxMzAwMERGNUUyRTdFREYzRDIyQ0UyRDAxMUVEQUZDMTdCRDJEQjcKKzoxMEYxNDAwMDJFOUQxNUVDMjVDRjUzMTA4MEVGNzRCMzIxREU1Njg0MkQKKzoxMEYxNTAwMEU1NDFDODdGOTEwREYxQjY1MjJDMEY0M0ZFMEI1QUZFQ0MKKzoxMEYxNjAwMDE5RjI1RkQwRjIwOEU0QkZBMEU1MUI5MEZGMjIxQkYyNkEKKzoxMEYxNzAwMDY3Rjg3OEZFOEMzQTlFM0ZBMzlFRTdDRjY4RTBGOTMzQUMKKzoxMEYxODAwMEZDM0M3RjQ2MjNDRjlGRDFDNEYzNjczNEYzRkMxOTAxQzUKKzoxMEYxOTAwMDg0NzNDMjdCMThDQjkzREU1NjJDNEY3OThGNjE3OUM2NkUKKzoxMEYxQTAwMERCODZFNTU5RUYxOTJDQ0Y3OTNCQjE2Q0Y3NUVDNDMyQTEKKzoxMEYxQjAwMEQ2RkMxOUFBNUM3RTA4N0VDMzE1MzAzRTkzNjc1NTRFNzcKKzoxMEYxQzAwMEFGN0VFMDkxNzVBMUY5MzM0NjNDQjAwOUU1MzQ1QURFRDMKKzoxMEYxRDAwMDhDMUNGOEE2MkYyNTdBREU4Q0VFRjYyODc5MzM4MkVGODgKKzoxMEYxRTAwMDQ3Q0Y5QjkxMzZGQUM3Q0I5QjMxRDdGMkMzRTRDRDk4N0EKKzoxMEYxRjAwMDVCMjNFNjc1OThCN0VBRjI3OTMzNDZDNDk1REM4MkYyNzAKKzoxMEYyMDAwMEM3RTU3MUFFMjVCNkJDMTkzRUFCQzRCRkNCQTc3NDAxMzAKKzoxMEYyMTAwMEJGOEJEMjA1RDdFQjFFRjIwRTFDQjQzRTNEMDRGNjEzOTUKKzoxMEYyMjAwMDVENDNBRUJBNkNCRTA3QUQ1QzQ0QTczN0NCRUYzMEU3QTkKKzoxMEYyMzAwMDQ3Q0U5N0QxMTM1REQ1RkVFRjU3QjAzQzBFNzMyRERGNEYKKzoxMEYyNDAwMDMyNUY0NjBGRjkxNjBFNjY3RjgxNzYzMkQ2N0MxOTNEMDUKKzoxMEYyNTAwMEFEMEYzREQxNzNDNjhGOUMyRkEzMjdCQkRBOTMzRDdEQTUKKzoxMEYyNjAwMDczMEFBMzczRUYxRUU4QUM3RTJGNUQ2OTZBM0Q4NDJGOUQKKzoxMEYyNzAwMERCNURBOERBMzJGRjFFM0U3N0E2MURFMzMzMUQzQkY5QTYKKzoxMEYyODAwMEJEMzgxNzcxRDg1M0Q5RjdGQUUwNkY3NjNDOUYzMDlDQTAKKzoxMEYyOTAwMEUwNzdGQzc2RTJBMkZDODlFN0NGQTU5REZCRjZDMUJEMzUKKzoxMEYyQTAwMDgwQjUzNkUyNEE0QzAyNjc4RjM4RjQwMzYxMUY3NjhERDEKKzoxMEYyQjAwMDA5RTIzNTU1QkIzRjdERTM4RjE0QUVCOTQ1OEZGN0U1QzUKKzoxMEYyQzAwMDNBMjgwRUFERThGN0I5MTI4MTZGRjFFNDk3Qjg0Rjg3OEQKKzoxMEYyRDAwMDMzQkE0QkJENDJCRkVCRDZGQzFFMEVFODkyMUEzQzdGMDAKKzoxMEYyRTAwMDJBRDA1QjcwREZENEI1OTlERDY3RDU5M0FCMUU5RjkwQjQKKzoxMEYyRjAwMDhDRjdDNjg5REY4MUZDNDMzRjc1MTlDN0IzOEIxMDY3NTQKKzoxMEYzMDAwMDAwRkFFRkI0RTJGREQ1MjVBRjJEMzRDMEEwNzBERTFBQUYKKzoxMEYzMTAwMDFBMzdFODU1MjRDNjgxMUFDQ0I2RTE3MDZGMkY1REJENEYKKzoxMEYzMjAwMEJGRTc3M0I1ODIxRkJFODhDMzREMjkxMUUzNDQ5RjJDRUMKKzoxMEYzMzAwMDI4M0EwQ0ZFRjMyMjc3MTlERUFCNDgyQjE1RTM0Njg0RkUKKzoxMEYzNDAwMDdGNDcwRkRCMzJGMDMzNjVDMkVGNzVGQUQ5N0RDRkIwNUUKKzoxMEYzNTAwMEVGRUE5QkI3MjA5RTRCRkQ5QUZCNEI4RDYyNURBNURCRDAKKzoxMEYzNjAwMDM5MkJCRjk3NjIyMTk2OThFOEQ2MzZGOEYxMDlBM0JGRUEKKzoxMEYzNzAwMDNEREQ4Q0U5MjJERENDMEU5MTZFRjE0MzQ0QkE2OEU5QTMKKzoxMEYzODAwMDY2NzU4QTc0RDFEMjJENjFBQzE4NUY1M0U5QTZERUE3RTkKKzoxMEYzOTAwMEZDQTFFODk2NjRFM0Y3M0M4MkY0MkEzMUE1QTJDOTQ3QjAKKzoxMEYzQTAwMDNDMzNFNDAwQ0FCNzU2MUZGQTU4MDJGMDFCN0U0OEJGMzAKKzoxMEYzQjAwMDY0RkY2QTdDQ0I2OTk1QzE2RUE1MzNEMDQ0NUFDNERFMjQKKzoxMEYzQzAwMDhCMDc3RDgwRkNCREM0ODlGQUEwRkUzRThBNzhGMjIxQkQKKzoxMEYzRDAwMDk3RkI4RkM4MjU1QUFFOTg3RUYwRjgwMkRBQkExOUU0ODYKKzoxMEYzRTAwMDZEMDRGQjNEMUExOEFGNEEyMkI4OUY1Mzg4RDMwRUZCMTkKKzoxMEYzRjAwMEE4MjZBRkM5Qjk0ODgxNzM0REUyNUM5NDBERTc5OTc2QjAKKzoxMEY0MDAwMDJDMUZFNERGM0I3NzBDMjVCOEVGNkYwQTdDOUUwQUY3RDAKKzoxMEY0MTAwMDA2MUUxQ0Q5MzkwREUyMEY5RUM1QTQwNEQ2QUY1OTA5QUEKKzoxMEY0MjAwMDZDN0Q1REM2NEI1QjAyOEJDRjZDMjhEMTExRDc2OEY4MjEKKzoxMEY0MzAwMDdENEE3QUJGNDRDNzZCQjdCQjVFQkIwMUZDRDExNjc2NzEKKzoxMEY0NDAwMDNGODBEODNCREZCODFEREI0N0UxRjdFMTE5QkFGQTZCMjMKKzoxMEY0NTAwMDAwMUZEQTFGQkYyQkVFNjhGOUM4QjYzMEM0MEVCNzM3RUQKKzoxMEY0NjAwMDNGNzIyNURDNkJEREE0OEJGQzNENzM4MThERkZGRTFEOUYKKzoxMEY0NzAwMDdFM0Y2NTQ0MzBERjQyODE2RDBDRTY2NTc4NzAwMDFEOEIKKzoxMEY0ODAwMEE3N0E3QTE3RjI1MTk1Q0JFQjM4RkQwRjk2NEQ0MUZDRDgKKzoxMEY0OTAwMDVFNjg5MTFDMTBBRjJCRDRERjcxRDMzMDhBREZCOEI3MTAKKzoxMEY0QTAwMDY1N0VBRjk3REQ1RjFGQ0RGQkQ3OUFBOUZFQTJGREFBQUYKKzoxMEY0QjAwMEZGMUJGQzlFOTU5NzRFQ0E5ODBGNzE3NDREMTlERTEzNzEKKzoxMEY0QzAwMEZDQTNBREYwMzBGMDJCQzdENTM0MEFFNDI5QkYyNTExRDkKKzoxMEY0RDAwMENGNzEzRDFGMTIyNzdFOUFENTJBREUwN0NDRTFGN0I2MDEKKzoxMEY0RTAwMDczREE4ODFGODRFMkRBNjM2MkZCQjgzNkIxN0U5RDY2MDgKKzoxMEY0RjAwMEZGMzlERkM2RjVENDQ2NTI0MUVFMzY3RUFEOTc2MEZENEEKKzoxMEY1MDAwMEU4RTgyNENFMzUxNERGOEU0NUJENzFGQzhFQ0YwOUZBQjQKKzoxMEY1MTAwMDg5MUQ1RkVCOEIyMkREOEY1OTZFNjNGQ0RCNjQyMDY4RjUKKzoxMEY1MjAwMEJGMzc5NTU5RjBERUY5RkVCMjhBRkVFMDVGN0M3MTk3MzUKKzoxMEY1MzAwMEJCN0ZBNDM4NjU4ODlGOTZDMEJFQkI3NzI1OTBCMTIwNUQKKzoxMEY1NDAwMDg3NkIyNTQ2RUZGQThDOTIwOEVCOTYyQTc3QUExQ0FBQkQKKzoxMEY1NTAwMEYyOTc1MTE2RTc4RTc0MEZGNTMzOUI4NDcyOTY1NzM2RTcKKzoxMEY1NjAwMDQ0MzI4MEZDRUM5NTMwRkNENUJFODZFMjc1OTk3NURCQTMKKzoxMEY1NzAwMDQ3RDZGNDAxN0MzQ0NEOUZFMTdEMzI1MzhCRTQ4QTc0MDUKKzoxMEY1ODAwMDRGRTc2MTlCOERERDZGNUNFMzVCMERGNzQ2N0U0MTk1MzgKKzoxMEY1OTAwMDA4RUM1NDg2QTEzRTJCMTI3QzFGRDk4ODdFRTk1RDM2OEIKKzoxMEY1QTAwMDA3N0JDRkM0RjMyMEM5RjUxOTcwOUZBMkJENzlEMkU0QkYKKzoxMEY1QjAwMDc1MTRDRjI3QTgzRUMwN0FCNTQ5NzEyMkRFQkUyQTQyMTMKKzoxMEY1QzAwMEYwOUUyQzhGRDdGNTlENDZCNjZDMDhGMTdGMzdEQjcyMjUKKzoxMEY1RDAwMDFCNkQxNDVFQTM4RDdENkZEOUNCRUQ5NDAwNkZFNzdGMUIKKzoxMEY1RTAwMEZEQzMwNkYwM0IyRTFBOTE3RkJEQjlCRkE5QkU3NzgwM0YKKzoxMEY1RjAwMEQzNjc1QzgyNkIyQkJDNEZFMDk3OUY1MUUzRTM3NERCRDYKKzoxMEY2MDAwMDlDOEI0NjQxNUM5RUQyM0JDNDBFMDZGOUU2NjNGOTUxRTEKKzoxMEY2MTAwMERDMDRDRjNGOTIyQzNBOTQ0M0UyNzIzOUVDQzI3RDc2RkYKKzoxMEY2MjAwMDFGRUE4REFBMDcyNDIwMTFDODUzQTBEQTM3QTk0NTBBN0EKKzoxMEY2MzAwMDU4QTlEQzhGMzY1OTAyNzA4RjJFQTk5Q0NFM0IxOUYyNDcKKzoxMEY2NDAwMDlBOTgxOEJDNTZGOTlDMThEN0EyRjI5ODAzQ0UzREMxREYKKzoxMEY2NTAwMEFCRjMxMDQ4MDVGOEFBREQ1M0VERTVEQTQ0NjY4RkQ2MjIKKzoxMEY2NjAwMDNFMjQ2MzVFRDRDRDcyOUIxOUUyQTk1OTJFNDcxRUE0OTUKKzoxMEY2NzAwMDg4NEM5MjFENzhBRkE2NUYzOTcxNTIwQzQ5RkNDMDVGNkYKKzoxMEY2ODAwMDI3NzZGQjAxNTRDOUFGRjk0NjNGMkZEMjc3NUIxNzZENDAKKzoxMEY2OTAwMENDREYxRTk3RTBGRTMzRDA2QkY4RTFDRUZERTAyRTM4RDQKKzoxMEY2QTAwMENEQTQxN0JCRkZDNUVEMDRGNzZCMEFGOTdBMzdFRTNGMUYKKzoxMEY2QjAwMDc0RUM3QkQxQzAwRDI0RjQzQjJBQUQ5REQ4NjQ2NkVCN0QKKzoxMEY2QzAwMEZDQjhFQkQ5QkEzN0VFQkMwNUQ3QkQ2RTNCNTE1Njg4QjYKKzoxMEY2RDAwMEVCRDRDODk2NTEwN0UwOUVDNUM4MEY5OTdFMTI2RTFGRTUKKzoxMEY2RTAwMEVDRjQwRkQwMjlFN0IwNEYwRkY0RjlCNjc2NDFDQjZGQTkKKzoxMEY2RjAwMDEyMzA3NUQ3ODdFQUUwMUM4NkVBNUJDOEZCNjczNTc2NkYKKzoxMEY3MDAwMDY0QzVGNDQxQjUxODVFRTY3MkQ0RkYxRUE3REUxRDQyNDMKKzoxMEY3MTAwMDQ3RURGQkRENzE0QUM5RDRGRERDMzExMEVDQzgxMTNENjkKKzoxMEY3MjAwMERDMEJFOUM4QTVGM0EzRjNERkM4RjUyNUYxNzNGRjY0OEIKKzoxMEY3MzAwMDk4RDdDNjk2MUJDRDIwREY2QjAzNzlGNjYyRkE0RUEyRUUKKzoxMEY3NDAwMEE5MDQ5OTk3NDg1QzE4Q0YxOTQ5M0QzMkM4OEY1MThCNEQKKzoxMEY3NTAwMDQyNDFGRDQxQTU4NDI0QTRDMDNEQjQyMjIxREU0MzJDQjYKKzoxMEY3NjAwMDQ5M0NGRjRCMDBGOUQyMkRBNzU0OEU0M0VGRTVBQUYyOTYKKzoxMEY3NzAwMEE5OTU0NzU1N0U2QkUxQTAwNUNFMDcyMTYyNEU0QkJEOTIKKzoxMEY3ODAwMEQ0ODQ4NzgxNDZCMkQ5MEVFQkJCRUE1RkQ2NzI3RkFFRDYKKzoxMEY3OTAwMEQ2OUNFOUM3RUY5NzdDMTlFODFGQURFNEZFNTFBREE1RjMKKzoxMEY3QTAwMEQwODRFNjYwNUYzMkFFRUIyQjIxN0U0MkU5QjAzMjg1MzkKKzoxMEY3QjAwMEQ5Nzk3NTNFNUFCOUY0NUNENDEzN0ZDODNFQzEyMzc3MUEKKzoxMEY3QzAwMEUyN0Q0NENGNDUwMzNFNUZBN0I4MDdDMEZDNTVGQTVDMTUKKzoxMEY3RDAwMEMzRTlBM0E1ODc5NEMwRjc5RDlDMkUzREUzOUI2Mzg3NTcKKzoxMEY3RTAwMDdCQzE4OTI2MTc1OThGRjhFNkUxM0RFRUE2QzA0ODEzODQKKzoxMEY3RjAwMEFDQkZGNzZBRjA4RDAxQ0Y2QjEzQzY4NEUzMjk1QkEyMUYKKzoxMEY4MDAwMEUwOTlDQ0YwQkM4RUI4RkZEODQ2RTUzNzY3NDU1RDZEMTIKKzoxMEY4MTAwMDNDRUExNTc5MkIzRDI3NUNBRkI0N0FBNEVBOEQxQUU3NTAKKzoxMEY4MjAwMEJEQjZCMkZFMDA1RUJCRUQ0MTZGM0NGMThDMkU0RUE1MjUKKzoxMEY4MzAwMDA0RUY1NzM5RjdDNEEzMUREMUVBRDNFNzdDRkU5RTc4QzUKKzoxMEY4NDAwMDQ2QkYwNThBN0IwNkNDQ0ZBM0VCQ0MwNDM5MTlFRTIwNEEKKzoxMEY4NTAwMEJEOEEyOTkyQzM5QkY1QThFN0E0MzVCNjdCRjhBQTdGOTkKKzoxMEY4NjAwMEE1RkE1NURBN0VBQTVGQTVEQTYzRjUxRUZDREEwNEY3N0QKKzoxMEY4NzAwMDdDOTAwM0E5OTlDQTJEQzVBN0Q2Q0VGNjRCOUI2REVFRjkKKzoxMEY4ODAwMDQ1ODA1NzNDQzUzRDBFRjY4RDQzMDI1OUVDRkI1RjUxNTgKKzoxMEY4OTAwMDJGQTJFOTQxQkM0NkNFOUIwMjMyQUUwQjNFQkEyRTY0OEIKKzoxMEY4QTAwMDRCRTE3OEE4RTMwRjRBNDg2NDdDQTQ1QTBFRUI3RERGNTUKKzoxMEY4QjAwMDFDQzIwNkFCMjY5ODM3QTdFRjcwRTI4Njc1QUJFRjQ4RkYKKzoxMEY4QzAwMDc2OUY3MTREMDJCM0JGQjUwOTZDREQ1MkNCQ0RCNjkyQjgKKzoxMEY4RDAwMEJCNTFCRjY1RTIzMzhFRkNFRTc4MDNBQTcwREY3QzZEMEUKKzoxMEY4RTAwMDgyRUIyRUEwODdBOUM4ODVGM0U4NjMyNzRFRjA0QkZCNzcKKzoxMEY4RjAwMEM4NEQxMjdDMzc5QTU0RTk5MEQ4M0Q3MzEyRkM3RThCMjgKKzoxMEY5MDAwMEMyRUI1M0VDQzgwNTdERUQwM0ZCNkJFOERGMTIzOUNGOEEKKzoxMEY5MTAwMEQ4QTMwOUVBRkQ1RUU2N0YzQTQ5NzcxRUFGNDcxMzk4MDAKKzoxMEY5MjAwMEZGNzkwODUyOUZGNDJBNTZGMzgyQTlFNzM5NEUwOUU4NzUKKzoxMEY5MzAwMEQ0NkVCRDBEOTE2RUJGMjAzMTNGM0Q5MUQxNEJCQjRGNzkKKzoxMEY5NDAwMDAwQzI4N0ZFRkVCRDdCMEQ0NDM2Mjc5MUUwRUY1OUQ1RkUKKzoxMEY5NTAwMDk5RDBCRjhGMjdDRTI2QjA1N0JCMTIwNkYwNzM0QzY3RTUKKzoxMEY5NjAwMDFERDQ3RjI1Nzc5QTEyODcwNkU1NUQ5NUUzMDcyN0NDOUUKKzoxMEY5NzAwMDcwNDIyQTUyREJGNTVEQzM2MTRGNDVFNTdBMjdEMEJGNUYKKzoxMEY5ODAwMDdENDJENzYwQ0M0MTQ5M0EzMzk5RkNCOEY0NDJCRTIwNUQKKzoxMEY5OTAwMDk1MEZDRDhBQzAwNzMzRUNDMzQzRURBNEQ1MzAwNEZDRUEKKzoxMEY5QTAwMEQxNzYyOUNFMDlGNzJDREE5NzRBMEM1RkM5QzRGMzI5MUUKKzoxMEY5QjAwMEM5QzIzQ0QzRTM5OTdGRERDMUVERDUzQjA5NTkyODI3NjYKKzoxMEY5QzAwMEFBM0RBNkYzQUI4MzUyM0IwRjhGMTFFRjc0OTBDRTNENEYKKzoxMEY5RDAwMEYxRkVBRDcwNkVBNUM5M0ZBOUNENEYzOTY5QTEwNUVGMDQKKzoxMEY5RTAwMDdGNkNEQzYzQzZGRDZCNTcwOTNCQzdFRjZBMzFBMjdEQjQKKzoxMEY5RjAwMDhFQTZCNzY5NkRFNjg4NzExQ0I1QTRGNDdCMEJFODk3RjkKKzoxMEZBMDAwMEE2RDQyNDgyM0Q0QzlCN0JEMjA2N0NEN0QyQTU0M0YyNjAKKzoxMEZBMTAwMDVENzMwOEY2NDVBRjJCMTFCRkJCNTVDQkY0RjQ5QjEyQjkKKzoxMEZBMjAwMDE3RDFGRUU5MTk5M0IxNTQ5RjM3NThFNDg4RjdDRDRGQTkKKzoxMEZBMzAwMDczQkQ1MkU1RjE0QTNBMjJERjBGOUQwNjc5M0NFRjdFMTUKKzoxMEZBNDAwMEYzMUQxNzA5REVERjZGODg2Mzc0NkM4ODYzNzRFQzcyRDIKKzoxMEZBNTAwMDhGNEY3ODFBRTRDRDk3ODFGQUIwNTgzRDA3RTVGQjdGQzgKKzoxMEZBNjAwMDM1Q0Y5NDNBREU0NkFGMjk1MUE2MkFEMEIwNjA4QTE5MjQKKzoxMEZBNzAwMEQ2ODkxNEUyOUEzQzFCOTQ3NUEzNDJFMDNCQTJDN0JDMTIKKzoxMEZBODAwMDNCMTJGMzMxOEU2RDEyRUZGOURBRDlCREUxQ0YzNzE2QTMKKzoxMEZBOTAwMEUwNzdERUE5NjQ4RDc5MzBBNTQ3NTk4OUNFMDlGMTgzRDUKKzoxMEZBQTAwMEYzMEJERUI3RTlBODNDMkRFOEQzOUEwM0YyRkJCQUUyRTgKKzoxMEZBQjAwMDI2RjYzMTE4RUFDMkZEQzk5MjUyODMzRjQwRjk5NkRDMUUKKzoxMEZBQzAwMDQwMEQwNUE1Q0I3RjAzRjRBMTU0NzMwMDgwMDAwMDAwMTYKKzoxMEZBRDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQjU3RDBCNzg1NEQ1OEIKKzoxMEZBRTAwMEI1RjAzRTczQ0UzQzkyOTkyNDMzNzk0RTFFQzAwOUUxQTUKKzoxMEZBRjAwMDlEMTA4NzI0QkMxRjRFOUU0NDg4MzBCQzA0ODVFQTgwM0MKKzoxMEZCMDAwMDI4Q0YyNDg4RDZERkI2REVDQkM0NDRGNEEyQjc0NUU5QkIKKzoxMEZCMTAwMEFGRjRENkRCN0ZCMEEyQTgyMDAxODIwNjlBQTQxMzQwREUKKzoxMEZCMjAwMEU0MTEzNDA4QThBOEFENTEyOTYyMEJDOTA4RUFDNUQ2NkEKKzoxMEZCMzAwMDdCRkRENzVBN0I5RkNDQ0M0OTIyRDhERTRFM0VCRkVEMTEKKzoxMEZCNDAwMDNFOEZCREQ3NUVFRkI1RjZEQTg3MkVDOTc3MTM0QjY0Q0IKKzoxMEZCNTAwMENDQjdEOEMwQjY0QThDN0Q4N0JGMUI0M0FERDk2RTYwODkKKzoxMEZCNjAwMDJDODlCMTk2MzgzQkI1NEVFNzBDQzdEMjg0RjA3RTg1MjAKKzoxMEZCNzAwMDYzNjkzRTYzRDVENkQ4NUMxNjg3NkQ3RjNGOEI4NUYxNzAKKzoxMEZCODAwMDhBNThFQUQyMDI2ODVCQUNBRTVBOTVCMTI1NDZBRkREMjEKKzoxMEZCOTAwMDBFQ0Y3NzRFQkEzQ0E0OEVFMTJGRDhERjMzOTJCMTJFMzAKKzoxMEZCQTAwMDIzNkI5NEUyQjAxRjYwNkMwQzQzNTBGOENGRUQ1NkVEMjAKKzoxMEZCQjAwMEQwOTdGMEZGRTFGRDQ0OEIyRDIwQzNCOENDQTM1Q0VDQzMKKzoxMEZCQzAwMEIwRjA0N0JFMUIyODFFNEQ2NkNDMjg1RTkzOUFERUY4MjcKKzoxMEZCRDAwMDQ2Q0E2NTJDNzY3MjExNjM3MERGQ0E1QzhGQjIyQ0I4OEUKKzoxMEZCRTAwMDMxOENBOTlFMThDNkEyRDgzM0Y2RjNEOThDMTlGMDdEQjIKKzoxMEZCRjAwMDU4NDc1N0YzQkJGRDdDMDBDNzFGRkVFNTRBMEM4M0ZCNEIKKzoxMEZDMDAwMDFGMjlDMTE4NTcwRTYzMTcxRTNDMTVFM0I2QzFGNTA3MkYKKzoxMEZDMTAwMEU1NzIzRkY0NkY0NzQwQzY4N0YwOTI2Rjg3MEJBMzE5RDgKKzoxMEZDMjAwMDdCQzRFRTE5ODFFQkJBNjNERDdGOEZGMURBNDJGN0Q5M0QKKzoxMEZDMzAwMDAzNzAzMTk1QjExNTdFMTlFN0U2RjBDMjdGQUJCNjU5NzYKKzoxMEZDNDAwMDE5QjM4NEZBOTVGNTA5MTE3REMwMThFMUI1RDJDQ0Q2NjcKKzoxMEZDNTAwMEQ0REI3QUQyNjMwNUQyMDNFNjVEQjE3RDhCMjk1REM1MjUKKzoxMEZDNjAwMEY5QkQ5M0VDRDBCRkEwQzBBQjgwRUYwQjBEMzE3RTVGMzAKKzoxMEZDNzAwMDY2MDg5RTI1REI0Nzk5RDJFMUQ2NDc0RDY2MTY4MDc1MEEKKzoxMEZDODAwMDMwQTVEREM4NkM4NEI1MEEwOUYwRTYxNTc4RDNDMzc5RDAKKzoxMEZDOTAwMEI4QzU0QUUzRERGNTdGNjVCRjE5OTZCQTE4RTY3QTIwNDQKKzoxMEZDQTAwMDFFOUU2RjVBNTFDMTcyN0JBRUUzQUUzRkE4NjUyOTQwREMKKzoxMEZDQjAwMEJDQkJGRTRENjIzRTk1M0ZGRjYwMUUzQ0ZGQzAyMzVGMTQKKzoxMEZDQzAwMDIwRERGNEVCNUNFQzMzN0VEMjExQjE2RTM3NjMwMENGRjQKKzoxMEZDRDAwMDMyNDFFRjNCMUY4REJDQkZBQ0U5MzExQTY3MjlGMzlBNjMKKzoxMEZDRTAwMDkwOUU3NzZERDRERkJGRTkzM0U0QkI2NTRDMDk1RDA3QjcKKzoxMEZDRjAwMDNDNUMzRTkyNjU0NTNDREM2MThGNDkzQzBGMjAwMzhGQTQKKzoxMEZEMDAwMDhERkQwRURFREY3RDY0NjA5QzM3QTcyNzdFQjVGNkUyQjEKKzoxMEZEMTAwMDNBRTA2RjMzNjM3RjVFNjdBMUY2QzIzQTQ2RUQwOEJCRjcKKzoxMEZEMjAwMDRBRjQ1OURENzRGMjdFRTRBRkFBQzY1RDI2MUNBN0M1NkQKKzoxMEZEMzAwMEZGQTc4NDA5RjA0ODYxRDMzNzMyMzI1NzIxNzNERjdCNDQKKzoxMEZENDAwMDBFRjBGOTIzMjZCM0VGMDA3RkJCMTlFNzlGRjU0NkNGRUUKKzoxMEZENTAwMDNENDhBRjFCQUY5NkQzN0RGREZBMTc2OUZDN0YyNDlFMEIKKzoxMEZENjAwMEY4NjcxMUFFM0IxN0FGMkI1RkY2QjZBRTlGRTJCQTgwRDUKKzoxMEZENzAwMDlGRDk1ODU4OTc3Q0ZERUJEMkQ2QTNBRDRGQkI1RjI5RDYKKzoxMEZEODAwMDAzREZGNUYyQkVDNkVGMjM4NDNFNThGQURDQUNGNTY5MUEKKzoxMEZEOTAwMDgwOEFEQUU2Q0ZGQTc3MTAzRkIxRDMyOEJGMUEzRjJEMTkKKzoxMEZEQTAwMDEzNzREMkYzOEQ0NkM3NkVGRTY4RkE3NzVBOUY0NjNGQUEKKzoxMEZEQjAwMEUwN0ZBN0MxODk2REMwNjkxOEQ3OTM0RkY0N0NBMUU3OTQKKzoxMEZEQzAwMDgzNEU2MzQ3N0Y5NDVGM0QxRjc0NEE2QzQxNkZFQkZBMkIKKzoxMEZERDAwMDM3RkI0MDVBRDc1MkQ1NUQ2Njg3RkI3NzMxQ0Y3QTNCRTgKKzoxMEZERTAwMEFENjcyMzVEQkZBMDZDM0NGQzMzOTRBQkU3Mzg1Rjc3MTUKKzoxMEZERjAwMEVCMzkzMzk3Mzc3NkRDRTg0N0JEQjkzNjQ2NEQ3MUQ4RDUKKzoxMEZFMDAwMDA0RkQ4MENFOURCQkNDM0U3QzRFOUJFN0ZDM0FCNzdCOEQKKzoxMEZFMTAwMDkwMTFGMTVFNEVFRDlGRDc3OURDODMwNjg3RUVERkZEMTIKKzoxMEZFMjAwMEFCMkJCMTJBQkNERjM1OEM5NUEzREM3N0M2NDRDMkJCQjMKKzoxMEZFMzAwMENGMkUxMzNDRkI5MDBFQzg3RjRBRkJGRjdDODAzQUU5MzMKKzoxMEZFNDAwMEI5RjYzMUE4NDdDRjdGRkI1RkIxMUU3OEJFRUI1QjczN0QKKzoxMEZFNTAwMDc5NkZFQjNDMkRFODA3RUFFNUI0MTNGOEVDNzYyMTY3RkYKKzoxMEZFNjAwMEI3Mzc1NTEyNUQ5NjNDMzNDQjg0RkNDQzFFRTBGOEI0MUEKKzoxMEZFNzAwMEMwMUZFQUQ3QjZBOEQ4Njc3MTFEOEIxQjI0RDIyMzdBN0UKKzoxMEZFODAwMDdBRENFNTlBRkEzOUVBREIzQkZEODVGNDdFMEZGQUIwQkQKKzoxMEZFOTAwMEM3ODlCRTc3MjEzRDg2ODVFODMxRDZBMTcyNzg1NEY4QUUKKzoxMEZFQTAwMDAzQkVCOTQzRjBDRDc5NjU4REM5MDA3QUU0RkMzMzgwOTcKKzoxMEZFQjAwMDZGMDA3OTk1QzJEQ0JERTlDMUZFMEVDRTg3N0RBRDQ3RUUKKzoxMEZFQzAwMEJGOEVCRUUwNUZGNjVDQ0RGQTM0ODZFQjFGNjU0QUVCNzEKKzoxMEZFRDAwMDQ1RUY2OEVCQkY4QkI5NjI0OUVGODhGNUIyOEUxQjQ5REQKKzoxMEZFRTAwMDVFQUIyRDdDNUU2RDlEMkI5QUVFOUM4MTdDNTFCNTE5OEQKKzoxMEZFRjAwMEU4OTVEOTczRERBODc3MTdGNzAyNkY5OTdDRDE2ODgxRUYKKzoxMEZGMDAwMEY3QkExRTkwNUNBODZGRkJBMjgzQTYyN0VFMTJGODVBRTAKKzoxMEZGMTAwMEI5NkRGMTBDMzQ5QThCNjEzRTM5MTNGNUQxMTc2RkM2NjgKKzoxMEZGMjAwMDI0QTI1QzQxNUZGQTFFN0EzNUM5MUY5QjcxMUQ4Q0UzQzgKKzoxMEZGMzAwMDdCMDlFMDdCODM3NEZERjQ1QkI2QjlEMDNEMjhFQ0I5NTYKKzoxMEZGNDAwMDE1RkU5QkRDODNDMkY1OTk4RUFFNkNEQkFDRDBGMzY0RkUKKzoxMEZGNTAwMEI3REQyNkI0QzdGMTBFQTFCRjg0NUVFRTVCQkU2MEUxRTMKKzoxMEZGNjAwMDAwRTdEQTFEMEVCMjZGNkM4RDgzRjQ2Mzc1RDMxNjUzMDAKKzoxMEZGNzAwMEI4RERENUU0NEI5M0I3QjEwRTNCRjE1OTU1RTMxM0Y0MUIKKzoxMEZGODAwMDFDRTg1RkQ1MDFGRDRBNEJDN0NGNkY1NUMzRjAzOTRFMTIKKzoxMEZGOTAwMEQwNTFBRTMwQTFGRUVFNEI3RjgyQkVGOUIyMjM2QzlERjQKKzoxMEZGQTAwMDIzMUNDMkFFMDhGRDdCMkRGREEwQzFBRDFGNTdEMzA3OUEKKzoxMEZGQjAwMDFBREMxQURGNkJFQkQxRjM3RDVGRjBFOUU5QzI5ODlGQTEKKzoxMEZGQzAwMEZCMEIzQUZBQUM0MjdBODRGNTExNUUwNUYwREJENjZDOTUKKzoxMEZGRDAwMEY1M0YwNEYwQjY0OTFDN0U1RjczMTRDMURGRTkyQzc2NEYKKzoxMEZGRTAwMDlGMDMzRkFGMkE3NTIxQjUyN0YwQzU1NEY0RUIzQ0QzRUUKKzoxMEZGRjAwMDEwOUY5QTNGQzcwQTEyMjJGQzI0N0RBQkY5Mzc3OUMyQzEKKzowMjAwMDAwMjIwMDBEQworOjEwMDAwMDAwOUZEQTFCRTVDRTA3MTMwOTNGNEYwMkYyQzM5NDlBOEU4NQorOjEwMDAxMDAwMzkxNjIwRDlBRDhFRURFNTBBOEMzRkU1ODk4RTM5NTEzMAorOjEwMDAyMDAwRDA1RkU4RDhDMUZCNUIzQjRFNTk1QzhDRDVCMDU3Q0E1QQorOjEwMDAzMDAwNEJBMDdGM0JBMDEzQzdCQjU2NUI2MEY2MkM0NEY5NUQxOQorOjEwMDA0MDAwMEQ3RTkyMDVFQ0QxRUFEMzQzMEVBMURDQUQ2RUFGMjg1NAorOjEwMDA1MDAwOTdDMEVFQUMwNjgzMjM4MTNEQUE3NEM3MDZBQ0I5RDQyMQorOjEwMDA2MDAwNjcxM0UwQjlFN0VEREU2NUM0MkY1N0VCQzg2RUFEM0UxMAorOjEwMDA3MDAwQUQ3MEI5Mzk5MjQ4RUI1NzAwRjYyODc4QUYyRTFBRkNDQworOjEwMDA4MDAwNTVDMDU3NURCQ0M1NTU5QjQ5RDc3RDUxRjFEODc3QUI1RAorOjEwMDA5MDAwNkFEODc1OEQxRUY4MUVDMjUxNjc2MDZFMDdCNEFENDdGMQorOjEwMDBBMDAwODdDNDc1N0M4RkRENkU1REM3MkExNEUwODM4M0VCMkNEQgorOjEwMDBCMDAwRDRFQUVGMTc5QUVDODNEMEVFMTUxQTk4QjczNzdERjk4QQorOjEwMDBDMDAwQTQ4M0ZCOERDMEU0RTk0OEU3QUEyMzI2OTI3N0ZDQTEyQworOjEwMDBEMDAwMUY1ODI5RjQ1MTE1MTAyODBFRTBBOTNDQ0QwMkQxQjFDQQorOjEwMDBFMDAwRjg1Q0Q5RTcwQUI2MEQxMkZCMjRDMjVGNjFBMUJFREM0MQorOjEwMDBGMDAwMzdEQ0Q3REI1NkUxNzg4M0MzRjk4NEUzQTk0ODkxMkEzQQorOjEwMDEwMDAwOTRCMDc5NEI2QzUxMTE3RDM5QzUzMDBDRDdDM0U0Njg3QworOjEwMDExMDAwRDc1NkMwQUY5QzZFNThCMzFCRDYyRjBGODAxNkYwQTFEOAorOjEwMDEyMDAwRDg1REYyNjI2ODM3MTY0RjkxOTc0MDVCNkJFNDc2QjUwNQorOjEwMDEzMDAwRDZDMDk2ODdFM0U5MDU4MTFGQURGREMwRTFEOThBNzQ3OQorOjEwMDE0MDAwQkZGNDU2RkIxODJCRTlBQjBDM0JDOUI5NTg2RkFERTRCMworOjEwMDE1MDAwMEE1MERDRDRDQTVDNUJFMTVBOURFQzYxOUM4RkVCMTlDMAorOjEwMDE2MDAwRjJGMTFCNjIxQzk3RDlCMDQ3MDU3RTZENzQ3QzQwRkM5MAorOjEwMDE3MDAwRUI4QTMzREM5QjA5RkRDMDEzMUZGMTdFQkFFMTRBMjZFRQorOjEwMDE4MDAwRjBGNzgxMjczQUNBMTU5MDA3NTdCNkUxQ0E0MEU4MUYzMQorOjEwMDE5MDAwN0FFMjYzN0U3RjIyMEMwOTA2RUFGMDEzOUY5NEZCNkNERgorOjEwMDFBMDAwMzgyRUQ3Njc2Q0JCM0IxQkU3NTEwQzEyQzlBOTcyQzAzNAorOjEwMDFCMDAwRTRBRjg1RkZBRDhCRTVGQzU0MDczQzgyRkNGNzg2QjBDRAorOjEwMDFDMDAwQjNFQjZCOEE1RUI2MDJGRjJCNDU2RTc1MEQ4Q0UzQzdGMQorOjEwMDFEMDAwODA2OUY0REZERjZBNzg5NEFEMDY4QTUzQjA0NTdDQkY0RQorOjEwMDFFMDAwMjlENkFERDE4MTM1QjhCMzY3QTE1RUE4Nzc2N0NGOEUyOAorOjEwMDFGMDAwNDFCQzdBNEYyMjVFRjNEQkRBQTdBMDNFNkU3OEZCRkRBRQorOjEwMDIwMDAwMzFFOEFGMjJCRDcwOUNGQzM2ODhERDYwM0Q5NzVFRUIyNworOjEwMDIxMDAwQjc0NTBFOEI0NzNGNzAxNEJFRTMwMDM5OTZEQ0RDOUY3OAorOjEwMDIyMDAwOTQ1NDNCNUIwNDcyNTdFQjY2QUEwOUQ2OTVBMjhCRUJGQworOjEwMDIzMDAwMUExOEQ3MkZDRkRCM0Q3RkM0Rjc1ODQ2ODBFQzREQTE2RAorOjEwMDI0MDAwQzNGQjMxQ0VBRjhGNTc1OTdCN0NBRjdBNTlBRkI3NENEOAorOjEwMDI1MDAwQjkwRkM4RThFN0M0QTczN0JFQjcwNEY1RkJFRkNEQUVDQQorOjEwMDI2MDAwQzEyQUMyRTU2NjBGMDAzQzNCMEQ0QzYxRjFDNDI2QzNCOAorOjEwMDI3MDAwOTQwMjhDM0ZBMzVEMUI1MEVFNURDQ0U5MDMzOUMzMzA4MworOjEwMDI4MDAwOEQ4MDg0NUZFMjk4QjBCODU1QUMwN0RFMkY2MUQwOEVDOAorOjEwMDI5MDAwNDVGODZFQTBGNUM5Qzg1N0EzOTg0NzQ2RkQzNTg2RjlCRAorOjEwMDJBMDAwQUREODc2MzVCRkU2NDRCQzNEMTlDNUVFNDBCRkNGQjJGMAorOjEwMDJCMDAwOERCOUZENjFGQTYzNDAzQ0Y3RjcyNjI1MTgwOUVFNjgxMQorOjEwMDJDMDAwNjNGRDZDRTREN0U4MkY5ODFERkRBQUFFRkYzNDI5MzhGMgorOjEwMDJEMDAwM0UwOEM4NzRCQ0VFM0E2QzYwMDhFNzBCNDZCRjNEMEVBMgorOjEwMDJFMDAwRkFDMUUxOEFGQTJDMEI4REQ3MjVFOEFEOERGQkE0NDkyNAorOjEwMDJGMDAwMURFRTQwN0Q5M0MwRkIyRjE0NzJGQjFDRkNEQ0U0N0ZFMQorOjEwMDMwMDAwMzYxM0YxNjM1OUUzMEY5MzJGNjczQ0Y3NUJCRDQ5NDUwMworOjEwMDMxMDAwRjFGMUQwRDYzNzQ3MzM5QzdGNkM0QkI0MDFFOUYwRjI1MgorOjEwMDMyMDAwRjZCQzI4RTQ4NzlEODgxQjU4N0ZCQ0Q5N0UwRjhFMTdBQQorOjEwMDMzMDAwN0YwNUUwQ0RBNEVCNkVDMkFCQTI4RThBMDNCQzRFOThDMworOjEwMDM0MDAwNjY1MzM3MDBERTVGODhBQTlGODZGQzFGREM2MTYwQ0ZBMgorOjEwMDM1MDAwQzIxNDNCNERBRTU5RDhERjc5NTlCNUEzQkU3RDIxQjM0OAorOjEwMDM2MDAwM0U5QUQ2QjNDMzQwRUJEOTE5MUQxQ0IxMTZFMERFMzA1RQorOjEwMDM3MDAwNEMyOTQ3RjgxNDJCNTM1MDBGMkI4NjIyRjUxRUI4M0VGQworOjEwMDM4MDAwMzQ5RURCNTc0RDJGMkY4OEU3RjJGM0E0MDRGM0U3RTEwNworOjEwMDM5MDAwNzM4NTI0M0ZBNUIyOERFNEFFMkJDOEZDNjY5ODI3NjkwRgorOjEwMDNBMDAwNkVCQjhDRjQ4ODlFMDVBQzg0N0NBRjA0NjQwNkZENDk2QQorOjEwMDNCMDAwMUU0NjQ5OEQ0OTM2QTM1RjI1N0RFQkI2MkQwNkJBNEYwMworOjEwMDNDMDAwMTFGQTc2Q0E4N0FCMkI3OERDRTMzQTNEMTFDNjNCNjg1RAorOjEwMDNEMDAwMzMzMjVDRDc2NEQ2MjFBMzNGMzhGOTJBNzMwNTkwN0Y2NgorOjEwMDNFMDAwQUVGMjc4QzYwRTdGRTgzRjNEQUZGMzA3NEJDNTc4RUUxRgorOjEwMDNGMDAwQTBCRDA0MkYxN0IyNDgzRkFFNzQ3M0Q5RTcxMkNEQTM0NgorOjEwMDQwMDAwMkE2OEE3OEIyREJBRkJFOEU3QzU2MjFCMTkzNzk1QzU4QgorOjEwMDQxMDAwMEJGRkE2M0ZFQkZGMURFOTM3RTA1RTk4RUYzRTNCOUZFOQorOjEwMDQyMDAwQUY1NENFRjkxNUFFQUZBQkRDRTQ0MjNDRUNCMkI5REY3MQorOjEwMDQzMDAwOUQ4ODdBQjFEREM4QjZCMkJFRTVFOTc5ODgzRkZERTBCNgorOjEwMDQ0MDAwNzMwQ0JCNkE2NUZFN0NFMjQ3MUJBRTY3QzRFNjhEQkVEQgorOjEwMDQ1MDAwMjg1OEY3ODg0MTdDN0NFNDNCRDQyMzQzRkYzMzMxMDFBNworOjEwMDQ2MDAwRjVGODU1QTE1RkI0NTZFMzMzRTQyNzdCMUNFNzI3RkI3RgorOjEwMDQ3MDAwMEQyMTM5QkMzMzNFOTM5RUQzRTQwQUY5MENDN0Q5NkZFMgorOjEwMDQ4MDAwRjQyRkY0RjQ2MjI3ODEzRkVGNDRGRURDNjU2MzE0NDdFOAorOjEwMDQ5MDAwM0Q5NjZBNTk4MDcyQTVDREYzQkNFMDYzN0RCQkJFNjYxNAorOjEwMDRBMDAwNkRBQjExRDdGRDE1RDgwMzgwQkIyNEVEQUEyOURDOUVDNgorOjEwMDRCMDAwRUY0OUUyN0M1NTJBN0Y0QkZFNzY2NzkzQzREMENGNEYzRAorOjEwMDRDMDAwNkVFMkZBM0I5QzNGNTI3QkU3OEY1RjIyNUVBRkM1MUYxNworOjEwMDREMDAwNUFCQ0IwRkI4N0YyQzc5MUJGOEYzRjM2NUM5MzNGQkVEQgorOjEwMDRFMDAwOEQ0NTNDRENENzVDOUNDMkJFQzdCRjY5MTRGQ0QwRDcyRAorOjEwMDRGMDAwRkRGMTU2QUVFN0Y0RDc1RjExNzhERDY3REEzODNEMTdDNgorOjEwMDUwMDAwRjVDMENEMDYxN0NBMzk1MDNGN0QzNkFDNjM1RjM0N0ZFNgorOjEwMDUxMDAwOEYyOTZCQjJCMEJGNEJFMTdBNjU1NzkzOTlGNENBMkUxRAorOjEwMDUyMDAwOUJENzRCNzZEQzY5NjFFODNGMzBDNURCRjEzM0Q0ODc3QworOjEwMDUzMDAwNjkxNjc1NDMxOEZGMkU4REU3RkM1NjZGMEM4Q0ZGMEM2NworOjEwMDU0MDAwRkRFMkEzOUNDRUUzNkVDRTkzNERGMDVDRUE1MjJFRTcyMworOjEwMDU1MDAwMDUxNzRDNUIzMDBFMkI0RDI4REM4MTdDNzQwMjc1MTYyMAorOjEwMDU2MDAwQjRENUU3RTAyOTQwN0NENTM5MTNFOUJCRDc1QTRFOTY3QworOjEwMDU3MDAwNjE3RTExRkMxRTM3RjJEOUQ4RkQyN0NCOEE3MkYwNzk0MworOjEwMDU4MDAwQUU0RkY3OEE1NkVCOEZDNzM1QzVCM0VFNzhENzIzRUM1RAorOjEwMDU5MDAwQzY3OEM2RjU5MjA3RjkyNDM3RDQ2NzZFMjNDNTZCMUE1RgorOjEwMDVBMDAwM0ZENDQ3MDMzRjgwNUNDQzY3QUEzMTE2ODY5QzczQ0U0QworOjEwMDVCMDAwRjMzMDk4NDMzNkE3M0M5MkNFRjMwM0QzMjgzRTlDN0I3RQorOjEwMDVDMDAwQkFGRDU1RDBDQzZDOUU0Nzc3NUZGMEMxN0MxRDFGODA3MworOjEwMDVEMDAwOUQzRDFFOEZGRUQyRjE4MEM5ODBGMzk5RDY2NDczN0Y1MgorOjEwMDVFMDAwNjg0RDE2RjI5MzI2NEZGNDAzM0NENUZGNjFEOEIzMUIzOAorOjEwMDVGMDAwQzJFQzdCNkMwMjk3QTNDNzVEMEFEREY3NzU5OEZDODM5QworOjEwMDYwMDAwRTFEMkJGMzNGRTVFQkRCMDNGOUZBMzNDNjNGQzcwREYxMQorOjEwMDYxMDAwMkIwQkQxOEVFNjJGNzcxRjQ0RkM0RjRGOTJFOUZBMkYxOAorOjEwMDYyMDAwNThDMDkyODVGNDcxMjlFNDk3RDUxQkQ1RTJDRkE0RDBBOAorOjEwMDYzMDAwNzM0Q0YxMENCM0MxRkRGRDQ5RDFGOTM4N0Y2OTgyRjdFNAorOjEwMDY0MDAwMjJEMjg5MjlDMTIzRjhERUQ4MDk3OUY5Mjg1RkI2NTE2OQorOjEwMDY1MDAwNzUwOTY4OEYzNEI4MDFBRUYyQURCNjEwMUMxQTVDNjcyQworOjEwMDY2MDAwMDU1Rjk0MjYyQ0JFODhFQkM3Rjc1MEJGMzQ3RTdDREUzNgorOjEwMDY3MDAwODJFRjZCNzRBRjZGRkU4MkQzM0I4Q0ZFNDhFRjEwRkRCMAorOjEwMDY4MDAwQTUzQkIwQUZFMUUxMkJBMTU3QjRGRTNGNEE3RjJEN0ZFMAorOjEwMDY5MDAwNzA0REZBNjM3RTIwRjZFRkEyQkYzNTIxMjk0NDdGRjAyQQorOjEwMDZBMDAwQjNFMkIxQUZGN0IzRUE0REUwNzdFN0Y0QkM1RUU4MjgxOAorOjEwMDZCMDAwQTRFNzVEMjY1ODIxRkE1NTJEMTA3N0EyM0M3QTFEQjQ4NworOjEwMDZDMDAwMkZCMEM3Q0VFN0VBRkFDM0Y5RkVFMDIyQjJDMTA5RjFDMgorOjEwMDZEMDAwODRGNzZBNTM3MDA4RkEyMUEzMDIxMkY5ODVBMzQwRjA0NworOjEwMDZFMDAwMTc5MUZGOTU0MTdBQ0YyNUYwQzRDRTRCRDJGOTYxREM0QQorOjEwMDZGMDAwNDVGRjJFMURGREMzNDAwMkZBNTFBM0NDMTUwMUU0RjdCRQorOjEwMDcwMDAwRERENjI5RTlFOEQ3RTU1OTI3NjUyMTVGQkQzQUVDQkU3QQorOjEwMDcxMDAwRTM2ODgyNUU0RDVCQkVFNzM5MzVFNEZGNjhGQUVEQTAyMQorOjEwMDcyMDAwMTg1NjlCQkYyMDgxRUJBMTFCNDFEREEyMUY4ODJFNjNDMQorOjEwMDczMDAwMzgxQzlBM0U0N0YyMjAxQzUyNjBCRUUxM0IyQkU5RTU5MworOjEwMDc0MDAwQTYwRUEwQzc4RDA4MDdFMEExNTU2MjBEQThDRjBCMEQxRQorOjEwMDc1MDAwRUVDNDYyRjREMzkyMDIwQUY3RjdCRUU5OEZGOUMxOEFCOAorOjEwMDc2MDAwQTYzN0RFNDM3ODJCNzAzRjA0RTM1MDk3RjE2Mjc3M0U2MworOjEwMDc3MDAwNjI2MDRGM0Y1OEYzNTdCNEI4NDBGMzY3QjRGODEzRkRDNQorOjEwMDc4MDAwMUVCQzNGNDA1Q0I3OUIwMTQwQjQ0NzAxOEJCRjA2RTZFRgorOjEwMDc5MDAwN0ZGMkIyM0FEQzJERTQ1NjgxNzU1NDg4NzVDQzY0RUQ1NQorOjEwMDdBMDAwMDQxN0ZCRjZCQkVGMjYwMTdENjYwODdDNTQxQzgxQjg1QworOjEwMDdCMDAwMzExN0VGMzM3NjMzRTBFMTY2ODVDNzkzMzdCQjIwN0U5MAorOjEwMDdDMDAwMENFM0EzOTlFMzIyRkJGODlCOTIxQzFBRTc1QUNGRUJBOAorOjEwMDdEMDAwRURDMDQ0RERGRUNDM0ZEQTFFMDE3QkY0MDlCOENFQzc4NAorOjEwMDdFMDAwRDZGMUI4NzRDMjQwRDlBN0EwRTExQzk3Njk0MDdFQUM4RAorOjEwMDdGMDAwMTZGNjBEQzJFODVFRUREMjRCQzIyRjlFNjBFOEM4NzVCQQorOjEwMDgwMDAwMDE3RTVCRjdGRjhERUNFMDgxRkQ3RjdCMDdGREJDRjE5NgorOjEwMDgxMDAwOUYyQkNDMENFRjRGRjhCQzIwMEVGNTA0MUJBNzEyNUZFQQorOjEwMDgyMDAwNjlFMzU2RkZBOUMxQ0FGODc1RTJGRjJBQjFGNkMzMDAxMQorOjEwMDgzMDAwOEY3QjI4QzI2N0ExRjY3NzE3OUZEQzg0RTM3RDc5NEUxMgorOjEwMDg0MDAwRTFCQzJERTYyRjMzNzkwNzYxMUVCQkNDQzRGMzAxODdEMQorOjEwMDg1MDAwMjVFRUZGNjhGNzBGMUIwMTZFQjhCRTI5NDFDQjBCQjQyNAorOjEwMDg2MDAwOTNEREM3OUYzOThDQ0UzNzYzM0UyMDJGNDRENzlCMkYxMworOjEwMDg3MDAwOTQ3RkFFRTRGNkE0MEZGRUZFMzdGMjAxNUExRTYwQUI4MQorOjEwMDg4MDAwQzAxRjNCNzhENkE0MDI1QzUzMUJFRTUxRDBCRjlFRUEzQQorOjEwMDg5MDAwOTQ5OTNCNkNERTlCNTQyQjczODdFNTAzOUU0OUQwRjlGQQorOjEwMDhBMDAwMjMwNzVGREMzNDAzRUM0OTc1OUJFQzhBNDI3OTZEREFFRgorOjEwMDhCMDAwNzUzQzE3RkJFREIyQ0JEQTBCMUZFOUYxM0JCNUU5MUUzNgorOjEwMDhDMDAwMDVGOURGOThBODkyN0M1RjZCRkUwOTIzODA0RjZFNDA4QworOjEwMDhEMDAwQkEzM0YyRUIzQUM3NDgyNDQ3N0FGQTFFRDhGRkVCODRDMgorOjEwMDhFMDAwOEU5Q0JFRjFERDE3RkRGNTc0RjhEREM1MjJEQUVGQjk5NworOjEwMDhGMDAwMTYzREY0N0NEQjAyRUJGNEMxRkEwMkIwNEUxRkY4NUQ0QQorOjEwMDkwMDAwMDdENkQ5QTk3RjY4OUQ5M0ZBMUFCRjU2MzdGRjM2MDFEQgorOjEwMDkxMDAwRkQzNjhENEY0QjEzMzhERjhDREZCNzI5ODFEOTQyRjQ3OAorOjEwMDkyMDAwRDJGMEY1QTFCMDU3N0JBMzM0N0ZDMzM1NkYwNjVDM0E5NAorOjEwMDkzMDAwMDU3Njg3MThENEM3REE5RDYzNDJGNjZCRkVFOTMyRjI3QQorOjEwMDk0MDAwMzczNEZCMzU1RjVFNTQ0QTZBNTNEODJGNEMyM0EzNUU3RAorOjEwMDk1MDAwRDNEQkE5QjlFQTYyMjNFQkNEM0UyRDg4RUM5N0I3NkRDNgorOjEwMDk2MDAwNTQ2MkE4NjcyMDNBNDk5MkMwODdGMEIzMzUzOENFMzAzOAorOjEwMDk3MDAwMEZDMUE5QTdBNzA2OTcxRTFFNkQ3RDlBN0YzRDVGRDA2OAorOjEwMDk4MDAwNkZDRUEwNEMyM0MyREZDM0FFOEE3NUUyNDA5ODg3QjgxMQorOjEwMDk5MDAwNUVCQkZBQjU4RTlGQUY1QzI4NzkyQkI3MTdCRUVEOEI4NworOjEwMDlBMDAwN0ZGNUY3MzU3RDUwODYxM0U0NTFFQjQzQkZDMjk4OTgyRAorOjEwMDlCMDAwNEM3NDJCQkI2QTYyNkVCMDFCMkMyMzhBN0QxQTY2NTc1RgorOjEwMDlDMDAwNThDNTUwRTI5RjdCODUxREVFOEI3RkFBQUVDQUNDOUI5QgorOjEwMDlEMDAwMUZFMjIzNjNFMzEzNTZFNEEzN0RDQTQ2MkJFNjI3MjdEMQorOjEwMDlFMDAwREI2NkQ1QzYwMTlFNEFGRTU0MzQxN0ZEQkNFQTBFMDNGMQorOjEwMDlGMDAwQzMxNDU2NjlEMzE3MDczMUFFQUY3RThGQjk1MDJGMTY4NworOjEwMEEwMDAwMzVCNTE2MjNERjFENTJEQTY1OEFCM0JGNjRFQzg5MzAzMQorOjEwMEExMDAwN0ZCMUIxQTlENjhBRkU1NDYzQTI0QzcxRkM2MTA3RTc4RAorOjEwMEEyMDAwNEJFREZFOTY0NEFFM0YxQUNGNUQ5RUUxRUVFNUZFMTkxQQorOjEwMEEzMDAwNzFCRkU0RTMzQ0UyQTNCMjQ3NDFBRTMxMEU0RDhBQTE1RgorOjEwMEE0MDAwQkM0NDg5NjQ5RjUzODE3RUM4NEQ0NkYyRjMyMThFRjlFMAorOjEwMEE1MDAwMjNFRTAzNUU2QTM0RUZDMkQ0N0U2OUUzMjNGN0Q4ODFDNAorOjEwMEE2MDAwMTBGNUZGRkQ2OThEMTlGMzBCQjMyNEQ3QjNGMDVDOTkzMgorOjEwMEE3MDAwMUE2Q0M1N0VEOURDNENBQTdCMThGQjNGMzJGOUIzQzE5NgorOjEwMEE4MDAwNUIyNUNBOEI5NDAxQkI2MEJGNkM1MUE2MUZGMzEzRkI5RgorOjEwMEE5MDAwMjVERUY3MzVGMzdEMDI2NkY3MjVDQzgwNzlERUFFNDg5QQorOjEwMEFBMDAwMThCNTgxNzg0QUVCMEZDRURCQzAwNDIzODdDNTU3RjcxMgorOjEwMEFCMDAwRUQ5NTQ5Q0ZEQzU3MkFGOTcxQkZBOUQ0OUVDRTdDNjE1MAorOjEwMEFDMDAwN0M1NUY2QTg4OUQ2MzVCQjI5QTUwOEY5Nzg0RUI5Q0M0RQorOjEwMEFEMDAwRkM2MUZDMUQxMDdFRTEzQzBGQzRFMTYxRUYxRDhFRTI2NAorOjEwMEFFMDAwNzAwNTE3MDNEQzUyNDg2RUE3MDkzRTlGQzVCODlGMzhCMgorOjEwMEFGMDAwN0Y0MTQyQzQ3QkYwQzYyRDY4OEY2RTZEODIzODE1N0FCNworOjEwMEIwMDAwRDM0NEZDN0FBQjM3M0Q2MjVFMEZFMzdFQ0QwOTE2MkNGMQorOjEwMEIxMDAwODk4M0YxRkIyNTBEMjRGRTlCMTFCNDhGMEVBOEE4NzdDNQorOjEwMEIyMDAwQ0UyNEEyNUU2M0MzQjg5QzY4NzI1NzJBQUZBRTIzN0UwMAorOjEwMEIzMDAwNzBGMjdEQjI3OTEyNDg5MzhDRkEyRjUyOUU2NjhFOEI5QQorOjEwMEI0MDAwRUNDRjcyRjdBODM3ODg5MDdGQkQ1RUQ3RTQ3RTVFQjNBNgorOjEwMEI1MDAwNENGQjcyRjMwQTI1MTdFQjQ1M0ZFOEZERUNCMUQxN0Q2NAorOjEwMEI2MDAwRTg4NTZGRDU4N0UzN0FEMzBCMUY5NkZGNUQ3QUUxMzU3MQorOjEwMEI3MDAwMDgyQkM2ODFGQ0ZFMzQ1MUU4ODc3RUFDMUZFQTg3NTIwMQorOjEwMEI4MDAwNzlGQjI2RTQ5NzJFQjA3N0U2NUVGODQ1QjMxNzVBM0MxQQorOjEwMEI5MDAwNUUwNkYyNEFGMjdFOTFFRjY3OTQ1RTRENjVCRUZDNTBCMAorOjEwMEJBMDAwM0NERUFEMkZDMDlGNzBGNUUyRTczQzlEOTg0NTcyRDRDNgorOjEwMEJCMDAwQUQ1RjM0RkQxMUU2NEYxOEM3RkNFM0ZFNDQyOUY4OTEwMAorOjEwMEJDMDAwQTYzQzg0MkY4M0UwMkI2MzNDMUY1ODg2ODU0Mzk4OTc2RgorOjEwMEJEMDAwNzM3RTQxRjk5NjZBODhGMzI5REU2N0JGMjVCODUwQ0Y0NgorOjEwMEJFMDAwNDlGMTIxMzlEMEZCMTk1QTVFRDcyQUYyMDg3QUJFRThCQQorOjEwMEJGMDAwQ0VGM0NEMzU1MjFEOENDNjE3NjU3NjJFMUY2NTczNjVGNQorOjEwMEMwMDAwQ0FCQkVCRjk0NDlCNEZDRjFGMDE1RDVFRTY5QUZDMjEwNgorOjEwMEMxMDAwRTRFQzg3RjI0NzczQTJEODU3MURDNDA2NUQwRjVGNjhFNgorOjEwMEMyMDAwRkNBMEYxODdERThFMUNEM0U1NjdGQUIyMjM2RkEyMUQwQworOjEwMEMzMDAwMTlEREI3MUQ3OTdEOTg5MUY0QjVERTdFNjhGNkUyNzcwRgorOjEwMEM0MDAwNDk1QzJGNjcyNEYyN0Q4RTY5QzNFN0Q5RDBFRkIwMjZDNworOjEwMEM1MDAwRjEzQTBEQ0QwRTc1RTc5NzM2NzM3RTc4QkQ2Mzg5MjIyNAorOjEwMEM2MDAwQTEzRDQxQkQ5MDE5ODY3RjkxNkZENUY4QUZFQTUxODlCQQorOjEwMEM3MDAwRjI4RDE1NDIyRjc1MzZGM0ZDNUI3NTg5RUNCN0MwRkYxQQorOjEwMEM4MDAwMTYzNzNEQjE4OUY3OEQ5NDlGMkI1NDVBMTUwQjhDM0IyOQorOjEwMEM5MDAwRDMyNUI5MzBBRkUzMTZGOUJBMTk2RTg5RTdFQjVDOTE0OQorOjEwMENBMDAwRkJGNDJEM0FGQUNFMTE3QzM0OTMwNUVCRDAxRkQ3RUIzMQorOjEwMENCMDAwQTUzOTU3Qjk1RkEwRDc0RjczQzRCRUZCMUNEREJFRkI3RgorOjEwMENDMDAwNTU0RERFMDdCMDAxRkY0QzdGQzA5Q0Y0RkRGRTgwRjY2MQorOjEwMENEMDAwQkU0NjQ3OEQ3RTJBRUVDNUExMUMxREZDQzZBNEM2NzA2QgorOjEwMENFMDAwRkYxOUU5MzdGNUFBNDJFM0Q4OTMwNDVGMEE3RkU2Q0IwMAorOjEwMENGMDAwOEI3OUJGQTA5ODRGM0M1RkRERjQ4NUM5M0JCMjZGRjg5QworOjEwMEQwMDAwQUZFNUI3QzZBMjlGM0UzQUU0Qjc2QkYzNEU1MzE4NEIxQworOjEwMEQxMDAwNDdDNzRDNjc0RjY2ODlFQjNGRDQ3RTBDRDdBRDQzQTNFMgorOjEwMEQyMDAwODNBNjQ3N0JFMDU5RThEOUJFRTg3NDJEM0RBQkU5QjMxMworOjEwMEQzMDAwN0ZCNjlFRDVDNkQ3RUM4MDM2QUY1RUZGRjYxNUI3Njk5NQorOjEwMEQ0MDAwRkE3NEZEMTYwM0U1NEIyNjhCRjg3OEIyQzhDM0NFNEY3NAorOjEwMEQ1MDAwRTJGMUMxQUQ0OTNDRUVFQ0ZBQ0E2MjQwN0JCOUIzODUyMQorOjEwMEQ2MDAwRkIyNzJFQjNGRDM4RkEwNUExN0MxRkE3RTdDMzMxQ0NDMgorOjEwMEQ3MDAwODdGQkVDNEM2OUI3RDBCRTY3MTE5MDEyRjczREQzRjhGMgorOjEwMEQ4MDAwQkVFNzc2MjVFMDIxM0RFRDUyNTgwREM4QzkzOTdDMEZFQworOjEwMEQ5MDAwRTY3OUY4ODA2RjIxRUFFOTg3M0YxOTYyQTBGRDc3MjU5RgorOjEwMERBMDAwRDA4RUZFQzlEODNDODVGNjhGMUM2Njk1RjJDMTlEQ0RDQworOjEwMERCMDAwNjYzQkJFRDdCNUVGRkZCNDFBNzE5Q0FGOTgwQjQzQjgzMgorOjEwMERDMDAwNDNDREU2RUVGRDFCRDQwN0E1NzI5QjhDRjlGQkFFMjA0QworOjEwMEREMDAwQzgwODNDM0Y2OTQxQTAxOEUzQTBDOUFDQkQxNkU1N0IzQgorOjEwMERFMDAwMDJEMkIxMTdGQUZEMkE0OThCQjM3QkNGRUYxNzM3NzNDNQorOjEwMERGMDAwM0ZBRTM4NDYyNjNGNkU4QUFGQkQxOEY3QURBNjI4OTJBMworOjEwMEUwMDAwQUIxNjlGRDVFNUY3NUZEMUM1MUZBMUZDQkVBQUYwRkFDRQorOjEwMEUxMDAwNDM1REZFQkU5MUVCOTlFQkNERUI0RjQwREQwNjdDQkMxNAorOjEwMEUyMDAwNUVFMzczQTE2RjU4MUZGOUZEOUQyNkJFRUYxMzNDNjk2OQorOjEwMEUzMDAwNjRFODA3QjMwQjg5QkRFNjYzQUU5NUU3REZENzEyRUQzMworOjEwMEU0MDAwNTY2MzcxOUY4RUZCRUJGQjVBRDJEQzZBNkVERkNGRTdGNQorOjEwMEU1MDAwNzYwNDhCRDAzQ0VFREMzRTVCQTFGQTM1OTExRkVEQjEwMAorOjEwMEU2MDAwN0ZEMkM3RkU4OEJCRDE3RTA4RDU2OTVGRkIyMUM1NUZGNQorOjEwMEU3MDAwQUE5NEY2Qjk1RUJDNjk3NTBCNENENDNGRERDOEI0OUYyQgorOjEwMEU4MDAwOUJFNDc0RTdGOTY4MzdGMkY5Q0VGMzY5NkU4NEVCNzk4NQorOjEwMEU5MDAwQzFBNzFBREZFRjNCNzczOTlBRjY0MTRENkUxNUY3OEZGMAorOjEwMEVBMDAwODMwRThCRUI1OUUyNUJDRUVGRjVBOTQzRkNCODRGRkIwOQorOjEwMEVCMDAwMUIyMTE3M0JBMzgzQzdCMjEzQzNGNzNERjgzRTQ3Q0JCMworOjEwMEVDMDAwQkE0NzY3OUYzM0QyN0VCOTg0Rjk0ODZEN0ZEOTA3NzJEQworOjEwMEVEMDAwNDM3NTNERjE4Q0UyMEYyM0FCNjczODZGQUQ5QkZEMUE3NAorOjEwMEVFMDAwREIyOTkzRDQzOEM0RkJFNTQ0NkQxRjUzOERBMzNDQzQ2OAorOjEwMEVGMDAwQjc1N0E4Q0U1MDhGRkZEREVCOTgwN0VCNTExQUQ2NTlBNAorOjEwMEYwMDAwM0MwQUM4RkZBQkVCRUNENDZGNUNFN0E0NzZGRjNBOTVFNAorOjEwMEYxMDAwREE4NzhFQzczRTgwNzZCRkRBNkRGMjI4NjFGQUUzOURFQworOjEwMEYyMDAwNjRFRTc3RTU2NTdGNTI0Q0M1REY3RjYzNTQ4NzNFRTUwRAorOjEwMEYzMDAwQzEwRTE5RjVDNThENTc2MTFEMTE3NTI3Q0E2NUM0MzdENgorOjEwMEY0MDAwRTUzN0IzNDJGRDRDNjk3MTBDRjY2RkJDMEFGREIwRTdBMgorOjEwMEY1MDAwQUYyNDM5QjgzREFBNTNFQTQ2Mjc5M0I0MTA1RkZDMkQ1RAorOjEwMEY2MDAwQzlERDkxMDREN0VGNzE3ODNFQzE3NkI3MzRGRkUwMjUzMworOjEwMEY3MDAwNDZGRDczQkM3RkFCN0MwOTlFQ0IwRjE0NTI1RTM5MUZCQworOjEwMEY4MDAwRjNDQTc5MzRFQzQyQzRERkU4NTYxM0VEOTc2QkY5REQxMAorOjEwMEY5MDAwM0M0REZFQkU4RUNDMzNFNzhCQkNFRUFCQUM4M0YyQ0RDQQorOjEwMEZBMDAwMDUxNjA4QjQwQzA4MTdBNzlGNUI5QUU3OTQzMDFGOThBMgorOjEwMEZCMDAwNjQ3MjYxQkRDM0U4MkM0RjNFRTY2MzVCOTMxOEM1NDc3RQorOjEwMEZDMDAwQURBREM5MTk2QTBFNzIwRkNGRkJCQUI1QkMyRkZCRkVDRgorOjEwMEZEMDAwQkNFRjkxOEY2MjdEQTRCN0FFOUE2ODdGRkFDOEE5NTgxQQorOjEwMEZFMDAwNTc4MEY2MEIyREU0RkY2OUY1QzgyREQxQkNDRTgwNjU4NgorOjEwMEZGMDAwMkNBMDNDRDM4REEyOUVEMTYyRjY5QTkzNDk1RjA1MEUzOAorOjEwMTAwMDAwOUU4MEY3N0U3Rjk5RjE3REM3RjYwRjY5NUZCQkQ4MzA3MAorOjEwMTAxMDAwM0MwNUVCN0UwRjRBNDNFM0IwN0RFQUEzRDgxQzZBNEY0MAorOjEwMTAyMDAwQzU1RTQ0RkNCNDE4QUMyQUNFN0I2NjlENUE4Mjc1NkRCMQorOjEwMTAzMDAwMjdENkIxMTJBQzYzN0I2QjlEODVEQTkzRUJFQ0Q0OUUyMworOjEwMTA0MDAwNUFFN0E0RjY3NUI4OEVGQzczMUM5RTQ3N0U3MUJGNjU4NworOjEwMTA1MDAwQTM3RDkyMjk2RkQ5MTQ2Q0YzMTZDNjUwQkJGQkI2MTg0QQorOjEwMTA2MDAwMTNDMkRCMTJDQkI2NkJGMzYwQkQ1QTIwM0FEMDgwQzlGNQorOjEwMTA3MDAwRkVENkE3QkM4RjU5RkE4MUREMzM3QjQ3NEFBMzE4NkI5NAorOjEwMTA4MDAwN0JDQTNCNUQ5OTBDRTM0RUVERkY5M0FGRTBGRTlCQzkzRAorOjEwMTA5MDAwQ0IxRUIzMDA1QzczNEZEOTFBREFBMEZGNzZGMkYyQzcwOQorOjEwMTBBMDAwNkNBODZGOEY0NzgzRDJDM0Y1QUUzOEVFMUUwNDc0NDMyRAorOjEwMTBCMDAwQTU5MEM2MDU5NzhEODM3RTgyRDY1RjMxQkQ2NDEyNjM4RAorOjEwMTBDMDAwQjcxNDc3NjQzMzYwQURFQ0U0OTVEMzJEODBDNzVCQUM4NworOjEwMTBEMDAwREUxRjYzREZFNDRCOUE1RUQyMEZGQkNDODdGNTYwNDFFNQorOjEwMTBFMDAwQzk0ODcxM0ZDQjkwMTJCMUZFNjVBNkMzRkI0NjcyNTg0QQorOjEwMTBGMDAwRkQ5RTVCRkExM0VEMzM4RDcxNEJDQzQxODcxRjhDQjQ5MQorOjEwMTEwMDAwRUZDNUVDMUYyNzg0Q0JEQjRDNDdFOTFCNDg4Rjg5QzkwRgorOjEwMTExMDAwQkMwRTc4RjQyNEM5MUQ1RTVGQTE3RjZFRjQzOUI1MDQ1RQorOjEwMTEyMDAwRTkzNEU2NDI1OTFEQjYzM0NCMURENEY3MkMxODVCODc0MgorOjEwMTEzMDAwRjI1QzYyRUJFQkZENjI3QUJGM0M5OUQ3OEQxNDI5NTJDOQorOjEwMTE0MDAwNDQ1RDg5RkVCOTdDNjAyNkY0OEY4MzQ3QTMyOTRGMzAyNAorOjEwMTE1MDAwRkFCNEI3MTZFQjRGNEI5RDk5NzlCMkE2RkFBOEVGRDgxRgorOjEwMTE2MDAwODJGQjZEQTMyQkNFOTQyNEEwRkNEODI0MTc5QTg5MzEzRQorOjEwMTE3MDAwQUNBMzJFMDFFRTE3REFCMUEwMEFEN0Y1NDQzMUQ2RkZBMQorOjEwMTE4MDAwOEM1NjI1MTdBMkFERDBERERBODBFRjE3QkE2MjVDODVFOAorOjEwMTE5MDAwRTg4RjlGNTY0QkQwRjQ5QzUyNDY5RDI4ODBFN0E2MEVDMAorOjEwMTFBMDAwOTI1RDE2MThFODU0RTBBNjg5OTdBMDVGMzgyQzhFRjI1RAorOjEwMTFCMDAwQkM4NUNBOUEyQjI3QTgxRkUzQUE1MTcxMUQ1QjdFNURDRgorOjEwMTFDMDAwNDVFMzk4QzlBRUVGOUU1MUZDMkZDODNGNDU5RTM4Q0FGMworOjEwMTFEMDAwMDkwMjNFNEFDMkVCQ0E2MEREMDQ3N0ExNURGNjQ3NDlDOQorOjEwMTFFMDAwQzhERkZGNUE2Mjg3RkVFRUZFMTI5NkNCQzM3Q0MzRkZCOAorOjEwMTFGMDAwNDJGNzhGNDRBQjUxMDBFODZFOTNCRDA0QzdEQjZEOTI5QworOjEwMTIwMDAwRUMwRjUxREY1MzhDQ0ZGQjg2MTg1NUNDMUY5NTI1NDYyQworOjEwMTIxMDAwNDU4QzNGQjU0NDFBN0YwRUUxQ0Y4OTFCODVEN0NBMzM3MQorOjEwMTIyMDAwMUMxMUY3REI2RUIzOTI5REE4NzgyQjg3RkNBMkI2REI2RQorOjEwMTIzMDAwRDJDOTVFNTRCQzM1QTkwOERCMzYwM0Y3RDMyQkRFQUEyRQorOjEwMTI0MDAwMjhBN0ZCMDYxRTA3NTcyQ0ZDOTE1QkY0MjlFRUFENTgyRQorOjEwMTI1MDAwNTg0OUZENTYyOUU1MjczOERGOTU5Q0I4M0NDQ0FGNEQ2MQorOjEwMTI2MDAwMUI5NDVBQTI0NEY4ODEwMzQ5RkVGMzQ0N0VBRkQwMzA2OAorOjEwMTI3MDAwN0NEMzI0ODBGRkRFQTM3QzlGQTIyMjI3MzNFMkY5MTlDRQorOjEwMTI4MDAwMDU1MjQ5NzhGREE4Njc1MjU0NDQ3Rjc2ODlBMzI0QkM0RgorOjEwMTI5MDAwMEU3NTZFNDU2QTQ0RkY5NkI5OTkxMUZEOTJBMzA1NjRENworOjEwMTJBMDAwQkY0MTBGNTQ5NDgwMUUzODBBRUQ1MjYwQzEwMjUxMDdBRAorOjEwMTJCMDAwQTVFNTlGMEEwNTRCMTVCNjhCQkNBQ0MyRTNFQjYxRjAwQworOjEwMTJDMDAwODc3QUIwQzQxNjY5QTc3NzQ3NzMzQjVGQ0VENkQwMDYzRQorOjEwMTJEMDAwNDlGOTExQkVCRjVEOTY2OEZDMjREQzRFOTRDQjE1MzZFRgorOjEwMTJFMDAwNUU5NzE1ODk4N0JDQTM0NkIyOTc3OTMxOTIxRkUzRkFCRQorOjEwMTJGMDAwOTJBMzRCRUJEMEY0OTY2NzQ0QkVBRkY5NjFFNTAyM0U5MgorOjEwMTMwMDAwNkQ1RUU2NzNCN0EzM0ZBMkMxQURDREFGQzE1RjJFMkYxNworOjEwMTMxMDAwMkFBMTdDRjczNUQ2QTE4Nzk3QzE3QTUwM0ZFOEUxNjhDQQorOjEwMTMyMDAwNEExNkZFMUFGODFGRTRBRjg5NzMyNEYwNEJFQ0NEN0UwOQorOjEwMTMzMDAwNkJGRTdBMDVFODJCNDdCOEJFQjI0OTg5NThCN0Q3OTdGNAorOjEwMTM0MDAwQkVEMkM2RURDQjJGRDNDNjlERTlGMEQwRkJFRTFEOUZEQworOjEwMTM1MDAwOUU5QTIwODdGNTMzM0Y0RTg4MEZFRkJGRjhFOUE2ODhBNQorOjEwMTM2MDAwRkI0OTFGQ0Y3MTg0RjdCNzdFM0EwN0VGNEY1MUQ0NUEyQworOjEwMTM3MDAwMUJGMEU1MzEyNkI5N0NDODA3NkRBQTEyMDNGNDI4M0U5QworOjEwMTM4MDAwRURBRUMzQjZGNDQzMkY5NkFCQjJBOUU3N0M3NUQ4NEU0OQorOjEwMTM5MDAwQkNFODZGMzNDM0JBNkUxQTI2QUIxOEJGNkI3RTg4MUVDQgorOjEwMTNBMDAwREVCRjI2RjNCQ0MzQjFBQkFBMTVGNzU5NzdGQjU0MkJBQworOjEwMTNCMDAwRkFGM0JCMUY1NEFERTg4N0VDNzZGMzczMTlFRTJDMDNGOAorOjEwMTNDMDAwOUQ4RjcxNjdGMzdBQzVCRjI0RjNCQTgzNEVGMUJFRDYwMQorOjEwMTNEMDAwRkE4RERFNEU4NDFCRUJDQ0QxMzdBOEZBMjY0ODc1RTU5MgorOjEwMTNFMDAwQzdEMEJGQ0FFOUU5NUYxRDUzRkMzNjlDRUZEODgzN0VBNgorOjEwMTNGMDAwNUJGODdFRTJGNUZBNTc3RjA0MUU0MzM4MEE5OUU0MDk0OAorOjEwMTQwMDAwRDcyM0M1OTYyODRGQjhEQzk2REExRDExRkQ5M0MyMEY3RAorOjEwMTQxMDAwOTlFQTRDOEQ3OEVGMjYzNTMzRTIzOUYwMUI4N0ExNUZDRQorOjEwMTQyMDAwNTI2QjYyNTQ2RkVCMzNGMDdBNUIzRDFFNTdBNEYwRjhCOQorOjEwMTQzMDAwQ0U2NUIzQTMzQjgzRkI2NjcyNkZFNzkxNUNDNTg2NUVBNgorOjEwMTQ0MDAwQ0ZCN0E1QTQ3MDdGRjAzRjUyMThDMTM1MkI4NUMzQTczNQorOjEwMTQ1MDAwQUZBRkQ1Rjc2QkYxN0MwRkUyOTNCOTlDQzhFNzJFQUIyOQorOjEwMTQ2MDAwRTEwQUI4QkNBQ0UwRTkyN0E2NTM1RDZEQkVFMURFMkMxNQorOjEwMTQ3MDAwRTg1NzNDQkQ3NTNBQUZBQjM1RUNDMTNBREIxOTRGM0Y4RAorOjEwMTQ4MDAwQ0ZFRkRGNjBDODM3ODIzRkIwQ0RGN0MyNzRBQzJCQUY2RgorOjEwMTQ5MDAwOEFFMkY1MDk1NTUxQTIzRUI0NkU3NDQ0RENBMzE4M0VBRAorOjEwMTRBMDAwN0U2QTIxQzY5RkZCOEQwQ0YzRkM4Rjk5QzAwRUU2ODVFQQorOjEwMTRCMDAwRjZEOUFENjYxRUFGNUE0REJDMEU3QzdERTZBOUY1QThFNworOjEwMTRDMDAwM0YzRThCRjJFNkE1NTA5RUIxNDg0NTNDNUVCNDVCQTgxQQorOjEwMTREMDAwM0VGNEJFN0RBNTI5QzgwN0IzNTI3OERFMkI3QkNGNDRFRQorOjEwMTRFMDAwMjc5RDJGRkJFN0MxNTFGQzdENzA2MEZEMzA4RTczNzEyRAorOjEwMTRGMDAwNzczNkY5RTVEOTAzMTg5RDI3RDFFODAxRTEzMzVEOEZFRgorOjEwMTUwMDAwODJGMDgxQ0U2MzMwQjcxM0YzNkZCNTBFMTM4RDMzMkI5QQorOjEwMTUxMDAwODVGM0UzRjVCNjNERUE4OUUzMEM2Qjc2NDFCQjIwODVBNAorOjEwMTUyMDAwQzdDREI3RTJCQzA0NkZCMEZGMkNEQ0QwQjMwN0ZCQ0Y1NAorOjEwMTUzMDAwMUVDOUZCNDg2RjU5Q0UwQkEyN0YxQkZDNTEwQ0VEQzM5QgorOjEwMTU0MDAwQkMxRkNERjFDNjMyODJCNDZGRjNFRUEyNkNENzA2QkFERgorOjEwMTU1MDAwQ0VGMUI4QzAzRkIwQjY0M0M1RkEwRjdGM0ZBQ0I3MTg2NQorOjEwMTU2MDAwRThGNDJFNDU3Q0RDNjZGNjBGMjZCRUIyQUQ4OUMxNzk2MworOjEwMTU3MDAwQUVCN0RFQjhFRkY5MjFFMDA0N0IzMjdGM0NBNzk3MzZBNworOjEwMTU4MDAwM0ZFMEQ4ODI3NDdDNTc5QzNCRDFFMDAxMzg3RThDNzA2MAorOjEwMTU5MDAwNjg3MDc1QzNBM0FCM0ZFRjE0N0U3QjI3OEU5NzFCQ0E4MQorOjEwMTVBMDAwNTM1N0ZGQzk0MDc5OEE2QTA5RjQyNEY0Rjc3Q0M4NUM3MAorOjEwMTVCMDAwM0U5NUU4NDM3OTUwRENEMkMyRjlDNjlGNTg1MjZDODNGRAorOjEwMTVDMDAwQjZBMDcxMTU4RjhGREI5NTg4QkM5ODY2Q0YyNjhBRTcwOQorOjEwMTVEMDAwQzdCRUE3NDREOEEzODkyMkZFMURBRkNCNEY0RTZDOUMzQgorOjEwMTVFMDAwNEVFN0Y4MjZFQUUyRTI1RkE0ODhCQzY1MUE0QjBCQ0YwRgorOjEwMTVGMDAwMjNBQzE1RjFDNkU1QjY4MTcxRTg5RjJBMTBFN0NBODBEMQorOjEwMTYwMDAwNkY5MzJBQjM3MUYxMjFCREQwQjA4RTQ1OUM1M0Q0RjhBRAorOjEwMTYxMDAwNzBFNDY5RkI5RDM4REZDOEQzRUMwRUYyMDdCNDcxQkJGMAorOjEwMTYyMDAwRjMxMzFDMkY5N0RGRTM3ODE5RDUzMUVDRTk0OUQwMzc1NAorOjEwMTYzMDAwMUUzMTMyQkYxQTVBRTcwNDBFMkE4MzMwODdFMkE0Q0I0OAorOjEwMTY0MDAwMTc2QzY0NUZDNjFDOUQ0M0Y1REU2NkE3ODFBOTYxRUIzQworOjEwMTY1MDAwOEY1MkEzOTkxQUE2MkZBREMzRTIyM0ZBQjJBMDRGNUQxMQorOjEwMTY2MDAwNTRBNDFGOTAyRkU2ODk3MUE1NDU4Q0I3M0ZCRUVDMDhBNgorOjEwMTY3MDAwRkEwNUY5QjZFNUU0MTdDNDhEMUIxODMxMUU2QjUzMjIyOQorOjEwMTY4MDAwRkM4MzNDRTY3MTYzRENFODAyRkFFMjdFRDk5OEQzNEEzNworOjEwMTY5MDAwODQxRjMwMkVCMDkxQ0VBMThFRkIzMEYyRkE4NDczOTE2QworOjEwMTZBMDAwRkQwMzdERDFBNTJGRkNCMURDQTdEMTJGRkNBMUY4NzNFMAorOjEwMTZCMDAwQjgyM0YxOTc1MDFFODlCRjI0NEYyNEZFNTIxNjQ0RTJFRQorOjEwMTZDMDAwMjdENTFCODk4RkY0RTUyMzIyRUVGNzVCOTMxN0QxMUZGMworOjEwMTZEMDAwRjBDMDg0ODhFNzMzQzE4MDg1RjdCMzFFOUQxNkYxRkMwNgorOjEwMTZFMDAwRTA4REIzMjNGQTQzMzdERjE2RjFGQzcwRkY5Mjg4RkJERAorOjEwMTZGMDAwRDlEQjU2RkUyMDdBOEZBQzVGMUJGMUJDOUVERTM3MzRGRgorOjEwMTcwMDAwRkUzNDYyN0M4RERFM0VGOEZCREZBNDM3NzMwQUZGNTBBNworOjEwMTcxMDAwRDAzQjUxRDg1OTg3OUJEN0FENzUxOTZEOEZFMjc5N0MzNQorOjEwMTcyMDAwM0MzNjgyRkFDRTgxRTdFOTYzRDFGRUFCNTQ5N0U3OUI2MgorOjEwMTczMDAwQzY2ODVGRkI5N0IyNDc0MkJEOTQwRUE4MzU2NDUxQkRBMQorOjEwMTc0MDAwM0NENUY1RkREQzYwODhEODY3QjczQkI5M0Y2NDc3NzI1QworOjEwMTc1MDAwM0RGRTZCMTMzRjJGOTUwRUZFMjZEOTI5MDMwQkM1RDlFRAorOjEwMTc2MDAwMTZBQzc3NjQ4Mjk5QUM4RjYzOUM1REU3RTgxOEE2M0E2MworOjEwMTc3MDAwMzA2RjA3RkRDOTIxQkRBQUU5RDFEQkNDNkE2RDA3RTg0RQorOjEwMTc4MDAwOTc1MTMyRDc5M0EwM0ZGQjM5NjE5RUY3QTUwNzhERENCNworOjEwMTc5MDAwRkZGMDE5RDFGRjQ4QjczMDVGNkMxRUQ5MTlDQTQzM0IxRgorOjEwMTdBMDAwNThBMjg0RTcwMEUyNDI3QTVDRkQwRTg4NzU3MDY1MzZDNworOjEwMTdCMDAwOURDMzdBMTM0MTQwQkY1OTc1RDE3RUQzQUQ5QTlFNUFDRAorOjEwMTdDMDAwM0U5Q0Y0RDQ2NTVCQTRGRjc2Nzk2OTE2NUQzRjdCQkJENAorOjEwMTdEMDAwOTlFQTA3Q0U4QTNBNDcwRDBGRkFGM0Q2REEzOTZDRUQ1QgorOjEwMTdFMDAwRkVGMjJEOUI2MkQwRUYzQzJCQ0VGRjZBRDcyNzBCRkM3RAorOjEwMTdGMDAwNEQ3NkNBQzJGRTU5RDY2MDNFNkMxMTE4RjEzOEMwN0JENgorOjEwMTgwMDAwRTU5MThFRDhEQjE4Rjk5QjkzNzBERDU1NUJBRURDRkU1RAorOjEwMTgxMDAwMkFGNEFCMERDMTY0NkUzNzdDRjRERUZDNzdGOUI5RUVDNworOjEwMTgyMDAwRjk3RjhCRkNBRTQwODU5M0M3RjkxNTYyRkM1QkEwQjFENAorOjEwMTgzMDAwMDM5RTZFMDEzQTM4QjA3RDYzNTIxOUYyMjc1Q0E3RjMxQworOjEwMTg0MDAwNzEzMzhGMzAyM0NBRjMyQzZGMjZENTREOUM2MkFFMzM5MworOjEwMTg1MDAwN0IwMUM0Rjk0RTk1RTA5Q0NCM0M0NkNDNUJCRDczN0JEMQorOjEwMTg2MDAwNjUwQzNFRDczRDlFMzYwRTMwMENGQTI1RUYzQTdDQzYwRAorOjEwMTg3MDAwNjRDQzFCNENFNjc1MTMzMDlGMDVBRjdCMTZBNTNGOENERgorOjEwMTg4MDAwNzY0OTlCRUYxREU2QkQ3NDA2RTgzQjlCQjk2ODVDNkQyRAorOjEwMTg5MDAwN0M4NkU5RjkzMDNEQjU3QkY5QUE4RjEyNjBCRUI1NDc2OQorOjEwMThBMDAwMEQ5NDhGNThEQjZDQTY3OEFENkJFNTdGRUQ3ODBBRUU3MgorOjEwMThCMDAwREY5MURFRDEwRkVERjZGQjJCRkYzNjA0RjlFMUQ2Q0QzQgorOjEwMThDMDAwMzI1MzgxREVBQUREN0JBNzMzNkM1RkU1RUNEMjJCMzE4RQorOjEwMThEMDAwNzgxRkVDRUVENkE3RDA1OEJFNkNBNjNBRTJGNzU3QkVGQQorOjEwMThFMDAwM0MyNERDOEZBRDc0MTYyRUM3RjdEOEI4RUIzQkVGNTgwRAorOjEwMThGMDAwRkNEMkYwMTRBQUY3MTJGQ0I0NDJGMEQzREExNzg3OTJBNAorOjEwMTkwMDAwQkZCNTM2QTY5QjlGNzg3RjJCQUYxQkQxRDY3MTQ2RjAxMworOjEwMTkxMDAwRTNDQTk3QkU4OUY4Q0VDNDZFRTAyM0Q1Q0NGN0M1RDQxMAorOjEwMTkyMDAwQTE2MEVGREIyRUU3RDI3NzFGOENERTdGNzVDMkJDMkQ2NgorOjEwMTkzMDAwNTczRjg5QzVGRTlFMzdGRjRBRjBCM0I5RDcwNzJGQ0E3NAorOjEwMTk0MDAwQTI2RjRDNjg3RjVBM0JFRkI5QTAyOTIxMUZFOTBFNzJBNAorOjEwMTk1MDAwQjYwMUM3QkZFRDc3MkY1RUZBMDBGMUQzRkNGMkQ2OUYzOAorOjEwMTk2MDAwRTEzM0Q3NzlGRTczOTc5Njc3MTRGNkM2MjVGMDAxRjYyMgorOjEwMTk3MDAwODZFMjhCMkUxNkNEQ0Y5MzA4RkY0NkMxMURGOTJDRkFCNworOjEwMTk4MDAwOUU4NzRBN0NFRDY2Qzc3MTFGQTdCNkQ1NDA3NTI2QjEwNAorOjEwMTk5MDAwQjgwOTE0OTZBRjhCOTUwRDlBNTE3MjVCOUNBMEFGODVEOAorOjEwMTlBMDAwOUVGOTdGQ0VEQjJBRUFBODNFMjBEMjFGMkEzOEI0MzIyNQorOjEwMTlCMDAwQzIwRkYyQzA1RkFGN0VEMDMzREU1QUNDMkZFOUZEQTE1QgorOjEwMTlDMDAwRjEwMUMzNjI1M0RDRjdGODQ1ODdBNkY1RUExNzQxNDBGOQorOjEwMTlEMDAwRUQ5NkM2ODhBRDIxRjgzNUU4RjRGMzdFMjE1N0Y1Mzg0OQorOjEwMTlFMDAwMTZFNkZGMDNEMUZDRkMzMzk4MEVGNDdCN0Y5QUNBRjUxMAorOjEwMTlGMDAwQjcyRDgzRjFGMzY5NTJFNzMwMEJFOENCMTZFN0EyQzdBNgorOjEwMUEwMDAwMUY4NTZCOTY0MTdDREREOEFGQTUzMzM1RjlDNDdGRERFQQorOjEwMUExMDAwN0VEN0ExMTFBNEI3RDhCNzMwMUJFMjQzRTQzREY0NzREQworOjEwMUEyMDAwMkJDMEYzRUNGOTYxNzIyN0RFMEYxQ0ZFNkIyQ0U2N0RGOAorOjEwMUEzMDAwNzdDNEFCNkYyMTNEODI0NzY1REFGRjg5NTIzQTRDOEVGRAorOjEwMUE0MDAwNUVFMkJCNTc1MTBGMDI5RkNBQTlEQzFFNTgxQTc5N0U2RAorOjEwMUE1MDAwRDFBMkJBMTlDNjBGNTE3NkZCQThGMDczN0Y4RDRFMUUyNgorOjEwMUE2MDAwNEY1NjFFN0VCRkJGMDlFODcxQzlEMDE2OUIwM0UzQUY3NgorOjEwMUE3MDAwREVCQjNCMTZEREZGMEM5M0Y3MDNFNEMzNTU2N0RGMUVBNworOjEwMUE4MDAwNjNBN0ZDQ0Q5NkZFMTgwRkQ2MDdGODc3MzA0NjJBQ0MxMAorOjEwMUE5MDAwQTdFNEY1ODRBMzdBMzMyQzI2MDFDRkU5Mjc1MDNCQjI4MworOjEwMUFBMDAwMjk3RjE5RjI1OTc1ODBBRjEzQzdDNjQyQkVFMThEMTI2NgorOjEwMUFCMDAwRjUzQjFCNkJFMzcxQkNFQURGMzdBN0ExM0NCRDlDQzRCRgorOjEwMUFDMDAwRTNDRDk3QUU2NkYzRjcxNUE2RTBGMzQxQTc0MzEwRDMzNQorOjEwMUFEMDAwNkZDMEY4RTQ2NTExRDc3NDVFOTVFOTM5NkRGRTkxOEQ5QworOjEwMUFFMDAwODVCMjFERjgyMTI3QjBGMTAwQzU1MTRENjYxNUU5MUFFMAorOjEwMUFGMDAwRjUxQ0UzNzg2ODhBMjJCOUFGNkU5OUNBRDBFRTc3MzlCRgorOjEwMUIwMDAwOTg0QjgyRkIzQkEyODM3RkE0RjM2RUNENjYxNUYzQURBOQorOjEwMUIxMDAwNTFGNjhEMkMxRUM2REYyMUY2NTk4NzAzNDdFMTc5MjkzRQorOjEwMUIyMDAwRURCQTM2NUY1NEQzRDMxODczMjAzRjUwREUzNzRBRDkwRAorOjEwMUIzMDAwQzgyNkRCQzJGMTFDNDM3ODc2QTQ3MjNFREExMTFEMzA1MAorOjEwMUI0MDAwNjA5RTI1Mzg5OEIxNjcwOUFFMTA5QzhDRTZENUUwMUNFNAorOjEwMUI1MDAwRUVDN0YzODQzQjRDQzFGMzc4NkUwNkUwQjIyM0ZEODdGOQorOjEwMUI2MDAwMzMwRTI3NkIxQUFBNjI5RTIwQ0FFRUE2NzU0NEQ5NTU3OQorOjEwMUI3MDAwOTc0RkVBMDk1Nzc1MkVGM0EzNURGRkY5NDNBQzVCNkVFRgorOjEwMUI4MDAwNTE4RUFCQTM0MzdEMEJDOEMwOEU4MTRDQzhGOUNGMUZDQgorOjEwMUI5MDAwMkZDOTA4RUY4MzYyMTkxNzdBN0ZDOEFGMzYzRTVFMzdDOAorOjEwMUJBMDAwODlFMjA5OUY4Q0YxMkZCNDMxRjFCODRFOTVENkE3NjAyOAorOjEwMUJCMDAwOEEyOThGRTMwMUY3REJBRDE2N0VCRkZCNzlFMDZGMUI0RgorOjEwMUJDMDAwRjY2REZDMzk1NzlDREQzQTREMjIzOUUxRjVCODQyMUZEQworOjEwMUJEMDAwREMyNzA1Q0VERjA4QTRGRDJBNzAyMDU3MDU1ODU2QkYyNAorOjEwMUJFMDAwQjE5RkY4NzQ5NUExRTlBOTkxNzBGRkVFMjhBRjJCMTU2QworOjEwMUJGMDAwRTY3QkVENDMwMzlENkJGREYzOEI1MUZFMEFDMEM3QjAzRQorOjEwMUMwMDAwN0Q1QjkyRERCREM4ODc3RUZDNDdERTdCRThDOTc0QTQ5RQorOjEwMUMxMDAwRkYzRTQ5QzUzQzZDOTczMTQ4REYzN0E5NkFGQUNDNDQ4RQorOjEwMUMyMDAwRjUwRDhEMUY1M0RERDM5QkE5REU0OTM4Q0ZCOEM2MUFGOQorOjEwMUMzMDAwREE4RjFFQ0YzNkQyN0U3NEI2MzgwRjVFRUZFNEZBRTM0OQorOjEwMUM0MDAwRjJFOTIxQ0ZENjg0RTE3RjQ5MkE5NzJGMTZGNDBFNDA3RQorOjEwMUM1MDAwQjk2OTEyRjJEOTgyN0UwQUI0N0I4NUJGQjRCN0Y1RDZEMgorOjEwMUM2MDAwMkMzNTJDN0Y1OEMzMEVBNDIzQkUxRjYyODdBOEQ1QUU4NworOjEwMUM3MDAwNzdGOUY5QjlDQUVDNzcyQzc3QjhDM0Y4NkY5MTkwRjc3OAorOjEwMUM4MDAwNDVBOTIyNEY5NkVBOUQ4REYwQUU2QUZEQzQxNEFCRTJFMQorOjEwMUM5MDAwMzk5OUZBRkU2ODU3RUFDMTlGQjJGNzgyOTc2RUI5RDVCMworOjEwMUNBMDAwQzk1MUI1MTIzNEUxRjNENTE3RjhGOTU3QTA3MzFEOUU0OQorOjEwMUNCMDAwMzc3OEY5OURDNjExOEJFMUZBNUVDMDM1RDY5NUZBQ0UxQworOjEwMUNDMDAwOUFBOUJFNzJBRkQxOTM4RUNGRDc5Q0Y5M0ExN0Y1NTYyOQorOjEwMUNEMDAwMDkwMjAxRjA3Q0REQkM2QTAwRTIwREY4QkUyODFBRTVCRAorOjEwMUNFMDAwNkIxNzIzM0RBNkM5NjcwRUNBMjdCQzlGODM3QzVGODAwNAorOjEwMUNGMDAwRkRFMUE0ODc3Nzk4REFGOUY5RDNCREZDRkMyOUYwM0QyMgorOjEwMUQwMDAwQzkwMUYwQkQxREZEODYxQzNCQzgwMUJEM0Y5NEU0N0JBRAorOjEwMUQxMDAwNDdCQjgxQ0VDOUZBNDA4RjBGQTY3RUQxMUNFQ0VGNjg3RAorOjEwMUQyMDAwMkZCMTkzN0M2MzVFM0YwRkU1MzQ3MDgwQzZBOTg3RDhERQorOjEwMUQzMDAwMDQ0OTI3MzE0RkI4M0ZEOUU4OEMyNUJBNjlGQUYxQjA4OAorOjEwMUQ0MDAwOTMwOTNCQTFDNkUxNzkwM0FCMkM0N0M4NDU5ODNERTQxNAorOjEwMUQ1MDAwN0Q2MTJGNEZGQzJBRjBGODJGRDE3NkI4ODU1RDEwRkVGQgorOjEwMUQ2MDAwMTRGM0U2OTM5RUJGNTdEOEFBQjVBRjRGOThCOTFERDZDNgorOjEwMUQ3MDAwQjlGNjg0REM1RDNGOEVGRTZCNDBGMEM5MDFFMUNGQTI3NQorOjEwMUQ4MDAwOUQ1MDEzNzgzRDBFNUUxRkJEOTlEN0Q1OEU3MUFGMjkzQQorOjEwMUQ5MDAwQzZCM0NGRTNDQTM3MUVDNDc2ODJBN0JFMThDRjNFNEY2NAorOjEwMURBMDAwNUFEMDdFOTA5RjgxRTZFN0Q5MUIwRURDOTQ4REZCREUzNgorOjEwMURCMDAwNUQ2N0NEMENGNzVEMUFGRTFBRkNFMzRCODA4N0ZCNUI3OQorOjEwMURDMDAwMDBGRkJERDgyNTU4MEVGMTFGNThFQzc0RTZFQzc5QkYyMgorOjEwMUREMDAwNEJEMkY0QzdBOTBBRTRDN0NFMDYzOUQ0MDc0MEFBODA3QgorOjEwMURFMDAwQzFCMUZGREJENDkzOEZGQkEwOUY5NUU2N0UzRTE1RkQyRQorOjEwMURGMDAwRUQ3NDJGQjU1RDI3RkY5QThDQjY2MEVGNjlFRTQ3MzUxRAorOjEwMUUwMDAwOThEQ0Q5QzgzRjBEMDMyM0JGMUZBMEI1NEZBNjFBODk4MAorOjEwMUUxMDAwMEUwNTdEN0NCRkVCNDgyQUNGNkYwRUYxQjFDNzkwOEZDNgorOjEwMUUyMDAwQUExQTY0QkIxRkU4N0VBOTQxNzY5QkMwMUYzQUVGRjY1MQorOjEwMUUzMDAwMjZFM0Q5OUMwQkNDNzdDQjQ0QjRGMzIyOEVENEJFRjdFNworOjEwMUU0MDAwNzIxN0ZBMjk2MEE3RUVGRTY1RUZGQjBGQUI5OUY2NUIwMAorOjEwMUU1MDAwNjM0MEJFNUFENjI0QjFGRjAwMUMyQzdGMjZGMkY5RDU3MAorOjEwMUU2MDAwREFGNzZBMUFCNzFDQzZFRjg4QUQ3QzRFNzcxRkZEMTVFRQorOjEwMUU3MDAwRkEwRTQ2QTQxRjczMjQ1NUY4Mjc1OTJDMEJGRDEzRTBDNgorOjEwMUU4MDAwMjNEMjBGNDY4NTFEMzEwM0RGQUU0OEY3RUU0MzdCRkNCRQorOjEwMUU5MDAwQjJGOEJFMDJFODUxOTJDNzdENEU2MTU3NDRGRDQxNzBEMQorOjEwMUVBMDAwMDdBRjJCMUVCRUNEMkYxQkUwRkQwOThBNUY0NjdCQzUwOQorOjEwMUVCMDAwQTBDNTdEODc3MTZFNkYxOTdEODdDOUU3M0U4REZCM0U5QQorOjEwMUVDMDAwQ0I4NTNFNUNBRUY5Njk3RUJFM0YwMjY2MzdDMjRGQUI0MgorOjEwMUVEMDAwMTZBQjFGQ0ZGQ0I1QjFCOEZFNkQxMkM1Q0JBQkI2NDU4NgorOjEwMUVFMDAwRUVBNzU0OEJGNUFGREU3Q0YyMzA5QUJDQ0E3QUREN0Q2QQorOjEwMUVGMDAwQjFGRTZBRERGQUI1N0RGM0NGNTMyM0VCQkZBRTc3M0Y3QQorOjEwMUYwMDAwRTQyRjQ2RUUzN0JDMkRDNkQxRUU5QkQyQjg3RUFDODIxNAorOjEwMUYxMDAwNjUyMERENTZGQjY1QkY5RkZCNzkzNkZDNUVEMDlENjI3OAorOjEwMUYyMDAwNUQ3NzBBRkFEMzNBRTFCOUNBNkQ5MjNGODAzQ0ZFNzhGOAorOjEwMUYzMDAwNjQ5REU5NURGNThCQ0I5MEFFN0EzRTU5MjlENkJEN0M4OAorOjEwMUY0MDAwQkI5MUZDNTVGQ0ZFMEZDQTlEOUUzRjU2OEFGNUFGRDQ0RgorOjEwMUY1MDAwQURCRkNBMkJFOUUwRTM3RTc0NEZGOEVBNkY0MTNBNTcxMAorOjEwMUY2MDAwNkUzN0IyREVFMEQzRThCNTUyRTNFQjNFRTBENUUwRDQyNQorOjEwMUY3MDAwRTBGRUExRjBGNjRGMTNGOUFEMTE2QzA0RDFBOTNDRTFEQworOjEwMUY4MDAwQkFFOEE0Rjc3Mzc3MUQxRTQxREY1QkJCN0M2NDIwQzVGNAorOjEwMUY5MDAwRkIxQTFGRThERjJGMTM3RUYyRDRDRERDNkZCQ0Q0NThDMAorOjEwMUZBMDAwNkMxRDg5RjE0QzlCQzEyNUE5MTQ5RkM1OEUwNEJDRTQwRQorOjEwMUZCMDAwMzdDQkFDMDJGQTVENEQ1OTlCRjBGQjgzNzkyNzBBRTZEQgorOjEwMUZDMDAwNjBGQzlGN0ZDMjQwRTdFRkY2MUMyOUEwN0RFN0ZDQTNFMQorOjEwMUZEMDAwODMxMkIyMjhDRkVEQTJFRkUzQzAzODY0NUZCQkRBRjIyMAorOjEwMUZFMDAwMzZFMUY5ODRBRUI2OTIwMjFDNTc4MkU3RDAwRkM4MTNDRgorOjEwMUZGMDAwNzZBMkE2MkRDRjFBN0VGRTdDNEMxQThGRUZENzNCM0ZFMAorOjEwMjAwMDAwRkQzOUZBRTk1Mzc3MTlFOTlDQzU1NDYzRjA0REFDREIwRgorOjEwMjAxMDAwREE3MzQ0QTE3REYyRDUyNzk2M0MxNDg1RjQ3RDUxQTI1NAorOjEwMjAyMDAwN0RGMkMzRUQ2QjEzMTcyMjlGMzUxOUVEQjhFRkRERDVBNworOjEwMjAzMDAwRjRFMzAzNzhERkI3NURBMkVGNUU1NDM3OTc2NkVGODA3NQorOjEwMjA0MDAwN0VERTk2N0M1N0Y4RjlCMzNDODc0QUYwQjE1NDJCQzUzNQorOjEwMjA1MDAwQ0Y1M0ZCMTlDOTZFNUU0Q0IzRkUxNkZEOUY5NUVFMkQ1NgorOjEwMjA2MDAwMjRERjE3RjdFRjMxNTFERERFMEU4OUExMjkzQkVDM0M2RgorOjEwMjA3MDAwRjgwQUUyRTNFMkFCMjc0REU4ODQxNzM3OUMzNDc1N0MxRAorOjEwMjA4MDAwOEYzRjcwQzkyRkIzMDBDNUNEMUI0RDE4Qzc1NDZFRDFGQgorOjEwMjA5MDAwRkExRDI2QTQ5MzQ3Rjg0NzU1Q0Y3RDRDRkQ5NUU4Q0YxMAorOjEwMjBBMDAwQzM3QzJCOUY5MUE5N0VGNzYwRjM2QjI2RTRFN0FBRUQzMgorOjEwMjBCMDAwMTI0QkM5MENCQkJGNTk4QUY4NUVDMzEyQzZGOTYwODlCRQorOjEwMjBDMDAwRDAzRkFCOTg3RjdEMUEzQ0I3NkEyM0FGNUI2MDhGNDZFOQorOjEwMjBEMDAwRDYwMTZCRkNCRDQyRjBGN0FBRURCM0U4RkI1MzNEQkU2MQorOjEwMjBFMDAwNUI4ODcxRTMwREY4MUNFN0VGNjU5QjIzRUZBRjEwN0M3NQorOjEwMjBGMDAwQkQ0MkM3RDczRjQ5MTNGQTY3MzgxQjhFN0NGRDc1QTFENworOjEwMjEwMDAwMUE5NzAzRDdCRjNFQjk3MjQwNkZFN0VDREI4NEJERDZBOAorOjEwMjExMDAwRUNFNUU1ODA4MUVDOERGRUI5Q0VDNjJCMDQ2Nzc1REI1RQorOjEwMjEyMDAwNjUxM0ZBQTc2NTRENUYxMEZFMkI5QTVBQTk3RUU0NjZFNworOjEwMjEzMDAwRTY1RDhERjhCQUI5Qzk2QTQ3QjlBRUU4RTA3QTY4NUE3RgorOjEwMjE0MDAwOTNEOUVGOTdGMDdFM0RENTM5NzdCNUYwQkE0OURGN0U2OAorOjEwMjE1MDAwODlGQzFDNEQ4RjY5REY3NzVDMjZGMEI4MEMxNDc4N0EwNworOjEwMjE2MDAwMUVGQUJCM0M2RUFFMTI3MUYyOEE2MTVCMEVFMzNFN0JERgorOjEwMjE3MDAwOTVCOEJGRkFFOEMxNThGNDBGQTdCMTJGNkU0N0ZBQzA1RgorOjEwMjE4MDAwN0MwQ0U3NjNDRjQ0RTI3REJBRDA4QkQzQjc3M0JEQTg5NAorOjEwMjE5MDAwQjc2QjVEQTlEOTMzMjk4RjA5NzEyQUMyQjU3QTdCMjQxRgorOjEwMjFBMDAwQkVBQjc0RjFGOTYzNjkzQzNGRjY4MjBFREYxNTQxNjYwMAorOjEwMjFCMDAwQ0Q0MTM4NTREOUU1QTdBN0RCMTU5Q0Y3NDgyRUQ4NUI0RAorOjEwMjFDMDAwQjQ5MzZBRDZGNzdFODdGMTRERTE2NzZCRkQ5OUUyMUMwNworOjEwMjFEMDAwNzhCRDdEQTMyRDNDNkU4RTRBRTdGRUMyQ0FGMUIyMEZEOAorOjEwMjFFMDAwRTlENTFENkYwQzNBOThBQjFBNDJGMTA2QzQxOUNENjlCNgorOjEwMjFGMDAwNDkzQ0VFQzA4MjkyMzczMjY0OTY5ODE4OEEzNzFFNzEzNQorOjEwMjIwMDAwNkVBQUM4ODM3RUY1NzYyRUY3OURFMzYwM0MzQzdGQUREOQorOjEwMjIxMDAwMzBGMjQ3QUJCNzlCRTk5QzYyMzVEMDlGRTI4QTI2N0VCRAorOjEwMjIyMDAwOUVDMkQzMjQ5NTIyRERDMTVGM0Y5QTg2RkJCMTk4NTJBRQorOjEwMjIzMDAwODU3NUNGNkFFNDdDM0ZBQkU0MEJFMjk3QTM4M0Y4N0EyMQorOjEwMjI0MDAwMkYyQjZBNEE2RkZFQkJFNkI3RTNGOTMwMzVDQzdGQUY4MAorOjEwMjI1MDAwMDIzOUM1RTdBQjlBNzgzRDUyQzM4MTZGRkE2N0EyOUVGNworOjEwMjI2MDAwNkJGRUFGRkU4QkExRkQ1QUQ4NDVDRDJGMEM4MjVGMzg5NworOjEwMjI3MDAwOTBGQjQ1RjRCREM5QkI4NTdDMkRCM0YzN0RCQUJCODUwRQorOjEwMjI4MDAwRkQ2MTUyMURGMTc5OTVCMUZFNTAzQ0ZBNTkzQjc4QkQ4NAorOjEwMjI5MDAwMDBEQjg3MUY4NTAzRkRGOEY2NEI3NUYxQjBFRUNFOTc5NgorOjEwMjJBMDAwMjRBQTg3QzNGN0YxN0I5NDlENEJFQTNGNDFCRkZCRUIyOAorOjEwMjJCMDAwMUQxNkYyMzdFRjA2QkY2NTRBNUU0RkI5RDRFNDVCRkJFQgorOjEwMjJDMDAwNkU1NjBEN0I4OEZDQ0Y4NzU4MURCNTk1ODI5RjNCMUJCMgorOjEwMjJEMDAwNkJFOUZCQTA5QUJGNDJFRjBGRUNFOThGNTQwQUJFQUY0NworOjEwMjJFMDAwRDRGMTVGNTQ3QTI0REZENUJDMUQ0RDdFNjNENzUxRDkxQworOjEwMjJGMDAwOEVGQjMxODBBRkRGQTQ4NUUzNDVGODIxMEQwN0EyODg2RQorOjEwMjMwMDAwQUU1RDI3NkQ2NDQ3RkUyQ0Y4RURBMkM4M0ZENzhDOTNENQorOjEwMjMxMDAwMDkwRjg2RjFCQ0NENkU3OTZEMjBEMjExRjE4RUY1RjdFMworOjEwMjMyMDAwMkZCN0JDMzY4MjlGRkJGNjEzRkU1NzZEOTMyM0JFMEY2QgorOjEwMjMzMDAwNUI1OTFGRjlGREQ3OUFCNzZGQTNFRjA4NTVFRkVGODZFQQorOjEwMjM0MDAwNkI4ODI5MzEwNDU3NUY3MjIwNDkzQzhFMzQ0ODkxNzE2MworOjEwMjM1MDAwNjRGNTNFRDkxMzVFNzcwNkVCQjkwM0Y1NTFCQTkwMDdFMQorOjEwMjM2MDAwQTYwNDkzMzFGRjM1MDA5RDA2ODBBRkE2ODlEM0Q1RDA1MgorOjEwMjM3MDAwQ0M1Qjk4RkYxNjlFMjczMUQyRkMzREVFMTdGOTU2RTM1MQorOjEwMjM4MDAwRkRBRjMzQUQ3Q0ZGRkFBQUFGMDJGQkY3MEY5NEE5QUUwNQorOjEwMjM5MDAwRjNGRUI3NTcwRTBERDdBMzBDRTEwNEJBNTYxQjgzQzk0MQorOjEwMjNBMDAwMTQ2RjlFMzQxMDdDRDUyNzJGMjcwRkIyQTE1RURBNTIwRQorOjEwMjNCMDAwODJERjBGOUQyRUY0REZFMTgxRDZFNUM4Q0YzRTlDMzc0QQorOjEwMjNDMDAwMjUzNENFQ0I2OUJDN0U4RkUxN0E5REU4NkRGQzkyOEY3RgorOjEwMjNEMDAwMkJENkZCMTA5QjJERTI2QUNFNEYzOTY5N0NCRDEwOEY0NgorOjEwMjNFMDAwOEM0QkVGMjUxRUI5NUVCRjEzRUNDM0E5ODUxMkQ2MzMwMworOjEwMjNGMDAwMjkzRThDODdGN0JDQzdGNTQyNERGM0IyOEY5MERGQUIxNworOjEwMjQwMDAwREYzNzUzOUREN0ZEMkRDQjg2NTJCREFGRDc3QjAzRkE2NworOjEwMjQxMDAwMUI1RkI3QUNCODgxRjI4M0QyNDMwNDk3MEZFMTczQTI3QworOjEwMjQyMDAwNUY3MzI2MTlFQjUyMkI5QkNGMjQ5M0REREQzQjdBOTMxMAorOjEwMjQzMDAwMkYwNkZEOTdCQ0U5NzgxREZDMDlFMjNGRjA2Qjg4RkY5MQorOjEwMjQ0MDAwRjZCNDE1Njg3RThDMTVDN0FEM0NBQTc4MTAzRjk1NDc0OQorOjEwMjQ1MDAwMEI4RTU3QTA3RjcxQTJBODAwRDVCOTc0QTI4MEZDOThGQQorOjEwMjQ2MDAwN0NGNDYzNkMyMUJGQTY1QjRGQTY3MzNGQTZBQjM1OEE5NQorOjEwMjQ3MDAwRjIwQjEyMUJDOEY5ODcwRDhBRTA5RkQ1MERBRjkzQkRGMworOjEwMjQ4MDAwNUZERDI4NDdENDJGNkFFRkREOTlBRUQwMzhDQjM0RkUxQworOjEwMjQ5MDAwQTk5N0RDQzQxRkJCNzhCQkJBNzEwRkFENkY5NUIxOUUxNQorOjEwMjRBMDAwRTg1REIzRERDOEVGRUZFMEFERjY3RDU4MUY4QkY3MjE5NworOjEwMjRCMDAwM0U4RUUzMjVBMEMzMzQ5MzNGMDNGM0QzQzczMkI5OUZDNQorOjEwMjRDMDAwQUZBN0M3RTdFOTNDRkY3MUVDQUM3NzAwRjJDQkIxNDJCNAorOjEwMjREMDAwRUY1MDdCMkY3NkMyQzc4QTc4NUMyQjA5N0MzN0YwNzM2QworOjEwMjRFMDAwNTNGQUU3M0U0Qjk3QzQ3NzQyMjJDRkI3NkFFREE5NzRGRgorOjEwMjRGMDAwQUUzRkE3OTk3QUZGMkVFMDZGRDJCNTczMDlFQzMxNDM1NgorOjEwMjUwMDAwMDE0NkM1NDZGQjA2RTFEN0E3ODY3REQ3NjFDRUNENDZGRAorOjEwMjUxMDAwRjIxNzRFMzFGQkVCNThFRjM4NDNEM0IzRTNCODdERDUxOAorOjEwMjUyMDAwRTdDQkU3ODlGNzNDOUI1NUJFNUZBNDNCM0YzMzRGM0I2RQorOjEwMjUzMDAwREZBNDNCRUYzNjRGRjgzQkYzNzRGRUNFRDNFOUMyOEZGNgorOjEwMjU0MDAwMUZDMjg2QTAxRUFDMTdFN0VGRDYwRThGRjI4N0U3QjM0NworOjEwMjU1MDAwRjRFRDYxQjEyRjgyRTc4N0IwQUQxOUZFMkVFNTdEOEVENworOjEwMjU2MDAwQjU5RTdEODVFQUREQ0U0NkIxODEzQ0FGNDdGOUVGQ0EyNQorOjEwMjU3MDAwM0VGMkRGMzVERDcyMzkzNzgyQ0YzNEJBNUMxMkRGODM0OQorOjEwMjU4MDAwRDFEMzY1QjdBNkFGQzRCRTVEQjREOEI3RjMxQkJEQkI4RQorOjEwMjU5MDAwNTE5RTJCMkQxNzREQkNFRTMwNjg0MjdENTYzMzlDRkI2RgorOjEwMjVBMDAwNEQ5NzRBMjVEQTZGMDczOEZCOUJDM0Y0RkJBNTU0MUVGMQorOjEwMjVCMDAwN0ZERDdGOEI0NDc5RDc1NjdDMUVFM0FDN0E4OUVBQkNGOQorOjEwMjVDMDAwMkIwM0VEMjZFNEE3MjEwRDhCMUYyNkI5RjVCMUQzMkNFMworOjEwMjVEMDAwRUNCQjFBMzMyRERDNEU3NkQzNEY1Qjc3QjcxRDhCRjdGMAorOjEwMjVFMDAwNzE3RDlDNDgyRDNFOEY3NjcxODZCMDgzRkE3MzUxNDM3RQorOjEwMjVGMDAwNTk3QjU5M0FDMDMzREYyREI5QjAxRUEwMkYzQUNGNUVCOAorOjEwMjYwMDAwMzBFQTc1NDRDM0Y1RDJCQjMzRERGQjRFM0FDQTc5RkJFMQorOjEwMjYxMDAwRTU1QjMwOEY3QTZDRjg2N0ZERDE4RTU2RjVDMUM3MUYyOAorOjEwMjYyMDAwMEIzQ0VCQkYyQkUzMUFBQUQ2RTJGNzU1NkE5RERFMEVGMAorOjEwMjYzMDAwRDI5Rjg2NkY2MzQ3MzAxQ0E3RTMzNzZCMjVBNDEzMjMxMworOjEwMjY0MDAwRkVFRjRCN0UzRTEzRTM3RTk2Q0VCRjc3MEZCOEE3N0Q5RAorOjEwMjY1MDAwOTc1NUU5QkM0RUVCOThEMTlGNDE3OThBOUNFQkRCRjcwQgorOjEwMjY2MDAwQUFEOUY3NDYyRUVBQjNDRUQ2QTNCOUE2MzBCQTVFNUM5NQorOjEwMjY3MDAwMEI3QTAwRUQ0QUYzQzE2NEQ1MTZDRTc3MDZFMjM3NDlFRQorOjEwMjY4MDAwRDJGODRGMTFGNjMyOTIwRjJGMjIxRkU2NjA3QjI2NzY4QQorOjEwMjY5MDAwMTBFQUUzNURBNzYyMDdFMzc4N0I3OURCQ0RBRjRERkMwMQorOjEwMjZBMDAwN0JGNjEwMUYwRDk5MTcxMzBFREZDMzA0REZBNTdBM0VDQQorOjEwMjZCMDAwMEU2MzFENDNFNjhDMENCRjVGREIxNzFGNUIzMzg4OEZGNworOjEwMjZDMDAwM0IyMkY4NTg1QjZGM0Q3RUNGMDdFMzgwMTYzMzdEQ0YwQQorOjEwMjZEMDAwMDdGM0Q3OEUzMDM5MTk5QUMxRjVDRjU4RjFGRDlFRjEyNQorOjEwMjZFMDAwQ0M0N0RGMzkxQzJCQkVFMzMzNUU2MTAxMjUxRUY3Q0RERAorOjEwMjZGMDAwMDIzMkRGRjdFNUU3MkRDNjA4N0UxRUFCMDQ1QUIxOEUyNQorOjEwMjcwMDAwNjJCQ0Q4RTc5OUMwREFFOUI5MjkyQzQ4QUQ5QkQ5RTk3MAorOjEwMjcxMDAwMUM0NTExNzM1MTNCQ0UxMjk4OEVFRTU0NEU3RDNERDUyMworOjEwMjcyMDAwMjUwNjkyMTVDNzc5OEIzOEFGRDEwQkRENDJFQjU3RTgwMAorOjEwMjczMDAwQkIzREM0OUYzMjlFRDdFOUZEQkIyRkIzMzNCOERDRDM3QQorOjEwMjc0MDAwQzc0NTkwQkU5NzE4RTVCOUYwN0I2RDM4Qzk0NDg1OTVBQgorOjEwMjc1MDAwNjM3REQzNjQ4NTU5QTIwMURFNUQ4NzBDMjRDRjJEMURENgorOjEwMjc2MDAwQUExRkVCNTM1RDA5RTJCRENGMTlENUUxOEU3NTczNzlEMAorOjEwMjc3MDAwNDU5MzgzRjUxOERBN0FGNTc4OTgwMEUzNjE5RTZEQUM5RAorOjEwMjc4MDAwMDI5MTI4RTEzMTQwRjNEREM4RjgzOTkyNDJBNjUyRkRBQQorOjEwMjc5MDAwNzM2OTQ2QTZEMEY3NDE4QUEzOEEyMThFNDI3RDZGQjAyNQorOjEwMjdBMDAwRjgwODFGRDMzMzU0QkE4RkZCMjVCMTMwQ0U4NDhEMTI3NQorOjEwMjdCMDAwN0IwRkY3M0ZCMkY4N0FCNUYxMjcwMDIzRTBGOUMyRTlDMQorOjEwMjdDMDAwMTlEQzlFNjE0QUY1QkQ3OEJFOEYxMjRCMDVDRDI1NzY4QQorOjEwMjdEMDAwRkU5REEzNjRGQUNFRDFGNUUyQjUyQjk5N0ZFRjMyRjZEOAorOjEwMjdFMDAwQ0U2MEU3Q0YwQTQyRkI0OTJFRkNFRTUxNkNFODNCOUJFMgorOjEwMjdGMDAwMkVFRERGODMwODQ0RkU3QjEwNzc2NDJDRjkxMUYyQTNFMQorOjEwMjgwMDAwNTZBRkM3QkNGQ0RGN0REMEQ3RUI4NUQ1RTdCMTBCNjFGOAorOjEwMjgxMDAwRTdCMEI1QkE5MjZERkVEOTJBOUVGMzVCOTA2OEExNzNCQQorOjEwMjgyMDAwQkY3OTk2RkVGOTY4QzcwNjNBQkQzNEZFRkJEMkY2QzEwMQorOjEwMjgzMDAwMzQ5OEUyMUZFRDg5MDlGMUJCOTVCOUM3MjFCRTQzNzVGNAorOjEwMjg0MDAwODNGQzNCNTBEREU3QUU5MjE5OUQ1N0I0OUE3OTdERTU0NAorOjEwMjg1MDAwNjMyMDFGRjgxRDI2OTAyRTE1RUI2OEQ4ODNDNTU0OEY3MgorOjEwMjg2MDAwQjlERTYxNzFFMTc5MDkzM0MyNkQwREMxNUQ2QjExREZCNAorOjEwMjg3MDAwMDVCNUYwN0Q3MTdEM0Q2OEFEQ0Q0MERGMURBRDY1RDEwNQorOjEwMjg4MDAwNzQwRTNEMjlEQUJCMkUwM0UwQkEyRkE2ODhDRTc3NjdGNworOjEwMjg5MDAwRUY5Q0U0NDRCRjMxN0NGRDkzQjRGNTFCN0FENjQ3QzI2QworOjEwMjhBMDAwN0ExRkM5RThBNTFFNTE1QkE3RjZFRjc2RDgwNUZFQjRERQorOjEwMjhCMDAwNzVEQkI1NzM0QTZFMjVFMjlDOTI4NjhGQzdBMkY5QkE4MgorOjEwMjhDMDAwOERCOEYzOUY0NUVGQUFBODM3RjRFQkZERkZEQzI5QkNEOAorOjEwMjhEMDAwMTZBMDY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMjhFMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJEM0Q3NjY2MEY4NTE3MgorOjEwMjhGMDAwOEZDMDJFOUEwQzBDNUREMkE4NjJCNEM0MUQxMjBDMENCMQorOjEwMjkwMDAwOTc4MEY4MEIxMDY3MDJFREY1OTI2NDYwRjAwNkUyNkRCNworOjEwMjkxMDAwNDBCQzFEODhDNUE1MTgxODAyODAzODEwODhGQjgwRkNCMworOjEwMjkyMDAwN0UyMDRFMDdFMjI0QTgxQkIzMDUxOTE4NzI4MTM4MUZCOAorOjEwMjkzMDAwODgwQjgxNTg0ODgwODE0MTU4ODA3OEZCQ0IxNTE5MTg0NQorOjEwMjk0MDAwNUVBQjIyRjg1QTZBMEMwQ0M5MUFGNEYzRkY2MEMzOEUwRQorOjEwMjk1MDAwQjZGNEI1RUYxNEQwQkVFNTZFMDhCRTA0OTBCREMyMEQ0RQorOjEwMjk2MDAwNTVDRDRBMzdGQzY2QUM0MjkzNUY4REM2NUY4MzQ3N0Y4NworOjEwMjk3MDAwQTIwRDJBN0Y5OTI5MkE3RjlEMzkwM0MzNDMyNDM1Q0I5MQorOjEwMjk4MDAwNERGMUJCMDUxRDBCMDJGRDI3ODQyNzRDOTczMEEyRjJBOQorOjEwMjk5MDAwMjczMkExRjJGOUExN0MwMEJBMEI4MDc0QTgwMzAwMDBEMQorOjEwMjlBMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA3NQorOjEwMjlCMDAwMDAwQkVEN0QwRDc4NTRENTk5RjBCOTNGNzM2NzI2OTlEQQorOjEwMjlDMDAwOTlEQzI0NDMzMjYwMTI2RTdFRDBBMDAxODc5ODYwQjBGQgorOjEwMjlEMDAwNTg2RTIwRTE0N0EzMEUwODJDQjQ0MDI2Mjg4ODE2NkRCNworOjEwMjlFMDAwQzQ5RkM2REQ1MDA2MDlCRjA5MjFFMTRGNzBEMTFEMTBGQgorOjEwMjlGMDAwNURFQTYzRkJDNTU2NUI3NUJCNzY4MkQ2NDZBQjM1NjgzMAorOjEwMkEwMDAwRDc4Nzc2Nzc2NUEwMTVCRkJBNzYxQkQ5NkQ5NzZFQkI1MQorOjEwMkExMDAwRjU3QkRGRjc5Q0NCQ0NCRDk5MDBGRUVDQjdCQkRGRjNCOQorOjEwMkEyMDAwQzVDN0U3NzBFRTNEM0ZFRjc5Q0ZGQjdGREU3M0M3QzVDQgorOjEwMkEzMDAwNDZCMUUwNThDNjNFQzZCRjY5OEM0RENDNjU4Q0Q1QTY2NAorOjEwMkE0MDAwQ0ExNjBGOEI2NUU3MzA5NkRCMjEzMTU2QzNEOENBNzY5QworOjEwMkE1MDAwMjUzRTBCRkU1OUQ4RDFGMjBBRDY5N0I3QjkwRDc3Mjk4MgorOjEwMkE2MDAwNjNGRDBGQjhGRDM1NTAzRkJENUQwOUJCQTE2QkEzRTIwRgorOjEwMkE3MDAwQTNGQUIyMkU1N0Q4NkRDMEYzQUQxRkJEOUM4RkVGMzdCMAorOjEwMkE4MDAwNEE2MTA2NzVDNkVFNjY2QzMyNjM2QjNDRjA0RkE4MkY0OAorOjEwMkE5MDAwQUI0ODc2RTBGQjc3Qjc0OEUxMThCRTY2QTY2RjEyQkM3QworOjEwMkFBMDAwQkY5NUYxRjdDRDBGMjgxQTkzQTFCRUVGQjYyNjM2OTE0OAorOjEwMkFCMDAwQjE1QjdBNjAxNjBGMzU2NDFGRjNGNjhDMTUzMDE2RTFBMgorOjEwMkFDMDAwOEY1OENCMTY3ODVGOTk3QTFGNjE1RDFGMjlEMEFGMzk3NworOjEwMkFEMDAwRTY3OEJFNkZENkZCMkM4MEVGQjVENDczNThDRjMxRkNBRgorOjEwMkFFMDAwQzcxNEM2MkU2NUZFRTBFOTZDRjg3Nzk4ODUzRjU2QTBCRQorOjEwMkFGMDAwNkNDODY3NkM3NDBBNUZDRTkyMzE4MDdFMTQ2MzczMTk2MAorOjEwMkIwMDAwNzNCMTcyMThBN0Y2MzIxNzJCODNGNTU5Nzg2Q0UzNzhGNgorOjEwMkIxMDAwNUNENjI0MTExRTk3RjkxOEQ1REY5RDJCQzUxRjJDQTU1NworOjEwMkIyMDAwN0U2QzdBMzU5NEYwQkMyMDBGQ0EyMDMzMEJBMThDNzhEMAorOjEwMkIzMDAwNTgyMjFCRTA5RkRCNzZEOTdCQjhGRTBEMzhENTY4NkEzQQorOjEwMkI0MDAwOUYwOEMwRkIwNTJDRUE2MjAwREY5RkIxMTg5NThCNTlFNgorOjEwMkI1MDAwOUNDQTJGQjMwNEMxQjE5NDBEOTVBODUwQkY0QjQ5NkNDQQorOjEwMkI2MDAwNjIzMDRGMzgxNDlEOEVGQkZCQkJGQTYzRUY0QUYwRkVEOAorOjEwMkI3MDAwRkU2QUE5NzYwQTk0Q0M5NzQ3RUJCRUQwRkFBQ0Y5NTUxOQorOjEwMkI4MDAwMTZCOTBFQzc2MTRDNzY0NUZDOEM4REI3RDY3OTk4QzVDMQorOjEwMkI5MDAwMkE4MjhDRTkzRDNFNEUyRjg3NTkzRjgzRkFGODA2NDE0MQorOjEwMkJBMDAwMkY4REVGQ0IyMTU4NzdDRkYzMkM4Q0Y1MTA2Q0U2MTREQQorOjEwMkJCMDAwQTg4N0JBQjJFMjFCQTBERUYzNzhBQzFFRjE3MkFDMDVCNgorOjEwMkJDMDAwMzAwRkZEOEYzNUJBQTU2ODE1OTQyRUREMTU4MTMyQTQxRQorOjEwMkJEMDAwMzJBNjAwOUVFQTFCRDY0QjBBQjQ5QjFCRTVFMzhDMzc1QQorOjEwMkJFMDAwMzU5OTVEMDlGNUMzMzE0OTE1Q0ZCMUJGQUVDNzI0MUQ3NQorOjEwMkJGMDAwRUFFM0ExRkVBMDg0RUY3NTE3ODM3MTFBMUE3MjVEQzkwQQorOjEwMkMwMDAwMkFDNDc3Q0YxODFEQ0E4QUMzNUE0MjA2RkNENjlCM0FGQgorOjEwMkMxMDAwM0Q2NzZDMTFEMUQ1Nzg0MTZCNzM0RERFNkZFRUUxM0NCMQorOjEwMkMyMDAwM0ZBM0Y3RUM0RjFGNUJFRjAxQkY5NzE0RjE3RDNCNzY5RAorOjEwMkMzMDAwQjgyQzA3RTE2NTUxN0JGRjIyOTVDNTNDNzkyOTNDRUYxMworOjEwMkM0MDAwNUMwNzJGREMyOUZDRUUzQTVDQjYxNUYxNzZBQzRGMEQzMworOjEwMkM1MDAwMEI1MkI2OEQwRkUzRjYzNkMwRkIzMzU1NzI1ODMxOTBFOAorOjEwMkM2MDAwQ0Y4QTM4RkMxNUJBNUZGN0E1QzZEOUI5MEVEQTVGOTZEOAorOjEwMkM3MDAwODJBMzUxOTlEQTRGRjgzMDE5RjFFM0RDMUE2ODVGOTVCNQorOjEwMkM4MDAwNkFGRjA0QjYwNzM4RjYyMDNDRDQ2RkNENTEyRkNFMTMxRgorOjEwMkM5MDAwNjEzNENGNDhGNEYwQzIzQTlERkEwRDhBNzU1Q0YzQkZGNworOjEwMkNBMDAwQzNCNDRGNzMxQjVBMjQzRUFGODBBRkMxMEU5RjU1NUExOQorOjEwMkNCMDAwRjA4RDM0RkUzMTAxOTczNUJFMzVERjEzRUI0MjU0MzZDQgorOjEwMkNDMDAwMkE1NThGREM4QkVCM0FBMkYxNzVDRDM3MUVERjhERjhEQworOjEwMkNEMDAwM0JFMjA5QzdBMEZFRTQ3NTdGMzNFNjVFMThFMjhBRTlBRAorOjEwMkNFMDAwQ0Y1RkZFMENDM0Y5OTYzRjdDM0JBRUVCQjkyQzVBRDdCNQorOjEwMkNGMDAwNTMxRjlFNzlFRDQ2MzY3Q0RFQjcwNDFFN0U3QTZFRkU0QgorOjEwMkQwMDAwMTBENUFERjlFNzlBRDIxODA5RThBQ0QyOTQxMjJFQTBFQQorOjEwMkQxMDAwOTc2M0Y1NUY3OUY4NUUwM0VCRkQyNkNBOTM0QUYzOTg1MworOjEwMkQyMDAwMjk0MTM5MTE4NkExRkQ2NkVBOUYzRTA2Nzk1NjA5RERFMworOjEwMkQzMDAwOTExRjI3MzU0ODJERDhFRTg5MUIxRkZBRDI3REYwRTg2OAorOjEwMkQ0MDAwQTcyRTBFRjcxNTdGQzlFMUJFRUNGQUI1NEYyMkJDOTc0RQorOjEwMkQ1MDAwRERCOEY2RTdDRjQwRkQwQTE0ODJDMDc3OTdERUI0N0Y3NgorOjEwMkQ2MDAwQ0RERkMxM0ZCRkIxRjAyRjk3RUY2MTI0MTc2MkQ5MDBDQgorOjEwMkQ3MDAwNDdBRTI5MzFEQ0RGNjVERjc3REJFNENBQjFFN0ZEMjQ0QworOjEwMkQ4MDAwNTcwQUNERDIxOEYyREZCMjNFODlFNDczN0ZBMzlCMDVDOAorOjEwMkQ5MDAwRjFGRENGREM3MTM3RjJENzAzOTI0OUVEOUY3NUM3NTEzMgorOjEwMkRBMDAwM0UxQzczMzE4NkYyNzhEOTcxNkYxQ0Y5ODVBRDVBNDY5NQorOjEwMkRCMDAwRjIzQTYyQzk2QjMzN0ZFOUJEMzBERUJCMEQ5NjNDRTc2QQorOjEwMkRDMDAwNzQ0QUVGNjE3REVGOUFCRkQ4N0UzNUY0M0Y2M0JBQzI5MworOjEwMkREMDAwMjgzNjJENzlFMUM0RjNCQjAyQkY5MUZBNzJBMjgzNjU1NAorOjEwMkRFMDAwNkFEMjE1Q0U0MDBGQ0Q2RDhBNEQ2RUQ3Mzc5QzI0QkE2RQorOjEwMkRGMDAwNUEwNjI1NEJFM0QzQjk4MkNGOTYzNUZDNDJGMEE3NEU1NQorOjEwMkUwMDAwNzJDOTA5Q0YxQkI1ODVDNTk5RThFRTk0ODAyNzI5RThEQQorOjEwMkUxMDAwRUQ1RERDRUZDQjEwM0VFODg1NzREM0E1QzQ5NTM0Mzk2NQorOjEwMkUyMDAwMEQ3RkFFQzgwNEFBQzc5MEE1NkZEOTYyODdEMzkyREI4NQorOjEwMkUzMDAwMkRCMTZDOUJCRTAyRjlGQjJGMjgzNzlCREJGMjZEQ0ZDNworOjEwMkU0MDAwRTdFNkIwREFBOTlGNEUwRUZGODFFNDcwNTIyMjc4NDA4NworOjEwMkU1MDAwRkZEMkZFNDdFMjUyMUNFNUEyQjUzRjc3ODhGRDg5NTRCOAorOjEwMkU2MDAwMzA1QUNGQUYwRTQ4RjExOEVDRUZBRjhFODhGNUVEOTNFNgorOjEwMkU3MDAwRTI4QTQ0RjQ2QTlFRjZFMEI4MzA2Nzc5NkFGRjZGMTcxOQorOjEwMkU4MDAwRkI5RkRBM0Y4RTFGMEI1RjI5M0Q5N0JCMjkwOTIwQjRCQQorOjEwMkU5MDAwRjgyMjI1MjhBRjJERkVCMUYwREJCRkU3NDcyNUI4N0YyQworOjEwMkVBMDAwODU2REE1REQ3NTA4RTcwMTg1RjhGN0MzRkE5M0M1QjgwOAorOjEwMkVCMDAwNkZFRkJBMDBBRkQwM0Y3MkY4QjEwMEYzQTVFMDZGMTEyOQorOjEwMkVDMDAwNzJGMDgzMEVBMDE3NzgyRTIxOUM5NTY5NzAwQUI4NUQ2OAorOjEwMkVEMDAwNTg4Nzc2QjczNzQ4N0RDOEE3QkYxNEYzNUFGRDdFQjQyQworOjEwMkVFMDAwNjVDNjRDQzRDRjFEM0QxMjQzRkNEQzdFQTQ3N0Q5OUY0MAorOjEwMkVGMDAwQzNGQTU3QzdCM0MzMzhDNUFGMUE4QjAzOTcwMDNDMkIyRgorOjEwMkYwMDAwN0FFQ0ZCNzk2QUNCQ0QwMUE0OUIwRkZCRjIwQjcwOUM5MgorOjEwMkYxMDAwREJBNzI2MzQ4NDczNzVFMjU1Q0QwMDNBOUI2NUY2NkFDQgorOjEwMkYyMDAwQzkwQzc0RjU2MURGODYwMEI2RkY1MEVEQjlGMTFBOUM0QgorOjEwMkYzMDAwNjc5RjEyNUUwRkUzQUYzRTUyM0FEM0U0NzQ0QUY0QkI4QworOjEwMkY0MDAwNUFFMEY3QTREQTMzNzMwQ0MwRDdGMjhENzI5MjA3RUYxMAorOjEwMkY1MDAwRjUyOUIzRTMxOUU0RTdENzI1ODVFODYwNzU5QjVCQzZERgorOjEwMkY2MDAwNzU4RTQ0MkYxRjc2Qjg1ODAyRTc1MTEzODRDRjkxREEzQgorOjEwMkY3MDAwN0REMEQ3NDJFRkZCMUYyOEJDMDFFREI3REJEQjVEMjQyMgorOjEwMkY4MDAwMkY2RTZGNzMxMzNEQUQ2RTkwRTI0QzRBRjFEQjBBMDE3OAorOjEwMkY5MDAwRUZFQUREMEFCRDNGNjk0QTI0M0ZBQ0ZEQkE1REQwREJGNAorOjEwMkZBMDAwQzlDMzU3QkQ4MkZBRkUwQ0M4MUY5NEJCMzMzNkZFNTAwRQorOjEwMkZCMDAwQkIwNEYwQjA2MjBCOTc0NzI3NzdFNzJFQkQwN0U1ODg4MworOjEwMkZDMDAwRDA5Nzc3ODg3MTZGOEIyQjM2RkU1OEQ5OUU2RERCOEYyQgorOjEwMkZEMDAwNjg1N0JFQUQ3RUZBNDhGRThENzU0OEQ3NUQwQUU5Q0ZDOQorOjEwMkZFMDAwNUIzNjNFQTY4NTQ4M0VEOUVENERFNEIwNDkwNTI5RkI0OAorOjEwMkZGMDAwRjIwNDFCNUE3MDhEOTRBMjI3OEI3RTZFNkQwMzdCMzM3NworOjEwMzAwMDAwMzBEQ0RFNkMzOTIyOTEzRDdBRDE3NjY2MUJEODk5MTM3QgorOjEwMzAxMDAwODdEQjk5OTYxQzg5QTA3RDU2OUU5MjIzOTZEQ0I4NEIzRgorOjEwMzAyMDAwODk4RTBEMDIxQ0JGNzY0NTJGQ0IyRjI3QjlGMTgwNTQxNgorOjEwMzAzMDAwOEI3NEEyRkYxNkVENEExNjUzNkE1MUJFNURBQ0JDQTA1QworOjEwMzA0MDAwQzU1QTdDMDQ3RkVGNzUwMDVENjVBMEQ3MTk0ODU3MzBERAorOjEwMzA1MDAwQ0ZDQzlFRkU4Q0Y0M0M0MzMyNjhCQzE0REREQzEyMjBFNQorOjEwMzA2MDAwQkVDNTQxMDE4RTY2OEZEOTg1NzA1RTAyMTM3QkFCQTkwOAorOjEwMzA3MDAwNjQ0QTFFMkY1NUE4NkY0Njk4ODExRTRFQUQ5NUUyODc3MworOjEwMzA4MDAwNEE3OTNCMUZDQTUzODBFQjFBNzhERURDNzU3OTdDOUI0QQorOjEwMzA5MDAwODQ3NjIxRkNBMUZFNkNFMzc2MzdCNDMzRkQ3OUY0REM1MQorOjEwMzBBMDAwOTRBMDJDNkEyRjdEMTlGN0U3MTIxMDAwNUEzNTZGOEYwNAorOjEwMzBCMDAwRjM4MDlENDUyODgxRjYwOTc3MzU3NThEMDVBMDJDODYwRQorOjEwMzBDMDAwN0UzMkVGNEZFRkIxNUQ4MEU0Nzg5Q0Q2OEJFM0UzMzgzRQorOjEwMzBEMDAwMTU0QTdDMERDQTE5OEI4RTk3MDlCOTAzNzJCNTUyMDUzMgorOjEwMzBFMDAwRkE2QTY2NTk2MUQ0OUJDRDZERTVFN0I1NUY2RTA4REI4MgorOjEwMzBGMDAwRTVDNzRENzU3NjNEMzBEN0I0Q0JGRjlCNjc1RjYyNkJGQworOjEwMzEwMDAwQkYyMDUyNkU3QkZGNjc4QkFFQjBCRDVGMUNCRENBNTY0MQorOjEwMzExMDAwRkZGMkFBMkZEOERBMkY2RDlENjFGNzkzN0U5QTRCRUJDMQorOjEwMzEyMDAwNTkyM0Y4NzIyNEI4NUYxN0YyRjIyNzBFRkJENDJBOUJCQQorOjEwMzEzMDAwQUU0RkQ0QkMwREZCQzRENkI5QzM4RjQzNzE2MjBFNUJENgorOjEwMzE0MDAwRDQ5NzI2NTc3Q0IyNDRGOEZDMERCMDA5RjcwRkZFRjQ3MworOjEwMzE1MDAwMzFFMTMxQzRFNzZERkEwQjc3NkIyNkJBRDM0NDNGMzRDMworOjEwMzE2MDAwOTdEMDVFNzJCNjNGQjExOEU2NDlFQkY3NkY5MjQ0NzRBMAorOjEwMzE3MDAwNzhBRTFGRjNGNEZDMTI0MDZFMDE0RUNFMDFENERGQzlDRAorOjEwMzE4MDAwOTIyNUI4NkZFRTVDODNERURGMjUyNzBCQjBGRTFCMzY4MQorOjEwMzE5MDAwQjQzNzFGRjdENzk3MkM0NkZFNjk1NkQ5NzM1MjBFRjZFRgorOjEwMzFBMDAwMEI3QkRDMzAxRjU4NDNBQzBERThBM0E1RUQ0N0M3RDExRQorOjEwMzFCMDAwOEU5MzhDMjA1QjgyNzU4RjJGODFGQ0NEM0E1QzFGMjYwRAorOjEwMzFDMDAwMkRCQzAzMUZGNjg2QTIxRjRBMDA4N0Q0REVGRjdCMDlCMQorOjEwMzFEMDAwREY3RjlGMTlBODg3NTlCMjI4MTdGRDQ3OUMyQTlEMEZBQQorOjEwMzFFMDAwOUI2NkIwNTZDNEQ3ODk0NjNCREVCQzYyMUQzRjk3NjRFMAorOjEwMzFGMDAwNkFGNzFDMzM3RjhCN0M3NDUyRDJGOUZBMDRCQ0RCMjQ0RgorOjEwMzIwMDAwRjMyQ0NFNjdDMUZENkVBRUFFQjE0RjA3QjcyMkQ3MjIwOQorOjEwMzIxMDAwREMzRjIyQjgzN0I0QjI2NEI2MzIzMkRDNTczMEQzMkQzQgorOjEwMzIyMDAwOEYxQTBFQ0Y1OTY2NjY2NTdBM0UwQkQ4MzVEM0YzQ0IyRAorOjEwMzIzMDAwRERBQzEyRURENTEzNTI1Njc4N0QyOTk2NDNGRkY4MzU1MworOjEwMzI0MDAwRTBBQkQ4Mzc3Q0UxQzc4REUxNzQzMTU1Q0VBNUY5OUI1MQorOjEwMzI1MDAwODVCRDVCRDgyRTI1QjJEMTNFNjUxRUIyNUY1OUNGNDNFNgorOjEwMzI2MDAwQTYwN0U1OUExMDcxMkQ2REQyNDk1QzNGRUI2ODM0OTM0NworOjEwMzI3MDAwOUVENDdBOTkyMUIxRjQ3NkU3RjZCRENENERFRDJENzk0NgorOjEwMzI4MDAwNjNDOTJEMEI5Rjk2NUNCMUU0OTc4NTU3RTdGODIzQzk3NgorOjEwMzI5MDAwMTkxQzRGQ0Q0M0Y4QTM5M0U0NzQzQUQxMDExRjEzMTBDNgorOjEwMzJBMDAwMUVCMzFBRjdDRkRBMzc3MDIzNjM5RUVBOTFGN0NEOTJGNworOjEwMzJCMDAwNTNEMDhFQTFGRjNGRDI3RTAxOUVDOEFFNzM4NTE5RTEyNworOjEwMzJDMDAwRTlEREUwRDBEMkE3NjBERDAzNkQ1QzVGQkY1QkM0QzgwMQorOjEwMzJEMDAwM0UzQ0QzNzZENTQwMEVFMkM3RTNBOTQwRkMxNEYyQTlFOAorOjEwMzJFMDAwNTg2MTcwNjgxRENBNTc5RjlBRTg0N0I4MEE4NUZFRjI3MAorOjEwMzJGMDAwMzJBRUJGMEE5OUIxRTM2QUY0RUZEQjRGMkVDMTc2RDY0NgorOjEwMzMwMDAwRkVFNDhBRkQ2OTg2RkQ0MTdGQTREOTM3NTQ4Qzc2OTIwQworOjEwMzMxMDAwMUJGNTFBQjQ3MzgzREM0NUI5NUNEOEZFRkU3RkEwNUU1MgorOjEwMzMyMDAwMkM3NEU4NDU4NDg0QTVDMzkxNTVCNUUzNkEyMzdERkNEQworOjEwMzMzMDAwOEYzNkEyN0Q2OThENEIxREQyRjczRkE4OUQ0NEZDMTZBOAorOjEwMzM0MDAwQjY2RkJFNUIwOUQ4QzY5NzNFNDYzQzA4Qjk4RDY2RDdCNgorOjEwMzM1MDAwQjk3OTRBRDE1RTk1MTNFRTQwOEEyRTlDNzA1OUZENDY4QworOjEwMzM2MDAwQTIxMzk2M0U0RkI5QUQ0RUY2ODRCM0VFMEU2QjM2RjkwRQorOjEwMzM3MDAwRkNFRTFGQ0I3MzVBN0RFN0ExMzdFNzc4NEVGQTc2RjI2MQorOjEwMzM4MDAwODFDMEMzQTdBMEQzNEQ5QzRFQjk1Q0IwRjhGNjNGOEI2QgorOjEwMzM5MDAwNEVBM0Q2QkVDNjcyRUYzODgyRkFCNTRCMEJDRjMyRDBGMQorOjEwMzNBMDAwNEUxOEZBMjFCNzEzRENDNjIxQTRCMzk4OTQ1NTA5RUYzRgorOjEwMzNCMDAwQTMxRDJBRDk4RDk2NUREMUJGRjZBRkI3OTRDMUYzMTM4MworOjEwMzNDMDAwQjUzMkY5MTEyN0Q2NzNCQURGRjMwMEI3NDcyREJEMUQwQgorOjEwMzNEMDAwMTU3QTFCRUQwMkM0MkJEODBEMDM2RTVFN0E3MDFDRkZBQworOjEwMzNFMDAwRkE5QjRCMjU4MERCNjMwQ0Y1QkJCMTdEOUI0MUY2NkFGNAorOjEwMzNGMDAwNEU1RDVDNkY4NDMyNUU3MUM4MzNDRTQ4QzlBNTY0MkNDMworOjEwMzQwMDAwM0Y2RjM5RUNEN0I3NzI4RDY1MTFCMkFGQTNBM0U3RkE1RQorOjEwMzQxMDAwNTNFRjdGMkM3M0ZEMzRBRDg0RTVDRDg2RjE5MjVCRTVFRgorOjEwMzQyMDAwRjA4M0QwM0ZFOUIyRUIzMUFCNUNBMzcwN0Q5OUY0QjI4RAorOjEwMzQzMDAwMTJGNDgzNDc2QTM3QTQ1ODdBNTVENzY4NUZFNjBGMUNBMQorOjEwMzQ0MDAwQzc3RDFBNjkxRjYwMDc3NDhBNjM5RUEzNDM4RTc3OThBRAorOjEwMzQ1MDAwODdDNjRGRkFFRDdBRThBNEQwNDMxNkZDOUY0MEFGMkUwMgorOjEwMzQ2MDAwMkMwNkZBRDgyQjY1ODZGQjIzMzE1RUY0MzkwMDAwRjY3MgorOjEwMzQ3MDAwM0JBQTMyMzM1MzNCRTdCQUZGNDFGNDRCQzgyQUNEQjdERQorOjEwMzQ4MDAwQTM2MkU3NkNEQ0VGNTg0QzA5QTdFRjg3NTVGRTg1QzJCNQorOjEwMzQ5MDAwRjU2N0NFREM4NkRDNDY2OEM3RDY2NzZFOTcyN0RBM0RDRgorOjEwMzRBMDAwNzY1RkQ2MjJGNEFGMDA3NTJBQzY2QjQyMzE3RERFNkNBMgorOjEwMzRCMDAwOEM0NzRFQ0Q5Qjg0M0VGNjhGNTFGRkMwQkNCQjIzNjcyQgorOjEwMzRDMDAwRjQxNkRGMjdDMjQ3NDE0ODE5MTkxRjZGQ0EzMkRGNDc3OAorOjEwMzREMDAwMDdERkVFMDE3NzBERTU2NzUyRjI1MEZDQTUyNUU2Q0UzOQorOjEwMzRFMDAwQzhDNzk2OUM3MkNBMjNBNzlFOTM0QzkzQjU1NTBGOTc1NQorOjEwMzRGMDAwMkJENkI4OUY1NDlGODE3Q0M4NTI0NkE1RUNGNjczRkEzMAorOjEwMzUwMDAwRUM2MkU5NzEwNDM5NTAyMkIzNjg1RjA2RkZGNDZBODUwMgorOjEwMzUxMDAwRTNBOTNGQzZFMzE0QUEyOTkzREU5QUE5MzQzMTA5RjAzRQorOjEwMzUyMDAwQjQyMUM4NDgxRUU0RTE1RTIzREYzNkIwMzhBMDgwRTU1MAorOjEwMzUzMDAwQjNGMDgwMEZFNTQ5NTA2NjA5RjI1QjlEN0VBMEQ5ODQwNworOjEwMzU0MDAwN0U2MDkwODNDNkY0NTE2NUZEODVGMDNDMzg3RjI1OURGMworOjEwMzU1MDAwMzNCMDA4OTdCNzNBRkNDN0Y5QzgyNDdERTExNjc4OERENworOjEwMzU2MDAwQzYyNjUxOUMzM0FGQzkyRUM3RERFODA3ODI3Q0Q0MUIyOQorOjEwMzU3MDAwMUNDRkU3Q0ZBNEYzMDYzNzRCN0IwRUVCQjg0QUYxMDcxRAorOjEwMzU4MDAwNEY4MzY5Q0ZBQTU5MERGMjY3RjVGRUFCNzYyRDg2RjExMAorOjEwMzU5MDAwNkIxRUI5Rjk2RDJDMjcxRkJDMjdGRjRCNTBENjNEQkVDMworOjEwMzVBMDAwRUI2NjJDNEI1RThCOEVDRDE0NEZCNTRBRTAxNDI2RDdCQworOjEwMzVCMDAwMDE3QzNFNjZCODczNDY2RTY3QUM1NzIyNjg1N0MzM0VCRgorOjEwMzVDMDAwNzYyMDNEMjQ2M0U1NTk0OERGQUIxNENFRkZGRDBCQjRGNAorOjEwMzVEMDAwMDBDNjY3RDQyRDVDQUVBQUYzMDE3OTQ0RkZEQzRGNkZCRgorOjEwMzVFMDAwNEVGOUQzRTQ1N0E4QzI0RjUyREExNThBMjMyNEY1MzI5NAorOjEwMzVGMDAwOEFCNzFDREEyMjZCNTg4MjlDOERFMTNDRDZGQ0JEMjIzNgorOjEwMzYwMDAwNEVERDI5RTJBRDRFRjg3QTRCODY4QTUxMEU5RTU4RkY2OAorOjEwMzYxMDAwMTFEOTg3OEE5RTE1OUUwREYzNzVGOTU5MDlDMTIxRTJDQQorOjEwMzYyMDAwMDVDRDYyRkY5MjZCRUIzREU5RjEyMjQ1RjgzOTFENDc2QworOjEwMzYzMDAwRTcwQzE4NDgwNzAzNEFEODZCMTBERjY4Mzg2RTc0Q0I2NAorOjEwMzY0MDAwNzQ4NkYxOTc1OTdBOThBMTNERDEyOUZDMUVDNTY3MzIzRAorOjEwMzY1MDAwRENENzZDOURDRDQ0QkYxNjVFNjkyMUVDNUZDNUMyMDkwNQorOjEwMzY2MDAwRUNERkRFOEZCODg1RjU5QUI3MjMxRkZDRTA1QTZFODczMgorOjEwMzY3MDAwOUMyOEI1Q0I2RDIwQTEyRUQ4NTMzNkFCNjhCRDhBQjQzQgorOjEwMzY4MDAwRDkxNDlDNzQxNUQyRkNFRjk1MDIyMTU3MzlCREJFNTE1NworOjEwMzY5MDAwM0JFNUIxNkQ0MDA3Q0ZCOUNEN0I5NDUxOUY4MDhGMUMyNgorOjEwMzZBMDAwNzJGRDA3QzAyNkI4NkY4RjRBNzY3OTZFOTUwNzlEN0NBQworOjEwMzZCMDAwRDQyNjkxNURBODlBN0M5RDMzOTUwRjFCNTE0RjZFMDRDMworOjEwMzZDMDAwQkJCMUQwMThDRTJGMUI1RjY3NjQzNzZFMDRGRThCOTU5RAorOjEwMzZEMDAwNjZFMjlGNkEwOTY1QzRDNUYyNEY1RTdCQUU4NDcxOEM1OQorOjEwMzZFMDAwQ0ZDQTNGN0ZBOTg4NzMzQUMxM0Y0MDY3MDlCNDYzMUVDMAorOjEwMzZGMDAwOTU4Q0NFMjlCMEJFRUZFQzZCRkNGMTE0NzhGREVDODExQgorOjEwMzcwMDAwMTVEOUQ3NDBGOUJERjhDNkVCQUY4MUY5NkY3RjdDNEY3MworOjEwMzcxMDAwMzZFRUYzQTNBRjAyM0Y5REM3OEZCN0Y4QTkxOTZERDg1NgorOjEwMzcyMDAwRjNDNEQ5OENCNTc2N0UzMkQ2NTcxMDNGQkRBNTcwRkQ1NworOjEwMzczMDAwRDVCRkUwNzc2RjVDRkRGRkY5RTk3Q0ZDRjRCNjAyRjRERAorOjEwMzc0MDAwMzlFRDRGNjc4QkEzRTc5MTZGQ0Q0NTRDNDM3QjBCREE4NworOjEwMzc1MDAwOTg0OEU3RDFBMEJERjRBOTU5ODRFRjc1MkUyRUM3RkM3NworOjEwMzc2MDAwMkUyRkI3M0I0MkZDQkQ3M0JDQkY1MTNGNzlGQzYwNDE3QgorOjEwMzc3MDAwRjk2N0U3RDM3NTNFRjNBM0NGODNERjQxRUU5MEJDMzkwMQorOjEwMzc4MDAwMzFDRUNFRjc5RDJFNEU3N0JGNzI3REUyRjVCREYzODUyQgorOjEwMzc5MDAwQ0Y2MTdENjBENzkzN0Q3NzlEQ0EwQ0Y0MDMyNkJFRTA5MAorOjEwMzdBMDAwMjE2MUYxRUFCODhENDc5MDI1QTZDMUYzNTAxRTdGRUY0NQorOjEwMzdCMDAwQ0UyMzc5MTk0NzNCNjY0OEE5QTRGRTI2RTM3NjdDNTNCRAorOjEwMzdDMDAwQ0RFNjIzRkM1QzYyQjA2MjExRjhDQjczRTA1RjY4OEZEQQorOjEwMzdEMDAwNUNFN0UzN0UwNThDQzM0MjMwRkU2QTZGQjQ1ODFENDUzQQorOjEwMzdFMDAwRTM5MTdGRjlFQUYzRkI4MjI4NUY1RUY3OTgyNUY4OUM2NgorOjEwMzdGMDAwMjVENTVDM0MxRkIwRUM4RTkxRjk1RDY1QTdEM0ZDQUM4MAorOjEwMzgwMDAwQTczNTQ2NzA5Q0JBNTRBMzc4MjU4QUIxMDBENEI3OTZFMAorOjEwMzgxMDAwNUU0QTcxNEExNjhFMUQ5N0IwM0U0QTY3MjhDNzk1NjA2QQorOjEwMzgyMDAwNjQzMUQ5MjE2RDZFNjMxNkQ0Qjc4MjAxMTUwQjEyREQ5OAorOjEwMzgzMDAwOTJEQzU0REE3QjQzMDE5NDAzNjA5N0UwN0IzNTM2RDcwMgorOjEwMzg0MDAwQTNBMUZGMzI0QUM2MjAzNDczQjc3RDQ0N0VGNzg5NjI1NAorOjEwMzg1MDAwMkU2RjNCQTYzMDNBQTcxOTc4RTBERjk2Q0E2OEVGQjQxRQorOjEwMzg2MDAwQkJFOURDMDJFQzQ2RTJEN0E4OTAxQkM5RTBGNDUwMEJBMAorOjEwMzg3MDAwRkExOTQ1NUE1ODgyRkFBNkQ4MkY4RTdGOERDQjEzRDNDQQorOjEwMzg4MDAwMzMzOTNEM0VDMkUzMUQyRDIxRUVFRjNBRURCRUNENUY1MworOjEwMzg5MDAwQkZFQzREMDNDN0ZCRTE2QjVEOTc0M0Y5RkE5MzNGN0ZBNAorOjEwMzhBMDAwRkQ3Mjc4RjdDNkI3NUVBQkMxQjhCN0JCNEVCM0M1MURFNgorOjEwMzhCMDAwRERDQzc4MTNFRDJERjA5OTEyMUFDQUU3RDhDOTI1QjhENgorOjEwMzhDMDAwOTkyOUJGNEU4QTIxN0VBMjM1RkUzOEFFMTc3OTFCRjFBOQorOjEwMzhEMDAwOTM5Q0EyRjBGMzQ1RjgwQjAxN0MwMTAxNUY3N0YwNTQ1MworOjEwMzhFMDAwMTVDRDEzN0JGRjNGMzJDOTdCRkE5QjJDRjQwOEI0REI2OAorOjEwMzhGMDAwOUM3NzdGMUNFNTQ4NkFCRTQ5MjQ5RkEyMjA5RkQwOEZGOQorOjEwMzkwMDAwOENGQTdBOTZBQ0ExRjlGQ0UxMDdCMUNGMUY2MTU3Mjc3OQorOjEwMzkxMDAwQTdDRTBCMEY2RDk5RDc4Mjc4OUVCQkMwQTMyMzlEQjkwQworOjEwMzkyMDAwNjM5QkVGNDYzQTc3QUVGMzhDRUZDMTRCMzEzNDY3OUIyNAorOjEwMzkzMDAwMUZGOEM0NURBMTk5NUVCMjdGRDk2MURBMEZEMUM0ODI0QworOjEwMzk0MDAwNUIwNzA1ODI3MTA3RThCRjZDMDVDQkQwREY4MEZFQjg0RQorOjEwMzk1MDAwNEU5MDY3Njg2RjVCRkQ4MDhDNEQ1Q0VGMTlERkY0NEIxOAorOjEwMzk2MDAwMjlERTJGRTIxNTU2QkY5QjYyMTI5RDEzREM1NDBFNkNBQworOjEwMzk3MDAwNTAzRTFDNEYxQjdDRjI0RkJFODZFNzJFMzE0NTU3MzgxOAorOjEwMzk4MDAwMUQ4NDJBRDJGMDg2N0ZGNkI4MTlBNzhCQ0JGNkQ5RjUxRAorOjEwMzk5MDAwMkVDQ0JGQjAxNERGQzcxNEEyMTcyN0JGOEM4RkRCREI4MAorOjEwMzlBMDAwNkZGMDlERkY1QzdGRjg3RTcyM0M0RjE0RkM2NkY1QjdBQworOjEwMzlCMDAwRTAyMzc4QTU0Q0YxNzVGQkI5Q0M0RDc1RjZGQURDNjFDNgorOjEwMzlDMDAwRjgzODNGNUNEMzU1RkJCOTREODNDRjNFREVDQ0EwRkQyQworOjEwMzlEMDAwRkRFQzIyN0I3RDAzQzY2RjNFQzlCQTFEN0NGN0Y0MTg0RgorOjEwMzlFMDAwRjMzQkVBNjdGMEVCMkRCOUZCQkUyN0YyQjczNDhFMUEzMgorOjEwMzlGMDAwNjYzODRFRkY4MkJERjNFNzAxMUQxNEVBRENFRTI4OUMxOQorOjEwM0EwMDAwQkZCMDIxQjcwNkU1MTQxMzc5MjY5OUVEOEY0MkExRUZENworOjEwM0ExMDAwOTVGNjk3OTQxQ0Y0NDc0RERFM0VCOUU0QUQxOTM5NzgxQworOjEwM0EyMDAwNUU1Q0M3RTgzQzNEQUFERTEzQ0IzMTUyRjY0OEJGNUE3NAorOjEwM0EzMDAwOUU4NTc4RkVGQ0VEOTFCQkJERTk3OTM3Mjk3QkU0ODE1OQorOjEwM0E0MDAwNTc4RDlBMENGNjg4N0E4RjY0QzIzOEIzOTY4MDNENTJBRgorOjEwM0E1MDAwOTU2RThGQjQ0QTI4ODNCMjk3ODAzRDQyNzY0N0Y0M0RGNQorOjEwM0E2MDAwQzRENzQ4NzZDOThGMkRGQkRFOUZEOUFFRkU4M0NBRjUzOQorOjEwM0E3MDAwMkNFODk5N0ZGQTJDN0E2NjlDRDdGQzE3RjU3M0IwMDc2RgorOjEwM0E4MDAwQTY5NTE4MkIyMzE5RThGMDAzOTVDNzNCMkNGREQ5MThGMAorOjEwM0E5MDAwNEMyODc4NzYwRTdBNTM3NUMxRjM2QkVCOTIyRkExMzhEMAorOjEwM0FBMDAwRUVEMDc3MDY3MUREQjAxRTk3QUJGNkQzQUZFNzhDQ0FDOAorOjEwM0FCMDAwRTE5OUE4RjIzQzk4OTFGQTdENkIwNDdGQzVBQjc5ODVCQQorOjEwM0FDMDAwREQ2MkRGRUZGRTA1RUZFODMyRkEyRkUwQzdBMEZGOTJEQworOjEwM0FEMDAwRjQ5NTZEQzNCOEUwOTk5ODRBRjEzQTc1RkVDQURENzM2MgorOjEwM0FFMDAwOTE5RUMwQ0VFNkY0N0M3RUZCRkFEQTIxRDlDNkM3RDMxQworOjEwM0FGMDAwQ0U2NkQ5RjhCRTlFRDlDRkU5NjY3OEVDRTc3NDhEQkE2OAorOjEwM0IwMDAwRkQ5QzZFNTZDODdFNEUzN0M3QjA5RkQzNUQ1RjY5M0Y0MAorOjEwM0IxMDAwQTc3M0RBRjczMzQ3QkJGRTdCREFGN0ExNDY0NkZDNzQ5RQorOjEwM0IyMDAwMDFGQjFFRjhFOTI2QTRBNzkxRjhFOUJBN0NFM0ZFNDg1OAorOjEwM0IzMDAwODZGREFFRDZCODlEQkFEQTFCNTk4MDc0MzdDREUwNzZEMworOjEwM0I0MDAwNUQzNEI2OUVGMjAxRjNBMjIwNkY0QTI5NkU0ODcxMkZCMAorOjEwM0I1MDAwMkJBRTY1QzVCREFDQkM0MDJCOUVFNThDNUY1OTcxMkY2QgorOjEwM0I2MDAwMkI4RTI1QzU3OERDQUFEOTEzNUQ4MUYwMzZCNzlGOTREQQorOjEwM0I3MDAwNTE4RUU4Q0ZDMTNDQzgwOEQ2MzlERUIwRjgxQzk3MDc5MworOjEwM0I4MDAwMkRFRDk5RTM3MkNFRjhEQjg4RUQzRTI1NUY3RDBFRkFEMAorOjEwM0I5MDAwNjEzREFFRDdEMjBGQzBFNzBGN0UxNjNFMDdCOUI1MEQxNworOjEwM0JBMDAwQzdGQjE3RTRGNzUxMjQ0RkJBNjlGRjJBMDBENzY4QTc2QgorOjEwM0JCMDAwQzMzRTY4MThBNzVGNzA3QTNGQzZFM0Q0RTM2RUUyREJDQQorOjEwM0JDMDAwOEJGNTdGMzFEMTQxODY0RDhCODIwRjhFRjFBQzY4QUM4NQorOjEwM0JEMDAwOTRGNDhCQzUzNzE2OUYzOEZERTM2MUZDRjE1RkNEM0Y1MAorOjEwM0JFMDAwMTdFOTFGMDNGRjdDQ0Y3NTFFN0QwNEZDRjEzQ0UyN0JDRgorOjEwM0JGMDAwNUEyNUM3QUY5MzFGMkNGQTA3OTI0ODQ4RDVCOERGRDE5MgorOjEwM0MwMDAwMDRCNkI3RTg5REJEMTgzNjExQ0U4OUMyQUYzOTMxNUExNgorOjEwM0MxMDAwMjNGRkUyQzRGM0ZGQ0VDRjYxOUZGNzg0Qzc4OTM1RTI2QgorOjEwM0MyMDAwRkI4OUREMDVGMTZEQTUyOTNFQjNGOEE5REQxM0ZEQjFEMgorOjEwM0MzMDAwMkIyRDBGQzRDQTc3M0NFQzMxNUZDN0U3MjFCNTJGODEyQworOjEwM0M0MDAwRkU0QTY4MzYwQjZGMzA4OENGOEVGMUU3OUM0RjdENjE1RQorOjEwM0M1MDAwNDZGMUQzQ0ZFQzk3RUQ3NUM1RjE3Q0E4NDUxQTVBQ0E0OQorOjEwM0M2MDAwQzg2RjY1MUFGMkFEMkFFNEM5OEI1OUQxOTM4OENGRTZBMworOjEwM0M3MDAwRTk5MTEyNEU0RjQzRTM3QzAwRDcyRjNBMTRGMkQ3M0UxRQorOjEwM0M4MDAwMkIzRjM1OEY4NEZGNzNGODg4MEVCOTZBODdFNzA3QTQ0NgorOjEwM0M5MDAwQ0IyRDk0NkZBMTkwMTZERjIwNjU5MDU3MDI1RjcxMTZBRgorOjEwM0NBMDAwMUU4M0VCODNGREZDNzdDNDYzNUUxNTkzNjgzOTgyOEZCNgorOjEwM0NCMDAwOUIzREU2MUY1QzlGQ0RGRTUwQjREQTE0MUYwM0RFM0MzMworOjEwM0NDMDAwMUFDQUM1NkFDMDVCRjk3MEJDOUQ3NEYxRjUzQkU5MkY1NworOjEwM0NEMDAwQTQyNjY1QTRGRjEwQzhEMTBENTJEQTM5QTlDMDhCQjU0RQorOjEwM0NFMDAwOUU5MUU0QjM0NUE3NjlFNzBEMjEyRDdEQkRGRjhGQ0FFNQorOjEwM0NGMDAwNjU0QjVFNUVFRTg5NEVDNjdENzA5QjExMjFGRjRDREFFRQorOjEwM0QwMDAwNUZBNzlDMTk2RTA3Qzk3NENFNzgwNkVDMUVFQzc2QjFERAorOjEwM0QxMDAwRjI3NURBNTkyRjFFOTZCMEE5NjcxNTJBQUYzRDRCODc2OQorOjEwM0QyMDAwMjdFQzhCNjdCM0E5MzRDRkU2NTM1OTdGMzY5N0NBRTk5RQorOjEwM0QzMDAwNjcyRkExNzJDNkQ5RDE1NDM2OUMwNTYwQzBDNDY5M0NCNgorOjEwM0Q0MDAwNUI0QUU1Q0NCMzU3NTAzOUVCRUM3ODJBNjc5RkJEOEFDNAorOjEwM0Q1MDAwREFDRDM5M0I4OUNBRUJDRTdFODFDQUVCQ0Y0RUExRDJGOAorOjEwM0Q2MDAwNjlGRjE4RUI1NTkyREY5NkZDQjJFNEJCNTM3RTVCRjIyMQorOjEwM0Q3MDAwRUZGRjlBRkM4RTM1NUM5NEZEMDNGQUVGQUJEQTc5RTQ0MQorOjEwM0Q4MDAwRjc0OEYyMDJGOEZBM0UyRDVENEVBNEY0RjNGRERBNjcyRgorOjEwM0Q5MDAwRTBFQkUzODI0RjgxN0ZERkMzMzg4QzA3QkMzODhBNTM2NgorOjEwM0RBMDAwODU3OTlDMkE2MDY4MDZFNjY5RUNDMzI2QjBBNUZFRDIzOAorOjEwM0RCMDAwQzg0OThDMUIzNDJGRjBFODMxODA3QkEwNTQyM0Y5QjQyMAorOjEwM0RDMDAwMkRBOEQxQjlEQjY2NDkxRkNERTU0MTMyODFGNEI3MzM2NworOjEwM0REMDAwQTREMTc4REJGRUE4NzgzMTdGRTFBNTUxMDUwMTlDQTcyRAorOjEwM0RFMDAwREIyRkVCRDhGRTVCQjlDOTdEQjdFMDM5RkUxNDE2M0U3OAorOjEwM0RGMDAwMDRFM0FERDhCM0M3OTNFRTg3RUY0N0UzMDBFMDBCQzQwRAorOjEwM0UwMDAwOUU2NjBDRjg3QUUzQThERjJEQzVGOTdDNTMxOUM1NjNDQgorOjEwM0UxMDAwQTAzNDMzRTU4QjdERDMyRENFQTdENUExMTBFMjY5QUJCRAorOjEwM0UyMDAwNEYyNjdERDBBRDdCNDQxRTZBNzJBMDA1RkREQzNBOTkxOQorOjEwM0UzMDAwNkQ4Mzc5Mzc4QzdFNjcwQjgyQUQ4RTJCREI1MTA2RjU1NworOjEwM0U0MDAwOUQ3NTY1NUVEQ0E0QTc1RkY5MjA0NEY2MDRCQzQzNTA3MQorOjEwM0U1MDAwQTA0Qzg4RDJDQzgxRkRFOUY0ODY4REYzOURCNzI5QzZBQworOjEwM0U2MDAwRDAzQTI0NTZFQ0VGQUUxRUI5REQyNkZGNDAwOEU5QTM5OAorOjEwM0U3MDAwNjNEMkU0Q0E1QjYwRkVERTQ5MDVBMzcxRkVFRDM1NDdGRgorOjEwM0U4MDAwNkRGODUwNzQ3QjNDNDVDMTgwMjNGQUUxNzU0OThBQUJEQgorOjEwM0U5MDAwNkQ5MDhEMUQ2NUIwQkU4MEM4QjcwNjMwMkIyMzY5Nzk0MworOjEwM0VBMDAwMDcxNjFDNEExOEQ2QzFFMTRBMjg3QzNEQUMwMDlFRTdBMworOjEwM0VCMDAwRDYyNTYyNDlCRTVFMTNFM0FFM0U1RjMyODRGRUEyNTI1NworOjEwM0VDMDAwNzc5QUUyNkQ5REZFRTQyMkFBM0JFMEIwQzZGRkFENjZBNAorOjEwM0VEMDAwRTUwNTcwQkVGMTA5QkU2OTlFRjRFRDQ1OTQ0NzVFQTUwNworOjEwM0VFMDAwRDFCRTc1QkI4NjE2NjAzREI2RDZDNTFFQ0YxMEJGRDlGNAorOjEwM0VGMDAwMjBGODc5NUJFNUY5RTMzMkFBQ0YwRTQ3QjdEN0VFMkY2QQorOjEwM0YwMDAwNUFGMEJDMkY0QTI3MUNDREFFQTE1MTk5RjZFRkQzQ0U2MworOjEwM0YxMDAwN0ZBMTc1N0ZERUYzNzU4RTkwM0Y3MEI5REJCRTBGMDExOAorOjEwM0YyMDAwMjFDRjlCQTc3QzNCODRFN0UyMTYzQzlEMTJFQzQzQ0Q1RQorOjEwM0YzMDAwRTdCRjBGQ0Q1M0I4QkNGRUJDRDdGQjNGNkREQ0RGNkJEQQorOjEwM0Y0MDAwM0NBRTAyN0MzQUJCMUNFMzhDNjMyNjg3MzA1RUVCQjM0RAorOjEwM0Y1MDAwRTJEMUUxMzhFNTI3MDUzMDFFNERCRDBDRDI0M0FBQ0U5MworOjEwM0Y2MDAwQzc1MDU0OTY0MDNFOTRCMzNGNENFMDNFMjlENTlBQTFBOQorOjEwM0Y3MDAwOTA5Q0NEQkNFRjRBNzgxM0U1QjUzOUY5RDM4MjlCRkUwRQorOjEwM0Y4MDAwMjYwQkQzODFDRTBGQkQ1NjdDREE1MDI3RjNGQjEyMThENworOjEwM0Y5MDAwRkY1NTk4NzUzRUNCRTNEMzU2N0ZCNTQyQTY3ODM0MDVERQorOjEwM0ZBMDAwQjJEM0M2NTE0MTBGRTMzOThFODI3MUVBQkNFMUYzN0Y4RgorOjEwM0ZCMDAwMzc0NThGRjZGOThCNzg3QzVDNTFCOTFGRjg5RUM0RjFCOAorOjEwM0ZDMDAwMTE3QjU1QTE3Q0NGQUVFN0I5N0M2M0M3MTlDOUVGQUVCMQorOjEwM0ZEMDAwNUE4M0NFNTU3NkMwRkZFODNGQzQ2QTdENzFBNDVCQzVBNQorOjEwM0ZFMDAwOTE4Rjc3QTY3MjdBMDhFNUE4MTUxN0E3RjlGOEY5MDA1NgorOjEwM0ZGMDAwQzVCOTMxNEY5MUUyRTYwNkFCQzBGN0REMDIzNDZCMUM2OAorOjEwNDAwMDAwRDU4QUNCNTdBRTk5ODRFREZDMDZGMzNDMDdFQkYzRDc4QQorOjEwNDAxMDAwQjFDNDI1MDA2RkQwRERCQUY1RjJEMjBDRjFGMENBMzU4QgorOjEwNDAyMDAwREY3ODEyRTZEREZERDRGNDVGM0QwOUY1NUQ3MkY4RDU2OQorOjEwNDAzMDAwM0E2ODk3RkZFNTNBQzJBQjMzMUVCRUFENTIzNjc1OTQ2RgorOjEwNDA0MDAwMEYzRURGMjFEQzU3QjBBMTg5MkU2RUVEOTE2MkY4M0M2NgorOjEwNDA1MDAwREJFNzNCQzhGN0JCMzVBNDIwNUU0MDRGMjI1RUJDQ0VGOQorOjEwNDA2MDAwQkNDODc0N0M5NzIxMUMzQjA3RTZDMUJGQkQ1QkU3MkQzNAorOjEwNDA3MDAwQzM3OTExNkVDQ0FGNUNEMTVCQUZBMTlFMDkyRUIxOUYwRAorOjEwNDA4MDAwNUZGODlCRUM3NTZGOTUxRENFQUQ2MkZGMkU0NEZGQ0VBMQorOjEwNDA5MDAwM0NDNDFFNzNERTIyQTREQjMzNDE4REExQkNEOUI4RjYyQgorOjEwNDBBMDAwRUExQjQ5RUU2RjU3RDhCOEQyMENGNEVCNTg1N0E3RTY4NQorOjEwNDBCMDAwMjJGRERGNkRENEVGQUQ0MEJERDFBMDUxNUU0Rjc3REM2NgorOjEwNDBDMDAwMUJDNzE0RUZFRDc1QTk3MzEzOUJGRDZFNjhGQzFDQUI0OQorOjEwNDBEMDAwNDY0RUI4MzNEOUYxRTI3QzJDMjA5RTMxQzczOTU4RjdDRgorOjEwNDBFMDAwNkM5OUVDOUFFRTFFM0U4RjM1NUU3N0RENUIxRTk0MTM2NQorOjEwNDBGMDAwMjM4REZCRjQxOEYzODgxQkVEQTk2OERFNDVEREJCQjgwMgorOjEwNDEwMDAwNkZBMzhCRDNGNTE0MkQyRTk1QTIzREFBMkY1QzA0RjUzOQorOjEwNDExMDAwQ0RFMzY0QjI4Nzk4RjBGRkJBQUZFNUU3ODkwRjZCODYwRAorOjEwNDEyMDAwRUQ3RUM1QTYyOTJCQzk2RUI4QzlBRDBCRkUwMkJCNzBDQQorOjEwNDEzMDAwNDJFQUJFQzUwMUFGRjk4MjFCOUVBQkNGQzE0ODYwMEZGQQorOjEwNDE0MDAwQkM5NzFCQkUxMUU5QTIzMUY4MTFEOTUxQjcxNkM5M0E3MworOjEwNDE1MDAwRDJENzhBM0Q4REI0QUVDREJBQ0MxMjY4RjdBQUFENjQ4MQorOjEwNDE2MDAwQTQzNkIxNTYxM0NGMDMzMDUxMTNFOTZFMEVCQzkxRTk1QQorOjEwNDE3MDAwNUU0NEYyNTAyN0MwMzk2NzVDRTFBNDZENTA3MzE3QjVGNworOjEwNDE4MDAwNTIxRTRCQTMyMTkxMUY3NjFENjAwNkU1NDE0QjcxNDRFMQorOjEwNDE5MDAwOTVBQUIwREZGQzc3RDBFRTlCMTMyQzk1RDFERkJGNEVGNAorOjEwNDFBMDAwNjUwRDVBOUE3RDBFNzZGMTMxNzdEQUJBNEU4Q0RCMTNCMworOjEwNDFCMDAwOTRBQjcwN0U5ODA3RTc1RkU0QTFGQjA0NkVCNDhGQUYwOQorOjEwNDFDMDAwNENEOUM3MTMxMTkxNjk3NkYyQUZEMUE4QzQ3ODQ2NTE4MgorOjEwNDFEMDAwRTJGNzk0RTdGREZEQTQ4Q0YzQjIxNzU4RjUzNkU5OTNBNgorOjEwNDFFMDAwRkJENUUwNUZGRTEyRjczM0NFOEM3RTRDMzVGQ0FDNzExNAorOjEwNDFGMDAwODlBRjZCNjI5RkM0QkQ5NUMzOUVDODZGNzA3QzJCMUUzOAorOjEwNDIwMDAwMzA1MUUzRjc5QjM3QjdCMDcwMkMyREFFQjJGOUY5M0ZDMAorOjEwNDIxMDAwM0Y4RUY2QUExNTdGMzk5Nzc3MjdFMEI0RTBERTI0QjEwOAorOjEwNDIyMDAwMkNEMkYzOUVFODFGRENFOTdFMzE0Qjk2Q0Q5REYwRjk1MAorOjEwNDIzMDAwQzE5RDIxNUZDRTU3MEJGQzM0NTZGMDRGNUU2RDg1MTc0NAorOjEwNDI0MDAwRTVFNjU4Q0NGN0MxN0Q2OEU3RjJDNDg0RkZEMkYzN0Q4MAorOjEwNDI1MDAwMTRDMTdDQzE3MDZCQkY2QzBDOTc0QjhBQjgzNzA1NzQ2NgorOjEwNDI2MDAwMkRBMTFERUJDQzA3NTIzMEVGNjdFMjcwQjk3MTQwRDA0MQorOjEwNDI3MDAwRkYyNTFFOTFGRjMzOTk0REU2N0VCOEZERkNDQUJGOTQyMQorOjEwNDI4MDAwRUI3REQ2OUE5N0YxMUVFQUY3ODVERTdGNTFGODk1MDkwNgorOjEwNDI5MDAwNzFBRkYxQThCOEI3RjhGMjNBODNGQ0JDNTdENjU1NTJDMworOjEwNDJBMDAwMzlCMDJFNENDRjVGNUI1NzQ3NjVFQTdFMTU5RjM3NUY2RAorOjEwNDJCMDAwRDg2MTJBMDZENUYwOUNERkM3RTIwNkMwRUIxRkI1NjZDMQorOjEwNDJDMDAwQTAxNEY5QkM4RURGRUZFRTZFM0FCNUE1OUNFQzQ2N0VFRAorOjEwNDJEMDAwNkVCMUI5QTgzQTUxODhGRTBCQzA5QTBGNzU5N0FGQ0Y0RgorOjEwNDJFMDAwQzNFRjc5OTk4Mzk1MDU1Q0NEMjFERUZGQUJDRjJCOUM4NQorOjEwNDJGMDAwNzRBMTVCRkJFRkQ4NkYxRjZCNjUyOEVGMDJBNjdEQkYzMworOjEwNDMwMDAwQjNDMzRFRkY4NkVGQkZBQkU4RTJGNkJEMTdGRjAxRkI3QworOjEwNDMxMDAwRjgyNTZCREZBRjY2NTdGM0VGMzM1QzlDM0M0NjNFQUE1MworOjEwNDMyMDAwMTQ3MjYwMENGMEQzMDFGMEU3REQwQUNGNTdDRkU3NzlDNAorOjEwNDMzMDAwQUU2Njg4RjM5QkE5RjI3QTZDQkM2OEVGRTIyNEM0MDZFRgorOjEwNDM0MDAwRjI3ODVFN0IzMTNGNEZBMDdFOTg1NzhFRUYzMTJDRjk4QgorOjEwNDM1MDAwMDI4RjZGQjExQzkxRkYzRTU2OENCMzVBOEMzQkIxOUFDMQorOjEwNDM2MDAwRUVFREYyRjM3RkQ2QTc2M0U5NjM0OUFBRTcwMjFGNjA4NworOjEwNDM3MDAwMTk2NEFEMTIyMjczMEMxQjI0N0ZCQjU4MUFBMkJBMjFGOAorOjEwNDM4MDAwRTk1OTU4MkY5M0MyNjVEQzBGOEY5M0ZFMkM1N0NDNkZFMQorOjEwNDM5MDAwNTcxMEYyMjMzMjhGMTcyNTE3OTMzRDA5N0ExOUU1NjJEQQorOjEwNDNBMDAwNUM4RDJDNDJGOUIyQTE0RDBCMDMyNkNFRTVDOUUxRkQ4RgorOjEwNDNCMDAwMzkyQzM3RjRENTBDRTBGOTQ3MkMyNjkzRkM1MTlFNjMzOQorOjEwNDNDMDAwNTlGQTk1NjRFRjkxRkVEQUIwM0VFRjYwMzZFNTZCMjQ2MgorOjEwNDNEMDAwMjlDRjdEQkZBN0Q0QTZBNzI2RkExNjVFQTdDMzdFNkRGOAorOjEwNDNFMDAwMTRGOTc0MkVFOENGMzJFNDlGNUFGOTc0MzA2RTQ5QTY1RQorOjEwNDNGMDAwRjc1NkI5RDFBRjJEQ0FFNEY3M0ZFQzkxNDQzQzIzMzlDRAorOjEwNDQwMDAwOUFFMjgwNjI1RkUzNTNFNThDRjcxOUY3NzlCODVERjNDMAorOjEwNDQxMDAwNjg2OTY2N0I5QUIxMDc2OUJDRkQxRUREMzE2RUIyODVBNQorOjEwNDQyMDAwRUVDRkU4M0NCRTkxRTUzMjI5QkY2NjYzMUJCRkE3NkZBNAorOjEwNDQzMDAwRTE2RjM0RDhCNTY4MEY2RkVDOUIzRjFCRjkzQjU2QTk3MQorOjEwNDQ0MDAwNTJCRTM5QUNERjg3Rjg3Mzg5QkNFNDhERTM4MzA3QjNEMAorOjEwNDQ1MDAwNzk1Q0EyMTRFNTc0M0ZFMkFGMzYwRDdGQzE5NTREODhCQgorOjEwNDQ2MDAwQkY4RTU3Nzk3RTJGRTg3MzFGQ0I5MDZGNjhFMUNGRTU0MQorOjEwNDQ3MDAwNjM1RkNDRjRERTJBM0I0NjY5OEIzMkREMUIzRUVBQjEzQQorOjEwNDQ4MDAwRUNGNDY0MjlBNzEzOEVCRkFDNkJENTQ4QTZGNjA5ODE1RQorOjEwNDQ5MDAwRUY5MjMyMTYzRDFGRkVGQTNEQkE2RDVDRUJEQzU3MTkwOAorOjEwNDRBMDAwMjFERTI1RjkxMjE0RTc5QUE4NzEzQjYzQzM2MjhFRDcwNworOjEwNDRCMDAwMERDRjVGNzMzQzlBNzYwRUYxNEIxQzcyNEEyQTFFNkMyQworOjEwNDRDMDAwQzU4RDJEQkREOUVFODlGRUEzNjc1NDRBNUZCMkVGMzM4NworOjEwNDREMDAwOTJCQkVDMDVDRjQxRENCNzBDRTcxMEE3M0NCNTE5Q0U3OQorOjEwNDRFMDAwMjE3QTJFRUVGQjJFNjMwNURGMUVEQTcyNzQxRUNFRjNFOAorOjEwNDRGMDAwNTc3NThDRUNBQkMwMzM3Q0RFNUM5REM1RTU1MkZDNEU0MQorOjEwNDUwMDAwODEyOTYxOUNFNTlBODg1RThGRjY5QkFCOUQ5OTk4M0ZDNworOjEwNDUxMDAwMzM1NkM0NkQwQURCRkIxNEE0OEIyMEVDNjVBMTg0RjczMQorOjEwNDUyMDAwOUE5MjMxRkM5RUM5RDhERDhDRkM0NEI1NzBFNkFBRjVBMAorOjEwNDUzMDAwODYxMEE1NjlGOTUxMEExQkVBQTdGNUI1NkJDNkUzQTU3NAorOjEwNDU0MDAwMDRENjRGNTEzRjhDMTFFRjAzRUQzMzdGODU3MjczNENDRQorOjEwNDU1MDAwMjQ0QTc5QjhEMDJGRTY0N0ZCNDJFMEIxQzBDQkY5NzZDOAorOjEwNDU2MDAwNzk0MzU4OTJBMDdEMzA5OEE0RjhBNDUzQUU4RjAxRkNGMworOjEwNDU3MDAwNUM5MjY2QkYwNTQ0OURBREUyNzI1QTg2RkY1MENGRTc1QworOjEwNDU4MDAwNDdFQzcyN0I5Q0UzNUU3NEMwOTFGNzkyRUIxNUY5RUVGOQorOjEwNDU5MDAwOTZEQzJFRTI5QjNBNDExRDk0MzNGOUU1MjlGREVBODAzMQorOjEwNDVBMDAwMEY2NTU4NzVBQTdGQzBBQTdGNDZGODgwMTA4ODlFMkQ5NworOjEwNDVCMDAwNzhGMDJBMjVDQUREM0QyRUZEMkI0RkExN0VBRUQ3Nzg5RgorOjEwNDVDMDAwMUU5OUI4MkY5NzJERjBFRTQzODcxOURBMEQ0Qzc5QzU1NworOjEwNDVEMDAwQzQ3REREMTFFNkRGQTUzOTMzNzUxRUY5QTFEOTc1RDY4NQorOjEwNDVFMDAwN0QzQTdFNUYxOUNBMThDNkU5QjJDNUZDRDZCREJBNkM2MQorOjEwNDVGMDAwNjZCQzU5MEVGNDkwNkQyNkU5NUU5RDZFN0Q1N0MxNjREMAorOjEwNDYwMDAwMDlDQ0MzRDE3RDMyRTVEMUU5QkUwOEM5QTc5RTA1MUVGQworOjEwNDYxMDAwMURCRkYzQTE4OTdCN0EyRTcxN0YzQ0RCM0M0REY3RUIwQworOjEwNDYyMDAwQjI4N0FEOEZERkFGQjNFMENFQ0VBQTdBQjNEQ0IwQ0QyOAorOjEwNDYzMDAwQjMxRUUzREJCMEY2RDExOUVGRDdENTcxM0YyOURCRTQyOAorOjEwNDY0MDAwNzE4OEI0RjFFOTdFREQ4RUE5NjVCNkZCNzUzNDBGRkE4OQorOjEwNDY1MDAwNzE4MkZFQUM3Qjc2NEVCOENFRjVBQkM5NkNBNzREMDgyNworOjEwNDY2MDAwREJFRDg4MEJEREFGNzM4NUVDRUQ3NzVDMjAzRkVCMTM2MgorOjEwNDY3MDAwREZBRjEzNzgxOEQ2Q0U2MTBGQkEyQzNCNzQ5NENDNzA5MAorOjEwNDY4MDAwRkZDRTM0QzhGNDFEOTFEQzhGOTI5MTE5MTJDNTI1NDhENAorOjEwNDY5MDAwREY1Qjc2NUUxRTFGRUFCRjlEOUQ5NzY3RTVGNTNCRUNFRAorOjEwNDZBMDAwM0NDQjdFQ0I5RDZEQzdCN0QzRUU3MzU3NDVBOENGQzUyNgorOjEwNDZCMDAwREE3OUJCRjAxRjQwMkYwRjc5MUQ3NjVFNTM2NkZBNzBEMgorOjEwNDZDMDAwQ0E4QjdDMzZCOEZCNEExOEU3NjhFRDhGMTRDQzU3REJGMQorOjEwNDZEMDAwOTVDQkJGN0ZDNDg2RjkwNzZGQ0RBMDdERjFGMUVGMURBQgorOjEwNDZFMDAwRUQ5QUQyQUZFMkY3NkY3RUI3OTQ5MTlENjRDNTExREM2RAorOjEwNDZGMDAwMDJFNjVENDVGMjdBMEFCQjc3M0Q0NEY4MDkwQTNDMzQ4QworOjEwNDcwMDAwRTEwN0M4NkEwODU3RjE3MUM0NjdBNjE3RjMxNkYyOUI1MAorOjEwNDcxMDAwMTgzNTJBQUMwOEQzQkVFMzY3MDk2NEJBQjQxNTUzNTFGRgorOjEwNDcyMDAwOEZENzIzNTZEMkYwMzRDMzYzRkY0RTQwQTM5RUVGRDhGOQorOjEwNDczMDAwNDdGQjNFOUYzQjA3N0Y5MDdGNEY2MThFNjFERjc3Q0JDQQorOjEwNDc0MDAwNEY0MjczMTZFN0JCQkVEMjRFMDcyN0E0QzhBMDAyNUQzNgorOjEwNDc1MDAwOUVDRTJBMTVGNkNGQTA4RUZBQjI3QkFEOEJFQ0M2ODcyMworOjEwNDc2MDAwOTY5NDZEQkQxMkZERDVBMEFDRjNFM0M4QTE3MTY4MUY4RQorOjEwNDc3MDAwMzUxRjM1QkQ2OEU3NkQ4RjRDRjc4RTgzRjcwRjc1MjhCMQorOjEwNDc4MDAwNjEzNDBGOUY1QUIyRTY1NUFDQzc3NkJCQzgwRTdBQUEwMQorOjEwNDc5MDAwNkY1RUMxOEEzNEJFREJCQzdCQzFDMkM1RjhCRUMzNDVGNworOjEwNDdBMDAwRkE3REM1OUVGQjA2NEE4M0Q4REY1NTlCRkVCREE5OTZDMAorOjEwNDdCMDAwOERGN0U5RThCN0JENTFFQkNENjhDNzVDOURDNUVEOTJCQgorOjEwNDdDMDAwOEQ1QTkyRTI0RjFCRTc2OTBDNURBRThEMjVGNUEzNTcxQworOjEwNDdEMDAwQTBGRDcwOEQ5NkYxM0VGOTVENTk2RTdFOUZDRkQ1MkE3MgorOjEwNDdFMDAwQTE3QzJGOEM2NkJFMTc2MEI1MUI1QkYzNUIzQUM3MDhENAorOjEwNDdGMDAwQ0U5NjE5RkE3MUFFRUJFN0M5NTg3RjA4RjY1NTk3NTI3NQorOjEwNDgwMDAwRjQ5NDI3RTg2OTYzRDFCRDVCMkI3MDdEMDM5OUVGMUQ5QworOjEwNDgxMDAwNUFFNURBQUM3MTlDNEUyMzc2M0U3NzE1MzY4REM2NzUxNworOjEwNDgyMDAwQkJEQzkxODE3QTI0QUU0MjU5QzdCODg4Q0JERDFBQjk3NgorOjEwNDgzMDAwMTlFREQxQUI1RDQ4RTE2QzczQzcwRjFCMTZFMUJFODQ2NworOjEwNDg0MDAwMjU1RDgyNzk4MjZBNjQxNUQxNTkzMDhCQTEzRTY4NTgwMgorOjEwNDg1MDAwMTI2OTQ1QkMxNDgyRkVDM0QwNUU2MUQxMkZFOTlDQTJDRgorOjEwNDg2MDAwQjA0RTYzNUVBODdCOTZGNDI0NUNGMERFNTMxMUJEMEE2MworOjEwNDg3MDAwRjFGRUQyNUFGRTlEOTdDMkEwOEZFRTA1MTU0NkY4Mzk3QgorOjEwNDg4MDAwNUM2MUJCOUJBMUM5QjAxMTVDNjAxN0Y5MDcxMkM1ODlCNworOjEwNDg5MDAwOUM3QzY0QURBQjc5Mjk5N0UzQkJEN0ZFNzY1NEE2RUYzOQorOjEwNDhBMDAwQ0Q1NDY0OTUxMTVFQkQ4NjdEREQxRUQ0QkIzMENFNTRFMworOjEwNDhCMDAwNzM3MDA5RTFCQkM2Q0RFMkM0QkY2RUEyRUY1REI1MkUzOQorOjEwNDhDMDAwODI2QkQ3OTQ5MzVGNDFCODdFRjdGQjJDREFFRjZCOTkzQworOjEwNDhEMDAwMjkyMTVDRjk0M0ZDOUNENTlBMjdCRjY5NTBFMUYxNzAwRQorOjEwNDhFMDAwQ0U4NzRFQkVCM0Y4QzEwOURGQ0VEOUYzRTgzQzZFMzNCNAorOjEwNDhGMDAwMUI5QzhGRjg4RTlEOTU4OThFMzYxN0FERjFBNkM3NDUwNgorOjEwNDkwMDAwNUIwNUZEQzEzRTkwN0M4OUU5OENGNjVCRjk1N0I2MUVDQworOjEwNDkxMDAwRjM2MTM3N0UzMTUyODlGQ0YxQjY5N0RGNUJCRDZGQTkzOQorOjEwNDkyMDAwNDZFQjc4NjhBRTQ2RjFDNjg3RkNBRDQ0RjdBNzM2QkFDOQorOjEwNDkzMDAwQzI4NzEwMUM1NTVGODhGQkI5QkJCODIyOENGMUI2QkY4QgorOjEwNDk0MDAwQzNDM0U3MzRGRjYwRjdBODJGNTUyMjNFQkZGODg3MkM3QQorOjEwNDk1MDAwM0VDRTE0RDUxQUU3Njc0NEVGQjU1RTgyNzM4NkQyRkU2OQorOjEwNDk2MDAwQjMxNTY4ODcyRTkxMjc1M0VFRjRBQTI1MjRCRjVDNDIyNQorOjEwNDk3MDAwOEVCRkJDMjRBRjFFRkQ5NEMwMERDQjE5OTc4NzNDNEU1MworOjEwNDk4MDAwMTE1ODVCQ0RFRjMzMzhFNDdFQTI0RUREM0Q4Mzc2ODk0RQorOjEwNDk5MDAwQzc3RkVBODVCQzFCN0JDM0Y0N0E1QzY3QkREMDBCQTZERQorOjEwNDlBMDAwOUFGOUJCOENCOUEyN0RFMTUwMDQ0REIyNjFGMTlGNUNENAorOjEwNDlCMDAwQTEzRkM2RUU3NjNDMTc3QTIxNzc1ODFDN0NCMEUyNjZBMAorOjEwNDlDMDAwOTAzRjVGQ0ExMjc2RTQwODcxOUY1RDRCRTYxMTNGOUNGMQorOjEwNDlEMDAwMDE3RUEwQjg3NEM5NDlBMkZGMThDODA5QjQ5QkRGOTAzMgorOjEwNDlFMDAwOTJBMTE1NjlFNzYxRDY3N0U2N0UyMkUyNDExMUIzOTQ4MAorOjEwNDlGMDAwRjI4NERGMTJGMUEwOUY4QUVGQ0VCRDIzRTI0MUM3NDVDQQorOjEwNEEwMDAwM0NFOEU3MjIxRUY0MEYxODBGQzJFRjg3NzkyRkE3N0QyRAorOjEwNEExMDAwMUI1N0Y3NTEzRkM2NzE3NkQ2MkNGMDE4MzBDRTU0N0QxNworOjEwNEEyMDAwRjAyNTA0RjI4QkU2QTA0RkU0REYxM0JDNDE0QjBGQ0QyMQorOjEwNEEzMDAwM0Q3RjlDMkE4MTcwQjkzMTJFQzVFMTdDNTk3QzhGRUU3NworOjEwNEE0MDAwMTUwMUQ3ODA4MEVCMzUwMTk3QTUwNzUxNkUyMDlEQjFFOAorOjEwNEE1MDAwQjFBQTlFNDkxRTA2RDU1NjA5Q0Y3QjUxNUVGNDA3NDk3RgorOjEwNEE2MDAwNUVGMDNDRjFFMDFBQzk5ODMwNUM0RUMwNzhBM0QzRURGQgorOjEwNEE3MDAwNzQ4QkZFNEU4REYyMTExRDNCQzc3RjM0OEJERjNCN0M2OAorOjEwNEE4MDAwNjlFREFDRkQyQzk4MjY4RjIyMEI1NzIxRERFNUMzRkU4NgorOjEwNEE5MDAwQTAzQzhBMzY3MTM5MUVDNTdCMTc2OTcyRDU4QUE3QzFCOQorOjEwNEFBMDAwOEU4NDQ5RUZEQ0MwRjEzNDkyN0NCOTkwNUMyOTc0QzhFMworOjEwNEFCMDAwOTVERDI4NTdBMEJFMUJFNTRBMzA1REFFQjRGNkUzQkFEQgorOjEwNEFDMDAwODMyODU3NTg0QTBGMDUyMzlGNENBRUZDQ0M1QjY2OEI1RQorOjEwNEFEMDAwOTM1OEYyRTU2QTYwNjNCMjEzQzNBMDRGRkQ5RjVFOUZENworOjEwNEFFMDAwQkUyREU0QzQ4NUY0QUE5NUZGMTEzMDE5RTlGNTNEOTg2RgorOjEwNEFGMDAwMTc4MkZFQ0M3ODQ2Rjc3MDE0NzM5MEYyODk3MkRCNURGMgorOjEwNEIwMDAwMENGMzQxQjY2Mjk3RDFFOENGMkNBNDdDOTAxREYzM0QwNQorOjEwNEIxMDAwM0FEMkM1QzM1MjIyODRGOERDMjdGNTc4RjlCRUU4RkQwNQorOjEwNEIyMDAwNjgyRjZDOUJDMEUzMjQzQkZFNzg4RjE3RURFQzk3NkVFQgorOjEwNEIzMDAwMkYwOEUwMzk0RTZGQUU5NTA3QTIyRkJFMTVFQUE3MUFDRgorOjEwNEI0MDAwMTlEMUM5OEEzRDJCNkM3OTBGM0ZDRkNBMjM3Q0U0QzZBQgorOjEwNEI1MDAwNDBGRTAwM0UxRUJFOURFQjFGRERFMDc5MjA1MDY2Q0M3RQorOjEwNEI2MDAwMDM3MUZCNDQzQzQ4OEQ4NTkwM0VCNjQ5NTEwRkM1NjFBOQorOjEwNEI3MDAwMUE2NUQyNTNCRDYxOUVCRkQyMEI3RTM5OUUwRkY2MzZBOQorOjEwNEI4MDAwRUM5QzgzRkE3OUMzQUQzMkEzN0NGMUNBOUU3QjUwQ0VGNAorOjEwNEI5MDAwNzQ0QzU4NjgyMDVGQkE0Njk3QkQ4OUU2RjgwNjlGRUNDQQorOjEwNEJBMDAwNERDRjIzQzVFMzA0QUQ5QTlGMUI4QUQyQ0MwMTkwMzcyOQorOjEwNEJCMDAwN0I0REUzN0NGNzQ3NTVFMUY3NjE3RkY3NzlGMkUwM0IwNgorOjEwNEJDMDAwNzM0M0EzMzE0RUQwREJCODMwODRGM0Y2OEU4QTg0RjI3RgorOjEwNEJEMDAwMjgzRjY1MENEOTAzMUI0NzZENUE4Q0YxQTc4RUU1MUE0NworOjEwNEJFMDAwNEJCNzkzODZDRDE3QjREQkQ3NTY5QzUxNkRFMEY5MjNCNAorOjEwNEJGMDAwMUQzMkY3MkY3M0M1RjkzNEYwNTUyNUUyMkQ3RDlEMDg0MAorOjEwNEMwMDAwQTc2QUYyRkMxMTVDQUZDMkQ3NEJERjM3Q0Q2RDAwRkY1NgorOjEwNEMxMDAwQjA4QUFGMUZGRDU3RERBNzhGNDZGOUExMzZGMEZDOTE5MgorOjEwNEMyMDAwQ0Q3RTdEMzFGQThENEUzOEFDRjFBRkNEOTY2Q0ZFOTFENAorOjEwNEMzMDAwNkVFNTJERDRBRkUxRTc4ODQ1M0M2RkExRDc3NUZFQkM4QQorOjEwNEM0MDAwODUwRTIxMEYyREJGNzEyNDdDQjgxQ0U3RDRCRDVFN0I3RgorOjEwNEM1MDAwMUNEMDgyRTc0QTUxM0FFMTE4Mjk1RkUwRDNDRTdGQTEwOAorOjEwNEM2MDAwNzU3RkRFRjM4RDk0NDdCMDI2NUJCMkREQUZDOEI1RjIzOQorOjEwNEM3MDAwNTkxQUQ3ODQ1MDRFNThGMDZDQkU0MEZFQzhBNzg1QUI3OQorOjEwNEM4MDAwQjk5MUI3RkZCQ0Q3RkIzRjZERENGQTZDQUUxRjgxNEYwQgorOjEwNEM5MDAwMDdGMDFFNjVDN0M0OTkyMTk0NDNBOTc4Q0NEMDQwMzk0OAorOjEwNENBMDAwREE3M0UyM0VBMzk1M0ZFMkQyRjkzRjU1OTU3RkU3NEU5NgorOjEwNENCMDAwQ0UyRUEyRUYyQ0FCRDM3OUZFMDhGRDY1QzgwM0Q5QzQ3NAorOjEwNENDMDAwRDg2Q0Y0Nzc1NDExQkY3MUYyRTk4NUUwNzdFNjhEREM5QQorOjEwNENEMDAwRUMxMzdFNjNENDMxOUZDODEzNjE4RUJDMTMzNUM0RjNDQgorOjEwNENFMDAwNEJBQzdDOTIyRTA5RDYxNzRDRTU4MzhDMzhBRjAzNkYwMgorOjEwNENGMDAwRTM4NURDN0ZDRkQxN0ZEOEJBQzNGQzdFQTU5NTdGMzIxOAorOjEwNEQwMDAwMkM4RjY0QUFCQzFGQjc2MDU4MUU4OUM4NDdFOUM5MzVGMworOjEwNEQxMDAwRTIzQzRGOUNFNzk1QTBEQUM0NzhERUIwM0M5MkE5RDM4MAorOjEwNEQyMDAwNDNGODREQzk2OTI1QTJERjBEOENCRUJGREJFM0U1RjU3NQorOjEwNEQzMDAwREUzOTJDOEVERjNCRUJDNTNBRjI1MzJEQTNCQzk2NjFENgorOjEwNEQ0MDAwRjkyNTUzRDcxMDlFMzQxNjU5QzZDRjc3Rjg3OUJGODUwOQorOjEwNEQ1MDAwMDc2NzdFQzkwNUU5RUQwMjc5MjQ0MTlGRjUzRDhBMDg4MAorOjEwNEQ2MDAwQ0REM0UzMEZGRkE0OEVFMDkzRTkzQ0JFRTA0QkM3QzM3NQorOjEwNEQ3MDAwRTlFMzVGRTJFMzcyQjI0N0U0RTFGNUU0REFGM0YxRUU4RQorOjEwNEQ4MDAwMTNGQjUyMjFEQTM5Rjc1NzJGRTI3NERENTVBRjUzRENBQworOjEwNEQ5MDAwREREREMwRTM5NUMzQkUwMzUxNjNGNzA3OUNGMUJDMTM4RgorOjEwNERBMDAwNDI1RTVGNjhGRENFQjhERUI2MTFFRTlCMkRGMEYxM0NBMQorOjEwNERCMDAwQUU4Nzk2MUNBMkJDRDgzM0FCNDBDRjAyQkUxRUM2N0NDOQorOjEwNERDMDAwOTY5QThCQ0Y2Nzc5M0Q4QkU3QjNGNDFBRjUwQjJGNDU5NQorOjEwNEREMDAwM0QxNkQ1MThDQUQzNUVDQzY3ODFGNzFCMUE0NkM4Njc0MworOjEwNERFMDAwMTFGMTQ0MkIzRTNBNTIzRTRCRUVCOUYzNzg3QjNFNEJFOQorOjEwNERGMDAwRUZBRDNDOUZBNUI3ODdDRjYzOEREN0RCNTA0RDc2RDZGRgorOjEwNEUwMDAwNDhFMzNFM0RDNjk0N0RCOEZGMTUxNzc3N0UzQUFEMjQ0MgorOjEwNEUxMDAwRjI2Nzk4QkZEMjUzQUFFOTBGMUE0ODJGOUM5RUJCMUE3QgorOjEwNEUyMDAwMzVBMkVGMkUxN0Y3NjM2M0EzQjlERkNDRDQ3ODY4MjFERQorOjEwNEUzMDAwQjREOUUyNEYyQ0EyNzhCMkM4Q0JFODE1RjdFN0ZGM0UxMQorOjEwNEU0MDAwQ0JCMEQ5Qzc5RDhEREYwREExNUQwRjc0RjhCMkNFRjkzRgorOjEwNEU1MDAwODRDNkM5NTc0QkQ3ODMwREM4REM3QThCODkzRUU1NDBBMQorOjEwNEU2MDAwMzY4RjIzQjg0MkM3MDZFQUQyRTg3NDhCRDA3Nzg4MUYwMgorOjEwNEU3MDAwMTlGMDkzMkI5REMzNTc1NDJFQTBFODNFRkRBRDExRjRCRAorOjEwNEU4MDAwRjk0NjM2OUZERkEyNDNBNjRFMEFGM0YzM0Y1NjgxNzJERQorOjEwNEU5MDAwQzRGMjVGODdCNUYzRjA3NkMzRTQ4RjQzOEVGNDYwN0U4RgorOjEwNEVBMDAwMUI1NjJDNzk3MjgzMjU0RkVDNzQ2OUM5MEZFNjkwMzMzOQorOjEwNEVCMDAwRTdFNEM5MUM2RUE3OUY5MzI3MjAzRkYwNTM2NzRFMzk0NAorOjEwNEVDMDAwRDRFQkU1RkFDMjgyQzc4RDgyMTlFNEM4N0JBRUIwMkQ1RgorOjEwNEVEMDAwNEVFMzk0M0IxN0UyQTNDRjVCRUVCQzk0OUQyRkVDMEYwNworOjEwNEVFMDAwMkU3NzgyNDgxQkM4MzdEOUQ2MzkyMkJGRjc3MDY2RUFCOQorOjEwNEVGMDAwODMyNDBGM0QyQTVGQjcyN0MyRTg3NzAyQjA4RUYyREMyOQorOjEwNEYwMDAwODNFNzI4MTlFNTdBQjU0NEYxMDY3MTJFOTIyRkJFM0Y0QQorOjEwNEYxMDAwRjhCMDJCNENGOTY5MEYwMzNGQTM5RjM3QzE3MERBNjdENAorOjEwNEYyMDAwRTczRjU3NzA5RTI3M0RCQ0Y2NkJEQzNGMDM3Q0EzREY1OQorOjEwNEYzMDAwNzVCMTcyQzg5MjEzMUY2NkYzNzU5RkEzMkY5M0MzNjk0RgorOjEwNEY0MDAwRDE1NzFBM0REM0Y3MDUyQ0ZBQjVDNkI1RTg5ODIxODM5OQorOjEwNEY1MDAwMTY5Qzg3NUUwNTVENjMzODlBRTJENDMxMjk4RTcxMTAwNAorOjEwNEY2MDAwMkI4RkNDMUFFRjBEMUZCNzQ3NDZCQTVGNjVCNUZCOEU4NgorOjEwNEY3MDAwRTU3NzlEOEIwN0VCMDE5REYyQzk3QUU4QkUzOUVCRTIzQworOjEwNEY4MDAwRjQzNzg3RUQ1NkQ3NTQ1MTNFODFDQTI4OUYyMDUyODI2QworOjEwNEY5MDAwRkVDQzYxOUZERDJGQjZGMkMxQTY5NTg0NDMyODI3MzY0QgorOjEwNEZBMDAwMDgzQkREQ0EyM0IzRjJEMjBFRkI3MkFENzM2NjVCN0VBMworOjEwNEZCMDAwREE4NjExRUU2N0JGNzkwRTNGMTdGRkZEMTNGQzZFREIzQgorOjEwNEZDMDAwNkFBRkY5MzhDQTQ1QzA5NzI5QkVFNzQ0Nzk2OEQ2QjhCMAorOjEwNEZEMDAwREYxNTc4N0FERDYzM0VFOUZCMENGNzI3NUZDQ0IyRTc5QgorOjEwNEZFMDAwNUQ3NUZBMEM0NzVDODBFMzc1QTIxRUFCQTdGQjc4NTE5OAorOjEwNEZGMDAwN0VBRkNBNzlBRTNFRDJGRDU3RTdCREJENzNGNzVGQzU0MAorOjEwNTAwMDAwRjk3QkIzMjdGQTMyQzFGRjIyQ0Y3RkQzQzNEMTgzOUQ2RgorOjEwNTAxMDAwRUNGMzVCQ0YwMUFGRjkxMzFDQkY1M0YwRjdCNDIwQkYyMworOjEwNTAyMDAwQjdGM0JFMjdGQTM2M0VCRjhFNzFCRkRBQjI3MzBFNjM5NgorOjEwNTAzMDAwM0JFOEVGN0YxOUE0MzZEMENCQTY1QTRFQUY0NTk1OENFRQorOjEwNTA0MDAwQkUzRjNFQkQ5NUQ3NzcyQ0U1REYzNUVEN0Y5RERGRkI3RAorOjEwNTA1MDAwRDgxNkU1REYzMzg1N0U3RDMyRTA2NUM3NzhBRTBGRjc4MQorOjEwNTA2MDAwNTdGMTdFRkJGMTdFMTNGMjY5MDVCN0JCRjIzMDdBQUZFMAorOjEwNTA3MDAwQTBCODhFNTIzOUJEQTZDNzNCMDFERTFGNTgyQTUzNUMyQgorOjEwNTA4MDAwNzQ4RkUwOEIwMDMzMjlDRUIxQUQ5MkNGQjNBQjQyN0VBQgorOjEwNTA5MDAwNDI3QzhGNjZEMTJENTBFRjlDQkQ3MjMyREUyRkQ5MkUwRgorOjEwNTBBMDAwRTIyOUZCMTZBRjdDMDJGM0ZBM0UwODk0MEJCQTRCRDAxMAorOjEwNTBCMDAwQkRENzlFRTNCNzUxN0NFNEExMjU3OUQyNEE1OEUzQkUxRgorOjEwNTBDMDAwODM5OUYzNUJBQUZDQUFFODE3NzM4Qjc4OTIyODEzMUFDQQorOjEwNTBEMDAwOTY1QjREOTFCN0RBQ0FDNEY3RDg2MzFBQzY5RjlFMTk3QQorOjEwNTBFMDAwRTQ3OUFCRERBQjlGMzkzNjEzRjU3MUE1NEM3OTY2NUQ3QworOjEwNTBGMDAwODM0N0JEOTdFMUJBRUI3ODVFNEY5MTlBOTBEMkZEMTc0NgorOjEwNTEwMDAwQUZERkM1RURCNDlBQTMxRUEzNkE3OEZCNjcwNjhGMTJDMgorOjEwNTExMDAwREQ2RDA3QkMyQjY5RkU5RjJDRTBFQzQ2N0YwMkZBRURBQgorOjEwNTEyMDAwNzVGNTBDQ0M4NDc2N0JDN0U1NDkzMTIzRDU2RUI0OUZFOQorOjEwNTEzMDAwRjM1RkY3MTI1OTdDODc5RUQxNzcxQzNBQ0Q1MzFFOTRBQQorOjEwNTE0MDAwOUI5RDc4RkUwMUVEQkI2QkFDQkNENDFFQkE5N0I1NzdDNgorOjEwNTE1MDAwQ0VFNDM5OTgyN0JFRUQwNjFFMkNFRDBBMUYyMjNGQjk3QQorOjEwNTE2MDAwNjczNkI3Q0JGNjRBRDAwRUY2NjU1RjhCNzYzRERENjNDQQorOjEwNTE3MDAwNkFFNTcxMjIyODMzQzY4OTdBMzExMTE4RjEyQUNFRURGOQorOjEwNTE4MDAwMjhGNTA1RTZFRDZDRTgxQkMwNzk4QUVBRjhGNzJEOEE2OAorOjEwNTE5MDAwNkEzMkY3N0YyMUUwQTZGRUZCNUMzMThBN0Y4RUI0N0YwNgorOjEwNTFBMDAwRkZFQUUzRjhFQ0FDRTJFNzA1OENDNTI5MkVCNTVCRjgyNQorOjEwNTFCMDAwNUQ0QzhEMUFFOURGMDk2RDA5NzBGQ0VDNzQzMTEzRTM2NQorOjEwNTFDMDAwNjVCRTNBOERGNEJBMUMzNkM4MEVGNTgzRkQ4OEYxQjg3OQorOjEwNTFEMDAwNkQ1MjZDMzFFNjg3QzQyNjY5RUM3MUMyODhFOTFEODc3RgorOjEwNTFFMDAwRjFCQjA5Nzk2MUE0QkY0RDUyMjI4NERGNTU4RThERTM1NgorOjEwNTFGMDAwRjFFREEzOTE5RDc0RUZFQTAwRDhEMTE0MEU2NjA5RDJBNworOjEwNTIwMDAwNTNEREQxM0NCQTBGNzUzNDUyM0Q0OEZEN0QxNUJBREJGNAorOjEwNTIxMDAwRDIyODk4Mzc0RjFGOEE2NDZDRDI2NTlCQjZBMjVERDNBMworOjEwNTIyMDAwMzk0NUQ2MzE2RkIzNTNBQThGRTI3OEIxNUMwRkM1OTE3RgorOjEwNTIzMDAwNUQ1M0U2RDFGRUI5NDZFNTQ5RTlGQUU4NDYzRkQ3MEJBQQorOjEwNTI0MDAwMjcyNzQ0NkVGNEMzQkE0MjUzNEVFNTYyREM3MjdCRUQwRAorOjEwNTI1MDAwMkJGQjcwRkYxRUI5REY0Mzc0RjQ0OEVERTBERDM4Q0Y1RgorOjEwNTI2MDAwRkVCMzU3MUQ4RjEyNUZGMkYzQkE0NzZCNEY5N0EyREQ2MworOjEwNTI3MDAwQjNBQkU5NTQyRUUyQUYxOEUzNzNBMDBGOEIyQjc4MUM2RAorOjEwNTI4MDAwMEQzNTIwRDk2NzZBMEZCQjE5RjA1OERDQTYzMTIzNERDNAorOjEwNTI5MDAwMUY3QjE5M0ZDRkMzM0ZERjY0OTI3QkY0RjdDQ0UwMjkzQgorOjEwNTJBMDAwNEYwQjhFQjc4NDI1MkUwREQwNzMwRkM2QjMyQzM5NTNGOAorOjEwNTJCMDAwNUNDNzEyMDUyMDBGRjdBRjc4Mjc4Njc5NzI4RjRDMkNDOAorOjEwNTJDMDAwQTA3Qjk0NDVFMjNENDk0RTE4QUY0NDhDRDdGRkM2MkJENgorOjEwNTJEMDAwRUJCMUREQTNENTA1MDZDQThCRTI4MUExNzlBODI0OEFBQQorOjEwNTJFMDAwQUI0RTUzOUMyRDY0RERGRjg4MUFGQjZGMjVGQTk0RTlDMQorOjEwNTJGMDAwM0I5NUM1RTE3N0ZFMDJENzExRjBGNTkxOUU4M0Y2MTQzOAorOjEwNTMwMDAwMzc3M0FFRTNFMzA5RTY3RDg4QkY2RjRBQURBRjhFMEIxRQorOjEwNTMxMDAwQTZGQzMxRkE0MzdFQkM5N0RGQ0IyRUNFRkE4N0I5NEE4MgorOjEwNTMyMDAwNUFCRTZEODk4ODBCNkM5MjA2Njc5MzVERkEwMEI3QzMwRAorOjEwNTMzMDAwQzdCMjM4QzlCOUUyQUFEOEREM0NERjM2NEFGOUI2Q0VFMQorOjEwNTM0MDAwNzlCN0ZCQ0ZFOTU3ODlFRTUxRTczNzg5N0IyNUZDNzdBMQorOjEwNTM1MDAwNkM0QUM0RUZEODM4RTkzRTE0Q0FBRkVBQjgyQTU1REYyMAorOjEwNTM2MDAwMTczRDQ1RjRGRkI0NjZEQzk1RTk3QjBGRkI4NDVDRDgwMAorOjEwNTM3MDAwMjRGQzMxNkJGQ0IxQjk3QzdDQUJGRUE4Q0VFOUYxRTkzMQorOjEwNTM4MDAwOTdGM0FFQUY4MkY1RkM1NTVCRDkyNDhDN0ZFRTE4QzE0NAorOjEwNTM5MDAwOEY1QjE5RTBGNDk3M0QwMDE2MEVFODgxRkVENzVFRjNBRgorOjEwNTNBMDAwNjIzRUNCRDMzMjVCODU3MkFBQkUyQUUxNDk1NjA5M0NFNAorOjEwNTNCMDAwQzJGOEU0OEJDMUY4MDdDMkRGRjZBMDVDRkE2QUEwOTJEQgorOjEwNTNDMDAwRTA1QTMxOTVDNzBEM0FBQjFFQTQ3M0EwOTBDRUY1MEVFRQorOjEwNTNEMDAwRjIyN0NBNzc1RjI4MjY2MURDN0I3OTBERDMwRjg5NzhBNQorOjEwNTNFMDAwNEIwQ0YwNEY3N0U3NjU5NkNBRUJERjlFNEI3RTBFRjBENQorOjEwNTNGMDAwMEFCRjU3ODNCOTQ5OTNDNUVGNEY5NEUzMzlEMUE2QkI5MAorOjEwNTQwMDAwNDVGRUFDOENGOEVFMTRGMzAwREZEMjNDMDc4QUM0MzhCQQorOjEwNTQxMDAwRjc3MUZCMUZGRDBCRUM1RjJFRTYyOUFGRkJFRUQ3NTBCQgorOjEwNTQyMDAwOEYxN0U5OUMyRTUyRjBGNTc5MDhCRTU2OTkxMTdDNkFDNworOjEwNTQzMDAwRTI1NUY0NDNCNzRGMkEzMDkwNkUwRTg0QzI2RjM3NDE2NQorOjEwNTQ0MDAwN0RGOTIyOTVFMkYxRTUzNTFDOEUwM0FEMzJGRDFFOTAwQgorOjEwNTQ1MDAwQkY0RTNCNDhGN0M3NENEMDE3NjlGODMyQzRCQzQ1MzUzRQorOjEwNTQ2MDAwMDkwOUNGQjU4QzU2QkUyRTY4RTc0NUI5Njg4NDAxMUU4MAorOjEwNTQ3MDAwQTgxQjYyNURFN0UwOUZBNDExRkM0NTlFNDFDQzJEM0EzQworOjEwNTQ4MDAwODc4Nzk1MzgxRUQwRUZDQTNBREVDRjFGRUFEQjgyNzJEQgorOjEwNTQ5MDAwNkM3OTFEODcxQkY0M0JDMTUzMTRENjBFQTJCRTJGMEE5NAorOjEwNTRBMDAwRjFGMTk2MDM3RTBFNDkyOUI4QjIyREI4RUE2NENBQkY1RAorOjEwNTRCMDAwMkFBQUQxMEVBMjFGOUMyREUwNUIxOUU2RjBGNEJGN0U1NAorOjEwNTRDMDAwNkE0MEUyRTMxOTM4NUVCNjgwMzc1QkFDOUYxMjc2MEIxOAorOjEwNTREMDAwODQ3RTgwRjE5RTcyMjVFQUYxNUVDRUE5MjlDQzM4QzQ4MworOjEwNTRFMDAwNjdBMzc4OTZGNTdFNTcyQkUwMDFGMEUzMTdGM0IwREQ2NAorOjEwNTRGMDAwNkVFMjI3NTg2MkVDNjM5OUZGN0U4ODkxMTZCN0E4RDhCMAorOjEwNTUwMDAwQUREOUVBN0VCMTdGQUM4QjNGMjczRjhFNTQyMkFGQ0IyMworOjEwNTUxMDAwQzJBRjVCNTk2NUVGQzc2QUQyRUE2NTc4QkY4Q0QzRkIyRgorOjEwNTUyMDAwRkE2QkY5NzlDNzgxMDlEQzNFNDJCRkUzMUM3RjIzOURGQQorOjEwNTUzMDAwNEYzMTFFRUIwQUUyN0I4REY0NUQ0OUJCN0REQ0UyRDY4OAorOjEwNTU0MDAwODJFOTI4MUY4QTA3MUU5RTI3QzM3QThBRUU2NUIyOTJENworOjEwNTU1MDAwNDNGNDJDOUQ5MzdGMzBERkI3RDcyNEU4RkU2Q0Y2NDBGMAorOjEwNTU2MDAwMjQwRkU1NUQ0OTZCREU3NEZDRkU1QkY2NDA5NEVBRDlERQorOjEwNTU3MDAwMDNBRDI2Q0YzRjAzMTcyNjBGRjNGNUQyRTYyOTQ1MzlCMQorOjEwNTU4MDAwQ0RGM0U5NThBQkQ2ODc3MkFEMzYxRDRFNzg1RkYyNzIxNworOjEwNTU5MDAwQ0Y1Q0VDQkZGOUVFNTc0NjIzRkYxNjM4RkE3QjcyQjhBMgorOjEwNTVBMDAwRkY1MEZDMzJCNDBBRTBGQ0E3RDc2MjdCMkJCRTkzOEQ4MAorOjEwNTVCMDAwMTBFNzUxRjkzMjk2QzUzRTkwQzc1MDk2ODhGQzNCNEI5OAorOjEwNTVDMDAwNUU3NDRFNzg2NzUyRDQyN0U4ODdGMkYxNTgyMkREQ0UxOAorOjEwNTVEMDAwNzc5NkQwN0VCQzY4MUY5M0NFREJFRTM0QjUxQjI5REVGOAorOjEwNTVFMDAwMzQxMEUwRjFBNjgwQjA1NzdCOThCMTlGRjQ3QjBEQ0ZDQgorOjEwNTVGMDAwRjdGMEUxNzNEMDFGN0QzNTQ3QTdEMzdFRjZCMTMwRDJFNworOjEwNTYwMDAwNzM3MURCOUZEQ0U5RjJGQUU2NDBBOUI4MDc5RDIwQkE4NgorOjEwNTYxMDAwRDc0QUIyRTg3QzBGRjg5OEJFNkY3QTQwNkRBNTczRDY3MgorOjEwNTYyMDAwQkUyMjdFQUU3OTc0Q0UyQjEyRTJCM0U4Mzk5RUE3NkQwRQorOjEwNTYzMDAwRDlDQkQzNkIxMjIxN0NERUY1NkFGNDMyRTJDRjExRUNDOAorOjEwNTY0MDAwNEZDQkRFNzRBRUU3OTJGQTA3NDkxRThDOEQzMjJGOUU0NworOjEwNTY1MDAwQUZGOTU3QUI5NEM3NUExMjA1QjhBQTUwMkUwMDQ5MTc5NAorOjEwNTY2MDAwMDJGQzM1QjFGNTQ4Mzc0Njk0RDc4REQ1QTI1QzA1RTVFNworOjEwNTY3MDAwRDU2MERGQUUxQjI4RkZBNTJCMzVFRUQ2MEFCMDZCRDE2NworOjEwNTY4MDAwN0UxQURDRURCOTAxRUQ5NTU2QjA0NjBDQjQxNzRGNzk5MgorOjEwNTY5MDAwRjA3QjJBRERBREQzRjMxMUNGQ0Y0NDJDRkIzMjIxRTFENworOjEwNTZBMDAwRjg0NTNGMzVDOTVFQUNENTM1MURFMzMwMTNEQzg5RDFGMworOjEwNTZCMDAwRTlFNzc0MDdFNkJDNTM0RERGMTM5QjdGNzFGOTY0MjM2MAorOjEwNTZDMDAwRTkxMzg0NDU0RUQzMjNGRDU1NDc0OUJGM0NFMTFGNEZBNQorOjEwNTZEMDAwN0FDOEQyMkI5NjFFQTExMTQxQkVEQzIyRjhBOENCNDg3NQorOjEwNTZFMDAwNzgyNDkyNTdDMEJCMDBFNzJEMjg0NzgwOEVGRDQ1NUM4QgorOjEwNTZGMDAwOUU4MzFDRTY3MkNFRDIyNzc3NzNCRDZGQzlDRjBBMzE2NQorOjEwNTcwMDAwQ0UyRDI4NkZBMTVGNzdFRDEzQjkzN0EwNUMxMTcyRDY0QgorOjEwNTcxMDAwMUYzMjY2RTJGOTVDODU5MEFGNEM4RDQ5MzhERjgxMjlGNAorOjEwNTcyMDAwRkM3Qjk1MDE4NzNDQUQ2OEU1RTM3NDg1MThEMTEzRThFRgorOjEwNTczMDAwQTE4MzQ4MzcwNzhBMTI3NDRGRkM0MEVCNTEyOUZEOUUyNAorOjEwNTc0MDAwQTlBNUVGMDJBRDQ5ODZGQjNGQUU4RUNCQzE3MTQyQUUzQgorOjEwNTc1MDAwN0VDNzZGNzBGQUY0NzBCOTdBNEVFRjA5NzlCQkQ1M0MwOQorOjEwNTc2MDAwQ0FDNDc3NjEzM0U2NjFGREJERDBFNzNEMTU4N0M4MkYxOAorOjEwNTc3MDAwRDg3NkVCMjlDMkE3MTUwRjBEODk3ODY4NzdENTVCRjQyOQorOjEwNTc4MDAwN0U3Qjk0REYwM0Q4NjU0RTlGNDNGMDQ3OTY2Qjk0N0ZGMgorOjEwNTc5MDAwNUE3Mzc0NEUxOUZBMUI0RENCMzVCNEVCNEUwNjBBQUM1NgorOjEwNTdBMDAwRjMyRkVGNDJCNDI3NUI1NzkxRkRFQjEzRkJGODUwOThCMgorOjEwNTdCMDAwMDlCRjUzMjMzRkVCQkVBNURGMUVDMEZFMjFGMDhCMjRBMworOjEwNTdDMDAwMDMxQkY1NzlEQzQ4RTdGODNEMDVDNDc3NzQ5MDNBRkI5NAorOjEwNTdEMDAwNkEwQ0ZBMEU4NDczMURERjBCRjBFRkQyRkFBM0M5ODFCNQorOjEwNTdFMDAwNzFCNEFGMzI1REU5RjFENTMwRjIzQjk3ODM1Rjg3QzM4NworOjEwNTdGMDAwRUU1NkMzREUwOUYwN0U3NzkzQUNBRjY3QTlGRUZGMkJCMAorOjEwNTgwMDAwQzBGM0QxMjZGQUY5M0Q4NTlEOEI0RjZGQzEzOERGQ0VBRAorOjEwNTgxMDAwQTVFMjNCNjcwRUY4RUY2QkVDRjMyODM0MEZDNjA0MjhDMworOjEwNTgyMDAwOEYzOUUzRjdGNkFCRkM1OUZDRkIwQjM1N0QwMzY4Q0ZGMgorOjEwNTgzMDAwMDdBQTM4NUMyRjA2MEM4RUY3NDE4RUM3OUU4ODRDN0NEOQorOjEwNTg0MDAwQjQ2QkIwREE4QkZBQ0U2OTM3M0U5MkZERUUyNDlFRDc2OAorOjEwNTg1MDAwNjJENzM3MTdBQTE3M0JFNEZFMDQ3N0RGNzUyNEVGQkU0MworOjEwNTg2MDAwMjk5M0JDNjI4Q0NCM0I4OUM5MDZGRUFFNDY0QjgwRDNFNAorOjEwNTg3MDAwNTM5NTkwRDcxREFFQzQ3RUNDMkJFODc4RDZDN0Q2MUJFNworOjEwNTg4MDAwMjlCQTI4MTI2Mzc2QjZDQTE5N0YzRkVENTA0MEUxRkI3MgorOjEwNTg5MDAwM0Y3Q0RGQjlGRDIwRjZGRDQ5ODE4NzBCRUQzRjg2NTkzRQorOjEwNThBMDAwRDA5RUVFOEI2RjFBNzMwN0NBRjE1NkVFM0ZGNzI1REVENgorOjEwNThCMDAwQTJCQ0EzQTJEOTBCQzlFRjM5NzJGMDUyRjIwNzhBQUE4RgorOjEwNThDMDAwNENEQkVGNkI2NjhGRTBCNzU2RTQ3OENFMUIwRjE4NDlDMAorOjEwNThEMDAwMUVFRjVCREQ0MTdFRjZCRUMxQ0NGNzYyMEE3Mjc4NUVEOAorOjEwNThFMDAwNUExRkM4NEJGQ0JFQzk0OEYzRUIzOTlDRkZGRTI5MjA2OAorOjEwNThGMDAwRTg2RUNFM0JGNEJEOEMzNDNERkJCMkQwQjNBNDZGOEJDRAorOjEwNTkwMDAwNTUxNjUzRDJGMjFDMjYwOEZDMzlGNTI3NTNFMzlFNEI1QgorOjEwNTkxMDAwNkI4OENFMDk3RkZCQzRGOUM1NDNBNjRDNzhCN0U4MUM1OQorOjEwNTkyMDAwQ0YwRjEwQUZCMDBFNTNEMDIxOUQ2RkY0QjBCODA3Rjk3MAorOjEwNTkzMDAwMjZENkM0RjMzQzlDNzA0RkYwQ0IxN0I1QkU2MDBFRjc3MworOjEwNTk0MDAwNDNDRUNEMjdGQ0Y1ODk3RTBFRjdDRURBRkJFOTlFMjMwOAorOjEwNTk1MDAwQ0MxNzQyRkE5MDdFRjAxRkE3RTkzRUQ0QjMyRUZBM0Q1MQorOjEwNTk2MDAwREIxOUNGQkExMjE4RDNCQUYzMjBGRkJENDVGOTQ1MkY4MgorOjEwNTk3MDAwQzFGOUNGODdGOUY3RDUxMzdFNkU4RkZENUFFN0JGNTc3MAorOjEwNTk4MDAwRjQ1NUY3NjBGNzE3QTAzRUY0QUNDMkM4OUU4QzgzRTJEMgorOjEwNTk5MDAwMDI3QTNEMkRFODk1M0RDN0VCMkJCREJDN0FFN0MxRkVGMQorOjEwNTlBMDAwNjUzOERFQUFFNzc4MUVFNjlEQ0ZERjc2RTMxN0EwN0U5NgorOjEwNTlCMDAwREI4MDhCRUUwQ0RDRjlGODdBNkQwQ0Q0NkY4RjRCN0RBRAorOjEwNTlDMDAwNThGRkNENzQ0NkJGRjcxOUNCRDMyOENFRjU5QkMwNjBFNgorOjEwNTlEMDAwQzEwMkMwRjcwN0VCM0NDQ0I4MENFM0E0ODMwNUYzMDE4QworOjEwNTlFMDAwMEY3N0M0OUY5RTg5RkRFRTc4NEEwQTIzREJDRTc4RjZCNgorOjEwNTlGMDAwRjE1NzQ2MDM1Qzc3N0U0M0EyRkNBRkFGMUNDOUI2RDkxMgorOjEwNUEwMDAwODVBNzYxMjlEM0UwRkQ5QTgzRkM3NzIzNkY2MzNEMzMzQgorOjEwNUExMDAwMTExRjc3M0VERTRCQkY3RjY4RTFGMzgzNzU5NUNDNDg1RAorOjEwNUEyMDAwRkJEREIwM0JCRkYxMzRGRDlFRTE1RERGOTJFOEY3MTU5MQorOjEwNUEzMDAwRUY5MkY5M0RBMjdGN0VERUJCRTgzMTFGQUU2RkJENzZFRgorOjEwNUE0MDAwQTkxRkQ3QjU1OUMzNzZCN0M1NUJCRThCMjk0RDc3QzQ5RgorOjEwNUE1MDAwMEY2QTMzRTFGRDFEMDcwRTZBMkJEMTJGNzNCMzY2RDQ5NQorOjEwNUE2MDAwM0Y1RjM5NzI4NTRERUU5Q0RFQTc5MDdGQjAyNkQ3NDMwRAorOjEwNUE3MDAwRjdFQjk5Q0YwQ0NEOUIzMDdDOUYzRjU4Qzc2QzcwREQwNgorOjEwNUE4MDAwNjFDNTA5RDRCODM2MzdBREJENEJFN0ZFRUY1NzhFMjg1OAorOjEwNUE5MDAwQjY3OTJDM0IyMDc2OENFQjg1RDhERkZBMjk3RTZFRUQyQgorOjEwNUFBMDAwREYxQUUxNzc1QkZCQjdDNjBBQzRBQjQzOTMzM0MxRDNCQworOjEwNUFCMDAwOERGQjAxRjBGNEFDRDNBOURDQjkyRTQ0RTVFRTc1MDZGQworOjEwNUFDMDAwRUREMzVFQzQyMzk0NUQwMkVFQzA1NDU2OEZERkU3MEYyMgorOjEwNUFEMDAwOTgzQ0VEMzhBRkM5QUNDN0JCNjU3OTExNUUyRjU4MTI0MQorOjEwNUFFMDAwMjUzRjY0MjQzQkM2MkFGN0JBQTIyREU4NDM3NkVFRThBOAorOjEwNUFGMDAwOUZBNTgyRERCMzU3OEJERThEOTEyRkJERTNENTU5MEQ2OAorOjEwNUIwMDAwNTBGRjlCOUNDOEM2MUM5MjM3NjEwM0Y5Q0VGMkNGQkZGMQorOjEwNUIxMDAwOUVDM0U1RUVBNkQxMUFFMTdCRUZEMkM5OEYyOTk2RkY4RAorOjEwNUIyMDAwODU3MUJGQTUyQjlGNDA3QjAyRkE2RkNGMjFCRTBERDM5RAorOjEwNUIzMDAwNzdCQTQ2RUE1RkIwQUNDRUQ2QkY2MEQ5MkFBQkZGMUVCQgorOjEwNUI0MDAwRUFFRjM5N0ZGRkJEQ0JBRUIxQ0ZCRkVDMEVBQkZGMjM4OQorOjEwNUI1MDAwMDRCRkVGRkNGMDE3MzQ0RkI1Q0ZERkJDOUFGQTdGRDUwNgorOjEwNUI2MDAwQ0RGNzc3MjhENzQzRjlGNDFEREU3MEMyNDVGRTMzQTM4NQorOjEwNUI3MDAwRUY3M0E4Nzk5NzFFQTJFRjI3OUQ4QjMzMEQ5QUE4NjcyNAorOjEwNUI4MDAwN0Q0RkU1NTZBMzFDNEJEMUQxRjQ2RkUyM0FGQ0MwNURDQQorOjEwNUI5MDAwRTk3NDk0NTM5NzY1RTNBQjVDMzNDRjU2Q0Y5RjNEQzYxMgorOjEwNUJBMDAwRDY3RTU0QTRDQ0Y2QkU3MEQxRTUwRUJBRjRFOTk0MDdDMworOjEwNUJCMDAwQ0JCODNFMzUzMUNFMDk3MDZBNjNGOEY3OUFFQUM3NzhGOAorOjEwNUJDMDAwNjg3REY3QkZFOEE1RkFGREQ3RjBGNUREM0ZDNjQ3N0M1NQorOjEwNUJEMDAwNENCQTBCRjZGRDdFMkQ3QTY1QkE3RDBDRUI5MjMwRTQ2MworOjEwNUJFMDAwRjU4QzFFMURDOEE5NEQ3RjZFQzhGODNDNEJFMUJGNjMwNAorOjEwNUJGMDAwOTdFNUU2RkE3MjczRTlFNEM3NjI2OUY4REM1MjBDRjRERgorOjEwNUMwMDAwMDBGNUI3NzMzNDVCOUM2NzczRjFDQTUwNEJEQTNDOUI2OQorOjEwNUMxMDAwOEFCNTQ1ODdBQUY4RjM1QkQwOEVENzIzN0Y4N0YzN0RCQgorOjEwNUMyMDAwNTUxQkJBMTRFRDU3RTczQ0VFQjIzQURCM0M5RTkyNTU1OQorOjEwNUMzMDAwMzQ0RkQyMzE4RkJCNjQ5NTYzMUVDRkEyNDNFMkI5OTgzMworOjEwNUM0MDAwRTcxNEQyQzk0OEYzNkMyRUJCQzZCRTlFOTIzQjY4OUUzOQorOjEwNUM1MDAwNUZFMzNDQjU2OUVCMjlCOUMzMzE0RjE2NUYwRjNDMTdDMQorOjEwNUM2MDAwRjNGQ0U2QkNFQjI5OUY2QTVGQ0ZEOEQ1MzRDRkJGM0JBRQorOjEwNUM3MDAwRTY3MThGNURFRDk4Qzc0N0YzRTA3MzlDODcxNTcxM0YyMAorOjEwNUM4MDAwNEE3MzBGQURBNEZERkY4MTk3NjExQzQ4NzM0N0ZGOUFDQgorOjEwNUM5MDAwMkVBOUZDQkQ5N0UyQzJEMENBQzQ3NkZGMDdGRTIyNjNEQworOjEwNUNBMDAwOTYwMDgwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAyQworOjEwNUNCMDAwMDAwQkU1N0QwOTc4NTQ0NUI2NzBEREJFNEI3NzI3RERENgorOjEwNUNDMDAwOURDRUJFMTBDMjBEMjg4Qjg2RDg4MTkwMDE1Q0E2NTk0RQorOjEwNUNEMDAwRTRBMTIyMDY1NzcwODEwRTRCRjZBNEEzRTIzQzFDNzU4QQorOjEwNUNFMDAwRDIxMDQ1NTRENDQ2NTE4MzA2QTZDMUEwRTA4MDA2MjZCMgorOjEwNUNGMDAwNjg4MDgwMERBODgzMzMyRTcxOUVFMzMyMEIzNjg4MDRCMgorOjEwNUQwMDAwMjEyNjBEQTJFMjlCQzVCRkNFQTlCQUU5N0IzQjFENjA0RgorOjEwNUQxMDAwREVDQ0ZGQkY3OUVGOEZERjRDNTFCN0VBRDZBRDNBRkI0RgorOjEwNUQyMDAwMzk3NUFBOUEwQzRGMjI2NDFDMjFGQjEyNjgzOTg2OTA5RgorOjEwNUQzMDAwNkZFMzNDMTczOTZEODRGQzAwN0YzRjI2RjRDRjQ3NDg2MgorOjEwNUQ0MDAwMkEyRkQzMDg1OTQwRjg1RjYwQTk0MDhBMDhBOUI1QjA0NgorOjEwNUQ1MDAwRUFGQzREMzM3MjE2NDNEOTM2MjlBM0E0OTBGRTYzQTVGRAorOjEwNUQ2MDAwREQ3NUJFNEE0ODc3REIyNDY1NUU1RTY0M0NBRDVDRTA3MQorOjEwNUQ3MDAwOTc4Rjg0ODZCMzc3N0YyMDkxRUZGODI2OTJFMTc1RjRCMAorOjEwNUQ4MDAwRkI2NTA5NEU5QzhGNTYzRjUyNEZFQjY2NDIwRUQ1MTM3MgorOjEwNUQ5MDAwMkMzQjY1MzJBNzk4M0UzRjVDNEYyNzMwNEMzRkRGQzUxOAorOjEwNURBMDAwRjhERTExODlGRTMzODU5NjRENDJDMDI3RDA3NUFERjhENworOjEwNURCMDAwNDAyNjQzRjAzMzFGMEVBN0VCQjg5MTJGNjM4MTNGOUUxRgorOjEwNURDMDAwMTA0QjY0MUU1RTMzNzFDMzdCRTFFREU2QzAzQTAxOUU2OQorOjEwNUREMDAwQkEwNzk4MzI2OEQxOTg0Qzg4MzZERkMxODRGQzY5RjdERAorOjEwNURFMDAwRDU2RjA5MEVBQzBFMzA4RDI1RTRFNjY1NUJERTg0NkU2MgorOjEwNURGMDAwMUYwOTI1MDNFRkEwRUI5REQ5QkE0MjFFNDBFQkRENzJDRgorOjEwNUUwMDAwNjhCNkNCQTYxQjY3QTY3QzA4RDY2REExRkZDMTM4QjNDOAorOjEwNUUxMDAwM0NCNEFFRkJGRTJERTVDNkZBNkQ0NDhBRDQ3MzA5QjlENQorOjEwNUUyMDAwRDAzOTk4RTM4MzdGNTcwREM4ODBBRjFCRTk5QTMyMjk5OAorOjEwNUUzMDAwMEE2RjgzNzIxNDM0M0IxMTVGQjM5REVDNUQ2RDNFREVERgorOjEwNUU0MDAwN0I2NDEyODRGOTQ4QTE1NDkyMDcyREE5RDhDRjAzRkQ5MQorOjEwNUU1MDAwRDRCRUYzOUIyRDVCRENDNTE0OUZCM0VGMTYxMThFRDExRQorOjEwNUU2MDAwRjMwREVEOEU3NzlCRjI2OUQ5RjhCNTRDMDY5RjdERkU1OAorOjEwNUU3MDAwNzMxNjE5REI4OThGN0Q0RjgzQUI0NjA3MzdDRDlDRjBCNgorOjEwNUU4MDAwRTQ2MTFEN0RDQ0YyNUNGMUU0NjEwMzlDNjYxOEVBQjcyNQorOjEwNUU5MDAwRDVDRDMyRjQ5RkIzQThDNEQwNUVFMkFCMzBCNENGNUJCMworOjEwNUVBMDAwNzZCQkExQkVDMDdGQjdBMTdGNTlFMzYyNDM3QjQ1RTBDQgorOjEwNUVCMDAwMjE0MzdCRDU4NjE1ODY3QTREQ0IyQTQzN0Y2RkRCNUFFQgorOjEwNUVDMDAwNDNCQjY5Rjc4ODZCMDg4NTYzQzNFRjQ0NjJBNjcwRkMyNworOjEwNUVEMDAwQzY3NkU0QjE4QjUzQTA5NDVDMDBGN0EzRjUxOTQ4RDdCQworOjEwNUVFMDAwQzdFQTU1MkM2QjgxRjZDNjAxRkY4Q0I2NzgyODlFQkM5QworOjEwNUVGMDAwNzFFMTUyOTI0OEM4N0RGRTRCOTYyREJCODRENjE1REFDRgorOjEwNUYwMDAwM0U5RTUyQkI3RkUyMzI1RjM2MjFDQjlDMkFEMkJERDg2NworOjEwNUYxMDAwQTg5MDIwMjU1NTgxMjRGNUQyNzU1OEQ0QjU4N0NFRDJDNgorOjEwNUYyMDAwREUyODkxRTBFOEJFRUQ2MjI4RjZGMzFFMjEzQzM0OEJCQQorOjEwNUYzMDAwQUVDM0Y3QTk5OUFDMTdGQUYyNzk4NDJGQzkwMDkyRDFCMAorOjEwNUY0MDAwN0Y3Qjk3ODk5NEI3RThFNENFN0FBNzA5RTc5M0VBOUMyOAorOjEwNUY1MDAwQjhERTQ5RTlBMTVBNjFGQzVFQkQzNTczMjI3MTQwM0Q0RQorOjEwNUY2MDAwMzhCNENFNzY4NkVGQjVEMEM5QTRDMzM4OEM1RjJBMDI4OAorOjEwNUY3MDAwMDMyMkZDOEJGODFCNjJFMEZCNjEwOTlFNjYyN0ZENUUzNQorOjEwNUY4MDAwRDcxRTcxMjZDQzgzMDRGN0U1NUMzNzEyQkVFRjVFMEY5NworOjEwNUY5MDAwQ0Y0OTFCMUQyNDkzRjI3N0JERkJDOUMzRTcxM0YyNDkxOAorOjEwNUZBMDAwRkQ1NDJDN0Y1RjVGRkNFNDYxOTk5MDNGRDZDRkM0RkEyQgorOjEwNUZCMDAwODE3QTBGOTZBMUZBNzIyQzBGRDVENzYxRkJFMUZBNDVEMQorOjEwNUZDMDAwNTgzRjUyRUZDM0YyNjhGRDMyMkM4RkQ1RkJCMUJEQUIwOQorOjEwNUZEMDAwQkUxMUVCRERGNTAxMkMzNTNFQTBGMjY4NEUzMUYwNjlDMworOjEwNUZFMDAwNzFCMTA5RjhGNDBFMkJFMTdGQUM3RTkyQUY0MUE0RkZCMgorOjEwNUZGMDAwRUU0MEJFNzY2NTAwNUY5RkI0N0QzQjM0OEJEMkRCQzkzQgorOjEwNjAwMDAwNEYyODMxRTVGNjBGQTc2OEJBRUIxRjdGNkUxM0UwQUY5QworOjEwNjAxMDAwMzQ0MDg5MjdCOTZGQkIzNThFRTFDNzZBMjI1MzA5OTU5MQorOjEwNjAyMDAwM0YwRjlEQUYxMDg5N0UzRkVFRjUwQkQ3ODlCOUY4NUMyNQorOjEwNjAzMDAwMDJEMkExOEFDMzM1QzMxRTYzRkNGMzA4RTJFQjZDNzg3RAorOjEwNjA0MDAwRDJGQTFGNzlGNkNGNDU3M0YzMDAzRjgzOTE0RUUyRjYwMworOjEwNjA1MDAwODk3NTBDNkZDRkJCMDA2RjY3ODM5RkM0RjkyQjFBOEVCNQorOjEwNjA2MDAwQzJFQjdGQ0EwOUQxRkU1RkE1NkFGMEVDQzgyMUI0QkNCRgorOjEwNjA3MDAwQ0U1OTdDMTRFOEUwNjRBQjE5RDc3NUIyM0QzRTQwNjA2MAorOjEwNjA4MDAwMEM2NzBBRDI0NUZGNzA2M0YzQThEQTYwRjVFQkU1NDNDRAorOjEwNjA5MDAwNEQ0QkEyREYyODJGMzJGRDdBNzk3MTcyRkZGMzBFRTBBQgorOjEwNjBBMDAwRkIzQjMyNDRGRkUxRDE0MDFGNkU0RTFGOENFRUI0RjEzQQorOjEwNjBCMDAwNkI1QTcyRkQzNkMzMzhDNkZBNDlCRjMwQjUwNUU1QkMyOAorOjEwNjBDMDAwOUE3MEZEQzhGRUU3Nzk0Nzg2ODJERjM5QjY2MTQ4MDJEQgorOjEwNjBEMDAwN0NGNzU4QkRDNTBGREZFOUFBNzdGQUQ5NzczM0ZDN0E4OAorOjEwNjBFMDAwQkFBQzVFMTRFRjNGOUMxQzk5NUY3RkUzRkVCM0U3NDdCOQorOjEwNjBGMDAwNDgyQkY5REM0MjEwRjQzRjBDRTlCRjdGQkZGODkwNEUwQgorOjEwNjEwMDAwMjlDNTQwMUZFREYyQjdBMDc3RTI4NjZCN0E0N0MyQkE4NQorOjEwNjExMDAwMzZBRUI3NDVGNDk5MkY4MkU3OUIwQ0RGQTNFRkE5NDc3MgorOjEwNjEyMDAwMzQzQzBEM0UxM0RFMjU3MjQ0NUIyNzk1OTMyM0E5RUM4NgorOjEwNjEzMDAwMDYzQUE1QzQ4Qzc4RjZEMDExMTNFODc4M0Q5MjZEOTk5MworOjEwNjE0MDAwNDBCRjYzNEU1NEIxREQwQjFGQTJGNDU0NjMwOTI5MUVGNgorOjEwNjE1MDAwMTVDMUREMDE3NkQ2RENCMTFBREZBQjM3RkQ4MTkyRENFQgorOjEwNjE2MDAwOTdCRjkxQzlDM0QwRkUxNzNBM0E2RDk3NzlFQjdDNTIyRAorOjEwNjE3MDAwRUMyMEY0N0I3MzVCQUJBNjgxOUNGQ0YyRDVBQkI4OURBNQorOjEwNjE4MDAwRTIyRjgyNzU3RjQ1NEM1MzgxNEZCRTIyQkY3NThDRDY1RQorOjEwNjE5MDAwRDk2NUQzMTMxNTM2QkY2NTRDM0ZGQkU4N0ZCMDNFNkEyNworOjEwNjFBMDAwQTcxOUY0NzU1OUEzQjE1RTRBQUU0RDAzN0UyODVEMjk0NworOjEwNjFCMDAwOTMwMDlEN0IwNUU4N0I2REREOTRFRjJGNEI2NDc2NUM0RgorOjEwNjFDMDAwMTlBOTVCMEE3NkNBQzMzMjk5MDlGODlFRUIyNEQyMDA1QQorOjEwNjFEMDAwMkEyNzZBNUU1QjVENTQ0MkVCMzcyNDlBOTBBRThFNTE1QgorOjEwNjFFMDAwRkI0RUE1NzJBODIyODlEOTMxOTUyOTAxQzU0RERCM0YwNworOjEwNjFGMDAwNkYxRDdERTNDNTA0REUwRjJDMDVCOUU2QjMxM0Q3N0ExNgorOjEwNjIwMDAwRDIxN0VFRjM5NjE5RTc3N0I2Rjk0N0NGOTc5MDI1Mzg2RQorOjEwNjIxMDAwNUY2RDFFREFCOERBM0NDNDBEODIzQjEwQzM5RTlEOTdCOQorOjEwNjIyMDAwMjg0NEVDNjQ1QURFOTk2OEI0NUYxNzQxNUQ2N0RGREU4RAorOjEwNjIzMDAwMTc1NTVGMTI1NUQ3RTg0NEU2NzQ2MjRFRjQyQzRBNEM2OQorOjEwNjI0MDAwMDVCQTA4NEY0MTNCOEQ1MEZBQzg4QkY0NTMyMkZERUUzRQorOjEwNjI1MDAwM0I1MzNGMzNGNDEzQjFERjkyMzNGNUIzNDZDNjdCMzA4MworOjEwNjI2MDAwNTZCRjlBRDczNkJGRUFBM0Y0NTRGOUNBNTMwRTQyRTU5MworOjEwNjI3MDAwRjk5NzkyM0ZDRDQ1OUY1N0FGN0ZDMDAxNzAzQTJBRjlGOQorOjEwNjI4MDAwMUM4MEVGMkYwM0UyRDQ1OEYwREFERDBCMkZCNzREMDA1RQorOjEwNjI5MDAwM0YwMjQ5OUJDMkZEQTU0N0E2ODM5REY0RUQ3QUQ5MjkwQgorOjEwNjJBMDAwRDIyRURFMERFNkEwOTlEMjZGNkQ2QkM1MzQ5MjhGRjVCQworOjEwNjJCMDAwODNBQ0ZFRTAwOTExRUE2RDQ2N0M1NkJFRjg1NDlBNkEzQQorOjEwNjJDMDAwNDczQzMwN0I5QjA0RDFFRUE4NkRGRTYyMEFDODcxMkY1QgorOjEwNjJEMDAwMDkyMzFENDZCRjA3REYzRjlEODQ3QzVGQTIyNEY0NkQyOAorOjEwNjJFMDAwQTdGMzQ0M0JEOUNCRjlDQ0RCRkFDODA5RDEwMUU1MTVCQQorOjEwNjJGMDAwOURDMDY3REUyODNBMkFFRkQ1MkYyMUE1OThDRUU3OTVENQorOjEwNjMwMDAwNDQ3QkNBOTEwQjY5RjU0N0U0NDcyMDBGMzRCODkwMDBFRAorOjEwNjMxMDAwQjMyQjFBMzYzRTkzN0Y5MENFQUJBQkY5MzcwRTIxNEY5RAorOjEwNjMyMDAwMkY0NzE4M0Q5RTZDOTlGN0YzMUQ2QUZGRjJBNjlCRkI2MQorOjEwNjMzMDAwNDU5MUY3MDJGODlFREFDNkVDMjBEMkNFQ0E2QTM5RTg1NworOjEwNjM0MDAwMDBCQkIzN0FBREVDQTI5NDRBQUEzNzNGRkZDMkIzRTBEOAorOjEwNjM1MDAwQUY3RDZBNDY3RkFENkFGMzlCMUY4REE3RjVBQTJENzJBQworOjEwNjM2MDAwQ0EzNEI2MUM5QjkwMTZDMThGOTdGRTZGRDFBODA4M0UwOQorOjEwNjM3MDAwMkE3RkY5QTZBMjhFNjRDRkVGNEQ4QUUwQTU2QUNCMUVENAorOjEwNjM4MDAwODU4Q0VDMEJDNzQ5MkQ3Qjk0OTAyRDA2N0U1QTBFNEVDMgorOjEwNjM5MDAwMDFCQkE1NjFFMzc3MEFGODVGNUZFRTE2NDg3QTZFREYwRQorOjEwNjNBMDAwRjdDQkQ3QkU4OTdBMTFFMDg0RjhFNEY4RUFDNTVGMUYxRAorOjEwNjNCMDAwQkMwNUE3RUYyOEM0N0U0RTkwOTc2N0MzOUI5RkNCRTk4RgorOjEwNjNDMDAwOUFEN0VDMjQ5MUNFQTNGQ0Y3RTZDMDM0QzBFN0NCNzc5NAorOjEwNjNEMDAwM0E2MDNEOUQ1MjFEQTNGM0Q1MEZBNEI5RTlGN0NCNjVGMworOjEwNjNFMDAwNUY5QTEzNEJGNkJDN0NDRDVENDg3RjY1NDI1RDlBMTM4NgorOjEwNjNGMDAwRjlDOTlENjk0MkQ5RURDQjg0NzUyRTY4QkEwMUQ3NTk4OAorOjEwNjQwMDAwNEEzQzQ4ODdFNUFCQzVFMjAwMkRCRjkxQzhENDJEMzE4OQorOjEwNjQxMDAwRjhBNDI4ODlGMTQ5RTczQThBNUNCQUNFNEVCMEZCQzFBQworOjEwNjQyMDAwREVGRUFEMTg1ODhGRkVFOUVEMDRFNEZGNUQ3Q0NENTQyRgorOjEwNjQzMDAwNTM2MkZEMUIwQkMzOTcyREM5QTRGOThCMTYwM0ZEMzZDMAorOjEwNjQ0MDAwM0ZEODAxNzgzQTM2RDA5RDBFRjNBNDcwRjA3MUI4MDlBOAorOjEwNjQ1MDAwM0ZEMDcxQzUwRjJFNEY2Nzc4MjJBQTU0QzRERkEzRkEyQworOjEwNjQ2MDAwNjAxMjNDODdGRTFEQjJEQjlBNkY3ODhGQ0I0RkY2RkQzMgorOjEwNjQ3MDAwODVGQ0ZCNzRERTcxQTBERjNBRDNBODdEMUY2MzdENzNCQQorOjEwNjQ4MDAwNjE3REE4MTdBOTlFRDNEMTk5OEVERjE5RkYzNzNGQzQyQworOjEwNjQ5MDAwRjg1REUzRkZDMDhDQTlEMDdFRUE0M0M2NDdGMDFFRTg1MgorOjEwNjRBMDAwMTMzQUFGNjAzQUI2RUZCOTVFNDBGOTYwMjZDMTU4N0M0NgorOjEwNjRCMDAwREUyQzczM0UzN0I2N0IyOUJGNDI5QzQwQTMxMzNBN0Y0NAorOjEwNjRDMDAwNDk0OEQwRDMwQkZENEUxMkUyMDFGRDk1RDI5NUY0N0RFMworOjEwNjREMDAwQkQ3RDAzREZDNTdFNEFFNEI5NEVBRjk0NzFCOTUwOTBEQgorOjEwNjRFMDAwNDRFNTQxN0M0NDFFOTBBNkQ0NzNCMjIzQUI2NUUyMDMxRAorOjEwNjRGMDAwOTNCM0ZBNTMzM0ZBRTNENTlCRTU2MjU4RkZGMTRERkJCMgorOjEwNjUwMDAwM0VCQTk5RDJGOUYxMTY4RDZGOEQ3MjM1OUE2RkNCQjc2RAorOjEwNjUxMDAwQUUxNzgwNEVBM0Y5RjY3ODM5RDVFMkIxRjg5NjNFOEZFMgorOjEwNjUyMDAwQzlCN0U1QTFGRkE3NzI1NTgzREZBQzI0QTMzQ0E1RjI1MAorOjEwNjUzMDAwNzExMDk4MTBGREMxMzE1QTNFN0UwM0Y2NTY2QTVGRjkxQworOjEwNjU0MDAwNDhGRjNFMjQ0NTdERTk1MEEzM0Y4REVFQTgwNTM3MDg1RQorOjEwNjU1MDAwRTQ3QTJGN0Q2QUY0RDc0QjlGMUFGRDQ1QUZENzA4QkY2OQorOjEwNjU2MDAwRThGNkMxRTAyMzUxM0EyOURFNEUyRDNBOEFDRkVBNzY4OQorOjEwNjU3MDAwMjE2MDQ2M0VGN0JEMzVBMDEwRTFFNDQ2RjU0NkZDNkZDQworOjEwNjU4MDAwMEQ0OEQxRDcwMzUxRjU5NkE4RkVFRUE4N0E3MTU0N0YzNQorOjEwNjU5MDAwNEY1NEJEQ0VEMEJGQkE2RDlGNDIxMEZGNDE0MzNGRjM3MQorOjEwNjVBMDAwQTJFN0M4RTczMUZDNDE0REZGNzg1QjRGMjgzRUEwOEI0NgorOjEwNjVCMDAwRUNCMDAyNzI0RjVFNDI0RDM3ODhBRkVEMTIzMUJFRDY1RAorOjEwNjVDMDAwQTM4NjFENDlGNEY5MDM1NkU2QTdGNTM4NzkzRDkxRDUyMAorOjEwNjVEMDAwQzNBOUNBNTI5MDdCREFGM0IwOTVBMDdGREU1MzFDNzYzNAorOjEwNjVFMDAwMjRFQUZDRkY4M0VEQTI0M0E1RURBMTAwOTlBQThGMjMyNQorOjEwNjVGMDAwNDRFNkQzODBGODBFOTFGRURBNTlEQ0IwMjdDRTkxOEZCNQorOjEwNjYwMDAwREY4QkNCMDkwMEZENUQyRURBNzIxNjgxQkZFNzE3NURDNworOjEwNjYxMDAwOTQ3Q0M4RkNDNTM3MzkwOEE1QjM5RUY2MjFEN0NDQTQxNQorOjEwNjYyMDAwQ0YxN0JDMkQ4MkI5NEREMUUzOTYzMjI5RERDQ0UzNzQ2RQorOjEwNjYzMDAwN0M5NEY4OUVCRTg0QUU2RjVFM0JCM0MzRTcyRjhGNEQ1NAorOjEwNjY0MDAwRjc5NUJDN0ZBOTZEQTEwMkYyOTVEQUQxODdGNDcxRDFEQgorOjEwNjY1MDAwNEFCMjFDRTlBRUJDMjlFQTc5RkI1NUM4MUY5NTUxRkMyQQorOjEwNjY2MDAwRTFFMUZFQzMyRThEM0YwQTQ4MDFDQTE3NDI5OEZGQ0JENQorOjEwNjY3MDAwRTVGMkU1NjJERTM1MzMyOTFFN0FGNjhCQzRBQzgyM0Y0MworOjEwNjY4MDAwMkI5MkE1QjBDRTRENDIwMEUyMDVDNDk3OEE3QzU2NEJCMgorOjEwNjY5MDAwQzIyODBGMzUzODc1MDExRjBERUI1RjRFNzU2REZCNTMyQQorOjEwNjZBMDAwRDEzRDQwMkZBRkZFMjFGRjM5NUE3NkJERkFFOUQwOUQ4QQorOjEwNjZCMDAwNTA3RkVERTM5QzNGOTBCRUZEMjdFREZFN0UzNkU4QjNCNAorOjEwNjZDMDAwOUVERDY2OEM4QkY1RUNGRTU1Q0UzRDUwREY2MUM2Qjg4NQorOjEwNjZEMDAwNThDRjEyQjMxQkY4QzBCN0RCMUUzODFGREEwNzMyRkZFMgorOjEwNjZFMDAwQTE2MUQ3NzdGOTIxRDRBRkY3MjNERThFMjYzMUZGRTVGQworOjEwNjZGMDAwNjRGQjlGMEYwODI5NTBEMjU1ODFGREIwM0IxRUY5Qzg5RAorOjEwNjcwMDAwQkJDMzhBRkU3QUNGQUVFRjhBM0NCNjdGREU3QTZBMTVDQgorOjEwNjcxMDAwRTI0MTdBQjQ5Mzk5NUI4MTdFMTM1OUZDRDhCQjczREM1OAorOjEwNjcyMDAwRjM4QkU5Rjc2QjVBRjcyOEYzNjhGQkE0RDdGRjlBMEZBRQorOjEwNjczMDAwRjJCMzY3MkJCMzhCQkFFNUQwMUFFMjIyRTRFQkE0QjIzMgorOjEwNjc0MDAwODc2NDg4RjMwMTMzNjUxMUYyNzhGMjg2MkI3Qzc5QjE4NgorOjEwNjc1MDAwRTBDMkUwRDA0M0UxMDBFQkEyNzAyOTA3QjlERjFGM0NBMworOjEwNjc2MDAwRTI5MjE1QTRGNzdGM0Q3ODlDOThDREU0REE4RjA4QzRCNworOjEwNjc3MDAwODUyMjcwMTFEQ0VDQjkzRDYwMTE3MEZERUNGOUVFRUY5MworOjEwNjc4MDAwRjI0MUVFMUM2RjU5OENGNkNBRDlENjNEMjJGOTVGOTVCRAorOjEwNjc5MDAwMEVGRUFCRUIxNjgyRTdCMkVFQTlGRkIyRjg2NkY0RkY4RAorOjEwNjdBMDAwNUU5MjhBRjM4Q0U2ODNCRTc0RkVEQTRGQjBGRUIyRERGMQorOjEwNjdCMDAwODVGMzNENDdGRTJGRkZERjg2RjdBRDE0RUY4RUIzRTM4MQorOjEwNjdDMDAwRkRDMUZGQjE3ODdGOUJFM0RERUUzNDgzM0NEQkY1NTcwMQorOjEwNjdEMDAwOENCMzZBRUIzRkRCQkE1RkY4MUZCQTZFQ0Q4RUZGOTVDNAorOjEwNjdFMDAwNDlGREIwODBGNjdGOUJGODNGMUM0QUU3RDk5NEJERUY4NgorOjEwNjdGMDAwODMwMkRBM0E1MTIwQzVCMUVDOTM4RjkyOTkxRjM4NTEzOAorOjEwNjgwMDAwMzBBMUZGNDcxMjA1RUVGRjMxQkY2OTAwQjcyMzA2MkMwOAorOjEwNjgxMDAwMkM0NTdCNjM0MEY2QTM2ODM3MTA0OTVEMDlGQjc3QkZDMQorOjEwNjgyMDAwQ0E5OUU3N0ExODdCOENGQUM0MDM3NUU3QTVCQzZFRjRBNQorOjEwNjgzMDAwMUY5RjEzODg1QkEwMzZFODgwOUNBQkY2ODNGRDlBOUQ3MgorOjEwNjg0MDAwMkRBMjdENEI0QkI0NkJERjcwNEM2NUNGQUIxNTgzREY1NgorOjEwNjg1MDAwNzQwNUQxRDVFOUJBQTZBNDE4RkRBMkM5N0NCQ0NCQzlFMAorOjEwNjg2MDAwRTAwRjBCRThGQzJGQjdDOENFMDAwNUQxMTUxMzNDMTI4MgorOjEwNjg3MDAwQUNFNzhBNEM4MUY4NzVGQjQ3OTNBM0ZDQTdBREQ0QzY1RgorOjEwNjg4MDAwRDRDN0Q3RkU1RUY4NTk1Mjk4OUYzOTUxMThCQ0IyMTgzOAorOjEwNjg5MDAwRTAzNzUwQzRGOEUxNTlFMTA3QzYxRUMyQUIyMEYwMzAyMgorOjEwNjhBMDAwRDg0NTkyOEJDMTJGQTlDNjg1RjE1N0VFNTdDMzc2MzNEMQorOjEwNjhCMDAwRDgyQjkyNkQ2OTA3RjBBRDQ0QTg1RkNDRTY4RkZFQjQ4QgorOjEwNjhDMDAwRTYxN0Y3MDc2N0MyRkQ2Qzg5N0Y1MjgzQkI5NDJEQkEyOAorOjEwNjhEMDAwQURDNkYxMTAxRTFBM0VGRTVFM0M2OEY4RkI0N0YxRjFCMgorOjEwNjhFMDAwN0JDMEM3OTgwODNFQjI0RjM5MjVFMENGNDlEQzFGOThERQorOjEwNjhGMDAwN0NBQTQzQzQ3QUI2NEJDMkZEMTdFRTBGNENCMDI1NEFCMgorOjEwNjkwMDAwRTAwRjVDMkE3RDIwMDI1Rjk2NTlCNjU3QzIzRTgyQzVEMQorOjEwNjkxMDAwMjUyMDVEMEZFQjMyQTFCRjYzMjkxNDEwRUVDMzFCMjVBOAorOjEwNjkyMDAwQUM3RjYwNzI4RTAxNDM3QkZBQzVBRjFEQkY5QjQwM0NCQworOjEwNjkzMDAwRDlBRDMwQzNCQjk4QzVGM0ZGRjJDMzBGOTcxNDQxNUNDOAorOjEwNjk0MDAwODVGRDk1RDFGRjVENERGREIxRjk0RDI0MTg0N0UxQjRBQQorOjEwNjk1MDAwNDAyMjNFNDg3MTU4NDAxNzc1QzgxMDBGMzZENkUxRUZGNworOjEwNjk2MDAwQjJCNEM4Mzg2N0VCREY5RjFDRjk2Nzk3QUY1MUI5NzVCMAorOjEwNjk3MDAwRTg3QzQyQjY0M0M5ODJGRDkyREU2RkZFNTEzQjgzOTdBRAorOjEwNjk4MDAwRjcxRDEyMTg4Q0YxMDZCNzU4QUNEQjY3RkJGNzE0MjYxRAorOjEwNjk5MDAwM0Y1RUZCRTNENkQxMTAzRjlCRDA5Mzk3QzBFNDY5QTE0MworOjEwNjlBMDAwMDlFOEQyQ0JGRDgyOTM0NDREODA3Qzg1OTNFRDQzMTI2MAorOjEwNjlCMDAwNzAxRjcxQkY2OEY3QzQ4OERCNkNFNEZFRjQyRkVBMzEwNgorOjEwNjlDMDAwQTg0QzdBOUE4OTVGMDRCRjg5ODQzMTdFRUI2QkI2QzQ4OAorOjEwNjlEMDAwREMwRjlFOUI2MkUyNzRDM0YxNDZGRkM0MjJEOEI3NjAwRAorOjEwNjlFMDAwREY1RjQwNUY0REQwRTNBRDZCREE5NzUyN0U1RjNDQzAxNgorOjEwNjlGMDAwREYyMURERkVDQTNGMEE1RkYwREYwMUJFMUJBREExMjkyQQorOjEwNkEwMDAwQzUzMUU0Qzc0MjBFQkZFOTdCQkZDNzc4RTcwNUVENkIzMAorOjEwNkExMDAwNEQ0MEJGMTczNDlCMENGQjkzRDUyOURDRUYxQTQ1NDYzQworOjEwNkEyMDAwQzFCQ0E2RUZCNURBMEIwMTJGRkI0NTk3OTVBRUNGREJDNgorOjEwNkEzMDAwN0U0MkYxQzREOEU3OEE4NjI3OEMwRjcxRjQ5NzUyRDgyQQorOjEwNkE0MDAwQkVDMDRFQjk2NTFFQzA3NUU3NTcxNkUyQTNGOEREQUVBRAorOjEwNkE1MDAwRjhBQjYyQ0QzMzI1OERDOUI5MDVBNEU1Q0VGQ0RDN0Y0QQorOjEwNkE2MDAwM0RGODRFRThCMTA1Mjc4MjlGRDk0Qzc4NUMyMzlBRkUwOQorOjEwNkE3MDAwMDhEMkYxQzkwRDI0MDBGQTE0RkM1MjkwMEIyNzM3MTFFQgorOjEwNkE4MDAwRDRFNzE0MjQ4RjgyNUY0REY5RkRDN0ZBMzhDREIwQjYzNAorOjEwNkE5MDAwMkRCRjAwM0JBMEI2NUQ3MDlBNjg3QkFEMTQ1MjIwMUVERQorOjEwNkFBMDAwRUI2RDRCMTQ0MUVGMTZBOEM0OERGQkMzOTI3M0U0RjU1NAorOjEwNkFCMDAwM0FCRTc4Mjk0NTQyRjhFRTFCQkZGMzE2RjhFRUQ3NUREMworOjEwNkFDMDAwMEEwMTdCQzRGRDQ2RDgwMTdBRkJFQkY2RDFDODA3RkQ2RAorOjEwNkFEMDAwQURFQjk3RjVBNDcyQjIwQ0UzMzA3OTE4NEQwRjc5OUJBQQorOjEwNkFFMDAwRTIwQ0Y1OEI0NTRGMTZGMEQ3NzQ3MzY4QTEyQjA2RkVBOAorOjEwNkFGMDAwQTZBNTMyM0EzQjY3RjkxNkY4RkY0Q0JFN0RBOEM5MzcwOAorOjEwNkIwMDAwOEY1OEFDRTNBMzk0NTQ0NkY3M0FGOTk2MUU0QkJFREQ3QQorOjEwNkIxMDAwMjFBOEU5MDBGNzNCNzYwRDQ5MDdCQ0RFRjFCNjlDMUFDNworOjEwNkIyMDAwNEJCRTZEQUU2N0ZCN0ZBRjUwN0U4NEIyQTc5NUNBQjdGMAorOjEwNkIzMDAwOEI3NEYyQUQ5NUNBQjdEQ0JFRUZGREVENUNFNTVCRTBCMgorOjEwNkI0MDAwQkY4N0ZGMzY4MzdDOEJCMURFNDQwRTNGNERCRUU1Qjc3OQorOjEwNkI1MDAwMUY0NEY5OTZERjZBMjJBQUNFN0VCMEE0OUU0REJFMDlEQworOjEwNkI2MDAwQTlENzgzM0RCQzVGNzZDNUM3QTA5RkNERENGRTdFODVERgorOjEwNkI3MDAwRTdFREMxNzc0MENFRkQ1QjJBREIyRjNENTczOTk3OTk3MgorOjEwNkI4MDAwQzZGOEU0QUM3MkVFQkYwOUNFOUE5Q0JCNjMxQjk1NzM0QQorOjEwNkI5MDAwQjlCMUU4OTBDOUI5M0JCNjUzMzkyNzAwM0QzMjM5NzdDRQorOjEwNkJBMDAwQzcyRUMyRTI2RjUxRjI2RDc4MUZGOTQ2QjA3RjZEOTAyQgorOjEwNkJCMDAwQkRFRjZEQ0I3REU2NTYzQURFMjhCN0VDQjJEMEZFQTMzMgorOjEwNkJDMDAwMjJGMjZFOEM1RURFRkQ1QkFBODQ3MEVFMjNFRkY2OUZGMAorOjEwNkJEMDAwOUJCQ0RCQzZFNTFEOTU2MzgzNDFCRTQ2RDM4N0FCM0RCOQorOjEwNkJFMDAwQ0U1MERGMzlBRTczRDMyRjgxNUZERTE1NzE3RkYxMDM5NQorOjEwNkJGMDAwMTNEQjA3N0E2RjVDNjcyMUQwRDcyQTNFMUYyRkE3QkYxMAorOjEwNkMwMDAwRUU3QTFGOEUzRkU5MERCNkJFOUE0RDJDRkU1RERCQ0FCMworOjEwNkMxMDAwRUNDM0RBNjYzMUEwRDI3RjRFMTlGRkJEMDJGM0FGRDhDNAorOjEwNkMyMDAwMjU5MDc0NUE5RjYxRjYzRjZEMDMxOUZDQTI0Q0I4NUYyMgorOjEwNkMzMDAwMzRBRDQwNDcwRkYzQzc1NjYxMUNCRkMxRUE1ODQ3MjgxRgorOjEwNkM0MDAwMUZDRjk3ODgwNUUyRjU1NUI2Mjk1RjgyMUQ1QzM1OTYwMgorOjEwNkM1MDAwQzVGN0FCRjg3M0MyRjMwNkI0M0NDOEQyQjZEQkRGMUE5MworOjEwNkM2MDAwNDBGQUU2MEY0QzM3MzMzQzRFN0Y1RTA4QUNDRDg1RkNENgorOjEwNkM3MDAwMjU2MzdCNTU1NEZFRTM2MzdDOUQzM0M0MTBDMjg1QkMwMQorOjEwNkM4MDAwMkZDNkNDNjM3ODJDMUExRUZCMzkzQ0U4RkEwREYwMDhBRAorOjEwNkM5MDAwMDgzMUUxNDEzMTNBQUQyMDJEQjJGRThBNzc0MzRCMjFENAorOjEwNkNBMDAwOUU1RkIxNEFDMDdENUYwRDFFRDFFQkQ0RTBBM0M1QTdBNgorOjEwNkNCMDAwQUJGOEZCREVGNkRCNzFERjNGN0FGRDFBRkNGQUFDNUI2QQorOjEwNkNDMDAwODM2N0Q0RkFGREE5N0NERkFCODA4Qzg2N0MxQTRBMEZERgorOjEwNkNEMDAwMjgzRjdDQkZBNjcwQTBERjI5OUU3MDdFQkE1RTFFM0Y1MworOjEwNkNFMDAwQ0RFMTMwREEzRjYxNTIyNjAxQjg5MTNBQTA5RkQyQzY3OQorOjEwNkNGMDAwREJERkNBQTRFQjFGRjM4OTNBMEFENEU0QzVFM0NEMUU1NworOjEwNkQwMDAwRDg0N0RENjgwREEzN0NEM0U4QUI1M0EzNzczRUNFQ0U0NgorOjEwNkQxMDAwQUNCQTg5RThBRkI3MDk0RUIwMkZCQzQxMkJDMkQxNEJGQQorOjEwNkQyMDAwRTlDQzRBQkJFQzVCRjVFRDE0MEU0N0E3MTlGOThBRUJFOQorOjEwNkQzMDAwMUQwQTc3MTNGODUzOUExRUEyNzAwN0JFMTlERDdFMDI1MgorOjEwNkQ0MDAwRjc3MzBCNDkxOEY3NEI2QTFCMDU1NzkwQUVBM0I2OEQyNgorOjEwNkQ1MDAwQzE0QjkzQjdGNENGQTZDNzQ3MEM3QTk0NjJEMTIzODE3NQorOjEwNkQ2MDAwMjA3MTUxNDQwRjU2RjE3RUQzQ0RGRThGNjAxRjY2M0FERAorOjEwNkQ3MDAwQTVGN0I1MjQ4MkM3RTFGNDNGQzA2MzM0OUUzNDc4OUUwMgorOjEwNkQ4MDAwOEQzRUJGRTBGNkM3NjY4MEEzMERFMDE1NjY3NjU0OTA5MQorOjEwNkQ5MDAwRUEwNTdCQTRERDJCRjkwQzcwOUNGNEVDNjk0NjVGQkIyMworOjEwNkRBMDAwMDQxNUY2MTM3QUUxMDRGNDRBREJDN0I0MzM3QTA1Qjg2NAorOjEwNkRCMDAwQTkwMEY3RjYxMjExRUFBNTE0QkVDOUI5N0RENzA5RkJERgorOjEwNkRDMDAwOTc3QUZFQUREODc1OTA4REJGNUE3MDkxMThGNEFCQUQxRgorOjEwNkREMDAwQkIzRkZBRkQ0N0U5QjYzMzhBNkVERkIzODZERjE5MEQ5NAorOjEwNkRFMDAwNzRCQjRCNjA3MTg0RjY0NEMzQkVBMzM5OERFREJCNkY5OQorOjEwNkRGMDAwQjQ1MkZBODZGREFFQjc2NUQ3M0FCNTJGOUY5RkU2RjAzRAorOjEwNkUwMDAwMDRGQjVGRDVDNUE1NDZDMDAyNjAyRjcwODMwNUYzQ0Y5NAorOjEwNkUxMDAwNzAxRTgzOTk3REE5OTdBRjlCQUQyNEY1RkFDMkZFQzc3QQorOjEwNkUyMDAwNTdCODNGRDA5RjdEQTNENTQ3QzJGNzQwRUVCNUQxRUYwRAorOjEwNkUzMDAwMEQ4RjdDMkY1QUJFNkJGRUZFRDlENjk1OUNGNjhGQUQ3QQorOjEwNkU0MDAwQUIzNzdGOTM3NEUwRkU5MzM5RDE3MzRGMEFDNjdGNThGNgorOjEwNkU1MDAwN0VEMjhEM0MzRjg5Q0UwMEVEMkM1REJGOENENDMxRkRDMAorOjEwNkU2MDAwRjcyMzE5MTZENEMzNzdGMkJDRjhDQjQ1MUJGMUQxNzVDMworOjEwNkU3MDAwN0NFRDk2OTE0RUE5OTZGRUREMjUyMDk3Mjc1MjNENDI0NgorOjEwNkU4MDAwOEJBRkRGMTlGM0YxQUREODJFRTI3RUQ0MzVFRjI2RDdFNAorOjEwNkU5MDAwQzAzRUREMzUyMDhDRThGMzZCMEEwNEQ0QkYxRkMwNjAxMAorOjEwNkVBMDAwRTNDMDhFQjUxMEI3OTk5MzMwNkQxRkZCQTNDNEMwQzM2OAorOjEwNkVCMDAwQjRCREEwRDkzRjQ5QTVGQzM0NkE0M0EwMDE0QUQ3QTQ3OAorOjEwNkVDMDAwNzBDQTdCMDBCRjA5MjIwMUY4NzVCODkzMjc4MUZFQkEwQQorOjEwNkVEMDAwRjMwQjUyMjBBQUE4Njc3MTlDNTFGQjQ5MkFGNDFCRUZCRgorOjEwNkVFMDAwNEU0NTc3NjA1Q0VCQ0E0OTEwMUY5REIxQ0Y2NjAzM0FFRgorOjEwNkVGMDAwMUZERTY0MjIxRTFERkQ4RTI3ODEwNkQ4ODcxRjc3RDhDRQorOjEwNkYwMDAwN0QxREYwNUYzOUI1MTcyMEVFNUNERUJFQjZDMTAxRjUyMAorOjEwNkYxMDAwMjZDMUE1RDJGMUJEM0VDRjE0MDc5REQ3RTZDNjEzNTNCNworOjEwNkYyMDAwMkUwNDNFQTRGRDYwMTg2RjEzRUJFNzZEMTY1QzkwMkFFQgorOjEwNkYzMDAwNUJEQUJFMDJGMzcxNEE5QjA1RTI4NEZFMDE4MTU4RDhGOAorOjEwNkY0MDAwQjgwMTBCMUQ3NzczMTM3RDlGRDZDQkUwN0QxOEI3Rjk4MQorOjEwNkY1MDAwQzQ4N0Q3MDE5RkJGMjNCMkY3MzdCMTdERUI1MkZBOUVBQQorOjEwNkY2MDAwMEFGNERBN0MzQjhFNTdEMTI0OTAwQzNBNUVGOTI2MjYzRgorOjEwNkY3MDAwRkZDQkRGOTE1REQwREVCQTY3MTVFQUIxNjlGNDdCOTk4QQorOjEwNkY4MDAwQjkyMEVGODM5M0ExNEU0NjBCNEVCMEI3NDlGNkNEQzg1QQorOjEwNkY5MDAwRDczRDlDQUY0OUQ3NEMyNjM3MDQ1RUU3N0U4MzY2MzdFMgorOjEwNkZBMDAwRUQ0RDYzRjlDMUE1QUVDNTRBMzIxREU3QkRCMUE5QjkyMgorOjEwNkZCMDAwOTAyNkUwNkQzQjgxRkJEMTg3Mjk5QzNEMTRDRTFGRjBDQworOjEwNkZDMDAwN0M4RTdENjMzRjU3NDIzQUZERjM1OURBMTBBNEMzRjkzMgorOjEwNkZEMDAwNkQxMzMwQ0Y2MTAxMjlDNjNDODdFOUUzOThCREY2RkUwOQorOjEwNkZFMDAwQTVENjgwNDBFN0Y1QkUxQ0NFODZFN0ZCMkUzNUEzRkQ3NworOjEwNkZGMDAwREJCRDU5QzZGREUyRUU4MTIxOEM0Rjc3MzZDOTA0RjIyNAorOjEwNzAwMDAwMzUxQTlBNDQ5NDhCOUQ5Qjk4MUUxNzU3REYzMDI1MTM5MQorOjEwNzAxMDAwRTBCNzVFNzA4MURDRENENzM0NDkwMUJERDYxOTEwRjBEMQorOjEwNzAyMDAwRkQ0OUFCRUY0QTYzN0UwQzkzODc5QURGNTZFQUFDMzA5QQorOjEwNzAzMDAwRTg4RjY4RjlBNkM5QkYxQTBFODc2ODM5NTdBM0U5OTk3RQorOjEwNzA0MDAwMjgzOTU3MDNGQkNEMEUyODhEQ0ZCREM0QzZFNDFGRDgwOQorOjEwNzA1MDAwRkQ4MEY3RTBGNzQ4QkZCNUVGQzgwNEVDN0VFMUYzQUU4MgorOjEwNzA2MDAwMjk5OEI3MDU3QTkzQjY4RjZCMTdEQ0IwQ0Y1RkZFODk4RQorOjEwNzA3MDAwMzk4MEY2NkFBMDY0Q0U0RjQxN0U3RjZBMjY4MjBBNzkwMworOjEwNzA4MDAwRjAxNEVFNTQyRThDMzU4N0ZGRjgyNDdERkVFNTA3MTZBQworOjEwNzA5MDAwQzg5MEExNzQ1MjgyNzBENkYyNDUwQkQ3QjNGQzk2QzI0OQorOjEwNzBBMDAwMEY1NkE2OTUwMjFDMjYyN0EzOUMyRDZCMTQ4OTQ3MjdGMworOjEwNzBCMDAwMkZCRTE0RENEN0REQ0NFNEIxNzNCRDRFMUUxNTJBRkUwNQorOjEwNzBDMDAwNTJEMDVGQ0U3NDI2MDdENUY1MzJFNDhDOTA2RDVDM0VDRAorOjEwNzBEMDAwNTE3QkRBMEQ3NjQzQzVGNjE1NjkwQUVEQjc5NEU3ODM1RgorOjEwNzBFMDAwNTRFQzVBOTE0NjQ1MDM2OTAwQkQ0NUZCNTcyODZDRkM5QQorOjEwNzBGMDAwOEFERDgyNzNBRDZFN0NFRDdENkQzQzZEMUM2NUJCNzE3MAorOjEwNzEwMDAwOUMyMUJCNzhGRDFDQzdEMUU2QTE3REJGM0Y3QjdDRUNGOQorOjEwNzExMDAwN0Y5QzVFMjlEMEYxQzZCRTJGNjI5MkYyRDhDRkE3MEQxOAorOjEwNzEyMDAwRDFFRjc3NjhBNTE2N0YyREZBRDA0NERDM0FCODhERkRGMworOjEwNzEzMDAwNjMxQzcxRUJFOEEyNzUwQ0U1NkY4QUI3QUJEQjk4M0Q3OQorOjEwNzE0MDAwRDQzQUU2QTA1MjUzODg3NTI3RjA3MzJEOEZEM0Q2NEVDQworOjEwNzE1MDAwNjZGQjU2QUQwNTFGREMwRkZDM0RBRDUwNDAzQTIwM0VBRQorOjEwNzE2MDAwOEY5MjlDODI3NjkwMEFGMUYxQjI0MkY2N0UxOTdEMUZEMQorOjEwNzE3MDAwRjhBRTc1MTVFMzQzMkEwRjU0OTAxN0I1NEQyQkE2NjA1MgorOjEwNzE4MDAwRkY2NjQxODVGMTVCRDc5NkEwOUUyRjFGMkIxMjZDNkY3NworOjEwNzE5MDAwM0U4ODc2NDc3OURCQzExNEUwNTdDQTlGMkI0MUVGRDY3MgorOjEwNzFBMDAwNUU2Mjc2MDI3RjY4N0NBN0YxRjFGQjMyQ0IwRjIxMTY3RAorOjEwNzFCMDAwRTc0ODM4MDc1MDk2QTZDNkU0NUZGMTFEQzJGQ0Q0NERERgorOjEwNzFDMDAwMzJGMjlENzcyQ0UzQ0JGNzM3OEJDOENGRkIyRUJENjkwRQorOjEwNzFEMDAwMEFGMDYxRjc3QUExMUYzRUE2N0M1QTE4RTE1MzcxMzU3NworOjEwNzFFMDAwQ0JENzI5REJDOEZDOTU3RDRENEMzRTc0QjYzMjNCNzE0NAorOjEwNzFGMDAwRDI2QUY5NkFBODk3QkQyQjEzMTZGNzYyRjZFMEI5RjJDNgorOjEwNzIwMDAwNzMxRjNCNjU0MzZDN0VFRThGN0ZBN0NCMkQxRkRENDkzRgorOjEwNzIxMDAwRTc3N0NEQ0I3NEZFNkEwNDVFOTMyRUJCREI4MTcxRkFGNworOjEwNzIyMDAwQ0I2NkUxN0EzNTM5NTQyQUIxN0NBNkY5RkVDNTJDREY0QworOjEwNzIzMDAwNTc2Mjc5NkY3RkY3QkNBMkU2RjE2MDlBM0QyMjQ3NDQxRQorOjEwNzI0MDAwQTBGNzQ0OTYyN0REMkMyM0JENDdGM0UzM0ZDQTQ3RkY1MQorOjEwNzI1MDAwMkNCRURFQzZFOTQ4OUI4RkI4OEJCRDBGNzk2NTQxMEEwRAorOjEwNzI2MDAwQzc1RjZEN0ExRUYzNUFCRjdBRTlFMDc0QzA3M0Q1NEVEQQorOjEwNzI3MDAwNEFCRjc0QkRERDlCRUMyNDA4NzI0QjBBQTBCRUE5NkMwQQorOjEwNzI4MDAwMTUzMTdGOUM0OEMxQTJFQkVDN0FGRTY0Rjk0OTU1QUZGOQorOjEwNzI5MDAwRDg5MTZFMkFCN0IyQkNEM0NBNTczRkNGQzc3QzkxMjVDRAorOjEwNzJBMDAwNjFDQ0JCRjJCREM0RUQ0RDVGMjgxRkU4QkI1MjYyNzlEMworOjEwNzJCMDAwNTJEMUZDM0UyMTlERDk5RjVEREJFMzY3QzIzQTg0MEQyQworOjEwNzJDMDAwN0I3MEJGQjVCMkU1MjYxOUU4QUY1NzdFQTRDQjVBM0YxNQorOjEwNzJEMDAwRENDN0Y0NTFGQTg1N0Q3Njk4REY4QzkxRkFGOTJENDY1QQorOjEwNzJFMDAwM0M3NTZENjRGQzVGRDkyNjA3QUMzMEJGMEQ2QjMxOUVEOQorOjEwNzJGMDAwRURERDcwMDJGM0UzMjdCREIyMTlFMzA4REUzNkQxOTg2NQorOjEwNzMwMDAwMTdCOTQxMEM5QTMxN0Y1MzNDNjg0NkJGQzY5ODlGNThDNQorOjEwNzMxMDAwREI1QTgzRkI2RUI1MkQzQ0ZGMkYyQTJGQUVFQTk1NUQxRAorOjEwNzMyMDAwQUZGQTI4NjhBQTdFRjlBMjAzRTRDMUIxOEVGNTBFODBGNworOjEwNzMzMDAwMjcxRDBGRjMwQTJGM0IyNTE5RjJBM0ZBQ0YwNzc2MUI1RgorOjEwNzM0MDAwRjMwRDVCMUVFMkY5ODY1Nzc3OTJGQ0JFRjk4NkM3RTAyMworOjEwNzM1MDAwMUZBMDZGRDJBM0YyMzUzNzI0RjNGQ0VFNjA1MTcxOEM3RAorOjEwNzM2MDAwNzg3RUVGQjk5RkNEREZBQzgxM0NGOUFFQURDN0Q3QzAxOQorOjEwNzM3MDAwRkNBQkZGRjZGNTFBQzg2RjIyQkJBREE4QTdCQzJGRkQ2QQorOjEwNzM4MDAwMEVGMzhBQjVGNzE2QTczMzdBRUJERUY4MjJFNjY1NzdCNworOjEwNzM5MDAwN0Y2QTQ2N0ZBNzdCNTc2NzBFRTRCNzc1NkZGOTNFMEQ4RQorOjEwNzNBMDAwRTI3MzBCNzc1RDhFRjFDQjg1REIyNkE1OTMxOEYyNUUzOQorOjEwNzNCMDAwMkI4MTNFMDNFNzkwMTcxRThEOEY3REFERkIzMDBGRUJDOQorOjEwNzNDMDAwQUI0RkNDMjhERjdBRjM0NzVCNkE1ODVFQUVDQUYzNDYxMAorOjEwNzNEMDAwMzdDNUNFQzNEN0YyMUM2QjVCQUZCQkU2NTI5MEQ3QURCRgorOjEwNzNFMDAwQ0NCRUVCQ0Q3QjNDNUJCRUU4ODcxNEFGMTc5RDAzRkVBNAorOjEwNzNGMDAwMzZGMUJDRTA5NkFCNjNFNjhCN0UwNUZGQTA3OEZBNzlBOAorOjEwNzQwMDAwQkEzMTVGRjQ5QkQ2MDUzRjdGMTZEQTVBOTNGQkNEMTc0RQorOjEwNzQxMDAwMEQ5RTAzRENCNDNDRkZFQTc0Rjc0QkU5QzA0NzVCRTMyNQorOjEwNzQyMDAwN0QxOTBDNkY4MTY5MDJEODgxREZFNEMwRjk4OEEzNzJFRAorOjEwNzQzMDAwMThGMzQwQzJCQkNDNEVDODdCQUNEQ0Y1MzFGMjRCRjc0NQorOjEwNzQ0MDAwQjYwRjMwREU0QTc4OUU3RDM3RTlGRDYzRjlEMDAyNUZFMgorOjEwNzQ1MDAwNjdCMzlERTU5OTcyRjg0MzFFQUFFQUMwRTczQ0RGOTQ0MgorOjEwNzQ2MDAwRDFCMTk2ODdEQTVGRkU2OTI4OUQ5RjFGRTZFNzBFNkExNQorOjEwNzQ3MDAwQThERkM0RjJENDIzNzlBOUMyNThDMEQ3NDE0MzVFQUY3NAorOjEwNzQ4MDAwQjZFRUU4RjE5QzVDOEU0NkYyQUE2M0U3Rjk2QTc5ODQ2RAorOjEwNzQ5MDAwN0RGMUM1RjQ4QTk2MzdEREJEOTZFNzVCRDNFN0Q5QTNDNgorOjEwNzRBMDAwMjA0RjhFRTk3MzZGNDBGODM4MTY3RUI1QkNFQTNGNDQzMgorOjEwNzRCMDAwRTE1NzVCNUY3RjdDQTFGMUU3RDlFNkZENUY4NUNCQkI0MAorOjEwNzRDMDAwRTkyQzlFQURDMUE3RUIyRkIxRTVGNEI3OUNERkE5REY5NgorOjEwNzREMDAwRkE0REJBQ0VCRjlEQzNGRDU2MEQ2RURBN0M5N0I2MzAxRAorOjEwNzRFMDAwQkJBMjZCMDNGMzFGQTJGOTlCQUVDNzFEMkJDRjVFQ0FENQorOjEwNzRGMDAwNjBGNjZGNkREQjlFN0M5MDQzNUQ3QkI3NzNCQTYzNzRGRgorOjEwNzUwMDAwNURCQkU5MjBDQkQzQTU3MjNCQTA5N0RCODRDNTkxQTNEQgorOjEwNzUxMDAwQzc3M0YwRjFCQ0VEQjFDN0YzNkUzQTExNzNCQzYzOTI1RgorOjEwNzUyMDAwRkIyNjk4RkZCMTBFNjY0NzFENkIxMUE3MDY2MjhDN0Y4NAorOjEwNzUzMDAwOUFFQkE1REU3NURCMTVDQzk3MTIxRDcxNjg0RjJEQjQ0MworOjEwNzU0MDAwOEZGRDI0MjEwNTRBMDVGMzdFMUExNkYzM0NBMUZCNUM0RQorOjEwNzU1MDAwMTkwMEU3MDZGQjk1MDRFNkYzMDBDMDQ3MTc3RjkwOURFRQorOjEwNzU2MDAwMUUwMjc2OUM5QzUxNUMyOEFBOTFGOTZBRUQ0QThBODk5MAorOjEwNzU3MDAwMDRGNEY4OTc4MkQ5MjBERjBGMTQ3NENBMzBERTY3NTEwMworOjEwNzU4MDAwNzE5M0NGMjRCMjM0OURDRUVCMzM5RkUwNUFBQ0Y2NkZBQgorOjEwNzU5MDAwNzc2Qjc1Q0ZCREEyMjFDRTUxNkIwRTFGMDBGQjlEQkMzQQorOjEwNzVBMDAwNkVDNUI4QjVCOERCRUFDM0I4RDkxQTJCQUU3M0RGQjY2RgorOjEwNzVCMDAwRUY1RTAwNzg3NUZGREM0Q0Q4M0UwMjI1MEMyQTE3Q0ExNgorOjEwNzVDMDAwNzhGQ0EyNzNEQjc3NkJGRTBDNzYyNkJDNENCRjVGQjZGMworOjEwNzVEMDAwODZGNjA3RkI3QTUzM0NGQTAzM0Q1QjEzRjJEMTlFN0M5RgorOjEwNzVFMDAwRkQ5RUU5MjAzN0NBNDA4NzgxOURGNzRBN0FBMDgxOEVBNworOjEwNzVGMDAwNzcyNDk1RDU4RjZDMUU4OEU3MDlBQUI2REEzMURGNzAzQgorOjEwNzYwMDAwREZCNkQ3NkE0MUZFNzdCRjEyMEZEQkQxRTQyQjM5RjQyNgorOjEwNzYxMDAwMzdBODdCNzcyNjkwQjUyQURBODFBQTVFREY1NjEwNDkxMworOjEwNzYyMDAwRDVEQjc5NTU1MDM3RTRCRjEwRjREMzMxMUU0N0U5QjlBMworOjEwNzYzMDAwQUEyRDAxQ0Y4RkU4RkE3MTdFRjY2NUIxRjMzMkMxMkMyNQorOjEwNzY0MDAwRTAzQjZBNEYxQUJFQTNCNTVGOUYzMTk4OUZFRjBERkZENQorOjEwNzY1MDAwODREREFGQzBGQTdCOTU3MDI5QUJGQkIzMThERjc2NjA5MQorOjEwNzY2MDAwRkYxMjhENUU3OTdCREY3MTU5RkYzOTE5ODMwREZEQjRFRgorOjEwNzY3MDAwRjc2QkNEQTQyRTE2MUY1NDY3MDhGQzdDRUY1Rjg3QzVGRgorOjEwNzY4MDAwQkFDRjIyQzZGQ0YxRjk1RDAyRjE5OUMwMEVEODYyMERBNQorOjEwNzY5MDAwNDA1Q0EzNUEwOTBFODVGQ0Y2NTcxNUI2M0Y1MkVEMDgxQgorOjEwNzZBMDAwMEU4NUZDRjY5RDVDRkU1NUM3RDEzQTdEOUVDNUU3MDE2RgorOjEwNzZCMDAwRkRBMTRFMkNBMTk3MDFERjM1QUY1OTA5RTQyN0Q1QkNCOAorOjEwNzZDMDAwNkU3NzAzOUU2QjVFRkRFRUM4NzM4NTkwQ0YxNjhGNzE0QgorOjEwNzZEMDAwQUI5QUQ3RkYxREYxNUY2MzBFQ0UwNkZBMEY2RjMxOTNBMQorOjEwNzZFMDAwNzVCNDdGRDc5NkI3NzNDMDhFRTg5MjgzMzk0OTY3RDg0RgorOjEwNzZGMDAwRjdBOTY5MzExQkY2QjFCNTc1MUNBQjBGOUMwN0U3RDcyRAorOjEwNzcwMDAwQjU3MzhCOTVGREM4OEI1RDE5Q0MxRTVEOTFFMTdFM0NGOAorOjEwNzcxMDAwMDNGOURBRTY0NDc5MERFMzg5MzA0RURCMTBGREI5RTY3MgorOjEwNzcyMDAwNEEzNUI2MUM2QkNBOTAwREU3NjhDNUM4MzlDNTI2MTgxRQorOjEwNzczMDAwRjcyQjEyNUE5QTQ1NTE1MjIzODQ3MUZGQkM3MkMzODlBOAorOjEwNzc0MDAwOTFFMDBGN0ZGNkIzMEI3MTVGRUIzMzI1M0MxMkU0RjY0QgorOjEwNzc1MDAwNjczOUUxOTE3QTc5N0NCNERFQTI0QTMyQzYyNUIwRUM3MQorOjEwNzc2MDAwNTk3QkEyMzQ4QjQwRkVBMDc1NjYyQ0Y5QjQzOTIzMUVEOAorOjEwNzc3MDAwRTc1MTc5NkY3Q0NDRjNBMDNCMzhCREFEMDYxQTRDNjU2MAorOjEwNzc4MDAwREY4NTM4ODRGNkREQ0Y5NDgwMDJGM0M4Q0I1NEIxQkREOQorOjEwNzc5MDAwMzIzQkEwQzBGM0FBMEREQjg3MThFRTlEOTBGQ0Q4OEY3QQorOjEwNzdBMDAwRjIxN0MyQTM4MkFDNTQwQTZEN0RFNTRBQzUyMjlCMkExQQorOjEwNzdCMDAwRTFGOTY4RTkzRjdCRTk0RDhDRTAwOTgzOUM5MEE3QzYxRAorOjEwNzdDMDAwNzE0ODM1MTNDNjQxQjVGMzAwOTI1QzZDMDE3ODI5QTQ2OQorOjEwNzdEMDAwRDgyOTg5ODA2QTNGRjI2OTFDNjlDMUQyNDZDRDExQTZCOQorOjEwNzdFMDAwODdFQTA4RTQxNTFERTVGQkI3NjY0OTdEMUNFNDg3Nzk0NworOjEwNzdGMDAwQkY4OEYyRkM2QzcwRkI1NTg2MDNFNzZEOTZFQTg4MEIzOAorOjEwNzgwMDAwRUQ4RTY5NEVCMEFCMDU5Rjg3RkM0MEU5QTFBMTdFQzMxOAorOjEwNzgxMDAwOTBDMzZDRkZERjBERjk3MDBFQzJFNkU3NzBCRUY1M0Q1OAorOjEwNzgyMDAwRDgwNzk0Q0VEMENGRjY1RDQ2MDIwREY0N0I5MkMyRUEyMworOjEwNzgzMDAwNjQyMjA5QzREQThGRUZFMjc4MjBCRTNEMjg3RjZDMjRGMQorOjEwNzg0MDAwRjIxN0E2RjU3ODk0NTBGNEJCMDk3RjFCMEI3RUFFQ0RFMgorOjEwNzg1MDAwNDk4MjYwMzdDNURCNDgzMDlFOTZCNjNDRTk5ODlFN0ZFQQorOjEwNzg2MDAwMUQ4NEQ1MDc1MzcyMDZCOUU2QkNDNEQ4MUU0REQ3QzREMworOjEwNzg3MDAwMjU5REVBOTU4QjIyQkU3RjJBRUFGRDUzNjc3QTVGODNCNgorOjEwNzg4MDAwODdENzMyMjQ5NzlEN0Y2NzcwODlFMzZCRjA0RDc0OUQ5NQorOjEwNzg5MDAwMEUwMTNDRjIxREFFMDZDMEEzMTIzRTcwMEZDMDIzREZFNgorOjEwNzhBMDAwQzZGQ0M0OTQ0NkEyRjdFMzg2NjQzMjc5NzVCRkMwRjQ3RgorOjEwNzhCMDAwMjVGRDJCQjZFOUM2MjM0RTBCQzY0RjFGRTI3MEVGRUQzOAorOjEwNzhDMDAwQUZDNTU1RkFGNEI3NEEwMEQ3M0VGREFERkRGNThGOEIzNQorOjEwNzhEMDAwRERERkRFREY3Q0UyNjNDRjI3QjE5RkYxN0RCMUZCRDczNworOjEwNzhFMDAwQkVGRUYxN0I0MTE1MUUzMkI5MjExMTkzNzYwRTdBNDgwNgorOjEwNzhGMDAwMjZGODVCMDkwN0QyNEExODU1QjA3RDgyMjhCQ0M1MDExRAorOjEwNzkwMDAwRkQ1MTdBODgzQjRGRjcxQ0ZFMkY0Rjg3QkZDMTMxRjBFNgorOjEwNzkxMDAwNEY4MjQ4NzcyNTdDM0VCNDZFQ0JBNEYzQkI5OTRGNzc1QQorOjEwNzkyMDAwNzIzM0RCQzdCQzc1MjE4QjIzREQ3QzJGM0IyRjc0RjBCQQorOjEwNzkzMDAwNjdFQ0RDRkVBRDhEQ0NERkJFNzUxMURCMzcyM0U1RUNFQgorOjEwNzk0MDAwMUM5MDkzRkUwN0RGQkIwRDA2QTFGOEJFQ0QyRjA0ODI2RAorOjEwNzk1MDAwQjk3MDBGNEU5NEZEREE3QkRGQ0U1RDEyRjQyRjg5OEE2OQorOjEwNzk2MDAwQzc2OEY0QTQ5RDVCOUFDN0VERUI1QzRFOUYwQjQ4RDhBQgorOjEwNzk3MDAwMEU3QzFGN0Q4RUJFMzU4M0U1QTU1MTc3Q0MwREVCQkIwQworOjEwNzk4MDAwODVBRjRGRDMwM0JFMTU2NDM4REMwQjIwOUFFMjVDQjBBMAorOjEwNzk5MDAwM0YyMkYyNzNBQkM0QTFCMEJDRTVFQjkzMENGMkU3RTQ3OQorOjEwNzlBMDAwNzAzNTAxRjQxRDc5ODMzRkU3RjcxMURENzE4NTlBQUVEQgorOjEwNzlCMDAwM0ZFNzI1OUQ4RUM3RkI0NzFBNjQ1NzA2Qzg0NUY5RjQ3MworOjEwNzlDMDAwNTU0NEE1N0NBMTlDMUU0MjU0REQzOTM0NkFERjIxQjNBNQorOjEwNzlEMDAwQ0I0RTgyNzExQ0M5NTk0Q0NBQzAyRTRDRTQ3NDk2NzJBRAorOjEwNzlFMDAwNjVBRjFERjYzRTg1Q0IxRDJCNTQzQzA3N0I1MzI2RDMzQworOjEwNzlGMDAwMkYwRjY3MTUyRjAwQkExMDFENjM1RDFFNUI1RkJDRkE2OQorOjEwN0EwMDAwQjZCMUY1MzVDMEZBNzJGQkNFQkI0MTcxQjlEMDBFQkQyRgorOjEwN0ExMDAwOTI1QTEwMThFRjcxNTk2MDNFQTI1OUZENTgwNUZFRkNBQworOjEwN0EyMDAwOEQ0Q0MwRkZFRjBCMDc4NkNGOTMyOTQ5MDFDODdGOTk4MgorOjEwN0EzMDAwRUY3OEY4MDBEMEVERjI3QTI3RUVBMzJEQUIxRjhFRTU5QworOjEwN0E0MDAwQzNGNTE5Njg4NzJFQUQ3NzYxQTlDMUM1RTJGMkJCNDVDMAorOjEwN0E1MDAwMEE2N0NCNzk2QzNDOEJEM0MzRUMwQ0FBODcyMEZGNDIxRQorOjEwN0E2MDAwNzJENjA1QTE2RUM5QUUyMzYwRkY1QTdCRTFFMzQ3RjhFOQorOjEwN0E3MDAwMjhCRDc1MEZENkNENTBBN0E1REMzODBERTE0QkRGMjcwQgorOjEwN0E4MDAwNjUxMDQ3Q0RGMjJDMDdGODU4RDUwQjg4QUFBMzBCNzNDNQorOjEwN0E5MDAwQzYyODQzQkQwRkRDMzRGQUQ4Q0NFMEY3QThDMEU4MjNGMQorOjEwN0FBMDAwMUE3RThGQ0ExRDJBRUMzRjNGN0E0NUVGQkQzNjA4M0Y0QworOjEwN0FCMDAwNkFFRTMzRjhGRDlBRURDRkY1MEIzRjY3MTJEQUIzRjNCOAorOjEwN0FDMDAwOEI5NkNFNkVBMDhGMUVFMUZCOTAwRkQ2OEY0NTc4M0QzMgorOjEwN0FEMDAwMDQ3OTVEQzNDMDNGNzA2MzI5MDJGQzI4MUQ5OUYzN0NDMworOjEwN0FFMDAwNDRBNEVGOUI1NTM2NjdCM0FERDg2RDJBNjRCNDBCRjA1MAorOjEwN0FGMDAwMTM2RDBDOUVFNjhDM0FEQzhGQjNEODE4QkM0NDlCMEZGOAorOjEwN0IwMDAwRTEyMkRCMThCQzQ0MUJBMzM3ODVENzI1ODBERjY4N0NDNgorOjEwN0IxMDAwMUY5RjUzRjhCNTY2OEUwMTNDOEMzN0MwNEI0OTk5Nzg0RQorOjEwN0IyMDAwNkVGMDVCNDVFMTQ3RTc5MUMyRjkyQjFBMEUyOTcwNEVDMgorOjEwN0IzMDAwMjEyRkMyNTdGREQ5NzU0RkQxRjU4MzFFN0Y4NkMyMDcwRAorOjEwN0I0MDAwQ0FENDdFRkNDN0Q0MkMyNjQ3NTM0Qzc1N0I2NDgwNDcyRgorOjEwN0I1MDAwMTJFMUZBQzU0N0IyOEIwODRCNTU4NEJGMEMxRjUxQTFFNworOjEwN0I2MDAwMkVCMDc5OTA2NjIzNUU0NUE3MTQ3NUVGOUJGQTBDRDA3MgorOjEwN0I3MDAwQzFDQUI3NjUxM0VDOTM4QThCQUUzMjlDMjcxNTY3QkFERQorOjEwN0I4MDAwMTM1NTg0QTc0NzAwRkRGQzQ4QkQ4QUY4NUIwMTc4MUNBQgorOjEwN0I5MDAwMDZGQTkxRjk2MzBGNzA3QzNFMDg3QzgyRjg2NUZDRjE2RgorOjEwN0JBMDAwMjhFNzk3QzczOTlGMzRCOEQ4Rjk4OUU1NTM1OTVFNTYwNQorOjEwN0JCMDAwNEE4MTg5REY4NzE2MjRGQUJDQTc0NDU3MEI1MUU4QkNEOQorOjEwN0JDMDAwRDBDNjU2QjEwQ0EyOURGMTg5Mzk3MDNFN0QyRjNFOEZGMworOjEwN0JEMDAwQjg4MTRFMTIzRkI5M0I4MDZCMjVDNTk5NjAxNzI1NzI1RAorOjEwN0JFMDAwRkI5NzVDQTIyNkNFQzI4M0I0NDE4OUY5MjE1NDE0QTIyQQorOjEwN0JGMDAwNUZEMzYxOEE3NTBGNTY4MzZCQUYwNUUyQTZGRENENjczMworOjEwN0MwMDAwQ0Y4QzU3OTEyRTRCMkZDMkY0NjA5MkVDMjk5RUI1ODBGOQorOjEwN0MxMDAwRDY2RDhERjExODFGOEM3Nzc5OEExRTAwM0U2RkI0MjNDNAorOjEwN0MyMDAwOUREQUU4RkNDQjc0Nzg4RkVGMDdBRkNGNjY1RDYxQ0E1MQorOjEwN0MzMDAwQTI3NDI4ODJEMTQ2RjFGQjQ0RTMxMDJCQzBGOTI5Qjk4NAorOjEwN0M0MDAwMzgxM0U0RUI1MzVDQ0Y1MjFDQThGQTdEQTgyRTJFMjdFNAorOjEwN0M1MDAwMUQ4NTE3MThGQ0Q5OTVCMjFCREY3MzVFNjI5NDAzMkI0OAorOjEwN0M2MDAwQjlEQzREOUE2Q0E0Nzc0REVFN0VENDJCNzczREE5MzBDQworOjEwN0M3MDAwOUZCNEQzOTM5MTFGNTNBRThEMkQ3RjFCNjRDNTA3RjcxRgorOjEwN0M4MDAwMEEzNDhDNjRGQ0VFMkI1MUQwRkU4QjIxMEYzMEFFN0Q3QworOjEwN0M5MDAwRDIzMzc0MURDODUzOERCRTk2MTAyNjdGN0MyNENFODVBQQorOjEwN0NBMDAwRkE4OERGQTNBM0Q5QzdDQkUwQkU0MTJFNjdBMTE0Q0ZDQQorOjEwN0NCMDAwNTM5MDZFRDI2RTM1NjE3RURFNzI3RTVGRDY2Mzk0QkU2NworOjEwN0NDMDAwQTBGNDUzRkE4MkYyRDIyQ0I2OUZCMUM0MzIwQUVGNkRGRgorOjEwN0NEMDAwNkJCMDk5NTA1RTQ4OUY5QTAzMzZCMDU3Rjc4QzczNDI0OQorOjEwN0NFMDAwMUM0MTkyNUQxRDZFODgwN0RBQTU5Njc1MDRGQTE1NUEzNworOjEwN0NGMDAwRTAzRTA5MjFCMUQwMDk3NEYwQUQ3REZFQTAzM0U1RTE4RAorOjEwN0QwMDAwNTE3NDBBNDA0N0NFOTQ2MjcyMjgwRjc3MEZGMDVDQjMyQgorOjEwN0QxMDAwRUNCQzk2NDA1Q0YxOTk5NDNBMkJDMDJEMkY4QkY5NUQwOQorOjEwN0QyMDAwOEQyNTQ1MDg0NzBBREY4OTU5QTk5MTcxRDI2NzVFRDkyNworOjEwN0QzMDAwN0JERjE2MENGQjRDM0ZFN0EzQTc2NzcxM0IzQURCNDdBMQorOjEwN0Q0MDAwQ0VEM0YxN0JBM0MwRUQzMEQ1NDc4NkVCRjg3RUM5RjlFMQorOjEwN0Q1MDAwNTMwOEVDMkJGNUU1Rjc3RUU0RDk3QTI2Q0ZFRTE3NjJDRgorOjEwN0Q2MDAwQ0IzM0NERkVENEU0OTkxQzI1MjdCNDcyRTlBMEE5ODZCMworOjEwN0Q3MDAwRjM1RDRBOEEwQjY4MTc0QTlGODlBMjQ4RjI1REY0RThDRQorOjEwN0Q4MDAwMkQ4OTA4ODc3OTAwMDc5MjcxNjVBRjVGRkJFM0MxNjBCOQorOjEwN0Q5MDAwNTcxNkM1QTRCNzY4MzkzNkJGNTdBRkJCRDMwMDRGNDc5NgorOjEwN0RBMDAwNjUzNTdEMTZEMEQzREJGREU5NzU3NzI5RDJBMTdGODBCQgorOjEwN0RCMDAwMEE3QTY5Q0YxMzU3NjE1Q0U3RjAxMzc2MTVFNDUwRDk1RQorOjEwN0RDMDAwRTk4NzUwM0Y5NDlFMUU4NzY1NzlFMzE1QThDRjg1MjdFNAorOjEwN0REMDAwQUYyRTAyN0FFODZDQkEzQ0ZGNTM4OEYzRjhFREE4QjdFRgorOjEwN0RFMDAwM0IxQjI3MERDNUZENDg3RkJDMEFGOTFEOUQ4REI0QkQwOQorOjEwN0RGMDAwMzBEMjBFRjlFMkEyMkU1RjgwNDBGNDVENzdGRTlCMTQzNAorOjEwN0UwMDAwQUE2ODk3NkFGNzlFNTFCRkNFMzExRUUyNDJBQjQ1M0M0RAorOjEwN0UxMDAwRDc1NEZBQTRERDBERjY2NzdGRjQ1N0RBMTQzQjFFMDA0MQorOjEwN0UyMDAwQkExNkUyQUVGNDgzQzNDMThFREVFMzE4MUYwRUQyNzEyMAorOjEwN0UzMDAwRTdBRjYzRkIwODBEOEFGQjQ4MTBFQ0E2MjdBQ0I4MEYzMAorOjEwN0U0MDAwRDk5MDE0RkI1RTkwMDU1OTk3MkYwNzM5QjAyMENCRkREMAorOjEwN0U1MDAwMTRFMkM5QzZFRTI5RUQ5RjFGRDhGNzhGQzAyNjMzRUM3OAorOjEwN0U2MDAwNjMzRENCRUY0NzkxM0M4RTE5ODY3RDM2QjY4Rjc1ODQ4NgorOjEwN0U3MDAwQzc1OTg4QTU5RkY2MzhERUFFRjZEM0VFNjBGOTIyQzQ2NgorOjEwN0U4MDAwMTlCQjVERjMzM0UyMjM3RTQ2MEJBQ0EzQTZGMUY4RDIxNworOjEwN0U5MDAwNEYxMTVFRENDRkUwRjMzRTJBQjM3OTFGN0RDMTFDNTg0MQorOjEwN0VBMDAwMTI4M0ZFOEZGMkZDOTQwQTgxQzE1N0UzODNBM0JERjZDRgorOjEwN0VCMDAwOTEwN0VGQzM4OUE2NTM2MUREODg2N0M2RDE3MUJGREUyNAorOjEwN0VDMDAwMkZBM0RFQThBNkY0ODU3NEI1NkUxQ0U2QzcwQjRGOENGNQorOjEwN0VEMDAwN0IxQ0YyODY0RkJEMjM2MjdCRTU2OTJCQjY3N0RERTcxRAorOjEwN0VFMDAwN0EwNkYyOUVDMkVGQ0EwNEU0RDNBOUZEOTcyN0IwMzgwMAorOjEwN0VGMDAwOTEzMThFN0REQjAwMjYxNzBFNzFGOTUwN0FGQTExQTRBQworOjEwN0YwMDAwREY1RTNBRjEyRjUwODBGRjRBNEYzRkM2RTg3QjgzODAwNworOjEwN0YxMDAwRjc1NjEyNUZGNUJCMTNDRUUzRjQzOTFFREVBRkI4N0EyNQorOjEwN0YyMDAwMDlDMEZCMTIzRkVFOTM5NEFEMzdCQkMwMUU4OEM2RjM2OQorOjEwN0YzMDAwQTEyQ0Q1MTBGNzI4MEIyREM3NzEwOUI1QkY1Mjc0RkJDMgorOjEwN0Y0MDAwRTk0Nzc5OUU3MUQ5Njk3NjVGMjE3MUZBNDgwNkYwMDM5NQorOjEwN0Y1MDAwOTc0RjExM0EzNkRFNDNEQjY1OEQxREE3M0ZDOUVEOUY3NAorOjEwN0Y2MDAwRDJEMzE3MUJGQzhDQzhGQTJFQzNFN0E1NUNGRjk3ODVGQworOjEwN0Y3MDAwQzY2MTNEQjI5RTY3QzZDNTVBNEY2NDFEOTc2MEZGQUU4RAorOjEwN0Y4MDAwQzREOERGQ0ZFNDcwM0U1MjVGNEVEQzU0QkU5NTJCQUNCQworOjEwN0Y5MDAwNUZBOUZGMkUwNUU0NEU2OTUzNjI5MkEwNUI1NzU5NjNCNworOjEwN0ZBMDAwOTUyMUNGQTNBQ0E5NDQ5OUFCMUIzNzgyODdBNUVGNEU4RgorOjEwN0ZCMDAwOTAyMjc4Qzg3QzZFRjFENTRCNkM2MDE3MTRDQjAzODA4RgorOjEwN0ZDMDAwOUZENjU1MTRGRDU0ODVGMTk4N0NGQTUyRjZFNzgwQkM5MworOjEwN0ZEMDAwRUU2Q0JDRDMxMUVCREM0NEU2ODAyOEZDMzQ3MkZDNTAyMAorOjEwN0ZFMDAwQkJCQTUwODcxRjBEMkZEMUVGMUY1OTVCNTZGNDUzODgzMgorOjEwN0ZGMDAwNDdBRjYyQjc5MEY0MkY3RkEyRjA5NjFCMUI2RUEzN0E1NworOjEwODAwMDAwRTEzNjFDRjM4RENFMEVCNzBCMEQ3OTQ1N0RFMEM2RjE0MAorOjEwODAxMDAwQUJDMTQ1N0I0RUVEQTgwQjA3OEM4MUVGMTE3NjdFQTc5NworOjEwODAyMDAwOTFFMUZGNkNGMDhBN0M5N0UzN0Y0MkVDNzVDQ0VDNURDQworOjEwODAzMDAwQzcyMkUyQTM4QzNBRkZBQ0VCQjg4N0Y4MkM2NzU4ODdDRAorOjEwODA0MDAwODY3RkYyODIwMUZGMzM5RjVCOEI3Q0E4RTE3QkZFREVBMworOjEwODA1MDAwNTU0OEJGRjMyOTNGQzI3RTdGQTdGRjJFNDdBQ0ZDQTI0NQorOjEwODA2MDAwOTlGREUxRkQzQzFGQzkyQkZBQkY4N0Y3MkY2NTVGMEUxNQorOjEwODA3MDAwRTQ5NUY5NTY1OEQxMUYzOUJBRUU5MTFDM0Q5QzE3NjQwRQorOjEwODA4MDAwNERCODBERjA0MjlBNTNDRjQ5N0ZGODI2QkFGNjgzN0Y1OAorOjEwODA5MDAwRTk3QjQyQzY3OERBOTYyQzRGMTlCQzVGQ0VGREYwRkIyNworOjEwODBBMDAwMTNBNzBDOEQ2NTFGM0M1MEJGN0YwNEM0RTkxQUVBM0IzRgorOjEwODBCMDAwQjA5NEI5N0Q0OUMwQkVDQzQ1N0JDOTFERUI3RUFGNjU5MAorOjEwODBDMDAwMDM5ODVDNzlBMEJFODNDNTNEMkQzRUUyRDQ5RjI3MjY1MAorOjEwODBEMDAwQ0M3RUZBNEZDMkUyMzVEQTdCOEFFQzcxNDJGQzU0RTE4NQorOjEwODBFMDAwRTc5RDY1QzlCMzJDQjcxMEUyMUUyOTA1M0UxREZDOTYxRAorOjEwODBGMDAwMEU2MEU3OTE5NjY3RUM3NUMyQjk2MjMzMUQxRkUyMzlENQorOjEwODEwMDAwOTY2Q0U5QTQ3MTlGOTNENTBCODQ0RjQ1Qzg2Rjk2NTMyNQorOjEwODExMDAwNUEwOEM2NDNGM0U4NzMxREJDOTU5NDBFNDM3QzNBMUE4MworOjEwODEyMDAwMEU5MkM1ODFGQjREMTI2MUY2OUNCNjdFRkEwNEY1RDIyMworOjEwODEzMDAwODM1QzJGQURFNDcxQ0RBN0VCNUIzMEVFQkYyNERFODExNQorOjEwODE0MDAwRkE2RkU5MjAxM0YzQTcyQzEyREU1NzYzNEU2NEZEOTVGNgorOjEwODE1MDAwMDQzNjZGMkJDNEJENDVEMEFCNDFBQ0RCRTE0NjFGMTFFQgorOjEwODE2MDAwQUY0NjEzQTA5RTQ4NTQwMUVBQzkyNEI4MTRFRjQ5OTlCOAorOjEwODE3MDAwMTBGQTA5M0M3NzY1NzgwMjgwQzc2RjMzM0IwRTA4MTAxMAorOjEwODE4MDAwQzcyRUY2MEMwM0ZEREIyOEZBMEE1NERBRkZFNzYyQjhDMworOjEwODE5MDAwMDBGQUU1RDBBNjRGOTI1ODM5MDhGMkExM0RCQTdEMkREQworOjEwODFBMDAwNzY0RkE4QUE4RjBCNDZENzA3MkQ5MkEyRjY3QkZFMzJGOAorOjEwODFCMDAwNENERkJFMjJDM0ZEMEFDQ0EzQzFDQUVFMTk0QUY5NUM0QQorOjEwODFDMDAwQzBGRDlDMDYyQkJCNkZBOEMxN0U2MzAyRThGMTVGMEY2OAorOjEwODFEMDAwNjA3NjNCRDIwMUQwRDE3RTY2Q0Y5Qzk0RDQ4NDI0MTZBNQorOjEwODFFMDAwMjc1NURGMzBDNEY5MkRFQTFCQkFFRjQ4RENERjZCQTY1OAorOjEwODFGMDAwNzQyOUU5RjY1NUNFOTNEQzI2QTA5QkYzRkRGNEI5N0VGNQorOjEwODIwMDAwOUUzMUUyNzE0OTM2QkM5NjM3RTY3RThFMzYzRkM4REIzQQorOjEwODIxMDAwMDczODhBQTdBN0EwQkYxNjREMEYzQjdCRTNDQzNFMTFDMgorOjEwODIyMDAwRjAzOTRCQkJCRjU4QkE5RkQ1MTM4OUY2ODdGRUQ3QTc0NQorOjEwODIzMDAwQkRGNkU4RkRBQ0NFRjczOUJENzNEOTNFNjY0MzQ5MDJDMQorOjEwODI0MDAwRTZDNzY5RjM5OEQ1RkU2MDA3RDhBOUIzREEzM0U3QzE2QQorOjEwODI1MDAwRkVENjJDREJEMDJGQTBEQzI5ODdGN0M2ODMxRDc4OTdBQworOjEwODI2MDAwODBFNzRBNkVGRUREMUI3MjNDMkRCNzdEQjgwRUNGMzMyMgorOjEwODI3MDAwN0ZDMUU1RTk2QzEyQzY3QkUxM0RDNEM5RjdEOTAzRjhCQgorOjEwODI4MDAwN0MyRTcxRjE3QThCMEM3RUZEQURDMUMwMEQ1N0QzREExNworOjEwODI5MDAwNkQ2RjA0QUUwNkIzNkRGNkZFRjA5QjIwMDYzQzJEQ0U0RQorOjEwODJBMDAwMjlCODg3QTBCREQ3RTY3QThCRDVEOTdCQkRFQjk3MkNCMworOjEwODJCMDAwQjg5RUM4N0EyREI4N0U2RDdENzRBNjA4RkY1RUY4RjA3MgorOjEwODJDMDAwRkI5QTM0Nzg4ODczRTlCQTI5QkRDQzRBQjhGMTRBNzI2RQorOjEwODJEMDAwMDZCQjdDOTY2REY4MTc2Q0QzODRDRDI3MUEzRUE3QTBGOQorOjEwODJFMDAwODlEQThGNUQwM0RDMjQ5QkUyRUYwRjAzREMwMjk0RDU3NworOjEwODJGMDAwOTY3MDhFMzQxOEY5NDQ4NjdBQURFODE5MDRBOUNGNUZEOAorOjEwODMwMDAwMERGNDBDNEIwNTM4NzQyNDlGOTNGQzNDNjA2NUZDN0Y5NgorOjEwODMxMDAwMDBFODE5RjJCQzRFQTdFMEJBQjQ3QkU4RjdERERENjlFRQorOjEwODMyMDAwMDdCQjczRTlCNjhGRjE5RUU1MUEzMUY0RTg0RDE4MEZEQgorOjEwODMzMDAwMTVEMTZGM0FEOTNBRUM4Q0U3Q0YwRTQwOUM4QUVBQkY1MAorOjEwODM0MDAwODFEOURBMzk0QkI2Q0UzOTEyRTM5MzM5QURGMTk4OEYzMgorOjEwODM1MDAwM0Y2NzkxNjhCODQ3N0FDRTIyOTZDRjQ3QTQ4RUZDRUI1MAorOjEwODM2MDAwMERGNkZBRkRGRDhFMDNGMTgyRTg3MUU2MkQ5QTQ0M0U4QQorOjEwODM3MDAwMUYwREZCQjRDRTA5MTgzRjU4QzNFODZCREU2NEI3MDg4NQorOjEwODM4MDAwRjlDRUUzOTcwOUI4REYzQUVFQjBEQTE2QTJGNTc5ODFCMworOjEwODM5MDAwNDQxN0IwRTdCQ0JCRkY2MzA4REM3MzUwREJDMUUyODE2QworOjEwODNBMDAwRTlFMkVEMDVGNzQxOUM2NTJGRDNFMzUwQkYxREU4QzQxQQorOjEwODNCMDAwRTY1NjZEQkFGRDgyMkVCOUFFMDBFRUZCRjNERDY2NzNCNAorOjEwODNDMDAwMDNGRjk3NUNFRkZFMTRFRkYzRTVGMTBBNERBRkJFRDY2NQorOjEwODNEMDAwNTg4Mjc5QjIyNUI3QUE2MzAxRkYyNTJENTYzNzk2MTYyNAorOjEwODNFMDAwMjJDNTUxMzk1NjIyMTEwQjk0RTkwQTkxQUM1MEM2MTE5RAorOjEwODNGMDAwMEI5NDQ1NEJEOEJERERBNThEMzNEMDNFNzA4QzJENTZFQQorOjEwODQwMDAwRTAzRURFOTJGNjE3QkY4MUY3Q0JBNEUwMUU3NjNGMDU3MworOjEwODQxMDAwODM0RjQ5RkJEQkRGMDM1RTE3Qjg4QjMxOUZGMUMyMEQ0MQorOjEwODQyMDAwOEFDMTBGMUNEOTYyQUM1RkQ0NjZBQzE3MDQ4REY1RDEzQworOjEwODQzMDAwRkI4REY1RjVEOTA0RTk2OEFFRTVCQTNDODBEN0RFNUQ4MQorOjEwODQ0MDAwNjZBQThCMjBGRkNGOENGOTJFODcwNDg2MUZERjQ2MkI3MAorOjEwODQ1MDAwQ0FDMzQ5NTVFRDQ1RTAwNzFGN0ZEOTZFMDIzRjdBRTc1MQorOjEwODQ2MDAwNUY3Rjg5RkJFMUUxQ0RGMTA0RjJBQ0Y2RkMzRThFQzQwNgorOjEwODQ3MDAwNDFCRUUyMkJENjc1RDA1RTQ1NzEwN0YxQ0JBQTU3QUM1MQorOjEwODQ4MDAwNkJDMTBGN0ZGNTAyQ0Q4RjBGRTRDMzdBNUVGRDFCQ0I2RQorOjEwODQ5MDAwQUYwOTZGMzQwNzYwN0ZGQ0Y4RjYxNzVGODZGREI0RTMyMQorOjEwODRBMDAwMUIwN0EwN0Q3NTQ4RjA5OUUyRTBGQjVGQjJGODY3ODg5MgorOjEwODRCMDAwREYxNzE3RTJGN0M1NTU2RDMwRkFDNTc3NjQzMzM5MTMwNgorOjEwODRDMDAwNUE3MjcxNDIyQ0JCNDkyQjg3NjcyNEU3NERBNjczRUI4OAorOjEwODREMDAwNzlDODNDMDdFMjQwQzMxQThENzBEMUZBOEQwODE4OUYwNQorOjEwODRFMDAwREZDM0M3MUY0Rjk0MDg5REU2NDI5RTQwQTBDMTAxRkExQQorOjEwODRGMDAwRjdGOUQ4RjcyNDJGRTFGQ0YzRDI0QkJERUY4OUZDOUVBRQorOjEwODUwMDAwMzhBMkVBQ0U0RDQ1RTQzNzU5MzgwMEYyMzcwMEZFODNGMQorOjEwODUxMDAwMjNDRkFCODg2RTNFM0FGQjY0MkExRkZGNkIwQkNCNjcwMQorOjEwODUyMDAwNEVFMUY3RjcxRkFCREY4RjdBQkZEN0VFQUI3N0JCMjdGNAorOjEwODUzMDAwRUJFQUE1OEQ3QkQyNEFDMDdGNkFEQTkzMzY1NzA3QUY0NAorOjEwODU0MDAwRUE4REZCRDI2RUMxQkMyNzA5MjJCOEE0N0FENjBCOEY2NAorOjEwODU1MDAwNDFCQ0EyN0FBM0Q4MDJGMzg0NzY4MDVCNTdDQjlCMEVGMgorOjEwODU2MDAwRTg0N0VERTE1MTEwMDc4OUQ4QTM5N0JCMjdFQkY4Rjg0RQorOjEwODU3MDAwRUZBNTVCOERERkFBQjlGREYyREFEODhFMjk5MEE3NUU1MAorOjEwODU4MDAwRDUyOEI4QTA1QjU1Q0IwREQ3NUQwREYwNkU2MkU3NUNDQQorOjEwODU5MDAwOEIyNDUyMkM1MkZFQUFERTcyQzM1NTIzMjE2RjY2RjUzRQorOjEwODVBMDAwMTgxN0NDODcwRTcxM0QzQ0FGREE3NDAyQ0YzMzNDMUNGOAorOjEwODVCMDAwRjVCQjA3NUFCOTIzOUJEOTg1QjQ3RkQwNDRGQjNGN0NEOAorOjEwODVDMDAwQTNBRDFDRTQxNzFERjcwREE4RUYxREJFMEVFRjU3NzFFQworOjEwODVEMDAwMUM2NUZCMEZGNEY5MjcyNjZBQjcxQzlERTg3QkVGMTY5NAorOjEwODVFMDAwRkFFQTcxRDJGMkQxRDUxMDU3NkEzNEQyMjNBNTZGMDFCRAorOjEwODVGMDAwRUNCMkYwN0FDMUI1MEU5RjJFMjlCQTE2NEM2RUY3NjIxNgorOjEwODYwMDAwQ0NGN0E1RUQ3MzYyOURCN0FFMDgxOEM3ODlDNkZCNDdDNgorOjEwODYxMDAwN0NCRUY0NkZCODlFN0VBMkZCMjU0RkYzNjEzRTc5RjVEOAorOjEwODYyMDAwMjIyQTBGNzU3MTgyRUFDMzdFQkM1RjMyRkEzQjQ0NEY0NworOjEwODYzMDAwRDdDQzlFMjAyQUM4QzNDRDJDNkY4NkZFMDk5NjIyOUVEOQorOjEwODY0MDAwQTczQjg0RDVGMTVFNDVBMDUzNEEyODU1MTc5MEM5MkEwNworOjEwODY1MDAwQzBGQjVBMzIxNUNBRjEyMDU3RTAzRUZEQjEyREY5RDBDQQorOjEwODY2MDAwN0Y4NzEwN0FFMTM5MUNDRjhFNzJCQ0NCMTlDNDdCMjY3MAorOjEwODY3MDAwQjNGODM5RDMyRTk1RDU3Qjc4OUM1MzZCQUY2Q0I3NjIyQQorOjEwODY4MDAwOUVDREYxQUYxNDk0QjM4QjVCRjY2MTFFN0REN0NCNTZCNAorOjEwODY5MDAwOTM4OUNBODNFMzVCOTIyNzQyM0U2NjU3MEJCQkE3RjhEOAorOjEwODZBMDAwNTg0QkYyNDRFNTBDN0EzQjVBNkU2OEZBRjQyMEZDOTM3RQorOjEwODZCMDAwRUFERDNGNjdCQkJGQ0QwNjNENzUzRkNCNTc0RDRGQUVBMworOjEwODZDMDAwMkI4OEY1RkIxN0RBN0IyOTRBNUQwMUY4MzFFMURCNkM3OQorOjEwODZEMDAwQUU3NTA4Mjc1RkFFODQ3MUYwMEMxN0U0MDk5NTA4NkMzRAorOjEwODZFMDAwRENCODQxQzVFMjQwREFERjRFRkI0MjNDM0E2OUJGODg2NAorOjEwODZGMDAwQkZEN0YwQjlFOEZBODk3MzA4REUyNzhGNzZEMEZDNDIzRAorOjEwODcwMDAwMEZERTRGNDlFRTY3Nzk5NUYzMjQxMjk0MjhCRENEMDMwRgorOjEwODcxMDAwN0Q5NDhGNzU5NENCRjM5QTA0Q0MyQjlCQkZEQ0I4MUU1MQorOjEwODcyMDAwQjgyNzU3QUY0NzJCNDg4MERENkZBMThGMjMwRTg2N0M3QgorOjEwODczMDAwMTdBQTZGRTA1RTRCMEJDQkJGQTg2QzM2QkU1NzQ1ODJDNQorOjEwODc0MDAwMzg5RkVBNEQzRjk4NjNDMUVCMUJBMkFEQ0I5RDBERUI2QgorOjEwODc1MDAwMTJBRUI1RTBCQ0VFN0MyQTgxRURGNzI4QzQwREZBMzRFOAorOjEwODc2MDAwRkM5NDFERTU3QjE1RjFFMDc4Mzc3M0JERUVCREJCQzQwRAorOjEwODc3MDAwM0QxRkU0RjBBMjc5RUVGOUM5NzBERTk2RTkzRjc0Rjk4NQorOjEwODc4MDAwOTBCRkQ5QkQ1QjU1OTM0OTcwMjBCQjc3ODM4MDVFQURBOAorOjEwODc5MDAwNkExNzgyMjNBMTZFMjEzRUM3MjhGNjFDRUUxRjgwNzU0MgorOjEwODdBMDAwRUJDRkQ3OTQxMzNGN0VBRkJDQzlGODlDN0NDOEYwNUE3RQorOjEwODdCMDAwQ0RDRjMxOTI2NjVERkI2MEIwQ0YxODNDQUEzNzk5MERFMgorOjEwODdDMDAwNzE5REYxOUIwNDlGMURDRkJCMDYxQUQyRThGQzZBOEZGNgorOjEwODdEMDAwNTI1OTQxMjA0RkY1MDdCMzYxN0NDOEU3MTk4MzdBOUY0RQorOjEwODdFMDAwNTgyOURFOUVFQTk1RUI4MTExQjFGMkZDMEY3MDM4M0VGQworOjEwODdGMDAwNzU0MzY5MjZGMEVCRTM2MEI3NjY3MTQwOEY0NUI5QzVGNAorOjEwODgwMDAwRTMwNzI0NjhBMURGODkxQkRENUJDN0Y2QTIyNUFDM0UyOAorOjEwODgxMDAwN0RGNTBCRDMxQjJGQTE3RTlFRUNDMTdEQTE3OTYyRjE2QQorOjEwODgyMDAwNUI3MDFFRUNDNTQxOUU2QjAxM0ZGMzRDRUUxQzA5RjlEOQorOjEwODgzMDAwRDYzRDE0RTNBMThCMTgxQzlFMTk1NTM3QTIyRTg2MUQxOAorOjEwODg0MDAwQThFMUY5NjlBMTI1MDhGQkIyQkVFRENDRkVCMjE3ODZGRQorOjEwODg1MDAwNjVCRDdFQUQxRUM4RTQ1MUMyREUxMDlFOUIwODZGMTMzRAorOjEwODg2MDAwRjA5Q0U1MkFFMTIwOUU0NzVDNzU4NTRBQzBCRkNGQTBGOQorOjEwODg3MDAwNzgwMjc5QkM0QTIwRjdDMzdENUM4NUFEMzM2RTdGMTNFNworOjEwODg4MDAwRjA1QzE4RTc4MjlGQkJBODY5OUQyMEQ2RDg3MEZEQ0MwQworOjEwODg5MDAwNEU4QkFGNUIwQkZCMzlFOTczODY4RjAyM0FBN0VCOUVEOQorOjEwODhBMDAwNzMyRDdEN0VGQjQwMTVCRjk3Njk2Mzc4Q0Y1OEUyQ0I2RgorOjEwODhCMDAwODVERjgxNEFEODVCN0NGQjlCQzA4NzIzRTNGMDlDNkNGRgorOjEwODhDMDAwM0E4NTk1M0QwOUNCNjU2MDdGNjU5MEM1MDJGNDdCQ0EwQQorOjEwODhEMDAwQzFDNjRGMzU4OTczNjY0MDdEMTRBQjI3REQyQkI4RDdGMQorOjEwODhFMDAwMjFGMUFEQzBGMUQzQ0Q2NDJBQ0MxMzlFODMxRDY5ODFFMworOjEwODhGMDAwQjgwMkI2MDcxODdFMjdENTE1QzA3OEU5NDM1ODk5QTI2MworOjEwODkwMDAwMDRCMzYxOUM3NzdBRjFFRDQxQkY2MjIxRDc2MzBCQjc2NQorOjEwODkxMDAwNEM0ODA3M0ZFRjlEMkVFQTcwNTNCOUY1NEU4NjY2MEYxRgorOjEwODkyMDAwMDU2REY4RkI1MEU3MEQ2N0ZEQjk1RkI4QjA4MDlEMzc2NgorOjEwODkzMDAwNDhDOTMxRjZFQjkxREQwOUEzNDE4RTdFQzBFQ0Y4NTNCNgorOjEwODk0MDAwMzYzN0M2QTcyRjU2NjJDN0IzOUUxQkM4RUMxNkVGNjkxMQorOjEwODk1MDAwODEwNDc0N0FDMDNCRjM1QkI0MkJCREE3MjVDM0YzQUU4RgorOjEwODk2MDAwN0E4QjIxQ0ZCOUJBN0MyRjlFQkJBRjIxMUQ5ODg3NUQzMgorOjEwODk3MDAwRDMxMjZGQzhEQkJEMzgyRUY2NzczNUZBRjY5RTE2ODkwRQorOjEwODk4MDAwMkZFNjc3MTVFM0YzRDNDOUM0OTcxQ0FCNUY5QUYxMzk4RgorOjEwODk5MDAwNUQ4N0ExREVGNjVERUYzQUUwMzkxOTFCNzI4MDNGMzg0MgorOjEwODlBMDAwOEREQkI1M0QwMTkzNEZCRTI4ODI5NzZFNjdDOEEwNzdENworOjEwODlCMDAwQkE1NTU2RUZFMUZCNzE1QUJCMzY3RUY3NEM4NTlGMkJCQgorOjEwODlDMDAwNjJGNzJBMDM3QzdDQzMwODc5QjZGRDA0QzZBM0FCREIzRgorOjEwODlEMDAwRjc0QzYxQkZFRkM1RTg0MjBGMjc5RjRFN0VBNDM1NzQ2OAorOjEwODlFMDAwMDQ0RDk0Qjc3RjNCRjBFODYzNzkyMzI4ODlFREQ1RjhFRgorOjEwODlGMDAwRjhEODYzNkVDQUI3NjlBMkM5QzBEN0YxODVCRDdDOEVBRAorOjEwOEEwMDAwRTJFNTI5OTNDOEU1QzJGMUM3MjY1RkEyQUZCM0ZFOTFBNAorOjEwOEExMDAwRjdCQkE2NEZBNkI2N0Q2MTFFN0JGRjhGMDNCRjdBNkZBMworOjEwOEEyMDAwQzk3OTExQjk0NEQ3OTE1MzZDRDdENTJENTE3NTFCQUQ2OAorOjEwOEEzMDAwOEZENEQ1OUQ1MUVEMjk1MUVEMTk1MUY1NkNENkJGQ0I5MQorOjEwOEE0MDAwMUVDQzExNUQ4NDc0MEUzQzMxNUQxQTA3RkJEOEMxRDk3MAorOjEwOEE1MDAwNzBBM0MwRjI4NkFGQTc0RkE2RjU5QUMyMEVDQzlGQTkwRAorOjEwOEE2MDAwNkQxNzVDQjhBREFGRTVDN0JCOTg5RDY1NzM4NUYwRjczMgorOjEwOEE3MDAwRUNFMjBCM0JERTAyMzk1MEREMjYzODA1NEFFRkI2OTZCNAorOjEwOEE4MDAwMkQ5ODU3NTMwREVGQTlCQUY3NUE5OERGNTlERDcyMTA5OAorOjEwOEE5MDAwREZFQjc3RkNFMTI2RTRFNzg3ODcxRkMyN0VEQUZFRDFCMQorOjEwOEFBMDAwNERBNEY3RjczQTRFMEYwNDNDQjY3NDMyM0QxQ0I1N0YyNworOjEwOEFCMDAwRDQ5REU5REU4N0YyMzBFQUZDQUIxN0M2QjU0NUU4NUUyNworOjEwOEFDMDAwRUJGRjg3OTFFREJGODM2MUUyMTc5RTU4MkNEMUZFN0ZBQgorOjEwOEFEMDAwQUFFOTFDMDNGNjEyREM3MTA5NzJGRjY5MjEzMDAyRjQ2NQorOjEwOEFFMDAwRjNCM0M0MzMwMkY0RDE2RDM1RTdFRjMxRDE3RTA3RTQzRgorOjEwOEFGMDAwRDA2QUI4QUE2MTY4OEVGNTFBODlDQUU5MDNGNkQwNDAyRgorOjEwOEIwMDAwODFDQTkyRTE2QjkyQUYwMTc4MUU0ODBERTEwRDBEM0ZENQorOjEwOEIxMDAwNUI5M0MyREEwNzg2MDZDMkJFNkI1RUNFOEY1OUZERkM0MAorOjEwOEIyMDAwRDA2QUE4NUZCRkU2MDI1NjFGMTkxQTI4RDJGNzA3RkJDMgorOjEwOEIzMDAwMkVCQzA2RTBCRkRFMTk5QjZGMDdFNjMwNzlBRUNENkYyNQorOjEwOEI0MDAwNjY4MTNCMjMwN0VDQ0Q2QUE2MkZFMEY4QTU4NUNBQzU1MAorOjEwOEI1MDAwRDk5NUM3MzZBRkE3NzA5OEZERDM3ODk0NTdFQkJCQUVDNQorOjEwOEI2MDAwQkJCMjE4RDdFRjJCODYzQzM3NzZDNTNCRDc2NzI4OTcyMworOjEwOEI3MDAwMjVCNDAzMzI0MTg3MjU0NUYwNjFDRkU5NTA1MURFNUZDRQorOjEwOEI4MDAwNTBCNzA1RjQ3RUZBRUMzQzk0RjdBN0IyRERGNTM5NjNGMworOjEwOEI5MDAwMjJFNTlGODdCMEIyM0U4NzlERjc0ODE3NEQ5ODZGOTBBQQorOjEwOEJBMDAwN0U4RjFERURBMEM3Rjk3RTEyRTUxQkM0QUY4REUzNjM3OAorOjEwOEJCMDAwNTQwRTkzN0ZBMzcyOTg5Rjk0MzVGMEYyN0E1OENGQ0REQworOjEwOEJDMDAwREMzRTVERjk1MDYwQTM5NUMyRkZGNzQwMjQyOTE4REYxMQorOjEwOEJEMDAwNDY3QkY3OTZCNTU0NkUyNDQwM0U4NTNCMTNFNEMxMkQ4OQorOjEwOEJFMDAwMTBGRkNEOEJENDM1RkI3RDY1MDFBRERCMjI3RURBQ0E2QgorOjEwOEJGMDAwMTlFRTRDN0QxRUQwQ0FCNUFDNUQ5MzM3MkI3M0Q5RkJGMworOjEwOEMwMDAwOUFERTQ5NkY2MEYwNDk3RjdDQzQzQTU4NDdCQzQ0RjAxMworOjEwOEMxMDAwRkNDNTgyOTk0M0Q3MkQ0NkZEN0QyREFFOUJCOEREOTlDRAorOjEwOEMyMDAwRTA3RjFGQUUxODZDMDJCQjUyQzNDRkEyMDJGNzM0NUNDOAorOjEwOEMzMDAwOEZDOEYyRDUzNTNDNjlERkFGRTdFQjlFMjc1MkZENEY3OQorOjEwOEM0MDAwRDc1OTNGQzg4M0VCQTdGNjQwM0U0QjJFNjBGNjQwM0QxOAorOjEwOEM1MDAwMDQ2MjUzMjNGMDI1NTI2ODBDM0NGRjVGMDRBN0RCQTE5QworOjEwOEM2MDAwRkQxRjg1NTMwQzc5RjEzM0U4NTdCMzg4Q0EwQjkzNEUzNworOjEwOEM3MDAwNUU3MEY4M0QyRDA0RTVGNDQyRERGRDI1RjQzOUY4ODEwMAorOjEwOEM4MDAwMzcwREY0M0M5MEEzREJDNzk5N0Q0RjBEREE3RkRBQkMzQQorOjEwOEM5MDAwRTJGRkZEQjVBOTM3OTFCRTdDMTY2RDlGMURGOEJENjUzRAorOjEwOENBMDAwMzlDNjAxOTUxNjk0OEIwN0FFMjRBRUM1MjAzRkY4QkU5OQorOjEwOENCMDAwQUM2NjVGMTZGREI0RUExREYwQTM0RUU2ODhGODlFNTUzQgorOjEwOENDMDAwQzNBQjUwQkNBNTk0QzJFOTIxQUE1NkUxM0NCQTZGMDZEOQorOjEwOENEMDAwQ0JFRkQxRjRFNjRBN0VFRkVFQ0FCQjJGQzQzQ0JGMUVGOQorOjEwOENFMDAwMTJDMkRGNjVGMzhEMjUyOEZGN0FEQjY3MERDNTc2OEExMgorOjEwOENGMDAwNkY5RjE1RjhCRDIyMEU3Rjc3NjA2NTAxQzE3MzM2MkIxQgorOjEwOEQwMDAwNjc1RDgwRUQzQkI1QjhEMjJDMEI3RTY3RTUwQzQ2NEYxNgorOjEwOEQxMDAwMkIyQjU4MUUyNkU4MTE4MDVCN0ZGNDkwRDZDMEUyMUJGNworOjEwOEQyMDAwNDQ3MkU3RUJGMzAxREVFNUY4OEIyRjBDNkRGQjE4RUNEQQorOjEwOEQzMDAwQ0FFNTU2QjQyQjQxNzdFMkZFODgzRjFEQkY0N0YxQkEyMgorOjEwOEQ0MDAwMERFNTk5RTY0NzNEOTlDOUVFOUIyNTJFRjRDRjFGQjQ1QQorOjEwOEQ1MDAwQkI0QjUwNUVERDE3QUZDMkZDOUJBQzY0OTk2NTE0Qjg4OQorOjEwOEQ2MDAwMjNFNDdFOTQ3QjdDM0VDNEZGMENFNjc5Q0NFMUY2REEwQQorOjEwOEQ3MDAwNjdFNTI3RUQ2MDBGQkNDMUU1MEQxMDBDRjhDQjczMDk1QQorOjEwOEQ4MDAwNkI5RjdCNkZGQzQxRjA2RkU2REVDQkVFOUIyNUNCMkUxRAorOjEwOEQ5MDAwNzcxQkY3M0JFODVDRDMyMDNFQ0VGRjFBQzM3NjgwODM3NworOjEwOERBMDAwMDdERTczQzBGOEZGNjk4N0ZCNEMzQ0Y3QjJGM0JEQzQyNAorOjEwOERCMDAwNDdERkQ3RTU0MzdGMENGQzBCNzE3NjkxQ0Q5RkQ0Qzc3RAorOjEwOERDMDAwQUJCMUVFMDVGRDk4Q0I3NzNBN0ZCN0ZFN0JEQTc3QTJBMQorOjEwOEREMDAwQzdBNUZFREQyNzQwQTcxNEVFNDEzODA3MTZCRTRGRTRCNQorOjEwOERFMDAwQkZENzZBOUM2RjhBMTI3RUQ0NEFEQjY3RDc4Qjg5NEJDOAorOjEwOERGMDAwMjgzQzNEOEJFQ0I4NUU2REJFNzNEMkMzOTdCMkRGODU2NQorOjEwOEUwMDAwMzU4RTdGMjRCRUI2MDhFMkUxOUEzRjQyRUUzNUZBNjMyMgorOjEwOEUxMDAwMTA5N0U4QUQ4Qjk4Mjc4RDdFNEQ5RkU3REM5RjhERjZGMAorOjEwOEUyMDAwMDMwOUY5OUI1OURGQUZGNzlDODYyQTQ0Q0Q5RkQzOTU2MAorOjEwOEUzMDAwMkE0ODgwMzcwRkNGNUY1MDk0RjA2Q0JDNTcyQTZBREUwNworOjEwOEU0MDAwMUEzQzk1NDEyNjBFNzc0NjE3RDFGMDU2MDY3MTdBODg1RQorOjEwOEU1MDAwODI3NzhBMTIxQTA4RTM3QTE2OTkxMTRFRDFFMzZCRkFENworOjEwOEU2MDAwRjExOTJCRjE4MTFGRDkyODA4NDhBRjhENzdDN0EzQkUxMAorOjEwOEU3MDAwMjMxNjg2Njc2RjY1OUMwQUY0RkJBQzEyQzYzQzI3REY5RAorOjEwOEU4MDAwMEVGNkZCQTAzREQ2RjBBQjI4QjdDRTYzRjE4NjlFRjc3OQorOjEwOEU5MDAwQzRCNUQwQUYzQjk1RDE3REY3NzY5OUYzMUI2MUY3NEMwNAorOjEwOEVBMDAwQkMyN0FFQzM3NjgxOEREQkJEMzgxRUYzQTdFMDdDQTg1RQorOjEwOEVCMDAwMDJFNzM2N0Q3RkFFODdGODhCRTZFNzdGRkUyQUJCNkY0MQorOjEwOEVDMDAwMDE3RUQ3NDdFRjI3QzNCOURBRjI1MTExRjk4MUY3QzcwRAorOjEwOEVEMDAwMDBCRkI3QzVGMzM4OTJBNzAyQkY3NzRCMUM4MTNDOEQwQQorOjEwOEVFMDAwNUE5MzgwNzlCRkI1OTUxN0UwMzkxM0MyRUY3OUFFRTY5MgorOjEwOEVGMDAwNTNBQjM1NTE3RjcxNTQ0NDBFRDQ5QTBFMEQwNTdGQUJBMAorOjEwOEYwMDAwREFCMjFDRUY3RkE2RUQ2RjgwOUYwNjNGQzNEQkZCM0IxMQorOjEwOEYxMDAwMUZCOTdERjE1MEJCRkNGODVGRjFEQzdCQUI5MTNFQUE0MQorOjEwOEYyMDAwMjM3NDg0RTdFNzJBRjU3NDk1MUJBMTE3QjRDNzQxOEUxMworOjEwOEYzMDAwNEMyNjc4NkVERkNFRUJGMTUzM0IwMjEwQzdGMUYyQjg0RQorOjEwOEY0MDAwNDZFQTVFNzZBRkFEQkRCMDg1NDA1Q0Q1N0I5NEQ5MjM1MworOjEwOEY1MDAwRTNEQkQ3RUUwM0ZGMzg3MTZBMDc3ODY0QjQzRjhCQ0I0RAorOjEwOEY2MDAwNDU5RjJGMUFEN0JFNDIwNEJGNEZCMzYzNzQ3RUU3ODg3NAorOjEwOEY3MDAwNkI0N0VBNEI3NjFFMTdGQzU4Rjg1RTA4MUUwMUZGNDg0NworOjEwOEY4MDAwNENGRjNEQ0RGNTFGRDU5MzI4QUYxN0Y4ODdBMTlFMDQ2MAorOjEwOEY5MDAwM0QwNjcyNEVGMzgzNDFFRTgxOUM3OTcxRDBDNDVCMDcyQworOjEwOEZBMDAwQTVDMjdEODYxMzZGMUFDNEY2Njk0NkEwRERFRjNCQjdGNAorOjEwOEZCMDAwRkQyOEFEMUZGOEMzNjc4RTk3MzFCODg1NTcyNTMwMzkyNgorOjEwOEZDMDAwMDIzRjEwMEE3MUU0REZDODZCMUZDNkY5NDlFQ0JFQzY0OAorOjEwOEZEMDAwRDVCOTI4OTdCNTM4NEUzNThGNjM5NUYyQjg0RjI5OEY5QworOjEwOEZFMDAwRkI0MERDNTU5RjE3MEI3MTREN0RCRDlBQ0I4NTFBRjg2MAorOjEwOEZGMDAwQkQyOUJDNEZDMDFDQzk4Qjg1NzhDRjY0MTJCNDQzM0JEQworOjEwOTAwMDAwQzQ3RDFDRUNGQzlERkU3RDJGMDk0QzkyOTBDRTdGMzBFMAorOjEwOTAxMDAwMUJFRUNENUFDOUQ2M0I4N0UzN0Q5NTk1QzU3QkM2REY1MAorOjEwOTAyMDAwQkI1NjY0NDEyQ0I2REU4NDUxRUVEQzA3MEEyM0Y3Nzc4OQorOjEwOTAzMDAwN0RDMUYxQTRDMTI1NkVEMEM0MTI4MDdCOUNDOEVFM0ZENworOjEwOTA0MDAwMEYzRkMwN0UwRkZCMzBENURGNUI3ODNDRTQ1QTFCOUVBMAorOjEwOTA1MDAwM0Y3NjlGMDc3OTBCOTIzM0U3REExOEJGRUJGQUYwMEVGMQorOjEwOTA2MDAwMkJERUUzRUZFN0YyNDg3QjNFNjUxMENCRjdDNTM4MTEwNgorOjEwOTA3MDAwQzA3RDcxM0NEQUUxMTRDQ0Y5NDA0NzQ1ODMzNTdENEEyNworOjEwOTA4MDAwRjIyMTNFNzU5MEU3N0ZENkRFNjhGM0MwNzgyMTFFMzc2NworOjEwOTA5MDAwNUYzRDg4RTk4REQ1ODNEOEVGM0Y2OEY1NUVCRjhGRDNGQworOjEwOTBBMDAwOEJCNkNGMDVGMTFBN0Q3Q0JCQjlCNzNGOEJBRjY4RkFBMQorOjEwOTBCMDAwRjdFOThBQjhCNUVDQkU3NzhENkU0RDc4QkUzMjNFQUYxQgorOjEwOTBDMDAwNTg4MTM4RDMwRTJFNDc0QUI4M0ZCRjAzMzY3MDQxOUVCMQorOjEwOTBEMDAwQjRGMEI4QjRFNDlDMERCRjFCQjRFMzY4MUVFNjUzQTYxRAorOjEwOTBFMDAwMjg0Q0JFRUNCODM5OEU0MDdFREZGRTYzMkYzREYyMUU2OQorOjEwOTBGMDAwNkQzRjc5NTRDMUZCRjJFNkYzNzhFQzBFQjgxNzFFRTQyRAorOjEwOTEwMDAwRTUzNjMzQzYxOUFCMTU2NjRGNTZFRjFFQzlFQzE4QzVDOAorOjEwOTExMDAwQjMwQUYyQkU3RDVCNjU4QzdCNTUzQjAyMUI1RkMwRjZEQworOjEwOTEyMDAwNEMxN0M1MkM5QzE3NjU3NkYwRjY3OEY2N0U1Q0UwMTczOAorOjEwOTEzMDAwMkY4MzVGQkEzQkRERTVBM0ZEMTc2NTc4RjYwMjFGNjU1NworOjEwOTE0MDAwOTlENTA0QTJFREJCMEE5MUYzQTQ4NzAyQ0M2RTNFMDQyQworOjEwOTE1MDAwODIwN0JFRDM2RUU3QkYzM0UwQ0U1QzQwQzdGOUZDQTEwNworOjEwOTE2MDAwNzQ1QzBGOTVCNzY4NUY3REZFOTgxOUY3RDU5RUVFRkQ4QworOjEwOTE3MDAwMkU4QjhGMUU5MjhCRjEzRTk5NDNEQjBBNUNENEYzMjQzNQorOjEwOTE4MDAwM0RDNTRBMTBFMkRGREVDNzk5QkQzN0NGQTRBRTAxRjg3NgorOjEwOTE5MDAwOTBEREYxMkU4M0JGRkE1ODE5QkI1RkEyRjJERUU5NjdCQQorOjEwOTFBMDAwREFFNzA2RjlBRThGRkY3NjkzNzAwRUZBQUJFNTgzNUJENAorOjEwOTFCMDAwMjBERkI0QkI3RDg0OEI2RDY3NjVFMDI2NEEyRERGN0ZBMQorOjEwOTFDMDAwM0UyQzMzRjg4Njc3Qzk0OENGRTczQTNFRDA0NUVGRUZEQgorOjEwOTFEMDAwRTA4OTA0N0ZERjREQkZERjE2QkQ0RkQxQjdDRUYwRTg4OQorOjEwOTFFMDAwREQ5MUNFRUQzQTYzRkI3NUQ5OUU1M0MwNkZCNTRGN0NEMAorOjEwOTFGMDAwNzc2MDkxMEFERjBCQTMzQzI0N0UxNjZGM0YyQ0JCNjc4MAorOjEwOTIwMDAwMDNERDI2NEUwRTFBRjJCODZDMkFGNzBGQ0NEQ0ZFMjNEMworOjEwOTIxMDAwNDE0NUNGODc1QTdCRDE0NDEyNzM1RkU3RkYwMDJFM0Y1MQorOjEwOTIyMDAwRTAyOTAwODAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMworOjEwOTIzMDAwMDAwQkM1N0QwQjc4NTRENUI1RjAzRTczQ0VCQzkyOTkyQQorOjEwOTI0MDAwNjQ2NjMyMDk5MzE3Mzk3OTA3OTJDMDEwNDM0NDhCM0EwOAorOjEwOTI1MDAwMDkwMTAzNDY5RDAwMkE1QThCQzMxQjk0M0MwNDZENjM4RAorOjEwOTI2MDAwNEI5QjgxNDQwODg4MUEyRTAxMDEwMTI3MDg0QUFGRDg3OAorOjEwOTI3MDAwMDYyRjIwRDY0ODA3NDQ4QUFEREUzRjNFREE4QjdBMkY5MAorOjEwOTI4MDAwNUY1MDhBNjgwNTIyNUE3RURBQUJGNTVGNkJFRDdEOTJGRQorOjEwOTI5MDAwMzk0MzIyRDhEQkRCM0Y3Q0IwRDk2N0JGRDY1RTZCRURBQworOjEwOTJBMDAwQjVENjVFN0JFRDlENTg1NTYyMkM5MTMxN0IzN0YzODVBOQorOjEwOTJCMDAwOEExOEZCMDY3RjZFRTg0RjYzNTUwMzk1MzMzNkM1Q0M5RAorOjEwOTJDMDAwOTIxOEJCOTZGMTlGOENEMzUwREZDNjk4NEQ1NTE5MUI1MQorOjEwOTJEMDAwMERERjRGODc0REIzMjA5RkIxMjQ2QzlBMkJEMjAwQTQ5MQorOjEwOTJFMDAwMjc4RDJDNkMyOTg1NzRBMzNEQjQyRDEzNUJGQTE4RjZEOQorOjEwOTJGMDAwMzM3NzBDRkMxNzlBQ0U5NTU5OEJBNTA0QkZBQkZCN0IzQgorOjEwOTMwMDAwREM4QzlEREFFQkY0QUU4MkVGRUNBQjZGNjQ1NkM2RDgyMgorOjEwOTMxMDAwMEMyNkVBOTk1OUFCQzVDNUQ4OEIyRDUyRDgwMkY1NjZGMworOjEwOTMyMDAwNkMzMDZGQjM0MjdGNjVDQjdDQjIxREYyQkQ1QjI0RUYyNgorOjEwOTMzMDAwMzZBODM3QTNBNTNDNkYyM0U0RUZERDUzRUM5NUExNjk3NAorOjEwOTM0MDAwMUM4RTgzRjk5MDMzMjQ0M0ZENkIxQkM3QjE4RkFFNjIzMworOjEwOTM1MDAwNkM5NjM5NjQ1MkUwM0I3QjRFNjIzQjE4RjVERjgyRkQzMAorOjEwOTM2MDAwMkY4NDQ2QzkyNTk3RTI2MURFMDYzMzYzMTYzRUY3NkYwOAorOjEwOTM3MDAwRjA5RjUwNDQzRTBCRkFFREVDOTAxOUNDOTdFRDg0RUY0MgorOjEwOTM4MDAwMDVGRERGMTcyQUUxODM1MjFDNjNCNTlENTFFREQ5REYzRQorOjEwOTM5MDAwQ0M3REY1MTA1MDE2MjQzQ0JCNERFQzFFQkY4RDI2M0RGOAorOjEwOTNBMDAwQTRBNjk4QjEzRkUyN0Y5MzE5OEJDOUYwNUZBRDEyMUQ1RgorOjEwOTNCMDAwNzI4NjRDQjZDM0JDMkJGOEJDN0E3NzRCODRENzVBRDY4RQorOjEwOTNDMDAwNjA2MkQ4NEY3QjAyNjNENzQ0OEM2QjYxRTE1ODQ4NEY5MQorOjEwOTNEMDAwQzk0MTJBOUY2QjVFNDM2OUI1OUE0OTc0QkI5N0Y1OTg1QQorOjEwOTNFMDAwNTgzNkY2REI2QkYyMTcwRkNFMDdENTk3RTE4MzlCMDU1NgorOjEwOTNGMDAwMUYyQzNDQ0RDMkQ3QzE3ODBCOTdCMDcwRUQwODlFREExOAorOjEwOTQwMDAwMjE5REFCQjA2MDFDRTA3NTJFRTAyMDVFQTQzMTI1MUNEMAorOjEwOTQxMDAwQUY2QTQxM0Y1RTE2ODRGNDc5QzRBNzFBODE2N0M0NjNCQQorOjEwOTQyMDAwNjQ3OUZERkU2RkNDOTFGOTIxMjZDNkFDQUU3RTNBMDM3RAorOjEwOTQzMDAwQTEwOEFFMjFFMzFBNDYzNTAwOUNENzJFMDlDOTBDRTZENworOjEwOTQ0MDAwOTc5MkVFQkIzMTA3QkVDNzk2RjJGOUQ2MUZCMzU4RDQzOAorOjEwOTQ1MDAwOTE5OEY3QjMyQ0E4Rjc2NTVBRjkwQkI5MzBERjdBODVFNAorOjEwOTQ2MDAwRjkzQUExM0MxNkYwRDIwMURGQjc1ODU5MTBGQjdGMkExOAorOjEwOTQ3MDAwOTdDRkQ3NjNFMkZDNkI1NEZDNkM5NDBERTlEMjFEMzY5OAorOjEwOTQ4MDAwMjA1RDEyOTkwM0Y5NTFDM0U3MTYzQkI0MkJDMTc2MTI0NAorOjEwOTQ5MDAwQjVFQjZCNkY2MTJEMzExMUVEMkI3RTY1NjUwQ0Q2Q0I3NQorOjEwOTRBMDAwODU5N0VDMjEzMzU0NjU0QTIwQzMwOUZEMjU3RDYwNjYwQworOjEwOTRCMDAwQUIyMDdGRjY1N0Y2RjlEOERGNTkyMzlCRDYwOUY1RERBNworOjEwOTRDMDAwMzI2QkU4MjQ3RTU5NEVGNEY5MTlEMjM1MTFCOUE5MjIyQworOjEwOTREMDAwOTUyMUVGNEI5MzUyOTkwN0NCOTdEMTc4QjU0RUUwQUZEQQorOjEwOTRFMDAwMDFFOERCNTc5RUQ5N0QzQkU3MkJCM0JBMERDNkJCRTA0NQorOjEwOTRGMDAwRUNGOTIxRTYwMTFFMTY4NEZDMEY5MUNFODg5NzNERTMxRQorOjEwOTUwMDAwNDZGRDA0QkVEN0ZCNkQ1RThFRkRDMDI4RTQ1N0IzRkM1QworOjEwOTUxMDAwQzBFRDE2RTBBRjA5RjI5MkRFODc2MDFFQjVFOTM2ODcyRQorOjEwOTUyMDAwMTk5QTU0NjZGQ0U3MUZFRTg0RkMyNzdCOENDQzhDNzQ2NAorOjEwOTUzMDAwREUzMTZFMUFDQkJBMTQwRTJENUQxMDMyN0VEODEzQjEwNworOjEwOTU0MDAwNUVFRURCQTlDRkQ3NzZFQUYzRjU0Q0Y5QjA0N0UzMDMzQgorOjEwOTU1MDAwNDBDMTE2RDVFRTNFNTU0OEIyQzNGQjBERjBCN0Q5REM3RAorOjEwOTU2MDAwNzBCQTAzRTAzNUJGNkNGNjJFODVDRjhCRDRDMDM2NUM2NQorOjEwOTU3MDAwNEY3NTg2REUyMzg4Njc3M0M2NjcyMzAyODA5NzhBOENCRgorOjEwOTU4MDAwQUY4RUE0MjJGRTdGQ0FCQzA4RjcwNTZCRjkwQ0EyQzdGOAorOjEwOTU5MDAwNDZBQjFBOEM5MDVGRjU4MkZGREI4NzU2NTM3OUZCMjYyQQorOjEwOTVBMDAwQjMyQUYxRjJFQUQxMjBCN0U2RDMxMkE2MkExNjAzRTBENQorOjEwOTVCMDAwQkY3RUMzQzQ0RkE0MTE1NDZFNDE3QUI0MDM5RjUyQkIwMworOjEwOTVDMDAwMTdBNEQwNTI2ODM3N0ZDM0JDNkEwNkU1Njc1OEM4NjRFMQorOjEwOTVEMDAwMDE3ODNFRDFGMDJDNzc0REIwQzA3RkRCNUQ1NUMzNTA5NAorOjEwOTVFMDAwQkUyODVGMkI3RUE0RkYwQUVDRUE5QTdFN0NGREJBNkY1MAorOjEwOTVGMDAwN0Q1QURBNEUwMjVFNkU2MjEyOEJDNzc5M0IwM0JGQzY5QworOjEwOTYwMDAwNzlENjVBN0E0Q0U1RDBDRjBENUY3RjQ5NzI3OTVFRTMwNworOjEwOTYxMDAwQUJEOTI3QUY0Mjc5RTM5QjQxRjQ4NkY5QTExQzk5RjdCNgorOjEwOTYyMDAwRDA0MUZBMkU0REI2MTA3Q0E3RDI2RDIxMzM3QzdGNzVDOAorOjEwOTYzMDAwQTM5OUU3OUQyNkNBOUZEQTIyNTE3RTVFQTcxNEIyNjRFMQorOjEwOTY0MDAwNjJGRDhCMDlFNTI4QkZCNzE4MUQ2Njc2Mjk5RUEyRjEzOQorOjEwOTY1MDAwRjJGMUU2RkY4ODYzMDBGMkM3OEM1NUUxRkE2MjhFODY2QworOjEwOTY2MDAwMzhCRjFEQ0IxQUUyMjYxNzIzQkU2RUZDMDRFNUQ3QkMxQgorOjEwOTY3MDAwMkRCMjM3OEM3MkZBMTVCQjM3OTc2MTdFRkNCMDM5MzY0NAorOjEwOTY4MDAwNkNGRjQ1NDIzOUUyNkZFQjc4ODc0Q0RGNjUzRkNBMjFCQQorOjEwOTY5MDAwQTZGOEJBNkY4MEVGQ0FENkFCNTU1QzJGODdCNzcwQjgwMworOjEwOTZBMDAwRTczOTJEQ0YyMDlENkZGODVBMjZGRTU3MEMyQ0IwREJFMgorOjEwOTZCMDAwODY3NEYwMERDMzc1QTc2RURFMzEwMUYxRkI3MTREOEEyMgorOjEwOTZDMDAwODFFQTNGMkYzMTA3RTJDM0Q5OTg4NERGRTc0OThBMUYzNworOjEwOTZEMDAwRDdEOUZDMEQwQkFBNTk1QzNGREU1N0E5MzJBRDlCRjJERQorOjEwOTZFMDAwOEMyNTQ5M0QzNkUyRkJEQjUxREZENTZFMDEzRUM3RjFFQgorOjEwOTZGMDAwMjdCRkZGODczQkRERkQ3QzJGNERERTcwQ0JCNUQ4RkY0QworOjEwOTcwMDAwQjM0NkUyMkZBRDlGRkFDRDM3MEJGRTYwMkMwQzc4OUE1MgorOjEwOTcxMDAwMjdGMDY0Q0U1ODkyODdFMzVGNkUzRENDNUJENjkwRTcyRQorOjEwOTcyMDAwQjA1RDdFNURGNEFERjdDRDdDN0Q0ODk5MTJDOTU1OTY0QworOjEwOTczMDAwRTYyMjNEMzNEODdBRDRGNDkzQURDMDQwRjJERUUyNjU0MAorOjEwOTc0MDAwQkUxRDkwMEUzMTMzOUYwNEYyMkIyRjUzMjEzQ0U0NjU1NAorOjEwOTc1MDAwOUFBODlFRjI5NzQ1M0JERjA0RjhGN0E5ODFGODRDRjhFOAorOjEwOTc2MDAwOUVDMTdDQTM1MENGQThCRDhFOEE3OEU4Q0Q4NjBDNTJDRQorOjEwOTc3MDAwOEE3MDk4NDMzQjQ4Q0U0MTFFRjBCNDNFOTEzREIzMkFENworOjEwOTc4MDAwMDJDRTJDRUM2RjM0QUQ1NzRGMjZGNDdCRjZCREFGOEU3NgorOjEwOTc5MDAwMjAxRUVCODY3RTM2MDJGNTc2RkRDNTJGNEQyQUQwRDNFRQorOjEwOTdBMDAwRDYyNTkxOUNCNTc5RkQwQ0Y5QTNCRUFCODZDRDJFRUFFQQorOjEwOTdCMDAwOTc4RkY1NUUyRUJGQTNFNzU1OUI2OUU0RUJDQ0RENEI5RAorOjEwOTdDMDAwRkREQzlDQzVENzVEQkI5M0FGQ0Y0RDhEMzEyMTk0N0IyNAorOjEwOTdEMDAwOUJEQzIxMkIwMjFENUIxQTY0MjhERjZGMjk5NUJEMDhENQorOjEwOTdFMDAwQjY2NkE3RjgyRDlDNUUxNkRGQUI0QzQ2N0VGNUNBNUVDQQorOjEwOTdGMDAwMTRGMUREQkU4RjVBMTIyMEZGNjZFOTc4QUYwQzc5OUIxOQorOjEwOTgwMDAwRUZFOUQ2MkM5Q0I3RDcyOENBQjM4MzM4RUYzN0M2OTY3MgorOjEwOTgxMDAwOTNCRDcyOEI0RkE2NzFEOUZDQjgxMEFBOEE2RURGM0IzQworOjEwOTgyMDAwRUVEOTMwRUVBRENDQjdGNjI0RDBCMTBBOTQzN0QyQjEzMAorOjEwOTgzMDAwMUJDNzA2N0E5RDcxMDRDNjIyNUVCNEY5RENFQzlEQjhBNAorOjEwOTg0MDAwRjY2NEE0OURFMUUzRjYwMDdDRTI3QUFDNzQ2MDNDOTQ5QgorOjEwOTg1MDAwQThFNTE1NDhBNzFCQUVFNzc0RjhGNDc5NzM2ODE5OEM2RQorOjEwOTg2MDAwRkZBOTE1RjQ0Qzg0QkVGOEQ0Q0VGNUNFRDQ0Q0FFQzdDNworOjEwOTg3MDAwMThFQjFDOEE3MkJGMkZBRjBDMzNFMEJBN0ZDMEMxRjE2NgorOjEwOTg4MDAwRTEzNjc1MEVDNUY1RjYyNzQ5REZDRkJEQUQzMjBCODE0OAorOjEwOTg5MDAwOUM1OUQwMkFCMTEwODBGOEU5Q0Y1RjFDOEFGMkY3OTM2NworOjEwOThBMDAwMUQyRjBFOUQxOTAxNUY3NDNCMkQ5REFFOEREN0Y2ODQ0MworOjEwOThCMDAwQ0YwMkUzQ0Q2NERBNzhFMTM0MUM2RkE2RDc3QzAyRTVGMQorOjEwOThDMDAwMDc2QjFERUZFQjg5QjAxRjQ4NDI0NkQ0NjcxQjdDMjQxMQorOjEwOThEMDAwQkZDRkMxNkE0NEJFRDNEQTlEOUIxRkUzNDMzQkYzMUM1OQorOjEwOThFMDAwQjM4NDI0MTg2QTY2OTcxQzM2NjM3RjNFNUY4RTFCRTgzQworOjEwOThGMDAwNURBN0I1OEZFQTdGMDNGMjBGQzAyNUVEOTdDMjc2QTg2QQorOjEwOTkwMDAwMUY1QkQ0NEJGMjc2ODFDNTdGMjQxNThBMTYyMDFEQTFEQQorOjEwOTkxMDAwRkU0NEE0QTM4NEZDRUEzM0UxQkMxNTg5Q0JGMzMzMEVFNworOjEwOTkyMDAwRkY4MzQ4ODczOTZEN0EzQTY2NjYzQUI4N0M3N0I4ODk5QQorOjEwOTkzMDAwRUVBNjNBOUI4MkZBMjJBOTk5NzEzQkYwNDE0MzA4RjVDMQorOjEwOTk0MDAwQjUzQjI2NkUwNDAzM0JDNjk0RTJCMUExOUNCQTIxMkYxRAorOjEwOTk1MDAwQTZDNTEwOEZERjg3ODZCMDdFN0E0QTAxQjUwQjU2NzA5OAorOjEwOTk2MDAwRkUwRTI2QjE1MEIzODQ1RDM2NDg2NDA3M0E3QTk4MDJGOQorOjEwOTk3MDAwREZEM0M2MzBDNzJBOTQ0NTk5REM0RUY0MzBFRjA2OTkwMAorOjEwOTk4MDAwRUNDNDRFMDlFRDQ0MEQwRjlBN0M0N0JFNDFCOUY3QTlDRQorOjEwOTk5MDAwNjQyMUJFOTFCQTI0QjJGQjY0NDNFNzc0RUM3NzMwM0U5NQorOjEwOTlBMDAwREExMkM1NDc1QkZFQzk3Q0Y0RUNBMDdDMTQ1MDg5OEZBOQorOjEwOTlCMDAwM0M5NjgxRjkwOEY2NERERkE5M0UwQkZBMTVDMEQ3MTA4OQorOjEwOTlDMDAwODFBRkM3ODU3Q0U5N0REMDQyNzQ4MzFGMDlFNzVCMkQ5OQorOjEwOTlEMDAwRkFBQkI2RDhDMkYyMDg5MjEzOUZGNUM5NkZFODY3MzNBNQorOjEwOTlFMDAwRDg5RkI4NEY0OTQ2RkIxOUQyRDRFNjE5MkFCN0RGQkIzNgorOjEwOTlGMDAwN0IyNEU4MkZGNjZBMEJFOUJENDcwQ0REOTk2OEU3MEY3OQorOjEwOUEwMDAwMTlERUIwMUJGOTYzQzhGNEEyOTI2NkIyNEZEMjlDMjg0QgorOjEwOUExMDAwRjc1MUQ2RTBGQ0VCMUFDN0Y5QjkxRDAwRkQyMjFGRDU5RQorOjEwOUEyMDAwOTg2ODNGNTFGNzUwQjk5RkRCMDE1NUI0M0VFQTU3NUI0OAorOjEwOUEzMDAwNTVENDY3RTNCQTMyOTcyMjdGRDQyRjAxRkIwOEU1RUZCNAorOjEwOUE0MDAwRkU4RThENzMyMTVGMzdENUU2NDUzQkM1NkE5OTUyODRGQQorOjEwOUE1MDAwRUQ1OEFCN0U5REFEOTQzQUM5MkUwRTRFNjQ1RTk0REJGQworOjEwOUE2MDAwRTc0Mjg2QTA3MTI0Q0FEOTlFQUQzRjQxM0RCRUEwQzg0MQorOjEwOUE3MDAwMUI1NDcxQkQwOUJFQ0M2MUE0MTdEQTlEQkU2NDE3RTAwQQorOjEwOUE4MDAwNzVERkRGNjREQTE3QjU4RjgyM0NBNDJGMEI3QUI2RDc2NworOjEwOUE5MDAwRjg5MjlEOTA5RkI5REE0QTc4NkZFRkUwRTVFN0VDODBBNQorOjEwOUFBMDAwMjBFODNGNDVFNkZEQjE3ODBCRDczMzk3Q0EwMzBCRTJCOAorOjEwOUFCMDAwM0Q2OTBDRDM3RTM2NjAzRTQ1Q0JCNzNENDE3NjhDQjZEMgorOjEwOUFDMDAwREVEQjMzMzkzQ0Y2MjI3RjI2NUFCRTAxNzU3NDc3MENGMworOjEwOUFEMDAwRjA0RjkyNkNEMDM2NDU0MUI0QkI2MzcxNEM5RUY3RTFCOAorOjEwOUFFMDAwNzBFQjBDMDA0ODBBNjZCRjVFNTMzOTM2MzJDRkVCRjc5NQorOjEwOUFGMDAwQjc3RjY0NzI2NTFBRTlEN0JFNzIwNDFCRjRBRTk2Rjc5RAorOjEwOUIwMDAwNTkwMThFMTVGNkZFNzIwNUVDNDlDQjdFNDlCNEJGNzYzRAorOjEwOUIxMDAwRjJGODFDOThCRjI0QzYwRjlBRDZGODAwREVDN0FENENFOQorOjEwOUIyMDAwMzc1RTI0N0M0QTU0RkY0NjE1RjdGNUEyN0U3MEE0N0Y2OQorOjEwOUIzMDAwM0M1NDU4NTdBMkI1NkY2RUYzMDFGQzhGMUJGNUZEMTExNQorOjEwOUI0MDAwNEE0NTdCQ0M2OEUzRkQyRUU3Nzc2QjU2OEZFREQ3RkY1OAorOjEwOUI1MDAwNjAwRjM4QjM0NkY3REIwMTJCREVBRjZFMUIwOTYzQzUyMAorOjEwOUI2MDAwM0FCRTMwQTE3RUQ1RjQ3OUJENUIyMjNCMjM3QUJEQTZGNworOjEwOUI3MDAwNjY3MTdGMDVEOEI1QTk1OTExRjY2RTM1REFCQjMyRDlCMQorOjEwOUI4MDAwQjkxMzcwNjlENTJGRjEzM0I0MkZDMTZFQzhDMEYxQ0VBRgorOjEwOUI5MDAwQkVGN0Q5QTk4M0YwQkQ3REYyQTc2NEU3RDc1RjU0QzhBQgorOjEwOUJBMDAwRkVBODA3RkIwM0VENzY0QjE3Qjc2N0Q5N0UyM0U5NUQ2NworOjEwOUJCMDAwOERFRUY3MEFGOUQzRUUwNEJEOEY3Q0ZBOEEzNDFBRjlEOAorOjEwOUJDMDAwOTRCMTg2QTFCNzAxMEQ5QUIzN0NDMzEwMEU2RDNGMTZGOAorOjEwOUJEMDAwMEQ2RjQ1MTZCN0NCRUIwQjJBMzZFNjYxRkZEQjI1ODYwQQorOjEwOUJFMDAwN0E3RjU1QzE4NzQ5Njg5RkQ0Nzc5RDQ4OUExM0QxNkU3MworOjEwOUJGMDAwQzFGRTc1ODQ4NzA1M0I4RDAzQ0VCRjIyOEJEQjlCNzUzMQorOjEwOUMwMDAwMkZFREY1RTE3QUZGMzQyNEQxNUE5RUFGODQ1NkEyNUQ0MAorOjEwOUMxMDAwMzk3RkJFMDEyRDM1NTYxQTlBNzEyN0FFN0IzNkNEQzREOQorOjEwOUMyMDAwNzI2MTdFMDVDMkFFQTlERjM5MjU3ODJERUVEQkUwQUY4QgorOjEwOUMzMDAwMDQ5RjM2RjlFN0QyRkFERTM0Q0Q2MjYzOTkwOEU3Q0NBNworOjEwOUM0MDAwRkIwOTBGOEUxODFGRTI2MTU1NDE0NTMyOEU1MzU3MzM4MQorOjEwOUM1MDAwQzE4MUZFOTM3QUIwQjNCMEJDRUVBMUJCQzg5RkQyNjdGRQorOjEwOUM2MDAwMDdFRjM3NTZBMUZENTUwNkY2RDZCRjAxRENFOUFFNDkzMAorOjEwOUM3MDAwNTU1RTU4OEZBOUYyRUU1MThCMjFCRjdFMTBGOUZCNUUyNQorOjEwOUM4MDAwMzZBNzY3OEJFNDBGREU4QUVCRkUyNTg5RUQ1MEZCQ0IxMAorOjEwOUM5MDAwMzNGNjczQkJFRUFFMkM2RTA3NkFERkVGQ0E1MkE4REQ1NworOjEwOUNBMDAwRDg2MEY3MzhFNEJEMDM0QTRGMkNEQUJGRjVDQ0Y3Mzk1QQorOjEwOUNCMDAwRUUzQjk5REZBNkVFMjAzQTcxQjlFMzZFNTJDOUFGNjQ2QworOjEwOUNDMDAwNzFGNzNDMzIxMkNCQzcyQUI0OUY2MDRBQ0Y1QTFDRjdCNworOjEwOUNEMDAwRUM0QUI3NzcxNTEzRkM4QkY5ODc4QTQyMjg0NzhGNjZDMQorOjEwOUNFMDAwMDVFNjIxRkY5NDA5M0JGMkVDNEIzNzhFOUE1OUQ0NkY2RAorOjEwOUNGMDAwMjdBREVDQjA4Njk2MDExRTU2REFENTdGQTk0MkY5RjY1QgorOjEwOUQwMDAwMTc4NUU0MUJCM0Y0NzY4RjQzN0FGQ0Q1NDVGREFFQjREQQorOjEwOUQxMDAwODY1NjIyRkQ4MzZCOEM1NEJFM0IyNUIwMDhGOUU2NzQ1MQorOjEwOUQyMDAwNEQ1NTFFRUU4Mzk5MkQ5ODU3MDNGQzY0NzRCNzMxQjREQQorOjEwOUQzMDAwMTc2MEZCNDA3RTA2OEJEQkNGNTRDODhGMEJDRTUwMjRDMAorOjEwOUQ0MDAwOTRGMzUxRjZDNzM4RjRGM0QwQkUwMTA2ODdFRjE1NDJGRAorOjEwOUQ1MDAwNkNFNTAyMTc5Q0IyRDAxMjY4RjkyNkExREYxRTM5RkExMQorOjEwOUQ2MDAwRDU1NDA1M0Y2QTc2OEFDMTEyNTg4MDREMkJBN0M1MzA1RAorOjEwOUQ3MDAwMTlGOTdFNzlFRjExMDNDQzI3RDZERDRENzY2QzZEQTdFRQorOjEwOUQ4MDAwNDRFM0Q0MTZCQzYwNDJCRkM5N0Q5RDdDNURENjhCN0QwQgorOjEwOUQ5MDAwMDBFMDZGMjhEQTAzOEY2NEM1OEFGRDY3MEJGNTVCQ0Y5RgorOjEwOURBMDAwQkE2OTFGQ0Q3NjcxN0EzMjA2RjVFQzkxRkI4OUE1NTQxQworOjEwOURCMDAwNEZFQkNGQjQ4Q0ZCQkQ2QTg1M0YwNjdBQTRGMkY1NjIwNworOjEwOURDMDAwQkQ2QkZFMDk1ODk4QzIzRUUwRTNBRTk3QkE3RDMyRTIyMQorOjEwOUREMDAwNzU5NEU0OERFNDFCMkQ3RDNFOEJFQkY3Rjg0M0JEMTNBQQorOjEwOURFMDAwNzBGREY2MDI3RkExNUY2NkEzNTQ3M0ZGNkIzMEJGOEREOQorOjEwOURGMDAwQTM4NzdCRDE4NEYyMDAzQkM5MjVGODFENTgxMUYwNUU4MgorOjEwOUUwMDAwQkFGRkYzMDlDODM3NjA3MEQzN0FBRERCNUYyRUQ3REFCQgorOjEwOUUxMDAwNDg2RkQzRkU3MTQ4NkM0MzA3OTYwRkI5QTc4MEY0NkE2OAorOjEwOUUyMDAwQ0M1NUVDOUVDOUYwRkQwNUIxQ0U5MjZERENDRkU1NTk2NQorOjEwOUUzMDAwMTZDQzVDNTQ4NEUzRkJFRjdGMERDNzJGOEUyMTNGRTVFQQorOjEwOUU0MDAwMTBBMDhEREQ0NTY5MkJGQTg1M0M2Q0E5ODRGNUQ2QzUzQgorOjEwOUU1MDAwRjFGRTEzMERGMjNEMzU0NTI0NzcyOUVGRjI0QUJFNkQzMAorOjEwOUU2MDAwOTA3NjY1MzlBOTdGRDg3NzU1MjE5Q0Y4OURGNjYzQzAxNworOjEwOUU3MDAwMTlCODlGNDUzRjE3RjYzMzI0OUJBNzY3OTNDMzBBMEE3NworOjEwOUU4MDAwODg0REFDNjdFQjBFRTRDRkZENjYwN0UyQTk3QUZGNkY2MQorOjEwOUU5MDAwOEVBMUJFQUNCNkIwNEUxOUVEOTUyODNCNjM0OUZBOTQzRAorOjEwOUVBMDAwRDc5MDNGQ0Y5RDM5QjVGNTYxRjhCNkVFQjY3RERFMDBBRgorOjEwOUVCMDAwRDE0NTZGM0Y0NEVGMTdCNjYxOTVFNEMxRURCRDBGRkE5MAorOjEwOUVDMDAwRThDOUVEQkRCRUZDM0ZEQ0RFRTM3NjdENzA0N0FDQkE5MQorOjEwOUVEMDAwMjM0MjlFRDc4QjdEREFCOUY5RTdFMzUwQ0Y3Q0RDMDdDQworOjEwOUVFMDAwMEZFOEU5QjI3RTdCNjVFNkY2RDgxM0I4QUVGQUVDRkU3MQorOjEwOUVGMDAwMjhCQkUxRTgzM0IxNDFBNEZGRjk0RTJCRjlFOTE0QjREMgorOjEwOUYwMDAwN0IwMDlFMzNGNkRFMUYyMjcyREMyNkJGNEZDMkZEQzNFQworOjEwOUYxMDAwNkVBMzc3MTlGNDU3N0ZFRkE3QkYzMEMwQkE1MzNBQzA4QQorOjEwOUYyMDAwRUU4OTQ3N0I1RjhEMjczOUZCQkFDQzc2QTA1REE2RjgxQQorOjEwOUYzMDAwMUNFOEY3RDBFMDU3OUMxMzNDQThCNzVCQzRGQzE3OUEwOQorOjEwOUY0MDAwQzI3OTY0MDc5OUQ4N0NDQUM3ODVGM0QwRUU3OTU5RThGRAorOjEwOUY1MDAwOUQ4NTMxOTA4N0VGOEQ5RUMwRDc0OEI3MTQzMzk3NTdCMgorOjEwOUY2MDAwRDgwRUJGNzcwODdCQUIwMzUwRTI0MEJDMUM4MzdENzdFMworOjEwOUY3MDAwQTZEMERGQjhGRjc5MzQzREI0OEFGQzM4MTZBMkU3NDc5MworOjEwOUY4MDAwMDdDQ0RCRDBDRkYzNTE4MTIxNkNFMjdFMDlGMjYzQTlDQgorOjEwOUY5MDAwQUQwQTRCODZGQUVBMzE2QjQ4RTVGRTJFOEIwMUY0RkZFMQorOjEwOUZBMDAwQUNDN0VGN0IwM0Y3MTVCMzBFNzAzRkQ2QUM3Qjk3RENFNQorOjEwOUZCMDAwODJGQjhGOEYyNjRGMzBBMUJDOTlDMzAyRTQ3NzlFQzdFNgorOjEwOUZDMDAwQjgxRjdBMDEwQjcxN0YzNTczMTg3MEJDRkI0MDZDNkM0NQorOjEwOUZEMDAwNDI1MTEzMDRFQzVGMEQ5RjI1ODM4NDc2ODVEQTAyNzk2NAorOjEwOUZFMDAwMzI5QTdENkQ1NTMwRUVDQzE2MDNFRDRCNjZCNUVBRkQyOQorOjEwOUZGMDAwRTkxNzU2REQ1Rjg1N0E3QzQ1OEI4MURCOEZBRDEyRTlGMQorOjEwQTAwMDAwRjE1OUNDRTc0MUJCNDNDMzZCNjE3NjAyQzk4MzYwOEJENgorOjEwQTAxMDAwQzE4N0UzOENDQkU2N0EwNTQ4MTRBMkY5ODlCNEM1MjgzOAorOjEwQTAyMDAwRkNGMDAyOEVBNUNDMTBDNkQ0MjBGMTc0ODU0M0E5MUE4OQorOjEwQTAzMDAwNDgzRjZCRkRCNTE4MUIyQ0U4MEZFQjREMzc5MDFGRjgxMAorOjEwQTA0MDAwODJDOTM3OERGQ0E4QUUzQzg2N0VDNDE2N0I0MzZCMTU1NworOjEwQTA1MDAwMkZBNzM1NzNDMURBRUJBN0YyRUIxNDZFRjAzMUQ1ODU3QgorOjEwQTA2MDAwRjIzMjMzREI0MEZENDVDRjc3NEU5QjNFMUY3RDNFQjE0NAorOjEwQTA3MDAwMjBBNENGQ0Y2MjgxRkNFNDZDRjQxQkU5QkY2NzY2NzM1OAorOjEwQTA4MDAwM0Q3MDYxNTVBNjM4MDdGMEQyMzk0MDhCNTE3RDNCMTNBNgorOjEwQTA5MDAwRTVENTRBODVFNEU1RDIzNDhFMkY0MzNBNEZCMzlDOTVGQgorOjEwQTBBMDAwRDM4ODdGOUQ2MDVGMTBCQzFDRkVBQ0VCREMxMkVBQ0Q1OAorOjEwQTBCMDAwMTYyN0U3Q0JGRjI5RENEMUYwREU5NDlEQzdGMThCNDY1NAorOjEwQTBDMDAwMUU4Q0Q3QjI1MjBBNzE3QzcxQjhBRkQ0N0ZCMTMwNUJBRAorOjEwQTBEMDAwQkZFRkVDQ0JGRkUzRjc5RDlDMUY1N0NBNjJCRDM5NDgyOQorOjEwQTBFMDAwMEVDRDc0RjAzOTdEMjQ3OTlGMDlFMzc3MUJEODA3MDBFMgorOjEwQTBGMDAwRjdBQzk1NzIwOURBMjlFM0E2RDg2ODFFNzUwN0FDRTRCNworOjEwQTEwMDAwNkZBRDVERDIzMzE0RDc1MTVENDU0RjVFQzMwMDc4NDVDNgorOjEwQTExMDAwNjgxNTREN0U0MUJEOTk2RUQ4MjdFMEJBNkRENTlGNTMyNQorOjEwQTEyMDAwODFBNjY1OTFFNzRFNTNEMjdDNEJCMzEzNzEzRkYyRDFCOAorOjEwQTEzMDAwRUVERjIwQkQ3NzVCNDkzRkMxRkYwRTlBNTE3RUJEOTQ5MworOjEwQTE0MDAwNDk3NjUzNUU1QTYwNjUzNkVBRjU5OEYwRDY2NzMzRDFBMgorOjEwQTE1MDAwNEVFMTc2NTI2RDk3QjkwM0VEQzA5OTJEMTFFNzVFRjg4NworOjEwQTE2MDAwQ0Y2QUZEMzkxODZCNzU5MTdGODNCNUVCQkZDRkRGMUNDQworOjEwQTE3MDAwRDVFRTkyNzMzMUFFRUZENzlCMDJDM0QwQkVCQkUxN0E2RQorOjEwQTE4MDAwNUYzMkNBRDUzMzBCMEMwQ0U5M0I0QkY2Q0U0NTM5NzIyNgorOjEwQTE5MDAwQzZBQUI3QkZDRkQ4MzlCRDc2NjY2QkYyREQ5Qjg3NzQ5MAorOjEwQTFBMDAwRUVDQjVGNDI2NzZGMUVEMjc5OTY4MTA1MjJGQkE5NDVFRgorOjEwQTFCMDAwM0EwMzdEMTcwQTNBOUZEOTdCNzUxRUQyRjlCM0RENTc1MgorOjEwQTFDMDAwRTcyMTlERDcxQkRCN0NCODZFOUVDRDA4RUM0MjNDOUUwMAorOjEwQTFEMDAwMUNFRjI3RkIwOUU0NTVERTc3RTFDNzAzNTFGQzc4RTA2QgorOjEwQTFFMDAwN0Y4RjFGQTlERDYwRkFGMEI3N0Q3MEU4RjVBMURCQTREMQorOjEwQTFGMDAwQTZBMTNDOUM2OTMxN0ZBQjVFQzQ5RjAxRkQ2QjE2MzMwOQorOjEwQTIwMDAwRjkyNTBFN0NGNUM1NjNDRkEwMUREMjI1OTMxREEyRjVCRgorOjEwQTIxMDAwNzc0MDA5NjRBMzVGRTFDMDMxOEYzNzI4MERERUZGODNFQgorOjEwQTIyMDAwQzI2RUY1NTg1ODEwRkQxRjlBRERBRkQ5OEZEMUYyRjhFNAorOjEwQTIzMDAwQjg5OENGRDk2QzVGMERFRDE3ODVCRjc2QkVFOEQzMTIwNQorOjEwQTI0MDAwRkE4MkRCQTlEQjI1RjJDNzVBRDQ0RTFGREFCRDc1QUZGRgorOjEwQTI1MDAwQ0M3MEEwQkZGNjc0ODhGQjY3RUJGNjhFMjJGRkVEODIxMAorOjEwQTI2MDAwRDBBQkUxNTRCNDBCQkIyNDA3RUUxRjE2NkMzRjExODczMworOjEwQTI3MDAwRTdEREIwMUYzRDkzNEQ3OEUzRkJEMUYxNjIzRjdBM0FDMQorOjEwQTI4MDAwRjQ1MTFDOUU4QkMzRjgzN0UzM0UyMkQ2REQ2QjQyRkVCMQorOjEwQTI5MDAwQUQ4MzdEMUE1NDYxNzU0QUVGMTFFQ0FGQ0VDREJDNDE1MAorOjEwQTJBMDAwMTQxNUZCRjVGQjM2RURGQzcyOTNERjQ0RjI2RTUzOTcwOQorOjEwQTJCMDAwMTRDMjdENUE5MjI5OTA5OTg2RkE4OUE1Mzk0RUM1RjYxRAorOjEwQTJDMDAwQUY5N0ZGQ0VGNkE1RTBCOTY2RkZCOUIxRUY2Qjg0Q0JDRgorOjEwQTJEMDAwOERFNzRERDBCRTY3NjMzQ0YxNjE4RjkxRjlDODBFRDgxMAorOjEwQTJFMDAwNjgxNzcyNDkyMTM5RjVFN0NENEVEQUY3RDAwRkQ0RkY2MAorOjEwQTJGMDAwNzMyODkzRjI5QUJFOUVBQkIwQjAwMjc4OUYzQkQ1RjcxRAorOjEwQTMwMDAwMUVEMjBERTU3NzM4NEE3RTQ3RTZGQkNFQTM1OTM3RDdGNAorOjEwQTMxMDAwMkYyMENGQzMwMzlEOEY4QjczNkEzQ0RGOEQ2QzVGQzc4QgorOjEwQTMyMDAwN0FBOTFEOUVGM0VBRkFENUY2MDFBQzYxOTQwQTcwREZCMgorOjEwQTMzMDAwNzdCN0NEOEJGNjRCM0RGMDc1NjM0OTNGMUYyRTE0NTMxNQorOjEwQTM0MDAwRDFGOEIwNEVGODc5RUJFNzdGNDhGQjgxRkFGRDkyMDMzNAorOjEwQTM1MDAwRkRCQjBCQkQ5QzBGMTdDMjNFQzkzQ0UyRDI3NUNCM0E4OAorOjEwQTM2MDAwODEwRjIzRTAxRTZDMUQ1RjlEQTM1RkM3N0RGOTdGOTI2NworOjEwQTM3MDAwM0ZCMzIyNDc2RkNGNkFGM0Q3RkNFMjdERjNFQzkyRjg0QworOjEwQTM4MDAwRkE4QTlBNTdGNEZFMzJEQTlGQURFRDBGQUY1NEFFREQ4NAorOjEwQTM5MDAwRDkwNzBGQzc0NzVGRkU5RjJDRDdFNjQ0RTE2NUIwRjNBRQorOjEwQTNBMDAwODJFRjJDRDdBMkNGMEQ3MkI4MUYxQ0NGMERGMDVDRjczNworOjEwQTNCMDAwN0Y3QTZFRjA4OURBOTY2NDIwM0RFOEQzOURBN0EyOUQ0RQorOjEwQTNDMDAwOEVFM0I0NkU5MUM5M0U5ODIwRjM3M0U4NUFCQjk5RkNCMgorOjEwQTNEMDAwQjREMUU3QURGNUVBMDQ3MUJFRDhGRDg3NkI1MDdGRUVDRQorOjEwQTNFMDAwMzEzMkQ0RUJGMzZERjNFODNDQjM1RURFNjU3MkE4MDM2MworOjEwQTNGMDAwOUMzMzJBMDdDOTdFRkZBRUU3RUY4RkU2RjQ5REJGNjc2NworOjEwQTQwMDAwRTJGOTdCNTk4NTVFM0VCRjZBRkIyMjIxMTA0MUU3OEE1MworOjEwQTQxMDAwMjIzMEZDMDdFMDY3OEIxMjY0QUU4OEVGNEZFNjcwN0I1QQorOjEwQTQyMDAwRjg1NTExMjdFMzMxQjE1NjhDQkY3OERDMUVFQkMzN0RBNAorOjEwQTQzMDAwODdDN0MwRTM3ODlBQjNGQzVCNTAwRTVBNTQ4RUM3QTcwNworOjEwQTQ0MDAwNUVCQTgzMTk2MDdFNEYxOTNCNDk1RTA0NkI2RDVFOTQ2MgorOjEwQTQ1MDAwN0I5QTlGNDVFQkRGMkVGQzA1NTdDQURGN0JBM0Q2RkIxQgorOjEwQTQ2MDAwREU3RkYyN0FGRkI1MzZERTc3M0QwN0RCMDBCOEQxQUQ4RgorOjEwQTQ3MDAwMDM0NkU3NUQ2RkUwRjk0REU2QTVGQzNBNTgzRjgzRjFFRQorOjEwQTQ4MDAwRUREQjM5RkUzNzczNjhCREY5NDZEMEI5RkUxNUNBOTVDNAorOjEwQTQ5MDAwRDhEMkRFOEZEMDlGQzNGNjk4NTVEQzU3QTA1RjgzRjRFNworOjEwQTRBMDAwRTFFQTY0QUVBNzE0NkYxOUUyMTlFQ0I5MzI4QzgzM0E3MQorOjEwQTRCMDAwOEVGRkJENjY3MEZCRUY3NERGQkFFN0Y2REZFOTQxRTVCQQorOjEwQTRDMDAwQ0ZERjY3RkYzNTY1RjgzRkM1Nzk5RTJDRjdFNUExN0VBNAorOjEwQTREMDAwNUM2MTA3Rjg3MTVGRjc3MzFFM0ZCM0Q5Q0FGOTczQjNCNAorOjEwQTRFMDAwQzRGOTkyMzUyNjY4RkUxMTlBNTdGMDc5N0VGRTFEQ0Q4QgorOjEwQTRGMDAwNTcyQzU3Q0Y1NzdERjk3RkIyRENCNEY1QzFGMUJGMkM5MworOjEwQTUwMDAwMzdFN0ZGMzUwRUZEOUM4M0Y3MTMyNEJBOTU1NTc0MTM3NgorOjEwQTUxMDAwREU3QTVGOTFEOEI2MDhGRjczN0QzNzhGNDM0QjE3RjAxMworOjEwQTUyMDAwNkFERkZGMkFFQ0JGQjlCOUJFQTExOENGRjVEOTdCMTZGNworOjEwQTUzMDAwMEI4QjA3NTMwNzc5MENFRDJFQkY4REZDRkY3NTlEM0NFRgorOjEwQTU0MDAwNEVBNDZFMDlBM0YzREUzQUY0NkYxNkExREZBRjg2QTEyNQorOjEwQTU1MDAwN0RCNzRGMEQxNDYwRkIxNUVGREI4MjcyM0NGQUM1MjcwNworOjEwQTU2MDAwMzNCMkVCREVFM0Y5NDU2QUEwODhFMkM1OTZGNEU4Q0VBMworOjEwQTU3MDAwMTlDQUJFRjk2MjM5RkEyRDAwNUVGMjAzQjhEMTJGMTM2MQorOjEwQTU4MDAwNDFBNzY5QjlGQzdDNDA0QjZGOEI4MjFGRkRGNEM0RkY2RgorOjEwQTU5MDAwOUQ3MjA4RURDMTU4QjU5QkZDRkU3NTdCQjg5MTU2MjY5RgorOjEwQTVBMDAwRkJDODNGQ0ZFRTczMzFFNEEzQkEzREU1QTM1RUEzRkE0NworOjEwQTVCMDAwRDY1MTY4Q0Y5NjdENTBFRDQwM0ZDNDY3RDdCOTI5QkVDQworOjEwQTVDMDAwNjBBOERDQjMwMEVEQTlBMzU5ODE3MTA4QUZCRDM0MzQ5NAorOjEwQTVEMDAwMTFFREQxMENCMDQ3RDFCRUZENkNGN0M0NTEwOEI3MjZDMAorOjEwQTVFMDAwRkZENkEzN0YxQkZBNUQ2RkQ3RkJBRjk5QzU5N0Y5MzBGNAorOjEwQTVGMDAwRkFCN0I3MERBMUZERTFFRTk0QzBDREI5Qjg0RkIzNzI3MworOjEwQTYwMDAwNzg4MzZCQUM3Q0JEMEFCRjc2RjRGQUQ3RDZGRDEwRDkzRgorOjEwQTYxMDAwNDBFMzBDRjlCRTg1Q0VBMTM1QjlCMERFQzgwMjk2RUM5OAorOjEwQTYyMDAwN0U3OTcyOTU4ODk3MDM3Q0YwNzhCREFFMUExRUU3MjE3QgorOjEwQTYzMDAwRjIzNkI3M0U2RUYxNkNGNkY4QUI3MDdFNTdFNUYyQjhDNQorOjEwQTY0MDAwOTQzOTk2NUUwOUZERUM3M0M0RjlGQjhEMjI4RTQyOEIyMgorOjEwQTY1MDAwQTMzQUUzRjBDRkM2RkE2QzQ5NTVGRkI5N0IxNkI2NzczQgorOjEwQTY2MDAwNzBGRTE3RjEzMUIxMTdCOTlEOUNFNTMwMTFERkQ4NUI1MQorOjEwQTY3MDAwMTkzRjM3MDJCRTQxRkE4Q0VERUQxRTE3MEZGM0M5Njk4MQorOjEwQTY4MDAwMEY4RjQ1N0MxRUI4NjgyMDdDMjgzNTZGRDA3OTQ5M0NGNworOjEwQTY5MDAwOTIwREZBQzk1RUREQjMzMjFGRkQyNThFNzdBRjQzQkE0NgorOjEwQTZBMDAwQTg2RDhFMEE0NEREM0VENUZGMDBDMUExMzQxNEUwRkU0MgorOjEwQTZCMDAwQjFFMkY3NDYxRTBGRjg0QTJDRTlGOUY2QTEwQjI5MUU2NAorOjEwQTZDMDAwRjBFQ0ZCQzBBRjk5OTdFQTAzMkQwREIyNjUxNEZGOTcyQworOjEwQTZEMDAwQjVGRjFERjJEQkRCRjc0ODAzQzY3NTNFOUU2QkUzRTc3MworOjEwQTZFMDAwNDlDMTZFOEEzMzYzNjNERDg0MEZFNTk1MEY4MjY4NUYyRAorOjEwQTZGMDAwMjgyQjE1RjI1NEI0MTg3RDA2MkJEMjc1MjkyMzNGN0JFNQorOjEwQTcwMDAwNkVCQkMzODA3NEM5MTA3MTI1RTcwRUZDRjc4ODAwRUQ5RAorOjEwQTcxMDAwNDczNDNGN0Q4ODUyQzVEOEIzMUNGNzU3Q0FEMjlFRUI0OQorOjEwQTcyMDAwNjEwNUIzREEzRDRFNDMxREZBMzU4REJENzVFNDE3NzlFOQorOjEwQTczMDAwMjU5NkZDOUYxOUZCQjM5NzdEMEZGMjE5QUQwRTI2QTE0QworOjEwQTc0MDAwRkNGOUQ1N0QxOUM4RDc0MTk4NjdFRTAwRjM2Q0NDRTVDQworOjEwQTc1MDAwNzEzQkNBMkJCMTA2RDQ1QkNBMUE0NjcxODg4QTMzQTlFOQorOjEwQTc2MDAwODJFMDVFMDc3OUU4Njc5MUUwMUJFREZDMTFDMEY1QTA3RgorOjEwQTc3MDAwM0U5QTlCMUJEODhFNzg4RTE1NzI4MDM1QzY5MEJGRDBCRQorOjEwQTc4MDAwQUU3MEJGODZCREYxRkRFNzk3NDI3RUFCRjBCNzFFM0FEMworOjEwQTc5MDAwNTAzODk5RkM3MzJCMTUwOUU5NzBDMTM5MjNDMzAxREZDNworOjEwQTdBMDAwN0Y5OUNCRUQxMUJCRDJDRDFDQjY0OEZDMUZBMkI4Q0IxNAorOjEwQTdCMDAwQUM1Nzc4NUM5QTYyRTQ3Q0EyQUM3NDc3QTBGRkVGQ0JENAorOjEwQTdDMDAwQjQwMEM1OTc1RUQ3MTI5NkU5RkNDQTcxNzI2RDk1MUFFRQorOjEwQTdEMDAwQjE3RkQ5QzBGNTQ4REQ0RUJFNkY4RURFQUY1QzRFN0ZENworOjEwQTdFMDAwMUNDREQ1REJERDdERjk3RjkyNURGMjRFREZGODdGRTc5MgorOjEwQTdGMDAwM0U4NEU5Rjc2RkQxRjY0OUY0N0VFRDEyRkIzQUFBQkYyOQorOjEwQTgwMDAwQzFFQzE0MkQ4RUEzQTI3RjFDRTI4NzU3RUQ5QTFEMTQ3NAorOjEwQTgxMDAwRDRDNUI5NTREOEY4QjhDQ0EyRUZGRkY5NEMyRTI3QjQ2MAorOjEwQTgyMDAwQjg5N0E0NjY3NTI5QzY5N0Y3RkU5NDkxM0Y0RDhCQ0JEOAorOjEwQTgzMDAwRDFFMjcwODIxNTdDOUYxMDM0ODBEQ0NCQzRGMzlGMzY0QworOjEwQTg0MDAwOEFCRjQ5NjU2MTQ5MjI3QkJGODc2MUZCMjExODg3MDM2NQorOjEwQTg1MDAwRUQ3QjcyQjNBOEZGMkRDQ0RCMkE5MzVDNTQyNTg0REZGQgorOjEwQTg2MDAwOEFGMTFCMDkwODc3NjhFMzVDMUNFRjM2MUI4RDY3QzUwRQorOjEwQTg3MDAwRjg4RDA0REEyN0QwM0E0RUYxRjNCOENENzFGMzc5QkNGNAorOjEwQTg4MDAwNjcwQUU4NUZDQ0E3RTQ3MEJFQjQ0RTMzNTExQ0E3MTYyQworOjEwQTg5MDAwOTdBMUM1NkY2ODc4QTkxMEY4NEVDOTlGOUI4OUZCMDFFNQorOjEwQThBMDAwMkRDRTYzN0Q0Q0U4RTc1NjE5RTMzQjg0REM1RjYwMjBFNgorOjEwQThCMDAwQjlBRkM1Q0ZCNUU3QUEyMUU0Rjc3MzE4RTc2OUJCRjJEMgorOjEwQThDMDAwNzg4RTY4RkM2QTcxMUQzN0E0MDc5MkYzNDY1MzVDMDdDMworOjEwQThEMDAwRTk1MTJEMUU0M0UzOTcwODNBMDZBRDMwRkVBNjU3Qjg1RQorOjEwQThFMDAwRkQ1RTMxREY0NEYwOUY1QjMwODlGQzg3RTcxNjE4MTg2NgorOjEwQThGMDAwQUVBMzhBMkUzM0U3QkZBOEYxMzY0RDMzQjEzMEY2QUJBNQorOjEwQTkwMDAwODRBQzI4M0YzNTNFQjg5Q0ZEMEE3NDJENDBGRkVDQTE3NQorOjEwQTkxMDAwQTY5REQ5Mjc2MUNEMUY2RUVBQTRGNDlDNTVFQTk0NDcwMQorOjEwQTkyMDAwNjJEQTNCMUQyNUQ1ODg2Nzg3NEU1MUFFQzEzODk1REU2QQorOjEwQTkzMDAwQTExMkIwNEVDOUNFOUNBOTk0NEZFQzNEOEVGOTQ5RjlCNQorOjEwQTk0MDAwMzc0RjU1NDA0RjlDQ0JFREREMkE2MTlDNDlGRTg5Mjk0QworOjEwQTk1MDAwOTQ0NzlFNEM2MTZDQ0MzM0JGOUYxMkE0Nzk3MzdGRDMxNAorOjEwQTk2MDAwMzhFMTZGMzIzQjAzRDdFNTI1RTI3RDgwOUVFNURERTRFQgorOjEwQTk3MDAwRDdFMTcxRkQxOEY3ODdGNEYwRDg0QzY0REY3ODQ0QkM1OAorOjEwQTk4MDAwMjVBQjE0RjE5Nzc4RjIwMkY5RTZFNDUxNzQ1RTZENjMzOQorOjEwQTk5MDAwRUE5RTZFMkM0RjMzNzM3RENGMzgzRjM3RTc3MjdGMzA5RQorOjEwQTlBMDAwQTk0ODk0OUQ2OTlBRkZBODI3ODhGMkFBMzlEMzQ5RUQ0RQorOjEwQTlCMDAwRkJFNEVBMUU3Mzg4RkJCMUY4Rjg2RkVEMkRBNjczMjY1MQorOjEwQTlDMDAwMkQ4RTk0MzE0N0ZBRDQ2MjhBMzdEMUU1MUZCN0YyNzNERQorOjEwQTlEMDAwNEZBNjM4RDJEMTdFNjgzNjBBM0I1NUU0NjNEMjAyNzc1RgorOjEwQTlFMDAwRTU0NUQ4NDk2RjhERkY1MTExQUU4NzMzRkI3RTkyODNDOQorOjEwQTlGMDAwNzJFQTQ2MTNEOEYxMDNDOEE1RDQwMjJFOTdDRTE5NkQ3QQorOjEwQUEwMDAwQUQxMkQ4NkQ2RkE0MDY2NjIxQkU4RUM1NEU5RkUwODQ0MAorOjEwQUExMDAwNzk0RDRCMjgzNzM5MTFERUUwQ0Y2NTk0OTM4OTgyREU3QQorOjEwQUEyMDAwQ0VBOTFDM0U2N0E1NUY5QTAzRkQzNjVCNjEzRDQzRkJFMworOjEwQUEzMDAwQzQ4MEUyMjM3QjNEMzA1NUJBMERFMDZFOTY4NEZEQ0U5NgorOjEwQUE0MDAwRDQ3OEIyREIwQkQ0NzgzQ0Q3NUJEOEY4MEVDNTU1Q0JBNQorOjEwQUE1MDAwNDIwRUM4NDIwRUJDRERENDkzQTNFNDgyQ0FFRDVDMjM0RgorOjEwQUE2MDAwQTNCREZEOEUzODVGN0UyNzkzREQ1MzMzODAzRjczN0QxQQorOjEwQUE3MDAwMUVCNzBGMjdDQjZBMzFGMjkxRkJFMUIxRUY1NDAzNUZCMAorOjEwQUE4MDAwQzgyNjZGODhFODk3NkU1NzkxREYwRkRBQ0IzQzNERDAzMAorOjEwQUE5MDAwOEY5NEYxRDM1MjhDNEI2RTRFRkY2OTI5QzY5NUM4MkUwOAorOjEwQUFBMDAwQUZDNzFGOTE1RjlGQzdGOUI4MTJFQjIxREU2MjFCNEE0NworOjEwQUFCMDAwNTE4RkZEQzNGQThCODdGRThBRkVGRUZFRkFGQTMxNzNEMAorOjEwQUFDMDAwQjgxNjVBN0E4NzJBQjAzRUJEOUVDMDI2QTREQjg1MTlFNworOjEwQUFEMDAwMjdFOEJDRjU4NzI5NkYxREM3Rjg4OEI3OEM2REUzRTJCRQorOjEwQUFFMDAwNTAwRTY1NEE4MjZGQjlCRDc2MjQ1RkYzNkJGMkI4RjZGQgorOjEwQUFGMDAwMjM4NURDQUYwOTcyODhDNzRGMTZGMzdCMzRENTUzMTkxMQorOjEwQUIwMDAwQURFNzZBMTE1NzMxQzFDMUVGMjU0RDI4Q0RGNDM2QzNFOQorOjEwQUIxMDAwRDQ2RTYxQkQwQUNBRTkwOUM3RkM3MTQ4M0YzNjM1NTA5OQorOjEwQUIyMDAwRUEyRjFFREMwRTYzMUVBMzFBMjk1NzI2QUExMTc5RjhGNAorOjEwQUIzMDAwN0I1MzgxM0U3RkIzNTc5RkJGNzVDQ0Q3Rjk5MUY5MzVEMQorOjEwQUI0MDAwMUVERjhCMzhFRjk3MjUxRUE3MTlCQzg2Mzk2ODlFNkVDRAorOjEwQUI1MDAwMjk4OEY2NTJFMThCMjkxREMyN0Y0QkYxODRGRjJBRjYyQQorOjEwQUI2MDAwNzMyRjhFNjE1NDlFQjREM0IyMERFRjE3Njg3RTcwNTk2NworOjEwQUI3MDAwOTQxNzdBOTgyNUMzNDVGODIwM0REQjJCODlCODQ0MzdENAorOjEwQUI4MDAwOURGNUIwN0RGNzNCMzhGRUEwQUUwOUZBRDkzNzQzQTU1NQorOjEwQUI5MDAwNzU5QzY0MzNCMEVCNzFBRDk3NUFDODdFRDJENjQ1QjM3RAorOjEwQUJBMDAwMTVGODFCRjA1ODk2NkE4OTQxN0U2RjM2N0EzNzYwNUZEOAorOjEwQUJCMDAwNzI4QzU5NDVCRDVBMUU2N0ExQkVFNTlGMjlBNDk3OTY4MAorOjEwQUJDMDAwNUFDRDE0REE3QUU4RDExOENBOTcyOUNDOEZGMTE4MDAzNworOjEwQUJEMDAwRTI1NDRDREYzMjdBNDMwRDM4NUZBODg3RjM2RDc2MzI0QQorOjEwQUJFMDAwOTI1NzcyOTk4OUY0MzRGNDRCNzQzREI0QzYxMDYyMzRCMAorOjEwQUJGMDAwRkY3Mjg1RTIyRDA1Q0NEQUJBODM5MUU4RkIxMzYyNUQyMgorOjEwQUMwMDAwQ0IwNjE2MjYzOTk2NjIyMTM5NzYxOEZBQzc3RTBGQkQxMworOjEwQUMxMDAwMkU3NzkwMUZBRDQwQkQxQkNCQ0Y1QkYyRTlGRTREN0Q4MworOjEwQUMyMDAwREZCRDIyQzU4MEMwMTUwODNCQ0FEOUM1RUY3RjY5RUJERgorOjEwQUMzMDAwNTk5MzJGRDFFQjE5QTQ2MDhFM0I4OTcxMTA1NUZDMDdGNQorOjEwQUM0MDAwQTY5MTg0N0E5RjkxM0RBRjlEMEZBNjVCQjQ3MkM1ODc5NAorOjEwQUM1MDAwRTMyNEY3RDVFN0Y3QUY5MjQ0M0UzNTNGOTNENjFCNTQzNAorOjEwQUM2MDAwMDkxQjRBRDBGRUY4Q0Q1RjkwNkYzNUY5QjA3NUM1Q0Y5RQorOjEwQUM3MDAwNDgzRTVDOEFGRjgyMDcyOTNGQzlFRUUwRjhDRjRGQzMwOAorOjEwQUM4MDAwNzUyOEM3RTRBN0ExQkU2Qjc2N0E1NTdGNDRCRTAwOTZBRgorOjEwQUM5MDAwRDEzNDE3RTIwN0VBNDE3RTRBRDU4OTFDMjVDMkZGOTdDNQorOjEwQUNBMDAwOUFBRjkyQjA4NDdBQkUwNDgwRTM5MDU1NERDM0Y1M0FEMgorOjEwQUNCMDAwQzBCOEI1N0NEQ0Q4N0ZFQ0I4MUUxODE3RUExREIyQzM0QgorOjEwQUNDMDAwQjg1MDZGQkJENTFDMzZDNDBEMzRGRTE4MTVDN0JCREM5RAorOjEwQUNEMDAwQjg4MDRFNDJFQTI0ODE2N0UwOEIyMEZBQTUwRUQ5MEQ5OAorOjEwQUNFMDAwQzQ5RjkzNDQ3Q0VFQTE0NDNFMUUyQkQwQzdDRkU0QzQ0NgorOjEwQUNGMDAwQzBGOEU0NkZENUM3Q0JEQzI4NkQ2RTQxQkRGQzg0MzU1MAorOjEwQUQwMDAwNkUxQkYyRTM2RjA0OUYxQzg5RkQ1OTBFREE1NUJGOTk0MworOjEwQUQxMDAwOUU3NzE4RTVDQTg0RjhBNTJEQzgyNDkzNTgyN0M5MUIyNworOjEwQUQyMDAwNERFRTVENDgzRTUxODY3OTkwN0ZEN0U2MDNERDdGOThGMgorOjEwQUQzMDAwRjVENjc0RUNGQ0IwRjM4OTFDRDQ3RjIwMUZCRTk3OUYxRQorOjEwQUQ0MDAwNzgyOUZDMUEzRjZBNzAyMzFGRTIzQUU4RTNDMzI4RjgyNworOjEwQUQ1MDAwMzUzRTYyQjc3NDUyODBFMTE2QjA0QjMxRDVFQzU0QzYyMworOjEwQUQ2MDAwMUE3ODFDQjg5QURFM0YzRjYwRTIwOTk2MDYzRThGQTUyRQorOjEwQUQ3MDAwNDE4MkZCNDZFNzVBOEEzNzFCMzEyQ0UwNDdCOEE2OEQ0MworOjEwQUQ4MDAwRkM3Q0E4ODI5NTNEMzNGMjcxMUYwNkYwRDZGQ0ZGODQ0RgorOjEwQUQ5MDAwMzdEQTJFQkY1QzNDQjQwNjU3RjQzQUQ2QzY5NzI2RUY5NgorOjEwQURBMDAwQTQ3OEU4RkFBOTM2OEE4RjFFMjdFMjRBRUJFNzFCMjgyNworOjEwQURCMDAwNEUwOEY2NkY2NEY3RDczMTRCMDhFNUYwQjVDMjhFRDY3MgorOjEwQURDMDAwRTJGNDdGMjU3MUZGNjc3MEFGNTlERDExNjE4RjVGMUE2MworOjEwQUREMDAwMjdBRDUyMUM3NjcwMDk4RkE3RUVCM0I3NkJCOUJERERGNgorOjEwQURFMDAwQTdEN0M0QkQ4MEY2NTE1Qzk2QjdERkFGNTJCQ0M0Q0JDOQorOjEwQURGMDAwMTJBRjFGOUNDMUI4QkQ1RTIzQ0FFNzM4NDQzQzA1Q0NFNgorOjEwQUUwMDAwMjVBOTNGNUVCREJEODMxMUZGQjdEQkIzQTgzQzQ1RTY3NgorOjEwQUUxMDAwRkE4NzdEOEZFQjlGRjY0QzZFNEZCNkRGOTk0N0U1QjAxMgorOjEwQUUyMDAwMkYxODg2Nzg5RjI1ODNGRENDQ0ZFN0Y5RkUyMDk3OEZEQQorOjEwQUUzMDAwMTdFREE3NUQ5RkNGRURCMjNFM0I0N0U0QTNGREIyQ0YzOAorOjEwQUU0MDAwNjYwNDM2MjJERkNGMjlGMjBEOTU4MEFGNjY5OUI4REYxMAorOjEwQUU1MDAwMTVGODZFMzNERTg5QTk2MjBEREI5NTZDQkM1RkQxRjAwRAorOjEwQUU2MDAwQUUyMTlCRjhFRTI5RTJCQjQyRTBCQjZDMURERjg1RjIxMAorOjEwQUU3MDAwNDc3M0Y5OEJDMjU0RTNCQjNFN0UyQjg4OEU4NzBCRkM1NQorOjEwQUU4MDAwMUNGQjY5Nzc3NjdFNTA4N0ZCOEEyRTMzRDE0MThCNkIxMgorOjEwQUU5MDAwOEM1RUU3MTFGMDlDMzQ3Mjc4RENCMjRDRjBFQzFFMDg0QQorOjEwQUVBMDAwOUUyQkUxRkY0ODdFMUJDMjM4OUYwRkI2MEU4NjI4MkNEMgorOjEwQUVCMDAwNjgyRkU5NUYwNzZCM0M4MTMwOEVEQkI3MUU5NkYzN0QxMAorOjEwQUVDMDAwRTQyNTcwQ0IzNkUyOEJEQkVGOTQzOUJGQzY3MjdEOEUwMgorOjEwQUVEMDAwRTc0OUM5MzA3RThEMThGRkY2OTVGRTRBMjdENkFCOTExQgorOjEwQUVFMDAwMDgwRjM1NURCNTE0RjdDNTJBRjlCOTkwMTdGRTIwM0M1NworOjEwQUVGMDAwQ0Q0MkNFNjlFNzU3RDM0NEZCMjk4RTFBMjNGQUUzQTY0NQorOjEwQUYwMDAwNTZFQkNGOTFBNkQ5RjgzOUQ1RUQ1MzhEMUY0NkRBM0REMgorOjEwQUYxMDAwRDNEOEVBQ0YzMTRFNzExQTlFMzM2OUY1ODE4RkRFQ0ZENworOjEwQUYyMDAwQjdCQkU5RkM1QjY1Rjk3OENFNzQ1OEY4NTlDRTAxNUY4MAorOjEwQUYzMDAwMjNERkJGOTYzODZGRjNGREMwNzdGOTRGMTY5NUEwM0YxQQorOjEwQUY0MDAwNkU3Q0QyODJFRDZCMjBGRkVDQTZFMTk0N0YyREU5RkJCNQorOjEwQUY1MDAwMEZCQzg1RTU1QkYzMjg1RjY5OTA4ODRGQ0ZENUYyRjY4QgorOjEwQUY2MDAwMDU2NTc3NEVDQThDNDNGOTJGRkFDNUY1ODRGQkY1OTgzMQorOjEwQUY3MDAwNDA3QjBERDRGMzhDQzgyQUMxRjhEMTRBRTEzNzM4NzcyOQorOjEwQUY4MDAwM0ZBM0YyOUI0NkRBNzk0OEVFM0M5NUZDN0U5NTMxQTJEMAorOjEwQUY5MDAwRkMwN0JDREYzNzQ2RkQ0NzA5QzYxMTU3NjZGNTRFNDcyQgorOjEwQUZBMDAwRkU3RUEzRTRFNUUxOTgzRjJDN0QzRTdEQTAzODg2QzI3RAorOjEwQUZCMDAwMDIyOTNDMENGMDUyRTlFMkY1QUI0QjdFOUU4MjdFOTg3MgorOjEwQUZDMDAwQ0EwQTlFMkZGNDk2QUZDQ0M2NzJDM0Y5RTkwM0RERUYyRgorOjEwQUZEMDAwOEQxMUZCOUVCRUZCNkE2MjVEQkZFODNCNDFGN0QzRkM2RgorOjEwQUZFMDAwMTZDOThCNTNGNDhGMzk0MTdFMDc2NjkzMUNFODNBRjNGOAorOjEwQUZGMDAwRkIzMjE1RjQ3MzhGRjNGMTM4RDMwQUNCRDI2NDk0NUYyQworOjEwQjAwMDAwQjcwNDRDQTUxODJGRUNCMDhDM0E4QzcxMDRGMTYzQ0FDQworOjEwQjAxMDAwNDcyMzVEQzc1OTE4RDExNUY4M0NBRTAwRDZEN0I0QUI1RAorOjEwQjAyMDAwM0YxRjFBODdDQzY1RDNGM0I5QzY0NzM1MUE3RjU3RUE1NQorOjEwQjAzMDAwRjkxOEQ2QTcxQkRCNUY0RURFMEVDNkM3MzBGRUQwMDI2NgorOjEwQjA0MDAwNUM2N0RGRDNFQjlCQkVGRUEyRDY1Qjc0RkY4M0M5MDFCNgorOjEwQjA1MDAwRkM4OTk0OEJGRDcwNzREMkJBNEFDM0U4QkQ2QzVDNzdFRQorOjEwQjA2MDAwNkREQUJBMUI4OUYzMzAxOUJBRTk5RTRFODZFNDFENEU5QgorOjEwQjA3MDAwMTc1NkM3NzgyREE0OEZBMkUwRDZFMDRCMDdEOUM2NEE1MQorOjEwQjA4MDAwMkU4NTBCN0YxNENENUVFNDNGNkVGNDRCQTQ4OTcyNjg2RAorOjEwQjA5MDAwRTc2M0FFN0VCODYwRkMxQjEwMEY2QzM5ODc2NzhCRDRGQQorOjEwQjBBMDAwQzBFNTg2RDgxRjY4RkU4QzNBNkRCRUZCRjVGMzJEOEI4QworOjEwQjBCMDAwRTFGN0Q2M0RFODc3QzI3NkVFNTFDM0JGMERFRTdBQTEzNworOjEwQjBDMDAwNEZBNzVBRkM4RjlBNjEwRUI3Mzk2NzExM0ZEQzAxMUFGRQorOjEwQjBEMDAwQ0QwOUYzRkY1QjZBQTAwNkYxRDEyQzA1NUZFOUM5MjQxNQorOjEwQjBFMDAwN0YzQ0M1NzcwMEJEMjcxNzQ0RDgwMTFBNUNEMUY4QTg2QQorOjEwQjBGMDAwMUI0NDFFNDZDMzFEOEQ4NzdFRkE3NDI3NjNBQURENzcyNQorOjEwQjEwMDAwRUI5QjU3RDQ3Q0EyRUQwMkI3NDlFRkNGNzMwOUJGOUJFRAorOjEwQjExMDAwQUJERkNGNTY4MEU1RDUyQ0M2NEI3RTM2QUY0NEZCQThCRgorOjEwQjEyMDAwNkFEMEYzMjg0N0FCQUIxOEY5NDc1QzM2MDNGOUQ5MzQzQQorOjEwQjEzMDAwN0QzRjE4N0ZERjcwM0Q5NzM3RDUwQjk5Qjg0RkM3RTczNAorOjEwQjE0MDAwMTFDRDVGNDM1OENGODNGNDlFODM0NUREMzgxQkQ3RUQ4NworOjEwQjE1MDAwN0M5QjJFMEVCRURBQzZGREYzMkIwQjI0RTE5N0VGMTk3NAorOjEwQjE2MDAwOEQ3RTg5QkVGQzI1RkVFMDlFRDEyODNGQTZDQkZBNzNEQQorOjEwQjE3MDAwQUFFQThCREMxRkVDQkEyODUxNUFFRDNEMzExQUZEMkM5RQorOjEwQjE4MDAwQUVBQTlFRDEyODg3MUUxOUVBNUI4NTc0M0Q2RUUwRkU0QgorOjEwQjE5MDAwRjI0QkZDMTYwNTA2Q0QxRjdDNDU3QzE3NEQwRkVERkNEMAorOjEwQjFBMDAwMkYyNkNEQkYwMUM3MzkyMzc1OTc2MUUxODYyQzcxM0VFQgorOjEwQjFCMDAwQzMwMjk5Qzg5NzRFNDc2NjM5RkE3MTQwQ0U3REYzMERBOAorOjEwQjFDMDAwNkUxRUIxMDhGMDM1MjYyMzEwQzI3Njc3MzBGRjc4QkNBQQorOjEwQjFEMDAwNkJFOUFBMEExOEY5NzkwNUEzRjkyRjEyRjMxRjJGRjRDNgorOjEwQjFFMDAwREZGOUNEM0NBRUEyRDI1N0YwMDQxRTg5RDQxRjM1QjI5MAorOjEwQjFGMDAwMTBBRDNGMUZFOUIxRkIwNEZDRTc0MUQ1ODVCMUZFMkU0MAorOjEwQjIwMDAwM0JFOUMxNzlBRkNGQTI3ODg5RkMwRDg2RkU3NzJCRTBCMAorOjEwQjIxMDAwRUZCMDUwOENFRUREOEFDMjlEMkU1REJFQjgzMzQ1NTcyRgorOjEwQjIyMDAwN0ZFNEZFMkM1REY5QThGMDcwNURGOTU1NDc0Qjc0Rjk4OQorOjEwQjIzMDAwRDFEREQ3RUFFQTVGN0RBQzQyOTdCRkE2Njc5MkFFRkU0QQorOjEwQjI0MDAwRjc0RTRGRDZFNUFGRUJCRDRCNTdGRkEzQkU3REJDRDA0RAorOjEwQjI1MDAwREY0MTVGNzcwMUNDN0JCNkM2OUYxNzY3RUFEQUZGMjkyQgorOjEwQjI2MDAwNkVDMjUxRTRDRkQ5QUI3OUZDNzczOTYwNDhGNzhFNDc4RAorOjEwQjI3MDAwMUJEN0YzMERGMDA3RTkzQjlFRjU1MkRDNUQ1RDQ4RjIwQworOjEwQjI4MDAwODYxOUM2OTFFOUVEODAwNUZCM0IwODhGOTdCQkY3OUVCOQorOjEwQjI5MDAwRUY5RTYxNDBEM0Y3ODMwMjExNkY3MjM1QkI5QUM3OEQ2MQorOjEwQjJBMDAwN0UzQjVERjM1OENFREY0NTU3QjM0NzRGNTdBQkFBQTc1OAorOjEwQjJCMDAwNkI2QzgxOUVBRTc2QUY5RUFFRjE2M0Y0NzQ3NUZBRjQ1QQorOjEwQjJDMDAwNzQ0REE4RDJEMzM1RDFBRkE3RUI5MDY5N0FCQTI2MDdDRgorOjEwQjJEMDAwRjQ3NDREOURBRkE3NkI3QTgzOUVBRTE5OEQ3QUJBNjVEMworOjEwQjJFMDAwMDZFRkQ1OTUwRjQ2NkY0RDFFNjZCNzJFRDJENUVGQTM0QworOjEwQjJGMDAwQkI3RjNFQzUxMUU1QjZGRDU4RDdCRjQ2RjcyMEZDNDFFMAorOjEwQjMwMDAwQkFFNzMzMTFFRkY4M0ZBNDdCRjIzMDNEQkQ0MTdGQTQ5MworOjEwQjMxMDAwMEMxQjREN0EzRjFERDM2OUY5QzJCRUY2MEZBQ0Y3MzU1MQorOjEwQjMyMDAwRjkxM0E5NjcyM0Y3OTc4M0M5QTU0QkY0OEFEODZGMEU0MQorOjEwQjMzMDAwQUE1N0EyRjY5QkVGMzFEMDdCMzRDODZBRjIxRkREMjlGMQorOjEwQjM0MDAwRjhGMzUwMENDN0ZCMTc1ODc0MERENDgzM0E2MzAwQUU2MgorOjEwQjM1MDAwRjcxMDZFMThFN0JEOTg0MkYyMEJEQ0M1M0E4REQ4RkZBNgorOjEwQjM2MDAwRERBQzlCRDJFOUFDOTdEMjAwNzM5MDFFOURDOUJDOTQxMgorOjEwQjM3MDAwQ0U2NjdFOTNGMDEzREMzMDJDMTFGRDA3M0Q2NUE4ODc2NworOjEwQjM4MDAwMkZDQzc4RUIzODlEMkZCRDkxNzA0NUVGM0Q3Qzg4RTc0MQorOjEwQjM5MDAwMThCOThDOUQxMkYyRTAyNDlFNjc0MEZFQUM1NUY4RDM5QworOjEwQjNBMDAwN0M0Qzc1NDdFMEVEOTRGMEZCQ0QxQzI3OTEzRTY0NzIxOAorOjEwQjNCMDAwMENDNTU5Q0RCQzQzMjI3RDMyRjNGRkYyRjQ4RTYxREMyMworOjEwQjNDMDAwMUU4RDRFOUIxQjM1RkNGMTdEQ0FEQTYxMkFDOUY3MzQwQworOjEwQjNEMDAwRDYyOUY0MUUwQkQ4QjJBOTFGN0VGRUYwQjQ4OUY2OTNDRAorOjEwQjNFMDAwMUUwQjg3RUY3OTg5Mjk2MzVDNzRFRDhDRThFQUIxNzBGNAorOjEwQjNGMDAwNzg5RTM3MzIwQkUyRjMzOTE2NTA5MTE4OEYyODIwQTIyRAorOjEwQjQwMDAwRjg3RDg3RTFDODFGMzNGRkVGNUI1OUU4MkY4QjU5QjVGMworOjEwQjQxMDAwN0I2QUU1MzU3ODNFMTI1QzRBRkVFQTFGMzBCREJGRkExMgorOjEwQjQyMDAwRUUwNjg5RkNENTNGMDAzODIxRjUzOEJDMUVENDk3NUE2QQorOjEwQjQzMDAwM0U4OEYwQzIzQzJBQjExRTdDMUZFMjY5OTBEMDNGRjRFNgorOjEwQjQ0MDAwMEZFQjZGQ0Y4Rjc5QkRCRkIzQkZCRTdFMTg4NzBCN0Y2OQorOjEwQjQ1MDAwOTA3RTlBRkZCMUMwQzBFMzE1N0FFRkU3RkI5NEVEM0YxMQorOjEwQjQ2MDAwNjBEQzhGRDYxODJDMEZFMkY5QTQwQzFCNEE4QzY3MzJEMworOjEwQjQ3MDAwRjI3QkU4NkI4NzY1RjJGQjZFQUM5QkY2RjlFQzg4NjZCNQorOjEwQjQ4MDAwNUYwNjQ4RkUxNjg5N0IwRTY3QzVGOURFREMwRTBCQzMyRQorOjEwQjQ5MDAwNzg5OUEyREQwNzVENzg5RTM3MTc3OEIwMUJGNUIwMTI1QQorOjEwQjRBMDAwQTA3NzU2OEEzNkJFRTZFMkZFMzdBMzEzRUYyRjZBRkE3QworOjEwQjRCMDAwN0Y3MDNFNTVEOEE5ODhGQjAyQzA3NzBEMDNEOTFGN0I0QQorOjEwQjRDMDAwODZGMzczRkFFNkE2RUU2MTc4MUVBN0MxRjM3MEQzNTEzNgorOjEwQjREMDAwQ0FDQjhBOTdFMjBDRjExRDI2Njc0NDdCOTMxQkNBMjNEMworOjEwQjRFMDAwRTQ5RDYyODNGNjExNzJDODY4RjNEMzYzMjZDQjlCQkFERQorOjEwQjRGMDAwRTk5Q0NGMjhERThCNUE5MUI2QzgxMTg4RDhDN0JEMzBEOQorOjEwQjUwMDAwOEM4RkNGMkM0MUU2NDg2MkMyMDRDNzU0Mzk4NTcyRUQ1NgorOjEwQjUxMDAwQUY4Q0VGNjdDRDFFRTgyNzUyN0U1RTRDNjQ5MTdFRkFCOQorOjEwQjUyMDAwRDZBNjYzMDRFRjcyMjkxMEMwNEVDQzM5MkM2QzA1RkFGNAorOjEwQjUzMDAwOTgxNUJDNzMwQkRGMzdERTc4MTRFM0E5NENGNjQ1REVCMworOjEwQjU0MDAwQjAzQTM4REVDQzFFRTU0MkE0M0M3RDc1OThEODQ3MEI1NgorOjEwQjU1MDAwNzlGQTJGNERCRDg1Mzg0RTczNTM4Rjg2MkY4NkU3QTYxNworOjEwQjU2MDAwQzE2NDdFOEZCRUI5RTkxM0ZBNkVBODUyODlERjVFREQzMQorOjEwQjU3MDAwOTg3RjUwODVGMkUzRjAxN0RGQjUzMUJCMzk1Q0VDQTI2MAorOjEwQjU4MDAwOUJGNEVBNzRDMTA3RTgxMzRCMDdGRTM5REU2ODI0M0VEQQorOjEwQjU5MDAwNUI5QzZFMjM3RkZERTIzNzczMEZGQTYwM0Q5QjYwQkFDMAorOjEwQjVBMDAwRjI3NzgwQkI3RjFDOEUyNzkzOTBBN0MwNEY3RTk0MEZBRAorOjEwQjVCMDAwQTYxNDg1RkNGNjJFQzc2NEEyRDNERkRCOUY4NjVGOTNCQgorOjEwQjVDMDAwOTVEMTdCNDRBNjc0MUJEOTA1NTcwQUU3QjkyODdEMDU5OAorOjEwQjVEMDAwNzgyMUY5QkY1OEUwNDU3QjVGRTlGODAzOENGNjBCOEJDNworOjEwQjVFMDAwMUZFMkZFQkJDNUI1OENFMkZENTkyM0ZDOTRGNUYzOEQzQgorOjEwQjVGMDAwQTY2NzEyRjEyNTE4RjhEOEQ2MDQyQjBFQkE3OEFDQzk3NAorOjEwQjYwMDAwQzIwMkY5NjA4NzYwN0M3Qzc2M0YxRERCN0M4QTEzOEZFOQorOjEwQjYxMDAwRkFENzU0QkE2QjMwN0Q2Q0NDQzkzNjE0N0Y4RjhGRkQ0RQorOjEwQjYyMDAwQjIxQjUzRjRENUUzRjg4RTA2MTY0MkZCOThDRUUwNjFDOAorOjEwQjYzMDAwN0NFNzdDQzhDM0Y4NzFBMjNDMkVDMEYzRjFBMjNDN0UyQgorOjEwQjY0MDAwMUFDRkE3RkI1RTkwMkExMUIwQTg3M0E1NzQ5QjZCNjJGQQorOjEwQjY1MDAwMEVDQUU5RDk4Q0RGQjcxNkVGMkQ2QzExRkEyMkQ1RTZBOAorOjEwQjY2MDAwQUFBOUM0RjJCQjE5RERCRkQwQ0E5RjE0RTVDOUI2MEZBMQorOjEwQjY3MDAwNUJCMzUxOEY0Q0Q1QjdERjI4RjAzMEM0RjY2MURCMzhBRgorOjEwQjY4MDAwM0E3RkQyOTc2QkU3M0I4OUI2RjM0N0E5N0Q5MUJFN0NBMQorOjEwQjY5MDAwOUQ2ODZGQjc5REVGMUU4N0U1MzlGQUYxMUYxNUU1QjE3QgorOjEwQjZBMDAwMzYyRTBGOTk5RkYxNzcwMTQ0RjkyM0EyREM4QUU1MzgwMQorOjEwQjZCMDAwQkU5Nzk3Q0JEQUZCMTdBMkRFNEEwMTA3QzZCNjkxRkYwOQorOjEwQjZDMDAwNzMxOEY3N0Y2RTZEQjIxNDExNUQ5QTJFMTI3RDFFNkI4QQorOjEwQjZEMDAwNjI5NDlGMzREQ0M1RUY2NTU3NzE3Q0JCREM5QzFGMUNGQQorOjEwQjZFMDAwOEQ2Q0MwRjcwMDI2MERFN0ZCQUEzOEI1QzdFNzFCNDBGNQorOjEwQjZGMDAwRUU2OUU1MkUwNzdGRUY0MEY2OTg4ODlGQ0MzNjIxMzcxQworOjEwQjcwMDAwQzQ3QUVDOTMxQjUyODM5NzMzMTlGNzk3NUY4RUFGNjExRQorOjEwQjcxMDAwQTE1RDQwRkI2ODI4RkMyMDVGQTczRDYwNjA4MTA4NzkzRgorOjEwQjcyMDAwOTlCMjMwODYwNTIyRUE3QjY2QkI3NEY5QTRCQjUzNzREOAorOjEwQjczMDAwRjVERDUzQjM3NEU1QjZEMkUxQkE3MjM2RDU0NUVCNjZBMgorOjEwQjc0MDAwOTFFMEFGOThBMjEyNURCOUY2MEUwM0RCMkVFQTg5RjVGRgorOjEwQjc1MDAwNkJDQ0I5NTY1N0VGN0M4MTFBOEYzQzdFNkEyMkU4MUY2QQorOjEwQjc2MDAwOEEyQkYwNUE1MDNFMkNCMjY3MEQ0MUZERjM1Q0QzMTg4MgorOjEwQjc3MDAwNDJDRUYzQjBBRUMwNjg2NUJCOUMzQ0RFN0MxNzlFRTM1NgorOjEwQjc4MDAwNDFGOUJGMzZGOUU4RkIwRTI4NTcyMTdEMUFENjlEMEFFQworOjEwQjc5MDAwRjUzQjlBMUM5NDdGQUFDOTQzRTk5NjI2OTVEMjI3OUIyQworOjEwQjdBMDAwMEFBODdDNjM5Mzk3RjI0RjQwRkY5OEFFODM3RUYwRkIyQworOjEwQjdCMDAwREFBNjJBQ0FBRjY5RjI1M0ZFRjFBNjY5OTQ3RkI0MjlDQQorOjEwQjdDMDAwNDBFOTIzNERGM0U5RkJDQUE2MDZDQUFGNjg2QUE0RjRCMAorOjEwQjdEMDAwRTFBNjIwQTVDRDREQUQ1NDFFMTRGNERFMjVFRUFGRUU0RQorOjEwQjdFMDAwMkFFN0Y3RDJBM0U5RjhGMDcwNDlGNzVFOUNCRDNGN0VFNworOjEwQjdGMDAwRTRFMUUxMTgzRkQyRDk0Mzc2QjgxNjNGODJGM0E2RkVDMgorOjEwQjgwMDAwQUM3Q0ZFRDFGRDZEMUFDRUZEMDlDMzU5RjdEMjU4QkVFRQorOjEwQjgxMDAwOUVFOTlDMzY3N0JGNzc1OTJDRjA3RDZBMDNBNzQzRTZGMworOjEwQjgyMDAwRkU1RTJBNEY5RUNGNjlCMTQ5RTg2NUU2MEVCMkI0MzI5QQorOjEwQjgzMDAwM0FBREE3N0E2N0E1RUU4QTU4N0VCRTRERkUwQ0U2ODEyQQorOjEwQjg0MDAwNzk5Njg5Nzc5Mjg4RUQ0MjA2ODQ0QjE5QzNGNUE3NDYwRAorOjEwQjg1MDAwRDdCRTc5M0IzOTlDMzhGRjgxRTBERDIxRTA5NTRCM0IzOQorOjEwQjg2MDAwRjlGQjI3NTU2RDYxNjRGQjE4NUYwM0JEN0Y2Mjk5RTZBNAorOjEwQjg3MDAwMEYyQjkwQkFGRDAxN0E4RjYxRjhDNTA5QjAzOTAzNzlCMQorOjEwQjg4MDAwNzNGMTdBQTY0MjlBQjY1MEJGNkY0Qjk5NURBMkRCMTc0RgorOjEwQjg5MDAwQzkxNzFGNjMyQUM4MDE1QjkxN0U3RjE1OTNCMzQ4RDdGMAorOjEwQjhBMDAwQ0U5MkY2NjM1REI5QzlCRDRDNTczRUYzQkVDQ0U1MUVFMgorOjEwQjhCMDAwQzQ2NzJBM0ZFNzMxQUY1RUNBOTIwMUFFMzlFRDZCMDgyQgorOjEwQjhDMDAwQUU3NzA0MURDRjRBMkFEREUzMEVFRUQ2RTIxRUY4RkU2NworOjEwQjhEMDAwRTI1OUExNUY5ODY1MzVEOTYzRjk0RTlFQ0Q4QjBGMUE1OQorOjEwQjhFMDAwNTAzRjdDRjY2RkYxMjQ5NzlFNzlDQTEwNDI3RjJFODhENAorOjEwQjhGMDAwMjcwM0FFRkY0MjMwRkJCMEJDOThGNTUwMUU0MzU2MzBENAorOjEwQjkwMDAwM0Y4QUE5MzJFNkFGNjJCREI0QkY4MkZEQzVFRjg2NjM1MAorOjEwQjkxMDAwRkNBODFDNzhDQTBBRjkzM0U5ODE2Nzc5RkM1QTk4RjRDMworOjEwQjkyMDAwNjc5RUEwNjc5RUI2OUZEQUEwNDRGQjc5REYxQTRFN0MyMworOjEwQjkzMDAwQThCRkM3RDYyMkY2MTcyRDU2RUU3RjVCRUEyQzFCODJENgorOjEwQjk0MDAwNzZFQkQ5NDFFMjBERUQ5RTU3OEZDQzA2N0NEQjkzMEY1MQorOjEwQjk1MDAwNTJBQTdEN0Y1NDM1MEM3ODRGRkI4RjUxRkMzRjBDOThEOQorOjEwQjk2MDAwNURGMEZGMUYxMTlFMzNBNTZGMjdBMTFCQUEyRUE3OTc3RAorOjEwQjk3MDAwRDZDMTU5QzlFNzk5ODFGODdENURFNkZDMDgzQjJFOUM0QworOjEwQjk4MDAwOUYyMkYwQUJFQzJFRjdDQzAwM0MyQTZGNjY3QjgzQUM5OQorOjEwQjk5MDAwN0Y5QzY3OUE4RTY1NjMzQzgwOTZDRjEzRjFCMjNCOUI4OAorOjEwQjlBMDAwOTI3MzJBMjNCRTNCMEIzOTNDMDVBQ0JCMEFGNTU1NDFDQgorOjEwQjlCMDAwOTFDMTFCQzI4RTdEMEU5RDFGQzM5QUQzRTZDMzc3MDcyQworOjEwQjlDMDAwOTQxMkU2NDUzMTM3OENCNTJENDNEREFERkM0REE2Nzg5QworOjEwQjlEMDAwMjdFNUQwMzU0Qzg1RkQ4Q0NEMTY2NjE4MUZBNkY1Q0IxNgorOjEwQjlFMDAwODQzRkU0MDEyMTM3QkY3NDU0QzZEMzdCOTIyOTdERjI5MgorOjEwQjlGMDAwMEY3NTI0RkJEMkU2RUI0NjNFRkFCMkREQzhFNzc1NDg4OAorOjEwQkEwMDAwNUY1RTYwRTM3MTVDNzMwQjRDMjE1NUMyRjdDQkRBRThFMworOjEwQkExMDAwQkQ0NDY1QUJDNEQyMzIxMThFNzE4NDA3QjYyRjk2RjgzRgorOjEwQkEyMDAwMzA3NkMzMDgxNjg0RjU1MkVBMENGQzA1RjlFNDRDNTg0QworOjEwQkEzMDAwREQ2N0M4MTYzQzA5RjU2QTBCNEREQkQwM0VDQjQ3QkMzMQorOjEwQkE0MDAwRDgxMDJGNzdFNjU0RTJEMDM5MDU4NERGMzk2MkRFNzlFOQorOjEwQkE1MDAwODU3Q0JEQjZBNDQ3QzFDM0JDM0U3QzU3NzQ2RUJCRTZCMworOjEwQkE2MDAwQzdEMUNGRjNEMUQyOEE1QkYxRkRDNUU2NkU5OUFCQjVGNAorOjEwQkE3MDAwMjg3Q0FFMzI3NjhGOTgwMTVEOUZFOTAxQjg2NDgyMzNFRAorOjEwQkE4MDAwQUYxMEU1QzI4NjMyMTYyNDNEQ0VFNzU3RkI5NEM0MzY4QworOjEwQkE5MDAwNjU5MjVDQUEyMjNEM0VEQUMwMjJDRjMxQjVCNEI4OTA5RgorOjEwQkFBMDAwQ0JERjk3ODZGM0Y3REFFQzlFMjNDNDhGRkRGOUMzNDcwQgorOjEwQkFCMDAwNjYwMzNFOUUzM0IwMDIzQUJGMzVGMEZEQjExNjM3MjMyMAorOjEwQkFDMDAwQTMxRjAwRDI5RjE0NkFGRUQyMTYzNjA5RjVCNkQzNDBFMgorOjEwQkFEMDAwNzFBMDcyNDcwQ0RENEY5NTlEMEFDNTlGQjdEODJBMURFRQorOjEwQkFFMDAwRjc2MjNGMEU4NUNFNkIyNkM4NjNCQkQxOEUzNjNCMEQwOQorOjEwQkFGMDAwNTdBMTFEN0U3OERCOEZCQjMxN0U0NzRFNTcxOEZBQkRBQworOjEwQkIwMDAwNUExQzBBQjc0M0QyMEMxNDk3QTczODJCMkQ3OEJFOTMzMgorOjEwQkIxMDAwNjczQjU5OEVGODNDRDhGMTQzN0E4RjQxN0U1MEM0Q0VCMgorOjEwQkIyMDAwMDhCRjk4NTE5MEFDODUzNTUwRkZDMTM0NDVCQ0VCRTI1RAorOjEwQkIzMDAwQUIxRTk1MjQ4RTI2NTREQzBGNTU3RDgyRkJFREMzOEUwMworOjEwQkI0MDAwRjM1NkRDMTdBOEI2QjlFNDBGQUMyQkU0RkI0NDIzOUVGNAorOjEwQkI1MDAwRTM0MUZFQTkyNUU3OUQyOEJGNUVFRjU4RUVDQTQ0N0I2RQorOjEwQkI2MDAwM0FBNDkwMkQ1MkYwNzU3MzBBQkQzQkQwNjFBMjc3MTFCMworOjEwQkI3MDAwMzRCQzY2MDQxNURENzk2MDdBQTMzRTZGOEUzQTE3MzRDMworOjEwQkI4MDAwNDZERDQ3OUI4NUUzOTM5Rjc4MUEwQjQ3Q0NDN0U4RTFENgorOjEwQkI5MDAwRkIzN0U2QjZEMUZFQTdBRTUwQkM4NzI5RjI3MzMwMEY1MworOjEwQkJBMDAwQTREODY5MENBNjc4MDEzRjg3M0FFNjY2RTBCQzJFQkNCMworOjEwQkJCMDAwMTRBMEY4RUZDMUVDRkZEMjQyNTU4QzE3QjQxQUU4RkQ3RgorOjEwQkJDMDAwRERCMDE1RTNDMUI3MzczMTJGREE3OTk2OTA0MkYxRjgzRAorOjEwQkJEMDAwM0I4NDNDQ0JCMTcxRkVGNzE3NzEzRThGNEU3M0RBRjhBMAorOjEwQkJFMDAwQkE1Mzc2QzU4NDYyOTE2RThFQ0U5MjIwQUNGM0MyNTc2MgorOjEwQkJGMDAwMjczMjE1RjQ2MDhFQzM2NzQwN0Y3QzRFQTNDOThCRjY1NQorOjEwQkMwMDAwRTc4NDVGREE4ODRGQ0VEQjc4M0M5NUQyRjg4ODhBREYwQworOjEwQkMxMDAwOUJCNzk1MTU0NERFQjMwQjM1MzlCQzI4OUZCNjM1NTkxMworOjEwQkMyMDAwQkMxOEEzMUUxQTQ0QkU2NjNCMEQxNEM3QUUxQTc4NUMzRQorOjEwQkMzMDAwNjVCQjU4OEZFRDg1QjE5NEFFMTU3MkU2NjkyNTM4MTk0QworOjEwQkM0MDAwRTE3QzFBRTg4OUYxRjMwNzU3NzNGQjc4RDE1MjBCQzFGNQorOjEwQkM1MDAwQjFFOEY1NkNCMkFGMDZDM0RCMzM0RDFFNkYwRUMyQjM1NQorOjEwQkM2MDAwREE5MDgyRkVBQUYyOTUzOUFCRjA5RDhDNDU3NkZFOEU3NQorOjEwQkM3MDAwQjAxQzNGOUNGQ0I2RUM3NzQ2ODZGNjdDNzNEQ0I1REVFOAorOjEwQkM4MDAwNTkxMUYyNUQ4RTFGNUI4MDdDMjVDQkMxMTRGNEU3RkM1QgorOjEwQkM5MDAwQkNGMERDNkQxODU3MEJGNERCODRGOUREQ0ZGREUxMzYyOQorOjEwQkNBMDAwOENBM0RENjkwRkE2NjA5Q0VENEJDRkJEQ0ZDQjEzODM3QQorOjEwQkNCMDAwOUIzMENFRjZFMDczQzc3OTc5N0EzMEM1MDBGOUQ3OUYwQgorOjEwQkNDMDAwRkI5MDk3RTcwNjM3NjFGRUFERTc0RUYxNzIzQzAzMDM0OAorOjEwQkNEMDAwRDlGOURFNzM5RkRFMTY0NDdGOEJDOTNCMUYwNUYyMkYxNworOjEwQkNFMDAwMDBGRTIyNTg2MjlEMjJGRDQwRTA0NTJCN0YwMUJGQzMyQworOjEwQkNGMDAwMDY2QzhGNDhBM0NCRjc4OTc2RkIwNzI5RkY5NTI4RUZDMQorOjEwQkQwMDAwMUFBNEZGMDNBMjVENzg5MEY2ODc0NEJCQzM4M0I0M0ZCNworOjEwQkQxMDAwMjJEQTFEMURBNEZDQjdBMkZDOEQ0MUZBRkY3N0QxQUUzQgorOjEwQkQyMDAwN0I5MEY2NkY4Qjc2RUYwRUQyRkUwRkEyRERCMTQxQ0E4QgorOjEwQkQzMDAwREYxN0U1RkYxOUQ1RkY3MTUxQkY0NzdDQ0ZCMkFGN0U0QQorOjEwQkQ0MDAwMUZGREY3NTkyMDQ3NTAyRTE1RDg1N0JCNzA5RDZGNkJCQworOjEwQkQ1MDAwMkQyNUZFNkYyRUUzRTc1NDFBQkY2NzQ5OENERUY3QUQ0MQorOjEwQkQ2MDAwMkVFMkVGOEE1NTE3NzFGOUZCNjdEMTNGRjBFMUUzQzg4NgorOjEwQkQ3MDAwNzc4QkRFOTQyOUFFQTdEOUUwM0QxRDQyMzlCQUNBNDA3RgorOjEwQkQ4MDAwRjZDMEEyRDdGOTdFN0REMTRBMjUxNDc5MkZFN0NGNTE4RAorOjEwQkQ5MDAwRjAyRjQ3Rjg4MDcxNUIzMDg1RjU3NkE2OTBDN0Y1OUI0QworOjEwQkRBMDAwM0QxRTZGNzU4NDNDMzMzQUY0Nzk5MDE3MENFNTJFQzgyQworOjEwQkRCMDAwNkY4QURGMkU1ODU5RDE1QTAwRjk1NDk3ODEyQzEwQTU1QgorOjEwQkRDMDAwRDYxMkM2RjczQTE0QkJEMDBCOEVEMkI2MDI4NENGQTZEOQorOjEwQkREMDAwRDAzQjA1OUE5QzY3MzY4RkNFQUZEMTYyNTNFOEREMzZGMworOjEwQkRFMDAwRDlDRUNCMjdGQzcyQUMwM0VEQUMxNjE2RThGNjYxN0IxRQorOjEwQkRGMDAwOEY0Mjc2RkNDMUQ2MTIwN0NBM0Q5MzdEQjYwM0Q3RUZCQQorOjEwQkUwMDAwQkJDNTdDNUU5NTc1MDUzMTI4QUZFNTQ3MEQyNEJGMEY5NgorOjEwQkUxMDAwM0JGODdBREZFQUUxRjE0RUEwNTdFODlFMTNDODZCMkY5QQorOjEwQkUyMDAwRUE4ODdDMTY1RThBNzI3M0U3NjNGQjY2NzAzRjFGQjMxNQorOjEwQkUzMDAwOEYyQUEzN0I0NERBRjlCNkE0NDRFQzAzQUUyQkUyRjhENAorOjEwQkU0MDAwQzkxMDdBNDQ0MUZEMDJFOUQzQTVFMkZFNEI5MEZCQTM2MQorOjEwQkU1MDAwMzIxNEU2NDk4REI4Qzc3QjVEOTFDQ0VGMUYyOTg4MjM0QQorOjEwQkU2MDAwRTg0QkFFQTZGN0FCODYyRTUxNzRFNzA4NjkwRkU4RjNFRQorOjEwQkU3MDAwQTYyOEJEQTE0NEU5OTVFQzU2OTA5M0JBRjMxMzg3MkVGQQorOjEwQkU4MDAwNUY1NDI0RkMzQzVFRTY0NTNCNzZDMjJGNTc5MzNDM0MxNgorOjEwQkU5MDAwOEZGQTREMUE1Q0VFRjVDOTVGMjE4RjlGNDYwNEEwMUNGNgorOjEwQkVBMDAwMERGMjdCRTQwNzU3OTdGQzE2RTlCRDY4QTU4MURFOEQ4RQorOjEwQkVCMDAwQkU1MjM5RkE2Nzg0MDVGMDkwMUI5MDQ4MkZDMDg0NTIxNworOjEwQkVDMDAwNzBERjc0MzkzQ0U0MUFGRDJFN0E1N0UzMzJGOEM4NUQwRQorOjEwQkVEMDAwNTdFQTQyNzk5QjFCNTBBOEZGNEJGNEM2NjVGMEY1QkNBRQorOjEwQkVFMDAwRTQzRDE2NDAzQTNBNjM4NDVEMEQwQzgwN0UzQjU3NEMyRQorOjEwQkVGMDAwMDdDNjE3OUI4NDNGNDU4QjE3NTY4NjI4RkM1RDdDNzFDRgorOjEwQkYwMDAwNUY1NTE2N0NGQzMwRjNBOUFFNkM3QzE3QTg4MUZDRkI1NgorOjEwQkYxMDAwOEI3NzNGRTA0MUJCN0Q4NTIxRTBDMEZDNTFEN0E0NUUxQgorOjEwQkYyMDAwMUM2NzExNkNGQTExN0YzQkIxMEY3QTFGRjNCN0I3RkI5NworOjEwQkYzMDAwMDBGRUNFOTA0OTdCQkYzMjhDRkZFQ0M2MzgyMEVEN0RGMQorOjEwQkY0MDAwNEMwRkQ5NkJBMkZFQjVCNzU3MDJERTNCMTU0NzIxOUFCRAorOjEwQkY1MDAwQTA0Qjc3NURCN0RFNzgxREQ0MzdCMUJFRkE3OEVGRUUyRgorOjEwQkY2MDAwQjlDMzA2RjE3RUU2QjhGNTk1MjA5Nzc2QzczMERERkJCQworOjEwQkY3MDAwQTBCQkQxQ0Y0RUZENEQ1ODhGRUY4MUMyNzgzN0M5QjBFRAorOjEwQkY4MDAwMzc1QjVCNzRGMzdBNUI3MjNGM0NFQjhBQTdBQzVGOEFFQQorOjEwQkY5MDAwMEUzQkIxNEY3MTMyRkVBRUZCMTlCNTI3MEU5NzBGRUM3OQorOjEwQkZBMDAwNTc3RTUyMDRGNEFERUQzODk5MTRCOTVGRDdFQUM3OEJDOAorOjEwQkZCMDAwRkE3NTVEQkQ3NUJCNTRBQUJGOTRFQUVGRUY4RDJCMjJENQorOjEwQkZDMDAwN0NGNzk2NDVENjhGMTM3RTgwODhGQTJCQkVBRDdFODE5NgorOjEwQkZEMDAwMDZDRkFFQjc2RjJGRTJGNTFGQzVGQTY3RDU5RTI0OEE0QworOjEwQkZFMDAwQUQ4OTgyMjdFMUQyRkVENzdFNUJGRkMzNDVGRDMzRTFGOQorOjEwQkZGMDAwQjdBOUZFNTlENjkzNTQ5QzQ5RUQzNjYxQkI3MzZGQkMwQgorOjEwQzAwMDAwNUQyNkU2OUQ4NEU3MzhFRkRBN0M0RjE2ODE1QzZBQzBENgorOjEwQzAxMDAwM0VEMDdFNTYxQTU0RkNERTY5Njk3M0EwRkQ2NjM1QjZDMworOjEwQzAyMDAwRjk1MTBFRTdFMDNCNUY2M0ZBRDNBREE4M0M0NjVGRkFGNworOjEwQzAzMDAwM0Q5QTlGM0IyRDJDQTExQUY5QjVEMTQwRkI5QkZEM0RBQworOjEwQzA0MDAwODY0NzkwMkZCN0E2OEQ3NUUwRkU3OUI3QTlCQkE0MDhFNworOjEwQzA1MDAwRUREN0JEMzZCMjVGMEQxOTlGNTlEMTZGNkVDRUU3RUJBQworOjEwQzA2MDAwREZFQTZDRjAxNjQxREU5QTVFNDRFRjc0Q0EwRjJERUFFNworOjEwQzA3MDAwQTRGN0MyN0ZDQURGRDE1MjdFNjYwQTZDNDc3RTBDMkZCRQorOjEwQzA4MDAwMkE5ODEzQjFCRUQ3MTUxQjA5QkU5NUFGRDk1NkUzRkU0QQorOjEwQzA5MDAwNjBBNUQxREI5NjhGNzZCODVEQTFGODRCRTU2N0ZCMjZFRQorOjEwQzBBMDAwOTE3REY4MEIwMzIzRjkwRkYzQUM4MDdFNUI2NjI4RjRENworOjEwQzBCMDAwRkIwRTRFMTRDRjNDNTg0NEY4RjBGQjJCQTBERUQwNDRDRQorOjEwQzBDMDAwNDVDMjdCM0EwRjJCN0UwQjlFNzc5ODg1NURCN0Q1Q0IwQgorOjEwQzBEMDAwRUY2OTY5RTM3RTJDRUNDRjhGOEJGOEJCRUU1QkQzMkU0MAorOjEwQzBFMDAwQkMzN0NGOERFRjMwOThFODdFQTU2REExMjE2QzhBQzM1NworOjEwQzBGMDAwRkI2NkRCNEVDRjQzN0FDNkY2QUNDNEZCQzYzMTI5OEE1OQorOjEwQzEwMDAwMDNFN0Y3NjQzNTk0RDFCOTVDMjc3RDBGRDYxQTY4REY1MQorOjEwQzExMDAwOTBCMEQwRTA0M0ZGNjM0QzhFNDlFN0VGQjBDMTM4OTE1NworOjEwQzEyMDAwRkU5MDZGOEEwM0M3MTBFRUFCREU1NDZFNDIzQzdCRUU4RQorOjEwQzEzMDAwMzdEMDNCQTQ4RjdBREVCNTE4MDBDRUI4NTI3RDdCQzdDRQorOjEwQzE0MDAwNTg3RDdCNTdBNUJFREM1REFEMkY0RjlBQUEyRkY3REMzQgorOjEwQzE1MDAwNkQ4QUYyRUJFOEYzMzMzNEJFMDI5OTYwMDMzRDE1QzNGOAorOjEwQzE2MDAwOEI1ODhDRUQ0MjEzRUU3QjU2QkMxNkMzODgzRTRCRDZFMworOjEwQzE3MDAwQjdFNUUzRkE4Q0VEMjU3Q0M1MEM4RjIxQkZDMDhBNjQzRQorOjEwQzE4MDAwMTNDOUY1MTVDNURDQUY3RjI4REQ3NDEzRTU2MTVFQzgwMgorOjEwQzE5MDAwMUY1QkQzOEVEMDdFRTQxMkJDRDg0RTdGOERGRERCNTg2MgorOjEwQzFBMDAwQzQ3N0I0MzM4QTdEN0YyOTFBQ0RGMzlFMzJGNEUzMzEwQworOjEwQzFCMDAwOTI4N0NGNEIzRUVGNDFDNEY3NUJEQzVGQjFCNTkxRkI5QgorOjEwQzFDMDAwQjExRjlEQ0FFMzExNjkwNjY1QjhERTc5RkQzOENCRUE3NworOjEwQzFEMDAwNkVEQzk3QzVEOTVBRUZDNzM4Q0I2OEJDMjY4OUYzODY4MQorOjEwQzFFMDAwQUQ3OENCMTZGOTJFQzBERjY3NUVBRURENzdDMkVGNjVBNgorOjEwQzFGMDAwNzQ3QjgxREUxRjFCM0Y4MkYzOEI1M0Q4MDlGMTlFODQzMQorOjEwQzIwMDAwQTI5Njg4N0IxMzQ5QzI2RkYyRjhEODk5NTZENDFGQkIwNworOjEwQzIxMDAwQzU3QjFFN0RGREE5MzQyODBGM0Q0NUJGNzJCMTI0RjZCNAorOjEwQzIyMDAwNTNCQ0ZEN0FFRDlDNDdFNDEzOUQzQ0JGRkJCMEVCMjY2RAorOjEwQzIzMDAwNUM1RkVCQTdCQTRBNzBCRkJGNDJEODc3RjE2OTI2REZDRgorOjEwQzI0MDAwMzA5OEQ3REFBM0E2QTAzNDEyRjIwQTNCNkMwNEJCNjA4NAorOjEwQzI1MDAwQjc4QjhGNkI3QTNEMjY4OEY3RjNENjdBNEFFOUJFREYzMworOjEwQzI2MDAwNzU2MkJDMTdDQUJERUZFMDdBRUY4NTc1ODQ3MTVGNkJBQworOjEwQzI3MDAwREQ1RTZCODkzODM3MEQwMjdDNjg1QUUwM0VFNTYwNzVGQgorOjEwQzI4MDAwMDlFRDc3RDdGQUJDNTZENDlCNkJEM0JDNTY4Qzk3QjZDNgorOjEwQzI5MDAwMjYyQjBFOEMwNzc1NzkxNDdBOEY2REFEMjVFMDQwRkI0NworOjEwQzJBMDAwQzcwNThBRDQ4NEU3NDlFOTZEMTNFOTlFMUJFMERBNTA5QgorOjEwQzJCMDAwQzY4RjFBOTg4ODMzQzQzOEJGMDQ4MUNGQUQ5RUQ5MEU3QgorOjEwQzJDMDAwN0MxRkMxOURCM0U3NDdFOEE3NEZDMEZFRTI3ODNCQzQ5RgorOjEwQzJEMDAwOTM1M0UwNjk3Q0IxNEE3MEJCNDVGRjA5QjM1RkEwRkE5NAorOjEwQzJFMDAwRjhEMzUyMTZEMTlGQTBBMzY5MjIwQkUxM0U0RDFCNUZFQworOjEwQzJGMDAwRUJBN0FGN0ZFNkEzNzM4MEU1QkZFNTc4NUI5QUNFREY1RgorOjEwQzMwMDAwQTEzMkREQzc2ODNGRjc0Mjc5NjAyN0YyNTk2RjcyMEM5RQorOjEwQzMxMDAwQzlCQjE0NEY0QTA1RjI1MUNBRDE0RDkzRjFGRUMzRjI4NQorOjEwQzMyMDAwREZDNkYwNzFFNjcwN0U0RjUxOThFNTdBOUM3NzYyQzA2NworOjEwQzMzMDAwODE3ODhDNUVBRkM5ODdEQjZBOTAyOTM1QkE0NEFGREY1QworOjEwQzM0MDAwNjQ4NUI1Q0FBRTRCRDc3MUIyQzc1RDkxMzc2MjgwRjVDRgorOjEwQzM1MDAwMUNCNTVFOTI4RkY2M0U4OEZENDdBRkVCMkRCMUM3NDcwNworOjEwQzM2MDAwNzEzRDEyRjE1REJFN0NCRTQ1RUE1OTQ5NzIzODU5QTE1MgorOjEwQzM3MDAwNzU5NjFFMzUxRUJFNjc4Nzc5ODkxOTU0OEM0RjVFNTc5NgorOjEwQzM4MDAwRUNENERFQUQ1MjExQUZCQjREOEU3MTM2N0VERTRFRkM2RAorOjEwQzM5MDAwNTVGMUUyRUFCQjdFMDdGOTBCRjg3QjczQTA1NkVBRDFCMAorOjEwQzNBMDAwQjY2RUQyOEJGQjAzRjk1ODdGQjMxMjc4MEFGREU5OUI3NgorOjEwQzNCMDAwOEYwREExNzcyMkNEQjFGQzlENEY1M0Q0QkIyNTlBQkVFMgorOjEwQzNDMDAwNTg1N0NDRjczMTZBRDRGQjk2REYzNUVENEM0QjJCNzRDNAorOjEwQzNEMDAwMDBDRkFDN0JGRUI3N0ZCMDI0RkVFM0VEOUZCNEMzOURERQorOjEwQzNFMDAwNEI2REIwQTZCN0VDQkE2NTNEQzY0NzVBREZFNEU1OUI5NgorOjEwQzNGMDAwMjExRjU0MTAyRjBCQzlFRjcyNjhFOEJEMzRGRkU2RjcxOAorOjEwQzQwMDAwQ0NFNENGMkE5NkJEMUIzMENGM0VCMDkyM0Y2RUU3REUyNAorOjEwQzQxMDAwQjFEMzcwOUQzNERCQ0I1NEI0Rjc5RjExRjI2N0JCNTg5NgorOjEwQzQyMDAwQ0ZEMUYzOTI0RERFMDBEQTAzRDFERkI3MTY4QjczMDk1QgorOjEwQzQzMDAwRTYzREQ2MDFGNDJEN0VEQTQ0RUYyNUY1QzU0Nzc0NTg2NAorOjEwQzQ0MDAwRjlFRjMzMTM3NkU4NkMyMUNGNjZFRjVCMzVGNDIwQzM0OAorOjEwQzQ1MDAwRjczMDZBRjYxNUMzQjhCM0VEOTU0OTA4NEZFQTQ1ODkzOAorOjEwQzQ2MDAwMDU0MEZFNkQxNkU3QjNBOUVFMTcyNDk0MzM2OUVFQzNCOQorOjEwQzQ3MDAwRTUyOEVGRDM1OUY3NTI5NDFCRTkwREZBRjNCMkQ0OEJBOAorOjEwQzQ4MDAwMEFCNURCOURFMkEzRkVGMDA3RUYzOTlCOTg1OEQzQUVDNworOjEwQzQ5MDAwMDA1QjhBNzIzRTg1OUZCNzk4MUMzMUZDN0VCQUE3NTIxQQorOjEwQzRBMDAwNzc5RjU5N0I0N0Y2NTU4MTBGMTNFMEQ0NTgwMkE5NEQ2OQorOjEwQzRCMDAwRTFGN0U3QTNFQTFGMTVGODkyRDE2RjhGQ0U3RkM3OTFGRQorOjEwQzRDMDAwNjNENEFGNERGOTJDRjI1RDE2REM5NzkyRDA1QUM4Q0ZFOQorOjEwQzREMDAwM0YwMTRGNDFEQzg3QjI3ODE3M0YyRkY1RjlENEM4QjgzOAorOjEwQzRFMDAwRDY1NDkwQkJFNjEyOEMzRjA5NTI5QzQ4QjJCODlGQTAyQworOjEwQzRGMDAwQzVGNTAwMDY5Q0U4NzdEM0UyM0VCNjMxQkQzREEyQTU2NgorOjEwQzUwMDAwREFGRTNDQTc1MUE2N0Q0N0UxQUI1NkJFM0Y2ODY1MjFFOAorOjEwQzUxMDAwQUI4NEZFMzA0NjcyMjc2NzM1M0Y5RkQ2RkM2MkQ1QjhBNAorOjEwQzUyMDAwOTg2ODNEMzgwQzNDRkVBNzkzRTI5OTM1QkIwQUU4NEI2RQorOjEwQzUzMDAwNzI2NzY1RDQ3QjRGREE3QkQ1NUY4OEY1QjRCOUM5NDFBMgorOjEwQzU0MDAwNzRENENBRDMwMkQxNzRENDlGNzM2QUY1NTIyRkE2QjJBMQorOjEwQzU1MDAwNDA0MjY0QkYyMUVBMzdCNTcxMEZGMTQzRUFDNUExNTRFNworOjEwQzU2MDAwQkVCOTQ5QkQ0Q0ZGNTk4M0Y0OUY0Q0ZDMzI3OEZGNjkzQQorOjEwQzU3MDAwNTRCRTI1RkNBRUYzMTY0MEM1OTNCRDdCOUM3RTE1RTVFRAorOjEwQzU4MDAwNEE3OEEyNzcwMDNDQTczRUEwOTc5MzIzRjdFQkU1QUU0RAorOjEwQzU5MDAwODY5N0NEOEFDRjVEMDNGOERFRkM4MEMxREJDMTMwRkUxQgorOjEwQzVBMDAwNTQ1RkFGMkFGM0Y3NEVGRTdFQjQ1NjNGRUM5RTgyRjUwMQorOjEwQzVCMDAwMTdGMkZBREYzQkFEQUZFRjJGREYxQjVEOUZFMEJCRTE3MgorOjEwQzVDMDAwNjI5NDdEMTg0NTlGNjg3ODAxQUVDNERCMjJFMDFBNjc0QgorOjEwQzVEMDAwRDFGRkZFQjg2OTMzMkU4MTJCRjE4RTA4Qjg2RUY0RThENgorOjEwQzVFMDAwRUIwNzk2MEUwQ0Q3NEQwNUU2NkY4NTRCQUI3N0VCOThCNgorOjEwQzVGMDAwMkJBQjE3M0Q4RjI5NTVFNjQxRjBDRUVCREYzMUVEQ0E2RAorOjEwQzYwMDAwRkFGREZFRkM2RkFGNzc0RjYzRjQzODQxRURGQzQ4NjdFRAorOjEwQzYxMDAwOEYyNDM0NzJGQkREQzE3QTI5Q0U0NEIzM0I1Q0NDMjEzQworOjEwQzYyMDAwRTJCRkI4RERGMDBFRkUxN0Y2QjM0QjQ2Rjg2RjFEMzFEMgorOjEwQzYzMDAwMUFGMUVGQkI3QjlEOEFGNzU0QjhCRTYyRDVGQzdENDhFQQorOjEwQzY0MDAwRDg5NzE0NDdCRTdGREQwRkQ3MzJFQUY3NjU4Qzc3MjI4MworOjEwQzY1MDAwM0Q2QkYxQTJERDU5OThDQTJDQzk2ODdDNzk0MjU5RjgyMgorOjEwQzY2MDAwMEVEOEY0MTE5QUJDRTZGMUU1QzMwNUVFOUU0RkU5NUNFNQorOjEwQzY3MDAwRTRBNDc1MUU3MjIxM0NERjc1REM3QjQ3RjhFNjhDNDgyQworOjEwQzY4MDAwRUNBRjNGOThCRjQ1QzM5M0M5RDQ0OUJGM0ZBMUI3RDZDQworOjEwQzY5MDAwRTY0NUZERjAyRTE2NDFCQkE3NkYzNzg3RDFBRUQ2RTIzNworOjEwQzZBMDAwNTA4RkM1NEUzRjkyQThEMkZCMDM4QkIxRkY2OTc3NENFOAorOjEwQzZCMDAwNUM4RTc5RTk1MDgyQkFDODg2Rjc5NzdBQjQ3QjlFM0Y0MAorOjEwQzZDMDAwNDJCQzJEQjQwNDMyOTIwQzc0QkU5QThGRkI2MUU2NEZDQgorOjEwQzZEMDAwMTA5NzgyRkRDNTAzQzU2OTY4RjA1NDRBMUNGRjMxNjk5MworOjEwQzZFMDAwODEyMEY2NTM2OUU4REVFQUM3NkY0QTM3REY2NzNCMTJGRAorOjEwQzZGMDAwRjlGQjQ3RjhDRUNEMDBFQjVGQzM0Mzg1RThFN0EwRDE1NworOjEwQzcwMDAwRkI1NTJGQ0NFRkUwOUE3OEJBMEYzRjNCRTE4RUU5Rjg2QQorOjEwQzcxMDAwMzZDQTFDODMzRjA5MEZEMDIzRTA3RThDRTBCNkNEQzgxQgorOjEwQzcyMDAwNDg0NkI4OEQwMjZFNEJBMkMwQkIyRkU3REJFMEVFOEIxNAorOjEwQzczMDAwOTdGOUE5QTRCRDUzNEVGOTE3ODM0RUJBNzc2RTM2N0M4QworOjEwQzc0MDAwRjFFRTE0RDRDM0M1MDYyRkRBOUQ5QkMxQkVDMDc3RDZDNworOjEwQzc1MDAwRkU4RkMwRjcxNjNDNjM3MUQxNzc3QTdGQ0QyM0VFNUZGMQorOjEwQzc2MDAwNzlENjFCRThCRDE1N0ZDNTRCNDRBN0E3RUI2QzVFRENGMworOjEwQzc3MDAwQjdDRjYwMkFCRDZGM0E0QkRDNDdGOTYzRjk3RkJGRDI3MAorOjEwQzc4MDAwMDNGM0RCMzUyMkYwMkNEMkU3OUUwNEMzRDA3NzA5OEU2OQorOjEwQzc5MDAwNDAyMUJENjczNUY2Q0FFMjY3QjU3M0Y4QzlDMjNFOTg1NQorOjEwQzdBMDAwMjNGMDM4ODVGOTI4NkVGNzM2MTYzMEUyQjg2RjlGMzVEQQorOjEwQzdCMDAwRjlEMDJFN0Q1QkM0MjNERkMxODJGNEZENEUxNkEyRjRCNgorOjEwQzdDMDAwRkIyQzRDRjU3RjgwMkZCNzQyRkVBREQ4MTFFOThEMDBEMAorOjEwQzdEMDAwNUZDRDEzRjlCOUI4MUUyM0YwRkU4QUUwOTc3QkRDOUM4RAorOjEwQzdFMDAwNUYzRTFFODI3ODZGNEZCQzIyRkVBRDkxMzhGRTk2OEM2NAorOjEwQzdGMDAwMDgxQ0MxNzk4RkIzQTg2RTJGQzJFNDE4OTc4NjdFOTQ2NworOjEwQzgwMDAwQkVGNTUzOTlDOEY5NEY3MUU0N0VEQkZBRTkzRUFGREQxRQorOjEwQzgxMDAwQkJGN0Q5OTJDQkYwREQyREZFNzNBM0VGM0U4QTE3Qzc4RAorOjEwQzgyMDAwQjg3QzM3RDBBMTVCRTVGNzBENDE2Q0Q4ODM0MEE3QUE0RgorOjEwQzgzMDAwNzI5OUUyRjY1NjdDMkVFRTQ5QTMxMzAzRUFGRDY2OTQ0NAorOjEwQzg0MDAwNENFRjg0NjlFNzkyQjc4OEZFNkU0OUUzRjcwNkFCQ0JGRAorOjEwQzg1MDAwQTdCNEM0MDM1RTI2N0NENTUzMUE4NkI0MkE0RDdGOEZCNQorOjEwQzg2MDAwNzBBMkJCODM5RTBFOUY5NEEzRkY3RTEzNkJBMzAzRTI3MworOjEwQzg3MDAwRUEyMjdEOUNGOTJENTFGRUNGODMzODM2RjBENTI3MjM0RgorOjEwQzg4MDAwNDRCQ0U0NzAzNjNDRjJCRUMxQURBMkVERjlFQTJGNENENworOjEwQzg5MDAwRTc2MEZDRjQ5MTgxNUVDNEUzQTI5QkZGMzg5REY2NzVDRQorOjEwQzhBMDAwMEE3QkYzMkE5ODVGRERCRkNCNjQ0RjdFRDgwNDMzQzk3RgorOjEwQzhCMDAwQzdCODZBMEJGMzgxQzE3RjBBRUMwQUNDOUY2RUYyNTBCNQorOjEwQzhDMDAwRkEyOUQ4MDE5ODdFRDY1NDQwRTU2NzlCQkM5NDFGM0Y1NworOjEwQzhEMDAwRDJGRjE3QTRGM0NDRDZDRjE1RDQ0NzJCQjQ3ODZDMDE3NAorOjEwQzhFMDAwODcxNjU3Qjg0MkM0NEYyQ0I2MkYzQTg2RjEwQjhCMjlDNgorOjEwQzhGMDAwRTA5REMxNjI2RjlCODBFMERGQkJCRkYzMDhBNkYwNURFNworOjEwQzkwMDAwQzY3REM4RTIzNTEyRjk3NUU2MUMwRTJDNDczMkNGN0I4NgorOjEwQzkxMDAwQTNFNzE2MTQxM0EzN0Y3RjMyMDlGN0U5QjU2OEM3MDJBRQorOjEwQzkyMDAwRUIyRjc2RjkyQzIzNjE3QzVGRDc4OTIzMDk1MEZGRTMzNQorOjEwQzkzMDAwQTYzMTA0REYyNzREM0U4MkVGNEY0RDU1OTQ0RTFGRTkzRgorOjEwQzk0MDAwOEZBMzdBRUM3MzdBNkZFOUU2NUQyNzE0RkMzRDY4RTMwOAorOjEwQzk1MDAwN0QxMkY5RUZBRkY3QjE1MDA4RjBCQUMxQzhFNUZCMDY5OAorOjEwQzk2MDAwOTBFRkI4M0VDQjhCMjc2Rjc5MDBFMTFCMTFGMDhDMDQ2MAorOjEwQzk3MDAwRkNEREU2OUEzNTNFMDFCRURGMzI2Njg2ODJGNUVFRjhEMgorOjEwQzk4MDAwMEE3NDUwNjYzRjFGNUU4RUFGQ0YxQzkwMDgzRjY3MEU0MworOjEwQzk5MDAwMzgwOTFGMUE5RTZBMDVCRENFRUMyQkJDMTVERjFGM0I2NAorOjEwQzlBMDAwNzA1NEE2RjhEM0YzMTcwRDA0REZGOTYzMzExNDlGMUFGRQorOjEwQzlCMDAwREQ3RUQxREVFQzIxNjg4RkZEMDlFODg3MDcxRjhCRjY0RAorOjEwQzlDMDAwMTY5MjNGRkU0RkNGRkY0ODhEOENGQkZEOTNBQkYzQzIxOQorOjEwQzlEMDAwRkIyOEE3RkU4QkNCMjlCMDM3NEY2RDQyMzk5Njk2NDI4NAorOjEwQzlFMDAwRUZFOEY0QzVBQkIxODY1OEQ0NjM3NTI2QjFCRTQwQ0UyRQorOjEwQzlGMDAwNjBGRTRGMzE3QzFGNUNGNjhCRDQwQTVDMkYzODFFQzY1QworOjEwQ0EwMDAwN0I5OUM1RUY5QjgwRkU4RUZGMThGQURCQjdDOTQzRUYxOQorOjEwQ0ExMDAwRUU3Q0I2RkI4OTJDMUM3RjY3RTc5Q0Y3Mzc0MUZGNjdFQworOjEwQ0EyMDAwNDJGQ0Y3NEQ5QzYxOUQ2NzdGODVGMjc0QkI4REZDOTYzRgorOjEwQ0EzMDAwMkIyNDgwMEJGNUU5OEUxNENBMTc0ODRBNEMyMzM5MzM0RQorOjEwQ0E0MDAwNDJCNDZFMEIyNDU1QzE3N0M4MTZCRUIwMzEwNUY5MEI0MAorOjEwQ0E1MDAwRUY4QjYzNUNGRENCNkI2MjQ5NEVCRDZDRjQxRTZGQzQwMworOjEwQ0E2MDAwRkVCNkYwRkU5RTdERUNBMTBGRjc2M0ZBNjg2REM5NDMzOAorOjEwQ0E3MDAwOTBERTNFRDI0NTc4OUZGRDJGMEI4NjYzN0JEMEQ3RjRBNgorOjEwQ0E4MDAwN0I5NTlGN0I1MTBBQTMxRkE0QjhGREUwMzI4QzYzMUFFQgorOjEwQ0E5MDAwQjlGOTg0MjEwNUQyNTFEQkE1NjY0QzBCRDMyNzFENDU3RQorOjEwQ0FBMDAwRkZDMUREMjM1NTgyRTNBQTVEOTkzMkM2QTYwRjRGMDk2NworOjEwQ0FCMDAwQkQ3RjAzOEYxQkQxRTlGN0EyRjZDRjJCNzA5QkE5RTlBRAorOjEwQ0FDMDAwRjlFMTUyRTdBNzFEQjgyRjFFN0FBQzg0REZFRkUyRUY0MQorOjEwQ0FEMDAwNDRFRkVEOUFGMkNFRjcxOUNFMDMyQzA4ODQ3Qjg2ODlCOQorOjEwQ0FFMDAwRTIyRTU4MjhEODgxNzQzRTEzMjhGMEQyRkIyNkZFRTBBRgorOjEwQ0FGMDAwNDZFNEFGMzM4MTI0N0E0RjdBOUYyMTE4ODdCRjJGMjlDQworOjEwQ0IwMDAwNzg5Q0ZGNUU5RjE3QjdCRjE1ODdGMTE0RjE3QjhDMENFMworOjEwQ0IxMDAwN0ZGRjc0RURBOERFMDkxNDFGOTJBRUQyN0UzQzdERUI0MAorOjEwQ0IyMDAwOEQ1NTg4OUZCQTNEN0IzQkE4OUY4NTE2MkZGQTYzRTdGQQorOjEwQ0IzMDAwRUZGRDgyRUVCREIwODkzQzBFRjVDQzFFOUU3RkE0RDJFNworOjEwQ0I0MDAwNDdFRjhBQ0ZFRkY4MzNDRjc3RkIyOUVGOTc4Mzk5NzRCQworOjEwQ0I1MDAwN0Y2MjE2Qjc3NzlFMTBGQThDRjU4QzYwOTFFRjEyNjlBMAorOjEwQ0I2MDAwRjQ3QTA0OEFCMTdDNDM2NjMwMTlERjlGRDJGNDIwRTg1RQorOjEwQ0I3MDAwQUYyNjVDN0ZFODc2QTRGNjhFMjlGQ0JFRkExNUVBMkY3NAorOjEwQ0I4MDAwOTNEMDQ3NUE3RjRGOThGODdCQjkyODQ2RjBGN0NGNkM3RgorOjEwQ0I5MDAwMzY3MUJEQkIwM0U0MERGMjhCQTY3NzYxRENDNzcxNUMxNworOjEwQ0JBMDAwOTNCODJGOTMwQTRBNzYxNENDMjdGNTA5MzM5N0RGNTdBOQorOjEwQ0JCMDAwMzg3RUY0QkQ1MkNEMEU5OTk2RDA0Q0Y3NDczRjRCMERDMQorOjEwQ0JDMDAwM0M4OUYyNDFCQjQ3Q0ExNDJGQkRFRkY3NDFBQTZGRjM2RQorOjEwQ0JEMDAwQzhEMUZDREQwQzlDMDNFOEM1MTBENkFCOTNDMThFQ0E0RQorOjEwQ0JFMDAwOEVCMEEzMkM1N0E2MTdGRjk2RUE3QjA2REI1RjY5RkQ4NAorOjEwQ0JGMDAwNjgzOTNDNTZDMEJGRDg2RTIwM0MyQzVFNjcyNjdGRDg3MworOjEwQ0MwMDAwNTg3MUJGNzRFQ0Y5NjNCMTI4NEYxNkZGQjk4NEU0NEEzOAorOjEwQ0MxMDAwMzM2MzAzRTJFNzk1MjYxRUU3RkQ2QkY0MjM0MDdBREREQworOjEwQ0MyMDAwOTczRDMyRUQ0NzBFMUIxNjFFMDFGRDRBMjA5MEZGQjBDNgorOjEwQ0MzMDAwQjczOUJFOTRGMjNFMjRGN0Y1NUYxQTA2REMyRjZBMjk1NQorOjEwQ0M0MDAwRDBFQjM1OUM5RkVGMkJCREZGRTE4NkFGMUNGNEZCMjk5OQorOjEwQ0M1MDAwOTlDRDc1NDVGM0VFN0Y2NzQ3M0Y3RkVEQkQyQjk4NUYxQworOjEwQ0M2MDAwMEZFQUY3QzU5RjFCODg3RjE3N0Y1RTQyNzJCM0VCMEFGRQorOjEwQ0M3MDAwRTc2Qjc1RkJGRTAzRTkxQTNEMUY4MEZGQkYwNjgyQkYwRAorOjEwQ0M4MDAwOEZERjdCQUYwQ0ZFMDcyNTQ2QkZENzA3RDQxNUY5Qjc1QQorOjEwQ0M5MDAwQkJDNDdCMDI1RDBCOEFFODVEOEI3REY4MkUwOENBQ0Q5NAorOjEwQ0NBMDAwQzlGQ0RFNTExN0Y2MERGNUJCMTIxREY0RUVDNkNCNDZERQorOjEwQ0NCMDAwOUUwRkRFMjlEQThCNzcxQUJCRUU0Q0UxRUY2Njk4MUJFQworOjEwQ0NDMDAwN0U1NzhDRkQzN0YzRjhCODJFNjM4ODdFMUY2Q0Q3NEZFNAorOjEwQ0NEMDAwMTNFODNFODExNjNGN0U0Q0M4RUQ2NjI5RkM3RDdBMEYzNQorOjEwQ0NFMDAwRTQ3MzEzRTNFRkVBODU1M0VCNEJGMTFEOTBFMTU0RkYzRQorOjEwQ0NGMDAwOThGOEZEQzk1N0ZBQUVERTVEODIzRUVEMURBMTFERUIzMQorOjEwQ0QwMDAwMDE4RUZGMDczNThBMTVBOTAwODAwMDAwMDAwMDAwMDA5MQorOjEwQ0QxMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEMEI3ODk0RDUwMAorOjEwQ0QyMDAwQjVFOEZFRTc5Rjk5Q0MyNDkzNjQxMjQyMUU4NDg0QzkxRgorOjEwQ0QzMDAwODMxMDI0RTBFNDA1MDE0MjE4MjBBMUE4NjgwMzA4MDIzQQorOjEwQ0Q0MDAwQzYzODIxMjE4NEJDMDg0OENGNDkyRDM1ODMwOTBGMTVFOQorOjEwQ0Q1MDAwNkIzODQ2OEQ4QTNBNThBMEEwNjAwNzA1NDQwRDlFMDFBNQorOjEwQ0Q2MDAwRDQ1MjFGMzVENUVBQjFEQTYyMDI4ODBGMUUwOTQxRkQ5RgorOjEwQ0Q3MDAwQjBEN0RCREVCNUQ2REUzQjMzRkYyNDUxREI3M0ZERUVFRgorOjEwQ0Q4MDAwNzdCRUVGQTY1RkRERUM3RkJGRDc1QTdCRURCNUQ3NjNFQgorOjEwQ0Q5MDAwNEZEQkJDNzRCQkNCQzZEODA4OTUzNTc4MzIxODZCNEJDQgorOjEwQ0RBMDAwNzJDNDQ1NDJGQUExODEyREM2RkM5RjE5RkNDNTMxRjYxQgorOjEwQ0RCMDAwOTg4MUI5Q0M5MThDNUQ2NTVGMTY2RDFGQ0U5OEYzODYxNgorOjEwQ0RDMDAwMTAzRDBCQzc0MjQ3OUM5MkMzRDgyMzE1QTNEOUREMEE1NworOjEwQ0REMDAwNjQ1QjFGNjIyQzlBQjFDNTI2NDY3RjRCODNDMzI2QjA4NQorOjEwQ0RFMDAwQUJFOTlGMEVEMzQ0QzYxNkYyQ0Y2Q0M5RjI5RDY2QTc3RAorOjEwQ0RGMDAwMDVGMjU1RTY2RTY1MDI2MzFGNTRERDE5NkE4M0YxMTY2QworOjEwQ0UwMDAwM0E1NTZGNTAxODU0QjhCMUM4RDE5NUNFRUJGRTIzMTlERQorOjEwQ0UxMDAwQzc3NUQwQjhBQzYyMTg2MzkzMjFENTdCQ0IxOThDRkI1NgorOjEwQ0UyMDAwNzJBRjg5REQ5RDA0NzVGMDZGQkEyRjY1Q0NDNTE4RDQzQgorOjEwQ0UzMDAwRkZDQ0NDQzdBRkYzQ0NCOEZGOENFQzBGRkU1RjY1QjQ3MgorOjEwQ0U0MDAwNkM1NkMyQjEzQ0QxQ0Q2MEZDRkQyMzlDQTNFREI5OENFNgorOjEwQ0U1MDAwQUQzQTdDQ0RGRDY3NENCRTdBMTVDQjhCRDI5OENFMzdFMAorOjEwQ0U2MDAwNkVFMDM4ODFFMzM1QkI3NTJFMDM4QzM3Q0FCNDIwRTNGRQorOjEwQ0U3MDAwMEMzNDY5ODYwMjFEQ0NEM0U1MzFCQjc3MjZFMUJDN0IzRgorOjEwQ0U4MDAwRkZCQzAyRjJDRDhCQUZCMkRGMEREOTM5RjM0RDBFMjVDOQorOjEwQ0U5MDAwOEFCMUJFMDM0MUVFMjAwNUJGMDczQjcwNURDRDQ3NDIxRQorOjEwQ0VBMDAwREQzQUM4REZBQTcwRjgzNzJCOENCRUJCRjYxQkRDM0IyMworOjEwQ0VCMDAwRTE1QkFERDFCRDY3MTdCNEFCN0Q3OUFDMUQ0NjY2ODcyQworOjEwQ0VDMDAwOENGMDFGMkM3RjMxODQ5Nzg3Mzk5MjM2RTQ2MDc5MEM3RgorOjEwQ0VEMDAwRTFGNzI1ODMyRDlDQ0E3RkFGMzIyQTBGRjZBNjQ1MDBDNQorOjEwQ0VFMDAwQkMxQjYzOURCMzEwQUUyMzgyMDBGRjE2RUM5NzdGM0ZGRgorOjEwQ0VGMDAwODlFQjAwRjg5Qzg0NkUxMUJGQUU4NjUwRUE5Nzg5QkMxRQorOjEwQ0YwMDAwRjMxN0MzREM3N0QzN0ExQzcxQ0IzMTdGREIzODVBOEZCMAorOjEwQ0YxMDAwMTNFNzAxRjM2MkY1MEFBREY3QTRENTdENTcxQTk0OUY4NAorOjEwQ0YyMDAwRUMxODRFRjM4ODEyRjQ3MEIyRjhFQkI3MjY0MUJEOTNCQgorOjEwQ0YzMDAwODc1NTNCRjZGOTk3NDZENTZCMENDMzcyOEUwRjY1QkVDRAorOjEwQ0Y0MDAwMjlBRDFEREE5RDdFMzFENDFFMDRFNTI1RjdENUJDODlCNworOjEwQ0Y1MDAwREY0QkVFQUM5QjRCNjlGNUJBMUIxOEQ0RUZCQUYzQTNDOQorOjEwQ0Y2MDAwNDQ2N0M2NDA3Qzk0RDQ0MjJCM0YzQ0FFQjIzQjRBMTE0RQorOjEwQ0Y3MDAwQkZGN0Q4OUQ2NUI4REU1NTE5NUQ5NTBDRThFQUEyQjFGQQorOjEwQ0Y4MDAwRjM3MUE2MzJGNkZFNDg2NzA1N0VFRjc5RTFEMzVERjhDRQorOjEwQ0Y5MDAwMURGMDk0NTYzQzFFOTZBMTA3M0E0MUZBRUQ5QTQwNzQ1MgorOjEwQ0ZBMDAwQkQ0QUQwRUZCMDRDNjczNUY2MDc3MDJDNjUyOThDODVFQgorOjEwQ0ZCMDAwNjQ3NDFBNzExRTZDRERGMDFGNDQyNzVGNzRFQzNDQTQ4RQorOjEwQ0ZDMDAwQzAzODM1QzExREY1OTRBQUVFMDlEOENGMzlDNTFCQTZDNgorOjEwQ0ZEMDAwQTQxMDFDOURCOEZGQ0U1QkJENjE4ODBGQTcwRUYyODAyOAorOjEwQ0ZFMDAwOUY5QUREREE3NUUxOUYxRUU2NTU4M0ZGODA3NjM1MUUzOAorOjEwQ0ZGMDAwRDU2MUM2RkRDM0RDNDY5QzdGMEQzM0ZBRUEyN0YxN0Q3RgorOjEwRDAwMDAwODg3NDAwRkQzQzQ5RkJENUYyOTdEMjVGMDAxRUFBRjc1OQorOjEwRDAxMDAwOENDREJBMUJGMDUzMTM3MUY4NTc1M0E5MUVCNDkzRkI3MAorOjEwRDAyMDAwNDUxRDk4OTdFQjE5MzgxRkJFQkVGMzYyMUY5Qzg3MkZEMgorOjEwRDAzMDAwMDZBNDlGQkQ0MTlDRkUxOUE3OEY4QjdCRTIwNEZENzA2NworOjEwRDA0MDAwQkFCREI4Njc4QzFCRTcxMzJERjZDRDQ1QzVBNTBCQzYzOQorOjEwRDA1MDAwNzZCRjY0RjY5RDMwMkY2NkY3NEM5QzM3MUU2N0VGOTlCQworOjEwRDA2MDAwMzgzRjk0QjEwNzE1Q0U5RjZBODY3OTI2MjJCRjkyRkM3RAorOjEwRDA3MDAwOEI5OTNDMTNFNjQxMzk0QkY3NEM5ODBGRjU1RjEyRjU0RAorOjEwRDA4MDAwNThCMTI3OERCRUJCM0Q2OUQ4RkU5MDhFNTUyMTNDRTUzOQorOjEwRDA5MDAwN0NBQTlGOEVERjRFRjAzMEYxRkQ1QUZERjQzODgyOEY2RQorOjEwRDBBMDAwMUNBNzE5Rjk0ODM4QTY0MDlGNjEwM0Q3RkQ1QkJCQzI5NgorOjEwRDBCMDAwRjc3RkU4QzQxOEU0NkI0M0UxM0YzRDc2NTgwNkIyOTIyRgorOjEwRDBDMDAwOEI0QjhDQjczQUEwREYzMUVENDY0RDNGQjJERTU4QjdGRgorOjEwRDBEMDAwRjZGQjYxRDFGRkE4MDA3QzhFNTA3QjhGMDZDMTdDRDkwNgorOjEwRDBFMDAwQUYwMTRFNkNFMDc4RkY4OUVEODA0RTlGN0FBQTFGN0ZEQQorOjEwRDBGMDAwMkFDNzI3NjMzNjQ5MzczNjgyMTNDN0QzOUY4RDEyNEYwRAorOjEwRDEwMDAwNkJFMzgxNUZENzIwNEM5MjdERjAzQTk0RTk4QzhGODQ1OQorOjEwRDExMDAwRjQyMkU2NjFGRTg3MjIyMDBGNjlCRDgwQkZDQzRCQjhBOAorOjEwRDEyMDAwMDdEMkRGOUQ3RkFFOENFRjgyRjZFN0VEM0E5QTU3MjA2QgorOjEwRDEzMDAwNUNENzAzRkNCMEJDRDlDMDZFMkQ4NkY2NUYzNDlENDgyOQorOjEwRDE0MDAwMzk2M0YwQURFNzZDOTNDMzAxNDc0RDdGQkVCMjNERDM2OQorOjEwRDE1MDAwODRGQjZFQzVCNjRDRDMzMjNGQjgzN0VGQ0UzRTYxMDM4OQorOjEwRDE2MDAwQkM5RURGQURDNzkxNThCM0RFRkRBQjI5NTFGODVERjUyQworOjEwRDE3MDAwQjgxODk1OUIxQzM4MEZDQkIxM0Y2MEJEQ0E2RDExNTlEMworOjEwRDE4MDAwQUFDREQ3N0U0NTdCOTFBM0MyMEZGRUUzNzY2QkYxMzEyQQorOjEwRDE5MDAwREVBM0NENUY3RDU4OUJGRjFBQjk1QUVFM0ZERjJFRDMzOQorOjEwRDFBMDAwQUJDRDY3OUZEMEU2M0ZGREQzREE0NUI4MEQ5RUNGRTMwOAorOjEwRDFCMDAwRkJFNjMzNzdBOERCMDQ3MEFERkE2OEY2MDkzQzQ3M0YxRAorOjEwRDFDMDAwM0JGNDdDMThFMkFCRTZBRjE1QUZDNTMzNUM4Nzk2NEVGNworOjEwRDFEMDAwMDE4RjhBMUVENkVCREFBNTEwQkRBQzc0MDdFRTVGQzFENQorOjEwRDFFMDAwMzcwNkVDRUJGNUI0MUVEQzU5RkU3NDEzODhERjczQ0MwNAorOjEwRDFGMDAwQjNDODAxRjQ1NURCRjg2RUNBOTk2Qzk4RDc1QzIwNjQwQgorOjEwRDIwMDAwOThDRjY0Q0Y1NjIzQjMwQzFDNkYyOEZFQzEyQzBFMUI4NQorOjEwRDIxMDAwMDNGQTJCQ0JFMzY1NTMxQTY3QjFEM0QwMUZEQkYyQzdGOAorOjEwRDIyMDAwRDlCODVGQ0JFRTUxNDhERTI4N0I2RUNDMkI0ODM3REQ3QQorOjEwRDIzMDAwRkI5NzVDNEJFOUEyMzkwNDg3NzJFNjMwMjIzRjVDRDE1MAorOjEwRDI0MDAwQTE3ODQzMjE2RkNEQjMxREVFODI3NkNCREQ4QTFERTczOQorOjEwRDI1MDAwQkRBQzI1QzhDN0NGRTBGRjE1NUIwMkU2RDFFNjU3MEU4RgorOjEwRDI2MDAwRjM1RjcxRjhFODM3MEFGNDVGQjU0RERCNkUyNUMwMEI0QworOjEwRDI3MDAwQ0Y4RkVBMURGRjA4RjJGRjBFODIxMEMxNkI0QUM3NzZGRQorOjEwRDI4MDAwMTVEN0JENUNDQzVGOUU3RkNDNTVDMDcwN0Q1Mzc4MTNBNQorOjEwRDI5MDAwNzYwNkZGMDNFNzQ2RjAyODY3NkU2NkFFRUYxQzlDRDI2OQorOjEwRDJBMDAwQzZEQjAzRTMyQkMzNzVENzU5OEMzNjVDNzc5RDg5NzkzMAorOjEwRDJCMDAwNDM2MDNFMjc0MjhEMEUyQjdDQkZEQzFFNEFGMjQzNjU0NQorOjEwRDJDMDAwMTA3Mzk5QjIyODY1RTYyQzZDNjcwRkM3NzY2N0RGNTYzNgorOjEwRDJEMDAwNDk0RUFBMDNERTQzRkQzQ0ExQjg5QkIxMUY1NUUxRjlCRAorOjEwRDJFMDAwNUZGM0ZDNEFFNkE1RjUyMEREMzhGQ0Q3RTlENkU2NTkyMAorOjEwRDJGMDAwRUIzMDkyNEI2QUY1REVBMzA4OTc2QUQ2NDVGMDY2ODA1QworOjEwRDMwMDAwNEY4Nzg0MjNDMEFEMTZENkY5NDEyNENBNUZEQUY2QUI0NQorOjEwRDMxMDAwOTg4N0VBQUYzQUZDOEYyMEZGRUYyMDY3MzIxM0Q0REYwMworOjEwRDMyMDAwMTYwQzI5Q0RERjRENzA1NDhEQ0NBMTgzNzlBQTc3MDREQQorOjEwRDMzMDAwQkI1RDI0ODcxNDA3MjM5RDFBRjBCQzAwQjhCNkRERTU1OQorOjEwRDM0MDAwNDhDMzc5NkY1MDFDNjk1NkU0NjM1QkNENzZFNDYzNEI0OAorOjEwRDM1MDAwQjdGMzczQTgyRDAyRTQ1NzY4REZCNkYyMkE2QUJGMTQ0OAorOjEwRDM2MDAwRTUyOTk0NTM5NjcwN0VENzE2RTFGMTIyREY2RjdCMjA3QQorOjEwRDM3MDAwODlDQjUzN0Y1NzA5MkVCREY3OUFERDRGNDJGREI2NEMzRQorOjEwRDM4MDAwMkVGN0I0NkQxRDQzRUQ5MTVGOTIzQzc1NkYyODZGM0Y5MgorOjEwRDM5MDAwOEZDM0I1NkRCOEQ1RUQ4MkZDODczODQ1ODA0RkRCNzZGRAorOjEwRDNBMDAwNDc5QTg5REE4MTlDOTZFNDNCQTdBNDNDRkQ5QjUxQ0UyOQorOjEwRDNCMDAwREIxMERGNzJCRDUyRkU2NjU1M0Y0Q0RFREMyOUNFQ0Y1RQorOjEwRDNDMDAwREVBRDMwNEZFOEZGOEM1MkZDOUFDRTRGMUU2RUM5RTRBMgorOjEwRDNEMDAwRkM3RkUyNENDNzJFNTFDRjhFRjUyQTc0RjNFRTlFMEVFMQorOjEwRDNFMDAwRjNBRDc4NTA2NzZCNEVGMkMxOUQzOTFDNjkwOEU3MzM4NQorOjEwRDNGMDAwNUJDRDU5NDg2NzEzNjcwMjFGMDZGQTNCOTlDOUY5Nzk1MworOjEwRDQwMDAwNDgwRTczQjgyMUJENTdGNDdCNkZBNjRFOTNDNjA2MDMzMgorOjEwRDQxMDAwRkQ0MTNGNjc4QUJDMDZDNDZGNjg0RUIxMTFDRjQzMzhFNworOjEwRDQyMDAwQzM4OTlGMDdBRUUzNjFEMTRGODVCMUY4RjU2OTgzQ0MxRAorOjEwRDQzMDAwQTc5RjBFMEFCOURDNzI2NkI1RjIyNDlGMTdDN0YzQzQyMgorOjEwRDQ0MDAwRkYzMERCOUI2OUREN0M3RTEyRUU0MDM3Qjk3NERFMEI2QQorOjEwRDQ1MDAwQkUxNUQxNEYyN0VFM0Q2NjQwRUQ1NjI5NEYyM0ZFMTVGMAorOjEwRDQ2MDAwMEQ5RDEwM0NEQkVFMUQ0Rjc4NUMyQUYwQ0NFRTM1MEJBOQorOjEwRDQ3MDAwM0E2MUVDNkY1ODVFNjRBMzcyQTAxMzgyNEY1QjI2RTBBMgorOjEwRDQ4MDAwQ0RFMjNCRjdEQUU2MzlFMjIyRkNDRTIzQTAwMzJBMDdGRAorOjEwRDQ5MDAwN0NFRkNGMUMzRUYwQkUyNUYxQ0RGNEVFRENFMkQwQTE1NgorOjEwRDRBMDAwRjFCRDJDMkY2MkEyMDJBMDhFRDczMzU3MTBDMDA1Q0YzQQorOjEwRDRCMDAwM0M4MkNCNUQ3QUY3OUQzMDlGOTE3QTBFRkYwNDNEQTdBOQorOjEwRDRDMDAwMkZFMENFQUVFMDJDQUFFRjMwNDJCRUVDRkUxNUNDMDEzMAorOjEwRDREMDAwRjVDQkUyOTk1REUxRjU1OTM4RDY4NzZFNTQ0OEYxQ0MyOQorOjEwRDRFMDAwQzA3NjY1RTFCQ0RGQjIxOEU2QkU1M0M4RkRDOEFGNTJENgorOjEwRDRGMDAwMzE0REE2N0UxREJBNDhERTNFMkM4QkRBQkI3NEJDQkQxNgorOjEwRDUwMDAwNDMwRkU5QTgxNEJFNUY3QTM3MDREMUZFMjlEQjk0OTA1QgorOjEwRDUxMDAwODY3NDMwNzdBNjk2MEU1MkIzMzhEREM4QjQzNUNCMjY2NAorOjEwRDUyMDAwQ0UxOTdCMkNFRUVGNjUyRDYzRTlEQzY4MzYxN0Q3MUQyRAorOjEwRDUzMDAwNDQ3Q0VEMEIyMTc5QjA2Q0UzMkREN0U3RTJGQzlFMTkxQQorOjEwRDU0MDAwODYxMjBFRkJFMjg2RkQxMzkxREU5NkI1MkNGOUQ5N0I4RgorOjEwRDU1MDAwNzgxRkQ5NkRBNkVGRkJCMjlDMUZFM0ZFRkE0MkIxOTU4RQorOjEwRDU2MDAwMUU4NDBGQ0IxNjFFMzdDNjQyN0JBNzY3REU4NTE3MjFBOAorOjEwRDU3MDAwQkRDMUI1RkYwRjI4MTdEQzcwQTM0QUY1NkY2MDlFQUZFMQorOjEwRDU4MDAwM0Y0NEJFRDBDMkM3QjlERTc1NDkxRjBCRkQ1RDlGQUZEQQorOjEwRDU5MDAwMzAyQ0VGMzY1QjEzNTdDM0ZDQ0IwNEZFQ0UwOUZBNkQ3QgorOjEwRDVBMDAwMzZCM0M1Q0Y1QTcwNUUwOTY5QzlGMEZEN0E5NDU0MDc0NQorOjEwRDVCMDAwOTEwM0M3NjYwOTM5NzE4NkIyMERFNTlFNTFCM0Y4RkUzNQorOjEwRDVDMDAwOTJGNUIxMUZFQ0Y3NkE4NDA3RDRGQjVBRUMyQjk5MDc0QworOjEwRDVEMDAwQjg1MkZEOEFDRDQxREQyOTYxOTgxQUJDNjMyMDVEOTQ2MworOjEwRDVFMDAwMzNGMzZGQjhDRUI5Qzk2QzM2REU5QjdBN0ZBRUIyMjcwMworOjEwRDVGMDAwNjlCRUJENjVCNEVGNDNEMzZDQjhFRjlEOEM3OTg5RUZGQworOjEwRDYwMDAwQjlDNzEyREQ3N0NGRThFRERFMDRGOUVFRUQ2M0VDQ0RCRQorOjEwRDYxMDAwQzREN0Y5RkQ3REI5OTVEMUY5REUzRDgzRjMzNUM5NUZGNgorOjEwRDYyMDAwNEU1QUJCNDI4OTVFQzU3REJFNUM5MEM2Mjc4REIzMUUzNworOjEwRDYzMDAwOUMwNEY1Q0IyREM2NkUzQzBGOTYzRkIwMjBDQzA2RjM3NAorOjEwRDY0MDAwMkM2RjgzRkIzQzlDNjM2QzhCRjYzRTBGRjdFREE4QUMxNAorOjEwRDY1MDAwREM4MUY3RjJDMEZCMzdEMjBDRDI1MUM1MTY4NUU4NzBEOQorOjEwRDY2MDAwNTRCM0REMTg0NzdDNENCMUUyRkEyQTJDREU1NDNDRkY1RgorOjEwRDY3MDAwMkFFQzY2M0I5NjlGNkY3MkRDN0YwNkU0QzM4QjRENzM4QQorOjEwRDY4MDAwMjg2NURGMDJEQzYxOUU1NzIxRjI2MERGQTc2NzNCOTNDQworOjEwRDY5MDAwQjIwMDhFNjVBRDY1NzQ5RjBDQzk3MDEyN0Y3MjBBQkFCNAorOjEwRDZBMDAwOUIwQjYwNTY5MERGRThCQkUyNzAxRkJFOTMyOUJFNDcxQworOjEwRDZCMDAwNUFEMzJDNDRDRjY2ODY3MEU4MzY1OEQzNzA1RUREMUI5MworOjEwRDZDMDAwQ0MzQTNDMzdFN0RFQzlFOTFBRjY5OTQ5MEZFREVGRDJCQgorOjEwRDZEMDAwQjM2MERDRUYzREQ4MUVDNjJCNTlBRjJGREUwRUY5OTE5QgorOjEwRDZFMDAwMjZBNjBGOEQ0NEJBQ0EyNEJBNkVDRjcxN0U4REZDRTA5NworOjEwRDZGMDAwQjM1RkIyM0M5NDBCQ0FCNzZDQTVGOTQ4QkE2MEZBQ0VENgorOjEwRDcwMDAwQzI2MTI4RTdFRDRDQ0FDMkZCQjVBNEEzRjY5Qzk5Nzk4NworOjEwRDcxMDAwMDhCRjdFN0FCODUxMjEzQTgwRjQ2ODBBRDFDM0ZDNjkwNworOjEwRDcyMDAwNTgzRTc3QTYzNzc1MERDQ0FCNDhBRDY1MEVENDMzQzRFMworOjEwRDczMDAwMzI3QjEwQ0NCRjhGRjU5MjNDRDEwN0YyMDQ5RTY3OTJFQQorOjEwRDc0MDAwOUY0OEJFMDE3NEUwMzA0NUZCRjBCQkFCMDlBNjAyM0MyQworOjEwRDc1MDAwNzk3NzkzODlEMkE3OUFBQzRDMEZGMEREREIxNDRCRjlBMworOjEwRDc2MDAwNjc5QTZDOTQ3QTlBRDJFOUZCQjM0RDc2Q0ExRjY4Q0E1RAorOjEwRDc3MDAwQTNGQ0ExMjYwN0U1MEYzN0NEQTFGNEM1QTY2MkZBMkVCQQorOjEwRDc4MDAwRjkxMkMwODVGODkwRTQyQjkyMUY0OTdBOTI3QzI5OTA3NworOjEwRDc5MDAwOEU0QTAxQkMwNTU5RDQ5RUY4OUVFNDc3QjgwRTVEOTY3QQorOjEwRDdBMDAwOEYxRjQ5RkMyNjJCQzVBRUQ4MjRFNDYzNUQ0QjkwNUZFOAorOjEwRDdCMDAwMTRBOUU3RjczRDBGRjBFREFCQjJEODgzNkMwODE3Q0U5NAorOjEwRDdDMDAwRjdGQTJDMjYzQUU3MTM4REVDMzBERUZGOUI1NzNCQkE3NQorOjEwRDdEMDAwMzdGOTlEQUIzNzU3Mjk0Q0VGNDdCN0I3MzQ5ODk5REVFNworOjEwRDdFMDAwOEY2RTZGNkQ4Q0QwRTQ0QjFBREY3RDM1MDZGQUZGNDdFNAorOjEwRDdGMDAwODI3MzM1RDJERkM5M0JDRTNFRjY1RkYwRkQ4OTNCQkU3QQorOjEwRDgwMDAwMTg4REY4ODY3OUVDN0MwOEM3NUQxN0RDM0Y4RjQ4Q0MxMworOjEwRDgxMDAwQjcxOEU4OUMxOTE1Q0NFRjQ5QTM4MkY5M0QwOUZGMTAxMAorOjEwRDgyMDAwM0ZDQjE4REZBNzRGRENGMTM3REFFN0REOEQ0MTM2MTU0NgorOjEwRDgzMDAwRTUwRkM0MTdDMEY3MkYwMjVGQ0IxQTgzMDg4RTY1MUI1NAorOjEwRDg0MDAwNEVFRjdCMUVGN0ZCM0EyM0YxQkI2NTJENjI3RjZFMDYyMAorOjEwRDg1MDAwQjhGQUM5NkRBN0UyMThDOTY3OEE4M0IxNDY4MERGQTkwMworOjEwRDg2MDAwNUYxQUJENzBGNkIzNTM4QUM5QUQ0MDQzMDUyRTREMjVFRQorOjEwRDg3MDAwMDhEN0NEQkZGQjAwRTU2REE1RjEwNEM5Qzc0RTkzQzUyMAorOjEwRDg4MDAwQUJFMkZDNUM4NkYzRkVGRDI5OERBRjUxM0RENjM1MzIwRgorOjEwRDg5MDAwRTI2QzA4NkQ0NTg2NzAwQ0M5NzExODkxNEYyMDZEMjM5QworOjEwRDhBMDAwRkU5NkE1MUY2M0I4QkY1OUFCNjIxRDBERUJBQTEwREYzMgorOjEwRDhCMDAwMkIzNjJCMjQ3NzQ4RjgzRjkyQTVEMkJFN0EyRjUzNEZCMAorOjEwRDhDMDAwNjkzNkVFRDlFMUM0QzBFODlDOTI3NDBCN0NDM0UxQzYxMgorOjEwRDhEMDAwRkREMTlBNjlBQ0Y0RTNDN0NCQzRGN0YyNzQxREE1RjI4RAorOjEwRDhFMDAwRkI3QkIwMkQ5MTRFQjIxMTQ5OTBERTlEOUU2QzVDNEUzQgorOjEwRDhGMDAwRkNDRTY2NDQ3RTIwRUIyRjRCQ0ZEQTk4OUM4M0ZEQ0M4OAorOjEwRDkwMDAwODg2MjdFRkI3MjU3OTY5RURBQkQ5NzY5RTVGMzMxQzE1NgorOjEwRDkxMDAwMzkwNkVENkE4NzM4MEZBNDdDRjIxOUZFNzMzMkNEOUY2OQorOjEwRDkyMDAwRUU1RkQ1Q0YzQ0ZEQ0M4QkE4OTdGODI4ODhGMDU0N0RDRQorOjEwRDkzMDAwQjVEMDZGNjRCODI3MkUyMEI5QzY2MTUxNjA5REY1MDIzRAorOjEwRDk0MDAwRkY4NTRGRkYzNUFDMEJDQTU3MURFMEZBNTM0OEJCMzE3QQorOjEwRDk1MDAwQUQ1RjU3NDVGQUIyN0FCODhGMTY0NDIyN0YzNTlDRUFGQworOjEwRDk2MDAwRjJBM0NCNTc5RUY5MjhBQzhCRUUxN0FFNzg1RDJDQTZCMAorOjEwRDk3MDAwREU3ODA2NjlGRDgxRDNCMzE5RjZDNzdBMzc1QTJEMDNDRAorOjEwRDk4MDAwREJBRDUyQkVBNTdCQTY1QzQ3RDE5MUFGQTI2OTdDRTUxOQorOjEwRDk5MDAwNEEzNEQ1M0ZCMjIxN0EzMDNEQzgyQUE2M0ZENUJGN0Y1MQorOjEwRDlBMDAwNDlDRkUwRDBFOEQ1NTZCMTJEOTc1NDk4RUZBQTc1NzNCQQorOjEwRDlCMDAwM0U0NTNBMEZBQ0ZGNDE1NjY4MTREMjBGOUJDNDI2OTFFNgorOjEwRDlDMDAwMUU0M0NGNzQ4OEVGMzUyNjBFODczRUY3RTg3MEY2MURBQworOjEwRDlEMDAwRkE5NzU1RUREMDA4NDRBRDNFQkQyRERDMEVGM0VENjE1OAorOjEwRDlFMDAwNkNDRTYwNzg0OUM4RTZFN0Y0MDVEODQ3MENFRTUyM0RBNgorOjEwRDlGMDAwN0I1NUJBMkZGNEVDMEQyNUZBQUZERjdCRkY2QjUzMjE3QgorOjEwREEwMDAwNUZCRjQzQzE2MTU5MURFQjI0MzhENTFGNTA5OUM5RkYzMQorOjEwREExMDAwM0M0M0ZEQ0VCMEExRTc1OUYzNzQ2ODAzRDJEMzRBOEZEQgorOjEwREEyMDAwRTJEODA5RjNFOTMzRDlDMjg3RkJDREU3NkY4MjlFNkE1QQorOjEwREEzMDAwODIzQzEzMDlBRTYyRkVCRDgyOUZDOTdBMkIzQkVFMzc1MgorOjEwREE0MDAwMjJCRUEwREU0NTkyNUY3RTFCQzI0ODZGQzY3QUZGODA3MQorOjEwREE1MDAwRjMzQ0I3MkREQjhFRkFCRDk1OUVGREY1NzRGRUVGMEQwMAorOjEwREE2MDAwQjE4RTg2NzU3QzIxRjRGQ0IyMUY2MzM2REY0RkM2NkMyNQorOjEwREE3MDAwMkU2RjlDMTNGQURDNzNDRkE4QzQ4NzcwOUVCODBGQkZCQgorOjEwREE4MDAwNDAzOUQ3NkY5RTE2RDFDRTIyRTBGNjFDRUVDNzVDNUYwMAorOjEwREE5MDAwRkQ5NTlFRUVCMDU0QThGRkU5RTE3NzI5OERDRUU2RUIyNworOjEwREFBMDAwNUE2OUU5OUM4MEU3RTZBNzA3NDJFNkI4Mjk3RDc0RjY0MworOjEwREFCMDAwNEIzMERFMDVDRjhDMjhDNTZGNUZBNTY0MUIzODNFQjZBMgorOjEwREFDMDAwQTk3MzEwNUVDQzNENENDOEY5MUU1QUNGQjlCREYxMEFGRQorOjEwREFEMDAwREQ2RjExREUyMEU3OUYzQkYwNUM5ODhFRjZBRDRCODM0NworOjEwREFFMDAwNDc5RDg5RUI2OTgzMjI2QzQyQ0UzNEI1QTJCQ0IxMTQ0OAorOjEwREFGMDAwQTRCQjcwRTA3Nzc1MDcyRUQxRjkxQkY4NURENkE3RkRBMgorOjEwREIwMDAwMTY4N0Y3RUY1RUQyNkJDMDlGMEVFOUI3Q0VDQTcxNUU4MworOjEwREIxMDAwQTQ2NkM0RTAzRTI4QkREQTc2RDNDREM4QzdERTMwNzAzNworOjEwREIyMDAwM0M4Q0I0M0Q4NEY3QUFEMkI3ODc5MURFNjI4REMxMTZEMgorOjEwREIzMDAwODNGOTJGREY4NDhCMjBDQ0JCMzQ1QkVDRUZEOEFFNUM1OQorOjEwREI0MDAwRDQ3Mzc2MjdGMTczQkQ3NjMzNUM1NDYwM0QyMzAwRUZDOAorOjEwREI1MDAwMkU1ODcyQUQ1QjY1NEVDOEFCRTIzRTczNEQ3NjMyQUQ2QQorOjEwREI2MDAwRUY5MTJBOURDMzQ4NzYxNjZGMUFFQTNENEYxQTk5NEJEQQorOjEwREI3MDAwNDU3OUY5NTkzM0I3MDcyNDczQkRGRTIzNDhFRjkwRDY5MgorOjEwREI4MDAwNDY3QUQzODZBMUZFNEJFMEIxNzYzRTk0RkJFMUIzRjYzNAorOjEwREI5MDAwNDk2RjFBQ0EyRkU3OEQ1Q0NGODdFNTU2NENCMzc4QkQyNQorOjEwREJBMDAwNjY0MTM3RDgwRkY2REI5RDY0QkQ0ODcyRTZDMTUwODZFQQorOjEwREJCMDAwRjJCRUVFRjk1MEFFNTdGODhERjlDOTIwQkY3MzczODlFNAorOjEwREJDMDAwQTAyQjkwOTk1Q0I4N0VENzRFM0UzRjlDMTdDQUNGMkJCNgorOjEwREJEMDAwOERBRDY5Mjg1RkNBNzE1Nzg2QjVEMjc4RTdDNTc4MkJCNQorOjEwREJFMDAwODM1QkI5N0RDMkM4RjU5MTU4OUZDNjM3MzBCMkEzRjRBNAorOjEwREJGMDAwRUUwOTIyMzlGNThCQjhDRTQzMzhGRTE3N0JDNjMyM0M4RQorOjEwREMwMDAwQzdCQjkzREM5NTg3QTkxQ0U0MzdDMDQ3RjU1MzQxNUUzOQorOjEwREMxMDAwOUNFRkU3N0I0MkREMENFQTdGNkVFMEYyRDBFN0ExRDExQQorOjEwREMyMDAwMjQwRjlEMDg3REIwOTRFQzMyM0I4MjE0RDRBQjdDQUVDMworOjEwREMzMDAwMzA2MzJDOTZFRkU0NzY4Q0VBQTY0NkIyM0Y1NEMzNzY2NgorOjEwREM0MDAwNjc1OTk0Q0U2MTkxNTgzRTk2RjQyRDlGRkYxRUY2QTkxOAorOjEwREM1MDAwNDJERjM3RTM3NzI3NkIyREJEMURGN0RERUUxMEQyQkIxQQorOjEwREM2MDAwN0RGMUQ0RkYxQTNCOThEREEyN0E4NzU2QkYyNEU5NDBBNAorOjEwREM3MDAwOTZERjlFQ0RFRjFCQjc2N0YzN0JDMTFERDlGQzlDQTkzNgorOjEwREM4MDAwMEJGMTNDOTg0Q0VCRTRGQjE1RjA0MEY3MkVEODFGRDE3QworOjEwREM5MDAwQThFRjNFRTk3OTIxNUFCMTIwOUNCRDY5OEYyMkRDNzczQgorOjEwRENBMDAwRjNGQkNEMTc3QjBENjQ3N0E5N0UzRUQ0NDE3QTlDNEQ2MgorOjEwRENCMDAwOTM3NDc4NUU1NEFCNUMwRUFFRDYwMUY4MjA1NUVFRDg2NgorOjEwRENDMDAwOUQ4NjcyNzZGMzFFNzMxNkMyMDNFMDRERjdDOERFOUQ4MworOjEwRENEMDAwQUExODg3OEZGQkY5QUUwNEFFRDdGNzhBRkNBMUYxQTQ4RQorOjEwRENFMDAwRDc5RjFCQzk2RTlENEY3MkNFQjYwOTA4RDdDQjNCNDI1QQorOjEwRENGMDAwNzQ0ODE3MzA4RTQzMDFGODU0REZGRTBCMEVDRkYwNEEwNAorOjEwREQwMDAwOTJDQjYxRkYxMUJGQUMxNUZDQjI2RUQzRDRGMEE5QjhCMQorOjEwREQxMDAwOUZERTU2MTlDQTA1OTdGNUY2MThFNDg3ODFGMDdBNEIwRAorOjEwREQyMDAwRjA5NTlBNDM4RjE5RDE2RTU3MEJGQkM2MDlGQkE2NDY5NworOjEwREQzMDAwRDhDNzZBOUU1MjQ4QUVBQkQ5MzhGNTIxRTI4MzdGMzAwRQorOjEwREQ0MDAwQjBEMTMwOEZGMzlFRkJDM0ZDRjFGMUJDRTA2N0JFRjZBRgorOjEwREQ1MDAwNzZBQTVGMDNGNTc5RkIzN0MyNjgzRUJCMEM3NjlDNEYxMQorOjEwREQ2MDAwMjAxRTdGNzBGQkE3RDQxRkQ0QkU5RjNFM0M3MEFFNEZEOQorOjEwREQ3MDAwMThCOEVFQ0JBQ0YzREYzRTQyN0VCMkQ3NENGQTJCQzBFNAorOjEwREQ4MDAwN0IyMkNBMURFNzBDOUU0QTVDRjdCOTdENjZFMjMzRTc0OQorOjEwREQ5MDAwMjJGODdFRkYxNEY4QTE2QjBDQ0VFM0JBRkI0OEJGRjE2QQorOjEwRERBMDAwQ0UwMjg2RTdDMTBBQjdCNjVGMzk2RTg3RTBCRjc1QzM5QQorOjEwRERCMDAwRUNFMUE4MjdBQjAzM0M2MDdGODA5NzlGNTJGQkI3MEQzNworOjEwRERDMDAwRDQzRTcwMUQ4RjhBNzZGREZCNzM1RjA4RDFDQkI5MTFFRAorOjEwREREMDAwMUMxRkU3OUUxOTQzRTc0QTc3MDRBNzczOTg2RjIyREU1QQorOjEwRERFMDAwNTdDRTQ1RjA5NEExMzAwMjc0NTAyREVFQTNFNzY2NzgyQgorOjEwRERGMDAwRThGRTdENEVEOTRGNjlCNzgxQjdBQjZFMTQ3NjYzQTA0QworOjEwREUwMDAwQkI1OEE0MUJBNDQ5QjQ4Nzk5QjY3NEEyM0M4MUZBRUExMgorOjEwREUxMDAwODk1OTk0N0E4MzIyMDdFQTlEOTEzRUYxMUM4QUNBRTFDRQorOjEwREUyMDAwRkI4QkUxNzhEMUMyRkU0MTcyOEFDNzg4N0NEOTI5RTQ5NAorOjEwREUzMDAwQjhEQUJEMDNFRDcwODhERkRBQkQwQUQ5OTEyRThCNzM5NQorOjEwREU0MDAwMTA2NzFEMjVGNUU1NDA4RjM1MkVDNTYxQzZGOUI0QUNDOAorOjEwREU1MDAwNUU0OTc2QTQ4NkFEMzcyM0JEQ0I3NUQ0RThEOTFDQkMwQQorOjEwREU2MDAwMEY3NTJCMkFDREE3REIwQ0ZCMDZFMUUwM0Y5RTlGREM2NAorOjEwREU3MDAwRjU3N0MxMEZGMENGMUE0RDcyMjYwOUQ3QkExQzFCQTczMAorOjEwREU4MDAwMUZDOEI2NDI3RkI1MkRDQTE2MUEyNzQ5REUyQkY5RkFFQworOjEwREU5MDAwMjQ5QzAwMkM0NkQ0OTdDMTdEOUY5NzBGQjE3RTM5Q0YyQgorOjEwREVBMDAwQzBGNUNCRjk0NEU3NzBGRURFOUQ2NEJCMkYxRkYxRkQ4QQorOjEwREVCMDAwOTY2QUM3N0JGQUU1NkZCM0MzMjNCRjQzMkVDMzlCNUI1MAorOjEwREVDMDAwQkZERTE4RTY5RjgyMzQwNUVCM0E4QkZDMERGNzMzRUE5MAorOjEwREVEMDAwQTU2MTlFNjlEQkI0RjY5MEY0MUREQUZDNTU3QkI1RjlCQgorOjEwREVFMDAwOEMwM0RBRkM4NDBFNkRERUZFOEEzNjFGMjJDNjk1NzAyNgorOjEwREVGMDAwQzI3QkFGNkQwQ0JGRjc2MjhBRjc1RTVCMTBCRkY3NjI0MworOjEwREYwMDAwMUVFRkJEOThFMkJEMTdCRkUzQkQxN0YzNzhFRkM1M0MyOAorOjEwREYxMDAwREU3QjMxOEZGNzVFNENGMURFOEJERjZGMTQ3MEFBMTU1QworOjEwREYyMDAwN0E0N0M0MDNEQTY1RDgwQjY2Njk2N0E3RkREMkIzMjRDNAorOjEwREYzMDAwOUFGOEE3QjQ5M0Y2QUNDQ0EwN0NCRjVFNjc5RTg5RjQzOAorOjEwREY0MDAwM0FBNEJCMDFCOTY0QzE0ODY3NDFDRTcwQjQ5Rjc2NkVGNAorOjEwREY1MDAwOEM0M0JDRTlCQjQ4OUZCQkVBNDVBRUNGQURDRDMyNUIzRAorOjEwREY2MDAwNTBDRkQwQjVFMUQzOEQyODNFQTU4RDc0Q0VDQTgxRjVCMgorOjEwREY3MDAwRjYxODdBNzcxMTFERThCREM0MzdCQUQ2REJERTlFQ0UxRgorOjEwREY4MDAwRjE0N0ZBMEU2Njg5QTRGQjQ5MTk5RTc3OTE0M0UzMzE2NAorOjEwREY5MDAwRDBBRUMyQjY2OEVEMjg4MTc2OTU0MDdCNEEyMDFENDhGOAorOjEwREZBMDAwM0JDQTEzODZERTM4RTRGN0E3Rjc5OEI2RTBGQzRGMEJDMAorOjEwREZCMDAwM0QxOTVCNkMyMkY5NEJDQUQ1NDVBQTg1RTBCNEU2NUVGMworOjEwREZDMDAwRTU0OTNDQTcyQTcyMjJBOTdEREYwOTkwQjcwNzM5NkY3RQorOjEwREZEMDAwNjU1QTdFMjU5QkU0RUFGRUZDMTY0NTQ3NzYxQUE3ODMyMAorOjEwREZFMDAwQ0VBMURCQzQ5QzEyOTVERUVFNEQ0ODIzQTEzQTNBQzc4MAorOjEwREZGMDAwMkY1Qjc0NzQyRkI4RkMyNzk1RTQ4ODMxRUQzQUNEN0EwNQorOjEwRTAwMDAwQzZCQTgzMzVGNDM1NkU3NzY0ODAzRDcwODRBNkZFRDUzQworOjEwRTAxMDAwODc5MzAzRUM4MTU3NjlFRDU0MzdBRTNGOEFGN0VCMDVFMAorOjEwRTAyMDAwNUJCMjM1RjUyQThBQTcwNkMwNTFDQzVCQzhBNUNERUJGQgorOjEwRTAzMDAwREExMzkxRkZEQzE2REE0N0YzQkZFREEwOTlGQzJFMkEyNAorOjEwRTA0MDAwRTA3QzcxQzBCQUFCMzAwM0ZDQjFDQUU0QjgwMUUxNTc1RgorOjEwRTA1MDAwRTUzMTQ0QTA1RUFCNUM5QzNGQUM1MTdCMUU1N0U5OTkxNworOjEwRTA2MDAwQ0IxQUU5QTNCQjJBMkI3MzQ0NDBGQjBCOTlBREJCNzRCRAorOjEwRTA3MDAwODBCNzBCQkE2RDBGRTZEQkQwQkVCNDNERDEwQTc0QjVFNAorOjEwRTA4MDAwNTZGMTQ0NEY4NkZFNEU0NzM4RkYwM0U5MzNEMUUwRkQ5OQorOjEwRTA5MDAwNTUwOUYyQ0JGRDI5NkMzREQ0M0JCREU1QjkzMDkyQkJBRgorOjEwRTBBMDAwMDU5RDI1MUFBQ0MxODhFRkVEQUQyQUREMEI1MDNGODVFQgorOjEwRTBCMDAwRkEyMDQ5MEZEQjVCODcwNUE3NUE3Q0VCRjRFMUZGNUI5NQorOjEwRTBDMDAwNUExRkUwODVGQzQ2RkEyQ0M3NDZERTg2NzI5Qzg3QUY1NQorOjEwRTBEMDAwQjc2QTg2RTIyMjM5NTlBQzY3OEQzODU3NTgwQkVGNjcxQgorOjEwRTBFMDAwQURDODlGMTFGNzA1QjlCRUYzNjM4RjRFQjBBMTVEQjMwNAorOjEwRTBGMDAwRTk3MEEyOEE3QzVDQjc3NzU3MUNDQTE3MzFDRTdEQjgwRAorOjEwRTEwMDAwN0ZBQUI2OEZGRUFGN0MxOEI3RkEzRDk1QTExREY5OTM5MworOjEwRTExMDAwQjY1OTYxOTM1MUZFREM2N0IwQ0Y4NUZDQTZENjVGMUI3NAorOjEwRTEyMDAwRjE1RTUwQUQ3NzFCRjFERTU5QjU2N0JCMTFFREZGM0ZENgorOjEwRTEzMDAwRDlCRDlEQkU1N0VFMkVBM0ZCRjYwQUQ2NDBGN0M4Q0YzOQorOjEwRTE0MDAwMENGQzlDOTZGMEE4OUFBOTZDQjNDMkJDODdFNzcyQjk4NAorOjEwRTE1MDAwQUYyQTk4RkI4MzE0QTlGOUFGNDZFMTdBNzcyQjk5QjhENworOjEwRTE2MDAwREUxQjhCRjcxQkNCRTBGQkVGMDQ3RjA5REMxRjdENkYxMQorOjEwRTE3MDAwMkUyODFBOEU3QTI1MEZCNzgzMEVCNTFGMTY3QUM3RDJBRQorOjEwRTE4MDAwN0U1ODcwMjU4OUQyMUJBRjhDQTM3QkQ1N0JBQzc4M0NBNQorOjEwRTE5MDAwRjE4OThDODBGQkVDOUIyQUQ3OUI3NUYwN0Q1MDY1RjQ1MAorOjEwRTFBMDAwNDYyREMwN0RGMkIyODFGNjQ5MURGMEFGQkMyQ0JDMjdENAorOjEwRTFCMDAwMzMzNjA1RDJFMjdDNTU0M0FGQUIwQTQzMzRGNEJDOTgwNgorOjEwRTFDMDAwNDU2QUVDQ0E4QkQ4MDg0REZFQzZCOTI5OUFGQTM3RERFNAorOjEwRTFEMDAwMzgyRTgwRkVCMzdDRTVDNDQ3QTY2OEZDNTdFQUQ2Qjk2MgorOjEwRTFFMDAwNkMwQUU5RDE2NjZBQkY0M0JBOEVFOEVDNUE0REZCM0EzNQorOjEwRTFGMDAwMzZERjU3MEZFRkMxM0JGRTQ4NzA2NkFDRDM4OEY3QURGMgorOjEwRTIwMDAwMkExREY3RDc1OUVDRUMxNkRGQkJFODNCMkM0NEIzMEZDMworOjEwRTIxMDAwNDdBNUQ4RkY4QjlGOEIwNkQyQ0Y0QkZERjQ2MkZDNzdDRQorOjEwRTIyMDAwQ0E2MEU3MjIyMDVBOEMxQkFFNzJGRDgyNTMyQjc3NzQ5MgorOjEwRTIzMDAwRDJGRDkzNzEzQ0Q0MDk3RDRGNUQzQUQ3RjdENEI5M0FGQQorOjEwRTI0MDAwOEQwRDE2ODJCRjNFMUU0MDUyREZBQTkwM0UwRkVBOUIwNAorOjEwRTI1MDAwRTIyMzc5N0UxRDdFM0Y2MEYwRTk1OTE4RUZFRjBBOTZDMAorOjEwRTI2MDAwOUY1MENCNzBCRjA0OTZEN0MzQkE1MUNFQTg0NzdEMEQzRgorOjEwRTI3MDAwRTk5OUU2N0M0QTdBMjYzOThFRTg1RkQyRTk4QTc2QUQ1QQorOjEwRTI4MDAwRkVBODFFRjUzQTdFRjg1QzlBNkIyMzdBQURERUJERkZFMAorOjEwRTI5MDAwQjUxMTAwOUYwNUM1MTE5OUI4OEY2QTNERjMwQzY1MTkzQQorOjEwRTJBMDAwMDNFOTRERjJGOUNCNTUzQUIyN0JGN0JENzk5Q0U4QUQ2NQorOjEwRTJCMDAwQUY0QTRGNzRGRDdENzBBOTc3NzBCRDY2MjAxRDU2QzJCMAorOjEwRTJDMDAwQkE0QzMwN0VFNTAxQzVFRTU2NzgzRDg0Q0YwOEE0Q0YyOAorOjEwRTJEMDAwMDBGOEM0MEYwMjM3MDlBRjdFRjgwNTk0QUZDMDdGRTRBMQorOjEwRTJFMDAwQTAzRjgxRTJGNjI2MEQwNjk3MDA3OENBNzEwMkUwQzVDQworOjEwRTJGMDAwRjJCNEYwQTg3NERBREU0NkZFNTM3OTQyNjVFRTFGQjA0MAorOjEwRTMwMDAwRkUxNUI4NEU5QzA3QUMxM0U3MzFGRjBBRDc5QjQ4N0IzQworOjEwRTMxMDAwQzJBMjJCN0FDQUY3RDM0RDMxQzAyQjBCRjc5RDc2OUY0MworOjEwRTMyMDAwRjZEMzUxMzFERjM3MEJBRjQ0NTNCQjFGOEI5RUJFOEZFQgorOjEwRTMzMDAwOEVFNEZDMjVERkY2RURBMzNCODk2RjNBNzM0M0EzQ0U1MQorOjEwRTM0MDAwMDJBQjgwN0ZFNzEyNUYxMEZDNzU2OEI5RDRDNUY5QThFRAorOjEwRTM1MDAwNTM3QkNFOENCQTIzOEZGQzhFRkEyQ0M5MjQ1N0Y0OUZBMgorOjEwRTM2MDAwNDM1NjZERjk5QUQwRTQxODJDNzcwQUJEOURFNEM3NEU0OAorOjEwRTM3MDAwNTE0RjhFNTMwNkU1QjY2MTQ4RDcyM0EzNTExRkJCQjE1OQorOjEwRTM4MDAwMjUyNUIxQ0I0RjVFNzE2RTMwNDRBM0JFMzA3MUZEMzA5OAorOjEwRTM5MDAwNEFDQkNDRDY2ODNDNDdDQUQ2QUJDNTc4M0U5RUJBMkI5MgorOjEwRTNBMDAwMjYzQTBGRjVGMzFCMEM1MTczQTFFQjUzM0ZDRjQ5NjQ5MQorOjEwRTNCMDAwRTMzMTVGNDRFOUU5QUQ0MThCRkRGNURDMzJCRDRCOUNCNworOjEwRTNDMDAwMjc3NTc3N0M0MEU3REEwNUREOUI2MThCNzFERjZEMzg1RgorOjEwRTNEMDAwMTg4NkFFMzczNTFCREU5RDY4MDU5MTY0NTM4NDczNzNEMAorOjEwRTNFMDAwMkVEOTUxQjdFRkIyMjJEQ0FDREIyN0EwOUVCQTFERUZDRAorOjEwRTNGMDAwMUVDMzdERjI0M0Y1ODZBMjE4RDQ4QkQ1RkVGREY4RTM0QgorOjEwRTQwMDAwNzhFRTNCRDcxQkEyNTFGRUZDRkM0RjcwMkUyQTc0QUU1NworOjEwRTQxMDAwOTFEQ0YwOTk5OUQxN0RFOUIzOUQyMTZFQjRERjdGQTY5RgorOjEwRTQyMDAwMzAwN0RBNzc1NkFBNDcyNzU4MzVFNzZDQzcyMjlDQzdDQQorOjEwRTQzMDAwRUUxODY3M0IxRkRGQkQyQjE2QzdCN0JCQzgzRkQzQjk2QworOjEwRTQ0MDAwN0U3NEY4NjA3QTE0OTlBRTZBRTc3MkREMkVBOUM3MTU1QQorOjEwRTQ1MDAwRkE1RTk0RTczMThGRjIzQzFCQzNFNTc5Q0NBMzNDOEY4NQorOjEwRTQ2MDAwMjlDQUYzRjhGRDkwRDBFMzhGNkFFRUNEQzRGQkE4NkIwOAorOjEwRTQ3MDAwMjY0QjZGQTA3M0Q3OTI4RUYyRkE2RDRBQjAxREY5Q0Y3QQorOjEwRTQ4MDAwNkQ4QTNEMDZGNTYzRUM0RjExRkNCQzBEQzBBRjRDQTc4NworOjEwRTQ5MDAwRjU4MkNDRTU0N0Y3RDNBRjk4OThCRjlGRDkwQzE2QTE2QQorOjEwRTRBMDAwQzlDRjMyQzU2OUVBMTc1OTkzMzRFNTNGODkxREFCMjlCNQorOjEwRTRCMDAwQkZDNjk2QTlDOTVGOTczRTU5NTNGRjdBRkIwQzRERkUyNAorOjEwRTRDMDAwQTc3OUQ3NjhFQUNGNzNDQ0QzRTQxN0NDNTlBMkE5QkZGOAorOjEwRTREMDAwQjBCODRDNTM3RUQzRTI5NTlBRjIyNUNFRDU5QUZDQ0RCNgorOjEwRTRFMDAwNTUzRkQ3RDRCRkE1NjFCREE2RENDMUFDN0EzQ0Y3M0E5NQorOjEwRTRGMDAwRjA5RTA1NzA3RjE5RUY1OTkwREVGNkQ2Njg4QjNGNUU2RgorOjEwRTUwMDAwRjM2N0U5MUEwNkQzRDM3RjJDRTgzNzYzOTJFMzQzQTQ3OQorOjEwRTUxMDAwOEYwNDFEQTc0MzQ4MUQyODQyNUMxMEU3NEEzQ0YzMkE5QworOjEwRTUyMDAwRkM5RURCMTk4Nzc0MTM1ODJGQjAzQzNGRTREODY1MUI2MQorOjEwRTUzMDAwRTBGMEE2ODkyMTM3RUI4MTNGRTQ0RjNBOTY5RDAyRjkzRQorOjEwRTU0MDAwMjcwRUNERTNGOUE5Qzc5RTRCODZGQzZGMjZERUM3RjNFNQorOjEwRTU1MDAwNTcxRkJCOENFNUEzOUU1Rjc0QjMxRUY4NEVGRTAyNDZBOAorOjEwRTU2MDAwMjJDNzczODdCRTVFRUE4Mjc1RTQ0RjRGREU2MkU3N0FBOAorOjEwRTU3MDAwOTI0MUZEMzRGQkY1MkMwMDA3RjQ2RjQ0Mzg2MEVBMDU0NgorOjEwRTU4MDAwRkFDNEY0MThEMDI3QTZBRjAwN0Q1NjE4MTg3QjBERTgwMgorOjEwRTU5MDAwMTNEMzEzNzBERkM0RUZBRkMzN0QxM0QzMzdFMUJFODk0QworOjEwRTVBMDAwRTkxRkUwQkU4OTY5MjdEQzM3MzE3REE3NjkzMUE1N0Y4NgorOjEwRTVCMDAwNkE3MjUyQkJGNzlCQUEyOEZEQTBBOTgxQkU3RkQ4RDQ1RQorOjEwRTVDMDAwNDhFOTVGOUE1Q0Y0REQzQzUxRUEyRkJDQTQ3RjkxNzY2OAorOjEwRTVEMDAwQTY3QUI0RUZBMTdFRUVCMEUxQkNCRjFENTZEQTA5QTU2NAorOjEwRTVFMDAwNURCMEI5ODE3NTg1RTAzRUVERDI0NzlDMzVGOUVDN0Q5MworOjEwRTVGMDAwNDNGMzU5M0QzQkVCMjc4NzZEOEQ3NTQ0NEQyNEJEQzZENAorOjEwRTYwMDAwNDgyQkQ5N0JDNEY3OTlDQTgyMDQzNEZEQ0Q5REUwMUMwOAorOjEwRTYxMDAwODFFNTBCQjNDQTM3ODQwM0ZGOThGRTZEODMwMUU5RTVGQQorOjEwRTYyMDAwM0RFMUE3MUFEOEZGODU1QzJFMEYxQjI2Mzk0NjREODQ4NQorOjEwRTYzMDAwQjRDMEM0RkRGMDBBNENEQ0NGQUU0MERGRDU4Q0ZDQThFMgorOjEwRTY0MDAwRjkyQjY2NDMzRjlBQTNBMTQ2RTI0RkNENzdFOUREQThCNworOjEwRTY1MDAwQTc1NEJFNjQ5NDlGMTZDNTI4REZGQzU1MjdGOUU1MTUxRAorOjEwRTY2MDAwNThFREIxNzRERTg4N0NCRkZEMUNGRkZDRkM2NUE0M0Q0OQorOjEwRTY3MDAwNUJGQUM5MTQ3RUQ5MzUwQkU1ODA2OTE2QTMyRDI4QzAzNQorOjEwRTY4MDAwRkU4RTc2RUJBM0ExRUZDQkY5MzAxQzRGREFDOTc3N0M3NQorOjEwRTY5MDAwQzVCQ0JBMDkzRTdCNzg4MUE5MzMwOUY1MDREM0Q2OUE2MworOjEwRTZBMDAwRUNGRUZFM0ZEMkVFQUQ3Q0Q5QTlFMjc5MjJGRDdDRTRGRQorOjEwRTZCMDAwMzg3MkJFQTE3QUU4MkZDQkU3Qzc1MzYwRjU2NEEyNUYzQQorOjEwRTZDMDAwNDM3MzlEODVGQThCODFFRkM2MkNBQUU3NTBBOTlEMjczRAorOjEwRTZEMDAwMTNGNUMwRDM2QTJENzZENDZGNEI3QjdCOEM1ODM3RDQxRgorOjEwRTZFMDAwQTM3NTE2N0VFOTI0N0Y4MzY5QzJERjAwRkIzMUYxNzJENgorOjEwRTZGMDAwMTdGNjMzMkRDQTFCQTdDN0Y1MzcxOEVEQTgwRjdENENBOQorOjEwRTcwMDAwODFGNjU5M0VGQjNGRDYwRkYxREJCRjM4NEZFQzM3RjVCMgorOjEwRTcxMDAwNkI5ODJGQ0FFRDBFMDdDMTc3ODFCQ0JGRDk0NDVFOUNCMAorOjEwRTcyMDAwQ0ZDQzM0OTNGNDU3QUFDODFGOUJFMDc0MjJERThCODNBRQorOjEwRTczMDAwQUM3RjBEQTE3RDlFOTI4MDdBOEU3OTQyNkVGRjBFN0ExQgorOjEwRTc0MDAwNTk4RTc0RjZERkE3MTcwN0M3Rjc0ODQ2RkFCNDQwQkFFMAorOjEwRTc1MDAwOTE3ODkxNzgxRThBOEUyNERFRkRGQ0I1MDhDRkZERkVFRgorOjEwRTc2MDAwNTdBMjlGNDBGQTFBOEFBRTI0M0QxNTk4MzhERTExQUZBMQorOjEwRTc3MDAwRTg0NzIzRTk0OEY5RDJCMzlERDY1MTZCQTI3MzRFRDIzNAorOjEwRTc4MDAwNTEyMDFEMENBNDIzNEU5N0NEM0YzMzUxN0YwM0U5Qzg4MAorOjEwRTc5MDAwODc3Rjg0QzdCRjRFNDc5RDJBOUVCQkZGMkNGRERDREFENgorOjEwRTdBMDAwQ0I2Njg3NDNEMTJGQUU3NjVFQzg0NTdGQTAyQkI2RDcwOAorOjEwRTdCMDAwMzA1RkNFNjZDQzQ2OTI5MkU1MkQ0Mzk0MDdEMjk3QUM1QgorOjEwRTdDMDAwRkYzNEQ2Q0YxRDU4REZGOTY1QUYyMURDOEYyRUE3ODkyNgorOjEwRTdEMDAwMzNGMEY1MjFGQTdGNDNGOEM1QkY2MTk2RkUxRTBFNEI1QworOjEwRTdFMDAwMjZEMEMxMkNDMTg3NkYyQkUyRjQzNTI3NDkyNTdCQzY4MworOjEwRTdGMDAwQUM4QzE1MjRERjMzMEI5NzhGNkRGMDNGRDJCNzA5RkIzQworOjEwRTgwMDAwRkFCNUEyRERFQzZGOEI1QjcwOUNEOTUxNUFGOUZCNUFCQgorOjEwRTgxMDAwMjE3N0NGMDlCMEI3NUY5QkYxMTM5MkMzQUYwRDkwQjNDRgorOjEwRTgyMDAwN0YzRjUxQzhEMTQ5MkM4OURGQUZCNzkwRkM1QjI4RjZGOAorOjEwRTgzMDAwNjNCQ0MwNzc4QTRENjVGOTAwRjcyMkU2RDRFMzIxRjA4NgorOjEwRTg0MDAwQ0E0NUEzMDNGQkZCMDk3MzUxRkUxQUU2QTZGNDNBRTY5OAorOjEwRTg1MDAwMjUzOUUwN0EzODMwMzBGRjUzRDg3QTk4M0YxRTcyNDMxQQorOjEwRTg2MDAwQzkyQUU4NkY1NkY2QUM1NEZDNUU2QkVBNEQzNEVBRDAyOAorOjEwRTg3MDAwM0JEMEY5MjFFRUU3N0FENUY5MzFDQTk5MTcxMjlDNjM5QQorOjEwRTg4MDAwRjA3RTdDQUNEMDQ2NzJEODMxNTMwQUM5ODVCODlGMEM1MworOjEwRTg5MDAwN0VGQUNBREZDMzM5OUEwQUU3REM3MTM4NjczMTdEMTUyMQorOjEwRThBMDAwQ0VEOTU0MzhFRjdFMDdFNzJDRTZBRjRENUZDRkIwREQxMQorOjEwRThCMDAwNkM5QkQ2QkY0N0I2QkZDRTNBOEJFOTg3MEQ3RDhFNUQ4OAorOjEwRThDMDAwMzdFMTg1OTFBOEM3N0EyMzYyNEMyMUUyRUQ4RDg4NDkxMgorOjEwRThEMDAwODVCOERFMzcyMjYyNzQzQzBEMzI1MjNBRkVGOUQ0QzE1QgorOjEwRThFMDAwRTQ1NjQ5QUZCRUYxNjZEMzc4ODFGMDk1RjAwQzg0QTM2RAorOjEwRThGMDAwODRFRkJGMDA0RkZEQTREQzgxRjBCQzgwNjczMEVBNEY5RAorOjEwRTkwMDAwNERFRjg2QzUyNkEzOUQ1MUM0RDM4NTcwM0U1OEY3RkNCNAorOjEwRTkxMDAwRjgxODVDNDdBRDg5QzM2NTVBRTM1NDRBMEIxQTI3MzM4QworOjEwRTkyMDAwN0QzNkQ5OTk1QzA4REZDRjcxMDlBODcwMEVEMEIzMzE1QworOjEwRTkzMDAwRkQ0Q0NBRkY0Q0QwNTY3QThDMzMxQUU3NzEzRUNCOUIwNAorOjEwRTk0MDAwMDYxMjE5RkI3NDVCNzMxOEZBNjc1RTc4NDZCNUUzQkQ2RgorOjEwRTk1MDAwQTY1NkI1NkRCMUEzOUVGQzBEOTVDNzA1N0Q3QjNDMTFGOAorOjEwRTk2MDAwRUQ5QjZDQzdFMEZFRDJCNTI2MDkzRjE3QzFCNUVENkEzNQorOjEwRTk3MDAwMDdFRDM3ODZENkQ5Njg5RjVDMzMzMjg4RkIxOTkzNzlDNworOjEwRTk4MDAwMjE2QjY4Mzk2NzYyMzBFNzMzMjM4MzM4N0Y5NEY4ODJEQworOjEwRTk5MDAwNzZGQ0RDODU3RTI2MDI1RjhCQkYyRjk4RUUzNTc5QTM0RgorOjEwRTlBMDAwMUNFMzcxM0RBQzkwNjlFRTA1NTI3RkQxMTdBNUQyRjlGOQorOjEwRTlCMDAwNTBDMEQyMUVDMkZCN0JFMTA5MDNERERGRkIwQTE5MkYyOQorOjEwRTlDMDAwOEZFNUY2Q0FCRTEzOTc1NURDRUY0NUExMEExQjk2RTQwNgorOjEwRTlEMDAwOEI5QjA5OEFENTMxOUI5RjNDNkRCNjA1MzM5QjFGREQxMAorOjEwRTlFMDAwODZBNDQ3NkFGMkExRjYxMTlBRkFFMTc5Qzk5QUYyMDg2NworOjEwRTlGMDAwQzc1NTlBRjI2MTczQjIzNEY5RTFDNTUzMzRGNTYzMTYyMQorOjEwRUEwMDAwQ0ZENEU0RTM5Q0Q3NkFFQUM3NTdDREQ3RTQyNTNGOEE0MQorOjEwRUExMDAwRTc5RjU4NDJDMzUyNERGQjUxOERDQjM0RjU5MzVDRDVFMworOjEwRUEyMDAwOUE3MjM1MzhFQzQ5OEEzQjc1MzkzQUQzQTM5MTVGRjEzNAorOjEwRUEzMDAwQkY5NENENkIzNEY1MUUwREUzNzEyMDczMkM5NTczNzE2QgorOjEwRUE0MDAwMUY4RTZFQkQ1RDNCMkZGNTREODVFMjNBNkQ5QzBGQkE3MgorOjEwRUE1MDAwRTA3Rjg4REZBMjU4MkQ1RjlDNjVENUVBMUJFMjFCRjQ5RQorOjEwRUE2MDAwOUE3Q0Y1MjRFMThGMzQ4MTREMjAzRUY4N0Q3ODc2NUVFNgorOjEwRUE3MDAwQTVDMTczMjAzQzAwRUY3NjJGRDY4NzczRDUwNUY5QTI4OAorOjEwRUE4MDAwREY5N0VCRjFEQzQ3QkI4MkZGRkNEMUFFRTBCRjVFQjRBOQorOjEwRUE5MDAwMkJGOEU3RDFBRUUwNUYxRkVEMEFGRUU1Njg1N0YwMkZENworOjEwRUFBMDAwQ0YzRUExQzU3MzZFQTcxNkNGOTMzRUQwRTI1OUQyREZGOQorOjEwRUFCMDAwNTBGODk4RENBNUE1ODM0MDdDNENGRDJDODAyRTA0MUVDQworOjEwRUFDMDAwMTZDM0ZGMDZDMzAzNUQxMTgwRkU2NzM1MzBEMjlCN0QwMAorOjEwRUFEMDAwMUY1RTFFOUIyNENFMjc4MTE3QzAwM0M1RjVGNThEMEM0NAorOjEwRUFFMDAwMjUzQzNDMjZFNjVGRTAxRDQ3NzFCMTQ1QTgzNzRCRjI1NworOjEwRUFGMDAwQURFNzMxNzFFRUZFNzY5ODczRjcyNEQ4REZCRkIzNjVDQQorOjEwRUIwMDAwQzUyMjNGOUFDRUI4NUQ3Mzc2QURDRUVFODVFRTlGMEFGNAorOjEwRUIxMDAwQzBGRjg0QjFDRTdENTg3RkYxQjBDQjg5NDZBNDg3NUUxQgorOjEwRUIyMDAwRTcxOEJDNEY3RTI4RjQyNDgxN0U5QzJFMTAwNzI4MEUwNworOjEwRUIzMDAwRTE3Njk1RTI2RjRFRUE1QTE1RTRDQkRFMDRFNzIxRTQ3NAorOjEwRUI0MDAwMUJCNzY2MzQxMDlEQzZCMkUyRkQ5NTMwQkZEMkZGMENGNAorOjEwRUI1MDAwMjIzQjRFRTkyODFFQUZDQjMyQkEyOENFNDFGMkJCRDJCRgorOjEwRUI2MDAwNzhFRTQ3RjRGMjI0NjExN0I2NzM3RkEyQTM5M0I4M0MwMgorOjEwRUI3MDAwMUI2QUI3OTJERjcxNTkwNjhGRTM4MDZCNTc2MkU5NzhBMQorOjEwRUI4MDAwODRDRjlCRTYzMTA4OUYzNjZFMzdFOUMyNzhFMTI4NUY3MworOjEwRUI5MDAwQkMzMENBOUIyOERGMjUwOEY5QUFGOUNGMjYxM0FFNjMzQgorOjEwRUJBMDAwNEMzQkQzOUM5MzYzREQyNjhEREZFQkI4REQ1NjREN0U2OQorOjEwRUJCMDAwQkMyNzU2NTNGRkVBQzMzNjRENzlBNjM3NUQ1MzlFN0Q3OQorOjEwRUJDMDAwQzJBRUM5RTc3NkU2NjlFQTRGRkFDMEExQzk0RkVFOUEyQworOjEwRUJEMDAwQTNBOTNGRjVCMzYyNEQzRTlFRjUzRThDRjAxREE1RjAxNgorOjEwRUJFMDAwRkJGRTM3OTNCOEZGMTRFQzU1QjJFMzk1NkU4QUUwNzFFMworOjEwRUJGMDAwQTA0MjBGMjBFNTY5RTkwRkVEMTRGNDFEMjhBNzhGMzIxQworOjEwRUMwMDAwNzIzOUI1Mzk4RUYxN0I5ODQ5RENCNzk4NTY1RTc3MEEzMAorOjEwRUMxMDAwN0Y2NjI5QTczMjk3RDY5RjU5RkEzMUY3Q0JGNTQyNkUxNgorOjEwRUMyMDAwOTdGMkIxOUYxRkIzQzNERjhGQjk1NEM0NkYwNzlFN0ZBNAorOjEwRUMzMDAwODYzQ0FFMUYwOTlDRkYyODIzNUY2RkYzQ0Y4RDE0MzdFRQorOjEwRUM0MDAwMjJFNzE1MzgxRjY3MTZBN0RCOURBNkMxRTM3Nzg2RTU4NworOjEwRUM1MDAwNzEzREMxRjhDQ0UyOTAzQzQ4MUYzN0Q4RERBNDQ3MTk3QworOjEwRUM2MDAwMzA5RUJEQ0I4NUY3Q0E1RjFBRUQ3N0RBQkU3RkJDRDI4NgorOjEwRUM3MDAwQUJGOTdBNEE3NEJBNUJFNzY1OTBCRkQ4RTI2N0ZEQzYyNAorOjEwRUM4MDAwNEYxMUUzMDY0RDUxMDY1RDVGNjkzOEY3RTc2MkUxNDZEMworOjEwRUM5MDAwMUJEMkVGRDBFMzcxNzhDNjFBNTkwQkM1MTkwOUJGRkYxMworOjEwRUNBMDAwNUJCNjc4RUUxRDAzNDUyNUM2NTYwMzI5MkY5OERCODBGOQorOjEwRUNCMDAwRjQzMDc3MjZDODUzOTk4QzFEREFGRkVDMjMxNjkwNjc0MQorOjEwRUNDMDAwMUU2RkQ0OTM5RUU3QUFDMzMxMjVBRTU0NUYxQ0M3Mjg5QworOjEwRUNEMDAwQjg2RjIwN0RBMENDODJGNzk0NDcyNzczN0ZFNUVCRjJENQorOjEwRUNFMDAwRjhGQThBRDQ2RkZCRkRFRkM5N0VDMTk4MzgyNzE4Rjk2RQorOjEwRUNGMDAwQzMwQzQyNkY0NDg3NzIxRDNGOTYzRkJFQTREQjQwMzg3MQorOjEwRUQwMDAwQzlGQjI1MTNGRThFQTk2MjVFMTI3RTcyM0Y0OEY4QzlDOAorOjEwRUQxMDAwNzgwOERCNkE0M0YxOTMxNjhBQUI5ODgzN0U2NDEyN0Y4RQorOjEwRUQyMDAwQkY5RENDRjlEMTJGMDUzQ0IwMUVGMkEzQTFFQTE1QTlENQorOjEwRUQzMDAwMTlFMUE4MEZFRjYzQjY3MEVCNzdFODdCN0ZDNDM4MDU2NQorOjEwRUQ0MDAwODJGRjUwRjE1NTQzRjE4NzAxN0M2MTg4NzhBQkExRThERgorOjEwRUQ1MDAwOTNGRUZFODlCODJCM0ZGRUMwRkQ3QTA0M0VEQ0E5M0E0MworOjEwRUQ2MDAwQjJBMzZGMEFENUVFRTNBNzA0N0Y5ODI3RjYxMzlDRTNCRQorOjEwRUQ3MDAwOTY0QzJEOUY2MEE4QkY2RkRFQTAwQTNFQzFDRjZGOTQ1NgorOjEwRUQ4MDAwNkJGMEZCRjIwRDA2M0E0RjE5MkI3RTEwRTM4ODNFNjlCQgorOjEwRUQ5MDAwMzM5MDdGNkI4MUMzMzZEQkNFRURGMzI0REY5MEREMEI0OAorOjEwRURBMDAwQTY1NkU2RDI5RURCMjA0NzNDODlGNzg5RTlDQ0JFMTEwNgorOjEwRURCMDAwRUQxOUU1OUJCNUU1MkIyQ0IzM0Y0N0I5NjE3OUMwQkQ5MworOjEwRURDMDAwNzQ4NUI4QUZBRTA4Qjg5NzZFQ0IxM0U3QjE5REQ5NDkzQgorOjEwRUREMDAwMUUxMzc2RkUyQTUxQTc5RjhFREMyOUUxNDJFRjQyRkJFQgorOjEwRURFMDAwMTM1MkYyMEI5MzcwQjFBMUJEMjZEQjk3MDdGODA1QTc2QworOjEwRURGMDAwRTMzOUREQTIxRkQ0NUZBRjFGN0U0M0Y4MjM5QzQ3N0YxQQorOjEwRUUwMDAwMDQxQkVFRjczRThBQjdFQTNCNjBFNjc2NEE2OTBGMTJDQQorOjEwRUUxMDAwRjVDRkJCMkU1MzM5RDZDN0RFMkU2NDc2NEU0MDc5QTc4OAorOjEwRUUyMDAwREY3RTE0NjA4N0VBQjNFOEMyRjJCMEJGQkQwNkVBNEZFNgorOjEwRUUzMDAwRkE1QjU0RkZDRDNEQzFFQTY3NEY3Njc2QTkxQUZGOTY3QgorOjEwRUU0MDAwQzBENEI5RkUyMEY5NUY2QzhBNzBCRThBN0NGQzlDREU1RgorOjEwRUU1MDAwNkU0MkZDREQ2NTM5MTY4RDcxRjI3Mzg1REUyNjcwQkU1QgorOjEwRUU2MDAwRkRGMjZEQkVDMkVEQjAyRTFFMzdEQjM3NDcyMTNGMDBFRAorOjEwRUU3MDAwRTA4MzBDRjc4REY0MUI5OEM3QkM1MTk4NEE3QjhDNzNDOAorOjEwRUU4MDAwRjM2NDgyQjNCNEM3OTQ3OTI3RDMzQzE3MzZBRjMwMDQwOAorOjEwRUU5MDAwNDM5NUFFODdENzE1MDVEQjdDNzY5QUFFMDRFRUY3MzM0MworOjEwRUVBMDAwOTRCRDY2QzE5NTRDRUFFRkM2MkI1M0E5OUYzMzc5NDlBRgorOjEwRUVCMDAwNUNFRTZBQjk3NzM1RDJEMTU1QkI5OTAxRDdEOTE1RTA0NworOjEwRUVDMDAwRjcyRUQzMUIyN0YzRkRCMDFBNjMzMTcyRkRGQzg5RDZGMAorOjEwRUVEMDAwMkI0NEU3NkIxNDI2RkQ4Qjg4NEZDQkZDRTU1NjkxMkYxNgorOjEwRUVFMDAwRTJGOURCMzZGMDdDOTc4MUJGMzNCMzRCRTgxQjcwOURCMgorOjEwRUVGMDAwOThFMjdBRjA1RUJDNTdFODIzNzAxRDk4RTIzQUYwM0I0NgorOjEwRUYwMDAwRjIyNUNDMjM1RkMyM0NGMjI1Q0MyMzVGQzIxNEY5MTI1OAorOjEwRUYxMDAwN0U1RkM2OEExMzMzNTU2RTU3MkFGNERCMzc2ODU3MkE0QgorOjEwRUYyMDAwRjQ5MzdCRDBBRUU0OUY0N0JCOTI3RjdEQjQyQkY5OTdERgorOjEwRUYzMDAwQTM1REM5QkYxQ0VENEFGRTc5QjQyQkY5RDc0N0JCOTIzQworOjEwRUY0MDAwN0Y5RUU1NURFM0NCMjMxRjczQ0NEM0U0MTc4MDlDNUZFQQorOjEwRUY1MDAwRThCNzZGRDFBRUU0REYzRkRBOTUzNEZEMzk1NzZCREFBRAorOjEwRUY2MDAwREZDQzFBMzVFREQxQUVFNDVGRkZENjQ2NDU2Mzc3QkEwNAorOjEwRUY3MDAwNTVCQzA3NTBERTNFOENFODYzRUY4NEUyQTRDOTgwREYxNQorOjEwRUY4MDAwOEY0M0ZFRkUzMzAzREUzN0Q0OEU5NTQ4Qjc2QkVBODI5QgorOjEwRUY5MDAwRUQxQ0NGQUQ3MzM4REU3NThDRTNCOTc3MDlFMTc5OUQ0RgorOjEwRUZBMDAwOTFFNzhCQjhGRkYxNjBGNjlCNDIwM0I3REY2MDhBRjYwQQorOjEwRUZCMDAwMUI0Q0QxN0U4MzI5REE2RjBBNDc3M0ZCMERBNjY4QkYwRAorOjEwRUZDMDAwQzFFRjY4QkZDMTE0RUQzNzk4QTJGRDA2NTNCNERGNjBFRQorOjEwRUZEMDAwOEFGNjFCNENEMTdFODNFREQwN0U4MzI5REE2RkYwM0IxRAorOjEwRUZFMDAwREE2RjMwNDVGQjBEN0UzRjg5NzYyNEJGNzczMzUwNEU3NAorOjEwRUZGMDAwNEZENURDMUY4MTBFMzVGNzQ3QUIyNjhGNzJCQTdGN0Q2OAorOjEwRjAwMDAwOTREM0ZEQ0I1MTRFRjcyRjQ3MzlERDNGOEY3MkJBN0YzNgorOjEwRjAxMDAwN0Q5NEQzRkRGM0NCRjM2Q0I0QkY1MDVFRjc2Rjg3RjJGMgorOjEwRjAyMDAwQkE3RjdFN0NBQkVCNTVENDFENURCRkVERTIyQjk4NzZBRAorOjEwRjAzMDAwODUyQThGMkJDMDBBOTY0RERFNTc4Mjc2QjYyRUIzOTI2NAorOjEwRjA0MDAwMTgwMTlDRDJCMEZFRDk5MjQyRDhCMzRFRTFDNzM3ODFBNQorOjEwRjA1MDAwRjVFQTEwREY2NDY3MDdCQzM5QkQ4Q0ZDOEVDNzdGMTNFRgorOjEwRjA2MDAwNDdFNUQyQUU0QjdGODBGN0NDMDM4Q0U0RkU0MzIyNUVCMworOjEwRjA3MDAwNTNCNkI3MzNBQjhBQTlBQ0VGQ0IwRjVFMkY3MDdDNTk3OAorOjEwRjA4MDAwOEZGOEE1REYzQ0UwNjI5ODg5N0UyNjk5RUIyQzU5RTg0MQorOjEwRjA5MDAwMkZCRjRCQTc3MDdGRDMzQkI5QkY2RjIwNUQzRDI4RTRFNgorOjEwRjBBMDAwQTA1REJBRkRDNzgyRDE3RkE4NENCMTYzMUM0MzlBOUU3NAorOjEwRjBCMDAwOUQzMDY0MjE5QzFBQjI1MDNFQjg2MzcyODRGMDA3NkU5MgorOjEwRjBDMDAwOTg4MkZFNDc3MkRFNTIwRjA4N0M4MkUyRDdGMjdCOTk2QgorOjEwRjBEMDAwQjEwMkM2OTlGNjI1MzMyRTQ3RkU2RUU0NzIwMUI2QzMxRgorOjEwRjBFMDAwRkJFMjM4OTdFMjc4RDI4RkJFMzc0RkU2RTc5QkQzQjU4NQorOjEwRjBGMDAwN0E0QTA1N0MxRkI3Qjc2MTBBQzZDNUNEMERFNkVEN0UxRAorOjEwRjEwMDAwRjM0NDE4QzFGMTg2MTZFNTQ5OEMzRkNDREZDQjFDMThCRgorOjEwRjExMDAwRUZCQTU1RjBEMzcxN0JBREM2MEExQUQ3NEFGMTc0QjI3MworOjEwRjEyMDAwREZCMjZEODkxNEZGNTdDNkJBMEEzMUJFODJFNTI4MENEQQorOjEwRjEzMDAwRURBMzEyNkVCMEJFNTc3MDdENjlCMDU1MEMyNDdGRjJGRQorOjEwRjE0MDAwQjg5QzYwMTE5NzIzRTM3MTgyMjI4QTE3RTZFNUZBRTIwMAorOjEwRjE1MDAwNzJBNkU1NDQxNEExNUYxQ0VCNjA3NjBDMDNCRTNFQTdDQgorOjEwRjE2MDAwNkNDMzcwRThERkU5NzZEOEQxQUY2OERBOTcwREFGNTI5QgorOjEwRjE3MDAwN0U0NzMxRTU4OTBDMjZEMjM4NzRBRThENzEyOUY0QkVGNAorOjEwRjE4MDAwQzYwREFFRURCQTI4MUJDNkVCQUUzNzQ0NjNGREJEQ0M1MQorOjEwRjE5MDAwOEVFMjBFMUMzNTE0NzcyQUU3OTdDMTNBNzU2NjA1RjFBMQorOjEwRjFBMDAwQ0U4RTBGRjNBMzIzRTAwMDM3MjJERTMzRUQwNjdBN0YwNQorOjEwRjFCMDAwNjM5RURFNkE0MEJFMTE3ODhFMEZGNDVCMEM5MDEzMDJFMgorOjEwRjFDMDAwRkM0QjlBRDc3RDkwQTgyNkEzN0Y4OUNFRUU0NUJFNzVDRAorOjEwRjFEMDAwMzA4NEU0MDUyOUVGOTQwOTdGQjNDQjJEQUYwRUJGMDkyRQorOjEwRjFFMDAwQ0FDQkY2NzNGOUMwRDlBRTEwRkY5M0ZFMjY3NTI5RUU4RgorOjEwRjFGMDAwNDQxRENBMEIyM0I2NEY4ODU0RjlGOThGN0NGMTlDRUI2MAorOjEwRjIwMDAwQjk0NUI4NDVDQjM2QkM0QTcxMTE2NTFCNzJDMzc5NUNGMAorOjEwRjIxMDAwMTRCNzQzNTQwODM4NTUwOEJGMjI5NjYxOEQ0NjM5RjMxOAorOjEwRjIyMDAwMTRGMDFEQzcxOEYyNEIwQ0E3QjhDMjU2MkVDRjQ5QkQxQgorOjEwRjIzMDAwOEU5NDA3RTVGQjMxNjU2RjY1QkY4Njc4MkY3QjRDQkNFQworOjEwRjI0MDAwQ0JCMkI5OENFMkFGMDJGRDdDNkE4NEJDQjdCMkM1NDBEOAorOjEwRjI1MDAwRkU0MzJCMDNFNEMxMUFFMTJGNTQxMzIwMEY5RTlDMkM3NAorOjEwRjI2MDAwRjQ0MDUyMUUxNEY3MTdFOUNGNUJGNkQ2RjE4NTI0QUZCMAorOjEwRjI3MDAwMzQxOEM4MkU1N0IyOUVDQjJGNkMzRjczNjMzQzQzQzlFMgorOjEwRjI4MDAwRkE1OTNBN0MzN0E0RTRBMEMzQUUwQzQyMjc2RjBCMzk3RAorOjEwRjI5MDAwNjY2RTk3OTlFMDNBRkY0QTNDQTU4QkFFQzQ1MTdBRDM4QgorOjEwRjJBMDAwMTVFRTQ3ODlCMTJGNDgwNzVEMkYzMDkyQTNERjE1NzIwNQorOjEwRjJCMDAwQ0I0MkY0QUJDNDc4NDQ1NzkwRjA5RjY0MjQzNzY1MzI1NgorOjEwRjJDMDAwNkIxMUYyOEZBQjFDQ0E3MTE0RkJFNjFBOUMxQkQwNkYzQQorOjEwRjJEMDAwNzNFRTc2NDZGMTQ3RDdBMzdDMDNGRDJGNDY3OTA3RjVGOQorOjEwRjJFMDAwRUUzOTQ5NDUxNDg3MzE0N0ExNzg5NkVCNzM1NjBCRkFFRQorOjEwRjJGMDAwMDY3QTY3NDhFRjJFNDFCRkM1OTRFRjNGMTcwNDlEM0I0OAorOjEwRjMwMDAwNURERDdBODRGQkY1MkVDNTg4RUZGMDM5QzUzRDU2RDIxOAorOjEwRjMxMDAwNzEyMEJEOTc4NjA4RkQ5Mzg1RUI5N0ZBRjU0RjM4NTkxNAorOjEwRjMyMDAwN0FENEM2NzQwQkZBQjc5NkEyNkU3MDA0RTM4ODA3OTg3NQorOjEwRjMzMDAwODc2NkYwRjJEODI5QTY1QjVBRjA1MkYzREZENDRCOTREQgorOjEwRjM0MDAwRTg3NDNDREUwOUU0MkRFNEFCQjdBQ0NEMzQyRUYzRTMzNgorOjEwRjM1MDAwMkY5RjRDOUQzOTY5NkFBRTBGRUZDQjAyRTJGNEQ2RENFOQorOjEwRjM2MDAwMzUzQUU2QkJFMjQ1Q0IwMUNFQjg0RjRBQzNCQjdFMDY3OQorOjEwRjM3MDAwMTRDQUYyQTYzMDQ3MjE4ODlFNEI5ODVDMjdGM0EyNUZGRgorOjEwRjM4MDAwRTA1MjkxNUYzRTI1RjNBRjlCMzMwODNFOTRDRjc5MzEzNQorOjEwRjM5MDAwRkExNjE3RjE1NUNFQjc2RTQ2QkVBNTIyQkY3MjY2NEQ1RQorOjEwRjNBMDAwMjE3RUQ1MzUxQkYxMTE5MkQxMkJERTIxRTBGMTBFODFBQQorOjEwRjNCMDAwN0E4OEU1NTMzODFFMDJGNTExRTUxOTlDOUYzM0JEMkQ1RgorOjEwRjNDMDAwRjE2NjhBMEJCNjkxM0U0RkNFRkY5NDQxMUJBNzI5RDMxRAorOjEwRjNEMDAwNUJBNjcwQkVGQzYzQzUzN0ZDQUYxNEU3MERCOEJFMDc3MworOjEwRjNFMDAwNzUzQzZFN0U4NERBQ0E4NDVFODhGNkJGRTQxRjRDQkMyRQorOjEwRjNGMDAwMjNFMUMzM0ZDODY5NjQ0NzU3QUNGRUY4Nzc2RTU2Nzg3RgorOjEwRjQwMDAwOUNGQTEwRkExQjk2REVGQkYwNEVENERGMzUxOTE5QzZCNAorOjEwRjQxMDAwQjkzRTkxQzZFOUU4ODlEQjhEMjQ4Nzk3MTgzQjVGQzUyMworOjEwRjQyMDAwNzdCMjI0MUMzRjZBRkMwRjAzRTlGRjk5NzczNEJFRkZEMworOjEwRjQzMDAwQjVCNEMxNkM0N0ZFRkNDOUQ0RTI4QTI5QzMxMTFGNzY1QQorOjEwRjQ0MDAwQzJDNzI0RDg2NkQ4RkZDOTg0RTIxNUY4QkQ2RUNCRDFGNworOjEwRjQ1MDAwQzczMTZFN0Y1NTQ3MTJDNTkxOTYxRENFREM4OEVGODk2NgorOjEwRjQ2MDAwN0MzMkQ1NTk4QkVCMkRCMzU4OEQ3ODhFRDdCNzQ0RDBERAorOjEwRjQ3MDAwQjk1NjFBMjNFMjNBNTkyRkQ5QTkyNEZDNUJBNkYwRjMxNgorOjEwRjQ4MDAwNzQ0QTNFRUZCRjQ3REM0NzkwNjFDRUQzRDQxMzdFREM5NQorOjEwRjQ5MDAwMDFGQjQ0RUEwNTAzRjUwQjgxRUYzODBDQjU3RkE0MUU5MAorOjEwRjRBMDAwMDFGNTA2NDYzRkJEQTJENDRCMThEMjRGMkRDMTczQjQwRgorOjEwRjRCMDAwQzRBODhEM0Y5NEU5NDFBOTc3MTNGN0MxRTVGREU3NTg0QQorOjEwRjRDMDAwQzZFQzE4OTQ5QkI3MkE1NjNDQzcyQTJDQjY5QjI2NDNGOQorOjEwRjREMDAwQkVFMjg0MDEzRDMwRDlEQzQ4MUI3RkJGRTMyRUZFN0VCNworOjEwRjRFMDAwQzczMkQ4QUZDODZGNEE4NDNGNTY0NUZCNjREQTZGMTUwMAorOjEwRjRGMDAwNkU0OEIzODdERTk3Mzc2RjNEOUVGMDAyRDI4RkQ3NDFCQgorOjEwRjUwMDAwNzFGOTE1NTY4NzMxRDI2RkRGOTdCNzJBOUFCODdFOTk2RAorOjEwRjUxMDAwREYzOTQ1QTU3OTk3ODA5ODhFRjBCQjY1NkQ5MjExREYzNAorOjEwRjUyMDAwRDAyOTAxRjEwMkZERkIwRTRFQjE2OUUyQUFBMTFFRjkzQworOjEwRjUzMDAwMzVDQzRENjZBRkYxRjc5MzYwREU0OTdDQkMyQ0JGRkU0NQorOjEwRjU0MDAwOTdCNTZBREYyNzgwRkEyNDE3RkQ3NjRBMjhFMUFGQ0MwOQorOjEwRjU1MDAwMEFFQjRFQzJENDRBRjMwNDM4MTA5QzdBRUY4NUZFNkM1NQorOjEwRjU2MDAwMzQwRUUxQTNEQ0VCMzZFMEJEQkIwNEZEMjkyMEJGRDRBMworOjEwRjU3MDAwRUEzNkUwMzhDQjVBRjg3QjIxQ0UyRDdDMUNFN0U2MDgzMgorOjEwRjU4MDAwRTM3ODk0OUJGNDU2NjMwMkMyMEYyRkNCNTEzNDNGRTJEMQorOjEwRjU5MDAwODMxNTAwMTc4Q0I3OTI3MTk3ODFGMDI5MTNGM0FENjgyQQorOjEwRjVBMDAwOEREMENBNjNBRDVCMEQ4ODhGMjU0M0JDNTdEMDJERTg0NQorOjEwRjVCMDAwNzY1OUNCMEM4QTM3QUZEMDNCMjg5RUMxMjlFMEZCQzlENgorOjEwRjVDMDAwNkFGM0RENjgxNzU4RDJGNjkwMjEwOUYyN0YxNEY0REI1NAorOjEwRjVEMDAwMkRGNkREREM2NEVGNjg3QTE3NjhCNUQ5OEVGMzVDNjJDRQorOjEwRjVFMDAwNkRBNUY1RjVDM0Y3MDE4MDg3ODJFRkNGMTQxMzdDODFGOQorOjEwRjVGMDAwMkU1Q0U4OUY1N0QxQTZDNUE3NkYzRTFDQkUxNTZENjU1MgorOjEwRjYwMDAwQjRERjJBRjU0RUEzRDU3RjFFRUQ0NzQ3QTMxRkNBMTJDQworOjEwRjYxMDAwRDhERkY4REUxMUIzM0EyOUJFRTlFQzAzMzcyNUQyM0EzOAorOjEwRjYyMDAwNjE5RUU0MDc2NUI3Q0RDNjc3N0U4MDRFODg4RTI1QkQ4NgorOjEwRjYzMDAwQzhCODZDMzlERTM3NTM3ODVDRTYzN0RGQkIyRjFEMjQ0MgorOjEwRjY0MDAwRDczNDAzN0U1MURGM0RENEJFMzQ2MjYwMTc4QzZCQUM3RgorOjEwRjY1MDAwRTBFRkFGMDVFRTUzQjkzRkZCRUQwNzYyOUZDQUZERkIzQworOjEwRjY2MDAwQjhBMUQ4MUJBQkY4RjgwQzlDQjcwRENGMEUwMkE3NDk3OAorOjEwRjY3MDAwNTNGOTdDOTcwQUJDMDI1QzVGRjE4RkUzQjI0REU1NzhFOQorOjEwRjY4MDAwMkQ0OUQ2RUU3N0VDMEZGQjBEOTNFNTMzQkRBMzMxRUU5QworOjEwRjY5MDAwNTJENjk3RTM5NjQ0RjI3NjQ4Rjc0ODZGNjE2MjNDQUNFNQorOjEwRjZBMDAwQkY4NkVBNkJFMzUxQ0FGQkY5QzVERTBERDFDODJGRjY2MAorOjEwRjZCMDAwMkIyNEY3QUVCOUY3NzhDMkJGQTMzQ0JCOEZDQkIzRTcxRgorOjEwRjZDMDAwNkE3N0Q2QzdBMURDQTg3NzI3RkFCRjhCNTVFMUU1RkM5RQorOjEwRjZEMDAwNjEzOUM4M0ZDODJGMkFDNTM5QkQyRkNCOTkzMEQ1Q0Y0NgorOjEwRjZFMDAwN0ZBMkUyRkU3RDY5NEVDRTVGQkNDODVGRkVCMkVGQTU5MQorOjEwRjZGMDAwRjdBNkQ4N0NFN0E3OUNGRkIyQ0Q3RjM0OTQ1OUZDRTFGNAorOjEwRjcwMDAwQzVENzc3Nzc3QTFGQzVEOTk1NUI4QzM2RjQ1RjJFNkY5NgorOjEwRjcxMDAwMjkyMzdFQ0I2MkUxNUVBMUY4RjAxRDQ4MDc2NTJEMEEyMgorOjEwRjcyMDAwQkQyRjU2REUzOEQxQURGRTVGRTRDQkU1NUJFNkQxOUI2NQorOjEwRjczMDAwNDgxMjRGRjJCRDEzNzk5RUNBRjkzQkM0RkM5NzBBM0FBRQorOjEwRjc0MDAwOUUzNTk1RUZCRkE1NTU0OUM2NEFEQUY3NDlDNjcyQTQ1QQorOjEwRjc1MDAwN0Y1MUJFQTQ0MkZCQkQxRjRGRkQ3NkVDOEM4REI4M0ZBMAorOjEwRjc2MDAwMzA2RTg4RUUyNzVCMEM1Q0NGQjczNzk0RTRENTczNkJCMworOjEwRjc3MDAwOUVGRkMzMjJBOEY3QzU4M0RCMTM1MTNFOTFGMzU4MjFBNgorOjEwRjc4MDAwRjQ3OUNCODU1RUFFNTJDOEFEODBBN0Y5NTNGREY4RUM5NQorOjEwRjc5MDAwOEEyNzM4OUVDQTlGNzlFQkFGRjgyRTU3NDlCMkUwNjdBNworOjEwRjdBMDAwRjdGMjc4RkU2NTlFRkQ4NEI3MjU5QkI3MUE5MjEwNUYyRAorOjEwRjdCMDAwRjg0OEFENUZGQkYyMDZCOEU4MDIzQzk3NkVERTZFNDA5QgorOjEwRjdDMDAwM0VCMDRDQUUzNzgwREU0Qjg0QkZBRjg0MkI5RTNCOEE2RAorOjEwRjdEMDAwOUZERDQyRDY0N0ZFQjcxRkM2NTlCQkRBMUM4NkZBNjlDMQorOjEwRjdFMDAwMzlDRTNENTNCOURDNTRERTEwMTE4OUUzOTUzNzk0RkREMQorOjEwRjdGMDAwMEFFRjFEOTJERjA3RUVCQkQzNjZCRTFGOTY0MTdGQjhBRQorOjEwRjgwMDAwMkY0RkNGQjA1MzVDMzNEQUI1MDYzQjU3RUY5Q0NBQ0ZDRQorOjEwRjgxMDAwRDU0NzBERkNGREM2RjgxMENGMUU4NDQzRkNBQTYwM0IwMworOjEwRjgyMDAwRjI4N0Q0RDQyRUIyMUIyMzNERTNCQzhEM0FGRURFNjNCNworOjEwRjgzMDAwNkE2REQ3MjU5QzA3ODhENEU0OUY4MjI5QkUzMzg1MjIzMAorOjEwRjg0MDAwNzYzNEU0OUZENEYxRjhBQjY0OTVBN0JCMDU3Q0EwRENDQgorOjEwRjg1MDAwOEJFNTJDQUE4QkRFOURFQjdGMzcyOTgwNUU4RDZDQzdGNAorOjEwRjg2MDAwNjY3Q0VGQzYxOEM1RUNDRDM2MUY3RENBN0UyNDdENEE2NgorOjEwRjg3MDAwRkExRDZBN0RFRTFGQjhCRUQzNDk0MjFGOTE2RTRGQzQ3OAorOjEwRjg4MDAwMzg5NUQyRkJDNkQ4NTEzRkYzN0RFQjM0OEFGNzA3RkI5RQorOjEwRjg5MDAwRDcwQkM0OUExNzM5Qzg3QTUzRjlCRDY1RThGNUI2MTU4MAorOjEwRjhBMDAwNDUwRkIyREVDMDc1Q0E3RDIyN0REQUZCRUQwQkFEREMwMworOjEwRjhCMDAwQkU3MDVBODFGMzBCREE5RDVFNkQyNkZGMkZCOTJFQTkxQgorOjEwRjhDMDAwRkZGRUExNzEwOEFGNEM4RDE0N0E5REFFNTA5NDIzNEI2RQorOjEwRjhEMDAwODJDNUZFRjdGMjNDN0U5RkU3Rjc1RDlFRkJGMkJEMzZFOAorOjEwRjhFMDAwQzk5RkNGMzQ4ODczOTE3NUREOEJGQjk5MzVBNkQwRkIwQQorOjEwRjhGMDAwMjQyNzVCNEY4N0UyN0IyOUE3NjdGMEY5Qzk3NjZCMEQ1OAorOjEwRjkwMDAwM0NDRTk4ODUxQTZERjhGRTIxRENBRjRFMzZBMkREQTdGRAorOjEwRjkxMDAwMjU4NkVFOTFCNzM0QTYxMDVGQjhDNTE1QzFGNTBGNDIyNAorOjEwRjkyMDAwQkVBRjE0N0MzMDY0NkREOTQ2N0NFNzdCNzk3QjkyNTUwMQorOjEwRjkzMDAwODE3MTk2NUJFQzY3REJBOUZEMzgzQkNBODMyMTZERjNDRgorOjEwRjk0MDAwOENDOTI0RjdGMjdCODBCNDEzQUQ1NTU4MzFDNThEMjE5NQorOjEwRjk1MDAwOUZDNEZEQTUzQjlBOEFFN0NFOEE3NjdFMEY5OEFCNjM1QgorOjEwRjk2MDAwOUJEMTRFMzhBQUI5Nzg3NjFDRjI4OTg3MTU4QTMzNjdGRAorOjEwRjk3MDAwREJCNEVGNThBNTY3MTc3RjRDRjdCRjgwNzdFMEQ2MUE0NgorOjEwRjk4MDAwM0M4RTE4RTRFMzIwNkZBMEJFNjlCOUE1OThFNEY2NTI1NgorOjEwRjk5MDAwNDEyNzI3REJCQUU5M0Q3QTA5RDcwMUYxM0Y0NjFFMDcyNworOjEwRjlBMDAwREMxQkFBMjMzRERDMEY4RDAzQUExMDc2MjU0OTM3RDIzNAorOjEwRjlCMDAwMkVGNTA4RkU2NzMyQzI0OUE1NzNBRDQ4MkRBMUY3OTQxNAorOjEwRjlDMDAwMzZCNkNEQTJCNDYyNkJEMTgzQUVGMTE4N0Y1QzFDM0QxQworOjEwRjlEMDAwODVFNjZEMjAzRDU5NDVERDJDMUVBRkZCNjQ1MDA0REVFRAorOjEwRjlFMDAwNkYxMjBEQUU0NDdGQjlCNDYyRkIyNjhBRkZGOTZDQkI3RgorOjEwRjlGMDAwOTlFMjdGMEFBREYzMEEyM0EyRThCRDYzOEFBRjkzRjVDQgorOjEwRkEwMDAwQzJGM0Y5Nzk1MTVEMzc0QjEzQkZCMzFDRkFDNDc3MzY5MworOjEwRkExMDAwQkZGMjg0OTAxRjlBOENDQkE5OEQ3MTA2RTdFN0YyRjhBQworOjEwRkEyMDAwOUNDOTM2MUU5NzEzNDdGNTZEODNFQUM1NjU3QUI2ODk3QQorOjEwRkEzMDAwQzc3OUY4QzUxQkREQjAwNERBRDdENjNEMTc4NkZERDRFQgorOjEwRkE0MDAwM0NGMEVFNDRBQjhFRjQ1MEQxRjlDM0ZERTI4RERBNzk4RgorOjEwRkE1MDAwQkM1MThDQjgyRkNEOEQyQzVFQjQwNEUxRkY3Qjk1RTBCQQorOjEwRkE2MDAwM0ZENDc4NTU4NzE1OEQxREVGMTY3NzM4QzlBRDRFMkZDOQorOjEwRkE3MDAwMzNBMjFERDk2OTY1MjQxNzdGQTZCMjQ2OTQwM0E0RkM1RQorOjEwRkE4MDAwMjJCRjVGOTVDRkY5RDU2N0UxQUQ4OTQ4MUYyQjc3M0Q0MAorOjEwRkE5MDAwOTQ4OEU3Q0JFN0ExM0M1RkIyRUJBNkQ3OTE1RjM5NzdCQgorOjEwRkFBMDAwMDQ3MUY5NUNDRjQ4MUUyRTc3NzFGOTlBNTU0NUNBRjc1MworOjEwRkFCMDAwNDhDREE1NDA0NzM5RjkyMUZDRERBMzc2NkRCQ0I5N0M2MgorOjEwRkFDMDAwRTdGNjczM0Q3RjlGMDdFMzhEOTBERTNGRDI3Qjk3MjM2MAorOjEwRkFEMDAwN0UzRjAyRjkxNUVGQjFFMUY5OUMzRTNGNkE1NTY3OTMwRAorOjEwRkFFMDAwREYxMDZDMTQ5NDQzM0U2QTdEMkUxNEUzQTFBNUJDNTYyRQorOjEwRkFGMDAwQTRGRUM1ODFFRkZGQUMzOUM4RTM4MkYxN0Q3QTdBMkI5MQorOjEwRkIwMDAwNTRFODQxRUE4NTFFNjRDRDBCODZEOUYxNTEyNDdGRDE5QQorOjEwRkIxMDAwOTc1QUJERDczODE4RkVBQTg1N0NENTlGM0ZCMDlGRUU3NworOjEwRkIyMDAwNkRCNTdCQjlGQzUwRUJFOTI2Rjk0MUNBMjMzMkVFQjA0MgorOjEwRkIzMDAwNjY2RjM3QzkxM0IyNURGRDAxMEU5N0JBMDNGQzdCNTk5RQorOjEwRkI0MDAwQkE0RUVBNTExQzRBMkFERUE3MTVDQUFGOUU5MjUxQkE5NAorOjEwRkI1MDAwNUU5MzFGNTdCQTVFOEZBOUQwREJFQjdCNDkxRUJDM0I3RgorOjEwRkI2MDAwRkQxREJBODdEN0I1ODg3RTIxNkZGMDFCNkYwOTEyRDFCMgorOjEwRkI3MDAwNzBGRTNEQzU4MkVENkQxQUZGREFCQTAzMTFENERFNUI2QgorOjEwRkI4MDAwMTdCQzE5Q0Y3OTQ3QkQ0NThGNjk3MzlEODVDRUZENkQzMworOjEwRkI5MDAwMERCQTc0RjQ1Mzc3MjhDMTc2OTRFMzNBODRGRkQ2RjAxMworOjEwRkJBMDAwOUFGN0NEQTgzRjg4NjNCREM3RjFCRDVENkY4MkIzMTZEQworOjEwRkJCMDAwRjc0MzBDQkVFRUEyRkFFMjg5N0E4RTdDOUE4REZEMTc4RAorOjEwRkJDMDAwOENFQUJBOEM2RjZBMThENjRGMkE0NTNCQzVEQTdDQjFFRAorOjEwRkJEMDAwOEU4Q0FFNkNBNEVCRTFDNzM4N0Y3RUNDQzAzNkQzQkIzNQorOjEwRkJFMDAwQ0RGQTYyODZGQTdCQUZCMDJGQkFCRUQxRDFGQkIzMUQ3RQorOjEwRkJGMDAwOEFGN0Q3RkVGMkQ1MUVCMTZGOEI4M0I4OURGMUZFMDk0RgorOjEwRkMwMDAwQ0U1RkUyM0M3RUFBMThDNjY3OTI3RkEzM0ExQUZCRUY0QQorOjEwRkMxMDAwMTE3NjQ4MjlBN0NFMTRGQzM5NDFEQ0FGOEMyMzYyMkQyNAorOjEwRkMyMDAwNDhDN0QyQUY0RjcxMzgyOERFRjNDRThDNjNFNTc4M0VGQgorOjEwRkMzMDAwREZEMzZCQTI3ODgxOTlCREMxMjRCNzI2OEM5ODQzRTdBNgorOjEwRkM0MDAwOTk3Q0I3NURCMUU5NTkwOUQ0M0Y5NkExRjM2MjVDRENCOAorOjEwRkM1MDAwM0RDQ0M0RkQwMjRDMDFGMkFEQ0U0Q0ZFQzk0QUM3RUYwQgorOjEwRkM2MDAwQkU0MUJFMUVBRjVFM0ExRThFRkVCMkZGQUVEMEZCQTNGQgorOjEwRkM3MDAwQTU3RDY3MUY3QjlCRTE3REQ4OUQ0OUYxRDAwOUNFODc4QgorOjEwRkM4MDAwMTA4NTI3RkJFNjc0M0IwMTc1Rjc1ODNEMjYzQjNGMkY1NworOjEwRkM5MDAwOThGRjNBM0E3RUZFNEQ1OEE0Q0UzN0JGOUVERUIzRjRBRAorOjEwRkNBMDAwQUU2MzRGQUY4OUY0QjYzMzNCQzQzQjg3MDFGM0U5ODlCOAorOjEwRkNCMDAwQjU5MTlGMzRENDIzNzlCM0M3QTJBM0Y3REQ2Njc2MUMzMAorOjEwRkNDMDAwQTdGNzBBNjdDQUY3MEM0RERBRjcwQzk5MkQyMTAyRjU1MAorOjEwRkNEMDAwQ0FBNDRCMDVFMTIwQkE5OUUzQUYyMDVDN0I1RkVDQzg3NgorOjEwRkNFMDAwRTdGMjYyODdFMDIzODFFRkREQ0JCODE1NzlBRUJDNkMxQgorOjEwRkNGMDAwRDk3NTBCRDc0QkYxN0RCQTRBREFGOUFGMjQ5MzNDRDFEMQorOjEwRkQwMDAwRDc5MUYyOURFRjU4QkM4QjcyMDVDODBCQTdBRTc2QkM5RAorOjEwRkQxMDAwOTIzRkRDNzdBRTJFMTQ3MDkyRTdCMzhDNUI1ODI4RTBFQworOjEwRkQyMDAwQjVEMEEyRTNGMDA5RjhERDE1NDkzNzgxNzRFMUMzM0I5MgorOjEwRkQzMDAwOEZGNzkyRjg2NEI3NzdCRThBRjE1ODgwQzdGMUY3MzEzMAorOjEwRkQ0MDAwQzJERkRCNDg4RjI3QkY3OTczMDMzRUJCMzA0Mjc1NzQzNworOjEwRkQ1MDAwM0I5MzdFMTRGQ0QxRkJERDNGMTg3RjlEODFGOEYzOUEyNQorOjEwRkQ2MDAwQzdBMDFDRjE4MDhFRTQwOEU5RUZFODE0RUZCNTRCQkZBMworOjEwRkQ3MDAwNDc5NkNFODgxRjk0QUFDMUE0MkY3NDhBNzdEQTgxMEY4MAorOjEwRkQ4MDAwQkM4QTdDNDBFRUZGNTE3M0JBQzZFMzM5N0ExMkFFRTgwMgorOjEwRkQ5MDAwMzhCRjJFOUQ4N0JFODc0RkUzRkU4NjIzNTk2NzlDRjBCMAorOjEwRkRBMDAwQ0ZDOTQ1Rjk0REY1QkQ0RjRENzRERkFDQjgxRkFFNDQxQQorOjEwRkRCMDAwRkZDQjg1MTZGMjczRUY3MTA3QkM0RjJEREUzMUVGNjE3QgorOjEwRkRDMDAwODIzRjJDOTZFRjk4QzM3RTg2NzY2RDRCNzg3OUZGM0IwOQorOjEwRkREMDAwRTZBMzE5RERBM0RBMzI1OTFBQ0E1RjZERTI3NzdGODY4RQorOjEwRkRFMDAwN0NDNzdDNjUyNEU5NEQxRjc5QzQzRDE2Q0YwM0Y5N0U5RAorOjEwRkRGMDAwRjVGNDA0QTc3OURBRjA4MUVGNTczRkE4MTQyRkMxREY5QgorOjEwRkUwMDAwODE3MThERTdGM0VENUExMkZDQ0MyRTBFNkUyRkVBN0IzQQorOjEwRkUxMDAwNEUzNjg2RDJCQkREOTI0RUE1OUU3Qjk0QUJGQjYxODRCMQorOjEwRkUyMDAwOTM4Q0FCRkQ1OEQwOUI4NEJGOEMyQjhDMEFDMDgzQTREMQorOjEwRkUzMDAwQkJGRURGOEI1OUM3RTlBRkRGOUZCNjlFOTEzRTY1MjRCRAorOjEwRkU0MDAwNEMyNTg0RkMyM0VEMzY4NEVCM0Q4OUNFMjQ5QzdGRjM0NgorOjEwRkU1MDAwNkE4MDMzRTlEMUI5OUZFNzQ5RjE3QjE2ODFGQjI5NjNCOQorOjEwRkU2MDAwOUE0RURBODkyOTVFQTA1NDlDNkJBNTMyM0VBMDUxMUJBNAorOjEwRkU3MDAwMUYxMEY4QkU2OUYwQzhFMjA5RDM2MDlEMTc5NDc3Mjc3OAorOjEwRkU4MDAwRTJDNzM3RkZCNzNBQThERkM5QTQ2OTlDOEZBN0M2M0E3MworOjEwRkU5MDAwMjc0RUEzRjM2REE2NDY4RTdDMzNGM0QzMDRGQTdEOTlFNworOjEwRkVBMDAwNkY4RjhGQzQ3M0VGQTY4NEUyQzlEOEFGMzk5NURCMEQ4RAorOjEwRkVCMDAwM0U4RUVCQTJGODhFOEY5N0ZDMkQ4MUY0Q0VFQkY4QkIzMworOjEwRkVDMDAwQUMzRjc0OUUwM0UzOTkzOTFERENCNjlDRkIyM0M2QjM5QgorOjEwRkVEMDAwMDZBMkRGNTg1RjlDQUMxOUU3RjEzRjJEOUVEOTE3NkY0MgorOjEwRkVFMDAwQkM5QjdFNTdFNEU1MjY0RkNBOTlEMTAzRjE5MTFGNzQ1QworOjEwRkVGMDAwRUMzOTFCREM2ODFBOEUxQzJBQTVGOERFRjA2M0I3MjVFNgorOjEwRkYwMDAwNDFCRUYxQzg0QjNDMUY3RkVDNzIxMkUwRTZGNjIzMURBOAorOjEwRkYxMDAwM0MzRkVFRDg2NThDMDc1RTc3RTQ0ODI5QzVGRkEyREQzQgorOjEwRkYyMDAwNjAwNDYzNzcxQzc5QjlENDA1RjhBODlFRTA2QzQyN0MyNAorOjEwRkYzMDAwMkRCQUQyRjAyQTFFQzNFRkFEOUZCRjNDODlFMjU5RTcyQworOjEwRkY0MDAwMjVBNEYzNzhENkI1NThCRTMwN0FEOTg2NzBDNTE3Q0ZCOAorOjEwRkY1MDAwQkE2RDFBQjQwMzdBRThCOUM0RTlCRkU3MTJBN0Y3MjA2QgorOjEwRkY2MDAwRTQwM0MzRkZGNTU0QzZGNTRBRkUzQjE0OUY5NEZCRUYzMAorOjEwRkY3MDAwQzc4QTRCOTZGQjk4RURCMjZGMzYyMDMxQkFGRUU1NzgxMgorOjEwRkY4MDAwRTE0NzY4REYwNEM0MEJGNzE4N0ExRjI3N0JEMjI1NjY4OAorOjEwRkY5MDAwQzMzOEM0QTNBMUVGREJGMDlDNjhDRUU1RjE4QzRBNkZCNworOjEwRkZBMDAwQTcwREZEMzBGMjczNzhCRUY5NTJBNzBERjkzQkU2NTE2QgorOjEwRkZCMDAwQUZENTEzQzFFMzFDNjUzQzZDRjMyNTZGMUNFRTkzN0MzRAorOjEwRkZDMDAwOEM1Qjg0RkE4NUJEQkRBNUM4NkZGMkQxOEYzNzA5RkI2NAorOjEwRkZEMDAwN0ZFREI4MTg4RjYxN0YzQjJFRjE3OEMzMUU3M0E3Q0REQworOjEwRkZFMDAwMkFDNkMxN0U2MERDMjRFNDhCRjk2QjRERTQ2RkQ0N0NCRgorOjEwRkZGMDAwQTk2MTM1RjU1MzYyRTkxRjU3MDkxOEQ3RjREREUzQ0UzRgorOjAyMDAwMDAyMzAwMENDCis6MTAwMDAwMDA1MkZDQzY0REVERTM3MTlEMzhBRTREMzNBRTk3RTI4MUEzCis6MTAwMDEwMDBBMTNGOEEzQkVEODlCMEM3RTI3RDVGRTYwQkIxMUNGMkUwCis6MTAwMDIwMDAwRjg5REZBN0M4Qjc3OTU1RTRGRjMyM0UyQUM2MjhERTFDCis6MTAwMDMwMDBFMTE2RjcxNUE4NDdGMTk4M0JGQUY4M0EyRjM2NzlBQjU1Cis6MTAwMDQwMDA3MTNGMTUwQTdFNUQ2OEU0RTcyNUQzMDVEQkQxMEZCQjYwCis6MTAwMDUwMDA0OEZERjZCNTc4QkM5N0JDQzBFRjI1ODU0MUM1REI3MDdGCis6MTAwMDYwMDAzRkQ2RUIzOUJGNjE1MUYyNzdEMjNBNTdGRTA2RUFCRDZGCis6MTAwMDcwMDAxMzFENEZCRjJCMzYzMkY2MTA0QkM1N0JGMUFBMzkxOTMxCis6MTAwMDgwMDA3ODVFODBCQ0ZEMTFFMkZCMURENkFBRjBERkRGRTJFRDU5Cis6MTAwMDkwMDAxN0NDMDkyMUZGOTM5RTIzNjM3MjcxRkZDQzBGQjIxRDExCis6MTAwMEEwMDA2NEIwNkY0RjREQkI0NEZCNzQ3RUI4MkQxNzZGM0FBN0Y5Cis6MTAwMEIwMDA4RTVDRTZGOTE4REI0MUI0RUI5QUQ4QTVEMjQyQkFBNzE4Cis6MTAwMEMwMDA3MTNCRUQ0RDNFM0JFREE3QjgyRkVCRTY1QzMwNzJCOUNFCis6MTAwMEQwMDBBQzk3REU2NzNFMzc4RDlGNUYyMEI3OTNEQ0QxN0I4RDc5Cis6MTAwMEUwMDA3ODZGMzNDMzk2OEJFNTg5ODZERTMwODQ1QkNGQjc3QTMxCis6MTAwMEYwMDBGRTVFMkRFQjBEQkJEMUNGMkVGQjc4MDc3RkM3MzY5MDcwCis6MTAwMTAwMDBBRUY3MTVGMDczNjA1NUFBODVERTM5QUI4RjM1OTkyOEE3Cis6MTAwMTEwMDBFREI4MzQ5QjdFMDc0NjVGOUM4QUY3MDI4NzcxNzA3RDNECis6MTAwMTIwMDBFMzEzMDU1Q0RFNENEQTY4RjREOURERTFGQzcwMDQzM0RFCis6MTAwMTMwMDA5OTc3QjEzQ0M2QjZGRjVCNzBGRkJEMEI4RjE4RTM2OEMzCis6MTAwMTQwMDA3MTBGNzM1OTlGMjg0Q0Q1RDQ3NzYwRkRGRTcyQzY5RkZFCis6MTAwMTUwMDA2NzkzRUQ0N0JFQUM3RjAyRURGODM0MUVFMkI5OTJGQjI3Cis6MTAwMTYwMDA0RDA0OUUxN0E1RDMyMzM1RkU1NjhGNDU5OUM5REYyQTI2Cis6MTAwMTcwMDA1NTE1N0EzQ0E4NkIyNTdEMjBCN0RCQzZGRkE3OTlFMjExCis6MTAwMTgwMDBFNzc2OTgzOTFEQTZFQTc4QkE0MzI3RTI3Qzg1OUU0RjI4Cis6MTAwMTkwMDBERTVGN0UzMUREMzk3RTdBMkVGNUUzQTU3RUQ0RkQ5OUQyCis6MTAwMUEwMDAyODRGQzQzMTBGOEQyRkU1MzI1OTBGRTQyRjMzMzExOTA5Cis6MTAwMUIwMDBGMTNCNkZGOUFBNkU1MDc4QkU1MjMwQzM1MTkwOEI3NEU4Cis6MTAwMUMwMDBFRDYyOUZGODlEMTMxNzQzQzIxQUZERjE1N0FGNkFGNTEwCis6MTAwMUQwMDA5REFGMTRDQ0E0NzZCMjdENURFMzJDRjYwOUM1MjE3QURGCis6MTAwMUUwMDA4OTdFRUE1Mjc1NzQ1RkFENTdEOTJCRjQ3QjAzQUM5M0NCCis6MTAwMUYwMDBFQzk4QjJEREZCQzAyNzNGQTFGNzFBMUM5NDdFMDBGQ0VGCis6MTAwMjAwMDBGMjEzRjJGMzVCNENFOTVGOUE5Q0Y0RkQ2NDUzMTVBNTdECis6MTAwMjEwMDA1RDREMERGNEZENTQ1MzIzQTU4QjZFMEVDRDQxRkE1RjU5Cis6MTAwMjIwMDA3NTc4M0RGQkM0RUY3Q0FDRjMxODlDRkU3RTM1RUZDRkI4Cis6MTAwMjMwMDAxODlDOEUyQTA1MURCRDlGMzQ3ODc5NTMwMTk3OEJERTVCCis6MTAwMjQwMDAyRkUwRjhFQzU5Q0VFNTRCQTBDQjE2NkJFNEQwRjI0MjkwCis6MTAwMjUwMDA0RjI4Rjc0Nzc4NjkyNkE3RjM5RTM4OUU3NzE2RjA3N0UwCis6MTAwMjYwMDA0MjFEM0FENjhFRUQ1RjlBQzlERjYxN0YzRjU5NDdFRjU1Cis6MTAwMjcwMDAzOTM4MjI3OUJGRUZBN0U5NDg0RUJCNzZGNjhDNTI4NDE1Cis6MTAwMjgwMDA5MzIzMUFCRTY3RjlGMkVGNUZDNUNCMUQyM0Y4NzczOUM4Cis6MTAwMjkwMDA1RjU5M0U3RTdBQkZGRTIwOERERjhCQjlERDFERTg5RDY0Cis6MTAwMkEwMDBGQUVGQzc2RjIxOUY1RjYwN0RFOTQ3MUYwODhGQTM2MjQ4Cis6MTAwMkIwMDBERkQyQkU0MEI5MURGNzQxOTJERkJFQThCN0QxQkU5MEQ0Cis6MTAwMkMwMDA3NDI4RTlBRjc0M0E4NzczNkE5MEEwNzMzOEJCMDg3RUNDCis6MTAwMkQwMDA3ODg2RTFCRDM4QzY0QzcyQUMwM0VEMTZCMDlFMUQyMjg3Cis6MTAwMkUwMDBDRTdEQzA3RTEwNzYwMEI5MUZFNDNFOTBGNDFFMEZGQjU5Cis6MTAwMkYwMDA4Q0RCMzlGODNBQTZBOTgzRUJFNzM3MTVGMDdCNkE2NzAwCis6MTAwMzAwMDA3NEU4Q0YwOEFGMUQwNjJCOUUzN0QzNTQ2RTZGRThFOTEzCis6MTAwMzEwMDA1ODk4ODNGRUUwNDU5QjJDMEQ4M0YxQUY5NzQ1RkI3RkZBCis6MTAwMzIwMDAxOTBFOTIxRjBDMDE4NzAxRUIzNzBBN0RGRDNGQjk3RTQ0Cis6MTAwMzMwMDBFMjZGQzhCNzk3NzM3RkNDNDA3QURENUIyMEY5MTVBN0QxCis6MTAwMzQwMDBEQjU3MEExQ0JCOTA3RTdBMTRCMzFFRUYyNzNERTZDMTMzCis6MTAwMzUwMDBGREM3NUY5QUM5Rjc4NUE0OUZEMkU5NENCQzNGMDNFQjY4Cis6MTAwMzYwMDA0QzE5QzhFRkU0N0FGQUQ3Qjk4MjExREY0QjE1NzFDNjgwCis6MTAwMzcwMDA4MUY4OTVFQkYyRTM3QjFEMDU3RTdBMjdDNjQwNUU4MTBFCis6MTAwMzgwMDA3RTQ2RDY1QUU4N0UyQUU5RjdFMkYwNkYyQUYxRkM5QTE3Cis6MTAwMzkwMDA1MzYwRTNGNjE3OUQyQURFODFFNUU3NDlGRjc3NDVBNTFGCis6MTAwM0EwMDA3ODJCQkY3Mzg2QTFEQ0QyN0I4NERCRTFCQzcwNEY0MjJCCis6MTAwM0IwMDAzQjE2RUE5RUZERTNBREJGMTZGQ0EyNkY3MUFFMEVGNUQzCis6MTAwM0MwMDAwMzE3QkZCNkI4RjBEQ0JBMzhBMkY3MjRDQTI1MTdEQjhBCis6MTAwM0QwMDBGOTNCRTdEMEUzNUMwNUZENDUzMEVFQzc4NkJGRDdDMkU5Cis6MTAwM0UwMDBFRDFGRUFDMzVGOUQ0NDc5QThGMjYxOTVFNDk3OEI3ODhECis6MTAwM0YwMDA1RDg2NzZBQjFFRTBCRjZGMjdGRDA2NkI0NUJCRTZGNjVDCis6MTAwNDAwMDBDQjhCRTg3N0NEODAzRTUxRkVGOUM0NUM5RjhDNzJGMUI2Cis6MTAwNDEwMDBBQzg3MUYzODgxRUZBRTU3MUU1NDUwQ0RDQzhFQTNCRTkzCis6MTAwNDIwMDAxREYyNjc3N0FCRkNGNzU1NDVCQ0M5NkNFMUQ3NUZCREUyCis6MTAwNDMwMDA5M0ZCRjVENzYyOUMwOUNBMkYwN0I2M0Y4OEJGM0I1OThCCis6MTAwNDQwMDBCN0RCQzBDQ0YwN0QzNkJFOEYwNkUzQUNGMDg0QzIwNUNFCis6MTAwNDUwMDAxMkZBNkREM0M2QTVGRTg0QjkzNkEyMUVCOTZBOUJGNjAwCis6MTAwNDYwMDA3QkY1MEU2REJFMzZDMDVGRjE1MjgxRjA0QjFDQ0IzMjc2Cis6MTAwNDcwMDBDOTJGQjE4REVCODkyNURGMUUyOEVGQkEzODdGNUMyM0E5Cis6MTAwNDgwMDBGRDc0QkZBNDc3QkRENTIzNUYyNTlFQjJGMEZDM0M5MURGCis6MTAwNDkwMDBFRjg2RkM4NUFGMzhGQzI1RENFQTA1Q0ZCRjEwQzc3MkJDCis6MTAwNEEwMDAzQ0IwQkVGQTIzNjYyQkRFRkZFQjVGRTBGQTgxOEI5RTQ5Cis6MTAwNEIwMDA3MDgyRjNBQUUwMkVCMjI3QjAxNzU1MkJDQTYxNzcxREMwCis6MTAwNEMwMDA1NjQ5OUY1MEQ3NjFGRTM1RkUxRTZERkQ0MTg1REVBOTYwCis6MTAwNEQwMDBBRDNCMUNFNEU2RjBCOTU0ODlFNTJCMEU5QkFEMzYyQzAwCis6MTAwNEUwMDA3RjMxODhBMURFRjkyMkUwMERGRDYxMkYyNjc0MTFGRTE3Cis6MTAwNEYwMDAxMUFGQTg4RjgwQkZCOUY4QkIxNTEyRkZFQUMzREM4RTFECis6MTAwNTAwMDA1Q0I5NDdFMEE3RkQzNjNERTFENUFEQjA5OEE0ODE3ODUwCis6MTAwNTEwMDA5Mjc4RkU5REVFRTk3RTNDNjFCQjU5MEZCRkY3OUFDMDExCis6MTAwNTIwMDAzQkMzMzg5QkUzRURFNUY0N0IxODEyREZDNjIzOUYyNDIxCis6MTAwNTMwMDBBMkRDMkJGMUFDMDI5RTdGMjFEQkRCQzQzQjc4REY4MUE4Cis6MTAwNTQwMDBFNzJBQzRCM0U1OUZDN0YzRUIwNTRDQzZGQjlEN0QxNEJBCis6MTAwNTUwMDBFNURFNTAyM0Q5Q0ZBNTNFNDNFQTJGODZEN0JDRkY2QUZDCis6MTAwNTYwMDAxNDBDM0MzQUY2Mzk5MjczNEIyM0NGRDVBRDY2QTQzRkI5Cis6MTAwNTcwMDA5QjM0MURGNTlGRDdCQzg1M0ZFN0NCREVCOUY2RTk0QzMwCis6MTAwNTgwMDBBNDhGNjY0MzE3RkQ1RThDMkI4MkJGMjdERjkzMzQ2RkU5Cis6MTAwNTkwMDBEQkYzMzA1RTYxRTQzNzg5RkI3MURGQkMxQzQ0NjY5MzlBCis6MTAwNUEwMDA1OTgyQUZFMjlGQzlGRjNEQzAwRTMzRTlEOUVBM0E4MkQyCis6MTAwNUIwMDBCODVFRUQ4MEQ2NkVENjEzQzc3RjlGQUZDOEQ4NUJCQTQyCis6MTAwNUMwMDAxQUU1NzJFODBGQzc5MUY3QzE5QTBFRjFCQjJGRTJGRTUwCis6MTAwNUQwMDA1NjIzRjUwQzdCMDNERTg1QjJCRTQ1RjU0QUE2MjdEMzJDCis6MTAwNUUwMDAzQzUyNjJBNkQ5OTAwRjM1MkY2MUNFRTA5NEVGRTJGNzJFCis6MTAwNUYwMDA1QzdGMjM3RjI3NkY0ODM5NzAwOEJFMkZFNTNGRTZEMjI2Cis6MTAwNjAwMDBFQTM5MjRGRjU5MjE3RTU3QjI3RjdGODg3Q0Q1N0E1N0ZCCis6MTAwNjEwMDA5ODQ5MjVCQUEzNzhGMURBQzdGOEVGMkE3RThBNzQxN0M5Cis6MTAwNjIwMDBFNkEzQTc3QTExOTdGNkVBQkZCREFFQzdERjY3RUFEOTlFCis6MTAwNjMwMDBDMUZEMjI4MDQzM0U4OEZFRjlFNzNEM0MwRUFFM0FBNzVECis6MTAwNjQwMDA3QkEyRDc4NkJGQ0ZDMUY5RDBDQUJEOEFEQjk2MzQwODVBCis6MTAwNjUwMDAxRDMxRjc0NkZFOUU3RDAwM0RFREZERUVGNzBFNkY5RkNFCis6MTAwNjYwMDAyRUUyRERDNkIyRjFGRjAwNzg2RUM3RjhBMzVDMUZCRkIzCis6MTAwNjcwMDAwODhDOUJFQzNGQkYwMjdFQkZFMzdGNUExQzc3NUYwNjZFCis6MTAwNjgwMDBBQ0U3M0JFQzhDM0Y4OUQ1QkVERjcyOEQ0REZCRkI0QzVDCis6MTAwNjkwMDBEN0E1NkI3RjlGQTlDRjIyRTAyM0U0NDEyOUE3RUU5RTM3Cis6MTAwNkEwMDBDRUU1OTlDMDU0QzJGNzdBQkI3NjFDNzkyRkZFNjk5RUJECis6MTAwNkIwMDA3NkJDNzkwRUVENzgzRjE0MkYzRjU2M0NFQkY3QzFFRjM3Cis6MTAwNkMwMDAzNTMxRUUwOTMxRUVFQjYyREM3RjE1NEUzMjFENkFCQzJFCis6MTAwNkQwMDBGRjlGRkVCRjQ5RkYwRjQyNjEzOTY0MDA4MDAwMDAwMEE4Cis6MTAwNkUwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkI1NUIwQjdDOTRENTRECis6MTAwNkYwMDA5NUJGREY3Q0YzQ0M3MzA4MjEwOTA0QzIyNDI0MjE2MDU4Cis6MTAwNzAwMDA4ODAzMjQ1NDJCOTZDOUQzMDBENjA2NUMyRDY4ODQwMTM3Cis6MTAwNzEwMDA1MkM4M0I4MEI1RDIxNjdGMTkwNDExMTA1QkE4RDFBMjM0Cis6MTAwNzIwMDAyMjRFODJFMUExNjE5RDA4QzE0NDQzMUQxNEIyODhENkM2Cis6MTAwNzMwMDA4RDc0OEJGREZENTZEQ0Y4MjhGMjMyMTNBMzc0RTU1NzU3Cis6MTAwNzQwMDAyRDdCRkVFNzdFMUY5OTBDQTFEQUVFNkVGMkQzOTM3MzM4Cis6MTAwNzUwMDA1RkRGQjlFNzdEQ0ZCREQ0MTRFNzE4QkU5QTIyNDQ2RTlGCis6MTAwNzYwMDBDQzU5NzM0Rjg0MTBBRTk1M0Q0NTg5RDk0MkY0QkRBOTRCCis6MTAwNzcwMDA4QTI2ODcxMEMyRUQzRDU2MUYyQjQ0NkRDNzcwQjEyOUU0Cis6MTAwNzgwMDA5OUYwOTJCRUI3MENDMERCQzZEOTM3NTFGRkM2RjYzRjExCis6MTAwNzkwMDBCQzgzRkVERTAzQUFDMzQyRkRBRkI3N0YxQzg1NzUyRTY2Cis6MTAwN0EwMDA3QzE1MkVDNDcwQ0NGQjM4NEExMDVFN0Q0OTYxN0MxM0U5Cis6MTAwN0IwMDBGNTNCMDg5RkQ5QUEwQTdGMjZBRDY3RjQ5OUQxN0YyMTFFCis6MTAwN0MwMDA1NUM3QkQ2NjQxQjBBNEE1RDVEQzQzQjA2QTRGMkJGNzMxCis6MTAwN0QwMDBCRkU5MzMwREVFREZEMzM4QThERjhFRjEwNEFCOENERTNBCis6MTAwN0UwMDAyODNCQzE3M0VERkE3QTdFMUU1RjlEQUFCOEJDNjhERjE0Cis6MTAwN0YwMDBGMzg3QjhBNTE4RDdGMjZFREMxMjgyOTdGMTMzRTM2QTVCCis6MTAwODAwMDBGOEQ5QzExNzMyREQzNEFGQTY4M0Q2ODkxODU4QTdBNjA4Cis6MTAwODEwMDBDM0E0RTE5MkVFRUFENEQ2QTIxOEUyOTc2ODUxNDQxQTMyCis6MTAwODIwMDA4MTBCNjI4QjU4NDVGQ0FDNkE2RkFFMTZENDVFOTU3MTM1Cis6MTAwODMwMDBCNzQ5MTA1RjAyM0VCNTE4REZBNzFGODM4OEEzNzk3NkZBCis6MTAwODQwMDBGQThCRjg3N0MxRjc0NUQ0MTI1QUY3MzVERkQxREI1QzY0Cis6MTAwODUwMDAwNDAzOUQ2RjQ0RTFCQjgxMDMzNDNFNzM4MDlFRTkyRTA3Cis6MTAwODYwMDBFMjVGMEVBMDU5ODgxMTM0RUZDMDFCNTEwRUVBREZFODk5Cis6MTAwODcwMDA3QjQzRjJEQkU4RTc3REJGQUVFMTAxODJDQ0U3NzY5NTEyCis6MTAwODgwMDBGNzVERjE5NUNBRkNEN0Q3QkJDNUE1RjIzQTMzREJEM0U4Cis6MTAwODkwMDAyMkIxQUYxMzNFRjlCRDM5MkU4NzZDNEY1RDU0MDZGQTc1Cis6MTAwOEEwMDA4RjI3Q0NDRjUxOTM5OTZFMTdGMEMwQzREOUNEOUI4OEI4Cis6MTAwOEIwMDA5NDJBMUZBRDlCNzkzNURGOTY2OEVCNzY5OUM0M0MxRjZGCis6MTAwOEMwMDBFNDk2QkFCRjZCMTRFOUM3RjFFMkUxOTNBOUU3Q0FCOEFECis6MTAwOEQwMDBCQjVEMDYxRTU3NjQ3NkE3MkVBNzcxMjcyMjFDOTE3NjUyCis6MTAwOEUwMDA1QUVGQzFFMjcxOTE5MEVCRUI4MDY4MkZERTY5NzYxM0NECis6MTAwOEYwMDBBQzNDMjBCRjc3QzJERTFEMDU3RDNCNzE2MEFBRUE1MThBCis6MTAwOTAwMDAwNkQ2QkI0M0ZCQUUxMDFFODYwMzcyRjNCMDlDQ0FCRDc1Cis6MTAwOTEwMDA4RDExNTg2NzQwN0VCMjdEOEVDQkNFRTM4RjdCREZCRERECis6MTAwOTIwMDBGMzZFREFERjg5OEM3MDI3RTREMjY1MTZFNTNFRDYxM0M0Cis6MTAwOTMwMDBGQTA4QkVENzk5RDgwODNFRThERjlCMDM3OUQwQkM0MEJGCis6MTAwOTQwMDA4NjgxRTVEQURCNkVEMkM2RERERDJDMDY4RDMzQjFEQ0M3Cis6MTAwOTUwMDAyRTNDMzc5ODFFQkJGN0MzNUZERDRERTNBQjlGNTE4NTNGCis6MTAwOTYwMDA4NTlBQUI0RENCRTNCMEZGNEZCNzBGQTZBRjVDRTM3M0Y3Cis6MTAwOTcwMDBCNUM5MUYxNzE3QTRBRkQ1MUQ1N0VDMjU4MkY1QkI0MzhBCis6MTAwOTgwMDBCNzBGMDdDQjUzOTdFMzg5MEM1NUQyOTU2MEYxMEEyMjM0Cis6MTAwOTkwMDBCOUJBQjU5OUY1OUFDQ0NENjM5QkMyNTBEODA5MjY4NkQxCis6MTAwOUEwMDA3NzI3MkJCNEZGQzRGQkFEQ0VCNTQ0RkY3MzhBRDY2RjU3Cis6MTAwOUIwMDAyMDE4NDNCODQxRTI2NjgyNTY4MkNGOTg2NDNCQ0MxNjM5Cis6MTAwOUMwMDBGM0M3OTAzODE1QzI0REM1RTM3MjBDMjlCNDhFREEzQURDCis6MTAwOUQwMDAxOTcyN0Q3MTg2RUI1MTE3RURGRjk3MzM0QTI2Q0QyMEIyCis6MTAwOUUwMDA3ODQyRjQyRDE1RjRDRDlBOEIxMTFFMTEyRDQ0QTFGQUU1Cis6MTAwOUYwMDBGRTEzRjg2RUZGMDE5MzgwRkZBOEIxNzY1NDdFNDI3QTExCis6MTAwQTAwMDBEQUVGMjQ0MzIxQkFGQkI3OUJCQzFFRDYzRjU3ODQzMjkyCis6MTAwQTEwMDA0RDg4QTUzNzQ4QkJGOUQ0RTE5RUE2OEVBM0YxNkIwQzk3Cis6MTAwQTIwMDBCQ0JGRUExNkQ1NkJBMzcxQkRGNUM0MDI2MkY5NjdBRDEwCis6MTAwQTMwMDBDOTNGODJCRTU2MUY1M0VENTZEQTc3QkUyRkY5RDdEMzgyCis6MTAwQTQwMDA4MUI3OTg5QzE2OUE1RkVCQTM0NkMyNkJGNzI4NUU4NzI2Cis6MTAwQTUwMDA1QzVGQzAyRTZCNkU2MDVEMTdBNzZEQjUyOTIyOEJFMEMxCis6MTAwQTYwMDA5QTNFMzNDNjlEM0VBNDg4Qzc2OERDMjM2MTUxNERBMEUxCis6MTAwQTcwMDBCQjI2NzNENjU5MjU4QUEwQkE3OTdEMjJBREI3NkM5QjY3Cis6MTAwQTgwMDBFOUEzMUVBQjlDN0I5OUZFQUJFQkRDQ0E3QTVCRTExRDU0Cis6MTAwQTkwMDBEQzVFQjU2NzMwNUUyMzhDMDMzOEFEREY4QzNGNkUxNEFGCis6MTAwQUEwMDBBMkNEMTUxOTdCRkEzQUZBN0I4Mjk4NzA1OTA1OUZBNjU4Cis6MTAwQUIwMDBDN0MzMUU4RTQzQUVDNDQ3RDE0MENDMUUyOUM0QkQ5M0NDCis6MTAwQUMwMDA5Q0YxQjBGQjhENDZDNzJDRjAyMUQwNjlCMjgzNUY3NUQ1Cis6MTAwQUQwMDA4N0Y2NTc4MDZFNkY3NTk4RDM0MDVCQUQ1REY1MkFGMzRFCis6MTAwQUUwMDAzNUYwMjVGMUZEN0E4MjA5ODJGNzFGMTA5MkJGODE3NkQ5Cis6MTAwQUYwMDBBOUU3NzUyNkM1NkJDNTdDRTIyMUFGNjc1NUJDNkJBODFECis6MTAwQjAwMDAyQkUwRTk4RjYyRkYyNDQ0MzFFQzYyRTVGQzFDMDNGQzFFCis6MTAwQjEwMDAxQ0NDNTgxMDI5QkZENkVENDFCMTE5OTU2ODQwNjlGRjJBCis6MTAwQjIwMDAzRjMwRjZBOEMzODJGQ0M0N0ZCOTUyOThGRTAyQjM3MDZFCis6MTAwQjMwMDBGQkE4RkRERTQ4NjczNEY0N0VBQzM1MkEwQjc0OERCNTE2Cis6MTAwQjQwMDAyNjc5QzFGN0IxQzZCRTM1RjhGRTIzQTMxNEM3ODNCNDE2Cis6MTAwQjUwMDBGNEUxQUM1NzI2MkJDMDZCMjM5Q0QwMTMyNTYxOTExMTc3Cis6MTAwQjYwMDBGQzc4NjRENDIyMjNGNDdEQUNERDk3NTE5MjM5ODAxNzUwCis6MTAwQjcwMDBBMDFGRjYyMEJDRkNCREEyMDhCNzExREY3OTZFQTRFMjZECis6MTAwQjgwMDAzN0QwRkEwMTFCRDEwNzNCMzFEQTREQTAyRjYwOTJCODY0Cis6MTAwQjkwMDAxMDZCMDZEMTQ3MUU4OUYxRkY3N0ZBRUM0NDVGQzQwMDYxCis6MTAwQkEwMDA3RDI0RUY2OENDRkYyMjlCRjg0MzMwNjk4RTEwRERFQzhBCis6MTAwQkIwMDAxNzk2QjM1RkQwRjk3OTgxRjRCRDgwNjQ5NUE2NDhCRERFCis6MTAwQkMwMDBBOURFN0VCODA4RkQzNUEyN0IzREU2MTU0NUM5N0QxNDNBCis6MTAwQkQwMDA2MTNGQzBDMzI0NTQ3M0E1QkM3MjM1Nzg1RkFFOEMyRkJGCis6MTAwQkUwMDBCQUZGRUNDODc1MTk3MzA5NkVDQjJEMzEwMzE2QUE5OTlCCis6MTAwQkYwMDBGMTNENDNGOEZCOTU4QTk1RjVFNDBCQjIzRkY4RTM3QkIyCis6MTAwQzAwMDA5NjJCRjZENDhDMDFGREQ2RURBQTRFMzY1REIxOUZBQTg3Cis6MTAwQzEwMDBERkVGMzQ4QjE0N0NDRUQ1OUQ0MUZERTU0MkRBRjVDMjgxCis6MTAwQzIwMDA1NTM2N0I2QUIwMURDMUNFODgxRkU1RjY4QTVCMDVEOUIzCis6MTAwQzMwMDA5QjdCNTU5QzNENzUyQUI1QUIxN0NDMDJCQUE3RDk1N0ZCCis6MTAwQzQwMDAyQ0ZENUU0RTE5QzJCRTdDMjE3NkQ5M0UxOEY3REJBNDdFCis6MTAwQzUwMDA5RUZCMjMxNUVGNUFBMjNGMzU3N0IwREQyNTY5NzZEMDhDCis6MTAwQzYwMDBFODU2Nzg3RjhENUYxQjE5Rjc5NDJBNUVGMEZDMEU2QUI4Cis6MTAwQzcwMDA1QzE1QTM2RDBFRTNDQTczQkQ4ODhGNzcxMDVBOEFGNjkwCis6MTAwQzgwMDA4NjU4QjY1M0VFMjRGRkY1MkZEQTNFRUYzMEZBMEZDMzQ1Cis6MTAwQzkwMDA3RjFDMzVGOTkyRURENDc1QjRDNkVBQzRGQUYzMDUyNTg0Cis6MTAwQ0EwMDAzQUU0RDc0QTQ1MzdDMzkzRTFCNTZEN0U1RURDMzMwNjNGCis6MTAwQ0IwMDBGQUY1OUVEQkUyNDQxRUQ2QjhBRTI5MTI3RTNDNEJBQzYwCis6MTAwQ0MwMDBCMzlGQ0U0MDUyMjFGNjVDOUU3QUVEN0M4NjE0NDc5QzAxCis6MTAwQ0QwMDBENkU1ODI0MDRDNzkwQUU0QURDQjc1NUJBRTJCMkYzNzVECis6MTAwQ0UwMDBFN0RBRjNBQkZFRDg3NkRCRjdFMEJGRUU2QjM2Qzc0QjQ3Cis6MTAwQ0YwMDAzNUU5Q0U5ODM2MjAzNzVEQUU3NUMyQzM3NEVCRjJCQUQzCis6MTAwRDAwMDAyMjNGQTI3RDM0RjhBMTVFOThDMzdFRTY1OTU1NzA1RUZECis6MTAwRDEwMDBBMUM5Q0Y0QUJGNDNDOTRGRTdFRjBDNEQwRUNCM0FBNDUwCis6MTAwRDIwMDAzRjBBOTVBQkNFRUYxRkQzODJGODNFQzVEMUVEMkMwRjE1Cis6MTAwRDMwMDA2MTYxRkYxNzJBRjc2RjkzMEI2NTk4QTVFOENBOEZCNTE1Cis6MTAwRDQwMDAwOEM4MzNEMTIwRkQ2M0UyNTJEMjEzQTJGQjZFRTEzRTBDCis6MTAwRDUwMDBENDQzRjBDRUYwQjc0REFDODc5QTdDRUU4MTdDNjhFODQ2Cis6MTAwRDYwMDA3QkMyRkJDMzhDRTRGRjNCRjk3NEU0OTZEQzFGNkM4NzA5Cis6MTAwRDcwMDBBMTc2NzcyRDNCQUI3NjM4RkY1RDhGN0JFNDY5QzhCRUVCCis6MTAwRDgwMDA0MkVDMzNDNEZFNzQ3OUI5NTc0NUIxOUQ1RDkxQTNEQTQ1Cis6MTAwRDkwMDAyMkVENTU5MzU3MDRGRDBFNjk2RkY4ODNCRTU3RDNBRTBECis6MTAwREEwMDA3OEZEQzlERkMxRkUxNDIyOUNFNEY2NTg4OERERTlGMjIzCis6MTAwREIwMDBCOTk2REZEMUZERDQyOUUxM0Y2QUE3RkQ5RjRDOTE3OTE3Cis6MTAwREMwMDA4MEU3NjcxNjZGMzNGMDc0NDMzOUZDREVDOTg5MTJFRTkxCis6MTAwREQwMDBEN0ZDNUIyODNDNDU3OThFNDI3MTZDNTNDNjg5MTE4OERCCis6MTAwREUwMDBENzI3Q0RGQTNBMzY2RjMzRDE3RjZBNERGNzk4MTUzNDRECis6MTAwREYwMDBGRjU0QUU4NDI3OTExNzA2RTFBRTMwQjExMDdFRkRENENBCis6MTAwRTAwMDA0ODhCMDc3QzNBQTU0Q0M4NDM3QzM4QTVEQzdGOUJDNDQzCis6MTAwRTEwMDBFM0NEMEVFMEYzRTNGM0VDODQ5RjM0QzlGMTdBNUNEMUM3Cis6MTAwRTIwMDBGREZGQTlGOURGMkJFMDcxOEEzODAyN0UzODE0NTFDMjI4Cis6MTAwRTMwMDBERjUxOTQ5ODYyQTJFN0Q0N0Q2OTUzRDY4QTgxRkQzNzQ5Cis6MTAwRTQwMDBFNTFBNzg5RTU3RjNERjQ0MDdGM0JERUZFNzhBQjc4OUM5Cis6MTAwRTUwMDA5QTE2MjJBNDEwRkRDOTc5QkYyRDRFQTFGNjBGN0UzMTNFCis6MTAwRTYwMDA2RTMyRTRFQjVBMzlGOEZCODhEN0M5RDcwM0RGQ0FFQkY3Cis6MTAwRTcwMDBGQ0UwQUIzRUQzQTJBMEI4NzQyNTRFMTY3QzJFREJDQjkzCis6MTAwRTgwMDA3MjBDQjA5NzcyNEQ4NkFFOTgwOUQxOTA0RkJGNzc1Q0M3Cis6MTAwRTkwMDAzNEUyOEUxRTg3RkE4RkVEOEY3MDA3QzlFRDJDQzUyOUJECis6MTAwRUEwMDAzMTNFMDg5RkYwNjg1MjcwMUMzQkJDRUI5MTc0QUM1MzEwCis6MTAwRUIwMDA2RUY2NjQzOUE5RkQ0Q0UzRDM0OUM4MzdDQTc3M0Q5QzI3Cis6MTAwRUMwMDBDRTc5RjBBRThERTkzOENGOTQzNzNEOTJFRTYyM0NEQ0JFCis6MTAwRUQwMDBDREU3MjlBM0RDRjdGOTdEMzdFRURDMTQ5NDc3NTdFNUVECis6MTAwRUUwMDBBQjRDN0ZBOUY1NzAyMUUyRURBQ0VCM0U3QkM4NEVFMzQ1Cis6MTAwRUYwMDBEMjdFQTFEOEExNUVGNzg4RUU4NzEwMUYxNzIwM0ZDNkNCCis6MTAwRjAwMDBGOUFEQzFDQUZFOUNENjczNDFGRUNEMTM3RUY4MUNFQzMwCis6MTAwRjEwMDBGODc4QzZDN0E2MzIxQTc3MjlEN0M4RkM1OTIwQkM5QkQ3Cis6MTAwRjIwMDBFM0E5NUY2QzUwRUNDRDIyNzhGQzk4NDY4QzVGQjQ0RTAwCis6MTAwRjMwMDAzMTI3QzAwRjJDMUYzNjU5NzU2MERFMzBBNjYzRjE4NjRECis6MTAwRjQwMDBDOTVENjg1RkIwNUFCNkNGQjI3ODBGOUNDMDNBQkYzNTYyCis6MTAwRjUwMDAzQjlCMURFQzZGNTI0QTI2MEREMDdGMjlEN0NDRjMxNjUwCis6MTAwRjYwMDA2RTU2MzhGRkQ3QkY5M0Y2NDQ1QzYzRjAzRTJGNjlGMkFDCis6MTAwRjcwMDAxNzVGNUIxNEM4RTU0NzlBNUM2RTVERkRFRTkxMDQ1QUZECis6MTAwRjgwMDBENzFFRUJCRTBDQkZGMUNFRTNBNzUzRkRENDVFMTA3M0FBCis6MTAwRjkwMDAzNjEzN0E5RTY2NzYzRjU1ODE3RDM3NTk5Q0Q4NDc3NkMxCis6MTAwRkEwMDA1NkEyMUE0RkUzQTdGQzM0RjczMUMwODVBQjE3M0Q1NTY1Cis6MTAwRkIwMDAwMTdGQkJDRENBRTczNjlEQkU5NThBRDMwMDdGRkM0NjM0Cis6MTAwRkMwMDBFMzhGMTc4MzZGNjcxRUI3NzJERUJFQjI3MTdDQkMxOEU5Cis6MTAwRkQwMDBDMjRFNzVCODlCRTRFRkEwODNDRURFN0EyQkMzMTdFQTJFCis6MTAwRkUwMDBFREMyNDFGQUIwQUYzRTgxRjExN0VCMUQwQ0M1M0NBOTMzCis6MTAwRkYwMDA1RjJCQjVGM0YxQjVENjlCRkE1NUI4NzA1MDNFOUJCRDRCCis6MTAxMDAwMDBDMTI2MUNFNEE3OTJFMjVDQTNGMjY4OUY2OTEzNkI5QTY1Cis6MTAxMDEwMDAzNjZBRkI0QUEzRjk5MzNEQzlGOUUwNDNGNkM2MTU1RDZDCis6MTAxMDIwMDA0ODc5Q0Q3OUYyM0NGNkQ2ODkwRDQ5NzBDQUNCNTY3RjA2Cis6MTAxMDMwMDBCOEEzODJGQUU3RTQ5NThDQ0JBMzc2RUJGNkNGQjlBRUYyCis6MTAxMDQwMDBGMDQ2QzdDMzBCQzBFRkYyMjY4QkRDOUZCNkVGMzM4RkExCis6MTAxMDUwMDBBN0M3M0Y0NUVCN0JERTM0RjE3OUJGNkVGQjg3M0IzNjlDCis6MTAxMDYwMDAxMjVDQjI3OTg1Mzk1OERGQkZFQjdFOTMzNTdBQkVDREZECis6MTAxMDcwMDBBRUFFQzU4NzdGRENBRTFFNDk2MkZCNjkyMkJCQ0FGQ0VGCis6MTAxMDgwMDBFN0VEQUE2RUY1MUFFNkRGRkQ3OTI1QjNDMEY3MzMyNjQyCis6MTAxMDkwMDA0RjEyRUNFOUNDODQ5QjU5Q0YzRDg3MTRFNkJGRUVDN0Q1Cis6MTAxMEEwMDBGNUY5QzVEQTdFQUIwQ0JFQ0REMzkzMDdGQ0Y4NDU5MUJDCis6MTAxMEIwMDBDREZDM0REQ0YxNjkzQUYyREU4QkVERjNGRkVFQkUwRkM1Cis6MTAxMEMwMDBEMkJFRkRCNEVGNzZFMkFGN0ZGQ0Q1RkREM0NDRUU3MTlFCis6MTAxMEQwMDA0RURBREYzNDgzQ0M3N0FGQ0E1QkYzMEM1QUJEQTBEQkFBCis6MTAxMEUwMDA1QzEyMjk3OUFFQTAyRUEzQzU0RjhBNjM5RTY4QTJBNzgxCis6MTAxMEYwMDBCQTUzRjE4NzY1MjE5RURENzJENjg4RjMxRTlEMUIzRjkyCis6MTAxMTAwMDAwQUNFMjNFOEU3QTNBMEI4N0QyRDdBQkYwREQ2NjI5RDU1Cis6MTAxMTEwMDBCNDAxQkZGQkJEM0YxOTg0M0YyODRFREZEODEzMjZGQzI2Cis6MTAxMTIwMDA0MURGQkQ3MjNFQTEzNjMzQzlBOUI3NjMyNEZCMDVDOEIwCis6MTAxMTMwMDBDRDg4N0E1Q0M3ODQyNkUwNjdDRDUyOEVCRDA3Mjk2RkMzCis6MTAxMTQwMDA5Mjc1MUNBMTRFMUJEOEU3RDk4RUYzNTlGMEIzQTFGQkMxCis6MTAxMTUwMDBBRDdERTUzQ0VCNDc3NUZCQzM5RjJCQkNGRjk5Njc4RENECis6MTAxMTYwMDA1OURGQkVGRkMzQkJDRTY3NDE3RTY3NEQzREQzNzBERTA2Cis6MTAxMTcwMDBFQTM1Rjc2NDQxMEVCNUFGNEE3RkZFOEZGMjQxNkZBRjlCCis6MTAxMTgwMDBEODQwMUIyMTNCQUY1NUFDQUMyNzg1RUEwNUFFMUJGNDFDCis6MTAxMTkwMDAxRTkzNzU4M0RBOEU5REVDNEZGQjNCNjVGREE2Q0VEMDhBCis6MTAxMUEwMDA1RDE0OEY3QUM3RjIwRkJCRTBDRkZBMTNFNDM5OEFENjA5Cis6MTAxMUIwMDA3NzgxNkZEM0M3Njk3MUQwRDg5NzM0ODdGQ0RBNEI1N0UyCis6MTAxMUMwMDBGNDQxOUVGRkNFQzA3RUM3NjMxRDVGMzVGQzgwQzgwQTE4Cis6MTAxMUQwMDAxN0M4MkJDRUMxOUVBOTdEQzFBQUU0RjVEMEYzMzNERTlBCis6MTAxMUUwMDAxMTUzRTAxRkRGQ0FGQTZCMkREN0ZCNUUwQkI3QUI5QzI4Cis6MTAxMUYwMDBGNzUwNkI5MEZDQUVFQ0MzQUIwQUQ3QTA3QTQwQjg3MDQ2Cis6MTAxMjAwMDAwNThEQUIzMzNCN0VDNEY5RjE3MTU1MjBBRkFCOUIyODA0Cis6MTAxMjEwMDBFRDQ5QkMyMkVEQTk2NkRENjE3MzQyRDA3QTNCNjA0Rjk3Cis6MTAxMjIwMDA0Q0I3Q0MxNzY3QkRGNjU3QjZDQkQ1MzM1QzlEQjBDQjZBCis6MTAxMjMwMDA3MEY4NDJBQzk3MTBFRDU1MTQ2RDFDQzlCRjU2QTMyMTMwCis6MTAxMjQwMDBBMjUzM0JGNzE3QUJEQzVGRDdBRThBOTE5ODkzMTBFOUI2Cis6MTAxMjUwMDA0REEzN0QxNDhCMkQ0NkU0RDNCMzg0NkYzQUVBMzZDMjk2Cis6MTAxMjYwMDBEOEYzQUI5QkE4N0ZGNjZCRUFENDREODJDRjRGMEI0QkU0Cis6MTAxMjcwMDBGODVDRTk0RTVEODlGQ0M4QTA2ODdDRjU2NUNGMDk4RUY1Cis6MTAxMjgwMDA2Nzc5MzI0RTRENTcxNThFNjM3RDIzQzMzOTRGOTkzOTk3Cis6MTAxMjkwMDBBRkE2MTRGNEVBRTNCMjg2Qzk3MUI0MEVFNzU5QzJEQjEzCis6MTAxMkEwMDA5NzM1MDdGNkU5RUZDQjlBMUIzOTMwRUVDRUQ3QzI5N0M4Cis6MTAxMkIwMDA3MzVDMTRCRUVDM0I4M0JFMTM5NjJGRUJBMzVGNTAxQ0Y0Cis6MTAxMkMwMDA4MTlFRDQ1RDk0RjU4RTQyRjVFQjI3OTA5RkFGM0M0NDEwCis6MTAxMkQwMDBGQTgyRkNEMDkwRkM5RTAxN0U5Q0Y4MENCOTlFMjdCOTQ2Cis6MTAxMkUwMDBCQTEwN0ZEQ0MyRTU4MkZENEMxQUUxODVGREQ0RUQ1M0Q2Cis6MTAxMkYwMDA4NDExNzVBMjBFNEIxM0VBNDhCNUE2OUUzOEU4RjNDNkQyCis6MTAxMzAwMDBGNjNGOUFBMUNGNzU2REVGOUExRDkzMzA1RkQ2OURDOEI5Cis6MTAxMzEwMDAyMEQ5OEZENzY5RjFBQkE2N0RGQzdCQThGM0Q1MUM5M0IwCis6MTAxMzIwMDA1MUI0QzZGODJFOUZERkFCMEVCNEYyMzlCRDVBRjhGOUFFCis6MTAxMzMwMDA5QzVFREQzMjU4NUZGQTEzMUM1QzE3MDlCNThGQjA3Q0Q4Cis6MTAxMzQwMDBDNzIwQkI5OEI5NEREQUM1OURBQTU4MEUzRjI3QjQzQUJECis6MTAxMzUwMDBFRENDODQ3OENFNDcwNkU2Qzk3Q0Q3QTU5RTdGMDhGOUY4Cis6MTAxMzYwMDA0QjIwNDU3MTJBQjQ1NDIwQ0NCMzBFNzk5MTI3NURFNjA5Cis6MTAxMzcwMDAzMzgxREZCRDkwQkQ5NEZEOEEzN0ZCNzZEQTU3NDBDQkQxCis6MTAxMzgwMDA3NzY3NkVEODZBNTQ4M0U4OTlEOTI5RUI5MjgxMzA1MUY2Cis6MTAxMzkwMDA3RTkwRTVFRDFFMEQzOTA4NTc0OTQ0N0UwRURCNTUxNjRCCis6MTAxM0EwMDBGQzZBQzAyMEVCQThBMUZCQThEN0VBNDVDNzUxNEZDQUU5Cis6MTAxM0IwMDAxQ0EwN0I3NjYyQTJGNDYzQzJDQkZBRDM2NTkwREY3NzgwCis6MTAxM0MwMDAxOUE4N0ZDQUMwRkNDNUY5NzJGRUMwNzk0OEQ2QzFBRTYzCis6MTAxM0QwMDBFNTU3NzY5MTdDQ0E0ODNFN0I0OENFODBDRjUzM0MyRTYxCis6MTAxM0UwMDAyMzNGRDM0MkYxMThGOEJGNTIzQzA2RjRENTY3NzBGQjk3Cis6MTAxM0YwMDA0QkY1NEVDNjBGRDRERkMwRjhDMTdBMTdFM0VERjVDNTQzCis6MTAxNDAwMDAwQzVGQTkyRkUxRjZFMzIwRjVGQkY4REZEMzhERDA4NzQxCis6MTAxNDEwMDAyRUQ4RDhBODAxRkM2NDRDMDgzRTZBRjBGODkzMzFDQTczCis6MTAxNDIwMDA2MDdDOTRDMkUzQjNGMzlGNkVGNDY0QTI2RTZBRDdFQzVGCis6MTAxNDMwMDBEQjExODlGQ0VCOEM0REQ2QTFDRUQ4NjQxREFBNzU5NDI2Cis6MTAxNDQwMDBGQkE2N0NFQTJGOUJCOTc2OTczQzg3QkFEMjMxQUUyMEI3Cis6MTAxNDUwMDA2NjNFOUY1RkZCRTlGQzBBN0ZCNDIyREY5RDA3QjkxQzUzCis6MTAxNDYwMDAzQjk2OUZCQTk1RkRBNDhERUJBMDI3RUZCQTJFOUFFQjgxCis6MTAxNDcwMDA4MDZGRDI3OTlDM0U5RDlCMzE3NTVEMzZFMUI5MTEwQTMyCis6MTAxNDgwMDBFQjJGRjk4QkVCNEJGNDczMjVBRDkzREYyOUVGNTEwQTZBCis6MTAxNDkwMDBENUVBMzJBQ0JGNzJBNDZEMkFGQ0VGMTcyRUY3QURBMENGCis6MTAxNEEwMDA0M0U3NzdEMUE4NjVBOUM4ODdCQTRDOEVGNzUwQzdGNTJFCis6MTAxNEIwMDBGQ0RFMjQ3MDlFRDJFQjdERkFCODBFNTdFRTVEOTgzN0I1Cis6MTAxNEMwMDAzMzYzRENCQTI5RjAzQjY0NjRGMDczMkVCMzY4MDE1RENBCis6MTAxNEQwMDAyRTQzQjhCMjk2RkQ5NkMzMDgzRjcwOTdBNkM3NzkwRTAzCis6MTAxNEUwMDA5OTE3RkJDRDBFNjMwQ0VBMzc2MUI5QjExRTlBRDdBNUU3Cis6MTAxNEYwMDBDOUY5OTgyNkU3RTM5QTlDREY0NjlEOENFMDNCRDQwRTIxCis6MTAxNTAwMDBEODRERUQ4MDkzNzRGRTFBRkI5ODZGNEZFNDk1OTRCMTFCCis6MTAxNTEwMDBGRThBQkUyNEUwN0E1RDcwMTZFQzRCRkE5QjI0RThGNTU3Cis6MTAxNTIwMDA2NjREN0YxMzM0N0ZEMzk1NUI1MjI1RTdGOTc4OUQyQTZBCis6MTAxNTMwMDBBRERFNzY1RUJCMDdEMUY3QUJDRjFCOTgyRjE4Q0VCREMzCis6MTAxNTQwMDA1RTc4QUNGMEYzMkZDQjczQTcxODRERjkwOEUxNzM1RjA5Cis6MTAxNTUwMDA4RTY3M0ZBNDVBNkZDRkZDODRFQzdDRUU1NDc5MEUxMDVBCis6MTAxNTYwMDBGQjJENzI1QzgyMjMwNzc2QjI1NkFCQjdGNjdBMEQxRTVFCis6MTAxNTcwMDAxM0VBRDMzMURERTkzMTg4QkY5QTdERTlGOEMxQkZBOTBCCis6MTAxNTgwMDBFQ0FGNkJBNjEwNEVGMDU1NDVFRUFGNjY2RTc3RkEzMEI1Cis6MTAxNTkwMDBDQzU3NkMwNkFFNkYzN0M5RkUxMzlBRkRENUE0NjhFQjI1Cis6MTAxNUEwMDA2OUZCMTE1NjVGMTJFNDExMzhGNDcyRDI2MkMyMzc0NUZBCis6MTAxNUIwMDBGODk3NEFCRkVGNEY2NzdGMkRGQ0U5NzNFMTE3MTVERkZFCis6MTAxNUMwMDAwN0MyNDk3OTY1QzFENEM1QzY5MUUwODc2RjA3RjBFQUMzCis6MTAxNUQwMDA4MjlDQzVDNjFCRDFERkZBODEzREI4N0Y4NDJGNDlCMUZCCis6MTAxNUUwMDAwM0NGOTZGRDIzNUE3NzBDNzMwNkUxQTY5NzNFNDBCRkMyCis6MTAxNUYwMDBEOTkwQjNCODgwRjBEOTE2RUZCMTdBRThDRDhCNTJCRjRECis6MTAxNjAwMDA2Q0ZCREE0RTgzNkY1NTFEMzI2RkNGREJENzc2RTEyNTQ5Cis6MTAxNjEwMDBDNEU1QjY0ODI3RENGQkRFRkM2NEU2RjdEQThFREQ5QjJBCis6MTAxNjIwMDBBMTZGQkRBREYyM0U2MDUzQ0IxRjc3RkM5MkM3NTk3MERFCis6MTAxNjMwMDA0RDQyRUJGQUIyMDU3RDY3QzU5MUZGNTgwNEJBNjY4NzQzCis6MTAxNjQwMDBGQkJFMDRGRUUwOTExOTRDRTdFQ0UxRDJBRTFGM0U5MkU2Cis6MTAxNjUwMDBCNzE4NzZEQURCQjZFRjY3QjBCRkQ5RDE5NEQwODI5RUU3Cis6MTAxNjYwMDAxNzZDNUM4N0E4REMzRkExMDA3NkRBMUJEOUJEMDBFQkM0Cis6MTAxNjcwMDBENzNFNkY3MTQyNEYyQkY3QzdFN0ExM0U3MDMwNUZENjYwCis6MTAxNjgwMDBDMzJCMjY2RTQ5NDI5QzM1QkNCMjc3RDcyRjcxQkZGQTY3Cis6MTAxNjkwMDBCQzhERUY4NUVBNjI2NDlFNTdBOTM2NEU1QkMxRjJEQkQyCis6MTAxNkEwMDBCOUVCNjlEMEJERDdDNkY3QjMxNUE4NTUxMTVFQjEyQkZDCis6MTAxNkIwMDA4REVCRjhBRjdFRjNGMTAyQzhBMTUwRERCRTBCRUQ1RkZDCis6MTAxNkMwMDAzRTY3MzM4MDBGMjdDQ0FFRTg5QjYxODcyNzRDN0NERURBCis6MTAxNkQwMDBBQ0QwRjA4QTkzQzMyNTNERTEzRDQ1MkNCRkQ4MkQ0OUMwCis6MTAxNkUwMDA4OEIzOTVDMzdGN0UxQkU4OUVBRDZFRDk4MUYzOEVEOEZCCis6MTAxNkYwMDA2REUxQkI4OUIzN0I4OTZGMzRFRjZDQjM2OTBBQTREQ0ZECis6MTAxNzAwMDBCQjM3RDIwODdEMzlBRjZDNTlGMDE0RDY2Rjk2RTNDRTUzCis6MTAxNzEwMDBEQkI2MzAzRjNEQ0RFMzA1QkU0N0UzMDRGQ0Q2Nzk2NTNCCis6MTAxNzIwMDBFQkEwRjZCM0NEQkJCMzcwMUUzREY3RkM2QzNFOTdFQTYxCis6MTAxNzMwMDBGQUFCREI0QkU1NzM5NjQxNzE5MTNEMDFGOUEzNEFFRDlDCis6MTAxNzQwMDA2RjYxRjc4ODA4OEFCNzE1MUE3QUVFRTA5M0JENEY4OTYyCis6MTAxNzUwMDA4MUY5RTc1QTRDN0UzM0YxQThDMjIyRDY1OTYzMDZFQ0QwCis6MTAxNzYwMDBBMTMyRjE5NjYyRUNBRkQyRDA5ODhFQkNBNTYyNkFDRjVFCis6MTAxNzcwMDAwMkQ4QzU1OTlCQjAyNkQwQjhCN0I0Qjg1NTc5NjBDRDVBCis6MTAxNzgwMDAxQ0U0QkZEN0EyRTdCMkU2OEYyRTI2QzhGODc1QjFEREZDCis6MTAxNzkwMDBFNjBEQkU5NzBDODVFRkQ3MEJGQkRCNjkwM0Y4M0RDQjVECis6MTAxN0EwMDAyRDlDQzNFQkVCQkQ2NUY2NTVFMzlDNTYxQjIzRkRDNzkzCis6MTAxN0IwMDAwNzM0QkU4NUZDRDgzNzVBQkM1QkI4NkFGMEY4RkVGQzJCCis6MTAxN0MwMDAxOEZFN0VBREI5MjcxREYxNEY1RjNGOTBBRkZCQjU5RTcwCis6MTAxN0QwMDA3NEY4QUJEMDc5QjM5MThFQzA4RkJDQTBCMDFGQTkzQzc4Cis6MTAxN0UwMDBBMDdDQTgxMjlGMkFBRDFFQUYwQUJFMDhCM0JFNEZFMzZECis6MTAxN0YwMDA2NTQ1Q0U0Qjk4QTZGMTlERTY2RTI4NDhFNkVGNTZCNkI1Cis6MTAxODAwMDBEODVDMzY5QTU3MTVENjEzODVCQ0E4M0FCMjI3MEFGOTgwCis6MTAxODEwMDA0RUVGMkJBQTY4RDJDNDE1MUJBN0M5Mjc0NTEzNTk1MEYwCis6MTAxODIwMDBCREIxQzI2NzcyRDlCMjg2OTAzM0YyMjcxQUI3MEM3RjY2Cis6MTAxODMwMDBEM0Y3OUYyOTQ4RTFGRDk0Qjc4N0YzRjc4NEJENjcxQTcyCis6MTAxODQwMDBGNEI0N0NGQkUwNzlEODk3M0RDOEZFN0FEQjc3QzYwNTE3Cis6MTAxODUwMDA5RkNCNTMzNEJBMDNDQTg3NkMyNzgxNkYzRTRBODJEQzIwCis6MTAxODYwMDAyQjBENjIxREVFMkZDRkQxMUNEQzZCMTIyRUFDMTJFN0JDCis6MTAxODcwMDA3QkNGQ0FCRjQ0ODQ0MTVGQ0U1REFDNjZCQkVENTU3QTc5Cis6MTAxODgwMDBEOEFGQkQ1MzMwODdGRDUyQUZBOTg3RkREQTFCNDdFRUI1Cis6MTAxODkwMDA2NEZGRDAzQkFDNjcwMUZDRDQzQjA1Q0I2NEZGQzg5RTIyCis6MTAxOEEwMDAwNTBFRUFERkE3RTM2MzA0QzdGREY3OEZENEIwRkY5ODA2Cis6MTAxOEIwMDBBRENBNzcxNTYyQTdDOTJFRUI0MTFCNEVENkYzRjlDMjBDCis6MTAxOEMwMDBFNDA4M0U3RjlGMkFEMEVBM0QwM0YyRTE3Mzk3NkUzNzJBCis6MTAxOEQwMDBCREMyQjFFRjAwRUNCMDNDODJFQjNBOTQ0N0I1QkM4NDlBCis6MTAxOEUwMDA3QzZGN0U5QzEzRUYzNUNBMzE0RkVBODEzOUY4QkUzMUU3Cis6MTAxOEYwMDAzNkU2RDI1MkM4RTdGNkQxRUVBMjgyMUNEQzZGRjZGMEQzCis6MTAxOTAwMDAzOTgyQjQ5QUUzNERFREVGMkM3QzlFMEM5OEZBNzZDMUE3Cis6MTAxOTEwMDA0RkE1OEY3NkNGMkEyMDNBQUFDRERERUJCMzg5QTQwQjUxCis6MTAxOTIwMDBBNjlFMkU5NEM4NjdBOUQyMUY4OURENTJBRjdBMzM3NzVECis6MTAxOTMwMDBDQTdCMUFFREJFRjIyRThERkY4MjBFMzE4REQwMEI0NTgzCis6MTAxOTQwMDBDQUY3OERGNkZENkZDM0FGRjQ3NjhGNjM3RjFDNkEzN0RECis6MTAxOTUwMDA2N0RCMUY4QjgyN0ZGODEzQzU3MTRGRDA3OUZGNEY4QkU4Cis6MTAxOTYwMDA3NkYzM0RFQjNDQkMwNzIxQjg3OERENjA3REU4RkZGQUZCCis6MTAxOTcwMDA3NjNFRjc4OUNENDFFREQwQzM4NkMxNzhBODFFNDExRkMwCis6MTAxOTgwMDBGRDgzRkM4RTg3RjlCRTREQjNBQkFBQkNFRTVBRjBFMUU1Cis6MTAxOTkwMDAwQTNFOTc3MDM1MDg3RjNEMDQwRjE5MkY0QTY0OUVCMEE4Cis6MTAxOUEwMDAwREYxOUZGODUxM0RDNjdGOTJDRkU5RkI0QzAyN0U3QzQyCis6MTAxOUIwMDAyREM1MkZDNkRCQzJCRDM4QUYxOEY2NTE3QzhBOTVGMTE0Cis6MTAxOUMwMDAwOTcxQTEyQUFBOUJFQjUzQkQ2RDE2QkVFRjdEQjBFMzUyCis6MTAxOUQwMDBEMzI0RUM5RkY0OTBFQjMwNTUxRDJGQzdFMUZDQkU1NzhDCis6MTAxOUUwMDAzQjJGNTAxQzhDRTNGNzMxNkQxRDcxMzg3N0U4RURENTM2Cis6MTAxOUYwMDAwNjVGM0FFOEEyOEM4OEYzNzVCREJENDZGNUE3ODNGRTY1Cis6MTAxQTAwMDAyQUE1M0IwQkZEN0I0MTM3OEYyNzVDMDUyRTc4MUZENTIwCis6MTAxQTEwMDA4QUI0NzdEMUExQjIzRjBGOTVEQjkzOUFCRTkyNUZDODhCCis6MTAxQTIwMDBFMkY3MURBRkM4RkE4MEVFMDcyQTM0N0ZGMjNBREEzM0M0Cis6MTAxQTMwMDBBNUREREJGNTdCMjU5QTVBMDE3QjFGQzIzRjI0MTRFODA0Cis6MTAxQTQwMDA3OUYxNzJBRURGM0M1RUUwOTBCODM2OUZENzk1RjUyNTEwCis6MTAxQTUwMDBFRUFGN0RGNTdDNTY0QTI2RTY2OUUzODJGREQwQjgwMUZCCis6MTAxQTYwMDBCRjAyRkI0RjYwRkI3RkQwMTQ0N0ZCQUFEQ0ExMzhENzM1Cis6MTAxQTcwMDBDMjRGOTVBRTI5QTJFMTYyOTk3MTQ1MTFEN0NEODQ4N0Y1Cis6MTAxQTgwMDBDRjZEQTE3NDg1RUFEMUU0MDJDOUE3NEFDM0IwQzJEODE4Cis6MTAxQTkwMDBBMEY1Q0U5MTRGNEY5OEMyN0VDNjBGQkZGMzkzRDg0N0EzCis6MTAxQUEwMDA4QjUwQTdGODcxQTk3QzM3NzAyNURFMDREQjM5RjZCM0JCCis6MTAxQUIwMDA1REZBNzE5OENENjVDM0Q1N0FCQzZDNzlFM0ZBRjgyMUVCCis6MTAxQUMwMDBFODA4QTVCM0MyREQ1ODE0RTdCOEJBNURBN0Y3OUM0RDg2Cis6MTAxQUQwMDBBNzJGQ0YzNDIyOTgwRkYzRDYxNDhEMjBCOENDRkFDRjhECis6MTAxQUUwMDBGMjQxRUVGNzVDODdDNThGQjg1QTUxQkE2MjdERjQxMEE3Cis6MTAxQUYwMDA3QTczNTUzQ0Q4MUUxNEJGNTIyMDVGMkZERjZGNUM4QjZBCis6MTAxQjAwMDBGRTUwNThBREY4NEZBMjVFMjRDOEFFOUFEOUJFQzg1RTRBCis6MTAxQjEwMDA4MkUyQzI4RDA1MjE3NTg3RjI0NTYzOTE1NzBCRjdBMkNBCis6MTAxQjIwMDBCMTg4MzM2NDU3MEI5QzQzOUMyRkM5NDE4RTMyRjA5Qjg0Cis6MTAxQjMwMDAxMTBGQzM1MDdBRkU1QzIwREYyNURENTgyMEVEN0NGNUM3Cis6MTAxQjQwMDAwQzU3MDA3RUYzNjZENUMwNzk3OEU4N0E1RjE1Qzg3Q0JCCis6MTAxQjUwMDBBMjNCMkVGMjNFRkQzRDA3ODQ3REIzMkFGOTk2NjhFODRDCis6MTAxQjYwMDA3RjA3RjY5NjE4MTdFOUMwN0Q1MDYxN0VCODFDNzdDOENDCis6MTAxQjcwMDA2NjQ3RkQyNjcwRTgxMkQ3NzcwMzBGNDVDQzkzRjcwNjJBCis6MTAxQjgwMDAxMTYyMjRGNTc3MjU0QzZBMEE4RTIzQkYyOTk0RkIwRDM4Cis6MTAxQjkwMDBDRjk2Nzk0QjVEODZFOUVGRDc4NzMyMjNBRkQ0ODczODZDCis6MTAxQkEwMDA2RkM4MENFN0ZCOTJERUY2MkYzODZFMDUzQTczRUNCODdGCis6MTAxQkIwMDBEN0U4RURBNkQzMjFEOTUzREQzN0ZGMUQ4N0Y4REFEQjRGCis6MTAxQkMwMDBGOTY3N0U4N0Q2RkJGNUE3RkMzRTZEQTNGNjNFRjBGNUUwCis6MTAxQkQwMDA3NkVEN0Q1N0I3MjMxMkVEODFFMjhGOEIzMDZFOTMwNjQxCis6MTAxQkUwMDAwN0VBMDRCMjVFQUM0M0ZERkNBQkQ3MDM4MkNFQzFBM0NGCis6MTAxQkYwMDAwQjg3M0UwN0M3QjgyMzgyRUIwNDhFRjhBMUVBMkFDMUZGCis6MTAxQzAwMDA3NTgyRDQzNDU5MjcwMDQ0OUQyMEQ1MjRFQjA0QzA1MTVCCis6MTAxQzEwMDAyNzAwNDQ5RDAwRURBODEzMDA0NzlEMDAzOEVBMDRDMDRBCis6MTAxQzIwMDA1MTI3MDA0NDlEMDBFRDVGQ0U5M0VGNjUwMkE0QzRCMjNFCis6MTAxQzMwMDA3RTE5QzFGRUZEREU2NkQ1OEJGQ0ZDREU0M0YyMUVFQTlBCis6MTAxQzQwMDBERTQ2ODVERjY5NURBMEVGMjNDRTVERjU1RUU3ODBGNkI5Cis6MTAxQzUwMDA1RUM3Qjc5NUVGRjVFQURBNTQyNzQ0NTU2N0VBM0I4QTQxCis6MTAxQzYwMDBCQTRFNURBQkUyNUMwM0ZGNTIzRjhGQkZCRkIxMzNFN0JCCis6MTAxQzcwMDBCRDUyQjQzNzlCOUMwNjA3RTQ3NDMxMEVGNUFBQ0FDRTU4Cis6MTAxQzgwMDA2NkFFM0YxNUM0MUYzMkIzN0M1QjE0ODE3QUU5OUQxNkEyCis6MTAxQzkwMDA3OUNFQUQ1MUE5NzUwQURGODc3MjFFNUM2M0U5RTZGMzYwCis6MTAxQ0EwMDA0N0Q1MUVDNTVFMTY3QzlGN0JDM0U3RUMwN0Q2REFBMjNDCis6MTAxQ0IwMDA5QTQwNjc4RENGNjYyRjFCRTJGRDA3REYwQjNCQzQ5NTczCis6MTAxQ0MwMDBGQkU2QTU3Mjg4QTg4OTI4RTJGQkU2QTVCODY3MjYyODY2Cis6MTAxQ0QwMDBENEFGOEQ3QzdGNEMwN0QzRTFEMDQ3QkNBQkNBODA1QkNGCis6MTAxQ0UwMDBCNzRCQkIwRjc5NEY1NUQ5RDlCQTNFNTE1QzdEMEY4RDlCCis6MTAxQ0YwMDBDQTAwRTQxRjdBRkZFQzJFOEM4QzNEMUQwRTQ3MjEyNjc2Cis6MTAxRDAwMDAyMzZGMkE3RUJDNkM1RjFCN0RBRjdGOEI4NUYzOEUxNUE2Cis6MTAxRDEwMDBGOUVFNjVEMEEzQTMyNjE3RDc0OThFMUVCMkYxRjlFOEQ0Cis6MTAxRDIwMDA5M0FERTMwN0Q1NDlCRTcwQjlBQjBCRjk3RTdFMzREN0NFCis6MTAxRDMwMDAyRDU2OUExNDhFQ0JGOUM1RTNFMkY5RERDMDMxMTNDN0Y1Cis6MTAxRDQwMDA5RjBFNTc0OTJEQzZBRDlDRTRFMEZBNTRBMTQ1RENDNzZGCis6MTAxRDUwMDBFQjY4RUZCNDA4QjIzRDE1QUU1NUJDMDZDMjE3MDlBNzMzCis6MTAxRDYwMDAxOUY2QjM5MEQ4QzZGQTYyOEFEODgwRjc1NDBCODU3Q0VFCis6MTAxRDcwMDBERkEwRUJDRENBQUQwQUU3MDU1QzI4ODhDM0JEQTRFNEFCCis6MTAxRDgwMDBFRkMyQ0U3RkJCODRGNzBCNEIyQzMyN0Y0RDM0QzhGQkE4Cis6MTAxRDkwMDBFQ0M0NERGMjdEQ0I0Rjg0REI4Qzc4QkI4Q0UyMjIyMEVGCis6MTAxREEwMDBDNUM5REZGNTUwQkIzQjdDNzQ5MkNDQ0YxREYxNTg3Rjg5Cis6MTAxREIwMDBEMTcxMTNCRkY3MkQ4Q0ZGNjFCQTlCRTM3NTAxQkY2MzJGCis6MTAxREMwMDA1MEZDNzdBQjk3QUZCQkI2RkQ4NEJFNjMzODZBOTJGRTFBCis6MTAxREQwMDA4NUY4QzhFN0EyMkVFODI1RDc2N0RDMEM4RkQ3OTczM0E0Cis6MTAxREUwMDA5QzM0NDNGQUM3MkJFRjEyNDk0Njc2RDAxRkRFRjcwMTI5Cis6MTAxREYwMDBDRThCODlGMTkxNEVGODNCRERFRUFGN0E5RjE4MjZBMThDCis6MTAxRTAwMDBGRTNFNzEwQzQxMTFGNDNFNzFCM0NCQzFGRTJFRDE3MDc4Cis6MTAxRTEwMDA2MkFBMDNGQ0Y4NEI4NDEzRkNEMERGMjlBRTlFNTFCMkJBCis6MTAxRTIwMDAxMzcyNzI0NTA5MEZCRThCN0I5NDJEQzRENzIyNkM0NDZDCis6MTAxRTMwMDA0MTlEREJFNzUyNTFCNzNFQTREOEY5NURGNDU1N0U3MjVGCis6MTAxRTQwMDBFQjQzNzhDNzUzOTdBQUQ4MTUwN0VBRTE1QjBBRTM4ODAyCis6MTAxRTUwMDBFRUEyOTQ2NEE2QkJBRTVERDY0Qjk5NDM3MUE4QTc2QjY2Cis6MTAxRTYwMDBGNkUwNzJCNzE1OEUxODY4OUZBREQ5NDUyRjhEOTc3QTE5Cis6MTAxRTcwMDA3MjkzMTdGQUY2MURFQUE4Q0Y2MUJDNDdEODlDQ0REQTU5Cis6MTAxRTgwMDA3OTBENzI5RjdEREQxOEFFQTdFQTdBRDNERjEyREYwNEU5Cis6MTAxRTkwMDBCRDc5QjM1MEM2OTlEMkQyNzc0REM4MDNCQTcyREQ0NzI3Cis6MTAxRUEwMDBCMEZGMDU2NTlGM0YxNEM3RkIxQkJBOEU0NTdFOTRFRkJDCis6MTAxRUIwMDAyNTQzRUI1OEJBNUZERUE1RDVDMUUxM0Y4RDVBOURENUNDCis6MTAxRUMwMDBBOEQ1NTk4RDVBOURENUE4RDU1OThENUE5REQ1QThENTM3Cis6MTAxRUQwMDA1OThENUE5REQ1QThENTU5OEQ1QTlERDVDOEY1QkJFNUM0Cis6MTAxRUUwMDAwQ0RGQTk1RkM1QjBCQkRFQzNGRDQxRkVGRkZENkJGODkzCis6MTAxRUYwMDBGRkQwM0FFOEM3MTgxNzVBMDcxNTU2NDczNEM3NTFCMkVBCis6MTAxRjAwMDA2RjU5N0YwRUE5N0IxNjBGNUZCQzgxRjg5N0RGNjA3NjUzCis6MTAxRjEwMDBBMjQ5QUY4M0UyRkRGMkJEMTFFQzBGMkUxNDBFNTlGRjYyCis6MTAxRjIwMDBENEY5MTZDMUY1RDI3RTYxOUIwMkZFRTc2NThDMzMxQUE3Cis6MTAxRjMwMDBBOEZGMkY5QTFDRjRGQTIzRUMwM0ZCODM3RDAwQzIzRTFBCis6MTAxRjQwMDA4QzY5MDNGNkYxOEM5OTRDMzg1QkM2N0IwRkM3N0IxQjAxCis6MTAxRjUwMDBDQjc1RkQxQUYyMUY4NDJGMTFGNjQxRkVFMzQyODhGRjc0Cis6MTAxRjYwMDBBMDgzQzc1REEwNjM2OUE3N0NEN0E0QkZERkNDMjNGMEEzCis6MTAxRjcwMDBENTk0MjFGQzg5NEZGQTkzMzE2MUJFQkRGOENFOThEQTMxCis6MTAxRjgwMDAzMDdFMUY3QzU0N0I4Rjc1NzRBMzdDMTc1NzI2NEFGOENDCis6MTAxRjkwMDBCQjQzRjg5NTI4Qzg2M0M5RjBCRTBGOUVBNkYxNEIxRTNGCis6MTAxRkEwMDA4OUUwQkM2NUZEQzhBNUQzRkUzNzdFRTVGMzQyQzk4RjQ1Cis6MTAxRkIwMDBERkQ2RkIyQjNGMjE1QTBBQzJBNEZFMTU5ODQ1MDZFRTM4Cis6MTAxRkMwMDA2Qjg0MjE4Q0VEQTA1MEREQUNFMDdFNzRFNTNENjIzMjg3Cis6MTAxRkQwMDBFNDVDNjAyOUQ5MEUzQUUzQjVGQjZEMTFBQkQ1NUI4RDlFCis6MTAxRkUwMDBERDE1QkIwOTNGMTE5N0U4QzRCREQ2RTg4NDgzMDJFRjM1Cis6MTAxRkYwMDA5RjBBRUI4QTMzRTExN0ZENjNEQzEzOEE3MkYwN0U3OTY2Cis6MTAyMDAwMDA4QjgyRjlFMTk5NzJGRkI3MTc4NzM3NDFBRjAyODdDNjE0Cis6MTAyMDEwMDBFNzQwREU3MzJEOEUzNkQ0MDE5QzQ1MDk0QjcwQ0U5RjcwCis6MTAyMDIwMDAxQkVEQzg0MTFEQzBEOTM1NEFFMkYxOEUzNkM1ODk1NDMxCis6MTAyMDMwMDAzNjYxNDkwMUJGM0ZCMzZFRjlDNDhBNzc2QjhBODhBNkJGCis6MTAyMDQwMDA3RDU5ODZCOTczRjA5RDlBRTJDRkU0Qjk1OUY0NzExQ0I5Cis6MTAyMDUwMDBCQkIxNDg5RUJGNDZCQzJFRkNCOEI3RUE5QjE5QzlGNzc2Cis6MTAyMDYwMDA2NzIyRDM5MTgzN0VDQTJCQkY1RjQ0RkE3N0U0MDdBRTIxCis6MTAyMDcwMDA5QjAwMTMzNTNBRTM3MThCQTg0MkFBREQzNkMwRTNEQTQwCis6MTAyMDgwMDA3RDVFOTdDMTVEMEE1ODE0RTUzMTcyQkJDMTlCMERGOEE2Cis6MTAyMDkwMDA5NkMxRjc1M0I0OTMzRTE3NjE5REEyQzcyNjRGQ0MyMDNCCis6MTAyMEEwMDAzQ0QxRTI2MzNGRDlFMTcyREQwMkZBNUU5Q0UxMkEwNjhGCis6MTAyMEIwMDAwQ0FEOUY0M0I2MzhFNzEzM0RCN0EyM0ZGNDFEOTYyRUYzCis6MTAyMEMwMDBDRjI1NDU1MkVGQ0I4QUE0RkY5OEJFNTZERUM3ODZDQUZECis6MTAyMEQwMDBCREFDQzhBMEY5QjdCRjRGMzdEMTVCOEFFRkU5RjQ4QjJECis6MTAyMEUwMDAyRDhCQjI0MTBGRDE3QjBGRjY0MUY0MkUwMDE0MTEzMTJDCis6MTAyMEYwMDA1Q0VGQjhCNjlFNzlGODdCNjU0NTUyQkZDODlGNTU3REE5Cis6MTAyMTAwMDAyMkZEMTlDMzc0QTM3NzE4RjJDNzUxMEY3ODg3ODFERUI3Cis6MTAyMTEwMDA1MThEN0QzNkZDM0I4QzY3M0Q3RDM2QzRGNzY3NTdGN0E0Cis6MTAyMTIwMDBEOUQwRkVBQzRCQkU5MzBFNURCRkIxNDhCRTlGNDg5RjU5Cis6MTAyMTMwMDBERUM3RjNDN0QyQjdCQTM5NEZFRjFCODYzQzJBQkRGQ0M2Cis6MTAyMTQwMDA5M0Y1RjJERTI1ODNFM0NCNTgyREJFOEM3RDIwQTVCRDEzCis6MTAyMTUwMDA4N0Y0NkRFQzkzRDE3Q0JGMkQwQTYyQjlCRkQyMkFFRDEyCis6MTAyMTYwMDBCNEYyODFCMjgzNkQwNEM3NkYyMzdBODNGMkFGMDk1RTQ0Cis6MTAyMTcwMDBBMjdCNTA1RTY0RUM5N0VGMkQwOTA3OUZGNjk4MTg4N0I1Cis6MTAyMTgwMDBDRTIyQkZBQTExRjJCREU1MjhDRDZGMjA2RjJCMjVCRjRGCis6MTAyMTkwMDA1MDUzN0VFNDEyQkYwM0MwN0NBQzhGM0I1QkU4NUZCQjU3Cis6MTAyMUEwMDA0OUUyMTRBRTcxMUU1RDM2NkY0RDE3OUYwRkI3NUQ2OTIyCis6MTAyMUIwMDBEN0NFOUJBREVCNzE3RUE2RkM2RDUwN0I2NUQ5RTEyRTMxCis6MTAyMUMwMDBDNDlCQUEzRDgzREI2Qjk2N0ZDRUU3NThDQURGMDZCNTdBCis6MTAyMUQwMDBERkYzRDMwRkY5OUQ0RDVERkJFMDc2OTJFRjUzOTBCRjk3Cis6MTAyMUUwMDAyRURGQTMyNkRGMDQ5Q0Y3OEVENjg0MzlFNUJGMUZGMENGCis6MTAyMUYwMDBBRDgwQkQzNzU1NDdGMEZCRDk5REJGQzk2M0JERDFFNTYzCis6MTAyMjAwMDA0REYzOUJCRTlCN0VBQ0U1RjE5RTNDOTEwMTdCRjgzNjg1Cis6MTAyMjEwMDBEODBCRkY5NDM2QzgzRjc5QjhDRTM3MkI5MkZENEU5RDMwCis6MTAyMjIwMDA3NkJFQUEyREIzNzM5QzRGQUNCNUIyRkYyQTU0QzM5Q0EzCis6MTAyMjMwMDBDMDZCOEREMkNGODg2MjU1RjM1MzNFQjZGRjEzQjcwREY2Cis6MTAyMjQwMDBFMzdBMUU2RjAwNzhDQzI0N0U3NzFDQjc1NkUyN0QyMzlDCis6MTAyMjUwMDAyQ0VDMUYwQTBEMjVENUJCMDkxRTMxMkM2NzNGOTA4MDQxCis6MTAyMjYwMDAxNzk3MjRGNzY3RTAxRjU0RDhBRkJDN0ZBODMzRkIxNDNGCis6MTAyMjcwMDA3OUJGRUZDOEMxNzk1N0JGNkY2QUQ4RTg2RDNEODBGMzY5Cis6MTAyMjgwMDBCMkUyN0Q3MjI5RUE4QTc3NDRGMEZENDEwMEY1NDZEQTMwCis6MTAyMjkwMDA0RkMzMzBFOTQ3MUJFNkE3NzMxQzA4ODg5MkQyMTVDOEM0Cis6MTAyMkEwMDA0M0U2ODU3MUZEQjE2MTk4RTM1MURDMjczNjU0NENFNDc3Cis6MTAyMkIwMDAzQ0ZBRTBERjY0RENFRDlCNjM3NTIyOEY2QTk4RUM1ODkyCis6MTAyMkMwMDA4M0Y3MkEwRDBGMzhCOEZGNTU0NUFFRTc3OTU0RjJBN0NBCis6MTAyMkQwMDA2MThFREM3RjQzNDUwQzlGN0I3NDM5MzQzNEJBNDZFMjBGCis6MTAyMkUwMDA3RTZBQzYxOEY3N0Y0MjZFQTNCNEZCQjk4NjY0NkEyNzdDCis6MTAyMkYwMDBGODg0NTIzMkZGMjc1ODY3OTJBNDc3RDIwQzA3Q0JFREFGCis6MTAyMzAwMDBFOEZDODk4RkVFNzI3MDM4RjFFMzlFQTg2RTU2RTRBMDY3Cis6MTAyMzEwMDA3M0YxRkYwMDg3NTFEOUY2MTAzNzAwMDAwMDAwMDAwMDZDCis6MTAyMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDUwMDE1MDAwMDAwMDAwMDkzCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvY3hnYjMvYWVsMjAwNV9vcHRfZWRjLmJpbi5paGV4IGIvZmlybXdhcmUvY3hnYjMvYWVsMjAwNV9vcHRfZWRjLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZDZlNWQKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9jeGdiMy9hZWwyMDA1X29wdF9lZGMuYmluLmloZXgKQEAgLTAsMCArMSw2OSBAQAorOjEwMDAwMDAwQ0MwMDJGRjRDQzAxM0NENENDMDIyMDE1Q0MwMzMxMDUxQworOjEwMDAxMDAwQ0MwNDY1MjRDQzA1MjdGRkNDMDYzMDBGQ0MwNzJDOEJGNQorOjEwMDAyMDAwQ0MwODMwMEJDQzA5NDAwOUNDMEE0MDBFQ0MwQjJGNzIwNworOjEwMDAzMDAwQ0MwQzMwMDJDQzBEMTAwMkNDMEUyMTcyQ0MwRjMwMTI0MQorOjEwMDA0MDAwQ0MxMDEwMDJDQzExMjVEMkNDMTIzMDEyQ0MxMzEwMDJERAorOjEwMDA1MDAwQ0MxNEQwMUVDQzE1MjdEMkNDMTYzMDEyQ0MxNzEwMDJERgorOjEwMDA2MDAwQ0MxODIwMDRDQzE5M0M4NENDMUE2NDM2Q0MxQjIwMDc1NQorOjEwMDA3MDAwQ0MxQzNGODdDQzFEODY3NkNDMUU0MEI3Q0MxRkE3NDYzNAorOjEwMDA4MDAwQ0MyMDQwNDdDQzIxNTY3M0NDMjIyOTgyQ0MyMzMwMDI4RAorOjEwMDA5MDAwQ0MyNDEzRDJDQzI1OEJCRENDMjYyODYyQ0MyNzMwMTJBMQorOjEwMDBBMDAwQ0MyODEwMDJDQzI5MjA5MkNDMkEzMDEyQ0MyQjEwMDI2MgorOjEwMDBCMDAwQ0MyQzVDQzNDQzJEMDMxNENDMkUyOTQyQ0MyRjMwMDI4NworOjEwMDBDMDAwQ0MzMDEwMDJDQzMxRDAxOUNDMzIyMDMyQ0MzMzMwMTJBQgorOjEwMDBEMDAwQ0MzNDEwMDJDQzM1MkEwNENDMzYzQzc0Q0MzNzY0MzU5MQorOjEwMDBFMDAwQ0MzODJGQTRDQzM5M0NENENDM0E2NjI0Q0MzQjU1NjNENQorOjEwMDBGMDAwQ0MzQzJENDJDQzNEMzAwMkNDM0UxM0QyQ0MzRjQ2NERDMQorOjEwMDEwMDAwQ0M0MDI4NjJDQzQxMzAxMkNDNDIxMDAyQ0M0MzIwMzI4OQorOjEwMDExMDAwQ0M0NDMwMTJDQzQ1MTAwMkNDNDYyRkI0Q0M0NzNDRDQ1MgorOjEwMDEyMDAwQ0M0ODY2MjRDQzQ5NTU2M0NDNEEyRDQyQ0M0QjMwMDI5NgorOjEwMDEzMDAwQ0M0QzEzRDJDQzREMkVEMkNDNEUzMDAyQ0M0RjEwMDIzMAorOjEwMDE0MDAwQ0M1MDJGRDJDQzUxMzAwMkNDNTIxMDAyQ0M1MzAwMDRGMAorOjEwMDE1MDAwQ0M1NDI5NDJDQzU1MzAwMkNDNTYxMDAyQ0M1NzIwOTJCOAorOjEwMDE2MDAwQ0M1ODMwMTJDQzU5MTAwMkNDNUE1Q0MzQ0M1QjAzMTc2QworOjEwMDE3MDAwQ0M1QzJGNzJDQzVEMzAwMkNDNUUxMDAyQ0M1RjI5NDI4OQorOjEwMDE4MDAwQ0M2MDMwMDJDQzYxMTAwMkNDNjIyMkNEQ0M2MzMwMUQzOQorOjEwMDE5MDAwQ0M2NDI4NjJDQzY1MzAxMkNDNjYxMDAyQ0M2NzJFRDJCQgorOjEwMDFBMDAwQ0M2ODMwMDJDQzY5MTAwMkNDNkEyRDcyQ0M2QjMwMDI2NAorOjEwMDFCMDAwQ0M2QzEwMDJDQzZENjI4RkNDNkUyMTEyQ0M2RjMwMTJFMQorOjEwMDFDMDAwQ0M3MDEwMDJDQzcxNUFBM0NDNzIyREMyQ0M3MzMwMDIwOQorOjEwMDFEMDAwQ0M3NDEzMTJDQzc1NkY3MkNDNzYxMDAyQ0M3NzI4MDdEMgorOjEwMDFFMDAwQ0M3ODMxQTdDQzc5MjBDNENDN0EzQzI0Q0M3QjY3MjQ1MgorOjEwMDFGMDAwQ0M3QzEwMDJDQzdEMjgwN0NDN0UzMTg3Q0M3RjIwQzRGQworOjEwMDIwMDAwQ0M4MDNDMjRDQzgxNjcyNENDODIxMDAyQ0M4MzI1MTQ4MgorOjEwMDIxMDAwQ0M4NDNDNjRDQzg1NjQzNkNDODZERkY0Q0M4NzY0MzZGMQorOjEwMDIyMDAwQ0M4ODEwMDJDQzg5NDBBNENDOEE2NDNDQ0M4QjQwMTY4QworOjEwMDIzMDAwQ0M4QzhDNkNDQzhEMkIyNENDOEUzQzI0Q0M4RjY0MzUxOAorOjEwMDI0MDAwQ0M5MDEwMDJDQzkxMkIyNENDOTIzQzI0Q0M5MzY0M0FEOQorOjEwMDI1MDAwQ0M5NDQwMjVDQzk1OEE1QUNDOTYxMDAyQ0M5NzI3MzE2NQorOjEwMDI2MDAwQ0M5ODMwMTFDQzk5MTAwMUNDOUFDN0EwQ0M5QjAxMDAzRQorOjEwMDI3MDAwQ0M5Q0M1MDJDQzlENTNBQ0NDOUVDNTAzQ0M5RkQ1RDVBMAorOjEwMDI4MDAwQ0NBMEM2MDBDQ0ExMkE2RENDQTJDNjAxQ0NBMzJBNEMxRQorOjEwMDI5MDAwQ0NBNEM2MDJDQ0E1MDExMUNDQTZDNjBDQ0NBNzU5MDA5MworOjEwMDJBMDAwQ0NBOEM3MTBDQ0E5MDcwMENDQUFDNzE4Q0NBQjA3MDBCNAorOjEwMDJCMDAwQ0NBQ0M3MjBDQ0FENDcwMENDQUVDODAxQ0NBRjdGNTA5MgorOjEwMDJDMDAwQ0NCMEM4MDJDQ0IxNzc2MENDQjJDODAzQ0NCMzdGQ0U3RgorOjEwMDJEMDAwQ0NCNEM4MDRDQ0I1NTcwMENDQjZDODA1Q0NCNzVGMTFCOAorOjEwMDJFMDAwQ0NCOEM4MDZDQ0I5NDc1MUNDQkFDODA3Q0NCQjU3RTE4QgorOjEwMDJGMDAwQ0NCQ0M4MDhDQ0JEMjcwMENDQkVDODA5Q0NCRjAwMDAxMAorOjEwMDMwMDAwQ0NDMEM4MjFDQ0MxMDAwMkNDQzJDODIyQ0NDMzAwMTRDRQorOjEwMDMxMDAwQ0NDNEM4MzJDQ0M1MTE4NkNDQzZDODQ3Q0NDNzFFMDJENworOjEwMDMyMDAwQ0NDOEMwMTNDQ0M5RjM0MUNDQ0FDMDFBQ0NDQjA0NDY0QworOjEwMDMzMDAwQ0NDQ0MwMjRDQ0NEMTAwMENDQ0VDMDI1Q0NDRjBBMDA3NAorOjEwMDM0MDAwQ0NEMEMwMjZDQ0QxMEMwQ0NDRDJDMDI3Q0NEMzBDMEMzQQorOjEwMDM1MDAwQ0NENEMwMjlDQ0Q1MDBBMENDRDZDMDMwQ0NENzBBMDA5NAorOjEwMDM2MDAwQ0NEOEMwM0NDQ0Q5MDAxQ0NDREFDMDA1Q0NEQjdBMDY5QQorOjEwMDM3MDAwQ0NEQzAwMDBDQ0REMjczMUNDREUzMDExQ0NERjEwMDEyRAorOjEwMDM4MDAwQ0NFMEM2MjBDQ0UxMDAwMENDRTJDNjIxQ0NFMzAwM0ZBQgorOjEwMDM5MDAwQ0NFNEM2MjJDQ0U1MDAwMENDRTZDNjIzQ0NFNzAwMDBDNgorOjEwMDNBMDAwQ0NFOEM2MjRDQ0U5MDAwMENDRUFDNjI1Q0NFQjAwMDBBMgorOjEwMDNCMDAwQ0NFQ0M2MjdDQ0VEMDAwMENDRUVDNjI4Q0NFRjAwMDA3QworOjEwMDNDMDAwQ0NGMEM2MkNDQ0YxMDAwMENDRjIwMDAwQ0NGMzI4MDYxNworOjEwMDNEMDAwQ0NGNDNDQjZDQ0Y1QzE2MUNDRjY2MTM0Q0NGNzYxMzVEOAorOjEwMDNFMDAwQ0NGODU0NDNDQ0Y5MDMwM0NDRkE2NTI0Q0NGQjAwMEJDNgorOjEwMDNGMDAwQ0NGQzEwMDJDQ0ZEMjEwNENDRkUzQzI0Q0NGRjIxMDUxQQorOjEwMDQwMDAwQ0QwMDM4MDVDRDAxNjUyNENEMDJERkY0Q0QwMzQwMDVENAorOjEwMDQxMDAwQ0QwNDY1MjRDRDA1MTAwMkNEMDY1REQzQ0QwNzAzMDZCRQorOjEwMDQyMDAwQ0QwODJGRjdDRDA5MzhGN0NEMEE2MEI3Q0QwQkRGRkQyQQorOjEwMDQzMDAwQ0QwQzAwMEFDRDBEMTAwMkNEMEUwMDAwN0NDN0FFNTlDOAorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2N4Z2IzL2FlbDIwMDVfdHd4X2VkYy5iaW4uaWhleCBiL2Zpcm13YXJlL2N4Z2IzL2FlbDIwMDVfdHd4X2VkYy5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjVlOWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvY3hnYjMvYWVsMjAwNV90d3hfZWRjLmJpbi5paGV4CkBAIC0wLDAgKzEsOTMgQEAKKzoxMDAwMDAwMENDMDA0MDA5Q0MwMTI3RkZDQzAyMzAwRkNDMDM0MEFBMjIKKzoxMDAwMTAwMENDMDQ0MDFDQ0MwNTQwMUVDQzA2MkZGNENDMDczQ0Q0QUQKKzoxMDAwMjAwMENDMDgyMDM1Q0MwOTMxNDVDQzBBNjUyNENDMEIyNkEyNUUKKzoxMDAwMzAwMENDMEMzMDEyQ0MwRDEwMDJDQzBFMjlDMkNDMEYzMDAyRTkKKzoxMDAwNDAwMENDMTAxMDAyQ0MxMTIwNzJDQzEyMzAxMkNDMTMxMDAyNDIKKzoxMDAwNTAwMENDMTQyMkNEQ0MxNTMwMURDQzE2MkU1MkNDMTczMDEyMUMKKzoxMDAwNjAwMENDMTgxMDAyQ0MxOTI4RTJDQzFBMzAwMkNDMUIxMDAyOUEKKzoxMDAwNzAwMENDMUM2MjhGQ0MxRDJBQzJDQzFFMzAxMkNDMUYxMDAyQTkKKzoxMDAwODAwMENDMjA1NTUzQ0MyMTJBRTJDQzIyMzAwMkNDMjMxMzAyQkYKKzoxMDAwOTAwMENDMjQ0MDFFQ0MyNTJCRTJDQzI2MzAxMkNDMjcxMDAyREIKKzoxMDAwQTAwMENDMjgyREEyQ0MyOTMwMTJDQzJBMTAwMkNDMkIyQkEyOEEKKzoxMDAwQjAwMENDMkMzMDAyQ0MyRDEwMDJDQzJFNUVFM0NDMkYwMzA1Q0QKKzoxMDAwQzAwMENDMzA0MDBFQ0MzMTJCQzJDQzMyMzAwMkNDMzMxMDAyQkIKKzoxMDAwRDAwMENDMzQyQjgyQ0MzNTMwMTJDQzM2MTAwMkNDMzc1NjYzNjAKKzoxMDAwRTAwMENDMzgwMzAyQ0MzOTQwMUVDQzNBNkY3MkNDM0IxMDAyQTQKKzoxMDAwRjAwMENDM0M2MjhGQ0MzRDJCRTJDQzNFMzAxMkNDM0YxMDAyODgKKzoxMDAxMDAwMENDNDAyMkNEQ0M0MTMwMURDQzQyMkU1MkNDNDMzMDEyQkIKKzoxMDAxMTAwMENDNDQxMDAyQ0M0NTI1MjJDQzQ2MzAxMkNDNDcxMDAyRUMKKzoxMDAxMjAwMENDNDgyREEyQ0M0OTMwMTJDQzRBMTAwMkNDNEIyQ0EyODgKKzoxMDAxMzAwMENDNEMzMDEyQ0M0RDEwMDJDQzRFMkZBNENDNEYzQ0Q0MjIKKzoxMDAxNDAwMENDNTA2NjI0Q0M1MTQxMEJDQzUyNTZCM0NDNTMwM0M0OTMKKzoxMDAxNTAwMENDNTQyRkIyQ0M1NTMwMDJDQzU2MTAwMkNDNTcyMjBCQzcKKzoxMDAxNjAwMENDNTgzMDNCQ0M1OTU2QjNDQzVBMDNDM0NDNUI4NjZCQ0UKKzoxMDAxNzAwMENDNUM0MDBDQ0M1RDIzQTJDQzVFMzAxMkNDNUYxMDAyNzQKKzoxMDAxODAwMENDNjAyREEyQ0M2MTMwMTJDQzYyMTAwMkNDNjMyQ0EyQzgKKzoxMDAxOTAwMENDNjQzMDEyQ0M2NTEwMDJDQzY2MkZCNENDNjczQ0Q0NTIKKzoxMDAxQTAwMENDNjg2NjI0Q0M2OTU2QjNDQzZBMDNDM0NDNkI4NjZCMkYKKzoxMDAxQjAwMENDNkM0MDFDQ0M2RDIyMDVDQzZFMzAzNUNDNkY1QjUzQzMKKzoxMDAxQzAwMENDNzAyQzUyQ0M3MTMwMDJDQzcyMTNDMkNDNzM1Q0MzOTUKKzoxMDAxRDAwMENDNzQwMzE3Q0M3NTI1MjJDQzc2MzAxMkNDNzcxMDAyNjQKKzoxMDAxRTAwMENDNzgyREEyQ0M3OTMwMTJDQzdBMTAwMkNDN0IyQjgyMjkKKzoxMDAxRjAwMENDN0MzMDEyQ0M3RDEwMDJDQzdFNTY2M0NDN0YwMzAzQzYKKzoxMDAyMDAwMENDODA0MDFFQ0M4MTAwMDRDQzgyMkM0MkNDODMzMDEyQTYKKzoxMDAyMTAwMENDODQxMDAyQ0M4NTZGNzJDQzg2MTAwMkNDODc2MjhGQTIKKzoxMDAyMjAwMENDODgyMzA0Q0M4OTNDODRDQzhBNjQzNkNDOEJERkY0MjQKKzoxMDAyMzAwMENDOEM2NDM2Q0M4RDJGRjVDQzhFMzAwNUNDOEY4NjU2ODkKKzoxMDAyNDAwMENDOTBERkJBQ0M5MTU2QTNDQzkyRDA1QUNDOTMyMUMyOTkKKzoxMDAyNTAwMENDOTQzMDEyQ0M5NTEzOTJDQzk2RDA1QUNDOTc1NkEzMEUKKzoxMDAyNjAwMENDOThERkJBQ0M5OTAzODNDQzlBNkY3MkNDOUIxMDAyRTYKKzoxMDAyNzAwMENDOUMyOEM1Q0M5RDMwMDVDQzlFNDE3OENDOUY1NjUzNTQKKzoxMDAyODAwMENDQTAwMzg0Q0NBMTIyQjJDQ0EyMzAxMkNDQTMxMDAyMDkKKzoxMDAyOTAwMENDQTQyQkU1Q0NBNTMwMDVDQ0E2NDFFOENDQTc1NjUzODEKKzoxMDAyQTAwMENDQTgwMzgyQ0NBOTAwMDJDQ0FBNDI1OENDQUIyNDc0QkYKKzoxMDAyQjAwMENDQUMzQzg0Q0NBRDY0MzdDQ0FFREZGNENDQUY2NDM3OEYKKzoxMDAyQzAwMENDQjAyRkY1Q0NCMTNDMDVDQ0IyODc1N0NDQjNCODg4QjUKKzoxMDAyRDAwMENDQjQ5Nzg3Q0NCNURGRjRDQ0I2NjcyNENDQjc4NjZBQUMKKzoxMDAyRTAwMENDQjg2RjcyQ0NCOTEwMDJDQ0JBMkQwMUNDQkIzMDExOTYKKzoxMDAyRjAwMENDQkMxMDAxQ0NCREM2MjBDQ0JFMTRFNUNDQkZDNjIxMDEKKzoxMDAzMDAwMENDQzBDNTNEQ0NDMUM2MjJDQ0MyM0NCRUNDQzNDNjIzRUEKKzoxMDAzMTAwMENDQzQ0NDUyQ0NDNUM2MjRDQ0M2QzVDNUNDQzdDNjI1QTIKKzoxMDAzMjAwMENDQzhFMDFFQ0NDOUM2MjdDQ0NBMDAwMENDQ0JDNjI4OUUKKzoxMDAzMzAwMENDQ0MwMDAwQ0NDREM2MkJDQ0NFMDAwMENDQ0ZDNjJDNzQKKzoxMDAzNDAwMENDRDAwMDAwQ0NEMTAwMDBDQ0QyMkQwMUNDRDMzMDExQzgKKzoxMDAzNTAwMENDRDQxMDAxQ0NENUM2MjBDQ0Q2MDAwMENDRDdDNjIxMzkKKzoxMDAzNjAwMENDRDgwMDAwQ0NEOUM2MjJDQ0RBMDBDRUNDREJDNjIzNTgKKzoxMDAzNzAwMENDREMwMDdGQ0NEREM2MjRDQ0RFMDAzMkNDREZDNjI1NTEKKzoxMDAzODAwMENDRTAwMDAwQ0NFMUM2MjdDQ0UyMDAwMENDRTNDNjI4REMKKzoxMDAzOTAwMENDRTQwMDAwQ0NFNUM2MkJDQ0U2MDAwMENDRTdDNjJDQjQKKzoxMDAzQTAwMENDRTgwMDAwQ0NFOTAwMDBDQ0VBMkQwMUNDRUIzMDExMDgKKzoxMDAzQjAwMENDRUMxMDAxQ0NFREM1MDJDQ0VFNjA5RkNDRUZDNjAwQkEKKzoxMDAzQzAwMENDRjAyQTZFQ0NGMUM2MDFDQ0YyMkEyQ0NDRjNDNjBDQjAKKzoxMDAzRDAwMENDRjQ1NDAwQ0NGNUM3MTBDQ0Y2MDcwMENDRjdDNzE4MDYKKzoxMDAzRTAwMENDRjgwNzAwQ0NGOUM3MjBDQ0ZBNDcwMENDRkJDNzI4RDMKKzoxMDAzRjAwMENDRkMwNzAwQ0NGREM3MjlDQ0ZFMTIwN0NDRkZDODAxRkUKKzoxMDA0MDAwMENEMDA3RjUwQ0QwMUM4MDJDRDAyNzc2MENEMDNDODAzNzcKKzoxMDA0MTAwMENEMDQ3RkNFQ0QwNUM4MDRDRDA2NTIwRUNEMDdDODA1NEMKKzoxMDA0MjAwMENEMDg1QzExQ0QwOUM4MDZDRDBBM0M1MUNEMEJDODA3REIKKzoxMDA0MzAwMENEMEM0MDYxQ0QwREM4MDhDRDBFNDlDMUNEMEZDODA5MDYKKzoxMDA0NDAwMENEMTAzODQwQ0QxMUM4MEFDRDEyMDAwMENEMTNDODIxRkYKKzoxMDA0NTAwMENEMTQwMDAyQ0QxNUM4MjJDRDE2MDA0NkNEMTdDODQ0RDQKKzoxMDA0NjAwMENEMTgxODJGQ0QxOUMwMTNDRDFBRjM0MUNEMUJDMDFBQ0EKKzoxMDA0NzAwMENEMUMwNDQ2Q0QxREMwMjRDRDFFMTAwMENEMUZDMDI1QUYKKzoxMDA0ODAwMENEMjAwQTAwQ0QyMUMwMjZDRDIyMEMwQ0NEMjNDMDI3QzMKKzoxMDA0OTAwMENEMjQwQzBDQ0QyNUMwMjlDRDI2MDBBMENEMjdDMDMwMDEKKzoxMDA0QTAwMENEMjgwQTAwQ0QyOUMwM0NDRDJBMDAxQ0NEMkIwMDAwNTAKKzoxMDA0QjAwMENEMkMyQjg0Q0QyRDNDNzRDRDJFNjQzNUNEMkZERkY0ODcKKzoxMDA0QzAwMENEMzA2NDM1Q0QzMTI4MDZDRDMyMzAwNkNEMzM4NTY1NEIKKzoxMDA0RDAwMENEMzQyQjI0Q0QzNTNDMjRDRDM2NjQzNkNEMzcxMDAyQjcKKzoxMDA0RTAwMENEMzgyQjI0Q0QzOTNDMjRDRDNBNjQzNkNEM0I0MDQ1MjQKKzoxMDA0RjAwMENEM0M4NjU2Q0QzRDEwMDJDRDNFMjgwN0NEM0YzMUE3REQKKzoxMDA1MDAwMENENDAyMEM0Q0Q0MTNDMjRDRDQyNjcyNENENDMxMDAyRDAKKzoxMDA1MTAwMENENDQyODA3Q0Q0NTMxODdDRDQ2MjBDNENENDczQzI0NjYKKzoxMDA1MjAwMENENDg2NzI0Q0Q0OTEwMDJDRDRBMjUxNENENEIzQzY0RkIKKzoxMDA1MzAwMENENEM2NDM2Q0Q0RERGRjRDRDRFNjQzNkNENEYxMDAyMzgKKzoxMDA1NDAwMENENTAyODA2Q0Q1MTNDQjZDRDUyQzE2MUNENTM2MTM0NUEKKzoxMDA1NTAwMENENTQ2MTM1Q0Q1NTU0NDNDRDU2MDMwM0NENTc2NTI0NTUKKzoxMDA1NjAwMENENTgwMDBCQ0Q1OTEwMDJDRDVBRDAxOUNENUIyMTA0QzYKKzoxMDA1NzAwMENENUMzQzI0Q0Q1RDIxMDVDRDVFMzgwNUNENUY2NTI0ODUKKzoxMDA1ODAwMENENjBERkY0Q0Q2MTQwMDVDRDYyNjUyNENENjMyRThENTUKKzoxMDA1OTAwMENENjQzMDNEQ0Q2NTVERDNDRDY2MDMwNkNENjcyRkY3QzUKKzoxMDA1QTAwMENENjgzOEY3Q0Q2OTYwQjdDRDZBREZGRENENkIwMDBBNDUKKzowQzA1QjAwMENENkMxMDAyQ0Q2RDAwMDA1MkE3NkIwRTQ4Cis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvY3hnYjMvYWVsMjAyMF90d3hfZWRjLmJpbi5paGV4IGIvZmlybXdhcmUvY3hnYjMvYWVsMjAyMF90d3hfZWRjLmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMTMzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9jeGdiMy9hZWwyMDIwX3R3eF9lZGMuYmluLmloZXgKQEAgLTAsMCArMSwxMDAgQEAKKzoxMDAwMDAwMEQ4MDA0MDA5RDgwMTJGRkZEODAyMzAwRkQ4MDM0MEFBRUEKKzoxMDAwMTAwMEQ4MDQ0MDFDRDgwNTQwMUVEODA2MkZGNEQ4MDczREM0OEMKKzoxMDAwMjAwMEQ4MDgyMDM1RDgwOTMwMzVEODBBNjUyNEQ4MEIyQ0IyMjkKKzoxMDAwMzAwMEQ4MEMzMDEyRDgwRDEwMDJEODBFMjZFMkQ4MEYzMDIyN0MKKzoxMDAwNDAwMEQ4MTAxMDAyRDgxMTI3RDJEODEyMzAyMkQ4MTMxMDAyOUIKKzoxMDAwNTAwMEQ4MTQyODIyRDgxNTMwMTJEODE2MTAwMkQ4MTcyNDkyOTYKKzoxMDAwNjAwMEQ4MTgzMDIyRDgxOTEwMDJEODFBMjc3MkQ4MUIzMDEyOEIKKzoxMDAwNzAwMEQ4MUMxMDAyRDgxRDIzRDJEODFFMzAyMkQ4MUYxMDAyM0YKKzoxMDAwODAwMEQ4MjAyMkNERDgyMTMwMUREODIyMjdGMkQ4MjMzMDIyRTMKKzoxMDAwOTAwMEQ4MjQxMDAyRDgyNTU1NTNEODI2MDMwN0Q4MjcyNTIyNUYKKzoxMDAwQTAwMEQ4MjgzMDIyRDgyOTEwMDJEODJBMjE0MkQ4MkIzMDEyNDEKKzoxMDAwQjAwMEQ4MkMxMDAyRDgyRDQwMTZEODJFNUU2M0Q4MkYwMzQ0QkEKKzoxMDAwQzAwMEQ4MzAyMTQyRDgzMTMwMTJEODMyMTAwMkQ4MzM0MDBFMDUKKzoxMDAwRDAwMEQ4MzQyNTIyRDgzNTMwMjJEODM2MTAwMkQ4MzcyQjUyQzIKKzoxMDAwRTAwMEQ4MzgzMDEyRDgzOTEwMDJEODNBMjc0MkQ4M0IzMDIyQkIKKzoxMDAwRjAwMEQ4M0MxMDAyRDgzRDI1RTJEODNFMzAyMkQ4M0YxMDAyMkQKKzoxMDAxMDAwMEQ4NDAyRkE0RDg0MTNEQzREODQyNjYyNEQ4NDM0MTRCOUYKKzoxMDAxMTAwMEQ4NDQ1NkIzRDg0NTAzQzZEODQ2ODY2QkQ4NDc0MDBDNUEKKzoxMDAxMjAwMEQ4NDgyNzEyRDg0OTMwMTJEODRBMTAwMkQ4NEIyQzRCNDUKKzoxMDAxMzAwMEQ4NEMzMDlCRDg0RDU2QjNEODRFMDNDM0Q4NEY4NjZCOUUKKzoxMDAxNDAwMEQ4NTA0MDBDRDg1MTIyNzJEODUyMzAyMkQ4NTMxMDAyQzUKKzoxMDAxNTAwMEQ4NTQyNzQyRDg1NTMwMjJEODU2MTAwMkQ4NTcyNUUyMTUKKzoxMDAxNjAwMEQ4NTgzMDIyRDg1OTEwMDJEODVBMkZCNEQ4NUIzREM0ODEKKzoxMDAxNzAwMEQ4NUM2NjI0RDg1RDU2QjNEODVFMDNDM0Q4NUY4NjZCNUYKKzoxMDAxODAwMEQ4NjA0MDFDRDg2MTJDNDVEODYyMzA5NUQ4NjM1QjUzNDkKKzoxMDAxOTAwMEQ4NjQyMzcyRDg2NTMwMTJEODY2MTNDMkQ4Njc1Q0MzOUUKKzoxMDAxQTAwMEQ4NjgyNzEyRDg2OTMwMTJEODZBMTMxMkQ4NkIyQjUyMkMKKzoxMDAxQjAwMEQ4NkMzMDEyRDg2RDEwMDJEODZFMjc0MkQ4NkYzMDIyMUEKKzoxMDAxQzAwMEQ4NzAxMDAyRDg3MTI1ODJEODcyMzAyMkQ4NzMxMDAyRUMKKzoxMDAxRDAwMEQ4NzQyMTQyRDg3NTMwMTJEODc2MTAwMkQ4Nzc2MjhGNDEKKzoxMDAxRTAwMEQ4NzgyOTg1RDg3OTMzQTVEODdBMjVFMkQ4N0IzMDIyRUEKKzoxMDAxRjAwMEQ4N0MxMDAyRDg3RDU2NTNEODdFMDNEMkQ4N0Y0MDFFQkIKKzoxMDAyMDAwMEQ4ODA2RjcyRDg4MTEwMDJEODgyNjI4RkQ4ODMyMzA0N0QKKzoxMDAyMTAwMEQ4ODQzQzg0RDg4NTY0MzZEODg2REZGNEQ4ODc2NDM2QTEKKzoxMDAyMjAwMEQ4ODgyRkY1RDg4OTMwMDVEODhBODY1NkQ4OEJERkJBN0EKKzoxMDAyMzAwMEQ4OEM1NkEzRDg4REQwNUFEODhFMjk3MkQ4OEYzMDEyMjgKKzoxMDAyNDAwMEQ4OTAxMzkyRDg5MUQwNUFEODkyNTZBM0Q4OTNERkJBQTcKKzoxMDAyNTAwMEQ4OTQwMzgzRDg5NTZGNzJEODk2MTAwMkQ4OTcyQjQ1RkYKKzoxMDAyNjAwMEQ4OTgzMDA1RDg5OTQxNzhEODlBNTY1M0Q4OUIwMzg0QUEKKzoxMDAyNzAwMEQ4OUMyQTYyRDg5RDMwMTJEODlFMTAwMkQ4OUYyRjA1OTQKKzoxMDAyODAwMEQ4QTAzMDA1RDhBMTQxQzhEOEEyNTY1M0Q4QTMwMzgyMUMKKzoxMDAyOTAwMEQ4QTQwMDAyRDhBNTQyMThEOEE2MjQ3NEQ4QTczQzg0QjQKKzoxMDAyQTAwMEQ4QTg2NDM3RDhBOURGRjREOEFBNjQzN0Q4QUIyRkY1MUIKKzoxMDAyQjAwMEQ4QUMzQzA1RDhBRDg3NTdEOEFFQjg4OEQ4QUY5Nzg3QUIKKzoxMDAyQzAwMEQ4QjBERkY0RDhCMTY3MjREOEIyODY2QUQ4QjM2RjcyRDkKKzoxMDAyRDAwMEQ4QjQxMDAyRDhCNTI2NDFEOEI2MzAyMUQ4QjcxMDAxMEQKKzoxMDAyRTAwMEQ4QjhDNjIwRDhCOTAwMDBEOEJBQzYyMUQ4QkIwMDAwRkIKKzoxMDAyRjAwMEQ4QkNDNjIyRDhCRDAwQ0VEOEJFQzYyM0Q4QkYwMDdGOEEKKzoxMDAzMDAwMEQ4QzBDNjI0RDhDMTAwMzJEOEMyQzYyNUQ4QzMwMDAwODAKKzoxMDAzMTAwMEQ4QzRDNjI3RDhDNTAwMDBEOEM2QzYyOEQ4QzcwMDAwOEMKKzoxMDAzMjAwMEQ4QzhDNjJDRDhDOTAwMDBEOENBMDAwMEQ4Q0IyNjQxRUUKKzoxMDAzMzAwMEQ4Q0MzMDIxRDhDRDEwMDFEOENFQzUwMkQ4Q0Y1M0FDRkYKKzoxMDAzNDAwMEQ4RDBDNTAzRDhEMTJDRDNEOEQyQzYwMEQ4RDMyQTZFRTIKKzoxMDAzNTAwMEQ4RDRDNjAxRDhENTJBMkNEOEQ2QzYwNUQ4RDc1NTU3NTMKKzoxMDAzNjAwMEQ4RDhDNjBDRDhEOTU0MDBEOERBQzcxMEQ4REIwNzAwQzMKKzoxMDAzNzAwMEQ4RENDNzExRDhERDBGMDZEOERFQzcxOEQ4REYwNzAwRDQKKzoxMDAzODAwMEQ4RTBDNzE5RDhFMTBGMDZEOEUyQzcyMEQ4RTM0NzAwNjQKKzoxMDAzOTAwMEQ4RTRDNzIxRDhFNTBGMDZEOEU2QzcyOEQ4RTcwNzAwNzQKKzoxMDAzQTAwMEQ4RThDNzI5RDhFOTEyMDdEOEVBQzgwMUQ4RUI3RjUwQTYKKzoxMDAzQjAwMEQ4RUNDODAyRDhFRDc3NjBEOEVFQzgwM0Q4RUY3RkNFNkUKKzoxMDAzQzAwMEQ4RjBDODA0RDhGMTUyMEVEOEYyQzgwNUQ4RjM1QzExQTEKKzoxMDAzRDAwMEQ4RjRDODA2RDhGNTNDNTFEOEY2QzgwN0Q4Rjc0MDYxMUMKKzoxMDAzRTAwMEQ4RjhDODA4RDhGOTQ5QzFEOEZBQzgwOUQ4RkIzODQwQTQKKzoxMDAzRjAwMEQ4RkNDODBBRDhGRDAwMDBEOEZFQzgyMUQ4RkYwMDAyRUEKKzoxMDA0MDAwMEQ5MDBDODIyRDkwMTAwNDZEOTAyQzg0NEQ5MDMxODJGRkYKKzoxMDA0MTAwMEQ5MDRDMDEzRDkwNUYzNDFEOTA2QzA4NEQ5MDcwMDMwRTcKKzoxMDA0MjAwMEQ5MDhDOTA0RDkwOTE0MDFEOTBBQ0IwQ0Q5MEIwMDA0ODUKKzoxMDA0MzAwMEQ5MENDQjBFRDkwREEwMEFEOTBFQ0IwRkQ5MEZDMEMwNDUKKzoxMDA0NDAwMEQ5MTBDQjEwRDkxMUMwQzBEOTEyQ0IxMUQ5MTMwMEEwMkIKKzoxMDA0NTAwMEQ5MTRDQjEyRDkxNTAwMDdEOTE2QzI0MUQ5MTdBMDAwNUIKKzoxMDA0NjAwMEQ5MThDMjQzRDkxOTdGRTBEOTFBQzYwNEQ5MUIwMDBFODYKKzoxMDA0NzAwMEQ5MUNDNjA5RDkxRDAwRjVEOTFFQzYxMUQ5MUYwMDBFRjkKKzoxMDA0ODAwMEQ5MjBDNjYwRDkyMTk2MDBEOTIyQzY4N0Q5MjMwMDA0NzUKKzoxMDA0OTAwMEQ5MjRDNjBBRDkyNTA0RjVEOTI2MDAwMEQ5MjcyNjQxMzIKKzoxMDA0QTAwMEQ5MjgzMDIxRDkyOTEwMDFEOTJBQzYyMEQ5MkIxNEU1MDEKKzoxMDA0QjAwMEQ5MkNDNjIxRDkyREM1M0REOTJFQzYyMkQ5MkYzQ0JFNTcKKzoxMDA0QzAwMEQ5MzBDNjIzRDkzMTQ0NTJEOTMyQzYyNEQ5MzNDNUM1MEYKKzoxMDA0RDAwMEQ5MzRDNjI1RDkzNUUwMUVEOTM2QzYyN0Q5MzcwMDAwMEMKKzoxMDA0RTAwMEQ5MzhDNjI4RDkzOTAwMDBEOTNBQzYyQ0Q5M0IwMDAwRTIKKzoxMDA0RjAwMEQ5M0MwMDAwRDkzRDJCODREOTNFM0M3NEQ5M0Y2NDM1QUEKKzoxMDA1MDAwMEQ5NDBERkY0RDk0MTY0MzVEOTQyMjgwNkQ5NDMzMDA2QjEKKzoxMDA1MTAwMEQ5NDQ4NTY1RDk0NTJCMjREOTQ2M0MyNEQ5NDc2NDM2MkUKKzoxMDA1MjAwMEQ5NDgxMDAyRDk0OTJCMjREOTRBM0MyNEQ5NEI2NDM2RTYKKzoxMDA1MzAwMEQ5NEM0MDQ1RDk0RDg2NTZEOTRFNTY2M0Q5NEYwMzAyMDIKKzoxMDA1NDAwMEQ5NTA0MDFFRDk1MTEwMDJEOTUyMjgwN0Q5NTMzMUE3OEEKKzoxMDA1NTAwMEQ5NTQyMEM0RDk1NTNDMjREOTU2NjcyNEQ5NTcxMDAyMDAKKzoxMDA1NjAwMEQ5NTgyODA3RDk1OTMxODdEOTVBMjBDNEQ5NUIzQzI0OTYKKzoxMDA1NzAwMEQ5NUM2NzI0RDk1RDEwMDJEOTVFMjRGNEQ5NUYzQzY0NEMKKzoxMDA1ODAwMEQ5NjA2NDM2RDk2MURGRjREOTYyNjQzNkQ5NjMxMDAyNjgKKzoxMDA1OTAwMEQ5NjQyMDA2RDk2NTNENzZEOTY2QzE2MUQ5Njc2MTM0RDEKKzoxMDA1QTAwMEQ5Njg2MTM1RDk2OTU0NDNEOTZBMDMwM0Q5NkI2NTI0ODUKKzoxMDA1QjAwMEQ5NkMwMEZCRDk2RDEwMDJEOTZFMjBENEQ5NkYzQzI0QzAKKzoxMDA1QzAwMEQ5NzAyMDI1RDk3MTMwMDVEOTcyNjUyNEQ5NzMxMDAyRUMKKzoxMDA1RDAwMEQ5NzREMDE5RDk3NTIxMDREOTc2M0MyNEQ5NzcyMTA1NEQKKzoxMDA1RTAwMEQ5NzgzODA1RDk3OTY1MjREOTdBREZGNEQ5N0I0MDA1RTMKKzoxMDA1RjAwMEQ5N0M2NTI0RDk3RDJFOEREOTdFMzAzREQ5N0YyNDA4QzQKKzoxMDA2MDAwMEQ5ODAzNUQ4RDk4MTVERDNEOTgyMDMwN0Q5ODM4ODg3MkEKKzoxMDA2MTAwMEQ5ODQ2M0E3RDk4NTg4ODdEOTg2NjNBN0Q5ODdERkZENjEKKzoxMDA2MjAwMEQ5ODgwMEY5RDk4OTEwMDJEOThBMDAwMDg3OEMzMEQ5N0QKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCAwZTdkYTdiLi40NTVhYTIwIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTQzLDYgKzQzLDcgQEAKIHNvdXJjZSAiZnMvZ2ZzMi9LY29uZmlnIgogc291cmNlICJmcy9vY2ZzMi9LY29uZmlnIgogc291cmNlICJmcy9idHJmcy9LY29uZmlnIgorc291cmNlICJmcy9uaWxmczIvS2NvbmZpZyIKIAogZW5kaWYgIyBCTE9DSwogCkBAIC0xODYsNyArMTg3LDYgQEAKIHNvdXJjZSAiZnMvc3lzdi9LY29uZmlnIgogc291cmNlICJmcy91ZnMvS2NvbmZpZyIKIHNvdXJjZSAiZnMvZXhvZnMvS2NvbmZpZyIKLXNvdXJjZSAiZnMvbmlsZnMyL0tjb25maWciCiAKIGVuZGlmICMgTUlTQ19GSUxFU1lTVEVNUwogCmRpZmYgLS1naXQgYS9mcy9hZnMvd3JpdGUuYyBiL2ZzL2Fmcy93cml0ZS5jCmluZGV4IGMyZTdhN2YuLmM2M2EzYzggMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy93cml0ZS5jCisrKyBiL2ZzL2Fmcy93cml0ZS5jCkBAIC03MTIsNyArNzEyLDYgQEAKIAkJLmJkaQkJPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLAogCQkuc3luY19tb2RlCT0gV0JfU1lOQ19BTEwsCiAJCS5ucl90b193cml0ZQk9IExPTkdfTUFYLAotCQkuZm9yX3dyaXRlcGFnZXMgPSAxLAogCQkucmFuZ2VfY3ljbGljCT0gMSwKIAl9OwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggYjdjMTYwMy4uN2MxZTY1ZCAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtNTAxLDIyICs1MDEsMjIgQEAKIAkJfQogCX0KIAotCS8qCi0JICogTm93IGZpbGwgb3V0IHRoZSBic3Mgc2VjdGlvbi4gIEZpcnN0IHBhZCB0aGUgbGFzdCBwYWdlIHVwCi0JICogdG8gdGhlIHBhZ2UgYm91bmRhcnksIGFuZCB0aGVuIHBlcmZvcm0gYSBtbWFwIHRvIG1ha2Ugc3VyZQotCSAqIHRoYXQgdGhlcmUgYXJlIHplcm8tbWFwcGVkIHBhZ2VzIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIAotCSAqIGxhc3QgYnNzIHBhZ2UuCi0JICovCi0JaWYgKHBhZHplcm8oZWxmX2JzcykpIHsKLQkJZXJyb3IgPSAtRUZBVUxUOwotCQlnb3RvIG91dF9jbG9zZTsKLQl9Ci0KLQkvKiBXaGF0IHdlIGhhdmUgbWFwcGVkIHNvIGZhciAqLwotCWVsZl9ic3MgPSBFTEZfUEFHRVNUQVJUKGVsZl9ic3MgKyBFTEZfTUlOX0FMSUdOIC0gMSk7Ci0KLQkvKiBNYXAgdGhlIGxhc3Qgb2YgdGhlIGJzcyBzZWdtZW50ICovCiAJaWYgKGxhc3RfYnNzID4gZWxmX2JzcykgeworCQkvKgorCQkgKiBOb3cgZmlsbCBvdXQgdGhlIGJzcyBzZWN0aW9uLiAgRmlyc3QgcGFkIHRoZSBsYXN0IHBhZ2UgdXAKKwkJICogdG8gdGhlIHBhZ2UgYm91bmRhcnksIGFuZCB0aGVuIHBlcmZvcm0gYSBtbWFwIHRvIG1ha2Ugc3VyZQorCQkgKiB0aGF0IHRoZXJlIGFyZSB6ZXJvLW1hcHBlZCBwYWdlcyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZQorCQkgKiBsYXN0IGJzcyBwYWdlLgorCQkgKi8KKwkJaWYgKHBhZHplcm8oZWxmX2JzcykpIHsKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0X2Nsb3NlOworCQl9CisKKwkJLyogV2hhdCB3ZSBoYXZlIG1hcHBlZCBzbyBmYXIgKi8KKwkJZWxmX2JzcyA9IEVMRl9QQUdFU1RBUlQoZWxmX2JzcyArIEVMRl9NSU5fQUxJR04gLSAxKTsKKworCQkvKiBNYXAgdGhlIGxhc3Qgb2YgdGhlIGJzcyBzZWdtZW50ICovCiAJCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJCWVycm9yID0gZG9fYnJrKGVsZl9ic3MsIGxhc3RfYnNzIC0gZWxmX2Jzcyk7CiAJCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCA5NGRmZGEyLi43MWU3ZTAzIDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtNDIwLDcgKzQyMCw2IEBACiB7CiAJc3RydWN0IGJkZXZfaW5vZGUgKmJkaSA9IEJERVZfSShpbm9kZSk7CiAKLQliZGktPmJkZXYuYmRfaW5vZGVfYmFja2luZ19kZXZfaW5mbyA9IE5VTEw7CiAJa21lbV9jYWNoZV9mcmVlKGJkZXZfY2FjaGVwLCBiZGkpOwogfQogCkBAIC0xNDA1LDYgKzE0MDQsMzMgQEAKIH0KIAogLyoKKyAqIFdyaXRlIGRhdGEgdG8gdGhlIGJsb2NrIGRldmljZS4gIE9ubHkgaW50ZW5kZWQgZm9yIHRoZSBibG9jayBkZXZpY2UgaXRzZWxmCisgKiBhbmQgdGhlIHJhdyBkcml2ZXIgd2hpY2ggYmFzaWNhbGx5IGlzIGEgZmFrZSBibG9jayBkZXZpY2UuCisgKgorICogRG9lcyBub3QgdGFrZSBpX211dGV4IGZvciB0aGUgd3JpdGUgYW5kIHRodXMgaXMgbm90IGZvciBnZW5lcmFsIHB1cnBvc2UKKyAqIHVzZS4KKyAqLworc3NpemVfdCBibGtkZXZfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKKwlzc2l6ZV90IHJldDsKKworCUJVR19PTihpb2NiLT5raV9wb3MgIT0gcG9zKTsKKworCXJldCA9IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsICZpb2NiLT5raV9wb3MpOworCWlmIChyZXQgPiAwIHx8IHJldCA9PSAtRUlPQ0JRVUVVRUQpIHsKKwkJc3NpemVfdCBlcnI7CisKKwkJZXJyID0gZ2VuZXJpY193cml0ZV9zeW5jKGZpbGUsIHBvcywgcmV0KTsKKwkJaWYgKGVyciA8IDAgJiYgcmV0ID4gMCkKKwkJCXJldCA9IGVycjsKKwl9CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa2Rldl9haW9fd3JpdGUpOworCisvKgogICogVHJ5IHRvIHJlbGVhc2UgYSBwYWdlIGFzc29jaWF0ZWQgd2l0aCBibG9jayBkZXZpY2Ugd2hlbiB0aGUgc3lzdGVtCiAgKiBpcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCiAgKi8KQEAgLTE0MzYsNyArMTQ2Miw3IEBACiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAogICAJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAotICAJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrLAorCS5haW9fd3JpdGUJPSBibGtkZXZfYWlvX3dyaXRlLAogCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAogCS5mc3luYwkJPSBibG9ja19mc3luYywKIAkudW5sb2NrZWRfaW9jdGwJPSBibG9ja19pb2N0bCwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2Rpc2staW8uYyBiL2ZzL2J0cmZzL2Rpc2staW8uYwppbmRleCBlODNiZTJlLi44YjgxOTI3IDEwMDY0NAotLS0gYS9mcy9idHJmcy9kaXNrLWlvLmMKKysrIGIvZnMvYnRyZnMvZGlzay1pby5jCkBAIC0xMzUyLDYgKzEzNTIsNyBAQAogewogCWludCBlcnI7CiAKKwliZGktPm5hbWUgPSAiYnRyZnMiOwogCWJkaS0+Y2FwYWJpbGl0aWVzID0gQkRJX0NBUF9NQVBfQ09QWTsKIAllcnIgPSBiZGlfaW5pdChiZGkpOwogCWlmIChlcnIpCkBAIC0xNTk5LDYgKzE2MDAsNyBAQAogCiAJc2ItPnNfYmxvY2tzaXplID0gNDA5NjsKIAlzYi0+c19ibG9ja3NpemVfYml0cyA9IGJsa3NpemVfYml0cyg0MDk2KTsKKwlzYi0+c19iZGkgPSAmZnNfaW5mby0+YmRpOwogCiAJLyoKIAkgKiB3ZSBzZXQgdGhlIGlfc2l6ZSBvbiB0aGUgYnRyZWUgaW5vZGUgdG8gdGhlIG1heCBwb3NzaWJsZSBpbnQuCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCA3MmEyYjljLi41MzVmODViIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTE1MTEsNyArMTUxMSw4IEBACiBzdGF0aWMgdm9pZCBidHJmc19pc3N1ZV9kaXNjYXJkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgbGVuKQogewotCWJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0ID4+IDksIGxlbiA+PiA5LCBHRlBfS0VSTkVMKTsKKwlibGtkZXZfaXNzdWVfZGlzY2FyZChiZGV2LCBzdGFydCA+PiA5LCBsZW4gPj4gOSwgR0ZQX0tFUk5FTCwKKwkJCSAgICAgRElTQ0FSRF9GTF9CQVJSSUVSKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCmluZGV4IGQ2ZjA4MDYuLjdiMmY0MDEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCisrKyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCkBAIC03NDAsNyArNzQwLDYgQEAKIAkJLm5yX3RvX3dyaXRlID0gbWFwcGluZy0+bnJwYWdlcyAqIDIsCiAJCS5yYW5nZV9zdGFydCA9IHN0YXJ0LAogCQkucmFuZ2VfZW5kID0gZW5kLAotCQkuZm9yX3dyaXRlcGFnZXMgPSAxLAogCX07CiAJcmV0dXJuIGJ0cmZzX3dyaXRlcGFnZXMobWFwcGluZywgJndiYyk7CiB9CmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmMgYi9mcy9idHJmcy92b2x1bWVzLmMKaW5kZXggNWRiZWZkMS4uNWNmNDA1YiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5jCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCW51bV9ydW4rKzsKIAkJYmF0Y2hfcnVuKys7CiAKLQkJaWYgKGJpb19zeW5jKGN1cikpCisJCWlmIChiaW9fcndfZmxhZ2dlZChjdXIsIEJJT19SV19TWU5DSU8pKQogCQkJbnVtX3N5bmNfcnVuKys7CiAKIAkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CkBAIC0yOTAzLDcgKzI5MDMsNyBAQAogCWJpby0+YmlfcncgfD0gcnc7CiAKIAlzcGluX2xvY2soJmRldmljZS0+aW9fbG9jayk7Ci0JaWYgKGJpb19zeW5jKGJpbykpCisJaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTykpCiAJCXBlbmRpbmdfYmlvcyA9ICZkZXZpY2UtPnBlbmRpbmdfc3luY19iaW9zOwogCWVsc2UKIAkJcGVuZGluZ19iaW9zID0gJmRldmljZS0+cGVuZGluZ19iaW9zOwpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCAyOGYzMjBmLi45MGE5ODg2IDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJc3RydWN0IHpvbmUgKnpvbmU7CiAJaW50IG5pZDsKIAotCXdha2V1cF9wZGZsdXNoKDEwMjQpOworCXdha2V1cF9mbHVzaGVyX3RocmVhZHMoMTAyNCk7CiAJeWllbGQoKTsKIAogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewpkaWZmIC0tZ2l0IGEvZnMvY2hhcl9kZXYuYyBiL2ZzL2NoYXJfZGV2LmMKaW5kZXggYTE3MzU1MS4uM2NiYzU3ZiAxMDA2NDQKLS0tIGEvZnMvY2hhcl9kZXYuYworKysgYi9mcy9jaGFyX2Rldi5jCkBAIC0zMSw2ICszMSw3IEBACiAgKiAtIG5vIHJlYWRhaGVhZCBvciBJL08gcXVldWUgdW5wbHVnZ2luZyByZXF1aXJlZAogICovCiBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBkaXJlY3RseV9tYXBwYWJsZV9jZGV2X2JkaSA9IHsKKwkubmFtZSA9ICJjaGFyIiwKIAkuY2FwYWJpbGl0aWVzCT0gKAogI2lmZGVmIENPTkZJR19NTVUKIAkJLyogcGVybWl0IHByaXZhdGUgY29waWVzIG9mIHRoZSBkYXRhIHRvIGJlIHRha2VuICovCkBAIC0yMzcsOCArMjM4LDEwIEBACiB9CiAKIC8qKgotICogcmVnaXN0ZXJfY2hyZGV2KCkgLSBSZWdpc3RlciBhIG1ham9yIG51bWJlciBmb3IgY2hhcmFjdGVyIGRldmljZXMuCisgKiBfX3JlZ2lzdGVyX2NocmRldigpIC0gY3JlYXRlIGFuZCByZWdpc3RlciBhIGNkZXYgb2NjdXB5aW5nIGEgcmFuZ2Ugb2YgbWlub3JzCiAgKiBAbWFqb3I6IG1ham9yIGRldmljZSBudW1iZXIgb3IgMCBmb3IgZHluYW1pYyBhbGxvY2F0aW9uCisgKiBAYmFzZW1pbm9yOiBmaXJzdCBvZiB0aGUgcmVxdWVzdGVkIHJhbmdlIG9mIG1pbm9yIG51bWJlcnMKKyAqIEBjb3VudDogdGhlIG51bWJlciBvZiBtaW5vciBudW1iZXJzIHJlcXVpcmVkCiAgKiBAbmFtZTogbmFtZSBvZiB0aGlzIHJhbmdlIG9mIGRldmljZXMKICAqIEBmb3BzOiBmaWxlIG9wZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2aWNlcwogICoKQEAgLTI1NCwxOSArMjU3LDE3IEBACiAgKiAvZGV2LiBJdCBvbmx5IGhlbHBzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGRpZmZlcmVudCBvd25lcnMgb2YgZGV2aWNlcy4gSWYKICAqIHlvdXIgbW9kdWxlIG5hbWUgaGFzIG9ubHkgb25lIHR5cGUgb2YgZGV2aWNlcyBpdCdzIG9rIHRvIHVzZSBlLmcuIHRoZSBuYW1lCiAgKiBvZiB0aGUgbW9kdWxlIGhlcmUuCi0gKgotICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSByYW5nZSBvZiAyNTYgbWlub3IgbnVtYmVycy4gVGhlIGZpcnN0IG1pbm9yIG51bWJlcgotICogaXMgMC4KICAqLwotaW50IHJlZ2lzdGVyX2NocmRldih1bnNpZ25lZCBpbnQgbWFqb3IsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKQoraW50IF9fcmVnaXN0ZXJfY2hyZGV2KHVuc2lnbmVkIGludCBtYWpvciwgdW5zaWduZWQgaW50IGJhc2VtaW5vciwKKwkJICAgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKQogewogCXN0cnVjdCBjaGFyX2RldmljZV9zdHJ1Y3QgKmNkOwogCXN0cnVjdCBjZGV2ICpjZGV2OwogCWNoYXIgKnM7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKLQljZCA9IF9fcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihtYWpvciwgMCwgMjU2LCBuYW1lKTsKKwljZCA9IF9fcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihtYWpvciwgYmFzZW1pbm9yLCBjb3VudCwgbmFtZSk7CiAJaWYgKElTX0VSUihjZCkpCiAJCXJldHVybiBQVFJfRVJSKGNkKTsKIAkKQEAgLTI4MCw3ICsyODEsNyBAQAogCWZvciAocyA9IHN0cmNocihrb2JqZWN0X25hbWUoJmNkZXYtPmtvYmopLCcvJyk7IHM7IHMgPSBzdHJjaHIocywgJy8nKSkKIAkJKnMgPSAnISc7CiAJCQotCWVyciA9IGNkZXZfYWRkKGNkZXYsIE1LREVWKGNkLT5tYWpvciwgMCksIDI1Nik7CisJZXJyID0gY2Rldl9hZGQoY2RldiwgTUtERVYoY2QtPm1ham9yLCBiYXNlbWlub3IpLCBjb3VudCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTI5MCw3ICsyOTEsNyBAQAogb3V0OgogCWtvYmplY3RfcHV0KCZjZGV2LT5rb2JqKTsKIG91dDI6Ci0Ja2ZyZWUoX191bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oY2QtPm1ham9yLCAwLCAyNTYpKTsKKwlrZnJlZShfX3VucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihjZC0+bWFqb3IsIGJhc2VtaW5vciwgY291bnQpKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zMTYsMTAgKzMxNywyMyBAQAogCX0KIH0KIAotdm9pZCB1bnJlZ2lzdGVyX2NocmRldih1bnNpZ25lZCBpbnQgbWFqb3IsIGNvbnN0IGNoYXIgKm5hbWUpCisvKioKKyAqIF9fdW5yZWdpc3Rlcl9jaHJkZXYgLSB1bnJlZ2lzdGVyIGFuZCBkZXN0cm95IGEgY2RldgorICogQG1ham9yOiBtYWpvciBkZXZpY2UgbnVtYmVyCisgKiBAYmFzZW1pbm9yOiBmaXJzdCBvZiB0aGUgcmFuZ2Ugb2YgbWlub3IgbnVtYmVycworICogQGNvdW50OiB0aGUgbnVtYmVyIG9mIG1pbm9yIG51bWJlcnMgdGhpcyBjZGV2IGlzIG9jY3VweWluZworICogQG5hbWU6IG5hbWUgb2YgdGhpcyByYW5nZSBvZiBkZXZpY2VzCisgKgorICogVW5yZWdpc3RlciBhbmQgZGVzdHJveSB0aGUgY2RldiBvY2N1cHlpbmcgdGhlIHJlZ2lvbiBkZXNjcmliZWQgYnkKKyAqIEBtYWpvciwgQGJhc2VtaW5vciBhbmQgQGNvdW50LiAgVGhpcyBmdW5jdGlvbiB1bmRvZXMgd2hhdAorICogX19yZWdpc3Rlcl9jaHJkZXYoKSBkaWQuCisgKi8KK3ZvaWQgX191bnJlZ2lzdGVyX2NocmRldih1bnNpZ25lZCBpbnQgbWFqb3IsIHVuc2lnbmVkIGludCBiYXNlbWlub3IsCisJCQkgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBjaGFyX2RldmljZV9zdHJ1Y3QgKmNkOwotCWNkID0gX191bnJlZ2lzdGVyX2NocmRldl9yZWdpb24obWFqb3IsIDAsIDI1Nik7CisKKwljZCA9IF9fdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKG1ham9yLCBiYXNlbWlub3IsIGNvdW50KTsKIAlpZiAoY2QgJiYgY2QtPmNkZXYpCiAJCWNkZXZfZGVsKGNkLT5jZGV2KTsKIAlrZnJlZShjZCk7CkBAIC01NjgsNiArNTgyLDYgQEAKIEVYUE9SVF9TWU1CT0woY2Rldl9kZWwpOwogRVhQT1JUX1NZTUJPTChjZGV2X2FkZCk7CiBFWFBPUlRfU1lNQk9MKGNkZXZfaW5kZXgpOwotRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9jaHJkZXYpOwotRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX2NocmRldik7CitFWFBPUlRfU1lNQk9MKF9fcmVnaXN0ZXJfY2hyZGV2KTsKK0VYUE9SVF9TWU1CT0woX191bnJlZ2lzdGVyX2NocmRldik7CiBFWFBPUlRfU1lNQk9MKGRpcmVjdGx5X21hcHBhYmxlX2NkZXZfYmRpKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCBlODViMWU0Li4xNDU1NDBhIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC0zLDcgKzMsMTAgQEAKIEZpeCBtZW1vcnkgbGVhayBpbiByZWNvbm5lY3QuICBGaXggb29wcyBpbiBERlMgbW91bnQgZXJyb3IgcGF0aC4KIFNldCBzX21heGJ5dGVzIHRvIHNtYWxsZXIgKHRoZSBtYXggdGhhdCB2ZnMgY2FuIGhhbmRsZSkgc28gdGhhdAogc2VuZGZpbGUgd2lsbCBub3cgd29yayBvdmVyIGNpZnMgbW91bnRzIGFnYWluLiAgQWRkIG5vZm9yY2VnaWQKLWFuZCBub2ZvcmNldWlkIG1vdW50IHBhcmFtZXRlcnMuCithbmQgbm9mb3JjZXVpZCBtb3VudCBwYXJhbWV0ZXJzLiBGaXggc21hbGwgbWVtIGxlYWsgd2hlbiB1c2luZworbnRsbXYyLiBGaXggMm5kIG1vdW50IHRvIHNhbWUgc2VydmVyIGJ1dCB3aXRoIGRpZmZlcmVudCBwb3J0IHRvCitiZSBhbGxvd2VkIChyYXRoZXIgdGhhbiByZXVzaW5nIHRoZSAxc3QgcG9ydCkgLSBvbmx5IHdoZW4gdGhlCit1c2VyIGV4cGxpY2l0bHkgb3ZlcnJpZGVzIHRoZSBwb3J0IG9uIHRoZSAybmQgbW91bnQuCiAKIFZlcnNpb24gMS41OQogLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfc3BuZWdvLmMgYi9mcy9jaWZzL2NpZnNfc3BuZWdvLmMKaW5kZXggMDUxY2FlYy4uOGVjNzczNiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX3NwbmVnby5jCisrKyBiL2ZzL2NpZnMvY2lmc19zcG5lZ28uYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJaWYgKHNlcnZlci0+YWRkci5zb2NrQWRkci5zaW5fZmFtaWx5ID09IEFGX0lORVQpCiAJCXNwcmludGYoZHAsICJpcDQ9JXBJNCIsICZzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX2FkZHIpOwogCWVsc2UgaWYgKHNlcnZlci0+YWRkci5zb2NrQWRkci5zaW5fZmFtaWx5ID09IEFGX0lORVQ2KQotCQlzcHJpbnRmKGRwLCAiaXA2PSVwaTYiLCAmc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X2FkZHIpOworCQlzcHJpbnRmKGRwLCAiaXA2PSVwSTYiLCAmc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X2FkZHIpOwogCWVsc2UKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2FjbC5jIGIvZnMvY2lmcy9jaWZzYWNsLmMKaW5kZXggNjk0MWMyMi4uN2RmZTA4NCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzYWNsLmMKKysrIGIvZnMvY2lmcy9jaWZzYWNsLmMKQEAgLTYwNyw3ICs2MDcsNyBAQAogCQlyZXR1cm4gZ2V0X2NpZnNfYWNsX2J5X3BhdGgoY2lmc19zYiwgcGF0aCwgcGFjbGxlbik7CiAKIAlwbnRzZCA9IGdldF9jaWZzX2FjbF9ieV9maWQoY2lmc19zYiwgb3Blbl9maWxlLT5uZXRmaWQsIHBhY2xsZW4pOwotCWF0b21pY19kZWMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7CisJY2lmc0ZpbGVJbmZvX3B1dChvcGVuX2ZpbGUpOwogCXJldHVybiBwbnRzZDsKIH0KIApAQCAtNjY1LDcgKzY2NSw3IEBACiAJCXJldHVybiBzZXRfY2lmc19hY2xfYnlfcGF0aChjaWZzX3NiLCBwYXRoLCBwbm50c2QsIGFjbGxlbik7CiAKIAlyYyA9IHNldF9jaWZzX2FjbF9ieV9maWQoY2lmc19zYiwgb3Blbl9maWxlLT5uZXRmaWQsIHBubnRzZCwgYWNsbGVuKTsKLQlhdG9taWNfZGVjKCZvcGVuX2ZpbGUtPndydFBlbmRpbmcpOworCWNpZnNGaWxlSW5mb19wdXQob3Blbl9maWxlKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwppbmRleCA3Yzk4MDk1Li43ZWZlMTc0IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKKysrIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCkBAIC0zNzMsNiArMzczLDcgQEAKIAkgICBjb21wYXJlIHdpdGggdGhlIE5UTE0gZXhhbXBsZSAqLwogCWhtYWNfbWQ1X2ZpbmFsKHNlcy0+c2VydmVyLT5udGxtdjJfaGFzaCwgcGN0eHQpOwogCisJa2ZyZWUocGN0eHQpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggODRiNzUyNS4uMzYxMGU5OSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC0zNjEsMTMgKzM2MSwxMCBAQAogc3RhdGljIGludAogY2lmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgdmZzbW91bnQgKm0pCiB7Ci0Jc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKLQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOworCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKG0tPm1udF9zYik7CisJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiA9IGNpZnNfc2ItPnRjb247CiAKLQljaWZzX3NiID0gQ0lGU19TQihtLT5tbnRfc2IpOwotCXRjb24gPSBjaWZzX3NiLT50Y29uOwotCi0Jc2VxX3ByaW50ZihzLCAiLHVuYz0lcyIsIGNpZnNfc2ItPnRjb24tPnRyZWVOYW1lKTsKKwlzZXFfcHJpbnRmKHMsICIsdW5jPSVzIiwgdGNvbi0+dHJlZU5hbWUpOwogCWlmICh0Y29uLT5zZXMtPnVzZXJOYW1lKQogCQlzZXFfcHJpbnRmKHMsICIsdXNlcm5hbWU9JXMiLCB0Y29uLT5zZXMtPnVzZXJOYW1lKTsKIAlpZiAodGNvbi0+c2VzLT5kb21haW5OYW1lKQpAQCAtOTg5LDE5ICs5ODYsMTkgQEAKIAkJaWYgKHRyeV90b19mcmVlemUoKSkKIAkJCWNvbnRpbnVlOwogCi0JCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwotCQlpZiAobGlzdF9lbXB0eSgmR2xvYmFsT3Bsb2NrX1EpKSB7Ci0JCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCQlzcGluX2xvY2soJmNpZnNfb3Bsb2NrX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmY2lmc19vcGxvY2tfbGlzdCkpIHsKKwkJCXNwaW5fdW5sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCQlzY2hlZHVsZV90aW1lb3V0KDM5KkhaKTsKIAkJfSBlbHNlIHsKLQkJCW9wbG9ja19pdGVtID0gbGlzdF9lbnRyeShHbG9iYWxPcGxvY2tfUS5uZXh0LAorCQkJb3Bsb2NrX2l0ZW0gPSBsaXN0X2VudHJ5KGNpZnNfb3Bsb2NrX2xpc3QubmV4dCwKIAkJCQkJCXN0cnVjdCBvcGxvY2tfcV9lbnRyeSwgcWhlYWQpOwogCQkJY0ZZSSgxLCAoImZvdW5kIG9wbG9jayBpdGVtIHRvIHdyaXRlIG91dCIpKTsKIAkJCXBUY29uID0gb3Bsb2NrX2l0ZW0tPnRjb247CiAJCQlpbm9kZSA9IG9wbG9ja19pdGVtLT5waW5vZGU7CiAJCQluZXRmaWQgPSBvcGxvY2tfaXRlbS0+bmV0ZmlkOwotCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKIAkJCURlbGV0ZU9wbG9ja1FFbnRyeShvcGxvY2tfaXRlbSk7CiAJCQkvKiBjYW4gbm90IGdyYWIgaW5vZGUgc2VtIGhlcmUgc2luY2UgaXQgd291bGQKIAkJCQlkZWFkbG9jayB3aGVuIG9wbG9jayByZWNlaXZlZCBvbiBkZWxldGUKQEAgLTEwNTgsNyArMTA1NSw3IEBACiAJaW50IHJjID0gMDsKIAljaWZzX3Byb2NfaW5pdCgpOwogCUlOSVRfTElTVF9IRUFEKCZjaWZzX3RjcF9zZXNfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJkdsb2JhbE9wbG9ja19RKTsKKwlJTklUX0xJU1RfSEVBRCgmY2lmc19vcGxvY2tfbGlzdCk7CiAjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCiAJSU5JVF9MSVNUX0hFQUQoJkdsb2JhbERub3RpZnlSZXFMaXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmR2xvYmFsRG5vdGlmeVJzcF9RKTsKQEAgLTEwODcsNiArMTA4NCw3IEBACiAJcndsb2NrX2luaXQoJkdsb2JhbFNNQlNlc2xvY2spOwogCXJ3bG9ja19pbml0KCZjaWZzX3RjcF9zZXNfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJkdsb2JhbE1pZF9Mb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmY2lmc19vcGxvY2tfbG9jayk7CiAKIAlpZiAoY2lmc19tYXhfcGVuZGluZyA8IDIpIHsKIAkJY2lmc19tYXhfcGVuZGluZyA9IDI7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5oIGIvZnMvY2lmcy9jaWZzZnMuaAppbmRleCA2YzE3MDk0Li4wOTQzMjVlIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5oCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmgKQEAgLTExMyw1ICsxMTMsNSBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBjaWZzX2V4cG9ydF9vcHM7CiAjZW5kaWYgLyogRVhQRVJJTUVOVEFMICovCiAKLSNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNjAiCisjZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjYxIgogI2VuZGlmCQkJCS8qIF9DSUZTRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IDYwODRkNjMuLjZjZmM4MWEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTM1MSwxMSArMzUxLDI0IEBACiAJYm9vbCBjbG9zZVBlbmQ6MTsJLyogZmlsZSBpcyBtYXJrZWQgdG8gY2xvc2UgKi8KIAlib29sIGludmFsaWRIYW5kbGU6MTsJLyogZmlsZSBjbG9zZWQgdmlhIHNlc3Npb24gYWJlbmQgKi8KIAlib29sIG1lc3NhZ2VNb2RlOjE7CS8qIGZvciBwaXBlczogbWVzc2FnZSB2cyBieXRlIG1vZGUgKi8KLQlhdG9taWNfdCB3cnRQZW5kaW5nOyAgIC8qIGhhbmRsZSBpbiB1c2UgLSBkZWZlciBjbG9zZSAqLworCWF0b21pY190IGNvdW50OwkJLyogcmVmZXJlbmNlIGNvdW50ICovCiAJc3RydWN0IG11dGV4IGZoX211dGV4OyAvKiBwcmV2ZW50cyByZW9wZW4gcmFjZSBhZnRlciBkZWFkIHNlcyovCiAJc3RydWN0IGNpZnNfc2VhcmNoX2luZm8gc3JjaF9pbmY7CiB9OwogCisvKiBUYWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBmaWxlIHByaXZhdGUgZGF0YSAqLworc3RhdGljIGlubGluZSB2b2lkIGNpZnNGaWxlSW5mb19nZXQoc3RydWN0IGNpZnNGaWxlSW5mbyAqY2lmc19maWxlKQoreworCWF0b21pY19pbmMoJmNpZnNfZmlsZS0+Y291bnQpOworfQorCisvKiBSZWxlYXNlIGEgcmVmZXJlbmNlIG9uIHRoZSBmaWxlIHByaXZhdGUgZGF0YSAqLworc3RhdGljIGlubGluZSB2b2lkIGNpZnNGaWxlSW5mb19wdXQoc3RydWN0IGNpZnNGaWxlSW5mbyAqY2lmc19maWxlKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjaWZzX2ZpbGUtPmNvdW50KSkKKwkJa2ZyZWUoY2lmc19maWxlKTsKK30KKwogLyoKICAqIE9uZSBvZiB0aGVzZSBmb3IgZWFjaCBmaWxlIGlub2RlCiAgKi8KQEAgLTY1Niw3ICs2NjksMTEgQEAKICAqLwogR0xPQkFMX0VYVEVSTiByd2xvY2tfdCBHbG9iYWxTTUJTZXNsb2NrOwogCi1HTE9CQUxfRVhURVJOIHN0cnVjdCBsaXN0X2hlYWQgR2xvYmFsT3Bsb2NrX1E7CisvKiBHbG9iYWwgbGlzdCBvZiBvcGxvY2tzICovCitHTE9CQUxfRVhURVJOIHN0cnVjdCBsaXN0X2hlYWQgY2lmc19vcGxvY2tfbGlzdDsKKworLyogUHJvdGVjdHMgdGhlIGNpZnNfb3Bsb2NrX2xpc3QgKi8KK0dMT0JBTF9FWFRFUk4gc3BpbmxvY2tfdCBjaWZzX29wbG9ja19sb2NrOwogCiAvKiBPdXRzdGFuZGluZyBkaXIgbm90aWZ5IHJlcXVlc3RzICovCiBHTE9CQUxfRVhURVJOIHN0cnVjdCBsaXN0X2hlYWQgR2xvYmFsRG5vdGlmeVJlcUxpc3Q7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDE4NjZiYzIuLjMwMWUzMDcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC0xMDAsNiArMTAwLDEyOCBAQAogCSAgIHRvIHRoaXMgdGNvbiAqLwogfQogCisvKiByZWNvbm5lY3QgdGhlIHNvY2tldCwgdGNvbiwgYW5kIHNtYiBzZXNzaW9uIGlmIG5lZWRlZCAqLworc3RhdGljIGludAorY2lmc19yZWNvbm5lY3RfdGNvbihzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLCBpbnQgc21iX2NvbW1hbmQpCit7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlczsKKwlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXI7CisJc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlOworCisJLyoKKwkgKiBTTUJzIE5lZ1Byb3QsIFNlc3NTZXR1cCwgdUxvZ29mZiBkbyBub3QgaGF2ZSB0Y29uIHlldCBzbyBjaGVjayBmb3IKKwkgKiB0Y3AgYW5kIHNtYiBzZXNzaW9uIHN0YXR1cyBkb25lIGRpZmZlcmVudGx5IGZvciB0aG9zZSB0aHJlZSAtIGluIHRoZQorCSAqIGNhbGxpbmcgcm91dGluZQorCSAqLworCWlmICghdGNvbikKKwkJcmV0dXJuIDA7CisKKwlzZXMgPSB0Y29uLT5zZXM7CisJc2VydmVyID0gc2VzLT5zZXJ2ZXI7CisKKwkvKgorCSAqIG9ubHkgdHJlZSBkaXNjb25uZWN0LCBvcGVuLCBhbmQgd3JpdGUsIChhbmQgdWxvZ29mZiB3aGljaCBkb2VzIG5vdAorCSAqIGhhdmUgdGNvbikgYXJlIGFsbG93ZWQgYXMgd2Ugc3RhcnQgZm9yY2UgdW1vdW50CisJICovCisJaWYgKHRjb24tPnRpZFN0YXR1cyA9PSBDaWZzRXhpdGluZykgeworCQlpZiAoc21iX2NvbW1hbmQgIT0gU01CX0NPTV9XUklURV9BTkRYICYmCisJCSAgICBzbWJfY29tbWFuZCAhPSBTTUJfQ09NX09QRU5fQU5EWCAmJgorCQkgICAgc21iX2NvbW1hbmQgIT0gU01CX0NPTV9UUkVFX0RJU0NPTk5FQ1QpIHsKKwkJCWNGWUkoMSwgKCJjYW4gbm90IHNlbmQgY21kICVkIHdoaWxlIHVtb3VudGluZyIsCisJCQkJc21iX2NvbW1hbmQpKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCisJaWYgKHNlcy0+c3RhdHVzID09IENpZnNFeGl0aW5nKQorCQlyZXR1cm4gLUVJTzsKKworCS8qCisJICogR2l2ZSBkZW11bHRpcGxleCB0aHJlYWQgdXAgdG8gMTAgc2Vjb25kcyB0byByZWNvbm5lY3QsIHNob3VsZCBiZQorCSAqIGdyZWF0ZXIgdGhhbiBjaWZzIHNvY2tldCB0aW1lb3V0IHdoaWNoIGlzIDcgc2Vjb25kcworCSAqLworCXdoaWxlIChzZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzTmVlZFJlY29ubmVjdCkgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChzZXJ2ZXItPnJlc3BvbnNlX3EsCisJCQkoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0dvb2QpLCAxMCAqIEhaKTsKKworCQkvKiBpcyBUQ1Agc2Vzc2lvbiBpcyByZWVzdGFibGlzaGVkIG5vdyA/Ki8KKwkJaWYgKHNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNOZWVkUmVjb25uZWN0KQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogb24gInNvZnQiIG1vdW50cyB3ZSB3YWl0IG9uY2UuIEhhcmQgbW91bnRzIGtlZXAKKwkJICogcmV0cnlpbmcgdW50aWwgcHJvY2VzcyBpcyBraWxsZWQgb3Igc2VydmVyIGNvbWVzCisJCSAqIGJhY2sgb24tbGluZQorCQkgKi8KKwkJaWYgKCF0Y29uLT5yZXRyeSB8fCBzZXMtPnN0YXR1cyA9PSBDaWZzRXhpdGluZykgeworCQkJY0ZZSSgxLCAoImdhdmUgdXAgd2FpdGluZyBvbiByZWNvbm5lY3QgaW4gc21iX2luaXQiKSk7CisJCQlyZXR1cm4gLUVIT1NURE9XTjsKKwkJfQorCX0KKworCWlmICghc2VzLT5uZWVkX3JlY29ubmVjdCAmJiAhdGNvbi0+bmVlZF9yZWNvbm5lY3QpCisJCXJldHVybiAwOworCisJbmxzX2NvZGVwYWdlID0gbG9hZF9ubHNfZGVmYXVsdCgpOworCisJLyoKKwkgKiBuZWVkIHRvIHByZXZlbnQgbXVsdGlwbGUgdGhyZWFkcyB0cnlpbmcgdG8gc2ltdWx0YW5lb3VzbHkKKwkgKiByZWNvbm5lY3QgdGhlIHNhbWUgU01CIHNlc3Npb24KKwkgKi8KKwlkb3duKCZzZXMtPnNlc1NlbSk7CisJaWYgKHNlcy0+bmVlZF9yZWNvbm5lY3QpCisJCXJjID0gY2lmc19zZXR1cF9zZXNzaW9uKDAsIHNlcywgbmxzX2NvZGVwYWdlKTsKKworCS8qIGRvIHdlIG5lZWQgdG8gcmVjb25uZWN0IHRjb24/ICovCisJaWYgKHJjIHx8ICF0Y29uLT5uZWVkX3JlY29ubmVjdCkgeworCQl1cCgmc2VzLT5zZXNTZW0pOworCQlnb3RvIG91dDsKKwl9CisKKwltYXJrX29wZW5fZmlsZXNfaW52YWxpZCh0Y29uKTsKKwlyYyA9IENJRlNUQ29uKDAsIHNlcywgdGNvbi0+dHJlZU5hbWUsIHRjb24sIG5sc19jb2RlcGFnZSk7CisJdXAoJnNlcy0+c2VzU2VtKTsKKwljRllJKDEsICgicmVjb25uZWN0IHRjb24gcmMgPSAlZCIsIHJjKSk7CisKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBGSVhNRTogY2hlY2sgaWYgd3NpemUgbmVlZHMgdXBkYXRlZCBkdWUgdG8gbmVnb3RpYXRlZCBzbWIgYnVmZmVyCisJICogCSAgc2l6ZSBzaHJpbmtpbmcKKwkgKi8KKwlhdG9taWNfaW5jKCZ0Y29uSW5mb1JlY29ubmVjdENvdW50KTsKKworCS8qIHRlbGwgc2VydmVyIFVuaXggY2FwcyB3ZSBzdXBwb3J0ICovCisJaWYgKHNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSVgpCisJCXJlc2V0X2NpZnNfdW5peF9jYXBzKDAsIHRjb24sIE5VTEwsIE5VTEwpOworCisJLyoKKwkgKiBSZW1vdmVkIGNhbGwgdG8gcmVvcGVuIG9wZW4gZmlsZXMgaGVyZS4gSXQgaXMgc2FmZXIgKGFuZCBmYXN0ZXIpIHRvCisJICogcmVvcGVuIGZpbGVzIG9uZSBhdCBhIHRpbWUgYXMgbmVlZGVkIGluIHJlYWQgYW5kIHdyaXRlLgorCSAqCisJICogRklYTUU6IHdoYXQgYWJvdXQgZmlsZSBsb2Nrcz8gZG9uJ3Qgd2UgbmVlZCB0byByZWNsYWltIHRoZW0gQVNBUD8KKwkgKi8KKworb3V0OgorCS8qCisJICogQ2hlY2sgaWYgaGFuZGxlIGJhc2VkIG9wZXJhdGlvbiBzbyB3ZSBrbm93IHdoZXRoZXIgd2UgY2FuIGNvbnRpbnVlCisJICogb3Igbm90IHdpdGhvdXQgcmV0dXJuaW5nIHRvIGNhbGxlciB0byByZXNldCBmaWxlIGhhbmRsZQorCSAqLworCXN3aXRjaCAoc21iX2NvbW1hbmQpIHsKKwljYXNlIFNNQl9DT01fUkVBRF9BTkRYOgorCWNhc2UgU01CX0NPTV9XUklURV9BTkRYOgorCWNhc2UgU01CX0NPTV9DTE9TRToKKwljYXNlIFNNQl9DT01fRklORF9DTE9TRTI6CisJY2FzZSBTTUJfQ09NX0xPQ0tJTkdfQU5EWDoKKwkJcmMgPSAtRUFHQUlOOworCX0KKworCXVubG9hZF9ubHMobmxzX2NvZGVwYWdlKTsKKwlyZXR1cm4gcmM7Cit9CisKIC8qIEFsbG9jYXRlIGFuZCByZXR1cm4gcG9pbnRlciB0byBhbiBTTUIgcmVxdWVzdCBidWZmZXIsIGFuZCBzZXQgYmFzaWMKICAgIFNNQiBpbmZvcm1hdGlvbiBpbiB0aGUgU01CIGhlYWRlci4gIElmIHRoZSByZXR1cm4gY29kZSBpcyB6ZXJvLCB0aGlzCiAgICBmdW5jdGlvbiBtdXN0IGhhdmUgZmlsbGVkIGluIHJlcXVlc3RfYnVmIHBvaW50ZXIgKi8KQEAgLTEwOSwxMDEgKzIzMSw3IEBACiB7CiAJaW50IHJjID0gMDsKIAotCS8qIFNNQnMgTmVnUHJvdCwgU2Vzc1NldHVwLCB1TG9nb2ZmIGRvIG5vdCBoYXZlIHRjb24geWV0IHNvCi0JICAgY2hlY2sgZm9yIHRjcCBhbmQgc21iIHNlc3Npb24gc3RhdHVzIGRvbmUgZGlmZmVyZW50bHkKLQkgICBmb3IgdGhvc2UgdGhyZWUgLSBpbiB0aGUgY2FsbGluZyByb3V0aW5lICovCi0JaWYgKHRjb24pIHsKLQkJaWYgKHRjb24tPnRpZFN0YXR1cyA9PSBDaWZzRXhpdGluZykgewotCQkJLyogb25seSB0cmVlIGRpc2Nvbm5lY3QsIG9wZW4sIGFuZCB3cml0ZSwKLQkJCShhbmQgdWxvZ29mZiB3aGljaCBkb2VzIG5vdCBoYXZlIHRjb24pCi0JCQlhcmUgYWxsb3dlZCBhcyB3ZSBzdGFydCBmb3JjZSB1bW91bnQgKi8KLQkJCWlmICgoc21iX2NvbW1hbmQgIT0gU01CX0NPTV9XUklURV9BTkRYKSAmJgotCQkJICAgKHNtYl9jb21tYW5kICE9IFNNQl9DT01fT1BFTl9BTkRYKSAmJgotCQkJICAgKHNtYl9jb21tYW5kICE9IFNNQl9DT01fVFJFRV9ESVNDT05ORUNUKSkgewotCQkJCWNGWUkoMSwgKCJjYW4gbm90IHNlbmQgY21kICVkIHdoaWxlIHVtb3VudGluZyIsCi0JCQkJCXNtYl9jb21tYW5kKSk7Ci0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQl9Ci0JCX0KLQkJaWYgKCh0Y29uLT5zZXMpICYmICh0Y29uLT5zZXMtPnN0YXR1cyAhPSBDaWZzRXhpdGluZykgJiYKLQkJCQkgICh0Y29uLT5zZXMtPnNlcnZlcikpIHsKLQkJCXN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZTsKLQkJCQkvKiBHaXZlIERlbXVsdGlwbGV4IHRocmVhZCB1cCB0byAxMCBzZWNvbmRzIHRvCi0JCQkJICAgcmVjb25uZWN0LCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIGNpZnMgc29ja2V0Ci0JCQkJICAgdGltZW91dCB3aGljaCBpcyA3IHNlY29uZHMgKi8KLQkJCXdoaWxlICh0Y29uLT5zZXMtPnNlcnZlci0+dGNwU3RhdHVzID09Ci0JCQkJCQkJIENpZnNOZWVkUmVjb25uZWN0KSB7Ci0JCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQodGNvbi0+c2VzLT5zZXJ2ZXItPnJlc3BvbnNlX3EsCi0JCQkJCSh0Y29uLT5zZXMtPnNlcnZlci0+dGNwU3RhdHVzID09Ci0JCQkJCQkJQ2lmc0dvb2QpLCAxMCAqIEhaKTsKLQkJCQlpZiAodGNvbi0+c2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyA9PQotCQkJCQkJCUNpZnNOZWVkUmVjb25uZWN0KSB7Ci0JCQkJCS8qIG9uICJzb2Z0IiBtb3VudHMgd2Ugd2FpdCBvbmNlICovCi0JCQkJCWlmICghdGNvbi0+cmV0cnkgfHwKLQkJCQkJICAgKHRjb24tPnNlcy0+c3RhdHVzID09IENpZnNFeGl0aW5nKSkgewotCQkJCQkJY0ZZSSgxLCAoImdhdmUgdXAgd2FpdGluZyBvbiAiCi0JCQkJCQkgICAgICAicmVjb25uZWN0IGluIHNtYl9pbml0IikpOwotCQkJCQkJcmV0dXJuIC1FSE9TVERPV047Ci0JCQkJCX0gLyogZWxzZSAiaGFyZCIgbW91bnQgLSBrZWVwIHJldHJ5aW5nCi0JCQkJCSAgICAgdW50aWwgcHJvY2VzcyBpcyBraWxsZWQgb3Igc2VydmVyCi0JCQkJCSAgICAgY29tZXMgYmFjayBvbi1saW5lICovCi0JCQkJfSBlbHNlIC8qIFRDUCBzZXNzaW9uIGlzIHJlZXN0YWJsaXNoZWQgbm93ICovCi0JCQkJCWJyZWFrOwotCQkJfQotCi0JCQlubHNfY29kZXBhZ2UgPSBsb2FkX25sc19kZWZhdWx0KCk7Ci0JCS8qIG5lZWQgdG8gcHJldmVudCBtdWx0aXBsZSB0aHJlYWRzIHRyeWluZyB0bwotCQlzaW11bHRhbmVvdXNseSByZWNvbm5lY3QgdGhlIHNhbWUgU01CIHNlc3Npb24gKi8KLQkJCWRvd24oJnRjb24tPnNlcy0+c2VzU2VtKTsKLQkJCWlmICh0Y29uLT5zZXMtPm5lZWRfcmVjb25uZWN0KQotCQkJCXJjID0gY2lmc19zZXR1cF9zZXNzaW9uKDAsIHRjb24tPnNlcywKLQkJCQkJCQlubHNfY29kZXBhZ2UpOwotCQkJaWYgKCFyYyAmJiAodGNvbi0+bmVlZF9yZWNvbm5lY3QpKSB7Ci0JCQkJbWFya19vcGVuX2ZpbGVzX2ludmFsaWQodGNvbik7Ci0JCQkJcmMgPSBDSUZTVENvbigwLCB0Y29uLT5zZXMsIHRjb24tPnRyZWVOYW1lLAotCQkJCQkgICAgICB0Y29uLCBubHNfY29kZXBhZ2UpOwotCQkJCXVwKCZ0Y29uLT5zZXMtPnNlc1NlbSk7Ci0JCQkJLyogQkIgRklYTUUgYWRkIGNvZGUgdG8gY2hlY2sgaWYgd3NpemUgbmVlZHMKLQkJCQkgICB1cGRhdGUgZHVlIHRvIG5lZ290aWF0ZWQgc21iIGJ1ZmZlciBzaXplCi0JCQkJICAgc2hyaW5raW5nICovCi0JCQkJaWYgKHJjID09IDApIHsKLQkJCQkJYXRvbWljX2luYygmdGNvbkluZm9SZWNvbm5lY3RDb3VudCk7Ci0JCQkJCS8qIHRlbGwgc2VydmVyIFVuaXggY2FwcyB3ZSBzdXBwb3J0ICovCi0JCQkJCWlmICh0Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKQotCQkJCQkJcmVzZXRfY2lmc191bml4X2NhcHMoCi0JCQkJCQkwIC8qIG5vIHhpZCAqLywKLQkJCQkJCXRjb24sCi0JCQkJCQlOVUxMIC8qIHdlIGRvIG5vdCBrbm93IHNiICovLAotCQkJCQkJTlVMTCAvKiBubyB2b2wgaW5mbyAqLyk7Ci0JCQkJfQotCi0JCQkJY0ZZSSgxLCAoInJlY29ubmVjdCB0Y29uIHJjID0gJWQiLCByYykpOwotCQkJCS8qIFJlbW92ZWQgY2FsbCB0byByZW9wZW4gb3BlbiBmaWxlcyBoZXJlLgotCQkJCSAgIEl0IGlzIHNhZmVyIChhbmQgZmFzdGVyKSB0byByZW9wZW4gZmlsZXMKLQkJCQkgICBvbmUgYXQgYSB0aW1lIGFzIG5lZWRlZCBpbiByZWFkIGFuZCB3cml0ZSAqLwotCi0JCQkJLyogQ2hlY2sgaWYgaGFuZGxlIGJhc2VkIG9wZXJhdGlvbiBzbyB3ZQotCQkJCSAgIGtub3cgd2hldGhlciB3ZSBjYW4gY29udGludWUgb3Igbm90IHdpdGhvdXQKLQkJCQkgICByZXR1cm5pbmcgdG8gY2FsbGVyIHRvIHJlc2V0IGZpbGUgaGFuZGxlICovCi0JCQkJc3dpdGNoIChzbWJfY29tbWFuZCkgewotCQkJCQljYXNlIFNNQl9DT01fUkVBRF9BTkRYOgotCQkJCQljYXNlIFNNQl9DT01fV1JJVEVfQU5EWDoKLQkJCQkJY2FzZSBTTUJfQ09NX0NMT1NFOgotCQkJCQljYXNlIFNNQl9DT01fRklORF9DTE9TRTI6Ci0JCQkJCWNhc2UgU01CX0NPTV9MT0NLSU5HX0FORFg6IHsKLQkJCQkJCXVubG9hZF9ubHMobmxzX2NvZGVwYWdlKTsKLQkJCQkJCXJldHVybiAtRUFHQUlOOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQl1cCgmdGNvbi0+c2VzLT5zZXNTZW0pOwotCQkJfQotCQkJdW5sb2FkX25scyhubHNfY29kZXBhZ2UpOwotCi0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KKwlyYyA9IGNpZnNfcmVjb25uZWN0X3Rjb24odGNvbiwgc21iX2NvbW1hbmQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0yNTYsMTAxICsyODQsNyBAQAogewogCWludCByYyA9IDA7CiAKLQkvKiBTTUJzIE5lZ1Byb3QsIFNlc3NTZXR1cCwgdUxvZ29mZiBkbyBub3QgaGF2ZSB0Y29uIHlldCBzbwotCSAgIGNoZWNrIGZvciB0Y3AgYW5kIHNtYiBzZXNzaW9uIHN0YXR1cyBkb25lIGRpZmZlcmVudGx5Ci0JICAgZm9yIHRob3NlIHRocmVlIC0gaW4gdGhlIGNhbGxpbmcgcm91dGluZSAqLwotCWlmICh0Y29uKSB7Ci0JCWlmICh0Y29uLT50aWRTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHsKLQkJCS8qIG9ubHkgdHJlZSBkaXNjb25uZWN0LCBvcGVuLCBhbmQgd3JpdGUsCi0JCQkgIChhbmQgdWxvZ29mZiB3aGljaCBkb2VzIG5vdCBoYXZlIHRjb24pCi0JCQkgIGFyZSBhbGxvd2VkIGFzIHdlIHN0YXJ0IGZvcmNlIHVtb3VudCAqLwotCQkJaWYgKChzbWJfY29tbWFuZCAhPSBTTUJfQ09NX1dSSVRFX0FORFgpICYmCi0JCQkgICAoc21iX2NvbW1hbmQgIT0gU01CX0NPTV9PUEVOX0FORFgpICYmCi0JCQkgICAoc21iX2NvbW1hbmQgIT0gU01CX0NPTV9UUkVFX0RJU0NPTk5FQ1QpKSB7Ci0JCQkJY0ZZSSgxLCAoImNhbiBub3Qgc2VuZCBjbWQgJWQgd2hpbGUgdW1vdW50aW5nIiwKLQkJCQkJc21iX2NvbW1hbmQpKTsKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCX0KLQkJfQotCi0JCWlmICgodGNvbi0+c2VzKSAmJiAodGNvbi0+c2VzLT5zdGF0dXMgIT0gQ2lmc0V4aXRpbmcpICYmCi0JCQkJICAodGNvbi0+c2VzLT5zZXJ2ZXIpKSB7Ci0JCQlzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2U7Ci0JCQkJLyogR2l2ZSBEZW11bHRpcGxleCB0aHJlYWQgdXAgdG8gMTAgc2Vjb25kcyB0bwotCQkJCSAgIHJlY29ubmVjdCwgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBjaWZzIHNvY2tldAotCQkJCSAgIHRpbWVvdXQgd2hpY2ggaXMgNyBzZWNvbmRzICovCi0JCQl3aGlsZSAodGNvbi0+c2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyA9PQotCQkJCQkJCUNpZnNOZWVkUmVjb25uZWN0KSB7Ci0JCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQodGNvbi0+c2VzLT5zZXJ2ZXItPnJlc3BvbnNlX3EsCi0JCQkJCSh0Y29uLT5zZXMtPnNlcnZlci0+dGNwU3RhdHVzID09Ci0JCQkJCQkJQ2lmc0dvb2QpLCAxMCAqIEhaKTsKLQkJCQlpZiAodGNvbi0+c2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyA9PQotCQkJCQkJQ2lmc05lZWRSZWNvbm5lY3QpIHsKLQkJCQkJLyogb24gInNvZnQiIG1vdW50cyB3ZSB3YWl0IG9uY2UgKi8KLQkJCQkJaWYgKCF0Y29uLT5yZXRyeSB8fAotCQkJCQkgICAodGNvbi0+c2VzLT5zdGF0dXMgPT0gQ2lmc0V4aXRpbmcpKSB7Ci0JCQkJCQljRllJKDEsICgiZ2F2ZSB1cCB3YWl0aW5nIG9uICIKLQkJCQkJCSAgICAgICJyZWNvbm5lY3QgaW4gc21iX2luaXQiKSk7Ci0JCQkJCQlyZXR1cm4gLUVIT1NURE9XTjsKLQkJCQkJfSAvKiBlbHNlICJoYXJkIiBtb3VudCAtIGtlZXAgcmV0cnlpbmcKLQkJCQkJICAgICB1bnRpbCBwcm9jZXNzIGlzIGtpbGxlZCBvciBzZXJ2ZXIKLQkJCQkJICAgICBjb21lcyBvbi1saW5lICovCi0JCQkJfSBlbHNlIC8qIFRDUCBzZXNzaW9uIGlzIHJlZXN0YWJsaXNoZWQgbm93ICovCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJbmxzX2NvZGVwYWdlID0gbG9hZF9ubHNfZGVmYXVsdCgpOwotCQkvKiBuZWVkIHRvIHByZXZlbnQgbXVsdGlwbGUgdGhyZWFkcyB0cnlpbmcgdG8KLQkJc2ltdWx0YW5lb3VzbHkgcmVjb25uZWN0IHRoZSBzYW1lIFNNQiBzZXNzaW9uICovCi0JCQlkb3duKCZ0Y29uLT5zZXMtPnNlc1NlbSk7Ci0JCQlpZiAodGNvbi0+c2VzLT5uZWVkX3JlY29ubmVjdCkKLQkJCQlyYyA9IGNpZnNfc2V0dXBfc2Vzc2lvbigwLCB0Y29uLT5zZXMsCi0JCQkJCQkJbmxzX2NvZGVwYWdlKTsKLQkJCWlmICghcmMgJiYgKHRjb24tPm5lZWRfcmVjb25uZWN0KSkgewotCQkJCW1hcmtfb3Blbl9maWxlc19pbnZhbGlkKHRjb24pOwotCQkJCXJjID0gQ0lGU1RDb24oMCwgdGNvbi0+c2VzLCB0Y29uLT50cmVlTmFtZSwKLQkJCQkJICAgICAgdGNvbiwgbmxzX2NvZGVwYWdlKTsKLQkJCQl1cCgmdGNvbi0+c2VzLT5zZXNTZW0pOwotCQkJCS8qIEJCIEZJWE1FIGFkZCBjb2RlIHRvIGNoZWNrIGlmIHdzaXplIG5lZWRzCi0JCQkJdXBkYXRlIGR1ZSB0byBuZWdvdGlhdGVkIHNtYiBidWZmZXIgc2l6ZQotCQkJCXNocmlua2luZyAqLwotCQkJCWlmIChyYyA9PSAwKSB7Ci0JCQkJCWF0b21pY19pbmMoJnRjb25JbmZvUmVjb25uZWN0Q291bnQpOwotCQkJCQkvKiB0ZWxsIHNlcnZlciBVbml4IGNhcHMgd2Ugc3VwcG9ydCAqLwotCQkJCQlpZiAodGNvbi0+c2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkKLQkJCQkJCXJlc2V0X2NpZnNfdW5peF9jYXBzKAotCQkJCQkJMCAvKiBubyB4aWQgKi8sCi0JCQkJCQl0Y29uLAotCQkJCQkJTlVMTCAvKiBkbyBub3Qga25vdyBzYiAqLywKLQkJCQkJCU5VTEwgLyogbm8gdm9sIGluZm8gKi8pOwotCQkJCX0KLQotCQkJCWNGWUkoMSwgKCJyZWNvbm5lY3QgdGNvbiByYyA9ICVkIiwgcmMpKTsKLQkJCQkvKiBSZW1vdmVkIGNhbGwgdG8gcmVvcGVuIG9wZW4gZmlsZXMgaGVyZS4KLQkJCQkgICBJdCBpcyBzYWZlciAoYW5kIGZhc3RlcikgdG8gcmVvcGVuIGZpbGVzCi0JCQkJICAgb25lIGF0IGEgdGltZSBhcyBuZWVkZWQgaW4gcmVhZCBhbmQgd3JpdGUgKi8KLQotCQkJCS8qIENoZWNrIGlmIGhhbmRsZSBiYXNlZCBvcGVyYXRpb24gc28gd2UKLQkJCQkgICBrbm93IHdoZXRoZXIgd2UgY2FuIGNvbnRpbnVlIG9yIG5vdCB3aXRob3V0Ci0JCQkJICAgcmV0dXJuaW5nIHRvIGNhbGxlciB0byByZXNldCBmaWxlIGhhbmRsZSAqLwotCQkJCXN3aXRjaCAoc21iX2NvbW1hbmQpIHsKLQkJCQkJY2FzZSBTTUJfQ09NX1JFQURfQU5EWDoKLQkJCQkJY2FzZSBTTUJfQ09NX1dSSVRFX0FORFg6Ci0JCQkJCWNhc2UgU01CX0NPTV9DTE9TRToKLQkJCQkJY2FzZSBTTUJfQ09NX0ZJTkRfQ0xPU0UyOgotCQkJCQljYXNlIFNNQl9DT01fTE9DS0lOR19BTkRYOiB7Ci0JCQkJCQl1bmxvYWRfbmxzKG5sc19jb2RlcGFnZSk7Ci0JCQkJCQlyZXR1cm4gLUVBR0FJTjsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJdXAoJnRjb24tPnNlcy0+c2VzU2VtKTsKLQkJCX0KLQkJCXVubG9hZF9ubHMobmxzX2NvZGVwYWdlKTsKLQotCQl9IGVsc2UgewotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9CisJcmMgPSBjaWZzX3JlY29ubmVjdF90Y29uKHRjb24sIHNtYl9jb21tYW5kKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMzk2MSw2ICszODk1LDEwIEBACiAJCWlmIChpc191bmljb2RlKSB7CiAJCQlfX2xlMTYgKnRtcCA9IGttYWxsb2Moc3RybGVuKHNlYXJjaE5hbWUpKjIgKyAyLAogCQkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAodG1wID09IE5VTEwpIHsKKwkJCQlyYyA9IC1FTk9NRU07CisJCQkJZ290byBwYXJzZV9ERlNfcmVmZXJyYWxzX2V4aXQ7CisJCQl9CiAJCQljaWZzQ29udmVydFRvVUNTKChfX2xlMTYgKikgdG1wLCBzZWFyY2hOYW1lLAogCQkJCQlQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCQlub2RlLT5wYXRoX2NvbnN1bWVkID0gY2lmc191Y3MyX2J5dGVzKHRtcCwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggMWYzMzQ1ZC4uZDQ5NjgyNCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTEzNzcsNyArMTM3Nyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICoKLWNpZnNfZmluZF90Y3Bfc2Vzc2lvbihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcikKK2NpZnNfZmluZF90Y3Bfc2Vzc2lvbihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkciwgdW5zaWduZWQgc2hvcnQgaW50IHBvcnQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcjsKQEAgLTEzOTcsMTYgKzEzOTcsMzcgQEAKIAkJaWYgKHNlcnZlci0+dGNwU3RhdHVzID09IENpZnNOZXcpCiAJCQljb250aW51ZTsKIAotCQlpZiAoYWRkci0+c3NfZmFtaWx5ID09IEFGX0lORVQgJiYKLQkJICAgIChhZGRyNC0+c2luX2FkZHIuc19hZGRyICE9Ci0JCSAgICAgc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9hZGRyLnNfYWRkcikpCi0JCQljb250aW51ZTsKLQkJZWxzZSBpZiAoYWRkci0+c3NfZmFtaWx5ID09IEFGX0lORVQ2ICYmCi0JCQkgKCFpcHY2X2FkZHJfZXF1YWwoJnNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9hZGRyLAotCQkJCQkgICAmYWRkcjYtPnNpbjZfYWRkcikgfHwKLQkJCSAgc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X3Njb3BlX2lkICE9Ci0JCQkJCSAgIGFkZHI2LT5zaW42X3Njb3BlX2lkKSkKLQkJCWNvbnRpbnVlOworCQlzd2l0Y2ggKGFkZHItPnNzX2ZhbWlseSkgeworCQljYXNlIEFGX0lORVQ6CisJCQlpZiAoYWRkcjQtPnNpbl9hZGRyLnNfYWRkciA9PQorCQkJICAgIHNlcnZlci0+YWRkci5zb2NrQWRkci5zaW5fYWRkci5zX2FkZHIpIHsKKwkJCQlhZGRyNC0+c2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKwkJCQkvKiB1c2VyIG92ZXJyb2RlIGRlZmF1bHQgcG9ydD8gKi8KKwkJCQlpZiAoYWRkcjQtPnNpbl9wb3J0KSB7CisJCQkJCWlmIChhZGRyNC0+c2luX3BvcnQgIT0KKwkJCQkJICAgIHNlcnZlci0+YWRkci5zb2NrQWRkci5zaW5fcG9ydCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0gZWxzZQorCQkJCWNvbnRpbnVlOworCisJCWNhc2UgQUZfSU5FVDY6CisJCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZhZGRyNi0+c2luNl9hZGRyLAorCQkJICAgICZzZXJ2ZXItPmFkZHIuc29ja0FkZHI2LnNpbjZfYWRkcikgJiYKKwkJCSAgICAoYWRkcjYtPnNpbjZfc2NvcGVfaWQgPT0KKwkJCSAgICBzZXJ2ZXItPmFkZHIuc29ja0FkZHI2LnNpbjZfc2NvcGVfaWQpKSB7CisJCQkJYWRkcjYtPnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOworCQkJCS8qIHVzZXIgb3ZlcnJvZGUgZGVmYXVsdCBwb3J0PyAqLworCQkJCWlmIChhZGRyNi0+c2luNl9wb3J0KSB7CisJCQkJCWlmIChhZGRyNi0+c2luNl9wb3J0ICE9CisJCQkJCSAgIHNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9wb3J0KQorCQkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfSBlbHNlCisJCQkJY29udGludWU7CisJCX0KIAogCQkrK3NlcnZlci0+c3J2X2NvdW50OwogCQl3cml0ZV91bmxvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKQEAgLTE0NzUsNyArMTQ5Niw3IEBACiAJfQogCiAJLyogc2VlIGlmIHdlIGFscmVhZHkgaGF2ZSBhIG1hdGNoaW5nIHRjcF9zZXMgKi8KLQl0Y3Bfc2VzID0gY2lmc19maW5kX3RjcF9zZXNzaW9uKCZhZGRyKTsKKwl0Y3Bfc2VzID0gY2lmc19maW5kX3RjcF9zZXNzaW9uKCZhZGRyLCB2b2x1bWVfaW5mby0+cG9ydCk7CiAJaWYgKHRjcF9zZXMpCiAJCXJldHVybiB0Y3Bfc2VzOwogCkBAIC0yNjM2LDkgKzI2NTcsOSBAQAogCQlyZXR1cm4gLUVJTzsKIAogCXNtYl9idWZmZXIgPSBjaWZzX2J1Zl9nZXQoKTsKLQlpZiAoc21iX2J1ZmZlciA9PSBOVUxMKSB7CisJaWYgKHNtYl9idWZmZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCiAJc21iX2J1ZmZlcl9yZXNwb25zZSA9IHNtYl9idWZmZXI7CiAKIAloZWFkZXJfYXNzZW1ibGUoc21iX2J1ZmZlciwgU01CX0NPTV9UUkVFX0NPTk5FQ1RfQU5EWCwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZGlyLmMgYi9mcy9jaWZzL2Rpci5jCmluZGV4IDQzMjZmZmQuLmE2NDI0Y2YgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZGlyLmMKKysrIGIvZnMvY2lmcy9kaXIuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJbXV0ZXhfaW5pdCgmcENpZnNGaWxlLT5maF9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmcENpZnNGaWxlLT5sb2NrX211dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmcENpZnNGaWxlLT5sbGlzdCk7Ci0JYXRvbWljX3NldCgmcENpZnNGaWxlLT53cnRQZW5kaW5nLCAwKTsKKwlhdG9taWNfc2V0KCZwQ2lmc0ZpbGUtPmNvdW50LCAxKTsKIAogCS8qIHNldCB0aGUgZm9sbG93aW5nIGluIG9wZW4gbm93CiAJCQlwQ2lmc0ZpbGUtPnBmaWxlID0gZmlsZTsgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZmlsZS5jIGIvZnMvY2lmcy9maWxlLmMKaW5kZXggYzM0YjdmOC4uZmE3YmVhYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9maWxlLmMKKysrIGIvZnMvY2lmcy9maWxlLmMKQEAgLTUzLDExICs1Myw5IEBACiAJcHJpdmF0ZV9kYXRhLT5wSW5vZGUgPSBpbm9kZTsKIAlwcml2YXRlX2RhdGEtPmludmFsaWRIYW5kbGUgPSBmYWxzZTsKIAlwcml2YXRlX2RhdGEtPmNsb3NlUGVuZCA9IGZhbHNlOwotCS8qIHdlIGhhdmUgdG8gdHJhY2sgbnVtIHdyaXRlcnMgdG8gdGhlIGlub2RlLCBzaW5jZSB3cml0ZXBhZ2VzCi0JZG9lcyBub3QgdGVsbCB1cyB3aGljaCBoYW5kbGUgdGhlIHdyaXRlIGlzIGZvciBzbyB0aGVyZSBjYW4KLQliZSBhIGNsb3NlIChvdmVybGFwcGluZyB3aXRoIHdyaXRlKSBvZiB0aGUgZmlsZWhhbmRsZSB0aGF0Ci0JY2lmc193cml0ZXBhZ2VzIGNob3NlIHRvIHVzZSAqLwotCWF0b21pY19zZXQoJnByaXZhdGVfZGF0YS0+d3J0UGVuZGluZywgMCk7CisJLyogSW5pdGlhbGl6ZSByZWZlcmVuY2UgY291bnQgdG8gb25lLiAgVGhlIHByaXZhdGUgZGF0YSBpcworCWZyZWVkIG9uIHRoZSByZWxlYXNlIG9mIHRoZSBsYXN0IHJlZmVyZW5jZSAqLworCWF0b21pY19zZXQoJnByaXZhdGVfZGF0YS0+Y291bnQsIDEpOwogCiAJcmV0dXJuIHByaXZhdGVfZGF0YTsKIH0KQEAgLTY0Myw3ICs2NDEsNyBAQAogCQkJaWYgKCFwVGNvbi0+bmVlZF9yZWNvbm5lY3QpIHsKIAkJCQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCQkJCXRpbWVvdXQgPSAyOwotCQkJCXdoaWxlICgoYXRvbWljX3JlYWQoJnBTTUJGaWxlLT53cnRQZW5kaW5nKSAhPSAwKQorCQkJCXdoaWxlICgoYXRvbWljX3JlYWQoJnBTTUJGaWxlLT5jb3VudCkgIT0gMSkKIAkJCQkJJiYgKHRpbWVvdXQgPD0gMjA0OCkpIHsKIAkJCQkJLyogR2l2ZSB3cml0ZSBhIGJldHRlciBjaGFuY2UgdG8gZ2V0IHRvCiAJCQkJCXNlcnZlciBhaGVhZCBvZiB0aGUgY2xvc2UuICBXZSBkbyBub3QKQEAgLTY1Nyw4ICs2NTUsNiBAQAogCQkJCQltc2xlZXAodGltZW91dCk7CiAJCQkJCXRpbWVvdXQgKj0gNDsKIAkJCQl9Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZwU01CRmlsZS0+d3J0UGVuZGluZykpCi0JCQkJCWNFUlJPUigxLCAoImNsb3NlIHdpdGggcGVuZGluZyB3cml0ZSIpKTsKIAkJCQlpZiAoIXBUY29uLT5uZWVkX3JlY29ubmVjdCAmJgogCQkJCSAgICAhcFNNQkZpbGUtPmludmFsaWRIYW5kbGUpCiAJCQkJCXJjID0gQ0lGU1NNQkNsb3NlKHhpZCwgcFRjb24sCkBAIC02ODEsMjQgKzY3Nyw3IEBACiAJCWxpc3RfZGVsKCZwU01CRmlsZS0+Zmxpc3QpOwogCQlsaXN0X2RlbCgmcFNNQkZpbGUtPnRsaXN0KTsKIAkJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQkJdGltZW91dCA9IDEwOwotCQkvKiBXZSB3YWl0ZWQgYWJvdmUgdG8gZ2l2ZSB0aGUgU01CV3JpdGUgYSBjaGFuY2UgdG8gaXNzdWUKLQkJICAgb24gdGhlIHdpcmUgKHNvIHdlIGRvIG5vdCBnZXQgU01CV3JpdGUgcmV0dXJuaW5nIEVCQURGCi0JCSAgIGlmIHdyaXRlcGFnZXMgaXMgcmFjaW5nIHdpdGggY2xvc2UuICBOb3RlIHRoYXQgd3JpdGVwYWdlcwotCQkgICBkb2VzIG5vdCBzcGVjaWZ5IGEgZmlsZSBoYW5kbGUsIHNvIGl0IGlzIHBvc3NpYmxlIGZvciBhIGZpbGUKLQkJICAgdG8gYmUgb3BlbmVkIHR3aWNlLCBhbmQgdGhlIGFwcGxpY2F0aW9uIGNsb3NlIHRoZSAid3JvbmciCi0JCSAgIGZpbGUgaGFuZGxlIC0gaW4gdGhlc2UgY2FzZXMgd2UgZGVsYXkgbG9uZyBlbm91Z2ggdG8gYWxsb3cKLQkJICAgdGhlIFNNQldyaXRlIHRvIGdldCBvbiB0aGUgd2lyZSBiZWZvcmUgdGhlIFNNQiBDbG9zZS4KLQkJICAgV2UgYWxsb3cgdG90YWwgd2FpdCBoZXJlIG92ZXIgNDUgc2Vjb25kcywgbW9yZSB0aGFuCi0JCSAgIG9wbG9jayBicmVhayB0aW1lLCBhbmQgbW9yZSB0aGFuIGVub3VnaCB0byBhbGxvdyBhbnkgd3JpdGUKLQkJICAgdG8gY29tcGxldGUgb24gdGhlIHNlcnZlciwgb3IgdG8gdGltZSBvdXQgb24gdGhlIGNsaWVudCAqLwotCQl3aGlsZSAoKGF0b21pY19yZWFkKCZwU01CRmlsZS0+d3J0UGVuZGluZykgIT0gMCkKLQkJCQkmJiAodGltZW91dCA8PSA1MDAwMCkpIHsKLQkJCWNFUlJPUigxLCAoIndyaXRlcyBwZW5kaW5nLCBkZWxheSBmcmVlIG9mIGhhbmRsZSIpKTsKLQkJCW1zbGVlcCh0aW1lb3V0KTsKLQkJCXRpbWVvdXQgKj0gODsKLQkJfQotCQlrZnJlZShmaWxlLT5wcml2YXRlX2RhdGEpOworCQljaWZzRmlsZUluZm9fcHV0KGZpbGUtPnByaXZhdGVfZGF0YSk7CiAJCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJfSBlbHNlCiAJCXJjID0gLUVCQURGOwpAQCAtMTIzNiw3ICsxMjE1LDcgQEAKIAkJCWlmICghb3Blbl9maWxlLT5pbnZhbGlkSGFuZGxlKSB7CiAJCQkJLyogZm91bmQgYSBnb29kIGZpbGUgKi8KIAkJCQkvKiBsb2NrIGl0IHNvIGl0IHdpbGwgbm90IGJlIGNsb3NlZCBvbiB1cyAqLwotCQkJCWF0b21pY19pbmMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7CisJCQkJY2lmc0ZpbGVJbmZvX2dldChvcGVuX2ZpbGUpOwogCQkJCXJlYWRfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAkJCQlyZXR1cm4gb3Blbl9maWxlOwogCQkJfSAvKiBlbHNlIG1pZ2h0IGFzIHdlbGwgY29udGludWUsIGFuZCBsb29rIGZvcgpAQCAtMTI3Niw3ICsxMjU1LDcgQEAKIAkJaWYgKG9wZW5fZmlsZS0+cGZpbGUgJiYKIAkJICAgICgob3Blbl9maWxlLT5wZmlsZS0+Zl9mbGFncyAmIE9fUkRXUikgfHwKIAkJICAgICAob3Blbl9maWxlLT5wZmlsZS0+Zl9mbGFncyAmIE9fV1JPTkxZKSkpIHsKLQkJCWF0b21pY19pbmMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7CisJCQljaWZzRmlsZUluZm9fZ2V0KG9wZW5fZmlsZSk7CiAKIAkJCWlmICghb3Blbl9maWxlLT5pbnZhbGlkSGFuZGxlKSB7CiAJCQkJLyogZm91bmQgYSBnb29kIHdyaXRhYmxlIGZpbGUgKi8KQEAgLTEyOTMsNyArMTI3Miw3IEBACiAJCQkJZWxzZSB7IC8qIHN0YXJ0IG92ZXIgaW4gY2FzZSB0aGlzIHdhcyBkZWxldGVkICovCiAJCQkJICAgICAgIC8qIHNpbmNlIHRoZSBsaXN0IGNvdWxkIGJlIG1vZGlmaWVkICovCiAJCQkJCXJlYWRfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7Ci0JCQkJCWF0b21pY19kZWMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7CisJCQkJCWNpZnNGaWxlSW5mb19wdXQob3Blbl9maWxlKTsKIAkJCQkJZ290byByZWZpbmRfd3JpdGFibGU7CiAJCQkJfQogCQkJfQpAQCAtMTMwOSw3ICsxMjg4LDcgQEAKIAkJCXJlYWRfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJCQkvKiBjYW4gbm90IHVzZSB0aGlzIGhhbmRsZSwgbm8gd3JpdGUKIAkJCSAgIHBlbmRpbmcgb24gdGhpcyBvbmUgYWZ0ZXIgYWxsICovCi0JCQlhdG9taWNfZGVjKCZvcGVuX2ZpbGUtPndydFBlbmRpbmcpOworCQkJY2lmc0ZpbGVJbmZvX3B1dChvcGVuX2ZpbGUpOwogCiAJCQlpZiAob3Blbl9maWxlLT5jbG9zZVBlbmQpIC8qIGxpc3QgY291bGQgaGF2ZSBjaGFuZ2VkICovCiAJCQkJZ290byByZWZpbmRfd3JpdGFibGU7CkBAIC0xMzczLDcgKzEzNTIsNyBAQAogCWlmIChvcGVuX2ZpbGUpIHsKIAkJYnl0ZXNfd3JpdHRlbiA9IGNpZnNfd3JpdGUob3Blbl9maWxlLT5wZmlsZSwgd3JpdGVfZGF0YSwKIAkJCQkJICAgdG8tZnJvbSwgJm9mZnNldCk7Ci0JCWF0b21pY19kZWMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7CisJCWNpZnNGaWxlSW5mb19wdXQob3Blbl9maWxlKTsKIAkJLyogRG9lcyBtbSBvciB2ZnMgYWxyZWFkeSBzZXQgdGltZXM/ICovCiAJCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpOwogCQlpZiAoKGJ5dGVzX3dyaXR0ZW4gPiAwKSAmJiAob2Zmc2V0KSkKQEAgLTE1NjIsNyArMTU0MSw3IEBACiAJCQkJCQkgICBieXRlc190b193cml0ZSwgb2Zmc2V0LAogCQkJCQkJICAgJmJ5dGVzX3dyaXR0ZW4sIGlvdiwgbl9pb3YsCiAJCQkJCQkgICBsb25nX29wKTsKLQkJCQlhdG9taWNfZGVjKCZvcGVuX2ZpbGUtPndydFBlbmRpbmcpOworCQkJCWNpZnNGaWxlSW5mb19wdXQob3Blbl9maWxlKTsKIAkJCQljaWZzX3VwZGF0ZV9lb2YoY2lmc2ksIG9mZnNldCwgYnl0ZXNfd3JpdHRlbik7CiAKIAkJCQlpZiAocmMgfHwgYnl0ZXNfd3JpdHRlbiA8IGJ5dGVzX3RvX3dyaXRlKSB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggODJkODM4My4uMWYwOWM3NiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtODAwLDcgKzgwMCw3IEBACiAJaWYgKG9wZW5fZmlsZSA9PSBOVUxMKQogCQlDSUZTU01CQ2xvc2UoeGlkLCBwVGNvbiwgbmV0ZmlkKTsKIAllbHNlCi0JCWF0b21pY19kZWMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7CisJCWNpZnNGaWxlSW5mb19wdXQob3Blbl9maWxlKTsKIG91dDoKIAlyZXR1cm4gcmM7CiB9CkBAIC0xNjM1LDcgKzE2MzUsNyBAQAogCQlfX3UzMiBucGlkID0gb3Blbl9maWxlLT5waWQ7CiAJCXJjID0gQ0lGU1NNQlNldEZpbGVTaXplKHhpZCwgcFRjb24sIGF0dHJzLT5pYV9zaXplLCBuZmlkLAogCQkJCQlucGlkLCBmYWxzZSk7Ci0JCWF0b21pY19kZWMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7CisJCWNpZnNGaWxlSW5mb19wdXQob3Blbl9maWxlKTsKIAkJY0ZZSSgxLCAoIlNldEZTaXplIGZvciBhdHRycyByYyA9ICVkIiwgcmMpKTsKIAkJaWYgKChyYyA9PSAtRUlOVkFMKSB8fCAocmMgPT0gLUVPUE5PVFNVUFApKSB7CiAJCQl1bnNpZ25lZCBpbnQgYnl0ZXNfd3JpdHRlbjsKQEAgLTE3OTAsNyArMTc5MCw3IEBACiAJCXUxNiBuZmlkID0gb3Blbl9maWxlLT5uZXRmaWQ7CiAJCXUzMiBucGlkID0gb3Blbl9maWxlLT5waWQ7CiAJCXJjID0gQ0lGU1NNQlVuaXhTZXRGaWxlSW5mbyh4aWQsIHBUY29uLCBhcmdzLCBuZmlkLCBucGlkKTsKLQkJYXRvbWljX2RlYygmb3Blbl9maWxlLT53cnRQZW5kaW5nKTsKKwkJY2lmc0ZpbGVJbmZvX3B1dChvcGVuX2ZpbGUpOwogCX0gZWxzZSB7CiAJCXJjID0gQ0lGU1NNQlVuaXhTZXRQYXRoSW5mbyh4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGFyZ3MsCiAJCQkJICAgIGNpZnNfc2ItPmxvY2FsX25scywKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCmluZGV4IDBhZDNlMmQuLjFkYTRhYjIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMKKysrIGIvZnMvY2lmcy90cmFuc3BvcnQuYwpAQCAtMTE5LDIwICsxMTksMTkgQEAKIAkJdGVtcC0+cGlub2RlID0gcGlub2RlOwogCQl0ZW1wLT50Y29uID0gdGNvbjsKIAkJdGVtcC0+bmV0ZmlkID0gZmlkOwotCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQkJbGlzdF9hZGRfdGFpbCgmdGVtcC0+cWhlYWQsICZHbG9iYWxPcGxvY2tfUSk7Ci0JCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCXNwaW5fbG9jaygmY2lmc19vcGxvY2tfbG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJnRlbXAtPnFoZWFkLCAmY2lmc19vcGxvY2tfbGlzdCk7CisJCXNwaW5fdW5sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKIAl9CiAJcmV0dXJuIHRlbXA7Ci0KIH0KIAogdm9pZCBEZWxldGVPcGxvY2tRRW50cnkoc3RydWN0IG9wbG9ja19xX2VudHJ5ICpvcGxvY2tFbnRyeSkKIHsKLQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwlzcGluX2xvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwogICAgIC8qIHNob3VsZCB3ZSBjaGVjayBpZiBsaXN0IGVtcHR5IGZpcnN0PyAqLwogCWxpc3RfZGVsKCZvcGxvY2tFbnRyeS0+cWhlYWQpOwotCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwogCWttZW1fY2FjaGVfZnJlZShjaWZzX29wbG9ja19jYWNoZXAsIG9wbG9ja0VudHJ5KTsKIH0KIApAQCAtMTQ0LDE0ICsxNDMsMTQgQEAKIAlpZiAodGNvbiA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlbXAsICZHbG9iYWxPcGxvY2tfUSwgcWhlYWQpIHsKKwlzcGluX2xvY2soJmNpZnNfb3Bsb2NrX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcCwgJmNpZnNfb3Bsb2NrX2xpc3QsIHFoZWFkKSB7CiAJCWlmICgodGVtcC0+dGNvbikgJiYgKHRlbXAtPnRjb24gPT0gdGNvbikpIHsKIAkJCWxpc3RfZGVsKCZ0ZW1wLT5xaGVhZCk7CiAJCQlrbWVtX2NhY2hlX2ZyZWUoY2lmc19vcGxvY2tfY2FjaGVwLCB0ZW1wKTsKIAkJfQogCX0KLQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCXNwaW5fdW5sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvaW5vZGUuYyBiL2ZzL2NvbmZpZ2ZzL2lub2RlLmMKaW5kZXggNDkyMWU3NDIuLmEyZjc0NjAgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2lub2RlLmMKKysrIGIvZnMvY29uZmlnZnMvaW5vZGUuYwpAQCAtNTEsNiArNTEsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGNvbmZpZ2ZzX2JhY2tpbmdfZGV2X2luZm8gPSB7CisJLm5hbWUJCT0gImNvbmZpZ2ZzIiwKIAkucmFfcGFnZXMJPSAwLAkvKiBObyByZWFkYWhlYWQgKi8KIAkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0ssCiB9OwpkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCA5ZTVjZDNjLi5hMTAwZmEzIDEwMDY0NAotLS0gYS9mcy9kY2FjaGUuYworKysgYi9mcy9kY2FjaGUuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIGludCBzeXNjdGxfdmZzX2NhY2hlX3ByZXNzdXJlIF9fcmVhZF9tb3N0bHkgPSAxMDA7CmRpZmYgLS1naXQgYS9mcy9kbG0vbmV0bGluay5jIGIvZnMvZGxtL25ldGxpbmsuYwppbmRleCBjY2M5ZDYyLi41NWVhMzY5IDEwMDY0NAotLS0gYS9mcy9kbG0vbmV0bGluay5jCisrKyBiL2ZzL2RsbS9uZXRsaW5rLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAkJcmV0dXJuIHJ2OwogCX0KIAotCXJldHVybiBnZW5sbXNnX3VuaWNhc3Qoc2tiLCBsaXN0ZW5lcl9ubHBpZCk7CisJcmV0dXJuIGdlbmxtc2dfdW5pY2FzdCgmaW5pdF9uZXQsIHNrYiwgbGlzdGVuZXJfbmxwaWQpOwogfQogCiBzdGF0aWMgaW50IHVzZXJfY21kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCmRpZmYgLS1naXQgYS9mcy9leHQyL2FjbC5jIGIvZnMvZXh0Mi9hY2wuYwppbmRleCBkNjM2ZTEyLi5hNjNkNDQyIDEwMDY0NAotLS0gYS9mcy9leHQyL2FjbC5jCisrKyBiL2ZzL2V4dDIvYWNsLmMKQEAgLTIzMCw3ICsyMzAsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludAoraW50CiBleHQyX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBleHQyX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7CkBAIC0yNDYsMTIgKzI0Niw2IEBACiAJcmV0dXJuIC1FQUdBSU47CiB9CiAKLWludAotZXh0Ml9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQotewotCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIGV4dDJfY2hlY2tfYWNsKTsKLX0KLQogLyoKICAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIGV4dDJfbmV3X2lub2RlLgogICoKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvYWNsLmggYi9mcy9leHQyL2FjbC5oCmluZGV4IGVjZWZlNDcuLjNmZjZjYmIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvYWNsLmgKKysrIGIvZnMvZXh0Mi9hY2wuaApAQCAtNTQsMTMgKzU0LDEzIEBACiAjaWZkZWYgQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMCiAKIC8qIGFjbC5jICovCi1leHRlcm4gaW50IGV4dDJfcGVybWlzc2lvbiAoc3RydWN0IGlub2RlICosIGludCk7CitleHRlcm4gaW50IGV4dDJfY2hlY2tfYWNsIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKIGV4dGVybiBpbnQgZXh0Ml9hY2xfY2htb2QgKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgZXh0Ml9pbml0X2FjbCAoc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqKTsKIAogI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2RlZmluZSBleHQyX3Blcm1pc3Npb24gTlVMTAorI2RlZmluZSBleHQyX2NoZWNrX2FjbAlOVUxMCiAjZGVmaW5lIGV4dDJfZ2V0X2FjbAlOVUxMCiAjZGVmaW5lIGV4dDJfc2V0X2FjbAlOVUxMCiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvZmlsZS5jIGIvZnMvZXh0Mi9maWxlLmMKaW5kZXggMmI5ZTQ3ZC4uYTJmM2FmZCAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9maWxlLmMKKysrIGIvZnMvZXh0Mi9maWxlLmMKQEAgLTg1LDYgKzg1LDYgQEAKIAkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAogI2VuZGlmCiAJLnNldGF0dHIJPSBleHQyX3NldGF0dHIsCi0JLnBlcm1pc3Npb24JPSBleHQyX3Blcm1pc3Npb24sCisJLmNoZWNrX2FjbAk9IGV4dDJfY2hlY2tfYWNsLAogCS5maWVtYXAJCT0gZXh0Ml9maWVtYXAsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9pbm9kZS5jIGIvZnMvZXh0Mi9pbm9kZS5jCmluZGV4IGUyNzEzMDMuLjFjMTYzOGYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvaW5vZGUuYworKysgYi9mcy9leHQyL2lub2RlLmMKQEAgLTQ4Miw3ICs0ODIsNyBAQAogCQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJbWFya19idWZmZXJfZGlydHlfaW5vZGUoYmgsIGlub2RlKTsKIAkJLyogV2UgdXNlZCB0byBzeW5jIGJoIGhlcmUgaWYgSVNfU1lOQyhpbm9kZSkuCi0JCSAqIEJ1dCB3ZSBub3cgcmVseSB1cG9uIGdlbmVyaWNfb3N5bmNfaW5vZGUoKQorCQkgKiBCdXQgd2Ugbm93IHJlbHkgdXBvbiBnZW5lcmljX3dyaXRlX3N5bmMoKQogCQkgKiBhbmQgYl9pbm9kZV9idWZmZXJzLiAgQnV0IG5vdCBmb3IgZGlyZWN0b3JpZXMuCiAJCSAqLwogCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiBJU19ESVJTWU5DKGlub2RlKSkKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvbmFtZWkuYyBiL2ZzL2V4dDIvbmFtZWkuYwppbmRleCA3OGQ5YjkyLi4yMzcwMWYyIDEwMDY0NAotLS0gYS9mcy9leHQyL25hbWVpLmMKKysrIGIvZnMvZXh0Mi9uYW1laS5jCkBAIC00MDAsNyArNDAwLDcgQEAKIAkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAogI2VuZGlmCiAJLnNldGF0dHIJPSBleHQyX3NldGF0dHIsCi0JLnBlcm1pc3Npb24JPSBleHQyX3Blcm1pc3Npb24sCisJLmNoZWNrX2FjbAk9IGV4dDJfY2hlY2tfYWNsLAogfTsKIAogY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0Ml9zcGVjaWFsX2lub2RlX29wZXJhdGlvbnMgPSB7CkBAIC00MTEsNSArNDExLDUgQEAKIAkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAogI2VuZGlmCiAJLnNldGF0dHIJPSBleHQyX3NldGF0dHIsCi0JLnBlcm1pc3Npb24JPSBleHQyX3Blcm1pc3Npb24sCisJLmNoZWNrX2FjbAk9IGV4dDJfY2hlY2tfYWNsLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvYWNsLmMgYi9mcy9leHQzL2FjbC5jCmluZGV4IGUxNjdiYWUuLmM5YjBkZjMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvYWNsLmMKKysrIGIvZnMvZXh0My9hY2wuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50CitpbnQKIGV4dDNfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IGV4dDNfZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKQEAgLTI1NCwxMiArMjU0LDYgQEAKIAlyZXR1cm4gLUVBR0FJTjsKIH0KIAotaW50Ci1leHQzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCi17Ci0JcmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgZXh0M19jaGVja19hY2wpOwotfQotCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gZXh0M19uZXdfaW5vZGUuCiAgKgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9hY2wuaCBiL2ZzL2V4dDMvYWNsLmgKaW5kZXggMDdkMTVhMy4uNTk3MzM0NiAxMDA2NDQKLS0tIGEvZnMvZXh0My9hY2wuaAorKysgYi9mcy9leHQzL2FjbC5oCkBAIC01NCwxMyArNTQsMTMgQEAKICNpZmRlZiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wKIAogLyogYWNsLmMgKi8KLWV4dGVybiBpbnQgZXh0M19wZXJtaXNzaW9uIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK2V4dGVybiBpbnQgZXh0M19jaGVja19hY2wgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogZXh0ZXJuIGludCBleHQzX2FjbF9jaG1vZCAoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBleHQzX2luaXRfYWNsIChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopOwogCiAjZWxzZSAgLyogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMICovCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNkZWZpbmUgZXh0M19wZXJtaXNzaW9uIE5VTEwKKyNkZWZpbmUgZXh0M19jaGVja19hY2wgTlVMTAogCiBzdGF0aWMgaW5saW5lIGludAogZXh0M19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSkKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvZmlsZS5jIGIvZnMvZXh0My9maWxlLmMKaW5kZXggNWI0OTcwNC4uMzg4YmJkZiAxMDA2NDQKLS0tIGEvZnMvZXh0My9maWxlLmMKKysrIGIvZnMvZXh0My9maWxlLmMKQEAgLTUxLDcxICs1MSwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdAotZXh0M19maWxlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCi0JCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKLXsKLQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0Jc3NpemVfdCByZXQ7Ci0JaW50IGVycjsKLQotCXJldCA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOwotCi0JLyoKLQkgKiBTa2lwIGZsdXNoaW5nIGlmIHRoZXJlIHdhcyBhbiBlcnJvciwgb3IgaWYgbm90aGluZyB3YXMgd3JpdHRlbi4KLQkgKi8KLQlpZiAocmV0IDw9IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIElmIHRoZSBpbm9kZSBpcyBJU19TWU5DLCBvciBpcyBPX1NZTkMgYW5kIHdlIGFyZSBkb2luZyBkYXRhCi0JICogam91cm5hbGxpbmcgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGZvcmNlIHRoZSB0cmFuc2FjdGlvbgotCSAqIHRvIGRpc2sgdG8ga2VlcCBhbGwgbWV0YWRhdGEgdXB0b2RhdGUgc3luY2hyb25vdXNseS4KLQkgKi8KLQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgewotCQkvKgotCQkgKiBJZiB3ZSBhcmUgbm9uLWRhdGEtam91cm5hbGVkLCB0aGVuIHRoZSBkaXJ0eSBkYXRhIGhhcwotCQkgKiBhbHJlYWR5IGJlZW4gZmx1c2hlZCB0byBiYWNraW5nIHN0b3JlIGJ5IGdlbmVyaWNfb3N5bmNfaW5vZGUsCi0JCSAqIGFuZCB0aGUgaW5vZGUgaGFzIGJlZW4gZmx1c2hlZCB0b28gaWYgdGhlcmUgaGF2ZSBiZWVuIGFueQotCQkgKiBtb2RpZmljYXRpb25zIG90aGVyIHRoYW4gbWVyZSB0aW1lc3RhbXAgdXBkYXRlcy4KLQkJICoKLQkJICogT3BlbiBxdWVzdGlvbiAtLS0gZG8gd2UgY2FyZSBhYm91dCBmbHVzaGluZyB0aW1lc3RhbXBzIHRvbwotCQkgKiBpZiB0aGUgaW5vZGUgaXMgSVNfU1lOQz8KLQkJICovCi0JCWlmICghZXh0M19zaG91bGRfam91cm5hbF9kYXRhKGlub2RlKSkKLQkJCXJldHVybiByZXQ7Ci0KLQkJZ290byBmb3JjZV9jb21taXQ7Ci0JfQotCi0JLyoKLQkgKiBTbyB3ZSBrbm93IHRoYXQgdGhlcmUgaGFzIGJlZW4gbm8gZm9yY2VkIGRhdGEgZmx1c2guICBJZiB0aGUgaW5vZGUKLQkgKiBpcyBtYXJrZWQgSVNfU1lOQywgd2UgbmVlZCB0byBmb3JjZSBvbmUgb3Vyc2VsdmVzLgotCSAqLwotCWlmICghSVNfU1lOQyhpbm9kZSkpCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIE9wZW4gcXVlc3Rpb24gIzIgLS0tIHNob3VsZCB3ZSBmb3JjZSBkYXRhIHRvIGRpc2sgaGVyZSB0b28/ICBJZiB3ZQotCSAqIGRvbid0LCB0aGUgb25seSBpbXBhY3QgaXMgdGhhdCBkYXRhPXdyaXRlYmFjayBmaWxlc3lzdGVtcyB3b24ndAotCSAqIGZsdXNoIGRhdGEgdG8gZGlzayBhdXRvbWF0aWNhbGx5IG9uIElTX1NZTkMsIG9ubHkgbWV0YWRhdGEgKGJ1dAotCSAqIGhpc3RvcmljYWxseSwgdGhhdCBpcyB3aGF0IGV4dDIgaGFzIGRvbmUuKQotCSAqLwotCi1mb3JjZV9jb21taXQ6Ci0JZXJyID0gZXh0M19mb3JjZV9jb21taXQoaW5vZGUtPmlfc2IpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIHJldDsKLX0KLQogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAogCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKLQkuYWlvX3dyaXRlCT0gZXh0M19maWxlX3dyaXRlLAorCS5haW9fd3JpdGUJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAogCS51bmxvY2tlZF9pb2N0bAk9IGV4dDNfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSBleHQzX2NvbXBhdF9pb2N0bCwKQEAgLTEzNyw3ICs3OCw3IEBACiAJLmxpc3R4YXR0cgk9IGV4dDNfbGlzdHhhdHRyLAogCS5yZW1vdmV4YXR0cgk9IGdlbmVyaWNfcmVtb3ZleGF0dHIsCiAjZW5kaWYKLQkucGVybWlzc2lvbgk9IGV4dDNfcGVybWlzc2lvbiwKKwkuY2hlY2tfYWNsCT0gZXh0M19jaGVja19hY2wsCiAJLmZpZW1hcAkJPSBleHQzX2ZpZW1hcCwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvbmFtZWkuYyBiL2ZzL2V4dDMvbmFtZWkuYwppbmRleCA2ZmY3Yjk3Li5hYWQ2NDAwIDEwMDY0NAotLS0gYS9mcy9leHQzL25hbWVpLmMKKysrIGIvZnMvZXh0My9uYW1laS5jCkBAIC0yNDQ1LDcgKzI0NDUsNyBAQAogCS5saXN0eGF0dHIJPSBleHQzX2xpc3R4YXR0ciwKIAkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAogI2VuZGlmCi0JLnBlcm1pc3Npb24JPSBleHQzX3Blcm1pc3Npb24sCisJLmNoZWNrX2FjbAk9IGV4dDNfY2hlY2tfYWNsLAogfTsKIAogY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXh0M19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnMgPSB7CkBAIC0yNDU2LDUgKzI0NTYsNSBAQAogCS5saXN0eGF0dHIJPSBleHQzX2xpc3R4YXR0ciwKIAkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAogI2VuZGlmCi0JLnBlcm1pc3Npb24JPSBleHQzX3Blcm1pc3Npb24sCisJLmNoZWNrX2FjbAk9IGV4dDNfY2hlY2tfYWNsLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYWNsLmMgYi9mcy9leHQ0L2FjbC5jCmluZGV4IGY2ZDg5NjcuLjBkZjg4YjIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYWNsLmMKKysrIGIvZnMvZXh0NC9hY2wuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50CitpbnQKIGV4dDRfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IGV4dDRfZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKQEAgLTI1MiwxMiArMjUyLDYgQEAKIAlyZXR1cm4gLUVBR0FJTjsKIH0KIAotaW50Ci1leHQ0X3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCi17Ci0JcmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgZXh0NF9jaGVja19hY2wpOwotfQotCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gZXh0NF9uZXdfaW5vZGUuCiAgKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9hY2wuaCBiL2ZzL2V4dDQvYWNsLmgKaW5kZXggOTQ5Nzg5ZC4uOWQ4NDNkNSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9hY2wuaAorKysgYi9mcy9leHQ0L2FjbC5oCkBAIC01NCwxMyArNTQsMTMgQEAKICNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wKIAogLyogYWNsLmMgKi8KLWV4dGVybiBpbnQgZXh0NF9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworZXh0ZXJuIGludCBleHQ0X2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKIGV4dGVybiBpbnQgZXh0NF9hY2xfY2htb2Qoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBleHQ0X2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7CiAKICNlbHNlICAvKiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgKi8KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2RlZmluZSBleHQ0X3Blcm1pc3Npb24gTlVMTAorI2RlZmluZSBleHQ0X2NoZWNrX2FjbCBOVUxMCiAKIHN0YXRpYyBpbmxpbmUgaW50CiBleHQ0X2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuYwppbmRleCAzZjE4NzNmLi41Y2EzZWNhIDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZpbGUuYworKysgYi9mcy9leHQ0L2ZpbGUuYwpAQCAtNTgsMTAgKzU4LDcgQEAKIGV4dDRfZmlsZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAogCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCXNzaXplX3QgcmV0OwotCWludCBlcnI7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgZW5jb3VudGVyZWQgYSBiaXRtYXAtZm9ybWF0IGZpbGUsIHRoZSBzaXplIGxpbWl0CkBAIC04MSw1MyArNzgsNyBAQAogCQl9CiAJfQogCi0JcmV0ID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7Ci0JLyoKLQkgKiBTa2lwIGZsdXNoaW5nIGlmIHRoZXJlIHdhcyBhbiBlcnJvciwgb3IgaWYgbm90aGluZyB3YXMgd3JpdHRlbi4KLQkgKi8KLQlpZiAocmV0IDw9IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIElmIHRoZSBpbm9kZSBpcyBJU19TWU5DLCBvciBpcyBPX1NZTkMgYW5kIHdlIGFyZSBkb2luZyBkYXRhCi0JICogam91cm5hbGxpbmcgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGZvcmNlIHRoZSB0cmFuc2FjdGlvbgotCSAqIHRvIGRpc2sgdG8ga2VlcCBhbGwgbWV0YWRhdGEgdXB0b2RhdGUgc3luY2hyb25vdXNseS4KLQkgKi8KLQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgewotCQkvKgotCQkgKiBJZiB3ZSBhcmUgbm9uLWRhdGEtam91cm5hbGVkLCB0aGVuIHRoZSBkaXJ0eSBkYXRhIGhhcwotCQkgKiBhbHJlYWR5IGJlZW4gZmx1c2hlZCB0byBiYWNraW5nIHN0b3JlIGJ5IGdlbmVyaWNfb3N5bmNfaW5vZGUsCi0JCSAqIGFuZCB0aGUgaW5vZGUgaGFzIGJlZW4gZmx1c2hlZCB0b28gaWYgdGhlcmUgaGF2ZSBiZWVuIGFueQotCQkgKiBtb2RpZmljYXRpb25zIG90aGVyIHRoYW4gbWVyZSB0aW1lc3RhbXAgdXBkYXRlcy4KLQkJICoKLQkJICogT3BlbiBxdWVzdGlvbiAtLS0gZG8gd2UgY2FyZSBhYm91dCBmbHVzaGluZyB0aW1lc3RhbXBzIHRvbwotCQkgKiBpZiB0aGUgaW5vZGUgaXMgSVNfU1lOQz8KLQkJICovCi0JCWlmICghZXh0NF9zaG91bGRfam91cm5hbF9kYXRhKGlub2RlKSkKLQkJCXJldHVybiByZXQ7Ci0KLQkJZ290byBmb3JjZV9jb21taXQ7Ci0JfQotCi0JLyoKLQkgKiBTbyB3ZSBrbm93IHRoYXQgdGhlcmUgaGFzIGJlZW4gbm8gZm9yY2VkIGRhdGEgZmx1c2guICBJZiB0aGUgaW5vZGUKLQkgKiBpcyBtYXJrZWQgSVNfU1lOQywgd2UgbmVlZCB0byBmb3JjZSBvbmUgb3Vyc2VsdmVzLgotCSAqLwotCWlmICghSVNfU1lOQyhpbm9kZSkpCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIE9wZW4gcXVlc3Rpb24gIzIgLS0tIHNob3VsZCB3ZSBmb3JjZSBkYXRhIHRvIGRpc2sgaGVyZSB0b28/ICBJZiB3ZQotCSAqIGRvbid0LCB0aGUgb25seSBpbXBhY3QgaXMgdGhhdCBkYXRhPXdyaXRlYmFjayBmaWxlc3lzdGVtcyB3b24ndAotCSAqIGZsdXNoIGRhdGEgdG8gZGlzayBhdXRvbWF0aWNhbGx5IG9uIElTX1NZTkMsIG9ubHkgbWV0YWRhdGEgKGJ1dAotCSAqIGhpc3RvcmljYWxseSwgdGhhdCBpcyB3aGF0IGV4dDIgaGFzIGRvbmUuKQotCSAqLwotCi1mb3JjZV9jb21taXQ6Ci0JZXJyID0gZXh0NF9mb3JjZV9jb21taXQoaW5vZGUtPmlfc2IpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZXh0NF9maWxlX3ZtX29wcyA9IHsKQEAgLTIwNyw3ICsxNTgsNyBAQAogCS5saXN0eGF0dHIJPSBleHQ0X2xpc3R4YXR0ciwKIAkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAogI2VuZGlmCi0JLnBlcm1pc3Npb24JPSBleHQ0X3Blcm1pc3Npb24sCisJLmNoZWNrX2FjbAk9IGV4dDRfY2hlY2tfYWNsLAogCS5mYWxsb2NhdGUJPSBleHQ0X2ZhbGxvY2F0ZSwKIAkuZmllbWFwCQk9IGV4dDRfZmllbWFwLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbmFtZWkuYyBiL2ZzL2V4dDQvbmFtZWkuYwppbmRleCBkZTA0MDEzLi4xMTRhYmU1IDEwMDY0NAotLS0gYS9mcy9leHQ0L25hbWVpLmMKKysrIGIvZnMvZXh0NC9uYW1laS5jCkBAIC0yNTM2LDcgKzI1MzYsNyBAQAogCS5saXN0eGF0dHIJPSBleHQ0X2xpc3R4YXR0ciwKIAkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAogI2VuZGlmCi0JLnBlcm1pc3Npb24JPSBleHQ0X3Blcm1pc3Npb24sCisJLmNoZWNrX2FjbAk9IGV4dDRfY2hlY2tfYWNsLAogCS5maWVtYXAgICAgICAgICA9IGV4dDRfZmllbWFwLAogfTsKIApAQCAtMjU0OCw1ICsyNTQ4LDUgQEAKIAkubGlzdHhhdHRyCT0gZXh0NF9saXN0eGF0dHIsCiAJLnJlbW92ZXhhdHRyCT0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKICNlbmRpZgotCS5wZXJtaXNzaW9uCT0gZXh0NF9wZXJtaXNzaW9uLAorCS5jaGVja19hY2wJPSBleHQ0X2NoZWNrX2FjbCwKIH07CmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuYwppbmRleCBmMDQyYjk2Li5lOGMxNTlkIDEwMDY0NAotLS0gYS9mcy9mYXQvZmlsZS5jCisrKyBiL2ZzL2ZhdC9maWxlLmMKQEAgLTE3Niw4ICsxNzYsMjYgQEAKIAogCWlub2RlLT5pX2N0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCWlmIChJU19TWU5DKGlub2RlKSkKLQkJZXJyID0gc3luY19wYWdlX3JhbmdlX25vbG9jayhpbm9kZSwgbWFwcGluZywgc3RhcnQsIGNvdW50KTsKKwlpZiAoSVNfU1lOQyhpbm9kZSkpIHsKKwkJaW50IGVycjI7CisKKwkJLyoKKwkJICogT3BlbmNvZGUgc3luY2luZyBzaW5jZSB3ZSBkb24ndCBoYXZlIGEgZmlsZSBvcGVuIHRvIHVzZQorCQkgKiBzdGFuZGFyZCBmc3luYyBwYXRoLgorCQkgKi8KKwkJZXJyID0gZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKG1hcHBpbmcsIHN0YXJ0LAorCQkJCQkgICAgICAgc3RhcnQgKyBjb3VudCAtIDEpOworCQllcnIyID0gc3luY19tYXBwaW5nX2J1ZmZlcnMobWFwcGluZyk7CisJCWlmICghZXJyKQorCQkJZXJyID0gZXJyMjsKKwkJZXJyMiA9IHdyaXRlX2lub2RlX25vdyhpbm9kZSwgMSk7CisJCWlmICghZXJyKQorCQkJZXJyID0gZXJyMjsKKwkJaWYgKCFlcnIpIHsKKwkJCWVyciA9ICBmaWxlbWFwX2ZkYXRhd2FpdF9yYW5nZShtYXBwaW5nLCBzdGFydCwKKwkJCQkJCSAgICAgICBzdGFydCArIGNvdW50IC0gMSk7CisJCX0KKwl9CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jCmluZGV4IGE2YzIwNDcuLjRlMzViZTggMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9taXNjLmMKKysrIGIvZnMvZmF0L21pc2MuYwpAQCAtMTE5LDggKzExOSw4IEBACiAJCU1TRE9TX0koaW5vZGUpLT5pX3N0YXJ0ID0gbmV3X2RjbHVzOwogCQlNU0RPU19JKGlub2RlKS0+aV9sb2dzdGFydCA9IG5ld19kY2x1czsKIAkJLyoKLQkJICogU2luY2UgZ2VuZXJpY19vc3luY19pbm9kZSgpIHN5bmNocm9uaXplIGxhdGVyIGlmCi0JCSAqIHRoaXMgaXMgbm90IGRpcmVjdG9yeSwgd2UgZG9uJ3QgaGVyZS4KKwkJICogU2luY2UgZ2VuZXJpY193cml0ZV9zeW5jKCkgc3luY2hyb25pemVzIHJlZ3VsYXIgZmlsZXMgbGF0ZXIsCisJCSAqIHdlIHN5bmMgaGVyZSBvbmx5IGRpcmVjdG9yaWVzLgogCQkgKi8KIAkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYgSVNfRElSU1lOQyhpbm9kZSkpIHsKIAkJCXJldCA9IGZhdF9zeW5jX2lub2RlKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmMKaW5kZXggYzU0MjI2Yi4uOGUxZTVlMSAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKKysrIGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTE5LDQ5ICsxOSw5MTQgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCisjZGVmaW5lIGlub2RlX3RvX2JkaShpbm9kZSkJKChpbm9kZSktPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbykKIAotLyoqCi0gKiB3cml0ZWJhY2tfYWNxdWlyZSAtIGF0dGVtcHQgdG8gZ2V0IGV4Y2x1c2l2ZSB3cml0ZWJhY2sgYWNjZXNzIHRvIGEgZGV2aWNlCi0gKiBAYmRpOiB0aGUgZGV2aWNlJ3MgYmFja2luZ19kZXZfaW5mbyBzdHJ1Y3R1cmUKLSAqCi0gKiBJdCBpcyBhIHdhc3RlIG9mIHJlc291cmNlcyB0byBoYXZlIG1vcmUgdGhhbiBvbmUgcGRmbHVzaCB0aHJlYWQgYmxvY2tlZCBvbgotICogYSBzaW5nbGUgcmVxdWVzdCBxdWV1ZS4gIEV4Y2x1c2lvbiBhdCB0aGUgcmVxdWVzdF9xdWV1ZSBsZXZlbCBpcyBvYnRhaW5lZAotICogdmlhIGEgZmxhZyBpbiB0aGUgcmVxdWVzdF9xdWV1ZSdzIGJhY2tpbmdfZGV2X2luZm8uc3RhdGUuCi0gKgotICogTm9uLXJlcXVlc3RfcXVldWUtYmFja2VkIGFkZHJlc3Nfc3BhY2VzIHdpbGwgc2hhcmUgZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvLAotICogdW5sZXNzIHRoZXkgaW1wbGVtZW50IHRoZWlyIG93bi4gIFdoaWNoIGlzIHNvbWV3aGF0IGluZWZmaWNpZW50LCBhcyB0aGlzCi0gKiBtYXkgcHJldmVudCBjb25jdXJyZW50IHdyaXRlYmFjayBhZ2FpbnN0IG11bHRpcGxlIGRldmljZXMuCisvKgorICogV2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBwZGZsdXNoLCBidXQgdGhpcyBvbmUgaXMgZXhwb3J0ZWQgdGhvdWdoIC9wcm9jLi4uCiAgKi8KLXN0YXRpYyBpbnQgd3JpdGViYWNrX2FjcXVpcmUoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKK2ludCBucl9wZGZsdXNoX3RocmVhZHM7CisKKy8qCisgKiBQYXNzZWQgaW50byB3Yl93cml0ZWJhY2soKSwgZXNzZW50aWFsbHkgYSBzdWJzZXQgb2Ygd3JpdGViYWNrX2NvbnRyb2wKKyAqLworc3RydWN0IHdiX3dyaXRlYmFja19hcmdzIHsKKwlsb25nIG5yX3BhZ2VzOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisJZW51bSB3cml0ZWJhY2tfc3luY19tb2RlcyBzeW5jX21vZGU7CisJaW50IGZvcl9rdXBkYXRlOworCWludCByYW5nZV9jeWNsaWM7Cit9OworCisvKgorICogV29yayBpdGVtcyBmb3IgdGhlIGJkaV93cml0ZWJhY2sgdGhyZWFkcworICovCitzdHJ1Y3QgYmRpX3dvcmsgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIHBlbmRpbmcgd29yayBsaXN0ICovCisJc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkOwkvKiBmb3IgUkNVIGZyZWUvY2xlYXIgb2Ygd29yayAqLworCisJdW5zaWduZWQgbG9uZyBzZWVuOwkJLyogdGhyZWFkcyB0aGF0IGhhdmUgc2VlbiB0aGlzIHdvcmsgKi8KKwlhdG9taWNfdCBwZW5kaW5nOwkJLyogbnVtYmVyIG9mIHRocmVhZHMgc3RpbGwgdG8gZG8gd29yayAqLworCisJc3RydWN0IHdiX3dyaXRlYmFja19hcmdzIGFyZ3M7CS8qIHdyaXRlYmFjayBhcmd1bWVudHMgKi8KKworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CQkvKiBmbGFnIGJpdHMsIHNlZSBXU18qICovCit9OworCitlbnVtIHsKKwlXU19VU0VEX0IgPSAwLAorCVdTX09OU1RBQ0tfQiwKK307CisKKyNkZWZpbmUgV1NfVVNFRCAoMSA8PCBXU19VU0VEX0IpCisjZGVmaW5lIFdTX09OU1RBQ0sgKDEgPDwgV1NfT05TVEFDS19CKQorCitzdGF0aWMgaW5saW5lIGJvb2wgYmRpX3dvcmtfb25fc3RhY2soc3RydWN0IGJkaV93b3JrICp3b3JrKQogewotCXJldHVybiAhdGVzdF9hbmRfc2V0X2JpdChCRElfcGRmbHVzaCwgJmJkaS0+c3RhdGUpOworCXJldHVybiB0ZXN0X2JpdChXU19PTlNUQUNLX0IsICZ3b3JrLT5zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZGlfd29ya19pbml0KHN0cnVjdCBiZGlfd29yayAqd29yaywKKwkJCQkgc3RydWN0IHdiX3dyaXRlYmFja19hcmdzICphcmdzKQoreworCUlOSVRfUkNVX0hFQUQoJndvcmstPnJjdV9oZWFkKTsKKwl3b3JrLT5hcmdzID0gKmFyZ3M7CisJd29yay0+c3RhdGUgPSBXU19VU0VEOwogfQogCiAvKioKICAqIHdyaXRlYmFja19pbl9wcm9ncmVzcyAtIGRldGVybWluZSB3aGV0aGVyIHRoZXJlIGlzIHdyaXRlYmFjayBpbiBwcm9ncmVzcwogICogQGJkaTogdGhlIGRldmljZSdzIGJhY2tpbmdfZGV2X2luZm8gc3RydWN0dXJlLgogICoKLSAqIERldGVybWluZSB3aGV0aGVyIHRoZXJlIGlzIHdyaXRlYmFjayBpbiBwcm9ncmVzcyBhZ2FpbnN0IGEgYmFja2luZyBkZXZpY2UuCisgKiBEZXRlcm1pbmUgd2hldGhlciB0aGVyZSBpcyB3cml0ZWJhY2sgd2FpdGluZyB0byBiZSBoYW5kbGVkIGFnYWluc3QgYQorICogYmFja2luZyBkZXZpY2UuCiAgKi8KIGludCB3cml0ZWJhY2tfaW5fcHJvZ3Jlc3Moc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKIHsKLQlyZXR1cm4gdGVzdF9iaXQoQkRJX3BkZmx1c2gsICZiZGktPnN0YXRlKTsKKwlyZXR1cm4gIWxpc3RfZW1wdHkoJmJkaS0+d29ya19saXN0KTsKK30KKworc3RhdGljIHZvaWQgYmRpX3dvcmtfY2xlYXIoc3RydWN0IGJkaV93b3JrICp3b3JrKQoreworCWNsZWFyX2JpdChXU19VU0VEX0IsICZ3b3JrLT5zdGF0ZSk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkvKgorCSAqIHdvcmsgY2FuIGhhdmUgZGlzYXBwZWFyZWQgYXQgdGhpcyBwb2ludC4gYml0IHdhaXRxIGZ1bmN0aW9ucworCSAqIHNob3VsZCBiZSBhYmxlIHRvIHRvbGVyYXRlIHRoaXMsIHByb3ZpZGVkIGJkaV9zY2hlZF93YWl0IGRvZXMKKwkgKiBub3QgZGVyZWZlcmVuY2UgaXQncyBwb2ludGVyIGFyZ3VtZW50LgorCSovCisJd2FrZV91cF9iaXQoJndvcmstPnN0YXRlLCBXU19VU0VEX0IpOworfQorCitzdGF0aWMgdm9pZCBiZGlfd29ya19mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgYmRpX3dvcmsgKndvcmsgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJkaV93b3JrLCByY3VfaGVhZCk7CisKKwlpZiAoIWJkaV93b3JrX29uX3N0YWNrKHdvcmspKQorCQlrZnJlZSh3b3JrKTsKKwllbHNlCisJCWJkaV93b3JrX2NsZWFyKHdvcmspOworfQorCitzdGF0aWMgdm9pZCB3Yl93b3JrX2NvbXBsZXRlKHN0cnVjdCBiZGlfd29yayAqd29yaykKK3sKKwljb25zdCBlbnVtIHdyaXRlYmFja19zeW5jX21vZGVzIHN5bmNfbW9kZSA9IHdvcmstPmFyZ3Muc3luY19tb2RlOworCWludCBvbnN0YWNrID0gYmRpX3dvcmtfb25fc3RhY2sod29yayk7CisKKwkvKgorCSAqIEZvciBhbGxvY2F0ZWQgd29yaywgd2UgY2FuIGNsZWFyIHRoZSBkb25lL3NlZW4gYml0IHJpZ2h0IGhlcmUuCisJICogRm9yIG9uLXN0YWNrIHdvcmssIHdlIG5lZWQgdG8gcG9zdHBvbmUgYm90aCB0aGUgY2xlYXIgYW5kIGZyZWUKKwkgKiB0byBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCwgc2luY2UgdGhlIHN0YWNrIGNvdWxkIGJlIGludmFsaWRhdGVkCisJICogYXMgc29vbiBhcyBiZGlfd29ya19jbGVhcigpIGhhcyBkb25lIHRoZSB3YWtldXAuCisJICovCisJaWYgKCFvbnN0YWNrKQorCQliZGlfd29ya19jbGVhcih3b3JrKTsKKwlpZiAoc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSB8fCBvbnN0YWNrKQorCQljYWxsX3JjdSgmd29yay0+cmN1X2hlYWQsIGJkaV93b3JrX2ZyZWUpOworfQorCitzdGF0aWMgdm9pZCB3Yl9jbGVhcl9wZW5kaW5nKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yiwgc3RydWN0IGJkaV93b3JrICp3b3JrKQoreworCS8qCisJICogVGhlIGNhbGxlciBoYXMgcmV0cmlldmVkIHRoZSB3b3JrIGFyZ3VtZW50cyBmcm9tIHRoaXMgd29yaywKKwkgKiBkcm9wIG91ciByZWZlcmVuY2UuIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmLCBkZWxldGUgYW5kIGZyZWUgaXQKKwkgKi8KKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmd29yay0+cGVuZGluZykpIHsKKwkJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9IHdiLT5iZGk7CisKKwkJc3Bpbl9sb2NrKCZiZGktPndiX2xvY2spOworCQlsaXN0X2RlbF9yY3UoJndvcmstPmxpc3QpOworCQlzcGluX3VubG9jaygmYmRpLT53Yl9sb2NrKTsKKworCQl3Yl93b3JrX2NvbXBsZXRlKHdvcmspOworCX0KK30KKworc3RhdGljIHZvaWQgYmRpX3F1ZXVlX3dvcmsoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IGJkaV93b3JrICp3b3JrKQoreworCXdvcmstPnNlZW4gPSBiZGktPndiX21hc2s7CisJQlVHX09OKCF3b3JrLT5zZWVuKTsKKwlhdG9taWNfc2V0KCZ3b3JrLT5wZW5kaW5nLCBiZGktPndiX2NudCk7CisJQlVHX09OKCFiZGktPndiX2NudCk7CisKKwkvKgorCSAqIGxpc3RfYWRkX3RhaWxfcmN1KCkgY29udGFpbnMgdGhlIG5lY2Vzc2FyeSBiYXJyaWVycyB0bworCSAqIG1ha2Ugc3VyZSB0aGUgYWJvdmUgc3RvcmVzIGFyZSBzZWVuIGJlZm9yZSB0aGUgaXRlbSBpcworCSAqIG5vdGljZWQgb24gdGhlIGxpc3QKKwkgKi8KKwlzcGluX2xvY2soJmJkaS0+d2JfbG9jayk7CisJbGlzdF9hZGRfdGFpbF9yY3UoJndvcmstPmxpc3QsICZiZGktPndvcmtfbGlzdCk7CisJc3Bpbl91bmxvY2soJmJkaS0+d2JfbG9jayk7CisKKwkvKgorCSAqIElmIHRoZSBkZWZhdWx0IHRocmVhZCBpc24ndCB0aGVyZSwgbWFrZSBzdXJlIHdlIGFkZCBpdC4gV2hlbgorCSAqIGl0IGdldHMgY3JlYXRlZCBhbmQgd2FrZXMgdXAsIHdlJ2xsIHJ1biB0aGlzIHdvcmsuCisJICovCisJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHlfY2FyZWZ1bCgmYmRpLT53Yl9saXN0KSkpCisJCXdha2VfdXBfcHJvY2VzcyhkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8ud2IudGFzayk7CisJZWxzZSB7CisJCXN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiA9ICZiZGktPndiOworCisJCWlmICh3Yi0+dGFzaykKKwkJCXdha2VfdXBfcHJvY2Vzcyh3Yi0+dGFzayk7CisJfQorfQorCisvKgorICogVXNlZCBmb3Igb24tc3RhY2sgYWxsb2NhdGVkIHdvcmsgaXRlbXMuIFRoZSBjYWxsZXIgbmVlZHMgdG8gd2FpdCB1bnRpbAorICogdGhlIHdiIHRocmVhZHMgaGF2ZSBhY2tlZCB0aGUgd29yayBiZWZvcmUgaXQncyBzYWZlIHRvIGNvbnRpbnVlLgorICovCitzdGF0aWMgdm9pZCBiZGlfd2FpdF9vbl93b3JrX2NsZWFyKHN0cnVjdCBiZGlfd29yayAqd29yaykKK3sKKwl3YWl0X29uX2JpdCgmd29yay0+c3RhdGUsIFdTX1VTRURfQiwgYmRpX3NjaGVkX3dhaXQsCisJCSAgICBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkIGJkaV9hbGxvY19xdWV1ZV93b3JrKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksCisJCQkJIHN0cnVjdCB3Yl93cml0ZWJhY2tfYXJncyAqYXJncykKK3sKKwlzdHJ1Y3QgYmRpX3dvcmsgKndvcms7CisKKwkvKgorCSAqIFRoaXMgaXMgV0JfU1lOQ19OT05FIHdyaXRlYmFjaywgc28gaWYgYWxsb2NhdGlvbiBmYWlscyBqdXN0CisJICogd2FrZXVwIHRoZSB0aHJlYWQgZm9yIG9sZCBkaXJ0eSBkYXRhIHdyaXRlYmFjaworCSAqLworCXdvcmsgPSBrbWFsbG9jKHNpemVvZigqd29yayksIEdGUF9BVE9NSUMpOworCWlmICh3b3JrKSB7CisJCWJkaV93b3JrX2luaXQod29yaywgYXJncyk7CisJCWJkaV9xdWV1ZV93b3JrKGJkaSwgd29yayk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGJkaV93cml0ZWJhY2sgKndiID0gJmJkaS0+d2I7CisKKwkJaWYgKHdiLT50YXNrKQorCQkJd2FrZV91cF9wcm9jZXNzKHdiLT50YXNrKTsKKwl9CiB9CiAKIC8qKgotICogd3JpdGViYWNrX3JlbGVhc2UgLSByZWxpbnF1aXNoIGV4Y2x1c2l2ZSB3cml0ZWJhY2sgYWNjZXNzIGFnYWluc3QgYSBkZXZpY2UuCi0gKiBAYmRpOiB0aGUgZGV2aWNlJ3MgYmFja2luZ19kZXZfaW5mbyBzdHJ1Y3R1cmUKKyAqIGJkaV9zeW5jX3dyaXRlYmFjayAtIHN0YXJ0IGFuZCB3YWl0IGZvciB3cml0ZWJhY2sKKyAqIEBiZGk6IHRoZSBiYWNraW5nIGRldmljZSB0byB3cml0ZSBmcm9tCisgKiBAc2I6IHdyaXRlIGlub2RlcyBmcm9tIHRoaXMgc3VwZXJfYmxvY2sKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgVGhpcyBkb2VzIFdCX1NZTkNfQUxMIGRhdGEgaW50ZWdyaXR5IHdyaXRlYmFjayBhbmQgd2FpdHMgZm9yIHRoZQorICogICBJTyB0byBjb21wbGV0ZS4gQ2FsbGVycyBtdXN0IGhvbGQgdGhlIHNiIHNfdW1vdW50IHNlbWFwaG9yZSBmb3IKKyAqICAgcmVhZGluZywgdG8gYXZvaWQgaGF2aW5nIHRoZSBzdXBlciBkaXNhcHBlYXIgYmVmb3JlIHdlIGFyZSBkb25lLgogICovCi1zdGF0aWMgdm9pZCB3cml0ZWJhY2tfcmVsZWFzZShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQorc3RhdGljIHZvaWQgYmRpX3N5bmNfd3JpdGViYWNrKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksCisJCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlCVUdfT04oIXdyaXRlYmFja19pbl9wcm9ncmVzcyhiZGkpKTsKLQljbGVhcl9iaXQoQkRJX3BkZmx1c2gsICZiZGktPnN0YXRlKTsKKwlzdHJ1Y3Qgd2Jfd3JpdGViYWNrX2FyZ3MgYXJncyA9IHsKKwkJLnNiCQk9IHNiLAorCQkuc3luY19tb2RlCT0gV0JfU1lOQ19BTEwsCisJCS5ucl9wYWdlcwk9IExPTkdfTUFYLAorCQkucmFuZ2VfY3ljbGljCT0gMCwKKwl9OworCXN0cnVjdCBiZGlfd29yayB3b3JrOworCisJYmRpX3dvcmtfaW5pdCgmd29yaywgJmFyZ3MpOworCXdvcmsuc3RhdGUgfD0gV1NfT05TVEFDSzsKKworCWJkaV9xdWV1ZV93b3JrKGJkaSwgJndvcmspOworCWJkaV93YWl0X29uX3dvcmtfY2xlYXIoJndvcmspOworfQorCisvKioKKyAqIGJkaV9zdGFydF93cml0ZWJhY2sgLSBzdGFydCB3cml0ZWJhY2sKKyAqIEBiZGk6IHRoZSBiYWNraW5nIGRldmljZSB0byB3cml0ZSBmcm9tCisgKiBAbnJfcGFnZXM6IHRoZSBudW1iZXIgb2YgcGFnZXMgdG8gd3JpdGUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgVGhpcyBkb2VzIFdCX1NZTkNfTk9ORSBvcHBvcnR1bmlzdGljIHdyaXRlYmFjay4gVGhlIElPIGlzIG9ubHkKKyAqICAgc3RhcnRlZCB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgd2UgbWFrZSBubyBndWFyZW50ZWVzIG9uCisgKiAgIGNvbXBsZXRpb24uIENhbGxlciBuZWVkIG5vdCBob2xkIHNiIHNfdW1vdW50IHNlbWFwaG9yZS4KKyAqCisgKi8KK3ZvaWQgYmRpX3N0YXJ0X3dyaXRlYmFjayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBsb25nIG5yX3BhZ2VzKQoreworCXN0cnVjdCB3Yl93cml0ZWJhY2tfYXJncyBhcmdzID0geworCQkuc3luY19tb2RlCT0gV0JfU1lOQ19OT05FLAorCQkubnJfcGFnZXMJPSBucl9wYWdlcywKKwkJLnJhbmdlX2N5Y2xpYwk9IDEsCisJfTsKKworCWJkaV9hbGxvY19xdWV1ZV93b3JrKGJkaSwgJmFyZ3MpOworfQorCisvKgorICogUmVkaXJ0eSBhbiBpbm9kZTogc2V0IGl0cyB3aGVuLWl0LXdhcyBkaXJ0aWVkIHRpbWVzdGFtcCBhbmQgbW92ZSBpdCB0byB0aGUKKyAqIGZ1cnRoZXN0IGVuZCBvZiBpdHMgc3VwZXJibG9jaydzIGRpcnR5LWlub2RlIGxpc3QuCisgKgorICogQmVmb3JlIHN0YW1waW5nIHRoZSBpbm9kZSdzIC0+ZGlydGllZF93aGVuLCB3ZSBjaGVjayB0byBzZWUgd2hldGhlciBpdCBpcworICogYWxyZWFkeSB0aGUgbW9zdC1yZWNlbnRseS1kaXJ0aWVkIGlub2RlIG9uIHRoZSBiX2RpcnR5IGxpc3QuICBJZiB0aGF0IGlzCisgKiB0aGUgY2FzZSB0aGVuIHRoZSBpbm9kZSBtdXN0IGhhdmUgYmVlbiByZWRpcnRpZWQgd2hpbGUgaXQgd2FzIGJlaW5nIHdyaXR0ZW4KKyAqIG91dCBhbmQgd2UgZG9uJ3QgcmVzZXQgaXRzIGRpcnRpZWRfd2hlbi4KKyAqLworc3RhdGljIHZvaWQgcmVkaXJ0eV90YWlsKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGJkaV93cml0ZWJhY2sgKndiID0gJmlub2RlX3RvX2JkaShpbm9kZSktPndiOworCisJaWYgKCFsaXN0X2VtcHR5KCZ3Yi0+Yl9kaXJ0eSkpIHsKKwkJc3RydWN0IGlub2RlICp0YWlsOworCisJCXRhaWwgPSBsaXN0X2VudHJ5KHdiLT5iX2RpcnR5Lm5leHQsIHN0cnVjdCBpbm9kZSwgaV9saXN0KTsKKwkJaWYgKHRpbWVfYmVmb3JlKGlub2RlLT5kaXJ0aWVkX3doZW4sIHRhaWwtPmRpcnRpZWRfd2hlbikpCisJCQlpbm9kZS0+ZGlydGllZF93aGVuID0gamlmZmllczsKKwl9CisJbGlzdF9tb3ZlKCZpbm9kZS0+aV9saXN0LCAmd2ItPmJfZGlydHkpOworfQorCisvKgorICogcmVxdWV1ZSBpbm9kZSBmb3IgcmUtc2Nhbm5pbmcgYWZ0ZXIgYmRpLT5iX2lvIGxpc3QgaXMgZXhoYXVzdGVkLgorICovCitzdGF0aWMgdm9pZCByZXF1ZXVlX2lvKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGJkaV93cml0ZWJhY2sgKndiID0gJmlub2RlX3RvX2JkaShpbm9kZSktPndiOworCisJbGlzdF9tb3ZlKCZpbm9kZS0+aV9saXN0LCAmd2ItPmJfbW9yZV9pbyk7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX3N5bmNfY29tcGxldGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwkvKgorCSAqIFByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uIHRocm91Z2ggc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOworCSAqLworCXNtcF9tYigpOworCXdha2VfdXBfYml0KCZpbm9kZS0+aV9zdGF0ZSwgX19JX1NZTkMpOworfQorCitzdGF0aWMgYm9vbCBpbm9kZV9kaXJ0aWVkX2FmdGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgdCkKK3sKKwlib29sIHJldCA9IHRpbWVfYWZ0ZXIoaW5vZGUtPmRpcnRpZWRfd2hlbiwgdCk7CisjaWZuZGVmIENPTkZJR182NEJJVAorCS8qCisJICogRm9yIGlub2RlcyBiZWluZyBjb25zdGFudGx5IHJlZGlydGllZCwgZGlydGllZF93aGVuIGNhbiBnZXQgc3R1Y2suCisJICogSXQgX2FwcGVhcnNfIHRvIGJlIGluIHRoZSBmdXR1cmUsIGJ1dCBpcyBhY3R1YWxseSBpbiBkaXN0YW50IHBhc3QuCisJICogVGhpcyB0ZXN0IGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHN1Y2ggd3JhcHBlZC1hcm91bmQgcmVsYXRpdmUgdGltZXMKKwkgKiBmcm9tIHBlcm1hbmVudGx5IHN0b3BwaW5nIHRoZSB3aG9sZSBwZGZsdXNoIHdyaXRlYmFjay4KKwkgKi8KKwlyZXQgPSByZXQgJiYgdGltZV9iZWZvcmVfZXEoaW5vZGUtPmRpcnRpZWRfd2hlbiwgamlmZmllcyk7CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTW92ZSBleHBpcmVkIGRpcnR5IGlub2RlcyBmcm9tIEBkZWxheWluZ19xdWV1ZSB0byBAZGlzcGF0Y2hfcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkIG1vdmVfZXhwaXJlZF9pbm9kZXMoc3RydWN0IGxpc3RfaGVhZCAqZGVsYXlpbmdfcXVldWUsCisJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGlzcGF0Y2hfcXVldWUsCisJCQkJdW5zaWduZWQgbG9uZyAqb2xkZXJfdGhhbl90aGlzKQoreworCXdoaWxlICghbGlzdF9lbXB0eShkZWxheWluZ19xdWV1ZSkpIHsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IGxpc3RfZW50cnkoZGVsYXlpbmdfcXVldWUtPnByZXYsCisJCQkJCQlzdHJ1Y3QgaW5vZGUsIGlfbGlzdCk7CisJCWlmIChvbGRlcl90aGFuX3RoaXMgJiYKKwkJICAgIGlub2RlX2RpcnRpZWRfYWZ0ZXIoaW5vZGUsICpvbGRlcl90aGFuX3RoaXMpKQorCQkJYnJlYWs7CisJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgZGlzcGF0Y2hfcXVldWUpOworCX0KK30KKworLyoKKyAqIFF1ZXVlIGFsbCBleHBpcmVkIGRpcnR5IGlub2RlcyBmb3IgaW8sIGVsZGVzdCBmaXJzdC4KKyAqLworc3RhdGljIHZvaWQgcXVldWVfaW8oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpvbGRlcl90aGFuX3RoaXMpCit7CisJbGlzdF9zcGxpY2VfaW5pdCgmd2ItPmJfbW9yZV9pbywgd2ItPmJfaW8ucHJldik7CisJbW92ZV9leHBpcmVkX2lub2Rlcygmd2ItPmJfZGlydHksICZ3Yi0+Yl9pbywgb2xkZXJfdGhhbl90aGlzKTsKK30KKworc3RhdGljIGludCB3cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc3luYykKK3sKKwlpZiAoaW5vZGUtPmlfc2ItPnNfb3AtPndyaXRlX2lub2RlICYmICFpc19iYWRfaW5vZGUoaW5vZGUpKQorCQlyZXR1cm4gaW5vZGUtPmlfc2ItPnNfb3AtPndyaXRlX2lub2RlKGlub2RlLCBzeW5jKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdhaXQgZm9yIHdyaXRlYmFjayBvbiBhbiBpbm9kZSB0byBjb21wbGV0ZS4KKyAqLworc3RhdGljIHZvaWQgaW5vZGVfd2FpdF9mb3Jfd3JpdGViYWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJREVGSU5FX1dBSVRfQklUKHdxLCAmaW5vZGUtPmlfc3RhdGUsIF9fSV9TWU5DKTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3FoOworCisJd3FoID0gYml0X3dhaXRxdWV1ZSgmaW5vZGUtPmlfc3RhdGUsIF9fSV9TWU5DKTsKKwlkbyB7CisJCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKKwkJX193YWl0X29uX2JpdCh3cWgsICZ3cSwgaW5vZGVfd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlzcGluX2xvY2soJmlub2RlX2xvY2spOworCX0gd2hpbGUgKGlub2RlLT5pX3N0YXRlICYgSV9TWU5DKTsKK30KKworLyoKKyAqIFdyaXRlIG91dCBhbiBpbm9kZSdzIGRpcnR5IHBhZ2VzLiAgQ2FsbGVkIHVuZGVyIGlub2RlX2xvY2suICBFaXRoZXIgdGhlCisgKiBjYWxsZXIgaGFzIHJlZiBvbiB0aGUgaW5vZGUgKGVpdGhlciB2aWEgX19pZ2V0IG9yIHZpYSBzeXNjYWxsIGFnYWluc3QgYW4gZmQpCisgKiBvciB0aGUgaW5vZGUgaGFzIElfV0lMTF9GUkVFIHNldCAodmlhIGdlbmVyaWNfZm9yZ2V0X2lub2RlKQorICoKKyAqIElmIGB3YWl0JyBpcyBzZXQsIHdhaXQgb24gdGhlIHdyaXRlb3V0LgorICoKKyAqIFRoZSB3aG9sZSB3cml0ZW91dCBkZXNpZ24gaXMgcXVpdGUgY29tcGxleCBhbmQgZnJhZ2lsZS4gIFdlIHdhbnQgdG8gYXZvaWQKKyAqIHN0YXJ2YXRpb24gb2YgcGFydGljdWxhciBpbm9kZXMgd2hlbiBvdGhlcnMgYXJlIGJlaW5nIHJlZGlydGllZCwgcHJldmVudAorICogbGl2ZWxvY2tzLCBldGMuCisgKgorICogQ2FsbGVkIHVuZGVyIGlub2RlX2xvY2suCisgKi8KK3N0YXRpYyBpbnQKK3dyaXRlYmFja19zaW5nbGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOworCWludCB3YWl0ID0gd2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEw7CisJdW5zaWduZWQgZGlydHk7CisJaW50IHJldDsKKworCWlmICghYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSkKKwkJV0FSTl9PTighKGlub2RlLT5pX3N0YXRlICYgKElfV0lMTF9GUkVFfElfRlJFRUlORykpKTsKKwllbHNlCisJCVdBUk5fT04oaW5vZGUtPmlfc3RhdGUgJiBJX1dJTExfRlJFRSk7CisKKwlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX1NZTkMpIHsKKwkJLyoKKwkJICogSWYgdGhpcyBpbm9kZSBpcyBsb2NrZWQgZm9yIHdyaXRlYmFjayBhbmQgd2UgYXJlIG5vdCBkb2luZworCQkgKiB3cml0ZWJhY2stZm9yLWRhdGEtaW50ZWdyaXR5LCBtb3ZlIGl0IHRvIGJfbW9yZV9pbyBzbyB0aGF0CisJCSAqIHdyaXRlYmFjayBjYW4gcHJvY2VlZCB3aXRoIHRoZSBvdGhlciBpbm9kZXMgb24gc19pby4KKwkJICoKKwkJICogV2UnbGwgaGF2ZSBhbm90aGVyIGdvIGF0IHdyaXRpbmcgYmFjayB0aGlzIGlub2RlIHdoZW4gd2UKKwkJICogY29tcGxldGVkIGEgZnVsbCBzY2FuIG9mIGJfaW8uCisJCSAqLworCQlpZiAoIXdhaXQpIHsKKwkJCXJlcXVldWVfaW8oaW5vZGUpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKgorCQkgKiBJdCdzIGEgZGF0YS1pbnRlZ3JpdHkgc3luYy4gIFdlIG11c3Qgd2FpdC4KKwkJICovCisJCWlub2RlX3dhaXRfZm9yX3dyaXRlYmFjayhpbm9kZSk7CisJfQorCisJQlVHX09OKGlub2RlLT5pX3N0YXRlICYgSV9TWU5DKTsKKworCS8qIFNldCBJX1NZTkMsIHJlc2V0IElfRElSVFkgKi8KKwlkaXJ0eSA9IGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWTsKKwlpbm9kZS0+aV9zdGF0ZSB8PSBJX1NZTkM7CisJaW5vZGUtPmlfc3RhdGUgJj0gfklfRElSVFk7CisKKwlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CisKKwlyZXQgPSBkb193cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYyk7CisKKwkvKiBEb24ndCB3cml0ZSB0aGUgaW5vZGUgaWYgb25seSBJX0RJUlRZX1BBR0VTIHdhcyBzZXQgKi8KKwlpZiAoZGlydHkgJiAoSV9ESVJUWV9TWU5DIHwgSV9ESVJUWV9EQVRBU1lOQykpIHsKKwkJaW50IGVyciA9IHdyaXRlX2lub2RlKGlub2RlLCB3YWl0KTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0ID0gZXJyOworCX0KKworCWlmICh3YWl0KSB7CisJCWludCBlcnIgPSBmaWxlbWFwX2ZkYXRhd2FpdChtYXBwaW5nKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0ID0gZXJyOworCX0KKworCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CisJaW5vZGUtPmlfc3RhdGUgJj0gfklfU1lOQzsKKwlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkcgfCBJX0NMRUFSKSkpIHsKKwkJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZKSAmJgorCQkgICAgbWFwcGluZ190YWdnZWQobWFwcGluZywgUEFHRUNBQ0hFX1RBR19ESVJUWSkpIHsKKwkJCS8qCisJCQkgKiBXZSBkaWRuJ3Qgd3JpdGUgYmFjayBhbGwgdGhlIHBhZ2VzLiAgbmZzX3dyaXRlcGFnZXMoKQorCQkJICogc29tZXRpbWVzIGJhbGVzIG91dCB3aXRob3V0IGRvaW5nIGFueXRoaW5nLiBSZWRpcnR5CisJCQkgKiB0aGUgaW5vZGU7IE1vdmUgaXQgZnJvbSBiX2lvIG9udG8gYl9tb3JlX2lvL2JfZGlydHkuCisJCQkgKi8KKwkJCS8qCisJCQkgKiBha3BtOiBpZiB0aGUgY2FsbGVyIHdhcyB0aGUga3VwZGF0ZSBmdW5jdGlvbiB3ZSBwdXQKKwkJCSAqIHRoaXMgaW5vZGUgYXQgdGhlIGhlYWQgb2YgYl9kaXJ0eSBzbyBpdCBnZXRzIGZpcnN0CisJCQkgKiBjb25zaWRlcmF0aW9uLiAgT3RoZXJ3aXNlLCBtb3ZlIGl0IHRvIHRoZSB0YWlsLCBmb3IKKwkJCSAqIHRoZSByZWFzb25zIGRlc2NyaWJlZCB0aGVyZS4gIEknbSBub3QgcmVhbGx5IHN1cmUKKwkJCSAqIGhvdyBtdWNoIHNlbnNlIHRoaXMgbWFrZXMuICBQcmVzdW1hYmx5IEkgaGFkIGEgZ29vZAorCQkJICogcmVhc29ucyBmb3IgZG9pbmcgaXQgdGhpcyB3YXksIGFuZCBJJ2QgcmF0aGVyIG5vdAorCQkJICogbXVjayB3aXRoIGl0IGF0IHByZXNlbnQuCisJCQkgKi8KKwkJCWlmICh3YmMtPmZvcl9rdXBkYXRlKSB7CisJCQkJLyoKKwkJCQkgKiBGb3IgdGhlIGt1cGRhdGUgZnVuY3Rpb24gd2UgbW92ZSB0aGUgaW5vZGUKKwkJCQkgKiB0byBiX21vcmVfaW8gc28gaXQgd2lsbCBnZXQgbW9yZSB3cml0ZW91dCBhcworCQkJCSAqIHNvb24gYXMgdGhlIHF1ZXVlIGJlY29tZXMgdW5jb25nZXN0ZWQuCisJCQkJICovCisJCQkJaW5vZGUtPmlfc3RhdGUgfD0gSV9ESVJUWV9QQUdFUzsKKwkJCQlpZiAod2JjLT5ucl90b193cml0ZSA8PSAwKSB7CisJCQkJCS8qCisJCQkJCSAqIHNsaWNlIHVzZWQgdXA6IHF1ZXVlIGZvciBuZXh0IHR1cm4KKwkJCQkJICovCisJCQkJCXJlcXVldWVfaW8oaW5vZGUpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qCisJCQkJCSAqIHNvbWVob3cgYmxvY2tlZDogcmV0cnkgbGF0ZXIKKwkJCQkJICovCisJCQkJCXJlZGlydHlfdGFpbChpbm9kZSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIE90aGVyd2lzZSBmdWxseSByZWRpcnR5IHRoZSBpbm9kZSBzbyB0aGF0CisJCQkJICogb3RoZXIgaW5vZGVzIG9uIHRoaXMgc3VwZXJibG9jayB3aWxsIGdldCBzb21lCisJCQkJICogd3JpdGVvdXQuICBPdGhlcndpc2UgaGVhdnkgd3JpdGluZyB0byBvbmUKKwkJCQkgKiBmaWxlIHdvdWxkIGluZGVmaW5pdGVseSBzdXNwZW5kIHdyaXRlb3V0IG9mCisJCQkJICogYWxsIHRoZSBvdGhlciBmaWxlcy4KKwkJCQkgKi8KKwkJCQlpbm9kZS0+aV9zdGF0ZSB8PSBJX0RJUlRZX1BBR0VTOworCQkJCXJlZGlydHlfdGFpbChpbm9kZSk7CisJCQl9CisJCX0gZWxzZSBpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZKSB7CisJCQkvKgorCQkJICogU29tZW9uZSByZWRpcnRpZWQgdGhlIGlub2RlIHdoaWxlIHdlcmUgd3JpdGluZyBiYWNrCisJCQkgKiB0aGUgcGFnZXMuCisJCQkgKi8KKwkJCXJlZGlydHlfdGFpbChpbm9kZSk7CisJCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSkgeworCQkJLyoKKwkJCSAqIFRoZSBpbm9kZSBpcyBjbGVhbiwgaW51c2UKKwkJCSAqLworCQkJbGlzdF9tb3ZlKCZpbm9kZS0+aV9saXN0LCAmaW5vZGVfaW5fdXNlKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGUgaW5vZGUgaXMgY2xlYW4sIHVudXNlZAorCQkJICovCisJCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsICZpbm9kZV91bnVzZWQpOworCQl9CisJfQorCWlub2RlX3N5bmNfY29tcGxldGUoaW5vZGUpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBGb3IgV0JfU1lOQ19OT05FIHdyaXRlYmFjaywgdGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIHRoZSBzYiBwaW5uZWQKKyAqIGJlZm9yZSBjYWxsaW5nIHdyaXRlYmFjay4gU28gbWFrZSBzdXJlIHRoYXQgd2UgZG8gcGluIGl0LCBzbyBpdCBkb2Vzbid0CisgKiBnbyBhd2F5IHdoaWxlIHdlIGFyZSB3cml0aW5nIGlub2RlcyBmcm9tIGl0LgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgc3VwZXIgd2FzIHN1Y2Nlc3NmdWxseSBwaW5uZWQgKG9yIHBpbm5pbmcgd2Fzbid0IG5lZWRlZCksCisgKiAxIGlmIHdlIGZhaWxlZC4KKyAqLworc3RhdGljIGludCBwaW5fc2JfZm9yX3dyaXRlYmFjayhzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKKwkJCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKworCS8qCisJICogQ2FsbGVyIG11c3QgYWxyZWFkeSBob2xkIHRoZSByZWYgZm9yIHRoaXMKKwkgKi8KKwlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpIHsKKwkJV0FSTl9PTighcndzZW1faXNfbG9ja2VkKCZzYi0+c191bW91bnQpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKKwlzYi0+c19jb3VudCsrOworCWlmIChkb3duX3JlYWRfdHJ5bG9jaygmc2ItPnNfdW1vdW50KSkgeworCQlpZiAoc2ItPnNfcm9vdCkgeworCQkJc3Bpbl91bmxvY2soJnNiX2xvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKwkJLyoKKwkJICogdW1vdW50ZWQsIGRyb3AgcndzZW0gYWdhaW4gYW5kIGZhbGwgdGhyb3VnaCB0byBmYWlsdXJlCisJCSAqLworCQl1cF9yZWFkKCZzYi0+c191bW91bnQpOworCX0KKworCXNiLT5zX2NvdW50LS07CisJc3Bpbl91bmxvY2soJnNiX2xvY2spOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCB1bnBpbl9zYl9mb3Jfd3JpdGViYWNrKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLAorCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCisJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKQorCQlyZXR1cm47CisKKwl1cF9yZWFkKCZzYi0+c191bW91bnQpOworCXB1dF9zdXBlcihzYik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlYmFja19pbm9kZXNfd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLAorCQkJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB3YmMtPnNiOworCWNvbnN0IGludCBpc19ibGtkZXZfc2IgPSBzYl9pc19ibGtkZXZfc2Ioc2IpOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOwkvKiBsaXZlbG9jayBhdm9pZGFuY2UgKi8KKworCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CisKKwlpZiAoIXdiYy0+Zm9yX2t1cGRhdGUgfHwgbGlzdF9lbXB0eSgmd2ItPmJfaW8pKQorCQlxdWV1ZV9pbyh3Yiwgd2JjLT5vbGRlcl90aGFuX3RoaXMpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ3Yi0+Yl9pbykpIHsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IGxpc3RfZW50cnkod2ItPmJfaW8ucHJldiwKKwkJCQkJCXN0cnVjdCBpbm9kZSwgaV9saXN0KTsKKwkJbG9uZyBwYWdlc19za2lwcGVkOworCisJCS8qCisJCSAqIHN1cGVyIGJsb2NrIGdpdmVuIGFuZCBkb2Vzbid0IG1hdGNoLCBza2lwIHRoaXMgaW5vZGUKKwkJICovCisJCWlmIChzYiAmJiBzYiAhPSBpbm9kZS0+aV9zYikgeworCQkJcmVkaXJ0eV90YWlsKGlub2RlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFiZGlfY2FwX3dyaXRlYmFja19kaXJ0eSh3Yi0+YmRpKSkgeworCQkJcmVkaXJ0eV90YWlsKGlub2RlKTsKKwkJCWlmIChpc19ibGtkZXZfc2IpIHsKKwkJCQkvKgorCQkJCSAqIERpcnR5IG1lbW9yeS1iYWNrZWQgYmxvY2tkZXY6IHRoZSByYW1kaXNrCisJCQkJICogZHJpdmVyIGRvZXMgdGhpcy4gIFNraXAganVzdCB0aGlzIGlub2RlCisJCQkJICovCisJCQkJY29udGludWU7CisJCQl9CisJCQkvKgorCQkJICogRGlydHkgbWVtb3J5LWJhY2tlZCBpbm9kZSBhZ2FpbnN0IGEgZmlsZXN5c3RlbSBvdGhlcgorCQkJICogdGhhbiB0aGUga2VybmVsLWludGVybmFsIGJkZXYgZmlsZXN5c3RlbS4gIFNraXAgdGhlCisJCQkgKiBlbnRpcmUgc3VwZXJibG9jay4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9ORVcgfCBJX1dJTExfRlJFRSkpIHsKKwkJCXJlcXVldWVfaW8oaW5vZGUpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAod2JjLT5ub25ibG9ja2luZyAmJiBiZGlfd3JpdGVfY29uZ2VzdGVkKHdiLT5iZGkpKSB7CisJCQl3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gPSAxOworCQkJaWYgKCFpc19ibGtkZXZfc2IpCisJCQkJYnJlYWs7CQkvKiBTa2lwIGEgY29uZ2VzdGVkIGZzICovCisJCQlyZXF1ZXVlX2lvKGlub2RlKTsKKwkJCWNvbnRpbnVlOwkJLyogU2tpcCBhIGNvbmdlc3RlZCBibG9ja2RldiAqLworCQl9CisKKwkJLyoKKwkJICogV2FzIHRoaXMgaW5vZGUgZGlydGllZCBhZnRlciBzeW5jX3NiX2lub2RlcyB3YXMgY2FsbGVkPworCQkgKiBUaGlzIGtlZXBzIHN5bmMgZnJvbSBleHRyYSBqb2JzIGFuZCBsaXZlbG9jay4KKwkJICovCisJCWlmIChpbm9kZV9kaXJ0aWVkX2FmdGVyKGlub2RlLCBzdGFydCkpCisJCQlicmVhazsKKworCQlpZiAocGluX3NiX2Zvcl93cml0ZWJhY2sod2JjLCBpbm9kZSkpIHsKKwkJCXJlcXVldWVfaW8oaW5vZGUpOworCQkJY29udGludWU7CisJCX0KKworCQlCVUdfT04oaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HIHwgSV9DTEVBUikpOworCQlfX2lnZXQoaW5vZGUpOworCQlwYWdlc19za2lwcGVkID0gd2JjLT5wYWdlc19za2lwcGVkOworCQl3cml0ZWJhY2tfc2luZ2xlX2lub2RlKGlub2RlLCB3YmMpOworCQl1bnBpbl9zYl9mb3Jfd3JpdGViYWNrKHdiYywgaW5vZGUpOworCQlpZiAod2JjLT5wYWdlc19za2lwcGVkICE9IHBhZ2VzX3NraXBwZWQpIHsKKwkJCS8qCisJCQkgKiB3cml0ZWJhY2sgaXMgbm90IG1ha2luZyBwcm9ncmVzcyBkdWUgdG8gbG9ja2VkCisJCQkgKiBidWZmZXJzLiAgU2tpcCB0aGlzIGlub2RlIGZvciBub3cuCisJCQkgKi8KKwkJCXJlZGlydHlfdGFpbChpbm9kZSk7CisJCX0KKwkJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOworCQlpcHV0KGlub2RlKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CisJCWlmICh3YmMtPm5yX3RvX3dyaXRlIDw9IDApIHsKKwkJCXdiYy0+bW9yZV9pbyA9IDE7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIWxpc3RfZW1wdHkoJndiLT5iX21vcmVfaW8pKQorCQkJd2JjLT5tb3JlX2lvID0gMTsKKwl9CisKKwlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CisJLyogTGVhdmUgYW55IHVud3JpdHRlbiBpbm9kZXMgb24gYl9pbyAqLworfQorCit2b2lkIHdyaXRlYmFja19pbm9kZXNfd2JjKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSB3YmMtPmJkaTsKKworCXdyaXRlYmFja19pbm9kZXNfd2IoJmJkaS0+d2IsIHdiYyk7Cit9CisKKy8qCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMgdG8gd3JpdGVvdXQgaW4gYSBzaW5nbGUgYmRpIGZsdXNoL2t1cGRhdGUKKyAqIG9wZXJhdGlvbi4gIFdlIGRvIHRoaXMgc28gd2UgZG9uJ3QgaG9sZCBJX1NZTkMgYWdhaW5zdCBhbiBpbm9kZSBmb3IKKyAqIGVub3Jtb3VzIGFtb3VudHMgb2YgdGltZSwgd2hpY2ggd291bGQgYmxvY2sgYSB1c2Vyc3BhY2UgdGFzayB3aGljaCBoYXMKKyAqIGJlZW4gZm9yY2VkIHRvIHRocm90dGxlIGFnYWluc3QgdGhhdCBpbm9kZS4gIEFsc28sIHRoZSBjb2RlIHJlZXZhbHVhdGVzCisgKiB0aGUgZGlydHkgZWFjaCB0aW1lIGl0IGhhcyB3cml0dGVuIHRoaXMgbWFueSBwYWdlcy4KKyAqLworI2RlZmluZSBNQVhfV1JJVEVCQUNLX1BBR0VTICAgICAxMDI0CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBvdmVyX2Jncm91bmRfdGhyZXNoKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBiYWNrZ3JvdW5kX3RocmVzaCwgZGlydHlfdGhyZXNoOworCisJZ2V0X2RpcnR5X2xpbWl0cygmYmFja2dyb3VuZF90aHJlc2gsICZkaXJ0eV90aHJlc2gsIE5VTEwsIE5VTEwpOworCisJcmV0dXJuIChnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSArCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUykgPj0gYmFja2dyb3VuZF90aHJlc2gpOworfQorCisvKgorICogRXhwbGljaXQgZmx1c2hpbmcgb3IgcGVyaW9kaWMgd3JpdGViYWNrIG9mICJvbGQiIGRhdGEuCisgKgorICogRGVmaW5lICJvbGQiOiB0aGUgZmlyc3QgdGltZSBvbmUgb2YgYW4gaW5vZGUncyBwYWdlcyBpcyBkaXJ0aWVkLCB3ZSBtYXJrIHRoZQorICogZGlydHlpbmctdGltZSBpbiB0aGUgaW5vZGUncyBhZGRyZXNzX3NwYWNlLiAgU28gdGhpcyBwZXJpb2RpYyB3cml0ZWJhY2sgY29kZQorICoganVzdCB3YWxrcyB0aGUgc3VwZXJibG9jayBpbm9kZSBsaXN0LCB3cml0aW5nIGJhY2sgYW55IGlub2RlcyB3aGljaCBhcmUKKyAqIG9sZGVyIHRoYW4gYSBzcGVjaWZpYyBwb2ludCBpbiB0aW1lLgorICoKKyAqIFRyeSB0byBydW4gb25jZSBwZXIgZGlydHlfd3JpdGViYWNrX2ludGVydmFsLiAgQnV0IGlmIGEgd3JpdGViYWNrIGV2ZW50CisgKiB0YWtlcyBsb25nZXIgdGhhbiBhIGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCBpbnRlcnZhbCwgdGhlbiBsZWF2ZSBhCisgKiBvbmUtc2Vjb25kIGdhcC4KKyAqCisgKiBvbGRlcl90aGFuX3RoaXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIG5yX3RvX3dyaXRlLiAgU28gd2UnbGwgb25seSB3cml0ZSBiYWNrCisgKiBhbGwgZGlydHkgcGFnZXMgaWYgdGhleSBhcmUgYWxsIGF0dGFjaGVkIHRvICJvbGQiIG1hcHBpbmdzLgorICovCitzdGF0aWMgbG9uZyB3Yl93cml0ZWJhY2soc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLAorCQkJIHN0cnVjdCB3Yl93cml0ZWJhY2tfYXJncyAqYXJncykKK3sKKwlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0geworCQkuYmRpCQkJPSB3Yi0+YmRpLAorCQkuc2IJCQk9IGFyZ3MtPnNiLAorCQkuc3luY19tb2RlCQk9IGFyZ3MtPnN5bmNfbW9kZSwKKwkJLm9sZGVyX3RoYW5fdGhpcwk9IE5VTEwsCisJCS5mb3Jfa3VwZGF0ZQkJPSBhcmdzLT5mb3Jfa3VwZGF0ZSwKKwkJLnJhbmdlX2N5Y2xpYwkJPSBhcmdzLT5yYW5nZV9jeWNsaWMsCisJfTsKKwl1bnNpZ25lZCBsb25nIG9sZGVzdF9qaWY7CisJbG9uZyB3cm90ZSA9IDA7CisKKwlpZiAod2JjLmZvcl9rdXBkYXRlKSB7CisJCXdiYy5vbGRlcl90aGFuX3RoaXMgPSAmb2xkZXN0X2ppZjsKKwkJb2xkZXN0X2ppZiA9IGppZmZpZXMgLQorCQkJCW1zZWNzX3RvX2ppZmZpZXMoZGlydHlfZXhwaXJlX2ludGVydmFsICogMTApOworCX0KKwlpZiAoIXdiYy5yYW5nZV9jeWNsaWMpIHsKKwkJd2JjLnJhbmdlX3N0YXJ0ID0gMDsKKwkJd2JjLnJhbmdlX2VuZCA9IExMT05HX01BWDsKKwl9CisKKwlmb3IgKDs7KSB7CisJCS8qCisJCSAqIERvbid0IGZsdXNoIGFueXRoaW5nIGZvciBub24taW50ZWdyaXR5IHdyaXRlYmFjayB3aGVyZQorCQkgKiBubyBucl9wYWdlcyB3YXMgZ2l2ZW4KKwkJICovCisJCWlmICghYXJncy0+Zm9yX2t1cGRhdGUgJiYgYXJncy0+bnJfcGFnZXMgPD0gMCAmJgorCQkgICAgIGFyZ3MtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX05PTkUpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBJZiBubyBzcGVjaWZpYyBwYWdlcyB3ZXJlIGdpdmVuIGFuZCB0aGlzIGlzIGp1c3QgYQorCQkgKiBwZXJpb2RpYyBiYWNrZ3JvdW5kIHdyaXRlb3V0IGFuZCB3ZSBhcmUgYmVsb3cgdGhlCisJCSAqIGJhY2tncm91bmQgZGlydHkgdGhyZXNob2xkLCBkb24ndCBkbyBhbnl0aGluZworCQkgKi8KKwkJaWYgKGFyZ3MtPmZvcl9rdXBkYXRlICYmIGFyZ3MtPm5yX3BhZ2VzIDw9IDAgJiYKKwkJICAgICFvdmVyX2Jncm91bmRfdGhyZXNoKCkpCisJCQlicmVhazsKKworCQl3YmMubW9yZV9pbyA9IDA7CisJCXdiYy5lbmNvdW50ZXJlZF9jb25nZXN0aW9uID0gMDsKKwkJd2JjLm5yX3RvX3dyaXRlID0gTUFYX1dSSVRFQkFDS19QQUdFUzsKKwkJd2JjLnBhZ2VzX3NraXBwZWQgPSAwOworCQl3cml0ZWJhY2tfaW5vZGVzX3diKHdiLCAmd2JjKTsKKwkJYXJncy0+bnJfcGFnZXMgLT0gTUFYX1dSSVRFQkFDS19QQUdFUyAtIHdiYy5ucl90b193cml0ZTsKKwkJd3JvdGUgKz0gTUFYX1dSSVRFQkFDS19QQUdFUyAtIHdiYy5ucl90b193cml0ZTsKKworCQkvKgorCQkgKiBJZiB3ZSByYW4gb3V0IG9mIHN0dWZmIHRvIHdyaXRlLCBiYWlsIHVubGVzcyBtb3JlX2lvIGdvdCBzZXQKKwkJICovCisJCWlmICh3YmMubnJfdG9fd3JpdGUgPiAwIHx8IHdiYy5wYWdlc19za2lwcGVkID4gMCkgeworCQkJaWYgKHdiYy5tb3JlX2lvICYmICF3YmMuZm9yX2t1cGRhdGUpCisJCQkJY29udGludWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiB3cm90ZTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbmV4dCBiZGlfd29yayBzdHJ1Y3QgdGhhdCBoYXNuJ3QgYmVlbiBwcm9jZXNzZWQgYnkgdGhpcworICogd2IgdGhyZWFkIHlldC4gLT5zZWVuIGlzIGluaXRpYWxseSBzZXQgZm9yIGVhY2ggdGhyZWFkIHRoYXQgZXhpc3RzCisgKiBmb3IgdGhpcyBkZXZpY2UsIHdoZW4gYSB0aHJlYWQgZmlyc3Qgbm90aWNlcyBhIHBpZWNlIG9mIHdvcmsgaXQKKyAqIGNsZWFycyBpdHMgYml0LiBEZXBlbmRpbmcgb24gd3JpdGViYWNrIHR5cGUsIHRoZSB0aHJlYWQgd2lsbCBub3RpZnkKKyAqIGNvbXBsZXRpb24gb24gZWl0aGVyIHJlY2VpdmluZyB0aGUgd29yayAoV0JfU1lOQ19OT05FKSBvciBhZnRlcgorICogaXQgaXMgZG9uZSAoV0JfU1lOQ19BTEwpLgorICovCitzdGF0aWMgc3RydWN0IGJkaV93b3JrICpnZXRfbmV4dF93b3JrX2l0ZW0oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwKKwkJCQkJICAgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKQoreworCXN0cnVjdCBiZGlfd29yayAqd29yaywgKnJldCA9IE5VTEw7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh3b3JrLCAmYmRpLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCF0ZXN0X2JpdCh3Yi0+bnIsICZ3b3JrLT5zZWVuKSkKKwkJCWNvbnRpbnVlOworCQljbGVhcl9iaXQod2ItPm5yLCAmd29yay0+c2Vlbik7CisKKwkJcmV0ID0gd29yazsKKwkJYnJlYWs7CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGxvbmcgd2JfY2hlY2tfb2xkX2RhdGFfZmx1c2goc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKQoreworCXVuc2lnbmVkIGxvbmcgZXhwaXJlZDsKKwlsb25nIG5yX3BhZ2VzOworCisJZXhwaXJlZCA9IHdiLT5sYXN0X29sZF9mbHVzaCArCisJCQltc2Vjc190b19qaWZmaWVzKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCAqIDEwKTsKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgZXhwaXJlZCkpCisJCXJldHVybiAwOworCisJd2ItPmxhc3Rfb2xkX2ZsdXNoID0gamlmZmllczsKKwlucl9wYWdlcyA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpICsKKwkJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUykgKworCQkJKGlub2Rlc19zdGF0Lm5yX2lub2RlcyAtIGlub2Rlc19zdGF0Lm5yX3VudXNlZCk7CisKKwlpZiAobnJfcGFnZXMpIHsKKwkJc3RydWN0IHdiX3dyaXRlYmFja19hcmdzIGFyZ3MgPSB7CisJCQkubnJfcGFnZXMJPSBucl9wYWdlcywKKwkJCS5zeW5jX21vZGUJPSBXQl9TWU5DX05PTkUsCisJCQkuZm9yX2t1cGRhdGUJPSAxLAorCQkJLnJhbmdlX2N5Y2xpYwk9IDEsCisJCX07CisKKwkJcmV0dXJuIHdiX3dyaXRlYmFjayh3YiwgJmFyZ3MpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogUmV0cmlldmUgd29yayBpdGVtcyBhbmQgZG8gdGhlIHdyaXRlYmFjayB0aGV5IGRlc2NyaWJlCisgKi8KK2xvbmcgd2JfZG9fd3JpdGViYWNrKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiwgaW50IGZvcmNlX3dhaXQpCit7CisJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9IHdiLT5iZGk7CisJc3RydWN0IGJkaV93b3JrICp3b3JrOworCWxvbmcgd3JvdGUgPSAwOworCisJd2hpbGUgKCh3b3JrID0gZ2V0X25leHRfd29ya19pdGVtKGJkaSwgd2IpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCB3Yl93cml0ZWJhY2tfYXJncyBhcmdzID0gd29yay0+YXJnczsKKworCQkvKgorCQkgKiBPdmVycmlkZSBzeW5jIG1vZGUsIGluIGNhc2Ugd2UgbXVzdCB3YWl0IGZvciBjb21wbGV0aW9uCisJCSAqLworCQlpZiAoZm9yY2Vfd2FpdCkKKwkJCXdvcmstPmFyZ3Muc3luY19tb2RlID0gYXJncy5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTDsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzbid0IGEgZGF0YSBpbnRlZ3JpdHkgb3BlcmF0aW9uLCBqdXN0IG5vdGlmeQorCQkgKiB0aGF0IHdlIGhhdmUgc2VlbiB0aGlzIHdvcmsgYW5kIHdlIGFyZSBub3cgc3RhcnRpbmcgaXQuCisJCSAqLworCQlpZiAoYXJncy5zeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKQorCQkJd2JfY2xlYXJfcGVuZGluZyh3Yiwgd29yayk7CisKKwkJd3JvdGUgKz0gd2Jfd3JpdGViYWNrKHdiLCAmYXJncyk7CisKKwkJLyoKKwkJICogVGhpcyBpcyBhIGRhdGEgaW50ZWdyaXR5IHdyaXRlYmFjaywgc28gb25seSBkbyB0aGUKKwkJICogbm90aWZpY2F0aW9uIHdoZW4gd2UgaGF2ZSBjb21wbGV0ZWQgdGhlIHdvcmsuCisJCSAqLworCQlpZiAoYXJncy5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpCisJCQl3Yl9jbGVhcl9wZW5kaW5nKHdiLCB3b3JrKTsKKwl9CisKKwkvKgorCSAqIENoZWNrIGZvciBwZXJpb2RpYyB3cml0ZWJhY2ssIGt1cGRhdGVkKCkgc3R5bGUKKwkgKi8KKwl3cm90ZSArPSB3Yl9jaGVja19vbGRfZGF0YV9mbHVzaCh3Yik7CisKKwlyZXR1cm4gd3JvdGU7Cit9CisKKy8qCisgKiBIYW5kbGUgd3JpdGViYWNrIG9mIGRpcnR5IGRhdGEgZm9yIHRoZSBkZXZpY2UgYmFja2VkIGJ5IHRoaXMgYmRpLiBBbHNvCisgKiB3YWtlcyB1cCBwZXJpb2RpY2FsbHkgYW5kIGRvZXMga3VwZGF0ZWQgc3R5bGUgZmx1c2hpbmcuCisgKi8KK2ludCBiZGlfd3JpdGViYWNrX3Rhc2soc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKQoreworCXVuc2lnbmVkIGxvbmcgbGFzdF9hY3RpdmUgPSBqaWZmaWVzOworCXVuc2lnbmVkIGxvbmcgd2FpdF9qaWZmaWVzID0gLTFVTDsKKwlsb25nIHBhZ2VzX3dyaXR0ZW47CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlwYWdlc193cml0dGVuID0gd2JfZG9fd3JpdGViYWNrKHdiLCAwKTsKKworCQlpZiAocGFnZXNfd3JpdHRlbikKKwkJCWxhc3RfYWN0aXZlID0gamlmZmllczsKKwkJZWxzZSBpZiAod2FpdF9qaWZmaWVzICE9IC0xVUwpIHsKKwkJCXVuc2lnbmVkIGxvbmcgbWF4X2lkbGU7CisKKwkJCS8qCisJCQkgKiBMb25nZXN0IHBlcmlvZCBvZiBpbmFjdGl2aXR5IHRoYXQgd2UgdG9sZXJhdGUuIElmIHdlCisJCQkgKiBzZWUgZGlydHkgZGF0YSBhZ2FpbiBsYXRlciwgdGhlIHRhc2sgd2lsbCBnZXQKKwkJCSAqIHJlY3JlYXRlZCBhdXRvbWF0aWNhbGx5LgorCQkJICovCisJCQltYXhfaWRsZSA9IG1heCg1VUwgKiA2MCAqIEhaLCB3YWl0X2ppZmZpZXMpOworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbWF4X2lkbGUgKyBsYXN0X2FjdGl2ZSkpCisJCQkJYnJlYWs7CisJCX0KKworCQl3YWl0X2ppZmZpZXMgPSBtc2Vjc190b19qaWZmaWVzKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCAqIDEwKTsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHdhaXRfamlmZmllcyk7CisJCXRyeV90b19mcmVlemUoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNjaGVkdWxlIHdyaXRlYmFjayBmb3IgYWxsIGJhY2tpbmcgZGV2aWNlcy4gVGhpcyBkb2VzIFdCX1NZTkNfTk9ORQorICogd3JpdGViYWNrLCBmb3IgaW50ZWdyaXR5IHdyaXRlYmFjayBzZWUgYmRpX3N5bmNfd3JpdGViYWNrKCkuCisgKi8KK3N0YXRpYyB2b2lkIGJkaV93cml0ZWJhY2tfYWxsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvbmcgbnJfcGFnZXMpCit7CisJc3RydWN0IHdiX3dyaXRlYmFja19hcmdzIGFyZ3MgPSB7CisJCS5zYgkJPSBzYiwKKwkJLm5yX3BhZ2VzCT0gbnJfcGFnZXMsCisJCS5zeW5jX21vZGUJPSBXQl9TWU5DX05PTkUsCisJfTsKKwlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpOworCisJcmN1X3JlYWRfbG9jaygpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoYmRpLCAmYmRpX2xpc3QsIGJkaV9saXN0KSB7CisJCWlmICghYmRpX2hhc19kaXJ0eV9pbyhiZGkpKQorCQkJY29udGludWU7CisKKwkJYmRpX2FsbG9jX3F1ZXVlX3dvcmsoYmRpLCAmYXJncyk7CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKKy8qCisgKiBTdGFydCB3cml0ZWJhY2sgb2YgYG5yX3BhZ2VzJyBwYWdlcy4gIElmIGBucl9wYWdlcycgaXMgemVybywgd3JpdGUgYmFjaworICogdGhlIHdob2xlIHdvcmxkLgorICovCit2b2lkIHdha2V1cF9mbHVzaGVyX3RocmVhZHMobG9uZyBucl9wYWdlcykKK3sKKwlpZiAobnJfcGFnZXMgPT0gMCkKKwkJbnJfcGFnZXMgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSArCisJCQkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKTsKKwliZGlfd3JpdGViYWNrX2FsbChOVUxMLCBucl9wYWdlcyk7CiB9CiAKIHN0YXRpYyBub2lubGluZSB2b2lkIGJsb2NrX2R1bXBfX19tYXJrX2lub2RlX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC0xNjUsMjc0ICsxMDMwLDI5IEBACiAJCQlnb3RvIG91dDsKIAogCQkvKgotCQkgKiBJZiB0aGUgaW5vZGUgd2FzIGFscmVhZHkgb24gc19kaXJ0eS9zX2lvL3NfbW9yZV9pbywgZG9uJ3QKLQkJICogcmVwb3NpdGlvbiBpdCAodGhhdCB3b3VsZCBicmVhayBzX2RpcnR5IHRpbWUtb3JkZXJpbmcpLgorCQkgKiBJZiB0aGUgaW5vZGUgd2FzIGFscmVhZHkgb24gYl9kaXJ0eS9iX2lvL2JfbW9yZV9pbywgZG9uJ3QKKwkJICogcmVwb3NpdGlvbiBpdCAodGhhdCB3b3VsZCBicmVhayBiX2RpcnR5IHRpbWUtb3JkZXJpbmcpLgogCQkgKi8KIAkJaWYgKCF3YXNfZGlydHkpIHsKKwkJCXN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiA9ICZpbm9kZV90b19iZGkoaW5vZGUpLT53YjsKKwkJCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSB3Yi0+YmRpOworCisJCQlpZiAoYmRpX2NhcF93cml0ZWJhY2tfZGlydHkoYmRpKSAmJgorCQkJICAgICF0ZXN0X2JpdChCRElfcmVnaXN0ZXJlZCwgJmJkaS0+c3RhdGUpKSB7CisJCQkJV0FSTl9PTigxKTsKKwkJCQlwcmludGsoS0VSTl9FUlIgImJkaS0lcyBub3QgcmVnaXN0ZXJlZFxuIiwKKwkJCQkJCQkJYmRpLT5uYW1lKTsKKwkJCX0KKwogCQkJaW5vZGUtPmRpcnRpZWRfd2hlbiA9IGppZmZpZXM7Ci0JCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsICZzYi0+c19kaXJ0eSk7CisJCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsICZ3Yi0+Yl9kaXJ0eSk7CiAJCX0KIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogfQotCiBFWFBPUlRfU1lNQk9MKF9fbWFya19pbm9kZV9kaXJ0eSk7CiAKLXN0YXRpYyBpbnQgd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHN5bmMpCi17Ci0JaWYgKGlub2RlLT5pX3NiLT5zX29wLT53cml0ZV9pbm9kZSAmJiAhaXNfYmFkX2lub2RlKGlub2RlKSkKLQkJcmV0dXJuIGlub2RlLT5pX3NiLT5zX29wLT53cml0ZV9pbm9kZShpbm9kZSwgc3luYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZWRpcnR5IGFuIGlub2RlOiBzZXQgaXRzIHdoZW4taXQtd2FzIGRpcnRpZWQgdGltZXN0YW1wIGFuZCBtb3ZlIGl0IHRvIHRoZQotICogZnVydGhlc3QgZW5kIG9mIGl0cyBzdXBlcmJsb2NrJ3MgZGlydHktaW5vZGUgbGlzdC4KLSAqCi0gKiBCZWZvcmUgc3RhbXBpbmcgdGhlIGlub2RlJ3MgLT5kaXJ0aWVkX3doZW4sIHdlIGNoZWNrIHRvIHNlZSB3aGV0aGVyIGl0IGlzCi0gKiBhbHJlYWR5IHRoZSBtb3N0LXJlY2VudGx5LWRpcnRpZWQgaW5vZGUgb24gdGhlIHNfZGlydHkgbGlzdC4gIElmIHRoYXQgaXMKLSAqIHRoZSBjYXNlIHRoZW4gdGhlIGlub2RlIG11c3QgaGF2ZSBiZWVuIHJlZGlydGllZCB3aGlsZSBpdCB3YXMgYmVpbmcgd3JpdHRlbgotICogb3V0IGFuZCB3ZSBkb24ndCByZXNldCBpdHMgZGlydGllZF93aGVuLgotICovCi1zdGF0aWMgdm9pZCByZWRpcnR5X3RhaWwoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJnNiLT5zX2RpcnR5KSkgewotCQlzdHJ1Y3QgaW5vZGUgKnRhaWxfaW5vZGU7Ci0KLQkJdGFpbF9pbm9kZSA9IGxpc3RfZW50cnkoc2ItPnNfZGlydHkubmV4dCwgc3RydWN0IGlub2RlLCBpX2xpc3QpOwotCQlpZiAodGltZV9iZWZvcmUoaW5vZGUtPmRpcnRpZWRfd2hlbiwKLQkJCQl0YWlsX2lub2RlLT5kaXJ0aWVkX3doZW4pKQotCQkJaW5vZGUtPmRpcnRpZWRfd2hlbiA9IGppZmZpZXM7Ci0JfQotCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgJnNiLT5zX2RpcnR5KTsKLX0KLQotLyoKLSAqIHJlcXVldWUgaW5vZGUgZm9yIHJlLXNjYW5uaW5nIGFmdGVyIHNiLT5zX2lvIGxpc3QgaXMgZXhoYXVzdGVkLgotICovCi1zdGF0aWMgdm9pZCByZXF1ZXVlX2lvKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JbGlzdF9tb3ZlKCZpbm9kZS0+aV9saXN0LCAmaW5vZGUtPmlfc2ItPnNfbW9yZV9pbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlub2RlX3N5bmNfY29tcGxldGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQkvKgotCSAqIFByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uIHRocm91Z2ggc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwotCSAqLwotCXNtcF9tYigpOwotCXdha2VfdXBfYml0KCZpbm9kZS0+aV9zdGF0ZSwgX19JX1NZTkMpOwotfQotCi1zdGF0aWMgYm9vbCBpbm9kZV9kaXJ0aWVkX2FmdGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgdCkKLXsKLQlib29sIHJldCA9IHRpbWVfYWZ0ZXIoaW5vZGUtPmRpcnRpZWRfd2hlbiwgdCk7Ci0jaWZuZGVmIENPTkZJR182NEJJVAotCS8qCi0JICogRm9yIGlub2RlcyBiZWluZyBjb25zdGFudGx5IHJlZGlydGllZCwgZGlydGllZF93aGVuIGNhbiBnZXQgc3R1Y2suCi0JICogSXQgX2FwcGVhcnNfIHRvIGJlIGluIHRoZSBmdXR1cmUsIGJ1dCBpcyBhY3R1YWxseSBpbiBkaXN0YW50IHBhc3QuCi0JICogVGhpcyB0ZXN0IGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHN1Y2ggd3JhcHBlZC1hcm91bmQgcmVsYXRpdmUgdGltZXMKLQkgKiBmcm9tIHBlcm1hbmVudGx5IHN0b3BwaW5nIHRoZSB3aG9sZSBwZGZsdXNoIHdyaXRlYmFjay4KLQkgKi8KLQlyZXQgPSByZXQgJiYgdGltZV9iZWZvcmVfZXEoaW5vZGUtPmRpcnRpZWRfd2hlbiwgamlmZmllcyk7Ci0jZW5kaWYKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogTW92ZSBleHBpcmVkIGRpcnR5IGlub2RlcyBmcm9tIEBkZWxheWluZ19xdWV1ZSB0byBAZGlzcGF0Y2hfcXVldWUuCi0gKi8KLXN0YXRpYyB2b2lkIG1vdmVfZXhwaXJlZF9pbm9kZXMoc3RydWN0IGxpc3RfaGVhZCAqZGVsYXlpbmdfcXVldWUsCi0JCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGlzcGF0Y2hfcXVldWUsCi0JCQkJdW5zaWduZWQgbG9uZyAqb2xkZXJfdGhhbl90aGlzKQotewotCXdoaWxlICghbGlzdF9lbXB0eShkZWxheWluZ19xdWV1ZSkpIHsKLQkJc3RydWN0IGlub2RlICppbm9kZSA9IGxpc3RfZW50cnkoZGVsYXlpbmdfcXVldWUtPnByZXYsCi0JCQkJCQlzdHJ1Y3QgaW5vZGUsIGlfbGlzdCk7Ci0JCWlmIChvbGRlcl90aGFuX3RoaXMgJiYKLQkJICAgIGlub2RlX2RpcnRpZWRfYWZ0ZXIoaW5vZGUsICpvbGRlcl90aGFuX3RoaXMpKQotCQkJYnJlYWs7Ci0JCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgZGlzcGF0Y2hfcXVldWUpOwotCX0KLX0KLQotLyoKLSAqIFF1ZXVlIGFsbCBleHBpcmVkIGRpcnR5IGlub2RlcyBmb3IgaW8sIGVsZGVzdCBmaXJzdC4KLSAqLwotc3RhdGljIHZvaWQgcXVldWVfaW8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCQl1bnNpZ25lZCBsb25nICpvbGRlcl90aGFuX3RoaXMpCi17Ci0JbGlzdF9zcGxpY2VfaW5pdCgmc2ItPnNfbW9yZV9pbywgc2ItPnNfaW8ucHJldik7Ci0JbW92ZV9leHBpcmVkX2lub2Rlcygmc2ItPnNfZGlydHksICZzYi0+c19pbywgb2xkZXJfdGhhbl90aGlzKTsKLX0KLQotaW50IHNiX2hhc19kaXJ0eV9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlyZXR1cm4gIWxpc3RfZW1wdHkoJnNiLT5zX2RpcnR5KSB8fAotCSAgICAgICAhbGlzdF9lbXB0eSgmc2ItPnNfaW8pIHx8Ci0JICAgICAgICFsaXN0X2VtcHR5KCZzYi0+c19tb3JlX2lvKTsKLX0KLUVYUE9SVF9TWU1CT0woc2JfaGFzX2RpcnR5X2lub2Rlcyk7Ci0KLS8qCi0gKiBXYWl0IGZvciB3cml0ZWJhY2sgb24gYW4gaW5vZGUgdG8gY29tcGxldGUuCi0gKi8KLXN0YXRpYyB2b2lkIGlub2RlX3dhaXRfZm9yX3dyaXRlYmFjayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCURFRklORV9XQUlUX0JJVCh3cSwgJmlub2RlLT5pX3N0YXRlLCBfX0lfU1lOQyk7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgKndxaDsKLQotCXdxaCA9IGJpdF93YWl0cXVldWUoJmlub2RlLT5pX3N0YXRlLCBfX0lfU1lOQyk7Ci0JZG8gewotCQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7Ci0JCV9fd2FpdF9vbl9iaXQod3FoLCAmd3EsIGlub2RlX3dhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKLQl9IHdoaWxlIChpbm9kZS0+aV9zdGF0ZSAmIElfU1lOQyk7Ci19Ci0KLS8qCi0gKiBXcml0ZSBvdXQgYW4gaW5vZGUncyBkaXJ0eSBwYWdlcy4gIENhbGxlZCB1bmRlciBpbm9kZV9sb2NrLiAgRWl0aGVyIHRoZQotICogY2FsbGVyIGhhcyByZWYgb24gdGhlIGlub2RlIChlaXRoZXIgdmlhIF9faWdldCBvciB2aWEgc3lzY2FsbCBhZ2FpbnN0IGFuIGZkKQotICogb3IgdGhlIGlub2RlIGhhcyBJX1dJTExfRlJFRSBzZXQgKHZpYSBnZW5lcmljX2ZvcmdldF9pbm9kZSkKLSAqCi0gKiBJZiBgd2FpdCcgaXMgc2V0LCB3YWl0IG9uIHRoZSB3cml0ZW91dC4KLSAqCi0gKiBUaGUgd2hvbGUgd3JpdGVvdXQgZGVzaWduIGlzIHF1aXRlIGNvbXBsZXggYW5kIGZyYWdpbGUuICBXZSB3YW50IHRvIGF2b2lkCi0gKiBzdGFydmF0aW9uIG9mIHBhcnRpY3VsYXIgaW5vZGVzIHdoZW4gb3RoZXJzIGFyZSBiZWluZyByZWRpcnRpZWQsIHByZXZlbnQKLSAqIGxpdmVsb2NrcywgZXRjLgotICoKLSAqIENhbGxlZCB1bmRlciBpbm9kZV9sb2NrLgotICovCi1zdGF0aWMgaW50Ci13cml0ZWJhY2tfc2luZ2xlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQotewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKLQlpbnQgd2FpdCA9IHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMOwotCXVuc2lnbmVkIGRpcnR5OwotCWludCByZXQ7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkpCi0JCVdBUk5fT04oIShpbm9kZS0+aV9zdGF0ZSAmIChJX1dJTExfRlJFRXxJX0ZSRUVJTkcpKSk7Ci0JZWxzZQotCQlXQVJOX09OKGlub2RlLT5pX3N0YXRlICYgSV9XSUxMX0ZSRUUpOwotCi0JaWYgKGlub2RlLT5pX3N0YXRlICYgSV9TWU5DKSB7Ci0JCS8qCi0JCSAqIElmIHRoaXMgaW5vZGUgaXMgbG9ja2VkIGZvciB3cml0ZWJhY2sgYW5kIHdlIGFyZSBub3QgZG9pbmcKLQkJICogd3JpdGViYWNrLWZvci1kYXRhLWludGVncml0eSwgbW92ZSBpdCB0byBzX21vcmVfaW8gc28gdGhhdAotCQkgKiB3cml0ZWJhY2sgY2FuIHByb2NlZWQgd2l0aCB0aGUgb3RoZXIgaW5vZGVzIG9uIHNfaW8uCi0JCSAqCi0JCSAqIFdlJ2xsIGhhdmUgYW5vdGhlciBnbyBhdCB3cml0aW5nIGJhY2sgdGhpcyBpbm9kZSB3aGVuIHdlCi0JCSAqIGNvbXBsZXRlZCBhIGZ1bGwgc2NhbiBvZiBzX2lvLgotCQkgKi8KLQkJaWYgKCF3YWl0KSB7Ci0JCQlyZXF1ZXVlX2lvKGlub2RlKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyoKLQkJICogSXQncyBhIGRhdGEtaW50ZWdyaXR5IHN5bmMuICBXZSBtdXN0IHdhaXQuCi0JCSAqLwotCQlpbm9kZV93YWl0X2Zvcl93cml0ZWJhY2soaW5vZGUpOwotCX0KLQotCUJVR19PTihpbm9kZS0+aV9zdGF0ZSAmIElfU1lOQyk7Ci0KLQkvKiBTZXQgSV9TWU5DLCByZXNldCBJX0RJUlRZICovCi0JZGlydHkgPSBpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFk7Ci0JaW5vZGUtPmlfc3RhdGUgfD0gSV9TWU5DOwotCWlub2RlLT5pX3N0YXRlICY9IH5JX0RJUlRZOwotCi0Jc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwotCi0JcmV0ID0gZG9fd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMpOwotCi0JLyogRG9uJ3Qgd3JpdGUgdGhlIGlub2RlIGlmIG9ubHkgSV9ESVJUWV9QQUdFUyB3YXMgc2V0ICovCi0JaWYgKGRpcnR5ICYgKElfRElSVFlfU1lOQyB8IElfRElSVFlfREFUQVNZTkMpKSB7Ci0JCWludCBlcnIgPSB3cml0ZV9pbm9kZShpbm9kZSwgd2FpdCk7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJldCA9IGVycjsKLQl9Ci0KLQlpZiAod2FpdCkgewotCQlpbnQgZXJyID0gZmlsZW1hcF9mZGF0YXdhaXQobWFwcGluZyk7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJldCA9IGVycjsKLQl9Ci0KLQlzcGluX2xvY2soJmlub2RlX2xvY2spOwotCWlub2RlLT5pX3N0YXRlICY9IH5JX1NZTkM7Ci0JaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HIHwgSV9DTEVBUikpKSB7Ci0JCWlmICghKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSkgJiYKLQkJICAgIG1hcHBpbmdfdGFnZ2VkKG1hcHBpbmcsIFBBR0VDQUNIRV9UQUdfRElSVFkpKSB7Ci0JCQkvKgotCQkJICogV2UgZGlkbid0IHdyaXRlIGJhY2sgYWxsIHRoZSBwYWdlcy4gIG5mc193cml0ZXBhZ2VzKCkKLQkJCSAqIHNvbWV0aW1lcyBiYWxlcyBvdXQgd2l0aG91dCBkb2luZyBhbnl0aGluZy4gUmVkaXJ0eQotCQkJICogdGhlIGlub2RlOyBNb3ZlIGl0IGZyb20gc19pbyBvbnRvIHNfbW9yZV9pby9zX2RpcnR5LgotCQkJICovCi0JCQkvKgotCQkJICogYWtwbTogaWYgdGhlIGNhbGxlciB3YXMgdGhlIGt1cGRhdGUgZnVuY3Rpb24gd2UgcHV0Ci0JCQkgKiB0aGlzIGlub2RlIGF0IHRoZSBoZWFkIG9mIHNfZGlydHkgc28gaXQgZ2V0cyBmaXJzdAotCQkJICogY29uc2lkZXJhdGlvbi4gIE90aGVyd2lzZSwgbW92ZSBpdCB0byB0aGUgdGFpbCwgZm9yCi0JCQkgKiB0aGUgcmVhc29ucyBkZXNjcmliZWQgdGhlcmUuICBJJ20gbm90IHJlYWxseSBzdXJlCi0JCQkgKiBob3cgbXVjaCBzZW5zZSB0aGlzIG1ha2VzLiAgUHJlc3VtYWJseSBJIGhhZCBhIGdvb2QKLQkJCSAqIHJlYXNvbnMgZm9yIGRvaW5nIGl0IHRoaXMgd2F5LCBhbmQgSSdkIHJhdGhlciBub3QKLQkJCSAqIG11Y2sgd2l0aCBpdCBhdCBwcmVzZW50LgotCQkJICovCi0JCQlpZiAod2JjLT5mb3Jfa3VwZGF0ZSkgewotCQkJCS8qCi0JCQkJICogRm9yIHRoZSBrdXBkYXRlIGZ1bmN0aW9uIHdlIG1vdmUgdGhlIGlub2RlCi0JCQkJICogdG8gc19tb3JlX2lvIHNvIGl0IHdpbGwgZ2V0IG1vcmUgd3JpdGVvdXQgYXMKLQkJCQkgKiBzb29uIGFzIHRoZSBxdWV1ZSBiZWNvbWVzIHVuY29uZ2VzdGVkLgotCQkJCSAqLwotCQkJCWlub2RlLT5pX3N0YXRlIHw9IElfRElSVFlfUEFHRVM7Ci0JCQkJaWYgKHdiYy0+bnJfdG9fd3JpdGUgPD0gMCkgewotCQkJCQkvKgotCQkJCQkgKiBzbGljZSB1c2VkIHVwOiBxdWV1ZSBmb3IgbmV4dCB0dXJuCi0JCQkJCSAqLwotCQkJCQlyZXF1ZXVlX2lvKGlub2RlKTsKLQkJCQl9IGVsc2UgewotCQkJCQkvKgotCQkJCQkgKiBzb21laG93IGJsb2NrZWQ6IHJldHJ5IGxhdGVyCi0JCQkJCSAqLwotCQkJCQlyZWRpcnR5X3RhaWwoaW5vZGUpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBPdGhlcndpc2UgZnVsbHkgcmVkaXJ0eSB0aGUgaW5vZGUgc28gdGhhdAotCQkJCSAqIG90aGVyIGlub2RlcyBvbiB0aGlzIHN1cGVyYmxvY2sgd2lsbCBnZXQgc29tZQotCQkJCSAqIHdyaXRlb3V0LiAgT3RoZXJ3aXNlIGhlYXZ5IHdyaXRpbmcgdG8gb25lCi0JCQkJICogZmlsZSB3b3VsZCBpbmRlZmluaXRlbHkgc3VzcGVuZCB3cml0ZW91dCBvZgotCQkJCSAqIGFsbCB0aGUgb3RoZXIgZmlsZXMuCi0JCQkJICovCi0JCQkJaW5vZGUtPmlfc3RhdGUgfD0gSV9ESVJUWV9QQUdFUzsKLQkJCQlyZWRpcnR5X3RhaWwoaW5vZGUpOwotCQkJfQotCQl9IGVsc2UgaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSkgewotCQkJLyoKLQkJCSAqIFNvbWVvbmUgcmVkaXJ0aWVkIHRoZSBpbm9kZSB3aGlsZSB3ZXJlIHdyaXRpbmcgYmFjawotCQkJICogdGhlIHBhZ2VzLgotCQkJICovCi0JCQlyZWRpcnR5X3RhaWwoaW5vZGUpOwotCQl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkpIHsKLQkJCS8qCi0JCQkgKiBUaGUgaW5vZGUgaXMgY2xlYW4sIGludXNlCi0JCQkgKi8KLQkJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgJmlub2RlX2luX3VzZSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogVGhlIGlub2RlIGlzIGNsZWFuLCB1bnVzZWQKLQkJCSAqLwotCQkJbGlzdF9tb3ZlKCZpbm9kZS0+aV9saXN0LCAmaW5vZGVfdW51c2VkKTsKLQkJfQotCX0KLQlpbm9kZV9zeW5jX2NvbXBsZXRlKGlub2RlKTsKLQlyZXR1cm4gcmV0OwotfQotCiAvKgogICogV3JpdGUgb3V0IGEgc3VwZXJibG9jaydzIGxpc3Qgb2YgZGlydHkgaW5vZGVzLiAgQSB3YWl0IHdpbGwgYmUgcGVyZm9ybWVkCiAgKiB1cG9uIG5vIGlub2RlcywgYWxsIGlub2RlcyBvciB0aGUgZmluYWwgb25lLCBkZXBlbmRpbmcgdXBvbiBzeW5jX21vZGUuCkBAIC00NDAsNyArMTA2MCw3IEBACiAgKiBJZiBvbGRlcl90aGFuX3RoaXMgaXMgbm9uLU5VTEwsIHRoZW4gb25seSB3cml0ZSBvdXQgaW5vZGVzIHdoaWNoCiAgKiBoYWQgdGhlaXIgZmlyc3QgZGlydHlpbmcgYXQgYSB0aW1lIGVhcmxpZXIgdGhhbiAqb2xkZXJfdGhhbl90aGlzLgogICoKLSAqIElmIHdlJ3JlIGEgcGRmbHVzaCB0aHJlYWQsIHRoZW4gaW1wbGVtZW50IHBkZmx1c2ggY29sbGlzaW9uIGF2b2lkYW5jZQorICogSWYgd2UncmUgYSBwZGxmdXNoIHRocmVhZCwgdGhlbiBpbXBsZW1lbnQgcGRmbHVzaCBjb2xsaXNpb24gYXZvaWRhbmNlCiAgKiBhZ2FpbnN0IHRoZSBlbnRpcmUgbGlzdC4KICAqCiAgKiBJZiBgYmRpJyBpcyBub24temVybyB0aGVuIHdlJ3JlIGJlaW5nIGFza2VkIHRvIHdyaXRlYmFjayBhIHNwZWNpZmljIHF1ZXVlLgpAQCAtNDQ4LDI0MCArMTA2OCw5NiBAQAogICogYSB2YXJpZXR5IG9mIHF1ZXVlcywgc28gYWxsIGlub2RlcyBhcmUgc2VhcmNoZWQuICBGb3Igb3RoZXIgc3VwZXJibG9ja3MsCiAgKiBhc3N1bWUgdGhhdCBhbGwgaW5vZGVzIGFyZSBiYWNrZWQgYnkgdGhlIHNhbWUgcXVldWUuCiAgKgotICogRklYTUU6IHRoaXMgbGluZWFyIHNlYXJjaCBjb3VsZCBnZXQgZXhwZW5zaXZlIHdpdGggbWFueSBmaWxleXN0ZW1zLiAgQnV0Ci0gKiBob3cgdG8gZml4PyAgV2UgbmVlZCB0byBnbyBmcm9tIGFuIGFkZHJlc3Nfc3BhY2UgdG8gYWxsIGlub2RlcyB3aGljaCBzaGFyZQotICogYSBxdWV1ZSB3aXRoIHRoYXQgYWRkcmVzc19zcGFjZS4gIChFYXN5OiBoYXZlIGEgZ2xvYmFsICJkaXJ0eSBzdXBlcmJsb2NrcyIKLSAqIGxpc3QpLgotICoKLSAqIFRoZSBpbm9kZXMgdG8gYmUgd3JpdHRlbiBhcmUgcGFya2VkIG9uIHNiLT5zX2lvLiAgVGhleSBhcmUgbW92ZWQgYmFjayBvbnRvCi0gKiBzYi0+c19kaXJ0eSBhcyB0aGV5IGFyZSBzZWxlY3RlZCBmb3Igd3JpdGluZy4gIFRoaXMgd2F5LCBub25lIGNhbiBiZSBtaXNzZWQKKyAqIFRoZSBpbm9kZXMgdG8gYmUgd3JpdHRlbiBhcmUgcGFya2VkIG9uIGJkaS0+Yl9pby4gIFRoZXkgYXJlIG1vdmVkIGJhY2sgb250bworICogYmRpLT5iX2RpcnR5IGFzIHRoZXkgYXJlIHNlbGVjdGVkIGZvciB3cml0aW5nLiAgVGhpcyB3YXksIG5vbmUgY2FuIGJlIG1pc3NlZAogICogb24gdGhlIHdyaXRlciB0aHJvdHRsaW5nIHBhdGgsIGFuZCB3ZSBnZXQgZGVjZW50IGJhbGFuY2luZyBiZXR3ZWVuIG1hbnkKICAqIHRocm90dGxlZCB0aHJlYWRzOiB3ZSBkb24ndCB3YW50IHRoZW0gYWxsIHBpbGluZyB1cCBvbiBpbm9kZV9zeW5jX3dhaXQuCiAgKi8KLXZvaWQgZ2VuZXJpY19zeW5jX3NiX2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQkJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQorc3RhdGljIHZvaWQgd2FpdF9zYl9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQljb25zdCB1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsJLyogbGl2ZWxvY2sgYXZvaWRhbmNlICovCi0JaW50IHN5bmMgPSB3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqb2xkX2lub2RlID0gTlVMTDsKKworCS8qCisJICogV2UgbmVlZCB0byBiZSBwcm90ZWN0ZWQgYWdhaW5zdCB0aGUgZmlsZXN5c3RlbSBnb2luZyBmcm9tCisJICogci9vIHRvIHIvdyBvciB2aWNlIHZlcnNhLgorCSAqLworCVdBUk5fT04oIXJ3c2VtX2lzX2xvY2tlZCgmc2ItPnNfdW1vdW50KSk7CiAKIAlzcGluX2xvY2soJmlub2RlX2xvY2spOwotCWlmICghd2JjLT5mb3Jfa3VwZGF0ZSB8fCBsaXN0X2VtcHR5KCZzYi0+c19pbykpCi0JCXF1ZXVlX2lvKHNiLCB3YmMtPm9sZGVyX3RoYW5fdGhpcyk7CiAKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnNiLT5zX2lvKSkgewotCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbGlzdF9lbnRyeShzYi0+c19pby5wcmV2LAotCQkJCQkJc3RydWN0IGlub2RlLCBpX2xpc3QpOwotCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7Ci0JCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwotCQlsb25nIHBhZ2VzX3NraXBwZWQ7CisJLyoKKwkgKiBEYXRhIGludGVncml0eSBzeW5jLiBNdXN0IHdhaXQgZm9yIGFsbCBwYWdlcyB1bmRlciB3cml0ZWJhY2ssCisJICogYmVjYXVzZSB0aGVyZSBtYXkgaGF2ZSBiZWVuIHBhZ2VzIGRpcnRpZWQgYmVmb3JlIG91ciBzeW5jCisJICogY2FsbCwgYnV0IHdoaWNoIGhhZCB3cml0ZW91dCBzdGFydGVkIGJlZm9yZSB3ZSB3cml0ZSBpdCBvdXQuCisJICogSW4gd2hpY2ggY2FzZSwgdGhlIGlub2RlIG1heSBub3QgYmUgb24gdGhlIGRpcnR5IGxpc3QsIGJ1dAorCSAqIHdlIHN0aWxsIGhhdmUgdG8gd2FpdCBmb3IgdGhhdCB3cml0ZW91dC4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmc2ItPnNfaW5vZGVzLCBpX3NiX2xpc3QpIHsKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAKLQkJaWYgKCFiZGlfY2FwX3dyaXRlYmFja19kaXJ0eShiZGkpKSB7Ci0JCQlyZWRpcnR5X3RhaWwoaW5vZGUpOwotCQkJaWYgKHNiX2lzX2Jsa2Rldl9zYihzYikpIHsKLQkJCQkvKgotCQkJCSAqIERpcnR5IG1lbW9yeS1iYWNrZWQgYmxvY2tkZXY6IHRoZSByYW1kaXNrCi0JCQkJICogZHJpdmVyIGRvZXMgdGhpcy4gIFNraXAganVzdCB0aGlzIGlub2RlCi0JCQkJICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKgotCQkJICogRGlydHkgbWVtb3J5LWJhY2tlZCBpbm9kZSBhZ2FpbnN0IGEgZmlsZXN5c3RlbSBvdGhlcgotCQkJICogdGhhbiB0aGUga2VybmVsLWludGVybmFsIGJkZXYgZmlsZXN5c3RlbS4gIFNraXAgdGhlCi0JCQkgKiBlbnRpcmUgc3VwZXJibG9jay4KLQkJCSAqLwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9ORVcgfCBJX1dJTExfRlJFRSkpIHsKLQkJCXJlcXVldWVfaW8oaW5vZGUpOworCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfQ0xFQVJ8SV9XSUxMX0ZSRUV8SV9ORVcpKQogCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAod2JjLT5ub25ibG9ja2luZyAmJiBiZGlfd3JpdGVfY29uZ2VzdGVkKGJkaSkpIHsKLQkJCXdiYy0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbiA9IDE7Ci0JCQlpZiAoIXNiX2lzX2Jsa2Rldl9zYihzYikpCi0JCQkJYnJlYWs7CQkvKiBTa2lwIGEgY29uZ2VzdGVkIGZzICovCi0JCQlyZXF1ZXVlX2lvKGlub2RlKTsKLQkJCWNvbnRpbnVlOwkJLyogU2tpcCBhIGNvbmdlc3RlZCBibG9ja2RldiAqLwotCQl9Ci0KLQkJaWYgKHdiYy0+YmRpICYmIGJkaSAhPSB3YmMtPmJkaSkgewotCQkJaWYgKCFzYl9pc19ibGtkZXZfc2Ioc2IpKQotCQkJCWJyZWFrOwkJLyogZnMgaGFzIHRoZSB3cm9uZyBxdWV1ZSAqLwotCQkJcmVxdWV1ZV9pbyhpbm9kZSk7Ci0JCQljb250aW51ZTsJCS8qIGJsb2NrZGV2IGhhcyB3cm9uZyBxdWV1ZSAqLwotCQl9Ci0KLQkJLyoKLQkJICogV2FzIHRoaXMgaW5vZGUgZGlydGllZCBhZnRlciBzeW5jX3NiX2lub2RlcyB3YXMgY2FsbGVkPwotCQkgKiBUaGlzIGtlZXBzIHN5bmMgZnJvbSBleHRyYSBqb2JzIGFuZCBsaXZlbG9jay4KLQkJICovCi0JCWlmIChpbm9kZV9kaXJ0aWVkX2FmdGVyKGlub2RlLCBzdGFydCkpCi0JCQlicmVhazsKLQotCQkvKiBJcyBhbm90aGVyIHBkZmx1c2ggYWxyZWFkeSBmbHVzaGluZyB0aGlzIHF1ZXVlPyAqLwotCQlpZiAoY3VycmVudF9pc19wZGZsdXNoKCkgJiYgIXdyaXRlYmFja19hY3F1aXJlKGJkaSkpCi0JCQlicmVhazsKLQotCQlCVUdfT04oaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HIHwgSV9DTEVBUikpOworCQltYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKKwkJaWYgKG1hcHBpbmctPm5ycGFnZXMgPT0gMCkKKwkJCWNvbnRpbnVlOwogCQlfX2lnZXQoaW5vZGUpOwotCQlwYWdlc19za2lwcGVkID0gd2JjLT5wYWdlc19za2lwcGVkOwotCQl3cml0ZWJhY2tfc2luZ2xlX2lub2RlKGlub2RlLCB3YmMpOwotCQlpZiAoY3VycmVudF9pc19wZGZsdXNoKCkpCi0JCQl3cml0ZWJhY2tfcmVsZWFzZShiZGkpOwotCQlpZiAod2JjLT5wYWdlc19za2lwcGVkICE9IHBhZ2VzX3NraXBwZWQpIHsKLQkJCS8qCi0JCQkgKiB3cml0ZWJhY2sgaXMgbm90IG1ha2luZyBwcm9ncmVzcyBkdWUgdG8gbG9ja2VkCi0JCQkgKiBidWZmZXJzLiAgU2tpcCB0aGlzIGlub2RlIGZvciBub3cuCi0JCQkgKi8KLQkJCXJlZGlydHlfdGFpbChpbm9kZSk7Ci0JCX0KIAkJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwotCQlpcHV0KGlub2RlKTsKLQkJY29uZF9yZXNjaGVkKCk7Ci0JCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7Ci0JCWlmICh3YmMtPm5yX3RvX3dyaXRlIDw9IDApIHsKLQkJCXdiYy0+bW9yZV9pbyA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoIWxpc3RfZW1wdHkoJnNiLT5zX21vcmVfaW8pKQotCQkJd2JjLT5tb3JlX2lvID0gMTsKLQl9Ci0KLQlpZiAoc3luYykgewotCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqb2xkX2lub2RlID0gTlVMTDsKLQogCQkvKgotCQkgKiBEYXRhIGludGVncml0eSBzeW5jLiBNdXN0IHdhaXQgZm9yIGFsbCBwYWdlcyB1bmRlciB3cml0ZWJhY2ssCi0JCSAqIGJlY2F1c2UgdGhlcmUgbWF5IGhhdmUgYmVlbiBwYWdlcyBkaXJ0aWVkIGJlZm9yZSBvdXIgc3luYwotCQkgKiBjYWxsLCBidXQgd2hpY2ggaGFkIHdyaXRlb3V0IHN0YXJ0ZWQgYmVmb3JlIHdlIHdyaXRlIGl0IG91dC4KLQkJICogSW4gd2hpY2ggY2FzZSwgdGhlIGlub2RlIG1heSBub3QgYmUgb24gdGhlIGRpcnR5IGxpc3QsIGJ1dAotCQkgKiB3ZSBzdGlsbCBoYXZlIHRvIHdhaXQgZm9yIHRoYXQgd3JpdGVvdXQuCisJCSAqIFdlIGhvbGQgYSByZWZlcmVuY2UgdG8gJ2lub2RlJyBzbyBpdCBjb3VsZG4ndCBoYXZlCisJCSAqIGJlZW4gcmVtb3ZlZCBmcm9tIHNfaW5vZGVzIGxpc3Qgd2hpbGUgd2UgZHJvcHBlZCB0aGUKKwkJICogaW5vZGVfbG9jay4gIFdlIGNhbm5vdCBpcHV0IHRoZSBpbm9kZSBub3cgYXMgd2UgY2FuCisJCSAqIGJlIGhvbGRpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIGFuZCB3ZSBjYW5ub3QgaXB1dCBpdAorCQkgKiB1bmRlciBpbm9kZV9sb2NrLiBTbyB3ZSBrZWVwIHRoZSByZWZlcmVuY2UgYW5kIGlwdXQKKwkJICogaXQgbGF0ZXIuCiAJCSAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmc2ItPnNfaW5vZGVzLCBpX3NiX2xpc3QpIHsKLQkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwotCi0JCQlpZiAoaW5vZGUtPmlfc3RhdGUgJgotCQkJCQkoSV9GUkVFSU5HfElfQ0xFQVJ8SV9XSUxMX0ZSRUV8SV9ORVcpKQotCQkJCWNvbnRpbnVlOwotCQkJbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7Ci0JCQlpZiAobWFwcGluZy0+bnJwYWdlcyA9PSAwKQotCQkJCWNvbnRpbnVlOwotCQkJX19pZ2V0KGlub2RlKTsKLQkJCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKLQkJCS8qCi0JCQkgKiBXZSBob2xkIGEgcmVmZXJlbmNlIHRvICdpbm9kZScgc28gaXQgY291bGRuJ3QgaGF2ZQotCQkJICogYmVlbiByZW1vdmVkIGZyb20gc19pbm9kZXMgbGlzdCB3aGlsZSB3ZSBkcm9wcGVkIHRoZQotCQkJICogaW5vZGVfbG9jay4gIFdlIGNhbm5vdCBpcHV0IHRoZSBpbm9kZSBub3cgYXMgd2UgY2FuCi0JCQkgKiBiZSBob2xkaW5nIHRoZSBsYXN0IHJlZmVyZW5jZSBhbmQgd2UgY2Fubm90IGlwdXQgaXQKLQkJCSAqIHVuZGVyIGlub2RlX2xvY2suIFNvIHdlIGtlZXAgdGhlIHJlZmVyZW5jZSBhbmQgaXB1dAotCQkJICogaXQgbGF0ZXIuCi0JCQkgKi8KLQkJCWlwdXQob2xkX2lub2RlKTsKLQkJCW9sZF9pbm9kZSA9IGlub2RlOwotCi0JCQlmaWxlbWFwX2ZkYXRhd2FpdChtYXBwaW5nKTsKLQotCQkJY29uZF9yZXNjaGVkKCk7Ci0KLQkJCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCQlpcHV0KG9sZF9pbm9kZSk7Ci0JfSBlbHNlCi0JCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKKwkJb2xkX2lub2RlID0gaW5vZGU7CiAKLQlyZXR1cm47CQkvKiBMZWF2ZSBhbnkgdW53cml0dGVuIGlub2RlcyBvbiBzX2lvICovCi19Ci1FWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX3N5bmNfc2JfaW5vZGVzKTsKKwkJZmlsZW1hcF9mZGF0YXdhaXQobWFwcGluZyk7CiAKLXN0YXRpYyB2b2lkIHN5bmNfc2JfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCi17Ci0JZ2VuZXJpY19zeW5jX3NiX2lub2RlcyhzYiwgd2JjKTsKLX0KKwkJY29uZF9yZXNjaGVkKCk7CiAKLS8qCi0gKiBTdGFydCB3cml0ZWJhY2sgb2YgZGlydHkgcGFnZWNhY2hlIGRhdGEgYWdhaW5zdCBhbGwgdW5sb2NrZWQgaW5vZGVzLgotICoKLSAqIE5vdGU6Ci0gKiBXZSBkb24ndCBuZWVkIHRvIGdyYWIgYSByZWZlcmVuY2UgdG8gc3VwZXJibG9jayBoZXJlLiBJZiBpdCBoYXMgbm9uLWVtcHR5Ci0gKiAtPnNfZGlydHkgaXQncyBoYWRuJ3QgYmVlbiBraWxsZWQgeWV0IGFuZCBraWxsX3N1cGVyKCkgd29uJ3QgcHJvY2VlZAotICogcGFzdCBzeW5jX2lub2Rlc19zYigpIHVudGlsIHRoZSAtPnNfZGlydHkvc19pby9zX21vcmVfaW8gbGlzdHMgYXJlIGFsbAotICogZW1wdHkuIFNpbmNlIF9fc3luY19zaW5nbGVfaW5vZGUoKSByZWdhaW5zIGlub2RlX2xvY2sgYmVmb3JlIGl0IGZpbmFsbHkgbW92ZXMKLSAqIGlub2RlIGZyb20gc3VwZXJibG9jayBsaXN0cyB3ZSBhcmUgT0suCi0gKgotICogSWYgYG9sZGVyX3RoYW5fdGhpcycgaXMgbm9uLXplcm8gdGhlbiBvbmx5IGZsdXNoIGlub2RlcyB3aGljaCBoYXZlIGEKLSAqIGZsdXNodGltZSBvbGRlciB0aGFuICpvbGRlcl90aGFuX3RoaXMuCi0gKgotICogSWYgYGJkaScgaXMgbm9uLXplcm8gdGhlbiB3ZSB3aWxsIHNjYW4gdGhlIGZpcnN0IGlub2RlIGFnYWluc3QgZWFjaAotICogc3VwZXJibG9jayB1bnRpbCB3ZSBmaW5kIHRoZSBtYXRjaGluZyBvbmVzLiAgT25lIGdyb3VwIHdpbGwgYmUgdGhlIGRpcnR5Ci0gKiBpbm9kZXMgYWdhaW5zdCBhIGZpbGVzeXN0ZW0uICBUaGVuIHdoZW4gd2UgaGl0IHRoZSBkdW1teSBibG9ja2RldiBzdXBlcmJsb2NrLAotICogc3luY19zYl9pbm9kZXMgd2lsbCBzZWVrb3V0IHRoZSBibG9ja2RldiB3aGljaCBtYXRjaGVzIGBiZGknLiAgTWF5YmUgbm90Ci0gKiBzdXBlci1lZmZpY2llbnQgYnV0IHdlJ3JlIGFib3V0IHRvIGRvIGEgdG9uIG9mIEkvTy4uLgotICovCi12b2lkCi13cml0ZWJhY2tfaW5vZGVzKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0KLQltaWdodF9zbGVlcCgpOwotCXNwaW5fbG9jaygmc2JfbG9jayk7Ci1yZXN0YXJ0OgotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShzYiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7Ci0JCWlmIChzYl9oYXNfZGlydHlfaW5vZGVzKHNiKSkgewotCQkJLyogd2UncmUgbWFraW5nIG91ciBvd24gZ2V0X3N1cGVyIGhlcmUgKi8KLQkJCXNiLT5zX2NvdW50Kys7Ci0JCQlzcGluX3VubG9jaygmc2JfbG9jayk7Ci0JCQkvKgotCQkJICogSWYgd2UgY2FuJ3QgZ2V0IHRoZSByZWFkbG9jaywgdGhlcmUncyBubyBzZW5zZSBpbgotCQkJICogd2FpdGluZyBhcm91bmQsIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIEZTIGlzIGdvaW5nIHRvCi0JCQkgKiBiZSB1bm1vdW50ZWQgYnkgdGhlIHRpbWUgaXQgaXMgcmVsZWFzZWQuCi0JCQkgKi8KLQkJCWlmIChkb3duX3JlYWRfdHJ5bG9jaygmc2ItPnNfdW1vdW50KSkgewotCQkJCWlmIChzYi0+c19yb290KQotCQkJCQlzeW5jX3NiX2lub2RlcyhzYiwgd2JjKTsKLQkJCQl1cF9yZWFkKCZzYi0+c191bW91bnQpOwotCQkJfQotCQkJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKLQkJCWlmIChfX3B1dF9zdXBlcl9hbmRfbmVlZF9yZXN0YXJ0KHNiKSkKLQkJCQlnb3RvIHJlc3RhcnQ7Ci0JCX0KLQkJaWYgKHdiYy0+bnJfdG9fd3JpdGUgPD0gMCkKLQkJCWJyZWFrOworCQlzcGluX2xvY2soJmlub2RlX2xvY2spOwogCX0KLQlzcGluX3VubG9jaygmc2JfbG9jayk7CisJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOworCWlwdXQob2xkX2lub2RlKTsKIH0KIAotLyoKLSAqIHdyaXRlYmFjayBhbmQgd2FpdCB1cG9uIHRoZSBmaWxlc3lzdGVtJ3MgZGlydHkgaW5vZGVzLiAgVGhlIGNhbGxlciB3aWxsCi0gKiBkbyB0aGlzIGluIHR3byBwYXNzZXMgLSBvbmUgdG8gd3JpdGUsIGFuZCBvbmUgdG8gd2FpdC4KKy8qKgorICogd3JpdGViYWNrX2lub2Rlc19zYgktCXdyaXRlYmFjayBkaXJ0eSBpbm9kZXMgZnJvbSBnaXZlbiBzdXBlcl9ibG9jaworICogQHNiOiB0aGUgc3VwZXJibG9jawogICoKLSAqIEEgZmluaXRlIGxpbWl0IGlzIHNldCBvbiB0aGUgbnVtYmVyIG9mIHBhZ2VzIHdoaWNoIHdpbGwgYmUgd3JpdHRlbi4KLSAqIFRvIHByZXZlbnQgaW5maW5pdGUgbGl2ZWxvY2sgb2Ygc3lzX3N5bmMoKS4KLSAqCi0gKiBXZSBhZGQgaW4gdGhlIG51bWJlciBvZiBwb3RlbnRpYWxseSBkaXJ0eSBpbm9kZXMsIGJlY2F1c2UgZWFjaCBpbm9kZSB3cml0ZQotICogY2FuIGRpcnR5IHBhZ2VjYWNoZSBpbiB0aGUgdW5kZXJseWluZyBibG9ja2Rldi4KKyAqIFN0YXJ0IHdyaXRlYmFjayBvbiBzb21lIGlub2RlcyBvbiB0aGlzIHN1cGVyX2Jsb2NrLiBObyBndWFyYW50ZWVzIGFyZSBtYWRlCisgKiBvbiBob3cgbWFueSAoaWYgYW55KSB3aWxsIGJlIHdyaXR0ZW4sIGFuZCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHdhaXQKKyAqIGZvciBJTyBjb21wbGV0aW9uIG9mIHN1Ym1pdHRlZCBJTy4gVGhlIG51bWJlciBvZiBwYWdlcyBzdWJtaXR0ZWQgaXMKKyAqIHJldHVybmVkLgogICovCi12b2lkIHN5bmNfaW5vZGVzX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KQordm9pZCB3cml0ZWJhY2tfaW5vZGVzX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKLQkJLnN5bmNfbW9kZQk9IHdhaXQgPyBXQl9TWU5DX0FMTCA6IFdCX1NZTkNfTk9ORSwKLQkJLnJhbmdlX3N0YXJ0CT0gMCwKLQkJLnJhbmdlX2VuZAk9IExMT05HX01BWCwKLQl9OworCXVuc2lnbmVkIGxvbmcgbnJfZGlydHkgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKTsKKwl1bnNpZ25lZCBsb25nIG5yX3Vuc3RhYmxlID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKTsKKwlsb25nIG5yX3RvX3dyaXRlOwogCi0JaWYgKCF3YWl0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgbnJfZGlydHkgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKTsKLQkJdW5zaWduZWQgbG9uZyBucl91bnN0YWJsZSA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUyk7Ci0KLQkJd2JjLm5yX3RvX3dyaXRlID0gbnJfZGlydHkgKyBucl91bnN0YWJsZSArCisJbnJfdG9fd3JpdGUgPSBucl9kaXJ0eSArIG5yX3Vuc3RhYmxlICsKIAkJCShpbm9kZXNfc3RhdC5ucl9pbm9kZXMgLSBpbm9kZXNfc3RhdC5ucl91bnVzZWQpOwotCX0gZWxzZQotCQl3YmMubnJfdG9fd3JpdGUgPSBMT05HX01BWDsgLyogZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIgKi8KIAotCXN5bmNfc2JfaW5vZGVzKHNiLCAmd2JjKTsKKwliZGlfd3JpdGViYWNrX2FsbChzYiwgbnJfdG9fd3JpdGUpOwogfQorRVhQT1JUX1NZTUJPTCh3cml0ZWJhY2tfaW5vZGVzX3NiKTsKKworLyoqCisgKiBzeW5jX2lub2Rlc19zYgktCXN5bmMgc2IgaW5vZGUgcGFnZXMKKyAqIEBzYjogdGhlIHN1cGVyYmxvY2sKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBhbmQgd2FpdHMgb24gYW55IGRpcnR5IGlub2RlIGJlbG9uZ2luZyB0byB0aGlzCisgKiBzdXBlcl9ibG9jay4gVGhlIG51bWJlciBvZiBwYWdlcyBzeW5jZWQgaXMgcmV0dXJuZWQuCisgKi8KK3ZvaWQgc3luY19pbm9kZXNfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwliZGlfc3luY193cml0ZWJhY2soc2ItPnNfYmRpLCBzYik7CisJd2FpdF9zYl9pbm9kZXMoc2IpOworfQorRVhQT1JUX1NZTUJPTChzeW5jX2lub2Rlc19zYik7CiAKIC8qKgogICogd3JpdGVfaW5vZGVfbm93CS0Jd3JpdGUgYW4gaW5vZGUgdG8gZGlzawpAQCAtNzM3LDU3ICsxMjEzLDMgQEAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChzeW5jX2lub2RlKTsKLQotLyoqCi0gKiBnZW5lcmljX29zeW5jX2lub2RlIC0gZmx1c2ggYWxsIGRpcnR5IGRhdGEgZm9yIGEgZ2l2ZW4gaW5vZGUgdG8gZGlzawotICogQGlub2RlOiBpbm9kZSB0byB3cml0ZQotICogQG1hcHBpbmc6IHRoZSBhZGRyZXNzX3NwYWNlIHRoYXQgc2hvdWxkIGJlIGZsdXNoZWQKLSAqIEB3aGF0OiAgd2hhdCB0byB3cml0ZSBhbmQgd2FpdCB1cG9uCi0gKgotICogVGhpcyBjYW4gYmUgY2FsbGVkIGJ5IGZpbGVfd3JpdGUgZnVuY3Rpb25zIGZvciBmaWxlcyB3aGljaCBoYXZlIHRoZQotICogT19TWU5DIGZsYWcgc2V0LCB0byBmbHVzaCBkaXJ0eSB3cml0ZXMgdG8gZGlzay4KLSAqCi0gKiBAd2hhdCBpcyBhIGJpdG1hc2ssIHNwZWNpZnlpbmcgd2hpY2ggcGFydCBvZiB0aGUgaW5vZGUncyBkYXRhIHNob3VsZCBiZQotICogd3JpdHRlbiBhbmQgd2FpdGVkIHVwb24uCi0gKgotICogICAgT1NZTkNfREFUQTogICAgIGlfbWFwcGluZydzIGRpcnR5IGRhdGEKLSAqICAgIE9TWU5DX01FVEFEQVRBOiB0aGUgYnVmZmVycyBhdCBpX21hcHBpbmctPnByaXZhdGVfbGlzdAotICogICAgT1NZTkNfSU5PREU6ICAgIHRoZSBpbm9kZSBpdHNlbGYKLSAqLwotCi1pbnQgZ2VuZXJpY19vc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgaW50IHdoYXQpCi17Ci0JaW50IGVyciA9IDA7Ci0JaW50IG5lZWRfd3JpdGVfaW5vZGVfbm93ID0gMDsKLQlpbnQgZXJyMjsKLQotCWlmICh3aGF0ICYgT1NZTkNfREFUQSkKLQkJZXJyID0gZmlsZW1hcF9mZGF0YXdyaXRlKG1hcHBpbmcpOwotCWlmICh3aGF0ICYgKE9TWU5DX01FVEFEQVRBfE9TWU5DX0RBVEEpKSB7Ci0JCWVycjIgPSBzeW5jX21hcHBpbmdfYnVmZmVycyhtYXBwaW5nKTsKLQkJaWYgKCFlcnIpCi0JCQllcnIgPSBlcnIyOwotCX0KLQlpZiAod2hhdCAmIE9TWU5DX0RBVEEpIHsKLQkJZXJyMiA9IGZpbGVtYXBfZmRhdGF3YWl0KG1hcHBpbmcpOwotCQlpZiAoIWVycikKLQkJCWVyciA9IGVycjI7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKLQlpZiAoKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSkgJiYKLQkgICAgKCh3aGF0ICYgT1NZTkNfSU5PREUpIHx8IChpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFlfREFUQVNZTkMpKSkKLQkJbmVlZF93cml0ZV9pbm9kZV9ub3cgPSAxOwotCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKLQotCWlmIChuZWVkX3dyaXRlX2lub2RlX25vdykgewotCQllcnIyID0gd3JpdGVfaW5vZGVfbm93KGlub2RlLCAxKTsKLQkJaWYgKCFlcnIpCi0JCQllcnIgPSBlcnIyOwotCX0KLQllbHNlCi0JCWlub2RlX3N5bmNfd2FpdChpbm9kZSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTChnZW5lcmljX29zeW5jX2lub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCBmOTFjY2M0Li5lNWRiZWNkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC04MDEsNiArODAxLDcgQEAKIHsKIAlpbnQgZXJyOwogCisJZmMtPmJkaS5uYW1lID0gImZ1c2UiOwogCWZjLT5iZGkucmFfcGFnZXMgPSAoVk1fTUFYX1JFQURBSEVBRCAqIDEwMjQpIC8gUEFHRV9DQUNIRV9TSVpFOwogCWZjLT5iZGkudW5wbHVnX2lvX2ZuID0gZGVmYXVsdF91bnBsdWdfaW9fZm47CiAJLyogZnVzZSBkb2VzIGl0J3Mgb3duIHdyaXRlYmFjayBhY2NvdW50aW5nICovCkBAIC04OTMsNiArODk0LDggQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9wdXRfY29ubjsKIAorCXNiLT5zX2JkaSA9ICZmYy0+YmRpOworCiAJLyogSGFuZGxlIHVtYXNraW5nIGluc2lkZSB0aGUgZnVzZSBjb2RlICovCiAJaWYgKHNiLT5zX2ZsYWdzICYgTVNfUE9TSVhBQ0wpCiAJCWZjLT5kb250X21hc2sgPSAxOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9NYWtlZmlsZSBiL2ZzL2dmczIvTWFrZWZpbGUKaW5kZXggM2RhMmYxZi4uMjFmN2U0NiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9NYWtlZmlsZQorKysgYi9mcy9nZnMyL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogRVhUUkFfQ0ZMQUdTIDo9IC1JJChzcmMpCiBvYmotJChDT05GSUdfR0ZTMl9GUykgKz0gZ2ZzMi5vCi1nZnMyLXkgOj0gYWNsLm8gYm1hcC5vIGRpci5vIGVhb3BzLm8gZWF0dHIubyBnbG9jay5vIFwKK2dmczIteSA6PSBhY2wubyBibWFwLm8gZGlyLm8geGF0dHIubyBnbG9jay5vIFwKIAlnbG9wcy5vIGlub2RlLm8gbG9nLm8gbG9wcy5vIG1haW4ubyBtZXRhX2lvLm8gXAogCWFvcHMubyBkZW50cnkubyBleHBvcnQubyBmaWxlLm8gXAogCW9wc19mc3R5cGUubyBvcHNfaW5vZGUubyBxdW90YS5vIFwKZGlmZiAtLWdpdCBhL2ZzL2dmczIvYWNsLmMgYi9mcy9nZnMyL2FjbC5jCmluZGV4IGZhODgxYmQuLjNmYzRlM2EgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYWNsLmMKKysrIGIvZnMvZ2ZzMi9hY2wuYwpAQCAtMTksOCArMTksNyBAQAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKICNpbmNsdWRlICJhY2wuaCIKLSNpbmNsdWRlICJlYW9wcy5oIgotI2luY2x1ZGUgImVhdHRyLmgiCisjaW5jbHVkZSAieGF0dHIuaCIKICNpbmNsdWRlICJnbG9jay5oIgogI2luY2x1ZGUgImlub2RlLmgiCiAjaW5jbHVkZSAibWV0YV9pby5oIgpAQCAtMzEsOCArMzAsNyBAQAogI2RlZmluZSBBQ0xfREVGQVVMVCAwCiAKIGludCBnZnMyX2FjbF92YWxpZGF0ZV9zZXQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBpbnQgYWNjZXNzLAotCQkgICAgICBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciwKLQkJICAgICAgaW50ICpyZW1vdmUsIG1vZGVfdCAqbW9kZSkKKwkJCSAgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIsIGludCAqcmVtb3ZlLCBtb2RlX3QgKm1vZGUpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwogCWludCBlcnJvcjsKQEAgLTgzLDMwICs4MSwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFjbF9nZXQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBpbnQgYWNjZXNzLCBzdHJ1Y3QgcG9zaXhfYWNsICoqYWNsLAotCQkgICBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwsIGNoYXIgKipkYXRhLCB1bnNpZ25lZCBpbnQgKmxlbikKK3N0YXRpYyBpbnQgYWNsX2dldChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgIHN0cnVjdCBwb3NpeF9hY2wgKiphY2wsIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCwKKwkJICAgY2hhciAqKmRhdGFwLCB1bnNpZ25lZCBpbnQgKmxlbnApCiB7Ci0Jc3RydWN0IGdmczJfZWFfcmVxdWVzdCBlcjsKLQlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiBlbF90aGlzOworCWNoYXIgKmRhdGE7CisJdW5zaWduZWQgaW50IGxlbjsKIAlpbnQgZXJyb3I7CiAKKwllbC0+ZWxfYmggPSBOVUxMOworCiAJaWYgKCFpcC0+aV9lYXR0cikKIAkJcmV0dXJuIDA7CiAKLQltZW1zZXQoJmVyLCAwLCBzaXplb2Yoc3RydWN0IGdmczJfZWFfcmVxdWVzdCkpOwotCWlmIChhY2Nlc3MpIHsKLQkJZXIuZXJfbmFtZSA9IEdGUzJfUE9TSVhfQUNMX0FDQ0VTUzsKLQkJZXIuZXJfbmFtZV9sZW4gPSBHRlMyX1BPU0lYX0FDTF9BQ0NFU1NfTEVOOwotCX0gZWxzZSB7Ci0JCWVyLmVyX25hbWUgPSBHRlMyX1BPU0lYX0FDTF9ERUZBVUxUOwotCQllci5lcl9uYW1lX2xlbiA9IEdGUzJfUE9TSVhfQUNMX0RFRkFVTFRfTEVOOwotCX0KLQllci5lcl90eXBlID0gR0ZTMl9FQVRZUEVfU1lTOwotCi0JaWYgKCFlbCkKLQkJZWwgPSAmZWxfdGhpczsKLQotCWVycm9yID0gZ2ZzMl9lYV9maW5kKGlwLCAmZXIsIGVsKTsKKwllcnJvciA9IGdmczJfZWFfZmluZChpcCwgR0ZTMl9FQVRZUEVfU1lTLCBuYW1lLCBlbCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJaWYgKCFlbC0+ZWxfZWEpCkBAIC0xMTQsMzIgKzEwMiwzMSBAQAogCWlmICghR0ZTMl9FQV9EQVRBX0xFTihlbC0+ZWxfZWEpKQogCQlnb3RvIG91dDsKIAotCWVyLmVyX2RhdGFfbGVuID0gR0ZTMl9FQV9EQVRBX0xFTihlbC0+ZWxfZWEpOwotCWVyLmVyX2RhdGEgPSBrbWFsbG9jKGVyLmVyX2RhdGFfbGVuLCBHRlBfTk9GUyk7CisJbGVuID0gR0ZTMl9FQV9EQVRBX0xFTihlbC0+ZWxfZWEpOworCWRhdGEgPSBrbWFsbG9jKGxlbiwgR0ZQX05PRlMpOwogCWVycm9yID0gLUVOT01FTTsKLQlpZiAoIWVyLmVyX2RhdGEpCisJaWYgKCFkYXRhKQogCQlnb3RvIG91dDsKIAotCWVycm9yID0gZ2ZzMl9lYV9nZXRfY29weShpcCwgZWwsIGVyLmVyX2RhdGEpOwotCWlmIChlcnJvcikKKwllcnJvciA9IGdmczJfZWFfZ2V0X2NvcHkoaXAsIGVsLCBkYXRhLCBsZW4pOworCWlmIChlcnJvciA8IDApCiAJCWdvdG8gb3V0X2tmcmVlOworCWVycm9yID0gMDsKIAogCWlmIChhY2wpIHsKLQkJKmFjbCA9IHBvc2l4X2FjbF9mcm9tX3hhdHRyKGVyLmVyX2RhdGEsIGVyLmVyX2RhdGFfbGVuKTsKKwkJKmFjbCA9IHBvc2l4X2FjbF9mcm9tX3hhdHRyKGRhdGEsIGxlbik7CiAJCWlmIChJU19FUlIoKmFjbCkpCiAJCQllcnJvciA9IFBUUl9FUlIoKmFjbCk7CiAJfQogCiBvdXRfa2ZyZWU6Ci0JaWYgKGVycm9yIHx8ICFkYXRhKQotCQlrZnJlZShlci5lcl9kYXRhKTsKLQllbHNlIHsKLQkJKmRhdGEgPSBlci5lcl9kYXRhOwotCQkqbGVuID0gZXIuZXJfZGF0YV9sZW47CisJaWYgKGVycm9yIHx8ICFkYXRhcCkgeworCQlrZnJlZShkYXRhKTsKKwl9IGVsc2UgeworCQkqZGF0YXAgPSBkYXRhOworCQkqbGVucCA9IGxlbjsKIAl9CiBvdXQ6Ci0JaWYgKGVycm9yIHx8IGVsID09ICZlbF90aGlzKQotCQlicmVsc2UoZWwtPmVsX2JoKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTE1MywxMCArMTQwLDEyIEBACiAKIGludCBnZnMyX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKKwlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiBlbDsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMOwogCWludCBlcnJvcjsKIAotCWVycm9yID0gYWNsX2dldChHRlMyX0koaW5vZGUpLCBBQ0xfQUNDRVNTLCAmYWNsLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwllcnJvciA9IGFjbF9nZXQoR0ZTMl9JKGlub2RlKSwgR0ZTMl9QT1NJWF9BQ0xfQUNDRVNTLCAmYWNsLCAmZWwsIE5VTEwsIE5VTEwpOworCWJyZWxzZShlbC5lbF9iaCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTE5NiwxMCArMTg1LDEyIEBACiAKIGludCBnZnMyX2FjbF9jcmVhdGUoc3RydWN0IGdmczJfaW5vZGUgKmRpcCwgc3RydWN0IGdmczJfaW5vZGUgKmlwKQogeworCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsOwogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmZGlwLT5pX2lub2RlKTsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMLCAqY2xvbmU7Ci0Jc3RydWN0IGdmczJfZWFfcmVxdWVzdCBlcjsKIAltb2RlX3QgbW9kZSA9IGlwLT5pX2lub2RlLmlfbW9kZTsKKwljaGFyICpkYXRhID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbGVuOwogCWludCBlcnJvcjsKIAogCWlmICghc2RwLT5zZF9hcmdzLmFyX3Bvc2l4X2FjbCkKQEAgLTIwNywxMSArMTk4LDggQEAKIAlpZiAoU19JU0xOSyhpcC0+aV9pbm9kZS5pX21vZGUpKQogCQlyZXR1cm4gMDsKIAotCW1lbXNldCgmZXIsIDAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0KSk7Ci0JZXIuZXJfdHlwZSA9IEdGUzJfRUFUWVBFX1NZUzsKLQotCWVycm9yID0gYWNsX2dldChkaXAsIEFDTF9ERUZBVUxULCAmYWNsLCBOVUxMLAotCQkJJmVyLmVyX2RhdGEsICZlci5lcl9kYXRhX2xlbik7CisJZXJyb3IgPSBhY2xfZ2V0KGRpcCwgR0ZTMl9QT1NJWF9BQ0xfREVGQVVMVCwgJmFjbCwgJmVsLCAmZGF0YSwgJmxlbik7CisJYnJlbHNlKGVsLmVsX2JoKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAlpZiAoIWFjbCkgewpAQCAtMjI5LDkgKzIxNyw4IEBACiAJYWNsID0gY2xvbmU7CiAKIAlpZiAoU19JU0RJUihpcC0+aV9pbm9kZS5pX21vZGUpKSB7Ci0JCWVyLmVyX25hbWUgPSBHRlMyX1BPU0lYX0FDTF9ERUZBVUxUOwotCQllci5lcl9uYW1lX2xlbiA9IEdGUzJfUE9TSVhfQUNMX0RFRkFVTFRfTEVOOwotCQllcnJvciA9IGdmczJfc3lzdGVtX2Vhb3BzLmVvX3NldChpcCwgJmVyKTsKKwkJZXJyb3IgPSBnZnMyX3hhdHRyX3NldCgmaXAtPmlfaW5vZGUsIEdGUzJfRUFUWVBFX1NZUywKKwkJCQkgICAgICAgR0ZTMl9QT1NJWF9BQ0xfREVGQVVMVCwgZGF0YSwgbGVuLCAwKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtMjM5LDIxICsyMjYsMTkgQEAKIAllcnJvciA9IHBvc2l4X2FjbF9jcmVhdGVfbWFzcShhY2wsICZtb2RlKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIG91dDsKLQlpZiAoZXJyb3IgPiAwKSB7Ci0JCWVyLmVyX25hbWUgPSBHRlMyX1BPU0lYX0FDTF9BQ0NFU1M7Ci0JCWVyLmVyX25hbWVfbGVuID0gR0ZTMl9QT1NJWF9BQ0xfQUNDRVNTX0xFTjsKLQkJcG9zaXhfYWNsX3RvX3hhdHRyKGFjbCwgZXIuZXJfZGF0YSwgZXIuZXJfZGF0YV9sZW4pOwotCQllci5lcl9tb2RlID0gbW9kZTsKLQkJZXIuZXJfZmxhZ3MgPSBHRlMyX0VSRl9NT0RFOwotCQllcnJvciA9IGdmczJfc3lzdGVtX2Vhb3BzLmVvX3NldChpcCwgJmVyKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlCi0JCW11bmdlX21vZGUoaXAsIG1vZGUpOworCWlmIChlcnJvciA9PSAwKQorCQlnb3RvIG11bmdlOwogCisJcG9zaXhfYWNsX3RvX3hhdHRyKGFjbCwgZGF0YSwgbGVuKTsKKwllcnJvciA9IGdmczJfeGF0dHJfc2V0KCZpcC0+aV9pbm9kZSwgR0ZTMl9FQVRZUEVfU1lTLAorCQkJICAgICAgIEdGUzJfUE9TSVhfQUNMX0FDQ0VTUywgZGF0YSwgbGVuLCAwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworbXVuZ2U6CisJZXJyb3IgPSBtdW5nZV9tb2RlKGlwLCBtb2RlKTsKIG91dDoKIAlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwotCWtmcmVlKGVyLmVyX2RhdGEpOworCWtmcmVlKGRhdGEpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMjY1LDkgKzI1MCw5IEBACiAJdW5zaWduZWQgaW50IGxlbjsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IGFjbF9nZXQoaXAsIEFDTF9BQ0NFU1MsICZhY2wsICZlbCwgJmRhdGEsICZsZW4pOworCWVycm9yID0gYWNsX2dldChpcCwgR0ZTMl9QT1NJWF9BQ0xfQUNDRVNTLCAmYWNsLCAmZWwsICZkYXRhLCAmbGVuKTsKIAlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwkJZ290byBvdXRfYnJlbHNlOwogCWlmICghYWNsKQogCQlyZXR1cm4gZ2ZzMl9zZXRhdHRyX3NpbXBsZShpcCwgYXR0cik7CiAKQEAgLTI4Niw4ICsyNzEsOSBAQAogCiBvdXQ6CiAJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKLQlicmVsc2UoZWwuZWxfYmgpOwogCWtmcmVlKGRhdGEpOworb3V0X2JyZWxzZToKKwlicmVsc2UoZWwuZWxfYmgpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9kZW50cnkuYyBiL2ZzL2dmczIvZGVudHJ5LmMKaW5kZXggMDIyYzY2Yy4uOTFiZWRkYSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9kZW50cnkuYworKysgYi9mcy9nZnMyL2RlbnRyeS5jCkBAIC0xMDcsOCArMTA3LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZ2ZzMl9kZW50cnlfZGVsZXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZ2lub2RlOworCisJaWYgKCFkZW50cnktPmRfaW5vZGUpCisJCXJldHVybiAwOworCisJZ2lub2RlID0gR0ZTMl9JKGRlbnRyeS0+ZF9pbm9kZSk7CisJaWYgKCFnaW5vZGUtPmlfaW9wZW5fZ2guZ2hfZ2wpCisJCXJldHVybiAwOworCisJaWYgKHRlc3RfYml0KEdMRl9ERU1PVEUsICZnaW5vZGUtPmlfaW9wZW5fZ2guZ2hfZ2wtPmdsX2ZsYWdzKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGdmczJfZG9wcyA9IHsKIAkuZF9yZXZhbGlkYXRlID0gZ2ZzMl9kcmV2YWxpZGF0ZSwKIAkuZF9oYXNoID0gZ2ZzMl9kaGFzaCwKKwkuZF9kZWxldGUgPSBnZnMyX2RlbnRyeV9kZWxldGUsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2Vhb3BzLmMgYi9mcy9nZnMyL2Vhb3BzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZTliMDMuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9lYW9wcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgveGF0dHIuaD4KLSNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlICJnZnMyLmgiCi0jaW5jbHVkZSAiaW5jb3JlLmgiCi0jaW5jbHVkZSAiYWNsLmgiCi0jaW5jbHVkZSAiZWFvcHMuaCIKLSNpbmNsdWRlICJlYXR0ci5oIgotI2luY2x1ZGUgInV0aWwuaCIKLQotLyoqCi0gKiBnZnMyX2VhX25hbWUydHlwZSAtIGdldCB0aGUgdHlwZSBvZiB0aGUgZWEsIGFuZCB0cnVuY2F0ZSB0eXBlIGZyb20gdGhlIG5hbWUKLSAqIEBuYW1lcDogZWEgbmFtZSwgcG9zc2libHkgd2l0aCB0eXBlIGFwcGVuZGVkCi0gKgotICogUmV0dXJuczogR0ZTMl9FQVRZUEVfWFhYCi0gKi8KLQotdW5zaWduZWQgaW50IGdmczJfZWFfbmFtZTJ0eXBlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKip0cnVuY2F0ZWRfbmFtZSkKLXsKLQl1bnNpZ25lZCBpbnQgdHlwZTsKLQotCWlmIChzdHJuY21wKG5hbWUsICJzeXN0ZW0uIiwgNykgPT0gMCkgewotCQl0eXBlID0gR0ZTMl9FQVRZUEVfU1lTOwotCQlpZiAodHJ1bmNhdGVkX25hbWUpCi0JCQkqdHJ1bmNhdGVkX25hbWUgPSBuYW1lICsgc2l6ZW9mKCJzeXN0ZW0uIikgLSAxOwotCX0gZWxzZSBpZiAoc3RybmNtcChuYW1lLCAidXNlci4iLCA1KSA9PSAwKSB7Ci0JCXR5cGUgPSBHRlMyX0VBVFlQRV9VU1I7Ci0JCWlmICh0cnVuY2F0ZWRfbmFtZSkKLQkJCSp0cnVuY2F0ZWRfbmFtZSA9IG5hbWUgKyBzaXplb2YoInVzZXIuIikgLSAxOwotCX0gZWxzZSBpZiAoc3RybmNtcChuYW1lLCAic2VjdXJpdHkuIiwgOSkgPT0gMCkgewotCQl0eXBlID0gR0ZTMl9FQVRZUEVfU0VDVVJJVFk7Ci0JCWlmICh0cnVuY2F0ZWRfbmFtZSkKLQkJCSp0cnVuY2F0ZWRfbmFtZSA9IG5hbWUgKyBzaXplb2YoInNlY3VyaXR5LiIpIC0gMTsKLQl9IGVsc2UgewotCQl0eXBlID0gR0ZTMl9FQVRZUEVfVU5VU0VEOwotCQlpZiAodHJ1bmNhdGVkX25hbWUpCi0JCQkqdHJ1bmNhdGVkX25hbWUgPSBOVUxMOwotCX0KLQotCXJldHVybiB0eXBlOwotfQotCi1zdGF0aWMgaW50IHN5c3RlbV9lb19nZXQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcikKLXsKLQlpZiAoIUdGUzJfQUNMX0lTX0FDQ0VTUyhlci0+ZXJfbmFtZSwgZXItPmVyX25hbWVfbGVuKSAmJgotCSAgICAhR0ZTMl9BQ0xfSVNfREVGQVVMVChlci0+ZXJfbmFtZSwgZXItPmVyX25hbWVfbGVuKSAmJgotCSAgICAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChHRlMyX1NCKCZpcC0+aV9pbm9kZSktPnNkX2FyZ3MuYXJfcG9zaXhfYWNsID09IDAgJiYKLQkgICAgKEdGUzJfQUNMX0lTX0FDQ0VTUyhlci0+ZXJfbmFtZSwgZXItPmVyX25hbWVfbGVuKSB8fAotCSAgICAgR0ZTMl9BQ0xfSVNfREVGQVVMVChlci0+ZXJfbmFtZSwgZXItPmVyX25hbWVfbGVuKSkpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXJldHVybiBnZnMyX2VhX2dldF9pKGlwLCBlcik7Ci19Ci0KLXN0YXRpYyBpbnQgc3lzdGVtX2VvX3NldChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKQotewotCWludCByZW1vdmUgPSAwOwotCWludCBlcnJvcjsKLQotCWlmIChHRlMyX0FDTF9JU19BQ0NFU1MoZXItPmVyX25hbWUsIGVyLT5lcl9uYW1lX2xlbikpIHsKLQkJaWYgKCEoZXItPmVyX2ZsYWdzICYgR0ZTMl9FUkZfTU9ERSkpIHsKLQkJCWVyLT5lcl9tb2RlID0gaXAtPmlfaW5vZGUuaV9tb2RlOwotCQkJZXItPmVyX2ZsYWdzIHw9IEdGUzJfRVJGX01PREU7Ci0JCX0KLQkJZXJyb3IgPSBnZnMyX2FjbF92YWxpZGF0ZV9zZXQoaXAsIDEsIGVyLAotCQkJCQkgICAgICAmcmVtb3ZlLCAmZXItPmVyX21vZGUpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JCWVycm9yID0gZ2ZzMl9lYV9zZXRfaShpcCwgZXIpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JCWlmIChyZW1vdmUpCi0JCQlnZnMyX2VhX3JlbW92ZV9pKGlwLCBlcik7Ci0JCXJldHVybiAwOwotCi0JfSBlbHNlIGlmIChHRlMyX0FDTF9JU19ERUZBVUxUKGVyLT5lcl9uYW1lLCBlci0+ZXJfbmFtZV9sZW4pKSB7Ci0JCWVycm9yID0gZ2ZzMl9hY2xfdmFsaWRhdGVfc2V0KGlwLCAwLCBlciwKLQkJCQkJICAgICAgJnJlbW92ZSwgTlVMTCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQkJaWYgKCFyZW1vdmUpCi0JCQllcnJvciA9IGdmczJfZWFfc2V0X2koaXAsIGVyKTsKLQkJZWxzZSB7Ci0JCQllcnJvciA9IGdmczJfZWFfcmVtb3ZlX2koaXAsIGVyKTsKLQkJCWlmIChlcnJvciA9PSAtRU5PREFUQSkKLQkJCQllcnJvciA9IDA7Ci0JCX0KLQkJcmV0dXJuIGVycm9yOwotCX0KLQotCXJldHVybiAtRVBFUk07Ci19Ci0KLXN0YXRpYyBpbnQgc3lzdGVtX2VvX3JlbW92ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKQotewotCWlmIChHRlMyX0FDTF9JU19BQ0NFU1MoZXItPmVyX25hbWUsIGVyLT5lcl9uYW1lX2xlbikpIHsKLQkJaW50IGVycm9yID0gZ2ZzMl9hY2xfdmFsaWRhdGVfcmVtb3ZlKGlwLCAxKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCi0JfSBlbHNlIGlmIChHRlMyX0FDTF9JU19ERUZBVUxUKGVyLT5lcl9uYW1lLCBlci0+ZXJfbmFtZV9sZW4pKSB7Ci0JCWludCBlcnJvciA9IGdmczJfYWNsX3ZhbGlkYXRlX3JlbW92ZShpcCwgMCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQotCX0gZWxzZQotCQlyZXR1cm4gLUVQRVJNOwotCi0JcmV0dXJuIGdmczJfZWFfcmVtb3ZlX2koaXAsIGVyKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBnZnMyX2VhdHRyX29wZXJhdGlvbnMgZ2ZzMl91c2VyX2Vhb3BzID0gewotCS5lb19nZXQgPSBnZnMyX2VhX2dldF9pLAotCS5lb19zZXQgPSBnZnMyX2VhX3NldF9pLAotCS5lb19yZW1vdmUgPSBnZnMyX2VhX3JlbW92ZV9pLAotCS5lb19uYW1lID0gInVzZXIiLAotfTsKLQotY29uc3Qgc3RydWN0IGdmczJfZWF0dHJfb3BlcmF0aW9ucyBnZnMyX3N5c3RlbV9lYW9wcyA9IHsKLQkuZW9fZ2V0ID0gc3lzdGVtX2VvX2dldCwKLQkuZW9fc2V0ID0gc3lzdGVtX2VvX3NldCwKLQkuZW9fcmVtb3ZlID0gc3lzdGVtX2VvX3JlbW92ZSwKLQkuZW9fbmFtZSA9ICJzeXN0ZW0iLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBnZnMyX2VhdHRyX29wZXJhdGlvbnMgZ2ZzMl9zZWN1cml0eV9lYW9wcyA9IHsKLQkuZW9fZ2V0ID0gZ2ZzMl9lYV9nZXRfaSwKLQkuZW9fc2V0ID0gZ2ZzMl9lYV9zZXRfaSwKLQkuZW9fcmVtb3ZlID0gZ2ZzMl9lYV9yZW1vdmVfaSwKLQkuZW9fbmFtZSA9ICJzZWN1cml0eSIsCi19OwotCi1jb25zdCBzdHJ1Y3QgZ2ZzMl9lYXR0cl9vcGVyYXRpb25zICpnZnMyX2VhX29wc1tdID0gewotCU5VTEwsCi0JJmdmczJfdXNlcl9lYW9wcywKLQkmZ2ZzMl9zeXN0ZW1fZWFvcHMsCi0JJmdmczJfc2VjdXJpdHlfZWFvcHMsCi19OwotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2Vhb3BzLmggYi9mcy9nZnMyL2Vhb3BzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMmY3ZmIuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9lYW9wcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2lmbmRlZiBfX0VBT1BTX0RPVF9IX18KLSNkZWZpbmUgX19FQU9QU19ET1RfSF9fCi0KLXN0cnVjdCBnZnMyX2VhX3JlcXVlc3Q7Ci1zdHJ1Y3QgZ2ZzMl9pbm9kZTsKLQotc3RydWN0IGdmczJfZWF0dHJfb3BlcmF0aW9ucyB7Ci0JaW50ICgqZW9fZ2V0KSAoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcik7Ci0JaW50ICgqZW9fc2V0KSAoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcik7Ci0JaW50ICgqZW9fcmVtb3ZlKSAoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcik7Ci0JY2hhciAqZW9fbmFtZTsKLX07Ci0KLXVuc2lnbmVkIGludCBnZnMyX2VhX25hbWUydHlwZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICoqdHJ1bmNhdGVkX25hbWUpOwotCi1leHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZWF0dHJfb3BlcmF0aW9ucyBnZnMyX3N5c3RlbV9lYW9wczsKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZnMyX2VhdHRyX29wZXJhdGlvbnMgKmdmczJfZWFfb3BzW107Ci0KLSNlbmRpZiAvKiBfX0VBT1BTX0RPVF9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9lYXR0ci5jIGIvZnMvZ2ZzMi9lYXR0ci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2VhOTUyLi4wMDAwMDAwCi0tLSBhL2ZzL2dmczIvZWF0dHIuYworKysgL2Rldi9udWxsCkBAIC0xLDE1MDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSAiZ2ZzMi5oIgotI2luY2x1ZGUgImluY29yZS5oIgotI2luY2x1ZGUgImFjbC5oIgotI2luY2x1ZGUgImVhb3BzLmgiCi0jaW5jbHVkZSAiZWF0dHIuaCIKLSNpbmNsdWRlICJnbG9jay5oIgotI2luY2x1ZGUgImlub2RlLmgiCi0jaW5jbHVkZSAibWV0YV9pby5oIgotI2luY2x1ZGUgInF1b3RhLmgiCi0jaW5jbHVkZSAicmdycC5oIgotI2luY2x1ZGUgInRyYW5zLmgiCi0jaW5jbHVkZSAidXRpbC5oIgotCi0vKioKLSAqIGVhX2NhbGNfc2l6ZSAtIHJldHVybnMgdGhlIGFjdXRhbCBudW1iZXIgb2YgYnl0ZXMgdGhlIHJlcXVlc3Qgd2lsbCB0YWtlIHVwCi0gKiAgICAgICAgICAgICAgICAobm90IGNvdW50aW5nIGFueSB1bnN0dWZmZWQgZGF0YSBibG9ja3MpCi0gKiBAc2RwOgotICogQGVyOgotICogQHNpemU6Ci0gKgotICogUmV0dXJuczogMSBpZiB0aGUgRUEgc2hvdWxkIGJlIHN0dWZmZWQKLSAqLwotCi1zdGF0aWMgaW50IGVhX2NhbGNfc2l6ZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIsCi0JCQl1bnNpZ25lZCBpbnQgKnNpemUpCi17Ci0JKnNpemUgPSBHRlMyX0VBUkVRX1NJWkVfU1RVRkZFRChlcik7Ci0JaWYgKCpzaXplIDw9IHNkcC0+c2RfamJzaXplKQotCQlyZXR1cm4gMTsKLQotCSpzaXplID0gR0ZTMl9FQVJFUV9TSVpFX1VOU1RVRkZFRChzZHAsIGVyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGVhX2NoZWNrX3NpemUoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKQotewotCXVuc2lnbmVkIGludCBzaXplOwotCi0JaWYgKGVyLT5lcl9kYXRhX2xlbiA+IEdGUzJfRUFfTUFYX0RBVEFfTEVOKQotCQlyZXR1cm4gLUVSQU5HRTsKLQotCWVhX2NhbGNfc2l6ZShzZHAsIGVyLCAmc2l6ZSk7Ci0KLQkvKiBUaGlzIGNhbiBvbmx5IGhhcHBlbiB3aXRoIDUxMiBieXRlIGJsb2NrcyAqLwotCWlmIChzaXplID4gc2RwLT5zZF9qYnNpemUpCi0JCXJldHVybiAtRVJBTkdFOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXR5cGVkZWYgaW50ICgqZWFfY2FsbF90KSAoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAotCQkJICBzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKmVhLAotCQkJICBzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKnByZXYsIHZvaWQgKnByaXZhdGUpOwotCi1zdGF0aWMgaW50IGVhX2ZvcmVhY2hfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCQllYV9jYWxsX3QgZWFfY2FsbCwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKmVhLCAqcHJldiA9IE5VTEw7Ci0JaW50IGVycm9yID0gMDsKLQotCWlmIChnZnMyX21ldGF0eXBlX2NoZWNrKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgYmgsIEdGUzJfTUVUQVRZUEVfRUEpKQotCQlyZXR1cm4gLUVJTzsKLQotCWZvciAoZWEgPSBHRlMyX0VBX0JIMkZJUlNUKGJoKTs7IHByZXYgPSBlYSwgZWEgPSBHRlMyX0VBMk5FWFQoZWEpKSB7Ci0JCWlmICghR0ZTMl9FQV9SRUNfTEVOKGVhKSkKLQkJCWdvdG8gZmFpbDsKLQkJaWYgKCEoYmgtPmJfZGF0YSA8PSAoY2hhciAqKWVhICYmIChjaGFyICopR0ZTMl9FQTJORVhUKGVhKSA8PQotCQkJCQkJICBiaC0+Yl9kYXRhICsgYmgtPmJfc2l6ZSkpCi0JCQlnb3RvIGZhaWw7Ci0JCWlmICghR0ZTMl9FQVRZUEVfVkFMSUQoZWEtPmVhX3R5cGUpKQotCQkJZ290byBmYWlsOwotCi0JCWVycm9yID0gZWFfY2FsbChpcCwgYmgsIGVhLCBwcmV2LCBkYXRhKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCi0JCWlmIChHRlMyX0VBX0lTX0xBU1QoZWEpKSB7Ci0JCQlpZiAoKGNoYXIgKilHRlMyX0VBMk5FWFQoZWEpICE9Ci0JCQkgICAgYmgtPmJfZGF0YSArIGJoLT5iX3NpemUpCi0JCQkJZ290byBmYWlsOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZXJyb3I7Ci0KLWZhaWw6Ci0JZ2ZzMl9jb25zaXN0X2lub2RlKGlwKTsKLQlyZXR1cm4gLUVJTzsKLX0KLQotc3RhdGljIGludCBlYV9mb3JlYWNoKHN0cnVjdCBnZnMyX2lub2RlICppcCwgZWFfY2FsbF90IGVhX2NhbGwsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKmVhYmg7Ci0JX19iZTY0ICplYWJsaywgKmVuZDsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfbWV0YV9yZWFkKGlwLT5pX2dsLCBpcC0+aV9lYXR0ciwgRElPX1dBSVQsICZiaCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlpZiAoIShpcC0+aV9kaXNrZmxhZ3MgJiBHRlMyX0RJRl9FQV9JTkRJUkVDVCkpIHsKLQkJZXJyb3IgPSBlYV9mb3JlYWNoX2koaXAsIGJoLCBlYV9jYWxsLCBkYXRhKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGdmczJfbWV0YXR5cGVfY2hlY2soR0ZTMl9TQigmaXAtPmlfaW5vZGUpLCBiaCwgR0ZTMl9NRVRBVFlQRV9JTikpIHsKLQkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllYWJsayA9IChfX2JlNjQgKikoYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlcikpOwotCWVuZCA9IGVhYmxrICsgR0ZTMl9TQigmaXAtPmlfaW5vZGUpLT5zZF9pbnB0cnM7Ci0KLQlmb3IgKDsgZWFibGsgPCBlbmQ7IGVhYmxrKyspIHsKLQkJdTY0IGJuOwotCi0JCWlmICghKmVhYmxrKQotCQkJYnJlYWs7Ci0JCWJuID0gYmU2NF90b19jcHUoKmVhYmxrKTsKLQotCQllcnJvciA9IGdmczJfbWV0YV9yZWFkKGlwLT5pX2dsLCBibiwgRElPX1dBSVQsICZlYWJoKTsKLQkJaWYgKGVycm9yKQotCQkJYnJlYWs7Ci0JCWVycm9yID0gZWFfZm9yZWFjaF9pKGlwLCBlYWJoLCBlYV9jYWxsLCBkYXRhKTsKLQkJYnJlbHNlKGVhYmgpOwotCQlpZiAoZXJyb3IpCi0JCQlicmVhazsKLQl9Ci1vdXQ6Ci0JYnJlbHNlKGJoKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0cnVjdCBlYV9maW5kIHsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplZl9lcjsKLQlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWZfZWw7Ci19OwotCi1zdGF0aWMgaW50IGVhX2ZpbmRfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCSAgICAgc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSwgc3RydWN0IGdmczJfZWFfaGVhZGVyICpwcmV2LAotCQkgICAgIHZvaWQgKnByaXZhdGUpCi17Ci0Jc3RydWN0IGVhX2ZpbmQgKmVmID0gcHJpdmF0ZTsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciA9IGVmLT5lZl9lcjsKLQotCWlmIChlYS0+ZWFfdHlwZSA9PSBHRlMyX0VBVFlQRV9VTlVTRUQpCi0JCXJldHVybiAwOwotCi0JaWYgKGVhLT5lYV90eXBlID09IGVyLT5lcl90eXBlKSB7Ci0JCWlmIChlYS0+ZWFfbmFtZV9sZW4gPT0gZXItPmVyX25hbWVfbGVuICYmCi0JCSAgICAhbWVtY21wKEdGUzJfRUEyTkFNRShlYSksIGVyLT5lcl9uYW1lLCBlYS0+ZWFfbmFtZV9sZW4pKSB7Ci0JCQlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwgPSBlZi0+ZWZfZWw7Ci0JCQlnZXRfYmgoYmgpOwotCQkJZWwtPmVsX2JoID0gYmg7Ci0JCQllbC0+ZWxfZWEgPSBlYTsKLQkJCWVsLT5lbF9wcmV2ID0gcHJldjsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBnZnMyX2VhX2ZpbmQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciwKLQkJIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCkKLXsKLQlzdHJ1Y3QgZWFfZmluZCBlZjsKLQlpbnQgZXJyb3I7Ci0KLQllZi5lZl9lciA9IGVyOwotCWVmLmVmX2VsID0gZWw7Ci0KLQltZW1zZXQoZWwsIDAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbikpOwotCi0JZXJyb3IgPSBlYV9mb3JlYWNoKGlwLCBlYV9maW5kX2ksICZlZik7Ci0JaWYgKGVycm9yID4gMCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qKgotICogZWFfZGVhbGxvY191bnN0dWZmZWQgLQotICogQGlwOgotICogQGJoOgotICogQGVhOgotICogQHByZXY6Ci0gKiBAcHJpdmF0ZToKLSAqCi0gKiBUYWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IGFsbCB1bnN0dWZmZWQgYmxvY2tzIGFyZQotICogYWxsb2NhdGVkIGZyb20gdGhlIHNhbWUgUkcuICBCdXQgd2F0Y2gsIHRoaXMgbWF5IG5vdCBhbHdheXMKLSAqIGJlIHRydWUuCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1zdGF0aWMgaW50IGVhX2RlYWxsb2NfdW5zdHVmZmVkKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCQlzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKmVhLAotCQkJCXN0cnVjdCBnZnMyX2VhX2hlYWRlciAqcHJldiwgdm9pZCAqcHJpdmF0ZSkKLXsKLQlpbnQgKmxlYXZlID0gcHJpdmF0ZTsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmlwLT5pX2lub2RlKTsKLQlzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkOwotCXN0cnVjdCBnZnMyX2hvbGRlciByZ19naDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7Ci0JX19iZTY0ICpkYXRhcHRyczsKLQl1NjQgYm4gPSAwOwotCXU2NCBic3RhcnQgPSAwOwotCXVuc2lnbmVkIGludCBibGVuID0gMDsKLQl1bnNpZ25lZCBpbnQgYmxrcyA9IDA7Ci0JdW5zaWduZWQgaW50IHg7Ci0JaW50IGVycm9yOwotCi0JaWYgKEdGUzJfRUFfSVNfU1RVRkZFRChlYSkpCi0JCXJldHVybiAwOwotCi0JZGF0YXB0cnMgPSBHRlMyX0VBMkRBVEFQVFJTKGVhKTsKLQlmb3IgKHggPSAwOyB4IDwgZWEtPmVhX251bV9wdHJzOyB4KyssIGRhdGFwdHJzKyspIHsKLQkJaWYgKCpkYXRhcHRycykgewotCQkJYmxrcysrOwotCQkJYm4gPSBiZTY0X3RvX2NwdSgqZGF0YXB0cnMpOwotCQl9Ci0JfQotCWlmICghYmxrcykKLQkJcmV0dXJuIDA7Ci0KLQlyZ2QgPSBnZnMyX2JsazJyZ3JwZChzZHAsIGJuKTsKLQlpZiAoIXJnZCkgewotCQlnZnMyX2NvbnNpc3RfaW5vZGUoaXApOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChyZ2QtPnJkX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZyZ19naCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCByZ2QtPnJkX2xlbmd0aCArIFJFU19ESU5PREUgKwotCQkJCSBSRVNfRUFUVFIgKyBSRVNfU1RBVEZTICsgUkVTX1FVT1RBLCBibGtzKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2d1bmxvY2s7Ci0KLQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgYmgsIDEpOwotCi0JZGF0YXB0cnMgPSBHRlMyX0VBMkRBVEFQVFJTKGVhKTsKLQlmb3IgKHggPSAwOyB4IDwgZWEtPmVhX251bV9wdHJzOyB4KyssIGRhdGFwdHJzKyspIHsKLQkJaWYgKCEqZGF0YXB0cnMpCi0JCQlicmVhazsKLQkJYm4gPSBiZTY0X3RvX2NwdSgqZGF0YXB0cnMpOwotCi0JCWlmIChic3RhcnQgKyBibGVuID09IGJuKQotCQkJYmxlbisrOwotCQllbHNlIHsKLQkJCWlmIChic3RhcnQpCi0JCQkJZ2ZzMl9mcmVlX21ldGEoaXAsIGJzdGFydCwgYmxlbik7Ci0JCQlic3RhcnQgPSBibjsKLQkJCWJsZW4gPSAxOwotCQl9Ci0KLQkJKmRhdGFwdHJzID0gMDsKLQkJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSwgLTEpOwotCX0KLQlpZiAoYnN0YXJ0KQotCQlnZnMyX2ZyZWVfbWV0YShpcCwgYnN0YXJ0LCBibGVuKTsKLQotCWlmIChwcmV2ICYmICFsZWF2ZSkgewotCQl1MzIgbGVuOwotCi0JCWxlbiA9IEdGUzJfRUFfUkVDX0xFTihwcmV2KSArIEdGUzJfRUFfUkVDX0xFTihlYSk7Ci0JCXByZXYtPmVhX3JlY19sZW4gPSBjcHVfdG9fYmUzMihsZW4pOwotCi0JCWlmIChHRlMyX0VBX0lTX0xBU1QoZWEpKQotCQkJcHJldi0+ZWFfZmxhZ3MgfD0gR0ZTMl9FQUZMQUdfTEFTVDsKLQl9IGVsc2UgewotCQllYS0+ZWFfdHlwZSA9IEdGUzJfRUFUWVBFX1VOVVNFRDsKLQkJZWEtPmVhX251bV9wdHJzID0gMDsKLQl9Ci0KLQllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKLQlpZiAoIWVycm9yKSB7Ci0JCWlwLT5pX2lub2RlLmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBkaWJoLCAxKTsKLQkJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBkaWJoLT5iX2RhdGEpOwotCQlicmVsc2UoZGliaCk7Ci0JfQotCi0JZ2ZzMl90cmFuc19lbmQoc2RwKTsKLQotb3V0X2d1bmxvY2s6Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJnJnX2doKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgZWFfcmVtb3ZlX3Vuc3R1ZmZlZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCQkgICAgICAgc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSwKLQkJCSAgICAgICBzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKnByZXYsIGludCBsZWF2ZSkKLXsKLQlzdHJ1Y3QgZ2ZzMl9hbGxvYyAqYWw7Ci0JaW50IGVycm9yOwotCi0JYWwgPSBnZnMyX2FsbG9jX2dldChpcCk7Ci0JaWYgKCFhbCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQllcnJvciA9IGdmczJfcXVvdGFfaG9sZChpcCwgTk9fUVVPVEFfQ0hBTkdFLCBOT19RVU9UQV9DSEFOR0UpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfYWxsb2M7Ci0KLQllcnJvciA9IGdmczJfcmluZGV4X2hvbGQoR0ZTMl9TQigmaXAtPmlfaW5vZGUpLCAmYWwtPmFsX3JpX2doKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3F1b3RhOwotCi0JZXJyb3IgPSBlYV9kZWFsbG9jX3Vuc3R1ZmZlZChpcCwgYmgsIGVhLCBwcmV2LCAobGVhdmUpID8gJmVycm9yIDogTlVMTCk7Ci0KLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmYWwtPmFsX3JpX2doKTsKLQotb3V0X3F1b3RhOgotCWdmczJfcXVvdGFfdW5ob2xkKGlwKTsKLW91dF9hbGxvYzoKLQlnZnMyX2FsbG9jX3B1dChpcCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdHJ1Y3QgZWFfbGlzdCB7Ci0Jc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZWlfZXI7Ci0JdW5zaWduZWQgaW50IGVpX3NpemU7Ci19OwotCi1zdGF0aWMgaW50IGVhX2xpc3RfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCSAgICAgc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSwgc3RydWN0IGdmczJfZWFfaGVhZGVyICpwcmV2LAotCQkgICAgIHZvaWQgKnByaXZhdGUpCi17Ci0Jc3RydWN0IGVhX2xpc3QgKmVpID0gcHJpdmF0ZTsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciA9IGVpLT5laV9lcjsKLQl1bnNpZ25lZCBpbnQgZWFfc2l6ZSA9IGdmczJfZWFfc3RybGVuKGVhKTsKLQotCWlmIChlYS0+ZWFfdHlwZSA9PSBHRlMyX0VBVFlQRV9VTlVTRUQpCi0JCXJldHVybiAwOwotCi0JaWYgKGVyLT5lcl9kYXRhX2xlbikgewotCQljaGFyICpwcmVmaXggPSBOVUxMOwotCQl1bnNpZ25lZCBpbnQgbCA9IDA7Ci0JCWNoYXIgYyA9IDA7Ci0KLQkJaWYgKGVpLT5laV9zaXplICsgZWFfc2l6ZSA+IGVyLT5lcl9kYXRhX2xlbikKLQkJCXJldHVybiAtRVJBTkdFOwotCi0JCXN3aXRjaCAoZWEtPmVhX3R5cGUpIHsKLQkJY2FzZSBHRlMyX0VBVFlQRV9VU1I6Ci0JCQlwcmVmaXggPSAidXNlci4iOwotCQkJbCA9IDU7Ci0JCQlicmVhazsKLQkJY2FzZSBHRlMyX0VBVFlQRV9TWVM6Ci0JCQlwcmVmaXggPSAic3lzdGVtLiI7Ci0JCQlsID0gNzsKLQkJCWJyZWFrOwotCQljYXNlIEdGUzJfRUFUWVBFX1NFQ1VSSVRZOgotCQkJcHJlZml4ID0gInNlY3VyaXR5LiI7Ci0JCQlsID0gOTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJQlVHX09OKGwgPT0gMCk7Ci0KLQkJbWVtY3B5KGVyLT5lcl9kYXRhICsgZWktPmVpX3NpemUsIHByZWZpeCwgbCk7Ci0JCW1lbWNweShlci0+ZXJfZGF0YSArIGVpLT5laV9zaXplICsgbCwgR0ZTMl9FQTJOQU1FKGVhKSwKLQkJICAgICAgIGVhLT5lYV9uYW1lX2xlbik7Ci0JCW1lbWNweShlci0+ZXJfZGF0YSArIGVpLT5laV9zaXplICsgZWFfc2l6ZSAtIDEsICZjLCAxKTsKLQl9Ci0KLQllaS0+ZWlfc2l6ZSArPSBlYV9zaXplOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ2ZzMl9lYV9saXN0IC0KLSAqIEBpcDoKLSAqIEBlcjoKLSAqCi0gKiBSZXR1cm5zOiBhY3R1YWwgc2l6ZSBvZiBkYXRhIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBlcnJvcgotICovCi0KLWludCBnZnMyX2VhX2xpc3Qoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcikKLXsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoIWVyLT5lcl9kYXRhIHx8ICFlci0+ZXJfZGF0YV9sZW4pIHsKLQkJZXItPmVyX2RhdGEgPSBOVUxMOwotCQllci0+ZXJfZGF0YV9sZW4gPSAwOwotCX0KLQotCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIExNX0ZMQUdfQU5ZLCAmaV9naCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlpZiAoaXAtPmlfZWF0dHIpIHsKLQkJc3RydWN0IGVhX2xpc3QgZWkgPSB7IC5laV9lciA9IGVyLCAuZWlfc2l6ZSA9IDAgfTsKLQotCQllcnJvciA9IGVhX2ZvcmVhY2goaXAsIGVhX2xpc3RfaSwgJmVpKTsKLQkJaWYgKCFlcnJvcikKLQkJCWVycm9yID0gZWkuZWlfc2l6ZTsKLQl9Ci0KLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qKgotICogZWFfZ2V0X3Vuc3R1ZmZlZCAtIGFjdHVhbGx5IGNvcGllcyB0aGUgdW5zdHVmZmVkIGRhdGEgaW50byB0aGUKLSAqICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGJ1ZmZlcgotICogQGlwOiBUaGUgR0ZTMiBpbm9kZQotICogQGVhOiBUaGUgZXh0ZW5kZWQgYXR0cmlidXRlIGhlYWRlciBzdHJ1Y3R1cmUKLSAqIEBkYXRhOiBUaGUgZGF0YSB0byBiZSBjb3BpZWQKLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgZWFfZ2V0X3Vuc3R1ZmZlZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWEsCi0JCQkgICAgY2hhciAqZGF0YSkKLXsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmlwLT5pX2lub2RlKTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDsKLQl1bnNpZ25lZCBpbnQgYW1vdW50ID0gR0ZTMl9FQV9EQVRBX0xFTihlYSk7Ci0JdW5zaWduZWQgaW50IG5wdHJzID0gRElWX1JPVU5EX1VQKGFtb3VudCwgc2RwLT5zZF9qYnNpemUpOwotCV9fYmU2NCAqZGF0YXB0cnMgPSBHRlMyX0VBMkRBVEFQVFJTKGVhKTsKLQl1bnNpZ25lZCBpbnQgeDsKLQlpbnQgZXJyb3IgPSAwOwotCi0JYmggPSBrY2FsbG9jKG5wdHJzLCBzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFkICopLCBHRlBfTk9GUyk7Ci0JaWYgKCFiaCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmb3IgKHggPSAwOyB4IDwgbnB0cnM7IHgrKykgewotCQllcnJvciA9IGdmczJfbWV0YV9yZWFkKGlwLT5pX2dsLCBiZTY0X3RvX2NwdSgqZGF0YXB0cnMpLCAwLAotCQkJCSAgICAgICBiaCArIHgpOwotCQlpZiAoZXJyb3IpIHsKLQkJCXdoaWxlICh4LS0pCi0JCQkJYnJlbHNlKGJoW3hdKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWRhdGFwdHJzKys7Ci0JfQotCi0JZm9yICh4ID0gMDsgeCA8IG5wdHJzOyB4KyspIHsKLQkJZXJyb3IgPSBnZnMyX21ldGFfd2FpdChzZHAsIGJoW3hdKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlmb3IgKDsgeCA8IG5wdHJzOyB4KyspCi0JCQkJYnJlbHNlKGJoW3hdKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWlmIChnZnMyX21ldGF0eXBlX2NoZWNrKHNkcCwgYmhbeF0sIEdGUzJfTUVUQVRZUEVfRUQpKSB7Ci0JCQlmb3IgKDsgeCA8IG5wdHJzOyB4KyspCi0JCQkJYnJlbHNlKGJoW3hdKTsKLQkJCWVycm9yID0gLUVJTzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJbWVtY3B5KGRhdGEsIGJoW3hdLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IGdmczJfbWV0YV9oZWFkZXIpLAotCQkgICAgICAgKHNkcC0+c2RfamJzaXplID4gYW1vdW50KSA/IGFtb3VudCA6IHNkcC0+c2RfamJzaXplKTsKLQotCQlhbW91bnQgLT0gc2RwLT5zZF9qYnNpemU7Ci0JCWRhdGEgKz0gc2RwLT5zZF9qYnNpemU7Ci0KLQkJYnJlbHNlKGJoW3hdKTsKLQl9Ci0KLW91dDoKLQlrZnJlZShiaCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1pbnQgZ2ZzMl9lYV9nZXRfY29weShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCwKLQkJICAgICBjaGFyICpkYXRhKQotewotCWlmIChHRlMyX0VBX0lTX1NUVUZGRUQoZWwtPmVsX2VhKSkgewotCQltZW1jcHkoZGF0YSwgR0ZTMl9FQTJEQVRBKGVsLT5lbF9lYSksIEdGUzJfRUFfREFUQV9MRU4oZWwtPmVsX2VhKSk7Ci0JCXJldHVybiAwOwotCX0gZWxzZQotCQlyZXR1cm4gZWFfZ2V0X3Vuc3R1ZmZlZChpcCwgZWwtPmVsX2VhLCBkYXRhKTsKLX0KLQotLyoqCi0gKiBnZnMyX2VhX2dldF9pIC0KLSAqIEBpcDogVGhlIEdGUzIgaW5vZGUKLSAqIEBlcjogVGhlIHJlcXVlc3Qgc3RydWN0dXJlCi0gKgotICogUmV0dXJuczogYWN0dWFsIHNpemUgb2YgZGF0YSBvbiBzdWNjZXNzLCAtZXJybm8gb24gZXJyb3IKLSAqLwotCi1pbnQgZ2ZzMl9lYV9nZXRfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKQotewotCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsOwotCWludCBlcnJvcjsKLQotCWlmICghaXAtPmlfZWF0dHIpCi0JCXJldHVybiAtRU5PREFUQTsKLQotCWVycm9yID0gZ2ZzMl9lYV9maW5kKGlwLCBlciwgJmVsKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQlpZiAoIWVsLmVsX2VhKQotCQlyZXR1cm4gLUVOT0RBVEE7Ci0KLQlpZiAoZXItPmVyX2RhdGFfbGVuKSB7Ci0JCWlmIChHRlMyX0VBX0RBVEFfTEVOKGVsLmVsX2VhKSA+IGVyLT5lcl9kYXRhX2xlbikKLQkJCWVycm9yID0gIC1FUkFOR0U7Ci0JCWVsc2UKLQkJCWVycm9yID0gZ2ZzMl9lYV9nZXRfY29weShpcCwgJmVsLCBlci0+ZXJfZGF0YSk7Ci0JfQotCWlmICghZXJyb3IpCi0JCWVycm9yID0gR0ZTMl9FQV9EQVRBX0xFTihlbC5lbF9lYSk7Ci0KLQlicmVsc2UoZWwuZWxfYmgpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGdmczJfZWFfZ2V0IC0KLSAqIEBpcDogVGhlIEdGUzIgaW5vZGUKLSAqIEBlcjogVGhlIHJlcXVlc3Qgc3RydWN0dXJlCi0gKgotICogUmV0dXJuczogYWN0dWFsIHNpemUgb2YgZGF0YSBvbiBzdWNjZXNzLCAtZXJybm8gb24gZXJyb3IKLSAqLwotCi1pbnQgZ2ZzMl9lYV9nZXQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcikKLXsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoIWVyLT5lcl9uYW1lX2xlbiB8fAotCSAgICBlci0+ZXJfbmFtZV9sZW4gPiBHRlMyX0VBX01BWF9OQU1FX0xFTikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFlci0+ZXJfZGF0YSB8fCAhZXItPmVyX2RhdGFfbGVuKSB7Ci0JCWVyLT5lcl9kYXRhID0gTlVMTDsKLQkJZXItPmVyX2RhdGFfbGVuID0gMDsKLQl9Ci0KLQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCBMTV9GTEFHX0FOWSwgJmlfZ2gpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JZXJyb3IgPSBnZnMyX2VhX29wc1tlci0+ZXJfdHlwZV0tPmVvX2dldChpcCwgZXIpOwotCi0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlfZ2gpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGVhX2FsbG9jX2JsayAtIGFsbG9jYXRlcyBhIG5ldyBibG9jayBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlcy4KLSAqIEBpcDogQSBwb2ludGVyIHRvIHRoZSBpbm9kZSB0aGF0J3MgZ2V0dGluZyBleHRlbmRlZCBhdHRyaWJ1dGVzCi0gKiBAYmhwOiBQb2ludGVyIHRvIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgYnVmZmVyX2hlYWQKLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgZWFfYWxsb2NfYmxrKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhwKQotewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmaXAtPmlfaW5vZGUpOwotCXN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWE7Ci0JdW5zaWduZWQgaW50IG4gPSAxOwotCXU2NCBibG9jazsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfYWxsb2NfYmxvY2soaXAsICZibG9jaywgJm4pOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCWdmczJfdHJhbnNfYWRkX3VucmV2b2tlKHNkcCwgYmxvY2ssIDEpOwotCSpiaHAgPSBnZnMyX21ldGFfbmV3KGlwLT5pX2dsLCBibG9jayk7Ci0JZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsICpiaHAsIDEpOwotCWdmczJfbWV0YXR5cGVfc2V0KCpiaHAsIEdGUzJfTUVUQVRZUEVfRUEsIEdGUzJfRk9STUFUX0VBKTsKLQlnZnMyX2J1ZmZlcl9jbGVhcl90YWlsKCpiaHAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlcikpOwotCi0JZWEgPSBHRlMyX0VBX0JIMkZJUlNUKCpiaHApOwotCWVhLT5lYV9yZWNfbGVuID0gY3B1X3RvX2JlMzIoc2RwLT5zZF9qYnNpemUpOwotCWVhLT5lYV90eXBlID0gR0ZTMl9FQVRZUEVfVU5VU0VEOwotCWVhLT5lYV9mbGFncyA9IEdGUzJfRUFGTEFHX0xBU1Q7Ci0JZWEtPmVhX251bV9wdHJzID0gMDsKLQotCWdmczJfYWRkX2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUsIDEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZWFfd3JpdGUgLSB3cml0ZXMgdGhlIHJlcXVlc3QgaW5mbyB0byBhbiBlYSwgY3JlYXRpbmcgbmV3IGJsb2NrcyBpZgotICogICAgICAgICAgICBuZWNlc3NhcnkKLSAqIEBpcDogaW5vZGUgdGhhdCBpcyBiZWluZyBtb2RpZmllZAotICogQGVhOiB0aGUgbG9jYXRpb24gb2YgdGhlIG5ldyBlYSBpbiBhIGJsb2NrCi0gKiBAZXI6IHRoZSB3cml0ZSByZXF1ZXN0Ci0gKgotICogTm90ZTogZG9lcyBub3QgdXBkYXRlIGVhX3JlY19sZW4gb3IgdGhlIEdGUzJfRUFGTEFHX0xBU1QgYmluIG9mIGVhX2ZsYWdzCi0gKgotICogcmV0dXJucyA6IGVycm5vCi0gKi8KLQotc3RhdGljIGludCBlYV93cml0ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWEsCi0JCSAgICBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcikKLXsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmlwLT5pX2lub2RlKTsKLQlpbnQgZXJyb3I7Ci0KLQllYS0+ZWFfZGF0YV9sZW4gPSBjcHVfdG9fYmUzMihlci0+ZXJfZGF0YV9sZW4pOwotCWVhLT5lYV9uYW1lX2xlbiA9IGVyLT5lcl9uYW1lX2xlbjsKLQllYS0+ZWFfdHlwZSA9IGVyLT5lcl90eXBlOwotCWVhLT5fX3BhZCA9IDA7Ci0KLQltZW1jcHkoR0ZTMl9FQTJOQU1FKGVhKSwgZXItPmVyX25hbWUsIGVyLT5lcl9uYW1lX2xlbik7Ci0KLQlpZiAoR0ZTMl9FQVJFUV9TSVpFX1NUVUZGRUQoZXIpIDw9IHNkcC0+c2RfamJzaXplKSB7Ci0JCWVhLT5lYV9udW1fcHRycyA9IDA7Ci0JCW1lbWNweShHRlMyX0VBMkRBVEEoZWEpLCBlci0+ZXJfZGF0YSwgZXItPmVyX2RhdGFfbGVuKTsKLQl9IGVsc2UgewotCQlfX2JlNjQgKmRhdGFwdHIgPSBHRlMyX0VBMkRBVEFQVFJTKGVhKTsKLQkJY29uc3QgY2hhciAqZGF0YSA9IGVyLT5lcl9kYXRhOwotCQl1bnNpZ25lZCBpbnQgZGF0YV9sZW4gPSBlci0+ZXJfZGF0YV9sZW47Ci0JCXVuc2lnbmVkIGludCBjb3B5OwotCQl1bnNpZ25lZCBpbnQgeDsKLQotCQllYS0+ZWFfbnVtX3B0cnMgPSBESVZfUk9VTkRfVVAoZXItPmVyX2RhdGFfbGVuLCBzZHAtPnNkX2pic2l6ZSk7Ci0JCWZvciAoeCA9IDA7IHggPCBlYS0+ZWFfbnVtX3B0cnM7IHgrKykgewotCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQkJCXU2NCBibG9jazsKLQkJCWludCBtaF9zaXplID0gc2l6ZW9mKHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyKTsKLQkJCXVuc2lnbmVkIGludCBuID0gMTsKLQotCQkJZXJyb3IgPSBnZnMyX2FsbG9jX2Jsb2NrKGlwLCAmYmxvY2ssICZuKTsKLQkJCWlmIChlcnJvcikKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQlnZnMyX3RyYW5zX2FkZF91bnJldm9rZShzZHAsIGJsb2NrLCAxKTsKLQkJCWJoID0gZ2ZzMl9tZXRhX25ldyhpcC0+aV9nbCwgYmxvY2spOwotCQkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGJoLCAxKTsKLQkJCWdmczJfbWV0YXR5cGVfc2V0KGJoLCBHRlMyX01FVEFUWVBFX0VELCBHRlMyX0ZPUk1BVF9FRCk7Ci0KLQkJCWdmczJfYWRkX2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUsIDEpOwotCi0JCQljb3B5ID0gZGF0YV9sZW4gPiBzZHAtPnNkX2pic2l6ZSA/IHNkcC0+c2RfamJzaXplIDoKLQkJCQkJCQkgICBkYXRhX2xlbjsKLQkJCW1lbWNweShiaC0+Yl9kYXRhICsgbWhfc2l6ZSwgZGF0YSwgY29weSk7Ci0JCQlpZiAoY29weSA8IHNkcC0+c2RfamJzaXplKQotCQkJCW1lbXNldChiaC0+Yl9kYXRhICsgbWhfc2l6ZSArIGNvcHksIDAsCi0JCQkJICAgICAgIHNkcC0+c2RfamJzaXplIC0gY29weSk7Ci0KLQkJCSpkYXRhcHRyKysgPSBjcHVfdG9fYmU2NChiaC0+Yl9ibG9ja25yKTsKLQkJCWRhdGEgKz0gY29weTsKLQkJCWRhdGFfbGVuIC09IGNvcHk7Ci0KLQkJCWJyZWxzZShiaCk7Ci0JCX0KLQotCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFkYXRhX2xlbik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXR5cGVkZWYgaW50ICgqZWFfc2tlbGV0b25fY2FsbF90KSAoc3RydWN0IGdmczJfaW5vZGUgKmlwLAotCQkJCSAgIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyLCB2b2lkICpwcml2YXRlKTsKLQotc3RhdGljIGludCBlYV9hbGxvY19za2VsZXRvbihzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyLAotCQkJICAgICB1bnNpZ25lZCBpbnQgYmxrcywKLQkJCSAgICAgZWFfc2tlbGV0b25fY2FsbF90IHNrZWxldG9uX2NhbGwsIHZvaWQgKnByaXZhdGUpCi17Ci0Jc3RydWN0IGdmczJfYWxsb2MgKmFsOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKLQlpbnQgZXJyb3I7Ci0KLQlhbCA9IGdmczJfYWxsb2NfZ2V0KGlwKTsKLQlpZiAoIWFsKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWVycm9yID0gZ2ZzMl9xdW90YV9sb2NrX2NoZWNrKGlwKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwotCi0JYWwtPmFsX3JlcXVlc3RlZCA9IGJsa3M7Ci0KLQllcnJvciA9IGdmczJfaW5wbGFjZV9yZXNlcnZlKGlwKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2d1bmxvY2tfcTsKLQotCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihHRlMyX1NCKCZpcC0+aV9pbm9kZSksCi0JCQkJIGJsa3MgKyBhbC0+YWxfcmdkLT5yZF9sZW5ndGggKwotCQkJCSBSRVNfRElOT0RFICsgUkVTX1NUQVRGUyArIFJFU19RVU9UQSwgMCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9pcHJlczsKLQotCWVycm9yID0gc2tlbGV0b25fY2FsbChpcCwgZXIsIHByaXZhdGUpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZW5kX3RyYW5zOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7Ci0JaWYgKCFlcnJvcikgewotCQlpZiAoZXItPmVyX2ZsYWdzICYgR0ZTMl9FUkZfTU9ERSkgewotCQkJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoR0ZTMl9TQigmaXAtPmlfaW5vZGUpLAotCQkJCQkgICAgKGlwLT5pX2lub2RlLmlfbW9kZSAmIFNfSUZNVCkgPT0KLQkJCQkJICAgIChlci0+ZXJfbW9kZSAmIFNfSUZNVCkpOwotCQkJaXAtPmlfaW5vZGUuaV9tb2RlID0gZXItPmVyX21vZGU7Ci0JCX0KLQkJaXAtPmlfaW5vZGUuaV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOwotCQlnZnMyX2Rpbm9kZV9vdXQoaXAsIGRpYmgtPmJfZGF0YSk7Ci0JCWJyZWxzZShkaWJoKTsKLQl9Ci0KLW91dF9lbmRfdHJhbnM6Ci0JZ2ZzMl90cmFuc19lbmQoR0ZTMl9TQigmaXAtPmlfaW5vZGUpKTsKLW91dF9pcHJlczoKLQlnZnMyX2lucGxhY2VfcmVsZWFzZShpcCk7Ci1vdXRfZ3VubG9ja19xOgotCWdmczJfcXVvdGFfdW5sb2NrKGlwKTsKLW91dDoKLQlnZnMyX2FsbG9jX3B1dChpcCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGVhX2luaXRfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyLAotCQkgICAgIHZvaWQgKnByaXZhdGUpCi17Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGVhX2FsbG9jX2JsayhpcCwgJmJoKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWlwLT5pX2VhdHRyID0gYmgtPmJfYmxvY2tucjsKLQllcnJvciA9IGVhX3dyaXRlKGlwLCBHRlMyX0VBX0JIMkZJUlNUKGJoKSwgZXIpOwotCi0JYnJlbHNlKGJoKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiBlYV9pbml0IC0gaW5pdGlhbGl6ZXMgYSBuZXcgZWF0dHIgYmxvY2sKLSAqIEBpcDoKLSAqIEBlcjoKLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgZWFfaW5pdChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKQotewotCXVuc2lnbmVkIGludCBqYnNpemUgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSktPnNkX2pic2l6ZTsKLQl1bnNpZ25lZCBpbnQgYmxrcyA9IDE7Ci0KLQlpZiAoR0ZTMl9FQVJFUV9TSVpFX1NUVUZGRUQoZXIpID4gamJzaXplKQotCQlibGtzICs9IERJVl9ST1VORF9VUChlci0+ZXJfZGF0YV9sZW4sIGpic2l6ZSk7Ci0KLQlyZXR1cm4gZWFfYWxsb2Nfc2tlbGV0b24oaXAsIGVyLCBibGtzLCBlYV9pbml0X2ksIE5VTEwpOwotfQotCi1zdGF0aWMgc3RydWN0IGdmczJfZWFfaGVhZGVyICplYV9zcGxpdF9lYShzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKmVhKQotewotCXUzMiBlYV9zaXplID0gR0ZTMl9FQV9TSVpFKGVhKTsKLQlzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKm5ldyA9IChzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKikoKGNoYXIgKillYSArCi0JCQkJICAgICBlYV9zaXplKTsKLQl1MzIgbmV3X3NpemUgPSBHRlMyX0VBX1JFQ19MRU4oZWEpIC0gZWFfc2l6ZTsKLQlpbnQgbGFzdCA9IGVhLT5lYV9mbGFncyAmIEdGUzJfRUFGTEFHX0xBU1Q7Ci0KLQllYS0+ZWFfcmVjX2xlbiA9IGNwdV90b19iZTMyKGVhX3NpemUpOwotCWVhLT5lYV9mbGFncyBePSBsYXN0OwotCi0JbmV3LT5lYV9yZWNfbGVuID0gY3B1X3RvX2JlMzIobmV3X3NpemUpOwotCW5ldy0+ZWFfZmxhZ3MgPSBsYXN0OwotCi0JcmV0dXJuIG5ldzsKLX0KLQotc3RhdGljIHZvaWQgZWFfc2V0X3JlbW92ZV9zdHVmZmVkKHN0cnVjdCBnZnMyX2lub2RlICppcCwKLQkJCQkgIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKmVhID0gZWwtPmVsX2VhOwotCXN0cnVjdCBnZnMyX2VhX2hlYWRlciAqcHJldiA9IGVsLT5lbF9wcmV2OwotCXUzMiBsZW47Ci0KLQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZWwtPmVsX2JoLCAxKTsKLQotCWlmICghcHJldiB8fCAhR0ZTMl9FQV9JU19TVFVGRkVEKGVhKSkgewotCQllYS0+ZWFfdHlwZSA9IEdGUzJfRUFUWVBFX1VOVVNFRDsKLQkJcmV0dXJuOwotCX0gZWxzZSBpZiAoR0ZTMl9FQTJORVhUKHByZXYpICE9IGVhKSB7Ci0JCXByZXYgPSBHRlMyX0VBMk5FWFQocHJldik7Ci0JCWdmczJfYXNzZXJ0X3dpdGhkcmF3KEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgR0ZTMl9FQTJORVhUKHByZXYpID09IGVhKTsKLQl9Ci0KLQlsZW4gPSBHRlMyX0VBX1JFQ19MRU4ocHJldikgKyBHRlMyX0VBX1JFQ19MRU4oZWEpOwotCXByZXYtPmVhX3JlY19sZW4gPSBjcHVfdG9fYmUzMihsZW4pOwotCi0JaWYgKEdGUzJfRUFfSVNfTEFTVChlYSkpCi0JCXByZXYtPmVhX2ZsYWdzIHw9IEdGUzJfRUFGTEFHX0xBU1Q7Ci19Ci0KLXN0cnVjdCBlYV9zZXQgewotCWludCBlYV9zcGxpdDsKLQotCXN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVzX2VyOwotCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplc19lbDsKLQotCXN0cnVjdCBidWZmZXJfaGVhZCAqZXNfYmg7Ci0Jc3RydWN0IGdmczJfZWFfaGVhZGVyICplc19lYTsKLX07Ci0KLXN0YXRpYyBpbnQgZWFfc2V0X3NpbXBsZV9ub2FsbG9jKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCQkgc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSwgc3RydWN0IGVhX3NldCAqZXMpCi17Ci0Jc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIgPSBlcy0+ZXNfZXI7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOwotCWludCBlcnJvcjsKLQotCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihHRlMyX1NCKCZpcC0+aV9pbm9kZSksIFJFU19ESU5PREUgKyAyICogUkVTX0VBVFRSLCAwKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBiaCwgMSk7Ci0KLQlpZiAoZXMtPmVhX3NwbGl0KQotCQllYSA9IGVhX3NwbGl0X2VhKGVhKTsKLQotCWVhX3dyaXRlKGlwLCBlYSwgZXIpOwotCi0JaWYgKGVzLT5lc19lbCkKLQkJZWFfc2V0X3JlbW92ZV9zdHVmZmVkKGlwLCBlcy0+ZXNfZWwpOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQotCWlmIChlci0+ZXJfZmxhZ3MgJiBHRlMyX0VSRl9NT0RFKSB7Ci0JCWdmczJfYXNzZXJ0X3dpdGhkcmF3KEdGUzJfU0IoJmlwLT5pX2lub2RlKSwKLQkJCShpcC0+aV9pbm9kZS5pX21vZGUgJiBTX0lGTVQpID09IChlci0+ZXJfbW9kZSAmIFNfSUZNVCkpOwotCQlpcC0+aV9pbm9kZS5pX21vZGUgPSBlci0+ZXJfbW9kZTsKLQl9Ci0JaXAtPmlfaW5vZGUuaV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7Ci0JZ2ZzMl9kaW5vZGVfb3V0KGlwLCBkaWJoLT5iX2RhdGEpOwotCWJyZWxzZShkaWJoKTsKLW91dDoKLQlnZnMyX3RyYW5zX2VuZChHRlMyX1NCKCZpcC0+aV9pbm9kZSkpOwotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBlYV9zZXRfc2ltcGxlX2FsbG9jKHN0cnVjdCBnZnMyX2lub2RlICppcCwKLQkJCSAgICAgICBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciwgdm9pZCAqcHJpdmF0ZSkKLXsKLQlzdHJ1Y3QgZWFfc2V0ICplcyA9IHByaXZhdGU7Ci0Jc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSA9IGVzLT5lc19lYTsKLQlpbnQgZXJyb3I7Ci0KLQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZXMtPmVzX2JoLCAxKTsKLQotCWlmIChlcy0+ZWFfc3BsaXQpCi0JCWVhID0gZWFfc3BsaXRfZWEoZWEpOwotCi0JZXJyb3IgPSBlYV93cml0ZShpcCwgZWEsIGVyKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWlmIChlcy0+ZXNfZWwpCi0JCWVhX3NldF9yZW1vdmVfc3R1ZmZlZChpcCwgZXMtPmVzX2VsKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGVhX3NldF9zaW1wbGUoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAotCQkJIHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWEsIHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqcHJldiwKLQkJCSB2b2lkICpwcml2YXRlKQotewotCXN0cnVjdCBlYV9zZXQgKmVzID0gcHJpdmF0ZTsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQlpbnQgc3R1ZmZlZDsKLQlpbnQgZXJyb3I7Ci0KLQlzdHVmZmVkID0gZWFfY2FsY19zaXplKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgZXMtPmVzX2VyLCAmc2l6ZSk7Ci0KLQlpZiAoZWEtPmVhX3R5cGUgPT0gR0ZTMl9FQVRZUEVfVU5VU0VEKSB7Ci0JCWlmIChHRlMyX0VBX1JFQ19MRU4oZWEpIDwgc2l6ZSkKLQkJCXJldHVybiAwOwotCQlpZiAoIUdGUzJfRUFfSVNfU1RVRkZFRChlYSkpIHsKLQkJCWVycm9yID0gZWFfcmVtb3ZlX3Vuc3R1ZmZlZChpcCwgYmgsIGVhLCBwcmV2LCAxKTsKLQkJCWlmIChlcnJvcikKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCX0KLQkJZXMtPmVhX3NwbGl0ID0gMDsKLQl9IGVsc2UgaWYgKEdGUzJfRUFfUkVDX0xFTihlYSkgLSBHRlMyX0VBX1NJWkUoZWEpID49IHNpemUpCi0JCWVzLT5lYV9zcGxpdCA9IDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLQotCWlmIChzdHVmZmVkKSB7Ci0JCWVycm9yID0gZWFfc2V0X3NpbXBsZV9ub2FsbG9jKGlwLCBiaCwgZWEsIGVzKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGludCBibGtzOwotCi0JCWVzLT5lc19iaCA9IGJoOwotCQllcy0+ZXNfZWEgPSBlYTsKLQkJYmxrcyA9IDIgKyBESVZfUk9VTkRfVVAoZXMtPmVzX2VyLT5lcl9kYXRhX2xlbiwKLQkJCQkJR0ZTMl9TQigmaXAtPmlfaW5vZGUpLT5zZF9qYnNpemUpOwotCi0JCWVycm9yID0gZWFfYWxsb2Nfc2tlbGV0b24oaXAsIGVzLT5lc19lciwgYmxrcywKLQkJCQkJICBlYV9zZXRfc2ltcGxlX2FsbG9jLCBlcyk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBlYV9zZXRfYmxvY2soc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciwKLQkJCXZvaWQgKnByaXZhdGUpCi17Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSk7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICppbmRiaCwgKm5ld2JoOwotCV9fYmU2NCAqZWFibGs7Ci0JaW50IGVycm9yOwotCWludCBtaF9zaXplID0gc2l6ZW9mKHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyKTsKLQotCWlmIChpcC0+aV9kaXNrZmxhZ3MgJiBHRlMyX0RJRl9FQV9JTkRJUkVDVCkgewotCQlfX2JlNjQgKmVuZDsKLQotCQllcnJvciA9IGdmczJfbWV0YV9yZWFkKGlwLT5pX2dsLCBpcC0+aV9lYXR0ciwgRElPX1dBSVQsCi0JCQkJICAgICAgICZpbmRiaCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQotCQlpZiAoZ2ZzMl9tZXRhdHlwZV9jaGVjayhzZHAsIGluZGJoLCBHRlMyX01FVEFUWVBFX0lOKSkgewotCQkJZXJyb3IgPSAtRUlPOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQllYWJsayA9IChfX2JlNjQgKikoaW5kYmgtPmJfZGF0YSArIG1oX3NpemUpOwotCQllbmQgPSBlYWJsayArIHNkcC0+c2RfaW5wdHJzOwotCi0JCWZvciAoOyBlYWJsayA8IGVuZDsgZWFibGsrKykKLQkJCWlmICghKmVhYmxrKQotCQkJCWJyZWFrOwotCi0JCWlmIChlYWJsayA9PSBlbmQpIHsKLQkJCWVycm9yID0gLUVOT1NQQzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGluZGJoLCAxKTsKLQl9IGVsc2UgewotCQl1NjQgYmxrOwotCQl1bnNpZ25lZCBpbnQgbiA9IDE7Ci0JCWVycm9yID0gZ2ZzMl9hbGxvY19ibG9jayhpcCwgJmJsaywgJm4pOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JCWdmczJfdHJhbnNfYWRkX3VucmV2b2tlKHNkcCwgYmxrLCAxKTsKLQkJaW5kYmggPSBnZnMyX21ldGFfbmV3KGlwLT5pX2dsLCBibGspOwotCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgaW5kYmgsIDEpOwotCQlnZnMyX21ldGF0eXBlX3NldChpbmRiaCwgR0ZTMl9NRVRBVFlQRV9JTiwgR0ZTMl9GT1JNQVRfSU4pOwotCQlnZnMyX2J1ZmZlcl9jbGVhcl90YWlsKGluZGJoLCBtaF9zaXplKTsKLQotCQllYWJsayA9IChfX2JlNjQgKikoaW5kYmgtPmJfZGF0YSArIG1oX3NpemUpOwotCQkqZWFibGsgPSBjcHVfdG9fYmU2NChpcC0+aV9lYXR0cik7Ci0JCWlwLT5pX2VhdHRyID0gYmxrOwotCQlpcC0+aV9kaXNrZmxhZ3MgfD0gR0ZTMl9ESUZfRUFfSU5ESVJFQ1Q7Ci0JCWdmczJfYWRkX2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUsIDEpOwotCi0JCWVhYmxrKys7Ci0JfQotCi0JZXJyb3IgPSBlYV9hbGxvY19ibGsoaXAsICZuZXdiaCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQotCSplYWJsayA9IGNwdV90b19iZTY0KCh1NjQpbmV3YmgtPmJfYmxvY2tucik7Ci0JZXJyb3IgPSBlYV93cml0ZShpcCwgR0ZTMl9FQV9CSDJGSVJTVChuZXdiaCksIGVyKTsKLQlicmVsc2UobmV3YmgpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQlpZiAocHJpdmF0ZSkKLQkJZWFfc2V0X3JlbW92ZV9zdHVmZmVkKGlwLCBwcml2YXRlKTsKLQotb3V0OgotCWJyZWxzZShpbmRiaCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGVhX3NldF9pKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIsCi0JCSAgICBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwpCi17Ci0Jc3RydWN0IGVhX3NldCBlczsKLQl1bnNpZ25lZCBpbnQgYmxrcyA9IDI7Ci0JaW50IGVycm9yOwotCi0JbWVtc2V0KCZlcywgMCwgc2l6ZW9mKHN0cnVjdCBlYV9zZXQpKTsKLQllcy5lc19lciA9IGVyOwotCWVzLmVzX2VsID0gZWw7Ci0KLQllcnJvciA9IGVhX2ZvcmVhY2goaXAsIGVhX3NldF9zaW1wbGUsICZlcyk7Ci0JaWYgKGVycm9yID4gMCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlpZiAoIShpcC0+aV9kaXNrZmxhZ3MgJiBHRlMyX0RJRl9FQV9JTkRJUkVDVCkpCi0JCWJsa3MrKzsKLQlpZiAoR0ZTMl9FQVJFUV9TSVpFX1NUVUZGRUQoZXIpID4gR0ZTMl9TQigmaXAtPmlfaW5vZGUpLT5zZF9qYnNpemUpCi0JCWJsa3MgKz0gRElWX1JPVU5EX1VQKGVyLT5lcl9kYXRhX2xlbiwgR0ZTMl9TQigmaXAtPmlfaW5vZGUpLT5zZF9qYnNpemUpOwotCi0JcmV0dXJuIGVhX2FsbG9jX3NrZWxldG9uKGlwLCBlciwgYmxrcywgZWFfc2V0X2Jsb2NrLCBlbCk7Ci19Ci0KLXN0YXRpYyBpbnQgZWFfc2V0X3JlbW92ZV91bnN0dWZmZWQoc3RydWN0IGdmczJfaW5vZGUgKmlwLAotCQkJCSAgIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCkKLXsKLQlpZiAoZWwtPmVsX3ByZXYgJiYgR0ZTMl9FQTJORVhUKGVsLT5lbF9wcmV2KSAhPSBlbC0+ZWxfZWEpIHsKLQkJZWwtPmVsX3ByZXYgPSBHRlMyX0VBMk5FWFQoZWwtPmVsX3ByZXYpOwotCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhHRlMyX1NCKCZpcC0+aV9pbm9kZSksCi0JCQkJICAgICBHRlMyX0VBMk5FWFQoZWwtPmVsX3ByZXYpID09IGVsLT5lbF9lYSk7Ci0JfQotCi0JcmV0dXJuIGVhX3JlbW92ZV91bnN0dWZmZWQoaXAsIGVsLT5lbF9iaCwgZWwtPmVsX2VhLCBlbC0+ZWxfcHJldiwwKTsKLX0KLQotaW50IGdmczJfZWFfc2V0X2koc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcikKLXsKLQlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiBlbDsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoIWlwLT5pX2VhdHRyKSB7Ci0JCWlmIChlci0+ZXJfZmxhZ3MgJiBYQVRUUl9SRVBMQUNFKQotCQkJcmV0dXJuIC1FTk9EQVRBOwotCQlyZXR1cm4gZWFfaW5pdChpcCwgZXIpOwotCX0KLQotCWVycm9yID0gZ2ZzMl9lYV9maW5kKGlwLCBlciwgJmVsKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWlmIChlbC5lbF9lYSkgewotCQlpZiAoaXAtPmlfZGlza2ZsYWdzICYgR0ZTMl9ESUZfQVBQRU5ET05MWSkgewotCQkJYnJlbHNlKGVsLmVsX2JoKTsKLQkJCXJldHVybiAtRVBFUk07Ci0JCX0KLQotCQllcnJvciA9IC1FRVhJU1Q7Ci0JCWlmICghKGVyLT5lcl9mbGFncyAmIFhBVFRSX0NSRUFURSkpIHsKLQkJCWludCB1bnN0dWZmZWQgPSAhR0ZTMl9FQV9JU19TVFVGRkVEKGVsLmVsX2VhKTsKLQkJCWVycm9yID0gZWFfc2V0X2koaXAsIGVyLCAmZWwpOwotCQkJaWYgKCFlcnJvciAmJiB1bnN0dWZmZWQpCi0JCQkJZWFfc2V0X3JlbW92ZV91bnN0dWZmZWQoaXAsICZlbCk7Ci0JCX0KLQotCQlicmVsc2UoZWwuZWxfYmgpOwotCX0gZWxzZSB7Ci0JCWVycm9yID0gLUVOT0RBVEE7Ci0JCWlmICghKGVyLT5lcl9mbGFncyAmIFhBVFRSX1JFUExBQ0UpKQotCQkJZXJyb3IgPSBlYV9zZXRfaShpcCwgZXIsIE5VTEwpOwotCX0KLQotCXJldHVybiBlcnJvcjsKLX0KLQotaW50IGdmczJfZWFfc2V0KHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIpCi17Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGlfZ2g7Ci0JaW50IGVycm9yOwotCi0JaWYgKCFlci0+ZXJfbmFtZV9sZW4gfHwgZXItPmVyX25hbWVfbGVuID4gR0ZTMl9FQV9NQVhfTkFNRV9MRU4pCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghZXItPmVyX2RhdGEgfHwgIWVyLT5lcl9kYXRhX2xlbikgewotCQllci0+ZXJfZGF0YSA9IE5VTEw7Ci0JCWVyLT5lcl9kYXRhX2xlbiA9IDA7Ci0JfQotCWVycm9yID0gZWFfY2hlY2tfc2l6ZShHRlMyX1NCKCZpcC0+aV9pbm9kZSksIGVyKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZpX2doKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWlmIChJU19JTU1VVEFCTEUoJmlwLT5pX2lub2RlKSkKLQkJZXJyb3IgPSAtRVBFUk07Ci0JZWxzZQotCQllcnJvciA9IGdmczJfZWFfb3BzW2VyLT5lcl90eXBlXS0+ZW9fc2V0KGlwLCBlcik7Ci0KLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgZWFfcmVtb3ZlX3N0dWZmZWQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwpCi17Ci0Jc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSA9IGVsLT5lbF9lYTsKLQlzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKnByZXYgPSBlbC0+ZWxfcHJldjsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgUkVTX0RJTk9ERSArIFJFU19FQVRUUiwgMCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZWwtPmVsX2JoLCAxKTsKLQotCWlmIChwcmV2KSB7Ci0JCXUzMiBsZW47Ci0KLQkJbGVuID0gR0ZTMl9FQV9SRUNfTEVOKHByZXYpICsgR0ZTMl9FQV9SRUNfTEVOKGVhKTsKLQkJcHJldi0+ZWFfcmVjX2xlbiA9IGNwdV90b19iZTMyKGxlbik7Ci0KLQkJaWYgKEdGUzJfRUFfSVNfTEFTVChlYSkpCi0JCQlwcmV2LT5lYV9mbGFncyB8PSBHRlMyX0VBRkxBR19MQVNUOwotCX0gZWxzZQotCQllYS0+ZWFfdHlwZSA9IEdGUzJfRUFUWVBFX1VOVVNFRDsKLQotCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOwotCWlmICghZXJyb3IpIHsKLQkJaXAtPmlfaW5vZGUuaV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOwotCQlnZnMyX2Rpbm9kZV9vdXQoaXAsIGRpYmgtPmJfZGF0YSk7Ci0JCWJyZWxzZShkaWJoKTsKLQl9Ci0KLQlnZnMyX3RyYW5zX2VuZChHRlMyX1NCKCZpcC0+aV9pbm9kZSkpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi1pbnQgZ2ZzMl9lYV9yZW1vdmVfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKQotewotCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsOwotCWludCBlcnJvcjsKLQotCWlmICghaXAtPmlfZWF0dHIpCi0JCXJldHVybiAtRU5PREFUQTsKLQotCWVycm9yID0gZ2ZzMl9lYV9maW5kKGlwLCBlciwgJmVsKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQlpZiAoIWVsLmVsX2VhKQotCQlyZXR1cm4gLUVOT0RBVEE7Ci0KLQlpZiAoR0ZTMl9FQV9JU19TVFVGRkVEKGVsLmVsX2VhKSkKLQkJZXJyb3IgPSBlYV9yZW1vdmVfc3R1ZmZlZChpcCwgJmVsKTsKLQllbHNlCi0JCWVycm9yID0gZWFfcmVtb3ZlX3Vuc3R1ZmZlZChpcCwgZWwuZWxfYmgsIGVsLmVsX2VhLCBlbC5lbF9wcmV2LAotCQkJCQkgICAgMCk7Ci0KLQlicmVsc2UoZWwuZWxfYmgpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGdmczJfZWFfcmVtb3ZlIC0gc2V0cyAob3IgY3JlYXRlcyBvciByZXBsYWNlcykgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCi0gKiBAaXA6IHBvaW50ZXIgdG8gdGhlIGlub2RlIG9mIHRoZSB0YXJnZXQgZmlsZQotICogQGVyOiByZXF1ZXN0IGluZm9ybWF0aW9uCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1pbnQgZ2ZzMl9lYV9yZW1vdmUoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcikKLXsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoIWVyLT5lcl9uYW1lX2xlbiB8fCBlci0+ZXJfbmFtZV9sZW4gPiBHRlMyX0VBX01BWF9OQU1FX0xFTikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCAmaV9naCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlpZiAoSVNfSU1NVVRBQkxFKCZpcC0+aV9pbm9kZSkgfHwgSVNfQVBQRU5EKCZpcC0+aV9pbm9kZSkpCi0JCWVycm9yID0gLUVQRVJNOwotCWVsc2UKLQkJZXJyb3IgPSBnZnMyX2VhX29wc1tlci0+ZXJfdHlwZV0tPmVvX3JlbW92ZShpcCwgZXIpOwotCi0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlfZ2gpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGVhX2FjbF9jaG1vZF91bnN0dWZmZWQoc3RydWN0IGdmczJfaW5vZGUgKmlwLAotCQkJCSAgc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSwgY2hhciAqZGF0YSkKLXsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmlwLT5pX2lub2RlKTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDsKLQl1bnNpZ25lZCBpbnQgYW1vdW50ID0gR0ZTMl9FQV9EQVRBX0xFTihlYSk7Ci0JdW5zaWduZWQgaW50IG5wdHJzID0gRElWX1JPVU5EX1VQKGFtb3VudCwgc2RwLT5zZF9qYnNpemUpOwotCV9fYmU2NCAqZGF0YXB0cnMgPSBHRlMyX0VBMkRBVEFQVFJTKGVhKTsKLQl1bnNpZ25lZCBpbnQgeDsKLQlpbnQgZXJyb3I7Ci0KLQliaCA9IGtjYWxsb2MobnB0cnMsIHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiksIEdGUF9OT0ZTKTsKLQlpZiAoIWJoKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIG5wdHJzICsgUkVTX0RJTk9ERSwgMCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQotCWZvciAoeCA9IDA7IHggPCBucHRyczsgeCsrKSB7Ci0JCWVycm9yID0gZ2ZzMl9tZXRhX3JlYWQoaXAtPmlfZ2wsIGJlNjRfdG9fY3B1KCpkYXRhcHRycyksIDAsCi0JCQkJICAgICAgIGJoICsgeCk7Ci0JCWlmIChlcnJvcikgewotCQkJd2hpbGUgKHgtLSkKLQkJCQlicmVsc2UoYmhbeF0pOwotCQkJZ290byBmYWlsOwotCQl9Ci0JCWRhdGFwdHJzKys7Ci0JfQotCi0JZm9yICh4ID0gMDsgeCA8IG5wdHJzOyB4KyspIHsKLQkJZXJyb3IgPSBnZnMyX21ldGFfd2FpdChzZHAsIGJoW3hdKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlmb3IgKDsgeCA8IG5wdHJzOyB4KyspCi0JCQkJYnJlbHNlKGJoW3hdKTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCQlpZiAoZ2ZzMl9tZXRhdHlwZV9jaGVjayhzZHAsIGJoW3hdLCBHRlMyX01FVEFUWVBFX0VEKSkgewotCQkJZm9yICg7IHggPCBucHRyczsgeCsrKQotCQkJCWJyZWxzZShiaFt4XSk7Ci0JCQllcnJvciA9IC1FSU87Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQotCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgYmhbeF0sIDEpOwotCi0JCW1lbWNweShiaFt4XS0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyKSwgZGF0YSwKLQkJICAgICAgIChzZHAtPnNkX2pic2l6ZSA+IGFtb3VudCkgPyBhbW91bnQgOiBzZHAtPnNkX2pic2l6ZSk7Ci0KLQkJYW1vdW50IC09IHNkcC0+c2RfamJzaXplOwotCQlkYXRhICs9IHNkcC0+c2RfamJzaXplOwotCi0JCWJyZWxzZShiaFt4XSk7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUoYmgpOwotCXJldHVybiBlcnJvcjsKLQotZmFpbDoKLQlnZnMyX3RyYW5zX2VuZChzZHApOwotCWtmcmVlKGJoKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWludCBnZnMyX2VhX2FjbF9jaG1vZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCwKLQkJICAgICAgc3RydWN0IGlhdHRyICphdHRyLCBjaGFyICpkYXRhKQotewotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoR0ZTMl9FQV9JU19TVFVGRkVEKGVsLT5lbF9lYSkpIHsKLQkJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgUkVTX0RJTk9ERSArIFJFU19FQVRUUiwgMCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQotCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZWwtPmVsX2JoLCAxKTsKLQkJbWVtY3B5KEdGUzJfRUEyREFUQShlbC0+ZWxfZWEpLCBkYXRhLAotCQkgICAgICAgR0ZTMl9FQV9EQVRBX0xFTihlbC0+ZWxfZWEpKTsKLQl9IGVsc2UKLQkJZXJyb3IgPSBlYV9hY2xfY2htb2RfdW5zdHVmZmVkKGlwLCBlbC0+ZWxfZWEsIGRhdGEpOwotCi0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKLQlpZiAoIWVycm9yKSB7Ci0JCWVycm9yID0gaW5vZGVfc2V0YXR0cigmaXAtPmlfaW5vZGUsIGF0dHIpOwotCQlnZnMyX2Fzc2VydF93YXJuKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgIWVycm9yKTsKLQkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOwotCQlnZnMyX2Rpbm9kZV9vdXQoaXAsIGRpYmgtPmJfZGF0YSk7Ci0JCWJyZWxzZShkaWJoKTsKLQl9Ci0KLQlnZnMyX3RyYW5zX2VuZChHRlMyX1NCKCZpcC0+aV9pbm9kZSkpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGVhX2RlYWxsb2NfaW5kaXJlY3Qoc3RydWN0IGdmczJfaW5vZGUgKmlwKQotewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmaXAtPmlfaW5vZGUpOwotCXN0cnVjdCBnZnMyX3JncnBfbGlzdCBybGlzdDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmluZGJoLCAqZGliaDsKLQlfX2JlNjQgKmVhYmxrLCAqZW5kOwotCXVuc2lnbmVkIGludCByZ19ibG9ja3MgPSAwOwotCXU2NCBic3RhcnQgPSAwOwotCXVuc2lnbmVkIGludCBibGVuID0gMDsKLQl1bnNpZ25lZCBpbnQgYmxrcyA9IDA7Ci0JdW5zaWduZWQgaW50IHg7Ci0JaW50IGVycm9yOwotCi0JbWVtc2V0KCZybGlzdCwgMCwgc2l6ZW9mKHN0cnVjdCBnZnMyX3JncnBfbGlzdCkpOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfcmVhZChpcC0+aV9nbCwgaXAtPmlfZWF0dHIsIERJT19XQUlULCAmaW5kYmgpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JaWYgKGdmczJfbWV0YXR5cGVfY2hlY2soc2RwLCBpbmRiaCwgR0ZTMl9NRVRBVFlQRV9JTikpIHsKLQkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllYWJsayA9IChfX2JlNjQgKikoaW5kYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlcikpOwotCWVuZCA9IGVhYmxrICsgc2RwLT5zZF9pbnB0cnM7Ci0KLQlmb3IgKDsgZWFibGsgPCBlbmQ7IGVhYmxrKyspIHsKLQkJdTY0IGJuOwotCi0JCWlmICghKmVhYmxrKQotCQkJYnJlYWs7Ci0JCWJuID0gYmU2NF90b19jcHUoKmVhYmxrKTsKLQotCQlpZiAoYnN0YXJ0ICsgYmxlbiA9PSBibikKLQkJCWJsZW4rKzsKLQkJZWxzZSB7Ci0JCQlpZiAoYnN0YXJ0KQotCQkJCWdmczJfcmxpc3RfYWRkKHNkcCwgJnJsaXN0LCBic3RhcnQpOwotCQkJYnN0YXJ0ID0gYm47Ci0JCQlibGVuID0gMTsKLQkJfQotCQlibGtzKys7Ci0JfQotCWlmIChic3RhcnQpCi0JCWdmczJfcmxpc3RfYWRkKHNkcCwgJnJsaXN0LCBic3RhcnQpOwotCWVsc2UKLQkJZ290byBvdXQ7Ci0KLQlnZnMyX3JsaXN0X2FsbG9jKCZybGlzdCwgTE1fU1RfRVhDTFVTSVZFKTsKLQotCWZvciAoeCA9IDA7IHggPCBybGlzdC5ybF9yZ3JwczsgeCsrKSB7Ci0JCXN0cnVjdCBnZnMyX3JncnBkICpyZ2Q7Ci0JCXJnZCA9IHJsaXN0LnJsX2doc1t4XS5naF9nbC0+Z2xfb2JqZWN0OwotCQlyZ19ibG9ja3MgKz0gcmdkLT5yZF9sZW5ndGg7Ci0JfQotCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xX20ocmxpc3QucmxfcmdycHMsIHJsaXN0LnJsX2docyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9ybGlzdF9mcmVlOwotCi0JZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgcmdfYmxvY2tzICsgUkVTX0RJTk9ERSArIFJFU19JTkRJUkVDVCArCi0JCQkJIFJFU19TVEFURlMgKyBSRVNfUVVPVEEsIGJsa3MpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZ3VubG9jazsKLQotCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBpbmRiaCwgMSk7Ci0KLQllYWJsayA9IChfX2JlNjQgKikoaW5kYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlcikpOwotCWJzdGFydCA9IDA7Ci0JYmxlbiA9IDA7Ci0KLQlmb3IgKDsgZWFibGsgPCBlbmQ7IGVhYmxrKyspIHsKLQkJdTY0IGJuOwotCi0JCWlmICghKmVhYmxrKQotCQkJYnJlYWs7Ci0JCWJuID0gYmU2NF90b19jcHUoKmVhYmxrKTsKLQotCQlpZiAoYnN0YXJ0ICsgYmxlbiA9PSBibikKLQkJCWJsZW4rKzsKLQkJZWxzZSB7Ci0JCQlpZiAoYnN0YXJ0KQotCQkJCWdmczJfZnJlZV9tZXRhKGlwLCBic3RhcnQsIGJsZW4pOwotCQkJYnN0YXJ0ID0gYm47Ci0JCQlibGVuID0gMTsKLQkJfQotCi0JCSplYWJsayA9IDA7Ci0JCWdmczJfYWRkX2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUsIC0xKTsKLQl9Ci0JaWYgKGJzdGFydCkKLQkJZ2ZzMl9mcmVlX21ldGEoaXAsIGJzdGFydCwgYmxlbik7Ci0KLQlpcC0+aV9kaXNrZmxhZ3MgJj0gfkdGUzJfRElGX0VBX0lORElSRUNUOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7Ci0JaWYgKCFlcnJvcikgewotCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7Ci0JCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKLQkJYnJlbHNlKGRpYmgpOwotCX0KLQotCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci0KLW91dF9ndW5sb2NrOgotCWdmczJfZ2xvY2tfZHFfbShybGlzdC5ybF9yZ3Jwcywgcmxpc3QucmxfZ2hzKTsKLW91dF9ybGlzdF9mcmVlOgotCWdmczJfcmxpc3RfZnJlZSgmcmxpc3QpOwotb3V0OgotCWJyZWxzZShpbmRiaCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IGVhX2RlYWxsb2NfYmxvY2soc3RydWN0IGdmczJfaW5vZGUgKmlwKQotewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmaXAtPmlfaW5vZGUpOwotCXN0cnVjdCBnZnMyX2FsbG9jICphbCA9IGlwLT5pX2FsbG9jOwotCXN0cnVjdCBnZnMyX3JncnBkICpyZ2Q7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOwotCWludCBlcnJvcjsKLQotCXJnZCA9IGdmczJfYmxrMnJncnBkKHNkcCwgaXAtPmlfZWF0dHIpOwotCWlmICghcmdkKSB7Ci0JCWdmczJfY29uc2lzdF9pbm9kZShpcCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHJnZC0+cmRfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwKLQkJCQkgICAmYWwtPmFsX3JnZF9naCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCBSRVNfUkdfQklUICsgUkVTX0RJTk9ERSArIFJFU19TVEFURlMgKwotCQkJCSBSRVNfUVVPVEEsIDEpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZ3VubG9jazsKLQotCWdmczJfZnJlZV9tZXRhKGlwLCBpcC0+aV9lYXR0ciwgMSk7Ci0KLQlpcC0+aV9lYXR0ciA9IDA7Ci0JZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSwgLTEpOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7Ci0JaWYgKCFlcnJvcikgewotCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7Ci0JCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKLQkJYnJlbHNlKGRpYmgpOwotCX0KLQotCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci0KLW91dF9ndW5sb2NrOgotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZhbC0+YWxfcmdkX2doKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qKgotICogZ2ZzMl9lYV9kZWFsbG9jIC0gZGVhbGxvY2F0ZSB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIGZvcmsKLSAqIEBpcDogdGhlIGlub2RlCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1pbnQgZ2ZzMl9lYV9kZWFsbG9jKHN0cnVjdCBnZnMyX2lub2RlICppcCkKLXsKLQlzdHJ1Y3QgZ2ZzMl9hbGxvYyAqYWw7Ci0JaW50IGVycm9yOwotCi0JYWwgPSBnZnMyX2FsbG9jX2dldChpcCk7Ci0JaWYgKCFhbCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQllcnJvciA9IGdmczJfcXVvdGFfaG9sZChpcCwgTk9fUVVPVEFfQ0hBTkdFLCBOT19RVU9UQV9DSEFOR0UpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfYWxsb2M7Ci0KLQllcnJvciA9IGdmczJfcmluZGV4X2hvbGQoR0ZTMl9TQigmaXAtPmlfaW5vZGUpLCAmYWwtPmFsX3JpX2doKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3F1b3RhOwotCi0JZXJyb3IgPSBlYV9mb3JlYWNoKGlwLCBlYV9kZWFsbG9jX3Vuc3R1ZmZlZCwgTlVMTCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9yaW5kZXg7Ci0KLQlpZiAoaXAtPmlfZGlza2ZsYWdzICYgR0ZTMl9ESUZfRUFfSU5ESVJFQ1QpIHsKLQkJZXJyb3IgPSBlYV9kZWFsbG9jX2luZGlyZWN0KGlwKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfcmluZGV4OwotCX0KLQotCWVycm9yID0gZWFfZGVhbGxvY19ibG9jayhpcCk7Ci0KLW91dF9yaW5kZXg6Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJmFsLT5hbF9yaV9naCk7Ci1vdXRfcXVvdGE6Ci0JZ2ZzMl9xdW90YV91bmhvbGQoaXApOwotb3V0X2FsbG9jOgotCWdmczJfYWxsb2NfcHV0KGlwKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvZWF0dHIuaCBiL2ZzL2dmczIvZWF0dHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgyZGJlMC4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2VhdHRyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2lmbmRlZiBfX0VBVFRSX0RPVF9IX18KLSNkZWZpbmUgX19FQVRUUl9ET1RfSF9fCi0KLXN0cnVjdCBnZnMyX2lub2RlOwotc3RydWN0IGlhdHRyOwotCi0jZGVmaW5lIEdGUzJfRUFfUkVDX0xFTihlYSkgYmUzMl90b19jcHUoKGVhKS0+ZWFfcmVjX2xlbikKLSNkZWZpbmUgR0ZTMl9FQV9EQVRBX0xFTihlYSkgYmUzMl90b19jcHUoKGVhKS0+ZWFfZGF0YV9sZW4pCi0KLSNkZWZpbmUgR0ZTMl9FQV9TSVpFKGVhKSBcCi1BTElHTihzaXplb2Yoc3RydWN0IGdmczJfZWFfaGVhZGVyKSArIChlYSktPmVhX25hbWVfbGVuICsgXAotICAgICAgKChHRlMyX0VBX0lTX1NUVUZGRUQoZWEpKSA/IEdGUzJfRUFfREFUQV9MRU4oZWEpIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplb2YoX19iZTY0KSAqIChlYSktPmVhX251bV9wdHJzKSksIDgpCi0KLSNkZWZpbmUgR0ZTMl9FQV9JU19TVFVGRkVEKGVhKSAoIShlYSktPmVhX251bV9wdHJzKQotI2RlZmluZSBHRlMyX0VBX0lTX0xBU1QoZWEpICgoZWEpLT5lYV9mbGFncyAmIEdGUzJfRUFGTEFHX0xBU1QpCi0KLSNkZWZpbmUgR0ZTMl9FQVJFUV9TSVpFX1NUVUZGRUQoZXIpIFwKLUFMSUdOKHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIpICsgKGVyKS0+ZXJfbmFtZV9sZW4gKyAoZXIpLT5lcl9kYXRhX2xlbiwgOCkKLQotI2RlZmluZSBHRlMyX0VBUkVRX1NJWkVfVU5TVFVGRkVEKHNkcCwgZXIpIFwKLUFMSUdOKHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIpICsgKGVyKS0+ZXJfbmFtZV9sZW4gKyBcCi0gICAgICBzaXplb2YoX19iZTY0KSAqIERJVl9ST1VORF9VUCgoZXIpLT5lcl9kYXRhX2xlbiwgKHNkcCktPnNkX2pic2l6ZSksIDgpCi0KLSNkZWZpbmUgR0ZTMl9FQTJOQU1FKGVhKSAoKGNoYXIgKikoKHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqKShlYSkgKyAxKSkKLSNkZWZpbmUgR0ZTMl9FQTJEQVRBKGVhKSAoR0ZTMl9FQTJOQU1FKGVhKSArIChlYSktPmVhX25hbWVfbGVuKQotCi0jZGVmaW5lIEdGUzJfRUEyREFUQVBUUlMoZWEpIFwKLSgoX19iZTY0ICopKEdGUzJfRUEyTkFNRShlYSkgKyBBTElHTigoZWEpLT5lYV9uYW1lX2xlbiwgOCkpKQotCi0jZGVmaW5lIEdGUzJfRUEyTkVYVChlYSkgXAotKChzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKikoKGNoYXIgKikoZWEpICsgR0ZTMl9FQV9SRUNfTEVOKGVhKSkpCi0KLSNkZWZpbmUgR0ZTMl9FQV9CSDJGSVJTVChiaCkgXAotKChzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKikoKGJoKS0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyKSkpCi0KLSNkZWZpbmUgR0ZTMl9FUkZfTU9ERSAweDgwMDAwMDAwCi0KLXN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgewotCWNvbnN0IGNoYXIgKmVyX25hbWU7Ci0JY2hhciAqZXJfZGF0YTsKLQl1bnNpZ25lZCBpbnQgZXJfbmFtZV9sZW47Ci0JdW5zaWduZWQgaW50IGVyX2RhdGFfbGVuOwotCXVuc2lnbmVkIGludCBlcl90eXBlOyAvKiBHRlMyX0VBVFlQRV8uLi4gKi8KLQlpbnQgZXJfZmxhZ3M7Ci0JbW9kZV90IGVyX21vZGU7Ci19OwotCi1zdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiB7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICplbF9iaDsKLQlzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKmVsX2VhOwotCXN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWxfcHJldjsKLX07Ci0KLWludCBnZnMyX2VhX2dldF9pKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIpOwotaW50IGdmczJfZWFfc2V0X2koc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcik7Ci1pbnQgZ2ZzMl9lYV9yZW1vdmVfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKTsKLQotaW50IGdmczJfZWFfbGlzdChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKTsKLWludCBnZnMyX2VhX2dldChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKTsKLWludCBnZnMyX2VhX3NldChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKTsKLWludCBnZnMyX2VhX3JlbW92ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKTsKLQotaW50IGdmczJfZWFfZGVhbGxvYyhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApOwotCi0vKiBFeHBvcnRlZCB0byBhY2wuYyAqLwotCi1pbnQgZ2ZzMl9lYV9maW5kKHN0cnVjdCBnZnMyX2lub2RlICppcCwKLQkJIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyLAotCQkgc3RydWN0IGdmczJfZWFfbG9jYXRpb24gKmVsKTsKLWludCBnZnMyX2VhX2dldF9jb3B5KHN0cnVjdCBnZnMyX2lub2RlICppcCwKLQkJICAgICBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwsCi0JCSAgICAgY2hhciAqZGF0YSk7Ci1pbnQgZ2ZzMl9lYV9hY2xfY2htb2Qoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwsCi0JCSAgICAgIHN0cnVjdCBpYXR0ciAqYXR0ciwgY2hhciAqZGF0YSk7Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdmczJfZWFfc3RybGVuKHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWEpCi17Ci0Jc3dpdGNoIChlYS0+ZWFfdHlwZSkgewotCWNhc2UgR0ZTMl9FQVRZUEVfVVNSOgotCQlyZXR1cm4gNSArIGVhLT5lYV9uYW1lX2xlbiArIDE7Ci0JY2FzZSBHRlMyX0VBVFlQRV9TWVM6Ci0JCXJldHVybiA3ICsgZWEtPmVhX25hbWVfbGVuICsgMTsKLQljYXNlIEdGUzJfRUFUWVBFX1NFQ1VSSVRZOgotCQlyZXR1cm4gOSArIGVhLT5lYV9uYW1lX2xlbiArIDE7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi0jZW5kaWYgLyogX19FQVRUUl9ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL2V4cG9ydC5jIGIvZnMvZ2ZzMi9leHBvcnQuYwppbmRleCA5MjAwZWYyLi5kMTU4NzZlIDEwMDY0NAotLS0gYS9mcy9nZnMyL2V4cG9ydC5jCisrKyBiL2ZzL2dmczIvZXhwb3J0LmMKQEAgLTE0MywxNyArMTQzLDE0IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpnZnMyX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJc3RydWN0IGdmczJfaW51bV9ob3N0ICppbnVtKQorCQkJCSAgICAgIHN0cnVjdCBnZnMyX2ludW1faG9zdCAqaW51bSkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHNiLT5zX2ZzX2luZm87Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGlfZ2gsIHJpX2doLCByZ2RfZ2g7Ci0Jc3RydWN0IGdmczJfcmdycGQgKnJnZDsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlpbnQgZXJyb3I7CiAKLQkvKiBTeXN0ZW0gZmlsZXM/ICovCi0KIAlpbm9kZSA9IGdmczJfaWxvb2t1cChzYiwgaW51bS0+bm9fYWRkcik7CiAJaWYgKGlub2RlKSB7CiAJCWlmIChHRlMyX0koaW5vZGUpLT5pX25vX2Zvcm1hbF9pbm8gIT0gaW51bS0+bm9fZm9ybWFsX2lubykgewpAQCAtMTY4LDI5ICsxNjUsMTEgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIAotCWVycm9yID0gZ2ZzMl9yaW5kZXhfaG9sZChzZHAsICZyaV9naCk7CisJZXJyb3IgPSBnZnMyX2NoZWNrX2Jsa190eXBlKHNkcCwgaW51bS0+bm9fYWRkciwgR0ZTMl9CTEtTVF9ESU5PREUpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwogCi0JZXJyb3IgPSAtRUlOVkFMOwotCXJnZCA9IGdmczJfYmxrMnJncnBkKHNkcCwgaW51bS0+bm9fYWRkcik7Ci0JaWYgKCFyZ2QpCi0JCWdvdG8gZmFpbF9yaW5kZXg7Ci0KLQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChyZ2QtPnJkX2dsLCBMTV9TVF9TSEFSRUQsIDAsICZyZ2RfZ2gpOwotCWlmIChlcnJvcikKLQkJZ290byBmYWlsX3JpbmRleDsKLQotCWVycm9yID0gLUVTVEFMRTsKLQlpZiAoZ2ZzMl9nZXRfYmxvY2tfdHlwZShyZ2QsIGludW0tPm5vX2FkZHIpICE9IEdGUzJfQkxLU1RfRElOT0RFKQotCQlnb3RvIGZhaWxfcmdkOwotCi0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJnJnZF9naCk7Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJnJpX2doKTsKLQotCWlub2RlID0gZ2ZzMl9pbm9kZV9sb29rdXAoc2IsIERUX1VOS05PV04sCi0JCQkJCWludW0tPm5vX2FkZHIsCi0JCQkJCTAsIDApOworCWlub2RlID0gZ2ZzMl9pbm9kZV9sb29rdXAoc2IsIERUX1VOS05PV04sIGludW0tPm5vX2FkZHIsIDAsIDApOwogCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCWVycm9yID0gUFRSX0VSUihpbm9kZSk7CiAJCWdvdG8gZmFpbDsKQEAgLTIyNCwxMyArMjAzLDYgQEAKIAlpZiAoIUlTX0VSUihkZW50cnkpKQogCQlkZW50cnktPmRfb3AgPSAmZ2ZzMl9kb3BzOwogCXJldHVybiBkZW50cnk7Ci0KLWZhaWxfcmdkOgotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZyZ2RfZ2gpOwotCi1mYWlsX3JpbmRleDoKLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmcmlfZ2gpOwotCiBmYWlsOgogCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpX2doKTsKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2ZpbGUuYyBiL2ZzL2dmczIvZmlsZS5jCmluZGV4IDczMzE4YTMuLjE2NmYzOGYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZmlsZS5jCisrKyBiL2ZzL2dmczIvZmlsZS5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAicmdycC5oIgogI2luY2x1ZGUgInRyYW5zLmgiCiAjaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgImVhb3BzLmgiCiAKIC8qKgogICogZ2ZzMl9sbHNlZWsgLSBzZWVrIHRvIGEgbG9jYXRpb24gaW4gYSBmaWxlCmRpZmYgLS1naXQgYS9mcy9nZnMyL2luY29yZS5oIGIvZnMvZ2ZzMi9pbmNvcmUuaAppbmRleCA2MTgwMWFkLi42ZWRiNDIzIDEwMDY0NAotLS0gYS9mcy9nZnMyL2luY29yZS5oCisrKyBiL2ZzL2dmczIvaW5jb3JlLmgKQEAgLTQwNiw2ICs0MDYsMTIgQEAKICNkZWZpbmUgR0ZTMl9EQVRBX1dSSVRFQkFDSwkxCiAjZGVmaW5lIEdGUzJfREFUQV9PUkRFUkVECTIKIAorI2RlZmluZSBHRlMyX0VSUk9SU19ERUZBVUxUICAgICBHRlMyX0VSUk9SU19XSVRIRFJBVworI2RlZmluZSBHRlMyX0VSUk9SU19XSVRIRFJBVyAgICAwCisjZGVmaW5lIEdGUzJfRVJST1JTX0NPTlRJTlVFICAgIDEgLyogcGxhY2UgaG9sZGVyIGZvciBmdXR1cmUgZmVhdHVyZSAqLworI2RlZmluZSBHRlMyX0VSUk9SU19STyAgICAgICAgICAyIC8qIHBsYWNlIGhvbGRlciBmb3IgZnV0dXJlIGZlYXR1cmUgKi8KKyNkZWZpbmUgR0ZTMl9FUlJPUlNfUEFOSUMgICAgICAgMworCiBzdHJ1Y3QgZ2ZzMl9hcmdzIHsKIAljaGFyIGFyX2xvY2twcm90b1tHRlMyX0xPQ0tOQU1FX0xFTl07CS8qIE5hbWUgb2YgdGhlIExvY2sgUHJvdG9jb2wgKi8KIAljaGFyIGFyX2xvY2t0YWJsZVtHRlMyX0xPQ0tOQU1FX0xFTl07CS8qIE5hbWUgb2YgdGhlIExvY2sgVGFibGUgKi8KQEAgLTQyMiw2ICs0MjgsNyBAQAogCXVuc2lnbmVkIGludCBhcl9kYXRhOjI7CQkJLyogb3JkZXJlZC93cml0ZWJhY2sgKi8KIAl1bnNpZ25lZCBpbnQgYXJfbWV0YToxOwkJCS8qIG1vdW50IG1ldGFmcyAqLwogCXVuc2lnbmVkIGludCBhcl9kaXNjYXJkOjE7CQkvKiBkaXNjYXJkIHJlcXVlc3RzICovCisJdW5zaWduZWQgaW50IGFyX2Vycm9yczoyOyAgICAgICAgICAgICAgIC8qIGVycm9ycz13aXRoZHJhdyB8IHBhbmljICovCiAJaW50IGFyX2NvbW1pdDsJCQkJLyogQ29tbWl0IGludGVydmFsICovCiB9OwogCkBAIC00ODksNyArNDk2LDYgQEAKICAqLwogCiBzdHJ1Y3QgbG1fbG9ja3N0cnVjdCB7Ci0JdTMyIGxzX2lkOwogCXVuc2lnbmVkIGludCBsc19qaWQ7CiAJdW5zaWduZWQgaW50IGxzX2ZpcnN0OwogCXVuc2lnbmVkIGludCBsc19maXJzdF9kb25lOwpAQCAtNTQxLDE4ICs1NDcsMTIgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpzZF9yb290X2RpcjsKIAogCXN0cnVjdCBpbm9kZSAqc2RfamluZGV4OwotCXN0cnVjdCBpbm9kZSAqc2RfaW51bV9pbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKnNkX3N0YXRmc19pbm9kZTsKLQlzdHJ1Y3QgaW5vZGUgKnNkX2lyX2lub2RlOwogCXN0cnVjdCBpbm9kZSAqc2Rfc2NfaW5vZGU7CiAJc3RydWN0IGlub2RlICpzZF9xY19pbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKnNkX3JpbmRleDsKIAlzdHJ1Y3QgaW5vZGUgKnNkX3F1b3RhX2lub2RlOwogCi0JLyogSW51bSBzdHVmZiAqLwotCi0Jc3RydWN0IG11dGV4IHNkX2ludW1fbXV0ZXg7Ci0KIAkvKiBTdGF0RlMgc3R1ZmYgKi8KIAogCXNwaW5sb2NrX3Qgc2Rfc3RhdGZzX3NwaW47CkBAIC01ODAsNyArNTgwLDYgQEAKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgc2Rfam91cm5hbF9naDsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgc2Rfamlub2RlX2doOwogCi0Jc3RydWN0IGdmczJfaG9sZGVyIHNkX2lyX2doOwogCXN0cnVjdCBnZnMyX2hvbGRlciBzZF9zY19naDsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgc2RfcWNfZ2g7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuYwppbmRleCAyZjk0YmQ3Li5mYjE1ZDNiMSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCisrKyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgImFjbC5oIgogI2luY2x1ZGUgImJtYXAuaCIKICNpbmNsdWRlICJkaXIuaCIKLSNpbmNsdWRlICJlYXR0ci5oIgorI2luY2x1ZGUgInhhdHRyLmgiCiAjaW5jbHVkZSAiZ2xvY2suaCIKICNpbmNsdWRlICJnbG9wcy5oIgogI2luY2x1ZGUgImlub2RlLmgiCkBAIC01MTksMTM5ICs1MTksNiBAQAogCXJldHVybiBpbm9kZSA/IGlub2RlIDogRVJSX1BUUihlcnJvcik7CiB9CiAKLXN0YXRpYyB2b2lkIGdmczJfaW51bV9yYW5nZV9pbihzdHJ1Y3QgZ2ZzMl9pbnVtX3JhbmdlX2hvc3QgKmlyLCBjb25zdCB2b2lkICpidWYpCi17Ci0JY29uc3Qgc3RydWN0IGdmczJfaW51bV9yYW5nZSAqc3RyID0gYnVmOwotCi0JaXItPmlyX3N0YXJ0ID0gYmU2NF90b19jcHUoc3RyLT5pcl9zdGFydCk7Ci0JaXItPmlyX2xlbmd0aCA9IGJlNjRfdG9fY3B1KHN0ci0+aXJfbGVuZ3RoKTsKLX0KLQotc3RhdGljIHZvaWQgZ2ZzMl9pbnVtX3JhbmdlX291dChjb25zdCBzdHJ1Y3QgZ2ZzMl9pbnVtX3JhbmdlX2hvc3QgKmlyLCB2b2lkICpidWYpCi17Ci0Jc3RydWN0IGdmczJfaW51bV9yYW5nZSAqc3RyID0gYnVmOwotCi0Jc3RyLT5pcl9zdGFydCA9IGNwdV90b19iZTY0KGlyLT5pcl9zdGFydCk7Ci0Jc3RyLT5pcl9sZW5ndGggPSBjcHVfdG9fYmU2NChpci0+aXJfbGVuZ3RoKTsKLX0KLQotc3RhdGljIGludCBwaWNrX2Zvcm1hbF9pbm9fMShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdTY0ICpmb3JtYWxfaW5vKQotewotCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShzZHAtPnNkX2lyX2lub2RlKTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXN0cnVjdCBnZnMyX2ludW1fcmFuZ2VfaG9zdCBpcjsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCBSRVNfRElOT0RFLCAwKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQltdXRleF9sb2NrKCZzZHAtPnNkX2ludW1fbXV0ZXgpOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmYmgpOwotCWlmIChlcnJvcikgewotCQltdXRleF91bmxvY2soJnNkcC0+c2RfaW51bV9tdXRleCk7Ci0JCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlnZnMyX2ludW1fcmFuZ2VfaW4oJmlyLCBiaC0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkpOwotCi0JaWYgKGlyLmlyX2xlbmd0aCkgewotCQkqZm9ybWFsX2lubyA9IGlyLmlyX3N0YXJ0Kys7Ci0JCWlyLmlyX2xlbmd0aC0tOwotCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgYmgsIDEpOwotCQlnZnMyX2ludW1fcmFuZ2Vfb3V0KCZpciwKLQkJCQkgICAgYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpKTsKLQkJYnJlbHNlKGJoKTsKLQkJbXV0ZXhfdW5sb2NrKCZzZHAtPnNkX2ludW1fbXV0ZXgpOwotCQlnZnMyX3RyYW5zX2VuZChzZHApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlicmVsc2UoYmgpOwotCi0JbXV0ZXhfdW5sb2NrKCZzZHAtPnNkX2ludW1fbXV0ZXgpOwotCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBwaWNrX2Zvcm1hbF9pbm9fMihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdTY0ICpmb3JtYWxfaW5vKQotewotCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShzZHAtPnNkX2lyX2lub2RlKTsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqbV9pcCA9IEdGUzJfSShzZHAtPnNkX2ludW1faW5vZGUpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXN0cnVjdCBnZnMyX2ludW1fcmFuZ2VfaG9zdCBpcjsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChtX2lwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZnaCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCAyICogUkVTX0RJTk9ERSwgMCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQltdXRleF9sb2NrKCZzZHAtPnNkX2ludW1fbXV0ZXgpOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmYmgpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZW5kX3RyYW5zOwotCi0JZ2ZzMl9pbnVtX3JhbmdlX2luKCZpciwgYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpKTsKLQotCWlmICghaXIuaXJfbGVuZ3RoKSB7Ci0JCXN0cnVjdCBidWZmZXJfaGVhZCAqbV9iaDsKLQkJdTY0IHgsIHk7Ci0JCV9fYmU2NCB6OwotCi0JCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihtX2lwLCAmbV9iaCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2JyZWxzZTsKLQotCQl6ID0gKihfX2JlNjQgKikobV9iaC0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkpOwotCQl4ID0geSA9IGJlNjRfdG9fY3B1KHopOwotCQlpci5pcl9zdGFydCA9IHg7Ci0JCWlyLmlyX2xlbmd0aCA9IEdGUzJfSU5VTV9RVUFOVFVNOwotCQl4ICs9IEdGUzJfSU5VTV9RVUFOVFVNOwotCQlpZiAoeCA8IHkpCi0JCQlnZnMyX2NvbnNpc3RfaW5vZGUobV9pcCk7Ci0JCXogPSBjcHVfdG9fYmU2NCh4KTsKLQkJZ2ZzMl90cmFuc19hZGRfYmgobV9pcC0+aV9nbCwgbV9iaCwgMSk7Ci0JCSooX19iZTY0ICopKG1fYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpKSA9IHo7Ci0KLQkJYnJlbHNlKG1fYmgpOwotCX0KLQotCSpmb3JtYWxfaW5vID0gaXIuaXJfc3RhcnQrKzsKLQlpci5pcl9sZW5ndGgtLTsKLQotCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBiaCwgMSk7Ci0JZ2ZzMl9pbnVtX3JhbmdlX291dCgmaXIsIGJoLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSk7Ci0KLW91dF9icmVsc2U6Ci0JYnJlbHNlKGJoKTsKLW91dF9lbmRfdHJhbnM6Ci0JbXV0ZXhfdW5sb2NrKCZzZHAtPnNkX2ludW1fbXV0ZXgpOwotCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci1vdXQ6Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJmdoKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgcGlja19mb3JtYWxfaW5vKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1NjQgKmludW0pCi17Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBwaWNrX2Zvcm1hbF9pbm9fMShzZHAsIGludW0pOwotCWlmIChlcnJvciA8PSAwKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQllcnJvciA9IHBpY2tfZm9ybWFsX2lub18yKHNkcCwgaW51bSk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KIC8qKgogICogY3JlYXRlX29rIC0gT0sgdG8gY3JlYXRlIGEgbmV3IG9uLWRpc2sgaW5vZGUgaGVyZT8KICAqIEBkaXA6ICBEaXJlY3RvcnkgaW4gd2hpY2ggZGlub2RlIGlzIHRvIGJlIGNyZWF0ZWQKQEAgLTczMSw3ICs1OTgsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXRfaXByZXNlcnY7CiAKLQkqbm9fYWRkciA9IGdmczJfYWxsb2NfZGkoZGlwLCBnZW5lcmF0aW9uKTsKKwllcnJvciA9IGdmczJfYWxsb2NfZGkoZGlwLCBub19hZGRyLCBnZW5lcmF0aW9uKTsKIAogCWdmczJfdHJhbnNfZW5kKHNkcCk7CiAKQEAgLTkyNCw3ICs3OTEsNiBAQAogCXNpemVfdCBsZW47CiAJdm9pZCAqdmFsdWU7CiAJY2hhciAqbmFtZTsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IGVyOwogCiAJZXJyID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSgmaXAtPmlfaW5vZGUsICZkaXAtPmlfaW5vZGUsCiAJCQkJCSAgICZuYW1lLCAmdmFsdWUsICZsZW4pOwpAQCAtOTM1LDE2ICs4MDEsNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCW1lbXNldCgmZXIsIDAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0KSk7Ci0KLQllci5lcl90eXBlID0gR0ZTMl9FQVRZUEVfU0VDVVJJVFk7Ci0JZXIuZXJfbmFtZSA9IG5hbWU7Ci0JZXIuZXJfZGF0YSA9IHZhbHVlOwotCWVyLmVyX25hbWVfbGVuID0gc3RybGVuKG5hbWUpOwotCWVyLmVyX2RhdGFfbGVuID0gbGVuOwotCi0JZXJyID0gZ2ZzMl9lYV9zZXRfaShpcCwgJmVyKTsKLQorCWVyciA9IGdmczJfeGF0dHJfc2V0KCZpcC0+aV9pbm9kZSwgR0ZTMl9FQVRZUEVfU0VDVVJJVFksIG5hbWUsIHZhbHVlLCBsZW4sIDApOwogCWtmcmVlKHZhbHVlKTsKIAlrZnJlZShuYW1lKTsKIApAQCAtOTkxLDEzICs4NDgsMTAgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbF9ndW5sb2NrOwogCi0JZXJyb3IgPSBwaWNrX2Zvcm1hbF9pbm8oc2RwLCAmaW51bS5ub19mb3JtYWxfaW5vKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbF9ndW5sb2NrOwotCiAJZXJyb3IgPSBhbGxvY19kaW5vZGUoZGlwLCAmaW51bS5ub19hZGRyLCAmZ2VuZXJhdGlvbik7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWxfZ3VubG9jazsKKwlpbnVtLm5vX2Zvcm1hbF9pbm8gPSBnZW5lcmF0aW9uOwogCiAJZXJyb3IgPSBnZnMyX2dsb2NrX25xX251bShzZHAsIGludW0ubm9fYWRkciwgJmdmczJfaW5vZGVfZ2xvcHMsCiAJCQkJICBMTV9TVF9FWENMVVNJVkUsIEdMX1NLSVAsIGdocyArIDEpOwpAQCAtMTAwOCw5ICs4NjIsOCBAQAogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX2d1bmxvY2syOwogCi0JaW5vZGUgPSBnZnMyX2lub2RlX2xvb2t1cChkaXItPmlfc2IsIElGMkRUKG1vZGUpLAotCQkJCQlpbnVtLm5vX2FkZHIsCi0JCQkJCWludW0ubm9fZm9ybWFsX2lubywgMCk7CisJaW5vZGUgPSBnZnMyX2lub2RlX2xvb2t1cChkaXItPmlfc2IsIElGMkRUKG1vZGUpLCBpbnVtLm5vX2FkZHIsCisJCQkJICBpbnVtLm5vX2Zvcm1hbF9pbm8sIDApOwogCWlmIChJU19FUlIoaW5vZGUpKQogCQlnb3RvIGZhaWxfZ3VubG9jazI7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKaW5kZXggN2JjM2M0NS4uNTJmYjZjMCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKQEAgLTg0LDcgKzg0LDYgQEAKIAogCWdmczJfdHVuZV9pbml0KCZzZHAtPnNkX3R1bmUpOwogCi0JbXV0ZXhfaW5pdCgmc2RwLT5zZF9pbnVtX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmc2RwLT5zZF9zdGF0ZnNfc3Bpbik7CiAKIAlzcGluX2xvY2tfaW5pdCgmc2RwLT5zZF9yaW5kZXhfc3Bpbik7CkBAIC04MzMsMjEgKzgzMiwxMiBAQAogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwogCi0JLyogUmVhZCBpbiB0aGUgbWFzdGVyIGlub2RlIG51bWJlciBpbm9kZSAqLwotCXNkcC0+c2RfaW51bV9pbm9kZSA9IGdmczJfbG9va3VwX3NpbXBsZShtYXN0ZXIsICJpbnVtIik7Ci0JaWYgKElTX0VSUihzZHAtPnNkX2ludW1faW5vZGUpKSB7Ci0JCWVycm9yID0gUFRSX0VSUihzZHAtPnNkX2ludW1faW5vZGUpOwotCQlmc19lcnIoc2RwLCAiY2FuJ3QgcmVhZCBpbiBpbnVtIGlub2RlOiAlZFxuIiwgZXJyb3IpOwotCQlnb3RvIGZhaWxfam91cm5hbDsKLQl9Ci0KLQogCS8qIFJlYWQgaW4gdGhlIG1hc3RlciBzdGF0ZnMgaW5vZGUgKi8KIAlzZHAtPnNkX3N0YXRmc19pbm9kZSA9IGdmczJfbG9va3VwX3NpbXBsZShtYXN0ZXIsICJzdGF0ZnMiKTsKIAlpZiAoSVNfRVJSKHNkcC0+c2Rfc3RhdGZzX2lub2RlKSkgewogCQllcnJvciA9IFBUUl9FUlIoc2RwLT5zZF9zdGF0ZnNfaW5vZGUpOwogCQlmc19lcnIoc2RwLCAiY2FuJ3QgcmVhZCBpbiBzdGF0ZnMgaW5vZGU6ICVkXG4iLCBlcnJvcik7Ci0JCWdvdG8gZmFpbF9pbnVtOworCQlnb3RvIGZhaWxfam91cm5hbDsKIAl9CiAKIAkvKiBSZWFkIGluIHRoZSByZXNvdXJjZSBpbmRleCBpbm9kZSAqLwpAQCAtODc2LDggKzg2Niw2IEBACiAJaXB1dChzZHAtPnNkX3JpbmRleCk7CiBmYWlsX3N0YXRmczoKIAlpcHV0KHNkcC0+c2Rfc3RhdGZzX2lub2RlKTsKLWZhaWxfaW51bToKLQlpcHV0KHNkcC0+c2RfaW51bV9pbm9kZSk7CiBmYWlsX2pvdXJuYWw6CiAJaW5pdF9qb3VybmFsKHNkcCwgVU5ETyk7CiBmYWlsOgpAQCAtOTA1LDIwICs4OTMsMTIgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCXNwcmludGYoYnVmLCAiaW51bV9yYW5nZSV1Iiwgc2RwLT5zZF9qZGVzYy0+amRfamlkKTsKLQlzZHAtPnNkX2lyX2lub2RlID0gZ2ZzMl9sb29rdXBfc2ltcGxlKHBuLCBidWYpOwotCWlmIChJU19FUlIoc2RwLT5zZF9pcl9pbm9kZSkpIHsKLQkJZXJyb3IgPSBQVFJfRVJSKHNkcC0+c2RfaXJfaW5vZGUpOwotCQlmc19lcnIoc2RwLCAiY2FuJ3QgZmluZCBsb2NhbCBcImlyXCIgZmlsZTogJWRcbiIsIGVycm9yKTsKLQkJZ290byBmYWlsOwotCX0KLQogCXNwcmludGYoYnVmLCAic3RhdGZzX2NoYW5nZSV1Iiwgc2RwLT5zZF9qZGVzYy0+amRfamlkKTsKIAlzZHAtPnNkX3NjX2lub2RlID0gZ2ZzMl9sb29rdXBfc2ltcGxlKHBuLCBidWYpOwogCWlmIChJU19FUlIoc2RwLT5zZF9zY19pbm9kZSkpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKHNkcC0+c2Rfc2NfaW5vZGUpOwogCQlmc19lcnIoc2RwLCAiY2FuJ3QgZmluZCBsb2NhbCBcInNjXCIgZmlsZTogJWRcbiIsIGVycm9yKTsKLQkJZ290byBmYWlsX2lyX2k7CisJCWdvdG8gZmFpbDsKIAl9CiAKIAlzcHJpbnRmKGJ1ZiwgInF1b3RhX2NoYW5nZSV1Iiwgc2RwLT5zZF9qZGVzYy0+amRfamlkKTsKQEAgLTkzMiwyNyArOTEyLDE2IEBACiAJaXB1dChwbik7CiAJcG4gPSBOVUxMOwogCi0JaXAgPSBHRlMyX0koc2RwLT5zZF9pcl9pbm9kZSk7Ci0JZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsCi0JCQkJICAgTE1fU1RfRVhDTFVTSVZFLCAwLAotCQkJCSAgICZzZHAtPnNkX2lyX2doKTsKLQlpZiAoZXJyb3IpIHsKLQkJZnNfZXJyKHNkcCwgImNhbid0IGxvY2sgbG9jYWwgXCJpclwiIGZpbGU6ICVkXG4iLCBlcnJvcik7Ci0JCWdvdG8gZmFpbF9xY19pOwotCX0KLQogCWlwID0gR0ZTMl9JKHNkcC0+c2Rfc2NfaW5vZGUpOwotCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLAotCQkJCSAgIExNX1NUX0VYQ0xVU0lWRSwgMCwKKwllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLAogCQkJCSAgICZzZHAtPnNkX3NjX2doKTsKIAlpZiAoZXJyb3IpIHsKIAkJZnNfZXJyKHNkcCwgImNhbid0IGxvY2sgbG9jYWwgXCJzY1wiIGZpbGU6ICVkXG4iLCBlcnJvcik7Ci0JCWdvdG8gZmFpbF9pcl9naDsKKwkJZ290byBmYWlsX3FjX2k7CiAJfQogCiAJaXAgPSBHRlMyX0koc2RwLT5zZF9xY19pbm9kZSk7Ci0JZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsCi0JCQkJICAgTE1fU1RfRVhDTFVTSVZFLCAwLAorCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsCiAJCQkJICAgJnNkcC0+c2RfcWNfZ2gpOwogCWlmIChlcnJvcikgewogCQlmc19lcnIoc2RwLCAiY2FuJ3QgbG9jayBsb2NhbCBcInFjXCIgZmlsZTogJWRcbiIsIGVycm9yKTsKQEAgLTk2NSwxNCArOTM0LDEwIEBACiAJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnNkcC0+c2RfcWNfZ2gpOwogZmFpbF91dF9naDoKIAlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmc2RwLT5zZF9zY19naCk7Ci1mYWlsX2lyX2doOgotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZzZHAtPnNkX2lyX2doKTsKIGZhaWxfcWNfaToKIAlpcHV0KHNkcC0+c2RfcWNfaW5vZGUpOwogZmFpbF91dF9pOgogCWlwdXQoc2RwLT5zZF9zY19pbm9kZSk7Ci1mYWlsX2lyX2k6Ci0JaXB1dChzZHAtPnNkX2lyX2lub2RlKTsKIGZhaWw6CiAJaWYgKHBuKQogCQlpcHV0KHBuKTsKQEAgLTEwNjMsNyArMTAyOCw2IEBACiAKIAlscy0+bHNfb3BzID0gbG07CiAJbHMtPmxzX2ZpcnN0ID0gMTsKLQlscy0+bHNfaWQgPSAwOwogCiAJZm9yIChvcHRpb25zID0gYXJncy0+YXJfaG9zdGRhdGE7IChvID0gc3Ryc2VwKCZvcHRpb25zLCAiOiIpKTsgKSB7CiAJCXN1YnN0cmluZ190IHRtcFtNQVhfT1BUX0FSR1NdOwpAQCAtMTA4MSwxMCArMTA0NSw3IEBACiAJCQlscy0+bHNfamlkID0gb3B0aW9uOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2lkOgotCQkJcmV0ID0gbWF0Y2hfaW50KCZ0bXBbMF0sICZvcHRpb24pOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGhvc3RkYXRhX2Vycm9yOwotCQkJbHMtPmxzX2lkID0gb3B0aW9uOworCQkJLyogT2Jzb2xldGUsIGJ1dCBsZWZ0IGZvciBiYWNrd2FyZCBjb21wYXQgcHVycG9zZXMgKi8KIAkJCWJyZWFrOwogCQljYXNlIE9wdF9maXJzdDoKIAkJCXJldCA9IG1hdGNoX2ludCgmdG1wWzBdLCAmb3B0aW9uKTsKQEAgLTExMzMsNiArMTA5NCwxNyBAQAogCQlsbS0+bG1fdW5tb3VudChzZHApOwogfQogCit2b2lkIGdmczJfb25saW5lX3VldmVudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gc2RwLT5zZF92ZnM7CisJY2hhciByb1syMF07CisJY2hhciBzcGVjdGF0b3JbMjBdOworCWNoYXIgKmVudnBbXSA9IHsgcm8sIHNwZWN0YXRvciwgTlVMTCB9OworCXNwcmludGYocm8sICJSRE9OTFk9JWQiLCAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpID8gMSA6IDApOworCXNwcmludGYoc3BlY3RhdG9yLCAiU1BFQ1RBVE9SPSVkIiwgc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvciA/IDEgOiAwKTsKKwlrb2JqZWN0X3VldmVudF9lbnYoJnNkcC0+c2Rfa29iaiwgS09CSl9PTkxJTkUsIGVudnApOworfQorCiAvKioKICAqIGZpbGxfc3VwZXIgLSBSZWFkIGluIHN1cGVyYmxvY2sKICAqIEBzYjogVGhlIFZGUyBzdXBlcmJsb2NrCkBAIC0xMTU3LDYgKzExMjksNyBAQAogCXNkcC0+c2RfYXJncy5hcl9xdW90YSA9IEdGUzJfUVVPVEFfREVGQVVMVDsKIAlzZHAtPnNkX2FyZ3MuYXJfZGF0YSA9IEdGUzJfREFUQV9ERUZBVUxUOwogCXNkcC0+c2RfYXJncy5hcl9jb21taXQgPSA2MDsKKwlzZHAtPnNkX2FyZ3MuYXJfZXJyb3JzID0gR0ZTMl9FUlJPUlNfREVGQVVMVDsKIAogCWVycm9yID0gZ2ZzMl9tb3VudF9hcmdzKHNkcCwgJnNkcC0+c2RfYXJncywgZGF0YSk7CiAJaWYgKGVycm9yKSB7CkBAIC0xMTc0LDYgKzExNDcsNyBAQAogCXNiLT5zX21hZ2ljID0gR0ZTMl9NQUdJQzsKIAlzYi0+c19vcCA9ICZnZnMyX3N1cGVyX29wczsKIAlzYi0+c19leHBvcnRfb3AgPSAmZ2ZzMl9leHBvcnRfb3BzOworCXNiLT5zX3hhdHRyID0gZ2ZzMl94YXR0cl9oYW5kbGVyczsKIAlzYi0+c190aW1lX2dyYW4gPSAxOwogCXNiLT5zX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTsKIApAQCAtMTIzNiw3ICsxMjEwLDcgQEAKIAl9CiAKIAlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmbW91bnRfZ2gpOwotCisJZ2ZzMl9vbmxpbmVfdWV2ZW50KHNkcCk7CiAJcmV0dXJuIDA7CiAKIGZhaWxfdGhyZWFkczoKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2lub2RlLmMgYi9mcy9nZnMyL29wc19pbm9kZS5jCmluZGV4IGY4YmQyMGIuLmMzYWMxODAgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfaW5vZGUuYwpAQCAtMjYsOCArMjYsNyBAQAogI2luY2x1ZGUgImFjbC5oIgogI2luY2x1ZGUgImJtYXAuaCIKICNpbmNsdWRlICJkaXIuaCIKLSNpbmNsdWRlICJlYW9wcy5oIgotI2luY2x1ZGUgImVhdHRyLmgiCisjaW5jbHVkZSAieGF0dHIuaCIKICNpbmNsdWRlICJnbG9jay5oIgogI2luY2x1ZGUgImlub2RlLmgiCiAjaW5jbHVkZSAibWV0YV9pby5oIgpAQCAtMzQ5LDcgKzM0OCw3IEBACiAKIAllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCAyKlJFU19ESU5PREUgKyBSRVNfTEVBRiArIFJFU19SR19CSVQsIDApOwogCWlmIChlcnJvcikKLQkJZ290byBvdXRfcmdycDsKKwkJZ290byBvdXRfZ3VubG9jazsKIAogCWVycm9yID0gZ2ZzMl9kaXJfZGVsKGRpcCwgJmRlbnRyeS0+ZF9uYW1lKTsKICAgICAgICAgaWYgKGVycm9yKQpAQCAtMTMwMiw2MCArMTMwMSw1MyBAQAogCQkJIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IGVyOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJc3RydWN0IGdmczJfaG9sZGVyIGdoOworCWludCByZXQ7CiAKLQltZW1zZXQoJmVyLCAwLCBzaXplb2Yoc3RydWN0IGdmczJfZWFfcmVxdWVzdCkpOwotCWVyLmVyX3R5cGUgPSBnZnMyX2VhX25hbWUydHlwZShuYW1lLCAmZXIuZXJfbmFtZSk7Ci0JaWYgKGVyLmVyX3R5cGUgPT0gR0ZTMl9FQVRZUEVfVU5VU0VEKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JZXIuZXJfZGF0YSA9IChjaGFyICopZGF0YTsKLQllci5lcl9uYW1lX2xlbiA9IHN0cmxlbihlci5lcl9uYW1lKTsKLQllci5lcl9kYXRhX2xlbiA9IHNpemU7Ci0JZXIuZXJfZmxhZ3MgPSBmbGFnczsKLQotCWdmczJfYXNzZXJ0X3dhcm4oR0ZTMl9TQihpbm9kZSksICEoZXIuZXJfZmxhZ3MgJiBHRlMyX0VSRl9NT0RFKSk7Ci0KLQlyZXR1cm4gZ2ZzMl9lYV9zZXQoR0ZTMl9JKGlub2RlKSwgJmVyKTsKKwlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZnaCk7CisJcmV0ID0gZ2ZzMl9nbG9ja19ucSgmZ2gpOworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSBnZW5lcmljX3NldHhhdHRyKGRlbnRyeSwgbmFtZSwgZGF0YSwgc2l6ZSwgZmxhZ3MpOworCQlnZnMyX2dsb2NrX2RxKCZnaCk7CisJfQorCWdmczJfaG9sZGVyX3VuaW5pdCgmZ2gpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGdmczJfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IGVyOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CisJaW50IHJldDsKIAotCW1lbXNldCgmZXIsIDAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0KSk7Ci0JZXIuZXJfdHlwZSA9IGdmczJfZWFfbmFtZTJ0eXBlKG5hbWUsICZlci5lcl9uYW1lKTsKLQlpZiAoZXIuZXJfdHlwZSA9PSBHRlMyX0VBVFlQRV9VTlVTRUQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQllci5lcl9kYXRhID0gZGF0YTsKLQllci5lcl9uYW1lX2xlbiA9IHN0cmxlbihlci5lcl9uYW1lKTsKLQllci5lcl9kYXRhX2xlbiA9IHNpemU7Ci0KLQlyZXR1cm4gZ2ZzMl9lYV9nZXQoR0ZTMl9JKGRlbnRyeS0+ZF9pbm9kZSksICZlcik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGdmczJfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IGVyOwotCi0JbWVtc2V0KCZlciwgMCwgc2l6ZW9mKHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QpKTsKLQllci5lcl9kYXRhID0gKHNpemUpID8gYnVmZmVyIDogTlVMTDsKLQllci5lcl9kYXRhX2xlbiA9IHNpemU7Ci0KLQlyZXR1cm4gZ2ZzMl9lYV9saXN0KEdGUzJfSShkZW50cnktPmRfaW5vZGUpLCAmZXIpOworCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZnaCk7CisJcmV0ID0gZ2ZzMl9nbG9ja19ucSgmZ2gpOworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSBnZW5lcmljX2dldHhhdHRyKGRlbnRyeSwgbmFtZSwgZGF0YSwgc2l6ZSk7CisJCWdmczJfZ2xvY2tfZHEoJmdoKTsKKwl9CisJZ2ZzMl9ob2xkZXJfdW5pbml0KCZnaCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBnZnMyX3JlbW92ZXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IGVyOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CisJaW50IHJldDsKIAotCW1lbXNldCgmZXIsIDAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0KSk7Ci0JZXIuZXJfdHlwZSA9IGdmczJfZWFfbmFtZTJ0eXBlKG5hbWUsICZlci5lcl9uYW1lKTsKLQlpZiAoZXIuZXJfdHlwZSA9PSBHRlMyX0VBVFlQRV9VTlVTRUQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQllci5lcl9uYW1lX2xlbiA9IHN0cmxlbihlci5lcl9uYW1lKTsKLQotCXJldHVybiBnZnMyX2VhX3JlbW92ZShHRlMyX0koZGVudHJ5LT5kX2lub2RlKSwgJmVyKTsKKwlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZnaCk7CisJcmV0ID0gZ2ZzMl9nbG9ja19ucSgmZ2gpOworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSBnZW5lcmljX3JlbW92ZXhhdHRyKGRlbnRyeSwgbmFtZSk7CisJCWdmczJfZ2xvY2tfZHEoJmdoKTsKKwl9CisJZ2ZzMl9ob2xkZXJfdW5pbml0KCZnaCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBnZnMyX2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmllbWFwX2V4dGVudF9pbmZvICpmaWVpbmZvLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZ3JwLmMgYi9mcy9nZnMyL3JncnAuYwppbmRleCBmYmE3OTU3Li4yOGM1OTBiIDEwMDY0NAotLS0gYS9mcy9nZnMyL3JncnAuYworKysgYi9mcy9nZnMyL3JncnAuYwpAQCAtODU3LDcgKzg1Nyw4IEBACiAJCQkJCWdvdG8gc3RhcnRfbmV3X2V4dGVudDsKIAkJCQlpZiAoKHN0YXJ0ICsgbnJfc2VjdHMpICE9IGJsaykgewogCQkJCQlydiA9IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0LAotCQkJCQkJCSAgICBucl9zZWN0cywgR0ZQX05PRlMpOworCQkJCQkJCSAgICBucl9zZWN0cywgR0ZQX05PRlMsCisJCQkJCQkJICAgIERJU0NBUkRfRkxfQkFSUklFUik7CiAJCQkJCWlmIChydikKIAkJCQkJCWdvdG8gZmFpbDsKIAkJCQkJbnJfc2VjdHMgPSAwOwpAQCAtODcxLDcgKzg3Miw4IEBACiAJCX0KIAl9CiAJaWYgKG5yX3NlY3RzKSB7Ci0JCXJ2ID0gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoYmRldiwgc3RhcnQsIG5yX3NlY3RzLCBHRlBfTk9GUyk7CisJCXJ2ID0gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoYmRldiwgc3RhcnQsIG5yX3NlY3RzLCBHRlBfTk9GUywKKwkJCQkJIERJU0NBUkRfRkxfQkFSUklFUik7CiAJCWlmIChydikKIAkJCWdvdG8gZmFpbDsKIAl9CkBAIC0xMjU2LDcgKzEyNTgsNyBAQAogICogUmV0dXJuczogVGhlIGJsb2NrIHR5cGUgKEdGUzJfQkxLU1RfKikKICAqLwogCi11bnNpZ25lZCBjaGFyIGdmczJfZ2V0X2Jsb2NrX3R5cGUoc3RydWN0IGdmczJfcmdycGQgKnJnZCwgdTY0IGJsb2NrKQorc3RhdGljIHVuc2lnbmVkIGNoYXIgZ2ZzMl9nZXRfYmxvY2tfdHlwZShzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkLCB1NjQgYmxvY2spCiB7CiAJc3RydWN0IGdmczJfYml0bWFwICpiaSA9IE5VTEw7CiAJdTMyIGxlbmd0aCwgcmdycF9ibG9jaywgYnVmX2Jsb2NrOwpAQCAtMTQ1OSw2ICsxNDYxLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGdmczJfcmdycF9lcnJvcihzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkKQoreworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcmdkLT5yZF9zYmQ7CisJZnNfd2FybihzZHAsICJyZ3JwICVsbHUgaGFzIGFuIGVycm9yLCBtYXJraW5nIGl0IHJlYWRvbmx5IHVudGlsIHVtb3VudFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZ2QtPnJkX2FkZHIpOworCWZzX3dhcm4oc2RwLCAidW1vdW50IG9uIGFsbCBub2RlcyBhbmQgcnVuIGZzY2suZ2ZzMiB0byBmaXggdGhlIGVycm9yXG4iKTsKKwlnZnMyX3JncnBfZHVtcChOVUxMLCByZ2QtPnJkX2dsKTsKKwlyZ2QtPnJkX2ZsYWdzIHw9IEdGUzJfUkRGX0VSUk9SOworfQorCiAvKioKICAqIGdmczJfYWxsb2NfYmxvY2sgLSBBbGxvY2F0ZSBvbmUgb3IgbW9yZSBibG9ja3MKICAqIEBpcDogdGhlIGlub2RlIHRvIGFsbG9jYXRlIHRoZSBibG9jayBmb3IKQEAgLTE1MjAsMjIgKzE1MzIsMjAgQEAKIAlyZXR1cm4gMDsKIAogcmdycF9lcnJvcjoKLQlmc193YXJuKHNkcCwgInJncnAgJWxsdSBoYXMgYW4gZXJyb3IsIG1hcmtpbmcgaXQgcmVhZG9ubHkgdW50aWwgdW1vdW50XG4iLAotCSAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZ2QtPnJkX2FkZHIpOwotCWZzX3dhcm4oc2RwLCAidW1vdW50IG9uIGFsbCBub2RlcyBhbmQgcnVuIGZzY2suZ2ZzMiB0byBmaXggdGhlIGVycm9yXG4iKTsKLQlnZnMyX3JncnBfZHVtcChOVUxMLCByZ2QtPnJkX2dsKTsKLQlyZ2QtPnJkX2ZsYWdzIHw9IEdGUzJfUkRGX0VSUk9SOworCWdmczJfcmdycF9lcnJvcihyZ2QpOwogCXJldHVybiAtRUlPOwogfQogCiAvKioKICAqIGdmczJfYWxsb2NfZGkgLSBBbGxvY2F0ZSBhIGRpbm9kZQogICogQGRpcDogdGhlIGRpcmVjdG9yeSB0aGF0IHRoZSBpbm9kZSBpcyBnb2luZyBpbgorICogQGJuOiB0aGUgYmxvY2sgbnVtYmVyIHdoaWNoIGlzIGFsbG9jYXRlZAorICogQGdlbmVyYXRpb246IHRoZSBnZW5lcmF0aW9uIG51bWJlciBvZiB0aGUgaW5vZGUKICAqCi0gKiBSZXR1cm5zOiB0aGUgYmxvY2sgYWxsb2NhdGVkCisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IKICAqLwogCi11NjQgZ2ZzMl9hbGxvY19kaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCB1NjQgKmdlbmVyYXRpb24pCitpbnQgZ2ZzMl9hbGxvY19kaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCB1NjQgKmJuLCB1NjQgKmdlbmVyYXRpb24pCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZkaXAtPmlfaW5vZGUpOwogCXN0cnVjdCBnZnMyX2FsbG9jICphbCA9IGRpcC0+aV9hbGxvYzsKQEAgLTE1NDYsMTYgKzE1NTYsMjEgQEAKIAogCWJsayA9IHJnYmxrX3NlYXJjaChyZ2QsIHJnZC0+cmRfbGFzdF9hbGxvYywKIAkJCSAgIEdGUzJfQkxLU1RfRlJFRSwgR0ZTMl9CTEtTVF9ESU5PREUsICZuKTsKLQlCVUdfT04oYmxrID09IEJGSVROT0VOVCk7CisKKwkvKiBTaW5jZSBhbGwgYmxvY2tzIGFyZSByZXNlcnZlZCBpbiBhZHZhbmNlLCB0aGlzIHNob3VsZG4ndCBoYXBwZW4gKi8KKwlpZiAoYmxrID09IEJGSVROT0VOVCkKKwkJZ290byByZ3JwX2Vycm9yOwogCiAJcmdkLT5yZF9sYXN0X2FsbG9jID0gYmxrOwotCiAJYmxvY2sgPSByZ2QtPnJkX2RhdGEwICsgYmxrOworCWlmIChyZ2QtPnJkX2ZyZWUgPT0gMCkKKwkJZ290byByZ3JwX2Vycm9yOwogCi0JZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCByZ2QtPnJkX2ZyZWUpOwogCXJnZC0+cmRfZnJlZS0tOwogCXJnZC0+cmRfZGlub2RlcysrOwogCSpnZW5lcmF0aW9uID0gcmdkLT5yZF9pZ2VuZXJhdGlvbisrOworCWlmICgqZ2VuZXJhdGlvbiA9PSAwKQorCQkqZ2VuZXJhdGlvbiA9IHJnZC0+cmRfaWdlbmVyYXRpb24rKzsKIAlnZnMyX3RyYW5zX2FkZF9iaChyZ2QtPnJkX2dsLCByZ2QtPnJkX2JpdHNbMF0uYmlfYmgsIDEpOwogCWdmczJfcmdycF9vdXQocmdkLCByZ2QtPnJkX2JpdHNbMF0uYmlfYmgtPmJfZGF0YSk7CiAKQEAgLTE1NjgsNyArMTU4MywxMiBAQAogCXJnZC0+cmRfZnJlZV9jbG9uZS0tOwogCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3JpbmRleF9zcGluKTsKIAl0cmFjZV9nZnMyX2Jsb2NrX2FsbG9jKGRpcCwgYmxvY2ssIDEsIEdGUzJfQkxLU1RfRElOT0RFKTsKLQlyZXR1cm4gYmxvY2s7CisJKmJuID0gYmxvY2s7CisJcmV0dXJuIDA7CisKK3JncnBfZXJyb3I6CisJZ2ZzMl9yZ3JwX2Vycm9yKHJnZCk7CisJcmV0dXJuIC1FSU87CiB9CiAKIC8qKgpAQCAtMTY3Niw2ICsxNjk2LDQ2IEBACiB9CiAKIC8qKgorICogZ2ZzMl9jaGVja19ibGtfdHlwZSAtIENoZWNrIHRoZSB0eXBlIG9mIGEgYmxvY2sKKyAqIEBzZHA6IFRoZSBzdXBlcmJsb2NrCisgKiBAbm9fYWRkcjogVGhlIGJsb2NrIG51bWJlciB0byBjaGVjaworICogQHR5cGU6IFRoZSBibG9jayB0eXBlIHdlIGFyZSBsb29raW5nIGZvcgorICoKKyAqIFJldHVybnM6IDAgaWYgdGhlIGJsb2NrIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZQorICogICAgICAgICAgLUVTVEFMRSBpZiBpdCBkb2Vzbid0IG1hdGNoCisgKiAgICAgICAgICBvciAtdmUgZXJybm8gaWYgc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgY2hlY2tpbmcKKyAqLworCitpbnQgZ2ZzMl9jaGVja19ibGtfdHlwZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdTY0IG5vX2FkZHIsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCBnZnMyX3JncnBkICpyZ2Q7CisJc3RydWN0IGdmczJfaG9sZGVyIHJpX2doLCByZ2RfZ2g7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBnZnMyX3JpbmRleF9ob2xkKHNkcCwgJnJpX2doKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbDsKKworCWVycm9yID0gLUVJTlZBTDsKKwlyZ2QgPSBnZnMyX2JsazJyZ3JwZChzZHAsIG5vX2FkZHIpOworCWlmICghcmdkKQorCQlnb3RvIGZhaWxfcmluZGV4OworCisJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQocmdkLT5yZF9nbCwgTE1fU1RfU0hBUkVELCAwLCAmcmdkX2doKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbF9yaW5kZXg7CisKKwlpZiAoZ2ZzMl9nZXRfYmxvY2tfdHlwZShyZ2QsIG5vX2FkZHIpICE9IHR5cGUpCisJCWVycm9yID0gLUVTVEFMRTsKKworCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZyZ2RfZ2gpOworZmFpbF9yaW5kZXg6CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnJpX2doKTsKK2ZhaWw6CisJcmV0dXJuIGVycm9yOworfQorCisvKioKICAqIGdmczJfcmxpc3RfYWRkIC0gYWRkIGEgUkcgdG8gYSBsaXN0IG9mIFJHcwogICogQHNkcDogdGhlIGZpbGVzeXN0ZW0KICAqIEBybGlzdDogdGhlIGxpc3Qgb2YgcmVzb3VyY2UgZ3JvdXBzCmRpZmYgLS1naXQgYS9mcy9nZnMyL3JncnAuaCBiL2ZzL2dmczIvcmdycC5oCmluZGV4IDFlNzZmZjAuLmI0MTA2ZGQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcmdycC5oCisrKyBiL2ZzL2dmczIvcmdycC5oCkBAIC00NCwxNSArNDQsMTUgQEAKIAogZXh0ZXJuIHZvaWQgZ2ZzMl9pbnBsYWNlX3JlbGVhc2Uoc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZ2ZzMl9nZXRfYmxvY2tfdHlwZShzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkLCB1NjQgYmxvY2spOwotCiBleHRlcm4gaW50IGdmczJfYWxsb2NfYmxvY2soc3RydWN0IGdmczJfaW5vZGUgKmlwLCB1NjQgKmJuLCB1bnNpZ25lZCBpbnQgKm4pOwotZXh0ZXJuIHU2NCBnZnMyX2FsbG9jX2RpKHN0cnVjdCBnZnMyX2lub2RlICppcCwgdTY0ICpnZW5lcmF0aW9uKTsKK2V4dGVybiBpbnQgZ2ZzMl9hbGxvY19kaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHU2NCAqYm4sIHU2NCAqZ2VuZXJhdGlvbik7CiAKIGV4dGVybiB2b2lkIGdmczJfZnJlZV9kYXRhKHN0cnVjdCBnZnMyX2lub2RlICppcCwgdTY0IGJzdGFydCwgdTMyIGJsZW4pOwogZXh0ZXJuIHZvaWQgZ2ZzMl9mcmVlX21ldGEoc3RydWN0IGdmczJfaW5vZGUgKmlwLCB1NjQgYnN0YXJ0LCB1MzIgYmxlbik7CiBleHRlcm4gdm9pZCBnZnMyX2ZyZWVfZGkoc3RydWN0IGdmczJfcmdycGQgKnJnZCwgc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKIGV4dGVybiB2b2lkIGdmczJfdW5saW5rX2RpKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIGludCBnZnMyX2NoZWNrX2Jsa190eXBlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1NjQgbm9fYWRkciwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSk7CiAKIHN0cnVjdCBnZnMyX3JncnBfbGlzdCB7CiAJdW5zaWduZWQgaW50IHJsX3JncnBzOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zdXBlci5jIGIvZnMvZ2ZzMi9zdXBlci5jCmluZGV4IGY1MjJiYjAuLjBlYzNlYzYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3VwZXIuYworKysgYi9mcy9nZnMyL3N1cGVyLmMKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJ0cmFucy5oIgogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJzeXMuaCIKLSNpbmNsdWRlICJlYXR0ci5oIgorI2luY2x1ZGUgInhhdHRyLmgiCiAKICNkZWZpbmUgYXJnc19uZXEoYTEsIGEyLCB4KSAoKGExKS0+YXJfIyN4ICE9IChhMiktPmFyXyMjeCkKIApAQCAtNjgsNiArNjgsOCBAQAogCU9wdF9kaXNjYXJkLAogCU9wdF9ub2Rpc2NhcmQsCiAJT3B0X2NvbW1pdCwKKwlPcHRfZXJyX3dpdGhkcmF3LAorCU9wdF9lcnJfcGFuaWMsCiAJT3B0X2Vycm9yLAogfTsKIApAQCAtOTcsNiArOTksOCBAQAogCXtPcHRfZGlzY2FyZCwgImRpc2NhcmQifSwKIAl7T3B0X25vZGlzY2FyZCwgIm5vZGlzY2FyZCJ9LAogCXtPcHRfY29tbWl0LCAiY29tbWl0PSVkIn0sCisJe09wdF9lcnJfd2l0aGRyYXcsICJlcnJvcnM9d2l0aGRyYXcifSwKKwl7T3B0X2Vycl9wYW5pYywgImVycm9ycz1wYW5pYyJ9LAogCXtPcHRfZXJyb3IsIE5VTEx9CiB9OwogCkBAIC0xNTIsNiArMTU2LDExIEBACiAJCQlhcmdzLT5hcl9sb2NhbGNhY2hpbmcgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2RlYnVnOgorCQkJaWYgKGFyZ3MtPmFyX2Vycm9ycyA9PSBHRlMyX0VSUk9SU19QQU5JQykgeworCQkJCWZzX2luZm8oc2RwLCAiLW8gZGVidWcgYW5kIC1vIGVycm9ycz1wYW5pYyAiCisJCQkJICAgICAgICJhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CiAJCQlhcmdzLT5hcl9kZWJ1ZyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm9kZWJ1ZzoKQEAgLTIwNSw2ICsyMTQsMTcgQEAKIAkJCQlyZXR1cm4gcnYgPyBydiA6IC1FSU5WQUw7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfZXJyX3dpdGhkcmF3OgorCQkJYXJncy0+YXJfZXJyb3JzID0gR0ZTMl9FUlJPUlNfV0lUSERSQVc7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZXJyX3BhbmljOgorCQkJaWYgKGFyZ3MtPmFyX2RlYnVnKSB7CisJCQkJZnNfaW5mbyhzZHAsICItbyBkZWJ1ZyBhbmQgLW8gZXJyb3JzPXBhbmljICIKKwkJCQkJImFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWFyZ3MtPmFyX2Vycm9ycyA9IEdGUzJfRVJST1JTX1BBTklDOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2Vycm9yOgogCQlkZWZhdWx0OgogCQkJZnNfaW5mbyhzZHAsICJpbnZhbGlkIG1vdW50IG9wdGlvbjogJXNcbiIsIG8pOwpAQCAtNzY4LDcgKzc4OCw2IEBACiAJLyogIFJlbGVhc2Ugc3R1ZmYgICovCiAKIAlpcHV0KHNkcC0+c2RfamluZGV4KTsKLQlpcHV0KHNkcC0+c2RfaW51bV9pbm9kZSk7CiAJaXB1dChzZHAtPnNkX3N0YXRmc19pbm9kZSk7CiAJaXB1dChzZHAtPnNkX3JpbmRleCk7CiAJaXB1dChzZHAtPnNkX3F1b3RhX2lub2RlKTsKQEAgLTc3OSwxMCArNzk4LDggQEAKIAlpZiAoIXNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpIHsKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnNkcC0+c2Rfam91cm5hbF9naCk7CiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZzZHAtPnNkX2ppbm9kZV9naCk7Ci0JCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZzZHAtPnNkX2lyX2doKTsKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnNkcC0+c2Rfc2NfZ2gpOwogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmc2RwLT5zZF9xY19naCk7Ci0JCWlwdXQoc2RwLT5zZF9pcl9pbm9kZSk7CiAJCWlwdXQoc2RwLT5zZF9zY19pbm9kZSk7CiAJCWlwdXQoc2RwLT5zZF9xY19pbm9kZSk7CiAJfQpAQCAtMTA4NCw2ICsxMTAxLDcgQEAKIAlndC0+Z3RfbG9nX2ZsdXNoX3NlY3MgPSBhcmdzLmFyX2NvbW1pdDsKIAlzcGluX3VubG9jaygmZ3QtPmd0X3NwaW4pOwogCisJZ2ZzMl9vbmxpbmVfdWV2ZW50KHNkcCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMjUsNiArMTI0MywyMiBAQAogCWxmc2VjcyA9IHNkcC0+c2RfdHVuZS5ndF9sb2dfZmx1c2hfc2VjczsKIAlpZiAobGZzZWNzICE9IDYwKQogCQlzZXFfcHJpbnRmKHMsICIsY29tbWl0PSVkIiwgbGZzZWNzKTsKKwlpZiAoYXJncy0+YXJfZXJyb3JzICE9IEdGUzJfRVJST1JTX0RFRkFVTFQpIHsKKwkJY29uc3QgY2hhciAqc3RhdGU7CisKKwkJc3dpdGNoIChhcmdzLT5hcl9lcnJvcnMpIHsKKwkJY2FzZSBHRlMyX0VSUk9SU19XSVRIRFJBVzoKKwkJCXN0YXRlID0gIndpdGhkcmF3IjsKKwkJCWJyZWFrOworCQljYXNlIEdGUzJfRVJST1JTX1BBTklDOgorCQkJc3RhdGUgPSAicGFuaWMiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzdGF0ZSA9ICJ1bmtub3duIjsKKwkJCWJyZWFrOworCQl9CisJCXNlcV9wcmludGYocywgIixlcnJvcnM9JXMiLCBzdGF0ZSk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0xMjUyLDYgKzEyODYsMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJZXJyb3IgPSBnZnMyX2NoZWNrX2Jsa190eXBlKHNkcCwgaXAtPmlfbm9fYWRkciwgR0ZTMl9CTEtTVF9VTkxJTktFRCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF90cnVuY2F0ZTsKKwogCWdmczJfZ2xvY2tfZHFfd2FpdCgmaXAtPmlfaW9wZW5fZ2gpOwogCWdmczJfaG9sZGVyX3JlaW5pdChMTV9TVF9FWENMVVNJVkUsIExNX0ZMQUdfVFJZXzFDQiB8IEdMX05PQ0FDSEUsICZpcC0+aV9pb3Blbl9naCk7CiAJZXJyb3IgPSBnZnMyX2dsb2NrX25xKCZpcC0+aV9pb3Blbl9naCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmggYi9mcy9nZnMyL3N1cGVyLmgKaW5kZXggMjJlMDQxNy4uMjM1ZGIzNiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5oCisrKyBiL2ZzL2dmczIvc3VwZXIuaApAQCAtMjUsNyArMjUsNyBAQAogCXJldHVybiB4OwogfQogCi12b2lkIGdmczJfamluZGV4X2ZyZWUoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIHZvaWQgZ2ZzMl9qaW5kZXhfZnJlZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKIGV4dGVybiBpbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzLCBjaGFyICpkYXRhKTsKIApAQCAtMzYsNyArMzYsNyBAQAogCQkJCSAgICAgc3RydWN0IGdmczJfaW5vZGUgKippcHApOwogCiBleHRlcm4gaW50IGdmczJfbWFrZV9mc19ydyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7Ci0KK2V4dGVybiB2b2lkIGdmczJfb25saW5lX3VldmVudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiBleHRlcm4gaW50IGdmczJfc3RhdGZzX2luaXQoc3RydWN0IGdmczJfc2JkICpzZHApOwogZXh0ZXJuIHZvaWQgZ2ZzMl9zdGF0ZnNfY2hhbmdlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzNjQgdG90YWwsIHM2NCBmcmVlLAogCQkJICAgICAgIHM2NCBkaW5vZGVzKTsKQEAgLTU0LDYgKzU0LDcgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgZ2ZzMl9leHBvcnRfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdmczJfc3VwZXJfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBnZnMyX2RvcHM7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgKmdmczJfeGF0dHJfaGFuZGxlcnNbXTsKIAogI2VuZGlmIC8qIF9fU1VQRVJfRE9UX0hfXyAqLwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3N5cy5jIGIvZnMvZ2ZzMi9zeXMuYwppbmRleCBhN2NiZmJkLi40NDYzMjk3IDEwMDY0NAotLS0gYS9mcy9nZnMyL3N5cy5jCisrKyBiL2ZzL2dmczIvc3lzLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0zMTksMTIgKzMyMCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QgbGtpZF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgbHMtPmxzX2lkKTsKLX0KLQogc3RhdGljIHNzaXplX3QgbGtmaXJzdF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKQEAgLTM4OSw3ICszODQsNiBAQAogR0RMTV9BVFRSKHByb3RvX25hbWUsCQkwNDQ0LCBwcm90b19uYW1lX3Nob3csCQlOVUxMKTsKIEdETE1fQVRUUihibG9jaywJCTA2NDQsIGJsb2NrX3Nob3csCQlibG9ja19zdG9yZSk7CiBHRExNX0FUVFIod2l0aGRyYXcsCQkwNjQ0LCB3aXRoZHJhd19zaG93LAkJd2l0aGRyYXdfc3RvcmUpOwotR0RMTV9BVFRSKGlkLAkJCTA0NDQsIGxraWRfc2hvdywJCU5VTEwpOwogR0RMTV9BVFRSKGppZCwJCQkwNDQ0LCBqaWRfc2hvdywJCQlOVUxMKTsKIEdETE1fQVRUUihmaXJzdCwJCTA0NDQsIGxrZmlyc3Rfc2hvdywJCU5VTEwpOwogR0RMTV9BVFRSKGZpcnN0X2RvbmUsCQkwNDQ0LCBmaXJzdF9kb25lX3Nob3csCQlOVUxMKTsKQEAgLTQwMSw3ICszOTUsNiBAQAogCSZnZGxtX2F0dHJfcHJvdG9fbmFtZS5hdHRyLAogCSZnZGxtX2F0dHJfYmxvY2suYXR0ciwKIAkmZ2RsbV9hdHRyX3dpdGhkcmF3LmF0dHIsCi0JJmdkbG1fYXR0cl9pZC5hdHRyLAogCSZnZGxtX2F0dHJfamlkLmF0dHIsCiAJJmdkbG1fYXR0cl9maXJzdC5hdHRyLAogCSZnZGxtX2F0dHJfZmlyc3RfZG9uZS5hdHRyLApAQCAtNTE5LDcgKzUxMiwxNCBAQAogCiBpbnQgZ2ZzMl9zeXNfZnNfYWRkKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogeworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzZHAtPnNkX3ZmczsKIAlpbnQgZXJyb3I7CisJY2hhciByb1syMF07CisJY2hhciBzcGVjdGF0b3JbMjBdOworCWNoYXIgKmVudnBbXSA9IHsgcm8sIHNwZWN0YXRvciwgTlVMTCB9OworCisJc3ByaW50ZihybywgIlJET05MWT0lZCIsIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkgPyAxIDogMCk7CisJc3ByaW50ZihzcGVjdGF0b3IsICJTUEVDVEFUT1I9JWQiLCBzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yID8gMSA6IDApOwogCiAJc2RwLT5zZF9rb2JqLmtzZXQgPSBnZnMyX2tzZXQ7CiAJZXJyb3IgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmc2RwLT5zZF9rb2JqLCAmZ2ZzMl9rdHlwZSwgTlVMTCwKQEAgLTUzNSw5ICs1MzUsMTcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbF90dW5lOwogCi0Ja29iamVjdF91ZXZlbnQoJnNkcC0+c2Rfa29iaiwgS09CSl9BREQpOworCWVycm9yID0gc3lzZnNfY3JlYXRlX2xpbmsoJnNkcC0+c2Rfa29iaiwKKwkJCQkgICZkaXNrX3RvX2RldihzYi0+c19iZGV2LT5iZF9kaXNrKS0+a29iaiwKKwkJCQkgICJkZXZpY2UiKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbF9sb2NrX21vZHVsZTsKKworCWtvYmplY3RfdWV2ZW50X2Vudigmc2RwLT5zZF9rb2JqLCBLT0JKX0FERCwgZW52cCk7CiAJcmV0dXJuIDA7CiAKK2ZhaWxfbG9ja19tb2R1bGU6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZsb2NrX21vZHVsZV9ncm91cCk7CiBmYWlsX3R1bmU6CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZ0dW5lX2dyb3VwKTsKIGZhaWxfcmVnOgpAQCAtNTQ5LDEyICs1NTcsMTIgQEAKIAogdm9pZCBnZnMyX3N5c19mc19kZWwoc3RydWN0IGdmczJfc2JkICpzZHApCiB7CisJc3lzZnNfcmVtb3ZlX2xpbmsoJnNkcC0+c2Rfa29iaiwgImRldmljZSIpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmdHVuZV9ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZsb2NrX21vZHVsZV9ncm91cCk7CiAJa29iamVjdF9wdXQoJnNkcC0+c2Rfa29iaik7CiB9CiAKLQogc3RhdGljIGludCBnZnMyX3VldmVudChzdHJ1Y3Qga3NldCAqa3NldCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCSAgICAgICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CkBAIC01NjMsNiArNTcxLDggQEAKIAogCWFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tUQUJMRT0lcyIsIHNkcC0+c2RfdGFibGVfbmFtZSk7CiAJYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1BST1RPPSVzIiwgc2RwLT5zZF9wcm90b19uYW1lKTsKKwlpZiAoIXNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpCisJCWFkZF91ZXZlbnRfdmFyKGVudiwgIkpPVVJOQUxJRD0ldSIsIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19qaWQpOwogCWlmIChnZnMyX3V1aWRfdmFsaWQodXVpZCkpIHsKIAkJYWRkX3VldmVudF92YXIoZW52LCAiVVVJRD0lMDJYJTAyWCUwMlglMDJYLSUwMlglMDJYLSUwMlglMDJYLSIKIAkJCSAgICAgICAiJTAyWCUwMlgtJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYIiwKQEAgLTU3OCw3ICs1ODgsNiBAQAogCS51ZXZlbnQgPSBnZnMyX3VldmVudCwKIH07CiAKLQogaW50IGdmczJfc3lzX2luaXQodm9pZCkKIHsKIAlnZnMyX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJnZnMyIiwgJmdmczJfdWV2ZW50X29wcywgZnNfa29iaik7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3V0aWwuYyBiL2ZzL2dmczIvdXRpbC5jCmluZGV4IDlkMTJiMTEuLmY2YTdlZmEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvdXRpbC5jCisrKyBiL2ZzL2dmczIvdXRpbC5jCkBAIC0zOCwyNCArMzgsMzAgQEAKIAljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbG0gPSBscy0+bHNfb3BzOwogCXZhX2xpc3QgYXJnczsKIAotCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKQorCWlmIChzZHAtPnNkX2FyZ3MuYXJfZXJyb3JzID09IEdGUzJfRVJST1JTX1dJVEhEUkFXICYmCisJICAgIHRlc3RfYW5kX3NldF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpCiAJCXJldHVybiAwOwogCiAJdmFfc3RhcnQoYXJncywgZm10KTsKIAl2cHJpbnRrKGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogCi0JZnNfZXJyKHNkcCwgImFib3V0IHRvIHdpdGhkcmF3IHRoaXMgZmlsZSBzeXN0ZW1cbiIpOwotCUJVR19PTihzZHAtPnNkX2FyZ3MuYXJfZGVidWcpOworCWlmIChzZHAtPnNkX2FyZ3MuYXJfZXJyb3JzID09IEdGUzJfRVJST1JTX1dJVEhEUkFXKSB7CisJCWZzX2VycihzZHAsICJhYm91dCB0byB3aXRoZHJhdyB0aGlzIGZpbGUgc3lzdGVtXG4iKTsKKwkJQlVHX09OKHNkcC0+c2RfYXJncy5hcl9kZWJ1Zyk7CiAKLQlrb2JqZWN0X3VldmVudCgmc2RwLT5zZF9rb2JqLCBLT0JKX09GRkxJTkUpOworCQlrb2JqZWN0X3VldmVudCgmc2RwLT5zZF9rb2JqLCBLT0JKX09GRkxJTkUpOwogCi0JaWYgKGxtLT5sbV91bm1vdW50KSB7Ci0JCWZzX2VycihzZHAsICJ0ZWxsaW5nIExNIHRvIHVubW91bnRcbiIpOwotCQlsbS0+bG1fdW5tb3VudChzZHApOworCQlpZiAobG0tPmxtX3VubW91bnQpIHsKKwkJCWZzX2VycihzZHAsICJ0ZWxsaW5nIExNIHRvIHVubW91bnRcbiIpOworCQkJbG0tPmxtX3VubW91bnQoc2RwKTsKKwkJfQorCQlmc19lcnIoc2RwLCAid2l0aGRyYXduXG4iKTsKKwkJZHVtcF9zdGFjaygpOwogCX0KLQlmc19lcnIoc2RwLCAid2l0aGRyYXduXG4iKTsKLQlkdW1wX3N0YWNrKCk7CisKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX2Vycm9ycyA9PSBHRlMyX0VSUk9SU19QQU5JQykKKwkJcGFuaWMoIkdGUzI6IGZzaWQ9JXM6IHBhbmljIHJlcXVlc3RlZC5cbiIsIHNkcC0+c2RfZnNuYW1lKTsKIAogCXJldHVybiAtMTsKIH0KQEAgLTkzLDE3ICs5OSwyNCBAQAogCQkJZ2ZzMl90dW5lX2dldChzZHAsIGd0X2NvbXBsYWluX3NlY3MpICogSFopKQogCQlyZXR1cm4gLTI7CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HCi0JICAgICAgICJHRlMyOiBmc2lkPSVzOiB3YXJuaW5nOiBhc3NlcnRpb24gXCIlc1wiIGZhaWxlZFxuIgotCSAgICAgICAiR0ZTMjogZnNpZD0lczogICBmdW5jdGlvbiA9ICVzLCBmaWxlID0gJXMsIGxpbmUgPSAldVxuIiwKLQkgICAgICAgc2RwLT5zZF9mc25hbWUsIGFzc2VydGlvbiwKLQkgICAgICAgc2RwLT5zZF9mc25hbWUsIGZ1bmN0aW9uLCBmaWxlLCBsaW5lKTsKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX2Vycm9ycyA9PSBHRlMyX0VSUk9SU19XSVRIRFJBVykKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIkdGUzI6IGZzaWQ9JXM6IHdhcm5pbmc6IGFzc2VydGlvbiBcIiVzXCIgZmFpbGVkXG4iCisJCSAgICAgICAiR0ZTMjogZnNpZD0lczogICBmdW5jdGlvbiA9ICVzLCBmaWxlID0gJXMsIGxpbmUgPSAldVxuIiwKKwkJICAgICAgIHNkcC0+c2RfZnNuYW1lLCBhc3NlcnRpb24sCisJCSAgICAgICBzZHAtPnNkX2ZzbmFtZSwgZnVuY3Rpb24sIGZpbGUsIGxpbmUpOwogCiAJaWYgKHNkcC0+c2RfYXJncy5hcl9kZWJ1ZykKIAkJQlVHKCk7CiAJZWxzZQogCQlkdW1wX3N0YWNrKCk7CiAKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX2Vycm9ycyA9PSBHRlMyX0VSUk9SU19QQU5JQykKKwkJcGFuaWMoIkdGUzI6IGZzaWQ9JXM6IHdhcm5pbmc6IGFzc2VydGlvbiBcIiVzXCIgZmFpbGVkXG4iCisJCSAgICAgICJHRlMyOiBmc2lkPSVzOiAgIGZ1bmN0aW9uID0gJXMsIGZpbGUgPSAlcywgbGluZSA9ICV1XG4iLAorCQkgICAgICBzZHAtPnNkX2ZzbmFtZSwgYXNzZXJ0aW9uLAorCQkgICAgICBzZHAtPnNkX2ZzbmFtZSwgZnVuY3Rpb24sIGZpbGUsIGxpbmUpOworCiAJc2RwLT5zZF9sYXN0X3dhcm5pbmcgPSBqaWZmaWVzOwogCiAJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi94YXR0ci5jIGIvZnMvZ2ZzMi94YXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMGY4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9nZnMyL3hhdHRyLmMKQEAgLTAsMCArMSwxNTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCisgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJnZnMyLmgiCisjaW5jbHVkZSAiaW5jb3JlLmgiCisjaW5jbHVkZSAiYWNsLmgiCisjaW5jbHVkZSAieGF0dHIuaCIKKyNpbmNsdWRlICJnbG9jay5oIgorI2luY2x1ZGUgImlub2RlLmgiCisjaW5jbHVkZSAibWV0YV9pby5oIgorI2luY2x1ZGUgInF1b3RhLmgiCisjaW5jbHVkZSAicmdycC5oIgorI2luY2x1ZGUgInRyYW5zLmgiCisjaW5jbHVkZSAidXRpbC5oIgorCisvKioKKyAqIGVhX2NhbGNfc2l6ZSAtIHJldHVybnMgdGhlIGFjdXRhbCBudW1iZXIgb2YgYnl0ZXMgdGhlIHJlcXVlc3Qgd2lsbCB0YWtlIHVwCisgKiAgICAgICAgICAgICAgICAobm90IGNvdW50aW5nIGFueSB1bnN0dWZmZWQgZGF0YSBibG9ja3MpCisgKiBAc2RwOgorICogQGVyOgorICogQHNpemU6CisgKgorICogUmV0dXJuczogMSBpZiB0aGUgRUEgc2hvdWxkIGJlIHN0dWZmZWQKKyAqLworCitzdGF0aWMgaW50IGVhX2NhbGNfc2l6ZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IG5zaXplLCBzaXplX3QgZHNpemUsCisJCQl1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJdW5zaWduZWQgaW50IGpic2l6ZSA9IHNkcC0+c2RfamJzaXplOworCisJLyogU3R1ZmZlZCAqLworCSpzaXplID0gQUxJR04oc2l6ZW9mKHN0cnVjdCBnZnMyX2VhX2hlYWRlcikgKyBuc2l6ZSArIGRzaXplLCA4KTsKKworCWlmICgqc2l6ZSA8PSBqYnNpemUpCisJCXJldHVybiAxOworCisJLyogVW5zdHVmZmVkICovCisJKnNpemUgPSBBTElHTihzaXplb2Yoc3RydWN0IGdmczJfZWFfaGVhZGVyKSArIG5zaXplICsKKwkJICAgICAgKHNpemVvZihfX2JlNjQpICogRElWX1JPVU5EX1VQKGRzaXplLCBqYnNpemUpKSwgOCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlYV9jaGVja19zaXplKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgbnNpemUsIHNpemVfdCBkc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKworCWlmIChkc2l6ZSA+IEdGUzJfRUFfTUFYX0RBVEFfTEVOKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCWVhX2NhbGNfc2l6ZShzZHAsIG5zaXplLCBkc2l6ZSwgJnNpemUpOworCisJLyogVGhpcyBjYW4gb25seSBoYXBwZW4gd2l0aCA1MTIgYnl0ZSBibG9ja3MgKi8KKwlpZiAoc2l6ZSA+IHNkcC0+c2RfamJzaXplKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCXJldHVybiAwOworfQorCit0eXBlZGVmIGludCAoKmVhX2NhbGxfdCkgKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCSAgc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSwKKwkJCSAgc3RydWN0IGdmczJfZWFfaGVhZGVyICpwcmV2LCB2b2lkICpwcml2YXRlKTsKKworc3RhdGljIGludCBlYV9mb3JlYWNoX2koc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJZWFfY2FsbF90IGVhX2NhbGwsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSwgKnByZXYgPSBOVUxMOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoZ2ZzMl9tZXRhdHlwZV9jaGVjayhHRlMyX1NCKCZpcC0+aV9pbm9kZSksIGJoLCBHRlMyX01FVEFUWVBFX0VBKSkKKwkJcmV0dXJuIC1FSU87CisKKwlmb3IgKGVhID0gR0ZTMl9FQV9CSDJGSVJTVChiaCk7OyBwcmV2ID0gZWEsIGVhID0gR0ZTMl9FQTJORVhUKGVhKSkgeworCQlpZiAoIUdGUzJfRUFfUkVDX0xFTihlYSkpCisJCQlnb3RvIGZhaWw7CisJCWlmICghKGJoLT5iX2RhdGEgPD0gKGNoYXIgKillYSAmJiAoY2hhciAqKUdGUzJfRUEyTkVYVChlYSkgPD0KKwkJCQkJCSAgYmgtPmJfZGF0YSArIGJoLT5iX3NpemUpKQorCQkJZ290byBmYWlsOworCQlpZiAoIUdGUzJfRUFUWVBFX1ZBTElEKGVhLT5lYV90eXBlKSkKKwkJCWdvdG8gZmFpbDsKKworCQllcnJvciA9IGVhX2NhbGwoaXAsIGJoLCBlYSwgcHJldiwgZGF0YSk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKworCQlpZiAoR0ZTMl9FQV9JU19MQVNUKGVhKSkgeworCQkJaWYgKChjaGFyICopR0ZTMl9FQTJORVhUKGVhKSAhPQorCQkJICAgIGJoLT5iX2RhdGEgKyBiaC0+Yl9zaXplKQorCQkJCWdvdG8gZmFpbDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGVycm9yOworCitmYWlsOgorCWdmczJfY29uc2lzdF9pbm9kZShpcCk7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgZWFfZm9yZWFjaChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIGVhX2NhbGxfdCBlYV9jYWxsLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICplYWJoOworCV9fYmU2NCAqZWFibGssICplbmQ7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBnZnMyX21ldGFfcmVhZChpcC0+aV9nbCwgaXAtPmlfZWF0dHIsIERJT19XQUlULCAmYmgpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKCEoaXAtPmlfZGlza2ZsYWdzICYgR0ZTMl9ESUZfRUFfSU5ESVJFQ1QpKSB7CisJCWVycm9yID0gZWFfZm9yZWFjaF9pKGlwLCBiaCwgZWFfY2FsbCwgZGF0YSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChnZnMyX21ldGF0eXBlX2NoZWNrKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgYmgsIEdGUzJfTUVUQVRZUEVfSU4pKSB7CisJCWVycm9yID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJZWFibGsgPSAoX19iZTY0ICopKGJoLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IGdmczJfbWV0YV9oZWFkZXIpKTsKKwllbmQgPSBlYWJsayArIEdGUzJfU0IoJmlwLT5pX2lub2RlKS0+c2RfaW5wdHJzOworCisJZm9yICg7IGVhYmxrIDwgZW5kOyBlYWJsaysrKSB7CisJCXU2NCBibjsKKworCQlpZiAoISplYWJsaykKKwkJCWJyZWFrOworCQlibiA9IGJlNjRfdG9fY3B1KCplYWJsayk7CisKKwkJZXJyb3IgPSBnZnMyX21ldGFfcmVhZChpcC0+aV9nbCwgYm4sIERJT19XQUlULCAmZWFiaCk7CisJCWlmIChlcnJvcikKKwkJCWJyZWFrOworCQllcnJvciA9IGVhX2ZvcmVhY2hfaShpcCwgZWFiaCwgZWFfY2FsbCwgZGF0YSk7CisJCWJyZWxzZShlYWJoKTsKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisJfQorb3V0OgorCWJyZWxzZShiaCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdHJ1Y3QgZWFfZmluZCB7CisJaW50IHR5cGU7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzaXplX3QgbmFtZWw7CisJc3RydWN0IGdmczJfZWFfbG9jYXRpb24gKmVmX2VsOworfTsKKworc3RhdGljIGludCBlYV9maW5kX2koc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkgICAgIHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWEsIHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqcHJldiwKKwkJICAgICB2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCBlYV9maW5kICplZiA9IHByaXZhdGU7CisKKwlpZiAoZWEtPmVhX3R5cGUgPT0gR0ZTMl9FQVRZUEVfVU5VU0VEKQorCQlyZXR1cm4gMDsKKworCWlmIChlYS0+ZWFfdHlwZSA9PSBlZi0+dHlwZSkgeworCQlpZiAoZWEtPmVhX25hbWVfbGVuID09IGVmLT5uYW1lbCAmJgorCQkgICAgIW1lbWNtcChHRlMyX0VBMk5BTUUoZWEpLCBlZi0+bmFtZSwgZWEtPmVhX25hbWVfbGVuKSkgeworCQkJc3RydWN0IGdmczJfZWFfbG9jYXRpb24gKmVsID0gZWYtPmVmX2VsOworCQkJZ2V0X2JoKGJoKTsKKwkJCWVsLT5lbF9iaCA9IGJoOworCQkJZWwtPmVsX2VhID0gZWE7CisJCQllbC0+ZWxfcHJldiA9IHByZXY7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgZ2ZzMl9lYV9maW5kKHN0cnVjdCBnZnMyX2lub2RlICppcCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwpCit7CisJc3RydWN0IGVhX2ZpbmQgZWY7CisJaW50IGVycm9yOworCisJZWYudHlwZSA9IHR5cGU7CisJZWYubmFtZSA9IG5hbWU7CisJZWYubmFtZWwgPSBzdHJsZW4obmFtZSk7CisJZWYuZWZfZWwgPSBlbDsKKworCW1lbXNldChlbCwgMCwgc2l6ZW9mKHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uKSk7CisKKwllcnJvciA9IGVhX2ZvcmVhY2goaXAsIGVhX2ZpbmRfaSwgJmVmKTsKKwlpZiAoZXJyb3IgPiAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBlYV9kZWFsbG9jX3Vuc3R1ZmZlZCAtCisgKiBAaXA6CisgKiBAYmg6CisgKiBAZWE6CisgKiBAcHJldjoKKyAqIEBwcml2YXRlOgorICoKKyAqIFRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgYWxsIHVuc3R1ZmZlZCBibG9ja3MgYXJlCisgKiBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBSRy4gIEJ1dCB3YXRjaCwgdGhpcyBtYXkgbm90IGFsd2F5cworICogYmUgdHJ1ZS4KKyAqCisgKiBSZXR1cm5zOiBlcnJubworICovCisKK3N0YXRpYyBpbnQgZWFfZGVhbGxvY191bnN0dWZmZWQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJCXN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWEsCisJCQkJc3RydWN0IGdmczJfZWFfaGVhZGVyICpwcmV2LCB2b2lkICpwcml2YXRlKQoreworCWludCAqbGVhdmUgPSBwcml2YXRlOworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmaXAtPmlfaW5vZGUpOworCXN0cnVjdCBnZnMyX3JncnBkICpyZ2Q7CisJc3RydWN0IGdmczJfaG9sZGVyIHJnX2doOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKKwlfX2JlNjQgKmRhdGFwdHJzOworCXU2NCBibiA9IDA7CisJdTY0IGJzdGFydCA9IDA7CisJdW5zaWduZWQgaW50IGJsZW4gPSAwOworCXVuc2lnbmVkIGludCBibGtzID0gMDsKKwl1bnNpZ25lZCBpbnQgeDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoR0ZTMl9FQV9JU19TVFVGRkVEKGVhKSkKKwkJcmV0dXJuIDA7CisKKwlkYXRhcHRycyA9IEdGUzJfRUEyREFUQVBUUlMoZWEpOworCWZvciAoeCA9IDA7IHggPCBlYS0+ZWFfbnVtX3B0cnM7IHgrKywgZGF0YXB0cnMrKykgeworCQlpZiAoKmRhdGFwdHJzKSB7CisJCQlibGtzKys7CisJCQlibiA9IGJlNjRfdG9fY3B1KCpkYXRhcHRycyk7CisJCX0KKwl9CisJaWYgKCFibGtzKQorCQlyZXR1cm4gMDsKKworCXJnZCA9IGdmczJfYmxrMnJncnBkKHNkcCwgYm4pOworCWlmICghcmdkKSB7CisJCWdmczJfY29uc2lzdF9pbm9kZShpcCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHJnZC0+cmRfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgJnJnX2doKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIHJnZC0+cmRfbGVuZ3RoICsgUkVTX0RJTk9ERSArCisJCQkJIFJFU19FQVRUUiArIFJFU19TVEFURlMgKyBSRVNfUVVPVEEsIGJsa3MpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZ3VubG9jazsKKworCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBiaCwgMSk7CisKKwlkYXRhcHRycyA9IEdGUzJfRUEyREFUQVBUUlMoZWEpOworCWZvciAoeCA9IDA7IHggPCBlYS0+ZWFfbnVtX3B0cnM7IHgrKywgZGF0YXB0cnMrKykgeworCQlpZiAoISpkYXRhcHRycykKKwkJCWJyZWFrOworCQlibiA9IGJlNjRfdG9fY3B1KCpkYXRhcHRycyk7CisKKwkJaWYgKGJzdGFydCArIGJsZW4gPT0gYm4pCisJCQlibGVuKys7CisJCWVsc2UgeworCQkJaWYgKGJzdGFydCkKKwkJCQlnZnMyX2ZyZWVfbWV0YShpcCwgYnN0YXJ0LCBibGVuKTsKKwkJCWJzdGFydCA9IGJuOworCQkJYmxlbiA9IDE7CisJCX0KKworCQkqZGF0YXB0cnMgPSAwOworCQlnZnMyX2FkZF9pbm9kZV9ibG9ja3MoJmlwLT5pX2lub2RlLCAtMSk7CisJfQorCWlmIChic3RhcnQpCisJCWdmczJfZnJlZV9tZXRhKGlwLCBic3RhcnQsIGJsZW4pOworCisJaWYgKHByZXYgJiYgIWxlYXZlKSB7CisJCXUzMiBsZW47CisKKwkJbGVuID0gR0ZTMl9FQV9SRUNfTEVOKHByZXYpICsgR0ZTMl9FQV9SRUNfTEVOKGVhKTsKKwkJcHJldi0+ZWFfcmVjX2xlbiA9IGNwdV90b19iZTMyKGxlbik7CisKKwkJaWYgKEdGUzJfRUFfSVNfTEFTVChlYSkpCisJCQlwcmV2LT5lYV9mbGFncyB8PSBHRlMyX0VBRkxBR19MQVNUOworCX0gZWxzZSB7CisJCWVhLT5lYV90eXBlID0gR0ZTMl9FQVRZUEVfVU5VU0VEOworCQllYS0+ZWFfbnVtX3B0cnMgPSAwOworCX0KKworCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOworCWlmICghZXJyb3IpIHsKKwkJaXAtPmlfaW5vZGUuaV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOworCQlnZnMyX2Rpbm9kZV9vdXQoaXAsIGRpYmgtPmJfZGF0YSk7CisJCWJyZWxzZShkaWJoKTsKKwl9CisKKwlnZnMyX3RyYW5zX2VuZChzZHApOworCitvdXRfZ3VubG9jazoKKwlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmcmdfZ2gpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBlYV9yZW1vdmVfdW5zdHVmZmVkKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCSAgICAgICBzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKmVhLAorCQkJICAgICAgIHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqcHJldiwgaW50IGxlYXZlKQoreworCXN0cnVjdCBnZnMyX2FsbG9jICphbDsKKwlpbnQgZXJyb3I7CisKKwlhbCA9IGdmczJfYWxsb2NfZ2V0KGlwKTsKKwlpZiAoIWFsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVycm9yID0gZ2ZzMl9xdW90YV9ob2xkKGlwLCBOT19RVU9UQV9DSEFOR0UsIE5PX1FVT1RBX0NIQU5HRSk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9hbGxvYzsKKworCWVycm9yID0gZ2ZzMl9yaW5kZXhfaG9sZChHRlMyX1NCKCZpcC0+aV9pbm9kZSksICZhbC0+YWxfcmlfZ2gpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcXVvdGE7CisKKwllcnJvciA9IGVhX2RlYWxsb2NfdW5zdHVmZmVkKGlwLCBiaCwgZWEsIHByZXYsIChsZWF2ZSkgPyAmZXJyb3IgOiBOVUxMKTsKKworCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZhbC0+YWxfcmlfZ2gpOworCitvdXRfcXVvdGE6CisJZ2ZzMl9xdW90YV91bmhvbGQoaXApOworb3V0X2FsbG9jOgorCWdmczJfYWxsb2NfcHV0KGlwKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0cnVjdCBlYV9saXN0IHsKKwlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplaV9lcjsKKwl1bnNpZ25lZCBpbnQgZWlfc2l6ZTsKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdmczJfZWFfc3RybGVuKHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWEpCit7CisJc3dpdGNoIChlYS0+ZWFfdHlwZSkgeworCWNhc2UgR0ZTMl9FQVRZUEVfVVNSOgorCQlyZXR1cm4gNSArIGVhLT5lYV9uYW1lX2xlbiArIDE7CisJY2FzZSBHRlMyX0VBVFlQRV9TWVM6CisJCXJldHVybiA3ICsgZWEtPmVhX25hbWVfbGVuICsgMTsKKwljYXNlIEdGUzJfRUFUWVBFX1NFQ1VSSVRZOgorCQlyZXR1cm4gOSArIGVhLT5lYV9uYW1lX2xlbiArIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IGVhX2xpc3RfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCSAgICAgc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSwgc3RydWN0IGdmczJfZWFfaGVhZGVyICpwcmV2LAorCQkgICAgIHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IGVhX2xpc3QgKmVpID0gcHJpdmF0ZTsKKwlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciA9IGVpLT5laV9lcjsKKwl1bnNpZ25lZCBpbnQgZWFfc2l6ZSA9IGdmczJfZWFfc3RybGVuKGVhKTsKKworCWlmIChlYS0+ZWFfdHlwZSA9PSBHRlMyX0VBVFlQRV9VTlVTRUQpCisJCXJldHVybiAwOworCisJaWYgKGVyLT5lcl9kYXRhX2xlbikgeworCQljaGFyICpwcmVmaXggPSBOVUxMOworCQl1bnNpZ25lZCBpbnQgbCA9IDA7CisJCWNoYXIgYyA9IDA7CisKKwkJaWYgKGVpLT5laV9zaXplICsgZWFfc2l6ZSA+IGVyLT5lcl9kYXRhX2xlbikKKwkJCXJldHVybiAtRVJBTkdFOworCisJCXN3aXRjaCAoZWEtPmVhX3R5cGUpIHsKKwkJY2FzZSBHRlMyX0VBVFlQRV9VU1I6CisJCQlwcmVmaXggPSAidXNlci4iOworCQkJbCA9IDU7CisJCQlicmVhazsKKwkJY2FzZSBHRlMyX0VBVFlQRV9TWVM6CisJCQlwcmVmaXggPSAic3lzdGVtLiI7CisJCQlsID0gNzsKKwkJCWJyZWFrOworCQljYXNlIEdGUzJfRUFUWVBFX1NFQ1VSSVRZOgorCQkJcHJlZml4ID0gInNlY3VyaXR5LiI7CisJCQlsID0gOTsKKwkJCWJyZWFrOworCQl9CisKKwkJQlVHX09OKGwgPT0gMCk7CisKKwkJbWVtY3B5KGVyLT5lcl9kYXRhICsgZWktPmVpX3NpemUsIHByZWZpeCwgbCk7CisJCW1lbWNweShlci0+ZXJfZGF0YSArIGVpLT5laV9zaXplICsgbCwgR0ZTMl9FQTJOQU1FKGVhKSwKKwkJICAgICAgIGVhLT5lYV9uYW1lX2xlbik7CisJCW1lbWNweShlci0+ZXJfZGF0YSArIGVpLT5laV9zaXplICsgZWFfc2l6ZSAtIDEsICZjLCAxKTsKKwl9CisKKwllaS0+ZWlfc2l6ZSArPSBlYV9zaXplOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZ2ZzMl9saXN0eGF0dHIgLSBMaXN0IGdmczIgZXh0ZW5kZWQgYXR0cmlidXRlcworICogQGRlbnRyeTogVGhlIGRlbnRyeSB3aG9zZSBpbm9kZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbgorICogQGJ1ZmZlcjogVGhlIGJ1ZmZlciB0byB3cml0ZSB0aGUgcmVzdWx0cworICogQHNpemU6IFRoZSBzaXplIG9mIHRoZSBidWZmZXIKKyAqCisgKiBSZXR1cm5zOiBhY3R1YWwgc2l6ZSBvZiBkYXRhIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBlcnJvcgorICovCisKK3NzaXplX3QgZ2ZzMl9saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShkZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgZXI7CisJc3RydWN0IGdmczJfaG9sZGVyIGlfZ2g7CisJaW50IGVycm9yOworCisJbWVtc2V0KCZlciwgMCwgc2l6ZW9mKHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QpKTsKKwlpZiAoc2l6ZSkgeworCQllci5lcl9kYXRhID0gYnVmZmVyOworCQllci5lcl9kYXRhX2xlbiA9IHNpemU7CisJfQorCisJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZpX2doKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmIChpcC0+aV9lYXR0cikgeworCQlzdHJ1Y3QgZWFfbGlzdCBlaSA9IHsgLmVpX2VyID0gJmVyLCAuZWlfc2l6ZSA9IDAgfTsKKworCQllcnJvciA9IGVhX2ZvcmVhY2goaXAsIGVhX2xpc3RfaSwgJmVpKTsKKwkJaWYgKCFlcnJvcikKKwkJCWVycm9yID0gZWkuZWlfc2l6ZTsKKwl9CisKKwlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogZWFfZ2V0X3Vuc3R1ZmZlZCAtIGFjdHVhbGx5IGNvcGllcyB0aGUgdW5zdHVmZmVkIGRhdGEgaW50byB0aGUKKyAqICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGJ1ZmZlcgorICogQGlwOiBUaGUgR0ZTMiBpbm9kZQorICogQGVhOiBUaGUgZXh0ZW5kZWQgYXR0cmlidXRlIGhlYWRlciBzdHJ1Y3R1cmUKKyAqIEBkYXRhOiBUaGUgZGF0YSB0byBiZSBjb3BpZWQKKyAqCisgKiBSZXR1cm5zOiBlcnJubworICovCisKK3N0YXRpYyBpbnQgZWFfZ2V0X3Vuc3R1ZmZlZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWEsCisJCQkgICAgY2hhciAqZGF0YSkKK3sKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmlwLT5pX2lub2RlKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDsKKwl1bnNpZ25lZCBpbnQgYW1vdW50ID0gR0ZTMl9FQV9EQVRBX0xFTihlYSk7CisJdW5zaWduZWQgaW50IG5wdHJzID0gRElWX1JPVU5EX1VQKGFtb3VudCwgc2RwLT5zZF9qYnNpemUpOworCV9fYmU2NCAqZGF0YXB0cnMgPSBHRlMyX0VBMkRBVEFQVFJTKGVhKTsKKwl1bnNpZ25lZCBpbnQgeDsKKwlpbnQgZXJyb3IgPSAwOworCisJYmggPSBrY2FsbG9jKG5wdHJzLCBzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFkICopLCBHRlBfTk9GUyk7CisJaWYgKCFiaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKHggPSAwOyB4IDwgbnB0cnM7IHgrKykgeworCQllcnJvciA9IGdmczJfbWV0YV9yZWFkKGlwLT5pX2dsLCBiZTY0X3RvX2NwdSgqZGF0YXB0cnMpLCAwLAorCQkJCSAgICAgICBiaCArIHgpOworCQlpZiAoZXJyb3IpIHsKKwkJCXdoaWxlICh4LS0pCisJCQkJYnJlbHNlKGJoW3hdKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWRhdGFwdHJzKys7CisJfQorCisJZm9yICh4ID0gMDsgeCA8IG5wdHJzOyB4KyspIHsKKwkJZXJyb3IgPSBnZnMyX21ldGFfd2FpdChzZHAsIGJoW3hdKTsKKwkJaWYgKGVycm9yKSB7CisJCQlmb3IgKDsgeCA8IG5wdHJzOyB4KyspCisJCQkJYnJlbHNlKGJoW3hdKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChnZnMyX21ldGF0eXBlX2NoZWNrKHNkcCwgYmhbeF0sIEdGUzJfTUVUQVRZUEVfRUQpKSB7CisJCQlmb3IgKDsgeCA8IG5wdHJzOyB4KyspCisJCQkJYnJlbHNlKGJoW3hdKTsKKwkJCWVycm9yID0gLUVJTzsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbWVtY3B5KGRhdGEsIGJoW3hdLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IGdmczJfbWV0YV9oZWFkZXIpLAorCQkgICAgICAgKHNkcC0+c2RfamJzaXplID4gYW1vdW50KSA/IGFtb3VudCA6IHNkcC0+c2RfamJzaXplKTsKKworCQlhbW91bnQgLT0gc2RwLT5zZF9qYnNpemU7CisJCWRhdGEgKz0gc2RwLT5zZF9qYnNpemU7CisKKwkJYnJlbHNlKGJoW3hdKTsKKwl9CisKK291dDoKKwlrZnJlZShiaCk7CisJcmV0dXJuIGVycm9yOworfQorCitpbnQgZ2ZzMl9lYV9nZXRfY29weShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCwKKwkJICAgICBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgcmV0OworCXNpemVfdCBsZW4gPSBHRlMyX0VBX0RBVEFfTEVOKGVsLT5lbF9lYSk7CisJaWYgKGxlbiA+IHNpemUpCisJCXJldHVybiAtRVJBTkdFOworCisJaWYgKEdGUzJfRUFfSVNfU1RVRkZFRChlbC0+ZWxfZWEpKSB7CisJCW1lbWNweShkYXRhLCBHRlMyX0VBMkRBVEEoZWwtPmVsX2VhKSwgbGVuKTsKKwkJcmV0dXJuIGxlbjsKKwl9CisJcmV0ID0gZWFfZ2V0X3Vuc3R1ZmZlZChpcCwgZWwtPmVsX2VhLCBkYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIGdmczJfeGF0dHJfZ2V0IC0gR2V0IGEgR0ZTMiBleHRlbmRlZCBhdHRyaWJ1dGUKKyAqIEBpbm9kZTogVGhlIGlub2RlCisgKiBAdHlwZTogVGhlIHR5cGUgb2YgZXh0ZW5kZWQgYXR0cmlidXRlCisgKiBAbmFtZTogVGhlIG5hbWUgb2YgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZQorICogQGJ1ZmZlcjogVGhlIGJ1ZmZlciB0byB3cml0ZSB0aGUgcmVzdWx0IGludG8KKyAqIEBzaXplOiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKgorICogUmV0dXJuczogYWN0dWFsIHNpemUgb2YgZGF0YSBvbiBzdWNjZXNzLCAtZXJybm8gb24gZXJyb3IKKyAqLworCitpbnQgZ2ZzMl94YXR0cl9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiBlbDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoIWlwLT5pX2VhdHRyKQorCQlyZXR1cm4gLUVOT0RBVEE7CisJaWYgKHN0cmxlbihuYW1lKSA+IEdGUzJfRUFfTUFYX05BTUVfTEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVycm9yID0gZ2ZzMl9lYV9maW5kKGlwLCB0eXBlLCBuYW1lLCAmZWwpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCWlmICghZWwuZWxfZWEpCisJCXJldHVybiAtRU5PREFUQTsKKwlpZiAoc2l6ZSkKKwkJZXJyb3IgPSBnZnMyX2VhX2dldF9jb3B5KGlwLCAmZWwsIGJ1ZmZlciwgc2l6ZSk7CisJZWxzZQorCQllcnJvciA9IEdGUzJfRUFfREFUQV9MRU4oZWwuZWxfZWEpOworCWJyZWxzZShlbC5lbF9iaCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogZWFfYWxsb2NfYmxrIC0gYWxsb2NhdGVzIGEgbmV3IGJsb2NrIGZvciBleHRlbmRlZCBhdHRyaWJ1dGVzLgorICogQGlwOiBBIHBvaW50ZXIgdG8gdGhlIGlub2RlIHRoYXQncyBnZXR0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMKKyAqIEBiaHA6IFBvaW50ZXIgdG8gcG9pbnRlciB0byBhIHN0cnVjdCBidWZmZXJfaGVhZAorICoKKyAqIFJldHVybnM6IGVycm5vCisgKi8KKworc3RhdGljIGludCBlYV9hbGxvY19ibGsoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHApCit7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSk7CisJc3RydWN0IGdmczJfZWFfaGVhZGVyICplYTsKKwl1bnNpZ25lZCBpbnQgbiA9IDE7CisJdTY0IGJsb2NrOworCWludCBlcnJvcjsKKworCWVycm9yID0gZ2ZzMl9hbGxvY19ibG9jayhpcCwgJmJsb2NrLCAmbik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJZ2ZzMl90cmFuc19hZGRfdW5yZXZva2Uoc2RwLCBibG9jaywgMSk7CisJKmJocCA9IGdmczJfbWV0YV9uZXcoaXAtPmlfZ2wsIGJsb2NrKTsKKwlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgKmJocCwgMSk7CisJZ2ZzMl9tZXRhdHlwZV9zZXQoKmJocCwgR0ZTMl9NRVRBVFlQRV9FQSwgR0ZTMl9GT1JNQVRfRUEpOworCWdmczJfYnVmZmVyX2NsZWFyX3RhaWwoKmJocCwgc2l6ZW9mKHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyKSk7CisKKwllYSA9IEdGUzJfRUFfQkgyRklSU1QoKmJocCk7CisJZWEtPmVhX3JlY19sZW4gPSBjcHVfdG9fYmUzMihzZHAtPnNkX2pic2l6ZSk7CisJZWEtPmVhX3R5cGUgPSBHRlMyX0VBVFlQRV9VTlVTRUQ7CisJZWEtPmVhX2ZsYWdzID0gR0ZTMl9FQUZMQUdfTEFTVDsKKwllYS0+ZWFfbnVtX3B0cnMgPSAwOworCisJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBlYV93cml0ZSAtIHdyaXRlcyB0aGUgcmVxdWVzdCBpbmZvIHRvIGFuIGVhLCBjcmVhdGluZyBuZXcgYmxvY2tzIGlmCisgKiAgICAgICAgICAgIG5lY2Vzc2FyeQorICogQGlwOiBpbm9kZSB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkCisgKiBAZWE6IHRoZSBsb2NhdGlvbiBvZiB0aGUgbmV3IGVhIGluIGEgYmxvY2sKKyAqIEBlcjogdGhlIHdyaXRlIHJlcXVlc3QKKyAqCisgKiBOb3RlOiBkb2VzIG5vdCB1cGRhdGUgZWFfcmVjX2xlbiBvciB0aGUgR0ZTMl9FQUZMQUdfTEFTVCBiaW4gb2YgZWFfZmxhZ3MKKyAqCisgKiByZXR1cm5zIDogZXJybm8KKyAqLworCitzdGF0aWMgaW50IGVhX3dyaXRlKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSwKKwkJICAgIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKQoreworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmaXAtPmlfaW5vZGUpOworCWludCBlcnJvcjsKKworCWVhLT5lYV9kYXRhX2xlbiA9IGNwdV90b19iZTMyKGVyLT5lcl9kYXRhX2xlbik7CisJZWEtPmVhX25hbWVfbGVuID0gZXItPmVyX25hbWVfbGVuOworCWVhLT5lYV90eXBlID0gZXItPmVyX3R5cGU7CisJZWEtPl9fcGFkID0gMDsKKworCW1lbWNweShHRlMyX0VBMk5BTUUoZWEpLCBlci0+ZXJfbmFtZSwgZXItPmVyX25hbWVfbGVuKTsKKworCWlmIChHRlMyX0VBUkVRX1NJWkVfU1RVRkZFRChlcikgPD0gc2RwLT5zZF9qYnNpemUpIHsKKwkJZWEtPmVhX251bV9wdHJzID0gMDsKKwkJbWVtY3B5KEdGUzJfRUEyREFUQShlYSksIGVyLT5lcl9kYXRhLCBlci0+ZXJfZGF0YV9sZW4pOworCX0gZWxzZSB7CisJCV9fYmU2NCAqZGF0YXB0ciA9IEdGUzJfRUEyREFUQVBUUlMoZWEpOworCQljb25zdCBjaGFyICpkYXRhID0gZXItPmVyX2RhdGE7CisJCXVuc2lnbmVkIGludCBkYXRhX2xlbiA9IGVyLT5lcl9kYXRhX2xlbjsKKwkJdW5zaWduZWQgaW50IGNvcHk7CisJCXVuc2lnbmVkIGludCB4OworCisJCWVhLT5lYV9udW1fcHRycyA9IERJVl9ST1VORF9VUChlci0+ZXJfZGF0YV9sZW4sIHNkcC0+c2RfamJzaXplKTsKKwkJZm9yICh4ID0gMDsgeCA8IGVhLT5lYV9udW1fcHRyczsgeCsrKSB7CisJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCQkJdTY0IGJsb2NrOworCQkJaW50IG1oX3NpemUgPSBzaXplb2Yoc3RydWN0IGdmczJfbWV0YV9oZWFkZXIpOworCQkJdW5zaWduZWQgaW50IG4gPSAxOworCisJCQllcnJvciA9IGdmczJfYWxsb2NfYmxvY2soaXAsICZibG9jaywgJm4pOworCQkJaWYgKGVycm9yKQorCQkJCXJldHVybiBlcnJvcjsKKwkJCWdmczJfdHJhbnNfYWRkX3VucmV2b2tlKHNkcCwgYmxvY2ssIDEpOworCQkJYmggPSBnZnMyX21ldGFfbmV3KGlwLT5pX2dsLCBibG9jayk7CisJCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgYmgsIDEpOworCQkJZ2ZzMl9tZXRhdHlwZV9zZXQoYmgsIEdGUzJfTUVUQVRZUEVfRUQsIEdGUzJfRk9STUFUX0VEKTsKKworCQkJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSwgMSk7CisKKwkJCWNvcHkgPSBkYXRhX2xlbiA+IHNkcC0+c2RfamJzaXplID8gc2RwLT5zZF9qYnNpemUgOgorCQkJCQkJCSAgIGRhdGFfbGVuOworCQkJbWVtY3B5KGJoLT5iX2RhdGEgKyBtaF9zaXplLCBkYXRhLCBjb3B5KTsKKwkJCWlmIChjb3B5IDwgc2RwLT5zZF9qYnNpemUpCisJCQkJbWVtc2V0KGJoLT5iX2RhdGEgKyBtaF9zaXplICsgY29weSwgMCwKKwkJCQkgICAgICAgc2RwLT5zZF9qYnNpemUgLSBjb3B5KTsKKworCQkJKmRhdGFwdHIrKyA9IGNwdV90b19iZTY0KGJoLT5iX2Jsb2NrbnIpOworCQkJZGF0YSArPSBjb3B5OworCQkJZGF0YV9sZW4gLT0gY29weTsKKworCQkJYnJlbHNlKGJoKTsKKwkJfQorCisJCWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIWRhdGFfbGVuKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordHlwZWRlZiBpbnQgKCplYV9za2VsZXRvbl9jYWxsX3QpIChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsCisJCQkJICAgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIsIHZvaWQgKnByaXZhdGUpOworCitzdGF0aWMgaW50IGVhX2FsbG9jX3NrZWxldG9uKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIsCisJCQkgICAgIHVuc2lnbmVkIGludCBibGtzLAorCQkJICAgICBlYV9za2VsZXRvbl9jYWxsX3Qgc2tlbGV0b25fY2FsbCwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgZ2ZzMl9hbGxvYyAqYWw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOworCWludCBlcnJvcjsKKworCWFsID0gZ2ZzMl9hbGxvY19nZXQoaXApOworCWlmICghYWwpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyb3IgPSBnZnMyX3F1b3RhX2xvY2tfY2hlY2soaXApOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisKKwlhbC0+YWxfcmVxdWVzdGVkID0gYmxrczsKKworCWVycm9yID0gZ2ZzMl9pbnBsYWNlX3Jlc2VydmUoaXApOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZ3VubG9ja19xOworCisJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwKKwkJCQkgYmxrcyArIGFsLT5hbF9yZ2QtPnJkX2xlbmd0aCArCisJCQkJIFJFU19ESU5PREUgKyBSRVNfU1RBVEZTICsgUkVTX1FVT1RBLCAwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2lwcmVzOworCisJZXJyb3IgPSBza2VsZXRvbl9jYWxsKGlwLCBlciwgcHJpdmF0ZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9lbmRfdHJhbnM7CisKKwllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKKwlpZiAoIWVycm9yKSB7CisJCWlwLT5pX2lub2RlLmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBkaWJoLCAxKTsKKwkJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBkaWJoLT5iX2RhdGEpOworCQlicmVsc2UoZGliaCk7CisJfQorCitvdXRfZW5kX3RyYW5zOgorCWdmczJfdHJhbnNfZW5kKEdGUzJfU0IoJmlwLT5pX2lub2RlKSk7CitvdXRfaXByZXM6CisJZ2ZzMl9pbnBsYWNlX3JlbGVhc2UoaXApOworb3V0X2d1bmxvY2tfcToKKwlnZnMyX3F1b3RhX3VubG9jayhpcCk7CitvdXQ6CisJZ2ZzMl9hbGxvY19wdXQoaXApOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBlYV9pbml0X2koc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciwKKwkJICAgICB2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBlYV9hbGxvY19ibGsoaXAsICZiaCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpcC0+aV9lYXR0ciA9IGJoLT5iX2Jsb2NrbnI7CisJZXJyb3IgPSBlYV93cml0ZShpcCwgR0ZTMl9FQV9CSDJGSVJTVChiaCksIGVyKTsKKworCWJyZWxzZShiaCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogZWFfaW5pdCAtIGluaXRpYWxpemVzIGEgbmV3IGVhdHRyIGJsb2NrCisgKiBAaXA6CisgKiBAZXI6CisgKgorICogUmV0dXJuczogZXJybm8KKyAqLworCitzdGF0aWMgaW50IGVhX2luaXQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGdmczJfZWFfcmVxdWVzdCBlcjsKKwl1bnNpZ25lZCBpbnQgamJzaXplID0gR0ZTMl9TQigmaXAtPmlfaW5vZGUpLT5zZF9qYnNpemU7CisJdW5zaWduZWQgaW50IGJsa3MgPSAxOworCisJZXIuZXJfdHlwZSA9IHR5cGU7CisJZXIuZXJfbmFtZSA9IG5hbWU7CisJZXIuZXJfbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisJZXIuZXJfZGF0YSA9ICh2b2lkICopZGF0YTsKKwllci5lcl9kYXRhX2xlbiA9IHNpemU7CisKKwlpZiAoR0ZTMl9FQVJFUV9TSVpFX1NUVUZGRUQoJmVyKSA+IGpic2l6ZSkKKwkJYmxrcyArPSBESVZfUk9VTkRfVVAoZXIuZXJfZGF0YV9sZW4sIGpic2l6ZSk7CisKKwlyZXR1cm4gZWFfYWxsb2Nfc2tlbGV0b24oaXAsICZlciwgYmxrcywgZWFfaW5pdF9pLCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWFfc3BsaXRfZWEoc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSkKK3sKKwl1MzIgZWFfc2l6ZSA9IEdGUzJfRUFfU0laRShlYSk7CisJc3RydWN0IGdmczJfZWFfaGVhZGVyICpuZXcgPSAoc3RydWN0IGdmczJfZWFfaGVhZGVyICopKChjaGFyICopZWEgKworCQkJCSAgICAgZWFfc2l6ZSk7CisJdTMyIG5ld19zaXplID0gR0ZTMl9FQV9SRUNfTEVOKGVhKSAtIGVhX3NpemU7CisJaW50IGxhc3QgPSBlYS0+ZWFfZmxhZ3MgJiBHRlMyX0VBRkxBR19MQVNUOworCisJZWEtPmVhX3JlY19sZW4gPSBjcHVfdG9fYmUzMihlYV9zaXplKTsKKwllYS0+ZWFfZmxhZ3MgXj0gbGFzdDsKKworCW5ldy0+ZWFfcmVjX2xlbiA9IGNwdV90b19iZTMyKG5ld19zaXplKTsKKwluZXctPmVhX2ZsYWdzID0gbGFzdDsKKworCXJldHVybiBuZXc7Cit9CisKK3N0YXRpYyB2b2lkIGVhX3NldF9yZW1vdmVfc3R1ZmZlZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsCisJCQkJICBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwpCit7CisJc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSA9IGVsLT5lbF9lYTsKKwlzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKnByZXYgPSBlbC0+ZWxfcHJldjsKKwl1MzIgbGVuOworCisJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGVsLT5lbF9iaCwgMSk7CisKKwlpZiAoIXByZXYgfHwgIUdGUzJfRUFfSVNfU1RVRkZFRChlYSkpIHsKKwkJZWEtPmVhX3R5cGUgPSBHRlMyX0VBVFlQRV9VTlVTRUQ7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKEdGUzJfRUEyTkVYVChwcmV2KSAhPSBlYSkgeworCQlwcmV2ID0gR0ZTMl9FQTJORVhUKHByZXYpOworCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhHRlMyX1NCKCZpcC0+aV9pbm9kZSksIEdGUzJfRUEyTkVYVChwcmV2KSA9PSBlYSk7CisJfQorCisJbGVuID0gR0ZTMl9FQV9SRUNfTEVOKHByZXYpICsgR0ZTMl9FQV9SRUNfTEVOKGVhKTsKKwlwcmV2LT5lYV9yZWNfbGVuID0gY3B1X3RvX2JlMzIobGVuKTsKKworCWlmIChHRlMyX0VBX0lTX0xBU1QoZWEpKQorCQlwcmV2LT5lYV9mbGFncyB8PSBHRlMyX0VBRkxBR19MQVNUOworfQorCitzdHJ1Y3QgZWFfc2V0IHsKKwlpbnQgZWFfc3BsaXQ7CisKKwlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplc19lcjsKKwlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZXNfZWw7CisKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmVzX2JoOworCXN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZXNfZWE7Cit9OworCitzdGF0aWMgaW50IGVhX3NldF9zaW1wbGVfbm9hbGxvYyhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCQkJIHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWEsIHN0cnVjdCBlYV9zZXQgKmVzKQoreworCXN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyID0gZXMtPmVzX2VyOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oR0ZTMl9TQigmaXAtPmlfaW5vZGUpLCBSRVNfRElOT0RFICsgMiAqIFJFU19FQVRUUiwgMCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgYmgsIDEpOworCisJaWYgKGVzLT5lYV9zcGxpdCkKKwkJZWEgPSBlYV9zcGxpdF9lYShlYSk7CisKKwllYV93cml0ZShpcCwgZWEsIGVyKTsKKworCWlmIChlcy0+ZXNfZWwpCisJCWVhX3NldF9yZW1vdmVfc3R1ZmZlZChpcCwgZXMtPmVzX2VsKTsKKworCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisJaXAtPmlfaW5vZGUuaV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7CisJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBkaWJoLT5iX2RhdGEpOworCWJyZWxzZShkaWJoKTsKK291dDoKKwlnZnMyX3RyYW5zX2VuZChHRlMyX1NCKCZpcC0+aV9pbm9kZSkpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBlYV9zZXRfc2ltcGxlX2FsbG9jKHN0cnVjdCBnZnMyX2lub2RlICppcCwKKwkJCSAgICAgICBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgZWFfc2V0ICplcyA9IHByaXZhdGU7CisJc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSA9IGVzLT5lc19lYTsKKwlpbnQgZXJyb3I7CisKKwlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZXMtPmVzX2JoLCAxKTsKKworCWlmIChlcy0+ZWFfc3BsaXQpCisJCWVhID0gZWFfc3BsaXRfZWEoZWEpOworCisJZXJyb3IgPSBlYV93cml0ZShpcCwgZWEsIGVyKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmIChlcy0+ZXNfZWwpCisJCWVhX3NldF9yZW1vdmVfc3R1ZmZlZChpcCwgZXMtPmVzX2VsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVhX3NldF9zaW1wbGUoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJIHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWEsIHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqcHJldiwKKwkJCSB2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCBlYV9zZXQgKmVzID0gcHJpdmF0ZTsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlpbnQgc3R1ZmZlZDsKKwlpbnQgZXJyb3I7CisKKwlzdHVmZmVkID0gZWFfY2FsY19zaXplKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgZXMtPmVzX2VyLT5lcl9uYW1lX2xlbiwKKwkJCSAgICAgICBlcy0+ZXNfZXItPmVyX2RhdGFfbGVuLCAmc2l6ZSk7CisKKwlpZiAoZWEtPmVhX3R5cGUgPT0gR0ZTMl9FQVRZUEVfVU5VU0VEKSB7CisJCWlmIChHRlMyX0VBX1JFQ19MRU4oZWEpIDwgc2l6ZSkKKwkJCXJldHVybiAwOworCQlpZiAoIUdGUzJfRUFfSVNfU1RVRkZFRChlYSkpIHsKKwkJCWVycm9yID0gZWFfcmVtb3ZlX3Vuc3R1ZmZlZChpcCwgYmgsIGVhLCBwcmV2LCAxKTsKKwkJCWlmIChlcnJvcikKKwkJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwkJZXMtPmVhX3NwbGl0ID0gMDsKKwl9IGVsc2UgaWYgKEdGUzJfRUFfUkVDX0xFTihlYSkgLSBHRlMyX0VBX1NJWkUoZWEpID49IHNpemUpCisJCWVzLT5lYV9zcGxpdCA9IDE7CisJZWxzZQorCQlyZXR1cm4gMDsKKworCWlmIChzdHVmZmVkKSB7CisJCWVycm9yID0gZWFfc2V0X3NpbXBsZV9ub2FsbG9jKGlwLCBiaCwgZWEsIGVzKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGludCBibGtzOworCisJCWVzLT5lc19iaCA9IGJoOworCQllcy0+ZXNfZWEgPSBlYTsKKwkJYmxrcyA9IDIgKyBESVZfUk9VTkRfVVAoZXMtPmVzX2VyLT5lcl9kYXRhX2xlbiwKKwkJCQkJR0ZTMl9TQigmaXAtPmlfaW5vZGUpLT5zZF9qYnNpemUpOworCisJCWVycm9yID0gZWFfYWxsb2Nfc2tlbGV0b24oaXAsIGVzLT5lc19lciwgYmxrcywKKwkJCQkJICBlYV9zZXRfc2ltcGxlX2FsbG9jLCBlcyk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBlYV9zZXRfYmxvY2soc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciwKKwkJCXZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZpcC0+aV9pbm9kZSk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICppbmRiaCwgKm5ld2JoOworCV9fYmU2NCAqZWFibGs7CisJaW50IGVycm9yOworCWludCBtaF9zaXplID0gc2l6ZW9mKHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyKTsKKworCWlmIChpcC0+aV9kaXNrZmxhZ3MgJiBHRlMyX0RJRl9FQV9JTkRJUkVDVCkgeworCQlfX2JlNjQgKmVuZDsKKworCQllcnJvciA9IGdmczJfbWV0YV9yZWFkKGlwLT5pX2dsLCBpcC0+aV9lYXR0ciwgRElPX1dBSVQsCisJCQkJICAgICAgICZpbmRiaCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKworCQlpZiAoZ2ZzMl9tZXRhdHlwZV9jaGVjayhzZHAsIGluZGJoLCBHRlMyX01FVEFUWVBFX0lOKSkgeworCQkJZXJyb3IgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KKworCQllYWJsayA9IChfX2JlNjQgKikoaW5kYmgtPmJfZGF0YSArIG1oX3NpemUpOworCQllbmQgPSBlYWJsayArIHNkcC0+c2RfaW5wdHJzOworCisJCWZvciAoOyBlYWJsayA8IGVuZDsgZWFibGsrKykKKwkJCWlmICghKmVhYmxrKQorCQkJCWJyZWFrOworCisJCWlmIChlYWJsayA9PSBlbmQpIHsKKwkJCWVycm9yID0gLUVOT1NQQzsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGluZGJoLCAxKTsKKwl9IGVsc2UgeworCQl1NjQgYmxrOworCQl1bnNpZ25lZCBpbnQgbiA9IDE7CisJCWVycm9yID0gZ2ZzMl9hbGxvY19ibG9jayhpcCwgJmJsaywgJm4pOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJCWdmczJfdHJhbnNfYWRkX3VucmV2b2tlKHNkcCwgYmxrLCAxKTsKKwkJaW5kYmggPSBnZnMyX21ldGFfbmV3KGlwLT5pX2dsLCBibGspOworCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgaW5kYmgsIDEpOworCQlnZnMyX21ldGF0eXBlX3NldChpbmRiaCwgR0ZTMl9NRVRBVFlQRV9JTiwgR0ZTMl9GT1JNQVRfSU4pOworCQlnZnMyX2J1ZmZlcl9jbGVhcl90YWlsKGluZGJoLCBtaF9zaXplKTsKKworCQllYWJsayA9IChfX2JlNjQgKikoaW5kYmgtPmJfZGF0YSArIG1oX3NpemUpOworCQkqZWFibGsgPSBjcHVfdG9fYmU2NChpcC0+aV9lYXR0cik7CisJCWlwLT5pX2VhdHRyID0gYmxrOworCQlpcC0+aV9kaXNrZmxhZ3MgfD0gR0ZTMl9ESUZfRUFfSU5ESVJFQ1Q7CisJCWdmczJfYWRkX2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUsIDEpOworCisJCWVhYmxrKys7CisJfQorCisJZXJyb3IgPSBlYV9hbGxvY19ibGsoaXAsICZuZXdiaCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKworCSplYWJsayA9IGNwdV90b19iZTY0KCh1NjQpbmV3YmgtPmJfYmxvY2tucik7CisJZXJyb3IgPSBlYV93cml0ZShpcCwgR0ZTMl9FQV9CSDJGSVJTVChuZXdiaCksIGVyKTsKKwlicmVsc2UobmV3YmgpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisKKwlpZiAocHJpdmF0ZSkKKwkJZWFfc2V0X3JlbW92ZV9zdHVmZmVkKGlwLCBwcml2YXRlKTsKKworb3V0OgorCWJyZWxzZShpbmRiaCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGVhX3NldF9pKHN0cnVjdCBnZnMyX2lub2RlICppcCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCkKK3sKKwlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IGVyOworCXN0cnVjdCBlYV9zZXQgZXM7CisJdW5zaWduZWQgaW50IGJsa3MgPSAyOworCWludCBlcnJvcjsKKworCWVyLmVyX3R5cGUgPSB0eXBlOworCWVyLmVyX25hbWUgPSBuYW1lOworCWVyLmVyX2RhdGEgPSAodm9pZCAqKXZhbHVlOworCWVyLmVyX25hbWVfbGVuID0gc3RybGVuKG5hbWUpOworCWVyLmVyX2RhdGFfbGVuID0gc2l6ZTsKKworCW1lbXNldCgmZXMsIDAsIHNpemVvZihzdHJ1Y3QgZWFfc2V0KSk7CisJZXMuZXNfZXIgPSAmZXI7CisJZXMuZXNfZWwgPSBlbDsKKworCWVycm9yID0gZWFfZm9yZWFjaChpcCwgZWFfc2V0X3NpbXBsZSwgJmVzKTsKKwlpZiAoZXJyb3IgPiAwKQorCQlyZXR1cm4gMDsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmICghKGlwLT5pX2Rpc2tmbGFncyAmIEdGUzJfRElGX0VBX0lORElSRUNUKSkKKwkJYmxrcysrOworCWlmIChHRlMyX0VBUkVRX1NJWkVfU1RVRkZFRCgmZXIpID4gR0ZTMl9TQigmaXAtPmlfaW5vZGUpLT5zZF9qYnNpemUpCisJCWJsa3MgKz0gRElWX1JPVU5EX1VQKGVyLmVyX2RhdGFfbGVuLCBHRlMyX1NCKCZpcC0+aV9pbm9kZSktPnNkX2pic2l6ZSk7CisKKwlyZXR1cm4gZWFfYWxsb2Nfc2tlbGV0b24oaXAsICZlciwgYmxrcywgZWFfc2V0X2Jsb2NrLCBlbCk7Cit9CisKK3N0YXRpYyBpbnQgZWFfc2V0X3JlbW92ZV91bnN0dWZmZWQoc3RydWN0IGdmczJfaW5vZGUgKmlwLAorCQkJCSAgIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCkKK3sKKwlpZiAoZWwtPmVsX3ByZXYgJiYgR0ZTMl9FQTJORVhUKGVsLT5lbF9wcmV2KSAhPSBlbC0+ZWxfZWEpIHsKKwkJZWwtPmVsX3ByZXYgPSBHRlMyX0VBMk5FWFQoZWwtPmVsX3ByZXYpOworCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhHRlMyX1NCKCZpcC0+aV9pbm9kZSksCisJCQkJICAgICBHRlMyX0VBMk5FWFQoZWwtPmVsX3ByZXYpID09IGVsLT5lbF9lYSk7CisJfQorCisJcmV0dXJuIGVhX3JlbW92ZV91bnN0dWZmZWQoaXAsIGVsLT5lbF9iaCwgZWwtPmVsX2VhLCBlbC0+ZWxfcHJldiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZWFfcmVtb3ZlX3N0dWZmZWQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwpCit7CisJc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSA9IGVsLT5lbF9lYTsKKwlzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKnByZXYgPSBlbC0+ZWxfcHJldjsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgUkVTX0RJTk9ERSArIFJFU19FQVRUUiwgMCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZWwtPmVsX2JoLCAxKTsKKworCWlmIChwcmV2KSB7CisJCXUzMiBsZW47CisKKwkJbGVuID0gR0ZTMl9FQV9SRUNfTEVOKHByZXYpICsgR0ZTMl9FQV9SRUNfTEVOKGVhKTsKKwkJcHJldi0+ZWFfcmVjX2xlbiA9IGNwdV90b19iZTMyKGxlbik7CisKKwkJaWYgKEdGUzJfRUFfSVNfTEFTVChlYSkpCisJCQlwcmV2LT5lYV9mbGFncyB8PSBHRlMyX0VBRkxBR19MQVNUOworCX0gZWxzZSB7CisJCWVhLT5lYV90eXBlID0gR0ZTMl9FQVRZUEVfVU5VU0VEOworCX0KKworCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOworCWlmICghZXJyb3IpIHsKKwkJaXAtPmlfaW5vZGUuaV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOworCQlnZnMyX2Rpbm9kZV9vdXQoaXAsIGRpYmgtPmJfZGF0YSk7CisJCWJyZWxzZShkaWJoKTsKKwl9CisKKwlnZnMyX3RyYW5zX2VuZChHRlMyX1NCKCZpcC0+aV9pbm9kZSkpOworCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIGdmczJfeGF0dHJfcmVtb3ZlIC0gUmVtb3ZlIGEgR0ZTMiBleHRlbmRlZCBhdHRyaWJ1dGUKKyAqIEBpbm9kZTogVGhlIGlub2RlCisgKiBAdHlwZTogVGhlIHR5cGUgb2YgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZQorICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUKKyAqCisgKiBUaGlzIGlzIG5vdCBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIFZGUyBzaW5jZSB3ZSB1c2UgdGhlIChjb21tb24pCisgKiBzY2hlbWUgb2YgbWFraW5nIGEgInNldCB3aXRoIE5VTEwgZGF0YSIgbWVhbiBhIHJlbW92ZSByZXF1ZXN0LiBOb3RlCisgKiB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSBzZXQgd2l0aCB6ZXJvIGxlbmd0aCBkYXRhLgorICoKKyAqIFJldHVybnM6IDAsIG9yIGVycm5vIG9uIGZhaWx1cmUKKyAqLworCitzdGF0aWMgaW50IGdmczJfeGF0dHJfcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJc3RydWN0IGdmczJfZWFfbG9jYXRpb24gZWw7CisJaW50IGVycm9yOworCisJaWYgKCFpcC0+aV9lYXR0cikKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJZXJyb3IgPSBnZnMyX2VhX2ZpbmQoaXAsIHR5cGUsIG5hbWUsICZlbCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJaWYgKCFlbC5lbF9lYSkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKEdGUzJfRUFfSVNfU1RVRkZFRChlbC5lbF9lYSkpCisJCWVycm9yID0gZWFfcmVtb3ZlX3N0dWZmZWQoaXAsICZlbCk7CisJZWxzZQorCQllcnJvciA9IGVhX3JlbW92ZV91bnN0dWZmZWQoaXAsIGVsLmVsX2JoLCBlbC5lbF9lYSwgZWwuZWxfcHJldiwgMCk7CisKKwlicmVsc2UoZWwuZWxfYmgpOworCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIGdmczJfeGF0dHJfc2V0IC0gU2V0IChvciByZW1vdmUpIGEgR0ZTMiBleHRlbmRlZCBhdHRyaWJ1dGUKKyAqIEBpbm9kZTogVGhlIGlub2RlCisgKiBAdHlwZTogVGhlIHR5cGUgb2YgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZQorICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUKKyAqIEB2YWx1ZTogVGhlIHZhbHVlIG9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgKE5VTEwgZm9yIHJlbW92ZSkKKyAqIEBzaXplOiBUaGUgc2l6ZSBvZiB0aGUgQHZhbHVlIGFyZ3VtZW50CisgKiBAZmxhZ3M6IENyZWF0ZSBvciBSZXBsYWNlCisgKgorICogU2VlIGdmczJfeGF0dHJfcmVtb3ZlKCkgZm9yIGRldGFpbHMgb2YgdGhlIHJlbW92YWwgb2YgeGF0dHJzLgorICoKKyAqIFJldHVybnM6IDAgb3IgZXJybm8gb24gZmFpbHVyZQorICovCisKK2ludCBnZnMyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOworCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsOworCXVuc2lnbmVkIGludCBuYW1lbCA9IHN0cmxlbihuYW1lKTsKKwlpbnQgZXJyb3I7CisKKwlpZiAoSVNfSU1NVVRBQkxFKGlub2RlKSB8fCBJU19BUFBFTkQoaW5vZGUpKQorCQlyZXR1cm4gLUVQRVJNOworCWlmIChuYW1lbCA+IEdGUzJfRUFfTUFYX05BTUVfTEVOKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCWlmICh2YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gZ2ZzMl94YXR0cl9yZW1vdmUoaW5vZGUsIHR5cGUsIG5hbWUpOworCisJaWYgKGVhX2NoZWNrX3NpemUoc2RwLCBuYW1lbCwgc2l6ZSkpCisJCXJldHVybiAtRVJBTkdFOworCisJaWYgKCFpcC0+aV9lYXR0cikgeworCQlpZiAoZmxhZ3MgJiBYQVRUUl9SRVBMQUNFKQorCQkJcmV0dXJuIC1FTk9EQVRBOworCQlyZXR1cm4gZWFfaW5pdChpcCwgdHlwZSwgbmFtZSwgdmFsdWUsIHNpemUpOworCX0KKworCWVycm9yID0gZ2ZzMl9lYV9maW5kKGlwLCB0eXBlLCBuYW1lLCAmZWwpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKGVsLmVsX2VhKSB7CisJCWlmIChpcC0+aV9kaXNrZmxhZ3MgJiBHRlMyX0RJRl9BUFBFTkRPTkxZKSB7CisJCQlicmVsc2UoZWwuZWxfYmgpOworCQkJcmV0dXJuIC1FUEVSTTsKKwkJfQorCisJCWVycm9yID0gLUVFWElTVDsKKwkJaWYgKCEoZmxhZ3MgJiBYQVRUUl9DUkVBVEUpKSB7CisJCQlpbnQgdW5zdHVmZmVkID0gIUdGUzJfRUFfSVNfU1RVRkZFRChlbC5lbF9lYSk7CisJCQllcnJvciA9IGVhX3NldF9pKGlwLCB0eXBlLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgJmVsKTsKKwkJCWlmICghZXJyb3IgJiYgdW5zdHVmZmVkKQorCQkJCWVhX3NldF9yZW1vdmVfdW5zdHVmZmVkKGlwLCAmZWwpOworCQl9CisKKwkJYnJlbHNlKGVsLmVsX2JoKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWVycm9yID0gLUVOT0RBVEE7CisJaWYgKCEoZmxhZ3MgJiBYQVRUUl9SRVBMQUNFKSkKKwkJZXJyb3IgPSBlYV9zZXRfaShpcCwgdHlwZSwgbmFtZSwgdmFsdWUsIHNpemUsIE5VTEwpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGVhX2FjbF9jaG1vZF91bnN0dWZmZWQoc3RydWN0IGdmczJfaW5vZGUgKmlwLAorCQkJCSAgc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSwgY2hhciAqZGF0YSkKK3sKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmlwLT5pX2lub2RlKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDsKKwl1bnNpZ25lZCBpbnQgYW1vdW50ID0gR0ZTMl9FQV9EQVRBX0xFTihlYSk7CisJdW5zaWduZWQgaW50IG5wdHJzID0gRElWX1JPVU5EX1VQKGFtb3VudCwgc2RwLT5zZF9qYnNpemUpOworCV9fYmU2NCAqZGF0YXB0cnMgPSBHRlMyX0VBMkRBVEFQVFJTKGVhKTsKKwl1bnNpZ25lZCBpbnQgeDsKKwlpbnQgZXJyb3I7CisKKwliaCA9IGtjYWxsb2MobnB0cnMsIHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiksIEdGUF9OT0ZTKTsKKwlpZiAoIWJoKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIG5wdHJzICsgUkVTX0RJTk9ERSwgMCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKworCWZvciAoeCA9IDA7IHggPCBucHRyczsgeCsrKSB7CisJCWVycm9yID0gZ2ZzMl9tZXRhX3JlYWQoaXAtPmlfZ2wsIGJlNjRfdG9fY3B1KCpkYXRhcHRycyksIDAsCisJCQkJICAgICAgIGJoICsgeCk7CisJCWlmIChlcnJvcikgeworCQkJd2hpbGUgKHgtLSkKKwkJCQlicmVsc2UoYmhbeF0pOworCQkJZ290byBmYWlsOworCQl9CisJCWRhdGFwdHJzKys7CisJfQorCisJZm9yICh4ID0gMDsgeCA8IG5wdHJzOyB4KyspIHsKKwkJZXJyb3IgPSBnZnMyX21ldGFfd2FpdChzZHAsIGJoW3hdKTsKKwkJaWYgKGVycm9yKSB7CisJCQlmb3IgKDsgeCA8IG5wdHJzOyB4KyspCisJCQkJYnJlbHNlKGJoW3hdKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlpZiAoZ2ZzMl9tZXRhdHlwZV9jaGVjayhzZHAsIGJoW3hdLCBHRlMyX01FVEFUWVBFX0VEKSkgeworCQkJZm9yICg7IHggPCBucHRyczsgeCsrKQorCQkJCWJyZWxzZShiaFt4XSk7CisJCQllcnJvciA9IC1FSU87CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgYmhbeF0sIDEpOworCisJCW1lbWNweShiaFt4XS0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyKSwgZGF0YSwKKwkJICAgICAgIChzZHAtPnNkX2pic2l6ZSA+IGFtb3VudCkgPyBhbW91bnQgOiBzZHAtPnNkX2pic2l6ZSk7CisKKwkJYW1vdW50IC09IHNkcC0+c2RfamJzaXplOworCQlkYXRhICs9IHNkcC0+c2RfamJzaXplOworCisJCWJyZWxzZShiaFt4XSk7CisJfQorCitvdXQ6CisJa2ZyZWUoYmgpOworCXJldHVybiBlcnJvcjsKKworZmFpbDoKKwlnZnMyX3RyYW5zX2VuZChzZHApOworCWtmcmVlKGJoKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBnZnMyX2VhX2FjbF9jaG1vZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCwKKwkJICAgICAgc3RydWN0IGlhdHRyICphdHRyLCBjaGFyICpkYXRhKQoreworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoR0ZTMl9FQV9JU19TVFVGRkVEKGVsLT5lbF9lYSkpIHsKKwkJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgUkVTX0RJTk9ERSArIFJFU19FQVRUUiwgMCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKworCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZWwtPmVsX2JoLCAxKTsKKwkJbWVtY3B5KEdGUzJfRUEyREFUQShlbC0+ZWxfZWEpLCBkYXRhLAorCQkgICAgICAgR0ZTMl9FQV9EQVRBX0xFTihlbC0+ZWxfZWEpKTsKKwl9IGVsc2UKKwkJZXJyb3IgPSBlYV9hY2xfY2htb2RfdW5zdHVmZmVkKGlwLCBlbC0+ZWxfZWEsIGRhdGEpOworCisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKKwlpZiAoIWVycm9yKSB7CisJCWVycm9yID0gaW5vZGVfc2V0YXR0cigmaXAtPmlfaW5vZGUsIGF0dHIpOworCQlnZnMyX2Fzc2VydF93YXJuKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgIWVycm9yKTsKKwkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOworCQlnZnMyX2Rpbm9kZV9vdXQoaXAsIGRpYmgtPmJfZGF0YSk7CisJCWJyZWxzZShkaWJoKTsKKwl9CisKKwlnZnMyX3RyYW5zX2VuZChHRlMyX1NCKCZpcC0+aV9pbm9kZSkpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGVhX2RlYWxsb2NfaW5kaXJlY3Qoc3RydWN0IGdmczJfaW5vZGUgKmlwKQoreworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmaXAtPmlfaW5vZGUpOworCXN0cnVjdCBnZnMyX3JncnBfbGlzdCBybGlzdDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmluZGJoLCAqZGliaDsKKwlfX2JlNjQgKmVhYmxrLCAqZW5kOworCXVuc2lnbmVkIGludCByZ19ibG9ja3MgPSAwOworCXU2NCBic3RhcnQgPSAwOworCXVuc2lnbmVkIGludCBibGVuID0gMDsKKwl1bnNpZ25lZCBpbnQgYmxrcyA9IDA7CisJdW5zaWduZWQgaW50IHg7CisJaW50IGVycm9yOworCisJbWVtc2V0KCZybGlzdCwgMCwgc2l6ZW9mKHN0cnVjdCBnZnMyX3JncnBfbGlzdCkpOworCisJZXJyb3IgPSBnZnMyX21ldGFfcmVhZChpcC0+aV9nbCwgaXAtPmlfZWF0dHIsIERJT19XQUlULCAmaW5kYmgpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKGdmczJfbWV0YXR5cGVfY2hlY2soc2RwLCBpbmRiaCwgR0ZTMl9NRVRBVFlQRV9JTikpIHsKKwkJZXJyb3IgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwllYWJsayA9IChfX2JlNjQgKikoaW5kYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlcikpOworCWVuZCA9IGVhYmxrICsgc2RwLT5zZF9pbnB0cnM7CisKKwlmb3IgKDsgZWFibGsgPCBlbmQ7IGVhYmxrKyspIHsKKwkJdTY0IGJuOworCisJCWlmICghKmVhYmxrKQorCQkJYnJlYWs7CisJCWJuID0gYmU2NF90b19jcHUoKmVhYmxrKTsKKworCQlpZiAoYnN0YXJ0ICsgYmxlbiA9PSBibikKKwkJCWJsZW4rKzsKKwkJZWxzZSB7CisJCQlpZiAoYnN0YXJ0KQorCQkJCWdmczJfcmxpc3RfYWRkKHNkcCwgJnJsaXN0LCBic3RhcnQpOworCQkJYnN0YXJ0ID0gYm47CisJCQlibGVuID0gMTsKKwkJfQorCQlibGtzKys7CisJfQorCWlmIChic3RhcnQpCisJCWdmczJfcmxpc3RfYWRkKHNkcCwgJnJsaXN0LCBic3RhcnQpOworCWVsc2UKKwkJZ290byBvdXQ7CisKKwlnZnMyX3JsaXN0X2FsbG9jKCZybGlzdCwgTE1fU1RfRVhDTFVTSVZFKTsKKworCWZvciAoeCA9IDA7IHggPCBybGlzdC5ybF9yZ3JwczsgeCsrKSB7CisJCXN0cnVjdCBnZnMyX3JncnBkICpyZ2Q7CisJCXJnZCA9IHJsaXN0LnJsX2doc1t4XS5naF9nbC0+Z2xfb2JqZWN0OworCQlyZ19ibG9ja3MgKz0gcmdkLT5yZF9sZW5ndGg7CisJfQorCisJZXJyb3IgPSBnZnMyX2dsb2NrX25xX20ocmxpc3QucmxfcmdycHMsIHJsaXN0LnJsX2docyk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9ybGlzdF9mcmVlOworCisJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgcmdfYmxvY2tzICsgUkVTX0RJTk9ERSArIFJFU19JTkRJUkVDVCArCisJCQkJIFJFU19TVEFURlMgKyBSRVNfUVVPVEEsIGJsa3MpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZ3VubG9jazsKKworCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBpbmRiaCwgMSk7CisKKwllYWJsayA9IChfX2JlNjQgKikoaW5kYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlcikpOworCWJzdGFydCA9IDA7CisJYmxlbiA9IDA7CisKKwlmb3IgKDsgZWFibGsgPCBlbmQ7IGVhYmxrKyspIHsKKwkJdTY0IGJuOworCisJCWlmICghKmVhYmxrKQorCQkJYnJlYWs7CisJCWJuID0gYmU2NF90b19jcHUoKmVhYmxrKTsKKworCQlpZiAoYnN0YXJ0ICsgYmxlbiA9PSBibikKKwkJCWJsZW4rKzsKKwkJZWxzZSB7CisJCQlpZiAoYnN0YXJ0KQorCQkJCWdmczJfZnJlZV9tZXRhKGlwLCBic3RhcnQsIGJsZW4pOworCQkJYnN0YXJ0ID0gYm47CisJCQlibGVuID0gMTsKKwkJfQorCisJCSplYWJsayA9IDA7CisJCWdmczJfYWRkX2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUsIC0xKTsKKwl9CisJaWYgKGJzdGFydCkKKwkJZ2ZzMl9mcmVlX21ldGEoaXAsIGJzdGFydCwgYmxlbik7CisKKwlpcC0+aV9kaXNrZmxhZ3MgJj0gfkdGUzJfRElGX0VBX0lORElSRUNUOworCisJZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7CisJaWYgKCFlcnJvcikgeworCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7CisJCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKKwkJYnJlbHNlKGRpYmgpOworCX0KKworCWdmczJfdHJhbnNfZW5kKHNkcCk7CisKK291dF9ndW5sb2NrOgorCWdmczJfZ2xvY2tfZHFfbShybGlzdC5ybF9yZ3Jwcywgcmxpc3QucmxfZ2hzKTsKK291dF9ybGlzdF9mcmVlOgorCWdmczJfcmxpc3RfZnJlZSgmcmxpc3QpOworb3V0OgorCWJyZWxzZShpbmRiaCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGVhX2RlYWxsb2NfYmxvY2soc3RydWN0IGdmczJfaW5vZGUgKmlwKQoreworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmaXAtPmlfaW5vZGUpOworCXN0cnVjdCBnZnMyX2FsbG9jICphbCA9IGlwLT5pX2FsbG9jOworCXN0cnVjdCBnZnMyX3JncnBkICpyZ2Q7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOworCWludCBlcnJvcjsKKworCXJnZCA9IGdmczJfYmxrMnJncnBkKHNkcCwgaXAtPmlfZWF0dHIpOworCWlmICghcmdkKSB7CisJCWdmczJfY29uc2lzdF9pbm9kZShpcCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHJnZC0+cmRfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwKKwkJCQkgICAmYWwtPmFsX3JnZF9naCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCBSRVNfUkdfQklUICsgUkVTX0RJTk9ERSArIFJFU19TVEFURlMgKworCQkJCSBSRVNfUVVPVEEsIDEpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZ3VubG9jazsKKworCWdmczJfZnJlZV9tZXRhKGlwLCBpcC0+aV9lYXR0ciwgMSk7CisKKwlpcC0+aV9lYXR0ciA9IDA7CisJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSwgLTEpOworCisJZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7CisJaWYgKCFlcnJvcikgeworCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7CisJCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKKwkJYnJlbHNlKGRpYmgpOworCX0KKworCWdmczJfdHJhbnNfZW5kKHNkcCk7CisKK291dF9ndW5sb2NrOgorCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZhbC0+YWxfcmdkX2doKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogZ2ZzMl9lYV9kZWFsbG9jIC0gZGVhbGxvY2F0ZSB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIGZvcmsKKyAqIEBpcDogdGhlIGlub2RlCisgKgorICogUmV0dXJuczogZXJybm8KKyAqLworCitpbnQgZ2ZzMl9lYV9kZWFsbG9jKHN0cnVjdCBnZnMyX2lub2RlICppcCkKK3sKKwlzdHJ1Y3QgZ2ZzMl9hbGxvYyAqYWw7CisJaW50IGVycm9yOworCisJYWwgPSBnZnMyX2FsbG9jX2dldChpcCk7CisJaWYgKCFhbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnJvciA9IGdmczJfcXVvdGFfaG9sZChpcCwgTk9fUVVPVEFfQ0hBTkdFLCBOT19RVU9UQV9DSEFOR0UpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfYWxsb2M7CisKKwllcnJvciA9IGdmczJfcmluZGV4X2hvbGQoR0ZTMl9TQigmaXAtPmlfaW5vZGUpLCAmYWwtPmFsX3JpX2doKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3F1b3RhOworCisJZXJyb3IgPSBlYV9mb3JlYWNoKGlwLCBlYV9kZWFsbG9jX3Vuc3R1ZmZlZCwgTlVMTCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9yaW5kZXg7CisKKwlpZiAoaXAtPmlfZGlza2ZsYWdzICYgR0ZTMl9ESUZfRUFfSU5ESVJFQ1QpIHsKKwkJZXJyb3IgPSBlYV9kZWFsbG9jX2luZGlyZWN0KGlwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfcmluZGV4OworCX0KKworCWVycm9yID0gZWFfZGVhbGxvY19ibG9jayhpcCk7CisKK291dF9yaW5kZXg6CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmFsLT5hbF9yaV9naCk7CitvdXRfcXVvdGE6CisJZ2ZzMl9xdW90YV91bmhvbGQoaXApOworb3V0X2FsbG9jOgorCWdmczJfYWxsb2NfcHV0KGlwKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgZ2ZzMl94YXR0cl91c2VyX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIGdmczJfeGF0dHJfZ2V0KGlub2RlLCBHRlMyX0VBVFlQRV9VU1IsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgZ2ZzMl94YXR0cl91c2VyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCXJldHVybiBnZnMyX3hhdHRyX3NldChpbm9kZSwgR0ZTMl9FQVRZUEVfVVNSLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGdmczJfeGF0dHJfc3lzdGVtX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCXJldHVybiBnZnMyX3hhdHRyX2dldChpbm9kZSwgR0ZTMl9FQVRZUEVfU1lTLCBuYW1lLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgaW50IGdmczJfeGF0dHJfc3lzdGVtX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlyZXR1cm4gZ2ZzMl94YXR0cl9zZXQoaW5vZGUsIEdGUzJfRUFUWVBFX1NZUywgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKK30KKworc3RhdGljIGludCBnZnMyX3hhdHRyX3NlY3VyaXR5X2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIGdmczJfeGF0dHJfZ2V0KGlub2RlLCBHRlMyX0VBVFlQRV9TRUNVUklUWSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKK30KKworc3RhdGljIGludCBnZnMyX3hhdHRyX3NlY3VyaXR5X3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCXJldHVybiBnZnMyX3hhdHRyX3NldChpbm9kZSwgR0ZTMl9FQVRZUEVfU0VDVVJJVFksIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBnZnMyX3hhdHRyX3VzZXJfaGFuZGxlciA9IHsKKwkucHJlZml4ID0gWEFUVFJfVVNFUl9QUkVGSVgsCisJLmdldCAgICA9IGdmczJfeGF0dHJfdXNlcl9nZXQsCisJLnNldCAgICA9IGdmczJfeGF0dHJfdXNlcl9zZXQsCit9OworCitzdGF0aWMgc3RydWN0IHhhdHRyX2hhbmRsZXIgZ2ZzMl94YXR0cl9zZWN1cml0eV9oYW5kbGVyID0geworCS5wcmVmaXggPSBYQVRUUl9TRUNVUklUWV9QUkVGSVgsCisJLmdldCAgICA9IGdmczJfeGF0dHJfc2VjdXJpdHlfZ2V0LAorCS5zZXQgICAgPSBnZnMyX3hhdHRyX3NlY3VyaXR5X3NldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBnZnMyX3hhdHRyX3N5c3RlbV9oYW5kbGVyID0geworCS5wcmVmaXggPSBYQVRUUl9TWVNURU1fUFJFRklYLAorCS5nZXQgICAgPSBnZnMyX3hhdHRyX3N5c3RlbV9nZXQsCisJLnNldCAgICA9IGdmczJfeGF0dHJfc3lzdGVtX3NldCwKK307CisKK3N0cnVjdCB4YXR0cl9oYW5kbGVyICpnZnMyX3hhdHRyX2hhbmRsZXJzW10gPSB7CisJJmdmczJfeGF0dHJfdXNlcl9oYW5kbGVyLAorCSZnZnMyX3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsCisJJmdmczJfeGF0dHJfc3lzdGVtX2hhbmRsZXIsCisJTlVMTCwKK307CisKZGlmZiAtLWdpdCBhL2ZzL2dmczIveGF0dHIuaCBiL2ZzL2dmczIveGF0dHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmRmZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZ2ZzMi94YXR0ci5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKKyAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKyNpZm5kZWYgX19FQVRUUl9ET1RfSF9fCisjZGVmaW5lIF9fRUFUVFJfRE9UX0hfXworCitzdHJ1Y3QgZ2ZzMl9pbm9kZTsKK3N0cnVjdCBpYXR0cjsKKworI2RlZmluZSBHRlMyX0VBX1JFQ19MRU4oZWEpIGJlMzJfdG9fY3B1KChlYSktPmVhX3JlY19sZW4pCisjZGVmaW5lIEdGUzJfRUFfREFUQV9MRU4oZWEpIGJlMzJfdG9fY3B1KChlYSktPmVhX2RhdGFfbGVuKQorCisjZGVmaW5lIEdGUzJfRUFfU0laRShlYSkgXAorQUxJR04oc2l6ZW9mKHN0cnVjdCBnZnMyX2VhX2hlYWRlcikgKyAoZWEpLT5lYV9uYW1lX2xlbiArIFwKKyAgICAgICgoR0ZTMl9FQV9JU19TVFVGRkVEKGVhKSkgPyBHRlMyX0VBX0RBVEFfTEVOKGVhKSA6IFwKKwkJCQkgIChzaXplb2YoX19iZTY0KSAqIChlYSktPmVhX251bV9wdHJzKSksIDgpCisKKyNkZWZpbmUgR0ZTMl9FQV9JU19TVFVGRkVEKGVhKSAoIShlYSktPmVhX251bV9wdHJzKQorI2RlZmluZSBHRlMyX0VBX0lTX0xBU1QoZWEpICgoZWEpLT5lYV9mbGFncyAmIEdGUzJfRUFGTEFHX0xBU1QpCisKKyNkZWZpbmUgR0ZTMl9FQVJFUV9TSVpFX1NUVUZGRUQoZXIpIFwKK0FMSUdOKHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIpICsgKGVyKS0+ZXJfbmFtZV9sZW4gKyAoZXIpLT5lcl9kYXRhX2xlbiwgOCkKKworI2RlZmluZSBHRlMyX0VBMk5BTUUoZWEpICgoY2hhciAqKSgoc3RydWN0IGdmczJfZWFfaGVhZGVyICopKGVhKSArIDEpKQorI2RlZmluZSBHRlMyX0VBMkRBVEEoZWEpIChHRlMyX0VBMk5BTUUoZWEpICsgKGVhKS0+ZWFfbmFtZV9sZW4pCisKKyNkZWZpbmUgR0ZTMl9FQTJEQVRBUFRSUyhlYSkgXAorKChfX2JlNjQgKikoR0ZTMl9FQTJOQU1FKGVhKSArIEFMSUdOKChlYSktPmVhX25hbWVfbGVuLCA4KSkpCisKKyNkZWZpbmUgR0ZTMl9FQTJORVhUKGVhKSBcCisoKHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqKSgoY2hhciAqKShlYSkgKyBHRlMyX0VBX1JFQ19MRU4oZWEpKSkKKworI2RlZmluZSBHRlMyX0VBX0JIMkZJUlNUKGJoKSBcCisoKHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqKSgoYmgpLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IGdmczJfbWV0YV9oZWFkZXIpKSkKKworc3RydWN0IGdmczJfZWFfcmVxdWVzdCB7CisJY29uc3QgY2hhciAqZXJfbmFtZTsKKwljaGFyICplcl9kYXRhOworCXVuc2lnbmVkIGludCBlcl9uYW1lX2xlbjsKKwl1bnNpZ25lZCBpbnQgZXJfZGF0YV9sZW47CisJdW5zaWduZWQgaW50IGVyX3R5cGU7IC8qIEdGUzJfRUFUWVBFXy4uLiAqLworfTsKKworc3RydWN0IGdmczJfZWFfbG9jYXRpb24geworCXN0cnVjdCBidWZmZXJfaGVhZCAqZWxfYmg7CisJc3RydWN0IGdmczJfZWFfaGVhZGVyICplbF9lYTsKKwlzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKmVsX3ByZXY7Cit9OworCitleHRlcm4gaW50IGdmczJfeGF0dHJfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKK2V4dGVybiBpbnQgZ2ZzMl94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKK2V4dGVybiBzc2l6ZV90IGdmczJfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gaW50IGdmczJfZWFfZGVhbGxvYyhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApOworCisvKiBFeHBvcnRlZCB0byBhY2wuYyAqLworCitleHRlcm4gaW50IGdmczJfZWFfZmluZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJc3RydWN0IGdmczJfZWFfbG9jYXRpb24gKmVsKTsKK2V4dGVybiBpbnQgZ2ZzMl9lYV9nZXRfY29weShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCwKKwkJCSAgICBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gaW50IGdmczJfZWFfYWNsX2NobW9kKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfbG9jYXRpb24gKmVsLAorCQkJICAgICBzdHJ1Y3QgaWF0dHIgKmF0dHIsIGNoYXIgKmRhdGEpOworCisjZW5kaWYgLyogX19FQVRUUl9ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCmluZGV4IGNiODhkYWMuLmE5M2I4ODUgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC00NCw2ICs0NCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7CiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBodWdldGxiZnNfYmFja2luZ19kZXZfaW5mbyA9IHsKKwkubmFtZQkJPSAiaHVnZXRsYmZzIiwKIAkucmFfcGFnZXMJPSAwLAkvKiBObyByZWFkYWhlYWQgKi8KIAkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0ssCiB9OwpkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggYWU3YjY3ZS4uYjJiYTgzZCAxMDA2NDQKLS0tIGEvZnMvaW5vZGUuYworKysgYi9mcy9pbm9kZS5jCkBAIC0xODIsOSArMTgyLDcgQEAKIAlpZiAoc2ItPnNfYmRldikgewogCQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpOwogCi0JCWJkaSA9IHNiLT5zX2JkZXYtPmJkX2lub2RlX2JhY2tpbmdfZGV2X2luZm87Ci0JCWlmICghYmRpKQotCQkJYmRpID0gc2ItPnNfYmRldi0+YmRfaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKKwkJYmRpID0gc2ItPnNfYmRldi0+YmRfaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKIAkJbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9IGJkaTsKIAl9CiAJaW5vZGUtPmlfcHJpdmF0ZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9mcy9qYmQyL2NvbW1pdC5jIGIvZnMvamJkMi9jb21taXQuYwppbmRleCA3YjQwODhiLi4wZGY2MDBlIDEwMDY0NAotLS0gYS9mcy9qYmQyL2NvbW1pdC5jCisrKyBiL2ZzL2piZDIvY29tbWl0LmMKQEAgLTIyMCw3ICsyMjAsNiBAQAogCQkubnJfdG9fd3JpdGUgPSBtYXBwaW5nLT5ucnBhZ2VzICogMiwKIAkJLnJhbmdlX3N0YXJ0ID0gMCwKIAkJLnJhbmdlX2VuZCA9IGlfc2l6ZV9yZWFkKG1hcHBpbmctPmhvc3QpLAotCQkuZm9yX3dyaXRlcGFnZXMgPSAxLAogCX07CiAKIAlyZXQgPSBnZW5lcmljX3dyaXRlcGFnZXMobWFwcGluZywgJndiYyk7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9hY2wuYyBiL2ZzL2pmZnMyL2FjbC5jCmluZGV4IDhmY2I2MjM5Mi4uN2VkYjYyZSAxMDA2NDQKLS0tIGEvZnMvamZmczIvYWNsLmMKKysrIGIvZnMvamZmczIvYWNsLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBqZmZzMl9jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitpbnQgamZmczJfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAlpbnQgcmM7CkBAIC0yNzQsMTEgKzI3NCw2IEBACiAJcmV0dXJuIC1FQUdBSU47CiB9CiAKLWludCBqZmZzMl9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQotewotCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIGpmZnMyX2NoZWNrX2FjbCk7Ci19Ci0KIGludCBqZmZzMl9pbml0X2FjbF9wcmUoc3RydWN0IGlub2RlICpkaXJfaSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50ICppX21vZGUpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsLCAqY2xvbmU7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9hY2wuaCBiL2ZzL2pmZnMyL2FjbC5oCmluZGV4IGZjOTI5ZjIuLmYwYmE2M2UgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2FjbC5oCisrKyBiL2ZzL2pmZnMyL2FjbC5oCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpZmRlZiBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMCiAKLWV4dGVybiBpbnQgamZmczJfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK2V4dGVybiBpbnQgamZmczJfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogZXh0ZXJuIGludCBqZmZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBqZmZzMl9pbml0X2FjbF9wcmUoc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLCBpbnQgKik7CiBleHRlcm4gaW50IGpmZnMyX2luaXRfYWNsX3Bvc3Qoc3RydWN0IGlub2RlICopOwpAQCAtMzYsNyArMzYsNyBAQAogCiAjZWxzZQogCi0jZGVmaW5lIGpmZnMyX3Blcm1pc3Npb24JCQkoTlVMTCkKKyNkZWZpbmUgamZmczJfY2hlY2tfYWNsCQkJCShOVUxMKQogI2RlZmluZSBqZmZzMl9hY2xfY2htb2QoaW5vZGUpCQkJKDApCiAjZGVmaW5lIGpmZnMyX2luaXRfYWNsX3ByZShkaXJfaSxpbm9kZSxtb2RlKQkoMCkKICNkZWZpbmUgamZmczJfaW5pdF9hY2xfcG9zdChpbm9kZSkJCSgwKQpkaWZmIC0tZ2l0IGEvZnMvamZmczIvZGlyLmMgYi9mcy9qZmZzMi9kaXIuYwppbmRleCA2ZjYwY2M5Li43YWE0NDE3IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9kaXIuYworKysgYi9mcy9qZmZzMi9kaXIuYwpAQCAtNTUsNyArNTUsNyBAQAogCS5ybWRpciA9CWpmZnMyX3JtZGlyLAogCS5ta25vZCA9CWpmZnMyX21rbm9kLAogCS5yZW5hbWUgPQlqZmZzMl9yZW5hbWUsCi0JLnBlcm1pc3Npb24gPQlqZmZzMl9wZXJtaXNzaW9uLAorCS5jaGVja19hY2wgPQlqZmZzMl9jaGVja19hY2wsCiAJLnNldGF0dHIgPQlqZmZzMl9zZXRhdHRyLAogCS5zZXR4YXR0ciA9CWpmZnMyX3NldHhhdHRyLAogCS5nZXR4YXR0ciA9CWpmZnMyX2dldHhhdHRyLApkaWZmIC0tZ2l0IGEvZnMvamZmczIvZmlsZS5jIGIvZnMvamZmczIvZmlsZS5jCmluZGV4IDIzYzk0NzUuLmI3Yjc0ZTIgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2ZpbGUuYworKysgYi9mcy9qZmZzMi9maWxlLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAogY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZmczJfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0KIHsKLQkucGVybWlzc2lvbiA9CWpmZnMyX3Blcm1pc3Npb24sCisJLmNoZWNrX2FjbCA9CWpmZnMyX2NoZWNrX2FjbCwKIAkuc2V0YXR0ciA9CWpmZnMyX3NldGF0dHIsCiAJLnNldHhhdHRyID0JamZmczJfc2V0eGF0dHIsCiAJLmdldHhhdHRyID0JamZmczJfZ2V0eGF0dHIsCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9zeW1saW5rLmMgYi9mcy9qZmZzMi9zeW1saW5rLmMKaW5kZXggYjczMzljMy4uNGVjMTFlOCAxMDA2NDQKLS0tIGEvZnMvamZmczIvc3ltbGluay5jCisrKyBiL2ZzL2pmZnMyL3N5bWxpbmsuYwpAQCAtMjEsNyArMjEsNyBAQAogewogCS5yZWFkbGluayA9CWdlbmVyaWNfcmVhZGxpbmssCiAJLmZvbGxvd19saW5rID0JamZmczJfZm9sbG93X2xpbmssCi0JLnBlcm1pc3Npb24gPQlqZmZzMl9wZXJtaXNzaW9uLAorCS5jaGVja19hY2wgPQlqZmZzMl9jaGVja19hY2wsCiAJLnNldGF0dHIgPQlqZmZzMl9zZXRhdHRyLAogCS5zZXR4YXR0ciA9CWpmZnMyX3NldHhhdHRyLAogCS5nZXR4YXR0ciA9CWpmZnMyX2dldHhhdHRyLApkaWZmIC0tZ2l0IGEvZnMvamZzL2FjbC5jIGIvZnMvamZzL2FjbC5jCmluZGV4IGEyOWM3YzMuLmQ2NjQ3N2MgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9hY2wuYworKysgYi9mcy9qZnMvYWNsLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBqZnNfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQoraW50IGpmc19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gamZzX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7CiAKQEAgLTEyOSwxMSArMTI5LDYgQEAKIAlyZXR1cm4gLUVBR0FJTjsKIH0KIAotaW50IGpmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQotewotCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIGpmc19jaGVja19hY2wpOwotfQotCiBpbnQgamZzX2luaXRfYWNsKHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9maWxlLmMgYi9mcy9qZnMvZmlsZS5jCmluZGV4IDdmNjA2M2EuLjJiNzBmYTcgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9maWxlLmMKKysrIGIvZnMvamZzL2ZpbGUuYwpAQCAtOTYsNyArOTYsNyBAQAogCS5yZW1vdmV4YXR0cgk9IGpmc19yZW1vdmV4YXR0ciwKICNpZmRlZiBDT05GSUdfSkZTX1BPU0lYX0FDTAogCS5zZXRhdHRyCT0gamZzX3NldGF0dHIsCi0JLnBlcm1pc3Npb24JPSBqZnNfcGVybWlzc2lvbiwKKwkuY2hlY2tfYWNsCT0gamZzX2NoZWNrX2FjbCwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19hY2wuaCBiL2ZzL2pmcy9qZnNfYWNsLmgKaW5kZXggODg0NzVmMS4uYjA3YmQ0MSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19hY2wuaAorKysgYi9mcy9qZnMvamZzX2FjbC5oCkBAIC0yMCw3ICsyMCw3IEBACiAKICNpZmRlZiBDT05GSUdfSkZTX1BPU0lYX0FDTAogCi1pbnQgamZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICosIGludCk7CitpbnQgamZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKIGludCBqZnNfaW5pdF9hY2wodGlkX3QsIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBpbnQgamZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9uYW1laS5jIGIvZnMvamZzL25hbWVpLmMKaW5kZXggNTE0ZWUyZS4uYzc5YTQyNzAgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9uYW1laS5jCisrKyBiL2ZzL2pmcy9uYW1laS5jCkBAIC0xNTQzLDcgKzE1NDMsNyBAQAogCS5yZW1vdmV4YXR0cgk9IGpmc19yZW1vdmV4YXR0ciwKICNpZmRlZiBDT05GSUdfSkZTX1BPU0lYX0FDTAogCS5zZXRhdHRyCT0gamZzX3NldGF0dHIsCi0JLnBlcm1pc3Npb24JPSBqZnNfcGVybWlzc2lvbiwKKwkuY2hlY2tfYWNsCT0gamZzX2NoZWNrX2FjbCwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvaG9zdC5jIGIvZnMvbG9ja2QvaG9zdC5jCmluZGV4IDk5ZDczN2IuLjdjYjA3NmEgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL2hvc3QuYworKysgYi9mcy9sb2NrZC9ob3N0LmMKQEAgLTg3LDE4ICs4Nyw2IEBACiAJcmV0dXJuIGhhc2ggJiAoTkxNX0hPU1RfTlJIQVNIIC0gMSk7CiB9CiAKLXN0YXRpYyB2b2lkIG5sbV9jbGVhcl9wb3J0KHN0cnVjdCBzb2NrYWRkciAqc2FwKQotewotCXN3aXRjaCAoc2FwLT5zYV9mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCSgoc3RydWN0IHNvY2thZGRyX2luICopc2FwKS0+c2luX3BvcnQgPSAwOwotCQlicmVhazsKLQljYXNlIEFGX0lORVQ2OgotCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXApLT5zaW42X3BvcnQgPSAwOwotCQlicmVhazsKLQl9Ci19Ci0KIC8qCiAgKiBDb21tb24gaG9zdCBsb29rdXAgcm91dGluZSBmb3Igc2VydmVyICYgY2xpZW50CiAgKi8KQEAgLTE3Nyw3ICsxNjUsNyBAQAogCWhvc3QtPmhfYWRkcmJ1ZiAgICA9IG5zbS0+c21fYWRkcmJ1ZjsKIAltZW1jcHkobmxtX2FkZHIoaG9zdCksIG5pLT5zYXAsIG5pLT5zYWxlbik7CiAJaG9zdC0+aF9hZGRybGVuID0gbmktPnNhbGVuOwotCW5sbV9jbGVhcl9wb3J0KG5sbV9hZGRyKGhvc3QpKTsKKwlycGNfc2V0X3BvcnQobmxtX2FkZHIoaG9zdCksIDApOwogCW1lbWNweShubG1fc3JjYWRkcihob3N0KSwgbmktPnNyY19zYXAsIG5pLT5zcmNfbGVuKTsKIAlob3N0LT5oX3ZlcnNpb24gICAgPSBuaS0+dmVyc2lvbjsKIAlob3N0LT5oX3Byb3RvICAgICAgPSBuaS0+cHJvdG9jb2w7CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9tb24uYyBiL2ZzL2xvY2tkL21vbi5jCmluZGV4IDdmY2UxYjUuLjMwYzkzMzEgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL21vbi5jCisrKyBiL2ZzL2xvY2tkL21vbi5jCkBAIC02MSw0MyArNjEsNiBAQAogCXJldHVybiAoc3RydWN0IHNvY2thZGRyICopJm5zbS0+c21fYWRkcjsKIH0KIAotc3RhdGljIHZvaWQgbnNtX2Rpc3BsYXlfaXB2NF9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLCBjaGFyICpidWYsCi0JCQkJICAgICBjb25zdCBzaXplX3QgbGVuKQotewotCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDsKLQlzbnByaW50ZihidWYsIGxlbiwgIiVwSTQiLCAmc2luLT5zaW5fYWRkci5zX2FkZHIpOwotfQotCi1zdGF0aWMgdm9pZCBuc21fZGlzcGxheV9pcHY2X2FkZHJlc3MoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAsIGNoYXIgKmJ1ZiwKLQkJCQkgICAgIGNvbnN0IHNpemVfdCBsZW4pCi17Ci0JY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwOwotCi0JaWYgKGlwdjZfYWRkcl92NG1hcHBlZCgmc2luNi0+c2luNl9hZGRyKSkKLQkJc25wcmludGYoYnVmLCBsZW4sICIlcEk0IiwgJnNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbM10pOwotCWVsc2UgaWYgKHNpbjYtPnNpbjZfc2NvcGVfaWQgIT0gMCkKLQkJc25wcmludGYoYnVmLCBsZW4sICIlcEk2JSUldSIsICZzaW42LT5zaW42X2FkZHIsCi0JCQkJc2luNi0+c2luNl9zY29wZV9pZCk7Ci0JZWxzZQotCQlzbnByaW50ZihidWYsIGxlbiwgIiVwSTYiLCAmc2luNi0+c2luNl9hZGRyKTsKLX0KLQotc3RhdGljIHZvaWQgbnNtX2Rpc3BsYXlfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwKLQkJCQljaGFyICpidWYsIGNvbnN0IHNpemVfdCBsZW4pCi17Ci0Jc3dpdGNoIChzYXAtPnNhX2ZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKLQkJbnNtX2Rpc3BsYXlfaXB2NF9hZGRyZXNzKHNhcCwgYnVmLCBsZW4pOwotCQlicmVhazsKLQljYXNlIEFGX0lORVQ2OgotCQluc21fZGlzcGxheV9pcHY2X2FkZHJlc3Moc2FwLCBidWYsIGxlbik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNucHJpbnRmKGJ1ZiwgbGVuLCAidW5zdXBwb3J0ZWQgYWRkcmVzcyBmYW1pbHkiKTsKLQkJYnJlYWs7Ci0JfQotfQotCiBzdGF0aWMgc3RydWN0IHJwY19jbG50ICpuc21fY3JlYXRlKHZvaWQpCiB7CiAJc3RydWN0IHNvY2thZGRyX2luIHNpbiA9IHsKQEAgLTMwNyw4ICsyNzAsMTEgQEAKIAltZW1jcHkobnNtX2FkZHIobmV3KSwgc2FwLCBzYWxlbik7CiAJbmV3LT5zbV9hZGRybGVuID0gc2FsZW47CiAJbnNtX2luaXRfcHJpdmF0ZShuZXcpOwotCW5zbV9kaXNwbGF5X2FkZHJlc3MoKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSZuZXctPnNtX2FkZHIsCi0JCQkJbmV3LT5zbV9hZGRyYnVmLCBzaXplb2YobmV3LT5zbV9hZGRyYnVmKSk7CisKKwlpZiAocnBjX250b3AobnNtX2FkZHIobmV3KSwgbmV3LT5zbV9hZGRyYnVmLAorCQkJCQlzaXplb2YobmV3LT5zbV9hZGRyYnVmKSkgPT0gMCkKKwkJKHZvaWQpc25wcmludGYobmV3LT5zbV9hZGRyYnVmLCBzaXplb2YobmV3LT5zbV9hZGRyYnVmKSwKKwkJCQkidW5zdXBwb3J0ZWQgYWRkcmVzcyBmYW1pbHkiKTsKIAltZW1jcHkobmV3LT5zbV9uYW1lLCBob3N0bmFtZSwgaG9zdG5hbWVfbGVuKTsKIAluZXctPnNtX25hbWVbaG9zdG5hbWVfbGVuXSA9ICdcMCc7CiAKZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jCmluZGV4IGI2NDQwZjUuLjE5ZWUxOGEgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKKysrIGIvZnMvbG9ja3MuYwpAQCAtNzY4LDcgKzc2OCw3IEBACiAJICogZ2l2ZSBpdCB0aGUgb3Bwb3J0dW5pdHkgdG8gbG9jayB0aGUgZmlsZS4KIAkgKi8KIAlpZiAoZm91bmQpCi0JCWNvbmRfcmVzY2hlZF9ia2woKTsKKwkJY29uZF9yZXNjaGVkKCk7CiAKIGZpbmRfY29uZmxpY3Q6CiAJZm9yX2VhY2hfbG9jayhpbm9kZSwgYmVmb3JlKSB7CkBAIC0xNTkxLDcgKzE1OTEsNyBAQAogCWlmIChjYW5fc2xlZXApCiAJCWxvY2stPmZsX2ZsYWdzIHw9IEZMX1NMRUVQOwogCi0JZXJyb3IgPSBzZWN1cml0eV9maWxlX2xvY2soZmlscCwgY21kKTsKKwllcnJvciA9IHNlY3VyaXR5X2ZpbGVfbG9jayhmaWxwLCBsb2NrLT5mbF90eXBlKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2ZyZWU7CiAKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDFmMTM3NTEuLmQxMWY0MDQgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMTY5LDYgKzE2OSwzNiBAQAogRVhQT1JUX1NZTUJPTChwdXRuYW1lKTsKICNlbmRpZgogCisvKgorICogVGhpcyBkb2VzIGJhc2ljIFBPU0lYIEFDTCBwZXJtaXNzaW9uIGNoZWNraW5nCisgKi8KK3N0YXRpYyBpbnQgYWNsX3Blcm1pc3Npb25fY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssCisJCWludCAoKmNoZWNrX2FjbCkoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spKQoreworCXVtb2RlX3QJCQltb2RlID0gaW5vZGUtPmlfbW9kZTsKKworCW1hc2sgJj0gTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQzsKKworCWlmIChjdXJyZW50X2ZzdWlkKCkgPT0gaW5vZGUtPmlfdWlkKQorCQltb2RlID4+PSA2OworCWVsc2UgeworCQlpZiAoSVNfUE9TSVhBQ0woaW5vZGUpICYmIChtb2RlICYgU19JUldYRykgJiYgY2hlY2tfYWNsKSB7CisJCQlpbnQgZXJyb3IgPSBjaGVja19hY2woaW5vZGUsIG1hc2spOworCQkJaWYgKGVycm9yICE9IC1FQUdBSU4pCisJCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJaWYgKGluX2dyb3VwX3AoaW5vZGUtPmlfZ2lkKSkKKwkJCW1vZGUgPj49IDM7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgREFDcyBhcmUgb2sgd2UgZG9uJ3QgbmVlZCBhbnkgY2FwYWJpbGl0eSBjaGVjay4KKwkgKi8KKwlpZiAoKG1hc2sgJiB+bW9kZSkgPT0gMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC1FQUNDRVM7Cit9CiAKIC8qKgogICogZ2VuZXJpY19wZXJtaXNzaW9uICAtICBjaGVjayBmb3IgYWNjZXNzIHJpZ2h0cyBvbiBhIFBvc2l4LWxpa2UgZmlsZXN5c3RlbQpAQCAtMTg0LDMyICsyMTQsMTUgQEAKIGludCBnZW5lcmljX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssCiAJCWludCAoKmNoZWNrX2FjbCkoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spKQogewotCXVtb2RlX3QJCQltb2RlID0gaW5vZGUtPmlfbW9kZTsKLQotCW1hc2sgJj0gTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQzsKLQotCWlmIChjdXJyZW50X2ZzdWlkKCkgPT0gaW5vZGUtPmlfdWlkKQotCQltb2RlID4+PSA2OwotCWVsc2UgewotCQlpZiAoSVNfUE9TSVhBQ0woaW5vZGUpICYmIChtb2RlICYgU19JUldYRykgJiYgY2hlY2tfYWNsKSB7Ci0JCQlpbnQgZXJyb3IgPSBjaGVja19hY2woaW5vZGUsIG1hc2spOwotCQkJaWYgKGVycm9yID09IC1FQUNDRVMpCi0JCQkJZ290byBjaGVja19jYXBhYmlsaXRpZXM7Ci0JCQllbHNlIGlmIChlcnJvciAhPSAtRUFHQUlOKQotCQkJCXJldHVybiBlcnJvcjsKLQkJfQotCi0JCWlmIChpbl9ncm91cF9wKGlub2RlLT5pX2dpZCkpCi0JCQltb2RlID4+PSAzOwotCX0KKwlpbnQgcmV0OwogCiAJLyoKLQkgKiBJZiB0aGUgREFDcyBhcmUgb2sgd2UgZG9uJ3QgbmVlZCBhbnkgY2FwYWJpbGl0eSBjaGVjay4KKwkgKiBEbyB0aGUgYmFzaWMgUE9TSVggQUNMIHBlcm1pc3Npb24gY2hlY2tzLgogCSAqLwotCWlmICgobWFzayAmIH5tb2RlKSA9PSAwKQotCQlyZXR1cm4gMDsKKwlyZXQgPSBhY2xfcGVybWlzc2lvbl9jaGVjayhpbm9kZSwgbWFzaywgY2hlY2tfYWNsKTsKKwlpZiAocmV0ICE9IC1FQUNDRVMpCisJCXJldHVybiByZXQ7CiAKLSBjaGVja19jYXBhYmlsaXRpZXM6CiAJLyoKIAkgKiBSZWFkL3dyaXRlIERBQ3MgYXJlIGFsd2F5cyBvdmVycmlkYWJsZS4KIAkgKiBFeGVjdXRhYmxlIERBQ3MgYXJlIG92ZXJyaWRhYmxlIGlmIGF0IGxlYXN0IG9uZSBleGVjIGJpdCBpcyBzZXQuCkBAIC0yNjIsNyArMjc1LDcgQEAKIAlpZiAoaW5vZGUtPmlfb3AtPnBlcm1pc3Npb24pCiAJCXJldHZhbCA9IGlub2RlLT5pX29wLT5wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKIAllbHNlCi0JCXJldHZhbCA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgTlVMTCk7CisJCXJldHZhbCA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgaW5vZGUtPmlfb3AtPmNoZWNrX2FjbCk7CiAKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwpAQCAtNDMyLDI5ICs0NDUsMjIgQEAKICAqLwogc3RhdGljIGludCBleGVjX3Blcm1pc3Npb25fbGl0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXVtb2RlX3QJbW9kZSA9IGlub2RlLT5pX21vZGU7CisJaW50IHJldDsKIAotCWlmIChpbm9kZS0+aV9vcC0+cGVybWlzc2lvbikKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlpZiAoY3VycmVudF9mc3VpZCgpID09IGlub2RlLT5pX3VpZCkKLQkJbW9kZSA+Pj0gNjsKLQllbHNlIGlmIChpbl9ncm91cF9wKGlub2RlLT5pX2dpZCkpCi0JCW1vZGUgPj49IDM7Ci0KLQlpZiAobW9kZSAmIE1BWV9FWEVDKQorCWlmIChpbm9kZS0+aV9vcC0+cGVybWlzc2lvbikgeworCQlyZXQgPSBpbm9kZS0+aV9vcC0+cGVybWlzc2lvbihpbm9kZSwgTUFZX0VYRUMpOworCQlpZiAoIXJldCkKKwkJCWdvdG8gb2s7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IGFjbF9wZXJtaXNzaW9uX2NoZWNrKGlub2RlLCBNQVlfRVhFQywgaW5vZGUtPmlfb3AtPmNoZWNrX2FjbCk7CisJaWYgKCFyZXQpCiAJCWdvdG8gb2s7CiAKLQlpZiAoKGlub2RlLT5pX21vZGUgJiBTX0lYVUdPKSAmJiBjYXBhYmxlKENBUF9EQUNfT1ZFUlJJREUpKQorCWlmIChjYXBhYmxlKENBUF9EQUNfT1ZFUlJJREUpIHx8IGNhcGFibGUoQ0FQX0RBQ19SRUFEX1NFQVJDSCkpCiAJCWdvdG8gb2s7CiAKLQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiBjYXBhYmxlKENBUF9EQUNfT1ZFUlJJREUpKQotCQlnb3RvIG9rOwotCi0JaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYgY2FwYWJsZShDQVBfREFDX1JFQURfU0VBUkNIKSkKLQkJZ290byBvazsKLQotCXJldHVybiAtRUFDQ0VTOworCXJldHVybiByZXQ7CiBvazoKIAlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgTUFZX0VYRUMpOwogfQpAQCAtODUzLDEyICs4NTksNiBAQAogCiAJCW5kLT5mbGFncyB8PSBMT09LVVBfQ09OVElOVUU7CiAJCWVyciA9IGV4ZWNfcGVybWlzc2lvbl9saXRlKGlub2RlKTsKLQkJaWYgKGVyciA9PSAtRUFHQUlOKQotCQkJZXJyID0gaW5vZGVfcGVybWlzc2lvbihuZC0+cGF0aC5kZW50cnktPmRfaW5vZGUsCi0JCQkJCSAgICAgICBNQVlfRVhFQyk7Ci0JCWlmICghZXJyKQotCQkJZXJyID0gaW1hX3BhdGhfY2hlY2soJm5kLT5wYXRoLCBNQVlfRVhFQywKLQkJCQkgICAgICAgICAgICAgSU1BX0NPVU5UX1VQREFURSk7CiAgCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAKQEAgLTE1MzMsOSArMTUzMywxMSBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSBpbWFfcGF0aF9jaGVjayhwYXRoLAotCQkJICAgICAgIGFjY19tb2RlICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpLAorCWVycm9yID0gaW1hX3BhdGhfY2hlY2socGF0aCwgYWNjX21vZGUgPworCQkJICAgICAgIGFjY19tb2RlICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpIDoKKwkJCSAgICAgICBBQ0NfTU9ERShmbGFnKSAmIChNQVlfUkVBRCB8IE1BWV9XUklURSksCiAJCQkgICAgICAgSU1BX0NPVU5UX1VQREFURSk7CisKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvbmZzL01ha2VmaWxlIGIvZnMvbmZzL01ha2VmaWxlCmluZGV4IDg0NTE1OTguLmRhN2ZkYTYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9NYWtlZmlsZQorKysgYi9mcy9uZnMvTWFrZWZpbGUKQEAgLTYsNyArNiw4IEBACiAKIG5mcy15IAkJCTo9IGNsaWVudC5vIGRpci5vIGZpbGUubyBnZXRyb290Lm8gaW5vZGUubyBzdXBlci5vIG5mczJ4ZHIubyBcCiAJCQkgICBkaXJlY3QubyBwYWdlbGlzdC5vIHByb2MubyByZWFkLm8gc3ltbGluay5vIHVubGluay5vIFwKLQkJCSAgIHdyaXRlLm8gbmFtZXNwYWNlLm8gbW91bnRfY2xudC5vCisJCQkgICB3cml0ZS5vIG5hbWVzcGFjZS5vIG1vdW50X2NsbnQubyBcCisJCQkgICBkbnNfcmVzb2x2ZS5vIGNhY2hlX2xpYi5vCiBuZnMtJChDT05GSUdfUk9PVF9ORlMpCSs9IG5mc3Jvb3QubwogbmZzLSQoQ09ORklHX05GU19WMykJKz0gbmZzM3Byb2MubyBuZnMzeGRyLm8KIG5mcy0kKENPTkZJR19ORlNfVjNfQUNMKQkrPSBuZnMzYWNsLm8KZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWNoZV9saWIuYyBiL2ZzL25mcy9jYWNoZV9saWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGZmZDAxCi0tLSAvZGV2L251bGwKKysrIGIvZnMvbmZzL2NhY2hlX2xpYi5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogbGludXgvZnMvbmZzL2NhY2hlX2xpYi5jCisgKgorICogSGVscGVyIHJvdXRpbmVzIGZvciB0aGUgTkZTIGNsaWVudCBjYWNoZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgVHJvbmQgTXlrbGVidXN0IDxUcm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvcnBjX3BpcGVfZnMuaD4KKworI2luY2x1ZGUgImNhY2hlX2xpYi5oIgorCisjZGVmaW5lIE5GU19DQUNIRV9VUENBTExfUEFUSExFTiAyNTYKKyNkZWZpbmUgTkZTX0NBQ0hFX1VQQ0FMTF9USU1FT1VUIDE1CisKK3N0YXRpYyBjaGFyIG5mc19jYWNoZV9nZXRlbnRfcHJvZ1tORlNfQ0FDSEVfVVBDQUxMX1BBVEhMRU5dID0KKwkJCQkiL3NiaW4vbmZzX2NhY2hlX2dldGVudCI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZnNfY2FjaGVfZ2V0ZW50X3RpbWVvdXQgPSBORlNfQ0FDSEVfVVBDQUxMX1RJTUVPVVQ7CisKK21vZHVsZV9wYXJhbV9zdHJpbmcoY2FjaGVfZ2V0ZW50LCBuZnNfY2FjaGVfZ2V0ZW50X3Byb2csCisJCXNpemVvZihuZnNfY2FjaGVfZ2V0ZW50X3Byb2cpLCAwNjAwKTsKK01PRFVMRV9QQVJNX0RFU0MoY2FjaGVfZ2V0ZW50LCAiUGF0aCB0byB0aGUgY2xpZW50IGNhY2hlIHVwY2FsbCBwcm9ncmFtIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoY2FjaGVfZ2V0ZW50X3RpbWVvdXQsIG5mc19jYWNoZV9nZXRlbnRfdGltZW91dCwgdWxvbmcsIDA2MDApOworTU9EVUxFX1BBUk1fREVTQyhjYWNoZV9nZXRlbnRfdGltZW91dCwgIlRpbWVvdXQgKGluIHNlY29uZHMpIGFmdGVyIHdoaWNoICIKKwkJInRoZSBjYWNoZSB1cGNhbGwgaXMgYXNzdW1lZCB0byBoYXZlIGZhaWxlZCIpOworCitpbnQgbmZzX2NhY2hlX3VwY2FsbChzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCwgY2hhciAqZW50cnlfbmFtZSkKK3sKKwlzdGF0aWMgY2hhciAqZW52cFtdID0geyAiSE9NRT0vIiwKKwkJIlRFUk09bGludXgiLAorCQkiUEFUSD0vc2JpbjovdXNyL3NiaW46L2JpbjovdXNyL2JpbiIsCisJCU5VTEwKKwl9OworCWNoYXIgKmFyZ3ZbXSA9IHsKKwkJbmZzX2NhY2hlX2dldGVudF9wcm9nLAorCQljZC0+bmFtZSwKKwkJZW50cnlfbmFtZSwKKwkJTlVMTAorCX07CisJaW50IHJldCA9IC1FQUNDRVM7CisKKwlpZiAobmZzX2NhY2hlX2dldGVudF9wcm9nWzBdID09ICdcMCcpCisJCWdvdG8gb3V0OworCXJldCA9IGNhbGxfdXNlcm1vZGVoZWxwZXIoYXJndlswXSwgYXJndiwgZW52cCwgVU1IX1dBSVRfRVhFQyk7CisJLyoKKwkgKiBEaXNhYmxlIHRoZSB1cGNhbGwgbWVjaGFuaXNtIGlmIHdlJ3JlIGdldHRpbmcgYW4gRU5PRU5UIG9yCisJICogRUFDQ0VTIGVycm9yLiBUaGUgYWRtaW4gY2FuIHJlLWVuYWJsZSBpdCBvbiB0aGUgZmx5IGJ5IHVzaW5nCisJICogc3lzZnMgdG8gc2V0IHRoZSAnY2FjaGVfZ2V0ZW50JyBwYXJhbWV0ZXIgb25jZSB0aGUgcHJvYmxlbQorCSAqIGhhcyBiZWVuIGZpeGVkLgorCSAqLworCWlmIChyZXQgPT0gLUVOT0VOVCB8fCByZXQgPT0gLUVBQ0NFUykKKwkJbmZzX2NhY2hlX2dldGVudF9wcm9nWzBdID0gJ1wwJzsKK291dDoKKwlyZXR1cm4gcmV0ID4gMCA/IDAgOiByZXQ7Cit9CisKKy8qCisgKiBEZWZlcnJlZCByZXF1ZXN0IGhhbmRsaW5nCisgKi8KK3ZvaWQgbmZzX2NhY2hlX2RlZmVyX3JlcV9wdXQoc3RydWN0IG5mc19jYWNoZV9kZWZlcl9yZXEgKmRyZXEpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRyZXEtPmNvdW50KSkKKwkJa2ZyZWUoZHJlcSk7Cit9CisKK3N0YXRpYyB2b2lkIG5mc19kbnNfY2FjaGVfcmV2aXNpdChzdHJ1Y3QgY2FjaGVfZGVmZXJyZWRfcmVxICpkLCBpbnQgdG9vbWFueSkKK3sKKwlzdHJ1Y3QgbmZzX2NhY2hlX2RlZmVyX3JlcSAqZHJlcTsKKworCWRyZXEgPSBjb250YWluZXJfb2YoZCwgc3RydWN0IG5mc19jYWNoZV9kZWZlcl9yZXEsIGRlZmVycmVkX3JlcSk7CisKKwljb21wbGV0ZV9hbGwoJmRyZXEtPmNvbXBsZXRpb24pOworCW5mc19jYWNoZV9kZWZlcl9yZXFfcHV0KGRyZXEpOworfQorCitzdGF0aWMgc3RydWN0IGNhY2hlX2RlZmVycmVkX3JlcSAqbmZzX2Ruc19jYWNoZV9kZWZlcihzdHJ1Y3QgY2FjaGVfcmVxICpyZXEpCit7CisJc3RydWN0IG5mc19jYWNoZV9kZWZlcl9yZXEgKmRyZXE7CisKKwlkcmVxID0gY29udGFpbmVyX29mKHJlcSwgc3RydWN0IG5mc19jYWNoZV9kZWZlcl9yZXEsIHJlcSk7CisJZHJlcS0+ZGVmZXJyZWRfcmVxLnJldmlzaXQgPSBuZnNfZG5zX2NhY2hlX3JldmlzaXQ7CisJYXRvbWljX2luYygmZHJlcS0+Y291bnQpOworCisJcmV0dXJuICZkcmVxLT5kZWZlcnJlZF9yZXE7Cit9CisKK3N0cnVjdCBuZnNfY2FjaGVfZGVmZXJfcmVxICpuZnNfY2FjaGVfZGVmZXJfcmVxX2FsbG9jKHZvaWQpCit7CisJc3RydWN0IG5mc19jYWNoZV9kZWZlcl9yZXEgKmRyZXE7CisKKwlkcmVxID0ga3phbGxvYyhzaXplb2YoKmRyZXEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZHJlcSkgeworCQlpbml0X2NvbXBsZXRpb24oJmRyZXEtPmNvbXBsZXRpb24pOworCQlhdG9taWNfc2V0KCZkcmVxLT5jb3VudCwgMSk7CisJCWRyZXEtPnJlcS5kZWZlciA9IG5mc19kbnNfY2FjaGVfZGVmZXI7CisJfQorCXJldHVybiBkcmVxOworfQorCitpbnQgbmZzX2NhY2hlX3dhaXRfZm9yX3VwY2FsbChzdHJ1Y3QgbmZzX2NhY2hlX2RlZmVyX3JlcSAqZHJlcSkKK3sKKwlpZiAod2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkcmVxLT5jb21wbGV0aW9uLAorCQkJbmZzX2NhY2hlX2dldGVudF90aW1lb3V0ICogSFopID09IDApCisJCXJldHVybiAtRVRJTUVET1VUOworCXJldHVybiAwOworfQorCitpbnQgbmZzX2NhY2hlX3JlZ2lzdGVyKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKQoreworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJc3RydWN0IHZmc21vdW50ICptbnQ7CisJaW50IHJldDsKKworCW1udCA9IHJwY19nZXRfbW91bnQoKTsKKwlpZiAoSVNfRVJSKG1udCkpCisJCXJldHVybiBQVFJfRVJSKG1udCk7CisJcmV0ID0gdmZzX3BhdGhfbG9va3VwKG1udC0+bW50X3Jvb3QsIG1udCwgIi9jYWNoZSIsIDAsICZuZCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisJcmV0ID0gc3VucnBjX2NhY2hlX3JlZ2lzdGVyX3BpcGVmcyhuZC5wYXRoLmRlbnRyeSwKKwkJCWNkLT5uYW1lLCAwNjAwLCBjZCk7CisJcGF0aF9wdXQoJm5kLnBhdGgpOworCWlmICghcmV0KQorCQlyZXR1cm4gcmV0OworZXJyOgorCXJwY19wdXRfbW91bnQoKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG5mc19jYWNoZV91bnJlZ2lzdGVyKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKQoreworCXN1bnJwY19jYWNoZV91bnJlZ2lzdGVyX3BpcGVmcyhjZCk7CisJcnBjX3B1dF9tb3VudCgpOworfQorCmRpZmYgLS1naXQgYS9mcy9uZnMvY2FjaGVfbGliLmggYi9mcy9uZnMvY2FjaGVfbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmODU2ZQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL25mcy9jYWNoZV9saWIuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogSGVscGVyIHJvdXRpbmVzIGZvciB0aGUgTkZTIGNsaWVudCBjYWNoZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgVHJvbmQgTXlrbGVidXN0IDxUcm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworLyoKKyAqIERlZmVycmVkIHJlcXVlc3QgaGFuZGxpbmcKKyAqLworc3RydWN0IG5mc19jYWNoZV9kZWZlcl9yZXEgeworCXN0cnVjdCBjYWNoZV9yZXEgcmVxOworCXN0cnVjdCBjYWNoZV9kZWZlcnJlZF9yZXEgZGVmZXJyZWRfcmVxOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247CisJYXRvbWljX3QgY291bnQ7Cit9OworCitleHRlcm4gaW50IG5mc19jYWNoZV91cGNhbGwoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QsIGNoYXIgKmVudHJ5X25hbWUpOworZXh0ZXJuIHN0cnVjdCBuZnNfY2FjaGVfZGVmZXJfcmVxICpuZnNfY2FjaGVfZGVmZXJfcmVxX2FsbG9jKHZvaWQpOworZXh0ZXJuIHZvaWQgbmZzX2NhY2hlX2RlZmVyX3JlcV9wdXQoc3RydWN0IG5mc19jYWNoZV9kZWZlcl9yZXEgKmRyZXEpOworZXh0ZXJuIGludCBuZnNfY2FjaGVfd2FpdF9mb3JfdXBjYWxsKHN0cnVjdCBuZnNfY2FjaGVfZGVmZXJfcmVxICpkcmVxKTsKKworZXh0ZXJuIGludCBuZnNfY2FjaGVfcmVnaXN0ZXIoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpOworZXh0ZXJuIHZvaWQgbmZzX2NhY2hlX3VucmVnaXN0ZXIoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmMgYi9mcy9uZnMvY2FsbGJhY2suYwppbmRleCA3ZjYwNGM3Li4yOTNmYTA1IDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suYworKysgYi9mcy9uZnMvY2FsbGJhY2suYwpAQCAtNDMsMjEgKzQzLDI5IEBACiB1bnNpZ25lZCBpbnQgbmZzX2NhbGxiYWNrX3NldF90Y3Bwb3J0OwogdW5zaWduZWQgc2hvcnQgbmZzX2NhbGxiYWNrX3RjcHBvcnQ7CiB1bnNpZ25lZCBzaG9ydCBuZnNfY2FsbGJhY2tfdGNwcG9ydDY7Ci1zdGF0aWMgY29uc3QgaW50IG5mc19zZXRfcG9ydF9taW4gPSAwOwotc3RhdGljIGNvbnN0IGludCBuZnNfc2V0X3BvcnRfbWF4ID0gNjU1MzU7CisjZGVmaW5lIE5GU19DQUxMQkFDS19NQVhQT1JUTlIgKDY1NTM1VSkKIAotc3RhdGljIGludCBwYXJhbV9zZXRfcG9ydChjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQorc3RhdGljIGludCBwYXJhbV9zZXRfcG9ydG5yKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7Ci0JY2hhciAqZW5kcDsKLQlpbnQgbnVtID0gc2ltcGxlX3N0cnRvbCh2YWwsICZlbmRwLCAwKTsKLQlpZiAoZW5kcCA9PSB2YWwgfHwgKmVuZHAgfHwgbnVtIDwgbmZzX3NldF9wb3J0X21pbiB8fCBudW0gPiBuZnNfc2V0X3BvcnRfbWF4KQorCXVuc2lnbmVkIGxvbmcgbnVtOworCWludCByZXQ7CisKKwlpZiAoIXZhbCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JKigoaW50ICopa3AtPmFyZykgPSBudW07CisJcmV0ID0gc3RyaWN0X3N0cnRvdWwodmFsLCAwLCAmbnVtKTsKKwlpZiAocmV0ID09IC1FSU5WQUwgfHwgbnVtID4gTkZTX0NBTExCQUNLX01BWFBPUlROUikKKwkJcmV0dXJuIC1FSU5WQUw7CisJKigodW5zaWduZWQgaW50ICopa3AtPmFyZykgPSBudW07CiAJcmV0dXJuIDA7CiB9CiAKLW1vZHVsZV9wYXJhbV9jYWxsKGNhbGxiYWNrX3RjcHBvcnQsIHBhcmFtX3NldF9wb3J0LCBwYXJhbV9nZXRfaW50LAotCQkgJm5mc19jYWxsYmFja19zZXRfdGNwcG9ydCwgMDY0NCk7CitzdGF0aWMgaW50IHBhcmFtX2dldF9wb3J0bnIoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlyZXR1cm4gcGFyYW1fZ2V0X3VpbnQoYnVmZmVyLCBrcCk7Cit9CisjZGVmaW5lIHBhcmFtX2NoZWNrX3BvcnRucihuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHVuc2lnbmVkIGludCk7CisKK21vZHVsZV9wYXJhbV9uYW1lZChjYWxsYmFja190Y3Bwb3J0LCBuZnNfY2FsbGJhY2tfc2V0X3RjcHBvcnQsIHBvcnRuciwgMDY0NCk7CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBORlN2NCBjYWxsYmFjayBrZXJuZWwgdGhyZWFkLgpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NsaWVudC5jIGIvZnMvbmZzL2NsaWVudC5jCmluZGV4IDhkMjVjY2IuLmUzNTBiZDYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jbGllbnQuYworKysgYi9mcy9uZnMvY2xpZW50LmMKQEAgLTgwOSw2ICs4MDksOSBAQAogCS8qIEluaXRpYWxpc2UgdGhlIGNsaWVudCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBtb3VudCBkYXRhICovCiAJc2VydmVyLT5mbGFncyA9IGRhdGEtPmZsYWdzOwogCXNlcnZlci0+b3B0aW9ucyA9IGRhdGEtPm9wdGlvbnM7CisJc2VydmVyLT5jYXBzIHw9IE5GU19DQVBfSEFSRExJTktTfE5GU19DQVBfU1lNTElOS1N8TkZTX0NBUF9GSUxFSUR8CisJCU5GU19DQVBfTU9ERXxORlNfQ0FQX05MSU5LfE5GU19DQVBfT1dORVJ8TkZTX0NBUF9PV05FUl9HUk9VUHwKKwkJTkZTX0NBUF9BVElNRXxORlNfQ0FQX0NUSU1FfE5GU19DQVBfTVRJTUU7CiAKIAlpZiAoZGF0YS0+cnNpemUpCiAJCXNlcnZlci0+cnNpemUgPSBuZnNfYmxvY2tfc2l6ZShkYXRhLT5yc2l6ZSwgTlVMTCk7CkBAIC04NzksNiArODgyLDcgQEAKIAkJc2VydmVyLT5yc2l6ZSA9IE5GU19NQVhfRklMRV9JT19TSVpFOwogCXNlcnZlci0+cnBhZ2VzID0gKHNlcnZlci0+cnNpemUgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCisJc2VydmVyLT5iYWNraW5nX2Rldl9pbmZvLm5hbWUgPSAibmZzIjsKIAlzZXJ2ZXItPmJhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXMgPSBzZXJ2ZXItPnJwYWdlcyAqIE5GU19NQVhfUkVBREFIRUFEOwogCiAJaWYgKHNlcnZlci0+d3NpemUgPiBtYXhfcnBjX3BheWxvYWQpCkBAIC0xMDc0LDEwICsxMDc4LDYgQEAKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZykgc2VydmVyLT5mc2lkLm1ham9yLAogCQkodW5zaWduZWQgbG9uZyBsb25nKSBzZXJ2ZXItPmZzaWQubWlub3IpOwogCi0JQlVHX09OKCFzZXJ2ZXItPm5mc19jbGllbnQpOwotCUJVR19PTighc2VydmVyLT5uZnNfY2xpZW50LT5ycGNfb3BzKTsKLQlCVUdfT04oIXNlcnZlci0+bmZzX2NsaWVudC0+cnBjX29wcy0+ZmlsZV9pbm9kZV9vcHMpOwotCiAJc3Bpbl9sb2NrKCZuZnNfY2xpZW50X2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJnNlcnZlci0+Y2xpZW50X2xpbmssICZzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3N1cGVyYmxvY2tzKTsKIAlsaXN0X2FkZF90YWlsKCZzZXJ2ZXItPm1hc3Rlcl9saW5rLCAmbmZzX3ZvbHVtZV9saXN0KTsKQEAgLTEyNzQsNyArMTI3NCw3IEBACiAKIAkvKiBJbml0aWFsaXNlIHRoZSBjbGllbnQgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgbW91bnQgZGF0YSAqLwogCXNlcnZlci0+ZmxhZ3MgPSBkYXRhLT5mbGFnczsKLQlzZXJ2ZXItPmNhcHMgfD0gTkZTX0NBUF9BVE9NSUNfT1BFTjsKKwlzZXJ2ZXItPmNhcHMgfD0gTkZTX0NBUF9BVE9NSUNfT1BFTnxORlNfQ0FQX0NIQU5HRV9BVFRSOwogCXNlcnZlci0+b3B0aW9ucyA9IGRhdGEtPm9wdGlvbnM7CiAKIAkvKiBHZXQgYSBjbGllbnQgcmVjb3JkICovCkBAIC0xMzU5LDEwICsxMzU5LDYgQEAKIAlpZiAoc2VydmVyLT5uYW1lbGVuID09IDAgfHwgc2VydmVyLT5uYW1lbGVuID4gTkZTNF9NQVhOQU1MRU4pCiAJCXNlcnZlci0+bmFtZWxlbiA9IE5GUzRfTUFYTkFNTEVOOwogCi0JQlVHX09OKCFzZXJ2ZXItPm5mc19jbGllbnQpOwotCUJVR19PTighc2VydmVyLT5uZnNfY2xpZW50LT5ycGNfb3BzKTsKLQlCVUdfT04oIXNlcnZlci0+bmZzX2NsaWVudC0+cnBjX29wcy0+ZmlsZV9pbm9kZV9vcHMpOwotCiAJc3Bpbl9sb2NrKCZuZnNfY2xpZW50X2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJnNlcnZlci0+Y2xpZW50X2xpbmssICZzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3N1cGVyYmxvY2tzKTsKIAlsaXN0X2FkZF90YWlsKCZzZXJ2ZXItPm1hc3Rlcl9saW5rLCAmbmZzX3ZvbHVtZV9saXN0KTsKQEAgLTE0MDAsNyArMTM5Niw3IEBACiAKIAkvKiBJbml0aWFsaXNlIHRoZSBjbGllbnQgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgcGFyZW50IHNlcnZlciAqLwogCW5mc19zZXJ2ZXJfY29weV91c2VyZGF0YShzZXJ2ZXIsIHBhcmVudF9zZXJ2ZXIpOwotCXNlcnZlci0+Y2FwcyB8PSBORlNfQ0FQX0FUT01JQ19PUEVOOworCXNlcnZlci0+Y2FwcyB8PSBORlNfQ0FQX0FUT01JQ19PUEVOfE5GU19DQVBfQ0hBTkdFX0FUVFI7CiAKIAkvKiBHZXQgYSBjbGllbnQgcmVwcmVzZW50YXRpb24uCiAJICogTm90ZTogTkZTdjQgYWx3YXlzIHVzZXMgVENQLCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2RpcmVjdC5jIGIvZnMvbmZzL2RpcmVjdC5jCmluZGV4IGU0ZTA4OWEuLjZjMzIxMDAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXJlY3QuYworKysgYi9mcy9uZnMvZGlyZWN0LmMKQEAgLTkzNCw5ICs5MzQsNiBAQAogICogYmFjayBpbnRvIGl0cyBjYWNoZS4gIFdlIGxldCB0aGUgc2VydmVyIGRvIGdlbmVyaWMgd3JpdGUKICAqIHBhcmFtZXRlciBjaGVja2luZyBhbmQgcmVwb3J0IHByb2JsZW1zLgogICoKLSAqIFdlIGFsc28gYXZvaWQgYW4gdW5uZWNlc3NhcnkgaW52b2NhdGlvbiBvZiBnZW5lcmljX29zeW5jX2lub2RlKCksCi0gKiBhcyBpdCBpcyBmYWlybHkgbWVhbmluZ2xlc3MgdG8gc3luYyB0aGUgbWV0YWRhdGEgb2YgYW4gTkZTIGZpbGUuCi0gKgogICogV2UgZWxpbWluYXRlIGxvY2FsIGF0aW1lIHVwZGF0ZXMsIHNlZSBkaXJlY3QgcmVhZCBhYm92ZS4KICAqCiAgKiBXZSBhdm9pZCB1bm5lY2Vzc2FyeSBwYWdlIGNhY2hlIGludmFsaWRhdGlvbnMgZm9yIG5vcm1hbCBjYWNoZWQKZGlmZiAtLWdpdCBhL2ZzL25mcy9kbnNfcmVzb2x2ZS5jIGIvZnMvbmZzL2Ruc19yZXNvbHZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkNTRiYQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL25mcy9kbnNfcmVzb2x2ZS5jCkBAIC0wLDAgKzEsMzM1IEBACisvKgorICogbGludXgvZnMvbmZzL2Ruc19yZXNvbHZlLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgVHJvbmQgTXlrbGVidXN0IDxUcm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbT4KKyAqCisgKiBSZXNvbHZlcyBETlMgaG9zdG5hbWVzIGludG8gdmFsaWQgaXAgYWRkcmVzc2VzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjYXV0aC5oPgorCisjaW5jbHVkZSAiZG5zX3Jlc29sdmUuaCIKKyNpbmNsdWRlICJjYWNoZV9saWIuaCIKKworI2RlZmluZSBORlNfRE5TX0hBU0hCSVRTIDQKKyNkZWZpbmUgTkZTX0ROU19IQVNIVEJMX1NJWkUgKDEgPDwgTkZTX0ROU19IQVNIQklUUykKKworc3RhdGljIHN0cnVjdCBjYWNoZV9oZWFkICpuZnNfZG5zX3RhYmxlW05GU19ETlNfSEFTSFRCTF9TSVpFXTsKKworc3RydWN0IG5mc19kbnNfZW50IHsKKwlzdHJ1Y3QgY2FjaGVfaGVhZCBoOworCisJY2hhciAqaG9zdG5hbWU7CisJc2l6ZV90IG5hbWVsZW47CisKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyOworCXNpemVfdCBhZGRybGVuOworfTsKKworCitzdGF0aWMgdm9pZCBuZnNfZG5zX2VudF9pbml0KHN0cnVjdCBjYWNoZV9oZWFkICpjbmV3LAorCQlzdHJ1Y3QgY2FjaGVfaGVhZCAqY2tleSkKK3sKKwlzdHJ1Y3QgbmZzX2Ruc19lbnQgKm5ldzsKKwlzdHJ1Y3QgbmZzX2Ruc19lbnQgKmtleTsKKworCW5ldyA9IGNvbnRhaW5lcl9vZihjbmV3LCBzdHJ1Y3QgbmZzX2Ruc19lbnQsIGgpOworCWtleSA9IGNvbnRhaW5lcl9vZihja2V5LCBzdHJ1Y3QgbmZzX2Ruc19lbnQsIGgpOworCisJa2ZyZWUobmV3LT5ob3N0bmFtZSk7CisJbmV3LT5ob3N0bmFtZSA9IGtzdHJuZHVwKGtleS0+aG9zdG5hbWUsIGtleS0+bmFtZWxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKG5ldy0+aG9zdG5hbWUpIHsKKwkJbmV3LT5uYW1lbGVuID0ga2V5LT5uYW1lbGVuOworCQltZW1jcHkoJm5ldy0+YWRkciwgJmtleS0+YWRkciwga2V5LT5hZGRybGVuKTsKKwkJbmV3LT5hZGRybGVuID0ga2V5LT5hZGRybGVuOworCX0gZWxzZSB7CisJCW5ldy0+bmFtZWxlbiA9IDA7CisJCW5ldy0+YWRkcmxlbiA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBuZnNfZG5zX2VudF9wdXQoc3RydWN0IGtyZWYgKnJlZikKK3sKKwlzdHJ1Y3QgbmZzX2Ruc19lbnQgKml0ZW07CisKKwlpdGVtID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IG5mc19kbnNfZW50LCBoLnJlZik7CisJa2ZyZWUoaXRlbS0+aG9zdG5hbWUpOworCWtmcmVlKGl0ZW0pOworfQorCitzdGF0aWMgc3RydWN0IGNhY2hlX2hlYWQgKm5mc19kbnNfZW50X2FsbG9jKHZvaWQpCit7CisJc3RydWN0IG5mc19kbnNfZW50ICppdGVtID0ga21hbGxvYyhzaXplb2YoKml0ZW0pLCBHRlBfS0VSTkVMKTsKKworCWlmIChpdGVtICE9IE5VTEwpIHsKKwkJaXRlbS0+aG9zdG5hbWUgPSBOVUxMOworCQlpdGVtLT5uYW1lbGVuID0gMDsKKwkJaXRlbS0+YWRkcmxlbiA9IDA7CisJCXJldHVybiAmaXRlbS0+aDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG5mc19kbnNfaGFzaChjb25zdCBzdHJ1Y3QgbmZzX2Ruc19lbnQgKmtleSkKK3sKKwlyZXR1cm4gaGFzaF9zdHIoa2V5LT5ob3N0bmFtZSwgTkZTX0ROU19IQVNIQklUUyk7Cit9CisKK3N0YXRpYyB2b2lkIG5mc19kbnNfcmVxdWVzdChzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCwKKwkJc3RydWN0IGNhY2hlX2hlYWQgKmNoLAorCQljaGFyICoqYnBwLCBpbnQgKmJsZW4pCit7CisJc3RydWN0IG5mc19kbnNfZW50ICprZXkgPSBjb250YWluZXJfb2YoY2gsIHN0cnVjdCBuZnNfZG5zX2VudCwgaCk7CisKKwlxd29yZF9hZGQoYnBwLCBibGVuLCBrZXktPmhvc3RuYW1lKTsKKwkoKmJwcClbLTFdID0gJ1xuJzsKK30KKworc3RhdGljIGludCBuZnNfZG5zX3VwY2FsbChzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCwKKwkJc3RydWN0IGNhY2hlX2hlYWQgKmNoKQoreworCXN0cnVjdCBuZnNfZG5zX2VudCAqa2V5ID0gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgbmZzX2Ruc19lbnQsIGgpOworCWludCByZXQ7CisKKwlyZXQgPSBuZnNfY2FjaGVfdXBjYWxsKGNkLCBrZXktPmhvc3RuYW1lKTsKKwlpZiAocmV0KQorCQlyZXQgPSBzdW5ycGNfY2FjaGVfcGlwZV91cGNhbGwoY2QsIGNoLCBuZnNfZG5zX3JlcXVlc3QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbmZzX2Ruc19tYXRjaChzdHJ1Y3QgY2FjaGVfaGVhZCAqY2EsCisJCXN0cnVjdCBjYWNoZV9oZWFkICpjYikKK3sKKwlzdHJ1Y3QgbmZzX2Ruc19lbnQgKmE7CisJc3RydWN0IG5mc19kbnNfZW50ICpiOworCisJYSA9IGNvbnRhaW5lcl9vZihjYSwgc3RydWN0IG5mc19kbnNfZW50LCBoKTsKKwliID0gY29udGFpbmVyX29mKGNiLCBzdHJ1Y3QgbmZzX2Ruc19lbnQsIGgpOworCisJaWYgKGEtPm5hbWVsZW4gPT0gMCB8fCBhLT5uYW1lbGVuICE9IGItPm5hbWVsZW4pCisJCXJldHVybiAwOworCXJldHVybiBtZW1jbXAoYS0+aG9zdG5hbWUsIGItPmhvc3RuYW1lLCBhLT5uYW1lbGVuKSA9PSAwOworfQorCitzdGF0aWMgaW50IG5mc19kbnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLAorCQlzdHJ1Y3QgY2FjaGVfaGVhZCAqaCkKK3sKKwlzdHJ1Y3QgbmZzX2Ruc19lbnQgKml0ZW07CisJbG9uZyB0dGw7CisKKwlpZiAoaCA9PSBOVUxMKSB7CisJCXNlcV9wdXRzKG0sICIjIGlwIGFkZHJlc3MgICAgICBob3N0bmFtZSAgICAgICAgdHRsXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWl0ZW0gPSBjb250YWluZXJfb2YoaCwgc3RydWN0IG5mc19kbnNfZW50LCBoKTsKKwl0dGwgPSAobG9uZylpdGVtLT5oLmV4cGlyeV90aW1lIC0gKGxvbmcpZ2V0X3NlY29uZHMoKTsKKwlpZiAodHRsIDwgMCkKKwkJdHRsID0gMDsKKworCWlmICghdGVzdF9iaXQoQ0FDSEVfTkVHQVRJVkUsICZoLT5mbGFncykpIHsKKwkJY2hhciBidWZbSU5FVDZfQUREUlNUUkxFTitJUFY2X1NDT1BFX0lEX0xFTisxXTsKKworCQlycGNfbnRvcCgoc3RydWN0IHNvY2thZGRyICopJml0ZW0tPmFkZHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlzZXFfcHJpbnRmKG0sICIlMTVzICIsIGJ1Zik7CisJfSBlbHNlCisJCXNlcV9wdXRzKG0sICI8bm9uZT4gICAgICAgICAgIik7CisJc2VxX3ByaW50ZihtLCAiJTE1cyAlbGRcbiIsIGl0ZW0tPmhvc3RuYW1lLCB0dGwpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbmZzX2Ruc19lbnQgKm5mc19kbnNfbG9va3VwKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLAorCQlzdHJ1Y3QgbmZzX2Ruc19lbnQgKmtleSkKK3sKKwlzdHJ1Y3QgY2FjaGVfaGVhZCAqY2g7CisKKwljaCA9IHN1bnJwY19jYWNoZV9sb29rdXAoY2QsCisJCQkma2V5LT5oLAorCQkJbmZzX2Ruc19oYXNoKGtleSkpOworCWlmICghY2gpCisJCXJldHVybiBOVUxMOworCXJldHVybiBjb250YWluZXJfb2YoY2gsIHN0cnVjdCBuZnNfZG5zX2VudCwgaCk7Cit9CisKK3N0cnVjdCBuZnNfZG5zX2VudCAqbmZzX2Ruc191cGRhdGUoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QsCisJCXN0cnVjdCBuZnNfZG5zX2VudCAqbmV3LAorCQlzdHJ1Y3QgbmZzX2Ruc19lbnQgKmtleSkKK3sKKwlzdHJ1Y3QgY2FjaGVfaGVhZCAqY2g7CisKKwljaCA9IHN1bnJwY19jYWNoZV91cGRhdGUoY2QsCisJCQkmbmV3LT5oLCAma2V5LT5oLAorCQkJbmZzX2Ruc19oYXNoKGtleSkpOworCWlmICghY2gpCisJCXJldHVybiBOVUxMOworCXJldHVybiBjb250YWluZXJfb2YoY2gsIHN0cnVjdCBuZnNfZG5zX2VudCwgaCk7Cit9CisKK3N0YXRpYyBpbnQgbmZzX2Ruc19wYXJzZShzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQoreworCWNoYXIgYnVmMVtORlNfRE5TX0hPU1ROQU1FX01BWExFTisxXTsKKwlzdHJ1Y3QgbmZzX2Ruc19lbnQga2V5LCAqaXRlbTsKKwl1bnNpZ25lZCBsb25nIHR0bDsKKwlzc2l6ZV90IGxlbjsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChidWZbYnVmbGVuLTFdICE9ICdcbicpCisJCWdvdG8gb3V0OworCWJ1ZltidWZsZW4tMV0gPSAnXDAnOworCisJbGVuID0gcXdvcmRfZ2V0KCZidWYsIGJ1ZjEsIHNpemVvZihidWYxKSk7CisJaWYgKGxlbiA8PSAwKQorCQlnb3RvIG91dDsKKwlrZXkuYWRkcmxlbiA9IHJwY19wdG9uKGJ1ZjEsIGxlbiwKKwkJCShzdHJ1Y3Qgc29ja2FkZHIgKikma2V5LmFkZHIsCisJCQlzaXplb2Yoa2V5LmFkZHIpKTsKKworCWxlbiA9IHF3b3JkX2dldCgmYnVmLCBidWYxLCBzaXplb2YoYnVmMSkpOworCWlmIChsZW4gPD0gMCkKKwkJZ290byBvdXQ7CisKKwlrZXkuaG9zdG5hbWUgPSBidWYxOworCWtleS5uYW1lbGVuID0gbGVuOworCW1lbXNldCgma2V5LmgsIDAsIHNpemVvZihrZXkuaCkpOworCisJdHRsID0gZ2V0X2V4cGlyeSgmYnVmKTsKKwlpZiAodHRsID09IDApCisJCWdvdG8gb3V0OworCWtleS5oLmV4cGlyeV90aW1lID0gdHRsICsgZ2V0X3NlY29uZHMoKTsKKworCXJldCA9IC1FTk9NRU07CisJaXRlbSA9IG5mc19kbnNfbG9va3VwKGNkLCAma2V5KTsKKwlpZiAoaXRlbSA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCWlmIChrZXkuYWRkcmxlbiA9PSAwKQorCQlzZXRfYml0KENBQ0hFX05FR0FUSVZFLCAma2V5LmguZmxhZ3MpOworCisJaXRlbSA9IG5mc19kbnNfdXBkYXRlKGNkLCAma2V5LCBpdGVtKTsKKwlpZiAoaXRlbSA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJldCA9IDA7CisJY2FjaGVfcHV0KCZpdGVtLT5oLCBjZCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV9kZXRhaWwgbmZzX2Ruc19yZXNvbHZlID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5oYXNoX3NpemUgPSBORlNfRE5TX0hBU0hUQkxfU0laRSwKKwkuaGFzaF90YWJsZSA9IG5mc19kbnNfdGFibGUsCisJLm5hbWUgPSAiZG5zX3Jlc29sdmUiLAorCS5jYWNoZV9wdXQgPSBuZnNfZG5zX2VudF9wdXQsCisJLmNhY2hlX3VwY2FsbCA9IG5mc19kbnNfdXBjYWxsLAorCS5jYWNoZV9wYXJzZSA9IG5mc19kbnNfcGFyc2UsCisJLmNhY2hlX3Nob3cgPSBuZnNfZG5zX3Nob3csCisJLm1hdGNoID0gbmZzX2Ruc19tYXRjaCwKKwkuaW5pdCA9IG5mc19kbnNfZW50X2luaXQsCisJLnVwZGF0ZSA9IG5mc19kbnNfZW50X2luaXQsCisJLmFsbG9jID0gbmZzX2Ruc19lbnRfYWxsb2MsCit9OworCitzdGF0aWMgaW50IGRvX2NhY2hlX2xvb2t1cChzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCwKKwkJc3RydWN0IG5mc19kbnNfZW50ICprZXksCisJCXN0cnVjdCBuZnNfZG5zX2VudCAqKml0ZW0sCisJCXN0cnVjdCBuZnNfY2FjaGVfZGVmZXJfcmVxICpkcmVxKQoreworCWludCByZXQgPSAtRU5PTUVNOworCisJKml0ZW0gPSBuZnNfZG5zX2xvb2t1cChjZCwga2V5KTsKKwlpZiAoKml0ZW0pIHsKKwkJcmV0ID0gY2FjaGVfY2hlY2soY2QsICYoKml0ZW0pLT5oLCAmZHJlcS0+cmVxKTsKKwkJaWYgKHJldCkKKwkJCSppdGVtID0gTlVMTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkb19jYWNoZV9sb29rdXBfbm93YWl0KHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLAorCQlzdHJ1Y3QgbmZzX2Ruc19lbnQgKmtleSwKKwkJc3RydWN0IG5mc19kbnNfZW50ICoqaXRlbSkKK3sKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCSppdGVtID0gbmZzX2Ruc19sb29rdXAoY2QsIGtleSk7CisJaWYgKCEqaXRlbSkKKwkJZ290byBvdXRfZXJyOworCXJldCA9IC1FVElNRURPVVQ7CisJaWYgKCF0ZXN0X2JpdChDQUNIRV9WQUxJRCwgJigqaXRlbSktPmguZmxhZ3MpCisJCQl8fCAoKml0ZW0pLT5oLmV4cGlyeV90aW1lIDwgZ2V0X3NlY29uZHMoKQorCQkJfHwgY2QtPmZsdXNoX3RpbWUgPiAoKml0ZW0pLT5oLmxhc3RfcmVmcmVzaCkKKwkJZ290byBvdXRfcHV0OworCXJldCA9IC1FTk9FTlQ7CisJaWYgKHRlc3RfYml0KENBQ0hFX05FR0FUSVZFLCAmKCppdGVtKS0+aC5mbGFncykpCisJCWdvdG8gb3V0X3B1dDsKKwlyZXR1cm4gMDsKK291dF9wdXQ6CisJY2FjaGVfcHV0KCYoKml0ZW0pLT5oLCBjZCk7CitvdXRfZXJyOgorCSppdGVtID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRvX2NhY2hlX2xvb2t1cF93YWl0KHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLAorCQlzdHJ1Y3QgbmZzX2Ruc19lbnQgKmtleSwKKwkJc3RydWN0IG5mc19kbnNfZW50ICoqaXRlbSkKK3sKKwlzdHJ1Y3QgbmZzX2NhY2hlX2RlZmVyX3JlcSAqZHJlcTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWRyZXEgPSBuZnNfY2FjaGVfZGVmZXJfcmVxX2FsbG9jKCk7CisJaWYgKCFkcmVxKQorCQlnb3RvIG91dDsKKwlyZXQgPSBkb19jYWNoZV9sb29rdXAoY2QsIGtleSwgaXRlbSwgZHJlcSk7CisJaWYgKHJldCA9PSAtRUFHQUlOKSB7CisJCXJldCA9IG5mc19jYWNoZV93YWl0X2Zvcl91cGNhbGwoZHJlcSk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gZG9fY2FjaGVfbG9va3VwX25vd2FpdChjZCwga2V5LCBpdGVtKTsKKwl9CisJbmZzX2NhY2hlX2RlZmVyX3JlcV9wdXQoZHJlcSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3NpemVfdCBuZnNfZG5zX3Jlc29sdmVfbmFtZShjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKwkJc3RydWN0IHNvY2thZGRyICpzYSwgc2l6ZV90IHNhbGVuKQoreworCXN0cnVjdCBuZnNfZG5zX2VudCBrZXkgPSB7CisJCS5ob3N0bmFtZSA9IG5hbWUsCisJCS5uYW1lbGVuID0gbmFtZWxlbiwKKwl9OworCXN0cnVjdCBuZnNfZG5zX2VudCAqaXRlbSA9IE5VTEw7CisJc3NpemVfdCByZXQ7CisKKwlyZXQgPSBkb19jYWNoZV9sb29rdXBfd2FpdCgmbmZzX2Ruc19yZXNvbHZlLCAma2V5LCAmaXRlbSk7CisJaWYgKHJldCA9PSAwKSB7CisJCWlmIChzYWxlbiA+PSBpdGVtLT5hZGRybGVuKSB7CisJCQltZW1jcHkoc2EsICZpdGVtLT5hZGRyLCBpdGVtLT5hZGRybGVuKTsKKwkJCXJldCA9IGl0ZW0tPmFkZHJsZW47CisJCX0gZWxzZQorCQkJcmV0ID0gLUVPVkVSRkxPVzsKKwkJY2FjaGVfcHV0KCZpdGVtLT5oLCAmbmZzX2Ruc19yZXNvbHZlKTsKKwl9IGVsc2UgaWYgKHJldCA9PSAtRU5PRU5UKQorCQlyZXQgPSAtRVNSQ0g7CisJcmV0dXJuIHJldDsKK30KKworaW50IG5mc19kbnNfcmVzb2x2ZXJfaW5pdCh2b2lkKQoreworCXJldHVybiBuZnNfY2FjaGVfcmVnaXN0ZXIoJm5mc19kbnNfcmVzb2x2ZSk7Cit9CisKK3ZvaWQgbmZzX2Ruc19yZXNvbHZlcl9kZXN0cm95KHZvaWQpCit7CisJbmZzX2NhY2hlX3VucmVnaXN0ZXIoJm5mc19kbnNfcmVzb2x2ZSk7Cit9CisKZGlmZiAtLWdpdCBhL2ZzL25mcy9kbnNfcmVzb2x2ZS5oIGIvZnMvbmZzL2Ruc19yZXNvbHZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNmMDkzOAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL25mcy9kbnNfcmVzb2x2ZS5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBSZXNvbHZlIEROUyBob3N0bmFtZXMgaW50byB2YWxpZCBpcCBhZGRyZXNzZXMKKyAqLworI2lmbmRlZiBfX0xJTlVYX0ZTX05GU19ETlNfUkVTT0xWRV9ICisjZGVmaW5lIF9fTElOVVhfRlNfTkZTX0ROU19SRVNPTFZFX0gKKworI2RlZmluZSBORlNfRE5TX0hPU1ROQU1FX01BWExFTgkoMTI4KQorCitleHRlcm4gaW50IG5mc19kbnNfcmVzb2x2ZXJfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG5mc19kbnNfcmVzb2x2ZXJfZGVzdHJveSh2b2lkKTsKK2V4dGVybiBzc2l6ZV90IG5mc19kbnNfcmVzb2x2ZV9uYW1lKGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorCQlzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzaXplX3Qgc2FsZW4pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL25mcy9maWxlLmMgYi9mcy9uZnMvZmlsZS5jCmluZGV4IDA1MDYyMzIuLjUwMjFiNzUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlLmMKKysrIGIvZnMvbmZzL2ZpbGUuYwpAQCAtMzI4LDYgKzMyOCw0MiBAQAogfQogCiAvKgorICogRGVjaWRlIHdoZXRoZXIgYSByZWFkL21vZGlmeS93cml0ZSBjeWNsZSBtYXkgYmUgbW9yZSBlZmZpY2llbnQKKyAqIHRoZW4gYSBtb2RpZnkvd3JpdGUvcmVhZCBjeWNsZSB3aGVuIHdyaXRpbmcgdG8gYSBwYWdlIGluIHRoZQorICogcGFnZSBjYWNoZS4KKyAqCisgKiBUaGUgbW9kaWZ5L3dyaXRlL3JlYWQgY3ljbGUgbWF5IG9jY3VyIGlmIGEgcGFnZSBpcyByZWFkIGJlZm9yZQorICogYmVpbmcgY29tcGxldGVseSBmaWxsZWQgYnkgdGhlIHdyaXRlci4gIEluIHRoaXMgc2l0dWF0aW9uLCB0aGUKKyAqIHBhZ2UgbXVzdCBiZSBjb21wbGV0ZWx5IHdyaXR0ZW4gdG8gc3RhYmxlIHN0b3JhZ2Ugb24gdGhlIHNlcnZlcgorICogYmVmb3JlIGl0IGNhbiBiZSByZWZpbGxlZCBieSByZWFkaW5nIGluIHRoZSBwYWdlIGZyb20gdGhlIHNlcnZlci4KKyAqIFRoaXMgY2FuIGxlYWQgdG8gZXhwZW5zaXZlLCBzbWFsbCwgRklMRV9TWU5DIG1vZGUgd3JpdGVzIGJlaW5nCisgKiBkb25lLgorICoKKyAqIEl0IG1heSBiZSBtb3JlIGVmZmljaWVudCB0byByZWFkIHRoZSBwYWdlIGZpcnN0IGlmIHRoZSBmaWxlIGlzCisgKiBvcGVuIGZvciByZWFkaW5nIGluIGFkZGl0aW9uIHRvIHdyaXRpbmcsIHRoZSBwYWdlIGlzIG5vdCBtYXJrZWQKKyAqIGFzIFVwdG9kYXRlLCBpdCBpcyBub3QgZGlydHkgb3Igd2FpdGluZyB0byBiZSBjb21taXR0ZWQsCisgKiBpbmRpY2F0aW5nIHRoYXQgaXQgd2FzIHByZXZpb3VzbHkgYWxsb2NhdGVkIGFuZCB0aGVuIG1vZGlmaWVkLAorICogdGhhdCB0aGVyZSB3ZXJlIHZhbGlkIGJ5dGVzIG9mIGRhdGEgaW4gdGhhdCByYW5nZSBvZiB0aGUgZmlsZSwKKyAqIGFuZCB0aGF0IHRoZSBuZXcgZGF0YSB3b24ndCBjb21wbGV0ZWx5IHJlcGxhY2UgdGhlIG9sZCBkYXRhIGluCisgKiB0aGF0IHJhbmdlIG9mIHRoZSBmaWxlLgorICovCitzdGF0aWMgaW50IG5mc193YW50X3JlYWRfbW9kaWZ5X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgcGdsZW4gPSBuZnNfcGFnZV9sZW5ndGgocGFnZSk7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IHBvcyAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKwl1bnNpZ25lZCBpbnQgZW5kID0gb2Zmc2V0ICsgbGVuOworCisJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSAmJgkvKiBvcGVuIGZvciByZWFkPyAqLworCSAgICAhUGFnZVVwdG9kYXRlKHBhZ2UpICYmCQkvKiBVcHRvZGF0ZT8gKi8KKwkgICAgIVBhZ2VQcml2YXRlKHBhZ2UpICYmCQkvKiBpL28gcmVxdWVzdCBhbHJlYWR5PyAqLworCSAgICBwZ2xlbiAmJgkJCQkvKiB2YWxpZCBieXRlcyBvZiBmaWxlPyAqLworCSAgICAoZW5kIDwgcGdsZW4gfHwgb2Zmc2V0KSkJCS8qIHJlcGxhY2UgYWxsIHZhbGlkIGJ5dGVzPyAqLworCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIFRoaXMgZG9lcyB0aGUgInJlYWwiIHdvcmsgb2YgdGhlIHdyaXRlLiBXZSBtdXN0IGFsbG9jYXRlIGFuZCBsb2NrIHRoZQogICogcGFnZSB0byBiZSBzZW50IGJhY2sgdG8gdGhlIGdlbmVyaWMgcm91dGluZSwgd2hpY2ggdGhlbiBjb3BpZXMgdGhlCiAgKiBkYXRhIGZyb20gdXNlciBzcGFjZS4KQEAgLTM0MCwxNSArMzc2LDE2IEBACiAJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQogewogCWludCByZXQ7Ci0JcGdvZmZfdCBpbmRleDsKKwlwZ29mZl90IGluZGV4ID0gcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlpbnQgb25jZV90aHJ1ID0gMDsKIAogCWRmcHJpbnRrKFBBR0VDQUNIRSwgIk5GUzogd3JpdGVfYmVnaW4oJXMvJXMoJWxkKSwgJXVAJWxsZClcbiIsCiAJCWZpbGUtPmZfcGF0aC5kZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwKIAkJZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCW1hcHBpbmctPmhvc3QtPmlfaW5vLCBsZW4sIChsb25nIGxvbmcpIHBvcyk7CiAKK3N0YXJ0OgogCS8qCiAJICogUHJldmVudCBzdGFydmF0aW9uIGlzc3VlcyBpZiBzb21lb25lIGlzIGRvaW5nIGEgY29uc2lzdGVuY3kKIAkgKiBzeW5jLXRvLWRpc2sKQEAgLTM2Nyw2ICs0MDQsMTMgQEAKIAlpZiAocmV0KSB7CiAJCXVubG9ja19wYWdlKHBhZ2UpOwogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJfSBlbHNlIGlmICghb25jZV90aHJ1ICYmCisJCSAgIG5mc193YW50X3JlYWRfbW9kaWZ5X3dyaXRlKGZpbGUsIHBhZ2UsIHBvcywgbGVuKSkgeworCQlvbmNlX3RocnUgPSAxOworCQlyZXQgPSBuZnNfcmVhZHBhZ2UoZmlsZSwgcGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJaWYgKCFyZXQpCisJCQlnb3RvIHN0YXJ0OwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtNDc5LDYgKzUyMyw3IEBACiAJLmludmFsaWRhdGVwYWdlID0gbmZzX2ludmFsaWRhdGVfcGFnZSwKIAkucmVsZWFzZXBhZ2UgPSBuZnNfcmVsZWFzZV9wYWdlLAogCS5kaXJlY3RfSU8gPSBuZnNfZGlyZWN0X0lPLAorCS5taWdyYXRlcGFnZSA9IG5mc19taWdyYXRlX3BhZ2UsCiAJLmxhdW5kZXJfcGFnZSA9IG5mc19sYXVuZGVyX3BhZ2UsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9uZnMvaWRtYXAuYyBiL2ZzL25mcy9pZG1hcC5jCmluZGV4IDg2MTQ3YjAuLjIxYTg0ZDQ1IDEwMDY0NAotLS0gYS9mcy9uZnMvaWRtYXAuYworKysgYi9mcy9uZnMvaWRtYXAuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZm52aGFzaDMyKGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKIAotc3RhdGljIHN0cnVjdCBycGNfcGlwZV9vcHMgaWRtYXBfdXBjYWxsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3BpcGVfb3BzIGlkbWFwX3VwY2FsbF9vcHMgPSB7CiAJLnVwY2FsbAkJPSBpZG1hcF9waXBlX3VwY2FsbCwKIAkuZG93bmNhbGwJPSBpZG1hcF9waXBlX2Rvd25jYWxsLAogCS5kZXN0cm95X21zZwk9IGlkbWFwX3BpcGVfZGVzdHJveV9tc2csCkBAIC0xMTksOCArMTE5LDggQEAKIAlpZiAoaWRtYXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZG1hcC0+aWRtYXBfZGVudHJ5ID0gcnBjX21rcGlwZShjbHAtPmNsX3JwY2NsaWVudC0+Y2xfZGVudHJ5LCAiaWRtYXAiLAotCQkJCQkgaWRtYXAsICZpZG1hcF91cGNhbGxfb3BzLCAwKTsKKwlpZG1hcC0+aWRtYXBfZGVudHJ5ID0gcnBjX21rcGlwZShjbHAtPmNsX3JwY2NsaWVudC0+Y2xfcGF0aC5kZW50cnksCisJCQkiaWRtYXAiLCBpZG1hcCwgJmlkbWFwX3VwY2FsbF9vcHMsIDApOwogCWlmIChJU19FUlIoaWRtYXAtPmlkbWFwX2RlbnRyeSkpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKGlkbWFwLT5pZG1hcF9kZW50cnkpOwogCQlrZnJlZShpZG1hcCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvaW5vZGUuYyBiL2ZzL25mcy9pbm9kZS5jCmluZGV4IGJkNzkzOGUuLjA2MDAyMmIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbm9kZS5jCisrKyBiL2ZzL25mcy9pbm9kZS5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiaW9zdGF0LmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJmc2NhY2hlLmgiCisjaW5jbHVkZSAiZG5zX3Jlc29sdmUuaCIKIAogI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19WRlMKIApAQCAtMjg2LDYgKzI4NywxMSBAQAogCQkvKiBXZSBjYW4ndCBzdXBwb3J0IHVwZGF0ZV9hdGltZSgpLCBzaW5jZSB0aGUgc2VydmVyIHdpbGwgcmVzZXQgaXQgKi8KIAkJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT0FUSU1FfFNfTk9DTVRJTUU7CiAJCWlub2RlLT5pX21vZGUgPSBmYXR0ci0+bW9kZTsKKwkJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9NT0RFKSA9PSAwCisJCQkJJiYgbmZzX3NlcnZlcl9jYXBhYmxlKGlub2RlLCBORlNfQ0FQX01PREUpKQorCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0FUVFIKKwkJCQl8IE5GU19JTk9fSU5WQUxJRF9BQ0NFU1MKKwkJCQl8IE5GU19JTk9fSU5WQUxJRF9BQ0w7CiAJCS8qIFdoeSBzbz8gQmVjYXVzZSB3ZSB3YW50IHJldmFsaWRhdGUgZm9yIGRldmljZXMvRklGT3MsIGFuZAogCQkgKiB0aGF0J3MgcHJlY2lzZWx5IHdoYXQgd2UgaGF2ZSBpbiBuZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zLgogCQkgKi8KQEAgLTMzMCwyMCArMzM2LDQ2IEBACiAJCW5mc2ktPmF0dHJfZ2VuY291bnQgPSBmYXR0ci0+Z2VuY291bnQ7CiAJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9BVElNRSkKIAkJCWlub2RlLT5pX2F0aW1lID0gZmF0dHItPmF0aW1lOworCQllbHNlIGlmIChuZnNfc2VydmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfQVRJTUUpKQorCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0FUVFI7CiAJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9NVElNRSkKIAkJCWlub2RlLT5pX210aW1lID0gZmF0dHItPm10aW1lOworCQllbHNlIGlmIChuZnNfc2VydmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfTVRJTUUpKQorCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0FUVFIKKwkJCQl8IE5GU19JTk9fSU5WQUxJRF9EQVRBOwogCQlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ1RJTUUpCiAJCQlpbm9kZS0+aV9jdGltZSA9IGZhdHRyLT5jdGltZTsKKwkJZWxzZSBpZiAobmZzX3NlcnZlcl9jYXBhYmxlKGlub2RlLCBORlNfQ0FQX0NUSU1FKSkKKwkJCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSCisJCQkJfCBORlNfSU5PX0lOVkFMSURfQUNDRVNTCisJCQkJfCBORlNfSU5PX0lOVkFMSURfQUNMOwogCQlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ0hBTkdFKQogCQkJbmZzaS0+Y2hhbmdlX2F0dHIgPSBmYXR0ci0+Y2hhbmdlX2F0dHI7CisJCWVsc2UgaWYgKG5mc19zZXJ2ZXJfY2FwYWJsZShpbm9kZSwgTkZTX0NBUF9DSEFOR0VfQVRUUikpCisJCQluZnNpLT5jYWNoZV92YWxpZGl0eSB8PSBORlNfSU5PX0lOVkFMSURfQVRUUgorCQkJCXwgTkZTX0lOT19JTlZBTElEX0RBVEE7CiAJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TSVpFKQogCQkJaW5vZGUtPmlfc2l6ZSA9IG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSk7CisJCWVsc2UKKwkJCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSCisJCQkJfCBORlNfSU5PX0lOVkFMSURfREFUQQorCQkJCXwgTkZTX0lOT19SRVZBTF9QQUdFQ0FDSEU7CiAJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9OTElOSykKIAkJCWlub2RlLT5pX25saW5rID0gZmF0dHItPm5saW5rOworCQllbHNlIGlmIChuZnNfc2VydmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfTkxJTkspKQorCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0FUVFI7CiAJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9PV05FUikKIAkJCWlub2RlLT5pX3VpZCA9IGZhdHRyLT51aWQ7CisJCWVsc2UgaWYgKG5mc19zZXJ2ZXJfY2FwYWJsZShpbm9kZSwgTkZTX0NBUF9PV05FUikpCisJCQluZnNpLT5jYWNoZV92YWxpZGl0eSB8PSBORlNfSU5PX0lOVkFMSURfQVRUUgorCQkJCXwgTkZTX0lOT19JTlZBTElEX0FDQ0VTUworCQkJCXwgTkZTX0lOT19JTlZBTElEX0FDTDsKIAkJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0dST1VQKQogCQkJaW5vZGUtPmlfZ2lkID0gZmF0dHItPmdpZDsKKwkJZWxzZSBpZiAobmZzX3NlcnZlcl9jYXBhYmxlKGlub2RlLCBORlNfQ0FQX09XTkVSX0dST1VQKSkKKwkJCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSCisJCQkJfCBORlNfSU5PX0lOVkFMSURfQUNDRVNTCisJCQkJfCBORlNfSU5PX0lOVkFMSURfQUNMOwogCQlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQkxPQ0tTX1VTRUQpCiAJCQlpbm9kZS0+aV9ibG9ja3MgPSBmYXR0ci0+ZHUubmZzMi5ibG9ja3M7CiAJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TUEFDRV9VU0VEKSB7CkBAIC0xMTQ1LDYgKzExNzcsNyBAQAogCWxvZmZfdCBjdXJfaXNpemUsIG5ld19pc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGludmFsaWQgPSAwOwogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKKwl1bnNpZ25lZCBsb25nIHNhdmVfY2FjaGVfdmFsaWRpdHk7CiAKIAlkZnByaW50ayhWRlMsICJORlM6ICVzKCVzLyVsZCBjdD0lZCBpbmZvPTB4JXgpXG4iLAogCQkJX19mdW5jX18sIGlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8sCkBAIC0xMTcxLDEwICsxMjA0LDExIEBACiAJICovCiAJbmZzaS0+cmVhZF9jYWNoZV9qaWZmaWVzID0gZmF0dHItPnRpbWVfc3RhcnQ7CiAKLQlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NIQU5HRSkgfHwgKGZhdHRyLT52YWxpZCAmIChORlNfQVRUUl9GQVRUUl9NVElNRXxORlNfQVRUUl9GQVRUUl9DVElNRSkpKQotCSAgICBuZnNpLT5jYWNoZV92YWxpZGl0eSAmPSB+KE5GU19JTk9fSU5WQUxJRF9BVFRSCi0JCSAgICB8IE5GU19JTk9fSU5WQUxJRF9BVElNRQotCQkgICAgfCBORlNfSU5PX1JFVkFMX1BBR0VDQUNIRSk7CisJc2F2ZV9jYWNoZV92YWxpZGl0eSA9IG5mc2ktPmNhY2hlX3ZhbGlkaXR5OworCW5mc2ktPmNhY2hlX3ZhbGlkaXR5ICY9IH4oTkZTX0lOT19JTlZBTElEX0FUVFIKKwkJCXwgTkZTX0lOT19JTlZBTElEX0FUSU1FCisJCQl8IE5GU19JTk9fUkVWQUxfRk9SQ0VECisJCQl8IE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFKTsKIAogCS8qIERvIGF0b21pYyB3ZWFrIGNhY2hlIGNvbnNpc3RlbmN5IHVwZGF0ZXMgKi8KIAluZnNfd2NjX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOwpAQCAtMTE4OSw3ICsxMjIzLDggQEAKIAkJCQluZnNfZm9yY2VfbG9va3VwX3JldmFsaWRhdGUoaW5vZGUpOwogCQkJbmZzaS0+Y2hhbmdlX2F0dHIgPSBmYXR0ci0+Y2hhbmdlX2F0dHI7CiAJCX0KLQl9CisJfSBlbHNlIGlmIChzZXJ2ZXItPmNhcHMgJiBORlNfQ0FQX0NIQU5HRV9BVFRSKQorCQlpbnZhbGlkIHw9IHNhdmVfY2FjaGVfdmFsaWRpdHk7CiAKIAlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfTVRJTUUpIHsKIAkJLyogTkZTdjIvdjM6IENoZWNrIGlmIHRoZSBtdGltZSBhZ3JlZXMgKi8KQEAgLTEyMDEsNyArMTIzNiwxMiBAQAogCQkJCW5mc19mb3JjZV9sb29rdXBfcmV2YWxpZGF0ZShpbm9kZSk7CiAJCQltZW1jcHkoJmlub2RlLT5pX210aW1lLCAmZmF0dHItPm10aW1lLCBzaXplb2YoaW5vZGUtPmlfbXRpbWUpKTsKIAkJfQotCX0KKwl9IGVsc2UgaWYgKHNlcnZlci0+Y2FwcyAmIE5GU19DQVBfTVRJTUUpCisJCWludmFsaWQgfD0gc2F2ZV9jYWNoZV92YWxpZGl0eSAmIChORlNfSU5PX0lOVkFMSURfQVRUUgorCQkJCXwgTkZTX0lOT19JTlZBTElEX0RBVEEKKwkJCQl8IE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFCisJCQkJfCBORlNfSU5PX1JFVkFMX0ZPUkNFRCk7CisKIAlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ1RJTUUpIHsKIAkJLyogSWYgY3RpbWUgaGFzIGNoYW5nZWQgd2Ugc2hvdWxkIGRlZmluaXRlbHkgY2xlYXIgYWNjZXNzK2FjbCBjYWNoZXMgKi8KIAkJaWYgKCF0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+Y3RpbWUpKSB7CkBAIC0xMjE1LDcgKzEyNTUsMTEgQEAKIAkJCX0KIAkJCW1lbWNweSgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+Y3RpbWUsIHNpemVvZihpbm9kZS0+aV9jdGltZSkpOwogCQl9Ci0JfQorCX0gZWxzZSBpZiAoc2VydmVyLT5jYXBzICYgTkZTX0NBUF9DVElNRSkKKwkJaW52YWxpZCB8PSBzYXZlX2NhY2hlX3ZhbGlkaXR5ICYgKE5GU19JTk9fSU5WQUxJRF9BVFRSCisJCQkJfCBORlNfSU5PX0lOVkFMSURfQUNDRVNTCisJCQkJfCBORlNfSU5PX0lOVkFMSURfQUNMCisJCQkJfCBORlNfSU5PX1JFVkFMX0ZPUkNFRCk7CiAKIAkvKiBDaGVjayBpZiBvdXIgY2FjaGVkIGZpbGUgc2l6ZSBpcyBzdGFsZSAqLwogCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TSVpFKSB7CkBAIC0xMjMxLDMwICsxMjc1LDUwIEBACiAJCQlkcHJpbnRrKCJORlM6IGlzaXplIGNoYW5nZSBvbiBzZXJ2ZXIgZm9yIGZpbGUgJXMvJWxkXG4iLAogCQkJCQlpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vKTsKIAkJfQotCX0KKwl9IGVsc2UKKwkJaW52YWxpZCB8PSBzYXZlX2NhY2hlX3ZhbGlkaXR5ICYgKE5GU19JTk9fSU5WQUxJRF9BVFRSCisJCQkJfCBORlNfSU5PX1JFVkFMX1BBR0VDQUNIRQorCQkJCXwgTkZTX0lOT19SRVZBTF9GT1JDRUQpOwogCiAKIAlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQVRJTUUpCiAJCW1lbWNweSgmaW5vZGUtPmlfYXRpbWUsICZmYXR0ci0+YXRpbWUsIHNpemVvZihpbm9kZS0+aV9hdGltZSkpOworCWVsc2UgaWYgKHNlcnZlci0+Y2FwcyAmIE5GU19DQVBfQVRJTUUpCisJCWludmFsaWQgfD0gc2F2ZV9jYWNoZV92YWxpZGl0eSAmIChORlNfSU5PX0lOVkFMSURfQVRJTUUKKwkJCQl8IE5GU19JTk9fUkVWQUxfRk9SQ0VEKTsKIAogCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9NT0RFKSB7CiAJCWlmICgoaW5vZGUtPmlfbW9kZSAmIFNfSUFMTFVHTykgIT0gKGZhdHRyLT5tb2RlICYgU19JQUxMVUdPKSkgewogCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX0lOVkFMSURfQUNDRVNTfE5GU19JTk9fSU5WQUxJRF9BQ0w7CiAJCQlpbm9kZS0+aV9tb2RlID0gZmF0dHItPm1vZGU7CiAJCX0KLQl9CisJfSBlbHNlIGlmIChzZXJ2ZXItPmNhcHMgJiBORlNfQ0FQX01PREUpCisJCWludmFsaWQgfD0gc2F2ZV9jYWNoZV92YWxpZGl0eSAmIChORlNfSU5PX0lOVkFMSURfQVRUUgorCQkJCXwgTkZTX0lOT19JTlZBTElEX0FDQ0VTUworCQkJCXwgTkZTX0lOT19JTlZBTElEX0FDTAorCQkJCXwgTkZTX0lOT19SRVZBTF9GT1JDRUQpOworCiAJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX09XTkVSKSB7CiAJCWlmIChpbm9kZS0+aV91aWQgIT0gZmF0dHItPnVpZCkgewogCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX0lOVkFMSURfQUNDRVNTfE5GU19JTk9fSU5WQUxJRF9BQ0w7CiAJCQlpbm9kZS0+aV91aWQgPSBmYXR0ci0+dWlkOwogCQl9Ci0JfQorCX0gZWxzZSBpZiAoc2VydmVyLT5jYXBzICYgTkZTX0NBUF9PV05FUikKKwkJaW52YWxpZCB8PSBzYXZlX2NhY2hlX3ZhbGlkaXR5ICYgKE5GU19JTk9fSU5WQUxJRF9BVFRSCisJCQkJfCBORlNfSU5PX0lOVkFMSURfQUNDRVNTCisJCQkJfCBORlNfSU5PX0lOVkFMSURfQUNMCisJCQkJfCBORlNfSU5PX1JFVkFMX0ZPUkNFRCk7CisKIAlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfR1JPVVApIHsKIAkJaWYgKGlub2RlLT5pX2dpZCAhPSBmYXR0ci0+Z2lkKSB7CiAJCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fSU5WQUxJRF9BQ0NFU1N8TkZTX0lOT19JTlZBTElEX0FDTDsKIAkJCWlub2RlLT5pX2dpZCA9IGZhdHRyLT5naWQ7CiAJCX0KLQl9CisJfSBlbHNlIGlmIChzZXJ2ZXItPmNhcHMgJiBORlNfQ0FQX09XTkVSX0dST1VQKQorCQlpbnZhbGlkIHw9IHNhdmVfY2FjaGVfdmFsaWRpdHkgJiAoTkZTX0lOT19JTlZBTElEX0FUVFIKKwkJCQl8IE5GU19JTk9fSU5WQUxJRF9BQ0NFU1MKKwkJCQl8IE5GU19JTk9fSU5WQUxJRF9BQ0wKKwkJCQl8IE5GU19JTk9fUkVWQUxfRk9SQ0VEKTsKIAogCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9OTElOSykgewogCQlpZiAoaW5vZGUtPmlfbmxpbmsgIT0gZmF0dHItPm5saW5rKSB7CkBAIC0xMjYzLDcgKzEzMjcsOSBAQAogCQkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0RBVEE7CiAJCQlpbm9kZS0+aV9ubGluayA9IGZhdHRyLT5ubGluazsKIAkJfQotCX0KKwl9IGVsc2UgaWYgKHNlcnZlci0+Y2FwcyAmIE5GU19DQVBfTkxJTkspCisJCWludmFsaWQgfD0gc2F2ZV9jYWNoZV92YWxpZGl0eSAmIChORlNfSU5PX0lOVkFMSURfQVRUUgorCQkJCXwgTkZTX0lOT19SRVZBTF9GT1JDRUQpOwogCiAJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1NQQUNFX1VTRUQpIHsKIAkJLyoKQEAgLTEyOTMsOSArMTM1OSw4IEBACiAJCQkJfHwgU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkpCiAJCWludmFsaWQgJj0gfk5GU19JTk9fSU5WQUxJRF9EQVRBOwogCWlmICghbmZzX2hhdmVfZGVsZWdhdGlvbihpbm9kZSwgRk1PREVfUkVBRCkgfHwKLQkJCShuZnNpLT5jYWNoZV92YWxpZGl0eSAmIE5GU19JTk9fUkVWQUxfRk9SQ0VEKSkKKwkJCShzYXZlX2NhY2hlX3ZhbGlkaXR5ICYgTkZTX0lOT19SRVZBTF9GT1JDRUQpKQogCQluZnNpLT5jYWNoZV92YWxpZGl0eSB8PSBpbnZhbGlkOwotCW5mc2ktPmNhY2hlX3ZhbGlkaXR5ICY9IH5ORlNfSU5PX1JFVkFMX0ZPUkNFRDsKIAogCXJldHVybiAwOwogIG91dF9jaGFuZ2VkOgpAQCAtMTQ0Miw2ICsxNTA3LDEwIEBACiB7CiAJaW50IGVycjsKIAorCWVyciA9IG5mc19kbnNfcmVzb2x2ZXJfaW5pdCgpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDg7CisKIAllcnIgPSBuZnNfZnNjYWNoZV9yZWdpc3RlcigpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dDc7CkBAIC0xNTAwLDYgKzE1NjksOCBAQAogb3V0NjoKIAluZnNfZnNjYWNoZV91bnJlZ2lzdGVyKCk7CiBvdXQ3OgorCW5mc19kbnNfcmVzb2x2ZXJfZGVzdHJveSgpOworb3V0ODoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNTExLDYgKzE1ODIsNyBAQAogCW5mc19kZXN0cm95X2lub2RlY2FjaGUoKTsKIAluZnNfZGVzdHJveV9uZnNwYWdlY2FjaGUoKTsKIAluZnNfZnNjYWNoZV91bnJlZ2lzdGVyKCk7CisJbmZzX2Ruc19yZXNvbHZlcl9kZXN0cm95KCk7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlycGNfcHJvY191bnJlZ2lzdGVyKCJuZnMiKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ludGVybmFsLmggYi9mcy9uZnMvaW50ZXJuYWwuaAppbmRleCA3ZGQ5MGE2Li5lMjFiMWJiIDEwMDY0NAotLS0gYS9mcy9uZnMvaW50ZXJuYWwuaAorKysgYi9mcy9uZnMvaW50ZXJuYWwuaApAQCAtNDksNiArNDksMTEgQEAKICNkZWZpbmUgTkZTX01BWF9TRUNGTEFWT1JTCSgxMikKIAogLyoKKyAqIFZhbHVlIHVzZWQgaWYgdGhlIHVzZXIgZGlkIG5vdCBzcGVjaWZ5IGEgcG9ydCB2YWx1ZS4KKyAqLworI2RlZmluZSBORlNfVU5TUEVDX1BPUlQJCSgtMSkKKworLyoKICAqIEluLWtlcm5lbCBtb3VudCBhcmd1bWVudHMKICAqLwogc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSB7CkBAIC02Myw2ICs2OCw3IEBACiAJdW5zaWduZWQgaW50CQlhdXRoX2ZsYXZvcl9sZW47CiAJcnBjX2F1dGhmbGF2b3JfdAlhdXRoX2ZsYXZvcnNbMV07CiAJY2hhcgkJCSpjbGllbnRfYWRkcmVzczsKKwl1bnNpZ25lZCBpbnQJCXZlcnNpb247CiAJdW5zaWduZWQgaW50CQltaW5vcnZlcnNpb247CiAJY2hhcgkJCSpmc2NhY2hlX3VuaXE7CiAKQEAgLTcxLDcgKzc3LDcgQEAKIAkJc2l6ZV90CQkJYWRkcmxlbjsKIAkJY2hhcgkJCSpob3N0bmFtZTsKIAkJdTMyCQkJdmVyc2lvbjsKLQkJdW5zaWduZWQgc2hvcnQJCXBvcnQ7CisJCWludAkJCXBvcnQ7CiAJCXVuc2lnbmVkIHNob3J0CQlwcm90b2NvbDsKIAl9IG1vdW50X3NlcnZlcjsKIApAQCAtODAsNyArODYsNyBAQAogCQlzaXplX3QJCQlhZGRybGVuOwogCQljaGFyCQkJKmhvc3RuYW1lOwogCQljaGFyCQkJKmV4cG9ydF9wYXRoOwotCQl1bnNpZ25lZCBzaG9ydAkJcG9ydDsKKwkJaW50CQkJcG9ydDsKIAkJdW5zaWduZWQgc2hvcnQJCXByb3RvY29sOwogCX0gbmZzX3NlcnZlcjsKIApAQCAtMTAyLDYgKzEwOCw3IEBACiB9OwogCiBleHRlcm4gaW50IG5mc19tb3VudChzdHJ1Y3QgbmZzX21vdW50X3JlcXVlc3QgKmluZm8pOworZXh0ZXJuIHZvaWQgbmZzX3Vtb3VudChjb25zdCBzdHJ1Y3QgbmZzX21vdW50X3JlcXVlc3QgKmluZm8pOwogCiAvKiBjbGllbnQuYyAqLwogZXh0ZXJuIHN0cnVjdCBycGNfcHJvZ3JhbSBuZnNfcHJvZ3JhbTsKQEAgLTIxMyw3ICsyMjAsNiBAQAogZXh0ZXJuIGludCBuZnNfd2FpdF9iaXRfa2lsbGFibGUodm9pZCAqd29yZCk7CiAKIC8qIHN1cGVyLmMgKi8KLXZvaWQgbmZzX3BhcnNlX2lwX2FkZHJlc3MoY2hhciAqLCBzaXplX3QsIHN0cnVjdCBzb2NrYWRkciAqLCBzaXplX3QgKik7CiBleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbmZzX3hkZXZfZnNfdHlwZTsKICNpZmRlZiBDT05GSUdfTkZTX1Y0CiBleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbmZzNF94ZGV2X2ZzX3R5cGU7CkBAIC0yNDgsNiArMjU0LDEyIEBACiAKIC8qIHdyaXRlLmMgKi8KIGV4dGVybiB2b2lkIG5mc193cml0ZV9wcmVwYXJlKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqY2FsbGRhdGEpOworI2lmZGVmIENPTkZJR19NSUdSQVRJT04KK2V4dGVybiBpbnQgbmZzX21pZ3JhdGVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLAorCQlzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKKyNlbHNlCisjZGVmaW5lIG5mc19taWdyYXRlX3BhZ2UgTlVMTAorI2VuZGlmCiAKIC8qIG5mczRwcm9jLmMgKi8KIGV4dGVybiBpbnQgX25mczRfY2FsbF9zeW5jKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsCkBAIC0zNjgsMjQgKzM4MCwzIEBACiAJcmV0dXJuICgodW5zaWduZWQgbG9uZylsZW4gKyAodW5zaWduZWQgbG9uZyliYXNlICsKIAkJUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKIH0KLQotI2RlZmluZSBJUFY2X1NDT1BFX0RFTElNSVRFUgknJScKLQotLyoKLSAqIFNldCB0aGUgcG9ydCBudW1iZXIgaW4gYW4gYWRkcmVzcy4gIEJlIGFnbm9zdGljIGFib3V0IHRoZSBhZGRyZXNzCi0gKiBmYW1pbHkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBuZnNfc2V0X3BvcnQoc3RydWN0IHNvY2thZGRyICpzYXAsIHVuc2lnbmVkIHNob3J0IHBvcnQpCi17Ci0Jc3RydWN0IHNvY2thZGRyX2luICphcCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXA7Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqYXA2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXA7Ci0KLQlzd2l0Y2ggKHNhcC0+c2FfZmFtaWx5KSB7Ci0JY2FzZSBBRl9JTkVUOgotCQlhcC0+c2luX3BvcnQgPSBodG9ucyhwb3J0KTsKLQkJYnJlYWs7Ci0JY2FzZSBBRl9JTkVUNjoKLQkJYXA2LT5zaW42X3BvcnQgPSBodG9ucyhwb3J0KTsKLQkJYnJlYWs7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL21vdW50X2NsbnQuYyBiL2ZzL25mcy9tb3VudF9jbG50LmMKaW5kZXggMzhlZjllYS4uMGFkZWZjNCAxMDA2NDQKLS0tIGEvZnMvbmZzL21vdW50X2NsbnQuYworKysgYi9mcy9uZnMvbW91bnRfY2xudC5jCkBAIC0yMDksNiArMjA5LDcxIEBACiAJZ290byBvdXQ7CiB9CiAKKy8qKgorICogbmZzX3Vtb3VudCAtIE5vdGlmeSBhIHNlcnZlciB0aGF0IHdlIGhhdmUgdW5tb3VudGVkIHRoaXMgZXhwb3J0CisgKiBAaW5mbzogcG9pbnRlciB0byB1bW91bnQgcmVxdWVzdCBhcmd1bWVudHMKKyAqCisgKiBNT1VOVFBST0NfVU1OVCBpcyBhZHZpc29yeSwgc28gd2Ugc2V0IGEgc2hvcnQgdGltZW91dCwgYW5kIGFsd2F5cworICogdXNlIFVEUC4KKyAqLwordm9pZCBuZnNfdW1vdW50KGNvbnN0IHN0cnVjdCBuZnNfbW91bnRfcmVxdWVzdCAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHJwY190aW1lb3V0IG5mc191bW50X3RpbWVvdXQgPSB7CisJCS50b19pbml0dmFsID0gMSAqIEhaLAorCQkudG9fbWF4dmFsID0gMyAqIEhaLAorCQkudG9fcmV0cmllcyA9IDIsCisJfTsKKwlzdHJ1Y3QgcnBjX2NyZWF0ZV9hcmdzIGFyZ3MgPSB7CisJCS5wcm90b2NvbAk9IElQUFJPVE9fVURQLAorCQkuYWRkcmVzcwk9IGluZm8tPnNhcCwKKwkJLmFkZHJzaXplCT0gaW5mby0+c2FsZW4sCisJCS50aW1lb3V0CT0gJm5mc191bW50X3RpbWVvdXQsCisJCS5zZXJ2ZXJuYW1lCT0gaW5mby0+aG9zdG5hbWUsCisJCS5wcm9ncmFtCT0gJm1udF9wcm9ncmFtLAorCQkudmVyc2lvbgk9IGluZm8tPnZlcnNpb24sCisJCS5hdXRoZmxhdm9yCT0gUlBDX0FVVEhfVU5JWCwKKwkJLmZsYWdzCQk9IFJQQ19DTE5UX0NSRUFURV9OT1BJTkcsCisJfTsKKwlzdHJ1Y3QgbW91bnRyZXMJcmVzdWx0OworCXN0cnVjdCBycGNfbWVzc2FnZSBtc2cJPSB7CisJCS5ycGNfYXJncAk9IGluZm8tPmRpcnBhdGgsCisJCS5ycGNfcmVzcAk9ICZyZXN1bHQsCisJfTsKKwlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQ7CisJaW50IHN0YXR1czsKKworCWlmIChpbmZvLT5ub3Jlc3Zwb3J0KQorCQlhcmdzLmZsYWdzIHw9IFJQQ19DTE5UX0NSRUFURV9OT05QUklWUE9SVDsKKworCWNsbnQgPSBycGNfY3JlYXRlKCZhcmdzKTsKKwlpZiAodW5saWtlbHkoSVNfRVJSKGNsbnQpKSkKKwkJZ290byBvdXRfY2xudF9lcnI7CisKKwlkcHJpbnRrKCJORlM6IHNlbmRpbmcgVU1OVCByZXF1ZXN0IGZvciAlczolc1xuIiwKKwkJKGluZm8tPmhvc3RuYW1lID8gaW5mby0+aG9zdG5hbWUgOiAic2VydmVyIiksIGluZm8tPmRpcnBhdGgpOworCisJaWYgKGluZm8tPnZlcnNpb24gPT0gTkZTX01OVDNfVkVSU0lPTikKKwkJbXNnLnJwY19wcm9jID0gJmNsbnQtPmNsX3Byb2NpbmZvW01PVU5UUFJPQzNfVU1OVF07CisJZWxzZQorCQltc2cucnBjX3Byb2MgPSAmY2xudC0+Y2xfcHJvY2luZm9bTU9VTlRQUk9DX1VNTlRdOworCisJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhjbG50LCAmbXNnLCAwKTsKKwlycGNfc2h1dGRvd25fY2xpZW50KGNsbnQpOworCisJaWYgKHVubGlrZWx5KHN0YXR1cyA8IDApKQorCQlnb3RvIG91dF9jYWxsX2VycjsKKworCXJldHVybjsKKworb3V0X2NsbnRfZXJyOgorCWRwcmludGsoIk5GUzogZmFpbGVkIHRvIGNyZWF0ZSBVTU5UIFJQQyBjbGllbnQsIHN0YXR1cz0lbGRcbiIsCisJCQlQVFJfRVJSKGNsbnQpKTsKKwlyZXR1cm47CisKK291dF9jYWxsX2VycjoKKwlkcHJpbnRrKCJORlM6IFVNTlQgcmVxdWVzdCBmYWlsZWQsIHN0YXR1cz0lZFxuIiwgc3RhdHVzKTsKK30KKwogLyoKICAqIFhEUiBlbmNvZGUvZGVjb2RlIGZ1bmN0aW9ucyBmb3IgTU9VTlQKICAqLwpAQCAtMjU4LDcgKzMyMyw3IEBACiAJCXJldHVybiAtRUlPOwogCXN0YXR1cyA9IG50b2hsKCpwKTsKIAotCWZvciAoaSA9IDA7IGkgPD0gQVJSQVlfU0laRShtbnRfZXJydGJsKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobW50X2VycnRibCk7IGkrKykgewogCQlpZiAobW50X2VycnRibFtpXS5zdGF0dXMgPT0gc3RhdHVzKSB7CiAJCQlyZXMtPmVycm5vID0gbW50X2VycnRibFtpXS5lcnJubzsKIAkJCXJldHVybiAwOwpAQCAtMzA5LDcgKzM3NCw3IEBACiAJCXJldHVybiAtRUlPOwogCXN0YXR1cyA9IG50b2hsKCpwKTsKIAotCWZvciAoaSA9IDA7IGkgPD0gQVJSQVlfU0laRShtbnQzX2VycnRibCk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1udDNfZXJydGJsKTsgaSsrKSB7CiAJCWlmIChtbnQzX2VycnRibFtpXS5zdGF0dXMgPT0gc3RhdHVzKSB7CiAJCQlyZXMtPmVycm5vID0gbW50M19lcnJ0YmxbaV0uZXJybm87CiAJCQlyZXR1cm4gMDsKQEAgLTQwNyw2ICs0NzIsMTMgQEAKIAkJLnBfc3RhdGlkeAk9IE1PVU5UUFJPQ19NTlQsCiAJCS5wX25hbWUJCT0gIk1PVU5UIiwKIAl9LAorCVtNT1VOVFBST0NfVU1OVF0gPSB7CisJCS5wX3Byb2MJCT0gTU9VTlRQUk9DX1VNTlQsCisJCS5wX2VuY29kZQk9IChreGRycHJvY190KW1udF9lbmNfZGlycGF0aCwKKwkJLnBfYXJnbGVuCT0gTU5UX2VuY19kaXJwYXRoX3N6LAorCQkucF9zdGF0aWR4CT0gTU9VTlRQUk9DX1VNTlQsCisJCS5wX25hbWUJCT0gIlVNT1VOVCIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcnBjX3Byb2NpbmZvIG1udDNfcHJvY2VkdXJlc1tdID0gewpAQCAtNDE5LDYgKzQ5MSwxMyBAQAogCQkucF9zdGF0aWR4CT0gTU9VTlRQUk9DM19NTlQsCiAJCS5wX25hbWUJCT0gIk1PVU5UIiwKIAl9LAorCVtNT1VOVFBST0MzX1VNTlRdID0geworCQkucF9wcm9jCQk9IE1PVU5UUFJPQzNfVU1OVCwKKwkJLnBfZW5jb2RlCT0gKGt4ZHJwcm9jX3QpbW50X2VuY19kaXJwYXRoLAorCQkucF9hcmdsZW4JPSBNTlRfZW5jX2RpcnBhdGhfc3osCisJCS5wX3N0YXRpZHgJPSBNT1VOVFBST0MzX1VNTlQsCisJCS5wX25hbWUJCT0gIlVNT1VOVCIsCisJfSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczNwcm9jLmMgYi9mcy9uZnMvbmZzM3Byb2MuYwppbmRleCBkMGNjNWNlLi5lZTZhMTNmIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzM3Byb2MuYworKysgYi9mcy9uZnMvbmZzM3Byb2MuYwpAQCAtMjk5LDcgKzI5OSw2IEBACiAKIC8qCiAgKiBDcmVhdGUgYSByZWd1bGFyIGZpbGUuCi0gKiBGb3Igbm93LCB3ZSBkb24ndCBpbXBsZW1lbnQgT19FWENMLgogICovCiBzdGF0aWMgaW50CiBuZnMzX3Byb2NfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqc2F0dHIsCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jIGIvZnMvbmZzL25mczRuYW1lc3BhY2UuYwppbmRleCAyYTJhMGE3Li4yNjM2YzI2IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jCisrKyBiL2ZzL25mcy9uZnM0bmFtZXNwYWNlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJuZnM0X2ZzLmgiCisjaW5jbHVkZSAiZG5zX3Jlc29sdmUuaCIKIAogI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19WRlMKIApAQCAtOTUsNiArOTYsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHNpemVfdCBuZnNfcGFyc2Vfc2VydmVyX25hbWUoY2hhciAqc3RyaW5nLCBzaXplX3QgbGVuLAorCQlzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzaXplX3Qgc2FsZW4pCit7CisJc3NpemVfdCByZXQ7CisKKwlyZXQgPSBycGNfcHRvbihzdHJpbmcsIGxlbiwgc2EsIHNhbGVuKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcmV0ID0gbmZzX2Ruc19yZXNvbHZlX25hbWUoc3RyaW5nLCBsZW4sIHNhLCBzYWxlbik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqdHJ5X2xvY2F0aW9uKHN0cnVjdCBuZnNfY2xvbmVfbW91bnQgKm1vdW50ZGF0YSwKIAkJCQkgICAgIGNoYXIgKnBhZ2UsIGNoYXIgKnBhZ2UyLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mczRfZnNfbG9jYXRpb24gKmxvY2F0aW9uKQpAQCAtMTIxLDExICsxMzYsMTIgQEAKIAogCQlpZiAobWVtY2hyKGJ1Zi0+ZGF0YSwgSVBWNl9TQ09QRV9ERUxJTUlURVIsIGJ1Zi0+bGVuKSkKIAkJCWNvbnRpbnVlOwotCQluZnNfcGFyc2VfaXBfYWRkcmVzcyhidWYtPmRhdGEsIGJ1Zi0+bGVuLAotCQkJCW1vdW50ZGF0YS0+YWRkciwgJm1vdW50ZGF0YS0+YWRkcmxlbik7Ci0JCWlmIChtb3VudGRhdGEtPmFkZHItPnNhX2ZhbWlseSA9PSBBRl9VTlNQRUMpCisJCW1vdW50ZGF0YS0+YWRkcmxlbiA9IG5mc19wYXJzZV9zZXJ2ZXJfbmFtZShidWYtPmRhdGEsCisJCQkJYnVmLT5sZW4sCisJCQkJbW91bnRkYXRhLT5hZGRyLCBtb3VudGRhdGEtPmFkZHJsZW4pOworCQlpZiAobW91bnRkYXRhLT5hZGRybGVuID09IDApCiAJCQljb250aW51ZTsKLQkJbmZzX3NldF9wb3J0KG1vdW50ZGF0YS0+YWRkciwgTkZTX1BPUlQpOworCQlycGNfc2V0X3BvcnQobW91bnRkYXRhLT5hZGRyLCBORlNfUE9SVCk7CiAKIAkJbWVtY3B5KHBhZ2UyLCBidWYtPmRhdGEsIGJ1Zi0+bGVuKTsKIAkJcGFnZTJbYnVmLT5sZW5dID0gJ1wwJzsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0cHJvYy5jIGIvZnMvbmZzL25mczRwcm9jLmMKaW5kZXggNjkxNzMxMS4uYmU2NTQ0YSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTYxLDYgKzYxLDggQEAKICNkZWZpbmUgTkZTNF9QT0xMX1JFVFJZX01JTgkoSFovMTApCiAjZGVmaW5lIE5GUzRfUE9MTF9SRVRSWV9NQVgJKDE1KkhaKQogCisjZGVmaW5lIE5GUzRfTUFYX0xPT1BfT05fUkVDT1ZFUiAoMTApCisKIHN0cnVjdCBuZnM0X29wZW5kYXRhOwogc3RhdGljIGludCBfbmZzNF9wcm9jX29wZW4oc3RydWN0IG5mczRfb3BlbmRhdGEgKmRhdGEpOwogc3RhdGljIGludCBuZnM0X2RvX2ZzaW5mbyhzdHJ1Y3QgbmZzX3NlcnZlciAqLCBzdHJ1Y3QgbmZzX2ZoICosIHN0cnVjdCBuZnNfZnNpbmZvICopOwpAQCAtNDI2LDE3ICs0MjgsMTkgQEAKIHN0YXRpYyBpbnQgbmZzNF9yZWNvdmVyX3Nlc3Npb24oc3RydWN0IG5mczRfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gc2Vzc2lvbi0+Y2xwOworCXVuc2lnbmVkIGludCBsb29wOwogCWludCByZXQ7CiAKLQlmb3IgKDs7KSB7CisJZm9yIChsb29wID0gTkZTNF9NQVhfTE9PUF9PTl9SRUNPVkVSOyBsb29wICE9IDA7IGxvb3AtLSkgewogCQlyZXQgPSBuZnM0X3dhaXRfY2xudF9yZWNvdmVyKGNscCk7CiAJCWlmIChyZXQgIT0gMCkKLQkJCQlyZXR1cm4gcmV0OworCQkJYnJlYWs7CiAJCWlmICghdGVzdF9iaXQoTkZTNENMTlRfU0VTU0lPTl9TRVRVUCwgJmNscC0+Y2xfc3RhdGUpKQogCQkJYnJlYWs7CiAJCW5mczRfc2NoZWR1bGVfc3RhdGVfbWFuYWdlcihjbHApOworCQlyZXQgPSAtRUlPOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG5mczQxX3NldHVwX3NlcXVlbmNlKHN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlc3Npb24sCkBAIC0xNDQ0LDE4ICsxNDQ4LDIwIEBACiBzdGF0aWMgaW50IG5mczRfcmVjb3Zlcl9leHBpcmVkX2xlYXNlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNlcnZlci0+bmZzX2NsaWVudDsKKwl1bnNpZ25lZCBpbnQgbG9vcDsKIAlpbnQgcmV0OwogCi0JZm9yICg7OykgeworCWZvciAobG9vcCA9IE5GUzRfTUFYX0xPT1BfT05fUkVDT1ZFUjsgbG9vcCAhPSAwOyBsb29wLS0pIHsKIAkJcmV0ID0gbmZzNF93YWl0X2NsbnRfcmVjb3ZlcihjbHApOwogCQlpZiAocmV0ICE9IDApCi0JCQlyZXR1cm4gcmV0OworCQkJYnJlYWs7CiAJCWlmICghdGVzdF9iaXQoTkZTNENMTlRfTEVBU0VfRVhQSVJFRCwgJmNscC0+Y2xfc3RhdGUpICYmCiAJCSAgICAhdGVzdF9iaXQoTkZTNENMTlRfQ0hFQ0tfTEVBU0UsJmNscC0+Y2xfc3RhdGUpKQogCQkJYnJlYWs7CiAJCW5mczRfc2NoZWR1bGVfc3RhdGVfcmVjb3ZlcnkoY2xwKTsKKwkJcmV0ID0gLUVJTzsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTE5OTcsMTIgKzIwMDMsMzQgQEAKIAlzdGF0dXMgPSBuZnM0X2NhbGxfc3luYyhzZXJ2ZXIsICZtc2csICZhcmdzLCAmcmVzLCAwKTsKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJbWVtY3B5KHNlcnZlci0+YXR0cl9iaXRtYXNrLCByZXMuYXR0cl9iaXRtYXNrLCBzaXplb2Yoc2VydmVyLT5hdHRyX2JpdG1hc2spKTsKKwkJc2VydmVyLT5jYXBzICY9IH4oTkZTX0NBUF9BQ0xTfE5GU19DQVBfSEFSRExJTktTfAorCQkJCU5GU19DQVBfU1lNTElOS1N8TkZTX0NBUF9GSUxFSUR8CisJCQkJTkZTX0NBUF9NT0RFfE5GU19DQVBfTkxJTkt8TkZTX0NBUF9PV05FUnwKKwkJCQlORlNfQ0FQX09XTkVSX0dST1VQfE5GU19DQVBfQVRJTUV8CisJCQkJTkZTX0NBUF9DVElNRXxORlNfQ0FQX01USU1FKTsKIAkJaWYgKHJlcy5hdHRyX2JpdG1hc2tbMF0gJiBGQVRUUjRfV09SRDBfQUNMKQogCQkJc2VydmVyLT5jYXBzIHw9IE5GU19DQVBfQUNMUzsKIAkJaWYgKHJlcy5oYXNfbGlua3MgIT0gMCkKIAkJCXNlcnZlci0+Y2FwcyB8PSBORlNfQ0FQX0hBUkRMSU5LUzsKIAkJaWYgKHJlcy5oYXNfc3ltbGlua3MgIT0gMCkKIAkJCXNlcnZlci0+Y2FwcyB8PSBORlNfQ0FQX1NZTUxJTktTOworCQlpZiAocmVzLmF0dHJfYml0bWFza1swXSAmIEZBVFRSNF9XT1JEMF9GSUxFSUQpCisJCQlzZXJ2ZXItPmNhcHMgfD0gTkZTX0NBUF9GSUxFSUQ7CisJCWlmIChyZXMuYXR0cl9iaXRtYXNrWzFdICYgRkFUVFI0X1dPUkQxX01PREUpCisJCQlzZXJ2ZXItPmNhcHMgfD0gTkZTX0NBUF9NT0RFOworCQlpZiAocmVzLmF0dHJfYml0bWFza1sxXSAmIEZBVFRSNF9XT1JEMV9OVU1MSU5LUykKKwkJCXNlcnZlci0+Y2FwcyB8PSBORlNfQ0FQX05MSU5LOworCQlpZiAocmVzLmF0dHJfYml0bWFza1sxXSAmIEZBVFRSNF9XT1JEMV9PV05FUikKKwkJCXNlcnZlci0+Y2FwcyB8PSBORlNfQ0FQX09XTkVSOworCQlpZiAocmVzLmF0dHJfYml0bWFza1sxXSAmIEZBVFRSNF9XT1JEMV9PV05FUl9HUk9VUCkKKwkJCXNlcnZlci0+Y2FwcyB8PSBORlNfQ0FQX09XTkVSX0dST1VQOworCQlpZiAocmVzLmF0dHJfYml0bWFza1sxXSAmIEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTUykKKwkJCXNlcnZlci0+Y2FwcyB8PSBORlNfQ0FQX0FUSU1FOworCQlpZiAocmVzLmF0dHJfYml0bWFza1sxXSAmIEZBVFRSNF9XT1JEMV9USU1FX01FVEFEQVRBKQorCQkJc2VydmVyLT5jYXBzIHw9IE5GU19DQVBfQ1RJTUU7CisJCWlmIChyZXMuYXR0cl9iaXRtYXNrWzFdICYgRkFUVFI0X1dPUkQxX1RJTUVfTU9ESUZZKQorCQkJc2VydmVyLT5jYXBzIHw9IE5GU19DQVBfTVRJTUU7CisKIAkJbWVtY3B5KHNlcnZlci0+Y2FjaGVfY29uc2lzdGVuY3lfYml0bWFzaywgcmVzLmF0dHJfYml0bWFzaywgc2l6ZW9mKHNlcnZlci0+Y2FjaGVfY29uc2lzdGVuY3lfYml0bWFzaykpOwogCQlzZXJ2ZXItPmNhY2hlX2NvbnNpc3RlbmN5X2JpdG1hc2tbMF0gJj0gRkFUVFI0X1dPUkQwX0NIQU5HRXxGQVRUUjRfV09SRDBfU0laRTsKIAkJc2VydmVyLT5jYWNoZV9jb25zaXN0ZW5jeV9iaXRtYXNrWzFdICY9IEZBVFRSNF9XT1JEMV9USU1FX01FVEFEQVRBfEZBVFRSNF9XT1JEMV9USU1FX01PRElGWTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IDYxNzI3M2UuLmNmYzMwZDMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtNzAyLDI5ICs3MDIsMTIgQEAKIAl1MzIJCW1pbm9ydmVyc2lvbjsKIH07CiAKLS8qCi0gKiBTVEFSVCBPRiAiR0VORVJJQyIgRU5DT0RFIFJPVVRJTkVTLgotICogICBUaGVzZSBtYXkgbG9vayBhIGxpdHRsZSB1Z2x5IHNpbmNlIHRoZXkgYXJlIGltcG9ydGVkIGZyb20gYSAiZ2VuZXJpYyIKLSAqIHNldCBvZiBYRFIgZW5jb2RlL2RlY29kZSByb3V0aW5lcyB3aGljaCBhcmUgaW50ZW5kZWQgdG8gYmUgc2hhcmVkIGJ5Ci0gKiBhbGwgb2Ygb3VyIE5GU3Y0IGltcGxlbWVudGF0aW9ucyAoT3BlbkJTRCwgTWFjT1MgWC4uLikuCi0gKgotICogSWYgdGhlIHBhaW4gb2YgcmVhZGluZyB0aGVzZSBpcyB0b28gZ3JlYXQsIGl0IHNob3VsZCBiZSBhIHN0cmFpZ2h0Zm9yd2FyZAotICogdGFzayB0byB0cmFuc2xhdGUgdGhlbSBpbnRvIExpbnV4LXNwZWNpZmljIHZlcnNpb25zIHdoaWNoIGFyZSBtb3JlCi0gKiBjb25zaXN0ZW50IHdpdGggdGhlIHN0eWxlIHVzZWQgaW4gTkZTdjIvdjMuLi4KLSAqLwotI2RlZmluZSBXUklURTMyKG4pICAgICAgICAgICAgICAgKnArKyA9IGh0b25sKG4pCi0jZGVmaW5lIFdSSVRFNjQobikgICAgICAgICAgICAgICBkbyB7CQkJCVwKLQkqcCsrID0gaHRvbmwoKHVpbnQzMl90KSgobikgPj4gMzIpKTsJCQkJXAotCSpwKysgPSBodG9ubCgodWludDMyX3QpKG4pKTsJCQkJCVwKLX0gd2hpbGUgKDApCi0jZGVmaW5lIFdSSVRFTUVNKHB0cixuYnl0ZXMpICAgICBkbyB7CQkJCVwKLQlwID0geGRyX2VuY29kZV9vcGFxdWVfZml4ZWQocCwgcHRyLCBuYnl0ZXMpOwkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBSRVNFUlZFX1NQQUNFKG5ieXRlcykJZG8gewkJCQlcCi0JcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgbmJ5dGVzKTsJCQlcCi0JQlVHX09OKCFwKTsJCQkJCQlcCi19IHdoaWxlICgwKQorc3RhdGljIF9fYmUzMiAqcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzaXplX3QgbmJ5dGVzKQoreworCV9fYmUzMiAqcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgbmJ5dGVzKTsKKwlCVUdfT04oIXApOworCXJldHVybiBwOworfQogCiBzdGF0aWMgdm9pZCBlbmNvZGVfc3RyaW5nKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVuc2lnbmVkIGludCBsZW4sIGNvbnN0IGNoYXIgKnN0cikKIHsKQEAgLTc0OSwxMiArNzMyLDExIEBACiAKIAlkcHJpbnRrKCJlbmNvZGVfY29tcG91bmQ6IHRhZz0lLipzXG4iLCAoaW50KWhkci0+dGFnbGVuLCBoZHItPnRhZyk7CiAJQlVHX09OKGhkci0+dGFnbGVuID4gTkZTNF9NQVhUQUdMRU4pOwotCVJFU0VSVkVfU1BBQ0UoMTIrKFhEUl9RVUFETEVOKGhkci0+dGFnbGVuKTw8MikpOwotCVdSSVRFMzIoaGRyLT50YWdsZW4pOwotCVdSSVRFTUVNKGhkci0+dGFnLCBoZHItPnRhZ2xlbik7Ci0JV1JJVEUzMihoZHItPm1pbm9ydmVyc2lvbik7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0ICsgaGRyLT50YWdsZW4gKyA4KTsKKwlwID0geGRyX2VuY29kZV9vcGFxdWUocCwgaGRyLT50YWcsIGhkci0+dGFnbGVuKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoaGRyLT5taW5vcnZlcnNpb24pOwogCWhkci0+bm9wc19wID0gcDsKLQlXUklURTMyKGhkci0+bm9wcyk7CisJKnAgPSBjcHVfdG9fYmUzMihoZHItPm5vcHMpOwogfQogCiBzdGF0aWMgdm9pZCBlbmNvZGVfbm9wcyhzdHJ1Y3QgY29tcG91bmRfaGRyICpoZHIpCkBAIC04MjksNTUgKzgxMSw1MyBAQAogCQlsZW4gKz0gMTY7CiAJZWxzZSBpZiAoaWFwLT5pYV92YWxpZCAmIEFUVFJfTVRJTUUpCiAJCWxlbiArPSA0OwotCVJFU0VSVkVfU1BBQ0UobGVuKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIGxlbik7CiAKIAkvKgogCSAqIFdlIHdyaXRlIHRoZSBiaXRtYXAgbGVuZ3RoIG5vdywgYnV0IGxlYXZlIHRoZSBiaXRtYXAgYW5kIHRoZSBhdHRyaWJ1dGUKIAkgKiBidWZmZXIgbGVuZ3RoIHRvIGJlIGJhY2tmaWxsZWQgYXQgdGhlIGVuZCBvZiB0aGlzIHJvdXRpbmUuCiAJICovCi0JV1JJVEUzMigyKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoMik7CiAJcSA9IHA7CiAJcCArPSAzOwogCiAJaWYgKGlhcC0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKIAkJYm12YWwwIHw9IEZBVFRSNF9XT1JEMF9TSVpFOwotCQlXUklURTY0KGlhcC0+aWFfc2l6ZSk7CisJCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIGlhcC0+aWFfc2l6ZSk7CiAJfQogCWlmIChpYXAtPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSB7CiAJCWJtdmFsMSB8PSBGQVRUUjRfV09SRDFfTU9ERTsKLQkJV1JJVEUzMihpYXAtPmlhX21vZGUgJiBTX0lBTExVR08pOworCQkqcCsrID0gY3B1X3RvX2JlMzIoaWFwLT5pYV9tb2RlICYgU19JQUxMVUdPKTsKIAl9CiAJaWYgKGlhcC0+aWFfdmFsaWQgJiBBVFRSX1VJRCkgewogCQlibXZhbDEgfD0gRkFUVFI0X1dPUkQxX09XTkVSOwotCQlXUklURTMyKG93bmVyX25hbWVsZW4pOwotCQlXUklURU1FTShvd25lcl9uYW1lLCBvd25lcl9uYW1lbGVuKTsKKwkJcCA9IHhkcl9lbmNvZGVfb3BhcXVlKHAsIG93bmVyX25hbWUsIG93bmVyX25hbWVsZW4pOwogCX0KIAlpZiAoaWFwLT5pYV92YWxpZCAmIEFUVFJfR0lEKSB7CiAJCWJtdmFsMSB8PSBGQVRUUjRfV09SRDFfT1dORVJfR1JPVVA7Ci0JCVdSSVRFMzIob3duZXJfZ3JvdXBsZW4pOwotCQlXUklURU1FTShvd25lcl9ncm91cCwgb3duZXJfZ3JvdXBsZW4pOworCQlwID0geGRyX2VuY29kZV9vcGFxdWUocCwgb3duZXJfZ3JvdXAsIG93bmVyX2dyb3VwbGVuKTsKIAl9CiAJaWYgKGlhcC0+aWFfdmFsaWQgJiBBVFRSX0FUSU1FX1NFVCkgewogCQlibXZhbDEgfD0gRkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTX1NFVDsKLQkJV1JJVEUzMihORlM0X1NFVF9UT19DTElFTlRfVElNRSk7Ci0JCVdSSVRFMzIoMCk7Ci0JCVdSSVRFMzIoaWFwLT5pYV9tdGltZS50dl9zZWMpOwotCQlXUklURTMyKGlhcC0+aWFfbXRpbWUudHZfbnNlYyk7CisJCSpwKysgPSBjcHVfdG9fYmUzMihORlM0X1NFVF9UT19DTElFTlRfVElNRSk7CisJCSpwKysgPSBjcHVfdG9fYmUzMigwKTsKKwkJKnArKyA9IGNwdV90b19iZTMyKGlhcC0+aWFfbXRpbWUudHZfc2VjKTsKKwkJKnArKyA9IGNwdV90b19iZTMyKGlhcC0+aWFfbXRpbWUudHZfbnNlYyk7CiAJfQogCWVsc2UgaWYgKGlhcC0+aWFfdmFsaWQgJiBBVFRSX0FUSU1FKSB7CiAJCWJtdmFsMSB8PSBGQVRUUjRfV09SRDFfVElNRV9BQ0NFU1NfU0VUOwotCQlXUklURTMyKE5GUzRfU0VUX1RPX1NFUlZFUl9USU1FKTsKKwkJKnArKyA9IGNwdV90b19iZTMyKE5GUzRfU0VUX1RPX1NFUlZFUl9USU1FKTsKIAl9CiAJaWYgKGlhcC0+aWFfdmFsaWQgJiBBVFRSX01USU1FX1NFVCkgewogCQlibXZhbDEgfD0gRkFUVFI0X1dPUkQxX1RJTUVfTU9ESUZZX1NFVDsKLQkJV1JJVEUzMihORlM0X1NFVF9UT19DTElFTlRfVElNRSk7Ci0JCVdSSVRFMzIoMCk7Ci0JCVdSSVRFMzIoaWFwLT5pYV9tdGltZS50dl9zZWMpOwotCQlXUklURTMyKGlhcC0+aWFfbXRpbWUudHZfbnNlYyk7CisJCSpwKysgPSBjcHVfdG9fYmUzMihORlM0X1NFVF9UT19DTElFTlRfVElNRSk7CisJCSpwKysgPSBjcHVfdG9fYmUzMigwKTsKKwkJKnArKyA9IGNwdV90b19iZTMyKGlhcC0+aWFfbXRpbWUudHZfc2VjKTsKKwkJKnArKyA9IGNwdV90b19iZTMyKGlhcC0+aWFfbXRpbWUudHZfbnNlYyk7CiAJfQogCWVsc2UgaWYgKGlhcC0+aWFfdmFsaWQgJiBBVFRSX01USU1FKSB7CiAJCWJtdmFsMSB8PSBGQVRUUjRfV09SRDFfVElNRV9NT0RJRllfU0VUOwotCQlXUklURTMyKE5GUzRfU0VUX1RPX1NFUlZFUl9USU1FKTsKKwkJKnArKyA9IGNwdV90b19iZTMyKE5GUzRfU0VUX1RPX1NFUlZFUl9USU1FKTsKIAl9CiAKIAkvKgpAQCAtODkxLDcgKzg3MSw3IEBACiAJbGVuID0gKGNoYXIgKilwIC0gKGNoYXIgKilxIC0gMTI7CiAJKnErKyA9IGh0b25sKGJtdmFsMCk7CiAJKnErKyA9IGh0b25sKGJtdmFsMSk7Ci0JKnErKyA9IGh0b25sKGxlbik7CisJKnEgPSBodG9ubChsZW4pOwogCiAvKiBvdXQ6ICovCiB9CkBAIC05MDAsOSArODgwLDkgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDgpOwotCVdSSVRFMzIoT1BfQUNDRVNTKTsKLQlXUklURTMyKGFjY2Vzcyk7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA4KTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoT1BfQUNDRVNTKTsKKwkqcCA9IGNwdV90b19iZTMyKGFjY2Vzcyk7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX2FjY2Vzc19tYXhzejsKIH0KQEAgLTkxMSwxMCArODkxLDEwIEBACiB7CiAJX19iZTMyICpwOwogCi0JUkVTRVJWRV9TUEFDRSg4K05GUzRfU1RBVEVJRF9TSVpFKTsKLQlXUklURTMyKE9QX0NMT1NFKTsKLQlXUklURTMyKGFyZy0+c2VxaWQtPnNlcXVlbmNlLT5jb3VudGVyKTsKLQlXUklURU1FTShhcmctPnN0YXRlaWQtPmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDgrTkZTNF9TVEFURUlEX1NJWkUpOworCSpwKysgPSBjcHVfdG9fYmUzMihPUF9DTE9TRSk7CisJKnArKyA9IGNwdV90b19iZTMyKGFyZy0+c2VxaWQtPnNlcXVlbmNlLT5jb3VudGVyKTsKKwl4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZChwLCBhcmctPnN0YXRlaWQtPmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIAloZHItPm5vcHMrKzsKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfY2xvc2VfbWF4c3o7CiB9CkBAIC05MjMsMTAgKzkwMywxMCBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoMTYpOwotCVdSSVRFMzIoT1BfQ09NTUlUKTsKLQlXUklURTY0KGFyZ3MtPm9mZnNldCk7Ci0JV1JJVEUzMihhcmdzLT5jb3VudCk7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCAxNik7CisJKnArKyA9IGNwdV90b19iZTMyKE9QX0NPTU1JVCk7CisJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgYXJncy0+b2Zmc2V0KTsKKwkqcCA9IGNwdV90b19iZTMyKGFyZ3MtPmNvdW50KTsKIAloZHItPm5vcHMrKzsKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfY29tbWl0X21heHN6OwogfQpAQCAtOTM1LDMwICs5MTUsMjggQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDgpOwotCVdSSVRFMzIoT1BfQ1JFQVRFKTsKLQlXUklURTMyKGNyZWF0ZS0+ZnR5cGUpOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgOCk7CisJKnArKyA9IGNwdV90b19iZTMyKE9QX0NSRUFURSk7CisJKnAgPSBjcHVfdG9fYmUzMihjcmVhdGUtPmZ0eXBlKTsKIAogCXN3aXRjaCAoY3JlYXRlLT5mdHlwZSkgewogCWNhc2UgTkY0TE5LOgotCQlSRVNFUlZFX1NQQUNFKDQpOwotCQlXUklURTMyKGNyZWF0ZS0+dS5zeW1saW5rLmxlbik7CisJCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgNCk7CisJCSpwID0gY3B1X3RvX2JlMzIoY3JlYXRlLT51LnN5bWxpbmsubGVuKTsKIAkJeGRyX3dyaXRlX3BhZ2VzKHhkciwgY3JlYXRlLT51LnN5bWxpbmsucGFnZXMsIDAsIGNyZWF0ZS0+dS5zeW1saW5rLmxlbik7CiAJCWJyZWFrOwogCiAJY2FzZSBORjRCTEs6IGNhc2UgTkY0Q0hSOgotCQlSRVNFUlZFX1NQQUNFKDgpOwotCQlXUklURTMyKGNyZWF0ZS0+dS5kZXZpY2Uuc3BlY2RhdGExKTsKLQkJV1JJVEUzMihjcmVhdGUtPnUuZGV2aWNlLnNwZWNkYXRhMik7CisJCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgOCk7CisJCSpwKysgPSBjcHVfdG9fYmUzMihjcmVhdGUtPnUuZGV2aWNlLnNwZWNkYXRhMSk7CisJCSpwID0gY3B1X3RvX2JlMzIoY3JlYXRlLT51LmRldmljZS5zcGVjZGF0YTIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KIAotCVJFU0VSVkVfU1BBQ0UoNCArIGNyZWF0ZS0+bmFtZS0+bGVuKTsKLQlXUklURTMyKGNyZWF0ZS0+bmFtZS0+bGVuKTsKLQlXUklURU1FTShjcmVhdGUtPm5hbWUtPm5hbWUsIGNyZWF0ZS0+bmFtZS0+bGVuKTsKKwllbmNvZGVfc3RyaW5nKHhkciwgY3JlYXRlLT5uYW1lLT5sZW4sIGNyZWF0ZS0+bmFtZS0+bmFtZSk7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX2NyZWF0ZV9tYXhzejsKIApAQCAtOTY5LDEwICs5NDcsMTAgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDEyKTsKLQlXUklURTMyKE9QX0dFVEFUVFIpOwotCVdSSVRFMzIoMSk7Ci0JV1JJVEUzMihiaXRtYXApOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgMTIpOworCSpwKysgPSBjcHVfdG9fYmUzMihPUF9HRVRBVFRSKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoMSk7CisJKnAgPSBjcHVfdG9fYmUzMihiaXRtYXApOwogCWhkci0+bm9wcysrOwogCWhkci0+cmVwbGVuICs9IGRlY29kZV9nZXRhdHRyX21heHN6OwogfQpAQCAtOTgxLDExICs5NTksMTEgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDE2KTsKLQlXUklURTMyKE9QX0dFVEFUVFIpOwotCVdSSVRFMzIoMik7Ci0JV1JJVEUzMihibTApOwotCVdSSVRFMzIoYm0xKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDE2KTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoT1BfR0VUQVRUUik7CisJKnArKyA9IGNwdV90b19iZTMyKDIpOworCSpwKysgPSBjcHVfdG9fYmUzMihibTApOworCSpwID0gY3B1X3RvX2JlMzIoYm0xKTsKIAloZHItPm5vcHMrKzsKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfZ2V0YXR0cl9tYXhzejsKIH0KQEAgLTEwMTIsOCArOTkwLDggQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDQpOwotCVdSSVRFMzIoT1BfR0VURkgpOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgNCk7CisJKnAgPSBjcHVfdG9fYmUzMihPUF9HRVRGSCk7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX2dldGZoX21heHN6OwogfQpAQCAtMTAyMiwxMCArMTAwMCw5IEBACiB7CiAJX19iZTMyICpwOwogCi0JUkVTRVJWRV9TUEFDRSg4ICsgbmFtZS0+bGVuKTsKLQlXUklURTMyKE9QX0xJTkspOwotCVdSSVRFMzIobmFtZS0+bGVuKTsKLQlXUklURU1FTShuYW1lLT5uYW1lLCBuYW1lLT5sZW4pOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgOCArIG5hbWUtPmxlbik7CisJKnArKyA9IGNwdV90b19iZTMyKE9QX0xJTkspOworCXhkcl9lbmNvZGVfb3BhcXVlKHAsIG5hbWUtPm5hbWUsIG5hbWUtPmxlbik7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX2xpbmtfbWF4c3o7CiB9CkBAIC0xMDUyLDI3ICsxMDI5LDI3IEBACiB7CiAJX19iZTMyICpwOwogCi0JUkVTRVJWRV9TUEFDRSgzMik7Ci0JV1JJVEUzMihPUF9MT0NLKTsKLQlXUklURTMyKG5mczRfbG9ja190eXBlKGFyZ3MtPmZsLCBhcmdzLT5ibG9jaykpOwotCVdSSVRFMzIoYXJncy0+cmVjbGFpbSk7Ci0JV1JJVEU2NChhcmdzLT5mbC0+Zmxfc3RhcnQpOwotCVdSSVRFNjQobmZzNF9sb2NrX2xlbmd0aChhcmdzLT5mbCkpOwotCVdSSVRFMzIoYXJncy0+bmV3X2xvY2tfb3duZXIpOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgMzIpOworCSpwKysgPSBjcHVfdG9fYmUzMihPUF9MT0NLKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIobmZzNF9sb2NrX3R5cGUoYXJncy0+ZmwsIGFyZ3MtPmJsb2NrKSk7CisJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPnJlY2xhaW0pOworCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIGFyZ3MtPmZsLT5mbF9zdGFydCk7CisJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgbmZzNF9sb2NrX2xlbmd0aChhcmdzLT5mbCkpOworCSpwID0gY3B1X3RvX2JlMzIoYXJncy0+bmV3X2xvY2tfb3duZXIpOwogCWlmIChhcmdzLT5uZXdfbG9ja19vd25lcil7Ci0JCVJFU0VSVkVfU1BBQ0UoNCtORlM0X1NUQVRFSURfU0laRSszMik7Ci0JCVdSSVRFMzIoYXJncy0+b3Blbl9zZXFpZC0+c2VxdWVuY2UtPmNvdW50ZXIpOwotCQlXUklURU1FTShhcmdzLT5vcGVuX3N0YXRlaWQtPmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKLQkJV1JJVEUzMihhcmdzLT5sb2NrX3NlcWlkLT5zZXF1ZW5jZS0+Y291bnRlcik7Ci0JCVdSSVRFNjQoYXJncy0+bG9ja19vd25lci5jbGllbnRpZCk7Ci0JCVdSSVRFMzIoMTYpOwotCQlXUklURU1FTSgibG9jayBpZDoiLCA4KTsKLQkJV1JJVEU2NChhcmdzLT5sb2NrX293bmVyLmlkKTsKKwkJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0K05GUzRfU1RBVEVJRF9TSVpFKzMyKTsKKwkJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPm9wZW5fc2VxaWQtPnNlcXVlbmNlLT5jb3VudGVyKTsKKwkJcCA9IHhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsIGFyZ3MtPm9wZW5fc3RhdGVpZC0+ZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOworCQkqcCsrID0gY3B1X3RvX2JlMzIoYXJncy0+bG9ja19zZXFpZC0+c2VxdWVuY2UtPmNvdW50ZXIpOworCQlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmdzLT5sb2NrX293bmVyLmNsaWVudGlkKTsKKwkJKnArKyA9IGNwdV90b19iZTMyKDE2KTsKKwkJcCA9IHhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsICJsb2NrIGlkOiIsIDgpOworCQl4ZHJfZW5jb2RlX2h5cGVyKHAsIGFyZ3MtPmxvY2tfb3duZXIuaWQpOwogCX0KIAllbHNlIHsKLQkJUkVTRVJWRV9TUEFDRShORlM0X1NUQVRFSURfU0laRSs0KTsKLQkJV1JJVEVNRU0oYXJncy0+bG9ja19zdGF0ZWlkLT5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7Ci0JCVdSSVRFMzIoYXJncy0+bG9ja19zZXFpZC0+c2VxdWVuY2UtPmNvdW50ZXIpOworCQlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIE5GUzRfU1RBVEVJRF9TSVpFKzQpOworCQlwID0geGRyX2VuY29kZV9vcGFxdWVfZml4ZWQocCwgYXJncy0+bG9ja19zdGF0ZWlkLT5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CisJCSpwID0gY3B1X3RvX2JlMzIoYXJncy0+bG9ja19zZXFpZC0+c2VxdWVuY2UtPmNvdW50ZXIpOwogCX0KIAloZHItPm5vcHMrKzsKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfbG9ja19tYXhzejsKQEAgLTEwODIsMTUgKzEwNTksMTUgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDUyKTsKLQlXUklURTMyKE9QX0xPQ0tUKTsKLQlXUklURTMyKG5mczRfbG9ja190eXBlKGFyZ3MtPmZsLCAwKSk7Ci0JV1JJVEU2NChhcmdzLT5mbC0+Zmxfc3RhcnQpOwotCVdSSVRFNjQobmZzNF9sb2NrX2xlbmd0aChhcmdzLT5mbCkpOwotCVdSSVRFNjQoYXJncy0+bG9ja19vd25lci5jbGllbnRpZCk7Ci0JV1JJVEUzMigxNik7Ci0JV1JJVEVNRU0oImxvY2sgaWQ6IiwgOCk7Ci0JV1JJVEU2NChhcmdzLT5sb2NrX293bmVyLmlkKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDUyKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoT1BfTE9DS1QpOworCSpwKysgPSBjcHVfdG9fYmUzMihuZnM0X2xvY2tfdHlwZShhcmdzLT5mbCwgMCkpOworCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIGFyZ3MtPmZsLT5mbF9zdGFydCk7CisJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgbmZzNF9sb2NrX2xlbmd0aChhcmdzLT5mbCkpOworCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIGFyZ3MtPmxvY2tfb3duZXIuY2xpZW50aWQpOworCSpwKysgPSBjcHVfdG9fYmUzMigxNik7CisJcCA9IHhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsICJsb2NrIGlkOiIsIDgpOworCXhkcl9lbmNvZGVfaHlwZXIocCwgYXJncy0+bG9ja19vd25lci5pZCk7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX2xvY2t0X21heHN6OwogfQpAQCAtMTA5OSwxMyArMTA3NiwxMyBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoMTIrTkZTNF9TVEFURUlEX1NJWkUrMTYpOwotCVdSSVRFMzIoT1BfTE9DS1UpOwotCVdSSVRFMzIobmZzNF9sb2NrX3R5cGUoYXJncy0+ZmwsIDApKTsKLQlXUklURTMyKGFyZ3MtPnNlcWlkLT5zZXF1ZW5jZS0+Y291bnRlcik7Ci0JV1JJVEVNRU0oYXJncy0+c3RhdGVpZC0+ZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOwotCVdSSVRFNjQoYXJncy0+ZmwtPmZsX3N0YXJ0KTsKLQlXUklURTY0KG5mczRfbG9ja19sZW5ndGgoYXJncy0+ZmwpKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDEyK05GUzRfU1RBVEVJRF9TSVpFKzE2KTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoT1BfTE9DS1UpOworCSpwKysgPSBjcHVfdG9fYmUzMihuZnM0X2xvY2tfdHlwZShhcmdzLT5mbCwgMCkpOworCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5zZXFpZC0+c2VxdWVuY2UtPmNvdW50ZXIpOworCXAgPSB4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZChwLCBhcmdzLT5zdGF0ZWlkLT5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CisJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgYXJncy0+ZmwtPmZsX3N0YXJ0KTsKKwl4ZHJfZW5jb2RlX2h5cGVyKHAsIG5mczRfbG9ja19sZW5ndGgoYXJncy0+ZmwpKTsKIAloZHItPm5vcHMrKzsKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfbG9ja3VfbWF4c3o7CiB9CkBAIC0xMTE1LDEwICsxMDkyLDkgQEAKIAlpbnQgbGVuID0gbmFtZS0+bGVuOwogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoOCArIGxlbik7Ci0JV1JJVEUzMihPUF9MT09LVVApOwotCVdSSVRFMzIobGVuKTsKLQlXUklURU1FTShuYW1lLT5uYW1lLCBsZW4pOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgOCArIGxlbik7CisJKnArKyA9IGNwdV90b19iZTMyKE9QX0xPT0tVUCk7CisJeGRyX2VuY29kZV9vcGFxdWUocCwgbmFtZS0+bmFtZSwgbGVuKTsKIAloZHItPm5vcHMrKzsKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfbG9va3VwX21heHN6OwogfQpAQCAtMTEyNywyMSArMTEwMywyMSBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoOCk7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA4KTsKIAlzd2l0Y2ggKGZtb2RlICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKSB7CiAJY2FzZSBGTU9ERV9SRUFEOgotCQlXUklURTMyKE5GUzRfU0hBUkVfQUNDRVNTX1JFQUQpOworCQkqcCsrID0gY3B1X3RvX2JlMzIoTkZTNF9TSEFSRV9BQ0NFU1NfUkVBRCk7CiAJCWJyZWFrOwogCWNhc2UgRk1PREVfV1JJVEU6Ci0JCVdSSVRFMzIoTkZTNF9TSEFSRV9BQ0NFU1NfV1JJVEUpOworCQkqcCsrID0gY3B1X3RvX2JlMzIoTkZTNF9TSEFSRV9BQ0NFU1NfV1JJVEUpOwogCQlicmVhazsKIAljYXNlIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEU6Ci0JCVdSSVRFMzIoTkZTNF9TSEFSRV9BQ0NFU1NfQk9USCk7CisJCSpwKysgPSBjcHVfdG9fYmUzMihORlM0X1NIQVJFX0FDQ0VTU19CT1RIKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJV1JJVEUzMigwKTsKKwkJKnArKyA9IGNwdV90b19iZTMyKDApOwogCX0KLQlXUklURTMyKDApOwkJLyogZm9yIGxpbnV4LCBzaGFyZV9kZW55ID0gMCBhbHdheXMgKi8KKwkqcCA9IGNwdV90b19iZTMyKDApOwkJLyogZm9yIGxpbnV4LCBzaGFyZV9kZW55ID0gMCBhbHdheXMgKi8KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVuY29kZV9vcGVuaGRyKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdCBuZnNfb3BlbmFyZ3MgKmFyZykKQEAgLTExNTEsMjkgKzExMjcsMjkgQEAKICAqIG9wY29kZSA0LCBzZXFpZCA0LCBzaGFyZV9hY2Nlc3MgNCwgc2hhcmVfZGVueSA0LCBjbGllbnRpZCA4LCBvd25lcmxlbiA0LAogICogb3duZXIgNCA9IDMyCiAgKi8KLQlSRVNFUlZFX1NQQUNFKDgpOwotCVdSSVRFMzIoT1BfT1BFTik7Ci0JV1JJVEUzMihhcmctPnNlcWlkLT5zZXF1ZW5jZS0+Y291bnRlcik7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA4KTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoT1BfT1BFTik7CisJKnAgPSBjcHVfdG9fYmUzMihhcmctPnNlcWlkLT5zZXF1ZW5jZS0+Y291bnRlcik7CiAJZW5jb2RlX3NoYXJlX2FjY2Vzcyh4ZHIsIGFyZy0+Zm1vZGUpOwotCVJFU0VSVkVfU1BBQ0UoMjgpOwotCVdSSVRFNjQoYXJnLT5jbGllbnRpZCk7Ci0JV1JJVEUzMigxNik7Ci0JV1JJVEVNRU0oIm9wZW4gaWQ6IiwgOCk7Ci0JV1JJVEU2NChhcmctPmlkKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDI4KTsKKwlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmctPmNsaWVudGlkKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoMTYpOworCXAgPSB4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZChwLCAib3BlbiBpZDoiLCA4KTsKKwl4ZHJfZW5jb2RlX2h5cGVyKHAsIGFyZy0+aWQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZW5jb2RlX2NyZWF0ZW1vZGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3Qgc3RydWN0IG5mc19vcGVuYXJncyAqYXJnKQogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoNCk7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0KTsKIAlzd2l0Y2goYXJnLT5vcGVuX2ZsYWdzICYgT19FWENMKSB7CiAJY2FzZSAwOgotCQlXUklURTMyKE5GUzRfQ1JFQVRFX1VOQ0hFQ0tFRCk7CisJCSpwID0gY3B1X3RvX2JlMzIoTkZTNF9DUkVBVEVfVU5DSEVDS0VEKTsKIAkJZW5jb2RlX2F0dHJzKHhkciwgYXJnLT51LmF0dHJzLCBhcmctPnNlcnZlcik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVdSSVRFMzIoTkZTNF9DUkVBVEVfRVhDTFVTSVZFKTsKKwkJKnAgPSBjcHVfdG9fYmUzMihORlM0X0NSRUFURV9FWENMVVNJVkUpOwogCQllbmNvZGVfbmZzNF92ZXJpZmllcih4ZHIsICZhcmctPnUudmVyaWZpZXIpOwogCX0KIH0KQEAgLTExODIsMTQgKzExNTgsMTQgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDQpOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgNCk7CiAJc3dpdGNoIChhcmctPm9wZW5fZmxhZ3MgJiBPX0NSRUFUKSB7CiAJY2FzZSAwOgotCQlXUklURTMyKE5GUzRfT1BFTl9OT0NSRUFURSk7CisJCSpwID0gY3B1X3RvX2JlMzIoTkZTNF9PUEVOX05PQ1JFQVRFKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHX09OKGFyZy0+Y2xhaW0gIT0gTkZTNF9PUEVOX0NMQUlNX05VTEwpOwotCQlXUklURTMyKE5GUzRfT1BFTl9DUkVBVEUpOworCQkqcCA9IGNwdV90b19iZTMyKE5GUzRfT1BFTl9DUkVBVEUpOwogCQllbmNvZGVfY3JlYXRlbW9kZSh4ZHIsIGFyZyk7CiAJfQogfQpAQCAtMTE5OCwxNiArMTE3NCwxNiBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoNCk7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0KTsKIAlzd2l0Y2ggKGRlbGVnYXRpb25fdHlwZSkgewogCWNhc2UgMDoKLQkJV1JJVEUzMihORlM0X09QRU5fREVMRUdBVEVfTk9ORSk7CisJCSpwID0gY3B1X3RvX2JlMzIoTkZTNF9PUEVOX0RFTEVHQVRFX05PTkUpOwogCQlicmVhazsKIAljYXNlIEZNT0RFX1JFQUQ6Ci0JCVdSSVRFMzIoTkZTNF9PUEVOX0RFTEVHQVRFX1JFQUQpOworCQkqcCA9IGNwdV90b19iZTMyKE5GUzRfT1BFTl9ERUxFR0FURV9SRUFEKTsKIAkJYnJlYWs7CiAJY2FzZSBGTU9ERV9XUklURXxGTU9ERV9SRUFEOgotCQlXUklURTMyKE5GUzRfT1BFTl9ERUxFR0FURV9XUklURSk7CisJCSpwID0gY3B1X3RvX2JlMzIoTkZTNF9PUEVOX0RFTEVHQVRFX1dSSVRFKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CkBAIC0xMjE4LDggKzExOTQsOCBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoNCk7Ci0JV1JJVEUzMihORlM0X09QRU5fQ0xBSU1fTlVMTCk7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0KTsKKwkqcCA9IGNwdV90b19iZTMyKE5GUzRfT1BFTl9DTEFJTV9OVUxMKTsKIAllbmNvZGVfc3RyaW5nKHhkciwgbmFtZS0+bGVuLCBuYW1lLT5uYW1lKTsKIH0KIApAQCAtMTIyNyw4ICsxMjAzLDggQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDQpOwotCVdSSVRFMzIoTkZTNF9PUEVOX0NMQUlNX1BSRVZJT1VTKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQpOworCSpwID0gY3B1X3RvX2JlMzIoTkZTNF9PUEVOX0NMQUlNX1BSRVZJT1VTKTsKIAllbmNvZGVfZGVsZWdhdGlvbl90eXBlKHhkciwgdHlwZSk7CiB9CiAKQEAgLTEyMzYsOSArMTIxMiw5IEBACiB7CiAJX19iZTMyICpwOwogCi0JUkVTRVJWRV9TUEFDRSg0K05GUzRfU1RBVEVJRF9TSVpFKTsKLQlXUklURTMyKE5GUzRfT1BFTl9DTEFJTV9ERUxFR0FURV9DVVIpOwotCVdSSVRFTUVNKHN0YXRlaWQtPmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQrTkZTNF9TVEFURUlEX1NJWkUpOworCSpwKysgPSBjcHVfdG9fYmUzMihORlM0X09QRU5fQ0xBSU1fREVMRUdBVEVfQ1VSKTsKKwl4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZChwLCBzdGF0ZWlkLT5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CiAJZW5jb2RlX3N0cmluZyh4ZHIsIG5hbWUtPmxlbiwgbmFtZS0+bmFtZSk7CiB9CiAKQEAgLTEyNjcsMTAgKzEyNDMsMTAgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDQrTkZTNF9TVEFURUlEX1NJWkUrNCk7Ci0JV1JJVEUzMihPUF9PUEVOX0NPTkZJUk0pOwotCVdSSVRFTUVNKGFyZy0+c3RhdGVpZC0+ZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOwotCVdSSVRFMzIoYXJnLT5zZXFpZC0+c2VxdWVuY2UtPmNvdW50ZXIpOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgNCtORlM0X1NUQVRFSURfU0laRSs0KTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoT1BfT1BFTl9DT05GSVJNKTsKKwlwID0geGRyX2VuY29kZV9vcGFxdWVfZml4ZWQocCwgYXJnLT5zdGF0ZWlkLT5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CisJKnAgPSBjcHVfdG9fYmUzMihhcmctPnNlcWlkLT5zZXF1ZW5jZS0+Y291bnRlcik7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX29wZW5fY29uZmlybV9tYXhzejsKIH0KQEAgLTEyNzksMTAgKzEyNTUsMTAgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDQrTkZTNF9TVEFURUlEX1NJWkUrNCk7Ci0JV1JJVEUzMihPUF9PUEVOX0RPV05HUkFERSk7Ci0JV1JJVEVNRU0oYXJnLT5zdGF0ZWlkLT5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7Ci0JV1JJVEUzMihhcmctPnNlcWlkLT5zZXF1ZW5jZS0+Y291bnRlcik7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0K05GUzRfU1RBVEVJRF9TSVpFKzQpOworCSpwKysgPSBjcHVfdG9fYmUzMihPUF9PUEVOX0RPV05HUkFERSk7CisJcCA9IHhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsIGFyZy0+c3RhdGVpZC0+ZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOworCSpwID0gY3B1X3RvX2JlMzIoYXJnLT5zZXFpZC0+c2VxdWVuY2UtPmNvdW50ZXIpOwogCWVuY29kZV9zaGFyZV9hY2Nlc3MoeGRyLCBhcmctPmZtb2RlKTsKIAloZHItPm5vcHMrKzsKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfb3Blbl9kb3duZ3JhZGVfbWF4c3o7CkBAIC0xMjk0LDEwICsxMjcwLDkgQEAKIAlpbnQgbGVuID0gZmgtPnNpemU7CiAJX19iZTMyICpwOwogCi0JUkVTRVJWRV9TUEFDRSg4ICsgbGVuKTsKLQlXUklURTMyKE9QX1BVVEZIKTsKLQlXUklURTMyKGxlbik7Ci0JV1JJVEVNRU0oZmgtPmRhdGEsIGxlbik7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA4ICsgbGVuKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoT1BfUFVURkgpOworCXhkcl9lbmNvZGVfb3BhcXVlKHAsIGZoLT5kYXRhLCBsZW4pOwogCWhkci0+bm9wcysrOwogCWhkci0+cmVwbGVuICs9IGRlY29kZV9wdXRmaF9tYXhzejsKIH0KQEAgLTEzMDYsOCArMTI4MSw4IEBACiB7CiAJX19iZTMyICpwOwogCi0JUkVTRVJWRV9TUEFDRSg0KTsKLQlXUklURTMyKE9QX1BVVFJPT1RGSCk7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0KTsKKwkqcCA9IGNwdV90b19iZTMyKE9QX1BVVFJPT1RGSCk7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX3B1dHJvb3RmaF9tYXhzejsKIH0KQEAgLTEzMTcsMjYgKzEyOTIsMjYgQEAKIAluZnM0X3N0YXRlaWQgc3RhdGVpZDsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKE5GUzRfU1RBVEVJRF9TSVpFKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIAlpZiAoY3R4LT5zdGF0ZSAhPSBOVUxMKSB7CiAJCW5mczRfY29weV9zdGF0ZWlkKCZzdGF0ZWlkLCBjdHgtPnN0YXRlLCBjdHgtPmxvY2tvd25lcik7Ci0JCVdSSVRFTUVNKHN0YXRlaWQuZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOworCQl4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZChwLCBzdGF0ZWlkLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIAl9IGVsc2UKLQkJV1JJVEVNRU0oemVyb19zdGF0ZWlkLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKKwkJeGRyX2VuY29kZV9vcGFxdWVfZml4ZWQocCwgemVyb19zdGF0ZWlkLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIH0KIAogc3RhdGljIHZvaWQgZW5jb2RlX3JlYWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3Qgc3RydWN0IG5mc19yZWFkYXJncyAqYXJncywgc3RydWN0IGNvbXBvdW5kX2hkciAqaGRyKQogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoNCk7Ci0JV1JJVEUzMihPUF9SRUFEKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQpOworCSpwID0gY3B1X3RvX2JlMzIoT1BfUkVBRCk7CiAKIAllbmNvZGVfc3RhdGVpZCh4ZHIsIGFyZ3MtPmNvbnRleHQpOwogCi0JUkVTRVJWRV9TUEFDRSgxMik7Ci0JV1JJVEU2NChhcmdzLT5vZmZzZXQpOwotCVdSSVRFMzIoYXJncy0+Y291bnQpOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgMTIpOworCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIGFyZ3MtPm9mZnNldCk7CisJKnAgPSBjcHVfdG9fYmUzMihhcmdzLT5jb3VudCk7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX3JlYWRfbWF4c3o7CiB9CkBAIC0xMzQ5LDIwICsxMzI0LDIwIEBACiAJfTsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDEyK05GUzRfVkVSSUZJRVJfU0laRSsyMCk7Ci0JV1JJVEUzMihPUF9SRUFERElSKTsKLQlXUklURTY0KHJlYWRkaXItPmNvb2tpZSk7Ci0JV1JJVEVNRU0ocmVhZGRpci0+dmVyaWZpZXIuZGF0YSwgTkZTNF9WRVJJRklFUl9TSVpFKTsKLQlXUklURTMyKHJlYWRkaXItPmNvdW50ID4+IDEpOyAgLyogV2UncmUgbm90IGRvaW5nIHJlYWRkaXJwbHVzICovCi0JV1JJVEUzMihyZWFkZGlyLT5jb3VudCk7Ci0JV1JJVEUzMigyKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDEyK05GUzRfVkVSSUZJRVJfU0laRSsyMCk7CisJKnArKyA9IGNwdV90b19iZTMyKE9QX1JFQURESVIpOworCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIHJlYWRkaXItPmNvb2tpZSk7CisJcCA9IHhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsIHJlYWRkaXItPnZlcmlmaWVyLmRhdGEsIE5GUzRfVkVSSUZJRVJfU0laRSk7CisJKnArKyA9IGNwdV90b19iZTMyKHJlYWRkaXItPmNvdW50ID4+IDEpOyAgLyogV2UncmUgbm90IGRvaW5nIHJlYWRkaXJwbHVzICovCisJKnArKyA9IGNwdV90b19iZTMyKHJlYWRkaXItPmNvdW50KTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoMik7CiAJLyogU3dpdGNoIHRvIG1vdW50ZWRfb25fZmlsZWlkIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQgKi8KIAlpZiAocmVhZGRpci0+Yml0bWFza1sxXSAmIEZBVFRSNF9XT1JEMV9NT1VOVEVEX09OX0ZJTEVJRCkKIAkJYXR0cnNbMF0gJj0gfkZBVFRSNF9XT1JEMF9GSUxFSUQ7CiAJZWxzZQogCQlhdHRyc1sxXSAmPSB+RkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlEOwotCVdSSVRFMzIoYXR0cnNbMF0gJiByZWFkZGlyLT5iaXRtYXNrWzBdKTsKLQlXUklURTMyKGF0dHJzWzFdICYgcmVhZGRpci0+Yml0bWFza1sxXSk7CisJKnArKyA9IGNwdV90b19iZTMyKGF0dHJzWzBdICYgcmVhZGRpci0+Yml0bWFza1swXSk7CisJKnAgPSBjcHVfdG9fYmUzMihhdHRyc1sxXSAmIHJlYWRkaXItPmJpdG1hc2tbMV0pOwogCWhkci0+bm9wcysrOwogCWhkci0+cmVwbGVuICs9IGRlY29kZV9yZWFkZGlyX21heHN6OwogCWRwcmludGsoIiVzOiBjb29raWUgPSAlTHUsIHZlcmlmaWVyID0gJTA4eDolMDh4LCBiaXRtYXAgPSAlMDh4OiUwOHhcbiIsCkBAIC0xMzc4LDggKzEzNTMsOCBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoNCk7Ci0JV1JJVEUzMihPUF9SRUFETElOSyk7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0KTsKKwkqcCA9IGNwdV90b19iZTMyKE9QX1JFQURMSU5LKTsKIAloZHItPm5vcHMrKzsKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfcmVhZGxpbmtfbWF4c3o7CiB9CkBAIC0xMzg4LDEwICsxMzYzLDkgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDggKyBuYW1lLT5sZW4pOwotCVdSSVRFMzIoT1BfUkVNT1ZFKTsKLQlXUklURTMyKG5hbWUtPmxlbik7Ci0JV1JJVEVNRU0obmFtZS0+bmFtZSwgbmFtZS0+bGVuKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDggKyBuYW1lLT5sZW4pOworCSpwKysgPSBjcHVfdG9fYmUzMihPUF9SRU1PVkUpOworCXhkcl9lbmNvZGVfb3BhcXVlKHAsIG5hbWUtPm5hbWUsIG5hbWUtPmxlbik7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX3JlbW92ZV9tYXhzejsKIH0KQEAgLTE0MDAsMTQgKzEzNzQsMTAgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDggKyBvbGRuYW1lLT5sZW4pOwotCVdSSVRFMzIoT1BfUkVOQU1FKTsKLQlXUklURTMyKG9sZG5hbWUtPmxlbik7Ci0JV1JJVEVNRU0ob2xkbmFtZS0+bmFtZSwgb2xkbmFtZS0+bGVuKTsKLQotCVJFU0VSVkVfU1BBQ0UoNCArIG5ld25hbWUtPmxlbik7Ci0JV1JJVEUzMihuZXduYW1lLT5sZW4pOwotCVdSSVRFTUVNKG5ld25hbWUtPm5hbWUsIG5ld25hbWUtPmxlbik7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0KTsKKwkqcCA9IGNwdV90b19iZTMyKE9QX1JFTkFNRSk7CisJZW5jb2RlX3N0cmluZyh4ZHIsIG9sZG5hbWUtPmxlbiwgb2xkbmFtZS0+bmFtZSk7CisJZW5jb2RlX3N0cmluZyh4ZHIsIG5ld25hbWUtPmxlbiwgbmV3bmFtZS0+bmFtZSk7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX3JlbmFtZV9tYXhzejsKIH0KQEAgLTE0MTYsOSArMTM4Niw5IEBACiB7CiAJX19iZTMyICpwOwogCi0JUkVTRVJWRV9TUEFDRSgxMik7Ci0JV1JJVEUzMihPUF9SRU5FVyk7Ci0JV1JJVEU2NChjbGllbnRfc3RhdGVpZC0+Y2xfY2xpZW50aWQpOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgMTIpOworCSpwKysgPSBjcHVfdG9fYmUzMihPUF9SRU5FVyk7CisJeGRyX2VuY29kZV9oeXBlcihwLCBjbGllbnRfc3RhdGVpZC0+Y2xfY2xpZW50aWQpOwogCWhkci0+bm9wcysrOwogCWhkci0+cmVwbGVuICs9IGRlY29kZV9yZW5ld19tYXhzejsKIH0KQEAgLTE0MjgsOCArMTM5OCw4IEBACiB7CiAJX19iZTMyICpwOwogCi0JUkVTRVJWRV9TUEFDRSg0KTsKLQlXUklURTMyKE9QX1JFU1RPUkVGSCk7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0KTsKKwkqcCA9IGNwdV90b19iZTMyKE9QX1JFU1RPUkVGSCk7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX3Jlc3RvcmVmaF9tYXhzejsKIH0KQEAgLTE0MzksMTYgKzE0MDksMTYgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDQrTkZTNF9TVEFURUlEX1NJWkUpOwotCVdSSVRFMzIoT1BfU0VUQVRUUik7Ci0JV1JJVEVNRU0oemVyb19zdGF0ZWlkLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKLQlSRVNFUlZFX1NQQUNFKDIqNCk7Ci0JV1JJVEUzMigxKTsKLQlXUklURTMyKEZBVFRSNF9XT1JEMF9BQ0wpOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgNCtORlM0X1NUQVRFSURfU0laRSk7CisJKnArKyA9IGNwdV90b19iZTMyKE9QX1NFVEFUVFIpOworCXhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsIHplcm9fc3RhdGVpZC5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCAyKjQpOworCSpwKysgPSBjcHVfdG9fYmUzMigxKTsKKwkqcCA9IGNwdV90b19iZTMyKEZBVFRSNF9XT1JEMF9BQ0wpOwogCWlmIChhcmctPmFjbF9sZW4gJSA0KQogCQlyZXR1cm4gLUVJTlZBTDsKLQlSRVNFUlZFX1NQQUNFKDQpOwotCVdSSVRFMzIoYXJnLT5hY2xfbGVuKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQpOworCSpwID0gY3B1X3RvX2JlMzIoYXJnLT5hY2xfbGVuKTsKIAl4ZHJfd3JpdGVfcGFnZXMoeGRyLCBhcmctPmFjbF9wYWdlcywgYXJnLT5hY2xfcGdiYXNlLCBhcmctPmFjbF9sZW4pOwogCWhkci0+bm9wcysrOwogCWhkci0+cmVwbGVuICs9IGRlY29kZV9zZXRhY2xfbWF4c3o7CkBAIC0xNDYwLDggKzE0MzAsOCBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoNCk7Ci0JV1JJVEUzMihPUF9TQVZFRkgpOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgNCk7CisJKnAgPSBjcHVfdG9fYmUzMihPUF9TQVZFRkgpOwogCWhkci0+bm9wcysrOwogCWhkci0+cmVwbGVuICs9IGRlY29kZV9zYXZlZmhfbWF4c3o7CiB9CkBAIC0xNDcwLDkgKzE0NDAsOSBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoNCtORlM0X1NUQVRFSURfU0laRSk7Ci0JV1JJVEUzMihPUF9TRVRBVFRSKTsKLQlXUklURU1FTShhcmctPnN0YXRlaWQuZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgNCtORlM0X1NUQVRFSURfU0laRSk7CisJKnArKyA9IGNwdV90b19iZTMyKE9QX1NFVEFUVFIpOworCXhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsIGFyZy0+c3RhdGVpZC5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX3NldGF0dHJfbWF4c3o7CiAJZW5jb2RlX2F0dHJzKHhkciwgYXJnLT5pYXAsIHNlcnZlcik7CkBAIC0xNDgyLDE3ICsxNDUyLDE3IEBACiB7CiAJX19iZTMyICpwOwogCi0JUkVTRVJWRV9TUEFDRSg0ICsgTkZTNF9WRVJJRklFUl9TSVpFKTsKLQlXUklURTMyKE9QX1NFVENMSUVOVElEKTsKLQlXUklURU1FTShzZXRjbGllbnRpZC0+c2NfdmVyaWZpZXItPmRhdGEsIE5GUzRfVkVSSUZJRVJfU0laRSk7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0ICsgTkZTNF9WRVJJRklFUl9TSVpFKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoT1BfU0VUQ0xJRU5USUQpOworCXhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsIHNldGNsaWVudGlkLT5zY192ZXJpZmllci0+ZGF0YSwgTkZTNF9WRVJJRklFUl9TSVpFKTsKIAogCWVuY29kZV9zdHJpbmcoeGRyLCBzZXRjbGllbnRpZC0+c2NfbmFtZV9sZW4sIHNldGNsaWVudGlkLT5zY19uYW1lKTsKLQlSRVNFUlZFX1NQQUNFKDQpOwotCVdSSVRFMzIoc2V0Y2xpZW50aWQtPnNjX3Byb2cpOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgNCk7CisJKnAgPSBjcHVfdG9fYmUzMihzZXRjbGllbnRpZC0+c2NfcHJvZyk7CiAJZW5jb2RlX3N0cmluZyh4ZHIsIHNldGNsaWVudGlkLT5zY19uZXRpZF9sZW4sIHNldGNsaWVudGlkLT5zY19uZXRpZCk7CiAJZW5jb2RlX3N0cmluZyh4ZHIsIHNldGNsaWVudGlkLT5zY191YWRkcl9sZW4sIHNldGNsaWVudGlkLT5zY191YWRkcik7Ci0JUkVTRVJWRV9TUEFDRSg0KTsKLQlXUklURTMyKHNldGNsaWVudGlkLT5zY19jYl9pZGVudCk7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0KTsKKwkqcCA9IGNwdV90b19iZTMyKHNldGNsaWVudGlkLT5zY19jYl9pZGVudCk7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX3NldGNsaWVudGlkX21heHN6OwogfQpAQCAtMTUwMSwxMCArMTQ3MSwxMCBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoMTIgKyBORlM0X1ZFUklGSUVSX1NJWkUpOwotCVdSSVRFMzIoT1BfU0VUQ0xJRU5USURfQ09ORklSTSk7Ci0JV1JJVEU2NChjbGllbnRfc3RhdGUtPmNsX2NsaWVudGlkKTsKLQlXUklURU1FTShjbGllbnRfc3RhdGUtPmNsX2NvbmZpcm0uZGF0YSwgTkZTNF9WRVJJRklFUl9TSVpFKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDEyICsgTkZTNF9WRVJJRklFUl9TSVpFKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoT1BfU0VUQ0xJRU5USURfQ09ORklSTSk7CisJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgY2xpZW50X3N0YXRlLT5jbF9jbGllbnRpZCk7CisJeGRyX2VuY29kZV9vcGFxdWVfZml4ZWQocCwgY2xpZW50X3N0YXRlLT5jbF9jb25maXJtLmRhdGEsIE5GUzRfVkVSSUZJRVJfU0laRSk7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX3NldGNsaWVudGlkX2NvbmZpcm1fbWF4c3o7CiB9CkBAIC0xNTEzLDE1ICsxNDgzLDE1IEBACiB7CiAJX19iZTMyICpwOwogCi0JUkVTRVJWRV9TUEFDRSg0KTsKLQlXUklURTMyKE9QX1dSSVRFKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQpOworCSpwID0gY3B1X3RvX2JlMzIoT1BfV1JJVEUpOwogCiAJZW5jb2RlX3N0YXRlaWQoeGRyLCBhcmdzLT5jb250ZXh0KTsKIAotCVJFU0VSVkVfU1BBQ0UoMTYpOwotCVdSSVRFNjQoYXJncy0+b2Zmc2V0KTsKLQlXUklURTMyKGFyZ3MtPnN0YWJsZSk7Ci0JV1JJVEUzMihhcmdzLT5jb3VudCk7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCAxNik7CisJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgYXJncy0+b2Zmc2V0KTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoYXJncy0+c3RhYmxlKTsKKwkqcCA9IGNwdV90b19iZTMyKGFyZ3MtPmNvdW50KTsKIAogCXhkcl93cml0ZV9wYWdlcyh4ZHIsIGFyZ3MtPnBhZ2VzLCBhcmdzLT5wZ2Jhc2UsIGFyZ3MtPmNvdW50KTsKIAloZHItPm5vcHMrKzsKQEAgLTE1MzIsMTAgKzE1MDIsMTAgQEAKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRVNFUlZFX1NQQUNFKDQrTkZTNF9TVEFURUlEX1NJWkUpOworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgNCtORlM0X1NUQVRFSURfU0laRSk7CiAKLQlXUklURTMyKE9QX0RFTEVHUkVUVVJOKTsKLQlXUklURU1FTShzdGF0ZWlkLT5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CisJKnArKyA9IGNwdV90b19iZTMyKE9QX0RFTEVHUkVUVVJOKTsKKwl4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZChwLCBzdGF0ZWlkLT5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX2RlbGVncmV0dXJuX21heHN6OwogfQpAQCAtMTU0OCwxNiArMTUxOCwxNiBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFU0VSVkVfU1BBQ0UoNCArIHNpemVvZihhcmdzLT52ZXJpZmllci0+ZGF0YSkpOwotCVdSSVRFMzIoT1BfRVhDSEFOR0VfSUQpOwotCVdSSVRFTUVNKGFyZ3MtPnZlcmlmaWVyLT5kYXRhLCBzaXplb2YoYXJncy0+dmVyaWZpZXItPmRhdGEpKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyBzaXplb2YoYXJncy0+dmVyaWZpZXItPmRhdGEpKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoT1BfRVhDSEFOR0VfSUQpOworCXhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsIGFyZ3MtPnZlcmlmaWVyLT5kYXRhLCBzaXplb2YoYXJncy0+dmVyaWZpZXItPmRhdGEpKTsKIAogCWVuY29kZV9zdHJpbmcoeGRyLCBhcmdzLT5pZF9sZW4sIGFyZ3MtPmlkKTsKIAotCVJFU0VSVkVfU1BBQ0UoMTIpOwotCVdSSVRFMzIoYXJncy0+ZmxhZ3MpOwotCVdSSVRFMzIoMCk7CS8qIHplcm8gbGVuZ3RoIHN0YXRlX3Byb3RlY3Q0X2EgKi8KLQlXUklURTMyKDApOwkvKiB6ZXJvIGxlbmd0aCBpbXBsZW1lbnRhdGlvbiBpZCBhcnJheSAqLworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgMTIpOworCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5mbGFncyk7CisJKnArKyA9IGNwdV90b19iZTMyKDApOwkvKiB6ZXJvIGxlbmd0aCBzdGF0ZV9wcm90ZWN0NF9hICovCisJKnAgPSBjcHVfdG9fYmUzMigwKTsJLyogemVybyBsZW5ndGggaW1wbGVtZW50YXRpb24gaWQgYXJyYXkgKi8KIAloZHItPm5vcHMrKzsKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfZXhjaGFuZ2VfaWRfbWF4c3o7CiB9CkBAIC0xNTcxLDU1ICsxNTQxLDQzIEBACiAJdWludDMyX3QgbGVuOwogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBhcmdzLT5jbGllbnQ7CiAKLQlSRVNFUlZFX1NQQUNFKDQpOwotCVdSSVRFMzIoT1BfQ1JFQVRFX1NFU1NJT04pOwotCi0JUkVTRVJWRV9TUEFDRSg4KTsKLQlXUklURTY0KGNscC0+Y2xfZXhfY2xpZCk7Ci0KLQlSRVNFUlZFX1NQQUNFKDgpOwotCVdSSVRFMzIoY2xwLT5jbF9zZXFpZCk7CQkJLypTZXF1ZW5jZSBpZCAqLwotCVdSSVRFMzIoYXJncy0+ZmxhZ3MpOwkJCS8qZmxhZ3MgKi8KLQotCVJFU0VSVkVfU1BBQ0UoMioyOCk7CQkJLyogMiBjaGFubmVsX2F0dHJzICovCi0JLyogRm9yZSBDaGFubmVsICovCi0JV1JJVEUzMihhcmdzLT5mY19hdHRycy5oZWFkZXJwYWRzeik7CS8qIGhlYWRlciBwYWRkaW5nIHNpemUgKi8KLQlXUklURTMyKGFyZ3MtPmZjX2F0dHJzLm1heF9ycXN0X3N6KTsJLyogbWF4IHJlcSBzaXplICovCi0JV1JJVEUzMihhcmdzLT5mY19hdHRycy5tYXhfcmVzcF9zeik7CS8qIG1heCByZXNwIHNpemUgKi8KLQlXUklURTMyKGFyZ3MtPmZjX2F0dHJzLm1heF9yZXNwX3N6X2NhY2hlZCk7CS8qIE1heCByZXNwIHN6IGNhY2hlZCAqLwotCVdSSVRFMzIoYXJncy0+ZmNfYXR0cnMubWF4X29wcyk7CS8qIG1heCBvcGVyYXRpb25zICovCi0JV1JJVEUzMihhcmdzLT5mY19hdHRycy5tYXhfcmVxcyk7CS8qIG1heCByZXF1ZXN0cyAqLwotCVdSSVRFMzIoMCk7CQkJCS8qIHJkbWFjaGFubmVsX2F0dHJzICovCi0KLQkvKiBCYWNrIENoYW5uZWwgKi8KLQlXUklURTMyKGFyZ3MtPmZjX2F0dHJzLmhlYWRlcnBhZHN6KTsJLyogaGVhZGVyIHBhZGRpbmcgc2l6ZSAqLwotCVdSSVRFMzIoYXJncy0+YmNfYXR0cnMubWF4X3Jxc3Rfc3opOwkvKiBtYXggcmVxIHNpemUgKi8KLQlXUklURTMyKGFyZ3MtPmJjX2F0dHJzLm1heF9yZXNwX3N6KTsJLyogbWF4IHJlc3Agc2l6ZSAqLwotCVdSSVRFMzIoYXJncy0+YmNfYXR0cnMubWF4X3Jlc3Bfc3pfY2FjaGVkKTsJLyogTWF4IHJlc3Agc3ogY2FjaGVkICovCi0JV1JJVEUzMihhcmdzLT5iY19hdHRycy5tYXhfb3BzKTsJLyogbWF4IG9wZXJhdGlvbnMgKi8KLQlXUklURTMyKGFyZ3MtPmJjX2F0dHJzLm1heF9yZXFzKTsJLyogbWF4IHJlcXVlc3RzICovCi0JV1JJVEUzMigwKTsJCQkJLyogcmRtYWNoYW5uZWxfYXR0cnMgKi8KLQotCVJFU0VSVkVfU1BBQ0UoNCk7Ci0JV1JJVEUzMihhcmdzLT5jYl9wcm9ncmFtKTsJCS8qIGNiX3Byb2dyYW0gKi8KLQotCVJFU0VSVkVfU1BBQ0UoNCk7CQkJLyogIyBvZiBzZWN1cml0eSBmbGF2b3JzICovCi0JV1JJVEUzMigxKTsKLQotCVJFU0VSVkVfU1BBQ0UoNCk7Ci0JV1JJVEUzMihSUENfQVVUSF9VTklYKTsJCQkvKiBhdXRoX3N5cyAqLwotCi0JLyogYXV0aHN5c19wYXJtcyByZmMxODMxICovCi0JUkVTRVJWRV9TUEFDRSg0KTsKLQlXUklURTMyKCh1MzIpY2xwLT5jbF9ib290X3RpbWUudHZfbnNlYyk7CS8qIHN0YW1wICovCiAJbGVuID0gc2NucHJpbnRmKG1hY2hpbmVfbmFtZSwgc2l6ZW9mKG1hY2hpbmVfbmFtZSksICIlcyIsCiAJCQljbHAtPmNsX2lwYWRkcik7Ci0JUkVTRVJWRV9TUEFDRSgxNiArIGxlbik7Ci0JV1JJVEUzMihsZW4pOwotCVdSSVRFTUVNKG1hY2hpbmVfbmFtZSwgbGVuKTsKLQlXUklURTMyKDApOwkJCQkvKiBVSUQgKi8KLQlXUklURTMyKDApOwkJCQkvKiBHSUQgKi8KLQlXUklURTMyKDApOwkJCQkvKiBObyBtb3JlIGdpZHMgKi8KKworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgMjAgKyAyKjI4ICsgMjAgKyBsZW4gKyAxMik7CisJKnArKyA9IGNwdV90b19iZTMyKE9QX0NSRUFURV9TRVNTSU9OKTsKKwlwID0geGRyX2VuY29kZV9oeXBlcihwLCBjbHAtPmNsX2V4X2NsaWQpOworCSpwKysgPSBjcHVfdG9fYmUzMihjbHAtPmNsX3NlcWlkKTsJCQkvKlNlcXVlbmNlIGlkICovCisJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPmZsYWdzKTsJCQkvKmZsYWdzICovCisKKwkvKiBGb3JlIENoYW5uZWwgKi8KKwkqcCsrID0gY3B1X3RvX2JlMzIoYXJncy0+ZmNfYXR0cnMuaGVhZGVycGFkc3opOwkvKiBoZWFkZXIgcGFkZGluZyBzaXplICovCisJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPmZjX2F0dHJzLm1heF9ycXN0X3N6KTsJLyogbWF4IHJlcSBzaXplICovCisJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPmZjX2F0dHJzLm1heF9yZXNwX3N6KTsJLyogbWF4IHJlc3Agc2l6ZSAqLworCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5mY19hdHRycy5tYXhfcmVzcF9zel9jYWNoZWQpOwkvKiBNYXggcmVzcCBzeiBjYWNoZWQgKi8KKwkqcCsrID0gY3B1X3RvX2JlMzIoYXJncy0+ZmNfYXR0cnMubWF4X29wcyk7CS8qIG1heCBvcGVyYXRpb25zICovCisJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPmZjX2F0dHJzLm1heF9yZXFzKTsJLyogbWF4IHJlcXVlc3RzICovCisJKnArKyA9IGNwdV90b19iZTMyKDApOwkJCQkvKiByZG1hY2hhbm5lbF9hdHRycyAqLworCisJLyogQmFjayBDaGFubmVsICovCisJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPmZjX2F0dHJzLmhlYWRlcnBhZHN6KTsJLyogaGVhZGVyIHBhZGRpbmcgc2l6ZSAqLworCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5iY19hdHRycy5tYXhfcnFzdF9zeik7CS8qIG1heCByZXEgc2l6ZSAqLworCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5iY19hdHRycy5tYXhfcmVzcF9zeik7CS8qIG1heCByZXNwIHNpemUgKi8KKwkqcCsrID0gY3B1X3RvX2JlMzIoYXJncy0+YmNfYXR0cnMubWF4X3Jlc3Bfc3pfY2FjaGVkKTsJLyogTWF4IHJlc3Agc3ogY2FjaGVkICovCisJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPmJjX2F0dHJzLm1heF9vcHMpOwkvKiBtYXggb3BlcmF0aW9ucyAqLworCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5iY19hdHRycy5tYXhfcmVxcyk7CS8qIG1heCByZXF1ZXN0cyAqLworCSpwKysgPSBjcHVfdG9fYmUzMigwKTsJCQkJLyogcmRtYWNoYW5uZWxfYXR0cnMgKi8KKworCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5jYl9wcm9ncmFtKTsJCS8qIGNiX3Byb2dyYW0gKi8KKwkqcCsrID0gY3B1X3RvX2JlMzIoMSk7CisJKnArKyA9IGNwdV90b19iZTMyKFJQQ19BVVRIX1VOSVgpOwkJCS8qIGF1dGhfc3lzICovCisKKwkvKiBhdXRoc3lzX3Bhcm1zIHJmYzE4MzEgKi8KKwkqcCsrID0gY3B1X3RvX2JlMzIoKHUzMiljbHAtPmNsX2Jvb3RfdGltZS50dl9uc2VjKTsJLyogc3RhbXAgKi8KKwlwID0geGRyX2VuY29kZV9vcGFxdWUocCwgbWFjaGluZV9uYW1lLCBsZW4pOworCSpwKysgPSBjcHVfdG9fYmUzMigwKTsJCQkJLyogVUlEICovCisJKnArKyA9IGNwdV90b19iZTMyKDApOwkJCQkvKiBHSUQgKi8KKwkqcCA9IGNwdV90b19iZTMyKDApOwkJCQkvKiBObyBtb3JlIGdpZHMgKi8KIAloZHItPm5vcHMrKzsKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfY3JlYXRlX3Nlc3Npb25fbWF4c3o7CiB9CkBAIC0xNjI5LDkgKzE1ODcsOSBAQAogCQkJCSAgIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKIHsKIAlfX2JlMzIgKnA7Ci0JUkVTRVJWRV9TUEFDRSg0ICsgTkZTNF9NQVhfU0VTU0lPTklEX0xFTik7Ci0JV1JJVEUzMihPUF9ERVNUUk9ZX1NFU1NJT04pOwotCVdSSVRFTUVNKHNlc3Npb24tPnNlc3NfaWQuZGF0YSwgTkZTNF9NQVhfU0VTU0lPTklEX0xFTik7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0ICsgTkZTNF9NQVhfU0VTU0lPTklEX0xFTik7CisJKnArKyA9IGNwdV90b19iZTMyKE9QX0RFU1RST1lfU0VTU0lPTik7CisJeGRyX2VuY29kZV9vcGFxdWVfZml4ZWQocCwgc2Vzc2lvbi0+c2Vzc19pZC5kYXRhLCBORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKIAloZHItPm5vcHMrKzsKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfZGVzdHJveV9zZXNzaW9uX21heHN6OwogfQpAQCAtMTY1NSw4ICsxNjEzLDggQEAKIAlXQVJOX09OKGFyZ3MtPnNhX3Nsb3RpZCA9PSBORlM0X01BWF9TTE9UX1RBQkxFKTsKIAlzbG90ID0gdHAtPnNsb3RzICsgYXJncy0+c2Ffc2xvdGlkOwogCi0JUkVTRVJWRV9TUEFDRSg0KTsKLQlXUklURTMyKE9QX1NFUVVFTkNFKTsKKwlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQgKyBORlM0X01BWF9TRVNTSU9OSURfTEVOICsgMTYpOworCSpwKysgPSBjcHVfdG9fYmUzMihPUF9TRVFVRU5DRSk7CiAKIAkvKgogCSAqIFNlc3Npb25pZCArIHNlcWlkICsgc2xvdGlkICsgbWF4IHNsb3RpZCArIGNhY2hlX3RoaXMKQEAgLTE2NzAsMTIgKzE2MjgsMTEgQEAKIAkJKCh1MzIgKilzZXNzaW9uLT5zZXNzX2lkLmRhdGEpWzNdLAogCQlzbG90LT5zZXFfbnIsIGFyZ3MtPnNhX3Nsb3RpZCwKIAkJdHAtPmhpZ2hlc3RfdXNlZF9zbG90aWQsIGFyZ3MtPnNhX2NhY2hlX3RoaXMpOwotCVJFU0VSVkVfU1BBQ0UoTkZTNF9NQVhfU0VTU0lPTklEX0xFTiArIDE2KTsKLQlXUklURU1FTShzZXNzaW9uLT5zZXNzX2lkLmRhdGEsIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pOwotCVdSSVRFMzIoc2xvdC0+c2VxX25yKTsKLQlXUklURTMyKGFyZ3MtPnNhX3Nsb3RpZCk7Ci0JV1JJVEUzMih0cC0+aGlnaGVzdF91c2VkX3Nsb3RpZCk7Ci0JV1JJVEUzMihhcmdzLT5zYV9jYWNoZV90aGlzKTsKKwlwID0geGRyX2VuY29kZV9vcGFxdWVfZml4ZWQocCwgc2Vzc2lvbi0+c2Vzc19pZC5kYXRhLCBORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoc2xvdC0+c2VxX25yKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIoYXJncy0+c2Ffc2xvdGlkKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIodHAtPmhpZ2hlc3RfdXNlZF9zbG90aWQpOworCSpwID0gY3B1X3RvX2JlMzIoYXJncy0+c2FfY2FjaGVfdGhpcyk7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX3NlcXVlbmNlX21heHN6OwogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwpAQCAtMjQ2Niw2OCArMjQyMyw1MyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogCi0vKgotICogU1RBUlQgT0YgIkdFTkVSSUMiIERFQ09ERSBST1VUSU5FUy4KLSAqICAgVGhlc2UgbWF5IGxvb2sgYSBsaXR0bGUgdWdseSBzaW5jZSB0aGV5IGFyZSBpbXBvcnRlZCBmcm9tIGEgImdlbmVyaWMiCi0gKiBzZXQgb2YgWERSIGVuY29kZS9kZWNvZGUgcm91dGluZXMgd2hpY2ggYXJlIGludGVuZGVkIHRvIGJlIHNoYXJlZCBieQotICogYWxsIG9mIG91ciBORlN2NCBpbXBsZW1lbnRhdGlvbnMgKE9wZW5CU0QsIE1hY09TIFguLi4pLgotICoKLSAqIElmIHRoZSBwYWluIG9mIHJlYWRpbmcgdGhlc2UgaXMgdG9vIGdyZWF0LCBpdCBzaG91bGQgYmUgYSBzdHJhaWdodGZvcndhcmQKLSAqIHRhc2sgdG8gdHJhbnNsYXRlIHRoZW0gaW50byBMaW51eC1zcGVjaWZpYyB2ZXJzaW9ucyB3aGljaCBhcmUgbW9yZQotICogY29uc2lzdGVudCB3aXRoIHRoZSBzdHlsZSB1c2VkIGluIE5GU3YyL3YzLi4uCi0gKi8KLSNkZWZpbmUgUkVBRDMyKHgpICAgICAgICAgKHgpID0gbnRvaGwoKnArKykKLSNkZWZpbmUgUkVBRDY0KHgpICAgICAgICAgZG8gewkJCVwKLQkoeCkgPSAodTY0KW50b2hsKCpwKyspIDw8IDMyOwkJXAotCSh4KSB8PSBudG9obCgqcCsrKTsJCQlcCi19IHdoaWxlICgwKQotI2RlZmluZSBSRUFEVElNRSh4KSAgICAgICBkbyB7CQkJXAotCXArKzsJCQkJCVwKLQkoeC50dl9zZWMpID0gbnRvaGwoKnArKyk7CQlcCi0JKHgudHZfbnNlYykgPSBudG9obCgqcCsrKTsJCVwKLX0gd2hpbGUgKDApCi0jZGVmaW5lIENPUFlNRU0oeCxuYnl0ZXMpIGRvIHsJCQlcCi0JbWVtY3B5KCh4KSwgcCwgbmJ5dGVzKTsJCQlcCi0JcCArPSBYRFJfUVVBRExFTihuYnl0ZXMpOwkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBSRUFEX0JVRihuYnl0ZXMpICBkbyB7IFwKLQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBuYnl0ZXMpOyBcCi0JaWYgKHVubGlrZWx5KCFwKSkgeyBcCi0JCWRwcmludGsoIm5mczogJXM6IHByZW1hdHVyZWx5IGhpdCBlbmQgb2YgcmVjZWl2ZSIgXAotCQkJCSIgYnVmZmVyXG4iLCBfX2Z1bmNfXyk7IFwKLQkJZHByaW50aygibmZzOiAlczogeGRyLT5wPSVwLCBieXRlcz0ldSwgeGRyLT5lbmQ9JXBcbiIsIFwKLQkJCQlfX2Z1bmNfXywgeGRyLT5wLCBuYnl0ZXMsIHhkci0+ZW5kKTsgXAotCQlyZXR1cm4gLUVJTzsgXAotCX0gXAotfSB3aGlsZSAoMCkKK3N0YXRpYyB2b2lkIHByaW50X292ZXJmbG93X21zZyhjb25zdCBjaGFyICpmdW5jLCBjb25zdCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyKQoreworCWRwcmludGsoIm5mczogJXM6IHByZW1hdHVyZWx5IGhpdCBlbmQgb2YgcmVjZWl2ZSBidWZmZXIuICIKKwkJIlJlbWFpbmluZyBidWZmZXIgbGVuZ3RoIGlzICV0dSB3b3Jkcy5cbiIsCisJCWZ1bmMsIHhkci0+ZW5kIC0geGRyLT5wKTsKK30KIAogc3RhdGljIGludCBkZWNvZGVfb3BhcXVlX2lubGluZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1bnNpZ25lZCBpbnQgKmxlbiwgY2hhciAqKnN0cmluZykKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRUFEX0JVRig0KTsKLQlSRUFEMzIoKmxlbik7Ci0JUkVBRF9CVUYoKmxlbik7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJKmxlbiA9IGJlMzJfdG9fY3B1cChwKTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCAqbGVuKTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKIAkqc3RyaW5nID0gKGNoYXIgKilwOwogCXJldHVybiAwOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfY29tcG91bmRfaGRyKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRUFEX0JVRig4KTsKLQlSRUFEMzIoaGRyLT5zdGF0dXMpOwotCVJFQUQzMihoZHItPnRhZ2xlbik7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgOCk7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJaGRyLT5zdGF0dXMgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwloZHItPnRhZ2xlbiA9IGJlMzJfdG9fY3B1cChwKTsKIAotCVJFQURfQlVGKGhkci0+dGFnbGVuICsgNCk7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgaGRyLT50YWdsZW4gKyA0KTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKIAloZHItPnRhZyA9IChjaGFyICopcDsKIAlwICs9IFhEUl9RVUFETEVOKGhkci0+dGFnbGVuKTsKLQlSRUFEMzIoaGRyLT5ub3BzKTsKKwloZHItPm5vcHMgPSBiZTMyX3RvX2NwdXAocCk7CiAJaWYgKHVubGlrZWx5KGhkci0+bm9wcyA8IDEpKQogCQlyZXR1cm4gbmZzNF9zdGF0X3RvX2Vycm5vKGhkci0+c3RhdHVzKTsKIAlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX29wX2hkcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBlbnVtIG5mc19vcG51bTQgZXhwZWN0ZWQpCkBAIC0yNTM2LDE4ICsyNDc4LDIzIEBACiAJdWludDMyX3Qgb3BudW07CiAJaW50MzJfdCBuZnNlcnI7CiAKLQlSRUFEX0JVRig4KTsKLQlSRUFEMzIob3BudW0pOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDgpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCW9wbnVtID0gYmUzMl90b19jcHVwKHArKyk7CiAJaWYgKG9wbnVtICE9IGV4cGVjdGVkKSB7CiAJCWRwcmludGsoIm5mczogU2VydmVyIHJldHVybmVkIG9wZXJhdGlvbiIKIAkJCSIgJWQgYnV0IHdlIGlzc3VlZCBhIHJlcXVlc3QgZm9yICVkXG4iLAogCQkJCW9wbnVtLCBleHBlY3RlZCk7CiAJCXJldHVybiAtRUlPOwogCX0KLQlSRUFEMzIobmZzZXJyKTsKKwluZnNlcnIgPSBiZTMyX3RvX2NwdXAocCk7CiAJaWYgKG5mc2VyciAhPSBORlNfT0spCiAJCXJldHVybiBuZnM0X3N0YXRfdG9fZXJybm8obmZzZXJyKTsKIAlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIC8qIER1bW15IHJvdXRpbmUgKi8KQEAgLTI1NTcsOCArMjUwNCwxMSBAQAogCXVuc2lnbmVkIGludCBzdHJsZW47CiAJY2hhciAqc3RyOwogCi0JUkVBRF9CVUYoMTIpOwotCXJldHVybiBkZWNvZGVfb3BhcXVlX2lubGluZSh4ZHIsICZzdHJsZW4sICZzdHIpOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDEyKTsKKwlpZiAobGlrZWx5KHApKQorCQlyZXR1cm4gZGVjb2RlX29wYXF1ZV9pbmxpbmUoeGRyLCAmc3RybGVuLCAmc3RyKTsKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfYml0bWFwKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXApCkBAIC0yNTY2LDI3ICsyNTE2LDM5IEBACiAJdWludDMyX3QgYm1sZW47CiAJX19iZTMyICpwOwogCi0JUkVBRF9CVUYoNCk7Ci0JUkVBRDMyKGJtbGVuKTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlibWxlbiA9IGJlMzJfdG9fY3B1cChwKTsKIAogCWJpdG1hcFswXSA9IGJpdG1hcFsxXSA9IDA7Ci0JUkVBRF9CVUYoKGJtbGVuIDw8IDIpKTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCAoYm1sZW4gPDwgMikpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OwogCWlmIChibWxlbiA+IDApIHsKLQkJUkVBRDMyKGJpdG1hcFswXSk7CisJCWJpdG1hcFswXSA9IGJlMzJfdG9fY3B1cChwKyspOwogCQlpZiAoYm1sZW4gPiAxKQotCQkJUkVBRDMyKGJpdG1hcFsxXSk7CisJCQliaXRtYXBbMV0gPSBiZTMyX3RvX2NwdXAocCk7CiAJfQogCXJldHVybiAwOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZGVjb2RlX2F0dHJfbGVuZ3RoKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICphdHRybGVuLCBfX2JlMzIgKipzYXZlcCkKIHsKIAlfX2JlMzIgKnA7CiAKLQlSRUFEX0JVRig0KTsKLQlSRUFEMzIoKmF0dHJsZW4pOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCSphdHRybGVuID0gYmUzMl90b19jcHVwKHApOwogCSpzYXZlcCA9IHhkci0+cDsKIAlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfc3VwcG9ydGVkKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQzMl90ICpiaXRtYXNrKQpAQCAtMjYwOSw4ICsyNTcxLDEwIEBACiAJaWYgKHVubGlrZWx5KGJpdG1hcFswXSAmIChGQVRUUjRfV09SRDBfVFlQRSAtIDFVKSkpCiAJCXJldHVybiAtRUlPOwogCWlmIChsaWtlbHkoYml0bWFwWzBdICYgRkFUVFI0X1dPUkQwX1RZUEUpKSB7Ci0JCVJFQURfQlVGKDQpOwotCQlSRUFEMzIoKnR5cGUpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQkqdHlwZSA9IGJlMzJfdG9fY3B1cChwKTsKIAkJaWYgKCp0eXBlIDwgTkY0UkVHIHx8ICp0eXBlID4gTkY0TkFNRURBVFRSKSB7CiAJCQlkcHJpbnRrKCIlczogYmFkIHR5cGUgJWRcbiIsIF9fZnVuY19fLCAqdHlwZSk7CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTI2MjAsNiArMjU4NCw5IEBACiAJfQogCWRwcmludGsoIiVzOiB0eXBlPTAlb1xuIiwgX19mdW5jX18sIG5mc190eXBlMmZtdFsqdHlwZV0pOwogCXJldHVybiByZXQ7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX2NoYW5nZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50NjRfdCAqY2hhbmdlKQpAQCAtMjYzMSwxNCArMjU5OCwxOSBAQAogCWlmICh1bmxpa2VseShiaXRtYXBbMF0gJiAoRkFUVFI0X1dPUkQwX0NIQU5HRSAtIDFVKSkpCiAJCXJldHVybiAtRUlPOwogCWlmIChsaWtlbHkoYml0bWFwWzBdICYgRkFUVFI0X1dPUkQwX0NIQU5HRSkpIHsKLQkJUkVBRF9CVUYoOCk7Ci0JCVJFQUQ2NCgqY2hhbmdlKTsKKwkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgOCk7CisJCWlmICh1bmxpa2VseSghcCkpCisJCQlnb3RvIG91dF9vdmVyZmxvdzsKKwkJeGRyX2RlY29kZV9oeXBlcihwLCBjaGFuZ2UpOwogCQliaXRtYXBbMF0gJj0gfkZBVFRSNF9XT1JEMF9DSEFOR0U7CiAJCXJldCA9IE5GU19BVFRSX0ZBVFRSX0NIQU5HRTsKIAl9CiAJZHByaW50aygiJXM6IGNoYW5nZSBhdHRyaWJ1dGU9JUx1XG4iLCBfX2Z1bmNfXywKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKmNoYW5nZSk7CiAJcmV0dXJuIHJldDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfc2l6ZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50NjRfdCAqc2l6ZSkKQEAgLTI2NTAsMTMgKzI2MjIsMTggQEAKIAlpZiAodW5saWtlbHkoYml0bWFwWzBdICYgKEZBVFRSNF9XT1JEMF9TSVpFIC0gMVUpKSkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKGxpa2VseShiaXRtYXBbMF0gJiBGQVRUUjRfV09SRDBfU0laRSkpIHsKLQkJUkVBRF9CVUYoOCk7Ci0JCVJFQUQ2NCgqc2l6ZSk7CisJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDgpOworCQlpZiAodW5saWtlbHkoIXApKQorCQkJZ290byBvdXRfb3ZlcmZsb3c7CisJCXhkcl9kZWNvZGVfaHlwZXIocCwgc2l6ZSk7CiAJCWJpdG1hcFswXSAmPSB+RkFUVFI0X1dPUkQwX1NJWkU7CiAJCXJldCA9IE5GU19BVFRSX0ZBVFRSX1NJWkU7CiAJfQogCWRwcmludGsoIiVzOiBmaWxlIHNpemU9JUx1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykqc2l6ZSk7CiAJcmV0dXJuIHJldDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfbGlua19zdXBwb3J0KHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQzMl90ICpyZXMpCkBAIC0yNjY3LDEyICsyNjQ0LDE3IEBACiAJaWYgKHVubGlrZWx5KGJpdG1hcFswXSAmIChGQVRUUjRfV09SRDBfTElOS19TVVBQT1JUIC0gMVUpKSkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKGxpa2VseShiaXRtYXBbMF0gJiBGQVRUUjRfV09SRDBfTElOS19TVVBQT1JUKSkgewotCQlSRUFEX0JVRig0KTsKLQkJUkVBRDMyKCpyZXMpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQkqcmVzID0gYmUzMl90b19jcHVwKHApOwogCQliaXRtYXBbMF0gJj0gfkZBVFRSNF9XT1JEMF9MSU5LX1NVUFBPUlQ7CiAJfQogCWRwcmludGsoIiVzOiBsaW5rIHN1cHBvcnQ9JXNcbiIsIF9fZnVuY19fLCAqcmVzID09IDAgPyAiZmFsc2UiIDogInRydWUiKTsKIAlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfc3ltbGlua19zdXBwb3J0KHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQzMl90ICpyZXMpCkBAIC0yNjgzLDEyICsyNjY1LDE3IEBACiAJaWYgKHVubGlrZWx5KGJpdG1hcFswXSAmIChGQVRUUjRfV09SRDBfU1lNTElOS19TVVBQT1JUIC0gMVUpKSkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKGxpa2VseShiaXRtYXBbMF0gJiBGQVRUUjRfV09SRDBfU1lNTElOS19TVVBQT1JUKSkgewotCQlSRUFEX0JVRig0KTsKLQkJUkVBRDMyKCpyZXMpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQkqcmVzID0gYmUzMl90b19jcHVwKHApOwogCQliaXRtYXBbMF0gJj0gfkZBVFRSNF9XT1JEMF9TWU1MSU5LX1NVUFBPUlQ7CiAJfQogCWRwcmludGsoIiVzOiBzeW1saW5rIHN1cHBvcnQ9JXNcbiIsIF9fZnVuY19fLCAqcmVzID09IDAgPyAiZmFsc2UiIDogInRydWUiKTsKIAlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfZnNpZChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCBzdHJ1Y3QgbmZzX2ZzaWQgKmZzaWQpCkBAIC0yNzAxLDkgKzI2ODgsMTEgQEAKIAlpZiAodW5saWtlbHkoYml0bWFwWzBdICYgKEZBVFRSNF9XT1JEMF9GU0lEIC0gMVUpKSkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKGxpa2VseShiaXRtYXBbMF0gJiBGQVRUUjRfV09SRDBfRlNJRCkpIHsKLQkJUkVBRF9CVUYoMTYpOwotCQlSRUFENjQoZnNpZC0+bWFqb3IpOwotCQlSRUFENjQoZnNpZC0+bWlub3IpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCAxNik7CisJCWlmICh1bmxpa2VseSghcCkpCisJCQlnb3RvIG91dF9vdmVyZmxvdzsKKwkJcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJmZzaWQtPm1ham9yKTsKKwkJeGRyX2RlY29kZV9oeXBlcihwLCAmZnNpZC0+bWlub3IpOwogCQliaXRtYXBbMF0gJj0gfkZBVFRSNF9XT1JEMF9GU0lEOwogCQlyZXQgPSBORlNfQVRUUl9GQVRUUl9GU0lEOwogCX0KQEAgLTI3MTEsNiArMjcwMCw5IEBACiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWZzaWQtPm1ham9yLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylmc2lkLT5taW5vcik7CiAJcmV0dXJuIHJldDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfbGVhc2VfdGltZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50MzJfdCAqcmVzKQpAQCAtMjcyMSwxMiArMjcxMywxNyBAQAogCWlmICh1bmxpa2VseShiaXRtYXBbMF0gJiAoRkFUVFI0X1dPUkQwX0xFQVNFX1RJTUUgLSAxVSkpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobGlrZWx5KGJpdG1hcFswXSAmIEZBVFRSNF9XT1JEMF9MRUFTRV9USU1FKSkgewotCQlSRUFEX0JVRig0KTsKLQkJUkVBRDMyKCpyZXMpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQkqcmVzID0gYmUzMl90b19jcHVwKHApOwogCQliaXRtYXBbMF0gJj0gfkZBVFRSNF9XT1JEMF9MRUFTRV9USU1FOwogCX0KIAlkcHJpbnRrKCIlczogZmlsZSBzaXplPSV1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGludCkqcmVzKTsKIAlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfYWNsc3VwcG9ydChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50MzJfdCAqcmVzKQpAQCAtMjczNywxMiArMjczNCwxNyBAQAogCWlmICh1bmxpa2VseShiaXRtYXBbMF0gJiAoRkFUVFI0X1dPUkQwX0FDTFNVUFBPUlQgLSAxVSkpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobGlrZWx5KGJpdG1hcFswXSAmIEZBVFRSNF9XT1JEMF9BQ0xTVVBQT1JUKSkgewotCQlSRUFEX0JVRig0KTsKLQkJUkVBRDMyKCpyZXMpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQkqcmVzID0gYmUzMl90b19jcHVwKHApOwogCQliaXRtYXBbMF0gJj0gfkZBVFRSNF9XT1JEMF9BQ0xTVVBQT1JUOwogCX0KIAlkcHJpbnRrKCIlczogQUNMcyBzdXBwb3J0ZWQ9JXVcbiIsIF9fZnVuY19fLCAodW5zaWduZWQgaW50KSpyZXMpOwogCXJldHVybiAwOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfYXR0cl9maWxlaWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdWludDY0X3QgKmZpbGVpZCkKQEAgLTI3NTQsMTMgKzI3NTYsMTggQEAKIAlpZiAodW5saWtlbHkoYml0bWFwWzBdICYgKEZBVFRSNF9XT1JEMF9GSUxFSUQgLSAxVSkpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobGlrZWx5KGJpdG1hcFswXSAmIEZBVFRSNF9XT1JEMF9GSUxFSUQpKSB7Ci0JCVJFQURfQlVGKDgpOwotCQlSRUFENjQoKmZpbGVpZCk7CisJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDgpOworCQlpZiAodW5saWtlbHkoIXApKQorCQkJZ290byBvdXRfb3ZlcmZsb3c7CisJCXhkcl9kZWNvZGVfaHlwZXIocCwgZmlsZWlkKTsKIAkJYml0bWFwWzBdICY9IH5GQVRUUjRfV09SRDBfRklMRUlEOwogCQlyZXQgPSBORlNfQVRUUl9GQVRUUl9GSUxFSUQ7CiAJfQogCWRwcmludGsoIiVzOiBmaWxlaWQ9JUx1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykqZmlsZWlkKTsKIAlyZXR1cm4gcmV0Oworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfYXR0cl9tb3VudGVkX29uX2ZpbGVpZChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50NjRfdCAqZmlsZWlkKQpAQCAtMjc3MiwxMyArMjc3OSwxOCBAQAogCWlmICh1bmxpa2VseShiaXRtYXBbMV0gJiAoRkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlEIC0gMVUpKSkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKGxpa2VseShiaXRtYXBbMV0gJiBGQVRUUjRfV09SRDFfTU9VTlRFRF9PTl9GSUxFSUQpKSB7Ci0JCVJFQURfQlVGKDgpOwotCQlSRUFENjQoKmZpbGVpZCk7CisJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDgpOworCQlpZiAodW5saWtlbHkoIXApKQorCQkJZ290byBvdXRfb3ZlcmZsb3c7CisJCXhkcl9kZWNvZGVfaHlwZXIocCwgZmlsZWlkKTsKIAkJYml0bWFwWzFdICY9IH5GQVRUUjRfV09SRDFfTU9VTlRFRF9PTl9GSUxFSUQ7CiAJCXJldCA9IE5GU19BVFRSX0ZBVFRSX0ZJTEVJRDsKIAl9CiAJZHByaW50aygiJXM6IGZpbGVpZD0lTHVcbiIsIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKSpmaWxlaWQpOwogCXJldHVybiByZXQ7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX2ZpbGVzX2F2YWlsKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQ2NF90ICpyZXMpCkBAIC0yNzkwLDEyICsyODAyLDE3IEBACiAJaWYgKHVubGlrZWx5KGJpdG1hcFswXSAmIChGQVRUUjRfV09SRDBfRklMRVNfQVZBSUwgLSAxVSkpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobGlrZWx5KGJpdG1hcFswXSAmIEZBVFRSNF9XT1JEMF9GSUxFU19BVkFJTCkpIHsKLQkJUkVBRF9CVUYoOCk7Ci0JCVJFQUQ2NCgqcmVzKTsKKwkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgOCk7CisJCWlmICh1bmxpa2VseSghcCkpCisJCQlnb3RvIG91dF9vdmVyZmxvdzsKKwkJeGRyX2RlY29kZV9oeXBlcihwLCByZXMpOwogCQliaXRtYXBbMF0gJj0gfkZBVFRSNF9XT1JEMF9GSUxFU19BVkFJTDsKIAl9CiAJZHByaW50aygiJXM6IGZpbGVzIGF2YWlsPSVMdVxuIiwgX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpKnJlcyk7CiAJcmV0dXJuIHN0YXR1czsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfZmlsZXNfZnJlZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50NjRfdCAqcmVzKQpAQCAtMjgwNywxMiArMjgyNCwxNyBAQAogCWlmICh1bmxpa2VseShiaXRtYXBbMF0gJiAoRkFUVFI0X1dPUkQwX0ZJTEVTX0ZSRUUgLSAxVSkpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobGlrZWx5KGJpdG1hcFswXSAmIEZBVFRSNF9XT1JEMF9GSUxFU19GUkVFKSkgewotCQlSRUFEX0JVRig4KTsKLQkJUkVBRDY0KCpyZXMpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA4KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQl4ZHJfZGVjb2RlX2h5cGVyKHAsIHJlcyk7CiAJCWJpdG1hcFswXSAmPSB+RkFUVFI0X1dPUkQwX0ZJTEVTX0ZSRUU7CiAJfQogCWRwcmludGsoIiVzOiBmaWxlcyBmcmVlPSVMdVxuIiwgX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpKnJlcyk7CiAJcmV0dXJuIHN0YXR1czsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfZmlsZXNfdG90YWwoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdWludDY0X3QgKnJlcykKQEAgLTI4MjQsMTIgKzI4NDYsMTcgQEAKIAlpZiAodW5saWtlbHkoYml0bWFwWzBdICYgKEZBVFRSNF9XT1JEMF9GSUxFU19UT1RBTCAtIDFVKSkpCiAJCXJldHVybiAtRUlPOwogCWlmIChsaWtlbHkoYml0bWFwWzBdICYgRkFUVFI0X1dPUkQwX0ZJTEVTX1RPVEFMKSkgewotCQlSRUFEX0JVRig4KTsKLQkJUkVBRDY0KCpyZXMpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA4KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQl4ZHJfZGVjb2RlX2h5cGVyKHAsIHJlcyk7CiAJCWJpdG1hcFswXSAmPSB+RkFUVFI0X1dPUkQwX0ZJTEVTX1RPVEFMOwogCX0KIAlkcHJpbnRrKCIlczogZmlsZXMgdG90YWw9JUx1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykqcmVzKTsKIAlyZXR1cm4gc3RhdHVzOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfcGF0aG5hbWUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mczRfcGF0aG5hbWUgKnBhdGgpCkBAIC0yODM4LDggKzI4NjUsMTAgQEAKIAlfX2JlMzIgKnA7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlSRUFEX0JVRig0KTsKLQlSRUFEMzIobik7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJbiA9IGJlMzJfdG9fY3B1cChwKTsKIAlpZiAobiA9PSAwKQogCQlnb3RvIHJvb3RfcGF0aDsKIAlkcHJpbnRrKCJwYXRoICIpOwpAQCAtMjg3Myw2ICsyOTAyLDkgQEAKIAlkcHJpbnRrKCIgc3RhdHVzICVkIiwgc3RhdHVzKTsKIAlzdGF0dXMgPSAtRUlPOwogCWdvdG8gb3V0Oworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfYXR0cl9mc19sb2NhdGlvbnMoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgc3RydWN0IG5mczRfZnNfbG9jYXRpb25zICpyZXMpCkBAIC0yODkwLDggKzI5MjIsMTAgQEAKIAlzdGF0dXMgPSBkZWNvZGVfcGF0aG5hbWUoeGRyLCAmcmVzLT5mc19wYXRoKTsKIAlpZiAodW5saWtlbHkoc3RhdHVzICE9IDApKQogCQlnb3RvIG91dDsKLQlSRUFEX0JVRig0KTsKLQlSRUFEMzIobik7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJbiA9IGJlMzJfdG9fY3B1cChwKTsKIAlpZiAobiA8PSAwKQogCQlnb3RvIG91dF9laW87CiAJcmVzLT5ubG9jYXRpb25zID0gMDsKQEAgLTI4OTksOCArMjkzMywxMCBAQAogCQl1MzIgbTsKIAkJc3RydWN0IG5mczRfZnNfbG9jYXRpb24gKmxvYyA9ICZyZXMtPmxvY2F0aW9uc1tyZXMtPm5sb2NhdGlvbnNdOwogCi0JCVJFQURfQlVGKDQpOwotCQlSRUFEMzIobSk7CisJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCQlpZiAodW5saWtlbHkoIXApKQorCQkJZ290byBvdXRfb3ZlcmZsb3c7CisJCW0gPSBiZTMyX3RvX2NwdXAocCk7CiAKIAkJbG9jLT5uc2VydmVycyA9IDA7CiAJCWRwcmludGsoIiVzOiBzZXJ2ZXJzICIsIF9fZnVuY19fKTsKQEAgLTI5MzksNiArMjk3NSw4IEBACiBvdXQ6CiAJZHByaW50aygiJXM6IGZzX2xvY2F0aW9ucyBkb25lLCBlcnJvciA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKIG91dF9laW86CiAJc3RhdHVzID0gLUVJTzsKIAlnb3RvIG91dDsKQEAgLTI5NTMsMTIgKzI5OTEsMTcgQEAKIAlpZiAodW5saWtlbHkoYml0bWFwWzBdICYgKEZBVFRSNF9XT1JEMF9NQVhGSUxFU0laRSAtIDFVKSkpCiAJCXJldHVybiAtRUlPOwogCWlmIChsaWtlbHkoYml0bWFwWzBdICYgRkFUVFI0X1dPUkQwX01BWEZJTEVTSVpFKSkgewotCQlSRUFEX0JVRig4KTsKLQkJUkVBRDY0KCpyZXMpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA4KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQl4ZHJfZGVjb2RlX2h5cGVyKHAsIHJlcyk7CiAJCWJpdG1hcFswXSAmPSB+RkFUVFI0X1dPUkQwX01BWEZJTEVTSVpFOwogCX0KIAlkcHJpbnRrKCIlczogbWF4ZmlsZXNpemU9JUx1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykqcmVzKTsKIAlyZXR1cm4gc3RhdHVzOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfYXR0cl9tYXhsaW5rKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQzMl90ICptYXhsaW5rKQpAQCAtMjk3MCwxMiArMzAxMywxNyBAQAogCWlmICh1bmxpa2VseShiaXRtYXBbMF0gJiAoRkFUVFI0X1dPUkQwX01BWExJTksgLSAxVSkpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobGlrZWx5KGJpdG1hcFswXSAmIEZBVFRSNF9XT1JEMF9NQVhMSU5LKSkgewotCQlSRUFEX0JVRig0KTsKLQkJUkVBRDMyKCptYXhsaW5rKTsKKwkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJCWlmICh1bmxpa2VseSghcCkpCisJCQlnb3RvIG91dF9vdmVyZmxvdzsKKwkJKm1heGxpbmsgPSBiZTMyX3RvX2NwdXAocCk7CiAJCWJpdG1hcFswXSAmPSB+RkFUVFI0X1dPUkQwX01BWExJTks7CiAJfQogCWRwcmludGsoIiVzOiBtYXhsaW5rPSV1XG4iLCBfX2Z1bmNfXywgKm1heGxpbmspOwogCXJldHVybiBzdGF0dXM7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX21heG5hbWUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdWludDMyX3QgKm1heG5hbWUpCkBAIC0yOTg3LDEyICszMDM1LDE3IEBACiAJaWYgKHVubGlrZWx5KGJpdG1hcFswXSAmIChGQVRUUjRfV09SRDBfTUFYTkFNRSAtIDFVKSkpCiAJCXJldHVybiAtRUlPOwogCWlmIChsaWtlbHkoYml0bWFwWzBdICYgRkFUVFI0X1dPUkQwX01BWE5BTUUpKSB7Ci0JCVJFQURfQlVGKDQpOwotCQlSRUFEMzIoKm1heG5hbWUpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQkqbWF4bmFtZSA9IGJlMzJfdG9fY3B1cChwKTsKIAkJYml0bWFwWzBdICY9IH5GQVRUUjRfV09SRDBfTUFYTkFNRTsKIAl9CiAJZHByaW50aygiJXM6IG1heG5hbWU9JXVcbiIsIF9fZnVuY19fLCAqbWF4bmFtZSk7CiAJcmV0dXJuIHN0YXR1czsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfbWF4cmVhZChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50MzJfdCAqcmVzKQpAQCAtMzAwNSw4ICszMDU4LDEwIEBACiAJCXJldHVybiAtRUlPOwogCWlmIChsaWtlbHkoYml0bWFwWzBdICYgRkFUVFI0X1dPUkQwX01BWFJFQUQpKSB7CiAJCXVpbnQ2NF90IG1heHJlYWQ7Ci0JCVJFQURfQlVGKDgpOwotCQlSRUFENjQobWF4cmVhZCk7CisJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDgpOworCQlpZiAodW5saWtlbHkoIXApKQorCQkJZ290byBvdXRfb3ZlcmZsb3c7CisJCXhkcl9kZWNvZGVfaHlwZXIocCwgJm1heHJlYWQpOwogCQlpZiAobWF4cmVhZCA+IDB4N0ZGRkZGRkYpCiAJCQltYXhyZWFkID0gMHg3RkZGRkZGRjsKIAkJKnJlcyA9ICh1aW50MzJfdCltYXhyZWFkOwpAQCAtMzAxNCw2ICszMDY5LDkgQEAKIAl9CiAJZHByaW50aygiJXM6IG1heHJlYWQ9JWx1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpKnJlcyk7CiAJcmV0dXJuIHN0YXR1czsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfbWF4d3JpdGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdWludDMyX3QgKnJlcykKQEAgLTMwMjYsOCArMzA4NCwxMCBAQAogCQlyZXR1cm4gLUVJTzsKIAlpZiAobGlrZWx5KGJpdG1hcFswXSAmIEZBVFRSNF9XT1JEMF9NQVhXUklURSkpIHsKIAkJdWludDY0X3QgbWF4d3JpdGU7Ci0JCVJFQURfQlVGKDgpOwotCQlSRUFENjQobWF4d3JpdGUpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA4KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQl4ZHJfZGVjb2RlX2h5cGVyKHAsICZtYXh3cml0ZSk7CiAJCWlmIChtYXh3cml0ZSA+IDB4N0ZGRkZGRkYpCiAJCQltYXh3cml0ZSA9IDB4N0ZGRkZGRkY7CiAJCSpyZXMgPSAodWludDMyX3QpbWF4d3JpdGU7CkBAIC0zMDM1LDYgKzMwOTUsOSBAQAogCX0KIAlkcHJpbnRrKCIlczogbWF4d3JpdGU9JWx1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpKnJlcyk7CiAJcmV0dXJuIHN0YXR1czsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfbW9kZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1bW9kZV90ICptb2RlKQpAQCAtMzA0NywxNCArMzExMCwxOSBAQAogCWlmICh1bmxpa2VseShiaXRtYXBbMV0gJiAoRkFUVFI0X1dPUkQxX01PREUgLSAxVSkpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobGlrZWx5KGJpdG1hcFsxXSAmIEZBVFRSNF9XT1JEMV9NT0RFKSkgewotCQlSRUFEX0JVRig0KTsKLQkJUkVBRDMyKHRtcCk7CisJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCQlpZiAodW5saWtlbHkoIXApKQorCQkJZ290byBvdXRfb3ZlcmZsb3c7CisJCXRtcCA9IGJlMzJfdG9fY3B1cChwKTsKIAkJKm1vZGUgPSB0bXAgJiB+U19JRk1UOwogCQliaXRtYXBbMV0gJj0gfkZBVFRSNF9XT1JEMV9NT0RFOwogCQlyZXQgPSBORlNfQVRUUl9GQVRUUl9NT0RFOwogCX0KIAlkcHJpbnRrKCIlczogZmlsZSBtb2RlPTAlb1xuIiwgX19mdW5jX18sICh1bnNpZ25lZCBpbnQpKm1vZGUpOwogCXJldHVybiByZXQ7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX25saW5rKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQzMl90ICpubGluaykKQEAgLTMwNjYsMTYgKzMxMzQsMjIgQEAKIAlpZiAodW5saWtlbHkoYml0bWFwWzFdICYgKEZBVFRSNF9XT1JEMV9OVU1MSU5LUyAtIDFVKSkpCiAJCXJldHVybiAtRUlPOwogCWlmIChsaWtlbHkoYml0bWFwWzFdICYgRkFUVFI0X1dPUkQxX05VTUxJTktTKSkgewotCQlSRUFEX0JVRig0KTsKLQkJUkVBRDMyKCpubGluayk7CisJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCQlpZiAodW5saWtlbHkoIXApKQorCQkJZ290byBvdXRfb3ZlcmZsb3c7CisJCSpubGluayA9IGJlMzJfdG9fY3B1cChwKTsKIAkJYml0bWFwWzFdICY9IH5GQVRUUjRfV09SRDFfTlVNTElOS1M7CiAJCXJldCA9IE5GU19BVFRSX0ZBVFRSX05MSU5LOwogCX0KIAlkcHJpbnRrKCIlczogbmxpbms9JXVcbiIsIF9fZnVuY19fLCAodW5zaWduZWQgaW50KSpubGluayk7CiAJcmV0dXJuIHJldDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKLXN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfb3duZXIoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgc3RydWN0IG5mc19jbGllbnQgKmNscCwgdWludDMyX3QgKnVpZCkKK3N0YXRpYyBpbnQgZGVjb2RlX2F0dHJfb3duZXIoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwKKwkJc3RydWN0IG5mc19jbGllbnQgKmNscCwgdWludDMyX3QgKnVpZCwgaW50IG1heV9zbGVlcCkKIHsKIAl1aW50MzJfdCBsZW47CiAJX19iZTMyICpwOwpAQCAtMzA4NSwxMCArMzE1OSwxNiBAQAogCWlmICh1bmxpa2VseShiaXRtYXBbMV0gJiAoRkFUVFI0X1dPUkQxX09XTkVSIC0gMVUpKSkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKGxpa2VseShiaXRtYXBbMV0gJiBGQVRUUjRfV09SRDFfT1dORVIpKSB7Ci0JCVJFQURfQlVGKDQpOwotCQlSRUFEMzIobGVuKTsKLQkJUkVBRF9CVUYobGVuKTsKLQkJaWYgKGxlbiA8IFhEUl9NQVhfTkVUT0JKKSB7CisJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCQlpZiAodW5saWtlbHkoIXApKQorCQkJZ290byBvdXRfb3ZlcmZsb3c7CisJCWxlbiA9IGJlMzJfdG9fY3B1cChwKTsKKwkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgbGVuKTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQlpZiAoIW1heV9zbGVlcCkgeworCQkJLyogZG8gbm90aGluZyAqLworCQl9IGVsc2UgaWYgKGxlbiA8IFhEUl9NQVhfTkVUT0JKKSB7CiAJCQlpZiAobmZzX21hcF9uYW1lX3RvX3VpZChjbHAsIChjaGFyICopcCwgbGVuLCB1aWQpID09IDApCiAJCQkJcmV0ID0gTkZTX0FUVFJfRkFUVFJfT1dORVI7CiAJCQllbHNlCkBAIC0zMTAxLDkgKzMxODEsMTMgQEAKIAl9CiAJZHByaW50aygiJXM6IHVpZD0lZFxuIiwgX19mdW5jX18sIChpbnQpKnVpZCk7CiAJcmV0dXJuIHJldDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKLXN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfZ3JvdXAoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgc3RydWN0IG5mc19jbGllbnQgKmNscCwgdWludDMyX3QgKmdpZCkKK3N0YXRpYyBpbnQgZGVjb2RlX2F0dHJfZ3JvdXAoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwKKwkJc3RydWN0IG5mc19jbGllbnQgKmNscCwgdWludDMyX3QgKmdpZCwgaW50IG1heV9zbGVlcCkKIHsKIAl1aW50MzJfdCBsZW47CiAJX19iZTMyICpwOwpAQCAtMzExMywxMCArMzE5NywxNiBAQAogCWlmICh1bmxpa2VseShiaXRtYXBbMV0gJiAoRkFUVFI0X1dPUkQxX09XTkVSX0dST1VQIC0gMVUpKSkKIAkJcmV0dXJuIC1FSU87CiAJaWYgKGxpa2VseShiaXRtYXBbMV0gJiBGQVRUUjRfV09SRDFfT1dORVJfR1JPVVApKSB7Ci0JCVJFQURfQlVGKDQpOwotCQlSRUFEMzIobGVuKTsKLQkJUkVBRF9CVUYobGVuKTsKLQkJaWYgKGxlbiA8IFhEUl9NQVhfTkVUT0JKKSB7CisJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCQlpZiAodW5saWtlbHkoIXApKQorCQkJZ290byBvdXRfb3ZlcmZsb3c7CisJCWxlbiA9IGJlMzJfdG9fY3B1cChwKTsKKwkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgbGVuKTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQlpZiAoIW1heV9zbGVlcCkgeworCQkJLyogZG8gbm90aGluZyAqLworCQl9IGVsc2UgaWYgKGxlbiA8IFhEUl9NQVhfTkVUT0JKKSB7CiAJCQlpZiAobmZzX21hcF9ncm91cF90b19naWQoY2xwLCAoY2hhciAqKXAsIGxlbiwgZ2lkKSA9PSAwKQogCQkJCXJldCA9IE5GU19BVFRSX0ZBVFRSX0dST1VQOwogCQkJZWxzZQpAQCAtMzEyOSw2ICszMjE5LDkgQEAKIAl9CiAJZHByaW50aygiJXM6IGdpZD0lZFxuIiwgX19mdW5jX18sIChpbnQpKmdpZCk7CiAJcmV0dXJuIHJldDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfcmRldihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCBkZXZfdCAqcmRldikKQEAgLTMxNDMsOSArMzIzNiwxMSBAQAogCWlmIChsaWtlbHkoYml0bWFwWzFdICYgRkFUVFI0X1dPUkQxX1JBV0RFVikpIHsKIAkJZGV2X3QgdG1wOwogCi0JCVJFQURfQlVGKDgpOwotCQlSRUFEMzIobWFqb3IpOwotCQlSRUFEMzIobWlub3IpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA4KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQltYWpvciA9IGJlMzJfdG9fY3B1cChwKyspOworCQltaW5vciA9IGJlMzJfdG9fY3B1cChwKTsKIAkJdG1wID0gTUtERVYobWFqb3IsIG1pbm9yKTsKIAkJaWYgKE1BSk9SKHRtcCkgPT0gbWFqb3IgJiYgTUlOT1IodG1wKSA9PSBtaW5vcikKIAkJCSpyZGV2ID0gdG1wOwpAQCAtMzE1NCw2ICszMjQ5LDkgQEAKIAl9CiAJZHByaW50aygiJXM6IHJkZXY9KDB4JXg6MHgleClcbiIsIF9fZnVuY19fLCBtYWpvciwgbWlub3IpOwogCXJldHVybiByZXQ7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX3NwYWNlX2F2YWlsKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQ2NF90ICpyZXMpCkBAIC0zMTY1LDEyICszMjYzLDE3IEBACiAJaWYgKHVubGlrZWx5KGJpdG1hcFsxXSAmIChGQVRUUjRfV09SRDFfU1BBQ0VfQVZBSUwgLSAxVSkpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobGlrZWx5KGJpdG1hcFsxXSAmIEZBVFRSNF9XT1JEMV9TUEFDRV9BVkFJTCkpIHsKLQkJUkVBRF9CVUYoOCk7Ci0JCVJFQUQ2NCgqcmVzKTsKKwkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgOCk7CisJCWlmICh1bmxpa2VseSghcCkpCisJCQlnb3RvIG91dF9vdmVyZmxvdzsKKwkJeGRyX2RlY29kZV9oeXBlcihwLCByZXMpOwogCQliaXRtYXBbMV0gJj0gfkZBVFRSNF9XT1JEMV9TUEFDRV9BVkFJTDsKIAl9CiAJZHByaW50aygiJXM6IHNwYWNlIGF2YWlsPSVMdVxuIiwgX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpKnJlcyk7CiAJcmV0dXJuIHN0YXR1czsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfc3BhY2VfZnJlZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50NjRfdCAqcmVzKQpAQCAtMzE4MiwxMiArMzI4NSwxNyBAQAogCWlmICh1bmxpa2VseShiaXRtYXBbMV0gJiAoRkFUVFI0X1dPUkQxX1NQQUNFX0ZSRUUgLSAxVSkpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobGlrZWx5KGJpdG1hcFsxXSAmIEZBVFRSNF9XT1JEMV9TUEFDRV9GUkVFKSkgewotCQlSRUFEX0JVRig4KTsKLQkJUkVBRDY0KCpyZXMpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA4KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQl4ZHJfZGVjb2RlX2h5cGVyKHAsIHJlcyk7CiAJCWJpdG1hcFsxXSAmPSB+RkFUVFI0X1dPUkQxX1NQQUNFX0ZSRUU7CiAJfQogCWRwcmludGsoIiVzOiBzcGFjZSBmcmVlPSVMdVxuIiwgX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpKnJlcyk7CiAJcmV0dXJuIHN0YXR1czsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfc3BhY2VfdG90YWwoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdWludDY0X3QgKnJlcykKQEAgLTMxOTksMTIgKzMzMDcsMTcgQEAKIAlpZiAodW5saWtlbHkoYml0bWFwWzFdICYgKEZBVFRSNF9XT1JEMV9TUEFDRV9UT1RBTCAtIDFVKSkpCiAJCXJldHVybiAtRUlPOwogCWlmIChsaWtlbHkoYml0bWFwWzFdICYgRkFUVFI0X1dPUkQxX1NQQUNFX1RPVEFMKSkgewotCQlSRUFEX0JVRig4KTsKLQkJUkVBRDY0KCpyZXMpOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA4KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQl4ZHJfZGVjb2RlX2h5cGVyKHAsIHJlcyk7CiAJCWJpdG1hcFsxXSAmPSB+RkFUVFI0X1dPUkQxX1NQQUNFX1RPVEFMOwogCX0KIAlkcHJpbnRrKCIlczogc3BhY2UgdG90YWw9JUx1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykqcmVzKTsKIAlyZXR1cm4gc3RhdHVzOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfYXR0cl9zcGFjZV91c2VkKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQ2NF90ICp1c2VkKQpAQCAtMzIxNiwxNCArMzMyOSwxOSBAQAogCWlmICh1bmxpa2VseShiaXRtYXBbMV0gJiAoRkFUVFI0X1dPUkQxX1NQQUNFX1VTRUQgLSAxVSkpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobGlrZWx5KGJpdG1hcFsxXSAmIEZBVFRSNF9XT1JEMV9TUEFDRV9VU0VEKSkgewotCQlSRUFEX0JVRig4KTsKLQkJUkVBRDY0KCp1c2VkKTsKKwkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgOCk7CisJCWlmICh1bmxpa2VseSghcCkpCisJCQlnb3RvIG91dF9vdmVyZmxvdzsKKwkJeGRyX2RlY29kZV9oeXBlcihwLCB1c2VkKTsKIAkJYml0bWFwWzFdICY9IH5GQVRUUjRfV09SRDFfU1BBQ0VfVVNFRDsKIAkJcmV0ID0gTkZTX0FUVFJfRkFUVFJfU1BBQ0VfVVNFRDsKIAl9CiAJZHByaW50aygiJXM6IHNwYWNlIHVzZWQ9JUx1XG4iLCBfX2Z1bmNfXywKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKnVzZWQpOwogCXJldHVybiByZXQ7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX3RpbWUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IHRpbWVzcGVjICp0aW1lKQpAQCAtMzIzMiwxMiArMzM1MCwxNyBAQAogCXVpbnQ2NF90IHNlYzsKIAl1aW50MzJfdCBuc2VjOwogCi0JUkVBRF9CVUYoMTIpOwotCVJFQUQ2NChzZWMpOwotCVJFQUQzMihuc2VjKTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCAxMik7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJnNlYyk7CisJbnNlYyA9IGJlMzJfdG9fY3B1cChwKTsKIAl0aW1lLT50dl9zZWMgPSAodGltZV90KXNlYzsKIAl0aW1lLT50dl9uc2VjID0gKGxvbmcpbnNlYzsKIAlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfdGltZV9hY2Nlc3Moc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgc3RydWN0IHRpbWVzcGVjICp0aW1lKQpAQCAtMzMxNSwxMSArMzQzOCwxNiBAQAogewogCV9fYmUzMiAqcDsKIAotCVJFQURfQlVGKDIwKTsKLQlSRUFEMzIoY2luZm8tPmF0b21pYyk7Ci0JUkVBRDY0KGNpbmZvLT5iZWZvcmUpOwotCVJFQUQ2NChjaW5mby0+YWZ0ZXIpOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDIwKTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwljaW5mby0+YXRvbWljID0gYmUzMl90b19jcHVwKHArKyk7CisJcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJmNpbmZvLT5iZWZvcmUpOworCXhkcl9kZWNvZGVfaHlwZXIocCwgJmNpbmZvLT5hZnRlcik7CiAJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hY2Nlc3Moc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mczRfYWNjZXNzcmVzICphY2Nlc3MpCkBAIC0zMzMxLDQwICszNDU5LDYyIEBACiAJc3RhdHVzID0gZGVjb2RlX29wX2hkcih4ZHIsIE9QX0FDQ0VTUyk7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKLQlSRUFEX0JVRig4KTsKLQlSRUFEMzIoc3VwcCk7Ci0JUkVBRDMyKGFjYyk7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgOCk7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJc3VwcCA9IGJlMzJfdG9fY3B1cChwKyspOworCWFjYyA9IGJlMzJfdG9fY3B1cChwKTsKIAlhY2Nlc3MtPnN1cHBvcnRlZCA9IHN1cHA7CiAJYWNjZXNzLT5hY2Nlc3MgPSBhY2M7CiAJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGRlY29kZV9vcGFxdWVfZml4ZWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCV9fYmUzMiAqcDsKKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIGxlbik7CisJaWYgKGxpa2VseShwKSkgeworCQltZW1jcHkoYnVmLCBwLCBsZW4pOworCQlyZXR1cm4gMDsKKwl9CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGRlY29kZV9zdGF0ZWlkKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIG5mczRfc3RhdGVpZCAqc3RhdGVpZCkKK3sKKwlyZXR1cm4gZGVjb2RlX29wYXF1ZV9maXhlZCh4ZHIsIHN0YXRlaWQtPmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfY2xvc2Uoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19jbG9zZXJlcyAqcmVzKQogewotCV9fYmUzMiAqcDsKIAlpbnQgc3RhdHVzOwogCiAJc3RhdHVzID0gZGVjb2RlX29wX2hkcih4ZHIsIE9QX0NMT1NFKTsKIAlpZiAoc3RhdHVzICE9IC1FSU8pCiAJCW5mc19pbmNyZW1lbnRfb3Blbl9zZXFpZChzdGF0dXMsIHJlcy0+c2VxaWQpOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7Ci0JUkVBRF9CVUYoTkZTNF9TVEFURUlEX1NJWkUpOwotCUNPUFlNRU0ocmVzLT5zdGF0ZWlkLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKLQlyZXR1cm4gMDsKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gZGVjb2RlX3N0YXRlaWQoeGRyLCAmcmVzLT5zdGF0ZWlkKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGRlY29kZV92ZXJpZmllcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB2b2lkICp2ZXJpZmllcikKK3sKKwlyZXR1cm4gZGVjb2RlX29wYXF1ZV9maXhlZCh4ZHIsIHZlcmlmaWVyLCA4KTsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfY29tbWl0KHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnNfd3JpdGVyZXMgKnJlcykKIHsKLQlfX2JlMzIgKnA7CiAJaW50IHN0YXR1czsKIAogCXN0YXR1cyA9IGRlY29kZV9vcF9oZHIoeGRyLCBPUF9DT01NSVQpOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7Ci0JUkVBRF9CVUYoOCk7Ci0JQ09QWU1FTShyZXMtPnZlcmYtPnZlcmlmaWVyLCA4KTsKLQlyZXR1cm4gMDsKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gZGVjb2RlX3ZlcmlmaWVyKHhkciwgcmVzLT52ZXJmLT52ZXJpZmllcik7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfY3JlYXRlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnM0X2NoYW5nZV9pbmZvICpjaW5mbykKQEAgLTMzNzgsMTAgKzM1MjgsMTYgQEAKIAkJcmV0dXJuIHN0YXR1czsKIAlpZiAoKHN0YXR1cyA9IGRlY29kZV9jaGFuZ2VfaW5mbyh4ZHIsIGNpbmZvKSkpCiAJCXJldHVybiBzdGF0dXM7Ci0JUkVBRF9CVUYoNCk7Ci0JUkVBRDMyKGJtbGVuKTsKLQlSRUFEX0JVRihibWxlbiA8PCAyKTsKLQlyZXR1cm4gMDsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlibWxlbiA9IGJlMzJfdG9fY3B1cChwKTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBibWxlbiA8PCAyKTsKKwlpZiAobGlrZWx5KHApKQorCQlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX3NlcnZlcl9jYXBzKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnM0X3NlcnZlcl9jYXBzX3JlcyAqcmVzKQpAQCAtMzQ2Niw3ICszNjIyLDggQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IGRlY29kZV9nZXRmYXR0cihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0ciwgY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcikKK3N0YXRpYyBpbnQgZGVjb2RlX2dldGZhdHRyKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyLAorCQljb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBpbnQgbWF5X3NsZWVwKQogewogCV9fYmUzMiAqc2F2ZXA7CiAJdWludDMyX3QgYXR0cmxlbiwKQEAgLTM1MzgsMTIgKzM2OTUsMTQgQEAKIAkJZ290byB4ZHJfZXJyb3I7CiAJZmF0dHItPnZhbGlkIHw9IHN0YXR1czsKIAotCXN0YXR1cyA9IGRlY29kZV9hdHRyX293bmVyKHhkciwgYml0bWFwLCBzZXJ2ZXItPm5mc19jbGllbnQsICZmYXR0ci0+dWlkKTsKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl9vd25lcih4ZHIsIGJpdG1hcCwgc2VydmVyLT5uZnNfY2xpZW50LAorCQkJJmZhdHRyLT51aWQsIG1heV9zbGVlcCk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwogCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CiAKLQlzdGF0dXMgPSBkZWNvZGVfYXR0cl9ncm91cCh4ZHIsIGJpdG1hcCwgc2VydmVyLT5uZnNfY2xpZW50LCAmZmF0dHItPmdpZCk7CisJc3RhdHVzID0gZGVjb2RlX2F0dHJfZ3JvdXAoeGRyLCBiaXRtYXAsIHNlcnZlci0+bmZzX2NsaWVudCwKKwkJCSZmYXR0ci0+Z2lkLCBtYXlfc2xlZXApOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKIAlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOwpAQCAtMzYzMywxNCArMzc5MiwyMSBAQAogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKLQlSRUFEX0JVRig0KTsKLQlSRUFEMzIobGVuKTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlsZW4gPSBiZTMyX3RvX2NwdXAocCk7CiAJaWYgKGxlbiA+IE5GUzRfRkhTSVpFKQogCQlyZXR1cm4gLUVJTzsKIAlmaC0+c2l6ZSA9IGxlbjsKLQlSRUFEX0JVRihsZW4pOwotCUNPUFlNRU0oZmgtPmRhdGEsIGxlbik7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgbGVuKTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwltZW1jcHkoZmgtPmRhdGEsIHAsIGxlbik7CiAJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9saW5rKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnM0X2NoYW5nZV9pbmZvICpjaW5mbykKQEAgLTM2NjIsMTAgKzM4MjgsMTIgQEAKIAlfX2JlMzIgKnA7CiAJdWludDMyX3QgbmFtZWxlbiwgdHlwZTsKIAotCVJFQURfQlVGKDMyKTsKLQlSRUFENjQob2Zmc2V0KTsKLQlSRUFENjQobGVuZ3RoKTsKLQlSRUFEMzIodHlwZSk7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgMzIpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZvZmZzZXQpOworCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZsZW5ndGgpOworCXR5cGUgPSBiZTMyX3RvX2NwdXAocCsrKTsKIAlpZiAoZmwgIT0gTlVMTCkgewogCQlmbC0+Zmxfc3RhcnQgPSAobG9mZl90KW9mZnNldDsKIAkJZmwtPmZsX2VuZCA9IGZsLT5mbF9zdGFydCArIChsb2ZmX3QpbGVuZ3RoIC0gMTsKQEAgLTM2NzYsMjMgKzM4NDQsMjcgQEAKIAkJCWZsLT5mbF90eXBlID0gRl9SRExDSzsKIAkJZmwtPmZsX3BpZCA9IDA7CiAJfQotCVJFQUQ2NChjbGllbnRpZCk7Ci0JUkVBRDMyKG5hbWVsZW4pOwotCVJFQURfQlVGKG5hbWVsZW4pOwotCXJldHVybiAtTkZTNEVSUl9ERU5JRUQ7CisJcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJmNsaWVudGlkKTsKKwluYW1lbGVuID0gYmUzMl90b19jcHVwKHApOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIG5hbWVsZW4pOworCWlmIChsaWtlbHkocCkpCisJCXJldHVybiAtTkZTNEVSUl9ERU5JRUQ7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9sb2NrKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnNfbG9ja19yZXMgKnJlcykKIHsKLQlfX2JlMzIgKnA7CiAJaW50IHN0YXR1czsKIAogCXN0YXR1cyA9IGRlY29kZV9vcF9oZHIoeGRyLCBPUF9MT0NLKTsKIAlpZiAoc3RhdHVzID09IC1FSU8pCiAJCWdvdG8gb3V0OwogCWlmIChzdGF0dXMgPT0gMCkgewotCQlSRUFEX0JVRihORlM0X1NUQVRFSURfU0laRSk7Ci0JCUNPUFlNRU0ocmVzLT5zdGF0ZWlkLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKKwkJc3RhdHVzID0gZGVjb2RlX3N0YXRlaWQoeGRyLCAmcmVzLT5zdGF0ZWlkKTsKKwkJaWYgKHVubGlrZWx5KHN0YXR1cykpCisJCQlnb3RvIG91dDsKIAl9IGVsc2UgaWYgKHN0YXR1cyA9PSAtTkZTNEVSUl9ERU5JRUQpCiAJCXN0YXR1cyA9IGRlY29kZV9sb2NrX2RlbmllZCh4ZHIsIE5VTEwpOwogCWlmIChyZXMtPm9wZW5fc2VxaWQgIT0gTlVMTCkKQEAgLTM3MTMsMTYgKzM4ODUsMTMgQEAKIAogc3RhdGljIGludCBkZWNvZGVfbG9ja3Uoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19sb2NrdV9yZXMgKnJlcykKIHsKLQlfX2JlMzIgKnA7CiAJaW50IHN0YXR1czsKIAogCXN0YXR1cyA9IGRlY29kZV9vcF9oZHIoeGRyLCBPUF9MT0NLVSk7CiAJaWYgKHN0YXR1cyAhPSAtRUlPKQogCQluZnNfaW5jcmVtZW50X2xvY2tfc2VxaWQoc3RhdHVzLCByZXMtPnNlcWlkKTsKLQlpZiAoc3RhdHVzID09IDApIHsKLQkJUkVBRF9CVUYoTkZTNF9TVEFURUlEX1NJWkUpOwotCQlDT1BZTUVNKHJlcy0+c3RhdGVpZC5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7Ci0JfQorCWlmIChzdGF0dXMgPT0gMCkKKwkJc3RhdHVzID0gZGVjb2RlX3N0YXRlaWQoeGRyLCAmcmVzLT5zdGF0ZWlkKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0zNzM3LDM0ICszOTA2LDQ2IEBACiAJX19iZTMyICpwOwogCXVpbnQzMl90IGxpbWl0X3R5cGUsIG5ibG9ja3MsIGJsb2Nrc2l6ZTsKIAotCVJFQURfQlVGKDEyKTsKLQlSRUFEMzIobGltaXRfdHlwZSk7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgMTIpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWxpbWl0X3R5cGUgPSBiZTMyX3RvX2NwdXAocCsrKTsKIAlzd2l0Y2ggKGxpbWl0X3R5cGUpIHsKIAljYXNlIDE6Ci0JCVJFQUQ2NCgqbWF4c2l6ZSk7CisJCXhkcl9kZWNvZGVfaHlwZXIocCwgbWF4c2l6ZSk7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJUkVBRDMyKG5ibG9ja3MpOwotCQlSRUFEMzIoYmxvY2tzaXplKTsKKwkJbmJsb2NrcyA9IGJlMzJfdG9fY3B1cChwKyspOworCQlibG9ja3NpemUgPSBiZTMyX3RvX2NwdXAocCk7CiAJCSptYXhzaXplID0gKHVpbnQ2NF90KW5ibG9ja3MgKiAodWludDY0X3QpYmxvY2tzaXplOwogCX0KIAlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2RlbGVnYXRpb24oc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19vcGVucmVzICpyZXMpCiB7CiAJX19iZTMyICpwOwogCXVpbnQzMl90IGRlbGVnYXRpb25fdHlwZTsKKwlpbnQgc3RhdHVzOwogCi0JUkVBRF9CVUYoNCk7Ci0JUkVBRDMyKGRlbGVnYXRpb25fdHlwZSk7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJZGVsZWdhdGlvbl90eXBlID0gYmUzMl90b19jcHVwKHApOwogCWlmIChkZWxlZ2F0aW9uX3R5cGUgPT0gTkZTNF9PUEVOX0RFTEVHQVRFX05PTkUpIHsKIAkJcmVzLT5kZWxlZ2F0aW9uX3R5cGUgPSAwOwogCQlyZXR1cm4gMDsKIAl9Ci0JUkVBRF9CVUYoTkZTNF9TVEFURUlEX1NJWkUrNCk7Ci0JQ09QWU1FTShyZXMtPmRlbGVnYXRpb24uZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOwotCVJFQUQzMihyZXMtPmRvX3JlY2FsbCk7CisJc3RhdHVzID0gZGVjb2RlX3N0YXRlaWQoeGRyLCAmcmVzLT5kZWxlZ2F0aW9uKTsKKwlpZiAodW5saWtlbHkoc3RhdHVzKSkKKwkJcmV0dXJuIHN0YXR1czsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlyZXMtPmRvX3JlY2FsbCA9IGJlMzJfdG9fY3B1cChwKTsKIAogCXN3aXRjaCAoZGVsZWdhdGlvbl90eXBlKSB7CiAJY2FzZSBORlM0X09QRU5fREVMRUdBVEVfUkVBRDoKQEAgLTM3NzYsNiArMzk1Nyw5IEBACiAJCQkJcmV0dXJuIC1FSU87CiAJfQogCXJldHVybiBkZWNvZGVfYWNlKHhkciwgTlVMTCwgcmVzLT5zZXJ2ZXItPm5mc19jbGllbnQpOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfb3BlbihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX29wZW5yZXMgKnJlcykKQEAgLTM3ODcsMjMgKzM5NzEsMjcgQEAKIAlzdGF0dXMgPSBkZWNvZGVfb3BfaGRyKHhkciwgT1BfT1BFTik7CiAJaWYgKHN0YXR1cyAhPSAtRUlPKQogCQluZnNfaW5jcmVtZW50X29wZW5fc2VxaWQoc3RhdHVzLCByZXMtPnNlcWlkKTsKLQlpZiAoc3RhdHVzKQorCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBkZWNvZGVfc3RhdGVpZCh4ZHIsICZyZXMtPnN0YXRlaWQpOworCWlmICh1bmxpa2VseShzdGF0dXMpKQogCQlyZXR1cm4gc3RhdHVzOwotCVJFQURfQlVGKE5GUzRfU1RBVEVJRF9TSVpFKTsKLQlDT1BZTUVNKHJlcy0+c3RhdGVpZC5kYXRhLCBORlM0X1NUQVRFSURfU0laRSk7CiAKIAlkZWNvZGVfY2hhbmdlX2luZm8oeGRyLCAmcmVzLT5jaW5mbyk7CiAKLQlSRUFEX0JVRig4KTsKLQlSRUFEMzIocmVzLT5yZmxhZ3MpOwotCVJFQUQzMihibWxlbik7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgOCk7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJcmVzLT5yZmxhZ3MgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwlibWxlbiA9IGJlMzJfdG9fY3B1cChwKTsKIAlpZiAoYm1sZW4gPiAxMCkKIAkJZ290byB4ZHJfZXJyb3I7CiAKLQlSRUFEX0JVRihibWxlbiA8PCAyKTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBibWxlbiA8PCAyKTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKIAlzYXZld29yZHMgPSBtaW5fdCh1aW50MzJfdCwgYm1sZW4sIE5GUzRfQklUTUFQX1NJWkUpOwogCWZvciAoaSA9IDA7IGkgPCBzYXZld29yZHM7ICsraSkKLQkJUkVBRDMyKHJlcy0+YXR0cnNldFtpXSk7CisJCXJlcy0+YXR0cnNldFtpXSA9IGJlMzJfdG9fY3B1cChwKyspOwogCWZvciAoOyBpIDwgTkZTNF9CSVRNQVBfU0laRTsgaSsrKQogCQlyZXMtPmF0dHJzZXRbaV0gPSAwOwogCkBAIC0zODExLDM2ICszOTk5LDMzIEBACiB4ZHJfZXJyb3I6CiAJZHByaW50aygiJXM6IEJpdG1hcCB0b28gbGFyZ2UhIExlbmd0aCA9ICV1XG4iLCBfX2Z1bmNfXywgYm1sZW4pOwogCXJldHVybiAtRUlPOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfb3Blbl9jb25maXJtKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnNfb3Blbl9jb25maXJtcmVzICpyZXMpCiB7Ci0JX19iZTMyICpwOwogCWludCBzdGF0dXM7CiAKIAlzdGF0dXMgPSBkZWNvZGVfb3BfaGRyKHhkciwgT1BfT1BFTl9DT05GSVJNKTsKIAlpZiAoc3RhdHVzICE9IC1FSU8pCiAJCW5mc19pbmNyZW1lbnRfb3Blbl9zZXFpZChzdGF0dXMsIHJlcy0+c2VxaWQpOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7Ci0JUkVBRF9CVUYoTkZTNF9TVEFURUlEX1NJWkUpOwotCUNPUFlNRU0ocmVzLT5zdGF0ZWlkLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKLQlyZXR1cm4gMDsKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gZGVjb2RlX3N0YXRlaWQoeGRyLCAmcmVzLT5zdGF0ZWlkKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9vcGVuX2Rvd25ncmFkZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX2Nsb3NlcmVzICpyZXMpCiB7Ci0JX19iZTMyICpwOwogCWludCBzdGF0dXM7CiAKIAlzdGF0dXMgPSBkZWNvZGVfb3BfaGRyKHhkciwgT1BfT1BFTl9ET1dOR1JBREUpOwogCWlmIChzdGF0dXMgIT0gLUVJTykKIAkJbmZzX2luY3JlbWVudF9vcGVuX3NlcWlkKHN0YXR1cywgcmVzLT5zZXFpZCk7Ci0JaWYgKHN0YXR1cykKLQkJcmV0dXJuIHN0YXR1czsKLQlSRUFEX0JVRihORlM0X1NUQVRFSURfU0laRSk7Ci0JQ09QWU1FTShyZXMtPnN0YXRlaWQuZGF0YSwgTkZTNF9TVEFURUlEX1NJWkUpOwotCXJldHVybiAwOworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBkZWNvZGVfc3RhdGVpZCh4ZHIsICZyZXMtPnN0YXRlaWQpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX3B1dGZoKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIpCkBAIC0zODYzLDkgKzQwNDgsMTEgQEAKIAlzdGF0dXMgPSBkZWNvZGVfb3BfaGRyKHhkciwgT1BfUkVBRCk7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKLQlSRUFEX0JVRig4KTsKLQlSRUFEMzIoZW9mKTsKLQlSRUFEMzIoY291bnQpOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDgpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWVvZiA9IGJlMzJfdG9fY3B1cChwKyspOworCWNvdW50ID0gYmUzMl90b19jcHVwKHApOwogCWhkcmxlbiA9ICh1OCAqKSBwIC0gKHU4ICopIGlvdi0+aW92X2Jhc2U7CiAJcmVjdmQgPSByZXEtPnJxX3Jjdl9idWYubGVuIC0gaGRybGVuOwogCWlmIChjb3VudCA+IHJlY3ZkKSB7CkBAIC0zODc4LDYgKzQwNjUsOSBAQAogCXJlcy0+ZW9mID0gZW9mOwogCXJlcy0+Y291bnQgPSBjb3VudDsKIAlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX3JlYWRkaXIoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCBuZnM0X3JlYWRkaXJfcmVzICpyZWFkZGlyKQpAQCAtMzg5MiwxNyArNDA4MiwxNyBAQAogCWludAkJc3RhdHVzOwogCiAJc3RhdHVzID0gZGVjb2RlX29wX2hkcih4ZHIsIE9QX1JFQURESVIpOwotCWlmIChzdGF0dXMpCisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9IGRlY29kZV92ZXJpZmllcih4ZHIsIHJlYWRkaXItPnZlcmlmaWVyLmRhdGEpOworCWlmICh1bmxpa2VseShzdGF0dXMpKQogCQlyZXR1cm4gc3RhdHVzOwotCVJFQURfQlVGKDgpOwotCUNPUFlNRU0ocmVhZGRpci0+dmVyaWZpZXIuZGF0YSwgOCk7CiAJZHByaW50aygiJXM6IHZlcmlmaWVyID0gJTA4eDolMDh4XG4iLAogCQkJX19mdW5jX18sCiAJCQkoKHUzMiAqKXJlYWRkaXItPnZlcmlmaWVyLmRhdGEpWzBdLAogCQkJKCh1MzIgKilyZWFkZGlyLT52ZXJpZmllci5kYXRhKVsxXSk7CiAKIAotCWhkcmxlbiA9IChjaGFyICopIHAgLSAoY2hhciAqKSBpb3YtPmlvdl9iYXNlOworCWhkcmxlbiA9IChjaGFyICopIHhkci0+cCAtIChjaGFyICopIGlvdi0+aW92X2Jhc2U7CiAJcmVjdmQgPSByY3ZidWYtPmxlbiAtIGhkcmxlbjsKIAlpZiAocGdsZW4gPiByZWN2ZCkKIAkJcGdsZW4gPSByZWN2ZDsKQEAgLTM5OTAsOCArNDE4MCwxMCBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJLyogQ29udmVydCBsZW5ndGggb2Ygc3ltbGluayAqLwotCVJFQURfQlVGKDQpOwotCVJFQUQzMihsZW4pOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWxlbiA9IGJlMzJfdG9fY3B1cChwKTsKIAlpZiAobGVuID49IHJjdmJ1Zi0+cGFnZV9sZW4gfHwgbGVuIDw9IDApIHsKIAkJZHByaW50aygibmZzOiBzZXJ2ZXIgcmV0dXJuZWQgZ2lhbnQgc3ltbGluayFcbiIpOwogCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKQEAgLTQwMTUsNiArNDIwNyw5IEBACiAJa2FkZHJbbGVuK3JjdmJ1Zi0+cGFnZV9iYXNlXSA9ICdcMCc7CiAJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCXJldHVybiAwOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfcmVtb3ZlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnM0X2NoYW5nZV9pbmZvICpjaW5mbykKQEAgLTQxMTIsMTAgKzQzMDcsMTYgQEAKIAlzdGF0dXMgPSBkZWNvZGVfb3BfaGRyKHhkciwgT1BfU0VUQVRUUik7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKLQlSRUFEX0JVRig0KTsKLQlSRUFEMzIoYm1sZW4pOwotCVJFQURfQlVGKGJtbGVuIDw8IDIpOwotCXJldHVybiAwOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWJtbGVuID0gYmUzMl90b19jcHVwKHApOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIGJtbGVuIDw8IDIpOworCWlmIChsaWtlbHkocCkpCisJCXJldHVybiAwOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfc2V0Y2xpZW50aWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19jbGllbnQgKmNscCkKQEAgLTQxMjQsMzUgKzQzMjUsNTAgQEAKIAl1aW50MzJfdCBvcG51bTsKIAlpbnQzMl90IG5mc2VycjsKIAotCVJFQURfQlVGKDgpOwotCVJFQUQzMihvcG51bSk7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgOCk7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJb3BudW0gPSBiZTMyX3RvX2NwdXAocCsrKTsKIAlpZiAob3BudW0gIT0gT1BfU0VUQ0xJRU5USUQpIHsKIAkJZHByaW50aygibmZzOiBkZWNvZGVfc2V0Y2xpZW50aWQ6IFNlcnZlciByZXR1cm5lZCBvcGVyYXRpb24iCiAJCQkiICVkXG4iLCBvcG51bSk7CiAJCXJldHVybiAtRUlPOwogCX0KLQlSRUFEMzIobmZzZXJyKTsKKwluZnNlcnIgPSBiZTMyX3RvX2NwdXAocCk7CiAJaWYgKG5mc2VyciA9PSBORlNfT0spIHsKLQkJUkVBRF9CVUYoOCArIE5GUzRfVkVSSUZJRVJfU0laRSk7Ci0JCVJFQUQ2NChjbHAtPmNsX2NsaWVudGlkKTsKLQkJQ09QWU1FTShjbHAtPmNsX2NvbmZpcm0uZGF0YSwgTkZTNF9WRVJJRklFUl9TSVpFKTsKKwkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgOCArIE5GUzRfVkVSSUZJRVJfU0laRSk7CisJCWlmICh1bmxpa2VseSghcCkpCisJCQlnb3RvIG91dF9vdmVyZmxvdzsKKwkJcCA9IHhkcl9kZWNvZGVfaHlwZXIocCwgJmNscC0+Y2xfY2xpZW50aWQpOworCQltZW1jcHkoY2xwLT5jbF9jb25maXJtLmRhdGEsIHAsIE5GUzRfVkVSSUZJRVJfU0laRSk7CiAJfSBlbHNlIGlmIChuZnNlcnIgPT0gTkZTRVJSX0NMSURfSU5VU0UpIHsKIAkJdWludDMyX3QgbGVuOwogCiAJCS8qIHNraXAgbmV0aWQgc3RyaW5nICovCi0JCVJFQURfQlVGKDQpOwotCQlSRUFEMzIobGVuKTsKLQkJUkVBRF9CVUYobGVuKTsKKwkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJCWlmICh1bmxpa2VseSghcCkpCisJCQlnb3RvIG91dF9vdmVyZmxvdzsKKwkJbGVuID0gYmUzMl90b19jcHVwKHApOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBsZW4pOworCQlpZiAodW5saWtlbHkoIXApKQorCQkJZ290byBvdXRfb3ZlcmZsb3c7CiAKIAkJLyogc2tpcCB1YWRkciBzdHJpbmcgKi8KLQkJUkVBRF9CVUYoNCk7Ci0JCVJFQUQzMihsZW4pOwotCQlSRUFEX0JVRihsZW4pOworCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X292ZXJmbG93OworCQlsZW4gPSBiZTMyX3RvX2NwdXAocCk7CisJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIGxlbik7CisJCWlmICh1bmxpa2VseSghcCkpCisJCQlnb3RvIG91dF9vdmVyZmxvdzsKIAkJcmV0dXJuIC1ORlNFUlJfQ0xJRF9JTlVTRTsKIAl9IGVsc2UKIAkJcmV0dXJuIG5mczRfc3RhdF90b19lcnJubyhuZnNlcnIpOwogCiAJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9zZXRjbGllbnRpZF9jb25maXJtKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIpCkBAIC00MTY5LDExICs0Mzg1LDE2IEBACiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIAotCVJFQURfQlVGKDE2KTsKLQlSRUFEMzIocmVzLT5jb3VudCk7Ci0JUkVBRDMyKHJlcy0+dmVyZi0+Y29tbWl0dGVkKTsKLQlDT1BZTUVNKHJlcy0+dmVyZi0+dmVyaWZpZXIsIDgpOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDE2KTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9vdmVyZmxvdzsKKwlyZXMtPmNvdW50ID0gYmUzMl90b19jcHVwKHArKyk7CisJcmVzLT52ZXJmLT5jb21taXR0ZWQgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwltZW1jcHkocmVzLT52ZXJmLT52ZXJpZmllciwgcCwgOCk7CiAJcmV0dXJuIDA7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9kZWxlZ3JldHVybihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyKQpAQCAtNDE4Nyw2ICs0NDA4LDcgQEAKIHsKIAlfX2JlMzIgKnA7CiAJdWludDMyX3QgZHVtbXk7CisJY2hhciAqZHVtbXlfc3RyOwogCWludCBzdGF0dXM7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHJlcy0+Y2xpZW50OwogCkBAIC00MTk0LDM2ICs0NDE2LDQ1IEBACiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIAotCVJFQURfQlVGKDgpOwotCVJFQUQ2NChjbHAtPmNsX2V4X2NsaWQpOwotCVJFQURfQlVGKDEyKTsKLQlSRUFEMzIoY2xwLT5jbF9zZXFpZCk7Ci0JUkVBRDMyKGNscC0+Y2xfZXhjaGFuZ2VfZmxhZ3MpOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDgpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCXhkcl9kZWNvZGVfaHlwZXIocCwgJmNscC0+Y2xfZXhfY2xpZCk7CisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgMTIpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWNscC0+Y2xfc2VxaWQgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwljbHAtPmNsX2V4Y2hhbmdlX2ZsYWdzID0gYmUzMl90b19jcHVwKHArKyk7CiAKIAkvKiBXZSBhc2sgZm9yIFNQNF9OT05FICovCi0JUkVBRDMyKGR1bW15KTsKKwlkdW1teSA9IGJlMzJfdG9fY3B1cChwKTsKIAlpZiAoZHVtbXkgIT0gU1A0X05PTkUpCiAJCXJldHVybiAtRUlPOwogCiAJLyogVGhyb3cgYXdheSBtaW5vcl9pZCAqLwotCVJFQURfQlVGKDgpOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDgpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OwogCiAJLyogVGhyb3cgYXdheSBNYWpvciBpZCAqLwotCVJFQURfQlVGKDQpOwotCVJFQUQzMihkdW1teSk7Ci0JUkVBRF9CVUYoZHVtbXkpOworCXN0YXR1cyA9IGRlY29kZV9vcGFxdWVfaW5saW5lKHhkciwgJmR1bW15LCAmZHVtbXlfc3RyKTsKKwlpZiAodW5saWtlbHkoc3RhdHVzKSkKKwkJcmV0dXJuIHN0YXR1czsKIAogCS8qIFRocm93IGF3YXkgc2VydmVyX3Njb3BlICovCi0JUkVBRF9CVUYoNCk7Ci0JUkVBRDMyKGR1bW15KTsKLQlSRUFEX0JVRihkdW1teSk7CisJc3RhdHVzID0gZGVjb2RlX29wYXF1ZV9pbmxpbmUoeGRyLCAmZHVtbXksICZkdW1teV9zdHIpOworCWlmICh1bmxpa2VseShzdGF0dXMpKQorCQlyZXR1cm4gc3RhdHVzOwogCiAJLyogVGhyb3cgYXdheSBJbXBsZW1lbnRhdGlvbiBpZCBhcnJheSAqLwotCVJFQURfQlVGKDQpOwotCVJFQUQzMihkdW1teSk7Ci0JUkVBRF9CVUYoZHVtbXkpOworCXN0YXR1cyA9IGRlY29kZV9vcGFxdWVfaW5saW5lKHhkciwgJmR1bW15LCAmZHVtbXlfc3RyKTsKKwlpZiAodW5saWtlbHkoc3RhdHVzKSkKKwkJcmV0dXJuIHN0YXR1czsKIAogCXJldHVybiAwOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfY2hhbl9hdHRycyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLApAQCAtNDIzMiwyMiArNDQ2MywzNSBAQAogCV9fYmUzMiAqcDsKIAl1MzIgbnJfYXR0cnM7CiAKLQlSRUFEX0JVRigyOCk7Ci0JUkVBRDMyKGF0dHJzLT5oZWFkZXJwYWRzeik7Ci0JUkVBRDMyKGF0dHJzLT5tYXhfcnFzdF9zeik7Ci0JUkVBRDMyKGF0dHJzLT5tYXhfcmVzcF9zeik7Ci0JUkVBRDMyKGF0dHJzLT5tYXhfcmVzcF9zel9jYWNoZWQpOwotCVJFQUQzMihhdHRycy0+bWF4X29wcyk7Ci0JUkVBRDMyKGF0dHJzLT5tYXhfcmVxcyk7Ci0JUkVBRDMyKG5yX2F0dHJzKTsKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCAyOCk7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisJYXR0cnMtPmhlYWRlcnBhZHN6ID0gYmUzMl90b19jcHVwKHArKyk7CisJYXR0cnMtPm1heF9ycXN0X3N6ID0gYmUzMl90b19jcHVwKHArKyk7CisJYXR0cnMtPm1heF9yZXNwX3N6ID0gYmUzMl90b19jcHVwKHArKyk7CisJYXR0cnMtPm1heF9yZXNwX3N6X2NhY2hlZCA9IGJlMzJfdG9fY3B1cChwKyspOworCWF0dHJzLT5tYXhfb3BzID0gYmUzMl90b19jcHVwKHArKyk7CisJYXR0cnMtPm1heF9yZXFzID0gYmUzMl90b19jcHVwKHArKyk7CisJbnJfYXR0cnMgPSBiZTMyX3RvX2NwdXAocCk7CiAJaWYgKHVubGlrZWx5KG5yX2F0dHJzID4gMSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludmFsaWQgcmRtYSBjaGFubmVsIGF0dHJzIGNvdW50ICV1XG4iLAogCQkJX19mdW5jX18sIG5yX2F0dHJzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmIChucl9hdHRycyA9PSAxKQotCQlSRUFEX0JVRig0KTsgLyogc2tpcCByZG1hX2F0dHJzICovCisJaWYgKG5yX2F0dHJzID09IDEpIHsKKwkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7IC8qIHNraXAgcmRtYV9hdHRycyAqLworCQlpZiAodW5saWtlbHkoIXApKQorCQkJZ290byBvdXRfb3ZlcmZsb3c7CisJfQogCXJldHVybiAwOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBkZWNvZGVfc2Vzc2lvbmlkKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqc2lkKQoreworCXJldHVybiBkZWNvZGVfb3BhcXVlX2ZpeGVkKHhkciwgc2lkLT5kYXRhLCBORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfY3JlYXRlX3Nlc3Npb24oc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKQEAgLTQyNTksMjQgKzQ1MDMsMjYgQEAKIAlzdHJ1Y3QgbmZzNF9zZXNzaW9uICpzZXNzaW9uID0gY2xwLT5jbF9zZXNzaW9uOwogCiAJc3RhdHVzID0gZGVjb2RlX29wX2hkcih4ZHIsIE9QX0NSRUFURV9TRVNTSU9OKTsKLQotCWlmIChzdGF0dXMpCisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9IGRlY29kZV9zZXNzaW9uaWQoeGRyLCAmc2Vzc2lvbi0+c2Vzc19pZCk7CisJaWYgKHVubGlrZWx5KHN0YXR1cykpCiAJCXJldHVybiBzdGF0dXM7CiAKLQkvKiBzZXNzaW9uaWQgKi8KLQlSRUFEX0JVRihORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKLQlDT1BZTUVNKCZzZXNzaW9uLT5zZXNzX2lkLCBORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKLQogCS8qIHNlcWlkLCBmbGFncyAqLwotCVJFQURfQlVGKDgpOwotCVJFQUQzMihjbHAtPmNsX3NlcWlkKTsKLQlSRUFEMzIoc2Vzc2lvbi0+ZmxhZ3MpOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDgpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWNscC0+Y2xfc2VxaWQgPSBiZTMyX3RvX2NwdXAocCsrKTsKKwlzZXNzaW9uLT5mbGFncyA9IGJlMzJfdG9fY3B1cChwKTsKIAogCS8qIENoYW5uZWwgYXR0cmlidXRlcyAqLwogCXN0YXR1cyA9IGRlY29kZV9jaGFuX2F0dHJzKHhkciwgJnNlc3Npb24tPmZjX2F0dHJzKTsKIAlpZiAoIXN0YXR1cykKIAkJc3RhdHVzID0gZGVjb2RlX2NoYW5fYXR0cnMoeGRyLCAmc2Vzc2lvbi0+YmNfYXR0cnMpOwogCXJldHVybiBzdGF0dXM7CitvdXRfb3ZlcmZsb3c6CisJcHJpbnRfb3ZlcmZsb3dfbXNnKF9fZnVuY19fLCB4ZHIpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9kZXN0cm95X3Nlc3Npb24oc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdm9pZCAqZHVtbXkpCkBAIC00MzAwLDcgKzQ1NDYsOSBAQAogCQlyZXR1cm4gMDsKIAogCXN0YXR1cyA9IGRlY29kZV9vcF9oZHIoeGRyLCBPUF9TRVFVRU5DRSk7Ci0JaWYgKHN0YXR1cykKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gZGVjb2RlX3Nlc3Npb25pZCh4ZHIsICZpZCk7CisJaWYgKHVubGlrZWx5KHN0YXR1cykpCiAJCWdvdG8gb3V0X2VycjsKIAogCS8qCkBAIC00MzA5LDM2ICs0NTU3LDQzIEBACiAJICovCiAJc3RhdHVzID0gLUVTRVJWRVJGQVVMVDsKIAotCXNsb3QgPSAmcmVzLT5zcl9zZXNzaW9uLT5mY19zbG90X3RhYmxlLnNsb3RzW3Jlcy0+c3Jfc2xvdGlkXTsKLQlSRUFEX0JVRihORlM0X01BWF9TRVNTSU9OSURfTEVOICsgMjApOwotCUNPUFlNRU0oaWQuZGF0YSwgTkZTNF9NQVhfU0VTU0lPTklEX0xFTik7CiAJaWYgKG1lbWNtcChpZC5kYXRhLCByZXMtPnNyX3Nlc3Npb24tPnNlc3NfaWQuZGF0YSwKIAkJICAgTkZTNF9NQVhfU0VTU0lPTklEX0xFTikpIHsKIAkJZHByaW50aygiJXMgSW52YWxpZCBzZXNzaW9uIGlkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0X2VycjsKIAl9CisKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCAyMCk7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBvdXRfb3ZlcmZsb3c7CisKIAkvKiBzZXFpZCAqLwotCVJFQUQzMihkdW1teSk7CisJc2xvdCA9ICZyZXMtPnNyX3Nlc3Npb24tPmZjX3Nsb3RfdGFibGUuc2xvdHNbcmVzLT5zcl9zbG90aWRdOworCWR1bW15ID0gYmUzMl90b19jcHVwKHArKyk7CiAJaWYgKGR1bW15ICE9IHNsb3QtPnNlcV9ucikgewogCQlkcHJpbnRrKCIlcyBJbnZhbGlkIHNlcXVlbmNlIG51bWJlclxuIiwgX19mdW5jX18pOwogCQlnb3RvIG91dF9lcnI7CiAJfQogCS8qIHNsb3QgaWQgKi8KLQlSRUFEMzIoZHVtbXkpOworCWR1bW15ID0gYmUzMl90b19jcHVwKHArKyk7CiAJaWYgKGR1bW15ICE9IHJlcy0+c3Jfc2xvdGlkKSB7CiAJCWRwcmludGsoIiVzIEludmFsaWQgc2xvdCBpZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIG91dF9lcnI7CiAJfQogCS8qIGhpZ2hlc3Qgc2xvdCBpZCAtIGN1cnJlbnRseSBub3QgcHJvY2Vzc2VkICovCi0JUkVBRDMyKGR1bW15KTsKKwlkdW1teSA9IGJlMzJfdG9fY3B1cChwKyspOwogCS8qIHRhcmdldCBoaWdoZXN0IHNsb3QgaWQgLSBjdXJyZW50bHkgbm90IHByb2Nlc3NlZCAqLwotCVJFQUQzMihkdW1teSk7CisJZHVtbXkgPSBiZTMyX3RvX2NwdXAocCsrKTsKIAkvKiByZXN1bHQgZmxhZ3MgLSBjdXJyZW50bHkgbm90IHByb2Nlc3NlZCAqLwotCVJFQUQzMihkdW1teSk7CisJZHVtbXkgPSBiZTMyX3RvX2NwdXAocCk7CiAJc3RhdHVzID0gMDsKIG91dF9lcnI6CiAJcmVzLT5zcl9zdGF0dXMgPSBzdGF0dXM7CiAJcmV0dXJuIHN0YXR1czsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJc3RhdHVzID0gLUVJTzsKKwlnb3RvIG91dF9lcnI7CiAjZWxzZSAgLyogQ09ORklHX05GU19WNF8xICovCiAJcmV0dXJuIDA7CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCkBAIC00MzcwLDcgKzQ2MjUsOCBAQAogCXN0YXR1cyA9IGRlY29kZV9vcGVuX2Rvd25ncmFkZSgmeGRyLCByZXMpOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byBvdXQ7Ci0JZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyKTsKKwlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIsCisJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTQzOTcsNyArNDY1Myw4IEBACiAJc3RhdHVzID0gZGVjb2RlX2FjY2VzcygmeGRyLCByZXMpOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byBvdXQ7Ci0JZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyKTsKKwlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIsCisJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTQ0MjQsNyArNDY4MSw4IEBACiAJCWdvdG8gb3V0OwogCWlmICgoc3RhdHVzID0gZGVjb2RlX2dldGZoKCZ4ZHIsIHJlcy0+ZmgpKSAhPSAwKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIpOworCXN0YXR1cyA9IGRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlcgorCQkJLCFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNDQ0OCw3ICs0NzA2LDggQEAKIAlpZiAoKHN0YXR1cyA9IGRlY29kZV9wdXRyb290ZmgoJnhkcikpICE9IDApCiAJCWdvdG8gb3V0OwogCWlmICgoc3RhdHVzID0gZGVjb2RlX2dldGZoKCZ4ZHIsIHJlcy0+ZmgpKSA9PSAwKQotCQlzdGF0dXMgPSBkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIpOworCQlzdGF0dXMgPSBkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIsCisJCQkJIVJQQ19JU19BU1lOQyhycXN0cC0+cnFfdGFzaykpOwogb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CkBAIC00NDczLDcgKzQ3MzIsOCBAQAogCQlnb3RvIG91dDsKIAlpZiAoKHN0YXR1cyA9IGRlY29kZV9yZW1vdmUoJnhkciwgJnJlcy0+Y2luZm8pKSAhPSAwKQogCQlnb3RvIG91dDsKLQlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgJnJlcy0+ZGlyX2F0dHIsIHJlcy0+c2VydmVyKTsKKwlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgJnJlcy0+ZGlyX2F0dHIsIHJlcy0+c2VydmVyLAorCQkJIVJQQ19JU19BU1lOQyhycXN0cC0+cnFfdGFzaykpOwogb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CkBAIC00NTAzLDExICs0NzYzLDEzIEBACiAJaWYgKChzdGF0dXMgPSBkZWNvZGVfcmVuYW1lKCZ4ZHIsICZyZXMtPm9sZF9jaW5mbywgJnJlcy0+bmV3X2NpbmZvKSkgIT0gMCkKIAkJZ290byBvdXQ7CiAJLyogQ3VycmVudCBGSCBpcyB0YXJnZXQgZGlyZWN0b3J5ICovCi0JaWYgKGRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPm5ld19mYXR0ciwgcmVzLT5zZXJ2ZXIpICE9IDApCisJaWYgKGRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPm5ld19mYXR0ciwgcmVzLT5zZXJ2ZXIsCisJCQkJIVJQQ19JU19BU1lOQyhycXN0cC0+cnFfdGFzaykpICE9IDApCiAJCWdvdG8gb3V0OwogCWlmICgoc3RhdHVzID0gZGVjb2RlX3Jlc3RvcmVmaCgmeGRyKSkgIT0gMCkKIAkJZ290byBvdXQ7Ci0JZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+b2xkX2ZhdHRyLCByZXMtPnNlcnZlcik7CisJZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+b2xkX2ZhdHRyLCByZXMtPnNlcnZlciwKKwkJCSFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNDU0MCwxMSArNDgwMiwxMyBAQAogCSAqIE5vdGUgb3JkZXI6IE9QX0xJTksgbGVhdmVzIHRoZSBkaXJlY3RvcnkgYXMgdGhlIGN1cnJlbnQKIAkgKiAgICAgICAgICAgICBmaWxlaGFuZGxlLgogCSAqLwotCWlmIChkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5kaXJfYXR0ciwgcmVzLT5zZXJ2ZXIpICE9IDApCisJaWYgKGRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmRpcl9hdHRyLCByZXMtPnNlcnZlciwKKwkJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSkgIT0gMCkKIAkJZ290byBvdXQ7CiAJaWYgKChzdGF0dXMgPSBkZWNvZGVfcmVzdG9yZWZoKCZ4ZHIpKSAhPSAwKQogCQlnb3RvIG91dDsKLQlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIpOworCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlciwKKwkJCSFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNDU3MywxMSArNDgzNywxMyBAQAogCQlnb3RvIG91dDsKIAlpZiAoKHN0YXR1cyA9IGRlY29kZV9nZXRmaCgmeGRyLCByZXMtPmZoKSkgIT0gMCkKIAkJZ290byBvdXQ7Ci0JaWYgKGRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlcikgIT0gMCkKKwlpZiAoZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyLAorCQkJCSFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKSAhPSAwKQogCQlnb3RvIG91dDsKIAlpZiAoKHN0YXR1cyA9IGRlY29kZV9yZXN0b3JlZmgoJnhkcikpICE9IDApCiAJCWdvdG8gb3V0OwotCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmRpcl9mYXR0ciwgcmVzLT5zZXJ2ZXIpOworCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmRpcl9mYXR0ciwgcmVzLT5zZXJ2ZXIsCisJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTQ2MDksNyArNDg3NSw4IEBACiAJc3RhdHVzID0gZGVjb2RlX3B1dGZoKCZ4ZHIpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlcik7CisJc3RhdHVzID0gZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyLAorCQkJIVJQQ19JU19BU1lOQyhycXN0cC0+cnFfdGFzaykpOwogb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CkBAIC00NzE2LDcgKzQ5ODMsOCBAQAogCSAqIAlhbiBFU1RBTEUgZXJyb3IuIFNob3VsZG4ndCBiZSBhIHByb2JsZW0sCiAJICogCXRob3VnaCwgc2luY2UgZmF0dHItPnZhbGlkIHdpbGwgcmVtYWluIHVuc2V0LgogCSAqLwotCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlcik7CisJZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyLAorCQkJIVJQQ19JU19BU1lOQyhycXN0cC0+cnFfdGFzaykpOwogb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CkBAIC00NzQ4LDExICs1MDE2LDEzIEBACiAJCWdvdG8gb3V0OwogCWlmIChkZWNvZGVfZ2V0ZmgoJnhkciwgJnJlcy0+ZmgpICE9IDApCiAJCWdvdG8gb3V0OwotCWlmIChkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mX2F0dHIsIHJlcy0+c2VydmVyKSAhPSAwKQorCWlmIChkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mX2F0dHIsIHJlcy0+c2VydmVyLAorCQkJCSFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKSAhPSAwKQogCQlnb3RvIG91dDsKIAlpZiAoZGVjb2RlX3Jlc3RvcmVmaCgmeGRyKSAhPSAwKQogCQlnb3RvIG91dDsKLQlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5kaXJfYXR0ciwgcmVzLT5zZXJ2ZXIpOworCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmRpcl9hdHRyLCByZXMtPnNlcnZlciwKKwkJCSFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNDgwMCw3ICs1MDcwLDggQEAKIAlzdGF0dXMgPSBkZWNvZGVfb3BlbigmeGRyLCByZXMpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZfYXR0ciwgcmVzLT5zZXJ2ZXIpOworCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZfYXR0ciwgcmVzLT5zZXJ2ZXIsCisJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTQ4MjcsNyArNTA5OCw4IEBACiAJc3RhdHVzID0gZGVjb2RlX3NldGF0dHIoJnhkcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0JZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyKTsKKwlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIsCisJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTUwMDEsNyArNTI3Myw4IEBACiAJc3RhdHVzID0gZGVjb2RlX3dyaXRlKCZ4ZHIsIHJlcyk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7Ci0JZGVjb2RlX2dldGZhdHRyKCZ4ZHIsIHJlcy0+ZmF0dHIsIHJlcy0+c2VydmVyKTsKKwlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIsCisJCQkhUlBDX0lTX0FTWU5DKHJxc3RwLT5ycV90YXNrKSk7CiAJaWYgKCFzdGF0dXMpCiAJCXN0YXR1cyA9IHJlcy0+Y291bnQ7CiBvdXQ6CkBAIC01MDMwLDcgKzUzMDMsOCBAQAogCXN0YXR1cyA9IGRlY29kZV9jb21taXQoJnhkciwgcmVzKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIpOworCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlciwKKwkJCSFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNTE5NCw3ICs1NDY4LDggQEAKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OwogCXN0YXR1cyA9IGRlY29kZV9kZWxlZ3JldHVybigmeGRyKTsKLQlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIpOworCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlciwKKwkJCSFSUENfSVNfQVNZTkMocnFzdHAtPnJxX3Rhc2spKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNTIyMiw3ICs1NDk3LDggQEAKIAkJZ290byBvdXQ7CiAJeGRyX2VudGVyX3BhZ2UoJnhkciwgUEFHRV9TSVpFKTsKIAlzdGF0dXMgPSBkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgJnJlcy0+ZnNfbG9jYXRpb25zLT5mYXR0ciwKLQkJCQkgcmVzLT5mc19sb2NhdGlvbnMtPnNlcnZlcik7CisJCQkJIHJlcy0+ZnNfbG9jYXRpb25zLT5zZXJ2ZXIsCisJCQkJICFSUENfSVNfQVNZTkMocmVxLT5ycV90YXNrKSk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1cGVyLmMKaW5kZXggMGI0Y2JkYy4uZGU5MzU2OSAxMDA2NDQKLS0tIGEvZnMvbmZzL3N1cGVyLmMKKysrIGIvZnMvbmZzL3N1cGVyLmMKQEAgLTczLDcgKzczLDcgQEAKIAlPcHRfY3RvLCBPcHRfbm9jdG8sCiAJT3B0X2FjLCBPcHRfbm9hYywKIAlPcHRfbG9jaywgT3B0X25vbG9jaywKLQlPcHRfdjIsIE9wdF92MywKKwlPcHRfdjIsIE9wdF92MywgT3B0X3Y0LAogCU9wdF91ZHAsIE9wdF90Y3AsIE9wdF9yZG1hLAogCU9wdF9hY2wsIE9wdF9ub2FjbCwKIAlPcHRfcmRpcnBsdXMsIE9wdF9ub3JkaXJwbHVzLApAQCAtMTI3LDYgKzEyNyw3IEBACiAJeyBPcHRfbm9sb2NrLCAibm9sb2NrIiB9LAogCXsgT3B0X3YyLCAidjIiIH0sCiAJeyBPcHRfdjMsICJ2MyIgfSwKKwl7IE9wdF92NCwgInY0IiB9LAogCXsgT3B0X3VkcCwgInVkcCIgfSwKIAl7IE9wdF90Y3AsICJ0Y3AiIH0sCiAJeyBPcHRfcmRtYSwgInJkbWEiIH0sCkBAIC0xNTgsNyArMTU5LDcgQEAKIAl7IE9wdF9tb3VudHZlcnMsICJtb3VudHZlcnM9JXMiIH0sCiAJeyBPcHRfbmZzdmVycywgIm5mc3ZlcnM9JXMiIH0sCiAJeyBPcHRfbmZzdmVycywgInZlcnM9JXMiIH0sCi0JeyBPcHRfbWlub3J2ZXJzaW9uLCAibWlub3J2ZXJzaW9uPSV1IiB9LAorCXsgT3B0X21pbm9ydmVyc2lvbiwgIm1pbm9ydmVyc2lvbj0lcyIgfSwKIAogCXsgT3B0X3NlYywgInNlYz0lcyIgfSwKIAl7IE9wdF9wcm90bywgInByb3RvPSVzIiB9LApAQCAtMjcyLDYgKzI3MywxMCBAQAogfTsKIAogI2lmZGVmIENPTkZJR19ORlNfVjQKK3N0YXRpYyBpbnQgbmZzNF92YWxpZGF0ZV90ZXh0X21vdW50X2RhdGEodm9pZCAqb3B0aW9ucywKKwlzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICphcmdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSk7CitzdGF0aWMgaW50IG5mczRfdHJ5X21vdW50KGludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsCisJc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YSwgc3RydWN0IHZmc21vdW50ICptbnQpOwogc3RhdGljIGludCBuZnM0X2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKIAlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpyYXdfZGF0YSwgc3RydWN0IHZmc21vdW50ICptbnQpOwogc3RhdGljIGludCBuZnM0X3JlbW90ZV9nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCkBAIC03NDIsMTI3ICs3NDcsMjMgQEAKIAl9CiAJfQogCisJZGZwcmludGsoTU9VTlQsICJORlM6IEludmFsaWQgSVAgYWRkcmVzcyBzcGVjaWZpZWRcbiIpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBuZnNfcGFyc2VfaXB2NF9hZGRyZXNzKGNoYXIgKnN0cmluZywgc2l6ZV90IHN0cl9sZW4sCi0JCQkJICAgc3RydWN0IHNvY2thZGRyICpzYXAsIHNpemVfdCAqYWRkcl9sZW4pCi17Ci0Jc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopc2FwOwotCXU4ICphZGRyID0gKHU4ICopJnNpbi0+c2luX2FkZHIuc19hZGRyOwotCi0JaWYgKHN0cl9sZW4gPD0gSU5FVF9BRERSU1RSTEVOKSB7Ci0JCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBwYXJzaW5nIElQdjQgYWRkcmVzcyAlKnNcbiIsCi0JCQkJKGludClzdHJfbGVuLCBzdHJpbmcpOwotCi0JCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCSphZGRyX2xlbiA9IHNpemVvZigqc2luKTsKLQkJaWYgKGluNF9wdG9uKHN0cmluZywgc3RyX2xlbiwgYWRkciwgJ1wwJywgTlVMTCkpCi0JCQlyZXR1cm47Ci0JfQotCi0Jc2FwLT5zYV9mYW1pbHkgPSBBRl9VTlNQRUM7Ci0JKmFkZHJfbGVuID0gMDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotc3RhdGljIGludCBuZnNfcGFyc2VfaXB2Nl9zY29wZV9pZChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IHNpemVfdCBzdHJfbGVuLAotCQkJCSAgIGNvbnN0IGNoYXIgKmRlbGltLAotCQkJCSAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYpCi17Ci0JY2hhciAqcDsKLQlzaXplX3QgbGVuOwotCi0JaWYgKChzdHJpbmcgKyBzdHJfbGVuKSA9PSBkZWxpbSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoKmRlbGltICE9IElQVjZfU0NPUEVfREVMSU1JVEVSKQotCQlyZXR1cm4gMDsKLQotCWlmICghKGlwdjZfYWRkcl90eXBlKCZzaW42LT5zaW42X2FkZHIpICYgSVBWNl9BRERSX0xJTktMT0NBTCkpCi0JCXJldHVybiAwOwotCi0JbGVuID0gKHN0cmluZyArIHN0cl9sZW4pIC0gZGVsaW0gLSAxOwotCXAgPSBrc3RybmR1cChkZWxpbSArIDEsIGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHApIHsKLQkJdW5zaWduZWQgbG9uZyBzY29wZV9pZCA9IDA7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0KLQkJZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgcCk7Ci0JCWlmIChkZXYgIT0gTlVMTCkgewotCQkJc2NvcGVfaWQgPSBkZXYtPmlmaW5kZXg7Ci0JCQlkZXZfcHV0KGRldik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoc3RyaWN0X3N0cnRvdWwocCwgMTAsICZzY29wZV9pZCkgPT0gMCkgewotCQkJCWtmcmVlKHApOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0KLQkJa2ZyZWUocCk7Ci0KLQkJc2luNi0+c2luNl9zY29wZV9pZCA9IHNjb3BlX2lkOwotCQlkZnByaW50ayhNT1VOVCwgIk5GUzogSVB2NiBzY29wZSBJRCA9ICVsdVxuIiwgc2NvcGVfaWQpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbmZzX3BhcnNlX2lwdjZfYWRkcmVzcyhjaGFyICpzdHJpbmcsIHNpemVfdCBzdHJfbGVuLAotCQkJCSAgIHN0cnVjdCBzb2NrYWRkciAqc2FwLCBzaXplX3QgKmFkZHJfbGVuKQotewotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDsKLQl1OCAqYWRkciA9ICh1OCAqKSZzaW42LT5zaW42X2FkZHIuaW42X3U7Ci0JY29uc3QgY2hhciAqZGVsaW07Ci0KLQlpZiAoc3RyX2xlbiA8PSBJTkVUNl9BRERSU1RSTEVOKSB7Ci0JCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBwYXJzaW5nIElQdjYgYWRkcmVzcyAlKnNcbiIsCi0JCQkJKGludClzdHJfbGVuLCBzdHJpbmcpOwotCi0JCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0JCSphZGRyX2xlbiA9IHNpemVvZigqc2luNik7Ci0JCWlmIChpbjZfcHRvbihzdHJpbmcsIHN0cl9sZW4sIGFkZHIsCi0JCQkJCUlQVjZfU0NPUEVfREVMSU1JVEVSLCAmZGVsaW0pICE9IDApIHsKLQkJCWlmIChuZnNfcGFyc2VfaXB2Nl9zY29wZV9pZChzdHJpbmcsIHN0cl9sZW4sCi0JCQkJCQkJZGVsaW0sIHNpbjYpICE9IDApCi0JCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0Jc2FwLT5zYV9mYW1pbHkgPSBBRl9VTlNQRUM7Ci0JKmFkZHJfbGVuID0gMDsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBuZnNfcGFyc2VfaXB2Nl9hZGRyZXNzKGNoYXIgKnN0cmluZywgc2l6ZV90IHN0cl9sZW4sCi0JCQkJICAgc3RydWN0IHNvY2thZGRyICpzYXAsIHNpemVfdCAqYWRkcl9sZW4pCi17Ci0Jc2FwLT5zYV9mYW1pbHkgPSBBRl9VTlNQRUM7Ci0JKmFkZHJfbGVuID0gMDsKLX0KLSNlbmRpZgotCiAvKgotICogQ29uc3RydWN0IGEgc29ja2FkZHIgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mIGEgc3RyaW5nIHRoYXQgY29udGFpbnMKLSAqIGFuIElQIGFkZHJlc3MgaW4gcHJlc2VudGF0aW9uIGZvcm1hdC4KLSAqCi0gKiBJZiB0aGVyZSBpcyBhIHByb2JsZW0gY29uc3RydWN0aW5nIHRoZSBuZXcgc29ja2FkZHIsIHNldCB0aGUgYWRkcmVzcwotICogZmFtaWx5IHRvIEFGX1VOU1BFQy4KKyAqIFNlbGVjdCBiZXR3ZWVuIGEgZGVmYXVsdCBwb3J0IHZhbHVlIGFuZCBhIHVzZXItc3BlY2lmaWVkIHBvcnQgdmFsdWUuCisgKiBJZiBhIHplcm8gdmFsdWUgaXMgc2V0LCB0aGVuIGF1dG9iaW5kIHdpbGwgYmUgdXNlZC4KICAqLwotdm9pZCBuZnNfcGFyc2VfaXBfYWRkcmVzcyhjaGFyICpzdHJpbmcsIHNpemVfdCBzdHJfbGVuLAotCQkJCSBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgc2l6ZV90ICphZGRyX2xlbikKK3N0YXRpYyB2b2lkIG5mc19zZXRfZGVmYXVsdF9wb3J0KHN0cnVjdCBzb2NrYWRkciAqc2FwLCBjb25zdCBpbnQgcGFyc2VkX3BvcnQsCisJCQkJIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRlZmF1bHRfcG9ydCkKIHsKLQl1bnNpZ25lZCBpbnQgaSwgY29sb25zOworCXVuc2lnbmVkIHNob3J0IHBvcnQgPSBkZWZhdWx0X3BvcnQ7CiAKLQljb2xvbnMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBzdHJfbGVuOyBpKyspCi0JCWlmIChzdHJpbmdbaV0gPT0gJzonKQotCQkJY29sb25zKys7CisJaWYgKHBhcnNlZF9wb3J0ICE9IE5GU19VTlNQRUNfUE9SVCkKKwkJcG9ydCA9IHBhcnNlZF9wb3J0OwogCi0JaWYgKGNvbG9ucyA+PSAyKQotCQluZnNfcGFyc2VfaXB2Nl9hZGRyZXNzKHN0cmluZywgc3RyX2xlbiwgc2FwLCBhZGRyX2xlbik7Ci0JZWxzZQotCQluZnNfcGFyc2VfaXB2NF9hZGRyZXNzKHN0cmluZywgc3RyX2xlbiwgc2FwLCBhZGRyX2xlbik7CisJcnBjX3NldF9wb3J0KHNhcCwgcG9ydCk7CiB9CiAKIC8qCkBAIC05MDQsOCArODA1LDYgQEAKIAogLyoKICAqIFBhcnNlIHRoZSB2YWx1ZSBvZiB0aGUgJ3NlYz0nIG9wdGlvbi4KLSAqCi0gKiBUaGUgZmxhdm9yX2xlbiBzZXR0aW5nIGlzIGZvciB2NCBtb3VudHMuCiAgKi8KIHN0YXRpYyBpbnQgbmZzX3BhcnNlX3NlY3VyaXR5X2ZsYXZvcnMoY2hhciAqdmFsdWUsCiAJCQkJICAgICAgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqbW50KQpAQCAtOTE2LDUzICs4MTUsNDMgQEAKIAogCXN3aXRjaCAobWF0Y2hfdG9rZW4odmFsdWUsIG5mc19zZWNmbGF2b3JfdG9rZW5zLCBhcmdzKSkgewogCWNhc2UgT3B0X3NlY19ub25lOgotCQltbnQtPmF1dGhfZmxhdm9yX2xlbiA9IDA7CiAJCW1udC0+YXV0aF9mbGF2b3JzWzBdID0gUlBDX0FVVEhfTlVMTDsKIAkJYnJlYWs7CiAJY2FzZSBPcHRfc2VjX3N5czoKLQkJbW50LT5hdXRoX2ZsYXZvcl9sZW4gPSAwOwogCQltbnQtPmF1dGhfZmxhdm9yc1swXSA9IFJQQ19BVVRIX1VOSVg7CiAJCWJyZWFrOwogCWNhc2UgT3B0X3NlY19rcmI1OgotCQltbnQtPmF1dGhfZmxhdm9yX2xlbiA9IDE7CiAJCW1udC0+YXV0aF9mbGF2b3JzWzBdID0gUlBDX0FVVEhfR1NTX0tSQjU7CiAJCWJyZWFrOwogCWNhc2UgT3B0X3NlY19rcmI1aToKLQkJbW50LT5hdXRoX2ZsYXZvcl9sZW4gPSAxOwogCQltbnQtPmF1dGhfZmxhdm9yc1swXSA9IFJQQ19BVVRIX0dTU19LUkI1STsKIAkJYnJlYWs7CiAJY2FzZSBPcHRfc2VjX2tyYjVwOgotCQltbnQtPmF1dGhfZmxhdm9yX2xlbiA9IDE7CiAJCW1udC0+YXV0aF9mbGF2b3JzWzBdID0gUlBDX0FVVEhfR1NTX0tSQjVQOwogCQlicmVhazsKIAljYXNlIE9wdF9zZWNfbGtleToKLQkJbW50LT5hdXRoX2ZsYXZvcl9sZW4gPSAxOwogCQltbnQtPmF1dGhfZmxhdm9yc1swXSA9IFJQQ19BVVRIX0dTU19MS0VZOwogCQlicmVhazsKIAljYXNlIE9wdF9zZWNfbGtleWk6Ci0JCW1udC0+YXV0aF9mbGF2b3JfbGVuID0gMTsKIAkJbW50LT5hdXRoX2ZsYXZvcnNbMF0gPSBSUENfQVVUSF9HU1NfTEtFWUk7CiAJCWJyZWFrOwogCWNhc2UgT3B0X3NlY19sa2V5cDoKLQkJbW50LT5hdXRoX2ZsYXZvcl9sZW4gPSAxOwogCQltbnQtPmF1dGhfZmxhdm9yc1swXSA9IFJQQ19BVVRIX0dTU19MS0VZUDsKIAkJYnJlYWs7CiAJY2FzZSBPcHRfc2VjX3Nwa206Ci0JCW1udC0+YXV0aF9mbGF2b3JfbGVuID0gMTsKIAkJbW50LT5hdXRoX2ZsYXZvcnNbMF0gPSBSUENfQVVUSF9HU1NfU1BLTTsKIAkJYnJlYWs7CiAJY2FzZSBPcHRfc2VjX3Nwa21pOgotCQltbnQtPmF1dGhfZmxhdm9yX2xlbiA9IDE7CiAJCW1udC0+YXV0aF9mbGF2b3JzWzBdID0gUlBDX0FVVEhfR1NTX1NQS01JOwogCQlicmVhazsKIAljYXNlIE9wdF9zZWNfc3BrbXA6Ci0JCW1udC0+YXV0aF9mbGF2b3JfbGVuID0gMTsKIAkJbW50LT5hdXRoX2ZsYXZvcnNbMF0gPSBSUENfQVVUSF9HU1NfU1BLTVA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KIAorCW1udC0+YXV0aF9mbGF2b3JfbGVuID0gMTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTAwMSw3ICs4OTAsNiBAQAogCXdoaWxlICgocCA9IHN0cnNlcCgmcmF3LCAiLCIpKSAhPSBOVUxMKSB7CiAJCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKIAkJdW5zaWduZWQgbG9uZyBvcHRpb247Ci0JCWludCBpbnRfb3B0aW9uOwogCQlpbnQgdG9rZW47CiAKIAkJaWYgKCEqcCkKQEAgLTEwNDcsMTAgKzkzNSwxOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3YyOgogCQkJbW50LT5mbGFncyAmPSB+TkZTX01PVU5UX1ZFUjM7CisJCQltbnQtPnZlcnNpb24gPSAyOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3YzOgogCQkJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfVkVSMzsKKwkJCW1udC0+dmVyc2lvbiA9IDM7CiAJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfTkZTX1Y0CisJCWNhc2UgT3B0X3Y0OgorCQkJbW50LT5mbGFncyAmPSB+TkZTX01PVU5UX1ZFUjM7CisJCQltbnQtPnZlcnNpb24gPSA0OworCQkJYnJlYWs7CisjZW5kaWYKIAkJY2FzZSBPcHRfdWRwOgogCQkJbW50LT5mbGFncyAmPSB+TkZTX01PVU5UX1RDUDsKIAkJCW1udC0+bmZzX3NlcnZlci5wcm90b2NvbCA9IFhQUlRfVFJBTlNQT1JUX1VEUDsKQEAgLTEyNjQsMjAgKzExNjAsMzMgQEAKIAkJCXN3aXRjaCAob3B0aW9uKSB7CiAJCQljYXNlIE5GUzJfVkVSU0lPTjoKIAkJCQltbnQtPmZsYWdzICY9IH5ORlNfTU9VTlRfVkVSMzsKKwkJCQltbnQtPnZlcnNpb24gPSAyOwogCQkJCWJyZWFrOwogCQkJY2FzZSBORlMzX1ZFUlNJT046CiAJCQkJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfVkVSMzsKKwkJCQltbnQtPnZlcnNpb24gPSAzOwogCQkJCWJyZWFrOworI2lmZGVmIENPTkZJR19ORlNfVjQKKwkJCWNhc2UgTkZTNF9WRVJTSU9OOgorCQkJCW1udC0+ZmxhZ3MgJj0gfk5GU19NT1VOVF9WRVIzOworCQkJCW1udC0+dmVyc2lvbiA9IDQ7CisJCQkJYnJlYWs7CisjZW5kaWYKIAkJCWRlZmF1bHQ6CiAJCQkJZ290byBvdXRfaW52YWxpZF92YWx1ZTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIE9wdF9taW5vcnZlcnNpb246Ci0JCQlpZiAobWF0Y2hfaW50KGFyZ3MsICZpbnRfb3B0aW9uKSkKLQkJCQlyZXR1cm4gMDsKLQkJCWlmIChpbnRfb3B0aW9uIDwgMCB8fCBpbnRfb3B0aW9uID4gTkZTNF9NQVhfTUlOT1JfVkVSU0lPTikKLQkJCQlyZXR1cm4gMDsKLQkJCW1udC0+bWlub3J2ZXJzaW9uID0gaW50X29wdGlvbjsKKwkJCXN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdzKTsKKwkJCWlmIChzdHJpbmcgPT0gTlVMTCkKKwkJCQlnb3RvIG91dF9ub21lbTsKKwkJCXJjID0gc3RyaWN0X3N0cnRvdWwoc3RyaW5nLCAxMCwgJm9wdGlvbik7CisJCQlrZnJlZShzdHJpbmcpOworCQkJaWYgKHJjICE9IDApCisJCQkJZ290byBvdXRfaW52YWxpZF92YWx1ZTsKKwkJCWlmIChvcHRpb24gPiBORlM0X01BWF9NSU5PUl9WRVJTSU9OKQorCQkJCWdvdG8gb3V0X2ludmFsaWRfdmFsdWU7CisJCQltbnQtPm1pbm9ydmVyc2lvbiA9IG9wdGlvbjsKIAkJCWJyZWFrOwogCiAJCS8qCkBAIC0xMzUyLDExICsxMjYxLDE0IEBACiAJCQlzdHJpbmcgPSBtYXRjaF9zdHJkdXAoYXJncyk7CiAJCQlpZiAoc3RyaW5nID09IE5VTEwpCiAJCQkJZ290byBvdXRfbm9tZW07Ci0JCQluZnNfcGFyc2VfaXBfYWRkcmVzcyhzdHJpbmcsIHN0cmxlbihzdHJpbmcpLAotCQkJCQkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikKLQkJCQkJCSZtbnQtPm5mc19zZXJ2ZXIuYWRkcmVzcywKLQkJCQkJICAgICAmbW50LT5uZnNfc2VydmVyLmFkZHJsZW4pOworCQkJbW50LT5uZnNfc2VydmVyLmFkZHJsZW4gPQorCQkJCXJwY19wdG9uKHN0cmluZywgc3RybGVuKHN0cmluZyksCisJCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikKKwkJCQkJJm1udC0+bmZzX3NlcnZlci5hZGRyZXNzLAorCQkJCQlzaXplb2YobW50LT5uZnNfc2VydmVyLmFkZHJlc3MpKTsKIAkJCWtmcmVlKHN0cmluZyk7CisJCQlpZiAobW50LT5uZnNfc2VydmVyLmFkZHJsZW4gPT0gMCkKKwkJCQlnb3RvIG91dF9pbnZhbGlkX2FkZHJlc3M7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfY2xpZW50YWRkcjoKIAkJCXN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdzKTsKQEAgLTEzNzYsMTEgKzEyODgsMTQgQEAKIAkJCXN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdzKTsKIAkJCWlmIChzdHJpbmcgPT0gTlVMTCkKIAkJCQlnb3RvIG91dF9ub21lbTsKLQkJCW5mc19wYXJzZV9pcF9hZGRyZXNzKHN0cmluZywgc3RybGVuKHN0cmluZyksCi0JCQkJCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKQotCQkJCQkJJm1udC0+bW91bnRfc2VydmVyLmFkZHJlc3MsCi0JCQkJCSAgICAgJm1udC0+bW91bnRfc2VydmVyLmFkZHJsZW4pOworCQkJbW50LT5tb3VudF9zZXJ2ZXIuYWRkcmxlbiA9CisJCQkJcnBjX3B0b24oc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSwKKwkJCQkJKHN0cnVjdCBzb2NrYWRkciAqKQorCQkJCQkmbW50LT5tb3VudF9zZXJ2ZXIuYWRkcmVzcywKKwkJCQkJc2l6ZW9mKG1udC0+bW91bnRfc2VydmVyLmFkZHJlc3MpKTsKIAkJCWtmcmVlKHN0cmluZyk7CisJCQlpZiAobW50LT5tb3VudF9zZXJ2ZXIuYWRkcmxlbiA9PSAwKQorCQkJCWdvdG8gb3V0X2ludmFsaWRfYWRkcmVzczsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9sb29rdXBjYWNoZToKIAkJCXN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdzKTsKQEAgLTE0MzIsOCArMTM0NywxMSBAQAogCiAJcmV0dXJuIDE7CiAKK291dF9pbnZhbGlkX2FkZHJlc3M6CisJcHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBiYWQgSVAgYWRkcmVzcyBzcGVjaWZpZWQ6ICVzXG4iLCBwKTsKKwlyZXR1cm4gMDsKIG91dF9pbnZhbGlkX3ZhbHVlOgotCXByaW50ayhLRVJOX0lORk8gIk5GUzogYmFkIG1vdW50IG9wdGlvbiB2YWx1ZSBzcGVjaWZpZWQ6ICVzIFxuIiwgcCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiTkZTOiBiYWQgbW91bnQgb3B0aW9uIHZhbHVlIHNwZWNpZmllZDogJXNcbiIsIHApOwogCXJldHVybiAwOwogb3V0X25vbWVtOgogCXByaW50ayhLRVJOX0lORk8gIk5GUzogbm90IGVub3VnaCBtZW1vcnkgdG8gcGFyc2Ugb3B0aW9uXG4iKTsKQEAgLTE0NDUsMTMgKzEzNjMsNjAgQEAKIH0KIAogLyoKKyAqIE1hdGNoIHRoZSByZXF1ZXN0ZWQgYXV0aCBmbGF2b3JzIHdpdGggdGhlIGxpc3QgcmV0dXJuZWQgYnkKKyAqIHRoZSBzZXJ2ZXIuICBSZXR1cm5zIHplcm8gYW5kIHNldHMgdGhlIG1vdW50J3MgYXV0aGVudGljYXRpb24KKyAqIGZsYXZvciBvbiBzdWNjZXNzOyByZXR1cm5zIC1FQUNDRVMgaWYgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQKKyAqIHRoZSByZXF1ZXN0ZWQgZmxhdm9yLgorICovCitzdGF0aWMgaW50IG5mc193YWxrX2F1dGhsaXN0KHN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKmFyZ3MsCisJCQkgICAgIHN0cnVjdCBuZnNfbW91bnRfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgaiwgc2VydmVyX2F1dGhsaXN0X2xlbiA9ICoocmVxdWVzdC0+YXV0aF9mbGF2X2xlbik7CisKKwkvKgorCSAqIENlcnRhaW4gcmVsZWFzZXMgb2YgTGludXgncyBtb3VudGQgcmV0dXJuIGFuIGVtcHR5CisJICogZmxhdm9yIGxpc3QuICBUbyBwcmV2ZW50IGJlaGF2aW9yYWwgcmVncmVzc2lvbiB3aXRoCisJICogdGhlc2Ugc2VydmVycyAoaWUuIHJlamVjdGluZyBtb3VudHMgdGhhdCB1c2VkIHRvCisJICogc3VjY2VlZCksIHJldmVydCB0byBwcmUtMi42LjMyIGJlaGF2aW9yIChubyBjaGVja2luZykKKwkgKiBpZiB0aGUgcmV0dXJuZWQgZmxhdm9yIGxpc3QgaXMgZW1wdHkuCisJICovCisJaWYgKHNlcnZlcl9hdXRobGlzdF9sZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdlIGF2b2lkIHNvcGhpc3RpY2F0ZWQgbmVnb3RpYXRpbmcgaGVyZSwgYXMgdGhlcmUgYXJlCisJICogcGxlbnR5IG9mIGNhc2VzIHdoZXJlIHdlIGNhbiBnZXQgaXQgd3JvbmcsIHByb3ZpZGluZworCSAqIGVpdGhlciB0b28gbGl0dGxlIG9yIHRvbyBtdWNoIHNlY3VyaXR5LgorCSAqCisJICogUkZDIDI2MjMsIHNlY3Rpb24gMi43IHN1Z2dlc3RzIHdlIFNIT1VMRCBwcmVmZXIgdGhlCisJICogZmxhdm9yIGxpc3RlZCBmaXJzdC4gIEhvd2V2ZXIsIHNvbWUgc2VydmVycyBsaXN0CisJICogQVVUSF9OVUxMIGZpcnN0LiAgT3VyIGNhbGxlciBwbGFudHMgQVVUSF9TWVMsIHRoZQorCSAqIHByZWZlcnJlZCBkZWZhdWx0LCBpbiBhcmdzLT5hdXRoX2ZsYXZvcnNbMF0gaWYgdXNlcgorCSAqIGRpZG4ndCBzcGVjaWZ5IHNlYz0gbW91bnQgb3B0aW9uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5hdXRoX2ZsYXZvcl9sZW47IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IHNlcnZlcl9hdXRobGlzdF9sZW47IGorKykKKwkJCWlmIChhcmdzLT5hdXRoX2ZsYXZvcnNbaV0gPT0gcmVxdWVzdC0+YXV0aF9mbGF2c1tqXSkgeworCQkJCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiB1c2luZyBhdXRoIGZsYXZvciAlZFxuIiwKKwkJCQkJcmVxdWVzdC0+YXV0aF9mbGF2c1tqXSk7CisJCQkJYXJncy0+YXV0aF9mbGF2b3JzWzBdID0gcmVxdWVzdC0+YXV0aF9mbGF2c1tqXTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCByZXF1ZXN0ZWQgYXV0aCBmbGF2b3JcbiIpOworCW5mc191bW91bnQocmVxdWVzdCk7CisJcmV0dXJuIC1FQUNDRVM7Cit9CisKKy8qCiAgKiBVc2UgdGhlIHJlbW90ZSBzZXJ2ZXIncyBNT1VOVCBzZXJ2aWNlIHRvIHJlcXVlc3QgdGhlIE5GUyBmaWxlIGhhbmRsZQogICogY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQgcGF0aC4KICAqLwogc3RhdGljIGludCBuZnNfdHJ5X21vdW50KHN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKmFyZ3MsCiAJCQkgc3RydWN0IG5mc19maCAqcm9vdF9maCkKIHsKLQl1bnNpZ25lZCBpbnQgYXV0aF9mbGF2b3JfbGVuID0gMDsKKwlycGNfYXV0aGZsYXZvcl90IHNlcnZlcl9hdXRobGlzdFtORlNfTUFYX1NFQ0ZMQVZPUlNdOworCXVuc2lnbmVkIGludCBzZXJ2ZXJfYXV0aGxpc3RfbGVuID0gQVJSQVlfU0laRShzZXJ2ZXJfYXV0aGxpc3QpOwogCXN0cnVjdCBuZnNfbW91bnRfcmVxdWVzdCByZXF1ZXN0ID0gewogCQkuc2FwCQk9IChzdHJ1Y3Qgc29ja2FkZHIgKikKIAkJCQkJCSZhcmdzLT5tb3VudF9zZXJ2ZXIuYWRkcmVzcywKQEAgLTE0NTksNyArMTQyNCw4IEBACiAJCS5wcm90b2NvbAk9IGFyZ3MtPm1vdW50X3NlcnZlci5wcm90b2NvbCwKIAkJLmZoCQk9IHJvb3RfZmgsCiAJCS5ub3Jlc3Zwb3J0CT0gYXJncy0+ZmxhZ3MgJiBORlNfTU9VTlRfTk9SRVNWUE9SVCwKLQkJLmF1dGhfZmxhdl9sZW4JPSAmYXV0aF9mbGF2b3JfbGVuLAorCQkuYXV0aF9mbGF2X2xlbgk9ICZzZXJ2ZXJfYXV0aGxpc3RfbGVuLAorCQkuYXV0aF9mbGF2cwk9IHNlcnZlcl9hdXRobGlzdCwKIAl9OwogCWludCBzdGF0dXM7CiAKQEAgLTE0ODUsMjMgKzE0NTEsMjUgQEAKIAkJYXJncy0+bW91bnRfc2VydmVyLmFkZHJsZW4gPSBhcmdzLT5uZnNfc2VydmVyLmFkZHJsZW47CiAJfQogCXJlcXVlc3Quc2FsZW4gPSBhcmdzLT5tb3VudF9zZXJ2ZXIuYWRkcmxlbjsKLQotCS8qCi0JICogYXV0b2JpbmQgd2lsbCBiZSB1c2VkIGlmIG1vdW50X3NlcnZlci5wb3J0ID09IDAKLQkgKi8KLQluZnNfc2V0X3BvcnQocmVxdWVzdC5zYXAsIGFyZ3MtPm1vdW50X3NlcnZlci5wb3J0KTsKKwluZnNfc2V0X2RlZmF1bHRfcG9ydChyZXF1ZXN0LnNhcCwgYXJncy0+bW91bnRfc2VydmVyLnBvcnQsIDApOwogCiAJLyoKIAkgKiBOb3cgYXNrIHRoZSBtb3VudCBzZXJ2ZXIgdG8gbWFwIG91ciBleHBvcnQgcGF0aAogCSAqIHRvIGEgZmlsZSBoYW5kbGUuCiAJICovCiAJc3RhdHVzID0gbmZzX21vdW50KCZyZXF1ZXN0KTsKLQlpZiAoc3RhdHVzID09IDApCi0JCXJldHVybiAwOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkZnByaW50ayhNT1VOVCwgIk5GUzogdW5hYmxlIHRvIG1vdW50IHNlcnZlciAlcywgZXJyb3IgJWRcbiIsCisJCQkJcmVxdWVzdC5ob3N0bmFtZSwgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CiAKLQlkZnByaW50ayhNT1VOVCwgIk5GUzogdW5hYmxlIHRvIG1vdW50IHNlcnZlciAlcywgZXJyb3IgJWRcbiIsCi0JCQlyZXF1ZXN0Lmhvc3RuYW1lLCBzdGF0dXMpOwotCXJldHVybiBzdGF0dXM7CisJLyoKKwkgKiBNTlR2MSAoTkZTdjIpIGRvZXMgbm90IHN1cHBvcnQgYXV0aCBmbGF2b3IgbmVnb3RpYXRpb24uCisJICovCisJaWYgKGFyZ3MtPm1vdW50X3NlcnZlci52ZXJzaW9uICE9IE5GU19NTlQzX1ZFUlNJT04pCisJCXJldHVybiAwOworCXJldHVybiBuZnNfd2Fsa19hdXRobGlzdChhcmdzLCAmcmVxdWVzdCk7CiB9CiAKIHN0YXRpYyBpbnQgbmZzX3BhcnNlX3NpbXBsZV9ob3N0bmFtZShjb25zdCBjaGFyICpkZXZfbmFtZSwKQEAgLTE2NjEsNiArMTYyOSw3IEBACiAJCQkJICAgY29uc3QgY2hhciAqZGV2X25hbWUpCiB7CiAJc3RydWN0IG5mc19tb3VudF9kYXRhICpkYXRhID0gKHN0cnVjdCBuZnNfbW91bnRfZGF0YSAqKW9wdGlvbnM7CisJc3RydWN0IHNvY2thZGRyICpzYXAgPSAoc3RydWN0IHNvY2thZGRyICopJmFyZ3MtPm5mc19zZXJ2ZXIuYWRkcmVzczsKIAogCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gb3V0X25vX2RhdGE7CkBAIC0xNjcyLDEwICsxNjQxLDEyIEBACiAJYXJncy0+YWNyZWdtYXgJCT0gTkZTX0RFRl9BQ1JFR01BWDsKIAlhcmdzLT5hY2Rpcm1pbgkJPSBORlNfREVGX0FDRElSTUlOOwogCWFyZ3MtPmFjZGlybWF4CQk9IE5GU19ERUZfQUNESVJNQVg7Ci0JYXJncy0+bW91bnRfc2VydmVyLnBvcnQJPSAwOwkvKiBhdXRvYmluZCB1bmxlc3MgdXNlciBzZXRzIHBvcnQgKi8KLQlhcmdzLT5uZnNfc2VydmVyLnBvcnQJPSAwOwkvKiBhdXRvYmluZCB1bmxlc3MgdXNlciBzZXRzIHBvcnQgKi8KKwlhcmdzLT5tb3VudF9zZXJ2ZXIucG9ydAk9IE5GU19VTlNQRUNfUE9SVDsKKwlhcmdzLT5uZnNfc2VydmVyLnBvcnQJPSBORlNfVU5TUEVDX1BPUlQ7CiAJYXJncy0+bmZzX3NlcnZlci5wcm90b2NvbCA9IFhQUlRfVFJBTlNQT1JUX1RDUDsKIAlhcmdzLT5hdXRoX2ZsYXZvcnNbMF0JPSBSUENfQVVUSF9VTklYOworCWFyZ3MtPmF1dGhfZmxhdm9yX2xlbgk9IDE7CisJYXJncy0+bWlub3J2ZXJzaW9uCT0gMDsKIAogCXN3aXRjaCAoZGF0YS0+dmVyc2lvbikgewogCWNhc2UgMToKQEAgLTE2OTcsOCArMTY2OCwxMSBAQAogCQkJaWYgKGRhdGEtPnJvb3Quc2l6ZSA+IE5GUzNfRkhTSVpFIHx8IGRhdGEtPnJvb3Quc2l6ZSA9PSAwKQogCQkJCWdvdG8gb3V0X2ludmFsaWRfZmg7CiAJCQltbnRmaC0+c2l6ZSA9IGRhdGEtPnJvb3Quc2l6ZTsKLQkJfSBlbHNlCisJCQlhcmdzLT52ZXJzaW9uID0gMzsKKwkJfSBlbHNlIHsKIAkJCW1udGZoLT5zaXplID0gTkZTMl9GSFNJWkU7CisJCQlhcmdzLT52ZXJzaW9uID0gMjsKKwkJfQogCiAKIAkJbWVtY3B5KG1udGZoLT5kYXRhLCBkYXRhLT5yb290LmRhdGEsIG1udGZoLT5zaXplKTsKQEAgLTE3MjAsMTEgKzE2OTQsOSBAQAogCQlhcmdzLT5hY2Rpcm1pbgkJPSBkYXRhLT5hY2Rpcm1pbjsKIAkJYXJncy0+YWNkaXJtYXgJCT0gZGF0YS0+YWNkaXJtYXg7CiAKLQkJbWVtY3B5KCZhcmdzLT5uZnNfc2VydmVyLmFkZHJlc3MsICZkYXRhLT5hZGRyLAotCQkgICAgICAgc2l6ZW9mKGRhdGEtPmFkZHIpKTsKKwkJbWVtY3B5KHNhcCwgJmRhdGEtPmFkZHIsIHNpemVvZihkYXRhLT5hZGRyKSk7CiAJCWFyZ3MtPm5mc19zZXJ2ZXIuYWRkcmxlbiA9IHNpemVvZihkYXRhLT5hZGRyKTsKLQkJaWYgKCFuZnNfdmVyaWZ5X3NlcnZlcl9hZGRyZXNzKChzdHJ1Y3Qgc29ja2FkZHIgKikKLQkJCQkJCSZhcmdzLT5uZnNfc2VydmVyLmFkZHJlc3MpKQorCQlpZiAoIW5mc192ZXJpZnlfc2VydmVyX2FkZHJlc3Moc2FwKSkKIAkJCWdvdG8gb3V0X25vX2FkZHJlc3M7CiAKIAkJaWYgKCEoZGF0YS0+ZmxhZ3MgJiBORlNfTU9VTlRfVENQKSkKQEAgLTE3NzIsMTIgKzE3NDQsMTggQEAKIAkJaWYgKG5mc19wYXJzZV9tb3VudF9vcHRpb25zKChjaGFyICopb3B0aW9ucywgYXJncykgPT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmICghbmZzX3ZlcmlmeV9zZXJ2ZXJfYWRkcmVzcygoc3RydWN0IHNvY2thZGRyICopCi0JCQkJCQkmYXJncy0+bmZzX3NlcnZlci5hZGRyZXNzKSkKKwkJaWYgKCFuZnNfdmVyaWZ5X3NlcnZlcl9hZGRyZXNzKHNhcCkpCiAJCQlnb3RvIG91dF9ub19hZGRyZXNzOwogCi0JCW5mc19zZXRfcG9ydCgoc3RydWN0IHNvY2thZGRyICopJmFyZ3MtPm5mc19zZXJ2ZXIuYWRkcmVzcywKLQkJCQlhcmdzLT5uZnNfc2VydmVyLnBvcnQpOworCQlpZiAoYXJncy0+dmVyc2lvbiA9PSA0KQorI2lmZGVmIENPTkZJR19ORlNfVjQKKwkJCXJldHVybiBuZnM0X3ZhbGlkYXRlX3RleHRfbW91bnRfZGF0YShvcHRpb25zLAorCQkJCQkJCSAgICAgYXJncywgZGV2X25hbWUpOworI2Vsc2UKKwkJCWdvdG8gb3V0X3Y0X25vdF9jb21waWxlZDsKKyNlbmRpZgorCisJCW5mc19zZXRfZGVmYXVsdF9wb3J0KHNhcCwgYXJncy0+bmZzX3NlcnZlci5wb3J0LCAwKTsKIAogCQluZnNfc2V0X21vdW50X3RyYW5zcG9ydF9wcm90b2NvbChhcmdzKTsKIApAQCAtMTgyNSw2ICsxODAzLDEyIEBACiAJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiAjZW5kaWYgLyogIUNPTkZJR19ORlNfVjMgKi8KIAorI2lmbmRlZiBDT05GSUdfTkZTX1Y0CitvdXRfdjRfbm90X2NvbXBpbGVkOgorCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBORlN2NCBpcyBub3QgY29tcGlsZWQgaW50byBrZXJuZWxcbiIpOworCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOworI2VuZGlmIC8qICFDT05GSUdfTkZTX1Y0ICovCisKIG91dF9ub21lbToKIAlkZnByaW50ayhNT1VOVCwgIk5GUzogbm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIG1vdW50IG9wdGlvbnNcbiIpOwogCXJldHVybiAtRU5PTUVNOwpAQCAtMTkzNCw2ICsxOTE4LDggQEAKIAlpZiAoc2VydmVyLT5mbGFncyAmIE5GU19NT1VOVF9OT0FDKQogCQlzYi0+c19mbGFncyB8PSBNU19TWU5DSFJPTk9VUzsKIAorCXNiLT5zX2JkaSA9ICZzZXJ2ZXItPmJhY2tpbmdfZGV2X2luZm87CisKIAluZnNfc3VwZXJfc2V0X21heGJ5dGVzKHNiLCBzZXJ2ZXItPm1heGZpbGVzaXplKTsKIH0KIApAQCAtMjEyMCw2ICsyMTA2LDE0IEBACiAJaWYgKGVycm9yIDwgMCkKIAkJZ290byBvdXQ7CiAKKyNpZmRlZiBDT05GSUdfTkZTX1Y0CisJaWYgKGRhdGEtPnZlcnNpb24gPT0gNCkgeworCQllcnJvciA9IG5mczRfdHJ5X21vdW50KGZsYWdzLCBkZXZfbmFtZSwgZGF0YSwgbW50KTsKKwkJa2ZyZWUoZGF0YS0+Y2xpZW50X2FkZHJlc3MpOworCQlnb3RvIG91dDsKKwl9CisjZW5kaWYJLyogQ09ORklHX05GU19WNCAqLworCiAJLyogR2V0IGEgdm9sdW1lIHJlcHJlc2VudGF0aW9uICovCiAJc2VydmVyID0gbmZzX2NyZWF0ZV9zZXJ2ZXIoZGF0YSwgbW50ZmgpOwogCWlmIChJU19FUlIoc2VydmVyKSkgewpAQCAtMjMxNyw2ICsyMzExLDQzIEBACiAJYXJncy0+ZmxhZ3MgJj0gfihORlNfTU9VTlRfTk9OTE18TkZTX01PVU5UX05PQUNMfE5GU19NT1VOVF9WRVIzKTsKIH0KIAorc3RhdGljIGludCBuZnM0X3ZhbGlkYXRlX3RleHRfbW91bnRfZGF0YSh2b2lkICpvcHRpb25zLAorCQkJCQkgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqYXJncywKKwkJCQkJIGNvbnN0IGNoYXIgKmRldl9uYW1lKQoreworCXN0cnVjdCBzb2NrYWRkciAqc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhcmdzLT5uZnNfc2VydmVyLmFkZHJlc3M7CisKKwluZnNfc2V0X2RlZmF1bHRfcG9ydChzYXAsIGFyZ3MtPm5mc19zZXJ2ZXIucG9ydCwgTkZTX1BPUlQpOworCisJbmZzX3ZhbGlkYXRlX3RyYW5zcG9ydF9wcm90b2NvbChhcmdzKTsKKworCW5mczRfdmFsaWRhdGVfbW91bnRfZmxhZ3MoYXJncyk7CisKKwlpZiAoYXJncy0+dmVyc2lvbiAhPSA0KSB7CisJCWRmcHJpbnRrKE1PVU5ULAorCQkJICJORlM0OiBJbGxlZ2FsIG1vdW50IHZlcnNpb25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoYXJncy0+YXV0aF9mbGF2b3JfbGVuID4gMSkgeworCQlkZnByaW50ayhNT1VOVCwKKwkJCSAiTkZTNDogVG9vIG1hbnkgUlBDIGF1dGggZmxhdm91cnMgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFyZ3MtPmNsaWVudF9hZGRyZXNzID09IE5VTEwpIHsKKwkJZGZwcmludGsoTU9VTlQsCisJCQkgIk5GUzQ6IG1vdW50IHByb2dyYW0gZGlkbid0IHBhc3MgY2FsbGJhY2sgYWRkcmVzc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBuZnNfcGFyc2VfZGV2bmFtZShkZXZfbmFtZSwKKwkJCQkgICAmYXJncy0+bmZzX3NlcnZlci5ob3N0bmFtZSwKKwkJCQkgICBORlM0X01BWE5BTUxFTiwKKwkJCQkgICAmYXJncy0+bmZzX3NlcnZlci5leHBvcnRfcGF0aCwKKwkJCQkgICBORlM0X01BWFBBVEhMRU4pOworfQorCiAvKgogICogVmFsaWRhdGUgTkZTdjQgbW91bnQgb3B0aW9ucwogICovCkBAIC0yMzI0LDcgKzIzNTUsNyBAQAogCQkJCSAgICBzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICphcmdzLAogCQkJCSAgICBjb25zdCBjaGFyICpkZXZfbmFtZSkKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFwOworCXN0cnVjdCBzb2NrYWRkciAqc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhcmdzLT5uZnNfc2VydmVyLmFkZHJlc3M7CiAJc3RydWN0IG5mczRfbW91bnRfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgbmZzNF9tb3VudF9kYXRhICopb3B0aW9uczsKIAljaGFyICpjOwogCkBAIC0yMzM3LDIzICsyMzY4LDIyIEBACiAJYXJncy0+YWNyZWdtYXgJCT0gTkZTX0RFRl9BQ1JFR01BWDsKIAlhcmdzLT5hY2Rpcm1pbgkJPSBORlNfREVGX0FDRElSTUlOOwogCWFyZ3MtPmFjZGlybWF4CQk9IE5GU19ERUZfQUNESVJNQVg7Ci0JYXJncy0+bmZzX3NlcnZlci5wb3J0CT0gTkZTX1BPUlQ7IC8qIDIwNDkgdW5sZXNzIHVzZXIgc2V0IHBvcnQ9ICovCisJYXJncy0+bmZzX3NlcnZlci5wb3J0CT0gTkZTX1VOU1BFQ19QT1JUOwogCWFyZ3MtPmF1dGhfZmxhdm9yc1swXQk9IFJQQ19BVVRIX1VOSVg7Ci0JYXJncy0+YXV0aF9mbGF2b3JfbGVuCT0gMDsKKwlhcmdzLT5hdXRoX2ZsYXZvcl9sZW4JPSAxOworCWFyZ3MtPnZlcnNpb24JCT0gNDsKIAlhcmdzLT5taW5vcnZlcnNpb24JPSAwOwogCiAJc3dpdGNoIChkYXRhLT52ZXJzaW9uKSB7CiAJY2FzZSAxOgotCQlhcCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYXJncy0+bmZzX3NlcnZlci5hZGRyZXNzOwogCQlpZiAoZGF0YS0+aG9zdF9hZGRybGVuID4gc2l6ZW9mKGFyZ3MtPm5mc19zZXJ2ZXIuYWRkcmVzcykpCiAJCQlnb3RvIG91dF9ub19hZGRyZXNzOwogCQlpZiAoZGF0YS0+aG9zdF9hZGRybGVuID09IDApCiAJCQlnb3RvIG91dF9ub19hZGRyZXNzOwogCQlhcmdzLT5uZnNfc2VydmVyLmFkZHJsZW4gPSBkYXRhLT5ob3N0X2FkZHJsZW47Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihhcCwgZGF0YS0+aG9zdF9hZGRyLCBkYXRhLT5ob3N0X2FkZHJsZW4pKQorCQlpZiAoY29weV9mcm9tX3VzZXIoc2FwLCBkYXRhLT5ob3N0X2FkZHIsIGRhdGEtPmhvc3RfYWRkcmxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKCFuZnNfdmVyaWZ5X3NlcnZlcl9hZGRyZXNzKChzdHJ1Y3Qgc29ja2FkZHIgKikKLQkJCQkJCSZhcmdzLT5uZnNfc2VydmVyLmFkZHJlc3MpKQorCQlpZiAoIW5mc192ZXJpZnlfc2VydmVyX2FkZHJlc3Moc2FwKSkKIAkJCWdvdG8gb3V0X25vX2FkZHJlc3M7CiAKIAkJaWYgKGRhdGEtPmF1dGhfZmxhdm91cmxlbikgewpAQCAtMjM5OSwzOSArMjQyOSwxNCBAQAogCQluZnNfdmFsaWRhdGVfdHJhbnNwb3J0X3Byb3RvY29sKGFyZ3MpOwogCiAJCWJyZWFrOwotCWRlZmF1bHQ6IHsKLQkJaW50IHN0YXR1czsKLQorCWRlZmF1bHQ6CiAJCWlmIChuZnNfcGFyc2VfbW91bnRfb3B0aW9ucygoY2hhciAqKW9wdGlvbnMsIGFyZ3MpID09IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoIW5mc192ZXJpZnlfc2VydmVyX2FkZHJlc3MoKHN0cnVjdCBzb2NrYWRkciAqKQotCQkJCQkJJmFyZ3MtPm5mc19zZXJ2ZXIuYWRkcmVzcykpCisJCWlmICghbmZzX3ZlcmlmeV9zZXJ2ZXJfYWRkcmVzcyhzYXApKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJbmZzX3NldF9wb3J0KChzdHJ1Y3Qgc29ja2FkZHIgKikmYXJncy0+bmZzX3NlcnZlci5hZGRyZXNzLAotCQkJCWFyZ3MtPm5mc19zZXJ2ZXIucG9ydCk7Ci0KLQkJbmZzX3ZhbGlkYXRlX3RyYW5zcG9ydF9wcm90b2NvbChhcmdzKTsKLQotCQluZnM0X3ZhbGlkYXRlX21vdW50X2ZsYWdzKGFyZ3MpOwotCi0JCWlmIChhcmdzLT5hdXRoX2ZsYXZvcl9sZW4gPiAxKQotCQkJZ290byBvdXRfaW52YWxfYXV0aDsKLQotCQlpZiAoYXJncy0+Y2xpZW50X2FkZHJlc3MgPT0gTlVMTCkKLQkJCWdvdG8gb3V0X25vX2NsaWVudF9hZGRyZXNzOwotCi0JCXN0YXR1cyA9IG5mc19wYXJzZV9kZXZuYW1lKGRldl9uYW1lLAotCQkJCQkgICAmYXJncy0+bmZzX3NlcnZlci5ob3N0bmFtZSwKLQkJCQkJICAgTkZTNF9NQVhOQU1MRU4sCi0JCQkJCSAgICZhcmdzLT5uZnNfc2VydmVyLmV4cG9ydF9wYXRoLAotCQkJCQkgICBORlM0X01BWFBBVEhMRU4pOwotCQlpZiAoc3RhdHVzIDwgMCkKLQkJCXJldHVybiBzdGF0dXM7Ci0KLQkJYnJlYWs7Ci0JCX0KKwkJcmV0dXJuIG5mczRfdmFsaWRhdGVfdGV4dF9tb3VudF9kYXRhKG9wdGlvbnMsIGFyZ3MsIGRldl9uYW1lKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI0NDgsMTAgKzI0NTMsNiBAQAogb3V0X25vX2FkZHJlc3M6CiAJZGZwcmludGsoTU9VTlQsICJORlM0OiBtb3VudCBwcm9ncmFtIGRpZG4ndCBwYXNzIHJlbW90ZSBhZGRyZXNzXG4iKTsKIAlyZXR1cm4gLUVJTlZBTDsKLQotb3V0X25vX2NsaWVudF9hZGRyZXNzOgotCWRmcHJpbnRrKE1PVU5ULCAiTkZTNDogbW91bnQgcHJvZ3JhbSBkaWRuJ3QgcGFzcyBjYWxsYmFjayBhZGRyZXNzXG4iKTsKLQlyZXR1cm4gLUVJTlZBTDsKIH0KIAogLyoKQEAgLTI2MTgsMjUgKzI2MTksMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogR2V0IHRoZSBzdXBlcmJsb2NrIGZvciBhbiBORlM0IG1vdW50cG9pbnQKLSAqLwotc3RhdGljIGludCBuZnM0X2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKLQlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpyYXdfZGF0YSwgc3RydWN0IHZmc21vdW50ICptbnQpCitzdGF0aWMgaW50IG5mczRfdHJ5X21vdW50KGludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsCisJCQkgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YSwKKwkJCSBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKLQlzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpkYXRhOwogCWNoYXIgKmV4cG9ydF9wYXRoOwogCXN0cnVjdCB2ZnNtb3VudCAqcm9vdF9tbnQ7Ci0JaW50IGVycm9yID0gLUVOT01FTTsKKwlpbnQgZXJyb3I7CiAKLQlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGF0YSA9PSBOVUxMKQotCQlnb3RvIG91dF9mcmVlX2RhdGE7Ci0KLQkvKiBWYWxpZGF0ZSB0aGUgbW91bnQgZGF0YSAqLwotCWVycm9yID0gbmZzNF92YWxpZGF0ZV9tb3VudF9kYXRhKHJhd19kYXRhLCBkYXRhLCBkZXZfbmFtZSk7Ci0JaWYgKGVycm9yIDwgMCkKLQkJZ290byBvdXQ7CisJZGZwcmludGsoTU9VTlQsICItLT4gbmZzNF90cnlfbW91bnQoKVxuIik7CiAKIAlleHBvcnRfcGF0aCA9IGRhdGEtPm5mc19zZXJ2ZXIuZXhwb3J0X3BhdGg7CiAJZGF0YS0+bmZzX3NlcnZlci5leHBvcnRfcGF0aCA9ICIvIjsKQEAgLTI2NTEsNiArMjY0MiwzMiBAQAogCWVycm9yID0gbmZzX2ZvbGxvd19yZW1vdGVfcGF0aChyb290X21udCwgZXhwb3J0X3BhdGgsIG1udCk7CiAKIG91dDoKKwlkZnByaW50ayhNT1VOVCwgIjwtLSBuZnM0X3RyeV9tb3VudCgpID0gJWQlc1xuIiwgZXJyb3IsCisJCQllcnJvciAhPSAwID8gIiBbZXJyb3JdIiA6ICIiKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiBHZXQgdGhlIHN1cGVyYmxvY2sgZm9yIGFuIE5GUzQgbW91bnRwb2ludAorICovCitzdGF0aWMgaW50IG5mczRfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAorCWludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKnJhd19kYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKwlzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpkYXRhOworCWludCBlcnJvciA9IC1FTk9NRU07CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlX2RhdGE7CisKKwkvKiBWYWxpZGF0ZSB0aGUgbW91bnQgZGF0YSAqLworCWVycm9yID0gbmZzNF92YWxpZGF0ZV9tb3VudF9kYXRhKHJhd19kYXRhLCBkYXRhLCBkZXZfbmFtZSk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnJvciA9IG5mczRfdHJ5X21vdW50KGZsYWdzLCBkZXZfbmFtZSwgZGF0YSwgbW50KTsKKworb3V0OgogCWtmcmVlKGRhdGEtPmNsaWVudF9hZGRyZXNzKTsKIAlrZnJlZShkYXRhLT5uZnNfc2VydmVyLmV4cG9ydF9wYXRoKTsKIAlrZnJlZShkYXRhLT5uZnNfc2VydmVyLmhvc3RuYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMKaW5kZXggYTM0ZmFlMi4uNTNlYjI2YyAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L21pZ3JhdGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CkBAIC0yNiw2ICsyNyw3IEBACiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJpb3N0YXQuaCIKICNpbmNsdWRlICJuZnM0X2ZzLmgiCisjaW5jbHVkZSAiZnNjYWNoZS5oIgogCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJTkZTREJHX1BBR0VDQUNIRQogCkBAIC0yMTgsMjQgKzIyMCwxNyBAQAogCQljbGVhcl9iZGlfY29uZ2VzdGVkKCZuZnNzLT5iYWNraW5nX2Rldl9pbmZvLCBCTEtfUldfQVNZTkMpOwogfQogCi0vKgotICogRmluZCBhbiBhc3NvY2lhdGVkIG5mcyB3cml0ZSByZXF1ZXN0LCBhbmQgcHJlcGFyZSB0byBmbHVzaCBpdCBvdXQKLSAqIE1heSByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIHVzZXIgc2lnbmFsbGVkIG5mc193YWl0X29uX3JlcXVlc3QoKS4KLSAqLwotc3RhdGljIGludCBuZnNfcGFnZV9hc3luY19mbHVzaChzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpwZ2lvLAotCQkJCXN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIHN0cnVjdCBuZnNfcGFnZSAqbmZzX2ZpbmRfYW5kX2xvY2tfcmVxdWVzdChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAlzdHJ1Y3QgbmZzX3BhZ2UgKnJlcTsKIAlpbnQgcmV0OwogCiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlmb3IoOzspIHsKKwlmb3IgKDs7KSB7CiAJCXJlcSA9IG5mc19wYWdlX2ZpbmRfcmVxdWVzdF9sb2NrZWQocGFnZSk7Ci0JCWlmIChyZXEgPT0gTlVMTCkgewotCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJaWYgKHJlcSA9PSBOVUxMKQorCQkJYnJlYWs7CiAJCWlmIChuZnNfc2V0X3BhZ2VfdGFnX2xvY2tlZChyZXEpKQogCQkJYnJlYWs7CiAJCS8qIE5vdGU6IElmIHdlIGhvbGQgdGhlIHBhZ2UgbG9jaywgYXMgaXMgdGhlIGNhc2UgaW4gbmZzX3dyaXRlcGFnZSwKQEAgLTI0NywyMyArMjQyLDQwIEBACiAJCXJldCA9IG5mc193YWl0X29uX3JlcXVlc3QocmVxKTsKIAkJbmZzX3JlbGVhc2VfcmVxdWVzdChyZXEpOwogCQlpZiAocmV0ICE9IDApCi0JCQlyZXR1cm4gcmV0OworCQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAl9Ci0JaWYgKHRlc3RfYml0KFBHX0NMRUFOLCAmcmVxLT53Yl9mbGFncykpIHsKLQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCQlCVUcoKTsKLQl9Ci0JaWYgKG5mc19zZXRfcGFnZV93cml0ZWJhY2socGFnZSkgIT0gMCkgewotCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JCUJVRygpOwotCX0KIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJcmV0dXJuIHJlcTsKK30KKworLyoKKyAqIEZpbmQgYW4gYXNzb2NpYXRlZCBuZnMgd3JpdGUgcmVxdWVzdCwgYW5kIHByZXBhcmUgdG8gZmx1c2ggaXQgb3V0CisgKiBNYXkgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSB1c2VyIHNpZ25hbGxlZCBuZnNfd2FpdF9vbl9yZXF1ZXN0KCkuCisgKi8KK3N0YXRpYyBpbnQgbmZzX3BhZ2VfYXN5bmNfZmx1c2goc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqcGdpbywKKwkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgbmZzX3BhZ2UgKnJlcTsKKwlpbnQgcmV0ID0gMDsKKworCXJlcSA9IG5mc19maW5kX2FuZF9sb2NrX3JlcXVlc3QocGFnZSk7CisJaWYgKCFyZXEpCisJCWdvdG8gb3V0OworCXJldCA9IFBUUl9FUlIocmVxKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gbmZzX3NldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKwlCVUdfT04ocmV0ICE9IDApOworCUJVR19PTih0ZXN0X2JpdChQR19DTEVBTiwgJnJlcS0+d2JfZmxhZ3MpKTsKKwogCWlmICghbmZzX3BhZ2Vpb19hZGRfcmVxdWVzdChwZ2lvLCByZXEpKSB7CiAJCW5mc19yZWRpcnR5X3JlcXVlc3QocmVxKTsKLQkJcmV0dXJuIHBnaW8tPnBnX2Vycm9yOworCQlyZXQgPSBwZ2lvLT5wZ19lcnJvcjsKIAl9Ci0JcmV0dXJuIDA7CitvdXQ6CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBuZnNfZG9fd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywgc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqcGdpbykKQEAgLTE0NzgsNyArMTQ5MCw2IEBACiAJCS5ucl90b193cml0ZSA9IExPTkdfTUFYLAogCQkucmFuZ2Vfc3RhcnQgPSAwLAogCQkucmFuZ2VfZW5kID0gTExPTkdfTUFYLAotCQkuZm9yX3dyaXRlcGFnZXMgPSAxLAogCX07CiAKIAlyZXR1cm4gX19uZnNfd3JpdGVfbWFwcGluZyhtYXBwaW5nLCAmd2JjLCBob3cpOwpAQCAtMTU4MCw2ICsxNTkxLDQxIEBACiAJcmV0dXJuIG5mc193Yl9wYWdlX3ByaW9yaXR5KGlub2RlLCBwYWdlLCBGTFVTSF9TVEFCTEUpOwogfQogCisjaWZkZWYgQ09ORklHX01JR1JBVElPTgoraW50IG5mc19taWdyYXRlX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBwYWdlICpuZXdwYWdlLAorCQlzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgbmZzX3BhZ2UgKnJlcTsKKwlpbnQgcmV0OworCisJaWYgKFBhZ2VGc0NhY2hlKHBhZ2UpKQorCQluZnNfZnNjYWNoZV9yZWxlYXNlX3BhZ2UocGFnZSwgR0ZQX0tFUk5FTCk7CisKKwlyZXEgPSBuZnNfZmluZF9hbmRfbG9ja19yZXF1ZXN0KHBhZ2UpOworCXJldCA9IFBUUl9FUlIocmVxKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gbWlncmF0ZV9wYWdlKG1hcHBpbmcsIG5ld3BhZ2UsIHBhZ2UpOworCWlmICghcmVxKQorCQlnb3RvIG91dDsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bmxvY2s7CisJcGFnZV9jYWNoZV9nZXQobmV3cGFnZSk7CisJcmVxLT53Yl9wYWdlID0gbmV3cGFnZTsKKwlTZXRQYWdlUHJpdmF0ZShuZXdwYWdlKTsKKwlzZXRfcGFnZV9wcml2YXRlKG5ld3BhZ2UsIHBhZ2VfcHJpdmF0ZShwYWdlKSk7CisJQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKTsKKwlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIDApOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKK291dF91bmxvY2s6CisJbmZzX2NsZWFyX3BhZ2VfdGFnX2xvY2tlZChyZXEpOworCW5mc19yZWxlYXNlX3JlcXVlc3QocmVxKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKIGludCBfX2luaXQgbmZzX2luaXRfd3JpdGVwYWdlY2FjaGUodm9pZCkKIHsKIAluZnNfd2RhdGFfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoIm5mc193cml0ZV9kYXRhIiwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvYXV0aC5jIGIvZnMvbmZzZC9hdXRoLmMKaW5kZXggNTU3MzUwOC4uMzZmY2FiYmYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvYXV0aC5jCisrKyBiL2ZzL25mc2QvYXV0aC5jCkBAIC0zNCw2ICszNCw4IEBACiAJaW50IGZsYWdzID0gbmZzZXhwX2ZsYWdzKHJxc3RwLCBleHApOwogCWludCByZXQ7CiAKKwl2YWxpZGF0ZV9wcm9jZXNzX2NyZWRzKCk7CisKIAkvKiBkaXNjYXJkIGFueSBvbGQgb3ZlcnJpZGUgYmVmb3JlIHByZXBhcmluZyB0aGUgbmV3IHNldCAqLwogCXJldmVydF9jcmVkcyhnZXRfY3JlZChjdXJyZW50LT5yZWFsX2NyZWQpKTsKIAluZXcgPSBwcmVwYXJlX2NyZWRzKCk7CkBAIC04Niw4ICs4OCwxMCBAQAogCWVsc2UKIAkJbmV3LT5jYXBfZWZmZWN0aXZlID0gY2FwX3JhaXNlX25mc2Rfc2V0KG5ldy0+Y2FwX2VmZmVjdGl2ZSwKIAkJCQkJCQluZXctPmNhcF9wZXJtaXR0ZWQpOworCXZhbGlkYXRlX3Byb2Nlc3NfY3JlZHMoKTsKIAlwdXRfY3JlZChvdmVycmlkZV9jcmVkcyhuZXcpKTsKIAlwdXRfY3JlZChuZXcpOworCXZhbGlkYXRlX3Byb2Nlc3NfY3JlZHMoKTsKIAlyZXR1cm4gMDsKIAogb29tOgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9leHBvcnQuYyBiL2ZzL25mc2QvZXhwb3J0LmMKaW5kZXggYjkyYTI3Ni4uZDk0NjI2NCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9leHBvcnQuYworKysgYi9mcy9uZnNkL2V4cG9ydC5jCkBAIC04NSw2ICs4NSwxMSBAQAogCSgqYnBwKVstMV0gPSAnXG4nOwogfQogCitzdGF0aWMgaW50IGV4cGtleV91cGNhbGwoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QsIHN0cnVjdCBjYWNoZV9oZWFkICpoKQoreworCXJldHVybiBzdW5ycGNfY2FjaGVfcGlwZV91cGNhbGwoY2QsIGgsIGV4cGtleV9yZXF1ZXN0KTsKK30KKwogc3RhdGljIHN0cnVjdCBzdmNfZXhwa2V5ICpzdmNfZXhwa2V5X3VwZGF0ZShzdHJ1Y3Qgc3ZjX2V4cGtleSAqbmV3LCBzdHJ1Y3Qgc3ZjX2V4cGtleSAqb2xkKTsKIHN0YXRpYyBzdHJ1Y3Qgc3ZjX2V4cGtleSAqc3ZjX2V4cGtleV9sb29rdXAoc3RydWN0IHN2Y19leHBrZXkgKik7CiBzdGF0aWMgc3RydWN0IGNhY2hlX2RldGFpbCBzdmNfZXhwa2V5X2NhY2hlOwpAQCAtMjU5LDcgKzI2NCw3IEBACiAJLmhhc2hfdGFibGUJPSBleHBrZXlfdGFibGUsCiAJLm5hbWUJCT0gIm5mc2QuZmgiLAogCS5jYWNoZV9wdXQJPSBleHBrZXlfcHV0LAotCS5jYWNoZV9yZXF1ZXN0CT0gZXhwa2V5X3JlcXVlc3QsCisJLmNhY2hlX3VwY2FsbAk9IGV4cGtleV91cGNhbGwsCiAJLmNhY2hlX3BhcnNlCT0gZXhwa2V5X3BhcnNlLAogCS5jYWNoZV9zaG93CT0gZXhwa2V5X3Nob3csCiAJLm1hdGNoCQk9IGV4cGtleV9tYXRjaCwKQEAgLTM1NSw2ICszNjAsMTEgQEAKIAkoKmJwcClbLTFdID0gJ1xuJzsKIH0KIAorc3RhdGljIGludCBzdmNfZXhwb3J0X3VwY2FsbChzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCwgc3RydWN0IGNhY2hlX2hlYWQgKmgpCit7CisJcmV0dXJuIHN1bnJwY19jYWNoZV9waXBlX3VwY2FsbChjZCwgaCwgc3ZjX2V4cG9ydF9yZXF1ZXN0KTsKK30KKwogc3RhdGljIHN0cnVjdCBzdmNfZXhwb3J0ICpzdmNfZXhwb3J0X3VwZGF0ZShzdHJ1Y3Qgc3ZjX2V4cG9ydCAqbmV3LAogCQkJCQkgICAgc3RydWN0IHN2Y19leHBvcnQgKm9sZCk7CiBzdGF0aWMgc3RydWN0IHN2Y19leHBvcnQgKnN2Y19leHBvcnRfbG9va3VwKHN0cnVjdCBzdmNfZXhwb3J0ICopOwpAQCAtNzI0LDcgKzczNCw3IEBACiAJLmhhc2hfdGFibGUJPSBleHBvcnRfdGFibGUsCiAJLm5hbWUJCT0gIm5mc2QuZXhwb3J0IiwKIAkuY2FjaGVfcHV0CT0gc3ZjX2V4cG9ydF9wdXQsCi0JLmNhY2hlX3JlcXVlc3QJPSBzdmNfZXhwb3J0X3JlcXVlc3QsCisJLmNhY2hlX3VwY2FsbAk9IHN2Y19leHBvcnRfdXBjYWxsLAogCS5jYWNoZV9wYXJzZQk9IHN2Y19leHBvcnRfcGFyc2UsCiAJLmNhY2hlX3Nob3cJPSBzdmNfZXhwb3J0X3Nob3csCiAJLm1hdGNoCQk9IHN2Y19leHBvcnRfbWF0Y2gsCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRpZG1hcC5jIGIvZnMvbmZzZC9uZnM0aWRtYXAuYwppbmRleCA1YjM5ODQyLi5jZGZhODZmIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRpZG1hcC5jCisrKyBiL2ZzL25mc2QvbmZzNGlkbWFwLmMKQEAgLTE0Niw2ICsxNDYsMTIgQEAKIH0KIAogc3RhdGljIGludAoraWR0b25hbWVfdXBjYWxsKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqY2gpCit7CisJcmV0dXJuIHN1bnJwY19jYWNoZV9waXBlX3VwY2FsbChjZCwgY2gsIGlkdG9uYW1lX3JlcXVlc3QpOworfQorCitzdGF0aWMgaW50CiBpZHRvbmFtZV9tYXRjaChzdHJ1Y3QgY2FjaGVfaGVhZCAqY2EsIHN0cnVjdCBjYWNoZV9oZWFkICpjYikKIHsKIAlzdHJ1Y3QgZW50ICphID0gY29udGFpbmVyX29mKGNhLCBzdHJ1Y3QgZW50LCBoKTsKQEAgLTE3NSwxMCArMTgxLDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkCi13YXJuX25vX2lkbWFwZChzdHJ1Y3QgY2FjaGVfZGV0YWlsICpkZXRhaWwpCit3YXJuX25vX2lkbWFwZChzdHJ1Y3QgY2FjaGVfZGV0YWlsICpkZXRhaWwsIGludCBoYXNfZGllZCkKIHsKIAlwcmludGsoIm5mc2Q6IG5mc3Y0IGlkbWFwcGluZyBmYWlsaW5nOiBoYXMgaWRtYXBkICVzP1xuIiwKLQkJCWRldGFpbC0+bGFzdF9jbG9zZT8gImRpZWQiIDogIm5vdCBiZWVuIHN0YXJ0ZWQiKTsKKwkJCWhhc19kaWVkID8gImRpZWQiIDogIm5vdCBiZWVuIHN0YXJ0ZWQiKTsKIH0KIAogCkBAIC0xOTIsNyArMTk4LDcgQEAKIAkuaGFzaF90YWJsZQk9IGlkdG9uYW1lX3RhYmxlLAogCS5uYW1lCQk9ICJuZnM0LmlkdG9uYW1lIiwKIAkuY2FjaGVfcHV0CT0gZW50X3B1dCwKLQkuY2FjaGVfcmVxdWVzdAk9IGlkdG9uYW1lX3JlcXVlc3QsCisJLmNhY2hlX3VwY2FsbAk9IGlkdG9uYW1lX3VwY2FsbCwKIAkuY2FjaGVfcGFyc2UJPSBpZHRvbmFtZV9wYXJzZSwKIAkuY2FjaGVfc2hvdwk9IGlkdG9uYW1lX3Nob3csCiAJLndhcm5fbm9fbGlzdGVuZXIgPSB3YXJuX25vX2lkbWFwZCwKQEAgLTMyNSw2ICszMzEsMTIgQEAKIH0KIAogc3RhdGljIGludAorbmFtZXRvaWRfdXBjYWxsKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqY2gpCit7CisJcmV0dXJuIHN1bnJwY19jYWNoZV9waXBlX3VwY2FsbChjZCwgY2gsIG5hbWV0b2lkX3JlcXVlc3QpOworfQorCitzdGF0aWMgaW50CiBuYW1ldG9pZF9tYXRjaChzdHJ1Y3QgY2FjaGVfaGVhZCAqY2EsIHN0cnVjdCBjYWNoZV9oZWFkICpjYikKIHsKIAlzdHJ1Y3QgZW50ICphID0gY29udGFpbmVyX29mKGNhLCBzdHJ1Y3QgZW50LCBoKTsKQEAgLTM2Myw3ICszNzUsNyBAQAogCS5oYXNoX3RhYmxlCT0gbmFtZXRvaWRfdGFibGUsCiAJLm5hbWUJCT0gIm5mczQubmFtZXRvaWQiLAogCS5jYWNoZV9wdXQJPSBlbnRfcHV0LAotCS5jYWNoZV9yZXF1ZXN0CT0gbmFtZXRvaWRfcmVxdWVzdCwKKwkuY2FjaGVfdXBjYWxsCT0gbmFtZXRvaWRfdXBjYWxsLAogCS5jYWNoZV9wYXJzZQk9IG5hbWV0b2lkX3BhcnNlLAogCS5jYWNoZV9zaG93CT0gbmFtZXRvaWRfc2hvdywKIAkud2Fybl9ub19saXN0ZW5lciA9IHdhcm5fbm9faWRtYXBkLApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNjdGwuYyBiL2ZzL25mc2QvbmZzY3RsLmMKaW5kZXggNmQwODQ3NS4uN2U5MDZjNSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNjdGwuYworKysgYi9mcy9uZnNkL25mc2N0bC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbmZzZC94ZHIuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNkL3N5c2NhbGwuaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZC9sb2NrZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CkBAIC00OTAsMjIgKzQ5MSwxOCBAQAogICoKICAqIElucHV0OgogICoJCQlidWY6CSdcbictdGVybWluYXRlZCBDIHN0cmluZyBjb250YWluaW5nIGEKLSAqCQkJCXByZXNlbnRhdGlvbiBmb3JtYXQgSVB2NCBhZGRyZXNzCisgKgkJCQlwcmVzZW50YXRpb24gZm9ybWF0IElQIGFkZHJlc3MKICAqCQkJc2l6ZToJbGVuZ3RoIG9mIEMgc3RyaW5nIGluIEBidWYKICAqIE91dHB1dDoKICAqCU9uIHN1Y2Nlc3M6CXJldHVybnMgemVybyBpZiBhbGwgc3BlY2lmaWVkIGxvY2tzIHdlcmUgcmVsZWFzZWQ7CiAgKgkJCXJldHVybnMgb25lIGlmIG9uZSBvciBtb3JlIGxvY2tzIHdlcmUgbm90IHJlbGVhc2VkCiAgKglPbiBlcnJvcjoJcmV0dXJuIGNvZGUgaXMgbmVnYXRpdmUgZXJybm8gdmFsdWUKLSAqCi0gKiBOb3RlOiBPbmx5IEFGX0lORVQgY2xpZW50IGFkZHJlc3NlcyBhcmUgcGFzc2VkIGluCiAgKi8KIHN0YXRpYyBzc2l6ZV90IHdyaXRlX3VubG9ja19pcChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luID0gewotCQkuc2luX2ZhbWlseQk9IEFGX0lORVQsCi0JfTsKLQlpbnQgYjEsIGIyLCBiMywgYjQ7Ci0JY2hhciBjOworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHJlc3M7CisJc3RydWN0IHNvY2thZGRyICpzYXAgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHJlc3M7CisJc2l6ZV90IHNhbGVuID0gc2l6ZW9mKGFkZHJlc3MpOwogCWNoYXIgKmZvX3BhdGg7CiAKIAkvKiBzYW5pdHkgY2hlY2sgKi8KQEAgLTUxOSwxNCArNTE2LDEwIEBACiAJaWYgKHF3b3JkX2dldCgmYnVmLCBmb19wYXRoLCBzaXplKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogZ2V0IGlwdjQgYWRkcmVzcyAqLwotCWlmIChzc2NhbmYoZm9fcGF0aCwgIiV1LiV1LiV1LiV1JWMiLCAmYjEsICZiMiwgJmIzLCAmYjQsICZjKSAhPSA0KQorCWlmIChycGNfcHRvbihmb19wYXRoLCBzaXplLCBzYXAsIHNhbGVuKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoYjEgPiAyNTUgfHwgYjIgPiAyNTUgfHwgYjMgPiAyNTUgfHwgYjQgPiAyNTUpCi0JCXJldHVybiAtRUlOVkFMOwotCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBodG9ubCgoYjEgPDwgMjQpIHwgKGIyIDw8IDE2KSB8IChiMyA8PCA4KSB8IGI0KTsKIAotCXJldHVybiBubG1zdmNfdW5sb2NrX2FsbF9ieV9pcCgoc3RydWN0IHNvY2thZGRyICopJnNpbik7CisJcmV0dXJuIG5sbXN2Y191bmxvY2tfYWxsX2J5X2lwKHNhcCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNzdmMuYyBiL2ZzL25mc2QvbmZzc3ZjLmMKaW5kZXggNDkyYzc5Yi4uMjRkNThhZCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNzdmMuYworKysgYi9mcy9uZnNkL25mc3N2Yy5jCkBAIC00OTYsNyArNDk2LDkgQEAKIAkJLyogTG9jayB0aGUgZXhwb3J0IGhhc2ggdGFibGVzIGZvciByZWFkaW5nLiAqLwogCQlleHBfcmVhZGxvY2soKTsKIAorCQl2YWxpZGF0ZV9wcm9jZXNzX2NyZWRzKCk7CiAJCXN2Y19wcm9jZXNzKHJxc3RwKTsKKwkJdmFsaWRhdGVfcHJvY2Vzc19jcmVkcygpOwogCiAJCS8qIFVubG9jayBleHBvcnQgaGFzaCB0YWJsZXMgKi8KIAkJZXhwX3JlYWR1bmxvY2soKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDIzMzQxYzEuLjhmYTA5YmYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtNjg0LDYgKzY4NCw4IEBACiAJX19iZTMyCQllcnI7CiAJaW50CQlob3N0X2VycjsKIAorCXZhbGlkYXRlX3Byb2Nlc3NfY3JlZHMoKTsKKwogCS8qCiAJICogSWYgd2UgZ2V0IGhlcmUsIHRoZW4gdGhlIGNsaWVudCBoYXMgYWxyZWFkeSBkb25lIGFuICJvcGVuIiwKIAkgKiBhbmQgKGhvcGVmdWxseSkgY2hlY2tlZCBwZXJtaXNzaW9uIC0gc28gYWxsb3cgT1dORVJfT1ZFUlJJREUKQEAgLTc0MCw2ICs3NDIsNyBAQAogb3V0X25mc2VycjoKIAllcnIgPSBuZnNlcnJubyhob3N0X2Vycik7CiBvdXQ6CisJdmFsaWRhdGVfcHJvY2Vzc19jcmVkcygpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9LY29uZmlnIGIvZnMvbmlsZnMyL0tjb25maWcKaW5kZXggNzJkYTA5NS4uMjUxZGEwNyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL0tjb25maWcKKysrIGIvZnMvbmlsZnMyL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgTklMRlMyX0ZTCiAJdHJpc3RhdGUgIk5JTEZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gQkxPQ0sgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgQ1JDMzIKIAloZWxwCiAJICBOSUxGUzIgaXMgYSBsb2ctc3RydWN0dXJlZCBmaWxlIHN5c3RlbSAoTEZTKSBzdXBwb3J0aW5nIGNvbnRpbnVvdXMKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9ibWFwLmMgYi9mcy9uaWxmczIvYm1hcC5jCmluZGV4IDk5ZDU4YTAuLjA4ODM0ZGYgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9ibWFwLmMKKysrIGIvZnMvbmlsZnMyL2JtYXAuYwpAQCAtMzYsNiArMzYsMjYgQEAKIAlyZXR1cm4gbmlsZnNfZGF0X2lub2RlKE5JTEZTX0lfTklMRlMoYm1hcC0+Yl9pbm9kZSkpOwogfQogCisvKioKKyAqIG5pbGZzX2JtYXBfbG9va3VwX2F0X2xldmVsIC0gZmluZCBhIGRhdGEgYmxvY2sgb3Igbm9kZSBibG9jaworICogQGJtYXA6IGJtYXAKKyAqIEBrZXk6IGtleQorICogQGxldmVsOiBsZXZlbAorICogQHB0cnA6IHBsYWNlIHRvIHN0b3JlIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHRvIEBrZXkKKyAqCisgKiBEZXNjcmlwdGlvbjogbmlsZnNfYm1hcF9sb29rdXBfYXRfbGV2ZWwoKSBmaW5kcyBhIHJlY29yZCB3aG9zZSBrZXkKKyAqIG1hdGNoZXMgQGtleSBpbiB0aGUgYmxvY2sgYXQgQGxldmVsIG9mIHRoZSBibWFwLgorICoKKyAqIFJldHVybiBWYWx1ZTogT24gc3VjY2VzcywgMCBpcyByZXR1cm5lZCBhbmQgdGhlIHJlY29yZCBhc3NvY2lhdGVkIHdpdGggQGtleQorICogaXMgc3RvcmVkIGluIHRoZSBwbGFjZSBwb2ludGVkIGJ5IEBwdHJwLiBPbiBlcnJvciwgb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGlzIHJldHVybmVkLgorICoKKyAqICUtRUlPIC0gSS9PIGVycm9yLgorICoKKyAqICUtRU5PTUVNIC0gSW5zdWZmaWNpZW50IGFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlLgorICoKKyAqICUtRU5PRU5UIC0gQSByZWNvcmQgYXNzb2NpYXRlZCB3aXRoIEBrZXkgZG9lcyBub3QgZXhpc3QuCisgKi8KIGludCBuaWxmc19ibWFwX2xvb2t1cF9hdF9sZXZlbChzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwgX191NjQga2V5LCBpbnQgbGV2ZWwsCiAJCQkgICAgICAgX191NjQgKnB0cnApCiB7CkBAIC02OSwzOSArODksNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qKgotICogbmlsZnNfYm1hcF9sb29rdXAgLSBmaW5kIGEgcmVjb3JkCi0gKiBAYm1hcDogYm1hcAotICogQGtleToga2V5Ci0gKiBAcmVjcDogcG9pbnRlciB0byByZWNvcmQKLSAqCi0gKiBEZXNjcmlwdGlvbjogbmlsZnNfYm1hcF9sb29rdXAoKSBmaW5kcyBhIHJlY29yZCB3aG9zZSBrZXkgbWF0Y2hlcyBAa2V5IGluCi0gKiBAYm1hcC4KLSAqCi0gKiBSZXR1cm4gVmFsdWU6IE9uIHN1Y2Nlc3MsIDAgaXMgcmV0dXJuZWQgYW5kIHRoZSByZWNvcmQgYXNzb2NpYXRlZCB3aXRoIEBrZXkKLSAqIGlzIHN0b3JlZCBpbiB0aGUgcGxhY2UgcG9pbnRlZCBieSBAcmVjcC4gT24gZXJyb3IsIG9uZSBvZiB0aGUgZm9sbG93aW5nCi0gKiBuZWdhdGl2ZSBlcnJvciBjb2RlcyBpcyByZXR1cm5lZC4KLSAqCi0gKiAlLUVJTyAtIEkvTyBlcnJvci4KLSAqCi0gKiAlLUVOT01FTSAtIEluc3VmZmljaWVudCBhbW91bnQgb2YgbWVtb3J5IGF2YWlsYWJsZS4KLSAqCi0gKiAlLUVOT0VOVCAtIEEgcmVjb3JkIGFzc29jaWF0ZWQgd2l0aCBAa2V5IGRvZXMgbm90IGV4aXN0LgotICovCi1pbnQgbmlsZnNfYm1hcF9sb29rdXAoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcga2V5LAotCQkgICAgICB1bnNpZ25lZCBsb25nICpyZWNwKQotewotCV9fdTY0IHB0cjsKLQlpbnQgcmV0OwotCi0JLyogWFhYOiB1c2UgbWFjcm8gZm9yIGxldmVsIDEgKi8KLQlyZXQgPSBuaWxmc19ibWFwX2xvb2t1cF9hdF9sZXZlbChibWFwLCBrZXksIDEsICZwdHIpOwotCWlmIChyZWNwICE9IE5VTEwpCi0JCSpyZWNwID0gcHRyOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgbmlsZnNfYm1hcF9kb19pbnNlcnQoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsIF9fdTY0IGtleSwgX191NjQgcHRyKQogewogCV9fdTY0IGtleXNbTklMRlNfQk1BUF9TTUFMTF9ISUdIICsgMV07CkBAIC00NjksMTA0ICs0NTYsNiBAQAogCQkoZW50cmllc19wZXJfZ3JvdXAgLyBOSUxGU19CTUFQX0dST1VQX0RJVik7CiB9CiAKLWludCBuaWxmc19ibWFwX3ByZXBhcmVfYWxsb2NfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKLQkJCQkgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEpCi17Ci0JcmV0dXJuIG5pbGZzX2RhdF9wcmVwYXJlX2FsbG9jKG5pbGZzX2JtYXBfZ2V0X2RhdChibWFwKSwgJnJlcS0+YnByX3JlcSk7Ci19Ci0KLXZvaWQgbmlsZnNfYm1hcF9jb21taXRfYWxsb2NfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKLQkJCQkgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEpCi17Ci0JbmlsZnNfZGF0X2NvbW1pdF9hbGxvYyhuaWxmc19ibWFwX2dldF9kYXQoYm1hcCksICZyZXEtPmJwcl9yZXEpOwotfQotCi12b2lkIG5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKLQkJCSAgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxKQotewotCW5pbGZzX2RhdF9hYm9ydF9hbGxvYyhuaWxmc19ibWFwX2dldF9kYXQoYm1hcCksICZyZXEtPmJwcl9yZXEpOwotfQotCi1pbnQgbmlsZnNfYm1hcF9zdGFydF92KHN0cnVjdCBuaWxmc19ibWFwICpibWFwLCB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSwKLQkJICAgICAgIHNlY3Rvcl90IGJsb2NrbnIpCi17Ci0Jc3RydWN0IGlub2RlICpkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoYm1hcCk7Ci0JaW50IHJldDsKLQotCXJldCA9IG5pbGZzX2RhdF9wcmVwYXJlX3N0YXJ0KGRhdCwgJnJlcS0+YnByX3JlcSk7Ci0JaWYgKGxpa2VseSghcmV0KSkKLQkJbmlsZnNfZGF0X2NvbW1pdF9zdGFydChkYXQsICZyZXEtPmJwcl9yZXEsIGJsb2NrbnIpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBuaWxmc19ibWFwX3ByZXBhcmVfZW5kX3Yoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCi0JCQkgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxKQotewotCXJldHVybiBuaWxmc19kYXRfcHJlcGFyZV9lbmQobmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApLCAmcmVxLT5icHJfcmVxKTsKLX0KLQotdm9pZCBuaWxmc19ibWFwX2NvbW1pdF9lbmRfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKLQkJCSAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEpCi17Ci0JbmlsZnNfZGF0X2NvbW1pdF9lbmQobmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApLCAmcmVxLT5icHJfcmVxLAotCQkJICAgICBibWFwLT5iX3B0cl90eXBlID09IE5JTEZTX0JNQVBfUFRSX1ZTKTsKLX0KLQotdm9pZCBuaWxmc19ibWFwX2Fib3J0X2VuZF92KHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAotCQkJICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxKQotewotCW5pbGZzX2RhdF9hYm9ydF9lbmQobmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApLCAmcmVxLT5icHJfcmVxKTsKLX0KLQotaW50IG5pbGZzX2JtYXBfbW92ZV92KGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpibWFwLCBfX3U2NCB2YmxvY2tuciwKLQkJICAgICAgc2VjdG9yX3QgYmxvY2tucikKLXsKLQlyZXR1cm4gbmlsZnNfZGF0X21vdmUobmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApLCB2YmxvY2tuciwgYmxvY2tucik7Ci19Ci0KLWludCBuaWxmc19ibWFwX21hcmtfZGlydHkoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsIF9fdTY0IHZibG9ja25yKQotewotCXJldHVybiBuaWxmc19kYXRfbWFya19kaXJ0eShuaWxmc19ibWFwX2dldF9kYXQoYm1hcCksIHZibG9ja25yKTsKLX0KLQotaW50IG5pbGZzX2JtYXBfcHJlcGFyZV91cGRhdGVfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKLQkJCQl1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKm9sZHJlcSwKLQkJCQl1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKm5ld3JlcSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdChibWFwKTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gbmlsZnNfZGF0X3ByZXBhcmVfZW5kKGRhdCwgJm9sZHJlcS0+YnByX3JlcSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JcmV0ID0gbmlsZnNfZGF0X3ByZXBhcmVfYWxsb2MoZGF0LCAmbmV3cmVxLT5icHJfcmVxKTsKLQlpZiAocmV0IDwgMCkKLQkJbmlsZnNfZGF0X2Fib3J0X2VuZChkYXQsICZvbGRyZXEtPmJwcl9yZXEpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBuaWxmc19ibWFwX2NvbW1pdF91cGRhdGVfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKLQkJCQl1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKm9sZHJlcSwKLQkJCQl1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKm5ld3JlcSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdChibWFwKTsKLQotCW5pbGZzX2RhdF9jb21taXRfZW5kKGRhdCwgJm9sZHJlcS0+YnByX3JlcSwKLQkJCSAgICAgYm1hcC0+Yl9wdHJfdHlwZSA9PSBOSUxGU19CTUFQX1BUUl9WUyk7Ci0JbmlsZnNfZGF0X2NvbW1pdF9hbGxvYyhkYXQsICZuZXdyZXEtPmJwcl9yZXEpOwotfQotCi12b2lkIG5pbGZzX2JtYXBfYWJvcnRfdXBkYXRlX3Yoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCi0JCQkgICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpvbGRyZXEsCi0JCQkgICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpuZXdyZXEpCi17Ci0Jc3RydWN0IGlub2RlICpkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoYm1hcCk7Ci0KLQluaWxmc19kYXRfYWJvcnRfZW5kKGRhdCwgJm9sZHJlcS0+YnByX3JlcSk7Ci0JbmlsZnNfZGF0X2Fib3J0X2FsbG9jKGRhdCwgJm5ld3JlcS0+YnByX3JlcSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbmlsZnNfYm1hcF9kYXRfbG9ja19rZXk7CiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG5pbGZzX2JtYXBfbWR0X2xvY2tfa2V5OwogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYm1hcC5oIGIvZnMvbmlsZnMyL2JtYXAuaAppbmRleCBiMjg5MGNkLi45OTgwZDdkIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYm1hcC5oCisrKyBiL2ZzL25pbGZzMi9ibWFwLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L25pbGZzMl9mcy5oPgogI2luY2x1ZGUgImFsbG9jLmgiCisjaW5jbHVkZSAiZGF0LmgiCiAKICNkZWZpbmUgTklMRlNfQk1BUF9JTlZBTElEX1BUUgkwCiAKQEAgLTE0MSw3ICsxNDIsNiBAQAogaW50IG5pbGZzX2JtYXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoc3RydWN0IG5pbGZzX2JtYXAgKik7CiBpbnQgbmlsZnNfYm1hcF9yZWFkKHN0cnVjdCBuaWxmc19ibWFwICosIHN0cnVjdCBuaWxmc19pbm9kZSAqKTsKIHZvaWQgbmlsZnNfYm1hcF93cml0ZShzdHJ1Y3QgbmlsZnNfYm1hcCAqLCBzdHJ1Y3QgbmlsZnNfaW5vZGUgKik7Ci1pbnQgbmlsZnNfYm1hcF9sb29rdXAoc3RydWN0IG5pbGZzX2JtYXAgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqKTsKIGludCBuaWxmc19ibWFwX2xvb2t1cF9jb250aWcoc3RydWN0IG5pbGZzX2JtYXAgKiwgX191NjQsIF9fdTY0ICosIHVuc2lnbmVkKTsKIGludCBuaWxmc19ibWFwX2luc2VydChzdHJ1Y3QgbmlsZnNfYm1hcCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIGludCBuaWxmc19ibWFwX2RlbGV0ZShzdHJ1Y3QgbmlsZnNfYm1hcCAqLCB1bnNpZ25lZCBsb25nKTsKQEAgLTE2MCw5MCArMTYwLDc2IEBACiB2b2lkIG5pbGZzX2JtYXBfY29tbWl0X2djZGF0KHN0cnVjdCBuaWxmc19ibWFwICosIHN0cnVjdCBuaWxmc19ibWFwICopOwogCiAKK3N0YXRpYyBpbmxpbmUgaW50IG5pbGZzX2JtYXBfbG9va3VwKHN0cnVjdCBuaWxmc19ibWFwICpibWFwLCBfX3U2NCBrZXksCisJCQkJICAgIF9fdTY0ICpwdHIpCit7CisJcmV0dXJuIG5pbGZzX2JtYXBfbG9va3VwX2F0X2xldmVsKGJtYXAsIGtleSwgMSwgcHRyKTsKK30KKwogLyoKICAqIEludGVybmFsIHVzZSBvbmx5CiAgKi8KIHN0cnVjdCBpbm9kZSAqbmlsZnNfYm1hcF9nZXRfZGF0KGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICopOwotaW50IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY192KHN0cnVjdCBuaWxmc19ibWFwICosCi0JCQkgICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICopOwotdm9pZCBuaWxmc19ibWFwX2NvbW1pdF9hbGxvY192KHN0cnVjdCBuaWxmc19ibWFwICosCi0JCQkgICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICopOwotdm9pZCBuaWxmc19ibWFwX2Fib3J0X2FsbG9jX3Yoc3RydWN0IG5pbGZzX2JtYXAgKiwKLQkJCSAgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqKTsKIAogc3RhdGljIGlubGluZSBpbnQgbmlsZnNfYm1hcF9wcmVwYXJlX2FsbG9jX3B0cihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKLQkJCQkJICAgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxKQorCQkJCQkgICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEsCisJCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRhdCkKIHsKLQlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKGJtYXApKQotCQlyZXR1cm4gbmlsZnNfYm1hcF9wcmVwYXJlX2FsbG9jX3YoYm1hcCwgcmVxKTsKKwlpZiAoZGF0KQorCQlyZXR1cm4gbmlsZnNfZGF0X3ByZXBhcmVfYWxsb2MoZGF0LCAmcmVxLT5icHJfcmVxKTsKIAkvKiBpZ25vcmUgdGFyZ2V0IHB0ciAqLwogCXJlcS0+YnByX3B0ciA9IGJtYXAtPmJfbGFzdF9hbGxvY2F0ZWRfcHRyKys7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuaWxmc19ibWFwX2NvbW1pdF9hbGxvY19wdHIoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCi0JCQkJCSAgICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSkKKwkJCQkJICAgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxLAorCQkJCQkgICAgICAgc3RydWN0IGlub2RlICpkYXQpCiB7Ci0JaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSkKLQkJbmlsZnNfYm1hcF9jb21taXRfYWxsb2NfdihibWFwLCByZXEpOworCWlmIChkYXQpCisJCW5pbGZzX2RhdF9jb21taXRfYWxsb2MoZGF0LCAmcmVxLT5icHJfcmVxKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfcHRyKHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAotCQkJCQkgICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSkKKwkJCQkJICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEsCisJCQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGF0KQogewotCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oYm1hcCkpCi0JCW5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfdihibWFwLCByZXEpOworCWlmIChkYXQpCisJCW5pbGZzX2RhdF9hYm9ydF9hbGxvYyhkYXQsICZyZXEtPmJwcl9yZXEpOwogCWVsc2UKIAkJYm1hcC0+Yl9sYXN0X2FsbG9jYXRlZF9wdHItLTsKIH0KIAotaW50IG5pbGZzX2JtYXBfcHJlcGFyZV9lbmRfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqLCB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKik7Ci12b2lkIG5pbGZzX2JtYXBfY29tbWl0X2VuZF92KHN0cnVjdCBuaWxmc19ibWFwICosIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqKTsKLXZvaWQgbmlsZnNfYm1hcF9hYm9ydF9lbmRfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqLCB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKik7Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG5pbGZzX2JtYXBfcHJlcGFyZV9lbmRfcHRyKHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAotCQkJCQkgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxKQorCQkJCQkgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxLAorCQkJCQkgICAgIHN0cnVjdCBpbm9kZSAqZGF0KQogewotCXJldHVybiBOSUxGU19CTUFQX1VTRV9WQk4oYm1hcCkgPwotCQluaWxmc19ibWFwX3ByZXBhcmVfZW5kX3YoYm1hcCwgcmVxKSA6IDA7CisJcmV0dXJuIGRhdCA/IG5pbGZzX2RhdF9wcmVwYXJlX2VuZChkYXQsICZyZXEtPmJwcl9yZXEpIDogMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG5pbGZzX2JtYXBfY29tbWl0X2VuZF9wdHIoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCi0JCQkJCSAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEpCisJCQkJCSAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEsCisJCQkJCSAgICAgc3RydWN0IGlub2RlICpkYXQpCiB7Ci0JaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSkKLQkJbmlsZnNfYm1hcF9jb21taXRfZW5kX3YoYm1hcCwgcmVxKTsKKwlpZiAoZGF0KQorCQluaWxmc19kYXRfY29tbWl0X2VuZChkYXQsICZyZXEtPmJwcl9yZXEsCisJCQkJICAgICBibWFwLT5iX3B0cl90eXBlID09IE5JTEZTX0JNQVBfUFRSX1ZTKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG5pbGZzX2JtYXBfYWJvcnRfZW5kX3B0cihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKLQkJCQkJICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxKQorCQkJCQkgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEsCisJCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmRhdCkKIHsKLQlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKGJtYXApKQotCQluaWxmc19ibWFwX2Fib3J0X2VuZF92KGJtYXAsIHJlcSk7CisJaWYgKGRhdCkKKwkJbmlsZnNfZGF0X2Fib3J0X2VuZChkYXQsICZyZXEtPmJwcl9yZXEpOwogfQogCi1pbnQgbmlsZnNfYm1hcF9zdGFydF92KHN0cnVjdCBuaWxmc19ibWFwICosIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqLAotCQkgICAgICAgc2VjdG9yX3QpOwotaW50IG5pbGZzX2JtYXBfbW92ZV92KGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICosIF9fdTY0LCBzZWN0b3JfdCk7Ci1pbnQgbmlsZnNfYm1hcF9tYXJrX2RpcnR5KGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICosIF9fdTY0KTsKLQotCiBfX3U2NCBuaWxmc19ibWFwX2RhdGFfZ2V0X2tleShjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICopOwogCiBfX3U2NCBuaWxmc19ibWFwX2ZpbmRfdGFyZ2V0X3NlcShjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqLCBfX3U2NCk7CiBfX3U2NCBuaWxmc19ibWFwX2ZpbmRfdGFyZ2V0X2luX2dyb3VwKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICopOwogCi1pbnQgbmlsZnNfYm1hcF9wcmVwYXJlX3VwZGF0ZV92KHN0cnVjdCBuaWxmc19ibWFwICosCi0JCQkJdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICosCi0JCQkJdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICopOwotdm9pZCBuaWxmc19ibWFwX2NvbW1pdF91cGRhdGVfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqLAotCQkJCXVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqLAotCQkJCXVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqKTsKLXZvaWQgbmlsZnNfYm1hcF9hYm9ydF91cGRhdGVfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqLAotCQkJICAgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqLAotCQkJICAgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqKTsKLQogdm9pZCBuaWxmc19ibWFwX2FkZF9ibG9ja3MoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKiwgaW50KTsKIHZvaWQgbmlsZnNfYm1hcF9zdWJfYmxvY2tzKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICosIGludCk7CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idHJlZS5jIGIvZnMvbmlsZnMyL2J0cmVlLmMKaW5kZXggYWE0MTI3Mi4uZTI1YjUwNyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2J0cmVlLmMKKysrIGIvZnMvbmlsZnMyL2J0cmVlLmMKQEAgLTcxLDIxICs3MSwxNyBAQAogCWttZW1fY2FjaGVfZGVzdHJveShuaWxmc19idHJlZV9wYXRoX2NhY2hlKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqCi1uaWxmc19idHJlZV9hbGxvY19wYXRoKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpuaWxmc19idHJlZV9hbGxvY19wYXRoKHZvaWQpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqKQotCQlrbWVtX2NhY2hlX2FsbG9jKG5pbGZzX2J0cmVlX3BhdGhfY2FjaGUsIEdGUF9OT0ZTKTsKKwlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhuaWxmc19idHJlZV9wYXRoX2NhY2hlLCBHRlBfTk9GUyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuaWxmc19idHJlZV9mcmVlX3BhdGgoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCQkJIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoKQorc3RhdGljIGlubGluZSB2b2lkIG5pbGZzX2J0cmVlX2ZyZWVfcGF0aChzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCkKIHsKIAlrbWVtX2NhY2hlX2ZyZWUobmlsZnNfYnRyZWVfcGF0aF9jYWNoZSwgcGF0aCk7CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2luaXRfcGF0aChjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAotCQkJCSAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgpCitzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9pbml0X3BhdGgoc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgpCiB7CiAJaW50IGxldmVsOwogCkBAIC0xMDEsMjYgKzk3LDEzIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9jbGVhcl9wYXRoKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkJICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgpCitzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9yZWxlYXNlX3BhdGgoc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgpCiB7CiAJaW50IGxldmVsOwogCi0JZm9yIChsZXZlbCA9IE5JTEZTX0JUUkVFX0xFVkVMX0RBVEE7Ci0JICAgICBsZXZlbCA8IE5JTEZTX0JUUkVFX0xFVkVMX01BWDsKLQkgICAgIGxldmVsKyspIHsKLQkJaWYgKHBhdGhbbGV2ZWxdLmJwX2JoICE9IE5VTEwpIHsKLQkJCWJyZWxzZShwYXRoW2xldmVsXS5icF9iaCk7Ci0JCQlwYXRoW2xldmVsXS5icF9iaCA9IE5VTEw7Ci0JCX0KLQkJLyogc2liX2JoIGlzIHJlbGVhc2VkIG9yIGRlbGV0ZWQgYnkgcHJlcGFyZSBvciBjb21taXQKLQkJICogb3BlcmF0aW9ucy4gKi8KLQkJcGF0aFtsZXZlbF0uYnBfc2liX2JoID0gTlVMTDsKLQkJcGF0aFtsZXZlbF0uYnBfaW5kZXggPSAwOwotCQlwYXRoW2xldmVsXS5icF9vbGRyZXEuYnByX3B0ciA9IE5JTEZTX0JNQVBfSU5WQUxJRF9QVFI7Ci0JCXBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyID0gTklMRlNfQk1BUF9JTlZBTElEX1BUUjsKLQkJcGF0aFtsZXZlbF0uYnBfb3AgPSBOVUxMOwotCX0KKwlmb3IgKGxldmVsID0gTklMRlNfQlRSRUVfTEVWRUxfREFUQTsgbGV2ZWwgPCBOSUxGU19CVFJFRV9MRVZFTF9NQVg7CisJICAgICBsZXZlbCsrKQorCQlicmVsc2UocGF0aFtsZXZlbF0uYnBfYmgpOwogfQogCiAvKgpAQCAtMTQ4LDEyOSArMTMxLDExMCBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotbmlsZnNfYnRyZWVfbm9kZV9nZXRfZmxhZ3MoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCSAgIGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQorbmlsZnNfYnRyZWVfbm9kZV9nZXRfZmxhZ3MoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCiB7CiAJcmV0dXJuIG5vZGUtPmJuX2ZsYWdzOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLW5pbGZzX2J0cmVlX25vZGVfc2V0X2ZsYWdzKHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwKLQkJCSAgIGludCBmbGFncykKK25pbGZzX2J0cmVlX25vZGVfc2V0X2ZsYWdzKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCBpbnQgZmxhZ3MpCiB7CiAJbm9kZS0+Ym5fZmxhZ3MgPSBmbGFnczsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbmlsZnNfYnRyZWVfbm9kZV9yb290KGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkJCWNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQorc3RhdGljIGlubGluZSBpbnQgbmlsZnNfYnRyZWVfbm9kZV9yb290KGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQogewotCXJldHVybiBuaWxmc19idHJlZV9ub2RlX2dldF9mbGFncyhidHJlZSwgbm9kZSkgJiBOSUxGU19CVFJFRV9OT0RFX1JPT1Q7CisJcmV0dXJuIG5pbGZzX2J0cmVlX25vZGVfZ2V0X2ZsYWdzKG5vZGUpICYgTklMRlNfQlRSRUVfTk9ERV9ST09UOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotbmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCSAgIGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQorbmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCiB7CiAJcmV0dXJuIG5vZGUtPmJuX2xldmVsOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLW5pbGZzX2J0cmVlX25vZGVfc2V0X2xldmVsKHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwKLQkJCSAgIGludCBsZXZlbCkKK25pbGZzX2J0cmVlX25vZGVfc2V0X2xldmVsKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCBpbnQgbGV2ZWwpCiB7CiAJbm9kZS0+Ym5fbGV2ZWwgPSBsZXZlbDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLW5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQorbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQogewogCXJldHVybiBsZTE2X3RvX2NwdShub2RlLT5ibl9uY2hpbGRyZW4pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLW5pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAotCQkJICAgICAgIHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLAotCQkJICAgICAgIGludCBuY2hpbGRyZW4pCituaWxmc19idHJlZV9ub2RlX3NldF9uY2hpbGRyZW4oc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBuY2hpbGRyZW4pCiB7CiAJbm9kZS0+Ym5fbmNoaWxkcmVuID0gY3B1X3RvX2xlMTYobmNoaWxkcmVuKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLW5pbGZzX2J0cmVlX25vZGVfc2l6ZShjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlKQorc3RhdGljIGlubGluZSBpbnQgbmlsZnNfYnRyZWVfbm9kZV9zaXplKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUpCiB7CiAJcmV0dXJuIDEgPDwgYnRyZWUtPmJ0X2JtYXAuYl9pbm9kZS0+aV9ibGtiaXRzOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWluKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCituaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9taW4oY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSkKIHsKLQlyZXR1cm4gbmlsZnNfYnRyZWVfbm9kZV9yb290KGJ0cmVlLCBub2RlKSA/CisJcmV0dXJuIG5pbGZzX2J0cmVlX25vZGVfcm9vdChub2RlKSA/CiAJCU5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01JTiA6CiAJCU5JTEZTX0JUUkVFX05PREVfTkNISUxEUkVOX01JTihuaWxmc19idHJlZV9ub2RlX3NpemUoYnRyZWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLW5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21heChjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQorbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWF4KGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUpCiB7Ci0JcmV0dXJuIG5pbGZzX2J0cmVlX25vZGVfcm9vdChidHJlZSwgbm9kZSkgPworCXJldHVybiBuaWxmc19idHJlZV9ub2RlX3Jvb3Qobm9kZSkgPwogCQlOSUxGU19CVFJFRV9ST09UX05DSElMRFJFTl9NQVggOgogCQlOSUxGU19CVFJFRV9OT0RFX05DSElMRFJFTl9NQVgobmlsZnNfYnRyZWVfbm9kZV9zaXplKGJ0cmVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgX19sZTY0ICoKLW5pbGZzX2J0cmVlX25vZGVfZGtleXMoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQorbmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSkKIHsKIAlyZXR1cm4gKF9fbGU2NCAqKSgoY2hhciAqKShub2RlICsgMSkgKwotCQkJICAobmlsZnNfYnRyZWVfbm9kZV9yb290KGJ0cmVlLCBub2RlKSA/CisJCQkgIChuaWxmc19idHJlZV9ub2RlX3Jvb3Qobm9kZSkgPwogCQkJICAgMCA6IE5JTEZTX0JUUkVFX05PREVfRVhUUkFfUEFEX1NJWkUpKTsKIH0KIAogc3RhdGljIGlubGluZSBfX2xlNjQgKgotbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAotCQkgICAgICAgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCituaWxmc19idHJlZV9ub2RlX2RwdHJzKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSkKIHsKLQlyZXR1cm4gKF9fbGU2NCAqKShuaWxmc19idHJlZV9ub2RlX2RrZXlzKGJ0cmVlLCBub2RlKSArCi0JCQkgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21heChidHJlZSwgbm9kZSkpOworCXJldHVybiAoX19sZTY0ICopKG5pbGZzX2J0cmVlX25vZGVfZGtleXMobm9kZSkgKworCQkJICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9tYXgobm9kZSwgYnRyZWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBfX3U2NAotbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBpbmRleCkKK25pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgaW50IGluZGV4KQogewotCXJldHVybiBuaWxmc19ibWFwX2RrZXlfdG9fa2V5KCoobmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhidHJlZSwgbm9kZSkgKwotCQkJCQlpbmRleCkpOworCXJldHVybiBuaWxmc19ibWFwX2RrZXlfdG9fa2V5KCoobmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhub2RlKSArIGluZGV4KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotbmlsZnNfYnRyZWVfbm9kZV9zZXRfa2V5KHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBpbmRleCwgX191NjQga2V5KQorbmlsZnNfYnRyZWVfbm9kZV9zZXRfa2V5KHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCBpbnQgaW5kZXgsIF9fdTY0IGtleSkKIHsKLQkqKG5pbGZzX2J0cmVlX25vZGVfZGtleXMoYnRyZWUsIG5vZGUpICsgaW5kZXgpID0KLQkJbmlsZnNfYm1hcF9rZXlfdG9fZGtleShrZXkpOworCSoobmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhub2RlKSArIGluZGV4KSA9IG5pbGZzX2JtYXBfa2V5X3RvX2RrZXkoa2V5KTsKIH0KIAogc3RhdGljIGlubGluZSBfX3U2NAogbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsCi0JCQkgaW50IGluZGV4KQorCQkJIGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCBpbnQgaW5kZXgpCiB7Ci0JcmV0dXJuIG5pbGZzX2JtYXBfZHB0cl90b19wdHIoKihuaWxmc19idHJlZV9ub2RlX2RwdHJzKGJ0cmVlLCBub2RlKSArCisJcmV0dXJuIG5pbGZzX2JtYXBfZHB0cl90b19wdHIoKihuaWxmc19idHJlZV9ub2RlX2RwdHJzKG5vZGUsIGJ0cmVlKSArCiAJCQkJCWluZGV4KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogbmlsZnNfYnRyZWVfbm9kZV9zZXRfcHRyKHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsCi0JCQkgaW50IGluZGV4LAotCQkJIF9fdTY0IHB0cikKKwkJCSBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgaW50IGluZGV4LCBfX3U2NCBwdHIpCiB7Ci0JKihuaWxmc19idHJlZV9ub2RlX2RwdHJzKGJ0cmVlLCBub2RlKSArIGluZGV4KSA9CisJKihuaWxmc19idHJlZV9ub2RlX2RwdHJzKG5vZGUsIGJ0cmVlKSArIGluZGV4KSA9CiAJCW5pbGZzX2JtYXBfcHRyX3RvX2RwdHIocHRyKTsKIH0KIApAQCAtMjgzLDEyICsyNDcsMTIgQEAKIAlfX2xlNjQgKmRwdHJzOwogCWludCBpOwogCi0JbmlsZnNfYnRyZWVfbm9kZV9zZXRfZmxhZ3MoYnRyZWUsIG5vZGUsIGZsYWdzKTsKLQluaWxmc19idHJlZV9ub2RlX3NldF9sZXZlbChidHJlZSwgbm9kZSwgbGV2ZWwpOwotCW5pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSwgbmNoaWxkcmVuKTsKKwluaWxmc19idHJlZV9ub2RlX3NldF9mbGFncyhub2RlLCBmbGFncyk7CisJbmlsZnNfYnRyZWVfbm9kZV9zZXRfbGV2ZWwobm9kZSwgbGV2ZWwpOworCW5pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihub2RlLCBuY2hpbGRyZW4pOwogCi0JZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKGJ0cmVlLCBub2RlKTsKLQlkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMoYnRyZWUsIG5vZGUpOworCWRrZXlzID0gbmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhub2RlKTsKKwlkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMobm9kZSwgYnRyZWUpOwogCWZvciAoaSA9IDA7IGkgPCBuY2hpbGRyZW47IGkrKykgewogCQlka2V5c1tpXSA9IG5pbGZzX2JtYXBfa2V5X3RvX2RrZXkoa2V5c1tpXSk7CiAJCWRwdHJzW2ldID0gbmlsZnNfYm1hcF9wdHJfdG9fZHB0cihwdHJzW2ldKTsKQEAgLTMwNSwxMyArMjY5LDEzIEBACiAJX19sZTY0ICpsZHB0cnMsICpyZHB0cnM7CiAJaW50IGxuY2hpbGRyZW4sIHJuY2hpbGRyZW47CiAKLQlsZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKGJ0cmVlLCBsZWZ0KTsKLQlsZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKGJ0cmVlLCBsZWZ0KTsKLQlsbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBsZWZ0KTsKKwlsZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKGxlZnQpOworCWxkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMobGVmdCwgYnRyZWUpOworCWxuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obGVmdCk7CiAKLQlyZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKGJ0cmVlLCByaWdodCk7Ci0JcmRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhidHJlZSwgcmlnaHQpOwotCXJuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIHJpZ2h0KTsKKwlyZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKHJpZ2h0KTsKKwlyZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKHJpZ2h0LCBidHJlZSk7CisJcm5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihyaWdodCk7CiAKIAltZW1jcHkobGRrZXlzICsgbG5jaGlsZHJlbiwgcmRrZXlzLCBuICogc2l6ZW9mKCpyZGtleXMpKTsKIAltZW1jcHkobGRwdHJzICsgbG5jaGlsZHJlbiwgcmRwdHJzLCBuICogc2l6ZW9mKCpyZHB0cnMpKTsKQEAgLTMyMCw4ICsyODQsOCBAQAogCiAJbG5jaGlsZHJlbiArPSBuOwogCXJuY2hpbGRyZW4gLT0gbjsKLQluaWxmc19idHJlZV9ub2RlX3NldF9uY2hpbGRyZW4oYnRyZWUsIGxlZnQsIGxuY2hpbGRyZW4pOwotCW5pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihidHJlZSwgcmlnaHQsIHJuY2hpbGRyZW4pOworCW5pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihsZWZ0LCBsbmNoaWxkcmVuKTsKKwluaWxmc19idHJlZV9ub2RlX3NldF9uY2hpbGRyZW4ocmlnaHQsIHJuY2hpbGRyZW4pOwogfQogCiAvKiBBc3N1bWUgdGhhdCB0aGUgYnVmZmVyIGhlYWRzIGNvcnJlc3BvbmRpbmcgdG8gbGVmdCBhbmQgcmlnaHQgYXJlIGxvY2tlZC4gKi8KQEAgLTMzNCwxMyArMjk4LDEzIEBACiAJX19sZTY0ICpsZHB0cnMsICpyZHB0cnM7CiAJaW50IGxuY2hpbGRyZW4sIHJuY2hpbGRyZW47CiAKLQlsZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKGJ0cmVlLCBsZWZ0KTsKLQlsZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKGJ0cmVlLCBsZWZ0KTsKLQlsbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBsZWZ0KTsKKwlsZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKGxlZnQpOworCWxkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMobGVmdCwgYnRyZWUpOworCWxuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obGVmdCk7CiAKLQlyZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKGJ0cmVlLCByaWdodCk7Ci0JcmRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhidHJlZSwgcmlnaHQpOwotCXJuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIHJpZ2h0KTsKKwlyZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKHJpZ2h0KTsKKwlyZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKHJpZ2h0LCBidHJlZSk7CisJcm5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihyaWdodCk7CiAKIAltZW1tb3ZlKHJka2V5cyArIG4sIHJka2V5cywgcm5jaGlsZHJlbiAqIHNpemVvZigqcmRrZXlzKSk7CiAJbWVtbW92ZShyZHB0cnMgKyBuLCByZHB0cnMsIHJuY2hpbGRyZW4gKiBzaXplb2YoKnJkcHRycykpOwpAQCAtMzQ5LDggKzMxMyw4IEBACiAKIAlsbmNoaWxkcmVuIC09IG47CiAJcm5jaGlsZHJlbiArPSBuOwotCW5pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihidHJlZSwgbGVmdCwgbG5jaGlsZHJlbik7Ci0JbmlsZnNfYnRyZWVfbm9kZV9zZXRfbmNoaWxkcmVuKGJ0cmVlLCByaWdodCwgcm5jaGlsZHJlbik7CisJbmlsZnNfYnRyZWVfbm9kZV9zZXRfbmNoaWxkcmVuKGxlZnQsIGxuY2hpbGRyZW4pOworCW5pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihyaWdodCwgcm5jaGlsZHJlbik7CiB9CiAKIC8qIEFzc3VtZSB0aGF0IHRoZSBidWZmZXIgaGVhZCBjb3JyZXNwb25kaW5nIHRvIG5vZGUgaXMgbG9ja2VkLiAqLwpAQCAtMzYyLDkgKzMyNiw5IEBACiAJX19sZTY0ICpkcHRyczsKIAlpbnQgbmNoaWxkcmVuOwogCi0JZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKGJ0cmVlLCBub2RlKTsKLQlkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMoYnRyZWUsIG5vZGUpOwotCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSk7CisJZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKG5vZGUpOworCWRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhub2RlLCBidHJlZSk7CisJbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpOwogCWlmIChpbmRleCA8IG5jaGlsZHJlbikgewogCQltZW1tb3ZlKGRrZXlzICsgaW5kZXggKyAxLCBka2V5cyArIGluZGV4LAogCQkJKG5jaGlsZHJlbiAtIGluZGV4KSAqIHNpemVvZigqZGtleXMpKTsKQEAgLTM3NCw3ICszMzgsNyBAQAogCWRrZXlzW2luZGV4XSA9IG5pbGZzX2JtYXBfa2V5X3RvX2RrZXkoa2V5KTsKIAlkcHRyc1tpbmRleF0gPSBuaWxmc19ibWFwX3B0cl90b19kcHRyKHB0cik7CiAJbmNoaWxkcmVuKys7Ci0JbmlsZnNfYnRyZWVfbm9kZV9zZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlLCBuY2hpbGRyZW4pOworCW5pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihub2RlLCBuY2hpbGRyZW4pOwogfQogCiAvKiBBc3N1bWUgdGhhdCB0aGUgYnVmZmVyIGhlYWQgY29ycmVzcG9uZGluZyB0byBub2RlIGlzIGxvY2tlZC4gKi8KQEAgLTM4OCwxMSArMzUyLDExIEBACiAJX19sZTY0ICpkcHRyczsKIAlpbnQgbmNoaWxkcmVuOwogCi0JZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKGJ0cmVlLCBub2RlKTsKLQlkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMoYnRyZWUsIG5vZGUpOworCWRrZXlzID0gbmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhub2RlKTsKKwlkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMobm9kZSwgYnRyZWUpOwogCWtleSA9IG5pbGZzX2JtYXBfZGtleV90b19rZXkoZGtleXNbaW5kZXhdKTsKIAlwdHIgPSBuaWxmc19ibWFwX2RwdHJfdG9fcHRyKGRwdHJzW2luZGV4XSk7Ci0JbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKTsKKwluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSk7CiAJaWYgKGtleXAgIT0gTlVMTCkKIAkJKmtleXAgPSBrZXk7CiAJaWYgKHB0cnAgIT0gTlVMTCkKQEAgLTQwNSwxMSArMzY5LDEwIEBACiAJCQkobmNoaWxkcmVuIC0gaW5kZXggLSAxKSAqIHNpemVvZigqZHB0cnMpKTsKIAl9CiAJbmNoaWxkcmVuLS07Ci0JbmlsZnNfYnRyZWVfbm9kZV9zZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlLCBuY2hpbGRyZW4pOworCW5pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihub2RlLCBuY2hpbGRyZW4pOwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX25vZGVfbG9va3VwKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkJICAgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsCitzdGF0aWMgaW50IG5pbGZzX2J0cmVlX25vZGVfbG9va3VwKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLAogCQkJCSAgIF9fdTY0IGtleSwgaW50ICppbmRleHApCiB7CiAJX191NjQgbmtleTsKQEAgLTQxNywxMiArMzgwLDEyIEBACiAKIAkvKiBiaW5hcnkgc2VhcmNoICovCiAJbG93ID0gMDsKLQloaWdoID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKSAtIDE7CisJaGlnaCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKSAtIDE7CiAJaW5kZXggPSAwOwogCXMgPSAwOwogCXdoaWxlIChsb3cgPD0gaGlnaCkgewogCQlpbmRleCA9IChsb3cgKyBoaWdoKSAvIDI7Ci0JCW5rZXkgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkoYnRyZWUsIG5vZGUsIGluZGV4KTsKKwkJbmtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCBpbmRleCk7CiAJCWlmIChua2V5ID09IGtleSkgewogCQkJcyA9IDA7CiAJCQlnb3RvIG91dDsKQEAgLTQzNiw5ICszOTksOCBAQAogCX0KIAogCS8qIGFkanVzdCBpbmRleCAqLwotCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChidHJlZSwgbm9kZSkgPgotCSAgICBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTikgewotCQlpZiAoKHMgPiAwKSAmJiAoaW5kZXggPiAwKSkKKwlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwobm9kZSkgPiBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTikgeworCQlpZiAocyA+IDAgJiYgaW5kZXggPiAwKQogCQkJaW5kZXgtLTsKIAl9IGVsc2UgaWYgKHMgPCAwKQogCQlpbmRleCsrOwpAQCAtNDU2LDI1ICs0MTgsMjAgQEAKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqCi1uaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAotCQkJICAgICBpbnQgbGV2ZWwpCituaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLCBpbnQgbGV2ZWwpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqKXBhdGhbbGV2ZWxdLmJwX2JoLT5iX2RhdGE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKgotbmlsZnNfYnRyZWVfZ2V0X3NpYl9ub2RlKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCi0JCQkgaW50IGxldmVsKQorbmlsZnNfYnRyZWVfZ2V0X3NpYl9ub2RlKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLCBpbnQgbGV2ZWwpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqKXBhdGhbbGV2ZWxdLmJwX3NpYl9iaC0+Yl9kYXRhOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBuaWxmc19idHJlZV9oZWlnaHQoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSkKIHsKLQlyZXR1cm4gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwoYnRyZWUsIG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKSkKLQkJKyAxOworCXJldHVybiBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChuaWxmc19idHJlZV9nZXRfcm9vdChidHJlZSkpICsgMTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqCkBAIC00ODQsNyArNDQxLDcgQEAKIHsKIAlyZXR1cm4gKGxldmVsID09IG5pbGZzX2J0cmVlX2hlaWdodChidHJlZSkgLSAxKSA/CiAJCW5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKSA6Ci0JCW5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKKwkJbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCk7CiB9CiAKIHN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfZG9fbG9va3VwKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCkBAIC00OTYsMTIgKzQ1MywxMSBAQAogCWludCBsZXZlbCwgaW5kZXgsIGZvdW5kLCByZXQ7CiAKIAlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X3Jvb3QoYnRyZWUpOwotCWxldmVsID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwoYnRyZWUsIG5vZGUpOwotCWlmICgobGV2ZWwgPCBtaW5sZXZlbCkgfHwKLQkgICAgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSkgPD0gMCkpCisJbGV2ZWwgPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChub2RlKTsKKwlpZiAobGV2ZWwgPCBtaW5sZXZlbCB8fCBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSkgPD0gMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlmb3VuZCA9IG5pbGZzX2J0cmVlX25vZGVfbG9va3VwKGJ0cmVlLCBub2RlLCBrZXksICZpbmRleCk7CisJZm91bmQgPSBuaWxmc19idHJlZV9ub2RlX2xvb2t1cChub2RlLCBrZXksICZpbmRleCk7CiAJcHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBub2RlLCBpbmRleCk7CiAJcGF0aFtsZXZlbF0uYnBfYmggPSBOVUxMOwogCXBhdGhbbGV2ZWxdLmJwX2luZGV4ID0gaW5kZXg7CkBAIC01MTAsMTQgKzQ2NiwxMyBAQAogCQlyZXQgPSBuaWxmc19idHJlZV9nZXRfYmxvY2soYnRyZWUsIHB0ciwgJnBhdGhbbGV2ZWxdLmJwX2JoKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwotCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOwotCQlCVUdfT04obGV2ZWwgIT0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwoYnRyZWUsIG5vZGUpKTsKKwkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOworCQlCVUdfT04obGV2ZWwgIT0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwobm9kZSkpOwogCQlpZiAoIWZvdW5kKQotCQkJZm91bmQgPSBuaWxmc19idHJlZV9ub2RlX2xvb2t1cChidHJlZSwgbm9kZSwga2V5LAotCQkJCQkJCSZpbmRleCk7CisJCQlmb3VuZCA9IG5pbGZzX2J0cmVlX25vZGVfbG9va3VwKG5vZGUsIGtleSwgJmluZGV4KTsKIAkJZWxzZQogCQkJaW5kZXggPSAwOwotCQlpZiAoaW5kZXggPCBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9tYXgoYnRyZWUsIG5vZGUpKQorCQlpZiAoaW5kZXggPCBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9tYXgobm9kZSwgYnRyZWUpKQogCQkJcHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBub2RlLCBpbmRleCk7CiAJCWVsc2UgewogCQkJV0FSTl9PTihmb3VuZCB8fCBsZXZlbCAhPSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTik7CkBAIC01NDQsMTAgKzQ5OSwxMCBAQAogCWludCBpbmRleCwgbGV2ZWwsIHJldDsKIAogCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfcm9vdChidHJlZSk7Ci0JaW5kZXggPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpIC0gMTsKKwlpbmRleCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKSAtIDE7CiAJaWYgKGluZGV4IDwgMCkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JbGV2ZWwgPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChidHJlZSwgbm9kZSk7CisJbGV2ZWwgPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChub2RlKTsKIAlwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIG5vZGUsIGluZGV4KTsKIAlwYXRoW2xldmVsXS5icF9iaCA9IE5VTEw7CiAJcGF0aFtsZXZlbF0uYnBfaW5kZXggPSBpbmRleDsKQEAgLTU1NiwxNSArNTExLDE1IEBACiAJCXJldCA9IG5pbGZzX2J0cmVlX2dldF9ibG9jayhidHJlZSwgcHRyLCAmcGF0aFtsZXZlbF0uYnBfYmgpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7Ci0JCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7Ci0JCUJVR19PTihsZXZlbCAhPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChidHJlZSwgbm9kZSkpOwotCQlpbmRleCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSkgLSAxOworCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCk7CisJCUJVR19PTihsZXZlbCAhPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChub2RlKSk7CisJCWluZGV4ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpIC0gMTsKIAkJcHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBub2RlLCBpbmRleCk7CiAJCXBhdGhbbGV2ZWxdLmJwX2luZGV4ID0gaW5kZXg7CiAJfQogCiAJaWYgKGtleXAgIT0gTlVMTCkKLQkJKmtleXAgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkoYnRyZWUsIG5vZGUsIGluZGV4KTsKKwkJKmtleXAgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkobm9kZSwgaW5kZXgpOwogCWlmIChwdHJwICE9IE5VTEwpCiAJCSpwdHJwID0gcHRyOwogCkBAIC01ODAsMTggKzUzNSwxOCBAQAogCWludCByZXQ7CiAKIAlidHJlZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWUgKilibWFwOwotCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKGJ0cmVlKTsKKwlwYXRoID0gbmlsZnNfYnRyZWVfYWxsb2NfcGF0aCgpOwogCWlmIChwYXRoID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCW5pbGZzX2J0cmVlX2luaXRfcGF0aChidHJlZSwgcGF0aCk7CisJbmlsZnNfYnRyZWVfaW5pdF9wYXRoKHBhdGgpOwogCiAJcmV0ID0gbmlsZnNfYnRyZWVfZG9fbG9va3VwKGJ0cmVlLCBwYXRoLCBrZXksICZwdHIsIGxldmVsKTsKIAogCWlmIChwdHJwICE9IE5VTEwpCiAJCSpwdHJwID0gcHRyOwogCi0JbmlsZnNfYnRyZWVfY2xlYXJfcGF0aChidHJlZSwgcGF0aCk7Ci0JbmlsZnNfYnRyZWVfZnJlZV9wYXRoKGJ0cmVlLCBwYXRoKTsKKwluaWxmc19idHJlZV9yZWxlYXNlX3BhdGgocGF0aCk7CisJbmlsZnNfYnRyZWVfZnJlZV9wYXRoKHBhdGgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTYwOCwxMCArNTYzLDEwIEBACiAJaW50IGxldmVsID0gTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU47CiAJaW50IHJldCwgY250LCBpbmRleCwgbWF4bGV2ZWw7CiAKLQlwYXRoID0gbmlsZnNfYnRyZWVfYWxsb2NfcGF0aChidHJlZSk7CisJcGF0aCA9IG5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoKTsKIAlpZiAocGF0aCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQluaWxmc19idHJlZV9pbml0X3BhdGgoYnRyZWUsIHBhdGgpOworCW5pbGZzX2J0cmVlX2luaXRfcGF0aChwYXRoKTsKIAlyZXQgPSBuaWxmc19idHJlZV9kb19sb29rdXAoYnRyZWUsIHBhdGgsIGtleSwgJnB0ciwgbGV2ZWwpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKQEAgLTYzMSw4ICs1ODYsOCBAQAogCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOwogCWluZGV4ID0gcGF0aFtsZXZlbF0uYnBfaW5kZXggKyAxOwogCWZvciAoOzspIHsKLQkJd2hpbGUgKGluZGV4IDwgbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKSkgewotCQkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgbm9kZSwgaW5kZXgpICE9CisJCXdoaWxlIChpbmRleCA8IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKSkgeworCQkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCBpbmRleCkgIT0KIAkJCSAgICBrZXkgKyBjbnQpCiAJCQkJZ290byBlbmQ7CiAJCQlwdHIyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBub2RlLCBpbmRleCk7CkBAIC02NTMsOCArNjA4LDggQEAKIAkJLyogbG9vay11cCByaWdodCBzaWJsaW5nIG5vZGUgKi8KIAkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEpOwogCQlpbmRleCA9IHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCArIDE7Ci0JCWlmIChpbmRleCA+PSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpIHx8Ci0JCSAgICBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkoYnRyZWUsIG5vZGUsIGluZGV4KSAhPSBrZXkgKyBjbnQpCisJCWlmIChpbmRleCA+PSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSkgfHwKKwkJICAgIG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCBpbmRleCkgIT0ga2V5ICsgY250KQogCQkJYnJlYWs7CiAJCXB0cjIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIG5vZGUsIGluZGV4KTsKIAkJcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4ID0gaW5kZXg7CkBAIC02NjQsNyArNjE5LDcgQEAKIAkJcmV0ID0gbmlsZnNfYnRyZWVfZ2V0X2Jsb2NrKGJ0cmVlLCBwdHIyLCAmcGF0aFtsZXZlbF0uYnBfYmgpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwotCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOworCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCk7CiAJCWluZGV4ID0gMDsKIAkJcGF0aFtsZXZlbF0uYnBfaW5kZXggPSBpbmRleDsKIAl9CkBAIC02NzIsOCArNjI3LDggQEAKIAkqcHRycCA9IHB0cjsKIAlyZXQgPSBjbnQ7CiAgb3V0OgotCW5pbGZzX2J0cmVlX2NsZWFyX3BhdGgoYnRyZWUsIHBhdGgpOwotCW5pbGZzX2J0cmVlX2ZyZWVfcGF0aChidHJlZSwgcGF0aCk7CisJbmlsZnNfYnRyZWVfcmVsZWFzZV9wYXRoKHBhdGgpOworCW5pbGZzX2J0cmVlX2ZyZWVfcGF0aChwYXRoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02ODUsOSArNjQwLDcgQEAKIAkJZG8gewogCQkJbG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfYmgpOwogCQkJbmlsZnNfYnRyZWVfbm9kZV9zZXRfa2V5KAotCQkJCWJ0cmVlLAotCQkJCW5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoCi0JCQkJCWJ0cmVlLCBwYXRoLCBsZXZlbCksCisJCQkJbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCksCiAJCQkJcGF0aFtsZXZlbF0uYnBfaW5kZXgsIGtleSk7CiAJCQlpZiAoIWJ1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCkpCiAJCQkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpOwpAQCAtNjk4LDggKzY1MSw3IEBACiAKIAkvKiByb290ICovCiAJaWYgKGxldmVsID09IG5pbGZzX2J0cmVlX2hlaWdodChidHJlZSkgLSAxKSB7Ci0JCW5pbGZzX2J0cmVlX25vZGVfc2V0X2tleShidHJlZSwKLQkJCQkJIG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKSwKKwkJbmlsZnNfYnRyZWVfbm9kZV9zZXRfa2V5KG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKSwKIAkJCQkJIHBhdGhbbGV2ZWxdLmJwX2luZGV4LCBrZXkpOwogCX0KIH0KQEAgLTcxMiw3ICs2NjQsNyBAQAogCiAJaWYgKGxldmVsIDwgbmlsZnNfYnRyZWVfaGVpZ2h0KGJ0cmVlKSAtIDEpIHsKIAkJbG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfYmgpOwotCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOworCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCk7CiAJCW5pbGZzX2J0cmVlX25vZGVfaW5zZXJ0KGJ0cmVlLCBub2RlLCAqa2V5cCwgKnB0cnAsCiAJCQkJCXBhdGhbbGV2ZWxdLmJwX2luZGV4KTsKIAkJaWYgKCFidWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpKQpAQCAtNzIxLDggKzY3Myw4IEBACiAKIAkJaWYgKHBhdGhbbGV2ZWxdLmJwX2luZGV4ID09IDApCiAJCQluaWxmc19idHJlZV9wcm9tb3RlX2tleShidHJlZSwgcGF0aCwgbGV2ZWwgKyAxLAotCQkJCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KAotCQkJCQkJCWJ0cmVlLCBub2RlLCAwKSk7CisJCQkJCQluaWxmc19idHJlZV9ub2RlX2dldF9rZXkobm9kZSwKKwkJCQkJCQkJCSAwKSk7CiAJfSBlbHNlIHsKIAkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKIAkJbmlsZnNfYnRyZWVfbm9kZV9pbnNlcnQoYnRyZWUsIG5vZGUsICprZXlwLCAqcHRycCwKQEAgLTc0MCwxMCArNjkyLDEwIEBACiAJbG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfYmgpOwogCWxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CiAKLQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOwotCWxlZnQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKLQluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpOwotCWxuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIGxlZnQpOworCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKKwlsZWZ0ID0gbmlsZnNfYnRyZWVfZ2V0X3NpYl9ub2RlKHBhdGgsIGxldmVsKTsKKwluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSk7CisJbG5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihsZWZ0KTsKIAltb3ZlID0gMDsKIAogCW4gPSAobmNoaWxkcmVuICsgbG5jaGlsZHJlbiArIDEpIC8gMiAtIGxuY2hpbGRyZW47CkBAIC03NjQsNyArNzE2LDcgQEAKIAl1bmxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CiAKIAluaWxmc19idHJlZV9wcm9tb3RlX2tleShidHJlZSwgcGF0aCwgbGV2ZWwgKyAxLAotCQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgbm9kZSwgMCkpOworCQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCAwKSk7CiAKIAlpZiAobW92ZSkgewogCQlicmVsc2UocGF0aFtsZXZlbF0uYnBfYmgpOwpAQCAtNzkxLDEwICs3NDMsMTAgQEAKIAlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9iaCk7CiAJbG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKIAotCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7Ci0JcmlnaHQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKLQluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpOwotCXJuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIHJpZ2h0KTsKKwlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCk7CisJcmlnaHQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUocGF0aCwgbGV2ZWwpOworCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKTsKKwlybmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHJpZ2h0KTsKIAltb3ZlID0gMDsKIAogCW4gPSAobmNoaWxkcmVuICsgcm5jaGlsZHJlbiArIDEpIC8gMiAtIHJuY2hpbGRyZW47CkBAIC04MTYsMTUgKzc2OCwxNCBAQAogCiAJcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4Kys7CiAJbmlsZnNfYnRyZWVfcHJvbW90ZV9rZXkoYnRyZWUsIHBhdGgsIGxldmVsICsgMSwKLQkJCQluaWxmc19idHJlZV9ub2RlX2dldF9rZXkoYnRyZWUsIHJpZ2h0LCAwKSk7CisJCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KHJpZ2h0LCAwKSk7CiAJcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4LS07CiAKIAlpZiAobW92ZSkgewogCQlicmVsc2UocGF0aFtsZXZlbF0uYnBfYmgpOwogCQlwYXRoW2xldmVsXS5icF9iaCA9IHBhdGhbbGV2ZWxdLmJwX3NpYl9iaDsKIAkJcGF0aFtsZXZlbF0uYnBfc2liX2JoID0gTlVMTDsKLQkJcGF0aFtsZXZlbF0uYnBfaW5kZXggLT0KLQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSk7CisJCXBhdGhbbGV2ZWxdLmJwX2luZGV4IC09IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKTsKIAkJcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4Kys7CiAJfSBlbHNlIHsKIAkJYnJlbHNlKHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CkBAIC04NDYsOSArNzk3LDkgQEAKIAlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9iaCk7CiAJbG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKIAotCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7Ci0JcmlnaHQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKLQluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpOworCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKKwlyaWdodCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShwYXRoLCBsZXZlbCk7CisJbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpOwogCW1vdmUgPSAwOwogCiAJbiA9IChuY2hpbGRyZW4gKyAxKSAvIDI7CkBAIC04NjcsMTYgKzgxOCwxNSBAQAogCXVubG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfYmgpOwogCXVubG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKIAotCW5ld2tleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgcmlnaHQsIDApOworCW5ld2tleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShyaWdodCwgMCk7CiAJbmV3cHRyID0gcGF0aFtsZXZlbF0uYnBfbmV3cmVxLmJwcl9wdHI7CiAKIAlpZiAobW92ZSkgewotCQlwYXRoW2xldmVsXS5icF9pbmRleCAtPQotCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKTsKKwkJcGF0aFtsZXZlbF0uYnBfaW5kZXggLT0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpOwogCQluaWxmc19idHJlZV9ub2RlX2luc2VydChidHJlZSwgcmlnaHQsICprZXlwLCAqcHRycCwKIAkJCQkJcGF0aFtsZXZlbF0uYnBfaW5kZXgpOwogCi0JCSprZXlwID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCByaWdodCwgMCk7CisJCSprZXlwID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KHJpZ2h0LCAwKTsKIAkJKnB0cnAgPSBwYXRoW2xldmVsXS5icF9uZXdyZXEuYnByX3B0cjsKIAogCQlicmVsc2UocGF0aFtsZXZlbF0uYnBfYmgpOwpAQCAtODg1LDcgKzgzNSw3IEBACiAJfSBlbHNlIHsKIAkJbmlsZnNfYnRyZWVfZG9faW5zZXJ0KGJ0cmVlLCBwYXRoLCBsZXZlbCwga2V5cCwgcHRycCk7CiAKLQkJKmtleXAgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkoYnRyZWUsIHJpZ2h0LCAwKTsKKwkJKmtleXAgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkocmlnaHQsIDApOwogCQkqcHRycCA9IHBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyOwogCiAJCWJyZWxzZShwYXRoW2xldmVsXS5icF9zaWJfYmgpOwpAQCAtOTA1LDEyICs4NTUsMTIgQEAKIAlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9zaWJfYmgpOwogCiAJcm9vdCA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKLQljaGlsZCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOworCWNoaWxkID0gbmlsZnNfYnRyZWVfZ2V0X3NpYl9ub2RlKHBhdGgsIGxldmVsKTsKIAotCW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIHJvb3QpOworCW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4ocm9vdCk7CiAKIAluaWxmc19idHJlZV9ub2RlX21vdmVfcmlnaHQoYnRyZWUsIHJvb3QsIGNoaWxkLCBuKTsKLQluaWxmc19idHJlZV9ub2RlX3NldF9sZXZlbChidHJlZSwgcm9vdCwgbGV2ZWwgKyAxKTsKKwluaWxmc19idHJlZV9ub2RlX3NldF9sZXZlbChyb290LCBsZXZlbCArIDEpOwogCiAJaWYgKCFidWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfc2liX2JoKSkKIAkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKQEAgLTkyMiw3ICs4NzIsNyBAQAogCiAJbmlsZnNfYnRyZWVfZG9faW5zZXJ0KGJ0cmVlLCBwYXRoLCBsZXZlbCwga2V5cCwgcHRycCk7CiAKLQkqa2V5cCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgY2hpbGQsIDApOworCSprZXlwID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGNoaWxkLCAwKTsKIAkqcHRycCA9IHBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyOwogfQogCkBAIC05OTAsMjYgKzk0MCwyOSBAQAogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCAqcGFyZW50LCAqc2liOwogCV9fdTY0IHNpYnB0cjsKIAlpbnQgcGluZGV4LCBsZXZlbCwgcmV0OworCXN0cnVjdCBpbm9kZSAqZGF0ID0gTlVMTDsKIAogCXN0YXRzLT5ic19uYmxvY2tzID0gMDsKIAlsZXZlbCA9IE5JTEZTX0JUUkVFX0xFVkVMX0RBVEE7CiAKIAkvKiBhbGxvY2F0ZSBhIG5ldyBwdHIgZm9yIGRhdGEgYmxvY2sgKi8KLQlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKCZidHJlZS0+YnRfYm1hcCkpCisJaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTigmYnRyZWUtPmJ0X2JtYXApKSB7CiAJCXBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyID0KIAkJCW5pbGZzX2J0cmVlX2ZpbmRfdGFyZ2V0X3YoYnRyZWUsIHBhdGgsIGtleSk7CisJCWRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdCgmYnRyZWUtPmJ0X2JtYXApOworCX0KIAogCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoJmJ0cmVlLT5idF9ibWFwLAotCQkJCQkgICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxKTsKKwkJCQkJICAgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcSwgZGF0KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfb3V0X2RhdGE7CiAKIAlmb3IgKGxldmVsID0gTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU47CiAJICAgICBsZXZlbCA8IG5pbGZzX2J0cmVlX2hlaWdodChidHJlZSkgLSAxOwogCSAgICAgbGV2ZWwrKykgewotCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOwotCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKSA8Ci0JCSAgICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9tYXgoYnRyZWUsIG5vZGUpKSB7CisJCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKKwkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKSA8CisJCSAgICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9tYXgobm9kZSwgYnRyZWUpKSB7CiAJCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2RvX2luc2VydDsKIAkJCXN0YXRzLT5ic19uYmxvY2tzKys7CiAJCQlnb3RvIG91dDsKQEAgLTEwMjYsOCArOTc5LDggQEAKIAkJCWlmIChyZXQgPCAwKQogCQkJCWdvdG8gZXJyX291dF9jaGlsZF9ub2RlOwogCQkJc2liID0gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopYmgtPmJfZGF0YTsKLQkJCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIHNpYikgPAotCQkJICAgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21heChidHJlZSwgc2liKSkgeworCQkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihzaWIpIDwKKwkJCSAgICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9tYXgoc2liLCBidHJlZSkpIHsKIAkJCQlwYXRoW2xldmVsXS5icF9zaWJfYmggPSBiaDsKIAkJCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2NhcnJ5X2xlZnQ7CiAJCQkJc3RhdHMtPmJzX25ibG9ja3MrKzsKQEAgLTEwMzgsMTUgKzk5MSwxNSBAQAogCiAJCS8qIHJpZ2h0IHNpYmxpbmcgKi8KIAkJaWYgKHBpbmRleCA8Ci0JCSAgICBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIHBhcmVudCkgLSAxKSB7CisJCSAgICBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4ocGFyZW50KSAtIDEpIHsKIAkJCXNpYnB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgcGFyZW50LAogCQkJCQkJCSAgcGluZGV4ICsgMSk7CiAJCQlyZXQgPSBuaWxmc19idHJlZV9nZXRfYmxvY2soYnRyZWUsIHNpYnB0ciwgJmJoKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWdvdG8gZXJyX291dF9jaGlsZF9ub2RlOwogCQkJc2liID0gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopYmgtPmJfZGF0YTsKLQkJCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIHNpYikgPAotCQkJICAgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21heChidHJlZSwgc2liKSkgeworCQkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihzaWIpIDwKKwkJCSAgICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9tYXgoc2liLCBidHJlZSkpIHsKIAkJCQlwYXRoW2xldmVsXS5icF9zaWJfYmggPSBiaDsKIAkJCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2NhcnJ5X3JpZ2h0OwogCQkJCXN0YXRzLT5ic19uYmxvY2tzKys7CkBAIC0xMDU5LDcgKzEwMTIsNyBAQAogCQlwYXRoW2xldmVsXS5icF9uZXdyZXEuYnByX3B0ciA9CiAJCQlwYXRoW2xldmVsIC0gMV0uYnBfbmV3cmVxLmJwcl9wdHIgKyAxOwogCQlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfYWxsb2NfcHRyKCZidHJlZS0+YnRfYm1hcCwKLQkJCQkJCSAgICZwYXRoW2xldmVsXS5icF9uZXdyZXEpOworCQkJCQkJICAgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcSwgZGF0KTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycl9vdXRfY2hpbGRfbm9kZTsKIAkJcmV0ID0gbmlsZnNfYnRyZWVfZ2V0X25ld19ibG9jayhidHJlZSwKQEAgLTEwODEsOCArMTAzNCw4IEBACiAKIAkvKiByb290ICovCiAJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKLQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKSA8Ci0JICAgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21heChidHJlZSwgbm9kZSkpIHsKKwlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpIDwKKwkgICAgbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWF4KG5vZGUsIGJ0cmVlKSkgewogCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2RvX2luc2VydDsKIAkJc3RhdHMtPmJzX25ibG9ja3MrKzsKIAkJZ290byBvdXQ7CkBAIC0xMDkxLDcgKzEwNDQsNyBAQAogCS8qIGdyb3cgKi8KIAlwYXRoW2xldmVsXS5icF9uZXdyZXEuYnByX3B0ciA9IHBhdGhbbGV2ZWwgLSAxXS5icF9uZXdyZXEuYnByX3B0ciArIDE7CiAJcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2FsbG9jX3B0cigmYnRyZWUtPmJ0X2JtYXAsCi0JCQkJCSAgICZwYXRoW2xldmVsXS5icF9uZXdyZXEpOworCQkJCQkgICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxLCBkYXQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9vdXRfY2hpbGRfbm9kZTsKIAlyZXQgPSBuaWxmc19idHJlZV9nZXRfbmV3X2Jsb2NrKGJ0cmVlLCBwYXRoW2xldmVsXS5icF9uZXdyZXEuYnByX3B0ciwKQEAgLTExMTksMTYgKzEwNzIsMTggQEAKIAogCS8qIGVycm9yICovCiAgZXJyX291dF9jdXJyX25vZGU6Ci0JbmlsZnNfYm1hcF9hYm9ydF9hbGxvY19wdHIoJmJ0cmVlLT5idF9ibWFwLCAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxKTsKKwluaWxmc19ibWFwX2Fib3J0X2FsbG9jX3B0cigmYnRyZWUtPmJ0X2JtYXAsICZwYXRoW2xldmVsXS5icF9uZXdyZXEsCisJCQkJICAgZGF0KTsKICBlcnJfb3V0X2NoaWxkX25vZGU6CiAJZm9yIChsZXZlbC0tOyBsZXZlbCA+IE5JTEZTX0JUUkVFX0xFVkVMX0RBVEE7IGxldmVsLS0pIHsKIAkJbmlsZnNfYnRub2RlX2RlbGV0ZShwYXRoW2xldmVsXS5icF9zaWJfYmgpOwogCQluaWxmc19ibWFwX2Fib3J0X2FsbG9jX3B0cigmYnRyZWUtPmJ0X2JtYXAsCi0JCQkJCSAgICZwYXRoW2xldmVsXS5icF9uZXdyZXEpOworCQkJCQkgICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxLCBkYXQpOwogCiAJfQogCi0JbmlsZnNfYm1hcF9hYm9ydF9hbGxvY19wdHIoJmJ0cmVlLT5idF9ibWFwLCAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxKTsKKwluaWxmc19ibWFwX2Fib3J0X2FsbG9jX3B0cigmYnRyZWUtPmJ0X2JtYXAsICZwYXRoW2xldmVsXS5icF9uZXdyZXEsCisJCQkJICAgZGF0KTsKICBlcnJfb3V0X2RhdGE6CiAJKmxldmVscCA9IGxldmVsOwogCXN0YXRzLT5ic19uYmxvY2tzID0gMDsKQEAgLTExMzksMTYgKzEwOTQsMTkgQEAKIAkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKIAkJCQkgICAgICBpbnQgbWF4bGV2ZWwsIF9fdTY0IGtleSwgX191NjQgcHRyKQogeworCXN0cnVjdCBpbm9kZSAqZGF0ID0gTlVMTDsKIAlpbnQgbGV2ZWw7CiAKIAlzZXRfYnVmZmVyX25pbGZzX3ZvbGF0aWxlKChzdHJ1Y3QgYnVmZmVyX2hlYWQgKikoKHVuc2lnbmVkIGxvbmcpcHRyKSk7CiAJcHRyID0gcGF0aFtOSUxGU19CVFJFRV9MRVZFTF9EQVRBXS5icF9uZXdyZXEuYnByX3B0cjsKLQlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKCZidHJlZS0+YnRfYm1hcCkpCisJaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTigmYnRyZWUtPmJ0X2JtYXApKSB7CiAJCW5pbGZzX2J0cmVlX3NldF90YXJnZXRfdihidHJlZSwga2V5LCBwdHIpOworCQlkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoJmJ0cmVlLT5idF9ibWFwKTsKKwl9CiAKIAlmb3IgKGxldmVsID0gTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU47IGxldmVsIDw9IG1heGxldmVsOyBsZXZlbCsrKSB7CiAJCW5pbGZzX2JtYXBfY29tbWl0X2FsbG9jX3B0cigmYnRyZWUtPmJ0X2JtYXAsCi0JCQkJCSAgICAmcGF0aFtsZXZlbCAtIDFdLmJwX25ld3JlcSk7CisJCQkJCSAgICAmcGF0aFtsZXZlbCAtIDFdLmJwX25ld3JlcSwgZGF0KTsKIAkJcGF0aFtsZXZlbF0uYnBfb3AoYnRyZWUsIHBhdGgsIGxldmVsLCAma2V5LCAmcHRyKTsKIAl9CiAKQEAgLTExNjQsMTAgKzExMjIsMTAgQEAKIAlpbnQgbGV2ZWwsIHJldDsKIAogCWJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7Ci0JcGF0aCA9IG5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoYnRyZWUpOworCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKCk7CiAJaWYgKHBhdGggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbmlsZnNfYnRyZWVfaW5pdF9wYXRoKGJ0cmVlLCBwYXRoKTsKKwluaWxmc19idHJlZV9pbml0X3BhdGgocGF0aCk7CiAKIAlyZXQgPSBuaWxmc19idHJlZV9kb19sb29rdXAoYnRyZWUsIHBhdGgsIGtleSwgTlVMTCwKIAkJCQkgICAgTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU4pOwpAQCAtMTE4NCw4ICsxMTQyLDggQEAKIAluaWxmc19ibWFwX2FkZF9ibG9ja3MoYm1hcCwgc3RhdHMuYnNfbmJsb2Nrcyk7CiAKICBvdXQ6Ci0JbmlsZnNfYnRyZWVfY2xlYXJfcGF0aChidHJlZSwgcGF0aCk7Ci0JbmlsZnNfYnRyZWVfZnJlZV9wYXRoKGJ0cmVlLCBwYXRoKTsKKwluaWxmc19idHJlZV9yZWxlYXNlX3BhdGgocGF0aCk7CisJbmlsZnNfYnRyZWVfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTExOTcsNyArMTE1NSw3IEBACiAKIAlpZiAobGV2ZWwgPCBuaWxmc19idHJlZV9oZWlnaHQoYnRyZWUpIC0gMSkgewogCQlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9iaCk7Ci0JCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7CisJCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKIAkJbmlsZnNfYnRyZWVfbm9kZV9kZWxldGUoYnRyZWUsIG5vZGUsIGtleXAsIHB0cnAsCiAJCQkJCXBhdGhbbGV2ZWxdLmJwX2luZGV4KTsKIAkJaWYgKCFidWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpKQpAQCAtMTIwNSw3ICsxMTYzLDcgQEAKIAkJdW5sb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9iaCk7CiAJCWlmIChwYXRoW2xldmVsXS5icF9pbmRleCA9PSAwKQogCQkJbmlsZnNfYnRyZWVfcHJvbW90ZV9rZXkoYnRyZWUsIHBhdGgsIGxldmVsICsgMSwKLQkJCQluaWxmc19idHJlZV9ub2RlX2dldF9rZXkoYnRyZWUsIG5vZGUsIDApKTsKKwkJCQluaWxmc19idHJlZV9ub2RlX2dldF9rZXkobm9kZSwgMCkpOwogCX0gZWxzZSB7CiAJCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfcm9vdChidHJlZSk7CiAJCW5pbGZzX2J0cmVlX25vZGVfZGVsZXRlKGJ0cmVlLCBub2RlLCBrZXlwLCBwdHJwLApAQCAtMTIyNSwxMCArMTE4MywxMCBAQAogCWxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX2JoKTsKIAlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9zaWJfYmgpOwogCi0Jbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKLQlsZWZ0ID0gbmlsZnNfYnRyZWVfZ2V0X3NpYl9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7Ci0JbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKTsKLQlsbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBsZWZ0KTsKKwlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCk7CisJbGVmdCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShwYXRoLCBsZXZlbCk7CisJbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpOworCWxuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obGVmdCk7CiAKIAluID0gKG5jaGlsZHJlbiArIGxuY2hpbGRyZW4pIC8gMiAtIG5jaGlsZHJlbjsKIApAQCAtMTI0Myw3ICsxMjAxLDcgQEAKIAl1bmxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CiAKIAluaWxmc19idHJlZV9wcm9tb3RlX2tleShidHJlZSwgcGF0aCwgbGV2ZWwgKyAxLAotCQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgbm9kZSwgMCkpOworCQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCAwKSk7CiAKIAlicmVsc2UocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKIAlwYXRoW2xldmVsXS5icF9zaWJfYmggPSBOVUxMOwpAQCAtMTI2MiwxMCArMTIyMCwxMCBAQAogCWxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX2JoKTsKIAlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9zaWJfYmgpOwogCi0Jbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKLQlyaWdodCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOwotCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSk7Ci0Jcm5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgcmlnaHQpOworCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKKwlyaWdodCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShwYXRoLCBsZXZlbCk7CisJbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpOworCXJuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4ocmlnaHQpOwogCiAJbiA9IChuY2hpbGRyZW4gKyBybmNoaWxkcmVuKSAvIDIgLSBuY2hpbGRyZW47CiAKQEAgLTEyODEsNyArMTIzOSw3IEBACiAKIAlwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgrKzsKIAluaWxmc19idHJlZV9wcm9tb3RlX2tleShidHJlZSwgcGF0aCwgbGV2ZWwgKyAxLAotCQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgcmlnaHQsIDApKTsKKwkJCQluaWxmc19idHJlZV9ub2RlX2dldF9rZXkocmlnaHQsIDApKTsKIAlwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgtLTsKIAogCWJyZWxzZShwYXRoW2xldmVsXS5icF9zaWJfYmgpOwpAQCAtMTMwMCwxMCArMTI1OCwxMCBAQAogCWxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX2JoKTsKIAlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9zaWJfYmgpOwogCi0Jbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKLQlsZWZ0ID0gbmlsZnNfYnRyZWVfZ2V0X3NpYl9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7CisJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOworCWxlZnQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUocGF0aCwgbGV2ZWwpOwogCi0JbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSk7CisJbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKTsKIAogCW5pbGZzX2J0cmVlX25vZGVfbW92ZV9sZWZ0KGJ0cmVlLCBsZWZ0LCBub2RlLCBuKTsKIApAQCAtMTMxNiw3ICsxMjc0LDcgQEAKIAluaWxmc19idG5vZGVfZGVsZXRlKHBhdGhbbGV2ZWxdLmJwX2JoKTsKIAlwYXRoW2xldmVsXS5icF9iaCA9IHBhdGhbbGV2ZWxdLmJwX3NpYl9iaDsKIAlwYXRoW2xldmVsXS5icF9zaWJfYmggPSBOVUxMOwotCXBhdGhbbGV2ZWxdLmJwX2luZGV4ICs9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbGVmdCk7CisJcGF0aFtsZXZlbF0uYnBfaW5kZXggKz0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGxlZnQpOwogfQogCiBzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9jb25jYXRfcmlnaHQoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKQEAgLTEzMzEsMTAgKzEyODksMTAgQEAKIAlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9iaCk7CiAJbG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKIAotCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7Ci0JcmlnaHQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKKwlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCk7CisJcmlnaHQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUocGF0aCwgbGV2ZWwpOwogCi0JbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgcmlnaHQpOworCW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4ocmlnaHQpOwogCiAJbmlsZnNfYnRyZWVfbm9kZV9tb3ZlX2xlZnQoYnRyZWUsIG5vZGUsIHJpZ2h0LCBuKTsKIApAQCAtMTM2MCwxMSArMTMxOCwxMSBAQAogCiAJbG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfYmgpOwogCXJvb3QgPSBuaWxmc19idHJlZV9nZXRfcm9vdChidHJlZSk7Ci0JY2hpbGQgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7CisJY2hpbGQgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKIAogCW5pbGZzX2J0cmVlX25vZGVfZGVsZXRlKGJ0cmVlLCByb290LCBOVUxMLCBOVUxMLCAwKTsKLQluaWxmc19idHJlZV9ub2RlX3NldF9sZXZlbChidHJlZSwgcm9vdCwgbGV2ZWwpOwotCW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIGNoaWxkKTsKKwluaWxmc19idHJlZV9ub2RlX3NldF9sZXZlbChyb290LCBsZXZlbCk7CisJbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihjaGlsZCk7CiAJbmlsZnNfYnRyZWVfbm9kZV9tb3ZlX2xlZnQoYnRyZWUsIHJvb3QsIGNoaWxkLCBuKTsKIAl1bmxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX2JoKTsKIApAQCAtMTM3Niw3ICsxMzM0LDggQEAKIHN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfcHJlcGFyZV9kZWxldGUoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKIAkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKIAkJCQkgICAgICBpbnQgKmxldmVscCwKLQkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfYm1hcF9zdGF0cyAqc3RhdHMpCisJCQkJICAgICAgc3RydWN0IG5pbGZzX2JtYXBfc3RhdHMgKnN0YXRzLAorCQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGF0KQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsICpwYXJlbnQsICpzaWI7CkBAIC0xMzg4LDE3ICsxMzQ3LDE3IEBACiAJZm9yIChsZXZlbCA9IE5JTEZTX0JUUkVFX0xFVkVMX05PREVfTUlOOwogCSAgICAgbGV2ZWwgPCBuaWxmc19idHJlZV9oZWlnaHQoYnRyZWUpIC0gMTsKIAkgICAgIGxldmVsKyspIHsKLQkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKKwkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOwogCQlwYXRoW2xldmVsXS5icF9vbGRyZXEuYnByX3B0ciA9CiAJCQluaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIG5vZGUsCiAJCQkJCQkgcGF0aFtsZXZlbF0uYnBfaW5kZXgpOwogCQlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfZW5kX3B0cigmYnRyZWUtPmJ0X2JtYXAsCi0JCQkJCQkgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSk7CisJCQkJCQkgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycl9vdXRfY2hpbGRfbm9kZTsKIAotCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKSA+Ci0JCSAgICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9taW4oYnRyZWUsIG5vZGUpKSB7CisJCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSkgPgorCQkgICAgbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWluKG5vZGUsIGJ0cmVlKSkgewogCQkJcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9kb19kZWxldGU7CiAJCQlzdGF0cy0+YnNfbmJsb2NrcysrOwogCQkJZ290byBvdXQ7CkBAIC0xNDE1LDggKzEzNzQsOCBAQAogCQkJaWYgKHJldCA8IDApCiAJCQkJZ290byBlcnJfb3V0X2N1cnJfbm9kZTsKIAkJCXNpYiA9IChzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqKWJoLT5iX2RhdGE7Ci0JCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBzaWIpID4KLQkJCSAgICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9taW4oYnRyZWUsIHNpYikpIHsKKwkJCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oc2liKSA+CisJCQkgICAgbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWluKHNpYiwgYnRyZWUpKSB7CiAJCQkJcGF0aFtsZXZlbF0uYnBfc2liX2JoID0gYmg7CiAJCQkJcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9ib3Jyb3dfbGVmdDsKIAkJCQlzdGF0cy0+YnNfbmJsb2NrcysrOwpAQCAtMTQyOCw3ICsxMzg3LDcgQEAKIAkJCQkvKiBjb250aW51ZTsgKi8KIAkJCX0KIAkJfSBlbHNlIGlmIChwaW5kZXggPAotCQkJICAgbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBwYXJlbnQpIC0gMSkgeworCQkJICAgbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHBhcmVudCkgLSAxKSB7CiAJCQkvKiByaWdodCBzaWJsaW5nICovCiAJCQlzaWJwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIHBhcmVudCwKIAkJCQkJCQkgIHBpbmRleCArIDEpOwpAQCAtMTQzNiw4ICsxMzk1LDggQEAKIAkJCWlmIChyZXQgPCAwKQogCQkJCWdvdG8gZXJyX291dF9jdXJyX25vZGU7CiAJCQlzaWIgPSAoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKiliaC0+Yl9kYXRhOwotCQkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgc2liKSA+Ci0JCQkgICAgbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWluKGJ0cmVlLCBzaWIpKSB7CisJCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHNpYikgPgorCQkJICAgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21pbihzaWIsIGJ0cmVlKSkgewogCQkJCXBhdGhbbGV2ZWxdLmJwX3NpYl9iaCA9IGJoOwogCQkJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfYm9ycm93X3JpZ2h0OwogCQkJCXN0YXRzLT5ic19uYmxvY2tzKys7CkBAIC0xNDUyLDcgKzE0MTEsNyBAQAogCQkJLyogbm8gc2libGluZ3MgKi8KIAkJCS8qIHRoZSBvbmx5IGNoaWxkIG9mIHRoZSByb290IG5vZGUgKi8KIAkJCVdBUk5fT04obGV2ZWwgIT0gbmlsZnNfYnRyZWVfaGVpZ2h0KGJ0cmVlKSAtIDIpOwotCQkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSkgLSAxIDw9CisJCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpIC0gMSA8PQogCQkJICAgIE5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCkgewogCQkJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfc2hyaW5rOwogCQkJCXN0YXRzLT5ic19uYmxvY2tzICs9IDI7CkBAIC0xNDcxLDcgKzE0MzAsNyBAQAogCQluaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIG5vZGUsIHBhdGhbbGV2ZWxdLmJwX2luZGV4KTsKIAogCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9lbmRfcHRyKCZidHJlZS0+YnRfYm1hcCwKLQkJCQkJICZwYXRoW2xldmVsXS5icF9vbGRyZXEpOworCQkJCQkgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfb3V0X2NoaWxkX25vZGU7CiAKQEAgLTE0ODYsMTIgKzE0NDUsMTIgQEAKIAogCS8qIGVycm9yICovCiAgZXJyX291dF9jdXJyX25vZGU6Ci0JbmlsZnNfYm1hcF9hYm9ydF9lbmRfcHRyKCZidHJlZS0+YnRfYm1hcCwgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSk7CisJbmlsZnNfYm1hcF9hYm9ydF9lbmRfcHRyKCZidHJlZS0+YnRfYm1hcCwgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKICBlcnJfb3V0X2NoaWxkX25vZGU6CiAJZm9yIChsZXZlbC0tOyBsZXZlbCA+PSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTjsgbGV2ZWwtLSkgewogCQlicmVsc2UocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKIAkJbmlsZnNfYm1hcF9hYm9ydF9lbmRfcHRyKCZidHJlZS0+YnRfYm1hcCwKLQkJCQkJICZwYXRoW2xldmVsXS5icF9vbGRyZXEpOworCQkJCQkgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKIAl9CiAJKmxldmVscCA9IGxldmVsOwogCXN0YXRzLT5ic19uYmxvY2tzID0gMDsKQEAgLTE1MDAsMTMgKzE0NTksMTMgQEAKIAogc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfY29tbWl0X2RlbGV0ZShzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAogCQkJCSAgICAgIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAotCQkJCSAgICAgIGludCBtYXhsZXZlbCkKKwkJCQkgICAgICBpbnQgbWF4bGV2ZWwsIHN0cnVjdCBpbm9kZSAqZGF0KQogewogCWludCBsZXZlbDsKIAogCWZvciAobGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTjsgbGV2ZWwgPD0gbWF4bGV2ZWw7IGxldmVsKyspIHsKIAkJbmlsZnNfYm1hcF9jb21taXRfZW5kX3B0cigmYnRyZWUtPmJ0X2JtYXAsCi0JCQkJCSAgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSk7CisJCQkJCSAgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKIAkJcGF0aFtsZXZlbF0uYnBfb3AoYnRyZWUsIHBhdGgsIGxldmVsLCBOVUxMLCBOVUxMKTsKIAl9CiAKQEAgLTE1MjAsMjcgKzE0NzksMzIgQEAKIAlzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlOwogCXN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoOwogCXN0cnVjdCBuaWxmc19ibWFwX3N0YXRzIHN0YXRzOworCXN0cnVjdCBpbm9kZSAqZGF0OwogCWludCBsZXZlbCwgcmV0OwogCiAJYnRyZWUgPSAoc3RydWN0IG5pbGZzX2J0cmVlICopYm1hcDsKLQlwYXRoID0gbmlsZnNfYnRyZWVfYWxsb2NfcGF0aChidHJlZSk7CisJcGF0aCA9IG5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoKTsKIAlpZiAocGF0aCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQluaWxmc19idHJlZV9pbml0X3BhdGgoYnRyZWUsIHBhdGgpOworCW5pbGZzX2J0cmVlX2luaXRfcGF0aChwYXRoKTsKIAlyZXQgPSBuaWxmc19idHJlZV9kb19sb29rdXAoYnRyZWUsIHBhdGgsIGtleSwgTlVMTCwKIAkJCQkgICAgTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU4pOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAotCXJldCA9IG5pbGZzX2J0cmVlX3ByZXBhcmVfZGVsZXRlKGJ0cmVlLCBwYXRoLCAmbGV2ZWwsICZzdGF0cyk7CisKKwlkYXQgPSBOSUxGU19CTUFQX1VTRV9WQk4oJmJ0cmVlLT5idF9ibWFwKSA/CisJCW5pbGZzX2JtYXBfZ2V0X2RhdCgmYnRyZWUtPmJ0X2JtYXApIDogTlVMTDsKKworCXJldCA9IG5pbGZzX2J0cmVlX3ByZXBhcmVfZGVsZXRlKGJ0cmVlLCBwYXRoLCAmbGV2ZWwsICZzdGF0cywgZGF0KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7Ci0JbmlsZnNfYnRyZWVfY29tbWl0X2RlbGV0ZShidHJlZSwgcGF0aCwgbGV2ZWwpOworCW5pbGZzX2J0cmVlX2NvbW1pdF9kZWxldGUoYnRyZWUsIHBhdGgsIGxldmVsLCBkYXQpOwogCW5pbGZzX2JtYXBfc3ViX2Jsb2NrcyhibWFwLCBzdGF0cy5ic19uYmxvY2tzKTsKIAogb3V0OgotCW5pbGZzX2J0cmVlX2NsZWFyX3BhdGgoYnRyZWUsIHBhdGgpOwotCW5pbGZzX2J0cmVlX2ZyZWVfcGF0aChidHJlZSwgcGF0aCk7CisJbmlsZnNfYnRyZWVfcmVsZWFzZV9wYXRoKHBhdGgpOworCW5pbGZzX2J0cmVlX2ZyZWVfcGF0aChwYXRoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNTUxLDE1ICsxNTE1LDE1IEBACiAJaW50IHJldDsKIAogCWJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7Ci0JcGF0aCA9IG5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoYnRyZWUpOworCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKCk7CiAJaWYgKHBhdGggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbmlsZnNfYnRyZWVfaW5pdF9wYXRoKGJ0cmVlLCBwYXRoKTsKKwluaWxmc19idHJlZV9pbml0X3BhdGgocGF0aCk7CiAKIAlyZXQgPSBuaWxmc19idHJlZV9kb19sb29rdXBfbGFzdChidHJlZSwgcGF0aCwga2V5cCwgTlVMTCk7CiAKLQluaWxmc19idHJlZV9jbGVhcl9wYXRoKGJ0cmVlLCBwYXRoKTsKLQluaWxmc19idHJlZV9mcmVlX3BhdGgoYnRyZWUsIHBhdGgpOworCW5pbGZzX2J0cmVlX3JlbGVhc2VfcGF0aChwYXRoKTsKKwluaWxmc19idHJlZV9mcmVlX3BhdGgocGF0aCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTU4MSw3ICsxNTQ1LDcgQEAKIAkJbm9kZSA9IHJvb3Q7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCByb290KTsKKwkJbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHJvb3QpOwogCQlpZiAobmNoaWxkcmVuID4gMSkKIAkJCXJldHVybiAwOwogCQlwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIHJvb3QsIG5jaGlsZHJlbiAtIDEpOwpAQCAtMTU5NCwxMCArMTU1OCwxMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpOwotCW1heGtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgbm9kZSwgbmNoaWxkcmVuIC0gMSk7CisJbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpOworCW1heGtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCBuY2hpbGRyZW4gLSAxKTsKIAluZXh0bWF4a2V5ID0gKG5jaGlsZHJlbiA+IDEpID8KLQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCBub2RlLCBuY2hpbGRyZW4gLSAyKSA6IDA7CisJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCBuY2hpbGRyZW4gLSAyKSA6IDA7CiAJaWYgKGJoICE9IE5VTEwpCiAJCWJyZWxzZShiaCk7CiAKQEAgLTE2MjMsNyArMTU4Nyw3IEBACiAJCW5vZGUgPSByb290OwogCQlicmVhazsKIAljYXNlIDM6Ci0JCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgcm9vdCk7CisJCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihyb290KTsKIAkJV0FSTl9PTihuY2hpbGRyZW4gPiAxKTsKIAkJcHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCByb290LCBuY2hpbGRyZW4gLSAxKTsKIAkJcmV0ID0gbmlsZnNfYnRyZWVfZ2V0X2Jsb2NrKGJ0cmVlLCBwdHIsICZiaCk7CkBAIC0xNjM2LDExICsxNjAwLDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSk7CisJbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpOwogCWlmIChuY2hpbGRyZW4gPCBuaXRlbXMpCiAJCW5pdGVtcyA9IG5jaGlsZHJlbjsKLQlka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMoYnRyZWUsIG5vZGUpOwotCWRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhidHJlZSwgbm9kZSk7CisJZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKG5vZGUpOworCWRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhub2RlLCBidHJlZSk7CiAJZm9yIChpID0gMDsgaSA8IG5pdGVtczsgaSsrKSB7CiAJCWtleXNbaV0gPSBuaWxmc19ibWFwX2RrZXlfdG9fa2V5KGRrZXlzW2ldKTsKIAkJcHRyc1tpXSA9IG5pbGZzX2JtYXBfZHB0cl90b19wdHIoZHB0cnNbaV0pOwpAQCAtMTY2MCwxOCArMTYyNCwyMCBAQAogCQkJCSAgICAgICBzdHJ1Y3QgbmlsZnNfYm1hcF9zdGF0cyAqc3RhdHMpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlOworCXN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUgPSAoc3RydWN0IG5pbGZzX2J0cmVlICopYm1hcDsKKwlzdHJ1Y3QgaW5vZGUgKmRhdCA9IE5VTEw7CiAJaW50IHJldDsKIAotCWJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7CiAJc3RhdHMtPmJzX25ibG9ja3MgPSAwOwogCiAJLyogZm9yIGRhdGEgKi8KIAkvKiBjYW5ub3QgZmluZCBuZWFyIHB0ciAqLwotCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oYm1hcCkpCisJaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSkgewogCQlkcmVxLT5icHJfcHRyID0gbmlsZnNfYnRyZWVfZmluZF90YXJnZXRfdihidHJlZSwgTlVMTCwga2V5KTsKKwkJZGF0ID0gbmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApOworCX0KIAotCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoYm1hcCwgZHJlcSk7CisJcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2FsbG9jX3B0cihibWFwLCBkcmVxLCBkYXQpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNjc5LDcgKzE2NDUsNyBAQAogCXN0YXRzLT5ic19uYmxvY2tzKys7CiAJaWYgKG5yZXEgIT0gTlVMTCkgewogCQlucmVxLT5icHJfcHRyID0gZHJlcS0+YnByX3B0ciArIDE7Ci0JCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoYm1hcCwgbnJlcSk7CisJCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoYm1hcCwgbnJlcSwgZGF0KTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycl9vdXRfZHJlcTsKIApAQCAtMTY5Niw5ICsxNjYyLDkgQEAKIAogCS8qIGVycm9yICovCiAgZXJyX291dF9ucmVxOgotCW5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfcHRyKGJtYXAsIG5yZXEpOworCW5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfcHRyKGJtYXAsIG5yZXEsIGRhdCk7CiAgZXJyX291dF9kcmVxOgotCW5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfcHRyKGJtYXAsIGRyZXEpOworCW5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfcHRyKGJtYXAsIGRyZXEsIGRhdCk7CiAJc3RhdHMtPmJzX25ibG9ja3MgPSAwOwogCXJldHVybiByZXQ7CiAKQEAgLTE3MTMsOCArMTY3OSw5IEBACiAJCQkJICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpucmVxLAogCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0Jc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZTsKKwlzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGU7CisJc3RydWN0IGlub2RlICpkYXQ7CiAJX191NjQgdG1wcHRyOwogCiAJLyogZnJlZSByZXNvdXJjZXMgKi8KQEAgLTE3MjUsMTEgKzE2OTIsMTEgQEAKIAlzZXRfYnVmZmVyX25pbGZzX3ZvbGF0aWxlKChzdHJ1Y3QgYnVmZmVyX2hlYWQgKikoKHVuc2lnbmVkIGxvbmcpcHRyKSk7CiAKIAkvKiBjb252ZXJ0IGFuZCBpbnNlcnQgKi8KLQlidHJlZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWUgKilibWFwOworCWRhdCA9IE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSA/IG5pbGZzX2JtYXBfZ2V0X2RhdChibWFwKSA6IE5VTEw7CiAJbmlsZnNfYnRyZWVfaW5pdChibWFwKTsKIAlpZiAobnJlcSAhPSBOVUxMKSB7Ci0JCW5pbGZzX2JtYXBfY29tbWl0X2FsbG9jX3B0cihibWFwLCBkcmVxKTsKLQkJbmlsZnNfYm1hcF9jb21taXRfYWxsb2NfcHRyKGJtYXAsIG5yZXEpOworCQluaWxmc19ibWFwX2NvbW1pdF9hbGxvY19wdHIoYm1hcCwgZHJlcSwgZGF0KTsKKwkJbmlsZnNfYm1hcF9jb21taXRfYWxsb2NfcHRyKGJtYXAsIG5yZXEsIGRhdCk7CiAKIAkJLyogY3JlYXRlIGNoaWxkIG5vZGUgYXQgbGV2ZWwgMSAqLwogCQlsb2NrX2J1ZmZlcihiaCk7CkBAIC0xNzUxLDcgKzE3MTgsNyBAQAogCQluaWxmc19idHJlZV9ub2RlX2luaXQoYnRyZWUsIG5vZGUsIE5JTEZTX0JUUkVFX05PREVfUk9PVCwKIAkJCQkgICAgICAyLCAxLCAma2V5c1swXSwgJnRtcHB0cik7CiAJfSBlbHNlIHsKLQkJbmlsZnNfYm1hcF9jb21taXRfYWxsb2NfcHRyKGJtYXAsIGRyZXEpOworCQluaWxmc19ibWFwX2NvbW1pdF9hbGxvY19wdHIoYm1hcCwgZHJlcSwgZGF0KTsKIAogCQkvKiBjcmVhdGUgcm9vdCBub2RlIGF0IGxldmVsIDEgKi8KIAkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKQEAgLTE4MjIsNyArMTc4OSw3IEBACiAKIHN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfcHJlcGFyZV91cGRhdGVfdihzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAogCQkJCQlzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKLQkJCQkJaW50IGxldmVsKQorCQkJCQlpbnQgbGV2ZWwsIHN0cnVjdCBpbm9kZSAqZGF0KQogewogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpwYXJlbnQ7CiAJaW50IHJldDsKQEAgLTE4MzIsOSArMTc5OSw4IEBACiAJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgcGFyZW50LAogCQkJCQkgcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4KTsKIAlwYXRoW2xldmVsXS5icF9uZXdyZXEuYnByX3B0ciA9IHBhdGhbbGV2ZWxdLmJwX29sZHJlcS5icHJfcHRyICsgMTsKLQlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfdXBkYXRlX3YoJmJ0cmVlLT5idF9ibWFwLAotCQkJCQkgICZwYXRoW2xldmVsXS5icF9vbGRyZXEsCi0JCQkJCSAgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcSk7CisJcmV0ID0gbmlsZnNfZGF0X3ByZXBhcmVfdXBkYXRlKGRhdCwgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcS5icHJfcmVxLAorCQkJCSAgICAgICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxLmJwcl9yZXEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xODQ2LDkgKzE4MTIsOSBAQAogCQkJJk5JTEZTX0JNQVBfSSgmYnRyZWUtPmJ0X2JtYXApLT5pX2J0bm9kZV9jYWNoZSwKIAkJCSZwYXRoW2xldmVsXS5icF9jdHh0KTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCW5pbGZzX2JtYXBfYWJvcnRfdXBkYXRlX3YoJmJ0cmVlLT5idF9ibWFwLAotCQkJCQkJICAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLAotCQkJCQkJICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxKTsKKwkJCW5pbGZzX2RhdF9hYm9ydF91cGRhdGUoZGF0LAorCQkJCQkgICAgICAgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcS5icHJfcmVxLAorCQkJCQkgICAgICAgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcmVxKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CkBAIC0xODU4LDEzICsxODI0LDEzIEBACiAKIHN0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2NvbW1pdF91cGRhdGVfdihzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAogCQkJCQlzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKLQkJCQkJaW50IGxldmVsKQorCQkJCQlpbnQgbGV2ZWwsIHN0cnVjdCBpbm9kZSAqZGF0KQogewogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpwYXJlbnQ7CiAKLQluaWxmc19ibWFwX2NvbW1pdF91cGRhdGVfdigmYnRyZWUtPmJ0X2JtYXAsCi0JCQkJICAgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwKLQkJCQkgICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxKTsKKwluaWxmc19kYXRfY29tbWl0X3VwZGF0ZShkYXQsICZwYXRoW2xldmVsXS5icF9vbGRyZXEuYnByX3JlcSwKKwkJCQkmcGF0aFtsZXZlbF0uYnBfbmV3cmVxLmJwcl9yZXEsCisJCQkJYnRyZWUtPmJ0X2JtYXAuYl9wdHJfdHlwZSA9PSBOSUxGU19CTUFQX1BUUl9WUyk7CiAKIAlpZiAoYnVmZmVyX25pbGZzX25vZGUocGF0aFtsZXZlbF0uYnBfYmgpKSB7CiAJCW5pbGZzX2J0bm9kZV9jb21taXRfY2hhbmdlX2tleSgKQEAgLTE4ODEsMTEgKzE4NDcsMTAgQEAKIAogc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfYWJvcnRfdXBkYXRlX3Yoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKIAkJCQkgICAgICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCi0JCQkJICAgICAgIGludCBsZXZlbCkKKwkJCQkgICAgICAgaW50IGxldmVsLCBzdHJ1Y3QgaW5vZGUgKmRhdCkKIHsKLQluaWxmc19ibWFwX2Fib3J0X3VwZGF0ZV92KCZidHJlZS0+YnRfYm1hcCwKLQkJCQkgICZwYXRoW2xldmVsXS5icF9vbGRyZXEsCi0JCQkJICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxKTsKKwluaWxmc19kYXRfYWJvcnRfdXBkYXRlKGRhdCwgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcS5icHJfcmVxLAorCQkJICAgICAgICZwYXRoW2xldmVsXS5icF9uZXdyZXEuYnByX3JlcSk7CiAJaWYgKGJ1ZmZlcl9uaWxmc19ub2RlKHBhdGhbbGV2ZWxdLmJwX2JoKSkKIAkJbmlsZnNfYnRub2RlX2Fib3J0X2NoYW5nZV9rZXkoCiAJCQkmTklMRlNfQk1BUF9JKCZidHJlZS0+YnRfYm1hcCktPmlfYnRub2RlX2NhY2hlLApAQCAtMTg5NCwxNCArMTg1OSwxNCBAQAogCiBzdGF0aWMgaW50IG5pbGZzX2J0cmVlX3ByZXBhcmVfcHJvcGFnYXRlX3Yoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKIAkJCQkJICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCi0JCQkJCSAgIGludCBtaW5sZXZlbCwKLQkJCQkJICAgaW50ICptYXhsZXZlbHApCisJCQkJCSAgIGludCBtaW5sZXZlbCwgaW50ICptYXhsZXZlbHAsCisJCQkJCSAgIHN0cnVjdCBpbm9kZSAqZGF0KQogewogCWludCBsZXZlbCwgcmV0OwogCiAJbGV2ZWwgPSBtaW5sZXZlbDsKIAlpZiAoIWJ1ZmZlcl9uaWxmc192b2xhdGlsZShwYXRoW2xldmVsXS5icF9iaCkpIHsKLQkJcmV0ID0gbmlsZnNfYnRyZWVfcHJlcGFyZV91cGRhdGVfdihidHJlZSwgcGF0aCwgbGV2ZWwpOworCQlyZXQgPSBuaWxmc19idHJlZV9wcmVwYXJlX3VwZGF0ZV92KGJ0cmVlLCBwYXRoLCBsZXZlbCwgZGF0KTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTE5MDksNyArMTg3NCw3IEBACiAJICAgICAgICFidWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpKSB7CiAKIAkJV0FSTl9PTihidWZmZXJfbmlsZnNfdm9sYXRpbGUocGF0aFtsZXZlbF0uYnBfYmgpKTsKLQkJcmV0ID0gbmlsZnNfYnRyZWVfcHJlcGFyZV91cGRhdGVfdihidHJlZSwgcGF0aCwgbGV2ZWwpOworCQlyZXQgPSBuaWxmc19idHJlZV9wcmVwYXJlX3VwZGF0ZV92KGJ0cmVlLCBwYXRoLCBsZXZlbCwgZGF0KTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKIAl9CkBAIC0xOTIxLDM5ICsxODg2LDQwIEBACiAJLyogZXJyb3IgKi8KICBvdXQ6CiAJd2hpbGUgKC0tbGV2ZWwgPiBtaW5sZXZlbCkKLQkJbmlsZnNfYnRyZWVfYWJvcnRfdXBkYXRlX3YoYnRyZWUsIHBhdGgsIGxldmVsKTsKKwkJbmlsZnNfYnRyZWVfYWJvcnRfdXBkYXRlX3YoYnRyZWUsIHBhdGgsIGxldmVsLCBkYXQpOwogCWlmICghYnVmZmVyX25pbGZzX3ZvbGF0aWxlKHBhdGhbbGV2ZWxdLmJwX2JoKSkKLQkJbmlsZnNfYnRyZWVfYWJvcnRfdXBkYXRlX3YoYnRyZWUsIHBhdGgsIGxldmVsKTsKKwkJbmlsZnNfYnRyZWVfYWJvcnRfdXBkYXRlX3YoYnRyZWUsIHBhdGgsIGxldmVsLCBkYXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2NvbW1pdF9wcm9wYWdhdGVfdihzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAogCQkJCQkgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKLQkJCQkJICAgaW50IG1pbmxldmVsLAotCQkJCQkgICBpbnQgbWF4bGV2ZWwsCi0JCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCisJCQkJCSAgIGludCBtaW5sZXZlbCwgaW50IG1heGxldmVsLAorCQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJCQkgICBzdHJ1Y3QgaW5vZGUgKmRhdCkKIHsKIAlpbnQgbGV2ZWw7CiAKIAlpZiAoIWJ1ZmZlcl9uaWxmc192b2xhdGlsZShwYXRoW21pbmxldmVsXS5icF9iaCkpCi0JCW5pbGZzX2J0cmVlX2NvbW1pdF91cGRhdGVfdihidHJlZSwgcGF0aCwgbWlubGV2ZWwpOworCQluaWxmc19idHJlZV9jb21taXRfdXBkYXRlX3YoYnRyZWUsIHBhdGgsIG1pbmxldmVsLCBkYXQpOwogCiAJZm9yIChsZXZlbCA9IG1pbmxldmVsICsgMTsgbGV2ZWwgPD0gbWF4bGV2ZWw7IGxldmVsKyspCi0JCW5pbGZzX2J0cmVlX2NvbW1pdF91cGRhdGVfdihidHJlZSwgcGF0aCwgbGV2ZWwpOworCQluaWxmc19idHJlZV9jb21taXRfdXBkYXRlX3YoYnRyZWUsIHBhdGgsIGxldmVsLCBkYXQpOwogfQogCiBzdGF0aWMgaW50IG5pbGZzX2J0cmVlX3Byb3BhZ2F0ZV92KHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCiAJCQkJICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCi0JCQkJICAgaW50IGxldmVsLAotCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCisJCQkJICAgaW50IGxldmVsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewogCWludCBtYXhsZXZlbCwgcmV0OwogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpwYXJlbnQ7CisJc3RydWN0IGlub2RlICpkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoJmJ0cmVlLT5idF9ibWFwKTsKIAlfX3U2NCBwdHI7CiAKIAlnZXRfYmgoYmgpOwogCXBhdGhbbGV2ZWxdLmJwX2JoID0gYmg7Ci0JcmV0ID0gbmlsZnNfYnRyZWVfcHJlcGFyZV9wcm9wYWdhdGVfdihidHJlZSwgcGF0aCwgbGV2ZWwsICZtYXhsZXZlbCk7CisJcmV0ID0gbmlsZnNfYnRyZWVfcHJlcGFyZV9wcm9wYWdhdGVfdihidHJlZSwgcGF0aCwgbGV2ZWwsICZtYXhsZXZlbCwKKwkJCQkJICAgICAgZGF0KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKQEAgLTE5NjEsMTIgKzE5MjcsMTIgQEAKIAkJcGFyZW50ID0gbmlsZnNfYnRyZWVfZ2V0X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsICsgMSk7CiAJCXB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgcGFyZW50LAogCQkJCQkgICAgICAgcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4KTsKLQkJcmV0ID0gbmlsZnNfYm1hcF9tYXJrX2RpcnR5KCZidHJlZS0+YnRfYm1hcCwgcHRyKTsKKwkJcmV0ID0gbmlsZnNfZGF0X21hcmtfZGlydHkoZGF0LCBwdHIpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwogCX0KIAotCW5pbGZzX2J0cmVlX2NvbW1pdF9wcm9wYWdhdGVfdihidHJlZSwgcGF0aCwgbGV2ZWwsIG1heGxldmVsLCBiaCk7CisJbmlsZnNfYnRyZWVfY29tbWl0X3Byb3BhZ2F0ZV92KGJ0cmVlLCBwYXRoLCBsZXZlbCwgbWF4bGV2ZWwsIGJoLCBkYXQpOwogCiAgb3V0OgogCWJyZWxzZShwYXRoW2xldmVsXS5icF9iaCk7CkBAIC0xOTg2LDE1ICsxOTUyLDE1IEBACiAJV0FSTl9PTighYnVmZmVyX2RpcnR5KGJoKSk7CiAKIAlidHJlZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWUgKilibWFwOwotCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKGJ0cmVlKTsKKwlwYXRoID0gbmlsZnNfYnRyZWVfYWxsb2NfcGF0aCgpOwogCWlmIChwYXRoID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCW5pbGZzX2J0cmVlX2luaXRfcGF0aChidHJlZSwgcGF0aCk7CisJbmlsZnNfYnRyZWVfaW5pdF9wYXRoKHBhdGgpOwogCiAJaWYgKGJ1ZmZlcl9uaWxmc19ub2RlKGJoKSkgewogCQlub2RlID0gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopYmgtPmJfZGF0YTsKLQkJa2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCBub2RlLCAwKTsKLQkJbGV2ZWwgPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChidHJlZSwgbm9kZSk7CisJCWtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCAwKTsKKwkJbGV2ZWwgPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChub2RlKTsKIAl9IGVsc2UgewogCQlrZXkgPSBuaWxmc19ibWFwX2RhdGFfZ2V0X2tleShibWFwLCBiaCk7CiAJCWxldmVsID0gTklMRlNfQlRSRUVfTEVWRUxfREFUQTsKQEAgLTIwMTMsOCArMTk3OSw4IEBACiAJCW5pbGZzX2J0cmVlX3Byb3BhZ2F0ZV9wKGJ0cmVlLCBwYXRoLCBsZXZlbCwgYmgpOwogCiAgb3V0OgotCW5pbGZzX2J0cmVlX2NsZWFyX3BhdGgoYnRyZWUsIHBhdGgpOwotCW5pbGZzX2J0cmVlX2ZyZWVfcGF0aChidHJlZSwgcGF0aCk7CisJbmlsZnNfYnRyZWVfcmVsZWFzZV9wYXRoKHBhdGgpOworCW5pbGZzX2J0cmVlX2ZyZWVfcGF0aChwYXRoKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMDIyLDcgKzE5ODgsNyBAQAogc3RhdGljIGludCBuaWxmc19idHJlZV9wcm9wYWdhdGVfZ2MoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCiAJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0JcmV0dXJuIG5pbGZzX2JtYXBfbWFya19kaXJ0eShibWFwLCBiaC0+Yl9ibG9ja25yKTsKKwlyZXR1cm4gbmlsZnNfZGF0X21hcmtfZGlydHkobmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApLCBiaC0+Yl9ibG9ja25yKTsKIH0KIAogc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfYWRkX2RpcnR5X2J1ZmZlcihzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLApAQCAtMjAzNywxMiArMjAwMywxMiBAQAogCiAJZ2V0X2JoKGJoKTsKIAlub2RlID0gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopYmgtPmJfZGF0YTsKLQlrZXkgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkoYnRyZWUsIG5vZGUsIDApOwotCWxldmVsID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwoYnRyZWUsIG5vZGUpOworCWtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCAwKTsKKwlsZXZlbCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2xldmVsKG5vZGUpOwogCWxpc3RfZm9yX2VhY2goaGVhZCwgJmxpc3RzW2xldmVsXSkgewogCQljYmggPSBsaXN0X2VudHJ5KGhlYWQsIHN0cnVjdCBidWZmZXJfaGVhZCwgYl9hc3NvY19idWZmZXJzKTsKIAkJY25vZGUgPSAoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKiljYmgtPmJfZGF0YTsKLQkJY2tleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgY25vZGUsIDApOworCQlja2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGNub2RlLCAwKTsKIAkJaWYgKGtleSA8IGNrZXkpCiAJCQlicmVhazsKIAl9CkBAIC0yMTIwLDggKzIwODYsNyBAQAogCW5pbGZzX2J0cmVlX25vZGVfc2V0X3B0cihidHJlZSwgcGFyZW50LAogCQkJCSBwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgsIGJsb2NrbnIpOwogCi0Ja2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCBwYXJlbnQsCi0JCQkJICAgICAgIHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCk7CisJa2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KHBhcmVudCwgcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4KTsKIAkvKiBvbi1kaXNrIGZvcm1hdCAqLwogCWJpbmZvLT5iaV9kYXQuYmlfYmxrb2ZmID0gbmlsZnNfYm1hcF9rZXlfdG9fZGtleShrZXkpOwogCWJpbmZvLT5iaV9kYXQuYmlfbGV2ZWwgPSBsZXZlbDsKQEAgLTIxMzcsNiArMjEwMiw3IEBACiAJCQkJdW5pb24gbmlsZnNfYmluZm8gKmJpbmZvKQogewogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpwYXJlbnQ7CisJc3RydWN0IGlub2RlICpkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoJmJ0cmVlLT5idF9ibWFwKTsKIAlfX3U2NCBrZXk7CiAJX191NjQgcHRyOwogCXVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSByZXE7CkBAIC0yMTQ2LDEyICsyMTEyLDEyIEBACiAJcHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBwYXJlbnQsCiAJCQkJICAgICAgIHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCk7CiAJcmVxLmJwcl9wdHIgPSBwdHI7Ci0JcmV0ID0gbmlsZnNfYm1hcF9zdGFydF92KCZidHJlZS0+YnRfYm1hcCwgJnJlcSwgYmxvY2tucik7Ci0JaWYgKHVubGlrZWx5KHJldCA8IDApKQorCXJldCA9IG5pbGZzX2RhdF9wcmVwYXJlX3N0YXJ0KGRhdCwgJnJlcS5icHJfcmVxKTsKKwlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKKwluaWxmc19kYXRfY29tbWl0X3N0YXJ0KGRhdCwgJnJlcS5icHJfcmVxLCBibG9ja25yKTsKIAotCWtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgcGFyZW50LAotCQkJCSAgICAgICBwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgpOworCWtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShwYXJlbnQsIHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCk7CiAJLyogb24tZGlzayBmb3JtYXQgKi8KIAliaW5mby0+Ymlfdi5iaV92YmxvY2tuciA9IG5pbGZzX2JtYXBfcHRyX3RvX2RwdHIocHRyKTsKIAliaW5mby0+Ymlfdi5iaV9ibGtvZmYgPSBuaWxmc19ibWFwX2tleV90b19ka2V5KGtleSk7CkBAIC0yMTcxLDE1ICsyMTM3LDE1IEBACiAJaW50IGxldmVsLCByZXQ7CiAKIAlidHJlZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWUgKilibWFwOwotCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKGJ0cmVlKTsKKwlwYXRoID0gbmlsZnNfYnRyZWVfYWxsb2NfcGF0aCgpOwogCWlmIChwYXRoID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCW5pbGZzX2J0cmVlX2luaXRfcGF0aChidHJlZSwgcGF0aCk7CisJbmlsZnNfYnRyZWVfaW5pdF9wYXRoKHBhdGgpOwogCiAJaWYgKGJ1ZmZlcl9uaWxmc19ub2RlKCpiaCkpIHsKIAkJbm9kZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqKSgqYmgpLT5iX2RhdGE7Ci0JCWtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgbm9kZSwgMCk7Ci0JCWxldmVsID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwoYnRyZWUsIG5vZGUpOworCQlrZXkgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkobm9kZSwgMCk7CisJCWxldmVsID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwobm9kZSk7CiAJfSBlbHNlIHsKIAkJa2V5ID0gbmlsZnNfYm1hcF9kYXRhX2dldF9rZXkoYm1hcCwgKmJoKTsKIAkJbGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9EQVRBOwpAQCAtMjE5Niw4ICsyMTYyLDggQEAKIAkJbmlsZnNfYnRyZWVfYXNzaWduX3AoYnRyZWUsIHBhdGgsIGxldmVsLCBiaCwgYmxvY2tuciwgYmluZm8pOwogCiAgb3V0OgotCW5pbGZzX2J0cmVlX2NsZWFyX3BhdGgoYnRyZWUsIHBhdGgpOwotCW5pbGZzX2J0cmVlX2ZyZWVfcGF0aChidHJlZSwgcGF0aCk7CisJbmlsZnNfYnRyZWVfcmVsZWFzZV9wYXRoKHBhdGgpOworCW5pbGZzX2J0cmVlX2ZyZWVfcGF0aChwYXRoKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMjA3LDE5ICsyMTczLDE4IEBACiAJCQkJIHNlY3Rvcl90IGJsb2NrbnIsCiAJCQkJIHVuaW9uIG5pbGZzX2JpbmZvICpiaW5mbykKIHsKLQlzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlOwogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlOwogCV9fdTY0IGtleTsKIAlpbnQgcmV0OwogCi0JYnRyZWUgPSAoc3RydWN0IG5pbGZzX2J0cmVlICopYm1hcDsKLQlyZXQgPSBuaWxmc19ibWFwX21vdmVfdihibWFwLCAoKmJoKS0+Yl9ibG9ja25yLCBibG9ja25yKTsKKwlyZXQgPSBuaWxmc19kYXRfbW92ZShuaWxmc19ibWFwX2dldF9kYXQoYm1hcCksICgqYmgpLT5iX2Jsb2NrbnIsCisJCQkgICAgIGJsb2NrbnIpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJaWYgKGJ1ZmZlcl9uaWxmc19ub2RlKCpiaCkpIHsKIAkJbm9kZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqKSgqYmgpLT5iX2RhdGE7Ci0JCWtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgbm9kZSwgMCk7CisJCWtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCAwKTsKIAl9IGVsc2UKIAkJa2V5ID0gbmlsZnNfYm1hcF9kYXRhX2dldF9rZXkoYm1hcCwgKmJoKTsKIApAQCAtMjIzOSwxMCArMjIwNCwxMCBAQAogCWludCByZXQ7CiAKIAlidHJlZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWUgKilibWFwOwotCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKGJ0cmVlKTsKKwlwYXRoID0gbmlsZnNfYnRyZWVfYWxsb2NfcGF0aCgpOwogCWlmIChwYXRoID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCW5pbGZzX2J0cmVlX2luaXRfcGF0aChidHJlZSwgcGF0aCk7CisJbmlsZnNfYnRyZWVfaW5pdF9wYXRoKHBhdGgpOwogCiAJcmV0ID0gbmlsZnNfYnRyZWVfZG9fbG9va3VwKGJ0cmVlLCBwYXRoLCBrZXksICZwdHIsIGxldmVsICsgMSk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTIyNjIsOCArMjIyNyw4IEBACiAJCW5pbGZzX2JtYXBfc2V0X2RpcnR5KCZidHJlZS0+YnRfYm1hcCk7CiAKICBvdXQ6Ci0JbmlsZnNfYnRyZWVfY2xlYXJfcGF0aChidHJlZSwgcGF0aCk7Ci0JbmlsZnNfYnRyZWVfZnJlZV9wYXRoKGJ0cmVlLCBwYXRoKTsKKwluaWxmc19idHJlZV9yZWxlYXNlX3BhdGgocGF0aCk7CisJbmlsZnNfYnRyZWVfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9jcGZpbGUuYyBiL2ZzL25pbGZzMi9jcGZpbGUuYwppbmRleCBhZWM5NDJjLi4xYzZjZmI1IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvY3BmaWxlLmMKKysrIGIvZnMvbmlsZnMyL2NwZmlsZS5jCkBAIC04MTUsOCArODE1LDEwIEBACiAJdm9pZCAqa2FkZHI7CiAJaW50IHJldDsKIAotCWlmIChjbm8gPT0gMCkKLQkJcmV0dXJuIC1FTk9FTlQ7IC8qIGNoZWNrcG9pbnQgbnVtYmVyIDAgaXMgaW52YWxpZCAqLworCS8qIENQIG51bWJlciBpcyBpbnZhbGlkIGlmIGl0J3MgemVybyBvciBsYXJnZXIgdGhhbiB0aGUKKwlsYXJnZXN0CWV4aXN0IG9uZS4qLworCWlmIChjbm8gPT0gMCB8fCBjbm8gPj0gbmlsZnNfbWR0X2NubyhjcGZpbGUpKQorCQlyZXR1cm4gLUVOT0VOVDsKIAlkb3duX3JlYWQoJk5JTEZTX01EVChjcGZpbGUpLT5taV9zZW0pOwogCiAJcmV0ID0gbmlsZnNfY3BmaWxlX2dldF9jaGVja3BvaW50X2Jsb2NrKGNwZmlsZSwgY25vLCAwLCAmYmgpOwpAQCAtODI0LDcgKzgyNiwxMCBAQAogCQlnb3RvIG91dDsKIAlrYWRkciA9IGttYXBfYXRvbWljKGJoLT5iX3BhZ2UsIEtNX1VTRVIwKTsKIAljcCA9IG5pbGZzX2NwZmlsZV9ibG9ja19nZXRfY2hlY2twb2ludChjcGZpbGUsIGNubywgYmgsIGthZGRyKTsKLQlyZXQgPSBuaWxmc19jaGVja3BvaW50X3NuYXBzaG90KGNwKTsKKwlpZiAobmlsZnNfY2hlY2twb2ludF9pbnZhbGlkKGNwKSkKKwkJcmV0ID0gLUVOT0VOVDsKKwllbHNlCisJCXJldCA9IG5pbGZzX2NoZWNrcG9pbnRfc25hcHNob3QoY3ApOwogCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKIAlicmVsc2UoYmgpOwogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvY3BmaWxlLmggYi9mcy9uaWxmczIvY3BmaWxlLmgKaW5kZXggNzg4YTQ1OS4uZGViZWE4OSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2NwZmlsZS5oCisrKyBiL2ZzL25pbGZzMi9jcGZpbGUuaApAQCAtMjcsOCArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbmlsZnMyX2ZzLmg+CiAKLSNkZWZpbmUgTklMRlNfQ1BGSUxFX0dGUAlOSUxGU19NRFRfR0ZQCi0KIAogaW50IG5pbGZzX2NwZmlsZV9nZXRfY2hlY2twb2ludChzdHJ1Y3QgaW5vZGUgKiwgX191NjQsIGludCwKIAkJCQlzdHJ1Y3QgbmlsZnNfY2hlY2twb2ludCAqKiwKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9kYXQuYyBiL2ZzL25pbGZzMi9kYXQuYwppbmRleCA4OTI3Y2EyLi4xZmY4ZTE1IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZGF0LmMKKysrIGIvZnMvbmlsZnMyL2RhdC5jCkBAIC0xMDksMTIgKzEwOSw2IEBACiAJbmlsZnNfcGFsbG9jX2NvbW1pdF9mcmVlX2VudHJ5KGRhdCwgcmVxKTsKIH0KIAotdm9pZCBuaWxmc19kYXRfYWJvcnRfZnJlZShzdHJ1Y3QgaW5vZGUgKmRhdCwgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKnJlcSkKLXsKLQluaWxmc19kYXRfYWJvcnRfZW50cnkoZGF0LCByZXEpOwotCW5pbGZzX3BhbGxvY19hYm9ydF9mcmVlX2VudHJ5KGRhdCwgcmVxKTsKLX0KLQogaW50IG5pbGZzX2RhdF9wcmVwYXJlX3N0YXJ0KHN0cnVjdCBpbm9kZSAqZGF0LCBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqcmVxKQogewogCWludCByZXQ7CkBAIC0xNDAsMTEgKzEzNCw2IEBACiAJbmlsZnNfZGF0X2NvbW1pdF9lbnRyeShkYXQsIHJlcSk7CiB9CiAKLXZvaWQgbmlsZnNfZGF0X2Fib3J0X3N0YXJ0KHN0cnVjdCBpbm9kZSAqZGF0LCBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqcmVxKQotewotCW5pbGZzX2RhdF9hYm9ydF9lbnRyeShkYXQsIHJlcSk7Ci19Ci0KIGludCBuaWxmc19kYXRfcHJlcGFyZV9lbmQoc3RydWN0IGlub2RlICpkYXQsIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICpyZXEpCiB7CiAJc3RydWN0IG5pbGZzX2RhdF9lbnRyeSAqZW50cnk7CkBAIC0yMjIsNiArMjExLDM3IEBACiAJbmlsZnNfZGF0X2Fib3J0X2VudHJ5KGRhdCwgcmVxKTsKIH0KIAoraW50IG5pbGZzX2RhdF9wcmVwYXJlX3VwZGF0ZShzdHJ1Y3QgaW5vZGUgKmRhdCwKKwkJCSAgICAgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKm9sZHJlcSwKKwkJCSAgICAgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKm5ld3JlcSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbmlsZnNfZGF0X3ByZXBhcmVfZW5kKGRhdCwgb2xkcmVxKTsKKwlpZiAoIXJldCkgeworCQlyZXQgPSBuaWxmc19kYXRfcHJlcGFyZV9hbGxvYyhkYXQsIG5ld3JlcSk7CisJCWlmIChyZXQgPCAwKQorCQkJbmlsZnNfZGF0X2Fib3J0X2VuZChkYXQsIG9sZHJlcSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbmlsZnNfZGF0X2NvbW1pdF91cGRhdGUoc3RydWN0IGlub2RlICpkYXQsCisJCQkgICAgIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICpvbGRyZXEsCisJCQkgICAgIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICpuZXdyZXEsIGludCBkZWFkKQoreworCW5pbGZzX2RhdF9jb21taXRfZW5kKGRhdCwgb2xkcmVxLCBkZWFkKTsKKwluaWxmc19kYXRfY29tbWl0X2FsbG9jKGRhdCwgbmV3cmVxKTsKK30KKwordm9pZCBuaWxmc19kYXRfYWJvcnRfdXBkYXRlKHN0cnVjdCBpbm9kZSAqZGF0LAorCQkJICAgIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICpvbGRyZXEsCisJCQkgICAgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKm5ld3JlcSkKK3sKKwluaWxmc19kYXRfYWJvcnRfZW5kKGRhdCwgb2xkcmVxKTsKKwluaWxmc19kYXRfYWJvcnRfYWxsb2MoZGF0LCBuZXdyZXEpOworfQorCiAvKioKICAqIG5pbGZzX2RhdF9tYXJrX2RpcnR5IC0KICAqIEBkYXQ6IERBVCBmaWxlIGlub2RlCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZGF0LmggYi9mcy9uaWxmczIvZGF0LmgKaW5kZXggZDMyOGI4MS4uNDA2MDcwZCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2RhdC5oCisrKyBiL2ZzL25pbGZzMi9kYXQuaApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KIAotI2RlZmluZSBOSUxGU19EQVRfR0ZQCU5JTEZTX01EVF9HRlAKIAogc3RydWN0IG5pbGZzX3BhbGxvY19yZXE7CiAKQEAgLTM5LDEwICszOCwxNSBAQAogaW50IG5pbGZzX2RhdF9wcmVwYXJlX3N0YXJ0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqKTsKIHZvaWQgbmlsZnNfZGF0X2NvbW1pdF9zdGFydChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKiwKIAkJCSAgICBzZWN0b3JfdCk7Ci12b2lkIG5pbGZzX2RhdF9hYm9ydF9zdGFydChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKik7CiBpbnQgbmlsZnNfZGF0X3ByZXBhcmVfZW5kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqKTsKIHZvaWQgbmlsZnNfZGF0X2NvbW1pdF9lbmQoc3RydWN0IGlub2RlICosIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICosIGludCk7CiB2b2lkIG5pbGZzX2RhdF9hYm9ydF9lbmQoc3RydWN0IGlub2RlICosIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICopOworaW50IG5pbGZzX2RhdF9wcmVwYXJlX3VwZGF0ZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKiwKKwkJCSAgICAgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKik7Cit2b2lkIG5pbGZzX2RhdF9jb21taXRfdXBkYXRlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqLAorCQkJICAgICBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqLCBpbnQpOwordm9pZCBuaWxmc19kYXRfYWJvcnRfdXBkYXRlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqLAorCQkJICAgIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICopOwogCiBpbnQgbmlsZnNfZGF0X21hcmtfZGlydHkoc3RydWN0IGlub2RlICosIF9fdTY0KTsKIGludCBuaWxmc19kYXRfZnJlZXYoc3RydWN0IGlub2RlICosIF9fdTY0ICosIHNpemVfdCk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZGlyZWN0LmMgYi9mcy9uaWxmczIvZGlyZWN0LmMKaW5kZXggMzQyZDk3Ni4uZDM2OWFjNyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2RpcmVjdC5jCisrKyBiL2ZzL25pbGZzMi9kaXJlY3QuYwpAQCAtMTI1LDEwNiArMTI1LDY0IEBACiAJZGlyZWN0LT5kX2JtYXAuYl9sYXN0X2FsbG9jYXRlZF9wdHIgPSBwdHI7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X3ByZXBhcmVfaW5zZXJ0KHN0cnVjdCBuaWxmc19kaXJlY3QgKmRpcmVjdCwKLQkJCQkgICAgICAgX191NjQga2V5LAotCQkJCSAgICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSwKLQkJCQkgICAgICAgc3RydWN0IG5pbGZzX2JtYXBfc3RhdHMgKnN0YXRzKQotewotCWludCByZXQ7Ci0KLQlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKCZkaXJlY3QtPmRfYm1hcCkpCi0JCXJlcS0+YnByX3B0ciA9IG5pbGZzX2RpcmVjdF9maW5kX3RhcmdldF92KGRpcmVjdCwga2V5KTsKLQlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfYWxsb2NfcHRyKCZkaXJlY3QtPmRfYm1hcCwgcmVxKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXN0YXRzLT5ic19uYmxvY2tzID0gMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbmlsZnNfZGlyZWN0X2NvbW1pdF9pbnNlcnQoc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0LAotCQkJCSAgICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSwKLQkJCQkgICAgICAgX191NjQga2V5LCBfX3U2NCBwdHIpCi17Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQotCS8qIHB0ciBtdXN0IGJlIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBoZWFkLiAqLwotCWJoID0gKHN0cnVjdCBidWZmZXJfaGVhZCAqKSgodW5zaWduZWQgbG9uZylwdHIpOwotCXNldF9idWZmZXJfbmlsZnNfdm9sYXRpbGUoYmgpOwotCi0JbmlsZnNfYm1hcF9jb21taXRfYWxsb2NfcHRyKCZkaXJlY3QtPmRfYm1hcCwgcmVxKTsKLQluaWxmc19kaXJlY3Rfc2V0X3B0cihkaXJlY3QsIGtleSwgcmVxLT5icHJfcHRyKTsKLQotCWlmICghbmlsZnNfYm1hcF9kaXJ0eSgmZGlyZWN0LT5kX2JtYXApKQotCQluaWxmc19ibWFwX3NldF9kaXJ0eSgmZGlyZWN0LT5kX2JtYXApOwotCi0JaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTigmZGlyZWN0LT5kX2JtYXApKQotCQluaWxmc19kaXJlY3Rfc2V0X3RhcmdldF92KGRpcmVjdCwga2V5LCByZXEtPmJwcl9wdHIpOwotfQotCiBzdGF0aWMgaW50IG5pbGZzX2RpcmVjdF9pbnNlcnQoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsIF9fdTY0IGtleSwgX191NjQgcHRyKQogewotCXN0cnVjdCBuaWxmc19kaXJlY3QgKmRpcmVjdDsKKwlzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3QgPSAoc3RydWN0IG5pbGZzX2RpcmVjdCAqKWJtYXA7CiAJdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxIHJlcTsKLQlzdHJ1Y3QgbmlsZnNfYm1hcF9zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgaW5vZGUgKmRhdCA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlpbnQgcmV0OwogCi0JZGlyZWN0ID0gKHN0cnVjdCBuaWxmc19kaXJlY3QgKilibWFwOwogCWlmIChrZXkgPiBOSUxGU19ESVJFQ1RfS0VZX01BWCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJaWYgKG5pbGZzX2RpcmVjdF9nZXRfcHRyKGRpcmVjdCwga2V5KSAhPSBOSUxGU19CTUFQX0lOVkFMSURfUFRSKQogCQlyZXR1cm4gLUVFWElTVDsKIAotCXJldCA9IG5pbGZzX2RpcmVjdF9wcmVwYXJlX2luc2VydChkaXJlY3QsIGtleSwgJnJlcSwgJnN0YXRzKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQluaWxmc19kaXJlY3RfY29tbWl0X2luc2VydChkaXJlY3QsICZyZXEsIGtleSwgcHRyKTsKLQluaWxmc19ibWFwX2FkZF9ibG9ja3MoYm1hcCwgc3RhdHMuYnNfbmJsb2Nrcyk7CisJaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSkgeworCQlyZXEuYnByX3B0ciA9IG5pbGZzX2RpcmVjdF9maW5kX3RhcmdldF92KGRpcmVjdCwga2V5KTsKKwkJZGF0ID0gbmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApOworCX0KKwlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfYWxsb2NfcHRyKGJtYXAsICZyZXEsIGRhdCk7CisJaWYgKCFyZXQpIHsKKwkJLyogcHRyIG11c3QgYmUgYSBwb2ludGVyIHRvIGEgYnVmZmVyIGhlYWQuICovCisJCWJoID0gKHN0cnVjdCBidWZmZXJfaGVhZCAqKSgodW5zaWduZWQgbG9uZylwdHIpOworCQlzZXRfYnVmZmVyX25pbGZzX3ZvbGF0aWxlKGJoKTsKIAotCXJldHVybiAwOwotfQorCQluaWxmc19ibWFwX2NvbW1pdF9hbGxvY19wdHIoYm1hcCwgJnJlcSwgZGF0KTsKKwkJbmlsZnNfZGlyZWN0X3NldF9wdHIoZGlyZWN0LCBrZXksIHJlcS5icHJfcHRyKTsKIAotc3RhdGljIGludCBuaWxmc19kaXJlY3RfcHJlcGFyZV9kZWxldGUoc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0LAotCQkJCSAgICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSwKLQkJCQkgICAgICAgX191NjQga2V5LAotCQkJCSAgICAgICBzdHJ1Y3QgbmlsZnNfYm1hcF9zdGF0cyAqc3RhdHMpCi17Ci0JaW50IHJldDsKKwkJaWYgKCFuaWxmc19ibWFwX2RpcnR5KGJtYXApKQorCQkJbmlsZnNfYm1hcF9zZXRfZGlydHkoYm1hcCk7CiAKLQlyZXEtPmJwcl9wdHIgPSBuaWxmc19kaXJlY3RfZ2V0X3B0cihkaXJlY3QsIGtleSk7Ci0JcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2VuZF9wdHIoJmRpcmVjdC0+ZF9ibWFwLCByZXEpOwotCWlmICghcmV0KQotCQlzdGF0cy0+YnNfbmJsb2NrcyA9IDE7CisJCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oYm1hcCkpCisJCQluaWxmc19kaXJlY3Rfc2V0X3RhcmdldF92KGRpcmVjdCwga2V5LCByZXEuYnByX3B0cik7CisKKwkJbmlsZnNfYm1hcF9hZGRfYmxvY2tzKGJtYXAsIDEpOworCX0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBuaWxmc19kaXJlY3RfY29tbWl0X2RlbGV0ZShzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3QsCi0JCQkJICAgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxLAotCQkJCSAgICAgICBfX3U2NCBrZXkpCi17Ci0JbmlsZnNfYm1hcF9jb21taXRfZW5kX3B0cigmZGlyZWN0LT5kX2JtYXAsIHJlcSk7Ci0JbmlsZnNfZGlyZWN0X3NldF9wdHIoZGlyZWN0LCBrZXksIE5JTEZTX0JNQVBfSU5WQUxJRF9QVFIpOwotfQotCiBzdGF0aWMgaW50IG5pbGZzX2RpcmVjdF9kZWxldGUoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsIF9fdTY0IGtleSkKIHsKLQlzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3Q7CisJc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0ID0gKHN0cnVjdCBuaWxmc19kaXJlY3QgKilibWFwOwogCXVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSByZXE7Ci0Jc3RydWN0IG5pbGZzX2JtYXBfc3RhdHMgc3RhdHM7CisJc3RydWN0IGlub2RlICpkYXQ7CiAJaW50IHJldDsKIAotCWRpcmVjdCA9IChzdHJ1Y3QgbmlsZnNfZGlyZWN0ICopYm1hcDsKLQlpZiAoKGtleSA+IE5JTEZTX0RJUkVDVF9LRVlfTUFYKSB8fAorCWlmIChrZXkgPiBOSUxGU19ESVJFQ1RfS0VZX01BWCB8fAogCSAgICBuaWxmc19kaXJlY3RfZ2V0X3B0cihkaXJlY3QsIGtleSkgPT0gTklMRlNfQk1BUF9JTlZBTElEX1BUUikKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlyZXQgPSBuaWxmc19kaXJlY3RfcHJlcGFyZV9kZWxldGUoZGlyZWN0LCAmcmVxLCBrZXksICZzdGF0cyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JbmlsZnNfZGlyZWN0X2NvbW1pdF9kZWxldGUoZGlyZWN0LCAmcmVxLCBrZXkpOwotCW5pbGZzX2JtYXBfc3ViX2Jsb2NrcyhibWFwLCBzdGF0cy5ic19uYmxvY2tzKTsKKwlkYXQgPSBOSUxGU19CTUFQX1VTRV9WQk4oYm1hcCkgPyBuaWxmc19ibWFwX2dldF9kYXQoYm1hcCkgOiBOVUxMOworCXJlcS5icHJfcHRyID0gbmlsZnNfZGlyZWN0X2dldF9wdHIoZGlyZWN0LCBrZXkpOwogCi0JcmV0dXJuIDA7CisJcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2VuZF9wdHIoYm1hcCwgJnJlcSwgZGF0KTsKKwlpZiAoIXJldCkgeworCQluaWxmc19ibWFwX2NvbW1pdF9lbmRfcHRyKGJtYXAsICZyZXEsIGRhdCk7CisJCW5pbGZzX2RpcmVjdF9zZXRfcHRyKGRpcmVjdCwga2V5LCBOSUxGU19CTUFQX0lOVkFMSURfUFRSKTsKKwkJbmlsZnNfYm1hcF9zdWJfYmxvY2tzKGJtYXAsIDEpOworCX0KKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG5pbGZzX2RpcmVjdF9sYXN0X2tleShjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwgX191NjQgKmtleXApCkBAIC0zMTAsMzkgKzI2OCwzNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2RpcmVjdF9wcm9wYWdhdGVfdihzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3QsCi0JCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCi17Ci0JdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxIG9sZHJlcSwgbmV3cmVxOwotCV9fdTY0IGtleTsKLQlfX3U2NCBwdHI7Ci0JaW50IHJldDsKLQotCWtleSA9IG5pbGZzX2JtYXBfZGF0YV9nZXRfa2V5KCZkaXJlY3QtPmRfYm1hcCwgYmgpOwotCXB0ciA9IG5pbGZzX2RpcmVjdF9nZXRfcHRyKGRpcmVjdCwga2V5KTsKLQlpZiAoIWJ1ZmZlcl9uaWxmc192b2xhdGlsZShiaCkpIHsKLQkJb2xkcmVxLmJwcl9wdHIgPSBwdHI7Ci0JCW5ld3JlcS5icHJfcHRyID0gcHRyOwotCQlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfdXBkYXRlX3YoJmRpcmVjdC0+ZF9ibWFwLCAmb2xkcmVxLAotCQkJCQkJICAmbmV3cmVxKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCQluaWxmc19ibWFwX2NvbW1pdF91cGRhdGVfdigmZGlyZWN0LT5kX2JtYXAsICZvbGRyZXEsICZuZXdyZXEpOwotCQlzZXRfYnVmZmVyX25pbGZzX3ZvbGF0aWxlKGJoKTsKLQkJbmlsZnNfZGlyZWN0X3NldF9wdHIoZGlyZWN0LCBrZXksIG5ld3JlcS5icHJfcHRyKTsKLQl9IGVsc2UKLQkJcmV0ID0gbmlsZnNfYm1hcF9tYXJrX2RpcnR5KCZkaXJlY3QtPmRfYm1hcCwgcHRyKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X3Byb3BhZ2F0ZShjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKIAkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiAJc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0ID0gKHN0cnVjdCBuaWxmc19kaXJlY3QgKilibWFwOworCXN0cnVjdCBuaWxmc19wYWxsb2NfcmVxIG9sZHJlcSwgbmV3cmVxOworCXN0cnVjdCBpbm9kZSAqZGF0OworCV9fdTY0IGtleTsKKwlfX3U2NCBwdHI7CisJaW50IHJldDsKIAotCXJldHVybiBOSUxGU19CTUFQX1VTRV9WQk4oYm1hcCkgPwotCQluaWxmc19kaXJlY3RfcHJvcGFnYXRlX3YoZGlyZWN0LCBiaCkgOiAwOworCWlmICghTklMRlNfQk1BUF9VU0VfVkJOKGJtYXApKQorCQlyZXR1cm4gMDsKKworCWRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdChibWFwKTsKKwlrZXkgPSBuaWxmc19ibWFwX2RhdGFfZ2V0X2tleShibWFwLCBiaCk7CisJcHRyID0gbmlsZnNfZGlyZWN0X2dldF9wdHIoZGlyZWN0LCBrZXkpOworCWlmICghYnVmZmVyX25pbGZzX3ZvbGF0aWxlKGJoKSkgeworCQlvbGRyZXEucHJfZW50cnlfbnIgPSBwdHI7CisJCW5ld3JlcS5wcl9lbnRyeV9uciA9IHB0cjsKKwkJcmV0ID0gbmlsZnNfZGF0X3ByZXBhcmVfdXBkYXRlKGRhdCwgJm9sZHJlcSwgJm5ld3JlcSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJbmlsZnNfZGF0X2NvbW1pdF91cGRhdGUoZGF0LCAmb2xkcmVxLCAmbmV3cmVxLAorCQkJCQlibWFwLT5iX3B0cl90eXBlID09IE5JTEZTX0JNQVBfUFRSX1ZTKTsKKwkJc2V0X2J1ZmZlcl9uaWxmc192b2xhdGlsZShiaCk7CisJCW5pbGZzX2RpcmVjdF9zZXRfcHRyKGRpcmVjdCwga2V5LCBuZXdyZXEucHJfZW50cnlfbnIpOworCX0gZWxzZQorCQlyZXQgPSBuaWxmc19kYXRfbWFya19kaXJ0eShkYXQsIHB0cik7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG5pbGZzX2RpcmVjdF9hc3NpZ25fdihzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3QsCkBAIC0zNTEsMTggKzMwNiwxOCBAQAogCQkJCSBzZWN0b3JfdCBibG9ja25yLAogCQkJCSB1bmlvbiBuaWxmc19iaW5mbyAqYmluZm8pCiB7CisJc3RydWN0IGlub2RlICpkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoJmRpcmVjdC0+ZF9ibWFwKTsKIAl1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgcmVxOwogCWludCByZXQ7CiAKIAlyZXEuYnByX3B0ciA9IHB0cjsKLQlyZXQgPSBuaWxmc19ibWFwX3N0YXJ0X3YoJmRpcmVjdC0+ZF9ibWFwLCAmcmVxLCBibG9ja25yKTsKLQlpZiAodW5saWtlbHkocmV0IDwgMCkpCi0JCXJldHVybiByZXQ7Ci0KLQliaW5mby0+Ymlfdi5iaV92YmxvY2tuciA9IG5pbGZzX2JtYXBfcHRyX3RvX2RwdHIocHRyKTsKLQliaW5mby0+Ymlfdi5iaV9ibGtvZmYgPSBuaWxmc19ibWFwX2tleV90b19ka2V5KGtleSk7Ci0KLQlyZXR1cm4gMDsKKwlyZXQgPSBuaWxmc19kYXRfcHJlcGFyZV9zdGFydChkYXQsICZyZXEuYnByX3JlcSk7CisJaWYgKCFyZXQpIHsKKwkJbmlsZnNfZGF0X2NvbW1pdF9zdGFydChkYXQsICZyZXEuYnByX3JlcSwgYmxvY2tucik7CisJCWJpbmZvLT5iaV92LmJpX3ZibG9ja25yID0gbmlsZnNfYm1hcF9wdHJfdG9fZHB0cihwdHIpOworCQliaW5mby0+Ymlfdi5iaV9ibGtvZmYgPSBuaWxmc19ibWFwX2tleV90b19ka2V5KGtleSk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X2Fzc2lnbl9wKHN0cnVjdCBuaWxmc19kaXJlY3QgKmRpcmVjdCwKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pZmlsZS5oIGIvZnMvbmlsZnMyL2lmaWxlLmgKaW5kZXggNWQzMGEzNS4uZWNjM2JhNzYgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9pZmlsZS5oCisrKyBiL2ZzL25pbGZzMi9pZmlsZS5oCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAibWR0LmgiCiAjaW5jbHVkZSAiYWxsb2MuaCIKIAotI2RlZmluZSBOSUxGU19JRklMRV9HRlAgIE5JTEZTX01EVF9HRlAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlsZnNfaW5vZGUgKgogbmlsZnNfaWZpbGVfbWFwX2lub2RlKHN0cnVjdCBpbm9kZSAqaWZpbGUsIGlub190IGlubywgc3RydWN0IGJ1ZmZlcl9oZWFkICppYmgpCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvaW5vZGUuYyBiL2ZzL25pbGZzMi9pbm9kZS5jCmluZGV4IGZlOWQ4ZjIuLjgwN2U1ODQgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9pbm9kZS5jCisrKyBiL2ZzL25pbGZzMi9pbm9kZS5jCkBAIC00MzAsNyArNDMwLDggQEAKIAogCXJhd19pbm9kZSA9IG5pbGZzX2lmaWxlX21hcF9pbm9kZShzYmktPnNfaWZpbGUsIGlubywgYmgpOwogCi0JaWYgKG5pbGZzX3JlYWRfaW5vZGVfY29tbW9uKGlub2RlLCByYXdfaW5vZGUpKQorCWVyciA9IG5pbGZzX3JlYWRfaW5vZGVfY29tbW9uKGlub2RlLCByYXdfaW5vZGUpOworCWlmIChlcnIpCiAJCWdvdG8gZmFpbGVkX3VubWFwOwogCiAJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pb2N0bC5jIGIvZnMvbmlsZnMyL2lvY3RsLmMKaW5kZXggNmVhNWY4Ny4uNjU3MmVhNCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2lvY3RsLmMKKysrIGIvZnMvbmlsZnMyL2lvY3RsLmMKQEAgLTQ0MiwxMiArNDQyLDYgQEAKIAljb25zdCBjaGFyICptc2c7CiAJaW50IHJldDsKIAotCXJldCA9IG5pbGZzX2lvY3RsX21vdmVfYmxvY2tzKG5pbGZzLCAmYXJndlswXSwga2J1ZnNbMF0pOwotCWlmIChyZXQgPCAwKSB7Ci0JCW1zZyA9ICJjYW5ub3QgcmVhZCBzb3VyY2UgYmxvY2tzIjsKLQkJZ290byBmYWlsZWQ7Ci0JfQotCiAJcmV0ID0gbmlsZnNfaW9jdGxfZGVsZXRlX2NoZWNrcG9pbnRzKG5pbGZzLCAmYXJndlsxXSwga2J1ZnNbMV0pOwogCWlmIChyZXQgPCAwKSB7CiAJCS8qCkBAIC01NDgsNyArNTQyLDI1IEBACiAJCX0KIAl9CiAKLQlyZXQgPSBuaWxmc19jbGVhbl9zZWdtZW50cyhpbm9kZS0+aV9zYiwgYXJndiwga2J1ZnMpOworCS8qCisJICogbmlsZnNfaW9jdGxfbW92ZV9ibG9ja3MoKSB3aWxsIGNhbGwgbmlsZnNfZ2NfaWdldCgpLAorCSAqIHdoaWNoIHdpbGwgb3BlcmF0ZXMgYW4gaW5vZGUgbGlzdCB3aXRob3V0IGJsb2NraW5nLgorCSAqIFRvIHByb3RlY3QgdGhlIGxpc3QgZnJvbSBjb25jdXJyZW50IG9wZXJhdGlvbnMsCisJICogbmlsZnNfaW9jdGxfbW92ZV9ibG9ja3Mgc2hvdWxkIGJlIGF0b21pYyBvcGVyYXRpb24uCisJICovCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoVEhFX05JTEZTX0dDX1JVTk5JTkcsICZuaWxmcy0+bnNfZmxhZ3MpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlyZXQgPSBuaWxmc19pb2N0bF9tb3ZlX2Jsb2NrcyhuaWxmcywgJmFyZ3ZbMF0sIGtidWZzWzBdKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJOSUxGUzogR0MgZmFpbGVkIGR1cmluZyBwcmVwYXJhdGlvbjogIgorCQkJImNhbm5vdCByZWFkIHNvdXJjZSBibG9ja3M6IGVycj0lZFxuIiwgcmV0KTsKKwllbHNlCisJCXJldCA9IG5pbGZzX2NsZWFuX3NlZ21lbnRzKGlub2RlLT5pX3NiLCBhcmd2LCBrYnVmcyk7CisKKwljbGVhcl9uaWxmc19nY19ydW5uaW5nKG5pbGZzKTsKIAogIG91dF9mcmVlOgogCXdoaWxlICgtLW4gPj0gMCkKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9tZHQuYyBiL2ZzL25pbGZzMi9tZHQuYwppbmRleCAyZGZkNDc3Li4xNTZiZjYwIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvbWR0LmMKKysrIGIvZnMvbmlsZnMyL21kdC5jCkBAIC0xMDMsMTUgKzEwMywxMiBAQAogCQlnb3RvIGZhaWxlZF91bmxvY2s7CiAKIAllcnIgPSAtRUVYSVNUOwotCWlmIChidWZmZXJfdXB0b2RhdGUoYmgpIHx8IGJ1ZmZlcl9tYXBwZWQoYmgpKQorCWlmIChidWZmZXJfdXB0b2RhdGUoYmgpKQogCQlnb3RvIGZhaWxlZF9iaDsKLSNpZiAwCi0JLyogVGhlIHVwdG9kYXRlIGZsYWcgaXMgbm90IHByb3RlY3RlZCBieSB0aGUgcGFnZSBsb2NrLCBidXQKLQkgICB0aGUgbWFwcGVkIGZsYWcgaXMuICBUaHVzLCB3ZSBkb24ndCBoYXZlIHRvIHdhaXQgdGhlIGJ1ZmZlci4gKi8KKwogCXdhaXRfb25fYnVmZmVyKGJoKTsKIAlpZiAoYnVmZmVyX3VwdG9kYXRlKGJoKSkKIAkJZ290byBmYWlsZWRfYmg7Ci0jZW5kaWYKIAogCWJoLT5iX2JkZXYgPSBuaWxmcy0+bnNfYmRldjsKIAllcnIgPSBuaWxmc19tZHRfaW5zZXJ0X25ld19ibG9jayhpbm9kZSwgYmxvY2ssIGJoLCBpbml0X2Jsb2NrKTsKQEAgLTEzOSw3ICsxMzYsNyBAQAogCQkgICAgICAgaW50IG1vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqKm91dF9iaCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXVuc2lnbmVkIGxvbmcgYmxrbnVtID0gMDsKKwlfX3U2NCBibGtudW0gPSAwOwogCWludCByZXQgPSAtRU5PTUVNOwogCiAJYmggPSBuaWxmc19ncmFiX2J1ZmZlcihpbm9kZSwgaW5vZGUtPmlfbWFwcGluZywgYmxrb2ZmLCAwKTsKQEAgLTE2MiwxNyArMTU5LDE1IEBACiAJCXVubG9ja19idWZmZXIoYmgpOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKCFidWZmZXJfbWFwcGVkKGJoKSkgeyAvKiB1bnVzZWQgYnVmZmVyICovCi0JCXJldCA9IG5pbGZzX2JtYXBfbG9va3VwKE5JTEZTX0koaW5vZGUpLT5pX2JtYXAsIGJsa29mZiwKLQkJCQkJJmJsa251bSk7Ci0JCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCQl1bmxvY2tfYnVmZmVyKGJoKTsKLQkJCWdvdG8gZmFpbGVkX2JoOwotCQl9Ci0JCWJoLT5iX2JkZXYgPSBOSUxGU19NRFQoaW5vZGUpLT5taV9uaWxmcy0+bnNfYmRldjsKLQkJYmgtPmJfYmxvY2tuciA9IGJsa251bTsKLQkJc2V0X2J1ZmZlcl9tYXBwZWQoYmgpOworCisJcmV0ID0gbmlsZnNfYm1hcF9sb29rdXAoTklMRlNfSShpbm9kZSktPmlfYm1hcCwgYmxrb2ZmLCAmYmxrbnVtKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQl1bmxvY2tfYnVmZmVyKGJoKTsKKwkJZ290byBmYWlsZWRfYmg7CiAJfQorCWJoLT5iX2JkZXYgPSBOSUxGU19NRFQoaW5vZGUpLT5taV9uaWxmcy0+bnNfYmRldjsKKwliaC0+Yl9ibG9ja25yID0gKHNlY3Rvcl90KWJsa251bTsKKwlzZXRfYnVmZmVyX21hcHBlZChiaCk7CiAKIAliaC0+Yl9lbmRfaW8gPSBlbmRfYnVmZmVyX3JlYWRfc3luYzsKIAlnZXRfYmgoYmgpOwpAQCAtNDAyLDYgKzM5Nyw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGNvbnRhaW5lcl9vZihwYWdlLT5tYXBwaW5nLAogCQkJCQkgICBzdHJ1Y3QgaW5vZGUsIGlfZGF0YSk7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gTklMRlNfTURUKGlub2RlKS0+bWlfbmlsZnM7CiAJc3RydWN0IG5pbGZzX3NiX2luZm8gKndyaXRlciA9IE5VTEw7CiAJaW50IGVyciA9IDA7CiAKQEAgLTQxMSw5ICs0MDcsMTAgQEAKIAlpZiAocGFnZS0+bWFwcGluZy0+YXNzb2NfbWFwcGluZykKIAkJcmV0dXJuIDA7IC8qIERvIG5vdCByZXF1ZXN0IGZsdXNoIGZvciBzaGFkb3cgcGFnZSBjYWNoZSAqLwogCWlmICghc2IpIHsKLQkJd3JpdGVyID0gbmlsZnNfZ2V0X3dyaXRlcihOSUxGU19NRFQoaW5vZGUpLT5taV9uaWxmcyk7CisJCWRvd25fcmVhZCgmbmlsZnMtPm5zX3dyaXRlcl9zZW0pOworCQl3cml0ZXIgPSBuaWxmcy0+bnNfd3JpdGVyOwogCQlpZiAoIXdyaXRlcikgewotCQkJbmlsZnNfcHV0X3dyaXRlcihOSUxGU19NRFQoaW5vZGUpLT5taV9uaWxmcyk7CisJCQl1cF9yZWFkKCZuaWxmcy0+bnNfd3JpdGVyX3NlbSk7CiAJCQlyZXR1cm4gLUVST0ZTOwogCQl9CiAJCXNiID0gd3JpdGVyLT5zX3N1cGVyOwpAQCAtNDI1LDcgKzQyMiw3IEBACiAJCW5pbGZzX2ZsdXNoX3NlZ21lbnQoc2IsIGlub2RlLT5pX2lubyk7CiAKIAlpZiAod3JpdGVyKQotCQluaWxmc19wdXRfd3JpdGVyKE5JTEZTX01EVChpbm9kZSktPm1pX25pbGZzKTsKKwkJdXBfcmVhZCgmbmlsZnMtPm5zX3dyaXRlcl9zZW0pOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTUxNiw5ICs1MTMsMTAgQEAKIH0KIAogc3RydWN0IGlub2RlICpuaWxmc19tZHRfbmV3KHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQkJICAgIGlub190IGlubywgZ2ZwX3QgZ2ZwX21hc2spCisJCQkgICAgaW5vX3QgaW5vKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuaWxmc19tZHRfbmV3X2NvbW1vbihuaWxmcywgc2IsIGlubywgZ2ZwX21hc2spOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuaWxmc19tZHRfbmV3X2NvbW1vbihuaWxmcywgc2IsIGlubywKKwkJCQkJCSAgIE5JTEZTX01EVF9HRlApOwogCiAJaWYgKCFpbm9kZSkKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbWR0LmggYi9mcy9uaWxmczIvbWR0LmgKaW5kZXggZGY2ODNlMC4uNDMxNTk5NyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL21kdC5oCisrKyBiL2ZzL25pbGZzMi9tZHQuaApAQCAtNzQsOCArNzQsNyBAQAogaW50IG5pbGZzX21kdF9tYXJrX2Jsb2NrX2RpcnR5KHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nKTsKIGludCBuaWxmc19tZHRfZmV0Y2hfZGlydHkoc3RydWN0IGlub2RlICopOwogCi1zdHJ1Y3QgaW5vZGUgKm5pbGZzX21kdF9uZXcoc3RydWN0IHRoZV9uaWxmcyAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW5vX3QsCi0JCQkgICAgZ2ZwX3QpOworc3RydWN0IGlub2RlICpuaWxmc19tZHRfbmV3KHN0cnVjdCB0aGVfbmlsZnMgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICosIGlub190KTsKIHN0cnVjdCBpbm9kZSAqbmlsZnNfbWR0X25ld19jb21tb24oc3RydWN0IHRoZV9uaWxmcyAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwKIAkJCQkgICBpbm9fdCwgZ2ZwX3QpOwogdm9pZCBuaWxmc19tZHRfZGVzdHJveShzdHJ1Y3QgaW5vZGUgKik7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvcmVjb3ZlcnkuYyBiL2ZzL25pbGZzMi9yZWNvdmVyeS5jCmluZGV4IGQ4MGNjNzEuLjZkYzgzNTkgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9yZWNvdmVyeS5jCisrKyBiL2ZzL25pbGZzMi9yZWNvdmVyeS5jCkBAIC01NTIsNyArNTUyLDggQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIk5JTEZTIHdhcm5pbmc6IGVycm9yIHJlY292ZXJpbmcgZGF0YSBibG9jayAiCiAJCSAgICAgICAiKGVycj0lZCwgaW5vPSVsdSwgYmxvY2stb2Zmc2V0PSVsbHUpXG4iLAotCQkgICAgICAgZXJyLCByYi0+aW5vLCAodW5zaWduZWQgbG9uZyBsb25nKXJiLT5ibGtvZmYpOworCQkgICAgICAgZXJyLCAodW5zaWduZWQgbG9uZylyYi0+aW5vLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyYi0+Ymxrb2ZmKTsKIAkJaWYgKCFlcnIyKQogCQkJZXJyMiA9IGVycjsKICBuZXh0OgpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ2J1Zi5jIGIvZnMvbmlsZnMyL3NlZ2J1Zi5jCmluZGV4IDllM2ZlMTcuLmU2ZDllMzcgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zZWdidWYuYworKysgYi9mcy9uaWxmczIvc2VnYnVmLmMKQEAgLTMxNiwxMCArMzE2LDEwIEBACiB7CiAJc3RydWN0IGJpbyAqYmlvOwogCi0JYmlvID0gYmlvX2FsbG9jKEdGUF9OT1dBSVQsIG5yX3ZlY3MpOworCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9JTywgbnJfdmVjcyk7CiAJaWYgKGJpbyA9PSBOVUxMKSB7CiAJCXdoaWxlICghYmlvICYmIChucl92ZWNzID4+PSAxKSkKLQkJCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9XQUlULCBucl92ZWNzKTsKKwkJCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9JTywgbnJfdmVjcyk7CiAJfQogCWlmIChsaWtlbHkoYmlvKSkgewogCQliaW8tPmJpX2JkZXYgPSBzYi0+c19iZGV2OwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ21lbnQuYyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKaW5kZXggNTFmZjNkMC4uNjgzZGY4OSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ21lbnQuYworKysgYi9mcy9uaWxmczIvc2VnbWVudC5jCkBAIC0yNTAxLDcgKzI1MDEsOCBAQAogCQlpZiAodGVzdF9iaXQoTklMRlNfU0NfU1VQRVJfUk9PVCwgJnNjaS0+c2NfZmxhZ3MpICYmCiAJCSAgICBuaWxmc19kaXNjb250aW51ZWQobmlsZnMpKSB7CiAJCQlkb3duX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKLQkJCXJlcS0+c2JfZXJyID0gbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwgMCk7CisJCQlyZXEtPnNiX2VyciA9IG5pbGZzX2NvbW1pdF9zdXBlcihzYmksCisJCQkJCW5pbGZzX2FsdHNiX25lZWRfdXBkYXRlKG5pbGZzKSk7CiAJCQl1cF93cml0ZSgmbmlsZnMtPm5zX3NlbSk7CiAJCX0KIAl9CkBAIC0yNjg5LDYgKzI2OTAsNyBAQAogCX0gZWxzZSB7CiAJCURFRklORV9XQUlUKHdhaXQpOwogCQlpbnQgc2hvdWxkX3NsZWVwID0gMTsKKwkJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnM7CiAKIAkJcHJlcGFyZV90b193YWl0KCZzY2ktPnNjX3dhaXRfZGFlbW9uLCAmd2FpdCwKIAkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOwpAQCAtMjcwOSw2ICsyNzExLDkgQEAKIAkJZmluaXNoX3dhaXQoJnNjaS0+c2Nfd2FpdF9kYWVtb24sICZ3YWl0KTsKIAkJdGltZW91dCA9ICgoc2NpLT5zY19zdGF0ZSAmIE5JTEZTX1NFR0NUT1JfQ09NTUlUKSAmJgogCQkJICAgdGltZV9hZnRlcl9lcShqaWZmaWVzLCBzY2ktPnNjX3RpbWVyLT5leHBpcmVzKSk7CisJCW5pbGZzID0gc2NpLT5zY19zYmktPnNfbmlsZnM7CisJCWlmIChzY2ktPnNjX3N1cGVyLT5zX2RpcnQgJiYgbmlsZnNfc2JfbmVlZF91cGRhdGUobmlsZnMpKQorCQkJc2V0X25pbGZzX2Rpc2NvbnRpbnVlZChuaWxmcyk7CiAJfQogCWdvdG8gbG9vcDsKIApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3N1ZmlsZS5oIGIvZnMvbmlsZnMyL3N1ZmlsZS5oCmluZGV4IGEyYzRkNzYuLjBlOTllNWMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zdWZpbGUuaAorKysgYi9mcy9uaWxmczIvc3VmaWxlLmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9uaWxmczJfZnMuaD4KICNpbmNsdWRlICJtZHQuaCIKIAotI2RlZmluZSBOSUxGU19TVUZJTEVfR0ZQCU5JTEZTX01EVF9HRlAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5pbGZzX3N1ZmlsZV9nZXRfbnNlZ21lbnRzKHN0cnVjdCBpbm9kZSAqc3VmaWxlKQogewpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3N1cGVyLmMgYi9mcy9uaWxmczIvc3VwZXIuYwppbmRleCAxNTE5NjRmLi41NWYzZDZiIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc3VwZXIuYworKysgYi9mcy9uaWxmczIvc3VwZXIuYwpAQCAtNTAsNiArNTAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC9leHBvcnRmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlICJuaWxmcy5oIgogI2luY2x1ZGUgIm1kdC5oIgogI2luY2x1ZGUgImFsbG9jLmgiCkBAIC02NSw3ICs2Nyw2IEBACiAJCSAgICIoTklMRlMpIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyB2b2lkIG5pbGZzX3dyaXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogc3RhdGljIGludCBuaWxmc19yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpOwogCiAvKioKQEAgLTMxMSw5ICszMTIsNiBAQAogCiAJbG9ja19rZXJuZWwoKTsKIAotCWlmIChzYi0+c19kaXJ0KQotCQluaWxmc193cml0ZV9zdXBlcihzYik7Ci0KIAluaWxmc19kZXRhY2hfc2VnbWVudF9jb25zdHJ1Y3RvcihzYmkpOwogCiAJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CkBAIC0zMzYsNjMgKzMzNCwyMSBAQAogCXVubG9ja19rZXJuZWwoKTsKIH0KIAotLyoqCi0gKiBuaWxmc193cml0ZV9zdXBlciAtIHdyaXRlIHN1cGVyIGJsb2NrKHMpIG9mIE5JTEZTCi0gKiBAc2I6IHN1cGVyX2Jsb2NrCi0gKgotICogbmlsZnNfd3JpdGVfc3VwZXIoKSBnZXRzIGEgZnMtZGVwZW5kZW50IGxvY2ssIHdyaXRlcyBzdXBlciBibG9jayhzKSwgYW5kCi0gKiBjbGVhcnMgc19kaXJ0LiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gdGhlIHNlY3Rpb24gcHJvdGVjdGVkIGJ5Ci0gKiBsb2NrX3N1cGVyKCkuCi0gKgotICogVGhlIHNfZGlydCBmbGFnIGlzIG1hbmFnZWQgYnkgZWFjaCBmaWxlc3lzdGVtIGFuZCB3ZSBwcm90ZWN0IGl0IGJ5IG5zX3NlbQotICogb2YgdGhlIHN0cnVjdCB0aGVfbmlsZnMuICBMb2NrIG9yZGVyIG11c3QgYmUgYXMgZm9sbG93czoKLSAqCi0gKiAgIDEuIGxvY2tfc3VwZXIoKQotICogICAyLiAgICBkb3duX3dyaXRlKCZuaWxmcy0+bnNfc2VtKQotICoKLSAqIEluc2lkZSBOSUxGUywgbG9ja2luZyBuc19zZW0gaXMgZW5vdWdoIHRvIHByb3RlY3Qgc19kaXJ0IGFuZCB0aGUgYnVmZmVyCi0gKiBvZiB0aGUgc3VwZXIgYmxvY2sgKG5pbGZzLT5uc19zYnBbXSkuCi0gKgotICogSW4gbW9zdCBjYXNlcywgVkZTIGZ1bmN0aW9ucyBjYWxsIGxvY2tfc3VwZXIoKSBiZWZvcmUgY2FsbGluZyB0aGVzZQotICogbWV0aG9kcy4gIFNvIHdlIG11c3QgYmUgY2FyZWZ1bCBub3QgdG8gYnJpbmcgb24gZGVhZGxvY2tzIHdoZW4gdXNpbmcKLSAqIGxvY2tfc3VwZXIoKTsgIHNlZSBnZW5lcmljX3NodXRkb3duX3N1cGVyKCksIHdyaXRlX3N1cGVyKCksIGFuZCBzbyBvbi4KLSAqCi0gKiBOb3RlIHRoYXQgb3JkZXIgb2YgbG9ja19rZXJuZWwoKSBhbmQgbG9ja19zdXBlcigpIGRlcGVuZHMgb24gY29udGV4dHMKLSAqIG9mIFZGUy4gIFdlIHNob3VsZCBhbHNvIG5vdGUgdGhhdCBsb2NrX2tlcm5lbCgpIGNhbiBiZSB1c2VkIGluIGl0cwotICogcHJvdGVjdGl2ZSBzZWN0aW9uIGFuZCBvbmx5IHRoZSBvdXRlcm1vc3Qgb25lIGhhcyBhbiBlZmZlY3QuCi0gKi8KLXN0YXRpYyB2b2lkIG5pbGZzX3dyaXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCitzdGF0aWMgaW50IG5pbGZzX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpCiB7CiAJc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IE5JTEZTX1NCKHNiKTsKIAlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKLQotCWRvd25fd3JpdGUoJm5pbGZzLT5uc19zZW0pOwotCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewotCQlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKipzYnAgPSBuaWxmcy0+bnNfc2JwOwotCQl1NjQgdCA9IGdldF9zZWNvbmRzKCk7Ci0JCWludCBkdXBzYjsKLQotCQlpZiAoIW5pbGZzX2Rpc2NvbnRpbnVlZChuaWxmcykgJiYgdCA+PSBuaWxmcy0+bnNfc2J3dGltZVswXSAmJgotCQkgICAgdCA8IG5pbGZzLT5uc19zYnd0aW1lWzBdICsgTklMRlNfU0JfRlJFUSkgewotCQkJdXBfd3JpdGUoJm5pbGZzLT5uc19zZW0pOwotCQkJcmV0dXJuOwotCQl9Ci0JCWR1cHNiID0gc2JwWzFdICYmIHQgPiBuaWxmcy0+bnNfc2J3dGltZVsxXSArIE5JTEZTX0FMVFNCX0ZSRVE7Ci0JCW5pbGZzX2NvbW1pdF9zdXBlcihzYmksIGR1cHNiKTsKLQl9Ci0Jc2ItPnNfZGlydCA9IDA7Ci0JdXBfd3JpdGUoJm5pbGZzLT5uc19zZW0pOwotfQotCi1zdGF0aWMgaW50IG5pbGZzX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpCi17CiAJaW50IGVyciA9IDA7CiAKLQluaWxmc193cml0ZV9zdXBlcihzYik7Ci0KIAkvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHN1cGVyIGJsb2NrIHNob3VsZCBiZSB3cml0dGVuIGJhY2sgKi8KIAlpZiAod2FpdCkKIAkJZXJyID0gbmlsZnNfY29uc3RydWN0X3NlZ21lbnQoc2IpOworCisJZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlbSk7CisJaWYgKHNiLT5zX2RpcnQpCisJCW5pbGZzX2NvbW1pdF9zdXBlcihzYmksIDEpOworCXVwX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQwNyw4ICszNjMsNyBAQAogCWxpc3RfYWRkKCZzYmktPnNfbGlzdCwgJm5pbGZzLT5uc19zdXBlcnMpOwogCXVwX3dyaXRlKCZuaWxmcy0+bnNfc3VwZXJfc2VtKTsKIAotCXNiaS0+c19pZmlsZSA9IG5pbGZzX21kdF9uZXcoCi0JCW5pbGZzLCBzYmktPnNfc3VwZXIsIE5JTEZTX0lGSUxFX0lOTywgTklMRlNfSUZJTEVfR0ZQKTsKKwlzYmktPnNfaWZpbGUgPSBuaWxmc19tZHRfbmV3KG5pbGZzLCBzYmktPnNfc3VwZXIsIE5JTEZTX0lGSUxFX0lOTyk7CiAJaWYgKCFzYmktPnNfaWZpbGUpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC01MjksNiArNDg0LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbmlsZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdmZzbW91bnQgKnZmcykKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gdmZzLT5tbnRfc2I7CisJc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IE5JTEZTX1NCKHNiKTsKKworCWlmICghbmlsZnNfdGVzdF9vcHQoc2JpLCBCQVJSSUVSKSkKKwkJc2VxX3ByaW50ZihzZXEsICIsYmFycmllcj1vZmYiKTsKKwlpZiAobmlsZnNfdGVzdF9vcHQoc2JpLCBTTkFQU0hPVCkpCisJCXNlcV9wcmludGYoc2VxLCAiLGNwPSVsbHUiLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpc2JpLT5zX3NuYXBzaG90X2Nubyk7CisJaWYgKG5pbGZzX3Rlc3Rfb3B0KHNiaSwgRVJST1JTX1JPKSkKKwkJc2VxX3ByaW50ZihzZXEsICIsZXJyb3JzPXJlbW91bnQtcm8iKTsKKwlpZiAobmlsZnNfdGVzdF9vcHQoc2JpLCBFUlJPUlNfUEFOSUMpKQorCQlzZXFfcHJpbnRmKHNlcSwgIixlcnJvcnM9cGFuaWMiKTsKKwlpZiAobmlsZnNfdGVzdF9vcHQoc2JpLCBTVFJJQ1RfT1JERVIpKQorCQlzZXFfcHJpbnRmKHNlcSwgIixvcmRlcj1zdHJpY3QiKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbmlsZnNfc29wcyA9IHsKIAkuYWxsb2NfaW5vZGUgICAgPSBuaWxmc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZSAgPSBuaWxmc19kZXN0cm95X2lub2RlLApAQCAtNTM4LDcgKzUxMyw3IEBACiAJLyogLmRyb3BfaW5vZGUJICA9IG5pbGZzX2Ryb3BfaW5vZGUsICovCiAJLmRlbGV0ZV9pbm9kZSAgID0gbmlsZnNfZGVsZXRlX2lub2RlLAogCS5wdXRfc3VwZXIgICAgICA9IG5pbGZzX3B1dF9zdXBlciwKLQkud3JpdGVfc3VwZXIgICAgPSBuaWxmc193cml0ZV9zdXBlciwKKwkvKiAud3JpdGVfc3VwZXIgICAgPSBuaWxmc193cml0ZV9zdXBlciwgKi8KIAkuc3luY19mcyAgICAgICAgPSBuaWxmc19zeW5jX2ZzLAogCS8qIC53cml0ZV9zdXBlcl9sb2NrZnMgKi8KIAkvKiAudW5sb2NrZnMgKi8KQEAgLTU0Niw3ICs1MjEsNyBAQAogCS5yZW1vdW50X2ZzICAgICA9IG5pbGZzX3JlbW91bnQsCiAJLmNsZWFyX2lub2RlICAgID0gbmlsZnNfY2xlYXJfaW5vZGUsCiAJLyogLnVtb3VudF9iZWdpbiAqLwotCS8qIC5zaG93X29wdGlvbnMgKi8KKwkuc2hvd19vcHRpb25zID0gbmlsZnNfc2hvd19vcHRpb25zCiB9OwogCiBzdGF0aWMgc3RydWN0IGlub2RlICoKQEAgLTgxNiwxMCArNzkxLDE1IEBACiAKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpIHsKIAkJaWYgKG5pbGZzX3Rlc3Rfb3B0KHNiaSwgU05BUFNIT1QpKSB7CisJCQlkb3duX3JlYWQoJm5pbGZzLT5uc19zZWdjdG9yX3NlbSk7CiAJCQllcnIgPSBuaWxmc19jcGZpbGVfaXNfc25hcHNob3QobmlsZnMtPm5zX2NwZmlsZSwKIAkJCQkJCSAgICAgICBzYmktPnNfc25hcHNob3RfY25vKTsKLQkJCWlmIChlcnIgPCAwKQorCQkJdXBfcmVhZCgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJaWYgKGVyciA9PSAtRU5PRU5UKQorCQkJCQllcnIgPSAtRUlOVkFMOwogCQkJCWdvdG8gZmFpbGVkX3NiaTsKKwkJCX0KIAkJCWlmICghZXJyKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJICAgICAgICJOSUxGUzogVGhlIHNwZWNpZmllZCBjaGVja3BvaW50IGlzICIKQEAgLTExMjcsMTAgKzExMDcsNiBAQAogCSAqLwogCXNkLnNiaSA9IG5pbGZzX2ZpbmRfc2JpbmZvKG5pbGZzLCAhKGZsYWdzICYgTVNfUkRPTkxZKSwgc2QuY25vKTsKIAotCWlmICghc2QuY25vKQotCQkvKiB0cnlpbmcgdG8gZ2V0IHRoZSBsYXRlc3QgY2hlY2twb2ludC4gICovCi0JCXNkLmNubyA9IG5pbGZzX2xhc3RfY25vKG5pbGZzKTsKLQogCS8qCiAJICogR2V0IHN1cGVyIGJsb2NrIGluc3RhbmNlIGhvbGRpbmcgdGhlIG5pbGZzX3NiX2luZm8gc3RydWN0LgogCSAqIEEgbmV3IGluc3RhbmNlIGlzIGFsbG9jYXRlZCBpZiBubyBleGlzdGluZyBtb3VudCBpcyBwcmVzZW50IG9yCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvdGhlX25pbGZzLmMgYi9mcy9uaWxmczIvdGhlX25pbGZzLmMKaW5kZXggOGI4ODg5OC4uYWQzOTFhOCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3RoZV9uaWxmcy5jCisrKyBiL2ZzL25pbGZzMi90aGVfbmlsZnMuYwpAQCAtNjgsMTIgKzY4LDExIEBACiAKIAluaWxmcy0+bnNfYmRldiA9IGJkZXY7CiAJYXRvbWljX3NldCgmbmlsZnMtPm5zX2NvdW50LCAxKTsKLQlhdG9taWNfc2V0KCZuaWxmcy0+bnNfd3JpdGVyX3JlZmNvdW50LCAtMSk7CiAJYXRvbWljX3NldCgmbmlsZnMtPm5zX25kaXJ0eWJsa3MsIDApOwogCWluaXRfcndzZW0oJm5pbGZzLT5uc19zZW0pOwogCWluaXRfcndzZW0oJm5pbGZzLT5uc19zdXBlcl9zZW0pOwogCW11dGV4X2luaXQoJm5pbGZzLT5uc19tb3VudF9tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmbmlsZnMtPm5zX3dyaXRlcl9tdXRleCk7CisJaW5pdF9yd3NlbSgmbmlsZnMtPm5zX3dyaXRlcl9zZW0pOwogCUlOSVRfTElTVF9IRUFEKCZuaWxmcy0+bnNfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJm5pbGZzLT5uc19zdXBlcnMpOwogCXNwaW5fbG9ja19pbml0KCZuaWxmcy0+bnNfbGFzdF9zZWdtZW50X2xvY2spOwpAQCAtMTg4LDIzICsxODcsMTkgQEAKIAlpbm9kZV9zaXplID0gbmlsZnMtPm5zX2lub2RlX3NpemU7CiAKIAllcnIgPSAtRU5PTUVNOwotCW5pbGZzLT5uc19kYXQgPSBuaWxmc19tZHRfbmV3KAotCQluaWxmcywgTlVMTCwgTklMRlNfREFUX0lOTywgTklMRlNfREFUX0dGUCk7CisJbmlsZnMtPm5zX2RhdCA9IG5pbGZzX21kdF9uZXcobmlsZnMsIE5VTEwsIE5JTEZTX0RBVF9JTk8pOwogCWlmICh1bmxpa2VseSghbmlsZnMtPm5zX2RhdCkpCiAJCWdvdG8gZmFpbGVkOwogCi0JbmlsZnMtPm5zX2djX2RhdCA9IG5pbGZzX21kdF9uZXcoCi0JCW5pbGZzLCBOVUxMLCBOSUxGU19EQVRfSU5PLCBOSUxGU19EQVRfR0ZQKTsKKwluaWxmcy0+bnNfZ2NfZGF0ID0gbmlsZnNfbWR0X25ldyhuaWxmcywgTlVMTCwgTklMRlNfREFUX0lOTyk7CiAJaWYgKHVubGlrZWx5KCFuaWxmcy0+bnNfZ2NfZGF0KSkKIAkJZ290byBmYWlsZWRfZGF0OwogCi0JbmlsZnMtPm5zX2NwZmlsZSA9IG5pbGZzX21kdF9uZXcoCi0JCW5pbGZzLCBOVUxMLCBOSUxGU19DUEZJTEVfSU5PLCBOSUxGU19DUEZJTEVfR0ZQKTsKKwluaWxmcy0+bnNfY3BmaWxlID0gbmlsZnNfbWR0X25ldyhuaWxmcywgTlVMTCwgTklMRlNfQ1BGSUxFX0lOTyk7CiAJaWYgKHVubGlrZWx5KCFuaWxmcy0+bnNfY3BmaWxlKSkKIAkJZ290byBmYWlsZWRfZ2NfZGF0OwogCi0JbmlsZnMtPm5zX3N1ZmlsZSA9IG5pbGZzX21kdF9uZXcoCi0JCW5pbGZzLCBOVUxMLCBOSUxGU19TVUZJTEVfSU5PLCBOSUxGU19TVUZJTEVfR0ZQKTsKKwluaWxmcy0+bnNfc3VmaWxlID0gbmlsZnNfbWR0X25ldyhuaWxmcywgTlVMTCwgTklMRlNfU1VGSUxFX0lOTyk7CiAJaWYgKHVubGlrZWx5KCFuaWxmcy0+bnNfc3VmaWxlKSkKIAkJZ290byBmYWlsZWRfY3BmaWxlOwogCkBAIC01OTYsOSArNTkxLDcgQEAKIAogCW5pbGZzLT5uc19tb3VudF9zdGF0ZSA9IGxlMTZfdG9fY3B1KHNicC0+c19zdGF0ZSk7CiAKLQliZGkgPSBuaWxmcy0+bnNfYmRldi0+YmRfaW5vZGVfYmFja2luZ19kZXZfaW5mbzsKLQlpZiAoIWJkaSkKLQkJYmRpID0gbmlsZnMtPm5zX2JkZXYtPmJkX2lub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm87CisJYmRpID0gbmlsZnMtPm5zX2JkZXYtPmJkX2lub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm87CiAJbmlsZnMtPm5zX2JkaSA9IGJkaSA/IDogJmRlZmF1bHRfYmFja2luZ19kZXZfaW5mbzsKIAogCS8qIEZpbmRpbmcgbGFzdCBzZWdtZW50ICovCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvdGhlX25pbGZzLmggYi9mcy9uaWxmczIvdGhlX25pbGZzLmgKaW5kZXggMWI5Y2FhZi4uMjBhYmQ1NSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3RoZV9uaWxmcy5oCisrKyBiL2ZzL25pbGZzMi90aGVfbmlsZnMuaApAQCAtMzcsNiArMzcsNyBAQAogCVRIRV9OSUxGU19MT0FERUQsICAgICAgIC8qIFJvbGwtYmFjay9yb2xsLWZvcndhcmQgaGFzIGRvbmUgYW5kCiAJCQkJICAgdGhlIGxhdGVzdCBjaGVja3BvaW50IHdhcyBsb2FkZWQgKi8KIAlUSEVfTklMRlNfRElTQ09OVElOVUVELAkvKiAnbmV4dCcgcG9pbnRlciBjaGFpbiBoYXMgYnJva2VuICovCisJVEhFX05JTEZTX0dDX1JVTk5JTkcsCS8qIGdjIHByb2Nlc3MgaXMgcnVubmluZyAqLwogfTsKIAogLyoqCkBAIC01MCw4ICs1MSw3IEBACiAgKiBAbnNfc2VtOiBzZW1hcGhvcmUgZm9yIHNoYXJlZCBzdGF0ZXMKICAqIEBuc19zdXBlcl9zZW06IHNlbWFwaG9yZSBmb3IgZ2xvYmFsIG9wZXJhdGlvbnMgYWNyb3NzIHN1cGVyIGJsb2NrIGluc3RhbmNlcwogICogQG5zX21vdW50X211dGV4OiBtdXRleCBwcm90ZWN0aW5nIG1vdW50IHByb2Nlc3Mgb2YgbmlsZnMKLSAqIEBuc193cml0ZXJfbXV0ZXg6IG11dGV4IHByb3RlY3RpbmcgbnNfd3JpdGVyIGF0dGFjaC9kZXRhY2gKLSAqIEBuc193cml0ZXJfcmVmY291bnQ6IG51bWJlciBvZiByZWZlcnJlcnMgb24gbnNfd3JpdGVyCisgKiBAbnNfd3JpdGVyX3NlbTogc2VtYXBob3JlIHByb3RlY3RpbmcgbnNfd3JpdGVyIGF0dGFjaC9kZXRhY2gKICAqIEBuc19jdXJyZW50OiBiYWNrIHBvaW50ZXIgdG8gY3VycmVudCBtb3VudAogICogQG5zX3NiaDogYnVmZmVyIGhlYWRzIG9mIG9uLWRpc2sgc3VwZXIgYmxvY2tzCiAgKiBAbnNfc2JwOiBwb2ludGVycyB0byBzdXBlciBibG9jayBkYXRhCkBAIC0xMDAsOCArMTAwLDcgQEAKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlCW5zX3NlbTsKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlCW5zX3N1cGVyX3NlbTsKIAlzdHJ1Y3QgbXV0ZXgJCW5zX21vdW50X211dGV4OwotCXN0cnVjdCBtdXRleAkJbnNfd3JpdGVyX211dGV4OwotCWF0b21pY190CQluc193cml0ZXJfcmVmY291bnQ7CisJc3RydWN0IHJ3X3NlbWFwaG9yZQluc193cml0ZXJfc2VtOwogCiAJLyoKIAkgKiBjb21wb25lbnRzIHByb3RlY3RlZCBieSBuc19zdXBlcl9zZW0KQEAgLTE5NywxMSArMTk2LDI2IEBACiBUSEVfTklMRlNfRk5TKElOSVQsIGluaXQpCiBUSEVfTklMRlNfRk5TKExPQURFRCwgbG9hZGVkKQogVEhFX05JTEZTX0ZOUyhESVNDT05USU5VRUQsIGRpc2NvbnRpbnVlZCkKK1RIRV9OSUxGU19GTlMoR0NfUlVOTklORywgZ2NfcnVubmluZykKIAogLyogTWluaW11bSBpbnRlcnZhbCBvZiBwZXJpb2RpY2FsIHVwZGF0ZSBvZiBzdXBlcmJsb2NrcyAoaW4gc2Vjb25kcykgKi8KICNkZWZpbmUgTklMRlNfU0JfRlJFUQkJMTAKICNkZWZpbmUgTklMRlNfQUxUU0JfRlJFUQk2MCAgLyogc3BhcmUgc3VwZXJibG9jayAqLwogCitzdGF0aWMgaW5saW5lIGludCBuaWxmc19zYl9uZWVkX3VwZGF0ZShzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcykKK3sKKwl1NjQgdCA9IGdldF9zZWNvbmRzKCk7CisJcmV0dXJuIHQgPCBuaWxmcy0+bnNfc2J3dGltZVswXSB8fAorCQkgdCA+IG5pbGZzLT5uc19zYnd0aW1lWzBdICsgTklMRlNfU0JfRlJFUTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmlsZnNfYWx0c2JfbmVlZF91cGRhdGUoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMpCit7CisJdTY0IHQgPSBnZXRfc2Vjb25kcygpOworCXN0cnVjdCBuaWxmc19zdXBlcl9ibG9jayAqKnNicCA9IG5pbGZzLT5uc19zYnA7CisJcmV0dXJuIHNicFsxXSAmJiB0ID4gbmlsZnMtPm5zX3Nid3RpbWVbMV0gKyBOSUxGU19BTFRTQl9GUkVROworfQorCiB2b2lkIG5pbGZzX3NldF9sYXN0X3NlZ21lbnQoc3RydWN0IHRoZV9uaWxmcyAqLCBzZWN0b3JfdCwgdTY0LCBfX3U2NCk7CiBzdHJ1Y3QgdGhlX25pbGZzICpmaW5kX29yX2NyZWF0ZV9uaWxmcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogdm9pZCBwdXRfbmlsZnMoc3RydWN0IHRoZV9uaWxmcyAqKTsKQEAgLTIyMSwzNCArMjM1LDIxIEBACiAJYXRvbWljX2luYygmbmlsZnMtPm5zX2NvdW50KTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqbmlsZnNfZ2V0X3dyaXRlcihzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcykKLXsKLQlpZiAoYXRvbWljX2luY19hbmRfdGVzdCgmbmlsZnMtPm5zX3dyaXRlcl9yZWZjb3VudCkpCi0JCW11dGV4X2xvY2soJm5pbGZzLT5uc193cml0ZXJfbXV0ZXgpOwotCXJldHVybiBuaWxmcy0+bnNfd3JpdGVyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmlsZnNfcHV0X3dyaXRlcihzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcykKLXsKLQlpZiAoYXRvbWljX2FkZF9uZWdhdGl2ZSgtMSwgJm5pbGZzLT5uc193cml0ZXJfcmVmY291bnQpKQotCQltdXRleF91bmxvY2soJm5pbGZzLT5uc193cml0ZXJfbXV0ZXgpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQKIG5pbGZzX2F0dGFjaF93cml0ZXIoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkpCiB7Ci0JbXV0ZXhfbG9jaygmbmlsZnMtPm5zX3dyaXRlcl9tdXRleCk7CisJZG93bl93cml0ZSgmbmlsZnMtPm5zX3dyaXRlcl9zZW0pOwogCW5pbGZzLT5uc193cml0ZXIgPSBzYmk7Ci0JbXV0ZXhfdW5sb2NrKCZuaWxmcy0+bnNfd3JpdGVyX211dGV4KTsKKwl1cF93cml0ZSgmbmlsZnMtPm5zX3dyaXRlcl9zZW0pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIG5pbGZzX2RldGFjaF93cml0ZXIoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkpCiB7Ci0JbXV0ZXhfbG9jaygmbmlsZnMtPm5zX3dyaXRlcl9tdXRleCk7CisJZG93bl93cml0ZSgmbmlsZnMtPm5zX3dyaXRlcl9zZW0pOwogCWlmIChzYmkgPT0gbmlsZnMtPm5zX3dyaXRlcikKIAkJbmlsZnMtPm5zX3dyaXRlciA9IE5VTEw7Ci0JbXV0ZXhfdW5sb2NrKCZuaWxmcy0+bnNfd3JpdGVyX211dGV4KTsKKwl1cF93cml0ZSgmbmlsZnMtPm5zX3dyaXRlcl9zZW0pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmlsZnNfcHV0X3NiaW5mbyhzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpKQpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9maWxlLmMgYi9mcy9udGZzL2ZpbGUuYwppbmRleCAzMTQwYTQ0Li40MzUwZDQ5IDEwMDY0NAotLS0gYS9mcy9udGZzL2ZpbGUuYworKysgYi9mcy9udGZzL2ZpbGUuYwpAQCAtMjA3NiwxNCArMjA3Niw2IEBACiAJKnBwb3MgPSBwb3M7CiAJaWYgKGNhY2hlZF9wYWdlKQogCQlwYWdlX2NhY2hlX3JlbGVhc2UoY2FjaGVkX3BhZ2UpOwotCS8qIEZvciBub3csIHdoZW4gdGhlIHVzZXIgYXNrcyBmb3IgT19TWU5DLCB3ZSBhY3R1YWxseSBnaXZlIE9fRFNZTkMuICovCi0JaWYgKGxpa2VseSghc3RhdHVzKSkgewotCQlpZiAodW5saWtlbHkoKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkModmkpKSkgewotCQkJaWYgKCFtYXBwaW5nLT5hX29wcy0+d3JpdGVwYWdlIHx8ICFpc19zeW5jX2tpb2NiKGlvY2IpKQotCQkJCXN0YXR1cyA9IGdlbmVyaWNfb3N5bmNfaW5vZGUodmksIG1hcHBpbmcsCi0JCQkJCQlPU1lOQ19NRVRBREFUQXxPU1lOQ19EQVRBKTsKLQkJfQotICAJfQogCXBhZ2V2ZWNfbHJ1X2FkZF9maWxlKCZscnVfcHZlYyk7CiAJbnRmc19kZWJ1ZygiRG9uZS4gIFJldHVybmluZyAlcyAod3JpdHRlbiAweCVseCwgc3RhdHVzICVsaSkuIiwKIAkJCXdyaXR0ZW4gPyAid3JpdHRlbiIgOiAic3RhdHVzIiwgKHVuc2lnbmVkIGxvbmcpd3JpdHRlbiwKQEAgLTIxNDUsOCArMjEzNyw4IEBACiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXJldCA9IG50ZnNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKGlvY2IsIGlvdiwgbnJfc2VncywgJmlvY2ItPmtpX3Bvcyk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaWYgKHJldCA+IDAgJiYgKChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKLQkJaW50IGVyciA9IHN5bmNfcGFnZV9yYW5nZShpbm9kZSwgbWFwcGluZywgcG9zLCByZXQpOworCWlmIChyZXQgPiAwKSB7CisJCWludCBlcnIgPSBnZW5lcmljX3dyaXRlX3N5bmMoZmlsZSwgcG9zLCByZXQpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldCA9IGVycjsKIAl9CkBAIC0yMTczLDggKzIxNjUsOCBAQAogCWlmIChyZXQgPT0gLUVJT0NCUVVFVUVEKQogCQlyZXQgPSB3YWl0X29uX3N5bmNfa2lvY2IoJmtpb2NiKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQlpZiAocmV0ID4gMCAmJiAoKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkgewotCQlpbnQgZXJyID0gc3luY19wYWdlX3JhbmdlKGlub2RlLCBtYXBwaW5nLCAqcHBvcyAtIHJldCwgcmV0KTsKKwlpZiAocmV0ID4gMCkgeworCQlpbnQgZXJyID0gZ2VuZXJpY193cml0ZV9zeW5jKGZpbGUsICpwcG9zIC0gcmV0LCByZXQpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldCA9IGVycjsKIAl9CmRpZmYgLS1naXQgYS9mcy9udGZzL21mdC5jIGIvZnMvbnRmcy9tZnQuYwppbmRleCAyM2JmNjg0Li4xY2FhMGVmIDEwMDY0NAotLS0gYS9mcy9udGZzL21mdC5jCisrKyBiL2ZzL250ZnMvbWZ0LmMKQEAgLTM4NCwxMyArMzg0LDEyIEBACiAgKiBpdCBpcyBkaXJ0eSBpbiB0aGUgaW5vZGUgbWV0YSBkYXRhIHJhdGhlciB0aGFuIHRoZSBkYXRhIHBhZ2UgY2FjaGUgb2YgdGhlCiAgKiBpbm9kZSwgYW5kIHRodXMgdGhlcmUgYXJlIG5vIGRhdGEgcGFnZXMgdGhhdCBuZWVkIHdyaXRpbmcgb3V0LiAgVGhlcmVmb3JlLCBhCiAgKiBmdWxsIG1hcmtfaW5vZGVfZGlydHkoKSBpcyBvdmVya2lsbC4gIEEgbWFya19pbm9kZV9kaXJ0eV9zeW5jKCksIG9uIHRoZQotICogb3RoZXIgaGFuZCwgaXMgbm90IHN1ZmZpY2llbnQsIGJlY2F1c2UgSV9ESVJUWV9EQVRBU1lOQyBuZWVkcyB0byBiZSBzZXQgdG8KLSAqIGVuc3VyZSAtPndyaXRlX2lub2RlIGlzIGNhbGxlZCBmcm9tIGdlbmVyaWNfb3N5bmNfaW5vZGUoKSBhbmQgdGhpcyBuZWVkcyB0bwotICogaGFwcGVuIG9yIHRoZSBmaWxlIGRhdGEgd291bGQgbm90IG5lY2Vzc2FyaWx5IGhpdCB0aGUgZGV2aWNlIHN5bmNocm9ub3VzbHksCi0gKiBldmVuIHRob3VnaCB0aGUgdmZzIGlub2RlIGhhcyB0aGUgT19TWU5DIGZsYWcgc2V0LiAgQWxzbywgSV9ESVJUWV9EQVRBU1lOQwotICogc2ltcGx5ICJmZWVscyIgYmV0dGVyIHRoYW4ganVzdCBJX0RJUlRZX1NZTkMsIHNpbmNlIHRoZSBmaWxlIGRhdGEgaGFzIG5vdAotICogYWN0dWFsbHkgaGl0IHRoZSBibG9jayBkZXZpY2UgeWV0LCB3aGljaCBpcyBub3Qgd2hhdCBJX0RJUlRZX1NZTkMgb24gaXRzIG93bgotICogd291bGQgc3VnZ2VzdC4KKyAqIG90aGVyIGhhbmQsIGlzIG5vdCBzdWZmaWNpZW50LCBiZWNhdXNlIC0+d3JpdGVfaW5vZGUgbmVlZHMgdG8gYmUgY2FsbGVkIGV2ZW4KKyAqIGluIGNhc2Ugb2YgZmRhdGFzeW5jLiBUaGlzIG5lZWRzIHRvIGhhcHBlbiBvciB0aGUgZmlsZSBkYXRhIHdvdWxkIG5vdAorICogbmVjZXNzYXJpbHkgaGl0IHRoZSBkZXZpY2Ugc3luY2hyb25vdXNseSwgZXZlbiB0aG91Z2ggdGhlIHZmcyBpbm9kZSBoYXMgdGhlCisgKiBPX1NZTkMgZmxhZyBzZXQuICBBbHNvLCBJX0RJUlRZX0RBVEFTWU5DIHNpbXBseSAiZmVlbHMiIGJldHRlciB0aGFuIGp1c3QKKyAqIElfRElSVFlfU1lOQywgc2luY2UgdGhlIGZpbGUgZGF0YSBoYXMgbm90IGFjdHVhbGx5IGhpdCB0aGUgYmxvY2sgZGV2aWNlIHlldCwKKyAqIHdoaWNoIGlzIG5vdCB3aGF0IElfRElSVFlfU1lOQyBvbiBpdHMgb3duIHdvdWxkIHN1Z2dlc3QuCiAgKi8KIHZvaWQgX19tYXJrX21mdF9yZWNvcmRfZGlydHkobnRmc19pbm9kZSAqbmkpCiB7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZnMuYyBiL2ZzL29jZnMyL2RsbS9kbG1mcy5jCmluZGV4IDFjOWVmYjQuLjAyYmYxNzggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1mcy5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1mcy5jCkBAIC0zMjUsNiArMzI1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGRsbWZzX2JhY2tpbmdfZGV2X2luZm8gPSB7CisJLm5hbWUJCT0gIm9jZnMyLWRsbWZzIiwKIAkucmFfcGFnZXMJPSAwLAkvKiBObyByZWFkYWhlYWQgKi8KIAkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0ssCiB9OwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZmlsZS5jIGIvZnMvb2NmczIvZmlsZS5jCmluZGV4IGFhNTAxZDMuLjIyMWM1ZTkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2ZpbGUuYworKysgYi9mcy9vY2ZzMi9maWxlLmMKQEAgLTE4NzEsOCArMTg3MSw3IEBACiAJCQlnb3RvIG91dF9kaW87CiAJCX0KIAl9IGVsc2UgewotCQl3cml0dGVuID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soaW9jYiwgaW92LCBucl9zZWdzLAotCQkJCQkJCSpwcG9zKTsKKwkJd3JpdHRlbiA9IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBwb3MpOwogCX0KIAogb3V0X2RpbzoKQEAgLTE4ODAsMTggKzE4NzksMjEgQEAKIAlCVUdfT04ocmV0ID09IC1FSU9DQlFVRVVFRCAmJiAhKGZpbGUtPmZfZmxhZ3MgJiBPX0RJUkVDVCkpOwogCiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19TWU5DICYmICFkaXJlY3RfaW8pIHx8IElTX1NZTkMoaW5vZGUpKSB7Ci0JCS8qCi0JCSAqIFRoZSBnZW5lcmljIHdyaXRlIHBhdGhzIGhhdmUgaGFuZGxlZCBnZXR0aW5nIGRhdGEKLQkJICogdG8gZGlzaywgYnV0IHNpbmNlIHdlIGRvbid0IG1ha2UgdXNlIG9mIHRoZSBkaXJ0eQotCQkgKiBpbm9kZSBsaXN0LCBhIG1hbnVhbCBqb3VybmFsIGNvbW1pdCBpcyBuZWNlc3NhcnkKLQkJICogaGVyZS4KLQkJICovCi0JCWlmIChvbGRfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkgfHwKLQkJICAgIG9sZF9jbHVzdGVycyAhPSBPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMpIHsKKwkJcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGZpbGUtPmZfbWFwcGluZywgcG9zLAorCQkJCQkgICAgICAgcG9zICsgY291bnQgLSAxKTsKKwkJaWYgKHJldCA8IDApCisJCQl3cml0dGVuID0gcmV0OworCisJCWlmICghcmV0ICYmIChvbGRfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkgfHwKKwkJICAgIG9sZF9jbHVzdGVycyAhPSBPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMpKSB7CiAJCQlyZXQgPSBqYmQyX2pvdXJuYWxfZm9yY2VfY29tbWl0KG9zYi0+am91cm5hbC0+al9qb3VybmFsKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCXdyaXR0ZW4gPSByZXQ7CiAJCX0KKworCQlpZiAoIXJldCkKKwkJCXJldCA9IGZpbGVtYXBfZmRhdGF3YWl0X3JhbmdlKGZpbGUtPmZfbWFwcGluZywgcG9zLAorCQkJCQkJICAgICAgcG9zICsgY291bnQgLSAxKTsKIAl9CiAKIAkvKiAKQEAgLTE5OTEsMzEgKzE5OTMsMTYgQEAKIAogCWlmIChyZXQgPiAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CisJCWludCBlcnI7CiAKLQkJKnBwb3MgKz0gcmV0OwogCQlucl9wYWdlcyA9IChyZXQgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCi0JCS8qCi0JCSAqIElmIGZpbGUgb3IgaW5vZGUgaXMgU1lOQyBhbmQgd2UgYWN0dWFsbHkgd3JvdGUgc29tZSBkYXRhLAotCQkgKiBzeW5jIGl0LgotCQkgKi8KLQkJaWYgKHVubGlrZWx5KChvdXQtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkgewotCQkJaW50IGVycjsKKwkJZXJyID0gZ2VuZXJpY193cml0ZV9zeW5jKG91dCwgKnBwb3MsIHJldCk7CisJCWlmIChlcnIpCisJCQlyZXQgPSBlcnI7CisJCWVsc2UKKwkJCSpwcG9zICs9IHJldDsKIAotCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQkJZXJyID0gb2NmczJfcndfbG9jayhpbm9kZSwgMSk7Ci0JCQlpZiAoZXJyIDwgMCkgewotCQkJCW1sb2dfZXJybm8oZXJyKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZXJyID0gZ2VuZXJpY19vc3luY19pbm9kZShpbm9kZSwgbWFwcGluZywKLQkJCQkJCSAgT1NZTkNfTUVUQURBVEF8T1NZTkNfREFUQSk7Ci0JCQkJb2NmczJfcndfdW5sb2NrKGlub2RlLCAxKTsKLQkJCX0KLQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCi0JCQlpZiAoZXJyKQotCQkJCXJldCA9IGVycjsKLQkJfQogCQliYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkX25yKG1hcHBpbmcsIG5yX3BhZ2VzKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCBkZDk4ZTgwLi4zMTE5MWJmIDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC0xOTksNyArMTk5LDcgQEAKIGludCBkb190cnVuY2F0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCB0aW1lX2F0dHJzLAogCXN0cnVjdCBmaWxlICpmaWxwKQogewotCWludCBlcnI7CisJaW50IHJldDsKIAlzdHJ1Y3QgaWF0dHIgbmV3YXR0cnM7CiAKIAkvKiBOb3QgcHJldHR5OiAiaW5vZGUtPmlfc2l6ZSIgc2hvdWxkbid0IHJlYWxseSBiZSBzaWduZWQuIEJ1dCBpdCBpcy4gKi8KQEAgLTIxNCwxMiArMjE0LDE0IEBACiAJfQogCiAJLyogUmVtb3ZlIHN1aWQvc2dpZCBvbiB0cnVuY2F0ZSB0b28gKi8KLQluZXdhdHRycy5pYV92YWxpZCB8PSBzaG91bGRfcmVtb3ZlX3N1aWQoZGVudHJ5KTsKKwlyZXQgPSBzaG91bGRfcmVtb3ZlX3N1aWQoZGVudHJ5KTsKKwlpZiAocmV0KQorCQluZXdhdHRycy5pYV92YWxpZCB8PSByZXQgfCBBVFRSX0ZPUkNFOwogCiAJbXV0ZXhfbG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKLQllcnIgPSBub3RpZnlfY2hhbmdlKGRlbnRyeSwgJm5ld2F0dHJzKTsKKwlyZXQgPSBub3RpZnlfY2hhbmdlKGRlbnRyeSwgJm5ld2F0dHJzKTsKIAltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgbG9uZyBkb19zeXNfdHJ1bmNhdGUoY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lLCBsb2ZmX3QgbGVuZ3RoKQpAQCAtOTU3LDYgKzk1OSw4IEBACiAJaW50IGVycm9yOwogCXN0cnVjdCBmaWxlICpmOwogCisJdmFsaWRhdGVfY3JlZHMoY3JlZCk7CisKIAkvKgogCSAqIFdlIG11c3QgYWx3YXlzIHBhc3MgaW4gYSB2YWxpZCBtb3VudCBwb2ludGVyLiAgIEhpc3RvcmljYWxseQogCSAqIGNhbGxlcnMgZ290IGF3YXkgd2l0aCBub3QgcGFzc2luZyBpdCwgYnV0IHdlIG11c3QgZW5mb3JjZSB0aGlzIGF0CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKaW5kZXggZWE0ZTZjYi4uNjE5YmE5OSAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9jaGVjay5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwpAQCAtMjQ4LDExICsyNDgsMTkgQEAKIAkJcGFydF9zdGF0X3JlYWQocCwgbWVyZ2VzW1dSSVRFXSksCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGFydF9zdGF0X3JlYWQocCwgc2VjdG9yc1tXUklURV0pLAogCQlqaWZmaWVzX3RvX21zZWNzKHBhcnRfc3RhdF9yZWFkKHAsIHRpY2tzW1dSSVRFXSkpLAotCQlwLT5pbl9mbGlnaHQsCisJCXBhcnRfaW5fZmxpZ2h0KHApLAogCQlqaWZmaWVzX3RvX21zZWNzKHBhcnRfc3RhdF9yZWFkKHAsIGlvX3RpY2tzKSksCiAJCWppZmZpZXNfdG9fbXNlY3MocGFydF9zdGF0X3JlYWQocCwgdGltZV9pbl9xdWV1ZSkpKTsKIH0KIAorc3NpemVfdCBwYXJ0X2luZmxpZ2h0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaGRfc3RydWN0ICpwID0gZGV2X3RvX3BhcnQoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiU4dSAlOHVcbiIsIHAtPmluX2ZsaWdodFswXSwgcC0+aW5fZmxpZ2h0WzFdKTsKK30KKwogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogc3NpemVfdCBwYXJ0X2ZhaWxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtMjgxLDYgKzI4OSw3IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoc2l6ZSwgU19JUlVHTywgcGFydF9zaXplX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGFsaWdubWVudF9vZmZzZXQsIFNfSVJVR08sIHBhcnRfYWxpZ25tZW50X29mZnNldF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihzdGF0LCBTX0lSVUdPLCBwYXJ0X3N0YXRfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaW5mbGlnaHQsIFNfSVJVR08sIHBhcnRfaW5mbGlnaHRfc2hvdywgTlVMTCk7CiAjaWZkZWYgQ09ORklHX0ZBSUxfTUFLRV9SRVFVRVNUCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfZmFpbCA9CiAJX19BVFRSKG1ha2UtaXQtZmFpbCwgU19JUlVHT3xTX0lXVVNSLCBwYXJ0X2ZhaWxfc2hvdywgcGFydF9mYWlsX3N0b3JlKTsKQEAgLTI5Miw2ICszMDEsNyBAQAogCSZkZXZfYXR0cl9zaXplLmF0dHIsCiAJJmRldl9hdHRyX2FsaWdubWVudF9vZmZzZXQuYXR0ciwKIAkmZGV2X2F0dHJfc3RhdC5hdHRyLAorCSZkZXZfYXR0cl9pbmZsaWdodC5hdHRyLAogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogCSZkZXZfYXR0cl9mYWlsLmF0dHIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2lub2RlLmMgYi9mcy9yYW1mcy9pbm9kZS5jCmluZGV4IDBmZjc1NjYuLmE3ZjAxMTAgMTAwNjQ0Ci0tLSBhL2ZzL3JhbWZzL2lub2RlLmMKKysrIGIvZnMvcmFtZnMvaW5vZGUuYwpAQCAtNDYsNiArNDYsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHJhbWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCiBzdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gcmFtZnNfYmFja2luZ19kZXZfaW5mbyA9IHsKKwkubmFtZQkJPSAicmFtZnMiLAogCS5yYV9wYWdlcwk9IDAsCS8qIE5vIHJlYWRhaGVhZCAqLwogCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX05PX0FDQ1RfQU5EX1dSSVRFQkFDSyB8CiAJCQkgIEJESV9DQVBfTUFQX0RJUkVDVCB8IEJESV9DQVBfTUFQX0NPUFkgfApkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCA3Mzc2NmQyLi43Mzk0ZTllIDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYworKysgYi9mcy9zcGxpY2UuYwpAQCAtNTAyLDggKzUwMiwxMCBAQAogCQlsZW4gPSBsZWZ0OwogCiAJcmV0ID0gX19nZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoaW4sIHBwb3MsIHBpcGUsIGxlbiwgZmxhZ3MpOwotCWlmIChyZXQgPiAwKQorCWlmIChyZXQgPiAwKSB7CiAJCSpwcG9zICs9IHJldDsKKwkJZmlsZV9hY2Nlc3NlZChpbik7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk2Myw4ICs5NjUsMTAgQEAKIAogCQltdXRleF9sb2NrX25lc3RlZCgmaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfQ0hJTEQpOwogCQlyZXQgPSBmaWxlX3JlbW92ZV9zdWlkKG91dCk7Ci0JCWlmICghcmV0KQorCQlpZiAoIXJldCkgeworCQkJZmlsZV91cGRhdGVfdGltZShvdXQpOwogCQkJcmV0ID0gc3BsaWNlX2Zyb21fcGlwZV9mZWVkKHBpcGUsICZzZCwgcGlwZV90b19maWxlKTsKKwkJfQogCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAl9IHdoaWxlIChyZXQgPiAwKTsKIAlzcGxpY2VfZnJvbV9waXBlX2VuZChwaXBlLCAmc2QpOwpAQCAtOTc2LDI1ICs5ODAsMTUgQEAKIAogCWlmIChyZXQgPiAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CisJCWludCBlcnI7CiAKLQkJKnBwb3MgKz0gcmV0OwogCQlucl9wYWdlcyA9IChyZXQgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCi0JCS8qCi0JCSAqIElmIGZpbGUgb3IgaW5vZGUgaXMgU1lOQyBhbmQgd2UgYWN0dWFsbHkgd3JvdGUgc29tZSBkYXRhLAotCQkgKiBzeW5jIGl0LgotCQkgKi8KLQkJaWYgKHVubGlrZWx5KChvdXQtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkgewotCQkJaW50IGVycjsKLQotCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQkJZXJyID0gZ2VuZXJpY19vc3luY19pbm9kZShpbm9kZSwgbWFwcGluZywKLQkJCQkJCSAgT1NZTkNfTUVUQURBVEF8T1NZTkNfREFUQSk7Ci0JCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQotCQkJaWYgKGVycikKLQkJCQlyZXQgPSBlcnI7Ci0JCX0KKwkJZXJyID0gZ2VuZXJpY193cml0ZV9zeW5jKG91dCwgKnBwb3MsIHJldCk7CisJCWlmIChlcnIpCisJCQlyZXQgPSBlcnI7CisJCWVsc2UKKwkJCSpwcG9zICs9IHJldDsKIAkJYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZF9ucihtYXBwaW5nLCBucl9wYWdlcyk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAyNzYxZDNlLi5iMDNmZWE4IDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTYyLDkgKzYyLDYgQEAKIAkJCXMgPSBOVUxMOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJSU5JVF9MSVNUX0hFQUQoJnMtPnNfZGlydHkpOwotCQlJTklUX0xJU1RfSEVBRCgmcy0+c19pbyk7Ci0JCUlOSVRfTElTVF9IRUFEKCZzLT5zX21vcmVfaW8pOwogCQlJTklUX0xJU1RfSEVBRCgmcy0+c19maWxlcyk7CiAJCUlOSVRfTElTVF9IRUFEKCZzLT5zX2luc3RhbmNlcyk7CiAJCUlOSVRfSExJU1RfSEVBRCgmcy0+c19hbm9uKTsKQEAgLTE3MSw3ICsxNjgsNyBAQAogICoJRHJvcHMgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlLCBmcmVlcyBzdXBlcmJsb2NrIGlmIHRoZXJlJ3Mgbm8KICAqCXJlZmVyZW5jZXMgbGVmdC4KICAqLwotc3RhdGljIHZvaWQgcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit2b2lkIHB1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXNwaW5fbG9jaygmc2JfbG9jayk7CiAJX19wdXRfc3VwZXIoc2IpOwpAQCAtNzEwLDYgKzcwNywxMiBAQAogewogCXMtPnNfYmRldiA9IGRhdGE7CiAJcy0+c19kZXYgPSBzLT5zX2JkZXYtPmJkX2RldjsKKworCS8qCisJICogV2Ugc2V0IHRoZSBiZGkgaGVyZSB0byB0aGUgcXVldWUgYmFja2luZywgZmlsZSBzeXN0ZW1zIGNhbgorCSAqIG92ZXJ3cml0ZSB0aGlzIGluIC0+ZmlsbF9zdXBlcigpCisJICovCisJcy0+c19iZGkgPSAmYmRldl9nZXRfcXVldWUocy0+c19iZGV2KS0+YmFja2luZ19kZXZfaW5mbzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvc3luYy5jIGIvZnMvc3luYy5jCmluZGV4IDM0MjJiYTYuLmMwODQ2N2EgMTAwNjQ0Ci0tLSBhL2ZzL3N5bmMuYworKysgYi9mcy9zeW5jLmMKQEAgLTE5LDIwICsxOSwyOSBAQAogCQkJU1lOQ19GSUxFX1JBTkdFX1dBSVRfQUZURVIpCiAKIC8qCi0gKiBEbyB0aGUgZmlsZXN5c3RlbSBzeW5jaW5nIHdvcmsuIEZvciBzaW1wbGUgZmlsZXN5c3RlbXMgc3luY19pbm9kZXNfc2Ioc2IsIDApCi0gKiBqdXN0IGRpcnRpZXMgYnVmZmVycyB3aXRoIGlub2RlcyBzbyB3ZSBoYXZlIHRvIHN1Ym1pdCBJTyBmb3IgdGhlc2UgYnVmZmVycwotICogdmlhIF9fc3luY19ibG9ja2RldigpLiBUaGlzIGFsc28gc3BlZWRzIHVwIHRoZSB3YWl0ID09IDEgY2FzZSBzaW5jZSBpbiB0aGF0Ci0gKiBjYXNlIHdyaXRlX2lub2RlKCkgZnVuY3Rpb25zIGRvIHN5bmNfZGlydHlfYnVmZmVyKCkgYW5kIHRodXMgZWZmZWN0aXZlbHkKLSAqIHdyaXRlIG9uZSBibG9jayBhdCBhIHRpbWUuCisgKiBEbyB0aGUgZmlsZXN5c3RlbSBzeW5jaW5nIHdvcmsuIEZvciBzaW1wbGUgZmlsZXN5c3RlbXMKKyAqIHdyaXRlYmFja19pbm9kZXNfc2Ioc2IpIGp1c3QgZGlydGllcyBidWZmZXJzIHdpdGggaW5vZGVzIHNvIHdlIGhhdmUgdG8KKyAqIHN1Ym1pdCBJTyBmb3IgdGhlc2UgYnVmZmVycyB2aWEgX19zeW5jX2Jsb2NrZGV2KCkuIFRoaXMgYWxzbyBzcGVlZHMgdXAgdGhlCisgKiB3YWl0ID09IDEgY2FzZSBzaW5jZSBpbiB0aGF0IGNhc2Ugd3JpdGVfaW5vZGUoKSBmdW5jdGlvbnMgZG8KKyAqIHN5bmNfZGlydHlfYnVmZmVyKCkgYW5kIHRodXMgZWZmZWN0aXZlbHkgd3JpdGUgb25lIGJsb2NrIGF0IGEgdGltZS4KICAqLwogc3RhdGljIGludCBfX3N5bmNfZmlsZXN5c3RlbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCkKIHsKKwkvKgorCSAqIFRoaXMgc2hvdWxkIGJlIHNhZmUsIGFzIHdlIHJlcXVpcmUgYmRpIGJhY2tpbmcgdG8gYWN0dWFsbHkKKwkgKiB3cml0ZSBvdXQgZGF0YSBpbiB0aGUgZmlyc3QgcGxhY2UKKwkgKi8KKwlpZiAoIXNiLT5zX2JkaSkKKwkJcmV0dXJuIDA7CisKIAkvKiBBdm9pZCBkb2luZyB0d2ljZSBzeW5jaW5nIGFuZCBjYWNoZSBwcnVuaW5nIGZvciBxdW90YSBzeW5jICovCi0JaWYgKCF3YWl0KQorCWlmICghd2FpdCkgewogCQl3cml0ZW91dF9xdW90YV9zYihzYiwgLTEpOwotCWVsc2UKKwkJd3JpdGViYWNrX2lub2Rlc19zYihzYik7CisJfSBlbHNlIHsKIAkJc3luY19xdW90YV9zYihzYiwgLTEpOwotCXN5bmNfaW5vZGVzX3NiKHNiLCB3YWl0KTsKKwkJc3luY19pbm9kZXNfc2Ioc2IpOworCX0KIAlpZiAoc2ItPnNfb3AtPnN5bmNfZnMpCiAJCXNiLT5zX29wLT5zeW5jX2ZzKHNiLCB3YWl0KTsKIAlyZXR1cm4gX19zeW5jX2Jsb2NrZGV2KHNiLT5zX2JkZXYsIHdhaXQpOwpAQCAtOTksNyArMTA4LDcgQEAKIAkJc3Bpbl91bmxvY2soJnNiX2xvY2spOwogCiAJCWRvd25fcmVhZCgmc2ItPnNfdW1vdW50KTsKLQkJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpICYmIHNiLT5zX3Jvb3QpCisJCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSAmJiBzYi0+c19yb290ICYmIHNiLT5zX2JkaSkKIAkJCV9fc3luY19maWxlc3lzdGVtKHNiLCB3YWl0KTsKIAkJdXBfcmVhZCgmc2ItPnNfdW1vdW50KTsKIApAQCAtMTE4LDcgKzEyNyw3IEBACiAgKi8KIFNZU0NBTExfREVGSU5FMChzeW5jKQogewotCXdha2V1cF9wZGZsdXNoKDApOworCXdha2V1cF9mbHVzaGVyX3RocmVhZHMoMCk7CiAJc3luY19maWxlc3lzdGVtcygwKTsKIAlzeW5jX2ZpbGVzeXN0ZW1zKDEpOwogCWlmICh1bmxpa2VseShsYXB0b3BfbW9kZSkpCkBAIC0xNzYsMTkgKzE4NSwyMyBAQAogfQogCiAvKioKLSAqIHZmc19mc3luYyAtIHBlcmZvcm0gYSBmc3luYyBvciBmZGF0YXN5bmMgb24gYSBmaWxlCisgKiB2ZnNfZnN5bmNfcmFuZ2UgLSBoZWxwZXIgdG8gc3luYyBhIHJhbmdlIG9mIGRhdGEgJiBtZXRhZGF0YSB0byBkaXNrCiAgKiBAZmlsZToJCWZpbGUgdG8gc3luYwogICogQGRlbnRyeToJCWRlbnRyeSBvZiBAZmlsZQotICogQGRhdGE6CQlvbmx5IHBlcmZvcm0gYSBmZGF0YXN5bmMgb3BlcmF0aW9uCisgKiBAc3RhcnQ6CQlvZmZzZXQgaW4gYnl0ZXMgb2YgdGhlIGJlZ2lubmluZyBvZiBkYXRhIHJhbmdlIHRvIHN5bmMKKyAqIEBlbmQ6CQlvZmZzZXQgaW4gYnl0ZXMgb2YgdGhlIGVuZCBvZiBkYXRhIHJhbmdlIChpbmNsdXNpdmUpCisgKiBAZGF0YXN5bmM6CQlwZXJmb3JtIG9ubHkgZGF0YXN5bmMKICAqCi0gKiBXcml0ZSBiYWNrIGRhdGEgYW5kIG1ldGFkYXRhIGZvciBAZmlsZSB0byBkaXNrLiAgSWYgQGRhdGFzeW5jIGlzCi0gKiBzZXQgb25seSBtZXRhZGF0YSBuZWVkZWQgdG8gYWNjZXNzIG1vZGlmaWVkIGZpbGUgZGF0YSBpcyB3cml0dGVuLgorICogV3JpdGUgYmFjayBkYXRhIGluIHJhbmdlIEBzdGFydC4uQGVuZCBhbmQgbWV0YWRhdGEgZm9yIEBmaWxlIHRvIGRpc2suICBJZgorICogQGRhdGFzeW5jIGlzIHNldCBvbmx5IG1ldGFkYXRhIG5lZWRlZCB0byBhY2Nlc3MgbW9kaWZpZWQgZmlsZSBkYXRhIGlzCisgKiB3cml0dGVuLgogICoKICAqIEluIGNhc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBuZnNkIEBmaWxlIG1heSBiZSAlTlVMTCBhbmQKICAqIG9ubHkgQGRlbnRyeSBpcyBzZXQuICBUaGlzIGNhbiBvbmx5IGhhcHBlbiB3aGVuIHRoZSBmaWxlc3lzdGVtCiAgKiBpbXBsZW1lbnRzIHRoZSBleHBvcnRfb3BlcmF0aW9ucyBBUEkuCiAgKi8KLWludCB2ZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKQoraW50IHZmc19mc3luY19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBsb2ZmX3Qgc3RhcnQsCisJCSAgICBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpCiB7CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwpAQCAtMjEyLDcgKzIyNSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IGZpbGVtYXBfZmRhdGF3cml0ZShtYXBwaW5nKTsKKwlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0LCBlbmQpOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHdyaXRlcnMsIHdoaWNoIGNvdWxkIGNhdXNlCkBAIC0yMjMsMTIgKzIzNiwyOSBAQAogCWlmICghcmV0KQogCQlyZXQgPSBlcnI7CiAJbXV0ZXhfdW5sb2NrKCZtYXBwaW5nLT5ob3N0LT5pX211dGV4KTsKLQllcnIgPSBmaWxlbWFwX2ZkYXRhd2FpdChtYXBwaW5nKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gZXJyOworCiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0wodmZzX2ZzeW5jX3JhbmdlKTsKKworLyoqCisgKiB2ZnNfZnN5bmMgLSBwZXJmb3JtIGEgZnN5bmMgb3IgZmRhdGFzeW5jIG9uIGEgZmlsZQorICogQGZpbGU6CQlmaWxlIHRvIHN5bmMKKyAqIEBkZW50cnk6CQlkZW50cnkgb2YgQGZpbGUKKyAqIEBkYXRhc3luYzoJCW9ubHkgcGVyZm9ybSBhIGZkYXRhc3luYyBvcGVyYXRpb24KKyAqCisgKiBXcml0ZSBiYWNrIGRhdGEgYW5kIG1ldGFkYXRhIGZvciBAZmlsZSB0byBkaXNrLiAgSWYgQGRhdGFzeW5jIGlzCisgKiBzZXQgb25seSBtZXRhZGF0YSBuZWVkZWQgdG8gYWNjZXNzIG1vZGlmaWVkIGZpbGUgZGF0YSBpcyB3cml0dGVuLgorICoKKyAqIEluIGNhc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBuZnNkIEBmaWxlIG1heSBiZSAlTlVMTCBhbmQKKyAqIG9ubHkgQGRlbnRyeSBpcyBzZXQuICBUaGlzIGNhbiBvbmx5IGhhcHBlbiB3aGVuIHRoZSBmaWxlc3lzdGVtCisgKiBpbXBsZW1lbnRzIHRoZSBleHBvcnRfb3BlcmF0aW9ucyBBUEkuCisgKi8KK2ludCB2ZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKQoreworCXJldHVybiB2ZnNfZnN5bmNfcmFuZ2UoZmlsZSwgZGVudHJ5LCAwLCBMTE9OR19NQVgsIGRhdGFzeW5jKTsKK30KIEVYUE9SVF9TWU1CT0wodmZzX2ZzeW5jKTsKIAogc3RhdGljIGludCBkb19mc3luYyh1bnNpZ25lZCBpbnQgZmQsIGludCBkYXRhc3luYykKQEAgLTI1NCw2ICsyODQsMjMgQEAKIAlyZXR1cm4gZG9fZnN5bmMoZmQsIDEpOwogfQogCisvKioKKyAqIGdlbmVyaWNfd3JpdGVfc3luYyAtIHBlcmZvcm0gc3luY2luZyBhZnRlciBhIHdyaXRlIGlmIGZpbGUgLyBpbm9kZSBpcyBzeW5jCisgKiBAZmlsZToJZmlsZSB0byB3aGljaCB0aGUgd3JpdGUgaGFwcGVuZWQKKyAqIEBwb3M6CW9mZnNldCB3aGVyZSB0aGUgd3JpdGUgc3RhcnRlZAorICogQGNvdW50OglsZW5ndGggb2YgdGhlIHdyaXRlCisgKgorICogVGhpcyBpcyBqdXN0IGEgc2ltcGxlIHdyYXBwZXIgYWJvdXQgb3VyIGdlbmVyYWwgc3luY2luZyBmdW5jdGlvbi4KKyAqLworaW50IGdlbmVyaWNfd3JpdGVfc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHBvcywgbG9mZl90IGNvdW50KQoreworCWlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpICYmICFJU19TWU5DKGZpbGUtPmZfbWFwcGluZy0+aG9zdCkpCisJCXJldHVybiAwOworCXJldHVybiB2ZnNfZnN5bmNfcmFuZ2UoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSwgcG9zLAorCQkJICAgICAgIHBvcyArIGNvdW50IC0gMSwgMSk7Cit9CitFWFBPUlRfU1lNQk9MKGdlbmVyaWNfd3JpdGVfc3luYyk7CisKIC8qCiAgKiBzeXNfc3luY19maWxlX3JhbmdlKCkgcGVybWl0cyBmaW5lbHkgY29udHJvbGxlZCBzeW5jaW5nIG92ZXIgYSBzZWdtZW50IG9mCiAgKiBhIGZpbGUgaW4gdGhlIHJhbmdlIG9mZnNldCAuLiAob2Zmc2V0K25ieXRlcy0xKSBpbmNsdXNpdmUuICBJZiBuYnl0ZXMgaXMKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Rpci5jIGIvZnMvc3lzZnMvZGlyLmMKaW5kZXggMTRmMmQ3MS4uMDA1MGZjNCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZGlyLmMKKysrIGIvZnMvc3lzZnMvZGlyLmMKQEAgLTc2MCw2ICs3NjAsNyBAQAogY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc3lzZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLmxvb2t1cAkJPSBzeXNmc19sb29rdXAsCiAJLnNldGF0dHIJPSBzeXNmc19zZXRhdHRyLAorCS5zZXR4YXR0cgk9IHN5c2ZzX3NldHhhdHRyLAogfTsKIAogc3RhdGljIHZvaWQgcmVtb3ZlX2RpcihzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2lub2RlLmMgYi9mcy9zeXNmcy9pbm9kZS5jCmluZGV4IDU1NWYwZmYuLmUyOGNlY2YgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2lub2RlLmMKKysrIGIvZnMvc3lzZnMvaW5vZGUuYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgInN5c2ZzLmgiCiAKIGV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzeXNmc19zYjsKQEAgLTI5LDEyICszMSwxNCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIHN5c2ZzX2JhY2tpbmdfZGV2X2luZm8gPSB7CisJLm5hbWUJCT0gInN5c2ZzIiwKIAkucmFfcGFnZXMJPSAwLAkvKiBObyByZWFkYWhlYWQgKi8KIAkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0ssCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc3lzZnNfaW5vZGVfb3BlcmF0aW9ucyA9ewogCS5zZXRhdHRyCT0gc3lzZnNfc2V0YXR0ciwKKwkuc2V0eGF0dHIJPSBzeXNmc19zZXR4YXR0ciwKIH07CiAKIGludCBfX2luaXQgc3lzZnNfaW5vZGVfaW5pdCh2b2lkKQpAQCAtNDIsMTggKzQ2LDM3IEBACiAJcmV0dXJuIGJkaV9pbml0KCZzeXNmc19iYWNraW5nX2Rldl9pbmZvKTsKIH0KIAorc3RydWN0IHN5c2ZzX2lub2RlX2F0dHJzICpzeXNmc19pbml0X2lub2RlX2F0dHJzKHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQoreworCXN0cnVjdCBzeXNmc19pbm9kZV9hdHRycyAqYXR0cnM7CisJc3RydWN0IGlhdHRyICppYXR0cnM7CisKKwlhdHRycyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzeXNmc19pbm9kZV9hdHRycyksIEdGUF9LRVJORUwpOworCWlmICghYXR0cnMpCisJCXJldHVybiBOVUxMOworCWlhdHRycyA9ICZhdHRycy0+aWFfaWF0dHI7CisKKwkvKiBhc3NpZ24gZGVmYXVsdCBhdHRyaWJ1dGVzICovCisJaWF0dHJzLT5pYV9tb2RlID0gc2QtPnNfbW9kZTsKKwlpYXR0cnMtPmlhX3VpZCA9IDA7CisJaWF0dHJzLT5pYV9naWQgPSAwOworCWlhdHRycy0+aWFfYXRpbWUgPSBpYXR0cnMtPmlhX210aW1lID0gaWF0dHJzLT5pYV9jdGltZSA9IENVUlJFTlRfVElNRTsKKworCXJldHVybiBhdHRyczsKK30KIGludCBzeXNmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCBpYXR0ciAqIGlhdHRyKQogewogCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBzeXNmc19kaXJlbnQgKiBzZCA9IGRlbnRyeS0+ZF9mc2RhdGE7Ci0Jc3RydWN0IGlhdHRyICogc2RfaWF0dHI7CisJc3RydWN0IHN5c2ZzX2lub2RlX2F0dHJzICpzZF9hdHRyczsKKwlzdHJ1Y3QgaWF0dHIgKmlhdHRyczsKIAl1bnNpZ25lZCBpbnQgaWFfdmFsaWQgPSBpYXR0ci0+aWFfdmFsaWQ7CiAJaW50IGVycm9yOwogCiAJaWYgKCFzZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzZF9pYXR0ciA9IHNkLT5zX2lhdHRyOworCXNkX2F0dHJzID0gc2QtPnNfaWF0dHI7CiAKIAllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgaWF0dHIpOwogCWlmIChlcnJvcikKQEAgLTY1LDQyICs4OCw3NyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JaWYgKCFzZF9pYXR0cikgeworCWlmICghc2RfYXR0cnMpIHsKIAkJLyogc2V0dGluZyBhdHRyaWJ1dGVzIGZvciB0aGUgZmlyc3QgdGltZSwgYWxsb2NhdGUgbm93ICovCi0JCXNkX2lhdHRyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlhdHRyKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc2RfaWF0dHIpCisJCXNkX2F0dHJzID0gc3lzZnNfaW5pdF9pbm9kZV9hdHRycyhzZCk7CisJCWlmICghc2RfYXR0cnMpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJLyogYXNzaWduIGRlZmF1bHQgYXR0cmlidXRlcyAqLwotCQlzZF9pYXR0ci0+aWFfbW9kZSA9IHNkLT5zX21vZGU7Ci0JCXNkX2lhdHRyLT5pYV91aWQgPSAwOwotCQlzZF9pYXR0ci0+aWFfZ2lkID0gMDsKLQkJc2RfaWF0dHItPmlhX2F0aW1lID0gc2RfaWF0dHItPmlhX210aW1lID0gc2RfaWF0dHItPmlhX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCQlzZC0+c19pYXR0ciA9IHNkX2lhdHRyOworCQlzZC0+c19pYXR0ciA9IHNkX2F0dHJzOworCX0gZWxzZSB7CisJCS8qIGF0dHJpYnV0ZXMgd2VyZSBjaGFuZ2VkIGF0IGxlYXN0IG9uY2UgaW4gcGFzdCAqLworCQlpYXR0cnMgPSAmc2RfYXR0cnMtPmlhX2lhdHRyOworCisJCWlmIChpYV92YWxpZCAmIEFUVFJfVUlEKQorCQkJaWF0dHJzLT5pYV91aWQgPSBpYXR0ci0+aWFfdWlkOworCQlpZiAoaWFfdmFsaWQgJiBBVFRSX0dJRCkKKwkJCWlhdHRycy0+aWFfZ2lkID0gaWF0dHItPmlhX2dpZDsKKwkJaWYgKGlhX3ZhbGlkICYgQVRUUl9BVElNRSkKKwkJCWlhdHRycy0+aWFfYXRpbWUgPSB0aW1lc3BlY190cnVuYyhpYXR0ci0+aWFfYXRpbWUsCisJCQkJCWlub2RlLT5pX3NiLT5zX3RpbWVfZ3Jhbik7CisJCWlmIChpYV92YWxpZCAmIEFUVFJfTVRJTUUpCisJCQlpYXR0cnMtPmlhX210aW1lID0gdGltZXNwZWNfdHJ1bmMoaWF0dHItPmlhX210aW1lLAorCQkJCQlpbm9kZS0+aV9zYi0+c190aW1lX2dyYW4pOworCQlpZiAoaWFfdmFsaWQgJiBBVFRSX0NUSU1FKQorCQkJaWF0dHJzLT5pYV9jdGltZSA9IHRpbWVzcGVjX3RydW5jKGlhdHRyLT5pYV9jdGltZSwKKwkJCQkJaW5vZGUtPmlfc2ItPnNfdGltZV9ncmFuKTsKKwkJaWYgKGlhX3ZhbGlkICYgQVRUUl9NT0RFKSB7CisJCQl1bW9kZV90IG1vZGUgPSBpYXR0ci0+aWFfbW9kZTsKKworCQkJaWYgKCFpbl9ncm91cF9wKGlub2RlLT5pX2dpZCkgJiYgIWNhcGFibGUoQ0FQX0ZTRVRJRCkpCisJCQkJbW9kZSAmPSB+U19JU0dJRDsKKwkJCWlhdHRycy0+aWFfbW9kZSA9IHNkLT5zX21vZGUgPSBtb2RlOworCQl9CiAJfQorCXJldHVybiBlcnJvcjsKK30KIAotCS8qIGF0dHJpYnV0ZXMgd2VyZSBjaGFuZ2VkIGF0bGVhc3Qgb25jZSBpbiBwYXN0ICovCitpbnQgc3lzZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKKwkJc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCA9IGRlbnRyeS0+ZF9mc2RhdGE7CisJc3RydWN0IHN5c2ZzX2lub2RlX2F0dHJzICppYXR0cnM7CisJdm9pZCAqc2VjZGF0YTsKKwlpbnQgZXJyb3I7CisJdTMyIHNlY2RhdGFfbGVuID0gMDsKIAotCWlmIChpYV92YWxpZCAmIEFUVFJfVUlEKQotCQlzZF9pYXR0ci0+aWFfdWlkID0gaWF0dHItPmlhX3VpZDsKLQlpZiAoaWFfdmFsaWQgJiBBVFRSX0dJRCkKLQkJc2RfaWF0dHItPmlhX2dpZCA9IGlhdHRyLT5pYV9naWQ7Ci0JaWYgKGlhX3ZhbGlkICYgQVRUUl9BVElNRSkKLQkJc2RfaWF0dHItPmlhX2F0aW1lID0gdGltZXNwZWNfdHJ1bmMoaWF0dHItPmlhX2F0aW1lLAotCQkJCQkJaW5vZGUtPmlfc2ItPnNfdGltZV9ncmFuKTsKLQlpZiAoaWFfdmFsaWQgJiBBVFRSX01USU1FKQotCQlzZF9pYXR0ci0+aWFfbXRpbWUgPSB0aW1lc3BlY190cnVuYyhpYXR0ci0+aWFfbXRpbWUsCi0JCQkJCQlpbm9kZS0+aV9zYi0+c190aW1lX2dyYW4pOwotCWlmIChpYV92YWxpZCAmIEFUVFJfQ1RJTUUpCi0JCXNkX2lhdHRyLT5pYV9jdGltZSA9IHRpbWVzcGVjX3RydW5jKGlhdHRyLT5pYV9jdGltZSwKLQkJCQkJCWlub2RlLT5pX3NiLT5zX3RpbWVfZ3Jhbik7Ci0JaWYgKGlhX3ZhbGlkICYgQVRUUl9NT0RFKSB7Ci0JCXVtb2RlX3QgbW9kZSA9IGlhdHRyLT5pYV9tb2RlOworCWlmICghc2QpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghc2QtPnNfaWF0dHIpCisJCXNkLT5zX2lhdHRyID0gc3lzZnNfaW5pdF9pbm9kZV9hdHRycyhzZCk7CisJaWYgKCFzZC0+c19pYXR0cikKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQkJaWYgKCFpbl9ncm91cF9wKGlub2RlLT5pX2dpZCkgJiYgIWNhcGFibGUoQ0FQX0ZTRVRJRCkpCi0JCQltb2RlICY9IH5TX0lTR0lEOwotCQlzZF9pYXR0ci0+aWFfbW9kZSA9IHNkLT5zX21vZGUgPSBtb2RlOwotCX0KKwlpYXR0cnMgPSBzZC0+c19pYXR0cjsKIAorCWlmICghc3RybmNtcChuYW1lLCBYQVRUUl9TRUNVUklUWV9QUkVGSVgsIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4pKSB7CisJCWNvbnN0IGNoYXIgKnN1ZmZpeCA9IG5hbWUgKyBYQVRUUl9TRUNVUklUWV9QUkVGSVhfTEVOOworCQllcnJvciA9IHNlY3VyaXR5X2lub2RlX3NldHNlY3VyaXR5KGRlbnRyeS0+ZF9pbm9kZSwgc3VmZml4LAorCQkJCQkJdmFsdWUsIHNpemUsIGZsYWdzKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXQ7CisJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfZ2V0c2VjY3R4KGRlbnRyeS0+ZF9pbm9kZSwKKwkJCQkJCSZzZWNkYXRhLCAmc2VjZGF0YV9sZW4pOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dDsKKwkJaWYgKGlhdHRycy0+aWFfc2VjZGF0YSkKKwkJCXNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KGlhdHRycy0+aWFfc2VjZGF0YSwKKwkJCQkJCWlhdHRycy0+aWFfc2VjZGF0YV9sZW4pOworCQlpYXR0cnMtPmlhX3NlY2RhdGEgPSBzZWNkYXRhOworCQlpYXR0cnMtPmlhX3NlY2RhdGFfbGVuID0gc2VjZGF0YV9sZW47CisKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CitvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xNDYsNiArMjA0LDcgQEAKIHN0YXRpYyB2b2lkIHN5c2ZzX2luaXRfaW5vZGUoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyOworCXN0cnVjdCBzeXNmc19pbm9kZV9hdHRycyAqaWF0dHJzOwogCiAJaW5vZGUtPmlfcHJpdmF0ZSA9IHN5c2ZzX2dldChzZCk7CiAJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmc3lzZnNfYW9wczsKQEAgLTE1NCwxNiArMjEzLDIwIEBACiAJaW5vZGUtPmlfaW5vID0gc2QtPnNfaW5vOwogCWxvY2tkZXBfc2V0X2NsYXNzKCZpbm9kZS0+aV9tdXRleCwgJnN5c2ZzX2lub2RlX2ltdXRleF9rZXkpOwogCi0JaWYgKHNkLT5zX2lhdHRyKSB7CisJaWF0dHJzID0gc2QtPnNfaWF0dHI7CisJaWYgKGlhdHRycykgewogCQkvKiBzeXNmc19kaXJlbnQgaGFzIG5vbi1kZWZhdWx0IGF0dHJpYnV0ZXMKIAkJICogZ2V0IHRoZW0gZm9yIHRoZSBuZXcgaW5vZGUgZnJvbSBwZXJzaXN0ZW50IGNvcHkKIAkJICogaW4gc3lzZnNfZGlyZW50CiAJCSAqLwotCQlzZXRfaW5vZGVfYXR0cihpbm9kZSwgc2QtPnNfaWF0dHIpOworCQlzZXRfaW5vZGVfYXR0cihpbm9kZSwgJmlhdHRycy0+aWFfaWF0dHIpOworCQlpZiAoaWF0dHJzLT5pYV9zZWNkYXRhKQorCQkJc2VjdXJpdHlfaW5vZGVfbm90aWZ5c2VjY3R4KGlub2RlLAorCQkJCQkJaWF0dHJzLT5pYV9zZWNkYXRhLAorCQkJCQkJaWF0dHJzLT5pYV9zZWNkYXRhX2xlbik7CiAJfSBlbHNlCiAJCXNldF9kZWZhdWx0X2lub2RlX2F0dHIoaW5vZGUsIHNkLT5zX21vZGUpOwogCi0KIAkvKiBpbml0aWFsaXplIGlub2RlIGFjY29yZGluZyB0byB0eXBlICovCiAJc3dpdGNoIChzeXNmc190eXBlKHNkKSkgewogCWNhc2UgU1lTRlNfRElSOgpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvc3ltbGluay5jIGIvZnMvc3lzZnMvc3ltbGluay5jCmluZGV4IDFkODk3YWQuLmM1MDgxYWQgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL3N5bWxpbmsuYworKysgYi9mcy9zeXNmcy9zeW1saW5rLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAKICNpbmNsdWRlICJzeXNmcy5oIgogCkBAIC0yMDksNiArMjEwLDcgQEAKIH0KIAogY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc3lzZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0geworCS5zZXR4YXR0ciA9IHN5c2ZzX3NldHhhdHRyLAogCS5yZWFkbGluayA9IGdlbmVyaWNfcmVhZGxpbmssCiAJLmZvbGxvd19saW5rID0gc3lzZnNfZm9sbG93X2xpbmssCiAJLnB1dF9saW5rID0gc3lzZnNfcHV0X2xpbmssCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9zeXNmcy5oIGIvZnMvc3lzZnMvc3lzZnMuaAppbmRleCAzZmEwZDk4NC4uYWY0YzRlNyAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvc3lzZnMuaAorKysgYi9mcy9zeXNmcy9zeXNmcy5oCkBAIC04LDYgKzgsOCBAQAogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKwogc3RydWN0IHN5c2ZzX29wZW5fZGlyZW50OwogCiAvKiB0eXBlLXNwZWNpZmljIHN0cnVjdHVyZXMgZm9yIHN5c2ZzX2RpcmVudC0+c18qIHVuaW9uIG1lbWJlcnMgKi8KQEAgLTMxLDYgKzMzLDEyIEBACiAJc3RydWN0IGhsaXN0X2hlYWQJYnVmZmVyczsKIH07CiAKK3N0cnVjdCBzeXNmc19pbm9kZV9hdHRycyB7CisJc3RydWN0IGlhdHRyCWlhX2lhdHRyOworCXZvaWQJCSppYV9zZWNkYXRhOworCXUzMgkJaWFfc2VjZGF0YV9sZW47Cit9OworCiAvKgogICogc3lzZnNfZGlyZW50IC0gdGhlIGJ1aWxkaW5nIGJsb2NrIG9mIHN5c2ZzIGhpZXJhcmNoeS4gIEVhY2ggYW5kCiAgKiBldmVyeSBzeXNmcyBub2RlIGlzIHJlcHJlc2VudGVkIGJ5IHNpbmdsZSBzeXNmc19kaXJlbnQuCkBAIC01Niw3ICs2NCw3IEBACiAJdW5zaWduZWQgaW50CQlzX2ZsYWdzOwogCWlub190CQkJc19pbm87CiAJdW1vZGVfdAkJCXNfbW9kZTsKLQlzdHJ1Y3QgaWF0dHIJCSpzX2lhdHRyOworCXN0cnVjdCBzeXNmc19pbm9kZV9hdHRycyAqc19pYXR0cjsKIH07CiAKICNkZWZpbmUgU0RfREVBQ1RJVkFURURfQklBUwkJSU5UX01JTgpAQCAtMTQ4LDYgKzE1Niw4IEBACiBzdHJ1Y3QgaW5vZGUgKnN5c2ZzX2dldF9pbm9kZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7CiB2b2lkIHN5c2ZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBzeXNmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cik7CitpbnQgc3lzZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKKwkJc2l6ZV90IHNpemUsIGludCBmbGFncyk7CiBpbnQgc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKHN0cnVjdCBzeXNmc19kaXJlbnQgKmRpcl9zZCwgY29uc3QgY2hhciAqbmFtZSk7CiBpbnQgc3lzZnNfaW5vZGVfaW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvYnVkZ2V0LmMgYi9mcy91Ymlmcy9idWRnZXQuYwppbmRleCBlYWY2ZDg5Li5lZTFjZTY4IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9idWRnZXQuYworKysgYi9mcy91Ymlmcy9idWRnZXQuYwpAQCAtNTQsNDEgKzU0LDE1IEBACiAgKiBAbnJfdG9fd3JpdGU6IGhvdyBtYW55IGRpcnR5IHBhZ2VzIHRvIHdyaXRlLWJhY2sKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNocmlua3MgVUJJRlMgbGlhYmlsaXR5IGJ5IG1lYW5zIG9mIHdyaXRpbmcgYmFjayBzb21lIGFtb3VudAotICogb2YgZGlydHkgaW5vZGVzIGFuZCB0aGVpciBwYWdlcy4gUmV0dXJucyB0aGUgYW1vdW50IG9mIHBhZ2VzIHdoaWNoIHdlcmUKLSAqIHdyaXR0ZW4gYmFjay4gVGhlIHJldHVybmVkIHZhbHVlIGRvZXMgbm90IGluY2x1ZGUgZGlydHkgaW5vZGVzIHdoaWNoIHdlcmUKLSAqIHN5bmNocm9uaXplZC4KKyAqIG9mIGRpcnR5IGlub2RlcyBhbmQgdGhlaXIgcGFnZXMuCiAgKgogICogTm90ZSwgdGhpcyBmdW5jdGlvbiBzeW5jaHJvbml6ZXMgZXZlbiBWRlMgaW5vZGVzIHdoaWNoIGFyZSBsb2NrZWQKICAqIChAaV9tdXRleCkgYnkgdGhlIGNhbGxlciBvZiB0aGUgYnVkZ2V0aW5nIGZ1bmN0aW9uLCBiZWNhdXNlIHdyaXRlLWJhY2sgZG9lcwogICogbm90IHRvdWNoIEBpX211dGV4LgogICovCi1zdGF0aWMgaW50IHNocmlua19saWFiaWxpdHkoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBucl90b193cml0ZSkKK3N0YXRpYyB2b2lkIHNocmlua19saWFiaWxpdHkoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBucl90b193cml0ZSkKIHsKLQlpbnQgbnJfd3JpdHRlbjsKLQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewotCQkuc3luY19tb2RlICAgPSBXQl9TWU5DX05PTkUsCi0JCS5yYW5nZV9lbmQgICA9IExMT05HX01BWCwKLQkJLm5yX3RvX3dyaXRlID0gbnJfdG9fd3JpdGUsCi0JfTsKLQotCWdlbmVyaWNfc3luY19zYl9pbm9kZXMoYy0+dmZzX3NiLCAmd2JjKTsKLQlucl93cml0dGVuID0gbnJfdG9fd3JpdGUgLSB3YmMubnJfdG9fd3JpdGU7Ci0KLQlpZiAoIW5yX3dyaXR0ZW4pIHsKLQkJLyoKLQkJICogUmUtdHJ5IGFnYWluIGJ1dCB3YWl0IG9uIHBhZ2VzL2lub2RlcyB3aGljaCBhcmUgYmVpbmcKLQkJICogd3JpdHRlbi1iYWNrIGNvbmN1cnJlbnRseSAoZS5nLiwgYnkgcGRmbHVzaCkuCi0JCSAqLwotCQltZW1zZXQoJndiYywgMCwgc2l6ZW9mKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCkpOwotCQl3YmMuc3luY19tb2RlICAgPSBXQl9TWU5DX0FMTDsKLQkJd2JjLnJhbmdlX2VuZCAgID0gTExPTkdfTUFYOwotCQl3YmMubnJfdG9fd3JpdGUgPSBucl90b193cml0ZTsKLQkJZ2VuZXJpY19zeW5jX3NiX2lub2RlcyhjLT52ZnNfc2IsICZ3YmMpOwotCQlucl93cml0dGVuID0gbnJfdG9fd3JpdGUgLSB3YmMubnJfdG9fd3JpdGU7Ci0JfQotCi0JZGJnX2J1ZGcoIiVkIHBhZ2VzIHdlcmUgd3JpdHRlbiBiYWNrIiwgbnJfd3JpdHRlbik7Ci0JcmV0dXJuIG5yX3dyaXR0ZW47CisJd3JpdGViYWNrX2lub2Rlc19zYihjLT52ZnNfc2IpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3N1cGVyLmMgYi9mcy91Ymlmcy9zdXBlci5jCmluZGV4IDI2ZDJlMGQuLmM0YWYwNjkgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3N1cGVyLmMKKysrIGIvZnMvdWJpZnMvc3VwZXIuYwpAQCAtNDM4LDEyICs0MzgsNiBAQAogewogCWludCBpLCBlcnI7CiAJc3RydWN0IHViaWZzX2luZm8gKmMgPSBzYi0+c19mc19pbmZvOwotCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7Ci0JCS5zeW5jX21vZGUgICA9IFdCX1NZTkNfQUxMLAotCQkucmFuZ2Vfc3RhcnQgPSAwLAotCQkucmFuZ2VfZW5kICAgPSBMTE9OR19NQVgsCi0JCS5ucl90b193cml0ZSA9IExPTkdfTUFYLAotCX07CiAKIAkvKgogCSAqIFplcm8gQHdhaXQgaXMganVzdCBhbiBhZHZpc29yeSB0aGluZyB0byBoZWxwIHRoZSBmaWxlIHN5c3RlbSBzaG92ZQpAQCAtNDYyLDcgKzQ1Niw3IEBACiAJICogdGhlIHVzZXIgYmUgYWJsZSB0byBnZXQgbW9yZSBhY2N1cmF0ZSByZXN1bHRzIG9mICdzdGF0ZnMoKScgYWZ0ZXIKIAkgKiB0aGV5IHN5bmNocm9uaXplIHRoZSBmaWxlIHN5c3RlbS4KIAkgKi8KLQlnZW5lcmljX3N5bmNfc2JfaW5vZGVzKHNiLCAmd2JjKTsKKwlzeW5jX2lub2Rlc19zYihzYik7CiAKIAkvKgogCSAqIFN5bmNocm9uaXplIHdyaXRlIGJ1ZmZlcnMsIGJlY2F1c2UgJ3ViaWZzX3J1bl9jb21taXQoKScgZG9lcyBub3QKQEAgLTE5NzEsNiArMTk2NSw3IEBACiAJICoKIAkgKiBSZWFkLWFoZWFkIHdpbGwgYmUgZGlzYWJsZWQgYmVjYXVzZSBAYy0+YmRpLnJhX3BhZ2VzIGlzIDAuCiAJICovCisJYy0+YmRpLm5hbWUgPSAidWJpZnMiLAogCWMtPmJkaS5jYXBhYmlsaXRpZXMgPSBCRElfQ0FQX01BUF9DT1BZOwogCWMtPmJkaS51bnBsdWdfaW9fZm4gPSBkZWZhdWx0X3VucGx1Z19pb19mbjsKIAllcnIgID0gYmRpX2luaXQoJmMtPmJkaSk7CkBAIC0xOTg1LDYgKzE5ODAsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2JkaTsKIAorCXNiLT5zX2JkaSA9ICZjLT5iZGk7CiAJc2ItPnNfZnNfaW5mbyA9IGM7CiAJc2ItPnNfbWFnaWMgPSBVQklGU19TVVBFUl9NQUdJQzsKIAlzYi0+c19ibG9ja3NpemUgPSBVQklGU19CTE9DS19TSVpFOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2RpcmVjdG9yeS5jIGIvZnMvdWRmL2RpcmVjdG9yeS5jCmluZGV4IDFkMmM1NzAuLjJmZmRiNjcgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9kaXJlY3RvcnkuYworKysgYi9mcy91ZGYvZGlyZWN0b3J5LmMKQEAgLTE4LDU5ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KIAotI2lmIDAKLXN0YXRpYyB1aW50OF90ICp1ZGZfZmlsZWFkX3JlYWQoc3RydWN0IGlub2RlICpkaXIsIHVpbnQ4X3QgKnRtcGFkLAotCQkJCXVpbnQ4X3QgYWRfc2l6ZSwgc3RydWN0IGtlcm5lbF9sYl9hZGRyIGZlX2xvYywKLQkJCQlpbnQgKnBvcywgaW50ICpvZmZzZXQsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLAotCQkJCWludCAqZXJyb3IpCi17Ci0JaW50IGxvZmZzZXQgPSAqb2Zmc2V0OwotCWludCBibG9jazsKLQl1aW50OF90ICphZDsKLQlpbnQgcmVtYWluZGVyOwotCi0JKmVycm9yID0gMDsKLQotCWFkID0gKHVpbnQ4X3QgKikoKmJoKS0+Yl9kYXRhICsgKm9mZnNldDsKLQkqb2Zmc2V0ICs9IGFkX3NpemU7Ci0KLQlpZiAoIWFkKSB7Ci0JCWJyZWxzZSgqYmgpOwotCQkqZXJyb3IgPSAxOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoKm9mZnNldCA9PSBkaXItPmlfc2ItPnNfYmxvY2tzaXplKSB7Ci0JCWJyZWxzZSgqYmgpOwotCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgZmVfbG9jLCArKypwb3MpOwotCQlpZiAoIWJsb2NrKQotCQkJcmV0dXJuIE5VTEw7Ci0JCSpiaCA9IHVkZl90cmVhZChkaXItPmlfc2IsIGJsb2NrKTsKLQkJaWYgKCEqYmgpCi0JCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgaWYgKCpvZmZzZXQgPiBkaXItPmlfc2ItPnNfYmxvY2tzaXplKSB7Ci0JCWFkID0gdG1wYWQ7Ci0KLQkJcmVtYWluZGVyID0gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIGxvZmZzZXQ7Ci0JCW1lbWNweSgodWludDhfdCAqKWFkLCAoKmJoKS0+Yl9kYXRhICsgbG9mZnNldCwgcmVtYWluZGVyKTsKLQotCQlicmVsc2UoKmJoKTsKLQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGZlX2xvYywgKysqcG9zKTsKLQkJaWYgKCFibG9jaykKLQkJCXJldHVybiBOVUxMOwotCQkoKmJoKSA9IHVkZl90cmVhZChkaXItPmlfc2IsIGJsb2NrKTsKLQkJaWYgKCEqYmgpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQltZW1jcHkoKHVpbnQ4X3QgKilhZCArIHJlbWFpbmRlciwgKCpiaCktPmJfZGF0YSwKLQkJCWFkX3NpemUgLSByZW1haW5kZXIpOwotCQkqb2Zmc2V0ID0gYWRfc2l6ZSAtIHJlbWFpbmRlcjsKLQl9Ci0KLQlyZXR1cm4gYWQ7Ci19Ci0jZW5kaWYKLQogc3RydWN0IGZpbGVJZGVudERlc2MgKnVkZl9maWxlaWRlbnRfcmVhZChzdHJ1Y3QgaW5vZGUgKmRpciwgbG9mZl90ICpuZl9wb3MsCiAJCQkJCSBzdHJ1Y3QgdWRmX2ZpbGVpZGVudF9iaCAqZmliaCwKIAkJCQkJIHN0cnVjdCBmaWxlSWRlbnREZXNjICpjZmksCkBAIC0yNDgsMzkgKzE5NSw2IEBACiAJcmV0dXJuIGZpOwogfQogCi0jaWYgMAotc3RhdGljIHN0cnVjdCBleHRlbnRfYWQgKnVkZl9nZXRfZmlsZWV4dGVudCh2b2lkICpidWZmZXIsIGludCBidWZzaXplLCBpbnQgKm9mZnNldCkKLXsKLQlzdHJ1Y3QgZXh0ZW50X2FkICpleHQ7Ci0Jc3RydWN0IGZpbGVFbnRyeSAqZmU7Ci0JdWludDhfdCAqcHRyOwotCi0JaWYgKCghYnVmZmVyKSB8fCAoIW9mZnNldCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1ZGY6IHVkZl9nZXRfZmlsZWV4dGVudCgpIGludmFsaWRwYXJtc1xuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWZlID0gKHN0cnVjdCBmaWxlRW50cnkgKilidWZmZXI7Ci0KLQlpZiAoZmUtPmRlc2NUYWcudGFnSWRlbnQgIT0gY3B1X3RvX2xlMTYoVEFHX0lERU5UX0ZFKSkgewotCQl1ZGZfZGVidWcoIjB4JXggIT0gVEFHX0lERU5UX0ZFXG4iLAotCQkJICBsZTE2X3RvX2NwdShmZS0+ZGVzY1RhZy50YWdJZGVudCkpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlwdHIgPSAodWludDhfdCAqKShmZS0+ZXh0ZW5kZWRBdHRyKSArCi0JCWxlMzJfdG9fY3B1KGZlLT5sZW5ndGhFeHRlbmRlZEF0dHIpOwotCi0JaWYgKCgqb2Zmc2V0ID4gMCkgJiYgKCpvZmZzZXQgPCBsZTMyX3RvX2NwdShmZS0+bGVuZ3RoQWxsb2NEZXNjcykpKQotCQlwdHIgKz0gKm9mZnNldDsKLQotCWV4dCA9IChzdHJ1Y3QgZXh0ZW50X2FkICopcHRyOwotCi0JKm9mZnNldCA9ICpvZmZzZXQgKyBzaXplb2Yoc3RydWN0IGV4dGVudF9hZCk7Ci0JcmV0dXJuIGV4dDsKLX0KLSNlbmRpZgotCiBzdHJ1Y3Qgc2hvcnRfYWQgKnVkZl9nZXRfZmlsZXNob3J0YWQodWludDhfdCAqcHRyLCBpbnQgbWF4b2Zmc2V0LCB1aW50MzJfdCAqb2Zmc2V0LAogCQkJICAgICAgaW50IGluYykKIHsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9maWxlLmMgYi9mcy91ZGYvZmlsZS5jCmluZGV4IDc0NjQzMDUuLmI4MGNiZDcgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9maWxlLmMKKysrIGIvZnMvdWRmL2ZpbGUuYwpAQCAtMTkzLDkgKzE5MywxMSBAQAogc3RhdGljIGludCB1ZGZfcmVsZWFzZV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkgeworCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCWxvY2tfa2VybmVsKCk7CiAJCXVkZl9kaXNjYXJkX3ByZWFsbG9jKGlub2RlKTsKIAkJdW5sb2NrX2tlcm5lbCgpOworCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy91ZGYvaW5vZGUuYyBiL2ZzL3VkZi9pbm9kZS5jCmluZGV4IGU3NTMzZjcuLjZkMjRjMmMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9pbm9kZS5jCisrKyBiL2ZzL3VkZi9pbm9kZS5jCkBAIC05MCwxOSArOTAsMTYgQEAKIH0KIAogLyoKLSAqIElmIHdlIGFyZSBnb2luZyB0byByZWxlYXNlIGlub2RlIGZyb20gbWVtb3J5LCB3ZSBkaXNjYXJkIHByZWFsbG9jYXRpb24gYW5kCi0gKiB0cnVuY2F0ZSBsYXN0IGlub2RlIGV4dGVudCB0byBwcm9wZXIgbGVuZ3RoLiBXZSBjb3VsZCB1c2UgZHJvcF9pbm9kZSgpIGJ1dAotICogaXQncyBjYWxsZWQgdW5kZXIgaW5vZGVfbG9jayBhbmQgdGh1cyB3ZSBjYW5ub3QgbWFyayBpbm9kZSBkaXJ0eSB0aGVyZS4gIFdlCi0gKiB1c2UgY2xlYXJfaW5vZGUoKSBidXQgd2UgaGF2ZSB0byBtYWtlIHN1cmUgdG8gd3JpdGUgaW5vZGUgYXMgaXQncyBub3Qgd3JpdHRlbgotICogYXV0b21hdGljYWxseS4KKyAqIElmIHdlIGFyZSBnb2luZyB0byByZWxlYXNlIGlub2RlIGZyb20gbWVtb3J5LCB3ZSB0cnVuY2F0ZSBsYXN0IGlub2RlIGV4dGVudAorICogdG8gcHJvcGVyIGxlbmd0aC4gV2UgY291bGQgdXNlIGRyb3BfaW5vZGUoKSBidXQgaXQncyBjYWxsZWQgdW5kZXIgaW5vZGVfbG9jaworICogYW5kIHRodXMgd2UgY2Fubm90IG1hcmsgaW5vZGUgZGlydHkgdGhlcmUuICBXZSB1c2UgY2xlYXJfaW5vZGUoKSBidXQgd2UgaGF2ZQorICogdG8gbWFrZSBzdXJlIHRvIHdyaXRlIGlub2RlIGFzIGl0J3Mgbm90IHdyaXR0ZW4gYXV0b21hdGljYWxseS4KICAqLwogdm9pZCB1ZGZfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvOwogCWlmICghKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewogCQlsb2NrX2tlcm5lbCgpOwotCQkvKiBEaXNjYXJkIHByZWFsbG9jYXRpb24gZm9yIGRpcmVjdG9yaWVzLCBzeW1saW5rcywgZXRjLiAqLwotCQl1ZGZfZGlzY2FyZF9wcmVhbGxvYyhpbm9kZSk7CiAJCXVkZl90cnVuY2F0ZV90YWlsX2V4dGVudChpbm9kZSk7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJd3JpdGVfaW5vZGVfbm93KGlub2RlLCAwKTsKQEAgLTY2NCw4ICs2NjEsMTIgQEAKIAl1ZGZfc3BsaXRfZXh0ZW50cyhpbm9kZSwgJmMsIG9mZnNldCwgbmV3YmxvY2tudW0sIGxhYXJyLCAmZW5kbnVtKTsKIAogI2lmZGVmIFVERl9QUkVBTExPQ0FURQotCS8qIHByZWFsbG9jYXRlIGJsb2NrcyAqLwotCXVkZl9wcmVhbGxvY19leHRlbnRzKGlub2RlLCBjLCBsYXN0YmxvY2ssIGxhYXJyLCAmZW5kbnVtKTsKKwkvKiBXZSBwcmVhbGxvY2F0ZSBibG9ja3Mgb25seSBmb3IgcmVndWxhciBmaWxlcy4gSXQgYWxzbyBtYWtlcyBzZW5zZQorCSAqIGZvciBkaXJlY3RvcmllcyBidXQgdGhlcmUncyBhIHByb2JsZW0gd2hlbiB0byBkcm9wIHRoZQorCSAqIHByZWFsbG9jYXRpb24uIFdlIG1pZ2h0IHVzZSBzb21lIGRlbGF5ZWQgd29yayBmb3IgdGhhdCBidXQgSSBmZWVsCisJICogaXQncyBvdmVyZW5naW5lZXJpbmcgZm9yIGEgZmlsZXN5c3RlbSBsaWtlIFVERi4gKi8KKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJdWRmX3ByZWFsbG9jX2V4dGVudHMoaW5vZGUsIGMsIGxhc3RibG9jaywgbGFhcnIsICZlbmRudW0pOwogI2VuZGlmCiAKIAkvKiBtZXJnZSBhbnkgY29udGludW91cyBibG9ja3MgaW4gbGFhcnIgKi8KZGlmZiAtLWdpdCBhL2ZzL3VkZi9sb3dsZXZlbC5jIGIvZnMvdWRmL2xvd2xldmVsLmMKaW5kZXggMWI4OGZkNS4uNDNlMjRhMyAxMDA2NDQKLS0tIGEvZnMvdWRmL2xvd2xldmVsLmMKKysrIGIvZnMvdWRmL2xvd2xldmVsLmMKQEAgLTM2LDE0ICszNiwxMCBAQAogCW1zX2luZm8uYWRkcl9mb3JtYXQgPSBDRFJPTV9MQkE7CiAJaSA9IGlvY3RsX2J5X2JkZXYoYmRldiwgQ0RST01NVUxUSVNFU1NJT04sICh1bnNpZ25lZCBsb25nKSZtc19pbmZvKTsKIAotI2RlZmluZSBXRV9PQkVZX1RIRV9XUklUVEVOX1NUQU5EQVJEUyAxCi0KIAlpZiAoaSA9PSAwKSB7CiAJCXVkZl9kZWJ1ZygiWEEgZGlzazogJXMsIHZvbF9kZXNjX3N0YXJ0PSVkXG4iLAogCQkJICAobXNfaW5mby54YV9mbGFnID8gInllcyIgOiAibm8iKSwgbXNfaW5mby5hZGRyLmxiYSk7Ci0jaWYgV0VfT0JFWV9USEVfV1JJVFRFTl9TVEFOREFSRFMKIAkJaWYgKG1zX2luZm8ueGFfZmxhZykgLyogbmVjZXNzYXJ5IGZvciBhIHZhbGlkIG1zX2luZm8uYWRkciAqLwotI2VuZGlmCiAJCQl2b2xfZGVzY19zdGFydCA9IG1zX2luZm8uYWRkci5sYmE7CiAJfSBlbHNlIHsKIAkJdWRmX2RlYnVnKCJDRFJPTU1VTFRJU0VTU0lPTiBub3Qgc3VwcG9ydGVkOiByYz0lZFxuIiwgaSk7CmRpZmYgLS1naXQgYS9mcy91ZGYvbmFtZWkuYyBiL2ZzL3VkZi9uYW1laS5jCmluZGV4IDZhMjlmYTM0Li4yMWRhZDhjIDEwMDY0NAotLS0gYS9mcy91ZGYvbmFtZWkuYworKysgYi9mcy91ZGYvbmFtZWkuYwpAQCAtOTQzLDcgKzk0Myw2IEBACiAJCXBjLT5jb21wb25lbnRUeXBlID0gMTsKIAkJcGMtPmxlbmd0aENvbXBvbmVudElkZW50ID0gMDsKIAkJcGMtPmNvbXBvbmVudEZpbGVWZXJzaW9uTnVtID0gMDsKLQkJcGMgKz0gc2l6ZW9mKHN0cnVjdCBwYXRoQ29tcG9uZW50KTsKIAkJZWxlbiArPSBzaXplb2Yoc3RydWN0IHBhdGhDb21wb25lbnQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMveGF0dHIuYyBiL2ZzL3hhdHRyLmMKaW5kZXggMWMzZDBhZi4uNmQ0ZjZkMyAxMDA2NDQKLS0tIGEvZnMveGF0dHIuYworKysgYi9mcy94YXR0ci5jCkBAIC02NiwyMiArNjYsMjggQEAKIAlyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CiB9CiAKLWludAotdmZzX3NldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsCi0JCXNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCisvKioKKyAqICBfX3Zmc19zZXR4YXR0cl9ub3Blcm0gLSBwZXJmb3JtIHNldHhhdHRyIG9wZXJhdGlvbiB3aXRob3V0IHBlcmZvcm1pbmcKKyAqICBwZXJtaXNzaW9uIGNoZWNrcy4KKyAqCisgKiAgQGRlbnRyeSAtIG9iamVjdCB0byBwZXJmb3JtIHNldHhhdHRyIG9uCisgKiAgQG5hbWUgLSB4YXR0ciBuYW1lIHRvIHNldAorICogIEB2YWx1ZSAtIHZhbHVlIHRvIHNldCBAbmFtZSB0bworICogIEBzaXplIC0gc2l6ZSBvZiBAdmFsdWUKKyAqICBAZmxhZ3MgLSBmbGFncyB0byBwYXNzIGludG8gZmlsZXN5c3RlbSBvcGVyYXRpb25zCisgKgorICogIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgaW50ZXJuYWwgc2V0eGF0dHIgb3Igc2V0c2VjdXJpdHkgb3BlcmF0aW9ucy4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGxvY2sgdGhlIGlub2RlJ3MgaV9tdXRleCBiZWZvcmUgaXQKKyAqICBpcyBleGVjdXRlZC4gSXQgYWxzbyBhc3N1bWVzIHRoYXQgdGhlIGNhbGxlciB3aWxsIG1ha2UgdGhlIGFwcHJvcHJpYXRlCisgKiAgcGVybWlzc2lvbiBjaGVja3MuCisgKi8KK2ludCBfX3Zmc19zZXR4YXR0cl9ub3Blcm0oc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IgPSAtRU9QTk9UU1VQUDsKIAotCWVycm9yID0geGF0dHJfcGVybWlzc2lvbihpbm9kZSwgbmFtZSwgTUFZX1dSSVRFKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX3NldHhhdHRyKGRlbnRyeSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwotCWVycm9yID0gLUVPUE5PVFNVUFA7CiAJaWYgKGlub2RlLT5pX29wLT5zZXR4YXR0cikgewogCQllcnJvciA9IGlub2RlLT5pX29wLT5zZXR4YXR0cihkZW50cnksIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7CiAJCWlmICghZXJyb3IpIHsKQEAgLTk3LDYgKzEwMywyOSBAQAogCQlpZiAoIWVycm9yKQogCQkJZnNub3RpZnlfeGF0dHIoZGVudHJ5KTsKIAl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKworaW50Cit2ZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKKwkJc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCWludCBlcnJvcjsKKworCWVycm9yID0geGF0dHJfcGVybWlzc2lvbihpbm9kZSwgbmFtZSwgTUFZX1dSSVRFKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwllcnJvciA9IHNlY3VyaXR5X2lub2RlX3NldHhhdHRyKGRlbnRyeSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCisJZXJyb3IgPSBfX3Zmc19zZXR4YXR0cl9ub3Blcm0oZGVudHJ5LCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOworCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCmluZGV4IDgwNzBiMzQuLjZjMzJmMWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKQEAgLTQ4NSwxNCArNDg1LDYgQEAKIH0KIAogU1RBVElDIGludAoteGZzX3ZuX3Blcm1pc3Npb24oCi0Jc3RydWN0IGlub2RlCQkqaW5vZGUsCi0JaW50CQkJbWFzaykKLXsKLQlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCB4ZnNfY2hlY2tfYWNsKTsKLX0KLQotU1RBVElDIGludAogeGZzX3ZuX2dldGF0dHIoCiAJc3RydWN0IHZmc21vdW50CQkqbW50LAogCXN0cnVjdCBkZW50cnkJCSpkZW50cnksCkBAIC02OTYsNyArNjg4LDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19pbm9kZV9vcGVyYXRpb25zID0gewotCS5wZXJtaXNzaW9uCQk9IHhmc192bl9wZXJtaXNzaW9uLAorCS5jaGVja19hY2wJCT0geGZzX2NoZWNrX2FjbCwKIAkudHJ1bmNhdGUJCT0geGZzX3ZuX3RydW5jYXRlLAogCS5nZXRhdHRyCQk9IHhmc192bl9nZXRhdHRyLAogCS5zZXRhdHRyCQk9IHhmc192bl9zZXRhdHRyLApAQCAtNzI0LDcgKzcxNiw3IEBACiAJLnJtZGlyCQkJPSB4ZnNfdm5fdW5saW5rLAogCS5ta25vZAkJCT0geGZzX3ZuX21rbm9kLAogCS5yZW5hbWUJCQk9IHhmc192bl9yZW5hbWUsCi0JLnBlcm1pc3Npb24JCT0geGZzX3ZuX3Blcm1pc3Npb24sCisJLmNoZWNrX2FjbAkJPSB4ZnNfY2hlY2tfYWNsLAogCS5nZXRhdHRyCQk9IHhmc192bl9nZXRhdHRyLAogCS5zZXRhdHRyCQk9IHhmc192bl9zZXRhdHRyLAogCS5zZXR4YXR0cgkJPSBnZW5lcmljX3NldHhhdHRyLApAQCAtNzQ5LDcgKzc0MSw3IEBACiAJLnJtZGlyCQkJPSB4ZnNfdm5fdW5saW5rLAogCS5ta25vZAkJCT0geGZzX3ZuX21rbm9kLAogCS5yZW5hbWUJCQk9IHhmc192bl9yZW5hbWUsCi0JLnBlcm1pc3Npb24JCT0geGZzX3ZuX3Blcm1pc3Npb24sCisJLmNoZWNrX2FjbAkJPSB4ZnNfY2hlY2tfYWNsLAogCS5nZXRhdHRyCQk9IHhmc192bl9nZXRhdHRyLAogCS5zZXRhdHRyCQk9IHhmc192bl9zZXRhdHRyLAogCS5zZXR4YXR0cgkJPSBnZW5lcmljX3NldHhhdHRyLApAQCAtNzYyLDcgKzc1NCw3IEBACiAJLnJlYWRsaW5rCQk9IGdlbmVyaWNfcmVhZGxpbmssCiAJLmZvbGxvd19saW5rCQk9IHhmc192bl9mb2xsb3dfbGluaywKIAkucHV0X2xpbmsJCT0geGZzX3ZuX3B1dF9saW5rLAotCS5wZXJtaXNzaW9uCQk9IHhmc192bl9wZXJtaXNzaW9uLAorCS5jaGVja19hY2wJCT0geGZzX2NoZWNrX2FjbCwKIAkuZ2V0YXR0cgkJPSB4ZnNfdm5fZ2V0YXR0ciwKIAkuc2V0YXR0cgkJPSB4ZnNfdm5fc2V0YXR0ciwKIAkuc2V0eGF0dHIJCT0gZ2VuZXJpY19zZXR4YXR0ciwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKaW5kZXggNzA3ODk3NC4uZmRlNjNhMyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKQEAgLTgxNyw3ICs4MTcsOCBAQAogCQl4ZnNfaXVubG9jayh4aXAsIGlvbG9jayk7CiAJCWlmIChuZWVkX2lfbXV0ZXgpCiAJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJZXJyb3IyID0gc3luY19wYWdlX3JhbmdlKGlub2RlLCBtYXBwaW5nLCBwb3MsIHJldCk7CisJCWVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgcG9zLAorCQkJCQkJICAgICAgcG9zICsgcmV0IC0gMSk7CiAJCWlmICghZXJyb3IpCiAJCQllcnJvciA9IGVycm9yMjsKIAkJaWYgKG5lZWRfaV9tdXRleCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbSBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQppbmRleCAyOTA5MTBlLi45NmQ3Yzk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZC5hc20KKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCkBAIC0zLDYgKzMsMTEgQEAKIGhlYWRlci15ICArPSBrdm0uaAogZW5kaWYKIAoraWZuZXEgKCQod2lsZGNhcmQgJChzcmN0cmVlKS9hcmNoLyQoU1JDQVJDSCkvaW5jbHVkZS9hc20va3ZtX3BhcmEuaCBcCisJCSAgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS0kKFNSQ0FSQ0gpL2t2bV9wYXJhLmgpLCkKK2hlYWRlci15ICArPSBrdm1fcGFyYS5oCitlbmRpZgorCiBpZm5lcSAoJCh3aWxkY2FyZCAkKHNyY3RyZWUpL2FyY2gvJChTUkNBUkNIKS9pbmNsdWRlL2FzbS9hLm91dC5oIFwKICAgICAgIAkJICAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtLSQoU1JDQVJDSCkvYS5vdXQuaCksKQogdW5pZmRlZi15ICs9IGEub3V0LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZGV2aWNlLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2RldmljZS5oCmluZGV4IGMxN2M5NjAuLmQ3Yzc2YmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9kZXZpY2UuaApAQCAtOSw0ICs5LDcgQEAKIHN0cnVjdCBkZXZfYXJjaGRhdGEgewogfTsKIAorc3RydWN0IHBkZXZfYXJjaGRhdGEgeworfTsKKwogI2VuZGlmIC8qIF9BU01fR0VORVJJQ19ERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1jb21tb24uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmctY29tbW9uLmgKaW5kZXggNTQwNmE2MC4uZTY5NDI2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1jb21tb24uaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2RtYS1tYXBwaW5nLWNvbW1vbi5oCkBAIC0xMDMsNyArMTAzLDYgQEAKIAlpZiAob3BzLT5zeW5jX3NpbmdsZV9mb3JfY3B1KQogCQlvcHMtPnN5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBhZGRyLCBzaXplLCBkaXIpOwogCWRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgYWRkciwgc2l6ZSwgZGlyKTsKLQlmbHVzaF93cml0ZV9idWZmZXJzKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xMTYsNyArMTE1LDYgQEAKIAlpZiAob3BzLT5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKQogCQlvcHMtPnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBhZGRyLCBzaXplLCBkaXIpOwogCWRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgYWRkciwgc2l6ZSwgZGlyKTsKLQlmbHVzaF93cml0ZV9idWZmZXJzKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xMzIsNyArMTMwLDYgQEAKIAkJb3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KGRldiwgYWRkciwgb2Zmc2V0LCBzaXplLCBkaXIpOwogCQlkZWJ1Z19kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShkZXYsIGFkZHIsIG9mZnNldCwgc2l6ZSwgZGlyKTsKIAotCQlmbHVzaF93cml0ZV9idWZmZXJzKCk7CiAJfSBlbHNlCiAJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgYWRkciwgc2l6ZSwgZGlyKTsKIH0KQEAgLTE1MCw3ICsxNDcsNiBAQAogCQlvcHMtPnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UoZGV2LCBhZGRyLCBvZmZzZXQsIHNpemUsIGRpcik7CiAJCWRlYnVnX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKGRldiwgYWRkciwgb2Zmc2V0LCBzaXplLCBkaXIpOwogCi0JCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKIAl9IGVsc2UKIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBhZGRyLCBzaXplLCBkaXIpOwogfQpAQCAtMTY1LDcgKzE2MSw2IEBACiAJaWYgKG9wcy0+c3luY19zZ19mb3JfY3B1KQogCQlvcHMtPnN5bmNfc2dfZm9yX2NwdShkZXYsIHNnLCBuZWxlbXMsIGRpcik7CiAJZGVidWdfZG1hX3N5bmNfc2dfZm9yX2NwdShkZXYsIHNnLCBuZWxlbXMsIGRpcik7Ci0JZmx1c2hfd3JpdGVfYnVmZmVycygpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTE3OSw3ICsxNzQsNiBAQAogCQlvcHMtPnN5bmNfc2dfZm9yX2RldmljZShkZXYsIHNnLCBuZWxlbXMsIGRpcik7CiAJZGVidWdfZG1hX3N5bmNfc2dfZm9yX2RldmljZShkZXYsIHNnLCBuZWxlbXMsIGRpcik7CiAKLQlmbHVzaF93cml0ZV9idWZmZXJzKCk7CiB9CiAKICNkZWZpbmUgZG1hX21hcF9zaW5nbGUoZCwgYSwgcywgcikgZG1hX21hcF9zaW5nbGVfYXR0cnMoZCwgYSwgcywgciwgTlVMTCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BlcmNwdS5oCmluZGV4IGFhMDA4MDAuLjkwMDc5YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaApAQCAtODEsMTQgKzgxLDE3IEBACiAKICNpZmRlZiBNT0RVTEUKICNkZWZpbmUgUEVSX0NQVV9TSEFSRURfQUxJR05FRF9TRUNUSU9OICIiCisjZGVmaW5lIFBFUl9DUFVfQUxJR05FRF9TRUNUSU9OICIiCiAjZWxzZQogI2RlZmluZSBQRVJfQ1BVX1NIQVJFRF9BTElHTkVEX1NFQ1RJT04gIi5zaGFyZWRfYWxpZ25lZCIKKyNkZWZpbmUgUEVSX0NQVV9BTElHTkVEX1NFQ1RJT04gIi5zaGFyZWRfYWxpZ25lZCIKICNlbmRpZgogI2RlZmluZSBQRVJfQ1BVX0ZJUlNUX1NFQ1RJT04gIi5maXJzdCIKIAogI2Vsc2UKIAogI2RlZmluZSBQRVJfQ1BVX1NIQVJFRF9BTElHTkVEX1NFQ1RJT04gIiIKKyNkZWZpbmUgUEVSX0NQVV9BTElHTkVEX1NFQ1RJT04gIi5zaGFyZWRfYWxpZ25lZCIKICNkZWZpbmUgUEVSX0NQVV9GSVJTVF9TRUNUSU9OICIiCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc29ja2V0LmgKaW5kZXggNWQ3OWU0MC4uNTM4OTkxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NvY2tldC5oCkBAIC02MCw0ICs2MCw3IEBACiAjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKICNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKIAorI2RlZmluZSBTT19QUk9UT0NPTAkJMzgKKyNkZWZpbmUgU09fRE9NQUlOCQkzOQorCiAjZW5kaWYgLyogX19BU01fR0VORVJJQ19TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCmluZGV4IDZhZDc2YmY1Zi4uYTQzMjIzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtMzMsMTMgKzMzLDEwIEBACiAgKglCU1NfU0VDVElPTigwLCAwLCAwKQogICoJX2VuZCA9IC47CiAgKgotICoJL0RJU0NBUkQvIDogewotICoJCUVYSVRfVEVYVAotICoJCUVYSVRfREFUQQotICoJCUVYSVRfQ0FMTAotICoJfQogICoJU1RBQlNfREVCVUcKICAqCURXQVJGX0RFQlVHCisgKgorICoJRElTQ0FSRFMJCS8vIG11c3QgYmUgdGhlIGxhc3QKICAqIH0KICAqCiAgKiBbX19pbml0X2JlZ2luLCBfX2luaXRfZW5kXSBpcyB0aGUgaW5pdCBzZWN0aW9uIHRoYXQgbWF5IGJlIGZyZWVkIGFmdGVyIGluaXQKQEAgLTYyNiw2ICs2MjMsMjMgQEAKICNkZWZpbmUgSU5JVF9SQU1fRlMKICNlbmRpZgogCisvKgorICogRGVmYXVsdCBkaXNjYXJkZWQgc2VjdGlvbnMuCisgKgorICogU29tZSBhcmNocyB3YW50IHRvIGRpc2NhcmQgZXhpdCB0ZXh0L2RhdGEgYXQgcnVudGltZSByYXRoZXIgdGhhbgorICogbGluayB0aW1lIGR1ZSB0byBjcm9zcy1zZWN0aW9uIHJlZmVyZW5jZXMgc3VjaCBhcyBhbHQgaW5zdHJ1Y3Rpb25zLAorICogYnVnIHRhYmxlLCBlaF9mcmFtZSwgZXRjLiAgRElTQ0FSRFMgbXVzdCBiZSB0aGUgbGFzdCBvZiBvdXRwdXQKKyAqIHNlY3Rpb24gZGVmaW5pdGlvbnMgc28gdGhhdCBzdWNoIGFyY2hzIHB1dCB0aG9zZSBpbiBlYXJsaWVyIHNlY3Rpb24KKyAqIGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIERJU0NBUkRTCQkJCQkJCVwKKwkvRElTQ0FSRC8gOiB7CQkJCQkJCVwKKwlFWElUX1RFWFQJCQkJCQkJXAorCUVYSVRfREFUQQkJCQkJCQlcCisJRVhJVF9DQUxMCQkJCQkJCVwKKwkqKC5kaXNjYXJkKQkJCQkJCQlcCisJfQorCiAvKioKICAqIFBFUkNQVV9WQUREUiAtIGRlZmluZSBvdXRwdXQgc2VjdGlvbiBmb3IgcGVyY3B1IGFyZWEKICAqIEB2YWRkcjogZXhwbGljaXQgYmFzZSBhZGRyZXNzIChvcHRpb25hbCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2FsZ2FwaS5oIGIvaW5jbHVkZS9jcnlwdG8vYWxnYXBpLmgKaW5kZXggNWEyYmQxYy4uMWZmYjUzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jcnlwdG8vYWxnYXBpLmgKKysrIGIvaW5jbHVkZS9jcnlwdG8vYWxnYXBpLmgKQEAgLTIyLDExICsyMiw5IEBACiAKIHN0cnVjdCBjcnlwdG9fdHlwZSB7CiAJdW5zaWduZWQgaW50ICgqY3R4c2l6ZSkoc3RydWN0IGNyeXB0b19hbGcgKmFsZywgdTMyIHR5cGUsIHUzMiBtYXNrKTsKLQl1bnNpZ25lZCBpbnQgKCpleHRzaXplKShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAotCQkJCWNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQpOworCXVuc2lnbmVkIGludCAoKmV4dHNpemUpKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpOwogCWludCAoKmluaXQpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHUzMiB0eXBlLCB1MzIgbWFzayk7Ci0JaW50ICgqaW5pdF90Zm0pKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCi0JCSAgICAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCk7CisJaW50ICgqaW5pdF90Zm0pKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pOwogCXZvaWQgKCpzaG93KShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjcnlwdG9fYWxnICphbGcpOwogCXN0cnVjdCBjcnlwdG9fYWxnICooKmxvb2t1cCkoY29uc3QgY2hhciAqbmFtZSwgdTMyIHR5cGUsIHUzMiBtYXNrKTsKIApAQCAtNTIsNiArNTAsNyBAQAogCiAJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqKCphbGxvYykoc3RydWN0IHJ0YXR0ciAqKnRiKTsKIAl2b2lkICgqZnJlZSkoc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCk7CisJaW50ICgqY3JlYXRlKShzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0bXBsLCBzdHJ1Y3QgcnRhdHRyICoqdGIpOwogCiAJY2hhciBuYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdOwogfTsKQEAgLTYwLDYgKzU5LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKIAlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OworCWNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSAqZnJvbnRlbmQ7CiAJdTMyIG1hc2s7CiB9OwogCkBAIC0xMTQsMTEgKzExNCwxOSBAQAogdm9pZCBjcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZShzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0bXBsKTsKIHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKmNyeXB0b19sb29rdXBfdGVtcGxhdGUoY29uc3QgY2hhciAqbmFtZSk7CiAKK2ludCBjcnlwdG9fcmVnaXN0ZXJfaW5zdGFuY2Uoc3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqdG1wbCwKKwkJCSAgICAgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCk7CisKIGludCBjcnlwdG9faW5pdF9zcGF3bihzdHJ1Y3QgY3J5cHRvX3NwYXduICpzcGF3biwgc3RydWN0IGNyeXB0b19hbGcgKmFsZywKIAkJICAgICAgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCwgdTMyIG1hc2spOworaW50IGNyeXB0b19pbml0X3NwYXduMihzdHJ1Y3QgY3J5cHRvX3NwYXduICpzcGF3biwgc3RydWN0IGNyeXB0b19hbGcgKmFsZywKKwkJICAgICAgIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKTsKKwogdm9pZCBjcnlwdG9fZHJvcF9zcGF3bihzdHJ1Y3QgY3J5cHRvX3NwYXduICpzcGF3bik7CiBzdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX3NwYXduX3RmbShzdHJ1Y3QgY3J5cHRvX3NwYXduICpzcGF3biwgdTMyIHR5cGUsCiAJCQkJICAgIHUzMiBtYXNrKTsKK3ZvaWQgKmNyeXB0b19zcGF3bl90Zm0yKHN0cnVjdCBjcnlwdG9fc3Bhd24gKnNwYXduKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19zZXRfc3Bhd24oc3RydWN0IGNyeXB0b19zcGF3biAqc3Bhd24sCiAJCQkJICAgIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QpCkBAIC0xMjksOCArMTM3LDE5IEBACiBzdHJ1Y3QgY3J5cHRvX2F0dHJfdHlwZSAqY3J5cHRvX2dldF9hdHRyX3R5cGUoc3RydWN0IHJ0YXR0ciAqKnRiKTsKIGludCBjcnlwdG9fY2hlY2tfYXR0cl90eXBlKHN0cnVjdCBydGF0dHIgKip0YiwgdTMyIHR5cGUpOwogY29uc3QgY2hhciAqY3J5cHRvX2F0dHJfYWxnX25hbWUoc3RydWN0IHJ0YXR0ciAqcnRhKTsKLXN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYXR0cl9hbGcoc3RydWN0IHJ0YXR0ciAqcnRhLCB1MzIgdHlwZSwgdTMyIG1hc2spOworc3RydWN0IGNyeXB0b19hbGcgKmNyeXB0b19hdHRyX2FsZzIoc3RydWN0IHJ0YXR0ciAqcnRhLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kLAorCQkJCSAgICB1MzIgdHlwZSwgdTMyIG1hc2spOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYXR0cl9hbGcoc3RydWN0IHJ0YXR0ciAqcnRhLAorCQkJCQkJIHUzMiB0eXBlLCB1MzIgbWFzaykKK3sKKwlyZXR1cm4gY3J5cHRvX2F0dHJfYWxnMihydGEsIE5VTEwsIHR5cGUsIG1hc2spOworfQorCiBpbnQgY3J5cHRvX2F0dHJfdTMyKHN0cnVjdCBydGF0dHIgKnJ0YSwgdTMyICpudW0pOwordm9pZCAqY3J5cHRvX2FsbG9jX2luc3RhbmNlMihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAorCQkJICAgICB1bnNpZ25lZCBpbnQgaGVhZCk7CiBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdG9fYWxsb2NfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJICAgICAgc3RydWN0IGNyeXB0b19hbGcgKmFsZyk7CiAKQEAgLTE1NywxMiArMTc2LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkICpjcnlwdG9fdGZtX2N0eF9hbGlnbmVkKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpY3J5cHRvX3RmbV9jdHgodGZtKTsKLQl1bnNpZ25lZCBsb25nIGFsaWduID0gY3J5cHRvX3RmbV9hbGdfYWxpZ25tYXNrKHRmbSk7Ci0KLQlpZiAoYWxpZ24gPD0gY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkpCi0JCWFsaWduID0gMTsKLQlyZXR1cm4gKHZvaWQgKilBTElHTihhZGRyLCBhbGlnbik7CisJcmV0dXJuIFBUUl9BTElHTihjcnlwdG9fdGZtX2N0eCh0Zm0pLAorCQkJIGNyeXB0b190Zm1fYWxnX2FsaWdubWFzayh0Zm0pICsgMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqY3J5cHRvX3RmbV9hbGdfaW5zdGFuY2UoCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9jcnlwdGQuaCBiL2luY2x1ZGUvY3J5cHRvL2NyeXB0ZC5oCmluZGV4IDU1ZmE3YmIuLjJmNjVhNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY3J5cHRvL2NyeXB0ZC5oCisrKyBiL2luY2x1ZGUvY3J5cHRvL2NyeXB0ZC5oCkBAIC03LDYgKzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2hhc2guaD4KIAogc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyIHsKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgYmFzZTsKQEAgLTI0LDQgKzI1LDIwIEBACiBzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqY3J5cHRkX2FibGtjaXBoZXJfY2hpbGQoc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICp0Zm0pOwogdm9pZCBjcnlwdGRfZnJlZV9hYmxrY2lwaGVyKHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqdGZtKTsKIAorc3RydWN0IGNyeXB0ZF9haGFzaCB7CisJc3RydWN0IGNyeXB0b19haGFzaCBiYXNlOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRkX2FoYXNoICpfX2NyeXB0ZF9haGFzaF9jYXN0KAorCXN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSkKK3sKKwlyZXR1cm4gKHN0cnVjdCBjcnlwdGRfYWhhc2ggKil0Zm07Cit9CisKKy8qIGFsZ19uYW1lIHNob3VsZCBiZSBhbGdvcml0aG0gdG8gYmUgY3J5cHRkLWVkICovCitzdHJ1Y3QgY3J5cHRkX2FoYXNoICpjcnlwdGRfYWxsb2NfYWhhc2goY29uc3QgY2hhciAqYWxnX25hbWUsCisJCQkJCXUzMiB0eXBlLCB1MzIgbWFzayk7CitzdHJ1Y3QgY3J5cHRvX3NoYXNoICpjcnlwdGRfYWhhc2hfY2hpbGQoc3RydWN0IGNyeXB0ZF9haGFzaCAqdGZtKTsKK3ZvaWQgY3J5cHRkX2ZyZWVfYWhhc2goc3RydWN0IGNyeXB0ZF9haGFzaCAqdGZtKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9oYXNoLmggYi9pbmNsdWRlL2NyeXB0by9oYXNoLmgKaW5kZXggZDU2YmI3MS4uMjZjYjFlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jcnlwdG8vaGFzaC5oCisrKyBiL2luY2x1ZGUvY3J5cHRvL2hhc2guaApAQCAtMTUsNiArMTUsNDIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCitzdHJ1Y3QgY3J5cHRvX2FoYXNoOworCitzdHJ1Y3QgaGFzaF9hbGdfY29tbW9uIHsKKwl1bnNpZ25lZCBpbnQgZGlnZXN0c2l6ZTsKKwl1bnNpZ25lZCBpbnQgc3RhdGVzaXplOworCisJc3RydWN0IGNyeXB0b19hbGcgYmFzZTsKK307CisKK3N0cnVjdCBhaGFzaF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgYmFzZTsKKworCXVuc2lnbmVkIGludCBuYnl0ZXM7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmM7CisJdTggKnJlc3VsdDsKKworCS8qIFRoaXMgZmllbGQgbWF5IG9ubHkgYmUgdXNlZCBieSB0aGUgYWhhc2ggQVBJIGNvZGUuICovCisJdm9pZCAqcHJpdjsKKworCXZvaWQgKl9fY3R4W10gQ1JZUFRPX01JTkFMSUdOX0FUVFI7Cit9OworCitzdHJ1Y3QgYWhhc2hfYWxnIHsKKwlpbnQgKCppbml0KShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKKwlpbnQgKCp1cGRhdGUpKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOworCWludCAoKmZpbmFsKShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKKwlpbnQgKCpmaW51cCkoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7CisJaW50ICgqZGlnZXN0KShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKKwlpbnQgKCpleHBvcnQpKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIHZvaWQgKm91dCk7CisJaW50ICgqaW1wb3J0KShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLCBjb25zdCB2b2lkICppbik7CisJaW50ICgqc2V0a2V5KShzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0sIGNvbnN0IHU4ICprZXksCisJCSAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4pOworCisJc3RydWN0IGhhc2hfYWxnX2NvbW1vbiBoYWxnOworfTsKKwogc3RydWN0IHNoYXNoX2Rlc2MgewogCXN0cnVjdCBjcnlwdG9fc2hhc2ggKnRmbTsKIAl1MzIgZmxhZ3M7CkBAIC0yNCw3ICs2MCw2IEBACiAKIHN0cnVjdCBzaGFzaF9hbGcgewogCWludCAoKmluaXQpKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKTsKLQlpbnQgKCpyZWluaXQpKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKTsKIAlpbnQgKCp1cGRhdGUpKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCBjb25zdCB1OCAqZGF0YSwKIAkJICAgICAgdW5zaWduZWQgaW50IGxlbik7CiAJaW50ICgqZmluYWwpKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KTsKQEAgLTMyLDM4ICs2Nyw0OCBAQAogCQkgICAgIHVuc2lnbmVkIGludCBsZW4sIHU4ICpvdXQpOwogCWludCAoKmRpZ2VzdCkoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLAogCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqb3V0KTsKKwlpbnQgKCpleHBvcnQpKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB2b2lkICpvdXQpOworCWludCAoKmltcG9ydCkoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHZvaWQgKmluKTsKIAlpbnQgKCpzZXRrZXkpKHN0cnVjdCBjcnlwdG9fc2hhc2ggKnRmbSwgY29uc3QgdTggKmtleSwKIAkJICAgICAgdW5zaWduZWQgaW50IGtleWxlbik7CiAKIAl1bnNpZ25lZCBpbnQgZGVzY3NpemU7Ci0JdW5zaWduZWQgaW50IGRpZ2VzdHNpemU7CisKKwkvKiBUaGVzZSBmaWVsZHMgbXVzdCBtYXRjaCBoYXNoX2FsZ19jb21tb24uICovCisJdW5zaWduZWQgaW50IGRpZ2VzdHNpemUKKwkJX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoX19hbGlnbm9mX18oc3RydWN0IGhhc2hfYWxnX2NvbW1vbikpKSk7CisJdW5zaWduZWQgaW50IHN0YXRlc2l6ZTsKIAogCXN0cnVjdCBjcnlwdG9fYWxnIGJhc2U7CiB9OwogCiBzdHJ1Y3QgY3J5cHRvX2FoYXNoIHsKKwlpbnQgKCppbml0KShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKKwlpbnQgKCp1cGRhdGUpKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOworCWludCAoKmZpbmFsKShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKKwlpbnQgKCpmaW51cCkoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7CisJaW50ICgqZGlnZXN0KShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKKwlpbnQgKCpleHBvcnQpKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIHZvaWQgKm91dCk7CisJaW50ICgqaW1wb3J0KShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLCBjb25zdCB2b2lkICppbik7CisJaW50ICgqc2V0a2V5KShzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0sIGNvbnN0IHU4ICprZXksCisJCSAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4pOworCisJdW5zaWduZWQgaW50IHJlcXNpemU7CiAJc3RydWN0IGNyeXB0b190Zm0gYmFzZTsKIH07CiAKIHN0cnVjdCBjcnlwdG9fc2hhc2ggeworCXVuc2lnbmVkIGludCBkZXNjc2l6ZTsKIAlzdHJ1Y3QgY3J5cHRvX3RmbSBiYXNlOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX2FoYXNoICpfX2NyeXB0b19haGFzaF9jYXN0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgY3J5cHRvX2FoYXNoICopdGZtOworCXJldHVybiBjb250YWluZXJfb2YodGZtLCBzdHJ1Y3QgY3J5cHRvX2FoYXNoLCBiYXNlKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX2FoYXNoICpjcnlwdG9fYWxsb2NfYWhhc2goY29uc3QgY2hhciAqYWxnX25hbWUsCi0JCQkJCQkgICAgICB1MzIgdHlwZSwgdTMyIG1hc2spCi17Ci0JdHlwZSAmPSB+Q1JZUFRPX0FMR19UWVBFX01BU0s7Ci0JbWFzayAmPSB+Q1JZUFRPX0FMR19UWVBFX01BU0s7Ci0JdHlwZSB8PSBDUllQVE9fQUxHX1RZUEVfQUhBU0g7Ci0JbWFzayB8PSBDUllQVE9fQUxHX1RZUEVfQUhBU0hfTUFTSzsKLQotCXJldHVybiBfX2NyeXB0b19haGFzaF9jYXN0KGNyeXB0b19hbGxvY19iYXNlKGFsZ19uYW1lLCB0eXBlLCBtYXNrKSk7Ci19CitzdHJ1Y3QgY3J5cHRvX2FoYXNoICpjcnlwdG9fYWxsb2NfYWhhc2goY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0eXBlLAorCQkJCQl1MzIgbWFzayk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19haGFzaF90Zm0oc3RydWN0IGNyeXB0b19haGFzaCAqdGZtKQogewpAQCAtNzIsNyArMTE3LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19mcmVlX2FoYXNoKHN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSkKIHsKLQljcnlwdG9fZnJlZV90Zm0oY3J5cHRvX2FoYXNoX3RmbSh0Zm0pKTsKKwljcnlwdG9fZGVzdHJveV90Zm0odGZtLCBjcnlwdG9fYWhhc2hfdGZtKHRmbSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fYWhhc2hfYWxpZ25tYXNrKApAQCAtODEsMTQgKzEyNiwyNiBAQAogCXJldHVybiBjcnlwdG9fdGZtX2FsZ19hbGlnbm1hc2soY3J5cHRvX2FoYXNoX3RmbSh0Zm0pKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgYWhhc2hfdGZtICpjcnlwdG9fYWhhc2hfY3J0KHN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhhc2hfYWxnX2NvbW1vbiAqX19jcnlwdG9faGFzaF9hbGdfY29tbW9uKAorCXN0cnVjdCBjcnlwdG9fYWxnICphbGcpCiB7Ci0JcmV0dXJuICZjcnlwdG9fYWhhc2hfdGZtKHRmbSktPmNydF9haGFzaDsKKwlyZXR1cm4gY29udGFpbmVyX29mKGFsZywgc3RydWN0IGhhc2hfYWxnX2NvbW1vbiwgYmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhhc2hfYWxnX2NvbW1vbiAqY3J5cHRvX2hhc2hfYWxnX2NvbW1vbigKKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0pCit7CisJcmV0dXJuIF9fY3J5cHRvX2hhc2hfYWxnX2NvbW1vbihjcnlwdG9fYWhhc2hfdGZtKHRmbSktPl9fY3J0X2FsZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b19haGFzaF9kaWdlc3RzaXplKHN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSkKIHsKLQlyZXR1cm4gY3J5cHRvX2FoYXNoX2NydCh0Zm0pLT5kaWdlc3RzaXplOworCXJldHVybiBjcnlwdG9faGFzaF9hbGdfY29tbW9uKHRmbSktPmRpZ2VzdHNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b19haGFzaF9zdGF0ZXNpemUoc3RydWN0IGNyeXB0b19haGFzaCAqdGZtKQoreworCXJldHVybiBjcnlwdG9faGFzaF9hbGdfY29tbW9uKHRmbSktPnN0YXRlc2l6ZTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgY3J5cHRvX2FoYXNoX2dldF9mbGFncyhzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0pCkBAIC0xMTQsNyArMTcxLDcgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3J5cHRvX2FoYXNoX3JlcXNpemUoc3RydWN0IGNyeXB0b19haGFzaCAqdGZtKQogewotCXJldHVybiBjcnlwdG9fYWhhc2hfY3J0KHRmbSktPnJlcXNpemU7CisJcmV0dXJuIHRmbS0+cmVxc2l6ZTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkICphaGFzaF9yZXF1ZXN0X2N0eChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQpAQCAtMTIyLDQ0ICsxNzksMzAgQEAKIAlyZXR1cm4gcmVxLT5fX2N0eDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2FoYXNoX3NldGtleShzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0sCi0JCQkJICAgICAgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKLXsKLQlzdHJ1Y3QgYWhhc2hfdGZtICpjcnQgPSBjcnlwdG9fYWhhc2hfY3J0KHRmbSk7CitpbnQgY3J5cHRvX2FoYXNoX3NldGtleShzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0sIGNvbnN0IHU4ICprZXksCisJCQl1bnNpZ25lZCBpbnQga2V5bGVuKTsKK2ludCBjcnlwdG9fYWhhc2hfZmludXAoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7CitpbnQgY3J5cHRvX2FoYXNoX2ZpbmFsKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOworaW50IGNyeXB0b19haGFzaF9kaWdlc3Qoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7CiAKLQlyZXR1cm4gY3J0LT5zZXRrZXkodGZtLCBrZXksIGtleWxlbik7CitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fYWhhc2hfZXhwb3J0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIHZvaWQgKm91dCkKK3sKKwlyZXR1cm4gY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpLT5leHBvcnQocmVxLCBvdXQpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjcnlwdG9fYWhhc2hfZGlnZXN0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fYWhhc2hfaW1wb3J0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIGNvbnN0IHZvaWQgKmluKQogewotCXN0cnVjdCBhaGFzaF90Zm0gKmNydCA9IGNyeXB0b19haGFzaF9jcnQoY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpKTsKLQlyZXR1cm4gY3J0LT5kaWdlc3QocmVxKTsKKwlyZXR1cm4gY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpLT5pbXBvcnQocmVxLCBpbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fYWhhc2hfZXhwb3J0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIHU4ICpvdXQpCi17Ci0JbWVtY3B5KG91dCwgYWhhc2hfcmVxdWVzdF9jdHgocmVxKSwKLQkgICAgICAgY3J5cHRvX2FoYXNoX3JlcXNpemUoY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpKSk7Ci19Ci0KLWludCBjcnlwdG9fYWhhc2hfaW1wb3J0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIGNvbnN0IHU4ICppbik7Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19haGFzaF9pbml0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCiB7Ci0Jc3RydWN0IGFoYXNoX3RmbSAqY3J0ID0gY3J5cHRvX2FoYXNoX2NydChjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSkpOwotCXJldHVybiBjcnQtPmluaXQocmVxKTsKKwlyZXR1cm4gY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpLT5pbml0KHJlcSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19haGFzaF91cGRhdGUoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKIHsKLQlzdHJ1Y3QgYWhhc2hfdGZtICpjcnQgPSBjcnlwdG9fYWhhc2hfY3J0KGNyeXB0b19haGFzaF9yZXF0Zm0ocmVxKSk7Ci0JcmV0dXJuIGNydC0+dXBkYXRlKHJlcSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19haGFzaF9maW5hbChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQotewotCXN0cnVjdCBhaGFzaF90Zm0gKmNydCA9IGNyeXB0b19haGFzaF9jcnQoY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpKTsKLQlyZXR1cm4gY3J0LT5maW5hbChyZXEpOworCXJldHVybiBjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSktPnVwZGF0ZShyZXEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWhhc2hfcmVxdWVzdF9zZXRfdGZtKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsCkBAIC0xODQsNyArMjI3LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFoYXNoX3JlcXVlc3RfZnJlZShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQogewotCWtmcmVlKHJlcSk7CisJa3pmcmVlKHJlcSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFoYXNoX3JlcXVlc3RfY2FzdCgKQEAgLTI1MSw2ICsyOTQsMTEgQEAKIAlyZXR1cm4gY3J5cHRvX3NoYXNoX2FsZyh0Zm0pLT5kaWdlc3RzaXplOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fc2hhc2hfc3RhdGVzaXplKHN0cnVjdCBjcnlwdG9fc2hhc2ggKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX3NoYXNoX2FsZyh0Zm0pLT5zdGF0ZXNpemU7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTMyIGNyeXB0b19zaGFzaF9nZXRfZmxhZ3Moc3RydWN0IGNyeXB0b19zaGFzaCAqdGZtKQogewogCXJldHVybiBjcnlwdG9fdGZtX2dldF9mbGFncyhjcnlwdG9fc2hhc2hfdGZtKHRmbSkpOwpAQCAtMjY4LDcgKzMxNiw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b19zaGFzaF9kZXNjc2l6ZShzdHJ1Y3QgY3J5cHRvX3NoYXNoICp0Zm0pCiB7Ci0JcmV0dXJuIGNyeXB0b19zaGFzaF9hbGcodGZtKS0+ZGVzY3NpemU7CisJcmV0dXJuIHRmbS0+ZGVzY3NpemU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqc2hhc2hfZGVzY19jdHgoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCkBAIC0yODEsMTIgKzMyOSwxNSBAQAogaW50IGNyeXB0b19zaGFzaF9kaWdlc3Qoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLAogCQkJdW5zaWduZWQgaW50IGxlbiwgdTggKm91dCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fc2hhc2hfZXhwb3J0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQorc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX3NoYXNoX2V4cG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdm9pZCAqb3V0KQogewotCW1lbWNweShvdXQsIHNoYXNoX2Rlc2NfY3R4KGRlc2MpLCBjcnlwdG9fc2hhc2hfZGVzY3NpemUoZGVzYy0+dGZtKSk7CisJcmV0dXJuIGNyeXB0b19zaGFzaF9hbGcoZGVzYy0+dGZtKS0+ZXhwb3J0KGRlc2MsIG91dCk7CiB9CiAKLWludCBjcnlwdG9fc2hhc2hfaW1wb3J0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCBjb25zdCB1OCAqaW4pOworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX3NoYXNoX2ltcG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqaW4pCit7CisJcmV0dXJuIGNyeXB0b19zaGFzaF9hbGcoZGVzYy0+dGZtKS0+aW1wb3J0KGRlc2MsIGluKTsKK30KIAogc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX3NoYXNoX2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9oYXNoLmggYi9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9oYXNoLmgKaW5kZXggODJiNzA1Ni4uNWJmYWQ4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvaGFzaC5oCisrKyBiL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL2hhc2guaApAQCAtMzQsNiArMzQsMjIgQEAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9OwogCitzdHJ1Y3QgYWhhc2hfaW5zdGFuY2UgeworCXN0cnVjdCBhaGFzaF9hbGcgYWxnOworfTsKKworc3RydWN0IHNoYXNoX2luc3RhbmNlIHsKKwlzdHJ1Y3Qgc2hhc2hfYWxnIGFsZzsKK307CisKK3N0cnVjdCBjcnlwdG9fYWhhc2hfc3Bhd24geworCXN0cnVjdCBjcnlwdG9fc3Bhd24gYmFzZTsKK307CisKK3N0cnVjdCBjcnlwdG9fc2hhc2hfc3Bhd24geworCXN0cnVjdCBjcnlwdG9fc3Bhd24gYmFzZTsKK307CisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgY3J5cHRvX2FoYXNoX3R5cGU7CiAKIGludCBjcnlwdG9faGFzaF93YWxrX2RvbmUoc3RydWN0IGNyeXB0b19oYXNoX3dhbGsgKndhbGssIGludCBlcnIpOwpAQCAtNDMsMTggKzU5LDEwMCBAQAogCQkJCSAgc3RydWN0IGNyeXB0b19oYXNoX3dhbGsgKndhbGssCiAJCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgbGVuKTsKIAorc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2hhc2hfd2Fsa19sYXN0KHN0cnVjdCBjcnlwdG9faGFzaF93YWxrICp3YWxrKQoreworCXJldHVybiAhKHdhbGstPmVudHJ5bGVuIHwgd2Fsay0+dG90YWwpOworfQorCitpbnQgY3J5cHRvX3JlZ2lzdGVyX2FoYXNoKHN0cnVjdCBhaGFzaF9hbGcgKmFsZyk7CitpbnQgY3J5cHRvX3VucmVnaXN0ZXJfYWhhc2goc3RydWN0IGFoYXNoX2FsZyAqYWxnKTsKK2ludCBhaGFzaF9yZWdpc3Rlcl9pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0bXBsLAorCQkJICAgIHN0cnVjdCBhaGFzaF9pbnN0YW5jZSAqaW5zdCk7Cit2b2lkIGFoYXNoX2ZyZWVfaW5zdGFuY2Uoc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCk7CisKK2ludCBjcnlwdG9faW5pdF9haGFzaF9zcGF3bihzdHJ1Y3QgY3J5cHRvX2FoYXNoX3NwYXduICpzcGF3biwKKwkJCSAgICBzdHJ1Y3QgaGFzaF9hbGdfY29tbW9uICphbGcsCisJCQkgICAgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fZHJvcF9haGFzaChzdHJ1Y3QgY3J5cHRvX2FoYXNoX3NwYXduICpzcGF3bikKK3sKKwljcnlwdG9fZHJvcF9zcGF3bigmc3Bhd24tPmJhc2UpOworfQorCitzdHJ1Y3QgaGFzaF9hbGdfY29tbW9uICphaGFzaF9hdHRyX2FsZyhzdHJ1Y3QgcnRhdHRyICpydGEsIHUzMiB0eXBlLCB1MzIgbWFzayk7CisKIGludCBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goc3RydWN0IHNoYXNoX2FsZyAqYWxnKTsKIGludCBjcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaChzdHJ1Y3Qgc2hhc2hfYWxnICphbGcpOworaW50IHNoYXNoX3JlZ2lzdGVyX2luc3RhbmNlKHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKnRtcGwsCisJCQkgICAgc3RydWN0IHNoYXNoX2luc3RhbmNlICppbnN0KTsKK3ZvaWQgc2hhc2hfZnJlZV9pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KTsKKworaW50IGNyeXB0b19pbml0X3NoYXNoX3NwYXduKHN0cnVjdCBjcnlwdG9fc2hhc2hfc3Bhd24gKnNwYXduLAorCQkJICAgIHN0cnVjdCBzaGFzaF9hbGcgKmFsZywKKwkJCSAgICBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KTsKKworc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19kcm9wX3NoYXNoKHN0cnVjdCBjcnlwdG9fc2hhc2hfc3Bhd24gKnNwYXduKQoreworCWNyeXB0b19kcm9wX3NwYXduKCZzcGF3bi0+YmFzZSk7Cit9CisKK3N0cnVjdCBzaGFzaF9hbGcgKnNoYXNoX2F0dHJfYWxnKHN0cnVjdCBydGF0dHIgKnJ0YSwgdTMyIHR5cGUsIHUzMiBtYXNrKTsKKworaW50IHNoYXNoX2FoYXNoX3VwZGF0ZShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLCBzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYyk7CitpbnQgc2hhc2hfYWhhc2hfZmludXAoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSwgc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpOworaW50IHNoYXNoX2FoYXNoX2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLCBzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYyk7CisKK2ludCBjcnlwdG9faW5pdF9zaGFzaF9vcHNfYXN5bmMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqY3J5cHRvX2FoYXNoX2N0eChzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0pCiB7Ci0JcmV0dXJuIGNyeXB0b190Zm1fY3R4KCZ0Zm0tPmJhc2UpOworCXJldHVybiBjcnlwdG9fdGZtX2N0eChjcnlwdG9fYWhhc2hfdGZtKHRmbSkpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhaGFzaF9hbGcgKmNyeXB0b19haGFzaF9hbGcoCi0Jc3RydWN0IGNyeXB0b19haGFzaCAqdGZtKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgYWhhc2hfYWxnICpfX2NyeXB0b19haGFzaF9hbGcoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKIHsKLQlyZXR1cm4gJmNyeXB0b19haGFzaF90Zm0odGZtKS0+X19jcnRfYWxnLT5jcmFfYWhhc2g7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihfX2NyeXB0b19oYXNoX2FsZ19jb21tb24oYWxnKSwgc3RydWN0IGFoYXNoX2FsZywKKwkJCSAgICBoYWxnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19haGFzaF9zZXRfcmVxc2l6ZShzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0sCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVxc2l6ZSkKK3sKKwl0Zm0tPnJlcXNpemUgPSByZXFzaXplOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmFoYXNoX2NyeXB0b19pbnN0YW5jZSgKKwlzdHJ1Y3QgYWhhc2hfaW5zdGFuY2UgKmluc3QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZigmaW5zdC0+YWxnLmhhbGcuYmFzZSwgc3RydWN0IGNyeXB0b19pbnN0YW5jZSwgYWxnKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYWhhc2hfaW5zdGFuY2UgKmFoYXNoX2luc3RhbmNlKAorCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZigmaW5zdC0+YWxnLCBzdHJ1Y3QgYWhhc2hfaW5zdGFuY2UsIGFsZy5oYWxnLmJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmFoYXNoX2luc3RhbmNlX2N0eChzdHJ1Y3QgYWhhc2hfaW5zdGFuY2UgKmluc3QpCit7CisJcmV0dXJuIGNyeXB0b19pbnN0YW5jZV9jdHgoYWhhc2hfY3J5cHRvX2luc3RhbmNlKGluc3QpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWhhc2hfaW5zdGFuY2VfaGVhZHJvb20odm9pZCkKK3sKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBhaGFzaF9hbGcpIC0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fYWxnKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYWhhc2hfaW5zdGFuY2UgKmFoYXNoX2FsbG9jX2luc3RhbmNlKAorCWNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCit7CisJcmV0dXJuIGNyeXB0b19hbGxvY19pbnN0YW5jZTIobmFtZSwgYWxnLCBhaGFzaF9pbnN0YW5jZV9oZWFkcm9vbSgpKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX2FoYXNoICpjcnlwdG9fc3Bhd25fYWhhc2goCisJc3RydWN0IGNyeXB0b19haGFzaF9zcGF3biAqc3Bhd24pCit7CisJcmV0dXJuIGNyeXB0b19zcGF3bl90Zm0yKCZzcGF3bi0+YmFzZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFoYXNoX2VucXVldWVfcmVxdWVzdChzdHJ1Y3QgY3J5cHRvX3F1ZXVlICpxdWV1ZSwKQEAgLTgwLDUgKzE3OCw0NiBAQAogCXJldHVybiBjcnlwdG9fdGZtX2N0eCgmdGZtLT5iYXNlKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpzaGFzaF9jcnlwdG9faW5zdGFuY2UoCisJc3RydWN0IHNoYXNoX2luc3RhbmNlICppbnN0KQoreworCXJldHVybiBjb250YWluZXJfb2YoJmluc3QtPmFsZy5iYXNlLCBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlLCBhbGcpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzaGFzaF9pbnN0YW5jZSAqc2hhc2hfaW5zdGFuY2UoCisJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKF9fY3J5cHRvX3NoYXNoX2FsZygmaW5zdC0+YWxnKSwKKwkJCSAgICBzdHJ1Y3Qgc2hhc2hfaW5zdGFuY2UsIGFsZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqc2hhc2hfaW5zdGFuY2VfY3R4KHN0cnVjdCBzaGFzaF9pbnN0YW5jZSAqaW5zdCkKK3sKKwlyZXR1cm4gY3J5cHRvX2luc3RhbmNlX2N0eChzaGFzaF9jcnlwdG9faW5zdGFuY2UoaW5zdCkpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzaGFzaF9pbnN0YW5jZSAqc2hhc2hfYWxsb2NfaW5zdGFuY2UoCisJY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGNyeXB0b19hbGcgKmFsZykKK3sKKwlyZXR1cm4gY3J5cHRvX2FsbG9jX2luc3RhbmNlMihuYW1lLCBhbGcsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzaGFzaF9hbGcpIC0gc2l6ZW9mKCphbGcpKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX3NoYXNoICpjcnlwdG9fc3Bhd25fc2hhc2goCisJc3RydWN0IGNyeXB0b19zaGFzaF9zcGF3biAqc3Bhd24pCit7CisJcmV0dXJuIGNyeXB0b19zcGF3bl90Zm0yKCZzcGF3bi0+YmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqY3J5cHRvX3NoYXNoX2N0eF9hbGlnbmVkKHN0cnVjdCBjcnlwdG9fc2hhc2ggKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX3RmbV9jdHhfYWxpZ25lZCgmdGZtLT5iYXNlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX3NoYXNoICpfX2NyeXB0b19zaGFzaF9jYXN0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih0Zm0sIHN0cnVjdCBjcnlwdG9fc2hhc2gsIGJhc2UpOworfQorCiAjZW5kaWYJLyogX0NSWVBUT19JTlRFUk5BTF9IQVNIX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vc2hhLmggYi9pbmNsdWRlL2NyeXB0by9zaGEuaAppbmRleCBjMGNjYzJiLi4wNjllODViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NyeXB0by9zaGEuaAorKysgYi9pbmNsdWRlL2NyeXB0by9zaGEuaApAQCAtNSw2ICs1LDggQEAKICNpZm5kZWYgX0NSWVBUT19TSEFfSAogI2RlZmluZSBfQ1JZUFRPX1NIQV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFNIQTFfRElHRVNUX1NJWkUgICAgICAgIDIwCiAjZGVmaW5lIFNIQTFfQkxPQ0tfU0laRSAgICAgICAgIDY0CiAKQEAgLTYyLDQgKzY0LDIyIEBACiAjZGVmaW5lIFNIQTUxMl9INgkweDFmODNkOWFiZmI0MWJkNmJVTEwKICNkZWZpbmUgU0hBNTEyX0g3CTB4NWJlMGNkMTkxMzdlMjE3OVVMTAogCitzdHJ1Y3Qgc2hhMV9zdGF0ZSB7CisJdTY0IGNvdW50OworCXUzMiBzdGF0ZVtTSEExX0RJR0VTVF9TSVpFIC8gNF07CisJdTggYnVmZmVyW1NIQTFfQkxPQ0tfU0laRV07Cit9OworCitzdHJ1Y3Qgc2hhMjU2X3N0YXRlIHsKKwl1NjQgY291bnQ7CisJdTMyIHN0YXRlW1NIQTI1Nl9ESUdFU1RfU0laRSAvIDRdOworCXU4IGJ1ZltTSEEyNTZfQkxPQ0tfU0laRV07Cit9OworCitzdHJ1Y3Qgc2hhNTEyX3N0YXRlIHsKKwl1NjQgY291bnRbMl07CisJdTY0IHN0YXRlW1NIQTUxMl9ESUdFU1RfU0laRSAvIDhdOworCXU4IGJ1ZltTSEE1MTJfQkxPQ0tfU0laRV07Cit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL3ZtYWMuaCBiL2luY2x1ZGUvY3J5cHRvL3ZtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDQ2N2M1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jcnlwdG8vdm1hYy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBNb2RpZmllZCB0byBpbnRlcmZhY2UgdG8gdGhlIExpbnV4IGtlcm5lbAorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQorICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKi8KKworI2lmbmRlZiBfX0NSWVBUT19WTUFDX0gKKyNkZWZpbmUgX19DUllQVE9fVk1BQ19ICisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBWTUFDIGFuZCBWSEFTSCBJbXBsZW1lbnRhdGlvbiBieSBUZWQgS3JvdmV0eiAodGRrQGFjbS5vcmcpIGFuZCBXZWkgRGFpLgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBoZXJieSBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKiBUaGUgYXV0aG9ycyBvZmZlcnMgbm8gd2FycmFudHkuIFVzZSBhdCB5b3VyIG93biByaXNrLgorICogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gdGhlIGF1dGhvcnMuCisgKiBMYXN0IG1vZGlmaWVkOiAxNyBBUFIgMDgsIDE3MDAgUERUCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVXNlciBkZWZpbmFibGUgc2V0dGluZ3MuCisgKi8KKyNkZWZpbmUgVk1BQ19UQUdfTEVOCTY0CisjZGVmaW5lIFZNQUNfS0VZX1NJWkUJMTI4LyogTXVzdCBiZSAxMjgsIDE5MiBvciAyNTYJCQkqLworI2RlZmluZSBWTUFDX0tFWV9MRU4JKFZNQUNfS0VZX1NJWkUvOCkKKyNkZWZpbmUgVk1BQ19OSEJZVEVTCTEyOC8qIE11c3QgMl5pIGZvciBhbnkgMyA8IGkgPCAxMyBTdGFuZGFyZCA9IDEyOCovCisKKy8qCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgdTMyIGFuZCB1NjQgYXMgbmFtZXMgZm9yIHVuc2lnbmVkIDMyLQorICogYW5kIDY0LWJpdCBpbnRlZ2VyIHR5cGVzLiBUaGVzZSBhcmUgZGVmaW5lZCBpbiBDOTkgc3RkaW50LmguIFRoZQorICogZm9sbG93aW5nIG1heSBuZWVkIGFkYXB0YXRpb24gaWYgeW91IGFyZSBub3QgcnVubmluZyBhIEM5OSBvcgorICogTWljcm9zb2Z0IEMgZW52aXJvbm1lbnQuCisgKi8KK3N0cnVjdCB2bWFjX2N0eCB7CisJdTY0IG5oa2V5WyhWTUFDX05IQllURVMvOCkrMiooVk1BQ19UQUdfTEVOLzY0LTEpXTsKKwl1NjQgcG9seWtleVsyKlZNQUNfVEFHX0xFTi82NF07CisJdTY0IGwza2V5WzIqVk1BQ19UQUdfTEVOLzY0XTsKKwl1NjQgcG9seXRtcFsyKlZNQUNfVEFHX0xFTi82NF07CisJdTY0IGNhY2hlZF9ub25jZVsyXTsKKwl1NjQgY2FjaGVkX2Flc1syXTsKKwlpbnQgZmlyc3RfYmxvY2tfcHJvY2Vzc2VkOworfTsKKwordHlwZWRlZiB1NjQgdm1hY190OworCitzdHJ1Y3Qgdm1hY19jdHhfdCB7CisJc3RydWN0IGNyeXB0b19jaXBoZXIgKmNoaWxkOworCXN0cnVjdCB2bWFjX2N0eCBfX3ZtYWNfY3R4OworfTsKKworI2VuZGlmIC8qIF9fQ1JZUFRPX1ZNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCAzMzRhMzU5Li5jZmY0YTEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMjY4LDYgKzI2OCwxMCBAQAogICAgICAgCQkgICQoc3JjdHJlZSkvaW5jbHVkZS9hc20tJChTUkNBUkNIKS9rdm0uaCksKQogdW5pZmRlZi15ICs9IGt2bS5oCiBlbmRpZgoraWZuZXEgKCQod2lsZGNhcmQgJChzcmN0cmVlKS9hcmNoLyQoU1JDQVJDSCkvaW5jbHVkZS9hc20va3ZtX3BhcmEuaCBcCisJCSAgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS0kKFNSQ0FSQ0gpL2t2bV9wYXJhLmgpLCkKK3VuaWZkZWYteSArPSBrdm1fcGFyYS5oCitlbmRpZgogdW5pZmRlZi15ICs9IGxsYy5oCiB1bmlmZGVmLXkgKz0gbG9vcC5oCiB1bmlmZGVmLXkgKz0gbHAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hZ3BfYmFja2VuZC5oIGIvaW5jbHVkZS9saW51eC9hZ3BfYmFja2VuZC5oCmluZGV4IDc2ZmE3OTQuLjg4MDEzMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWdwX2JhY2tlbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FncF9iYWNrZW5kLmgKQEAgLTc5LDkgKzc5LDEyIEBACiAJdTMyIHBoeXNpY2FsOwogCWJvb2wgaXNfYm91bmQ7CiAJYm9vbCBpc19mbHVzaGVkOwotICAgICAgICBib29sIHZtYWxsb2NfZmxhZzsKKwlib29sIHZtYWxsb2NfZmxhZzsKIAkvKiBsaXN0IG9mIGFncF9tZW1vcnkgbWFwcGVkIHRvIHRoZSBhcGVydHVyZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbWFwcGVkX2xpc3Q7CisJLyogRE1BLW1hcHBlZCBhZGRyZXNzZXMgKi8KKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2xpc3Q7CisJaW50IG51bV9zZzsKIH07CiAKICNkZWZpbmUgQUdQX05PUk1BTF9NRU1PUlkgMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hbWJhL2J1cy5oIGIvaW5jbHVkZS9saW51eC9hbWJhL2J1cy5oCmluZGV4IDliOTNjYWYuLmFiOTQzMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYW1iYS9idXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FtYmEvYnVzLmgKQEAgLTM2LDYgKzM2LDExIEBACiAJc3RydWN0IGFtYmFfaWQJCSppZF90YWJsZTsKIH07CiAKK2VudW0gYW1iYV92ZW5kb3IgeworCUFNQkFfVkVORE9SX0FSTSA9IDB4NDEsCisJQU1CQV9WRU5ET1JfU1QgPSAweDgwLAorfTsKKwogI2RlZmluZSBhbWJhX2dldF9kcnZkYXRhKGQpCWRldl9nZXRfZHJ2ZGF0YSgmZC0+ZGV2KQogI2RlZmluZSBhbWJhX3NldF9kcnZkYXRhKGQscCkJZGV2X3NldF9kcnZkYXRhKCZkLT5kZXYsIHApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1iYS9wbDA5My5oIGIvaW5jbHVkZS9saW51eC9hbWJhL3BsMDkzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4M2UzNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9wbDA5My5oCkBAIC0wLDAgKzEsODAgQEAKKy8qIGxpbnV4L2FtYmEvcGwwOTMuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogQU1CQSBQTDA5MyBTU01DIChzeW5jaHJvbm91cyBzdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIpCisgKiAgU2VlIERESTAyMzYucGRmIChyMHA0KSBmb3IgbW9yZSBkZXRhaWxzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgU01CX0JBTksoeCkJKCh4KSAqIDB4MjApIC8qIGVhY2ggYmFuayBjb250cm9sIHNldCBpcyAweDIwIGFwYXJ0ICovCisKKy8qIE9mZnNldHMgZm9yIFNNQnh4eHhSeSByZWdpc3RlcnMgKi8KKworI2RlZmluZSBTTUJJRENZUgkoMHgwMCkKKyNkZWZpbmUgU01CV1NUUkRSCSgweDA0KQorI2RlZmluZSBTTUJXU1RXUlIJKDB4MDgpCisjZGVmaW5lIFNNQldTVE9FTlIJKDB4MEMpCisjZGVmaW5lIFNNQldTVFdFTlIJKDB4MTApCisjZGVmaW5lIFNNQkNSCQkoMHgxNCkKKyNkZWZpbmUgU01CU1IJCSgweDE4KQorI2RlZmluZSBTTUJXU1RCUkRSCSgweDFDKQorCisvKiBNYXNrcyBmb3IgU01CIHJlZ2lzdGVycyAqLworI2RlZmluZSBJRENZX01BU0sJKDB4ZikKKyNkZWZpbmUgV1NUUkRfTUFTSwkoMHhmKQorI2RlZmluZSBXU1RXUl9NQVNLCSgweGYpCisjZGVmaW5lIFdTVE9FTl9NQVNLCSgweGYpCisjZGVmaW5lIFdTVFdFTl9NQVNLCSgweGYpCisKKy8qIE5vdGVzIGZyb20gZGF0YXNoZWV0OgorICoJV1NUT0VOIDw9IFdTVFJECisgKglXU1RXRU4gPD0gV1NUV1IKKyAqCisgKiBXU1RPRU4gaXMgbm90IHVzZWQgd2l0aCBuV0FJVAorICovCisKKy8qIFNNQkNSIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBTTUJDUl9CSVdSSVRFRU4JCSgxIDw8IDIxKQorI2RlZmluZSBTTUJDUl9BRERSVkFMSURXUklURUVOCSgxIDw8IDIwKQorI2RlZmluZSBTTUJDUl9TWU5DV1JJVEUJCSgxIDw8IDE3KQorI2RlZmluZSBTTUJDUl9CTVdSSVRFCQkoMSA8PCAxNikKKyNkZWZpbmUgU01CQ1JfV1JBUFJFQUQJCSgxIDw8IDE0KQorI2RlZmluZSBTTUJDUl9CSVJFQURFTgkJKDEgPDwgMTMpCisjZGVmaW5lIFNNQkNSX0FERFJWQUxJRFJFQURFTgkoMSA8PCAxMikKKyNkZWZpbmUgU01CQ1JfU1lOQ1JFQUQJCSgxIDw8IDkpCisjZGVmaW5lIFNNQkNSX0JNUkVBRAkJKDEgPDwgOCkKKyNkZWZpbmUgU01CQ1JfU01CTFNQT0wJCSgxIDw8IDYpCisjZGVmaW5lIFNNQkNSX1dQCQkoMSA8PCAzKQorI2RlZmluZSBTTUJDUl9XQUlURU4JCSgxIDw8IDIpCisjZGVmaW5lIFNNQkNSX1dBSVRQT0wJCSgxIDw8IDEpCisjZGVmaW5lIFNNQkNSX1JCTEUJCSgxIDw8IDApCisKKyNkZWZpbmUgU01CQ1JfQlVSU1RMRU5XUklURV9NQVNLCSgzIDw8IDE4KQorI2RlZmluZSBTTUJDUl9CVVJTVExFTldSSVRFXzQJCSgwIDw8IDE4KQorI2RlZmluZSBTTUJDUl9CVVJTVExFTldSSVRFXzgJCSgxIDw8IDE4KQorI2RlZmluZSBTTUJDUl9CVVJTVExFTldSSVRFX1JFU0VSVkVECSgyIDw8IDE4KQorI2RlZmluZSBTTUJDUl9CVVJTVExFTldSSVRFX0NPTlRJTlVPVVMJKDMgPDwgMTgpCisKKyNkZWZpbmUgU01CQ1JfQlVSU1RMRU5SRUFEX01BU0sJCSgzIDw8IDEwKQorI2RlZmluZSBTTUJDUl9CVVJTVExFTlJFQURfNAkJKDAgPDwgMTApCisjZGVmaW5lIFNNQkNSX0JVUlNUTEVOUkVBRF84CQkoMSA8PCAxMCkKKyNkZWZpbmUgU01CQ1JfQlVSU1RMRU5SRUFEXzE2CQkoMiA8PCAxMCkKKyNkZWZpbmUgU01CQ1JfQlVSU1RMRU5SRUFEX0NPTlRJTlVPVVMJKDMgPDwgMTApCisKKyNkZWZpbmUgU01CQ1JfTVdfTUFTSwkJCSgzIDw8IDQpCisjZGVmaW5lIFNNQkNSX01XXzhCSVQJCQkoMCA8PCA0KQorI2RlZmluZSBTTUJDUl9NV18xNkJJVAkJCSgxIDw8IDQpCisjZGVmaW5lIFNNQkNSX01XX00zMkJJVAkJCSgyIDw8IDQpCisKKy8qIFNTTUMgc3RhdHVzIHJlZ2lzdGVycyAqLworI2RlZmluZSBTU01DQ1NSCQkoMHgyMDApCisjZGVmaW5lIFNTTUNDUgkJKDB4MjA0KQorI2RlZmluZSBTU01DSVRDUgkoMHgyMDgpCisjZGVmaW5lIFNTTUNJVElQCSgweDIwQykKKyNkZWZpbmUgU1NNQ0lUSU9QCSgweDIxMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2FyY2RldmljZS5oCmluZGV4IGNkNGJjYjYuLjdkNjUwYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaApAQCAtMzM3LDcgKzMzNyw4IEBACiAKIGludCBhcmNuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBhcmNuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1pbnQgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworbmV0ZGV2X3R4X3QgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgYXJjbmV0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKICNlbmRpZgkJCQkvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0YS5oIGIvaW5jbHVkZS9saW51eC9hdGEuaAppbmRleCA5Yzc1OTIxLi42Mjk5YTI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRhLmgKQEAgLTIxMCwxNSArMjEwLDI1IEBACiAJQVRBX0NNRF9TVEFOREJZCQk9IDB4RTIsIC8qIHBsYWNlIGluIHN0YW5kYnkgcG93ZXIgbW9kZSAqLwogCUFUQV9DTURfSURMRQkJPSAweEUzLCAvKiBwbGFjZSBpbiBpZGxlIHBvd2VyIG1vZGUgKi8KIAlBVEFfQ01EX0VERAkJPSAweDkwLAkvKiBleGVjdXRlIGRldmljZSBkaWFnbm9zdGljICovCisJQVRBX0NNRF9ET1dOTE9BRF9NSUNSTyAgPSAweDkyLAorCUFUQV9DTURfTk9QCQk9IDB4MDAsCiAJQVRBX0NNRF9GTFVTSAkJPSAweEU3LAogCUFUQV9DTURfRkxVU0hfRVhUCT0gMHhFQSwKIAlBVEFfQ01EX0lEX0FUQQkJPSAweEVDLAogCUFUQV9DTURfSURfQVRBUEkJPSAweEExLAorCUFUQV9DTURfU0VSVklDRQkJPSAweEEyLAogCUFUQV9DTURfUkVBRAkJPSAweEM4LAogCUFUQV9DTURfUkVBRF9FWFQJPSAweDI1LAorCUFUQV9DTURfUkVBRF9RVUVVRUQJPSAweDI2LAorCUFUQV9DTURfUkVBRF9TVFJFQU1fRVhUCT0gMHgyQiwKKwlBVEFfQ01EX1JFQURfU1RSRUFNX0RNQV9FWFQgPSAweDJBLAogCUFUQV9DTURfV1JJVEUJCT0gMHhDQSwKIAlBVEFfQ01EX1dSSVRFX0VYVAk9IDB4MzUsCisJQVRBX0NNRF9XUklURV9RVUVVRUQJPSAweDM2LAorCUFUQV9DTURfV1JJVEVfU1RSRUFNX0VYVCA9IDB4M0IsCisJQVRBX0NNRF9XUklURV9TVFJFQU1fRE1BX0VYVCA9IDB4M0EsCiAJQVRBX0NNRF9XUklURV9GVUFfRVhUCT0gMHgzRCwKKwlBVEFfQ01EX1dSSVRFX1FVRVVFRF9GVUFfRVhUID0gMHgzRSwKIAlBVEFfQ01EX0ZQRE1BX1JFQUQJPSAweDYwLAogCUFUQV9DTURfRlBETUFfV1JJVEUJPSAweDYxLAogCUFUQV9DTURfUElPX1JFQUQJPSAweDIwLApAQCAtMjM1LDYgKzI0NSw3IEBACiAJQVRBX0NNRF9QQUNLRVQJCT0gMHhBMCwKIAlBVEFfQ01EX1ZFUklGWQkJPSAweDQwLAogCUFUQV9DTURfVkVSSUZZX0VYVAk9IDB4NDIsCisJQVRBX0NNRF9XUklURV9VTkNPUlJfRVhUID0gMHg0NSwKIAlBVEFfQ01EX1NUQU5EQllOT1cxCT0gMHhFMCwKIAlBVEFfQ01EX0lETEVJTU1FRElBVEUJPSAweEUxLAogCUFUQV9DTURfU0xFRVAJCT0gMHhFNiwKQEAgLTI0MywxNSArMjU0LDM0IEBACiAJQVRBX0NNRF9SRUFEX05BVElWRV9NQVhfRVhUID0gMHgyNywKIAlBVEFfQ01EX1NFVF9NQVgJCT0gMHhGOSwKIAlBVEFfQ01EX1NFVF9NQVhfRVhUCT0gMHgzNywKLQlBVEFfQ01EX1JFQURfTE9HX0VYVAk9IDB4MmYsCisJQVRBX0NNRF9SRUFEX0xPR19FWFQJPSAweDJGLAorCUFUQV9DTURfV1JJVEVfTE9HX0VYVAk9IDB4M0YsCisJQVRBX0NNRF9SRUFEX0xPR19ETUFfRVhUID0gMHg0NywKKwlBVEFfQ01EX1dSSVRFX0xPR19ETUFfRVhUID0gMHg1NywKKwlBVEFfQ01EX1RSVVNURURfUkNWCT0gMHg1QywKKwlBVEFfQ01EX1RSVVNURURfUkNWX0RNQSA9IDB4NUQsCisJQVRBX0NNRF9UUlVTVEVEX1NORAk9IDB4NUUsCisJQVRBX0NNRF9UUlVTVEVEX1NORF9ETUEgPSAweDVGLAogCUFUQV9DTURfUE1QX1JFQUQJPSAweEU0LAogCUFUQV9DTURfUE1QX1dSSVRFCT0gMHhFOCwKIAlBVEFfQ01EX0NPTkZfT1ZFUkxBWQk9IDB4QjEsCisJQVRBX0NNRF9TRUNfU0VUX1BBU1MJPSAweEYxLAorCUFUQV9DTURfU0VDX1VOTE9DSwk9IDB4RjIsCisJQVRBX0NNRF9TRUNfRVJBU0VfUFJFUAk9IDB4RjMsCisJQVRBX0NNRF9TRUNfRVJBU0VfVU5JVAk9IDB4RjQsCiAJQVRBX0NNRF9TRUNfRlJFRVpFX0xPQ0sJPSAweEY1LAorCUFUQV9DTURfU0VDX0RJU0FCTEVfUEFTUyA9IDB4RjYsCisJQVRBX0NNRF9DT05GSUdfU1RSRUFNCT0gMHg1MSwKIAlBVEFfQ01EX1NNQVJUCQk9IDB4QjAsCiAJQVRBX0NNRF9NRURJQV9MT0NLCT0gMHhERSwKIAlBVEFfQ01EX01FRElBX1VOTE9DSwk9IDB4REYsCiAJQVRBX0NNRF9EU00JCT0gMHgwNiwKKwlBVEFfQ01EX0NIS19NRURfQ1JEX1RZUCA9IDB4RDEsCisJQVRBX0NNRF9DRkFfUkVRX0VYVF9FUlIgPSAweDAzLAorCUFUQV9DTURfQ0ZBX1dSSVRFX05FCT0gMHgzOCwKKwlBVEFfQ01EX0NGQV9UUkFOU19TRUNUCT0gMHg4NywKKwlBVEFfQ01EX0NGQV9FUkFTRQk9IDB4QzAsCisJQVRBX0NNRF9DRkFfV1JJVEVfTVVMVF9ORSA9IDB4Q0QsCiAJLyogbWFya2VkIG9ic29sZXRlIGluIHRoZSBBVEEvQVRBUEktNyBzcGVjICovCiAJQVRBX0NNRF9SRVNUT1JFCQk9IDB4MTAsCiAKQEAgLTMwNiw2ICszMzYsNyBAQAogCS8qIFNFVEZFQVRVUkUgU2VjdG9yIGNvdW50cyBmb3IgU0FUQSBmZWF0dXJlcyAqLwogCVNBVEFfQU4JCQk9IDB4MDUsICAvKiBBc3luY2hyb25vdXMgTm90aWZpY2F0aW9uICovCiAJU0FUQV9ESVBNCQk9IDB4MDMsICAvKiBEZXZpY2UgSW5pdGlhdGVkIFBvd2VyIE1hbmFnZW1lbnQgKi8KKwlTQVRBX0ZQRE1BX0FBCQk9IDB4MDIsICAvKiBETUEgU2V0dXAgRklTIEF1dG8tQWN0aXZhdGUgKi8KIAogCS8qIGZlYXR1cmUgdmFsdWVzIGZvciBTRVRfTUFYICovCiAJQVRBX1NFVF9NQVhfQUREUgk9IDB4MDAsCkBAIC01MjUsNiArNTU2LDkgQEAKICNkZWZpbmUgYXRhX2lkX2hhc19hdGFwaV9BTihpZCkJXAogCSggKCgoaWQpWzc2XSAhPSAweDAwMDApICYmICgoaWQpWzc2XSAhPSAweGZmZmYpKSAmJiBcCiAJICAoKGlkKVs3OF0gJiAoMSA8PCA1KSkgKQorI2RlZmluZSBhdGFfaWRfaGFzX2ZwZG1hX2FhKGlkKQlcCisJKCAoKChpZClbNzZdICE9IDB4MDAwMCkgJiYgKChpZClbNzZdICE9IDB4ZmZmZikpICYmIFwKKwkgICgoaWQpWzc4XSAmICgxIDw8IDIpKSApCiAjZGVmaW5lIGF0YV9pZF9pb3JkeV9kaXNhYmxlKGlkKSAoKGlkKVtBVEFfSURfQ0FQQUJJTElUWV0gJiAoMSA8PCAxMCkpCiAjZGVmaW5lIGF0YV9pZF9oYXNfaW9yZHkoaWQpICgoaWQpW0FUQV9JRF9DQVBBQklMSVRZXSAmICgxIDw8IDExKSkKICNkZWZpbmUgYXRhX2lkX3UzMihpZCxuKQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKaW5kZXggMWQ1MjQyNS4uMGVlMzNjMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKQEAgLTEzLDYgKzEzLDggQEAKICNpbmNsdWRlIDxsaW51eC9wcm9wb3J0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIHN0cnVjdCBwYWdlOwpAQCAtMjMsOSArMjUsMTEgQEAKICAqIEJpdHMgaW4gYmFja2luZ19kZXZfaW5mby5zdGF0ZQogICovCiBlbnVtIGJkaV9zdGF0ZSB7Ci0JQkRJX3BkZmx1c2gsCQkvKiBBIHBkZmx1c2ggdGhyZWFkIGlzIHdvcmtpbmcgdGhpcyBkZXZpY2UgKi8KKwlCRElfcGVuZGluZywJCS8qIE9uIGl0cyB3YXkgdG8gYmVpbmcgYWN0aXZhdGVkICovCisJQkRJX3diX2FsbG9jLAkJLyogRGVmYXVsdCBlbWJlZGRlZCB3YiBhbGxvY2F0ZWQgKi8KIAlCRElfYXN5bmNfY29uZ2VzdGVkLAkvKiBUaGUgYXN5bmMgKHdyaXRlKSBxdWV1ZSBpcyBnZXR0aW5nIGZ1bGwgKi8KIAlCRElfc3luY19jb25nZXN0ZWQsCS8qIFRoZSBzeW5jIHF1ZXVlIGlzIGdldHRpbmcgZnVsbCAqLworCUJESV9yZWdpc3RlcmVkLAkJLyogYmRpX3JlZ2lzdGVyKCkgd2FzIGRvbmUgKi8KIAlCRElfdW51c2VkLAkJLyogQXZhaWxhYmxlIGJpdHMgc3RhcnQgaGVyZSAqLwogfTsKIApAQCAtMzksNyArNDMsMjMgQEAKIAogI2RlZmluZSBCRElfU1RBVF9CQVRDSCAoOCooMStpbG9nMihucl9jcHVfaWRzKSkpCiAKK3N0cnVjdCBiZGlfd3JpdGViYWNrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkJLyogaGFuZ3Mgb2ZmIHRoZSBiZGkgKi8KKworCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGk7CQkvKiBvdXIgcGFyZW50IGJkaSAqLworCXVuc2lnbmVkIGludCBucjsKKworCXVuc2lnbmVkIGxvbmcgbGFzdF9vbGRfZmx1c2g7CQkvKiBsYXN0IG9sZCBkYXRhIGZsdXNoICovCisKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CQkvKiB3cml0ZWJhY2sgdGFzayAqLworCXN0cnVjdCBsaXN0X2hlYWQJYl9kaXJ0eTsJLyogZGlydHkgaW5vZGVzICovCisJc3RydWN0IGxpc3RfaGVhZAliX2lvOwkJLyogcGFya2VkIGZvciB3cml0ZWJhY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWJfbW9yZV9pbzsJLyogcGFya2VkIGZvciBtb3JlIHdyaXRlYmFjayAqLworfTsKKwogc3RydWN0IGJhY2tpbmdfZGV2X2luZm8geworCXN0cnVjdCBsaXN0X2hlYWQgYmRpX2xpc3Q7CisJc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkOwogCXVuc2lnbmVkIGxvbmcgcmFfcGFnZXM7CS8qIG1heCByZWFkYWhlYWQgaW4gUEFHRV9DQUNIRV9TSVpFIHVuaXRzICovCiAJdW5zaWduZWQgbG9uZyBzdGF0ZTsJLyogQWx3YXlzIHVzZSBhdG9taWMgYml0b3BzIG9uIHRoaXMgKi8KIAl1bnNpZ25lZCBpbnQgY2FwYWJpbGl0aWVzOyAvKiBEZXZpY2UgY2FwYWJpbGl0aWVzICovCkBAIC00OCw2ICs2OCw4IEBACiAJdm9pZCAoKnVucGx1Z19pb19mbikoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKiwgc3RydWN0IHBhZ2UgKik7CiAJdm9pZCAqdW5wbHVnX2lvX2RhdGE7CiAKKwljaGFyICpuYW1lOworCiAJc3RydWN0IHBlcmNwdV9jb3VudGVyIGJkaV9zdGF0W05SX0JESV9TVEFUX0lURU1TXTsKIAogCXN0cnVjdCBwcm9wX2xvY2FsX3BlcmNwdSBjb21wbGV0aW9uczsKQEAgLTU2LDYgKzc4LDE0IEBACiAJdW5zaWduZWQgaW50IG1pbl9yYXRpbzsKIAl1bnNpZ25lZCBpbnQgbWF4X3JhdGlvLCBtYXhfcHJvcF9mcmFjOwogCisJc3RydWN0IGJkaV93cml0ZWJhY2sgd2I7ICAvKiBkZWZhdWx0IHdyaXRlYmFjayBpbmZvIGZvciB0aGlzIGJkaSAqLworCXNwaW5sb2NrX3Qgd2JfbG9jazsJICAvKiBwcm90ZWN0cyB1cGRhdGUgc2lkZSBvZiB3Yl9saXN0ICovCisJc3RydWN0IGxpc3RfaGVhZCB3Yl9saXN0OyAvKiB0aGUgZmx1c2hlciB0aHJlYWRzIGhhbmdpbmcgb2ZmIHRoaXMgYmRpICovCisJdW5zaWduZWQgbG9uZyB3Yl9tYXNrOwkgIC8qIGJpdG1hc2sgb2YgcmVnaXN0ZXJlZCB0YXNrcyAqLworCXVuc2lnbmVkIGludCB3Yl9jbnQ7CSAgLyogbnVtYmVyIG9mIHJlZ2lzdGVyZWQgdGFza3MgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQgd29ya19saXN0OworCiAJc3RydWN0IGRldmljZSAqZGV2OwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCkBAIC03MSw2ICsxMDEsMTkgQEAKIAkJY29uc3QgY2hhciAqZm10LCAuLi4pOwogaW50IGJkaV9yZWdpc3Rlcl9kZXYoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgZGV2X3QgZGV2KTsKIHZvaWQgYmRpX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSk7Cit2b2lkIGJkaV9zdGFydF93cml0ZWJhY2soc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgbG9uZyBucl9wYWdlcyk7CitpbnQgYmRpX3dyaXRlYmFja190YXNrKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yik7CitpbnQgYmRpX2hhc19kaXJ0eV9pbyhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKTsKKworZXh0ZXJuIHNwaW5sb2NrX3QgYmRpX2xvY2s7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBiZGlfbGlzdDsKKworc3RhdGljIGlubGluZSBpbnQgd2JfaGFzX2RpcnR5X2lvKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YikKK3sKKwlyZXR1cm4gIWxpc3RfZW1wdHkoJndiLT5iX2RpcnR5KSB8fAorCSAgICAgICAhbGlzdF9lbXB0eSgmd2ItPmJfaW8pIHx8CisJICAgICAgICFsaXN0X2VtcHR5KCZ3Yi0+Yl9tb3JlX2lvKTsKK30KIAogc3RhdGljIGlubGluZSB2b2lkIF9fYWRkX2JkaV9zdGF0KHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksCiAJCWVudW0gYmRpX3N0YXRfaXRlbSBpdGVtLCBzNjQgYW1vdW50KQpAQCAtMjYxLDYgKzMwNCwxMSBAQAogCXJldHVybiBiZGktPmNhcGFiaWxpdGllcyAmIEJESV9DQVBfU1dBUF9CQUNLRUQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBiZGlfY2FwX2ZsdXNoX2ZvcmtlcihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQoreworCXJldHVybiBiZGkgPT0gJmRlZmF1bHRfYmFja2luZ19kZXZfaW5mbzsKK30KKwogc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfY2FwX3dyaXRlYmFja19kaXJ0eShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAlyZXR1cm4gYmRpX2NhcF93cml0ZWJhY2tfZGlydHkobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyk7CkBAIC0yNzYsNCArMzI0LDEwIEBACiAJcmV0dXJuIGJkaV9jYXBfc3dhcF9iYWNrZWQobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGJkaV9zY2hlZF93YWl0KHZvaWQgKndvcmQpCit7CisJc2NoZWR1bGUoKTsKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmCQkvKiBfTElOVVhfQkFDS0lOR19ERVZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmgKaW5kZXggMjg5MmI3MTAuLjViZTkzZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaW8uaApAQCAtMTQyLDU2ICsxNDIsNTEgQEAKICAqCiAgKiBiaXQgMCAtLSBkYXRhIGRpcmVjdGlvbgogICoJSWYgbm90IHNldCwgYmlvIGlzIGEgcmVhZCBmcm9tIGRldmljZS4gSWYgc2V0LCBpdCdzIGEgd3JpdGUgdG8gZGV2aWNlLgotICogYml0IDEgLS0gcnctYWhlYWQgd2hlbiBzZXQKLSAqIGJpdCAyIC0tIGJhcnJpZXIKKyAqIGJpdCAxIC0tIGZhaWwgZmFzdCBkZXZpY2UgZXJyb3JzCisgKiBiaXQgMiAtLSBmYWlsIGZhc3QgdHJhbnNwb3J0IGVycm9ycworICogYml0IDMgLS0gZmFpbCBmYXN0IGRyaXZlciBlcnJvcnMKKyAqIGJpdCA0IC0tIHJ3LWFoZWFkIHdoZW4gc2V0CisgKiBiaXQgNSAtLSBiYXJyaWVyCiAgKglJbnNlcnQgYSBzZXJpYWxpemF0aW9uIHBvaW50IGluIHRoZSBJTyBxdWV1ZSwgZm9yY2luZyBwcmV2aW91c2x5CiAgKglzdWJtaXR0ZWQgSU8gdG8gYmUgY29tcGxldGVkIGJlZm9yZSB0aGlzIG9uZSBpcyBpc3N1ZWQuCi0gKiBiaXQgMyAtLSBzeW5jaHJvbm91cyBJL08gaGludC4KLSAqIGJpdCA0IC0tIFVucGx1ZyB0aGUgZGV2aWNlIGltbWVkaWF0ZWx5IGFmdGVyIHN1Ym1pdHRpbmcgdGhpcyBiaW8uCi0gKiBiaXQgNSAtLSBtZXRhZGF0YSByZXF1ZXN0CisgKiBiaXQgNiAtLSBzeW5jaHJvbm91cyBJL08gaGludC4KKyAqIGJpdCA3IC0tIFVucGx1ZyB0aGUgZGV2aWNlIGltbWVkaWF0ZWx5IGFmdGVyIHN1Ym1pdHRpbmcgdGhpcyBiaW8uCisgKiBiaXQgOCAtLSBtZXRhZGF0YSByZXF1ZXN0CiAgKglVc2VkIGZvciB0cmFjaW5nIHRvIGRpZmZlcmVudGlhdGUgbWV0YWRhdGEgYW5kIGRhdGEgSU8uIE1heSBhbHNvCiAgKglnZXQgc29tZSBwcmVmZXJlbnRpYWwgdHJlYXRtZW50IGluIHRoZSBJTyBzY2hlZHVsZXIKLSAqIGJpdCA2IC0tIGRpc2NhcmQgc2VjdG9ycworICogYml0IDkgLS0gZGlzY2FyZCBzZWN0b3JzCiAgKglJbmZvcm1zIHRoZSBsb3dlciBsZXZlbCBkZXZpY2UgdGhhdCB0aGlzIHJhbmdlIG9mIHNlY3RvcnMgaXMgbm8gbG9uZ2VyCiAgKgl1c2VkIGJ5IHRoZSBmaWxlIHN5c3RlbSBhbmQgbWF5IHRodXMgYmUgZnJlZWQgYnkgdGhlIGRldmljZS4gVXNlZAogICoJZm9yIGZsYXNoIGJhc2VkIHN0b3JhZ2UuCi0gKiBiaXQgNyAtLSBmYWlsIGZhc3QgZGV2aWNlIGVycm9ycwotICogYml0IDggLS0gZmFpbCBmYXN0IHRyYW5zcG9ydCBlcnJvcnMKLSAqIGJpdCA5IC0tIGZhaWwgZmFzdCBkcml2ZXIgZXJyb3JzCiAgKglEb24ndCB3YW50IGRyaXZlciByZXRyaWVzIGZvciBhbnkgZmFzdCBmYWlsIHdoYXRldmVyIHRoZSByZWFzb24uCiAgKiBiaXQgMTAgLS0gVGVsbCB0aGUgSU8gc2NoZWR1bGVyIG5vdCB0byB3YWl0IGZvciBtb3JlIHJlcXVlc3RzIGFmdGVyIHRoaXMKIAlvbmUgaGFzIGJlZW4gc3VibWl0dGVkLCBldmVuIGlmIGl0IGlzIGEgU1lOQyByZXF1ZXN0LgogICovCi0jZGVmaW5lIEJJT19SVwkJMAkvKiBNdXN0IG1hdGNoIFJXIGluIHJlcSBmbGFncyAoYmxrZGV2LmgpICovCi0jZGVmaW5lIEJJT19SV19BSEVBRAkxCS8qIE11c3QgbWF0Y2ggRkFJTEZBU1QgaW4gcmVxIGZsYWdzICovCi0jZGVmaW5lIEJJT19SV19CQVJSSUVSCTIKLSNkZWZpbmUgQklPX1JXX1NZTkNJTwkzCi0jZGVmaW5lIEJJT19SV19VTlBMVUcJNAotI2RlZmluZSBCSU9fUldfTUVUQQk1Ci0jZGVmaW5lIEJJT19SV19ESVNDQVJECTYKLSNkZWZpbmUgQklPX1JXX0ZBSUxGQVNUX0RFVgkJNwotI2RlZmluZSBCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JUCTgKLSNkZWZpbmUgQklPX1JXX0ZBSUxGQVNUX0RSSVZFUgkJOQotI2RlZmluZSBCSU9fUldfTk9JRExFCTEwCi0KLSNkZWZpbmUgYmlvX3J3X2ZsYWdnZWQoYmlvLCBmbGFnKQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgKGZsYWcpKSkKK2VudW0gYmlvX3J3X2ZsYWdzIHsKKwlCSU9fUlcsCisJQklPX1JXX0ZBSUxGQVNUX0RFViwKKwlCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JULAorCUJJT19SV19GQUlMRkFTVF9EUklWRVIsCisJLyogYWJvdmUgZmxhZ3MgbXVzdCBtYXRjaCBSRVFfKiAqLworCUJJT19SV19BSEVBRCwKKwlCSU9fUldfQkFSUklFUiwKKwlCSU9fUldfU1lOQ0lPLAorCUJJT19SV19VTlBMVUcsCisJQklPX1JXX01FVEEsCisJQklPX1JXX0RJU0NBUkQsCisJQklPX1JXX05PSURMRSwKK307CiAKIC8qCi0gKiBPbGQgZGVmaW5lcywgdGhlc2Ugc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVwbGFjZWQgYnkgZGlyZWN0IHVzYWdlIG9mCi0gKiBiaW9fcndfZmxhZ2dlZCgpCisgKiBGaXJzdCBmb3VyIGJpdHMgbXVzdCBtYXRjaCBiZXR3ZWVuIGJpby0+YmlfcncgYW5kIHJxLT5jbWRfZmxhZ3MsIG1ha2UKKyAqIHRoYXQgZXhwbGljaXQgaGVyZS4KICAqLwotI2RlZmluZSBiaW9fYmFycmllcihiaW8pCWJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpCi0jZGVmaW5lIGJpb19zeW5jKGJpbykJCWJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTykKLSNkZWZpbmUgYmlvX3VucGx1ZyhiaW8pCQliaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19VTlBMVUcpCi0jZGVmaW5lIGJpb19mYWlsZmFzdF9kZXYoYmlvKQliaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19GQUlMRkFTVF9ERVYpCi0jZGVmaW5lIGJpb19mYWlsZmFzdF90cmFuc3BvcnQoYmlvKQlcCi0JCWJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0ZBSUxGQVNUX1RSQU5TUE9SVCkKLSNkZWZpbmUgYmlvX2ZhaWxmYXN0X2RyaXZlcihiaW8pIAlcCi0JCWJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0ZBSUxGQVNUX0RSSVZFUikKLSNkZWZpbmUgYmlvX3J3X2FoZWFkKGJpbykJYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQUhFQUQpCi0jZGVmaW5lIGJpb19yd19tZXRhKGJpbykJYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfTUVUQSkKLSNkZWZpbmUgYmlvX2Rpc2NhcmQoYmlvKQliaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19ESVNDQVJEKQotI2RlZmluZSBiaW9fbm9pZGxlKGJpbykJCWJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX05PSURMRSkKKyNkZWZpbmUgQklPX1JXX1JRX01BU0sJCTB4ZgorCitzdGF0aWMgaW5saW5lIGJvb2wgYmlvX3J3X2ZsYWdnZWQoc3RydWN0IGJpbyAqYmlvLCBlbnVtIGJpb19yd19mbGFncyBmbGFnKQoreworCXJldHVybiAoYmlvLT5iaV9ydyAmICgxIDw8IGZsYWcpKSAhPSAwOworfQogCiAvKgogICogdXBwZXIgMTYgYml0cyBvZiBiaV9ydyBkZWZpbmUgdGhlIGlvIHByaW9yaXR5IG9mIHRoaXMgYmlvCkBAIC0yMTYsNyArMjExLDcgQEAKICNkZWZpbmUgYmlvX29mZnNldChiaW8pCQliaW9faW92ZWMoKGJpbykpLT5idl9vZmZzZXQKICNkZWZpbmUgYmlvX3NlZ21lbnRzKGJpbykJKChiaW8pLT5iaV92Y250IC0gKGJpbyktPmJpX2lkeCkKICNkZWZpbmUgYmlvX3NlY3RvcnMoYmlvKQkoKGJpbyktPmJpX3NpemUgPj4gOSkKLSNkZWZpbmUgYmlvX2VtcHR5X2JhcnJpZXIoYmlvKQkoYmlvX2JhcnJpZXIoYmlvKSAmJiAhYmlvX2hhc19kYXRhKGJpbykgJiYgIWJpb19kaXNjYXJkKGJpbykpCisjZGVmaW5lIGJpb19lbXB0eV9iYXJyaWVyKGJpbykJKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpICYmICFiaW9faGFzX2RhdGEoYmlvKSAmJiAhYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRElTQ0FSRCkpCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJpb19jdXJfYnl0ZXMoc3RydWN0IGJpbyAqYmlvKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGstaW9wb2xsLmggYi9pbmNsdWRlL2xpbnV4L2Jsay1pb3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDg3MzRkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ibGstaW9wb2xsLmgKQEAgLTAsMCArMSw0OCBAQAorI2lmbmRlZiBCTEtfSU9QT0xMX0gKKyNkZWZpbmUgQkxLX0lPUE9MTF9ICisKK3N0cnVjdCBibGtfaW9wb2xsOwordHlwZWRlZiBpbnQgKGJsa19pb3BvbGxfZm4pKHN0cnVjdCBibGtfaW9wb2xsICosIGludCk7CisKK3N0cnVjdCBibGtfaW9wb2xsIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdW5zaWduZWQgbG9uZyBzdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGRhdGE7CisJaW50IHdlaWdodDsKKwlpbnQgbWF4OworCWJsa19pb3BvbGxfZm4gKnBvbGw7Cit9OworCitlbnVtIHsKKwlJT1BPTExfRl9TQ0hFRAkJPSAwLAorCUlPUE9MTF9GX0RJU0FCTEUJPSAxLAorfTsKKworLyoKKyAqIFJldHVybnMgMCBpZiB3ZSBzdWNjZXNzZnVsbHkgc2V0IHRoZSBJT1BPTExfRl9TQ0hFRCBiaXQsIGluZGljYXRpbmcKKyAqIHRoYXQgd2Ugd2VyZSB0aGUgZmlyc3QgdG8gYWNxdWlyZSB0aGlzIGlvcCBmb3Igc2NoZWR1bGluZy4gSWYgdGhpcyBpb3AKKyAqIGlzIGN1cnJlbnRseSBkaXNhYmxlZCwgcmV0dXJuICJmYWlsdXJlIi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYmxrX2lvcG9sbF9zY2hlZF9wcmVwKHN0cnVjdCBibGtfaW9wb2xsICppb3ApCit7CisJaWYgKCF0ZXN0X2JpdChJT1BPTExfRl9ESVNBQkxFLCAmaW9wLT5zdGF0ZSkpCisJCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KElPUE9MTF9GX1NDSEVELCAmaW9wLT5zdGF0ZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYmxrX2lvcG9sbF9kaXNhYmxlX3BlbmRpbmcoc3RydWN0IGJsa19pb3BvbGwgKmlvcCkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoSU9QT0xMX0ZfRElTQUJMRSwgJmlvcC0+c3RhdGUpOworfQorCitleHRlcm4gdm9pZCBibGtfaW9wb2xsX3NjaGVkKHN0cnVjdCBibGtfaW9wb2xsICopOworZXh0ZXJuIHZvaWQgYmxrX2lvcG9sbF9pbml0KHN0cnVjdCBibGtfaW9wb2xsICosIGludCwgYmxrX2lvcG9sbF9mbiAqKTsKK2V4dGVybiB2b2lkIGJsa19pb3BvbGxfY29tcGxldGUoc3RydWN0IGJsa19pb3BvbGwgKik7CitleHRlcm4gdm9pZCBfX2Jsa19pb3BvbGxfY29tcGxldGUoc3RydWN0IGJsa19pb3BvbGwgKik7CitleHRlcm4gdm9pZCBibGtfaW9wb2xsX2VuYWJsZShzdHJ1Y3QgYmxrX2lvcG9sbCAqKTsKK2V4dGVybiB2b2lkIGJsa19pb3BvbGxfZGlzYWJsZShzdHJ1Y3QgYmxrX2lvcG9sbCAqKTsKKworZXh0ZXJuIGludCBibGtfaW9wb2xsX2VuYWJsZWQ7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNjkxMDNlMC4uZTIzYTg2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC04NiwxMyArODYsMTQgQEAKIH07CiAKIC8qCi0gKiByZXF1ZXN0IHR5cGUgbW9kaWZpZWQgYml0cy4gZmlyc3QgdHdvIGJpdHMgbWF0Y2ggQklPX1JXKiBiaXRzLCBpbXBvcnRhbnQKKyAqIHJlcXVlc3QgdHlwZSBtb2RpZmllZCBiaXRzLiBmaXJzdCBmb3VyIGJpdHMgbWF0Y2ggQklPX1JXKiBiaXRzLCBpbXBvcnRhbnQKICAqLwogZW51bSBycV9mbGFnX2JpdHMgewogCV9fUkVRX1JXLAkJLyogbm90IHNldCwgcmVhZC4gc2V0LCB3cml0ZSAqLwogCV9fUkVRX0ZBSUxGQVNUX0RFViwJLyogbm8gZHJpdmVyIHJldHJpZXMgb2YgZGV2aWNlIGVycm9ycyAqLwogCV9fUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCwgLyogbm8gZHJpdmVyIHJldHJpZXMgb2YgdHJhbnNwb3J0IGVycm9ycyAqLwogCV9fUkVRX0ZBSUxGQVNUX0RSSVZFUiwJLyogbm8gZHJpdmVyIHJldHJpZXMgb2YgZHJpdmVyIGVycm9ycyAqLworCS8qIGFib3ZlIGZsYWdzIG11c3QgbWF0Y2ggQklPX1JXXyogKi8KIAlfX1JFUV9ESVNDQVJELAkJLyogcmVxdWVzdCB0byBkaXNjYXJkIHNlY3RvcnMgKi8KIAlfX1JFUV9TT1JURUQsCQkvKiBlbGV2YXRvciBrbm93cyBhYm91dCB0aGlzIHJlcXVlc3QgKi8KIAlfX1JFUV9TT0ZUQkFSUklFUiwJLyogbWF5IG5vdCBiZSBwYXNzZWQgYnkgaW9zY2hlZHVsZXIgKi8KQEAgLTExNCw2ICsxMTUsNyBAQAogCV9fUkVRX0lOVEVHUklUWSwJLyogaW50ZWdyaXR5IG1ldGFkYXRhIGhhcyBiZWVuIHJlbWFwcGVkICovCiAJX19SRVFfTk9JRExFLAkJLyogRG9uJ3QgYW50aWNpcGF0ZSBtb3JlIElPIGFmdGVyIHRoaXMgb25lICovCiAJX19SRVFfSU9fU1RBVCwJCS8qIGFjY291bnQgSS9PIHN0YXQgKi8KKwlfX1JFUV9NSVhFRF9NRVJHRSwJLyogbWVyZ2Ugb2YgZGlmZmVyZW50IHR5cGVzLCBmYWlsIHNlcGFyYXRlbHkgKi8KIAlfX1JFUV9OUl9CSVRTLAkJLyogc3RvcHMgaGVyZSAqLwogfTsKIApAQCAtMTQyLDYgKzE0NCwxMCBAQAogI2RlZmluZSBSRVFfSU5URUdSSVRZCSgxIDw8IF9fUkVRX0lOVEVHUklUWSkKICNkZWZpbmUgUkVRX05PSURMRQkoMSA8PCBfX1JFUV9OT0lETEUpCiAjZGVmaW5lIFJFUV9JT19TVEFUCSgxIDw8IF9fUkVRX0lPX1NUQVQpCisjZGVmaW5lIFJFUV9NSVhFRF9NRVJHRQkoMSA8PCBfX1JFUV9NSVhFRF9NRVJHRSkKKworI2RlZmluZSBSRVFfRkFJTEZBU1RfTUFTSwkoUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfCBcCisJCQkJIFJFUV9GQUlMRkFTVF9EUklWRVIpCiAKICNkZWZpbmUgQkxLX01BWF9DREIJMTYKIApAQCAtNDUzLDEwICs0NTksMTIgQEAKICNkZWZpbmUgUVVFVUVfRkxBR19OT05ST1QgICAgICAxNAkvKiBub24tcm90YXRpb25hbCBkZXZpY2UgKFNTRCkgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19WSVJUICAgICAgICBRVUVVRV9GTEFHX05PTlJPVCAvKiBwYXJhdmlydCBkZXZpY2UgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19JT19TVEFUICAgICAxNQkvKiBkbyBJTyBzdGF0cyAqLworI2RlZmluZSBRVUVVRV9GTEFHX0NRCSAgICAgICAxNgkvKiBoYXJkd2FyZSBkb2VzIHF1ZXVpbmcgKi8KIAogI2RlZmluZSBRVUVVRV9GTEFHX0RFRkFVTFQJKCgxIDw8IFFVRVVFX0ZMQUdfSU9fU1RBVCkgfAkJXAogCQkJCSAoMSA8PCBRVUVVRV9GTEFHX0NMVVNURVIpIHwJCVwKLQkJCQkgKDEgPDwgUVVFVUVfRkxBR19TVEFDS0FCTEUpKQorCQkJCSAoMSA8PCBRVUVVRV9GTEFHX1NUQUNLQUJMRSkJfAlcCisJCQkJICgxIDw8IFFVRVVFX0ZMQUdfU0FNRV9DT01QKSkKIAogc3RhdGljIGlubGluZSBpbnQgcXVldWVfaXNfbG9ja2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewpAQCAtNTc1LDYgKzU4Myw3IEBACiAKICNkZWZpbmUgYmxrX3F1ZXVlX3BsdWdnZWQocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19QTFVHR0VELCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX3RhZ2dlZChxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX1FVRVVFRCwgJihxKS0+cXVldWVfZmxhZ3MpCisjZGVmaW5lIGJsa19xdWV1ZV9xdWV1aW5nKHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfQ1EsICYocSktPnF1ZXVlX2ZsYWdzKQogI2RlZmluZSBibGtfcXVldWVfc3RvcHBlZChxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX1NUT1BQRUQsICYocSktPnF1ZXVlX2ZsYWdzKQogI2RlZmluZSBibGtfcXVldWVfbm9tZXJnZXMocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19OT01FUkdFUywgJihxKS0+cXVldWVfZmxhZ3MpCiAjZGVmaW5lIGJsa19xdWV1ZV9ub25yb3QocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19OT05ST1QsICYocSktPnF1ZXVlX2ZsYWdzKQpAQCAtODI4LDExICs4MzcsMTMgQEAKIH0KIAogLyoKLSAqIGJsa19ycV9wb3MoKQkJOiB0aGUgY3VycmVudCBzZWN0b3IKLSAqIGJsa19ycV9ieXRlcygpCTogYnl0ZXMgbGVmdCBpbiB0aGUgZW50aXJlIHJlcXVlc3QKLSAqIGJsa19ycV9jdXJfYnl0ZXMoKQk6IGJ5dGVzIGxlZnQgaW4gdGhlIGN1cnJlbnQgc2VnbWVudAotICogYmxrX3JxX3NlY3RvcnMoKQk6IHNlY3RvcnMgbGVmdCBpbiB0aGUgZW50aXJlIHJlcXVlc3QKLSAqIGJsa19ycV9jdXJfc2VjdG9ycygpCTogc2VjdG9ycyBsZWZ0IGluIHRoZSBjdXJyZW50IHNlZ21lbnQKKyAqIGJsa19ycV9wb3MoKQkJCTogdGhlIGN1cnJlbnQgc2VjdG9yCisgKiBibGtfcnFfYnl0ZXMoKQkJOiBieXRlcyBsZWZ0IGluIHRoZSBlbnRpcmUgcmVxdWVzdAorICogYmxrX3JxX2N1cl9ieXRlcygpCQk6IGJ5dGVzIGxlZnQgaW4gdGhlIGN1cnJlbnQgc2VnbWVudAorICogYmxrX3JxX2Vycl9ieXRlcygpCQk6IGJ5dGVzIGxlZnQgdGlsbCB0aGUgbmV4dCBlcnJvciBib3VuZGFyeQorICogYmxrX3JxX3NlY3RvcnMoKQkJOiBzZWN0b3JzIGxlZnQgaW4gdGhlIGVudGlyZSByZXF1ZXN0CisgKiBibGtfcnFfY3VyX3NlY3RvcnMoKQkJOiBzZWN0b3JzIGxlZnQgaW4gdGhlIGN1cnJlbnQgc2VnbWVudAorICogYmxrX3JxX2Vycl9zZWN0b3JzKCkJCTogc2VjdG9ycyBsZWZ0IHRpbGwgdGhlIG5leHQgZXJyb3IgYm91bmRhcnkKICAqLwogc3RhdGljIGlubGluZSBzZWN0b3JfdCBibGtfcnFfcG9zKGNvbnN0IHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKQEAgLTg0OSw2ICs4NjAsOCBAQAogCXJldHVybiBycS0+YmlvID8gYmlvX2N1cl9ieXRlcyhycS0+YmlvKSA6IDA7CiB9CiAKK2V4dGVybiB1bnNpZ25lZCBpbnQgYmxrX3JxX2Vycl9ieXRlcyhjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqcnEpOworCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibGtfcnFfc2VjdG9ycyhjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJcmV0dXJuIGJsa19ycV9ieXRlcyhycSkgPj4gOTsKQEAgLTg1OSw2ICs4NzIsMTEgQEAKIAlyZXR1cm4gYmxrX3JxX2N1cl9ieXRlcyhycSkgPj4gOTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmxrX3JxX2Vycl9zZWN0b3JzKGNvbnN0IHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlyZXR1cm4gYmxrX3JxX2Vycl9ieXRlcyhycSkgPj4gOTsKK30KKwogLyoKICAqIFJlcXVlc3QgaXNzdWUgcmVsYXRlZCBmdW5jdGlvbnMuCiAgKi8KQEAgLTg4NSwxMCArOTAzLDEyIEBACiAJCQkgICAgdW5zaWduZWQgaW50IG5yX2J5dGVzKTsKIGV4dGVybiB2b2lkIGJsa19lbmRfcmVxdWVzdF9hbGwoc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IpOwogZXh0ZXJuIGJvb2wgYmxrX2VuZF9yZXF1ZXN0X2N1cihzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcik7CitleHRlcm4gYm9vbCBibGtfZW5kX3JlcXVlc3RfZXJyKHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yKTsKIGV4dGVybiBib29sIF9fYmxrX2VuZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yLAogCQkJICAgICAgdW5zaWduZWQgaW50IG5yX2J5dGVzKTsKIGV4dGVybiB2b2lkIF9fYmxrX2VuZF9yZXF1ZXN0X2FsbChzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcik7CiBleHRlcm4gYm9vbCBfX2Jsa19lbmRfcmVxdWVzdF9jdXIoc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IpOworZXh0ZXJuIGJvb2wgX19ibGtfZW5kX3JlcXVlc3RfZXJyKHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yKTsKIAogZXh0ZXJuIHZvaWQgYmxrX2NvbXBsZXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKik7CiBleHRlcm4gdm9pZCBfX2Jsa19jb21wbGV0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICopOwpAQCAtOTE1LDYgKzkzNSw3IEBACiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBhbGlnbm1lbnQpOwogZXh0ZXJuIHZvaWQgYmxrX2xpbWl0c19pb19taW4oc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltaXRzLCB1bnNpZ25lZCBpbnQgbWluKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9pb19taW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBtaW4pOworZXh0ZXJuIHZvaWQgYmxrX2xpbWl0c19pb19vcHQoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltaXRzLCB1bnNpZ25lZCBpbnQgb3B0KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9pb19vcHQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBvcHQpOwogZXh0ZXJuIHZvaWQgYmxrX3NldF9kZWZhdWx0X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pOwogZXh0ZXJuIGludCBibGtfc3RhY2tfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKnQsIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmIsCkBAIC05NzcsMTUgKzk5OCwxOCBAQAogfQogCiBleHRlcm4gaW50IGJsa2Rldl9pc3N1ZV9mbHVzaChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHNlY3Rvcl90ICopOwotZXh0ZXJuIGludCBibGtkZXZfaXNzdWVfZGlzY2FyZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCi0JCQkJc2VjdG9yX3Qgc2VjdG9yLCBzZWN0b3JfdCBucl9zZWN0cywgZ2ZwX3QpOworI2RlZmluZSBESVNDQVJEX0ZMX1dBSVQJCTB4MDEJLyogd2FpdCBmb3IgY29tcGxldGlvbiAqLworI2RlZmluZSBESVNDQVJEX0ZMX0JBUlJJRVIJMHgwMgkvKiBpc3N1ZSBESVNDQVJEX0JBUlJJRVIgcmVxdWVzdCAqLworZXh0ZXJuIGludCBibGtkZXZfaXNzdWVfZGlzY2FyZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHNlY3Rvcl90IHNlY3RvciwKKwkJc2VjdG9yX3QgbnJfc2VjdHMsIGdmcF90LCBpbnQgZmxhZ3MpOwogCiBzdGF0aWMgaW5saW5lIGludCBzYl9pc3N1ZV9kaXNjYXJkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgc2VjdG9yX3QgYmxvY2ssIHNlY3Rvcl90IG5yX2Jsb2NrcykKIHsKIAlibG9jayA8PD0gKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gOSk7CiAJbnJfYmxvY2tzIDw8PSAoc2ItPnNfYmxvY2tzaXplX2JpdHMgLSA5KTsKLQlyZXR1cm4gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoc2ItPnNfYmRldiwgYmxvY2ssIG5yX2Jsb2NrcywgR0ZQX0tFUk5FTCk7CisJcmV0dXJuIGJsa2Rldl9pc3N1ZV9kaXNjYXJkKHNiLT5zX2JkZXYsIGJsb2NrLCBucl9ibG9ja3MsIEdGUF9LRVJORUwsCisJCQkJICAgIERJU0NBUkRfRkxfQkFSUklFUik7CiB9CiAKIGV4dGVybiBpbnQgYmxrX3ZlcmlmeV9jb21tYW5kKHVuc2lnbmVkIGNoYXIgKmNtZCwgZm1vZGVfdCBoYXNfd3JpdGVfcGVybSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nhbi9kZXYuaCBiL2luY2x1ZGUvbGludXgvY2FuL2Rldi5oCmluZGV4IDRhMzdhNTYuLjU4MjRiMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FuL2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvY2FuL2Rldi5oCkBAIC02Niw1ICs2Niw2IEBACiAKIHZvaWQgY2FuX3B1dF9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWR4KTsKIHZvaWQgY2FuX2dldF9lY2hvX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWR4KTsKK3ZvaWQgY2FuX2ZyZWVfZWNob19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlkeCk7CiAKICNlbmRpZiAvKiBDQU5fREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmggYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCmluZGV4IGI2OGQyNzguLjQ3ZWJmNDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaApAQCAtMTM2LDcgKzEzNiw3IEBACiAJdm9pZCAqZGRhdGE7CiAJCiAJdm9pZCAqY2FsbGJhY2tfcHJpdjsKLQl2b2lkICgqY2FsbGJhY2spICh2b2lkICopOworCXZvaWQgKCpjYWxsYmFjaykgKHN0cnVjdCBjbl9tc2cgKik7CiAKIAl2b2lkICpmcmVlOwogfTsKQEAgLTE2NywxMSArMTY3LDExIEBACiAJc3RydWN0IGNuX3F1ZXVlX2RldiAqY2JkZXY7CiB9OwogCi1pbnQgY25fYWRkX2NhbGxiYWNrKHN0cnVjdCBjYl9pZCAqLCBjaGFyICosIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKikpOworaW50IGNuX2FkZF9jYWxsYmFjayhzdHJ1Y3QgY2JfaWQgKiwgY2hhciAqLCB2b2lkICgqY2FsbGJhY2spIChzdHJ1Y3QgY25fbXNnICopKTsKIHZvaWQgY25fZGVsX2NhbGxiYWNrKHN0cnVjdCBjYl9pZCAqKTsKIGludCBjbl9uZXRsaW5rX3NlbmQoc3RydWN0IGNuX21zZyAqLCB1MzIsIGdmcF90KTsKIAotaW50IGNuX3F1ZXVlX2FkZF9jYWxsYmFjayhzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYsIGNoYXIgKm5hbWUsIHN0cnVjdCBjYl9pZCAqaWQsIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSk7CitpbnQgY25fcXVldWVfYWRkX2NhbGxiYWNrKHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldiwgY2hhciAqbmFtZSwgc3RydWN0IGNiX2lkICppZCwgdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgY25fbXNnICopKTsKIHZvaWQgY25fcXVldWVfZGVsX2NhbGxiYWNrKHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldiwgc3RydWN0IGNiX2lkICppZCk7CiAKIGludCBxdWV1ZV9jbl93b3JrKHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSAqY2JxLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHUuaCBiL2luY2x1ZGUvbGludXgvY3B1LmgKaW5kZXggNGQ2NjhlMC4uNDc1MzYxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdS5oCkBAIC00OCw2ICs0OCwxNSBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogLyogTmVlZCB0byBrbm93IGFib3V0IENQVXMgZ29pbmcgdXAvZG93bj8gKi8KKyNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgfHwgIWRlZmluZWQoTU9EVUxFKQorI2RlZmluZSBjcHVfbm90aWZpZXIoZm4sIHByaSkgewkJCQkJXAorCXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZm4jI19uYiBfX2NwdWluaXRkYXRhID0JXAorCQl7IC5ub3RpZmllcl9jYWxsID0gZm4sIC5wcmlvcml0eSA9IHByaSB9OwlcCisJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZmbiMjX25iKTsJCQlcCit9CisjZWxzZSAvKiAjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpIHx8ICFkZWZpbmVkKE1PRFVMRSkgKi8KKyNkZWZpbmUgY3B1X25vdGlmaWVyKGZuLCBwcmkpCWRvIHsgKHZvaWQpKGZuKTsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiAjZWxzZSAjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpIHx8ICFkZWZpbmVkKE1PRFVMRSkgKi8KICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIGV4dGVybiBpbnQgcmVnaXN0ZXJfY3B1X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CkBAIC03NCw2ICs4Myw4IEBACiAKICNlbHNlCS8qIENPTkZJR19TTVAgKi8KIAorI2RlZmluZSBjcHVfbm90aWZpZXIoZm4sIHByaSkJZG8geyAodm9pZCkoZm4pOyB9IHdoaWxlICgwKQorCiBzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl9jcHVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKIHsKIAlyZXR1cm4gMDsKQEAgLTk5LDExICsxMTAsNyBAQAogCiBleHRlcm4gdm9pZCBnZXRfb25saW5lX2NwdXModm9pZCk7CiBleHRlcm4gdm9pZCBwdXRfb25saW5lX2NwdXModm9pZCk7Ci0jZGVmaW5lIGhvdGNwdV9ub3RpZmllcihmbiwgcHJpKSB7CQkJCVwKLQlzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZuIyNfbmIgX19jcHVpbml0ZGF0YSA9CVwKLQkJeyAubm90aWZpZXJfY2FsbCA9IGZuLCAucHJpb3JpdHkgPSBwcmkgfTsJXAotCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmZm4jI19uYik7CQkJXAotfQorI2RlZmluZSBob3RjcHVfbm90aWZpZXIoZm4sIHByaSkJY3B1X25vdGlmaWVyKGZuLCBwcmkpCiAjZGVmaW5lIHJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcihuYikJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKG5iKQogI2RlZmluZSB1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcihuYikJdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIobmIpCiBpbnQgY3B1X2Rvd24odW5zaWduZWQgaW50IGNwdSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyZWQuaCBiL2luY2x1ZGUvbGludXgvY3JlZC5oCmluZGV4IDRmYTk5OTYuLmZiMzcxNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3JlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvY3JlZC5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWxpbnV4Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBzdHJ1Y3QgdXNlcl9zdHJ1Y3Q7CkBAIC0xMTQsNiArMTE1LDEzIEBACiAgKi8KIHN0cnVjdCBjcmVkIHsKIAlhdG9taWNfdAl1c2FnZTsKKyNpZmRlZiBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMKKwlhdG9taWNfdAlzdWJzY3JpYmVyczsJLyogbnVtYmVyIG9mIHByb2Nlc3NlcyBzdWJzY3JpYmVkICovCisJdm9pZAkJKnB1dF9hZGRyOworCXVuc2lnbmVkCW1hZ2ljOworI2RlZmluZSBDUkVEX01BR0lDCTB4NDM3MzY1NjQKKyNkZWZpbmUgQ1JFRF9NQUdJQ19ERUFECTB4NDQ2NTYxNDQKKyNlbmRpZgogCXVpZF90CQl1aWQ7CQkvKiByZWFsIFVJRCBvZiB0aGUgdGFzayAqLwogCWdpZF90CQlnaWQ7CQkvKiByZWFsIEdJRCBvZiB0aGUgdGFzayAqLwogCXVpZF90CQlzdWlkOwkJLyogc2F2ZWQgVUlEIG9mIHRoZSB0YXNrICovCkBAIC0xNDMsNyArMTUxLDkgQEAKIH07CiAKIGV4dGVybiB2b2lkIF9fcHV0X2NyZWQoc3RydWN0IGNyZWQgKik7CitleHRlcm4gdm9pZCBleGl0X2NyZWRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiBpbnQgY29weV9jcmVkcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gc3RydWN0IGNyZWQgKmNyZWRfYWxsb2NfYmxhbmsodm9pZCk7CiBleHRlcm4gc3RydWN0IGNyZWQgKnByZXBhcmVfY3JlZHModm9pZCk7CiBleHRlcm4gc3RydWN0IGNyZWQgKnByZXBhcmVfZXhlY19jcmVkcyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgY3JlZCAqcHJlcGFyZV91c2VybW9kZWhlbHBlcl9jcmVkcyh2b2lkKTsKQEAgLTE1OCw2ICsxNjgsNjIgQEAKIGV4dGVybiBpbnQgc2V0X2NyZWF0ZV9maWxlc19hcyhzdHJ1Y3QgY3JlZCAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBfX2luaXQgY3JlZF9pbml0KHZvaWQpOwogCisvKgorICogY2hlY2sgZm9yIHZhbGlkaXR5IG9mIGNyZWRlbnRpYWxzCisgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMKK2V4dGVybiB2b2lkIF9faW52YWxpZF9jcmVkcyhjb25zdCBzdHJ1Y3QgY3JlZCAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkKTsKK2V4dGVybiB2b2lkIF9fdmFsaWRhdGVfcHJvY2Vzc19jcmVkcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQpOworCitzdGF0aWMgaW5saW5lIGJvb2wgY3JlZHNfYXJlX2ludmFsaWQoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCit7CisJaWYgKGNyZWQtPm1hZ2ljICE9IENSRURfTUFHSUMpCisJCXJldHVybiB0cnVlOworCWlmIChhdG9taWNfcmVhZCgmY3JlZC0+dXNhZ2UpIDwgYXRvbWljX3JlYWQoJmNyZWQtPnN1YnNjcmliZXJzKSkKKwkJcmV0dXJuIHRydWU7CisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgKKwlpZiAoc2VsaW51eF9pc19lbmFibGVkKCkpIHsKKwkJaWYgKCh1bnNpZ25lZCBsb25nKSBjcmVkLT5zZWN1cml0eSA8IFBBR0VfU0laRSkKKwkJCXJldHVybiB0cnVlOworCQlpZiAoKCoodTMyICopY3JlZC0+c2VjdXJpdHkgJiAweGZmZmZmZjAwKSA9PQorCQkgICAgKFBPSVNPTl9GUkVFIDw8IDI0IHwgUE9JU09OX0ZSRUUgPDwgMTYgfCBQT0lTT05fRlJFRSA8PCA4KSkKKwkJCXJldHVybiB0cnVlOworCX0KKyNlbmRpZgorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fdmFsaWRhdGVfY3JlZHMoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCisJCQkJICAgIGNvbnN0IGNoYXIgKmZpbGUsIHVuc2lnbmVkIGxpbmUpCit7CisJaWYgKHVubGlrZWx5KGNyZWRzX2FyZV9pbnZhbGlkKGNyZWQpKSkKKwkJX19pbnZhbGlkX2NyZWRzKGNyZWQsIGZpbGUsIGxpbmUpOworfQorCisjZGVmaW5lIHZhbGlkYXRlX2NyZWRzKGNyZWQpCQkJCVwKK2RvIHsJCQkJCQkJXAorCV9fdmFsaWRhdGVfY3JlZHMoKGNyZWQpLCBfX0ZJTEVfXywgX19MSU5FX18pOwlcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgdmFsaWRhdGVfcHJvY2Vzc19jcmVkcygpCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlfX3ZhbGlkYXRlX3Byb2Nlc3NfY3JlZHMoY3VycmVudCwgX19GSUxFX18sIF9fTElORV9fKTsJXAorfSB3aGlsZSgwKQorCitleHRlcm4gdm9pZCB2YWxpZGF0ZV9jcmVkc19mb3JfZG9fZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZhbGlkYXRlX2NyZWRzKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIHZhbGlkYXRlX2NyZWRzX2Zvcl9kb19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIHZhbGlkYXRlX3Byb2Nlc3NfY3JlZHModm9pZCkKK3sKK30KKyNlbmRpZgorCiAvKioKICAqIGdldF9uZXdfY3JlZCAtIEdldCBhIHJlZmVyZW5jZSBvbiBhIG5ldyBzZXQgb2YgY3JlZGVudGlhbHMKICAqIEBjcmVkOiBUaGUgbmV3IGNyZWRlbnRpYWxzIHRvIHJlZmVyZW5jZQpAQCAtMTg2LDcgKzI1Miw5IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNyZWQgKmdldF9jcmVkKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKQogewotCXJldHVybiBnZXRfbmV3X2NyZWQoKHN0cnVjdCBjcmVkICopIGNyZWQpOworCXN0cnVjdCBjcmVkICpub25jb25zdF9jcmVkID0gKHN0cnVjdCBjcmVkICopIGNyZWQ7CisJdmFsaWRhdGVfY3JlZHMoY3JlZCk7CisJcmV0dXJuIGdldF9uZXdfY3JlZChub25jb25zdF9jcmVkKTsKIH0KIAogLyoqCkBAIC0yMDQsNyArMjcyLDcgQEAKIHsKIAlzdHJ1Y3QgY3JlZCAqY3JlZCA9IChzdHJ1Y3QgY3JlZCAqKSBfY3JlZDsKIAotCUJVR19PTihhdG9taWNfcmVhZCgmKGNyZWQpLT51c2FnZSkgPD0gMCk7CisJdmFsaWRhdGVfY3JlZHMoY3JlZCk7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJihjcmVkKS0+dXNhZ2UpKQogCQlfX3B1dF9jcmVkKGNyZWQpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaCBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKaW5kZXggZWMyOWZhMi4uZmQ5Mjk4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCkBAIC0xMTUsNyArMTE1LDYgQEAKIHN0cnVjdCBjcnlwdG9fYWVhZDsKIHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyOwogc3RydWN0IGNyeXB0b19oYXNoOwotc3RydWN0IGNyeXB0b19haGFzaDsKIHN0cnVjdCBjcnlwdG9fcm5nOwogc3RydWN0IGNyeXB0b190Zm07CiBzdHJ1Y3QgY3J5cHRvX3R5cGU7CkBAIC0xNDYsMTYgKzE0NSw2IEBACiAJdm9pZCAqX19jdHhbXSBDUllQVE9fTUlOQUxJR05fQVRUUjsKIH07CiAKLXN0cnVjdCBhaGFzaF9yZXF1ZXN0IHsKLQlzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgYmFzZTsKLQotCXVuc2lnbmVkIGludCBuYnl0ZXM7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmM7Ci0JdTgJCSAgICpyZXN1bHQ7Ci0KLQl2b2lkICpfX2N0eFtdIENSWVBUT19NSU5BTElHTl9BVFRSOwotfTsKLQogLyoqCiAgKglzdHJ1Y3QgYWVhZF9yZXF1ZXN0IC0gQUVBRCByZXF1ZXN0CiAgKglAYmFzZTogQ29tbW9uIGF0dHJpYnV0ZXMgZm9yIGFzeW5jIGNyeXB0byByZXF1ZXN0cwpAQCAtMjIwLDE4ICsyMDksNiBAQAogCXVuc2lnbmVkIGludCBpdnNpemU7CiB9OwogCi1zdHJ1Y3QgYWhhc2hfYWxnIHsKLQlpbnQgKCppbml0KShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKLQlpbnQgKCpyZWluaXQpKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOwotCWludCAoKnVwZGF0ZSkoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7Ci0JaW50ICgqZmluYWwpKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOwotCWludCAoKmRpZ2VzdCkoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7Ci0JaW50ICgqc2V0a2V5KShzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0sIGNvbnN0IHU4ICprZXksCi0JCQl1bnNpZ25lZCBpbnQga2V5bGVuKTsKLQotCXVuc2lnbmVkIGludCBkaWdlc3RzaXplOwotfTsKLQogc3RydWN0IGFlYWRfYWxnIHsKIAlpbnQgKCpzZXRrZXkpKHN0cnVjdCBjcnlwdG9fYWVhZCAqdGZtLCBjb25zdCB1OCAqa2V5LAogCSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWxlbik7CkBAIC0zMTgsNyArMjk1LDYgQEAKICNkZWZpbmUgY3JhX2NpcGhlcgljcmFfdS5jaXBoZXIKICNkZWZpbmUgY3JhX2RpZ2VzdAljcmFfdS5kaWdlc3QKICNkZWZpbmUgY3JhX2hhc2gJY3JhX3UuaGFzaAotI2RlZmluZSBjcmFfYWhhc2gJY3JhX3UuYWhhc2gKICNkZWZpbmUgY3JhX2NvbXByZXNzCWNyYV91LmNvbXByZXNzCiAjZGVmaW5lIGNyYV9ybmcJCWNyYV91LnJuZwogCkBAIC0zNDYsNyArMzIyLDYgQEAKIAkJc3RydWN0IGNpcGhlcl9hbGcgY2lwaGVyOwogCQlzdHJ1Y3QgZGlnZXN0X2FsZyBkaWdlc3Q7CiAJCXN0cnVjdCBoYXNoX2FsZyBoYXNoOwotCQlzdHJ1Y3QgYWhhc2hfYWxnIGFoYXNoOwogCQlzdHJ1Y3QgY29tcHJlc3NfYWxnIGNvbXByZXNzOwogCQlzdHJ1Y3Qgcm5nX2FsZyBybmc7CiAJfSBjcmFfdTsKQEAgLTQzMywxOCArNDA4LDYgQEAKIAl1bnNpZ25lZCBpbnQgZGlnZXN0c2l6ZTsKIH07CiAKLXN0cnVjdCBhaGFzaF90Zm0gewotCWludCAoKmluaXQpKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOwotCWludCAoKnVwZGF0ZSkoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7Ci0JaW50ICgqZmluYWwpKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOwotCWludCAoKmRpZ2VzdCkoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7Ci0JaW50ICgqc2V0a2V5KShzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0sIGNvbnN0IHU4ICprZXksCi0JCQl1bnNpZ25lZCBpbnQga2V5bGVuKTsKLQotCXVuc2lnbmVkIGludCBkaWdlc3RzaXplOwotCXVuc2lnbmVkIGludCByZXFzaXplOwotfTsKLQogc3RydWN0IGNvbXByZXNzX3RmbSB7CiAJaW50ICgqY290X2NvbXByZXNzKShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAogCSAgICAgICAgICAgICAgICAgICAgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNsZW4sCkBAIC00NjUsNyArNDI4LDYgQEAKICNkZWZpbmUgY3J0X2Jsa2NpcGhlcgljcnRfdS5ibGtjaXBoZXIKICNkZWZpbmUgY3J0X2NpcGhlcgljcnRfdS5jaXBoZXIKICNkZWZpbmUgY3J0X2hhc2gJY3J0X3UuaGFzaAotI2RlZmluZSBjcnRfYWhhc2gJY3J0X3UuYWhhc2gKICNkZWZpbmUgY3J0X2NvbXByZXNzCWNydF91LmNvbXByZXNzCiAjZGVmaW5lIGNydF9ybmcJCWNydF91LnJuZwogCkBAIC00NzksNyArNDQxLDYgQEAKIAkJc3RydWN0IGJsa2NpcGhlcl90Zm0gYmxrY2lwaGVyOwogCQlzdHJ1Y3QgY2lwaGVyX3RmbSBjaXBoZXI7CiAJCXN0cnVjdCBoYXNoX3RmbSBoYXNoOwotCQlzdHJ1Y3QgYWhhc2hfdGZtIGFoYXNoOwogCQlzdHJ1Y3QgY29tcHJlc3NfdGZtIGNvbXByZXNzOwogCQlzdHJ1Y3Qgcm5nX3RmbSBybmc7CiAJfSBjcnRfdTsKQEAgLTc3MCw3ICs3MzEsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWJsa2NpcGhlcl9yZXF1ZXN0X2ZyZWUoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQogewotCWtmcmVlKHJlcSk7CisJa3pmcmVlKHJlcSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKApAQCAtOTAxLDcgKzg2Miw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZWFkX3JlcXVlc3RfZnJlZShzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCiB7Ci0Ja2ZyZWUocmVxKTsKKwlremZyZWUocmVxKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFlYWRfcmVxdWVzdF9zZXRfY2FsbGJhY2soc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2JubC5oIGIvaW5jbHVkZS9saW51eC9kY2JubC5oCmluZGV4IDdkMmUxMDAuLmI3Y2RiYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNibmwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjYm5sLmgKQEAgLTUwLDYgKzUwLDggQEAKICAqIEBEQ0JfQ01EX1NOVU1UQ1M6IHNldCB0aGUgbnVtYmVyIG9mIHRyYWZmaWMgY2xhc3NlcwogICogQERDQl9DTURfR0JDTjogc2V0IGJhY2t3YXJkIGNvbmdlc3Rpb24gbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24KICAqIEBEQ0JfQ01EX1NCQ046IGdldCBiYWNrd2FyZCBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbiBjb25maWdyYXRpb24uCisgKiBARENCX0NNRF9HQVBQOiBnZXQgYXBwbGljYXRpb24gcHJvdG9jb2wgY29uZmlndXJhdGlvbgorICogQERDQl9DTURfU0FQUDogc2V0IGFwcGxpY2F0aW9uIHByb3RvY29sIGNvbmZpZ3VyYXRpb24KICAqLwogZW51bSBkY2JubF9jb21tYW5kcyB7CiAJRENCX0NNRF9VTkRFRklORUQsCkBAIC04MCw2ICs4Miw5IEBACiAJRENCX0NNRF9CQ05fR0NGRywKIAlEQ0JfQ01EX0JDTl9TQ0ZHLAogCisJRENCX0NNRF9HQVBQLAorCURDQl9DTURfU0FQUCwKKwogCV9fRENCX0NNRF9FTlVNX01BWCwKIAlEQ0JfQ01EX01BWCA9IF9fRENCX0NNRF9FTlVNX01BWCAtIDEsCiB9OwpAQCAtMTE0LDYgKzExOSw3IEBACiAJRENCX0FUVFJfQ0FQLAogCURDQl9BVFRSX05VTVRDUywKIAlEQ0JfQVRUUl9CQ04sCisJRENCX0FUVFJfQVBQLAogCiAJX19EQ0JfQVRUUl9FTlVNX01BWCwKIAlEQ0JfQVRUUl9NQVggPSBfX0RDQl9BVFRSX0VOVU1fTUFYIC0gMSwKQEAgLTMzOCw1ICszNDQsMTcgQEAKIAlEQ0JfQVRUUl9WQUxVRV9VTkRFRklORUQgPSAweGZmCiB9OwogCisjZGVmaW5lIERDQl9BUFBfSURUWVBFX0VUSFRZUEUJMHgwMAorI2RlZmluZSBEQ0JfQVBQX0lEVFlQRV9QT1JUTlVNCTB4MDEKK2VudW0gZGNibmxfYXBwX2F0dHJzIHsKKwlEQ0JfQVBQX0FUVFJfVU5ERUZJTkVELAorCisJRENCX0FQUF9BVFRSX0lEVFlQRSwKKwlEQ0JfQVBQX0FUVFJfSUQsCisJRENCX0FQUF9BVFRSX1BSSU9SSVRZLAorCisJX19EQ0JfQVBQX0FUVFJfRU5VTV9NQVgsCisJRENCX0FQUF9BVFRSX01BWCA9IF9fRENCX0FQUF9BVFRSX0VOVU1fTUFYIC0gMSwKK307CiAKICNlbmRpZiAvKiBfX0xJTlVYX0RDQk5MX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggYWViYjgxMC4uYTI4NjQyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC02Miw3ICs2Miw3IEBACiAJaW50ICgqc3VzcGVuZCkoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogCWludCAoKnJlc3VtZSkoc3RydWN0IGRldmljZSAqZGV2KTsKIAotCXN0cnVjdCBkZXZfcG1fb3BzICpwbTsKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG07CiAKIAlzdHJ1Y3QgYnVzX3R5cGVfcHJpdmF0ZSAqcDsKIH07CkBAIC0xMzIsNyArMTMyLDcgQEAKIAlpbnQgKCpyZXN1bWUpIChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipncm91cHM7CiAKLQlzdHJ1Y3QgZGV2X3BtX29wcyAqcG07CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtOwogCiAJc3RydWN0IGRyaXZlcl9wcml2YXRlICpwOwogfTsKQEAgLTIwMCw3ICsyMDAsOCBAQAogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKLQlzdHJ1Y3QgZGV2X3BtX29wcyAqcG07CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtOworCiAJc3RydWN0IGNsYXNzX3ByaXZhdGUgKnA7CiB9OwogCkBAIC0yOTEsNyArMjkyLDcgQEAKIAljaGFyICooKm5vZGVuYW1lKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCi0Jc3RydWN0IGRldl9wbV9vcHMgKnBtOworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbTsKIH07CiAKIC8qIGludGVyZmFjZSBmb3IgZXhwb3J0aW5nIGRldmljZSBhdHRyaWJ1dGVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKaW5kZXggMDdkZmQ0Ni4uOTFiNzYxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaApAQCAtNTgsNiArNTgsNyBAQAogCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CiAJaW50ICgqbWFwcGluZ19lcnJvcikoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKIAlpbnQgKCpkbWFfc3VwcG9ydGVkKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKTsKKwlpbnQgKCpzZXRfZG1hX21hc2spKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spOwogCWludCBpc19waHlzOwogfTsKIApAQCAtOTgsMTEgKzk5LDYgQEAKIAlyZXR1cm4gZGV2LT5kbWFfbWFzayAhPSBOVUxMICYmICpkZXYtPmRtYV9tYXNrICE9IERNQV9NQVNLX05PTkU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX2J1ZmZlcl9kbWFfY2FwYWJsZSh1NjQgbWFzaywgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSkKLXsKLQlyZXR1cm4gYWRkciArIHNpemUgPD0gbWFzazsKLX0KLQogI2lmZGVmIENPTkZJR19IQVNfRE1BCiAjaW5jbHVkZSA8YXNtL2RtYS1tYXBwaW5nLmg+CiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWkuaCBiL2luY2x1ZGUvbGludXgvZG1pLmgKaW5kZXggYmI1NDg5Yy4uYThhM2UxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtaS5oCkBAIC00Myw3ICs0Myw3IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGRtaV9kZXZpY2UgKiBkbWlfZmluZF9kZXZpY2UoaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCiAJY29uc3Qgc3RydWN0IGRtaV9kZXZpY2UgKmZyb20pOwogZXh0ZXJuIHZvaWQgZG1pX3NjYW5fbWFjaGluZSh2b2lkKTsKLWV4dGVybiBpbnQgZG1pX2dldF95ZWFyKGludCBmaWVsZCk7CitleHRlcm4gYm9vbCBkbWlfZ2V0X2RhdGUoaW50IGZpZWxkLCBpbnQgKnllYXJwLCBpbnQgKm1vbnRocCwgaW50ICpkYXlwKTsKIGV4dGVybiBpbnQgZG1pX25hbWVfaW5fdmVuZG9ycyhjb25zdCBjaGFyICpzdHIpOwogZXh0ZXJuIGludCBkbWlfbmFtZV9pbl9zZXJpYWwoY29uc3QgY2hhciAqc3RyKTsKIGV4dGVybiBpbnQgZG1pX2F2YWlsYWJsZTsKQEAgLTU4LDcgKzU4LDE2IEBACiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBkbWlfZGV2aWNlICogZG1pX2ZpbmRfZGV2aWNlKGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAogCWNvbnN0IHN0cnVjdCBkbWlfZGV2aWNlICpmcm9tKSB7IHJldHVybiBOVUxMOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZG1pX3NjYW5fbWFjaGluZSh2b2lkKSB7IHJldHVybjsgfQotc3RhdGljIGlubGluZSBpbnQgZG1pX2dldF95ZWFyKGludCB5ZWFyKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgZG1pX2dldF9kYXRlKGludCBmaWVsZCwgaW50ICp5ZWFycCwgaW50ICptb250aHAsIGludCAqZGF5cCkKK3sKKwlpZiAoeWVhcnApCisJCSp5ZWFycCA9IDA7CisJaWYgKG1vbnRocCkKKwkJKm1vbnRocCA9IDA7CisJaWYgKGRheXApCisJCSpkYXlwID0gMDsKKwlyZXR1cm4gZmFsc2U7Cit9CiBzdGF0aWMgaW5saW5lIGludCBkbWlfbmFtZV9pbl92ZW5kb3JzKGNvbnN0IGNoYXIgKnMpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGRtaV9uYW1lX2luX3NlcmlhbChjb25zdCBjaGFyICpzKSB7IHJldHVybiAwOyB9CiAjZGVmaW5lIGRtaV9hdmFpbGFibGUgMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdGxrLmggYi9pbmNsdWRlL2xpbnV4L2R0bGsuaAppbmRleCAyODk2ZDkwLi4yMmE3YjlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2R0bGsuaAorKysgYi9pbmNsdWRlL2xpbnV4L2R0bGsuaApAQCAtMSwyMiArMSwzIEBACi0jaWYgMAotCi0jZGVmaW5lIFRSQUNFX1RYVCh0ZXh0KSBcCi0JeyBcCi0JICBpZihkdGxrX3RyYWNlKSBcCi0JICB7IFwKLQkgICAgY29uc29sZV9wcmludCh0ZXh0KTsgXAotCSAgICBjb25zb2xlX3ByaW50KCJcbiIpOyBcCi0JICB9IFwKLQl9Ci0KLSNkZWZpbmUgVFJBQ0VfQ0hSKGNocikgXAotCXsgXAotCSAgaWYoZHRsa190cmFjZSkgXAotCSAgICBjb25zb2xlX3ByaW50KGNocik7IFwKLQl9IFwKLQotI2VuZGlmCi0KICNkZWZpbmUgRFRMS19NSU5PUgkwCiAjZGVmaW5lIERUTEtfSU9fRVhURU5UCTB4MDIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdmIvZG14LmggYi9pbmNsdWRlL2xpbnV4L2R2Yi9kbXguaAppbmRleCBmZWY5NDM3Li5mMDc4ZjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2R2Yi9kbXguaAorKysgYi9pbmNsdWRlL2xpbnV4L2R2Yi9kbXguaApAQCAtMTUxLDUgKzE1MSw3IEBACiAjZGVmaW5lIERNWF9HRVRfQ0FQUyAgICAgICAgICAgICBfSU9SKCdvJywgNDgsIGRteF9jYXBzX3QpCiAjZGVmaW5lIERNWF9TRVRfU09VUkNFICAgICAgICAgICBfSU9XKCdvJywgNDksIGRteF9zb3VyY2VfdCkKICNkZWZpbmUgRE1YX0dFVF9TVEMgICAgICAgICAgICAgIF9JT1dSKCdvJywgNTAsIHN0cnVjdCBkbXhfc3RjKQorI2RlZmluZSBETVhfQUREX1BJRCAgICAgICAgICAgICAgX0lPVygnbycsIDUxLCBfX3UxNikKKyNkZWZpbmUgRE1YX1JFTU9WRV9QSUQgICAgICAgICAgIF9JT1coJ28nLCA1MiwgX191MTYpCiAKICNlbmRpZiAvKl9EVkJETVhfSF8qLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbmNsb3N1cmUuaCBiL2luY2x1ZGUvbGludXgvZW5jbG9zdXJlLmgKaW5kZXggNDMzMjQ0Mi4uOTBkMWMyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbmNsb3N1cmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VuY2xvc3VyZS5oCkBAIC0xMjIsOCArMTIyLDkgQEAKIAkJCQkgZW51bSBlbmNsb3N1cmVfY29tcG9uZW50X3R5cGUsIGNvbnN0IGNoYXIgKik7CiBpbnQgZW5jbG9zdXJlX2FkZF9kZXZpY2Uoc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVuY2xvc3VyZSwgaW50IGNvbXBvbmVudCwKIAkJCSBzdHJ1Y3QgZGV2aWNlICpkZXYpOwotaW50IGVuY2xvc3VyZV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplbmNsb3N1cmUsIGludCBjb21wb25lbnQpOwotc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVuY2xvc3VyZV9maW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CitpbnQgZW5jbG9zdXJlX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKiwgc3RydWN0IGRldmljZSAqKTsKK3N0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplbmNsb3N1cmVfZmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICpzdGFydCk7CiBpbnQgZW5jbG9zdXJlX2Zvcl9lYWNoX2RldmljZShpbnQgKCpmbikoc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKiwgdm9pZCAqKSwKIAkJCSAgICAgIHZvaWQgKmRhdGEpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IDliNjYwYmQuLjE1ZTRlYjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC0zNjIsMTIgKzM2MiwyNSBAQAogCV9fdTMyCQkJCXJ1bGVfbG9jc1swXTsKIH07CiAKKyNkZWZpbmUgRVRIVE9PTF9GTEFTSF9NQVhfRklMRU5BTUUJMTI4CitlbnVtIGV0aHRvb2xfZmxhc2hfb3BfdHlwZSB7CisJRVRIVE9PTF9GTEFTSF9BTExfUkVHSU9OUwk9IDAsCit9OworCisvKiBmb3IgcGFzc2luZyBmaXJtd2FyZSBmbGFzaGluZyByZWxhdGVkIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBldGh0b29sX2ZsYXNoIHsKKwlfX3UzMgljbWQ7CisJX191MzIJcmVnaW9uOworCWNoYXIJZGF0YVtFVEhUT09MX0ZMQVNIX01BWF9GSUxFTkFNRV07Cit9OworCiAjaWZkZWYgX19LRVJORUxfXwogCiBzdHJ1Y3QgbmV0X2RldmljZTsKIAogLyogU29tZSBnZW5lcmljIG1ldGhvZHMgZHJpdmVycyBtYXkgdXNlIGluIHRoZWlyIGV0aHRvb2xfb3BzICovCiB1MzIgZXRodG9vbF9vcF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3UzMiBldGh0b29sX29wX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdTMyIGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZXRodG9vbF9vcF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSk7CiBpbnQgZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSk7CkBAIC00ODgsNiArNTAxLDcgQEAKIAlpbnQJKCpnZXRfc3RhdHNfY291bnQpKHN0cnVjdCBuZXRfZGV2aWNlICopOy8qIHVzZSBnZXRfc3NldF9jb3VudCAqLwogCWludAkoKmdldF9yeG5mYykoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKiwgdm9pZCAqKTsKIAlpbnQJKCpzZXRfcnhuZmMpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3J4bmZjICopOworCWludCAgICAgKCpmbGFzaF9kZXZpY2UpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2ZsYXNoICopOwogfTsKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKQEAgLTU0NCw2ICs1NTgsNyBAQAogI2RlZmluZQlFVEhUT09MX0dSWENMU1JMQUxMCTB4MDAwMDAwMzAgLyogR2V0IGFsbCBSWCBjbGFzc2lmaWNhdGlvbiBydWxlICovCiAjZGVmaW5lCUVUSFRPT0xfU1JYQ0xTUkxERUwJMHgwMDAwMDAzMSAvKiBEZWxldGUgUlggY2xhc3NpZmljYXRpb24gcnVsZSAqLwogI2RlZmluZQlFVEhUT09MX1NSWENMU1JMSU5TCTB4MDAwMDAwMzIgLyogSW5zZXJ0IFJYIGNsYXNzaWZpY2F0aW9uIHJ1bGUgKi8KKyNkZWZpbmUJRVRIVE9PTF9GTEFTSERFVgkweDAwMDAwMDMzIC8qIEZsYXNoIGZpcm13YXJlIHRvIGRldmljZSAqLwogCiAvKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZSAqLwogI2RlZmluZSBTUEFSQ19FVEhfR1NFVAkJRVRIVE9PTF9HU0VUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpcHMuaCBiL2luY2x1ZGUvbGludXgvZmlwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZmIwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpcHMuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9GSVBTX0gKKyNkZWZpbmUgX0ZJUFNfSAorCisjaWZkZWYgQ09ORklHX0NSWVBUT19GSVBTCitleHRlcm4gaW50IGZpcHNfZW5hYmxlZDsKKyNlbHNlCisjZGVmaW5lIGZpcHNfZW5hYmxlZCAwCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggNzNlOWI2NC4uOTAxNjJmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMTYxLDggKzE2MSw4IEBACiAgKiBUaGVzZSBhcmVuJ3QgcmVhbGx5IHJlYWRzIG9yIHdyaXRlcywgdGhleSBwYXNzIGRvd24gaW5mb3JtYXRpb24gYWJvdXQKICAqIHBhcnRzIG9mIGRldmljZSB0aGF0IGFyZSBub3cgdW51c2VkIGJ5IHRoZSBmaWxlIHN5c3RlbS4KICAqLwotI2RlZmluZSBESVNDQVJEX05PQkFSUklFUiAoMSA8PCBCSU9fUldfRElTQ0FSRCkKLSNkZWZpbmUgRElTQ0FSRF9CQVJSSUVSICgoMSA8PCBCSU9fUldfRElTQ0FSRCkgfCAoMSA8PCBCSU9fUldfQkFSUklFUikpCisjZGVmaW5lIERJU0NBUkRfTk9CQVJSSUVSIChXUklURSB8ICgxIDw8IEJJT19SV19ESVNDQVJEKSkKKyNkZWZpbmUgRElTQ0FSRF9CQVJSSUVSIChESVNDQVJEX05PQkFSUklFUiB8ICgxIDw8IEJJT19SV19CQVJSSUVSKSkKIAogI2RlZmluZSBTRUxfSU4JCTEKICNkZWZpbmUgU0VMX09VVAkJMgpAQCAtNjU1LDcgKzY1NSw2IEBACiAJaW50CQkJYmRfaW52YWxpZGF0ZWQ7CiAJc3RydWN0IGdlbmRpc2sgKgliZF9kaXNrOwogCXN0cnVjdCBsaXN0X2hlYWQJYmRfbGlzdDsKLQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRfaW5vZGVfYmFja2luZ19kZXZfaW5mbzsKIAkvKgogCSAqIFByaXZhdGUgZGF0YS4gIFlvdSBtdXN0IGhhdmUgYmRfY2xhaW0nZWQgdGhlIGJsb2NrX2RldmljZQogCSAqIHRvIHVzZSB0aGlzLiAgTk9URTogIGJkX2NsYWltIGFsbG93cyBhbiBvd25lciB0byBjbGFpbQpAQCAtNzE1LDcgKzcxNCw3IEBACiAKIHN0cnVjdCBpbm9kZSB7CiAJc3RydWN0IGhsaXN0X25vZGUJaV9oYXNoOwotCXN0cnVjdCBsaXN0X2hlYWQJaV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJaV9saXN0OwkJLyogYmFja2luZyBkZXYgSU8gbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJaV9zYl9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQJaV9kZW50cnk7CiAJdW5zaWduZWQgbG9uZwkJaV9pbm87CkBAIC0xMzM2LDkgKzEzMzUsNiBAQAogCXN0cnVjdCB4YXR0cl9oYW5kbGVyCSoqc194YXR0cjsKIAogCXN0cnVjdCBsaXN0X2hlYWQJc19pbm9kZXM7CS8qIGFsbCBpbm9kZXMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCXNfZGlydHk7CS8qIGRpcnR5IGlub2RlcyAqLwotCXN0cnVjdCBsaXN0X2hlYWQJc19pbzsJCS8qIHBhcmtlZCBmb3Igd3JpdGViYWNrICovCi0Jc3RydWN0IGxpc3RfaGVhZAlzX21vcmVfaW87CS8qIHBhcmtlZCBmb3IgbW9yZSB3cml0ZWJhY2sgKi8KIAlzdHJ1Y3QgaGxpc3RfaGVhZAlzX2Fub247CQkvKiBhbm9ueW1vdXMgZGVudHJpZXMgZm9yIChuZnMpIGV4cG9ydGluZyAqLwogCXN0cnVjdCBsaXN0X2hlYWQJc19maWxlczsKIAkvKiBzX2RlbnRyeV9scnUgYW5kIHNfbnJfZGVudHJ5X3VudXNlZCBhcmUgcHJvdGVjdGVkIGJ5IGRjYWNoZV9sb2NrICovCkBAIC0xMzQ2LDYgKzEzNDIsNyBAQAogCWludAkJCXNfbnJfZGVudHJ5X3VudXNlZDsJLyogIyBvZiBkZW50cnkgb24gbHJ1ICovCiAKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlCSpzX2JkZXY7CisJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKnNfYmRpOwogCXN0cnVjdCBtdGRfaW5mbwkJKnNfbXRkOwogCXN0cnVjdCBsaXN0X2hlYWQJc19pbnN0YW5jZXM7CiAJc3RydWN0IHF1b3RhX2luZm8Jc19kcXVvdDsJLyogRGlza3F1b3RhIHNwZWNpZmljIG9wdGlvbnMgKi8KQEAgLTE0NTgsMTEgKzE0NTUsNiBAQAogI2RlZmluZSBEVF9TT0NLCQkxMgogI2RlZmluZSBEVF9XSFQJCTE0CiAKLSNkZWZpbmUgT1NZTkNfTUVUQURBVEEJKDE8PDApCi0jZGVmaW5lIE9TWU5DX0RBVEEJKDE8PDEpCi0jZGVmaW5lIE9TWU5DX0lOT0RFCSgxPDwyKQotaW50IGdlbmVyaWNfb3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIGludCk7Ci0KIC8qCiAgKiBUaGlzIGlzIHRoZSAiZmlsbGRpciIgZnVuY3Rpb24gdHlwZSwgdXNlZCBieSByZWFkZGlyKCkgdG8gbGV0CiAgKiB0aGUga2VybmVsIHNwZWNpZnkgd2hhdCBraW5kIG9mIGRpcmVudCBsYXlvdXQgaXQgd2FudHMgdG8gaGF2ZS4KQEAgLTE1MjgsNiArMTUyMCw3IEBACiAJdm9pZCAoKnB1dF9saW5rKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRhICosIHZvaWQgKik7CiAJdm9pZCAoKnRydW5jYXRlKSAoc3RydWN0IGlub2RlICopOwogCWludCAoKnBlcm1pc3Npb24pIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKKwlpbnQgKCpjaGVja19hY2wpKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogCWludCAoKnNldGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKIAlpbnQgKCpnZXRhdHRyKSAoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ICopOwogCWludCAoKnNldHhhdHRyKSAoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosY29uc3Qgdm9pZCAqLHNpemVfdCxpbnQpOwpAQCAtMTc4OCw2ICsxNzgxLDcgQEAKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CiBleHRlcm4gdm9pZCBzaW1wbGVfc2V0X21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBpbnQgX19wdXRfc3VwZXJfYW5kX25lZWRfcmVzdGFydChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK3ZvaWQgcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogCiAvKiBBbGFzLCBubyBhbGlhc2VzLiBUb28gbXVjaCBoYXNzbGUgd2l0aCBicmluZ2luZyBtb2R1bGUuaCBldmVyeXdoZXJlICovCiAjZGVmaW5lIGZvcHNfZ2V0KGZvcHMpIFwKQEAgLTE5OTgsMTIgKzE5OTIsMjUgQEAKICNkZWZpbmUgQ0hSREVWX01BSk9SX0hBU0hfU0laRQkyNTUKIGV4dGVybiBpbnQgYWxsb2NfY2hyZGV2X3JlZ2lvbihkZXZfdCAqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2X3QsIHVuc2lnbmVkLCBjb25zdCBjaGFyICopOwotZXh0ZXJuIGludCByZWdpc3Rlcl9jaHJkZXYodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICosCi0JCQkgICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICopOwotZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9jaHJkZXYodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBfX3JlZ2lzdGVyX2NocmRldih1bnNpZ25lZCBpbnQgbWFqb3IsIHVuc2lnbmVkIGludCBiYXNlbWlub3IsCisJCQkgICAgIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcyk7CitleHRlcm4gdm9pZCBfX3VucmVnaXN0ZXJfY2hyZGV2KHVuc2lnbmVkIGludCBtYWpvciwgdW5zaWduZWQgaW50IGJhc2VtaW5vciwKKwkJCQl1bnNpZ25lZCBpbnQgY291bnQsIGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldl90LCB1bnNpZ25lZCk7CiBleHRlcm4gdm9pZCBjaHJkZXZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKixvZmZfdCk7CiAKK3N0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX2NocmRldih1bnNpZ25lZCBpbnQgbWFqb3IsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKQoreworCXJldHVybiBfX3JlZ2lzdGVyX2NocmRldihtYWpvciwgMCwgMjU2LCBuYW1lLCBmb3BzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXJfY2hyZGV2KHVuc2lnbmVkIGludCBtYWpvciwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlfX3VucmVnaXN0ZXJfY2hyZGV2KG1ham9yLCAwLCAyNTYsIG5hbWUpOworfQorCiAvKiBmcy9ibG9ja19kZXYuYyAqLwogI2RlZmluZSBCREVWTkFNRV9TSVpFCTMyCS8qIExhcmdlc3Qgc3RyaW5nIGZvciBhIGJsb2NrZGV2IGlkZW50aWZpZXIgKi8KICNkZWZpbmUgQkRFVlRfU0laRQkxMAkvKiBMYXJnZXN0IHN0cmluZyBmb3IgTUFKOk1JTiBmb3IgYmxrZGV2ICovCkBAIC0yMDcwLDEyICsyMDc3LDEyIEBACiBleHRlcm4gaW50IGludmFsaWRhdGVfaW5vZGVfcGFnZXMyKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKIGV4dGVybiBpbnQgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJCSBwZ29mZl90IHN0YXJ0LCBwZ29mZl90IGVuZCk7Ci1leHRlcm4gdm9pZCBnZW5lcmljX3N5bmNfc2JfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogZXh0ZXJuIGludCB3cml0ZV9pbm9kZV9ub3coc3RydWN0IGlub2RlICosIGludCk7CiBleHRlcm4gaW50IGZpbGVtYXBfZmRhdGF3cml0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIGV4dGVybiBpbnQgZmlsZW1hcF9mbHVzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIGV4dGVybiBpbnQgZmlsZW1hcF9mZGF0YXdhaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CitleHRlcm4gaW50IGZpbGVtYXBfZmRhdGF3YWl0X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIGxvZmZfdCBsc3RhcnQsCisJCQkJICAgbG9mZl90IGxlbmQpOwogZXh0ZXJuIGludCBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKIGV4dGVybiBpbnQgZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkgICAgICAgIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5kKTsKQEAgLTIwODYsNyArMjA5MywxMCBAQAogZXh0ZXJuIGludCBmaWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKTsKIAorZXh0ZXJuIGludCB2ZnNfZnN5bmNfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCSAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50IGRhdGFzeW5jKTsKIGV4dGVybiBpbnQgdmZzX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYyk7CitleHRlcm4gaW50IGdlbmVyaWNfd3JpdGVfc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHBvcywgbG9mZl90IGNvdW50KTsKIGV4dGVybiB2b2lkIHN5bmNfc3VwZXJzKHZvaWQpOwogZXh0ZXJuIHZvaWQgZW1lcmdlbmN5X3N5bmModm9pZCk7CiBleHRlcm4gdm9pZCBlbWVyZ2VuY3lfcmVtb3VudCh2b2lkKTsKQEAgLTIxODYsMTYgKzIxOTYsMTUgQEAKIGV4dGVybiBpbnQgc2V0X2Jsb2Nrc2l6ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGludCk7CiBleHRlcm4gaW50IHNiX3NldF9ibG9ja3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CiBleHRlcm4gaW50IHNiX21pbl9ibG9ja3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7Ci1leHRlcm4gaW50IHNiX2hhc19kaXJ0eV9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogCiBleHRlcm4gaW50IGdlbmVyaWNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKIGV4dGVybiBpbnQgZ2VuZXJpY19maWxlX3JlYWRvbmx5X21tYXAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogZXh0ZXJuIGludCBmaWxlX3JlYWRfYWN0b3IocmVhZF9kZXNjcmlwdG9yX3QgKiBkZXNjLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBpbnQgZ2VuZXJpY193cml0ZV9jaGVja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCAqcG9zLCBzaXplX3QgKmNvdW50LCBpbnQgaXNibGspOwogZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90KTsKK2V4dGVybiBzc2l6ZV90IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosIHVuc2lnbmVkIGxvbmcsCisJCWxvZmZfdCAqKTsKIGV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoc3RydWN0IGtpb2NiICosIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCB1bnNpZ25lZCBsb25nLCBsb2ZmX3QpOwotZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soc3RydWN0IGtpb2NiICosIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLAotCQl1bnNpZ25lZCBsb25nLCBsb2ZmX3QpOwogZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX2RpcmVjdF93cml0ZShzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosCiAJCXVuc2lnbmVkIGxvbmcgKiwgbG9mZl90LCBsb2ZmX3QgKiwgc2l6ZV90LCBzaXplX3QpOwogZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX2J1ZmZlcmVkX3dyaXRlKHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwKQEAgLTIyMDUsNiArMjIxNCwxMCBAQAogZXh0ZXJuIGludCBnZW5lcmljX3NlZ21lbnRfY2hlY2tzKGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAogCQl1bnNpZ25lZCBsb25nICpucl9zZWdzLCBzaXplX3QgKmNvdW50LCBpbnQgYWNjZXNzX2ZsYWdzKTsKIAorLyogZnMvYmxvY2tfZGV2LmMgKi8KK2V4dGVybiBzc2l6ZV90IGJsa2Rldl9haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpOworCiAvKiBmcy9zcGxpY2UuYyAqLwogZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLAogCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCmluZGV4IGE4MTE3MGQuLjIzZjcxNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaApAQCAtOTMsMTYgKzkzLDIyIEBACiAJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLAogCQkJCSAgaW50IHBjKTsKIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCi10cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbGVuLAordHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKHN0cnVjdCByaW5nX2J1ZmZlciAqKmN1cnJlbnRfYnVmZmVyLAorCQkJCSAgaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKLXZvaWQgdHJhY2VfY3VycmVudF9idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAordm9pZCB0cmFjZV9jdXJyZW50X2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJCQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAogCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOwotdm9pZCB0cmFjZV9ub3dha2VfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCwKK3ZvaWQgdHJhY2Vfbm93YWtlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJCSAgICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAogCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOwotdm9pZCB0cmFjZV9jdXJyZW50X2J1ZmZlcl9kaXNjYXJkX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KTsKK3ZvaWQgdHJhY2VfY3VycmVudF9idWZmZXJfZGlzY2FyZF9jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQkJCSBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KTsKIAogdm9pZCB0cmFjaW5nX3JlY29yZF9jbWRsaW5lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIAorc3RydWN0IGV2ZW50X2ZpbHRlcjsKKwogc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJY2hhcgkJCSpuYW1lOwpAQCAtMTEwLDE2ICsxMTYsMTggQEAKIAlzdHJ1Y3QgZGVudHJ5CQkqZGlyOwogCXN0cnVjdCB0cmFjZV9ldmVudAkqZXZlbnQ7CiAJaW50CQkJZW5hYmxlZDsKLQlpbnQJCQkoKnJlZ2Z1bmMpKHZvaWQpOwotCXZvaWQJCQkoKnVucmVnZnVuYykodm9pZCk7CisJaW50CQkJKCpyZWdmdW5jKSh2b2lkICopOworCXZvaWQJCQkoKnVucmVnZnVuYykodm9pZCAqKTsKIAlpbnQJCQlpZDsKIAlpbnQJCQkoKnJhd19pbml0KSh2b2lkKTsKLQlpbnQJCQkoKnNob3dfZm9ybWF0KShzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKLQlpbnQJCQkoKmRlZmluZV9maWVsZHMpKHZvaWQpOworCWludAkJCSgqc2hvd19mb3JtYXQpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKKwkJCQkJICAgICAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpOworCWludAkJCSgqZGVmaW5lX2ZpZWxkcykoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOwogCXN0cnVjdCBsaXN0X2hlYWQJZmllbGRzOwogCWludAkJCWZpbHRlcl9hY3RpdmU7Ci0Jdm9pZAkJCSpmaWx0ZXI7CisJc3RydWN0IGV2ZW50X2ZpbHRlcgkqZmlsdGVyOwogCXZvaWQJCQkqbW9kOworCXZvaWQJCQkqZGF0YTsKIAogCWF0b21pY190CQlwcm9maWxlX2NvdW50OwogCWludAkJCSgqcHJvZmlsZV9lbmFibGUpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKQEAgLTEyOSwxNSArMTM3LDI1IEBACiAjZGVmaW5lIE1BWF9GSUxURVJfUFJFRAkJMzIKICNkZWZpbmUgTUFYX0ZJTFRFUl9TVFJfVkFMCTEyOAogCi1leHRlcm4gaW50IGluaXRfcHJlZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKIGV4dGVybiB2b2lkIGRlc3Ryb3lfcHJlZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKIGV4dGVybiBpbnQgZmlsdGVyX21hdGNoX3ByZWRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqcmVjKTsKLWV4dGVybiBpbnQgZmlsdGVyX2N1cnJlbnRfY2hlY2tfZGlzY2FyZChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsCitleHRlcm4gaW50IGZpbHRlcl9jdXJyZW50X2NoZWNrX2Rpc2NhcmQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQkJCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKIAkJCQkJdm9pZCAqcmVjLAogCQkJCQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KTsKIAotZXh0ZXJuIGludCB0cmFjZV9kZWZpbmVfZmllbGQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBjaGFyICp0eXBlLAotCQkJICAgICAgY2hhciAqbmFtZSwgaW50IG9mZnNldCwgaW50IHNpemUsIGludCBpc19zaWduZWQpOworZW51bSB7CisJRklMVEVSX09USEVSID0gMCwKKwlGSUxURVJfU1RBVElDX1NUUklORywKKwlGSUxURVJfRFlOX1NUUklORywKKwlGSUxURVJfUFRSX1NUUklORywKK307CisKK2V4dGVybiBpbnQgdHJhY2VfZGVmaW5lX2ZpZWxkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgaW50IGlzX3NpZ25lZCwKKwkJCSAgICAgIGludCBmaWx0ZXJfdHlwZSk7CitleHRlcm4gaW50IHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiAKICNkZWZpbmUgaXNfc2lnbmVkX3R5cGUodHlwZSkJKCgodHlwZSkoLTEpKSA8IDApCiAKQEAgLTE2MiwxMSArMTgwLDQgQEAKIAkJX190cmFjZV9wcmludGsoaXAsIGZtdCwgIyNhcmdzKTsJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIF9fY29tbW9uX2ZpZWxkKHR5cGUsIGl0ZW0sIGlzX3NpZ25lZCkJCQkJXAotCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCAjdHlwZSwgImNvbW1vbl8iICNpdGVtLAlcCi0JCQkJIG9mZnNldG9mKHR5cGVvZihmaWVsZC5lbnQpLCBpdGVtKSwJXAotCQkJCSBzaXplb2YoZmllbGQuZW50Lml0ZW0pLCBpc19zaWduZWQpOwlcCi0JaWYgKHJldCkJCQkJCQkJXAotCQlyZXR1cm4gcmV0OwotCiAjZW5kaWYgLyogX0xJTlVYX0ZUUkFDRV9FVkVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmggYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKaW5kZXggNDVmYzMyMC4uNDQyNjNjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5oZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaApAQCAtOTgsNyArOTgsNyBAQAogCWludCBtYWtlX2l0X2ZhaWw7CiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nIHN0YW1wOwotCWludCBpbl9mbGlnaHQ7CisJaW50IGluX2ZsaWdodFsyXTsKICNpZmRlZglDT05GSUdfU01QCiAJc3RydWN0IGRpc2tfc3RhdHMgKmRrc3RhdHM7CiAjZWxzZQpAQCAtMzIyLDE4ICszMjIsMjMgQEAKICNkZWZpbmUgcGFydF9zdGF0X3N1YihjcHUsIGdlbmRpc2twLCBmaWVsZCwgc3VibmQpCQkJXAogCXBhcnRfc3RhdF9hZGQoY3B1LCBnZW5kaXNrcCwgZmllbGQsIC1zdWJuZCkKIAotc3RhdGljIGlubGluZSB2b2lkIHBhcnRfaW5jX2luX2ZsaWdodChzdHJ1Y3QgaGRfc3RydWN0ICpwYXJ0KQorc3RhdGljIGlubGluZSB2b2lkIHBhcnRfaW5jX2luX2ZsaWdodChzdHJ1Y3QgaGRfc3RydWN0ICpwYXJ0LCBpbnQgcncpCiB7Ci0JcGFydC0+aW5fZmxpZ2h0Kys7CisJcGFydC0+aW5fZmxpZ2h0W3J3XSsrOwogCWlmIChwYXJ0LT5wYXJ0bm8pCi0JCXBhcnRfdG9fZGlzayhwYXJ0KS0+cGFydDAuaW5fZmxpZ2h0Kys7CisJCXBhcnRfdG9fZGlzayhwYXJ0KS0+cGFydDAuaW5fZmxpZ2h0W3J3XSsrOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGFydF9kZWNfaW5fZmxpZ2h0KHN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgcGFydF9kZWNfaW5fZmxpZ2h0KHN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQsIGludCBydykKIHsKLQlwYXJ0LT5pbl9mbGlnaHQtLTsKKwlwYXJ0LT5pbl9mbGlnaHRbcnddLS07CiAJaWYgKHBhcnQtPnBhcnRubykKLQkJcGFydF90b19kaXNrKHBhcnQpLT5wYXJ0MC5pbl9mbGlnaHQtLTsKKwkJcGFydF90b19kaXNrKHBhcnQpLT5wYXJ0MC5pbl9mbGlnaHRbcnddLS07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBhcnRfaW5fZmxpZ2h0KHN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQpCit7CisJcmV0dXJuIHBhcnQtPmluX2ZsaWdodFswXSArIHBhcnQtPmluX2ZsaWdodFsxXTsKIH0KIAogLyogYmxvY2svYmxrLWNvcmUuYyAqLwpAQCAtNTQ2LDYgKzU1MSw4IEBACiAJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKIGV4dGVybiBzc2l6ZV90IHBhcnRfc3RhdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworZXh0ZXJuIHNzaXplX3QgcGFydF9pbmZsaWdodF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogZXh0ZXJuIHNzaXplX3QgcGFydF9mYWlsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmczJfb25kaXNrLmggYi9pbmNsdWRlL2xpbnV4L2dmczJfb25kaXNrLmgKaW5kZXggYzU2YjRiYy4uYjgwYzg4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnMyX29uZGlzay5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZzMl9vbmRpc2suaApAQCAtMzMzLDYgKzMzMywyOCBAQAogCiAvKgogICogRXh0ZW5kZWQgYXR0cmlidXRlIGhlYWRlciBmb3JtYXQKKyAqCisgKiBUaGlzIHdvcmtzIGluIGEgc2ltaWxhciB3YXkgdG8gZGlyZW50cy4gVGhlcmUgaXMgYSBmaXhlZCBzaXplIGhlYWRlcgorICogZm9sbG93ZWQgYnkgYSB2YXJpYWJsZSBsZW5ndGggc2VjdGlvbiBtYWRlIHVwIG9mIHRoZSBuYW1lIGFuZCB0aGUKKyAqIGFzc29jaWF0ZWQgZGF0YS4gSW4gdGhlIGNhc2Ugb2YgYSAic3R1ZmZlZCIgZW50cnksIHRoZSB2YWx1ZSBpcworICogaW5saW5lIGRpcmVjdGx5IGFmdGVyIHRoZSBuYW1lLCB0aGUgZWFfbnVtX3B0cnMgZW50cnkgd2lsbCBiZQorICogemVybyBpbiB0aGF0IGNhc2UuIEZvciBub24tInN0dWZmZWQiIGVudHJpZXMsIHRoZXJlIHdpbGwgYmUKKyAqIGEgc2V0IG9mIHBvaW50ZXJzIChhbGlnbmVkIHRvIDggYnl0ZSBib3VuZGFyeSkgdG8gdGhlIGJsb2NrKHMpCisgKiBjb250YWluaW5nIHRoZSB2YWx1ZS4KKyAqCisgKiBUaGUgYmxvY2tzIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBhbmQgdGhlIGJsb2NrcyBjb250YWluaW5nIHRoZQorICogZXh0ZW5kZWQgYXR0cmlidXRlIGhlYWRlcnMgdGhlbXNlbHZlcyBhbGwgc3RhcnQgd2l0aCB0aGUgY29tbW9uCisgKiBtZXRhZGF0YSBoZWFkZXIuIEVhY2ggaW5vZGUsIGlmIGl0IGhhcyBleHRlbmRlZCBhdHRyaWJ1dGVzLCB3aWxsCisgKiBoYXZlIGVpdGhlciBhIHNpbmdsZSBibG9jayBjb250YWluaW5nIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgaGVhZGVycworICogb3IgYSBzaW5nbGUgaW5kaXJlY3QgYmxvY2sgcG9pbnRpbmcgdG8gYmxvY2tzIGNvbnRhaW5pbmcgdGhlCisgKiBleHRlbmRlZCBhdHRyaWJ1cmUgaGVhZGVycy4KKyAqCisgKiBUaGUgbWF4aW1pbSBzaXplIG9mIHRoZSBkYXRhIHBhcnQgb2YgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGlzIDY0aworICogc28gdGhlIG51bWJlciBvZiBibG9ja3MgcmVxdWlyZWQgZGVwZW5kcyB1cG9uIGJsb2NrIHNpemUuIFNpbmNlIHRoZQorICogYmxvY2sgc2l6ZSBhbHNvIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBwb2ludGVycyBpbiBhbiBpbmRpcmVjdAorICogYmxvY2ssIGl0cyBhIGZhaXJseSBjb21wbGljYXRlZCBjYWxjdWxhdGlvbiB0byB3b3JrIG91dCB0aGUgbWF4aW11bQorICogbnVtYmVyIG9mIGJsb2NrcyB0aGF0IGFuIGlub2RlIG1heSBoYXZlIHJlbGF0aW5nIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMuCisgKgogICovCiAKICNkZWZpbmUgR0ZTMl9FQV9NQVhfTkFNRV9MRU4JMjU1CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hhcmRpcnEuaCBiL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCmluZGV4IDgyNDZjNjkuLjZkNTI3ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaGFyZGlycS5oCkBAIC02NCw2ICs2NCwxMiBAQAogI2RlZmluZSBIQVJESVJRX09GRlNFVAkoMVVMIDw8IEhBUkRJUlFfU0hJRlQpCiAjZGVmaW5lIE5NSV9PRkZTRVQJKDFVTCA8PCBOTUlfU0hJRlQpCiAKKyNpZm5kZWYgUFJFRU1QVF9BQ1RJVkUKKyNkZWZpbmUgUFJFRU1QVF9BQ1RJVkVfQklUUwkxCisjZGVmaW5lIFBSRUVNUFRfQUNUSVZFX1NISUZUCShOTUlfU0hJRlQgKyBOTUlfQklUUykKKyNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJKF9fSVJRX01BU0soUFJFRU1QVF9BQ1RJVkVfQklUUykgPDwgUFJFRU1QVF9BQ1RJVkVfU0hJRlQpCisjZW5kaWYKKwogI2lmIFBSRUVNUFRfQUNUSVZFIDwgKDEgPDwgKE5NSV9TSElGVCArIE5NSV9CSVRTKSkKICNlcnJvciBQUkVFTVBUX0FDVElWRSBpcyB0b28gbG93IQogI2VuZGlmCkBAIC0xMzIsNyArMTM4LDcgQEAKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfTk9fSFopICYmICFkZWZpbmVkKENPTkZJR19DTEFTU0lDX1JDVSkKKyNpZiBkZWZpbmVkKENPTkZJR19OT19IWikKIGV4dGVybiB2b2lkIHJjdV9pcnFfZW50ZXIodm9pZCk7CiBleHRlcm4gdm9pZCByY3VfaXJxX2V4aXQodm9pZCk7CiBleHRlcm4gdm9pZCByY3Vfbm1pX2VudGVyKHZvaWQpOwpAQCAtMTQyLDcgKzE0OCw3IEBACiAjIGRlZmluZSByY3VfaXJxX2V4aXQoKSBkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSByY3Vfbm1pX2VudGVyKCkgZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgcmN1X25taV9leGl0KCkgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmIC8qICNpZiBkZWZpbmVkKENPTkZJR19OT19IWikgJiYgIWRlZmluZWQoQ09ORklHX0NMQVNTSUNfUkNVKSAqLworI2VuZGlmIC8qICNpZiBkZWZpbmVkKENPTkZJR19OT19IWikgKi8KIAogLyoKICAqIEl0IGlzIHNhZmUgdG8gZG8gbm9uLWF0b21pYyBvcHMgb24gLT5oYXJkaXJxX2NvbnRleHQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hkbGMuaCBiL2luY2x1ZGUvbGludXgvaGRsYy5oCmluZGV4IDZhNmU3MDEuLmVlMjc1YzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGRsYy5oCisrKyBiL2luY2x1ZGUvbGludXgvaGRsYy5oCkBAIC0zOCw3ICszOCw3IEBACiAJaW50ICgqaW9jdGwpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKIAlfX2JlMTYgKCp0eXBlX3RyYW5zKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAlpbnQgKCpuZXRpZl9yeCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0JaW50ICgqeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJbmV0ZGV2X3R4X3QgKCp4bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CiAJc3RydWN0IGhkbGNfcHJvdG8gKm5leHQ7IC8qIG5leHQgcHJvdG9jb2wgaW4gdGhlIGxpc3QgKi8KIH07CkBAIC01MSw3ICs1MSw3IEBACiAJCSAgICAgIHVuc2lnbmVkIHNob3J0IGVuY29kaW5nLCB1bnNpZ25lZCBzaG9ydCBwYXJpdHkpOwogCiAJLyogaGFyZHdhcmUgZHJpdmVyIG11c3QgaGFuZGxlIHRoaXMgaW5zdGVhZCBvZiBkZXYtPmhhcmRfc3RhcnRfeG1pdCAqLwotCWludCAoKnhtaXQpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCW5ldGRldl90eF90ICgqeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIAkvKiBUaGluZ3MgYmVsb3cgYXJlIGZvciBIRExDIGxheWVyIGludGVybmFsIHVzZSBvbmx5ICovCiAJY29uc3Qgc3RydWN0IGhkbGNfcHJvdG8gKnByb3RvOwpAQCAtNjAsNyArNjAsNyBAQAogCXNwaW5sb2NrX3Qgc3RhdGVfbG9jazsKIAl2b2lkICpzdGF0ZTsKIAl2b2lkICpwcml2OwotfWhkbGNfZGV2aWNlOworfSBoZGxjX2RldmljZTsKIAogCiAKQEAgLTEwNiw3ICsxMDYsNyBAQAogLyogTWF5IGJlIHVzZWQgYnkgaGFyZHdhcmUgZHJpdmVyICovCiBpbnQgaGRsY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KTsKIC8qIE11c3QgYmUgcG9pbnRlZCB0byBieSBodyBkcml2ZXIncyBkZXYtPm5ldGRldl9vcHMtPm5kb19zdGFydF94bWl0ICovCi1pbnQgaGRsY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworbmV0ZGV2X3R4X3QgaGRsY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBpbnQgYXR0YWNoX2hkbGNfcHJvdG9jb2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGhkbGNfcHJvdG8gKnByb3RvLAogCQkJIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlkLWRlYnVnLmggYi9pbmNsdWRlL2xpbnV4L2hpZC1kZWJ1Zy5oCmluZGV4IDUwZDU2OGUuLjUzNzQ0ZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlkLWRlYnVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWQtZGVidWcuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX19ISURfREVCVUdfSAogCiAvKgotICogIENvcHlyaWdodCAoYykgMjAwNwlKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNy0yMDA5CUppcmkgS29zaW5hCiAgKi8KIAogLyoKQEAgLTIyLDI0ICsyMiw0NCBAQAogICoKICAqLwogCi0jaWZkZWYgQ09ORklHX0hJRF9ERUJVRworI2RlZmluZSBISURfREVCVUdfQlVGU0laRSA1MTIKIAotdm9pZCBoaWRfZHVtcF9pbnB1dChzdHJ1Y3QgaGlkX3VzYWdlICosIF9fczMyKTsKLXZvaWQgaGlkX2R1bXBfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICopOwotdm9pZCBoaWRfZHVtcF9maWVsZChzdHJ1Y3QgaGlkX2ZpZWxkICosIGludCk7Ci12b2lkIGhpZF9yZXNvbHZfdXNhZ2UodW5zaWduZWQpOwotdm9pZCBoaWRfcmVzb2x2X2V2ZW50KF9fdTgsIF9fdTE2KTsKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwordm9pZCBoaWRfZHVtcF9pbnB1dChzdHJ1Y3QgaGlkX2RldmljZSAqLCBzdHJ1Y3QgaGlkX3VzYWdlICosIF9fczMyKTsKK3ZvaWQgaGlkX2R1bXBfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBzZXFfZmlsZSAqKTsKK3ZvaWQgaGlkX2R1bXBfZmllbGQoc3RydWN0IGhpZF9maWVsZCAqLCBpbnQsIHN0cnVjdCBzZXFfZmlsZSAqKTsKK2NoYXIgKmhpZF9yZXNvbHZfdXNhZ2UodW5zaWduZWQsIHN0cnVjdCBzZXFfZmlsZSAqKTsKK3ZvaWQgaGlkX2RlYnVnX3JlZ2lzdGVyKHN0cnVjdCBoaWRfZGV2aWNlICosIGNvbnN0IGNoYXIgKik7Cit2b2lkIGhpZF9kZWJ1Z191bnJlZ2lzdGVyKHN0cnVjdCBoaWRfZGV2aWNlICopOwordm9pZCBoaWRfZGVidWdfaW5pdCh2b2lkKTsKK3ZvaWQgaGlkX2RlYnVnX2V4aXQodm9pZCk7Cit2b2lkIGhpZF9kZWJ1Z19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqLCBjaGFyICopOworCisKK3N0cnVjdCBoaWRfZGVidWdfbGlzdCB7CisJY2hhciAqaGlkX2RlYnVnX2J1ZjsKKwlpbnQgaGVhZDsKKwlpbnQgdGFpbDsKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOworCXN0cnVjdCBoaWRfZGV2aWNlICpoZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1Y3QgbXV0ZXggcmVhZF9tdXRleDsKK307CiAKICNlbHNlCiAKLSNkZWZpbmUgaGlkX2R1bXBfaW5wdXQoYSxiKSAgICAgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBoaWRfZHVtcF9kZXZpY2UoYykgICAgICBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGhpZF9kdW1wX2ZpZWxkKGEsYikgICAgIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgaGlkX3Jlc29sdl91c2FnZShhKSAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgaGlkX3Jlc29sdl9ldmVudChhLGIpICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaGlkX2R1bXBfaW5wdXQoYSxiLGMpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGhpZF9kdW1wX2RldmljZShhLGIpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGhpZF9kdW1wX2ZpZWxkKGEsYixjKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBoaWRfcmVzb2x2X3VzYWdlKGEsYikJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaGlkX2RlYnVnX3JlZ2lzdGVyKGEsIGIpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaGlkX2RlYnVnX3VucmVnaXN0ZXIoYSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaGlkX2RlYnVnX2luaXQoKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBoaWRfZGVidWdfZXhpdCgpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGhpZF9kZWJ1Z19ldmVudChhLGIpCQlkbyB7IH0gd2hpbGUgKDApCiAKLSNlbmRpZiAvKiBDT05GSUdfSElEX0RFQlVHICovCi0KKyNlbmRpZgogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWQuaCBiL2luY2x1ZGUvbGludXgvaGlkLmgKaW5kZXggNTM0ODlmZC4uYTBlYmRhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZC5oCkBAIC01MDAsNiArNTAwLDE0IEBACiAKIAkvKiBoYW5kbGVyIGZvciByYXcgb3V0cHV0IGRhdGEsIHVzZWQgYnkgaGlkcmF3ICovCiAJaW50ICgqaGlkX291dHB1dF9yYXdfcmVwb3J0KSAoc3RydWN0IGhpZF9kZXZpY2UgKiwgX191OCAqLCBzaXplX3QpOworCisJLyogZGVidWdnaW5nIHN1cHBvcnQgdmlhIGRlYnVnZnMgKi8KKwl1bnNpZ25lZCBzaG9ydCBkZWJ1ZzsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z19kaXI7CisJc3RydWN0IGRlbnRyeSAqZGVidWdfcmRlc2M7CisJc3RydWN0IGRlbnRyeSAqZGVidWdfZXZlbnRzOworCXN0cnVjdCBsaXN0X2hlYWQgZGVidWdfbGlzdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBkZWJ1Z193YWl0OwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkICpoaWRfZ2V0X2RydmRhdGEoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCkBAIC02NTcsOSArNjY1LDcgQEAKIAogLyogSElEIGNvcmUgQVBJICovCiAKLSNpZmRlZiBDT05GSUdfSElEX0RFQlVHCiBleHRlcm4gaW50IGhpZF9kZWJ1ZzsKLSNlbmRpZgogCiBleHRlcm4gaW50IGhpZF9hZGRfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgaGlkX2Rlc3Ryb3lfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICopOwpAQCAtODE1LDIxICs4MjEsOSBAQAogI2RlZmluZSBoaWRfcGlkZmZfaW5pdCBOVUxMCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19ISURfREVCVUcKICNkZWZpbmUgZGJnX2hpZChmb3JtYXQsIGFyZy4uLikgaWYgKGhpZF9kZWJ1ZykgXAogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQgLFwKIAkJCQlfX0ZJTEVfXyAsICMjIGFyZykKLSNkZWZpbmUgZGJnX2hpZF9saW5lKGZvcm1hdCwgYXJnLi4uKSBpZiAoaGlkX2RlYnVnKSBcCi0JCQkJcHJpbnRrKGZvcm1hdCwgIyMgYXJnKQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSkKLWRiZ19oaWQoY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZGVmaW5lIGRiZ19oaWRfbGluZSBkYmdfaGlkCi0jZW5kaWYgLyogSElEX0RFQlVHICovCi0KICNkZWZpbmUgZXJyX2hpZChmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmb3JtYXQgIlxuIiAsIFwKIAkJX19GSUxFX18gLCAjIyBhcmcpCiAjZW5kaWYgLyogSElEX0ZGICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmggYi9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKaW5kZXggMGRjODBlZi4uM2ZkMjFkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL3R3bDQwMzAuaApAQCAtMjUsNiArMjUsOSBAQAogI2lmbmRlZiBfX1RXTDQwMzBfSF8KICNkZWZpbmUgX19UV0w0MDMwX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKwogLyoKICAqIFVzaW5nIHRoZSB0d2w0MDMwIGNvcmUgd2UgYWRkcmVzcyByZWdpc3RlcnMgdXNpbmcgYSBwYWlyCiAgKgl7IG1vZHVsZSBpZCwgcmVsYXRpdmUgcmVnaXN0ZXIgb2Zmc2V0IH0KQEAgLTMwMiwxMyArMzA1LDE3IEBACiAJaW50CQlpcnFfbGluZTsKIH07CiAKKy8qIEJvYXJkcyBoYXZlIHVuaXFlIG1hcHBpbmdzIG9mIHtjb2wsIHJvd30gLS0+IGtleWNvZGUuCisgKiBDb2x1bW4gYW5kIHJvdyBhcmUgNCBiaXRzLCBidXQgcmFuZ2Ugb25seSBmcm9tIDAuLjcuCisgKiBhIFBFUlNJU1RFTlRfS0VZIGlzICJhbHdheXMgb24iIGFuZCBuZXZlciByZXBvcnRlZC4KKyAqLworI2RlZmluZSBQRVJTSVNURU5UX0tFWShjLCByKQlLRVkoKGMpLCAociksIEtFWV9SRVNFUlZFRCkKKwogc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgewotCWludCByb3dzOwotCWludCBjb2xzOwotCWludCAqa2V5bWFwOwotCWludCBpcnE7Ci0JdW5zaWduZWQgaW50IGtleW1hcHNpemU7Ci0JdW5zaWduZWQgaW50IHJlcDoxOworCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgKmtleW1hcF9kYXRhOworCXVuc2lnbmVkIHJvd3M7CisJdW5zaWduZWQgY29sczsKKwlib29sIHJlcDsKIH07CiAKIGVudW0gdHdsNDAzMF91c2JfbW9kZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oIGIvaW5jbHVkZS9saW51eC9pY21wdjYuaAppbmRleCBiNmE4NTE4Li5jMGQ4MzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKQEAgLTE3MSw4ICsxNzEsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotCiAKIGV4dGVybiB2b2lkCQkJCWljbXB2Nl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCQkgICAgdTggdHlwZSwgdTggY29kZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IGVkYzkzYTYuLmU0MTM1ZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtMjU4LDYgKzI1OCw3IEBACiAJSURFX1RGTEFHX0RZTgkJCT0gKDEgPDwgNSksCiAJSURFX1RGTEFHX0ZTCQkJPSAoMSA8PCA2KSwKIAlJREVfVEZMQUdfTVVMVElfUElPCQk9ICgxIDw8IDcpLAorCUlERV9URkxBR19TRVRfWEZFUgkJPSAoMSA8PCA4KSwKIH07CiAKIGVudW0gewpAQCAtMjk0LDcgKzI5NSw3IEBACiAJCX0gb3V0LCBpbjsKIAl9IHZhbGlkOwogCi0JdTgJCQl0Zl9mbGFnczsKKwl1MTYJCQl0Zl9mbGFnczsKIAl1OAkJCWZ0Zl9mbGFnczsJLyogZm9yIFRBU0tGSUxFIGlvY3RsICovCiAJaW50CQkJcHJvdG9jb2w7CiAKQEAgLTkxOCw4ICs5MTksNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogCWNvbnN0IGNoYXIJKm5hbWU7CiAJbW9kZV90CQltb2RlOwotCXJlYWRfcHJvY190CSpyZWFkX3Byb2M7Ci0Jd3JpdGVfcHJvY190CSp3cml0ZV9wcm9jOworCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKnByb2NfZm9wczsKIH0gaWRlX3Byb2NfZW50cnlfdDsKIAogdm9pZCBwcm9jX2lkZV9jcmVhdGUodm9pZCk7CkBAIC05MzEsMjQgKzkzMSw4IEBACiB2b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2RyaXZlciAqKTsKIHZvaWQgaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9kcml2ZXIgKik7CiAKLXJlYWRfcHJvY190IHByb2NfaWRlX3JlYWRfY2FwYWNpdHk7Ci1yZWFkX3Byb2NfdCBwcm9jX2lkZV9yZWFkX2dlb21ldHJ5OwotCi0vKgotICogU3RhbmRhcmQgZXhpdCBzdHVmZjoKLSAqLwotI2RlZmluZSBQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLHN0YXJ0LG9mZixjb3VudCxlb2YsbGVuKSBcCi17CQkJCQlcCi0JbGVuIC09IG9mZjsJCQlcCi0JaWYgKGxlbiA8IGNvdW50KSB7CQlcCi0JCSplb2YgPSAxOwkJXAotCQlpZiAobGVuIDw9IDApCQlcCi0JCQlyZXR1cm4gMDsJXAotCX0gZWxzZQkJCQlcCi0JCWxlbiA9IGNvdW50OwkJXAotCSpzdGFydCA9IHBhZ2UgKyBvZmY7CQlcCi0JcmV0dXJuIGxlbjsJCQlcCi19CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGVfY2FwYWNpdHlfcHJvY19mb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaWRlX2dlb21ldHJ5X3Byb2NfZm9wczsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY19pZGVfY3JlYXRlKHZvaWQpIHsgOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcHJvY19pZGVfZGVzdHJveSh2b2lkKSB7IDsgfQpAQCAtOTYwLDcgKzk0NCw2IEBACiAJCQkJCSAgICBzdHJ1Y3QgaWRlX2RyaXZlciAqZHJpdmVyKSB7IDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJCQkJICAgICAgc3RydWN0IGlkZV9kcml2ZXIgKmRyaXZlcikgeyA7IH0KLSNkZWZpbmUgUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSxzdGFydCxvZmYsY291bnQsZW9mLGxlbikgcmV0dXJuIDA7CiAjZW5kaWYKIAogZW51bSB7CkBAIC0xMDgxLDYgKzEwNjQsNyBAQAogCiBpbnQgaWRlX2J1c3lfc2xlZXAoaWRlX2RyaXZlX3QgKiwgdW5zaWduZWQgbG9uZywgaW50KTsKIAoraW50IF9faWRlX3dhaXRfc3RhdChpZGVfZHJpdmVfdCAqLCB1OCwgdTgsIHVuc2lnbmVkIGxvbmcsIHU4ICopOwogaW50IGlkZV93YWl0X3N0YXQoaWRlX3N0YXJ0c3RvcF90ICosIGlkZV9kcml2ZV90ICosIHU4LCB1OCwgdW5zaWduZWQgbG9uZyk7CiAKIGlkZV9zdGFydHN0b3BfdCBpZGVfZG9fcGFya191bnBhcmsoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CkBAIC0xMTY5LDcgKzExNTMsNyBAQAogCiBpbnQgaWRlX3Rhc2tmaWxlX2lvY3RsKGlkZV9kcml2ZV90ICosIHVuc2lnbmVkIGxvbmcpOwogCi1pbnQgaWRlX2Rldl9yZWFkX2lkKGlkZV9kcml2ZV90ICosIHU4LCB1MTYgKik7CitpbnQgaWRlX2Rldl9yZWFkX2lkKGlkZV9kcml2ZV90ICosIHU4LCB1MTYgKiwgaW50KTsKIAogZXh0ZXJuIGludCBpZGVfZHJpdmVpZF91cGRhdGUoaWRlX2RyaXZlX3QgKik7CiBleHRlcm4gaW50IGlkZV9jb25maWdfZHJpdmVfc3BlZWQoaWRlX2RyaXZlX3QgKiwgdTgpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaCBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKaW5kZXggYTkxNzNkNS4uNTJlMTVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCkBAIC0xMTUsNyArMTE1LDcgQEAKICNkZWZpbmUgSUVFRTgwMjExX01BWF9TU0lEX0xFTgkJMzIKIAogI2RlZmluZSBJRUVFODAyMTFfTUFYX01FU0hfSURfTEVOCTMyCi0jZGVmaW5lIElFRUU4MDIxMV9NRVNIX0NPTkZJR19MRU4JMTkKKyNkZWZpbmUgSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTgkyNAogCiAjZGVmaW5lIElFRUU4MDIxMV9RT1NfQ1RMX0xFTgkJMgogI2RlZmluZSBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSwkweDAwMEYKQEAgLTgwMiw2ICs4MDIsMzEgQEAKICNkZWZpbmUgSUVFRTgwMjExX0hUX0FNUERVX1BBUk1fRkFDVE9SCQkweDAzCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9BTVBEVV9QQVJNX0RFTlNJVFkJCTB4MUMKIAorLyoKKyAqIE1heGltdW0gbGVuZ3RoIG9mIEFNUERVIHRoYXQgdGhlIFNUQSBjYW4gcmVjZWl2ZS4KKyAqIExlbmd0aCA9IDIgXiAoMTMgKyBtYXhfYW1wZHVfbGVuZ3RoX2V4cCkgLSAxIChvY3RldHMpCisgKi8KK2VudW0gaWVlZTgwMjExX21heF9hbXBkdV9sZW5ndGhfZXhwIHsKKwlJRUVFODAyMTFfSFRfTUFYX0FNUERVXzhLID0gMCwKKwlJRUVFODAyMTFfSFRfTUFYX0FNUERVXzE2SyA9IDEsCisJSUVFRTgwMjExX0hUX01BWF9BTVBEVV8zMksgPSAyLAorCUlFRUU4MDIxMV9IVF9NQVhfQU1QRFVfNjRLID0gMworfTsKKworI2RlZmluZSBJRUVFODAyMTFfSFRfTUFYX0FNUERVX0ZBQ1RPUiAxMworCisvKiBNaW5pbXVtIE1QRFUgc3RhcnQgc3BhY2luZyAqLworZW51bSBpZWVlODAyMTFfbWluX21wZHVfc3BhY2luZyB7CisJSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV9OT05FID0gMCwJLyogTm8gcmVzdHJpY3Rpb24gKi8KKwlJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzBfMjUgPSAxLAkvKiAxLzQgdXNlYyAqLworCUlFRUU4MDIxMV9IVF9NUERVX0RFTlNJVFlfMF81ID0gMiwJLyogMS8yIHVzZWMgKi8KKwlJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzEgPSAzLAkvKiAxIHVzZWMgKi8KKwlJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzIgPSA0LAkvKiAyIHVzZWMgKi8KKwlJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzQgPSA1LAkvKiA0IHVzZWMgKi8KKwlJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzggPSA2LAkvKiA4IHVzZWMgKi8KKwlJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzE2ID0gNwkvKiAxNiB1c2VjICovCit9OworCiAvKioKICAqIHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAtIEhUIGluZm9ybWF0aW9uCiAgKgpAQCAtMTE5Niw2ICsxMjIxLDEwIEBACiAjZGVmaW5lIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNAkweDAwMEZBQzA1CiAjZGVmaW5lIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDCTB4MDAwRkFDMDYKIAorLyogQUtNIHN1aXRlIHNlbGVjdG9ycyAqLworI2RlZmluZSBXTEFOX0FLTV9TVUlURV84MDIxWAkJMHgwMDBGQUMwMQorI2RlZmluZSBXTEFOX0FLTV9TVUlURV9QU0sJCTB4MDAwRkFDMDIKKwogI2RlZmluZSBXTEFOX01BWF9LRVlfTEVOCQkzMgogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfYWRkci5oIGIvaW5jbHVkZS9saW51eC9pZl9hZGRyLmgKaW5kZXggYTYwYzgyMS4uZmQ5NzQwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9hZGRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9hZGRyLmgKQEAgLTQxLDYgKzQxLDcgQEAKIAogI2RlZmluZQlJRkFfRl9OT0RBRAkJMHgwMgogI2RlZmluZSBJRkFfRl9PUFRJTUlTVElDCTB4MDQKKyNkZWZpbmUgSUZBX0ZfREFERkFJTEVECQkweDA4CiAjZGVmaW5lCUlGQV9GX0hPTUVBRERSRVNTCTB4MTAKICNkZWZpbmUgSUZBX0ZfREVQUkVDQVRFRAkweDIwCiAjZGVmaW5lIElGQV9GX1RFTlRBVElWRQkJMHg0MApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9hcnAuaCBiL2luY2x1ZGUvbGludXgvaWZfYXJwLmgKaW5kZXggYjU1NDMwMC4uMjgyZWIzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9hcnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2FycC5oCkBAIC04Nyw3ICs4Nyw2IEBACiAjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTFfUFJJU00gODAyCS8qIElFRUUgODAyLjExICsgUHJpc20yIGhlYWRlciAgKi8KICNkZWZpbmUgQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUCA4MDMJLyogSUVFRSA4MDIuMTEgKyByYWRpb3RhcCBoZWFkZXIgKi8KICNkZWZpbmUgQVJQSFJEX0lFRUU4MDIxNTQJICA4MDQKLSNkZWZpbmUgQVJQSFJEX0lFRUU4MDIxNTRfUEhZCSAgODA1CiAKICNkZWZpbmUgQVJQSFJEX1BIT05FVAk4MjAJCS8qIFBob05ldCBtZWRpYSB0eXBlCQkqLwogI2RlZmluZSBBUlBIUkRfUEhPTkVUX1BJUEUgODIxCQkvKiBQaG9OZXQgcGlwZSBoZWFkZXIJCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmggYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKaW5kZXggNzBmZGJhMi4uNTgwYjYwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaApAQCAtMTM5LDEwICsxMzksMTAgQEAKIC8qCiAgKglEaXNwbGF5IGEgNiBieXRlIGRldmljZSBhZGRyZXNzIChNQUMpIGluIGEgcmVhZGFibGUgZm9ybWF0LgogICovCi1leHRlcm4gY2hhciAqcHJpbnRfbWFjKGNoYXIgKmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcik7CitleHRlcm4gY2hhciAqcHJpbnRfbWFjKGNoYXIgKmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcikgX19kZXByZWNhdGVkOwogI2RlZmluZSBNQUNfRk1UICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIKICNkZWZpbmUgTUFDX0JVRl9TSVpFCTE4Ci0jZGVmaW5lIERFQ0xBUkVfTUFDX0JVRih2YXIpIGNoYXIgdmFyW01BQ19CVUZfU0laRV0gX19tYXliZV91bnVzZWQKKyNkZWZpbmUgREVDTEFSRV9NQUNfQlVGKHZhcikgY2hhciB2YXJbTUFDX0JVRl9TSVpFXQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9mcmFkLmggYi9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaAppbmRleCA2NzNmMjIwLi44MGIzYTEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaApAQCAtNjksMTEgKzY5LDYgQEAKIAogI2RlZmluZSBETENJX1ZBTElEX0ZMQUdTCTB4MDAwQgogCi0vKiBGUkFEIGRyaXZlciB1c2VzIHRoZXNlIHRvIGluZGljYXRlIHdoYXQgaXQgZGlkIHdpdGggcGFja2V0ICovCi0jZGVmaW5lIERMQ0lfUkVUX09LCQkweDAwCi0jZGVmaW5lIERMQ0lfUkVUX0VSUgkJMHgwMQotI2RlZmluZSBETENJX1JFVF9EUk9QCQkweDAyCi0KIC8qIGRlZmluZXMgZm9yIHRoZSBhY3R1YWwgRnJhbWUgUmVsYXkgaGFyZHdhcmUgKi8KICNkZWZpbmUgRlJBRF9HRVRfQ09ORgkoU0lPQ0RFVlBSSVZBVEUpCiAjZGVmaW5lIEZSQURfU0VUX0NPTkYJKFNJT0NERVZQUklWQVRFICsgMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCmluZGV4IDkxNWJhNTcuLjNmNWZkNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaApAQCAtNjIsNiArNjIsNyBAQAogI2RlZmluZSBUVU5fRl9UU080CTB4MDIJLyogSSBjYW4gaGFuZGxlIFRTTyBmb3IgSVB2NCBwYWNrZXRzICovCiAjZGVmaW5lIFRVTl9GX1RTTzYJMHgwNAkvKiBJIGNhbiBoYW5kbGUgVFNPIGZvciBJUHY2IHBhY2tldHMgKi8KICNkZWZpbmUgVFVOX0ZfVFNPX0VDTgkweDA4CS8qIEkgY2FuIGhhbmRsZSBUU08gd2l0aCBFQ04gYml0cy4gKi8KKyNkZWZpbmUgVFVOX0ZfVUZPCTB4MTAJLyogSSBjYW4gaGFuZGxlIFVGTyBwYWNrZXRzICovCiAKIC8qIFByb3RvY29sIGluZm8gcHJlcGVuZGVkIHRvIHRoZSBwYWNrZXRzICh3aGVuIElGRl9OT19QSSBpcyBub3Qgc2V0KSAqLwogI2RlZmluZSBUVU5fUEtUX1NUUklQCTB4MDAwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0LmggYi9pbmNsdWRlL2xpbnV4L2luaXQuaAppbmRleCAxM2I2MzNlLi40MDBhZGJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXQuaApAQCAtMTAzLDggKzEwMyw4IEBACiAjZGVmaW5lIF9fSU5JVAkJLnNlY3Rpb24JIi5pbml0LnRleHQiLCJheCIKICNkZWZpbmUgX19GSU5JVAkJLnByZXZpb3VzCiAKLSNkZWZpbmUgX19JTklUREFUQQkuc2VjdGlvbgkiLmluaXQuZGF0YSIsImF3IgotI2RlZmluZSBfX0lOSVRST0RBVEEJLnNlY3Rpb24JIi5pbml0LnJvZGF0YSIsImEiCisjZGVmaW5lIF9fSU5JVERBVEEJLnNlY3Rpb24JIi5pbml0LmRhdGEiLCJhdyIsJXByb2diaXRzCisjZGVmaW5lIF9fSU5JVFJPREFUQQkuc2VjdGlvbgkiLmluaXQucm9kYXRhIiwiYSIsJXByb2diaXRzCiAjZGVmaW5lIF9fRklOSVREQVRBCS5wcmV2aW91cwogCiAjZGVmaW5lIF9fREVWSU5JVCAgICAgICAgLnNlY3Rpb24JIi5kZXZpbml0LnRleHQiLCAiYXgiCkBAIC0zMDUsOSArMzA1LDE3IEBACiAjaWZkZWYgQ09ORklHX01PRFVMRVMKICNkZWZpbmUgX19pbml0X29yX21vZHVsZQogI2RlZmluZSBfX2luaXRkYXRhX29yX21vZHVsZQorI2RlZmluZSBfX2luaXRjb25zdF9vcl9tb2R1bGUKKyNkZWZpbmUgX19JTklUX09SX01PRFVMRQkudGV4dAorI2RlZmluZSBfX0lOSVREQVRBX09SX01PRFVMRQkuZGF0YQorI2RlZmluZSBfX0lOSVRST0RBVEFfT1JfTU9EVUxFCS5zZWN0aW9uICIucm9kYXRhIiwiYSIsJXByb2diaXRzCiAjZWxzZQogI2RlZmluZSBfX2luaXRfb3JfbW9kdWxlIF9faW5pdAogI2RlZmluZSBfX2luaXRkYXRhX29yX21vZHVsZSBfX2luaXRkYXRhCisjZGVmaW5lIF9faW5pdGNvbnN0X29yX21vZHVsZSBfX2luaXRjb25zdAorI2RlZmluZSBfX0lOSVRfT1JfTU9EVUxFIF9fSU5JVAorI2RlZmluZSBfX0lOSVREQVRBX09SX01PRFVMRSBfX0lOSVREQVRBCisjZGVmaW5lIF9fSU5JVFJPREFUQV9PUl9NT0RVTEUgX19JTklUUk9EQVRBCiAjZW5kaWYgLypDT05GSUdfTU9EVUxFUyovCiAKIC8qIEZ1bmN0aW9ucyBtYXJrZWQgYXMgX19kZXZleGl0IG1heSBiZSBkaXNjYXJkZWQgYXQga2VybmVsIGxpbmsgdGltZSwgZGVwZW5kaW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAppbmRleCA3ZmMwMWIxLi45ZTdmMmU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKQEAgLTk0LDYgKzk0LDE2IEBACiAjIGRlZmluZSBDQVBfSU5JVF9CU0VUICBDQVBfSU5JVF9FRkZfU0VUCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVCisjZGVmaW5lIElOSVRfVEFTS19SQ1VfUFJFRU1QVCh0c2spCQkJCQlcCisJLnJjdV9yZWFkX2xvY2tfbmVzdGluZyA9IDAsCQkJCQlcCisJLnJjdV9yZWFkX3VubG9ja19zcGVjaWFsID0gMCwJCQkJCVwKKwkucmN1X2Jsb2NrZWRfbm9kZSA9IE5VTEwsCQkJCQlcCisJLnJjdV9ub2RlX2VudHJ5ID0gTElTVF9IRUFEX0lOSVQodHNrLnJjdV9ub2RlX2VudHJ5KSwKKyNlbHNlCisjZGVmaW5lIElOSVRfVEFTS19SQ1VfUFJFRU1QVCh0c2spCisjZW5kaWYKKwogZXh0ZXJuIHN0cnVjdCBjcmVkIGluaXRfY3JlZDsKIAogI2lmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCkBAIC0xNzMsNiArMTgzLDcgQEAKIAlJTklUX0xPQ0tERVAJCQkJCQkJXAogCUlOSVRfRlRSQUNFX0dSQVBICQkJCQkJXAogCUlOSVRfVFJBQ0VfUkVDVVJTSU9OCQkJCQkJXAorCUlOSVRfVEFTS19SQ1VfUFJFRU1QVCh0c2spCQkJCQlcCiB9CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC9lZXRpX3RzLmggYi9pbmNsdWRlL2xpbnV4L2lucHV0L2VldGlfdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODc1YjMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9lZXRpX3RzLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIExJTlVYX0lOUFVUX0VFVElfVFNfSAorI2RlZmluZSBMSU5VWF9JTlBVVF9FRVRJX1RTX0gKKworc3RydWN0IGVldGlfdHNfcGxhdGZvcm1fZGF0YSB7CisJdW5zaWduZWQgaW50IGlycV9hY3RpdmVfaGlnaDsKK307CisKKyNlbmRpZiAvKiBMSU5VWF9JTlBVVF9FRVRJX1RTX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmggYi9pbmNsdWRlL2xpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaAppbmRleCAxNWQ1OTAzLi5iM2NkNDJkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKQEAgLTYzLDQgKzYzLDM2IEBACiAJYm9vbAkJd2FrZXVwOwogfTsKIAorLyoqCisgKiBtYXRyaXhfa2V5cGFkX2J1aWxkX2tleW1hcCAtIGNvbnZlcnQgcGxhdGZvcm0ga2V5bWFwIGludG8gbWF0cml4IGtleW1hcAorICogQGtleW1hcF9kYXRhOiBrZXltYXAgc3VwcGxpZWQgYnkgdGhlIHBsYXRmb3JtIGNvZGUKKyAqIEByb3dfc2hpZnQ6IG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0IHJvdyB2YWx1ZSBieSB0byBhZHZhbmNlIHRvIHRoZSBuZXh0CisgKiBsaW5lIGluIHRoZSBrZXltYXAKKyAqIEBrZXltYXA6IGV4cGFuZGVkIHZlcnNpb24gb2Yga2V5bWFwIHRoYXQgaXMgc3VpdGFibGUgZm9yIHVzZSBieQorICogbWF0cml4IGtleWJvYWQgZHJpdmVyCisgKiBAa2V5Yml0OiBwb2ludGVyIHRvIGJpdG1hcCBvZiBrZXlzIHN1cHBvcnRlZCBieSBpbnB1dCBkZXZpY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHBsYXRmb3JtIGtleW1hcCAoZW5jb2RlZCB3aXRoIEtFWSgpIG1hY3JvKSBpbnRvCisgKiBhbiBhcnJheSBvZiBrZXljb2RlcyB0aGF0IGlzIHN1aXRhYmxlIGZvciB1c2luZyBpbiBhIHN0YW5kYXJkIG1hdHJpeAorICoga2V5Ym9hcmQgZHJpdmVyIHRoYXQgdXNlcyByb3cgYW5kIGNvbCBhcyBpbmRpY2VzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK21hdHJpeF9rZXlwYWRfYnVpbGRfa2V5bWFwKGNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgKmtleW1hcF9kYXRhLAorCQkJICAgdW5zaWduZWQgaW50IHJvd19zaGlmdCwKKwkJCSAgIHVuc2lnbmVkIHNob3J0ICprZXltYXAsIHVuc2lnbmVkIGxvbmcgKmtleWJpdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBrZXltYXBfZGF0YS0+a2V5bWFwX3NpemU7IGkrKykgeworCQl1bnNpZ25lZCBpbnQga2V5ID0ga2V5bWFwX2RhdGEtPmtleW1hcFtpXTsKKwkJdW5zaWduZWQgaW50IHJvdyA9IEtFWV9ST1coa2V5KTsKKwkJdW5zaWduZWQgaW50IGNvbCA9IEtFWV9DT0woa2V5KTsKKwkJdW5zaWduZWQgc2hvcnQgY29kZSA9IEtFWV9WQUwoa2V5KTsKKworCQlrZXltYXBbTUFUUklYX1NDQU5fQ09ERShyb3csIGNvbCwgcm93X3NoaWZ0KV0gPSBjb2RlOworCQlfX3NldF9iaXQoY29kZSwga2V5Yml0KTsKKwl9CisJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBrZXliaXQpOworfQorCiAjZW5kaWYgLyogX01BVFJJWF9LRVlQQURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggMzVlN2RmMS4uOGU5ZTE1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC01MCw2ICs1MCw5IEBACiAgKiBJUlFGX0lSUVBPTEwgLSBJbnRlcnJ1cHQgaXMgdXNlZCBmb3IgcG9sbGluZyAob25seSB0aGUgaW50ZXJydXB0IHRoYXQgaXMKICAqICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWQgZmlyc3QgaW4gYW4gc2hhcmVkIGludGVycnVwdCBpcyBjb25zaWRlcmVkIGZvcgogICogICAgICAgICAgICAgICAgcGVyZm9ybWFuY2UgcmVhc29ucykKKyAqIElSUUZfT05FU0hPVCAtIEludGVycnVwdCBpcyBub3QgcmVlbmFibGVkIGFmdGVyIHRoZSBoYXJkaXJxIGhhbmRsZXIgZmluaXNoZWQuCisgKiAgICAgICAgICAgICAgICBVc2VkIGJ5IHRocmVhZGVkIGludGVycnVwdHMgd2hpY2ggbmVlZCB0byBrZWVwIHRoZQorICogICAgICAgICAgICAgICAgaXJxIGxpbmUgZGlzYWJsZWQgdW50aWwgdGhlIHRocmVhZGVkIGhhbmRsZXIgaGFzIGJlZW4gcnVuLgogICovCiAjZGVmaW5lIElSUUZfRElTQUJMRUQJCTB4MDAwMDAwMjAKICNkZWZpbmUgSVJRRl9TQU1QTEVfUkFORE9NCTB4MDAwMDAwNDAKQEAgLTU5LDYgKzYyLDcgQEAKICNkZWZpbmUgSVJRRl9QRVJDUFUJCTB4MDAwMDA0MDAKICNkZWZpbmUgSVJRRl9OT0JBTEFOQ0lORwkweDAwMDAwODAwCiAjZGVmaW5lIElSUUZfSVJRUE9MTAkJMHgwMDAwMTAwMAorI2RlZmluZSBJUlFGX09ORVNIT1QJCTB4MDAwMDIwMDAKIAogLyoKICAqIEJpdHMgdXNlZCBieSB0aHJlYWRlZCBoYW5kbGVyczoKQEAgLTM0NCw2ICszNDgsNyBAQAogCU5FVF9UWF9TT0ZUSVJRLAogCU5FVF9SWF9TT0ZUSVJRLAogCUJMT0NLX1NPRlRJUlEsCisJQkxPQ0tfSU9QT0xMX1NPRlRJUlEsCiAJVEFTS0xFVF9TT0ZUSVJRLAogCVNDSEVEX1NPRlRJUlEsCiAJSFJUSU1FUl9TT0ZUSVJRLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pby1tYXBwaW5nLmggYi9pbmNsdWRlL2xpbnV4L2lvLW1hcHBpbmcuaAppbmRleCAwYWRiMGY5Li45N2ViOTI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvLW1hcHBpbmcuaApAQCAtNDksMjMgKzQ5LDMwIEBACiBpb19tYXBwaW5nX2NyZWF0ZV93YyhyZXNvdXJjZV9zaXplX3QgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCXN0cnVjdCBpb19tYXBwaW5nICppb21hcDsKLQotCWlmICghaXNfaW9fbWFwcGluZ19wb3NzaWJsZShiYXNlLCBzaXplKSkKLQkJcmV0dXJuIE5VTEw7CisJcGdwcm90X3QgcHJvdDsKIAogCWlvbWFwID0ga21hbGxvYyhzaXplb2YoKmlvbWFwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpb21hcCkKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gb3V0X2VycjsKKworCWlmIChpb21hcF9jcmVhdGVfd2MoYmFzZSwgc2l6ZSwgJnByb3QpKQorCQlnb3RvIG91dF9mcmVlOwogCiAJaW9tYXAtPmJhc2UgPSBiYXNlOwogCWlvbWFwLT5zaXplID0gc2l6ZTsKLQlpb21hcC0+cHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUoX19wZ3Byb3QoX19QQUdFX0tFUk5FTCkpOworCWlvbWFwLT5wcm90ID0gcHJvdDsKIAlyZXR1cm4gaW9tYXA7CisKK291dF9mcmVlOgorCWtmcmVlKGlvbWFwKTsKK291dF9lcnI6CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogaW9fbWFwcGluZ19mcmVlKHN0cnVjdCBpb19tYXBwaW5nICptYXBwaW5nKQogeworCWlvbWFwX2ZyZWUobWFwcGluZy0+YmFzZSwgbWFwcGluZy0+c2l6ZSk7CiAJa2ZyZWUobWFwcGluZyk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IGNiMmU3N2EuLmFlOTY1M2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtNjksNiArNjksOCBAQAogI2RlZmluZSBJUlFfTU9WRV9QQ05UWFQJCTB4MDEwMDAwMDAJLyogSVJRIG1pZ3JhdGlvbiBmcm9tIHByb2Nlc3MgY29udGV4dCAqLwogI2RlZmluZSBJUlFfQUZGSU5JVFlfU0VUCTB4MDIwMDAwMDAJLyogSVJRIGFmZmluaXR5IHdhcyBzZXQgZnJvbSB1c2Vyc3BhY2UqLwogI2RlZmluZSBJUlFfU1VTUEVOREVECQkweDA0MDAwMDAwCS8qIElSUSBoYXMgZ29uZSB0aHJvdWdoIHN1c3BlbmQgc2VxdWVuY2UgKi8KKyNkZWZpbmUgSVJRX09ORVNIT1QJCTB4MDgwMDAwMDAJLyogSVJRIGlzIG5vdCB1bm1hc2tlZCBhZnRlciBoYXJkaXJxICovCisjZGVmaW5lIElSUV9ORVNURURfVEhSRUFECTB4MTAwMDAwMDAJLyogSVJRIGlzIG5lc3RlZCBpbnRvIGFub3RoZXIsIG5vIG93biBoYW5kbGVyIHRocmVhZCAqLwogCiAjaWZkZWYgQ09ORklHX0lSUV9QRVJfQ1BVCiAjIGRlZmluZSBDSEVDS19JUlFfUEVSX0NQVSh2YXIpICgodmFyKSAmIElSUV9QRVJfQ1BVKQpAQCAtMTAwLDYgKzEwMiw5IEBACiAgKiBAc2V0X3R5cGU6CQlzZXQgdGhlIGZsb3cgdHlwZSAoSVJRX1RZUEVfTEVWRUwvZXRjLikgb2YgYW4gSVJRCiAgKiBAc2V0X3dha2U6CQllbmFibGUvZGlzYWJsZSBwb3dlci1tYW5hZ2VtZW50IHdha2Utb24gb2YgYW4gSVJRCiAgKgorICogQGJ1c19sb2NrOgkJZnVuY3Rpb24gdG8gbG9jayBhY2Nlc3MgdG8gc2xvdyBidXMgKGkyYykgY2hpcHMKKyAqIEBidXNfc3luY191bmxvY2s6CWZ1bmN0aW9uIHRvIHN5bmMgYW5kIHVubG9jayBzbG93IGJ1cyAoaTJjKSBjaGlwcworICoKICAqIEByZWxlYXNlOgkJcmVsZWFzZSBmdW5jdGlvbiBzb2xlbHkgdXNlZCBieSBVTUwKICAqIEB0eXBlbmFtZToJCW9ic29sZXRlZCBieSBuYW1lLCBrZXB0IGFzIG1pZ3JhdGlvbiBoZWxwZXIKICAqLwpAQCAtMTIzLDYgKzEyOCw5IEBACiAJaW50CQkoKnNldF90eXBlKSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKTsKIAlpbnQJCSgqc2V0X3dha2UpKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBvbik7CiAKKwl2b2lkCQkoKmJ1c19sb2NrKSh1bnNpZ25lZCBpbnQgaXJxKTsKKwl2b2lkCQkoKmJ1c19zeW5jX3VubG9jaykodW5zaWduZWQgaW50IGlycSk7CisKIAkvKiBDdXJyZW50bHkgdXNlZCBvbmx5IGJ5IFVNTCwgbWlnaHQgZGlzYXBwZWFyIG9uZSBkYXkuKi8KICNpZmRlZiBDT05GSUdfSVJRX1JFTEVBU0VfTUVUSE9ECiAJdm9pZAkJKCpyZWxlYXNlKSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwpAQCAtMjIwLDEzICsyMjgsNiBAQAogZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqaXJxX3RvX2Rlc2NfYWxsb2Nfbm9kZSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgbm9kZSk7CiAKIC8qCi0gKiBNaWdyYXRpb24gaGVscGVycyBmb3Igb2Jzb2xldGUgbmFtZXMsIHRoZXkgd2lsbCBnbyBhd2F5OgotICovCi0jZGVmaW5lIGh3X2ludGVycnVwdF90eXBlCWlycV9jaGlwCi0jZGVmaW5lIG5vX2lycV90eXBlCQlub19pcnFfY2hpcAotdHlwZWRlZiBzdHJ1Y3QgaXJxX2Rlc2MJCWlycV9kZXNjX3Q7Ci0KLS8qCiAgKiBQaWNrIHVwIHRoZSBhcmNoLWRlcGVuZGVudCBtZXRob2RzOgogICovCiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgpAQCAtMjg5LDYgKzI5MCw3IEBACiBleHRlcm4gdm9pZCBoYW5kbGVfc2ltcGxlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwogZXh0ZXJuIHZvaWQgaGFuZGxlX3BlcmNwdV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKTsKIGV4dGVybiB2b2lkIGhhbmRsZV9iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYyk7CitleHRlcm4gdm9pZCBoYW5kbGVfbmVzdGVkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIAogLyoKICAqIE1vbm9saXRoaWMgZG9fSVJRIGltcGxlbWVudGF0aW9uLgpAQCAtMzc5LDYgKzM4MSw4IEBACiAJX19zZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGUsIDEsIE5VTEwpOwogfQogCitleHRlcm4gdm9pZCBzZXRfaXJxX25lc3RlZF90aHJlYWQodW5zaWduZWQgaW50IGlycSwgaW50IG5lc3QpOworCiBleHRlcm4gdm9pZCBzZXRfaXJxX25vcHJvYmUodW5zaWduZWQgaW50IGlycSk7CiBleHRlcm4gdm9pZCBzZXRfaXJxX3Byb2JlKHVuc2lnbmVkIGludCBpcnEpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycW5yLmggYi9pbmNsdWRlL2xpbnV4L2lycW5yLmgKaW5kZXggZWM4N2IyMS4uN2JmODliYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFuci5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxbnIuaApAQCAtNDEsNiArNDEsMTIgQEAKIAkJCTsJCQkJCQlcCiAJCWVsc2UKIAorI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgaXJxX25vZGUoaXJxKQkoaXJxX3RvX2Rlc2MoaXJxKS0+bm9kZSkKKyNlbHNlCisjZGVmaW5lIGlycV9ub2RlKGlycSkJMAorI2VuZGlmCisKICNlbmRpZiAvKiBDT05GSUdfR0VORVJJQ19IQVJESVJRUyAqLwogCiAjZGVmaW5lIGZvcl9lYWNoX2lycV9ucihpcnEpICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbi9oZGxjLmggYi9pbmNsdWRlL2xpbnV4L2lzZG4vaGRsYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiM2VjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lzZG4vaGRsYy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBoZGxjLmggIC0tICBHZW5lcmFsIHB1cnBvc2UgSVNETiBIRExDIGRlY29kZXIuCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgYSBIRExDIGRlY29kZXIvZW5jb2RlciBpbiBzb2Z0d2FyZS4KKyAqIE5lY2Nlc3NhcnkgYmVjYXVzZSBzb21lIElTRE4gZGV2aWNlcyBkb24ndCBoYXZlIEhETEMKKyAqIGNvbnRyb2xsZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykKKyAqCTIwMDkJS2Fyc3RlbiBLZWlsCQk8a2VpbEBiMS1zeXN0ZW1zLmRlPgorICoJMjAwMglXb2xmZ2FuZyBNw7xlcwkJPHdvbGZnYW5nQGlrc3ctbXVlZXMuZGU+CisgKgkyMDAxCUZyb2RlIElzYWtzZW4JCTxmaXNha3NlbkBiZXdhbi5jb20+CisgKgkyMDAxCUthaSBHZXJtYXNjaGV3c2tpCTxrYWkuZ2VybWFzY2hld3NraUBnbXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0lTRE5IRExDX0hfXworI2RlZmluZSBfX0lTRE5IRExDX0hfXworCitzdHJ1Y3QgaXNkbmhkbGNfdmFycyB7CisJaW50IGJpdF9zaGlmdDsKKwlpbnQgaGRsY19iaXRzMTsKKwlpbnQgZGF0YV9iaXRzOworCWludCBmZmJpdF9zaGlmdDsJLyogZW5jb2Rpbmcgb25seSAqLworCWludCBzdGF0ZTsKKwlpbnQgZHN0cG9zOworCisJdTE2IGNyYzsKKworCXU4IGNiaW47CisJdTggc2hpZnRfcmVnOworCXU4IGZmdmFsdWU7CisKKwkvKiBzZXQgaWYgdHJhbnNmZXJyaW5nIGRhdGEgKi8KKwl1MzIgZGF0YV9yZWNlaXZlZDoxOworCS8qIHNldCBpZiBEIGNoYW5uZWwgKHNlbmQgaWRsZSBpbnN0ZWFkIG9mIGZsYWdzKSAqLworCXUzMiBkY2hhbm5lbDoxOworCS8qIHNldCBpZiA1NksgYWRhcHRhdGlvbiAqLworCXUzMiBkb19hZGFwdDU2OjE7CisJLyogc2V0IGlmIGluIGNsb3NpbmcgcGhhc2UgKG5lZWQgdG8gc2VuZCBDUkMgKyBmbGFnKSAqLworCXUzMiBkb19jbG9zaW5nOjE7CisJLyogc2V0IGlmIGRhdGEgaXMgYml0cmV2ZXJzZSAqLworCXUzMiBkb19iaXRyZXZlcnNlOjE7Cit9OworCisvKiBGZWF0dXJlIEZsYWdzICovCisjZGVmaW5lIEhETENfNTZLQklUCTB4MDEKKyNkZWZpbmUgSERMQ19EQ0hBTk5FTAkweDAyCisjZGVmaW5lIEhETENfQklUUkVWRVJTRQkweDA0CisKKy8qCisgIFRoZSByZXR1cm4gdmFsdWUgZnJvbSBpc2RuaGRsY19kZWNvZGUgaXMKKyAgdGhlIGZyYW1lIGxlbmd0aCwgMCBpZiBubyBjb21wbGV0ZSBmcmFtZSB3YXMgZGVjb2RlZCwKKyAgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIKKyovCisjZGVmaW5lIEhETENfRlJBTUlOR19FUlJPUiAgICAgMQorI2RlZmluZSBIRExDX0NSQ19FUlJPUiAgICAgICAgIDIKKyNkZWZpbmUgSERMQ19MRU5HVEhfRVJST1IgICAgICAzCisKK2V4dGVybiB2b2lkCWlzZG5oZGxjX3Jjdl9pbml0KHN0cnVjdCBpc2RuaGRsY192YXJzICpoZGxjLCB1MzIgZmVhdHVyZXMpOworCitleHRlcm4gaW50CWlzZG5oZGxjX2RlY29kZShzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYywgY29uc3QgdTggKnNyYywKKwkJCWludCBzbGVuLCBpbnQgKmNvdW50LCB1OCAqZHN0LCBpbnQgZHNpemUpOworCitleHRlcm4gdm9pZAlpc2RuaGRsY19vdXRfaW5pdChzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYywgdTMyIGZlYXR1cmVzKTsKKworZXh0ZXJuIGludAlpc2RuaGRsY19lbmNvZGUoc3RydWN0IGlzZG5oZGxjX3ZhcnMgKmhkbGMsIGNvbnN0IHU4ICpzcmMsCisJCQl1MTYgc2xlbiwgaW50ICpjb3VudCwgdTggKmRzdCwgaW50IGRzaXplKTsKKworI2VuZGlmIC8qIF9fSVNETkhETENfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCBkNjMyMGEzLi4yYjViMWUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTEyNSw3ICsxMjUsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAKLSAgdm9pZCBfX21pZ2h0X3NsZWVwKGNoYXIgKmZpbGUsIGludCBsaW5lKTsKKyAgdm9pZCBfX21pZ2h0X3NsZWVwKGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpOwogLyoqCiAgKiBtaWdodF9zbGVlcCAtIGFubm90YXRpb24gZm9yIGZ1bmN0aW9ucyB0aGF0IGNhbiBzbGVlcAogICoKQEAgLTEzNyw4ICsxMzcsOSBAQAogICogc3VwcG9zZWQgdG8uCiAgKi8KICMgZGVmaW5lIG1pZ2h0X3NsZWVwKCkgXAotCWRvIHsgX19taWdodF9zbGVlcChfX0ZJTEVfXywgX19MSU5FX18pOyBtaWdodF9yZXNjaGVkKCk7IH0gd2hpbGUgKDApCisJZG8geyBfX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgMCk7IG1pZ2h0X3Jlc2NoZWQoKTsgfSB3aGlsZSAoMCkKICNlbHNlCisgIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21pZ2h0X3NsZWVwKGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpIHsgfQogIyBkZWZpbmUgbWlnaHRfc2xlZXAoKSBkbyB7IG1pZ2h0X3Jlc2NoZWQoKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleS5oIGIvaW5jbHVkZS9saW51eC9rZXkuaAppbmRleCBlNTQ0ZjQ2Li5jZDUwZGZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tleS5oCisrKyBiL2luY2x1ZGUvbGludXgva2V5LmgKQEAgLTEyOSw3ICsxMjksMTAgQEAKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlCXNlbTsJCS8qIGNoYW5nZSB2cyBjaGFuZ2Ugc2VtICovCiAJc3RydWN0IGtleV91c2VyCQkqdXNlcjsJCS8qIG93bmVyIG9mIHRoaXMga2V5ICovCiAJdm9pZAkJCSpzZWN1cml0eTsJLyogc2VjdXJpdHkgZGF0YSBmb3IgdGhpcyBrZXkgKi8KLQl0aW1lX3QJCQlleHBpcnk7CQkvKiB0aW1lIGF0IHdoaWNoIGtleSBleHBpcmVzIChvciAwKSAqLworCXVuaW9uIHsKKwkJdGltZV90CQlleHBpcnk7CQkvKiB0aW1lIGF0IHdoaWNoIGtleSBleHBpcmVzIChvciAwKSAqLworCQl0aW1lX3QJCXJldm9rZWRfYXQ7CS8qIHRpbWUgYXQgd2hpY2gga2V5IHdhcyByZXZva2VkICovCisJfTsKIAl1aWRfdAkJCXVpZDsKIAlnaWRfdAkJCWdpZDsKIAlrZXlfcGVybV90CQlwZXJtOwkJLyogYWNjZXNzIHBlcm1pc3Npb25zICovCkBAIC0yNzUsNiArMjc4LDggQEAKIGV4dGVybiBjdGxfdGFibGUga2V5X3N5c2N0bHNbXTsKICNlbmRpZgogCitleHRlcm4gdm9pZCBrZXlfcmVwbGFjZV9zZXNzaW9uX2tleXJpbmcodm9pZCk7CisKIC8qCiAgKiB0aGUgdXNlcnNwYWNlIGludGVyZmFjZQogICovCkBAIC0yOTcsNiArMzAyLDcgQEAKICNkZWZpbmUga2V5X2ZzdWlkX2NoYW5nZWQodCkJCWRvIHsgfSB3aGlsZSgwKQogI2RlZmluZSBrZXlfZnNnaWRfY2hhbmdlZCh0KQkJZG8geyB9IHdoaWxlKDApCiAjZGVmaW5lIGtleV9pbml0KCkJCQlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUga2V5X3JlcGxhY2Vfc2Vzc2lvbl9rZXlyaW5nKCkJZG8geyB9IHdoaWxlKDApCiAKICNlbmRpZiAvKiBDT05GSUdfS0VZUyAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2V5Y3RsLmggYi9pbmNsdWRlL2xpbnV4L2tleWN0bC5oCmluZGV4IGMwNjg4ZWIuLmJkMzgzZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2V5Y3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXljdGwuaApAQCAtNTIsNSArNTIsNiBAQAogI2RlZmluZSBLRVlDVExfU0VUX1RJTUVPVVQJCTE1CS8qIHNldCBrZXkgdGltZW91dCAqLwogI2RlZmluZSBLRVlDVExfQVNTVU1FX0FVVEhPUklUWQkJMTYJLyogYXNzdW1lIHJlcXVlc3Rfa2V5KCkgYXV0aG9yaXNhdGlvbiAqLwogI2RlZmluZSBLRVlDVExfR0VUX1NFQ1VSSVRZCQkxNwkvKiBnZXQga2V5IHNlY3VyaXR5IGxhYmVsICovCisjZGVmaW5lIEtFWUNUTF9TRVNTSU9OX1RPX1BBUkVOVAkxOAkvKiBhcHBseSBzZXNzaW9uIGtleXJpbmcgdG8gcGFyZW50IHByb2Nlc3MgKi8KIAogI2VuZGlmIC8qICBfTElOVVhfS0VZQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmggYi9pbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oCmluZGV4IDQ3YjM5YjcuLmRjMmZkNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaApAQCAtMzQsNiArMzQsOCBAQAogaW50IGttZW1jaGVja19zaG93X2FkZHIodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIGludCBrbWVtY2hlY2tfaGlkZV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiAKK2Jvb2wga21lbWNoZWNrX2lzX29ial9pbml0aWFsaXplZCh1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBzaXplKTsKKwogI2Vsc2UKICNkZWZpbmUga21lbWNoZWNrX2VuYWJsZWQgMAogCkBAIC05OSw2ICsxMDEsMTEgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGttZW1jaGVja19pc19vYmpfaW5pdGlhbGl6ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKwogI2VuZGlmIC8qIENPTkZJR19LTUVNQ0hFQ0sgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWxlYWsuaCBiL2luY2x1ZGUvbGludXgva21lbWxlYWsuaAppbmRleCA2YTYzODA3Li4zYzc0OTdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ttZW1sZWFrLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbWVtbGVhay5oCkBAIC0yMywxOCArMjMsMTggQEAKIAogI2lmZGVmIENPTkZJR19ERUJVR19LTUVNTEVBSwogCi1leHRlcm4gdm9pZCBrbWVtbGVha19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQga21lbWxlYWtfaW5pdCh2b2lkKSBfX3JlZjsKIGV4dGVybiB2b2lkIGttZW1sZWFrX2FsbG9jKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGludCBtaW5fY291bnQsCi0JCQkgICBnZnBfdCBnZnApOwotZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpOwotZXh0ZXJuIHZvaWQga21lbWxlYWtfZnJlZV9wYXJ0KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworCQkJICAgZ2ZwX3QgZ2ZwKSBfX3JlZjsKK2V4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKSBfX3JlZjsKK2V4dGVybiB2b2lkIGttZW1sZWFrX2ZyZWVfcGFydChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplKSBfX3JlZjsKIGV4dGVybiB2b2lkIGttZW1sZWFrX3BhZGRpbmcoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCSAgICAgc2l6ZV90IHNpemUpOwotZXh0ZXJuIHZvaWQga21lbWxlYWtfbm90X2xlYWsoY29uc3Qgdm9pZCAqcHRyKTsKLWV4dGVybiB2b2lkIGttZW1sZWFrX2lnbm9yZShjb25zdCB2b2lkICpwdHIpOworCQkJICAgICBzaXplX3Qgc2l6ZSkgX19yZWY7CitleHRlcm4gdm9pZCBrbWVtbGVha19ub3RfbGVhayhjb25zdCB2b2lkICpwdHIpIF9fcmVmOworZXh0ZXJuIHZvaWQga21lbWxlYWtfaWdub3JlKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7CiBleHRlcm4gdm9pZCBrbWVtbGVha19zY2FuX2FyZWEoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCSAgICAgICBzaXplX3QgbGVuZ3RoLCBnZnBfdCBnZnApOwotZXh0ZXJuIHZvaWQga21lbWxlYWtfbm9fc2Nhbihjb25zdCB2b2lkICpwdHIpOworCQkJICAgICAgIHNpemVfdCBsZW5ndGgsIGdmcF90IGdmcCkgX19yZWY7CitleHRlcm4gdm9pZCBrbWVtbGVha19ub19zY2FuKGNvbnN0IHZvaWQgKnB0cikgX19yZWY7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtbGVha19hbGxvY19yZWN1cnNpdmUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKIAkJCQkJICAgIGludCBtaW5fY291bnQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS9saW51eC9rdm0uaAppbmRleCAzZGI1ZDhkLi5mOGY4OTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bS5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtLmgKQEAgLTE0LDcgKzE0LDcgQEAKIAogI2RlZmluZSBLVk1fQVBJX1ZFUlNJT04gMTIKIAotLyogZm9yIEtWTV9UUkFDRV9FTkFCTEUgKi8KKy8qIGZvciBLVk1fVFJBQ0VfRU5BQkxFLCBkZXByZWNhdGVkICovCiBzdHJ1Y3Qga3ZtX3VzZXJfdHJhY2Vfc2V0dXAgewogCV9fdTMyIGJ1Zl9zaXplOyAvKiBzdWJfYnVmZmVyIHNpemUgb2YgZWFjaCBwZXItY3B1ICovCiAJX191MzIgYnVmX25yOyAvKiB0aGUgbnVtYmVyIG9mIHN1Yl9idWZmZXJzIG9mIGVhY2ggcGVyLWNwdSAqLwpAQCAtNzAsNiArNzAsMTQgQEAKIAl9IGNoaXA7CiB9OwogCisvKiBmb3IgS1ZNX0NSRUFURV9QSVQyICovCitzdHJ1Y3Qga3ZtX3BpdF9jb25maWcgeworCV9fdTMyIGZsYWdzOworCV9fdTMyIHBhZFsxNV07Cit9OworCisjZGVmaW5lIEtWTV9QSVRfU1BFQUtFUl9EVU1NWSAgICAgMQorCiAjZGVmaW5lIEtWTV9FWElUX1VOS05PV04gICAgICAgICAgMAogI2RlZmluZSBLVk1fRVhJVF9FWENFUFRJT04gICAgICAgIDEKICNkZWZpbmUgS1ZNX0VYSVRfSU8gICAgICAgICAgICAgICAyCkBAIC04Nyw2ICs5NSwxMCBAQAogI2RlZmluZSBLVk1fRVhJVF9TMzkwX1JFU0VUICAgICAgIDE0CiAjZGVmaW5lIEtWTV9FWElUX0RDUiAgICAgICAgICAgICAgMTUKICNkZWZpbmUgS1ZNX0VYSVRfTk1JICAgICAgICAgICAgICAxNgorI2RlZmluZSBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUiAgIDE3CisKKy8qIEZvciBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUiAqLworI2RlZmluZSBLVk1fSU5URVJOQUxfRVJST1JfRU1VTEFUSU9OIDEKIAogLyogZm9yIEtWTV9SVU4sIHJldHVybmVkIGJ5IG1tYXAodmNwdV9mZCwgb2Zmc2V0PTApICovCiBzdHJ1Y3Qga3ZtX3J1biB7CkBAIC0xNzMsNiArMTg1LDkgQEAKIAkJCV9fdTMyIGRhdGE7CiAJCQlfX3U4ICBpc193cml0ZTsKIAkJfSBkY3I7CisJCXN0cnVjdCB7CisJCQlfX3UzMiBzdWJlcnJvcjsKKwkJfSBpbnRlcm5hbDsKIAkJLyogRml4IHRoZSBzaXplIG9mIHRoZSB1bmlvbi4gKi8KIAkJY2hhciBwYWRkaW5nWzI1Nl07CiAJfTsKQEAgLTI5Miw2ICszMDcsMjggQEAKIAlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggYXJjaDsKIH07CiAKK2VudW0geworCWt2bV9pb2V2ZW50ZmRfZmxhZ19ucl9kYXRhbWF0Y2gsCisJa3ZtX2lvZXZlbnRmZF9mbGFnX25yX3BpbywKKwlrdm1faW9ldmVudGZkX2ZsYWdfbnJfZGVhc3NpZ24sCisJa3ZtX2lvZXZlbnRmZF9mbGFnX25yX21heCwKK307CisKKyNkZWZpbmUgS1ZNX0lPRVZFTlRGRF9GTEFHX0RBVEFNQVRDSCAoMSA8PCBrdm1faW9ldmVudGZkX2ZsYWdfbnJfZGF0YW1hdGNoKQorI2RlZmluZSBLVk1fSU9FVkVOVEZEX0ZMQUdfUElPICAgICAgICgxIDw8IGt2bV9pb2V2ZW50ZmRfZmxhZ19ucl9waW8pCisjZGVmaW5lIEtWTV9JT0VWRU5URkRfRkxBR19ERUFTU0lHTiAgKDEgPDwga3ZtX2lvZXZlbnRmZF9mbGFnX25yX2RlYXNzaWduKQorCisjZGVmaW5lIEtWTV9JT0VWRU5URkRfVkFMSURfRkxBR19NQVNLICAoKDEgPDwga3ZtX2lvZXZlbnRmZF9mbGFnX25yX21heCkgLSAxKQorCitzdHJ1Y3Qga3ZtX2lvZXZlbnRmZCB7CisJX191NjQgZGF0YW1hdGNoOworCV9fdTY0IGFkZHI7ICAgICAgICAvKiBsZWdhbCBwaW8vbW1pbyBhZGRyZXNzICovCisJX191MzIgbGVuOyAgICAgICAgIC8qIDEsIDIsIDQsIG9yIDggYnl0ZXMgICAgKi8KKwlfX3MzMiBmZDsKKwlfX3UzMiBmbGFnczsKKwlfX3U4ICBwYWRbMzZdOworfTsKKwogI2RlZmluZSBLVk1fVFJDX1NISUZUICAgICAgICAgICAxNgogLyoKICAqIGt2bSB0cmFjZSBjYXRlZ29yaWVzCkBAIC0zMTAsMzUgKzM0Nyw2IEBACiAjZGVmaW5lIEtWTV9UUkNfQ1lDTEVfU0laRSAgICAgIDgKICNkZWZpbmUgS1ZNX1RSQ19FWFRSQV9NQVggICAgICAgNwogCi0vKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgc2luZ2xlIHRyYWNlIGJ1ZmZlciByZWNvcmQuICovCi1zdHJ1Y3Qga3ZtX3RyYWNlX3JlYyB7Ci0JLyogdmFyaWFibGUgcmVjX3ZhbAotCSAqIGlzIHNwbGl0IGludG86Ci0JICogYml0cyAwIC0gMjcgIC0+IGV2ZW50IGlkCi0JICogYml0cyAyOCAtMzAgIC0+IG51bWJlciBvZiBleHRyYSBkYXRhIGFyZ3Mgb2Ygc2l6ZSB1MzIKLQkgKiBiaXRzIDMxICAgICAgLT4gYmluYXJ5IGluZGljYXRvciBmb3IgaWYgdHNjIGlzIGluIHJlY29yZAotCSAqLwotCV9fdTMyIHJlY192YWw7Ci0JX191MzIgcGlkOwotCV9fdTMyIHZjcHVfaWQ7Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJX191NjQgdGltZXN0YW1wOwotCQkJX191MzIgZXh0cmFfdTMyW0tWTV9UUkNfRVhUUkFfTUFYXTsKLQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB0aW1lc3RhbXA7Ci0JCXN0cnVjdCB7Ci0JCQlfX3UzMiBleHRyYV91MzJbS1ZNX1RSQ19FWFRSQV9NQVhdOwotCQl9IG5vdGltZXN0YW1wOwotCX0gdTsKLX07Ci0KLSNkZWZpbmUgVFJBQ0VfUkVDX0VWRU5UX0lEKHZhbCkgXAotCQkoMHgwZmZmZmZmZiAmICh2YWwpKQotI2RlZmluZSBUUkFDRV9SRUNfTlVNX0RBVEFfQVJHUyh2YWwpIFwKLQkJKDB4NzAwMDAwMDAgJiAoKHZhbCkgPDwgMjgpKQotI2RlZmluZSBUUkFDRV9SRUNfVENTKHZhbCkgXAotCQkoMHg4MDAwMDAwMCAmICgodmFsKSA8PCAzMSkpCi0KICNkZWZpbmUgS1ZNSU8gMHhBRQogCiAvKgpAQCAtNDE1LDYgKzQyMywxOSBAQAogI2RlZmluZSBLVk1fQ0FQX0FTU0lHTl9ERVZfSVJRIDI5CiAvKiBBbm90aGVyIGJ1ZyBpbiBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiBmaXhlZDogKi8KICNkZWZpbmUgS1ZNX0NBUF9KT0lOX01FTU9SWV9SRUdJT05TX1dPUktTIDMwCisjaWZkZWYgX19LVk1fSEFWRV9NQ0UKKyNkZWZpbmUgS1ZNX0NBUF9NQ0UgMzEKKyNlbmRpZgorI2RlZmluZSBLVk1fQ0FQX0lSUUZEIDMyCisjaWZkZWYgX19LVk1fSEFWRV9QSVQKKyNkZWZpbmUgS1ZNX0NBUF9QSVQyIDMzCisjZW5kaWYKKyNkZWZpbmUgS1ZNX0NBUF9TRVRfQk9PVF9DUFVfSUQgMzQKKyNpZmRlZiBfX0tWTV9IQVZFX1BJVF9TVEFURTIKKyNkZWZpbmUgS1ZNX0NBUF9QSVRfU1RBVEUyIDM1CisjZW5kaWYKKyNkZWZpbmUgS1ZNX0NBUF9JT0VWRU5URkQgMzYKKyNkZWZpbmUgS1ZNX0NBUF9TRVRfSURFTlRJVFlfTUFQX0FERFIgMzcKIAogI2lmZGVmIEtWTV9DQVBfSVJRX1JPVVRJTkcKIApAQCAtNDU0LDE1ICs0NzUsMzIgQEAKIAogI2VuZGlmCiAKKyNpZmRlZiBLVk1fQ0FQX01DRQorLyogeDg2IE1DRSAqLworc3RydWN0IGt2bV94ODZfbWNlIHsKKwlfX3U2NCBzdGF0dXM7CisJX191NjQgYWRkcjsKKwlfX3U2NCBtaXNjOworCV9fdTY0IG1jZ19zdGF0dXM7CisJX191OCBiYW5rOworCV9fdTggcGFkMVs3XTsKKwlfX3U2NCBwYWQyWzNdOworfTsKKyNlbmRpZgorCisjZGVmaW5lIEtWTV9JUlFGRF9GTEFHX0RFQVNTSUdOICgxIDw8IDApCisKK3N0cnVjdCBrdm1faXJxZmQgeworCV9fdTMyIGZkOworCV9fdTMyIGdzaTsKKwlfX3UzMiBmbGFnczsKKwlfX3U4ICBwYWRbMjBdOworfTsKKwogLyoKICAqIGlvY3RscyBmb3IgVk0gZmRzCiAgKi8KICNkZWZpbmUgS1ZNX1NFVF9NRU1PUllfUkVHSU9OICAgICBfSU9XKEtWTUlPLCAweDQwLCBzdHJ1Y3Qga3ZtX21lbW9yeV9yZWdpb24pCi0jZGVmaW5lIEtWTV9TRVRfTlJfTU1VX1BBR0VTICAgICAgX0lPKEtWTUlPLCAweDQ0KQotI2RlZmluZSBLVk1fR0VUX05SX01NVV9QQUdFUyAgICAgIF9JTyhLVk1JTywgMHg0NSkKLSNkZWZpbmUgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04gX0lPVyhLVk1JTywgMHg0NixcCi0JCQkJCXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24pCi0jZGVmaW5lIEtWTV9TRVRfVFNTX0FERFIgICAgICAgICAgX0lPKEtWTUlPLCAweDQ3KQogLyoKICAqIEtWTV9DUkVBVEVfVkNQVSByZWNlaXZlcyBhcyBhIHBhcmFtZXRlciB0aGUgdmNwdSBzbG90LCBhbmQgcmV0dXJucwogICogYSB2Y3B1IGZkLgpAQCAtNDcwLDYgKzUwOCwxMiBAQAogI2RlZmluZSBLVk1fQ1JFQVRFX1ZDUFUgICAgICAgICAgIF9JTyhLVk1JTywgIDB4NDEpCiAjZGVmaW5lIEtWTV9HRVRfRElSVFlfTE9HICAgICAgICAgX0lPVyhLVk1JTywgMHg0Miwgc3RydWN0IGt2bV9kaXJ0eV9sb2cpCiAjZGVmaW5lIEtWTV9TRVRfTUVNT1JZX0FMSUFTICAgICAgX0lPVyhLVk1JTywgMHg0Mywgc3RydWN0IGt2bV9tZW1vcnlfYWxpYXMpCisjZGVmaW5lIEtWTV9TRVRfTlJfTU1VX1BBR0VTICAgICAgX0lPKEtWTUlPLCAweDQ0KQorI2RlZmluZSBLVk1fR0VUX05SX01NVV9QQUdFUyAgICAgIF9JTyhLVk1JTywgMHg0NSkKKyNkZWZpbmUgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04gX0lPVyhLVk1JTywgMHg0NixcCisJCQkJCXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24pCisjZGVmaW5lIEtWTV9TRVRfVFNTX0FERFIgICAgICAgICAgX0lPKEtWTUlPLCAweDQ3KQorI2RlZmluZSBLVk1fU0VUX0lERU5USVRZX01BUF9BRERSIF9JT1coS1ZNSU8sIDB4NDgsIF9fdTY0KQogLyogRGV2aWNlIG1vZGVsIElPQyAqLwogI2RlZmluZSBLVk1fQ1JFQVRFX0lSUUNISVAJICBfSU8oS1ZNSU8sICAweDYwKQogI2RlZmluZSBLVk1fSVJRX0xJTkUJCSAgX0lPVyhLVk1JTywgMHg2MSwgc3RydWN0IGt2bV9pcnFfbGV2ZWwpCkBAIC00OTgsNiArNTQyLDEwIEBACiAjZGVmaW5lIEtWTV9BU1NJR05fU0VUX01TSVhfRU5UUlkgXAogCQkJX0lPVyhLVk1JTywgMHg3NCwgc3RydWN0IGt2bV9hc3NpZ25lZF9tc2l4X2VudHJ5KQogI2RlZmluZSBLVk1fREVBU1NJR05fREVWX0lSUSAgICAgICBfSU9XKEtWTUlPLCAweDc1LCBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycSkKKyNkZWZpbmUgS1ZNX0lSUUZEICAgICAgICAgICAgICAgICAgX0lPVyhLVk1JTywgMHg3Niwgc3RydWN0IGt2bV9pcnFmZCkKKyNkZWZpbmUgS1ZNX0NSRUFURV9QSVQyCQkgICBfSU9XKEtWTUlPLCAweDc3LCBzdHJ1Y3Qga3ZtX3BpdF9jb25maWcpCisjZGVmaW5lIEtWTV9TRVRfQk9PVF9DUFVfSUQgICAgICAgIF9JTyhLVk1JTywgMHg3OCkKKyNkZWZpbmUgS1ZNX0lPRVZFTlRGRCAgICAgICAgICAgICBfSU9XKEtWTUlPLCAweDc5LCBzdHJ1Y3Qga3ZtX2lvZXZlbnRmZCkKIAogLyoKICAqIGlvY3RscyBmb3IgdmNwdSBmZHMKQEAgLTU0MSw2ICs1ODksMTAgQEAKICNkZWZpbmUgS1ZNX05NSSAgICAgICAgICAgICAgICAgICBfSU8oS1ZNSU8sICAweDlhKQogLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUcgKi8KICNkZWZpbmUgS1ZNX1NFVF9HVUVTVF9ERUJVRyAgICAgICBfSU9XKEtWTUlPLCAgMHg5Yiwgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZykKKy8qIE1DRSBmb3IgeDg2ICovCisjZGVmaW5lIEtWTV9YODZfU0VUVVBfTUNFICAgICAgICAgX0lPVyhLVk1JTywgIDB4OWMsIF9fdTY0KQorI2RlZmluZSBLVk1fWDg2X0dFVF9NQ0VfQ0FQX1NVUFBPUlRFRCBfSU9SKEtWTUlPLCAgMHg5ZCwgX191NjQpCisjZGVmaW5lIEtWTV9YODZfU0VUX01DRSAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4OWUsIHN0cnVjdCBrdm1feDg2X21jZSkKIAogLyoKICAqIERlcHJlY2F0ZWQgaW50ZXJmYWNlcwpAQCAtNTYzLDYgKzYxNSw5IEBACiAjZGVmaW5lIEtWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLICAgX0lPUihLVk1JTywgIDB4OWEsIHZvaWQgKikKICNkZWZpbmUgS1ZNX0lBNjRfVkNQVV9TRVRfU1RBQ0sgICBfSU9XKEtWTUlPLCAgMHg5Yiwgdm9pZCAqKQogCisjZGVmaW5lIEtWTV9HRVRfUElUMiAgIF9JT1IoS1ZNSU8sICAgMHg5Ziwgc3RydWN0IGt2bV9waXRfc3RhdGUyKQorI2RlZmluZSBLVk1fU0VUX1BJVDIgICBfSU9XKEtWTUlPLCAgIDB4YTAsIHN0cnVjdCBrdm1fcGl0X3N0YXRlMikKKwogI2RlZmluZSBLVk1fVFJDX0lOSl9WSVJRICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDIpCiAjZGVmaW5lIEtWTV9UUkNfUkVERUxJVkVSX0VWVCAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwMykKICNkZWZpbmUgS1ZNX1RSQ19QRU5EX0lOVFIgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA0KQpAQCAtNjMzLDcgKzY4OCw3IEBACiAJX191MTYgcGFkZGluZzsKIH07CiAKLSNkZWZpbmUgS1ZNX01BWF9NU0lYX1BFUl9ERVYJCTUxMgorI2RlZmluZSBLVk1fTUFYX01TSVhfUEVSX0RFVgkJMjU2CiBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX21zaXhfZW50cnkgewogCV9fdTMyIGFzc2lnbmVkX2Rldl9pZDsKIAlfX3UzMiBnc2k7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggMzA2MGJkYzMuLjRhZjU2MDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTQyLDYgKzQyLDcgQEAKIAogI2RlZmluZSBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQJMAogCitzdHJ1Y3Qga3ZtOwogc3RydWN0IGt2bV92Y3B1OwogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICprdm1fdmNwdV9jYWNoZTsKIApAQCAtNTksMTAgKzYwLDE4IEBACiAKIHZvaWQga3ZtX2lvX2J1c19pbml0KHN0cnVjdCBrdm1faW9fYnVzICpidXMpOwogdm9pZCBrdm1faW9fYnVzX2Rlc3Ryb3koc3RydWN0IGt2bV9pb19idXMgKmJ1cyk7Ci1zdHJ1Y3Qga3ZtX2lvX2RldmljZSAqa3ZtX2lvX2J1c19maW5kX2RldihzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzLAotCQkJCQkgIGdwYV90IGFkZHIsIGludCBsZW4sIGludCBpc193cml0ZSk7Ci12b2lkIGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KHN0cnVjdCBrdm1faW9fYnVzICpidXMsCi0JCQkgICAgIHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpOworaW50IGt2bV9pb19idXNfd3JpdGUoc3RydWN0IGt2bV9pb19idXMgKmJ1cywgZ3BhX3QgYWRkciwgaW50IGxlbiwKKwkJICAgICBjb25zdCB2b2lkICp2YWwpOworaW50IGt2bV9pb19idXNfcmVhZChzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzLCBncGFfdCBhZGRyLCBpbnQgbGVuLAorCQkgICAgdm9pZCAqdmFsKTsKK2ludCBfX2t2bV9pb19idXNfcmVnaXN0ZXJfZGV2KHN0cnVjdCBrdm1faW9fYnVzICpidXMsCisJCQkgICAgICAgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldik7CitpbnQga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzLAorCQkJICAgIHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpOwordm9pZCBfX2t2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoc3RydWN0IGt2bV9pb19idXMgKmJ1cywKKwkJCQkgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldik7Cit2b2lkIGt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzLAorCQkJICAgICAgIHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpOwogCiBzdHJ1Y3Qga3ZtX3ZjcHUgewogCXN0cnVjdCBrdm0gKmt2bTsKQEAgLTEwMyw3ICsxMTIsNyBAQAogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGxvbmcgcm1hcF9wZGU7CiAJCWludCB3cml0ZV9jb3VudDsKLQl9ICpscGFnZV9pbmZvOworCX0gKmxwYWdlX2luZm9bS1ZNX05SX1BBR0VfU0laRVMgLSAxXTsKIAl1bnNpZ25lZCBsb25nIHVzZXJzcGFjZV9hZGRyOwogCWludCB1c2VyX2FsbG9jOwogfTsKQEAgLTEyNCw3ICsxMzMsNiBAQAogfTsKIAogc3RydWN0IGt2bSB7Ci0Jc3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3RzIHRoZSB2Y3B1cyBhcnJheSBhbmQgQVBJQyBhY2Nlc3NlcyAqLwogCXNwaW5sb2NrX3QgbW11X2xvY2s7CiAJc3BpbmxvY2tfdCByZXF1ZXN0c19sb2NrOwogCXN0cnVjdCByd19zZW1hcGhvcmUgc2xvdHNfbG9jazsKQEAgLTEzMiwxMCArMTQwLDIzIEBACiAJaW50IG5tZW1zbG90czsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90IG1lbXNsb3RzW0tWTV9NRU1PUllfU0xPVFMgKwogCQkJCQlLVk1fUFJJVkFURV9NRU1fU0xPVFNdOworI2lmZGVmIENPTkZJR19LVk1fQVBJQ19BUkNISVRFQ1RVUkUKKwl1MzIgYnNwX3ZjcHVfaWQ7CisJc3RydWN0IGt2bV92Y3B1ICpic3BfdmNwdTsKKyNlbmRpZgogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdXNbS1ZNX01BWF9WQ1BVU107CisJYXRvbWljX3Qgb25saW5lX3ZjcHVzOwogCXN0cnVjdCBsaXN0X2hlYWQgdm1fbGlzdDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlzdHJ1Y3Qga3ZtX2lvX2J1cyBtbWlvX2J1czsKIAlzdHJ1Y3Qga3ZtX2lvX2J1cyBwaW9fYnVzOworI2lmZGVmIENPTkZJR19IQVZFX0tWTV9FVkVOVEZECisJc3RydWN0IHsKKwkJc3BpbmxvY2tfdCAgICAgICAgbG9jazsKKwkJc3RydWN0IGxpc3RfaGVhZCAgaXRlbXM7CisJfSBpcnFmZHM7CisJc3RydWN0IGxpc3RfaGVhZCBpb2V2ZW50ZmRzOworI2VuZGlmCiAJc3RydWN0IGt2bV92bV9zdGF0IHN0YXQ7CiAJc3RydWN0IGt2bV9hcmNoIGFyY2g7CiAJYXRvbWljX3QgdXNlcnNfY291bnQ7CkBAIC0xNDQsNiArMTY1LDcgQEAKIAlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3JpbmcgKmNvYWxlc2NlZF9tbWlvX3Jpbmc7CiAjZW5kaWYKIAorCXN0cnVjdCBtdXRleCBpcnFfbG9jazsKICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUAogCXN0cnVjdCBsaXN0X2hlYWQgaXJxX3JvdXRpbmc7IC8qIG9mIGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKi8KIAlzdHJ1Y3QgaGxpc3RfaGVhZCBtYXNrX25vdGlmaWVyX2xpc3Q7CkBAIC0xNjcsNiArMTg5LDE3IEBACiAjZGVmaW5lIGt2bV9wcmludGYoa3ZtLCBmbXQgLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmbXQpCiAjZGVmaW5lIHZjcHVfcHJpbnRmKHZjcHUsIGZtdC4uLikga3ZtX3ByaW50Zih2Y3B1LT5rdm0sIGZtdCkKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9nZXRfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIGludCBpKQoreworCXNtcF9ybWIoKTsKKwlyZXR1cm4ga3ZtLT52Y3B1c1tpXTsKK30KKworI2RlZmluZSBrdm1fZm9yX2VhY2hfdmNwdShpZHgsIHZjcHVwLCBrdm0pIFwKKwlmb3IgKGlkeCA9IDAsIHZjcHVwID0ga3ZtX2dldF92Y3B1KGt2bSwgaWR4KTsgXAorCSAgICAgaWR4IDwgYXRvbWljX3JlYWQoJmt2bS0+b25saW5lX3ZjcHVzKSAmJiB2Y3B1cDsgXAorCSAgICAgdmNwdXAgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCArK2lkeCkpCisKIGludCBrdm1fdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpZCk7CiB2b2lkIGt2bV92Y3B1X3VuaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCkBAIC0yMDEsNiArMjM0LDcgQEAKIAkJCQlzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uICptZW0sCiAJCQkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCBvbGQsCiAJCQkJaW50IHVzZXJfYWxsb2MpOwordm9pZCBrdm1fZGlzYWJsZV9sYXJnZXBhZ2VzKHZvaWQpOwogdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3coc3RydWN0IGt2bSAqa3ZtKTsKIGdmbl90IHVuYWxpYXNfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKIHN0cnVjdCBwYWdlICpnZm5fdG9fcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7CkBAIC0yNDMsOCArMjc3LDYgQEAKIAkJCXVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpOwogbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAogCQkJIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpOwotdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKLXZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogaW50IGt2bV9kZXZfaW9jdGxfY2hlY2tfZXh0ZW5zaW9uKGxvbmcgZXh0KTsKIApAQCAtMzAwLDcgKzMzMiw2IEBACiB2b2lkIGt2bV9hcmNoX2hhcmR3YXJlX3Vuc2V0dXAodm9pZCk7CiB2b2lkIGt2bV9hcmNoX2NoZWNrX3Byb2Nlc3Nvcl9jb21wYXQodm9pZCAqcnRuKTsKIGludCBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1pbnQga3ZtX2FyY2hfaW50ZXJydXB0X2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogdm9pZCBrdm1fZnJlZV9waHlzbWVtKHN0cnVjdCBrdm0gKmt2bSk7CiAKQEAgLTMwOSw4ICszNDAsNiBAQAogdm9pZCBrdm1fZnJlZV9hbGxfYXNzaWduZWRfZGV2aWNlcyhzdHJ1Y3Qga3ZtICprdm0pOwogdm9pZCBrdm1fYXJjaF9zeW5jX2V2ZW50cyhzdHJ1Y3Qga3ZtICprdm0pOwogCi1pbnQga3ZtX2NwdV9nZXRfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdik7Ci1pbnQga3ZtX2NwdV9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdik7CiBpbnQga3ZtX2NwdV9oYXNfcGVuZGluZ190aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fdmNwdV9raWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKQEAgLTM2Niw3ICszOTUsOCBAQAogdm9pZCBrdm1fbm90aWZ5X2Fja2VkX2lycShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlycWNoaXAsIHVuc2lnbmVkIHBpbik7CiB2b2lkIGt2bV9yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pOwotdm9pZCBrdm1fdW5yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbik7Cit2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgIHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbik7CiBpbnQga3ZtX3JlcXVlc3RfaXJxX3NvdXJjZV9pZChzdHJ1Y3Qga3ZtICprdm0pOwogdm9pZCBrdm1fZnJlZV9pcnFfc291cmNlX2lkKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQpOwogCkBAIC00NTksMzcgKzQ4OSw2IEBACiBleHRlcm4gc3RydWN0IGt2bV9zdGF0c19kZWJ1Z2ZzX2l0ZW0gZGVidWdmc19lbnRyaWVzW107CiBleHRlcm4gc3RydWN0IGRlbnRyeSAqa3ZtX2RlYnVnZnNfZGlyOwogCi0jZGVmaW5lIEtWTVRSQUNFXzVEKGV2dCwgdmNwdSwgZDEsIGQyLCBkMywgZDQsIGQ1LCBuYW1lKSBcCi0JdHJhY2VfbWFyayhrdm1fdHJhY2VfIyNuYW1lLCAiJXUgJXAgJXUgJXUgJXUgJXUgJXUgJXUiLCBLVk1fVFJDXyMjZXZ0LCBcCi0JCQkJCQl2Y3B1LCA1LCBkMSwgZDIsIGQzLCBkNCwgZDUpCi0jZGVmaW5lIEtWTVRSQUNFXzREKGV2dCwgdmNwdSwgZDEsIGQyLCBkMywgZDQsIG5hbWUpIFwKLQl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKLQkJCQkJCXZjcHUsIDQsIGQxLCBkMiwgZDMsIGQ0LCAwKQotI2RlZmluZSBLVk1UUkFDRV8zRChldnQsIHZjcHUsIGQxLCBkMiwgZDMsIG5hbWUpIFwKLQl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKLQkJCQkJCXZjcHUsIDMsIGQxLCBkMiwgZDMsIDAsIDApCi0jZGVmaW5lIEtWTVRSQUNFXzJEKGV2dCwgdmNwdSwgZDEsIGQyLCBuYW1lKSBcCi0JdHJhY2VfbWFyayhrdm1fdHJhY2VfIyNuYW1lLCAiJXUgJXAgJXUgJXUgJXUgJXUgJXUgJXUiLCBLVk1fVFJDXyMjZXZ0LCBcCi0JCQkJCQl2Y3B1LCAyLCBkMSwgZDIsIDAsIDAsIDApCi0jZGVmaW5lIEtWTVRSQUNFXzFEKGV2dCwgdmNwdSwgZDEsIG5hbWUpIFwKLQl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKLQkJCQkJCXZjcHUsIDEsIGQxLCAwLCAwLCAwLCAwKQotI2RlZmluZSBLVk1UUkFDRV8wRChldnQsIHZjcHUsIG5hbWUpIFwKLQl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKLQkJCQkJCXZjcHUsIDAsIDAsIDAsIDAsIDAsIDApCi0KLSNpZmRlZiBDT05GSUdfS1ZNX1RSQUNFCi1pbnQga3ZtX3RyYWNlX2lvY3RsKHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpOwotdm9pZCBrdm1fdHJhY2VfY2xlYW51cCh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lCi1pbnQga3ZtX3RyYWNlX2lvY3RsKHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0jZGVmaW5lIGt2bV90cmFjZV9jbGVhbnVwKCkgKCh2b2lkKTApCi0jZW5kaWYKLQogI2lmZGVmIEtWTV9BUkNIX1dBTlRfTU1VX05PVElGSUVSCiBzdGF0aWMgaW5saW5lIGludCBtbXVfbm90aWZpZXJfcmV0cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIG1tdV9zZXEpCiB7CkBAIC01MjUsNCArNTI0LDMzIEBACiAKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0VWRU5URkQKKwordm9pZCBrdm1fZXZlbnRmZF9pbml0KHN0cnVjdCBrdm0gKmt2bSk7CitpbnQga3ZtX2lycWZkKHN0cnVjdCBrdm0gKmt2bSwgaW50IGZkLCBpbnQgZ3NpLCBpbnQgZmxhZ3MpOwordm9pZCBrdm1faXJxZmRfcmVsZWFzZShzdHJ1Y3Qga3ZtICprdm0pOworaW50IGt2bV9pb2V2ZW50ZmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lvZXZlbnRmZCAqYXJncyk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZXZlbnRmZF9pbml0KHN0cnVjdCBrdm0gKmt2bSkge30KK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9pcnFmZChzdHJ1Y3Qga3ZtICprdm0sIGludCBmZCwgaW50IGdzaSwgaW50IGZsYWdzKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2lycWZkX3JlbGVhc2Uoc3RydWN0IGt2bSAqa3ZtKSB7fQorc3RhdGljIGlubGluZSBpbnQga3ZtX2lvZXZlbnRmZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faW9ldmVudGZkICphcmdzKQoreworCXJldHVybiAtRU5PU1lTOworfQorCisjZW5kaWYgLyogQ09ORklHX0hBVkVfS1ZNX0VWRU5URkQgKi8KKworI2lmZGVmIENPTkZJR19LVk1fQVBJQ19BUkNISVRFQ1RVUkUKK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fdmNwdV9pc19ic3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiB2Y3B1LT5rdm0tPmJzcF92Y3B1X2lkID09IHZjcHUtPnZjcHVfaWQ7Cit9CisjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1fcGFyYS5oIGIvaW5jbHVkZS9saW51eC9rdm1fcGFyYS5oCmluZGV4IDNkZGNlMDMuLmQ3MzEwOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX3BhcmEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9wYXJhLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgS1ZNX0VOT1NZUwkJMTAwMAogI2RlZmluZSBLVk1fRUZBVUxUCQlFRkFVTFQKICNkZWZpbmUgS1ZNX0UyQklHCQlFMkJJRworI2RlZmluZSBLVk1fRVBFUk0JCUVQRVJNCiAKICNkZWZpbmUgS1ZNX0hDX1ZBUElDX1BPTExfSVJRCQkxCiAjZGVmaW5lIEtWTV9IQ19NTVVfT1AJCQkyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCBlNWI2ZTMzLi43NjMxOWJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTE0Myw3ICsxNDMsNiBAQAogCiAJQVRBX0RGTEFHX1BJTwkJPSAoMSA8PCAxMiksIC8qIGRldmljZSBsaW1pdGVkIHRvIFBJTyBtb2RlICovCiAJQVRBX0RGTEFHX05DUV9PRkYJPSAoMSA8PCAxMyksIC8qIGRldmljZSBsaW1pdGVkIHRvIG5vbi1OQ1EgbW9kZSAqLwotCUFUQV9ERkxBR19TUFVORE9XTgk9ICgxIDw8IDE0KSwgLyogWFhYOiBmb3Igc3BpbmRvd25fY29tcGF0ICovCiAJQVRBX0RGTEFHX1NMRUVQSU5HCT0gKDEgPDwgMTUpLCAvKiBkZXZpY2UgaXMgc2xlZXBpbmcgKi8KIAlBVEFfREZMQUdfRFVCSU9VU19YRkVSCT0gKDEgPDwgMTYpLCAvKiBkYXRhIHRyYW5zZmVyIG5vdCB2ZXJpZmllZCAqLwogCUFUQV9ERkxBR19OT19VTkxPQUQJPSAoMSA8PCAxNyksIC8qIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgdW5sb2FkICovCkBAIC0xOTAsNiArMTg5LDcgQEAKIAlBVEFfRkxBR19OT19QT1dFUk9GRl9TUElORE9XTiA9ICgxIDw8IDExKSwgLyogZG9uJ3Qgc3BpbmRvd24gYmVmb3JlIHBvd2Vyb2ZmICovCiAJQVRBX0ZMQUdfTk9fSElCRVJOQVRFX1NQSU5ET1dOID0gKDEgPDwgMTIpLCAvKiBkb24ndCBzcGluZG93biBiZWZvcmUgaGliZXJuYXRpb24gKi8KIAlBVEFfRkxBR19ERUJVR01TRwk9ICgxIDw8IDEzKSwKKwlBVEFfRkxBR19GUERNQV9BQQkJPSAoMSA8PCAxNCksIC8qIGRyaXZlciBzdXBwb3J0cyBBdXRvLUFjdGl2YXRlICovCiAJQVRBX0ZMQUdfSUdOX1NJTVBMRVgJPSAoMSA8PCAxNSksIC8qIGlnbm9yZSBTSU1QTEVYICovCiAJQVRBX0ZMQUdfTk9fSU9SRFkJPSAoMSA8PCAxNiksIC8qIGNvbnRyb2xsZXIgbGFja3MgaW9yZHkgKi8KIAlBVEFfRkxBR19BQ1BJX1NBVEEJPSAoMSA8PCAxNyksIC8qIG5lZWQgbmF0aXZlIFNBVEEgQUNQSSBsYXlvdXQgKi8KQEAgLTM4Niw2ICszODYsNyBAQAogCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gPSAoMSA8PCAxMiksCS8qIGZpcm13YXJlIHVwZGF0ZSB3YXJuaW5nICovCiAJQVRBX0hPUktBR0VfMV81X0dCUFMJPSAoMSA8PCAxMyksCS8qIGZvcmNlIDEuNSBHYnBzICovCiAJQVRBX0hPUktBR0VfTk9TRVRYRkVSCT0gKDEgPDwgMTQpLAkvKiBza2lwIFNFVFhGRVIsIFNBVEEgb25seSAqLworCUFUQV9IT1JLQUdFX0JST0tFTl9GUERNQV9BQQk9ICgxIDw8IDE1KSwJLyogc2tpcCBBQSAqLwogCiAJIC8qIERNQSBtYXNrIGZvciB1c2VyIERNQSBjb250cm9sOiBVc2VyIHZpc2libGUgdmFsdWVzOyBETyBOT1QKIAkgICAgcmVudW1iZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlicHMyLmggYi9pbmNsdWRlL2xpbnV4L2xpYnBzMi5oCmluZGV4IGI5NDUzNGIuLmZjZjVmYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlicHMyLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJwczIuaApAQCAtNDQsNiArNDQsNyBAQAogdm9pZCBwczJfaW5pdChzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHN0cnVjdCBzZXJpbyAqc2VyaW8pOwogaW50IHBzMl9zZW5kYnl0ZShzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHVuc2lnbmVkIGNoYXIgYnl0ZSwgaW50IHRpbWVvdXQpOwogdm9pZCBwczJfZHJhaW4oc3RydWN0IHBzMmRldiAqcHMyZGV2LCBpbnQgbWF4Ynl0ZXMsIGludCB0aW1lb3V0KTsKK2ludCBfX3BzMl9jb21tYW5kKHN0cnVjdCBwczJkZXYgKnBzMmRldiwgdW5zaWduZWQgY2hhciAqcGFyYW0sIGludCBjb21tYW5kKTsKIGludCBwczJfY29tbWFuZChzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHVuc2lnbmVkIGNoYXIgKnBhcmFtLCBpbnQgY29tbWFuZCk7CiBpbnQgcHMyX2hhbmRsZV9hY2soc3RydWN0IHBzMmRldiAqcHMyZGV2LCB1bnNpZ25lZCBjaGFyIGRhdGEpOwogaW50IHBzMl9oYW5kbGVfcmVzcG9uc2Uoc3RydWN0IHBzMmRldiAqcHMyZGV2LCB1bnNpZ25lZCBjaGFyIGRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAppbmRleCBiMjVkMWI1Li45Y2NmMGUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaApAQCAtMTQ5LDYgKzE0OSwxMiBAQAogCXN0cnVjdCBsb2NrX2NsYXNzCQkqY2xhc3M7CiAJc3RydWN0IHN0YWNrX3RyYWNlCQl0cmFjZTsKIAlpbnQJCQkJZGlzdGFuY2U7CisKKwkvKgorCSAqIFRoZSBwYXJlbnQgZmllbGQgaXMgdXNlZCB0byBpbXBsZW1lbnQgYnJlYWR0aC1maXJzdCBzZWFyY2gsIGFuZCB0aGUKKwkgKiBiaXQgMCBpcyByZXVzZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGxvY2sgaGFzIGJlZW4gYWNjZXNzZWQgaW4gQkZTLgorCSAqLworCXN0cnVjdCBsb2NrX2xpc3QJCSpwYXJlbnQ7CiB9OwogCiAvKgpAQCAtMjA4LDEwICsyMTQsMTIgQEAKIAkgKiBpbnRlcnJ1cHQgY29udGV4dDoKIAkgKi8KIAl1bnNpZ25lZCBpbnQgaXJxX2NvbnRleHQ6MjsgLyogYml0IDAgLSBzb2Z0LCBiaXQgMSAtIGhhcmQgKi8KLQl1bnNpZ25lZCBpbnQgdHJ5bG9jazoxOworCXVuc2lnbmVkIGludCB0cnlsb2NrOjE7CQkJCQkJLyogMTYgYml0cyAqLworCiAJdW5zaWduZWQgaW50IHJlYWQ6MjsgICAgICAgIC8qIHNlZSBsb2NrX2FjcXVpcmUoKSBjb21tZW50ICovCiAJdW5zaWduZWQgaW50IGNoZWNrOjI7ICAgICAgIC8qIHNlZSBsb2NrX2FjcXVpcmUoKSBjb21tZW50ICovCiAJdW5zaWduZWQgaW50IGhhcmRpcnFzX29mZjoxOworCXVuc2lnbmVkIGludCByZWZlcmVuY2VzOjExOwkJCQkJLyogMzIgYml0cyAqLwogfTsKIAogLyoKQEAgLTI5MSw2ICsyOTksMTAgQEAKIGV4dGVybiB2b2lkIGxvY2tfcmVsZWFzZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGludCBuZXN0ZWQsCiAJCQkgdW5zaWduZWQgbG9uZyBpcCk7CiAKKyNkZWZpbmUgbG9ja2RlcF9pc19oZWxkKGxvY2spCWxvY2tfaXNfaGVsZCgmKGxvY2spLT5kZXBfbWFwKQorCitleHRlcm4gaW50IGxvY2tfaXNfaGVsZChzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spOworCiBleHRlcm4gdm9pZCBsb2NrX3NldF9jbGFzcyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSwgdW5zaWduZWQgaW50IHN1YmNsYXNzLAogCQkJICAgdW5zaWduZWQgbG9uZyBpcCk7CkBAIC0zMDksNiArMzIxLDggQEAKIAogI2RlZmluZSBsb2NrZGVwX2RlcHRoKHRzaykJKGRlYnVnX2xvY2tzID8gKHRzayktPmxvY2tkZXBfZGVwdGggOiAwKQogCisjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0X2hlbGQobCkJV0FSTl9PTihkZWJ1Z19sb2NrcyAmJiAhbG9ja2RlcF9pc19oZWxkKGwpKQorCiAjZWxzZSAvKiAhTE9DS0RFUCAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9vZmYodm9pZCkKQEAgLTM1Myw2ICszNjcsOCBAQAogCiAjZGVmaW5lIGxvY2tkZXBfZGVwdGgodHNrKQkoMCkKIAorI2RlZmluZSBsb2NrZGVwX2Fzc2VydF9oZWxkKGwpCQkJZG8geyB9IHdoaWxlICgwKQorCiAjZW5kaWYgLyogIUxPQ0tERVAgKi8KIAogI2lmZGVmIENPTkZJR19MT0NLX1NUQVQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2F1ZGl0LmggYi9pbmNsdWRlL2xpbnV4L2xzbV9hdWRpdC5oCmluZGV4IGU0NjFiMmMuLjE5MGMzNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2F1ZGl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9sc21fYXVkaXQuaApAQCAtMzMsNiArMzMsNyBAQAogI2RlZmluZSBMU01fQVVESVRfREFUQV9JUEMgICAgIDQKICNkZWZpbmUgTFNNX0FVRElUX0RBVEFfVEFTSyAgICA1CiAjZGVmaW5lIExTTV9BVURJVF9EQVRBX0tFWSAgICAgNgorI2RlZmluZSBMU01fQVVESVRfTk9fQVVESVQgICAgIDcKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAl1bmlvbiAJewogCQlzdHJ1Y3QgewpAQCAtNjYsMTYgKzY3LDE5IEBACiAJCX0ga2V5X3N0cnVjdDsKICNlbmRpZgogCX0gdTsKLQljb25zdCBjaGFyICpmdW5jdGlvbjsKIAkvKiB0aGlzIHVuaW9uIGNvbnRhaW5zIExTTSBzcGVjaWZpYyBkYXRhICovCiAJdW5pb24geworI2lmZGVmIENPTkZJR19TRUNVUklUWV9TTUFDSwogCQkvKiBTTUFDSyBkYXRhICovCiAJCXN0cnVjdCBzbWFja19hdWRpdF9kYXRhIHsKKwkJCWNvbnN0IGNoYXIgKmZ1bmN0aW9uOwogCQkJY2hhciAqc3ViamVjdDsKIAkJCWNoYXIgKm9iamVjdDsKIAkJCWNoYXIgKnJlcXVlc3Q7CiAJCQlpbnQgcmVzdWx0OwogCQl9IHNtYWNrX2F1ZGl0X2RhdGE7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWAogCQkvKiBTRUxpbnV4IGRhdGEgKi8KIAkJc3RydWN0IHsKIAkJCXUzMiBzc2lkOwpAQCAtODMsMTAgKzg3LDEyIEBACiAJCQl1MTYgdGNsYXNzOwogCQkJdTMyIHJlcXVlc3RlZDsKIAkJCXUzMiBhdWRpdGVkOworCQkJdTMyIGRlbmllZDsKIAkJCXN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkOwogCQkJaW50IHJlc3VsdDsKIAkJfSBzZWxpbnV4X2F1ZGl0X2RhdGE7Ci0JfSBsc21fcHJpdjsKKyNlbmRpZgorCX07CiAJLyogdGhlc2UgY2FsbGJhY2sgd2lsbCBiZSBpbXBsZW1lbnRlZCBieSBhIHNwZWNpZmljIExTTSAqLwogCXZvaWQgKCpsc21fcHJlX2F1ZGl0KShzdHJ1Y3QgYXVkaXRfYnVmZmVyICosIHZvaWQgKik7CiAJdm9pZCAoKmxzbV9wb3N0X2F1ZGl0KShzdHJ1Y3QgYXVkaXRfYnVmZmVyICosIHZvaWQgKik7CkBAIC0xMDQsNyArMTEwLDcgQEAKIC8qIEluaXRpYWxpemUgYW4gTFNNIGF1ZGl0IGRhdGEgc3RydWN0dXJlLiAqLwogI2RlZmluZSBDT01NT05fQVVESVRfREFUQV9JTklUKF9kLCBfdCkgXAogCXsgbWVtc2V0KChfZCksIDAsIHNpemVvZihzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEpKTsgXAotCSAoX2QpLT50eXBlID0gTFNNX0FVRElUX0RBVEFfIyNfdDsgKF9kKS0+ZnVuY3Rpb24gPSBfX2Z1bmNfXzsgfQorCSAoX2QpLT50eXBlID0gTFNNX0FVRElUX0RBVEFfIyNfdDsgfQogCiB2b2lkIGNvbW1vbl9sc21fYXVkaXQoc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tSVNETmh3LmggYi9pbmNsdWRlL2xpbnV4L21JU0ROaHcuaAppbmRleCA3Zjk4MzFkLi40YWY4NDE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21JU0ROaHcuaAorKysgYi9pbmNsdWRlL2xpbnV4L21JU0ROaHcuaApAQCAtMTY4LDYgKzE2OCw3IEBACiBleHRlcm4gaW50CW1JU0ROX2luaXRkY2hhbm5lbChzdHJ1Y3QgZGNoYW5uZWwgKiwgaW50LCB2b2lkICopOwogZXh0ZXJuIGludAltSVNETl9pbml0YmNoYW5uZWwoc3RydWN0IGJjaGFubmVsICosIGludCk7CiBleHRlcm4gaW50CW1JU0ROX2ZyZWVkY2hhbm5lbChzdHJ1Y3QgZGNoYW5uZWwgKik7CitleHRlcm4gdm9pZAltSVNETl9jbGVhcl9iY2hhbm5lbChzdHJ1Y3QgYmNoYW5uZWwgKik7CiBleHRlcm4gaW50CW1JU0ROX2ZyZWViY2hhbm5lbChzdHJ1Y3QgYmNoYW5uZWwgKik7CiBleHRlcm4gdm9pZAlxdWV1ZV9jaF9mcmFtZShzdHJ1Y3QgbUlTRE5jaGFubmVsICosIHVfaW50LAogCQkJaW50LCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbUlTRE5pZi5oIGIvaW5jbHVkZS9saW51eC9tSVNETmlmLmgKaW5kZXggNDUxMDBiMy4uNTM2Y2ExMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tSVNETmlmLmgKKysrIGIvaW5jbHVkZS9saW51eC9tSVNETmlmLmgKQEAgLTM3LDcgKzM3LDcgQEAKICAqLwogI2RlZmluZQlNSVNETl9NQUpPUl9WRVJTSU9OCTEKICNkZWZpbmUJTUlTRE5fTUlOT1JfVkVSU0lPTgkxCi0jZGVmaW5lIE1JU0ROX1JFTEVBU0UJCTIwCisjZGVmaW5lIE1JU0ROX1JFTEVBU0UJCTIxCiAKIC8qIHByaW1pdGl2ZXMgZm9yIGluZm9ybWF0aW9uIGV4Y2hhbmdlCiAgKiBnZW5lcmVsbCBmb3JtYXQKQEAgLTE1Myw2ICsxNTMsMTggQEAKICNkZWZpbmUgSEZDX1ZPTF9DSEFOR0VfUlgJMHgyNjAyCiAjZGVmaW5lIEhGQ19TUExfTE9PUF9PTgkJMHgyNjAzCiAjZGVmaW5lIEhGQ19TUExfTE9PUF9PRkYJMHgyNjA0CisvKiBmb3IgVDMwIEZBWCBhbmQgYW5hbG9nIG1vZGVtICovCisjZGVmaW5lIEhXX01PRF9GUk0JCTB4NDAwMAorI2RlZmluZSBIV19NT0RfRlJICQkweDQwMDEKKyNkZWZpbmUgSFdfTU9EX0ZUTQkJMHg0MDAyCisjZGVmaW5lIEhXX01PRF9GVEgJCTB4NDAwMworI2RlZmluZSBIV19NT0RfRlRTCQkweDQwMDQKKyNkZWZpbmUgSFdfTU9EX0NPTk5FQ1QJCTB4NDAxMAorI2RlZmluZSBIV19NT0RfT0sJCTB4NDAxMQorI2RlZmluZSBIV19NT0RfTk9DQVJSCQkweDQwMTIKKyNkZWZpbmUgSFdfTU9EX0ZDRVJST1IJCTB4NDAxMworI2RlZmluZSBIV19NT0RfUkVBRFkJCTB4NDAxNAorI2RlZmluZSBIV19NT0RfTEFTVERBVEEJCTB4NDAxNQogCiAvKiBEU1BfVE9ORV9QQVRUX09OIHBhcmFtZXRlciAqLwogI2RlZmluZSBUT05FX09GRgkJCTB4MDAwMApAQCAtMjI0LDYgKzIzNiw4IEBACiAjZGVmaW5lIElTRE5fUF9CX0wyRFRNRgkJMHgyNAogI2RlZmluZSBJU0ROX1BfQl9MMkRTUAkJMHgyNQogI2RlZmluZSBJU0ROX1BfQl9MMkRTUEhETEMJMHgyNgorI2RlZmluZSBJU0ROX1BfQl9UMzBfRkFYCTB4MjcKKyNkZWZpbmUgSVNETl9QX0JfTU9ERU1fQVNZTkMJMHgyOAogCiAjZGVmaW5lIE9QVElPTl9MMl9QTVgJCTEKICNkZWZpbmUgT1BUSU9OX0wyX1BUUAkJMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZGlvLmggYi9pbmNsdWRlL2xpbnV4L21kaW8uaAppbmRleCBjZmRmMWRmLi5jNzc5YjQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21kaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L21kaW8uaApAQCAtMzA0LDcgKzMwNCw3IEBACiAgKi8KIHN0cnVjdCBtZGlvX2lmX2luZm8gewogCWludCBwcnRhZDsKLQl1MzIgX19iaXR3aXNlIG1tZHM7CisJdTMyIG1tZHM7CiAJdW5zaWduZWQgbW9kZV9zdXBwb3J0OwogCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3NkaW9faWRzLmggYi9pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2lkcy5oCmluZGV4IDM5NzUxYzguLjJkYmZiNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3NkaW9faWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvc2Rpb19pZHMuaApAQCAtMjIsNiArMjIsMTIgQEAKIC8qCiAgKiBWZW5kb3JzIGFuZCBkZXZpY2VzLiAgU29ydCBrZXk6IHZlbmRvciBmaXJzdCwgZGV2aWNlIG5leHQuCiAgKi8KKyNkZWZpbmUgU0RJT19WRU5ET1JfSURfSU5URUwJCQkweDAwODkKKyNkZWZpbmUgU0RJT19ERVZJQ0VfSURfSU5URUxfSVdNQzMyMDBXSU1BWAkweDE0MDIKKyNkZWZpbmUgU0RJT19ERVZJQ0VfSURfSU5URUxfSVdNQzMyMDBXSUZJCTB4MTQwMworI2RlZmluZSBTRElPX0RFVklDRV9JRF9JTlRFTF9JV01DMzIwMFRPUAkweDE0MDQKKyNkZWZpbmUgU0RJT19ERVZJQ0VfSURfSU5URUxfSVdNQzMyMDBHUFMJMHgxNDA1CisjZGVmaW5lIFNESU9fREVWSUNFX0lEX0lOVEVMX0lXTUMzMjAwQlQJCTB4MTQwNgogCiAjZGVmaW5lIFNESU9fVkVORE9SX0lEX01BUlZFTEwJCQkweDAyZGYKICNkZWZpbmUgU0RJT19ERVZJQ0VfSURfTUFSVkVMTF9MSUJFUlRBUwkJMHg5MTAzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaAppbmRleCAwOThiZGI3Li5mOGY5MmQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKQEAgLTE3LDEwICsxNywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgotI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgogCisjaW5jbHVkZSA8YXNtL2xvY2FsLmg+CiAjaW5jbHVkZSA8YXNtL21vZHVsZS5oPgogCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL21vZHVsZS5oPgorCiAvKiBOb3QgWWV0IEltcGxlbWVudGVkICovCiAjZGVmaW5lIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKG5hbWUpCiAKQEAgLTQ2Miw3ICs0NjQsMTAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21vZHVsZV9nZXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKQogewogCWlmIChtb2R1bGUpIHsKLQkJbG9jYWxfaW5jKF9fbW9kdWxlX3JlZl9hZGRyKG1vZHVsZSwgZ2V0X2NwdSgpKSk7CisJCXVuc2lnbmVkIGludCBjcHUgPSBnZXRfY3B1KCk7CisJCWxvY2FsX2luYyhfX21vZHVsZV9yZWZfYWRkcihtb2R1bGUsIGNwdSkpOworCQl0cmFjZV9tb2R1bGVfZ2V0KG1vZHVsZSwgX1RISVNfSVBfLAorCQkJCSBsb2NhbF9yZWFkKF9fbW9kdWxlX3JlZl9hZGRyKG1vZHVsZSwgY3B1KSkpOwogCQlwdXRfY3B1KCk7CiAJfQogfQpAQCAtNDczLDggKzQ3OCwxMSBAQAogCiAJaWYgKG1vZHVsZSkgewogCQl1bnNpZ25lZCBpbnQgY3B1ID0gZ2V0X2NwdSgpOwotCQlpZiAobGlrZWx5KG1vZHVsZV9pc19saXZlKG1vZHVsZSkpKQorCQlpZiAobGlrZWx5KG1vZHVsZV9pc19saXZlKG1vZHVsZSkpKSB7CiAJCQlsb2NhbF9pbmMoX19tb2R1bGVfcmVmX2FkZHIobW9kdWxlLCBjcHUpKTsKKwkJCXRyYWNlX21vZHVsZV9nZXQobW9kdWxlLCBfVEhJU19JUF8sCisJCQkJbG9jYWxfcmVhZChfX21vZHVsZV9yZWZfYWRkcihtb2R1bGUsIGNwdSkpKTsKKwkJfQogCQllbHNlCiAJCQlyZXQgPSAwOwogCQlwdXRfY3B1KCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmggYi9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKaW5kZXggYjcwMzEzZC4uMjc0YjYxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBNVEQgcGFydGl0aW9uaW5nIGxheWVyIGRlZmluaXRpb25zCiAgKgotICogKEMpIDIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICogKEMpIDIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KICAqCiAgKiBUaGlzIGNvZGUgaXMgR1BMCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0X2Ryb3Btb24uaCBiL2luY2x1ZGUvbGludXgvbmV0X2Ryb3Btb24uaAppbmRleCAzY2ViMGNjLi4yYTczOTQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldF9kcm9wbW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IG5ldF9kbV9kcm9wX3BvaW50IHsKIAlfX3U4IHBjWzhdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggZDRhNGQ5OC4uNjVlZTE5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC03MiwxMCArNzIsNiBAQAogLyogQmFja2xvZyBjb25nZXN0aW9uIGxldmVscyAqLwogI2RlZmluZSBORVRfUlhfU1VDQ0VTUwkJMCAgIC8qIGtlZXAgJ2VtIGNvbWluZywgYmFieSAqLwogI2RlZmluZSBORVRfUlhfRFJPUAkJMSAgLyogcGFja2V0IGRyb3BwZWQgKi8KLSNkZWZpbmUgTkVUX1JYX0NOX0xPVwkJMiAgIC8qIHN0b3JtIGFsZXJ0LCBqdXN0IGluIGNhc2UgKi8KLSNkZWZpbmUgTkVUX1JYX0NOX01PRAkJMyAgIC8qIFN0b3JtIG9uIGl0cyB3YXkhICovCi0jZGVmaW5lIE5FVF9SWF9DTl9ISUdICQk0ICAgLyogVGhlIHN0b3JtIGlzIGhlcmUgKi8KLSNkZWZpbmUgTkVUX1JYX0JBRAkJNSAgLyogcGFja2V0IGRyb3BwZWQgZHVlIHRvIGtlcm5lbCBlcnJvciAqLwogCiAvKiBORVRfWE1JVF9DTiBpcyBzcGVjaWFsLiBJdCBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGlzIHBhY2tldCBpcyBsb3N0LiBJdAogICogaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSB3aWxsIHNvb24gYmUgZHJvcHBpbmcgcGFja2V0cywgb3IgYWxyZWFkeSBkcm9wcwpAQCAtODMsMTcgKzc5LDE5IEBACiAjZGVmaW5lIG5ldF94bWl0X2V2YWwoZSkJKChlKSA9PSBORVRfWE1JVF9DTj8gMCA6IChlKSkKICNkZWZpbmUgbmV0X3htaXRfZXJybm8oZSkJKChlKSAhPSBORVRfWE1JVF9DTiA/IC1FTk9CVUZTIDogMCkKIAorLyogRHJpdmVyIHRyYW5zbWl0IHJldHVybiBjb2RlcyAqLworZW51bSBuZXRkZXZfdHggeworCU5FVERFVl9UWF9PSyA9IDAsCS8qIGRyaXZlciB0b29rIGNhcmUgb2YgcGFja2V0ICovCisJTkVUREVWX1RYX0JVU1ksCQkvKiBkcml2ZXIgdHggcGF0aCB3YXMgYnVzeSovCisJTkVUREVWX1RYX0xPQ0tFRCA9IC0xLAkvKiBkcml2ZXIgdHggbG9jayB3YXMgYWxyZWFkeSB0YWtlbiAqLworfTsKK3R5cGVkZWYgZW51bSBuZXRkZXZfdHggbmV0ZGV2X3R4X3Q7CisKICNlbmRpZgogCiAjZGVmaW5lIE1BWF9BRERSX0xFTgkzMgkJLyogTGFyZ2VzdCBoYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCAqLwogCi0vKiBEcml2ZXIgdHJhbnNtaXQgcmV0dXJuIGNvZGVzICovCi0jZGVmaW5lIE5FVERFVl9UWF9PSyAwCQkvKiBkcml2ZXIgdG9vayBjYXJlIG9mIHBhY2tldCAqLwotI2RlZmluZSBORVRERVZfVFhfQlVTWSAxCS8qIGRyaXZlciB0eCBwYXRoIHdhcyBidXN5Ki8KLSNkZWZpbmUgTkVUREVWX1RYX0xPQ0tFRCAtMQkvKiBkcml2ZXIgdHggbG9jayB3YXMgYWxyZWFkeSB0YWtlbiAqLwotCiAjaWZkZWYgIF9fS0VSTkVMX18KLQogLyoKICAqCUNvbXB1dGUgdGhlIHdvcnN0IGNhc2UgaGVhZGVyIGxlbmd0aCBhY2NvcmRpbmcgdG8gdGhlIHByb3RvY29scwogICoJdXNlZC4KQEAgLTUxMSw5ICs1MDksMTEgQEAKICAqICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIG5ldHdvcmsgZGV2aWNlIHRyYW5zaXN0aW9ucyB0byB0aGUgZG93bgogICogICAgIHN0YXRlLgogICoKLSAqIGludCAoKm5kb19zdGFydF94bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyAqIG5ldGRldl90eF90ICgqbmRvX3N0YXJ0X3htaXQpKHN0cnVjdCBza19idWZmICpza2IsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICAqCUNhbGxlZCB3aGVuIGEgcGFja2V0IG5lZWRzIHRvIGJlIHRyYW5zbWl0dGVkLgotICoJTXVzdCByZXR1cm4gTkVUREVWX1RYX09LICwgTkVUREVWX1RYX0JVU1ksIG9yIE5FVERFVl9UWF9MT0NLRUQsCisgKglNdXN0IHJldHVybiBORVRERVZfVFhfT0sgLCBORVRERVZfVFhfQlVTWS4KKyAqICAgICAgICAoY2FuIGFsc28gcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQgaWZmIE5FVElGX0ZfTExUWCkKICAqCVJlcXVpcmVkIGNhbiBub3QgYmUgTlVMTC4KICAqCiAgKiB1MTYgKCpuZG9fc2VsZWN0X3F1ZXVlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTU4NCw3ICs1ODQsNyBAQAogCXZvaWQJCQkoKm5kb191bmluaXQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCWludAkJCSgqbmRvX29wZW4pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCWludAkJCSgqbmRvX3N0b3ApKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCWludAkJCSgqbmRvX3N0YXJ0X3htaXQpIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCW5ldGRldl90eF90CQkoKm5kb19zdGFydF94bWl0KSAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCXUxNgkJCSgqbmRvX3NlbGVjdF9xdWV1ZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTYyNyw2ICs2MjcsOCBAQAogCXZvaWQgICAgICAgICAgICAgICAgICAgICgqbmRvX3BvbGxfY29udHJvbGxlcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19GQ09FKSB8fCBkZWZpbmVkKENPTkZJR19GQ09FX01PRFVMRSkKKwlpbnQJCQkoKm5kb19mY29lX2VuYWJsZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJaW50CQkJKCpuZG9fZmNvZV9kaXNhYmxlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAlpbnQJCQkoKm5kb19mY29lX2RkcF9zZXR1cCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCSAgICAgIHUxNiB4aWQsCiAJCQkJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKQEAgLTcwNSw2ICs3MDcsNyBAQAogLyogdGhlIEdTT19NQVNLIHJlc2VydmVzIGJpdHMgMTYgdGhyb3VnaCAyMyAqLwogI2RlZmluZSBORVRJRl9GX0ZDT0VfQ1JDCSgxIDw8IDI0KSAvKiBGQ29FIENSQzMyICovCiAjZGVmaW5lIE5FVElGX0ZfU0NUUF9DU1VNCSgxIDw8IDI1KSAvKiBTQ1RQIGNoZWNrc3VtIG9mZmxvYWQgKi8KKyNkZWZpbmUgTkVUSUZfRl9GQ09FX01UVQkoMSA8PCAyNikgLyogU3VwcG9ydHMgbWF4IEZDb0UgTVRVLCAyMTU4IGJ5dGVzKi8KIAogCS8qIFNlZ21lbnRhdGlvbiBvZmZsb2FkIGZlYXR1cmVzICovCiAjZGVmaW5lIE5FVElGX0ZfR1NPX1NISUZUCTE2CkBAIC04MjksNiArODMyLDkgQEAKIAkvKiBOdW1iZXIgb2YgVFggcXVldWVzIGN1cnJlbnRseSBhY3RpdmUgaW4gZGV2aWNlICAqLwogCXVuc2lnbmVkIGludAkJcmVhbF9udW1fdHhfcXVldWVzOwogCisJLyogcm9vdCBxZGlzYyBmcm9tIHVzZXJzcGFjZSBwb2ludCBvZiB2aWV3ICovCisJc3RydWN0IFFkaXNjCQkqcWRpc2M7CisKIAl1bnNpZ25lZCBsb25nCQl0eF9xdWV1ZV9sZW47CS8qIE1heCBmcmFtZXMgcGVyIHF1ZXVlIGFsbG93ZWQgKi8KIAlzcGlubG9ja190CQl0eF9nbG9iYWxfbG9jazsKIC8qCkBAIC05OTIsNiArOTk4LDEyIEBACiAgKi8KICNkZWZpbmUgU0VUX05FVERFVl9ERVYobmV0LCBwZGV2KQkoKG5ldCktPmRldi5wYXJlbnQgPSAocGRldikpCiAKKy8qIFNldCB0aGUgc3lzZnMgZGV2aWNlIHR5cGUgZm9yIHRoZSBuZXR3b3JrIGxvZ2ljYWwgZGV2aWNlIHRvIGFsbG93CisgKiBmaW4gZ3JhaW5lZCBpbmRlbnRpZmljYXRpb24gb2YgZGlmZmVyZW50IG5ldHdvcmsgZGV2aWNlIHR5cGVzLiBGb3IKKyAqIGV4YW1wbGUgRXRoZXJuZXQsIFdpcmVsc3MgTEFOLCBCbHVldG9vdGgsIFdpTUFYIGV0Yy4KKyAqLworI2RlZmluZSBTRVRfTkVUREVWX0RFVlRZUEUobmV0LCBkZXZ0eXBlKQkoKG5ldCktPmRldi50eXBlID0gKGRldnR5cGUpKQorCiAvKioKICAqCW5ldGlmX25hcGlfYWRkIC0gaW5pdGlhbGl6ZSBhIG5hcGkgY29udGV4dAogICoJQGRldjogIG5ldHdvcmsgZGV2aWNlCkBAIC0xMjYwLDcgKzEyNzIsNyBAQAogewogI2lmZGVmIENPTkZJR19ORVRQT0xMX1RSQVAKIAlpZiAobmV0cG9sbF90cmFwKCkpIHsKLQkJY2xlYXJfYml0KF9fUVVFVUVfU1RBVEVfWE9GRiwgJmRldl9xdWV1ZS0+c3RhdGUpOworCQluZXRpZl90eF9zdGFydF9xdWV1ZShkZXZfcXVldWUpOwogCQlyZXR1cm47CiAJfQogI2VuZGlmCkBAIC0xMzY2LDcgKzEzNzgsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3N0YXJ0X3N1YnF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pbmRleCkKIHsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgcXVldWVfaW5kZXgpOwotCWNsZWFyX2JpdChfX1FVRVVFX1NUQVRFX1hPRkYsICZ0eHEtPnN0YXRlKTsKKworCW5ldGlmX3R4X3N0YXJ0X3F1ZXVlKHR4cSk7CiB9CiAKIC8qKgpAQCAtMTM4Myw3ICsxMzk2LDcgQEAKIAlpZiAobmV0cG9sbF90cmFwKCkpCiAJCXJldHVybjsKICNlbmRpZgotCXNldF9iaXQoX19RVUVVRV9TVEFURV9YT0ZGLCAmdHhxLT5zdGF0ZSk7CisJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOwogfQogCiAvKioKQEAgLTEzOTcsNyArMTQxMCw4IEBACiAJCQkJCSB1MTYgcXVldWVfaW5kZXgpCiB7CiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHF1ZXVlX2luZGV4KTsKLQlyZXR1cm4gdGVzdF9iaXQoX19RVUVVRV9TVEFURV9YT0ZGLCAmdHhxLT5zdGF0ZSk7CisKKwlyZXR1cm4gbmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBuZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xNzQ5LDggKzE3NjMsNyBAQAogCQkgKiBmb3JjZSBhIHNjaGVkdWxlLgogCQkgKi8KIAkJY2xlYXJfYml0KF9fUVVFVUVfU1RBVEVfRlJPWkVOLCAmdHhxLT5zdGF0ZSk7Ci0JCWlmICghdGVzdF9iaXQoX19RVUVVRV9TVEFURV9YT0ZGLCAmdHhxLT5zdGF0ZSkpCi0JCQlfX25ldGlmX3NjaGVkdWxlKHR4cS0+cWRpc2MpOworCQluZXRpZl9zY2hlZHVsZV9xdWV1ZSh0eHEpOwogCX0KIAlzcGluX3VubG9jaygmZGV2LT50eF9nbG9iYWxfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCmluZGV4IGJmZjRkNTcuLjlmMDBkYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCkBAIC01OCw3ICs1OCw4IEBACiBzdHJ1Y3QgbmZubF9jYWxsYmFjawogewogCWludCAoKmNhbGwpKHN0cnVjdCBzb2NrICpubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgCi0JCXN0cnVjdCBubG1zZ2hkciAqbmxoLCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSk7CisJCSAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSk7CiAJY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeTsJLyogbmV0bGluayBhdHRyaWJ1dGUgcG9saWN5ICovCiAJY29uc3QgdV9pbnQxNl90IGF0dHJfY291bnQ7CQkvKiBudW1iZXIgb2YgbmxhdHRyJ3MgKi8KIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAppbmRleCAxMDMwYjc1Li44MTJjYjE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKQEAgLTIzOCw5ICsyMzgsOSBAQAogICovCiBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sICpvdXQ7Ci0JdW5zaWduZWQgaW50IGhvb2tudW07CiAJY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0OwogCWNvbnN0IHZvaWQgKnRhcmdpbmZvOworCXVuc2lnbmVkIGludCBob29rbnVtOwogCXVfaW50OF90IGZhbWlseTsKIH07CiAKQEAgLTQwNyw3ICs0MDcsNyBAQAogCQkJICAgdW5zaWduZWQgaW50IHNpemUsIHVfaW50OF90IHByb3RvLCBib29sIGludl9wcm90byk7CiAKIGV4dGVybiBzdHJ1Y3QgeHRfdGFibGUgKnh0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkJICBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAorCQkJCQkgIGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAJCQkJCSAgc3RydWN0IHh0X3RhYmxlX2luZm8gKmJvb3RzdHJhcCwKIAkJCQkJICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbyk7CiBleHRlcm4gdm9pZCAqeHRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oCmluZGV4IDc2MzVjOGYuLjBhODU0NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaApAQCAtMTgsMTIgKzE4LDYgQEAKIAlYVF9DT05OTUFSS19SRVNUT1JFCiB9OwogCi1zdHJ1Y3QgeHRfY29ubm1hcmtfdGFyZ2V0X2luZm8gewotCXVuc2lnbmVkIGxvbmcgbWFyazsKLQl1bnNpZ25lZCBsb25nIG1hc2s7Ci0JX191OCBtb2RlOwotfTsKLQogc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzEgewogCV9fdTMyIGN0bWFyaywgY3RtYXNrLCBuZm1hc2s7CiAJX191OCBtb2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oCmluZGV4IDAyODMwNGIuLmJjOTU2MWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKQEAgLTMsMjMgKzMsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotLyogVmVyc2lvbiAwICovCi1zdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyBtYXJrOwotfTsKLQotLyogVmVyc2lvbiAxICovCi1lbnVtIHsKLQlYVF9NQVJLX1NFVD0wLAotCVhUX01BUktfQU5ELAotCVhUX01BUktfT1IsCi19OwotCi1zdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mb192MSB7Ci0JdW5zaWduZWQgbG9uZyBtYXJrOwotCV9fdTggbW9kZTsKLX07Ci0KIHN0cnVjdCB4dF9tYXJrX3RnaW5mbzIgewogCV9fdTMyIG1hcmssIG1hc2s7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmgKaW5kZXggNTcxZTI2Ni4uNjE5ZTQ3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oCkBAIC0xMiwxMSArMTIsNiBAQAogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi1zdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyBtYXJrLCBtYXNrOwotCV9fdTggaW52ZXJ0OwotfTsKLQogc3RydWN0IHh0X2Nvbm5tYXJrX210aW5mbzEgewogCV9fdTMyIG1hcmssIG1hc2s7CiAJX191OCBpbnZlcnQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCmluZGV4IDdhZTA1MzMuLjU0ZjQ3YTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCkBAIC0zMiw0MiArMzIsNiBAQAogCVhUX0NPTk5UUkFDS19ESVJFQ1RJT04gICAgPSAxIDw8IDEyLAogfTsKIAotLyogVGhpcyBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgc28gcmVtYWlucyBmcm96ZW4gaW4gdGltZS4gKi8KLXN0cnVjdCBpcF9jb25udHJhY2tfb2xkX3R1cGxlCi17Ci0Jc3RydWN0IHsKLQkJX19iZTMyIGlwOwotCQl1bmlvbiB7Ci0JCQlfX3UxNiBhbGw7Ci0JCX0gdTsKLQl9IHNyYzsKLQotCXN0cnVjdCB7Ci0JCV9fYmUzMiBpcDsKLQkJdW5pb24gewotCQkJX191MTYgYWxsOwotCQl9IHU7Ci0KLQkJLyogVGhlIHByb3RvY29sLiAqLwotCQlfX3UxNiBwcm90b251bTsKLQl9IGRzdDsKLX07Ci0KLXN0cnVjdCB4dF9jb25udHJhY2tfaW5mbwotewotCXVuc2lnbmVkIGludCBzdGF0ZW1hc2ssIHN0YXR1c21hc2s7Ci0KLQlzdHJ1Y3QgaXBfY29ubnRyYWNrX29sZF90dXBsZSB0dXBsZVtJUF9DVF9ESVJfTUFYXTsKLQlzdHJ1Y3QgaW5fYWRkciBzaXBtc2tbSVBfQ1RfRElSX01BWF0sIGRpcG1za1tJUF9DVF9ESVJfTUFYXTsKLQotCXVuc2lnbmVkIGxvbmcgZXhwaXJlc19taW4sIGV4cGlyZXNfbWF4OwotCi0JLyogRmxhZ3Mgd29yZCAqLwotCV9fdTggZmxhZ3M7Ci0JLyogSW52ZXJzZSBmbGFncyAqLwotCV9fdTggaW52ZmxhZ3M7Ci19OwotCiBzdHJ1Y3QgeHRfY29ubnRyYWNrX210aW5mbzEgewogCXVuaW9uIG5mX2luZXRfYWRkciBvcmlnc3JjX2FkZHIsIG9yaWdzcmNfbWFzazsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ2RzdF9hZGRyLCBvcmlnZHN0X21hc2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tYXJrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tYXJrLmgKaW5kZXggNmZhNDYwYS4uNjYwN2M4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaApAQCAtMywxMSArMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi1zdHJ1Y3QgeHRfbWFya19pbmZvIHsKLSAgICB1bnNpZ25lZCBsb25nIG1hcmssIG1hc2s7Ci0gICAgX191OCBpbnZlcnQ7Ci19OwotCiBzdHJ1Y3QgeHRfbWFya19tdGluZm8xIHsKIAlfX3UzMiBtYXJrLCBtYXNrOwogCV9fdTggaW52ZXJ0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmgKaW5kZXggNTkwYWMzZC4uNmZlM2U2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCkBAIC0yNjUsNyArMjY1LDcgQEAKIH0KIAogZXh0ZXJuIHN0cnVjdCB4dF90YWJsZSAqYXJwdF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJCSAgICBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IHh0X3RhYmxlICp0YWJsZSwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBhcnB0X3JlcGxhY2UgKnJlcGwpOwogZXh0ZXJuIHZvaWQgYXJwdF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBhcnB0X2RvX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRhYmxlcy5oCmluZGV4IGU0MGRkYjkuLmVhMjgxZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRhYmxlcy5oCkBAIC0zMDEsNyArMzAxLDcgQEAKICNkZWZpbmUgRUJUX0FMSUdOKHMpICgoKHMpICsgKF9fYWxpZ25vZl9fKHN0cnVjdCBlYnRfcmVwbGFjZSktMSkpICYgXAogCQkgICAgIH4oX19hbGlnbm9mX18oc3RydWN0IGVidF9yZXBsYWNlKS0xKSkKIGV4dGVybiBzdHJ1Y3QgZWJ0X3RhYmxlICplYnRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LAotCQkJCQkgICAgc3RydWN0IGVidF90YWJsZSAqdGFibGUpOworCQkJCQkgICAgY29uc3Qgc3RydWN0IGVidF90YWJsZSAqdGFibGUpOwogZXh0ZXJuIHZvaWQgZWJ0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IGVidF90YWJsZSAqdGFibGUpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBlYnRfZG9fdGFibGUodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICpza2IsCiAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L0tidWlsZCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvS2J1aWxkCmluZGV4IDNhNzEwNWIuLjQzMWI0MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvS2J1aWxkCkBAIC0xLDQ2ICsxLDE0IEBACi1oZWFkZXIteSArPSBpcHRfQ0xBU1NJRlkuaAogaGVhZGVyLXkgKz0gaXB0X0NMVVNURVJJUC5oCi1oZWFkZXIteSArPSBpcHRfQ09OTk1BUksuaAotaGVhZGVyLXkgKz0gaXB0X0RTQ1AuaAogaGVhZGVyLXkgKz0gaXB0X0VDTi5oCiBoZWFkZXIteSArPSBpcHRfTE9HLmgKLWhlYWRlci15ICs9IGlwdF9NQVJLLmgKLWhlYWRlci15ICs9IGlwdF9ORlFVRVVFLmgKIGhlYWRlci15ICs9IGlwdF9SRUpFQ1QuaAogaGVhZGVyLXkgKz0gaXB0X1NBTUUuaAotaGVhZGVyLXkgKz0gaXB0X1RDUE1TUy5oCi1oZWFkZXIteSArPSBpcHRfVE9TLmgKIGhlYWRlci15ICs9IGlwdF9UVEwuaAogaGVhZGVyLXkgKz0gaXB0X1VMT0cuaAogaGVhZGVyLXkgKz0gaXB0X2FkZHJ0eXBlLmgKIGhlYWRlci15ICs9IGlwdF9haC5oCi1oZWFkZXIteSArPSBpcHRfY29tbWVudC5oCi1oZWFkZXIteSArPSBpcHRfY29ubmJ5dGVzLmgKLWhlYWRlci15ICs9IGlwdF9jb25ubWFyay5oCi1oZWFkZXIteSArPSBpcHRfY29ubnRyYWNrLmgKLWhlYWRlci15ICs9IGlwdF9kY2NwLmgKLWhlYWRlci15ICs9IGlwdF9kc2NwLmgKIGhlYWRlci15ICs9IGlwdF9lY24uaAotaGVhZGVyLXkgKz0gaXB0X2VzcC5oCi1oZWFkZXIteSArPSBpcHRfaGFzaGxpbWl0LmgKLWhlYWRlci15ICs9IGlwdF9oZWxwZXIuaAotaGVhZGVyLXkgKz0gaXB0X2lwcmFuZ2UuaAotaGVhZGVyLXkgKz0gaXB0X2xlbmd0aC5oCi1oZWFkZXIteSArPSBpcHRfbGltaXQuaAotaGVhZGVyLXkgKz0gaXB0X21hYy5oCi1oZWFkZXIteSArPSBpcHRfbWFyay5oCi1oZWFkZXIteSArPSBpcHRfbXVsdGlwb3J0LmgKLWhlYWRlci15ICs9IGlwdF9vd25lci5oCi1oZWFkZXIteSArPSBpcHRfcGh5c2Rldi5oCi1oZWFkZXIteSArPSBpcHRfcGt0dHlwZS5oCi1oZWFkZXIteSArPSBpcHRfcG9saWN5LmgKIGhlYWRlci15ICs9IGlwdF9yZWFsbS5oCi1oZWFkZXIteSArPSBpcHRfcmVjZW50LmgKLWhlYWRlci15ICs9IGlwdF9zY3RwLmgKLWhlYWRlci15ICs9IGlwdF9zdGF0ZS5oCi1oZWFkZXIteSArPSBpcHRfc3RyaW5nLmgKLWhlYWRlci15ICs9IGlwdF90Y3Btc3MuaAotaGVhZGVyLXkgKz0gaXB0X3Rvcy5oCiBoZWFkZXIteSArPSBpcHRfdHRsLmgKIAogdW5pZmRlZi15ICs9IGlwX3F1ZXVlLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCmluZGV4IDA5MmJkNTAuLjYxZmFmYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaApAQCAtMjQ1LDcgKzI0NSw3IEBACiBleHRlcm4gdm9pZCBpcHRfaW5pdCh2b2lkKSBfX2luaXQ7CiAKIGV4dGVybiBzdHJ1Y3QgeHRfdGFibGUgKmlwdF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJCSAgIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpcHRfcmVwbGFjZSAqcmVwbCk7CiBleHRlcm4gdm9pZCBpcHRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ0xBU1NJRlkuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMQVNTSUZZLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NmQ1MTEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ0xBU1NJRlkuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfSVBUX0NMQVNTSUZZX0gKLSNkZWZpbmUgX0lQVF9DTEFTU0lGWV9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaD4KLSNkZWZpbmUgaXB0X2NsYXNzaWZ5X3RhcmdldF9pbmZvIHh0X2NsYXNzaWZ5X3RhcmdldF9pbmZvCi0KLSNlbmRpZiAvKl9JUFRfQ0xBU1NJRllfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ09OTk1BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NPTk5NQVJLLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllY2ZlZTAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ09OTk1BUksuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSNpZm5kZWYgX0lQVF9DT05OTUFSS19IX3RhcmdldAotI2RlZmluZSBfSVBUX0NPTk5NQVJLX0hfdGFyZ2V0Ci0KLS8qIENvcHlyaWdodCAoQykgMjAwMiwyMDA0IE1BUkEgU3lzdGVtcyBBQiA8aHR0cDovL3d3dy5tYXJhc3lzdGVtcy5jb20+Ci0gKiBieSBIZW5yaWsgTm9yZHN0cm9tIDxobm9AbWFyYXN5c3RlbXMuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaD4KLSNkZWZpbmUgSVBUX0NPTk5NQVJLX1NFVAlYVF9DT05OTUFSS19TRVQKLSNkZWZpbmUgSVBUX0NPTk5NQVJLX1NBVkUJWFRfQ09OTk1BUktfU0FWRQotI2RlZmluZQlJUFRfQ09OTk1BUktfUkVTVE9SRQlYVF9DT05OTUFSS19SRVNUT1JFCi0KLSNkZWZpbmUgaXB0X2Nvbm5tYXJrX3RhcmdldF9pbmZvIHh0X2Nvbm5tYXJrX3RhcmdldF9pbmZvCi0KLSNlbmRpZiAvKl9JUFRfQ09OTk1BUktfSF90YXJnZXQqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRFNDUC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRFNDUC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDkxZTUyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0RTQ1AuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qIGlwdGFibGVzIG1vZHVsZSBmb3Igc2V0dGluZyB0aGUgSVB2NCBEU0NQIGZpZWxkCi0gKgotICogKEMpIDIwMDIgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KLSAqIGJhc2VkIG9uIGlwdF9GVE9TLmMgKEMpIDIwMDAgYnkgTWF0dGhldyBHLiBNYXJzaCA8bWdtQHBha3Ryb25peC5jb20+Ci0gKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIEdOVSBHUEwgdjIsIDE5OTEKLSAqIAotICogU2VlIFJGQzI0NzQgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIERTQ1AgZmllbGQgd2l0aGluIHRoZSBJUCBIZWFkZXIuCi0gKgotICogaXB0X0RTQ1AuaCx2IDEuNyAyMDAyLzAzLzE0IDEyOjAzOjEzIGxhZm9yZ2UgRXhwCi0qLwotI2lmbmRlZiBfSVBUX0RTQ1BfVEFSR0VUX0gKLSNkZWZpbmUgX0lQVF9EU0NQX1RBUkdFVF9ICi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RzY3AuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oPgotCi0jZGVmaW5lIGlwdF9EU0NQX2luZm8geHRfRFNDUF9pbmZvCi0KLSNlbmRpZiAvKiBfSVBUX0RTQ1BfVEFSR0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0VDTi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRUNOLmgKaW5kZXggOTRlMGQ5OC4uN2NhNDU5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRUNOLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRUNOLmgKQEAgLTgsOSArOCw5IEBACiAqLwogI2lmbmRlZiBfSVBUX0VDTl9UQVJHRVRfSAogI2RlZmluZSBfSVBUX0VDTl9UQVJHRVRfSAotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9EU0NQLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X0RTQ1AuaD4KIAotI2RlZmluZSBJUFRfRUNOX0lQX01BU0sJKH5JUFRfRFNDUF9NQVNLKQorI2RlZmluZSBJUFRfRUNOX0lQX01BU0sJKH5YVF9EU0NQX01BU0spCiAKICNkZWZpbmUgSVBUX0VDTl9PUF9TRVRfSVAJMHgwMQkvKiBzZXQgRUNOIGJpdHMgb2YgSVB2NCBoZWFkZXIgKi8KICNkZWZpbmUgSVBUX0VDTl9PUF9TRVRfRUNFCTB4MTAJLyogc2V0IEVDRSBiaXQgb2YgVENQIGhlYWRlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTUFSSy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTdhNDg2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X01BUksuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSNpZm5kZWYgX0lQVF9NQVJLX0hfdGFyZ2V0Ci0jZGVmaW5lIF9JUFRfTUFSS19IX3RhcmdldAotCi0vKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3Igb2xkIHVzZXJzcGFjZSAqLwotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X01BUksuaD4KLQotLyogVmVyc2lvbiAwICovCi0jZGVmaW5lIGlwdF9tYXJrX3RhcmdldF9pbmZvIHh0X21hcmtfdGFyZ2V0X2luZm8KLQotLyogVmVyc2lvbiAxICovCi0jZGVmaW5lIElQVF9NQVJLX1NFVAlYVF9NQVJLX1NFVAotI2RlZmluZSBJUFRfTUFSS19BTkQJWFRfTUFSS19BTkQKLSNkZWZpbmUJSVBUX01BUktfT1IJWFRfTUFSS19PUgotCi0jZGVmaW5lIGlwdF9tYXJrX3RhcmdldF9pbmZvX3YxIHh0X21hcmtfdGFyZ2V0X2luZm9fdjEKLQotI2VuZGlmIC8qX0lQVF9NQVJLX0hfdGFyZ2V0Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X05GUVVFVUUuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X05GUVVFVUUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdhMmE3NS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9ORlFVRVVFLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBpcHRhYmxlcyBtb2R1bGUgZm9yIHVzaW5nIE5GUVVFVUUgbWVjaGFuaXNtCi0gKgotICogKEMpIDIwMDUgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Ci0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB1bmRlciBHTlUgR1BMIHYyLCAxOTkxCi0gKiAKLSovCi0jaWZuZGVmIF9JUFRfTkZRX1RBUkdFVF9ICi0jZGVmaW5lIF9JUFRfTkZRX1RBUkdFVF9ICi0KLS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBvbGQgdXNlcnNwYWNlICovCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X05GUVVFVUUuaD4KLQotI2RlZmluZSBpcHRfTkZRX2luZm8geHRfTkZRX2luZm8KLQotI2VuZGlmIC8qIF9JUFRfRFNDUF9UQVJHRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVENQTVNTLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UQ1BNU1MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E4NTBmOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UQ1BNU1MuaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI2lmbmRlZiBfSVBUX1RDUE1TU19ICi0jZGVmaW5lIF9JUFRfVENQTVNTX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9UQ1BNU1MuaD4KLQotI2RlZmluZSBpcHRfdGNwbXNzX2luZm8JCXh0X3RjcG1zc19pbmZvCi0jZGVmaW5lIElQVF9UQ1BNU1NfQ0xBTVBfUE1UVQlYVF9UQ1BNU1NfQ0xBTVBfUE1UVQotCi0jZW5kaWYgLypfSVBUX1RDUE1TU19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RPUy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVE9TLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiZjllMWYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVE9TLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jaWZuZGVmIF9JUFRfVE9TX0hfdGFyZ2V0Ci0jZGVmaW5lIF9JUFRfVE9TX0hfdGFyZ2V0Ci0KLSNpZm5kZWYgSVBUT1NfTk9STUFMU1ZDCi0jZGVmaW5lIElQVE9TX05PUk1BTFNWQyAwCi0jZW5kaWYKLQotc3RydWN0IGlwdF90b3NfdGFyZ2V0X2luZm8gewotCXVfaW50OF90IHRvczsKLX07Ci0KLSNlbmRpZiAvKl9JUFRfVE9TX0hfdGFyZ2V0Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2NvbW1lbnQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2NvbW1lbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUyYWZjMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb21tZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jaWZuZGVmIF9JUFRfQ09NTUVOVF9ICi0jZGVmaW5lIF9JUFRfQ09NTUVOVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfY29tbWVudC5oPgotCi0jZGVmaW5lIElQVF9NQVhfQ09NTUVOVF9MRU4gWFRfTUFYX0NPTU1FTlRfTEVOCi0KLSNkZWZpbmUgaXB0X2NvbW1lbnRfaW5mbyB4dF9jb21tZW50X2luZm8KLQotI2VuZGlmIC8qIF9JUFRfQ09NTUVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb25uYnl0ZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Nvbm5ieXRlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjNlNmVlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Nvbm5ieXRlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotI2lmbmRlZiBfSVBUX0NPTk5CWVRFU19ICi0jZGVmaW5lIF9JUFRfQ09OTkJZVEVTX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaD4KLSNkZWZpbmUgaXB0X2Nvbm5ieXRlc193aGF0IHh0X2Nvbm5ieXRlc193aGF0Ci0KLSNkZWZpbmUgSVBUX0NPTk5CWVRFU19QS1RTCVhUX0NPTk5CWVRFU19QS1RTCi0jZGVmaW5lIElQVF9DT05OQllURVNfQllURVMJWFRfQ09OTkJZVEVTX0JZVEVTCi0jZGVmaW5lIElQVF9DT05OQllURVNfQVZHUEtUCVhUX0NPTk5CWVRFU19BVkdQS1QKLQotI2RlZmluZSBpcHRfY29ubmJ5dGVzX2RpcmVjdGlvbiAJeHRfY29ubmJ5dGVzX2RpcmVjdGlvbgotI2RlZmluZSBJUFRfQ09OTkJZVEVTX0RJUl9PUklHSU5BTCAJWFRfQ09OTkJZVEVTX0RJUl9PUklHSU5BTAotI2RlZmluZSBJUFRfQ09OTkJZVEVTX0RJUl9SRVBMWSAJWFRfQ09OTkJZVEVTX0RJUl9SRVBMWQotI2RlZmluZSBJUFRfQ09OTkJZVEVTX0RJUl9CT1RICQlYVF9DT05OQllURVNfRElSX0JPVEgKLQotI2RlZmluZSBpcHRfY29ubmJ5dGVzX2luZm8geHRfY29ubmJ5dGVzX2luZm8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb25ubWFyay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29ubm1hcmsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdiYTY1Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb25ubWFyay5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9JUFRfQ09OTk1BUktfSAotI2RlZmluZSBfSVBUX0NPTk5NQVJLX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oPgotI2RlZmluZSBpcHRfY29ubm1hcmtfaW5mbyB4dF9jb25ubWFya19pbmZvCi0KLSNlbmRpZiAvKl9JUFRfQ09OTk1BUktfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb25udHJhY2suaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Nvbm50cmFjay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGU2NzYyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Nvbm50cmFjay5oCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyogSGVhZGVyIGZpbGUgZm9yIGtlcm5lbCBtb2R1bGUgdG8gbWF0Y2ggY29ubmVjdGlvbiB0cmFja2luZyBpbmZvcm1hdGlvbi4KLSAqIEdQTCAoQykgMjAwMSAgTWFyYyBCb3VjaGVyIChtYXJjQG1ic2kuY2EpLgotICovCi0KLSNpZm5kZWYgX0lQVF9DT05OVFJBQ0tfSAotI2RlZmluZSBfSVBUX0NPTk5UUkFDS19ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmg+Ci0KLSNkZWZpbmUgSVBUX0NPTk5UUkFDS19TVEFURV9CSVQoY3RpbmZvKSBYVF9DT05OVFJBQ0tfU1RBVEVfQklUKGN0aW5mbykKLSNkZWZpbmUgSVBUX0NPTk5UUkFDS19TVEFURV9JTlZBTElEIAlYVF9DT05OVFJBQ0tfU1RBVEVfSU5WQUxJRAotCi0jZGVmaW5lIElQVF9DT05OVFJBQ0tfU1RBVEVfU05BVCAJWFRfQ09OTlRSQUNLX1NUQVRFX1NOQVQKLSNkZWZpbmUgSVBUX0NPTk5UUkFDS19TVEFURV9ETkFUCVhUX0NPTk5UUkFDS19TVEFURV9ETkFUCi0jZGVmaW5lIElQVF9DT05OVFJBQ0tfU1RBVEVfVU5UUkFDS0VECVhUX0NPTk5UUkFDS19TVEFURV9VTlRSQUNLRUQKLQotLyogZmxhZ3MsIGludmZsYWdzOiAqLwotI2RlZmluZSBJUFRfQ09OTlRSQUNLX1NUQVRFCQlYVF9DT05OVFJBQ0tfU1RBVEUKLSNkZWZpbmUgSVBUX0NPTk5UUkFDS19QUk9UTwkJWFRfQ09OTlRSQUNLX1BST1RPCi0jZGVmaW5lIElQVF9DT05OVFJBQ0tfT1JJR1NSQwkJWFRfQ09OTlRSQUNLX09SSUdTUkMKLSNkZWZpbmUgSVBUX0NPTk5UUkFDS19PUklHRFNUCQlYVF9DT05OVFJBQ0tfT1JJR0RTVAotI2RlZmluZSBJUFRfQ09OTlRSQUNLX1JFUExTUkMJCVhUX0NPTk5UUkFDS19SRVBMU1JDCi0jZGVmaW5lIElQVF9DT05OVFJBQ0tfUkVQTERTVAkJWFRfQ09OTlRSQUNLX1JFUExEU1QKLSNkZWZpbmUgSVBUX0NPTk5UUkFDS19TVEFUVVMJCVhUX0NPTk5UUkFDS19TVEFUVVMKLSNkZWZpbmUgSVBUX0NPTk5UUkFDS19FWFBJUkVTCQlYVF9DT05OVFJBQ0tfRVhQSVJFUwotCi0jZGVmaW5lIGlwdF9jb25udHJhY2tfaW5mbwkJeHRfY29ubnRyYWNrX2luZm8KLSNlbmRpZiAvKl9JUFRfQ09OTlRSQUNLX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZGNjcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZGNjcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzBkMTFlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RjY3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNpZm5kZWYgX0lQVF9EQ0NQX0hfCi0jZGVmaW5lIF9JUFRfRENDUF9IXwotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaD4KLSNkZWZpbmUgSVBUX0RDQ1BfU1JDX1BPUlRTCVhUX0RDQ1BfU1JDX1BPUlRTCi0jZGVmaW5lIElQVF9EQ0NQX0RFU1RfUE9SVFMJWFRfRENDUF9ERVNUX1BPUlRTCi0jZGVmaW5lIElQVF9EQ0NQX1RZUEUJCVhUX0RDQ1BfVFlQRQotI2RlZmluZSBJUFRfRENDUF9PUFRJT04JCVhUX0RDQ1BfT1BUSU9OCi0KLSNkZWZpbmUgSVBUX0RDQ1BfVkFMSURfRkxBR1MgCVhUX0RDQ1BfVkFMSURfRkxBR1MKLQotI2RlZmluZSBpcHRfZGNjcF9pbmZvIHh0X2RjY3BfaW5mbwotCi0jZW5kaWYgLyogX0lQVF9EQ0NQX0hfICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RzY3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RzY3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI4MmNhOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9kc2NwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBpcHRhYmxlcyBtb2R1bGUgZm9yIG1hdGNoaW5nIHRoZSBJUHY0IERTQ1AgZmllbGQKLSAqCi0gKiAoQykgMjAwMiBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgotICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB1bmRlciBHTlUgR1BMIHYyLCAxOTkxCi0gKiAKLSAqIFNlZSBSRkMyNDc0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBEU0NQIGZpZWxkIHdpdGhpbiB0aGUgSVAgSGVhZGVyLgotICoKLSAqIGlwdF9kc2NwLmgsdiAxLjMgMjAwMi8wOC8wNSAxOTowMDoyMSBsYWZvcmdlIEV4cAotKi8KLSNpZm5kZWYgX0lQVF9EU0NQX0gKLSNkZWZpbmUgX0lQVF9EU0NQX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9kc2NwLmg+Ci0KLSNkZWZpbmUgSVBUX0RTQ1BfTUFTSwlYVF9EU0NQX01BU0sKLSNkZWZpbmUgSVBUX0RTQ1BfU0hJRlQJWFRfRFNDUF9TSElGVAotI2RlZmluZSBJUFRfRFNDUF9NQVgJWFRfRFNDUF9NQVgKLQotI2RlZmluZSBpcHRfZHNjcF9pbmZvCXh0X2RzY3BfaW5mbwotCi0jZW5kaWYgLyogX0lQVF9EU0NQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Vjbi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZWNuLmgKaW5kZXggMWYwZDlhNC4uOTk0NWJhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZWNuLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZWNuLmgKQEAgLTgsOSArOCw5IEBACiAqLwogI2lmbmRlZiBfSVBUX0VDTl9ICiAjZGVmaW5lIF9JUFRfRUNOX0gKLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZHNjcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9kc2NwLmg+CiAKLSNkZWZpbmUgSVBUX0VDTl9JUF9NQVNLCSh+SVBUX0RTQ1BfTUFTSykKKyNkZWZpbmUgSVBUX0VDTl9JUF9NQVNLCSh+WFRfRFNDUF9NQVNLKQogCiAjZGVmaW5lIElQVF9FQ05fT1BfTUFUQ0hfSVAJMHgwMQogI2RlZmluZSBJUFRfRUNOX09QX01BVENIX0VDRQkweDEwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9lc3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2VzcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODI5NmU3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2VzcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotI2lmbmRlZiBfSVBUX0VTUF9ICi0jZGVmaW5lIF9JUFRfRVNQX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9lc3AuaD4KLQotI2RlZmluZSBpcHRfZXNwIHh0X2VzcAotI2RlZmluZSBJUFRfRVNQX0lOVl9TUEkJCVhUX0VTUF9JTlZfU1BJCi0jZGVmaW5lIElQVF9FU1BfSU5WX01BU0sJWFRfRVNQX0lOVl9NQVNLCi0KLSNlbmRpZiAvKl9JUFRfRVNQX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGFzaGxpbWl0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oYXNobGltaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY2MjEyMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oYXNobGltaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSNpZm5kZWYgX0lQVF9IQVNITElNSVRfSAotI2RlZmluZSBfSVBUX0hBU0hMSU1JVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0Lmg+Ci0KLSNkZWZpbmUgSVBUX0hBU0hMSU1JVF9TQ0FMRQlYVF9IQVNITElNSVRfU0NBTEUKLSNkZWZpbmUgSVBUX0hBU0hMSU1JVF9IQVNIX0RJUAlYVF9IQVNITElNSVRfSEFTSF9ESVAKLSNkZWZpbmUgSVBUX0hBU0hMSU1JVF9IQVNIX0RQVAlYVF9IQVNITElNSVRfSEFTSF9EUFQKLSNkZWZpbmUgSVBUX0hBU0hMSU1JVF9IQVNIX1NJUAlYVF9IQVNITElNSVRfSEFTSF9TSVAKLSNkZWZpbmUgSVBUX0hBU0hMSU1JVF9IQVNIX1NQVAlYVF9IQVNITElNSVRfSEFTSF9TUFQKLQotI2RlZmluZSBpcHRfaGFzaGxpbWl0X2luZm8geHRfaGFzaGxpbWl0X2luZm8KLQotI2VuZGlmIC8qIF9JUFRfSEFTSExJTUlUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2hlbHBlci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGVscGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNDUyYzIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGVscGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0lQVF9IRUxQRVJfSAotI2RlZmluZSBfSVBUX0hFTFBFUl9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfaGVscGVyLmg+Ci0jZGVmaW5lIGlwdF9oZWxwZXJfaW5mbyB4dF9oZWxwZXJfaW5mbwotCi0jZW5kaWYgLyogX0lQVF9IRUxQRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaXByYW5nZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaXByYW5nZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjFhZWJkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2lwcmFuZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSNpZm5kZWYgX0lQVF9JUFJBTkdFX0gKLSNkZWZpbmUgX0lQVF9JUFJBTkdFX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuaD4KLQotc3RydWN0IGlwdF9pcHJhbmdlIHsKLQkvKiBJbmNsdXNpdmU6IG5ldHdvcmsgb3JkZXIuICovCi0JX19iZTMyIG1pbl9pcCwgbWF4X2lwOwotfTsKLQotc3RydWN0IGlwdF9pcHJhbmdlX2luZm8KLXsKLQlzdHJ1Y3QgaXB0X2lwcmFuZ2Ugc3JjOwotCXN0cnVjdCBpcHRfaXByYW5nZSBkc3Q7Ci0KLQkvKiBGbGFncyBmcm9tIGFib3ZlICovCi0JdV9pbnQ4X3QgZmxhZ3M7Ci19OwotCi0jZW5kaWYgLyogX0lQVF9JUFJBTkdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2xlbmd0aC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbGVuZ3RoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNDUyMDYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbGVuZ3RoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0lQVF9MRU5HVEhfSAotI2RlZmluZSBfSVBUX0xFTkdUSF9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmg+Ci0jZGVmaW5lIGlwdF9sZW5ndGhfaW5mbyB4dF9sZW5ndGhfaW5mbwotCi0jZW5kaWYgLypfSVBUX0xFTkdUSF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2xpbWl0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9saW1pdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmY1Y2QwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2xpbWl0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNpZm5kZWYgX0lQVF9SQVRFX0gKLSNkZWZpbmUgX0lQVF9SQVRFX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9saW1pdC5oPgotI2RlZmluZSBJUFRfTElNSVRfU0NBTEUgWFRfTElNSVRfU0NBTEUKLSNkZWZpbmUgaXB0X3JhdGVpbmZvIHh0X3JhdGVpbmZvCi0KLSNlbmRpZiAvKl9JUFRfUkFURV9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X21hYy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbWFjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODYwMDguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0lQVF9NQUNfSAotI2RlZmluZSBfSVBUX01BQ19ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfbWFjLmg+Ci0jZGVmaW5lIGlwdF9tYWNfaW5mbyB4dF9tYWNfaW5mbwotCi0jZW5kaWYgLypfSVBUX01BQ19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X21hcmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X21hcmsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZTY3Yy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tYXJrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpZm5kZWYgX0lQVF9NQVJLX0gKLSNkZWZpbmUgX0lQVF9NQVJLX0gKLQotLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIG9sZCB1c2Vyc3BhY2UgKi8KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfbWFyay5oPgotCi0jZGVmaW5lIGlwdF9tYXJrX2luZm8geHRfbWFya19pbmZvCi0KLSNlbmRpZiAvKl9JUFRfTUFSS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X211bHRpcG9ydC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbXVsdGlwb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZmU4NWUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbXVsdGlwb3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jaWZuZGVmIF9JUFRfTVVMVElQT1JUX0gKLSNkZWZpbmUgX0lQVF9NVUxUSVBPUlRfSAotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oPgotCi0jZGVmaW5lIElQVF9NVUxUSVBPUlRfU09VUkNFCQlYVF9NVUxUSVBPUlRfU09VUkNFCi0jZGVmaW5lIElQVF9NVUxUSVBPUlRfREVTVElOQVRJT04JWFRfTVVMVElQT1JUX0RFU1RJTkFUSU9OCi0jZGVmaW5lIElQVF9NVUxUSVBPUlRfRUlUSEVSCQlYVF9NVUxUSVBPUlRfRUlUSEVSCi0KLSNkZWZpbmUgSVBUX01VTFRJX1BPUlRTCQkJWFRfTVVMVElfUE9SVFMKLQotI2RlZmluZSBpcHRfbXVsdGlwb3J0CQkJeHRfbXVsdGlwb3J0Ci0jZGVmaW5lIGlwdF9tdWx0aXBvcnRfdjEJCXh0X211bHRpcG9ydF92MQotCi0jZW5kaWYgLypfSVBUX01VTFRJUE9SVF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X293bmVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzg0NDViZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI2lmbmRlZiBfSVBUX09XTkVSX0gKLSNkZWZpbmUgX0lQVF9PV05FUl9ICi0KLS8qIG1hdGNoIGFuZCBpbnZlcnQgZmxhZ3MgKi8KLSNkZWZpbmUgSVBUX09XTkVSX1VJRAkweDAxCi0jZGVmaW5lIElQVF9PV05FUl9HSUQJMHgwMgotI2RlZmluZSBJUFRfT1dORVJfUElECTB4MDQKLSNkZWZpbmUgSVBUX09XTkVSX1NJRAkweDA4Ci0jZGVmaW5lIElQVF9PV05FUl9DT01NCTB4MTAKLQotc3RydWN0IGlwdF9vd25lcl9pbmZvIHsKLSAgICBfX2tlcm5lbF91aWQzMl90IHVpZDsKLSAgICBfX2tlcm5lbF9naWQzMl90IGdpZDsKLSAgICBfX2tlcm5lbF9waWRfdCBwaWQ7Ci0gICAgX19rZXJuZWxfcGlkX3Qgc2lkOwotICAgIGNoYXIgY29tbVsxNl07Ci0gICAgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsJLyogZmxhZ3MgKi8KLX07Ci0KLSNlbmRpZiAvKl9JUFRfT1dORVJfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9waHlzZGV2LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9waHlzZGV2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MDBlNzEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcGh5c2Rldi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotI2lmbmRlZiBfSVBUX1BIWVNERVZfSAotI2RlZmluZSBfSVBUX1BIWVNERVZfSAotCi0vKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3Igb2xkIHVzZXJzcGFjZSAqLwotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaD4KLQotI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9JTgkJWFRfUEhZU0RFVl9PUF9JTgotI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9PVVQJCVhUX1BIWVNERVZfT1BfT1VUCi0jZGVmaW5lIElQVF9QSFlTREVWX09QX0JSSURHRUQJCVhUX1BIWVNERVZfT1BfQlJJREdFRAotI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9JU0lOCQlYVF9QSFlTREVWX09QX0lTSU4KLSNkZWZpbmUgSVBUX1BIWVNERVZfT1BfSVNPVVQJCVhUX1BIWVNERVZfT1BfSVNPVVQKLSNkZWZpbmUgSVBUX1BIWVNERVZfT1BfTUFTSwkJWFRfUEhZU0RFVl9PUF9NQVNLCi0KLSNkZWZpbmUgaXB0X3BoeXNkZXZfaW5mbyB4dF9waHlzZGV2X2luZm8KLQotI2VuZGlmIC8qX0lQVF9QSFlTREVWX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcGt0dHlwZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcGt0dHlwZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjFmYmM5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3BrdHR5cGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfSVBUX1BLVFRZUEVfSAotI2RlZmluZSBfSVBUX1BLVFRZUEVfSAotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3BrdHR5cGUuaD4KLSNkZWZpbmUgaXB0X3BrdHR5cGVfaW5mbyB4dF9wa3R0eXBlX2luZm8KLQotI2VuZGlmIC8qX0lQVF9QS1RUWVBFX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcG9saWN5LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9wb2xpY3kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAzN2ZiMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9wb2xpY3kuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSNpZm5kZWYgX0lQVF9QT0xJQ1lfSAotI2RlZmluZSBfSVBUX1BPTElDWV9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcG9saWN5Lmg+Ci0KLSNkZWZpbmUgSVBUX1BPTElDWV9NQVhfRUxFTQkJWFRfUE9MSUNZX01BWF9FTEVNCi0KLS8qIGlwdF9wb2xpY3lfZmxhZ3MgKi8KLSNkZWZpbmUgSVBUX1BPTElDWV9NQVRDSF9JTgkJWFRfUE9MSUNZX01BVENIX0lOCi0jZGVmaW5lIElQVF9QT0xJQ1lfTUFUQ0hfT1VUCQlYVF9QT0xJQ1lfTUFUQ0hfT1VUCi0jZGVmaW5lIElQVF9QT0xJQ1lfTUFUQ0hfTk9ORQkJWFRfUE9MSUNZX01BVENIX05PTkUKLSNkZWZpbmUgSVBUX1BPTElDWV9NQVRDSF9TVFJJQ1QJCVhUX1BPTElDWV9NQVRDSF9TVFJJQ1QKLQotLyogaXB0X3BvbGljeV9tb2RlcyAqLwotI2RlZmluZSBJUFRfUE9MSUNZX01PREVfVFJBTlNQT1JUCVhUX1BPTElDWV9NT0RFX1RSQU5TUE9SVAotI2RlZmluZSBJUFRfUE9MSUNZX01PREVfVFVOTkVMCQlYVF9QT0xJQ1lfTU9ERV9UVU5ORUwKLQotI2RlZmluZSBpcHRfcG9saWN5X3NwZWMJCQl4dF9wb2xpY3lfc3BlYwotI2RlZmluZSBpcHRfcG9saWN5X2FkZHIJCQl4dF9wb2xpY3lfYWRkcgotI2RlZmluZSBpcHRfcG9saWN5X2VsZW0JCQl4dF9wb2xpY3lfZWxlbQotI2RlZmluZSBpcHRfcG9saWN5X2luZm8JCQl4dF9wb2xpY3lfaW5mbwotCi0jZW5kaWYgLyogX0lQVF9QT0xJQ1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVjZW50LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9yZWNlbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYzNmNjYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9yZWNlbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSNpZm5kZWYgX0lQVF9SRUNFTlRfSAotI2RlZmluZSBfSVBUX1JFQ0VOVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcmVjZW50Lmg+Ci0KLSNkZWZpbmUgaXB0X3JlY2VudF9pbmZvIHh0X3JlY2VudF9tdGluZm8KLQotZW51bSB7Ci0JSVBUX1JFQ0VOVF9DSEVDSyAgICA9IFhUX1JFQ0VOVF9DSEVDSywKLQlJUFRfUkVDRU5UX1NFVCAgICAgID0gWFRfUkVDRU5UX1NFVCwKLQlJUFRfUkVDRU5UX1VQREFURSAgID0gWFRfUkVDRU5UX1VQREFURSwKLQlJUFRfUkVDRU5UX1JFTU9WRSAgID0gWFRfUkVDRU5UX1JFTU9WRSwKLQlJUFRfUkVDRU5UX1RUTCAgICAgID0gWFRfUkVDRU5UX1RUTCwKLQotCUlQVF9SRUNFTlRfU09VUkNFICAgPSBYVF9SRUNFTlRfU09VUkNFLAotCUlQVF9SRUNFTlRfREVTVCAgICAgPSBYVF9SRUNFTlRfREVTVCwKLQotCUlQVF9SRUNFTlRfTkFNRV9MRU4gPSBYVF9SRUNFTlRfTkFNRV9MRU4sCi19OwotCi0jZW5kaWYgLypfSVBUX1JFQ0VOVF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3NjdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3NjdHAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBiM2RiYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zY3RwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotI2lmbmRlZiBfSVBUX1NDVFBfSF8KLSNkZWZpbmUgX0lQVF9TQ1RQX0hfCi0KLSNkZWZpbmUgSVBUX1NDVFBfU1JDX1BPUlRTCSAgICAgICAgMHgwMQotI2RlZmluZSBJUFRfU0NUUF9ERVNUX1BPUlRTCSAgICAgICAgMHgwMgotI2RlZmluZSBJUFRfU0NUUF9DSFVOS19UWVBFUwkJMHgwNAotCi0jZGVmaW5lIElQVF9TQ1RQX1ZBTElEX0ZMQUdTCQkweDA3Ci0KLQotc3RydWN0IGlwdF9zY3RwX2ZsYWdfaW5mbyB7Ci0JdV9pbnQ4X3QgY2h1bmt0eXBlOwotCXVfaW50OF90IGZsYWc7Ci0JdV9pbnQ4X3QgZmxhZ19tYXNrOwotfTsKLQotI2RlZmluZSBJUFRfTlVNX1NDVFBfRkxBR1MJNAotCi1zdHJ1Y3QgaXB0X3NjdHBfaW5mbyB7Ci0JdV9pbnQxNl90IGRwdHNbMl07ICAvKiBNaW4sIE1heCAqLwotCXVfaW50MTZfdCBzcHRzWzJdOyAgLyogTWluLCBNYXggKi8KLQotCXVfaW50MzJfdCBjaHVua21hcFsyNTYgLyBzaXplb2YgKHVfaW50MzJfdCldOyAgLyogQml0IG1hc2sgb2YgY2h1bmtzIHRvIGJlIG1hdGNoZWQgYWNjb3JkaW5nIHRvIFJGQyAyOTYwICovCi0KLSNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9BTlkgICAweDAxICAvKiBNYXRjaCBpZiBhbnkgb2YgdGhlIGNodW5rIHR5cGVzIGFyZSBwcmVzZW50ICovCi0jZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQUxMICAgMHgwMiAgLyogTWF0Y2ggaWYgYWxsIG9mIHRoZSBjaHVuayB0eXBlcyBhcmUgcHJlc2VudCAqLwotI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX09OTFkgIDB4MDQgIC8qIE1hdGNoIGlmIHRoZXNlIGFyZSB0aGUgb25seSBjaHVuayB0eXBlcyBwcmVzZW50ICovCi0KLQl1X2ludDMyX3QgY2h1bmtfbWF0Y2hfdHlwZTsKLQlzdHJ1Y3QgaXB0X3NjdHBfZmxhZ19pbmZvIGZsYWdfaW5mb1tJUFRfTlVNX1NDVFBfRkxBR1NdOwotCWludCBmbGFnX2NvdW50OwotCi0JdV9pbnQzMl90IGZsYWdzOwotCXVfaW50MzJfdCBpbnZmbGFnczsKLX07Ci0KLSNkZWZpbmUgYnl0ZXModHlwZSkgKHNpemVvZih0eXBlKSAqIDgpCi0KLSNkZWZpbmUgU0NUUF9DSFVOS01BUF9TRVQoY2h1bmttYXAsIHR5cGUpIAkJXAotCWRvIHsgCQkJCQkJXAotCQljaHVua21hcFt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gfD0gCVwKLQkJCTEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKTsJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9DSFVOS01BUF9DTEVBUihjaHVua21hcCwgdHlwZSkJCSAJXAotCWRvIHsJCQkJCQkJXAotCQljaHVua21hcFt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gJj0gCQlcCi0JCQl+KDEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKSk7CVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfU0VUKGNodW5rbWFwLCB0eXBlKSAJCQlcCi0oewkJCQkJCQkJXAotCShjaHVua21hcFt0eXBlIC8gYnl0ZXMgKHVfaW50MzJfdCldICYgCQkJXAotCQkoMSA8PCAodHlwZSAlIGJ5dGVzICh1X2ludDMyX3QpKSkpID8gMTogMDsJXAotfSkKLQotI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1JFU0VUKGNodW5rbWFwKSAJCQkJXAotCWRvIHsJCQkJCQkJXAotCQlpbnQgaTsgCQkJCQkJXAotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaHVua21hcCk7IGkrKykJXAotCQkJY2h1bmttYXBbaV0gPSAwOwkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfQ0hVTktNQVBfU0VUX0FMTChjaHVua21hcCkgCQkJXAotCWRvIHsJCQkJCQkJXAotCQlpbnQgaTsgCQkJCQkJXAotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaHVua21hcCk7IGkrKykJXAotCQkJY2h1bmttYXBbaV0gPSB+MDsJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0NPUFkoZGVzdG1hcCwgc3JjbWFwKSAJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWludCBpOyAJCQkJCQlcCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKQlcCi0JCQlkZXN0bWFwW2ldID0gc3JjbWFwW2ldOwkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQ0xFQVIoY2h1bmttYXApIAkJXAotKHsJCQkJCQkJXAotCWludCBpOyAJCQkJCQlcCi0JaW50IGZsYWcgPSAxOwkJCQkJXAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKSB7CVwKLQkJaWYgKGNodW5rbWFwW2ldKSB7CQkJXAotCQkJZmxhZyA9IDA7CQkJXAotCQkJYnJlYWs7CQkJCVwKLQkJfQkJCQkJXAotCX0JCQkJCQlcCi0gICAgICAgIGZsYWc7CQkJCQkJXAotfSkKLQotI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX0FMTF9TRVQoY2h1bmttYXApIAkJXAotKHsJCQkJCQkJXAotCWludCBpOyAJCQkJCQlcCi0JaW50IGZsYWcgPSAxOwkJCQkJXAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKSB7CVwKLQkJaWYgKGNodW5rbWFwW2ldICE9IH4wKSB7CQlcCi0JCQlmbGFnID0gMDsJCQlcCi0JCQkJYnJlYWs7CQkJXAotCQl9CQkJCQlcCi0JfQkJCQkJCVwKLSAgICAgICAgZmxhZzsJCQkJCQlcCi19KQotCi0jZW5kaWYgLyogX0lQVF9TQ1RQX0hfICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3N0YXRlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zdGF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDRhOTljLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3N0YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jaWZuZGVmIF9JUFRfU1RBVEVfSAotI2RlZmluZSBfSVBUX1NUQVRFX0gKLQotLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIG9sZCB1c2Vyc3BhY2UgKi8KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9zdGF0ZS5oPgotCi0jZGVmaW5lIElQVF9TVEFURV9CSVQJCVhUX1NUQVRFX0JJVAotI2RlZmluZSBJUFRfU1RBVEVfSU5WQUxJRAlYVF9TVEFURV9JTlZBTElECi0KLSNkZWZpbmUgSVBUX1NUQVRFX1VOVFJBQ0tFRAlYVF9TVEFURV9VTlRSQUNLRUQKLQotI2RlZmluZSBpcHRfc3RhdGVfaW5mbwkJeHRfc3RhdGVfaW5mbwotCi0jZW5kaWYgLypfSVBUX1NUQVRFX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zdHJpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI2ZGUzMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zdHJpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSNpZm5kZWYgX0lQVF9TVFJJTkdfSAotI2RlZmluZSBfSVBUX1NUUklOR19ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfc3RyaW5nLmg+Ci0KLSNkZWZpbmUgSVBUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFIFhUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFCi0jZGVmaW5lIElQVF9TVFJJTkdfTUFYX0FMR09fTkFNRV9TSVpFIFhUX1NUUklOR19NQVhfQUxHT19OQU1FX1NJWkUKLSNkZWZpbmUgaXB0X3N0cmluZ19pbmZvIHh0X3N0cmluZ19pbmZvCi0KLSNlbmRpZiAvKl9JUFRfU1RSSU5HX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdGNwbXNzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90Y3Btc3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThiYmM4ZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90Y3Btc3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfSVBUX1RDUE1TU19NQVRDSF9ICi0jZGVmaW5lIF9JUFRfVENQTVNTX01BVENIX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF90Y3Btc3MuaD4KLSNkZWZpbmUgaXB0X3RjcG1zc19tYXRjaF9pbmZvIHh0X3RjcG1zc19tYXRjaF9pbmZvCi0KLSNlbmRpZiAvKl9JUFRfVENQTVNTX01BVENIX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdG9zLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90b3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIxZjVkZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90b3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSNpZm5kZWYgX0lQVF9UT1NfSAotI2RlZmluZSBfSVBUX1RPU19ICi0KLXN0cnVjdCBpcHRfdG9zX2luZm8gewotICAgIHVfaW50OF90IHRvczsKLSAgICB1X2ludDhfdCBpbnZlcnQ7Ci19OwotCi0jaWZuZGVmIElQVE9TX05PUk1BTFNWQwotI2RlZmluZSBJUFRPU19OT1JNQUxTVkMgMAotI2VuZGlmCi0KLSNlbmRpZiAvKl9JUFRfVE9TX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZAppbmRleCBhY2E0YmQxLi5lODY0ZWFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZApAQCAtMSwyMiArMSwxMiBAQAogaGVhZGVyLXkgKz0gaXA2dF9ITC5oCiBoZWFkZXIteSArPSBpcDZ0X0xPRy5oCi1oZWFkZXIteSArPSBpcDZ0X01BUksuaAogaGVhZGVyLXkgKz0gaXA2dF9SRUpFQ1QuaAogaGVhZGVyLXkgKz0gaXA2dF9haC5oCi1oZWFkZXIteSArPSBpcDZ0X2VzcC5oCiBoZWFkZXIteSArPSBpcDZ0X2ZyYWcuaAotaGVhZGVyLXkgKz0gaXA2dF9obC5oCiBoZWFkZXIteSArPSBpcDZ0X2lwdjZoZWFkZXIuaAotaGVhZGVyLXkgKz0gaXA2dF9sZW5ndGguaAotaGVhZGVyLXkgKz0gaXA2dF9saW1pdC5oCi1oZWFkZXIteSArPSBpcDZ0X21hYy5oCi1oZWFkZXIteSArPSBpcDZ0X21hcmsuaAoraGVhZGVyLXkgKz0gaXA2dF9obC5oCiBoZWFkZXIteSArPSBpcDZ0X21oLmgKLWhlYWRlci15ICs9IGlwNnRfbXVsdGlwb3J0LmgKIGhlYWRlci15ICs9IGlwNnRfb3B0cy5oCi1oZWFkZXIteSArPSBpcDZ0X293bmVyLmgKLWhlYWRlci15ICs9IGlwNnRfcGh5c2Rldi5oCi1oZWFkZXIteSArPSBpcDZ0X3BvbGljeS5oCiBoZWFkZXIteSArPSBpcDZ0X3J0LmgKIAogdW5pZmRlZi15ICs9IGlwNl90YWJsZXMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaAppbmRleCAxMDg5ZTMzLi5hNjRlMTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaApAQCAtMzA2LDcgKzMwNiw3IEBACiBleHRlcm4gdm9pZCBpcDZ0X2luaXQodm9pZCkgX19pbml0OwogCiBleHRlcm4gc3RydWN0IHh0X3RhYmxlICppcDZ0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkJICAgIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAogCQkJCQkgICAgY29uc3Qgc3RydWN0IGlwNnRfcmVwbGFjZSAqcmVwbCk7CiBleHRlcm4gdm9pZCBpcDZ0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IHh0X3RhYmxlICp0YWJsZSk7CiBleHRlcm4gdW5zaWduZWQgaW50IGlwNnRfZG9fdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9NQVJLLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTUFSSy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2Y2MjlhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9NQVJLLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpZm5kZWYgX0lQNlRfTUFSS19IX3RhcmdldAotI2RlZmluZSBfSVA2VF9NQVJLX0hfdGFyZ2V0Ci0KLS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBvbGQgdXNlcnNwYWNlICovCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X01BUksuaD4KLQotI2RlZmluZSBpcDZ0X21hcmtfdGFyZ2V0X2luZm8geHRfbWFya190YXJnZXRfaW5mbwotCi0jZW5kaWYgLypfSVA2VF9NQVJLX0hfdGFyZ2V0Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyZWFmNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZXNwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jaWZuZGVmIF9JUDZUX0VTUF9ICi0jZGVmaW5lIF9JUDZUX0VTUF9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfZXNwLmg+Ci0KLSNkZWZpbmUgaXA2dF9lc3AgeHRfZXNwCi0jZGVmaW5lIElQNlRfRVNQX0lOVl9TUEkJWFRfRVNQX0lOVl9TUEkKLSNkZWZpbmUgSVA2VF9FU1BfSU5WX01BU0sJWFRfRVNQX0lOVl9NQVNLCi0KLSNlbmRpZiAvKl9JUDZUX0VTUF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9sZW5ndGguaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9sZW5ndGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU5Njg5ZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbGVuZ3RoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNpZm5kZWYgX0lQNlRfTEVOR1RIX0gKLSNkZWZpbmUgX0lQNlRfTEVOR1RIX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaD4KLSNkZWZpbmUgaXA2dF9sZW5ndGhfaW5mbyB4dF9sZW5ndGhfaW5mbwotCi0jZW5kaWYgLypfSVA2VF9MRU5HVEhfSCovCi0JCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbGltaXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9saW1pdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODdlNWVhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9saW1pdC5oCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jaWZuZGVmIF9JUDZUX1JBVEVfSAotI2RlZmluZSBfSVA2VF9SQVRFX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9saW1pdC5oPgotI2RlZmluZSBJUDZUX0xJTUlUX1NDQUxFIFhUX0xJTUlUX1NDQUxFCi0jZGVmaW5lIGlwNnRfcmF0ZWluZm8geHRfcmF0ZWluZm8KLQotI2VuZGlmIC8qX0lQNlRfUkFURV9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9tYWMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9tYWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM1OGU4My4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0lQNlRfTUFDX0gKLSNkZWZpbmUgX0lQNlRfTUFDX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9tYWMuaD4KLSNkZWZpbmUgaXA2dF9tYWNfaW5mbyB4dF9tYWNfaW5mbwotCi0jZW5kaWYgLypfSVA2VF9NQUNfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbWFyay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X21hcmsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYyMDQ5NS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbWFyay5oCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jaWZuZGVmIF9JUDZUX01BUktfSAotI2RlZmluZSBfSVA2VF9NQVJLX0gKLQotLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIG9sZCB1c2Vyc3BhY2UgKi8KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfbWFyay5oPgotCi0jZGVmaW5lIGlwNnRfbWFya19pbmZvIHh0X21hcmtfaW5mbwotCi0jZW5kaWYgLypfSVBUX01BUktfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbXVsdGlwb3J0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbXVsdGlwb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MmM5MjYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X211bHRpcG9ydC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2lmbmRlZiBfSVA2VF9NVUxUSVBPUlRfSAotI2RlZmluZSBfSVA2VF9NVUxUSVBPUlRfSAotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oPgotCi0jZGVmaW5lIElQNlRfTVVMVElQT1JUX1NPVVJDRQkJWFRfTVVMVElQT1JUX1NPVVJDRQotI2RlZmluZSBJUDZUX01VTFRJUE9SVF9ERVNUSU5BVElPTglYVF9NVUxUSVBPUlRfREVTVElOQVRJT04KLSNkZWZpbmUgSVA2VF9NVUxUSVBPUlRfRUlUSEVSCQlYVF9NVUxUSVBPUlRfRUlUSEVSCi0KLSNkZWZpbmUgSVA2VF9NVUxUSV9QT1JUUwkJWFRfTVVMVElfUE9SVFMKLQotI2RlZmluZSBpcDZ0X211bHRpcG9ydAkJCXh0X211bHRpcG9ydAotCi0jZW5kaWYgLypfSVA2VF9NVUxUSVBPUlRfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzVjYzdhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotI2lmbmRlZiBfSVA2VF9PV05FUl9ICi0jZGVmaW5lIF9JUDZUX09XTkVSX0gKLQotLyogbWF0Y2ggYW5kIGludmVydCBmbGFncyAqLwotI2RlZmluZSBJUDZUX09XTkVSX1VJRAkweDAxCi0jZGVmaW5lIElQNlRfT1dORVJfR0lECTB4MDIKLSNkZWZpbmUgSVA2VF9PV05FUl9QSUQJMHgwNAotI2RlZmluZSBJUDZUX09XTkVSX1NJRAkweDA4Ci0KLXN0cnVjdCBpcDZ0X293bmVyX2luZm8gewotICAgIF9fa2VybmVsX3VpZDMyX3QgdWlkOwotICAgIF9fa2VybmVsX2dpZDMyX3QgZ2lkOwotICAgIF9fa2VybmVsX3BpZF90IHBpZDsKLSAgICBfX2tlcm5lbF9waWRfdCBzaWQ7Ci0gICAgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsJLyogZmxhZ3MgKi8KLX07Ci0KLSNlbmRpZiAvKl9JUFRfT1dORVJfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcGh5c2Rldi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X3BoeXNkZXYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE2MWMwYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcGh5c2Rldi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotI2lmbmRlZiBfSVA2VF9QSFlTREVWX0gKLSNkZWZpbmUgX0lQNlRfUEhZU0RFVl9ICi0KLS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBvbGQgdXNlcnNwYWNlICovCi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oPgotCi0jZGVmaW5lIElQNlRfUEhZU0RFVl9PUF9JTgkJWFRfUEhZU0RFVl9PUF9JTgotI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfT1VUCQlYVF9QSFlTREVWX09QX09VVAotI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfQlJJREdFRAkJWFRfUEhZU0RFVl9PUF9CUklER0VECi0jZGVmaW5lIElQNlRfUEhZU0RFVl9PUF9JU0lOCQlYVF9QSFlTREVWX09QX0lTSU4KLSNkZWZpbmUgSVA2VF9QSFlTREVWX09QX0lTT1VUCQlYVF9QSFlTREVWX09QX0lTT1VUCi0jZGVmaW5lIElQNlRfUEhZU0RFVl9PUF9NQVNLCQlYVF9QSFlTREVWX09QX01BU0sKLQotI2RlZmluZSBpcDZ0X3BoeXNkZXZfaW5mbyB4dF9waHlzZGV2X2luZm8KLQotI2VuZGlmIC8qX0lQNlRfUEhZU0RFVl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9wb2xpY3kuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9wb2xpY3kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjNDQ5ZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcG9saWN5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jaWZuZGVmIF9JUDZUX1BPTElDWV9ICi0jZGVmaW5lIF9JUDZUX1BPTElDWV9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcG9saWN5Lmg+Ci0KLSNkZWZpbmUgSVA2VF9QT0xJQ1lfTUFYX0VMRU0JCVhUX1BPTElDWV9NQVhfRUxFTQotCi0vKiBpcDZ0X3BvbGljeV9mbGFncyAqLwotI2RlZmluZSBJUDZUX1BPTElDWV9NQVRDSF9JTgkJWFRfUE9MSUNZX01BVENIX0lOCi0jZGVmaW5lIElQNlRfUE9MSUNZX01BVENIX09VVAkJWFRfUE9MSUNZX01BVENIX09VVAotI2RlZmluZSBJUDZUX1BPTElDWV9NQVRDSF9OT05FCQlYVF9QT0xJQ1lfTUFUQ0hfTk9ORQotI2RlZmluZSBJUDZUX1BPTElDWV9NQVRDSF9TVFJJQ1QJWFRfUE9MSUNZX01BVENIX1NUUklDVAotCi0vKiBpcDZ0X3BvbGljeV9tb2RlcyAqLwotI2RlZmluZSBJUDZUX1BPTElDWV9NT0RFX1RSQU5TUE9SVAlYVF9QT0xJQ1lfTU9ERV9UUkFOU1BPUlQKLSNkZWZpbmUgSVA2VF9QT0xJQ1lfTU9ERV9UVU5ORUwJCVhUX1BPTElDWV9NT0RFX1RVTk5FTAotCi0jZGVmaW5lIGlwNnRfcG9saWN5X3NwZWMJCXh0X3BvbGljeV9zcGVjCi0jZGVmaW5lIGlwNnRfcG9saWN5X2FkZHIJCXh0X3BvbGljeV9hZGRyCi0jZGVmaW5lIGlwNnRfcG9saWN5X2VsZW0JCXh0X3BvbGljeV9lbGVtCi0jZGVmaW5lIGlwNnRfcG9saWN5X2luZm8JCXh0X3BvbGljeV9pbmZvCi0KLSNlbmRpZiAvKiBfSVA2VF9QT0xJQ1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAppbmRleCA1YmEzOThlLi4wZmJlY2JiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaApAQCAtMjE3LDEyICsyMTcsMTMgQEAKIAogc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sKIHsKLQlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOwotCXN0cnVjdCBubG1zZ2hkcgkqbmxoOwotCWludAkJKCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKLQlpbnQJCSgqZG9uZSkoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKLQlpbnQJCWZhbWlseTsKLQlsb25nCQlhcmdzWzZdOworCXN0cnVjdCBza19idWZmCQkqc2tiOworCWNvbnN0IHN0cnVjdCBubG1zZ2hkcgkqbmxoOworCWludAkJCSgqZHVtcCkoc3RydWN0IHNrX2J1ZmYgKiBza2IsCisJCQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CisJaW50CQkJKCpkb25lKShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOworCWludAkJCWZhbWlseTsKKwlsb25nCQkJYXJnc1s2XTsKIH07CiAKIHN0cnVjdCBuZXRsaW5rX25vdGlmeQpAQCAtMjU4LDcgKzI1OSw3IEBACiAJTkxNU0dfTkVXKHNrYiwgcGlkLCBzZXEsIHR5cGUsIGxlbiwgMCkKIAogZXh0ZXJuIGludCBuZXRsaW5rX2R1bXBfc3RhcnQoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQkgICAgICBpbnQgKCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayopLAogCQkJICAgICAgaW50ICgqZG9uZSkoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sqKSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzNC5oIGIvaW5jbHVkZS9saW51eC9uZnM0LmgKaW5kZXggYmQyZWJhNS4uMzNiMjgzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnM0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnM0LmgKQEAgLTQ3Miw2ICs0NzIsNyBAQAogCiAjZGVmaW5lIE5GU1BST0M0X05VTEwgMAogI2RlZmluZSBORlNQUk9DNF9DT01QT1VORCAxCisjZGVmaW5lIE5GUzRfVkVSU0lPTiA0CiAjZGVmaW5lIE5GUzRfTUlOT1JfVkVSU0lPTiAwCiAKICNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCmluZGV4IDE5ZmUxNWQuLjMyMDU2OWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaApAQCAtMTY3LDYgKzE2NywxNSBAQAogI2RlZmluZSBORlNfQ0FQX1NZTUxJTktTCSgxVSA8PCAyKQogI2RlZmluZSBORlNfQ0FQX0FDTFMJCSgxVSA8PCAzKQogI2RlZmluZSBORlNfQ0FQX0FUT01JQ19PUEVOCSgxVSA8PCA0KQorI2RlZmluZSBORlNfQ0FQX0NIQU5HRV9BVFRSCSgxVSA8PCA1KQorI2RlZmluZSBORlNfQ0FQX0ZJTEVJRAkJKDFVIDw8IDYpCisjZGVmaW5lIE5GU19DQVBfTU9ERQkJKDFVIDw8IDcpCisjZGVmaW5lIE5GU19DQVBfTkxJTksJCSgxVSA8PCA4KQorI2RlZmluZSBORlNfQ0FQX09XTkVSCQkoMVUgPDwgOSkKKyNkZWZpbmUgTkZTX0NBUF9PV05FUl9HUk9VUAkoMVUgPDwgMTApCisjZGVmaW5lIE5GU19DQVBfQVRJTUUJCSgxVSA8PCAxMSkKKyNkZWZpbmUgTkZTX0NBUF9DVElNRQkJKDFVIDw8IDEyKQorI2RlZmluZSBORlNfQ0FQX01USU1FCQkoMVUgPDwgMTMpCiAKIAogLyogbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgdG8gdXNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCmluZGV4IGRiZWE5M2IuLmE4ZDcxZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCkBAIC0yNDIsNiArMjQyLDI5IEBACiAgKiBATkw4MDIxMV9DTURfTEVBVkVfSUJTUzogTGVhdmUgdGhlIElCU1MgLS0gbm8gc3BlY2lhbCBhcmd1bWVudHMsIHRoZSBJQlNTIGlzCiAgKglkZXRlcm1pbmVkIGJ5IHRoZSBuZXR3b3JrIGludGVyZmFjZS4KICAqCisgKiBATkw4MDIxMV9DTURfVEVTVE1PREU6IHRlc3Rtb2RlIGNvbW1hbmQsIHRha2VzIGEgd2lwaHkgKG9yIGlmaW5kZXgpIGF0dHJpYnV0ZQorICoJdG8gaWRlbnRpZnkgdGhlIGRldmljZSwgYW5kIHRoZSBURVNUREFUQSBibG9iIGF0dHJpYnV0ZSB0byBwYXNzIHRocm91Z2gKKyAqCXRvIHRoZSBkcml2ZXIuCisgKgorICogQE5MODAyMTFfQ01EX0NPTk5FQ1Q6IGNvbm5lY3Rpb24gcmVxdWVzdCBhbmQgbm90aWZpY2F0aW9uOyB0aGlzIGNvbW1hbmQKKyAqCXJlcXVlc3RzIHRvIGNvbm5lY3QgdG8gYSBzcGVjaWZpZWQgbmV0d29yayBidXQgd2l0aG91dCBzZXBhcmF0aW5nCisgKglhdXRoIGFuZCBhc3NvYyBzdGVwcy4gRm9yIHRoaXMsIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIFNTSUQgaW4gYQorICoJJU5MODAyMTFfQVRUUl9TU0lEIGF0dHJpYnV0ZSwgYW5kIGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgdGhlIGFzc29jaWF0aW9uCisgKglJRXMgaW4gJU5MODAyMTFfQVRUUl9JRSwgJU5MODAyMTFfQVRUUl9BVVRIX1RZUEUsICVOTDgwMjExX0FUVFJfTUFDLAorICoJJU5MODAyMTFfQVRUUl9XSVBIWV9GUkVRIGFuZCAlTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVC4KKyAqCUl0IGlzIGFsc28gc2VudCBhcyBhbiBldmVudCwgd2l0aCB0aGUgQlNTSUQgYW5kIHJlc3BvbnNlIElFcyB3aGVuIHRoZQorICoJY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBvciBmYWlsZWQgdG8gYmUgZXN0YWJsaXNoZWQuIFRoaXMgY2FuIGJlCisgKglkZXRlcm1pbmVkIGJ5IHRoZSBTVEFUVVNfQ09ERSBhdHRyaWJ1dGUuCisgKiBATkw4MDIxMV9DTURfUk9BTTogcmVxdWVzdCB0aGF0IHRoZSBjYXJkIHJvYW0gKGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQpLAorICoJc2VudCBhcyBhbiBldmVudCB3aGVuIHRoZSBjYXJkL2RyaXZlciByb2FtZWQgYnkgaXRzZWxmLgorICogQE5MODAyMTFfQ01EX0RJU0NPTk5FQ1Q6IGRyb3AgYSBnaXZlbiBjb25uZWN0aW9uOyBhbHNvIHVzZWQgdG8gbm90aWZ5CisgKgl1c2Vyc3BhY2UgdGhhdCBhIGNvbm5lY3Rpb24gd2FzIGRyb3BwZWQgYnkgdGhlIEFQIG9yIGR1ZSB0byBvdGhlcgorICoJcmVhc29ucywgZm9yIHRoaXMgdGhlICVOTDgwMjExX0FUVFJfRElTQ09OTkVDVEVEX0JZX0FQIGFuZAorICoJJU5MODAyMTFfQVRUUl9SRUFTT05fQ09ERSBhdHRyaWJ1dGVzIGFyZSB1c2VkLgorICoKKyAqIEBOTDgwMjExX0NNRF9TRVRfV0lQSFlfTkVUTlM6IFNldCBhIHdpcGh5J3MgbmV0bnMuIE5vdGUgdGhhdCBhbGwgZGV2aWNlcworICoJYXNzb2NpYXRlZCB3aXRoIHRoaXMgd2lwaHkgbXVzdCBiZSBkb3duIGFuZCB3aWxsIGZvbGxvdy4KKyAqCiAgKiBATkw4MDIxMV9DTURfTUFYOiBoaWdoZXN0IHVzZWQgY29tbWFuZCBudW1iZXIKICAqIEBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC0zMTAsNiArMzMzLDE0IEBACiAJTkw4MDIxMV9DTURfSk9JTl9JQlNTLAogCU5MODAyMTFfQ01EX0xFQVZFX0lCU1MsCiAKKwlOTDgwMjExX0NNRF9URVNUTU9ERSwKKworCU5MODAyMTFfQ01EX0NPTk5FQ1QsCisJTkw4MDIxMV9DTURfUk9BTSwKKwlOTDgwMjExX0NNRF9ESVNDT05ORUNULAorCisJTkw4MDIxMV9DTURfU0VUX1dJUEhZX05FVE5TLAorCiAJLyogYWRkIG5ldyBjb21tYW5kcyBhYm92ZSBoZXJlICovCiAKIAkvKiB1c2VkIHRvIGRlZmluZSBOTDgwMjExX0NNRF9NQVggYmVsb3cgKi8KQEAgLTQ0OSwxMCArNDgwLDYgQEAKICAqIEBOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFUzogbmVzdGVkIGF0dHJpYnV0ZSB3aXRoIGZyZXF1ZW5jaWVzIChpbiBNSHopCiAgKiBATkw4MDIxMV9BVFRSX1NDQU5fU1NJRFM6IG5lc3RlZCBhdHRyaWJ1dGUgd2l0aCBTU0lEcywgbGVhdmUgb3V0IGZvciBwYXNzaXZlCiAgKglzY2FubmluZyBhbmQgaW5jbHVkZSBhIHplcm8tbGVuZ3RoIFNTSUQgKHdpbGRjYXJkKSBmb3Igd2lsZGNhcmQgc2NhbgotICogQE5MODAyMTFfQVRUUl9TQ0FOX0dFTkVSQVRJT046IHRoZSBzY2FuIGdlbmVyYXRpb24gaW5jcmVhc2VzIHdoZW5ldmVyIHRoZQotICoJc2NhbiByZXN1bHQgbGlzdCBjaGFuZ2VzIChCU1MgZXhwaXJlZCBvciBhZGRlZCkgc28gdGhhdCBhcHBsaWNhdGlvbnMKLSAqCWNhbiB2ZXJpZnkgdGhhdCB0aGV5IGdvdCBhIHNpbmdsZSwgY29uc2lzdGVudCBzbmFwc2hvdCAod2hlbiBhbGwgZHVtcAotICoJbWVzc2FnZXMgY2FycmllZCB0aGUgc2FtZSBnZW5lcmF0aW9uIG51bWJlcikKICAqIEBOTDgwMjExX0FUVFJfQlNTOiBzY2FuIHJlc3VsdCBCU1MKICAqCiAgKiBATkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1I6IGluZGljYXRlcyB3aG8gcmVxdWVzdGVkIHRoZSByZWd1bGF0b3J5IGRvbWFpbgpAQCAtNTExLDYgKzUzOCw1MiBAQAogICoJYXV0aG9yaXplZCBieSB1c2VyIHNwYWNlLiBPdGhlcndpc2UsIHBvcnQgaXMgbWFya2VkIGF1dGhvcml6ZWQgYnkKICAqCWRlZmF1bHQgaW4gc3RhdGlvbiBtb2RlLgogICoKKyAqIEBOTDgwMjExX0FUVFJfVEVTVERBVEE6IFRlc3Rtb2RlIGRhdGEgYmxvYiwgcGFzc2VkIHRocm91Z2ggdG8gdGhlIGRyaXZlci4KKyAqCVdlIHJlY29tbWVuZCB1c2luZyBuZXN0ZWQsIGRyaXZlci1zcGVjaWZpYyBhdHRyaWJ1dGVzIHdpdGhpbiB0aGlzLgorICoKKyAqIEBOTDgwMjExX0FUVFJfRElTQ09OTkVDVEVEX0JZX0FQOiBBIGZsYWcgaW5kaWNhdGluZyB0aGF0IHRoZSBESVNDT05ORUNUCisgKglldmVudCB3YXMgZHVlIHRvIHRoZSBBUCBkaXNjb25uZWN0aW5nIHRoZSBzdGF0aW9uLCBhbmQgbm90IGR1ZSB0bworICoJYSBsb2NhbCBkaXNjb25uZWN0IHJlcXVlc3QuCisgKiBATkw4MDIxMV9BVFRSX1NUQVRVU19DT0RFOiBTdGF0dXNDb2RlIGZvciB0aGUgJU5MODAyMTFfQ01EX0NPTk5FQ1QKKyAqCWV2ZW50ICh1MTYpCisgKiBATkw4MDIxMV9BVFRSX1BSSVZBQ1k6IEZsYWcgYXR0cmlidXRlLCB1c2VkIHdpdGggY29ubmVjdCgpLCBpbmRpY2F0aW5nCisgKgl0aGF0IHByb3RlY3RlZCBBUHMgc2hvdWxkIGJlIHVzZWQuCisgKgorICogQE5MODAyMTFfQVRUUl9DSVBIRVJTX1BBSVJXSVNFOiBVc2VkIHdpdGggQ09OTkVDVCBhbmQgQVNTT0NJQVRFIHRvCisgKglpbmRpY2F0ZSB3aGljaCB1bmljYXN0IGtleSBjaXBoZXJzIHdpbGwgYmUgdXNlZCB3aXRoIHRoZSBjb25uZWN0aW9uCisgKgkoYW4gYXJyYXkgb2YgdTMyKS4KKyAqIEBOTDgwMjExX0FUVFJfQ0lQSEVSX0dST1VQOiBVc2VkIHdpdGggQ09OTkVDVCBhbmQgQVNTT0NJQVRFIHRvIGluZGljYXRlCisgKgl3aGljaCBncm91cCBrZXkgY2lwaGVyIHdpbGwgYmUgdXNlZCB3aXRoIHRoZSBjb25uZWN0aW9uIChhIHUzMikuCisgKiBATkw4MDIxMV9BVFRSX1dQQV9WRVJTSU9OUzogVXNlZCB3aXRoIENPTk5FQ1QgYW5kIEFTU09DSUFURSB0byBpbmRpY2F0ZQorICoJd2hpY2ggV1BBIHZlcnNpb24ocykgdGhlIEFQIHdlIHdhbnQgdG8gYXNzb2NpYXRlIHdpdGggaXMgdXNpbmcKKyAqCShhIHUzMiB3aXRoIGZsYWdzIGZyb20gJmVudW0gbmw4MDIxMV93cGFfdmVyc2lvbnMpLgorICogQE5MODAyMTFfQVRUUl9BS01fU1VJVEVTOiBVc2VkIHdpdGggQ09OTkVDVCBhbmQgQVNTT0NJQVRFIHRvIGluZGljYXRlCisgKgl3aGljaCBrZXkgbWFuYWdlbWVudCBhbGdvcml0aG0ocykgdG8gdXNlIChhbiBhcnJheSBvZiB1MzIpLgorICoKKyAqIEBOTDgwMjExX0FUVFJfUkVRX0lFOiAoUmUpYXNzb2NpYXRpb24gcmVxdWVzdCBpbmZvcm1hdGlvbiBlbGVtZW50cyBhcworICoJc2VudCBvdXQgYnkgdGhlIGNhcmQsIGZvciBST0FNIGFuZCBzdWNjZXNzZnVsIENPTk5FQ1QgZXZlbnRzLgorICogQE5MODAyMTFfQVRUUl9SRVNQX0lFOiAoUmUpYXNzb2NpYXRpb24gcmVzcG9uc2UgaW5mb3JtYXRpb24gZWxlbWVudHMgYXMKKyAqCXNlbnQgYnkgcGVlciwgZm9yIFJPQU0gYW5kIHN1Y2Nlc3NmdWwgQ09OTkVDVCBldmVudHMuCisgKgorICogQE5MODAyMTFfQVRUUl9QUkVWX0JTU0lEOiBwcmV2aW91cyBCU1NJRCwgdG8gYmUgdXNlZCBieSBpbiBBU1NPQ0lBVEUKKyAqCWNvbW1hbmRzIHRvIHNwZWNpZnkgdXNpbmcgYSByZWFzc29jaWF0ZSBmcmFtZQorICoKKyAqIEBOTDgwMjExX0FUVFJfS0VZOiBrZXkgaW5mb3JtYXRpb24gaW4gYSBuZXN0ZWQgYXR0cmlidXRlIHdpdGgKKyAqCSVOTDgwMjExX0tFWV8qIHN1Yi1hdHRyaWJ1dGVzCisgKiBATkw4MDIxMV9BVFRSX0tFWVM6IGFycmF5IG9mIGtleXMgZm9yIHN0YXRpYyBXRVAga2V5cyBmb3IgY29ubmVjdCgpCisgKglhbmQgam9pbl9pYnNzKCksIGtleSBpbmZvcm1hdGlvbiBpcyBpbiBhIG5lc3RlZCBhdHRyaWJ1dGUgZWFjaAorICoJd2l0aCAlTkw4MDIxMV9LRVlfKiBzdWItYXR0cmlidXRlcworICoKKyAqIEBOTDgwMjExX0FUVFJfUElEOiBQcm9jZXNzIElEIG9mIGEgbmV0d29yayBuYW1lc3BhY2UuCisgKgorICogQE5MODAyMTFfQVRUUl9HRU5FUkFUSU9OOiBVc2VkIHRvIGluZGljYXRlIGNvbnNpc3RlbnQgc25hcHNob3RzIGZvcgorICoJZHVtcHMuIFRoaXMgbnVtYmVyIGluY3JlYXNlcyB3aGVuZXZlciB0aGUgb2JqZWN0IGxpc3QgYmVpbmcKKyAqCWR1bXBlZCBjaGFuZ2VzLCBhbmQgYXMgc3VjaCB1c2Vyc3BhY2UgY2FuIHZlcmlmeSB0aGF0IGl0IGhhcworICoJb2J0YWluZWQgYSBjb21wbGV0ZSBhbmQgY29uc2lzdGVudCBzbmFwc2hvdCBieSB2ZXJpZnlpbmcgdGhhdAorICoJYWxsIGR1bXAgbWVzc2FnZXMgY29udGFpbiB0aGUgc2FtZSBnZW5lcmF0aW9uIG51bWJlci4gSWYgaXQKKyAqCWNoYW5nZWQgdGhlbiB0aGUgbGlzdCBjaGFuZ2VkIGFuZCB0aGUgZHVtcCBzaG91bGQgYmUgcmVwZWF0ZWQKKyAqCWNvbXBsZXRlbHkgZnJvbSBzY3JhdGNoLgorICoKICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtNTgyLDcgKzY1NSw3IEBACiAKIAlOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFUywKIAlOTDgwMjExX0FUVFJfU0NBTl9TU0lEUywKLQlOTDgwMjExX0FUVFJfU0NBTl9HRU5FUkFUSU9OLAorCU5MODAyMTFfQVRUUl9HRU5FUkFUSU9OLCAvKiByZXBsYWNlcyBvbGQgU0NBTl9HRU5FUkFUSU9OICovCiAJTkw4MDIxMV9BVFRSX0JTUywKIAogCU5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SLApAQCAtNjE5LDE2ICs2OTIsNDIgQEAKIAogCU5MODAyMTFfQVRUUl9DT05UUk9MX1BPUlQsCiAKKwlOTDgwMjExX0FUVFJfVEVTVERBVEEsCisKKwlOTDgwMjExX0FUVFJfUFJJVkFDWSwKKworCU5MODAyMTFfQVRUUl9ESVNDT05ORUNURURfQllfQVAsCisJTkw4MDIxMV9BVFRSX1NUQVRVU19DT0RFLAorCisJTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURVNfUEFJUldJU0UsCisJTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURV9HUk9VUCwKKwlOTDgwMjExX0FUVFJfV1BBX1ZFUlNJT05TLAorCU5MODAyMTFfQVRUUl9BS01fU1VJVEVTLAorCisJTkw4MDIxMV9BVFRSX1JFUV9JRSwKKwlOTDgwMjExX0FUVFJfUkVTUF9JRSwKKworCU5MODAyMTFfQVRUUl9QUkVWX0JTU0lELAorCisJTkw4MDIxMV9BVFRSX0tFWSwKKwlOTDgwMjExX0FUVFJfS0VZUywKKworCU5MODAyMTFfQVRUUl9QSUQsCisKIAkvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi8KIAogCV9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsCiAJTkw4MDIxMV9BVFRSX01BWCA9IF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QgLSAxCiB9OwogCisvKiBzb3VyY2UtbGV2ZWwgQVBJIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1NDQU5fR0VORVJBVElPTiBOTDgwMjExX0FUVFJfR0VORVJBVElPTgorCiAvKgogICogQWxsb3cgdXNlciBzcGFjZSBwcm9ncmFtcyB0byB1c2UgI2lmZGVmIG9uIG5ldyBhdHRyaWJ1dGVzIGJ5IGRlZmluaW5nIHRoZW0KICAqIGhlcmUKICAqLworI2RlZmluZSBOTDgwMjExX0NNRF9DT05ORUNUIE5MODAyMTFfQ01EX0NPTk5FQ1QKICNkZWZpbmUgTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFkgTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFkKICNkZWZpbmUgTkw4MDIxMV9BVFRSX0JTU19CQVNJQ19SQVRFUyBOTDgwMjExX0FUVFJfQlNTX0JBU0lDX1JBVEVTCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TIE5MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TCkBAIC02NDIsNiArNzQxLDEyIEBACiAjZGVmaW5lIE5MODAyMTFfQVRUUl9TU0lEIE5MODAyMTFfQVRUUl9TU0lECiAjZGVmaW5lIE5MODAyMTFfQVRUUl9BVVRIX1RZUEUgTkw4MDIxMV9BVFRSX0FVVEhfVFlQRQogI2RlZmluZSBOTDgwMjExX0FUVFJfUkVBU09OX0NPREUgTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFCisjZGVmaW5lIE5MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVTX1BBSVJXSVNFIE5MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVTX1BBSVJXSVNFCisjZGVmaW5lIE5MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVfR1JPVVAgTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURV9HUk9VUAorI2RlZmluZSBOTDgwMjExX0FUVFJfV1BBX1ZFUlNJT05TIE5MODAyMTFfQVRUUl9XUEFfVkVSU0lPTlMKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX0FLTV9TVUlURVMgTkw4MDIxMV9BVFRSX0FLTV9TVUlURVMKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX0tFWSBOTDgwMjExX0FUVFJfS0VZCisjZGVmaW5lIE5MODAyMTFfQVRUUl9LRVlTIE5MODAyMTFfQVRUUl9LRVlTCiAKICNkZWZpbmUgTkw4MDIxMV9NQVhfU1VQUF9SQVRFUwkJCTMyCiAjZGVmaW5lIE5MODAyMTFfTUFYX1NVUFBfUkVHX1JVTEVTCQkzMgpAQCAtNjUwLDYgKzc1NSw5IEBACiAjZGVmaW5lIE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9SWF9NSUNfS0VZCTI0CiAjZGVmaW5lIE5MODAyMTFfSFRfQ0FQQUJJTElUWV9MRU4JCTI2CiAKKyNkZWZpbmUgTkw4MDIxMV9NQVhfTlJfQ0lQSEVSX1NVSVRFUwkJNQorI2RlZmluZSBOTDgwMjExX01BWF9OUl9BS01fU1VJVEVTCQkyCisKIC8qKgogICogZW51bSBubDgwMjExX2lmdHlwZSAtICh2aXJ0dWFsKSBpbnRlcmZhY2UgdHlwZXMKICAqCkBAIC0xMTY4LDYgKzEyNzYsNyBAQAogICoJaW4gbUJtICgxMDAgKiBkQm0pIChzMzIpCiAgKiBATkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQzogc2lnbmFsIHN0cmVuZ3RoIG9mIHRoZSBwcm9iZSByZXNwb25zZS9iZWFjb24KICAqCWluIHVuc3BlY2lmaWVkIHVuaXRzLCBzY2FsZWQgdG8gMC4uMTAwICh1OCkKKyAqIEBOTDgwMjExX0JTU19TVEFUVVM6IHN0YXR1cywgaWYgdGhpcyBCU1MgaXMgInVzZWQiCiAgKiBAX19OTDgwMjExX0JTU19BRlRFUl9MQVNUOiBpbnRlcm5hbAogICogQE5MODAyMTFfQlNTX01BWDogaGlnaGVzdCBCU1MgYXR0cmlidXRlCiAgKi8KQEAgLTExODEsNiArMTI5MCw3IEBACiAJTkw4MDIxMV9CU1NfSU5GT1JNQVRJT05fRUxFTUVOVFMsCiAJTkw4MDIxMV9CU1NfU0lHTkFMX01CTSwKIAlOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDLAorCU5MODAyMTFfQlNTX1NUQVRVUywKIAogCS8qIGtlZXAgbGFzdCAqLwogCV9fTkw4MDIxMV9CU1NfQUZURVJfTEFTVCwKQEAgLTExODgsMTggKzEyOTgsMzcgQEAKIH07CiAKIC8qKgorICogZW51bSBubDgwMjExX2Jzc19zdGF0dXMgLSBCU1MgInN0YXR1cyIKKyAqLworZW51bSBubDgwMjExX2Jzc19zdGF0dXMgeworCU5MODAyMTFfQlNTX1NUQVRVU19BVVRIRU5USUNBVEVELAorCU5MODAyMTFfQlNTX1NUQVRVU19BU1NPQ0lBVEVELAorCU5MODAyMTFfQlNTX1NUQVRVU19JQlNTX0pPSU5FRCwKK307CisKKy8qKgogICogZW51bSBubDgwMjExX2F1dGhfdHlwZSAtIEF1dGhlbnRpY2F0aW9uVHlwZQogICoKICAqIEBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNOiBPcGVuIFN5c3RlbSBhdXRoZW50aWNhdGlvbgogICogQE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWTogU2hhcmVkIEtleSBhdXRoZW50aWNhdGlvbiAoV0VQIG9ubHkpCiAgKiBATkw4MDIxMV9BVVRIVFlQRV9GVDogRmFzdCBCU1MgVHJhbnNpdGlvbiAoSUVFRSA4MDIuMTFyKQogICogQE5MODAyMTFfQVVUSFRZUEVfTkVUV09SS19FQVA6IE5ldHdvcmsgRUFQIChzb21lIENpc2NvIEFQcyBhbmQgbWFpbmx5IExFQVApCisgKiBAX19OTDgwMjExX0FVVEhUWVBFX05VTTogaW50ZXJuYWwKKyAqIEBOTDgwMjExX0FVVEhUWVBFX01BWDogbWF4aW11bSB2YWxpZCBhdXRoIGFsZ29yaXRobQorICogQE5MODAyMTFfQVVUSFRZUEVfQVVUT01BVElDOiBkZXRlcm1pbmUgYXV0b21hdGljYWxseSAoaWYgbmVjZXNzYXJ5IGJ5CisgKgl0cnlpbmcgbXVsdGlwbGUgdGltZXMpOyB0aGlzIGlzIGludmFsaWQgaW4gbmV0bGluayAtLSBsZWF2ZSBvdXQKKyAqCXRoZSBhdHRyaWJ1dGUgZm9yIHRoaXMgb24gQ09OTkVDVCBjb21tYW5kcy4KICAqLwogZW51bSBubDgwMjExX2F1dGhfdHlwZSB7CiAJTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTSwKIAlOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVksCiAJTkw4MDIxMV9BVVRIVFlQRV9GVCwKIAlOTDgwMjExX0FVVEhUWVBFX05FVFdPUktfRUFQLAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX0FVVEhUWVBFX05VTSwKKwlOTDgwMjExX0FVVEhUWVBFX01BWCA9IF9fTkw4MDIxMV9BVVRIVFlQRV9OVU0gLSAxLAorCU5MODAyMTFfQVVUSFRZUEVfQVVUT01BVElDCiB9OwogCiAvKioKQEAgLTEyMjQsNCArMTM1MywzOSBAQAogCU5MODAyMTFfTUZQX1JFUVVJUkVELAogfTsKIAorZW51bSBubDgwMjExX3dwYV92ZXJzaW9ucyB7CisJTkw4MDIxMV9XUEFfVkVSU0lPTl8xID0gMSA8PCAwLAorCU5MODAyMTFfV1BBX1ZFUlNJT05fMiA9IDEgPDwgMSwKK307CisKKy8qKgorICogZW51bSBubDgwMjExX2tleV9hdHRyaWJ1dGVzIC0ga2V5IGF0dHJpYnV0ZXMKKyAqIEBfX05MODAyMTFfS0VZX0lOVkFMSUQ6IGludmFsaWQKKyAqIEBOTDgwMjExX0tFWV9EQVRBOiAodGVtcG9yYWwpIGtleSBkYXRhOyBmb3IgVEtJUCB0aGlzIGNvbnNpc3RzIG9mCisgKgkxNiBieXRlcyBlbmNyeXB0aW9uIGtleSBmb2xsb3dlZCBieSA4IGJ5dGVzIGVhY2ggZm9yIFRYIGFuZCBSWCBNSUMKKyAqCWtleXMKKyAqIEBOTDgwMjExX0tFWV9JRFg6IGtleSBJRCAodTgsIDAtMykKKyAqIEBOTDgwMjExX0tFWV9DSVBIRVI6IGtleSBjaXBoZXIgc3VpdGUgKHUzMiwgYXMgZGVmaW5lZCBieSBJRUVFIDgwMi4xMQorICoJc2VjdGlvbiA3LjMuMi4yNS4xLCBlLmcuIDB4MDAwRkFDMDQpCisgKiBATkw4MDIxMV9LRVlfU0VROiB0cmFuc21pdCBrZXkgc2VxdWVuY2UgbnVtYmVyIChJVi9QTikgZm9yIFRLSVAgYW5kCisgKglDQ01QIGtleXMsIGVhY2ggc2l4IGJ5dGVzIGluIGxpdHRsZSBlbmRpYW4KKyAqIEBOTDgwMjExX0tFWV9ERUZBVUxUOiBmbGFnIGluZGljYXRpbmcgZGVmYXVsdCBrZXkKKyAqIEBOTDgwMjExX0tFWV9ERUZBVUxUX01HTVQ6IGZsYWcgaW5kaWNhdGluZyBkZWZhdWx0IG1hbmFnZW1lbnQga2V5CisgKiBAX19OTDgwMjExX0tFWV9BRlRFUl9MQVNUOiBpbnRlcm5hbAorICogQE5MODAyMTFfS0VZX01BWDogaGlnaGVzdCBrZXkgYXR0cmlidXRlCisgKi8KK2VudW0gbmw4MDIxMV9rZXlfYXR0cmlidXRlcyB7CisJX19OTDgwMjExX0tFWV9JTlZBTElELAorCU5MODAyMTFfS0VZX0RBVEEsCisJTkw4MDIxMV9LRVlfSURYLAorCU5MODAyMTFfS0VZX0NJUEhFUiwKKwlOTDgwMjExX0tFWV9TRVEsCisJTkw4MDIxMV9LRVlfREVGQVVMVCwKKwlOTDgwMjExX0tFWV9ERUZBVUxUX01HTVQsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlfX05MODAyMTFfS0VZX0FGVEVSX0xBU1QsCisJTkw4MDIxMV9LRVlfTUFYID0gX19OTDgwMjExX0tFWV9BRlRFUl9MQVNUIC0gMQorfTsKKwogI2VuZGlmIC8qIF9fTElOVVhfTkw4MDIxMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25sODAyMTU0LmggYi9pbmNsdWRlL2xpbnV4L25sODAyMTU0LmgKaW5kZXggMmNkYTAwYy4uYjdkOTQzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubDgwMjE1NC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmw4MDIxNTQuaApAQCAtNjQsMTIgKzY0LDE0IEBACiAJSUVFRTgwMjE1NF9BVFRSX0NPT1JEX1JFQUxJR04sCiAJSUVFRTgwMjE1NF9BVFRSX1NFQywKIAorCUlFRUU4MDIxNTRfQVRUUl9QQUdFLAorCiAJX19JRUVFODAyMTU0X0FUVFJfTUFYLAogfTsKIAogI2RlZmluZSBJRUVFODAyMTU0X0FUVFJfTUFYIChfX0lFRUU4MDIxNTRfQVRUUl9NQVggLSAxKQogCi1leHRlcm4gc3RydWN0IG5sYV9wb2xpY3kgaWVlZTgwMjE1NF9wb2xpY3lbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpZWVlODAyMTU0X3BvbGljeVtdOwogCiAvKiBjb21tYW5kcyAqLwogLyogUkVRIHNob3VsZCBiZSByZXNwb25kZWQgd2l0aCBDT05GCkBAIC0xMTEsNiArMTEzLDggQEAKIAlJRUVFODAyMTU0X1JYX0VOQUJMRV9SRVEsIC8qIE5vdCBzdXBwb3J0ZWQgeWV0ICovCiAJSUVFRTgwMjE1NF9SWF9FTkFCTEVfQ09ORiwgLyogTm90IHN1cHBvcnRlZCB5ZXQgKi8KIAorCUlFRUU4MDIxNTRfTElTVF9JRkFDRSwKKwogCV9fSUVFRTgwMjE1NF9DTURfTUFYLAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ubWkuaCBiL2luY2x1ZGUvbGludXgvbm1pLmgKaW5kZXggMjlhZjJkNS4uYjc1MmU4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25taS5oCkBAIC0yOCw4ICsyOCwyMyBAQAogc3RhdGljIGlubGluZSB2b2lkIGFjcGlfbm1pX2VuYWJsZSh2b2lkKSB7IH0KICNlbmRpZgogCi0jaWZuZGVmIHRyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UKLSNkZWZpbmUgdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSgpIGRvIHsgfSB3aGlsZSAoMCkKKy8qCisgKiBDcmVhdGUgdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSgpIG91dCBvZiB0aGUgYXJjaC1wcm92aWRlZAorICogYmFzZSBmdW5jdGlvbi4gUmV0dXJuIHdoZXRoZXIgc3VjaCBzdXBwb3J0IHdhcyBhdmFpbGFibGUsCisgKiB0byBhbGxvdyBjYWxsaW5nIGNvZGUgdG8gZmFsbCBiYWNrIHRvIHNvbWUgb3RoZXIgbWVjaGFuaXNtOgorICovCisjaWZkZWYgYXJjaF90cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlCitzdGF0aWMgaW5saW5lIGJvb2wgdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSh2b2lkKQoreworCWFyY2hfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSgpOworCisJcmV0dXJuIHRydWU7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBib29sIHRyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2Uodm9pZCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29wcm9maWxlLmggYi9pbmNsdWRlL2xpbnV4L29wcm9maWxlLmgKaW5kZXggMWQ5NTE4Yi4uNTE3MTYzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaApAQCAtNjcsNiArNjcsOSBAQAogCiAJLyogSW5pdGlhdGUgYSBzdGFjayBiYWNrdHJhY2UuIE9wdGlvbmFsLiAqLwogCXZvaWQgKCpiYWNrdHJhY2UpKHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywgdW5zaWduZWQgaW50IGRlcHRoKTsKKworCS8qIE11bHRpcGxleCBiZXR3ZWVuIGRpZmZlcmVudCBldmVudHMuIE9wdGlvbmFsLiAqLworCWludCAoKnN3aXRjaF9ldmVudHMpKHZvaWQpOwogCS8qIENQVSBpZGVudGlmaWNhdGlvbiBzdHJpbmcuICovCiAJY2hhciAqIGNwdV90eXBlOwogfTsKQEAgLTE3MSw3ICsxNzQsNiBAQAogc3RydWN0IG9wX2VudHJ5IHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBvcF9zYW1wbGUgKnNhbXBsZTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJdW5zaWduZWQgbG9uZyAqZGF0YTsKIH07CkBAIC0xODAsNiArMTgyLDcgQEAKIAkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBwYywgaW50IGNvZGUsIGludCBzaXplKTsKIGludCBvcHJvZmlsZV9hZGRfZGF0YShzdHJ1Y3Qgb3BfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBsb25nIHZhbCk7CitpbnQgb3Byb2ZpbGVfYWRkX2RhdGE2NChzdHJ1Y3Qgb3BfZW50cnkgKmVudHJ5LCB1NjQgdmFsKTsKIGludCBvcHJvZmlsZV93cml0ZV9jb21taXQoc3RydWN0IG9wX2VudHJ5ICplbnRyeSk7CiAKICNlbmRpZiAvKiBPUFJPRklMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IGUyZTVjZTUuLjJiODdhY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC05OSw3ICs5OSw3IEBACiAjaWZkZWYgQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVAogCVBHX21sb2NrZWQsCQkvKiBQYWdlIGlzIHZtYSBtbG9ja2VkICovCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfSUE2NF9VTkNBQ0hFRF9BTExPQ0FUT1IKKyNpZmRlZiBDT05GSUdfQVJDSF9VU0VTX1BHX1VOQ0FDSEVECiAJUEdfdW5jYWNoZWQsCQkvKiBQYWdlIGhhcyBiZWVuIG1hcHBlZCBhcyB1bmNhY2hlZCAqLwogI2VuZGlmCiAJX19OUl9QQUdFRkxBR1MsCkBAIC0yNTcsNyArMjU3LDcgQEAKIAlTRVRQQUdFRkxBR19OT09QKE1sb2NrZWQpIFRFU1RDTEVBUkZMQUdfRkFMU0UoTWxvY2tlZCkKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0lBNjRfVU5DQUNIRURfQUxMT0NBVE9SCisjaWZkZWYgQ09ORklHX0FSQ0hfVVNFU19QR19VTkNBQ0hFRAogUEFHRUZMQUcoVW5jYWNoZWQsIHVuY2FjaGVkKQogI2Vsc2UKIFBBR0VGTEFHX0ZBTFNFKFVuY2FjaGVkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCBhZWMzMjUyLi5lZDVkNzUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtMTMyLDcgKzEzMiw3IEBACiB7CiAJVk1fQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAotI2lmICFkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX0NMQVNTSUNfUkNVKQorI2lmICFkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKQogIyBpZmRlZiBDT05GSUdfUFJFRU1QVAogCVZNX0JVR19PTighaW5fYXRvbWljKCkpOwogIyBlbmRpZgpAQCAtMTcwLDcgKzE3MCw3IEBACiB7CiAJVk1fQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAotI2lmICFkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX0NMQVNTSUNfUkNVKQorI2lmICFkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKQogIyBpZmRlZiBDT05GSUdfUFJFRU1QVAogCVZNX0JVR19PTighaW5fYXRvbWljKCkpOwogIyBlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCA2MjM1Y2UyLi44OTc1YWRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtMzc5LDYgKzM3OSw5IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9JREUJMHg0MzhjCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9TQVRBCTB4NDM5MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfSURFCTB4NDM5YworLyogQU1EIFNCIENoaXBzZXQgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfSURFCSAweDc4MGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU0FUQV9JREUgMHg3ODAwCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WTFNJCQkweDEwMDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU5MgkweDAwMDUKQEAgLTU0MCw2ICs1NDMsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0JSSURHRQkweDc0NTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMV9BUElDCTB4NzQ1MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMyX0JSSURHRQkweDc0NTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM1X0lERSAgICAweDIwOEYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lTQSAgICAweDIwOTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0ZMQVNIICAweDIwOTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0FVRElPICAweDIwOTMKQEAgLTg4MCw2ICs4ODQsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1NIX1NVTkdFTSAgIDB4MDA1MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1UzTF9BR1AJMHgwMDU4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVTNIX0FHUAkweDAwNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9VNF9QQ0lFCTB4MDA1YgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX0lQSUQyX0FHUAkweDAwNjYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9JUElEMl9BVEEJMHgwMDY5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfSVBJRDJfRlcJMHgwMDZhCkBAIC0xOTg3LDYgKzE5OTIsOCBAQAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0FNU1VORwkJMHgxNDRkCiAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9HSUdBQllURQkJMHgxNDU4CisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTUJJVAkJMHgxNDY4CiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NWVJJQ09NCQkweDE0YzEKQEAgLTIwNjUsNyArMjA3Miw2IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODdNCTB4MTY5MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzgyCTB4MTY5NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg0CTB4MTY5OAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg1CTB4MTY5OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg2CTB4MTY5YQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg3CTB4MTY5YgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg4CTB4MTY5YwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHUtZGVmcy5oIGIvaW5jbHVkZS9saW51eC9wZXJjcHUtZGVmcy5oCmluZGV4IDY4NDM4ZTEuLjliZDAzMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1LWRlZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS1kZWZzLmgKQEAgLTEwLDIyICsxMCw3MCBAQAogLyoKICAqIEJhc2UgaW1wbGVtZW50YXRpb25zIG9mIHBlci1DUFUgdmFyaWFibGUgZGVjbGFyYXRpb25zIGFuZCBkZWZpbml0aW9ucywgd2hlcmUKICAqIHRoZSBzZWN0aW9uIGluIHdoaWNoIHRoZSB2YXJpYWJsZSBpcyB0byBiZSBwbGFjZWQgaXMgcHJvdmlkZWQgYnkgdGhlCi0gKiAnc2VjdGlvbicgYXJndW1lbnQuICBUaGlzIG1heSBiZSB1c2VkIHRvIGFmZmVjdCB0aGUgcGFyYW1ldGVycyBnb3Zlcm5pbmcgdGhlCisgKiAnc2VjJyBhcmd1bWVudC4gIFRoaXMgbWF5IGJlIHVzZWQgdG8gYWZmZWN0IHRoZSBwYXJhbWV0ZXJzIGdvdmVybmluZyB0aGUKICAqIHZhcmlhYmxlJ3Mgc3RvcmFnZS4KICAqCiAgKiBOT1RFISAgVGhlIHNlY3Rpb25zIGZvciB0aGUgREVDTEFSRSBhbmQgZm9yIHRoZSBERUZJTkUgbXVzdCBtYXRjaCwgbGVzdAogICogbGlua2FnZSBlcnJvcnMgb2NjdXIgZHVlIHRoZSBjb21waWxlciBnZW5lcmF0aW5nIHRoZSB3cm9uZyBjb2RlIHRvIGFjY2VzcwogICogdGhhdCBzZWN0aW9uLgogICovCi0jZGVmaW5lIERFQ0xBUkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsIHNlY3Rpb24pCQkJXAotCWV4dGVybgkJCQkJCQkJXAotCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKFBFUl9DUFVfQkFTRV9TRUNUSU9OIHNlY3Rpb24pKSkJXAotCVBFUl9DUFVfQVRUUklCVVRFUyBfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQorI2RlZmluZSBfX1BDUFVfQVRUUlMoc2VjKQkJCQkJCVwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFBFUl9DUFVfQkFTRV9TRUNUSU9OIHNlYykpKQkJXAorCVBFUl9DUFVfQVRUUklCVVRFUwogCi0jZGVmaW5lIERFRklORV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgc2VjdGlvbikJCQlcCi0JX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oUEVSX0NQVV9CQVNFX1NFQ1RJT04gc2VjdGlvbikpKQlcCi0JUEVSX0NQVV9BVFRSSUJVVEVTIFBFUl9DUFVfREVGX0FUVFJJQlVURVMJCQlcCisjZGVmaW5lIF9fUENQVV9EVU1NWV9BVFRSUwkJCQkJCVwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZGlzY2FyZCIpLCB1bnVzZWQpKQorCisvKgorICogczM5MCBhbmQgYWxwaGEgbW9kdWxlcyByZXF1aXJlIHBlcmNwdSB2YXJpYWJsZXMgdG8gYmUgZGVmaW5lZCBhcworICogd2VhayB0byBmb3JjZSB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgR09UIGJhc2VkIGV4dGVybmFsCisgKiByZWZlcmVuY2VzIGZvciB0aGVtLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBwZXJjcHUgc2VjdGlvbnMKKyAqIHdpbGwgYmUgbG9jYXRlZCBvdXRzaWRlIG9mIHRoZSB1c3VhbGx5IGFkZHJlc3NhYmxlIGFyZWEuCisgKgorICogVGhpcyBkZWZpbml0aW9uIHB1dHMgdGhlIGZvbGxvd2luZyB0d28gZXh0cmEgcmVzdHJpY3Rpb25zIHdoZW4KKyAqIGRlZmluaW5nIHBlcmNwdSB2YXJpYWJsZXMuCisgKgorICogMS4gVGhlIHN5bWJvbCBtdXN0IGJlIGdsb2JhbGx5IHVuaXF1ZSwgZXZlbiB0aGUgc3RhdGljIG9uZXMuCisgKiAyLiBTdGF0aWMgcGVyY3B1IHZhcmlhYmxlcyBjYW5ub3QgYmUgZGVmaW5lZCBpbnNpZGUgYSBmdW5jdGlvbi4KKyAqCisgKiBBcmNocyB3aGljaCBuZWVkIHdlYWsgcGVyY3B1IGRlZmluaXRpb25zIHNob3VsZCBkZWZpbmUKKyAqIEFSQ0hfTkVFRFNfV0VBS19QRVJfQ1BVIGluIGFzbS9wZXJjcHUuaCB3aGVuIG5lY2Vzc2FyeS4KKyAqCisgKiBUbyBlbnN1cmUgdGhhdCB0aGUgZ2VuZXJpYyBjb2RlIG9ic2VydmVzIHRoZSBhYm92ZSB0d28KKyAqIHJlc3RyaWN0aW9ucywgaWYgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBzZXQgd2VhaworICogZGVmaW5pdGlvbiBpcyB1c2VkIGZvciBhbGwgY2FzZXMuCisgKi8KKyNpZiBkZWZpbmVkKEFSQ0hfTkVFRFNfV0VBS19QRVJfQ1BVKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUpCisvKgorICogX19wY3B1X3Njb3BlXyogZHVtbXkgdmFyaWFibGUgaXMgdXNlZCB0byBlbmZvcmNlIHNjb3BlLiAgSXQKKyAqIHJlY2VpdmVzIHRoZSBzdGF0aWMgbW9kaWZpZXIgd2hlbiBpdCdzIHVzZWQgaW4gZnJvbnQgb2YKKyAqIERFRklORV9QRVJfQ1BVKCkgYW5kIHdpbGwgdHJpZ2dlciBidWlsZCBmYWlsdXJlIGlmCisgKiBERUNMQVJFX1BFUl9DUFUoKSBpcyB1c2VkIGZvciB0aGUgc2FtZSB2YXJpYWJsZS4KKyAqCisgKiBfX3BjcHVfdW5pcXVlXyogZHVtbXkgdmFyaWFibGUgaXMgdXNlZCB0byBlbmZvcmNlIHN5bWJvbCB1bmlxdWVuZXNzCisgKiBzdWNoIHRoYXQgaGlkZGVuIHdlYWsgc3ltYm9sIGNvbGxpc2lvbiwgd2hpY2ggd2lsbCBjYXVzZSB1bnJlbGF0ZWQKKyAqIHZhcmlhYmxlcyB0byBzaGFyZSB0aGUgc2FtZSBhZGRyZXNzLCBjYW4gYmUgZGV0ZWN0ZWQgZHVyaW5nIGJ1aWxkLgorICovCisjZGVmaW5lIERFQ0xBUkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsIHNlYykJCQlcCisJZXh0ZXJuIF9fUENQVV9EVU1NWV9BVFRSUyBjaGFyIF9fcGNwdV9zY29wZV8jI25hbWU7CQlcCisJZXh0ZXJuIF9fUENQVV9BVFRSUyhzZWMpIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisKKyNkZWZpbmUgREVGSU5FX1BFUl9DUFVfU0VDVElPTih0eXBlLCBuYW1lLCBzZWMpCQkJCVwKKwlfX1BDUFVfRFVNTVlfQVRUUlMgY2hhciBfX3BjcHVfc2NvcGVfIyNuYW1lOwkJCVwKKwlfX1BDUFVfRFVNTVlfQVRUUlMgY2hhciBfX3BjcHVfdW5pcXVlXyMjbmFtZTsJCQlcCisJX19QQ1BVX0FUVFJTKHNlYykgUEVSX0NQVV9ERUZfQVRUUklCVVRFUyBfX3dlYWsJCQlcCiAJX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKKyNlbHNlCisvKgorICogTm9ybWFsIGRlY2xhcmF0aW9uIGFuZCBkZWZpbml0aW9uIG1hY3Jvcy4KKyAqLworI2RlZmluZSBERUNMQVJFX1BFUl9DUFVfU0VDVElPTih0eXBlLCBuYW1lLCBzZWMpCQkJXAorCWV4dGVybiBfX1BDUFVfQVRUUlMoc2VjKSBfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQorCisjZGVmaW5lIERFRklORV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgc2VjKQkJCQlcCisJX19QQ1BVX0FUVFJTKHNlYykgUEVSX0NQVV9ERUZfQVRUUklCVVRFUwkJCVwKKwlfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQorI2VuZGlmCiAKIC8qCiAgKiBWYXJpYW50IG9uIHRoZSBwZXItQ1BVIHZhcmlhYmxlIGRlY2xhcmF0aW9uL2RlZmluaXRpb24gdGhlbWUgdXNlZCBmb3IKQEAgLTY2LDE0ICsxMTQsMjQgQEAKIAlERUZJTkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsIFBFUl9DUFVfU0hBUkVEX0FMSUdORURfU0VDVElPTikgXAogCV9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAKIAorI2RlZmluZSBERUNMQVJFX1BFUl9DUFVfQUxJR05FRCh0eXBlLCBuYW1lKQkJCQlcCisJREVDTEFSRV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgUEVSX0NQVV9BTElHTkVEX1NFQ1RJT04pCVwKKwlfX19fY2FjaGVsaW5lX2FsaWduZWQKKworI2RlZmluZSBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHR5cGUsIG5hbWUpCQkJCVwKKwlERUZJTkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsIFBFUl9DUFVfQUxJR05FRF9TRUNUSU9OKQlcCisJX19fX2NhY2hlbGluZV9hbGlnbmVkCisKIC8qCiAgKiBEZWNsYXJhdGlvbi9kZWZpbml0aW9uIHVzZWQgZm9yIHBlci1DUFUgdmFyaWFibGVzIHRoYXQgbXVzdCBiZSBwYWdlIGFsaWduZWQuCiAgKi8KLSNkZWZpbmUgREVDTEFSRV9QRVJfQ1BVX1BBR0VfQUxJR05FRCh0eXBlLCBuYW1lKQkJCQlcCi0JREVDTEFSRV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgIi5wYWdlX2FsaWduZWQiKQorI2RlZmluZSBERUNMQVJFX1BFUl9DUFVfUEFHRV9BTElHTkVEKHR5cGUsIG5hbWUpCQkJXAorCURFQ0xBUkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsICIucGFnZV9hbGlnbmVkIikJCVwKKwlfX2FsaWduZWQoUEFHRV9TSVpFKQogCiAjZGVmaW5lIERFRklORV9QRVJfQ1BVX1BBR0VfQUxJR05FRCh0eXBlLCBuYW1lKQkJCQlcCi0JREVGSU5FX1BFUl9DUFVfU0VDVElPTih0eXBlLCBuYW1lLCAiLnBhZ2VfYWxpZ25lZCIpCisJREVGSU5FX1BFUl9DUFVfU0VDVElPTih0eXBlLCBuYW1lLCAiLnBhZ2VfYWxpZ25lZCIpCQlcCisJX19hbGlnbmVkKFBBR0VfU0laRSkKIAogLyoKICAqIEludGVybW9kdWxlIGV4cG9ydHMgZm9yIHBlci1DUFUgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKaW5kZXggMjZmZDlkMS4uODc4ODM2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCkBAIC0zNCw3ICszNCw3IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAKLSNpZmRlZiBDT05GSUdfSEFWRV9EWU5BTUlDX1BFUl9DUFVfQVJFQQorI2lmbmRlZiBDT05GSUdfSEFWRV9MRUdBQ1lfUEVSX0NQVV9BUkVBCiAKIC8qIG1pbmltdW0gdW5pdCBzaXplLCBhbHNvIGlzIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBhbGxvY2F0aW9uIHNpemUgKi8KICNkZWZpbmUgUENQVV9NSU5fVU5JVF9TSVpFCQlQRk5fQUxJR04oNjQgPDwgMTApCkBAIC01NywxOSArNTcsNzAgQEAKICNlbmRpZgogCiBleHRlcm4gdm9pZCAqcGNwdV9iYXNlX2FkZHI7CitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyAqcGNwdV91bml0X29mZnNldHM7CiAKLXR5cGVkZWYgc3RydWN0IHBhZ2UgKiAoKnBjcHVfZ2V0X3BhZ2VfZm5fdCkodW5zaWduZWQgaW50IGNwdSwgaW50IHBhZ2Vubyk7Ci10eXBlZGVmIHZvaWQgKCpwY3B1X3BvcHVsYXRlX3B0ZV9mbl90KSh1bnNpZ25lZCBsb25nIGFkZHIpOworc3RydWN0IHBjcHVfZ3JvdXBfaW5mbyB7CisJaW50CQkJbnJfdW5pdHM7CS8qIGFsaWduZWQgIyBvZiB1bml0cyAqLworCXVuc2lnbmVkIGxvbmcJCWJhc2Vfb2Zmc2V0OwkvKiBiYXNlIGFkZHJlc3Mgb2Zmc2V0ICovCisJdW5zaWduZWQgaW50CQkqY3B1X21hcDsJLyogdW5pdC0+Y3B1IG1hcCwgZW1wdHkKKwkJCQkJCSAqIGVudHJpZXMgY29udGFpbiBOUl9DUFVTICovCit9OwogCi1leHRlcm4gc2l6ZV90IF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKHBjcHVfZ2V0X3BhZ2VfZm5fdCBnZXRfcGFnZV9mbiwKLQkJCQlzaXplX3Qgc3RhdGljX3NpemUsIHNpemVfdCByZXNlcnZlZF9zaXplLAotCQkJCXNzaXplX3QgZHluX3NpemUsIHNzaXplX3QgdW5pdF9zaXplLAotCQkJCXZvaWQgKmJhc2VfYWRkciwKLQkJCQlwY3B1X3BvcHVsYXRlX3B0ZV9mbl90IHBvcHVsYXRlX3B0ZV9mbik7CitzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvIHsKKwlzaXplX3QJCQlzdGF0aWNfc2l6ZTsKKwlzaXplX3QJCQlyZXNlcnZlZF9zaXplOworCXNpemVfdAkJCWR5bl9zaXplOworCXNpemVfdAkJCXVuaXRfc2l6ZTsKKwlzaXplX3QJCQlhdG9tX3NpemU7CisJc2l6ZV90CQkJYWxsb2Nfc2l6ZTsKKwlzaXplX3QJCQlfX2FpX3NpemU7CS8qIGludGVybmFsLCBkb24ndCB1c2UgKi8KKwlpbnQJCQlucl9ncm91cHM7CS8qIDAgaWYgZ3JvdXBpbmcgdW5uZWNlc3NhcnkgKi8KKwlzdHJ1Y3QgcGNwdV9ncm91cF9pbmZvCWdyb3Vwc1tdOworfTsKIAotZXh0ZXJuIHNzaXplX3QgX19pbml0IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoCi0JCQkJc2l6ZV90IHN0YXRpY19zaXplLCBzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwKLQkJCQlzc2l6ZV90IGR5bl9zaXplLCBzc2l6ZV90IHVuaXRfc2l6ZSk7CitlbnVtIHBjcHVfZmMgeworCVBDUFVfRkNfQVVUTywKKwlQQ1BVX0ZDX0VNQkVELAorCVBDUFVfRkNfUEFHRSwKKworCVBDUFVfRkNfTlIsCit9OworZXh0ZXJuIGNvbnN0IGNoYXIgKnBjcHVfZmNfbmFtZXNbUENQVV9GQ19OUl07CisKK2V4dGVybiBlbnVtIHBjcHVfZmMgcGNwdV9jaG9zZW5fZmM7CisKK3R5cGVkZWYgdm9pZCAqICgqcGNwdV9mY19hbGxvY19mbl90KSh1bnNpZ25lZCBpbnQgY3B1LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgIHNpemVfdCBhbGlnbik7Cit0eXBlZGVmIHZvaWQgKCpwY3B1X2ZjX2ZyZWVfZm5fdCkodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7Cit0eXBlZGVmIHZvaWQgKCpwY3B1X2ZjX3BvcHVsYXRlX3B0ZV9mbl90KSh1bnNpZ25lZCBsb25nIGFkZHIpOwordHlwZWRlZiBpbnQgKHBjcHVfZmNfY3B1X2Rpc3RhbmNlX2ZuX3QpKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pOworCitleHRlcm4gc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBwY3B1X2FsbG9jX2FsbG9jX2luZm8oaW50IG5yX2dyb3VwcywKKwkJCQkJCQkgICAgIGludCBucl91bml0cyk7CitleHRlcm4gdm9pZCBfX2luaXQgcGNwdV9mcmVlX2FsbG9jX2luZm8oc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWkpOworCitleHRlcm4gc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBwY3B1X2J1aWxkX2FsbG9jX2luZm8oCisJCQkJc2l6ZV90IHJlc2VydmVkX3NpemUsIHNzaXplX3QgZHluX3NpemUsCisJCQkJc2l6ZV90IGF0b21fc2l6ZSwKKwkJCQlwY3B1X2ZjX2NwdV9kaXN0YW5jZV9mbl90IGNwdV9kaXN0YW5jZV9mbik7CisKK2V4dGVybiBpbnQgX19pbml0IHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoY29uc3Qgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWksCisJCQkJCSB2b2lkICpiYXNlX2FkZHIpOworCisjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSworZXh0ZXJuIGludCBfX2luaXQgcGNwdV9lbWJlZF9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgc3NpemVfdCBkeW5fc2l6ZSwKKwkJCQlzaXplX3QgYXRvbV9zaXplLAorCQkJCXBjcHVfZmNfY3B1X2Rpc3RhbmNlX2ZuX3QgY3B1X2Rpc3RhbmNlX2ZuLAorCQkJCXBjcHVfZmNfYWxsb2NfZm5fdCBhbGxvY19mbiwKKwkJCQlwY3B1X2ZjX2ZyZWVfZm5fdCBmcmVlX2ZuKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LCitleHRlcm4gaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsCisJCQkJcGNwdV9mY19hbGxvY19mbl90IGFsbG9jX2ZuLAorCQkJCXBjcHVfZmNfZnJlZV9mbl90IGZyZWVfZm4sCisJCQkJcGNwdV9mY19wb3B1bGF0ZV9wdGVfZm5fdCBwb3B1bGF0ZV9wdGVfZm4pOworI2VuZGlmCiAKIC8qCiAgKiBVc2UgdGhpcyB0byBnZXQgdG8gYSBjcHUncyB2ZXJzaW9uIG9mIHRoZSBwZXItY3B1IG9iamVjdApAQCAtODAsNyArMTMxLDcgQEAKIAogZXh0ZXJuIHZvaWQgKl9fYWxsb2NfcmVzZXJ2ZWRfcGVyY3B1KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pOwogCi0jZWxzZSAvKiBDT05GSUdfSEFWRV9EWU5BTUlDX1BFUl9DUFVfQVJFQSAqLworI2Vsc2UgLyogQ09ORklHX0hBVkVfTEVHQUNZX1BFUl9DUFVfQVJFQSAqLwogCiBzdHJ1Y3QgcGVyY3B1X2RhdGEgewogCXZvaWQgKnB0cnNbMV07CkBAIC05OSwxMSArMTUwLDE1IEBACiAgICAgICAgIChfX3R5cGVvZl9fKHB0cikpX19wLT5wdHJzWyhjcHUpXTsJCQkJXAogfSkKIAotI2VuZGlmIC8qIENPTkZJR19IQVZFX0RZTkFNSUNfUEVSX0NQVV9BUkVBICovCisjZW5kaWYgLyogQ09ORklHX0hBVkVfTEVHQUNZX1BFUl9DUFVfQVJFQSAqLwogCiBleHRlcm4gdm9pZCAqX19hbGxvY19wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbik7CiBleHRlcm4gdm9pZCBmcmVlX3BlcmNwdSh2b2lkICpfX3BkYXRhKTsKIAorI2lmbmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKK2V4dGVybiB2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpOworI2VuZGlmCisKICNlbHNlIC8qIENPTkZJR19TTVAgKi8KIAogI2RlZmluZSBwZXJfY3B1X3B0cihwdHIsIGNwdSkgKHsgKHZvaWQpKGNwdSk7IChwdHIpOyB9KQpAQCAtMTI0LDYgKzE3OSwxMyBAQAogCWtmcmVlKHApOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZCkgeyB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGNwdV9scGFnZV9yZW1hcHBlZCh2b2lkICprYWRkcikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogI2RlZmluZSBhbGxvY19wZXJjcHUodHlwZSkJKHR5cGUgKilfX2FsbG9jX3BlcmNwdShzaXplb2YodHlwZSksIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCmluZGV4IGI1M2Y3MDAuLjk3MmY5MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaApAQCAtMjE2LDYgKzIxNiw3IEBACiAjZGVmaW5lIFBFUkZfQ09VTlRFUl9JT0NfUkVGUkVTSAlfSU8gKCckJywgMikKICNkZWZpbmUgUEVSRl9DT1VOVEVSX0lPQ19SRVNFVAkJX0lPICgnJCcsIDMpCiAjZGVmaW5lIFBFUkZfQ09VTlRFUl9JT0NfUEVSSU9ECQlfSU9XKCckJywgNCwgdTY0KQorI2RlZmluZSBQRVJGX0NPVU5URVJfSU9DX1NFVF9PVVRQVVQJX0lPICgnJCcsIDUpCiAKIGVudW0gcGVyZl9jb3VudGVyX2lvY19mbGFncyB7CiAJUEVSRl9JT0NfRkxBR19HUk9VUAkJPSAxVSA8PCAwLApAQCAtNDE1LDYgKzQxNiw5IEBACiAJUEVSRl9DT05URVhUX01BWAkJPSAoX191NjQpLTQwOTUsCiB9OwogCisjZGVmaW5lIFBFUkZfRkxBR19GRF9OT19HUk9VUAkoMVUgPDwgMCkKKyNkZWZpbmUgUEVSRl9GTEFHX0ZEX09VVFBVVAkoMVUgPDwgMSkKKwogI2lmZGVmIF9fS0VSTkVMX18KIC8qCiAgKiBLZXJuZWwtaW50ZXJuYWwgZGF0YSB0eXBlcyBhbmQgZGVmaW5pdGlvbnM6CkBAIC01MzYsNiArNTQwLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlzaWJsaW5nX2xpc3Q7CiAJaW50CQkJCW5yX3NpYmxpbmdzOwogCXN0cnVjdCBwZXJmX2NvdW50ZXIJCSpncm91cF9sZWFkZXI7CisJc3RydWN0IHBlcmZfY291bnRlcgkJKm91dHB1dDsKIAljb25zdCBzdHJ1Y3QgcG11CQkqcG11OwogCiAJZW51bSBwZXJmX2NvdW50ZXJfYWN0aXZlX3N0YXRlCXN0YXRlOwpAQCAtNzYxLDYgKzc2Niw4IEBACiBleHRlcm4gaW50IHN5c2N0bF9wZXJmX2NvdW50ZXJfc2FtcGxlX3JhdGU7CiAKIGV4dGVybiB2b2lkIHBlcmZfY291bnRlcl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcGVyZl90cGNvdW50ZXJfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LAorCQkJCSB2b2lkICpyZWNvcmQsIGludCBlbnRyeV9zaXplKTsKIAogI2lmbmRlZiBwZXJmX21pc2NfZmxhZ3MKICNkZWZpbmUgcGVyZl9taXNjX2ZsYWdzKHJlZ3MpCSh1c2VyX21vZGUocmVncykgPyBQRVJGX0VWRU5UX01JU0NfVVNFUiA6IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGhvbmV0LmggYi9pbmNsdWRlL2xpbnV4L3Bob25ldC5oCmluZGV4IGVlNWUzYzkuLjFlZjVhMDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGhvbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9waG9uZXQuaApAQCAtOTksNiArOTksOSBAQAogCV9fdTggc3BuX3plcm9bc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgLSBzaXplb2Yoc2FfZmFtaWx5X3QpIC0gM107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyogV2VsbCBrbm93biBhZGRyZXNzICovCisjZGVmaW5lIFBOX0RFVl9QQwkweDEwCisKIHN0YXRpYyBpbmxpbmUgX191MTYgcG5fb2JqZWN0KF9fdTggYWRkciwgX191MTYgcG9ydCkKIHsKIAlyZXR1cm4gKGFkZHIgPDwgOCkgfCAocG9ydCAmIDB4M2ZmKTsKQEAgLTE3MCw0ICsxNzMsMjEgQEAKIAlyZXR1cm4gc3BuLT5zcG5fcmVzb3VyY2U7CiB9CiAKKy8qIFBob25ldCBkZXZpY2UgaW9jdGwgcmVxdWVzdHMgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFNJT0NQTkdBVVRPQ09ORgkJKFNJT0NERVZQUklWQVRFICsgMCkKKworc3RydWN0IGlmX3Bob25ldF9hdXRvY29uZiB7CisJdWludDhfdCBkZXZpY2U7Cit9OworCitzdHJ1Y3QgaWZfcGhvbmV0X3JlcSB7CisJY2hhciBpZnJfcGhvbmV0X25hbWVbMTZdOworCXVuaW9uIHsKKwkJc3RydWN0IGlmX3Bob25ldF9hdXRvY29uZiBpZnJ1X3Bob25ldF9hdXRvY29uZjsKKwl9IGlmcl9pZnJ1OworfTsKKyNkZWZpbmUgaWZyX3Bob25ldF9hdXRvY29uZiBpZnJfaWZydS5pZnJ1X3Bob25ldF9hdXRvY29uZgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAppbmRleCA4ZGM1MTIzLi4zYzY2NzVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKQEAgLTIyLDYgKzIyLDkgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UJKiByZXNvdXJjZTsKIAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQJKmlkX2VudHJ5OworCisJLyogYXJjaCBzcGVjaWZpYyBhZGRpdGlvbnMgKi8KKwlzdHJ1Y3QgcGRldl9hcmNoZGF0YQlhcmNoZGF0YTsKIH07CiAKICNkZWZpbmUgcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KQkoKHBkZXYpLT5pZF9lbnRyeSkKQEAgLTU3LDggKzYwLDYgQEAKIAlpbnQgKCpyZW1vdmUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLQlpbnQgKCpzdXNwZW5kX2xhdGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLQlpbnQgKCpyZXN1bWVfZWFybHkpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZF90YWJsZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG0uaCBiL2luY2x1ZGUvbGludXgvcG0uaAppbmRleCBiM2Y3NDc2Li4zYjdlMDRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbS5oCkBAIC0yMiw2ICsyMiwxMCBAQAogI2RlZmluZSBfTElOVVhfUE1fSAogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAKIC8qCiAgKiBDYWxsYmFja3MgZm9yIHBsYXRmb3JtIGRyaXZlcnMgdG8gaW1wbGVtZW50LgpAQCAtMTY1LDYgKzE2OSwyOCBAQAogICogSXQgaXMgYWxsb3dlZCB0byB1bnJlZ2lzdGVyIGRldmljZXMgd2hpbGUgdGhlIGFib3ZlIGNhbGxiYWNrcyBhcmUgYmVpbmcKICAqIGV4ZWN1dGVkLiAgSG93ZXZlciwgaXQgaXMgbm90IGFsbG93ZWQgdG8gdW5yZWdpc3RlciBhIGRldmljZSBmcm9tIHdpdGhpbiBhbnkKICAqIG9mIGl0cyBvd24gY2FsbGJhY2tzLgorICoKKyAqIFRoZXJlIGFsc28gYXJlIHRoZSBmb2xsb3dpbmcgY2FsbGJhY2tzIHJlbGF0ZWQgdG8gcnVuLXRpbWUgcG93ZXIgbWFuYWdlbWVudAorICogb2YgZGV2aWNlczoKKyAqCisgKiBAcnVudGltZV9zdXNwZW5kOiBQcmVwYXJlIHRoZSBkZXZpY2UgZm9yIGEgY29uZGl0aW9uIGluIHdoaWNoIGl0IHdvbid0IGJlCisgKglhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIENQVShzKSBhbmQgUkFNIGR1ZSB0byBwb3dlciBtYW5hZ2VtZW50LgorICoJVGhpcyBuZWVkIG5vdCBtZWFuIHRoYXQgdGhlIGRldmljZSBzaG91bGQgYmUgcHV0IGludG8gYSBsb3cgcG93ZXIgc3RhdGUuCisgKglGb3IgZXhhbXBsZSwgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBsaW5rIHdoaWNoIGlzIGFib3V0IHRvIGJlIHR1cm5lZAorICoJb2ZmLCB0aGUgZGV2aWNlIG1heSByZW1haW4gYXQgZnVsbCBwb3dlci4gIElmIHRoZSBkZXZpY2UgZG9lcyBnbyB0byBsb3cKKyAqCXBvd2VyIGFuZCBpZiBkZXZpY2VfbWF5X3dha2V1cChkZXYpIGlzIHRydWUsIHJlbW90ZSB3YWtlLXVwIChpLmUuLCBhCisgKgloYXJkd2FyZSBtZWNoYW5pc20gYWxsb3dpbmcgdGhlIGRldmljZSB0byByZXF1ZXN0IGEgY2hhbmdlIG9mIGl0cyBwb3dlcgorICoJc3RhdGUsIHN1Y2ggYXMgUENJIFBNRSkgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIGl0LgorICoKKyAqIEBydW50aW1lX3Jlc3VtZTogUHV0IHRoZSBkZXZpY2UgaW50byB0aGUgZnVsbHkgYWN0aXZlIHN0YXRlIGluIHJlc3BvbnNlIHRvIGEKKyAqCXdha2UtdXAgZXZlbnQgZ2VuZXJhdGVkIGJ5IGhhcmR3YXJlIG9yIGF0IHRoZSByZXF1ZXN0IG9mIHNvZnR3YXJlLiAgSWYKKyAqCW5lY2Vzc2FyeSwgcHV0IHRoZSBkZXZpY2UgaW50byB0aGUgZnVsbCBwb3dlciBzdGF0ZSBhbmQgcmVzdG9yZSBpdHMKKyAqCXJlZ2lzdGVycywgc28gdGhhdCBpdCBpcyBmdWxseSBvcGVyYXRpb25hbC4KKyAqCisgKiBAcnVudGltZV9pZGxlOiBEZXZpY2UgYXBwZWFycyB0byBiZSBpbmFjdGl2ZSBhbmQgaXQgbWlnaHQgYmUgcHV0IGludG8gYSBsb3cKKyAqCXBvd2VyIHN0YXRlIGlmIGFsbCBvZiB0aGUgbmVjZXNzYXJ5IGNvbmRpdGlvbnMgYXJlIHNhdGlzZmllZC4gIENoZWNrCisgKgl0aGVzZSBjb25kaXRpb25zIGFuZCBoYW5kbGUgdGhlIGRldmljZSBhcyBhcHByb3ByaWF0ZSwgcG9zc2libHkgcXVldWVpbmcKKyAqCWEgc3VzcGVuZCByZXF1ZXN0IGZvciBpdC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZCBieSB0aGUgUE0gY29yZS4KICAqLwogCiBzdHJ1Y3QgZGV2X3BtX29wcyB7CkBAIC0xODIsOCArMjA4LDI1IEBACiAJaW50ICgqdGhhd19ub2lycSkoc3RydWN0IGRldmljZSAqZGV2KTsKIAlpbnQgKCpwb3dlcm9mZl9ub2lycSkoc3RydWN0IGRldmljZSAqZGV2KTsKIAlpbnQgKCpyZXN0b3JlX25vaXJxKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCWludCAoKnJ1bnRpbWVfc3VzcGVuZCkoc3RydWN0IGRldmljZSAqZGV2KTsKKwlpbnQgKCpydW50aW1lX3Jlc3VtZSkoc3RydWN0IGRldmljZSAqZGV2KTsKKwlpbnQgKCpydW50aW1lX2lkbGUpKHN0cnVjdCBkZXZpY2UgKmRldik7CiB9OwogCisvKgorICogVXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBzYW1lIHN1c3BlbmQgYW5kIHJlc3VtZSBjYWxsYmFja3MgZm9yIHN1c3BlbmQKKyAqIHRvIFJBTSBhbmQgaGliZXJuYXRpb24uCisgKi8KKyNkZWZpbmUgU0lNUExFX0RFVl9QTV9PUFMobmFtZSwgc3VzcGVuZF9mbiwgcmVzdW1lX2ZuKSBcCitzdHJ1Y3QgZGV2X3BtX29wcyBuYW1lID0geyBcCisJLnN1c3BlbmQgPSBzdXNwZW5kX2ZuLCBcCisJLnJlc3VtZSA9IHJlc3VtZV9mbiwgXAorCS5mcmVlemUgPSBzdXNwZW5kX2ZuLCBcCisJLnRoYXcgPSByZXN1bWVfZm4sIFwKKwkucG93ZXJvZmYgPSBzdXNwZW5kX2ZuLCBcCisJLnJlc3RvcmUgPSByZXN1bWVfZm4sIFwKK30KKwogLyoqCiAgKiBQTV9FVkVOVF8gbWVzc2FnZXMKICAqCkBAIC0zMTUsMTQgKzM1OCw4MCBAQAogCURQTV9PRkZfSVJRLAogfTsKIAorLyoqCisgKiBEZXZpY2UgcnVuLXRpbWUgcG93ZXIgbWFuYWdlbWVudCBzdGF0dXMuCisgKgorICogVGhlc2Ugc3RhdHVzIGxhYmVscyBhcmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBQTSBjb3JlIHRvIGluZGljYXRlIHRoZQorICogY3VycmVudCBzdGF0dXMgb2YgYSBkZXZpY2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBQTSBjb3JlIG9wZXJhdGlvbnMuICBUaGV5IGRvCisgKiBub3QgcmVmbGVjdCB0aGUgYWN0dWFsIHBvd2VyIHN0YXRlIG9mIHRoZSBkZXZpY2Ugb3IgaXRzIHN0YXR1cyBhcyBzZWVuIGJ5IHRoZQorICogZHJpdmVyLgorICoKKyAqIFJQTV9BQ1RJVkUJCURldmljZSBpcyBmdWxseSBvcGVyYXRpb25hbC4gIEluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UKKyAqCQkJYnVzIHR5cGUncyAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgaGFzIGNvbXBsZXRlZAorICoJCQlzdWNjZXNzZnVsbHkuCisgKgorICogUlBNX1NVU1BFTkRFRAlEZXZpY2UgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIGhhcworICoJCQljb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiAgVGhlIGRldmljZSBpcyByZWdhcmRlZCBhcworICoJCQlzdXNwZW5kZWQuCisgKgorICogUlBNX1JFU1VNSU5HCQlEZXZpY2UgYnVzIHR5cGUncyAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgaXMgYmVpbmcKKyAqCQkJZXhlY3V0ZWQuCisgKgorICogUlBNX1NVU1BFTkRJTkcJRGV2aWNlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3N1c3BlbmQoKSBjYWxsYmFjayBpcyBiZWluZworICoJCQlleGVjdXRlZC4KKyAqLworCitlbnVtIHJwbV9zdGF0dXMgeworCVJQTV9BQ1RJVkUgPSAwLAorCVJQTV9SRVNVTUlORywKKwlSUE1fU1VTUEVOREVELAorCVJQTV9TVVNQRU5ESU5HLAorfTsKKworLyoqCisgKiBEZXZpY2UgcnVuLXRpbWUgcG93ZXIgbWFuYWdlbWVudCByZXF1ZXN0IHR5cGVzLgorICoKKyAqIFJQTV9SRVFfTk9ORQkJRG8gbm90aGluZy4KKyAqCisgKiBSUE1fUkVRX0lETEUJCVJ1biB0aGUgZGV2aWNlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX2lkbGUoKSBjYWxsYmFjaworICoKKyAqIFJQTV9SRVFfU1VTUEVORAlSdW4gdGhlIGRldmljZSBidXMgdHlwZSdzIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sKKyAqCisgKiBSUE1fUkVRX1JFU1VNRQlSdW4gdGhlIGRldmljZSBidXMgdHlwZSdzIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjaworICovCisKK2VudW0gcnBtX3JlcXVlc3QgeworCVJQTV9SRVFfTk9ORSA9IDAsCisJUlBNX1JFUV9JRExFLAorCVJQTV9SRVFfU1VTUEVORCwKKwlSUE1fUkVRX1JFU1VNRSwKK307CisKIHN0cnVjdCBkZXZfcG1faW5mbyB7CiAJcG1fbWVzc2FnZV90CQlwb3dlcl9zdGF0ZTsKLQl1bnNpZ25lZAkJY2FuX3dha2V1cDoxOwotCXVuc2lnbmVkCQlzaG91bGRfd2FrZXVwOjE7CisJdW5zaWduZWQgaW50CQljYW5fd2FrZXVwOjE7CisJdW5zaWduZWQgaW50CQlzaG91bGRfd2FrZXVwOjE7CiAJZW51bSBkcG1fc3RhdGUJCXN0YXR1czsJCS8qIE93bmVkIGJ5IHRoZSBQTSBjb3JlICovCi0jaWZkZWYJQ09ORklHX1BNX1NMRUVQCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAJc3RydWN0IGxpc3RfaGVhZAllbnRyeTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisJc3RydWN0IHRpbWVyX2xpc3QJc3VzcGVuZF90aW1lcjsKKwl1bnNpZ25lZCBsb25nCQl0aW1lcl9leHBpcmVzOworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfcXVldWU7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlhdG9taWNfdAkJdXNhZ2VfY291bnQ7CisJYXRvbWljX3QJCWNoaWxkX2NvdW50OworCXVuc2lnbmVkIGludAkJZGlzYWJsZV9kZXB0aDozOworCXVuc2lnbmVkIGludAkJaWdub3JlX2NoaWxkcmVuOjE7CisJdW5zaWduZWQgaW50CQlpZGxlX25vdGlmaWNhdGlvbjoxOworCXVuc2lnbmVkIGludAkJcmVxdWVzdF9wZW5kaW5nOjE7CisJdW5zaWduZWQgaW50CQlkZWZlcnJlZF9yZXN1bWU6MTsKKwllbnVtIHJwbV9yZXF1ZXN0CXJlcXVlc3Q7CisJZW51bSBycG1fc3RhdHVzCQlydW50aW1lX3N0YXR1czsKKwlpbnQJCQlydW50aW1lX2Vycm9yOworI2VuZGlmCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmggYi9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDA4NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBwbV9ydW50aW1lLmggLSBEZXZpY2UgcnVuLXRpbWUgcG93ZXIgbWFuYWdlbWVudCBoZWxwZXIgZnVuY3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+CisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9QTV9SVU5USU1FX0gKKyNkZWZpbmUgX0xJTlVYX1BNX1JVTlRJTUVfSAorCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcG1fd3E7CisKK2V4dGVybiBpbnQgcG1fcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbV9yZXF1ZXN0X2lkbGUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcG1fc2NoZWR1bGVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBkZWxheSk7CitleHRlcm4gaW50IHBtX3JlcXVlc3RfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IF9fcG1fcnVudGltZV9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBib29sIHN5bmMpOworZXh0ZXJuIGludCBfX3BtX3J1bnRpbWVfcHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBzeW5jKTsKK2V4dGVybiBpbnQgX19wbV9ydW50aW1lX3NldF9zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc3RhdHVzKTsKK2V4dGVybiBpbnQgcG1fcnVudGltZV9iYXJyaWVyKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwbV9ydW50aW1lX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgX19wbV9ydW50aW1lX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGNoZWNrX3Jlc3VtZSk7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwbV9jaGlsZHJlbl9zdXNwZW5kZWQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPnBvd2VyLmlnbm9yZV9jaGlsZHJlbgorCQl8fCAhYXRvbWljX3JlYWQoJmRldi0+cG93ZXIuY2hpbGRfY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSkKK3sKKwlkZXYtPnBvd2VyLmlnbm9yZV9jaGlsZHJlbiA9IGVuYWJsZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlhdG9taWNfaW5jKCZkZXYtPnBvd2VyLnVzYWdlX2NvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfcHV0X25vaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJYXRvbWljX2FkZF91bmxlc3MoJmRldi0+cG93ZXIudXNhZ2VfY291bnQsIC0xLCAwKTsKK30KKworI2Vsc2UgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHBtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIC1FTk9TWVM7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIC1FTk9TWVM7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcG1fcmVxdWVzdF9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gLUVOT1NZUzsgfQorc3RhdGljIGlubGluZSBpbnQgcG1fc2NoZWR1bGVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBkZWxheSkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHBtX3JlcXVlc3RfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgX19wbV9ydW50aW1lX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgc3luYykgeyByZXR1cm4gMTsgfQorc3RhdGljIGlubGluZSBpbnQgX19wbV9ydW50aW1lX3B1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgc3luYykgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgX19wbV9ydW50aW1lX3NldF9zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgdW5zaWduZWQgaW50IHN0YXR1cykgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcG1fcnVudGltZV9iYXJyaWVyKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BtX3J1bnRpbWVfZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgYykge30KKworc3RhdGljIGlubGluZSBib29sIHBtX2NoaWxkcmVuX3N1c3BlbmRlZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIGZhbHNlOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX3B1dF9ub2lkbGUoc3RydWN0IGRldmljZSAqZGV2KSB7fQorCisjZW5kaWYgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHBtX3J1bnRpbWVfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gX19wbV9ydW50aW1lX2dldChkZXYsIGZhbHNlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG1fcnVudGltZV9nZXRfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIF9fcG1fcnVudGltZV9nZXQoZGV2LCB0cnVlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG1fcnVudGltZV9wdXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBfX3BtX3J1bnRpbWVfcHV0KGRldiwgZmFsc2UpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX3B1dF9zeW5jKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gX19wbV9ydW50aW1lX3B1dChkZXYsIHRydWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX3NldF9hY3RpdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBfX3BtX3J1bnRpbWVfc2V0X3N0YXR1cyhkZXYsIFJQTV9BQ1RJVkUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlfX3BtX3J1bnRpbWVfc2V0X3N0YXR1cyhkZXYsIFJQTV9TVVNQRU5ERUQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlfX3BtX3J1bnRpbWVfZGlzYWJsZShkZXYsIHRydWUpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1Y2xhc3NpYy5oIGIvaW5jbHVkZS9saW51eC9yY3VjbGFzc2ljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZDkyZTEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VjbGFzc2ljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIFJlYWQtQ29weSBVcGRhdGUgbWVjaGFuaXNtIGZvciBtdXR1YWwgZXhjbHVzaW9uIChjbGFzc2ljIHZlcnNpb24pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAyMDAxCi0gKgotICogQXV0aG9yOiBEaXBhbmthciBTYXJtYSA8ZGlwYW5rYXJAaW4uaWJtLmNvbT4KLSAqCi0gKiBCYXNlZCBvbiB0aGUgb3JpZ2luYWwgd29yayBieSBQYXVsIE1jS2VubmV5IDxwYXVsbWNrQHVzLmlibS5jb20+Ci0gKiBhbmQgaW5wdXRzIGZyb20gUnVzdHkgUnVzc2VsbCwgQW5kcmVhIEFyY2FuZ2VsaSBhbmQgQW5kaSBLbGVlbi4KLSAqIFBhcGVyczoKLSAqIGh0dHA6Ly93d3cucmRyb3AuY29tL3VzZXJzL3BhdWxtY2svcGFwZXIvcmNsb2NrcGRjc3Byb29mLnBkZgotICogaHR0cDovL2xzZS5zb3VyY2Vmb3JnZS5uZXQvbG9ja2luZy9yY2xvY2tfT0xTLjIwMDEuMDUuMDFjLnNjLnBkZiAoT0xTMjAwMSkKLSAqCi0gKiBGb3IgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgUmVhZC1Db3B5IFVwZGF0ZSBtZWNoYW5pc20gc2VlIC0KLSAqIAkJRG9jdW1lbnRhdGlvbi9SQ1UKLSAqCi0gKi8KLQotI2lmbmRlZiBfX0xJTlVYX1JDVUNMQVNTSUNfSAotI2RlZmluZSBfX0xJTlVYX1JDVUNMQVNTSUNfSAotCi0jaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgotCi0jaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKLSNkZWZpbmUgUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9DSEVDSwkoMTAgKiBIWikgLyogZm9yIHJjcC0+amlmZmllc19zdGFsbCAqLwotI2RlZmluZSBSQ1VfU0VDT05EU19USUxMX1NUQUxMX1JFQ0hFQ0sJKDMwICogSFopIC8qIGZvciByY3AtPmppZmZpZXNfc3RhbGwgKi8KLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KLQotLyogR2xvYmFsIGNvbnRyb2wgdmFyaWFibGVzIGZvciByY3VwZGF0ZSBjYWxsYmFjayBtZWNoYW5pc20uICovCi1zdHJ1Y3QgcmN1X2N0cmxibGsgewotCWxvbmcJY3VyOwkJLyogQ3VycmVudCBiYXRjaCBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICovCi0JbG9uZwljb21wbGV0ZWQ7CS8qIE51bWJlciBvZiB0aGUgbGFzdCBjb21wbGV0ZWQgYmF0Y2ggICAgICAgICAqLwotCWxvbmcJcGVuZGluZzsJLyogTnVtYmVyIG9mIHRoZSBsYXN0IHBlbmRpbmcgYmF0Y2ggICAgICAgICAgICovCi0jaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKLQl1bnNpZ25lZCBsb25nIGdwX3N0YXJ0OwkvKiBUaW1lIGF0IHdoaWNoIEdQIHN0YXJ0ZWQgaW4gamlmZmllcy4gKi8KLQl1bnNpZ25lZCBsb25nIGppZmZpZXNfc3RhbGw7Ci0JCQkJLyogVGltZSBhdCB3aGljaCB0byBjaGVjayBmb3IgQ1BVIHN0YWxscy4gKi8KLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KLQotCWludAlzaWduYWxlZDsKLQotCXNwaW5sb2NrX3QJbG9jawlfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwotCURFQ0xBUkVfQklUTUFQKGNwdW1hc2ssIE5SX0NQVVMpOyAvKiBDUFVzIHRoYXQgbmVlZCB0byBzd2l0Y2ggZm9yICovCi0JCQkJCSAgLyogY3VycmVudCBiYXRjaCB0byBwcm9jZWVkLiAgICAgKi8KLX0gX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcDsKLQotLyogSXMgYmF0Y2ggYSBiZWZvcmUgYmF0Y2ggYiA/ICovCi1zdGF0aWMgaW5saW5lIGludCByY3VfYmF0Y2hfYmVmb3JlKGxvbmcgYSwgbG9uZyBiKQotewotCXJldHVybiAoYSAtIGIpIDwgMDsKLX0KLQotLyogSXMgYmF0Y2ggYSBhZnRlciBiYXRjaCBiID8gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJjdV9iYXRjaF9hZnRlcihsb25nIGEsIGxvbmcgYikKLXsKLQlyZXR1cm4gKGEgLSBiKSA+IDA7Ci19Ci0KLS8qIFBlci1DUFUgZGF0YSBmb3IgUmVhZC1Db3B5IFVQZGF0ZS4gKi8KLXN0cnVjdCByY3VfZGF0YSB7Ci0JLyogMSkgcXVpZXNjZW50IHN0YXRlIGhhbmRsaW5nIDogKi8KLQlsb25nCQlxdWllc2NiYXRjaDsgICAgIC8qIEJhdGNoICMgZm9yIGdyYWNlIHBlcmlvZCAqLwotCWludAkJcGFzc2VkX3F1aWVzYzsJIC8qIFVzZXItbW9kZS9pZGxlIGxvb3AgZXRjLiAqLwotCWludAkJcXNfcGVuZGluZzsJIC8qIGNvcmUgd2FpdHMgZm9yIHF1aWVzYyBzdGF0ZSAqLwotCi0JLyogMikgYmF0Y2ggaGFuZGxpbmcgKi8KLQkvKgotCSAqIGlmIG54dGxpc3QgaXMgbm90IE5VTEwsIHRoZW46Ci0JICogYmF0Y2g6Ci0JICoJVGhlIGJhdGNoICMgZm9yIHRoZSBsYXN0IGVudHJ5IG9mIG54dGxpc3QKLQkgKiBbKm54dHRhaWxbMV0sIE5VTEwgPSAqbnh0dGFpbFsyXSk6Ci0JICoJRW50cmllcyB0aGF0IGJhdGNoICMgPD0gYmF0Y2gKLQkgKiBbKm54dHRhaWxbMF0sICpueHR0YWlsWzFdKToKLQkgKglFbnRyaWVzIHRoYXQgYmF0Y2ggIyA8PSBiYXRjaCAtIDEKLQkgKiBbbnh0bGlzdCwgKm54dHRhaWxbMF0pOgotCSAqCUVudHJpZXMgdGhhdCBiYXRjaCAjIDw9IGJhdGNoIC0gMgotCSAqCVRoZSBncmFjZSBwZXJpb2QgZm9yIHRoZXNlIGVudHJpZXMgaGFzIGNvbXBsZXRlZCwgYW5kCi0JICoJdGhlIG90aGVyIGdyYWNlLXBlcmlvZC1jb21wbGV0ZWQgZW50cmllcyBtYXkgYmUgbW92ZWQKLQkgKgloZXJlIHRlbXBvcmFyaWx5IGluIHJjdV9wcm9jZXNzX2NhbGxiYWNrcygpLgotCSAqLwotCWxvbmcgIAkgICAgICAgCWJhdGNoOwotCXN0cnVjdCByY3VfaGVhZCAqbnh0bGlzdDsKLQlzdHJ1Y3QgcmN1X2hlYWQgKipueHR0YWlsWzNdOwotCWxvbmcgICAgICAgICAgICBxbGVuOyAJIAkgLyogIyBvZiBxdWV1ZWQgY2FsbGJhY2tzICovCi0Jc3RydWN0IHJjdV9oZWFkICpkb25lbGlzdDsKLQlzdHJ1Y3QgcmN1X2hlYWQgKipkb25ldGFpbDsKLQlsb25nCQlibGltaXQ7CQkgLyogVXBwZXIgbGltaXQgb24gYSBwcm9jZXNzZWQgYmF0Y2ggKi8KLQlpbnQgY3B1OwotCXN0cnVjdCByY3VfaGVhZCBiYXJyaWVyOwotfTsKLQotLyoKLSAqIEluY3JlbWVudCB0aGUgcXVpZXNjZW50IHN0YXRlIGNvdW50ZXIuCi0gKiBUaGUgY291bnRlciBpcyBhIGJpdCBkZWdlbmVyYXRlZDogV2UgZG8gbm90IG5lZWQgdG8ga25vdwotICogaG93IG1hbnkgcXVpZXNjZW50IHN0YXRlcyBwYXNzZWQsIGp1c3QgaWYgdGhlcmUgd2FzIGF0IGxlYXN0Ci0gKiBvbmUgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSBncmFjZSBwZXJpb2QuIFRodXMganVzdCBhIGZsYWcuCi0gKi8KLWV4dGVybiB2b2lkIHJjdV9xc2N0cl9pbmMoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCByY3VfYmhfcXNjdHJfaW5jKGludCBjcHUpOwotCi1leHRlcm4gaW50IHJjdV9wZW5kaW5nKGludCBjcHUpOwotZXh0ZXJuIGludCByY3VfbmVlZHNfY3B1KGludCBjcHUpOwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKLWV4dGVybiBzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X2xvY2tfbWFwOwotIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZSgpCVwKLQkJCWxvY2tfYWNxdWlyZSgmcmN1X2xvY2tfbWFwLCAwLCAwLCAyLCAxLCBOVUxMLCBfVEhJU19JUF8pCi0jIGRlZmluZSByY3VfcmVhZF9yZWxlYXNlKCkJbG9ja19yZWxlYXNlKCZyY3VfbG9ja19tYXAsIDEsIF9USElTX0lQXykKLSNlbHNlCi0jIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlKCkJZG8geyB9IHdoaWxlICgwKQotIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZSgpCWRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZGVmaW5lIF9fcmN1X3JlYWRfbG9jaygpIFwKLQlkbyB7IFwKLQkJcHJlZW1wdF9kaXNhYmxlKCk7IFwKLQkJX19hY3F1aXJlKFJDVSk7IFwKLQkJcmN1X3JlYWRfYWNxdWlyZSgpOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgX19yY3VfcmVhZF91bmxvY2soKSBcCi0JZG8geyBcCi0JCXJjdV9yZWFkX3JlbGVhc2UoKTsgXAotCQlfX3JlbGVhc2UoUkNVKTsgXAotCQlwcmVlbXB0X2VuYWJsZSgpOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgX19yY3VfcmVhZF9sb2NrX2JoKCkgXAotCWRvIHsgXAotCQlsb2NhbF9iaF9kaXNhYmxlKCk7IFwKLQkJX19hY3F1aXJlKFJDVV9CSCk7IFwKLQkJcmN1X3JlYWRfYWNxdWlyZSgpOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgX19yY3VfcmVhZF91bmxvY2tfYmgoKSBcCi0JZG8geyBcCi0JCXJjdV9yZWFkX3JlbGVhc2UoKTsgXAotCQlfX3JlbGVhc2UoUkNVX0JIKTsgXAotCQlsb2NhbF9iaF9lbmFibGUoKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX19zeW5jaHJvbml6ZV9zY2hlZCgpIHN5bmNocm9uaXplX3JjdSgpCi0KLSNkZWZpbmUgY2FsbF9yY3Vfc2NoZWQoaGVhZCwgZnVuYykgY2FsbF9yY3UoaGVhZCwgZnVuYykKLQotZXh0ZXJuIHZvaWQgX19yY3VfaW5pdCh2b2lkKTsKLSNkZWZpbmUgcmN1X2luaXRfc2NoZWQoKQlkbyB7IH0gd2hpbGUgKDApCi1leHRlcm4gdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKTsKLWV4dGVybiB2b2lkIHJjdV9yZXN0YXJ0X2NwdShpbnQgY3B1KTsKLQotZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkKHZvaWQpOwotZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKHZvaWQpOwotCi0jZGVmaW5lIHJjdV9lbnRlcl9ub2h6KCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSByY3VfZXhpdF9ub2h6KCkJCWRvIHsgfSB3aGlsZSAoMCkKLQotLyogQSBjb250ZXh0IHN3aXRjaCBpcyBhIGdyYWNlIHBlcmlvZCBmb3IgcmN1Y2xhc3NpYy4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJjdV9ibG9ja2luZ19pc19ncCh2b2lkKQotewotCXJldHVybiBudW1fb25saW5lX2NwdXMoKSA9PSAxOwotfQotCi0jZW5kaWYgLyogX19MSU5VWF9SQ1VDTEFTU0lDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCAxNWZiYjNjLi45NWUwNjE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC01MSwxOCArNTEsMjYgQEAKIAl2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkKTsKIH07CiAKLS8qIEludGVybmFsIHRvIGtlcm5lbCwgYnV0IG5lZWRlZCBieSByY3VwcmVlbXB0LmguICovCisvKiBFeHBvcnRlZCBjb21tb24gaW50ZXJmYWNlcyAqLworZXh0ZXJuIHZvaWQgc3luY2hyb25pemVfcmN1KHZvaWQpOworZXh0ZXJuIHZvaWQgc3luY2hyb25pemVfcmN1X2JoKHZvaWQpOworZXh0ZXJuIHZvaWQgcmN1X2JhcnJpZXIodm9pZCk7CitleHRlcm4gdm9pZCByY3VfYmFycmllcl9iaCh2b2lkKTsKK2V4dGVybiB2b2lkIHJjdV9iYXJyaWVyX3NjaGVkKHZvaWQpOworZXh0ZXJuIHZvaWQgc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKHZvaWQpOworZXh0ZXJuIGludCBzY2hlZF9leHBlZGl0ZWRfdG9ydHVyZV9zdGF0cyhjaGFyICpwYWdlKTsKKworLyogSW50ZXJuYWwgdG8ga2VybmVsICovCitleHRlcm4gdm9pZCByY3VfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZCk7CitleHRlcm4gaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSk7CiBleHRlcm4gaW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQ0xBU1NJQ19SQ1UpCi0jaW5jbHVkZSA8bGludXgvcmN1Y2xhc3NpYy5oPgotI2VsaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpCisjaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpCiAjaW5jbHVkZSA8bGludXgvcmN1dHJlZS5oPgotI2VsaWYgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpCi0jaW5jbHVkZSA8bGludXgvcmN1cHJlZW1wdC5oPgogI2Vsc2UKICNlcnJvciAiVW5rbm93biBSQ1UgaW1wbGVtZW50YXRpb24gc3BlY2lmaWVkIHRvIGtlcm5lbCBjb25maWd1cmF0aW9uIgotI2VuZGlmIC8qICNlbHNlICNpZiBkZWZpbmVkKENPTkZJR19DTEFTU0lDX1JDVSkgKi8KKyNlbmRpZgogCiAjZGVmaW5lIFJDVV9IRUFEX0lOSVQgCXsgLm5leHQgPSBOVUxMLCAuZnVuYyA9IE5VTEwgfQogI2RlZmluZSBSQ1VfSEVBRChoZWFkKSBzdHJ1Y3QgcmN1X2hlYWQgaGVhZCA9IFJDVV9IRUFEX0lOSVQKQEAgLTcwLDYgKzc4LDE2IEBACiAgICAgICAgKHB0ciktPm5leHQgPSBOVUxMOyAocHRyKS0+ZnVuYyA9IE5VTEw7IFwKIH0gd2hpbGUgKDApCiAKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworZXh0ZXJuIHN0cnVjdCBsb2NrZGVwX21hcCByY3VfbG9ja19tYXA7CisjIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlKCkJXAorCQkJbG9ja19hY3F1aXJlKCZyY3VfbG9ja19tYXAsIDAsIDAsIDIsIDEsIE5VTEwsIF9USElTX0lQXykKKyMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2UoKQlsb2NrX3JlbGVhc2UoJnJjdV9sb2NrX21hcCwgMSwgX1RISVNfSVBfKQorI2Vsc2UKKyMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmUoKQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByY3VfcmVhZF9yZWxlYXNlKCkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKIC8qKgogICogcmN1X3JlYWRfbG9jayAtIG1hcmsgdGhlIGJlZ2lubmluZyBvZiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCiAgKgpAQCAtOTksNyArMTE3LDEyIEBACiAgKgogICogSXQgaXMgaWxsZWdhbCB0byBibG9jayB3aGlsZSBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCiAgKi8KLSNkZWZpbmUgcmN1X3JlYWRfbG9jaygpIF9fcmN1X3JlYWRfbG9jaygpCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3JlYWRfbG9jayh2b2lkKQoreworCV9fcmN1X3JlYWRfbG9jaygpOworCV9fYWNxdWlyZShSQ1UpOworCXJjdV9yZWFkX2FjcXVpcmUoKTsKK30KIAogLyoqCiAgKiByY3VfcmVhZF91bmxvY2sgLSBtYXJrcyB0aGUgZW5kIG9mIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KQEAgLTExNiw3ICsxMzksMTIgQEAKICAqIHVzZWQgYXMgd2VsbC4gIFJDVSBkb2VzIG5vdCBjYXJlIGhvdyB0aGUgd3JpdGVycyBrZWVwIG91dCBvZiBlYWNoCiAgKiBvdGhlcnMnIHdheSwgYXMgbG9uZyBhcyB0aGV5IGRvIHNvLgogICovCi0jZGVmaW5lIHJjdV9yZWFkX3VubG9jaygpIF9fcmN1X3JlYWRfdW5sb2NrKCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2sodm9pZCkKK3sKKwlyY3VfcmVhZF9yZWxlYXNlKCk7CisJX19yZWxlYXNlKFJDVSk7CisJX19yY3VfcmVhZF91bmxvY2soKTsKK30KIAogLyoqCiAgKiByY3VfcmVhZF9sb2NrX2JoIC0gbWFyayB0aGUgYmVnaW5uaW5nIG9mIGEgc29mdGlycS1vbmx5IFJDVSBjcml0aWNhbCBzZWN0aW9uCkBAIC0xMjksMTQgKzE1NywyNCBAQAogICogY2FuIHVzZSBqdXN0IHJjdV9yZWFkX2xvY2soKS4KICAqCiAgKi8KLSNkZWZpbmUgcmN1X3JlYWRfbG9ja19iaCgpIF9fcmN1X3JlYWRfbG9ja19iaCgpCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3JlYWRfbG9ja19iaCh2b2lkKQoreworCV9fcmN1X3JlYWRfbG9ja19iaCgpOworCV9fYWNxdWlyZShSQ1VfQkgpOworCXJjdV9yZWFkX2FjcXVpcmUoKTsKK30KIAogLyoKICAqIHJjdV9yZWFkX3VubG9ja19iaCAtIG1hcmtzIHRoZSBlbmQgb2YgYSBzb2Z0aXJxLW9ubHkgUkNVIGNyaXRpY2FsIHNlY3Rpb24KICAqCiAgKiBTZWUgcmN1X3JlYWRfbG9ja19iaCgpIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICovCi0jZGVmaW5lIHJjdV9yZWFkX3VubG9ja19iaCgpIF9fcmN1X3JlYWRfdW5sb2NrX2JoKCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2tfYmgodm9pZCkKK3sKKwlyY3VfcmVhZF9yZWxlYXNlKCk7CisJX19yZWxlYXNlKFJDVV9CSCk7CisJX19yY3VfcmVhZF91bmxvY2tfYmgoKTsKK30KIAogLyoqCiAgKiByY3VfcmVhZF9sb2NrX3NjaGVkIC0gbWFyayB0aGUgYmVnaW5uaW5nIG9mIGEgUkNVLWNsYXNzaWMgY3JpdGljYWwgc2VjdGlvbgpAQCAtMTQ3LDE3ICsxODUsMzQgQEAKICAqIC0gY2FsbF9yY3Vfc2NoZWQoKSBhbmQgcmN1X2JhcnJpZXJfc2NoZWQoKQogICogb24gdGhlIHdyaXRlLXNpZGUgdG8gaW5zdXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24uCiAgKi8KLSNkZWZpbmUgcmN1X3JlYWRfbG9ja19zY2hlZCgpIHByZWVtcHRfZGlzYWJsZSgpCi0jZGVmaW5lIHJjdV9yZWFkX2xvY2tfc2NoZWRfbm90cmFjZSgpIHByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCkKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF9sb2NrX3NjaGVkKHZvaWQpCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJX19hY3F1aXJlKFJDVV9TQ0hFRCk7CisJcmN1X3JlYWRfYWNxdWlyZSgpOworfQorc3RhdGljIGlubGluZSBub3RyYWNlIHZvaWQgcmN1X3JlYWRfbG9ja19zY2hlZF9ub3RyYWNlKHZvaWQpCit7CisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKKwlfX2FjcXVpcmUoUkNVX1NDSEVEKTsKK30KIAogLyoKICAqIHJjdV9yZWFkX3VubG9ja19zY2hlZCAtIG1hcmtzIHRoZSBlbmQgb2YgYSBSQ1UtY2xhc3NpYyBjcml0aWNhbCBzZWN0aW9uCiAgKgogICogU2VlIHJjdV9yZWFkX2xvY2tfc2NoZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKi8KLSNkZWZpbmUgcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCkgcHJlZW1wdF9lbmFibGUoKQotI2RlZmluZSByY3VfcmVhZF91bmxvY2tfc2NoZWRfbm90cmFjZSgpIHByZWVtcHRfZW5hYmxlX25vdHJhY2UoKQotCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3JlYWRfdW5sb2NrX3NjaGVkKHZvaWQpCit7CisJcmN1X3JlYWRfcmVsZWFzZSgpOworCV9fcmVsZWFzZShSQ1VfU0NIRUQpOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CitzdGF0aWMgaW5saW5lIG5vdHJhY2Ugdm9pZCByY3VfcmVhZF91bmxvY2tfc2NoZWRfbm90cmFjZSh2b2lkKQoreworCV9fcmVsZWFzZShSQ1VfU0NIRUQpOworCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKK30KIAogCiAvKioKQEAgLTI1OSwxNSArMzE0LDQgQEAKIGV4dGVybiB2b2lkIGNhbGxfcmN1X2JoKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKIAkJCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpKTsKIAotLyogRXhwb3J0ZWQgY29tbW9uIGludGVyZmFjZXMgKi8KLWV4dGVybiB2b2lkIHN5bmNocm9uaXplX3JjdSh2b2lkKTsKLWV4dGVybiB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpOwotZXh0ZXJuIHZvaWQgcmN1X2JhcnJpZXJfYmgodm9pZCk7Ci1leHRlcm4gdm9pZCByY3VfYmFycmllcl9zY2hlZCh2b2lkKTsKLQotLyogSW50ZXJuYWwgdG8ga2VybmVsICovCi1leHRlcm4gdm9pZCByY3VfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZCk7Ci1leHRlcm4gaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSk7Ci0KICNlbmRpZiAvKiBfX0xJTlVYX1JDVVBEQVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cHJlZW1wdC5oIGIvaW5jbHVkZS9saW51eC9yY3VwcmVlbXB0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZTUyMjcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwcmVlbXB0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIFJlYWQtQ29weSBVcGRhdGUgbWVjaGFuaXNtIGZvciBtdXR1YWwgZXhjbHVzaW9uIChSVCBpbXBsZW1lbnRhdGlvbikKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDA2Ci0gKgotICogQXV0aG9yOiAgUGF1bCBNY0tlbm5leSA8cGF1bG1ja0B1cy5pYm0uY29tPgotICoKLSAqIEJhc2VkIG9uIHRoZSBvcmlnaW5hbCB3b3JrIGJ5IFBhdWwgTWNLZW5uZXkgPHBhdWwubWNrZW5uZXlAdXMuaWJtLmNvbT4KLSAqIGFuZCBpbnB1dHMgZnJvbSBSdXN0eSBSdXNzZWxsLCBBbmRyZWEgQXJjYW5nZWxpIGFuZCBBbmRpIEtsZWVuLgotICogUGFwZXJzOgotICogaHR0cDovL3d3dy5yZHJvcC5jb20vdXNlcnMvcGF1bG1jay9wYXBlci9yY2xvY2twZGNzcHJvb2YucGRmCi0gKiBodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjbG9ja19PTFMuMjAwMS4wNS4wMWMuc2MucGRmIChPTFMyMDAxKQotICoKLSAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQotICogCQlEb2N1bWVudGF0aW9uL1JDVQotICoKLSAqLwotCi0jaWZuZGVmIF9fTElOVVhfUkNVUFJFRU1QVF9ICi0jZGVmaW5lIF9fTElOVVhfUkNVUFJFRU1QVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+Ci0KLWV4dGVybiB2b2lkIHJjdV9xc2N0cl9pbmMoaW50IGNwdSk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmN1X2JoX3FzY3RyX2luYyhpbnQgY3B1KSB7IH0KLQotLyoKLSAqIFNvbWVvbmUgbWlnaHQgd2FudCB0byBwYXNzIGNhbGxfcmN1X2JoIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4KLSAqIFNvIHRoaXMgbmVlZHMgdG8ganVzdCBiZSBhIHJlbmFtZSBhbmQgbm90IGEgbWFjcm8gZnVuY3Rpb24uCi0gKiAgKG5vIHBhcmVudGhlc2VzKQotICovCi0jZGVmaW5lIGNhbGxfcmN1X2JoCQljYWxsX3JjdQotCi0vKioKLSAqIGNhbGxfcmN1X3NjaGVkIC0gUXVldWUgUkNVIGNhbGxiYWNrIGZvciBpbnZvY2F0aW9uIGFmdGVyIHNjaGVkIGdyYWNlIHBlcmlvZC4KLSAqIEBoZWFkOiBzdHJ1Y3R1cmUgdG8gYmUgdXNlZCBmb3IgcXVldWVpbmcgdGhlIFJDVSB1cGRhdGVzLgotICogQGZ1bmM6IGFjdHVhbCB1cGRhdGUgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUgZ3JhY2UgcGVyaW9kCi0gKgotICogVGhlIHVwZGF0ZSBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgc29tZSB0aW1lIGFmdGVyIGEgZnVsbAotICogc3luY2hyb25pemVfc2NoZWQoKS1zdHlsZSBncmFjZSBwZXJpb2QgZWxhcHNlcywgaW4gb3RoZXIgd29yZHMgYWZ0ZXIKLSAqIGFsbCBjdXJyZW50bHkgZXhlY3V0aW5nIHByZWVtcHQtZGlzYWJsZWQgc2VjdGlvbnMgb2YgY29kZSAoaW5jbHVkaW5nCi0gKiBoYXJkaXJxIGhhbmRsZXJzLCBOTUkgaGFuZGxlcnMsIGFuZCBsb2NhbF9pcnFfc2F2ZSgpIGJsb2NrcykgaGF2ZQotICogY29tcGxldGVkLgotICovCi1leHRlcm4gdm9pZCBjYWxsX3JjdV9zY2hlZChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCi0JCQkgICB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkKSk7Ci0KLWV4dGVybiB2b2lkIF9fcmN1X3JlYWRfbG9jayh2b2lkKQlfX2FjcXVpcmVzKFJDVSk7Ci1leHRlcm4gdm9pZCBfX3JjdV9yZWFkX3VubG9jayh2b2lkKQlfX3JlbGVhc2VzKFJDVSk7Ci1leHRlcm4gaW50IHJjdV9wZW5kaW5nKGludCBjcHUpOwotZXh0ZXJuIGludCByY3VfbmVlZHNfY3B1KGludCBjcHUpOwotCi0jZGVmaW5lIF9fcmN1X3JlYWRfbG9ja19iaCgpCXsgcmN1X3JlYWRfbG9jaygpOyBsb2NhbF9iaF9kaXNhYmxlKCk7IH0KLSNkZWZpbmUgX19yY3VfcmVhZF91bmxvY2tfYmgoKQl7IGxvY2FsX2JoX2VuYWJsZSgpOyByY3VfcmVhZF91bmxvY2soKTsgfQotCi1leHRlcm4gdm9pZCBfX3N5bmNocm9uaXplX3NjaGVkKHZvaWQpOwotCi1leHRlcm4gdm9pZCBfX3JjdV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgcmN1X2luaXRfc2NoZWQodm9pZCk7Ci1leHRlcm4gdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKTsKLWV4dGVybiB2b2lkIHJjdV9yZXN0YXJ0X2NwdShpbnQgY3B1KTsKLWV4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKTsKLQotLyoKLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIFJDVSBiYXRjaGVzIHByb2Nlc3NlZCB0aHVzIGZhci4gVXNlZnVsIGZvciBkZWJ1ZwotICogYW5kIHN0YXRpc3RpYy4gVGhlIF9iaCB2YXJpYW50IGlzIGlkZW50aWZjYWwgdG8gc3RyYWlnaHQgUkNVCi0gKi8KLXN0YXRpYyBpbmxpbmUgbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfYmgodm9pZCkKLXsKLQlyZXR1cm4gcmN1X2JhdGNoZXNfY29tcGxldGVkKCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUkNVX1RSQUNFCi1zdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZTsKLWV4dGVybiBsb25nICpyY3VwcmVlbXB0X2ZsaXBjdHIoaW50IGNwdSk7Ci1leHRlcm4gbG9uZyByY3VwcmVlbXB0X2RhdGFfY29tcGxldGVkKHZvaWQpOwotZXh0ZXJuIGludCByY3VwcmVlbXB0X2ZsaXBfZmxhZyhpbnQgY3B1KTsKLWV4dGVybiBpbnQgcmN1cHJlZW1wdF9tYl9mbGFnKGludCBjcHUpOwotZXh0ZXJuIGNoYXIgKnJjdXByZWVtcHRfdHJ5X2ZsaXBfc3RhdGVfbmFtZSh2b2lkKTsKLWV4dGVybiBzdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSAqcmN1cHJlZW1wdF90cmFjZV9jcHUoaW50IGNwdSk7Ci0jZW5kaWYKLQotc3RydWN0IHNvZnRpcnFfYWN0aW9uOwotCi0jaWZkZWYgQ09ORklHX05PX0haCi1leHRlcm4gdm9pZCByY3VfZW50ZXJfbm9oeih2b2lkKTsKLWV4dGVybiB2b2lkIHJjdV9leGl0X25vaHoodm9pZCk7Ci0jZWxzZQotIyBkZWZpbmUgcmN1X2VudGVyX25vaHooKQlkbyB7IH0gd2hpbGUgKDApCi0jIGRlZmluZSByY3VfZXhpdF9ub2h6KCkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLS8qCi0gKiBBIGNvbnRleHQgc3dpdGNoIGlzIGEgZ3JhY2UgcGVyaW9kIGZvciByY3VwcmVlbXB0IHN5bmNocm9uaXplX3JjdSgpCi0gKiBvbmx5IGR1cmluZyBlYXJseSBib290LCBiZWZvcmUgdGhlIHNjaGVkdWxlciBoYXMgYmVlbiBpbml0aWFsaXplZC4KLSAqIFNvLCBob3cgdGhlIGhlY2sgZG8gd2UgZ2V0IGEgY29udGV4dCBzd2l0Y2g/ICBXZWxsLCBpZiB0aGUgY2FsbGVyCi0gKiBpbnZva2VzIHN5bmNocm9uaXplX3JjdSgpLCB0aGV5IGFyZSB3aWxsaW5nIHRvIGFjY2VwdCBhIGNvbnRleHQKLSAqIHN3aXRjaCwgc28gd2Ugc2ltcGx5IHByZXRlbmQgdGhhdCBvbmUgaGFwcGVuZWQuCi0gKgotICogQWZ0ZXIgYm9vdCwgdGhlcmUgbWlnaHQgYmUgYSBibG9ja2VkIG9yIHByZWVtcHRlZCB0YXNrIGluIGFuIFJDVQotICogcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIHNvIHdlIGNhbm5vdCB0aGVuIHRha2UgdGhlIGZhc3RwYXRoLgotICovCi1zdGF0aWMgaW5saW5lIGludCByY3VfYmxvY2tpbmdfaXNfZ3Aodm9pZCkKLXsKLQlyZXR1cm4gbnVtX29ubGluZV9jcHVzKCkgPT0gMSAmJiAhcmN1X3NjaGVkdWxlcl9hY3RpdmU7Ci19Ci0KLSNlbmRpZiAvKiBfX0xJTlVYX1JDVVBSRUVNUFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VwcmVlbXB0X3RyYWNlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXByZWVtcHRfdHJhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk5YWUwNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXByZWVtcHRfdHJhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBmb3IgbXV0dWFsIGV4Y2x1c2lvbiAoUlQgaW1wbGVtZW50YXRpb24pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNgotICoKLSAqIEF1dGhvcjogIFBhdWwgTWNLZW5uZXkgPHBhdWxtY2tAdXMuaWJtLmNvbT4KLSAqCi0gKiBCYXNlZCBvbiB0aGUgb3JpZ2luYWwgd29yayBieSBQYXVsIE1jS2VubmV5IDxwYXVsLm1ja2VubmV5QHVzLmlibS5jb20+Ci0gKiBhbmQgaW5wdXRzIGZyb20gUnVzdHkgUnVzc2VsbCwgQW5kcmVhIEFyY2FuZ2VsaSBhbmQgQW5kaSBLbGVlbi4KLSAqIFBhcGVyczoKLSAqIGh0dHA6Ly93d3cucmRyb3AuY29tL3VzZXJzL3BhdWxtY2svcGFwZXIvcmNsb2NrcGRjc3Byb29mLnBkZgotICogaHR0cDovL2xzZS5zb3VyY2Vmb3JnZS5uZXQvbG9ja2luZy9yY2xvY2tfT0xTLjIwMDEuMDUuMDFjLnNjLnBkZiAoT0xTMjAwMSkKLSAqCi0gKiBGb3IgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgdGhlIFByZWVtcHRpYmxlIFJlYWQtQ29weSBVcGRhdGUgbWVjaGFuaXNtIHNlZSAtCi0gKiAJCSBodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8yNTM2NTEvCi0gKi8KLQotI2lmbmRlZiBfX0xJTlVYX1JDVVBSRUVNUFRfVFJBQ0VfSAotI2RlZmluZSBfX0xJTlVYX1JDVVBSRUVNUFRfVFJBQ0VfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotLyoKLSAqIFBSRUVNUFRfUkNVIGRhdGEgc3RydWN0dXJlcy4KLSAqLwotCi1zdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSB7Ci0JbG9uZwkJbmV4dF9sZW5ndGg7Ci0JbG9uZwkJbmV4dF9hZGQ7Ci0JbG9uZwkJd2FpdF9sZW5ndGg7Ci0JbG9uZwkJd2FpdF9hZGQ7Ci0JbG9uZwkJZG9uZV9sZW5ndGg7Ci0JbG9uZwkJZG9uZV9hZGQ7Ci0JbG9uZwkJZG9uZV9yZW1vdmU7Ci0JYXRvbWljX3QJZG9uZV9pbnZva2VkOwotCWxvbmcJCXJjdV9jaGVja19jYWxsYmFja3M7Ci0JYXRvbWljX3QJcmN1X3RyeV9mbGlwXzE7Ci0JYXRvbWljX3QJcmN1X3RyeV9mbGlwX2UxOwotCWxvbmcJCXJjdV90cnlfZmxpcF9pMTsKLQlsb25nCQlyY3VfdHJ5X2ZsaXBfaWUxOwotCWxvbmcJCXJjdV90cnlfZmxpcF9nMTsKLQlsb25nCQlyY3VfdHJ5X2ZsaXBfYTE7Ci0JbG9uZwkJcmN1X3RyeV9mbGlwX2FlMTsKLQlsb25nCQlyY3VfdHJ5X2ZsaXBfYTI7Ci0JbG9uZwkJcmN1X3RyeV9mbGlwX3oxOwotCWxvbmcJCXJjdV90cnlfZmxpcF96ZTE7Ci0JbG9uZwkJcmN1X3RyeV9mbGlwX3oyOwotCWxvbmcJCXJjdV90cnlfZmxpcF9tMTsKLQlsb25nCQlyY3VfdHJ5X2ZsaXBfbWUxOwotCWxvbmcJCXJjdV90cnlfZmxpcF9tMjsKLX07Ci0KLSNpZmRlZiBDT05GSUdfUkNVX1RSQUNFCi0jZGVmaW5lIFJDVV9UUkFDRShmbiwgYXJnKSAJZm4oYXJnKTsKLSNlbHNlCi0jZGVmaW5lIFJDVV9UUkFDRShmbiwgYXJnKQotI2VuZGlmCi0KLWV4dGVybiB2b2lkIHJjdXByZWVtcHRfdHJhY2VfbW92ZTJkb25lKHN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICp0cmFjZSk7Ci1leHRlcm4gdm9pZCByY3VwcmVlbXB0X3RyYWNlX21vdmUyd2FpdChzdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSAqdHJhY2UpOwotZXh0ZXJuIHZvaWQgcmN1cHJlZW1wdF90cmFjZV90cnlfZmxpcF8xKHN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICp0cmFjZSk7Ci1leHRlcm4gdm9pZCByY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX2UxKHN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICp0cmFjZSk7Ci1leHRlcm4gdm9pZCByY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX2kxKHN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICp0cmFjZSk7Ci1leHRlcm4gdm9pZCByY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX2llMShzdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSAqdHJhY2UpOwotZXh0ZXJuIHZvaWQgcmN1cHJlZW1wdF90cmFjZV90cnlfZmxpcF9nMShzdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSAqdHJhY2UpOwotZXh0ZXJuIHZvaWQgcmN1cHJlZW1wdF90cmFjZV90cnlfZmxpcF9hMShzdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSAqdHJhY2UpOwotZXh0ZXJuIHZvaWQgcmN1cHJlZW1wdF90cmFjZV90cnlfZmxpcF9hZTEoc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKTsKLWV4dGVybiB2b2lkIHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfYTIoc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKTsKLWV4dGVybiB2b2lkIHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfejEoc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKTsKLWV4dGVybiB2b2lkIHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfemUxKHN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICp0cmFjZSk7Ci1leHRlcm4gdm9pZCByY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX3oyKHN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICp0cmFjZSk7Ci1leHRlcm4gdm9pZCByY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX20xKHN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICp0cmFjZSk7Ci1leHRlcm4gdm9pZCByY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX21lMShzdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSAqdHJhY2UpOwotZXh0ZXJuIHZvaWQgcmN1cHJlZW1wdF90cmFjZV90cnlfZmxpcF9tMihzdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSAqdHJhY2UpOwotZXh0ZXJuIHZvaWQgcmN1cHJlZW1wdF90cmFjZV9jaGVja19jYWxsYmFja3Moc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKTsKLWV4dGVybiB2b2lkIHJjdXByZWVtcHRfdHJhY2VfZG9uZV9yZW1vdmUoc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKTsKLWV4dGVybiB2b2lkIHJjdXByZWVtcHRfdHJhY2VfaW52b2tlKHN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICp0cmFjZSk7Ci1leHRlcm4gdm9pZCByY3VwcmVlbXB0X3RyYWNlX25leHRfYWRkKHN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICp0cmFjZSk7Ci0KLSNlbmRpZiAvKiBfX0xJTlVYX1JDVVBSRUVNUFRfVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAppbmRleCA1YTUxNTM4Li5hODkzMDc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaApAQCAtMzAsMjY0ICszMCw1NyBAQAogI2lmbmRlZiBfX0xJTlVYX1JDVVRSRUVfSAogI2RlZmluZSBfX0xJTlVYX1JDVVRSRUVfSAogCi0jaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgorZXh0ZXJuIHZvaWQgcmN1X3NjaGVkX3FzKGludCBjcHUpOworZXh0ZXJuIHZvaWQgcmN1X2JoX3FzKGludCBjcHUpOwogCi0vKgotICogRGVmaW5lIHNoYXBlIG9mIGhpZXJhcmNoeSBiYXNlZCBvbiBOUl9DUFVTIGFuZCBDT05GSUdfUkNVX0ZBTk9VVC4KLSAqIEluIHRoZW9yeSwgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGFkZCBtb3JlIGxldmVscyBzdHJhaWdodGZvcndhcmRseS4KLSAqIEluIHByYWN0aWNlLCB0aGlzIGhhcyBub3QgYmVlbiB0ZXN0ZWQsIHNvIHRoZXJlIGlzIHByb2JhYmx5IHNvbWUKLSAqIGJ1ZyBzb21ld2hlcmUuCi0gKi8KLSNkZWZpbmUgTUFYX1JDVV9MVkxTIDMKLSNkZWZpbmUgUkNVX0ZBTk9VVAkgICAgICAoQ09ORklHX1JDVV9GQU5PVVQpCi0jZGVmaW5lIFJDVV9GQU5PVVRfU1EJICAgICAgKFJDVV9GQU5PVVQgKiBSQ1VfRkFOT1VUKQotI2RlZmluZSBSQ1VfRkFOT1VUX0NVQkUJICAgICAgKFJDVV9GQU5PVVRfU1EgKiBSQ1VfRkFOT1VUKQotCi0jaWYgTlJfQ1BVUyA8PSBSQ1VfRkFOT1VUCi0jICBkZWZpbmUgTlVNX1JDVV9MVkxTCSAgICAgIDEKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8wCSAgICAgIDEKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8xCSAgICAgIChOUl9DUFVTKQotIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzIJICAgICAgMAotIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzMJICAgICAgMAotI2VsaWYgTlJfQ1BVUyA8PSBSQ1VfRkFOT1VUX1NRCi0jICBkZWZpbmUgTlVNX1JDVV9MVkxTCSAgICAgIDIKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8wCSAgICAgIDEKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8xCSAgICAgICgoKE5SX0NQVVMpICsgUkNVX0ZBTk9VVCAtIDEpIC8gUkNVX0ZBTk9VVCkKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8yCSAgICAgIChOUl9DUFVTKQotIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzMJICAgICAgMAotI2VsaWYgTlJfQ1BVUyA8PSBSQ1VfRkFOT1VUX0NVQkUKLSMgIGRlZmluZSBOVU1fUkNVX0xWTFMJICAgICAgMwotIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzAJICAgICAgMQotIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgKCgoTlJfQ1BVUykgKyBSQ1VfRkFOT1VUX1NRIC0gMSkgLyBSQ1VfRkFOT1VUX1NRKQotIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzIJICAgICAgKCgoTlJfQ1BVUykgKyAoUkNVX0ZBTk9VVCkgLSAxKSAvIChSQ1VfRkFOT1VUKSkKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8zCSAgICAgIE5SX0NQVVMKLSNlbHNlCi0jIGVycm9yICJDT05GSUdfUkNVX0ZBTk9VVCBpbnN1ZmZpY2llbnQgZm9yIE5SX0NQVVMiCi0jZW5kaWYgLyogI2lmIChOUl9DUFVTKSA8PSBSQ1VfRkFOT1VUICovCi0KLSNkZWZpbmUgUkNVX1NVTSAoTlVNX1JDVV9MVkxfMCArIE5VTV9SQ1VfTFZMXzEgKyBOVU1fUkNVX0xWTF8yICsgTlVNX1JDVV9MVkxfMykKLSNkZWZpbmUgTlVNX1JDVV9OT0RFUyAoUkNVX1NVTSAtIE5SX0NQVVMpCi0KLS8qCi0gKiBEeW50aWNrcyBwZXItQ1BVIHN0YXRlLgotICovCi1zdHJ1Y3QgcmN1X2R5bnRpY2tzIHsKLQlpbnQgZHludGlja3NfbmVzdGluZzsJLyogVHJhY2sgbmVzdGluZyBsZXZlbCwgc29ydCBvZi4gKi8KLQlpbnQgZHludGlja3M7CQkvKiBFdmVuIHZhbHVlIGZvciBkeW50aWNrcy1pZGxlLCBlbHNlIG9kZC4gKi8KLQlpbnQgZHludGlja3Nfbm1pOwkvKiBFdmVuIHZhbHVlIGZvciBlaXRoZXIgZHludGlja3MtaWRsZSBvciAqLwotCQkJCS8qICBub3QgaW4gbm1pIGhhbmRsZXIsIGVsc2Ugb2RkLiAgU28gdGhpcyAqLwotCQkJCS8qICByZW1haW5zIGV2ZW4gZm9yIG5taSBmcm9tIGlycSBoYW5kbGVyLiAqLwotfTsKLQotLyoKLSAqIERlZmluaXRpb24gZm9yIG5vZGUgd2l0aGluIHRoZSBSQ1UgZ3JhY2UtcGVyaW9kLWRldGVjdGlvbiBoaWVyYXJjaHkuCi0gKi8KLXN0cnVjdCByY3Vfbm9kZSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXVuc2lnbmVkIGxvbmcgcXNtYXNrOwkvKiBDUFVzIG9yIGdyb3VwcyB0aGF0IG5lZWQgdG8gc3dpdGNoIGluICovCi0JCQkJLyogIG9yZGVyIGZvciBjdXJyZW50IGdyYWNlIHBlcmlvZCB0byBwcm9jZWVkLiovCi0JdW5zaWduZWQgbG9uZyBxc21hc2tpbml0OwotCQkJCS8qIFBlci1HUCBpbml0aWFsaXphdGlvbiBmb3IgcXNtYXNrLiAqLwotCXVuc2lnbmVkIGxvbmcgZ3JwbWFzazsJLyogTWFzayB0byBhcHBseSB0byBwYXJlbnQgcXNtYXNrLiAqLwotCWludAlncnBsbzsJCS8qIGxvd2VzdC1udW1iZXJlZCBDUFUgb3IgZ3JvdXAgaGVyZS4gKi8KLQlpbnQJZ3JwaGk7CQkvKiBoaWdoZXN0LW51bWJlcmVkIENQVSBvciBncm91cCBoZXJlLiAqLwotCXU4CWdycG51bTsJCS8qIENQVS9ncm91cCBudW1iZXIgZm9yIG5leHQgbGV2ZWwgdXAuICovCi0JdTgJbGV2ZWw7CQkvKiByb290IGlzIGF0IGxldmVsIDAuICovCi0Jc3RydWN0IHJjdV9ub2RlICpwYXJlbnQ7Ci19IF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7Ci0KLS8qIEluZGV4IHZhbHVlcyBmb3Igbnh0dGFpbCBhcnJheSBpbiBzdHJ1Y3QgcmN1X2RhdGEuICovCi0jZGVmaW5lIFJDVV9ET05FX1RBSUwJCTAJLyogQWxzbyBSQ1VfV0FJVCBoZWFkLiAqLwotI2RlZmluZSBSQ1VfV0FJVF9UQUlMCQkxCS8qIEFsc28gUkNVX05FWFRfUkVBRFkgaGVhZC4gKi8KLSNkZWZpbmUgUkNVX05FWFRfUkVBRFlfVEFJTAkyCS8qIEFsc28gUkNVX05FWFQgaGVhZC4gKi8KLSNkZWZpbmUgUkNVX05FWFRfVEFJTAkJMwotI2RlZmluZSBSQ1VfTkVYVF9TSVpFCQk0Ci0KLS8qIFBlci1DUFUgZGF0YSBmb3IgcmVhZC1jb3B5IHVwZGF0ZS4gKi8KLXN0cnVjdCByY3VfZGF0YSB7Ci0JLyogMSkgcXVpZXNjZW50LXN0YXRlIGFuZCBncmFjZS1wZXJpb2QgaGFuZGxpbmcgOiAqLwotCWxvbmcJCWNvbXBsZXRlZDsJLyogVHJhY2sgcnNwLT5jb21wbGV0ZWQgZ3AgbnVtYmVyICovCi0JCQkJCS8qICBpbiBvcmRlciB0byBkZXRlY3QgR1AgZW5kLiAqLwotCWxvbmcJCWdwbnVtOwkJLyogSGlnaGVzdCBncCBudW1iZXIgdGhhdCB0aGlzIENQVSAqLwotCQkJCQkvKiAgaXMgYXdhcmUgb2YgaGF2aW5nIHN0YXJ0ZWQuICovCi0JbG9uZwkJcGFzc2VkX3F1aWVzY19jb21wbGV0ZWQ7Ci0JCQkJCS8qIFZhbHVlIG9mIGNvbXBsZXRlZCBhdCB0aW1lIG9mIHFzLiAqLwotCWJvb2wJCXBhc3NlZF9xdWllc2M7CS8qIFVzZXItbW9kZS9pZGxlIGxvb3AgZXRjLiAqLwotCWJvb2wJCXFzX3BlbmRpbmc7CS8qIENvcmUgd2FpdHMgZm9yIHF1aWVzYyBzdGF0ZS4gKi8KLQlib29sCQliZWVub25saW5lOwkvKiBDUFUgb25saW5lIGF0IGxlYXN0IG9uY2UuICovCi0Jc3RydWN0IHJjdV9ub2RlICpteW5vZGU7CS8qIFRoaXMgQ1BVJ3MgbGVhZiBvZiBoaWVyYXJjaHkgKi8KLQl1bnNpZ25lZCBsb25nIGdycG1hc2s7CQkvKiBNYXNrIHRvIGFwcGx5IHRvIGxlYWYgcXNtYXNrLiAqLwotCi0JLyogMikgYmF0Y2ggaGFuZGxpbmcgKi8KLQkvKgotCSAqIElmIG54dGxpc3QgaXMgbm90IE5VTEwsIGl0IGlzIHBhcnRpdGlvbmVkIGFzIGZvbGxvd3MuCi0JICogQW55IG9mIHRoZSBwYXJ0aXRpb25zIG1pZ2h0IGJlIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZQotCSAqIHBvaW50ZXIgdG8gdGhhdCBwYXJ0aXRpb24gd2lsbCBiZSBlcXVhbCB0byB0aGUgcG9pbnRlciBmb3IKLQkgKiB0aGUgZm9sbG93aW5nIHBhcnRpdGlvbi4gIFdoZW4gdGhlIGxpc3QgaXMgZW1wdHksIGFsbCBvZgotCSAqIHRoZSBueHR0YWlsIGVsZW1lbnRzIHBvaW50IHRvIG54dGxpc3QsIHdoaWNoIGlzIE5VTEwuCi0JICoKLQkgKiBbKm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0sIE5VTEwgPSAqbnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSk6Ci0JICoJRW50cmllcyB0aGF0IG1pZ2h0IGhhdmUgYXJyaXZlZCBhZnRlciBjdXJyZW50IEdQIGVuZGVkCi0JICogWypueHR0YWlsW1JDVV9XQUlUX1RBSUxdLCAqbnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXSk6Ci0JICoJRW50cmllcyBrbm93biB0byBoYXZlIGFycml2ZWQgYmVmb3JlIGN1cnJlbnQgR1AgZW5kZWQKLQkgKiBbKm54dHRhaWxbUkNVX0RPTkVfVEFJTF0sICpueHR0YWlsW1JDVV9XQUlUX1RBSUxdKToKLQkgKglFbnRyaWVzIHRoYXQgYmF0Y2ggIyA8PSAtPmNvbXBsZXRlZCAtIDE6IHdhaXRpbmcgZm9yIGN1cnJlbnQgR1AKLQkgKiBbbnh0bGlzdCwgKm54dHRhaWxbUkNVX0RPTkVfVEFJTF0pOgotCSAqCUVudHJpZXMgdGhhdCBiYXRjaCAjIDw9IC0+Y29tcGxldGVkCi0JICoJVGhlIGdyYWNlIHBlcmlvZCBmb3IgdGhlc2UgZW50cmllcyBoYXMgY29tcGxldGVkLCBhbmQKLQkgKgl0aGUgb3RoZXIgZ3JhY2UtcGVyaW9kLWNvbXBsZXRlZCBlbnRyaWVzIG1heSBiZSBtb3ZlZAotCSAqCWhlcmUgdGVtcG9yYXJpbHkgaW4gcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCkuCi0JICovCi0Jc3RydWN0IHJjdV9oZWFkICpueHRsaXN0OwotCXN0cnVjdCByY3VfaGVhZCAqKm54dHRhaWxbUkNVX05FWFRfU0laRV07Ci0JbG9uZwkJcWxlbjsgCSAJLyogIyBvZiBxdWV1ZWQgY2FsbGJhY2tzICovCi0JbG9uZwkJYmxpbWl0OwkJLyogVXBwZXIgbGltaXQgb24gYSBwcm9jZXNzZWQgYmF0Y2ggKi8KLQotI2lmZGVmIENPTkZJR19OT19IWgotCS8qIDMpIGR5bnRpY2tzIGludGVyZmFjZS4gKi8KLQlzdHJ1Y3QgcmN1X2R5bnRpY2tzICpkeW50aWNrczsJLyogU2hhcmVkIHBlci1DUFUgZHludGlja3Mgc3RhdGUuICovCi0JaW50IGR5bnRpY2tzX3NuYXA7CQkvKiBQZXItR1AgdHJhY2tpbmcgZm9yIGR5bnRpY2tzLiAqLwotCWludCBkeW50aWNrc19ubWlfc25hcDsJCS8qIFBlci1HUCB0cmFja2luZyBmb3IgZHludGlja3Nfbm1pLiAqLwotI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KLQotCS8qIDQpIHJlYXNvbnMgdGhpcyBDUFUgbmVlZGVkIHRvIGJlIGtpY2tlZCBieSBmb3JjZV9xdWllc2NlbnRfc3RhdGUgKi8KLSNpZmRlZiBDT05GSUdfTk9fSFoKLQl1bnNpZ25lZCBsb25nIGR5bnRpY2tzX2ZxczsJLyogS2lja2VkIGR1ZSB0byBkeW50aWNrcyBpZGxlLiAqLwotI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KLQl1bnNpZ25lZCBsb25nIG9mZmxpbmVfZnFzOwkvKiBLaWNrZWQgZHVlIHRvIGJlaW5nIG9mZmxpbmUuICovCi0JdW5zaWduZWQgbG9uZyByZXNjaGVkX2lwaTsJLyogU2VudCBhIHJlc2NoZWQgSVBJLiAqLwotCi0JLyogNSkgX19yY3VfcGVuZGluZygpIHN0YXRpc3RpY3MuICovCi0JbG9uZyBuX3JjdV9wZW5kaW5nOwkJLyogcmN1X3BlbmRpbmcoKSBjYWxscyBzaW5jZSBib290LiAqLwotCWxvbmcgbl9ycF9xc19wZW5kaW5nOwotCWxvbmcgbl9ycF9jYl9yZWFkeTsKLQlsb25nIG5fcnBfY3B1X25lZWRzX2dwOwotCWxvbmcgbl9ycF9ncF9jb21wbGV0ZWQ7Ci0JbG9uZyBuX3JwX2dwX3N0YXJ0ZWQ7Ci0JbG9uZyBuX3JwX25lZWRfZnFzOwotCWxvbmcgbl9ycF9uZWVkX25vdGhpbmc7Ci0KLQlpbnQgY3B1OwotfTsKLQotLyogVmFsdWVzIGZvciBzaWduYWxlZCBmaWVsZCBpbiBzdHJ1Y3QgcmN1X3N0YXRlLiAqLwotI2RlZmluZSBSQ1VfR1BfSU5JVAkJMAkvKiBHcmFjZSBwZXJpb2QgYmVpbmcgaW5pdGlhbGl6ZWQuICovCi0jZGVmaW5lIFJDVV9TQVZFX0RZTlRJQ0sJMQkvKiBOZWVkIHRvIHNjYW4gZHludGljayBzdGF0ZS4gKi8KLSNkZWZpbmUgUkNVX0ZPUkNFX1FTCQkyCS8qIE5lZWQgdG8gZm9yY2UgcXVpZXNjZW50IHN0YXRlLiAqLwotI2lmZGVmIENPTkZJR19OT19IWgotI2RlZmluZSBSQ1VfU0lHTkFMX0lOSVQJCVJDVV9TQVZFX0RZTlRJQ0sKLSNlbHNlIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KLSNkZWZpbmUgUkNVX1NJR05BTF9JTklUCQlSQ1VfRk9SQ0VfUVMKLSNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX05PX0haICovCi0KLSNkZWZpbmUgUkNVX0pJRkZJRVNfVElMTF9GT1JDRV9RUwkgMwkvKiBmb3IgcnNwLT5qaWZmaWVzX2ZvcmNlX3FzICovCi0jaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKLSNkZWZpbmUgUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9DSEVDSyAgICgxMCAqIEhaKSAgLyogZm9yIHJzcC0+amlmZmllc19zdGFsbCAqLwotI2RlZmluZSBSQ1VfU0VDT05EU19USUxMX1NUQUxMX1JFQ0hFQ0sgKDMwICogSFopICAvKiBmb3IgcnNwLT5qaWZmaWVzX3N0YWxsICovCi0jZGVmaW5lIFJDVV9TVEFMTF9SQVRfREVMQVkJCTIJICAvKiBBbGxvdyBvdGhlciBDUFVzIHRpbWUgKi8KLQkJCQkJCSAgLyogIHRvIHRha2UgYXQgbGVhc3Qgb25lICovCi0JCQkJCQkgIC8qICBzY2hlZHVsaW5nIGNsb2NrIGlycSAqLwotCQkJCQkJICAvKiAgYmVmb3JlIHJhdHRpbmcgb24gdGhlbS4gKi8KLQotI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAqLwotCi0vKgotICogUkNVIGdsb2JhbCBzdGF0ZSwgaW5jbHVkaW5nIG5vZGUgaGllcmFyY2h5LiAgVGhpcyBoaWVyYXJjaHkgaXMKLSAqIHJlcHJlc2VudGVkIGluICJoZWFwIiBmb3JtIGluIGEgZGVuc2UgYXJyYXkuICBUaGUgcm9vdCAoZmlyc3QgbGV2ZWwpCi0gKiBvZiB0aGUgaGllcmFyY2h5IGlzIGluIC0+bm9kZVswXSAocmVmZXJlbmNlZCBieSAtPmxldmVsWzBdKSwgdGhlIHNlY29uZAotICogbGV2ZWwgaW4gLT5ub2RlWzFdIHRocm91Z2ggLT5ub2RlW21dICgtPm5vZGVbMV0gcmVmZXJlbmNlZCBieSAtPmxldmVsWzFdKSwKLSAqIGFuZCB0aGUgdGhpcmQgbGV2ZWwgaW4gLT5ub2RlW20rMV0gYW5kIGZvbGxvd2luZyAoLT5ub2RlW20rMV0gcmVmZXJlbmNlZAotICogYnkgLT5sZXZlbFsyXSkuICBUaGUgbnVtYmVyIG9mIGxldmVscyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBudW1iZXIgb2YKLSAqIENQVXMgYW5kIGJ5IENPTkZJR19SQ1VfRkFOT1VULiAgU21hbGwgc3lzdGVtcyB3aWxsIGhhdmUgYSAiaGllcmFyY2h5IgotICogY29uc2lzdGluZyBvZiBhIHNpbmdsZSByY3Vfbm9kZS4KLSAqLwotc3RydWN0IHJjdV9zdGF0ZSB7Ci0Jc3RydWN0IHJjdV9ub2RlIG5vZGVbTlVNX1JDVV9OT0RFU107CS8qIEhpZXJhcmNoeS4gKi8KLQlzdHJ1Y3QgcmN1X25vZGUgKmxldmVsW05VTV9SQ1VfTFZMU107CS8qIEhpZXJhcmNoeSBsZXZlbHMuICovCi0JdTMyIGxldmVsY250W01BWF9SQ1VfTFZMUyArIDFdOwkJLyogIyBub2RlcyBpbiBlYWNoIGxldmVsLiAqLwotCXU4IGxldmVsc3ByZWFkW05VTV9SQ1VfTFZMU107CQkvKiBraWRzL25vZGUgaW4gZWFjaCBsZXZlbC4gKi8KLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkYVtOUl9DUFVTXTsJCS8qIGFycmF5IG9mIHJkcCBwb2ludGVycy4gKi8KLQotCS8qIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBndWFyZGVkIGJ5IHRoZSByb290IHJjdV9ub2RlJ3MgbG9jay4gKi8KLQotCXU4CXNpZ25hbGVkIF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7Ci0JCQkJCQkvKiBGb3JjZSBRUyBzdGF0ZS4gKi8KLQlsb25nCWdwbnVtOwkJCQkvKiBDdXJyZW50IGdwIG51bWJlci4gKi8KLQlsb25nCWNvbXBsZXRlZDsJCQkvKiAjIG9mIGxhc3QgY29tcGxldGVkIGdwLiAqLwotCXNwaW5sb2NrX3Qgb25vZmZsb2NrOwkJCS8qIGV4Y2x1ZGUgb24vb2ZmbGluZSBhbmQgKi8KLQkJCQkJCS8qICBzdGFydGluZyBuZXcgR1AuICovCi0Jc3BpbmxvY2tfdCBmcXNsb2NrOwkJCS8qIE9ubHkgb25lIHRhc2sgZm9yY2luZyAqLwotCQkJCQkJLyogIHF1aWVzY2VudCBzdGF0ZXMuICovCi0JdW5zaWduZWQgbG9uZyBqaWZmaWVzX2ZvcmNlX3FzOwkJLyogVGltZSBhdCB3aGljaCB0byBpbnZva2UgKi8KLQkJCQkJCS8qICBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKS4gKi8KLQl1bnNpZ25lZCBsb25nIG5fZm9yY2VfcXM7CQkvKiBOdW1iZXIgb2YgY2FsbHMgdG8gKi8KLQkJCQkJCS8qICBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKS4gKi8KLQl1bnNpZ25lZCBsb25nIG5fZm9yY2VfcXNfbGg7CQkvKiB+TnVtYmVyIG9mIGNhbGxzIGxlYXZpbmcgKi8KLQkJCQkJCS8qICBkdWUgdG8gbG9jayB1bmF2YWlsYWJsZS4gKi8KLQl1bnNpZ25lZCBsb25nIG5fZm9yY2VfcXNfbmdwOwkJLyogTnVtYmVyIG9mIGNhbGxzIGxlYXZpbmcgKi8KLQkJCQkJCS8qICBkdWUgdG8gbm8gR1AgYWN0aXZlLiAqLwotI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCi0JdW5zaWduZWQgbG9uZyBncF9zdGFydDsJCQkvKiBUaW1lIGF0IHdoaWNoIEdQIHN0YXJ0ZWQsICovCi0JCQkJCQkvKiAgYnV0IGluIGppZmZpZXMuICovCi0JdW5zaWduZWQgbG9uZyBqaWZmaWVzX3N0YWxsOwkJLyogVGltZSBhdCB3aGljaCB0byBjaGVjayAqLwotCQkJCQkJLyogIGZvciBDUFUgc3RhbGxzLiAqLwotI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAqLwotI2lmZGVmIENPTkZJR19OT19IWgotCWxvbmcgZHludGlja3NfY29tcGxldGVkOwkJLyogVmFsdWUgb2YgY29tcGxldGVkIEAgc25hcC4gKi8KLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCi19OwotCi1leHRlcm4gdm9pZCByY3VfcXNjdHJfaW5jKGludCBjcHUpOwotZXh0ZXJuIHZvaWQgcmN1X2JoX3FzY3RyX2luYyhpbnQgY3B1KTsKLQotZXh0ZXJuIGludCByY3VfcGVuZGluZyhpbnQgY3B1KTsKIGV4dGVybiBpbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1KTsKIAotI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCi1leHRlcm4gc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9sb2NrX21hcDsKLSMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmUoKQlcCi0JCQlsb2NrX2FjcXVpcmUoJnJjdV9sb2NrX21hcCwgMCwgMCwgMiwgMSwgTlVMTCwgX1RISVNfSVBfKQotIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZSgpCWxvY2tfcmVsZWFzZSgmcmN1X2xvY2tfbWFwLCAxLCBfVEhJU19JUF8pCi0jZWxzZQotIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZSgpCWRvIHsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2UoKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKKyNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQorCitleHRlcm4gdm9pZCBfX3JjdV9yZWFkX2xvY2sodm9pZCk7CitleHRlcm4gdm9pZCBfX3JjdV9yZWFkX3VubG9jayh2b2lkKTsKK2V4dGVybiB2b2lkIGV4aXRfcmN1KHZvaWQpOworCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmN1X3JlYWRfbG9jayh2b2lkKQogewogCXByZWVtcHRfZGlzYWJsZSgpOwotCV9fYWNxdWlyZShSQ1UpOwotCXJjdV9yZWFkX2FjcXVpcmUoKTsKIH0KKwogc3RhdGljIGlubGluZSB2b2lkIF9fcmN1X3JlYWRfdW5sb2NrKHZvaWQpCiB7Ci0JcmN1X3JlYWRfcmVsZWFzZSgpOwotCV9fcmVsZWFzZShSQ1UpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBleGl0X3JjdSh2b2lkKQoreworfQorCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3JjdV9yZWFkX2xvY2tfYmgodm9pZCkKIHsKIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JX19hY3F1aXJlKFJDVV9CSCk7Ci0JcmN1X3JlYWRfYWNxdWlyZSgpOwogfQogc3RhdGljIGlubGluZSB2b2lkIF9fcmN1X3JlYWRfdW5sb2NrX2JoKHZvaWQpCiB7Ci0JcmN1X3JlYWRfcmVsZWFzZSgpOwotCV9fcmVsZWFzZShSQ1VfQkgpOwogCWxvY2FsX2JoX2VuYWJsZSgpOwogfQogCiAjZGVmaW5lIF9fc3luY2hyb25pemVfc2NoZWQoKSBzeW5jaHJvbml6ZV9yY3UoKQogCi0jZGVmaW5lIGNhbGxfcmN1X3NjaGVkKGhlYWQsIGZ1bmMpIGNhbGxfcmN1KGhlYWQsIGZ1bmMpCitleHRlcm4gdm9pZCBjYWxsX3JjdV9zY2hlZChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCisJCQkgICB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHJjdV9pbml0X3NjaGVkKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCh2b2lkKQogeworCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfcmN1X2JoX2V4cGVkaXRlZCh2b2lkKQoreworCXN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCgpOwogfQogCiBleHRlcm4gdm9pZCBfX3JjdV9pbml0KHZvaWQpOwpAQCAtMjk2LDYgKzg5LDExIEBACiAKIGV4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKTsKIGV4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9iaCh2b2lkKTsKK2V4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9zY2hlZCh2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkIHJjdV9pbml0X3NjaGVkKHZvaWQpCit7Cit9CiAKICNpZmRlZiBDT05GSUdfTk9fSFoKIHZvaWQgcmN1X2VudGVyX25vaHoodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jkcy5oIGIvaW5jbHVkZS9saW51eC9yZHMuaAppbmRleCBkOTFkYzkxLi44OWQ0NmUxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jkcy5oCkBAIC0xNDcsNiArMTQ3LDE4IEBACiAJdV9pbnQ2NF90CWludW07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCitzdHJ1Y3QgcmRzX2luZm9fdGNwX3NvY2tldCB7CisJX19iZTMyICAgICAgICAgIGxvY2FsX2FkZHI7CisJX19iZTE2ICAgICAgICAgIGxvY2FsX3BvcnQ7CisJX19iZTMyICAgICAgICAgIHBlZXJfYWRkcjsKKwlfX2JlMTYgICAgICAgICAgcGVlcl9wb3J0OworCXVfaW50NjRfdCAgICAgICBoZHJfcmVtOworCXVfaW50NjRfdCAgICAgICBkYXRhX3JlbTsKKwl1X2ludDMyX3QgICAgICAgbGFzdF9zZW50X254dDsKKwl1X2ludDMyX3QgICAgICAgbGFzdF9leHBlY3RlZF91bmE7CisJdV9pbnQzMl90ICAgICAgIGxhc3Rfc2Vlbl91bmE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiAjZGVmaW5lIFJEU19JQl9HSURfTEVOCTE2CiBzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uIHsKIAlfX2JlMzIJCXNyY19hZGRyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZmtpbGwuaCBiL2luY2x1ZGUvbGludXgvcmZraWxsLmgKaW5kZXggMjc4Nzc3ZmEuLjMzOTJjNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmZraWxsLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZmtpbGwuaApAQCAtNiwyMCArNiwxNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IERtaXRyeSBUb3Jva2hvdgogICogQ29weXJpZ2h0IDIwMDkgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTQ3LDYgKzQ0LDcgQEAKIAlSRktJTExfVFlQRV9VV0IsCiAJUkZLSUxMX1RZUEVfV0lNQVgsCiAJUkZLSUxMX1RZUEVfV1dBTiwKKwlSRktJTExfVFlQRV9HUFMsCiAJTlVNX1JGS0lMTF9UWVBFUywKIH07CiAKQEAgLTgyLDYgKzgwLDIwIEBACiAJX191OCAgc29mdCwgaGFyZDsKIH0gX19wYWNrZWQ7CiAKKy8qCisgKiBXZSBhcmUgcGxhbm5pbmcgdG8gYmUgYmFja3dhcmQgYW5kIGZvcndhcmQgY29tcGF0aWJsZSB3aXRoIGNoYW5nZXMKKyAqIHRvIHRoZSBldmVudCBzdHJ1Y3QsIGJ5IGFkZGluZyBuZXcsIG9wdGlvbmFsLCBtZW1iZXJzIGF0IHRoZSBlbmQuCisgKiBXaGVuIHJlYWRpbmcgYW4gZXZlbnQgKHdoZXRoZXIgdGhlIGtlcm5lbCBmcm9tIHVzZXJzcGFjZSBvciB2aWNlCisgKiB2ZXJzYSkgd2UgbmVlZCB0byBhY2NlcHQgYW55dGhpbmcgdGhhdCdzIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZQorICogdmVyc2lvbiAxIGV2ZW50IHNpemUsIGJ1dCBtaWdodCBiZSBhYmxlIHRvIGFjY2VwdCBvdGhlciBzaXplcyBpbgorICogdGhlIGZ1dHVyZS4KKyAqCisgKiBPbmUgZXhjZXB0aW9uIGlzIHRoZSBrZXJuZWwgLS0gd2UgYWxyZWFkeSBoYXZlIHR3byBldmVudCBzaXplcyBpbgorICogdGhhdCB3ZSd2ZSBtYWRlIHRoZSAnaGFyZCcgbWVtYmVyIG9wdGlvbmFsIHNpbmNlIG91ciBvbmx5IG9wdGlvbgorICogaXMgdG8gaWdub3JlIGl0IGFueXdheS4KKyAqLworI2RlZmluZSBSRktJTExfRVZFTlRfU0laRV9WMQk4CisKIC8qIGlvY3RsIGZvciB0dXJuaW5nIG9mZiByZmtpbGwtaW5wdXQgKGlmIHByZXNlbnQpICovCiAjZGVmaW5lIFJGS0lMTF9JT0NfTUFHSUMJJ1InCiAjZGVmaW5lIFJGS0lMTF9JT0NfTk9JTlBVVAkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmggYi9pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmgKaW5kZXggMjlmODU5OS4uNWZjYzMxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaApAQCAtNzUsMjAgKzc1LDYgQEAKIH0KIAogLyoKLSAqIHJpbmdfYnVmZmVyX2V2ZW50X2Rpc2NhcmQgY2FuIGRpc2NhcmQgYW55IGV2ZW50IGluIHRoZSByaW5nIGJ1ZmZlci4KLSAqICAgaXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBwcm90ZWN0IGFnYWluc3QgYSByZWFkZXIgZnJvbQotICogICBjb25zdW1pbmcgaXQgb3IgYSB3cml0ZXIgZnJvbSB3cmFwcGluZyBhbmQgcmVwbGFjaW5nIGl0LgotICoKLSAqIE5vIGV4dGVybmFsIHByb3RlY3Rpb24gaXMgbmVlZGVkIGlmIHRoaXMgaXMgY2FsbGVkIGJlZm9yZQotICogdGhlIGV2ZW50IGlzIGNvbW1pdGVkLiBCdXQgaW4gdGhhdCBjYXNlIGl0IHdvdWxkIGJlIGJldHRlciB0bwotICogdXNlIHJpbmdfYnVmZmVyX2Rpc2NhcmRfY29tbWl0LgotICoKLSAqIE5vdGUsIGlmIGFuIGV2ZW50IHRoYXQgaGFzIG5vdCBiZWVuIGNvbW1pdHRlZCBpcyBkaXNjYXJkZWQKLSAqIHdpdGggcmluZ19idWZmZXJfZXZlbnRfZGlzY2FyZCwgaXQgbXVzdCBzdGlsbCBiZSBjb21taXR0ZWQuCi0gKi8KLXZvaWQgcmluZ19idWZmZXJfZXZlbnRfZGlzY2FyZChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KTsKLQotLyoKICAqIHJpbmdfYnVmZmVyX2Rpc2NhcmRfY29tbWl0IHdpbGwgcmVtb3ZlIGFuIGV2ZW50IHRoYXQgaGFzIG5vdAogICogICBiZW4gY29tbWl0dGVkIHlldC4gSWYgdGhpcyBpcyB1c2VkLCB0aGVuIHJpbmdfYnVmZmVyX3VubG9ja19jb21taXQKICAqICAgbXVzdCBub3QgYmUgY2FsbGVkIG9uIHRoZSBkaXNjYXJkZWQgZXZlbnQuIFRoaXMgZnVuY3Rpb24KQEAgLTE1NCw4ICsxNDAsMTcgQEAKIHZvaWQgcmluZ19idWZmZXJfcmVzZXRfY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTsKIHZvaWQgcmluZ19idWZmZXJfcmVzZXQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpOwogCisjaWZkZWYgQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVAKIGludCByaW5nX2J1ZmZlcl9zd2FwX2NwdShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcl9hLAogCQkJIHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyX2IsIGludCBjcHUpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50CityaW5nX2J1ZmZlcl9zd2FwX2NwdShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcl9hLAorCQkgICAgIHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyX2IsIGludCBjcHUpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisjZW5kaWYKIAogaW50IHJpbmdfYnVmZmVyX2VtcHR5KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyKTsKIGludCByaW5nX2J1ZmZlcl9lbXB0eV9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpOwpAQCAtMTcwLDcgKzE2NSw2IEBACiB1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX2VudHJpZXNfY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTsKIHVuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpOwogdW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9jb21taXRfb3ZlcnJ1bl9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpOwotdW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9ubWlfZHJvcHBlZF9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpOwogCiB1NjQgcmluZ19idWZmZXJfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSk7CiB2b2lkIHJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggYmEzMjU0ZS4uYWRmMjA2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCkBAIC0xMDQsNyArMTA0LDcgQEAKIAlSVE1fTkVXQUREUkxBQkVMID0gNzIsCiAjZGVmaW5lIFJUTV9ORVdBRERSTEFCRUwgUlRNX05FV0FERFJMQUJFTAogCVJUTV9ERUxBRERSTEFCRUwsCi0jZGVmaW5lIFJUTV9ORVdBRERSTEFCRUwgUlRNX05FV0FERFJMQUJFTAorI2RlZmluZSBSVE1fREVMQUREUkxBQkVMIFJUTV9ERUxBRERSTEFCRUwKIAlSVE1fR0VUQUREUkxBQkVMLAogI2RlZmluZSBSVE1fR0VUQUREUkxBQkVMIFJUTV9HRVRBRERSTEFCRUwKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDBmMWVhNGEuLmYzZDc0YmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTM4LDYgKzM4LDggQEAKICNkZWZpbmUgU0NIRURfQkFUQ0gJCTMKIC8qIFNDSEVEX0lTTzogcmVzZXJ2ZWQgYnV0IG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KICNkZWZpbmUgU0NIRURfSURMRQkJNQorLyogQ2FuIGJlIE9SZWQgaW4gdG8gbWFrZSBzdXJlIHRoZSBwcm9jZXNzIGlzIHJldmVydGVkIGJhY2sgdG8gU0NIRURfTk9STUFMIG9uIGZvcmsgKi8KKyNkZWZpbmUgU0NIRURfUkVTRVRfT05fRk9SSyAgICAgMHg0MDAwMDAwMAogCiAjaWZkZWYgX19LRVJORUxfXwogCkBAIC03OTYsMTggKzc5OCwxOSBAQAogI2RlZmluZSBTQ0hFRF9MT0FEX1NDQUxFX0ZVWloJU0NIRURfTE9BRF9TQ0FMRQogCiAjaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBTRF9MT0FEX0JBTEFOQ0UJCTEJLyogRG8gbG9hZCBiYWxhbmNpbmcgb24gdGhpcyBkb21haW4uICovCi0jZGVmaW5lIFNEX0JBTEFOQ0VfTkVXSURMRQkyCS8qIEJhbGFuY2Ugd2hlbiBhYm91dCB0byBiZWNvbWUgaWRsZSAqLwotI2RlZmluZSBTRF9CQUxBTkNFX0VYRUMJCTQJLyogQmFsYW5jZSBvbiBleGVjICovCi0jZGVmaW5lIFNEX0JBTEFOQ0VfRk9SSwkJOAkvKiBCYWxhbmNlIG9uIGZvcmssIGNsb25lICovCi0jZGVmaW5lIFNEX1dBS0VfSURMRQkJMTYJLyogV2FrZSB0byBpZGxlIENQVSBvbiB0YXNrIHdha2V1cCAqLwotI2RlZmluZSBTRF9XQUtFX0FGRklORQkJMzIJLyogV2FrZSB0YXNrIHRvIHdha2luZyBDUFUgKi8KLSNkZWZpbmUgU0RfV0FLRV9CQUxBTkNFCQk2NAkvKiBQZXJmb3JtIGJhbGFuY2luZyBhdCB0YXNrIHdha2V1cCAqLwotI2RlZmluZSBTRF9TSEFSRV9DUFVQT1dFUgkxMjgJLyogRG9tYWluIG1lbWJlcnMgc2hhcmUgY3B1IHBvd2VyICovCi0jZGVmaW5lIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFCTI1NgkvKiBCYWxhbmNlIGZvciBwb3dlciBzYXZpbmdzICovCi0jZGVmaW5lIFNEX1NIQVJFX1BLR19SRVNPVVJDRVMJNTEyCS8qIERvbWFpbiBtZW1iZXJzIHNoYXJlIGNwdSBwa2cgcmVzb3VyY2VzICovCi0jZGVmaW5lIFNEX1NFUklBTElaRQkJMTAyNAkvKiBPbmx5IGEgc2luZ2xlIGxvYWQgYmFsYW5jaW5nIGluc3RhbmNlICovCi0jZGVmaW5lIFNEX1dBS0VfSURMRV9GQVIJMjA0OAkvKiBHYWluIGxhdGVuY3kgc2FjcmlmaWNpbmcgY2FjaGUgaGl0ICovCisjZGVmaW5lIFNEX0xPQURfQkFMQU5DRQkJMHgwMDAxCS8qIERvIGxvYWQgYmFsYW5jaW5nIG9uIHRoaXMgZG9tYWluLiAqLworI2RlZmluZSBTRF9CQUxBTkNFX05FV0lETEUJMHgwMDAyCS8qIEJhbGFuY2Ugd2hlbiBhYm91dCB0byBiZWNvbWUgaWRsZSAqLworI2RlZmluZSBTRF9CQUxBTkNFX0VYRUMJCTB4MDAwNAkvKiBCYWxhbmNlIG9uIGV4ZWMgKi8KKyNkZWZpbmUgU0RfQkFMQU5DRV9GT1JLCQkweDAwMDgJLyogQmFsYW5jZSBvbiBmb3JrLCBjbG9uZSAqLworI2RlZmluZSBTRF9XQUtFX0lETEUJCTB4MDAxMAkvKiBXYWtlIHRvIGlkbGUgQ1BVIG9uIHRhc2sgd2FrZXVwICovCisjZGVmaW5lIFNEX1dBS0VfQUZGSU5FCQkweDAwMjAJLyogV2FrZSB0YXNrIHRvIHdha2luZyBDUFUgKi8KKyNkZWZpbmUgU0RfV0FLRV9CQUxBTkNFCQkweDAwNDAJLyogUGVyZm9ybSBiYWxhbmNpbmcgYXQgdGFzayB3YWtldXAgKi8KKyNkZWZpbmUgU0RfU0hBUkVfQ1BVUE9XRVIJMHgwMDgwCS8qIERvbWFpbiBtZW1iZXJzIHNoYXJlIGNwdSBwb3dlciAqLworI2RlZmluZSBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRQkweDAxMDAJLyogQmFsYW5jZSBmb3IgcG93ZXIgc2F2aW5ncyAqLworI2RlZmluZSBTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCTB4MDIwMAkvKiBEb21haW4gbWVtYmVycyBzaGFyZSBjcHUgcGtnIHJlc291cmNlcyAqLworI2RlZmluZSBTRF9TRVJJQUxJWkUJCTB4MDQwMAkvKiBPbmx5IGEgc2luZ2xlIGxvYWQgYmFsYW5jaW5nIGluc3RhbmNlICovCisjZGVmaW5lIFNEX1dBS0VfSURMRV9GQVIJMHgwODAwCS8qIEdhaW4gbGF0ZW5jeSBzYWNyaWZpY2luZyBjYWNoZSBoaXQgKi8KKyNkZWZpbmUgU0RfUFJFRkVSX1NJQkxJTkcJMHgxMDAwCS8qIFByZWZlciB0byBwbGFjZSB0YXNrcyBpbiBhIHNpYmxpbmcgZG9tYWluICovCiAKIGVudW0gcG93ZXJzYXZpbmdzX2JhbGFuY2VfbGV2ZWwgewogCVBPV0VSU0FWSU5HU19CQUxBTkNFX05PTkUgPSAwLCAgLyogTm8gcG93ZXIgc2F2aW5nIGxvYWQgYmFsYW5jZSAqLwpAQCAtODI3LDcgKzgzMCw3IEBACiAJaWYgKHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzKQogCQlyZXR1cm4gU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0U7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gU0RfUFJFRkVSX1NJQkxJTkc7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNkX2JhbGFuY2VfZm9yX3BhY2thZ2VfcG93ZXIodm9pZCkKQEAgLTgzNSw3ICs4MzgsNyBAQAogCWlmIChzY2hlZF9tY19wb3dlcl9zYXZpbmdzIHwgc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MpCiAJCXJldHVybiBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRTsKIAotCXJldHVybiAwOworCXJldHVybiBTRF9QUkVGRVJfU0lCTElORzsKIH0KIAogLyoKQEAgLTg1NywxNSArODYwLDkgQEAKIAogCS8qCiAJICogQ1BVIHBvd2VyIG9mIHRoaXMgZ3JvdXAsIFNDSEVEX0xPQURfU0NBTEUgYmVpbmcgbWF4IHBvd2VyIGZvciBhCi0JICogc2luZ2xlIENQVS4gVGhpcyBpcyByZWFkIG9ubHkgKGV4Y2VwdCBmb3Igc2V0dXAsIGhvdHBsdWcgQ1BVKS4KLQkgKiBOb3RlIDogTmV2ZXIgY2hhbmdlIGNwdV9wb3dlciB3aXRob3V0IHJlY29tcHV0ZSBpdHMgcmVjaXByb2NhbAorCSAqIHNpbmdsZSBDUFUuCiAJICovCi0JdW5zaWduZWQgaW50IF9fY3B1X3Bvd2VyOwotCS8qCi0JICogcmVjaXByb2NhbCB2YWx1ZSBvZiBjcHVfcG93ZXIgdG8gYXZvaWQgZXhwZW5zaXZlIGRpdmlkZXMKLQkgKiAoc2VlIGluY2x1ZGUvbGludXgvcmVjaXByb2NhbF9kaXYuaCkKLQkgKi8KLQl1MzIgcmVjaXByb2NhbF9jcHVfcG93ZXI7CisJdW5zaWduZWQgaW50IGNwdV9wb3dlcjsKIAogCS8qCiAJICogVGhlIENQVXMgdGhpcyBncm91cCBjb3ZlcnMuCkBAIC05MTgsNiArOTE1LDcgQEAKIAl1bnNpZ25lZCBpbnQgbmV3aWRsZV9pZHg7CiAJdW5zaWduZWQgaW50IHdha2VfaWR4OwogCXVuc2lnbmVkIGludCBmb3JrZXhlY19pZHg7CisJdW5zaWduZWQgaW50IHNtdF9nYWluOwogCWludCBmbGFnczsJCQkvKiBTZWUgU0RfKiAqLwogCWVudW0gc2NoZWRfZG9tYWluX2xldmVsIGxldmVsOwogCkBAIC0xMDQ1LDcgKzEwNDMsNiBAQAogCQkJICAgICAgc3RydWN0IHJxICpidXNpZXN0LCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKIAkJCSAgICAgIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKTsKIAl2b2lkICgqcHJlX3NjaGVkdWxlKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwotCWludCAoKm5lZWRzX3Bvc3Rfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEpOwogCXZvaWQgKCpwb3N0X3NjaGVkdWxlKSAoc3RydWN0IHJxICp0aGlzX3JxKTsKIAl2b2lkICgqdGFza193YWtlX3VwKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCkBAIC0xMTEwLDYgKzExMDcsOCBAQAogCXU2NAkJCXdhaXRfbWF4OwogCXU2NAkJCXdhaXRfY291bnQ7CiAJdTY0CQkJd2FpdF9zdW07CisJdTY0CQkJaW93YWl0X2NvdW50OworCXU2NAkJCWlvd2FpdF9zdW07CiAKIAl1NjQJCQlzbGVlcF9zdGFydDsKIAl1NjQJCQlzbGVlcF9tYXg7CkBAIC0xMTYzLDYgKzExNjIsOCBAQAogI2VuZGlmCiB9OwogCitzdHJ1Y3QgcmN1X25vZGU7CisKIHN0cnVjdCB0YXNrX3N0cnVjdCB7CiAJdm9sYXRpbGUgbG9uZyBzdGF0ZTsJLyogLTEgdW5ydW5uYWJsZSwgMCBydW5uYWJsZSwgPjAgc3RvcHBlZCAqLwogCXZvaWQgKnN0YWNrOwpAQCAtMTIwNiwxMCArMTIwNywxMiBAQAogCXVuc2lnbmVkIGludCBwb2xpY3k7CiAJY3B1bWFza190IGNwdXNfYWxsb3dlZDsKIAotI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVQorI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVCiAJaW50IHJjdV9yZWFkX2xvY2tfbmVzdGluZzsKLQlpbnQgcmN1X2ZsaXBjdHJfaWR4OwotI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUFJFRU1QVF9SQ1UgKi8KKwljaGFyIHJjdV9yZWFkX3VubG9ja19zcGVjaWFsOworCXN0cnVjdCByY3Vfbm9kZSAqcmN1X2Jsb2NrZWRfbm9kZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJjdV9ub2RlX2VudHJ5OworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0NIRURTVEFUUykgfHwgZGVmaW5lZChDT05GSUdfVEFTS19ERUxBWV9BQ0NUKQogCXN0cnVjdCBzY2hlZF9pbmZvIHNjaGVkX2luZm87CkBAIC0xMjMwLDExICsxMjMzLDE5IEBACiAJdW5zaWduZWQgZGlkX2V4ZWM6MTsKIAl1bnNpZ25lZCBpbl9leGVjdmU6MTsJLyogVGVsbCB0aGUgTFNNcyB0aGF0IHRoZSBwcm9jZXNzIGlzIGRvaW5nIGFuCiAJCQkJICogZXhlY3ZlICovCisJdW5zaWduZWQgaW5faW93YWl0OjE7CisKKworCS8qIFJldmVydCB0byBkZWZhdWx0IHByaW9yaXR5L3BvbGljeSB3aGVuIGZvcmtpbmcgKi8KKwl1bnNpZ25lZCBzY2hlZF9yZXNldF9vbl9mb3JrOjE7CisKIAlwaWRfdCBwaWQ7CiAJcGlkX3QgdGdpZDsKIAorI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgogCS8qIENhbmFyeSB2YWx1ZSBmb3IgdGhlIC1mc3RhY2stcHJvdGVjdG9yIGdjYyBmZWF0dXJlICovCiAJdW5zaWduZWQgbG9uZyBzdGFja19jYW5hcnk7CisjZW5kaWYKIAogCS8qIAogCSAqIHBvaW50ZXJzIHRvIChvcmlnaW5hbCkgcGFyZW50IHByb2Nlc3MsIHlvdW5nZXN0IGNoaWxkLCB5b3VuZ2VyIHNpYmxpbmcsCkBAIC0xMjkyLDYgKzEzMDMsNyBAQAogCXN0cnVjdCBtdXRleCBjcmVkX2d1YXJkX211dGV4OwkvKiBndWFyZCBhZ2FpbnN0IGZvcmVpZ24gaW5mbHVlbmNlcyBvbgogCQkJCQkgKiBjcmVkZW50aWFsIGNhbGN1bGF0aW9ucwogCQkJCQkgKiAobm90YWJseS4gcHRyYWNlKSAqLworCXN0cnVjdCBjcmVkICpyZXBsYWNlbWVudF9zZXNzaW9uX2tleXJpbmc7IC8qIGZvciBLRVlDVExfU0VTU0lPTl9UT19QQVJFTlQgKi8KIAogCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsgLyogZXhlY3V0YWJsZSBuYW1lIGV4Y2x1ZGluZyBwYXRoCiAJCQkJICAgICAtIGFjY2VzcyB3aXRoIFtnc11ldF90YXNrX2NvbW0gKHdoaWNoIGxvY2sKQEAgLTE3MjQsNiArMTczNiwyOCBAQAogI2RlZmluZSB0c2tfdXNlZF9tYXRoKHApICgocCktPmZsYWdzICYgUEZfVVNFRF9NQVRIKQogI2RlZmluZSB1c2VkX21hdGgoKSB0c2tfdXNlZF9tYXRoKGN1cnJlbnQpCiAKKyNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQorCisjZGVmaW5lIFJDVV9SRUFEX1VOTE9DS19CTE9DS0VEICgxIDw8IDApIC8qIGJsb2NrZWQgd2hpbGUgaW4gUkNVIHJlYWQtc2lkZS4gKi8KKyNkZWZpbmUgUkNVX1JFQURfVU5MT0NLX05FRURfUVMgKDEgPDwgMSkgLyogUkNVIGNvcmUgbmVlZHMgQ1BVIHJlc3BvbnNlLiAqLworI2RlZmluZSBSQ1VfUkVBRF9VTkxPQ0tfR09UX1FTICAoMSA8PCAyKSAvKiBDUFUgaGFzIHJlc3BvbmRlZCB0byBSQ1UgY29yZS4gKi8KKworc3RhdGljIGlubGluZSB2b2lkIHJjdV9jb3B5X3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXAtPnJjdV9yZWFkX2xvY2tfbmVzdGluZyA9IDA7CisJcC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgPSAwOworCXAtPnJjdV9ibG9ja2VkX25vZGUgPSBOVUxMOworCUlOSVRfTElTVF9IRUFEKCZwLT5yY3Vfbm9kZV9lbnRyeSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfY29weV9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKK30KKworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfU01QCiBleHRlcm4gaW50IHNldF9jcHVzX2FsbG93ZWRfcHRyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc2spOwpAQCAtMTgxMywxMSArMTg0NywxMiBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5OwogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfc2hhcmVzX3JhdGVsaW1pdDsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX3NoYXJlc190aHJlc2g7Ci0jaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCiBleHRlcm4gdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9jaGlsZF9ydW5zX2ZpcnN0OworI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRwogZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfZmVhdHVyZXM7CiBleHRlcm4gdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdDsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX25yX21pZ3JhdGU7CitleHRlcm4gdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF90aW1lX2F2ZzsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzY3RsX3RpbWVyX21pZ3JhdGlvbjsKIAogaW50IHNjaGVkX25yX2xhdGVuY3lfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLApAQCAtMjA3Nyw3ICsyMTEyLDcgQEAKICNkZWZpbmUgZm9yX2VhY2hfcHJvY2VzcyhwKSBcCiAJZm9yIChwID0gJmluaXRfdGFzayA7IChwID0gbmV4dF90YXNrKHApKSAhPSAmaW5pdF90YXNrIDsgKQogCi1leHRlcm4gYm9vbCBpc19zaW5nbGVfdGhyZWFkZWQoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIGJvb2wgY3VycmVudF9pc19zaW5nbGVfdGhyZWFkZWQodm9pZCk7CiAKIC8qCiAgKiBDYXJlZnVsOiBkb19lYWNoX3RocmVhZC93aGlsZV9lYWNoX3RocmVhZCBpcyBhIGRvdWJsZSBsb29wIHNvCkBAIC0yMjgxLDIzICsyMzE2LDMxIEBACiAgKiBjb25kX3Jlc2NoZWRfc29mdGlycSgpIHdpbGwgZW5hYmxlIGJocyBiZWZvcmUgc2NoZWR1bGluZy4KICAqLwogZXh0ZXJuIGludCBfY29uZF9yZXNjaGVkKHZvaWQpOwotI2lmZGVmIENPTkZJR19QUkVFTVBUX0JLTAotc3RhdGljIGlubGluZSBpbnQgY29uZF9yZXNjaGVkKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19CisKKyNkZWZpbmUgY29uZF9yZXNjaGVkKCkgKHsJCQlcCisJX19taWdodF9zbGVlcChfX0ZJTEVfXywgX19MSU5FX18sIDApOwlcCisJX2NvbmRfcmVzY2hlZCgpOwkJCVwKK30pCisKK2V4dGVybiBpbnQgX19jb25kX3Jlc2NoZWRfbG9jayhzcGlubG9ja190ICpsb2NrKTsKKworI2lmZGVmIENPTkZJR19QUkVFTVBUCisjZGVmaW5lIFBSRUVNUFRfTE9DS19PRkZTRVQJUFJFRU1QVF9PRkZTRVQKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBjb25kX3Jlc2NoZWQodm9pZCkKLXsKLQlyZXR1cm4gX2NvbmRfcmVzY2hlZCgpOwotfQorI2RlZmluZSBQUkVFTVBUX0xPQ0tfT0ZGU0VUCTAKICNlbmRpZgotZXh0ZXJuIGludCBjb25kX3Jlc2NoZWRfbG9jayhzcGlubG9ja190ICogbG9jayk7Ci1leHRlcm4gaW50IGNvbmRfcmVzY2hlZF9zb2Z0aXJxKHZvaWQpOwotc3RhdGljIGlubGluZSBpbnQgY29uZF9yZXNjaGVkX2JrbCh2b2lkKQotewotCXJldHVybiBfY29uZF9yZXNjaGVkKCk7Ci19CisKKyNkZWZpbmUgY29uZF9yZXNjaGVkX2xvY2sobG9jaykgKHsJCQkJXAorCV9fbWlnaHRfc2xlZXAoX19GSUxFX18sIF9fTElORV9fLCBQUkVFTVBUX0xPQ0tfT0ZGU0VUKTsJXAorCV9fY29uZF9yZXNjaGVkX2xvY2sobG9jayk7CQkJCVwKK30pCisKK2V4dGVybiBpbnQgX19jb25kX3Jlc2NoZWRfc29mdGlycSh2b2lkKTsKKworI2RlZmluZSBjb25kX3Jlc2NoZWRfc29mdGlycSgpICh7CQkJCVwKKwlfX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgU09GVElSUV9PRkZTRVQpOwlcCisJX19jb25kX3Jlc2NoZWRfc29mdGlycSgpOwkJCQlcCit9KQogCiAvKgogICogRG9lcyBhIGNyaXRpY2FsIHNlY3Rpb24gbmVlZCB0byBiZSBicm9rZW4gZHVlIHRvIGFub3RoZXIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxZjE2ZWVhLi5kMDUwYjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC01Myw3ICs1Myw3IEBACiBleHRlcm4gaW50IGNhcF9jYXBhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKIAkJICAgICAgIGludCBjYXAsIGludCBhdWRpdCk7CiBleHRlcm4gaW50IGNhcF9zZXR0aW1lKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHN0cnVjdCB0aW1lem9uZSAqdHopOwotZXh0ZXJuIGludCBjYXBfcHRyYWNlX21heV9hY2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpOworZXh0ZXJuIGludCBjYXBfcHRyYWNlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBpbnQgbW9kZSk7CiBleHRlcm4gaW50IGNhcF9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7CiBleHRlcm4gaW50IGNhcF9jYXBnZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLCBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCk7CiBleHRlcm4gaW50IGNhcF9jYXBzZXQoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCwKQEAgLTY1Myw2ICs2NTMsMTEgQEAKICAqCW1hbnVhbCBwYWdlIGZvciBkZWZpbml0aW9ucyBvZiB0aGUgQGNsb25lX2ZsYWdzLgogICoJQGNsb25lX2ZsYWdzIGNvbnRhaW5zIHRoZSBmbGFncyBpbmRpY2F0aW5nIHdoYXQgc2hvdWxkIGJlIHNoYXJlZC4KICAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KKyAqIEBjcmVkX2FsbG9jX2JsYW5rOgorICoJQGNyZWQgcG9pbnRzIHRvIHRoZSBjcmVkZW50aWFscy4KKyAqCUBnZnAgaW5kaWNhdGVzIHRoZSBhdG9taWNpdHkgb2YgYW55IG1lbW9yeSBhbGxvY2F0aW9ucy4KKyAqCU9ubHkgYWxsb2NhdGUgc3VmZmljaWVudCBtZW1vcnkgYW5kIGF0dGFjaCB0byBAY3JlZCBzdWNoIHRoYXQKKyAqCWNyZWRfdHJhbnNmZXIoKSB3aWxsIG5vdCBnZXQgRU5PTUVNLgogICogQGNyZWRfZnJlZToKICAqCUBjcmVkIHBvaW50cyB0byB0aGUgY3JlZGVudGlhbHMuCiAgKglEZWFsbG9jYXRlIGFuZCBjbGVhciB0aGUgY3JlZC0+c2VjdXJpdHkgZmllbGQgaW4gYSBzZXQgb2YgY3JlZGVudGlhbHMuCkBAIC02NjUsNiArNjcwLDEwIEBACiAgKglAbmV3IHBvaW50cyB0byB0aGUgbmV3IGNyZWRlbnRpYWxzLgogICoJQG9sZCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsIGNyZWRlbnRpYWxzLgogICoJSW5zdGFsbCBhIG5ldyBzZXQgb2YgY3JlZGVudGlhbHMuCisgKiBAY3JlZF90cmFuc2ZlcjoKKyAqCUBuZXcgcG9pbnRzIHRvIHRoZSBuZXcgY3JlZGVudGlhbHMuCisgKglAb2xkIHBvaW50cyB0byB0aGUgb3JpZ2luYWwgY3JlZGVudGlhbHMuCisgKglUcmFuc2ZlciBkYXRhIGZyb20gb3JpZ2luYWwgY3JlZHMgdG8gbmV3IGNyZWRzCiAgKiBAa2VybmVsX2FjdF9hczoKICAqCVNldCB0aGUgY3JlZGVudGlhbHMgZm9yIGEga2VybmVsIHNlcnZpY2UgdG8gYWN0IGFzIChzdWJqZWN0aXZlIGNvbnRleHQpLgogICoJQG5ldyBwb2ludHMgdG8gdGhlIGNyZWRlbnRpYWxzIHRvIGJlIG1vZGlmaWVkLgpAQCAtNjc4LDYgKzY4NywxMCBAQAogICoJQGlub2RlIHBvaW50cyB0byB0aGUgaW5vZGUgdG8gdXNlIGFzIGEgcmVmZXJlbmNlLgogICoJVGhlIGN1cnJlbnQgdGFzayBtdXN0IGJlIHRoZSBvbmUgdGhhdCBub21pbmF0ZWQgQGlub2RlLgogICoJUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bC4KKyAqIEBrZXJuZWxfbW9kdWxlX3JlcXVlc3Q6CisgKglBYmlsaXR5IHRvIHRyaWdnZXIgdGhlIGtlcm5lbCB0byBhdXRvbWF0aWNhbGx5IHVwY2FsbCB0byB1c2Vyc3BhY2UgZm9yCisgKgl1c2Vyc3BhY2UgdG8gbG9hZCBhIGtlcm5lbCBtb2R1bGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKyAqCVJldHVybiAwIGlmIHN1Y2Nlc3NmdWwuCiAgKiBAdGFza19zZXR1aWQ6CiAgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSBzZXR0aW5nIG9uZSBvciBtb3JlIG9mIHRoZSB1c2VyIGlkZW50aXR5CiAgKglhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuICBUaGUgQGZsYWdzIHBhcmFtZXRlciBpbmRpY2F0ZXMKQEAgLTk5NCw2ICsxMDA3LDE3IEBACiAgKglTZXRzIHRoZSBjb25uZWN0aW9uJ3MgcGVlcnNpZCB0byB0aGUgc2VjbWFyayBvbiBza2IuCiAgKiBAcmVxX2NsYXNzaWZ5X2Zsb3c6CiAgKglTZXRzIHRoZSBmbG93J3Mgc2lkIHRvIHRoZSBvcGVucmVxIHNpZC4KKyAqIEB0dW5fZGV2X2NyZWF0ZToKKyAqCUNoZWNrIHBlcm1pc3Npb25zIHByaW9yIHRvIGNyZWF0aW5nIGEgbmV3IFRVTiBkZXZpY2UuCisgKiBAdHVuX2Rldl9wb3N0X2NyZWF0ZToKKyAqCVRoaXMgaG9vayBhbGxvd3MgYSBtb2R1bGUgdG8gdXBkYXRlIG9yIGFsbG9jYXRlIGEgcGVyLXNvY2tldCBzZWN1cml0eQorICoJc3RydWN0dXJlLgorICoJQHNrIGNvbnRhaW5zIHRoZSBuZXdseSBjcmVhdGVkIHNvY2sgc3RydWN0dXJlLgorICogQHR1bl9kZXZfYXR0YWNoOgorICoJQ2hlY2sgcGVybWlzc2lvbnMgcHJpb3IgdG8gYXR0YWNoaW5nIHRvIGEgcGVyc2lzdGVudCBUVU4gZGV2aWNlLiAgVGhpcworICoJaG9vayBjYW4gYWxzbyBiZSB1c2VkIGJ5IHRoZSBtb2R1bGUgdG8gdXBkYXRlIGFueSBzZWN1cml0eSBzdGF0ZQorICoJYXNzb2NpYXRlZCB3aXRoIHRoZSBUVU4gZGV2aWNlJ3Mgc29jayBzdHJ1Y3R1cmUuCisgKglAc2sgY29udGFpbnMgdGhlIGV4aXN0aW5nIHNvY2sgc3RydWN0dXJlLgogICoKICAqIFNlY3VyaXR5IGhvb2tzIGZvciBYRlJNIG9wZXJhdGlvbnMuCiAgKgpAQCAtMTA4OCw2ICsxMTEyLDEzIEBACiAgKglSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIChpbmNsdWRpbmcgdGVybWluYXRpbmcgTlVMKSBvciAtdmUgaWYKICAqICAgICAgYW4gZXJyb3IuCiAgKglNYXkgYWxzbyByZXR1cm4gMCAoYW5kIGEgTlVMTCBidWZmZXIgcG9pbnRlcikgaWYgdGhlcmUgaXMgbm8gbGFiZWwuCisgKiBAa2V5X3Nlc3Npb25fdG9fcGFyZW50OgorICoJRm9yY2libHkgYXNzaWduIHRoZSBzZXNzaW9uIGtleXJpbmcgZnJvbSBhIHByb2Nlc3MgdG8gaXRzIHBhcmVudAorICoJcHJvY2Vzcy4KKyAqCUBjcmVkOiBQb2ludGVyIHRvIHByb2Nlc3MncyBjcmVkZW50aWFscworICoJQHBhcmVudF9jcmVkOiBQb2ludGVyIHRvIHBhcmVudCBwcm9jZXNzJ3MgY3JlZGVudGlhbHMKKyAqCUBrZXlyaW5nOiBQcm9wb3NlZCBuZXcgc2Vzc2lvbiBrZXlyaW5nCisgKglSZXR1cm4gMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQsIC12ZSBlcnJvciBvdGhlcndpc2UuCiAgKgogICogU2VjdXJpdHkgaG9va3MgYWZmZWN0aW5nIGFsbCBTeXN0ZW0gViBJUEMgb3BlcmF0aW9ucy4KICAqCkBAIC0xMjI5LDcgKzEyNjAsNyBAQAogICoJQGFsdGVyIGNvbnRhaW5zIHRoZSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBjaGFuZ2VzIGFyZSB0byBiZSBtYWRlLgogICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICoKLSAqIEBwdHJhY2VfbWF5X2FjY2VzczoKKyAqIEBwdHJhY2VfYWNjZXNzX2NoZWNrOgogICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgYWxsb3dpbmcgdGhlIGN1cnJlbnQgcHJvY2VzcyB0byB0cmFjZSB0aGUKICAqCUBjaGlsZCBwcm9jZXNzLgogICoJU2VjdXJpdHkgbW9kdWxlcyBtYXkgYWxzbyB3YW50IHRvIHBlcmZvcm0gYSBwcm9jZXNzIHRyYWNpbmcgY2hlY2sKQEAgLTEyNDQsNyArMTI3NSw3IEBACiAgKglDaGVjayB0aGF0IHRoZSBAcGFyZW50IHByb2Nlc3MgaGFzIHN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byB0cmFjZSB0aGUKICAqCWN1cnJlbnQgcHJvY2VzcyBiZWZvcmUgYWxsb3dpbmcgdGhlIGN1cnJlbnQgcHJvY2VzcyB0byBwcmVzZW50IGl0c2VsZgogICoJdG8gdGhlIEBwYXJlbnQgcHJvY2VzcyBmb3IgdHJhY2luZy4KLSAqCVRoZSBwYXJlbnQgcHJvY2VzcyB3aWxsIHN0aWxsIGhhdmUgdG8gdW5kZXJnbyB0aGUgcHRyYWNlX21heV9hY2Nlc3MKKyAqCVRoZSBwYXJlbnQgcHJvY2VzcyB3aWxsIHN0aWxsIGhhdmUgdG8gdW5kZXJnbyB0aGUgcHRyYWNlX2FjY2Vzc19jaGVjawogICoJY2hlY2tzIGJlZm9yZSBpdCBpcyBhbGxvd2VkIHRvIHRyYWNlIHRoaXMgb25lLgogICoJQHBhcmVudCBjb250YWlucyB0aGUgdGFza19zdHJ1Y3Qgc3RydWN0dXJlIGZvciBkZWJ1Z2dlciBwcm9jZXNzLgogICoJUmV0dXJuIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgpAQCAtMTM1MSwxMiArMTM4Miw0NyBAQAogICoJYXVkaXRfcnVsZV9pbml0LgogICoJQHJ1bGUgY29udGFpbnMgdGhlIGFsbG9jYXRlZCBydWxlCiAgKgorICogQGlub2RlX25vdGlmeXNlY2N0eDoKKyAqCU5vdGlmeSB0aGUgc2VjdXJpdHkgbW9kdWxlIG9mIHdoYXQgdGhlIHNlY3VyaXR5IGNvbnRleHQgb2YgYW4gaW5vZGUKKyAqCXNob3VsZCBiZS4gIEluaXRpYWxpemVzIHRoZSBpbmNvcmUgc2VjdXJpdHkgY29udGV4dCBtYW5hZ2VkIGJ5IHRoZQorICoJc2VjdXJpdHkgbW9kdWxlIGZvciB0aGlzIGlub2RlLiAgRXhhbXBsZSB1c2FnZTogIE5GUyBjbGllbnQgaW52b2tlcworICoJdGhpcyBob29rIHRvIGluaXRpYWxpemUgdGhlIHNlY3VyaXR5IGNvbnRleHQgaW4gaXRzIGluY29yZSBpbm9kZSB0byB0aGUKKyAqCXZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIgZm9yIHRoZSBmaWxlIHdoZW4gdGhlIHNlcnZlciByZXR1cm5lZCB0aGUKKyAqCWZpbGUncyBhdHRyaWJ1dGVzIHRvIHRoZSBjbGllbnQuCisgKgorICogCU11c3QgYmUgY2FsbGVkIHdpdGggaW5vZGUtPmlfbXV0ZXggbG9ja2VkLgorICoKKyAqIAlAaW5vZGUgd2Ugd2lzaCB0byBzZXQgdGhlIHNlY3VyaXR5IGNvbnRleHQgb2YuCisgKiAJQGN0eCBjb250YWlucyB0aGUgc3RyaW5nIHdoaWNoIHdlIHdpc2ggdG8gc2V0IGluIHRoZSBpbm9kZS4KKyAqIAlAY3R4bGVuIGNvbnRhaW5zIHRoZSBsZW5ndGggb2YgQGN0eC4KKyAqCisgKiBAaW5vZGVfc2V0c2VjY3R4OgorICogCUNoYW5nZSB0aGUgc2VjdXJpdHkgY29udGV4dCBvZiBhbiBpbm9kZS4gIFVwZGF0ZXMgdGhlCisgKiAJaW5jb3JlIHNlY3VyaXR5IGNvbnRleHQgbWFuYWdlZCBieSB0aGUgc2VjdXJpdHkgbW9kdWxlIGFuZCBpbnZva2VzIHRoZQorICogCWZzIGNvZGUgYXMgbmVlZGVkICh2aWEgX192ZnNfc2V0eGF0dHJfbm9wZXJtKSB0byB1cGRhdGUgYW55IGJhY2tpbmcKKyAqIAl4YXR0cnMgdGhhdCByZXByZXNlbnQgdGhlIGNvbnRleHQuICBFeGFtcGxlIHVzYWdlOiAgTkZTIHNlcnZlciBpbnZva2VzCisgKiAJdGhpcyBob29rIHRvIGNoYW5nZSB0aGUgc2VjdXJpdHkgY29udGV4dCBpbiBpdHMgaW5jb3JlIGlub2RlIGFuZCBvbiB0aGUKKyAqIAliYWNraW5nIGZpbGVzeXN0ZW0gdG8gYSB2YWx1ZSBwcm92aWRlZCBieSB0aGUgY2xpZW50IG9uIGEgU0VUQVRUUgorICogCW9wZXJhdGlvbi4KKyAqCisgKiAJTXVzdCBiZSBjYWxsZWQgd2l0aCBpbm9kZS0+aV9tdXRleCBsb2NrZWQuCisgKgorICogCUBkZW50cnkgY29udGFpbnMgdGhlIGlub2RlIHdlIHdpc2ggdG8gc2V0IHRoZSBzZWN1cml0eSBjb250ZXh0IG9mLgorICogCUBjdHggY29udGFpbnMgdGhlIHN0cmluZyB3aGljaCB3ZSB3aXNoIHRvIHNldCBpbiB0aGUgaW5vZGUuCisgKiAJQGN0eGxlbiBjb250YWlucyB0aGUgbGVuZ3RoIG9mIEBjdHguCisgKgorICogQGlub2RlX2dldHNlY2N0eDoKKyAqIAlSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIHJlbGF2ZW50IHNlY3VyaXR5IGNvbnRleHQgaW5mb3JtYXRpb24KKyAqCisgKiAJQGlub2RlIHdlIHdpc2ggdG8gc2V0IHRoZSBzZWN1cml0eSBjb250ZXh0IG9mLgorICoJQGN0eCBpcyBhIHBvaW50ZXIgaW4gd2hpY2ggdG8gcGxhY2UgdGhlIGFsbG9jYXRlZCBzZWN1cml0eSBjb250ZXh0LgorICoJQGN0eGxlbiBwb2ludHMgdG8gdGhlIHBsYWNlIHRvIHB1dCB0aGUgbGVuZ3RoIG9mIEBjdHguCiAgKiBUaGlzIGlzIHRoZSBtYWluIHNlY3VyaXR5IHN0cnVjdHVyZS4KICAqLwogc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgewogCWNoYXIgbmFtZVtTRUNVUklUWV9OQU1FX01BWCArIDFdOwogCi0JaW50ICgqcHRyYWNlX21heV9hY2Nlc3MpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBpbnQgbW9kZSk7CisJaW50ICgqcHRyYWNlX2FjY2Vzc19jaGVjaykgKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBtb2RlKTsKIAlpbnQgKCpwdHJhY2VfdHJhY2VtZSkgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KTsKIAlpbnQgKCpjYXBnZXQpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKIAkJICAgICAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLApAQCAtMTQ4MywxMiArMTU0OSwxNSBAQAogCWludCAoKmRlbnRyeV9vcGVuKSAoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKTsKIAogCWludCAoKnRhc2tfY3JlYXRlKSAodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncyk7CisJaW50ICgqY3JlZF9hbGxvY19ibGFuaykgKHN0cnVjdCBjcmVkICpjcmVkLCBnZnBfdCBnZnApOwogCXZvaWQgKCpjcmVkX2ZyZWUpIChzdHJ1Y3QgY3JlZCAqY3JlZCk7CiAJaW50ICgqY3JlZF9wcmVwYXJlKShzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLAogCQkJICAgIGdmcF90IGdmcCk7CiAJdm9pZCAoKmNyZWRfY29tbWl0KShzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkKTsKKwl2b2lkICgqY3JlZF90cmFuc2Zlcikoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCk7CiAJaW50ICgqa2VybmVsX2FjdF9hcykoc3RydWN0IGNyZWQgKm5ldywgdTMyIHNlY2lkKTsKIAlpbnQgKCprZXJuZWxfY3JlYXRlX2ZpbGVzX2FzKShzdHJ1Y3QgY3JlZCAqbmV3LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKwlpbnQgKCprZXJuZWxfbW9kdWxlX3JlcXVlc3QpKHZvaWQpOwogCWludCAoKnRhc2tfc2V0dWlkKSAodWlkX3QgaWQwLCB1aWRfdCBpZDEsIHVpZF90IGlkMiwgaW50IGZsYWdzKTsKIAlpbnQgKCp0YXNrX2ZpeF9zZXR1aWQpIChzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLAogCQkJCWludCBmbGFncyk7CkBAIC0xNTU2LDYgKzE2MjUsMTAgQEAKIAlpbnQgKCpzZWNjdHhfdG9fc2VjaWQpIChjb25zdCBjaGFyICpzZWNkYXRhLCB1MzIgc2VjbGVuLCB1MzIgKnNlY2lkKTsKIAl2b2lkICgqcmVsZWFzZV9zZWNjdHgpIChjaGFyICpzZWNkYXRhLCB1MzIgc2VjbGVuKTsKIAorCWludCAoKmlub2RlX25vdGlmeXNlY2N0eCkoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqY3R4LCB1MzIgY3R4bGVuKTsKKwlpbnQgKCppbm9kZV9zZXRzZWNjdHgpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdm9pZCAqY3R4LCB1MzIgY3R4bGVuKTsKKwlpbnQgKCppbm9kZV9nZXRzZWNjdHgpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKipjdHgsIHUzMiAqY3R4bGVuKTsKKwogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLCiAJaW50ICgqdW5peF9zdHJlYW1fY29ubmVjdCkgKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkJICAgIHN0cnVjdCBzb2NrZXQgKm90aGVyLCBzdHJ1Y3Qgc29jayAqbmV3c2spOwpAQCAtMTU5Miw2ICsxNjY1LDkgQEAKIAl2b2lkICgqaW5ldF9jc2tfY2xvbmUpIChzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiAJdm9pZCAoKmluZXRfY29ubl9lc3RhYmxpc2hlZCkgKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJdm9pZCAoKnJlcV9jbGFzc2lmeV9mbG93KSAoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBzdHJ1Y3QgZmxvd2kgKmZsKTsKKwlpbnQgKCp0dW5fZGV2X2NyZWF0ZSkodm9pZCk7CisJdm9pZCAoKnR1bl9kZXZfcG9zdF9jcmVhdGUpKHN0cnVjdCBzb2NrICpzayk7CisJaW50ICgqdHVuX2Rldl9hdHRhY2gpKHN0cnVjdCBzb2NrICpzayk7CiAjZW5kaWYJLyogQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgKi8KIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0KQEAgLTE2MjAsNiArMTY5Niw5IEBACiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCiAJCQkgICAgICAga2V5X3Blcm1fdCBwZXJtKTsKIAlpbnQgKCprZXlfZ2V0c2VjdXJpdHkpKHN0cnVjdCBrZXkgKmtleSwgY2hhciAqKl9idWZmZXIpOworCWludCAoKmtleV9zZXNzaW9uX3RvX3BhcmVudCkoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqcGFyZW50X2NyZWQsCisJCQkJICAgICBzdHJ1Y3Qga2V5ICprZXkpOwogI2VuZGlmCS8qIENPTkZJR19LRVlTICovCiAKICNpZmRlZiBDT05GSUdfQVVESVQKQEAgLTE2MzcsNyArMTcxNiw3IEBACiBleHRlcm4gaW50IHJlZ2lzdGVyX3NlY3VyaXR5KHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zICpvcHMpOwogCiAvKiBTZWN1cml0eSBvcGVyYXRpb25zICovCi1pbnQgc2VjdXJpdHlfcHRyYWNlX21heV9hY2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpOworaW50IHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpOwogaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KTsKIGludCBzZWN1cml0eV9jYXBnZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCiAJCSAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKQEAgLTE3MzYsMTEgKzE4MTUsMTQgQEAKIGludCBzZWN1cml0eV9maWxlX3JlY2VpdmUoc3RydWN0IGZpbGUgKmZpbGUpOwogaW50IHNlY3VyaXR5X2RlbnRyeV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCk7CiBpbnQgc2VjdXJpdHlfdGFza19jcmVhdGUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncyk7CitpbnQgc2VjdXJpdHlfY3JlZF9hbGxvY19ibGFuayhzdHJ1Y3QgY3JlZCAqY3JlZCwgZ2ZwX3QgZ2ZwKTsKIHZvaWQgc2VjdXJpdHlfY3JlZF9mcmVlKHN0cnVjdCBjcmVkICpjcmVkKTsKIGludCBzZWN1cml0eV9wcmVwYXJlX2NyZWRzKHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsIGdmcF90IGdmcCk7CiB2b2lkIHNlY3VyaXR5X2NvbW1pdF9jcmVkcyhzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkKTsKK3ZvaWQgc2VjdXJpdHlfdHJhbnNmZXJfY3JlZHMoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCk7CiBpbnQgc2VjdXJpdHlfa2VybmVsX2FjdF9hcyhzdHJ1Y3QgY3JlZCAqbmV3LCB1MzIgc2VjaWQpOwogaW50IHNlY3VyaXR5X2tlcm5lbF9jcmVhdGVfZmlsZXNfYXMoc3RydWN0IGNyZWQgKm5ldywgc3RydWN0IGlub2RlICppbm9kZSk7CitpbnQgc2VjdXJpdHlfa2VybmVsX21vZHVsZV9yZXF1ZXN0KHZvaWQpOwogaW50IHNlY3VyaXR5X3Rhc2tfc2V0dWlkKHVpZF90IGlkMCwgdWlkX3QgaWQxLCB1aWRfdCBpZDIsIGludCBmbGFncyk7CiBpbnQgc2VjdXJpdHlfdGFza19maXhfc2V0dWlkKHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsCiAJCQkgICAgIGludCBmbGFncyk7CkBAIC0xNzk2LDYgKzE4NzgsOSBAQAogaW50IHNlY3VyaXR5X3NlY2N0eF90b19zZWNpZChjb25zdCBjaGFyICpzZWNkYXRhLCB1MzIgc2VjbGVuLCB1MzIgKnNlY2lkKTsKIHZvaWQgc2VjdXJpdHlfcmVsZWFzZV9zZWNjdHgoY2hhciAqc2VjZGF0YSwgdTMyIHNlY2xlbik7CiAKK2ludCBzZWN1cml0eV9pbm9kZV9ub3RpZnlzZWNjdHgoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqY3R4LCB1MzIgY3R4bGVuKTsKK2ludCBzZWN1cml0eV9pbm9kZV9zZXRzZWNjdHgoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB2b2lkICpjdHgsIHUzMiBjdHhsZW4pOworaW50IHNlY3VyaXR5X2lub2RlX2dldHNlY2N0eChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICoqY3R4LCB1MzIgKmN0eGxlbik7CiAjZWxzZSAvKiBDT05GSUdfU0VDVVJJVFkgKi8KIHN0cnVjdCBzZWN1cml0eV9tbnRfb3B0cyB7CiB9OwpAQCAtMTgxOCwxMCArMTkwMywxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfbWF5X2FjY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcHRyYWNlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBtb2RlKQogewotCXJldHVybiBjYXBfcHRyYWNlX21heV9hY2Nlc3MoY2hpbGQsIG1vZGUpOworCXJldHVybiBjYXBfcHRyYWNlX2FjY2Vzc19jaGVjayhjaGlsZCwgbW9kZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQpAQCAtMjI2Niw2ICsyMzUxLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NyZWRfYWxsb2NfYmxhbmsoc3RydWN0IGNyZWQgKmNyZWQsIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X2NyZWRfZnJlZShzdHJ1Y3QgY3JlZCAqY3JlZCkKIHsgfQogCkBAIC0yMjgxLDYgKzIzNzEsMTEgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3RyYW5zZmVyX2NyZWRzKHN0cnVjdCBjcmVkICpuZXcsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQpCit7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2tlcm5lbF9hY3RfYXMoc3RydWN0IGNyZWQgKmNyZWQsIHUzMiBzZWNpZCkKIHsKIAlyZXR1cm4gMDsKQEAgLTIyOTIsNiArMjM4NywxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9rZXJuZWxfbW9kdWxlX3JlcXVlc3Qodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfdGFza19zZXR1aWQodWlkX3QgaWQwLCB1aWRfdCBpZDEsIHVpZF90IGlkMiwKIAkJCQkgICAgICAgaW50IGZsYWdzKQogewpAQCAtMjUzNyw2ICsyNjM3LDE5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfcmVsZWFzZV9zZWNjdHgoY2hhciAqc2VjZGF0YSwgdTMyIHNlY2xlbikKIHsKIH0KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbm90aWZ5c2VjY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmN0eCwgdTMyIGN0eGxlbikKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zZXRzZWNjdHgoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB2b2lkICpjdHgsIHUzMiBjdHhsZW4pCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfZ2V0c2VjY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKipjdHgsIHUzMiAqY3R4bGVuKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFkgKi8KIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLCkBAIC0yNTc1LDYgKzI2ODgsOSBAQAogCQkJY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIHZvaWQgc2VjdXJpdHlfaW5ldF9jb25uX2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywKIAkJCXN0cnVjdCBza19idWZmICpza2IpOworaW50IHNlY3VyaXR5X3R1bl9kZXZfY3JlYXRlKHZvaWQpOwordm9pZCBzZWN1cml0eV90dW5fZGV2X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrICpzayk7CitpbnQgc2VjdXJpdHlfdHVuX2Rldl9hdHRhY2goc3RydWN0IHNvY2sgKnNrKTsKIAogI2Vsc2UJLyogQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3VuaXhfc3RyZWFtX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywKQEAgLTI3MjUsNiArMjg0MSwyMCBAQAogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIH0KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfdHVuX2Rldl9jcmVhdGUodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3R1bl9kZXZfcG9zdF9jcmVhdGUoc3RydWN0IHNvY2sgKnNrKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV90dW5fZGV2X2F0dGFjaChzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYJLyogQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgKi8KIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0KQEAgLTI4ODEsNiArMzAxMSw5IEBACiBpbnQgc2VjdXJpdHlfa2V5X3Blcm1pc3Npb24oa2V5X3JlZl90IGtleV9yZWYsCiAJCQkgICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGtleV9wZXJtX3QgcGVybSk7CiBpbnQgc2VjdXJpdHlfa2V5X2dldHNlY3VyaXR5KHN0cnVjdCBrZXkgKmtleSwgY2hhciAqKl9idWZmZXIpOworaW50IHNlY3VyaXR5X2tleV9zZXNzaW9uX3RvX3BhcmVudChjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgY3JlZCAqcGFyZW50X2NyZWQsCisJCQkJICAgc3RydWN0IGtleSAqa2V5KTsKIAogI2Vsc2UKIApAQCAtMjkwOCw2ICszMDQxLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2tleV9zZXNzaW9uX3RvX3BhcmVudChjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKKwkJCQkJCSBjb25zdCBzdHJ1Y3QgY3JlZCAqcGFyZW50X2NyZWQsCisJCQkJCQkgc3RydWN0IGtleSAqa2V5KQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfS0VZUyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlbGludXguaCBiL2luY2x1ZGUvbGludXgvc2VsaW51eC5oCmluZGV4IDIwZjk2NWQuLjgyZTBmMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VsaW51eC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VsaW51eC5oCkBAIC02MSw2ICs2MSwxMSBAQAogICogICAgIGV4aXN0aW5nIFNFQ01BUksgdGFyZ2V0cyBoYXMgYmVlbiByZW1vdmVkL2ZsdXNoZWQuCiAgKi8KIHZvaWQgc2VsaW51eF9zZWNtYXJrX3JlZmNvdW50X2RlYyh2b2lkKTsKKworLyoqCisgKiBzZWxpbnV4X2lzX2VuYWJsZWQgLSBpcyBTRUxpbnV4IGVuYWJsZWQ/CisgKi8KK2Jvb2wgc2VsaW51eF9pc19lbmFibGVkKHZvaWQpOwogI2Vsc2UKIAogc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9zdHJpbmdfdG9fc2lkKGNvbnN0IGNoYXIgKnN0ciwgdTMyICpzaWQpCkBAIC04NCw2ICs4OSwxMCBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIGlubGluZSBib29sIHNlbGludXhfaXNfZW5hYmxlZCh2b2lkKQoreworCXJldHVybiBmYWxzZTsKK30KICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWCAqLwogCiAjZW5kaWYgLyogX0xJTlVYX1NFTElOVVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpby5oIGIvaW5jbHVkZS9saW51eC9zZXJpby5oCmluZGV4IDEyNmQyNGMuLmE2NDBiYzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlvLmgKQEAgLTMxLDggKzMxLDYgQEAKIAogCWJvb2wgbWFudWFsX2JpbmQ7CiAJYm9vbCByZWdpc3RlcmVkOwkvKiBwb3J0IGhhcyBiZWVuIGZ1bGx5IHJlZ2lzdGVyZWQgd2l0aCBkcml2ZXIgY29yZSAqLwotCWJvb2wgc3VzcGVuZGVkOwkJLyogcG9ydCBpcyBzdXNwZW5kZWQgKi8KLQogCiAJc3RydWN0IHNlcmlvX2RldmljZV9pZCBpZDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCmluZGV4IGFiZmY2YzkuLjZkM2YyZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgKQEAgLTM5LDcgKzM5LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0wKLWludCBzaG1lbV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworaW50IHNobWVtX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKIGludCBzaG1lbV9hY2xfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopOwogCiBleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgc2htZW1feGF0dHJfYWNsX2FjY2Vzc19oYW5kbGVyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggZjJjNjlhMi4uZGY3YjIzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0zMDQsNyArMzA0LDYgQEAKICAqCUB0Y19pbmRleDogVHJhZmZpYyBjb250cm9sIGluZGV4CiAgKglAdGNfdmVyZDogdHJhZmZpYyBjb250cm9sIHZlcmRpY3QKICAqCUBuZGlzY19ub2RldHlwZTogcm91dGVyIHR5cGUgKGZyb20gbGluayBsYXllcikKLSAqCUBkb19ub3RfZW5jcnlwdDogc2V0IHRvIHByZXZlbnQgZW5jcnlwdGlvbiBvZiB0aGlzIGZyYW1lCiAgKglAZG1hX2Nvb2tpZTogYSBjb29raWUgdG8gb25lIG9mIHNldmVyYWwgcG9zc2libGUgRE1BIG9wZXJhdGlvbnMKICAqCQlkb25lIGJ5IHNrYiBETUEgZnVuY3Rpb25zCiAgKglAc2VjbWFyazogc2VjdXJpdHkgbWFya2luZwpAQCAtMzgwLDEyICszNzksOSBAQAogI2lmZGVmIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFCiAJX191OAkJCW5kaXNjX25vZGV0eXBlOjI7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19NQUM4MDIxMSkgfHwgZGVmaW5lZChDT05GSUdfTUFDODAyMTFfTU9EVUxFKQotCV9fdTgJCQlkb19ub3RfZW5jcnlwdDoxOwotI2VuZGlmCiAJa21lbWNoZWNrX2JpdGZpZWxkX2VuZChmbGFnczIpOwogCi0JLyogMC8xMy8xNCBiaXQgaG9sZSAqLworCS8qIDAvMTQgYml0IGhvbGUgKi8KIAogI2lmZGVmIENPTkZJR19ORVRfRE1BCiAJZG1hX2Nvb2tpZV90CQlkbWFfY29va2llOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbG9iX2RlZi5oIGIvaW5jbHVkZS9saW51eC9zbG9iX2RlZi5oCmluZGV4IGJiNTM2OGQuLjBlYzAwYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xvYl9kZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Nsb2JfZGVmLmgKQEAgLTM0LDkgKzM0LDQgQEAKIAlyZXR1cm4ga21hbGxvYyhzaXplLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtX2NhY2hlX2luaXRfbGF0ZSh2b2lkKQotewotCS8qIE5vdGhpbmcgdG8gZG8gKi8KLX0KLQogI2VuZGlmIC8qIF9fTElOVVhfU0xPQl9ERUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oIGIvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCmluZGV4IGMxYzg2MmIuLjVhZDcwYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKQEAgLTE1MywxMiArMTUzLDEwIEBACiAJaWYgKHNpemUgPD0gS01BTExPQ19NSU5fU0laRSkKIAkJcmV0dXJuIEtNQUxMT0NfU0hJRlRfTE9XOwogCi0jaWYgS01BTExPQ19NSU5fU0laRSA8PSA2NAotCWlmIChzaXplID4gNjQgJiYgc2l6ZSA8PSA5NikKKwlpZiAoS01BTExPQ19NSU5fU0laRSA8PSAzMiAmJiBzaXplID4gNjQgJiYgc2l6ZSA8PSA5NikKIAkJcmV0dXJuIDE7Ci0JaWYgKHNpemUgPiAxMjggJiYgc2l6ZSA8PSAxOTIpCisJaWYgKEtNQUxMT0NfTUlOX1NJWkUgPD0gNjQgJiYgc2l6ZSA+IDEyOCAmJiBzaXplIDw9IDE5MikKIAkJcmV0dXJuIDI7Ci0jZW5kaWYKIAlpZiAoc2l6ZSA8PSAgICAgICAgICA4KSByZXR1cm4gMzsKIAlpZiAoc2l6ZSA8PSAgICAgICAgIDE2KSByZXR1cm4gNDsKIAlpZiAoc2l6ZSA8PSAgICAgICAgIDMyKSByZXR1cm4gNTsKQEAgLTMwNCw2ICszMDIsNCBAQAogfQogI2VuZGlmCiAKLXZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdF9sYXRlKHZvaWQpOwotCiAjZW5kaWYgLyogX0xJTlVYX1NMVUJfREVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaAppbmRleCA0YmU1N2FiLi5mMGNhN2E3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCkBAIC0xNDMsMTUgKzE0Myw2IEBACiAgKi8KICNkZWZpbmUgc3Bpbl91bmxvY2tfd2FpdChsb2NrKQlfX3Jhd19zcGluX3VubG9ja193YWl0KCYobG9jayktPnJhd19sb2NrKQogCi0vKgotICogUHVsbCB0aGUgX3NwaW5fKigpL19yZWFkXyooKS9fd3JpdGVfKigpIGZ1bmN0aW9ucy9kZWNsYXJhdGlvbnM6Ci0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKQotIyBpbmNsdWRlIDxsaW51eC9zcGlubG9ja19hcGlfc21wLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxsaW51eC9zcGlubG9ja19hcGlfdXAuaD4KLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLCiAgZXh0ZXJuIHZvaWQgX3Jhd19zcGluX2xvY2soc3BpbmxvY2tfdCAqbG9jayk7CiAjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfcmF3X3NwaW5fbG9jayhsb2NrKQpAQCAtMjY4LDUwICsyNTksMTYgQEAKIAogI2RlZmluZSBzcGluX2xvY2tfaXJxKGxvY2spCQlfc3Bpbl9sb2NrX2lycShsb2NrKQogI2RlZmluZSBzcGluX2xvY2tfYmgobG9jaykJCV9zcGluX2xvY2tfYmgobG9jaykKLQogI2RlZmluZSByZWFkX2xvY2tfaXJxKGxvY2spCQlfcmVhZF9sb2NrX2lycShsb2NrKQogI2RlZmluZSByZWFkX2xvY2tfYmgobG9jaykJCV9yZWFkX2xvY2tfYmgobG9jaykKLQogI2RlZmluZSB3cml0ZV9sb2NrX2lycShsb2NrKQkJX3dyaXRlX2xvY2tfaXJxKGxvY2spCiAjZGVmaW5lIHdyaXRlX2xvY2tfYmgobG9jaykJCV93cml0ZV9sb2NrX2JoKGxvY2spCi0KLS8qCi0gKiBXZSBpbmxpbmUgdGhlIHVubG9jayBmdW5jdGlvbnMgaW4gdGhlIG5vbmRlYnVnIGNhc2U6Ci0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgfHwgXAotCSFkZWZpbmVkKENPTkZJR19TTVApCi0jIGRlZmluZSBzcGluX3VubG9jayhsb2NrKQkJX3NwaW5fdW5sb2NrKGxvY2spCi0jIGRlZmluZSByZWFkX3VubG9jayhsb2NrKQkJX3JlYWRfdW5sb2NrKGxvY2spCi0jIGRlZmluZSB3cml0ZV91bmxvY2sobG9jaykJCV93cml0ZV91bmxvY2sobG9jaykKLSMgZGVmaW5lIHNwaW5fdW5sb2NrX2lycShsb2NrKQkJX3NwaW5fdW5sb2NrX2lycShsb2NrKQotIyBkZWZpbmUgcmVhZF91bmxvY2tfaXJxKGxvY2spCQlfcmVhZF91bmxvY2tfaXJxKGxvY2spCi0jIGRlZmluZSB3cml0ZV91bmxvY2tfaXJxKGxvY2spCQlfd3JpdGVfdW5sb2NrX2lycShsb2NrKQotI2Vsc2UKLSMgZGVmaW5lIHNwaW5fdW5sb2NrKGxvY2spIFwKLSAgICBkbyB7X19yYXdfc3Bpbl91bmxvY2soJihsb2NrKS0+cmF3X2xvY2spOyBfX3JlbGVhc2UobG9jayk7IH0gd2hpbGUgKDApCi0jIGRlZmluZSByZWFkX3VubG9jayhsb2NrKSBcCi0gICAgZG8ge19fcmF3X3JlYWRfdW5sb2NrKCYobG9jayktPnJhd19sb2NrKTsgX19yZWxlYXNlKGxvY2spOyB9IHdoaWxlICgwKQotIyBkZWZpbmUgd3JpdGVfdW5sb2NrKGxvY2spIFwKLSAgICBkbyB7X19yYXdfd3JpdGVfdW5sb2NrKCYobG9jayktPnJhd19sb2NrKTsgX19yZWxlYXNlKGxvY2spOyB9IHdoaWxlICgwKQotIyBkZWZpbmUgc3Bpbl91bmxvY2tfaXJxKGxvY2spCQkJXAotZG8gewkJCQkJCVwKLQlfX3Jhd19zcGluX3VubG9jaygmKGxvY2spLT5yYXdfbG9jayk7CVwKLQlfX3JlbGVhc2UobG9jayk7CQkJXAotCWxvY2FsX2lycV9lbmFibGUoKTsJCQlcCi19IHdoaWxlICgwKQotIyBkZWZpbmUgcmVhZF91bmxvY2tfaXJxKGxvY2spCQkJXAotZG8gewkJCQkJCVwKLQlfX3Jhd19yZWFkX3VubG9jaygmKGxvY2spLT5yYXdfbG9jayk7CVwKLQlfX3JlbGVhc2UobG9jayk7CQkJXAotCWxvY2FsX2lycV9lbmFibGUoKTsJCQlcCi19IHdoaWxlICgwKQotIyBkZWZpbmUgd3JpdGVfdW5sb2NrX2lycShsb2NrKQkJCVwKLWRvIHsJCQkJCQlcCi0JX19yYXdfd3JpdGVfdW5sb2NrKCYobG9jayktPnJhd19sb2NrKTsJXAotCV9fcmVsZWFzZShsb2NrKTsJCQlcCi0JbG9jYWxfaXJxX2VuYWJsZSgpOwkJCVwKLX0gd2hpbGUgKDApCi0jZW5kaWYKKyNkZWZpbmUgc3Bpbl91bmxvY2sobG9jaykJCV9zcGluX3VubG9jayhsb2NrKQorI2RlZmluZSByZWFkX3VubG9jayhsb2NrKQkJX3JlYWRfdW5sb2NrKGxvY2spCisjZGVmaW5lIHdyaXRlX3VubG9jayhsb2NrKQkJX3dyaXRlX3VubG9jayhsb2NrKQorI2RlZmluZSBzcGluX3VubG9ja19pcnEobG9jaykJCV9zcGluX3VubG9ja19pcnEobG9jaykKKyNkZWZpbmUgcmVhZF91bmxvY2tfaXJxKGxvY2spCQlfcmVhZF91bmxvY2tfaXJxKGxvY2spCisjZGVmaW5lIHdyaXRlX3VubG9ja19pcnEobG9jaykJCV93cml0ZV91bmxvY2tfaXJxKGxvY2spCiAKICNkZWZpbmUgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykJCVwKIAlkbyB7CQkJCQkJXApAQCAtMzgwLDQgKzMzNywxMyBAQAogICovCiAjZGVmaW5lIHNwaW5fY2FuX2xvY2sobG9jaykJKCFzcGluX2lzX2xvY2tlZChsb2NrKSkKIAorLyoKKyAqIFB1bGwgdGhlIF9zcGluXyooKS9fcmVhZF8qKCkvX3dyaXRlXyooKSBmdW5jdGlvbnMvZGVjbGFyYXRpb25zOgorICovCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykKKyMgaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfYXBpX3NtcC5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfYXBpX3VwLmg+CisjZW5kaWYKKwogI2VuZGlmIC8qIF9fTElOVVhfU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfc21wLmggYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX2FwaV9zbXAuaAppbmRleCBkNzk4NDVkLi43YTdlMThmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX2FwaV9zbXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX2FwaV9zbXAuaApAQCAtNjAsNCArNjAsMzk4IEBACiB2b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX3VubG9ja19pcnFyZXN0b3JlKHJ3bG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogCQkJCQkJCV9fcmVsZWFzZXMobG9jayk7CiAKKy8qCisgKiBXZSBpbmxpbmUgdGhlIHVubG9jayBmdW5jdGlvbnMgaW4gdGhlIG5vbmRlYnVnIGNhc2U6CisgKi8KKyNpZiAhZGVmaW5lZChDT05GSUdfREVCVUdfU1BJTkxPQ0spICYmICFkZWZpbmVkKENPTkZJR19QUkVFTVBUKQorI2RlZmluZSBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fdW5sb2NrCisjZGVmaW5lIF9fYWx3YXlzX2lubGluZV9fcmVhZF91bmxvY2sKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV91bmxvY2sKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX19zcGluX3VubG9ja19pcnEKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX19yZWFkX3VubG9ja19pcnEKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lX193cml0ZV91bmxvY2tfaXJxCisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKyNpZm5kZWYgQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLCisKKyNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fbG9jaworI2RlZmluZSBfc3Bpbl9sb2NrKGxvY2spIF9fc3Bpbl9sb2NrKGxvY2spCisjZW5kaWYKKworI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fcmVhZF9sb2NrCisjZGVmaW5lIF9yZWFkX2xvY2sobG9jaykgX19yZWFkX2xvY2sobG9jaykKKyNlbmRpZgorCisjaWZkZWYgX19hbHdheXNfaW5saW5lX193cml0ZV9sb2NrCisjZGVmaW5lIF93cml0ZV9sb2NrKGxvY2spIF9fd3JpdGVfbG9jayhsb2NrKQorI2VuZGlmCisKKyNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fbG9ja19iaAorI2RlZmluZSBfc3Bpbl9sb2NrX2JoKGxvY2spIF9fc3Bpbl9sb2NrX2JoKGxvY2spCisjZW5kaWYKKworI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fcmVhZF9sb2NrX2JoCisjZGVmaW5lIF9yZWFkX2xvY2tfYmgobG9jaykgX19yZWFkX2xvY2tfYmgobG9jaykKKyNlbmRpZgorCisjaWZkZWYgX19hbHdheXNfaW5saW5lX193cml0ZV9sb2NrX2JoCisjZGVmaW5lIF93cml0ZV9sb2NrX2JoKGxvY2spIF9fd3JpdGVfbG9ja19iaChsb2NrKQorI2VuZGlmCisKKyNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fbG9ja19pcnEKKyNkZWZpbmUgX3NwaW5fbG9ja19pcnEobG9jaykgX19zcGluX2xvY2tfaXJxKGxvY2spCisjZW5kaWYKKworI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fcmVhZF9sb2NrX2lycQorI2RlZmluZSBfcmVhZF9sb2NrX2lycShsb2NrKSBfX3JlYWRfbG9ja19pcnEobG9jaykKKyNlbmRpZgorCisjaWZkZWYgX19hbHdheXNfaW5saW5lX193cml0ZV9sb2NrX2lycQorI2RlZmluZSBfd3JpdGVfbG9ja19pcnEobG9jaykgX193cml0ZV9sb2NrX2lycShsb2NrKQorI2VuZGlmCisKKyNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fbG9ja19pcnFzYXZlCisjZGVmaW5lIF9zcGluX2xvY2tfaXJxc2F2ZShsb2NrKSBfX3NwaW5fbG9ja19pcnFzYXZlKGxvY2spCisjZW5kaWYKKworI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fcmVhZF9sb2NrX2lycXNhdmUKKyNkZWZpbmUgX3JlYWRfbG9ja19pcnFzYXZlKGxvY2spIF9fcmVhZF9sb2NrX2lycXNhdmUobG9jaykKKyNlbmRpZgorCisjaWZkZWYgX19hbHdheXNfaW5saW5lX193cml0ZV9sb2NrX2lycXNhdmUKKyNkZWZpbmUgX3dyaXRlX2xvY2tfaXJxc2F2ZShsb2NrKSBfX3dyaXRlX2xvY2tfaXJxc2F2ZShsb2NrKQorI2VuZGlmCisKKyNlbmRpZiAvKiAhQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLICovCisKKyNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fdHJ5bG9jaworI2RlZmluZSBfc3Bpbl90cnlsb2NrKGxvY2spIF9fc3Bpbl90cnlsb2NrKGxvY2spCisjZW5kaWYKKworI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fcmVhZF90cnlsb2NrCisjZGVmaW5lIF9yZWFkX3RyeWxvY2sobG9jaykgX19yZWFkX3RyeWxvY2sobG9jaykKKyNlbmRpZgorCisjaWZkZWYgX19hbHdheXNfaW5saW5lX193cml0ZV90cnlsb2NrCisjZGVmaW5lIF93cml0ZV90cnlsb2NrKGxvY2spIF9fd3JpdGVfdHJ5bG9jayhsb2NrKQorI2VuZGlmCisKKyNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3NwaW5fdHJ5bG9ja19iaAorI2RlZmluZSBfc3Bpbl90cnlsb2NrX2JoKGxvY2spIF9fc3Bpbl90cnlsb2NrX2JoKGxvY2spCisjZW5kaWYKKworI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fc3Bpbl91bmxvY2sKKyNkZWZpbmUgX3NwaW5fdW5sb2NrKGxvY2spIF9fc3Bpbl91bmxvY2sobG9jaykKKyNlbmRpZgorCisjaWZkZWYgX19hbHdheXNfaW5saW5lX19yZWFkX3VubG9jaworI2RlZmluZSBfcmVhZF91bmxvY2sobG9jaykgX19yZWFkX3VubG9jayhsb2NrKQorI2VuZGlmCisKKyNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3dyaXRlX3VubG9jaworI2RlZmluZSBfd3JpdGVfdW5sb2NrKGxvY2spIF9fd3JpdGVfdW5sb2NrKGxvY2spCisjZW5kaWYKKworI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fc3Bpbl91bmxvY2tfYmgKKyNkZWZpbmUgX3NwaW5fdW5sb2NrX2JoKGxvY2spIF9fc3Bpbl91bmxvY2tfYmgobG9jaykKKyNlbmRpZgorCisjaWZkZWYgX19hbHdheXNfaW5saW5lX19yZWFkX3VubG9ja19iaAorI2RlZmluZSBfcmVhZF91bmxvY2tfYmgobG9jaykgX19yZWFkX3VubG9ja19iaChsb2NrKQorI2VuZGlmCisKKyNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3dyaXRlX3VubG9ja19iaAorI2RlZmluZSBfd3JpdGVfdW5sb2NrX2JoKGxvY2spIF9fd3JpdGVfdW5sb2NrX2JoKGxvY2spCisjZW5kaWYKKworI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fc3Bpbl91bmxvY2tfaXJxCisjZGVmaW5lIF9zcGluX3VubG9ja19pcnEobG9jaykgX19zcGluX3VubG9ja19pcnEobG9jaykKKyNlbmRpZgorCisjaWZkZWYgX19hbHdheXNfaW5saW5lX19yZWFkX3VubG9ja19pcnEKKyNkZWZpbmUgX3JlYWRfdW5sb2NrX2lycShsb2NrKSBfX3JlYWRfdW5sb2NrX2lycShsb2NrKQorI2VuZGlmCisKKyNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3dyaXRlX3VubG9ja19pcnEKKyNkZWZpbmUgX3dyaXRlX3VubG9ja19pcnEobG9jaykgX193cml0ZV91bmxvY2tfaXJxKGxvY2spCisjZW5kaWYKKworI2lmZGVmIF9fYWx3YXlzX2lubGluZV9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZQorI2RlZmluZSBfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykgX19zcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKQorI2VuZGlmCisKKyNpZmRlZiBfX2Fsd2F5c19pbmxpbmVfX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUKKyNkZWZpbmUgX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpIF9fcmVhZF91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykKKyNlbmRpZgorCisjaWZkZWYgX19hbHdheXNfaW5saW5lX193cml0ZV91bmxvY2tfaXJxcmVzdG9yZQorI2RlZmluZSBfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpIF9fd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19TUElOTE9DSyAqLworCitzdGF0aWMgaW5saW5lIGludCBfX3NwaW5fdHJ5bG9jayhzcGlubG9ja190ICpsb2NrKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCWlmIChfcmF3X3NwaW5fdHJ5bG9jayhsb2NrKSkgeworCQlzcGluX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDEsIF9SRVRfSVBfKTsKKwkJcmV0dXJuIDE7CisJfQorCXByZWVtcHRfZW5hYmxlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcmVhZF90cnlsb2NrKHJ3bG9ja190ICpsb2NrKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCWlmIChfcmF3X3JlYWRfdHJ5bG9jayhsb2NrKSkgeworCQlyd2xvY2tfYWNxdWlyZV9yZWFkKCZsb2NrLT5kZXBfbWFwLCAwLCAxLCBfUkVUX0lQXyk7CisJCXJldHVybiAxOworCX0KKwlwcmVlbXB0X2VuYWJsZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3dyaXRlX3RyeWxvY2socndsb2NrX3QgKmxvY2spCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKF9yYXdfd3JpdGVfdHJ5bG9jayhsb2NrKSkgeworCQlyd2xvY2tfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOworCQlyZXR1cm4gMTsKKwl9CisJcHJlZW1wdF9lbmFibGUoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElmIGxvY2tkZXAgaXMgZW5hYmxlZCB0aGVuIHdlIHVzZSB0aGUgbm9uLXByZWVtcHRpb24gc3Bpbi1vcHMKKyAqIGV2ZW4gb24gQ09ORklHX1BSRUVNUFQsIGJlY2F1c2UgbG9ja2RlcCBhc3N1bWVzIHRoYXQgaW50ZXJydXB0cyBhcmUKKyAqIG5vdCByZS1lbmFibGVkIGR1cmluZyBsb2NrLWFjcXVpcmUgKHdoaWNoIHRoZSBwcmVlbXB0LXNwaW4tb3BzIGRvKToKKyAqLworI2lmICFkZWZpbmVkKENPTkZJR19HRU5FUklDX0xPQ0tCUkVBSykgfHwgZGVmaW5lZChDT05GSUdfREVCVUdfTE9DS19BTExPQykKKworc3RhdGljIGlubGluZSB2b2lkIF9fcmVhZF9sb2NrKHJ3bG9ja190ICpsb2NrKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKKwlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3JlYWRfdHJ5bG9jaywgX3Jhd19yZWFkX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zcGluX2xvY2tfaXJxc2F2ZShzcGlubG9ja190ICpsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJc3Bpbl9hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CisJLyoKKwkgKiBPbiBsb2NrZGVwIHdlIGRvbnQgd2FudCB0aGUgaGFuZC1jb2RlZCBpcnEtZW5hYmxlIG9mCisJICogX3Jhd19zcGluX2xvY2tfZmxhZ3MoKSBjb2RlLCBiZWNhdXNlIGxvY2tkZXAgYXNzdW1lcworCSAqIHRoYXQgaW50ZXJydXB0cyBhcmUgbm90IHJlLWVuYWJsZWQgZHVyaW5nIGxvY2stYWNxdWlyZToKKwkgKi8KKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorCUxPQ0tfQ09OVEVOREVEKGxvY2ssIF9yYXdfc3Bpbl90cnlsb2NrLCBfcmF3X3NwaW5fbG9jayk7CisjZWxzZQorCV9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssICZmbGFncyk7CisjZW5kaWYKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NwaW5fbG9ja19pcnEoc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXByZWVtcHRfZGlzYWJsZSgpOworCXNwaW5fYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOworCUxPQ0tfQ09OVEVOREVEKGxvY2ssIF9yYXdfc3Bpbl90cnlsb2NrLCBfcmF3X3NwaW5fbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NwaW5fbG9ja19iaChzcGlubG9ja190ICpsb2NrKQoreworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlzcGluX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKKwlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3NwaW5fdHJ5bG9jaywgX3Jhd19zcGluX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yZWFkX2xvY2tfaXJxc2F2ZShyd2xvY2tfdCAqbG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXByZWVtcHRfZGlzYWJsZSgpOworCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKKwlMT0NLX0NPTlRFTkRFRF9GTEFHUyhsb2NrLCBfcmF3X3JlYWRfdHJ5bG9jaywgX3Jhd19yZWFkX2xvY2ssCisJCQkgICAgIF9yYXdfcmVhZF9sb2NrX2ZsYWdzLCAmZmxhZ3MpOworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmVhZF9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXByZWVtcHRfZGlzYWJsZSgpOworCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKKwlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3JlYWRfdHJ5bG9jaywgX3Jhd19yZWFkX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yZWFkX2xvY2tfYmgocndsb2NrX3QgKmxvY2spCit7CisJbG9jYWxfYmhfZGlzYWJsZSgpOworCXByZWVtcHRfZGlzYWJsZSgpOworCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKKwlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3JlYWRfdHJ5bG9jaywgX3Jhd19yZWFkX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX193cml0ZV9sb2NrX2lycXNhdmUocndsb2NrX3QgKmxvY2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlyd2xvY2tfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOworCUxPQ0tfQ09OVEVOREVEX0ZMQUdTKGxvY2ssIF9yYXdfd3JpdGVfdHJ5bG9jaywgX3Jhd193cml0ZV9sb2NrLAorCQkJICAgICBfcmF3X3dyaXRlX2xvY2tfZmxhZ3MsICZmbGFncyk7CisJcmV0dXJuIGZsYWdzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZV9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXByZWVtcHRfZGlzYWJsZSgpOworCXJ3bG9ja19hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CisJTE9DS19DT05URU5ERUQobG9jaywgX3Jhd193cml0ZV90cnlsb2NrLCBfcmF3X3dyaXRlX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZV9sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQoreworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlyd2xvY2tfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOworCUxPQ0tfQ09OVEVOREVEKGxvY2ssIF9yYXdfd3JpdGVfdHJ5bG9jaywgX3Jhd193cml0ZV9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJc3Bpbl9hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CisJTE9DS19DT05URU5ERUQobG9jaywgX3Jhd19zcGluX3RyeWxvY2ssIF9yYXdfc3Bpbl9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGVfbG9jayhyd2xvY2tfdCAqbG9jaykKK3sKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlyd2xvY2tfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOworCUxPQ0tfQ09OVEVOREVEKGxvY2ssIF9yYXdfd3JpdGVfdHJ5bG9jaywgX3Jhd193cml0ZV9sb2NrKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spCit7CisJc3Bpbl9yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CisJX3Jhd19zcGluX3VubG9jayhsb2NrKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZV91bmxvY2socndsb2NrX3QgKmxvY2spCit7CisJcndsb2NrX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKKwlfcmF3X3dyaXRlX3VubG9jayhsb2NrKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yZWFkX3VubG9jayhyd2xvY2tfdCAqbG9jaykKK3sKKwlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOworCV9yYXdfcmVhZF91bmxvY2sobG9jayk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzcGlubG9ja190ICpsb2NrLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzcGluX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKKwlfcmF3X3NwaW5fdW5sb2NrKGxvY2spOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19zcGluX3VubG9ja19pcnEoc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlzcGluX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKKwlfcmF3X3NwaW5fdW5sb2NrKGxvY2spOworCWxvY2FsX2lycV9lbmFibGUoKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19zcGluX3VubG9ja19iaChzcGlubG9ja190ICpsb2NrKQoreworCXNwaW5fcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOworCV9yYXdfc3Bpbl91bmxvY2sobG9jayk7CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCWxvY2FsX2JoX2VuYWJsZV9pcCgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19yZWFkX3VubG9ja19pcnFyZXN0b3JlKHJ3bG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CisJX3Jhd19yZWFkX3VubG9jayhsb2NrKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmVhZF91bmxvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQoreworCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CisJX3Jhd19yZWFkX3VubG9jayhsb2NrKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcmVhZF91bmxvY2tfYmgocndsb2NrX3QgKmxvY2spCit7CisJcndsb2NrX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKKwlfcmF3X3JlYWRfdW5sb2NrKGxvY2spOworCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwlsb2NhbF9iaF9lbmFibGVfaXAoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUocndsb2NrX3QgKmxvY2ssCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOworCV9yYXdfd3JpdGVfdW5sb2NrKGxvY2spOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX193cml0ZV91bmxvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQoreworCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7CisJX3Jhd193cml0ZV91bmxvY2sobG9jayk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3dyaXRlX3VubG9ja19iaChyd2xvY2tfdCAqbG9jaykKK3sKKwlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOworCV9yYXdfd3JpdGVfdW5sb2NrKGxvY2spOworCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwlsb2NhbF9iaF9lbmFibGVfaXAoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19zcGluX3RyeWxvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKF9yYXdfc3Bpbl90cnlsb2NrKGxvY2spKSB7CisJCXNwaW5fYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOworCQlyZXR1cm4gMTsKKwl9CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCWxvY2FsX2JoX2VuYWJsZV9pcCgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogX19MSU5VWF9TUElOTE9DS19BUElfU01QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKaW5kZXggNWFlOGZhMi4uM2QwYTlmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKQEAgLTI3LDI0ICsyNyw1NCBAQAogCXU4IGV0MW1kY3BvcnQ7CQkvKiBNRElPIGZvciBlbmV0MSAqLwogCXU4IGJvYXJkX3JldjsJCS8qIEJvYXJkIHJldmlzaW9uIG51bWJlciBmcm9tIFNQUk9NLiAqLwogCXU4IGNvdW50cnlfY29kZTsJLyogQ291bnRyeSBDb2RlICovCi0JdTggYW50X2F2YWlsYWJsZV9hOwkvKiBBLVBIWSBhbnRlbm5hIGF2YWlsYWJsZSBiaXRzICh1cCB0byA0KSAqLwotCXU4IGFudF9hdmFpbGFibGVfYmc7CS8qIEIvRy1QSFkgYW50ZW5uYSBhdmFpbGFibGUgYml0cyAodXAgdG8gNCkgKi8KKwl1OCBhbnRfYXZhaWxhYmxlX2E7CS8qIDJHSHogYW50ZW5uYSBhdmFpbGFibGUgYml0cyAodXAgdG8gNCkgKi8KKwl1OCBhbnRfYXZhaWxhYmxlX2JnOwkvKiA1R0h6IGFudGVubmEgYXZhaWxhYmxlIGJpdHMgKHVwIHRvIDQpICovCiAJdTE2IHBhMGIwOwogCXUxNiBwYTBiMTsKIAl1MTYgcGEwYjI7CiAJdTE2IHBhMWIwOwogCXUxNiBwYTFiMTsKIAl1MTYgcGExYjI7CisJdTE2IHBhMWxvYjA7CisJdTE2IHBhMWxvYjE7CisJdTE2IHBhMWxvYjI7CisJdTE2IHBhMWhpYjA7CisJdTE2IHBhMWhpYjE7CisJdTE2IHBhMWhpYjI7CiAJdTggZ3BpbzA7CQkvKiBHUElPIHBpbiAwICovCiAJdTggZ3BpbzE7CQkvKiBHUElPIHBpbiAxICovCiAJdTggZ3BpbzI7CQkvKiBHUElPIHBpbiAyICovCiAJdTggZ3BpbzM7CQkvKiBHUElPIHBpbiAzICovCi0JdTE2IG1heHB3cl9hOwkJLyogQS1QSFkgQW1wbGlmaWVyIE1heCBQb3dlciAoaW4gZEJtIFE1LjIpICovCi0JdTE2IG1heHB3cl9iZzsJCS8qIEIvRy1QSFkgQW1wbGlmaWVyIE1heCBQb3dlciAoaW4gZEJtIFE1LjIpICovCisJdTE2IG1heHB3cl9iZzsJCS8qIDIuNEdIeiBBbXBsaWZpZXIgTWF4IFBvd2VyIChpbiBkQm0gUTUuMikgKi8KKwl1MTYgbWF4cHdyX2FsOwkJLyogNS4yR0h6IEFtcGxpZmllciBNYXggUG93ZXIgKGluIGRCbSBRNS4yKSAqLworCXUxNiBtYXhwd3JfYTsJCS8qIDUuM0dIeiBBbXBsaWZpZXIgTWF4IFBvd2VyIChpbiBkQm0gUTUuMikgKi8KKwl1MTYgbWF4cHdyX2FoOwkJLyogNS44R0h6IEFtcGxpZmllciBNYXggUG93ZXIgKGluIGRCbSBRNS4yKSAqLwogCXU4IGl0c3NpX2E7CQkvKiBJZGxlIFRTU0kgVGFyZ2V0IGZvciBBLVBIWSAqLwogCXU4IGl0c3NpX2JnOwkJLyogSWRsZSBUU1NJIFRhcmdldCBmb3IgQi9HLVBIWSAqLwotCXUxNiBib2FyZGZsYWdzX2xvOwkvKiBCb2FyZGZsYWdzIChsb3cgMTYgYml0cykgKi8KLQl1MTYgYm9hcmRmbGFnc19oaTsJLyogQm9hcmRmbGFncyAoaGlnaCAxNiBiaXRzKSAqLworCXU4IHRyaTJnOwkJLyogMi40R0h6IFRYIGlzb2xhdGlvbiAqLworCXU4IHRyaTVnbDsJCS8qIDUuMkdIeiBUWCBpc29sYXRpb24gKi8KKwl1OCB0cmk1ZzsJCS8qIDUuM0dIeiBUWCBpc29sYXRpb24gKi8KKwl1OCB0cmk1Z2g7CQkvKiA1LjhHSHogVFggaXNvbGF0aW9uICovCisJdTggcnhwbzJnOwkJLyogMkdIeiBSWCBwb3dlciBvZmZzZXQgKi8KKwl1OCByeHBvNWc7CQkvKiA1R0h6IFJYIHBvd2VyIG9mZnNldCAqLworCXU4IHJzc2lzYXYyZzsJCS8qIDJHSHogUlNTSSBwYXJhbXMgKi8KKwl1OCByc3Npc21jMmc7CisJdTggcnNzaXNtZjJnOworCXU4IGJ4YTJnOwkJLyogMkdIeiBCWCBhcmNoICovCisJdTggcnNzaXNhdjVnOwkJLyogNUdIeiBSU1NJIHBhcmFtcyAqLworCXU4IHJzc2lzbWM1ZzsKKwl1OCByc3Npc21mNWc7CisJdTggYnhhNWc7CQkvKiA1R0h6IEJYIGFyY2ggKi8KKwl1MTYgY2NrMmdwbzsJCS8qIENDSyBwb3dlciBvZmZzZXQgKi8KKwl1MzIgb2ZkbTJncG87CQkvKiAyLjRHSHogT0ZETSBwb3dlciBvZmZzZXQgKi8KKwl1MzIgb2ZkbTVnbHBvOwkJLyogNS4yR0h6IE9GRE0gcG93ZXIgb2Zmc2V0ICovCisJdTMyIG9mZG01Z3BvOwkJLyogNS4zR0h6IE9GRE0gcG93ZXIgb2Zmc2V0ICovCisJdTMyIG9mZG01Z2hwbzsJCS8qIDUuOEdIeiBPRkRNIHBvd2VyIG9mZnNldCAqLworCXUxNiBib2FyZGZsYWdzX2xvOwkvKiBCb2FyZCBmbGFncyAoYml0cyAwLTE1KSAqLworCXUxNiBib2FyZGZsYWdzX2hpOwkvKiBCb2FyZCBmbGFncyAoYml0cyAxNi0zMSkgKi8KKwl1MTYgYm9hcmRmbGFnczJfbG87CS8qIEJvYXJkIGZsYWdzIChiaXRzIDMyLTQ3KSAqLworCXUxNiBib2FyZGZsYWdzMl9oaTsJLyogQm9hcmQgZmxhZ3MgKGJpdHMgNDgtNjMpICovCisJLyogVE9ETyBzdG9yZSBib2FyZCBmbGFncyBpbiBhIHNpbmdsZSB1NjQgKi8KIAogCS8qIEFudGVubmEgZ2FpbiB2YWx1ZXMgZm9yIHVwIHRvIDQgYW50ZW5uYXMKIAkgKiBvbiBlYWNoIGJhbmQuIFZhbHVlcyBpbiBkQm0vNCAoUTUuMikuIE5lZ2F0aXZlIGdhaW4gbWVhbnMgdGhlCkBAIC01OCw3ICs4OCw3IEBACiAJCX0gZ2h6NTsJCS8qIDVHSHogYmFuZCAqLwogCX0gYW50ZW5uYV9nYWluOwogCi0JLyogVE9ETyAtIGFkZCBhbnkgcGFyYW1ldGVycyBuZWVkZWQgZnJvbSByZXYgMiwgMywgb3IgNCBTUFJPTXMgKi8KKwkvKiBUT0RPIC0gYWRkIGFueSBwYXJhbWV0ZXJzIG5lZWRlZCBmcm9tIHJldiAyLCAzLCA0LCA1IG9yIDggU1BST01zICovCiB9OwogCiAvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgUENCIHRoZSBjaXJjdWl0cnkgaXMgc29sZGVyZWQgb24uICovCkBAIC0yMDgsNiArMjM4LDcgQEAKIAlTU0JfQlVTVFlQRV9TU0IsCS8qIFRoaXMgU1NCIGJ1cyBpcyB0aGUgc3lzdGVtIGJ1cyAqLwogCVNTQl9CVVNUWVBFX1BDSSwJLyogU1NCIGlzIGNvbm5lY3RlZCB0byBQQ0kgYnVzICovCiAJU1NCX0JVU1RZUEVfUENNQ0lBLAkvKiBTU0IgaXMgY29ubmVjdGVkIHRvIFBDTUNJQSBidXMgKi8KKwlTU0JfQlVTVFlQRV9TRElPLAkvKiBTU0IgaXMgY29ubmVjdGVkIHRvIFNESU8gYnVzICovCiB9OwogCiAvKiBib2FyZF92ZW5kb3IgKi8KQEAgLTI0MCw4ICsyNzEsMTIgQEAKIAogCS8qIFRoZSBjb3JlIGluIHRoZSBiYXNpYyBhZGRyZXNzIHJlZ2lzdGVyIHdpbmRvdy4gKFBDSSBidXMgb25seSkgKi8KIAlzdHJ1Y3Qgc3NiX2RldmljZSAqbWFwcGVkX2RldmljZTsKLQkvKiBDdXJyZW50bHkgbWFwcGVkIFBDTUNJQSBzZWdtZW50LiAoYnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ01DSUEgb25seSkgKi8KLQl1OCBtYXBwZWRfcGNtY2lhX3NlZzsKKwl1bmlvbiB7CisJCS8qIEN1cnJlbnRseSBtYXBwZWQgUENNQ0lBIHNlZ21lbnQuIChidXN0eXBlID09IFNTQl9CVVNUWVBFX1BDTUNJQSBvbmx5KSAqLworCQl1OCBtYXBwZWRfcGNtY2lhX3NlZzsKKwkJLyogQ3VycmVudCBTU0IgYmFzZSBhZGRyZXNzIHdpbmRvdyBmb3IgU0RJTy4gKi8KKwkJdTMyIHNkaW9fc2JhZGRyOworCX07CiAJLyogTG9jayBmb3IgY29yZSBhbmQgc2VnbWVudCBzd2l0Y2hpbmcuCiAJICogT24gUENNQ0lBLWhvc3QgYnVzc2VzIHRoaXMgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSB3aG9sZSBNTUlPIGFjY2Vzcy4gKi8KIAlzcGlubG9ja190IGJhcl9sb2NrOwpAQCAtMjUyLDYgKzI4NywxMSBAQAogCXN0cnVjdCBwY2lfZGV2ICpob3N0X3BjaTsKIAkvKiBQb2ludGVyIHRvIHRoZSBQQ01DSUEgZGV2aWNlIChvbmx5IGlmIGJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfUENNQ0lBKS4gKi8KIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaG9zdF9wY21jaWE7CisJLyogUG9pbnRlciB0byB0aGUgU0RJTyBkZXZpY2UgKG9ubHkgaWYgYnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9TRElPKS4gKi8KKwlzdHJ1Y3Qgc2Rpb19mdW5jICpob3N0X3NkaW87CisKKwkvKiBTZWUgZW51bSBzc2JfcXVpcmtzICovCisJdW5zaWduZWQgaW50IHF1aXJrczsKIAogI2lmZGVmIENPTkZJR19TU0JfU1BST00KIAkvKiBNdXRleCB0byBwcm90ZWN0IHRoZSBTUFJPTSB3cml0aW5nLiAqLwpAQCAtMzA2LDYgKzM0NiwxMSBAQAogI2VuZGlmIC8qIERFQlVHICovCiB9OwogCitlbnVtIHNzYl9xdWlya3MgeworCS8qIFNESU8gY29ubmVjdGVkIGNhcmQgcmVxdWlyZXMgcGVyZm9ybWluZyBhIHJlYWQgYWZ0ZXIgd3JpdGluZyBhIDMyLWJpdCB2YWx1ZSAqLworCVNTQl9RVUlSS19TRElPX1JFQURfQUZURVJfV1JJVEUzMgk9ICgxIDw8IDApLAorfTsKKwogLyogVGhlIGluaXRpYWxpemF0aW9uLWludmFyaWFudHMuICovCiBzdHJ1Y3Qgc3NiX2luaXRfaW52YXJpYW50cyB7CiAJLyogVmVyc2lvbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgUENCLiAqLwpAQCAtMzM2LDYgKzM4MSwxMiBAQAogCQkJCSAgICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfZGV2LAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZWFkZHIpOwogI2VuZGlmIC8qIENPTkZJR19TU0JfUENNQ0lBSE9TVCAqLworI2lmZGVmIENPTkZJR19TU0JfU0RJT0hPU1QKK2V4dGVybiBpbnQgc3NiX2J1c19zZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBzc2JfYnVzICpidXMsCisJCQkJICAgIHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYywKKwkJCQkgICAgdW5zaWduZWQgaW50IHF1aXJrcyk7CisjZW5kaWYgLyogQ09ORklHX1NTQl9TRElPSE9TVCAqLworCiAKIGV4dGVybiB2b2lkIHNzYl9idXNfdW5yZWdpc3RlcihzdHJ1Y3Qgc3NiX2J1cyAqYnVzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaAppbmRleCBkM2IxZDE4Li40ZTI3YWNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaApAQCAtNjI5LDUgKzYyOSwxNSBAQAogLyogUE1VIHN1cHBvcnQgKi8KIGV4dGVybiB2b2lkIHNzYl9wbXVfaW5pdChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKTsKIAorZW51bSBzc2JfcG11X2xkb192b2x0X2lkIHsKKwlMRE9fUEFSRUYgPSAwLAorCUxET19WT0xUMSwKKwlMRE9fVk9MVDIsCisJTERPX1ZPTFQzLAorfTsKKwordm9pZCBzc2JfcG11X3NldF9sZG9fdm9sdGFnZShzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLAorCQkJICAgICBlbnVtIHNzYl9wbXVfbGRvX3ZvbHRfaWQgaWQsIHUzMiB2b2x0YWdlKTsKK3ZvaWQgc3NiX3BtdV9zZXRfbGRvX3BhcmVmKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsIGJvb2wgb24pOwogCiAjZW5kaWYgLyogTElOVVhfU1NCX0NISVBDT19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmgKaW5kZXggYTAxYjk4Mi4uOWFlOTA4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oCkBAIC0xNjIsNyArMTYyLDcgQEAKIAogLyogU1BST00gc2hhZG93IGFyZWEuIElmIG5vdCBvdGhlcndpc2Ugbm90ZWQsIGZpZWxkcyBhcmUKICAqIHR3byBieXRlcyB3aWRlLiBOb3RlIHRoYXQgdGhlIFNQUk9NIGNhbiBfb25seV8gYmUgcmVhZAotICogaW4gdHdvLWJ5dGUgcXVhbnRpbmllcy4KKyAqIGluIHR3by1ieXRlIHF1YW50aXRpZXMuCiAgKi8KICNkZWZpbmUgU1NCX1NQUk9NU0laRV9XT1JEUwkJNjQKICNkZWZpbmUgU1NCX1NQUk9NU0laRV9CWVRFUwkJKFNTQl9TUFJPTVNJWkVfV09SRFMgKiBzaXplb2YodTE2KSkKQEAgLTMyNyw4ICszMjcsMTEgQEAKICNkZWZpbmUgIFNTQl9TUFJPTTVfR1BJT0JfUDNfU0hJRlQJOAogCiAvKiBTUFJPTSBSZXZpc2lvbiA4ICovCi0jZGVmaW5lIFNTQl9TUFJPTThfQkZMTE8JCTB4MTA4NAkvKiBCb2FyZGZsYWdzIChsb3cgMTYgYml0cykgKi8KLSNkZWZpbmUgU1NCX1NQUk9NOF9CRkxISQkJMHgxMDg2CS8qIEJvYXJkZmxhZ3MgSGkgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9CT0FSRFJFVgkJMHgxMDgyCS8qIEJvYXJkIHJldmlzaW9uICovCisjZGVmaW5lIFNTQl9TUFJPTThfQkZMTE8JCTB4MTA4NAkvKiBCb2FyZCBmbGFncyAoYml0cyAwLTE1KSAqLworI2RlZmluZSBTU0JfU1BST004X0JGTEhJCQkweDEwODYJLyogQm9hcmQgZmxhZ3MgKGJpdHMgMTYtMzEpICovCisjZGVmaW5lIFNTQl9TUFJPTThfQkZMMkxPCQkweDEwODgJLyogQm9hcmQgZmxhZ3MgKGJpdHMgMzItNDcpICovCisjZGVmaW5lIFNTQl9TUFJPTThfQkZMMkhJCQkweDEwOEEJLyogQm9hcmQgZmxhZ3MgKGJpdHMgNDgtNjMpICovCiAjZGVmaW5lIFNTQl9TUFJPTThfSUwwTUFDCQkweDEwOEMJLyogNiBieXRlIE1BQyBhZGRyZXNzICovCiAjZGVmaW5lIFNTQl9TUFJPTThfQ0NPREUJCTB4MTA5MgkvKiAyIGJ5dGUgY291bnRyeSBjb2RlICovCiAjZGVmaW5lIFNTQl9TUFJPTThfQU5UQVZBSUwJCTB4MTA5QyAgLyogQW50ZW5uYSBhdmFpbGFibGUgYml0ZmllbGRzKi8KQEAgLTM1NCwxNCArMzU3LDYzIEBACiAjZGVmaW5lICBTU0JfU1BST004X0dQSU9CX1AyCQkweDAwRkYJLyogUGluIDIgKi8KICNkZWZpbmUgIFNTQl9TUFJPTThfR1BJT0JfUDMJCTB4RkYwMAkvKiBQaW4gMyAqLwogI2RlZmluZSAgU1NCX1NQUk9NOF9HUElPQl9QM19TSElGVAk4Ci0jZGVmaW5lIFNTQl9TUFJPTThfTUFYUF9CRwkJMHgxMEMwICAvKiBNYXggUG93ZXIgQkcgaW4gcGF0aCAxICovCi0jZGVmaW5lICBTU0JfU1BST004X01BWFBfQkdfTUFTSwkweDAwRkYgIC8qIE1hc2sgZm9yIE1heCBQb3dlciBCRyAqLworI2RlZmluZSBTU0JfU1BST004X1JTU0lQQVJNMkcJCTB4MTBBNAkvKiBSU1NJIHBhcmFtcyBmb3IgMkdIeiAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9SU1NJU01GMkcJCTB4MDAwRgorI2RlZmluZSAgU1NCX1NQUk9NOF9SU1NJU01DMkcJCTB4MDBGMAorI2RlZmluZSAgU1NCX1NQUk9NOF9SU1NJU01DMkdfU0hJRlQJNAorI2RlZmluZSAgU1NCX1NQUk9NOF9SU1NJU0FWMkcJCTB4MDcwMAorI2RlZmluZSAgU1NCX1NQUk9NOF9SU1NJU0FWMkdfU0hJRlQJOAorI2RlZmluZSAgU1NCX1NQUk9NOF9CWEEyRwkJMHgxODAwCisjZGVmaW5lICBTU0JfU1BST004X0JYQTJHX1NISUZUCQkxMQorI2RlZmluZSBTU0JfU1BST004X1JTU0lQQVJNNUcJCTB4MTBBNgkvKiBSU1NJIHBhcmFtcyBmb3IgNUdIeiAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9SU1NJU01GNUcJCTB4MDAwRgorI2RlZmluZSAgU1NCX1NQUk9NOF9SU1NJU01DNUcJCTB4MDBGMAorI2RlZmluZSAgU1NCX1NQUk9NOF9SU1NJU01DNUdfU0hJRlQJNAorI2RlZmluZSAgU1NCX1NQUk9NOF9SU1NJU0FWNUcJCTB4MDcwMAorI2RlZmluZSAgU1NCX1NQUk9NOF9SU1NJU0FWNUdfU0hJRlQJOAorI2RlZmluZSAgU1NCX1NQUk9NOF9CWEE1RwkJMHgxODAwCisjZGVmaW5lICBTU0JfU1BST004X0JYQTVHX1NISUZUCQkxMQorI2RlZmluZSBTU0JfU1BST004X1RSSTI1RwkJMHgxMEE4CS8qIFRYIGlzb2xhdGlvbiAyLjQmNS4zR0h6ICovCisjZGVmaW5lICBTU0JfU1BST004X1RSSTJHCQkweDAwRkYJLyogVFggaXNvbGF0aW9uIDIuNEdIeiAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9UUkk1RwkJMHhGRjAwCS8qIFRYIGlzb2xhdGlvbiA1LjNHSHogKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfVFJJNUdfU0hJRlQJCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9UUkk1R0hMCQkweDEwQUEJLyogVFggaXNvbGF0aW9uIDUuMi81LjhHSHogKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfVFJJNUdMCQkweDAwRkYJLyogVFggaXNvbGF0aW9uIDUuMkdIeiAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9UUkk1R0gJCTB4RkYwMAkvKiBUWCBpc29sYXRpb24gNS44R0h6ICovCisjZGVmaW5lICBTU0JfU1BST004X1RSSTVHSF9TSElGVAk4CisjZGVmaW5lIFNTQl9TUFJPTThfUlhQTwkJCTB4MTBBQyAgLyogUlggcG93ZXIgb2Zmc2V0cyAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9SWFBPMkcJCTB4MDBGRgkvKiAyR0h6IFJYIHBvd2VyIG9mZnNldCAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9SWFBPNUcJCTB4RkYwMAkvKiA1R0h6IFJYIHBvd2VyIG9mZnNldCAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9SWFBPNUdfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X01BWFBfQkcJCTB4MTBDMCAgLyogTWF4IFBvd2VyIDJHSHogaW4gcGF0aCAxICovCisjZGVmaW5lICBTU0JfU1BST004X01BWFBfQkdfTUFTSwkweDAwRkYgIC8qIE1hc2sgZm9yIE1heCBQb3dlciAyR0h6ICovCiAjZGVmaW5lICBTU0JfU1BST004X0lUU1NJX0JHCQkweEZGMDAJLyogTWFzayBmb3IgcGF0aCAxIGl0c3NpX2JnICovCiAjZGVmaW5lICBTU0JfU1BST004X0lUU1NJX0JHX1NISUZUCTgKLSNkZWZpbmUgU1NCX1NQUk9NOF9NQVhQX0EJCTB4MTBDOCAgLyogTWF4IFBvd2VyIEEgaW4gcGF0aCAxICovCi0jZGVmaW5lICBTU0JfU1BST004X01BWFBfQV9NQVNLCQkweDAwRkYgIC8qIE1hc2sgZm9yIE1heCBQb3dlciBBICovCisjZGVmaW5lIFNTQl9TUFJPTThfUEEwQjAJCTB4MTBDMgkvKiAyR0h6IHBvd2VyIGFtcCBzZXR0aW5ncyAqLworI2RlZmluZSBTU0JfU1BST004X1BBMEIxCQkweDEwQzQKKyNkZWZpbmUgU1NCX1NQUk9NOF9QQTBCMgkJMHgxMEM2CisjZGVmaW5lIFNTQl9TUFJPTThfTUFYUF9BCQkweDEwQzggIC8qIE1heCBQb3dlciA1LjNHSHogKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfTUFYUF9BX01BU0sJCTB4MDBGRiAgLyogTWFzayBmb3IgTWF4IFBvd2VyIDUuM0dIeiAqLwogI2RlZmluZSAgU1NCX1NQUk9NOF9JVFNTSV9BCQkweEZGMDAJLyogTWFzayBmb3IgcGF0aCAxIGl0c3NpX2EgKi8KICNkZWZpbmUgIFNTQl9TUFJPTThfSVRTU0lfQV9TSElGVAk4CisjZGVmaW5lIFNTQl9TUFJPTThfTUFYUF9BSEwJCTB4MTBDQSAgLyogTWF4IFBvd2VyIDUuMi81LjhHSHogKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfTUFYUF9BSF9NQVNLCTB4MDBGRiAgLyogTWFzayBmb3IgTWF4IFBvd2VyIDUuOEdIeiAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9NQVhQX0FMX01BU0sJMHhGRjAwICAvKiBNYXNrIGZvciBNYXggUG93ZXIgNS4yR0h6ICovCisjZGVmaW5lICBTU0JfU1BST004X01BWFBfQUxfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X1BBMUIwCQkweDEwQ0MJLyogNS4zR0h6IHBvd2VyIGFtcCBzZXR0aW5ncyAqLworI2RlZmluZSBTU0JfU1BST004X1BBMUIxCQkweDEwQ0UKKyNkZWZpbmUgU1NCX1NQUk9NOF9QQTFCMgkJMHgxMEQwCisjZGVmaW5lIFNTQl9TUFJPTThfUEExTE9CMAkJMHgxMEQyCS8qIDUuMkdIeiBwb3dlciBhbXAgc2V0dGluZ3MgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9QQTFMT0IxCQkweDEwRDQKKyNkZWZpbmUgU1NCX1NQUk9NOF9QQTFMT0IyCQkweDEwRDYKKyNkZWZpbmUgU1NCX1NQUk9NOF9QQTFISUIwCQkweDEwRDgJLyogNS44R0h6IHBvd2VyIGFtcCBzZXR0aW5ncyAqLworI2RlZmluZSBTU0JfU1BST004X1BBMUhJQjEJCTB4MTBEQQorI2RlZmluZSBTU0JfU1BST004X1BBMUhJQjIJCTB4MTBEQworI2RlZmluZSBTU0JfU1BST004X0NDSzJHUE8JCTB4MTE0MAkvKiBDQ0sgcG93ZXIgb2Zmc2V0ICovCisjZGVmaW5lIFNTQl9TUFJPTThfT0ZETTJHUE8JCTB4MTE0MgkvKiAyLjRHSHogT0ZETSBwb3dlciBvZmZzZXQgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9PRkRNNUdQTwkJMHgxMTQ2CS8qIDUuM0dIeiBPRkRNIHBvd2VyIG9mZnNldCAqLworI2RlZmluZSBTU0JfU1BST004X09GRE01R0xQTwkJMHgxMTRBCS8qIDUuMkdIeiBPRkRNIHBvd2VyIG9mZnNldCAqLworI2RlZmluZSBTU0JfU1BST004X09GRE01R0hQTwkJMHgxMTRFCS8qIDUuOEdIeiBPRkRNIHBvd2VyIG9mZnNldCAqLwogCiAvKiBWYWx1ZXMgZm9yIFNTQl9TUFJPTTFfQklORl9DQ09ERSAqLwogZW51bSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jYWNoZS5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2FjaGUuaAppbmRleCAyZDhiMjExLi42ZjUyYjRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jYWNoZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2NhY2hlLmgKQEAgLTU5LDYgKzU5LDE1IEBACiAKICNkZWZpbmUJQ0FDSEVfTkVXX0VYUElSWSAxMjAJLyoga2VlcCBuZXcgdGhpbmdzIHBlbmRpbmcgY29uZmlybWF0aW9uIGZvciAxMjAgc2Vjb25kcyAqLwogCitzdHJ1Y3QgY2FjaGVfZGV0YWlsX3Byb2NmcyB7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jX2VudDsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgICAqZmx1c2hfZW50LCAqY2hhbm5lbF9lbnQsICpjb250ZW50X2VudDsKK307CisKK3N0cnVjdCBjYWNoZV9kZXRhaWxfcGlwZWZzIHsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXI7Cit9OworCiBzdHJ1Y3QgY2FjaGVfZGV0YWlsIHsKIAlzdHJ1Y3QgbW9kdWxlICoJCW93bmVyOwogCWludAkJCWhhc2hfc2l6ZTsKQEAgLTcwLDE1ICs3OSwxNyBAQAogCWNoYXIJCQkqbmFtZTsKIAl2b2lkCQkJKCpjYWNoZV9wdXQpKHN0cnVjdCBrcmVmICopOwogCi0Jdm9pZAkJCSgqY2FjaGVfcmVxdWVzdCkoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QsCi0JCQkJCQkgc3RydWN0IGNhY2hlX2hlYWQgKmgsCi0JCQkJCQkgY2hhciAqKmJwcCwgaW50ICpibGVuKTsKKwlpbnQJCQkoKmNhY2hlX3VwY2FsbCkoc3RydWN0IGNhY2hlX2RldGFpbCAqLAorCQkJCQkJc3RydWN0IGNhY2hlX2hlYWQgKik7CisKIAlpbnQJCQkoKmNhY2hlX3BhcnNlKShzdHJ1Y3QgY2FjaGVfZGV0YWlsICosCiAJCQkJCSAgICAgICBjaGFyICpidWYsIGludCBsZW4pOwogCiAJaW50CQkJKCpjYWNoZV9zaG93KShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCiAJCQkJCSAgICAgIHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLAogCQkJCQkgICAgICBzdHJ1Y3QgY2FjaGVfaGVhZCAqaCk7CisJdm9pZAkJCSgqd2Fybl9ub19saXN0ZW5lcikoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QsCisJCQkJCSAgICAgIGludCBoYXNfZGllZCk7CiAKIAlzdHJ1Y3QgY2FjaGVfaGVhZCAqCSgqYWxsb2MpKHZvaWQpOwogCWludAkJCSgqbWF0Y2gpKHN0cnVjdCBjYWNoZV9oZWFkICpvcmlnLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqbmV3KTsKQEAgLTk2LDEzICsxMDcsMTUgQEAKIAogCS8qIGZpZWxkcyBmb3IgY29tbXVuaWNhdGlvbiBvdmVyIGNoYW5uZWwgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXF1ZXVlOwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqcHJvY19lbnQ7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICAgKmZsdXNoX2VudCwgKmNoYW5uZWxfZW50LCAqY29udGVudF9lbnQ7CiAKIAlhdG9taWNfdAkJcmVhZGVyczsJCS8qIGhvdyBtYW55IHRpbWUgaXMgL2NoZW5uZWwgb3BlbiAqLwogCXRpbWVfdAkJCWxhc3RfY2xvc2U7CQkvKiBpZiBubyByZWFkZXJzLCB3aGVuIGRpZCBsYXN0IGNsb3NlICovCiAJdGltZV90CQkJbGFzdF93YXJuOwkJLyogd2hlbiB3ZSBsYXN0IHdhcm5lZCBhYm91dCBubyByZWFkZXJzICovCi0Jdm9pZAkJCSgqd2Fybl9ub19saXN0ZW5lcikoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpOworCisJdW5pb24geworCQlzdHJ1Y3QgY2FjaGVfZGV0YWlsX3Byb2NmcyBwcm9jZnM7CisJCXN0cnVjdCBjYWNoZV9kZXRhaWxfcGlwZWZzIHBpcGVmczsKKwl9IHU7CiB9OwogCiAKQEAgLTEyNyw2ICsxNDAsMTAgQEAKIH07CiAKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FjaGVfZmlsZV9vcGVyYXRpb25zX3BpcGVmczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbnRlbnRfZmlsZV9vcGVyYXRpb25zX3BpcGVmczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhY2hlX2ZsdXNoX29wZXJhdGlvbnNfcGlwZWZzOworCiBleHRlcm4gc3RydWN0IGNhY2hlX2hlYWQgKgogc3VucnBjX2NhY2hlX2xvb2t1cChzdHJ1Y3QgY2FjaGVfZGV0YWlsICpkZXRhaWwsCiAJCSAgICBzdHJ1Y3QgY2FjaGVfaGVhZCAqa2V5LCBpbnQgaGFzaCk7CkBAIC0xMzQsNiArMTUxLDEzIEBACiBzdW5ycGNfY2FjaGVfdXBkYXRlKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmRldGFpbCwKIAkJICAgIHN0cnVjdCBjYWNoZV9oZWFkICpuZXcsIHN0cnVjdCBjYWNoZV9oZWFkICpvbGQsIGludCBoYXNoKTsKIAorZXh0ZXJuIGludAorc3VucnBjX2NhY2hlX3BpcGVfdXBjYWxsKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmRldGFpbCwgc3RydWN0IGNhY2hlX2hlYWQgKmgsCisJCXZvaWQgKCpjYWNoZV9yZXF1ZXN0KShzdHJ1Y3QgY2FjaGVfZGV0YWlsICosCisJCQkJICAgICAgc3RydWN0IGNhY2hlX2hlYWQgKiwKKwkJCQkgICAgICBjaGFyICoqLAorCQkJCSAgICAgIGludCAqKSk7CisKIAogZXh0ZXJuIHZvaWQgY2FjaGVfY2xlYW5fZGVmZXJyZWQodm9pZCAqb3duZXIpOwogCkBAIC0xNzEsNiArMTk1LDEwIEBACiBleHRlcm4gaW50IGNhY2hlX3JlZ2lzdGVyKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKTsKIGV4dGVybiB2b2lkIGNhY2hlX3VucmVnaXN0ZXIoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpOwogCitleHRlcm4gaW50IHN1bnJwY19jYWNoZV9yZWdpc3Rlcl9waXBlZnMoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjb25zdCBjaGFyICosCisJCQkJCW1vZGVfdCwgc3RydWN0IGNhY2hlX2RldGFpbCAqKTsKK2V4dGVybiB2b2lkIHN1bnJwY19jYWNoZV91bnJlZ2lzdGVyX3BpcGVmcyhzdHJ1Y3QgY2FjaGVfZGV0YWlsICopOworCiBleHRlcm4gdm9pZCBxd29yZF9hZGQoY2hhciAqKmJwcCwgaW50ICpscCwgY2hhciAqc3RyKTsKIGV4dGVybiB2b2lkIHF3b3JkX2FkZGhleChjaGFyICoqYnBwLCBpbnQgKmxwLCBjaGFyICpidWYsIGludCBibGVuKTsKIGV4dGVybiBpbnQgcXdvcmRfZ2V0KGNoYXIgKipicHAsIGNoYXIgKmRlc3QsIGludCBidWZzaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaAppbmRleCAzNzg4MWYxYS4uYWIzZjZlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaApAQCAtOSw2ICs5LDEwIEBACiAjaWZuZGVmIF9MSU5VWF9TVU5SUENfQ0xOVF9ICiAjZGVmaW5lIF9MSU5VWF9TVU5SUENfQ0xOVF9ICiAKKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorCiAjaW5jbHVkZSA8bGludXgvc3VucnBjL21zZ19wcm90Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3hwcnQuaD4KQEAgLTE3LDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhdGguaD4KIAogc3RydWN0IHJwY19pbm9kZTsKIApAQCAtNTAsOSArNTUsNyBAQAogCiAJaW50CQkJY2xfbm9kZWxlbjsJLyogbm9kZW5hbWUgbGVuZ3RoICovCiAJY2hhciAJCQljbF9ub2RlbmFtZVtVTlhfTUFYTk9ERU5BTUVdOwotCWNoYXIJCQljbF9wYXRobmFtZVszMF07LyogUGF0aCBpbiBycGNfcGlwZV9mcyAqLwotCXN0cnVjdCB2ZnNtb3VudCAqCWNsX3Zmc21udDsKLQlzdHJ1Y3QgZGVudHJ5ICoJCWNsX2RlbnRyeTsJLyogaW5vZGUgKi8KKwlzdHJ1Y3QgcGF0aAkJY2xfcGF0aDsKIAlzdHJ1Y3QgcnBjX2NsbnQgKgljbF9wYXJlbnQ7CS8qIFBvaW50cyB0byBwYXJlbnQgb2YgY2xvbmVzICovCiAJc3RydWN0IHJwY19ydHQJCWNsX3J0dF9kZWZhdWx0OwogCXN0cnVjdCBycGNfdGltZW91dAljbF90aW1lb3V0X2RlZmF1bHQ7CkBAIC0xNTEsNSArMTU0LDM5IEBACiBzaXplX3QJCXJwY19wZWVyYWRkcihzdHJ1Y3QgcnBjX2NsbnQgKiwgc3RydWN0IHNvY2thZGRyICosIHNpemVfdCk7CiBjb25zdCBjaGFyCSpycGNfcGVlcmFkZHIyc3RyKHN0cnVjdCBycGNfY2xudCAqLCBlbnVtIHJwY19kaXNwbGF5X2Zvcm1hdF90KTsKIAorc2l6ZV90CQlycGNfbnRvcChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgY2hhciAqLCBjb25zdCBzaXplX3QpOworc2l6ZV90CQlycGNfcHRvbihjb25zdCBjaGFyICosIGNvbnN0IHNpemVfdCwKKwkJCSBzdHJ1Y3Qgc29ja2FkZHIgKiwgY29uc3Qgc2l6ZV90KTsKK2NoYXIgKgkJcnBjX3NvY2thZGRyMnVhZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKTsKK3NpemVfdAkJcnBjX3VhZGRyMnNvY2thZGRyKGNvbnN0IGNoYXIgKiwgY29uc3Qgc2l6ZV90LAorCQkJCSAgIHN0cnVjdCBzb2NrYWRkciAqLCBjb25zdCBzaXplX3QpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHJwY19nZXRfcG9ydChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCkKK3sKKwlzd2l0Y2ggKHNhcC0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXApLT5zaW5fcG9ydCk7CisJY2FzZSBBRl9JTkVUNjoKKwkJcmV0dXJuIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcCktPnNpbjZfcG9ydCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcnBjX3NldF9wb3J0KHN0cnVjdCBzb2NrYWRkciAqc2FwLAorCQkJCWNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQpCit7CisJc3dpdGNoIChzYXAtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXApLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXApLT5zaW42X3BvcnQgPSBodG9ucyhwb3J0KTsKKwkJYnJlYWs7CisJfQorfQorCisjZGVmaW5lIElQVjZfU0NPUEVfREVMSU1JVEVSCQknJScKKyNkZWZpbmUgSVBWNl9TQ09QRV9JRF9MRU4JCXNpemVvZigiJW5ubm5ubm5ubm4iKQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfQ0xOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tc2dfcHJvdC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvbXNnX3Byb3QuaAppbmRleCA3MGRmNGYxLi43N2U2MjQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tc2dfcHJvdC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL21zZ19wcm90LmgKQEAgLTE4OSw3ICsxODksMjIgQEAKICAqIEFkZGl0aW9uYWxseSwgdGhlIHR3byBhbHRlcm5hdGl2ZSBmb3JtcyBzcGVjaWZpZWQgaW4gU2VjdGlvbiAyLjIgb2YKICAqIFtSRkMyMzczXSBhcmUgYWxzbyBhY2NlcHRhYmxlLgogICovCi0jZGVmaW5lIFJQQ0JJTkRfTUFYVUFERFJMRU4JKDU2dSkKKworI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KKworLyogTWF4aW11bSBzaXplIG9mIHRoZSBwb3J0IG51bWJlciBwYXJ0IG9mIGEgdW5pdmVyc2FsIGFkZHJlc3MgKi8KKyNkZWZpbmUgUlBDQklORF9NQVhVQUREUlBMRU4Jc2l6ZW9mKCIuMjU1LjI1NSIpCisKKy8qIE1heGltdW0gc2l6ZSBvZiBhbiBJUHY0IHVuaXZlcnNhbCBhZGRyZXNzICovCisjZGVmaW5lIFJQQ0JJTkRfTUFYVUFERFI0TEVOCVwKKwkJKElORVRfQUREUlNUUkxFTiArIFJQQ0JJTkRfTUFYVUFERFJQTEVOKQorCisvKiBNYXhpbXVtIHNpemUgb2YgYW4gSVB2NiB1bml2ZXJzYWwgYWRkcmVzcyAqLworI2RlZmluZSBSUENCSU5EX01BWFVBRERSNkxFTglcCisJCShJTkVUNl9BRERSU1RSTEVOICsgUlBDQklORF9NQVhVQUREUlBMRU4pCisKKy8qIEFzc3VtZSBJTkVUNl9BRERSU1RSTEVOIHdpbGwgYWx3YXlzIGJlIGxhcmdlciB0aGFuIElORVRfQUREUlNUUkxFTi4uLiAqLworI2RlZmluZSBSUENCSU5EX01BWFVBRERSTEVOCVJQQ0JJTkRfTUFYVUFERFI2TEVOCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0xJTlVYX1NVTlJQQ19NU0dQUk9UX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9ycGNfcGlwZV9mcy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvcnBjX3BpcGVfZnMuaAppbmRleCBjZWE3NjRjLi5jZjE0ZGI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9ycGNfcGlwZV9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3JwY19waXBlX2ZzLmgKQEAgLTMsNiArMyw4IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKwogc3RydWN0IHJwY19waXBlX21zZyB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXZvaWQgKmRhdGE7CkBAIC0zMiw4ICszNCw4IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7CiAjZGVmaW5lIFJQQ19QSVBFX1dBSVRfRk9SX09QRU4JMQogCWludCBmbGFnczsKLQlzdHJ1Y3QgcnBjX3BpcGVfb3BzICpvcHM7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBxdWV1ZV90aW1lb3V0OworCWNvbnN0IHN0cnVjdCBycGNfcGlwZV9vcHMgKm9wczsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJwY19pbm9kZSAqCkBAIC00NCw5ICs0NiwxOSBAQAogCiBleHRlcm4gaW50IHJwY19xdWV1ZV91cGNhbGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBycGNfcGlwZV9tc2cgKik7CiAKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5ICpycGNfbWtkaXIoY2hhciAqLCBzdHJ1Y3QgcnBjX2NsbnQgKik7Ci1leHRlcm4gaW50IHJwY19ybWRpcihzdHJ1Y3QgZGVudHJ5ICopOwotZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnJwY19ta3BpcGUoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosIHZvaWQgKiwgc3RydWN0IHJwY19waXBlX29wcyAqLCBpbnQgZmxhZ3MpOworc3RydWN0IHJwY19jbG50OworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnJwY19jcmVhdGVfY2xpZW50X2RpcihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBycGNfY2xudCAqKTsKK2V4dGVybiBpbnQgcnBjX3JlbW92ZV9jbGllbnRfZGlyKHN0cnVjdCBkZW50cnkgKik7CisKK3N0cnVjdCBjYWNoZV9kZXRhaWw7CitleHRlcm4gc3RydWN0IGRlbnRyeSAqcnBjX2NyZWF0ZV9jYWNoZV9kaXIoc3RydWN0IGRlbnRyeSAqLAorCQkJCQkgICBzdHJ1Y3QgcXN0ciAqLAorCQkJCQkgICBtb2RlX3QgdW1vZGUsCisJCQkJCSAgIHN0cnVjdCBjYWNoZV9kZXRhaWwgKik7CitleHRlcm4gdm9pZCBycGNfcmVtb3ZlX2NhY2hlX2RpcihzdHJ1Y3QgZGVudHJ5ICopOworCitleHRlcm4gc3RydWN0IGRlbnRyeSAqcnBjX21rcGlwZShzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLAorCQkJCSBjb25zdCBzdHJ1Y3QgcnBjX3BpcGVfb3BzICosIGludCBmbGFncyk7CiBleHRlcm4gaW50IHJwY191bmxpbmsoc3RydWN0IGRlbnRyeSAqKTsKIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKnJwY19nZXRfbW91bnQodm9pZCk7CiBleHRlcm4gdm9pZCBycGNfcHV0X21vdW50KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMveGRyLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94ZHIuaAppbmRleCBiOTljNjI1Li43ZGE0NjZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94ZHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94ZHIuaApAQCAtMTE3LDE3ICsxMTcsMTUgQEAKIHN0YXRpYyBpbmxpbmUgX19iZTMyICoKIHhkcl9lbmNvZGVfaHlwZXIoX19iZTMyICpwLCBfX3U2NCB2YWwpCiB7Ci0JKnArKyA9IGh0b25sKHZhbCA+PiAzMik7Ci0JKnArKyA9IGh0b25sKHZhbCAmIDB4RkZGRkZGRkYpOwotCXJldHVybiBwOworCSooX19iZTY0ICopcCA9IGNwdV90b19iZTY0KHZhbCk7CisJcmV0dXJuIHAgKyAyOwogfQogCiBzdGF0aWMgaW5saW5lIF9fYmUzMiAqCiB4ZHJfZGVjb2RlX2h5cGVyKF9fYmUzMiAqcCwgX191NjQgKnZhbHApCiB7Ci0JKnZhbHAgID0gKChfX3U2NCkgbnRvaGwoKnArKykpIDw8IDMyOwotCSp2YWxwIHw9IG50b2hsKCpwKyspOwotCXJldHVybiBwOworCSp2YWxwID0gYmU2NF90b19jcHVwKChfX2JlNjQgKilwKTsKKwlyZXR1cm4gcCArIDI7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKaW5kZXggMTE3NWQ1OC4uYzA5MGRmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaApAQCAtMzgsMTAgKzM4LDggQEAKIAlSUENfRElTUExBWV9BRERSID0gMCwKIAlSUENfRElTUExBWV9QT1JULAogCVJQQ19ESVNQTEFZX1BST1RPLAotCVJQQ19ESVNQTEFZX0FMTCwKIAlSUENfRElTUExBWV9IRVhfQUREUiwKIAlSUENfRElTUExBWV9IRVhfUE9SVCwKLQlSUENfRElTUExBWV9VTklWRVJTQUxfQUREUiwKIAlSUENfRElTUExBWV9ORVRJRCwKIAlSUENfRElTUExBWV9NQVgsCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2lvdGxiLmggYi9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaAppbmRleCBjYjFhNjYzLi43M2IxZjFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaApAQCAtMTQsNyArMTQsNiBAQAogICovCiAjZGVmaW5lIElPX1RMQl9TRUdTSVpFCTEyOAogCi0KIC8qCiAgKiBsb2cgb2YgdGhlIHNpemUgb2YgZWFjaCBJTyBUTEIgc2xhYi4gIFRoZSBudW1iZXIgb2Ygc2xhYnMgaXMgY29tbWFuZCBsaW5lCiAgKiBjb250cm9sbGFibGUuCkBAIC0yNCwxNiArMjMsNiBAQAogZXh0ZXJuIHZvaWQKIHN3aW90bGJfaW5pdCh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgKnN3aW90bGJfYWxsb2NfYm9vdChzaXplX3QgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgbnNsYWJzKTsKLWV4dGVybiB2b2lkICpzd2lvdGxiX2FsbG9jKHVuc2lnbmVkIG9yZGVyLCB1bnNpZ25lZCBsb25nIG5zbGFicyk7Ci0KLWV4dGVybiBkbWFfYWRkcl90IHN3aW90bGJfcGh5c190b19idXMoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJICAgICAgcGh5c19hZGRyX3QgYWRkcmVzcyk7Ci1leHRlcm4gcGh5c19hZGRyX3Qgc3dpb3RsYl9idXNfdG9fcGh5cyhzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQkgICAgICAgZG1hX2FkZHJfdCBhZGRyZXNzKTsKLQotZXh0ZXJuIGludCBzd2lvdGxiX2FyY2hfcmFuZ2VfbmVlZHNfbWFwcGluZyhwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUpOwotCiBleHRlcm4gdm9pZAogKnN3aW90bGJfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAogCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDgwZGU3MDAuLmE4ZTM3ODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZW0uaD4KICNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgogI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YS5oPgogI2luY2x1ZGUgPGxpbnV4L2tleS5oPgogI2luY2x1ZGUgPHRyYWNlL3N5c2NhbGwuaD4KQEAgLTk3LDYgKzk4LDUzIEBACiAjZGVmaW5lIF9fU0NfVEVTVDUodDUsIGE1LCAuLi4pCV9fU0NfVEVTVCh0NSk7IF9fU0NfVEVTVDQoX19WQV9BUkdTX18pCiAjZGVmaW5lIF9fU0NfVEVTVDYodDYsIGE2LCAuLi4pCV9fU0NfVEVTVCh0Nik7IF9fU0NfVEVTVDUoX19WQV9BUkdTX18pCiAKKyNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2RlZmluZSBUUkFDRV9TWVNfRU5URVJfUFJPRklMRShzbmFtZSkJCQkJCSAgICAgICBcCitzdGF0aWMgaW50IHByb2Zfc3lzZW50ZXJfZW5hYmxlXyMjc25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsKSAgXAorewkJCQkJCQkJCSAgICAgICBcCisJaW50IHJldCA9IDA7CQkJCQkJCSAgICAgICBcCisJaWYgKCFhdG9taWNfaW5jX3JldHVybigmZXZlbnRfZW50ZXJfIyNzbmFtZS5wcm9maWxlX2NvdW50KSkJICAgICAgIFwKKwkJcmV0ID0gcmVnX3Byb2Zfc3lzY2FsbF9lbnRlcigic3lzIiNzbmFtZSk7CQkgICAgICAgXAorCXJldHVybiByZXQ7CQkJCQkJCSAgICAgICBcCit9CQkJCQkJCQkJICAgICAgIFwKKwkJCQkJCQkJCSAgICAgICBcCitzdGF0aWMgdm9pZCBwcm9mX3N5c2VudGVyX2Rpc2FibGVfIyNzbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpXAorewkJCQkJCQkJCSAgICAgICBcCisJaWYgKGF0b21pY19hZGRfbmVnYXRpdmUoLTEsICZldmVudF9lbnRlcl8jI3NuYW1lLnByb2ZpbGVfY291bnQpKSAgICAgICBcCisJCXVucmVnX3Byb2Zfc3lzY2FsbF9lbnRlcigic3lzIiNzbmFtZSk7CQkJICAgICAgIFwKK30KKworI2RlZmluZSBUUkFDRV9TWVNfRVhJVF9QUk9GSUxFKHNuYW1lKQkJCQkJICAgICAgIFwKK3N0YXRpYyBpbnQgcHJvZl9zeXNleGl0X2VuYWJsZV8jI3NuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCkgICBcCit7CQkJCQkJCQkJICAgICAgIFwKKwlpbnQgcmV0ID0gMDsJCQkJCQkJICAgICAgIFwKKwlpZiAoIWF0b21pY19pbmNfcmV0dXJuKCZldmVudF9leGl0XyMjc25hbWUucHJvZmlsZV9jb3VudCkpCSAgICAgICBcCisJCXJldCA9IHJlZ19wcm9mX3N5c2NhbGxfZXhpdCgic3lzIiNzbmFtZSk7CQkgICAgICAgXAorCXJldHVybiByZXQ7CQkJCQkJCSAgICAgICBcCit9CQkJCQkJCQkJICAgICAgIFwKKwkJCQkJCQkJCSAgICAgICBcCitzdGF0aWMgdm9pZCBwcm9mX3N5c2V4aXRfZGlzYWJsZV8jI3NuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCkgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoYXRvbWljX2FkZF9uZWdhdGl2ZSgtMSwgJmV2ZW50X2V4aXRfIyNzbmFtZS5wcm9maWxlX2NvdW50KSkJICAgICAgIFwKKwkJdW5yZWdfcHJvZl9zeXNjYWxsX2V4aXQoInN5cyIjc25hbWUpOwkJCSAgICAgICBcCit9CisKKyNkZWZpbmUgVFJBQ0VfU1lTX0VOVEVSX1BST0ZJTEVfSU5JVChzbmFtZSkJCQkJICAgICAgIFwKKwkucHJvZmlsZV9jb3VudCA9IEFUT01JQ19JTklUKC0xKSwJCQkJICAgICAgIFwKKwkucHJvZmlsZV9lbmFibGUgPSBwcm9mX3N5c2VudGVyX2VuYWJsZV8jI3NuYW1lLAkJCSAgICAgICBcCisJLnByb2ZpbGVfZGlzYWJsZSA9IHByb2Zfc3lzZW50ZXJfZGlzYWJsZV8jI3NuYW1lLAorCisjZGVmaW5lIFRSQUNFX1NZU19FWElUX1BST0ZJTEVfSU5JVChzbmFtZSkJCQkJICAgICAgIFwKKwkucHJvZmlsZV9jb3VudCA9IEFUT01JQ19JTklUKC0xKSwJCQkJICAgICAgIFwKKwkucHJvZmlsZV9lbmFibGUgPSBwcm9mX3N5c2V4aXRfZW5hYmxlXyMjc25hbWUsCQkJICAgICAgIFwKKwkucHJvZmlsZV9kaXNhYmxlID0gcHJvZl9zeXNleGl0X2Rpc2FibGVfIyNzbmFtZSwKKyNlbHNlCisjZGVmaW5lIFRSQUNFX1NZU19FTlRFUl9QUk9GSUxFKHNuYW1lKQorI2RlZmluZSBUUkFDRV9TWVNfRU5URVJfUFJPRklMRV9JTklUKHNuYW1lKQorI2RlZmluZSBUUkFDRV9TWVNfRVhJVF9QUk9GSUxFKHNuYW1lKQorI2RlZmluZSBUUkFDRV9TWVNfRVhJVF9QUk9GSUxFX0lOSVQoc25hbWUpCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKICNkZWZpbmUgX19TQ19TVFJfQURFQ0wxKHQsIGEpCQkjYQogI2RlZmluZSBfX1NDX1NUUl9BREVDTDIodCwgYSwgLi4uKQkjYSwgX19TQ19TVFJfQURFQ0wxKF9fVkFfQVJHU19fKQpAQCAtMTEyLDcgKzE2MCw4MSBAQAogI2RlZmluZSBfX1NDX1NUUl9UREVDTDUodCwgYSwgLi4uKQkjdCwgX19TQ19TVFJfVERFQ0w0KF9fVkFfQVJHU19fKQogI2RlZmluZSBfX1NDX1NUUl9UREVDTDYodCwgYSwgLi4uKQkjdCwgX19TQ19TVFJfVERFQ0w1KF9fVkFfQVJHU19fKQogCisjZGVmaW5lIFNZU0NBTExfVFJBQ0VfRU5URVJfRVZFTlQoc25hbWUpCQkJCVwKKwlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50X2VudGVyXyMjc25hbWU7CQlcCisJc3RydWN0IHRyYWNlX2V2ZW50IGVudGVyX3N5c2NhbGxfcHJpbnRfIyNzbmFtZSA9IHsJCVwKKwkJLnRyYWNlICAgICAgICAgICAgICAgICAgPSBwcmludF9zeXNjYWxsX2VudGVyLAkJXAorCX07CQkJCQkJCQlcCisJc3RhdGljIGludCBpbml0X2VudGVyXyMjc25hbWUodm9pZCkJCQkJXAorCXsJCQkJCQkJCVwKKwkJaW50IG51bSwgaWQ7CQkJCQkJXAorCQludW0gPSBzeXNjYWxsX25hbWVfdG9fbnIoInN5cyIjc25hbWUpOwkJCVwKKwkJaWYgKG51bSA8IDApCQkJCQkJXAorCQkJcmV0dXJuIC1FTk9TWVM7CQkJCQlcCisJCWlkID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZlbnRlcl9zeXNjYWxsX3ByaW50XyMjc25hbWUpO1wKKwkJaWYgKCFpZCkJCQkJCQlcCisJCQlyZXR1cm4gLUVOT0RFVjsJCQkJCVwKKwkJZXZlbnRfZW50ZXJfIyNzbmFtZS5pZCA9IGlkOwkJCQlcCisJCXNldF9zeXNjYWxsX2VudGVyX2lkKG51bSwgaWQpOwkJCQlcCisJCUlOSVRfTElTVF9IRUFEKCZldmVudF9lbnRlcl8jI3NuYW1lLmZpZWxkcyk7CQlcCisJCXJldHVybiAwOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJVFJBQ0VfU1lTX0VOVEVSX1BST0ZJTEUoc25hbWUpOwkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCVwKKwkgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQkJXAorCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpCQkJXAorCSAgZXZlbnRfZW50ZXJfIyNzbmFtZSA9IHsJCQkJCVwKKwkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAic3lzX2VudGVyIiNzbmFtZSwJCVwKKwkJLnN5c3RlbSAgICAgICAgICAgICAgICAgPSAic3lzY2FsbHMiLAkJCVwKKwkJLmV2ZW50ICAgICAgICAgICAgICAgICAgPSAmZXZlbnRfc3lzY2FsbF9lbnRlciwJCVwKKwkJLnJhd19pbml0CQk9IGluaXRfZW50ZXJfIyNzbmFtZSwJCVwKKwkJLnNob3dfZm9ybWF0CQk9IHN5c2NhbGxfZW50ZXJfZm9ybWF0LAkJXAorCQkuZGVmaW5lX2ZpZWxkcwkJPSBzeXNjYWxsX2VudGVyX2RlZmluZV9maWVsZHMsCVwKKwkJLnJlZ2Z1bmMJCT0gcmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIsCVwKKwkJLnVucmVnZnVuYwkJPSB1bnJlZ19ldmVudF9zeXNjYWxsX2VudGVyLAlcCisJCS5kYXRhCQkJPSAic3lzIiNzbmFtZSwJCQlcCisJCVRSQUNFX1NZU19FTlRFUl9QUk9GSUxFX0lOSVQoc25hbWUpCQkJXAorCX0KKworI2RlZmluZSBTWVNDQUxMX1RSQUNFX0VYSVRfRVZFTlQoc25hbWUpCQkJCQlcCisJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF9leGl0XyMjc25hbWU7CQlcCisJc3RydWN0IHRyYWNlX2V2ZW50IGV4aXRfc3lzY2FsbF9wcmludF8jI3NuYW1lID0gewkJXAorCQkudHJhY2UgICAgICAgICAgICAgICAgICA9IHByaW50X3N5c2NhbGxfZXhpdCwJCVwKKwl9OwkJCQkJCQkJXAorCXN0YXRpYyBpbnQgaW5pdF9leGl0XyMjc25hbWUodm9pZCkJCQkJXAorCXsJCQkJCQkJCVwKKwkJaW50IG51bSwgaWQ7CQkJCQkJXAorCQludW0gPSBzeXNjYWxsX25hbWVfdG9fbnIoInN5cyIjc25hbWUpOwkJCVwKKwkJaWYgKG51bSA8IDApCQkJCQkJXAorCQkJcmV0dXJuIC1FTk9TWVM7CQkJCQlcCisJCWlkID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZleGl0X3N5c2NhbGxfcHJpbnRfIyNzbmFtZSk7XAorCQlpZiAoIWlkKQkJCQkJCVwKKwkJCXJldHVybiAtRU5PREVWOwkJCQkJXAorCQlldmVudF9leGl0XyMjc25hbWUuaWQgPSBpZDsJCQkJXAorCQlzZXRfc3lzY2FsbF9leGl0X2lkKG51bSwgaWQpOwkJCQlcCisJCUlOSVRfTElTVF9IRUFEKCZldmVudF9leGl0XyMjc25hbWUuZmllbGRzKTsJCVwKKwkJcmV0dXJuIDA7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlUUkFDRV9TWVNfRVhJVF9QUk9GSUxFKHNuYW1lKTsJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQlcCisJICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKQkJCVwKKwkgIGV2ZW50X2V4aXRfIyNzbmFtZSA9IHsJCQkJCVwKKwkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAic3lzX2V4aXQiI3NuYW1lLAkJXAorCQkuc3lzdGVtICAgICAgICAgICAgICAgICA9ICJzeXNjYWxscyIsCQkJXAorCQkuZXZlbnQgICAgICAgICAgICAgICAgICA9ICZldmVudF9zeXNjYWxsX2V4aXQsCQlcCisJCS5yYXdfaW5pdAkJPSBpbml0X2V4aXRfIyNzbmFtZSwJCVwKKwkJLnNob3dfZm9ybWF0CQk9IHN5c2NhbGxfZXhpdF9mb3JtYXQsCQlcCisJCS5kZWZpbmVfZmllbGRzCQk9IHN5c2NhbGxfZXhpdF9kZWZpbmVfZmllbGRzLAlcCisJCS5yZWdmdW5jCQk9IHJlZ19ldmVudF9zeXNjYWxsX2V4aXQsCVwKKwkJLnVucmVnZnVuYwkJPSB1bnJlZ19ldmVudF9zeXNjYWxsX2V4aXQsCVwKKwkJLmRhdGEJCQk9ICJzeXMiI3NuYW1lLAkJCVwKKwkJVFJBQ0VfU1lTX0VYSVRfUFJPRklMRV9JTklUKHNuYW1lKQkJCVwKKwl9CisKICNkZWZpbmUgU1lTQ0FMTF9NRVRBREFUQShzbmFtZSwgbmIpCQkJCVwKKwlTWVNDQUxMX1RSQUNFX0VOVEVSX0VWRU5UKHNuYW1lKTsJCQlcCisJU1lTQ0FMTF9UUkFDRV9FWElUX0VWRU5UKHNuYW1lKTsJCQlcCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fdXNlZAkJXAogCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKIAkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKQEAgLTEyMSwxOCArMjQzLDIzIEBACiAJCS5uYl9hcmdzIAk9IG5iLAkJCQlcCiAJCS50eXBlcwkJPSB0eXBlc18jI3NuYW1lLAkJXAogCQkuYXJncwkJPSBhcmdzXyMjc25hbWUsCQkJXAotCX0KKwkJLmVudGVyX2V2ZW50CT0gJmV2ZW50X2VudGVyXyMjc25hbWUsCQlcCisJCS5leGl0X2V2ZW50CT0gJmV2ZW50X2V4aXRfIyNzbmFtZSwJCVwKKwl9OwogCiAjZGVmaW5lIFNZU0NBTExfREVGSU5FMChzbmFtZSkJCQkJCVwKKwlTWVNDQUxMX1RSQUNFX0VOVEVSX0VWRU5UKF8jI3NuYW1lKTsJCQlcCisJU1lTQ0FMTF9UUkFDRV9FWElUX0VWRU5UKF8jI3NuYW1lKTsJCQlcCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fdXNlZAkJXAogCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKIAkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKIAkgIF9fc3lzY2FsbF9tZXRhXyMjc25hbWUgPSB7CQkJCVwKIAkJLm5hbWUgCQk9ICJzeXNfIiNzbmFtZSwJCQlcCiAJCS5uYl9hcmdzIAk9IDAsCQkJCVwKKwkJLmVudGVyX2V2ZW50CT0gJmV2ZW50X2VudGVyX18jI3NuYW1lLAlcCisJCS5leGl0X2V2ZW50CT0gJmV2ZW50X2V4aXRfXyMjc25hbWUsCQlcCiAJfTsJCQkJCQkJXAogCWFzbWxpbmthZ2UgbG9uZyBzeXNfIyNzbmFtZSh2b2lkKQotCiAjZWxzZQogI2RlZmluZSBTWVNDQUxMX0RFRklORTAobmFtZSkJICAgYXNtbGlua2FnZSBsb25nIHN5c18jI25hbWUodm9pZCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Ym9vdC5oIGIvaW5jbHVkZS9saW51eC90Ym9vdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMmEwYzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Rib290LmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiB0Ym9vdC5oOiBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUgd2l0aCB0Ym9vdCBhbmQga2VybmVsIGFuZCBmdW5jdGlvbnMKKyAqICAgICAgICAgIHVzZWQgYnkga2VybmVsIGZvciBydW50aW1lIHN1cHBvcnQgb2YgSW50ZWwoUikgVHJ1c3RlZAorICogICAgICAgICAgRXhlY3V0aW9uIFRlY2hub2xvZ3kKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9UQk9PVF9ICisjZGVmaW5lIF9MSU5VWF9UQk9PVF9ICisKKy8qIHRoZXNlIG11c3QgaGF2ZSB0aGUgdmFsdWVzIGZyb20gMC01IGluIHRoaXMgb3JkZXIgKi8KK2VudW0geworCVRCX1NIVVRET1dOX1JFQk9PVCA9IDAsCisJVEJfU0hVVERPV05fUzUsCisJVEJfU0hVVERPV05fUzQsCisJVEJfU0hVVERPV05fUzMsCisJVEJfU0hVVERPV05fSEFMVCwKKwlUQl9TSFVURE9XTl9XRlMKK307CisKKyNpZmRlZiBDT05GSUdfSU5URUxfVFhUCisjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CisvKiB1c2VkIHRvIGNvbW11bmljYXRlIGJldHdlZW4gdGJvb3QgYW5kIHRoZSBsYXVuY2hlZCBrZXJuZWwgKi8KKworI2RlZmluZSBUQl9LRVlfU0laRSAgICAgICAgICAgICA2NCAgIC8qIDUxMiBiaXRzICovCisKKyNkZWZpbmUgTUFYX1RCX01BQ19SRUdJT05TICAgICAgMzIKKworc3RydWN0IHRib290X21hY19yZWdpb24geworCXU2NCAgc3RhcnQ7ICAgICAgICAgLyogbXVzdCBiZSA2NCBieXRlIC1hbGlnbmVkICovCisJdTMyICBzaXplOyAgICAgICAgICAvKiBtdXN0IGJlIDY0IGJ5dGUgLWdyYW51bGFyICovCit9IF9fcGFja2VkOworCisvKiBHQVMgLSBHZW5lcmljIEFkZHJlc3MgU3RydWN0dXJlIChBQ1BJIDIuMCspICovCitzdHJ1Y3QgdGJvb3RfYWNwaV9nZW5lcmljX2FkZHJlc3MgeworCXU4ICBzcGFjZV9pZDsKKwl1OCAgYml0X3dpZHRoOworCXU4ICBiaXRfb2Zmc2V0OworCXU4ICBhY2Nlc3Nfd2lkdGg7CisJdTY0IGFkZHJlc3M7Cit9IF9fcGFja2VkOworCisvKgorICogY29tYmluZXMgU3ggaW5mbyBmcm9tIEZBRFQgYW5kIEZBQ1MgdGFibGVzIHBlciBBQ1BJIDIuMCsgc3BlYworICogKGh0dHA6Ly93d3cuYWNwaS5pbmZvLykKKyAqLworc3RydWN0IHRib290X2FjcGlfc2xlZXBfaW5mbyB7CisJc3RydWN0IHRib290X2FjcGlfZ2VuZXJpY19hZGRyZXNzIHBtMWFfY250X2JsazsKKwlzdHJ1Y3QgdGJvb3RfYWNwaV9nZW5lcmljX2FkZHJlc3MgcG0xYl9jbnRfYmxrOworCXN0cnVjdCB0Ym9vdF9hY3BpX2dlbmVyaWNfYWRkcmVzcyBwbTFhX2V2dF9ibGs7CisJc3RydWN0IHRib290X2FjcGlfZ2VuZXJpY19hZGRyZXNzIHBtMWJfZXZ0X2JsazsKKwl1MTYgcG0xYV9jbnRfdmFsOworCXUxNiBwbTFiX2NudF92YWw7CisJdTY0IHdha2V1cF92ZWN0b3I7CisJdTMyIHZlY3Rvcl93aWR0aDsKKwl1NjQga2VybmVsX3MzX3Jlc3VtZV92ZWN0b3I7Cit9IF9fcGFja2VkOworCisvKgorICogc2hhcmVkIG1lbW9yeSBwYWdlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiB0Ym9vdCBhbmQga2VybmVsCisgKi8KK3N0cnVjdCB0Ym9vdCB7CisJLyoKKwkgKiB2ZXJzaW9uIDMrIGZpZWxkczoKKwkgKi8KKworCS8qIFRCT09UX1VVSUQgKi8KKwl1OCB1dWlkWzE2XTsKKworCS8qIHZlcnNpb24gbnVtYmVyOiA1IGlzIGN1cnJlbnQgKi8KKwl1MzIgdmVyc2lvbjsKKworCS8qIHBoeXNpY2FsIGFkZHIgb2YgdGJfbG9nX3QgbG9nICovCisJdTMyIGxvZ19hZGRyOworCisJLyoKKwkgKiBwaHlzaWNhbCBhZGRyIG9mIGVudHJ5IHBvaW50IGZvciB0Ym9vdCBzaHV0ZG93biBhbmQKKwkgKiB0eXBlIG9mIHNodXRkb3duIChUQl9TSFVURE9XTl8qKSBiZWluZyByZXF1ZXN0ZWQKKwkgKi8KKwl1MzIgc2h1dGRvd25fZW50cnk7CisJdTMyIHNodXRkb3duX3R5cGU7CisKKwkvKiBrZXJuZWwtc3BlY2lmaWVkIEFDUEkgaW5mbyBmb3IgU3ggc2h1dGRvd24gKi8KKwlzdHJ1Y3QgdGJvb3RfYWNwaV9zbGVlcF9pbmZvIGFjcGlfc2luZm87CisKKwkvKiB0Ym9vdCBsb2NhdGlvbiBpbiBtZW1vcnkgKHBoeXNpY2FsKSAqLworCXUzMiB0Ym9vdF9iYXNlOworCXUzMiB0Ym9vdF9zaXplOworCisJLyogbWVtb3J5IHJlZ2lvbnMgKHBoeXMgYWRkcnMpIGZvciB0Ym9vdCB0byBNQUMgb24gUzMgKi8KKwl1OCBudW1fbWFjX3JlZ2lvbnM7CisJc3RydWN0IHRib290X21hY19yZWdpb24gbWFjX3JlZ2lvbnNbTUFYX1RCX01BQ19SRUdJT05TXTsKKworCisJLyoKKwkgKiB2ZXJzaW9uIDQrIGZpZWxkczoKKwkgKi8KKworCS8qIHN5bW1ldHJpYyBrZXkgZm9yIHVzZSBieSBrZXJuZWw7IHdpbGwgYmUgZW5jcnlwdGVkIG9uIFMzICovCisJdTggczNfa2V5W1RCX0tFWV9TSVpFXTsKKworCisJLyoKKwkgKiB2ZXJzaW9uIDUrIGZpZWxkczoKKwkgKi8KKworCS8qIHVzZWQgdG8gNGJ5dGUtYWxpZ24gbnVtX2luX3dmcyAqLworCXU4IHJlc2VydmVkX2FsaWduWzNdOworCisJLyogbnVtYmVyIG9mIHByb2Nlc3NvcnMgaW4gd2FpdC1mb3ItU0lQSSAqLworCXUzMiBudW1faW5fd2ZzOworfSBfX3BhY2tlZDsKKworLyoKKyAqIFVVSUQgZm9yIHRib290IGRhdGEgc3RydWN0IHRvIGZhY2lsaXRhdGUgbWF0Y2hpbmcKKyAqIGRlZmluZWQgYXMgezY2M0M4REZGLUU4QjMtNGI4Mi1BQUJGLTE5RUE0RDA1N0EwOH0gYnkgdGJvb3QsIHdoaWNoIGlzCisgKiByZXByZXNlbnRlZCBhcyB7fSBpbiB0aGUgY2hhciBhcnJheSB1c2VkIGhlcmUKKyAqLworI2RlZmluZSBUQk9PVF9VVUlECXsweGZmLCAweDhkLCAweDNjLCAweDY2LCAweGIzLCAweGU4LCAweDgyLCAweDRiLCAweGJmLFwKKwkJCSAweGFhLCAweDE5LCAweGVhLCAweDRkLCAweDUsIDB4N2EsIDB4OH0KKworZXh0ZXJuIHN0cnVjdCB0Ym9vdCAqdGJvb3Q7CisKK3N0YXRpYyBpbmxpbmUgaW50IHRib290X2VuYWJsZWQodm9pZCkKK3sKKwlyZXR1cm4gdGJvb3QgIT0gTlVMTDsKK30KKworZXh0ZXJuIHZvaWQgdGJvb3RfcHJvYmUodm9pZCk7CitleHRlcm4gdm9pZCB0Ym9vdF9zaHV0ZG93bih1MzIgc2h1dGRvd25fdHlwZSk7CitleHRlcm4gdm9pZCB0Ym9vdF9zbGVlcCh1OCBzbGVlcF9zdGF0ZSwgdTMyIHBtMWFfY29udHJvbCwgdTMyIHBtMWJfY29udHJvbCk7CitleHRlcm4gc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0Ym9vdF9nZXRfZG1hcl90YWJsZSgKKwkJCQkgICAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmRtYXJfdGJsKTsKK2V4dGVybiBpbnQgdGJvb3RfZm9yY2VfaW9tbXUodm9pZCk7CisKKyNlbHNlCisKKyNkZWZpbmUgdGJvb3RfcHJvYmUoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGJvb3Rfc2h1dGRvd24oc2h1dGRvd25fdHlwZSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0Ym9vdF9zbGVlcChzbGVlcF9zdGF0ZSwgcG0xYV9jb250cm9sLCBwbTFiX2NvbnRyb2wpCVwKKwkJCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0Ym9vdF9nZXRfZG1hcl90YWJsZShkbWFyX3RibCkJKGRtYXJfdGJsKQorI2RlZmluZSB0Ym9vdF9mb3JjZV9pb21tdSgpCQkwCisKKyNlbmRpZiAvKiAhQ09ORklHX0lOVEVMX1RYVCAqLworCisjZW5kaWYgLyogX0xJTlVYX1RCT09UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGNwLmggYi9pbmNsdWRlL2xpbnV4L3RjcC5oCmluZGV4IDhhZmFjNzYuLjYxNzIzYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGNwLmgKKysrIGIvaW5jbHVkZS9saW51eC90Y3AuaApAQCAtMjMzLDcgKzIzMyw3IEBACiAJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrIAlyZXE7CiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKIAkvKiBPbmx5IHVzZWQgYnkgVENQIE1ENSBTaWduYXR1cmUgc28gZmFyLiAqLwotCXN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrX29wcwkqYWZfc3BlY2lmaWM7CisJY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9zcGVjaWZpYzsKICNlbmRpZgogCXUzMgkJCSAJcmN2X2lzbjsKIAl1MzIJCQkgCXNudF9pc247CkBAIC00MDEsOSArNDAxLDkgQEAKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiAvKiBUQ1AgQUYtU3BlY2lmaWMgcGFydHM7IG9ubHkgdXNlZCBieSBNRDUgU2lnbmF0dXJlIHN1cHBvcnQgc28gZmFyICovCi0Jc3RydWN0IHRjcF9zb2NrX2FmX29wcwkqYWZfc3BlY2lmaWM7CisJY29uc3Qgc3RydWN0IHRjcF9zb2NrX2FmX29wcwkqYWZfc3BlY2lmaWM7CiAKLS8qIFRDUCBNRDUgU2lnbmFndXJlIE9wdGlvbiBpbmZvcm1hdGlvbiAqLworLyogVENQIE1ENSBTaWduYXR1cmUgT3B0aW9uIGluZm9ybWF0aW9uICovCiAJc3RydWN0IHRjcF9tZDVzaWdfaW5mbwkqbWQ1c2lnX2luZm87CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpcGMuaCBiL2luY2x1ZGUvbGludXgvdGlwYy5oCmluZGV4IGJlYTQ2OTQuLjNkOTIzOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGlwYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGlwYy5oCkBAIC0yMDksNSArMjA5LDcgQEAKICNkZWZpbmUgVElQQ19TUkNfRFJPUFBBQkxFCTEyOAkvKiBEZWZhdWx0OiAwIChyZXNlbmQgY29uZ2VzdGVkIG1zZykgKi8KICNkZWZpbmUgVElQQ19ERVNUX0RST1BQQUJMRQkxMjkJLyogRGVmYXVsdDogYmFzZWQgb24gc29ja2V0IHR5cGUgKi8KICNkZWZpbmUgVElQQ19DT05OX1RJTUVPVVQJMTMwCS8qIERlZmF1bHQ6IDgwMDAgKG1zKSAgKi8KKyNkZWZpbmUgVElQQ19OT0RFX1JFQ1ZRX0RFUFRICTEzMQkvKiBEZWZhdWx0OiBub25lIChyZWFkIG9ubHkpICovCisjZGVmaW5lIFRJUENfU09DS19SRUNWUV9ERVBUSAkxMzIJLyogRGVmYXVsdDogbm9uZSAocmVhZCBvbmx5KSAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAppbmRleCA3NDAyYzFhLi44NWU4Y2Y3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCkBAIC04NSwyMCArODUsMjkgQEAKICNkZWZpbmUgQVJDSF9IQVNfU0NIRURfV0FLRV9JRExFCiAvKiBDb21tb24gdmFsdWVzIGZvciBTTVQgc2libGluZ3MgKi8KICNpZm5kZWYgU0RfU0lCTElOR19JTklUCi0jZGVmaW5lIFNEX1NJQkxJTkdfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXAotCS5taW5faW50ZXJ2YWwJCT0gMSwJCQlcCi0JLm1heF9pbnRlcnZhbAkJPSAyLAkJCVwKLQkuYnVzeV9mYWN0b3IJCT0gNjQsCQkJXAotCS5pbWJhbGFuY2VfcGN0CQk9IDExMCwJCQlcCi0JLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UJXAotCQkJCXwgU0RfQkFMQU5DRV9ORVdJRExFCVwKLQkJCQl8IFNEX0JBTEFOQ0VfRk9SSwlcCi0JCQkJfCBTRF9CQUxBTkNFX0VYRUMJXAotCQkJCXwgU0RfV0FLRV9BRkZJTkUJXAotCQkJCXwgU0RfV0FLRV9CQUxBTkNFCVwKLQkJCQl8IFNEX1NIQVJFX0NQVVBPV0VSLAlcCi0JLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJXAotCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQlcCisjZGVmaW5lIFNEX1NJQkxJTkdfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJCQlcCisJLm1pbl9pbnRlcnZhbAkJPSAxLAkJCQkJXAorCS5tYXhfaW50ZXJ2YWwJCT0gMiwJCQkJCVwKKwkuYnVzeV9mYWN0b3IJCT0gNjQsCQkJCQlcCisJLmltYmFsYW5jZV9wY3QJCT0gMTEwLAkJCQkJXAorCQkJCQkJCQkJXAorCS5mbGFncwkJCT0gMSpTRF9MT0FEX0JBTEFOQ0UJCQlcCisJCQkJfCAxKlNEX0JBTEFOQ0VfTkVXSURMRQkJCVwKKwkJCQl8IDEqU0RfQkFMQU5DRV9FWEVDCQkJXAorCQkJCXwgMSpTRF9CQUxBTkNFX0ZPUksJCQlcCisJCQkJfCAwKlNEX1dBS0VfSURMRQkJCVwKKwkJCQl8IDEqU0RfV0FLRV9BRkZJTkUJCQlcCisJCQkJfCAxKlNEX1dBS0VfQkFMQU5DRQkJCVwKKwkJCQl8IDEqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCisJCQkJfCAwKlNEX1BPV0VSU0FWSU5HU19CQUxBTkNFCQlcCisJCQkJfCAwKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKKwkJCQl8IDAqU0RfU0VSSUFMSVpFCQkJXAorCQkJCXwgMCpTRF9XQUtFX0lETEVfRkFSCQkJXAorCQkJCXwgMCpTRF9QUkVGRVJfU0lCTElORwkJCVwKKwkJCQksCQkJCQlcCisJLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJCQlcCisJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCQkJXAorCS5zbXRfZ2FpbgkJPSAxMTc4LAkvKiAxNSUgKi8JCQlcCiB9CiAjZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfU0NIRURfU01UICovCkBAIC0xMDYsNjkgKzExNSw5NCBAQAogI2lmZGVmIENPTkZJR19TQ0hFRF9NQwogLyogQ29tbW9uIHZhbHVlcyBmb3IgTUMgc2libGluZ3MuIGZvciBub3cgbW9zdGx5IGRlcml2ZWQgZnJvbSBTRF9DUFVfSU5JVCAqLwogI2lmbmRlZiBTRF9NQ19JTklUCi0jZGVmaW5lIFNEX01DX0lOSVQgKHN0cnVjdCBzY2hlZF9kb21haW4pIHsJCVwKLQkubWluX2ludGVydmFsCQk9IDEsCQkJXAotCS5tYXhfaW50ZXJ2YWwJCT0gNCwJCQlcCi0JLmJ1c3lfZmFjdG9yCQk9IDY0LAkJCVwKLQkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJXAotCS5jYWNoZV9uaWNlX3RyaWVzCT0gMSwJCQlcCi0JLmJ1c3lfaWR4CQk9IDIsCQkJXAotCS53YWtlX2lkeAkJPSAxLAkJCVwKLQkuZm9ya2V4ZWNfaWR4CQk9IDEsCQkJXAotCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKLQkJCQl8IFNEX0JBTEFOQ0VfRk9SSwlcCi0JCQkJfCBTRF9CQUxBTkNFX0VYRUMJXAotCQkJCXwgU0RfV0FLRV9BRkZJTkUJXAotCQkJCXwgU0RfV0FLRV9CQUxBTkNFCVwKLQkJCQl8IFNEX1NIQVJFX1BLR19SRVNPVVJDRVNcCi0JCQkJfCBzZF9iYWxhbmNlX2Zvcl9tY19wb3dlcigpXAotCQkJCXwgc2RfcG93ZXJfc2F2aW5nX2ZsYWdzKCksXAotCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCVwKLQkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJXAorI2RlZmluZSBTRF9NQ19JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQkJCVwKKwkubWluX2ludGVydmFsCQk9IDEsCQkJCQlcCisJLm1heF9pbnRlcnZhbAkJPSA0LAkJCQkJXAorCS5idXN5X2ZhY3RvcgkJPSA2NCwJCQkJCVwKKwkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJCQlcCisJLmNhY2hlX25pY2VfdHJpZXMJPSAxLAkJCQkJXAorCS5idXN5X2lkeAkJPSAyLAkJCQkJXAorCS53YWtlX2lkeAkJPSAxLAkJCQkJXAorCS5mb3JrZXhlY19pZHgJCT0gMSwJCQkJCVwKKwkJCQkJCQkJCVwKKwkuZmxhZ3MJCQk9IDEqU0RfTE9BRF9CQUxBTkNFCQkJXAorCQkJCXwgMSpTRF9CQUxBTkNFX05FV0lETEUJCQlcCisJCQkJfCAxKlNEX0JBTEFOQ0VfRVhFQwkJCVwKKwkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAorCQkJCXwgMSpTRF9XQUtFX0lETEUJCQlcCisJCQkJfCAxKlNEX1dBS0VfQUZGSU5FCQkJXAorCQkJCXwgMSpTRF9XQUtFX0JBTEFOQ0UJCQlcCisJCQkJfCAwKlNEX1NIQVJFX0NQVVBPV0VSCQkJXAorCQkJCXwgMSpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCQlcCisJCQkJfCAwKlNEX1NFUklBTElaRQkJCVwKKwkJCQl8IDAqU0RfV0FLRV9JRExFX0ZBUgkJCVwKKwkJCQl8IHNkX2JhbGFuY2VfZm9yX21jX3Bvd2VyKCkJCVwKKwkJCQl8IHNkX3Bvd2VyX3NhdmluZ19mbGFncygpCQlcCisJCQkJLAkJCQkJXAorCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCQkJXAorCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQkJCVwKIH0KICNlbmRpZgogI2VuZGlmIC8qIENPTkZJR19TQ0hFRF9NQyAqLwogCiAvKiBDb21tb24gdmFsdWVzIGZvciBDUFVzICovCiAjaWZuZGVmIFNEX0NQVV9JTklUCi0jZGVmaW5lIFNEX0NQVV9JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQlcCi0JLm1pbl9pbnRlcnZhbAkJPSAxLAkJCVwKLQkubWF4X2ludGVydmFsCQk9IDQsCQkJXAotCS5idXN5X2ZhY3RvcgkJPSA2NCwJCQlcCi0JLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCVwKLQkuY2FjaGVfbmljZV90cmllcwk9IDEsCQkJXAotCS5idXN5X2lkeAkJPSAyLAkJCVwKLQkuaWRsZV9pZHgJCT0gMSwJCQlcCi0JLm5ld2lkbGVfaWR4CQk9IDIsCQkJXAotCS53YWtlX2lkeAkJPSAxLAkJCVwKLQkuZm9ya2V4ZWNfaWR4CQk9IDEsCQkJXAotCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKLQkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCi0JCQkJfCBTRF9CQUxBTkNFX0ZPUksJXAotCQkJCXwgU0RfV0FLRV9BRkZJTkUJXAotCQkJCXwgU0RfV0FLRV9CQUxBTkNFCVwKLQkJCQl8IHNkX2JhbGFuY2VfZm9yX3BhY2thZ2VfcG93ZXIoKVwKLQkJCQl8IHNkX3Bvd2VyX3NhdmluZ19mbGFncygpLFwKLQkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCi0JLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKKyNkZWZpbmUgU0RfQ1BVX0lOSVQgKHN0cnVjdCBzY2hlZF9kb21haW4pIHsJCQkJXAorCS5taW5faW50ZXJ2YWwJCT0gMSwJCQkJCVwKKwkubWF4X2ludGVydmFsCQk9IDQsCQkJCQlcCisJLmJ1c3lfZmFjdG9yCQk9IDY0LAkJCQkJXAorCS5pbWJhbGFuY2VfcGN0CQk9IDEyNSwJCQkJCVwKKwkuY2FjaGVfbmljZV90cmllcwk9IDEsCQkJCQlcCisJLmJ1c3lfaWR4CQk9IDIsCQkJCQlcCisJLmlkbGVfaWR4CQk9IDEsCQkJCQlcCisJLm5ld2lkbGVfaWR4CQk9IDIsCQkJCQlcCisJLndha2VfaWR4CQk9IDEsCQkJCQlcCisJLmZvcmtleGVjX2lkeAkJPSAxLAkJCQkJXAorCQkJCQkJCQkJXAorCS5mbGFncwkJCT0gMSpTRF9MT0FEX0JBTEFOQ0UJCQlcCisJCQkJfCAxKlNEX0JBTEFOQ0VfTkVXSURMRQkJCVwKKwkJCQl8IDEqU0RfQkFMQU5DRV9FWEVDCQkJXAorCQkJCXwgMSpTRF9CQUxBTkNFX0ZPUksJCQlcCisJCQkJfCAxKlNEX1dBS0VfSURMRQkJCVwKKwkJCQl8IDAqU0RfV0FLRV9BRkZJTkUJCQlcCisJCQkJfCAxKlNEX1dBS0VfQkFMQU5DRQkJCVwKKwkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCisJCQkJfCAwKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKKwkJCQl8IDAqU0RfU0VSSUFMSVpFCQkJXAorCQkJCXwgMCpTRF9XQUtFX0lETEVfRkFSCQkJXAorCQkJCXwgc2RfYmFsYW5jZV9mb3JfcGFja2FnZV9wb3dlcigpCVwKKwkJCQl8IHNkX3Bvd2VyX3NhdmluZ19mbGFncygpCQlcCisJCQkJLAkJCQkJXAorCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCQkJXAorCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQkJCVwKIH0KICNlbmRpZgogCiAvKiBzY2hlZF9kb21haW5zIFNEX0FMTE5PREVTX0lOSVQgZm9yIE5VTUEgbWFjaGluZXMgKi8KLSNkZWZpbmUgU0RfQUxMTk9ERVNfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewlcCi0JLm1pbl9pbnRlcnZhbAkJPSA2NCwJCQlcCi0JLm1heF9pbnRlcnZhbAkJPSA2NCpudW1fb25saW5lX2NwdXMoKSwJXAotCS5idXN5X2ZhY3RvcgkJPSAxMjgsCQkJXAotCS5pbWJhbGFuY2VfcGN0CQk9IDEzMywJCQlcCi0JLmNhY2hlX25pY2VfdHJpZXMJPSAxLAkJCVwKLQkuYnVzeV9pZHgJCT0gMywJCQlcCi0JLmlkbGVfaWR4CQk9IDMsCQkJXAotCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKLQkJCQl8IFNEX0JBTEFOQ0VfTkVXSURMRQlcCi0JCQkJfCBTRF9XQUtFX0FGRklORQlcCi0JCQkJfCBTRF9TRVJJQUxJWkUsCQlcCi0JLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJXAotCS5iYWxhbmNlX2ludGVydmFsCT0gNjQsCQkJXAorI2RlZmluZSBTRF9BTExOT0RFU19JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQkJXAorCS5taW5faW50ZXJ2YWwJCT0gNjQsCQkJCQlcCisJLm1heF9pbnRlcnZhbAkJPSA2NCpudW1fb25saW5lX2NwdXMoKSwJCQlcCisJLmJ1c3lfZmFjdG9yCQk9IDEyOCwJCQkJCVwKKwkuaW1iYWxhbmNlX3BjdAkJPSAxMzMsCQkJCQlcCisJLmNhY2hlX25pY2VfdHJpZXMJPSAxLAkJCQkJXAorCS5idXN5X2lkeAkJPSAzLAkJCQkJXAorCS5pZGxlX2lkeAkJPSAzLAkJCQkJXAorCS5mbGFncwkJCT0gMSpTRF9MT0FEX0JBTEFOQ0UJCQlcCisJCQkJfCAxKlNEX0JBTEFOQ0VfTkVXSURMRQkJCVwKKwkJCQl8IDAqU0RfQkFMQU5DRV9FWEVDCQkJXAorCQkJCXwgMCpTRF9CQUxBTkNFX0ZPUksJCQlcCisJCQkJfCAwKlNEX1dBS0VfSURMRQkJCVwKKwkJCQl8IDEqU0RfV0FLRV9BRkZJTkUJCQlcCisJCQkJfCAwKlNEX1dBS0VfQkFMQU5DRQkJCVwKKwkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCisJCQkJfCAwKlNEX1BPV0VSU0FWSU5HU19CQUxBTkNFCQlcCisJCQkJfCAwKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKKwkJCQl8IDEqU0RfU0VSSUFMSVpFCQkJXAorCQkJCXwgMSpTRF9XQUtFX0lETEVfRkFSCQkJXAorCQkJCXwgMCpTRF9QUkVGRVJfU0lCTElORwkJCVwKKwkJCQksCQkJCQlcCisJLmxhc3RfYmFsYW5jZQkJPSBqaWZmaWVzLAkJCQlcCisJLmJhbGFuY2VfaW50ZXJ2YWwJPSA2NCwJCQkJCVwKIH0KIAogI2lmZGVmIENPTkZJR19OVU1BCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCmluZGV4IGI5ZGM0Y2EuLjYzYTNmN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCkBAIC0yMyw2ICsyMyw4IEBACiBzdHJ1Y3QgdHJhY2Vwb2ludCB7CiAJY29uc3QgY2hhciAqbmFtZTsJCS8qIFRyYWNlcG9pbnQgbmFtZSAqLwogCWludCBzdGF0ZTsJCQkvKiBTdGF0ZS4gKi8KKwl2b2lkICgqcmVnZnVuYykodm9pZCk7CisJdm9pZCAoKnVucmVnZnVuYykodm9pZCk7CiAJdm9pZCAqKmZ1bmNzOwogfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDMyKSkpOwkJLyoKIAkJCQkJICogQWxpZ25lZCBvbiAzMiBieXRlcyBiZWNhdXNlIGl0IGlzCkBAIC03OCwxMiArODAsMTYgQEAKIAkJcmV0dXJuIHRyYWNlcG9pbnRfcHJvYmVfdW5yZWdpc3RlcigjbmFtZSwgKHZvaWQgKilwcm9iZSk7XAogCX0KIAotI2RlZmluZSBERUZJTkVfVFJBQ0UobmFtZSkJCQkJCQlcCisKKyNkZWZpbmUgREVGSU5FX1RSQUNFX0ZOKG5hbWUsIHJlZywgdW5yZWcpCQkJCVwKIAlzdGF0aWMgY29uc3QgY2hhciBfX3Rwc3RydGFiXyMjbmFtZVtdCQkJCVwKIAlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzX3N0cmluZ3MiKSkpID0gI25hbWU7CVwKIAlzdHJ1Y3QgdHJhY2Vwb2ludCBfX3RyYWNlcG9pbnRfIyNuYW1lCQkJCVwKIAlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzIiksIGFsaWduZWQoMzIpKSkgPQlcCi0JCXsgX190cHN0cnRhYl8jI25hbWUsIDAsIE5VTEwgfQorCQl7IF9fdHBzdHJ0YWJfIyNuYW1lLCAwLCByZWcsIHVucmVnLCBOVUxMIH0KKworI2RlZmluZSBERUZJTkVfVFJBQ0UobmFtZSkJCQkJCQlcCisJREVGSU5FX1RSQUNFX0ZOKG5hbWUsIE5VTEwsIE5VTEwpOwogCiAjZGVmaW5lIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwobmFtZSkJCQkJXAogCUVYUE9SVF9TWU1CT0xfR1BMKF9fdHJhY2Vwb2ludF8jI25hbWUpCkBAIC0xMDgsNiArMTE0LDcgQEAKIAkJcmV0dXJuIC1FTk9TWVM7CQkJCQkJXAogCX0KIAorI2RlZmluZSBERUZJTkVfVFJBQ0VfRk4obmFtZSwgcmVnLCB1bnJlZykKICNkZWZpbmUgREVGSU5FX1RSQUNFKG5hbWUpCiAjZGVmaW5lIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwobmFtZSkKICNkZWZpbmUgRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKG5hbWUpCkBAIC0xNTgsNiArMTY1LDE1IEBACiAKICNkZWZpbmUgUEFSQU1TKGFyZ3MuLi4pIGFyZ3MKIAorI2VuZGlmIC8qIF9MSU5VWF9UUkFDRVBPSU5UX0ggKi8KKworLyoKKyAqIE5vdGU6IHdlIGtlZXAgdGhlIFRSQUNFX0VWRU5UIG91dHNpZGUgdGhlIGluY2x1ZGUgZmlsZSBpZmRlZiBwcm90ZWN0aW9uLgorICogIFRoaXMgaXMgZHVlIHRvIHRoZSB3YXkgdHJhY2UgZXZlbnRzIHdvcmsuIElmIGEgZmlsZSBpbmNsdWRlcyB0d28KKyAqICB0cmFjZSBldmVudCBoZWFkZXJzIHVuZGVyIG9uZSAiQ1JFQVRFX1RSQUNFX1BPSU5UUyIgdGhlIGZpcnN0IGluY2x1ZGUKKyAqICB3aWxsIG92ZXJyaWRlIHRoZSBUUkFDRV9FVkVOVCBhbmQgYnJlYWsgdGhlIHNlY29uZCBpbmNsdWRlLgorICovCisKICNpZm5kZWYgVFJBQ0VfRVZFTlQKIC8qCiAgKiBGb3IgdXNlIHdpdGggdGhlIFRSQUNFX0VWRU5UIG1hY3JvOgpAQCAtMjU5LDEwICsyNzUsMTUgQEAKICAqIGNhbiBhbHNvIGJ5IHVzZWQgYnkgZ2VuZXJpYyBpbnN0cnVtZW50YXRpb24gbGlrZSBTeXN0ZW1UYXApLCBhbmQKICAqIGl0IGlzIGFsc28gdXNlZCB0byBleHBvc2UgYSBzdHJ1Y3R1cmVkIHRyYWNlIHJlY29yZCBpbgogICogL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvLgorICoKKyAqIEEgc2V0IG9mICh1bilyZWdpc3RyYXRpb24gZnVuY3Rpb25zIGNhbiBiZSBwYXNzZWQgdG8gdGhlIHZhcmlhbnQKKyAqIFRSQUNFX0VWRU5UX0ZOIHRvIHBlcmZvcm0gYW55ICh1bilyZWdpc3RyYXRpb24gd29yay4KICAqLwogCiAjZGVmaW5lIFRSQUNFX0VWRU5UKG5hbWUsIHByb3RvLCBhcmdzLCBzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKIAlERUNMQVJFX1RSQUNFKG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKLSNlbmRpZgorI2RlZmluZSBUUkFDRV9FVkVOVF9GTihuYW1lLCBwcm90bywgYXJncywgc3RydWN0LAkJXAorCQlhc3NpZ24sIHByaW50LCByZWcsIHVucmVnKQkJCVwKKwlERUNMQVJFX1RSQUNFKG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKIAotI2VuZGlmCisjZW5kaWYgLyogaWZkZWYgVFJBQ0VfRVZFTlQgKHNlZSBub3RlIGFib3ZlKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHkuaCBiL2luY2x1ZGUvbGludXgvdHR5LmgKaW5kZXggZThjNmM5MS4uYTkxNmEzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eS5oCkBAIC0yMyw3ICsyMyw3IEBACiAgKi8KICNkZWZpbmUgTlJfVU5JWDk4X1BUWV9ERUZBVUxUCTQwOTYgICAgICAvKiBEZWZhdWx0IG1heGltdW0gZm9yIFVuaXg5OCBwdHlzICovCiAjZGVmaW5lIE5SX1VOSVg5OF9QVFlfTUFYCSgxIDw8IE1JTk9SQklUUykgLyogQWJzb2x1dGUgbGltaXQgKi8KLSNkZWZpbmUgTlJfTERJU0NTCQkxOQorI2RlZmluZSBOUl9MRElTQ1MJCTIwCiAKIC8qIGxpbmUgZGlzY2lwbGluZXMgKi8KICNkZWZpbmUgTl9UVFkJCTAKQEAgLTQ3LDYgKzQ3LDggQEAKICNkZWZpbmUgTl9TTENBTgkJMTcJLyogU2VyaWFsIC8gVVNCIHNlcmlhbCBDQU4gQWRhcHRvcnMgKi8KICNkZWZpbmUgTl9QUFMJCTE4CS8qIFB1bHNlIHBlciBTZWNvbmQgKi8KIAorI2RlZmluZSBOX1YyNTMJCTE5CS8qIENvZGVjIGNvbnRyb2wgb3ZlciB2b2ljZSBtb2RlbSAqLworCiAvKgogICogVGhpcyBjaGFyYWN0ZXIgaXMgdGhlIHNhbWUgYXMgX1BPU0lYX1ZESVNBQkxFOiBpdCBjYW5ub3QgYmUgdXNlZCBhcwogICogYSBjX2NjW10gY2hhcmFjdGVyLCBidXQgaW5kaWNhdGVzIHRoYXQgYSBwYXJ0aWN1bGFyIHNwZWNpYWwgY2hhcmFjdGVyCkBAIC01MTcsMTAgKzUxOSw2IEBACiAKIGV4dGVybiBpbnQgcGN4ZV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKIAotLyogcHJpbnRrLmMgKi8KLQotZXh0ZXJuIHZvaWQgY29uc29sZV9wcmludChjb25zdCBjaGFyICopOwotCiAvKiB2dC5jICovCiAKIGV4dGVybiBpbnQgdnRfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmgKaW5kZXggMzc4MzZiOS4uMWVmMWViYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivcm5kaXNfaG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3JuZGlzX2hvc3QuaApAQCAtNzAsMTIgKzcwLDEzIEBACiAjZGVmaW5lIFJORElTX01TR19LRUVQQUxJVkVfQwkoUk5ESVNfTVNHX0tFRVBBTElWRXxSTkRJU19NU0dfQ09NUExFVElPTikKIAogLyogY29kZXMgZm9yICJzdGF0dXMiIGZpZWxkIG9mIGNvbXBsZXRpb24gbWVzc2FnZXMgKi8KLSNkZWZpbmUJUk5ESVNfU1RBVFVTX1NVQ0NFU1MJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lCVJORElTX1NUQVRVU19GQUlMVVJFCQljcHVfdG9fbGUzMigweGMwMDAwMDAxKQotI2RlZmluZQlSTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBCWNwdV90b19sZTMyKDB4YzAwMTAwMTUpCi0jZGVmaW5lCVJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVECWNwdV90b19sZTMyKDB4YzAwMDAwYmIpCi0jZGVmaW5lCVJORElTX1NUQVRVU19NRURJQV9DT05ORUNUCWNwdV90b19sZTMyKDB4NDAwMTAwMGIpCi0jZGVmaW5lCVJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUCWNwdV90b19sZTMyKDB4NDAwMTAwMGMpCisjZGVmaW5lCVJORElTX1NUQVRVU19TVUNDRVNTCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX0ZBSUxVUkUJCQljcHVfdG9fbGUzMigweGMwMDAwMDAxKQorI2RlZmluZQlSTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBCQljcHVfdG9fbGUzMigweGMwMDEwMDE1KQorI2RlZmluZQlSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRAkJY3B1X3RvX2xlMzIoMHhjMDAwMDBiYikKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QJCWNwdV90b19sZTMyKDB4NDAwMTAwMGIpCisjZGVmaW5lCVJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUCQljcHVfdG9fbGUzMigweDQwMDEwMDBjKQorI2RlZmluZQlSTkRJU19TVEFUVVNfTUVESUFfU1BFQ0lGSUNfSU5ESUNBVElPTgljcHVfdG9fbGUzMigweDQwMDEwMDEyKQogCiAvKiBjb2RlcyBmb3IgT0lEX0dFTl9QSFlTSUNBTF9NRURJVU0gKi8KICNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1VOU1BFQ0lGSUVECWNwdV90b19sZTMyKDB4MDAwMDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaCBiL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCmluZGV4IDMxMGUxOGEuLmJiNjllMjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCkBAIC01Myw2ICs1Myw3IEBACiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlyeHE7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAl0eHE7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlkb25lOworCXN0cnVjdCBza19idWZmX2hlYWQJcnhxX3BhdXNlOwogCXN0cnVjdCB1cmIJCSppbnRlcnJ1cHQ7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CWJoOwogCkBAIC02Myw2ICs2NCw3IEBACiAjCQlkZWZpbmUgRVZFTlRfUlhfTUVNT1JZCTIKICMJCWRlZmluZSBFVkVOVF9TVFNfU1BMSVQJMwogIwkJZGVmaW5lIEVWRU5UX0xJTktfUkVTRVQJNAorIwkJZGVmaW5lIEVWRU5UX1JYX1BBVVNFRAk1CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXJfb2Yoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC04Niw2ICs4OCw3IEBACiAKICNkZWZpbmUgRkxBR19GUkFNSU5HX0FYIDB4MDA0MAkJLyogQVg4ODc3Mi8xNzggcGFja2V0cyAqLwogI2RlZmluZSBGTEFHX1dMQU4JMHgwMDgwCQkvKiB1c2UgIndsYW4lZCIgbmFtZXMgKi8KKyNkZWZpbmUgRkxBR19BVk9JRF9VTkxJTktfVVJCUyAweDAxMDAJLyogZG9uJ3QgdW5saW5rIHVyYnMgYXQgdXNibmV0X3N0b3AoKSAqLwogCiAKIAkvKiBpbml0IGRldmljZSAuLi4gY2FuIHNsZWVwLCBvciBjYXVzZSBwcm9iZSgpIGZhaWx1cmUgKi8KQEAgLTk3LDYgKzEwMCw5IEBACiAJLyogcmVzZXQgZGV2aWNlIC4uLiBjYW4gc2xlZXAgKi8KIAlpbnQJKCpyZXNldCkoc3RydWN0IHVzYm5ldCAqKTsKIAorCS8qIHN0b3AgZGV2aWNlIC4uLiBjYW4gc2xlZXAgKi8KKwlpbnQJKCpzdG9wKShzdHJ1Y3QgdXNibmV0ICopOworCiAJLyogc2VlIGlmIHBlZXIgaXMgY29ubmVjdGVkIC4uLiBjYW4gc2xlZXAgKi8KIAlpbnQJKCpjaGVja19jb25uZWN0KShzdHJ1Y3QgdXNibmV0ICopOwogCkBAIC0xMTgsOSArMTI0LDggQEAKIAkgKiByaWdodCBhZnRlciBtaW5pZHJpdmVyIGhhdmUgaW5pdGlhbGl6ZWQgaGFyZHdhcmUuICovCiAJaW50CSgqZWFybHlfaW5pdCkoc3RydWN0IHVzYm5ldCAqZGV2KTsKIAotCS8qIGNhbGxlZCBieSBtaW5pZHJpdmVyIHdoZW4gbGluayBzdGF0ZSBjaGFuZ2VzLCBzdGF0ZTogMD1kaXNjb25uZWN0LAotCSAqIDE9Y29ubmVjdCAqLwotCXZvaWQJKCpsaW5rX2NoYW5nZSkoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgc3RhdGUpOworCS8qIGNhbGxlZCBieSBtaW5pZHJpdmVyIHdoZW4gcmVjZWl2aW5nIGluZGljYXRpb24gKi8KKwl2b2lkCSgqaW5kaWNhdGlvbikoc3RydWN0IHVzYm5ldCAqZGV2LCB2b2lkICppbmQsIGludCBpbmRsZW4pOwogCiAJLyogZm9yIG5ldyBkZXZpY2VzLCB1c2UgdGhlIGRlc2NyaXB0b3ItcmVhZGluZyBjb2RlIGluc3RlYWQgKi8KIAlpbnQJCWluOwkJLyogcnggZW5kcG9pbnQgKi8KQEAgLTE3Nyw3ICsxODIsOCBAQAogCiBleHRlcm4gaW50IHVzYm5ldF9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKIGV4dGVybiBpbnQgdXNibmV0X3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpOwotZXh0ZXJuIGludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CitleHRlcm4gbmV0ZGV2X3R4X3QgdXNibmV0X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CiBleHRlcm4gdm9pZCB1c2JuZXRfdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CiBleHRlcm4gaW50IHVzYm5ldF9jaGFuZ2VfbXR1IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgbmV3X210dSk7CiAKQEAgLTE4Nyw2ICsxOTMsMTAgQEAKIGV4dGVybiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuIChzdHJ1Y3QgdXNibmV0ICosIHN0cnVjdCBza19idWZmICopOwogZXh0ZXJuIHZvaWQgdXNibmV0X3VubGlua19yeF91cmJzKHN0cnVjdCB1c2JuZXQgKik7CiAKK2V4dGVybiB2b2lkIHVzYm5ldF9wYXVzZV9yeChzdHJ1Y3QgdXNibmV0ICopOworZXh0ZXJuIHZvaWQgdXNibmV0X3Jlc3VtZV9yeChzdHJ1Y3QgdXNibmV0ICopOworZXh0ZXJuIHZvaWQgdXNibmV0X3B1cmdlX3BhdXNlZF9yeHEoc3RydWN0IHVzYm5ldCAqKTsKKwogZXh0ZXJuIGludCB1c2JuZXRfZ2V0X3NldHRpbmdzIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCk7CiBleHRlcm4gaW50IHVzYm5ldF9zZXRfc2V0dGluZ3MgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKTsKIGV4dGVybiB1MzIgdXNibmV0X2dldF9saW5rIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3ZpZGVvLmggYi9pbmNsdWRlL2xpbnV4L3VzYi92aWRlby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNDM2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi92aWRlby5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogVVNCIFZpZGVvIENsYXNzIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QHNreW5ldC5iZT4KKyAqCisgKiBUaGlzIGZpbGUgaG9sZHMgVVNCIGNvbnN0YW50cyBhbmQgc3RydWN0dXJlcyBkZWZpbmVkIGJ5IHRoZSBVU0IgRGV2aWNlCisgKiBDbGFzcyBEZWZpbml0aW9uIGZvciBWaWRlbyBEZXZpY2VzLiBVbmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZCwgY29tbWVudHMKKyAqIGJlbG93IHJlZmVyZW5jZSByZWxldmFudCBzZWN0aW9ucyBvZiB0aGUgVVNCIFZpZGVvIENsYXNzIDEuMSBzcGVjaWZpY2F0aW9uCisgKiBhdmFpbGFibGUgYXQKKyAqCisgKiBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kZXZjbGFzc19kb2NzL1VTQl9WaWRlb19DbGFzc18xXzEuemlwCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9WSURFT19ICisjZGVmaW5lIF9fTElOVVhfVVNCX1ZJREVPX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVVkMgY29uc3RhbnRzCisgKi8KKworLyogQS4yLiBWaWRlbyBJbnRlcmZhY2UgU3ViY2xhc3MgQ29kZXMgKi8KKyNkZWZpbmUgVVZDX1NDX1VOREVGSU5FRAkJCQkweDAwCisjZGVmaW5lIFVWQ19TQ19WSURFT0NPTlRST0wJCQkJMHgwMQorI2RlZmluZSBVVkNfU0NfVklERU9TVFJFQU1JTkcJCQkJMHgwMgorI2RlZmluZSBVVkNfU0NfVklERU9fSU5URVJGQUNFX0NPTExFQ1RJT04JCTB4MDMKKworLyogQS4zLiBWaWRlbyBJbnRlcmZhY2UgUHJvdG9jb2wgQ29kZXMgKi8KKyNkZWZpbmUgVVZDX1BDX1BST1RPQ09MX1VOREVGSU5FRAkJCTB4MDAKKworLyogQS41LiBWaWRlbyBDbGFzcy1TcGVjaWZpYyBWQyBJbnRlcmZhY2UgRGVzY3JpcHRvciBTdWJ0eXBlcyAqLworI2RlZmluZSBVVkNfVkNfREVTQ1JJUFRPUl9VTkRFRklORUQJCQkweDAwCisjZGVmaW5lIFVWQ19WQ19IRUFERVIJCQkJCTB4MDEKKyNkZWZpbmUgVVZDX1ZDX0lOUFVUX1RFUk1JTkFMCQkJCTB4MDIKKyNkZWZpbmUgVVZDX1ZDX09VVFBVVF9URVJNSU5BTAkJCQkweDAzCisjZGVmaW5lIFVWQ19WQ19TRUxFQ1RPUl9VTklUCQkJCTB4MDQKKyNkZWZpbmUgVVZDX1ZDX1BST0NFU1NJTkdfVU5JVAkJCQkweDA1CisjZGVmaW5lIFVWQ19WQ19FWFRFTlNJT05fVU5JVAkJCQkweDA2CisKKy8qIEEuNi4gVmlkZW8gQ2xhc3MtU3BlY2lmaWMgVlMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKi8KKyNkZWZpbmUgVVZDX1ZTX1VOREVGSU5FRAkJCQkweDAwCisjZGVmaW5lIFVWQ19WU19JTlBVVF9IRUFERVIJCQkJMHgwMQorI2RlZmluZSBVVkNfVlNfT1VUUFVUX0hFQURFUgkJCQkweDAyCisjZGVmaW5lIFVWQ19WU19TVElMTF9JTUFHRV9GUkFNRQkJCTB4MDMKKyNkZWZpbmUgVVZDX1ZTX0ZPUk1BVF9VTkNPTVBSRVNTRUQJCQkweDA0CisjZGVmaW5lIFVWQ19WU19GUkFNRV9VTkNPTVBSRVNTRUQJCQkweDA1CisjZGVmaW5lIFVWQ19WU19GT1JNQVRfTUpQRUcJCQkJMHgwNgorI2RlZmluZSBVVkNfVlNfRlJBTUVfTUpQRUcJCQkJMHgwNworI2RlZmluZSBVVkNfVlNfRk9STUFUX01QRUcyVFMJCQkJMHgwYQorI2RlZmluZSBVVkNfVlNfRk9STUFUX0RWCQkJCTB4MGMKKyNkZWZpbmUgVVZDX1ZTX0NPTE9SRk9STUFUCQkJCTB4MGQKKyNkZWZpbmUgVVZDX1ZTX0ZPUk1BVF9GUkFNRV9CQVNFRAkJCTB4MTAKKyNkZWZpbmUgVVZDX1ZTX0ZSQU1FX0ZSQU1FX0JBU0VECQkJMHgxMQorI2RlZmluZSBVVkNfVlNfRk9STUFUX1NUUkVBTV9CQVNFRAkJCTB4MTIKKworLyogQS43LiBWaWRlbyBDbGFzcy1TcGVjaWZpYyBFbmRwb2ludCBEZXNjcmlwdG9yIFN1YnR5cGVzICovCisjZGVmaW5lIFVWQ19FUF9VTkRFRklORUQJCQkJMHgwMAorI2RlZmluZSBVVkNfRVBfR0VORVJBTAkJCQkJMHgwMQorI2RlZmluZSBVVkNfRVBfRU5EUE9JTlQJCQkJCTB4MDIKKyNkZWZpbmUgVVZDX0VQX0lOVEVSUlVQVAkJCQkweDAzCisKKy8qIEEuOC4gVmlkZW8gQ2xhc3MtU3BlY2lmaWMgUmVxdWVzdCBDb2RlcyAqLworI2RlZmluZSBVVkNfUkNfVU5ERUZJTkVECQkJCTB4MDAKKyNkZWZpbmUgVVZDX1NFVF9DVVIJCQkJCTB4MDEKKyNkZWZpbmUgVVZDX0dFVF9DVVIJCQkJCTB4ODEKKyNkZWZpbmUgVVZDX0dFVF9NSU4JCQkJCTB4ODIKKyNkZWZpbmUgVVZDX0dFVF9NQVgJCQkJCTB4ODMKKyNkZWZpbmUgVVZDX0dFVF9SRVMJCQkJCTB4ODQKKyNkZWZpbmUgVVZDX0dFVF9MRU4JCQkJCTB4ODUKKyNkZWZpbmUgVVZDX0dFVF9JTkZPCQkJCQkweDg2CisjZGVmaW5lIFVWQ19HRVRfREVGCQkJCQkweDg3CisKKy8qIEEuOS4xLiBWaWRlb0NvbnRyb2wgSW50ZXJmYWNlIENvbnRyb2wgU2VsZWN0b3JzICovCisjZGVmaW5lIFVWQ19WQ19DT05UUk9MX1VOREVGSU5FRAkJCTB4MDAKKyNkZWZpbmUgVVZDX1ZDX1ZJREVPX1BPV0VSX01PREVfQ09OVFJPTAkJCTB4MDEKKyNkZWZpbmUgVVZDX1ZDX1JFUVVFU1RfRVJST1JfQ09ERV9DT05UUk9MCQkweDAyCisKKy8qIEEuOS4yLiBUZXJtaW5hbCBDb250cm9sIFNlbGVjdG9ycyAqLworI2RlZmluZSBVVkNfVEVfQ09OVFJPTF9VTkRFRklORUQJCQkweDAwCisKKy8qIEEuOS4zLiBTZWxlY3RvciBVbml0IENvbnRyb2wgU2VsZWN0b3JzICovCisjZGVmaW5lIFVWQ19TVV9DT05UUk9MX1VOREVGSU5FRAkJCTB4MDAKKyNkZWZpbmUgVVZDX1NVX0lOUFVUX1NFTEVDVF9DT05UUk9MCQkJMHgwMQorCisvKiBBLjkuNC4gQ2FtZXJhIFRlcm1pbmFsIENvbnRyb2wgU2VsZWN0b3JzICovCisjZGVmaW5lIFVWQ19DVF9DT05UUk9MX1VOREVGSU5FRAkJCTB4MDAKKyNkZWZpbmUgVVZDX0NUX1NDQU5OSU5HX01PREVfQ09OVFJPTAkJCTB4MDEKKyNkZWZpbmUgVVZDX0NUX0FFX01PREVfQ09OVFJPTAkJCQkweDAyCisjZGVmaW5lIFVWQ19DVF9BRV9QUklPUklUWV9DT05UUk9MCQkJMHgwMworI2RlZmluZSBVVkNfQ1RfRVhQT1NVUkVfVElNRV9BQlNPTFVURV9DT05UUk9MCQkweDA0CisjZGVmaW5lIFVWQ19DVF9FWFBPU1VSRV9USU1FX1JFTEFUSVZFX0NPTlRST0wJCTB4MDUKKyNkZWZpbmUgVVZDX0NUX0ZPQ1VTX0FCU09MVVRFX0NPTlRST0wJCQkweDA2CisjZGVmaW5lIFVWQ19DVF9GT0NVU19SRUxBVElWRV9DT05UUk9MCQkJMHgwNworI2RlZmluZSBVVkNfQ1RfRk9DVVNfQVVUT19DT05UUk9MCQkJMHgwOAorI2RlZmluZSBVVkNfQ1RfSVJJU19BQlNPTFVURV9DT05UUk9MCQkJMHgwOQorI2RlZmluZSBVVkNfQ1RfSVJJU19SRUxBVElWRV9DT05UUk9MCQkJMHgwYQorI2RlZmluZSBVVkNfQ1RfWk9PTV9BQlNPTFVURV9DT05UUk9MCQkJMHgwYgorI2RlZmluZSBVVkNfQ1RfWk9PTV9SRUxBVElWRV9DT05UUk9MCQkJMHgwYworI2RlZmluZSBVVkNfQ1RfUEFOVElMVF9BQlNPTFVURV9DT05UUk9MCQkJMHgwZAorI2RlZmluZSBVVkNfQ1RfUEFOVElMVF9SRUxBVElWRV9DT05UUk9MCQkJMHgwZQorI2RlZmluZSBVVkNfQ1RfUk9MTF9BQlNPTFVURV9DT05UUk9MCQkJMHgwZgorI2RlZmluZSBVVkNfQ1RfUk9MTF9SRUxBVElWRV9DT05UUk9MCQkJMHgxMAorI2RlZmluZSBVVkNfQ1RfUFJJVkFDWV9DT05UUk9MCQkJCTB4MTEKKworLyogQS45LjUuIFByb2Nlc3NpbmcgVW5pdCBDb250cm9sIFNlbGVjdG9ycyAqLworI2RlZmluZSBVVkNfUFVfQ09OVFJPTF9VTkRFRklORUQJCQkweDAwCisjZGVmaW5lIFVWQ19QVV9CQUNLTElHSFRfQ09NUEVOU0FUSU9OX0NPTlRST0wJCTB4MDEKKyNkZWZpbmUgVVZDX1BVX0JSSUdIVE5FU1NfQ09OVFJPTAkJCTB4MDIKKyNkZWZpbmUgVVZDX1BVX0NPTlRSQVNUX0NPTlRST0wJCQkJMHgwMworI2RlZmluZSBVVkNfUFVfR0FJTl9DT05UUk9MCQkJCTB4MDQKKyNkZWZpbmUgVVZDX1BVX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0NPTlRST0wJCTB4MDUKKyNkZWZpbmUgVVZDX1BVX0hVRV9DT05UUk9MCQkJCTB4MDYKKyNkZWZpbmUgVVZDX1BVX1NBVFVSQVRJT05fQ09OVFJPTAkJCTB4MDcKKyNkZWZpbmUgVVZDX1BVX1NIQVJQTkVTU19DT05UUk9MCQkJMHgwOAorI2RlZmluZSBVVkNfUFVfR0FNTUFfQ09OVFJPTAkJCQkweDA5CisjZGVmaW5lIFVWQ19QVV9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFX0NPTlRST0wJMHgwYQorI2RlZmluZSBVVkNfUFVfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRV9BVVRPX0NPTlRST0wJMHgwYgorI2RlZmluZSBVVkNfUFVfV0hJVEVfQkFMQU5DRV9DT01QT05FTlRfQ09OVFJPTAkJMHgwYworI2RlZmluZSBVVkNfUFVfV0hJVEVfQkFMQU5DRV9DT01QT05FTlRfQVVUT19DT05UUk9MCTB4MGQKKyNkZWZpbmUgVVZDX1BVX0RJR0lUQUxfTVVMVElQTElFUl9DT05UUk9MCQkweDBlCisjZGVmaW5lIFVWQ19QVV9ESUdJVEFMX01VTFRJUExJRVJfTElNSVRfQ09OVFJPTAkJMHgwZgorI2RlZmluZSBVVkNfUFVfSFVFX0FVVE9fQ09OVFJPTAkJCQkweDEwCisjZGVmaW5lIFVWQ19QVV9BTkFMT0dfVklERU9fU1RBTkRBUkRfQ09OVFJPTAkJMHgxMQorI2RlZmluZSBVVkNfUFVfQU5BTE9HX0xPQ0tfU1RBVFVTX0NPTlRST0wJCTB4MTIKKworLyogQS45LjcuIFZpZGVvU3RyZWFtaW5nIEludGVyZmFjZSBDb250cm9sIFNlbGVjdG9ycyAqLworI2RlZmluZSBVVkNfVlNfQ09OVFJPTF9VTkRFRklORUQJCQkweDAwCisjZGVmaW5lIFVWQ19WU19QUk9CRV9DT05UUk9MCQkJCTB4MDEKKyNkZWZpbmUgVVZDX1ZTX0NPTU1JVF9DT05UUk9MCQkJCTB4MDIKKyNkZWZpbmUgVVZDX1ZTX1NUSUxMX1BST0JFX0NPTlRST0wJCQkweDAzCisjZGVmaW5lIFVWQ19WU19TVElMTF9DT01NSVRfQ09OVFJPTAkJCTB4MDQKKyNkZWZpbmUgVVZDX1ZTX1NUSUxMX0lNQUdFX1RSSUdHRVJfQ09OVFJPTAkJMHgwNQorI2RlZmluZSBVVkNfVlNfU1RSRUFNX0VSUk9SX0NPREVfQ09OVFJPTAkJMHgwNgorI2RlZmluZSBVVkNfVlNfR0VORVJBVEVfS0VZX0ZSQU1FX0NPTlRST0wJCTB4MDcKKyNkZWZpbmUgVVZDX1ZTX1VQREFURV9GUkFNRV9TRUdNRU5UX0NPTlRST0wJCTB4MDgKKyNkZWZpbmUgVVZDX1ZTX1NZTkNfREVMQVlfQ09OVFJPTAkJCTB4MDkKKworLyogQi4xLiBVU0IgVGVybWluYWwgVHlwZXMgKi8KKyNkZWZpbmUgVVZDX1RUX1ZFTkRPUl9TUEVDSUZJQwkJCQkweDAxMDAKKyNkZWZpbmUgVVZDX1RUX1NUUkVBTUlORwkJCQkweDAxMDEKKworLyogQi4yLiBJbnB1dCBUZXJtaW5hbCBUeXBlcyAqLworI2RlZmluZSBVVkNfSVRUX1ZFTkRPUl9TUEVDSUZJQwkJCQkweDAyMDAKKyNkZWZpbmUgVVZDX0lUVF9DQU1FUkEJCQkJCTB4MDIwMQorI2RlZmluZSBVVkNfSVRUX01FRElBX1RSQU5TUE9SVF9JTlBVVAkJCTB4MDIwMgorCisvKiBCLjMuIE91dHB1dCBUZXJtaW5hbCBUeXBlcyAqLworI2RlZmluZSBVVkNfT1RUX1ZFTkRPUl9TUEVDSUZJQwkJCQkweDAzMDAKKyNkZWZpbmUgVVZDX09UVF9ESVNQTEFZCQkJCQkweDAzMDEKKyNkZWZpbmUgVVZDX09UVF9NRURJQV9UUkFOU1BPUlRfT1VUUFVUCQkJMHgwMzAyCisKKy8qIEIuNC4gRXh0ZXJuYWwgVGVybWluYWwgVHlwZXMgKi8KKyNkZWZpbmUgVVZDX0VYVEVSTkFMX1ZFTkRPUl9TUEVDSUZJQwkJCTB4MDQwMAorI2RlZmluZSBVVkNfQ09NUE9TSVRFX0NPTk5FQ1RPUgkJCQkweDA0MDEKKyNkZWZpbmUgVVZDX1NWSURFT19DT05ORUNUT1IJCQkJMHgwNDAyCisjZGVmaW5lIFVWQ19DT01QT05FTlRfQ09OTkVDVE9SCQkJCTB4MDQwMworCisvKiAyLjQuMi4yLiBTdGF0dXMgUGFja2V0IFR5cGUgKi8KKyNkZWZpbmUgVVZDX1NUQVRVU19UWVBFX0NPTlRST0wJCQkJMQorI2RlZmluZSBVVkNfU1RBVFVTX1RZUEVfU1RSRUFNSU5HCQkJMgorCisjZW5kaWYgLyogX19MSU5VWF9VU0JfVklERU9fSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCA3NGYxNjg3Li4zNjg5ZDdkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCkBAIC0xNjcsNiArMTY3LDcgQEAKIAlWNEwyX0NUUkxfVFlQRV9CVVRUT04JICAgICA9IDQsCiAJVjRMMl9DVFJMX1RZUEVfSU5URUdFUjY0ICAgICA9IDUsCiAJVjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUyAgICA9IDYsCisJVjRMMl9DVFJMX1RZUEVfU1RSSU5HICAgICAgICA9IDcsCiB9OwogCiBlbnVtIHY0bDJfdHVuZXJfdHlwZSB7CkBAIC0yNTIsMTAgKzI1MywxMiBAQAogI2RlZmluZSBWNEwyX0NBUF9SRFNfQ0FQVFVSRQkJMHgwMDAwMDEwMCAgLyogUkRTIGRhdGEgY2FwdHVyZSAqLwogI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVVRQVVRfT1ZFUkxBWQkweDAwMDAwMjAwICAvKiBDYW4gZG8gdmlkZW8gb3V0cHV0IG92ZXJsYXkgKi8KICNkZWZpbmUgVjRMMl9DQVBfSFdfRlJFUV9TRUVLCQkweDAwMDAwNDAwICAvKiBDYW4gZG8gaGFyZHdhcmUgZnJlcXVlbmN5IHNlZWsgICovCisjZGVmaW5lIFY0TDJfQ0FQX1JEU19PVVRQVVQJCTB4MDAwMDA4MDAgIC8qIElzIGFuIFJEUyBlbmNvZGVyICovCiAKICNkZWZpbmUgVjRMMl9DQVBfVFVORVIJCQkweDAwMDEwMDAwICAvKiBoYXMgYSB0dW5lciAqLwogI2RlZmluZSBWNEwyX0NBUF9BVURJTwkJCTB4MDAwMjAwMDAgIC8qIGhhcyBhdWRpbyBzdXBwb3J0ICovCiAjZGVmaW5lIFY0TDJfQ0FQX1JBRElPCQkJMHgwMDA0MDAwMCAgLyogaXMgYSByYWRpbyBkZXZpY2UgKi8KKyNkZWZpbmUgVjRMMl9DQVBfTU9EVUxBVE9SCQkweDAwMDgwMDAwICAvKiBoYXMgYSBtb2R1bGF0b3IgKi8KIAogI2RlZmluZSBWNEwyX0NBUF9SRUFEV1JJVEUgICAgICAgICAgICAgIDB4MDEwMDAwMDAgIC8qIHJlYWQvd3JpdGUgc3lzdGVtY2FsbHMgKi8KICNkZWZpbmUgVjRMMl9DQVBfQVNZTkNJTyAgICAgICAgICAgICAgICAweDAyMDAwMDAwICAvKiBhc3luYyBJL08gKi8KQEAgLTI3NSw3ICsyNzgsOSBAQAogCV9fdTMyCQkJcHJpdjsJCS8qIHByaXZhdGUgZGF0YSwgZGVwZW5kcyBvbiBwaXhlbGZvcm1hdCAqLwogfTsKIAotLyogICAgICBQaXhlbCBmb3JtYXQgICAgICAgICBGT1VSQ0MgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCAgRGVzY3JpcHRpb24gICovCisvKiAgICAgIFBpeGVsIGZvcm1hdCAgICAgICAgIEZPVVJDQyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGggIERlc2NyaXB0aW9uICAqLworCisvKiBSR0IgZm9ybWF0cyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCMzMyICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnMScpIC8qICA4ICBSR0ItMy0zLTIgICAgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I0NDQgIHY0bDJfZm91cmNjKCdSJywgJzQnLCAnNCcsICc0JykgLyogMTYgIHh4eHhycnJyIGdnZ2diYmJiICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I1NTUgIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICdPJykgLyogMTYgIFJHQi01LTUtNSAgICAgKi8KQEAgLTI4NiwxMiArMjkxLDIwIEBACiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0IyNCAgIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICczJykgLyogMjQgIFJHQi04LTgtOCAgICAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX0JHUjMyICAgdjRsMl9mb3VyY2MoJ0InLCAnRycsICdSJywgJzQnKSAvKiAzMiAgQkdSLTgtOC04LTggICAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCMzIgICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnNCcpIC8qIDMyICBSR0ItOC04LTgtOCAgICovCisKKy8qIEdyZXkgZm9ybWF0cyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfR1JFWSAgICB2NGwyX2ZvdXJjYygnRycsICdSJywgJ0UnLCAnWScpIC8qICA4ICBHcmV5c2NhbGUgICAgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZMTYgICAgIHY0bDJfZm91cmNjKCdZJywgJzEnLCAnNicsICcgJykgLyogMTYgIEdyZXlzY2FsZSAgICAgKi8KKworLyogUGFsZXR0ZSBmb3JtYXRzICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9QQUw4ICAgIHY0bDJfZm91cmNjKCdQJywgJ0EnLCAnTCcsICc4JykgLyogIDggIDgtYml0IHBhbGV0dGUgKi8KKworLyogTHVtaW5hbmNlK0Nocm9taW5hbmNlIGZvcm1hdHMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1lWVTQxMCAgdjRsMl9mb3VyY2MoJ1knLCAnVicsICdVJywgJzknKSAvKiAgOSAgWVZVIDQ6MTowICAgICAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfWVZVNDIwICB2NGwyX2ZvdXJjYygnWScsICdWJywgJzEnLCAnMicpIC8qIDEyICBZVlUgNDoyOjAgICAgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVlWICAgIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnWScsICdWJykgLyogMTYgIFlVViA0OjI6MiAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lZVVYgICAgdjRsMl9mb3VyY2MoJ1knLCAnWScsICdVJywgJ1YnKSAvKiAxNiAgWVVWIDQ6MjoyICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfWVZZVSAgICB2NGwyX2ZvdXJjYygnWScsICdWJywgJ1knLCAnVScpIC8qIDE2IFlWVSA0OjI6MiAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfVVlWWSAgICB2NGwyX2ZvdXJjYygnVScsICdZJywgJ1YnLCAnWScpIC8qIDE2ICBZVVYgNDoyOjIgICAgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9WWVVZICAgIHY0bDJfZm91cmNjKCdWJywgJ1knLCAnVScsICdZJykgLyogMTYgIFlVViA0OjI6MiAgICAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjQyMlAgdjRsMl9mb3VyY2MoJzQnLCAnMicsICcyJywgJ1AnKSAvKiAxNiAgWVZVNDIyIHBsYW5hciAqLwpAQCAtMzAxLDYgKzMxNCwxMCBAQAogI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNTU1ICB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1YnLCAnTycpIC8qIDE2ICBZVVYtNS01LTUgICAgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY1NjUgIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICdQJykgLyogMTYgIFlVVi01LTYtNSAgICAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjMyICAgdjRsMl9mb3VyY2MoJ1knLCAnVScsICdWJywgJzQnKSAvKiAzMiAgWVVWLTgtOC04LTggICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNDEwICB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1YnLCAnOScpIC8qICA5ICBZVVYgNDoxOjAgICAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MjAgIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnMScsICcyJykgLyogMTIgIFlVViA0OjI6MCAgICAgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0hJMjQwICAgdjRsMl9mb3VyY2MoJ0gnLCAnSScsICcyJywgJzQnKSAvKiAgOCAgOC1iaXQgY29sb3IgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfSE0xMiAgICB2NGwyX2ZvdXJjYygnSCcsICdNJywgJzEnLCAnMicpIC8qICA4ICBZVVYgNDoyOjAgMTZ4MTYgbWFjcm9ibG9ja3MgKi8KIAogLyogdHdvIHBsYW5lcyAtLSBvbmUgWSwgb25lIENyICsgQ2IgaW50ZXJsZWF2ZWQgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjEyICAgIHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnMScsICcyJykgLyogMTIgIFkvQ2JDciA0OjI6MCAgKi8KQEAgLTMwOCwyNSArMzI1LDE3IEBACiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjE2ICAgIHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnMScsICc2JykgLyogMTYgIFkvQ2JDciA0OjI6MiAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX05WNjEgICAgdjRsMl9mb3VyY2MoJ04nLCAnVicsICc2JywgJzEnKSAvKiAxNiAgWS9DckNiIDQ6MjoyICAqLwogCi0vKiAgVGhlIGZvbGxvd2luZyBmb3JtYXRzIGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgVjRMMiBzcGVjaWZpY2F0aW9uICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MTAgIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICc5JykgLyogIDkgIFlVViA0OjE6MCAgICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjQyMCAgdjRsMl9mb3VyY2MoJ1knLCAnVScsICcxJywgJzInKSAvKiAxMiAgWVVWIDQ6MjowICAgICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVlVViAgICB2NGwyX2ZvdXJjYygnWScsICdZJywgJ1UnLCAnVicpIC8qIDE2ICBZVVYgNDoyOjIgICAgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9ISTI0MCAgIHY0bDJfZm91cmNjKCdIJywgJ0knLCAnMicsICc0JykgLyogIDggIDgtYml0IGNvbG9yICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0hNMTIgICAgdjRsMl9mb3VyY2MoJ0gnLCAnTScsICcxJywgJzInKSAvKiAgOCAgWVVWIDQ6MjowIDE2eDE2IG1hY3JvYmxvY2tzICovCi0KLS8qIHNlZSBodHRwOi8vd3d3LnNpbGljb25pbWFnaW5nLmNvbS9SR0IlMjBCYXllci5odG0gKi8KKy8qIEJheWVyIGZvcm1hdHMgLSBzZWUgaHR0cDovL3d3dy5zaWxpY29uaW1hZ2luZy5jb20vUkdCJTIwQmF5ZXIuaHRtICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjggIHY0bDJfZm91cmNjKCdCJywgJ0EnLCAnOCcsICcxJykgLyogIDggIEJHQkcuLiBHUkdSLi4gKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHQlJHOCAgdjRsMl9mb3VyY2MoJ0cnLCAnQicsICdSJywgJ0cnKSAvKiAgOCAgR0JHQi4uIFJHUkcuLiAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkc4ICB2NGwyX2ZvdXJjYygnRycsICdSJywgJ0InLCAnRycpIC8qICA4ICBHUkdSLi4gQkdCRy4uICovCi0KLS8qCi0gKiAxMGJpdCByYXcgYmF5ZXIsIGV4cGFuZGVkIHRvIDE2IGJpdHMKLSAqIHh4eHhycnJycnJycnJyeHh4eGdnZ2dnZ2dnZ2cgeHh4eGdnZ2dnZ2dnZ2d4eHh4YmJiYmJiYmJiYi4uLgotICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TR1JCRzEwIHY0bDJfZm91cmNjKCdCJywgJ0EnLCAnMScsICcwJykKLS8qIDEwYml0IHJhdyBiYXllciBEUENNIGNvbXByZXNzZWQgdG8gOCBiaXRzICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TR1JCRzEwIHY0bDJfZm91cmNjKCdCJywgJ0EnLCAnMScsICcwJykgLyogMTBiaXQgcmF3IGJheWVyICovCisJLyogMTBiaXQgcmF3IGJheWVyIERQQ00gY29tcHJlc3NlZCB0byA4IGJpdHMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHMTBEUENNOCB2NGwyX2ZvdXJjYygnQicsICdEJywgJzEnLCAnMCcpCisJLyoKKwkgKiAxMGJpdCByYXcgYmF5ZXIsIGV4cGFuZGVkIHRvIDE2IGJpdHMKKwkgKiB4eHh4cnJycnJycnJycnh4eHhnZ2dnZ2dnZ2dnIHh4eHhnZ2dnZ2dnZ2dneHh4eGJiYmJiYmJiYmIuLi4KKwkgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NCR0dSMTYgdjRsMl9mb3VyY2MoJ0InLCAnWScsICdSJywgJzInKSAvKiAxNiAgQkdCRy4uIEdSR1IuLiAqLwogCiAvKiBjb21wcmVzc2VkIGZvcm1hdHMgKi8KQEAgLTM1MCw3ICszNTksNiBAQAogI2RlZmluZSBWNEwyX1BJWF9GTVRfTVI5NzMxMEEgdjRsMl9mb3VyY2MoJ00nLCAnMycsICcxJywgJzAnKSAvKiBjb21wcmVzc2VkIEJHR1IgYmF5ZXIgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NROTA1QyAgIHY0bDJfZm91cmNjKCc5JywgJzAnLCAnNScsICdDJykgLyogY29tcHJlc3NlZCBSR0dCIGJheWVyICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9QSlBHICAgICB2NGwyX2ZvdXJjYygnUCcsICdKJywgJ1AnLCAnRycpIC8qIFBpeGFydCA3M3h4IEpQRUcgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1lWWVUgICAgIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnWScsICdVJykgLyogMTYgWVZVIDQ6MjoyICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9PVjUxMSAgICB2NGwyX2ZvdXJjYygnTycsICc1JywgJzEnLCAnMScpIC8qIG92NTExIEpQRUcgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX09WNTE4ICAgIHY0bDJfZm91cmNjKCdPJywgJzUnLCAnMScsICc4JykgLyogb3Y1MTggSlBFRyAqLwogCkBAIC0zNjcsNiArMzc1LDcgQEAKIH07CiAKICNkZWZpbmUgVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEIDB4MDAwMQorI2RlZmluZSBWNEwyX0ZNVF9GTEFHX0VNVUxBVEVEICAgMHgwMDAyCiAKICNpZiAxCiAJLyogRXhwZXJpbWVudGFsIEZyYW1lIFNpemUgYW5kIGZyYW1lIHJhdGUgZW51bWVyYXRpb24gKi8KQEAgLTc4OCwxMSArNzk3LDEyIEBACiAKIHN0cnVjdCB2NGwyX2V4dF9jb250cm9sIHsKIAlfX3UzMiBpZDsKLQlfX3UzMiByZXNlcnZlZDJbMl07CisJX191MzIgc2l6ZTsKKwlfX3UzMiByZXNlcnZlZDJbMV07CiAJdW5pb24gewogCQlfX3MzMiB2YWx1ZTsKIAkJX19zNjQgdmFsdWU2NDsKLQkJdm9pZCAqcmVzZXJ2ZWQ7CisJCWNoYXIgKnN0cmluZzsKIAl9OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTgwOCw2ICs4MTgsNyBAQAogI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfVVNFUiAweDAwOTgwMDAwCS8qIE9sZC1zdHlsZSAndXNlcicgY29udHJvbHMgKi8KICNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX01QRUcgMHgwMDk5MDAwMAkvKiBNUEVHLWNvbXByZXNzaW9uIGNvbnRyb2xzICovCiAjZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19DQU1FUkEgMHgwMDlhMDAwMAkvKiBDYW1lcmEgY2xhc3MgY29udHJvbHMgKi8KKyNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX0ZNX1RYIDB4MDA5YjAwMDAJLyogRk0gTW9kdWxhdG9yIGNvbnRyb2wgY2xhc3MgKi8KIAogI2RlZmluZSBWNEwyX0NUUkxfSURfTUFTSyAgICAgIAkgICgweDBmZmZmZmZmKQogI2RlZmluZSBWNEwyX0NUUkxfSUQyQ0xBU1MoaWQpICAgICgoaWQpICYgMHgwZmZmMDAwMFVMKQpAQCAtMTE0Nyw2ICsxMTU4LDM5IEBACiAKICNkZWZpbmUgVjRMMl9DSURfUFJJVkFDWQkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNikKIAorLyogRk0gTW9kdWxhdG9yIGNsYXNzIGNvbnRyb2wgSURzICovCisjZGVmaW5lIFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UJCShWNEwyX0NUUkxfQ0xBU1NfRk1fVFggfCAweDkwMCkKKyNkZWZpbmUgVjRMMl9DSURfRk1fVFhfQ0xBU1MJCQkoVjRMMl9DVFJMX0NMQVNTX0ZNX1RYIHwgMSkKKworI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfREVWSUFUSU9OCQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDEpCisjZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9QSQkJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMikKKyNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1BUWQkJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMykKKyNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1BTX05BTUUJCQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDUpCisjZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhUCQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDYpCisKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fTElNSVRFUl9FTkFCTEVECQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY0KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX1JFTEVBU0VfVElNRQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY1KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0RFVklBVElPTgkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY2KQorCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0VOQUJMRUQJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MCkKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fR0FJTgkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MSkKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fVEhSRVNIT0xECShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODIpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0FUVEFDS19USU1FCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODMpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1JFTEVBU0VfVElNRQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDg0KQorCisjZGVmaW5lIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRU5BQkxFRAkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA5NikKKyNkZWZpbmUgVjRMMl9DSURfUElMT1RfVE9ORV9ERVZJQVRJT04JCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgOTcpCisjZGVmaW5lIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRlJFUVVFTkNZCQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDk4KQorCisjZGVmaW5lIFY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVMJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTEyKQorZW51bSB2NGwyX3ByZWVtcGhhc2lzIHsKKwlWNEwyX1BSRUVNUEhBU0lTX0RJU0FCTEVECT0gMCwKKwlWNEwyX1BSRUVNUEhBU0lTXzUwX3VTCQk9IDEsCisJVjRMMl9QUkVFTVBIQVNJU183NV91UwkJPSAyLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfVFVORV9QT1dFUl9MRVZFTAkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxMTMpCisjZGVmaW5lIFY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1IJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTE0KQorCiAvKgogICoJVCBVIE4gSSBOIEcKICAqLwpAQCAtMTE4MSw2ICsxMjI1LDcgQEAKICNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTEFORzIJCTB4MDAyMAogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9TQVAJCTB4MDAyMAogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9MQU5HMQkJMHgwMDQwCisjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1JEUwkJMHgwMDgwCiAKIC8qICBGbGFncyBmb3IgdGhlICdyeHN1YmNoYW5zJyBmaWVsZCAqLwogI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9NT05PCQkweDAwMDEKQEAgLTExODgsNiArMTIzMyw3IEBACiAjZGVmaW5lIFY0TDJfVFVORVJfU1VCX0xBTkcyCQkweDAwMDQKICNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfU0FQCQkweDAwMDQKICNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTEFORzEJCTB4MDAwOAorI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9SRFMJCTB4MDAxMAogCiAvKiAgVmFsdWVzIGZvciB0aGUgJ2F1ZG1vZGUnIGZpZWxkICovCiAjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9NT05PCQkweDAwMDAKQEAgLTEyMTMsNiArMTI1OSwyNyBAQAogfTsKIAogLyoKKyAqCVIgRCBTCisgKi8KKworc3RydWN0IHY0bDJfcmRzX2RhdGEgeworCV9fdTggCWxzYjsKKwlfX3U4IAltc2I7CisJX191OCAJYmxvY2s7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBWNEwyX1JEU19CTE9DS19NU0sgCSAweDcKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQSAJIDAKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQiAJIDEKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQyAJIDIKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfRCAJIDMKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQ19BTFQgCSA0CisjZGVmaW5lIFY0TDJfUkRTX0JMT0NLX0lOVkFMSUQgCSA3CisKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQ09SUkVDVEVEIDB4NDAKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfRVJST1IgCSAweDgwCisKKy8qCiAgKglBIFUgRCBJIE8KICAqLwogc3RydWN0IHY0bDJfYXVkaW8gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaAppbmRleCBhNDNlYmVjLi4yMjdjMmE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaApAQCAtMTE1LDQgKzExNSwxMCBAQAogZXh0ZXJuIHN0cnVjdCB2bV9zdHJ1Y3QgKnZtbGlzdDsKIGV4dGVybiBfX2luaXQgdm9pZCB2bV9hcmVhX3JlZ2lzdGVyX2Vhcmx5KHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCBzaXplX3QgYWxpZ24pOwogCitzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cywKKwkJCQkgICAgIGNvbnN0IHNpemVfdCAqc2l6ZXMsIGludCBucl92bXMsCisJCQkJICAgICBzaXplX3QgYWxpZ24sIGdmcF90IGdmcF9tYXNrKTsKKwordm9pZCBwY3B1X2ZyZWVfdm1fYXJlYXMoc3RydWN0IHZtX3N0cnVjdCAqKnZtcywgaW50IG5yX3Ztcyk7CisKICNlbmRpZiAvKiBfTElOVVhfVk1BTExPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmggYi9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKaW5kZXggY2IyNDIwNC4uNWI0YzZjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93aXJlbGVzcy5oCisrKyBiL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaApAQCAtMTEzMiw2ICsxMTMyLDE0IEBACiB9OwogI2RlZmluZSBJV19FVl9DT01QQVRfTENQX0xFTiBvZmZzZXRvZihzdHJ1Y3QgX19jb21wYXRfaXdfZXZlbnQsIHBvaW50ZXIpCiAjZGVmaW5lIElXX0VWX0NPTVBBVF9QT0lOVF9PRkYgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9pd19wb2ludCwgbGVuZ3RoKQorCisvKiBTaXplIG9mIHRoZSB2YXJpb3VzIGV2ZW50cyBmb3IgY29tcGF0ICovCisjZGVmaW5lIElXX0VWX0NPTVBBVF9DSEFSX0xFTgkoSVdfRVZfQ09NUEFUX0xDUF9MRU4gKyBJRk5BTVNJWikKKyNkZWZpbmUgSVdfRVZfQ09NUEFUX1VJTlRfTEVOCShJV19FVl9DT01QQVRfTENQX0xFTiArIHNpemVvZihfX3UzMikpCisjZGVmaW5lIElXX0VWX0NPTVBBVF9GUkVRX0xFTgkoSVdfRVZfQ09NUEFUX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IGl3X2ZyZXEpKQorI2RlZmluZSBJV19FVl9DT01QQVRfUEFSQU1fTEVOCShJV19FVl9DT01QQVRfTENQX0xFTiArIHNpemVvZihzdHJ1Y3QgaXdfcGFyYW0pKQorI2RlZmluZSBJV19FVl9DT01QQVRfQUREUl9MRU4JKElXX0VWX0NPTVBBVF9MQ1BfTEVOICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpCisjZGVmaW5lIElXX0VWX0NPTVBBVF9RVUFMX0xFTgkoSVdfRVZfQ09NUEFUX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IGl3X3F1YWxpdHkpKQogI2RlZmluZSBJV19FVl9DT01QQVRfUE9JTlRfTEVOCVwKIAkoSVdfRVZfQ09NUEFUX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IGNvbXBhdF9pd19wb2ludCkgLSBcCiAJIElXX0VWX0NPTVBBVF9QT0lOVF9PRkYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dtOTd4eC5oIGIvaW5jbHVkZS9saW51eC93bTk3eHguaAppbmRleCA2ZjY5OTY4Li4wYzk4NzgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dtOTd4eC5oCisrKyBiL2luY2x1ZGUvbGludXgvd205N3h4LmgKQEAgLTE2LDYgKzE2LDEyIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKIC8qCisgKiBXTTk3eHggdmFyaWFudHMKKyAqLworI2RlZmluZQlXTTk3eHhfR0VORVJJQwkJCTB4MDAwMAorI2RlZmluZQlXTTk3eHhfV00xNjEzCQkJMHgxNjEzCisKKy8qCiAgKiBXTTk3eHggQUM5NyBUb3VjaHNjcmVlbiByZWdpc3RlcnMKICAqLwogI2RlZmluZSBBQzk3X1dNOTdYWF9ESUdJVElTRVIxCQkweDc2CkBAIC0yODMsNiArMjg5LDcgQEAKIAl1bnNpZ25lZCBwZW5faXNfZG93bjoxOwkJLyogUGVuIGlzIGRvd24gKi8KIAl1bnNpZ25lZCBhdXhfd2FpdGluZzoxOwkJLyogYXV4IG1lYXN1cmVtZW50IHdhaXRpbmcgKi8KIAl1bnNpZ25lZCBwZW5fcHJvYmFibHlfZG93bjoxOwkvKiB1c2VkIGluIHBvbGxpbmcgbW9kZSAqLworCXUxNiB2YXJpYW50OwkJCS8qIFdNOTd4eCBjaGlwIHZhcmlhbnQgKi8KIAl1MTYgc3VzcGVuZF9tb2RlOyAgICAgICAgICAgICAgIC8qIFBSUCBpbiBzdXNwZW5kIG1vZGUgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmggYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCmluZGV4IDMyMjQ4MjAuLjc1Y2Y1ODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaApAQCAtMTQsMTcgKzE0LDYgQEAKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGlub2RlX3VudXNlZDsKIAogLyoKLSAqIFllcywgd3JpdGViYWNrLmggcmVxdWlyZXMgc2NoZWQuaAotICogTm8sIHNjaGVkLmggaXMgbm90IGluY2x1ZGVkIGZyb20gaGVyZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdGFza19pc19wZGZsdXNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlyZXR1cm4gdGFzay0+ZmxhZ3MgJiBQRl9GTFVTSEVSOwotfQotCi0jZGVmaW5lIGN1cnJlbnRfaXNfcGRmbHVzaCgpCXRhc2tfaXNfcGRmbHVzaChjdXJyZW50KQotCi0vKgogICogZnMvZnMtd3JpdGViYWNrLmMKICAqLwogZW51bSB3cml0ZWJhY2tfc3luY19tb2RlcyB7CkBAIC00MCw2ICsyOSw4IEBACiBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgewogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGk7CS8qIElmICFOVUxMLCBvbmx5IHdyaXRlIGJhY2sgdGhpcwogCQkJCQkgICBxdWV1ZSAqLworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CQkvKiBpZiAhTlVMTCwgb25seSB3cml0ZSBpbm9kZXMgZnJvbQorCQkJCQkgICB0aGlzIHN1cGVyX2Jsb2NrICovCiAJZW51bSB3cml0ZWJhY2tfc3luY19tb2RlcyBzeW5jX21vZGU7CiAJdW5zaWduZWQgbG9uZyAqb2xkZXJfdGhhbl90aGlzOwkvKiBJZiAhTlVMTCwgb25seSB3cml0ZSBiYWNrIGlub2RlcwogCQkJCQkgICBvbGRlciB0aGFuIHRoaXMgKi8KQEAgLTU5LDcgKzUwLDYgQEAKIAl1bnNpZ25lZCBlbmNvdW50ZXJlZF9jb25nZXN0aW9uOjE7IC8qIEFuIG91dHB1dDogYSBxdWV1ZSBpcyBmdWxsICovCiAJdW5zaWduZWQgZm9yX2t1cGRhdGU6MTsJCS8qIEEga3VwZGF0ZSB3cml0ZWJhY2sgKi8KIAl1bnNpZ25lZCBmb3JfcmVjbGFpbToxOwkJLyogSW52b2tlZCBmcm9tIHRoZSBwYWdlIGFsbG9jYXRvciAqLwotCXVuc2lnbmVkIGZvcl93cml0ZXBhZ2VzOjE7CS8qIFRoaXMgaXMgYSB3cml0ZXBhZ2VzKCkgY2FsbCAqLwogCXVuc2lnbmVkIHJhbmdlX2N5Y2xpYzoxOwkvKiByYW5nZV9zdGFydCBpcyBjeWNsaWMgKi8KIAl1bnNpZ25lZCBtb3JlX2lvOjE7CQkvKiBtb3JlIGlvIHRvIGJlIGRpc3BhdGNoZWQgKi8KIAkvKgpAQCAtNzYsOSArNjYsMTMgQEAKIC8qCiAgKiBmcy9mcy13cml0ZWJhY2suYwogICovCQotdm9pZCB3cml0ZWJhY2tfaW5vZGVzKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKK3N0cnVjdCBiZGlfd3JpdGViYWNrOwogaW50IGlub2RlX3dhaXQodm9pZCAqKTsKLXZvaWQgc3luY19pbm9kZXNfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCB3YWl0KTsKK3ZvaWQgd3JpdGViYWNrX2lub2Rlc19zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Cit2b2lkIHN5bmNfaW5vZGVzX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKK3ZvaWQgd3JpdGViYWNrX2lub2Rlc193YmMoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOworbG9uZyB3Yl9kb193cml0ZWJhY2soc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCBpbnQgZm9yY2Vfd2FpdCk7Cit2b2lkIHdha2V1cF9mbHVzaGVyX3RocmVhZHMobG9uZyBucl9wYWdlcyk7CiAKIC8qIHdyaXRlYmFjay5oIHJlcXVpcmVzIGZzLmg7IGl0LCB0b28sIGlzIG5vdCBpbmNsdWRlZCBmcm9tIGhlcmUuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9vbl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQpAQCAtOTgsNyArOTIsNiBAQAogLyoKICAqIG1tL3BhZ2Utd3JpdGViYWNrLmMKICAqLwotaW50IHdha2V1cF9wZGZsdXNoKGxvbmcgbnJfcGFnZXMpOwogdm9pZCBsYXB0b3BfaW9fY29tcGxldGlvbih2b2lkKTsKIHZvaWQgbGFwdG9wX3N5bmNfY29tcGxldGlvbih2b2lkKTsKIHZvaWQgdGhyb3R0bGVfdm1fd3JpdGVvdXQoZ2ZwX3QgZ2ZwX21hc2spOwpAQCAtMTUwLDE3ICsxNDMsMTIgQEAKIHR5cGVkZWYgaW50ICgqd3JpdGVwYWdlX3QpKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKIAkJCQl2b2lkICpkYXRhKTsKIAotaW50IHBkZmx1c2hfb3BlcmF0aW9uKHZvaWQgKCpmbikodW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgYXJnMCk7CiBpbnQgZ2VuZXJpY193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkgICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogaW50IHdyaXRlX2NhY2hlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywgd3JpdGVwYWdlX3Qgd3JpdGVwYWdlLAogCQkgICAgICB2b2lkICpkYXRhKTsKIGludCBkb193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7Ci1pbnQgc3luY19wYWdlX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJbG9mZl90IHBvcywgbG9mZl90IGNvdW50KTsKLWludCBzeW5jX3BhZ2VfcmFuZ2Vfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJICAgbG9mZl90IHBvcywgbG9mZl90IGNvdW50KTsKIHZvaWQgc2V0X3BhZ2VfZGlydHlfYmFsYW5jZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHBhZ2VfbWt3cml0ZSk7CiB2b2lkIHdyaXRlYmFja19zZXRfcmF0ZWxpbWl0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3hhdHRyLmggYi9pbmNsdWRlL2xpbnV4L3hhdHRyLmgKaW5kZXggZDEzMWUzNS4uNWM4NGFmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC94YXR0ci5oCisrKyBiL2luY2x1ZGUvbGludXgveGF0dHIuaApAQCAtNDksNiArNDksNyBAQAogc3NpemVfdCB4YXR0cl9nZXRzZWN1cml0eShzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCB2b2lkICosIHNpemVfdCk7CiBzc2l6ZV90IHZmc19nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpOwogc3NpemVfdCB2ZnNfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmQsIGNoYXIgKmxpc3QsIHNpemVfdCBzaXplKTsKK2ludCBfX3Zmc19zZXR4YXR0cl9ub3Blcm0oc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOwogaW50IHZmc19zZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CiBpbnQgdmZzX3JlbW92ZXhhdHRyKHN0cnVjdCBkZW50cnkgKiwgY29uc3QgY2hhciAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKaW5kZXggOWRjYjYzMi4uMjlmMGU1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCkBAIC0zMSw4ICszMSwxOCBAQAogI2RlZmluZSBJUl9UWVBFX1BEICAgICAgMiAvKiBQdWxzZSBkaXN0YW5jZSBlbmNvZGVkIElSICovCiAjZGVmaW5lIElSX1RZUEVfT1RIRVIgIDk5CiAKLSNkZWZpbmUgSVJfS0VZVEFCX1RZUEUJdTMyCi0jZGVmaW5lIElSX0tFWVRBQl9TSVpFCTEyOCAgLy8gZW5vdWd0aCBmb3IgcmM1LCBwcm9iYWJseSBuZWVkIG1vcmUgc29tZSBkYXkgLi4uCisjZGVmaW5lIElSX0tFWVRBQl9UWVBFIHUzMgorI2RlZmluZSBJUl9LRVlUQUJfU0laRQkxMjggIC8qIGVub3VndGggZm9yIHJjNSwgcHJvYmFibHkgbmVlZCBtb3JlIHNvbWUgZGF5ICovCisKK3N0cnVjdCBpcl9zY2FuY29kZSB7CisJdTE2CXNjYW5jb2RlOworCXUzMglrZXljb2RlOworfTsKKworc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIHsKKwlzdHJ1Y3QgaXJfc2NhbmNvZGUgKnNjYW47CisJaW50IHNpemU7Cit9OwogCiAjZGVmaW5lIElSX0tFWUNPREUodGFiLGNvZGUpCSgoKHVuc2lnbmVkKWNvZGUgPCBJUl9LRVlUQUJfU0laRSkgXAogCQkJCSA/IHRhYltjb2RlXSA6IEtFWV9SRVNFUlZFRCkKQEAgLTkzLDcgKzEwMyw3IEBACiB9OwogCiB2b2lkIGlyX2lucHV0X2luaXQoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyLAotCQkgICBpbnQgaXJfdHlwZSwgSVJfS0VZVEFCX1RZUEUgKmlyX2NvZGVzKTsKKwkJICAgaW50IGlyX3R5cGUsIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXMpOwogdm9pZCBpcl9pbnB1dF9ub2tleShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIpOwogdm9pZCBpcl9pbnB1dF9rZXlkb3duKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppciwKIAkJICAgICAgdTMyIGlyX2tleSwgdTMyIGlyX3Jhdyk7CkBAIC0xMDcsNjcgKzExNyw2MyBAQAogCiAvKiBLZXltYXBzIHRvIGJlIHVzZWQgYnkgb3RoZXIgbW9kdWxlcyAqLwogCi1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW1wdHlbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYVtJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhX2R2YnRbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9tMTM1YVtJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhX2NhcmRidXNbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2FwYWNfdmlld2NvbXBbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3BpeGVsdmlld1tJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGl4ZWx2aWV3X25ld1tJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfbmVidWxhW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZiX3RbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2lvZGF0YV9iY3R2N2VbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2Fkc3RlY2hfZHZiX3RfcGNpW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZVtJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfY2luZXJneV8xNDAwW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVydHZfMzAzW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZidF9wcm9bSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2VtX3RlcnJhdGVjW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19waW5uYWNsZV9ncmV5W0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19mbHl2aWRlb1tJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZmx5ZHZiW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19jaW5lcmd5W0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lenR2W0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3ZpZGVvbWF0ZV90dl9wdnJbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX21hbmxpW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19nb3R2aWV3NzEzNVtJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcHVycGxldHZbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3BjdHZfc2VkbmFbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3B2OTUxW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19yYzVfdHZbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3dpbmZhc3RbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3Bpbm5hY2xlX2NvbG9yW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3W0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19ucGd0ZWNoW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19ub3J3b29kW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19wcm90ZXVzXzIzMDlbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2J1ZGdldF9jaV9vbGRbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2FzdXNfcGMzOVtJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW5jb3JlX2VubHR2W0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbmNvcmVfZW5sdHYyW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc190dF8xNTAwW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19mdXNpb25oZHR2X21jZVtJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYmVob2xkW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19iZWhvbGRfY29sdW1idXNbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3Bpbm5hY2xlX3BjdHZfaGRbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2dlbml1c190dmdvX2ExMW1jZVtJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcG93ZXJjb2xvcl9yZWFsX2FuZ2VsW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFfYTE2ZFtJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW5jb3JlX2VubHR2X2ZtNTNbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3JlYWxfYXVkaW9fMjIwXzMyX2tleXNbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3BsdXNbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F0aV90dl93b25kZXJfaGRfNjAwW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19rd29ybGRfcGx1c190dl9hbmFsb2dbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2thaW9teVtJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZG0xMTA1X25lY1tJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZXZnYV9pbmR0dWJlW0lSX0tFWVRBQl9TSVpFXTsKLQorZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19lbXB0eV90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXZlcm1lZGlhX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19hdmVybWVkaWFfZHZidF90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19hdmVybWVkaWFfY2FyZGJ1c190YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXBhY192aWV3Y29tcF90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcGl4ZWx2aWV3X3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19waXhlbHZpZXdfbmV3X3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19uZWJ1bGFfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJfdF90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfaW9kYXRhX2JjdHY3ZV90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYWRzdGVjaF9kdmJfdF9wY2lfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19jaW5lcmd5XzE0MDBfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2F2ZXJ0dl8zMDNfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJ0X3Byb190YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfZW1fdGVycmF0ZWNfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3Bpbm5hY2xlX2dyZXlfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2ZseXZpZGVvX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19mbHlkdmJfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2NpbmVyZ3lfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2V6dHZfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2F2ZXJtZWRpYV90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfdmlkZW9tYXRlX3R2X3B2cl90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfbWFubGlfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2dvdHZpZXc3MTM1X3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19wdXJwbGV0dl90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcGN0dl9zZWRuYV90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcHY5NTFfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3JjNV90dl90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfd2luZmFzdF90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcGlubmFjbGVfY29sb3JfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2hhdXBwYXVnZV9uZXdfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX25wZ3RlY2hfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX25vcndvb2RfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3Byb3RldXNfMjMwOV90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYnVkZ2V0X2NpX29sZF90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXN1c19wYzM5X3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19lbmNvcmVfZW5sdHZfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2VuY29yZV9lbmx0djJfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3R0XzE1MDBfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2Z1c2lvbmhkdHZfbWNlX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19iZWhvbGRfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2JlaG9sZF9jb2x1bWJ1c190YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcGlubmFjbGVfcGN0dl9oZF90YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfZ2VuaXVzX3R2Z29fYTExbWNlX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19wb3dlcmNvbG9yX3JlYWxfYW5nZWxfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2F2ZXJtZWRpYV9hMTZkX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19lbmNvcmVfZW5sdHZfZm01M190YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfcmVhbF9hdWRpb18yMjBfMzJfa2V5c190YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfcGx1c190YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDBfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZ190YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfa2Fpb215X3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19kbTExMDVfbmVjX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19ldmdhX2luZHR1YmVfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3RlcnJhdGVjX2NpbmVyZ3lfeHNfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3ZpZGVvbWF0ZV9zMzUwX3RhYmxlOworZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19nYWRtZWlfcm0wMDh6X3RhYmxlOwogI2VuZGlmCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaCBiL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oCmluZGV4IDNhZDRlZDUuLmFhZjY1ZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvaXIta2JkLWkyYy5oCkBAIC02LDcgKzYsOCBAQAogc3RydWN0IElSX2kyYzsKIAogc3RydWN0IElSX2kyYyB7Ci0JSVJfS0VZVEFCX1RZUEUgICAgICAgICAqaXJfY29kZXM7CisJc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlczsKKwogCXN0cnVjdCBpMmNfY2xpZW50ICAgICAgKmM7CiAJc3RydWN0IGlucHV0X2RldiAgICAgICAqaW5wdXQ7CiAJc3RydWN0IGlyX2lucHV0X3N0YXRlICBpcjsKQEAgLTIwLDEwICsyMSwyNyBAQAogCWludCAgICAgICAgICAgICAgICAgICAgKCpnZXRfa2V5KShzdHJ1Y3QgSVJfaTJjKiwgdTMyKiwgdTMyKik7CiB9OwogCitlbnVtIGlyX2tiZF9nZXRfa2V5X2ZuIHsKKwlJUl9LQkRfR0VUX0tFWV9DVVNUT00gPSAwLAorCUlSX0tCRF9HRVRfS0VZX1BJWEVMVklFVywKKwlJUl9LQkRfR0VUX0tFWV9QVjk1MSwKKwlJUl9LQkRfR0VUX0tFWV9IQVVQLAorCUlSX0tCRF9HRVRfS0VZX0tOQzEsCisJSVJfS0JEX0dFVF9LRVlfRlVTSU9OSERUViwKKwlJUl9LQkRfR0VUX0tFWV9IQVVQX1hWUiwKKwlJUl9LQkRfR0VUX0tFWV9BVkVSTUVESUFfQ0FSREJVUywKK307CisKIC8qIENhbiBiZSBwYXNzZWQgd2hlbiBpbnN0YW50aWF0aW5nIGFuIGlyX3ZpZGVvIGkyYyBkZXZpY2UgKi8KIHN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhIHsKLQlJUl9LRVlUQUJfVFlQRSAgICAgICAgICppcl9jb2RlczsKKwlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzOwogCWNvbnN0IGNoYXIgICAgICAgICAgICAgKm5hbWU7CisJaW50ICAgICAgICAgICAgICAgICAgICB0eXBlOyAvKiBJUl9UWVBFX1JDNSwgSVJfVFlQRV9QRCwgZXRjICovCisJLyoKKwkgKiBTcGVjaWZ5IGVpdGhlciBhIGZ1bmN0aW9uIHBvaW50ZXIgb3IgYSB2YWx1ZSBpbmRpY2F0aW5nIG9uZSBvZgorCSAqIGlyX2tiZF9pMmMncyBpbnRlcm5hbCBnZXRfa2V5IGZ1bmN0aW9ucworCSAqLwogCWludCAgICAgICAgICAgICAgICAgICAgKCpnZXRfa2V5KShzdHJ1Y3QgSVJfaTJjKiwgdTMyKiwgdTMyKik7CisJZW51bSBpcl9rYmRfZ2V0X2tleV9mbiBpbnRlcm5hbF9nZXRfa2V5X2Z1bmM7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3JhZGlvLXNpNDcxMy5oIGIvaW5jbHVkZS9tZWRpYS9yYWRpby1zaTQ3MTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmFhZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9yYWRpby1zaTQ3MTMuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogaW5jbHVkZS9tZWRpYS9yYWRpby1zaTQ3MTMuaAorICoKKyAqIEJvYXJkIHJlbGF0ZWQgZGF0YSBkZWZpbml0aW9ucyBmb3IgU2k0NzEzIHJhZGlvIHRyYW5zbWl0dGVyIGNoaXAuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb250YWN0OiBFZHVhcmRvIFZhbGVudGluIDxlZHVhcmRvLnZhbGVudGluQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqLworCisjaWZuZGVmIFJBRElPX1NJNDcxM19ICisjZGVmaW5lIFJBRElPX1NJNDcxM19ICisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2RlZmluZSBTSTQ3MTNfTkFNRSAicmFkaW8tc2k0NzEzIgorCisvKgorICogUGxhdGZvcm0gZGVwZW5kZW50IGRlZmluaXRpb24KKyAqLworc3RydWN0IHJhZGlvX3NpNDcxM19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgaTJjX2J1czsKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKnN1YmRldl9ib2FyZF9pbmZvOworfTsKKworI2VuZGlmIC8qIGlmbmRlZiBSQURJT19TSTQ3MTNfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NpNDcxMy5oIGIvaW5jbHVkZS9tZWRpYS9zaTQ3MTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTg1MGE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9zaTQ3MTMuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogaW5jbHVkZS9tZWRpYS9zaTQ3MTMuaAorICoKKyAqIEJvYXJkIHJlbGF0ZWQgZGF0YSBkZWZpbml0aW9ucyBmb3IgU2k0NzEzIGkyYyBkZXZpY2UgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29udGFjdDogRWR1YXJkbyBWYWxlbnRpbiA8ZWR1YXJkby52YWxlbnRpbkBub2tpYS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKi8KKworI2lmbmRlZiBTSTQ3MTNfSAorI2RlZmluZSBTSTQ3MTNfSAorCisvKiBUaGUgU0k0NzEzIEkyQyBzZW5zb3IgY2hpcCBoYXMgYSBmaXhlZCBzbGF2ZSBhZGRyZXNzIG9mIDB4YzYgb3IgMHgyMi4gKi8KKyNkZWZpbmUgU0k0NzEzX0kyQ19BRERSX0JVU0VOX0hJR0gJMHg2MworI2RlZmluZSBTSTQ3MTNfSTJDX0FERFJfQlVTRU5fTE9XCTB4MTEKKworLyoKKyAqIFBsYXRmb3JtIGRlcGVuZGVudCBkZWZpbml0aW9uCisgKi8KK3N0cnVjdCBzaTQ3MTNfcGxhdGZvcm1fZGF0YSB7CisJLyogU2V0IHBvd2VyIHN0YXRlLCB6ZXJvIGlzIG9mZiwgbm9uLXplcm8gaXMgb24uICovCisJaW50ICgqc2V0X3Bvd2VyKShpbnQgcG93ZXIpOworfTsKKworLyoKKyAqIFN0cnVjdHVyZSB0byBxdWVyeSBmb3IgUmVjZWl2ZWQgTm9pc2UgTGV2ZWwgKFJOTCkuCisgKi8KK3N0cnVjdCBzaTQ3MTNfcm5sIHsKKwlfX3UzMiBpbmRleDsJCS8qIG1vZHVsYXRvciBpbmRleCAqLworCV9fdTMyIGZyZXF1ZW5jeTsJLyogZnJlcXVlbmN5IHRvIHBlZm9ybSBybmwgbWVhc3VyZW1lbnQgKi8KKwlfX3MzMiBybmw7CQkvKiByZXN1bHQgb2YgbWVhc3VyZW1lbnQgaW4gZEJ1ViAqLworCV9fdTMyIHJlc2VydmVkWzRdOwkvKiBkcml2ZXJzIGFuZCBhcHBzIG11c3QgaW5pdCB0aGlzIHRvIDAgKi8KK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBpb2N0bCBudW1iZXIgdG8gcXVlcnkgZm9yIHJubC4gVXNlcnMgbXVzdCBwYXNzIGEKKyAqIHN0cnVjdCBzaTQ3MTNfcm5sIHBvaW50ZXIgc3BlY2lmeWluZyBkZXNpcmVkIGZyZXF1ZW5jeSBpbiAnZnJlcXVlbmN5JyBmaWVsZAorICogZm9sbG93aW5nIGRyaXZlciBjYXBhYmlsaXRpZXMgKGkuZSBWNEwyX1RVTkVSX0NBUF9MT1cpLgorICogRHJpdmVyIG11c3QgcmV0dXJuIG1lYXN1cmVkIHZhbHVlIGluIHRoZSBzYW1lIHN0cnV0dXJlLCBmaWxsaW5nICdybmwnIGZpZWxkLgorICovCisjZGVmaW5lIFNJNDcxM19JT0NfTUVBU1VSRV9STkwJX0lPV1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgMCwgXAorCQkJCQkJc3RydWN0IHNpNDcxM19ybmwpCisKKyNlbmRpZiAvKiBpZm5kZWYgU0k0NzEzX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dW5lci5oIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCmluZGV4IGNiZjk3ZjQuLmMxNDZmMmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAorKysgYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKQEAgLTEyNiw2ICsxMjYsNyBAQAogI2RlZmluZSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRVhfTUszCTc4CiAjZGVmaW5lIFRVTkVSX1BISUxJUFNfRk0xMjE2TUs1CQk3OQogI2RlZmluZSBUVU5FUl9QSElMSVBTX0ZRMTIxNkxNRV9NSzMJODAJLyogQWN0aXZlIGxvb3B0aHJvdWdoLCBubyBGTSAqLworI2RlZmluZSBUVU5FUl9QQVJUU05JQ19QVElfNU5GMDUJODEKIAogLyogdHYgY2FyZCBzcGVjaWZpYyAqLwogI2RlZmluZSBUREE5ODg3X1BSRVNFTlQgCQkoMTw8MCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaAppbmRleCA1ZGNiMzY3Li5kNDExMzQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCkBAIC0xMzcsNiArMTM3LDggQEAKIAlpbnQgKCpnX2ZyZXF1ZW5jeSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKTsKIAlpbnQgKCpnX3R1bmVyKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpOwogCWludCAoKnNfdHVuZXIpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3R1bmVyICp2dCk7CisJaW50ICgqZ19tb2R1bGF0b3IpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX21vZHVsYXRvciAqdm0pOworCWludCAoKnNfbW9kdWxhdG9yKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9tb2R1bGF0b3IgKnZtKTsKIAlpbnQgKCpzX3R5cGVfYWRkcikoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHR1bmVyX3NldHVwICp0eXBlKTsKIAlpbnQgKCpzX2NvbmZpZykoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcHJpdl90dW5fY29uZmlnICpjb25maWcpOwogCWludCAoKnNfc3RhbmRieSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCk7CkBAIC0yMjAsNiArMjIyLDkgQEAKIAlpbnQgKCpnX2ZtdCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpOwogCWludCAoKnRyeV9mbXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KTsKIAlpbnQgKCpzX2ZtdCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpOworCWludCAoKmNyb3BjYXApKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNjKTsKKwlpbnQgKCpnX2Nyb3ApKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3ApOworCWludCAoKnNfY3JvcCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY3JvcCAqY3JvcCk7CiAJaW50ICgqZ19wYXJtKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJhbSk7CiAJaW50ICgqc19wYXJtKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJhbSk7CiAJaW50ICgqZW51bV9mcmFtZXNpemVzKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mcm1zaXplZW51bSAqZnNpemUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfaWVlZTgwMjE1NC5oIGIvaW5jbHVkZS9uZXQvYWZfaWVlZTgwMjE1NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZTY0YzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9hZl9pZWVlODAyMTU0LmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIElFRUUgODAyLjE1LjQgaW50ZWZhY2UgZm9yIHVzZXJzcGFjZQorICoKKyAqIENvcHlyaWdodCAyMDA3LCAyMDA4IFNpZW1lbnMgQUcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIFdyaXR0ZW4gYnk6CisgKiBTZXJnZXkgTGFwaW4gPHNsYXBpbkBvc3NmYW5zLm9yZz4KKyAqIERtaXRyeSBFcmVtaW4tU29sZW5pa292IDxkYmFyeXNoa292QGdtYWlsLmNvbT4KKyAqLworCisjaWZuZGVmIF9BRl9JRUVFODAyMTU0X0gKKyNkZWZpbmUgX0FGX0lFRUU4MDIxNTRfSAorCisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+IC8qIGZvciBzYV9mYW1pbHlfdCAqLworCitlbnVtIHsKKwlJRUVFODAyMTU0X0FERFJfTk9ORSA9IDB4MCwKKwkvKiBSRVNFUlZFRCA9IDB4MDEsICovCisJSUVFRTgwMjE1NF9BRERSX1NIT1JUID0gMHgyLCAvKiAxNi1iaXQgYWRkcmVzcyArIFBBTmlkICovCisJSUVFRTgwMjE1NF9BRERSX0xPTkcgPSAweDMsIC8qIDY0LWJpdCBhZGRyZXNzICsgUEFOaWQgKi8KK307CisKKy8qIGFkZHJlc3MgbGVuZ3RoLCBvY3RldHMgKi8KKyNkZWZpbmUgSUVFRTgwMjE1NF9BRERSX0xFTgk4CisKK3N0cnVjdCBpZWVlODAyMTU0X2FkZHIgeworCWludCBhZGRyX3R5cGU7CisJdTE2IHBhbl9pZDsKKwl1bmlvbiB7CisJCXU4IGh3YWRkcltJRUVFODAyMTU0X0FERFJfTEVOXTsKKwkJdTE2IHNob3J0X2FkZHI7CisJfTsKK307CisKKyNkZWZpbmUgSUVFRTgwMjE1NF9QQU5JRF9CUk9BRENBU1QJMHhmZmZmCisjZGVmaW5lIElFRUU4MDIxNTRfQUREUl9CUk9BRENBU1QJMHhmZmZmCisjZGVmaW5lIElFRUU4MDIxNTRfQUREUl9VTkRFRgkJMHhmZmZlCisKK3N0cnVjdCBzb2NrYWRkcl9pZWVlODAyMTU0IHsKKwlzYV9mYW1pbHlfdCBmYW1pbHk7IC8qIEFGX0lFRUU4MDIxNTQgKi8KKwlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyIGFkZHI7Cit9OworCisvKiBnZXQvc2V0c29ja29wdCAqLworI2RlZmluZSBTT0xfSUVFRTgwMjE1NAkwCisKKyNkZWZpbmUgV1BBTl9XQU5UQUNLCTAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hcnAuaCBiL2luY2x1ZGUvbmV0L2FycC5oCmluZGV4IGMyMzYyNzAuLjcxNmY0M2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FycC5oCisrKyBiL2luY2x1ZGUvbmV0L2FycC5oCkBAIC0yNiw2ICsyNiw2IEBACiAJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YXJnZXRfaHcpOwogZXh0ZXJuIHZvaWQgYXJwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKLWV4dGVybiBzdHJ1Y3QgbmVpZ2hfb3BzIGFycF9icm9rZW5fb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZWlnaF9vcHMgYXJwX2Jyb2tlbl9vcHM7CiAKICNlbmRpZgkvKiBfQVJQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaAppbmRleCA5NjgxNjZhLi43MTgzOTRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCkBAIC0xMzgsOCArMTM4LDExIEBACiBzdHJ1Y3QgYnRfc2tiX2NiIHsKIAlfX3U4IHBrdF90eXBlOwogCV9fdTggaW5jb21pbmc7CisJX191OCB0eF9zZXE7CisJX191OCByZXRyaWVzOworCV9fdTggc2FyOwogfTsKLSNkZWZpbmUgYnRfY2Ioc2tiKSAoKHN0cnVjdCBidF9za2JfY2IgKikoc2tiLT5jYikpIAorI2RlZmluZSBidF9jYihza2IpICgoc3RydWN0IGJ0X3NrYl9jYiAqKSgoc2tiKS0+Y2IpKQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpidF9za2JfYWxsb2ModW5zaWduZWQgaW50IGxlbiwgZ2ZwX3QgaG93KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaAppbmRleCBjNGNhNDIyLi43YjY0MGFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaApAQCAtMTE3LDcgKzExNyw3IEBACiAJc3RydWN0IHNrX2J1ZmYJCSpzZW50X2NtZDsKIAlzdHJ1Y3Qgc2tfYnVmZgkJKnJlYXNzZW1ibHlbM107CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlCXJlcV9sb2NrOworCXN0cnVjdCBtdXRleAkJcmVxX2xvY2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJcmVxX3dhaXRfcTsKIAlfX3UzMgkJCXJlcV9zdGF0dXM7CiAJX191MzIJCQlyZXFfcmVzdWx0OwpAQCAtMTg3LDYgKzE4Nyw3IEBACiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfZGVsOwogCiAJc3RydWN0IGRldmljZQlkZXY7CisJYXRvbWljX3QJZGV2cmVmOwogCiAJc3RydWN0IGhjaV9kZXYJKmhkZXY7CiAJdm9pZAkJKmwyY2FwX2RhdGE7CkBAIC0zMzksNiArMzQwLDkgQEAKIHZvaWQgaGNpX2Nvbm5fZW50ZXJfYWN0aXZlX21vZGUoc3RydWN0IGhjaV9jb25uICpjb25uKTsKIHZvaWQgaGNpX2Nvbm5fZW50ZXJfc25pZmZfbW9kZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwogCit2b2lkIGhjaV9jb25uX2hvbGRfZGV2aWNlKHN0cnVjdCBoY2lfY29ubiAqY29ubik7Cit2b2lkIGhjaV9jb25uX3B1dF9kZXZpY2Uoc3RydWN0IGhjaV9jb25uICpjb25uKTsKKwogc3RhdGljIGlubGluZSB2b2lkIGhjaV9jb25uX2hvbGQoc3RydWN0IGhjaV9jb25uICpjb25uKQogewogCWF0b21pY19pbmMoJmNvbm4tPnJlZmNudCk7CkBAIC03MDAsOCArNzA0LDggQEAKICNkZWZpbmUgSENJX1JFUV9QRU5ECSAgMQogI2RlZmluZSBIQ0lfUkVRX0NBTkNFTEVEICAyCiAKLSNkZWZpbmUgaGNpX3JlcV9sb2NrKGQpCQlkb3duKCZkLT5yZXFfbG9jaykKLSNkZWZpbmUgaGNpX3JlcV91bmxvY2soZCkJdXAoJmQtPnJlcV9sb2NrKQorI2RlZmluZSBoY2lfcmVxX2xvY2soZCkJCW11dGV4X2xvY2soJmQtPnJlcV9sb2NrKQorI2RlZmluZSBoY2lfcmVxX3VubG9jayhkKQltdXRleF91bmxvY2soJmQtPnJlcV9sb2NrKQogCiB2b2lkIGhjaV9yZXFfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCByZXN1bHQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCmluZGV4IGU5MTlmY2EuLjk1MTZmNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCkBAIC0yNywxMiArMjcsMTQgQEAKIAogLyogTDJDQVAgZGVmYXVsdHMgKi8KICNkZWZpbmUgTDJDQVBfREVGQVVMVF9NVFUJCTY3MgorI2RlZmluZSBMMkNBUF9ERUZBVUxUX01JTl9NVFUJCTQ4CiAjZGVmaW5lIEwyQ0FQX0RFRkFVTFRfRkxVU0hfVE8JCTB4ZmZmZgotI2RlZmluZSBMMkNBUF9ERUZBVUxUX1JYX1dJTkRPVwkJMQotI2RlZmluZSBMMkNBUF9ERUZBVUxUX01BWF9SRUNFSVZFCTEKLSNkZWZpbmUgTDJDQVBfREVGQVVMVF9SRVRSQU5TX1RPCTMwMCAgICAvKiAzMDAgbWlsbGlzZWNvbmRzICovCi0jZGVmaW5lIEwyQ0FQX0RFRkFVTFRfTU9OSVRPUl9UTwkxMDAwICAgLyogMSBzZWNvbmQgKi8KLSNkZWZpbmUgTDJDQVBfREVGQVVMVF9NQVhfUlhfQVBEVQkweGZmZjcKKyNkZWZpbmUgTDJDQVBfREVGQVVMVF9UWF9XSU5ET1cJCTYzCisjZGVmaW5lIEwyQ0FQX0RFRkFVTFRfTlVNX1RPX0FDSyAgICAgICAgKEwyQ0FQX0RFRkFVTFRfVFhfV0lORE9XLzUpCisjZGVmaW5lIEwyQ0FQX0RFRkFVTFRfTUFYX1RYCQkzCisjZGVmaW5lIEwyQ0FQX0RFRkFVTFRfUkVUUkFOU19UTwkxMDAwICAgIC8qIDEgc2Vjb25kICovCisjZGVmaW5lIEwyQ0FQX0RFRkFVTFRfTU9OSVRPUl9UTwkxMjAwMCAgIC8qIDEyIHNlY29uZHMgKi8KKyNkZWZpbmUgTDJDQVBfREVGQVVMVF9NQVhfUERVX1NJWkUJNjcyCiAKICNkZWZpbmUgTDJDQVBfQ09OTl9USU1FT1VUCSg0MDAwMCkgLyogNDAgc2Vjb25kcyAqLwogI2RlZmluZSBMMkNBUF9JTkZPX1RJTUVPVVQJKDQwMDApICAvKiAgNCBzZWNvbmRzICovCkBAIC01Miw2ICs1NCw3IEBACiAJX191MTYgaW10dTsKIAlfX3UxNiBmbHVzaF90bzsKIAlfX3U4ICBtb2RlOworCV9fdTggIGZjczsKIH07CiAKICNkZWZpbmUgTDJDQVBfQ09OTklORk8JMHgwMgpAQCAtOTMsNiArOTYsMzIgQEAKICNkZWZpbmUgTDJDQVBfRkNTX05PTkUJCTB4MDAKICNkZWZpbmUgTDJDQVBfRkNTX0NSQzE2CQkweDAxCiAKKy8qIEwyQ0FQIENvbnRyb2wgRmllbGQgYml0IG1hc2tzICovCisjZGVmaW5lIEwyQ0FQX0NUUkxfU0FSICAgICAgICAgICAgICAgMHhDMDAwCisjZGVmaW5lIEwyQ0FQX0NUUkxfUkVRU0VRICAgICAgICAgICAgMHgzRjAwCisjZGVmaW5lIEwyQ0FQX0NUUkxfVFhTRVEgICAgICAgICAgICAgMHgwMDdFCisjZGVmaW5lIEwyQ0FQX0NUUkxfUkVUUkFOUyAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIEwyQ0FQX0NUUkxfRklOQUwgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIEwyQ0FQX0NUUkxfUE9MTCAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEwyQ0FQX0NUUkxfU1VQRVJWSVNFICAgICAgICAgMHgwMDBDCisjZGVmaW5lIEwyQ0FQX0NUUkxfRlJBTUVfVFlQRSAgICAgICAgMHgwMDAxIC8qIEktIG9yIFMtRnJhbWUgKi8KKworI2RlZmluZSBMMkNBUF9DVFJMX1RYU0VRX1NISUZUICAgICAgMQorI2RlZmluZSBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVCAgICAgOAorI2RlZmluZSBMMkNBUF9DVFJMX1NBUl9TSElGVCAgICAgICAxNAorCisvKiBMMkNBUCBTdXBlcnZpc29yeSBGdW5jdGlvbiAqLworI2RlZmluZSBMMkNBUF9TVVBFUl9SQ1ZfUkVBRFkgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBMMkNBUF9TVVBFUl9SRUpFQ1QgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBMMkNBUF9TVVBFUl9SQ1ZfTk9UX1JFQURZICAgICAgIDB4MDAwOAorI2RlZmluZSBMMkNBUF9TVVBFUl9TRUxFQ1RfUkVKRUNUICAgICAgIDB4MDAwQworCisvKiBMMkNBUCBTZWdtZW50YXRpb24gYW5kIFJlYXNzZW1ibHkgKi8KKyNkZWZpbmUgTDJDQVBfU0RVX1VOU0VHTUVOVEVEICAgICAgIDB4MDAwMAorI2RlZmluZSBMMkNBUF9TRFVfU1RBUlQgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIEwyQ0FQX1NEVV9FTkQgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgTDJDQVBfU0RVX0NPTlRJTlVFICAgICAgICAgIDB4QzAwMAorCiAvKiBMMkNBUCBzdHJ1Y3R1cmVzICovCiBzdHJ1Y3QgbDJjYXBfaGRyIHsKIAlfX2xlMTYgICAgIGxlbjsKQEAgLTE5MCw3ICsyMTksNyBAQAogI2RlZmluZSBMMkNBUF9NT0RFX1JFVFJBTlMJMHgwMQogI2RlZmluZSBMMkNBUF9NT0RFX0ZMT1dDVEwJMHgwMgogI2RlZmluZSBMMkNBUF9NT0RFX0VSVE0JCTB4MDMKLSNkZWZpbmUgTDJDQVBfTU9ERV9TVFJFQU0JMHgwNAorI2RlZmluZSBMMkNBUF9NT0RFX1NUUkVBTUlORwkweDA0CiAKIHN0cnVjdCBsMmNhcF9kaXNjb25uX3JlcSB7CiAJX19sZTE2ICAgICBkY2lkOwpAQCAtMjYxLDYgKzI5MCwxNCBAQAogCiAvKiAtLS0tLSBMMkNBUCBjaGFubmVsIGFuZCBzb2NrZXQgaW5mbyAtLS0tLSAqLwogI2RlZmluZSBsMmNhcF9waShzaykgKChzdHJ1Y3QgbDJjYXBfcGluZm8gKikgc2spCisjZGVmaW5lIFRYX1FVRVVFKHNrKSAoJmwyY2FwX3BpKHNrKS0+dHhfcXVldWUpCisjZGVmaW5lIFNSRUpfUVVFVUUoc2spICgmbDJjYXBfcGkoc2spLT5zcmVqX3F1ZXVlKQorI2RlZmluZSBTUkVKX0xJU1Qoc2spICgmbDJjYXBfcGkoc2spLT5zcmVqX2wubGlzdCkKKworc3RydWN0IHNyZWpfbGlzdCB7CisJX191OAl0eF9zZXE7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKIAogc3RydWN0IGwyY2FwX3BpbmZvIHsKIAlzdHJ1Y3QgYnRfc29jawlidDsKQEAgLTI3MSwzMCArMzA4LDk3IEBACiAJX191MTYJCWltdHU7CiAJX191MTYJCW9tdHU7CiAJX191MTYJCWZsdXNoX3RvOwotCV9fdTggICAgICAgICAgICBzZWNfbGV2ZWw7CisJX191OAkJbW9kZTsKKwlfX3U4CQludW1fY29uZl9yZXE7CisJX191OAkJbnVtX2NvbmZfcnNwOworCisJX191OAkJZmNzOworCV9fdTgJCXNlY19sZXZlbDsKIAlfX3U4CQlyb2xlX3N3aXRjaDsKLQlfX3U4ICAgICAgICAgICAgZm9yY2VfcmVsaWFibGU7CisJX191OAkJZm9yY2VfcmVsaWFibGU7CiAKIAlfX3U4CQljb25mX3JlcVs2NF07CiAJX191OAkJY29uZl9sZW47CiAJX191OAkJY29uZl9zdGF0ZTsKLQlfX3U4CQljb25mX3JldHJ5OworCV9fdTgJCWNvbm5fc3RhdGU7CisKKwlfX3U4CQluZXh0X3R4X3NlcTsKKwlfX3U4CQlleHBlY3RlZF9hY2tfc2VxOworCV9fdTgJCXJlcV9zZXE7CisJX191OAkJZXhwZWN0ZWRfdHhfc2VxOworCV9fdTgJCWJ1ZmZlcl9zZXE7CisJX191OAkJYnVmZmVyX3NlcV9zcmVqOworCV9fdTgJCXNyZWpfc2F2ZV9yZXFzZXE7CisJX191OAkJdW5hY2tlZF9mcmFtZXM7CisJX191OAkJcmV0cnlfY291bnQ7CisJX191OAkJbnVtX3RvX2FjazsKKwlfX3UxNgkJc2R1X2xlbjsKKwlfX3UxNgkJcGFydGlhbF9zZHVfbGVuOworCXN0cnVjdCBza19idWZmCSpzZHU7CiAKIAlfX3U4CQlpZGVudDsKIAorCV9fdTgJCXJlbW90ZV90eF93aW47CisJX191OAkJcmVtb3RlX21heF90eDsKKwlfX3UxNgkJcmV0cmFuc190aW1lb3V0OworCV9fdTE2CQltb25pdG9yX3RpbWVvdXQ7CisJX191MTYJCW1heF9wZHVfc2l6ZTsKKwogCV9fbGUxNgkJc3BvcnQ7CiAKKwlzdHJ1Y3QgdGltZXJfbGlzdAlyZXRyYW5zX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0CW1vbml0b3JfdGltZXI7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAl0eF9xdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXNyZWpfcXVldWU7CisJc3RydWN0IHNyZWpfbGlzdAlzcmVqX2w7CiAJc3RydWN0IGwyY2FwX2Nvbm4JKmNvbm47CiAJc3RydWN0IHNvY2sJCSpuZXh0X2M7CiAJc3RydWN0IHNvY2sJCSpwcmV2X2M7CiB9OwogCi0jZGVmaW5lIEwyQ0FQX0NPTkZfUkVRX1NFTlQJMHgwMQotI2RlZmluZSBMMkNBUF9DT05GX0lOUFVUX0RPTkUJMHgwMgotI2RlZmluZSBMMkNBUF9DT05GX09VVFBVVF9ET05FCTB4MDQKLSNkZWZpbmUgTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQJMHg4MAorI2RlZmluZSBMMkNBUF9DT05GX1JFUV9TRU5UICAgICAgIDB4MDEKKyNkZWZpbmUgTDJDQVBfQ09ORl9JTlBVVF9ET05FICAgICAweDAyCisjZGVmaW5lIEwyQ0FQX0NPTkZfT1VUUFVUX0RPTkUgICAgMHgwNAorI2RlZmluZSBMMkNBUF9DT05GX01UVV9ET05FICAgICAgIDB4MDgKKyNkZWZpbmUgTDJDQVBfQ09ORl9NT0RFX0RPTkUgICAgICAweDEwCisjZGVmaW5lIEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EICAgMHgyMAorI2RlZmluZSBMMkNBUF9DT05GX05PX0ZDU19SRUNWICAgIDB4NDAKKyNkZWZpbmUgTDJDQVBfQ09ORl9TVEFURTJfREVWSUNFICAweDgwCiAKLSNkZWZpbmUgTDJDQVBfQ09ORl9NQVhfUkVUUklFUwkyCisjZGVmaW5lIEwyQ0FQX0NPTkZfTUFYX0NPTkZfUkVRIDIKKyNkZWZpbmUgTDJDQVBfQ09ORl9NQVhfQ09ORl9SU1AgMgorCisjZGVmaW5lIEwyQ0FQX0NPTk5fU0FSX1NEVSAgICAgICAgIDB4MDEKKyNkZWZpbmUgTDJDQVBfQ09OTl9TUkVKX1NFTlQgICAgICAgMHgwMgorI2RlZmluZSBMMkNBUF9DT05OX1dBSVRfRiAgICAgICAgICAweDA0CisjZGVmaW5lIEwyQ0FQX0NPTk5fU1JFSl9BQ1QgICAgICAgIDB4MDgKKyNkZWZpbmUgTDJDQVBfQ09OTl9TRU5EX1BCSVQgICAgICAgMHgxMAorI2RlZmluZSBMMkNBUF9DT05OX1JFTU9URV9CVVNZICAgICAweDIwCisjZGVmaW5lIEwyQ0FQX0NPTk5fTE9DQUxfQlVTWSAgICAgIDB4NDAKKworI2RlZmluZSBfX21vZF9yZXRyYW5zX3RpbWVyKCkgbW9kX3RpbWVyKCZsMmNhcF9waShzayktPnJldHJhbnNfdGltZXIsIFwKKwkJamlmZmllcyArICBtc2Vjc190b19qaWZmaWVzKEwyQ0FQX0RFRkFVTFRfUkVUUkFOU19UTykpOworI2RlZmluZSBfX21vZF9tb25pdG9yX3RpbWVyKCkgbW9kX3RpbWVyKCZsMmNhcF9waShzayktPm1vbml0b3JfdGltZXIsIFwKKwkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTDJDQVBfREVGQVVMVF9NT05JVE9SX1RPKSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGwyY2FwX3R4X3dpbmRvd19mdWxsKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOworCWludCBzdWI7CisKKwlzdWIgPSAocGktPm5leHRfdHhfc2VxIC0gcGktPmV4cGVjdGVkX2Fja19zZXEpICUgNjQ7CisKKwlpZiAoc3ViIDwgMCkKKwkJc3ViICs9IDY0OworCisJcmV0dXJuIChzdWIgPT0gcGktPnJlbW90ZV90eF93aW4pOworfQorCisjZGVmaW5lIF9fZ2V0X3R4c2VxKGN0cmwpICgoY3RybCkgJiBMMkNBUF9DVFJMX1RYU0VRKSA+PiAxCisjZGVmaW5lIF9fZ2V0X3JlcXNlcShjdHJsKSAoKGN0cmwpICYgTDJDQVBfQ1RSTF9SRVFTRVEpID4+IDgKKyNkZWZpbmUgX19pc19pZnJhbWUoY3RybCkgISgoY3RybCkgJiBMMkNBUF9DVFJMX0ZSQU1FX1RZUEUpCisjZGVmaW5lIF9faXNfc2ZyYW1lKGN0cmwpIChjdHJsKSAmIEwyQ0FQX0NUUkxfRlJBTUVfVFlQRQorI2RlZmluZSBfX2lzX3Nhcl9zdGFydChjdHJsKSAoKGN0cmwpICYgTDJDQVBfQ1RSTF9TQVIpID09IEwyQ0FQX1NEVV9TVEFSVAogCiB2b2lkIGwyY2FwX2xvYWQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaAppbmRleCBjMjc0OTkzLi45MjFkN2IzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFJGQ09NTV9DT05OX1RJTUVPVVQgKEhaICogMzApCiAjZGVmaW5lIFJGQ09NTV9ESVNDX1RJTUVPVVQgKEhaICogMjApCiAjZGVmaW5lIFJGQ09NTV9BVVRIX1RJTUVPVVQgKEhaICogMjUpCisjZGVmaW5lIFJGQ09NTV9JRExFX1RJTUVPVVQgKEhaICogMikKIAogI2RlZmluZSBSRkNPTU1fREVGQVVMVF9NVFUJMTI3CiAjZGVmaW5lIFJGQ09NTV9ERUZBVUxUX0NSRURJVFMJNwpAQCAtMTU0LDYgKzE1NSw3IEBACiBzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3Qgc29ja2V0ICAgKnNvY2s7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJdW5zaWduZWQgbG9uZyAgICBzdGF0ZTsKIAl1bnNpZ25lZCBsb25nICAgIGZsYWdzOwogCWF0b21pY190ICAgICAgICAgcmVmY250OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggZDE4OTJkNi4uM2Q4NzRjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC04MCw3ICs4MCw2IEBACiAgKiB3aXRoIGNmZzgwMjExLgogICoKICAqIEBjZW50ZXJfZnJlcTogY2VudGVyIGZyZXF1ZW5jeSBpbiBNSHoKLSAqIEBtYXhfYmFuZHdpZHRoOiBtYXhpbXVtIGFsbG93ZWQgYmFuZHdpZHRoIGZvciB0aGlzIGNoYW5uZWwsIGluIE1IegogICogQGh3X3ZhbHVlOiBoYXJkd2FyZS1zcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIGNoYW5uZWwKICAqIEBmbGFnczogY2hhbm5lbCBmbGFncyBmcm9tICZlbnVtIGllZWU4MDIxMV9jaGFubmVsX2ZsYWdzLgogICogQG9yaWdfZmxhZ3M6IGNoYW5uZWwgZmxhZ3MgYXQgcmVnaXN0cmF0aW9uIHRpbWUsIHVzZWQgYnkgcmVndWxhdG9yeQpAQCAtOTcsNyArOTYsNiBAQAogc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAJdTE2IGNlbnRlcl9mcmVxOwotCXU4IG1heF9iYW5kd2lkdGg7CiAJdTE2IGh3X3ZhbHVlOwogCXUzMiBmbGFnczsKIAlpbnQgbWF4X2FudGVubmFfZ2FpbjsKQEAgLTM3Miw2ICszNzAsMTAgQEAKICAqIEB0eHJhdGU6IGN1cnJlbnQgdW5pY2FzdCBiaXRyYXRlIHRvIHRoaXMgc3RhdGlvbgogICogQHJ4X3BhY2tldHM6IHBhY2tldHMgcmVjZWl2ZWQgZnJvbSB0aGlzIHN0YXRpb24KICAqIEB0eF9wYWNrZXRzOiBwYWNrZXRzIHRyYW5zbWl0dGVkIHRvIHRoaXMgc3RhdGlvbgorICogQGdlbmVyYXRpb246IGdlbmVyYXRpb24gbnVtYmVyIGZvciBubDgwMjExIGR1bXBzLgorICoJVGhpcyBudW1iZXIgc2hvdWxkIGluY3JlYXNlIGV2ZXJ5IHRpbWUgdGhlIGxpc3Qgb2Ygc3RhdGlvbnMKKyAqCWNoYW5nZXMsIGkuZS4gd2hlbiBhIHN0YXRpb24gaXMgYWRkZWQgb3IgcmVtb3ZlZCwgc28gdGhhdAorICoJdXNlcnNwYWNlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgZ290IGEgY29uc2lzdGVudCBzbmFwc2hvdC4KICAqLwogc3RydWN0IHN0YXRpb25faW5mbyB7CiAJdTMyIGZpbGxlZDsKQEAgLTM4NSw2ICszODcsOCBAQAogCXN0cnVjdCByYXRlX2luZm8gdHhyYXRlOwogCXUzMiByeF9wYWNrZXRzOwogCXUzMiB0eF9wYWNrZXRzOworCisJaW50IGdlbmVyYXRpb247CiB9OwogCiAvKioKQEAgLTQ0NCw2ICs0NDgsMTAgQEAKICAqIEBmbGFnczogbWVzaCBwYXRoIGZsYWdzCiAgKiBAZGlzY292ZXJ5X3RpbWVvdXQ6IHRvdGFsIG1lc2ggcGF0aCBkaXNjb3ZlcnkgdGltZW91dCwgaW4gbXNlY3MKICAqIEBkaXNjb3ZlcnlfcmV0cmllczogbWVzaCBwYXRoIGRpc2NvdmVyeSByZXRyaWVzCisgKiBAZ2VuZXJhdGlvbjogZ2VuZXJhdGlvbiBudW1iZXIgZm9yIG5sODAyMTEgZHVtcHMuCisgKglUaGlzIG51bWJlciBzaG91bGQgaW5jcmVhc2UgZXZlcnkgdGltZSB0aGUgbGlzdCBvZiBtZXNoIHBhdGhzCisgKgljaGFuZ2VzLCBpLmUuIHdoZW4gYSBzdGF0aW9uIGlzIGFkZGVkIG9yIHJlbW92ZWQsIHNvIHRoYXQKKyAqCXVzZXJzcGFjZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGdvdCBhIGNvbnNpc3RlbnQgc25hcHNob3QuCiAgKi8KIHN0cnVjdCBtcGF0aF9pbmZvIHsKIAl1MzIgZmlsbGVkOwpAQCAtNDU0LDYgKzQ2Miw4IEBACiAJdTMyIGRpc2NvdmVyeV90aW1lb3V0OwogCXU4IGRpc2NvdmVyeV9yZXRyaWVzOwogCXU4IGZsYWdzOworCisJaW50IGdlbmVyYXRpb247CiB9OwogCiAvKioKQEAgLTUzOCwyMyArNTQ4LDI2IEBACiAgKiBAc3NpZHM6IFNTSURzIHRvIHNjYW4gZm9yIChhY3RpdmUgc2NhbiBvbmx5KQogICogQG5fc3NpZHM6IG51bWJlciBvZiBTU0lEcwogICogQGNoYW5uZWxzOiBjaGFubmVscyB0byBzY2FuIG9uLgotICogQG5fY2hhbm5lbHM6IG51bWJlciBvZiBjaGFubmVscyBmb3IgZWFjaCBiYW5kCisgKiBAbl9jaGFubmVsczogdG90YWwgbnVtYmVyIG9mIGNoYW5uZWxzIHRvIHNjYW4KICAqIEBpZTogb3B0aW9uYWwgaW5mb3JtYXRpb24gZWxlbWVudChzKSB0byBhZGQgaW50byBQcm9iZSBSZXF1ZXN0IG9yICVOVUxMCiAgKiBAaWVfbGVuOiBsZW5ndGggb2YgaWUgaW4gb2N0ZXRzCiAgKiBAd2lwaHk6IHRoZSB3aXBoeSB0aGlzIHdhcyBmb3IKLSAqIEBpZmlkeDogdGhlIGludGVyZmFjZSBpbmRleAorICogQGRldjogdGhlIGludGVyZmFjZQogICovCiBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0IHsKIAlzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqc3NpZHM7CiAJaW50IG5fc3NpZHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICoqY2hhbm5lbHM7CiAJdTMyIG5fY2hhbm5lbHM7CiAJY29uc3QgdTggKmllOwogCXNpemVfdCBpZV9sZW47CiAKIAkvKiBpbnRlcm5hbCAqLwogCXN0cnVjdCB3aXBoeSAqd2lwaHk7Ci0JaW50IGlmaWR4OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJYm9vbCBhYm9ydGVkOworCisJLyoga2VlcCBsYXN0ICovCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsc1swXTsKIH07CiAKIC8qKgpAQCAtNTg0LDcgKzU5Nyw2IEBACiAgKglpcyBubyBndWFyYW50ZWUgdGhhdCB0aGVzZSBhcmUgd2VsbC1mb3JtZWQhKQogICogQGxlbl9pbmZvcm1hdGlvbl9lbGVtZW50czogdG90YWwgbGVuZ3RoIG9mIHRoZSBpbmZvcm1hdGlvbiBlbGVtZW50cwogICogQHNpZ25hbDogc2lnbmFsIHN0cmVuZ3RoIHZhbHVlICh0eXBlIGRlcGVuZHMgb24gdGhlIHdpcGh5J3Mgc2lnbmFsX3R5cGUpCi0gKiBAaG9sZDogQlNTIHNob3VsZCBub3QgZXhwaXJlCiAgKiBAZnJlZV9wcml2OiBmdW5jdGlvbiBwb2ludGVyIHRvIGZyZWUgcHJpdmF0ZSBkYXRhCiAgKiBAcHJpdjogcHJpdmF0ZSBhcmVhIGZvciBkcml2ZXIgdXNlLCBoYXMgYXQgbGVhc3Qgd2lwaHktPmJzc19wcml2X3NpemUgYnl0ZXMKICAqLwpAQCAtNjA1LDM3ICs2MTcsNTkgQEAKIH07CiAKIC8qKgorICogaWVlZTgwMjExX2Jzc19nZXRfaWUgLSBmaW5kIElFIHdpdGggZ2l2ZW4gSUQKKyAqIEBic3M6IHRoZSBic3MgdG8gc2VhcmNoCisgKiBAaWU6IHRoZSBJRSBJRAorICogUmV0dXJucyAlTlVMTCBpZiBub3QgZm91bmQuCisgKi8KK2NvbnN0IHU4ICppZWVlODAyMTFfYnNzX2dldF9pZShzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsIHU4IGllKTsKKworCisvKioKKyAqIHN0cnVjdCBjZmc4MDIxMV9jcnlwdG9fc2V0dGluZ3MgLSBDcnlwdG8gc2V0dGluZ3MKKyAqIEB3cGFfdmVyc2lvbnM6IGluZGljYXRlcyB3aGljaCwgaWYgYW55LCBXUEEgdmVyc2lvbnMgYXJlIGVuYWJsZWQKKyAqCShmcm9tIGVudW0gbmw4MDIxMV93cGFfdmVyc2lvbnMpCisgKiBAY2lwaGVyX2dyb3VwOiBncm91cCBrZXkgY2lwaGVyIHN1aXRlIChvciAwIGlmIHVuc2V0KQorICogQG5fY2lwaGVyc19wYWlyd2lzZTogbnVtYmVyIG9mIEFQIHN1cHBvcnRlZCB1bmljYXN0IGNpcGhlcnMKKyAqIEBjaXBoZXJzX3BhaXJ3aXNlOiB1bmljYXN0IGtleSBjaXBoZXIgc3VpdGVzCisgKiBAbl9ha21fc3VpdGVzOiBudW1iZXIgb2YgQUtNIHN1aXRlcworICogQGFrbV9zdWl0ZXM6IEFLTSBzdWl0ZXMKKyAqIEBjb250cm9sX3BvcnQ6IFdoZXRoZXIgdXNlciBzcGFjZSBjb250cm9scyBJRUVFIDgwMi4xWCBwb3J0LCBpLmUuLAorICoJc2V0cy9jbGVhcnMgJU5MODAyMTFfU1RBX0ZMQUdfQVVUSE9SSVpFRC4gSWYgdHJ1ZSwgdGhlIGRyaXZlciBpcworICoJcmVxdWlyZWQgdG8gYXNzdW1lIHRoYXQgdGhlIHBvcnQgaXMgdW5hdXRob3JpemVkIHVudGlsIGF1dGhvcml6ZWQgYnkKKyAqCXVzZXIgc3BhY2UuIE90aGVyd2lzZSwgcG9ydCBpcyBtYXJrZWQgYXV0aG9yaXplZCBieSBkZWZhdWx0LgorICovCitzdHJ1Y3QgY2ZnODAyMTFfY3J5cHRvX3NldHRpbmdzIHsKKwl1MzIgd3BhX3ZlcnNpb25zOworCXUzMiBjaXBoZXJfZ3JvdXA7CisJaW50IG5fY2lwaGVyc19wYWlyd2lzZTsKKwl1MzIgY2lwaGVyc19wYWlyd2lzZVtOTDgwMjExX01BWF9OUl9DSVBIRVJfU1VJVEVTXTsKKwlpbnQgbl9ha21fc3VpdGVzOworCXUzMiBha21fc3VpdGVzW05MODAyMTFfTUFYX05SX0FLTV9TVUlURVNdOworCWJvb2wgY29udHJvbF9wb3J0OworfTsKKworLyoqCiAgKiBzdHJ1Y3QgY2ZnODAyMTFfYXV0aF9yZXF1ZXN0IC0gQXV0aGVudGljYXRpb24gcmVxdWVzdCBkYXRhCiAgKgogICogVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNvbXBsZXRlIElFRUUgODAyLjExCiAgKiBhdXRoZW50aWNhdGlvbi4KLSAqIE5PVEU6IFRoaXMgc3RydWN0dXJlIHdpbGwgbGlrZWx5IGNoYW5nZSB3aGVuIG1vcmUgY29kZSBmcm9tIG1hYzgwMjExIGlzCi0gKiBtb3ZlZCBpbnRvIGNmZzgwMjExIHNvIHRoYXQgbm9uLW1hYzgwMjExIGRyaXZlcnMgY2FuIGJlbmVmaXQgZnJvbSBpdCwgdG9vLgotICogQmVmb3JlIHVzaW5nIHRoaXMgaW4gYSBkcml2ZXIgdGhhdCBkb2VzIG5vdCB1c2UgbWFjODAyMTEsIGl0IHdvdWxkIGJlIGJldHRlcgotICogdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGF0IHdvcmsgYW5kIGJldHRlciB5ZXQsIHZvbHVudGVlciB0byB3b3JrIG9uIGl0LgogICoKLSAqIEBjaGFuOiBUaGUgY2hhbm5lbCB0byB1c2Ugb3IgJU5VTEwgaWYgbm90IHNwZWNpZmllZCAoYXV0by1zZWxlY3QgYmFzZWQgb24KLSAqCXNjYW4gcmVzdWx0cykKLSAqIEBwZWVyX2FkZHI6IFRoZSBhZGRyZXNzIG9mIHRoZSBwZWVyIFNUQSAoQVAgQlNTSUQgaW4gaW5mcmFzdHJ1Y3R1cmUgY2FzZSk7Ci0gKgl0aGlzIGZpZWxkIGlzIHJlcXVpcmVkIHRvIGJlIHByZXNlbnQ7IGlmIHRoZSBkcml2ZXIgd2FudHMgdG8gaGVscCB3aXRoCi0gKglCU1Mgc2VsZWN0aW9uLCBpdCBzaG91bGQgdXNlICh5ZXQgdG8gYmUgYWRkZWQpIE1MTUUgZXZlbnQgdG8gYWxsb3cgdXNlcgotICoJc3BhY2UgU01FIHRvIGJlIG5vdGlmaWVkIG9mIHJvYW1pbmcgY2FuZGlkYXRlLCBzbyB0aGF0IHRoZSBTTUUgY2FuIHRoZW4KLSAqCXVzZSB0aGUgYXV0aGVudGljYXRpb24gcmVxdWVzdCB3aXRoIHRoZSByZWNvbW1lbmRlZCBCU1NJRCBhbmQgd2hhdGV2ZXIKLSAqCW90aGVyIGRhdGEgbWF5IGJlIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24vYXNzb2NpYXRpb24KLSAqIEBzc2lkOiBTU0lEIG9yICVOVUxMIGlmIG5vdCB5ZXQgYXZhaWxhYmxlCi0gKiBAc3NpZF9sZW46IExlbmd0aCBvZiBzc2lkIGluIG9jdGV0cworICogQGJzczogVGhlIEJTUyB0byBhdXRoZW50aWNhdGUgd2l0aC4KICAqIEBhdXRoX3R5cGU6IEF1dGhlbnRpY2F0aW9uIHR5cGUgKGFsZ29yaXRobSkKICAqIEBpZTogRXh0cmEgSUVzIHRvIGFkZCB0byBBdXRoZW50aWNhdGlvbiBmcmFtZSBvciAlTlVMTAogICogQGllX2xlbjogTGVuZ3RoIG9mIGllIGJ1ZmZlciBpbiBvY3RldHMKKyAqIEBrZXlfbGVuOiBsZW5ndGggb2YgV0VQIGtleSBmb3Igc2hhcmVkIGtleSBhdXRoZW50aWNhdGlvbgorICogQGtleV9pZHg6IGluZGV4IG9mIFdFUCBrZXkgZm9yIHNoYXJlZCBrZXkgYXV0aGVudGljYXRpb24KKyAqIEBrZXk6IFdFUCBrZXkgZm9yIHNoYXJlZCBrZXkgYXV0aGVudGljYXRpb24KICAqLwogc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwotCXU4ICpwZWVyX2FkZHI7Ci0JY29uc3QgdTggKnNzaWQ7Ci0Jc2l6ZV90IHNzaWRfbGVuOwotCWVudW0gbmw4MDIxMV9hdXRoX3R5cGUgYXV0aF90eXBlOworCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzczsKIAljb25zdCB1OCAqaWU7CiAJc2l6ZV90IGllX2xlbjsKKwllbnVtIG5sODAyMTFfYXV0aF90eXBlIGF1dGhfdHlwZTsKKwljb25zdCB1OCAqa2V5OworCXU4IGtleV9sZW4sIGtleV9pZHg7CiB9OwogCiAvKioKQEAgLTY0MywzNSArNjc3LDE5IEBACiAgKgogICogVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNvbXBsZXRlIElFRUUgODAyLjExCiAgKiAocmUpYXNzb2NpYXRpb24uCi0gKiBOT1RFOiBUaGlzIHN0cnVjdHVyZSB3aWxsIGxpa2VseSBjaGFuZ2Ugd2hlbiBtb3JlIGNvZGUgZnJvbSBtYWM4MDIxMSBpcwotICogbW92ZWQgaW50byBjZmc4MDIxMSBzbyB0aGF0IG5vbi1tYWM4MDIxMSBkcml2ZXJzIGNhbiBiZW5lZml0IGZyb20gaXQsIHRvby4KLSAqIEJlZm9yZSB1c2luZyB0aGlzIGluIGEgZHJpdmVyIHRoYXQgZG9lcyBub3QgdXNlIG1hYzgwMjExLCBpdCB3b3VsZCBiZSBiZXR0ZXIKLSAqIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhhdCB3b3JrIGFuZCBiZXR0ZXIgeWV0LCB2b2x1bnRlZXIgdG8gd29yayBvbiBpdC4KLSAqCi0gKiBAY2hhbjogVGhlIGNoYW5uZWwgdG8gdXNlIG9yICVOVUxMIGlmIG5vdCBzcGVjaWZpZWQgKGF1dG8tc2VsZWN0IGJhc2VkIG9uCi0gKglzY2FuIHJlc3VsdHMpCi0gKiBAcGVlcl9hZGRyOiBUaGUgYWRkcmVzcyBvZiB0aGUgcGVlciBTVEEgKEFQIEJTU0lEKTsgdGhpcyBmaWVsZCBpcyByZXF1aXJlZAotICoJdG8gYmUgcHJlc2VudCBhbmQgdGhlIFNUQSBtdXN0IGJlIGluIFN0YXRlIDIgKGF1dGhlbnRpY2F0ZWQpIHdpdGggdGhlCi0gKglwZWVyIFNUQQotICogQHNzaWQ6IFNTSUQKLSAqIEBzc2lkX2xlbjogTGVuZ3RoIG9mIHNzaWQgaW4gb2N0ZXRzCisgKiBAYnNzOiBUaGUgQlNTIHRvIGFzc29jaWF0ZSB3aXRoLgogICogQGllOiBFeHRyYSBJRXMgdG8gYWRkIHRvIChSZSlBc3NvY2lhdGlvbiBSZXF1ZXN0IGZyYW1lIG9yICVOVUxMCiAgKiBAaWVfbGVuOiBMZW5ndGggb2YgaWUgYnVmZmVyIGluIG9jdGV0cwogICogQHVzZV9tZnA6IFVzZSBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24gKElFRUUgODAyLjExdykgaW4gdGhpcyBhc3NvY2lhdGlvbgotICogQGNvbnRyb2xfcG9ydDogV2hldGhlciB1c2VyIHNwYWNlIGNvbnRyb2xzIElFRUUgODAyLjFYIHBvcnQsIGkuZS4sCi0gKglzZXRzL2NsZWFycyAlTkw4MDIxMV9TVEFfRkxBR19BVVRIT1JJWkVELiBJZiB0cnVlLCB0aGUgZHJpdmVyIGlzCi0gKglyZXF1aXJlZCB0byBhc3N1bWUgdGhhdCB0aGUgcG9ydCBpcyB1bmF1dGhvcml6ZWQgdW50aWwgYXV0aG9yaXplZCBieQotICoJdXNlciBzcGFjZS4gT3RoZXJ3aXNlLCBwb3J0IGlzIG1hcmtlZCBhdXRob3JpemVkIGJ5IGRlZmF1bHQuCisgKiBAY3J5cHRvOiBjcnlwdG8gc2V0dGluZ3MKKyAqIEBwcmV2X2Jzc2lkOiBwcmV2aW91cyBCU1NJRCwgaWYgbm90ICVOVUxMIHVzZSByZWFzc29jaWF0ZSBmcmFtZQogICovCiBzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwotCXU4ICpwZWVyX2FkZHI7Ci0JY29uc3QgdTggKnNzaWQ7Ci0Jc2l6ZV90IHNzaWRfbGVuOwotCWNvbnN0IHU4ICppZTsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CisJY29uc3QgdTggKmllLCAqcHJldl9ic3NpZDsKIAlzaXplX3QgaWVfbGVuOworCXN0cnVjdCBjZmc4MDIxMV9jcnlwdG9fc2V0dGluZ3MgY3J5cHRvOwogCWJvb2wgdXNlX21mcDsKLQlib29sIGNvbnRyb2xfcG9ydDsKIH07CiAKIC8qKgpAQCAtNjgwLDE2ICs2OTgsMTYgQEAKICAqIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb21wbGV0ZSBJRUVFIDgwMi4xMQogICogZGVhdXRoZW50aWNhdGlvbi4KICAqCi0gKiBAcGVlcl9hZGRyOiBUaGUgYWRkcmVzcyBvZiB0aGUgcGVlciBTVEEgKEFQIEJTU0lEKTsgdGhpcyBmaWVsZCBpcyByZXF1aXJlZAotICoJdG8gYmUgcHJlc2VudCBhbmQgdGhlIFNUQSBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCB0aGUgcGVlciBTVEEKKyAqIEBic3M6IHRoZSBCU1MgdG8gZGVhdXRoZW50aWNhdGUgZnJvbQogICogQGllOiBFeHRyYSBJRXMgdG8gYWRkIHRvIERlYXV0aGVudGljYXRpb24gZnJhbWUgb3IgJU5VTEwKICAqIEBpZV9sZW46IExlbmd0aCBvZiBpZSBidWZmZXIgaW4gb2N0ZXRzCisgKiBAcmVhc29uX2NvZGU6IFRoZSByZWFzb24gY29kZSBmb3IgdGhlIGRlYXV0aGVudGljYXRpb24KICAqLwogc3RydWN0IGNmZzgwMjExX2RlYXV0aF9yZXF1ZXN0IHsKLQl1OCAqcGVlcl9hZGRyOwotCXUxNiByZWFzb25fY29kZTsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CiAJY29uc3QgdTggKmllOwogCXNpemVfdCBpZV9sZW47CisJdTE2IHJlYXNvbl9jb2RlOwogfTsKIAogLyoqCkBAIC02OTgsMTYgKzcxNiwxNiBAQAogICogVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNvbXBsZXRlIElFRUUgODAyLjExCiAgKiBkaXNhc3NvY2F0aW9uLgogICoKLSAqIEBwZWVyX2FkZHI6IFRoZSBhZGRyZXNzIG9mIHRoZSBwZWVyIFNUQSAoQVAgQlNTSUQpOyB0aGlzIGZpZWxkIGlzIHJlcXVpcmVkCi0gKgl0byBiZSBwcmVzZW50IGFuZCB0aGUgU1RBIG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwZWVyIFNUQQorICogQGJzczogdGhlIEJTUyB0byBkaXNhc3NvY2lhdGUgZnJvbQogICogQGllOiBFeHRyYSBJRXMgdG8gYWRkIHRvIERpc2Fzc29jaWF0aW9uIGZyYW1lIG9yICVOVUxMCiAgKiBAaWVfbGVuOiBMZW5ndGggb2YgaWUgYnVmZmVyIGluIG9jdGV0cworICogQHJlYXNvbl9jb2RlOiBUaGUgcmVhc29uIGNvZGUgZm9yIHRoZSBkaXNhc3NvY2lhdGlvbgogICovCiBzdHJ1Y3QgY2ZnODAyMTFfZGlzYXNzb2NfcmVxdWVzdCB7Ci0JdTggKnBlZXJfYWRkcjsKLQl1MTYgcmVhc29uX2NvZGU7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzOwogCWNvbnN0IHU4ICppZTsKIAlzaXplX3QgaWVfbGVuOworCXUxNiByZWFzb25fY29kZTsKIH07CiAKIC8qKgpAQCAtNzI2LDYgKzc0NCw4IEBACiAgKiBAaWU6IGluZm9ybWF0aW9uIGVsZW1lbnQocykgdG8gaW5jbHVkZSBpbiB0aGUgYmVhY29uCiAgKiBAaWVfbGVuOiBsZW5ndGggb2YgdGhhdAogICogQGJlYWNvbl9pbnRlcnZhbDogYmVhY29uIGludGVydmFsIHRvIHVzZQorICogQHByaXZhY3k6IHRoaXMgaXMgYSBwcm90ZWN0ZWQgbmV0d29yaywga2V5cyB3aWxsIGJlIGNvbmZpZ3VyZWQKKyAqCWFmdGVyIGpvaW5pbmcKICAqLwogc3RydWN0IGNmZzgwMjExX2lic3NfcGFyYW1zIHsKIAl1OCAqc3NpZDsKQEAgLTczNSw2ICs3NTUsNDIgQEAKIAl1OCBzc2lkX2xlbiwgaWVfbGVuOwogCXUxNiBiZWFjb25faW50ZXJ2YWw7CiAJYm9vbCBjaGFubmVsX2ZpeGVkOworCWJvb2wgcHJpdmFjeTsKK307CisKKy8qKgorICogc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zIC0gQ29ubmVjdGlvbiBwYXJhbWV0ZXJzCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNvbXBsZXRlIElFRUUgODAyLjExCisgKiBhdXRoZW50aWNhdGlvbiBhbmQgYXNzb2NpYXRpb24uCisgKgorICogQGNoYW5uZWw6IFRoZSBjaGFubmVsIHRvIHVzZSBvciAlTlVMTCBpZiBub3Qgc3BlY2lmaWVkIChhdXRvLXNlbGVjdCBiYXNlZAorICoJb24gc2NhbiByZXN1bHRzKQorICogQGJzc2lkOiBUaGUgQVAgQlNTSUQgb3IgJU5VTEwgaWYgbm90IHNwZWNpZmllZCAoYXV0by1zZWxlY3QgYmFzZWQgb24gc2NhbgorICoJcmVzdWx0cykKKyAqIEBzc2lkOiBTU0lECisgKiBAc3NpZF9sZW46IExlbmd0aCBvZiBzc2lkIGluIG9jdGV0cworICogQGF1dGhfdHlwZTogQXV0aGVudGljYXRpb24gdHlwZSAoYWxnb3JpdGhtKQorICogQGFzc29jX2llOiBJRXMgZm9yIGFzc29jaWF0aW9uIHJlcXVlc3QKKyAqIEBhc3NvY19pZV9sZW46IExlbmd0aCBvZiBhc3NvY19pZSBpbiBvY3RldHMKKyAqIEBwcml2YWN5OiBpbmRpY2F0ZXMgd2hldGhlciBwcml2YWN5LWVuYWJsZWQgQVBzIHNob3VsZCBiZSB1c2VkCisgKiBAY3J5cHRvOiBjcnlwdG8gc2V0dGluZ3MKKyAqIEBrZXlfbGVuOiBsZW5ndGggb2YgV0VQIGtleSBmb3Igc2hhcmVkIGtleSBhdXRoZW50aWNhdGlvbgorICogQGtleV9pZHg6IGluZGV4IG9mIFdFUCBrZXkgZm9yIHNoYXJlZCBrZXkgYXV0aGVudGljYXRpb24KKyAqIEBrZXk6IFdFUCBrZXkgZm9yIHNoYXJlZCBrZXkgYXV0aGVudGljYXRpb24KKyAqLworc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CisJdTggKmJzc2lkOworCXU4ICpzc2lkOworCXNpemVfdCBzc2lkX2xlbjsKKwllbnVtIG5sODAyMTFfYXV0aF90eXBlIGF1dGhfdHlwZTsKKwl1OCAqaWU7CisJc2l6ZV90IGllX2xlbjsKKwlib29sIHByaXZhY3k7CisJc3RydWN0IGNmZzgwMjExX2NyeXB0b19zZXR0aW5ncyBjcnlwdG87CisJY29uc3QgdTggKmtleTsKKwl1OCBrZXlfbGVuLCBrZXlfaWR4OwogfTsKIAogLyoqCkBAIC03NjQsNiArODIwLDI2IEBACiAJVFhfUE9XRVJfRklYRUQsCiB9OwogCisvKgorICogY2ZnODAyMTFfYml0cmF0ZV9tYXNrIC0gbWFza3MgZm9yIGJpdHJhdGUgY29udHJvbAorICovCitzdHJ1Y3QgY2ZnODAyMTFfYml0cmF0ZV9tYXNrIHsKKy8qCisgKiBBcyBkaXNjdXNzZWQgaW4gQmVybGluLCB0aGlzIHN0cnVjdCByZWFsbHkKKyAqIHNob3VsZCBsb29rIGxpa2UgdGhpczoKKworCXN0cnVjdCB7CisJCXUzMiBsZWdhY3k7CisJCXU4IG1jc1tJRUVFODAyMTFfSFRfTUNTX01BU0tfTEVOXTsKKwl9IGNvbnRyb2xbSUVFRTgwMjExX05VTV9CQU5EU107CisKKyAqIFNpbmNlIHdlIGNhbiBhbHdheXMgZml4IGluLWtlcm5lbCB1c2VycywgbGV0J3Mga2VlcAorICogaXQgc2ltcGxlciBmb3Igbm93OgorICovCisJdTMyIGZpeGVkOyAgIC8qIGZpeGVkIGJpdHJhdGUsIDAgPT0gbm90IGZpeGVkICovCisJdTMyIG1heHJhdGU7IC8qIGluIGticHMsIDAgPT0gbm8gbGltaXQgKi8KK307CisKIC8qKgogICogc3RydWN0IGNmZzgwMjExX29wcyAtIGJhY2tlbmQgZGVzY3JpcHRpb24gZm9yIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24KICAqCkBAIC03ODEsNyArODU3LDggQEAKICAqIEByZXN1bWU6IHdpcGh5IGRldmljZSBuZWVkcyB0byBiZSByZXN1bWVkCiAgKgogICogQGFkZF92aXJ0dWFsX2ludGY6IGNyZWF0ZSBhIG5ldyB2aXJ0dWFsIGludGVyZmFjZSB3aXRoIHRoZSBnaXZlbiBuYW1lLAotICoJbXVzdCBzZXQgdGhlIHN0cnVjdCB3aXJlbGVzc19kZXYncyBpZnR5cGUuCisgKgltdXN0IHNldCB0aGUgc3RydWN0IHdpcmVsZXNzX2RldidzIGlmdHlwZS4gQmV3YXJlOiBZb3UgbXVzdCBjcmVhdGUKKyAqCXRoZSBuZXcgbmV0ZGV2IGluIHRoZSB3aXBoeSdzIG5ldHdvcmsgbmFtZXNwYWNlIQogICoKICAqIEBkZWxfdmlydHVhbF9pbnRmOiByZW1vdmUgdGhlIHZpcnR1YWwgaW50ZXJmYWNlIGRldGVybWluZWQgYnkgaWZpbmRleC4KICAqCkBAIC04NDEsNiArOTE4LDEyIEBACiAgKiBAZGVhdXRoOiBSZXF1ZXN0IHRvIGRlYXV0aGVudGljYXRlIGZyb20gdGhlIHNwZWNpZmllZCBwZWVyCiAgKiBAZGlzYXNzb2M6IFJlcXVlc3QgdG8gZGlzYXNzb2NpYXRlIGZyb20gdGhlIHNwZWNpZmllZCBwZWVyCiAgKgorICogQGNvbm5lY3Q6IENvbm5lY3QgdG8gdGhlIEVTUyB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4gV2hlbiBjb25uZWN0ZWQsCisgKgljYWxsIGNmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KCkgd2l0aCBzdGF0dXMgY29kZSAlV0xBTl9TVEFUVVNfU1VDQ0VTUy4KKyAqCUlmIHRoZSBjb25uZWN0aW9uIGZhaWxzIGZvciBzb21lIHJlYXNvbiwgY2FsbCBjZmc4MDIxMV9jb25uZWN0X3Jlc3VsdCgpCisgKgl3aXRoIHRoZSBzdGF0dXMgZnJvbSB0aGUgQVAuCisgKiBAZGlzY29ubmVjdDogRGlzY29ubmVjdCBmcm9tIHRoZSBCU1MvRVNTLgorICoKICAqIEBqb2luX2lic3M6IEpvaW4gdGhlIHNwZWNpZmllZCBJQlNTIChvciBjcmVhdGUgaWYgbmVjZXNzYXJ5KS4gT25jZSBkb25lLCBjYWxsCiAgKgljZmc4MDIxMV9pYnNzX2pvaW5lZCgpLCBhbHNvIGNhbGwgdGhhdCBmdW5jdGlvbiB3aGVuIGNoYW5naW5nIEJTU0lEIGR1ZQogICoJdG8gYSBtZXJnZS4KQEAgLTg1Nyw2ICs5NDAsOCBAQAogICoKICAqIEByZmtpbGxfcG9sbDogcG9sbHMgdGhlIGh3IHJma2lsbCBsaW5lLCB1c2UgY2ZnODAyMTEgcmVwb3J0aW5nCiAgKglmdW5jdGlvbnMgdG8gYWRqdXN0IHJma2lsbCBodyBzdGF0ZQorICoKKyAqIEB0ZXN0bW9kZV9jbWQ6IHJ1biBhIHRlc3QgbW9kZSBjb21tYW5kCiAgKi8KIHN0cnVjdCBjZmc4MDIxMV9vcHMgewogCWludAkoKnN1c3BlbmQpKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwpAQCAtODY1LDggKzk1MCw5IEBACiAJaW50CSgqYWRkX3ZpcnR1YWxfaW50Zikoc3RydWN0IHdpcGh5ICp3aXBoeSwgY2hhciAqbmFtZSwKIAkJCQkgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCB1MzIgKmZsYWdzLAogCQkJCSAgICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKTsKLQlpbnQJKCpkZWxfdmlydHVhbF9pbnRmKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBpbnQgaWZpbmRleCk7Ci0JaW50CSgqY2hhbmdlX3ZpcnR1YWxfaW50Zikoc3RydWN0IHdpcGh5ICp3aXBoeSwgaW50IGlmaW5kZXgsCisJaW50CSgqZGVsX3ZpcnR1YWxfaW50Zikoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJaW50CSgqY2hhbmdlX3ZpcnR1YWxfaW50Zikoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCB1MzIgKmZsYWdzLAogCQkJCSAgICAgICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKTsKIApAQCAtOTM5LDkgKzEwMjUsMTYgQEAKIAlpbnQJKCphc3NvYykoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCAqcmVxKTsKIAlpbnQJKCpkZWF1dGgpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgIHN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCAqcmVxKTsKKwkJCSAgc3RydWN0IGNmZzgwMjExX2RlYXV0aF9yZXF1ZXN0ICpyZXEsCisJCQkgIHZvaWQgKmNvb2tpZSk7CiAJaW50CSgqZGlzYXNzb2MpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGNmZzgwMjExX2Rpc2Fzc29jX3JlcXVlc3QgKnJlcSk7CisJCQkgICAgc3RydWN0IGNmZzgwMjExX2Rpc2Fzc29jX3JlcXVlc3QgKnJlcSwKKwkJCSAgICB2b2lkICpjb29raWUpOworCisJaW50CSgqY29ubmVjdCkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKTsKKwlpbnQJKCpkaXNjb25uZWN0KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgdTE2IHJlYXNvbl9jb2RlKTsKIAogCWludAkoKmpvaW5faWJzcykoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IGNmZzgwMjExX2lic3NfcGFyYW1zICpwYXJhbXMpOwpAQCAtOTUzLDcgKzEwNDYsMjMgQEAKIAkJCQllbnVtIHR4X3Bvd2VyX3NldHRpbmcgdHlwZSwgaW50IGRibSk7CiAJaW50CSgqZ2V0X3R4X3Bvd2VyKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBpbnQgKmRibSk7CiAKKwlpbnQJKCpzZXRfd2RzX3BlZXIpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJdTggKmFkZHIpOworCiAJdm9pZAkoKnJma2lsbF9wb2xsKShzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKKworI2lmZGVmIENPTkZJR19OTDgwMjExX1RFU1RNT0RFCisJaW50CSgqdGVzdG1vZGVfY21kKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKKyNlbmRpZgorCisJaW50CSgqc2V0X2JpdHJhdGVfbWFzaykoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgY29uc3QgdTggKnBlZXIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9iaXRyYXRlX21hc2sgKm1hc2spOworCisJLyogc29tZSB0ZW1wb3Jhcnkgc3R1ZmYgdG8gZmluaXNoIHdleHQgKi8KKwlpbnQJKCpzZXRfcG93ZXJfbWdtdCkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIGJvb2wgZW5hYmxlZCwgaW50IHRpbWVvdXQpOwogfTsKIAogLyoKQEAgLTk5Niw2ICsxMTA1LDEyIEBACiAgKiBAZnJhZ190aHJlc2hvbGQ6IEZyYWdtZW50YXRpb24gdGhyZXNob2xkIChkb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQpOwogICoJLTEgPSBmcmFnbWVudGF0aW9uIGRpc2FibGVkLCBvbmx5IG9kZCB2YWx1ZXMgPj0gMjU2IHVzZWQKICAqIEBydHNfdGhyZXNob2xkOiBSVFMgdGhyZXNob2xkIChkb3QxMVJUU1RocmVzaG9sZCk7IC0xID0gUlRTL0NUUyBkaXNhYmxlZAorICogQG5ldDogdGhlIG5ldHdvcmsgbmFtZXNwYWNlIHRoaXMgd2lwaHkgY3VycmVudGx5IGxpdmVzIGluCisgKiBAbmV0bnNvazogaWYgc2V0IHRvIGZhbHNlLCBkbyBub3QgYWxsb3cgY2hhbmdpbmcgdGhlIG5ldG5zIG9mIHRoaXMKKyAqCXdpcGh5IGF0IGFsbAorICogQHBzX2RlZmF1bHQ6IGRlZmF1bHQgZm9yIHBvd2Vyc2F2ZSwgd2lsbCBiZSBzZXQgZGVwZW5kaW5nIG9uIHRoZQorICoJa2VybmVsJ3MgZGVmYXVsdCBvbiB3aXBoeV9uZXcoKSwgYnV0IGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZQorICoJZHJpdmVyIGlmIGl0IGhhcyBhIGdvb2QgcmVhc29uIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0CiAgKi8KIHN0cnVjdCB3aXBoeSB7CiAJLyogYXNzaWduIHRoZXNlIGZpZWxkcyBiZWZvcmUgeW91IHJlZ2lzdGVyIHRoZSB3aXBoeSAqLwpAQCAtMTAxMCw2ICsxMTI1LDkgQEAKIAlib29sIHN0cmljdF9yZWd1bGF0b3J5OwogCWJvb2wgZGlzYWJsZV9iZWFjb25faGludHM7CiAKKwlib29sIG5ldG5zb2s7CisJYm9vbCBwc19kZWZhdWx0OworCiAJZW51bSBjZmc4MDIxMV9zaWduYWxfdHlwZSBzaWduYWxfdHlwZTsKIAogCWludCBic3NfcHJpdl9zaXplOwpAQCAtMTA0OCw5ICsxMTY2LDM1IEBACiAJLyogZGlyIGluIGRlYnVnZnM6IGllZWU4MDIxMS88d2lwaHluYW1lPiAqLwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNkaXI7CiAKKyNpZmRlZiBDT05GSUdfTkVUX05TCisJLyogdGhlIG5ldHdvcmsgbmFtZXNwYWNlIHRoaXMgcGh5IGxpdmVzIGluIGN1cnJlbnRseSAqLworCXN0cnVjdCBuZXQgKl9uZXQ7CisjZW5kaWYKKwogCWNoYXIgcHJpdlswXSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhORVRERVZfQUxJR04pKSk7CiB9OwogCisjaWZkZWYgQ09ORklHX05FVF9OUworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICp3aXBoeV9uZXQoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlyZXR1cm4gd2lwaHktPl9uZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3aXBoeV9uZXRfc2V0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXQgKm5ldCkKK3sKKwl3aXBoeS0+X25ldCA9IG5ldDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKndpcGh5X25ldChzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXJldHVybiAmaW5pdF9uZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3aXBoeV9uZXRfc2V0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXQgKm5ldCkKK3sKK30KKyNlbmRpZgorCiAvKioKICAqIHdpcGh5X3ByaXYgLSByZXR1cm4gcHJpdiBmcm9tIHdpcGh5CiAgKgpAQCAtMTA2Myw2ICsxMjA3LDE3IEBACiB9CiAKIC8qKgorICogcHJpdl90b193aXBoeSAtIHJldHVybiB0aGUgd2lwaHkgY29udGFpbmluZyB0aGUgcHJpdgorICoKKyAqIEBwcml2OiBhIHBvaW50ZXIgcHJldmlvdXNseSByZXR1cm5lZCBieSB3aXBoeV9wcml2CisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHdpcGh5ICpwcml2X3RvX3dpcGh5KHZvaWQgKnByaXYpCit7CisJQlVHX09OKCFwcml2KTsKKwlyZXR1cm4gY29udGFpbmVyX29mKHByaXYsIHN0cnVjdCB3aXBoeSwgcHJpdik7Cit9CisKKy8qKgogICogc2V0X3dpcGh5X2RldiAtIHNldCBkZXZpY2UgcG9pbnRlciBmb3Igd2lwaHkKICAqCiAgKiBAd2lwaHk6IFRoZSB3aXBoeSB3aG9zZSBkZXZpY2UgdG8gYmluZApAQCAtMTEzNCw2ICsxMjg5LDEzIEBACiAgKi8KIGV4dGVybiB2b2lkIHdpcGh5X2ZyZWUoc3RydWN0IHdpcGh5ICp3aXBoeSk7CiAKKy8qIGludGVybmFsIHN0cnVjdHMgKi8KK3N0cnVjdCBjZmc4MDIxMV9jb25uOworc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzczsKK3N0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5czsKKworI2RlZmluZSBNQVhfQVVUSF9CU1NFUwkJNAorCiAvKioKICAqIHN0cnVjdCB3aXJlbGVzc19kZXYgLSB3aXJlbGVzcyBwZXItbmV0ZGV2IHN0YXRlCiAgKgpAQCAtMTE1NywyMiArMTMxOSw0NSBAQAogCXN0cnVjdCB3aXBoeSAqd2lwaHk7CiAJZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGU7CiAKLQkvKiBwcml2YXRlIHRvIHRoZSBnZW5lcmljIHdpcmVsZXNzIGNvZGUgKi8KKwkvKiB0aGUgcmVtYWluZGVyIG9mIHRoaXMgc3RydWN0IHNob3VsZCBiZSBwcml2YXRlIHRvIGNmZzgwMjExICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKLQkvKiBjdXJyZW50bHkgdXNlZCBmb3IgSUJTUyAtIG1pZ2h0IGJlIHJlYXJyYW5nZWQgaW4gdGhlIGZ1dHVyZSAqLwotCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmN1cnJlbnRfYnNzOwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwlzdHJ1Y3QgbXV0ZXggbXR4OworCisJc3RydWN0IHdvcmtfc3RydWN0IGNsZWFudXBfd29yazsKKworCS8qIGN1cnJlbnRseSB1c2VkIGZvciBJQlNTIGFuZCBTTUUgLSBtaWdodCBiZSByZWFycmFuZ2VkIGxhdGVyICovCiAJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKIAl1OCBzc2lkX2xlbjsKKwllbnVtIHsKKwkJQ0ZHODAyMTFfU01FX0lETEUsCisJCUNGRzgwMjExX1NNRV9DT05ORUNUSU5HLAorCQlDRkc4MDIxMV9TTUVfQ09OTkVDVEVELAorCX0gc21lX3N0YXRlOworCXN0cnVjdCBjZmc4MDIxMV9jb25uICpjb25uOworCXN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqY29ubmVjdF9rZXlzOworCisJc3RydWN0IGxpc3RfaGVhZCBldmVudF9saXN0OworCXNwaW5sb2NrX3QgZXZlbnRfbG9jazsKKworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmF1dGh0cnlfYnNzZXNbTUFYX0FVVEhfQlNTRVNdOworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmF1dGhfYnNzZXNbTUFYX0FVVEhfQlNTRVNdOworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmN1cnJlbnRfYnNzOyAvKiBhc3NvY2lhdGVkIC8gam9pbmVkICovCiAKICNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCiAJLyogd2V4dCBkYXRhICovCiAJc3RydWN0IHsKIAkJc3RydWN0IGNmZzgwMjExX2lic3NfcGFyYW1zIGlic3M7Ci0JCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwkJc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zIGNvbm5lY3Q7CisJCXN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqa2V5czsKKwkJdTggKmllOworCQlzaXplX3QgaWVfbGVuOworCQl1OCBic3NpZFtFVEhfQUxFTl0sIHByZXZfYnNzaWRbRVRIX0FMRU5dOworCQl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwogCQlzOCBkZWZhdWx0X2tleSwgZGVmYXVsdF9tZ210X2tleTsKKwkJYm9vbCBwcywgcHJldl9ic3NpZF92YWxpZDsKKwkJaW50IHBzX3RpbWVvdXQ7CiAJfSB3ZXh0OwogI2VuZGlmCiB9OwpAQCAtMTM1MiwyMCArMTUzNyw2IEBACiBleHRlcm4gaW50IHJlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBjb25zdCBjaGFyICphbHBoYTIpOwogCiAvKioKLSAqIHJlZ3VsYXRvcnlfaGludF8xMWQgLSBoaW50cyBhIGNvdW50cnkgSUUgYXMgYSByZWd1bGF0b3J5IGRvbWFpbgotICogQHdpcGh5OiB0aGUgd2lyZWxlc3MgZGV2aWNlIGdpdmluZyB0aGUgaGludCAodXNlZCBvbmx5IGZvciByZXBvcnRpbmcKLSAqCWNvbmZsaWN0cykKLSAqIEBjb3VudHJ5X2llOiBwb2ludGVyIHRvIHRoZSBjb3VudHJ5IElFCi0gKiBAY291bnRyeV9pZV9sZW46IGxlbmd0aCBvZiB0aGUgY291bnRyeSBJRQotICoKLSAqIFdlIHdpbGwgaW50ZXJzZWN0IHRoZSByZCB3aXRoIHRoZSB3aGF0IENSREEgdGVsbHMgdXMgc2hvdWxkIGFwcGx5Ci0gKiBmb3IgdGhlIGFscGhhMiB0aGlzIGNvdW50cnkgSUUgYmVsb25ncyB0bywgdGhpcyBwcmV2ZW50cyBBUHMgZnJvbQotICogc2VuZGluZyB1cyBpbmNvcnJlY3Qgb3Igb3V0ZGF0ZWQgaW5mb3JtYXRpb24gYWdhaW5zdCBhIGNvdW50cnkuCi0gKi8KLWV4dGVybiB2b2lkIHJlZ3VsYXRvcnlfaGludF8xMWQoc3RydWN0IHdpcGh5ICp3aXBoeSwKLQkJCQl1OCAqY291bnRyeV9pZSwKLQkJCQl1OCBjb3VudHJ5X2llX2xlbik7Ci0vKioKICAqIHdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5IC0gYXBwbHkgYSBjdXN0b20gZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluCiAgKiBAd2lwaHk6IHRoZSB3aXJlbGVzcyBkZXZpY2Ugd2Ugd2FudCB0byBwcm9jZXNzIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBvbgogICogQHJlZ2Q6IHRoZSBjdXN0b20gcmVndWxhdG9yeSBkb21haW4gdG8gdXNlIGZvciB0aGlzIHdpcGh5CkBAIC0xNDMzLDI3ICsxNjA0LDM0IEBACiBpbnQgY2ZnODAyMTFfd2V4dF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpOwotaW50IGNmZzgwMjExX2lic3Nfd2V4dF9zaXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpOwotaW50IGNmZzgwMjExX2lic3Nfd2V4dF9naXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpOwotaW50IGNmZzgwMjExX2lic3Nfd2V4dF9zaXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpzc2lkKTsKLWludCBjZmc4MDIxMV9pYnNzX3dleHRfZ2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCk7Ci1pbnQgY2ZnODAyMTFfaWJzc193ZXh0X3Npd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpOwotaW50IGNmZzgwMjExX2lic3Nfd2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfd2V4dF9zaXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBpd19wYXJhbSAqZGF0YSwgY2hhciAqZXh0cmEpOworaW50IGNmZzgwMjExX3dleHRfZ2l3YXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKTsKIAotc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjZmc4MDIxMV93ZXh0X2ZyZXEoc3RydWN0IHdpcGh5ICp3aXBoeSwKLQkJCQkJICAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSk7CitpbnQgY2ZnODAyMTFfd2V4dF9zaXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfd2V4dF9naXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfd2V4dF9zaXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCk7CitpbnQgY2ZnODAyMTFfd2V4dF9naXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCk7CitpbnQgY2ZnODAyMTFfd2V4dF9zaXdyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBpd19wYXJhbSAqcmF0ZSwgY2hhciAqZXh0cmEpOworaW50IGNmZzgwMjExX3dleHRfZ2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJhdGUsIGNoYXIgKmV4dHJhKTsKIAogaW50IGNmZzgwMjExX3dleHRfc2l3cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKQEAgLTE0ODgsNiArMTY2NiwyMSBAQAogaW50IGNmZzgwMjExX3dleHRfZ2l3dHhwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLCBjaGFyICprZXlidWYpOworc3RydWN0IGl3X3N0YXRpc3RpY3MgKmNmZzgwMjExX3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitpbnQgY2ZnODAyMTFfd2V4dF9zaXdwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wYXJhbSAqd3JxLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfd2V4dF9naXdwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wYXJhbSAqd3JxLCBjaGFyICpleHRyYSk7CisKK2ludCBjZmc4MDIxMV93ZXh0X3Npd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJc3RydWN0IHNvY2thZGRyICphcF9hZGRyLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfd2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpOwogCiAvKgogICogY2FsbGJhY2tzIGZvciBhc3luY2hyb25vdXMgY2ZnODAyMTEgbWV0aG9kcywgbm90aWZpY2F0aW9uCkBAIC0xNTY5LDcgKzE3NjIsNyBAQAogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYW4gYXV0aGVudGljYXRpb24gaGFzIGJlZW4gcHJvY2Vzc2VkIGluCiAgKiBzdGF0aW9uIG1vZGUuIFRoZSBkcml2ZXIgaXMgcmVxdWlyZWQgdG8gY2FsbCBlaXRoZXIgdGhpcyBmdW5jdGlvbiBvcgogICogY2ZnODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQoKSB0byBpbmRpY2F0ZSB0aGUgcmVzdWx0IG9mIGNmZzgwMjExX29wczo6YXV0aCgpCi0gKiBjYWxsLgorICogY2FsbC4gVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCiAgKi8KIHZvaWQgY2ZnODAyMTFfc2VuZF9yeF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOwogCkBAIC0xNTc3LDYgKzE3NzAsOCBAQAogICogY2ZnODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQgLSBub3RpZmljYXRpb24gb2YgdGltZWQgb3V0IGF1dGhlbnRpY2F0aW9uCiAgKiBAZGV2OiBuZXR3b3JrIGRldmljZQogICogQGFkZHI6IFRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHdpdGggd2hpY2ggdGhlIGF1dGhlbnRpY2F0aW9uIHRpbWVkIG91dAorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgogICovCiB2b2lkIGNmZzgwMjExX3NlbmRfYXV0aF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyKTsKIApAQCAtMTU4OSw3ICsxNzg0LDcgQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIGEgKHJlKWFzc29jaWF0aW9uIHJlc3BvbnNlIGhhcyBiZWVuCiAgKiBwcm9jZXNzZWQgaW4gc3RhdGlvbiBtb2RlLiBUaGUgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIGNhbGwgZWl0aGVyIHRoaXMKICAqIGZ1bmN0aW9uIG9yIGNmZzgwMjExX3NlbmRfYXNzb2NfdGltZW91dCgpIHRvIGluZGljYXRlIHRoZSByZXN1bHQgb2YKLSAqIGNmZzgwMjExX29wczo6YXNzb2MoKSBjYWxsLgorICogY2ZnODAyMTFfb3BzOjphc3NvYygpIGNhbGwuIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgogICovCiB2b2lkIGNmZzgwMjExX3NlbmRfcnhfYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbik7CiAKQEAgLTE1OTcsNiArMTc5Miw4IEBACiAgKiBjZmc4MDIxMV9zZW5kX2Fzc29jX3RpbWVvdXQgLSBub3RpZmljYXRpb24gb2YgdGltZWQgb3V0IGFzc29jaWF0aW9uCiAgKiBAZGV2OiBuZXR3b3JrIGRldmljZQogICogQGFkZHI6IFRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHdpdGggd2hpY2ggdGhlIGFzc29jaWF0aW9uIHRpbWVkIG91dAorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgogICovCiB2b2lkIGNmZzgwMjExX3NlbmRfYXNzb2NfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcik7CiAKQEAgLTE2MDUsNDEgKzE4MDIsMzAgQEAKICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCiAgKiBAYnVmOiBkZWF1dGhlbnRpY2F0aW9uIGZyYW1lIChoZWFkZXIgKyBib2R5KQogICogQGxlbjogbGVuZ3RoIG9mIHRoZSBmcmFtZSBkYXRhCisgKiBAY29va2llOiBjb29raWUgZnJvbSAtPmRlYXV0aCBpZiBjYWxsZWQgd2l0aGluIHRoYXQgY2FsbGJhY2ssCisgKgklTlVMTCBvdGhlcndpc2UKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBkZWF1dGhlbnRpY2F0aW9uIGhhcyBiZWVuIHByb2Nlc3NlZCBpbgogICogc3RhdGlvbiBtb2RlLiBUaGlzIGluY2x1ZGVzIGJvdGggcmVjZWl2ZWQgZGVhdXRoZW50aWNhdGlvbiBmcmFtZXMgYW5kCi0gKiBsb2NhbGx5IGdlbmVyYXRlZCBvbmVzLgorICogbG9jYWxseSBnZW5lcmF0ZWQgb25lcy4gVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCiAgKi8KLXZvaWQgY2ZnODAyMTFfc2VuZF9kZWF1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbik7Cit2b2lkIGNmZzgwMjExX3NlbmRfZGVhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sCisJCQkgIHZvaWQgKmNvb2tpZSk7CiAKIC8qKgogICogY2ZnODAyMTFfc2VuZF9kaXNhc3NvYyAtIG5vdGlmaWNhdGlvbiBvZiBwcm9jZXNzZWQgZGlzYXNzb2NpYXRpb24KICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCiAgKiBAYnVmOiBkaXNhc3NvY2lhdGlvbiByZXNwb25zZSBmcmFtZSAoaGVhZGVyICsgYm9keSkKICAqIEBsZW46IGxlbmd0aCBvZiB0aGUgZnJhbWUgZGF0YQorICogQGNvb2tpZTogY29va2llIGZyb20gLT5kaXNhc3NvYyBpZiBjYWxsZWQgd2l0aGluIHRoYXQgY2FsbGJhY2ssCisgKgklTlVMTCBvdGhlcndpc2UKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBkaXNhc3NvY2lhdGlvbiBoYXMgYmVlbiBwcm9jZXNzZWQgaW4KICAqIHN0YXRpb24gbW9kZS4gVGhpcyBpbmNsdWRlcyBib3RoIHJlY2VpdmVkIGRpc2Fzc29jaWF0aW9uIGZyYW1lcyBhbmQgbG9jYWxseQotICogZ2VuZXJhdGVkIG9uZXMuCisgKiBnZW5lcmF0ZWQgb25lcy4gVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCiAgKi8KLXZvaWQgY2ZnODAyMTFfc2VuZF9kaXNhc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKLQotLyoqCi0gKiBjZmc4MDIxMV9ob2xkX2JzcyAtIGV4Y2x1ZGUgYnNzIGZyb20gZXhwaXJhdGlvbgotICogQGJzczogYnNzIHdoaWNoIHNob3VsZCBub3QgZXhwaXJlCi0gKgotICogSW4gYSBjYXNlIHdoZW4gdGhlIEJTUyBpcyBub3QgdXBkYXRlZCBidXQgaXQgc2hvdWxkbid0IGV4cGlyZSB0aGlzCi0gKiBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBtYXJrIHRoZSBCU1MgdG8gYmUgZXhjbHVkZWQgZnJvbSBleHBpcmF0aW9uLgotICovCi12b2lkIGNmZzgwMjExX2hvbGRfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7Ci0KLS8qKgotICogY2ZnODAyMTFfdW5ob2xkX2JzcyAtIHJlbW92ZSBleHBpcmF0aW9uIGV4Y2VwdGlvbiBmcm9tIHRoZSBCU1MKLSAqIEBic3M6IGJzcyB3aGljaCBjYW4gZXhwaXJlIGFnYWluCi0gKgotICogVGhpcyBmdW5jdGlvbiBtYXJrcyB0aGUgQlNTIHRvIGJlIGV4cGlyYWJsZSBhZ2Fpbi4KLSAqLwotdm9pZCBjZmc4MDIxMV91bmhvbGRfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7Cit2b2lkIGNmZzgwMjExX3NlbmRfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCSAgICB2b2lkICpjb29raWUpOwogCiAvKioKICAqIGNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUgLSBub3RpZmljYXRpb24gb2YgTWljaGFlbCBNSUMgZmFpbHVyZSAoVEtJUCkKQEAgLTE2NDgsNiArMTgzNCw3IEBACiAgKiBAa2V5X3R5cGU6IFRoZSBrZXkgdHlwZSB0aGF0IHRoZSByZWNlaXZlZCBmcmFtZSB1c2VkCiAgKiBAa2V5X2lkOiBLZXkgaWRlbnRpZmllciAoMC4uMykKICAqIEB0c2M6IFRoZSBUU0MgdmFsdWUgb2YgdGhlIGZyYW1lIHRoYXQgZ2VuZXJhdGVkIHRoZSBNSUMgZmFpbHVyZSAoNiBvY3RldHMpCisgKiBAZ2ZwOiBhbGxvY2F0aW9uIGZsYWdzCiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIGxvY2FsIE1BQyBkZXRlY3RzIGEgTUlDIGZhaWx1cmUgaW4gYQogICogcmVjZWl2ZWQgZnJhbWUuIFRoaXMgbWF0Y2hlcyB3aXRoIE1MTUUtTUlDSEFFTE1JQ0ZBSUxVUkUuaW5kaWNhdGlvbigpCkBAIC0xNjU1LDcgKzE4NDIsNyBAQAogICovCiB2b2lkIGNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsCiAJCQkJICBlbnVtIG5sODAyMTFfa2V5X3R5cGUga2V5X3R5cGUsIGludCBrZXlfaWQsCi0JCQkJICBjb25zdCB1OCAqdHNjKTsKKwkJCQkgIGNvbnN0IHU4ICp0c2MsIGdmcF90IGdmcCk7CiAKIC8qKgogICogY2ZnODAyMTFfaWJzc19qb2luZWQgLSBub3RpZnkgY2ZnODAyMTEgdGhhdCBkZXZpY2Ugam9pbmVkIGFuIElCU1MKQEAgLTE2OTIsNCArMTg3OSwxMzcgQEAKICAqLwogdm9pZCB3aXBoeV9yZmtpbGxfc3RvcF9wb2xsaW5nKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwogCisjaWZkZWYgQ09ORklHX05MODAyMTFfVEVTVE1PREUKKy8qKgorICogY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfcmVwbHlfc2tiIC0gYWxsb2NhdGUgdGVzdG1vZGUgcmVwbHkKKyAqIEB3aXBoeTogdGhlIHdpcGh5CisgKiBAYXBwcm94bGVuOiBhbiB1cHBlciBib3VuZCBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRoYXQgd2lsbAorICoJYmUgcHV0IGludG8gdGhlIHNrYgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGFuZCBwcmUtZmlsbHMgYW4gc2tiIGZvciBhIHJlcGx5IHRvCisgKiB0aGUgdGVzdG1vZGUgY29tbWFuZC4gU2luY2UgaXQgaXMgaW50ZW5kZWQgZm9yIGEgcmVwbHksIGNhbGxpbmcKKyAqIGl0IG91dHNpZGUgb2YgdGhlIEB0ZXN0bW9kZV9jbWQgb3BlcmF0aW9uIGlzIGludmFsaWQuCisgKgorICogVGhlIHJldHVybmVkIHNrYiAob3IgJU5VTEwgaWYgYW55IGVycm9ycyBoYXBwZW4pIGlzIHByZS1maWxsZWQKKyAqIHdpdGggdGhlIHdpcGh5IGluZGV4IGFuZCBzZXQgdXAgaW4gYSB3YXkgdGhhdCBhbnkgZGF0YSB0aGF0IGlzCisgKiBwdXQgaW50byB0aGUgc2tiICh3aXRoIHNrYl9wdXQoKSwgbmxhX3B1dCgpIG9yIHNpbWlsYXIpIHdpbGwgZW5kCisgKiB1cCBiZWluZyB3aXRoaW4gdGhlICVOTDgwMjExX0FUVFJfVEVTVERBVEEgYXR0cmlidXRlLCBzbyBhbGwgdGhhdAorICogbmVlZHMgdG8gYmUgZG9uZSB3aXRoIHRoZSBza2IgaXMgYWRkaW5nIGRhdGEgZm9yIHRoZSBjb3JyZXNwb25kaW5nCisgKiB1c2Vyc3BhY2UgdG9vbCB3aGljaCBjYW4gdGhlbiByZWFkIHRoYXQgZGF0YSBvdXQgb2YgdGhlIHRlc3RkYXRhCisgKiBhdHRyaWJ1dGUuIFlvdSBtdXN0IG5vdCBtb2RpZnkgdGhlIHNrYiBpbiBhbnkgb3RoZXIgd2F5LgorICoKKyAqIFdoZW4gZG9uZSwgY2FsbCBjZmc4MDIxMV90ZXN0bW9kZV9yZXBseSgpIHdpdGggdGhlIHNrYiBhbmQgcmV0dXJuCisgKiBpdHMgZXJyb3IgY29kZSBhcyB0aGUgcmVzdWx0IG9mIHRoZSBAdGVzdG1vZGVfY21kIG9wZXJhdGlvbi4KKyAqLworc3RydWN0IHNrX2J1ZmYgKmNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX3JlcGx5X3NrYihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQkJICBpbnQgYXBwcm94bGVuKTsKKworLyoqCisgKiBjZmc4MDIxMV90ZXN0bW9kZV9yZXBseSAtIHNlbmQgdGhlIHJlcGx5IHNrYgorICogQHNrYjogVGhlIHNrYiwgbXVzdCBoYXZlIGJlZW4gYWxsb2NhdGVkIHdpdGgKKyAqCWNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX3JlcGx5X3NrYigpCisgKgorICogUmV0dXJucyBhbiBlcnJvciBjb2RlIG9yIDAgb24gc3VjY2Vzcywgc2luY2UgY2FsbGluZyB0aGlzCisgKiBmdW5jdGlvbiB3aWxsIHVzdWFsbHkgYmUgdGhlIGxhc3QgdGhpbmcgYmVmb3JlIHJldHVybmluZworICogZnJvbSB0aGUgQHRlc3Rtb2RlX2NtZCB5b3Ugc2hvdWxkIHJldHVybiB0aGUgZXJyb3IgY29kZS4KKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGNvbnN1bWVzIHRoZSBza2IgcmVnYXJkbGVzcyBvZiB0aGUKKyAqIHJldHVybiB2YWx1ZS4KKyAqLworaW50IGNmZzgwMjExX3Rlc3Rtb2RlX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IpOworCisvKioKKyAqIGNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX2V2ZW50X3NrYiAtIGFsbG9jYXRlIHRlc3Rtb2RlIGV2ZW50CisgKiBAd2lwaHk6IHRoZSB3aXBoeQorICogQGFwcHJveGxlbjogYW4gdXBwZXIgYm91bmQgb2YgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0aGF0IHdpbGwKKyAqCWJlIHB1dCBpbnRvIHRoZSBza2IKKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhbmQgcHJlLWZpbGxzIGFuIHNrYiBmb3IgYW4gZXZlbnQgb24gdGhlCisgKiB0ZXN0bW9kZSBtdWx0aWNhc3QgZ3JvdXAuCisgKgorICogVGhlIHJldHVybmVkIHNrYiAob3IgJU5VTEwgaWYgYW55IGVycm9ycyBoYXBwZW4pIGlzIHNldCB1cCBpbiB0aGUKKyAqIHNhbWUgd2F5IGFzIHdpdGggY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfcmVwbHlfc2tiKCkgYnV0IHByZXBhcmVkCisgKiBmb3IgYW4gZXZlbnQuIEFzIHRoZXJlLCB5b3Ugc2hvdWxkIHNpbXBseSBhZGQgZGF0YSB0byBpdCB0aGF0IHdpbGwKKyAqIHRoZW4gZW5kIHVwIGluIHRoZSAlTkw4MDIxMV9BVFRSX1RFU1REQVRBIGF0dHJpYnV0ZS4gQWdhaW4sIHlvdSBtdXN0CisgKiBub3QgbW9kaWZ5IHRoZSBza2IgaW4gYW55IG90aGVyIHdheS4KKyAqCisgKiBXaGVuIGRvbmUgZmlsbGluZyB0aGUgc2tiLCBjYWxsIGNmZzgwMjExX3Rlc3Rtb2RlX2V2ZW50KCkgd2l0aCB0aGUKKyAqIHNrYiB0byBzZW5kIHRoZSBldmVudC4KKyAqLworc3RydWN0IHNrX2J1ZmYgKmNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX2V2ZW50X3NrYihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQkJICBpbnQgYXBwcm94bGVuLCBnZnBfdCBnZnApOworCisvKioKKyAqIGNmZzgwMjExX3Rlc3Rtb2RlX2V2ZW50IC0gc2VuZCB0aGUgZXZlbnQKKyAqIEBza2I6IFRoZSBza2IsIG11c3QgaGF2ZSBiZWVuIGFsbG9jYXRlZCB3aXRoCisgKgljZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19ldmVudF9za2IoKQorICogQGdmcDogYWxsb2NhdGlvbiBmbGFncworICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIGdpdmVuIEBza2IsIHdoaWNoIG11c3QgaGF2ZSBiZWVuIGFsbG9jYXRlZAorICogYnkgY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfZXZlbnRfc2tiKCksIGFzIGFuIGV2ZW50LiBJdCBhbHdheXMKKyAqIGNvbnN1bWVzIGl0LgorICovCit2b2lkIGNmZzgwMjExX3Rlc3Rtb2RlX2V2ZW50KHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcCk7CisKKyNkZWZpbmUgQ0ZHODAyMTFfVEVTVE1PREVfQ01EKGNtZCkJLnRlc3Rtb2RlX2NtZCA9IChjbWQpLAorI2Vsc2UKKyNkZWZpbmUgQ0ZHODAyMTFfVEVTVE1PREVfQ01EKGNtZCkKKyNlbmRpZgorCisvKioKKyAqIGNmZzgwMjExX2Nvbm5lY3RfcmVzdWx0IC0gbm90aWZ5IGNmZzgwMjExIG9mIGNvbm5lY3Rpb24gcmVzdWx0CisgKgorICogQGRldjogbmV0d29yayBkZXZpY2UKKyAqIEBic3NpZDogdGhlIEJTU0lEIG9mIHRoZSBBUAorICogQHJlcV9pZTogYXNzb2NpYXRpb24gcmVxdWVzdCBJRXMgKG1heWJlIGJlICVOVUxMKQorICogQHJlcV9pZV9sZW46IGFzc29jaWF0aW9uIHJlcXVlc3QgSUVzIGxlbmd0aAorICogQHJlc3BfaWU6IGFzc29jaWF0aW9uIHJlc3BvbnNlIElFcyAobWF5IGJlICVOVUxMKQorICogQHJlc3BfaWVfbGVuOiBhc3NvYyByZXNwb25zZSBJRXMgbGVuZ3RoCisgKiBAc3RhdHVzOiBzdGF0dXMgY29kZSwgMCBmb3Igc3VjY2Vzc2Z1bCBjb25uZWN0aW9uLCB1c2UKKyAqCSVXTEFOX1NUQVRVU19VTlNQRUNJRklFRF9GQUlMVVJFIGlmIHlvdXIgZGV2aWNlIGNhbm5vdCBnaXZlIHlvdQorICoJdGhlIHJlYWwgc3RhdHVzIGNvZGUgZm9yIGZhaWx1cmVzLgorICogQGdmcDogYWxsb2NhdGlvbiBmbGFncworICoKKyAqIEl0IHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIHVuZGVybHlpbmcgZHJpdmVyIHdoZW5ldmVyIGNvbm5lY3QoKSBoYXMKKyAqIHN1Y2NlZWRlZC4KKyAqLwordm9pZCBjZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCQkgICAgIGNvbnN0IHU4ICpyZXFfaWUsIHNpemVfdCByZXFfaWVfbGVuLAorCQkJICAgICBjb25zdCB1OCAqcmVzcF9pZSwgc2l6ZV90IHJlc3BfaWVfbGVuLAorCQkJICAgICB1MTYgc3RhdHVzLCBnZnBfdCBnZnApOworCisvKioKKyAqIGNmZzgwMjExX3JvYW1lZCAtIG5vdGlmeSBjZmc4MDIxMSBvZiByb2FtaW5nCisgKgorICogQGRldjogbmV0d29yayBkZXZpY2UKKyAqIEBic3NpZDogdGhlIEJTU0lEIG9mIHRoZSBuZXcgQVAKKyAqIEByZXFfaWU6IGFzc29jaWF0aW9uIHJlcXVlc3QgSUVzIChtYXliZSBiZSAlTlVMTCkKKyAqIEByZXFfaWVfbGVuOiBhc3NvY2lhdGlvbiByZXF1ZXN0IElFcyBsZW5ndGgKKyAqIEByZXNwX2llOiBhc3NvY2lhdGlvbiByZXNwb25zZSBJRXMgKG1heSBiZSAlTlVMTCkKKyAqIEByZXNwX2llX2xlbjogYXNzb2MgcmVzcG9uc2UgSUVzIGxlbmd0aAorICogQGdmcDogYWxsb2NhdGlvbiBmbGFncworICoKKyAqIEl0IHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIHVuZGVybHlpbmcgZHJpdmVyIHdoZW5ldmVyIGl0IHJvYW1lZAorICogZnJvbSBvbmUgQVAgdG8gYW5vdGhlciB3aGlsZSBjb25uZWN0ZWQuCisgKi8KK3ZvaWQgY2ZnODAyMTFfcm9hbWVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKKwkJICAgICBjb25zdCB1OCAqcmVxX2llLCBzaXplX3QgcmVxX2llX2xlbiwKKwkJICAgICBjb25zdCB1OCAqcmVzcF9pZSwgc2l6ZV90IHJlc3BfaWVfbGVuLCBnZnBfdCBnZnApOworCisvKioKKyAqIGNmZzgwMjExX2Rpc2Nvbm5lY3RlZCAtIG5vdGlmeSBjZmc4MDIxMSB0aGF0IGNvbm5lY3Rpb24gd2FzIGRyb3BwZWQKKyAqCisgKiBAZGV2OiBuZXR3b3JrIGRldmljZQorICogQGllOiBpbmZvcm1hdGlvbiBlbGVtZW50cyBvZiB0aGUgZGVhdXRoL2Rpc2Fzc29jIGZyYW1lIChtYXkgYmUgJU5VTEwpCisgKiBAaWVfbGVuOiBsZW5ndGggb2YgSUVzCisgKiBAcmVhc29uOiByZWFzb24gY29kZSBmb3IgdGhlIGRpc2Nvbm5lY3Rpb24sIHNldCBpdCB0byAwIGlmIHVua25vd24KKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqCisgKiBBZnRlciBpdCBjYWxscyB0aGlzIGZ1bmN0aW9uLCB0aGUgZHJpdmVyIHNob3VsZCBlbnRlciBhbiBpZGxlIHN0YXRlCisgKiBhbmQgbm90IHRyeSB0byBjb25uZWN0IHRvIGFueSBBUCBhbnkgbW9yZS4KKyAqLwordm9pZCBjZmc4MDIxMV9kaXNjb25uZWN0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHJlYXNvbiwKKwkJCSAgIHU4ICppZSwgc2l6ZV90IGllX2xlbiwgZ2ZwX3QgZ2ZwKTsKKworCiAjZW5kaWYgLyogX19ORVRfQ0ZHODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZGNibmwuaCBiL2luY2x1ZGUvbmV0L2RjYm5sLmgKaW5kZXggNzc1Y2ZjOC4uYjM2YWM3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZGNibmwuaAorKysgYi9pbmNsdWRlL25ldC9kY2JubC5oCkBAIC00OCw2ICs0OCw4IEBACiAJdm9pZCAoKnNldGJjbmNmZykoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50LCB1MzIpOwogCXZvaWQgKCpnZXRiY25ycCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50LCB1OCAqKTsKIAl2b2lkICgqc2V0YmNucnApKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgdTgpOworCXU4ICAgKCpzZXRhcHApKHN0cnVjdCBuZXRfZGV2aWNlICosIHU4LCB1MTYsIHU4KTsKKwl1OCAgICgqZ2V0YXBwKShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1OCwgdTE2KTsKIH07CiAKICNlbmRpZiAvKiBfX05FVF9EQ0JOTF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzdC5oIGIvaW5jbHVkZS9uZXQvZHN0LmgKaW5kZXggN2ZjNDA5Yy4uNWE5MDBkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHN0LmgKKysrIGIvaW5jbHVkZS9uZXQvZHN0LmgKQEAgLTgsNiArOCw3IEBACiAjaWZuZGVmIF9ORVRfRFNUX0gKICNkZWZpbmUgX05FVF9EU1RfSAogCisjaW5jbHVkZSA8bmV0L2RzdF9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgpAQCAtMTAyLDI4ICsxMDMsNiBAQAogCX07CiB9OwogCi0KLXN0cnVjdCBkc3Rfb3BzCi17Ci0JdW5zaWduZWQgc2hvcnQJCWZhbWlseTsKLQlfX2JlMTYJCQlwcm90b2NvbDsKLQl1bnNpZ25lZAkJZ2NfdGhyZXNoOwotCi0JaW50CQkJKCpnYykoc3RydWN0IGRzdF9vcHMgKm9wcyk7Ci0Jc3RydWN0IGRzdF9lbnRyeSAqCSgqY2hlY2spKHN0cnVjdCBkc3RfZW50cnkgKiwgX191MzIgY29va2llKTsKLQl2b2lkCQkJKCpkZXN0cm95KShzdHJ1Y3QgZHN0X2VudHJ5ICopOwotCXZvaWQJCQkoKmlmZG93bikoc3RydWN0IGRzdF9lbnRyeSAqLAotCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBob3cpOwotCXN0cnVjdCBkc3RfZW50cnkgKgkoKm5lZ2F0aXZlX2FkdmljZSkoc3RydWN0IGRzdF9lbnRyeSAqKTsKLQl2b2lkCQkJKCpsaW5rX2ZhaWx1cmUpKHN0cnVjdCBza19idWZmICopOwotCXZvaWQJCQkoKnVwZGF0ZV9wbXR1KShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBtdHUpOwotCWludAkJCSgqbG9jYWxfb3V0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotCWF0b21pY190CQllbnRyaWVzOwotCXN0cnVjdCBrbWVtX2NhY2hlIAkJKmttZW1fY2FjaGVwOwotCXN0cnVjdCBuZXQgICAgICAgICAgICAgICpkc3RfbmV0OwotfTsKLQogI2lmZGVmIF9fS0VSTkVMX18KIAogc3RhdGljIGlubGluZSB1MzIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzdF9vcHMuaCBiL2luY2x1ZGUvbmV0L2RzdF9vcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWZmOWI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvZHN0X29wcy5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX05FVF9EU1RfT1BTX0gKKyNkZWZpbmUgX05FVF9EU1RfT1BTX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgZHN0X2VudHJ5Oworc3RydWN0IGttZW1fY2FjaGVwOworc3RydWN0IG5ldF9kZXZpY2U7CitzdHJ1Y3Qgc2tfYnVmZjsKKworc3RydWN0IGRzdF9vcHMgeworCXVuc2lnbmVkIHNob3J0CQlmYW1pbHk7CisJX19iZTE2CQkJcHJvdG9jb2w7CisJdW5zaWduZWQJCWdjX3RocmVzaDsKKworCWludAkJCSgqZ2MpKHN0cnVjdCBkc3Rfb3BzICpvcHMpOworCXN0cnVjdCBkc3RfZW50cnkgKgkoKmNoZWNrKShzdHJ1Y3QgZHN0X2VudHJ5ICosIF9fdTMyIGNvb2tpZSk7CisJdm9pZAkJCSgqZGVzdHJveSkoc3RydWN0IGRzdF9lbnRyeSAqKTsKKwl2b2lkCQkJKCppZmRvd24pKHN0cnVjdCBkc3RfZW50cnkgKiwKKwkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaG93KTsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICoJKCpuZWdhdGl2ZV9hZHZpY2UpKHN0cnVjdCBkc3RfZW50cnkgKik7CisJdm9pZAkJCSgqbGlua19mYWlsdXJlKShzdHJ1Y3Qgc2tfYnVmZiAqKTsKKwl2b2lkCQkJKCp1cGRhdGVfcG10dSkoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgbXR1KTsKKwlpbnQJCQkoKmxvY2FsX291dCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwlhdG9taWNfdAkJZW50cmllczsKKwlzdHJ1Y3Qga21lbV9jYWNoZQkqa21lbV9jYWNoZXA7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCmluZGV4IDFiMGUzZWUuLjJhMWMwNjg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaAorKysgYi9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2dlbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KIAogLyoqCiAgKiBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgLSBnZW5lcmljIG5ldGxpbmsgbXVsdGljYXN0IGdyb3VwCkBAIC0yNyw2ICsyOCw4IEBACiAgKiBAbmFtZTogbmFtZSBvZiBmYW1pbHkKICAqIEB2ZXJzaW9uOiBwcm90b2NvbCB2ZXJzaW9uCiAgKiBAbWF4YXR0cjogbWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlcyBzdXBwb3J0ZWQKKyAqIEBuZXRuc29rOiBzZXQgdG8gdHJ1ZSBpZiB0aGUgZmFtaWx5IGNhbiBoYW5kbGUgbmV0d29yaworICoJbmFtZXNwYWNlcyBhbmQgc2hvdWxkIGJlIHByZXNlbnRlZCBpbiBhbGwgb2YgdGhlbQogICogQGF0dHJidWY6IGJ1ZmZlciB0byBzdG9yZSBwYXJzZWQgYXR0cmlidXRlcwogICogQG9wc19saXN0OiBsaXN0IG9mIGFsbCBhc3NpZ25lZCBvcGVyYXRpb25zCiAgKiBAZmFtaWx5X2xpc3Q6IGZhbWlseSBsaXN0CkBAIC0zOSw2ICs0Miw3IEBACiAJY2hhcgkJCW5hbWVbR0VOTF9OQU1TSVpdOwogCXVuc2lnbmVkIGludAkJdmVyc2lvbjsKIAl1bnNpZ25lZCBpbnQJCW1heGF0dHI7CisJYm9vbAkJCW5ldG5zb2s7CiAJc3RydWN0IG5sYXR0ciAqKglhdHRyYnVmOwkvKiBwcml2YXRlICovCiAJc3RydWN0IGxpc3RfaGVhZAlvcHNfbGlzdDsJLyogcHJpdmF0ZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQJZmFtaWx5X2xpc3Q7CS8qIHByaXZhdGUgKi8KQEAgLTYyLDggKzY2LDMyIEBACiAJc3RydWN0IGdlbmxtc2doZHIgKglnZW5saGRyOwogCXZvaWQgKgkJCXVzZXJoZHI7CiAJc3RydWN0IG5sYXR0ciAqKglhdHRyczsKKyNpZmRlZiBDT05GSUdfTkVUX05TCisJc3RydWN0IG5ldCAqCQlfbmV0OworI2VuZGlmCiB9OwogCisjaWZkZWYgQ09ORklHX05FVF9OUworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpnZW5sX2luZm9fbmV0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJcmV0dXJuIGluZm8tPl9uZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5sX2luZm9fbmV0X3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0ICpuZXQpCit7CisJaW5mby0+X25ldCA9IG5ldDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmdlbmxfaW5mb19uZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gJmluaXRfbmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VubF9pbmZvX25ldF9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldCAqbmV0KQoreworfQorI2VuZGlmCisKIC8qKgogICogc3RydWN0IGdlbmxfb3BzIC0gZ2VuZXJpYyBuZXRsaW5rIG9wZXJhdGlvbnMKICAqIEBjbWQ6IGNvbW1hbmQgaWRlbnRpZmllcgpAQCAtOTgsOCArMTI2LDYgQEAKIGV4dGVybiB2b2lkIGdlbmxfdW5yZWdpc3Rlcl9tY19ncm91cChzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSwKIAkJCQkgICAgIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCAqZ3JwKTsKIAotZXh0ZXJuIHN0cnVjdCBzb2NrICpnZW5sX3NvY2s7Ci0KIC8qKgogICogZ2VubG1zZ19wdXQgLSBBZGQgZ2VuZXJpYyBuZXRsaW5rIGhlYWRlciB0byBuZXRsaW5rIG1lc3NhZ2UKICAqIEBza2I6IHNvY2tldCBidWZmZXIgaG9sZGluZyB0aGUgbWVzc2FnZQpAQCAtMTcwLDcgKzE5NiwyMSBAQAogfQogCiAvKioKLSAqIGdlbmxtc2dfbXVsdGljYXN0IC0gbXVsdGljYXN0IGEgbmV0bGluayBtZXNzYWdlCisgKiBnZW5sbXNnX211bHRpY2FzdF9uZXRucyAtIG11bHRpY2FzdCBhIG5ldGxpbmsgbWVzc2FnZSB0byBhIHNwZWNpZmljIG5ldG5zCisgKiBAbmV0OiB0aGUgbmV0IG5hbWVzcGFjZQorICogQHNrYjogbmV0bGluayBtZXNzYWdlIGFzIHNvY2tldCBidWZmZXIKKyAqIEBwaWQ6IG93biBuZXRsaW5rIHBpZCB0byBhdm9pZCBzZW5kaW5nIHRvIHlvdXJzZWxmCisgKiBAZ3JvdXA6IG11bHRpY2FzdCBncm91cCBpZAorICogQGZsYWdzOiBhbGxvY2F0aW9uIGZsYWdzCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXAsIGdmcF90IGZsYWdzKQoreworCXJldHVybiBubG1zZ19tdWx0aWNhc3QobmV0LT5nZW5sX3NvY2ssIHNrYiwgcGlkLCBncm91cCwgZmxhZ3MpOworfQorCisvKioKKyAqIGdlbmxtc2dfbXVsdGljYXN0IC0gbXVsdGljYXN0IGEgbmV0bGluayBtZXNzYWdlIHRvIHRoZSBkZWZhdWx0IG5ldG5zCiAgKiBAc2tiOiBuZXRsaW5rIG1lc3NhZ2UgYXMgc29ja2V0IGJ1ZmZlcgogICogQHBpZDogb3duIG5ldGxpbmsgcGlkIHRvIGF2b2lkIHNlbmRpbmcgdG8geW91cnNlbGYKICAqIEBncm91cDogbXVsdGljYXN0IGdyb3VwIGlkCkBAIC0xNzksMTcgKzIxOSwyOSBAQAogc3RhdGljIGlubGluZSBpbnQgZ2VubG1zZ19tdWx0aWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwKIAkJCQkgICAgdW5zaWduZWQgaW50IGdyb3VwLCBnZnBfdCBmbGFncykKIHsKLQlyZXR1cm4gbmxtc2dfbXVsdGljYXN0KGdlbmxfc29jaywgc2tiLCBwaWQsIGdyb3VwLCBmbGFncyk7CisJcmV0dXJuIGdlbmxtc2dfbXVsdGljYXN0X25ldG5zKCZpbml0X25ldCwgc2tiLCBwaWQsIGdyb3VwLCBmbGFncyk7CiB9CiAKIC8qKgorICogZ2VubG1zZ19tdWx0aWNhc3RfYWxsbnMgLSBtdWx0aWNhc3QgYSBuZXRsaW5rIG1lc3NhZ2UgdG8gYWxsIG5ldCBuYW1lc3BhY2VzCisgKiBAc2tiOiBuZXRsaW5rIG1lc3NhZ2UgYXMgc29ja2V0IGJ1ZmZlcgorICogQHBpZDogb3duIG5ldGxpbmsgcGlkIHRvIGF2b2lkIHNlbmRpbmcgdG8geW91cnNlbGYKKyAqIEBncm91cDogbXVsdGljYXN0IGdyb3VwIGlkCisgKiBAZmxhZ3M6IGFsbG9jYXRpb24gZmxhZ3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgaG9sZCB0aGUgUlROTCBvciByY3VfcmVhZF9sb2NrKCkuCisgKi8KK2ludCBnZW5sbXNnX211bHRpY2FzdF9hbGxucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLAorCQkJICAgIHVuc2lnbmVkIGludCBncm91cCwgZ2ZwX3QgZmxhZ3MpOworCisvKioKICAqIGdlbmxtc2dfdW5pY2FzdCAtIHVuaWNhc3QgYSBuZXRsaW5rIG1lc3NhZ2UKICAqIEBza2I6IG5ldGxpbmsgbWVzc2FnZSBhcyBzb2NrZXQgYnVmZmVyCiAgKiBAcGlkOiBuZXRsaW5rIHBpZCBvZiB0aGUgZGVzdGluYXRpb24gc29ja2V0CiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdlbmxtc2dfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkKQorc3RhdGljIGlubGluZSBpbnQgZ2VubG1zZ191bmljYXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCkKIHsKLQlyZXR1cm4gbmxtc2dfdW5pY2FzdChnZW5sX3NvY2ssIHNrYiwgcGlkKTsKKwlyZXR1cm4gbmxtc2dfdW5pY2FzdChuZXQtPmdlbmxfc29jaywgc2tiLCBwaWQpOwogfQogCiAvKioKQEAgLTE5OSw3ICsyNTEsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBnZW5sbXNnX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0JcmV0dXJuIGdlbmxtc2dfdW5pY2FzdChza2IsIGluZm8tPnNuZF9waWQpOworCXJldHVybiBnZW5sbXNnX3VuaWNhc3QoZ2VubF9pbmZvX25ldChpbmZvKSwgc2tiLCBpbmZvLT5zbmRfcGlkKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTU0LmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTU0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyNjg1ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2llZWU4MDIxNTQuaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIElFRUU4MDIuMTUuNC0yMDAzIHNwZWNpZmljYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggU2llbWVucyBBRworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogV3JpdHRlbiBieToKKyAqIFBhdmVsIFNtb2xlbnNraXkgPHBhdmVsLnNtb2xlbnNraXlAZ21haWwuY29tPgorICogTWF4aW0gR29yYmFjaHlvdiA8bWF4aW0uZ29yYmFjaGV2QHNpZW1lbnMuY29tPgorICogTWF4aW0gT3NpcG92IDxtYXhpbS5vc2lwb3ZAc2llbWVucy5jb20+CisgKiBEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiA8ZGJhcnlzaGtvdkBnbWFpbC5jb20+CisgKi8KKworI2lmbmRlZiBORVRfSUVFRTgwMjE1NF9ICisjZGVmaW5lIE5FVF9JRUVFODAyMTU0X0gKKworI2RlZmluZSBJRUVFODAyMTU0X0ZDX1RZUEVfQkVBQ09OCTB4MAkvKiBGcmFtZSBpcyBiZWFjb24gKi8KKyNkZWZpbmUJSUVFRTgwMjE1NF9GQ19UWVBFX0RBVEEJCTB4MQkvKiBGcmFtZSBpcyBkYXRhICovCisjZGVmaW5lIElFRUU4MDIxNTRfRkNfVFlQRV9BQ0sJCTB4MgkvKiBGcmFtZSBpcyBhY2tub3dsZWRnbWVudCAqLworI2RlZmluZSBJRUVFODAyMTU0X0ZDX1RZUEVfTUFDX0NNRAkweDMJLyogRnJhbWUgaXMgTUFDIGNvbW1hbmQgKi8KKworI2RlZmluZSBJRUVFODAyMTU0X0ZDX1RZUEVfU0hJRlQJCTAKKyNkZWZpbmUgSUVFRTgwMjE1NF9GQ19UWVBFX01BU0sJCSgoMSA8PCAzKSAtIDEpCisjZGVmaW5lIElFRUU4MDIxNTRfRkNfVFlQRSh4KQkJKCh4ICYgSUVFRTgwMjE1NF9GQ19UWVBFX01BU0spID4+IElFRUU4MDIxNTRfRkNfVFlQRV9TSElGVCkKKyNkZWZpbmUgSUVFRTgwMjE1NF9GQ19TRVRfVFlQRSh2LCB4KQlkbyB7CVwKKwl2ID0gKCgodikgJiB+SUVFRTgwMjE1NF9GQ19UWVBFX01BU0spIHwgXAorCSAgICAoKCh4KSA8PCBJRUVFODAyMTU0X0ZDX1RZUEVfU0hJRlQpICYgSUVFRTgwMjE1NF9GQ19UWVBFX01BU0spKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgSUVFRTgwMjE1NF9GQ19TRUNFTgkJKDEgPDwgMykKKyNkZWZpbmUgSUVFRTgwMjE1NF9GQ19GUlBFTkQJCSgxIDw8IDQpCisjZGVmaW5lIElFRUU4MDIxNTRfRkNfQUNLX1JFUQkJKDEgPDwgNSkKKyNkZWZpbmUgSUVFRTgwMjE1NF9GQ19JTlRSQV9QQU4JCSgxIDw8IDYpCisKKyNkZWZpbmUgSUVFRTgwMjE1NF9GQ19TQU1PREVfU0hJRlQJMTQKKyNkZWZpbmUgSUVFRTgwMjE1NF9GQ19TQU1PREVfTUFTSwkoMyA8PCBJRUVFODAyMTU0X0ZDX1NBTU9ERV9TSElGVCkKKyNkZWZpbmUgSUVFRTgwMjE1NF9GQ19EQU1PREVfU0hJRlQJMTAKKyNkZWZpbmUgSUVFRTgwMjE1NF9GQ19EQU1PREVfTUFTSwkoMyA8PCBJRUVFODAyMTU0X0ZDX0RBTU9ERV9TSElGVCkKKworI2RlZmluZSBJRUVFODAyMTU0X0ZDX1NBTU9ERSh4KQkJXAorCSgoKHgpICYgSUVFRTgwMjE1NF9GQ19TQU1PREVfTUFTSykgPj4gSUVFRTgwMjE1NF9GQ19TQU1PREVfU0hJRlQpCisKKyNkZWZpbmUgSUVFRTgwMjE1NF9GQ19EQU1PREUoeCkJCVwKKwkoKCh4KSAmIElFRUU4MDIxNTRfRkNfREFNT0RFX01BU0spID4+IElFRUU4MDIxNTRfRkNfREFNT0RFX1NISUZUKQorCisKKy8qIE1BQydzIENvbW1hbmQgRnJhbWVzIElkZW50aWZpZXJzICovCisjZGVmaW5lIElFRUU4MDIxNTRfQ01EX0FTU09DSUFUSU9OX1JFUQkJMHgwMQorI2RlZmluZSBJRUVFODAyMTU0X0NNRF9BU1NPQ0lBVElPTl9SRVNQCQkweDAyCisjZGVmaW5lIElFRUU4MDIxNTRfQ01EX0RJU0FTU09DSUFUSU9OX05PVElGWQkweDAzCisjZGVmaW5lIElFRUU4MDIxNTRfQ01EX0RBVEFfUkVRCQkJMHgwNAorI2RlZmluZSBJRUVFODAyMTU0X0NNRF9QQU5JRF9DT05GTElDVF9OT1RJRlkJMHgwNQorI2RlZmluZSBJRUVFODAyMTU0X0NNRF9PUlBIQU5fTk9USUZZCQkweDA2CisjZGVmaW5lIElFRUU4MDIxNTRfQ01EX0JFQUNPTl9SRVEJCTB4MDcKKyNkZWZpbmUgSUVFRTgwMjE1NF9DTURfQ09PUkRfUkVBTElHTl9OT1RJRlkJMHgwOAorI2RlZmluZSBJRUVFODAyMTU0X0NNRF9HVFNfUkVRCQkJMHgwOQorCisvKgorICogVGhlIHJldHVybiB2YWx1ZXMgb2YgTUFDIG9wZXJhdGlvbnMKKyAqLworZW51bSB7CisJLyoKKwkgKiBUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiB3YXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KKwkgKiBGb3IgYSB0cmFuc21pc3Npb24gcmVxdWVzdCwgdGhpcyB2YWx1ZSBpbmRpY2F0ZXMKKwkgKiBhIHN1Y2Nlc3NmdWwgdHJhbnNtaXNzaW9uLgorCSAqLworCUlFRUU4MDIxNTRfU1VDQ0VTUyA9IDB4MCwKKworCS8qIFRoZSBiZWFjb24gd2FzIGxvc3QgZm9sbG93aW5nIGEgc3luY2hyb25pemF0aW9uIHJlcXVlc3QuICovCisJSUVFRTgwMjE1NF9CRUFDT05fTE9TUyA9IDB4ZTAsCisJLyoKKwkgKiBBIHRyYW5zbWlzc2lvbiBjb3VsZCBub3QgdGFrZSBwbGFjZSBkdWUgdG8gYWN0aXZpdHkgb24gdGhlCisJICogY2hhbm5lbCwgaS5lLiwgdGhlIENTTUEtQ0EgbWVjaGFuaXNtIGhhcyBmYWlsZWQuCisJICovCisJSUVFRTgwMjE1NF9DSE5MX0FDQ0VTU19GQUlMID0gMHhlMSwKKwkvKiBUaGUgR1RTIHJlcXVlc3QgaGFzIGJlZW4gZGVuaWVkIGJ5IHRoZSBQQU4gY29vcmRpbmF0b3IuICovCisJSUVFRTgwMjE1NF9ERU5JTkVEID0gMHhlMiwKKwkvKiBUaGUgYXR0ZW1wdCB0byBkaXNhYmxlIHRoZSB0cmFuc2NlaXZlciBoYXMgZmFpbGVkLiAqLworCUlFRUU4MDIxNTRfRElTQUJMRV9UUlhfRkFJTCA9IDB4ZTMsCisJLyoKKwkgKiBUaGUgcmVjZWl2ZWQgZnJhbWUgaW5kdWNlcyBhIGZhaWxlZCBzZWN1cml0eSBjaGVjayBhY2NvcmRpbmcgdG8KKwkgKiB0aGUgc2VjdXJpdHkgc3VpdGUuCisJICovCisJSUVFRTgwMjE1NF9GQUlMRURfU0VDVVJJVFlfQ0hFQ0sgPSAweGU0LAorCS8qCisJICogVGhlIGZyYW1lIHJlc3VsdGluZyBmcm9tIHNlY3VyZSBwcm9jZXNzaW5nIGhhcyBhIGxlbmd0aCB0aGF0IGlzCisJICogZ3JlYXRlciB0aGFuIGFNQUNNYXhGcmFtZVNpemUuCisJICovCisJSUVFRTgwMjE1NF9GUkFNRV9UT09fTE9ORyA9IDB4ZTUsCisJLyoKKwkgKiBUaGUgcmVxdWVzdGVkIEdUUyB0cmFuc21pc3Npb24gZmFpbGVkIGJlY2F1c2UgdGhlIHNwZWNpZmllZCBHVFMKKwkgKiBlaXRoZXIgZGlkIG5vdCBoYXZlIGEgdHJhbnNtaXQgR1RTIGRpcmVjdGlvbiBvciB3YXMgbm90IGRlZmluZWQuCisJICovCisJSUVFRTgwMjE1NF9JTlZBTElEX0dUUyA9IDB4ZTYsCisJLyoKKwkgKiBBIHJlcXVlc3QgdG8gcHVyZ2UgYW4gTVNEVSBmcm9tIHRoZSB0cmFuc2FjdGlvbiBxdWV1ZSB3YXMgbWFkZSB1c2luZworCSAqIGFuIE1TRFUgaGFuZGxlIHRoYXQgd2FzIG5vdCBmb3VuZCBpbiB0aGUgdHJhbnNhY3Rpb24gdGFibGUuCisJICovCisJSUVFRTgwMjE1NF9JTlZBTElEX0hBTkRMRSA9IDB4ZTcsCisJLyogQSBwYXJhbWV0ZXIgaW4gdGhlIHByaW1pdGl2ZSBpcyBvdXQgb2YgdGhlIHZhbGlkIHJhbmdlLiovCisJSUVFRTgwMjE1NF9JTlZBTElEX1BBUkFNRVRFUiA9IDB4ZTgsCisJLyogTm8gYWNrbm93bGVkZ21lbnQgd2FzIHJlY2VpdmVkIGFmdGVyIGFNYXhGcmFtZVJldHJpZXMuICovCisJSUVFRTgwMjE1NF9OT19BQ0sgPSAweGU5LAorCS8qIEEgc2NhbiBvcGVyYXRpb24gZmFpbGVkIHRvIGZpbmQgYW55IG5ldHdvcmsgYmVhY29ucy4qLworCUlFRUU4MDIxNTRfTk9fQkVBQ09OID0gMHhlYSwKKwkvKiBObyByZXNwb25zZSBkYXRhIHdlcmUgYXZhaWxhYmxlIGZvbGxvd2luZyBhIHJlcXVlc3QuICovCisJSUVFRTgwMjE1NF9OT19EQVRBID0gMHhlYiwKKwkvKiBUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIGEgc2hvcnQgYWRkcmVzcyB3YXMgbm90IGFsbG9jYXRlZC4gKi8KKwlJRUVFODAyMTU0X05PX1NIT1JUX0FERFJFU1MgPSAweGVjLAorCS8qCisJICogQSByZWNlaXZlciBlbmFibGUgcmVxdWVzdCB3YXMgdW5zdWNjZXNzZnVsIGJlY2F1c2UgaXQgY291bGQgbm90IGJlCisJICogY29tcGxldGVkIHdpdGhpbiB0aGUgQ0FQLgorCSAqLworCUlFRUU4MDIxNTRfT1VUX09GX0NBUCA9IDB4ZWQsCisJLyoKKwkgKiBBIFBBTiBpZGVudGlmaWVyIGNvbmZsaWN0IGhhcyBiZWVuIGRldGVjdGVkIGFuZCBjb21tdW5pY2F0ZWQgdG8gdGhlCisJICogUEFOIGNvb3JkaW5hdG9yLgorCSAqLworCUlFRUU4MDIxNTRfUEFOSURfQ09ORkxJQ1QgPSAweGVlLAorCS8qIEEgY29vcmRpbmF0b3IgcmVhbGlnbm1lbnQgY29tbWFuZCBoYXMgYmVlbiByZWNlaXZlZC4gKi8KKwlJRUVFODAyMTU0X1JFQUxJR01FTlQgPSAweGVmLAorCS8qIFRoZSB0cmFuc2FjdGlvbiBoYXMgZXhwaXJlZCBhbmQgaXRzIGluZm9ybWF0aW9uIGRpc2NhcmRlZC4gKi8KKwlJRUVFODAyMTU0X1RSQU5TQUNUSU9OX0VYUElSRUQgPSAweGYwLAorCS8qIFRoZXJlIGlzIG5vIGNhcGFjaXR5IHRvIHN0b3JlIHRoZSB0cmFuc2FjdGlvbi4gKi8KKwlJRUVFODAyMTU0X1RSQU5TQUNUSU9OX09WRVJGTE9XID0gMHhmMSwKKwkvKgorCSAqIFRoZSB0cmFuc2NlaXZlciB3YXMgaW4gdGhlIHRyYW5zbWl0dGVyIGVuYWJsZWQgc3RhdGUgd2hlbiB0aGUKKwkgKiByZWNlaXZlciB3YXMgcmVxdWVzdGVkIHRvIGJlIGVuYWJsZWQuCisJICovCisJSUVFRTgwMjE1NF9UWF9BQ1RJVkUgPSAweGYyLAorCS8qIFRoZSBhcHByb3ByaWF0ZSBrZXkgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgQUNMLiAqLworCUlFRUU4MDIxNTRfVU5BVkFJTEFCTEVfS0VZID0gMHhmMywKKwkvKgorCSAqIEEgU0VUL0dFVCByZXF1ZXN0IHdhcyBpc3N1ZWQgd2l0aCB0aGUgaWRlbnRpZmllciBvZiBhIFBJQiBhdHRyaWJ1dGUKKwkgKiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQuCisJICovCisJSUVFRTgwMjE1NF9VTlNVUFBPUlRFRF9BVFRSID0gMHhmNCwKKwkvKgorCSAqIEEgcmVxdWVzdCB0byBwZXJmb3JtIGEgc2NhbiBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIE1MTUUgd2FzCisJICogaW4gdGhlIHByb2Nlc3Mgb2YgcGVyZm9ybWluZyBhIHByZXZpb3VzbHkgaW5pdGlhdGVkIHNjYW4gb3BlcmF0aW9uLgorCSAqLworCUlFRUU4MDIxNTRfU0NBTl9JTl9QUk9HUkVTUyA9IDB4ZmMsCit9OworCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjE1NC9hZl9pZWVlODAyMTU0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNzg2MDUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjE1NC9hZl9pZWVlODAyMTU0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogSUVFRSA4MDIuMTUuNCBpbnRlZmFjZSBmb3IgdXNlcnNwYWNlCi0gKgotICogQ29weXJpZ2h0IDIwMDcsIDIwMDggU2llbWVucyBBRwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICogV3JpdHRlbiBieToKLSAqIFNlcmdleSBMYXBpbiA8c2xhcGluQG9zc2ZhbnMub3JnPgotICogRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPgotICovCi0KLSNpZm5kZWYgX0FGX0lFRUU4MDIxNTRfSAotI2RlZmluZSBfQUZfSUVFRTgwMjE1NF9ICi0KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4gLyogZm9yIHNhX2ZhbWlseV90ICovCi0KLWVudW0gewotCUlFRUU4MDIxNTRfQUREUl9OT05FID0gMHgwLAotCS8qIFJFU0VSVkVEID0gMHgwMSwgKi8KLQlJRUVFODAyMTU0X0FERFJfU0hPUlQgPSAweDIsIC8qIDE2LWJpdCBhZGRyZXNzICsgUEFOaWQgKi8KLQlJRUVFODAyMTU0X0FERFJfTE9ORyA9IDB4MywgLyogNjQtYml0IGFkZHJlc3MgKyBQQU5pZCAqLwotfTsKLQotLyogYWRkcmVzcyBsZW5ndGgsIG9jdGV0cyAqLwotI2RlZmluZSBJRUVFODAyMTU0X0FERFJfTEVOCTgKLQotc3RydWN0IGllZWU4MDIxNTRfYWRkciB7Ci0JaW50IGFkZHJfdHlwZTsKLQl1MTYgcGFuX2lkOwotCXVuaW9uIHsKLQkJdTggaHdhZGRyW0lFRUU4MDIxNTRfQUREUl9MRU5dOwotCQl1MTYgc2hvcnRfYWRkcjsKLQl9OwotfTsKLQotI2RlZmluZSBJRUVFODAyMTU0X1BBTklEX0JST0FEQ0FTVAkweGZmZmYKLSNkZWZpbmUgSUVFRTgwMjE1NF9BRERSX0JST0FEQ0FTVAkweGZmZmYKLSNkZWZpbmUgSUVFRTgwMjE1NF9BRERSX1VOREVGCQkweGZmZmUKLQotc3RydWN0IHNvY2thZGRyX2llZWU4MDIxNTQgewotCXNhX2ZhbWlseV90IGZhbWlseTsgLyogQUZfSUVFRTgwMjE1NCAqLwotCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgYWRkcjsKLX07Ci0KLS8qIG1hc3RlciBkZXZpY2UgKi8KLSNkZWZpbmUgSUVFRTgwMjE1NF9TSU9DX0FERF9TTEFWRQkJKFNJT0NERVZQUklWQVRFICsgMCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTU0L21hY19kZWYuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxNTQvbWFjX2RlZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2I2ODQ2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbmV0L2llZWU4MDIxNTQvbWFjX2RlZi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0gKiBJRUVFODAyLjE1LjQtMjAwMyBzcGVjaWZpY2F0aW9uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IFNpZW1lbnMgQUcKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICoKLSAqIFdyaXR0ZW4gYnk6Ci0gKiBQYXZlbCBTbW9sZW5za2l5IDxwYXZlbC5zbW9sZW5za2l5QGdtYWlsLmNvbT4KLSAqIE1heGltIEdvcmJhY2h5b3YgPG1heGltLmdvcmJhY2hldkBzaWVtZW5zLmNvbT4KLSAqIE1heGltIE9zaXBvdiA8bWF4aW0ub3NpcG92QHNpZW1lbnMuY29tPgotICogRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPgotICovCi0KLSNpZm5kZWYgSUVFRTgwMjE1NF9NQUNfREVGX0gKLSNkZWZpbmUgSUVFRTgwMjE1NF9NQUNfREVGX0gKLQotI2RlZmluZSBJRUVFODAyMTU0X0ZDX1RZUEVfQkVBQ09OCTB4MAkvKiBGcmFtZSBpcyBiZWFjb24gKi8KLSNkZWZpbmUJSUVFRTgwMjE1NF9GQ19UWVBFX0RBVEEJCTB4MQkvKiBGcmFtZSBpcyBkYXRhICovCi0jZGVmaW5lIElFRUU4MDIxNTRfRkNfVFlQRV9BQ0sJCTB4MgkvKiBGcmFtZSBpcyBhY2tub3dsZWRnbWVudCAqLwotI2RlZmluZSBJRUVFODAyMTU0X0ZDX1RZUEVfTUFDX0NNRAkweDMJLyogRnJhbWUgaXMgTUFDIGNvbW1hbmQgKi8KLQotI2RlZmluZSBJRUVFODAyMTU0X0ZDX1RZUEVfU0hJRlQJCTAKLSNkZWZpbmUgSUVFRTgwMjE1NF9GQ19UWVBFX01BU0sJCSgoMSA8PCAzKSAtIDEpCi0jZGVmaW5lIElFRUU4MDIxNTRfRkNfVFlQRSh4KQkJKCh4ICYgSUVFRTgwMjE1NF9GQ19UWVBFX01BU0spID4+IElFRUU4MDIxNTRfRkNfVFlQRV9TSElGVCkKLSNkZWZpbmUgSUVFRTgwMjE1NF9GQ19TRVRfVFlQRSh2LCB4KQlkbyB7CVwKLQl2ID0gKCgodikgJiB+SUVFRTgwMjE1NF9GQ19UWVBFX01BU0spIHwgXAotCSAgICAoKCh4KSA8PCBJRUVFODAyMTU0X0ZDX1RZUEVfU0hJRlQpICYgSUVFRTgwMjE1NF9GQ19UWVBFX01BU0spKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgSUVFRTgwMjE1NF9GQ19TRUNFTgkJKDEgPDwgMykKLSNkZWZpbmUgSUVFRTgwMjE1NF9GQ19GUlBFTkQJCSgxIDw8IDQpCi0jZGVmaW5lIElFRUU4MDIxNTRfRkNfQUNLX1JFUQkJKDEgPDwgNSkKLSNkZWZpbmUgSUVFRTgwMjE1NF9GQ19JTlRSQV9QQU4JCSgxIDw8IDYpCi0KLSNkZWZpbmUgSUVFRTgwMjE1NF9GQ19TQU1PREVfU0hJRlQJMTQKLSNkZWZpbmUgSUVFRTgwMjE1NF9GQ19TQU1PREVfTUFTSwkoMyA8PCBJRUVFODAyMTU0X0ZDX1NBTU9ERV9TSElGVCkKLSNkZWZpbmUgSUVFRTgwMjE1NF9GQ19EQU1PREVfU0hJRlQJMTAKLSNkZWZpbmUgSUVFRTgwMjE1NF9GQ19EQU1PREVfTUFTSwkoMyA8PCBJRUVFODAyMTU0X0ZDX0RBTU9ERV9TSElGVCkKLQotI2RlZmluZSBJRUVFODAyMTU0X0ZDX1NBTU9ERSh4KQkJXAotCSgoKHgpICYgSUVFRTgwMjE1NF9GQ19TQU1PREVfTUFTSykgPj4gSUVFRTgwMjE1NF9GQ19TQU1PREVfU0hJRlQpCi0KLSNkZWZpbmUgSUVFRTgwMjE1NF9GQ19EQU1PREUoeCkJCVwKLQkoKCh4KSAmIElFRUU4MDIxNTRfRkNfREFNT0RFX01BU0spID4+IElFRUU4MDIxNTRfRkNfREFNT0RFX1NISUZUKQotCi0KLS8qIE1BQydzIENvbW1hbmQgRnJhbWVzIElkZW50aWZpZXJzICovCi0jZGVmaW5lIElFRUU4MDIxNTRfQ01EX0FTU09DSUFUSU9OX1JFUQkJMHgwMQotI2RlZmluZSBJRUVFODAyMTU0X0NNRF9BU1NPQ0lBVElPTl9SRVNQCQkweDAyCi0jZGVmaW5lIElFRUU4MDIxNTRfQ01EX0RJU0FTU09DSUFUSU9OX05PVElGWQkweDAzCi0jZGVmaW5lIElFRUU4MDIxNTRfQ01EX0RBVEFfUkVRCQkJMHgwNAotI2RlZmluZSBJRUVFODAyMTU0X0NNRF9QQU5JRF9DT05GTElDVF9OT1RJRlkJMHgwNQotI2RlZmluZSBJRUVFODAyMTU0X0NNRF9PUlBIQU5fTk9USUZZCQkweDA2Ci0jZGVmaW5lIElFRUU4MDIxNTRfQ01EX0JFQUNPTl9SRVEJCTB4MDcKLSNkZWZpbmUgSUVFRTgwMjE1NF9DTURfQ09PUkRfUkVBTElHTl9OT1RJRlkJMHgwOAotI2RlZmluZSBJRUVFODAyMTU0X0NNRF9HVFNfUkVRCQkJMHgwOQotCi0vKgotICogVGhlIHJldHVybiB2YWx1ZXMgb2YgTUFDIG9wZXJhdGlvbnMKLSAqLwotZW51bSB7Ci0JLyoKLQkgKiBUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiB3YXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KLQkgKiBGb3IgYSB0cmFuc21pc3Npb24gcmVxdWVzdCwgdGhpcyB2YWx1ZSBpbmRpY2F0ZXMKLQkgKiBhIHN1Y2Nlc3NmdWwgdHJhbnNtaXNzaW9uLgotCSAqLwotCUlFRUU4MDIxNTRfU1VDQ0VTUyA9IDB4MCwKLQotCS8qIFRoZSBiZWFjb24gd2FzIGxvc3QgZm9sbG93aW5nIGEgc3luY2hyb25pemF0aW9uIHJlcXVlc3QuICovCi0JSUVFRTgwMjE1NF9CRUFDT05fTE9TUyA9IDB4ZTAsCi0JLyoKLQkgKiBBIHRyYW5zbWlzc2lvbiBjb3VsZCBub3QgdGFrZSBwbGFjZSBkdWUgdG8gYWN0aXZpdHkgb24gdGhlCi0JICogY2hhbm5lbCwgaS5lLiwgdGhlIENTTUEtQ0EgbWVjaGFuaXNtIGhhcyBmYWlsZWQuCi0JICovCi0JSUVFRTgwMjE1NF9DSE5MX0FDQ0VTU19GQUlMID0gMHhlMSwKLQkvKiBUaGUgR1RTIHJlcXVlc3QgaGFzIGJlZW4gZGVuaWVkIGJ5IHRoZSBQQU4gY29vcmRpbmF0b3IuICovCi0JSUVFRTgwMjE1NF9ERU5JTkVEID0gMHhlMiwKLQkvKiBUaGUgYXR0ZW1wdCB0byBkaXNhYmxlIHRoZSB0cmFuc2NlaXZlciBoYXMgZmFpbGVkLiAqLwotCUlFRUU4MDIxNTRfRElTQUJMRV9UUlhfRkFJTCA9IDB4ZTMsCi0JLyoKLQkgKiBUaGUgcmVjZWl2ZWQgZnJhbWUgaW5kdWNlcyBhIGZhaWxlZCBzZWN1cml0eSBjaGVjayBhY2NvcmRpbmcgdG8KLQkgKiB0aGUgc2VjdXJpdHkgc3VpdGUuCi0JICovCi0JSUVFRTgwMjE1NF9GQUlMRURfU0VDVVJJVFlfQ0hFQ0sgPSAweGU0LAotCS8qCi0JICogVGhlIGZyYW1lIHJlc3VsdGluZyBmcm9tIHNlY3VyZSBwcm9jZXNzaW5nIGhhcyBhIGxlbmd0aCB0aGF0IGlzCi0JICogZ3JlYXRlciB0aGFuIGFNQUNNYXhGcmFtZVNpemUuCi0JICovCi0JSUVFRTgwMjE1NF9GUkFNRV9UT09fTE9ORyA9IDB4ZTUsCi0JLyoKLQkgKiBUaGUgcmVxdWVzdGVkIEdUUyB0cmFuc21pc3Npb24gZmFpbGVkIGJlY2F1c2UgdGhlIHNwZWNpZmllZCBHVFMKLQkgKiBlaXRoZXIgZGlkIG5vdCBoYXZlIGEgdHJhbnNtaXQgR1RTIGRpcmVjdGlvbiBvciB3YXMgbm90IGRlZmluZWQuCi0JICovCi0JSUVFRTgwMjE1NF9JTlZBTElEX0dUUyA9IDB4ZTYsCi0JLyoKLQkgKiBBIHJlcXVlc3QgdG8gcHVyZ2UgYW4gTVNEVSBmcm9tIHRoZSB0cmFuc2FjdGlvbiBxdWV1ZSB3YXMgbWFkZSB1c2luZwotCSAqIGFuIE1TRFUgaGFuZGxlIHRoYXQgd2FzIG5vdCBmb3VuZCBpbiB0aGUgdHJhbnNhY3Rpb24gdGFibGUuCi0JICovCi0JSUVFRTgwMjE1NF9JTlZBTElEX0hBTkRMRSA9IDB4ZTcsCi0JLyogQSBwYXJhbWV0ZXIgaW4gdGhlIHByaW1pdGl2ZSBpcyBvdXQgb2YgdGhlIHZhbGlkIHJhbmdlLiovCi0JSUVFRTgwMjE1NF9JTlZBTElEX1BBUkFNRVRFUiA9IDB4ZTgsCi0JLyogTm8gYWNrbm93bGVkZ21lbnQgd2FzIHJlY2VpdmVkIGFmdGVyIGFNYXhGcmFtZVJldHJpZXMuICovCi0JSUVFRTgwMjE1NF9OT19BQ0sgPSAweGU5LAotCS8qIEEgc2NhbiBvcGVyYXRpb24gZmFpbGVkIHRvIGZpbmQgYW55IG5ldHdvcmsgYmVhY29ucy4qLwotCUlFRUU4MDIxNTRfTk9fQkVBQ09OID0gMHhlYSwKLQkvKiBObyByZXNwb25zZSBkYXRhIHdlcmUgYXZhaWxhYmxlIGZvbGxvd2luZyBhIHJlcXVlc3QuICovCi0JSUVFRTgwMjE1NF9OT19EQVRBID0gMHhlYiwKLQkvKiBUaGUgb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIGEgc2hvcnQgYWRkcmVzcyB3YXMgbm90IGFsbG9jYXRlZC4gKi8KLQlJRUVFODAyMTU0X05PX1NIT1JUX0FERFJFU1MgPSAweGVjLAotCS8qCi0JICogQSByZWNlaXZlciBlbmFibGUgcmVxdWVzdCB3YXMgdW5zdWNjZXNzZnVsIGJlY2F1c2UgaXQgY291bGQgbm90IGJlCi0JICogY29tcGxldGVkIHdpdGhpbiB0aGUgQ0FQLgotCSAqLwotCUlFRUU4MDIxNTRfT1VUX09GX0NBUCA9IDB4ZWQsCi0JLyoKLQkgKiBBIFBBTiBpZGVudGlmaWVyIGNvbmZsaWN0IGhhcyBiZWVuIGRldGVjdGVkIGFuZCBjb21tdW5pY2F0ZWQgdG8gdGhlCi0JICogUEFOIGNvb3JkaW5hdG9yLgotCSAqLwotCUlFRUU4MDIxNTRfUEFOSURfQ09ORkxJQ1QgPSAweGVlLAotCS8qIEEgY29vcmRpbmF0b3IgcmVhbGlnbm1lbnQgY29tbWFuZCBoYXMgYmVlbiByZWNlaXZlZC4gKi8KLQlJRUVFODAyMTU0X1JFQUxJR01FTlQgPSAweGVmLAotCS8qIFRoZSB0cmFuc2FjdGlvbiBoYXMgZXhwaXJlZCBhbmQgaXRzIGluZm9ybWF0aW9uIGRpc2NhcmRlZC4gKi8KLQlJRUVFODAyMTU0X1RSQU5TQUNUSU9OX0VYUElSRUQgPSAweGYwLAotCS8qIFRoZXJlIGlzIG5vIGNhcGFjaXR5IHRvIHN0b3JlIHRoZSB0cmFuc2FjdGlvbi4gKi8KLQlJRUVFODAyMTU0X1RSQU5TQUNUSU9OX09WRVJGTE9XID0gMHhmMSwKLQkvKgotCSAqIFRoZSB0cmFuc2NlaXZlciB3YXMgaW4gdGhlIHRyYW5zbWl0dGVyIGVuYWJsZWQgc3RhdGUgd2hlbiB0aGUKLQkgKiByZWNlaXZlciB3YXMgcmVxdWVzdGVkIHRvIGJlIGVuYWJsZWQuCi0JICovCi0JSUVFRTgwMjE1NF9UWF9BQ1RJVkUgPSAweGYyLAotCS8qIFRoZSBhcHByb3ByaWF0ZSBrZXkgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgQUNMLiAqLwotCUlFRUU4MDIxNTRfVU5BVkFJTEFCTEVfS0VZID0gMHhmMywKLQkvKgotCSAqIEEgU0VUL0dFVCByZXF1ZXN0IHdhcyBpc3N1ZWQgd2l0aCB0aGUgaWRlbnRpZmllciBvZiBhIFBJQiBhdHRyaWJ1dGUKLQkgKiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQuCi0JICovCi0JSUVFRTgwMjE1NF9VTlNVUFBPUlRFRF9BVFRSID0gMHhmNCwKLQkvKgotCSAqIEEgcmVxdWVzdCB0byBwZXJmb3JtIGEgc2NhbiBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIE1MTUUgd2FzCi0JICogaW4gdGhlIHByb2Nlc3Mgb2YgcGVyZm9ybWluZyBhIHByZXZpb3VzbHkgaW5pdGlhdGVkIHNjYW4gb3BlcmF0aW9uLgotCSAqLwotCUlFRUU4MDIxNTRfU0NBTl9JTl9QUk9HUkVTUyA9IDB4ZmMsCi19OwotCi0KLSNlbmRpZgotCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxNTQvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTU0L25ldGRldmljZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjUwNmFmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbmV0L2llZWU4MDIxNTQvbmV0ZGV2aWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIEFuIGludGVyZmFjZSBiZXR3ZWVuIElFRUU4MDIuMTUuNCBkZXZpY2UgYW5kIHJlc3Qgb2YgdGhlIGtlcm5lbC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgU2llbWVucyBBRwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICogV3JpdHRlbiBieToKLSAqIFBhdmVsIFNtb2xlbnNraXkgPHBhdmVsLnNtb2xlbnNraXlAZ21haWwuY29tPgotICogTWF4aW0gR29yYmFjaHlvdiA8bWF4aW0uZ29yYmFjaGV2QHNpZW1lbnMuY29tPgotICogTWF4aW0gT3NpcG92IDxtYXhpbS5vc2lwb3ZAc2llbWVucy5jb20+Ci0gKiBEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiA8ZGJhcnlzaGtvdkBnbWFpbC5jb20+Ci0gKi8KLQotI2lmbmRlZiBJRUVFODAyMTU0X05FVERFVklDRV9ICi0jZGVmaW5lIElFRUU4MDIxNTRfTkVUREVWSUNFX0gKLQotLyoKLSAqIEEgY29udHJvbCBibG9jayBvZiBza2IgcGFzc2VkIGJldHdlZW4gdGhlIEFSUEhSRF9JRUVFODAyMTU0IGRldmljZQotICogYW5kIG90aGVyIHN0YWNrIHBhcnRzLgotICovCi1zdHJ1Y3QgaWVlZTgwMjE1NF9tYWNfY2IgewotCXU4IGxxaTsKLQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyIHNhOwotCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgZGE7Ci0JdTggZmxhZ3M7Ci0JdTggc2VxOwotfTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjE1NF9tYWNfY2IgKm1hY19jYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiAoc3RydWN0IGllZWU4MDIxNTRfbWFjX2NiICopc2tiLT5jYjsKLX0KLQotI2RlZmluZSBNQUNfQ0JfRkxBR19UWVBFTUFTSwkJKCgxIDw8IDMpIC0gMSkKLQotI2RlZmluZSBNQUNfQ0JfRkxBR19BQ0tSRVEJCSgxIDw8IDMpCi0jZGVmaW5lIE1BQ19DQl9GTEFHX1NFQ0VOCQkoMSA8PCA0KQotI2RlZmluZSBNQUNfQ0JfRkxBR19JTlRSQVBBTgkJKDEgPDwgNSkKLQotc3RhdGljIGlubGluZSBpbnQgbWFjX2NiX2lzX2Fja3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiBtYWNfY2Ioc2tiKS0+ZmxhZ3MgJiBNQUNfQ0JfRkxBR19BQ0tSRVE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1hY19jYl9pc19zZWNlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiBtYWNfY2Ioc2tiKS0+ZmxhZ3MgJiBNQUNfQ0JfRkxBR19TRUNFTjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbWFjX2NiX2lzX2ludHJhcGFuKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JcmV0dXJuIG1hY19jYihza2IpLT5mbGFncyAmIE1BQ19DQl9GTEFHX0lOVFJBUEFOOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtYWNfY2JfdHlwZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiBtYWNfY2Ioc2tiKS0+ZmxhZ3MgJiBNQUNfQ0JfRkxBR19UWVBFTUFTSzsKLX0KLQotI2RlZmluZSBJRUVFODAyMTU0X01BQ19TQ0FOX0VECQkwCi0jZGVmaW5lIElFRUU4MDIxNTRfTUFDX1NDQU5fQUNUSVZFCTEKLSNkZWZpbmUgSUVFRTgwMjE1NF9NQUNfU0NBTl9QQVNTSVZFCTIKLSNkZWZpbmUgSUVFRTgwMjE1NF9NQUNfU0NBTl9PUlBIQU4JMwotCi0vKgotICogVGhpcyBzaG91bGQgYmUgbG9jYXRlZCBhdCBuZXRfZGV2aWNlLT5tbF9wcml2Ci0gKi8KLXN0cnVjdCBpZWVlODAyMTU0X21sbWVfb3BzIHsKLQlpbnQgKCphc3NvY19yZXEpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICphZGRyLAotCQkJdTggY2hhbm5lbCwgdTggY2FwKTsKLQlpbnQgKCphc3NvY19yZXNwKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkciwKLQkJCXUxNiBzaG9ydF9hZGRyLCB1OCBzdGF0dXMpOwotCWludCAoKmRpc2Fzc29jX3JlcSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgKmFkZHIsCi0JCQl1OCByZWFzb24pOwotCWludCAoKnN0YXJ0X3JlcSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgKmFkZHIsCi0JCQl1OCBjaGFubmVsLCB1OCBiY25fb3JkLCB1OCBzZl9vcmQsCi0JCQl1OCBwYW5fY29vcmQsIHU4IGJseCwgdTggY29vcmRfcmVhbGlnbik7Ci0JaW50ICgqc2Nhbl9yZXEpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQl1OCB0eXBlLCB1MzIgY2hhbm5lbHMsIHU4IGR1cmF0aW9uKTsKLQotCS8qCi0JICogRklYTUU6IHRoZXNlIHNob3VsZCBiZWNvbWUgdGhlIHBhcnQgb2YgUElCL01JQiBpbnRlcmZhY2UuCi0JICogSG93ZXZlciB3ZSBzdGlsbCBkb24ndCBoYXZlIElCIGludGVyZmFjZSBvZiBhbnkga2luZAotCSAqLwotCXUxNiAoKmdldF9wYW5faWQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCXUxNiAoKmdldF9zaG9ydF9hZGRyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQl1OCAoKmdldF9kc24pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCXU4ICgqZ2V0X2Jzbikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci19OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTU0X21sbWVfb3BzICppZWVlODAyMTU0X21sbWVfb3BzKAotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiBkZXYtPm1sX3ByaXY7Ci19Ci0KLSNlbmRpZgotCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhlZmNkZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTU0L25sODAyMTU0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogbmw4MDIxNTQuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBTaWVtZW5zIEFHCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBJRUVFODAyMTU0X05MX0gKLSNkZWZpbmUgSUVFRTgwMjE1NF9OTF9ICi0KLXN0cnVjdCBuZXRfZGV2aWNlOwotc3RydWN0IGllZWU4MDIxNTRfYWRkcjsKLQotaW50IGllZWU4MDIxNTRfbmxfYXNzb2NfaW5kaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkciwgdTggY2FwKTsKLWludCBpZWVlODAyMTU0X25sX2Fzc29jX2NvbmZpcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJdTE2IHNob3J0X2FkZHIsIHU4IHN0YXR1cyk7Ci1pbnQgaWVlZTgwMjE1NF9ubF9kaXNhc3NvY19pbmRpYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICphZGRyLCB1OCByZWFzb24pOwotaW50IGllZWU4MDIxNTRfbmxfZGlzYXNzb2NfY29uZmlybShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQl1OCBzdGF0dXMpOwotaW50IGllZWU4MDIxNTRfbmxfc2Nhbl9jb25maXJtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCXU4IHN0YXR1cywgdTggc2Nhbl90eXBlLCB1MzIgdW5zY2FubmVkLAotCQl1OCAqZWRsLyosIHN0cnVjdCBsaXN0X2hlYWQgKnBhbl9kZXNjX2xpc3QgKi8pOwotaW50IGllZWU4MDIxNTRfbmxfYmVhY29uX2luZGljKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBwYW5pZCwKLQkJdTE2IGNvb3JkX2FkZHIpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxNTRfbmV0ZGV2LmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTU0X25ldGRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYzZhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTU0X25ldGRldi5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQW4gaW50ZXJmYWNlIGJldHdlZW4gSUVFRTgwMi4xNS40IGRldmljZSBhbmQgcmVzdCBvZiB0aGUga2VybmVsLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBTaWVtZW5zIEFHCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBXcml0dGVuIGJ5OgorICogUGF2ZWwgU21vbGVuc2tpeSA8cGF2ZWwuc21vbGVuc2tpeUBnbWFpbC5jb20+CisgKiBNYXhpbSBHb3JiYWNoeW92IDxtYXhpbS5nb3JiYWNoZXZAc2llbWVucy5jb20+CisgKiBNYXhpbSBPc2lwb3YgPG1heGltLm9zaXBvdkBzaWVtZW5zLmNvbT4KKyAqIERtaXRyeSBFcmVtaW4tU29sZW5pa292IDxkYmFyeXNoa292QGdtYWlsLmNvbT4KKyAqLworCisjaWZuZGVmIElFRUU4MDIxNTRfTkVUREVWSUNFX0gKKyNkZWZpbmUgSUVFRTgwMjE1NF9ORVRERVZJQ0VfSAorCisvKgorICogQSBjb250cm9sIGJsb2NrIG9mIHNrYiBwYXNzZWQgYmV0d2VlbiB0aGUgQVJQSFJEX0lFRUU4MDIxNTQgZGV2aWNlCisgKiBhbmQgb3RoZXIgc3RhY2sgcGFydHMuCisgKi8KK3N0cnVjdCBpZWVlODAyMTU0X21hY19jYiB7CisJdTggbHFpOworCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgc2E7CisJc3RydWN0IGllZWU4MDIxNTRfYWRkciBkYTsKKwl1OCBmbGFnczsKKwl1OCBzZXE7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTU0X21hY19jYiAqbWFjX2NiKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIChzdHJ1Y3QgaWVlZTgwMjE1NF9tYWNfY2IgKilza2ItPmNiOworfQorCisjZGVmaW5lIE1BQ19DQl9GTEFHX1RZUEVNQVNLCQkoKDEgPDwgMykgLSAxKQorCisjZGVmaW5lIE1BQ19DQl9GTEFHX0FDS1JFUQkJKDEgPDwgMykKKyNkZWZpbmUgTUFDX0NCX0ZMQUdfU0VDRU4JCSgxIDw8IDQpCisjZGVmaW5lIE1BQ19DQl9GTEFHX0lOVFJBUEFOCQkoMSA8PCA1KQorCitzdGF0aWMgaW5saW5lIGludCBtYWNfY2JfaXNfYWNrcmVxKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIG1hY19jYihza2IpLT5mbGFncyAmIE1BQ19DQl9GTEFHX0FDS1JFUTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWFjX2NiX2lzX3NlY2VuKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIG1hY19jYihza2IpLT5mbGFncyAmIE1BQ19DQl9GTEFHX1NFQ0VOOworfQorCitzdGF0aWMgaW5saW5lIGludCBtYWNfY2JfaXNfaW50cmFwYW4oc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gbWFjX2NiKHNrYiktPmZsYWdzICYgTUFDX0NCX0ZMQUdfSU5UUkFQQU47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hY19jYl90eXBlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIG1hY19jYihza2IpLT5mbGFncyAmIE1BQ19DQl9GTEFHX1RZUEVNQVNLOworfQorCisjZGVmaW5lIElFRUU4MDIxNTRfTUFDX1NDQU5fRUQJCTAKKyNkZWZpbmUgSUVFRTgwMjE1NF9NQUNfU0NBTl9BQ1RJVkUJMQorI2RlZmluZSBJRUVFODAyMTU0X01BQ19TQ0FOX1BBU1NJVkUJMgorI2RlZmluZSBJRUVFODAyMTU0X01BQ19TQ0FOX09SUEhBTgkzCisKKy8qCisgKiBUaGlzIHNob3VsZCBiZSBsb2NhdGVkIGF0IG5ldF9kZXZpY2UtPm1sX3ByaXYKKyAqLworc3RydWN0IGllZWU4MDIxNTRfbWxtZV9vcHMgeworCWludCAoKmFzc29jX3JlcSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgKmFkZHIsCisJCQl1OCBjaGFubmVsLCB1OCBwYWdlLCB1OCBjYXApOworCWludCAoKmFzc29jX3Jlc3ApKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICphZGRyLAorCQkJdTE2IHNob3J0X2FkZHIsIHU4IHN0YXR1cyk7CisJaW50ICgqZGlzYXNzb2NfcmVxKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkciwKKwkJCXU4IHJlYXNvbik7CisJaW50ICgqc3RhcnRfcmVxKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkciwKKwkJCXU4IGNoYW5uZWwsIHU4IHBhZ2UsIHU4IGJjbl9vcmQsIHU4IHNmX29yZCwKKwkJCXU4IHBhbl9jb29yZCwgdTggYmx4LCB1OCBjb29yZF9yZWFsaWduKTsKKwlpbnQgKCpzY2FuX3JlcSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXU4IHR5cGUsIHUzMiBjaGFubmVscywgdTggcGFnZSwgdTggZHVyYXRpb24pOworCisJLyoKKwkgKiBGSVhNRTogdGhlc2Ugc2hvdWxkIGJlY29tZSB0aGUgcGFydCBvZiBQSUIvTUlCIGludGVyZmFjZS4KKwkgKiBIb3dldmVyIHdlIHN0aWxsIGRvbid0IGhhdmUgSUIgaW50ZXJmYWNlIG9mIGFueSBraW5kCisJICovCisJdTE2ICgqZ2V0X3Bhbl9pZCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJdTE2ICgqZ2V0X3Nob3J0X2FkZHIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCXU4ICgqZ2V0X2Rzbikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJdTggKCpnZXRfYnNuKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxNTRfbWxtZV9vcHMgKmllZWU4MDIxNTRfbWxtZV9vcHMoCisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+bWxfcHJpdjsKK30KKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCmluZGV4IDdjNWMwZjcuLjE1YjQ5MmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaAorKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKQEAgLTIyLDYgKzIyLDEyIEBACiAjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgogCisjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCisjZGVmaW5lIEZJQjZfVEFCTEVfSEFTSFNaIDI1NgorI2Vsc2UKKyNkZWZpbmUgRklCNl9UQUJMRV9IQVNIU1ogMQorI2VuZGlmCisKIHN0cnVjdCBydDZfaW5mbzsKIAogc3RydWN0IGZpYjZfY29uZmlnCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCBiYmFlMWU4Li45ODk3OGU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTk5LDQ3ICs5OSw0NyBAQAogCXJldHVybiAmYnVmWyppZHggLSBsZW5dOwogfQogCi0jZGVmaW5lIElQX1ZTX0RCR19CVUYobGV2ZWwsIG1zZy4uLikJCQlcCi0gICAgZG8gewkJCQkJCVwKLQkgICAgY2hhciBpcF92c19kYmdfYnVmWzE2MF07CQkJXAotCSAgICBpbnQgaXBfdnNfZGJnX2lkeCA9IDA7CQkJXAotCSAgICBpZiAobGV2ZWwgPD0gaXBfdnNfZ2V0X2RlYnVnX2xldmVsKCkpCVwKLQkJICAgIHByaW50ayhLRVJOX0RFQlVHICJJUFZTOiAiIG1zZyk7CVwKLSAgICB9IHdoaWxlICgwKQotI2RlZmluZSBJUF9WU19FUlJfQlVGKG1zZy4uLikJCQkJXAotICAgIGRvIHsJCQkJCQlcCi0JICAgIGNoYXIgaXBfdnNfZGJnX2J1ZlsxNjBdOwkJCVwKLQkgICAgaW50IGlwX3ZzX2RiZ19pZHggPSAwOwkJCVwKLQkgICAgcHJpbnRrKEtFUk5fRVJSICJJUFZTOiAiIG1zZyk7CQlcCi0gICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgSVBfVlNfREJHX0JVRihsZXZlbCwgbXNnLCAuLi4pCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQljaGFyIGlwX3ZzX2RiZ19idWZbMTYwXTsJCQkJXAorCQlpbnQgaXBfdnNfZGJnX2lkeCA9IDA7CQkJCQlcCisJCWlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJCQlcCisJCQlwcmludGsoS0VSTl9ERUJVRyBwcl9mbXQobXNnKSwgIyNfX1ZBX0FSR1NfXyk7CVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBJUF9WU19FUlJfQlVGKG1zZy4uLikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQljaGFyIGlwX3ZzX2RiZ19idWZbMTYwXTsJCQkJXAorCQlpbnQgaXBfdnNfZGJnX2lkeCA9IDA7CQkJCQlcCisJCXByX2Vycihtc2cpOwkJCQkJCVwKKwl9IHdoaWxlICgwKQogCiAvKiBPbmx5IHVzZSBmcm9tIHdpdGhpbiBJUF9WU19EQkdfQlVGKCkgb3IgSVBfVlNfRVJSX0JVRiBtYWNyb3MgKi8KLSNkZWZpbmUgSVBfVlNfREJHX0FERFIoYWYsIGFkZHIpCQkJXAotICAgIGlwX3ZzX2RiZ19hZGRyKGFmLCBpcF92c19kYmdfYnVmLAkJCVwKLQkJICAgc2l6ZW9mKGlwX3ZzX2RiZ19idWYpLCBhZGRyLAkJXAotCQkgICAmaXBfdnNfZGJnX2lkeCkKKyNkZWZpbmUgSVBfVlNfREJHX0FERFIoYWYsIGFkZHIpCQkJCQlcCisJaXBfdnNfZGJnX2FkZHIoYWYsIGlwX3ZzX2RiZ19idWYsCQkJCVwKKwkJICAgICAgIHNpemVvZihpcF92c19kYmdfYnVmKSwgYWRkciwJCQlcCisJCSAgICAgICAmaXBfdnNfZGJnX2lkeCkKIAotI2RlZmluZSBJUF9WU19EQkcobGV2ZWwsIG1zZy4uLikJCQlcCi0gICAgZG8gewkJCQkJCVwKLQkgICAgaWYgKGxldmVsIDw9IGlwX3ZzX2dldF9kZWJ1Z19sZXZlbCgpKQlcCi0JCSAgICBwcmludGsoS0VSTl9ERUJVRyAiSVBWUzogIiBtc2cpOwlcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgSVBfVlNfREJHX1JMKG1zZy4uLikJCQkJXAotICAgIGRvIHsJCQkJCQlcCi0JICAgIGlmIChuZXRfcmF0ZWxpbWl0KCkpCQkJXAotCQkgICAgcHJpbnRrKEtFUk5fREVCVUcgIklQVlM6ICIgbXNnKTsJXAotICAgIH0gd2hpbGUgKDApCi0jZGVmaW5lIElQX1ZTX0RCR19QS1QobGV2ZWwsIHBwLCBza2IsIG9mcywgbXNnKQkJXAotICAgIGRvIHsJCQkJCQlcCi0JICAgIGlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJXAotCQlwcC0+ZGVidWdfcGFja2V0KHBwLCBza2IsIG9mcywgbXNnKTsJXAotICAgIH0gd2hpbGUgKDApCi0jZGVmaW5lIElQX1ZTX0RCR19STF9QS1QobGV2ZWwsIHBwLCBza2IsIG9mcywgbXNnKQlcCi0gICAgZG8gewkJCQkJCVwKLQkgICAgaWYgKGxldmVsIDw9IGlwX3ZzX2dldF9kZWJ1Z19sZXZlbCgpICYmCVwKLQkJbmV0X3JhdGVsaW1pdCgpKQkJCVwKLQkJcHAtPmRlYnVnX3BhY2tldChwcCwgc2tiLCBvZnMsIG1zZyk7CVwKLSAgICB9IHdoaWxlICgwKQorI2RlZmluZSBJUF9WU19EQkcobGV2ZWwsIG1zZywgLi4uKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKGxldmVsIDw9IGlwX3ZzX2dldF9kZWJ1Z19sZXZlbCgpKQkJCVwKKwkJCXByaW50ayhLRVJOX0RFQlVHIHByX2ZtdChtc2cpLCAjI19fVkFfQVJHU19fKTsJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIElQX1ZTX0RCR19STChtc2csIC4uLikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAobmV0X3JhdGVsaW1pdCgpKQkJCQkJXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KG1zZyksICMjX19WQV9BUkdTX18pOwlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgSVBfVlNfREJHX1BLVChsZXZlbCwgcHAsIHNrYiwgb2ZzLCBtc2cpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJCQlcCisJCQlwcC0+ZGVidWdfcGFja2V0KHBwLCBza2IsIG9mcywgbXNnKTsJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBJUF9WU19EQkdfUkxfUEtUKGxldmVsLCBwcCwgc2tiLCBvZnMsIG1zZykJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAobGV2ZWwgPD0gaXBfdnNfZ2V0X2RlYnVnX2xldmVsKCkgJiYJCQlcCisJCSAgICBuZXRfcmF0ZWxpbWl0KCkpCQkJCQlcCisJCQlwcC0+ZGVidWdfcGFja2V0KHBwLCBza2IsIG9mcywgbXNnKTsJCVwKKwl9IHdoaWxlICgwKQogI2Vsc2UJLyogTk8gREVCVUdHSU5HIGF0IEFMTCAqLwogI2RlZmluZSBJUF9WU19EQkdfQlVGKGxldmVsLCBtc2cuLi4pICBkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgSVBfVlNfRVJSX0JVRihtc2cuLi4pICBkbyB7fSB3aGlsZSAoMCkKQEAgLTE1MCwyOSArMTUwLDI3IEBACiAjZW5kaWYKIAogI2RlZmluZSBJUF9WU19CVUcoKSBCVUcoKQotI2RlZmluZSBJUF9WU19FUlIobXNnLi4uKSBwcmludGsoS0VSTl9FUlIgIklQVlM6ICIgbXNnKQotI2RlZmluZSBJUF9WU19JTkZPKG1zZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiSVBWUzogIiBtc2cpCi0jZGVmaW5lIElQX1ZTX1dBUk5JTkcobXNnLi4uKSBcCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiSVBWUzogIiBtc2cpCi0jZGVmaW5lIElQX1ZTX0VSUl9STChtc2cuLi4pCQkJCVwKLSAgICBkbyB7CQkJCQkJXAotCSAgICBpZiAobmV0X3JhdGVsaW1pdCgpKQkJCVwKLQkJICAgIHByaW50ayhLRVJOX0VSUiAiSVBWUzogIiBtc2cpOwlcCi0gICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgSVBfVlNfRVJSX1JMKG1zZywgLi4uKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCQkJCQlcCisJCQlwcl9lcnIobXNnLCAjI19fVkFfQVJHU19fKTsJCQlcCisJfSB3aGlsZSAoMCkKIAogI2lmZGVmIENPTkZJR19JUF9WU19ERUJVRwogI2RlZmluZSBFbnRlckZ1bmN0aW9uKGxldmVsKQkJCQkJCVwKLSAgICBkbyB7CQkJCQkJCQlcCi0JICAgIGlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJCQlcCi0JCSAgICBwcmludGsoS0VSTl9ERUJVRyAiRW50ZXI6ICVzLCAlcyBsaW5lICVpXG4iLAlcCi0JCQkgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsJCVwKLSAgICB9IHdoaWxlICgwKQotI2RlZmluZSBMZWF2ZUZ1bmN0aW9uKGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgICBpZiAobGV2ZWwgPD0gaXBfdnNfZ2V0X2RlYnVnX2xldmVsKCkpICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiTGVhdmU6ICVzLCAlcyBsaW5lICVpXG4iLCAgICBcCi0JCQkgICAgICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7ICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKGxldmVsIDw9IGlwX3ZzX2dldF9kZWJ1Z19sZXZlbCgpKQkJCVwKKwkJCXByaW50ayhLRVJOX0RFQlVHCQkJCVwKKwkJCSAgICAgICBwcl9mbXQoIkVudGVyOiAlcywgJXMgbGluZSAlaVxuIiksCVwKKwkJCSAgICAgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBMZWF2ZUZ1bmN0aW9uKGxldmVsKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJCQlcCisJCQlwcmludGsoS0VSTl9ERUJVRwkJCQlcCisJCQkgICAgICAgcHJfZm10KCJMZWF2ZTogJXMsICVzIGxpbmUgJWlcbiIpLAlcCisJCQkgICAgICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CQlcCisJfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIEVudGVyRnVuY3Rpb24obGV2ZWwpICAgZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lIExlYXZlRnVuY3Rpb24obGV2ZWwpICAgZG8ge30gd2hpbGUgKDApCkBAIC03NDAsNyArNzM4LDggQEAKIGV4dGVybiB2b2lkIGlwX3ZzX3Byb3RvY29sX3RpbWVvdXRfY2hhbmdlKGludCBmbGFncyk7CiBleHRlcm4gaW50ICppcF92c19jcmVhdGVfdGltZW91dF90YWJsZShpbnQgKnRhYmxlLCBpbnQgc2l6ZSk7CiBleHRlcm4gaW50Ci1pcF92c19zZXRfc3RhdGVfdGltZW91dChpbnQgKnRhYmxlLCBpbnQgbnVtLCBjaGFyICoqbmFtZXMsIGNoYXIgKm5hbWUsIGludCB0byk7CitpcF92c19zZXRfc3RhdGVfdGltZW91dChpbnQgKnRhYmxlLCBpbnQgbnVtLCBjb25zdCBjaGFyICpjb25zdCAqbmFtZXMsCisJCQljb25zdCBjaGFyICpuYW1lLCBpbnQgdG8pOwogZXh0ZXJuIHZvaWQKIGlwX3ZzX3RjcHVkcF9kZWJ1Z19wYWNrZXQoc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgaW50IG9mZnNldCwgY29uc3QgY2hhciAqbXNnKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCBmMjdmZDgzLi5hZDlhNTExIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC00NDEsNiArNDQxLDE4IEBACiAJcmV0dXJuIF9faXB2Nl9hZGRyX2RpZmYoYTEsIGEyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CiB9CiAKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgaXB2Nl9zZWxlY3RfaWRlbnQoc3RydWN0IGZyYWdfaGRyICpmaGRyKQoreworCXN0YXRpYyB1MzIgaXB2Nl9mcmFnbWVudGF0aW9uX2lkID0gMTsKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlwNl9pZF9sb2NrKTsKKworCXNwaW5fbG9ja19iaCgmaXA2X2lkX2xvY2spOworCWZoZHItPmlkZW50aWZpY2F0aW9uID0gaHRvbmwoaXB2Nl9mcmFnbWVudGF0aW9uX2lkKTsKKwlpZiAoKytpcHY2X2ZyYWdtZW50YXRpb25faWQgPT0gMCkKKwkJaXB2Nl9mcmFnbWVudGF0aW9uX2lkID0gMTsKKwlzcGluX3VubG9ja19iaCgmaXA2X2lkX2xvY2spOworfQorCiAvKgogICoJUHJvdG90eXBlcyBleHBvcnRlZCBieSBpcHY2CiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX2V2ZW50LmggYi9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV9ldmVudC5oCmluZGV4IGMyOTA0NDcuLmJjMGM2ZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fZXZlbnQuaApAQCAtNzQsNyArNzQsNyBAQAogCXN0cnVjdCBxb3NfaW5mbyAqcW9zOwogfTsKIAotZXh0ZXJuIGNoYXIgKmlyY29tbV9zdGF0ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGlyY29tbV9zdGF0ZVtdOwogCiBzdHJ1Y3QgaXJjb21tX2NiOyAgIC8qIEZvcndhcmQgZGVjbC4gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fdHR5X2F0dGFjaC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fdHR5X2F0dGFjaC5oCmluZGV4IGY5MWE1Njk1Li4wYTYzYmJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV90dHlfYXR0YWNoLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fdHR5X2F0dGFjaC5oCkBAIC02Niw4ICs2Niw4IEBACiAgICAgICAgIF9fdTggICAgICBkbHNhcF9zZWw7CiB9OwogCi1leHRlcm4gY2hhciAqaXJjb21tX3N0YXRlW107Ci1leHRlcm4gY2hhciAqaXJjb21tX3R0eV9zdGF0ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGlyY29tbV9zdGF0ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGlyY29tbV90dHlfc3RhdGVbXTsKIAogaW50IGlyY29tbV90dHlfZG9fZXZlbnQoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsIElSQ09NTV9UVFlfRVZFTlQgZXZlbnQsCiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXJjb21tX3R0eV9pbmZvICppbmZvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZXZlbnQuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZXZlbnQuaAppbmRleCAyYWUyZTExOS4uNGM5MDgyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcF9ldmVudC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZXZlbnQuaApAQCAtMTIwLDcgKzEyMCw3IEBACiAJTEFQX1BSSU1BUllfQ09ORkxJQ1QsCiB9IExBUF9SRUFTT047CiAKLWV4dGVybiBjb25zdCBjaGFyICppcmxhcF9zdGF0ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGlybGFwX3N0YXRlW107CiAKIHZvaWQgaXJsYXBfZG9fZXZlbnQoc3RydWN0IGlybGFwX2NiICpzZWxmLCBJUkxBUF9FVkVOVCBldmVudCwgCiAJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXJsYXBfaW5mbyAqaW5mbyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2V2ZW50LmggYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2V2ZW50LmgKaW5kZXggZTAzYWU0YS4uOWU0ZWMxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9ldmVudC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXBfZXZlbnQuaApAQCAtNzksOCArNzksOCBAQAogCUxNX0xBUF9JRExFX1RJTUVPVVQsCiB9IElSTE1QX0VWRU5UOwogCi1leHRlcm4gY29uc3QgY2hhciAqaXJsbXBfc3RhdGVbXTsKLWV4dGVybiBjb25zdCBjaGFyICppcmxzYXBfc3RhdGVbXTsKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCBpcmxtcF9zdGF0ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGlybHNhcF9zdGF0ZVtdOwogCiB2b2lkIGlybG1wX3dhdGNoZG9nX3RpbWVyX2V4cGlyZWQodm9pZCAqZGF0YSk7CiB2b2lkIGlybG1wX2Rpc2NvdmVyeV90aW1lcl9leHBpcmVkKHZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXdfaGFuZGxlci5oIGIvaW5jbHVkZS9uZXQvaXdfaGFuZGxlci5oCmluZGV4IDUxYjlhMzcuLmU5MDU0YTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2l3X2hhbmRsZXIuaAorKysgYi9pbmNsdWRlL25ldC9pd19oYW5kbGVyLmgKQEAgLTQxNiwxMyArNDE2LDEzIEBACiAgKiBkYXRhIChpLmUuIHZhbGlkIGFzIGxvbmcgYXMgc3RydWN0IG5ldF9kZXZpY2UgZXhpc3QsIHNhbWUgbG9ja2luZyBydWxlcykuCiAgKi8KIC8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KLXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlOworc3RydWN0IGxpYmlwd19kZXZpY2U7CiAvKiBUaGUgc3RydWN0ICovCiBzdHJ1Y3QgaXdfcHVibGljX2RhdGEgewogCS8qIERyaXZlciBlbmhhbmNlZCBzcHkgc3VwcG9ydCAqLwogCXN0cnVjdCBpd19zcHlfZGF0YSAqCQlzcHlfZGF0YTsKLQkvKiBTdHJ1Y3R1cmUgbWFuYWdlZCBieSB0aGUgaW4ta2VybmVsIElFRUUgODAyLjExIGxheWVyICovCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKglpZWVlODAyMTE7CisJLyogTGVnYWN5IHN0cnVjdHVyZSBtYW5hZ2VkIGJ5IHRoZSBpcHcyeDAwLXNwZWNpZmljIElFRUUgODAyLjExIGxheWVyICovCisJc3RydWN0IGxpYmlwd19kZXZpY2UgKgkJbGliaXB3OwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogUFJPVE9UWVBFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDQzLDcgKzQ0Myw3IEBACiBleHRlcm4gdm9pZCB3aXJlbGVzc19zZW5kX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2LAogCQkJCXVuc2lnbmVkIGludAkJY21kLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKgl3cnF1LAotCQkJCWNoYXIgKgkJCWV4dHJhKTsKKwkJCQljb25zdCBjaGFyICoJCWV4dHJhKTsKIAogLyogV2UgbWF5IG5lZWQgYSBmdW5jdGlvbiB0byBzZW5kIGEgc3RyZWFtIG9mIGV2ZW50cyB0byB1c2VyIHNwYWNlLgogICogTW9yZSBvbiB0aGF0IGxhdGVyLi4uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCBjMDYxMDQ0Li40NjY4NTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTczLDYgKzczLDIxIEBACiAgKi8KIAogLyoqCisgKiBET0M6IG1hYzgwMjExIHdvcmtxdWV1ZQorICoKKyAqIG1hYzgwMjExIHByb3ZpZGVzIGl0cyBvd24gd29ya3F1ZXVlIGZvciBkcml2ZXJzIGFuZCBpbnRlcm5hbCBtYWM4MDIxMSB1c2UuCisgKiBUaGUgd29ya3F1ZXVlIGlzIGEgc2luZ2xlIHRocmVhZGVkIHdvcmtxdWV1ZSBhbmQgY2FuIG9ubHkgYmUgYWNjZXNzZWQgYnkKKyAqIGhlbHBlcnMgZm9yIHNhbml0eSBjaGVja2luZy4gRHJpdmVycyBtdXN0IGVuc3VyZSBhbGwgd29yayBhZGRlZCBvbnRvIHRoZQorICogbWFjODAyMTEgd29ya3F1ZXVlIHNob3VsZCBiZSBjYW5jZWxsZWQgb24gdGhlIGRyaXZlciBzdG9wKCkgY2FsbGJhY2suCisgKgorICogbWFjODAyMTEgd2lsbCBmbHVzaGVkIHRoZSB3b3JrcXVldWUgdXBvbiBpbnRlcmZhY2UgcmVtb3ZhbCBhbmQgZHVyaW5nCisgKiBzdXNwZW5kLgorICoKKyAqIEFsbCB3b3JrIHBlcmZvcm1lZCBvbiB0aGUgbWFjODAyMTEgd29ya3F1ZXVlIG11c3Qgbm90IGFjcXVpcmUgdGhlIFJUTkwgbG9jay4KKyAqCisgKi8KKworLyoqCiAgKiBlbnVtIGllZWU4MDIxMV9tYXhfcXVldWVzIC0gbWF4aW11bSBudW1iZXIgb2YgcXVldWVzCiAgKgogICogQElFRUU4MDIxMV9NQVhfUVVFVUVTOiBNYXhpbXVtIG51bWJlciBvZiByZWd1bGFyIGRldmljZSBxdWV1ZXMuCkBAIC0yMjQsNyArMjM5LDE0IEBACiAgKiBASUVFRTgwMjExX1RYX0NUTF9BTVBEVTogdGhpcyBmcmFtZSBzaG91bGQgYmUgc2VudCBhcyBwYXJ0IG9mIGFuIEEtTVBEVQogICogQElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQ6IEZyYW1lIHdhcyBpbmplY3RlZCwgaW50ZXJuYWwgdG8gbWFjODAyMTEuCiAgKiBASUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQ6IFRoZSBmcmFtZSB3YXMgbm90IHRyYW5zbWl0dGVkCi0gKgliZWNhdXNlIHRoZSBkZXN0aW5hdGlvbiBTVEEgd2FzIGluIHBvd2Vyc2F2ZSBtb2RlLgorICoJYmVjYXVzZSB0aGUgZGVzdGluYXRpb24gU1RBIHdhcyBpbiBwb3dlcnNhdmUgbW9kZS4gTm90ZSB0aGF0IHRvCisgKglhdm9pZCByYWNlIGNvbmRpdGlvbnMsIHRoZSBmaWx0ZXIgbXVzdCBiZSBzZXQgYnkgdGhlIGhhcmR3YXJlIG9yCisgKglmaXJtd2FyZSB1cG9uIHJlY2VpdmluZyBhIGZyYW1lIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIHN0YXRpb24KKyAqCXdlbnQgdG8gc2xlZXAgKG11c3QgYmUgZG9uZSBvbiBkZXZpY2UgdG8gZmlsdGVyIGZyYW1lcyBhbHJlYWR5IG9uCisgKgl0aGUgcXVldWUpIGFuZCBtYXkgb25seSBiZSB1bnNldCBhZnRlciBtYWM4MDIxMSBnaXZlcyB0aGUgT0sgZm9yCisgKgl0aGF0IGJ5IHNldHRpbmcgdGhlIElFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVCAoc2VlIGFib3ZlKSwKKyAqCXNpbmNlIG9ubHkgdGhlbiBpcyBpdCBndWFyYW50ZWVkIHRoYXQgbm8gbW9yZSBmcmFtZXMgYXJlIGluIHRoZQorICoJaGFyZHdhcmUgcXVldWUuCiAgKiBASUVFRTgwMjExX1RYX1NUQVRfQUNLOiBGcmFtZSB3YXMgYWNrbm93bGVkZ2VkCiAgKiBASUVFRTgwMjExX1RYX1NUQVRfQU1QRFU6IFRoZSBmcmFtZSB3YXMgYWdncmVnYXRlZCwgc28gc3RhdHVzCiAgKiAJaXMgZm9yIHRoZSB3aG9sZSBhZ2dyZWdhdGlvbi4KQEAgLTI0MSw2ICsyNjMsMTUgQEAKICAqCWl0IGNhbiBiZSBzZW50IG91dC4KICAqIEBJRUVFODAyMTFfVFhfSU5URkxfUkVUUklFRDogY29tcGxldGVseSBpbnRlcm5hbCB0byBtYWM4MDIxMSwKICAqCXVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIGZyYW1lIHdhcyBhbHJlYWR5IHJldHJpZWQgZHVlIHRvIFBTCisgKiBASUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDogY29tcGxldGVseSBpbnRlcm5hbCB0byBtYWM4MDIxMSwKKyAqCXVzZWQgdG8gaW5kaWNhdGUgZnJhbWUgc2hvdWxkIG5vdCBiZSBlbmNyeXB0ZWQKKyAqIEBJRUVFODAyMTFfVFhfQ1RMX1BTUE9MTF9SRVNQT05TRTogKGludGVybmFsPykKKyAqCVRoaXMgZnJhbWUgaXMgYSByZXNwb25zZSB0byBhIFBTLXBvbGwgZnJhbWUgYW5kIHNob3VsZCBiZSBzZW50CisgKglhbHRob3VnaCB0aGUgc3RhdGlvbiBpcyBpbiBwb3dlcnNhdmUgbW9kZS4KKyAqIEBJRUVFODAyMTFfVFhfQ1RMX01PUkVfRlJBTUVTOiBNb3JlIGZyYW1lcyB3aWxsIGJlIHBhc3NlZCB0byB0aGUKKyAqCXRyYW5zbWl0IGZ1bmN0aW9uIGFmdGVyIHRoZSBjdXJyZW50IGZyYW1lLCB0aGlzIGNhbiBiZSB1c2VkCisgKglieSBkcml2ZXJzIHRvIGtpY2sgdGhlIERNQSBxdWV1ZSBvbmx5IGlmIHVuc2V0IG9yIHdoZW4gdGhlCisgKglxdWV1ZSBnZXRzIGZ1bGwuCiAgKi8KIGVudW0gbWFjODAyMTFfdHhfY29udHJvbF9mbGFncyB7CiAJSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTCQk9IEJJVCgwKSwKQEAgLTI1OSw2ICsyOTAsOSBAQAogCUlFRUU4MDIxMV9UWF9JTlRGTF9SQ0FMR08JCT0gQklUKDEzKSwKIAlJRUVFODAyMTFfVFhfSU5URkxfTkVFRF9UWFBST0NFU1NJTkcJPSBCSVQoMTQpLAogCUlFRUU4MDIxMV9UWF9JTlRGTF9SRVRSSUVECQk9IEJJVCgxNSksCisJSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVAkJPSBCSVQoMTYpLAorCUlFRUU4MDIxMV9UWF9DVExfUFNQT0xMX1JFU1BPTlNFCT0gQklUKDE3KSwKKwlJRUVFODAyMTFfVFhfQ1RMX01PUkVfRlJBTUVTCQk9IEJJVCgxOCksCiB9OwogCiAvKioKQEAgLTMxNiw2ICszNTAsMjEgQEAKICAqCiAgKiBXaGVuIHVzZWQgZm9yIHRyYW5zbWl0IHN0YXR1cyByZXBvcnRpbmcsIHRoZSBkcml2ZXIgc2hvdWxkCiAgKiBhbHdheXMgcmVwb3J0IHRoZSByYXRlIGFsb25nIHdpdGggdGhlIGZsYWdzIGl0IHVzZWQuCisgKgorICogJnN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyBjb250YWlucyBhbiBhcnJheSBvZiB0aGVzZSBzdHJ1Y3RzCisgKiBpbiB0aGUgY29udHJvbCBpbmZvcm1hdGlvbiwgYW5kIGl0IHdpbGwgYmUgZmlsbGVkIGJ5IHRoZSByYXRlCisgKiBjb250cm9sIGFsZ29yaXRobSBhY2NvcmRpbmcgdG8gd2hhdCBzaG91bGQgYmUgc2VudC4gRm9yIGV4YW1wbGUsCisgKiBpZiB0aGlzIGFycmF5IGNvbnRhaW5zLCBpbiB0aGUgZm9ybWF0IHsgPGlkeD4sIDxjb3VudD4gfSB0aGUKKyAqIGluZm9ybWF0aW9uCisgKiAgICB7IDMsIDIgfSwgeyAyLCAyIH0sIHsgMSwgNCB9LCB7IC0xLCAwIH0sIHsgLTEsIDAgfQorICogdGhlbiB0aGlzIG1lYW5zIHRoYXQgdGhlIGZyYW1lIHNob3VsZCBiZSB0cmFuc21pdHRlZAorICogdXAgdG8gdHdpY2UgYXQgcmF0ZSAzLCB1cCB0byB0d2ljZSBhdCByYXRlIDIsIGFuZCB1cCB0byBmb3VyCisgKiB0aW1lcyBhdCByYXRlIDEgaWYgaXQgZG9lc24ndCBnZXQgYWNrbm93bGVkZ2VkLiBTYXkgaXQgZ2V0cworICogYWNrbm93bGVkZ2VkIGJ5IHRoZSBwZWVyIGFmdGVyIHRoZSBmaWZ0aCBhdHRlbXB0LCB0aGUgc3RhdHVzCisgKiBpbmZvcm1hdGlvbiBzaG91bGQgdGhlbiBjb250YWluCisgKiAgIHsgMywgMiB9LCB7IDIsIDIgfSwgeyAxLCAxIH0sIHsgLTEsIDAgfSAuLi4KKyAqIHNpbmNlIGl0IHdhcyB0cmFuc21pdHRlZCB0d2ljZSBhdCByYXRlIDMsIHR3aWNlIGF0IHJhdGUgMgorICogYW5kIG9uY2UgYXQgcmF0ZSAxIGFmdGVyIHdoaWNoIHdlIHJlY2VpdmVkIGFuIGFja25vd2xlZGdlbWVudC4KICAqLwogc3RydWN0IGllZWU4MDIxMV90eF9yYXRlIHsKIAlzOCBpZHg7CkBAIC0zOTcsNiArNDQ2LDExIEBACiAJcmV0dXJuIChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKilza2ItPmNiOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpJRUVFODAyMTFfU0tCX1JYQ0Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopc2tiLT5jYjsKK30KKwogLyoqCiAgKiBpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMgLSBjbGVhciBUWCBzdGF0dXMKICAqCkBAIC00NzgsNyArNTMyLDcgQEAKICAqCiAgKiBUaGUgbG93LWxldmVsIGRyaXZlciBzaG91bGQgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uICh0aGUgc3Vic2V0CiAgKiBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUpIHRvIHRoZSA4MDIuMTEgY29kZSB3aXRoIGVhY2ggcmVjZWl2ZWQKLSAqIGZyYW1lLgorICogZnJhbWUsIGluIHRoZSBza2IncyBjb250cm9sIGJ1ZmZlciAoY2IpLgogICoKICAqIEBtYWN0aW1lOiB2YWx1ZSBpbiBtaWNyb3NlY29uZHMgb2YgdGhlIDY0LWJpdCBUaW1lIFN5bmNocm9uaXphdGlvbiBGdW5jdGlvbgogICogCShUU0YpIHRpbWVyIHdoZW4gdGhlIGZpcnN0IGRhdGEgc3ltYm9sIChNUERVKSBhcnJpdmVkIGF0IHRoZSBoYXJkd2FyZS4KQEAgLTUyOSw3ICs1ODMsNiBAQAogLyoqCiAgKiBlbnVtIGllZWU4MDIxMV9jb25mX2NoYW5nZWQgLSBkZW5vdGVzIHdoaWNoIGNvbmZpZ3VyYXRpb24gY2hhbmdlZAogICoKLSAqIEBfSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQ6IERFUFJFQ0FURUQKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTElTVEVOX0lOVEVSVkFMOiB0aGUgbGlzdGVuIGludGVydmFsIGNoYW5nZWQKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkFESU9UQVA6IHRoZSByYWRpb3RhcCBmbGFnIGNoYW5nZWQKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFM6IHRoZSBQUyBmbGFnIG9yIGR5bmFtaWMgUFMgdGltZW91dCBjaGFuZ2VkCkBAIC01MzksNyArNTkyLDYgQEAKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSURMRTogSWRsZSBmbGFnIGNoYW5nZWQKICAqLwogZW51bSBpZWVlODAyMTFfY29uZl9jaGFuZ2VkIHsKLQlfSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQJPSBCSVQoMCksCiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0xJU1RFTl9JTlRFUlZBTAk9IEJJVCgyKSwKIAlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkFESU9UQVAJCT0gQklUKDMpLAogCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9QUwkJPSBCSVQoNCksCkBAIC01NDksMTQgKzYwMSw2IEBACiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0lETEUJCT0gQklUKDgpLAogfTsKIAotc3RhdGljIGlubGluZSBfX2RlcHJlY2F0ZWQgZW51bSBpZWVlODAyMTFfY29uZl9jaGFuZ2VkCi1fX0lFRUU4MDIxMV9DT05GX0NIQU5HRV9SQURJT19FTkFCTEVEKHZvaWQpCi17Ci0JcmV0dXJuIF9JRUVFODAyMTFfQ09ORl9DSEFOR0VfUkFESU9fRU5BQkxFRDsKLX0KLSNkZWZpbmUgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQgXAotCV9fSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQoKQotCiAvKioKICAqIHN0cnVjdCBpZWVlODAyMTFfY29uZiAtIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRldmljZQogICoKQEAgLTU2NCw5ICs2MDgsNiBAQAogICoKICAqIEBmbGFnczogY29uZmlndXJhdGlvbiBmbGFncyBkZWZpbmVkIGFib3ZlCiAgKgotICogQHJhZGlvX2VuYWJsZWQ6IHdoZW4gemVybywgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIHN3aXRjaCBvZmYgdGhlIHJhZGlvLgotICogQGJlYWNvbl9pbnQ6IERFUFJFQ0FURUQsIERPIE5PVCBVU0UKLSAqCiAgKiBAbGlzdGVuX2ludGVydmFsOiBsaXN0ZW4gaW50ZXJ2YWwgaW4gdW5pdHMgb2YgYmVhY29uIGludGVydmFsCiAgKiBAbWF4X3NsZWVwX3BlcmlvZDogdGhlIG1heGltdW0gbnVtYmVyIG9mIGJlYWNvbiBpbnRlcnZhbHMgdG8gc2xlZXAgZm9yCiAgKgliZWZvcmUgY2hlY2tpbmcgdGhlIGJlYWNvbiBmb3IgYSBUSU0gYml0IChtYW5hZ2VkIG1vZGUgb25seSk7IHRoaXMKQEAgLTU5MCwxMyArNjMxLDExIEBACiAgKiAgICBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyBub3QgdGhlIG51bWJlciBvZiByZXRyaWVzCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfY29uZiB7Ci0JaW50IF9fZGVwcmVjYXRlZCBiZWFjb25faW50OwogCXUzMiBmbGFnczsKIAlpbnQgcG93ZXJfbGV2ZWwsIGR5bmFtaWNfcHNfdGltZW91dDsKIAlpbnQgbWF4X3NsZWVwX3BlcmlvZDsKIAogCXUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0JYm9vbCBfX2RlcHJlY2F0ZWQgcmFkaW9fZW5hYmxlZDsKIAogCXU4IGxvbmdfZnJhbWVfbWF4X3R4X2NvdW50LCBzaG9ydF9mcmFtZV9tYXhfdHhfY291bnQ7CiAKQEAgLTkwMSwxMiArOTQwLDYgQEAKICAqCiAgKiBAY29uZjogJnN0cnVjdCBpZWVlODAyMTFfY29uZiwgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGRvbid0IHVzZS4KICAqCi0gKiBAd29ya3F1ZXVlOiBzaW5nbGUgdGhyZWFkZWQgd29ya3F1ZXVlIGF2YWlsYWJsZSBmb3IgZHJpdmVyIHVzZSwKLSAqCWFsbG9jYXRlZCBieSBtYWM4MDIxMSBvbiByZWdpc3RyYXRpb24gYW5kIGZsdXNoZWQgd2hlbiBhbgotICoJaW50ZXJmYWNlIGlzIHJlbW92ZWQuCi0gKglOT1RJQ0U6IEFsbCB3b3JrIHBlcmZvcm1lZCBvbiB0aGlzIHdvcmtxdWV1ZSBtdXN0IG5vdAotICoJYWNxdWlyZSB0aGUgUlROTCBsb2NrLgotICoKICAqIEBwcml2OiBwb2ludGVyIHRvIHByaXZhdGUgYXJlYSB0aGF0IHdhcyBhbGxvY2F0ZWQgZm9yIGRyaXZlciB1c2UKICAqCWFsb25nIHdpdGggdGhpcyBzdHJ1Y3R1cmUuCiAgKgpAQCAtOTQyLDcgKzk3NSw2IEBACiBzdHJ1Y3QgaWVlZTgwMjExX2h3IHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgY29uZjsKIAlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CiAJY29uc3QgY2hhciAqcmF0ZV9jb250cm9sX2FsZ29yaXRobTsKIAl2b2lkICpwcml2OwogCXUzMiBmbGFnczsKQEAgLTExNzIsMTAgKzEyMDQsMTMgQEAKICAqIHRoZSBkcml2ZXIncyBjb25maWd1cmVfZmlsdGVyKCkgZnVuY3Rpb24gd2hpY2ggZnJhbWVzIHNob3VsZCBiZQogICogcGFzc2VkIHRvIG1hYzgwMjExIGFuZCB3aGljaCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0LgogICoKLSAqIFRoZSBjb25maWd1cmVfZmlsdGVyKCkgY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRoIHRoZSBwYXJhbWV0ZXJzCi0gKiBAbWNfY291bnQgYW5kIEBtY19saXN0IGZvciB0aGUgY29tYmluZWQgbXVsdGljYXN0IGFkZHJlc3MgbGlzdAotICogb2YgYWxsIHZpcnR1YWwgaW50ZXJmYWNlcywgQGNoYW5nZWRfZmxhZ3MgdGVsbGluZyB3aGljaCBmbGFncwotICogd2VyZSBjaGFuZ2VkIGFuZCBAdG90YWxfZmxhZ3Mgd2l0aCB0aGUgbmV3IGZsYWcgc3RhdGVzLgorICogQmVmb3JlIGNvbmZpZ3VyZV9maWx0ZXIoKSBpcyBpbnZva2VkLCB0aGUgcHJlcGFyZV9tdWx0aWNhc3QoKQorICogY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRoIHRoZSBwYXJhbWV0ZXJzIEBtY19jb3VudCBhbmQgQG1jX2xpc3QKKyAqIGZvciB0aGUgY29tYmluZWQgbXVsdGljYXN0IGFkZHJlc3MgbGlzdCBvZiBhbGwgdmlydHVhbCBpbnRlcmZhY2VzLgorICogSXQncyB1c2UgaXMgb3B0aW9uYWwsIGFuZCBpdCByZXR1cm5zIGEgdTY0IHRoYXQgaXMgcGFzc2VkIHRvCisgKiBjb25maWd1cmVfZmlsdGVyKCkuIEFkZGl0aW9uYWxseSwgY29uZmlndXJlX2ZpbHRlcigpIGhhcyB0aGUKKyAqIGFyZ3VtZW50cyBAY2hhbmdlZF9mbGFncyB0ZWxsaW5nIHdoaWNoIGZsYWdzIHdlcmUgY2hhbmdlZCBhbmQKKyAqIEB0b3RhbF9mbGFncyB3aXRoIHRoZSBuZXcgZmxhZyBzdGF0ZXMuCiAgKgogICogSWYgeW91ciBkZXZpY2UgaGFzIG5vIG11bHRpY2FzdCBhZGRyZXNzIGZpbHRlcnMgeW91ciBkcml2ZXIgd2lsbAogICogbmVlZCB0byBjaGVjayBib3RoIHRoZSAlRklGX0FMTE1VTFRJIGZsYWcgYW5kIHRoZSBAbWNfY291bnQKQEAgLTEyMjQsMTAgKzEyNTksMTMgQEAKICAqCW1hYzgwMjExIG5lZWRzIHRvIGRvIGFuZCB0aGUgYW1vdW50IG9mIENQVSB3YWtldXBzLCBzbyB5b3Ugc2hvdWxkCiAgKglob25vdXIgdGhpcyBmbGFnIGlmIHBvc3NpYmxlLgogICoKLSAqIEBGSUZfQ09OVFJPTDogcGFzcyBjb250cm9sIGZyYW1lcywgaWYgUFJPTUlTQ19JTl9CU1MgaXMgbm90IHNldCB0aGVuCi0gKglvbmx5IHRob3NlIGFkZHJlc3NlZCB0byB0aGlzIHN0YXRpb24KKyAqIEBGSUZfQ09OVFJPTDogcGFzcyBjb250cm9sIGZyYW1lcyAoZXhjZXB0IGZvciBQUyBQb2xsKSwgaWYgUFJPTUlTQ19JTl9CU1MKKyAqICBpcyBub3Qgc2V0IHRoZW4gb25seSB0aG9zZSBhZGRyZXNzZWQgdG8gdGhpcyBzdGF0aW9uLgogICoKICAqIEBGSUZfT1RIRVJfQlNTOiBwYXNzIGZyYW1lcyBkZXN0aW5lZCB0byBvdGhlciBCU1NlcworICoKKyAqIEBGSUZfUFNQT0xMOiBwYXNzIFBTIFBvbGwgZnJhbWVzLCBpZiBQUk9NSVNDX0lOX0JTUyAgaXMgbm90IHNldCB0aGVuIG9ubHkKKyAqICB0aG9zZSBhZGRyZXNzZWQgdG8gdGhpcyBzdGF0aW9uLgogICovCiBlbnVtIGllZWU4MDIxMV9maWx0ZXJfZmxhZ3MgewogCUZJRl9QUk9NSVNDX0lOX0JTUwk9IDE8PDAsCkBAIC0xMjM3LDYgKzEyNzUsNyBAQAogCUZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDCT0gMTw8NCwKIAlGSUZfQ09OVFJPTAkJPSAxPDw1LAogCUZJRl9PVEhFUl9CU1MJCT0gMTw8NiwKKwlGSUZfUFNQT0xMCQk9IDE8PDcsCiB9OwogCiAvKioKQEAgLTEyODksNyArMTMyOCw4IEBACiAgKglpcyBkaXNhYmxlZC4gVGhpcyBzaG91bGQgdHVybiBvZmYgdGhlIGhhcmR3YXJlIChhdCBsZWFzdAogICoJaXQgbXVzdCB0dXJuIG9mZiBmcmFtZSByZWNlcHRpb24uKQogICoJTWF5IGJlIGNhbGxlZCByaWdodCBhZnRlciBhZGRfaW50ZXJmYWNlIGlmIHRoYXQgcmVqZWN0cwotICoJYW4gaW50ZXJmYWNlLgorICoJYW4gaW50ZXJmYWNlLiBJZiB5b3UgYWRkZWQgYW55IHdvcmsgb250byB0aGUgbWFjODAyMTEgd29ya3F1ZXVlCisgKgl5b3Ugc2hvdWxkIGVuc3VyZSB0byBjYW5jZWwgaXQgb24gdGhpcyBjYWxsYmFjay4KICAqCU11c3QgYmUgaW1wbGVtZW50ZWQuCiAgKgogICogQGFkZF9pbnRlcmZhY2U6IENhbGxlZCB3aGVuIGEgbmV0ZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBoYXJkd2FyZSBpcwpAQCAtMTMyMyw5ICsxMzYzLDEzIEBACiAgKglmb3IgYXNzb2NpYXRpb24gaW5kaWNhdGlvbi4gVGhlIEBjaGFuZ2VkIHBhcmFtZXRlciBpbmRpY2F0ZXMgd2hpY2gKICAqCW9mIHRoZSBic3MgcGFyYW1ldGVycyBoYXMgY2hhbmdlZCB3aGVuIGEgY2FsbCBpcyBtYWRlLgogICoKKyAqIEBwcmVwYXJlX211bHRpY2FzdDogUHJlcGFyZSBmb3IgbXVsdGljYXN0IGZpbHRlciBjb25maWd1cmF0aW9uLgorICoJVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCwgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgcGFzc2VkCisgKgl0byBjb25maWd1cmVfZmlsdGVyKCkuIFRoaXMgY2FsbGJhY2sgbXVzdCBiZSBhdG9taWMuCisgKgogICogQGNvbmZpZ3VyZV9maWx0ZXI6IENvbmZpZ3VyZSB0aGUgZGV2aWNlJ3MgUlggZmlsdGVyLgogICoJU2VlIHRoZSBzZWN0aW9uICJGcmFtZSBmaWx0ZXJpbmciIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoJVGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkIGFuZCBhdG9taWMuCisgKglUaGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQuCiAgKgogICogQHNldF90aW06IFNldCBUSU0gYml0LiBtYWM4MDIxMSBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gYSBUSU0gYml0CiAgKiAJbXVzdCBiZSBzZXQgb3IgY2xlYXJlZCBmb3IgYSBnaXZlbiBTVEEuIE11c3QgYmUgYXRvbWljLgpAQCAtMTQxMSw2ICsxNDU1LDggQEAKICAqIEByZmtpbGxfcG9sbDogUG9sbCByZmtpbGwgaGFyZHdhcmUgc3RhdGUuIElmIHlvdSBuZWVkIHRoaXMsIHlvdSBhbHNvCiAgKgluZWVkIHRvIHNldCB3aXBoeS0+cmZraWxsX3BvbGwgdG8gJXRydWUgYmVmb3JlIHJlZ2lzdHJhdGlvbiwKICAqCWFuZCBuZWVkIHRvIGNhbGwgd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZSgpIGluIHRoZSBjYWxsYmFjay4KKyAqCisgKiBAdGVzdG1vZGVfY21kOiBJbXBsZW1lbnQgYSBjZmc4MDIxMSB0ZXN0IG1vZGUgY29tbWFuZC4KICAqLwogc3RydWN0IGllZWU4MDIxMV9vcHMgewogCWludCAoKnR4KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0xNDI1LDEwICsxNDcxLDEyIEBACiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCiAJCQkJIHUzMiBjaGFuZ2VkKTsKKwl1NjQgKCpwcmVwYXJlX211bHRpY2FzdCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpOwogCXZvaWQgKCpjb25maWd1cmVfZmlsdGVyKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCQkJIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpOworCQkJCSB1NjQgbXVsdGljYXN0KTsKIAlpbnQgKCpzZXRfdGltKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgIGJvb2wgc2V0KTsKIAlpbnQgKCpzZXRfa2V5KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCkBAIC0xNDYxLDYgKzE1MDksOSBAQAogCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuKTsKIAogCXZvaWQgKCpyZmtpbGxfcG9sbCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworI2lmZGVmIENPTkZJR19OTDgwMjExX1RFU1RNT0RFCisJaW50ICgqdGVzdG1vZGVfY21kKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZGF0YSwgaW50IGxlbik7CisjZW5kaWYKIH07CiAKIC8qKgpAQCAtMTYwNiwxMCArMTY1Nyw2IEBACiAgKi8KIHZvaWQgaWVlZTgwMjExX3Jlc3RhcnRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCi0vKiB0cmljayB0byBhdm9pZCBzeW1ib2wgY2xhc2hlcyB3aXRoIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtICovCi12b2lkIF9faWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7Ci0KIC8qKgogICogaWVlZTgwMjExX3J4IC0gcmVjZWl2ZSBmcmFtZQogICoKQEAgLTE2MjQsMTQgKzE2NzEsOCBAQAogICoKICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvbgogICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGwKLSAqIEBzdGF0dXM6IHN0YXR1cyBvZiB0aGlzIGZyYW1lOyB0aGUgc3RhdHVzIHBvaW50ZXIgbmVlZCBub3QgYmUgdmFsaWQKLSAqCWFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucwogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpCi17Ci0JX19pZWVlODAyMTFfcngoaHcsIHNrYiwgc3RhdHVzKTsKLX0KK3ZvaWQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyoqCiAgKiBpZWVlODAyMTFfcnhfaXJxc2FmZSAtIHJlY2VpdmUgZnJhbWUKQEAgLTE2NDQsMTMgKzE2ODUsOCBAQAogICoKICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvbgogICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGwKLSAqIEBzdGF0dXM6IHN0YXR1cyBvZiB0aGlzIGZyYW1lOyB0aGUgc3RhdHVzIHBvaW50ZXIgbmVlZCBub3QgYmUgdmFsaWQKLSAqCWFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbmQgaXMgbm90IGZyZWVkIGJ5IG1hYzgwMjExLAotICoJaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBpdCBwb2ludHMgdG8gYSBzdGFjayBhcmVhCiAgKi8KLXZvaWQgaWVlZTgwMjExX3J4X2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpOwordm9pZCBpZWVlODAyMTFfcnhfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIC8qKgogICogaWVlZTgwMjExX3R4X3N0YXR1cyAtIHRyYW5zbWl0IHN0YXR1cyBjYWxsYmFjawpAQCAtMTkxNyw2ICsxOTUzLDMxIEBACiAJCQkJCQl2b2lkICpkYXRhKTsKIAogLyoqCisgKiBpZWVlODAyMTFfcXVldWVfd29yayAtIGFkZCB3b3JrIG9udG8gdGhlIG1hYzgwMjExIHdvcmtxdWV1ZQorICoKKyAqIERyaXZlcnMgYW5kIG1hYzgwMjExIHVzZSB0aGlzIHRvIGFkZCB3b3JrIG9udG8gdGhlIG1hYzgwMjExIHdvcmtxdWV1ZS4KKyAqIFRoaXMgaGVscGVyIGVuc3VyZXMgZHJpdmVycyBhcmUgbm90IHF1ZXVlaW5nIHdvcmsgd2hlbiB0aGV5IHNob3VsZCBub3QgYmUuCisgKgorICogQGh3OiB0aGUgaGFyZHdhcmUgc3RydWN0IGZvciB0aGUgaW50ZXJmYWNlIHdlIGFyZSBhZGRpbmcgd29yayBmb3IKKyAqIEB3b3JrOiB0aGUgd29yayB3ZSB3YW50IHRvIGFkZCBvbnRvIHRoZSBtYWM4MDIxMSB3b3JrcXVldWUKKyAqLwordm9pZCBpZWVlODAyMTFfcXVldWVfd29yayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworLyoqCisgKiBpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrIC0gYWRkIHdvcmsgb250byB0aGUgbWFjODAyMTEgd29ya3F1ZXVlCisgKgorICogRHJpdmVycyBhbmQgbWFjODAyMTEgdXNlIHRoaXMgdG8gcXVldWUgZGVsYXllZCB3b3JrIG9udG8gdGhlIG1hYzgwMjExCisgKiB3b3JrcXVldWUuCisgKgorICogQGh3OiB0aGUgaGFyZHdhcmUgc3RydWN0IGZvciB0aGUgaW50ZXJmYWNlIHdlIGFyZSBhZGRpbmcgd29yayBmb3IKKyAqIEBkd29yazogZGVsYXlhYmxlIHdvcmsgdG8gcXVldWUgb250byB0aGUgbWFjODAyMTEgd29ya3F1ZXVlCisgKiBAZGVsYXk6IG51bWJlciBvZiBqaWZmaWVzIHRvIHdhaXQgYmVmb3JlIHF1ZXVlaW5nCisgKi8KK3ZvaWQgaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrLAorCQkJCSAgdW5zaWduZWQgbG9uZyBkZWxheSk7CisKKy8qKgogICogaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24gLSBTdGFydCBhIHR4IEJsb2NrIEFjayBzZXNzaW9uLgogICogQGh3OiBwb2ludGVyIGFzIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCiAgKiBAcmE6IHJlY2VpdmVyIGFkZHJlc3Mgb2YgdGhlIEJBIHNlc3Npb24gcmVjaXBpZW50CkBAIC0yMDkwLDYgKzIxNTEsMjkgQEAKIAlyZXR1cm4gKHN0YSA9PSBOVUxMIHx8IHN0YS0+c3VwcF9yYXRlc1tiYW5kXSAmIEJJVChpbmRleCkpOwogfQogCisvKioKKyAqIHJhdGVfY29udHJvbF9zZW5kX2xvdyAtIGhlbHBlciBmb3IgZHJpdmVycyBmb3IgbWFuYWdlbWVudC9uby1hY2sgZnJhbWVzCisgKgorICogUmF0ZSBjb250cm9sIGFsZ29yaXRobXMgdGhhdCBhZ3JlZSB0byB1c2UgdGhlIGxvd2VzdCByYXRlIHRvCisgKiBzZW5kIG1hbmFnZW1lbnQgZnJhbWVzIGFuZCBOT19BQ0sgZGF0YSB3aXRoIHRoZSByZXNwZWN0aXZlIGh3CisgKiByZXRyaWVzIHNob3VsZCB1c2UgdGhpcyBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZWlyIG1hYzgwMjExIGdldF9yYXRlCisgKiBjYWxsYmFjay4gSWYgdHJ1ZSBpcyByZXR1cm5lZCB0aGUgcmF0ZSBjb250cm9sIGNhbiBzaW1wbHkgcmV0dXJuLgorICogSWYgZmFsc2UgaXMgcmV0dXJuZWQgd2UgZ3VhcmFudGVlIHRoYXQgc3RhIGFuZCBzdGEgYW5kIHByaXZfc3RhIGlzCisgKiBub3QgbnVsbC4KKyAqCisgKiBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtcyB3aXNoaW5nIHRvIGRvIG1vcmUgaW50ZWxsaWdlbnQgc2VsZWN0aW9uIG9mCisgKiByYXRlIGZvciBtdWx0aWNhc3QvYnJvYWRjYXN0IGZyYW1lcyBtYXkgY2hvb3NlIHRvIG5vdCB1c2UgdGhpcy4KKyAqCisgKiBAc3RhOiAmc3RydWN0IGllZWU4MDIxMV9zdGEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IGRlc3RpbmF0aW9uLiBOb3RlCisgKiAJdGhhdCB0aGlzIG1heSBiZSBudWxsLgorICogQHByaXZfc3RhOiBwcml2YXRlIHJhdGUgY29udHJvbCBzdHJ1Y3R1cmUuIFRoaXMgbWF5IGJlIG51bGwuCisgKiBAdHhyYzogcmF0ZSBjb250cm9sIGluZm9ybWF0aW9uIHdlIHNob2x1ZCBwb3B1bGF0ZSBmb3IgbWFjODAyMTEuCisgKi8KK2Jvb2wgcmF0ZV9jb250cm9sX3NlbmRfbG93KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICB2b2lkICpwcml2X3N0YSwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjKTsKKworCiBzdGF0aWMgaW5saW5lIHM4CiByYXRlX2xvd2VzdF9pbmRleChzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKIAkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQpAQCAtMjEwNiw2ICsyMTkwLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUKK2Jvb2wgcmF0ZV91c2FibGVfaW5kZXhfZXhpc3RzKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKQorCQlpZiAocmF0ZV9zdXBwb3J0ZWQoc3RhLCBzYmFuZC0+YmFuZCwgaSkpCisJCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CiAKIGludCBpZWVlODAyMTFfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHMpOwogdm9pZCBpZWVlODAyMTFfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoc3RydWN0IHJhdGVfY29udHJvbF9vcHMgKm9wcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaCBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCmluZGV4IGQ4ZDc5MGUuLjM4MTdmZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCisrKyBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CiAKIC8qCkBAIC0xMTcsNyArMTE4LDcgQEAKIAlpbnQJCQkoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlhcnBfcXVldWU7CiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7Ci0Jc3RydWN0IG5laWdoX29wcwkqb3BzOworCWNvbnN0IHN0cnVjdCBuZWlnaF9vcHMJKm9wczsKIAl1OAkJCXByaW1hcnlfa2V5WzBdOwogfTsKIApAQCAtMTY3LDcgKzE2OCw3IEBACiAJaW50CQkJZ2NfdGhyZXNoMjsKIAlpbnQJCQlnY190aHJlc2gzOwogCXVuc2lnbmVkIGxvbmcJCWxhc3RfZmx1c2g7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgCWdjX3RpbWVyOworCXN0cnVjdCBkZWxheWVkX3dvcmsJZ2Nfd29yazsKIAlzdHJ1Y3QgdGltZXJfbGlzdCAJcHJveHlfdGltZXI7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlwcm94eV9xdWV1ZTsKIAlhdG9taWNfdAkJZW50cmllczsKQEAgLTE3OCw3ICsxNzksNiBAQAogCXN0cnVjdCBuZWlnaGJvdXIJKipoYXNoX2J1Y2tldHM7CiAJdW5zaWduZWQgaW50CQloYXNoX21hc2s7CiAJX191MzIJCQloYXNoX3JuZDsKLQl1bnNpZ25lZCBpbnQJCWhhc2hfY2hhaW5fZ2M7CiAJc3RydWN0IHBuZWlnaF9lbnRyeQkqKnBoYXNoX2J1Y2tldHM7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKaW5kZXggZGVkNDM0Yi4uYTEyMDI4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaApAQCAtMjYsNiArMjYsNyBAQAogc3RydWN0IHNvY2s7CiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjsKIHN0cnVjdCBuZXRfZ2VuZXJpYzsKK3N0cnVjdCBzb2NrOwogCiBzdHJ1Y3QgbmV0IHsKIAlhdG9taWNfdAkJY291bnQ7CQkvKiBUbyBkZWNpZGVkIHdoZW4gdGhlIG5ldHdvcmsKQEAgLTU3LDYgKzU4LDcgQEAKIAlzcGlubG9ja190CQlydWxlc19tb2RfbG9jazsKIAogCXN0cnVjdCBzb2NrIAkJKnJ0bmw7CQkJLyogcnRuZXRsaW5rIHNvY2tldCAqLworCXN0cnVjdCBzb2NrCQkqZ2VubF9zb2NrOwogCiAJc3RydWN0IG5ldG5zX2NvcmUJY29yZTsKIAlzdHJ1Y3QgbmV0bnNfbWliCW1pYjsKQEAgLTc4LDYgKzgwLDkgQEAKICNpZmRlZiBDT05GSUdfWEZSTQogCXN0cnVjdCBuZXRuc194ZnJtCXhmcm07CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCisJc3RydWN0IHNrX2J1ZmZfaGVhZAl3ZXh0X25sZXZlbnRzOworI2VuZGlmCiAJc3RydWN0IG5ldF9nZW5lcmljCSpnZW47CiB9OwogCkBAIC0xMDYsNiArMTExLDggQEAKIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbmV0X25hbWVzcGFjZV9saXN0OwogCitleHRlcm4gc3RydWN0IG5ldCAqZ2V0X25ldF9uc19ieV9waWQocGlkX3QgcGlkKTsKKwogI2lmZGVmIENPTkZJR19ORVRfTlMKIGV4dGVybiB2b2lkIF9fcHV0X25ldChzdHJ1Y3QgbmV0ICpuZXQpOwogCkBAIC0yMDgsNiArMjE1LDkgQEAKICNkZWZpbmUgZm9yX2VhY2hfbmV0KFZBUikJCQkJXAogCWxpc3RfZm9yX2VhY2hfZW50cnkoVkFSLCAmbmV0X25hbWVzcGFjZV9saXN0LCBsaXN0KQogCisjZGVmaW5lIGZvcl9lYWNoX25ldF9yY3UoVkFSKQkJCQlcCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoVkFSLCAmbmV0X25hbWVzcGFjZV9saXN0LCBsaXN0KQorCiAjaWZkZWYgQ09ORklHX05FVF9OUwogI2RlZmluZSBfX25ldF9pbml0CiAjZGVmaW5lIF9fbmV0X2V4aXQKQEAgLTIyOSwxMyArMjM5LDE1IEBACiAgKiBuZWVkcyBwZXIgbmV0d29yayBuYW1lc3BhY2Ugb3BlcmF0aW9ucyB1c2UgZGV2aWNlIHBlcm5ldCBvcGVyYXRpb25zLAogICogb3RoZXJ3aXNlIHVzZSBwZXJuZXQgc3Vic3lzIG9wZXJhdGlvbnMuCiAgKgotICogVGhpcyBpcyBjcml0aWNhbGx5IGltcG9ydGFudC4gIE1vc3Qgb2YgdGhlIG5ldHdvcmsgY29kZSBjbGVhbnVwCi0gKiBydW5zIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBkZXZfcmVtb3ZlX3BhY2sgaGFzIGJlZW4gY2FsbGVkIHNvIG5vCi0gKiBuZXcgcGFja2V0cyB3aWxsIGFycml2ZSBkdXJpbmcgYW5kIGFmdGVyIHRoZSBjbGVhbnVwIGZ1bmN0aW9ucyBoYXZlCi0gKiBiZWVuIGNhbGxlZC4gIGRldl9yZW1vdmVfcGFjayBpcyBub3QgcGVyIG5hbWVzcGFjZSBzbyBpbnN0ZWFkIHRoZQotICogZ3VhcmFudGVlIG9mIG5vIG1vcmUgcGFja2V0cyBhcnJpdmluZyBpbiBhIG5ldHdvcmsgbmFtZXNwYWNlIGlzCi0gKiBwcm92aWRlZCBieSBlbnN1cmluZyB0aGF0IGFsbCBuZXR3b3JrIGRldmljZXMgYW5kIGFsbCBzb2NrZXRzIGhhdmUKLSAqIGxlZnQgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGJlZm9yZSB0aGUgY2xlYW51cCBtZXRob2RzIGFyZSBjYWxsZWQuCisgKiBOZXR3b3JrIGludGVyZmFjZXMgbmVlZCB0byBiZSByZW1vdmVkIGZyb20gYSBkeWluZyBuZXRucyBfYmVmb3JlXworICogc3Vic3lzIG5vdGlmaWVycyBjYW4gYmUgY2FsbGVkLCBhcyBtb3N0IG9mIHRoZSBuZXR3b3JrIGNvZGUgY2xlYW51cAorICogKHdoaWNoIGlzIGRvbmUgZnJvbSBzdWJzeXMgbm90aWZpZXJzKSBydW5zIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdAorICogZGV2X3JlbW92ZV9wYWNrIGhhcyBiZWVuIGNhbGxlZCBzbyBubyBuZXcgcGFja2V0cyB3aWxsIGFycml2ZSBkdXJpbmcKKyAqIGFuZCBhZnRlciB0aGUgY2xlYW51cCBmdW5jdGlvbnMgaGF2ZSBiZWVuIGNhbGxlZC4gIGRldl9yZW1vdmVfcGFjaworICogaXMgbm90IHBlciBuYW1lc3BhY2Ugc28gaW5zdGVhZCB0aGUgZ3VhcmFudGVlIG9mIG5vIG1vcmUgcGFja2V0cworICogYXJyaXZpbmcgaW4gYSBuZXR3b3JrIG5hbWVzcGFjZSBpcyBwcm92aWRlZCBieSBlbnN1cmluZyB0aGF0IGFsbAorICogbmV0d29yayBkZXZpY2VzIGFuZCBhbGwgc29ja2V0cyBoYXZlIGxlZnQgdGhlIG5ldHdvcmsgbmFtZXNwYWNlCisgKiBiZWZvcmUgdGhlIGNsZWFudXAgbWV0aG9kcyBhcmUgY2FsbGVkLgogICoKICAqIEZvciB0aGUgbG9uZ2VzdCB0aW1lIHRoZSBpcHY0IGljbXAgY29kZSB3YXMgcmVnaXN0ZXJlZCBhcyBhIHBlcm5ldAogICogZGV2aWNlIHdoaWNoIGNhdXNlZCBrZXJuZWwgb29wcywgYW5kIHBhbmljcyBkdXJpbmcgbmV0d29yawpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaAppbmRleCA1ODY4NDA2Li4zMzYwMmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaApAQCAtMzEsNiArMzEsNiBAQAogZXh0ZXJuIGludAogKCpuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2spKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCQkgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXAsCi0JCQkJICBzdHJ1Y3QgbmxhdHRyICphdHRyKTsKKwkJCQkgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpOwogCiAjZW5kaWYgLyogX05GX05BVF9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L25ldGxpbmsuaAppbmRleCAwMDdiZGIwLi5hNjNiMjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bGluay5oCkBAIC0zNjUsNyArMzY1LDcgQEAKICAqCiAgKiBTZWUgbmxhX3BhcnNlKCkKICAqLwotc3RhdGljIGlubGluZSBpbnQgbmxtc2dfcGFyc2Uoc3RydWN0IG5sbXNnaGRyICpubGgsIGludCBoZHJsZW4sCitzdGF0aWMgaW5saW5lIGludCBubG1zZ19wYXJzZShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgaW50IGhkcmxlbiwKIAkJCSAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIGludCBtYXh0eXBlLAogCQkJICAgICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKIHsKQEAgLTQxNCw3ICs0MTQsNyBAQAogICoKICAqIFJldHVybnMgMSBpZiBhIHJlcG9ydCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiBpcyByZXF1ZXN0ZWQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5sbXNnX3JlcG9ydChzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKK3N0YXRpYyBpbmxpbmUgaW50IG5sbXNnX3JlcG9ydChjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKIHsKIAlyZXR1cm4gISEobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0VDSE8pOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oCmluZGV4IGFmYWI0ZTQuLmRmZWIyZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjYuaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgKQEAgLTYsNiArNiw3IEBACiAKICNpZm5kZWYgX19ORVROU19JUFY2X0hfXwogI2RlZmluZSBfX05FVE5TX0lQVjZfSF9fCisjaW5jbHVkZSA8bmV0L2RzdF9vcHMuaD4KIAogc3RydWN0IGN0bF90YWJsZV9oZWFkZXI7CiAKQEAgLTQyLDcgKzQzLDcgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICBpcDZfZmliX3RpbWVyOwogCXN0cnVjdCBobGlzdF9oZWFkICAgICAgICpmaWJfdGFibGVfaGFzaDsKIAlzdHJ1Y3QgZmliNl90YWJsZSAgICAgICAqZmliNl9tYWluX3RibDsKLQlzdHJ1Y3QgZHN0X29wcwkJKmlwNl9kc3Rfb3BzOworCXN0cnVjdCBkc3Rfb3BzCQlpcDZfZHN0X29wczsKIAl1bnNpZ25lZCBpbnQJCSBpcDZfcnRfZ2NfZXhwaXJlOwogCXVuc2lnbmVkIGxvbmcJCSBpcDZfcnRfbGFzdF9nYzsKICNpZmRlZiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL3hfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRucy94X3RhYmxlcy5oCmluZGV4IDk1NTRhNjQuLjU5MWRiN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL3hfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMveF90YWJsZXMuaApAQCAtOCw4ICs4LDExIEBACiAKIHN0cnVjdCBuZXRuc194dCB7CiAJc3RydWN0IGxpc3RfaGVhZCB0YWJsZXNbTkZQUk9UT19OVU1QUk9UT107CisjaWYgZGVmaW5lZChDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTX01PRFVMRSkKIAlzdHJ1Y3QgZWJ0X3RhYmxlICpicm91dGVfdGFibGU7CiAJc3RydWN0IGVidF90YWJsZSAqZnJhbWVfZmlsdGVyOwogCXN0cnVjdCBlYnRfdGFibGUgKmZyYW1lX25hdDsKKyNlbmRpZgogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmw4MDIxNTQuaCBiL2luY2x1ZGUvbmV0L25sODAyMTU0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkMmJhMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25sODAyMTU0LmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBubDgwMjE1NC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IFNpZW1lbnMgQUcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaWZuZGVmIElFRUU4MDIxNTRfTkxfSAorI2RlZmluZSBJRUVFODAyMTU0X05MX0gKKworc3RydWN0IG5ldF9kZXZpY2U7CitzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyOworCisvKioKKyAqIGllZWU4MDIxNTRfbmxfYXNzb2NfaW5kaWMgLSBOb3RpZnkgdXNlcmxhbmQgb2YgYW4gYXNzb2NpYXRpb24gcmVxdWVzdC4KKyAqIEBkZXY6IFRoZSBuZXR3b3JrIGRldmljZSBvbiB3aGljaCB0aGlzIGFzc29jaWF0aW9uIHJlcXVlc3Qgd2FzCisgKiAgICAgICByZWNlaXZlZC4KKyAqIEBhZGRyOiBUaGUgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHJlcXVlc3RpbmcgYXNzb2NpYXRpb24uCisgKiBAY2FwOiBUaGUgY2FwYWJpbGl0eSBpbmZvcm1hdGlvbiBmaWVsZCBmcm9tIHRoZSBkZXZpY2UuCisgKgorICogVGhpcyBpbmZvcm1zIGEgdXNlcmxhbmQgY29vcmRpbmF0b3Igb2YgYSBkZXZpY2UgcmVxdWVzdGluZyB0bworICogYXNzb2NpYXRlIHdpdGggdGhlIFBBTiBjb250cm9sbGVkIGJ5IHRoZSBjb29yZGluYXRvci4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy4zLjEgb2YgdGhlIElFRUUgODAyLjE1LjQtMjAwNiBkb2N1bWVudC4KKyAqLworaW50IGllZWU4MDIxNTRfbmxfYXNzb2NfaW5kaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkciwgdTggY2FwKTsKKworLyoqCisgKiBpZWVlODAyMTU0X25sX2Fzc29jX2NvbmZpcm0gLSBOb3RpZnkgdXNlcmxhbmQgb2YgYXNzb2NpYXRpb24uCisgKiBAZGV2OiBUaGUgZGV2aWNlIHdoaWNoIGhhcyBjb21wbGV0ZWQgYXNzb2NpYXRpb24uCisgKiBAc2hvcnRfYWRkcjogVGhlIHNob3J0IGFkZHJlc3MgYXNzaWduZWQgdG8gdGhlIGRldmljZS4KKyAqIEBzdGF0dXM6IFRoZSBzdGF0dXMgb2YgdGhlIGFzc29jaWF0aW9uLgorICoKKyAqIEluZm9ybSB1c2VybGFuZCBvZiB0aGUgcmVzdWx0IG9mIGFuIGFzc29jaWF0aW9uIHJlcXVlc3QuIElmIHRoZQorICogYXNzb2NpYXRpb24gcmVxdWVzdCBpbmNsdWRlZCBhc2tpbmcgdGhlIGNvb3JkaW5hdG9yIHRvIGFsbG9jYXRlCisgKiBhIHNob3J0IGFkZHJlc3MgdGhlbiBpdCBpcyByZXR1cm5lZCBpbiBAc2hvcnRfYWRkci4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy4zLjIgb2YgdGhlIElFRUUgODAyLjE1LjQgZG9jdW1lbnQuCisgKi8KK2ludCBpZWVlODAyMTU0X25sX2Fzc29jX2NvbmZpcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJdTE2IHNob3J0X2FkZHIsIHU4IHN0YXR1cyk7CisKKy8qKgorICogaWVlZTgwMjE1NF9ubF9kaXNhc3NvY19pbmRpYyAtIE5vdGlmeSB1c2VybGFuZCBvZiBkaXNhc3NvY2lhdGlvbi4KKyAqIEBkZXY6IFRoZSBkZXZpY2Ugb24gd2hpY2ggZGlzYXNzb2NpYXRpb24gd2FzIGluZGljYXRlZC4KKyAqIEBhZGRyOiBUaGUgZGV2aWNlIHdoaWNoIGlzIGRpc2Fzc29jaWF0aW5nLgorICogQHJlYXNvbjogVGhlIHJlYXNvbiBmb3IgdGhlIGRpc2Fzc29jaWF0aW9uLgorICoKKyAqIEluZm9ybSB1c2VybGFuZCB0aGF0IGEgZGV2aWNlIGhhcyBkaXNhc3NvY2lhdGVkIGZyb20gdGhlIG5ldHdvcmsuCisgKgorICogTm90ZTogVGhpcyBpcyBpbiBzZWN0aW9uIDcuMy4zIG9mIHRoZSBJRUVFIDgwMi4xNS40IGRvY3VtZW50LgorICovCitpbnQgaWVlZTgwMjE1NF9ubF9kaXNhc3NvY19pbmRpYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICphZGRyLCB1OCByZWFzb24pOworCisvKioKKyAqIGllZWU4MDIxNTRfbmxfZGlzYXNzb2NfY29uZmlybSAtIE5vdGlmeSB1c2VybGFuZCBvZiBkaXNhc3NvY2lhdGlvbgorICogY29tcGxldGlvbi4KKyAqIEBkZXY6IFRoZSBkZXZpY2Ugb24gd2hpY2ggZGlzYXNzb2NpYXRpb24gd2FzIG9yZGVyZWQuCisgKiBAc3RhdHVzOiBUaGUgcmVzdWx0IG9mIHRoZSBkaXNhc3NvY2lhdGlvbi4KKyAqCisgKiBJbmZvcm0gdXNlcmxhbmQgb2YgdGhlIHJlc3VsdCBvZiByZXF1ZXN0aW5nIHRoYXQgYSBkZXZpY2UKKyAqIGRpc2Fzc29jaWF0ZSwgb3IgdGhlIHJlc3VsdCBvZiByZXF1ZXN0aW5nIHRoYXQgd2UgZGlzYXNzb2NpYXRlIGZyb20KKyAqIGEgUEFOIG1hbmFnZWQgYnkgYW5vdGhlciBjb29yZGluYXRvci4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy4xLjQuMyBvZiB0aGUgSUVFRSA4MDIuMTUuNCBkb2N1bWVudC4KKyAqLworaW50IGllZWU4MDIxNTRfbmxfZGlzYXNzb2NfY29uZmlybShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQl1OCBzdGF0dXMpOworCisvKioKKyAqIGllZWU4MDIxNTRfbmxfc2Nhbl9jb25maXJtIC0gTm90aWZ5IHVzZXJsYW5kIG9mIGNvbXBsZXRpb24gb2Ygc2Nhbi4KKyAqIEBkZXY6IFRoZSBkZXZpY2Ugd2hpY2ggd2FzIGluc3RydWN0ZWQgdG8gc2Nhbi4KKyAqIEBzdGF0dXM6IFRoZSBzdGF0dXMgb2YgdGhlIHNjYW4gb3BlcmF0aW9uLgorICogQHNjYW5fdHlwZTogV2hhdCB0eXBlIG9mIHNjYW4gd2FzIHBlcmZvcm1lZC4KKyAqIEB1bnNjYW5uZWQ6IEFueSBjaGFubmVscyB0aGF0IHRoZSBkZXZpY2Ugd2FzIHVuYWJsZSB0byBzY2FuLgorICogQGVkbDogVGhlIGVuZXJneSBsZXZlbHMgKGlmIGEgcGFzc2l2ZSBzY2FuKS4KKyAqCisgKgorICogTm90ZTogVGhpcyBpcyBpbiBzZWN0aW9uIDcuMS4xMSBvZiB0aGUgSUVFRSA4MDIuMTUuNCBkb2N1bWVudC4KKyAqIE5vdGU6IFRoaXMgQVBJIGRvZXMgbm90IHBlcm1pdCB0aGUgcmV0dXJuIG9mIGFuIGFjdGl2ZSBzY2FuIHJlc3VsdC4KKyAqLworaW50IGllZWU4MDIxNTRfbmxfc2Nhbl9jb25maXJtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXU4IHN0YXR1cywgdTggc2Nhbl90eXBlLCB1MzIgdW5zY2FubmVkLCB1OCBwYWdlLAorCQl1OCAqZWRsLyosIHN0cnVjdCBsaXN0X2hlYWQgKnBhbl9kZXNjX2xpc3QgKi8pOworCisvKioKKyAqIGllZWU4MDIxNTRfbmxfYmVhY29uX2luZGljIC0gTm90aWZ5IHVzZXJsYW5kIG9mIGEgcmVjZWl2ZWQgYmVhY29uLgorICogQGRldjogVGhlIGRldmljZSBvbiB3aGljaCBhIGJlYWNvbiB3YXMgcmVjZWl2ZWQuCisgKiBAcGFuaWQ6IFRoZSBQQU4gb2YgdGhlIGNvb3JkaW5hdG9yLgorICogQGNvb3JkX2FkZHI6IFRoZSBzaG9ydCBhZGRyZXNzIG9mIHRoZSBjb29yZGluYXRvciBvbiB0aGF0IFBBTi4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy4xLjUgb2YgdGhlIElFRUUgODAyLjE1LjQgZG9jdW1lbnQuCisgKiBOb3RlOiBUaGlzIEFQSSBkb2VzIG5vdCBwcm92aWRlIGV4dGVuZGVkIGluZm9ybWF0aW9uIHN1Y2ggYXMgd2hhdAorICogY2hhbm5lbCB0aGUgUEFOIGlzIG9uIG9yIHdoYXQgdGhlIExRSSBvZiB0aGUgYmVhY29uIGZyYW1lIHdhcyBvbgorICogcmVjZWlwdC4KKyAqIE5vdGU6IFRoaXMgQVBJIGNhbm5vdCBpbmRpY2F0ZSBhIGJlYWNvbiBmcmFtZSBmb3IgYSBjb29yZGluYXRvcgorICogICAgICAgb3BlcmF0aW5nIGluIGxvbmcgYWRkcmVzc2luZyBtb2RlLgorICovCitpbnQgaWVlZTgwMjE1NF9ubF9iZWFjb25faW5kaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHBhbmlkLAorCQl1MTYgY29vcmRfYWRkcik7CisKKy8qKgorICogaWVlZTgwMjE1NF9ubF9zdGFydF9jb25maXJtIC0gTm90aWZ5IHVzZXJsYW5kIG9mIGNvbXBsZXRpb24gb2Ygc3RhcnQuCisgKiBAZGV2OiBUaGUgZGV2aWNlIHdoaWNoIHdhcyBpbnN0cnVjdGVkIHRvIHNjYW4uCisgKiBAc3RhdHVzOiBUaGUgc3RhdHVzIG9mIHRoZSBzY2FuIG9wZXJhdGlvbi4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy4xLjE0IG9mIHRoZSBJRUVFIDgwMi4xNS40IGRvY3VtZW50LgorICovCitpbnQgaWVlZTgwMjE1NF9ubF9zdGFydF9jb25maXJtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHN0YXR1cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oIGIvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oCmluZGV4IDI5ZDEyNjcuLjQ0YzkyM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Bob25ldC9wbl9kZXYuaAorKysgYi9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmgKQEAgLTQ5LDQgKzQ5LDYgQEAKIAogI2RlZmluZSBQTl9OT19BRERSCTB4ZmYKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG5fc29ja19zZXFfZm9wczsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCmluZGV4IDgyYTMxOTEuLmY5MTFlYzc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAorKysgYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaApAQCAtODcsNiArODcsOSBAQAogZXh0ZXJuIHZvaWQgcWRpc2NfcHV0X3J0YWIoc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnRhYik7CiBleHRlcm4gdm9pZCBxZGlzY19wdXRfc3RhYihzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqdGFiKTsKIGV4dGVybiB2b2lkIHFkaXNjX3dhcm5fbm9ud2MoY2hhciAqdHh0LCBzdHJ1Y3QgUWRpc2MgKnFkaXNjKTsKK2V4dGVybiBpbnQgc2NoX2RpcmVjdF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqcSwKKwkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSwKKwkJCSAgIHNwaW5sb2NrX3QgKnJvb3RfbG9jayk7CiAKIGV4dGVybiB2b2lkIF9fcWRpc2NfcnVuKHN0cnVjdCBRZGlzYyAqcSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3J0bmV0bGluay5oIGIvaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmgKaW5kZXggM2MxODk1ZS4uYzNhYTA0NGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3J0bmV0bGluay5oCisrKyBiL2luY2x1ZGUvbmV0L3J0bmV0bGluay5oCkBAIC0xNCw3ICsxNCw3IEBACiBleHRlcm4gaW50CXJ0bmxfdW5yZWdpc3RlcihpbnQgcHJvdG9jb2wsIGludCBtc2d0eXBlKTsKIGV4dGVybiB2b2lkCXJ0bmxfdW5yZWdpc3Rlcl9hbGwoaW50IHByb3RvY29sKTsKIAotc3RhdGljIGlubGluZSBpbnQgcnRubF9tc2dfZmFtaWx5KHN0cnVjdCBubG1zZ2hkciAqbmxoKQorc3RhdGljIGlubGluZSBpbnQgcnRubF9tc2dfZmFtaWx5KGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoKQogewogCWlmIChubG1zZ19sZW4obmxoKSA+PSBzaXplb2Yoc3RydWN0IHJ0Z2VubXNnKSkKIAkJcmV0dXJuICgoc3RydWN0IHJ0Z2VubXNnICopIG5sbXNnX2RhdGEobmxoKSktPnJ0Z2VuX2ZhbWlseTsKQEAgLTcwLDYgKzcwLDkgQEAKIAlzaXplX3QJCQkoKmdldF94c3RhdHNfc2l6ZSkoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAJaW50CQkJKCpmaWxsX3hzdGF0cykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCWludAkJCSgqZ2V0X3R4X3F1ZXVlcykoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLAorCQkJCQkJIHVuc2lnbmVkIGludCAqdHhfcXVldWVzLAorCQkJCQkJIHVuc2lnbmVkIGludCAqcmVhbF90eF9xdWV1ZXMpOwogfTsKIAogZXh0ZXJuIGludAlfX3J0bmxfbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCmluZGV4IDU0ODJlOTUuLjg4ZWI5ZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaApAQCAtNDUsNiArNDUsOCBAQAogI2RlZmluZSBUQ1FfRl9CVUlMVElOCQkxCiAjZGVmaW5lIFRDUV9GX1RIUk9UVExFRAkJMgogI2RlZmluZSBUQ1FfRl9JTkdSRVNTCQk0CisjZGVmaW5lIFRDUV9GX0NBTl9CWVBBU1MJOAorI2RlZmluZSBUQ1FfRl9NUVJPT1QJCTE2CiAjZGVmaW5lIFRDUV9GX1dBUk5fTk9OV0MJKDEgPDwgMTYpCiAJaW50CQkJcGFkZGVkOwogCXN0cnVjdCBRZGlzY19vcHMJKm9wczsKQEAgLTc5LDYgKzgxLDcgQEAKIHN0cnVjdCBRZGlzY19jbGFzc19vcHMKIHsKIAkvKiBDaGlsZCBxZGlzYyBtYW5pcHVsYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQJCSgqc2VsZWN0X3F1ZXVlKShzdHJ1Y3QgUWRpc2MgKiwgc3RydWN0IHRjbXNnICopOwogCWludAkJCSgqZ3JhZnQpKHN0cnVjdCBRZGlzYyAqLCB1bnNpZ25lZCBsb25nIGNsLAogCQkJCQlzdHJ1Y3QgUWRpc2MgKiwgc3RydWN0IFFkaXNjICoqKTsKIAlzdHJ1Y3QgUWRpc2MgKgkJKCpsZWFmKShzdHJ1Y3QgUWRpc2MgKiwgdW5zaWduZWQgbG9uZyBjbCk7CkBAIC0xMjEsNiArMTI0LDcgQEAKIAl2b2lkCQkJKCpyZXNldCkoc3RydWN0IFFkaXNjICopOwogCXZvaWQJCQkoKmRlc3Ryb3kpKHN0cnVjdCBRZGlzYyAqKTsKIAlpbnQJCQkoKmNoYW5nZSkoc3RydWN0IFFkaXNjICosIHN0cnVjdCBubGF0dHIgKmFyZyk7CisJdm9pZAkJCSgqYXR0YWNoKShzdHJ1Y3QgUWRpc2MgKik7CiAKIAlpbnQJCQkoKmR1bXApKHN0cnVjdCBRZGlzYyAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIAlpbnQJCQkoKmR1bXBfc3RhdHMpKHN0cnVjdCBRZGlzYyAqLCBzdHJ1Y3QgZ25ldF9kdW1wICopOwpAQCAtMTgyLDYgKzE4NiwxMSBAQAogCWNoYXIJCQlkYXRhW107CiB9OwogCitzdGF0aWMgaW5saW5lIGludCBxZGlzY19xbGVuKHN0cnVjdCBRZGlzYyAqcSkKK3sKKwlyZXR1cm4gcS0+cS5xbGVuOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBxZGlzY19za2JfY2IgKnFkaXNjX3NrYl9jYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiAoc3RydWN0IHFkaXNjX3NrYl9jYiAqKXNrYi0+Y2I7CkBAIC0yNDksNiArMjU4LDggQEAKIAogZXh0ZXJuIHN0cnVjdCBRZGlzYyBub29wX3FkaXNjOwogZXh0ZXJuIHN0cnVjdCBRZGlzY19vcHMgbm9vcF9xZGlzY19vcHM7CitleHRlcm4gc3RydWN0IFFkaXNjX29wcyBwZmlmb19mYXN0X29wczsKK2V4dGVybiBzdHJ1Y3QgUWRpc2Nfb3BzIG1xX3FkaXNjX29wczsKIAogc3RydWN0IFFkaXNjX2NsYXNzX2NvbW1vbgogewpAQCAtMjk2LDYgKzMwNyw4IEBACiBleHRlcm4gdm9pZCBkZXZfc2h1dGRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkZXZfYWN0aXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkZXZfZGVhY3RpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBzdHJ1Y3QgUWRpc2MgKmRldl9ncmFmdF9xZGlzYyhzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsCisJCQkJICAgICBzdHJ1Y3QgUWRpc2MgKnFkaXNjKTsKIGV4dGVybiB2b2lkIHFkaXNjX3Jlc2V0KHN0cnVjdCBRZGlzYyAqcWRpc2MpOwogZXh0ZXJuIHZvaWQgcWRpc2NfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnFkaXNjKTsKIGV4dGVybiB2b2lkIHFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbihzdHJ1Y3QgUWRpc2MgKnFkaXNjLCB1bnNpZ25lZCBpbnQgbik7CkBAIC0zODcsMTMgKzQwMCwxOCBAQAogCXJldHVybiBxZGlzY19lbnF1ZXVlKHNrYiwgc2NoKSAmIE5FVF9YTUlUX01BU0s7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3FkaXNjX3VwZGF0ZV9ic3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGludCBsZW4pCit7CisJc2NoLT5ic3RhdHMuYnl0ZXMgKz0gbGVuOworCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKK30KKwogc3RhdGljIGlubGluZSBpbnQgX19xZGlzY19lbnF1ZXVlX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsCiAJCQkJICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCiB7CiAJX19za2JfcXVldWVfdGFpbChsaXN0LCBza2IpOwogCXNjaC0+cXN0YXRzLmJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKLQlzY2gtPmJzdGF0cy5wYWNrZXRzKys7CisJX19xZGlzY191cGRhdGVfYnN0YXRzKHNjaCwgcWRpc2NfcGt0X2xlbihza2IpKTsKIAogCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NtLmggYi9pbmNsdWRlL25ldC9zY20uaAppbmRleCBmNDViYjZlLi5jZjQ4YzgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY20uaAorKysgYi9pbmNsdWRlL25ldC9zY20uaApAQCAtMjYsNyArMjYsNiBAQAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLCiAJdTMyCQkJc2VjaWQ7CQkvKiBQYXNzZWQgc2VjdXJpdHkgSUQgCSovCiAjZW5kaWYKLQl1bnNpZ25lZCBsb25nCQlzZXE7CQkvKiBDb25uZWN0aW9uIHNlcW5vCSovCiB9OwogCiBleHRlcm4gdm9pZCBzY21fZGV0YWNoX2ZkcyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pOwpAQCAtNTksNyArNTgsNiBAQAogCXNjbS0+Y3JlZHMuZ2lkID0gY3VycmVudF9naWQoKTsKIAlzY20tPmNyZWRzLnBpZCA9IHRhc2tfdGdpZF92bnIocCk7CiAJc2NtLT5mcCA9IE5VTEw7Ci0Jc2NtLT5zZXEgPSAwOwogCXVuaXhfZ2V0X3BlZXJzZWNfZGdyYW0oc29jaywgc2NtKTsKIAlpZiAobXNnLT5tc2dfY29udHJvbGxlbiA8PSAwKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKaW5kZXggM2I5NjY4MC4uOGJlNTEzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmgKQEAgLTEwNiw2ICsxMDYsNyBAQAogCVNDVFBfQ01EX0FTU09DX1NIS0VZLCAgICAvKiBnZW5lcmF0ZSB0aGUgYXNzb2NpYXRpb24gc2hhcmVkIGtleXMgKi8KIAlTQ1RQX0NNRF9UMV9SRVRSQU4sCSAvKiBNYXJrIGZvciByZXRyYW5zbWlzc2lvbiBhZnRlciBUMSB0aW1lb3V0ICAqLwogCVNDVFBfQ01EX1VQREFURV9JTklUVEFHLCAvKiBVcGRhdGUgcGVlciBpbml0dGFnICovCisJU0NUUF9DTURfU0VORF9NU0csCSAvKiBTZW5kIHRoZSB3aG9sZSB1c2UgbWVzc2FnZSAqLwogCVNDVFBfQ01EX0xBU1QKIH0gc2N0cF92ZXJiX3Q7CiAKQEAgLTEzOSw2ICsxNDAsNyBAQAogCXN0cnVjdCBzY3RwX3VscGV2ZW50ICp1bHBldmVudDsKIAlzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldDsKIAlzY3RwX3NhY2toZHJfdCAqc2Fja2g7CisJc3RydWN0IHNjdHBfZGF0YW1zZyAqbXNnOwogfSBzY3RwX2FyZ190OwogCiAvKiBXZSBhcmUgc2ltdWxhdGluZyBNTCB0eXBlIGNvbnN0cnVjdG9ycyBoZXJlLgpAQCAtMTg4LDYgKzE5MCw3IEBACiBTQ1RQX0FSR19DT05TVFJVQ1RPUihVTFBFVkVOVCwgIHN0cnVjdCBzY3RwX3VscGV2ZW50ICosIHVscGV2ZW50KQogU0NUUF9BUkdfQ09OU1RSVUNUT1IoUEFDS0VULAlzdHJ1Y3Qgc2N0cF9wYWNrZXQgKiwgcGFja2V0KQogU0NUUF9BUkdfQ09OU1RSVUNUT1IoU0FDS0gsCXNjdHBfc2Fja2hkcl90ICosIHNhY2toKQorU0NUUF9BUkdfQ09OU1RSVUNUT1IoREFUQU1TRywJc3RydWN0IHNjdHBfZGF0YW1zZyAqLCBtc2cpCiAKIHR5cGVkZWYgc3RydWN0IHsKIAlzY3RwX2FyZ190IG9iajsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmggYi9pbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oCmluZGV4IGIwNWIwNTUuLjU4ZjcxNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaApAQCAtMjMxLDcgKzIzMSw3IEBACiAJU0NUUF9TU19MSVNURU5JTkcgICAgICA9IFRDUF9MSVNURU4sCiAJU0NUUF9TU19FU1RBQkxJU0hJTkcgICA9IFRDUF9TWU5fU0VOVCwKIAlTQ1RQX1NTX0VTVEFCTElTSEVEICAgID0gVENQX0VTVEFCTElTSEVELAotCVNDVFBfU1NfRElTQ09OTkVDVElORyAgPSBUQ1BfQ0xPU0lORywKKwlTQ1RQX1NTX0NMT1NJTkcgICAgICAgID0gVENQX0NMT1NJTkcsCiB9IHNjdHBfc29ja19zdGF0ZV90OwogCiAvKiBUaGVzZSBmdW5jdGlvbnMgbWFwIHZhcmlvdXMgdHlwZSB0byBwcmludGFibGUgbmFtZXMuICAqLwpAQCAtMjQxLDcgKzI0MSw5IEBACiBjb25zdCBjaGFyICpzY3RwX3BuYW1lKGNvbnN0IHNjdHBfc3VidHlwZV90KTsJLyogcHJpbWl0aXZlcyAqLwogCiAvKiBUaGlzIGlzIGEgdGFibGUgb2YgcHJpbnRhYmxlIG5hbWVzIG9mIHNjdHBfc3RhdGVfdCdzLiAgKi8KLWV4dGVybiBjb25zdCBjaGFyICpzY3RwX3N0YXRlX3RibFtdLCAqc2N0cF9ldnR0eXBlX3RibFtdLCAqc2N0cF9zdGF0dXNfdGJsW107CitleHRlcm4gY29uc3QgY2hhciAqY29uc3Qgc2N0cF9zdGF0ZV90YmxbXTsKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCBzY3RwX2V2dHR5cGVfdGJsW107CitleHRlcm4gY29uc3QgY2hhciAqY29uc3Qgc2N0cF9zdGF0dXNfdGJsW107CiAKIC8qIE1heGltdW0gY2h1bmsgbGVuZ3RoIGNvbnNpZGVyaW5nIHBhZGRpbmcgcmVxdWlyZW1lbnRzLiAqLwogZW51bSB7IFNDVFBfTUFYX0NIVU5LX0xFTiA9ICgoMTw8MTYpIC0gc2l6ZW9mKF9fdTMyKSkgfTsKQEAgLTM2MSw2ICszNjMsMTMgQEAKIAlTQ1RQX1NDT1BFX1VOVVNBQkxFLAkJLyogSVB2NCB1bnVzYWJsZSBhZGRyZXNzZXMgKi8KIH0gc2N0cF9zY29wZV90OwogCit0eXBlZGVmIGVudW0geworCVNDVFBfU0NPUEVfUE9MSUNZX0RJU0FCTEUsCS8qIERpc2FibGUgSVB2NCBhZGRyZXNzIHNjb3BpbmcgKi8KKwlTQ1RQX1NDT1BFX1BPTElDWV9FTkFCTEUsCS8qIEVuYWJsZSBJUHY0IGFkZHJlc3Mgc2NvcGluZyAqLworCVNDVFBfU0NPUEVfUE9MSUNZX1BSSVZBVEUsCS8qIEZvbGxvdyBkcmFmdCBidXQgYWxsb3cgSVB2NCBwcml2YXRlIGFkZHJlc3NlcyAqLworCVNDVFBfU0NPUEVfUE9MSUNZX0xJTkssCQkvKiBGb2xsb3cgZHJhZnQgYnV0IGFsbG93IElQdjQgbGluayBsb2NhbCBhZGRyZXNzZXMgKi8KK30gc2N0cF9zY29wZV9wb2xpY3lfdDsKKwogLyogQmFzZWQgb24gSVB2NCBzY29waW5nIDxkcmFmdC1zdGV3YXJ0LXRzdndnLXNjdHAtaXB2NC0wMC50eHQ+LAogICogU0NUUCBJUHY0IHVudXNhYmxlIGFkZHJlc3NlczogMC4wLjAuMC84LCAyMjQuMC4wLjAvNCwgMTk4LjE4LjAuMC8yNCwKICAqIDE5Mi44OC45OS4wLzI0LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmggYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAppbmRleCBkMTZhMzA0Li44YTZkNTI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaApAQCAtNDg2LDE1ICs0ODYsMTYgQEAKIH0KIAogLyogQnJlYWsgZG93biBkYXRhIGNodW5rcyBhdCB0aGlzIHBvaW50LiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHNjdHBfZnJhZ19wb2ludChjb25zdCBzdHJ1Y3Qgc2N0cF9zb2NrICpzcCwgaW50IHBtdHUpCitzdGF0aWMgaW5saW5lIGludCBzY3RwX2ZyYWdfcG9pbnQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIGludCBwbXR1KQogeworCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0cF9zayhhc29jLT5iYXNlLnNrKTsKIAlpbnQgZnJhZyA9IHBtdHU7CiAKIAlmcmFnIC09IHNwLT5wZi0+YWYtPm5ldF9oZWFkZXJfbGVuOwogCWZyYWcgLT0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKTsKIAotCWlmIChzcC0+dXNlcl9mcmFnKQotCQlmcmFnID0gbWluX3QoaW50LCBmcmFnLCBzcC0+dXNlcl9mcmFnKTsKKwlpZiAoYXNvYy0+dXNlcl9mcmFnKQorCQlmcmFnID0gbWluX3QoaW50LCBmcmFnLCBhc29jLT51c2VyX2ZyYWcpOwogCiAJZnJhZyA9IG1pbl90KGludCwgZnJhZywgU0NUUF9NQVhfQ0hVTktfTEVOKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCBlZGZjYWNmLi40MmQwMGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaApAQCAtMjE5LDYgKzIxOSwxNSBAQAogCS8qIEZsYWcgdG8gaWRpY2F0ZSBpZiBTQ1RQLUFVVEggaXMgZW5hYmxlZCAqLwogCWludCBhdXRoX2VuYWJsZTsKIAorCS8qCisJICogUG9saWN5IHRvIGNvbnRyb2wgU0NUUCBJUHY0IGFkZHJlc3Mgc2NvcGluZworCSAqIDAgICAtIERpc2FibGUgSVB2NCBhZGRyZXNzIHNjb3BpbmcKKwkgKiAxICAgLSBFbmFibGUgSVB2NCBhZGRyZXNzIHNjb3BpbmcKKwkgKiAyICAgLSBTZWxlY3RpdmVseSBhbGxvdyBvbmx5IElQdjQgcHJpdmF0ZSBhZGRyZXNzZXMKKwkgKiAzICAgLSBTZWxlY3RpdmVseSBhbGxvdyBvbmx5IElQdjQgbGluayBsb2NhbCBhZGRyZXNzCisJICovCisJaW50IGlwdjRfc2NvcGVfcG9saWN5OworCiAJLyogRmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIGNvbXB1dGluZyBhbmQgdmVyaWZ5aW5nIGNoZWNrc3VtCiAJICogaXMgZGlzYWJsZWQuICovCiAgICAgICAgIGludCBjaGVja3N1bV9kaXNhYmxlOwpAQCAtMjUyLDYgKzI2MSw3IEBACiAjZGVmaW5lIHNjdHBfcG9ydF9oYXNodGFibGUJCShzY3RwX2dsb2JhbHMucG9ydF9oYXNodGFibGUpCiAjZGVmaW5lIHNjdHBfbG9jYWxfYWRkcl9saXN0CQkoc2N0cF9nbG9iYWxzLmxvY2FsX2FkZHJfbGlzdCkKICNkZWZpbmUgc2N0cF9sb2NhbF9hZGRyX2xvY2sJCShzY3RwX2dsb2JhbHMuYWRkcl9saXN0X2xvY2spCisjZGVmaW5lIHNjdHBfc2NvcGVfcG9saWN5CQkoc2N0cF9nbG9iYWxzLmlwdjRfc2NvcGVfcG9saWN5KQogI2RlZmluZSBzY3RwX2FkZGlwX2VuYWJsZQkJKHNjdHBfZ2xvYmFscy5hZGRpcF9lbmFibGUpCiAjZGVmaW5lIHNjdHBfYWRkaXBfbm9hdXRoCQkoc2N0cF9nbG9iYWxzLmFkZGlwX25vYXV0aF9lbmFibGUpCiAjZGVmaW5lIHNjdHBfcHJzY3RwX2VuYWJsZQkJKHNjdHBfZ2xvYmFscy5wcnNjdHBfZW5hYmxlKQpAQCAtNjI4LDcgKzYzOCw3IEBACiAJLyogQ2h1bmtzIHdhaXRpbmcgdG8gYmUgc3VibWl0dGVkIHRvIGxvd2VyIGxheWVyLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgY2h1bmtzOwogCS8qIENodW5rcyB0aGF0IGhhdmUgYmVlbiB0cmFuc21pdHRlZC4gKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHRyYWNrOworCXNpemVfdCBtc2dfc2l6ZTsKIAkvKiBSZWZlcmVuY2UgY291bnRpbmcuICovCiAJYXRvbWljX3QgcmVmY250OwogCS8qIFdoZW4gaXMgdGhpcyBtZXNzYWdlIG5vIGxvbmdlciBpbnRlcmVzdGluZyB0byB0aGUgcGVlcj8gKi8KQEAgLTY0Myw2ICs2NTMsNyBAQAogc3RydWN0IHNjdHBfZGF0YW1zZyAqc2N0cF9kYXRhbXNnX2Zyb21fdXNlcihzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAogCQkJCQkgICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqLAogCQkJCQkgICAgc3RydWN0IG1zZ2hkciAqLCBpbnQgbGVuKTsKK3ZvaWQgc2N0cF9kYXRhbXNnX2ZyZWUoc3RydWN0IHNjdHBfZGF0YW1zZyAqKTsKIHZvaWQgc2N0cF9kYXRhbXNnX3B1dChzdHJ1Y3Qgc2N0cF9kYXRhbXNnICopOwogdm9pZCBzY3RwX2NodW5rX2ZhaWwoc3RydWN0IHNjdHBfY2h1bmsgKiwgaW50IGVycm9yKTsKIGludCBzY3RwX2NodW5rX2FiYW5kb25lZChzdHJ1Y3Qgc2N0cF9jaHVuayAqKTsKQEAgLTgxMSwyMiArODIyLDEyIEBACiAJLyogcG9pbnRlciB0byB0aGUgYXV0aCBjaHVuayBmb3IgdGhpcyBwYWNrZXQgKi8KIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqYXV0aDsKIAotCS8qIFRoaXMgcGFja2V0IGNvbnRhaW5zIGEgQ09PS0lFLUVDSE8gY2h1bmsuICovCi0JX191OCBoYXNfY29va2llX2VjaG87Ci0KLQkvKiBUaGlzIHBhY2tldCBjb250YWlucyBhIFNBQ0sgY2h1bmsuICovCi0JX191OCBoYXNfc2FjazsKLQotCS8qIFRoaXMgcGFja2V0IGNvbnRhaW5zIGFuIEFVVEggY2h1bmsgKi8KLQlfX3U4IGhhc19hdXRoOwotCi0JLyogVGhpcyBwYWNrZXQgY29udGFpbnMgYXQgbGVhc3QgMSBEQVRBIGNodW5rICovCi0JX191OCBoYXNfZGF0YTsKLQotCS8qIFNDVFAgY2Fubm90IGZyYWdtZW50IHRoaXMgcGFja2V0LiBTbyBsZXQgaXAgZnJhZ21lbnQgaXQuICovCi0JX191OCBpcGZyYWdvazsKLQotCV9fdTggbWFsbG9jZWQ7CisJdTggIGhhc19jb29raWVfZWNobzoxLAkvKiBUaGlzIHBhY2tldCBjb250YWlucyBhIENPT0tJRS1FQ0hPIGNodW5rLiAqLworCSAgICBoYXNfc2FjazoxLAkJLyogVGhpcyBwYWNrZXQgY29udGFpbnMgYSBTQUNLIGNodW5rLiAqLworCSAgICBoYXNfYXV0aDoxLAkJLyogVGhpcyBwYWNrZXQgY29udGFpbnMgYW4gQVVUSCBjaHVuayAqLworCSAgICBoYXNfZGF0YToxLAkJLyogVGhpcyBwYWNrZXQgY29udGFpbnMgYXQgbGVhc3QgMSBEQVRBIGNodW5rICovCisJICAgIGlwZnJhZ29rOjEsCQkvKiBTbyBsZXQgaXAgZnJhZ21lbnQgdGhpcyBwYWNrZXQgKi8KKwkgICAgbWFsbG9jZWQ6MTsJCS8qIElzIGl0IG1hbGxvY2VkPyAqLwogfTsKIAogc3RydWN0IHNjdHBfcGFja2V0ICpzY3RwX3BhY2tldF9pbml0KHN0cnVjdCBzY3RwX3BhY2tldCAqLApAQCAtMTU2NywxMyArMTU2OCwxMyBAQAogCQlfX3UzMglzYWNrX2NudDsKIAogCQkvKiBUaGVzZSBhcmUgY2FwYWJpbGl0aWVzIHdoaWNoIG91ciBwZWVyIGFkdmVydGlzZWQuICAqLwotCQlfX3U4CWVjbl9jYXBhYmxlOwkgLyogQ2FuIHBlZXIgZG8gRUNOPyAqLwotCQlfX3U4CWlwdjRfYWRkcmVzczsJIC8qIFBlZXIgdW5kZXJzdGFuZHMgSVB2NCBhZGRyZXNzZXM/ICovCi0JCV9fdTgJaXB2Nl9hZGRyZXNzOwkgLyogUGVlciB1bmRlcnN0YW5kcyBJUHY2IGFkZHJlc3Nlcz8gKi8KLQkJX191OAlob3N0bmFtZV9hZGRyZXNzOy8qIFBlZXIgdW5kZXJzdGFuZHMgRE5TIGFkZHJlc3Nlcz8gKi8KLQkJX191OCAgICBhc2NvbmZfY2FwYWJsZTsgIC8qIERvZXMgcGVlciBzdXBwb3J0IEFERElQPyAqLwotCQlfX3U4ICAgIHByc2N0cF9jYXBhYmxlOyAgLyogQ2FuIHBlZXIgZG8gUFItU0NUUD8gKi8KLQkJX191OAlhdXRoX2NhcGFibGU7CSAvKiBJcyBwZWVyIGRvaW5nIFNDVFAtQVVUSD8gKi8KKwkJX191OAllY25fY2FwYWJsZToxLAkgICAgLyogQ2FuIHBlZXIgZG8gRUNOPyAqLworCQkJaXB2NF9hZGRyZXNzOjEsCSAgICAvKiBQZWVyIHVuZGVyc3RhbmRzIElQdjQgYWRkcmVzc2VzPyAqLworCQkJaXB2Nl9hZGRyZXNzOjEsCSAgICAvKiBQZWVyIHVuZGVyc3RhbmRzIElQdjYgYWRkcmVzc2VzPyAqLworCQkJaG9zdG5hbWVfYWRkcmVzczoxLCAvKiBQZWVyIHVuZGVyc3RhbmRzIEROUyBhZGRyZXNzZXM/ICovCisJCQlhc2NvbmZfY2FwYWJsZToxLCAgIC8qIERvZXMgcGVlciBzdXBwb3J0IEFERElQPyAqLworCQkJcHJzY3RwX2NhcGFibGU6MSwgICAvKiBDYW4gcGVlciBkbyBQUi1TQ1RQPyAqLworCQkJYXV0aF9jYXBhYmxlOjE7CSAgICAvKiBJcyBwZWVyIGRvaW5nIFNDVFAtQVVUSD8gKi8KIAogCQlfX3UzMiAgIGFkYXB0YXRpb25faW5kOwkgLyogQWRhcHRhdGlvbiBDb2RlIHBvaW50LiAqLwogCkBAIC0xNzM4LDYgKzE3MzksMTIgQEAKIAkgKi8KIAlfX3UzMiByd25kX292ZXI7CiAKKwkvKiBLZWVwcyB0cmVhY2sgb2YgcnduZCBwcmVzc3VyZS4gIFRoaXMgaGFwcGVucyB3aGVuIHdlIGhhdmUKKwkgKiBhIHdpbmRvdywgYnV0IG5vdCByZWNldmllIGJ1ZmZlciAoaS5lIHNtYWxsIHBhY2tldHMpLiAgVGhpcyBvbmUKKwkgKiBpcyByZWxlYXNlcyBzbG93bHkgKDEgUE1UVSBhdCBhIHRpbWUgKS4KKwkgKi8KKwlfX3UzMiByd25kX3ByZXNzOworCiAJLyogVGhpcyBpcyB0aGUgc25kYnVmIHNpemUgaW4gdXNlIGZvciB0aGUgYXNzb2NpYXRpb24uCiAJICogVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgc25kYnVmIHNpemUgZm9yIHRoZSBhc3NvY2lhdGlvbiwKIAkgKiBhcyBzcGVjaWZpZWQgaW4gdGhlIHNrLT5zbmRidWYuCkBAIC0xNzU2LDYgKzE3NjMsNyBAQAogCiAJLyogVGhlIG1lc3NhZ2Ugc2l6ZSBhdCB3aGljaCBTQ1RQIGZyYWdtZW50YXRpb24gd2lsbCBvY2N1ci4gKi8KIAlfX3UzMiBmcmFnX3BvaW50OworCV9fdTMyIHVzZXJfZnJhZzsKIAogCS8qIENvdW50ZXIgdXNlZCB0byBjb3VudCBJTklUIGVycm9ycy4gKi8KIAlpbnQgaW5pdF9lcnJfY291bnRlcjsKQEAgLTE5MDUsMTEgKzE5MTMsOCBAQAogCiAJX191MTYgYWN0aXZlX2tleV9pZDsKIAotCS8qIE5lZWQgdG8gc2VuZCBhbiBFQ05FIENodW5rPyAqLwotCWNoYXIgbmVlZF9lY25lOwotCi0JLyogSXMgaXQgYSB0ZW1wb3JhcnkgYXNzb2NpYXRpb24/ICovCi0JY2hhciB0ZW1wOworCV9fdTggbmVlZF9lY25lOjEsCS8qIE5lZWQgdG8gc2VuZCBhbiBFQ05FIENodW5rPyAqLworCSAgICAgdGVtcDoxOwkJLyogSXMgaXQgYSB0ZW1wb3JhcnkgYXNzb2NpYXRpb24/ICovCiB9OwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oIGIvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmgKaW5kZXggMTU4MGMwNC4uYmUyMzM0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmgKQEAgLTIxMCwxMiArMjEwLDYgQEAKIH07CiAKIAotdHlwZWRlZiB1bmlvbiB7Ci0JX191OCAgIAkJCXJhdzsKLQlzdHJ1Y3Qgc2N0cF9pbml0bXNnCWluaXQ7Ci0Jc3RydWN0IHNjdHBfc25kcmN2aW5mbwlzbmRyY3Y7Ci19IHNjdHBfY21zZ19kYXRhX3Q7Ci0KIC8qIFRoZXNlIGFyZSBjbXNnX3R5cGVzLiAgKi8KIHR5cGVkZWYgZW51bSBzY3RwX2Ntc2dfdHlwZSB7CiAJU0NUUF9JTklULCAgICAgICAgICAgICAgLyogNS4yLjEgU0NUUCBJbml0aWF0aW9uIFN0cnVjdHVyZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCA4OGFmODQzLi5iNzFhNDQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtNDY5LDYgKzQ2OSw3IEBACiAJCQkJICAgICAgaW50IG5vbmFnbGUpOwogZXh0ZXJuIGludCB0Y3BfbWF5X3NlbmRfbm93KHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gaW50IHRjcF9yZXRyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK2V4dGVybiB2b2lkIHRjcF9yZXRyYW5zbWl0X3RpbWVyKHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gdm9pZCB0Y3BfeG1pdF9yZXRyYW5zbWl0X3F1ZXVlKHN0cnVjdCBzb2NrICopOwogZXh0ZXJuIHZvaWQgdGNwX3NpbXBsZV9yZXRyYW5zbWl0KHN0cnVjdCBzb2NrICopOwogZXh0ZXJuIGludCB0Y3BfdHJpbV9oZWFkKHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICosIHUzMik7CkBAIC01MjEsNiArNTIyLDE3IEBACiBleHRlcm4gaW50IHRjcF9tc3NfdG9fbXR1KHN0cnVjdCBzb2NrICpzaywgaW50IG1zcyk7CiBleHRlcm4gdm9pZCB0Y3BfbXR1cF9pbml0KHN0cnVjdCBzb2NrICpzayk7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfYm91bmRfcnRvKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlpZiAoaW5ldF9jc2soc2spLT5pY3NrX3J0byA+IFRDUF9SVE9fTUFYKQorCQlpbmV0X2NzayhzayktPmljc2tfcnRvID0gVENQX1JUT19NQVg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIF9fdGNwX3NldF9ydG8oY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwlyZXR1cm4gKHRwLT5zcnR0ID4+IDMpICsgdHAtPnJ0dHZhcjsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIF9fdGNwX2Zhc3RfcGF0aF9vbihzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgc25kX3duZCkKIHsKIAl0cC0+cHJlZF9mbGFncyA9IGh0b25sKCh0cC0+dGNwX2hlYWRlcl9sZW4gPDwgMjYpIHwKQEAgLTEwMDcsNiArMTAxOSwxMSBAQAogCXJldHVybiB0cC0+a2VlcGFsaXZlX3RpbWUgPyA6IHN5c2N0bF90Y3Bfa2VlcGFsaXZlX3RpbWU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGtlZXBhbGl2ZV9wcm9iZXMoY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwlyZXR1cm4gdHAtPmtlZXBhbGl2ZV9wcm9iZXMgPyA6IHN5c2N0bF90Y3Bfa2VlcGFsaXZlX3Byb2JlczsKK30KKwogc3RhdGljIGlubGluZSBpbnQgdGNwX2Zpbl90aW1lKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKIAlpbnQgZmluX3RpbWVvdXQgPSB0Y3Bfc2soc2spLT5saW5nZXIyID8gOiBzeXNjdGxfdGNwX2Zpbl90aW1lb3V0OwpAQCAtMTE2OSw3ICsxMTg2LDcgQEAKICNkZWZpbmUgdGNwX3R3c2tfbWQ1X2tleSh0d3NrKQlOVUxMCiAjZW5kaWYKIAotZXh0ZXJuIHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wJKip0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2wodm9pZCk7CitleHRlcm4gc3RydWN0IHRjcF9tZDVzaWdfcG9vbAkqKnRjcF9hbGxvY19tZDVzaWdfcG9vbChzdHJ1Y3Qgc29jayAqKTsKIGV4dGVybiB2b2lkCQkJdGNwX2ZyZWVfbWQ1c2lnX3Bvb2wodm9pZCk7CiAKIGV4dGVybiBzdHJ1Y3QgdGNwX21kNXNpZ19wb29sCSpfX3RjcF9nZXRfbWQ1c2lnX3Bvb2woaW50IGNwdSk7CkBAIC0xMjM1LDYgKzEyNTIsMjkgQEAKICNkZWZpbmUgdGNwX2Zvcl93cml0ZV9xdWV1ZV9mcm9tX3NhZmUoc2tiLCB0bXAsIHNrKQkJCVwKIAlza2JfcXVldWVfd2Fsa19mcm9tX3NhZmUoJihzayktPnNrX3dyaXRlX3F1ZXVlLCBza2IsIHRtcCkKIAorLyogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGEgInRpbWVvdXQiIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIHRpbWVvdXQgb2YgYQorICogVENQIGNvbm5lY3Rpb24gYWZ0ZXIgImJvdW5kYXJ5IiB1bnN1Y2Vzc2Z1bCwgZXhwb25lbnRpYWxseSBiYWNrZWQtb2ZmCisgKiByZXRyYW5zbWlzc2lvbnMgd2l0aCBhbiBpbml0aWFsIFJUTyBvZiBUQ1BfUlRPX01JTi4KKyAqLworc3RhdGljIGlubGluZSBib29sIHJldHJhbnNtaXRzX3RpbWVkX291dChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSB1bnNpZ25lZCBpbnQgYm91bmRhcnkpCit7CisJdW5zaWduZWQgaW50IHRpbWVvdXQsIGxpbmVhcl9iYWNrb2ZmX3RocmVzaDsKKworCWlmICghaW5ldF9jc2soc2spLT5pY3NrX3JldHJhbnNtaXRzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlsaW5lYXJfYmFja29mZl90aHJlc2ggPSBpbG9nMihUQ1BfUlRPX01BWC9UQ1BfUlRPX01JTik7CisKKwlpZiAoYm91bmRhcnkgPD0gbGluZWFyX2JhY2tvZmZfdGhyZXNoKQorCQl0aW1lb3V0ID0gKCgyIDw8IGJvdW5kYXJ5KSAtIDEpICogVENQX1JUT19NSU47CisJZWxzZQorCQl0aW1lb3V0ID0gKCgyIDw8IGxpbmVhcl9iYWNrb2ZmX3RocmVzaCkgLSAxKSAqIFRDUF9SVE9fTUlOICsKKwkJCSAgKGJvdW5kYXJ5IC0gbGluZWFyX2JhY2tvZmZfdGhyZXNoKSAqIFRDUF9SVE9fTUFYOworCisJcmV0dXJuICh0Y3BfdGltZV9zdGFtcCAtIHRjcF9zayhzayktPnJldHJhbnNfc3RhbXApID49IHRpbWVvdXQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnRjcF9zZW5kX2hlYWQoc3RydWN0IHNvY2sgKnNrKQogewogCXJldHVybiBzay0+c2tfc2VuZF9oZWFkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmggYi9pbmNsdWRlL25ldC90cmFuc3BfdjYuaAppbmRleCBiZmIyNDBjLi5kNjUzODFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90cmFuc3BfdjYuaAorKysgYi9pbmNsdWRlL25ldC90cmFuc3BfdjYuaApAQCAtNTEsNyArNTEsNyBAQAogLyoKICAqCWFkZHJlc3MgZmFtaWx5IHNwZWNpZmljIGZ1bmN0aW9ucwogICovCi1leHRlcm4gc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY0X3NwZWNpZmljOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2NF9zcGVjaWZpYzsKIAogZXh0ZXJuIHZvaWQgaW5ldDZfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzayk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3VkcC5oIGIvaW5jbHVkZS9uZXQvdWRwLmgKaW5kZXggOTBlNmNlNS4uNWZiMDI5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdWRwLmgKKysrIGIvaW5jbHVkZS9uZXQvdWRwLmgKQEAgLTIwNyw0ICsyMDcsNyBAQAogI2VuZGlmCiAKIGV4dGVybiB2b2lkIHVkcF9pbml0KHZvaWQpOworCitleHRlcm4gaW50IHVkcDRfdWZvX3NlbmRfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKnVkcDRfdWZvX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCBmZWF0dXJlcyk7CiAjZW5kaWYJLyogX1VEUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC93cGFuLXBoeS5oIGIvaW5jbHVkZS9uZXQvd3Bhbi1waHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDdiMWUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvd3Bhbi1waHkuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IFNpZW1lbnMgQUcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIFdyaXR0ZW4gYnk6CisgKiBEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiA8ZGJhcnlzaGtvdkBnbWFpbC5jb20+CisgKi8KKworI2lmbmRlZiBXUEFOX1BIWV9ICisjZGVmaW5lIFdQQU5fUEhZX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKK3N0cnVjdCB3cGFuX3BoeSB7CisJc3RydWN0IG11dGV4IHBpYl9sb2NrOworCisJLyoKKwkgKiBUaGlzIGlzIGEgUElCIGFjb3JkaW5nIHRvIDgwMi4xNS40LTIwMDYuCisJICogV2UgZG8gbm90IHByb3ZpZGUgdGltaW5nLXJlbGF0ZWQgdmFyaWFibGVzLCBhcyB0aGV5CisJICogYXJlbid0IHVzZWQgb3V0c2lkZSBvZiBkcml2ZXIKKwkgKi8KKwl1OCBjdXJyZW50X2NoYW5uZWw7CisJdTggY3VycmVudF9wYWdlOworCXUzMiBjaGFubmVsc19zdXBwb3J0ZWQ7CisJdTggdHJhbnNtaXRfcG93ZXI7CisJdTggY2NhX21vZGU7CisKKwlzdHJ1Y3QgZGV2aWNlIGRldjsKKwlpbnQgaWR4OworCisJY2hhciBwcml2WzBdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKE5FVERFVl9BTElHTikpKTsKK307CisKK3N0cnVjdCB3cGFuX3BoeSAqd3Bhbl9waHlfYWxsb2Moc2l6ZV90IHByaXZfc2l6ZSk7CitpbnQgd3Bhbl9waHlfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSk7Cit2b2lkIHdwYW5fcGh5X3VucmVnaXN0ZXIoc3RydWN0IHdwYW5fcGh5ICpwaHkpOwordm9pZCB3cGFuX3BoeV9mcmVlKHN0cnVjdCB3cGFuX3BoeSAqcGh5KTsKKworc3RhdGljIGlubGluZSB2b2lkICp3cGFuX3BoeV9wcml2KHN0cnVjdCB3cGFuX3BoeSAqcGh5KQoreworCUJVR19PTighcGh5KTsKKwlyZXR1cm4gJnBoeS0+cHJpdjsKK30KKworc3RydWN0IHdwYW5fcGh5ICp3cGFuX3BoeV9maW5kKGNvbnN0IGNoYXIgKnN0cik7CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKndwYW5fcGh5X25hbWUoc3RydWN0IHdwYW5fcGh5ICpwaHkpCit7CisJcmV0dXJuIGRldl9uYW1lKCZwaHktPmRldik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hmcm0uaCBiL2luY2x1ZGUvbmV0L3hmcm0uaAppbmRleCA5ZTNhM2Y0Li4yMjNlOTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94ZnJtLmgKKysrIGIvaW5jbHVkZS9uZXQveGZybS5oCkBAIC0xMjgwLDcgKzEyODAsNyBAQAogfTsKIAogZXh0ZXJuIHZvaWQgeGZybV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgeGZybTRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHhmcm00X2luaXQoaW50IHJ0X2hhc2hfc2l6ZSk7CiBleHRlcm4gaW50IHhmcm1fc3RhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpOwogZXh0ZXJuIHZvaWQgeGZybV9zdGF0ZV9maW5pKHN0cnVjdCBuZXQgKm5ldCk7CiBleHRlcm4gdm9pZCB4ZnJtNF9zdGF0ZV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2ZjL2ZjX2dzLmggYi9pbmNsdWRlL3Njc2kvZmMvZmNfZ3MuaAppbmRleCBmZmFiMDI3Li4zMjRkZDBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvZmMvZmNfZ3MuaAorKysgYi9pbmNsdWRlL3Njc2kvZmMvZmNfZ3MuaApAQCAtODcsNiArODcsNyBAQAogCUZDX0ZTX0VYUF9QTkFNID0JMHgwMiwJLyogcG9ydCBuYW1lIG5vdCByZWdpc3RlcmVkICovCiAJRkNfRlNfRVhQX05OQU0gPQkweDAzLAkvKiBub2RlIG5hbWUgbm90IHJlZ2lzdGVyZWQgKi8KIAlGQ19GU19FWFBfQ09TID0JCTB4MDQsCS8qIGNsYXNzIG9mIHNlcnZpY2Ugbm90IHJlZ2lzdGVyZWQgKi8KKwlGQ19GU19FWFBfRlROUiA9CTB4MDcsCS8qIEZDLTQgdHlwZXMgbm90IHJlZ2lzdGVyZWQgKi8KIAkvKiBkZWZpbml0aW9ucyBub3QgY29tcGxldGUgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9mY19lbmNvZGUuaCBiL2luY2x1ZGUvc2NzaS9mY19lbmNvZGUuaAppbmRleCBhMGZmNjFjLi4yN2RhZDcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvZmNfZW5jb2RlLmgKKysrIGIvaW5jbHVkZS9zY3NpL2ZjX2VuY29kZS5oCkBAIC0zMiw2ICszMiw3IEBACiAJCXN0cnVjdCBmY19uc19naWRfZnQgZ2lkOwogCQlzdHJ1Y3QgZmNfbnNfcm5faWQgIHJuOwogCQlzdHJ1Y3QgZmNfbnNfcmZ0IHJmdDsKKwkJc3RydWN0IGZjX25zX2ZpZCBmaWQ7CiAJfSBwYXlsb2FkOwogfTsKIApAQCAtNTcsNiArNTgsMjMgQEAKIH0KIAogLyoqCisgKiBmY19hZGlzY19maWxsKCkgLSBGaWxsIGluIGFkaXNjIHJlcXVlc3QgZnJhbWUKKyAqIEBscG9ydDogbG9jYWwgcG9ydC4KKyAqIEBmcDogZmMgZnJhbWUgd2hlcmUgcGF5bG9hZCB3aWxsIGJlIHBsYWNlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZjX2FkaXNjX2ZpbGwoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwgc3RydWN0IGZjX2ZyYW1lICpmcCkKK3sKKwlzdHJ1Y3QgZmNfZWxzX2FkaXNjICphZGlzYzsKKworCWFkaXNjID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIHNpemVvZigqYWRpc2MpKTsKKwltZW1zZXQoYWRpc2MsIDAsIHNpemVvZigqYWRpc2MpKTsKKwlhZGlzYy0+YWRpc2NfY21kID0gRUxTX0FESVNDOworCXB1dF91bmFsaWduZWRfYmU2NChscG9ydC0+d3dwbiwgJmFkaXNjLT5hZGlzY193d3BuKTsKKwlwdXRfdW5hbGlnbmVkX2JlNjQobHBvcnQtPnd3bm4sICZhZGlzYy0+YWRpc2Nfd3dubik7CisJaHRvbjI0KGFkaXNjLT5hZGlzY19wb3J0X2lkLCBmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpKTsKK30KKworLyoqCiAgKiBmY19jdF9oZHJfZmlsbC0gZmlsbHMgY3QgaGVhZGVyIGFuZCByZXNldCBjdCBwYXlsb2FkCiAgKiByZXR1cm5zIHBvaW50ZXIgdG8gY3QgcmVxdWVzdC4KICAqLwpAQCAtNzcsMTAgKzk1LDE3IEBACiB9CiAKIC8qKgotICogZmNfY3RfZmlsbCAtIEZpbGwgaW4gYSBuYW1lIHNlcnZpY2UgcmVxdWVzdCBmcmFtZQorICogZmNfY3RfZmlsbCgpIC0gRmlsbCBpbiBhIG5hbWUgc2VydmljZSByZXF1ZXN0IGZyYW1lCisgKiBAbHBvcnQ6IGxvY2FsIHBvcnQuCisgKiBAZmNfaWQ6IEZDX0lEIG9mIG5vbi1kZXN0aW5hdGlvbiBycG9ydCBmb3IgR1BOX0lEIGFuZCBzaW1pbGFyIGlucXVpcmllcy4KKyAqIEBmcDogZnJhbWUgdG8gY29udGFpbiBwYXlsb2FkLgorICogQG9wOiBDVCBvcGNvZGUuCisgKiBAcl9jdGw6IHBvaW50ZXIgdG8gRkMgaGVhZGVyIFJfQ1RMLgorICogQGZoX3R5cGU6IHBvaW50ZXIgdG8gRkMtNCB0eXBlLgogICovCi1zdGF0aWMgaW5saW5lIGludCBmY19jdF9maWxsKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHN0cnVjdCBmY19mcmFtZSAqZnAsCi0JCSAgICAgIHVuc2lnbmVkIGludCBvcCwgZW51bSBmY19yY3RsICpyX2N0bCwgdTMyICpkaWQsCitzdGF0aWMgaW5saW5lIGludCBmY19jdF9maWxsKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCSAgICAgIHUzMiBmY19pZCwgc3RydWN0IGZjX2ZyYW1lICpmcCwKKwkJICAgICAgdW5zaWduZWQgaW50IG9wLCBlbnVtIGZjX3JjdGwgKnJfY3RsLAogCQkgICAgICBlbnVtIGZjX2ZoX3R5cGUgKmZoX3R5cGUpCiB7CiAJc3RydWN0IGZjX2N0X3JlcSAqY3Q7CkBAIC05MSw2ICsxMTYsMTEgQEAKIAkJY3QtPnBheWxvYWQuZ2lkLmZuX2ZjNF90eXBlID0gRkNfVFlQRV9GQ1A7CiAJCWJyZWFrOwogCisJY2FzZSBGQ19OU19HUE5fSUQ6CisJCWN0ID0gZmNfY3RfaGRyX2ZpbGwoZnAsIG9wLCBzaXplb2Yoc3RydWN0IGZjX25zX2ZpZCkpOworCQlodG9uMjQoY3QtPnBheWxvYWQuZmlkLmZwX2ZpZCwgZmNfaWQpOworCQlicmVhazsKKwogCWNhc2UgRkNfTlNfUkZUX0lEOgogCQljdCA9IGZjX2N0X2hkcl9maWxsKGZwLCBvcCwgc2l6ZW9mKHN0cnVjdCBmY19uc19yZnQpKTsKIAkJaHRvbjI0KGN0LT5wYXlsb2FkLnJmdC5maWQuZnBfZmlkLApAQCAtMTEwLDcgKzE0MCw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkqcl9jdGwgPSBGQ19SQ1RMX0REX1VOU09MX0NUTDsKLQkqZGlkID0gRkNfRklEX0RJUl9TRVJWOwogCSpmaF90eXBlID0gRkNfVFlQRV9DVDsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0OSw1MSArMjc4LDQyIEBACiAvKioKICAqIGZjX2Vsc19maWxsIC0gRmlsbCBpbiBhbiBFTFMgIHJlcXVlc3QgZnJhbWUKICAqLwotc3RhdGljIGlubGluZSBpbnQgZmNfZWxzX2ZpbGwoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwgc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwKK3N0YXRpYyBpbmxpbmUgaW50IGZjX2Vsc19maWxsKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCSAgICAgICB1MzIgZGlkLAogCQkgICAgICAgc3RydWN0IGZjX2ZyYW1lICpmcCwgdW5zaWduZWQgaW50IG9wLAotCQkgICAgICAgZW51bSBmY19yY3RsICpyX2N0bCwgdTMyICpkaWQsIGVudW0gZmNfZmhfdHlwZSAqZmhfdHlwZSkKKwkJICAgICAgIGVudW0gZmNfcmN0bCAqcl9jdGwsIGVudW0gZmNfZmhfdHlwZSAqZmhfdHlwZSkKIHsKIAlzd2l0Y2ggKG9wKSB7CisJY2FzZSBFTFNfQURJU0M6CisJCWZjX2FkaXNjX2ZpbGwobHBvcnQsIGZwKTsKKwkJYnJlYWs7CisKIAljYXNlIEVMU19QTE9HSToKIAkJZmNfcGxvZ2lfZmlsbChscG9ydCwgZnAsIEVMU19QTE9HSSk7Ci0JCSpkaWQgPSBycG9ydC0+cG9ydF9pZDsKIAkJYnJlYWs7CiAKIAljYXNlIEVMU19GTE9HSToKIAkJZmNfZmxvZ2lfZmlsbChscG9ydCwgZnApOwotCQkqZGlkID0gRkNfRklEX0ZMT0dJOwogCQlicmVhazsKIAogCWNhc2UgRUxTX0xPR086CiAJCWZjX2xvZ29fZmlsbChscG9ydCwgZnApOwotCQkqZGlkID0gRkNfRklEX0ZMT0dJOwotCQkvKgotCQkgKiBpZiBycG9ydCBpcyB2YWxpZCB0aGVuIGl0Ci0JCSAqIGlzIHBvcnQgbG9nbywgdGhlcmVmb3JlCi0JCSAqIHNldCBkaWQgdG8gcnBvcnQgaWQuCi0JCSAqLwotCQlpZiAocnBvcnQpCi0JCQkqZGlkID0gcnBvcnQtPnBvcnRfaWQ7CiAJCWJyZWFrOwogCiAJY2FzZSBFTFNfUlRWOgogCQlmY19ydHZfZmlsbChscG9ydCwgZnApOwotCQkqZGlkID0gcnBvcnQtPnBvcnRfaWQ7CiAJCWJyZWFrOwogCiAJY2FzZSBFTFNfUkVDOgogCQlmY19yZWNfZmlsbChscG9ydCwgZnApOwotCQkqZGlkID0gcnBvcnQtPnBvcnRfaWQ7CiAJCWJyZWFrOwogCiAJY2FzZSBFTFNfUFJMSToKIAkJZmNfcHJsaV9maWxsKGxwb3J0LCBmcCk7Ci0JCSpkaWQgPSBycG9ydC0+cG9ydF9pZDsKIAkJYnJlYWs7CiAKIAljYXNlIEVMU19TQ1I6CiAJCWZjX3Njcl9maWxsKGxwb3J0LCBmcCk7Ci0JCSpkaWQgPSBGQ19GSURfRkNUUkw7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9mY19mcmFtZS5oIGIvaW5jbHVkZS9zY3NpL2ZjX2ZyYW1lLmgKaW5kZXggNTk1MTEwNS4uYzM1ZDIzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2ZjX2ZyYW1lLmgKKysrIGIvaW5jbHVkZS9zY3NpL2ZjX2ZyYW1lLmgKQEAgLTM3LDEzICszNyw2IEBACiAjZGVmaW5lCUZDX0ZSQU1FX0hFQURST09NCTMyCS8qIGhlYWRyb29tIGZvciBWTEFOICsgRkNvRSBoZWFkZXJzICovCiAjZGVmaW5lCUZDX0ZSQU1FX1RBSUxST09NCTgJLyogdHJhaWxlciBzcGFjZSBmb3IgRkNvRSAqLwogCi0vKgotICogSW5mb3JtYXRpb24gYWJvdXQgYW4gaW5kaXZpZHVhbCBmaWJyZSBjaGFubmVsIGZyYW1lIHJlY2VpdmVkIG9yIHRvIGJlIHNlbnQuCi0gKiBUaGUgYnVmZmVyIG1heSBiZSBpbiB1cCB0byA0IGFkZGl0aW9uYWwgbm9uLWNvbnRpZ3VvdXMgc2VjdGlvbnMsCi0gKiBidXQgdGhlIGxpbmVhciBzZWN0aW9uIG11c3QgaG9sZCB0aGUgZnJhbWUgaGVhZGVyLgotICovCi0jZGVmaW5lIEZDX0ZSQU1FX1NHX0xFTgkJNAkvKiBzY2F0dGVyL2dhdGhlciBsaXN0IG1heGltdW0gbGVuZ3RoICovCi0KICNkZWZpbmUgZnBfc2tiKGZwKQkoJigoZnApLT5za2IpKQogI2RlZmluZSBmcl9oZHIoZnApCSgoZnApLT5za2IuZGF0YSkKICNkZWZpbmUgZnJfbGVuKGZwKQkoKGZwKS0+c2tiLmxlbikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9pc2NzaV9pZi5oIGIvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKaW5kZXggNDQyNmYwMC4uZDY3ZGRhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKKysrIGIvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKQEAgLTI2Miw2ICsyNjIsNyBAQAogCUlTQ1NJX0VSUl9OT19TQ1NJX0NNRAkJPSBJU0NTSV9FUlJfQkFTRSArIDE3LAogCUlTQ1NJX0VSUl9JTlZBTElEX0hPU1QJCT0gSVNDU0lfRVJSX0JBU0UgKyAxOCwKIAlJU0NTSV9FUlJfWE1JVF9GQUlMRUQJCT0gSVNDU0lfRVJSX0JBU0UgKyAxOSwKKwlJU0NTSV9FUlJfVENQX0NPTk5fQ0xPU0UJPSBJU0NTSV9FUlJfQkFTRSArIDIwLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJmYy5oIGIvaW5jbHVkZS9zY3NpL2xpYmZjLmgKaW5kZXggYjkyNTg0YS4uNjVkYzlhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYmZjLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYmZjLmgKQEAgLTUxLDU1ICs1MSw0OSBAQAogCQlkbyB7CQkJCQkJXAogCQkJQ01EOwkJCQkJXAogCQl9IHdoaWxlICgwKTsJCQkJCVwKLX0gd2hpbGUgKDApOworfSB3aGlsZSAoMCkKIAogI2RlZmluZSBGQ19MSUJGQ19EQkcoZm10LCBhcmdzLi4uKQkJCQkJXAogCUZDX0NIRUNLX0xPR0dJTkcoRkNfTElCRkNfTE9HR0lORywJCQkJXAotCQkJIHByaW50ayhLRVJOX0lORk8gImxpYmZjOiAiIGZtdCwgIyNhcmdzKTspCisJCQkgcHJpbnRrKEtFUk5fSU5GTyAibGliZmM6ICIgZm10LCAjI2FyZ3MpKQogCiAjZGVmaW5lIEZDX0xQT1JUX0RCRyhscG9ydCwgZm10LCBhcmdzLi4uKQkJCQlcCiAJRkNfQ0hFQ0tfTE9HR0lORyhGQ19MUE9SVF9MT0dHSU5HLAkJCQlcCi0JCQkgcHJpbnRrKEtFUk5fSU5GTyAibHBvcnQ6ICU2eDogIiBmbXQsCQlcCi0JCQkJZmNfaG9zdF9wb3J0X2lkKGxwb3J0LT5ob3N0KSwgIyNhcmdzKTspCisJCQkgcHJpbnRrKEtFUk5fSU5GTyAiaG9zdCV1OiBscG9ydCAlNng6ICIgZm10LAlcCisJCQkJKGxwb3J0KS0+aG9zdC0+aG9zdF9ubywJCQlcCisJCQkJZmNfaG9zdF9wb3J0X2lkKChscG9ydCktPmhvc3QpLCAjI2FyZ3MpKQogCiAjZGVmaW5lIEZDX0RJU0NfREJHKGRpc2MsIGZtdCwgYXJncy4uLikJCQkJCVwKIAlGQ19DSEVDS19MT0dHSU5HKEZDX0RJU0NfTE9HR0lORywJCQkJXAotCQkJIHByaW50ayhLRVJOX0lORk8gImRpc2M6ICU2eDogIiBmbXQsCQlcCi0JCQkJZmNfaG9zdF9wb3J0X2lkKGRpc2MtPmxwb3J0LT5ob3N0KSwJXAotCQkJCSMjYXJncyk7KQorCQkJIHByaW50ayhLRVJOX0lORk8gImhvc3QldTogZGlzYzogIiBmbXQsCQlcCisJCQkJKGRpc2MpLT5scG9ydC0+aG9zdC0+aG9zdF9ubywJCVwKKwkJCQkjI2FyZ3MpKQogCi0jZGVmaW5lIEZDX1JQT1JUX0RCRyhycG9ydCwgZm10LCBhcmdzLi4uKQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwkJXAotCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsJCQlcCisjZGVmaW5lIEZDX1JQT1JUX0lEX0RCRyhscG9ydCwgcG9ydF9pZCwgZm10LCBhcmdzLi4uKQkJCVwKIAlGQ19DSEVDS19MT0dHSU5HKEZDX1JQT1JUX0xPR0dJTkcsCQkJCVwKLQkJCSBwcmludGsoS0VSTl9JTkZPICJycG9ydDogJTZ4OiAlNng6ICIgZm10LAlcCi0JCQkJZmNfaG9zdF9wb3J0X2lkKGxwb3J0LT5ob3N0KSwJCVwKLQkJCQlycG9ydC0+cG9ydF9pZCwgIyNhcmdzKTspCQlcCi19IHdoaWxlICgwKTsKKwkJCSBwcmludGsoS0VSTl9JTkZPICJob3N0JXU6IHJwb3J0ICU2eDogIiBmbXQsCVwKKwkJCQkobHBvcnQpLT5ob3N0LT5ob3N0X25vLAkJCVwKKwkJCQkocG9ydF9pZCksICMjYXJncykpCisKKyNkZWZpbmUgRkNfUlBPUlRfREJHKHJkYXRhLCBmbXQsIGFyZ3MuLi4pCQkJCVwKKwlGQ19SUE9SVF9JRF9EQkcoKHJkYXRhKS0+bG9jYWxfcG9ydCwgKHJkYXRhKS0+aWRzLnBvcnRfaWQsIGZtdCwgIyNhcmdzKQogCiAjZGVmaW5lIEZDX0ZDUF9EQkcocGt0LCBmbXQsIGFyZ3MuLi4pCQkJCQlcCiAJRkNfQ0hFQ0tfTE9HR0lORyhGQ19GQ1BfTE9HR0lORywJCQkJXAotCQkJIHByaW50ayhLRVJOX0lORk8gImZjcDogJTZ4OiAlNng6ICIgZm10LAlcCi0JCQkJZmNfaG9zdF9wb3J0X2lkKHBrdC0+bHAtPmhvc3QpLAkJXAotCQkJCXBrdC0+cnBvcnQtPnBvcnRfaWQsICMjYXJncyk7KQotCi0jZGVmaW5lIEZDX0VNX0RCRyhlbSwgZm10LCBhcmdzLi4uKQkJCQkJXAotCUZDX0NIRUNLX0xPR0dJTkcoRkNfRU1fTE9HR0lORywJCQkJCVwKLQkJCSBwcmludGsoS0VSTl9JTkZPICJlbTogJTZ4OiAiIGZtdCwJCVwKLQkJCQlmY19ob3N0X3BvcnRfaWQoZW0tPmxwLT5ob3N0KSwJCVwKLQkJCQkjI2FyZ3MpOykKKwkJCSBwcmludGsoS0VSTl9JTkZPICJob3N0JXU6IGZjcDogJTZ4OiAiIGZtdCwJXAorCQkJCShwa3QpLT5scC0+aG9zdC0+aG9zdF9ubywJCVwKKwkJCQlwa3QtPnJwb3J0LT5wb3J0X2lkLCAjI2FyZ3MpKQogCiAjZGVmaW5lIEZDX0VYQ0hfREJHKGV4Y2gsIGZtdCwgYXJncy4uLikJCQkJCVwKIAlGQ19DSEVDS19MT0dHSU5HKEZDX0VYQ0hfTE9HR0lORywJCQkJXAotCQkJIHByaW50ayhLRVJOX0lORk8gImV4Y2g6ICU2eDogJTR4OiAiIGZtdCwJXAotCQkJCWZjX2hvc3RfcG9ydF9pZChleGNoLT5scC0+aG9zdCksCVwKLQkJCQlleGNoLT54aWQsICMjYXJncyk7KQorCQkJIHByaW50ayhLRVJOX0lORk8gImhvc3QldTogeGlkICU0eDogIiBmbXQsCVwKKwkJCQkoZXhjaCktPmxwLT5ob3N0LT5ob3N0X25vLAkJXAorCQkJCWV4Y2gtPnhpZCwgIyNhcmdzKSkKIAogI2RlZmluZSBGQ19TQ1NJX0RCRyhscG9ydCwgZm10LCBhcmdzLi4uKQkJCQlcCiAJRkNfQ0hFQ0tfTE9HR0lORyhGQ19TQ1NJX0xPR0dJTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCSBwcmludGsoS0VSTl9JTkZPICJzY3NpOiAlNng6ICIgZm10LAkJXAotCQkJCWZjX2hvc3RfcG9ydF9pZChscG9ydC0+aG9zdCksICMjYXJncyk7KQorCQkJIHByaW50ayhLRVJOX0lORk8gImhvc3QldTogc2NzaTogIiBmbXQsCQlcCisJCQkJKGxwb3J0KS0+aG9zdC0+aG9zdF9ubywJIyNhcmdzKSkKIAogLyoKICAqIGxpYmZjIGVycm9yIGNvZGVzCkBAIC0xMjUsNyArMTE5LDcgQEAKICAqIEZDIEhCQSBzdGF0dXMKICAqLwogZW51bSBmY19scG9ydF9zdGF0ZSB7Ci0JTFBPUlRfU1RfTk9ORSA9IDAsCisJTFBPUlRfU1RfRElTQUJMRUQgPSAwLAogCUxQT1JUX1NUX0ZMT0dJLAogCUxQT1JUX1NUX0ROUywKIAlMUE9SVF9TVF9SUE5fSUQsCkBAIC0xNDMsNTkgKzEzNyw1MiBAQAogfTsKIAogZW51bSBmY19ycG9ydF9zdGF0ZSB7Ci0JUlBPUlRfU1RfTk9ORSA9IDAsCiAJUlBPUlRfU1RfSU5JVCwJCS8qIGluaXRpYWxpemVkICovCiAJUlBPUlRfU1RfUExPR0ksCQkvKiB3YWl0aW5nIGZvciBQTE9HSSBjb21wbGV0aW9uICovCiAJUlBPUlRfU1RfUFJMSSwJCS8qIHdhaXRpbmcgZm9yIFBSTEkgY29tcGxldGlvbiAqLwogCVJQT1JUX1NUX1JUViwJCS8qIHdhaXRpbmcgZm9yIFJUViBjb21wbGV0aW9uICovCiAJUlBPUlRfU1RfUkVBRFksCQkvKiByZWFkeSBmb3IgdXNlICovCiAJUlBPUlRfU1RfTE9HTywJCS8qIHBvcnQgbG9nb3V0IHNlbnQgKi8KLX07Ci0KLWVudW0gZmNfcnBvcnRfdHJhbnNfc3RhdGUgewotCUZDX1BPUlRTVEFURV9ST0dVRSwKLQlGQ19QT1JUU1RBVEVfUkVBTCwKKwlSUE9SVF9TVF9BRElTQywJCS8qIERpc2NvdmVyIEFkZHJlc3Mgc2VudCAqLworCVJQT1JUX1NUX0RFTEVURSwJLyogcG9ydCBiZWluZyBkZWxldGVkICovCiB9OwogCiAvKioKICAqIHN0cnVjdCBmY19kaXNjX3BvcnQgLSB0ZW1wb3JhcnkgZGlzY292ZXJ5IHBvcnQgdG8gaG9sZCBycG9ydCBpZGVudGlmaWVycwotICogQGxwOiBGaWJyZSBDaGFubmVsIGhvc3QgcG9ydCBpbnN0YW5jZQotICogQHBlZXJzOiBub2RlIGZvciBsaXN0IG1hbmFnZW1lbnQgZHVyaW5nIGRpc2NvdmVyeSBhbmQgUlNDTiBwcm9jZXNzaW5nCi0gKiBAaWRzOiBpZGVudGlmaWVycyBzdHJ1Y3R1cmUgdG8gcGFzcyB0byBmY19yZW1vdGVfcG9ydF9hZGQoKQotICogQHJwb3J0X3dvcms6IHdvcmsgc3RydWN0IGZvciBzdGFydGluZyB0aGUgcnBvcnQgc3RhdGUgbWFjaGluZQorICogQGxwOiAgICAgICAgIEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCisgKiBAcGVlcnM6ICAgICAgTm9kZSBmb3IgbGlzdCBtYW5hZ2VtZW50IGR1cmluZyBkaXNjb3ZlcnkgYW5kIFJTQ04gcHJvY2Vzc2luZworICogQHJwb3J0X3dvcms6IFdvcmsgc3RydWN0IGZvciBzdGFydGluZyB0aGUgcnBvcnQgc3RhdGUgbWFjaGluZQorICogQHBvcnRfaWQ6ICAgIFBvcnQgSUQgb2YgdGhlIGRpc2NvdmVyZWQgcG9ydAogICovCiBzdHJ1Y3QgZmNfZGlzY19wb3J0IHsKIAlzdHJ1Y3QgZmNfbHBvcnQgICAgICAgICAgICAgKmxwOwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICBwZWVyczsKLQlzdHJ1Y3QgZmNfcnBvcnRfaWRlbnRpZmllcnMgaWRzOwogCXN0cnVjdCB3b3JrX3N0cnVjdAkgICAgcnBvcnRfd29yazsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydF9pZDsKIH07CiAKIGVudW0gZmNfcnBvcnRfZXZlbnQgewogCVJQT1JUX0VWX05PTkUgPSAwLAotCVJQT1JUX0VWX0NSRUFURUQsCisJUlBPUlRfRVZfUkVBRFksCiAJUlBPUlRfRVZfRkFJTEVELAogCVJQT1JUX0VWX1NUT1AsCiAJUlBPUlRfRVZfTE9HTwogfTsKIAorc3RydWN0IGZjX3Jwb3J0X3ByaXY7CisKIHN0cnVjdCBmY19ycG9ydF9vcGVyYXRpb25zIHsKLQl2b2lkICgqZXZlbnRfY2FsbGJhY2spKHN0cnVjdCBmY19scG9ydCAqLCBzdHJ1Y3QgZmNfcnBvcnQgKiwKKwl2b2lkICgqZXZlbnRfY2FsbGJhY2spKHN0cnVjdCBmY19scG9ydCAqLCBzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqLAogCQkJICAgICAgIGVudW0gZmNfcnBvcnRfZXZlbnQpOwogfTsKIAogLyoqCiAgKiBzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAtIGxpYmZjIGludGVybmFsIGluZm9ybWF0aW9uIGFib3V0IGEgcmVtb3RlIHBvcnQKICAqIEBsb2NhbF9wb3J0OiBGaWJyZSBDaGFubmVsIGhvc3QgcG9ydCBpbnN0YW5jZQotICogQHJwX3N0YXRlOiBzdGF0ZSB0cmFja3MgcHJvZ3Jlc3Mgb2YgUExPR0ksIFBSTEksIGFuZCBSVFYgZXhjaGFuZ2VzCisgKiBAcnBfc3RhdGU6IGluZGljYXRlcyBSRUFEWSBmb3IgSS9PIG9yIERFTEVURSB3aGVuIGJsb2NrZWQuCiAgKiBAZmxhZ3M6IFJFQyBhbmQgUkVUUlkgc3VwcG9ydGVkIGZsYWdzCi0gKiBAbWF4X3NlcTogbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBzZXF1ZW5jZXMKLSAqIEByZXRyaWVzOiByZXRyeSBjb3VudCBpbiBjdXJyZW50IHN0YXRlCiAgKiBAZV9kX3RvdjogZXJyb3IgZGV0ZWN0IHRpbWVvdXQgdmFsdWUgKGluIG1zZWMpCiAgKiBAcl9hX3RvdjogcmVzb3VyY2UgYWxsb2NhdGlvbiB0aW1lb3V0IHZhbHVlIChpbiBtc2VjKQotICogQHJwX211dGV4OiBtdXRleCBwcm90ZWN0cyBycG9ydAotICogQHJldHJ5X3dvcms6Ci0gKiBAZXZlbnRfY2FsbGJhY2s6IENhbGxiYWNrIGZvciBycG9ydCBSRUFEWSwgRkFJTEVEIG9yIExPR08KICAqLwogc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgewogCXN0cnVjdCBmY19scG9ydAkJICAgKmxvY2FsX3BvcnQ7CkBAIC0yMDMsMzIgKzE5MCw1MCBAQAogCXUxNgkJCSAgIGZsYWdzOwogCSNkZWZpbmUgRkNfUlBfRkxBR1NfUkVDX1NVUFBPUlRFRAkoMSA8PCAwKQogCSNkZWZpbmUgRkNfUlBfRkxBR1NfUkVUUlkJCSgxIDw8IDEpCisJdW5zaWduZWQgaW50CSAgICAgICAgICAgZV9kX3RvdjsKKwl1bnNpZ25lZCBpbnQJICAgICAgICAgICByX2FfdG92OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAtIGxpYmZjIHJwb3J0IGFuZCBkaXNjb3ZlcnkgaW5mbyBhYm91dCBhIHJlbW90ZSBwb3J0CisgKiBAbG9jYWxfcG9ydDogRmlicmUgQ2hhbm5lbCBob3N0IHBvcnQgaW5zdGFuY2UKKyAqIEBycG9ydDogdHJhbnNwb3J0IHJlbW90ZSBwb3J0CisgKiBAa3JlZjogcmVmZXJlbmNlIGNvdW50ZXIKKyAqIEBycF9zdGF0ZTogc3RhdGUgdHJhY2tzIHByb2dyZXNzIG9mIFBMT0dJLCBQUkxJLCBhbmQgUlRWIGV4Y2hhbmdlcworICogQGlkczogcmVtb3RlIHBvcnQgaWRlbnRpZmllcnMgYW5kIHJvbGVzCisgKiBAZmxhZ3M6IFJFQyBhbmQgUkVUUlkgc3VwcG9ydGVkIGZsYWdzCisgKiBAbWF4X3NlcTogbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBzZXF1ZW5jZXMKKyAqIEBkaXNjX2lkOiBkaXNjb3ZlcnkgaWRlbnRpZmllcgorICogQG1heGZyYW1lX3NpemU6IG1heGltdW0gZnJhbWUgc2l6ZQorICogQHJldHJpZXM6IHJldHJ5IGNvdW50IGluIGN1cnJlbnQgc3RhdGUKKyAqIEBlX2RfdG92OiBlcnJvciBkZXRlY3QgdGltZW91dCB2YWx1ZSAoaW4gbXNlYykKKyAqIEByX2FfdG92OiByZXNvdXJjZSBhbGxvY2F0aW9uIHRpbWVvdXQgdmFsdWUgKGluIG1zZWMpCisgKiBAcnBfbXV0ZXg6IG11dGV4IHByb3RlY3RzIHJwb3J0CisgKiBAcmV0cnlfd29yazoKKyAqIEBldmVudF9jYWxsYmFjazogQ2FsbGJhY2sgZm9yIHJwb3J0IFJFQURZLCBGQUlMRUQgb3IgTE9HTworICovCitzdHJ1Y3QgZmNfcnBvcnRfcHJpdiB7CisJc3RydWN0IGZjX2xwb3J0CQkgICAqbG9jYWxfcG9ydDsKKwlzdHJ1Y3QgZmNfcnBvcnQJCSAgICpycG9ydDsKKwlzdHJ1Y3Qga3JlZgkJICAga3JlZjsKKwllbnVtIGZjX3Jwb3J0X3N0YXRlICAgICAgICBycF9zdGF0ZTsKKwlzdHJ1Y3QgZmNfcnBvcnRfaWRlbnRpZmllcnMgaWRzOworCXUxNgkJCSAgIGZsYWdzOwogCXUxNgkJICAgICAgICAgICBtYXhfc2VxOworCXUxNgkJCSAgIGRpc2NfaWQ7CisJdTE2CQkJICAgbWF4ZnJhbWVfc2l6ZTsKIAl1bnNpZ25lZCBpbnQJICAgICAgICAgICByZXRyaWVzOwogCXVuc2lnbmVkIGludAkgICAgICAgICAgIGVfZF90b3Y7CiAJdW5zaWduZWQgaW50CSAgICAgICAgICAgcl9hX3RvdjsKLQllbnVtIGZjX3Jwb3J0X3RyYW5zX3N0YXRlICB0cmFuc19zdGF0ZTsKIAlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICBycF9tdXRleDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCSAgIHJldHJ5X3dvcms7CiAJZW51bSBmY19ycG9ydF9ldmVudCAgICAgICAgZXZlbnQ7CiAJc3RydWN0IGZjX3Jwb3J0X29wZXJhdGlvbnMgKm9wczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICBwZWVyczsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICAgICBldmVudF93b3JrOworCXUzMgkJCSAgIHN1cHBvcnRlZF9jbGFzc2VzOwogfTsKIAotI2RlZmluZSBQUklWX1RPX1JQT1JUKHgpCQkJCQkJXAotCShzdHJ1Y3QgZmNfcnBvcnQgKikoKHZvaWQgKil4IC0gc2l6ZW9mKHN0cnVjdCBmY19ycG9ydCkpOwotI2RlZmluZSBSUE9SVF9UT19QUklWKHgpCQkJCQkJXAotCShzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqKSgodm9pZCAqKXggKyBzaXplb2Yoc3RydWN0IGZjX3Jwb3J0KSk7Ci0KLXN0cnVjdCBmY19ycG9ydCAqZmNfcnBvcnRfcm9ndWVfY3JlYXRlKHN0cnVjdCBmY19kaXNjX3BvcnQgKik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmY19ycG9ydF9zZXRfbmFtZShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCB1NjQgd3dwbiwgdTY0IHd3bm4pCi17Ci0JcnBvcnQtPm5vZGVfbmFtZSA9IHd3bm47Ci0JcnBvcnQtPnBvcnRfbmFtZSA9IHd3cG47Ci19Ci0KIC8qCiAgKiBmY29lIHN0YXRzIHN0cnVjdHVyZQogICovCkBAIC0zNDQsNiArMzQ5LDggQEAKICAqLwogCiBzdHJ1Y3QgZmNfZXhjaF9tZ3I7CitzdHJ1Y3QgZmNfZXhjaF9tZ3JfYW5jaG9yOworZXh0ZXJuIHUxNglmY19jcHVfbWFzazsJLyogY3B1IG1hc2sgZm9yIHBvc3NpYmxlIGNwdXMgKi8KIAogLyoKICAqIFNlcXVlbmNlLgpAQCAtMzY4LDYgKzM3NSw3IEBACiAgKi8KIHN0cnVjdCBmY19leGNoIHsKIAlzdHJ1Y3QgZmNfZXhjaF9tZ3IgKmVtOwkJLyogZXhjaGFuZ2UgbWFuYWdlciAqLworCXN0cnVjdCBmY19leGNoX3Bvb2wgKnBvb2w7CS8qIHBlciBjcHUgZXhjaGVzIHBvb2wgKi8KIAl1MzIJCXN0YXRlOwkJLyogaW50ZXJuYWwgZHJpdmVyIHN0YXRlICovCiAJdTE2CQl4aWQ7CQkvKiBvdXIgZXhjaGFuZ2UgSUQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWV4X2xpc3Q7CS8qIGZyZWUgb3IgYnVzeSBsaXN0IGxpbmthZ2UgKi8KQEAgLTQxNSw3ICs0MjMsNyBAQAogCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KIAlzdHJ1Y3QgZmNfc2VxICooKmVsc2N0X3NlbmQpKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCi0JCQkJICAgICBzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LAorCQkJCSAgICAgdTMyIGRpZCwKIAkJCQkgICAgIHN0cnVjdCBmY19mcmFtZSAqZnAsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgb3AsCiAJCQkJICAgICB2b2lkICgqcmVzcCkoc3RydWN0IGZjX3NlcSAqLApAQCAtNTE5LDI1ICs1MjcsNiBAQAogCXZvaWQgKCpleGNoX2RvbmUpKHN0cnVjdCBmY19zZXEgKnNwKTsKIAogCS8qCi0JICogQXNzaWducyBhIEVNIGFuZCBhIGZyZWUgWElEIGZvciBhbiBuZXcgZXhjaGFuZ2UgYW5kIHRoZW4KLQkgKiBhbGxvY2F0ZXMgYSBuZXcgZXhjaGFuZ2UgYW5kIHNlcXVlbmNlIHBhaXIuCi0JICogVGhlIGZwIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBmcmVlIFhJRC4KLQkgKgotCSAqIFNUQVRVUzogT1BUSU9OQUwKLQkgKi8KLQlzdHJ1Y3QgZmNfZXhjaCAqKCpleGNoX2dldCkoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IGZjX2ZyYW1lICpmcCk7Ci0KLQkvKgotCSAqIFJlbGVhc2UgcHJldmlvdXNseSBhc3NpZ25lZCBYSUQgYnkgZXhjaF9nZXQgQVBJLgotCSAqIFRoZSBMTEQgbWF5IGltcGxlbWVudCB0aGlzIGlmIFhJRCBpcyBhc3NpZ25lZCBieSBMTEQKLQkgKiBpbiBleGNoX2dldCgpLgotCSAqCi0JICogU1RBVFVTOiBPUFRJT05BTAotCSAqLwotCXZvaWQgKCpleGNoX3B1dCkoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IGZjX2V4Y2hfbWdyICptcCwKLQkJCSB1MTYgZXhfaWQpOwotCi0JLyoKIAkgKiBTdGFydCBhIG5ldyBzZXF1ZW5jZSBvbiB0aGUgc2FtZSBleGNoYW5nZS9zZXF1ZW5jZSB0dXBsZS4KIAkgKgogCSAqIFNUQVRVUzogT1BUSU9OQUwKQEAgLTU3Nyw5ICs1NjYsMTEgQEAKIAlpbnQgKCpscG9ydF9yZXNldCkoc3RydWN0IGZjX2xwb3J0ICopOwogCiAJLyoKLQkgKiBDcmVhdGUgYSByZW1vdGUgcG9ydAorCSAqIENyZWF0ZSBhIHJlbW90ZSBwb3J0IHdpdGggYSBnaXZlbiBwb3J0IElECisJICoKKwkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCi0Jc3RydWN0IGZjX3Jwb3J0ICooKnJwb3J0X2NyZWF0ZSkoc3RydWN0IGZjX2Rpc2NfcG9ydCAqKTsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqKCpycG9ydF9jcmVhdGUpKHN0cnVjdCBmY19scG9ydCAqLCB1MzIpOwogCiAJLyoKIAkgKiBJbml0aWF0ZXMgdGhlIFJQIHN0YXRlIG1hY2hpbmUuIEl0IGlzIGNhbGxlZCBmcm9tIHRoZSBMUCBtb2R1bGUuCkBAIC01OTIsNyArNTgzLDcgQEAKIAkgKgogCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KLQlpbnQgKCpycG9ydF9sb2dpbikoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCk7CisJaW50ICgqcnBvcnRfbG9naW4pKHN0cnVjdCBmY19ycG9ydF9wcml2ICopOwogCiAJLyoKIAkgKiBMb2dvZmYsIGFuZCByZW1vdmUgdGhlIHJwb3J0IGZyb20gdGhlIHRyYW5zcG9ydCBpZgpAQCAtNjAwLDcgKzU5MSw3IEBACiAJICoKIAkgKiBTVEFUVVM6IE9QVElPTkFMCiAJICovCi0JaW50ICgqcnBvcnRfbG9nb2ZmKShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KTsKKwlpbnQgKCpycG9ydF9sb2dvZmYpKHN0cnVjdCBmY19ycG9ydF9wcml2ICopOwogCiAJLyoKIAkgKiBSZWNpZXZlIGEgcmVxdWVzdCBmcm9tIGEgcmVtb3RlIHBvcnQuCkBAIC02MDgsMTQgKzU5OSwyMCBAQAogCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KIAl2b2lkICgqcnBvcnRfcmVjdl9yZXEpKHN0cnVjdCBmY19zZXEgKiwgc3RydWN0IGZjX2ZyYW1lICosCi0JCQkgICAgICAgc3RydWN0IGZjX3Jwb3J0ICopOworCQkJICAgICAgIHN0cnVjdCBmY19scG9ydCAqKTsKIAogCS8qCiAJICogbG9va3VwIGFuIHJwb3J0IGJ5IGl0J3MgcG9ydCBJRC4KIAkgKgogCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KLQlzdHJ1Y3QgZmNfcnBvcnQgKigqcnBvcnRfbG9va3VwKShjb25zdCBzdHJ1Y3QgZmNfbHBvcnQgKiwgdTMyKTsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqKCpycG9ydF9sb29rdXApKGNvbnN0IHN0cnVjdCBmY19scG9ydCAqLCB1MzIpOworCisJLyoKKwkgKiBEZXN0cm95IGFuIHJwb3J0IGFmdGVyIGZpbmFsIGtyZWZfcHV0KCkuCisJICogVGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUga3JlZiBpbnNpZGUgdGhlIGZjX3Jwb3J0X3ByaXYuCisJICovCisJdm9pZCAoKnJwb3J0X2Rlc3Ryb3kpKHN0cnVjdCBrcmVmICopOwogCiAJLyoKIAkgKiBTZW5kIGEgZmNwIGNtZCBmcm9tIGZzcCBwa3QuCkBAIC02ODEsMTggKzY3OCwxNiBAQAogLyogaW5mb3JtYXRpb24gdXNlZCBieSB0aGUgZGlzY292ZXJ5IGxheWVyICovCiBzdHJ1Y3QgZmNfZGlzYyB7CiAJdW5zaWduZWQgY2hhcgkJcmV0cnlfY291bnQ7Ci0JdW5zaWduZWQgY2hhcgkJZGVsYXk7CiAJdW5zaWduZWQgY2hhcgkJcGVuZGluZzsKIAl1bnNpZ25lZCBjaGFyCQlyZXF1ZXN0ZWQ7CiAJdW5zaWduZWQgc2hvcnQJCXNlcV9jb3VudDsKIAl1bnNpZ25lZCBjaGFyCQlidWZfbGVuOwotCWVudW0gZmNfZGlzY19ldmVudAlldmVudDsKKwl1MTYJCQlkaXNjX2lkOwogCiAJdm9pZCAoKmRpc2NfY2FsbGJhY2spKHN0cnVjdCBmY19scG9ydCAqLAogCQkJICAgICAgZW51bSBmY19kaXNjX2V2ZW50KTsKIAogCXN0cnVjdCBsaXN0X2hlYWQJIHJwb3J0czsKLQlzdHJ1Y3QgbGlzdF9oZWFkCSByb2d1ZV9ycG9ydHM7CiAJc3RydWN0IGZjX2xwb3J0CQkqbHBvcnQ7CiAJc3RydWN0IG11dGV4CQlkaXNjX211dGV4OwogCXN0cnVjdCBmY19ncG5fZnRfcmVzcAlwYXJ0aWFsX2J1ZjsJLyogcGFydGlhbCBuYW1lIGJ1ZmZlciAqLwpAQCAtNzA0LDkgKzY5OSw5IEBACiAKIAkvKiBBc3NvY2lhdGlvbnMgKi8KIAlzdHJ1Y3QgU2NzaV9Ib3N0CSpob3N0OwotCXN0cnVjdCBmY19leGNoX21ncgkqZW1wOwotCXN0cnVjdCBmY19ycG9ydAkJKmRuc19ycDsKLQlzdHJ1Y3QgZmNfcnBvcnQJCSpwdHBfcnA7CisJc3RydWN0IGxpc3RfaGVhZAllbWFfbGlzdDsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdgkqZG5zX3JwOworCXN0cnVjdCBmY19ycG9ydF9wcml2CSpwdHBfcnA7CiAJdm9pZAkJCSpzY3NpX3ByaXY7CiAJc3RydWN0IGZjX2Rpc2MgICAgICAgICAgZGlzYzsKIApAQCAtOTYwLDYgKzk1NSwyOCBAQAogaW50IGZjX2V4Y2hfaW5pdChzdHJ1Y3QgZmNfbHBvcnQgKmxwKTsKIAogLyoKKyAqIEFkZHMgRXhjaGFuZ2UgTWFuYWdlciAoRU0pIG1wIHRvIGxwb3J0LgorICoKKyAqIEFkZHMgc3BlY2lmaWVkIG1wIHRvIGxwb3J0IHVzaW5nIHN0cnVjdCBmY19leGNoX21ncl9hbmNob3IsCisgKiB0aGUgc3RydWN0IGZjX2V4Y2hfbWdyX2FuY2hvciBhbGxvd3Mgc2FtZSBFTSBzaGFyaW5nIGJ5CisgKiBtb3JlIHRoYW4gb25lIGxwb3J0IHdpdGggdGhlaXIgc3BlY2lmaWVkIG1hdGNoIGZ1bmN0aW9uLAorICogdGhlIG1hdGNoIGZ1bmN0aW9uIGlzIHVzZWQgaW4gYWxsb2NhdGluZyBleGNoYW5nZSBmcm9tCisgKiBhZGRlZCBtcC4KKyAqLworc3RydWN0IGZjX2V4Y2hfbWdyX2FuY2hvciAqZmNfZXhjaF9tZ3JfYWRkKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCQkJCSAgIHN0cnVjdCBmY19leGNoX21nciAqbXAsCisJCQkJCSAgIGJvb2wgKCptYXRjaCkoc3RydWN0IGZjX2ZyYW1lICopKTsKKworLyoKKyAqIERlbGV0ZXMgRXhjaGFuZ2UgTWFuYWdlciAoRU0pIGZyb20gbHBvcnQgYnkgcmVtb3ZpbmcKKyAqIGl0cyBhbmNob3IgZW1hIGZyb20gbHBvcnQuCisgKgorICogSWYgcmVtb3ZlZCBhbmNob3IgZW1hIHdhcyB0aGUgbGFzdCB1c2VyIG9mIGl0cyBhc3NvY2lhdGVkIEVNCisgKiB0aGVuIGFsc28gZGVzdHJveXMgYXNzb2NpYXRlZCBFTS4KKyAqLwordm9pZCBmY19leGNoX21ncl9kZWwoc3RydWN0IGZjX2V4Y2hfbWdyX2FuY2hvciAqZW1hKTsKKworLyoKICAqIEFsbG9jYXRlcyBhbiBFeGNoYW5nZSBNYW5hZ2VyIChFTSkuCiAgKgogICogVGhlIEVNIG1hbmFnZXMgZXhjaGFuZ2VzIGZvciB0aGVpciBhbGxvY2F0aW9uIGFuZApAQCAtOTc0LDI3ICs5OTEsMjUgQEAKICAqIGEgbmV3IGV4Y2hhbmdlLgogICogVGhlIExMRCBtYXkgY2hvb3NlIHRvIGhhdmUgbXVsdGlwbGUgRU1zLAogICogZS5nLiBvbmUgRU0gaW5zdGFuY2UgcGVyIENQVSByZWNlaXZlIHRocmVhZCBpbiBMTEQuCi0gKiBUaGUgTExEIGNhbiB1c2UgZXhjaF9nZXQoKSBvZiBzdHJ1Y3QgbGliZmNfZnVuY3Rpb25fdGVtcGxhdGUKLSAqIHRvIHNwZWNpZnkgWElEIGZvciBhIG5ldyBleGNoYW5nZSB3aXRoaW4KLSAqIGEgc3BlY2lmaWVkIEVNIGluc3RhbmNlLgogICoKLSAqIFRoZSBlbV9pZHggdG8gdW5pcXVlbHkgaWRlbnRpZnkgYW4gRU0gaW5zdGFuY2UuCisgKiBTcGVjaWZpZWQgbWF0Y2ggZnVuY3Rpb24gaXMgdXNlZCBpbiBhbGxvY2F0aW5nIGV4Y2hhbmdlcworICogZnJvbSBuZXdseSBhbGxvY2F0ZWQgRU0uCiAgKi8KIHN0cnVjdCBmY19leGNoX21nciAqZmNfZXhjaF9tZ3JfYWxsb2Moc3RydWN0IGZjX2xwb3J0ICpscCwKIAkJCQkgICAgICBlbnVtIGZjX2NsYXNzIGNsYXNzLAogCQkJCSAgICAgIHUxNiBtaW5feGlkLAotCQkJCSAgICAgIHUxNiBtYXhfeGlkKTsKKwkJCQkgICAgICB1MTYgbWF4X3hpZCwKKwkJCQkgICAgICBib29sICgqbWF0Y2gpKHN0cnVjdCBmY19mcmFtZSAqKSk7CiAKIC8qCi0gKiBGcmVlIGFuIGV4Y2hhbmdlIG1hbmFnZXIuCisgKiBGcmVlIGFsbCBleGNoYW5nZSBtYW5hZ2VycyBvZiBhIGxwb3J0LgogICovCi12b2lkIGZjX2V4Y2hfbWdyX2ZyZWUoc3RydWN0IGZjX2V4Y2hfbWdyICptcCk7Cit2b2lkIGZjX2V4Y2hfbWdyX2ZyZWUoc3RydWN0IGZjX2xwb3J0ICpscG9ydCk7CiAKIC8qCiAgKiBSZWNlaXZlIGEgZnJhbWUgb24gc3BlY2lmaWVkIGxvY2FsIHBvcnQgYW5kIGV4Y2hhbmdlIG1hbmFnZXIuCiAgKi8KLXZvaWQgZmNfZXhjaF9yZWN2KHN0cnVjdCBmY19scG9ydCAqbHAsIHN0cnVjdCBmY19leGNoX21nciAqbXAsCi0JCSAgc3RydWN0IGZjX2ZyYW1lICpmcCk7Cit2b2lkIGZjX2V4Y2hfcmVjdihzdHJ1Y3QgZmNfbHBvcnQgKmxwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKTsKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGV4Y2hfc2VxX3NlbmQgZnVuY3Rpb24gcG9pbnRlciBpbgpAQCAtMTAzNiwyOCArMTA1MSwyMCBAQAogdm9pZCBmY19leGNoX2RvbmUoc3RydWN0IGZjX3NlcSAqc3ApOwogCiAvKgotICogQXNzaWducyBhIEVNIGFuZCBYSUQgZm9yIGEgZnJhbWUgYW5kIHRoZW4gYWxsb2NhdGVzCi0gKiBhIG5ldyBleGNoYW5nZSBhbmQgc2VxdWVuY2UgcGFpci4KLSAqIFRoZSBmcCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgZnJlZSBYSUQuCi0gKi8KLXN0cnVjdCBmY19leGNoICpmY19leGNoX2dldChzdHJ1Y3QgZmNfbHBvcnQgKmxwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKTsKLQotLyoKICAqIEFsbG9jYXRlIGEgbmV3IGV4Y2hhbmdlIGFuZCBzZXF1ZW5jZSBwYWlyLgotICogaWYgZXhfaWQgaXMgemVybyB0aGVuIG5leHQgZnJlZSBleGNoYW5nZSBpZAotICogZnJvbSBzcGVjaWZpZWQgZXhjaGFuZ2UgbWFuZ2VyIG1wIHdpbGwgYmUgYXNzaWduZWQuCiAgKi8KLXN0cnVjdCBmY19leGNoICpmY19leGNoX2FsbG9jKHN0cnVjdCBmY19leGNoX21nciAqbXAsCi0JCQkgICAgICBzdHJ1Y3QgZmNfZnJhbWUgKmZwLCB1MTYgZXhfaWQpOworc3RydWN0IGZjX2V4Y2ggKmZjX2V4Y2hfYWxsb2Moc3RydWN0IGZjX2xwb3J0ICpscG9ydCwgc3RydWN0IGZjX2ZyYW1lICpmcCk7CiAvKgogICogU3RhcnQgYSBuZXcgc2VxdWVuY2Ugb24gdGhlIHNhbWUgZXhjaGFuZ2UgYXMgdGhlIHN1cHBsaWVkIHNlcXVlbmNlLgogICovCiBzdHJ1Y3QgZmNfc2VxICpmY19zZXFfc3RhcnRfbmV4dChzdHJ1Y3QgZmNfc2VxICpzcCk7CiAKKwogLyoKLSAqIFJlc2V0IGFuIGV4Y2hhbmdlIG1hbmFnZXIsIGNvbXBsZXRpbmcgYWxsIHNlcXVlbmNlcyBhbmQgZXhjaGFuZ2VzLgotICogSWYgc19pZCBpcyBub24temVybywgcmVzZXQgb25seSBleGNoYW5nZXMgb3JpZ2luYXRpbmcgZnJvbSB0aGF0IEZJRC4KLSAqIElmIGRfaWQgaXMgbm9uLXplcm8sIHJlc2V0IG9ubHkgZXhjaGFuZ2VzIHNlbmRpbmcgdG8gdGhhdCBGSUQuCisgKiBSZXNldCBhbGwgRU1zIG9mIGEgbHBvcnQsIHJlbGVhc2luZyBpdHMgYWxsIHNlcXVlbmNlcyBhbmQKKyAqIGV4Y2hhbmdlcy4gSWYgc2lkIGlzIG5vbi16ZXJvLCB0aGVuIHJlc2V0IG9ubHkgZXhjaGFuZ2VzCisgKiB3ZSBzb3VyY2VkIGZyb20gdGhhdCBGSUQuIElmIGRpZCBpcyBub24temVybywgcmVzZXQgb25seQorICogZXhjaGFuZ2VzIGRlc3RpbmVkIHRvIHRoYXQgRklELgogICovCiB2b2lkIGZjX2V4Y2hfbWdyX3Jlc2V0KHN0cnVjdCBmY19scG9ydCAqLCB1MzIgc19pZCwgdTMyIGRfaWQpOwogCkBAIC0xMDc4LDQgKzEwODUsOSBAQAogaW50IGZjX3NldHVwX3Jwb3J0KHZvaWQpOwogdm9pZCBmY19kZXN0cm95X3Jwb3J0KHZvaWQpOwogCisvKgorICogSW50ZXJuYWwgbGliZmMgZnVuY3Rpb25zLgorICovCitjb25zdCBjaGFyICpmY19lbHNfcmVzcF90eXBlKHN0cnVjdCBmY19mcmFtZSAqKTsKKwogI2VuZGlmIC8qIF9MSUJGQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmggYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAppbmRleCA2MWFmZWI1Li44ODdlNTdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaApAQCAtMzkwLDYgKzM5MCw3IEBACiBleHRlcm4gaW50IGlzY3NpX2Nvbm5fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCiAJCQkJZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKTsKIGV4dGVybiB2b2lkIGlzY3NpX3N1c3BlbmRfdHgoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pOworZXh0ZXJuIHZvaWQgaXNjc2lfc3VzcGVuZF9xdWV1ZShzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubik7CiBleHRlcm4gdm9pZCBpc2NzaV9jb25uX3F1ZXVlX3dvcmsoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pOwogCiAjZGVmaW5lIGlzY3NpX2Nvbm5fcHJpbnRrKHByZWZpeCwgX2MsIGZtdCwgYS4uLikgXApAQCAtNDE1LDYgKzQxNiw4IEBACiBleHRlcm4gdm9pZCBpc2NzaV9yZXF1ZXVlX3Rhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spOwogZXh0ZXJuIHZvaWQgaXNjc2lfcHV0X3Rhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spOwogZXh0ZXJuIHZvaWQgX19pc2NzaV9nZXRfdGFzayhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayk7CitleHRlcm4gdm9pZCBpc2NzaV9jb21wbGV0ZV9zY3NpX3Rhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssCisJCQkJICAgICB1aW50MzJfdCBleHBfY21kc24sIHVpbnQzMl90IG1heF9jbWRzbik7CiAKIC8qCiAgKiBnZW5lcmljIGhlbHBlcnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKaW5kZXggM2Y1NjZhZi4uOWFmNDhjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKQEAgLTE4NywxMCArMTg3LDEzIEBACiAJdm9pZCAoKmRldGFjaCkoc3RydWN0IHNjc2lfZGV2aWNlICopOwogCWludCAoKmFjdGl2YXRlKShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CiAJaW50ICgqcHJlcF9mbikoc3RydWN0IHNjc2lfZGV2aWNlICosIHN0cnVjdCByZXF1ZXN0ICopOworCWludCAoKnNldF9wYXJhbXMpKHN0cnVjdCBzY3NpX2RldmljZSAqLCBjb25zdCBjaGFyICopOwogfTsKIAogc3RydWN0IHNjc2lfZGhfZGF0YSB7CiAJc3RydWN0IHNjc2lfZGV2aWNlX2hhbmRsZXIgKnNjc2lfZGg7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OworCXN0cnVjdCBrcmVmIGtyZWY7CiAJY2hhciBidWZbMF07CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9kaC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGguaAppbmRleCAzM2VmY2UyLi5mZjI0MDc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kaC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2RoLmgKQEAgLTYwLDYgKzYwLDcgQEAKIGV4dGVybiBpbnQgc2NzaV9kaF9oYW5kbGVyX2V4aXN0KGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IHNjc2lfZGhfYXR0YWNoKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gdm9pZCBzY3NpX2RoX2RldGFjaChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKK2V4dGVybiBpbnQgc2NzaV9kaF9zZXRfcGFyYW1zKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIGNvbnN0IGNoYXIgKik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgc2NzaV9kaF9hY3RpdmF0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcmVxKQogewpAQCAtNzcsNCArNzgsOCBAQAogewogCXJldHVybjsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfZGhfc2V0X3BhcmFtcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcmVxLCBjb25zdCBjaGFyICpwYXJhbXMpCit7CisJcmV0dXJuIC1TQ1NJX0RIX05PU1lTOworfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2FjOTdfY29kZWMuaCBiL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oCmluZGV4IDI1MWZjMWMuLjNkYWUzZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oCisrKyBiL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oCkBAIC0zMiw2ICszMiw5IEBACiAjaW5jbHVkZSAiY29udHJvbC5oIgogI2luY2x1ZGUgImluZm8uaCIKIAorLyogbWF4aW11bSBudW1iZXIgb2YgZGV2aWNlcyBvbiB0aGUgQUM5NyBidXMgKi8KKyNkZWZpbmUJQUM5N19CVVNfTUFYX0RFVklDRVMJNAorCiAvKgogICogIEFDJzk3IGNvZGVjIHJlZ2lzdGVycwogICovCkBAIC02NDIsNCArNjQ1LDEwIEBACiAvKiBhZCBob2MgQUM5NyBkZXZpY2UgZHJpdmVyIGFjY2VzcyAqLwogZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBhYzk3X2J1c190eXBlOwogCisvKiBBQzk3IHBsYXRmb3JtX2RhdGEgYWRkaW5nIGZ1bmN0aW9uICovCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX2FjOTdfZGV2X2FkZF9wZGF0YShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHZvaWQgKmRhdGEpCit7CisJYWM5Ny0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBkYXRhOworfQorCiAjZW5kaWYgLyogX19TT1VORF9BQzk3X0NPREVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYXNvdW5kLmggYi9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oCmluZGV4IDgyYWVkM2YuLjFmNTdiYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvYXNvdW5kLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9hc291bmQuaApAQCAtMTM4LDcgKzEzOCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBTTkRSVl9QQ01fVkVSU0lPTgkJU05EUlZfUFJPVE9DT0xfVkVSU0lPTigyLCAwLCA5KQorI2RlZmluZSBTTkRSVl9QQ01fVkVSU0lPTgkJU05EUlZfUFJPVE9DT0xfVkVSU0lPTigyLCAwLCAxMCkKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIHNuZF9wY21fdWZyYW1lc190OwogdHlwZWRlZiBzaWduZWQgbG9uZyBzbmRfcGNtX3NmcmFtZXNfdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY29yZS5oIGIvaW5jbHVkZS9zb3VuZC9jb3JlLmgKaW5kZXggMzA5Y2I5Ni4uYTYxNDk5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9jb3JlLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9jb3JlLmgKQEAgLTkzLDE1ICs5Myw2IEBACiAKICNkZWZpbmUgc25kX2RldmljZShuKSBsaXN0X2VudHJ5KG4sIHN0cnVjdCBzbmRfZGV2aWNlLCBsaXN0KQogCi0vKiBtb25pdG9yIGZpbGVzIGZvciBncmFjZWZ1bCBzaHV0ZG93biAoaG90cGx1ZykgKi8KLQotc3RydWN0IHNuZF9tb25pdG9yX2ZpbGUgewotCXN0cnVjdCBmaWxlICpmaWxlOwotCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmRpc2Nvbm5lY3RlZF9mX29wOwotCXN0cnVjdCBsaXN0X2hlYWQgc2h1dGRvd25fbGlzdDsJLyogc3RpbGwgbmVlZCB0byBzaHV0ZG93biAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLyogbGluayBvZiBtb25pdG9yIGZpbGVzICovCi19OwotCiAvKiBtYWluIHN0cnVjdHVyZSBmb3Igc291bmRjYXJkICovCiAKIHN0cnVjdCBzbmRfY2FyZCB7CkBAIC0zMTEsOSArMzAyLDcgQEAKIGludCBzbmRfY2FyZF9maWxlX2FkZChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBmaWxlICpmaWxlKTsKIGludCBzbmRfY2FyZF9maWxlX3JlbW92ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBmaWxlICpmaWxlKTsKIAotI2lmbmRlZiBzbmRfY2FyZF9zZXRfZGV2CiAjZGVmaW5lIHNuZF9jYXJkX3NldF9kZXYoY2FyZCwgZGV2cHRyKSAoKGNhcmQpLT5kZXYgPSAoZGV2cHRyKSkKLSNlbmRpZgogCiAvKiBkZXZpY2UuYyAqLwogCkBAIC0zNDAsMTggKzMyOSwxNyBAQAogc3RydWN0IHJlc291cmNlOwogdm9pZCByZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIAotI2lmZGVmIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsKLXZvaWQgc25kX3ZlcmJvc2VfcHJpbnRrKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLSAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX0RFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEspCi12b2lkIHNuZF92ZXJib3NlX3ByaW50ZChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi0gICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKLSNlbmRpZgotCiAvKiAtLS0gKi8KIAotI2lmZGVmIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USykKK3ZvaWQgX19zbmRfcHJpbnRrKHVuc2lnbmVkIGludCBsZXZlbCwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCSAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgNCwgNSkpKTsKKyNlbHNlCisjZGVmaW5lIF9fc25kX3ByaW50ayhsZXZlbCwgZmlsZSwgbGluZSwgZm9ybWF0LCBhcmdzLi4uKSBcCisJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKQorI2VuZGlmCisKIC8qKgogICogc25kX3ByaW50ayAtIHByaW50ayB3cmFwcGVyCiAgKiBAZm10OiBmb3JtYXQgc3RyaW5nCkBAIC0zNjAsMTUgKzM0OCw5IEBACiAgKiB3aGVuIGNvbmZpZ3VyZWQgd2l0aCBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLLgogICovCiAjZGVmaW5lIHNuZF9wcmludGsoZm10LCBhcmdzLi4uKSBcCi0Jc25kX3ZlcmJvc2VfcHJpbnRrKF9fRklMRV9fLCBfX0xJTkVfXywgZm10ICwjI2FyZ3MpCi0jZWxzZQotI2RlZmluZSBzbmRfcHJpbnRrKGZtdCwgYXJncy4uLikgXAotCXByaW50ayhmbXQgLCMjYXJncykKLSNlbmRpZgorCV9fc25kX3ByaW50aygwLCBfX0ZJTEVfXywgX19MSU5FX18sIGZtdCwgIyNhcmdzKQogCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwotCi0jaWZkZWYgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USwogLyoqCiAgKiBzbmRfcHJpbnRkIC0gZGVidWcgcHJpbnRrCiAgKiBAZm10OiBmb3JtYXQgc3RyaW5nCkBAIC0zNzcsMTEgKzM1OSw3IEBACiAgKiBJZ25vcmVkIHdoZW4gQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0LgogICovCiAjZGVmaW5lIHNuZF9wcmludGQoZm10LCBhcmdzLi4uKSBcCi0Jc25kX3ZlcmJvc2VfcHJpbnRkKF9fRklMRV9fLCBfX0xJTkVfXywgZm10ICwjI2FyZ3MpCi0jZWxzZQotI2RlZmluZSBzbmRfcHJpbnRkKGZtdCwgYXJncy4uLikgXAotCXByaW50ayhmbXQgLCMjYXJncykKLSNlbmRpZgorCV9fc25kX3ByaW50aygxLCBfX0ZJTEVfXywgX19MSU5FX18sIGZtdCwgIyNhcmdzKQogCiAvKioKICAqIHNuZF9CVUcgLSBnaXZlIGEgQlVHIHdhcm5pbmcgbWVzc2FnZSBhbmQgc3RhY2sgdHJhY2UKQEAgLTQyOCw5ICs0MDYsMTAgQEAKICAqIFdvcmtzIGxpa2Ugc25kX3ByaW50aygpIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCiAgKiBJZ25vcmVkIHdoZW4gQ09ORklHX1NORF9ERUJVR19WRVJCT1NFIGlzIG5vdCBzZXQuCiAgKi8KLSNkZWZpbmUgc25kX3ByaW50ZGQoZm9ybWF0LCBhcmdzLi4uKSBzbmRfcHJpbnRrKGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBzbmRfcHJpbnRkZChmb3JtYXQsIGFyZ3MuLi4pIFwKKwlfX3NuZF9wcmludGsoMiwgX19GSUxFX18sIF9fTElORV9fLCBmb3JtYXQsICMjYXJncykKICNlbHNlCi0jZGVmaW5lIHNuZF9wcmludGRkKGZvcm1hdCwgYXJncy4uLikgLyogbm90aGluZyAqLworI2RlZmluZSBzbmRfcHJpbnRkZChmb3JtYXQsIGFyZ3MuLi4pCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAKQEAgLTQzOCwxMiArNDE3LDEwIEBACiAKIC8qIGZvciBlYXNpZXIgYmFja3dhcmQtcG9ydGluZyAqLwogI2lmIGRlZmluZWQoQ09ORklHX0dBTUVQT1JUKSB8fCBkZWZpbmVkKENPTkZJR19HQU1FUE9SVF9NT0RVTEUpCi0jaWZuZGVmIGdhbWVwb3J0X3NldF9kZXZfcGFyZW50CiAjZGVmaW5lIGdhbWVwb3J0X3NldF9kZXZfcGFyZW50KGdwLHhkZXYpICgoZ3ApLT5kZXYucGFyZW50ID0gKHhkZXYpKQogI2RlZmluZSBnYW1lcG9ydF9zZXRfcG9ydF9kYXRhKGdwLHIpICgoZ3ApLT5wb3J0X2RhdGEgPSAocikpCiAjZGVmaW5lIGdhbWVwb3J0X2dldF9wb3J0X2RhdGEoZ3ApIChncCktPnBvcnRfZGF0YQogI2VuZGlmCi0jZW5kaWYKIAogLyogUENJIHF1aXJrIGxpc3QgaGVscGVyICovCiBzdHJ1Y3Qgc25kX3BjaV9xdWlyayB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2luZm8uaCBiL2luY2x1ZGUvc291bmQvaW5mby5oCmluZGV4IDdjMmVlMWEyLi4xMTJlODk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2luZm8uaAorKysgYi9pbmNsdWRlL3NvdW5kL2luZm8uaApAQCAtMTEwLDEzICsxMTAsMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbmRfY2FyZF9pbmZvX3JlYWRfb3NzKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikge30KICNlbmRpZgogCi1pbnQgc25kX2lwcmludGYoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLCBjaGFyICpmbXQsIC4uLikgXAoraW50IHNuZF9pcHJpbnRmKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlciwgY29uc3QgY2hhciAqZm10LCAuLi4pIFwKIAkJCQlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CiBpbnQgc25kX2luZm9faW5pdCh2b2lkKTsKIGludCBzbmRfaW5mb19kb25lKHZvaWQpOwogCiBpbnQgc25kX2luZm9fZ2V0X2xpbmUoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLCBjaGFyICpsaW5lLCBpbnQgbGVuKTsKLWNoYXIgKnNuZF9pbmZvX2dldF9zdHIoY2hhciAqZGVzdCwgY2hhciAqc3JjLCBpbnQgbGVuKTsKK2NvbnN0IGNoYXIgKnNuZF9pbmZvX2dldF9zdHIoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbGVuKTsKIHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqc25kX2luZm9fY3JlYXRlX21vZHVsZV9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2R1bGUsCiAJCQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAogCQkJCQkgICAgICAgc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwYXJlbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9tZW1hbGxvYy5oIGIvaW5jbHVkZS9zb3VuZC9tZW1hbGxvYy5oCmluZGV4IDdjY2NlOTQuLmM0MjUwNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvbWVtYWxsb2MuaAorKysgYi9pbmNsdWRlL3NvdW5kL21lbWFsbG9jLmgKQEAgLTQ3LDcgKzQ3LDExIEBACiAjZGVmaW5lIFNORFJWX0RNQV9UWVBFX1VOS05PV04JCTAJLyogbm90IGRlZmluZWQgKi8KICNkZWZpbmUgU05EUlZfRE1BX1RZUEVfQ09OVElOVU9VUwkxCS8qIGNvbnRpbnVvdXMgbm8tRE1BIG1lbW9yeSAqLwogI2RlZmluZSBTTkRSVl9ETUFfVFlQRV9ERVYJCTIJLyogZ2VuZXJpYyBkZXZpY2UgY29udGludW91cyAqLworI2lmZGVmIENPTkZJR19TTkRfRE1BX1NHQlVGCiAjZGVmaW5lIFNORFJWX0RNQV9UWVBFX0RFVl9TRwkJMwkvKiBnZW5lcmljIGRldmljZSBTRy1idWZmZXIgKi8KKyNlbHNlCisjZGVmaW5lIFNORFJWX0RNQV9UWVBFX0RFVl9TRwlTTkRSVl9ETUFfVFlQRV9ERVYgLyogbm8gU0ctYnVmIHN1cHBvcnQgKi8KKyNlbmRpZgogCiAvKgogICogaW5mbyBmb3IgYnVmZmVyIGFsbG9jYXRpb24KQEAgLTYwLDYgKzY0LDcgQEAKIAl2b2lkICpwcml2YXRlX2RhdGE7CS8qIHByaXZhdGUgZm9yIGFsbG9jYXRvcjsgZG9uJ3QgdG91Y2ggKi8KIH07CiAKKyNpZmRlZiBDT05GSUdfU05EX0RNQV9TR0JVRgogLyoKICAqIFNjYXR0ZXItR2F0aGVyIGdlbmVyaWMgZGV2aWNlIHBhZ2VzCiAgKi8KQEAgLTEwNyw2ICsxMTIsNyBAQAogewogCXJldHVybiBzZ2J1Zi0+dGFibGVbb2Zmc2V0ID4+IFBBR0VfU0hJRlRdLmJ1ZiArIG9mZnNldCAlIFBBR0VfU0laRTsKIH0KKyNlbmRpZiAvKiBDT05GSUdfU05EX0RNQV9TR0JVRiAqLwogCiAvKiBhbGxvY2F0ZS9yZWxlYXNlIGEgYnVmZmVyICovCiBpbnQgc25kX2RtYV9hbGxvY19wYWdlcyhpbnQgdHlwZSwgc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcGNtLmggYi9pbmNsdWRlL3NvdW5kL3BjbS5oCmluZGV4IDIzODkzNTIuLmRlNmQ5ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcGNtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY20uaApAQCAtOTAyLDYgKzkwMiw3IEBACiBpbnQgc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzaXplX3Qgc2l6ZSk7CiBpbnQgc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiAKKyNpZmRlZiBDT05GSUdfU05EX0RNQV9TR0JVRgogLyoKICAqIFNHLWJ1ZmZlciBoYW5kbGluZwogICovCkBAIC05MjcsNiArOTI4LDI4IEBACiB1bnNpZ25lZCBpbnQgc25kX3BjbV9zZ2J1Zl9nZXRfY2h1bmtfc2l6ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCQkJICB1bnNpZ25lZCBpbnQgb2ZzLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiAKKyNlbHNlIC8qICFTTkRfRE1BX1NHQlVGICovCisvKgorICogZmFrZSB1c2luZyBhIGNvbnRpbnVvdXMgYnVmZmVyCisgKi8KK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAorc25kX3BjbV9zZ2J1Zl9nZXRfYWRkcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgdW5zaWduZWQgaW50IG9mcykKK3sKKwlyZXR1cm4gc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkciArIG9mczsKK30KKworc3RhdGljIGlubGluZSB2b2lkICoKK3NuZF9wY21fc2didWZfZ2V0X3B0cihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgdW5zaWduZWQgaW50IG9mcykKK3sKKwlyZXR1cm4gc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mczsKK30KKworI2RlZmluZSBzbmRfcGNtX3NnYnVmX29wc19wYWdlCU5VTEwKKworI2RlZmluZSBzbmRfcGNtX3NnYnVmX2dldF9jaHVua19zaXplKHN1YnMsIG9mcywgc2l6ZSkJKHNpemUpCisKKyNlbmRpZiAvKiBTTkRfRE1BX1NHQlVGICovCisKIC8qIGhhbmRsZSBtbWFwIGNvdW50ZXIgLSBQQ00gbW1hcCBjYWxsYmFjayBzaG91bGQgaGFuZGxlIHRoaXMgY291bnRlciBwcm9wZXJseSAqLwogc3RhdGljIGlubGluZSB2b2lkIHNuZF9wY21fbW1hcF9kYXRhX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKQogewpAQCAtOTY1LDQgKzk4OCw2IEBACiAKICNkZWZpbmUgUENNX1JVTlRJTUVfQ0hFQ0soc3ViKSBzbmRfQlVHX09OKCEoc3ViKSB8fCAhKHN1YiktPnJ1bnRpbWUpCiAKK2NvbnN0IGNoYXIgKnNuZF9wY21fZm9ybWF0X25hbWUoc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQpOworCiAjZW5kaWYgLyogX19TT1VORF9QQ01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zaF9mc2kuaCBiL2luY2x1ZGUvc291bmQvc2hfZnNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAyMjczNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvc2hfZnNpLmgKQEAgLTAsMCArMSw4MyBAQAorI2lmbmRlZiBfX1NPVU5EX0ZTSV9ICisjZGVmaW5lIF9fU09VTkRfRlNJX0gKKworLyoKKyAqIEZpZm8tYXR0YWNoZWQgU2VyaWFsIEludGVyZmFjZSAoRlNJKSBzdXBwb3J0IGZvciBTSDc3MjQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qIGZsYWdzIGZvcm1hdAorCisgKiAweEFCQ0RFRUZGCisgKgorICogQTogIGNoYW5uZWwgc2l6ZSBmb3IgVERNIChpbnB1dCkKKyAqIEI6ICBjaGFubmVsIHNpemUgZm9yIFRETSAob291dHB1dCkKKyAqIEM6ICBpbnZlcnNpb24KKyAqIEQ6ICBtb2RlCisgKiBFOiAgaW5wdXQgZm9ybWF0CisgKiBGOiAgb3V0cHV0IGZvcm1hdAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworLyogVERNIGNoYW5uZWwgKi8KKyNkZWZpbmUgU0hfRlNJX1NFVF9DSF9JKHgpCSgoeCAmIDB4RikgPDwgMjgpCisjZGVmaW5lIFNIX0ZTSV9TRVRfQ0hfTyh4KQkoKHggJiAweEYpIDw8IDI0KQorCisjZGVmaW5lIFNIX0ZTSV9DSF9JTUFTSwkJMHhGMDAwMDAwMAorI2RlZmluZSBTSF9GU0lfQ0hfT01BU0sJCTB4MEYwMDAwMDAKKyNkZWZpbmUgU0hfRlNJX0dFVF9DSF9JKHgpCSgoeCAmIFNIX0ZTSV9DSF9JTUFTSykgPj4gMjgpCisjZGVmaW5lIFNIX0ZTSV9HRVRfQ0hfTyh4KQkoKHggJiBTSF9GU0lfQ0hfT01BU0spID4+IDI0KQorCisvKiBjbG9jayBpbnZlcnNpb24gKi8KKyNkZWZpbmUgU0hfRlNJX0lOVkVSU0lPTl9NQVNLCTB4MDBGMDAwMDAKKyNkZWZpbmUgU0hfRlNJX0xSTV9JTlYJCSgxIDw8IDIwKQorI2RlZmluZSBTSF9GU0lfQlJNX0lOVgkJKDEgPDwgMjEpCisjZGVmaW5lIFNIX0ZTSV9MUlNfSU5WCQkoMSA8PCAyMikKKyNkZWZpbmUgU0hfRlNJX0JSU19JTlYJCSgxIDw8IDIzKQorCisvKiBtb2RlICovCisjZGVmaW5lIFNIX0ZTSV9NT0RFX01BU0sJMHgwMDBGMDAwMAorI2RlZmluZSBTSF9GU0lfSU5fU0xBVkVfTU9ERQkoMSA8PCAxNikgIC8qIGRlZmF1bHQgbWFzdGVyIG1vZGUgKi8KKyNkZWZpbmUgU0hfRlNJX09VVF9TTEFWRV9NT0RFCSgxIDw8IDE3KSAgLyogZGVmYXVsdCBtYXN0ZXIgbW9kZSAqLworCisvKiBESSBmb3JtYXQgKi8KKyNkZWZpbmUgU0hfRlNJX0ZNVF9NQVNLCQkweDAwMDAwMEZGCisjZGVmaW5lIFNIX0ZTSV9JRk1UKHgpCQkoKChTSF9GU0lfRk1UXyAjIyB4KSAmIFNIX0ZTSV9GTVRfTUFTSykgPDwgOCkKKyNkZWZpbmUgU0hfRlNJX09GTVQoeCkJCSgoKFNIX0ZTSV9GTVRfICMjIHgpICYgU0hfRlNJX0ZNVF9NQVNLKSA8PCAwKQorI2RlZmluZSBTSF9GU0lfR0VUX0lGTVQoeCkJKCh4ID4+IDgpICYgU0hfRlNJX0ZNVF9NQVNLKQorI2RlZmluZSBTSF9GU0lfR0VUX09GTVQoeCkJKCh4ID4+IDApICYgU0hfRlNJX0ZNVF9NQVNLKQorCisjZGVmaW5lIFNIX0ZTSV9GTVRfTU9OTwkJKDEgPDwgMCkKKyNkZWZpbmUgU0hfRlNJX0ZNVF9NT05PX0RFTEFZCSgxIDw8IDEpCisjZGVmaW5lIFNIX0ZTSV9GTVRfUENNCQkoMSA8PCAyKQorI2RlZmluZSBTSF9GU0lfRk1UX0kyUwkJKDEgPDwgMykKKyNkZWZpbmUgU0hfRlNJX0ZNVF9URE0JCSgxIDw8IDQpCisjZGVmaW5lIFNIX0ZTSV9GTVRfVERNX0RFTEFZCSgxIDw8IDUpCisKKyNkZWZpbmUgU0hfRlNJX0lGTVRfVERNX0NIKHgpIFwKKwkoU0hfRlNJX0lGTVQoVERNKQl8IFNIX0ZTSV9TRVRfQ0hfSSh4KSkKKyNkZWZpbmUgU0hfRlNJX0lGTVRfVERNX0RFTEFZX0NIKHgpIFwKKwkoU0hfRlNJX0lGTVQoVERNX0RFTEFZKQl8IFNIX0ZTSV9TRVRfQ0hfSSh4KSkKKworI2RlZmluZSBTSF9GU0lfT0ZNVF9URE1fQ0goeCkgXAorCShTSF9GU0lfT0ZNVChURE0pCXwgU0hfRlNJX1NFVF9DSF9PKHgpKQorI2RlZmluZSBTSF9GU0lfT0ZNVF9URE1fREVMQVlfQ0goeCkgXAorCShTSF9GU0lfT0ZNVChURE1fREVMQVkpCXwgU0hfRlNJX1NFVF9DSF9PKHgpKQorCitzdHJ1Y3Qgc2hfZnNpX3BsYXRmb3JtX2luZm8geworCXVuc2lnbmVkIGxvbmcgcG9ydGFfZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBwb3J0Yl9mbGFnczsKK307CisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgZnNpX3NvY19kYWlbMl07CitleHRlcm4gc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gZnNpX3NvY19wbGF0Zm9ybTsKKworI2VuZGlmIC8qIF9fU09VTkRfRlNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLWRhaS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKaW5kZXggMzUyZDdlZS4uOTdjYTlhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFpLmgKQEAgLTI3LDggKzI3LDggQEAKICNkZWZpbmUgU05EX1NPQ19EQUlGTVRfSTJTCQkwIC8qIEkyUyBtb2RlICovCiAjZGVmaW5lIFNORF9TT0NfREFJRk1UX1JJR0hUX0oJCTEgLyogUmlnaHQgSnVzdGlmaWVkIG1vZGUgKi8KICNkZWZpbmUgU05EX1NPQ19EQUlGTVRfTEVGVF9KCQkyIC8qIExlZnQgSnVzdGlmaWVkIG1vZGUgKi8KLSNkZWZpbmUgU05EX1NPQ19EQUlGTVRfRFNQX0EJCTMgLyogTCBkYXRhIG1zYiBhZnRlciBGUk0gTFJDICovCi0jZGVmaW5lIFNORF9TT0NfREFJRk1UX0RTUF9CCQk0IC8qIEwgZGF0YSBtc2IgZHVyaW5nIEZSTSBMUkMgKi8KKyNkZWZpbmUgU05EX1NPQ19EQUlGTVRfRFNQX0EJCTMgLyogTCBkYXRhIE1TQiBhZnRlciBGUk0gTFJDICovCisjZGVmaW5lIFNORF9TT0NfREFJRk1UX0RTUF9CCQk0IC8qIEwgZGF0YSBNU0IgZHVyaW5nIEZSTSBMUkMgKi8KICNkZWZpbmUgU05EX1NPQ19EQUlGTVRfQUM5NwkJNSAvKiBBQzk3ICovCiAKIC8qIGxlZnQgYW5kIHJpZ2h0IGp1c3RpZmllZCBhbHNvIGtub3duIGFzIE1TQiBhbmQgTFNCIHJlc3BlY3RpdmVseSAqLwpAQCAtMzgsNyArMzgsNyBAQAogLyoKICAqIERBSSBDbG9jayBnYXRpbmcuCiAgKgotICogREFJIGJpdCBjbG9ja3MgY2FuIGJlIGJlIGdhdGVkIChkaXNhYmxlZCkgd2hlbiBub3QgdGhlIERBSSBpcyBub3QKKyAqIERBSSBiaXQgY2xvY2tzIGNhbiBiZSBiZSBnYXRlZCAoZGlzYWJsZWQpIHdoZW4gdGhlIERBSSBpcyBub3QKICAqIHNlbmRpbmcgb3IgcmVjZWl2aW5nIFBDTSBkYXRhIGluIGEgZnJhbWUuIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2F2ZSBwb3dlci4KICAqLwogI2RlZmluZSBTTkRfU09DX0RBSUZNVF9DT05UCQkoMCA8PCA0KSAvKiBjb250aW51b3VzIGNsb2NrICovCkBAIC01MSwyMSArNTEsMjEgQEAKICAqIGZvcm1hdC4KICAqLwogI2RlZmluZSBTTkRfU09DX0RBSUZNVF9OQl9ORgkJKDAgPDwgOCkgLyogbm9ybWFsIGJpdCBjbG9jayArIGZyYW1lICovCi0jZGVmaW5lIFNORF9TT0NfREFJRk1UX05CX0lGCQkoMSA8PCA4KSAvKiBub3JtYWwgYmNsayArIGludiBmcm0gKi8KLSNkZWZpbmUgU05EX1NPQ19EQUlGTVRfSUJfTkYJCSgyIDw8IDgpIC8qIGludmVydCBiY2xrICsgbm9yIGZybSAqLwotI2RlZmluZSBTTkRfU09DX0RBSUZNVF9JQl9JRgkJKDMgPDwgOCkgLyogaW52ZXJ0IGJjbGsgKyBmcm0gKi8KKyNkZWZpbmUgU05EX1NPQ19EQUlGTVRfTkJfSUYJCSgxIDw8IDgpIC8qIG5vcm1hbCBCQ0xLICsgaW52IEZSTSAqLworI2RlZmluZSBTTkRfU09DX0RBSUZNVF9JQl9ORgkJKDIgPDwgOCkgLyogaW52ZXJ0IEJDTEsgKyBub3IgRlJNICovCisjZGVmaW5lIFNORF9TT0NfREFJRk1UX0lCX0lGCQkoMyA8PCA4KSAvKiBpbnZlcnQgQkNMSyArIEZSTSAqLwogCiAvKgogICogREFJIGhhcmR3YXJlIGNsb2NrIG1hc3RlcnMuCiAgKgogICogVGhpcyBpcyB3cnQgdGhlIGNvZGVjLCB0aGUgaW52ZXJzZSBpcyB0cnVlIGZvciB0aGUgaW50ZXJmYWNlCi0gKiBpLmUuIGlmIHRoZSBjb2RlYyBpcyBjbGsgYW5kIGZybSBtYXN0ZXIgdGhlbiB0aGUgaW50ZXJmYWNlIGlzCisgKiBpLmUuIGlmIHRoZSBjb2RlYyBpcyBjbGsgYW5kIEZSTSBtYXN0ZXIgdGhlbiB0aGUgaW50ZXJmYWNlIGlzCiAgKiBjbGsgYW5kIGZyYW1lIHNsYXZlLgogICovCi0jZGVmaW5lIFNORF9TT0NfREFJRk1UX0NCTV9DRk0JCSgwIDw8IDEyKSAvKiBjb2RlYyBjbGsgJiBmcm0gbWFzdGVyICovCi0jZGVmaW5lIFNORF9TT0NfREFJRk1UX0NCU19DRk0JCSgxIDw8IDEyKSAvKiBjb2RlYyBjbGsgc2xhdmUgJiBmcm0gbWFzdGVyICovCisjZGVmaW5lIFNORF9TT0NfREFJRk1UX0NCTV9DRk0JCSgwIDw8IDEyKSAvKiBjb2RlYyBjbGsgJiBGUk0gbWFzdGVyICovCisjZGVmaW5lIFNORF9TT0NfREFJRk1UX0NCU19DRk0JCSgxIDw8IDEyKSAvKiBjb2RlYyBjbGsgc2xhdmUgJiBGUk0gbWFzdGVyICovCiAjZGVmaW5lIFNORF9TT0NfREFJRk1UX0NCTV9DRlMJCSgyIDw8IDEyKSAvKiBjb2RlYyBjbGsgbWFzdGVyICYgZnJhbWUgc2xhdmUgKi8KLSNkZWZpbmUgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUwkJKDMgPDwgMTIpIC8qIGNvZGVjIGNsayAmIGZybSBzbGF2ZSAqLworI2RlZmluZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTCQkoMyA8PCAxMikgLyogY29kZWMgY2xrICYgRlJNIHNsYXZlICovCiAKICNkZWZpbmUgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0sJMHgwMDBmCiAjZGVmaW5lIFNORF9TT0NfREFJRk1UX0NMT0NLX01BU0sJMHgwMGYwCkBAIC03OCw3ICs3OCwxMyBAQAogI2RlZmluZSBTTkRfU09DX0NMT0NLX0lOCQkwCiAjZGVmaW5lIFNORF9TT0NfQ0xPQ0tfT1VUCQkxCiAKLSNkZWZpbmUgU05EX1NPQ19TVERfQUM5N19GTVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8XAorI2RlZmluZSBTTkRfU09DX1NURF9BQzk3X0ZNVFMgKFNORFJWX1BDTV9GTVRCSVRfUzggfFwKKwkJCSAgICAgICBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8XAorCQkJICAgICAgIFNORFJWX1BDTV9GTVRCSVRfUzE2X0JFIHxcCisJCQkgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCisJCQkgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0JFIHxcCisJCQkgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHxcCisJCQkgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0JFIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fRk1UQklUX1MzMl9CRSkKIApAQCAtMTA2LDcgKzExMiw3IEBACiBpbnQgc25kX3NvY19kYWlfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IGZtdCk7CiAKIGludCBzbmRfc29jX2RhaV9zZXRfdGRtX3Nsb3Qoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCi0JdW5zaWduZWQgaW50IG1hc2ssIGludCBzbG90cyk7CisJdW5zaWduZWQgaW50IHR4X21hc2ssIHVuc2lnbmVkIGludCByeF9tYXNrLCBpbnQgc2xvdHMsIGludCBzbG90X3dpZHRoKTsKIAogaW50IHNuZF9zb2NfZGFpX3NldF90cmlzdGF0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IHRyaXN0YXRlKTsKIApAQCAtMTE2LDEyICsxMjIsMTIgQEAKIC8qCiAgKiBEaWdpdGFsIEF1ZGlvIEludGVyZmFjZS4KICAqCi0gKiBEZXNjcmliZXMgdGhlIERpZ2l0YWwgQXVkaW8gSW50ZXJmYWNlIGluIHRlcm1zIG9mIGl0J3MgQUxTQSwgREFJIGFuZCBBQzk3Ci0gKiBvcGVyYXRpb25zIGFuIGNhcGFiaWxpdGllcy4gQ29kZWMgYW5kIHBsYXRmb20gZHJpdmVycyB3aWxsIHJlZ2lzdGVyIGEgdGhpcworICogRGVzY3JpYmVzIHRoZSBEaWdpdGFsIEF1ZGlvIEludGVyZmFjZSBpbiB0ZXJtcyBvZiBpdHMgQUxTQSwgREFJIGFuZCBBQzk3CisgKiBvcGVyYXRpb25zIGFuZCBjYXBhYmlsaXRpZXMuIENvZGVjIGFuZCBwbGF0Zm9ybSBkcml2ZXJzIHdpbGwgcmVnaXN0ZXIgdGhpcwogICogc3RydWN0dXJlIGZvciBldmVyeSBEQUkgdGhleSBoYXZlLgogICoKICAqIFRoaXMgc3RydWN0dXJlIGNvdmVycyB0aGUgY2xvY2tpbmcsIGZvcm1hdGluZyBhbmQgQUxTQSBvcGVyYXRpb25zIGZvciBlYWNoCi0gKiBpbnRlcmZhY2UgYQorICogaW50ZXJmYWNlLgogICovCiBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHsKIAkvKgpAQCAtMTQwLDcgKzE0Niw4IEBACiAJICovCiAJaW50ICgqc2V0X2ZtdCkoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCBmbXQpOwogCWludCAoKnNldF90ZG1fc2xvdCkoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCi0JCXVuc2lnbmVkIGludCBtYXNrLCBpbnQgc2xvdHMpOworCQl1bnNpZ25lZCBpbnQgdHhfbWFzaywgdW5zaWduZWQgaW50IHJ4X21hc2ssCisJCWludCBzbG90cywgaW50IHNsb3Rfd2lkdGgpOwogCWludCAoKnNldF90cmlzdGF0ZSkoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCB0cmlzdGF0ZSk7CiAKIAkvKgpAQCAtMTc5LDYgKzE4Niw3IEBACiAJaW50IGFjOTdfY29udHJvbDsKIAogCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl2b2lkICphYzk3X3BkYXRhOwkvKiBwbGF0Zm9ybV9kYXRhIGZvciB0aGUgYWM5NyBjb2RlYyAqLwogCiAJLyogREFJIGNhbGxiYWNrcyAqLwogCWludCAoKnByb2JlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCmluZGV4IGVjOGE0NWYuLmMxNDEwZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKQEAgLTEzNyw2ICsxMzcsMTIgQEAKIAkuZXZlbnRfZmxhZ3MgPSBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUR9CiAKIC8qIHN0cmVhbSBkb21haW4gKi8KKyNkZWZpbmUgU05EX1NPQ19EQVBNX0FJRl9JTih3bmFtZSwgc3RuYW1lLCB3c2xvdCwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0KSBcCit7CS5pZCA9IHNuZF9zb2NfZGFwbV9haWZfaW4sIC5uYW1lID0gd25hbWUsIC5zbmFtZSA9IHN0bmFtZSwgXAorCS5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIC5pbnZlcnQgPSB3aW52ZXJ0IH0KKyNkZWZpbmUgU05EX1NPQ19EQVBNX0FJRl9PVVQod25hbWUsIHN0bmFtZSwgd3Nsb3QsIHdyZWcsIHdzaGlmdCwgd2ludmVydCkgXAorewkuaWQgPSBzbmRfc29jX2RhcG1fYWlmX291dCwgLm5hbWUgPSB3bmFtZSwgLnNuYW1lID0gc3RuYW1lLCBcCisJLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgLmludmVydCA9IHdpbnZlcnQgfQogI2RlZmluZSBTTkRfU09DX0RBUE1fREFDKHduYW1lLCBzdG5hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCkgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fZGFjLCAubmFtZSA9IHduYW1lLCAuc25hbWUgPSBzdG5hbWUsIC5yZWcgPSB3cmVnLCBcCiAJLnNoaWZ0ID0gd3NoaWZ0LCAuaW52ZXJ0ID0gd2ludmVydH0KQEAgLTI3OSw5ICsyODUsMTEgQEAKIC8qIGRhcG0gZXZlbnRzICovCiBpbnQgc25kX3NvY19kYXBtX3N0cmVhbV9ldmVudChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnN0cmVhbSwKIAlpbnQgZXZlbnQpOwordm9pZCBzbmRfc29jX2RhcG1fc2h1dGRvd24oc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpOwogCiAvKiBkYXBtIHN5cyBmcyAtIHVzZWQgYnkgdGhlIGNvcmUgKi8KIGludCBzbmRfc29jX2RhcG1fc3lzX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwordm9pZCBzbmRfc29jX2RhcG1fZGVidWdmc19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyk7CiAKIC8qIGRhcG0gYXVkaW8gcGluIGNvbnRyb2wgYW5kIHN0YXR1cyAqLwogaW50IHNuZF9zb2NfZGFwbV9lbmFibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKTsKQEAgLTMxMSw2ICszMTksOCBAQAogCXNuZF9zb2NfZGFwbV9wcmUsCQkJLyogbWFjaGluZSBzcGVjaWZpYyBwcmUgd2lkZ2V0IC0gZXhlYyBmaXJzdCAqLwogCXNuZF9zb2NfZGFwbV9wb3N0LAkJCS8qIG1hY2hpbmUgc3BlY2lmaWMgcG9zdCB3aWRnZXQgLSBleGVjIGxhc3QgKi8KIAlzbmRfc29jX2RhcG1fc3VwcGx5LAkJLyogcG93ZXIvY2xvY2sgc3VwcGx5ICovCisJc25kX3NvY19kYXBtX2FpZl9pbiwJCS8qIGF1ZGlvIGludGVyZmFjZSBpbnB1dCAqLworCXNuZF9zb2NfZGFwbV9haWZfb3V0LAkJLyogYXVkaW8gaW50ZXJmYWNlIG91dHB1dCAqLwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLmggYi9pbmNsdWRlL3NvdW5kL3NvYy5oCmluZGV4IGNmNjExMWQuLjQ3NWNiN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MuaApAQCAtMTM1LDYgKzEzNSwyOCBAQAogCS5pbmZvID0gc25kX3NvY19pbmZvX3ZvbHN3LCBcCiAJLmdldCA9IHhoYW5kbGVyX2dldCwgLnB1dCA9IHhoYW5kbGVyX3B1dCwgXAogCS5wcml2YXRlX3ZhbHVlID0gU09DX1NJTkdMRV9WQUxVRSh4cmVnLCB4c2hpZnQsIHhtYXgsIHhpbnZlcnQpIH0KKyNkZWZpbmUgU09DX0RPVUJMRV9FWFRfVExWKHhuYW1lLCB4cmVnLCBzaGlmdF9sZWZ0LCBzaGlmdF9yaWdodCwgeG1heCwgeGludmVydCxcCisJIHhoYW5kbGVyX2dldCwgeGhhbmRsZXJfcHV0LCB0bHZfYXJyYXkpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0gKHhuYW1lKSwgXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQgfCBcCisJCSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFLCBcCisJLnRsdi5wID0gKHRsdl9hcnJheSksIFwKKwkuaW5mbyA9IHNuZF9zb2NfaW5mb192b2xzdywgXAorCS5nZXQgPSB4aGFuZGxlcl9nZXQsIC5wdXQgPSB4aGFuZGxlcl9wdXQsIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKSYoc3RydWN0IHNvY19taXhlcl9jb250cm9sKSBcCisJCXsucmVnID0geHJlZywgLnNoaWZ0ID0gc2hpZnRfbGVmdCwgLnJzaGlmdCA9IHNoaWZ0X3JpZ2h0LCBcCisJCS5tYXggPSB4bWF4LCAuaW52ZXJ0ID0geGludmVydH0gfQorI2RlZmluZSBTT0NfRE9VQkxFX1JfRVhUX1RMVih4bmFtZSwgcmVnX2xlZnQsIHJlZ19yaWdodCwgeHNoaWZ0LCB4bWF4LCB4aW52ZXJ0LFwKKwkgeGhhbmRsZXJfZ2V0LCB4aGFuZGxlcl9wdXQsIHRsdl9hcnJheSkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSAoeG5hbWUpLCBcCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCB8IFwKKwkJIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsIFwKKwkudGx2LnAgPSAodGx2X2FycmF5KSwgXAorCS5pbmZvID0gc25kX3NvY19pbmZvX3ZvbHN3XzJyLCBcCisJLmdldCA9IHhoYW5kbGVyX2dldCwgLnB1dCA9IHhoYW5kbGVyX3B1dCwgXAorCS5wcml2YXRlX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpJihzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wpIFwKKwkJey5yZWcgPSByZWdfbGVmdCwgLnJyZWcgPSByZWdfcmlnaHQsIC5zaGlmdCA9IHhzaGlmdCwgXAorCQkubWF4ID0geG1heCwgLmludmVydCA9IHhpbnZlcnR9IH0KICNkZWZpbmUgU09DX1NJTkdMRV9CT09MX0VYVCh4bmFtZSwgeGRhdGEsIHhoYW5kbGVyX2dldCwgeGhhbmRsZXJfcHV0KSBcCiB7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCBcCiAJLmluZm8gPSBzbmRfc29jX2luZm9fYm9vbF9leHQsIFwKQEAgLTE4MywxNCArMjA1LDI4IEBACiAjZW5kaWYKIAogdHlwZWRlZiBpbnQgKCpod193cml0ZV90KSh2b2lkICosY29uc3QgY2hhciogLGludCk7Ci10eXBlZGVmIGludCAoKmh3X3JlYWRfdCkodm9pZCAqLGNoYXIqICxpbnQpOwogCiBleHRlcm4gc3RydWN0IHNuZF9hYzk3X2J1c19vcHMgc29jX2FjOTdfb3BzOwogCitlbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIHsKKwlTTkRfU09DX0NVU1RPTSwKKwlTTkRfU09DX0kyQywKKwlTTkRfU09DX1NQSSwKK307CisKIGludCBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybSk7CiB2b2lkIHNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybShzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm0pOwogaW50IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKTsKIHZvaWQgc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyk7CitpbnQgc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCByZWcpOworaW50IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCSAgICAgICBpbnQgYWRkcl9iaXRzLCBpbnQgZGF0YV9iaXRzLAorCQkJICAgICAgIGVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbCk7CisKKyNpZmRlZiBDT05GSUdfUE0KK2ludCBzbmRfc29jX3N1c3BlbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CitpbnQgc25kX3NvY19yZXN1bWVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CisjZW5kaWYKIAogLyogcGNtIDwtPiBEQUkgY29ubmVjdCAqLwogdm9pZCBzbmRfc29jX2ZyZWVfcGNtcyhzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2Rldik7CkBAIC0yMTYsOSArMjUyLDkgQEAKIAogLyogY29kZWMgcmVnaXN0ZXIgYml0IGFjY2VzcyAqLwogaW50IHNuZF9zb2NfdXBkYXRlX2JpdHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBzaG9ydCByZWcsCi0JCQkJdW5zaWduZWQgc2hvcnQgbWFzaywgdW5zaWduZWQgc2hvcnQgdmFsdWUpOworCQkJCXVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgdmFsdWUpOwogaW50IHNuZF9zb2NfdGVzdF9iaXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgc2hvcnQgcmVnLAotCQkJCXVuc2lnbmVkIHNob3J0IG1hc2ssIHVuc2lnbmVkIHNob3J0IHZhbHVlKTsKKwkJCQl1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHZhbHVlKTsKIAogaW50IHNuZF9zb2NfbmV3X2FjOTdfY29kZWMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCXN0cnVjdCBzbmRfYWM5N19idXNfb3BzICpvcHMsIGludCBudW0pOwpAQCAtMzU2LDggKzM5MiwxMCBAQAogCWludCAoKndyaXRlKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiAJaW50ICgqZGlzcGxheV9yZWdpc3Rlcikoc3RydWN0IHNuZF9zb2NfY29kZWMgKiwgY2hhciAqLAogCQkJCXNpemVfdCwgdW5zaWduZWQgaW50KTsKKwlpbnQgKCp2b2xhdGlsZV9yZWdpc3RlcikodW5zaWduZWQgaW50KTsKKwlpbnQgKCpyZWFkYWJsZV9yZWdpc3RlcikodW5zaWduZWQgaW50KTsKIAlod193cml0ZV90IGh3X3dyaXRlOwotCWh3X3JlYWRfdCBod19yZWFkOworCXVuc2lnbmVkIGludCAoKmh3X3JlYWQpKHN0cnVjdCBzbmRfc29jX2NvZGVjICosIHVuc2lnbmVkIGludCk7CiAJdm9pZCAqcmVnX2NhY2hlOwogCXNob3J0IHJlZ19jYWNoZV9zaXplOwogCXNob3J0IHJlZ19jYWNoZV9zdGVwOwpAQCAtMzY5LDggKzQwNyw2IEBACiAJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgYmlhc19sZXZlbDsKIAllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBzdXNwZW5kX2JpYXNfbGV2ZWw7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBkZWxheWVkX3dvcms7Ci0Jc3RydWN0IGxpc3RfaGVhZCB1cF9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgZG93bl9saXN0OwogCiAJLyogY29kZWMgREFJJ3MgKi8KIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaTsKQEAgLTM3OSw2ICs0MTUsNyBAQAogI2lmZGVmIENPTkZJR19ERUJVR19GUwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcmVnOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcG9wX3RpbWU7CisJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kYXBtOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3Rsdi5oIGIvaW5jbHVkZS9zb3VuZC90bHYuaAppbmRleCBkMTM2ZWEyLi45ZmQ1YjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3Rsdi5oCisrKyBiL2luY2x1ZGUvc291bmQvdGx2LmgKQEAgLTM1LDYgKzM1LDggQEAKICNkZWZpbmUgU05EUlZfQ1RMX1RMVlRfREJfU0NBTEUJMSAgICAgICAvKiBkQiBzY2FsZSAqLwogI2RlZmluZSBTTkRSVl9DVExfVExWVF9EQl9MSU5FQVIgMgkvKiBsaW5lYXIgdm9sdW1lICovCiAjZGVmaW5lIFNORFJWX0NUTF9UTFZUX0RCX1JBTkdFIDMJLyogZEIgcmFuZ2UgY29udGFpbmVyICovCisjZGVmaW5lIFNORFJWX0NUTF9UTFZUX0RCX01JTk1BWCA0CS8qIGRCIHNjYWxlIHdpdGggbWluL21heCAqLworI2RlZmluZSBTTkRSVl9DVExfVExWVF9EQl9NSU5NQVhfTVVURSA1CS8qIGRCIHNjYWxlIHdpdGggbWluL21heCB3aXRoIG11dGUgKi8KIAogI2RlZmluZSBUTFZfREJfU0NBTEVfSVRFTShtaW4sIHN0ZXAsIG11dGUpCQkJXAogCVNORFJWX0NUTF9UTFZUX0RCX1NDQUxFLCAyICogc2l6ZW9mKHVuc2lnbmVkIGludCksCVwKQEAgLTQyLDYgKzQ0LDE4IEBACiAjZGVmaW5lIERFQ0xBUkVfVExWX0RCX1NDQUxFKG5hbWUsIG1pbiwgc3RlcCwgbXV0ZSkgXAogCXVuc2lnbmVkIGludCBuYW1lW10gPSB7IFRMVl9EQl9TQ0FMRV9JVEVNKG1pbiwgc3RlcCwgbXV0ZSkgfQogCisvKiBkQiBzY2FsZSBzcGVjaWZpZWQgd2l0aCBtaW4vbWF4IHZhbHVlcyBpbnN0ZWFkIG9mIHN0ZXAgKi8KKyNkZWZpbmUgVExWX0RCX01JTk1BWF9JVEVNKG1pbl9kQiwgbWF4X2RCKQkJCVwKKwlTTkRSVl9DVExfVExWVF9EQl9NSU5NQVgsIDIgKiBzaXplb2YodW5zaWduZWQgaW50KSwJXAorCShtaW5fZEIpLCAobWF4X2RCKQorI2RlZmluZSBUTFZfREJfTUlOTUFYX01VVEVfSVRFTShtaW5fZEIsIG1heF9kQikJCQlcCisJU05EUlZfQ1RMX1RMVlRfREJfTUlOTUFYX01VVEUsIDIgKiBzaXplb2YodW5zaWduZWQgaW50KSwJXAorCShtaW5fZEIpLCAobWF4X2RCKQorI2RlZmluZSBERUNMQVJFX1RMVl9EQl9NSU5NQVgobmFtZSwgbWluX2RCLCBtYXhfZEIpIFwKKwl1bnNpZ25lZCBpbnQgbmFtZVtdID0geyBUTFZfREJfTUlOTUFYX0lURU0obWluX2RCLCBtYXhfZEIpIH0KKyNkZWZpbmUgREVDTEFSRV9UTFZfREJfTUlOTUFYX01VVEUobmFtZSwgbWluX2RCLCBtYXhfZEIpIFwKKwl1bnNpZ25lZCBpbnQgbmFtZVtdID0geyBUTFZfREJfTUlOTUFYX01VVEVfSVRFTShtaW5fZEIsIG1heF9kQikgfQorCiAvKiBsaW5lYXIgdm9sdW1lIGJldHdlZW4gbWluX2RCIGFuZCBtYXhfZEIgKC4wMWRCIHVuaXQpICovCiAjZGVmaW5lIFRMVl9EQl9MSU5FQVJfSVRFTShtaW5fZEIsIG1heF9kQikJCSAgICBcCiAJU05EUlZfQ1RMX1RMVlRfREJfTElORUFSLCAyICogc2l6ZW9mKHVuc2lnbmVkIGludCksIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdWRhMTM4MC5oIGIvaW5jbHVkZS9zb3VuZC91ZGExMzgwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxMzE5YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvdWRhMTM4MC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBVREExMzgwIEFMU0EgU29DIENvZGVjIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFBoaWxpcHAgWmFiZWwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19VREExMzgwX0gKKyNkZWZpbmUgX19VREExMzgwX0gKKworc3RydWN0IHVkYTEzODBfcGxhdGZvcm1fZGF0YSB7CisJaW50IGdwaW9fcG93ZXI7CisJaW50IGdwaW9fcmVzZXQ7CisJaW50IGRhY19jbGs7CisjZGVmaW5lIFVEQTEzODBfREFDX0NMS19TWVNDTEsgMAorI2RlZmluZSBVREExMzgwX0RBQ19DTEtfV1NQTEwgIDEKK307CisKKyNlbmRpZiAvKiBfX1VEQTEzODBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmggYi9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaAppbmRleCA0NTZmMTM1Li4yMjkzOTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaAorKysgYi9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaApAQCAtMSwzICsxLDMgQEAKIC8qIGluY2x1ZGUvdmVyc2lvbi5oICovCi0jZGVmaW5lIENPTkZJR19TTkRfVkVSU0lPTiAiMS4wLjIwIgorI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC4yMSIKICNkZWZpbmUgQ09ORklHX1NORF9EQVRFICIiCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3dtODk5My5oIGIvaW5jbHVkZS9zb3VuZC93bTg5OTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzY2MWYyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC93bTg5OTMuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogbGludXgvc291bmQvd204OTkzLmggLS0gUGxhdGZvcm0gZGF0YSBmb3IgV004OTkzCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzLiBQTEMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfU05EX1dNODk5M19ICisjZGVmaW5lIF9fTElOVVhfU05EX1dNODk5M19ICisKKy8qIE5vdGUgdGhhdCBFUTEgb25seSBjb250YWlucyB0aGUgZW5hYmxlL2Rpc2FibGUgYml0IHNvIHdpbGwgYmUKKyAgIGlnbm9yZWQgYnV0IGlzIGluY2x1ZGVkIGZvciBzaW1wbGljaXR5LgorICovCitzdHJ1Y3Qgd204OTkzX3JldHVuZV9tb2JpbGVfc2V0dGluZyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKwl1MTYgY29uZmlnWzI0XTsKK307CisKK3N0cnVjdCB3bTg5OTNfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IHdtODk5M19yZXR1bmVfbW9iaWxlX3NldHRpbmcgKnJldHVuZV9jb25maWdzOworCWludCBudW1fcmV0dW5lX2NvbmZpZ3M7CisKKwkvKiBMSU5FT1VUIGNhbiBiZSBkaWZmZXJlbnRpYWwgb3Igc2luZ2xlIGVuZGVkICovCisJdW5zaWduZWQgaW50IGxpbmVvdXQxX2RpZmY6MTsKKwl1bnNpZ25lZCBpbnQgbGluZW91dDJfZGlmZjoxOworCisJLyogQ29tbW9uIG1vZGUgZmVlZGJhY2sgKi8KKwl1bnNpZ25lZCBpbnQgbGluZW91dDFmYjoxOworCXVuc2lnbmVkIGludCBsaW5lb3V0MmZiOjE7CisKKwkvKiBNaWNyb3Bob25lIGJpYXNlczogMD0wLjkqQVZERDEgMT0wLjY1KkFWVkQxICovCisJdW5zaWduZWQgaW50IG1pY2JpYXMxX2x2bDoxOworCXVuc2lnbmVkIGludCBtaWNiaWFzMl9sdmw6MTsKKworCS8qIEphY2sgZGV0ZWN0IHRocmVhc2hvbGQgbGV2ZWxzLCBzZWUgZGF0YXNoZWV0IGZvciB2YWx1ZXMgKi8KKwl1bnNpZ25lZCBpbnQgamRfc2N0aHI6MjsKKwl1bnNpZ25lZCBpbnQgamRfdGhyOjI7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQveW1mcGNpLmggYi9pbmNsdWRlL3NvdW5kL3ltZnBjaS5oCmluZGV4IDA1ZWFkNjYuLjQ0NGNkNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQveW1mcGNpLmgKKysrIGIvaW5jbHVkZS9zb3VuZC95bWZwY2kuaApAQCAtMzMxLDYgKzMzMSw3IEBACiAJc3RydWN0IHNuZF9hYzk3ICphYzk3OwogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcmF3bWlkaTsKIAlzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcjsKKwl1bnNpZ25lZCBpbnQgdGltZXJfdGlja3M7CiAKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZGVmaW5lX3RyYWNlLmggYi9pbmNsdWRlL3RyYWNlL2RlZmluZV90cmFjZS5oCmluZGV4IGY3YTdhZTEuLjJhNGIzYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZGVmaW5lX3RyYWNlLmgKKysrIGIvaW5jbHVkZS90cmFjZS9kZWZpbmVfdHJhY2UuaApAQCAtMjYsNiArMjYsMTEgQEAKICNkZWZpbmUgVFJBQ0VfRVZFTlQobmFtZSwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKIAlERUZJTkVfVFJBQ0UobmFtZSkKIAorI3VuZGVmIFRSQUNFX0VWRU5UX0ZOCisjZGVmaW5lIFRSQUNFX0VWRU5UX0ZOKG5hbWUsIHByb3RvLCBhcmdzLCB0c3RydWN0LAkJXAorCQlhc3NpZ24sIHByaW50LCByZWcsIHVucmVnKQkJCVwKKwlERUZJTkVfVFJBQ0VfRk4obmFtZSwgcmVnLCB1bnJlZykKKwogI3VuZGVmIERFQ0xBUkVfVFJBQ0UKICNkZWZpbmUgREVDTEFSRV9UUkFDRShuYW1lLCBwcm90bywgYXJncykJXAogCURFRklORV9UUkFDRShuYW1lKQpAQCAtNTYsNiArNjEsOCBAQAogI2luY2x1ZGUgPHRyYWNlL2Z0cmFjZS5oPgogI2VuZGlmCiAKKyN1bmRlZiBUUkFDRV9FVkVOVAorI3VuZGVmIFRSQUNFX0VWRU5UX0ZOCiAjdW5kZWYgVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQKIAogLyogT25seSB1bmRlZiB3aGF0IHdlIGRlZmluZWQgaW4gdGhpcyBmaWxlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgKaW5kZXggN2Q4YjViYy4uOGQ0MzNjNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgKQEAgLTIyNyw3ICsyMjcsNiBAQAogCQlfX2ZpZWxkKAljaGFyLAlub25ibG9ja2luZwkJKQogCQlfX2ZpZWxkKAljaGFyLAlmb3Jfa3VwZGF0ZQkJKQogCQlfX2ZpZWxkKAljaGFyLAlmb3JfcmVjbGFpbQkJKQotCQlfX2ZpZWxkKAljaGFyLAlmb3Jfd3JpdGVwYWdlcwkJKQogCQlfX2ZpZWxkKAljaGFyLAlyYW5nZV9jeWNsaWMJCSkKIAkpLAogCkBAIC0yNDEsMTYgKzI0MCwxNSBAQAogCQlfX2VudHJ5LT5ub25ibG9ja2luZwk9IHdiYy0+bm9uYmxvY2tpbmc7CiAJCV9fZW50cnktPmZvcl9rdXBkYXRlCT0gd2JjLT5mb3Jfa3VwZGF0ZTsKIAkJX19lbnRyeS0+Zm9yX3JlY2xhaW0JPSB3YmMtPmZvcl9yZWNsYWltOwotCQlfX2VudHJ5LT5mb3Jfd3JpdGVwYWdlcwk9IHdiYy0+Zm9yX3dyaXRlcGFnZXM7CiAJCV9fZW50cnktPnJhbmdlX2N5Y2xpYwk9IHdiYy0+cmFuZ2VfY3ljbGljOwogCSksCiAKLQlUUF9wcmludGsoImRldiAlcyBpbm8gJWx1IG5yX3Rfd3JpdGUgJWxkIHBhZ2VzX3NraXBwZWQgJWxkIHJhbmdlX3N0YXJ0ICVsbHUgcmFuZ2VfZW5kICVsbHUgbm9uYmxvY2tpbmcgJWQgZm9yX2t1cGRhdGUgJWQgZm9yX3JlY2xhaW0gJWQgZm9yX3dyaXRlcGFnZXMgJWQgcmFuZ2VfY3ljbGljICVkIiwKKwlUUF9wcmludGsoImRldiAlcyBpbm8gJWx1IG5yX3Rfd3JpdGUgJWxkIHBhZ2VzX3NraXBwZWQgJWxkIHJhbmdlX3N0YXJ0ICVsbHUgcmFuZ2VfZW5kICVsbHUgbm9uYmxvY2tpbmcgJWQgZm9yX2t1cGRhdGUgJWQgZm9yX3JlY2xhaW0gJWQgcmFuZ2VfY3ljbGljICVkIiwKIAkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksIF9fZW50cnktPmlubywgX19lbnRyeS0+bnJfdG9fd3JpdGUsCiAJCSAgX19lbnRyeS0+cGFnZXNfc2tpcHBlZCwgX19lbnRyeS0+cmFuZ2Vfc3RhcnQsCiAJCSAgX19lbnRyeS0+cmFuZ2VfZW5kLCBfX2VudHJ5LT5ub25ibG9ja2luZywKIAkJICBfX2VudHJ5LT5mb3Jfa3VwZGF0ZSwgX19lbnRyeS0+Zm9yX3JlY2xhaW0sCi0JCSAgX19lbnRyeS0+Zm9yX3dyaXRlcGFnZXMsIF9fZW50cnktPnJhbmdlX2N5Y2xpYykKKwkJICBfX2VudHJ5LT5yYW5nZV9jeWNsaWMpCiApOwogCiBUUkFDRV9FVkVOVChleHQ0X2RhX3dyaXRlcGFnZXNfcmVzdWx0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmUxMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmgKQEAgLTAsMCArMSwxNTEgQEAKKyNpZiAhZGVmaW5lZChfVFJBQ0VfS1ZNX01BSU5fSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKKyNkZWZpbmUgX1RSQUNFX0tWTV9NQUlOX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0ga3ZtCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSBrdm0KKworI2lmIGRlZmluZWQoX19LVk1fSEFWRV9JT0FQSUMpCitUUkFDRV9FVkVOVChrdm1fc2V0X2lycSwKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgZ3NpLCBpbnQgbGV2ZWwsIGludCBpcnFfc291cmNlX2lkKSwKKwlUUF9BUkdTKGdzaSwgbGV2ZWwsIGlycV9zb3VyY2VfaWQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAlnc2kJCSkKKwkJX19maWVsZCgJaW50LAkJbGV2ZWwJCSkKKwkJX19maWVsZCgJaW50LAkJaXJxX3NvdXJjZV9pZAkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5nc2kJCT0gZ3NpOworCQlfX2VudHJ5LT5sZXZlbAkJPSBsZXZlbDsKKwkJX19lbnRyeS0+aXJxX3NvdXJjZV9pZAk9IGlycV9zb3VyY2VfaWQ7CisJKSwKKworCVRQX3ByaW50aygiZ3NpICV1IGxldmVsICVkIHNvdXJjZSAlZCIsCisJCSAgX19lbnRyeS0+Z3NpLCBfX2VudHJ5LT5sZXZlbCwgX19lbnRyeS0+aXJxX3NvdXJjZV9pZCkKKyk7CisKKyNkZWZpbmUga3ZtX2RlbGl2ZXJfbW9kZQkJXAorCXsweDAsICJGaXhlZCJ9LAkJCVwKKwl7MHgxLCAiTG93UHJpbyJ9LAkJXAorCXsweDIsICJTTUkifSwJCQlcCisJezB4MywgIlJlczMifSwJCQlcCisJezB4NCwgIk5NSSJ9LAkJCVwKKwl7MHg1LCAiSU5JVCJ9LAkJCVwKKwl7MHg2LCAiU0lQSSJ9LAkJCVwKKwl7MHg3LCAiRXh0SU5UIn0KKworVFJBQ0VfRVZFTlQoa3ZtX2lvYXBpY19zZXRfaXJxLAorCSAgICBUUF9QUk9UTyhfX3U2NCBlLCBpbnQgcGluLCBib29sIGNvYWxlc2NlZCksCisJICAgIFRQX0FSR1MoZSwgcGluLCBjb2FsZXNjZWQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJX191NjQsCQllCQkpCisJCV9fZmllbGQoCWludCwJCXBpbgkJKQorCQlfX2ZpZWxkKAlib29sLAkJY29hbGVzY2VkCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmUJCT0gZTsKKwkJX19lbnRyeS0+cGluCQk9IHBpbjsKKwkJX19lbnRyeS0+Y29hbGVzY2VkCT0gY29hbGVzY2VkOworCSksCisKKwlUUF9wcmludGsoInBpbiAldSBkc3QgJXggdmVjPSV1ICglc3wlc3wlcyVzKSVzIiwKKwkJICBfX2VudHJ5LT5waW4sICh1OCkoX19lbnRyeS0+ZSA+PiA1NiksICh1OClfX2VudHJ5LT5lLAorCQkgIF9fcHJpbnRfc3ltYm9saWMoKF9fZW50cnktPmUgPj4gOCAmIDB4NyksIGt2bV9kZWxpdmVyX21vZGUpLAorCQkgIChfX2VudHJ5LT5lICYgKDE8PDExKSkgPyAibG9naWNhbCIgOiAicGh5c2ljYWwiLAorCQkgIChfX2VudHJ5LT5lICYgKDE8PDE1KSkgPyAibGV2ZWwiIDogImVkZ2UiLAorCQkgIChfX2VudHJ5LT5lICYgKDE8PDE2KSkgPyAifG1hc2tlZCIgOiAiIiwKKwkJICBfX2VudHJ5LT5jb2FsZXNjZWQgPyAiIChjb2FsZXNjZWQpIiA6ICIiKQorKTsKKworVFJBQ0VfRVZFTlQoa3ZtX21zaV9zZXRfaXJxLAorCSAgICBUUF9QUk9UTyhfX3U2NCBhZGRyZXNzLCBfX3U2NCBkYXRhKSwKKwkgICAgVFBfQVJHUyhhZGRyZXNzLCBkYXRhKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCV9fdTY0LAkJYWRkcmVzcwkJKQorCQlfX2ZpZWxkKAlfX3U2NCwJCWRhdGEJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmFkZHJlc3MJPSBhZGRyZXNzOworCQlfX2VudHJ5LT5kYXRhCQk9IGRhdGE7CisJKSwKKworCVRQX3ByaW50aygiZHN0ICV1IHZlYyAleCAoJXN8JXN8JXMlcykiLAorCQkgICh1OCkoX19lbnRyeS0+YWRkcmVzcyA+PiAxMiksICh1OClfX2VudHJ5LT5kYXRhLAorCQkgIF9fcHJpbnRfc3ltYm9saWMoKF9fZW50cnktPmRhdGEgPj4gOCAmIDB4NyksIGt2bV9kZWxpdmVyX21vZGUpLAorCQkgIChfX2VudHJ5LT5hZGRyZXNzICYgKDE8PDIpKSA/ICJsb2dpY2FsIiA6ICJwaHlzaWNhbCIsCisJCSAgKF9fZW50cnktPmRhdGEgJiAoMTw8MTUpKSA/ICJsZXZlbCIgOiAiZWRnZSIsCisJCSAgKF9fZW50cnktPmFkZHJlc3MgJiAoMTw8MykpID8gInxyaCIgOiAiIikKKyk7CisKKyNkZWZpbmUga3ZtX2lycWNoaXBzCQkJCQkJXAorCXtLVk1fSVJRQ0hJUF9QSUNfTUFTVEVSLAkiUElDIG1hc3RlciJ9LAkJXAorCXtLVk1fSVJRQ0hJUF9QSUNfU0xBVkUsCQkiUElDIHNsYXZlIn0sCQlcCisJe0tWTV9JUlFDSElQX0lPQVBJQywJCSJJT0FQSUMifQorCitUUkFDRV9FVkVOVChrdm1fYWNrX2lycSwKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgaXJxY2hpcCwgdW5zaWduZWQgaW50IHBpbiksCisJVFBfQVJHUyhpcnFjaGlwLCBwaW4pLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAlpcnFjaGlwCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJcGluCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5pcnFjaGlwCT0gaXJxY2hpcDsKKwkJX19lbnRyeS0+cGluCQk9IHBpbjsKKwkpLAorCisJVFBfcHJpbnRrKCJpcnFjaGlwICVzIHBpbiAldSIsCisJCSAgX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LT5pcnFjaGlwLCBrdm1faXJxY2hpcHMpLAorCQkgX19lbnRyeS0+cGluKQorKTsKKworCisKKyNlbmRpZiAvKiBkZWZpbmVkKF9fS1ZNX0hBVkVfSU9BUElDKSAqLworCisjZGVmaW5lIEtWTV9UUkFDRV9NTUlPX1JFQURfVU5TQVRJU0ZJRUQgMAorI2RlZmluZSBLVk1fVFJBQ0VfTU1JT19SRUFEIDEKKyNkZWZpbmUgS1ZNX1RSQUNFX01NSU9fV1JJVEUgMgorCisjZGVmaW5lIGt2bV90cmFjZV9zeW1ib2xfbW1pbyBcCisJeyBLVk1fVFJBQ0VfTU1JT19SRUFEX1VOU0FUSVNGSUVELCAidW5zYXRpc2ZpZWQtcmVhZCIgfSwgXAorCXsgS1ZNX1RSQUNFX01NSU9fUkVBRCwgInJlYWQiIH0sIFwKKwl7IEtWTV9UUkFDRV9NTUlPX1dSSVRFLCAid3JpdGUiIH0KKworVFJBQ0VfRVZFTlQoa3ZtX21taW8sCisJVFBfUFJPVE8oaW50IHR5cGUsIGludCBsZW4sIHU2NCBncGEsIHU2NCB2YWwpLAorCVRQX0FSR1ModHlwZSwgbGVuLCBncGEsIHZhbCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1MzIsCXR5cGUJCSkKKwkJX19maWVsZCgJdTMyLAlsZW4JCSkKKwkJX19maWVsZCgJdTY0LAlncGEJCSkKKwkJX19maWVsZCgJdTY0LAl2YWwJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnR5cGUJCT0gdHlwZTsKKwkJX19lbnRyeS0+bGVuCQk9IGxlbjsKKwkJX19lbnRyeS0+Z3BhCQk9IGdwYTsKKwkJX19lbnRyeS0+dmFsCQk9IHZhbDsKKwkpLAorCisJVFBfcHJpbnRrKCJtbWlvICVzIGxlbiAldSBncGEgMHglbGx4IHZhbCAweCVsbHgiLAorCQkgIF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0+dHlwZSwga3ZtX3RyYWNlX3N5bWJvbF9tbWlvKSwKKwkJICBfX2VudHJ5LT5sZW4sIF9fZW50cnktPmdwYSwgX19lbnRyeS0+dmFsKQorKTsKKworI2VuZGlmIC8qIF9UUkFDRV9LVk1fTUFJTl9IICovCisKKy8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbW9kdWxlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDE2MGZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbW9kdWxlLmgKQEAgLTAsMCArMSwxMjYgQEAKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIG1vZHVsZQorCisjaWYgIWRlZmluZWQoX1RSQUNFX01PRFVMRV9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVFJBQ0VfTU9EVUxFX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI2lmZGVmIENPTkZJR19NT0RVTEVTCisKK3N0cnVjdCBtb2R1bGU7CisKKyNkZWZpbmUgc2hvd19tb2R1bGVfZmxhZ3MoZmxhZ3MpIF9fcHJpbnRfZmxhZ3MoZmxhZ3MsICIiLAlcCisJeyAoMVVMIDw8IFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSksCSJQIiB9LAkJXAorCXsgKDFVTCA8PCBUQUlOVF9GT1JDRURfTU9EVUxFKSwJCSJGIiB9LAkJXAorCXsgKDFVTCA8PCBUQUlOVF9DUkFQKSwJCQkiQyIgfSkKKworVFJBQ0VfRVZFTlQobW9kdWxlX2xvYWQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgbW9kdWxlICptb2QpLAorCisJVFBfQVJHUyhtb2QpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAl0YWludHMJCSkKKwkJX19zdHJpbmcoCW5hbWUsCQltb2QtPm5hbWUJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+dGFpbnRzID0gbW9kLT50YWludHM7CisJCV9fYXNzaWduX3N0cihuYW1lLCBtb2QtPm5hbWUpOworCSksCisKKwlUUF9wcmludGsoIiVzICVzIiwgX19nZXRfc3RyKG5hbWUpLCBzaG93X21vZHVsZV9mbGFncyhfX2VudHJ5LT50YWludHMpKQorKTsKKworVFJBQ0VfRVZFTlQobW9kdWxlX2ZyZWUsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgbW9kdWxlICptb2QpLAorCisJVFBfQVJHUyhtb2QpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19zdHJpbmcoCW5hbWUsCQltb2QtPm5hbWUJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19hc3NpZ25fc3RyKG5hbWUsIG1vZC0+bmFtZSk7CisJKSwKKworCVRQX3ByaW50aygiJXMiLCBfX2dldF9zdHIobmFtZSkpCispOworCitUUkFDRV9FVkVOVChtb2R1bGVfZ2V0LAorCisJVFBfUFJPVE8oc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIGlwLCBpbnQgcmVmY250KSwKKworCVRQX0FSR1MobW9kLCBpcCwgcmVmY250KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWlwCQkpCisJCV9fZmllbGQoCWludCwJCXJlZmNudAkJKQorCQlfX3N0cmluZygJbmFtZSwJCW1vZC0+bmFtZQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5pcAk9IGlwOworCQlfX2VudHJ5LT5yZWZjbnQJPSByZWZjbnQ7CisJCV9fYXNzaWduX3N0cihuYW1lLCBtb2QtPm5hbWUpOworCSksCisKKwlUUF9wcmludGsoIiVzIGNhbGxfc2l0ZT0lcGYgcmVmY250PSVkIiwKKwkJICBfX2dldF9zdHIobmFtZSksICh2b2lkICopX19lbnRyeS0+aXAsIF9fZW50cnktPnJlZmNudCkKKyk7CisKK1RSQUNFX0VWRU5UKG1vZHVsZV9wdXQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgaXAsIGludCByZWZjbnQpLAorCisJVFBfQVJHUyhtb2QsIGlwLCByZWZjbnQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJaXAJCSkKKwkJX19maWVsZCgJaW50LAkJcmVmY250CQkpCisJCV9fc3RyaW5nKAluYW1lLAkJbW9kLT5uYW1lCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmlwCT0gaXA7CisJCV9fZW50cnktPnJlZmNudAk9IHJlZmNudDsKKwkJX19hc3NpZ25fc3RyKG5hbWUsIG1vZC0+bmFtZSk7CisJKSwKKworCVRQX3ByaW50aygiJXMgY2FsbF9zaXRlPSVwZiByZWZjbnQ9JWQiLAorCQkgIF9fZ2V0X3N0cihuYW1lKSwgKHZvaWQgKilfX2VudHJ5LT5pcCwgX19lbnRyeS0+cmVmY250KQorKTsKKworVFJBQ0VfRVZFTlQobW9kdWxlX3JlcXVlc3QsCisKKwlUUF9QUk9UTyhjaGFyICpuYW1lLCBib29sIHdhaXQsIHVuc2lnbmVkIGxvbmcgaXApLAorCisJVFBfQVJHUyhuYW1lLCB3YWl0LCBpcCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlib29sLAkJd2FpdAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlpcAkJKQorCQlfX3N0cmluZygJbmFtZSwJCW5hbWUJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPndhaXQJPSB3YWl0OworCQlfX2VudHJ5LT5pcAk9IGlwOworCQlfX2Fzc2lnbl9zdHIobmFtZSwgbmFtZSk7CisJKSwKKworCVRQX3ByaW50aygiJXMgd2FpdD0lZCBjYWxsX3NpdGU9JXBmIiwKKwkJICBfX2dldF9zdHIobmFtZSksIChpbnQpX19lbnRyeS0+d2FpdCwgKHZvaWQgKilfX2VudHJ5LT5pcCkKKyk7CisKKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLworCisjZW5kaWYgLyogX1RSQUNFX01PRFVMRV9IICovCisKKy8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY2hlZC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NoZWQuaAppbmRleCA4OTQ5YmI3Li5iNDhmMWFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY2hlZC5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NjaGVkLmgKQEAgLTk0LDYgKzk0LDcgQEAKIAkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKIAkJX19maWVsZCgJaW50LAlwcmlvCQkJKQogCQlfX2ZpZWxkKAlpbnQsCXN1Y2Nlc3MJCQkpCisJCV9fZmllbGQoCWludCwJY3B1CQkJKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTEwMSwxMSArMTAyLDEyIEBACiAJCV9fZW50cnktPnBpZAkJPSBwLT5waWQ7CiAJCV9fZW50cnktPnByaW8JCT0gcC0+cHJpbzsKIAkJX19lbnRyeS0+c3VjY2Vzcwk9IHN1Y2Nlc3M7CisJCV9fZW50cnktPmNwdQkJPSB0YXNrX2NwdShwKTsKIAkpLAogCi0JVFBfcHJpbnRrKCJ0YXNrICVzOiVkIFslZF0gc3VjY2Vzcz0lZCIsCisJVFBfcHJpbnRrKCJ0YXNrICVzOiVkIFslZF0gc3VjY2Vzcz0lZCBbJTAzZF0iLAogCQkgIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwgX19lbnRyeS0+cHJpbywKLQkJICBfX2VudHJ5LT5zdWNjZXNzKQorCQkgIF9fZW50cnktPnN1Y2Nlc3MsIF9fZW50cnktPmNwdSkKICk7CiAKIC8qCkBAIC0xMjUsNiArMTI3LDcgQEAKIAkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKIAkJX19maWVsZCgJaW50LAlwcmlvCQkJKQogCQlfX2ZpZWxkKAlpbnQsCXN1Y2Nlc3MJCQkpCisJCV9fZmllbGQoCWludCwJY3B1CQkJKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTEzMiwxMSArMTM1LDEyIEBACiAJCV9fZW50cnktPnBpZAkJPSBwLT5waWQ7CiAJCV9fZW50cnktPnByaW8JCT0gcC0+cHJpbzsKIAkJX19lbnRyeS0+c3VjY2Vzcwk9IHN1Y2Nlc3M7CisJCV9fZW50cnktPmNwdQkJPSB0YXNrX2NwdShwKTsKIAkpLAogCi0JVFBfcHJpbnRrKCJ0YXNrICVzOiVkIFslZF0gc3VjY2Vzcz0lZCIsCisJVFBfcHJpbnRrKCJ0YXNrICVzOiVkIFslZF0gc3VjY2Vzcz0lZCBbJTAzZF0iLAogCQkgIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwgX19lbnRyeS0+cHJpbywKLQkJICBfX2VudHJ5LT5zdWNjZXNzKQorCQkgIF9fZW50cnktPnN1Y2Nlc3MsIF9fZW50cnktPmNwdSkKICk7CiAKIC8qCkBAIC0zNDAsNiArMzQ0LDEwMSBAQAogCQkgIF9fZW50cnktPnNpZywgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkKQogKTsKIAorLyoKKyAqIFhYWCB0aGUgYmVsb3cgc2NoZWRfc3RhdCB0cmFjZXBvaW50cyBvbmx5IGFwcGx5IHRvIFNDSEVEX09USEVSL0JBVENIL0lETEUKKyAqICAgICBhZGRpbmcgc2NoZWRfc3RhdCBzdXBwb3J0IHRvIFNDSEVEX0ZJRk8vUlIgd291bGQgYmUgd2VsY29tZS4KKyAqLworCisvKgorICogVHJhY2Vwb2ludCBmb3IgYWNjb3VudGluZyB3YWl0IHRpbWUgKHRpbWUgdGhlIHRhc2sgaXMgcnVubmFibGUKKyAqIGJ1dCBub3QgYWN0dWFsbHkgcnVubmluZyBkdWUgdG8gc2NoZWR1bGVyIGNvbnRlbnRpb24pLgorICovCitUUkFDRV9FVkVOVChzY2hlZF9zdGF0X3dhaXQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdTY0IGRlbGF5KSwKKworCVRQX0FSR1ModHNrLCBkZWxheSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2FycmF5KCBjaGFyLAljb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCggcGlkX3QsCXBpZAkJCSkKKwkJX19maWVsZCggdTY0LAlkZWxheQkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5jb21tLCB0c2stPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5waWQJPSB0c2stPnBpZDsKKwkJX19lbnRyeS0+ZGVsYXkJPSBkZWxheTsKKwkpCisJVFBfcGVyZl9hc3NpZ24oCisJCV9fcGVyZl9jb3VudChkZWxheSk7CisJKSwKKworCVRQX3ByaW50aygidGFzazogJXM6JWQgd2FpdDogJUx1IFtuc10iLAorCQkJX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5kZWxheSkKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBhY2NvdW50aW5nIHNsZWVwIHRpbWUgKHRpbWUgdGhlIHRhc2sgaXMgbm90IHJ1bm5hYmxlLAorICogaW5jbHVkaW5nIGlvd2FpdCwgc2VlIGJlbG93KS4KKyAqLworVFJBQ0VfRVZFTlQoc2NoZWRfc3RhdF9zbGVlcCwKKworCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZGVsYXkpLAorCisJVFBfQVJHUyh0c2ssIGRlbGF5KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoIGNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKCBwaWRfdCwJcGlkCQkJKQorCQlfX2ZpZWxkKCB1NjQsCWRlbGF5CQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHRzay0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPnBpZAk9IHRzay0+cGlkOworCQlfX2VudHJ5LT5kZWxheQk9IGRlbGF5OworCSkKKwlUUF9wZXJmX2Fzc2lnbigKKwkJX19wZXJmX2NvdW50KGRlbGF5KTsKKwkpLAorCisJVFBfcHJpbnRrKCJ0YXNrOiAlczolZCBzbGVlcDogJUx1IFtuc10iLAorCQkJX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5kZWxheSkKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBhY2NvdW50aW5nIGlvd2FpdCB0aW1lICh0aW1lIHRoZSB0YXNrIGlzIG5vdCBydW5uYWJsZQorICogZHVlIHRvIHdhaXRpbmcgb24gSU8gdG8gY29tcGxldGUpLgorICovCitUUkFDRV9FVkVOVChzY2hlZF9zdGF0X2lvd2FpdCwKKworCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1NjQgZGVsYXkpLAorCisJVFBfQVJHUyh0c2ssIGRlbGF5KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoIGNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKCBwaWRfdCwJcGlkCQkJKQorCQlfX2ZpZWxkKCB1NjQsCWRlbGF5CQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHRzay0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPnBpZAk9IHRzay0+cGlkOworCQlfX2VudHJ5LT5kZWxheQk9IGRlbGF5OworCSkKKwlUUF9wZXJmX2Fzc2lnbigKKwkJX19wZXJmX2NvdW50KGRlbGF5KTsKKwkpLAorCisJVFBfcHJpbnRrKCJ0YXNrOiAlczolZCBpb3dhaXQ6ICVMdSBbbnNdIiwKKwkJCV9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpX19lbnRyeS0+ZGVsYXkpCispOworCiAjZW5kaWYgLyogX1RSQUNFX1NDSEVEX0ggKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9za2IuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NrYi5oCmluZGV4IGU0OTk4NjNiLi40YjJiZTZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9za2IuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9za2IuaApAQCAtNSw2ICs1LDcgQEAKICNkZWZpbmUgX1RSQUNFX1NLQl9ICiAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAKIC8qCkBAIC0zNCw2ICszNSwyNSBAQAogCQlfX2VudHJ5LT5za2JhZGRyLCBfX2VudHJ5LT5wcm90b2NvbCwgX19lbnRyeS0+bG9jYXRpb24pCiApOwogCitUUkFDRV9FVkVOVChza2JfY29weV9kYXRhZ3JhbV9pb3ZlYywKKworCVRQX1BST1RPKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pLAorCisJVFBfQVJHUyhza2IsIGxlbiksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAljb25zdCB2b2lkICosCQlza2JhZGRyCQkpCisJCV9fZmllbGQoCWludCwJCQlsZW4JCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnNrYmFkZHIgPSBza2I7CisJCV9fZW50cnktPmxlbiA9IGxlbjsKKwkpLAorCisJVFBfcHJpbnRrKCJza2JhZGRyPSVwIGxlbj0lZCIsIF9fZW50cnktPnNrYmFkZHIsIF9fZW50cnktPmxlbikKKyk7CisKICNlbmRpZiAvKiBfVFJBQ0VfU0tCX0ggKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zeXNjYWxscy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc3lzY2FsbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTdkZmYyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc3lzY2FsbHMuaApAQCAtMCwwICsxLDcwIEBACisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBzeXNjYWxscworCisjaWYgIWRlZmluZWQoX1RSQUNFX0VWRU5UU19TWVNDQUxMU19IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVFJBQ0VfRVZFTlRTX1NZU0NBTExTX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzY2FsbC5oPgorCisKKyNpZmRlZiBDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTCisKK2V4dGVybiB2b2lkIHN5c2NhbGxfcmVnZnVuYyh2b2lkKTsKK2V4dGVybiB2b2lkIHN5c2NhbGxfdW5yZWdmdW5jKHZvaWQpOworCitUUkFDRV9FVkVOVF9GTihzeXNfZW50ZXIsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBpZCksCisKKwlUUF9BUkdTKHJlZ3MsIGlkKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWxvbmcsCQlpZAkJKQorCQlfX2FycmF5KAl1bnNpZ25lZCBsb25nLAlhcmdzLAk2CSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmlkCT0gaWQ7CisJCXN5c2NhbGxfZ2V0X2FyZ3VtZW50cyhjdXJyZW50LCByZWdzLCAwLCA2LCBfX2VudHJ5LT5hcmdzKTsKKwkpLAorCisJVFBfcHJpbnRrKCJOUiAlbGQgKCVseCwgJWx4LCAlbHgsICVseCwgJWx4LCAlbHgpIiwKKwkJICBfX2VudHJ5LT5pZCwKKwkJICBfX2VudHJ5LT5hcmdzWzBdLCBfX2VudHJ5LT5hcmdzWzFdLCBfX2VudHJ5LT5hcmdzWzJdLAorCQkgIF9fZW50cnktPmFyZ3NbM10sIF9fZW50cnktPmFyZ3NbNF0sIF9fZW50cnktPmFyZ3NbNV0pLAorCisJc3lzY2FsbF9yZWdmdW5jLCBzeXNjYWxsX3VucmVnZnVuYworKTsKKworVFJBQ0VfRVZFTlRfRk4oc3lzX2V4aXQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyByZXQpLAorCisJVFBfQVJHUyhyZWdzLCByZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJbG9uZywJaWQJKQorCQlfX2ZpZWxkKAlsb25nLAlyZXQJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+aWQJPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCByZWdzKTsKKwkJX19lbnRyeS0+cmV0CT0gcmV0OworCSksCisKKwlUUF9wcmludGsoIk5SICVsZCA9ICVsZCIsCisJCSAgX19lbnRyeS0+aWQsIF9fZW50cnktPnJldCksCisKKwlzeXNjYWxsX3JlZ2Z1bmMsIHN5c2NhbGxfdW5yZWdmdW5jCispOworCisjZW5kaWYgLyogQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUyAqLworCisjZW5kaWYgLyogX1RSQUNFX0VWRU5UU19TWVNDQUxMU19IICovCisKKy8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAppbmRleCBmNjRmYmFhLi4zMDhiYWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKQEAgLTIxLDExICsyMSwxNCBAQAogI3VuZGVmIF9fZmllbGQKICNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQkJdHlwZQlpdGVtOwogCisjdW5kZWYgX19maWVsZF9leHQKKyNkZWZpbmUgX19maWVsZF9leHQodHlwZSwgaXRlbSwgZmlsdGVyX3R5cGUpCXR5cGUJaXRlbTsKKwogI3VuZGVmIF9fYXJyYXkKICNkZWZpbmUgX19hcnJheSh0eXBlLCBpdGVtLCBsZW4pCXR5cGUJaXRlbVtsZW5dOwogCiAjdW5kZWYgX19keW5hbWljX2FycmF5Ci0jZGVmaW5lIF9fZHluYW1pY19hcnJheSh0eXBlLCBpdGVtLCBsZW4pIHVuc2lnbmVkIHNob3J0IF9fZGF0YV9sb2NfIyNpdGVtOworI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSwgbGVuKSB1MzIgX19kYXRhX2xvY18jI2l0ZW07CiAKICN1bmRlZiBfX3N0cmluZwogI2RlZmluZSBfX3N0cmluZyhpdGVtLCBzcmMpIF9fZHluYW1pY19hcnJheShjaGFyLCBpdGVtLCAtMSkKQEAgLTQyLDYgKzQ1LDE2IEBACiAJfTsJCQkJCQkJXAogCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfIyNuYW1lCiAKKyN1bmRlZiBfX2NwcGFyZworI2RlZmluZSBfX2NwcGFyZyhhcmcuLi4pIGFyZworCisvKiBDYWxsYmFja3MgYXJlIG1lYW5pbmdsZXNzIHRvIGZ0cmFjZS4gKi8KKyN1bmRlZiBUUkFDRV9FVkVOVF9GTgorI2RlZmluZSBUUkFDRV9FVkVOVF9GTihuYW1lLCBwcm90bywgYXJncywgdHN0cnVjdCwJCQlcCisJCWFzc2lnbiwgcHJpbnQsIHJlZywgdW5yZWcpCQkJCVwKKwlUUkFDRV9FVkVOVChuYW1lLCBfX2NwcGFyZyhwcm90byksIF9fY3BwYXJnKGFyZ3MpLAkJXAorCQlfX2NwcGFyZyh0c3RydWN0KSwgX19jcHBhcmcoYXNzaWduKSwgX19jcHBhcmcocHJpbnQpKQlcCisKICNpbmNsdWRlIFRSQUNFX0lOQ0xVREUoVFJBQ0VfSU5DTFVERV9GSUxFKQogCiAKQEAgLTUxLDIzICs2NCwyNyBAQAogICogSW5jbHVkZSB0aGUgZm9sbG93aW5nOgogICoKICAqIHN0cnVjdCBmdHJhY2VfZGF0YV9vZmZzZXRzXzxjYWxsPiB7Ci0gKglpbnQJCQkJPGl0ZW0xPjsKLSAqCWludAkJCQk8aXRlbTI+OworICoJdTMyCQkJCTxpdGVtMT47CisgKgl1MzIJCQkJPGl0ZW0yPjsKICAqCVsuLi5dCiAgKiB9OwogICoKLSAqIFRoZSBfX2R5bmFtaWNfYXJyYXkoKSBtYWNybyB3aWxsIGNyZWF0ZSBlYWNoIGludCA8aXRlbT4sIHRoaXMgaXMKKyAqIFRoZSBfX2R5bmFtaWNfYXJyYXkoKSBtYWNybyB3aWxsIGNyZWF0ZSBlYWNoIHUzMiA8aXRlbT4sIHRoaXMgaXMKICAqIHRvIGtlZXAgdGhlIG9mZnNldCBvZiBlYWNoIGFycmF5IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZXZlbnQuCisgKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBpcyBhbHNvIGVuY29kZWQsIGluIHRoZSBoaWdoZXIgMTYgYml0cyBvZiA8aXRlbT4uCiAgKi8KIAogI3VuZGVmIF9fZmllbGQKLSNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKTsKKyNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQorCisjdW5kZWYgX19maWVsZF9leHQKKyNkZWZpbmUgX19maWVsZF9leHQodHlwZSwgaXRlbSwgZmlsdGVyX3R5cGUpCiAKICN1bmRlZiBfX2FycmF5CiAjZGVmaW5lIF9fYXJyYXkodHlwZSwgaXRlbSwgbGVuKQogCiAjdW5kZWYgX19keW5hbWljX2FycmF5Ci0jZGVmaW5lIF9fZHluYW1pY19hcnJheSh0eXBlLCBpdGVtLCBsZW4pCWludCBpdGVtOworI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSwgbGVuKQl1MzIgaXRlbTsKIAogI3VuZGVmIF9fc3RyaW5nCiAjZGVmaW5lIF9fc3RyaW5nKGl0ZW0sIHNyYykgX19keW5hbWljX2FycmF5KGNoYXIsIGl0ZW0sIC0xKQpAQCAtMTA5LDYgKzEyNiw5IEBACiAJaWYgKCFyZXQpCQkJCQkJCVwKIAkJcmV0dXJuIDA7CiAKKyN1bmRlZiBfX2ZpZWxkX2V4dAorI2RlZmluZSBfX2ZpZWxkX2V4dCh0eXBlLCBpdGVtLCBmaWx0ZXJfdHlwZSkJX19maWVsZCh0eXBlLCBpdGVtKQorCiAjdW5kZWYgX19hcnJheQogI2RlZmluZSBfX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJCQkJCQlcCiAJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiWyIgI2xlbiAiXTtcdCIJXApAQCAtMTIwLDcgKzE0MCw3IEBACiAKICN1bmRlZiBfX2R5bmFtaWNfYXJyYXkKICNkZWZpbmUgX19keW5hbWljX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJCQkJICAgICAgIFwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOl9fZGF0YV9sb2MgIiAjaXRlbSAiO1x0IgkgICAgICAgXAorCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6X19kYXRhX2xvYyAiICN0eXBlICJbXSAiICNpdGVtICI7XHQiXAogCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1xuIiwJCSAgICAgICBcCiAJCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLAkgICAgICAgXAogCQkJCQlfX2RhdGFfbG9jXyMjaXRlbSksCQkgICAgICAgXApAQCAtMTUwLDcgKzE3MCw4IEBACiAjdW5kZWYgVFJBQ0VfRVZFTlQKICNkZWZpbmUgVFJBQ0VfRVZFTlQoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGZ1bmMsIHByaW50KQkJXAogc3RhdGljIGludAkJCQkJCQkJXAotZnRyYWNlX2Zvcm1hdF8jI2NhbGwoc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAorZnRyYWNlX2Zvcm1hdF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQsCQkJXAorCQkgICAgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQkJCQlcCiB7CQkJCQkJCQkJXAogCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCBmaWVsZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKTsJCVwKIAlpbnQgcmV0ID0gMDsJCQkJCQkJXApAQCAtMjEwLDcgKzIzMSw3IEBACiAKICN1bmRlZiBfX2dldF9keW5hbWljX2FycmF5CiAjZGVmaW5lIF9fZ2V0X2R5bmFtaWNfYXJyYXkoZmllbGQpCVwKLQkJKCh2b2lkICopX19lbnRyeSArIF9fZW50cnktPl9fZGF0YV9sb2NfIyNmaWVsZCkKKwkJKCh2b2lkICopX19lbnRyeSArIChfX2VudHJ5LT5fX2RhdGFfbG9jXyMjZmllbGQgJiAweGZmZmYpKQogCiAjdW5kZWYgX19nZXRfc3RyCiAjZGVmaW5lIF9fZ2V0X3N0cihmaWVsZCkgKGNoYXIgKilfX2dldF9keW5hbWljX2FycmF5KGZpZWxkKQpAQCAtMjYzLDI4ICsyODQsMzMgQEAKIAkKICNpbmNsdWRlIFRSQUNFX0lOQ0xVREUoVFJBQ0VfSU5DTFVERV9GSUxFKQogCi0jdW5kZWYgX19maWVsZAotI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQkJXAorI3VuZGVmIF9fZmllbGRfZXh0CisjZGVmaW5lIF9fZmllbGRfZXh0KHR5cGUsIGl0ZW0sIGZpbHRlcl90eXBlKQkJCQlcCiAJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICN0eXBlLCAjaXRlbSwJCVwKIAkJCQkgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCQlcCi0JCQkJIHNpemVvZihmaWVsZC5pdGVtKSwgaXNfc2lnbmVkX3R5cGUodHlwZSkpOwlcCisJCQkJIHNpemVvZihmaWVsZC5pdGVtKSwJCQlcCisJCQkJIGlzX3NpZ25lZF90eXBlKHR5cGUpLCBmaWx0ZXJfdHlwZSk7CVwKIAlpZiAocmV0KQkJCQkJCQlcCiAJCXJldHVybiByZXQ7CiAKKyN1bmRlZiBfX2ZpZWxkCisjZGVmaW5lIF9fZmllbGQodHlwZSwgaXRlbSkJX19maWVsZF9leHQodHlwZSwgaXRlbSwgRklMVEVSX09USEVSKQorCiAjdW5kZWYgX19hcnJheQogI2RlZmluZSBfX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJCQkJCVwKIAlCVUlMRF9CVUdfT04obGVuID4gTUFYX0ZJTFRFUl9TVFJfVkFMKTsJCQkJXAogCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCAjdHlwZSAiWyIgI2xlbiAiXSIsICNpdGVtLAlcCiAJCQkJIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAotCQkJCSBzaXplb2YoZmllbGQuaXRlbSksIDApOwkJXAorCQkJCSBzaXplb2YoZmllbGQuaXRlbSksIDAsIEZJTFRFUl9PVEhFUik7CVwKIAlpZiAocmV0KQkJCQkJCQlcCiAJCXJldHVybiByZXQ7CiAKICN1bmRlZiBfX2R5bmFtaWNfYXJyYXkKICNkZWZpbmUgX19keW5hbWljX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJCQkJICAgICAgIFwKLQlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgIl9fZGF0YV9sb2MiICJbIiAjdHlwZSAiXSIsICNpdGVtLFwKLQkJCQlvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBfX2RhdGFfbG9jXyMjaXRlbSksICAgIFwKLQkJCQkgc2l6ZW9mKGZpZWxkLl9fZGF0YV9sb2NfIyNpdGVtKSwgMCk7CisJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICJfX2RhdGFfbG9jICIgI3R5cGUgIltdIiwgI2l0ZW0sICBcCisJCQkJIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIF9fZGF0YV9sb2NfIyNpdGVtKSwgICBcCisJCQkJIHNpemVvZihmaWVsZC5fX2RhdGFfbG9jXyMjaXRlbSksIDAsCSAgICAgICBcCisJCQkJIEZJTFRFUl9PVEhFUik7CiAKICN1bmRlZiBfX3N0cmluZwogI2RlZmluZSBfX3N0cmluZyhpdGVtLCBzcmMpIF9fZHluYW1pY19hcnJheShjaGFyLCBpdGVtLCAtMSkKQEAgLTI5MiwxNyArMzE4LDE0IEBACiAjdW5kZWYgVFJBQ0VfRVZFTlQKICNkZWZpbmUgVFJBQ0VfRVZFTlQoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGZ1bmMsIHByaW50KQkJXAogaW50CQkJCQkJCQkJXAotZnRyYWNlX2RlZmluZV9maWVsZHNfIyNjYWxsKHZvaWQpCQkJCQlcCitmdHJhY2VfZGVmaW5lX2ZpZWxkc18jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsKQlcCiB7CQkJCQkJCQkJXAogCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCBmaWVsZDsJCQkJCVwKLQlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwgPSAmZXZlbnRfIyNjYWxsOwkJXAogCWludCByZXQ7CQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlfX2NvbW1vbl9maWVsZChpbnQsIHR5cGUsIDEpOwkJCQkJXAotCV9fY29tbW9uX2ZpZWxkKHVuc2lnbmVkIGNoYXIsIGZsYWdzLCAwKTsJCQlcCi0JX19jb21tb25fZmllbGQodW5zaWduZWQgY2hhciwgcHJlZW1wdF9jb3VudCwgMCk7CQlcCi0JX19jb21tb25fZmllbGQoaW50LCBwaWQsIDEpOwkJCQkJXAotCV9fY29tbW9uX2ZpZWxkKGludCwgdGdpZCwgMSk7CQkJCQlcCisJcmV0ID0gdHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHMoZXZlbnRfY2FsbCk7CQkJXAorCWlmIChyZXQpCQkJCQkJCVwKKwkJcmV0dXJuIHJldDsJCQkJCQlcCiAJCQkJCQkJCQlcCiAJdHN0cnVjdDsJCQkJCQkJXAogCQkJCQkJCQkJXApAQCAtMzIxLDYgKzM0NCw5IEBACiAjdW5kZWYgX19maWVsZAogI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCiAKKyN1bmRlZiBfX2ZpZWxkX2V4dAorI2RlZmluZSBfX2ZpZWxkX2V4dCh0eXBlLCBpdGVtLCBmaWx0ZXJfdHlwZSkKKwogI3VuZGVmIF9fYXJyYXkKICNkZWZpbmUgX19hcnJheSh0eXBlLCBpdGVtLCBsZW4pCiAKQEAgLTMyOCw2ICszNTQsNyBAQAogI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQlcCiAJX19kYXRhX29mZnNldHMtPml0ZW0gPSBfX2RhdGFfc2l6ZSArCQkJCVwKIAkJCSAgICAgICBvZmZzZXRvZih0eXBlb2YoKmVudHJ5KSwgX19kYXRhKTsJXAorCV9fZGF0YV9vZmZzZXRzLT5pdGVtIHw9IChsZW4gKiBzaXplb2YodHlwZSkpIDw8IDE2OwkJXAogCV9fZGF0YV9zaXplICs9IChsZW4pICogc2l6ZW9mKHR5cGUpOwogCiAjdW5kZWYgX19zdHJpbmcKQEAgLTQzMywxMyArNDYwLDE1IEBACiAgKiB7CiAgKglzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogICoJc3RydWN0IGZ0cmFjZV9yYXdfPGNhbGw+ICplbnRyeTsgPC0tIGRlZmluZWQgaW4gc3RhZ2UgMQorICoJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7CiAgKgl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKICAqCWludCBwYzsKICAqCiAgKglsb2NhbF9zYXZlX2ZsYWdzKGlycV9mbGFncyk7CiAgKglwYyA9IHByZWVtcHRfY291bnQoKTsKICAqCi0gKglldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZShldmVudF88Y2FsbD4uaWQsCisgKglldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmYnVmZmVyLAorICoJCQkJICBldmVudF88Y2FsbD4uaWQsCiAgKgkJCQkgIHNpemVvZihzdHJ1Y3QgZnRyYWNlX3Jhd188Y2FsbD4pLAogICoJCQkJICBpcnFfZmxhZ3MsIHBjKTsKICAqCWlmICghZXZlbnQpCkBAIC00NDksNyArNDc4LDcgQEAKICAqCTxhc3NpZ24+OyAgPC0tIEhlcmUgd2UgYXNzaWduIHRoZSBlbnRyaWVzIGJ5IHRoZSBfX2ZpZWxkIGFuZAogICoJCQlfX2FycmF5IG1hY3Jvcy4KICAqCi0gKgl0cmFjZV9jdXJyZW50X2J1ZmZlcl91bmxvY2tfY29tbWl0KGV2ZW50LCBpcnFfZmxhZ3MsIHBjKTsKKyAqCXRyYWNlX2N1cnJlbnRfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzLCBwYyk7CiAgKiB9CiAgKgogICogc3RhdGljIGludCBmdHJhY2VfcmF3X3JlZ19ldmVudF88Y2FsbD4odm9pZCkKQEAgLTU0MSw2ICs1NzAsNyBAQAogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCA9ICZldmVudF8jI2NhbGw7CQlcCiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsJCQkJXAogCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqZW50cnk7CQkJCVwKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsJCQkJCVwKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsJCQkJCVwKIAlpbnQgX19kYXRhX3NpemU7CQkJCQkJXAogCWludCBwYzsJCQkJCQkJCVwKQEAgLTU1MCw3ICs1ODAsOCBAQAogCQkJCQkJCQkJXAogCV9fZGF0YV9zaXplID0gZnRyYWNlX2dldF9vZmZzZXRzXyMjY2FsbCgmX19kYXRhX29mZnNldHMsIGFyZ3MpOyBcCiAJCQkJCQkJCQlcCi0JZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoZXZlbnRfIyNjYWxsLmlkLAlcCisJZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoJmJ1ZmZlciwJCVwKKwkJCQkgZXZlbnRfIyNjYWxsLmlkLAkJCVwKIAkJCQkgc2l6ZW9mKCplbnRyeSkgKyBfX2RhdGFfc2l6ZSwJCVwKIAkJCQkgaXJxX2ZsYWdzLCBwYyk7CQkJXAogCWlmICghZXZlbnQpCQkJCQkJCVwKQEAgLTU2MiwxMSArNTkzLDEyIEBACiAJCQkJCQkJCQlcCiAJeyBhc3NpZ247IH0JCQkJCQkJXAogCQkJCQkJCQkJXAotCWlmICghZmlsdGVyX2N1cnJlbnRfY2hlY2tfZGlzY2FyZChldmVudF9jYWxsLCBlbnRyeSwgZXZlbnQpKQlcCi0JCXRyYWNlX25vd2FrZV9idWZmZXJfdW5sb2NrX2NvbW1pdChldmVudCwgaXJxX2ZsYWdzLCBwYyk7IFwKKwlpZiAoIWZpbHRlcl9jdXJyZW50X2NoZWNrX2Rpc2NhcmQoYnVmZmVyLCBldmVudF9jYWxsLCBlbnRyeSwgZXZlbnQpKSBcCisJCXRyYWNlX25vd2FrZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsCQlcCisJCQkJCQkgIGV2ZW50LCBpcnFfZmxhZ3MsIHBjKTsgXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBpbnQgZnRyYWNlX3Jhd19yZWdfZXZlbnRfIyNjYWxsKHZvaWQpCQkJCVwKK3N0YXRpYyBpbnQgZnRyYWNlX3Jhd19yZWdfZXZlbnRfIyNjYWxsKHZvaWQgKnB0cikJCQlcCiB7CQkJCQkJCQkJXAogCWludCByZXQ7CQkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTU3Nyw3ICs2MDksNyBAQAogCXJldHVybiByZXQ7CQkJCQkJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgdm9pZCBmdHJhY2VfcmF3X3VucmVnX2V2ZW50XyMjY2FsbCh2b2lkKQkJCQlcCitzdGF0aWMgdm9pZCBmdHJhY2VfcmF3X3VucmVnX2V2ZW50XyMjY2FsbCh2b2lkICpwdHIpCQkJXAogewkJCQkJCQkJCVwKIAl1bnJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbCk7CQlcCiB9CQkJCQkJCQkJXApAQCAtNTk1LDcgKzYyNyw2IEBACiAJCXJldHVybiAtRU5PREVWOwkJCQkJCVwKIAlldmVudF8jI2NhbGwuaWQgPSBpZDsJCQkJCQlcCiAJSU5JVF9MSVNUX0hFQUQoJmV2ZW50XyMjY2FsbC5maWVsZHMpOwkJCQlcCi0JaW5pdF9wcmVkcygmZXZlbnRfIyNjYWxsKTsJCQkJCVwKIAlyZXR1cm4gMDsJCQkJCQkJXAogfQkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oIGIvaW5jbHVkZS90cmFjZS9zeXNjYWxsLmgKaW5kZXggOGNmZTUxNS4uNWRjMjgzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9zeXNjYWxsLmgKKysrIGIvaW5jbHVkZS90cmFjZS9zeXNjYWxsLmgKQEAgLTEsOCArMSwxMyBAQAogI2lmbmRlZiBfVFJBQ0VfU1lTQ0FMTF9ICiAjZGVmaW5lIF9UUkFDRV9TWVNDQUxMX0gKIAorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2VfZXZlbnQuaD4KKwogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAorCiAvKgogICogQSBzeXNjYWxsIGVudHJ5IGluIHRoZSBmdHJhY2Ugc3lzY2FsbHMgYXJyYXkuCiAgKgpAQCAtMTAsMjYgKzE1LDQ5IEBACiAgKiBAbmJfYXJnczogbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXQgdGFrZXMKICAqIEB0eXBlczogbGlzdCBvZiB0eXBlcyBhcyBzdHJpbmdzCiAgKiBAYXJnczogbGlzdCBvZiBhcmdzIGFzIHN0cmluZ3MgKGFyZ3NbaV0gbWF0Y2hlcyB0eXBlc1tpXSkKKyAqIEBlbnRlcl9pZDogYXNzb2NpYXRlZCBmdHJhY2UgZW50ZXIgZXZlbnQgaWQKKyAqIEBleGl0X2lkOiBhc3NvY2lhdGVkIGZ0cmFjZSBleGl0IGV2ZW50IGlkCisgKiBAZW50ZXJfZXZlbnQ6IGFzc29jaWF0ZWQgc3lzY2FsbF9lbnRlciB0cmFjZSBldmVudAorICogQGV4aXRfZXZlbnQ6IGFzc29jaWF0ZWQgc3lzY2FsbF9leGl0IHRyYWNlIGV2ZW50CiAgKi8KIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIHsKIAljb25zdCBjaGFyCSpuYW1lOwogCWludAkJbmJfYXJnczsKIAljb25zdCBjaGFyCSoqdHlwZXM7CiAJY29uc3QgY2hhcgkqKmFyZ3M7CisJaW50CQllbnRlcl9pZDsKKwlpbnQJCWV4aXRfaWQ7CisKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmVudGVyX2V2ZW50OworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXhpdF9ldmVudDsKIH07CiAKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCi1leHRlcm4gdm9pZCBhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNjYWxsX25yX3RvX21ldGEoaW50IG5yKTsKLWV4dGVybiB2b2lkIHN0YXJ0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKTsKLWV4dGVybiB2b2lkIHN0b3BfZnRyYWNlX3N5c2NhbGxzKHZvaWQpOwotZXh0ZXJuIHZvaWQgZnRyYWNlX3N5c2NhbGxfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIHZvaWQgZnRyYWNlX3N5c2NhbGxfZXhpdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKQkJCXsgfQotc3RhdGljIGlubGluZSB2b2lkIHN0b3BfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCQkJeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX3N5c2NhbGxfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCXsgfQotc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCXsgfQorZXh0ZXJuIGludCBzeXNjYWxsX25hbWVfdG9fbnIoY2hhciAqbmFtZSk7Cit2b2lkIHNldF9zeXNjYWxsX2VudGVyX2lkKGludCBudW0sIGludCBpZCk7Cit2b2lkIHNldF9zeXNjYWxsX2V4aXRfaWQoaW50IG51bSwgaW50IGlkKTsKK2V4dGVybiBzdHJ1Y3QgdHJhY2VfZXZlbnQgZXZlbnRfc3lzY2FsbF9lbnRlcjsKK2V4dGVybiBzdHJ1Y3QgdHJhY2VfZXZlbnQgZXZlbnRfc3lzY2FsbF9leGl0OworZXh0ZXJuIGludCByZWdfZXZlbnRfc3lzY2FsbF9lbnRlcih2b2lkICpwdHIpOworZXh0ZXJuIHZvaWQgdW5yZWdfZXZlbnRfc3lzY2FsbF9lbnRlcih2b2lkICpwdHIpOworZXh0ZXJuIGludCByZWdfZXZlbnRfc3lzY2FsbF9leGl0KHZvaWQgKnB0cik7CitleHRlcm4gdm9pZCB1bnJlZ19ldmVudF9zeXNjYWxsX2V4aXQodm9pZCAqcHRyKTsKK2V4dGVybiBpbnQgc3lzY2FsbF9lbnRlcl9mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAorCQkJCXN0cnVjdCB0cmFjZV9zZXEgKnMpOworZXh0ZXJuIGludCBzeXNjYWxsX2V4aXRfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKKwkJCQlzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKK2V4dGVybiBpbnQgc3lzY2FsbF9lbnRlcl9kZWZpbmVfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CitleHRlcm4gaW50IHN5c2NhbGxfZXhpdF9kZWZpbmVfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CitlbnVtIHByaW50X2xpbmVfdCBwcmludF9zeXNjYWxsX2VudGVyKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKTsKK2VudW0gcHJpbnRfbGluZV90IHByaW50X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncyk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQoraW50IHJlZ19wcm9mX3N5c2NhbGxfZW50ZXIoY2hhciAqbmFtZSk7Cit2b2lkIHVucmVnX3Byb2Zfc3lzY2FsbF9lbnRlcihjaGFyICpuYW1lKTsKK2ludCByZWdfcHJvZl9zeXNjYWxsX2V4aXQoY2hhciAqbmFtZSk7Cit2b2lkIHVucmVnX3Byb2Zfc3lzY2FsbF9leGl0KGNoYXIgKm5hbWUpOworCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9UUkFDRV9TWVNDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCAzZjdlNjA5Li44ZThiNzZkIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0zMTYsMzggKzMxNiwyOCBAQAogCXByb21wdCAiUkNVIEltcGxlbWVudGF0aW9uIgogCWRlZmF1bHQgVFJFRV9SQ1UKIAotY29uZmlnIENMQVNTSUNfUkNVCi0JYm9vbCAiQ2xhc3NpYyBSQ1UiCi0JaGVscAotCSAgVGhpcyBvcHRpb24gc2VsZWN0cyB0aGUgY2xhc3NpYyBSQ1UgaW1wbGVtZW50YXRpb24gdGhhdCBpcwotCSAgZGVzaWduZWQgZm9yIGJlc3QgcmVhZC1zaWRlIHBlcmZvcm1hbmNlIG9uIG5vbi1yZWFsdGltZQotCSAgc3lzdGVtcy4KLQotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSBhcmUgdW5zdXJlLgotCiBjb25maWcgVFJFRV9SQ1UKIAlib29sICJUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UiCiAJaGVscAogCSAgVGhpcyBvcHRpb24gc2VsZWN0cyB0aGUgUkNVIGltcGxlbWVudGF0aW9uIHRoYXQgaXMKIAkgIGRlc2lnbmVkIGZvciB2ZXJ5IGxhcmdlIFNNUCBzeXN0ZW0gd2l0aCBodW5kcmVkcyBvcgotCSAgdGhvdXNhbmRzIG9mIENQVXMuCisJICB0aG91c2FuZHMgb2YgQ1BVcy4gIEl0IGFsc28gc2NhbGVzIGRvd24gbmljZWx5IHRvCisJICBzbWFsbGVyIHN5c3RlbXMuCiAKLWNvbmZpZyBQUkVFTVBUX1JDVQotCWJvb2wgIlByZWVtcHRpYmxlIFJDVSIKK2NvbmZpZyBUUkVFX1BSRUVNUFRfUkNVCisJYm9vbCAiUHJlZW1wdGFibGUgdHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIgogCWRlcGVuZHMgb24gUFJFRU1QVAogCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHJlZHVjZXMgdGhlIGxhdGVuY3kgb2YgdGhlIGtlcm5lbCBieSBtYWtpbmcgY2VydGFpbgotCSAgUkNVIHNlY3Rpb25zIHByZWVtcHRpYmxlLiBOb3JtYWxseSBSQ1UgY29kZSBpcyBub24tcHJlZW1wdGlibGUsIGlmCi0JICB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCB0aGVuIHJlYWQtb25seSBSQ1Ugc2VjdGlvbnMgYmVjb21lCi0JICBwcmVlbXB0aWJsZS4gVGhpcyBoZWxwcyBsYXRlbmN5LCBidXQgbWF5IGV4cG9zZSBidWdzIGR1ZSB0bwotCSAgbm93LW5haXZlIGFzc3VtcHRpb25zIGFib3V0IGVhY2ggUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uCi0JICByZW1haW5pbmcgb24gYSBnaXZlbiBDUFUgdGhyb3VnaCBpdHMgZXhlY3V0aW9uLgorCSAgVGhpcyBvcHRpb24gc2VsZWN0cyB0aGUgUkNVIGltcGxlbWVudGF0aW9uIHRoYXQgaXMKKwkgIGRlc2lnbmVkIGZvciB2ZXJ5IGxhcmdlIFNNUCBzeXN0ZW1zIHdpdGggaHVuZHJlZHMgb3IKKwkgIHRob3VzYW5kcyBvZiBDUFVzLCBidXQgZm9yIHdoaWNoIHJlYWwtdGltZSByZXNwb25zZQorCSAgaXMgYWxzbyByZXF1aXJlZC4KIAogZW5kY2hvaWNlCiAKIGNvbmZpZyBSQ1VfVFJBQ0UKIAlib29sICJFbmFibGUgdHJhY2luZyBmb3IgUkNVIgotCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgUFJFRU1QVF9SQ1UKKwlkZXBlbmRzIG9uIFRSRUVfUkNVIHx8IFRSRUVfUFJFRU1QVF9SQ1UKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBwcm92aWRlcyB0cmFjaW5nIGluIFJDVSB3aGljaCBwcmVzZW50cyBzdGF0cwogCSAgaW4gZGVidWdmcyBmb3IgZGVidWdnaW5nIFJDVSBpbXBsZW1lbnRhdGlvbi4KQEAgLTM1OSw3ICszNDksNyBAQAogCWludCAiVHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIGZhbm91dCB2YWx1ZSIKIAlyYW5nZSAyIDY0IGlmIDY0QklUCiAJcmFuZ2UgMiAzMiBpZiAhNjRCSVQKLQlkZXBlbmRzIG9uIFRSRUVfUkNVCisJZGVwZW5kcyBvbiBUUkVFX1JDVSB8fCBUUkVFX1BSRUVNUFRfUkNVCiAJZGVmYXVsdCA2NCBpZiA2NEJJVAogCWRlZmF1bHQgMzIgaWYgITY0QklUCiAJaGVscApAQCAtMzc0LDcgKzM2NCw3IEBACiAKIGNvbmZpZyBSQ1VfRkFOT1VUX0VYQUNUCiAJYm9vbCAiRGlzYWJsZSB0cmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgYXV0by1iYWxhbmNpbmciCi0JZGVwZW5kcyBvbiBUUkVFX1JDVQorCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVQogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGZvcmNlcyB1c2Ugb2YgdGhlIGV4YWN0IFJDVV9GQU5PVVQgdmFsdWUgc3BlY2lmaWVkLApAQCAtMzg3LDE4ICszNzcsMTIgQEAKIAkgIFNheSBOIGlmIHVuc3VyZS4KIAogY29uZmlnIFRSRUVfUkNVX1RSQUNFCi0JZGVmX2Jvb2wgUkNVX1RSQUNFICYmIFRSRUVfUkNVCisJZGVmX2Jvb2wgUkNVX1RSQUNFICYmICggVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVSApCiAJc2VsZWN0IERFQlVHX0ZTCiAJaGVscAotCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgdHJhY2luZyBmb3IgdGhlIFRSRUVfUkNVIGltcGxlbWVudGF0aW9uLAotCSAgcGVybWl0dGluZyBNYWtlZmlsZSB0byB0cml2aWFsbHkgc2VsZWN0IGtlcm5lbC9yY3V0cmVlX3RyYWNlLmMuCi0KLWNvbmZpZyBQUkVFTVBUX1JDVV9UUkFDRQotCWRlZl9ib29sIFJDVV9UUkFDRSAmJiBQUkVFTVBUX1JDVQotCXNlbGVjdCBERUJVR19GUwotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHRyYWNpbmcgZm9yIHRoZSBQUkVFTVBUX1JDVSBpbXBsZW1lbnRhdGlvbiwKLQkgIHBlcm1pdHRpbmcgTWFrZWZpbGUgdG8gdHJpdmlhbGx5IHNlbGVjdCBrZXJuZWwvcmN1cHJlZW1wdF90cmFjZS5jLgorCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgdHJhY2luZyBmb3IgdGhlIFRSRUVfUkNVIGFuZAorCSAgVFJFRV9QUkVFTVBUX1JDVSBpbXBsZW1lbnRhdGlvbnMsIHBlcm1pdHRpbmcgTWFrZWZpbGUgdG8KKwkgIHRyaXZpYWxseSBzZWxlY3Qga2VybmVsL3JjdXRyZWVfdHJhY2UuYy4KIAogZW5kbWVudSAjICJSQ1UgU3Vic3lzdGVtIgogCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDExZjRmMTQuLjYzOTA0YmIgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC0zNTMsNyArMzUzLDYgQEAKICNkZWZpbmUgc21wX2luaXQoKQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3Blcl9jcHVfYXJlYXModm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfbnJfY3B1X2lkcyh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhjcHVzKSB7IH0KIApAQCAtMzc0LDI5ICszNzMsNiBAQAogCW5yX2NwdV9pZHMgPSBmaW5kX2xhc3RfYml0KGNwdW1hc2tfYml0cyhjcHVfcG9zc2libGVfbWFzayksTlJfQ1BVUykgKyAxOwogfQogCi0jaWZuZGVmIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQQotdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfb2Zmc2V0W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7Ci0KLUVYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBzaXplLCBpOwotCWNoYXIgKnB0cjsKLQl1bnNpZ25lZCBsb25nIG5yX3Bvc3NpYmxlX2NwdXMgPSBudW1fcG9zc2libGVfY3B1cygpOwotCi0JLyogQ29weSBzZWN0aW9uIGZvciBlYWNoIENQVSAod2UgZGlzY2FyZCB0aGUgb3JpZ2luYWwpICovCi0Jc2l6ZSA9IEFMSUdOKFBFUkNQVV9FTk9VR0hfUk9PTSwgUEFHRV9TSVpFKTsKLQlwdHIgPSBhbGxvY19ib290bWVtX3BhZ2VzKHNpemUgKiBucl9wb3NzaWJsZV9jcHVzKTsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCV9fcGVyX2NwdV9vZmZzZXRbaV0gPSBwdHIgLSBfX3Blcl9jcHVfc3RhcnQ7Ci0JCW1lbWNweShwdHIsIF9fcGVyX2NwdV9zdGFydCwgX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCk7Ci0JCXB0ciArPSBzaXplOwotCX0KLX0KLSNlbmRpZiAvKiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgKi8KLQogLyogQ2FsbGVkIGJ5IGJvb3QgcHJvY2Vzc29yIHRvIGFjdGl2YXRlIHRoZSByZXN0LiAqLwogc3RhdGljIHZvaWQgX19pbml0IHNtcF9pbml0KHZvaWQpCiB7CkBAIC00NTEsNiArNDI3LDcgQEAKIHsKIAlpbnQgcGlkOwogCisJcmN1X3NjaGVkdWxlcl9zdGFydGluZygpOwogCWtlcm5lbF90aHJlYWQoa2VybmVsX2luaXQsIE5VTEwsIENMT05FX0ZTIHwgQ0xPTkVfU0lHSEFORCk7CiAJbnVtYV9kZWZhdWx0X3BvbGljeSgpOwogCXBpZCA9IGtlcm5lbF90aHJlYWQoa3RocmVhZGQsIE5VTEwsIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMpOwpAQCAtNDYyLDcgKzQzOSw2IEBACiAJICogYXQgbGVhc3Qgb25jZSB0byBnZXQgdGhpbmdzIG1vdmluZzoKIAkgKi8KIAlpbml0X2lkbGVfYm9vdHVwX3Rhc2soY3VycmVudCk7Ci0JcmN1X3NjaGVkdWxlcl9zdGFydGluZygpOwogCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAlzY2hlZHVsZSgpOwogCXByZWVtcHRfZGlzYWJsZSgpOwpAQCAtNjMxLDcgKzYwNyw2IEBACiAJc29mdGlycV9pbml0KCk7CiAJdGltZWtlZXBpbmdfaW5pdCgpOwogCXRpbWVfaW5pdCgpOwotCXNjaGVkX2Nsb2NrX2luaXQoKTsKIAlwcm9maWxlX2luaXQoKTsKIAlpZiAoIWlycXNfZGlzYWJsZWQoKSkKIAkJcHJpbnRrKEtFUk5fQ1JJVCAic3RhcnRfa2VybmVsKCk6IGJ1ZzogaW50ZXJydXB0cyB3ZXJlICIKQEAgLTY4Miw2ICs2NTcsNyBAQAogCW51bWFfcG9saWN5X2luaXQoKTsKIAlpZiAobGF0ZV90aW1lX2luaXQpCiAJCWxhdGVfdGltZV9pbml0KCk7CisJc2NoZWRfY2xvY2tfaW5pdCgpOwogCWNhbGlicmF0ZV9kZWxheSgpOwogCXBpZG1hcF9pbml0KCk7CiAJYW5vbl92bWFfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IDFiYzQ3MDEuLjMwMTYyYTUgMTAwNjQ0Ci0tLSBhL2lwYy9zaG0uYworKysgYi9pcGMvc2htLmMKQEAgLTQxMCw3ICs0MTAsNyBAQAogCXJldHVybiBlcnJvcjsKIAogbm9faWQ6Ci0JaWYgKHNocC0+bWxvY2tfdXNlcikJLyogc2htZmxnICYgU0hNX0hVR0VUTEIgY2FzZSAqLworCWlmIChpc19maWxlX2h1Z2VwYWdlcyhmaWxlKSAmJiBzaHAtPm1sb2NrX3VzZXIpCiAJCXVzZXJfc2htX3VubG9jayhzaXplLCBzaHAtPm1sb2NrX3VzZXIpOwogCWZwdXQoZmlsZSk7CiBub19maWxlOgpkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IDIwOTNhNjkuLjk2MTM3OWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTgwLDExICs4MCw5IEBACiBvYmotJChDT05GSUdfR0VORVJJQ19IQVJESVJRUykgKz0gaXJxLwogb2JqLSQoQ09ORklHX1NFQ0NPTVApICs9IHNlY2NvbXAubwogb2JqLSQoQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QpICs9IHJjdXRvcnR1cmUubwotb2JqLSQoQ09ORklHX0NMQVNTSUNfUkNVKSArPSByY3VjbGFzc2ljLm8KIG9iai0kKENPTkZJR19UUkVFX1JDVSkgKz0gcmN1dHJlZS5vCi1vYmotJChDT05GSUdfUFJFRU1QVF9SQ1UpICs9IHJjdXByZWVtcHQubworb2JqLSQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpICs9IHJjdXRyZWUubwogb2JqLSQoQ09ORklHX1RSRUVfUkNVX1RSQUNFKSArPSByY3V0cmVlX3RyYWNlLm8KLW9iai0kKENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSkgKz0gcmN1cHJlZW1wdF90cmFjZS5vCiBvYmotJChDT05GSUdfUkVMQVkpICs9IHJlbGF5Lm8KIG9iai0kKENPTkZJR19TWVNDVEwpICs9IHV0c25hbWVfc3lzY3RsLm8KIG9iai0kKENPTkZJR19UQVNLX0RFTEFZX0FDQ1QpICs9IGRlbGF5YWNjdC5vCkBAIC0xMTksNyArMTE3LDcgQEAKIAkkKGNhbGwgaWZfY2hhbmdlZCxnemlwKQogCiBxdWlldF9jbWRfaWtjb25maWdneiA9IElLQ0ZHICAgJEAKLSAgICAgIGNtZF9pa2NvbmZpZ2d6ID0gKGVjaG8gInN0YXRpYyBjb25zdCBjaGFyIGtlcm5lbF9jb25maWdfZGF0YVtdID0gTUFHSUNfU1RBUlQiOyBjYXQgJDwgfCBzY3JpcHRzL2JpbjJjOyBlY2hvICJNQUdJQ19FTkQ7IikgPiAkQAorICAgICAgY21kX2lrY29uZmlnZ3ogPSAoZWNobyAic3RhdGljIGNvbnN0IGNoYXIga2VybmVsX2NvbmZpZ19kYXRhW10gX191c2VkID0gTUFHSUNfU1RBUlQiOyBjYXQgJDwgfCBzY3JpcHRzL2JpbjJjOyBlY2hvICJNQUdJQ19FTkQ7IikgPiAkQAogdGFyZ2V0cyArPSBjb25maWdfZGF0YS5oCiAkKG9iaikvY29uZmlnX2RhdGEuaDogJChvYmopL2NvbmZpZ19kYXRhLmd6IEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsaWtjb25maWdneikKZGlmZiAtLWdpdCBhL2tlcm5lbC9hY2N0LmMgYi9rZXJuZWwvYWNjdC5jCmluZGV4IDlmMzM5MTAuLjlhNDcxNWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hY2N0LmMKKysrIGIva2VybmVsL2FjY3QuYwpAQCAtNDkxLDEzICs0OTEsMTcgQEAKIAl1NjQgcnVuX3RpbWU7CiAJc3RydWN0IHRpbWVzcGVjIHVwdGltZTsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWNvbnN0IHN0cnVjdCBjcmVkICpvcmlnX2NyZWQ7CisKKwkvKiBQZXJmb3JtIGZpbGUgb3BlcmF0aW9ucyBvbiBiZWhhbGYgb2Ygd2hvZXZlciBlbmFibGVkIGFjY291bnRpbmcgKi8KKwlvcmlnX2NyZWQgPSBvdmVycmlkZV9jcmVkcyhmaWxlLT5mX2NyZWQpOwogCiAJLyoKIAkgKiBGaXJzdCBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgZW5vdWdoIGZyZWVfc3BhY2UgdG8gY29udGludWUKIAkgKiB0aGUgcHJvY2VzcyBhY2NvdW50aW5nIHN5c3RlbS4KIAkgKi8KIAlpZiAoIWNoZWNrX2ZyZWVfc3BhY2UoYWNjdCwgZmlsZSkpCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAkvKgogCSAqIEZpbGwgdGhlIGFjY291bnRpbmcgc3RydWN0IHdpdGggdGhlIG5lZWRlZCBpbmZvIGFzIHJlY29yZGVkCkBAIC01NzgsNiArNTgyLDggQEAKIAkJCSAgICAgICBzaXplb2YoYWNjdF90KSwgJmZpbGUtPmZfcG9zKTsKIAljdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0ZTSVpFXS5ybGltX2N1ciA9IGZsaW07CiAJc2V0X2ZzKGZzKTsKK291dDoKKwlyZXZlcnRfY3JlZHMob3JpZ19jcmVkKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwLmMgYi9rZXJuZWwvY2dyb3VwLmMKaW5kZXggYjZlYWRmZS4uYzdlY2U4ZiAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cC5jCisrKyBiL2tlcm5lbC9jZ3JvdXAuYwpAQCAtNjAwLDYgKzYwMCw3IEBACiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cHN0YXRzX29wZXJhdGlvbnM7CiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBjZ3JvdXBfYmFja2luZ19kZXZfaW5mbyA9IHsKKwkubmFtZQkJPSAiY2dyb3VwIiwKIAkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0ssCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1LmMgYi9rZXJuZWwvY3B1LmMKaW5kZXggOGNlMTAwNC4uNmJhMGYxZSAxMDA2NDQKLS0tIGEva2VybmVsL2NwdS5jCisrKyBiL2tlcm5lbC9jcHUuYwpAQCAtNDAxLDYgKzQwMSw3IEBACiAJCQlicmVhazsKIAkJfQogCX0KKwogCWlmICghZXJyb3IpIHsKIAkJQlVHX09OKG51bV9vbmxpbmVfY3B1cygpID4gMSk7CiAJCS8qIE1ha2Ugc3VyZSB0aGUgQ1BVcyB3b24ndCBiZSBlbmFibGVkIGJ5IHNvbWVvbmUgZWxzZSAqLwpAQCAtNDEzLDYgKzQxNCwxNCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAordm9pZCBfX3dlYWsgYXJjaF9lbmFibGVfbm9uYm9vdF9jcHVzX2JlZ2luKHZvaWQpCit7Cit9CisKK3ZvaWQgX193ZWFrIGFyY2hfZW5hYmxlX25vbmJvb3RfY3B1c19lbmQodm9pZCkKK3sKK30KKwogdm9pZCBfX3JlZiBlbmFibGVfbm9uYm9vdF9jcHVzKHZvaWQpCiB7CiAJaW50IGNwdSwgZXJyb3I7CkBAIC00MjQsNiArNDMzLDkgQEAKIAkJZ290byBvdXQ7CiAKIAlwcmludGsoIkVuYWJsaW5nIG5vbi1ib290IENQVXMgLi4uXG4iKTsKKworCWFyY2hfZW5hYmxlX25vbmJvb3RfY3B1c19iZWdpbigpOworCiAJZm9yX2VhY2hfY3B1KGNwdSwgZnJvemVuX2NwdXMpIHsKIAkJZXJyb3IgPSBfY3B1X3VwKGNwdSwgMSk7CiAJCWlmICghZXJyb3IpIHsKQEAgLTQzMiw2ICs0NDQsOSBAQAogCQl9CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVycm9yIHRha2luZyBDUFUlZCB1cDogJWRcbiIsIGNwdSwgZXJyb3IpOwogCX0KKworCWFyY2hfZW5hYmxlX25vbmJvb3RfY3B1c19lbmQoKTsKKwogCWNwdW1hc2tfY2xlYXIoZnJvemVuX2NwdXMpOwogb3V0OgogCWNwdV9tYXBzX3VwZGF0ZV9kb25lKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvY3JlZC5jIGIva2VybmVsL2NyZWQuYwppbmRleCAxYmI0ZDdlLi5kN2Y3YTAxIDEwMDY0NAotLS0gYS9rZXJuZWwvY3JlZC5jCisrKyBiL2tlcm5lbC9jcmVkLmMKQEAgLTE4LDYgKzE4LDE4IEBACiAjaW5jbHVkZSA8bGludXgvY25fcHJvYy5oPgogI2luY2x1ZGUgImNyZWQtaW50ZXJuYWxzLmgiCiAKKyNpZiAwCisjZGVmaW5lIGtkZWJ1ZyhGTVQsIC4uLikgXAorCXByaW50aygiWyUtNS41cyU1dV0gIkZNVCJcbiIsIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCAsIyNfX1ZBX0FSR1NfXykKKyNlbHNlCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSkKK3ZvaWQgbm9fcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworfQorI2RlZmluZSBrZGVidWcoRk1ULCAuLi4pIFwKKwlub19wcmludGsoIlslLTUuNXMlNXVdICJGTVQiXG4iLCBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQgLCMjX19WQV9BUkdTX18pCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpjcmVkX2phcjsKIAogLyoKQEAgLTM2LDYgKzQ4LDEwIEBACiAgKi8KIHN0cnVjdCBjcmVkIGluaXRfY3JlZCA9IHsKIAkudXNhZ2UJCQk9IEFUT01JQ19JTklUKDQpLAorI2lmZGVmIENPTkZJR19ERUJVR19DUkVERU5USUFMUworCS5zdWJzY3JpYmVycwkJPSBBVE9NSUNfSU5JVCgyKSwKKwkubWFnaWMJCQk9IENSRURfTUFHSUMsCisjZW5kaWYKIAkuc2VjdXJlYml0cwkJPSBTRUNVUkVCSVRTX0RFRkFVTFQsCiAJLmNhcF9pbmhlcml0YWJsZQk9IENBUF9JTklUX0lOSF9TRVQsCiAJLmNhcF9wZXJtaXR0ZWQJCT0gQ0FQX0ZVTExfU0VULApAQCAtNDgsNiArNjQsMzEgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIGlubGluZSB2b2lkIHNldF9jcmVkX3N1YnNjcmliZXJzKHN0cnVjdCBjcmVkICpjcmVkLCBpbnQgbikKK3sKKyNpZmRlZiBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMKKwlhdG9taWNfc2V0KCZjcmVkLT5zdWJzY3JpYmVycywgbik7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgcmVhZF9jcmVkX3N1YnNjcmliZXJzKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKQoreworI2lmZGVmIENPTkZJR19ERUJVR19DUkVERU5USUFMUworCXJldHVybiBhdG9taWNfcmVhZCgmY3JlZC0+c3Vic2NyaWJlcnMpOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWx0ZXJfY3JlZF9zdWJzY3JpYmVycyhjb25zdCBzdHJ1Y3QgY3JlZCAqX2NyZWQsIGludCBuKQoreworI2lmZGVmIENPTkZJR19ERUJVR19DUkVERU5USUFMUworCXN0cnVjdCBjcmVkICpjcmVkID0gKHN0cnVjdCBjcmVkICopIF9jcmVkOworCisJYXRvbWljX2FkZChuLCAmY3JlZC0+c3Vic2NyaWJlcnMpOworI2VuZGlmCit9CisKIC8qCiAgKiBEaXNwb3NlIG9mIHRoZSBzaGFyZWQgdGFzayBncm91cCBjcmVkZW50aWFscwogICovCkBAIC04NSwxNSArMTI2LDI5IEBACiB7CiAJc3RydWN0IGNyZWQgKmNyZWQgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgY3JlZCwgcmN1KTsKIAorCWtkZWJ1ZygicHV0X2NyZWRfcmN1KCVwKSIsIGNyZWQpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTCisJaWYgKGNyZWQtPm1hZ2ljICE9IENSRURfTUFHSUNfREVBRCB8fAorCSAgICBhdG9taWNfcmVhZCgmY3JlZC0+dXNhZ2UpICE9IDAgfHwKKwkgICAgcmVhZF9jcmVkX3N1YnNjcmliZXJzKGNyZWQpICE9IDApCisJCXBhbmljKCJDUkVEOiBwdXRfY3JlZF9yY3UoKSBzZWVzICVwIHdpdGgiCisJCSAgICAgICIgbWFnICV4LCBwdXQgJXAsIHVzYWdlICVkLCBzdWJzY3IgJWRcbiIsCisJCSAgICAgIGNyZWQsIGNyZWQtPm1hZ2ljLCBjcmVkLT5wdXRfYWRkciwKKwkJICAgICAgYXRvbWljX3JlYWQoJmNyZWQtPnVzYWdlKSwKKwkJICAgICAgcmVhZF9jcmVkX3N1YnNjcmliZXJzKGNyZWQpKTsKKyNlbHNlCiAJaWYgKGF0b21pY19yZWFkKCZjcmVkLT51c2FnZSkgIT0gMCkKIAkJcGFuaWMoIkNSRUQ6IHB1dF9jcmVkX3JjdSgpIHNlZXMgJXAgd2l0aCB1c2FnZSAlZFxuIiwKIAkJICAgICAgY3JlZCwgYXRvbWljX3JlYWQoJmNyZWQtPnVzYWdlKSk7CisjZW5kaWYKIAogCXNlY3VyaXR5X2NyZWRfZnJlZShjcmVkKTsKIAlrZXlfcHV0KGNyZWQtPnRocmVhZF9rZXlyaW5nKTsKIAlrZXlfcHV0KGNyZWQtPnJlcXVlc3Rfa2V5X2F1dGgpOwogCXJlbGVhc2VfdGdjcmVkKGNyZWQpOwotCXB1dF9ncm91cF9pbmZvKGNyZWQtPmdyb3VwX2luZm8pOworCWlmIChjcmVkLT5ncm91cF9pbmZvKQorCQlwdXRfZ3JvdXBfaW5mbyhjcmVkLT5ncm91cF9pbmZvKTsKIAlmcmVlX3VpZChjcmVkLT51c2VyKTsKIAlrbWVtX2NhY2hlX2ZyZWUoY3JlZF9qYXIsIGNyZWQpOwogfQpAQCAtMTA2LDEyICsxNjEsOTAgQEAKICAqLwogdm9pZCBfX3B1dF9jcmVkKHN0cnVjdCBjcmVkICpjcmVkKQogeworCWtkZWJ1ZygiX19wdXRfY3JlZCglcHslZCwlZH0pIiwgY3JlZCwKKwkgICAgICAgYXRvbWljX3JlYWQoJmNyZWQtPnVzYWdlKSwKKwkgICAgICAgcmVhZF9jcmVkX3N1YnNjcmliZXJzKGNyZWQpKTsKKwogCUJVR19PTihhdG9taWNfcmVhZCgmY3JlZC0+dXNhZ2UpICE9IDApOworI2lmZGVmIENPTkZJR19ERUJVR19DUkVERU5USUFMUworCUJVR19PTihyZWFkX2NyZWRfc3Vic2NyaWJlcnMoY3JlZCkgIT0gMCk7CisJY3JlZC0+bWFnaWMgPSBDUkVEX01BR0lDX0RFQUQ7CisJY3JlZC0+cHV0X2FkZHIgPSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisjZW5kaWYKKwlCVUdfT04oY3JlZCA9PSBjdXJyZW50LT5jcmVkKTsKKwlCVUdfT04oY3JlZCA9PSBjdXJyZW50LT5yZWFsX2NyZWQpOwogCiAJY2FsbF9yY3UoJmNyZWQtPnJjdSwgcHV0X2NyZWRfcmN1KTsKIH0KIEVYUE9SVF9TWU1CT0woX19wdXRfY3JlZCk7CiAKKy8qCisgKiBDbGVhbiB1cCBhIHRhc2sncyBjcmVkZW50aWFscyB3aGVuIGl0IGV4aXRzCisgKi8KK3ZvaWQgZXhpdF9jcmVkcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3QgY3JlZCAqY3JlZDsKKworCWtkZWJ1ZygiZXhpdF9jcmVkcygldSwlcCwlcCx7JWQsJWR9KSIsIHRzay0+cGlkLCB0c2stPnJlYWxfY3JlZCwgdHNrLT5jcmVkLAorCSAgICAgICBhdG9taWNfcmVhZCgmdHNrLT5jcmVkLT51c2FnZSksCisJICAgICAgIHJlYWRfY3JlZF9zdWJzY3JpYmVycyh0c2stPmNyZWQpKTsKKworCWNyZWQgPSAoc3RydWN0IGNyZWQgKikgdHNrLT5yZWFsX2NyZWQ7CisJdHNrLT5yZWFsX2NyZWQgPSBOVUxMOworCXZhbGlkYXRlX2NyZWRzKGNyZWQpOworCWFsdGVyX2NyZWRfc3Vic2NyaWJlcnMoY3JlZCwgLTEpOworCXB1dF9jcmVkKGNyZWQpOworCisJY3JlZCA9IChzdHJ1Y3QgY3JlZCAqKSB0c2stPmNyZWQ7CisJdHNrLT5jcmVkID0gTlVMTDsKKwl2YWxpZGF0ZV9jcmVkcyhjcmVkKTsKKwlhbHRlcl9jcmVkX3N1YnNjcmliZXJzKGNyZWQsIC0xKTsKKwlwdXRfY3JlZChjcmVkKTsKKworCWNyZWQgPSAoc3RydWN0IGNyZWQgKikgdHNrLT5yZXBsYWNlbWVudF9zZXNzaW9uX2tleXJpbmc7CisJaWYgKGNyZWQpIHsKKwkJdHNrLT5yZXBsYWNlbWVudF9zZXNzaW9uX2tleXJpbmcgPSBOVUxMOworCQl2YWxpZGF0ZV9jcmVkcyhjcmVkKTsKKwkJcHV0X2NyZWQoY3JlZCk7CisJfQorfQorCisvKgorICogQWxsb2NhdGUgYmxhbmsgY3JlZGVudGlhbHMsIHN1Y2ggdGhhdCB0aGUgY3JlZGVudGlhbHMgY2FuIGJlIGZpbGxlZCBpbiBhdCBhCisgKiBsYXRlciBkYXRlIHdpdGhvdXQgcmlzayBvZiBFTk9NRU0uCisgKi8KK3N0cnVjdCBjcmVkICpjcmVkX2FsbG9jX2JsYW5rKHZvaWQpCit7CisJc3RydWN0IGNyZWQgKm5ldzsKKworCW5ldyA9IGttZW1fY2FjaGVfemFsbG9jKGNyZWRfamFyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ldykKKwkJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBDT05GSUdfS0VZUworCW5ldy0+dGdjcmVkID0ga3phbGxvYyhzaXplb2YoKm5ldy0+dGdjcmVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXctPnRnY3JlZCkgeworCQlrZnJlZShuZXcpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJYXRvbWljX3NldCgmbmV3LT50Z2NyZWQtPnVzYWdlLCAxKTsKKyNlbmRpZgorCisJYXRvbWljX3NldCgmbmV3LT51c2FnZSwgMSk7CisKKwlpZiAoc2VjdXJpdHlfY3JlZF9hbGxvY19ibGFuayhuZXcsIEdGUF9LRVJORUwpIDwgMCkKKwkJZ290byBlcnJvcjsKKworI2lmZGVmIENPTkZJR19ERUJVR19DUkVERU5USUFMUworCW5ldy0+bWFnaWMgPSBDUkVEX01BR0lDOworI2VuZGlmCisJcmV0dXJuIG5ldzsKKworZXJyb3I6CisJYWJvcnRfY3JlZHMobmV3KTsKKwlyZXR1cm4gTlVMTDsKK30KKwogLyoqCiAgKiBwcmVwYXJlX2NyZWRzIC0gUHJlcGFyZSBhIG5ldyBzZXQgb2YgY3JlZGVudGlhbHMgZm9yIG1vZGlmaWNhdGlvbgogICoKQEAgLTEzMiwxNiArMjY1LDE5IEBACiAJY29uc3Qgc3RydWN0IGNyZWQgKm9sZDsKIAlzdHJ1Y3QgY3JlZCAqbmV3OwogCi0JQlVHX09OKGF0b21pY19yZWFkKCZ0YXNrLT5yZWFsX2NyZWQtPnVzYWdlKSA8IDEpOworCXZhbGlkYXRlX3Byb2Nlc3NfY3JlZHMoKTsKIAogCW5ldyA9IGttZW1fY2FjaGVfYWxsb2MoY3JlZF9qYXIsIEdGUF9LRVJORUwpOwogCWlmICghbmV3KQogCQlyZXR1cm4gTlVMTDsKIAorCWtkZWJ1ZygicHJlcGFyZV9jcmVkcygpIGFsbG9jICVwIiwgbmV3KTsKKwogCW9sZCA9IHRhc2stPmNyZWQ7CiAJbWVtY3B5KG5ldywgb2xkLCBzaXplb2Yoc3RydWN0IGNyZWQpKTsKIAogCWF0b21pY19zZXQoJm5ldy0+dXNhZ2UsIDEpOworCXNldF9jcmVkX3N1YnNjcmliZXJzKG5ldywgMCk7CiAJZ2V0X2dyb3VwX2luZm8obmV3LT5ncm91cF9pbmZvKTsKIAlnZXRfdWlkKG5ldy0+dXNlcik7CiAKQEAgLTE1Nyw2ICsyOTMsNyBAQAogCiAJaWYgKHNlY3VyaXR5X3ByZXBhcmVfY3JlZHMobmV3LCBvbGQsIEdGUF9LRVJORUwpIDwgMCkKIAkJZ290byBlcnJvcjsKKwl2YWxpZGF0ZV9jcmVkcyhuZXcpOwogCXJldHVybiBuZXc7CiAKIGVycm9yOgpAQCAtMjI5LDkgKzM2NiwxMiBAQAogCWlmICghbmV3KQogCQlyZXR1cm4gTlVMTDsKIAorCWtkZWJ1ZygicHJlcGFyZV91c2VybW9kZWhlbHBlcl9jcmVkcygpIGFsbG9jICVwIiwgbmV3KTsKKwogCW1lbWNweShuZXcsICZpbml0X2NyZWQsIHNpemVvZihzdHJ1Y3QgY3JlZCkpOwogCiAJYXRvbWljX3NldCgmbmV3LT51c2FnZSwgMSk7CisJc2V0X2NyZWRfc3Vic2NyaWJlcnMobmV3LCAwKTsKIAlnZXRfZ3JvdXBfaW5mbyhuZXctPmdyb3VwX2luZm8pOwogCWdldF91aWQobmV3LT51c2VyKTsKIApAQCAtMjUwLDYgKzM5MCw3IEBACiAjZW5kaWYKIAlpZiAoc2VjdXJpdHlfcHJlcGFyZV9jcmVkcyhuZXcsICZpbml0X2NyZWQsIEdGUF9BVE9NSUMpIDwgMCkKIAkJZ290byBlcnJvcjsKKwl2YWxpZGF0ZV9jcmVkcyhuZXcpOwogCiAJQlVHX09OKGF0b21pY19yZWFkKCZuZXctPnVzYWdlKSAhPSAxKTsKIAlyZXR1cm4gbmV3OwpAQCAtMjg2LDYgKzQyNywxMCBAQAogCSAgICApIHsKIAkJcC0+cmVhbF9jcmVkID0gZ2V0X2NyZWQocC0+Y3JlZCk7CiAJCWdldF9jcmVkKHAtPmNyZWQpOworCQlhbHRlcl9jcmVkX3N1YnNjcmliZXJzKHAtPmNyZWQsIDIpOworCQlrZGVidWcoInNoYXJlX2NyZWRzKCVweyVkLCVkfSkiLAorCQkgICAgICAgcC0+Y3JlZCwgYXRvbWljX3JlYWQoJnAtPmNyZWQtPnVzYWdlKSwKKwkJICAgICAgIHJlYWRfY3JlZF9zdWJzY3JpYmVycyhwLT5jcmVkKSk7CiAJCWF0b21pY19pbmMoJnAtPmNyZWQtPnVzZXItPnByb2Nlc3Nlcyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTMzMSw2ICs0NzYsOCBAQAogCiAJYXRvbWljX2luYygmbmV3LT51c2VyLT5wcm9jZXNzZXMpOwogCXAtPmNyZWQgPSBwLT5yZWFsX2NyZWQgPSBnZXRfY3JlZChuZXcpOworCWFsdGVyX2NyZWRfc3Vic2NyaWJlcnMobmV3LCAyKTsKKwl2YWxpZGF0ZV9jcmVkcyhuZXcpOwogCXJldHVybiAwOwogCiBlcnJvcl9wdXQ6CkBAIC0zNTUsMTMgKzUwMiwyMCBAQAogaW50IGNvbW1pdF9jcmVkcyhzdHJ1Y3QgY3JlZCAqbmV3KQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN1cnJlbnQ7Ci0JY29uc3Qgc3RydWN0IGNyZWQgKm9sZDsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqb2xkID0gdGFzay0+cmVhbF9jcmVkOwogCi0JQlVHX09OKHRhc2stPmNyZWQgIT0gdGFzay0+cmVhbF9jcmVkKTsKLQlCVUdfT04oYXRvbWljX3JlYWQoJnRhc2stPnJlYWxfY3JlZC0+dXNhZ2UpIDwgMik7CisJa2RlYnVnKCJjb21taXRfY3JlZHMoJXB7JWQsJWR9KSIsIG5ldywKKwkgICAgICAgYXRvbWljX3JlYWQoJm5ldy0+dXNhZ2UpLAorCSAgICAgICByZWFkX2NyZWRfc3Vic2NyaWJlcnMobmV3KSk7CisKKwlCVUdfT04odGFzay0+Y3JlZCAhPSBvbGQpOworI2lmZGVmIENPTkZJR19ERUJVR19DUkVERU5USUFMUworCUJVR19PTihyZWFkX2NyZWRfc3Vic2NyaWJlcnMob2xkKSA8IDIpOworCXZhbGlkYXRlX2NyZWRzKG9sZCk7CisJdmFsaWRhdGVfY3JlZHMobmV3KTsKKyNlbmRpZgogCUJVR19PTihhdG9taWNfcmVhZCgmbmV3LT51c2FnZSkgPCAxKTsKIAotCW9sZCA9IHRhc2stPnJlYWxfY3JlZDsKIAlzZWN1cml0eV9jb21taXRfY3JlZHMobmV3LCBvbGQpOwogCiAJZ2V0X2NyZWQobmV3KTsgLyogd2Ugd2lsbCByZXF1aXJlIGEgcmVmIGZvciB0aGUgc3ViaiBjcmVkcyB0b28gKi8KQEAgLTM5MCwxMiArNTQ0LDE0IEBACiAJICogICBjaGVhcGx5IHdpdGggdGhlIG5ldyB1aWQgY2FjaGUsIHNvIGlmIGl0IG1hdHRlcnMKIAkgKiAgIHdlIHNob3VsZCBiZSBjaGVja2luZyBmb3IgaXQuICAtRGF2ZU0KIAkgKi8KKwlhbHRlcl9jcmVkX3N1YnNjcmliZXJzKG5ldywgMik7CiAJaWYgKG5ldy0+dXNlciAhPSBvbGQtPnVzZXIpCiAJCWF0b21pY19pbmMoJm5ldy0+dXNlci0+cHJvY2Vzc2VzKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIodGFzay0+cmVhbF9jcmVkLCBuZXcpOwogCXJjdV9hc3NpZ25fcG9pbnRlcih0YXNrLT5jcmVkLCBuZXcpOwogCWlmIChuZXctPnVzZXIgIT0gb2xkLT51c2VyKQogCQlhdG9taWNfZGVjKCZvbGQtPnVzZXItPnByb2Nlc3Nlcyk7CisJYWx0ZXJfY3JlZF9zdWJzY3JpYmVycyhvbGQsIC0yKTsKIAogCXNjaGVkX3N3aXRjaF91c2VyKHRhc2spOwogCkBAIC00MjgsNiArNTg0LDEzIEBACiAgKi8KIHZvaWQgYWJvcnRfY3JlZHMoc3RydWN0IGNyZWQgKm5ldykKIHsKKwlrZGVidWcoImFib3J0X2NyZWRzKCVweyVkLCVkfSkiLCBuZXcsCisJICAgICAgIGF0b21pY19yZWFkKCZuZXctPnVzYWdlKSwKKwkgICAgICAgcmVhZF9jcmVkX3N1YnNjcmliZXJzKG5ldykpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTCisJQlVHX09OKHJlYWRfY3JlZF9zdWJzY3JpYmVycyhuZXcpICE9IDApOworI2VuZGlmCiAJQlVHX09OKGF0b21pY19yZWFkKCZuZXctPnVzYWdlKSA8IDEpOwogCXB1dF9jcmVkKG5ldyk7CiB9CkBAIC00NDQsNyArNjA3LDIwIEBACiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKm9sZCA9IGN1cnJlbnQtPmNyZWQ7CiAKLQlyY3VfYXNzaWduX3BvaW50ZXIoY3VycmVudC0+Y3JlZCwgZ2V0X2NyZWQobmV3KSk7CisJa2RlYnVnKCJvdmVycmlkZV9jcmVkcyglcHslZCwlZH0pIiwgbmV3LAorCSAgICAgICBhdG9taWNfcmVhZCgmbmV3LT51c2FnZSksCisJICAgICAgIHJlYWRfY3JlZF9zdWJzY3JpYmVycyhuZXcpKTsKKworCXZhbGlkYXRlX2NyZWRzKG9sZCk7CisJdmFsaWRhdGVfY3JlZHMobmV3KTsKKwlnZXRfY3JlZChuZXcpOworCWFsdGVyX2NyZWRfc3Vic2NyaWJlcnMobmV3LCAxKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoY3VycmVudC0+Y3JlZCwgbmV3KTsKKwlhbHRlcl9jcmVkX3N1YnNjcmliZXJzKG9sZCwgLTEpOworCisJa2RlYnVnKCJvdmVycmlkZV9jcmVkcygpID0gJXB7JWQsJWR9Iiwgb2xkLAorCSAgICAgICBhdG9taWNfcmVhZCgmb2xkLT51c2FnZSksCisJICAgICAgIHJlYWRfY3JlZF9zdWJzY3JpYmVycyhvbGQpKTsKIAlyZXR1cm4gb2xkOwogfQogRVhQT1JUX1NZTUJPTChvdmVycmlkZV9jcmVkcyk7CkBAIC00NjAsNyArNjM2LDE1IEBACiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKm92ZXJyaWRlID0gY3VycmVudC0+Y3JlZDsKIAorCWtkZWJ1ZygicmV2ZXJ0X2NyZWRzKCVweyVkLCVkfSkiLCBvbGQsCisJICAgICAgIGF0b21pY19yZWFkKCZvbGQtPnVzYWdlKSwKKwkgICAgICAgcmVhZF9jcmVkX3N1YnNjcmliZXJzKG9sZCkpOworCisJdmFsaWRhdGVfY3JlZHMob2xkKTsKKwl2YWxpZGF0ZV9jcmVkcyhvdmVycmlkZSk7CisJYWx0ZXJfY3JlZF9zdWJzY3JpYmVycyhvbGQsIDEpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihjdXJyZW50LT5jcmVkLCBvbGQpOworCWFsdGVyX2NyZWRfc3Vic2NyaWJlcnMob3ZlcnJpZGUsIC0xKTsKIAlwdXRfY3JlZChvdmVycmlkZSk7CiB9CiBFWFBPUlRfU1lNQk9MKHJldmVydF9jcmVkcyk7CkBAIC01MDIsMTEgKzY4NiwxNSBAQAogCWlmICghbmV3KQogCQlyZXR1cm4gTlVMTDsKIAorCWtkZWJ1ZygicHJlcGFyZV9rZXJuZWxfY3JlZCgpIGFsbG9jICVwIiwgbmV3KTsKKwogCWlmIChkYWVtb24pCiAJCW9sZCA9IGdldF90YXNrX2NyZWQoZGFlbW9uKTsKIAllbHNlCiAJCW9sZCA9IGdldF9jcmVkKCZpbml0X2NyZWQpOwogCisJdmFsaWRhdGVfY3JlZHMob2xkKTsKKwogCSpuZXcgPSAqb2xkOwogCWdldF91aWQobmV3LT51c2VyKTsKIAlnZXRfZ3JvdXBfaW5mbyhuZXctPmdyb3VwX2luZm8pOwpAQCAtNTI2LDcgKzcxNCw5IEBACiAJCWdvdG8gZXJyb3I7CiAKIAlhdG9taWNfc2V0KCZuZXctPnVzYWdlLCAxKTsKKwlzZXRfY3JlZF9zdWJzY3JpYmVycyhuZXcsIDApOwogCXB1dF9jcmVkKG9sZCk7CisJdmFsaWRhdGVfY3JlZHMobmV3KTsKIAlyZXR1cm4gbmV3OwogCiBlcnJvcjoKQEAgLTU4OSwzICs3NzksOTUgQEAKIAlyZXR1cm4gc2VjdXJpdHlfa2VybmVsX2NyZWF0ZV9maWxlc19hcyhuZXcsIGlub2RlKTsKIH0KIEVYUE9SVF9TWU1CT0woc2V0X2NyZWF0ZV9maWxlc19hcyk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMKKworLyoKKyAqIGR1bXAgaW52YWxpZCBjcmVkZW50aWFscworICovCitzdGF0aWMgdm9pZCBkdW1wX2ludmFsaWRfY3JlZHMoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXByaW50ayhLRVJOX0VSUiAiQ1JFRDogJXMgY3JlZGVudGlhbHM6ICVwICVzJXMlc1xuIiwKKwkgICAgICAgbGFiZWwsIGNyZWQsCisJICAgICAgIGNyZWQgPT0gJmluaXRfY3JlZCA/ICJbaW5pdF0iIDogIiIsCisJICAgICAgIGNyZWQgPT0gdHNrLT5yZWFsX2NyZWQgPyAiW3JlYWxdIiA6ICIiLAorCSAgICAgICBjcmVkID09IHRzay0+Y3JlZCA/ICJbZWZmXSIgOiAiIik7CisJcHJpbnRrKEtFUk5fRVJSICJDUkVEOiAtPm1hZ2ljPSV4LCBwdXRfYWRkcj0lcFxuIiwKKwkgICAgICAgY3JlZC0+bWFnaWMsIGNyZWQtPnB1dF9hZGRyKTsKKwlwcmludGsoS0VSTl9FUlIgIkNSRUQ6IC0+dXNhZ2U9JWQsIHN1YnNjcj0lZFxuIiwKKwkgICAgICAgYXRvbWljX3JlYWQoJmNyZWQtPnVzYWdlKSwKKwkgICAgICAgcmVhZF9jcmVkX3N1YnNjcmliZXJzKGNyZWQpKTsKKwlwcmludGsoS0VSTl9FUlIgIkNSRUQ6IC0+KnVpZCA9IHsgJWQsJWQsJWQsJWQgfVxuIiwKKwkgICAgICAgY3JlZC0+dWlkLCBjcmVkLT5ldWlkLCBjcmVkLT5zdWlkLCBjcmVkLT5mc3VpZCk7CisJcHJpbnRrKEtFUk5fRVJSICJDUkVEOiAtPipnaWQgPSB7ICVkLCVkLCVkLCVkIH1cbiIsCisJICAgICAgIGNyZWQtPmdpZCwgY3JlZC0+ZWdpZCwgY3JlZC0+c2dpZCwgY3JlZC0+ZnNnaWQpOworI2lmZGVmIENPTkZJR19TRUNVUklUWQorCXByaW50ayhLRVJOX0VSUiAiQ1JFRDogLT5zZWN1cml0eSBpcyAlcFxuIiwgY3JlZC0+c2VjdXJpdHkpOworCWlmICgodW5zaWduZWQgbG9uZykgY3JlZC0+c2VjdXJpdHkgPj0gUEFHRV9TSVpFICYmCisJICAgICgoKHVuc2lnbmVkIGxvbmcpIGNyZWQtPnNlY3VyaXR5ICYgMHhmZmZmZmYwMCkgIT0KKwkgICAgIChQT0lTT05fRlJFRSA8PCAyNCB8IFBPSVNPTl9GUkVFIDw8IDE2IHwgUE9JU09OX0ZSRUUgPDwgOCkpKQorCQlwcmludGsoS0VSTl9FUlIgIkNSRUQ6IC0+c2VjdXJpdHkgeyV4LCAleH1cbiIsCisJCSAgICAgICAoKHUzMiopY3JlZC0+c2VjdXJpdHkpWzBdLAorCQkgICAgICAgKCh1MzIqKWNyZWQtPnNlY3VyaXR5KVsxXSk7CisjZW5kaWYKK30KKworLyoKKyAqIHJlcG9ydCB1c2Ugb2YgaW52YWxpZCBjcmVkZW50aWFscworICovCit2b2lkIF9faW52YWxpZF9jcmVkcyhjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgY29uc3QgY2hhciAqZmlsZSwgdW5zaWduZWQgbGluZSkKK3sKKwlwcmludGsoS0VSTl9FUlIgIkNSRUQ6IEludmFsaWQgY3JlZGVudGlhbHNcbiIpOworCXByaW50ayhLRVJOX0VSUiAiQ1JFRDogQXQgJXM6JXVcbiIsIGZpbGUsIGxpbmUpOworCWR1bXBfaW52YWxpZF9jcmVkcyhjcmVkLCAiU3BlY2lmaWVkIiwgY3VycmVudCk7CisJQlVHKCk7Cit9CitFWFBPUlRfU1lNQk9MKF9faW52YWxpZF9jcmVkcyk7CisKKy8qCisgKiBjaGVjayB0aGUgY3JlZGVudGlhbHMgb24gYSBwcm9jZXNzCisgKi8KK3ZvaWQgX192YWxpZGF0ZV9wcm9jZXNzX2NyZWRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJICAgICAgY29uc3QgY2hhciAqZmlsZSwgdW5zaWduZWQgbGluZSkKK3sKKwlpZiAodHNrLT5jcmVkID09IHRzay0+cmVhbF9jcmVkKSB7CisJCWlmICh1bmxpa2VseShyZWFkX2NyZWRfc3Vic2NyaWJlcnModHNrLT5jcmVkKSA8IDIgfHwKKwkJCSAgICAgY3JlZHNfYXJlX2ludmFsaWQodHNrLT5jcmVkKSkpCisJCQlnb3RvIGludmFsaWRfY3JlZHM7CisJfSBlbHNlIHsKKwkJaWYgKHVubGlrZWx5KHJlYWRfY3JlZF9zdWJzY3JpYmVycyh0c2stPnJlYWxfY3JlZCkgPCAxIHx8CisJCQkgICAgIHJlYWRfY3JlZF9zdWJzY3JpYmVycyh0c2stPmNyZWQpIDwgMSB8fAorCQkJICAgICBjcmVkc19hcmVfaW52YWxpZCh0c2stPnJlYWxfY3JlZCkgfHwKKwkJCSAgICAgY3JlZHNfYXJlX2ludmFsaWQodHNrLT5jcmVkKSkpCisJCQlnb3RvIGludmFsaWRfY3JlZHM7CisJfQorCXJldHVybjsKKworaW52YWxpZF9jcmVkczoKKwlwcmludGsoS0VSTl9FUlIgIkNSRUQ6IEludmFsaWQgcHJvY2VzcyBjcmVkZW50aWFsc1xuIik7CisJcHJpbnRrKEtFUk5fRVJSICJDUkVEOiBBdCAlczoldVxuIiwgZmlsZSwgbGluZSk7CisKKwlkdW1wX2ludmFsaWRfY3JlZHModHNrLT5yZWFsX2NyZWQsICJSZWFsIiwgdHNrKTsKKwlpZiAodHNrLT5jcmVkICE9IHRzay0+cmVhbF9jcmVkKQorCQlkdW1wX2ludmFsaWRfY3JlZHModHNrLT5jcmVkLCAiRWZmZWN0aXZlIiwgdHNrKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiQ1JFRDogRWZmZWN0aXZlIGNyZWRzID09IFJlYWwgY3JlZHNcbiIpOworCUJVRygpOworfQorRVhQT1JUX1NZTUJPTChfX3ZhbGlkYXRlX3Byb2Nlc3NfY3JlZHMpOworCisvKgorICogY2hlY2sgY3JlZHMgZm9yIGRvX2V4aXQoKQorICovCit2b2lkIHZhbGlkYXRlX2NyZWRzX2Zvcl9kb19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWtkZWJ1ZygidmFsaWRhdGVfY3JlZHNfZm9yX2RvX2V4aXQoJXAsJXB7JWQsJWR9KSIsCisJICAgICAgIHRzay0+cmVhbF9jcmVkLCB0c2stPmNyZWQsCisJICAgICAgIGF0b21pY19yZWFkKCZ0c2stPmNyZWQtPnVzYWdlKSwKKwkgICAgICAgcmVhZF9jcmVkX3N1YnNjcmliZXJzKHRzay0+Y3JlZCkpOworCisJX192YWxpZGF0ZV9wcm9jZXNzX2NyZWRzKHRzaywgX19GSUxFX18sIF9fTElORV9fKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19DUkVERU5USUFMUyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggODY5ZGMyMi4uYWU1ZDg2NiAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC05MDEsNiArOTAxLDggQEAKIAogCXRyYWNlaG9va19yZXBvcnRfZXhpdCgmY29kZSk7CiAKKwl2YWxpZGF0ZV9jcmVkc19mb3JfZG9fZXhpdCh0c2spOworCiAJLyoKIAkgKiBXZSdyZSB0YWtpbmcgcmVjdXJzaXZlIGZhdWx0cyBoZXJlIGluIGRvX2V4aXQuIFNhZmVzdCBpcyB0byBqdXN0CiAJICogbGVhdmUgdGhpcyB0YXNrIGFsb25lIGFuZCB3YWl0IGZvciByZWJvb3QuCkBAIC0xMDA5LDcgKzEwMTEsMTAgQEAKIAlpZiAodHNrLT5zcGxpY2VfcGlwZSkKIAkJX19mcmVlX3BpcGVfaW5mbyh0c2stPnNwbGljZV9waXBlKTsKIAorCXZhbGlkYXRlX2NyZWRzX2Zvcl9kb19leGl0KHRzayk7CisKIAlwcmVlbXB0X2Rpc2FibGUoKTsKKwlleGl0X3JjdSgpOwogCS8qIGNhdXNlcyBmaW5hbCBwdXRfdGFza19zdHJ1Y3QgaW4gZmluaXNoX3Rhc2tfc3dpdGNoKCkuICovCiAJdHNrLT5zdGF0ZSA9IFRBU0tfREVBRDsKIAlzY2hlZHVsZSgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggZTZjMDRkNC4uYmZlZTkzMSAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC0xNTIsOCArMTUyLDcgQEAKIAlXQVJOX09OKGF0b21pY19yZWFkKCZ0c2stPnVzYWdlKSk7CiAJV0FSTl9PTih0c2sgPT0gY3VycmVudCk7CiAKLQlwdXRfY3JlZCh0c2stPnJlYWxfY3JlZCk7Ci0JcHV0X2NyZWQodHNrLT5jcmVkKTsKKwlleGl0X2NyZWRzKHRzayk7CiAJZGVsYXlhY2N0X3Rza19mcmVlKHRzayk7CiAKIAlpZiAoIXByb2ZpbGVfaGFuZG9mZl90YXNrKHRzaykpCkBAIC0xMDA4LDEwICsxMDA3LDcgQEAKIAljb3B5X2ZsYWdzKGNsb25lX2ZsYWdzLCBwKTsKIAlJTklUX0xJU1RfSEVBRCgmcC0+Y2hpbGRyZW4pOwogCUlOSVRfTElTVF9IRUFEKCZwLT5zaWJsaW5nKTsKLSNpZmRlZiBDT05GSUdfUFJFRU1QVF9SQ1UKLQlwLT5yY3VfcmVhZF9sb2NrX25lc3RpbmcgPSAwOwotCXAtPnJjdV9mbGlwY3RyX2lkeCA9IDA7Ci0jZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVSAqLworCXJjdV9jb3B5X3Byb2Nlc3MocCk7CiAJcC0+dmZvcmtfZG9uZSA9IE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJnAtPmFsbG9jX2xvY2spOwogCkBAIC0xMjk3LDggKzEyOTMsNyBAQAogCW1vZHVsZV9wdXQodGFza190aHJlYWRfaW5mbyhwKS0+ZXhlY19kb21haW4tPm1vZHVsZSk7CiBiYWRfZm9ya19jbGVhbnVwX2NvdW50OgogCWF0b21pY19kZWMoJnAtPmNyZWQtPnVzZXItPnByb2Nlc3Nlcyk7Ci0JcHV0X2NyZWQocC0+cmVhbF9jcmVkKTsKLQlwdXRfY3JlZChwLT5jcmVkKTsKKwlleGl0X2NyZWRzKHApOwogYmFkX2ZvcmtfZnJlZToKIAlmcmVlX3Rhc2socCk7CiBmb3JrX291dDoKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC5jIGIva2VybmVsL2Z1dGV4LmMKaW5kZXggZTE4Y2ZiZC4uMjQ4ZGQxMSAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4LmMKKysrIGIva2VybmVsL2Z1dGV4LmMKQEAgLTExNSw2ICsxMTUsOSBAQAogCS8qIHJ0X3dhaXRlciBzdG9yYWdlIGZvciByZXF1ZXVlX3BpOiAqLwogCXN0cnVjdCBydF9tdXRleF93YWl0ZXIgKnJ0X3dhaXRlcjsKIAorCS8qIFRoZSBleHBlY3RlZCByZXF1ZXVlIHBpIHRhcmdldCBmdXRleCBrZXk6ICovCisJdW5pb24gZnV0ZXhfa2V5ICpyZXF1ZXVlX3BpX2tleTsKKwogCS8qIEJpdHNldCBmb3IgdGhlIG9wdGlvbmFsIGJpdG1hc2tlZCB3YWtldXAgKi8KIAl1MzIgYml0c2V0OwogfTsKQEAgLTEwODksNiArMTA5MiwxMCBAQAogCWlmICghdG9wX3dhaXRlcikKIAkJcmV0dXJuIDA7CiAKKwkvKiBFbnN1cmUgd2UgcmVxdWV1ZSB0byB0aGUgZXhwZWN0ZWQgZnV0ZXguICovCisJaWYgKCFtYXRjaF9mdXRleCh0b3Bfd2FpdGVyLT5yZXF1ZXVlX3BpX2tleSwga2V5MikpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyoKIAkgKiBUcnkgdG8gdGFrZSB0aGUgbG9jayBmb3IgdG9wX3dhaXRlci4gIFNldCB0aGUgRlVURVhfV0FJVEVSUyBiaXQgaW4KIAkgKiB0aGUgY29udGVuZGVkIGNhc2Ugb3IgaWYgc2V0X3dhaXRlcnMgaXMgMS4gIFRoZSBwaV9zdGF0ZSBpcyByZXR1cm5lZApAQCAtMTI3Niw2ICsxMjgzLDEyIEBACiAJCQljb250aW51ZTsKIAkJfQogCisJCS8qIEVuc3VyZSB3ZSByZXF1ZXVlIHRvIHRoZSBleHBlY3RlZCBmdXRleCBmb3IgcmVxdWV1ZV9waS4gKi8KKwkJaWYgKHJlcXVldWVfcGkgJiYgIW1hdGNoX2Z1dGV4KHRoaXMtPnJlcXVldWVfcGlfa2V5LCAma2V5MikpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCiAJCS8qCiAJCSAqIFJlcXVldWUgbnJfcmVxdWV1ZSB3YWl0ZXJzIGFuZCBwb3NzaWJseSBvbmUgbW9yZSBpbiB0aGUgY2FzZQogCQkgKiBvZiByZXF1ZXVlX3BpIGlmIHdlIGNvdWxkbid0IGFjcXVpcmUgdGhlIGxvY2sgYXRvbWljYWxseS4KQEAgLTE3NTEsNiArMTc2NCw3IEBACiAJcS5waV9zdGF0ZSA9IE5VTEw7CiAJcS5iaXRzZXQgPSBiaXRzZXQ7CiAJcS5ydF93YWl0ZXIgPSBOVUxMOworCXEucmVxdWV1ZV9waV9rZXkgPSBOVUxMOwogCiAJaWYgKGFic190aW1lKSB7CiAJCXRvID0gJnRpbWVvdXQ7CkBAIC0xODU4LDYgKzE4NzIsNyBAQAogCiAJcS5waV9zdGF0ZSA9IE5VTEw7CiAJcS5ydF93YWl0ZXIgPSBOVUxMOworCXEucmVxdWV1ZV9waV9rZXkgPSBOVUxMOwogcmV0cnk6CiAJcS5rZXkgPSBGVVRFWF9LRVlfSU5JVDsKIAlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyLCBmc2hhcmVkLCAmcS5rZXksIFZFUklGWV9XUklURSk7CkBAIC0yMTE4LDExICsyMTMzLDExIEBACiAgKiBXZSBjYWxsIHNjaGVkdWxlIGluIGZ1dGV4X3dhaXRfcXVldWVfbWUoKSB3aGVuIHdlIGVucXVldWUgYW5kIHJldHVybiB0aGVyZQogICogdmlhIHRoZSBmb2xsb3dpbmc6CiAgKiAxKSB3YWtldXAgb24gdWFkZHIyIGFmdGVyIGFuIGF0b21pYyBsb2NrIGFjcXVpc2l0aW9uIGJ5IGZ1dGV4X3JlcXVldWUoKQotICogMikgd2FrZXVwIG9uIHVhZGRyMiBhZnRlciBhIHJlcXVldWUgYW5kIHN1YnNlcXVlbnQgdW5sb2NrCi0gKiAzKSBzaWduYWwgKGJlZm9yZSBvciBhZnRlciByZXF1ZXVlKQotICogNCkgdGltZW91dCAoYmVmb3JlIG9yIGFmdGVyIHJlcXVldWUpCisgKiAyKSB3YWtldXAgb24gdWFkZHIyIGFmdGVyIGEgcmVxdWV1ZQorICogMykgc2lnbmFsCisgKiA0KSB0aW1lb3V0CiAgKgotICogSWYgMywgd2Ugc2V0dXAgYSByZXN0YXJ0X2Jsb2NrIHdpdGggZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpKCkgYXMgdGhlIGZ1bmN0aW9uLgorICogSWYgMywgY2xlYW51cCBhbmQgcmV0dXJuIC1FUkVTVEFSVE5PSU5UUi4KICAqCiAgKiBJZiAyLCB3ZSBtYXkgdGhlbiBibG9jayBvbiB0cnlpbmcgdG8gdGFrZSB0aGUgcnRfbXV0ZXggYW5kIHJldHVybiB2aWE6CiAgKiA1KSBzdWNjZXNzZnVsIGxvY2sKQEAgLTIxMzAsNyArMjE0NSw3IEBACiAgKiA3KSB0aW1lb3V0CiAgKiA4KSBvdGhlciBsb2NrIGFjcXVpc2l0aW9uIGZhaWx1cmUKICAqCi0gKiBJZiA2LCB3ZSBzZXR1cCBhIHJlc3RhcnRfYmxvY2sgd2l0aCBmdXRleF9sb2NrX3BpKCkgYXMgdGhlIGZ1bmN0aW9uLgorICogSWYgNiwgcmV0dXJuIC1FV09VTERCTE9DSyAocmVzdGFydGluZyB0aGUgc3lzY2FsbCB3b3VsZCBkbyB0aGUgc2FtZSkuCiAgKgogICogSWYgNCBvciA3LCB3ZSBjbGVhbnVwIGFuZCByZXR1cm4gd2l0aCAtRVRJTUVET1VULgogICoKQEAgLTIxNjksMTUgKzIxODQsMTYgQEAKIAlkZWJ1Z19ydF9tdXRleF9pbml0X3dhaXRlcigmcnRfd2FpdGVyKTsKIAlydF93YWl0ZXIudGFzayA9IE5VTEw7CiAKLQlxLnBpX3N0YXRlID0gTlVMTDsKLQlxLmJpdHNldCA9IGJpdHNldDsKLQlxLnJ0X3dhaXRlciA9ICZydF93YWl0ZXI7Ci0KIAlrZXkyID0gRlVURVhfS0VZX0lOSVQ7CiAJcmV0ID0gZ2V0X2Z1dGV4X2tleSh1YWRkcjIsIGZzaGFyZWQsICZrZXkyLCBWRVJJRllfV1JJVEUpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0OwogCisJcS5waV9zdGF0ZSA9IE5VTEw7CisJcS5iaXRzZXQgPSBiaXRzZXQ7CisJcS5ydF93YWl0ZXIgPSAmcnRfd2FpdGVyOworCXEucmVxdWV1ZV9waV9rZXkgPSAma2V5MjsKKwogCS8qIFByZXBhcmUgdG8gd2FpdCBvbiB1YWRkci4gKi8KIAlyZXQgPSBmdXRleF93YWl0X3NldHVwKHVhZGRyLCB2YWwsIGZzaGFyZWQsICZxLCAmaGIpOwogCWlmIChyZXQpCkBAIC0yMjQ4LDE0ICsyMjY0LDExIEBACiAJCQlydF9tdXRleF91bmxvY2socGlfbXV0ZXgpOwogCX0gZWxzZSBpZiAocmV0ID09IC1FSU5UUikgewogCQkvKgotCQkgKiBXZSd2ZSBhbHJlYWR5IGJlZW4gcmVxdWV1ZWQsIGJ1dCB3ZSBoYXZlIG5vIHdheSB0bwotCQkgKiByZXN0YXJ0IGJ5IGNhbGxpbmcgZnV0ZXhfbG9ja19waSgpIGRpcmVjdGx5LiBXZQotCQkgKiBjb3VsZCByZXN0YXJ0IHRoZSBzeXNjYWxsLCBidXQgdGhhdCB3aWxsIGxvb2sgYXQKLQkJICogdGhlIHVzZXIgc3BhY2UgdmFsdWUgYW5kIHJldHVybiByaWdodCBhd2F5LiBTbyB3ZQotCQkgKiBkcm9wIGJhY2sgd2l0aCBFV09VTERCTE9DSyB0byB0ZWxsIHVzZXIgc3BhY2UgdGhhdAotCQkgKiAidmFsIiBoYXMgYmVlbiBjaGFuZ2VkLiBUaGF0J3MgdGhlIHNhbWUgd2hhdCB0aGUKLQkJICogcmVzdGFydCBvZiB0aGUgc3lzY2FsbCB3b3VsZCBkbyBpbgotCQkgKiBmdXRleF93YWl0X3NldHVwKCkuCisJCSAqIFdlJ3ZlIGFscmVhZHkgYmVlbiByZXF1ZXVlZCwgYnV0IGNhbm5vdCByZXN0YXJ0IGJ5IGNhbGxpbmcKKwkJICogZnV0ZXhfbG9ja19waSgpIGRpcmVjdGx5LiBXZSBjb3VsZCByZXN0YXJ0IHRoaXMgc3lzY2FsbCwgYnV0CisJCSAqIGl0IHdvdWxkIGRldGVjdCB0aGF0IHRoZSB1c2VyIHNwYWNlICJ2YWwiIGNoYW5nZWQgYW5kIHJldHVybgorCQkgKiAtRVdPVUxEQkxPQ0suICBTYXZlIHRoZSBvdmVyaGVhZCBvZiB0aGUgcmVzdGFydCBhbmQgcmV0dXJuCisJCSAqIC1FV09VTERCTE9DSyBkaXJlY3RseS4KIAkJICovCiAJCXJldCA9IC1FV09VTERCTE9DSzsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvZ2Nvdi9LY29uZmlnIGIva2VybmVsL2djb3YvS2NvbmZpZwppbmRleCAyMmU5ZGNmLi42NTRlZmQwIDEwMDY0NAotLS0gYS9rZXJuZWwvZ2Nvdi9LY29uZmlnCisrKyBiL2tlcm5lbC9nY292L0tjb25maWcKQEAgLTM0LDcgKzM0LDcgQEAKIGNvbmZpZyBHQ09WX1BST0ZJTEVfQUxMCiAJYm9vbCAiUHJvZmlsZSBlbnRpcmUgS2VybmVsIgogCWRlcGVuZHMgb24gR0NPVl9LRVJORUwKLQlkZXBlbmRzIG9uIFMzOTAgfHwgWDg2CisJZGVwZW5kcyBvbiBTMzkwIHx8IFg4NiB8fCAoUFBDICYmIEVYUEVSSU1FTlRBTCkKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJVGhpcyBvcHRpb25zIGFjdGl2YXRlcyBwcm9maWxpbmcgZm9yIHRoZSBlbnRpcmUga2VybmVsLgpkaWZmIC0tZ2l0IGEva2VybmVsL2hydGltZXIuYyBiL2tlcm5lbC9ocnRpbWVyLmMKaW5kZXggNDlkYTc5YS4uMDUwNzFiZiAxMDA2NDQKLS0tIGEva2VybmVsL2hydGltZXIuYworKysgYi9rZXJuZWwvaHJ0aW1lci5jCkBAIC00ODUsNiArNDg1LDcgQEAKIAlkZWJ1Z19vYmplY3RfaW5pdF9vbl9zdGFjayh0aW1lciwgJmhydGltZXJfZGVidWdfZGVzY3IpOwogCV9faHJ0aW1lcl9pbml0KHRpbWVyLCBjbG9ja19pZCwgbW9kZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChocnRpbWVyX2luaXRfb25fc3RhY2spOwogCiB2b2lkIGRlc3Ryb3lfaHJ0aW1lcl9vbl9zdGFjayhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiB7CkBAIC0xNDc3LDYgKzE0NzgsNyBAQAogCXNsLT50aW1lci5mdW5jdGlvbiA9IGhydGltZXJfd2FrZXVwOwogCXNsLT50YXNrID0gdGFzazsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGhydGltZXJfaW5pdF9zbGVlcGVyKTsKIAogc3RhdGljIGludCBfX3NjaGVkIGRvX25hbm9zbGVlcChzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyICp0LCBlbnVtIGhydGltZXJfbW9kZSBtb2RlKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9jaGlwLmMgYi9rZXJuZWwvaXJxL2NoaXAuYwppbmRleCAxM2M2OGU3Li5jMTY2MDE5IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2NoaXAuYworKysgYi9rZXJuZWwvaXJxL2NoaXAuYwpAQCAtMjIyLDYgKzIyMiwzNCBAQAogfQogRVhQT1JUX1NZTUJPTChzZXRfaXJxX2NoaXBfZGF0YSk7CiAKKy8qKgorICoJc2V0X2lycV9uZXN0ZWRfdGhyZWFkIC0gU2V0L1Jlc2V0IHRoZSBJUlFfTkVTVEVEX1RIUkVBRCBmbGFnIG9mIGFuIGlycQorICoKKyAqCUBpcnE6CUludGVycnVwdCBudW1iZXIKKyAqCUBuZXN0OgkwIHRvIGNsZWFyIC8gMSB0byBzZXQgdGhlIElSUV9ORVNURURfVEhSRUFEIGZsYWcKKyAqCisgKglUaGUgSVJRX05FU1RFRF9USFJFQUQgZmxhZyBpbmRpY2F0ZXMgdGhhdCBvbgorICoJcmVxdWVzdF90aHJlYWRlZF9pcnEoKSBubyBzZXBhcmF0ZSBpbnRlcnJ1cHQgdGhyZWFkIHNob3VsZCBiZQorICoJY3JlYXRlZCBmb3IgdGhlIGlycSBhcyB0aGUgaGFuZGxlciBhcmUgY2FsbGVkIG5lc3RlZCBpbiB0aGUKKyAqCWNvbnRleHQgb2YgYSBkZW11bHRpcGxleGluZyBpbnRlcnJ1cHQgaGFuZGxlciB0aHJlYWQuCisgKi8KK3ZvaWQgc2V0X2lycV9uZXN0ZWRfdGhyZWFkKHVuc2lnbmVkIGludCBpcnEsIGludCBuZXN0KQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZGVzYykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlpZiAobmVzdCkKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9ORVNURURfVEhSRUFEOworCWVsc2UKKwkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTkVTVEVEX1RIUkVBRDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzZXRfaXJxX25lc3RlZF90aHJlYWQpOworCiAvKgogICogZGVmYXVsdCBlbmFibGUgZnVuY3Rpb24KICAqLwpAQCAtMjk5LDYgKzMyNyw0NSBAQAogCX0KIH0KIAorLyoKKyAqCWhhbmRsZV9uZXN0ZWRfaXJxIC0gSGFuZGxlIGEgbmVzdGVkIGlycSBmcm9tIGEgaXJxIHRocmVhZAorICoJQGlycToJdGhlIGludGVycnVwdCBudW1iZXIKKyAqCisgKglIYW5kbGUgaW50ZXJydXB0cyB3aGljaCBhcmUgbmVzdGVkIGludG8gYSB0aHJlYWRlZCBpbnRlcnJ1cHQKKyAqCWhhbmRsZXIuIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbnNpZGUgdGhlIGNhbGxpbmcKKyAqCXRocmVhZHMgY29udGV4dC4KKyAqLwordm9pZCBoYW5kbGVfbmVzdGVkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOworCWlycXJldHVybl90IGFjdGlvbl9yZXQ7CisKKwltaWdodF9zbGVlcCgpOworCisJc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CisKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKKworCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKKwlpZiAodW5saWtlbHkoIWFjdGlvbiB8fCAoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWRlc2MtPnN0YXR1cyB8PSBJUlFfSU5QUk9HUkVTUzsKKwlzcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOworCisJYWN0aW9uX3JldCA9IGFjdGlvbi0+dGhyZWFkX2ZuKGFjdGlvbi0+aXJxLCBhY3Rpb24tPmRldl9pZCk7CisJaWYgKCFub2lycWRlYnVnKQorCQlub3RlX2ludGVycnVwdChpcnEsIGRlc2MsIGFjdGlvbl9yZXQpOworCisJc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CisJZGVzYy0+c3RhdHVzICY9IH5JUlFfSU5QUk9HUkVTUzsKKworb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaGFuZGxlX25lc3RlZF9pcnEpOworCiAvKioKICAqCWhhbmRsZV9zaW1wbGVfaXJxIC0gU2ltcGxlIGFuZCBzb2Z0d2FyZS1kZWNvZGVkIElSUXMuCiAgKglAaXJxOgl0aGUgaW50ZXJydXB0IG51bWJlcgpAQCAtMzgyLDcgKzQ0OSwxMCBAQAogCiAJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAlkZXNjLT5zdGF0dXMgJj0gfklSUV9JTlBST0dSRVNTOwotCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgJiYgZGVzYy0+Y2hpcC0+dW5tYXNrKQorCisJaWYgKHVubGlrZWx5KGRlc2MtPnN0YXR1cyAmIElSUV9PTkVTSE9UKSkKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9NQVNLRUQ7CisJZWxzZSBpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpICYmIGRlc2MtPmNoaXAtPnVubWFzaykKIAkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKQEAgLTU3Miw2ICs2NDIsNyBAQAogCQlkZXNjLT5jaGlwID0gJmR1bW15X2lycV9jaGlwOwogCX0KIAorCWNoaXBfYnVzX2xvY2soaXJxLCBkZXNjKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCiAJLyogVW5pbnN0YWxsPyAqLwpAQCAtNTkxLDYgKzY2Miw3IEBACiAJCWRlc2MtPmNoaXAtPnN0YXJ0dXAoaXJxKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCWNoaXBfYnVzX3N5bmNfdW5sb2NrKGlycSwgZGVzYyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3NldF9pcnFfaGFuZGxlcik7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaGFuZGxlLmMgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCmluZGV4IDA2NTIwNWIuLmE4MWNmODAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaGFuZGxlLmMKKysrIGIva2VybmVsL2lycS9oYW5kbGUuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAKIAlkZXNjID0gaXJxX2Rlc2NfbGVnYWN5OwogCWxlZ2FjeV9jb3VudCA9IEFSUkFZX1NJWkUoaXJxX2Rlc2NfbGVnYWN5KTsKLSAJbm9kZSA9IGZpcnN0X29ubGluZV9ub2RlOworCW5vZGUgPSBmaXJzdF9vbmxpbmVfbm9kZTsKIAogCS8qIGFsbG9jYXRlIGlycV9kZXNjX3B0cnMgYXJyYXkgYmFzZWQgb24gbnJfaXJxcyAqLwogCWlycV9kZXNjX3B0cnMgPSBrY2FsbG9jKG5yX2lycXMsIHNpemVvZih2b2lkICopLCBHRlBfTk9XQUlUKTsKQEAgLTE3Miw2ICsxNzIsOSBAQAogCiAJZm9yIChpID0gMDsgaSA8IGxlZ2FjeV9jb3VudDsgaSsrKSB7CiAJCWRlc2NbaV0uaXJxID0gaTsKKyNpZmRlZiBDT05GSUdfU01QCisJCWRlc2NbaV0ubm9kZSA9IG5vZGU7CisjZW5kaWYKIAkJZGVzY1tpXS5rc3RhdF9pcnFzID0ga3N0YXRfaXJxc19sZWdhY3kgKyBpICogbnJfY3B1X2lkczsKIAkJbG9ja2RlcF9zZXRfY2xhc3MoJmRlc2NbaV0ubG9jaywgJmlycV9kZXNjX2xvY2tfY2xhc3MpOwogCQlhbGxvY19kZXNjX21hc2tzKCZkZXNjW2ldLCBub2RlLCB0cnVlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmggYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCmluZGV4IGU3MGVkNTUuLjFiNWQ3NDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKKysrIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaApAQCAtNDQsNiArNDQsMTkgQEAKIAogZXh0ZXJuIHZvaWQgaXJxX3NldF90aHJlYWRfYWZmaW5pdHkoc3RydWN0IGlycV9kZXNjICpkZXNjKTsKIAorLyogSW5saW5lIGZ1bmN0aW9ucyBmb3Igc3VwcG9ydCBvZiBpcnEgY2hpcHMgb24gc2xvdyBidXNzZXMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwX2J1c19sb2NrKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlpZiAodW5saWtlbHkoZGVzYy0+Y2hpcC0+YnVzX2xvY2spKQorCQlkZXNjLT5jaGlwLT5idXNfbG9jayhpcnEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcF9idXNfc3luY191bmxvY2sodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCWlmICh1bmxpa2VseShkZXNjLT5jaGlwLT5idXNfc3luY191bmxvY2spKQorCQlkZXNjLT5jaGlwLT5idXNfc3luY191bmxvY2soaXJxKTsKK30KKwogLyoKICAqIERlYnVnZ2luZyBwcmludG91dDoKICAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tYW5hZ2UuYyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKaW5kZXggMGVjOWVkOC4uYmRlNGM2NiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9tYW5hZ2UuYworKysgYi9rZXJuZWwvaXJxL21hbmFnZS5jCkBAIC0yMzAsOSArMjMwLDExIEBACiAJaWYgKCFkZXNjKQogCQlyZXR1cm47CiAKKwljaGlwX2J1c19sb2NrKGlycSwgZGVzYyk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlfX2Rpc2FibGVfaXJxKGRlc2MsIGlycSwgZmFsc2UpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwljaGlwX2J1c19zeW5jX3VubG9jayhpcnEsIGRlc2MpOwogfQogRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycV9ub3N5bmMpOwogCkBAIC0yOTQsNyArMjk2LDggQEAKICAqCW1hdGNoZXMgdGhlIGxhc3QgZGlzYWJsZSwgcHJvY2Vzc2luZyBvZiBpbnRlcnJ1cHRzIG9uIHRoaXMKICAqCUlSUSBsaW5lIGlzIHJlLWVuYWJsZWQuCiAgKgotICoJVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQuCisgKglUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBJUlEgY29udGV4dCBvbmx5IHdoZW4KKyAqCWRlc2MtPmNoaXAtPmJ1c19sb2NrIGFuZCBkZXNjLT5jaGlwLT5idXNfc3luY191bmxvY2sgYXJlIE5VTEwgIQogICovCiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKQEAgLTMwNCw5ICszMDcsMTEgQEAKIAlpZiAoIWRlc2MpCiAJCXJldHVybjsKIAorCWNoaXBfYnVzX2xvY2soaXJxLCBkZXNjKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCV9fZW5hYmxlX2lycShkZXNjLCBpcnEsIGZhbHNlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJY2hpcF9idXNfc3luY191bmxvY2soaXJxLCBkZXNjKTsKIH0KIEVYUE9SVF9TWU1CT0woZW5hYmxlX2lycSk7CiAKQEAgLTQzNiw2ICs0NDEsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogRGVmYXVsdCBwcmltYXJ5IGludGVycnVwdCBoYW5kbGVyIGZvciB0aHJlYWRlZCBpbnRlcnJ1cHRzLiBJcworICogYXNzaWduZWQgYXMgcHJpbWFyeSBoYW5kbGVyIHdoZW4gcmVxdWVzdF90aHJlYWRlZF9pcnEgaXMgY2FsbGVkCisgKiB3aXRoIGhhbmRsZXIgPT0gTlVMTC4gVXNlZnVsIGZvciBvbmVzaG90IGludGVycnVwdHMuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpcnFfZGVmYXVsdF9wcmltYXJ5X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXJldHVybiBJUlFfV0FLRV9USFJFQUQ7Cit9CisKKy8qCisgKiBQcmltYXJ5IGhhbmRsZXIgZm9yIG5lc3RlZCB0aHJlYWRlZCBpbnRlcnJ1cHRzLiBTaG91bGQgbmV2ZXIgYmUKKyAqIGNhbGxlZC4KKyAqLworc3RhdGljIGlycXJldHVybl90IGlycV9uZXN0ZWRfcHJpbWFyeV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlXQVJOKDEsICJQcmltYXJ5IGhhbmRsZXIgY2FsbGVkIGZvciBuZXN0ZWQgaXJxICVkXG4iLCBpcnEpOworCXJldHVybiBJUlFfTk9ORTsKK30KKwogc3RhdGljIGludCBpcnFfd2FpdF9mb3JfaW50ZXJydXB0KHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKIHsKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewpAQCAtNDUxLDYgKzQ3NiwyMyBAQAogCXJldHVybiAtMTsKIH0KIAorLyoKKyAqIE9uZXNob3QgaW50ZXJydXB0cyBrZWVwIHRoZSBpcnEgbGluZSBtYXNrZWQgdW50aWwgdGhlIHRocmVhZGVkCisgKiBoYW5kbGVyIGZpbmlzaGVkLiB1bm1hc2sgaWYgdGhlIGludGVycnVwdCBoYXMgbm90IGJlZW4gZGlzYWJsZWQgYW5kCisgKiBpcyBtYXJrZWQgTUFTS0VELgorICovCitzdGF0aWMgdm9pZCBpcnFfZmluYWxpemVfb25lc2hvdCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJY2hpcF9idXNfbG9jayhpcnEsIGRlc2MpOworCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOworCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgJiYgKGRlc2MtPnN0YXR1cyAmIElSUV9NQVNLRUQpKSB7CisJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01BU0tFRDsKKwkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CisJY2hpcF9idXNfc3luY191bmxvY2soaXJxLCBkZXNjKTsKK30KKwogI2lmZGVmIENPTkZJR19TTVAKIC8qCiAgKiBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBhZmZpbml0eSBvZiB0aGUgaW50ZXJydXB0IHRocmVhZC4KQEAgLTQ5Miw3ICs1MzQsNyBAQAogCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgLnNjaGVkX3ByaW9yaXR5ID0gTUFYX1VTRVJfUlRfUFJJTy8yLCB9OwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbiA9IGRhdGE7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoYWN0aW9uLT5pcnEpOwotCWludCB3YWtlOworCWludCB3YWtlLCBvbmVzaG90ID0gZGVzYy0+c3RhdHVzICYgSVJRX09ORVNIT1Q7CiAKIAlzY2hlZF9zZXRzY2hlZHVsZXIoY3VycmVudCwgU0NIRURfRklGTywgJnBhcmFtKTsKIAljdXJyZW50LT5pcnFhY3Rpb24gPSBhY3Rpb247CkBAIC01MTgsNiArNTYwLDkgQEAKIAkJCXNwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAKIAkJCWFjdGlvbi0+dGhyZWFkX2ZuKGFjdGlvbi0+aXJxLCBhY3Rpb24tPmRldl9pZCk7CisKKwkJCWlmIChvbmVzaG90KQorCQkJCWlycV9maW5hbGl6ZV9vbmVzaG90KGFjdGlvbi0+aXJxLCBkZXNjKTsKIAkJfQogCiAJCXdha2UgPSBhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXNjLT50aHJlYWRzX2FjdGl2ZSk7CkBAIC01NjUsNyArNjEwLDcgQEAKIAlzdHJ1Y3QgaXJxYWN0aW9uICpvbGQsICoqb2xkX3B0cjsKIAljb25zdCBjaGFyICpvbGRfbmFtZSA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgc2hhcmVkID0gMDsKKwlpbnQgbmVzdGVkLCBzaGFyZWQgPSAwOwogCWludCByZXQ7CiAKIAlpZiAoIWRlc2MpCkBAIC01OTAsMTAgKzYzNSwzMiBAQAogCQlyYW5kX2luaXRpYWxpemVfaXJxKGlycSk7CiAJfQogCisJLyogT25lc2hvdCBpbnRlcnJ1cHRzIGFyZSBub3QgYWxsb3dlZCB3aXRoIHNoYXJlZCAqLworCWlmICgobmV3LT5mbGFncyAmIElSUUZfT05FU0hPVCkgJiYgKG5ldy0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyoKLQkgKiBUaHJlYWRlZCBoYW5kbGVyID8KKwkgKiBDaGVjayB3aGV0aGVyIHRoZSBpbnRlcnJ1cHQgbmVzdHMgaW50byBhbm90aGVyIGludGVycnVwdAorCSAqIHRocmVhZC4KIAkgKi8KLQlpZiAobmV3LT50aHJlYWRfZm4pIHsKKwluZXN0ZWQgPSBkZXNjLT5zdGF0dXMgJiBJUlFfTkVTVEVEX1RIUkVBRDsKKwlpZiAobmVzdGVkKSB7CisJCWlmICghbmV3LT50aHJlYWRfZm4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyoKKwkJICogUmVwbGFjZSB0aGUgcHJpbWFyeSBoYW5kbGVyIHdoaWNoIHdhcyBwcm92aWRlZCBmcm9tCisJCSAqIHRoZSBkcml2ZXIgZm9yIG5vbiBuZXN0ZWQgaW50ZXJydXB0IGhhbmRsaW5nIGJ5IHRoZQorCQkgKiBkdW1teSBmdW5jdGlvbiB3aGljaCB3YXJucyB3aGVuIGNhbGxlZC4KKwkJICovCisJCW5ldy0+aGFuZGxlciA9IGlycV9uZXN0ZWRfcHJpbWFyeV9oYW5kbGVyOworCX0KKworCS8qCisJICogQ3JlYXRlIGEgaGFuZGxlciB0aHJlYWQgd2hlbiBhIHRocmVhZCBmdW5jdGlvbiBpcyBzdXBwbGllZAorCSAqIGFuZCB0aGUgaW50ZXJydXB0IGRvZXMgbm90IG5lc3QgaW50byBhbm90aGVyIGludGVycnVwdAorCSAqIHRocmVhZC4KKwkgKi8KKwlpZiAobmV3LT50aHJlYWRfZm4gJiYgIW5lc3RlZCkgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKIAkJdCA9IGt0aHJlYWRfY3JlYXRlKGlycV90aHJlYWQsIG5ldywgImlycS8lZC0lcyIsIGlycSwKQEAgLTY2Miw5ICs3MjksMTIgQEAKIAkJCWRlc2MtPnN0YXR1cyB8PSBJUlFfUEVSX0NQVTsKICNlbmRpZgogCi0JCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9BVVRPREVURUNUIHwgSVJRX1dBSVRJTkcgfAorCQlkZXNjLT5zdGF0dXMgJj0gfihJUlFfQVVUT0RFVEVDVCB8IElSUV9XQUlUSU5HIHwgSVJRX09ORVNIT1QgfAogCQkJCSAgSVJRX0lOUFJPR1JFU1MgfCBJUlFfU1BVUklPVVNfRElTQUJMRUQpOwogCisJCWlmIChuZXctPmZsYWdzICYgSVJRRl9PTkVTSE9UKQorCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9PTkVTSE9UOworCiAJCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9OT0FVVE9FTikpIHsKIAkJCWRlc2MtPmRlcHRoID0gMDsKIAkJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0RJU0FCTEVEOwpAQCAtODc1LDcgKzk0NSwxNCBAQAogICovCiB2b2lkIGZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJaWYgKCFkZXNjKQorCQlyZXR1cm47CisKKwljaGlwX2J1c19sb2NrKGlycSwgZGVzYyk7CiAJa2ZyZWUoX19mcmVlX2lycShpcnEsIGRldl9pZCkpOworCWNoaXBfYnVzX3N5bmNfdW5sb2NrKGlycSwgZGVzYyk7CiB9CiBFWFBPUlRfU1lNQk9MKGZyZWVfaXJxKTsKIApAQCAtODg0LDYgKzk2MSw4IEBACiAgKglAaXJxOiBJbnRlcnJ1cHQgbGluZSB0byBhbGxvY2F0ZQogICoJQGhhbmRsZXI6IEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBJUlEgb2NjdXJzLgogICoJCSAgUHJpbWFyeSBoYW5kbGVyIGZvciB0aHJlYWRlZCBpbnRlcnJ1cHRzCisgKgkJICBJZiBOVUxMIGFuZCB0aHJlYWRfZm4gIT0gTlVMTCB0aGUgZGVmYXVsdAorICoJCSAgcHJpbWFyeSBoYW5kbGVyIGlzIGluc3RhbGxlZAogICoJQHRocmVhZF9mbjogRnVuY3Rpb24gY2FsbGVkIGZyb20gdGhlIGlycSBoYW5kbGVyIHRocmVhZAogICoJCSAgICBJZiBOVUxMLCBubyBpcnEgdGhyZWFkIGlzIGNyZWF0ZWQKICAqCUBpcnFmbGFnczogSW50ZXJydXB0IHR5cGUgZmxhZ3MKQEAgLTk2Myw4ICsxMDQyLDEyIEBACiAKIAlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX05PUkVRVUVTVCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFoYW5kbGVyKQotCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghaGFuZGxlcikgeworCQlpZiAoIXRocmVhZF9mbikKKwkJCXJldHVybiAtRUlOVkFMOworCQloYW5kbGVyID0gaXJxX2RlZmF1bHRfcHJpbWFyeV9oYW5kbGVyOworCX0KIAogCWFjdGlvbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcnFhY3Rpb24pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFjdGlvbikKQEAgLTk3Niw3ICsxMDU5LDEwIEBACiAJYWN0aW9uLT5uYW1lID0gZGV2bmFtZTsKIAlhY3Rpb24tPmRldl9pZCA9IGRldl9pZDsKIAorCWNoaXBfYnVzX2xvY2soaXJxLCBkZXNjKTsKIAlyZXR2YWwgPSBfX3NldHVwX2lycShpcnEsIGRlc2MsIGFjdGlvbik7CisJY2hpcF9idXNfc3luY191bmxvY2soaXJxLCBkZXNjKTsKKwogCWlmIChyZXR2YWwpCiAJCWtmcmVlKGFjdGlvbik7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcG0uYyBiL2tlcm5lbC9pcnEvcG0uYwppbmRleCA2MzhkOGJlLi5hMGJiMDllIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3BtLmMKKysrIGIva2VybmVsL2lycS9wbS5jCkBAIC0xNSwxMCArMTUsMTAgQEAKIC8qKgogICogc3VzcGVuZF9kZXZpY2VfaXJxcyAtIGRpc2FibGUgYWxsIGN1cnJlbnRseSBlbmFibGVkIGludGVycnVwdCBsaW5lcwogICoKLSAqIER1cmluZyBzeXN0ZW0td2lkZSBzdXNwZW5kIG9yIGhpYmVybmF0aW9uIGRldmljZSBpbnRlcnJ1cHRzIG5lZWQgdG8gYmUKLSAqIGRpc2FibGVkIGF0IHRoZSBjaGlwIGxldmVsIGFuZCB0aGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciB0aGlzIHB1cnBvc2UuCi0gKiBJdCBkaXNhYmxlcyBhbGwgaW50ZXJydXB0IGxpbmVzIHRoYXQgYXJlIGVuYWJsZWQgYXQgdGhlIG1vbWVudCBhbmQgc2V0cyB0aGUKLSAqIElSUV9TVVNQRU5ERUQgZmxhZyBmb3IgdGhlbS4KKyAqIER1cmluZyBzeXN0ZW0td2lkZSBzdXNwZW5kIG9yIGhpYmVybmF0aW9uIGRldmljZSBkcml2ZXJzIG5lZWQgdG8gYmUgcHJldmVudGVkCisgKiBmcm9tIHJlY2VpdmluZyBpbnRlcnJ1cHRzIGFuZCB0aGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciB0aGlzIHB1cnBvc2UuCisgKiBJdCBtYXJrcyBhbGwgaW50ZXJydXB0IGxpbmVzIGluIHVzZSwgZXhjZXB0IGZvciB0aGUgdGltZXIgb25lcywgYXMgZGlzYWJsZWQKKyAqIGFuZCBzZXRzIHRoZSBJUlFfU1VTUEVOREVEIGZsYWcgZm9yIGVhY2ggb2YgdGhlbS4KICAqLwogdm9pZCBzdXNwZW5kX2RldmljZV9pcnFzKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3Jlc2VuZC5jIGIva2VybmVsL2lycS9yZXNlbmQuYwppbmRleCA4OWM3MTE3Li4wOTBjMzc2IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3Jlc2VuZC5jCisrKyBiL2tlcm5lbC9pcnEvcmVzZW5kLmMKQEAgLTcwLDggKzcwLDcgQEAKIAlpZiAoKHN0YXR1cyAmIChJUlFfTEVWRUwgfCBJUlFfUEVORElORyB8IElSUV9SRVBMQVkpKSA9PSBJUlFfUEVORElORykgewogCQlkZXNjLT5zdGF0dXMgPSAoc3RhdHVzICYgfklSUV9QRU5ESU5HKSB8IElSUV9SRVBMQVk7CiAKLQkJaWYgKCFkZXNjLT5jaGlwIHx8ICFkZXNjLT5jaGlwLT5yZXRyaWdnZXIgfHwKLQkJCQkJIWRlc2MtPmNoaXAtPnJldHJpZ2dlcihpcnEpKSB7CisJCWlmICghZGVzYy0+Y2hpcC0+cmV0cmlnZ2VyIHx8ICFkZXNjLT5jaGlwLT5yZXRyaWdnZXIoaXJxKSkgewogI2lmZGVmIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQKIAkJCS8qIFNldCBpdCBwZW5kaW5nIGFuZCBhY3RpdmF0ZSB0aGUgc29mdGlycTogKi8KIAkJCXNldF9iaXQoaXJxLCBpcnFzX3Jlc2VuZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKaW5kZXggNGQ1NjgyOS4uMTE0ZTcwNCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9zcHVyaW91cy5jCisrKyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwpAQCAtMjk3LDcgKzI5Nyw2IEBACiAKIF9fc2V0dXAoImlycWZpeHVwIiwgaXJxZml4dXBfc2V0dXApOwogbW9kdWxlX3BhcmFtKGlycWZpeHVwLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQygiaXJxZml4dXAiLCAiMDogTm8gZml4dXAsIDE6IGlycWZpeHVwIG1vZGUsIDI6IGlycXBvbGwgbW9kZSIpOwogCiBzdGF0aWMgaW50IF9faW5pdCBpcnFwb2xsX3NldHVwKGNoYXIgKnN0cikKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IDM4NWMzMWEuLjlmY2I1M2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL21vZHVsZS5oPgorCiBleHRlcm4gaW50IG1heF90aHJlYWRzOwogCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtoZWxwZXJfd3E7CkBAIC03OCw2ICs4MCwxMCBAQAogI2RlZmluZSBNQVhfS01PRF9DT05DVVJSRU5UIDUwCS8qIENvbXBsZXRlbHkgYXJiaXRyYXJ5IHZhbHVlIC0gS0FPICovCiAJc3RhdGljIGludCBrbW9kX2xvb3BfbXNnOwogCisJcmV0ID0gc2VjdXJpdHlfa2VybmVsX21vZHVsZV9yZXF1ZXN0KCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CiAJcmV0ID0gdnNucHJpbnRmKG1vZHVsZV9uYW1lLCBNT0RVTEVfTkFNRV9MRU4sIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwpAQCAtMTA4LDYgKzExNCw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCXRyYWNlX21vZHVsZV9yZXF1ZXN0KG1vZHVsZV9uYW1lLCB3YWl0LCBfUkVUX0lQXyk7CisKIAlyZXQgPSBjYWxsX3VzZXJtb2RlaGVscGVyKG1vZHByb2JlX3BhdGgsIGFyZ3YsIGVudnAsCiAJCQl3YWl0ID8gVU1IX1dBSVRfUFJPQyA6IFVNSF9XQUlUX0VYRUMpOwogCWF0b21pY19kZWMoJmttb2RfY29uY3VycmVudCk7CkBAIC00NjIsNiArNDcwLDcgQEAKIAlpbnQgcmV0dmFsID0gMDsKIAogCUJVR19PTihhdG9taWNfcmVhZCgmc3ViX2luZm8tPmNyZWQtPnVzYWdlKSAhPSAxKTsKKwl2YWxpZGF0ZV9jcmVkcyhzdWJfaW5mby0+Y3JlZCk7CiAKIAloZWxwZXJfbG9jaygpOwogCWlmIChzdWJfaW5mby0+cGF0aFswXSA9PSAnXDAnKQpkaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggMDU0MDk0OC4uZWYxNzdkNiAxMDA2NDQKLS0tIGEva2VybmVsL2twcm9iZXMuYworKysgYi9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xMDMsNyArMTAzLDcgQEAKICNkZWZpbmUgSU5TTlNfUEVSX1BBR0UJKFBBR0VfU0laRS8oTUFYX0lOU05fU0laRSAqIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKSkKIAogc3RydWN0IGtwcm9iZV9pbnNuX3BhZ2UgewotCXN0cnVjdCBobGlzdF9ub2RlIGhsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlrcHJvYmVfb3Bjb2RlX3QgKmluc25zOwkJLyogUGFnZSBvZiBpbnN0cnVjdGlvbiBzbG90cyAqLwogCWNoYXIgc2xvdF91c2VkW0lOU05TX1BFUl9QQUdFXTsKIAlpbnQgbnVzZWQ7CkBAIC0xMTcsNyArMTE3LDcgQEAKIH07CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoa3Byb2JlX2luc25fbXV0ZXgpOwkvKiBQcm90ZWN0cyBrcHJvYmVfaW5zbl9wYWdlcyAqLwotc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIGtwcm9iZV9pbnNuX3BhZ2VzOworc3RhdGljIExJU1RfSEVBRChrcHJvYmVfaW5zbl9wYWdlcyk7CiBzdGF0aWMgaW50IGtwcm9iZV9nYXJiYWdlX3Nsb3RzOwogc3RhdGljIGludCBjb2xsZWN0X2dhcmJhZ2Vfc2xvdHModm9pZCk7CiAKQEAgLTE1MiwxMCArMTUyLDkgQEAKIHN0YXRpYyBrcHJvYmVfb3Bjb2RlX3QgX19rcHJvYmVzICpfX2dldF9pbnNuX3Nsb3Qodm9pZCkKIHsKIAlzdHJ1Y3Qga3Byb2JlX2luc25fcGFnZSAqa2lwOwotCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CiAKICByZXRyeToKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShraXAsIHBvcywgJmtwcm9iZV9pbnNuX3BhZ2VzLCBobGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoa2lwLCAma3Byb2JlX2luc25fcGFnZXMsIGxpc3QpIHsKIAkJaWYgKGtpcC0+bnVzZWQgPCBJTlNOU19QRVJfUEFHRSkgewogCQkJaW50IGk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgSU5TTlNfUEVSX1BBR0U7IGkrKykgewpAQCAtMTg5LDggKzE4OCw4IEBACiAJCWtmcmVlKGtpcCk7CiAJCXJldHVybiBOVUxMOwogCX0KLQlJTklUX0hMSVNUX05PREUoJmtpcC0+aGxpc3QpOwotCWhsaXN0X2FkZF9oZWFkKCZraXAtPmhsaXN0LCAma3Byb2JlX2luc25fcGFnZXMpOworCUlOSVRfTElTVF9IRUFEKCZraXAtPmxpc3QpOworCWxpc3RfYWRkKCZraXAtPmxpc3QsICZrcHJvYmVfaW5zbl9wYWdlcyk7CiAJbWVtc2V0KGtpcC0+c2xvdF91c2VkLCBTTE9UX0NMRUFOLCBJTlNOU19QRVJfUEFHRSk7CiAJa2lwLT5zbG90X3VzZWRbMF0gPSBTTE9UX1VTRUQ7CiAJa2lwLT5udXNlZCA9IDE7CkBAIC0yMTksMTIgKzIxOCw4IEBACiAJCSAqIHNvIGFzIG5vdCB0byBoYXZlIHRvIHNldCBpdCB1cCBhZ2FpbiB0aGUKIAkJICogbmV4dCB0aW1lIHNvbWVib2R5IGluc2VydHMgYSBwcm9iZS4KIAkJICovCi0JCWhsaXN0X2RlbCgma2lwLT5obGlzdCk7Ci0JCWlmIChobGlzdF9lbXB0eSgma3Byb2JlX2luc25fcGFnZXMpKSB7Ci0JCQlJTklUX0hMSVNUX05PREUoJmtpcC0+aGxpc3QpOwotCQkJaGxpc3RfYWRkX2hlYWQoJmtpcC0+aGxpc3QsCi0JCQkJICAgICAgICZrcHJvYmVfaW5zbl9wYWdlcyk7Ci0JCX0gZWxzZSB7CisJCWlmICghbGlzdF9pc19zaW5ndWxhcigma3Byb2JlX2luc25fcGFnZXMpKSB7CisJCQlsaXN0X2RlbCgma2lwLT5saXN0KTsKIAkJCW1vZHVsZV9mcmVlKE5VTEwsIGtpcC0+aW5zbnMpOwogCQkJa2ZyZWUoa2lwKTsKIAkJfQpAQCAtMjM1LDE0ICsyMzAsMTMgQEAKIAogc3RhdGljIGludCBfX2twcm9iZXMgY29sbGVjdF9nYXJiYWdlX3Nsb3RzKHZvaWQpCiB7Ci0Jc3RydWN0IGtwcm9iZV9pbnNuX3BhZ2UgKmtpcDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDsKKwlzdHJ1Y3Qga3Byb2JlX2luc25fcGFnZSAqa2lwLCAqbmV4dDsKIAogCS8qIEVuc3VyZSBuby1vbmUgaXMgcHJlZXBtdGVkIG9uIHRoZSBnYXJiYWdlcyAqLwogCWlmIChjaGVja19zYWZldHkoKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtpcCwgcG9zLCBuZXh0LCAma3Byb2JlX2luc25fcGFnZXMsIGhsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtpcCwgbmV4dCwgJmtwcm9iZV9pbnNuX3BhZ2VzLCBsaXN0KSB7CiAJCWludCBpOwogCQlpZiAoa2lwLT5uZ2FyYmFnZSA9PSAwKQogCQkJY29udGludWU7CkBAIC0yNjAsMTkgKzI1NCwxNyBAQAogdm9pZCBfX2twcm9iZXMgZnJlZV9pbnNuX3Nsb3Qoa3Byb2JlX29wY29kZV90ICogc2xvdCwgaW50IGRpcnR5KQogewogCXN0cnVjdCBrcHJvYmVfaW5zbl9wYWdlICpraXA7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKnBvczsKIAogCW11dGV4X2xvY2soJmtwcm9iZV9pbnNuX211dGV4KTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShraXAsIHBvcywgJmtwcm9iZV9pbnNuX3BhZ2VzLCBobGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoa2lwLCAma3Byb2JlX2luc25fcGFnZXMsIGxpc3QpIHsKIAkJaWYgKGtpcC0+aW5zbnMgPD0gc2xvdCAmJgogCQkgICAgc2xvdCA8IGtpcC0+aW5zbnMgKyAoSU5TTlNfUEVSX1BBR0UgKiBNQVhfSU5TTl9TSVpFKSkgewogCQkJaW50IGkgPSAoc2xvdCAtIGtpcC0+aW5zbnMpIC8gTUFYX0lOU05fU0laRTsKIAkJCWlmIChkaXJ0eSkgewogCQkJCWtpcC0+c2xvdF91c2VkW2ldID0gU0xPVF9ESVJUWTsKIAkJCQlraXAtPm5nYXJiYWdlKys7Ci0JCQl9IGVsc2UgeworCQkJfSBlbHNlCiAJCQkJY29sbGVjdF9vbmVfc2xvdChraXAsIGkpOwotCQkJfQogCQkJYnJlYWs7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwva3RocmVhZC5jIGIva2VybmVsL2t0aHJlYWQuYwppbmRleCBlYjg3NTFhLi41ZmU3MDk5IDEwMDY0NAotLS0gYS9rZXJuZWwva3RocmVhZC5jCisrKyBiL2tlcm5lbC9rdGhyZWFkLmMKQEAgLTE2LDggKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zY2hlZC5oPgogCi0jZGVmaW5lIEtUSFJFQURfTklDRV9MRVZFTCAoLTUpCi0KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soa3RocmVhZF9jcmVhdGVfbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKGt0aHJlYWRfY3JlYXRlX2xpc3QpOwogc3RydWN0IHRhc2tfc3RydWN0ICprdGhyZWFkZF90YXNrOwpAQCAtMTQ1LDcgKzE0Myw2IEBACiAJCSAqIFRoZSBrZXJuZWwgdGhyZWFkIHNob3VsZCBub3QgaW5oZXJpdCB0aGVzZSBwcm9wZXJ0aWVzLgogCQkgKi8KIAkJc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2soY3JlYXRlLnJlc3VsdCwgU0NIRURfTk9STUFMLCAmcGFyYW0pOwotCQlzZXRfdXNlcl9uaWNlKGNyZWF0ZS5yZXN1bHQsIEtUSFJFQURfTklDRV9MRVZFTCk7CiAJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGNyZWF0ZS5yZXN1bHQsIGNwdV9hbGxfbWFzayk7CiAJfQogCXJldHVybiBjcmVhdGUucmVzdWx0OwpAQCAtMjIxLDcgKzIxOCw2IEBACiAJLyogU2V0dXAgYSBjbGVhbiBjb250ZXh0IGZvciBvdXIgY2hpbGRyZW4gdG8gaW5oZXJpdC4gKi8KIAlzZXRfdGFza19jb21tKHRzaywgImt0aHJlYWRkIik7CiAJaWdub3JlX3NpZ25hbHModHNrKTsKLQlzZXRfdXNlcl9uaWNlKHRzaywgS1RIUkVBRF9OSUNFX0xFVkVMKTsKIAlzZXRfY3B1c19hbGxvd2VkX3B0cih0c2ssIGNwdV9hbGxfbWFzayk7CiAJc2V0X21lbXNfYWxsb3dlZChub2RlX3Bvc3NpYmxlX21hcCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2RlcC5jCmluZGV4IDhiYmVlZjkuLmY3NGQyZDcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCkBAIC0zNjYsMTEgKzM2NywyMSBAQAogCiAJc2F2ZV9zdGFja190cmFjZSh0cmFjZSk7CiAKKwkvKgorCSAqIFNvbWUgZGFmdCBhcmNoZXMgcHV0IC0xIGF0IHRoZSBlbmQgdG8gaW5kaWNhdGUgaXRzIGEgZnVsbCB0cmFjZS4KKwkgKgorCSAqIDxyYW50PiB0aGlzIGlzIGJ1Z2d5IGFueXdheSwgc2luY2UgaXQgdGFrZXMgYSB3aG9sZSBleHRyYSBlbnRyeSBzbyBhCisJICogY29tcGxldGUgdHJhY2UgdGhhdCBtYXhlcyBvdXQgdGhlIGVudHJpZXMgcHJvdmlkZWQgd2lsbCBiZSByZXBvcnRlZAorCSAqIGFzIGluY29tcGxldGUsIGZyaWdnaW4gdXNlbGVzcyA8L3JhbnQ+CisJICovCisJaWYgKHRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzLTFdID09IFVMT05HX01BWCkKKwkJdHJhY2UtPm5yX2VudHJpZXMtLTsKKwogCXRyYWNlLT5tYXhfZW50cmllcyA9IHRyYWNlLT5ucl9lbnRyaWVzOwogCiAJbnJfc3RhY2tfdHJhY2VfZW50cmllcyArPSB0cmFjZS0+bnJfZW50cmllczsKIAotCWlmIChucl9zdGFja190cmFjZV9lbnRyaWVzID09IE1BWF9TVEFDS19UUkFDRV9FTlRSSUVTKSB7CisJaWYgKG5yX3N0YWNrX3RyYWNlX2VudHJpZXMgPj0gTUFYX1NUQUNLX1RSQUNFX0VOVFJJRVMtMSkgewogCQlpZiAoIWRlYnVnX2xvY2tzX29mZl9ncmFwaF91bmxvY2soKSkKIAkJCXJldHVybiAwOwogCkBAIC0zODgsMjAgKzM5OSw2IEBACiB1bnNpZ25lZCBpbnQgbnJfc29mdGlycV9jaGFpbnM7CiB1bnNpZ25lZCBpbnQgbnJfcHJvY2Vzc19jaGFpbnM7CiB1bnNpZ25lZCBpbnQgbWF4X2xvY2tkZXBfZGVwdGg7Ci11bnNpZ25lZCBpbnQgbWF4X3JlY3Vyc2lvbl9kZXB0aDsKLQotc3RhdGljIHVuc2lnbmVkIGludCBsb2NrZGVwX2RlcGVuZGVuY3lfZ2VuX2lkOwotCi1zdGF0aWMgYm9vbCBsb2NrZGVwX2RlcGVuZGVuY3lfdmlzaXQoc3RydWN0IGxvY2tfY2xhc3MgKnNvdXJjZSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBkZXB0aCkKLXsKLQlpZiAoIWRlcHRoKQotCQlsb2NrZGVwX2RlcGVuZGVuY3lfZ2VuX2lkKys7Ci0JaWYgKHNvdXJjZS0+ZGVwX2dlbl9pZCA9PSBsb2NrZGVwX2RlcGVuZGVuY3lfZ2VuX2lkKQotCQlyZXR1cm4gdHJ1ZTsKLQlzb3VyY2UtPmRlcF9nZW5faWQgPSBsb2NrZGVwX2RlcGVuZGVuY3lfZ2VuX2lkOwotCXJldHVybiBmYWxzZTsKLX0KIAogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLREVQCiAvKgpAQCAtNDMxLDExICs0MjgsOCBAQAogYXRvbWljX3QgcmVkdW5kYW50X3NvZnRpcnFzX29mZjsKIGF0b21pY190IG5yX3VudXNlZF9sb2NrczsKIGF0b21pY190IG5yX2N5Y2xpY19jaGVja3M7Ci1hdG9taWNfdCBucl9jeWNsaWNfY2hlY2tfcmVjdXJzaW9uczsKIGF0b21pY190IG5yX2ZpbmRfdXNhZ2VfZm9yd2FyZHNfY2hlY2tzOwotYXRvbWljX3QgbnJfZmluZF91c2FnZV9mb3J3YXJkc19yZWN1cnNpb25zOwogYXRvbWljX3QgbnJfZmluZF91c2FnZV9iYWNrd2FyZHNfY2hlY2tzOwotYXRvbWljX3QgbnJfZmluZF91c2FnZV9iYWNrd2FyZHNfcmVjdXJzaW9uczsKICNlbmRpZgogCiAvKgpAQCAtNTUxLDU4ICs1NDUsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfbG9ja19jbGFzc19oZWFkZXIoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzLCBpbnQgZGVwdGgpCi17Ci0JaW50IGJpdDsKLQotCXByaW50aygiJSpzLT4iLCBkZXB0aCwgIiIpOwotCXByaW50X2xvY2tfbmFtZShjbGFzcyk7Ci0JcHJpbnRrKCIgb3BzOiAlbHUiLCBjbGFzcy0+b3BzKTsKLQlwcmludGsoIiB7XG4iKTsKLQotCWZvciAoYml0ID0gMDsgYml0IDwgTE9DS19VU0FHRV9TVEFURVM7IGJpdCsrKSB7Ci0JCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmICgxIDw8IGJpdCkpIHsKLQkJCWludCBsZW4gPSBkZXB0aDsKLQotCQkJbGVuICs9IHByaW50aygiJSpzICAgJXMiLCBkZXB0aCwgIiIsIHVzYWdlX3N0cltiaXRdKTsKLQkJCWxlbiArPSBwcmludGsoIiBhdDpcbiIpOwotCQkJcHJpbnRfc3RhY2tfdHJhY2UoY2xhc3MtPnVzYWdlX3RyYWNlcyArIGJpdCwgbGVuKTsKLQkJfQotCX0KLQlwcmludGsoIiUqcyB9XG4iLCBkZXB0aCwgIiIpOwotCi0JcHJpbnRrKCIlKnMgLi4uIGtleSAgICAgIGF0OiAiLGRlcHRoLCIiKTsKLQlwcmludF9pcF9zeW0oKHVuc2lnbmVkIGxvbmcpY2xhc3MtPmtleSk7Ci19Ci0KLS8qCi0gKiBwcmludGsgYWxsIGxvY2sgZGVwZW5kZW5jaWVzIHN0YXJ0aW5nIGF0IDxlbnRyeT46Ci0gKi8KLXN0YXRpYyB2b2lkIF9fdXNlZAotcHJpbnRfbG9ja19kZXBlbmRlbmNpZXMoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzLCBpbnQgZGVwdGgpCi17Ci0Jc3RydWN0IGxvY2tfbGlzdCAqZW50cnk7Ci0KLQlpZiAobG9ja2RlcF9kZXBlbmRlbmN5X3Zpc2l0KGNsYXNzLCBkZXB0aCkpCi0JCXJldHVybjsKLQotCWlmIChERUJVR19MT0NLU19XQVJOX09OKGRlcHRoID49IDIwKSkKLQkJcmV0dXJuOwotCi0JcHJpbnRfbG9ja19jbGFzc19oZWFkZXIoY2xhc3MsIGRlcHRoKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZjbGFzcy0+bG9ja3NfYWZ0ZXIsIGVudHJ5KSB7Ci0JCWlmIChERUJVR19MT0NLU19XQVJOX09OKCFlbnRyeS0+Y2xhc3MpKQotCQkJcmV0dXJuOwotCi0JCXByaW50X2xvY2tfZGVwZW5kZW5jaWVzKGVudHJ5LT5jbGFzcywgZGVwdGggKyAxKTsKLQotCQlwcmludGsoIiUqcyAuLi4gYWNxdWlyZWQgYXQ6XG4iLGRlcHRoLCIiKTsKLQkJcHJpbnRfc3RhY2tfdHJhY2UoJmVudHJ5LT50cmFjZSwgMik7Ci0JCXByaW50aygiXG4iKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHByaW50X2tlcm5lbF92ZXJzaW9uKHZvaWQpCiB7CiAJcHJpbnRrKCIlcyAlLipzXG4iLCBpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKQEAgLTg5OCwyMiArODQwLDIwMyBAQAogfQogCiAvKgorICogRm9yIGdvb2QgZWZmaWNpZW5jeSBvZiBtb2R1bGFyLCB3ZSB1c2UgcG93ZXIgb2YgMgorICovCisjZGVmaW5lIE1BWF9DSVJDVUxBUl9RVUVVRV9TSVpFCQk0MDk2VUwKKyNkZWZpbmUgQ1FfTUFTSwkJCQkoTUFYX0NJUkNVTEFSX1FVRVVFX1NJWkUtMSkKKworLyoKKyAqIFRoZSBjaXJjdWxhcl9xdWV1ZSBhbmQgaGVscGVycyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUKKyAqIGJyZWFkdGgtZmlyc3Qgc2VhcmNoKEJGUylhbGdvcml0aGVtLCBieSB3aGljaCB3ZSBjYW4gYnVpbGQKKyAqIHRoZSBzaG9ydGVzdCBwYXRoIGZyb20gdGhlIG5leHQgbG9jayB0byBiZSBhY3F1aXJlZCB0byB0aGUKKyAqIHByZXZpb3VzIGhlbGQgbG9jayBpZiB0aGVyZSBpcyBhIGNpcmN1bGFyIGJldHdlZW4gdGhlbS4KKyAqLworc3RydWN0IGNpcmN1bGFyX3F1ZXVlIHsKKwl1bnNpZ25lZCBsb25nIGVsZW1lbnRbTUFYX0NJUkNVTEFSX1FVRVVFX1NJWkVdOworCXVuc2lnbmVkIGludCAgZnJvbnQsIHJlYXI7Cit9OworCitzdGF0aWMgc3RydWN0IGNpcmN1bGFyX3F1ZXVlIGxvY2tfY3E7CisKK3Vuc2lnbmVkIGludCBtYXhfYmZzX3F1ZXVlX2RlcHRoOworCitzdGF0aWMgdW5zaWduZWQgaW50IGxvY2tkZXBfZGVwZW5kZW5jeV9nZW5faWQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NxX2luaXQoc3RydWN0IGNpcmN1bGFyX3F1ZXVlICpjcSkKK3sKKwljcS0+ZnJvbnQgPSBjcS0+cmVhciA9IDA7CisJbG9ja2RlcF9kZXBlbmRlbmN5X2dlbl9pZCsrOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2NxX2VtcHR5KHN0cnVjdCBjaXJjdWxhcl9xdWV1ZSAqY3EpCit7CisJcmV0dXJuIChjcS0+ZnJvbnQgPT0gY3EtPnJlYXIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2NxX2Z1bGwoc3RydWN0IGNpcmN1bGFyX3F1ZXVlICpjcSkKK3sKKwlyZXR1cm4gKChjcS0+cmVhciArIDEpICYgQ1FfTUFTSykgPT0gY3EtPmZyb250OworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2NxX2VucXVldWUoc3RydWN0IGNpcmN1bGFyX3F1ZXVlICpjcSwgdW5zaWduZWQgbG9uZyBlbGVtKQoreworCWlmIChfX2NxX2Z1bGwoY3EpKQorCQlyZXR1cm4gLTE7CisKKwljcS0+ZWxlbWVudFtjcS0+cmVhcl0gPSBlbGVtOworCWNxLT5yZWFyID0gKGNxLT5yZWFyICsgMSkgJiBDUV9NQVNLOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2NxX2RlcXVldWUoc3RydWN0IGNpcmN1bGFyX3F1ZXVlICpjcSwgdW5zaWduZWQgbG9uZyAqZWxlbSkKK3sKKwlpZiAoX19jcV9lbXB0eShjcSkpCisJCXJldHVybiAtMTsKKworCSplbGVtID0gY3EtPmVsZW1lbnRbY3EtPmZyb250XTsKKwljcS0+ZnJvbnQgPSAoY3EtPmZyb250ICsgMSkgJiBDUV9NQVNLOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCAgX19jcV9nZXRfZWxlbV9jb3VudChzdHJ1Y3QgY2lyY3VsYXJfcXVldWUgKmNxKQoreworCXJldHVybiAoY3EtPnJlYXIgLSBjcS0+ZnJvbnQpICYgQ1FfTUFTSzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hcmtfbG9ja19hY2Nlc3NlZChzdHJ1Y3QgbG9ja19saXN0ICpsb2NrLAorCQkJCQlzdHJ1Y3QgbG9ja19saXN0ICpwYXJlbnQpCit7CisJdW5zaWduZWQgbG9uZyBucjsKKworCW5yID0gbG9jayAtIGxpc3RfZW50cmllczsKKwlXQVJOX09OKG5yID49IG5yX2xpc3RfZW50cmllcyk7CisJbG9jay0+cGFyZW50ID0gcGFyZW50OworCWxvY2stPmNsYXNzLT5kZXBfZ2VuX2lkID0gbG9ja2RlcF9kZXBlbmRlbmN5X2dlbl9pZDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvY2tfYWNjZXNzZWQoc3RydWN0IGxvY2tfbGlzdCAqbG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIG5yOworCisJbnIgPSBsb2NrIC0gbGlzdF9lbnRyaWVzOworCVdBUk5fT04obnIgPj0gbnJfbGlzdF9lbnRyaWVzKTsKKwlyZXR1cm4gbG9jay0+Y2xhc3MtPmRlcF9nZW5faWQgPT0gbG9ja2RlcF9kZXBlbmRlbmN5X2dlbl9pZDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbG9ja19saXN0ICpnZXRfbG9ja19wYXJlbnQoc3RydWN0IGxvY2tfbGlzdCAqY2hpbGQpCit7CisJcmV0dXJuIGNoaWxkLT5wYXJlbnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9sb2NrX2RlcHRoKHN0cnVjdCBsb2NrX2xpc3QgKmNoaWxkKQoreworCWludCBkZXB0aCA9IDA7CisJc3RydWN0IGxvY2tfbGlzdCAqcGFyZW50OworCisJd2hpbGUgKChwYXJlbnQgPSBnZXRfbG9ja19wYXJlbnQoY2hpbGQpKSkgeworCQljaGlsZCA9IHBhcmVudDsKKwkJZGVwdGgrKzsKKwl9CisJcmV0dXJuIGRlcHRoOworfQorCitzdGF0aWMgaW50IF9fYmZzKHN0cnVjdCBsb2NrX2xpc3QgKnNvdXJjZV9lbnRyeSwKKwkJIHZvaWQgKmRhdGEsCisJCSBpbnQgKCptYXRjaCkoc3RydWN0IGxvY2tfbGlzdCAqZW50cnksIHZvaWQgKmRhdGEpLAorCQkgc3RydWN0IGxvY2tfbGlzdCAqKnRhcmdldF9lbnRyeSwKKwkJIGludCBmb3J3YXJkKQoreworCXN0cnVjdCBsb2NrX2xpc3QgKmVudHJ5OworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGNpcmN1bGFyX3F1ZXVlICpjcSA9ICZsb2NrX2NxOworCWludCByZXQgPSAxOworCisJaWYgKG1hdGNoKHNvdXJjZV9lbnRyeSwgZGF0YSkpIHsKKwkJKnRhcmdldF9lbnRyeSA9IHNvdXJjZV9lbnRyeTsKKwkJcmV0ID0gMDsKKwkJZ290byBleGl0OworCX0KKworCWlmIChmb3J3YXJkKQorCQloZWFkID0gJnNvdXJjZV9lbnRyeS0+Y2xhc3MtPmxvY2tzX2FmdGVyOworCWVsc2UKKwkJaGVhZCA9ICZzb3VyY2VfZW50cnktPmNsYXNzLT5sb2Nrc19iZWZvcmU7CisKKwlpZiAobGlzdF9lbXB0eShoZWFkKSkKKwkJZ290byBleGl0OworCisJX19jcV9pbml0KGNxKTsKKwlfX2NxX2VucXVldWUoY3EsICh1bnNpZ25lZCBsb25nKXNvdXJjZV9lbnRyeSk7CisKKwl3aGlsZSAoIV9fY3FfZW1wdHkoY3EpKSB7CisJCXN0cnVjdCBsb2NrX2xpc3QgKmxvY2s7CisKKwkJX19jcV9kZXF1ZXVlKGNxLCAodW5zaWduZWQgbG9uZyAqKSZsb2NrKTsKKworCQlpZiAoIWxvY2stPmNsYXNzKSB7CisJCQlyZXQgPSAtMjsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWlmIChmb3J3YXJkKQorCQkJaGVhZCA9ICZsb2NrLT5jbGFzcy0+bG9ja3NfYWZ0ZXI7CisJCWVsc2UKKwkJCWhlYWQgPSAmbG9jay0+Y2xhc3MtPmxvY2tzX2JlZm9yZTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBoZWFkLCBlbnRyeSkgeworCQkJaWYgKCFsb2NrX2FjY2Vzc2VkKGVudHJ5KSkgeworCQkJCXVuc2lnbmVkIGludCBjcV9kZXB0aDsKKwkJCQltYXJrX2xvY2tfYWNjZXNzZWQoZW50cnksIGxvY2spOworCQkJCWlmIChtYXRjaChlbnRyeSwgZGF0YSkpIHsKKwkJCQkJKnRhcmdldF9lbnRyeSA9IGVudHJ5OworCQkJCQlyZXQgPSAwOworCQkJCQlnb3RvIGV4aXQ7CisJCQkJfQorCisJCQkJaWYgKF9fY3FfZW5xdWV1ZShjcSwgKHVuc2lnbmVkIGxvbmcpZW50cnkpKSB7CisJCQkJCXJldCA9IC0xOworCQkJCQlnb3RvIGV4aXQ7CisJCQkJfQorCQkJCWNxX2RlcHRoID0gX19jcV9nZXRfZWxlbV9jb3VudChjcSk7CisJCQkJaWYgKG1heF9iZnNfcXVldWVfZGVwdGggPCBjcV9kZXB0aCkKKwkJCQkJbWF4X2Jmc19xdWV1ZV9kZXB0aCA9IGNxX2RlcHRoOworCQkJfQorCQl9CisJfQorZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2Jmc19mb3J3YXJkcyhzdHJ1Y3QgbG9ja19saXN0ICpzcmNfZW50cnksCisJCQl2b2lkICpkYXRhLAorCQkJaW50ICgqbWF0Y2gpKHN0cnVjdCBsb2NrX2xpc3QgKmVudHJ5LCB2b2lkICpkYXRhKSwKKwkJCXN0cnVjdCBsb2NrX2xpc3QgKip0YXJnZXRfZW50cnkpCit7CisJcmV0dXJuIF9fYmZzKHNyY19lbnRyeSwgZGF0YSwgbWF0Y2gsIHRhcmdldF9lbnRyeSwgMSk7CisKK30KKworc3RhdGljIGlubGluZSBpbnQgX19iZnNfYmFja3dhcmRzKHN0cnVjdCBsb2NrX2xpc3QgKnNyY19lbnRyeSwKKwkJCXZvaWQgKmRhdGEsCisJCQlpbnQgKCptYXRjaCkoc3RydWN0IGxvY2tfbGlzdCAqZW50cnksIHZvaWQgKmRhdGEpLAorCQkJc3RydWN0IGxvY2tfbGlzdCAqKnRhcmdldF9lbnRyeSkKK3sKKwlyZXR1cm4gX19iZnMoc3JjX2VudHJ5LCBkYXRhLCBtYXRjaCwgdGFyZ2V0X2VudHJ5LCAwKTsKKworfQorCisvKgogICogUmVjdXJzaXZlLCBmb3J3YXJkcy1kaXJlY3Rpb24gbG9jay1kZXBlbmRlbmN5IGNoZWNraW5nLCB1c2VkIGZvcgogICogYm90aCBub25jeWNsaWMgY2hlY2tpbmcgYW5kIGZvciBoYXJkaXJxLXVuc2FmZS9zb2Z0aXJxLXVuc2FmZQogICogY2hlY2tpbmcuCi0gKgotICogKHRvIGtlZXAgdGhlIHN0YWNrZnJhbWUgb2YgdGhlIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgc21hbGwgd2UKLSAqICB1c2UgdGhlc2UgZ2xvYmFsIHZhcmlhYmxlcywgYW5kIHdlIGFsc28gbWFyayB2YXJpb3VzIGhlbHBlcgotICogIGZ1bmN0aW9ucyBhcyBub2lubGluZS4pCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaGVsZF9sb2NrICpjaGVja19zb3VyY2UsICpjaGVja190YXJnZXQ7CiAKIC8qCiAgKiBQcmludCBhIGRlcGVuZGVuY3kgY2hhaW4gZW50cnkgKHRoaXMgaXMgb25seSBkb25lIHdoZW4gYSBkZWFkbG9jawogICogaGFzIGJlZW4gZGV0ZWN0ZWQpOgogICovCiBzdGF0aWMgbm9pbmxpbmUgaW50Ci1wcmludF9jaXJjdWxhcl9idWdfZW50cnkoc3RydWN0IGxvY2tfbGlzdCAqdGFyZ2V0LCB1bnNpZ25lZCBpbnQgZGVwdGgpCitwcmludF9jaXJjdWxhcl9idWdfZW50cnkoc3RydWN0IGxvY2tfbGlzdCAqdGFyZ2V0LCBpbnQgZGVwdGgpCiB7CiAJaWYgKGRlYnVnX2xvY2tzX3NpbGVudCkKIAkJcmV0dXJuIDA7CkBAIC05MzAsMTEgKzEwNTMsMTMgQEAKICAqIGhlYWRlciBmaXJzdDoKICAqLwogc3RhdGljIG5vaW5saW5lIGludAotcHJpbnRfY2lyY3VsYXJfYnVnX2hlYWRlcihzdHJ1Y3QgbG9ja19saXN0ICplbnRyeSwgdW5zaWduZWQgaW50IGRlcHRoKQorcHJpbnRfY2lyY3VsYXJfYnVnX2hlYWRlcihzdHJ1Y3QgbG9ja19saXN0ICplbnRyeSwgdW5zaWduZWQgaW50IGRlcHRoLAorCQkJc3RydWN0IGhlbGRfbG9jayAqY2hlY2tfc3JjLAorCQkJc3RydWN0IGhlbGRfbG9jayAqY2hlY2tfdGd0KQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CiAKLQlpZiAoIWRlYnVnX2xvY2tzX29mZl9ncmFwaF91bmxvY2soKSB8fCBkZWJ1Z19sb2Nrc19zaWxlbnQpCisJaWYgKGRlYnVnX2xvY2tzX3NpbGVudCkKIAkJcmV0dXJuIDA7CiAKIAlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CkBAIC05NDMsOSArMTA2OCw5IEBACiAJcHJpbnRrKCAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCXByaW50aygiJXMvJWQgaXMgdHJ5aW5nIHRvIGFjcXVpcmUgbG9jazpcbiIsCiAJCWN1cnItPmNvbW0sIHRhc2tfcGlkX25yKGN1cnIpKTsKLQlwcmludF9sb2NrKGNoZWNrX3NvdXJjZSk7CisJcHJpbnRfbG9jayhjaGVja19zcmMpOwogCXByaW50aygiXG5idXQgdGFzayBpcyBhbHJlYWR5IGhvbGRpbmcgbG9jazpcbiIpOwotCXByaW50X2xvY2soY2hlY2tfdGFyZ2V0KTsKKwlwcmludF9sb2NrKGNoZWNrX3RndCk7CiAJcHJpbnRrKCJcbndoaWNoIGxvY2sgYWxyZWFkeSBkZXBlbmRzIG9uIHRoZSBuZXcgbG9jay5cblxuIik7CiAJcHJpbnRrKCJcbnRoZSBleGlzdGluZyBkZXBlbmRlbmN5IGNoYWluIChpbiByZXZlcnNlIG9yZGVyKSBpczpcbiIpOwogCkBAIC05NTQsMTkgKzEwNzksMzYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIG5vaW5saW5lIGludCBwcmludF9jaXJjdWxhcl9idWdfdGFpbCh2b2lkKQorc3RhdGljIGlubGluZSBpbnQgY2xhc3NfZXF1YWwoc3RydWN0IGxvY2tfbGlzdCAqZW50cnksIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGVudHJ5LT5jbGFzcyA9PSBkYXRhOworfQorCitzdGF0aWMgbm9pbmxpbmUgaW50IHByaW50X2NpcmN1bGFyX2J1ZyhzdHJ1Y3QgbG9ja19saXN0ICp0aGlzLAorCQkJCXN0cnVjdCBsb2NrX2xpc3QgKnRhcmdldCwKKwkJCQlzdHJ1Y3QgaGVsZF9sb2NrICpjaGVja19zcmMsCisJCQkJc3RydWN0IGhlbGRfbG9jayAqY2hlY2tfdGd0KQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7Ci0Jc3RydWN0IGxvY2tfbGlzdCB0aGlzOworCXN0cnVjdCBsb2NrX2xpc3QgKnBhcmVudDsKKwlpbnQgZGVwdGg7CiAKLQlpZiAoZGVidWdfbG9ja3Nfc2lsZW50KQorCWlmICghZGVidWdfbG9ja3Nfb2ZmX2dyYXBoX3VubG9jaygpIHx8IGRlYnVnX2xvY2tzX3NpbGVudCkKIAkJcmV0dXJuIDA7CiAKLQl0aGlzLmNsYXNzID0gaGxvY2tfY2xhc3MoY2hlY2tfc291cmNlKTsKLQlpZiAoIXNhdmVfdHJhY2UoJnRoaXMudHJhY2UpKQorCWlmICghc2F2ZV90cmFjZSgmdGhpcy0+dHJhY2UpKQogCQlyZXR1cm4gMDsKIAotCXByaW50X2NpcmN1bGFyX2J1Z19lbnRyeSgmdGhpcywgMCk7CisJZGVwdGggPSBnZXRfbG9ja19kZXB0aCh0YXJnZXQpOworCisJcHJpbnRfY2lyY3VsYXJfYnVnX2hlYWRlcih0YXJnZXQsIGRlcHRoLCBjaGVja19zcmMsIGNoZWNrX3RndCk7CisKKwlwYXJlbnQgPSBnZXRfbG9ja19wYXJlbnQodGFyZ2V0KTsKKworCXdoaWxlIChwYXJlbnQpIHsKKwkJcHJpbnRfY2lyY3VsYXJfYnVnX2VudHJ5KHBhcmVudCwgLS1kZXB0aCk7CisJCXBhcmVudCA9IGdldF9sb2NrX3BhcmVudChwYXJlbnQpOworCX0KIAogCXByaW50aygiXG5vdGhlciBpbmZvIHRoYXQgbWlnaHQgaGVscCB1cyBkZWJ1ZyB0aGlzOlxuXG4iKTsKIAlsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MoY3Vycik7CkBAIC05NzcsNzMgKzExMTksNjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBSRUNVUlNJT05fTElNSVQgNDAKLQotc3RhdGljIGludCBub2lubGluZSBwcmludF9pbmZpbml0ZV9yZWN1cnNpb25fYnVnKHZvaWQpCitzdGF0aWMgbm9pbmxpbmUgaW50IHByaW50X2Jmc19idWcoaW50IHJldCkKIHsKIAlpZiAoIWRlYnVnX2xvY2tzX29mZl9ncmFwaF91bmxvY2soKSkKIAkJcmV0dXJuIDA7CiAKLQlXQVJOX09OKDEpOworCVdBUk4oMSwgImxvY2tkZXAgYmZzIGVycm9yOiVkXG4iLCByZXQpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIGxvbmcgX19sb2NrZGVwX2NvdW50X2ZvcndhcmRfZGVwcyhzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsCi0JCQkJCSAgIHVuc2lnbmVkIGludCBkZXB0aCkKK3N0YXRpYyBpbnQgbm9vcF9jb3VudChzdHJ1Y3QgbG9ja19saXN0ICplbnRyeSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbG9ja19saXN0ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIHJldCA9IDE7Ci0KLQlpZiAobG9ja2RlcF9kZXBlbmRlbmN5X3Zpc2l0KGNsYXNzLCBkZXB0aCkpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBSZWN1cnNlIHRoaXMgY2xhc3MncyBkZXBlbmRlbmN5IGxpc3Q6Ci0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmNsYXNzLT5sb2Nrc19hZnRlciwgZW50cnkpCi0JCXJldCArPSBfX2xvY2tkZXBfY291bnRfZm9yd2FyZF9kZXBzKGVudHJ5LT5jbGFzcywgZGVwdGggKyAxKTsKLQotCXJldHVybiByZXQ7CisJKCoodW5zaWduZWQgbG9uZyAqKWRhdGEpKys7CisJcmV0dXJuIDA7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgX19sb2NrZGVwX2NvdW50X2ZvcndhcmRfZGVwcyhzdHJ1Y3QgbG9ja19saXN0ICp0aGlzKQoreworCXVuc2lnbmVkIGxvbmcgIGNvdW50ID0gMDsKKwlzdHJ1Y3QgbG9ja19saXN0ICp1bmluaXRpYWxpemVkX3Zhcih0YXJnZXRfZW50cnkpOworCisJX19iZnNfZm9yd2FyZHModGhpcywgKHZvaWQgKikmY291bnQsIG5vb3BfY291bnQsICZ0YXJnZXRfZW50cnkpOworCisJcmV0dXJuIGNvdW50OworfQogdW5zaWduZWQgbG9uZyBsb2NrZGVwX2NvdW50X2ZvcndhcmRfZGVwcyhzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MpCiB7CiAJdW5zaWduZWQgbG9uZyByZXQsIGZsYWdzOworCXN0cnVjdCBsb2NrX2xpc3QgdGhpczsKKworCXRoaXMucGFyZW50ID0gTlVMTDsKKwl0aGlzLmNsYXNzID0gY2xhc3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJX19yYXdfc3Bpbl9sb2NrKCZsb2NrZGVwX2xvY2spOwotCXJldCA9IF9fbG9ja2RlcF9jb3VudF9mb3J3YXJkX2RlcHMoY2xhc3MsIDApOworCXJldCA9IF9fbG9ja2RlcF9jb3VudF9mb3J3YXJkX2RlcHMoJnRoaXMpOwogCV9fcmF3X3NwaW5fdW5sb2NrKCZsb2NrZGVwX2xvY2spOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXVuc2lnbmVkIGxvbmcgX19sb2NrZGVwX2NvdW50X2JhY2t3YXJkX2RlcHMoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzLAotCQkJCQkgICAgdW5zaWduZWQgaW50IGRlcHRoKQordW5zaWduZWQgbG9uZyBfX2xvY2tkZXBfY291bnRfYmFja3dhcmRfZGVwcyhzdHJ1Y3QgbG9ja19saXN0ICp0aGlzKQogewotCXN0cnVjdCBsb2NrX2xpc3QgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgcmV0ID0gMTsKKwl1bnNpZ25lZCBsb25nICBjb3VudCA9IDA7CisJc3RydWN0IGxvY2tfbGlzdCAqdW5pbml0aWFsaXplZF92YXIodGFyZ2V0X2VudHJ5KTsKIAotCWlmIChsb2NrZGVwX2RlcGVuZGVuY3lfdmlzaXQoY2xhc3MsIGRlcHRoKSkKLQkJcmV0dXJuIDA7Ci0JLyoKLQkgKiBSZWN1cnNlIHRoaXMgY2xhc3MncyBkZXBlbmRlbmN5IGxpc3Q6Ci0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmNsYXNzLT5sb2Nrc19iZWZvcmUsIGVudHJ5KQotCQlyZXQgKz0gX19sb2NrZGVwX2NvdW50X2JhY2t3YXJkX2RlcHMoZW50cnktPmNsYXNzLCBkZXB0aCArIDEpOworCV9fYmZzX2JhY2t3YXJkcyh0aGlzLCAodm9pZCAqKSZjb3VudCwgbm9vcF9jb3VudCwgJnRhcmdldF9lbnRyeSk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBjb3VudDsKIH0KIAogdW5zaWduZWQgbG9uZyBsb2NrZGVwX2NvdW50X2JhY2t3YXJkX2RlcHMoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQogewogCXVuc2lnbmVkIGxvbmcgcmV0LCBmbGFnczsKKwlzdHJ1Y3QgbG9ja19saXN0IHRoaXM7CisKKwl0aGlzLnBhcmVudCA9IE5VTEw7CisJdGhpcy5jbGFzcyA9IGNsYXNzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCV9fcmF3X3NwaW5fbG9jaygmbG9ja2RlcF9sb2NrKTsKLQlyZXQgPSBfX2xvY2tkZXBfY291bnRfYmFja3dhcmRfZGVwcyhjbGFzcywgMCk7CisJcmV0ID0gX19sb2NrZGVwX2NvdW50X2JhY2t3YXJkX2RlcHMoJnRoaXMpOwogCV9fcmF3X3NwaW5fdW5sb2NrKCZsb2NrZGVwX2xvY2spOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIApAQCAtMTA1NSwyOSArMTE5MywxNiBAQAogICogbGVhZCB0byA8dGFyZ2V0Pi4gUHJpbnQgYW4gZXJyb3IgYW5kIHJldHVybiAwIGlmIGl0IGRvZXMuCiAgKi8KIHN0YXRpYyBub2lubGluZSBpbnQKLWNoZWNrX25vbmNpcmN1bGFyKHN0cnVjdCBsb2NrX2NsYXNzICpzb3VyY2UsIHVuc2lnbmVkIGludCBkZXB0aCkKK2NoZWNrX25vbmNpcmN1bGFyKHN0cnVjdCBsb2NrX2xpc3QgKnJvb3QsIHN0cnVjdCBsb2NrX2NsYXNzICp0YXJnZXQsCisJCXN0cnVjdCBsb2NrX2xpc3QgKip0YXJnZXRfZW50cnkpCiB7Ci0Jc3RydWN0IGxvY2tfbGlzdCAqZW50cnk7CisJaW50IHJlc3VsdDsKIAotCWlmIChsb2NrZGVwX2RlcGVuZGVuY3lfdmlzaXQoc291cmNlLCBkZXB0aCkpCi0JCXJldHVybiAxOworCWRlYnVnX2F0b21pY19pbmMoJm5yX2N5Y2xpY19jaGVja3MpOwogCi0JZGVidWdfYXRvbWljX2luYygmbnJfY3ljbGljX2NoZWNrX3JlY3Vyc2lvbnMpOwotCWlmIChkZXB0aCA+IG1heF9yZWN1cnNpb25fZGVwdGgpCi0JCW1heF9yZWN1cnNpb25fZGVwdGggPSBkZXB0aDsKLQlpZiAoZGVwdGggPj0gUkVDVVJTSU9OX0xJTUlUKQotCQlyZXR1cm4gcHJpbnRfaW5maW5pdGVfcmVjdXJzaW9uX2J1ZygpOwotCS8qCi0JICogQ2hlY2sgdGhpcyBsb2NrJ3MgZGVwZW5kZW5jeSBsaXN0OgotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZzb3VyY2UtPmxvY2tzX2FmdGVyLCBlbnRyeSkgewotCQlpZiAoZW50cnktPmNsYXNzID09IGhsb2NrX2NsYXNzKGNoZWNrX3RhcmdldCkpCi0JCQlyZXR1cm4gcHJpbnRfY2lyY3VsYXJfYnVnX2hlYWRlcihlbnRyeSwgZGVwdGgrMSk7Ci0JCWRlYnVnX2F0b21pY19pbmMoJm5yX2N5Y2xpY19jaGVja3MpOwotCQlpZiAoIWNoZWNrX25vbmNpcmN1bGFyKGVudHJ5LT5jbGFzcywgZGVwdGgrMSkpCi0JCQlyZXR1cm4gcHJpbnRfY2lyY3VsYXJfYnVnX2VudHJ5KGVudHJ5LCBkZXB0aCsxKTsKLQl9Ci0JcmV0dXJuIDE7CisJcmVzdWx0ID0gX19iZnNfZm9yd2FyZHMocm9vdCwgdGFyZ2V0LCBjbGFzc19lcXVhbCwgdGFyZ2V0X2VudHJ5KTsKKworCXJldHVybiByZXN1bHQ7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19UUkFDRV9JUlFGTEFHUykgJiYgZGVmaW5lZChDT05GSUdfUFJPVkVfTE9DS0lORykKQEAgLTEwODYsMTAzICsxMjExLDEyMSBAQAogICogcHJvdmluZyB0aGF0IHR3byBzdWJncmFwaHMgY2FuIGJlIGNvbm5lY3RlZCBieSBhIG5ldyBkZXBlbmRlbmN5CiAgKiB3aXRob3V0IGNyZWF0aW5nIGFueSBpbGxlZ2FsIGlycS1zYWZlIC0+IGlycS11bnNhZmUgbG9jayBkZXBlbmRlbmN5LgogICovCi1zdGF0aWMgZW51bSBsb2NrX3VzYWdlX2JpdCBmaW5kX3VzYWdlX2JpdDsKLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzcyAqZm9yd2FyZHNfbWF0Y2gsICpiYWNrd2FyZHNfbWF0Y2g7CisKK3N0YXRpYyBpbmxpbmUgaW50IHVzYWdlX21hdGNoKHN0cnVjdCBsb2NrX2xpc3QgKmVudHJ5LCB2b2lkICpiaXQpCit7CisJcmV0dXJuIGVudHJ5LT5jbGFzcy0+dXNhZ2VfbWFzayAmICgxIDw8IChlbnVtIGxvY2tfdXNhZ2VfYml0KWJpdCk7Cit9CisKKwogCiAvKgogICogRmluZCBhIG5vZGUgaW4gdGhlIGZvcndhcmRzLWRpcmVjdGlvbiBkZXBlbmRlbmN5IHN1Yi1ncmFwaCBzdGFydGluZwotICogYXQgPHNvdXJjZT4gdGhhdCBtYXRjaGVzIDxmaW5kX3VzYWdlX2JpdD4uCisgKiBhdCBAcm9vdC0+Y2xhc3MgdGhhdCBtYXRjaGVzIEBiaXQuCiAgKgotICogUmV0dXJuIDIgaWYgc3VjaCBhIG5vZGUgZXhpc3RzIGluIHRoZSBzdWJncmFwaCwgYW5kIHB1dCB0aGF0IG5vZGUKLSAqIGludG8gPGZvcndhcmRzX21hdGNoPi4KKyAqIFJldHVybiAwIGlmIHN1Y2ggYSBub2RlIGV4aXN0cyBpbiB0aGUgc3ViZ3JhcGgsIGFuZCBwdXQgdGhhdCBub2RlCisgKiBpbnRvICpAdGFyZ2V0X2VudHJ5LgogICoKLSAqIFJldHVybiAxIG90aGVyd2lzZSBhbmQga2VlcCA8Zm9yd2FyZHNfbWF0Y2g+IHVuY2hhbmdlZC4KLSAqIFJldHVybiAwIG9uIGVycm9yLgorICogUmV0dXJuIDEgb3RoZXJ3aXNlIGFuZCBrZWVwICpAdGFyZ2V0X2VudHJ5IHVuY2hhbmdlZC4KKyAqIFJldHVybiA8MCBvbiBlcnJvci4KICAqLwotc3RhdGljIG5vaW5saW5lIGludAotZmluZF91c2FnZV9mb3J3YXJkcyhzdHJ1Y3QgbG9ja19jbGFzcyAqc291cmNlLCB1bnNpZ25lZCBpbnQgZGVwdGgpCitzdGF0aWMgaW50CitmaW5kX3VzYWdlX2ZvcndhcmRzKHN0cnVjdCBsb2NrX2xpc3QgKnJvb3QsIGVudW0gbG9ja191c2FnZV9iaXQgYml0LAorCQkJc3RydWN0IGxvY2tfbGlzdCAqKnRhcmdldF9lbnRyeSkKIHsKLQlzdHJ1Y3QgbG9ja19saXN0ICplbnRyeTsKLQlpbnQgcmV0OwotCi0JaWYgKGxvY2tkZXBfZGVwZW5kZW5jeV92aXNpdChzb3VyY2UsIGRlcHRoKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoZGVwdGggPiBtYXhfcmVjdXJzaW9uX2RlcHRoKQotCQltYXhfcmVjdXJzaW9uX2RlcHRoID0gZGVwdGg7Ci0JaWYgKGRlcHRoID49IFJFQ1VSU0lPTl9MSU1JVCkKLQkJcmV0dXJuIHByaW50X2luZmluaXRlX3JlY3Vyc2lvbl9idWcoKTsKKwlpbnQgcmVzdWx0OwogCiAJZGVidWdfYXRvbWljX2luYygmbnJfZmluZF91c2FnZV9mb3J3YXJkc19jaGVja3MpOwotCWlmIChzb3VyY2UtPnVzYWdlX21hc2sgJiAoMSA8PCBmaW5kX3VzYWdlX2JpdCkpIHsKLQkJZm9yd2FyZHNfbWF0Y2ggPSBzb3VyY2U7Ci0JCXJldHVybiAyOwotCX0KIAotCS8qCi0JICogQ2hlY2sgdGhpcyBsb2NrJ3MgZGVwZW5kZW5jeSBsaXN0OgotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZzb3VyY2UtPmxvY2tzX2FmdGVyLCBlbnRyeSkgewotCQlkZWJ1Z19hdG9taWNfaW5jKCZucl9maW5kX3VzYWdlX2ZvcndhcmRzX3JlY3Vyc2lvbnMpOwotCQlyZXQgPSBmaW5kX3VzYWdlX2ZvcndhcmRzKGVudHJ5LT5jbGFzcywgZGVwdGgrMSk7Ci0JCWlmIChyZXQgPT0gMiB8fCByZXQgPT0gMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAxOworCXJlc3VsdCA9IF9fYmZzX2ZvcndhcmRzKHJvb3QsICh2b2lkICopYml0LCB1c2FnZV9tYXRjaCwgdGFyZ2V0X2VudHJ5KTsKKworCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qCiAgKiBGaW5kIGEgbm9kZSBpbiB0aGUgYmFja3dhcmRzLWRpcmVjdGlvbiBkZXBlbmRlbmN5IHN1Yi1ncmFwaCBzdGFydGluZwotICogYXQgPHNvdXJjZT4gdGhhdCBtYXRjaGVzIDxmaW5kX3VzYWdlX2JpdD4uCisgKiBhdCBAcm9vdC0+Y2xhc3MgdGhhdCBtYXRjaGVzIEBiaXQuCiAgKgotICogUmV0dXJuIDIgaWYgc3VjaCBhIG5vZGUgZXhpc3RzIGluIHRoZSBzdWJncmFwaCwgYW5kIHB1dCB0aGF0IG5vZGUKLSAqIGludG8gPGJhY2t3YXJkc19tYXRjaD4uCisgKiBSZXR1cm4gMCBpZiBzdWNoIGEgbm9kZSBleGlzdHMgaW4gdGhlIHN1YmdyYXBoLCBhbmQgcHV0IHRoYXQgbm9kZQorICogaW50byAqQHRhcmdldF9lbnRyeS4KICAqCi0gKiBSZXR1cm4gMSBvdGhlcndpc2UgYW5kIGtlZXAgPGJhY2t3YXJkc19tYXRjaD4gdW5jaGFuZ2VkLgotICogUmV0dXJuIDAgb24gZXJyb3IuCisgKiBSZXR1cm4gMSBvdGhlcndpc2UgYW5kIGtlZXAgKkB0YXJnZXRfZW50cnkgdW5jaGFuZ2VkLgorICogUmV0dXJuIDwwIG9uIGVycm9yLgogICovCi1zdGF0aWMgbm9pbmxpbmUgaW50Ci1maW5kX3VzYWdlX2JhY2t3YXJkcyhzdHJ1Y3QgbG9ja19jbGFzcyAqc291cmNlLCB1bnNpZ25lZCBpbnQgZGVwdGgpCitzdGF0aWMgaW50CitmaW5kX3VzYWdlX2JhY2t3YXJkcyhzdHJ1Y3QgbG9ja19saXN0ICpyb290LCBlbnVtIGxvY2tfdXNhZ2VfYml0IGJpdCwKKwkJCXN0cnVjdCBsb2NrX2xpc3QgKip0YXJnZXRfZW50cnkpCiB7Ci0Jc3RydWN0IGxvY2tfbGlzdCAqZW50cnk7Ci0JaW50IHJldDsKLQotCWlmIChsb2NrZGVwX2RlcGVuZGVuY3lfdmlzaXQoc291cmNlLCBkZXB0aCkpCi0JCXJldHVybiAxOwotCi0JaWYgKCFfX3Jhd19zcGluX2lzX2xvY2tlZCgmbG9ja2RlcF9sb2NrKSkKLQkJcmV0dXJuIERFQlVHX0xPQ0tTX1dBUk5fT04oMSk7Ci0KLQlpZiAoZGVwdGggPiBtYXhfcmVjdXJzaW9uX2RlcHRoKQotCQltYXhfcmVjdXJzaW9uX2RlcHRoID0gZGVwdGg7Ci0JaWYgKGRlcHRoID49IFJFQ1VSU0lPTl9MSU1JVCkKLQkJcmV0dXJuIHByaW50X2luZmluaXRlX3JlY3Vyc2lvbl9idWcoKTsKKwlpbnQgcmVzdWx0OwogCiAJZGVidWdfYXRvbWljX2luYygmbnJfZmluZF91c2FnZV9iYWNrd2FyZHNfY2hlY2tzKTsKLQlpZiAoc291cmNlLT51c2FnZV9tYXNrICYgKDEgPDwgZmluZF91c2FnZV9iaXQpKSB7Ci0JCWJhY2t3YXJkc19tYXRjaCA9IHNvdXJjZTsKLQkJcmV0dXJuIDI7Ci0JfQogCi0JaWYgKCFzb3VyY2UgJiYgZGVidWdfbG9ja3Nfb2ZmX2dyYXBoX3VubG9jaygpKSB7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybiAwOwotCX0KKwlyZXN1bHQgPSBfX2Jmc19iYWNrd2FyZHMocm9vdCwgKHZvaWQgKiliaXQsIHVzYWdlX21hdGNoLCB0YXJnZXRfZW50cnkpOwogCi0JLyoKLQkgKiBDaGVjayB0aGlzIGxvY2sncyBkZXBlbmRlbmN5IGxpc3Q6Ci0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnNvdXJjZS0+bG9ja3NfYmVmb3JlLCBlbnRyeSkgewotCQlkZWJ1Z19hdG9taWNfaW5jKCZucl9maW5kX3VzYWdlX2JhY2t3YXJkc19yZWN1cnNpb25zKTsKLQkJcmV0ID0gZmluZF91c2FnZV9iYWNrd2FyZHMoZW50cnktPmNsYXNzLCBkZXB0aCsxKTsKLQkJaWYgKHJldCA9PSAyIHx8IHJldCA9PSAwKQotCQkJcmV0dXJuIHJldDsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBwcmludF9sb2NrX2NsYXNzX2hlYWRlcihzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsIGludCBkZXB0aCkKK3sKKwlpbnQgYml0OworCisJcHJpbnRrKCIlKnMtPiIsIGRlcHRoLCAiIik7CisJcHJpbnRfbG9ja19uYW1lKGNsYXNzKTsKKwlwcmludGsoIiBvcHM6ICVsdSIsIGNsYXNzLT5vcHMpOworCXByaW50aygiIHtcbiIpOworCisJZm9yIChiaXQgPSAwOyBiaXQgPCBMT0NLX1VTQUdFX1NUQVRFUzsgYml0KyspIHsKKwkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgKDEgPDwgYml0KSkgeworCQkJaW50IGxlbiA9IGRlcHRoOworCisJCQlsZW4gKz0gcHJpbnRrKCIlKnMgICAlcyIsIGRlcHRoLCAiIiwgdXNhZ2Vfc3RyW2JpdF0pOworCQkJbGVuICs9IHByaW50aygiIGF0OlxuIik7CisJCQlwcmludF9zdGFja190cmFjZShjbGFzcy0+dXNhZ2VfdHJhY2VzICsgYml0LCBsZW4pOworCQl9CiAJfQotCXJldHVybiAxOworCXByaW50aygiJSpzIH1cbiIsIGRlcHRoLCAiIik7CisKKwlwcmludGsoIiUqcyAuLi4ga2V5ICAgICAgYXQ6ICIsZGVwdGgsIiIpOworCXByaW50X2lwX3N5bSgodW5zaWduZWQgbG9uZyljbGFzcy0+a2V5KTsKK30KKworLyoKKyAqIHByaW50ayB0aGUgc2hvcnRlc3QgbG9jayBkZXBlbmRlbmNpZXMgZnJvbSBAc3RhcnQgdG8gQGVuZCBpbiByZXZlcnNlIG9yZGVyOgorICovCitzdGF0aWMgdm9pZCBfX3VzZWQKK3ByaW50X3Nob3J0ZXN0X2xvY2tfZGVwZW5kZW5jaWVzKHN0cnVjdCBsb2NrX2xpc3QgKmxlYWYsCisJCQkJc3RydWN0IGxvY2tfbGlzdCAqcm9vdCkKK3sKKwlzdHJ1Y3QgbG9ja19saXN0ICplbnRyeSA9IGxlYWY7CisJaW50IGRlcHRoOworCisJLypjb21wdXRlIGRlcHRoIGZyb20gZ2VuZXJhdGVkIHRyZWUgYnkgQkZTKi8KKwlkZXB0aCA9IGdldF9sb2NrX2RlcHRoKGxlYWYpOworCisJZG8geworCQlwcmludF9sb2NrX2NsYXNzX2hlYWRlcihlbnRyeS0+Y2xhc3MsIGRlcHRoKTsKKwkJcHJpbnRrKCIlKnMgLi4uIGFjcXVpcmVkIGF0OlxuIiwgZGVwdGgsICIiKTsKKwkJcHJpbnRfc3RhY2tfdHJhY2UoJmVudHJ5LT50cmFjZSwgMik7CisJCXByaW50aygiXG4iKTsKKworCQlpZiAoZGVwdGggPT0gMCAmJiAoZW50cnkgIT0gcm9vdCkpIHsKKwkJCXByaW50aygibG9ja2RlcDolcyBiYWQgQkZTIGdlbmVyYXRlZCB0cmVlXG4iLCBfX2Z1bmNfXyk7CisJCQlicmVhazsKKwkJfQorCisJCWVudHJ5ID0gZ2V0X2xvY2tfcGFyZW50KGVudHJ5KTsKKwkJZGVwdGgtLTsKKwl9IHdoaWxlIChlbnRyeSAmJiAoZGVwdGggPj0gMCkpOworCisJcmV0dXJuOwogfQogCiBzdGF0aWMgaW50CiBwcmludF9iYWRfaXJxX2RlcGVuZGVuY3koc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLAorCQkJIHN0cnVjdCBsb2NrX2xpc3QgKnByZXZfcm9vdCwKKwkJCSBzdHJ1Y3QgbG9ja19saXN0ICpuZXh0X3Jvb3QsCisJCQkgc3RydWN0IGxvY2tfbGlzdCAqYmFja3dhcmRzX2VudHJ5LAorCQkJIHN0cnVjdCBsb2NrX2xpc3QgKmZvcndhcmRzX2VudHJ5LAogCQkJIHN0cnVjdCBoZWxkX2xvY2sgKnByZXYsCiAJCQkgc3RydWN0IGhlbGRfbG9jayAqbmV4dCwKIAkJCSBlbnVtIGxvY2tfdXNhZ2VfYml0IGJpdDEsCkBAIC0xMjE1LDI2ICsxMzU4LDMyIEBACiAKIAlwcmludGsoIlxuYnV0IHRoaXMgbmV3IGRlcGVuZGVuY3kgY29ubmVjdHMgYSAlcy1pcnEtc2FmZSBsb2NrOlxuIiwKIAkJaXJxY2xhc3MpOwotCXByaW50X2xvY2tfbmFtZShiYWNrd2FyZHNfbWF0Y2gpOworCXByaW50X2xvY2tfbmFtZShiYWNrd2FyZHNfZW50cnktPmNsYXNzKTsKIAlwcmludGsoIlxuLi4uIHdoaWNoIGJlY2FtZSAlcy1pcnEtc2FmZSBhdDpcbiIsIGlycWNsYXNzKTsKIAotCXByaW50X3N0YWNrX3RyYWNlKGJhY2t3YXJkc19tYXRjaC0+dXNhZ2VfdHJhY2VzICsgYml0MSwgMSk7CisJcHJpbnRfc3RhY2tfdHJhY2UoYmFja3dhcmRzX2VudHJ5LT5jbGFzcy0+dXNhZ2VfdHJhY2VzICsgYml0MSwgMSk7CiAKIAlwcmludGsoIlxudG8gYSAlcy1pcnEtdW5zYWZlIGxvY2s6XG4iLCBpcnFjbGFzcyk7Ci0JcHJpbnRfbG9ja19uYW1lKGZvcndhcmRzX21hdGNoKTsKKwlwcmludF9sb2NrX25hbWUoZm9yd2FyZHNfZW50cnktPmNsYXNzKTsKIAlwcmludGsoIlxuLi4uIHdoaWNoIGJlY2FtZSAlcy1pcnEtdW5zYWZlIGF0OlxuIiwgaXJxY2xhc3MpOwogCXByaW50aygiLi4uIik7CiAKLQlwcmludF9zdGFja190cmFjZShmb3J3YXJkc19tYXRjaC0+dXNhZ2VfdHJhY2VzICsgYml0MiwgMSk7CisJcHJpbnRfc3RhY2tfdHJhY2UoZm9yd2FyZHNfZW50cnktPmNsYXNzLT51c2FnZV90cmFjZXMgKyBiaXQyLCAxKTsKIAogCXByaW50aygiXG5vdGhlciBpbmZvIHRoYXQgbWlnaHQgaGVscCB1cyBkZWJ1ZyB0aGlzOlxuXG4iKTsKIAlsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MoY3Vycik7CiAKLQlwcmludGsoIlxudGhlICVzLWlycS1zYWZlIGxvY2sncyBkZXBlbmRlbmNpZXM6XG4iLCBpcnFjbGFzcyk7Ci0JcHJpbnRfbG9ja19kZXBlbmRlbmNpZXMoYmFja3dhcmRzX21hdGNoLCAwKTsKKwlwcmludGsoIlxudGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuICVzLWlycS1zYWZlIGxvY2siLCBpcnFjbGFzcyk7CisJcHJpbnRrKCIgYW5kIHRoZSBob2xkaW5nIGxvY2s6XG4iKTsKKwlpZiAoIXNhdmVfdHJhY2UoJnByZXZfcm9vdC0+dHJhY2UpKQorCQlyZXR1cm4gMDsKKwlwcmludF9zaG9ydGVzdF9sb2NrX2RlcGVuZGVuY2llcyhiYWNrd2FyZHNfZW50cnksIHByZXZfcm9vdCk7CiAKLQlwcmludGsoIlxudGhlICVzLWlycS11bnNhZmUgbG9jaydzIGRlcGVuZGVuY2llczpcbiIsIGlycWNsYXNzKTsKLQlwcmludF9sb2NrX2RlcGVuZGVuY2llcyhmb3J3YXJkc19tYXRjaCwgMCk7CisJcHJpbnRrKCJcbnRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgbG9jayB0byBiZSBhY3F1aXJlZCIpOworCXByaW50aygiIGFuZCAlcy1pcnEtdW5zYWZlIGxvY2s6XG4iLCBpcnFjbGFzcyk7CisJaWYgKCFzYXZlX3RyYWNlKCZuZXh0X3Jvb3QtPnRyYWNlKSkKKwkJcmV0dXJuIDA7CisJcHJpbnRfc2hvcnRlc3RfbG9ja19kZXBlbmRlbmNpZXMoZm9yd2FyZHNfZW50cnksIG5leHRfcm9vdCk7CiAKIAlwcmludGsoIlxuc3RhY2sgYmFja3RyYWNlOlxuIik7CiAJZHVtcF9zdGFjaygpOwpAQCAtMTI0OCwxOSArMTM5NywzMCBAQAogCSAgICBlbnVtIGxvY2tfdXNhZ2VfYml0IGJpdF9mb3J3YXJkcywgY29uc3QgY2hhciAqaXJxY2xhc3MpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgbG9ja19saXN0IHRoaXMsIHRoYXQ7CisJc3RydWN0IGxvY2tfbGlzdCAqdW5pbml0aWFsaXplZF92YXIodGFyZ2V0X2VudHJ5KTsKKwlzdHJ1Y3QgbG9ja19saXN0ICp1bmluaXRpYWxpemVkX3Zhcih0YXJnZXRfZW50cnkxKTsKIAotCWZpbmRfdXNhZ2VfYml0ID0gYml0X2JhY2t3YXJkczsKLQkvKiBmaWxscyBpbiA8YmFja3dhcmRzX21hdGNoPiAqLwotCXJldCA9IGZpbmRfdXNhZ2VfYmFja3dhcmRzKGhsb2NrX2NsYXNzKHByZXYpLCAwKTsKLQlpZiAoIXJldCB8fCByZXQgPT0gMSkKKwl0aGlzLnBhcmVudCA9IE5VTEw7CisKKwl0aGlzLmNsYXNzID0gaGxvY2tfY2xhc3MocHJldik7CisJcmV0ID0gZmluZF91c2FnZV9iYWNrd2FyZHMoJnRoaXMsIGJpdF9iYWNrd2FyZHMsICZ0YXJnZXRfZW50cnkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcHJpbnRfYmZzX2J1ZyhyZXQpOworCWlmIChyZXQgPT0gMSkKIAkJcmV0dXJuIHJldDsKIAotCWZpbmRfdXNhZ2VfYml0ID0gYml0X2ZvcndhcmRzOwotCXJldCA9IGZpbmRfdXNhZ2VfZm9yd2FyZHMoaGxvY2tfY2xhc3MobmV4dCksIDApOwotCWlmICghcmV0IHx8IHJldCA9PSAxKQorCXRoYXQucGFyZW50ID0gTlVMTDsKKwl0aGF0LmNsYXNzID0gaGxvY2tfY2xhc3MobmV4dCk7CisJcmV0ID0gZmluZF91c2FnZV9mb3J3YXJkcygmdGhhdCwgYml0X2ZvcndhcmRzLCAmdGFyZ2V0X2VudHJ5MSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiBwcmludF9iZnNfYnVnKHJldCk7CisJaWYgKHJldCA9PSAxKQogCQlyZXR1cm4gcmV0OwotCS8qIHJldCA9PSAyICovCi0JcmV0dXJuIHByaW50X2JhZF9pcnFfZGVwZW5kZW5jeShjdXJyLCBwcmV2LCBuZXh0LAorCisJcmV0dXJuIHByaW50X2JhZF9pcnFfZGVwZW5kZW5jeShjdXJyLCAmdGhpcywgJnRoYXQsCisJCQl0YXJnZXRfZW50cnksIHRhcmdldF9lbnRyeTEsCisJCQlwcmV2LCBuZXh0LAogCQkJYml0X2JhY2t3YXJkcywgYml0X2ZvcndhcmRzLCBpcnFjbGFzcyk7CiB9CiAKQEAgLTE0NzIsNiArMTYzMiw4IEBACiB7CiAJc3RydWN0IGxvY2tfbGlzdCAqZW50cnk7CiAJaW50IHJldDsKKwlzdHJ1Y3QgbG9ja19saXN0IHRoaXM7CisJc3RydWN0IGxvY2tfbGlzdCAqdW5pbml0aWFsaXplZF92YXIodGFyZ2V0X2VudHJ5KTsKIAogCS8qCiAJICogUHJvdmUgdGhhdCB0aGUgbmV3IDxwcmV2PiAtPiA8bmV4dD4gZGVwZW5kZW5jeSB3b3VsZCBub3QKQEAgLTE0ODIsMTAgKzE2NDQsMTMgQEAKIAkgKiBXZSBhcmUgdXNpbmcgZ2xvYmFsIHZhcmlhYmxlcyB0byBjb250cm9sIHRoZSByZWN1cnNpb24sIHRvCiAJICoga2VlcCB0aGUgc3RhY2tmcmFtZSBzaXplIG9mIHRoZSByZWN1cnNpdmUgZnVuY3Rpb25zIGxvdzoKIAkgKi8KLQljaGVja19zb3VyY2UgPSBuZXh0OwotCWNoZWNrX3RhcmdldCA9IHByZXY7Ci0JaWYgKCEoY2hlY2tfbm9uY2lyY3VsYXIoaGxvY2tfY2xhc3MobmV4dCksIDApKSkKLQkJcmV0dXJuIHByaW50X2NpcmN1bGFyX2J1Z190YWlsKCk7CisJdGhpcy5jbGFzcyA9IGhsb2NrX2NsYXNzKG5leHQpOworCXRoaXMucGFyZW50ID0gTlVMTDsKKwlyZXQgPSBjaGVja19ub25jaXJjdWxhcigmdGhpcywgaGxvY2tfY2xhc3MocHJldiksICZ0YXJnZXRfZW50cnkpOworCWlmICh1bmxpa2VseSghcmV0KSkKKwkJcmV0dXJuIHByaW50X2NpcmN1bGFyX2J1ZygmdGhpcywgdGFyZ2V0X2VudHJ5LCBuZXh0LCBwcmV2KTsKKwllbHNlIGlmICh1bmxpa2VseShyZXQgPCAwKSkKKwkJcmV0dXJuIHByaW50X2Jmc19idWcocmV0KTsKIAogCWlmICghY2hlY2tfcHJldl9hZGRfaXJxKGN1cnIsIHByZXYsIG5leHQpKQogCQlyZXR1cm4gMDsKQEAgLTE4ODQsNyArMjA0OSw4IEBACiAgKiBwcmludCBpcnEgaW52ZXJzaW9uIGJ1ZzoKICAqLwogc3RhdGljIGludAotcHJpbnRfaXJxX2ludmVyc2lvbl9idWcoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgbG9ja19jbGFzcyAqb3RoZXIsCitwcmludF9pcnFfaW52ZXJzaW9uX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsCisJCQlzdHJ1Y3QgbG9ja19saXN0ICpyb290LCBzdHJ1Y3QgbG9ja19saXN0ICpvdGhlciwKIAkJCXN0cnVjdCBoZWxkX2xvY2sgKnRoaXMsIGludCBmb3J3YXJkcywKIAkJCWNvbnN0IGNoYXIgKmlycWNsYXNzKQogewpAQCAtMTkwMiwxNyArMjA2OCwxNiBAQAogCQlwcmludGsoImJ1dCB0aGlzIGxvY2sgdG9vayBhbm90aGVyLCAlcy11bnNhZmUgbG9jayBpbiB0aGUgcGFzdDpcbiIsIGlycWNsYXNzKTsKIAllbHNlCiAJCXByaW50aygiYnV0IHRoaXMgbG9jayB3YXMgdGFrZW4gYnkgYW5vdGhlciwgJXMtc2FmZSBsb2NrIGluIHRoZSBwYXN0OlxuIiwgaXJxY2xhc3MpOwotCXByaW50X2xvY2tfbmFtZShvdGhlcik7CisJcHJpbnRfbG9ja19uYW1lKG90aGVyLT5jbGFzcyk7CiAJcHJpbnRrKCJcblxuYW5kIGludGVycnVwdHMgY291bGQgY3JlYXRlIGludmVyc2UgbG9jayBvcmRlcmluZyBiZXR3ZWVuIHRoZW0uXG5cbiIpOwogCiAJcHJpbnRrKCJcbm90aGVyIGluZm8gdGhhdCBtaWdodCBoZWxwIHVzIGRlYnVnIHRoaXM6XG4iKTsKIAlsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MoY3Vycik7CiAKLQlwcmludGsoIlxudGhlIGZpcnN0IGxvY2sncyBkZXBlbmRlbmNpZXM6XG4iKTsKLQlwcmludF9sb2NrX2RlcGVuZGVuY2llcyhobG9ja19jbGFzcyh0aGlzKSwgMCk7Ci0KLQlwcmludGsoIlxudGhlIHNlY29uZCBsb2NrJ3MgZGVwZW5kZW5jaWVzOlxuIik7Ci0JcHJpbnRfbG9ja19kZXBlbmRlbmNpZXMob3RoZXIsIDApOworCXByaW50aygiXG50aGUgc2hvcnRlc3QgZGVwZW5kZW5jaWVzIGJldHdlZW4gMm5kIGxvY2sgYW5kIDFzdCBsb2NrOlxuIik7CisJaWYgKCFzYXZlX3RyYWNlKCZyb290LT50cmFjZSkpCisJCXJldHVybiAwOworCXByaW50X3Nob3J0ZXN0X2xvY2tfZGVwZW5kZW5jaWVzKG90aGVyLCByb290KTsKIAogCXByaW50aygiXG5zdGFjayBiYWNrdHJhY2U6XG4iKTsKIAlkdW1wX3N0YWNrKCk7CkBAIC0xOTI5LDE0ICsyMDk0LDE5IEBACiAJCSAgICAgZW51bSBsb2NrX3VzYWdlX2JpdCBiaXQsIGNvbnN0IGNoYXIgKmlycWNsYXNzKQogewogCWludCByZXQ7CisJc3RydWN0IGxvY2tfbGlzdCByb290OworCXN0cnVjdCBsb2NrX2xpc3QgKnVuaW5pdGlhbGl6ZWRfdmFyKHRhcmdldF9lbnRyeSk7CiAKLQlmaW5kX3VzYWdlX2JpdCA9IGJpdDsKLQkvKiBmaWxscyBpbiA8Zm9yd2FyZHNfbWF0Y2g+ICovCi0JcmV0ID0gZmluZF91c2FnZV9mb3J3YXJkcyhobG9ja19jbGFzcyh0aGlzKSwgMCk7Ci0JaWYgKCFyZXQgfHwgcmV0ID09IDEpCisJcm9vdC5wYXJlbnQgPSBOVUxMOworCXJvb3QuY2xhc3MgPSBobG9ja19jbGFzcyh0aGlzKTsKKwlyZXQgPSBmaW5kX3VzYWdlX2ZvcndhcmRzKCZyb290LCBiaXQsICZ0YXJnZXRfZW50cnkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcHJpbnRfYmZzX2J1ZyhyZXQpOworCWlmIChyZXQgPT0gMSkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiBwcmludF9pcnFfaW52ZXJzaW9uX2J1ZyhjdXJyLCBmb3J3YXJkc19tYXRjaCwgdGhpcywgMSwgaXJxY2xhc3MpOworCXJldHVybiBwcmludF9pcnFfaW52ZXJzaW9uX2J1ZyhjdXJyLCAmcm9vdCwgdGFyZ2V0X2VudHJ5LAorCQkJCQl0aGlzLCAxLCBpcnFjbGFzcyk7CiB9CiAKIC8qCkBAIC0xOTQ4LDE0ICsyMTE4LDE5IEBACiAJCSAgICAgIGVudW0gbG9ja191c2FnZV9iaXQgYml0LCBjb25zdCBjaGFyICppcnFjbGFzcykKIHsKIAlpbnQgcmV0OworCXN0cnVjdCBsb2NrX2xpc3Qgcm9vdDsKKwlzdHJ1Y3QgbG9ja19saXN0ICp1bmluaXRpYWxpemVkX3Zhcih0YXJnZXRfZW50cnkpOwogCi0JZmluZF91c2FnZV9iaXQgPSBiaXQ7Ci0JLyogZmlsbHMgaW4gPGJhY2t3YXJkc19tYXRjaD4gKi8KLQlyZXQgPSBmaW5kX3VzYWdlX2JhY2t3YXJkcyhobG9ja19jbGFzcyh0aGlzKSwgMCk7Ci0JaWYgKCFyZXQgfHwgcmV0ID09IDEpCisJcm9vdC5wYXJlbnQgPSBOVUxMOworCXJvb3QuY2xhc3MgPSBobG9ja19jbGFzcyh0aGlzKTsKKwlyZXQgPSBmaW5kX3VzYWdlX2JhY2t3YXJkcygmcm9vdCwgYml0LCAmdGFyZ2V0X2VudHJ5KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHByaW50X2Jmc19idWcocmV0KTsKKwlpZiAocmV0ID09IDEpCiAJCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gcHJpbnRfaXJxX2ludmVyc2lvbl9idWcoY3VyciwgYmFja3dhcmRzX21hdGNoLCB0aGlzLCAwLCBpcnFjbGFzcyk7CisJcmV0dXJuIHByaW50X2lycV9pbnZlcnNpb25fYnVnKGN1cnIsICZyb290LCB0YXJnZXRfZW50cnksCisJCQkJCXRoaXMsIDEsIGlycWNsYXNzKTsKIH0KIAogdm9pZCBwcmludF9pcnF0cmFjZV9ldmVudHMoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKQpAQCAtMjUzMCwxMyArMjcwNSwxNSBAQAogICovCiBzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLAogCQkJICBpbnQgdHJ5bG9jaywgaW50IHJlYWQsIGludCBjaGVjaywgaW50IGhhcmRpcnFzX29mZiwKLQkJCSAgc3RydWN0IGxvY2tkZXBfbWFwICpuZXN0X2xvY2ssIHVuc2lnbmVkIGxvbmcgaXApCisJCQkgIHN0cnVjdCBsb2NrZGVwX21hcCAqbmVzdF9sb2NrLCB1bnNpZ25lZCBsb25nIGlwLAorCQkJICBpbnQgcmVmZXJlbmNlcykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OwogCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IE5VTEw7CiAJc3RydWN0IGhlbGRfbG9jayAqaGxvY2s7CiAJdW5zaWduZWQgaW50IGRlcHRoLCBpZDsKIAlpbnQgY2hhaW5faGVhZCA9IDA7CisJaW50IGNsYXNzX2lkeDsKIAl1NjQgY2hhaW5fa2V5OwogCiAJaWYgKCFwcm92ZV9sb2NraW5nKQpAQCAtMjU4NCwxMCArMjc2MSwyNCBAQAogCWlmIChERUJVR19MT0NLU19XQVJOX09OKGRlcHRoID49IE1BWF9MT0NLX0RFUFRIKSkKIAkJcmV0dXJuIDA7CiAKKwljbGFzc19pZHggPSBjbGFzcyAtIGxvY2tfY2xhc3NlcyArIDE7CisKKwlpZiAoZGVwdGgpIHsKKwkJaGxvY2sgPSBjdXJyLT5oZWxkX2xvY2tzICsgZGVwdGggLSAxOworCQlpZiAoaGxvY2stPmNsYXNzX2lkeCA9PSBjbGFzc19pZHggJiYgbmVzdF9sb2NrKSB7CisJCQlpZiAoaGxvY2stPnJlZmVyZW5jZXMpCisJCQkJaGxvY2stPnJlZmVyZW5jZXMrKzsKKwkJCWVsc2UKKwkJCQlobG9jay0+cmVmZXJlbmNlcyA9IDI7CisKKwkJCXJldHVybiAxOworCQl9CisJfQorCiAJaGxvY2sgPSBjdXJyLT5oZWxkX2xvY2tzICsgZGVwdGg7CiAJaWYgKERFQlVHX0xPQ0tTX1dBUk5fT04oIWNsYXNzKSkKIAkJcmV0dXJuIDA7Ci0JaGxvY2stPmNsYXNzX2lkeCA9IGNsYXNzIC0gbG9ja19jbGFzc2VzICsgMTsKKwlobG9jay0+Y2xhc3NfaWR4ID0gY2xhc3NfaWR4OwogCWhsb2NrLT5hY3F1aXJlX2lwID0gaXA7CiAJaGxvY2stPmluc3RhbmNlID0gbG9jazsKIAlobG9jay0+bmVzdF9sb2NrID0gbmVzdF9sb2NrOwpAQCAtMjU5NSw2ICsyNzg2LDcgQEAKIAlobG9jay0+cmVhZCA9IHJlYWQ7CiAJaGxvY2stPmNoZWNrID0gY2hlY2s7CiAJaGxvY2stPmhhcmRpcnFzX29mZiA9ICEhaGFyZGlycXNfb2ZmOworCWhsb2NrLT5yZWZlcmVuY2VzID0gcmVmZXJlbmNlczsKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiAJaGxvY2stPndhaXR0aW1lX3N0YW1wID0gMDsKIAlobG9jay0+aG9sZHRpbWVfc3RhbXAgPSBzY2hlZF9jbG9jaygpOwpAQCAtMjcwMyw2ICsyODk1LDMwIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgbWF0Y2hfaGVsZF9sb2NrKHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrLCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spCit7CisJaWYgKGhsb2NrLT5pbnN0YW5jZSA9PSBsb2NrKQorCQlyZXR1cm4gMTsKKworCWlmIChobG9jay0+cmVmZXJlbmNlcykgeworCQlzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBsb2NrLT5jbGFzc19jYWNoZTsKKworCQlpZiAoIWNsYXNzKQorCQkJY2xhc3MgPSBsb29rX3VwX2xvY2tfY2xhc3MobG9jaywgMCk7CisKKwkJaWYgKERFQlVHX0xPQ0tTX1dBUk5fT04oIWNsYXNzKSkKKwkJCXJldHVybiAwOworCisJCWlmIChERUJVR19MT0NLU19XQVJOX09OKCFobG9jay0+bmVzdF9sb2NrKSkKKwkJCXJldHVybiAwOworCisJCWlmIChobG9jay0+Y2xhc3NfaWR4ID09IGNsYXNzIC0gbG9ja19jbGFzc2VzICsgMSkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50CiBfX2xvY2tfc2V0X2NsYXNzKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSwKIAkJIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5LCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsCkBAIC0yNzI2LDcgKzI5NDIsNyBAQAogCQkgKi8KIAkJaWYgKHByZXZfaGxvY2sgJiYgcHJldl9obG9jay0+aXJxX2NvbnRleHQgIT0gaGxvY2stPmlycV9jb250ZXh0KQogCQkJYnJlYWs7Ci0JCWlmIChobG9jay0+aW5zdGFuY2UgPT0gbG9jaykKKwkJaWYgKG1hdGNoX2hlbGRfbG9jayhobG9jaywgbG9jaykpCiAJCQlnb3RvIGZvdW5kX2l0OwogCQlwcmV2X2hsb2NrID0gaGxvY2s7CiAJfQpAQCAtMjc0NSw3ICsyOTYxLDggQEAKIAkJaWYgKCFfX2xvY2tfYWNxdWlyZShobG9jay0+aW5zdGFuY2UsCiAJCQlobG9ja19jbGFzcyhobG9jayktPnN1YmNsYXNzLCBobG9jay0+dHJ5bG9jaywKIAkJCQlobG9jay0+cmVhZCwgaGxvY2stPmNoZWNrLCBobG9jay0+aGFyZGlycXNfb2ZmLAotCQkJCWhsb2NrLT5uZXN0X2xvY2ssIGhsb2NrLT5hY3F1aXJlX2lwKSkKKwkJCQlobG9jay0+bmVzdF9sb2NrLCBobG9jay0+YWNxdWlyZV9pcCwKKwkJCQlobG9jay0+cmVmZXJlbmNlcykpCiAJCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI3ODQsMjAgKzMwMDEsMzQgQEAKIAkJICovCiAJCWlmIChwcmV2X2hsb2NrICYmIHByZXZfaGxvY2stPmlycV9jb250ZXh0ICE9IGhsb2NrLT5pcnFfY29udGV4dCkKIAkJCWJyZWFrOwotCQlpZiAoaGxvY2stPmluc3RhbmNlID09IGxvY2spCisJCWlmIChtYXRjaF9oZWxkX2xvY2soaGxvY2ssIGxvY2spKQogCQkJZ290byBmb3VuZF9pdDsKIAkJcHJldl9obG9jayA9IGhsb2NrOwogCX0KIAlyZXR1cm4gcHJpbnRfdW5sb2NrX2luYmFsYW5jZV9idWcoY3VyciwgbG9jaywgaXApOwogCiBmb3VuZF9pdDoKLQlsb2NrX3JlbGVhc2VfaG9sZHRpbWUoaGxvY2spOworCWlmIChobG9jay0+aW5zdGFuY2UgPT0gbG9jaykKKwkJbG9ja19yZWxlYXNlX2hvbGR0aW1lKGhsb2NrKTsKKworCWlmIChobG9jay0+cmVmZXJlbmNlcykgeworCQlobG9jay0+cmVmZXJlbmNlcy0tOworCQlpZiAoaGxvY2stPnJlZmVyZW5jZXMpIHsKKwkJCS8qCisJCQkgKiBXZSBoYWQsIGFuZCBhZnRlciByZW1vdmluZyBvbmUsIHN0aWxsIGhhdmUKKwkJCSAqIHJlZmVyZW5jZXMsIHRoZSBjdXJyZW50IGxvY2sgc3RhY2sgaXMgc3RpbGwKKwkJCSAqIHZhbGlkLiBXZSdyZSBkb25lIQorCQkJICovCisJCQlyZXR1cm4gMTsKKwkJfQorCX0KIAogCS8qCiAJICogV2UgaGF2ZSB0aGUgcmlnaHQgbG9jayB0byB1bmxvY2ssICdobG9jaycgcG9pbnRzIHRvIGl0LgogCSAqIE5vdyB3ZSByZW1vdmUgaXQgZnJvbSB0aGUgc3RhY2ssIGFuZCBhZGQgYmFjayB0aGUgb3RoZXIKIAkgKiBlbnRyaWVzIChpZiBhbnkpLCByZWNhbGN1bGF0aW5nIHRoZSBoYXNoIGFsb25nIHRoZSB3YXk6CiAJICovCisKIAljdXJyLT5sb2NrZGVwX2RlcHRoID0gaTsKIAljdXJyLT5jdXJyX2NoYWluX2tleSA9IGhsb2NrLT5wcmV2X2NoYWluX2tleTsKIApAQCAtMjgwNiw3ICszMDM3LDggQEAKIAkJaWYgKCFfX2xvY2tfYWNxdWlyZShobG9jay0+aW5zdGFuY2UsCiAJCQlobG9ja19jbGFzcyhobG9jayktPnN1YmNsYXNzLCBobG9jay0+dHJ5bG9jaywKIAkJCQlobG9jay0+cmVhZCwgaGxvY2stPmNoZWNrLCBobG9jay0+aGFyZGlycXNfb2ZmLAotCQkJCWhsb2NrLT5uZXN0X2xvY2ssIGhsb2NrLT5hY3F1aXJlX2lwKSkKKwkJCQlobG9jay0+bmVzdF9sb2NrLCBobG9jay0+YWNxdWlyZV9pcCwKKwkJCQlobG9jay0+cmVmZXJlbmNlcykpCiAJCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI4MzYsNyArMzA2OCw3IEBACiAJLyoKIAkgKiBJcyB0aGUgdW5sb2NrIG5vbi1uZXN0ZWQ6CiAJICovCi0JaWYgKGhsb2NrLT5pbnN0YW5jZSAhPSBsb2NrKQorCWlmIChobG9jay0+aW5zdGFuY2UgIT0gbG9jayB8fCBobG9jay0+cmVmZXJlbmNlcykKIAkJcmV0dXJuIGxvY2tfcmVsZWFzZV9ub25fbmVzdGVkKGN1cnIsIGxvY2ssIGlwKTsKIAljdXJyLT5sb2NrZGVwX2RlcHRoLS07CiAKQEAgLTI4ODEsNiArMzExMywyMSBAQAogCWNoZWNrX2NoYWluX2tleShjdXJyKTsKIH0KIAorc3RhdGljIGludCBfX2xvY2tfaXNfaGVsZChzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjdXJyLT5sb2NrZGVwX2RlcHRoOyBpKyspIHsKKwkJc3RydWN0IGhlbGRfbG9jayAqaGxvY2sgPSBjdXJyLT5oZWxkX2xvY2tzICsgaTsKKworCQlpZiAobWF0Y2hfaGVsZF9sb2NrKGhsb2NrLCBsb2NrKSkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCiAvKgogICogQ2hlY2sgd2hldGhlciB3ZSBmb2xsb3cgdGhlIGlycS1mbGFncyBzdGF0ZSBwcmVjaXNlbHk6CiAgKi8KQEAgLTI5NTcsNyArMzIwNCw3IEBACiAKIAljdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbiA9IDE7CiAJX19sb2NrX2FjcXVpcmUobG9jaywgc3ViY2xhc3MsIHRyeWxvY2ssIHJlYWQsIGNoZWNrLAotCQkgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXApOworCQkgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDApOwogCWN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uID0gMDsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpAQCAtMjk4Miw2ICszMjI5LDI2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3JlbGVhc2UpOwogCitpbnQgbG9ja19pc19oZWxkKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uKSkKKwkJcmV0dXJuIHJldDsKKworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY2hlY2tfZmxhZ3MoZmxhZ3MpOworCisJY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24gPSAxOworCXJldCA9IF9fbG9ja19pc19oZWxkKGxvY2spOworCWN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uID0gMDsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tfaXNfaGVsZCk7CisKIHZvaWQgbG9ja2RlcF9zZXRfY3VycmVudF9yZWNsYWltX3N0YXRlKGdmcF90IGdmcF9tYXNrKQogewogCWN1cnJlbnQtPmxvY2tkZXBfcmVjbGFpbV9nZnAgPSBnZnBfbWFzazsKQEAgLTMwNDEsNyArMzMwOCw3IEBACiAJCSAqLwogCQlpZiAocHJldl9obG9jayAmJiBwcmV2X2hsb2NrLT5pcnFfY29udGV4dCAhPSBobG9jay0+aXJxX2NvbnRleHQpCiAJCQlicmVhazsKLQkJaWYgKGhsb2NrLT5pbnN0YW5jZSA9PSBsb2NrKQorCQlpZiAobWF0Y2hfaGVsZF9sb2NrKGhsb2NrLCBsb2NrKSkKIAkJCWdvdG8gZm91bmRfaXQ7CiAJCXByZXZfaGxvY2sgPSBobG9jazsKIAl9CkBAIC0zMDQ5LDYgKzMzMTYsOSBAQAogCXJldHVybjsKIAogZm91bmRfaXQ6CisJaWYgKGhsb2NrLT5pbnN0YW5jZSAhPSBsb2NrKQorCQlyZXR1cm47CisKIAlobG9jay0+d2FpdHRpbWVfc3RhbXAgPSBzY2hlZF9jbG9jaygpOwogCiAJY29udGVudGlvbl9wb2ludCA9IGxvY2tfcG9pbnQoaGxvY2tfY2xhc3MoaGxvY2spLT5jb250ZW50aW9uX3BvaW50LCBpcCk7CkBAIC0zMDg4LDcgKzMzNTgsNyBAQAogCQkgKi8KIAkJaWYgKHByZXZfaGxvY2sgJiYgcHJldl9obG9jay0+aXJxX2NvbnRleHQgIT0gaGxvY2stPmlycV9jb250ZXh0KQogCQkJYnJlYWs7Ci0JCWlmIChobG9jay0+aW5zdGFuY2UgPT0gbG9jaykKKwkJaWYgKG1hdGNoX2hlbGRfbG9jayhobG9jaywgbG9jaykpCiAJCQlnb3RvIGZvdW5kX2l0OwogCQlwcmV2X2hsb2NrID0gaGxvY2s7CiAJfQpAQCAtMzA5Niw2ICszMzY2LDkgQEAKIAlyZXR1cm47CiAKIGZvdW5kX2l0OgorCWlmIChobG9jay0+aW5zdGFuY2UgIT0gbG9jaykKKwkJcmV0dXJuOworCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWlmIChobG9jay0+d2FpdHRpbWVfc3RhbXApIHsKIAkJbm93ID0gc2NoZWRfY2xvY2soKTsKQEAgLTMzMjYsNyArMzU5OSwxMiBAQAogCQlzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkgKiBDTEFTU0hBU0hfU0laRSArCiAJCXNpemVvZihzdHJ1Y3QgbG9ja19saXN0KSAqIE1BWF9MT0NLREVQX0VOVFJJRVMgKwogCQlzaXplb2Yoc3RydWN0IGxvY2tfY2hhaW4pICogTUFYX0xPQ0tERVBfQ0hBSU5TICsKLQkJc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpICogQ0hBSU5IQVNIX1NJWkUpIC8gMTAyNCk7CisJCXNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSAqIENIQUlOSEFTSF9TSVpFCisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKKwkJKyBzaXplb2Yoc3RydWN0IGNpcmN1bGFyX3F1ZXVlKQorI2VuZGlmCisJCSkgLyAxMDI0CisJCSk7CiAKIAlwcmludGsoIiBwZXIgdGFzay1zdHJ1Y3QgbWVtb3J5IGZvb3RwcmludDogJWx1IGJ5dGVzXG4iLAogCQlzaXplb2Yoc3RydWN0IGhlbGRfbG9jaykgKiBNQVhfTE9DS19ERVBUSCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcF9pbnRlcm5hbHMuaCBiL2tlcm5lbC9sb2NrZGVwX2ludGVybmFscy5oCmluZGV4IDY5OWEyYWMuLmEyZWU5NWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwX2ludGVybmFscy5oCisrKyBiL2tlcm5lbC9sb2NrZGVwX2ludGVybmFscy5oCkBAIC05MSw2ICs5MSw4IEBACiBleHRlcm4gdW5zaWduZWQgaW50IG1heF9sb2NrZGVwX2RlcHRoOwogZXh0ZXJuIHVuc2lnbmVkIGludCBtYXhfcmVjdXJzaW9uX2RlcHRoOwogCitleHRlcm4gdW5zaWduZWQgaW50IG1heF9iZnNfcXVldWVfZGVwdGg7CisKICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9ja2RlcF9jb3VudF9mb3J3YXJkX2RlcHMoc3RydWN0IGxvY2tfY2xhc3MgKik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb2NrZGVwX2NvdW50X2JhY2t3YXJkX2RlcHMoc3RydWN0IGxvY2tfY2xhc3MgKik7CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcF9wcm9jLmMgYi9rZXJuZWwvbG9ja2RlcF9wcm9jLmMKaW5kZXggZTk0Y2FhNi4uZDRiM2RiYyAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXBfcHJvYy5jCisrKyBiL2tlcm5lbC9sb2NrZGVwX3Byb2MuYwpAQCAtMjUsMzggKzI1LDEyIEBACiAKIHN0YXRpYyB2b2lkICpsX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3M7Ci0KLQkoKnBvcykrKzsKLQotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJY2xhc3MgPSBtLT5wcml2YXRlOwotCWVsc2UgewotCQljbGFzcyA9IHY7Ci0KLQkJaWYgKGNsYXNzLT5sb2NrX2VudHJ5Lm5leHQgIT0gJmFsbF9sb2NrX2NsYXNzZXMpCi0JCQljbGFzcyA9IGxpc3RfZW50cnkoY2xhc3MtPmxvY2tfZW50cnkubmV4dCwKLQkJCQkJICAgc3RydWN0IGxvY2tfY2xhc3MsIGxvY2tfZW50cnkpOwotCQllbHNlCi0JCQljbGFzcyA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIGNsYXNzOworCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZhbGxfbG9ja19jbGFzc2VzLCBwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqbF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzczsKLQlsb2ZmX3QgaSA9IDA7Ci0KLQlpZiAoKnBvcyA9PSAwKQotCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjbGFzcywgJmFsbF9sb2NrX2NsYXNzZXMsIGxvY2tfZW50cnkpIHsKLQkJaWYgKCsraSA9PSAqcG9zKQotCQlyZXR1cm4gY2xhc3M7Ci0JfQotCXJldHVybiBOVUxMOworCXJldHVybiBzZXFfbGlzdF9zdGFydF9oZWFkKCZhbGxfbG9ja19jbGFzc2VzLCAqcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgbF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKQEAgLTgyLDExICs1NiwxMSBAQAogCiBzdGF0aWMgaW50IGxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gdjsKKwlzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBsb2NrX2NsYXNzLCBsb2NrX2VudHJ5KTsKIAlzdHJ1Y3QgbG9ja19saXN0ICplbnRyeTsKIAljaGFyIHVzYWdlW0xPQ0tfVVNBR0VfQ0hBUlNdOwogCi0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CisJaWYgKHYgPT0gJmFsbF9sb2NrX2NsYXNzZXMpIHsKIAkJc2VxX3ByaW50ZihtLCAiYWxsIGxvY2sgY2xhc3NlczpcbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMjgsMTcgKzEwMiw3IEBACiAKIHN0YXRpYyBpbnQgbG9ja2RlcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCByZXMgPSBzZXFfb3BlbihmaWxlLCAmbG9ja2RlcF9vcHMpOwotCWlmICghcmVzKSB7Ci0JCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCQlpZiAoIWxpc3RfZW1wdHkoJmFsbF9sb2NrX2NsYXNzZXMpKQotCQkJbS0+cHJpdmF0ZSA9IGxpc3RfZW50cnkoYWxsX2xvY2tfY2xhc3Nlcy5uZXh0LAotCQkJCQlzdHJ1Y3QgbG9ja19jbGFzcywgbG9ja19lbnRyeSk7Ci0JCWVsc2UKLQkJCW0tPnByaXZhdGUgPSBOVUxMOwotCX0KLQlyZXR1cm4gcmVzOworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmbG9ja2RlcF9vcHMpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2xvY2tkZXBfb3BlcmF0aW9ucyA9IHsKQEAgLTE0OSwzNyArMTEzLDIzIEBACiB9OwogCiAjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKLXN0YXRpYyB2b2lkICpsY19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0Jc3RydWN0IGxvY2tfY2hhaW4gKmNoYWluOwotCi0JKCpwb3MpKys7Ci0KLQlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCWNoYWluID0gbS0+cHJpdmF0ZTsKLQllbHNlIHsKLQkJY2hhaW4gPSB2OwotCi0JCWlmICgqcG9zIDwgbnJfbG9ja19jaGFpbnMpCi0JCQljaGFpbiA9IGxvY2tfY2hhaW5zICsgKnBvczsKLQkJZWxzZQotCQkJY2hhaW4gPSBOVUxMOwotCX0KLQotCXJldHVybiBjaGFpbjsKLX0KLQogc3RhdGljIHZvaWQgKmxjX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiB7CiAJaWYgKCpwb3MgPT0gMCkKIAkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKIAotCWlmICgqcG9zIDwgbnJfbG9ja19jaGFpbnMpCi0JCXJldHVybiBsb2NrX2NoYWlucyArICpwb3M7CisJaWYgKCpwb3MgLSAxIDwgbnJfbG9ja19jaGFpbnMpCisJCXJldHVybiBsb2NrX2NoYWlucyArICgqcG9zIC0gMSk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgKmxjX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkoKnBvcykrKzsKKwlyZXR1cm4gbGNfc3RhcnQobSwgcG9zKTsKK30KKwogc3RhdGljIHZvaWQgbGNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiB9CkBAIC0yMjAsMTYgKzE3MCw3IEBACiAKIHN0YXRpYyBpbnQgbG9ja2RlcF9jaGFpbnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgcmVzID0gc2VxX29wZW4oZmlsZSwgJmxvY2tkZXBfY2hhaW5zX29wcyk7Ci0JaWYgKCFyZXMpIHsKLQkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JCWlmIChucl9sb2NrX2NoYWlucykKLQkJCW0tPnByaXZhdGUgPSBsb2NrX2NoYWluczsKLQkJZWxzZQotCQkJbS0+cHJpdmF0ZSA9IE5VTEw7Ci0JfQotCXJldHVybiByZXM7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZsb2NrZGVwX2NoYWluc19vcHMpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2xvY2tkZXBfY2hhaW5zX29wZXJhdGlvbnMgPSB7CkBAIC0yNTgsMTYgKzE5OSwxMCBAQAogCQlkZWJ1Z19hdG9taWNfcmVhZCgmY2hhaW5fbG9va3VwX2hpdHMpKTsKIAlzZXFfcHJpbnRmKG0sICIgY3ljbGljIGNoZWNrczogICAgICAgICAgICAgICAgICUxMXVcbiIsCiAJCWRlYnVnX2F0b21pY19yZWFkKCZucl9jeWNsaWNfY2hlY2tzKSk7Ci0Jc2VxX3ByaW50ZihtLCAiIGN5Y2xpYy1jaGVjayByZWN1cnNpb25zOiAgICAgICAlMTF1XG4iLAotCQlkZWJ1Z19hdG9taWNfcmVhZCgmbnJfY3ljbGljX2NoZWNrX3JlY3Vyc2lvbnMpKTsKIAlzZXFfcHJpbnRmKG0sICIgZmluZC1tYXNrIGZvcndhcmRzIGNoZWNrczogICAgICUxMXVcbiIsCiAJCWRlYnVnX2F0b21pY19yZWFkKCZucl9maW5kX3VzYWdlX2ZvcndhcmRzX2NoZWNrcykpOwotCXNlcV9wcmludGYobSwgIiBmaW5kLW1hc2sgZm9yd2FyZHMgcmVjdXJzaW9uczogJTExdVxuIiwKLQkJZGVidWdfYXRvbWljX3JlYWQoJm5yX2ZpbmRfdXNhZ2VfZm9yd2FyZHNfcmVjdXJzaW9ucykpOwogCXNlcV9wcmludGYobSwgIiBmaW5kLW1hc2sgYmFja3dhcmRzIGNoZWNrczogICAgJTExdVxuIiwKIAkJZGVidWdfYXRvbWljX3JlYWQoJm5yX2ZpbmRfdXNhZ2VfYmFja3dhcmRzX2NoZWNrcykpOwotCXNlcV9wcmludGYobSwgIiBmaW5kLW1hc2sgYmFja3dhcmRzIHJlY3Vyc2lvbnM6JTExdVxuIiwKLQkJZGVidWdfYXRvbWljX3JlYWQoJm5yX2ZpbmRfdXNhZ2VfYmFja3dhcmRzX3JlY3Vyc2lvbnMpKTsKIAogCXNlcV9wcmludGYobSwgIiBoYXJkaXJxIG9uIGV2ZW50czogICAgICAgICAgICAgJTExdVxuIiwgaGkxKTsKIAlzZXFfcHJpbnRmKG0sICIgaGFyZGlycSBvZmYgZXZlbnRzOiAgICAgICAgICAgICUxMXVcbiIsIGhpMik7CkBAIC00MDksOCArMzQ0LDEwIEBACiAJCQlucl91bnVzZWQpOwogCXNlcV9wcmludGYobSwgIiBtYXggbG9ja2luZyBkZXB0aDogICAgICAgICAgICAgJTExdVxuIiwKIAkJCW1heF9sb2NrZGVwX2RlcHRoKTsKLQlzZXFfcHJpbnRmKG0sICIgbWF4IHJlY3Vyc2lvbiBkZXB0aDogICAgICAgICAgICUxMXVcbiIsCi0JCQltYXhfcmVjdXJzaW9uX2RlcHRoKTsKKyNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORworCXNlcV9wcmludGYobSwgIiBtYXggYmZzIHF1ZXVlIGRlcHRoOiAgICAgICAgICAgJTExdVxuIiwKKwkJCW1heF9iZnNfcXVldWVfZGVwdGgpOworI2VuZGlmCiAJbG9ja2RlcF9zdGF0c19kZWJ1Z19zaG93KG0pOwogCXNlcV9wcmludGYobSwgIiBkZWJ1Z19sb2NrczogICAgICAgICAgICAgICAgICAgJTExdVxuIiwKIAkJCWRlYnVnX2xvY2tzKTsKQEAgLTQzOCw3ICszNzUsNiBAQAogfTsKIAogc3RydWN0IGxvY2tfc3RhdF9zZXEgewotCXN0cnVjdCBsb2NrX3N0YXRfZGF0YSAqaXRlcjsKIAlzdHJ1Y3QgbG9ja19zdGF0X2RhdGEgKml0ZXJfZW5kOwogCXN0cnVjdCBsb2NrX3N0YXRfZGF0YSBzdGF0c1tNQVhfTE9DS0RFUF9LRVlTXTsKIH07CkBAIC02MjYsMzQgKzU2MiwyMiBAQAogc3RhdGljIHZvaWQgKmxzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IGxvY2tfc3RhdF9zZXEgKmRhdGEgPSBtLT5wcml2YXRlOworCXN0cnVjdCBsb2NrX3N0YXRfZGF0YSAqaXRlcjsKIAogCWlmICgqcG9zID09IDApCiAJCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CiAKLQlkYXRhLT5pdGVyID0gZGF0YS0+c3RhdHMgKyAqcG9zOwotCWlmIChkYXRhLT5pdGVyID49IGRhdGEtPml0ZXJfZW5kKQotCQlkYXRhLT5pdGVyID0gTlVMTDsKKwlpdGVyID0gZGF0YS0+c3RhdHMgKyAoKnBvcyAtIDEpOworCWlmIChpdGVyID49IGRhdGEtPml0ZXJfZW5kKQorCQlpdGVyID0gTlVMTDsKIAotCXJldHVybiBkYXRhLT5pdGVyOworCXJldHVybiBpdGVyOwogfQogCiBzdGF0aWMgdm9pZCAqbHNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBsb2NrX3N0YXRfc2VxICpkYXRhID0gbS0+cHJpdmF0ZTsKLQogCSgqcG9zKSsrOwotCi0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlkYXRhLT5pdGVyID0gZGF0YS0+c3RhdHM7Ci0JZWxzZSB7Ci0JCWRhdGEtPml0ZXIgPSB2OwotCQlkYXRhLT5pdGVyKys7Ci0JfQotCi0JaWYgKGRhdGEtPml0ZXIgPT0gZGF0YS0+aXRlcl9lbmQpCi0JCWRhdGEtPml0ZXIgPSBOVUxMOwotCi0JcmV0dXJuIGRhdGEtPml0ZXI7CisJcmV0dXJuIGxzX3N0YXJ0KG0sIHBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkIGxzX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQpAQCAtNjkxLDcgKzYxNSw2IEBACiAJCXN0cnVjdCBsb2NrX3N0YXRfZGF0YSAqaXRlciA9IGRhdGEtPnN0YXRzOwogCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQkJZGF0YS0+aXRlciA9IGl0ZXI7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xhc3MsICZhbGxfbG9ja19jbGFzc2VzLCBsb2NrX2VudHJ5KSB7CiAJCQlpdGVyLT5jbGFzcyA9IGNsYXNzOwogCQkJaXRlci0+c3RhdHMgPSBsb2NrX3N0YXRzKGNsYXNzKTsKQEAgLTY5OSw3ICs2MjIsNyBAQAogCQl9CiAJCWRhdGEtPml0ZXJfZW5kID0gaXRlcjsKIAotCQlzb3J0KGRhdGEtPnN0YXRzLCBkYXRhLT5pdGVyX2VuZCAtIGRhdGEtPml0ZXIsCisJCXNvcnQoZGF0YS0+c3RhdHMsIGRhdGEtPml0ZXJfZW5kIC0gZGF0YS0+c3RhdHMsCiAJCQkJc2l6ZW9mKHN0cnVjdCBsb2NrX3N0YXRfZGF0YSksCiAJCQkJbG9ja19zdGF0X2NtcCwgTlVMTCk7CiAKQEAgLTczNCw3ICs2NTcsNiBAQAogCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJdmZyZWUoc2VxLT5wcml2YXRlKTsKLQlzZXEtPnByaXZhdGUgPSBOVUxMOwogCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCAyZDUzNzE4Li4wNWNlNDljIDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC01NSw2ICs1NSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2ttZW1sZWFrLmg+CiAKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9tb2R1bGUuaD4KKworRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKG1vZHVsZV9nZXQpOworCiAjaWYgMAogI2RlZmluZSBERUJVR1AgcHJpbnRrCiAjZWxzZQpAQCAtMzY0LDcgKzM2OSw3IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAKLSNpZmRlZiBDT05GSUdfSEFWRV9EWU5BTUlDX1BFUl9DUFVfQVJFQQorI2lmbmRlZiBDT05GSUdfSEFWRV9MRUdBQ1lfUEVSX0NQVV9BUkVBCiAKIHN0YXRpYyB2b2lkICpwZXJjcHVfbW9kYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLAogCQkJICAgICBjb25zdCBjaGFyICpuYW1lKQpAQCAtMzg5LDcgKzM5NCw3IEBACiAJZnJlZV9wZXJjcHUoZnJlZW1lKTsKIH0KIAotI2Vsc2UgLyogLi4uICFDT05GSUdfSEFWRV9EWU5BTUlDX1BFUl9DUFVfQVJFQSAqLworI2Vsc2UgLyogLi4uIENPTkZJR19IQVZFX0xFR0FDWV9QRVJfQ1BVX0FSRUEgKi8KIAogLyogTnVtYmVyIG9mIGJsb2NrcyB1c2VkIGFuZCBhbGxvY2F0ZWQuICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHBjcHVfbnVtX3VzZWQsIHBjcHVfbnVtX2FsbG9jYXRlZDsKQEAgLTUzNSw3ICs1NDAsNyBAQAogfQogX19pbml0Y2FsbChwZXJjcHVfbW9kaW5pdCk7CiAKLSNlbmRpZiAvKiBDT05GSUdfSEFWRV9EWU5BTUlDX1BFUl9DUFVfQVJFQSAqLworI2VuZGlmIC8qIENPTkZJR19IQVZFX0xFR0FDWV9QRVJfQ1BVX0FSRUEgKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX3BjcHVzZWMoRWxmX0VoZHIgKmhkciwKIAkJCQkgRWxmX1NoZHIgKnNlY2hkcnMsCkBAIC05NDIsNiArOTQ3LDggQEAKIAlpZiAobW9kdWxlKSB7CiAJCXVuc2lnbmVkIGludCBjcHUgPSBnZXRfY3B1KCk7CiAJCWxvY2FsX2RlYyhfX21vZHVsZV9yZWZfYWRkcihtb2R1bGUsIGNwdSkpOworCQl0cmFjZV9tb2R1bGVfcHV0KG1vZHVsZSwgX1JFVF9JUF8sCisJCQkJIGxvY2FsX3JlYWQoX19tb2R1bGVfcmVmX2FkZHIobW9kdWxlLCBjcHUpKSk7CiAJCS8qIE1heWJlIHRoZXkncmUgd2FpdGluZyBmb3IgdXMgdG8gZHJvcCByZWZlcmVuY2U/ICovCiAJCWlmICh1bmxpa2VseSghbW9kdWxlX2lzX2xpdmUobW9kdWxlKSkpCiAJCQl3YWtlX3VwX3Byb2Nlc3MobW9kdWxlLT53YWl0ZXIpOwpAQCAtMTQ5Nyw2ICsxNTA0LDggQEAKIC8qIEZyZWUgYSBtb2R1bGUsIHJlbW92ZSBmcm9tIGxpc3RzLCBldGMgKG11c3QgaG9sZCBtb2R1bGVfbXV0ZXgpLiAqLwogc3RhdGljIHZvaWQgZnJlZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKQogeworCXRyYWNlX21vZHVsZV9mcmVlKG1vZCk7CisKIAkvKiBEZWxldGUgZnJvbSB2YXJpb3VzIGxpc3RzICovCiAJc3RvcF9tYWNoaW5lKF9fdW5saW5rX21vZHVsZSwgbW9kLCBOVUxMKTsKIAlyZW1vdmVfbm90ZXNfYXR0cnMobW9kKTsKQEAgLTIzNjQsNiArMjM3Myw4IEBACiAJLyogR2V0IHJpZCBvZiB0ZW1wb3JhcnkgY29weSAqLwogCXZmcmVlKGhkcik7CiAKKwl0cmFjZV9tb2R1bGVfbG9hZChtb2QpOworCiAJLyogRG9uZSEgKi8KIAlyZXR1cm4gbW9kOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcGVyZl9jb3VudGVyLmMgYi9rZXJuZWwvcGVyZl9jb3VudGVyLmMKaW5kZXggZDdjYmM1Ny4uOGNiOTRhNSAxMDA2NDQKLS0tIGEva2VybmVsL3BlcmZfY291bnRlci5jCisrKyBiL2tlcm5lbC9wZXJmX2NvdW50ZXIuYwpAQCAtNDYsMTIgKzQ2LDE4IEBACiAKIC8qCiAgKiBwZXJmIGNvdW50ZXIgcGFyYW5vaWEgbGV2ZWw6Ci0gKiAgMCAtIG5vdCBwYXJhbm9pZAotICogIDEgLSBkaXNhbGxvdyBjcHUgY291bnRlcnMgdG8gdW5wcml2Ci0gKiAgMiAtIGRpc2FsbG93IGtlcm5lbCBwcm9maWxpbmcgdG8gdW5wcml2CisgKiAgLTEgLSBub3QgcGFyYW5vaWQgYXQgYWxsCisgKiAgIDAgLSBkaXNhbGxvdyByYXcgdHJhY2Vwb2ludCBhY2Nlc3MgZm9yIHVucHJpdgorICogICAxIC0gZGlzYWxsb3cgY3B1IGNvdW50ZXJzIGZvciB1bnByaXYKKyAqICAgMiAtIGRpc2FsbG93IGtlcm5lbCBwcm9maWxpbmcgZm9yIHVucHJpdgogICovCiBpbnQgc3lzY3RsX3BlcmZfY291bnRlcl9wYXJhbm9pZCBfX3JlYWRfbW9zdGx5ID0gMTsKIAorc3RhdGljIGlubGluZSBib29sIHBlcmZfcGFyYW5vaWRfdHJhY2Vwb2ludF9yYXcodm9pZCkKK3sKKwlyZXR1cm4gc3lzY3RsX3BlcmZfY291bnRlcl9wYXJhbm9pZCA+IC0xOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgcGVyZl9wYXJhbm9pZF9jcHUodm9pZCkKIHsKIAlyZXR1cm4gc3lzY3RsX3BlcmZfY291bnRlcl9wYXJhbm9pZCA+IDA7CkBAIC0xMDAsMTYgKzEwNiwxNiBAQAogCiB2b2lkIF9fd2VhayBwZXJmX2NvdW50ZXJfcHJpbnRfZGVidWcodm9pZCkJeyB9CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGRpc2FibGVfY291bnQpOworc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgcGVyZl9kaXNhYmxlX2NvdW50KTsKIAogdm9pZCBfX3BlcmZfZGlzYWJsZSh2b2lkKQogewotCV9fZ2V0X2NwdV92YXIoZGlzYWJsZV9jb3VudCkrKzsKKwlfX2dldF9jcHVfdmFyKHBlcmZfZGlzYWJsZV9jb3VudCkrKzsKIH0KIAogYm9vbCBfX3BlcmZfZW5hYmxlKHZvaWQpCiB7Ci0JcmV0dXJuICEtLV9fZ2V0X2NwdV92YXIoZGlzYWJsZV9jb3VudCk7CisJcmV0dXJuICEtLV9fZ2V0X2NwdV92YXIocGVyZl9kaXNhYmxlX2NvdW50KTsKIH0KIAogdm9pZCBwZXJmX2Rpc2FibGUodm9pZCkKQEAgLTQ2OSw3ICs0NzUsOCBAQAogCXN0cnVjdCBwZXJmX2NvdW50ZXJfY29udGV4dCAqY3R4ID0gY291bnRlci0+Y3R4OwogCXU2NCBydW5fZW5kOwogCi0JaWYgKGNvdW50ZXItPnN0YXRlIDwgUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFKQorCWlmIChjb3VudGVyLT5zdGF0ZSA8IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRSB8fAorCSAgICBjb3VudGVyLT5ncm91cF9sZWFkZXItPnN0YXRlIDwgUEVSRl9DT1VOVEVSX1NUQVRFX0lOQUNUSVZFKQogCQlyZXR1cm47CiAKIAljb3VudGVyLT50b3RhbF90aW1lX2VuYWJsZWQgPSBjdHgtPnRpbWUgLSBjb3VudGVyLT50c3RhbXBfZW5hYmxlZDsKQEAgLTUxOCw3ICs1MjUsNyBAQAogCSAqLwogCWlmIChjb3VudGVyLT5zdGF0ZSA+PSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkUpIHsKIAkJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwotCQl1cGRhdGVfY291bnRlcl90aW1lcyhjb3VudGVyKTsKKwkJdXBkYXRlX2dyb3VwX3RpbWVzKGNvdW50ZXIpOwogCQlpZiAoY291bnRlciA9PSBjb3VudGVyLT5ncm91cF9sZWFkZXIpCiAJCQlncm91cF9zY2hlZF9vdXQoY291bnRlciwgY3B1Y3R4LCBjdHgpOwogCQllbHNlCkBAIC01NzMsNyArNTgwLDcgQEAKIAkgKiBpbiwgc28gd2UgY2FuIGNoYW5nZSB0aGUgc3RhdGUgc2FmZWx5LgogCSAqLwogCWlmIChjb3VudGVyLT5zdGF0ZSA9PSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkUpIHsKLQkJdXBkYXRlX2NvdW50ZXJfdGltZXMoY291bnRlcik7CisJCXVwZGF0ZV9ncm91cF90aW1lcyhjb3VudGVyKTsKIAkJY291bnRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfT0ZGOwogCX0KIApAQCAtODUxLDYgKzg1OCwyNyBAQAogfQogCiAvKgorICogUHV0IGEgY291bnRlciBpbnRvIGluYWN0aXZlIHN0YXRlIGFuZCB1cGRhdGUgdGltZSBmaWVsZHMuCisgKiBFbmFibGluZyB0aGUgbGVhZGVyIG9mIGEgZ3JvdXAgZWZmZWN0aXZlbHkgZW5hYmxlcyBhbGwKKyAqIHRoZSBncm91cCBtZW1iZXJzIHRoYXQgYXJlbid0IGV4cGxpY2l0bHkgZGlzYWJsZWQsIHNvIHdlCisgKiBoYXZlIHRvIHVwZGF0ZSB0aGVpciAtPnRzdGFtcF9lbmFibGVkIGFsc28uCisgKiBOb3RlOiB0aGlzIHdvcmtzIGZvciBncm91cCBtZW1iZXJzIGFzIHdlbGwgYXMgZ3JvdXAgbGVhZGVycworICogc2luY2UgdGhlIG5vbi1sZWFkZXIgbWVtYmVycycgc2libGluZ19saXN0cyB3aWxsIGJlIGVtcHR5LgorICovCitzdGF0aWMgdm9pZCBfX3BlcmZfY291bnRlcl9tYXJrX2VuYWJsZWQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwKKwkJCQkJc3RydWN0IHBlcmZfY291bnRlcl9jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IHBlcmZfY291bnRlciAqc3ViOworCisJY291bnRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkU7CisJY291bnRlci0+dHN0YW1wX2VuYWJsZWQgPSBjdHgtPnRpbWUgLSBjb3VudGVyLT50b3RhbF90aW1lX2VuYWJsZWQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZjb3VudGVyLT5zaWJsaW5nX2xpc3QsIGxpc3RfZW50cnkpCisJCWlmIChzdWItPnN0YXRlID49IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRSkKKwkJCXN1Yi0+dHN0YW1wX2VuYWJsZWQgPQorCQkJCWN0eC0+dGltZSAtIHN1Yi0+dG90YWxfdGltZV9lbmFibGVkOworfQorCisvKgogICogQ3Jvc3MgQ1BVIGNhbGwgdG8gZW5hYmxlIGEgcGVyZm9ybWFuY2UgY291bnRlcgogICovCiBzdGF0aWMgdm9pZCBfX3BlcmZfY291bnRlcl9lbmFibGUodm9pZCAqaW5mbykKQEAgLTg3Nyw4ICs5MDUsNyBAQAogCiAJaWYgKGNvdW50ZXItPnN0YXRlID49IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRSkKIAkJZ290byB1bmxvY2s7Ci0JY291bnRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkU7Ci0JY291bnRlci0+dHN0YW1wX2VuYWJsZWQgPSBjdHgtPnRpbWUgLSBjb3VudGVyLT50b3RhbF90aW1lX2VuYWJsZWQ7CisJX19wZXJmX2NvdW50ZXJfbWFya19lbmFibGVkKGNvdW50ZXIsIGN0eCk7CiAKIAkvKgogCSAqIElmIHRoZSBjb3VudGVyIGlzIGluIGEgZ3JvdXAgYW5kIGlzbid0IHRoZSBncm91cCBsZWFkZXIsCkBAIC05NzEsMTEgKzk5OCw5IEBACiAJICogU2luY2Ugd2UgaGF2ZSB0aGUgbG9jayB0aGlzIGNvbnRleHQgY2FuJ3QgYmUgc2NoZWR1bGVkCiAJICogaW4sIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIHN0YXRlIHNhZmVseS4KIAkgKi8KLQlpZiAoY291bnRlci0+c3RhdGUgPT0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRikgewotCQljb3VudGVyLT5zdGF0ZSA9IFBFUkZfQ09VTlRFUl9TVEFURV9JTkFDVElWRTsKLQkJY291bnRlci0+dHN0YW1wX2VuYWJsZWQgPQotCQkJY3R4LT50aW1lIC0gY291bnRlci0+dG90YWxfdGltZV9lbmFibGVkOwotCX0KKwlpZiAoY291bnRlci0+c3RhdGUgPT0gUEVSRl9DT1VOVEVSX1NUQVRFX09GRikKKwkJX19wZXJmX2NvdW50ZXJfbWFya19lbmFibGVkKGNvdW50ZXIsIGN0eCk7CisKICBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwogfQpAQCAtMTQ3OSw5ICsxNTA0LDcgQEAKIAkJY291bnRlci0+YXR0ci5lbmFibGVfb25fZXhlYyA9IDA7CiAJCWlmIChjb3VudGVyLT5zdGF0ZSA+PSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkUpCiAJCQljb250aW51ZTsKLQkJY291bnRlci0+c3RhdGUgPSBQRVJGX0NPVU5URVJfU1RBVEVfSU5BQ1RJVkU7Ci0JCWNvdW50ZXItPnRzdGFtcF9lbmFibGVkID0KLQkJCWN0eC0+dGltZSAtIGNvdW50ZXItPnRvdGFsX3RpbWVfZW5hYmxlZDsKKwkJX19wZXJmX2NvdW50ZXJfbWFya19lbmFibGVkKGNvdW50ZXIsIGN0eCk7CiAJCWVuYWJsZWQgPSAxOwogCX0KIApAQCAtMTY3NSw2ICsxNjk4LDExIEBACiAJCQlhdG9taWNfZGVjKCZucl90YXNrX2NvdW50ZXJzKTsKIAl9CiAKKwlpZiAoY291bnRlci0+b3V0cHV0KSB7CisJCWZwdXQoY291bnRlci0+b3V0cHV0LT5maWxwKTsKKwkJY291bnRlci0+b3V0cHV0ID0gTlVMTDsKKwl9CisKIAlpZiAoY291bnRlci0+ZGVzdHJveSkKIAkJY291bnRlci0+ZGVzdHJveShjb3VudGVyKTsKIApAQCAtMTk2MCw2ICsxOTg4LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgcGVyZl9jb3VudGVyX3NldF9vdXRwdXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlciwgaW50IG91dHB1dF9mZCk7CisKIHN0YXRpYyBsb25nIHBlcmZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0xOTgzLDYgKzIwMTMsOSBAQAogCWNhc2UgUEVSRl9DT1VOVEVSX0lPQ19QRVJJT0Q6CiAJCXJldHVybiBwZXJmX2NvdW50ZXJfcGVyaW9kKGNvdW50ZXIsICh1NjQgX191c2VyICopYXJnKTsKIAorCWNhc2UgUEVSRl9DT1VOVEVSX0lPQ19TRVRfT1VUUFVUOgorCQlyZXR1cm4gcGVyZl9jb3VudGVyX3NldF9vdXRwdXQoY291bnRlciwgYXJnKTsKKwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwogCX0KQEAgLTIyNTMsNiArMjI4NiwxMSBAQAogCiAJV0FSTl9PTl9PTkNFKGNvdW50ZXItPmN0eC0+cGFyZW50X2N0eCk7CiAJbXV0ZXhfbG9jaygmY291bnRlci0+bW1hcF9tdXRleCk7CisJaWYgKGNvdW50ZXItPm91dHB1dCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHVubG9jazsKKwl9CisKIAlpZiAoYXRvbWljX2luY19ub3RfemVybygmY291bnRlci0+bW1hcF9jb3VudCkpIHsKIAkJaWYgKG5yX3BhZ2VzICE9IGNvdW50ZXItPmRhdGEtPm5yX3BhZ2VzKQogCQkJcmV0ID0gLUVJTlZBTDsKQEAgLTI2MzgsNiArMjY3Niw3IEBACiAJCQkgICAgIHN0cnVjdCBwZXJmX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGludCBzaXplLAogCQkJICAgICBpbnQgbm1pLCBpbnQgc2FtcGxlKQogeworCXN0cnVjdCBwZXJmX2NvdW50ZXIgKm91dHB1dF9jb3VudGVyOwogCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBoZWFkOwogCWludCBoYXZlX2xvc3Q7CkBAIC0yNjQ3LDEzICsyNjg2LDE3IEBACiAJCXU2NAkJCSBsb3N0OwogCX0gbG9zdF9ldmVudDsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAkvKgogCSAqIEZvciBpbmhlcml0ZWQgY291bnRlcnMgd2Ugc2VuZCBhbGwgdGhlIG91dHB1dCB0b3dhcmRzIHRoZSBwYXJlbnQuCiAJICovCiAJaWYgKGNvdW50ZXItPnBhcmVudCkKIAkJY291bnRlciA9IGNvdW50ZXItPnBhcmVudDsKIAotCXJjdV9yZWFkX2xvY2soKTsKKwlvdXRwdXRfY291bnRlciA9IHJjdV9kZXJlZmVyZW5jZShjb3VudGVyLT5vdXRwdXQpOworCWlmIChvdXRwdXRfY291bnRlcikKKwkJY291bnRlciA9IG91dHB1dF9jb3VudGVyOworCiAJZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShjb3VudGVyLT5kYXRhKTsKIAlpZiAoIWRhdGEpCiAJCWdvdG8gb3V0OwpAQCAtMzkzNCw2ICszOTc3LDcgQEAKIAkgKiBoYXZlIHRoZXNlLgogCSAqLwogCWlmICgoY291bnRlci0+YXR0ci5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykgJiYKKwkJCXBlcmZfcGFyYW5vaWRfdHJhY2Vwb2ludF9yYXcoKSAmJgogCQkJIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiBFUlJfUFRSKC1FUEVSTSk7CiAKQEAgLTQxNzEsNiArNDIxNSw3IEBACiAJCQlpZiAodmFsKQogCQkJCWdvdG8gZXJyX3NpemU7CiAJCX0KKwkJc2l6ZSA9IHNpemVvZigqYXR0cik7CiAJfQogCiAJcmV0ID0gY29weV9mcm9tX3VzZXIoYXR0ciwgdWF0dHIsIHNpemUpOwpAQCAtNDIwMiw2ICs0MjQ3LDU3IEBACiAJZ290byBvdXQ7CiB9CiAKK2ludCBwZXJmX2NvdW50ZXJfc2V0X291dHB1dChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLCBpbnQgb3V0cHV0X2ZkKQoreworCXN0cnVjdCBwZXJmX2NvdW50ZXIgKm91dHB1dF9jb3VudGVyID0gTlVMTDsKKwlzdHJ1Y3QgZmlsZSAqb3V0cHV0X2ZpbGUgPSBOVUxMOworCXN0cnVjdCBwZXJmX2NvdW50ZXIgKm9sZF9vdXRwdXQ7CisJaW50IGZwdXRfbmVlZGVkID0gMDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmICghb3V0cHV0X2ZkKQorCQlnb3RvIHNldDsKKworCW91dHB1dF9maWxlID0gZmdldF9saWdodChvdXRwdXRfZmQsICZmcHV0X25lZWRlZCk7CisJaWYgKCFvdXRwdXRfZmlsZSkKKwkJcmV0dXJuIC1FQkFERjsKKworCWlmIChvdXRwdXRfZmlsZS0+Zl9vcCAhPSAmcGVyZl9mb3BzKQorCQlnb3RvIG91dDsKKworCW91dHB1dF9jb3VudGVyID0gb3V0cHV0X2ZpbGUtPnByaXZhdGVfZGF0YTsKKworCS8qIERvbid0IGNoYWluIG91dHB1dCBmZHMgKi8KKwlpZiAob3V0cHV0X2NvdW50ZXItPm91dHB1dCkKKwkJZ290byBvdXQ7CisKKwkvKiBEb24ndCBzZXQgYW4gb3V0cHV0IGZkIHdoZW4gd2UgYWxyZWFkeSBoYXZlIGFuIG91dHB1dCBjaGFubmVsICovCisJaWYgKGNvdW50ZXItPmRhdGEpCisJCWdvdG8gb3V0OworCisJYXRvbWljX2xvbmdfaW5jKCZvdXRwdXRfZmlsZS0+Zl9jb3VudCk7CisKK3NldDoKKwltdXRleF9sb2NrKCZjb3VudGVyLT5tbWFwX211dGV4KTsKKwlvbGRfb3V0cHV0ID0gY291bnRlci0+b3V0cHV0OworCXJjdV9hc3NpZ25fcG9pbnRlcihjb3VudGVyLT5vdXRwdXQsIG91dHB1dF9jb3VudGVyKTsKKwltdXRleF91bmxvY2soJmNvdW50ZXItPm1tYXBfbXV0ZXgpOworCisJaWYgKG9sZF9vdXRwdXQpIHsKKwkJLyoKKwkJICogd2UgbmVlZCB0byBtYWtlIHN1cmUgbm8gZXhpc3RpbmcgcGVyZl9vdXRwdXRfKigpCisJCSAqIGlzIHN0aWxsIHJlZmVyZW5jaW5nIHRoaXMgY291bnRlci4KKwkJICovCisJCXN5bmNocm9uaXplX3JjdSgpOworCQlmcHV0KG9sZF9vdXRwdXQtPmZpbHApOworCX0KKworCXJldCA9IDA7CitvdXQ6CisJZnB1dF9saWdodChvdXRwdXRfZmlsZSwgZnB1dF9uZWVkZWQpOworCXJldHVybiByZXQ7Cit9CisKIC8qKgogICogc3lzX3BlcmZfY291bnRlcl9vcGVuIC0gb3BlbiBhIHBlcmZvcm1hbmNlIGNvdW50ZXIsIGFzc29jaWF0ZSBpdCB0byBhIHRhc2svY3B1CiAgKgpAQCAtNDIyMSwxNSArNDMxNywxNSBAQAogCXN0cnVjdCBmaWxlICpncm91cF9maWxlID0gTlVMTDsKIAlpbnQgZnB1dF9uZWVkZWQgPSAwOwogCWludCBmcHV0X25lZWRlZDIgPSAwOwotCWludCByZXQ7CisJaW50IGVycjsKIAogCS8qIGZvciBmdXR1cmUgZXhwYW5kYWJpbGl0eS4uLiAqLwotCWlmIChmbGFncykKKwlpZiAoZmxhZ3MgJiB+KFBFUkZfRkxBR19GRF9OT19HUk9VUCB8IFBFUkZfRkxBR19GRF9PVVRQVVQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IHBlcmZfY29weV9hdHRyKGF0dHJfdXB0ciwgJmF0dHIpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJZXJyID0gcGVyZl9jb3B5X2F0dHIoYXR0cl91cHRyLCAmYXR0cik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCWlmICghYXR0ci5leGNsdWRlX2tlcm5lbCkgewogCQlpZiAocGVyZl9wYXJhbm9pZF9rZXJuZWwoKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKQEAgLTQyNTIsOCArNDM0OCw4IEBACiAJICogTG9vayB1cCB0aGUgZ3JvdXAgbGVhZGVyICh3ZSB3aWxsIGF0dGFjaCB0aGlzIGNvdW50ZXIgdG8gaXQpOgogCSAqLwogCWdyb3VwX2xlYWRlciA9IE5VTEw7Ci0JaWYgKGdyb3VwX2ZkICE9IC0xKSB7Ci0JCXJldCA9IC1FSU5WQUw7CisJaWYgKGdyb3VwX2ZkICE9IC0xICYmICEoZmxhZ3MgJiBQRVJGX0ZMQUdfRkRfTk9fR1JPVVApKSB7CisJCWVyciA9IC1FSU5WQUw7CiAJCWdyb3VwX2ZpbGUgPSBmZ2V0X2xpZ2h0KGdyb3VwX2ZkLCAmZnB1dF9uZWVkZWQpOwogCQlpZiAoIWdyb3VwX2ZpbGUpCiAJCQlnb3RvIGVycl9wdXRfY29udGV4dDsKQEAgLTQyODIsMTggKzQzNzgsMjQgQEAKIAogCWNvdW50ZXIgPSBwZXJmX2NvdW50ZXJfYWxsb2MoJmF0dHIsIGNwdSwgY3R4LCBncm91cF9sZWFkZXIsCiAJCQkJICAgICBOVUxMLCBHRlBfS0VSTkVMKTsKLQlyZXQgPSBQVFJfRVJSKGNvdW50ZXIpOworCWVyciA9IFBUUl9FUlIoY291bnRlcik7CiAJaWYgKElTX0VSUihjb3VudGVyKSkKIAkJZ290byBlcnJfcHV0X2NvbnRleHQ7CiAKLQlyZXQgPSBhbm9uX2lub2RlX2dldGZkKCJbcGVyZl9jb3VudGVyXSIsICZwZXJmX2ZvcHMsIGNvdW50ZXIsIDApOwotCWlmIChyZXQgPCAwKQorCWVyciA9IGFub25faW5vZGVfZ2V0ZmQoIltwZXJmX2NvdW50ZXJdIiwgJnBlcmZfZm9wcywgY291bnRlciwgMCk7CisJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyX2ZyZWVfcHV0X2NvbnRleHQ7CiAKLQljb3VudGVyX2ZpbGUgPSBmZ2V0X2xpZ2h0KHJldCwgJmZwdXRfbmVlZGVkMik7CisJY291bnRlcl9maWxlID0gZmdldF9saWdodChlcnIsICZmcHV0X25lZWRlZDIpOwogCWlmICghY291bnRlcl9maWxlKQogCQlnb3RvIGVycl9mcmVlX3B1dF9jb250ZXh0OwogCisJaWYgKGZsYWdzICYgUEVSRl9GTEFHX0ZEX09VVFBVVCkgeworCQllcnIgPSBwZXJmX2NvdW50ZXJfc2V0X291dHB1dChjb3VudGVyLCBncm91cF9mZCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9mcHV0X2ZyZWVfcHV0X2NvbnRleHQ7CisJfQorCiAJY291bnRlci0+ZmlscCA9IGNvdW50ZXJfZmlsZTsKIAlXQVJOX09OX09OQ0UoY3R4LT5wYXJlbnRfY3R4KTsKIAltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKQEAgLTQzMDcsMjAgKzQ0MDksMjAgQEAKIAlsaXN0X2FkZF90YWlsKCZjb3VudGVyLT5vd25lcl9lbnRyeSwgJmN1cnJlbnQtPnBlcmZfY291bnRlcl9saXN0KTsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPnBlcmZfY291bnRlcl9tdXRleCk7CiAKK2Vycl9mcHV0X2ZyZWVfcHV0X2NvbnRleHQ6CiAJZnB1dF9saWdodChjb3VudGVyX2ZpbGUsIGZwdXRfbmVlZGVkMik7CiAKLW91dF9mcHV0OgotCWZwdXRfbGlnaHQoZ3JvdXBfZmlsZSwgZnB1dF9uZWVkZWQpOwotCi0JcmV0dXJuIHJldDsKLQogZXJyX2ZyZWVfcHV0X2NvbnRleHQ6Ci0Ja2ZyZWUoY291bnRlcik7CisJaWYgKGVyciA8IDApCisJCWtmcmVlKGNvdW50ZXIpOwogCiBlcnJfcHV0X2NvbnRleHQ6Ci0JcHV0X2N0eChjdHgpOworCWlmIChlcnIgPCAwKQorCQlwdXRfY3R4KGN0eCk7CiAKLQlnb3RvIG91dF9mcHV0OworCWZwdXRfbGlnaHQoZ3JvdXBfZmlsZSwgZnB1dF9uZWVkZWQpOworCisJcmV0dXJuIGVycjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9LY29uZmlnIGIva2VybmVsL3Bvd2VyL0tjb25maWcKaW5kZXggNzIwNjdjYi4uOTFlMDlkMyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL0tjb25maWcKKysrIGIva2VybmVsL3Bvd2VyL0tjb25maWcKQEAgLTIwOCwzICsyMDgsMTcgQEAKIAkgIHJhbmRvbSBrZXJuZWwgT09QU2VzIG9yIHJlYm9vdHMgdGhhdCBkb24ndCBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8KIAkgIGFueXRoaW5nLCB0cnkgZGlzYWJsaW5nL2VuYWJsaW5nIHRoaXMgb3B0aW9uIChvciBkaXNhYmxpbmcvZW5hYmxpbmcKIAkgIEFQTSBpbiB5b3VyIEJJT1MpLgorCitjb25maWcgUE1fUlVOVElNRQorCWJvb2wgIlJ1bi10aW1lIFBNIGNvcmUgZnVuY3Rpb25hbGl0eSIKKwlkZXBlbmRzIG9uIFBNCisJLS0taGVscC0tLQorCSAgRW5hYmxlIGZ1bmN0aW9uYWxpdHkgYWxsb3dpbmcgSS9PIGRldmljZXMgdG8gYmUgcHV0IGludG8gZW5lcmd5LXNhdmluZworCSAgKGxvdyBwb3dlcikgc3RhdGVzIGF0IHJ1biB0aW1lIChvciBhdXRvc3VzcGVuZGVkKSBhZnRlciBhIHNwZWNpZmllZAorCSAgcGVyaW9kIG9mIGluYWN0aXZpdHkgYW5kIHdva2VuIHVwIGluIHJlc3BvbnNlIHRvIGEgaGFyZHdhcmUtZ2VuZXJhdGVkCisJICB3YWtlLXVwIGV2ZW50IG9yIGEgZHJpdmVyJ3MgcmVxdWVzdC4KKworCSAgSGFyZHdhcmUgc3VwcG9ydCBpcyBnZW5lcmFsbHkgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSB0byB3b3JrCisJICBhbmQgdGhlIGJ1cyB0eXBlIGRyaXZlcnMgb2YgdGhlIGJ1c2VzIHRoZSBkZXZpY2VzIGFyZSBvbiBhcmUKKwkgIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIGhhbmRsaW5nIG9mIHRoZSBhdXRvc3VzcGVuZCByZXF1ZXN0cyBhbmQKKwkgIHdha2UtdXAgZXZlbnRzLgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCmluZGV4IDgxZDJlNzQuLjA0YjNhODMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYworKysgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKQEAgLTI5OCw4ICsyOTgsOCBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JLyogRnJlZSBtZW1vcnkgYmVmb3JlIHNodXR0aW5nIGRvd24gZGV2aWNlcy4gKi8KLQllcnJvciA9IHN3c3VzcF9zaHJpbmtfbWVtb3J5KCk7CisJLyogUHJlYWxsb2NhdGUgaW1hZ2UgbWVtb3J5IGJlZm9yZSBzaHV0dGluZyBkb3duIGRldmljZXMuICovCisJZXJyb3IgPSBoaWJlcm5hdGVfcHJlYWxsb2NhdGVfbWVtb3J5KCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIENsb3NlOwogCkBAIC0zMTUsNiArMzE1LDEwIEBACiAJLyogQ29udHJvbCByZXR1cm5zIGhlcmUgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXN0b3JlICovCiAKICBSZXN1bWVfZGV2aWNlczoKKwkvKiBXZSBtYXkgbmVlZCB0byByZWxlYXNlIHRoZSBwcmVhbGxvY2F0ZWQgaW1hZ2UgcGFnZXMgaGVyZS4gKi8KKwlpZiAoZXJyb3IgfHwgIWluX3N1c3BlbmQpCisJCXN3c3VzcF9mcmVlKCk7CisKIAlkcG1fcmVzdW1lX2VuZChpbl9zdXNwZW5kID8KIAkJKGVycm9yID8gUE1TR19SRUNPVkVSIDogUE1TR19USEFXKSA6IFBNU0dfUkVTVE9SRSk7CiAJcmVzdW1lX2NvbnNvbGUoKTsKQEAgLTQ2MCwxMSArNDY0LDExIEBACiAKIAllcnJvciA9IGhpYmVybmF0aW9uX29wcy0+cHJlcGFyZSgpOwogCWlmIChlcnJvcikKLQkJZ290byBQbGF0b2ZybV9maW5pc2g7CisJCWdvdG8gUGxhdGZvcm1fZmluaXNoOwogCiAJZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOwogCWlmIChlcnJvcikKLQkJZ290byBQbGF0b2ZybV9maW5pc2g7CisJCWdvdG8gUGxhdGZvcm1fZmluaXNoOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlzeXNkZXZfc3VzcGVuZChQTVNHX0hJQkVSTkFURSk7CkBAIC00NzYsNyArNDgwLDcgQEAKIAkgKiBXZSBkb24ndCBuZWVkIHRvIHJlZW5hYmxlIHRoZSBub25ib290IENQVXMgb3IgcmVzdW1lIGNvbnNvbGVzLCBzaW5jZQogCSAqIHRoZSBzeXN0ZW0gaXMgZ29pbmcgdG8gYmUgaGFsdGVkIGFueXdheS4KIAkgKi8KLSBQbGF0b2ZybV9maW5pc2g6CisgUGxhdGZvcm1fZmluaXNoOgogCWhpYmVybmF0aW9uX29wcy0+ZmluaXNoKCk7CiAKIAlkcG1fc3VzcGVuZF9ub2lycShQTVNHX1JFU1RPUkUpOwpAQCAtNTc4LDcgKzU4MiwxMCBAQAogCQlnb3RvIFRoYXc7CiAKIAllcnJvciA9IGhpYmVybmF0aW9uX3NuYXBzaG90KGhpYmVybmF0aW9uX21vZGUgPT0gSElCRVJOQVRJT05fUExBVEZPUk0pOwotCWlmIChpbl9zdXNwZW5kICYmICFlcnJvcikgeworCWlmIChlcnJvcikKKwkJZ290byBUaGF3OworCisJaWYgKGluX3N1c3BlbmQpIHsKIAkJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKIAogCQlpZiAoaGliZXJuYXRpb25fbW9kZSA9PSBISUJFUk5BVElPTl9QTEFURk9STSkKQEAgLTU5MCw4ICs1OTcsOCBAQAogCQkJcG93ZXJfZG93bigpOwogCX0gZWxzZSB7CiAJCXByX2RlYnVnKCJQTTogSW1hZ2UgcmVzdG9yZWQgc3VjY2Vzc2Z1bGx5LlxuIik7Ci0JCXN3c3VzcF9mcmVlKCk7CiAJfQorCiAgVGhhdzoKIAl0aGF3X3Byb2Nlc3NlcygpOwogIEZpbmlzaDoKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IGY3MTBlMzYuLjM0N2QyY2MgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9yZXN1bWUtdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgInBvd2VyLmgiCiAKQEAgLTIxNyw4ICsyMTgsMjQgQEAKIAkuYXR0cnMgPSBnLAogfTsKIAorI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcG1fd3E7CisKK3N0YXRpYyBpbnQgX19pbml0IHBtX3N0YXJ0X3dvcmtxdWV1ZSh2b2lkKQoreworCXBtX3dxID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKCJwbSIpOworCisJcmV0dXJuIHBtX3dxID8gMCA6IC1FTk9NRU07Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcG1fc3RhcnRfd29ya3F1ZXVlKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCiBzdGF0aWMgaW50IF9faW5pdCBwbV9pbml0KHZvaWQpCiB7CisJaW50IGVycm9yID0gcG1fc3RhcnRfd29ya3F1ZXVlKCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CiAJcG93ZXJfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoInBvd2VyIiwgTlVMTCk7CiAJaWYgKCFwb3dlcl9rb2JqKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9wb3dlci5oIGIva2VybmVsL3Bvd2VyL3Bvd2VyLmgKaW5kZXggMjZkNWEyNi4uNDZjNWEyNiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3Bvd2VyLmgKKysrIGIva2VybmVsL3Bvd2VyL3Bvd2VyLmgKQEAgLTc0LDcgKzc0LDcgQEAKIAogZXh0ZXJuIGludCBjcmVhdGVfYmFzaWNfbWVtb3J5X2JpdG1hcHModm9pZCk7CiBleHRlcm4gdm9pZCBmcmVlX2Jhc2ljX21lbW9yeV9iaXRtYXBzKHZvaWQpOwotZXh0ZXJuIGludCBzd3N1c3Bfc2hyaW5rX21lbW9yeSh2b2lkKTsKK2V4dGVybiBpbnQgaGliZXJuYXRlX3ByZWFsbG9jYXRlX21lbW9yeSh2b2lkKTsKIAogLyoqCiAgKglBdXhpbGlhcnkgc3RydWN0dXJlIHVzZWQgZm9yIHJlYWRpbmcgdGhlIHNuYXBzaG90IGltYWdlIGRhdGEgYW5kCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCmluZGV4IDUyM2E0NTEuLjk3OTU1YjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAogI2RlZmluZSBCTV9FTkRfT0ZfTUFQCSh+MFVMKQogCi0jZGVmaW5lIEJNX0JJVFNfUEVSX0JMT0NLCShQQUdFX1NJWkUgPDwgMykKKyNkZWZpbmUgQk1fQklUU19QRVJfQkxPQ0sJKFBBR0VfU0laRSAqIEJJVFNfUEVSX0JZVEUpCiAKIHN0cnVjdCBibV9ibG9jayB7CiAJc3RydWN0IGxpc3RfaGVhZCBob29rOwkvKiBob29rIGludG8gYSBsaXN0IG9mIGJpdG1hcCBibG9ja3MgKi8KQEAgLTI3NSw3ICsyNzUsNyBAQAogCiAvKioKICAqCWNyZWF0ZV9ibV9ibG9ja19saXN0IC0gY3JlYXRlIGEgbGlzdCBvZiBibG9jayBiaXRtYXAgb2JqZWN0cwotICoJQG5yX2Jsb2NrcyAtIG51bWJlciBvZiBibG9ja3MgdG8gYWxsb2NhdGUKKyAqCUBwYWdlcyAtIG51bWJlciBvZiBwYWdlcyB0byB0cmFjawogICoJQGxpc3QgLSBsaXN0IHRvIHB1dCB0aGUgYWxsb2NhdGVkIGJsb2NrcyBpbnRvCiAgKglAY2EgLSBjaGFpbiBhbGxvY2F0b3IgdG8gYmUgdXNlZCBmb3IgYWxsb2NhdGluZyBtZW1vcnkKICAqLwpAQCAtODUzLDcgKzg1Myw3IEBACiAJc3RydWN0IHpvbmUgKnpvbmU7CiAJdW5zaWduZWQgaW50IG4gPSAwOwogCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewogCQl1bnNpZ25lZCBsb25nIHBmbiwgbWF4X3pvbmVfcGZuOwogCiAJCWlmICghaXNfaGlnaG1lbSh6b25lKSkKQEAgLTkxNiw3ICs5MTYsNyBAQAogCXVuc2lnbmVkIGxvbmcgcGZuLCBtYXhfem9uZV9wZm47CiAJdW5zaWduZWQgaW50IG4gPSAwOwogCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewogCQlpZiAoaXNfaGlnaG1lbSh6b25lKSkKIAkJCWNvbnRpbnVlOwogCkBAIC0xMDEwLDcgKzEwMTAsNyBAQAogCXN0cnVjdCB6b25lICp6b25lOwogCXVuc2lnbmVkIGxvbmcgcGZuOwogCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewogCQl1bnNpZ25lZCBsb25nIG1heF96b25lX3BmbjsKIAogCQltYXJrX2ZyZWVfcGFnZXMoem9uZSk7CkBAIC0xMDMzLDYgKzEwMzMsMjUgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfY29weV9wYWdlczsKIC8qIE51bWJlciBvZiBwYWdlcyBuZWVkZWQgZm9yIHNhdmluZyB0aGUgb3JpZ2luYWwgcGZucyBvZiB0aGUgaW1hZ2UgcGFnZXMgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfbWV0YV9wYWdlczsKKy8qCisgKiBOdW1iZXJzIG9mIG5vcm1hbCBhbmQgaGlnaG1lbSBwYWdlIGZyYW1lcyBhbGxvY2F0ZWQgZm9yIGhpYmVybmF0aW9uIGltYWdlCisgKiBiZWZvcmUgc3VzcGVuZGluZyBkZXZpY2VzLgorICovCit1bnNpZ25lZCBpbnQgYWxsb2Nfbm9ybWFsLCBhbGxvY19oaWdobWVtOworLyoKKyAqIE1lbW9yeSBiaXRtYXAgdXNlZCBmb3IgbWFya2luZyBzYXZlYWJsZSBwYWdlcyAoZHVyaW5nIGhpYmVybmF0aW9uKSBvcgorICogaGliZXJuYXRpb24gaW1hZ2UgcGFnZXMgKGR1cmluZyByZXN0b3JlKQorICovCitzdGF0aWMgc3RydWN0IG1lbW9yeV9iaXRtYXAgb3JpZ19ibTsKKy8qCisgKiBNZW1vcnkgYml0bWFwIHVzZWQgZHVyaW5nIGhpYmVybmF0aW9uIGZvciBtYXJraW5nIGFsbG9jYXRlZCBwYWdlIGZyYW1lcyB0aGF0CisgKiB3aWxsIGNvbnRhaW4gY29waWVzIG9mIHNhdmVhYmxlIHBhZ2VzLiAgRHVyaW5nIHJlc3RvcmUgaXQgaXMgaW5pdGlhbGx5IHVzZWQKKyAqIGZvciBtYXJraW5nIGhpYmVybmF0aW9uIGltYWdlIHBhZ2VzLCBidXQgdGhlbiB0aGUgc2V0IGJpdHMgZnJvbSBpdCBhcmUKKyAqIGR1cGxpY2F0ZWQgaW4gQG9yaWdfYm0gYW5kIGl0IGlzIHJlbGVhc2VkLiAgT24gaGlnaG1lbSBzeXN0ZW1zIGl0IGlzIG5leHQKKyAqIHVzZWQgZm9yIG1hcmtpbmcgInNhZmUiIGhpZ2htZW0gcGFnZXMsIGJ1dCBpdCBoYXMgdG8gYmUgcmVpbml0aWFsaXplZCBmb3IKKyAqIHRoaXMgcHVycG9zZS4KKyAqLworc3RhdGljIHN0cnVjdCBtZW1vcnlfYml0bWFwIGNvcHlfYm07CiAKIC8qKgogICoJc3dzdXNwX2ZyZWUgLSBmcmVlIHBhZ2VzIGFsbG9jYXRlZCBmb3IgdGhlIHN1c3BlbmQuCkBAIC0xMDQ2LDcgKzEwNjUsNyBAQAogCXN0cnVjdCB6b25lICp6b25lOwogCXVuc2lnbmVkIGxvbmcgcGZuLCBtYXhfem9uZV9wZm47CiAKLQlmb3JfZWFjaF96b25lKHpvbmUpIHsKKwlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CiAJCW1heF96b25lX3BmbiA9IHpvbmUtPnpvbmVfc3RhcnRfcGZuICsgem9uZS0+c3Bhbm5lZF9wYWdlczsKIAkJZm9yIChwZm4gPSB6b25lLT56b25lX3N0YXJ0X3BmbjsgcGZuIDwgbWF4X3pvbmVfcGZuOyBwZm4rKykKIAkJCWlmIChwZm5fdmFsaWQocGZuKSkgewpAQCAtMTA2NCw3NCArMTA4MywyODYgQEAKIAlucl9tZXRhX3BhZ2VzID0gMDsKIAlyZXN0b3JlX3BibGlzdCA9IE5VTEw7CiAJYnVmZmVyID0gTlVMTDsKKwlhbGxvY19ub3JtYWwgPSAwOworCWFsbG9jX2hpZ2htZW0gPSAwOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgZm9yIHRoZSBzaHJpbmtpbmcgb2YgbWVtb3J5LiAqLworCisjZGVmaW5lIEdGUF9JTUFHRQkoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTikKKworLyoqCisgKiBwcmVhbGxvY2F0ZV9pbWFnZV9wYWdlcyAtIEFsbG9jYXRlIGEgbnVtYmVyIG9mIHBhZ2VzIGZvciBoaWJlcm5hdGlvbiBpbWFnZQorICogQG5yX3BhZ2VzOiBOdW1iZXIgb2YgcGFnZSBmcmFtZXMgdG8gYWxsb2NhdGUuCisgKiBAbWFzazogR0ZQIGZsYWdzIHRvIHVzZSBmb3IgdGhlIGFsbG9jYXRpb24uCisgKgorICogUmV0dXJuIHZhbHVlOiBOdW1iZXIgb2YgcGFnZSBmcmFtZXMgYWN0dWFsbHkgYWxsb2NhdGVkCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHByZWFsbG9jYXRlX2ltYWdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGdmcF90IG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBucl9hbGxvYyA9IDA7CisKKwl3aGlsZSAobnJfcGFnZXMgPiAwKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCisJCXBhZ2UgPSBhbGxvY19pbWFnZV9wYWdlKG1hc2spOworCQlpZiAoIXBhZ2UpCisJCQlicmVhazsKKwkJbWVtb3J5X2JtX3NldF9iaXQoJmNvcHlfYm0sIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKKwkJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKQorCQkJYWxsb2NfaGlnaG1lbSsrOworCQllbHNlCisJCQlhbGxvY19ub3JtYWwrKzsKKwkJbnJfcGFnZXMtLTsKKwkJbnJfYWxsb2MrKzsKKwl9CisKKwlyZXR1cm4gbnJfYWxsb2M7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHByZWFsbG9jYXRlX2ltYWdlX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQoreworCXJldHVybiBwcmVhbGxvY2F0ZV9pbWFnZV9wYWdlcyhucl9wYWdlcywgR0ZQX0lNQUdFKTsKK30KKworI2lmZGVmIENPTkZJR19ISUdITUVNCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwcmVhbGxvY2F0ZV9pbWFnZV9oaWdobWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCit7CisJcmV0dXJuIHByZWFsbG9jYXRlX2ltYWdlX3BhZ2VzKG5yX3BhZ2VzLCBHRlBfSU1BR0UgfCBfX0dGUF9ISUdITUVNKTsKIH0KIAogLyoqCi0gKglzd3N1c3Bfc2hyaW5rX21lbW9yeSAtICBUcnkgdG8gZnJlZSBhcyBtdWNoIG1lbW9yeSBhcyBuZWVkZWQKLSAqCi0gKgkuLi4gYnV0IGRvIG5vdCBPT00ta2lsbCBhbnlvbmUKLSAqCi0gKglOb3RpY2U6IGFsbCB1c2VybGFuZCBzaG91bGQgYmUgc3RvcHBlZCBiZWZvcmUgaXQgaXMgY2FsbGVkLCBvcgotICoJbGl2ZWxvY2sgaXMgcG9zc2libGUuCisgKiAgX19mcmFjdGlvbiAtIENvbXB1dGUgKGFuIGFwcHJveGltYXRpb24gb2YpIHggKiAobXVsdGlwbGllciAvIGJhc2UpCiAgKi8KLQotI2RlZmluZSBTSFJJTktfQklURQkxMDAwMAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fc2hyaW5rX21lbW9yeShsb25nIHRtcCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fZnJhY3Rpb24odTY0IHgsIHU2NCBtdWx0aXBsaWVyLCB1NjQgYmFzZSkKIHsKLQlpZiAodG1wID4gU0hSSU5LX0JJVEUpCi0JCXRtcCA9IFNIUklOS19CSVRFOwotCXJldHVybiBzaHJpbmtfYWxsX21lbW9yeSh0bXApOworCXggKj0gbXVsdGlwbGllcjsKKwlkb19kaXYoeCwgYmFzZSk7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKXg7CiB9CiAKLWludCBzd3N1c3Bfc2hyaW5rX21lbW9yeSh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJlYWxsb2NhdGVfaGlnaG1lbV9mcmFjdGlvbih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAorCQkJCQkJdW5zaWduZWQgbG9uZyBoaWdobWVtLAorCQkJCQkJdW5zaWduZWQgbG9uZyB0b3RhbCkKIHsKLQlsb25nIHRtcDsKKwl1bnNpZ25lZCBsb25nIGFsbG9jID0gX19mcmFjdGlvbihucl9wYWdlcywgaGlnaG1lbSwgdG90YWwpOworCisJcmV0dXJuIHByZWFsbG9jYXRlX2ltYWdlX3BhZ2VzKGFsbG9jLCBHRlBfSU1BR0UgfCBfX0dGUF9ISUdITUVNKTsKK30KKyNlbHNlIC8qIENPTkZJR19ISUdITUVNICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHJlYWxsb2NhdGVfaW1hZ2VfaGlnaG1lbSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHJlYWxsb2NhdGVfaGlnaG1lbV9mcmFjdGlvbih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAorCQkJCQkJdW5zaWduZWQgbG9uZyBoaWdobWVtLAorCQkJCQkJdW5zaWduZWQgbG9uZyB0b3RhbCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLworCisvKioKKyAqIGZyZWVfdW5uZWNlc3NhcnlfcGFnZXMgLSBSZWxlYXNlIHByZWFsbG9jYXRlZCBwYWdlcyBub3QgbmVlZGVkIGZvciB0aGUgaW1hZ2UKKyAqLworc3RhdGljIHZvaWQgZnJlZV91bm5lY2Vzc2FyeV9wYWdlcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc2F2ZV9oaWdobWVtLCB0b19mcmVlX25vcm1hbCwgdG9fZnJlZV9oaWdobWVtOworCisJdG9fZnJlZV9ub3JtYWwgPSBhbGxvY19ub3JtYWwgLSBjb3VudF9kYXRhX3BhZ2VzKCk7CisJc2F2ZV9oaWdobWVtID0gY291bnRfaGlnaG1lbV9wYWdlcygpOworCWlmIChhbGxvY19oaWdobWVtID4gc2F2ZV9oaWdobWVtKSB7CisJCXRvX2ZyZWVfaGlnaG1lbSA9IGFsbG9jX2hpZ2htZW0gLSBzYXZlX2hpZ2htZW07CisJfSBlbHNlIHsKKwkJdG9fZnJlZV9oaWdobWVtID0gMDsKKwkJdG9fZnJlZV9ub3JtYWwgLT0gc2F2ZV9oaWdobWVtIC0gYWxsb2NfaGlnaG1lbTsKKwl9CisKKwltZW1vcnlfYm1fcG9zaXRpb25fcmVzZXQoJmNvcHlfYm0pOworCisJd2hpbGUgKHRvX2ZyZWVfbm9ybWFsID4gMCAmJiB0b19mcmVlX2hpZ2htZW0gPiAwKSB7CisJCXVuc2lnbmVkIGxvbmcgcGZuID0gbWVtb3J5X2JtX25leHRfcGZuKCZjb3B5X2JtKTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCisJCWlmIChQYWdlSGlnaE1lbShwYWdlKSkgeworCQkJaWYgKCF0b19mcmVlX2hpZ2htZW0pCisJCQkJY29udGludWU7CisJCQl0b19mcmVlX2hpZ2htZW0tLTsKKwkJCWFsbG9jX2hpZ2htZW0tLTsKKwkJfSBlbHNlIHsKKwkJCWlmICghdG9fZnJlZV9ub3JtYWwpCisJCQkJY29udGludWU7CisJCQl0b19mcmVlX25vcm1hbC0tOworCQkJYWxsb2Nfbm9ybWFsLS07CisJCX0KKwkJbWVtb3J5X2JtX2NsZWFyX2JpdCgmY29weV9ibSwgcGZuKTsKKwkJc3dzdXNwX3Vuc2V0X3BhZ2VfZm9yYmlkZGVuKHBhZ2UpOworCQlzd3N1c3BfdW5zZXRfcGFnZV9mcmVlKHBhZ2UpOworCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwl9Cit9CisKKy8qKgorICogbWluaW11bV9pbWFnZV9zaXplIC0gRXN0aW1hdGUgdGhlIG1pbmltdW0gYWNjZXB0YWJsZSBzaXplIG9mIGFuIGltYWdlCisgKiBAc2F2ZWFibGU6IE51bWJlciBvZiBzYXZlYWJsZSBwYWdlcyBpbiB0aGUgc3lzdGVtLgorICoKKyAqIFdlIHdhbnQgdG8gYXZvaWQgYXR0ZW1wdGluZyB0byBmcmVlIHRvbyBtdWNoIG1lbW9yeSB0b28gaGFyZCwgc28gZXN0aW1hdGUgdGhlCisgKiBtaW5pbXVtIGFjY2VwdGFibGUgc2l6ZSBvZiBhIGhpYmVybmF0aW9uIGltYWdlIHRvIHVzZSBhcyB0aGUgbG93ZXIgbGltaXQgZm9yCisgKiBwcmVhbGxvY2F0aW5nIG1lbW9yeS4KKyAqCisgKiBXZSBhc3N1bWUgdGhhdCB0aGUgbWluaW11bSBpbWFnZSBzaXplIHNob3VsZCBiZSBwcm9wb3J0aW9uYWwgdG8KKyAqCisgKiBbbnVtYmVyIG9mIHNhdmVhYmxlIHBhZ2VzXSAtIFtudW1iZXIgb2YgcGFnZXMgdGhhdCBjYW4gYmUgZnJlZWQgaW4gdGhlb3J5XQorICoKKyAqIHdoZXJlIHRoZSBzZWNvbmQgdGVybSBpcyB0aGUgc3VtIG9mICgxKSByZWNsYWltYWJsZSBzbGFiIHBhZ2VzLCAoMikgYWN0aXZlCisgKiBhbmQgKDMpIGluYWN0aXZlIGFub255bW91bnMgcGFnZXMsICg0KSBhY3RpdmUgYW5kICg1KSBpbmFjdGl2ZSBmaWxlIHBhZ2VzLAorICogbWludXMgbWFwcGVkIGZpbGUgcGFnZXMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1pbmltdW1faW1hZ2Vfc2l6ZSh1bnNpZ25lZCBsb25nIHNhdmVhYmxlKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCXNpemUgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKQorCQkrIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRV9BTk9OKQorCQkrIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFX0FOT04pCisJCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0ZJTEUpCisJCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkVfRklMRSkKKwkJLSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX01BUFBFRCk7CisKKwlyZXR1cm4gc2F2ZWFibGUgPD0gc2l6ZSA/IDAgOiBzYXZlYWJsZSAtIHNpemU7Cit9CisKKy8qKgorICogaGliZXJuYXRlX3ByZWFsbG9jYXRlX21lbW9yeSAtIFByZWFsbG9jYXRlIG1lbW9yeSBmb3IgaGliZXJuYXRpb24gaW1hZ2UKKyAqCisgKiBUbyBjcmVhdGUgYSBoaWJlcm5hdGlvbiBpbWFnZSBpdCBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhIGNvcHkgb2YgZXZlcnkgcGFnZQorICogZnJhbWUgaW4gdXNlLiAgV2UgYWxzbyBuZWVkIGEgbnVtYmVyIG9mIHBhZ2UgZnJhbWVzIHRvIGJlIGZyZWUgZHVyaW5nCisgKiBoaWJlcm5hdGlvbiBmb3IgYWxsb2NhdGlvbnMgbWFkZSB3aGlsZSBzYXZpbmcgdGhlIGltYWdlIGFuZCBmb3IgZGV2aWNlCisgKiBkcml2ZXJzLCBpbiBjYXNlIHRoZXkgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZnJvbSB0aGVpciBoaWJlcm5hdGlvbgorICogY2FsbGJhY2tzICh0aGVzZSB0d28gbnVtYmVycyBhcmUgZ2l2ZW4gYnkgUEFHRVNfRk9SX0lPIGFuZCBTUEFSRV9QQUdFUywKKyAqIHJlc3BlY3RpdmVseSwgYm90aCBvZiB3aGljaCBhcmUgcm91Z2ggZXN0aW1hdGVzKS4gIFRvIG1ha2UgdGhpcyBoYXBwZW4sIHdlCisgKiBjb21wdXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgYXZhaWxhYmxlIHBhZ2UgZnJhbWVzIGFuZCBhbGxvY2F0ZSBhdCBsZWFzdAorICoKKyAqIChbcGFnZSBmcmFtZXMgdG90YWxdICsgUEFHRVNfRk9SX0lPICsgW21ldGFkYXRhIHBhZ2VzXSkgLyAyICsgMiAqIFNQQVJFX1BBR0VTCisgKgorICogb2YgdGhlbSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIG1heGltdW0gc2l6ZSBvZiBhIGhpYmVybmF0aW9uIGltYWdlLgorICoKKyAqIElmIGltYWdlX3NpemUgaXMgc2V0IGJlbG93IHRoZSBudW1iZXIgZm9sbG93aW5nIGZyb20gdGhlIGFib3ZlIGZvcm11bGEsCisgKiB0aGUgcHJlYWxsb2NhdGlvbiBvZiBtZW1vcnkgaXMgY29udGludWVkIHVudGlsIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2F2ZWFibGUKKyAqIHBhZ2VzIGluIHRoZSBzeXN0ZW0gaXMgYmVsb3cgdGhlIHJlcXVlc3RlZCBpbWFnZSBzaXplIG9yIHRoZSBtaW5pbXVtCisgKiBhY2NlcHRhYmxlIGltYWdlIHNpemUgcmV0dXJuZWQgYnkgbWluaW11bV9pbWFnZV9zaXplKCksIHdoaWNoZXZlciBpcyBncmVhdGVyLgorICovCitpbnQgaGliZXJuYXRlX3ByZWFsbG9jYXRlX21lbW9yeSh2b2lkKQorewogCXN0cnVjdCB6b25lICp6b25lOwotCXVuc2lnbmVkIGxvbmcgcGFnZXMgPSAwOwotCXVuc2lnbmVkIGludCBpID0gMDsKLQljaGFyICpwID0gIi1cXHwvIjsKKwl1bnNpZ25lZCBsb25nIHNhdmVhYmxlLCBzaXplLCBtYXhfc2l6ZSwgY291bnQsIGhpZ2htZW0sIHBhZ2VzID0gMDsKKwl1bnNpZ25lZCBsb25nIGFsbG9jLCBzYXZlX2hpZ2htZW0sIHBhZ2VzX2hpZ2htZW07CiAJc3RydWN0IHRpbWV2YWwgc3RhcnQsIHN0b3A7CisJaW50IGVycm9yOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUE06IFNocmlua2luZyBtZW1vcnkuLi4gICIpOworCXByaW50ayhLRVJOX0lORk8gIlBNOiBQcmVhbGxvY2F0aW5nIGltYWdlIG1lbW9yeS4uLiAiKTsKIAlkb19nZXR0aW1lb2ZkYXkoJnN0YXJ0KTsKLQlkbyB7Ci0JCWxvbmcgc2l6ZSwgaGlnaG1lbV9zaXplOwogCi0JCWhpZ2htZW1fc2l6ZSA9IGNvdW50X2hpZ2htZW1fcGFnZXMoKTsKLQkJc2l6ZSA9IGNvdW50X2RhdGFfcGFnZXMoKSArIFBBR0VTX0ZPUl9JTyArIFNQQVJFX1BBR0VTOwotCQl0bXAgPSBzaXplOwotCQlzaXplICs9IGhpZ2htZW1fc2l6ZTsKLQkJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewotCQkJdG1wICs9IHNuYXBzaG90X2FkZGl0aW9uYWxfcGFnZXMoem9uZSk7Ci0JCQlpZiAoaXNfaGlnaG1lbSh6b25lKSkgewotCQkJCWhpZ2htZW1fc2l6ZSAtPQotCQkJCQl6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7Ci0JCQl9IGVsc2UgewotCQkJCXRtcCAtPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7Ci0JCQkJdG1wICs9IHpvbmUtPmxvd21lbV9yZXNlcnZlW1pPTkVfTk9STUFMXTsKLQkJCX0KLQkJfQorCWVycm9yID0gbWVtb3J5X2JtX2NyZWF0ZSgmb3JpZ19ibSwgR0ZQX0lNQUdFLCBQR19BTlkpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfb3V0OwogCi0JCWlmIChoaWdobWVtX3NpemUgPCAwKQotCQkJaGlnaG1lbV9zaXplID0gMDsKKwllcnJvciA9IG1lbW9yeV9ibV9jcmVhdGUoJmNvcHlfYm0sIEdGUF9JTUFHRSwgUEdfQU5ZKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX291dDsKIAotCQl0bXAgKz0gaGlnaG1lbV9zaXplOwotCQlpZiAodG1wID4gMCkgewotCQkJdG1wID0gX19zaHJpbmtfbWVtb3J5KHRtcCk7Ci0JCQlpZiAoIXRtcCkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCXBhZ2VzICs9IHRtcDsKLQkJfSBlbHNlIGlmIChzaXplID4gaW1hZ2Vfc2l6ZSAvIFBBR0VfU0laRSkgewotCQkJdG1wID0gX19zaHJpbmtfbWVtb3J5KHNpemUgLSAoaW1hZ2Vfc2l6ZSAvIFBBR0VfU0laRSkpOwotCQkJcGFnZXMgKz0gdG1wOwotCQl9Ci0JCXByaW50aygiXGIlYyIsIHBbaSsrJTRdKTsKLQl9IHdoaWxlICh0bXAgPiAwKTsKKwlhbGxvY19ub3JtYWwgPSAwOworCWFsbG9jX2hpZ2htZW0gPSAwOworCisJLyogQ291bnQgdGhlIG51bWJlciBvZiBzYXZlYWJsZSBkYXRhIHBhZ2VzLiAqLworCXNhdmVfaGlnaG1lbSA9IGNvdW50X2hpZ2htZW1fcGFnZXMoKTsKKwlzYXZlYWJsZSA9IGNvdW50X2RhdGFfcGFnZXMoKTsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2UgZnJhbWVzIHdlIGNhbiB1c2UgKGNvdW50KSBhbmQgdGhlCisJICogbnVtYmVyIG9mIHBhZ2VzIG5lZWRlZCBmb3IgaW1hZ2UgbWV0YWRhdGEgKHNpemUpLgorCSAqLworCWNvdW50ID0gc2F2ZWFibGU7CisJc2F2ZWFibGUgKz0gc2F2ZV9oaWdobWVtOworCWhpZ2htZW0gPSBzYXZlX2hpZ2htZW07CisJc2l6ZSA9IDA7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgeworCQlzaXplICs9IHNuYXBzaG90X2FkZGl0aW9uYWxfcGFnZXMoem9uZSk7CisJCWlmIChpc19oaWdobWVtKHpvbmUpKQorCQkJaGlnaG1lbSArPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7CisJCWVsc2UKKwkJCWNvdW50ICs9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKKwl9CisJY291bnQgKz0gaGlnaG1lbTsKKwljb3VudCAtPSB0b3RhbHJlc2VydmVfcGFnZXM7CisKKwkvKiBDb21wdXRlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzYXZlYWJsZSBwYWdlcyB0byBsZWF2ZSBpbiBtZW1vcnkuICovCisJbWF4X3NpemUgPSAoY291bnQgLSAoc2l6ZSArIFBBR0VTX0ZPUl9JTykpIC8gMiAtIDIgKiBTUEFSRV9QQUdFUzsKKwlzaXplID0gRElWX1JPVU5EX1VQKGltYWdlX3NpemUsIFBBR0VfU0laRSk7CisJaWYgKHNpemUgPiBtYXhfc2l6ZSkKKwkJc2l6ZSA9IG1heF9zaXplOworCS8qCisJICogSWYgdGhlIG1heGltdW0gaXMgbm90IGxlc3MgdGhhbiB0aGUgY3VycmVudCBudW1iZXIgb2Ygc2F2ZWFibGUgcGFnZXMKKwkgKiBpbiBtZW1vcnksIGFsbG9jYXRlIHBhZ2UgZnJhbWVzIGZvciB0aGUgaW1hZ2UgYW5kIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKHNpemUgPj0gc2F2ZWFibGUpIHsKKwkJcGFnZXMgPSBwcmVhbGxvY2F0ZV9pbWFnZV9oaWdobWVtKHNhdmVfaGlnaG1lbSk7CisJCXBhZ2VzICs9IHByZWFsbG9jYXRlX2ltYWdlX21lbW9yeShzYXZlYWJsZSAtIHBhZ2VzKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRXN0aW1hdGUgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgaW1hZ2UuICovCisJcGFnZXMgPSBtaW5pbXVtX2ltYWdlX3NpemUoc2F2ZWFibGUpOworCWlmIChzaXplIDwgcGFnZXMpCisJCXNpemUgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBwYWdlcywgbWF4X3NpemUpOworCisJLyoKKwkgKiBMZXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBrbm93IHRoYXQgd2UncmUgZ29pbmcgdG8gbmVlZCBhCisJICogbGFyZ2UgbnVtYmVyIG9mIHBhZ2UgZnJhbWVzIHRvIGFsbG9jYXRlIGFuZCBtYWtlIGl0IGZyZWUgc29tZSBtZW1vcnkuCisJICogTk9URTogSWYgdGhpcyBpcyBub3QgZG9uZSwgcGVyZm9ybWFuY2Ugd2lsbCBiZSBodXJ0IGJhZGx5IGluIHNvbWUKKwkgKiB0ZXN0IGNhc2VzLgorCSAqLworCXNocmlua19hbGxfbWVtb3J5KHNhdmVhYmxlIC0gc2l6ZSk7CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2Ygc2F2ZWFibGUgcGFnZXMgaW4gbWVtb3J5IHdhcyB0b28gaGlnaCwgc28gYXBwbHkgc29tZQorCSAqIHByZXNzdXJlIHRvIGRlY3JlYXNlIGl0LiAgRmlyc3QsIG1ha2Ugcm9vbSBmb3IgdGhlIGxhcmdlc3QgcG9zc2libGUKKwkgKiBpbWFnZSBhbmQgZmFpbCBpZiB0aGF0IGRvZXNuJ3Qgd29yay4gIE5leHQsIHRyeSB0byBkZWNyZWFzZSB0aGUgc2l6ZQorCSAqIG9mIHRoZSBpbWFnZSBhcyBtdWNoIGFzIGluZGljYXRlZCBieSAnc2l6ZScgdXNpbmcgYWxsb2NhdGlvbnMgZnJvbQorCSAqIGhpZ2htZW0gYW5kIG5vbi1oaWdobWVtIHpvbmVzIHNlcGFyYXRlbHkuCisJICovCisJcGFnZXNfaGlnaG1lbSA9IHByZWFsbG9jYXRlX2ltYWdlX2hpZ2htZW0oaGlnaG1lbSAvIDIpOworCWFsbG9jID0gKGNvdW50IC0gbWF4X3NpemUpIC0gcGFnZXNfaGlnaG1lbTsKKwlwYWdlcyA9IHByZWFsbG9jYXRlX2ltYWdlX21lbW9yeShhbGxvYyk7CisJaWYgKHBhZ2VzIDwgYWxsb2MpCisJCWdvdG8gZXJyX291dDsKKwlzaXplID0gbWF4X3NpemUgLSBzaXplOworCWFsbG9jID0gc2l6ZTsKKwlzaXplID0gcHJlYWxsb2NhdGVfaGlnaG1lbV9mcmFjdGlvbihzaXplLCBoaWdobWVtLCBjb3VudCk7CisJcGFnZXNfaGlnaG1lbSArPSBzaXplOworCWFsbG9jIC09IHNpemU7CisJcGFnZXMgKz0gcHJlYWxsb2NhdGVfaW1hZ2VfbWVtb3J5KGFsbG9jKTsKKwlwYWdlcyArPSBwYWdlc19oaWdobWVtOworCisJLyoKKwkgKiBXZSBvbmx5IG5lZWQgYXMgbWFueSBwYWdlIGZyYW1lcyBmb3IgdGhlIGltYWdlIGFzIHRoZXJlIGFyZSBzYXZlYWJsZQorCSAqIHBhZ2VzIGluIG1lbW9yeSwgYnV0IHdlIGhhdmUgYWxsb2NhdGVkIG1vcmUuICBSZWxlYXNlIHRoZSBleGNlc3NpdmUKKwkgKiBvbmVzIG5vdy4KKwkgKi8KKwlmcmVlX3VubmVjZXNzYXJ5X3BhZ2VzKCk7CisKKyBvdXQ6CiAJZG9fZ2V0dGltZW9mZGF5KCZzdG9wKTsKLQlwcmludGsoIlxiZG9uZSAoJWx1IHBhZ2VzIGZyZWVkKVxuIiwgcGFnZXMpOwotCXN3c3VzcF9zaG93X3NwZWVkKCZzdGFydCwgJnN0b3AsIHBhZ2VzLCAiRnJlZWQiKTsKKwlwcmludGsoS0VSTl9DT05UICJkb25lIChhbGxvY2F0ZWQgJWx1IHBhZ2VzKVxuIiwgcGFnZXMpOworCXN3c3VzcF9zaG93X3NwZWVkKCZzdGFydCwgJnN0b3AsIHBhZ2VzLCAiQWxsb2NhdGVkIik7CiAKIAlyZXR1cm4gMDsKKworIGVycl9vdXQ6CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwlzd3N1c3BfZnJlZSgpOworCXJldHVybiAtRU5PTUVNOwogfQogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KQEAgLTExNDIsNyArMTM3Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRfcGFnZXNfZm9yX2hpZ2htZW0odW5zaWduZWQgaW50IG5yX2hpZ2htZW0pCiB7Ci0JdW5zaWduZWQgaW50IGZyZWVfaGlnaG1lbSA9IGNvdW50X2ZyZWVfaGlnaG1lbV9wYWdlcygpOworCXVuc2lnbmVkIGludCBmcmVlX2hpZ2htZW0gPSBjb3VudF9mcmVlX2hpZ2htZW1fcGFnZXMoKSArIGFsbG9jX2hpZ2htZW07CiAKIAlpZiAoZnJlZV9oaWdobWVtID49IG5yX2hpZ2htZW0pCiAJCW5yX2hpZ2htZW0gPSAwOwpAQCAtMTE2NCwxOSArMTM5NSwxNyBAQAogc3RhdGljIGludCBlbm91Z2hfZnJlZV9tZW0odW5zaWduZWQgaW50IG5yX3BhZ2VzLCB1bnNpZ25lZCBpbnQgbnJfaGlnaG1lbSkKIHsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKLQl1bnNpZ25lZCBpbnQgZnJlZSA9IDAsIG1ldGEgPSAwOworCXVuc2lnbmVkIGludCBmcmVlID0gYWxsb2Nfbm9ybWFsOwogCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7Ci0JCW1ldGEgKz0gc25hcHNob3RfYWRkaXRpb25hbF9wYWdlcyh6b25lKTsKKwlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKQogCQlpZiAoIWlzX2hpZ2htZW0oem9uZSkpCiAJCQlmcmVlICs9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKLQl9CiAKIAlucl9wYWdlcyArPSBjb3VudF9wYWdlc19mb3JfaGlnaG1lbShucl9oaWdobWVtKTsKLQlwcl9kZWJ1ZygiUE06IE5vcm1hbCBwYWdlcyBuZWVkZWQ6ICV1ICsgJXUgKyAldSwgYXZhaWxhYmxlIHBhZ2VzOiAldVxuIiwKLQkJbnJfcGFnZXMsIFBBR0VTX0ZPUl9JTywgbWV0YSwgZnJlZSk7CisJcHJfZGVidWcoIlBNOiBOb3JtYWwgcGFnZXMgbmVlZGVkOiAldSArICV1LCBhdmFpbGFibGUgcGFnZXM6ICV1XG4iLAorCQlucl9wYWdlcywgUEFHRVNfRk9SX0lPLCBmcmVlKTsKIAotCXJldHVybiBmcmVlID4gbnJfcGFnZXMgKyBQQUdFU19GT1JfSU8gKyBtZXRhOworCXJldHVybiBmcmVlID4gbnJfcGFnZXMgKyBQQUdFU19GT1JfSU87CiB9CiAKICNpZmRlZiBDT05GSUdfSElHSE1FTQpAQCAtMTE5OCw3ICsxNDI3LDcgQEAKICAqLwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotYWxsb2NfaGlnaG1lbV9pbWFnZV9wYWdlcyhzdHJ1Y3QgbWVtb3J5X2JpdG1hcCAqYm0sIHVuc2lnbmVkIGludCBucl9oaWdobWVtKQorYWxsb2NfaGlnaG1lbV9wYWdlcyhzdHJ1Y3QgbWVtb3J5X2JpdG1hcCAqYm0sIHVuc2lnbmVkIGludCBucl9oaWdobWVtKQogewogCXVuc2lnbmVkIGludCB0b19hbGxvYyA9IGNvdW50X2ZyZWVfaGlnaG1lbV9wYWdlcygpOwogCkBAIC0xMjE4LDcgKzE0NDcsNyBAQAogc3RhdGljIGlubGluZSBpbnQgZ2V0X2hpZ2htZW1fYnVmZmVyKGludCBzYWZlX25lZWRlZCkgeyByZXR1cm4gMDsgfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotYWxsb2NfaGlnaG1lbV9pbWFnZV9wYWdlcyhzdHJ1Y3QgbWVtb3J5X2JpdG1hcCAqYm0sIHVuc2lnbmVkIGludCBuKSB7IHJldHVybiAwOyB9CithbGxvY19oaWdobWVtX3BhZ2VzKHN0cnVjdCBtZW1vcnlfYml0bWFwICpibSwgdW5zaWduZWQgaW50IG4pIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLwogCiAvKioKQEAgLTEyMzcsNTEgKzE0NjYsMzYgQEAKIHN3c3VzcF9hbGxvYyhzdHJ1Y3QgbWVtb3J5X2JpdG1hcCAqb3JpZ19ibSwgc3RydWN0IG1lbW9yeV9iaXRtYXAgKmNvcHlfYm0sCiAJCXVuc2lnbmVkIGludCBucl9wYWdlcywgdW5zaWduZWQgaW50IG5yX2hpZ2htZW0pCiB7Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBtZW1vcnlfYm1fY3JlYXRlKG9yaWdfYm0sIEdGUF9BVE9NSUMgfCBfX0dGUF9DT0xELCBQR19BTlkpOwotCWlmIChlcnJvcikKLQkJZ290byBGcmVlOwotCi0JZXJyb3IgPSBtZW1vcnlfYm1fY3JlYXRlKGNvcHlfYm0sIEdGUF9BVE9NSUMgfCBfX0dGUF9DT0xELCBQR19BTlkpOwotCWlmIChlcnJvcikKLQkJZ290byBGcmVlOworCWludCBlcnJvciA9IDA7CiAKIAlpZiAobnJfaGlnaG1lbSA+IDApIHsKIAkJZXJyb3IgPSBnZXRfaGlnaG1lbV9idWZmZXIoUEdfQU5ZKTsKIAkJaWYgKGVycm9yKQotCQkJZ290byBGcmVlOwotCi0JCW5yX3BhZ2VzICs9IGFsbG9jX2hpZ2htZW1faW1hZ2VfcGFnZXMoY29weV9ibSwgbnJfaGlnaG1lbSk7CisJCQlnb3RvIGVycl9vdXQ7CisJCWlmIChucl9oaWdobWVtID4gYWxsb2NfaGlnaG1lbSkgeworCQkJbnJfaGlnaG1lbSAtPSBhbGxvY19oaWdobWVtOworCQkJbnJfcGFnZXMgKz0gYWxsb2NfaGlnaG1lbV9wYWdlcyhjb3B5X2JtLCBucl9oaWdobWVtKTsKKwkJfQogCX0KLQl3aGlsZSAobnJfcGFnZXMtLSA+IDApIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19pbWFnZV9wYWdlKEdGUF9BVE9NSUMgfCBfX0dGUF9DT0xEKTsKKwlpZiAobnJfcGFnZXMgPiBhbGxvY19ub3JtYWwpIHsKKwkJbnJfcGFnZXMgLT0gYWxsb2Nfbm9ybWFsOworCQl3aGlsZSAobnJfcGFnZXMtLSA+IDApIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JCWlmICghcGFnZSkKLQkJCWdvdG8gRnJlZTsKLQotCQltZW1vcnlfYm1fc2V0X2JpdChjb3B5X2JtLCBwYWdlX3RvX3BmbihwYWdlKSk7CisJCQlwYWdlID0gYWxsb2NfaW1hZ2VfcGFnZShHRlBfQVRPTUlDIHwgX19HRlBfQ09MRCk7CisJCQlpZiAoIXBhZ2UpCisJCQkJZ290byBlcnJfb3V0OworCQkJbWVtb3J5X2JtX3NldF9iaXQoY29weV9ibSwgcGFnZV90b19wZm4ocGFnZSkpOworCQl9CiAJfQorCiAJcmV0dXJuIDA7CiAKLSBGcmVlOgorIGVycl9vdXQ6CiAJc3dzdXNwX2ZyZWUoKTsKLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKLS8qIE1lbW9yeSBiaXRtYXAgdXNlZCBmb3IgbWFya2luZyBzYXZlYWJsZSBwYWdlcyAoZHVyaW5nIHN1c3BlbmQpIG9yIHRoZQotICogc3VzcGVuZCBpbWFnZSBwYWdlcyAoZHVyaW5nIHJlc3VtZSkKLSAqLwotc3RhdGljIHN0cnVjdCBtZW1vcnlfYml0bWFwIG9yaWdfYm07Ci0vKiBNZW1vcnkgYml0bWFwIHVzZWQgb24gc3VzcGVuZCBmb3IgbWFya2luZyBhbGxvY2F0ZWQgcGFnZXMgdGhhdCB3aWxsIGNvbnRhaW4KLSAqIHRoZSBjb3BpZXMgb2Ygc2F2ZWFibGUgcGFnZXMuICBEdXJpbmcgcmVzdW1lIGl0IGlzIGluaXRpYWxseSB1c2VkIGZvcgotICogbWFya2luZyB0aGUgc3VzcGVuZCBpbWFnZSBwYWdlcywgYnV0IHRoZW4gaXRzIHNldCBiaXRzIGFyZSBkdXBsaWNhdGVkIGluCi0gKiBAb3JpZ19ibSBhbmQgaXQgaXMgcmVsZWFzZWQuICBOZXh0LCBvbiBzeXN0ZW1zIHdpdGggaGlnaCBtZW1vcnksIGl0IG1heSBiZQotICogdXNlZCBmb3IgbWFya2luZyAic2FmZSIgaGlnaG1lbSBwYWdlcywgYnV0IGl0IGhhcyB0byBiZSByZWluaXRpYWxpemVkIGZvcgotICogdGhpcyBwdXJwb3NlLgotICovCi1zdGF0aWMgc3RydWN0IG1lbW9yeV9iaXRtYXAgY29weV9ibTsKLQogYXNtbGlua2FnZSBpbnQgc3dzdXNwX3NhdmUodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIG5yX2hpZ2htZW07CkBAIC0xNDc0LDcgKzE2ODgsNyBAQAogCXVuc2lnbmVkIGxvbmcgcGZuLCBtYXhfem9uZV9wZm47CiAKIAkvKiBDbGVhciBwYWdlIGZsYWdzICovCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewogCQltYXhfem9uZV9wZm4gPSB6b25lLT56b25lX3N0YXJ0X3BmbiArIHpvbmUtPnNwYW5uZWRfcGFnZXM7CiAJCWZvciAocGZuID0gem9uZS0+em9uZV9zdGFydF9wZm47IHBmbiA8IG1heF96b25lX3BmbjsgcGZuKyspCiAJCQlpZiAocGZuX3ZhbGlkKHBmbikpCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggYjRkOTdiNS4uNjAyMDMzYSAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtMzcsNiArMzcsMTIgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAvKgorICogZm9yX2VhY2hfY29uc29sZSgpIGFsbG93cyB5b3UgdG8gaXRlcmF0ZSBvbiBlYWNoIGNvbnNvbGUKKyAqLworI2RlZmluZSBmb3JfZWFjaF9jb25zb2xlKGNvbikgXAorCWZvciAoY29uID0gY29uc29sZV9kcml2ZXJzOyBjb24gIT0gTlVMTDsgY29uID0gY29uLT5uZXh0KQorCisvKgogICogQXJjaGl0ZWN0dXJlcyBjYW4gb3ZlcnJpZGUgaXQ6CiAgKi8KIHZvaWQgYXNtbGlua2FnZSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgZWFybHlfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQpAQCAtNjEsNiArNjcsOCBAQAogCURFRkFVTFRfQ09OU09MRV9MT0dMRVZFTCwJLyogZGVmYXVsdF9jb25zb2xlX2xvZ2xldmVsICovCiB9OwogCitzdGF0aWMgaW50IHNhdmVkX2NvbnNvbGVfbG9nbGV2ZWwgPSAtMTsKKwogLyoKICAqIExvdyBsZXZlbCBkcml2ZXJzIG1heSBuZWVkIHRoYXQgdG8ga25vdyBpZiB0aGV5IGNhbiBzY2hlZHVsZSBpbgogICogdGhlaXIgdW5ibGFuaygpIGNhbGxiYWNrIG9yIG5vdC4gU28gbGV0J3MgZXhwb3J0IGl0LgpAQCAtMzcyLDEwICszODAsMTUgQEAKIAkJbG9nZ2VkX2NoYXJzID0gMDsKIAkJYnJlYWs7CiAJY2FzZSA2OgkJLyogRGlzYWJsZSBsb2dnaW5nIHRvIGNvbnNvbGUgKi8KKwkJaWYgKHNhdmVkX2NvbnNvbGVfbG9nbGV2ZWwgPT0gLTEpCisJCQlzYXZlZF9jb25zb2xlX2xvZ2xldmVsID0gY29uc29sZV9sb2dsZXZlbDsKIAkJY29uc29sZV9sb2dsZXZlbCA9IG1pbmltdW1fY29uc29sZV9sb2dsZXZlbDsKIAkJYnJlYWs7CiAJY2FzZSA3OgkJLyogRW5hYmxlIGxvZ2dpbmcgdG8gY29uc29sZSAqLwotCQljb25zb2xlX2xvZ2xldmVsID0gZGVmYXVsdF9jb25zb2xlX2xvZ2xldmVsOworCQlpZiAoc2F2ZWRfY29uc29sZV9sb2dsZXZlbCAhPSAtMSkgeworCQkJY29uc29sZV9sb2dsZXZlbCA9IHNhdmVkX2NvbnNvbGVfbG9nbGV2ZWw7CisJCQlzYXZlZF9jb25zb2xlX2xvZ2xldmVsID0gLTE7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSA4OgkJLyogU2V0IGxldmVsIG9mIG1lc3NhZ2VzIHByaW50ZWQgdG8gY29uc29sZSAqLwogCQllcnJvciA9IC1FSU5WQUw7CkBAIC0zODQsNiArMzk3LDggQEAKIAkJaWYgKGxlbiA8IG1pbmltdW1fY29uc29sZV9sb2dsZXZlbCkKIAkJCWxlbiA9IG1pbmltdW1fY29uc29sZV9sb2dsZXZlbDsKIAkJY29uc29sZV9sb2dsZXZlbCA9IGxlbjsKKwkJLyogSW1wbGljaXRseSByZS1lbmFibGUgbG9nZ2luZyB0byBjb25zb2xlICovCisJCXNhdmVkX2NvbnNvbGVfbG9nbGV2ZWwgPSAtMTsKIAkJZXJyb3IgPSAwOwogCQlicmVhazsKIAljYXNlIDk6CQkvKiBOdW1iZXIgb2YgY2hhcnMgaW4gdGhlIGxvZyBidWZmZXIgKi8KQEAgLTQxMiw3ICs0MjcsNyBAQAogewogCXN0cnVjdCBjb25zb2xlICpjb247CiAKLQlmb3IgKGNvbiA9IGNvbnNvbGVfZHJpdmVyczsgY29uOyBjb24gPSBjb24tPm5leHQpIHsKKwlmb3JfZWFjaF9jb25zb2xlKGNvbikgewogCQlpZiAoKGNvbi0+ZmxhZ3MgJiBDT05fRU5BQkxFRCkgJiYgY29uLT53cml0ZSAmJgogCQkJCShjcHVfb25saW5lKHNtcF9wcm9jZXNzb3JfaWQoKSkgfHwKIAkJCQkoY29uLT5mbGFncyAmIENPTl9BTllUSU1FKSkpCkBAIC01NDQsNyArNTU5LDcgQEAKIHsKIAlzdHJ1Y3QgY29uc29sZSAqY29uOwogCi0JZm9yIChjb24gPSBjb25zb2xlX2RyaXZlcnM7IGNvbjsgY29uID0gY29uLT5uZXh0KQorCWZvcl9lYWNoX2NvbnNvbGUoY29uKQogCQlpZiAoY29uLT5mbGFncyAmIENPTl9BTllUSU1FKQogCQkJcmV0dXJuIDE7CiAKQEAgLTEwNjAsMTIgKzEwNzUsNiBAQAogfQogRVhQT1JUX1NZTUJPTChjb25zb2xlX2NvbmRpdGlvbmFsX3NjaGVkdWxlKTsKIAotdm9pZCBjb25zb2xlX3ByaW50KGNvbnN0IGNoYXIgKnMpCi17Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIiVzIiwgcyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNvbnNvbGVfcHJpbnQpOwotCiB2b2lkIGNvbnNvbGVfdW5ibGFuayh2b2lkKQogewogCXN0cnVjdCBjb25zb2xlICpjOwpAQCAtMTA4Miw3ICsxMDkxLDcgQEAKIAogCWNvbnNvbGVfbG9ja2VkID0gMTsKIAljb25zb2xlX21heV9zY2hlZHVsZSA9IDA7Ci0JZm9yIChjID0gY29uc29sZV9kcml2ZXJzOyBjICE9IE5VTEw7IGMgPSBjLT5uZXh0KQorCWZvcl9lYWNoX2NvbnNvbGUoYykKIAkJaWYgKChjLT5mbGFncyAmIENPTl9FTkFCTEVEKSAmJiBjLT51bmJsYW5rKQogCQkJYy0+dW5ibGFuaygpOwogCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKQEAgLTEwOTcsNyArMTEwNiw3IEBACiAJc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciA9IE5VTEw7CiAKIAlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0JZm9yIChjID0gY29uc29sZV9kcml2ZXJzOyBjICE9IE5VTEw7IGMgPSBjLT5uZXh0KSB7CisJZm9yX2VhY2hfY29uc29sZShjKSB7CiAJCWlmICghYy0+ZGV2aWNlKQogCQkJY29udGludWU7CiAJCWRyaXZlciA9IGMtPmRldmljZShjLCBpbmRleCk7CkBAIC0xMTM0LDI1ICsxMTQzLDQ5IEBACiAgKiB0byByZWdpc3RlciB0aGUgY29uc29sZSBwcmludGluZyBwcm9jZWR1cmUgd2l0aCBwcmludGsoKSBhbmQgdG8KICAqIHByaW50IGFueSBtZXNzYWdlcyB0aGF0IHdlcmUgcHJpbnRlZCBieSB0aGUga2VybmVsIGJlZm9yZSB0aGUKICAqIGNvbnNvbGUgZHJpdmVyIHdhcyBpbml0aWFsaXplZC4KKyAqCisgKiBUaGlzIGNhbiBoYXBwZW4gcHJldHR5IGVhcmx5IGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzIChiZWNhdXNlIG9mCisgKiBlYXJseV9wcmludGspIC0gc29tZXRpbWVzIGJlZm9yZSBzZXR1cF9hcmNoKCkgY29tcGxldGVzIC0gYmUgY2FyZWZ1bAorICogb2Ygd2hhdCBrZXJuZWwgZmVhdHVyZXMgYXJlIHVzZWQgLSB0aGV5IG1heSBub3QgYmUgaW5pdGlhbGlzZWQgeWV0LgorICoKKyAqIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgY29uc29sZXMgLSBib290Y29uc29sZXMgKGVhcmx5X3ByaW50aykgYW5kCisgKiAicmVhbCIgY29uc29sZXMgKGV2ZXJ5dGhpbmcgd2hpY2ggaXMgbm90IGEgYm9vdGNvbnNvbGUpIHdoaWNoIGFyZQorICogaGFuZGxlZCBkaWZmZXJlbnRseS4KKyAqICAtIEFueSBudW1iZXIgb2YgYm9vdGNvbnNvbGVzIGNhbiBiZSByZWdpc3RlcmVkIGF0IGFueSB0aW1lLgorICogIC0gQXMgc29vbiBhcyBhICJyZWFsIiBjb25zb2xlIGlzIHJlZ2lzdGVyZWQsIGFsbCBib290Y29uc29sZXMKKyAqICAgIHdpbGwgYmUgdW5yZWdpc3RlcmVkIGF1dG9tYXRpY2FsbHkuCisgKiAgLSBPbmNlIGEgInJlYWwiIGNvbnNvbGUgaXMgcmVnaXN0ZXJlZCwgYW55IGF0dGVtcHQgdG8gcmVnaXN0ZXIgYQorICogICAgYm9vdGNvbnNvbGVzIHdpbGwgYmUgcmVqZWN0ZWQKICAqLwotdm9pZCByZWdpc3Rlcl9jb25zb2xlKHN0cnVjdCBjb25zb2xlICpjb25zb2xlKQordm9pZCByZWdpc3Rlcl9jb25zb2xlKHN0cnVjdCBjb25zb2xlICpuZXdjb24pCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgY29uc29sZSAqYm9vdGNvbnNvbGUgPSBOVUxMOworCXN0cnVjdCBjb25zb2xlICpiY29uID0gTlVMTDsKIAotCWlmIChjb25zb2xlX2RyaXZlcnMpIHsKLQkJaWYgKGNvbnNvbGUtPmZsYWdzICYgQ09OX0JPT1QpCi0JCQlyZXR1cm47Ci0JCWlmIChjb25zb2xlX2RyaXZlcnMtPmZsYWdzICYgQ09OX0JPT1QpCi0JCQlib290Y29uc29sZSA9IGNvbnNvbGVfZHJpdmVyczsKKwkvKgorCSAqIGJlZm9yZSB3ZSByZWdpc3RlciBhIG5ldyBDT05fQk9PVCBjb25zb2xlLCBtYWtlIHN1cmUgd2UgZG9uJ3QKKwkgKiBhbHJlYWR5IGhhdmUgYSB2YWxpZCBjb25zb2xlCisJICovCisJaWYgKGNvbnNvbGVfZHJpdmVycyAmJiBuZXdjb24tPmZsYWdzICYgQ09OX0JPT1QpIHsKKwkJLyogZmluZCB0aGUgbGFzdCBvciByZWFsIGNvbnNvbGUgKi8KKwkJZm9yX2VhY2hfY29uc29sZShiY29uKSB7CisJCQlpZiAoIShiY29uLT5mbGFncyAmIENPTl9CT09UKSkgeworCQkJCXByaW50ayhLRVJOX0lORk8gIlRvbyBsYXRlIHRvIHJlZ2lzdGVyIGJvb3Rjb25zb2xlICVzJWRcbiIsCisJCQkJCW5ld2Nvbi0+bmFtZSwgbmV3Y29uLT5pbmRleCk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CiAJfQogCi0JaWYgKHByZWZlcnJlZF9jb25zb2xlIDwgMCB8fCBib290Y29uc29sZSB8fCAhY29uc29sZV9kcml2ZXJzKQorCWlmIChjb25zb2xlX2RyaXZlcnMgJiYgY29uc29sZV9kcml2ZXJzLT5mbGFncyAmIENPTl9CT09UKQorCQliY29uID0gY29uc29sZV9kcml2ZXJzOworCisJaWYgKHByZWZlcnJlZF9jb25zb2xlIDwgMCB8fCBiY29uIHx8ICFjb25zb2xlX2RyaXZlcnMpCiAJCXByZWZlcnJlZF9jb25zb2xlID0gc2VsZWN0ZWRfY29uc29sZTsKIAotCWlmIChjb25zb2xlLT5lYXJseV9zZXR1cCkKLQkJY29uc29sZS0+ZWFybHlfc2V0dXAoKTsKKwlpZiAobmV3Y29uLT5lYXJseV9zZXR1cCkKKwkJbmV3Y29uLT5lYXJseV9zZXR1cCgpOwogCiAJLyoKIAkgKglTZWUgaWYgd2Ugd2FudCB0byB1c2UgdGhpcyBjb25zb2xlIGRyaXZlci4gSWYgd2UKQEAgLTExNjAsMTMgKzExOTMsMTMgQEAKIAkgKgl0aGF0IHJlZ2lzdGVycyBoZXJlLgogCSAqLwogCWlmIChwcmVmZXJyZWRfY29uc29sZSA8IDApIHsKLQkJaWYgKGNvbnNvbGUtPmluZGV4IDwgMCkKLQkJCWNvbnNvbGUtPmluZGV4ID0gMDsKLQkJaWYgKGNvbnNvbGUtPnNldHVwID09IE5VTEwgfHwKLQkJICAgIGNvbnNvbGUtPnNldHVwKGNvbnNvbGUsIE5VTEwpID09IDApIHsKLQkJCWNvbnNvbGUtPmZsYWdzIHw9IENPTl9FTkFCTEVEOwotCQkJaWYgKGNvbnNvbGUtPmRldmljZSkgewotCQkJCWNvbnNvbGUtPmZsYWdzIHw9IENPTl9DT05TREVWOworCQlpZiAobmV3Y29uLT5pbmRleCA8IDApCisJCQluZXdjb24tPmluZGV4ID0gMDsKKwkJaWYgKG5ld2Nvbi0+c2V0dXAgPT0gTlVMTCB8fAorCQkgICAgbmV3Y29uLT5zZXR1cChuZXdjb24sIE5VTEwpID09IDApIHsKKwkJCW5ld2Nvbi0+ZmxhZ3MgfD0gQ09OX0VOQUJMRUQ7CisJCQlpZiAobmV3Y29uLT5kZXZpY2UpIHsKKwkJCQluZXdjb24tPmZsYWdzIHw9IENPTl9DT05TREVWOwogCQkJCXByZWZlcnJlZF9jb25zb2xlID0gMDsKIAkJCX0KIAkJfQpAQCAtMTE3OCw2NCArMTIxMSw2MiBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfQ01ETElORUNPTlNPTEVTICYmIGNvbnNvbGVfY21kbGluZVtpXS5uYW1lWzBdOwogCQkJaSsrKSB7Ci0JCWlmIChzdHJjbXAoY29uc29sZV9jbWRsaW5lW2ldLm5hbWUsIGNvbnNvbGUtPm5hbWUpICE9IDApCisJCWlmIChzdHJjbXAoY29uc29sZV9jbWRsaW5lW2ldLm5hbWUsIG5ld2Nvbi0+bmFtZSkgIT0gMCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoY29uc29sZS0+aW5kZXggPj0gMCAmJgotCQkgICAgY29uc29sZS0+aW5kZXggIT0gY29uc29sZV9jbWRsaW5lW2ldLmluZGV4KQorCQlpZiAobmV3Y29uLT5pbmRleCA+PSAwICYmCisJCSAgICBuZXdjb24tPmluZGV4ICE9IGNvbnNvbGVfY21kbGluZVtpXS5pbmRleCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoY29uc29sZS0+aW5kZXggPCAwKQotCQkJY29uc29sZS0+aW5kZXggPSBjb25zb2xlX2NtZGxpbmVbaV0uaW5kZXg7CisJCWlmIChuZXdjb24tPmluZGV4IDwgMCkKKwkJCW5ld2Nvbi0+aW5kZXggPSBjb25zb2xlX2NtZGxpbmVbaV0uaW5kZXg7CiAjaWZkZWYgQ09ORklHX0ExMVlfQlJBSUxMRV9DT05TT0xFCiAJCWlmIChjb25zb2xlX2NtZGxpbmVbaV0uYnJsX29wdGlvbnMpIHsKLQkJCWNvbnNvbGUtPmZsYWdzIHw9IENPTl9CUkw7Ci0JCQlicmFpbGxlX3JlZ2lzdGVyX2NvbnNvbGUoY29uc29sZSwKKwkJCW5ld2Nvbi0+ZmxhZ3MgfD0gQ09OX0JSTDsKKwkJCWJyYWlsbGVfcmVnaXN0ZXJfY29uc29sZShuZXdjb24sCiAJCQkJCWNvbnNvbGVfY21kbGluZVtpXS5pbmRleCwKIAkJCQkJY29uc29sZV9jbWRsaW5lW2ldLm9wdGlvbnMsCiAJCQkJCWNvbnNvbGVfY21kbGluZVtpXS5icmxfb3B0aW9ucyk7CiAJCQlyZXR1cm47CiAJCX0KICNlbmRpZgotCQlpZiAoY29uc29sZS0+c2V0dXAgJiYKLQkJICAgIGNvbnNvbGUtPnNldHVwKGNvbnNvbGUsIGNvbnNvbGVfY21kbGluZVtpXS5vcHRpb25zKSAhPSAwKQorCQlpZiAobmV3Y29uLT5zZXR1cCAmJgorCQkgICAgbmV3Y29uLT5zZXR1cChuZXdjb24sIGNvbnNvbGVfY21kbGluZVtpXS5vcHRpb25zKSAhPSAwKQogCQkJYnJlYWs7Ci0JCWNvbnNvbGUtPmZsYWdzIHw9IENPTl9FTkFCTEVEOwotCQljb25zb2xlLT5pbmRleCA9IGNvbnNvbGVfY21kbGluZVtpXS5pbmRleDsKKwkJbmV3Y29uLT5mbGFncyB8PSBDT05fRU5BQkxFRDsKKwkJbmV3Y29uLT5pbmRleCA9IGNvbnNvbGVfY21kbGluZVtpXS5pbmRleDsKIAkJaWYgKGkgPT0gc2VsZWN0ZWRfY29uc29sZSkgewotCQkJY29uc29sZS0+ZmxhZ3MgfD0gQ09OX0NPTlNERVY7CisJCQluZXdjb24tPmZsYWdzIHw9IENPTl9DT05TREVWOwogCQkJcHJlZmVycmVkX2NvbnNvbGUgPSBzZWxlY3RlZF9jb25zb2xlOwogCQl9CiAJCWJyZWFrOwogCX0KIAotCWlmICghKGNvbnNvbGUtPmZsYWdzICYgQ09OX0VOQUJMRUQpKQorCWlmICghKG5ld2Nvbi0+ZmxhZ3MgJiBDT05fRU5BQkxFRCkpCiAJCXJldHVybjsKIAotCWlmIChib290Y29uc29sZSAmJiAoY29uc29sZS0+ZmxhZ3MgJiBDT05fQ09OU0RFVikpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY29uc29sZSBoYW5kb3ZlcjogYm9vdCBbJXMlZF0gLT4gcmVhbCBbJXMlZF1cbiIsCi0JCSAgICAgICBib290Y29uc29sZS0+bmFtZSwgYm9vdGNvbnNvbGUtPmluZGV4LAotCQkgICAgICAgY29uc29sZS0+bmFtZSwgY29uc29sZS0+aW5kZXgpOwotCQl1bnJlZ2lzdGVyX2NvbnNvbGUoYm9vdGNvbnNvbGUpOwotCQljb25zb2xlLT5mbGFncyAmPSB+Q09OX1BSSU5UQlVGRkVSOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImNvbnNvbGUgWyVzJWRdIGVuYWJsZWRcbiIsCi0JCSAgICAgICBjb25zb2xlLT5uYW1lLCBjb25zb2xlLT5pbmRleCk7Ci0JfQorCS8qCisJICogSWYgd2UgaGF2ZSBhIGJvb3Rjb25zb2xlLCBhbmQgYXJlIHN3aXRjaGluZyB0byBhIHJlYWwgY29uc29sZSwKKwkgKiBkb24ndCBwcmludCBldmVyeXRoaW5nIG91dCBhZ2Fpbiwgc2luY2Ugd2hlbiB0aGUgYm9vdCBjb25zb2xlLCBhbmQKKwkgKiB0aGUgcmVhbCBjb25zb2xlIGFyZSB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UsIGl0J3MgYW5ub3lpbmcgdG8KKwkgKiBzZWUgdGhlIGJlZ2lubmluZyBib290IG1lc3NhZ2VzIHR3aWNlCisJICovCisJaWYgKGJjb24gJiYgKChuZXdjb24tPmZsYWdzICYgKENPTl9DT05TREVWIHwgQ09OX0JPT1QpKSA9PSBDT05fQ09OU0RFVikpCisJCW5ld2Nvbi0+ZmxhZ3MgJj0gfkNPTl9QUklOVEJVRkZFUjsKIAogCS8qCiAJICoJUHV0IHRoaXMgY29uc29sZSBpbiB0aGUgbGlzdCAtIGtlZXAgdGhlCiAJICoJcHJlZmVycmVkIGRyaXZlciBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KIAkgKi8KIAlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0JaWYgKChjb25zb2xlLT5mbGFncyAmIENPTl9DT05TREVWKSB8fCBjb25zb2xlX2RyaXZlcnMgPT0gTlVMTCkgewotCQljb25zb2xlLT5uZXh0ID0gY29uc29sZV9kcml2ZXJzOwotCQljb25zb2xlX2RyaXZlcnMgPSBjb25zb2xlOwotCQlpZiAoY29uc29sZS0+bmV4dCkKLQkJCWNvbnNvbGUtPm5leHQtPmZsYWdzICY9IH5DT05fQ09OU0RFVjsKKwlpZiAoKG5ld2Nvbi0+ZmxhZ3MgJiBDT05fQ09OU0RFVikgfHwgY29uc29sZV9kcml2ZXJzID09IE5VTEwpIHsKKwkJbmV3Y29uLT5uZXh0ID0gY29uc29sZV9kcml2ZXJzOworCQljb25zb2xlX2RyaXZlcnMgPSBuZXdjb247CisJCWlmIChuZXdjb24tPm5leHQpCisJCQluZXdjb24tPm5leHQtPmZsYWdzICY9IH5DT05fQ09OU0RFVjsKIAl9IGVsc2UgewotCQljb25zb2xlLT5uZXh0ID0gY29uc29sZV9kcml2ZXJzLT5uZXh0OwotCQljb25zb2xlX2RyaXZlcnMtPm5leHQgPSBjb25zb2xlOworCQluZXdjb24tPm5leHQgPSBjb25zb2xlX2RyaXZlcnMtPm5leHQ7CisJCWNvbnNvbGVfZHJpdmVycy0+bmV4dCA9IG5ld2NvbjsKIAl9Ci0JaWYgKGNvbnNvbGUtPmZsYWdzICYgQ09OX1BSSU5UQlVGRkVSKSB7CisJaWYgKG5ld2Nvbi0+ZmxhZ3MgJiBDT05fUFJJTlRCVUZGRVIpIHsKIAkJLyoKIAkJICogcmVsZWFzZV9jb25zb2xlX3NlbSgpIHdpbGwgcHJpbnQgb3V0IHRoZSBidWZmZXJlZCBtZXNzYWdlcwogCQkgKiBmb3IgdXMuCkBAIC0xMjQ1LDYgKzEyNzYsMjggQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9nYnVmX2xvY2ssIGZsYWdzKTsKIAl9CiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCisJLyoKKwkgKiBCeSB1bnJlZ2lzdGVyaW5nIHRoZSBib290Y29uc29sZXMgYWZ0ZXIgd2UgZW5hYmxlIHRoZSByZWFsIGNvbnNvbGUKKwkgKiB3ZSBnZXQgdGhlICJjb25zb2xlIHh4eCBlbmFibGVkIiBtZXNzYWdlIG9uIGFsbCB0aGUgY29uc29sZXMgLQorCSAqIGJvb3QgY29uc29sZXMsIHJlYWwgY29uc29sZXMsIGV0YyAtIHRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgZW5kCisJICogdXNlcnMga25vdyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW4gdGhlIGtlcm5lbCdzIGxvZyBidWZmZXIgdGhhdAorCSAqIHdlbnQgdG8gdGhlIGJvb3Rjb25zb2xlICh0aGF0IHRoZXkgZG8gbm90IHNlZSBvbiB0aGUgcmVhbCBjb25zb2xlKQorCSAqLworCWlmIChiY29uICYmICgobmV3Y29uLT5mbGFncyAmIChDT05fQ09OU0RFViB8IENPTl9CT09UKSkgPT0gQ09OX0NPTlNERVYpKSB7CisJCS8qIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHR3aWNlLCB0byBtYWtlIHN1cmUgd2UgcHJpbnQKKwkJICogZXZlcnl0aGluZyBvdXQsIGJlZm9yZSB3ZSB1bnJlZ2lzdGVyIHRoZSBjb25zb2xlKHMpCisJCSAqLworCQlwcmludGsoS0VSTl9JTkZPICJjb25zb2xlIFslcyVkXSBlbmFibGVkLCBib290Y29uc29sZSBkaXNhYmxlZFxuIiwKKwkJCW5ld2Nvbi0+bmFtZSwgbmV3Y29uLT5pbmRleCk7CisJCWZvcl9lYWNoX2NvbnNvbGUoYmNvbikKKwkJCWlmIChiY29uLT5mbGFncyAmIENPTl9CT09UKQorCQkJCXVucmVnaXN0ZXJfY29uc29sZShiY29uKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICIlc2NvbnNvbGUgWyVzJWRdIGVuYWJsZWRcbiIsCisJCQkobmV3Y29uLT5mbGFncyAmIENPTl9CT09UKSA/ICJib290IiA6ICIiICwKKwkJCW5ld2Nvbi0+bmFtZSwgbmV3Y29uLT5pbmRleCk7CisJfQogfQogRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9jb25zb2xlKTsKIApAQCAtMTI4NywxMSArMTM0MCwxMyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX2Jvb3RfY29uc29sZXModm9pZCkKIHsKLQlpZiAoY29uc29sZV9kcml2ZXJzICE9IE5VTEwpIHsKLQkJaWYgKGNvbnNvbGVfZHJpdmVycy0+ZmxhZ3MgJiBDT05fQk9PVCkgeworCXN0cnVjdCBjb25zb2xlICpjb247CisKKwlmb3JfZWFjaF9jb25zb2xlKGNvbikgeworCQlpZiAoY29uLT5mbGFncyAmIENPTl9CT09UKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJ0dXJuIG9mZiBib290IGNvbnNvbGUgJXMlZFxuIiwKLQkJCQljb25zb2xlX2RyaXZlcnMtPm5hbWUsIGNvbnNvbGVfZHJpdmVycy0+aW5kZXgpOwotCQkJcmV0dXJuIHVucmVnaXN0ZXJfY29uc29sZShjb25zb2xlX2RyaXZlcnMpOworCQkJCWNvbi0+bmFtZSwgY29uLT5pbmRleCk7CisJCQl1bnJlZ2lzdGVyX2NvbnNvbGUoY29uKTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCAwODJjMzIwLi4zMDdjMjg1IDEwMDY0NAotLS0gYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIva2VybmVsL3B0cmFjZS5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAlpZiAoIWR1bXBhYmxlICYmICFjYXBhYmxlKENBUF9TWVNfUFRSQUNFKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCXJldHVybiBzZWN1cml0eV9wdHJhY2VfbWF5X2FjY2Vzcyh0YXNrLCBtb2RlKTsKKwlyZXR1cm4gc2VjdXJpdHlfcHRyYWNlX2FjY2Vzc19jaGVjayh0YXNrLCBtb2RlKTsKIH0KIAogYm9vbCBwdHJhY2VfbWF5X2FjY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGludCBtb2RlKQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdWNsYXNzaWMuYyBiL2tlcm5lbC9yY3VjbGFzc2ljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMmIwYjMuLjAwMDAwMDAKLS0tIGEva2VybmVsL3JjdWNsYXNzaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDgwNyArMCwwIEBACi0vKgotICogUmVhZC1Db3B5IFVwZGF0ZSBtZWNoYW5pc20gZm9yIG11dHVhbCBleGNsdXNpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDEKLSAqCi0gKiBBdXRob3JzOiBEaXBhbmthciBTYXJtYSA8ZGlwYW5rYXJAaW4uaWJtLmNvbT4KLSAqCSAgICBNYW5mcmVkIFNwcmF1bCA8bWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tPgotICoKLSAqIEJhc2VkIG9uIHRoZSBvcmlnaW5hbCB3b3JrIGJ5IFBhdWwgTWNLZW5uZXkgPHBhdWxtY2tAdXMuaWJtLmNvbT4KLSAqIGFuZCBpbnB1dHMgZnJvbSBSdXN0eSBSdXNzZWxsLCBBbmRyZWEgQXJjYW5nZWxpIGFuZCBBbmRpIEtsZWVuLgotICogUGFwZXJzOgotICogaHR0cDovL3d3dy5yZHJvcC5jb20vdXNlcnMvcGF1bG1jay9wYXBlci9yY2xvY2twZGNzcHJvb2YucGRmCi0gKiBodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9sb2NraW5nL3JjbG9ja19PTFMuMjAwMS4wNS4wMWMuc2MucGRmIChPTFMyMDAxKQotICoKLSAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQotICogCQlEb2N1bWVudGF0aW9uL1JDVQotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmN1X2xvY2tfa2V5Owotc3RydWN0IGxvY2tkZXBfbWFwIHJjdV9sb2NrX21hcCA9Ci0JU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoInJjdV9yZWFkX2xvY2siLCAmcmN1X2xvY2tfa2V5KTsKLUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9sb2NrX21hcCk7Ci0jZW5kaWYKLQotCi0vKiBEZWZpbml0aW9uIGZvciByY3VwZGF0ZSBjb250cm9sIGJsb2NrLiAqLwotc3RhdGljIHN0cnVjdCByY3VfY3RybGJsayByY3VfY3RybGJsayA9IHsKLQkuY3VyID0gLTMwMCwKLQkuY29tcGxldGVkID0gLTMwMCwKLQkucGVuZGluZyA9IC0zMDAsCi0JLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgmcmN1X2N0cmxibGsubG9jayksCi0JLmNwdW1hc2sgPSBDUFVfQklUU19OT05FLAotfTsKLQotc3RhdGljIHN0cnVjdCByY3VfY3RybGJsayByY3VfYmhfY3RybGJsayA9IHsKLQkuY3VyID0gLTMwMCwKLQkuY29tcGxldGVkID0gLTMwMCwKLQkucGVuZGluZyA9IC0zMDAsCi0JLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgmcmN1X2JoX2N0cmxibGsubG9jayksCi0JLmNwdW1hc2sgPSBDUFVfQklUU19OT05FLAotfTsKLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X2RhdGEpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X2JoX2RhdGEpOwotCi0vKgotICogSW5jcmVtZW50IHRoZSBxdWllc2NlbnQgc3RhdGUgY291bnRlci4KLSAqIFRoZSBjb3VudGVyIGlzIGEgYml0IGRlZ2VuZXJhdGVkOiBXZSBkbyBub3QgbmVlZCB0byBrbm93Ci0gKiBob3cgbWFueSBxdWllc2NlbnQgc3RhdGVzIHBhc3NlZCwganVzdCBpZiB0aGVyZSB3YXMgYXQgbGVhc3QKLSAqIG9uZSBzaW5jZSB0aGUgc3RhcnQgb2YgdGhlIGdyYWNlIHBlcmlvZC4gVGh1cyBqdXN0IGEgZmxhZy4KLSAqLwotdm9pZCByY3VfcXNjdHJfaW5jKGludCBjcHUpCi17Ci0Jc3RydWN0IHJjdV9kYXRhICpyZHAgPSAmcGVyX2NwdShyY3VfZGF0YSwgY3B1KTsKLQlyZHAtPnBhc3NlZF9xdWllc2MgPSAxOwotfQotCi12b2lkIHJjdV9iaF9xc2N0cl9pbmMoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9ICZwZXJfY3B1KHJjdV9iaF9kYXRhLCBjcHUpOwotCXJkcC0+cGFzc2VkX3F1aWVzYyA9IDE7Ci19Ci0KLXN0YXRpYyBpbnQgYmxpbWl0ID0gMTA7Ci1zdGF0aWMgaW50IHFoaW1hcmsgPSAxMDAwMDsKLXN0YXRpYyBpbnQgcWxvd21hcmsgPSAxMDA7Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdm9pZCBmb3JjZV9xdWllc2NlbnRfc3RhdGUoc3RydWN0IHJjdV9kYXRhICpyZHAsCi0JCQlzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCkKLXsKLQlpbnQgY3B1OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzZXRfbmVlZF9yZXNjaGVkKCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJjcC0+bG9jaywgZmxhZ3MpOwotCWlmICh1bmxpa2VseSghcmNwLT5zaWduYWxlZCkpIHsKLQkJcmNwLT5zaWduYWxlZCA9IDE7Ci0JCS8qCi0JCSAqIERvbid0IHNlbmQgSVBJIHRvIGl0c2VsZi4gV2l0aCBpcnFzIGRpc2FibGVkLAotCQkgKiByZHAtPmNwdSBpcyB0aGUgY3VycmVudCBjcHUuCi0JCSAqCi0JCSAqIGNwdV9vbmxpbmVfbWFzayBpcyB1cGRhdGVkIGJ5IHRoZSBfY3B1X2Rvd24oKQotCQkgKiB1c2luZyBfX3N0b3BfbWFjaGluZSgpLiBTaW5jZSB3ZSdyZSBpbiBpcnFzIGRpc2FibGVkCi0JCSAqIHNlY3Rpb24sIF9fc3RvcF9tYWNoaW5lKCkgaXMgbm90IGV4ZWN0dXRpbmcsIGhlbmNlCi0JCSAqIHRoZSBjcHVfb25saW5lX21hc2sgaXMgc3RhYmxlLgotCQkgKgotCQkgKiBIb3dldmVyLCAgYSBjcHUgbWlnaHQgaGF2ZSBiZWVuIG9mZmxpbmVkIF9qdXN0XyBiZWZvcmUKLQkJICogd2UgZGlzYWJsZWQgaXJxcyB3aGlsZSBlbnRlcmluZyBoZXJlLgotCQkgKiBBbmQgcmN1IHN1YnN5c3RlbSBtaWdodCBub3QgeWV0IGhhdmUgaGFuZGxlZCB0aGUgQ1BVX0RFQUQKLQkJICogbm90aWZpY2F0aW9uLCBsZWFkaW5nIHRvIHRoZSBvZmZsaW5lZCBjcHUncyBiaXQKLQkJICogYmVpbmcgc2V0IGluIHRoZSByY3AtPmNwdW1hc2suCi0JCSAqCi0JCSAqIEhlbmNlIGNwdW1hc2sgPSAocmNwLT5jcHVtYXNrICYgY3B1X29ubGluZV9tYXNrKSB0byBwcmV2ZW50Ci0JCSAqIHNlbmRpbmcgc21wX3Jlc2NoZWR1bGUoKSB0byBhbiBvZmZsaW5lZCBDUFUuCi0JCSAqLwotCQlmb3JfZWFjaF9jcHVfYW5kKGNwdSwKLQkJCQkgIHRvX2NwdW1hc2socmNwLT5jcHVtYXNrKSwgY3B1X29ubGluZV9tYXNrKSB7Ci0JCQlpZiAoY3B1ICE9IHJkcC0+Y3B1KQotCQkJCXNtcF9zZW5kX3Jlc2NoZWR1bGUoY3B1KTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyY3AtPmxvY2ssIGZsYWdzKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9yY2VfcXVpZXNjZW50X3N0YXRlKHN0cnVjdCByY3VfZGF0YSAqcmRwLAotCQkJc3RydWN0IHJjdV9jdHJsYmxrICpyY3ApCi17Ci0Jc2V0X25lZWRfcmVzY2hlZCgpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIF9fY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCBzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCwKLQkJc3RydWN0IHJjdV9kYXRhICpyZHApCi17Ci0JbG9uZyBiYXRjaDsKLQotCWhlYWQtPm5leHQgPSBOVUxMOwotCXNtcF9tYigpOyAvKiBSZWFkIG9mIHJjdS0+Y3VyIG11c3QgaGFwcGVuIGFmdGVyIGFueSBjaGFuZ2UgYnkgY2FsbGVyLiAqLwotCi0JLyoKLQkgKiBEZXRlcm1pbmUgdGhlIGJhdGNoIG51bWJlciBvZiB0aGlzIGNhbGxiYWNrLgotCSAqCi0JICogVXNpbmcgQUNDRVNTX09OQ0UgdG8gYXZvaWQgdGhlIGZvbGxvd2luZyBlcnJvciB3aGVuIGdjYyBlbGltaW5hdGVzCi0JICogbG9jYWwgdmFyaWFibGUgImJhdGNoIiBhbmQgZW1pdHMgY29kZXMgbGlrZSB0aGlzOgotCSAqCTEpIHJkcC0+YmF0Y2ggPSByY3AtPmN1ciArIDEgIyBnZXRzIG9sZCB2YWx1ZQotCSAqCS4uLi4uLgotCSAqCTIpcmN1X2JhdGNoX2FmdGVyKHJjcC0+Y3VyICsgMSwgcmRwLT5iYXRjaCkgIyBnZXRzIG5ldyB2YWx1ZQotCSAqIHRoZW4gWypueHR0YWlsWzBdLCAqbnh0dGFpbFsxXSkgbWF5IGNvbnRhaW4gY2FsbGJhY2tzCi0JICogdGhhdCBiYXRjaCMgPSByZHAtPmJhdGNoLCBzZWUgdGhlIGNvbW1lbnQgb2Ygc3RydWN0IHJjdV9kYXRhLgotCSAqLwotCWJhdGNoID0gQUNDRVNTX09OQ0UocmNwLT5jdXIpICsgMTsKLQotCWlmIChyZHAtPm54dGxpc3QgJiYgcmN1X2JhdGNoX2FmdGVyKGJhdGNoLCByZHAtPmJhdGNoKSkgewotCQkvKiBwcm9jZXNzIGNhbGxiYWNrcyAqLwotCQlyZHAtPm54dHRhaWxbMF0gPSByZHAtPm54dHRhaWxbMV07Ci0JCXJkcC0+bnh0dGFpbFsxXSA9IHJkcC0+bnh0dGFpbFsyXTsKLQkJaWYgKHJjdV9iYXRjaF9hZnRlcihiYXRjaCAtIDEsIHJkcC0+YmF0Y2gpKQotCQkJcmRwLT5ueHR0YWlsWzBdID0gcmRwLT5ueHR0YWlsWzJdOwotCX0KLQotCXJkcC0+YmF0Y2ggPSBiYXRjaDsKLQkqcmRwLT5ueHR0YWlsWzJdID0gaGVhZDsKLQlyZHAtPm54dHRhaWxbMl0gPSAmaGVhZC0+bmV4dDsKLQotCWlmICh1bmxpa2VseSgrK3JkcC0+cWxlbiA+IHFoaW1hcmspKSB7Ci0JCXJkcC0+YmxpbWl0ID0gSU5UX01BWDsKLQkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJkcCwgJnJjdV9jdHJsYmxrKTsKLQl9Ci19Ci0KLSNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgotCi1zdGF0aWMgdm9pZCByZWNvcmRfZ3Bfc3RhbGxfY2hlY2tfdGltZShzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCkKLXsKLQlyY3AtPmdwX3N0YXJ0ID0gamlmZmllczsKLQlyY3AtPmppZmZpZXNfc3RhbGwgPSBqaWZmaWVzICsgUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9DSEVDSzsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRfb3RoZXJfY3B1X3N0YWxsKHN0cnVjdCByY3VfY3RybGJsayAqcmNwKQotewotCWludCBjcHU7Ci0JbG9uZyBkZWx0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogT25seSBsZXQgb25lIENQVSBjb21wbGFpbiBhYm91dCBvdGhlcnMgcGVyIHRpbWUgaW50ZXJ2YWwuICovCi0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcmNwLT5sb2NrLCBmbGFncyk7Ci0JZGVsdGEgPSBqaWZmaWVzIC0gcmNwLT5qaWZmaWVzX3N0YWxsOwotCWlmIChkZWx0YSA8IDIgfHwgcmNwLT5jdXIgIT0gcmNwLT5jb21wbGV0ZWQpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmNwLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0JcmNwLT5qaWZmaWVzX3N0YWxsID0gamlmZmllcyArIFJDVV9TRUNPTkRTX1RJTExfU1RBTExfUkVDSEVDSzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyY3AtPmxvY2ssIGZsYWdzKTsKLQotCS8qIE9LLCB0aW1lIHRvIHJhdCBvbiBvdXIgYnVkZHkuLi4gKi8KLQotCXByaW50ayhLRVJOX0VSUiAiSU5GTzogUkNVIGRldGVjdGVkIENQVSBzdGFsbHM6Iik7Ci0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIHRvX2NwdW1hc2socmNwLT5jcHVtYXNrKSkpCi0JCQlwcmludGsoIiAlZCIsIGNwdSk7Ci0JfQotCXByaW50aygiIChkZXRlY3RlZCBieSAlZCwgdD0lbGQgamlmZmllcylcbiIsCi0JICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgKGxvbmcpKGppZmZpZXMgLSByY3AtPmdwX3N0YXJ0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X2NwdV9zdGFsbChzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JcHJpbnRrKEtFUk5fRVJSICJJTkZPOiBSQ1UgZGV0ZWN0ZWQgQ1BVICVkIHN0YWxsICh0PSVsdS8lbHUgamlmZmllcylcbiIsCi0JCQlzbXBfcHJvY2Vzc29yX2lkKCksIGppZmZpZXMsCi0JCQlqaWZmaWVzIC0gcmNwLT5ncF9zdGFydCk7Ci0JZHVtcF9zdGFjaygpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZyY3AtPmxvY2ssIGZsYWdzKTsKLQlpZiAoKGxvbmcpKGppZmZpZXMgLSByY3AtPmppZmZpZXNfc3RhbGwpID49IDApCi0JCXJjcC0+amlmZmllc19zdGFsbCA9Ci0JCQlqaWZmaWVzICsgUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9SRUNIRUNLOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjcC0+bG9jaywgZmxhZ3MpOwotCXNldF9uZWVkX3Jlc2NoZWQoKTsgIC8qIGtpY2sgb3Vyc2VsdmVzIHRvIGdldCB0aGluZ3MgZ29pbmcuICovCi19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrX2NwdV9zdGFsbChzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCkKLXsKLQlsb25nIGRlbHRhOwotCi0JZGVsdGEgPSBqaWZmaWVzIC0gcmNwLT5qaWZmaWVzX3N0YWxsOwotCWlmIChjcHVtYXNrX3Rlc3RfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgdG9fY3B1bWFzayhyY3AtPmNwdW1hc2spKSAmJgotCQlkZWx0YSA+PSAwKSB7Ci0KLQkJLyogV2UgaGF2ZW4ndCBjaGVja2VkIGluLCBzbyBnbyBkdW1wIHN0YWNrLiAqLwotCQlwcmludF9jcHVfc3RhbGwocmNwKTsKLQotCX0gZWxzZSBpZiAocmNwLT5jdXIgIT0gcmNwLT5jb21wbGV0ZWQgJiYgZGVsdGEgPj0gMikgewotCi0JCS8qIFRoZXkgaGFkIHR3byBzZWNvbmRzIHRvIGR1bXAgc3RhY2ssIHNvIGNvbXBsYWluLiAqLwotCQlwcmludF9vdGhlcl9jcHVfc3RhbGwocmNwKTsKLQl9Ci19Ci0KLSNlbHNlIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAqLwotCi1zdGF0aWMgdm9pZCByZWNvcmRfZ3Bfc3RhbGxfY2hlY2tfdGltZShzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2NwdV9zdGFsbChzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCkKLXsKLX0KLQotI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAqLwotCi0vKioKLSAqIGNhbGxfcmN1IC0gUXVldWUgYW4gUkNVIGNhbGxiYWNrIGZvciBpbnZvY2F0aW9uIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgotICogQGhlYWQ6IHN0cnVjdHVyZSB0byBiZSB1c2VkIGZvciBxdWV1ZWluZyB0aGUgUkNVIHVwZGF0ZXMuCi0gKiBAZnVuYzogYWN0dWFsIHVwZGF0ZSBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBncmFjZSBwZXJpb2QKLSAqCi0gKiBUaGUgdXBkYXRlIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBzb21lIHRpbWUgYWZ0ZXIgYSBmdWxsIGdyYWNlCi0gKiBwZXJpb2QgZWxhcHNlcywgaW4gb3RoZXIgd29yZHMgYWZ0ZXIgYWxsIGN1cnJlbnRseSBleGVjdXRpbmcgUkNVCi0gKiByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgaGF2ZSBjb21wbGV0ZWQuICBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCi0gKiBzZWN0aW9ucyBhcmUgZGVsaW1pdGVkIGJ5IHJjdV9yZWFkX2xvY2soKSBhbmQgcmN1X3JlYWRfdW5sb2NrKCksCi0gKiBhbmQgbWF5IGJlIG5lc3RlZC4KLSAqLwotdm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCi0JCQkJdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaGVhZC0+ZnVuYyA9IGZ1bmM7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fY2FsbF9yY3UoaGVhZCwgJnJjdV9jdHJsYmxrLCAmX19nZXRfY3B1X3ZhcihyY3VfZGF0YSkpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTsKLQotLyoqCi0gKiBjYWxsX3JjdV9iaCAtIFF1ZXVlIGFuIFJDVSBmb3IgaW52b2NhdGlvbiBhZnRlciBhIHF1aWNrZXIgZ3JhY2UgcGVyaW9kLgotICogQGhlYWQ6IHN0cnVjdHVyZSB0byBiZSB1c2VkIGZvciBxdWV1ZWluZyB0aGUgUkNVIHVwZGF0ZXMuCi0gKiBAZnVuYzogYWN0dWFsIHVwZGF0ZSBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBncmFjZSBwZXJpb2QKLSAqCi0gKiBUaGUgdXBkYXRlIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBzb21lIHRpbWUgYWZ0ZXIgYSBmdWxsIGdyYWNlCi0gKiBwZXJpb2QgZWxhcHNlcywgaW4gb3RoZXIgd29yZHMgYWZ0ZXIgYWxsIGN1cnJlbnRseSBleGVjdXRpbmcgUkNVCi0gKiByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgaGF2ZSBjb21wbGV0ZWQuIGNhbGxfcmN1X2JoKCkgYXNzdW1lcwotICogdGhhdCB0aGUgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGVuZCBvbiBjb21wbGV0aW9uIG9mIGEgc29mdGlycQotICogaGFuZGxlci4gVGhpcyBtZWFucyB0aGF0IHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBpbiBwcm9jZXNzCi0gKiBjb250ZXh0IG11c3Qgbm90IGJlIGludGVycnVwdGVkIGJ5IHNvZnRpcnFzLiBUaGlzIGludGVyZmFjZSBpcyB0byBiZQotICogdXNlZCB3aGVuIG1vc3Qgb2YgdGhlIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBhcmUgaW4gc29mdGlycSBjb250ZXh0LgotICogUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBhcmUgZGVsaW1pdGVkIGJ5IHJjdV9yZWFkX2xvY2soKSBhbmQKLSAqIHJjdV9yZWFkX3VubG9jaygpLCAqIGlmIGluIGludGVycnVwdCBjb250ZXh0IG9yIHJjdV9yZWFkX2xvY2tfYmgoKQotICogYW5kIHJjdV9yZWFkX3VubG9ja19iaCgpLCBpZiBpbiBwcm9jZXNzIGNvbnRleHQuIFRoZXNlIG1heSBiZSBuZXN0ZWQuCi0gKi8KLXZvaWQgY2FsbF9yY3VfYmgoc3RydWN0IHJjdV9oZWFkICpoZWFkLAotCQkJCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWhlYWQtPmZ1bmMgPSBmdW5jOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX2NhbGxfcmN1KGhlYWQsICZyY3VfYmhfY3RybGJsaywgJl9fZ2V0X2NwdV92YXIocmN1X2JoX2RhdGEpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdV9iaCk7Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBSQ1UgYmF0Y2hlcyBwcm9jZXNzZWQgdGh1cyBmYXIuICBVc2VmdWwKLSAqIGZvciBkZWJ1ZyBhbmQgc3RhdGlzdGljcy4KLSAqLwotbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCkKLXsKLQlyZXR1cm4gcmN1X2N0cmxibGsuY29tcGxldGVkOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhdGNoZXNfY29tcGxldGVkKTsKLQotLyoKLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIFJDVSBiYXRjaGVzIHByb2Nlc3NlZCB0aHVzIGZhci4gIFVzZWZ1bAotICogZm9yIGRlYnVnIGFuZCBzdGF0aXN0aWNzLgotICovCi1sb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9iaCh2b2lkKQotewotCXJldHVybiByY3VfYmhfY3RybGJsay5jb21wbGV0ZWQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyY3VfYmF0Y2hlc19jb21wbGV0ZWRfYmgpOwotCi0vKiBSYWlzZXMgdGhlIHNvZnRpcnEgZm9yIHByb2Nlc3NpbmcgcmN1X2NhbGxiYWNrcy4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByYWlzZV9yY3Vfc29mdGlycSh2b2lkKQotewotCXJhaXNlX3NvZnRpcnEoUkNVX1NPRlRJUlEpOwotfQotCi0vKgotICogSW52b2tlIHRoZSBjb21wbGV0ZWQgUkNVIGNhbGxiYWNrcy4gVGhleSBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4KLSAqIGEgcGVyLWNwdSBsaXN0LgotICovCi1zdGF0aWMgdm9pZCByY3VfZG9fYmF0Y2goc3RydWN0IHJjdV9kYXRhICpyZHApCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcmN1X2hlYWQgKm5leHQsICpsaXN0OwotCWludCBjb3VudCA9IDA7Ci0KLQlsaXN0ID0gcmRwLT5kb25lbGlzdDsKLQl3aGlsZSAobGlzdCkgewotCQluZXh0ID0gbGlzdC0+bmV4dDsKLQkJcHJlZmV0Y2gobmV4dCk7Ci0JCWxpc3QtPmZ1bmMobGlzdCk7Ci0JCWxpc3QgPSBuZXh0OwotCQlpZiAoKytjb3VudCA+PSByZHAtPmJsaW1pdCkKLQkJCWJyZWFrOwotCX0KLQlyZHAtPmRvbmVsaXN0ID0gbGlzdDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlyZHAtPnFsZW4gLT0gY291bnQ7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCWlmIChyZHAtPmJsaW1pdCA9PSBJTlRfTUFYICYmIHJkcC0+cWxlbiA8PSBxbG93bWFyaykKLQkJcmRwLT5ibGltaXQgPSBibGltaXQ7Ci0KLQlpZiAoIXJkcC0+ZG9uZWxpc3QpCi0JCXJkcC0+ZG9uZXRhaWwgPSAmcmRwLT5kb25lbGlzdDsKLQllbHNlCi0JCXJhaXNlX3JjdV9zb2Z0aXJxKCk7Ci19Ci0KLS8qCi0gKiBHcmFjZSBwZXJpb2QgaGFuZGxpbmc6Ci0gKiBUaGUgZ3JhY2UgcGVyaW9kIGhhbmRsaW5nIGNvbnNpc3RzIG91dCBvZiB0d28gc3RlcHM6Ci0gKiAtIEEgbmV3IGdyYWNlIHBlcmlvZCBpcyBzdGFydGVkLgotICogICBUaGlzIGlzIGRvbmUgYnkgcmN1X3N0YXJ0X2JhdGNoLiBUaGUgc3RhcnQgaXMgbm90IGJyb2FkY2FzdGVkIHRvCi0gKiAgIGFsbCBjcHVzLCB0aGV5IG11c3QgcGljayB0aGlzIHVwIGJ5IGNvbXBhcmluZyByY3AtPmN1ciB3aXRoCi0gKiAgIHJkcC0+cXVpZXNjYmF0Y2guIEFsbCBjcHVzIGFyZSByZWNvcmRlZCAgaW4gdGhlCi0gKiAgIHJjdV9jdHJsYmxrLmNwdW1hc2sgYml0bWFwLgotICogLSBBbGwgY3B1cyBtdXN0IGdvIHRocm91Z2ggYSBxdWllc2NlbnQgc3RhdGUuCi0gKiAgIFNpbmNlIHRoZSBzdGFydCBvZiB0aGUgZ3JhY2UgcGVyaW9kIGlzIG5vdCBicm9hZGNhc3RlZCwgYXQgbGVhc3QgdHdvCi0gKiAgIGNhbGxzIHRvIHJjdV9jaGVja19xdWllc2NlbnRfc3RhdGUgYXJlIHJlcXVpcmVkOgotICogICBUaGUgZmlyc3QgY2FsbCBqdXN0IG5vdGljZXMgdGhhdCBhIG5ldyBncmFjZSBwZXJpb2QgaXMgcnVubmluZy4gVGhlCi0gKiAgIGZvbGxvd2luZyBjYWxscyBjaGVjayBpZiB0aGVyZSB3YXMgYSBxdWllc2NlbnQgc3RhdGUgc2luY2UgdGhlIGJlZ2lubmluZwotICogICBvZiB0aGUgZ3JhY2UgcGVyaW9kLiBJZiBzbywgaXQgdXBkYXRlcyByY3VfY3RybGJsay5jcHVtYXNrLiBJZgotICogICB0aGUgYml0bWFwIGlzIGVtcHR5LCB0aGVuIHRoZSBncmFjZSBwZXJpb2QgaXMgY29tcGxldGVkLgotICogICByY3VfY2hlY2tfcXVpZXNjZW50X3N0YXRlIGNhbGxzIHJjdV9zdGFydF9iYXRjaCgwKSB0byBzdGFydCB0aGUgbmV4dCBncmFjZQotICogICBwZXJpb2QgKGlmIG5lY2Vzc2FyeSkuCi0gKi8KLQotLyoKLSAqIFJlZ2lzdGVyIGEgbmV3IGJhdGNoIG9mIGNhbGxiYWNrcywgYW5kIHN0YXJ0IGl0IHVwIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBubwotICogYWN0aXZlIGJhdGNoIGFuZCB0aGUgYmF0Y2ggdG8gYmUgcmVnaXN0ZXJlZCBoYXMgbm90IGFscmVhZHkgb2NjdXJyZWQuCi0gKiBDYWxsZXIgbXVzdCBob2xkIHJjdV9jdHJsYmxrLmxvY2suCi0gKi8KLXN0YXRpYyB2b2lkIHJjdV9zdGFydF9iYXRjaChzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCkKLXsKLQlpZiAocmNwLT5jdXIgIT0gcmNwLT5wZW5kaW5nICYmCi0JCQlyY3AtPmNvbXBsZXRlZCA9PSByY3AtPmN1cikgewotCQlyY3AtPmN1cisrOwotCQlyZWNvcmRfZ3Bfc3RhbGxfY2hlY2tfdGltZShyY3ApOwotCi0JCS8qCi0JCSAqIEFjY2Vzc2luZyBub2h6X2NwdV9tYXNrIGJlZm9yZSBpbmNyZW1lbnRpbmcgcmNwLT5jdXIgbmVlZHMgYQotCQkgKiBCYXJyaWVyICBPdGhlcndpc2UgaXQgY2FuIGNhdXNlIHRpY2tsZXNzIGlkbGUgQ1BVcyB0byBiZQotCQkgKiBpbmNsdWRlZCBpbiByY3AtPmNwdW1hc2ssIHdoaWNoIHdpbGwgZXh0ZW5kIGdyYWNlcGVyaW9kcwotCQkgKiB1bm5lY2Vzc2FyaWx5LgotCQkgKi8KLQkJc21wX21iKCk7Ci0JCWNwdW1hc2tfYW5kbm90KHRvX2NwdW1hc2socmNwLT5jcHVtYXNrKSwKLQkJCSAgICAgICBjcHVfb25saW5lX21hc2ssIG5vaHpfY3B1X21hc2spOwotCi0JCXJjcC0+c2lnbmFsZWQgPSAwOwotCX0KLX0KLQotLyoKLSAqIGNwdSB3ZW50IHRocm91Z2ggYSBxdWllc2NlbnQgc3RhdGUgc2luY2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgZ3JhY2UgcGVyaW9kLgotICogQ2xlYXIgaXQgZnJvbSB0aGUgY3B1IG1hc2sgYW5kIGNvbXBsZXRlIHRoZSBncmFjZSBwZXJpb2QgaWYgaXQgd2FzIHRoZSBsYXN0Ci0gKiBjcHUuIFN0YXJ0IGFub3RoZXIgZ3JhY2UgcGVyaW9kIGlmIHNvbWVvbmUgaGFzIGZ1cnRoZXIgZW50cmllcyBwZW5kaW5nCi0gKi8KLXN0YXRpYyB2b2lkIGNwdV9xdWlldChpbnQgY3B1LCBzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCkKLXsKLQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHRvX2NwdW1hc2socmNwLT5jcHVtYXNrKSk7Ci0JaWYgKGNwdW1hc2tfZW1wdHkodG9fY3B1bWFzayhyY3AtPmNwdW1hc2spKSkgewotCQkvKiBiYXRjaCBjb21wbGV0ZWQgISAqLwotCQlyY3AtPmNvbXBsZXRlZCA9IHJjcC0+Y3VyOwotCQlyY3Vfc3RhcnRfYmF0Y2gocmNwKTsKLQl9Ci19Ci0KLS8qCi0gKiBDaGVjayBpZiB0aGUgY3B1IGhhcyBnb25lIHRocm91Z2ggYSBxdWllc2NlbnQgc3RhdGUgKHNheSBjb250ZXh0Ci0gKiBzd2l0Y2gpLiBJZiBzbyBhbmQgaWYgaXQgYWxyZWFkeSBoYXNuJ3QgZG9uZSBzbyBpbiB0aGlzIFJDVQotICogcXVpZXNjZW50IGN5Y2xlLCB0aGVuIGluZGljYXRlIHRoYXQgaXQgaGFzIGRvbmUgc28uCi0gKi8KLXN0YXRpYyB2b2lkIHJjdV9jaGVja19xdWllc2NlbnRfc3RhdGUoc3RydWN0IHJjdV9jdHJsYmxrICpyY3AsCi0JCQkJCXN0cnVjdCByY3VfZGF0YSAqcmRwKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocmRwLT5xdWllc2NiYXRjaCAhPSByY3AtPmN1cikgewotCQkvKiBzdGFydCBuZXcgZ3JhY2UgcGVyaW9kOiAqLwotCQlyZHAtPnFzX3BlbmRpbmcgPSAxOwotCQlyZHAtPnBhc3NlZF9xdWllc2MgPSAwOwotCQlyZHAtPnF1aWVzY2JhdGNoID0gcmNwLT5jdXI7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBHcmFjZSBwZXJpb2QgYWxyZWFkeSBjb21wbGV0ZWQgZm9yIHRoaXMgY3B1PwotCSAqIHFzX3BlbmRpbmcgaXMgY2hlY2tlZCBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgYml0bWFwIHRvIGF2b2lkCi0JICogY2FjaGVsaW5lIHRyYXNoaW5nLgotCSAqLwotCWlmICghcmRwLT5xc19wZW5kaW5nKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIFdhcyB0aGVyZSBhIHF1aWVzY2VudCBzdGF0ZSBzaW5jZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBncmFjZQotCSAqIHBlcmlvZD8gSWYgbm8sIHRoZW4gZXhpdCBhbmQgd2FpdCBmb3IgdGhlIG5leHQgY2FsbC4KLQkgKi8KLQlpZiAoIXJkcC0+cGFzc2VkX3F1aWVzYykKLQkJcmV0dXJuOwotCXJkcC0+cXNfcGVuZGluZyA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcmNwLT5sb2NrLCBmbGFncyk7Ci0JLyoKLQkgKiByZHAtPnF1aWVzY2JhdGNoL3JjcC0+Y3VyIGFuZCB0aGUgY3B1IGJpdG1hcCBjYW4gY29tZSBvdXQgb2Ygc3luYwotCSAqIGR1cmluZyBjcHUgc3RhcnR1cC4gSWdub3JlIHRoZSBxdWllc2NlbnQgc3RhdGUuCi0JICovCi0JaWYgKGxpa2VseShyZHAtPnF1aWVzY2JhdGNoID09IHJjcC0+Y3VyKSkKLQkJY3B1X3F1aWV0KHJkcC0+Y3B1LCByY3ApOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmNwLT5sb2NrLCBmbGFncyk7Ci19Ci0KLQotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCi0vKiB3YXJuaW5nISBoZWxwZXIgZm9yIHJjdV9vZmZsaW5lX2NwdS4gZG8gbm90IHVzZSBlbHNld2hlcmUgd2l0aG91dCByZXZpZXdpbmcKLSAqIGxvY2tpbmcgcmVxdWlyZW1lbnRzLCB0aGUgbGlzdCBpdCdzIHB1bGxpbmcgZnJvbSBoYXMgdG8gYmVsb25nIHRvIGEgY3B1Ci0gKiB3aGljaCBpcyBkZWFkIGFuZCBoZW5jZSBub3QgcHJvY2Vzc2luZyBpbnRlcnJ1cHRzLgotICovCi1zdGF0aWMgdm9pZCByY3VfbW92ZV9iYXRjaChzdHJ1Y3QgcmN1X2RhdGEgKnRoaXNfcmRwLCBzdHJ1Y3QgcmN1X2hlYWQgKmxpc3QsCi0JCQkJc3RydWN0IHJjdV9oZWFkICoqdGFpbCwgbG9uZyBiYXRjaCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGxpc3QpIHsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQl0aGlzX3JkcC0+YmF0Y2ggPSBiYXRjaDsKLQkJKnRoaXNfcmRwLT5ueHR0YWlsWzJdID0gbGlzdDsKLQkJdGhpc19yZHAtPm54dHRhaWxbMl0gPSB0YWlsOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX3JjdV9vZmZsaW5lX2NwdShzdHJ1Y3QgcmN1X2RhdGEgKnRoaXNfcmRwLAotCQkJCXN0cnVjdCByY3VfY3RybGJsayAqcmNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiBpZiB0aGUgY3B1IGdvaW5nIG9mZmxpbmUgb3ducyB0aGUgZ3JhY2UgcGVyaW9kCi0JICogd2UgY2FuIGJsb2NrIGluZGVmaW5pdGVseSB3YWl0aW5nIGZvciBpdCwgc28gZmx1c2gKLQkgKiBpdCBoZXJlCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJjcC0+bG9jaywgZmxhZ3MpOwotCWlmIChyY3AtPmN1ciAhPSByY3AtPmNvbXBsZXRlZCkKLQkJY3B1X3F1aWV0KHJkcC0+Y3B1LCByY3ApOwotCXJjdV9tb3ZlX2JhdGNoKHRoaXNfcmRwLCByZHAtPmRvbmVsaXN0LCByZHAtPmRvbmV0YWlsLCByY3AtPmN1ciArIDEpOwotCXJjdV9tb3ZlX2JhdGNoKHRoaXNfcmRwLCByZHAtPm54dGxpc3QsIHJkcC0+bnh0dGFpbFsyXSwgcmNwLT5jdXIgKyAxKTsKLQlzcGluX3VubG9jaygmcmNwLT5sb2NrKTsKLQotCXRoaXNfcmRwLT5xbGVuICs9IHJkcC0+cWxlbjsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJjdV9vZmZsaW5lX2NwdShpbnQgY3B1KQotewotCXN0cnVjdCByY3VfZGF0YSAqdGhpc19yZHAgPSAmZ2V0X2NwdV92YXIocmN1X2RhdGEpOwotCXN0cnVjdCByY3VfZGF0YSAqdGhpc19iaF9yZHAgPSAmZ2V0X2NwdV92YXIocmN1X2JoX2RhdGEpOwotCi0JX19yY3Vfb2ZmbGluZV9jcHUodGhpc19yZHAsICZyY3VfY3RybGJsaywKLQkJCQkJJnBlcl9jcHUocmN1X2RhdGEsIGNwdSkpOwotCV9fcmN1X29mZmxpbmVfY3B1KHRoaXNfYmhfcmRwLCAmcmN1X2JoX2N0cmxibGssCi0JCQkJCSZwZXJfY3B1KHJjdV9iaF9kYXRhLCBjcHUpKTsKLQlwdXRfY3B1X3ZhcihyY3VfZGF0YSk7Ci0JcHV0X2NwdV92YXIocmN1X2JoX2RhdGEpOwotfQotCi0jZWxzZQotCi1zdGF0aWMgdm9pZCByY3Vfb2ZmbGluZV9jcHUoaW50IGNwdSkKLXsKLX0KLQotI2VuZGlmCi0KLS8qCi0gKiBUaGlzIGRvZXMgdGhlIFJDVSBwcm9jZXNzaW5nIHdvcmsgZnJvbSBzb2Z0aXJxIGNvbnRleHQuCi0gKi8KLXN0YXRpYyB2b2lkIF9fcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKHN0cnVjdCByY3VfY3RybGJsayAqcmNwLAotCQkJCQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgY29tcGxldGVkX3NuYXA7Ci0KLQlpZiAocmRwLT5ueHRsaXN0KSB7Ci0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJY29tcGxldGVkX3NuYXAgPSBBQ0NFU1NfT05DRShyY3AtPmNvbXBsZXRlZCk7Ci0KLQkJLyoKLQkJICogbW92ZSB0aGUgb3RoZXIgZ3JhY2UtcGVyaW9kLWNvbXBsZXRlZCBlbnRyaWVzIHRvCi0JCSAqIFtyZHAtPm54dGxpc3QsICpyZHAtPm54dHRhaWxbMF0pIHRlbXBvcmFyaWx5Ci0JCSAqLwotCQlpZiAoIXJjdV9iYXRjaF9iZWZvcmUoY29tcGxldGVkX3NuYXAsIHJkcC0+YmF0Y2gpKQotCQkJcmRwLT5ueHR0YWlsWzBdID0gcmRwLT5ueHR0YWlsWzFdID0gcmRwLT5ueHR0YWlsWzJdOwotCQllbHNlIGlmICghcmN1X2JhdGNoX2JlZm9yZShjb21wbGV0ZWRfc25hcCwgcmRwLT5iYXRjaCAtIDEpKQotCQkJcmRwLT5ueHR0YWlsWzBdID0gcmRwLT5ueHR0YWlsWzFdOwotCi0JCS8qCi0JCSAqIHRoZSBncmFjZSBwZXJpb2QgZm9yIGVudHJpZXMgaW4KLQkJICogW3JkcC0+bnh0bGlzdCwgKnJkcC0+bnh0dGFpbFswXSkgaGFzIGNvbXBsZXRlZCBhbmQKLQkJICogbW92ZSB0aGVzZSBlbnRyaWVzIHRvIGRvbmVsaXN0Ci0JCSAqLwotCQlpZiAocmRwLT5ueHR0YWlsWzBdICE9ICZyZHAtPm54dGxpc3QpIHsKLQkJCSpyZHAtPmRvbmV0YWlsID0gcmRwLT5ueHRsaXN0OwotCQkJcmRwLT5kb25ldGFpbCA9IHJkcC0+bnh0dGFpbFswXTsKLQkJCXJkcC0+bnh0bGlzdCA9ICpyZHAtPm54dHRhaWxbMF07Ci0JCQkqcmRwLT5kb25ldGFpbCA9IE5VTEw7Ci0KLQkJCWlmIChyZHAtPm54dHRhaWxbMV0gPT0gcmRwLT5ueHR0YWlsWzBdKQotCQkJCXJkcC0+bnh0dGFpbFsxXSA9ICZyZHAtPm54dGxpc3Q7Ci0JCQlpZiAocmRwLT5ueHR0YWlsWzJdID09IHJkcC0+bnh0dGFpbFswXSkKLQkJCQlyZHAtPm54dHRhaWxbMl0gPSAmcmRwLT5ueHRsaXN0OwotCQkJcmRwLT5ueHR0YWlsWzBdID0gJnJkcC0+bnh0bGlzdDsKLQkJfQotCi0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCQlpZiAocmN1X2JhdGNoX2FmdGVyKHJkcC0+YmF0Y2gsIHJjcC0+cGVuZGluZykpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MyOwotCi0JCQkvKiBhbmQgc3RhcnQgaXQvc2NoZWR1bGUgc3RhcnQgaWYgaXQncyBhIG5ldyBiYXRjaCAqLwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJjcC0+bG9jaywgZmxhZ3MyKTsKLQkJCWlmIChyY3VfYmF0Y2hfYWZ0ZXIocmRwLT5iYXRjaCwgcmNwLT5wZW5kaW5nKSkgewotCQkJCXJjcC0+cGVuZGluZyA9IHJkcC0+YmF0Y2g7Ci0JCQkJcmN1X3N0YXJ0X2JhdGNoKHJjcCk7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyY3AtPmxvY2ssIGZsYWdzMik7Ci0JCX0KLQl9Ci0KLQlyY3VfY2hlY2tfcXVpZXNjZW50X3N0YXRlKHJjcCwgcmRwKTsKLQlpZiAocmRwLT5kb25lbGlzdCkKLQkJcmN1X2RvX2JhdGNoKHJkcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyhzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKnVudXNlZCkKLXsKLQkvKgotCSAqIE1lbW9yeSByZWZlcmVuY2VzIGZyb20gYW55IHByaW9yIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMKLQkgKiBleGVjdXRlZCBieSB0aGUgaW50ZXJydXB0ZWQgY29kZSBtdXN0IGJlIHNlZSBiZWZvcmUgYW55IFJDVQotCSAqIGdyYWNlLXBlcmlvZCBtYW51cHVsYXRpb25zIGJlbG93LgotCSAqLwotCi0Jc21wX21iKCk7IC8qIFNlZSBhYm92ZSBibG9jayBjb21tZW50LiAqLwotCi0JX19yY3VfcHJvY2Vzc19jYWxsYmFja3MoJnJjdV9jdHJsYmxrLCAmX19nZXRfY3B1X3ZhcihyY3VfZGF0YSkpOwotCV9fcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCZyY3VfYmhfY3RybGJsaywgJl9fZ2V0X2NwdV92YXIocmN1X2JoX2RhdGEpKTsKLQotCS8qCi0JICogTWVtb3J5IHJlZmVyZW5jZXMgZnJvbSBhbnkgbGF0ZXIgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucwotCSAqIGV4ZWN1dGVkIGJ5IHRoZSBpbnRlcnJ1cHRlZCBjb2RlIG11c3QgYmUgc2VlIGFmdGVyIGFueSBSQ1UKLQkgKiBncmFjZS1wZXJpb2QgbWFudXB1bGF0aW9ucyBhYm92ZS4KLQkgKi8KLQotCXNtcF9tYigpOyAvKiBTZWUgYWJvdmUgYmxvY2sgY29tbWVudC4gKi8KLX0KLQotc3RhdGljIGludCBfX3JjdV9wZW5kaW5nKHN0cnVjdCByY3VfY3RybGJsayAqcmNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKLXsKLQkvKiBDaGVjayBmb3IgQ1BVIHN0YWxscywgaWYgZW5hYmxlZC4gKi8KLQljaGVja19jcHVfc3RhbGwocmNwKTsKLQotCWlmIChyZHAtPm54dGxpc3QpIHsKLQkJbG9uZyBjb21wbGV0ZWRfc25hcCA9IEFDQ0VTU19PTkNFKHJjcC0+Y29tcGxldGVkKTsKLQotCQkvKgotCQkgKiBUaGlzIGNwdSBoYXMgcGVuZGluZyByY3UgZW50cmllcyBhbmQgdGhlIGdyYWNlIHBlcmlvZAotCQkgKiBmb3IgdGhlbSBoYXMgY29tcGxldGVkLgotCQkgKi8KLQkJaWYgKCFyY3VfYmF0Y2hfYmVmb3JlKGNvbXBsZXRlZF9zbmFwLCByZHAtPmJhdGNoKSkKLQkJCXJldHVybiAxOwotCQlpZiAoIXJjdV9iYXRjaF9iZWZvcmUoY29tcGxldGVkX3NuYXAsIHJkcC0+YmF0Y2ggLSAxKSAmJgotCQkJCXJkcC0+bnh0dGFpbFswXSAhPSByZHAtPm54dHRhaWxbMV0pCi0JCQlyZXR1cm4gMTsKLQkJaWYgKHJkcC0+bnh0dGFpbFswXSAhPSAmcmRwLT5ueHRsaXN0KQotCQkJcmV0dXJuIDE7Ci0KLQkJLyoKLQkJICogVGhpcyBjcHUgaGFzIHBlbmRpbmcgcmN1IGVudHJpZXMgYW5kIHRoZSBuZXcgYmF0Y2gKLQkJICogZm9yIHRoZW4gaGFzbid0IGJlZW4gc3RhcnRlZCBub3Igc2NoZWR1bGVkIHN0YXJ0Ci0JCSAqLwotCQlpZiAocmN1X2JhdGNoX2FmdGVyKHJkcC0+YmF0Y2gsIHJjcC0+cGVuZGluZykpCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBUaGlzIGNwdSBoYXMgZmluaXNoZWQgY2FsbGJhY2tzIHRvIGludm9rZSAqLwotCWlmIChyZHAtPmRvbmVsaXN0KQotCQlyZXR1cm4gMTsKLQotCS8qIFRoZSByY3UgY29yZSB3YWl0cyBmb3IgYSBxdWllc2NlbnQgc3RhdGUgZnJvbSB0aGUgY3B1ICovCi0JaWYgKHJkcC0+cXVpZXNjYmF0Y2ggIT0gcmNwLT5jdXIgfHwgcmRwLT5xc19wZW5kaW5nKQotCQlyZXR1cm4gMTsKLQotCS8qIG5vdGhpbmcgdG8gZG8gKi8KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgaW1tZWRpYXRlIFJDVS1yZWxhdGVkIHdvcmsgdG8gYmUgZG9uZQotICogYnkgdGhlIGN1cnJlbnQgQ1BVLCByZXR1cm5pbmcgMSBpZiBzby4gIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUKLSAqIFJDVSBpbXBsZW1lbnRhdGlvbjsgaXQgaXMgLW5vdC0gYW4gZXhwb3J0ZWQgbWVtYmVyIG9mIHRoZSBSQ1UgQVBJLgotICovCi1pbnQgcmN1X3BlbmRpbmcoaW50IGNwdSkKLXsKLQlyZXR1cm4gX19yY3VfcGVuZGluZygmcmN1X2N0cmxibGssICZwZXJfY3B1KHJjdV9kYXRhLCBjcHUpKSB8fAotCQlfX3JjdV9wZW5kaW5nKCZyY3VfYmhfY3RybGJsaywgJnBlcl9jcHUocmN1X2JoX2RhdGEsIGNwdSkpOwotfQotCi0vKgotICogQ2hlY2sgdG8gc2VlIGlmIGFueSBmdXR1cmUgUkNVLXJlbGF0ZWQgd29yayB3aWxsIG5lZWQgdG8gYmUgZG9uZQotICogYnkgdGhlIGN1cnJlbnQgQ1BVLCBldmVuIGlmIG5vbmUgbmVlZCBiZSBkb25lIGltbWVkaWF0ZWx5LCByZXR1cm5pbmcKLSAqIDEgaWYgc28uICBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbjsgaXQgaXMgLW5vdC0KLSAqIGFuIGV4cG9ydGVkIG1lbWJlciBvZiB0aGUgUkNVIEFQSS4KLSAqLwotaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9ICZwZXJfY3B1KHJjdV9kYXRhLCBjcHUpOwotCXN0cnVjdCByY3VfZGF0YSAqcmRwX2JoID0gJnBlcl9jcHUocmN1X2JoX2RhdGEsIGNwdSk7Ci0KLQlyZXR1cm4gISFyZHAtPm54dGxpc3QgfHwgISFyZHBfYmgtPm54dGxpc3QgfHwgcmN1X3BlbmRpbmcoY3B1KTsKLX0KLQotLyoKLSAqIFRvcC1sZXZlbCBmdW5jdGlvbiBkcml2aW5nIFJDVSBncmFjZS1wZXJpb2QgZGV0ZWN0aW9uLCBub3JtYWxseQotICogaW52b2tlZCBmcm9tIHRoZSBzY2hlZHVsZXItY2xvY2sgaW50ZXJydXB0LiAgVGhpcyBmdW5jdGlvbiBzaW1wbHkKLSAqIGluY3JlbWVudHMgY291bnRlcnMgdGhhdCBhcmUgcmVhZCBvbmx5IGZyb20gc29mdGlycSBieSB0aGlzIHNhbWUKLSAqIENQVSwgc28gdGhlcmUgYXJlIG5vIG1lbW9yeSBiYXJyaWVycyByZXF1aXJlZC4KLSAqLwotdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKQotewotCWlmICh1c2VyIHx8Ci0JICAgIChpZGxlX2NwdShjcHUpICYmIHJjdV9zY2hlZHVsZXJfYWN0aXZlICYmCi0JICAgICAhaW5fc29mdGlycSgpICYmIGhhcmRpcnFfY291bnQoKSA8PSAoMSA8PCBIQVJESVJRX1NISUZUKSkpIHsKLQotCQkvKgotCQkgKiBHZXQgaGVyZSBpZiB0aGlzIENQVSB0b29rIGl0cyBpbnRlcnJ1cHQgZnJvbSB1c2VyCi0JCSAqIG1vZGUgb3IgZnJvbSB0aGUgaWRsZSBsb29wLCBhbmQgaWYgdGhpcyBpcyBub3QgYQotCQkgKiBuZXN0ZWQgaW50ZXJydXB0LiAgSW4gdGhpcyBjYXNlLCB0aGUgQ1BVIGlzIGluCi0JCSAqIGEgcXVpZXNjZW50IHN0YXRlLCBzbyBjb3VudCBpdC4KLQkJICoKLQkJICogQWxzbyBkbyBhIG1lbW9yeSBiYXJyaWVyLiAgVGhpcyBpcyBuZWVkZWQgdG8gaGFuZGxlCi0JCSAqIHRoZSBjYXNlIHdoZXJlIHdyaXRlcyBmcm9tIGEgcHJlZW1wdC1kaXNhYmxlIHNlY3Rpb24KLQkJICogb2YgY29kZSBnZXQgcmVvcmRlcmVkIGludG8gc2NoZWR1bGUoKSBieSB0aGlzIENQVSdzCi0JCSAqIHdyaXRlIGJ1ZmZlci4gIFRoZSBtZW1vcnkgYmFycmllciBtYWtlcyBzdXJlIHRoYXQKLQkJICogdGhlIHJjdV9xc2N0cl9pbmMoKSBhbmQgcmN1X2JoX3FzY3RyX2luYygpIGFyZSBzZWUKLQkJICogYnkgb3RoZXIgQ1BVcyB0byBoYXBwZW4gYWZ0ZXIgYW55IHN1Y2ggd3JpdGUuCi0JCSAqLwotCi0JCXNtcF9tYigpOyAgLyogU2VlIGFib3ZlIGJsb2NrIGNvbW1lbnQuICovCi0JCXJjdV9xc2N0cl9pbmMoY3B1KTsKLQkJcmN1X2JoX3FzY3RyX2luYyhjcHUpOwotCi0JfSBlbHNlIGlmICghaW5fc29mdGlycSgpKSB7Ci0KLQkJLyoKLQkJICogR2V0IGhlcmUgaWYgdGhpcyBDUFUgZGlkIG5vdCB0YWtlIGl0cyBpbnRlcnJ1cHQgZnJvbQotCQkgKiBzb2Z0aXJxLCBpbiBvdGhlciB3b3JkcywgaWYgaXQgaXMgbm90IGludGVycnVwdGluZwotCQkgKiBhIHJjdV9iaCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIFRoaXMgaXMgYW4gX2JoCi0JCSAqIGNyaXRpY2FsIHNlY3Rpb24sIHNvIGNvdW50IGl0LiAgVGhlIG1lbW9yeSBiYXJyaWVyCi0JCSAqIGlzIG5lZWRlZCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGlzIHRoZSBhYm92ZSBvbmUuCi0JCSAqLwotCi0JCXNtcF9tYigpOyAgLyogU2VlIGFib3ZlIGJsb2NrIGNvbW1lbnQuICovCi0JCXJjdV9iaF9xc2N0cl9pbmMoY3B1KTsKLQl9Ci0JcmFpc2VfcmN1X3NvZnRpcnEoKTsKLX0KLQotc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUsIHN0cnVjdCByY3VfY3RybGJsayAqcmNwLAotCQkJCQkJc3RydWN0IHJjdV9kYXRhICpyZHApCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZyY3AtPmxvY2ssIGZsYWdzKTsKLQltZW1zZXQocmRwLCAwLCBzaXplb2YoKnJkcCkpOwotCXJkcC0+bnh0dGFpbFswXSA9IHJkcC0+bnh0dGFpbFsxXSA9IHJkcC0+bnh0dGFpbFsyXSA9ICZyZHAtPm54dGxpc3Q7Ci0JcmRwLT5kb25ldGFpbCA9ICZyZHAtPmRvbmVsaXN0OwotCXJkcC0+cXVpZXNjYmF0Y2ggPSByY3AtPmNvbXBsZXRlZDsKLQlyZHAtPnFzX3BlbmRpbmcgPSAwOwotCXJkcC0+Y3B1ID0gY3B1OwotCXJkcC0+YmxpbWl0ID0gYmxpbWl0OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjcC0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X29ubGluZV9jcHUoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9ICZwZXJfY3B1KHJjdV9kYXRhLCBjcHUpOwotCXN0cnVjdCByY3VfZGF0YSAqYmhfcmRwID0gJnBlcl9jcHUocmN1X2JoX2RhdGEsIGNwdSk7Ci0KLQlyY3VfaW5pdF9wZXJjcHVfZGF0YShjcHUsICZyY3VfY3RybGJsaywgcmRwKTsKLQlyY3VfaW5pdF9wZXJjcHVfZGF0YShjcHUsICZyY3VfYmhfY3RybGJsaywgYmhfcmRwKTsKLQlvcGVuX3NvZnRpcnEoUkNVX1NPRlRJUlEsIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyk7Ci19Ci0KLXN0YXRpYyBpbnQgX19jcHVpbml0IHJjdV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKLQkJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKLXsKLQlsb25nIGNwdSA9IChsb25nKWhjcHU7Ci0KLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgQ1BVX1VQX1BSRVBBUkU6Ci0JY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46Ci0JCXJjdV9vbmxpbmVfY3B1KGNwdSk7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVX0RFQUQ6Ci0JY2FzZSBDUFVfREVBRF9GUk9aRU46Ci0JCXJjdV9vZmZsaW5lX2NwdShjcHUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuIE5PVElGWV9PSzsKLX0KLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIHJjdV9uYiA9IHsKLQkubm90aWZpZXJfY2FsbAk9IHJjdV9jcHVfbm90aWZ5LAotfTsKLQotLyoKLSAqIEluaXRpYWxpemVzIHJjdSBtZWNoYW5pc20uICBBc3N1bWVkIHRvIGJlIGNhbGxlZCBlYXJseS4KLSAqIFRoYXQgaXMgYmVmb3JlIGxvY2FsIHRpbWVyKFNNUCkgb3IgamlmZmllIHRpbWVyICh1bmlwcm9jKSBpcyBzZXR1cC4KLSAqIE5vdGUgdGhhdCByY3VfcXNjdHIgYW5kIGZyaWVuZHMgYXJlIGltcGxpY2l0bHkKLSAqIGluaXRpYWxpemVkIGR1ZSB0byB0aGUgY2hvaWNlIG9mIGBgMCcnIGZvciBSQ1VfQ1RSX0lOVkFMSUQuCi0gKi8KLXZvaWQgX19pbml0IF9fcmN1X2luaXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgotCXByaW50ayhLRVJOX0lORk8gIlJDVS1iYXNlZCBkZXRlY3Rpb24gb2Ygc3RhbGxlZCBDUFVzIGlzIGVuYWJsZWQuXG4iKTsKLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KLQlyY3VfY3B1X25vdGlmeSgmcmN1X25iLCBDUFVfVVBfUFJFUEFSRSwKLQkJCSh2b2lkICopKGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQkvKiBSZWdpc3RlciBub3RpZmllciBmb3Igbm9uLWJvb3QgQ1BVcyAqLwotCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmcmN1X25iKTsKLX0KLQotbW9kdWxlX3BhcmFtKGJsaW1pdCwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShxaGltYXJrLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHFsb3dtYXJrLCBpbnQsIDApOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXBkYXRlLmMgYi9rZXJuZWwvcmN1cGRhdGUuYwppbmRleCBhOTY3YzlmLi5iZDVkNWM4IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cGRhdGUuYworKysgYi9rZXJuZWwvcmN1cGRhdGUuYwpAQCAtOTgsNiArOTgsMzAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdSk7CiAKKy8qKgorICogc3luY2hyb25pemVfcmN1X2JoIC0gd2FpdCB1bnRpbCBhbiByY3VfYmggZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgorICoKKyAqIENvbnRyb2wgd2lsbCByZXR1cm4gdG8gdGhlIGNhbGxlciBzb21lIHRpbWUgYWZ0ZXIgYSBmdWxsIHJjdV9iaCBncmFjZQorICogcGVyaW9kIGhhcyBlbGFwc2VkLCBpbiBvdGhlciB3b3JkcyBhZnRlciBhbGwgY3VycmVudGx5IGV4ZWN1dGluZyByY3VfYmgKKyAqIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBoYXZlIGNvbXBsZXRlZC4gIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKKyAqIHNlY3Rpb25zIGFyZSBkZWxpbWl0ZWQgYnkgcmN1X3JlYWRfbG9ja19iaCgpIGFuZCByY3VfcmVhZF91bmxvY2tfYmgoKSwKKyAqIGFuZCBtYXkgYmUgbmVzdGVkLgorICovCit2b2lkIHN5bmNocm9uaXplX3JjdV9iaCh2b2lkKQoreworCXN0cnVjdCByY3Vfc3luY2hyb25pemUgcmN1OworCisJaWYgKHJjdV9ibG9ja2luZ19pc19ncCgpKQorCQlyZXR1cm47CisKKwlpbml0X2NvbXBsZXRpb24oJnJjdS5jb21wbGV0aW9uKTsKKwkvKiBXaWxsIHdha2UgbWUgYWZ0ZXIgUkNVIGZpbmlzaGVkLiAqLworCWNhbGxfcmN1X2JoKCZyY3UuaGVhZCwgd2FrZW1lX2FmdGVyX3JjdSk7CisJLyogV2FpdCBmb3IgaXQuICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmcmN1LmNvbXBsZXRpb24pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X2JoKTsKKwogc3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpub3R1c2VkKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyY3VfYmFycmllcl9jcHVfY291bnQpKQpAQCAtMTI5LDYgKzE1Myw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9taWdyYXRlZF9jYWxsYmFja3Modm9pZCkKIHsKIAl3YWl0X2V2ZW50KHJjdV9taWdyYXRlX3dxLCAhYXRvbWljX3JlYWQoJnJjdV9taWdyYXRlX3R5cGVfY291bnQpKTsKKwlzbXBfbWIoKTsgLyogSW4gY2FzZSB3ZSBkaWRuJ3Qgc2xlZXAuICovCiB9CiAKIC8qCkBAIC0xOTIsOSArMjE3LDEzIEBACiAJCXdha2VfdXAoJnJjdV9taWdyYXRlX3dxKTsKIH0KIAorZXh0ZXJuIGludCByY3VfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KTsKKwogc3RhdGljIGludCBfX2NwdWluaXQgcmN1X2JhcnJpZXJfY3B1X2hvdHBsdWcoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKKwlyY3VfY3B1X25vdGlmeShzZWxmLCBhY3Rpb24sIGhjcHUpOwogCWlmIChhY3Rpb24gPT0gQ1BVX0RZSU5HKSB7CiAJCS8qCiAJCSAqIHByZWVtcHRfZGlzYWJsZSgpIGluIG9uX2VhY2hfY3B1KCkgcHJldmVudHMgc3RvcF9tYWNoaW5lKCksCkBAIC0yMDksNyArMjM4LDggQEAKIAkJY2FsbF9yY3VfYmgocmN1X21pZ3JhdGVfaGVhZCwgcmN1X21pZ3JhdGVfY2FsbGJhY2spOwogCQljYWxsX3JjdV9zY2hlZChyY3VfbWlncmF0ZV9oZWFkICsgMSwgcmN1X21pZ3JhdGVfY2FsbGJhY2spOwogCQljYWxsX3JjdShyY3VfbWlncmF0ZV9oZWFkICsgMiwgcmN1X21pZ3JhdGVfY2FsbGJhY2spOwotCX0gZWxzZSBpZiAoYWN0aW9uID09IENQVV9QT1NUX0RFQUQpIHsKKwl9IGVsc2UgaWYgKGFjdGlvbiA9PSBDUFVfRE9XTl9QUkVQQVJFKSB7CisJCS8qIERvbid0IG5lZWQgdG8gd2FpdCB1bnRpbCBuZXh0IHJlbW92YWwgb3BlcmF0aW9uLiAqLwogCQkvKiByY3VfbWlncmF0ZV9oZWFkIGlzIHByb3RlY3RlZCBieSBjcHVfYWRkX3JlbW92ZV9sb2NrICovCiAJCXdhaXRfbWlncmF0ZWRfY2FsbGJhY2tzKCk7CiAJfQpAQCAtMjE5LDggKzI0OSwxOCBAQAogCiB2b2lkIF9faW5pdCByY3VfaW5pdCh2b2lkKQogeworCWludCBpOworCiAJX19yY3VfaW5pdCgpOwotCWhvdGNwdV9ub3RpZmllcihyY3VfYmFycmllcl9jcHVfaG90cGx1ZywgMCk7CisJY3B1X25vdGlmaWVyKHJjdV9iYXJyaWVyX2NwdV9ob3RwbHVnLCAwKTsKKworCS8qCisJICogV2UgZG9uJ3QgbmVlZCBwcm90ZWN0aW9uIGFnYWluc3QgQ1BVLWhvdHBsdWcgaGVyZSBiZWNhdXNlCisJICogdGhpcyBpcyBjYWxsZWQgZWFybHkgaW4gYm9vdCwgYmVmb3JlIGVpdGhlciBpbnRlcnJ1cHRzCisJICogb3IgdGhlIHNjaGVkdWxlciBhcmUgb3BlcmF0aW9uYWwuCisJICovCisJZm9yX2VhY2hfb25saW5lX2NwdShpKQorCQlyY3VfYmFycmllcl9jcHVfaG90cGx1ZyhOVUxMLCBDUFVfVVBfUFJFUEFSRSwgKHZvaWQgKikobG9uZylpKTsKIH0KIAogdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cHJlZW1wdC5jIGIva2VybmVsL3JjdXByZWVtcHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmViMGU2NS4uMDAwMDAwMAotLS0gYS9rZXJuZWwvcmN1cHJlZW1wdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUzOSArMCwwIEBACi0vKgotICogUmVhZC1Db3B5IFVwZGF0ZSBtZWNoYW5pc20gZm9yIG11dHVhbCBleGNsdXNpb24sIHJlYWx0aW1lIGltcGxlbWVudGF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAyMDA2Ci0gKgotICogQXV0aG9yczogUGF1bCBFLiBNY0tlbm5leSA8cGF1bG1ja0B1cy5pYm0uY29tPgotICoJCVdpdGggdGhhbmtzIHRvIEVzYmVuIE5pZWxzZW4sIEJpbGwgSHVleSwgYW5kIEluZ28gTW9sbmFyCi0gKgkJZm9yIHB1c2hpbmcgbWUgYXdheSBmcm9tIGxvY2tzIGFuZCB0b3dhcmRzIGNvdW50ZXJzLCBhbmQKLSAqCQl0byBTdXBhcm5hIEJoYXR0YWNoYXJ5YSBmb3IgcHVzaGluZyBtZSBjb21wbGV0ZWx5IGF3YXkKLSAqCQlmcm9tIGF0b21pYyBpbnN0cnVjdGlvbnMgb24gdGhlIHJlYWQgc2lkZS4KLSAqCi0gKiAgLSBBZGRlZCBoYW5kbGluZyBvZiBEeW5hbWljIFRpY2tzCi0gKiAgICAgIENvcHlyaWdodCAyMDA3IC0gUGF1bCBFLiBNY2tlbm5leSA8cGF1bG1ja0B1cy5pYm0uY29tPgotICogICAgICAgICAgICAgICAgICAgICAtIFN0ZXZlbiBSb3N0ZWR0IDxzcm9zdGVkdEByZWRoYXQuY29tPgotICoKLSAqIFBhcGVyczogIGh0dHA6Ly93d3cucmRyb3AuY29tL3VzZXJzL3BhdWxtY2svUkNVCi0gKgotICogRGVzaWduIERvY3VtZW50OiBodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8yNTM2NTEvCi0gKgotICogRm9yIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIFJlYWQtQ29weSBVcGRhdGUgbWVjaGFuaXNtIHNlZSAtCi0gKiAJCURvY3VtZW50YXRpb24vUkNVLyAqLnR4dAotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9yY3VwcmVlbXB0X3RyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCi0vKgotICogUFJFRU1QVF9SQ1UgZGF0YSBzdHJ1Y3R1cmVzLgotICovCi0KLS8qCi0gKiBHUF9TVEFHRVMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHN0YXRlIG1hY2hpbmUgaGFzCi0gKiB0byBnbyB0aHJvdWdoIHRoZSBhbGwgdGhlIHJjdV90cnlfZmxpcF9zdGF0ZXMgKHNlZSBiZWxvdykKLSAqIGluIGEgc2luZ2xlIEdyYWNlIFBlcmlvZC4KLSAqCi0gKiBHUCBpbiBHUF9TVEFHRVMgc3RhbmRzIGZvciBHcmFjZSBQZXJpb2QgOykKLSAqLwotI2RlZmluZSBHUF9TVEFHRVMgICAgMgotc3RydWN0IHJjdV9kYXRhIHsKLQlzcGlubG9ja190CWxvY2s7CQkvKiBQcm90ZWN0IHJjdV9kYXRhIGZpZWxkcy4gKi8KLQlsb25nCQljb21wbGV0ZWQ7CS8qIE51bWJlciBvZiBsYXN0IGNvbXBsZXRlZCBiYXRjaC4gKi8KLQlpbnQJCXdhaXRsaXN0Y291bnQ7Ci0Jc3RydWN0IHJjdV9oZWFkICpuZXh0bGlzdDsKLQlzdHJ1Y3QgcmN1X2hlYWQgKipuZXh0dGFpbDsKLQlzdHJ1Y3QgcmN1X2hlYWQgKndhaXRsaXN0W0dQX1NUQUdFU107Ci0Jc3RydWN0IHJjdV9oZWFkICoqd2FpdHRhaWxbR1BfU1RBR0VTXTsKLQlzdHJ1Y3QgcmN1X2hlYWQgKmRvbmVsaXN0OwkvKiBmcm9tIHdhaXRsaXN0ICYgd2FpdHNjaGVkbGlzdCAqLwotCXN0cnVjdCByY3VfaGVhZCAqKmRvbmV0YWlsOwotCWxvbmcgcmN1X2ZsaXBjdHJbMl07Ci0Jc3RydWN0IHJjdV9oZWFkICpuZXh0c2NoZWRsaXN0OwotCXN0cnVjdCByY3VfaGVhZCAqKm5leHRzY2hlZHRhaWw7Ci0Jc3RydWN0IHJjdV9oZWFkICp3YWl0c2NoZWRsaXN0OwotCXN0cnVjdCByY3VfaGVhZCAqKndhaXRzY2hlZHRhaWw7Ci0JaW50IHJjdV9zY2hlZF9zbGVlcGluZzsKLSNpZmRlZiBDT05GSUdfUkNVX1RSQUNFCi0Jc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgdHJhY2U7Ci0jZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfVFJBQ0UgKi8KLX07Ci0KLS8qCi0gKiBTdGF0ZXMgZm9yIHJjdV90cnlfZmxpcCgpIGFuZCBmcmllbmRzLgotICovCi0KLWVudW0gcmN1X3RyeV9mbGlwX3N0YXRlcyB7Ci0KLQkvKgotCSAqIFN0YXkgaGVyZSBpZiBub3RoaW5nIGlzIGhhcHBlbmluZy4gRmxpcCB0aGUgY291bnRlciBpZiBzb210aGluZwotCSAqIHN0YXJ0cyBoYXBwZW5pbmcuIERlbm90ZWQgYnkgIkkiCi0JICovCi0JcmN1X3RyeV9mbGlwX2lkbGVfc3RhdGUsCi0KLQkvKgotCSAqIFdhaXQgaGVyZSBmb3IgYWxsIENQVXMgdG8gbm90aWNlIHRoYXQgdGhlIGNvdW50ZXIgaGFzIGZsaXBwZWQuIFRoaXMKLQkgKiBwcmV2ZW50cyB0aGUgb2xkIHNldCBvZiBjb3VudGVycyBmcm9tIGV2ZXIgYmVpbmcgaW5jcmVtZW50ZWQgb25jZQotCSAqIHdlIGxlYXZlIHRoaXMgc3RhdGUsIHdoaWNoIGluIHR1cm4gaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgY2Fubm90Ci0JICogdGVzdCBhbnkgaW5kaXZpZHVhbCBjb3VudGVyIGZvciB6ZXJvIC0tIHdlIGNhbiBvbmx5IGNoZWNrIHRoZSBzdW0uCi0JICogRGVub3RlZCBieSAiQSIuCi0JICovCi0JcmN1X3RyeV9mbGlwX3dhaXRhY2tfc3RhdGUsCi0KLQkvKgotCSAqIFdhaXQgaGVyZSBmb3IgdGhlIHN1bSBvZiB0aGUgb2xkIHBlci1DUFUgY291bnRlcnMgdG8gcmVhY2ggemVyby4KLQkgKiBEZW5vdGVkIGJ5ICJaIi4KLQkgKi8KLQlyY3VfdHJ5X2ZsaXBfd2FpdHplcm9fc3RhdGUsCi0KLQkvKgotCSAqIFdhaXQgaGVyZSBmb3IgZWFjaCBvZiB0aGUgb3RoZXIgQ1BVcyB0byBleGVjdXRlIGEgbWVtb3J5IGJhcnJpZXIuCi0JICogVGhpcyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlc2Ugb3RoZXIgQ1BVcyByZWFsbHkgaGF2ZQotCSAqIGNvbXBsZXRlZCBleGVjdXRpbmcgdGhlaXIgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgZGVzcGl0ZQotCSAqIHRoZWlyIENQVXMgd2lsZGx5IHJlb3JkZXJpbmcgbWVtb3J5LiBEZW5vdGVkIGJ5ICJNIi4KLQkgKi8KLQlyY3VfdHJ5X2ZsaXBfd2FpdG1iX3N0YXRlLAotfTsKLQotLyoKLSAqIFN0YXRlcyBmb3IgcmN1X2N0cmxibGsucmN1X3NjaGVkX3NsZWVwLgotICovCi0KLWVudW0gcmN1X3NjaGVkX3NsZWVwX3N0YXRlcyB7Ci0JcmN1X3NjaGVkX25vdF9zbGVlcGluZywJLyogTm90IHNsZWVwaW5nLCBjYWxsYmFja3MgbmVlZCBHUC4gICovCi0JcmN1X3NjaGVkX3NsZWVwX3ByZXAsCS8qIFRoaW5raW5nIG9mIHNsZWVwaW5nLCByZWNoZWNraW5nLiAqLwotCXJjdV9zY2hlZF9zbGVlcGluZywJLyogU2xlZXBpbmcsIGF3YWtlbiBpZiBHUCBuZWVkZWQuICovCi19OwotCi1zdHJ1Y3QgcmN1X2N0cmxibGsgewotCXNwaW5sb2NrX3QJZmxpcGxvY2s7CS8qIFByb3RlY3Qgc3RhdGUtbWFjaGluZSB0cmFuc2l0aW9ucy4gKi8KLQlsb25nCQljb21wbGV0ZWQ7CS8qIE51bWJlciBvZiBsYXN0IGNvbXBsZXRlZCBiYXRjaC4gKi8KLQllbnVtIHJjdV90cnlfZmxpcF9zdGF0ZXMgcmN1X3RyeV9mbGlwX3N0YXRlOyAvKiBUaGUgY3VycmVudCBzdGF0ZSBvZgotCQkJCQkJCXRoZSByY3Ugc3RhdGUgbWFjaGluZSAqLwotCXNwaW5sb2NrX3QJc2NoZWRsb2NrOwkvKiBQcm90ZWN0IHJjdV9zY2hlZCBzbGVlcCBzdGF0ZS4gKi8KLQllbnVtIHJjdV9zY2hlZF9zbGVlcF9zdGF0ZXMgc2NoZWRfc2xlZXA7IC8qIHJjdV9zY2hlZCBzdGF0ZS4gKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdCBzY2hlZF93cTsJLyogUGxhY2UgZm9yIHJjdV9zY2hlZCB0byBzbGVlcC4gKi8KLX07Ci0KLXN0cnVjdCByY3VfZHludGlja19zY2hlZCB7Ci0JaW50IGR5bnRpY2tzOwotCWludCBkeW50aWNrc19zbmFwOwotCWludCBzY2hlZF9xczsKLQlpbnQgc2NoZWRfcXNfc25hcDsKLQlpbnQgc2NoZWRfZHludGlja3Nfc25hcDsKLX07Ci0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgcmN1X2R5bnRpY2tfc2NoZWQsIHJjdV9keW50aWNrX3NjaGVkKSA9IHsKLQkuZHludGlja3MgPSAxLAotfTsKLQotdm9pZCByY3VfcXNjdHJfaW5jKGludCBjcHUpCi17Ci0Jc3RydWN0IHJjdV9keW50aWNrX3NjaGVkICpyZHNzcCA9ICZwZXJfY3B1KHJjdV9keW50aWNrX3NjaGVkLCBjcHUpOwotCi0JcmRzc3AtPnNjaGVkX3FzKys7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTk9fSFoKLQotdm9pZCByY3VfZW50ZXJfbm9oeih2b2lkKQotewotCXN0YXRpYyBERUZJTkVfUkFURUxJTUlUX1NUQVRFKHJzLCAxMCAqIEhaLCAxKTsKLQotCXNtcF9tYigpOyAvKiBDUFVzIHNlZWluZyArKyBtdXN0IHNlZSBwcmlvciBSQ1UgcmVhZC1zaWRlIGNyaXQgc2VjdHMgKi8KLQlfX2dldF9jcHVfdmFyKHJjdV9keW50aWNrX3NjaGVkKS5keW50aWNrcysrOwotCVdBUk5fT05fUkFURUxJTUlUKF9fZ2V0X2NwdV92YXIocmN1X2R5bnRpY2tfc2NoZWQpLmR5bnRpY2tzICYgMHgxLCAmcnMpOwotfQotCi12b2lkIHJjdV9leGl0X25vaHoodm9pZCkKLXsKLQlzdGF0aWMgREVGSU5FX1JBVEVMSU1JVF9TVEFURShycywgMTAgKiBIWiwgMSk7Ci0KLQlfX2dldF9jcHVfdmFyKHJjdV9keW50aWNrX3NjaGVkKS5keW50aWNrcysrOwotCXNtcF9tYigpOyAvKiBDUFVzIHNlZWluZyArKyBtdXN0IHNlZSBsYXRlciBSQ1UgcmVhZC1zaWRlIGNyaXQgc2VjdHMgKi8KLQlXQVJOX09OX1JBVEVMSU1JVCghKF9fZ2V0X2NwdV92YXIocmN1X2R5bnRpY2tfc2NoZWQpLmR5bnRpY2tzICYgMHgxKSwKLQkJCQkmcnMpOwotfQotCi0jZW5kaWYgLyogQ09ORklHX05PX0haICovCi0KLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X2RhdGEpOwotCi1zdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0gewotCS5mbGlwbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHJjdV9jdHJsYmxrLmZsaXBsb2NrKSwKLQkuY29tcGxldGVkID0gMCwKLQkucmN1X3RyeV9mbGlwX3N0YXRlID0gcmN1X3RyeV9mbGlwX2lkbGVfc3RhdGUsCi0JLnNjaGVkbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHJjdV9jdHJsYmxrLnNjaGVkbG9jayksCi0JLnNjaGVkX3NsZWVwID0gcmN1X3NjaGVkX25vdF9zbGVlcGluZywKLQkuc2NoZWRfd3EgPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUihyY3VfY3RybGJsay5zY2hlZF93cSksCi19OwotCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpyY3Vfc2NoZWRfZ3JhY2VfcGVyaW9kX3Rhc2s7Ci0KLSNpZmRlZiBDT05GSUdfUkNVX1RSQUNFCi1zdGF0aWMgY2hhciAqcmN1X3RyeV9mbGlwX3N0YXRlX25hbWVzW10gPQotCXsgImlkbGUiLCAid2FpdGFjayIsICJ3YWl0emVybyIsICJ3YWl0bWIiIH07Ci0jZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfVFJBQ0UgKi8KLQotc3RhdGljIERFQ0xBUkVfQklUTUFQKHJjdV9jcHVfb25saW5lX21hcCwgTlJfQ1BVUykgX19yZWFkX21vc3RseQotCT0gQ1BVX0JJVFNfTk9ORTsKLQotLyoKLSAqIEVudW0gYW5kIHBlci1DUFUgZmxhZyB0byBkZXRlcm1pbmUgd2hlbiBlYWNoIENQVSBoYXMgc2VlbgotICogdGhlIG1vc3QgcmVjZW50IGNvdW50ZXIgZmxpcC4KLSAqLwotCi1lbnVtIHJjdV9mbGlwX2ZsYWdfdmFsdWVzIHsKLQlyY3VfZmxpcF9zZWVuLAkJLyogU3RlYWR5L2luaXRpYWwgc3RhdGUsIGxhc3QgZmxpcCBzZWVuLiAqLwotCQkJCS8qIE9ubHkgR1AgZGV0ZWN0b3IgY2FuIHVwZGF0ZS4gKi8KLQlyY3VfZmxpcHBlZAkJLyogRmxpcCBqdXN0IGNvbXBsZXRlZCwgbmVlZCBjb25maXJtYXRpb24uICovCi0JCQkJLyogT25seSBjb3JyZXNwb25kaW5nIENQVSBjYW4gdXBkYXRlLiAqLwotfTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChlbnVtIHJjdV9mbGlwX2ZsYWdfdmFsdWVzLCByY3VfZmxpcF9mbGFnKQotCQkJCQkJCQk9IHJjdV9mbGlwX3NlZW47Ci0KLS8qCi0gKiBFbnVtIGFuZCBwZXItQ1BVIGZsYWcgdG8gZGV0ZXJtaW5lIHdoZW4gZWFjaCBDUFUgaGFzIGV4ZWN1dGVkIHRoZQotICogbmVlZGVkIG1lbW9yeSBiYXJyaWVyIHRvIGZlbmNlIGluIG1lbW9yeSByZWZlcmVuY2VzIGZyb20gaXRzIGxhc3QgUkNVCi0gKiByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBpbiB0aGUganVzdC1jb21wbGV0ZWQgZ3JhY2UgcGVyaW9kLgotICovCi0KLWVudW0gcmN1X21iX2ZsYWdfdmFsdWVzIHsKLQlyY3VfbWJfZG9uZSwJCS8qIFN0ZWFkeS9pbml0aWFsIHN0YXRlLCBubyBtYigpcyByZXF1aXJlZC4gKi8KLQkJCQkvKiBPbmx5IEdQIGRldGVjdG9yIGNhbiB1cGRhdGUuICovCi0JcmN1X21iX25lZWRlZAkJLyogRmxpcCBqdXN0IGNvbXBsZXRlZCwgbmVlZCBhbiBtYigpLiAqLwotCQkJCS8qIE9ubHkgY29ycmVzcG9uZGluZyBDUFUgY2FuIHVwZGF0ZS4gKi8KLX07Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoZW51bSByY3VfbWJfZmxhZ192YWx1ZXMsIHJjdV9tYl9mbGFnKQotCQkJCQkJCQk9IHJjdV9tYl9kb25lOwotCi0vKgotICogUkNVX0RBVEFfTUU6IGZpbmQgdGhlIGN1cnJlbnQgQ1BVJ3MgcmN1X2RhdGEgc3RydWN0dXJlLgotICogUkNVX0RBVEFfQ1BVOiBmaW5kIHRoZSBzcGVjaWZpZWQgQ1BVJ3MgcmN1X2RhdGEgc3RydWN0dXJlLgotICovCi0jZGVmaW5lIFJDVV9EQVRBX01FKCkJCSgmX19nZXRfY3B1X3ZhcihyY3VfZGF0YSkpCi0jZGVmaW5lIFJDVV9EQVRBX0NQVShjcHUpCSgmcGVyX2NwdShyY3VfZGF0YSwgY3B1KSkKLQotLyoKLSAqIEhlbHBlciBtYWNybyBmb3IgdHJhY2luZyB3aGVuIHRoZSBhcHByb3ByaWF0ZSByY3VfZGF0YSBpcyBub3QKLSAqIGNhY2hlZCBpbiBhIGxvY2FsIHZhcmlhYmxlLCBidXQgd2hlcmUgdGhlIENQVSBudW1iZXIgaXMgc28gY2FjaGVkLgotICovCi0jZGVmaW5lIFJDVV9UUkFDRV9DUFUoZiwgY3B1KSBSQ1VfVFJBQ0UoZiwgJihSQ1VfREFUQV9DUFUoY3B1KS0+dHJhY2UpKTsKLQotLyoKLSAqIEhlbHBlciBtYWNybyBmb3IgdHJhY2luZyB3aGVuIHRoZSBhcHByb3ByaWF0ZSByY3VfZGF0YSBpcyBub3QKLSAqIGNhY2hlZCBpbiBhIGxvY2FsIHZhcmlhYmxlLgotICovCi0jZGVmaW5lIFJDVV9UUkFDRV9NRShmKSBSQ1VfVFJBQ0UoZiwgJihSQ1VfREFUQV9NRSgpLT50cmFjZSkpOwotCi0vKgotICogSGVscGVyIG1hY3JvIGZvciB0cmFjaW5nIHdoZW4gdGhlIGFwcHJvcHJpYXRlIHJjdV9kYXRhIGlzIHBvaW50ZWQKLSAqIHRvIGJ5IGEgbG9jYWwgdmFyaWFibGUuCi0gKi8KLSNkZWZpbmUgUkNVX1RSQUNFX1JEUChmLCByZHApIFJDVV9UUkFDRShmLCAmKChyZHApLT50cmFjZSkpOwotCi0jZGVmaW5lIFJDVV9TQ0hFRF9CQVRDSF9USU1FIChIWiAvIDUwKQotCi0vKgotICogUmV0dXJuIHRoZSBudW1iZXIgb2YgUkNVIGJhdGNoZXMgcHJvY2Vzc2VkIHRodXMgZmFyLiAgVXNlZnVsCi0gKiBmb3IgZGVidWcgYW5kIHN0YXRpc3RpY3MuCi0gKi8KLWxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkKHZvaWQpCi17Ci0JcmV0dXJuIHJjdV9jdHJsYmxrLmNvbXBsZXRlZDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZCk7Ci0KLXZvaWQgX19yY3VfcmVhZF9sb2NrKHZvaWQpCi17Ci0JaW50IGlkeDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSBjdXJyZW50OwotCWludCBuZXN0aW5nOwotCi0JbmVzdGluZyA9IEFDQ0VTU19PTkNFKHQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZyk7Ci0JaWYgKG5lc3RpbmcgIT0gMCkgewotCi0JCS8qIEFuIGVhcmxpZXIgcmN1X3JlYWRfbG9jaygpIGNvdmVycyB1cywganVzdCBjb3VudCBpdC4gKi8KLQotCQl0LT5yY3VfcmVhZF9sb2NrX25lc3RpbmcgPSBuZXN0aW5nICsgMTsKLQotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJLyoKLQkJICogV2UgZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6Ci0JCSAqIC0gSWYgd2UgZ2V0IHNjaGVkdWxpbmcgY2xvY2sgaW50ZXJydXB0IGhlcmUsIGFuZCB3ZQotCQkgKiAgIGVuZCB1cCBhY2tpbmcgdGhlIGNvdW50ZXIgZmxpcCwgaXQncyBsaWtlIGEgcHJvbWlzZQotCQkgKiAgIHRoYXQgd2Ugd2lsbCBuZXZlciBpbmNyZW1lbnQgdGhlIG9sZCBjb3VudGVyIGFnYWluLgotCQkgKiAgIFRodXMgd2Ugd2lsbCBicmVhayB0aGF0IHByb21pc2UgaWYgdGhhdAotCQkgKiAgIHNjaGVkdWxpbmcgY2xvY2sgaW50ZXJydXB0IGhhcHBlbnMgYmV0d2VlbiB0aGUgdGltZQotCQkgKiAgIHdlIHBpY2sgdGhlIC5jb21wbGV0ZWQgZmllbGQgYW5kIHRoZSB0aW1lIHRoYXQgd2UKLQkJICogICBpbmNyZW1lbnQgb3VyIGNvdW50ZXIuCi0JCSAqCi0JCSAqIC0gV2UgZG9uJ3Qgd2FudCB0byBiZSBwcmVlbXB0ZWQgb3V0IGhlcmUuCi0JCSAqCi0JCSAqIE5NSXMgY2FuIHN0aWxsIG9jY3VyLCBvZiBjb3Vyc2UsIGFuZCBtaWdodCB0aGVtc2VsdmVzCi0JCSAqIGNvbnRhaW4gcmN1X3JlYWRfbG9jaygpLgotCQkgKi8KLQotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQkJLyoKLQkJICogT3V0ZXJtb3N0IG5lc3Rpbmcgb2YgcmN1X3JlYWRfbG9jaygpLCBzbyBpbmNyZW1lbnQKLQkJICogdGhlIGN1cnJlbnQgY291bnRlciBmb3IgdGhlIGN1cnJlbnQgQ1BVLiAgVXNlIHZvbGF0aWxlCi0JCSAqIGNhc3RzIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIGZyb20gcmVvcmRlcmluZy4KLQkJICovCi0KLQkJaWR4ID0gQUNDRVNTX09OQ0UocmN1X2N0cmxibGsuY29tcGxldGVkKSAmIDB4MTsKLQkJQUNDRVNTX09OQ0UoUkNVX0RBVEFfTUUoKS0+cmN1X2ZsaXBjdHJbaWR4XSkrKzsKLQotCQkvKgotCQkgKiBOb3cgdGhhdCB0aGUgcGVyLUNQVSBjb3VudGVyIGhhcyBiZWVuIGluY3JlbWVudGVkLCB3ZQotCQkgKiBhcmUgcHJvdGVjdGVkIGZyb20gcmFjZXMgd2l0aCByY3VfcmVhZF9sb2NrKCkgaW52b2tlZAotCQkgKiBmcm9tIE5NSSBoYW5kbGVycyBvbiB0aGlzIENQVS4gIFdlIGNhbiB0aGVyZWZvcmUgc2FmZWx5Ci0JCSAqIGluY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudGVyLCByZWxpZXZpbmcgZnVydGhlciBOTUlzCi0JCSAqIG9mIHRoZSBuZWVkIHRvIGluY3JlbWVudCB0aGUgcGVyLUNQVSBjb3VudGVyLgotCQkgKi8KLQotCQlBQ0NFU1NfT05DRSh0LT5yY3VfcmVhZF9sb2NrX25lc3RpbmcpID0gbmVzdGluZyArIDE7Ci0KLQkJLyoKLQkJICogTm93IHRoYXQgd2UgaGF2ZSBwcmV2ZW50aW5nIGFueSBOTUlzIGZyb20gc3RvcmluZwotCQkgKiB0byB0aGUgLT5yY3VfZmxpcGN0cl9pZHgsIHdlIGNhbiBzYWZlbHkgdXNlIGl0IHRvCi0JCSAqIHJlbWVtYmVyIHdoaWNoIGNvdW50ZXIgdG8gZGVjcmVtZW50IGluIHRoZSBtYXRjaGluZwotCQkgKiByY3VfcmVhZF91bmxvY2soKS4KLQkJICovCi0KLQkJQUNDRVNTX09OQ0UodC0+cmN1X2ZsaXBjdHJfaWR4KSA9IGlkeDsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKF9fcmN1X3JlYWRfbG9jayk7Ci0KLXZvaWQgX19yY3VfcmVhZF91bmxvY2sodm9pZCkKLXsKLQlpbnQgaWR4OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IGN1cnJlbnQ7Ci0JaW50IG5lc3Rpbmc7Ci0KLQluZXN0aW5nID0gQUNDRVNTX09OQ0UodC0+cmN1X3JlYWRfbG9ja19uZXN0aW5nKTsKLQlpZiAobmVzdGluZyA+IDEpIHsKLQotCQkvKgotCQkgKiBXZSBhcmUgc3RpbGwgcHJvdGVjdGVkIGJ5IHRoZSBlbmNsb3NpbmcgcmN1X3JlYWRfbG9jaygpLAotCQkgKiBzbyBzaW1wbHkgZGVjcmVtZW50IHRoZSBjb3VudGVyLgotCQkgKi8KLQotCQl0LT5yY3VfcmVhZF9sb2NrX25lc3RpbmcgPSBuZXN0aW5nIC0gMTsKLQotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJLyoKLQkJICogRGlzYWJsZSBsb2NhbCBpbnRlcnJ1cHRzIHRvIHByZXZlbnQgdGhlIGdyYWNlLXBlcmlvZAotCQkgKiBkZXRlY3Rpb24gc3RhdGUgbWFjaGluZSBmcm9tIHNlZWluZyB1cyBoYWxmLWRvbmUuCi0JCSAqIE5NSXMgY2FuIHN0aWxsIG9jY3VyLCBvZiBjb3Vyc2UsIGFuZCBtaWdodCB0aGVtc2VsdmVzCi0JCSAqIGNvbnRhaW4gcmN1X3JlYWRfbG9jaygpIGFuZCByY3VfcmVhZF91bmxvY2soKS4KLQkJICovCi0KLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JCS8qCi0JCSAqIE91dGVybW9zdCBuZXN0aW5nIG9mIHJjdV9yZWFkX3VubG9jaygpLCBzbyB3ZSBtdXN0Ci0JCSAqIGRlY3JlbWVudCB0aGUgY3VycmVudCBjb3VudGVyIGZvciB0aGUgY3VycmVudCBDUFUuCi0JCSAqIFRoaXMgbXVzdCBiZSBkb25lIGNhcmVmdWxseSwgYmVjYXVzZSBOTUlzIGNhbgotCQkgKiBvY2N1ciBhdCBhbnkgcG9pbnQgaW4gdGhpcyBjb2RlLCBhbmQgYW55IHJjdV9yZWFkX2xvY2soKQotCQkgKiBhbmQgcmN1X3JlYWRfdW5sb2NrKCkgcGFpcnMgaW4gdGhlIE5NSSBoYW5kbGVycwotCQkgKiBtdXN0IGludGVyYWN0IG5vbi1kZXN0cnVjdGl2ZWx5IHdpdGggdGhpcyBjb2RlLgotCQkgKiBMb3RzIG9mIHZvbGF0aWxlIGNhc3RzLCBhbmQgLXZlcnktIGNhcmVmdWwgb3JkZXJpbmcuCi0JCSAqCi0JCSAqIENoYW5nZXMgdG8gdGhpcyBjb2RlLCBpbmNsdWRpbmcgdGhpcyBvbmUsIG11c3QgYmUKLQkJICogaW5zcGVjdGVkLCB2YWxpZGF0ZWQsIGFuZCB0ZXN0ZWQgZXh0cmVtZWx5IGNhcmVmdWxseSEhIQotCQkgKi8KLQotCQkvKgotCQkgKiBGaXJzdCwgcGljayB1cCB0aGUgaW5kZXguCi0JCSAqLwotCi0JCWlkeCA9IEFDQ0VTU19PTkNFKHQtPnJjdV9mbGlwY3RyX2lkeCk7Ci0KLQkJLyoKLQkJICogTm93IHRoYXQgd2UgaGF2ZSBmZXRjaGVkIHRoZSBjb3VudGVyIGluZGV4LCBpdCBpcwotCQkgKiBzYWZlIHRvIGRlY3JlbWVudCB0aGUgcGVyLXRhc2sgUkNVIG5lc3RpbmcgY291bnRlci4KLQkJICogQWZ0ZXIgdGhpcywgYW55IGludGVycnVwdHMgb3IgTk1JcyB3aWxsIGluY3JlbWVudCBhbmQKLQkJICogZGVjcmVtZW50IHRoZSBwZXItQ1BVIGNvdW50ZXJzLgotCQkgKi8KLQkJQUNDRVNTX09OQ0UodC0+cmN1X3JlYWRfbG9ja19uZXN0aW5nKSA9IG5lc3RpbmcgLSAxOwotCi0JCS8qCi0JCSAqIEl0IGlzIG5vdyBzYWZlIHRvIGRlY3JlbWVudCB0aGlzIHRhc2sncyBuZXN0aW5nIGNvdW50LgotCQkgKiBOTUlzIHRoYXQgb2NjdXIgYWZ0ZXIgdGhpcyBzdGF0ZW1lbnQgd2lsbCByb3V0ZSB0aGVpcgotCQkgKiByY3VfcmVhZF9sb2NrKCkgY2FsbHMgdGhyb3VnaCB0aGlzICJlbHNlIiBjbGF1c2UsIGFuZAotCQkgKiB3aWxsIHRodXMgc3RhcnQgaW5jcmVtZW50aW5nIHRoZSBwZXItQ1BVIGNvdW50ZXIgb24KLQkJICogdGhlaXIgb3duLiAgVGhleSB3aWxsIGFsc28gY2xvYmJlciAtPnJjdV9mbGlwY3RyX2lkeCwKLQkJICogYnV0IHRoYXQgaXMgT0ssIHNpbmNlIHdlIGhhdmUgYWxyZWFkeSBmZXRjaGVkIGl0LgotCQkgKi8KLQotCQlBQ0NFU1NfT05DRShSQ1VfREFUQV9NRSgpLT5yY3VfZmxpcGN0cltpZHhdKS0tOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoX19yY3VfcmVhZF91bmxvY2spOwotCi0vKgotICogSWYgYSBnbG9iYWwgY291bnRlciBmbGlwIGhhcyBvY2N1cnJlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoYXQgd2UKLSAqIGFkdmFuY2VkIGNhbGxiYWNrcywgYWR2YW5jZSB0aGVtLiAgSGFyZHdhcmUgaW50ZXJydXB0cyBtdXN0IGJlCi0gKiBkaXNhYmxlZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgX19yY3VfYWR2YW5jZV9jYWxsYmFja3Moc3RydWN0IHJjdV9kYXRhICpyZHApCi17Ci0JaW50IGNwdTsKLQlpbnQgaTsKLQlpbnQgd2xjID0gMDsKLQotCWlmIChyZHAtPmNvbXBsZXRlZCAhPSByY3VfY3RybGJsay5jb21wbGV0ZWQpIHsKLQkJaWYgKHJkcC0+d2FpdGxpc3RbR1BfU1RBR0VTIC0gMV0gIT0gTlVMTCkgewotCQkJKnJkcC0+ZG9uZXRhaWwgPSByZHAtPndhaXRsaXN0W0dQX1NUQUdFUyAtIDFdOwotCQkJcmRwLT5kb25ldGFpbCA9IHJkcC0+d2FpdHRhaWxbR1BfU1RBR0VTIC0gMV07Ci0JCQlSQ1VfVFJBQ0VfUkRQKHJjdXByZWVtcHRfdHJhY2VfbW92ZTJkb25lLCByZHApOwotCQl9Ci0JCWZvciAoaSA9IEdQX1NUQUdFUyAtIDI7IGkgPj0gMDsgaS0tKSB7Ci0JCQlpZiAocmRwLT53YWl0bGlzdFtpXSAhPSBOVUxMKSB7Ci0JCQkJcmRwLT53YWl0bGlzdFtpICsgMV0gPSByZHAtPndhaXRsaXN0W2ldOwotCQkJCXJkcC0+d2FpdHRhaWxbaSArIDFdID0gcmRwLT53YWl0dGFpbFtpXTsKLQkJCQl3bGMrKzsKLQkJCX0gZWxzZSB7Ci0JCQkJcmRwLT53YWl0bGlzdFtpICsgMV0gPSBOVUxMOwotCQkJCXJkcC0+d2FpdHRhaWxbaSArIDFdID0KLQkJCQkJJnJkcC0+d2FpdGxpc3RbaSArIDFdOwotCQkJfQotCQl9Ci0JCWlmIChyZHAtPm5leHRsaXN0ICE9IE5VTEwpIHsKLQkJCXJkcC0+d2FpdGxpc3RbMF0gPSByZHAtPm5leHRsaXN0OwotCQkJcmRwLT53YWl0dGFpbFswXSA9IHJkcC0+bmV4dHRhaWw7Ci0JCQl3bGMrKzsKLQkJCXJkcC0+bmV4dGxpc3QgPSBOVUxMOwotCQkJcmRwLT5uZXh0dGFpbCA9ICZyZHAtPm5leHRsaXN0OwotCQkJUkNVX1RSQUNFX1JEUChyY3VwcmVlbXB0X3RyYWNlX21vdmUyd2FpdCwgcmRwKTsKLQkJfSBlbHNlIHsKLQkJCXJkcC0+d2FpdGxpc3RbMF0gPSBOVUxMOwotCQkJcmRwLT53YWl0dGFpbFswXSA9ICZyZHAtPndhaXRsaXN0WzBdOwotCQl9Ci0JCXJkcC0+d2FpdGxpc3Rjb3VudCA9IHdsYzsKLQkJcmRwLT5jb21wbGV0ZWQgPSByY3VfY3RybGJsay5jb21wbGV0ZWQ7Ci0JfQotCi0JLyoKLQkgKiBDaGVjayB0byBzZWUgaWYgdGhpcyBDUFUgbmVlZHMgdG8gcmVwb3J0IHRoYXQgaXQgaGFzIHNlZW4KLQkgKiB0aGUgbW9zdCByZWNlbnQgY291bnRlciBmbGlwLCB0aGVyZWJ5IGRlY2xhcmluZyB0aGF0IGFsbAotCSAqIHN1YnNlcXVlbnQgcmN1X3JlYWRfbG9jaygpIGludm9jYXRpb25zIHdpbGwgcmVzcGVjdCB0aGlzIGZsaXAuCi0JICovCi0KLQljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWlmIChwZXJfY3B1KHJjdV9mbGlwX2ZsYWcsIGNwdSkgPT0gcmN1X2ZsaXBwZWQpIHsKLQkJc21wX21iKCk7ICAvKiBTdWJzZXF1ZW50IGNvdW50ZXIgYWNjZXNzZXMgbXVzdCBzZWUgbmV3IHZhbHVlICovCi0JCXBlcl9jcHUocmN1X2ZsaXBfZmxhZywgY3B1KSA9IHJjdV9mbGlwX3NlZW47Ci0JCXNtcF9tYigpOyAgLyogU3Vic2VxdWVudCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zICovCi0JCQkgICAvKiAgc2VlbiAtYWZ0ZXItIGFja25vd2xlZGdlbWVudC4gKi8KLQl9Ci19Ci0KLSNpZmRlZiBDT05GSUdfTk9fSFoKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHJjdV91cGRhdGVfZmxhZyk7Ci0KLS8qKgotICogcmN1X2lycV9lbnRlciAtIENhbGxlZCBmcm9tIEhhcmQgaXJxIGhhbmRsZXJzIGFuZCBOTUkvU01JLgotICoKLSAqIElmIHRoZSBDUFUgd2FzIGlkbGUgd2l0aCBkeW5hbWljIHRpY2tzIGFjdGl2ZSwgdGhpcyB1cGRhdGVzIHRoZQotICogcmN1X2R5bnRpY2tfc2NoZWQuZHludGlja3MgdG8gbGV0IHRoZSBSQ1UgaGFuZGxpbmcga25vdyB0aGF0IHRoZQotICogQ1BVIGlzIGFjdGl2ZS4KLSAqLwotdm9pZCByY3VfaXJxX2VudGVyKHZvaWQpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlzdHJ1Y3QgcmN1X2R5bnRpY2tfc2NoZWQgKnJkc3NwID0gJnBlcl9jcHUocmN1X2R5bnRpY2tfc2NoZWQsIGNwdSk7Ci0KLQlpZiAocGVyX2NwdShyY3VfdXBkYXRlX2ZsYWcsIGNwdSkpCi0JCXBlcl9jcHUocmN1X3VwZGF0ZV9mbGFnLCBjcHUpKys7Ci0KLQkvKgotCSAqIE9ubHkgdXBkYXRlIGlmIHdlIGFyZSBjb21pbmcgZnJvbSBhIHN0b3BwZWQgdGlja3MgbW9kZQotCSAqIChyY3VfZHludGlja19zY2hlZC5keW50aWNrcyBpcyBldmVuKS4KLQkgKi8KLQlpZiAoIWluX2ludGVycnVwdCgpICYmCi0JICAgIChyZHNzcC0+ZHludGlja3MgJiAweDEpID09IDApIHsKLQkJLyoKLQkJICogVGhlIGZvbGxvd2luZyBtaWdodCBzZWVtIGxpa2Ugd2UgY291bGQgaGF2ZSBhIHJhY2UKLQkJICogd2l0aCBOTUkvU01Jcy4gQnV0IHRoaXMgcmVhbGx5IGlzbid0IGEgcHJvYmxlbS4KLQkJICogSGVyZSB3ZSBkbyBhIHJlYWQvbW9kaWZ5L3dyaXRlLCBhbmQgdGhlIHJhY2UgaGFwcGVucwotCQkgKiB3aGVuIGFuIE5NSS9TTUkgY29tZXMgaW4gYWZ0ZXIgdGhlIHJlYWQgYW5kIGJlZm9yZQotCQkgKiB0aGUgd3JpdGUuIEJ1dCBOTUkvU01JcyB3aWxsIGluY3JlbWVudCB0aGlzIGNvdW50ZXIKLQkJICogdHdpY2UgYmVmb3JlIHJldHVybmluZywgc28gdGhlIHplcm8gYml0IHdpbGwgbm90Ci0JCSAqIGJlIGNvcnJ1cHRlZCBieSB0aGUgTk1JL1NNSSB3aGljaCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQKLQkJICogcGFydC4KLQkJICoKLQkJICogVGhlIG9ubHkgdGhpbmcgaXMgdGhhdCB3ZSB3b3VsZCBicmluZyBiYWNrIHRoZSBjb3VudGVyCi0JCSAqIHRvIGEgcG9zdGlvbiB0aGF0IGl0IHdhcyBpbiBkdXJpbmcgdGhlIE5NSS9TTUkuCi0JCSAqIEJ1dCB0aGUgemVybyBiaXQgd291bGQgYmUgc2V0LCBzbyB0aGUgcmVzdCBvZiB0aGUKLQkJICogY291bnRlciB3b3VsZCBhZ2FpbiBiZSBpZ25vcmVkLgotCQkgKgotCQkgKiBPbiByZXR1cm4gZnJvbSB0aGUgSVJRLCB0aGUgY291bnRlciBtYXkgaGF2ZSB0aGUgemVybwotCQkgKiBiaXQgYmUgMCBhbmQgdGhlIGNvdW50ZXIgdGhlIHNhbWUgYXMgdGhlIHJldHVybiBmcm9tCi0JCSAqIHRoZSBOTUkvU01JLiBJZiB0aGUgc3RhdGUgbWFjaGluZSB3YXMgc28gdW5sdWNreSB0bwotCQkgKiBzZWUgdGhhdCwgaXQgc3RpbGwgZG9lc24ndCBtYXR0ZXIsIHNpbmNlIGFsbAotCQkgKiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9uIHRoaXMgQ1BVIHdvdWxkCi0JCSAqIGhhdmUgYWxyZWFkeSBjb21wbGV0ZWQuCi0JCSAqLwotCQlyZHNzcC0+ZHludGlja3MrKzsKLQkJLyoKLQkJICogVGhlIGZvbGxvd2luZyBtZW1vcnkgYmFycmllciBlbnN1cmVzIHRoYXQgYW55Ci0JCSAqIHJjdV9yZWFkX2xvY2soKSBwcmltaXRpdmVzIGluIHRoZSBpcnEgaGFuZGxlcgotCQkgKiBhcmUgc2VlbiBieSBvdGhlciBDUFVzIHRvIGZvbGxvdyB0aGUgYWJvdmUKLQkJICogaW5jcmVtZW50IHRvIHJjdV9keW50aWNrX3NjaGVkLmR5bnRpY2tzLiBUaGlzIGlzCi0JCSAqIHJlcXVpcmVkIGluIG9yZGVyIGZvciBvdGhlciBDUFVzIHRvIGNvcnJlY3RseQotCQkgKiBkZXRlcm1pbmUgd2hlbiBpdCBpcyBzYWZlIHRvIGFkdmFuY2UgdGhlIFJDVQotCQkgKiBncmFjZS1wZXJpb2Qgc3RhdGUgbWFjaGluZS4KLQkJICovCi0JCXNtcF9tYigpOyAvKiBzZWUgYWJvdmUgYmxvY2sgY29tbWVudC4gKi8KLQkJLyoKLQkJICogU2luY2Ugd2UgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBkeW5hbWljIHRpY2sgbW9kZSBmcm9tCi0JCSAqIHRoZSByY3VfZHludGlja19zY2hlZC5keW50aWNrcyBhZnRlciB0aGlzIHJvdXRpbmUsCi0JCSAqIHdlIHVzZSBhIHNlY29uZCBmbGFnIHRvIGFja25vd2xlZGdlIHRoYXQgd2UgY2FtZQotCQkgKiBmcm9tIGFuIGlkbGUgc3RhdGUgd2l0aCB0aWNrcyBzdG9wcGVkLgotCQkgKi8KLQkJcGVyX2NwdShyY3VfdXBkYXRlX2ZsYWcsIGNwdSkrKzsKLQkJLyoKLQkJICogSWYgd2UgdGFrZSBhbiBOTUkvU01JIG5vdywgdGhleSB3aWxsIGFsc28gaW5jcmVtZW50Ci0JCSAqIHRoZSByY3VfdXBkYXRlX2ZsYWcsIGFuZCB3aWxsIG5vdCB1cGRhdGUgdGhlCi0JCSAqIHJjdV9keW50aWNrX3NjaGVkLmR5bnRpY2tzIG9uIGV4aXQuIFRoYXQgaXMgZm9yCi0JCSAqIHRoaXMgSVJRIHRvIGRvLgotCQkgKi8KLQl9Ci19Ci0KLS8qKgotICogcmN1X2lycV9leGl0IC0gQ2FsbGVkIGZyb20gZXhpdGluZyBIYXJkIGlycSBjb250ZXh0LgotICoKLSAqIElmIHRoZSBDUFUgd2FzIGlkbGUgd2l0aCBkeW5hbWljIHRpY2tzIGFjdGl2ZSwgdXBkYXRlIHRoZQotICogcmN1X2R5bnRpY2tfc2NoZWQuZHludGlja3MgdG8gcHV0IGxldCB0aGUgUkNVIGhhbmRsaW5nIGJlCi0gKiBhd2FyZSB0aGF0IHRoZSBDUFUgaXMgZ29pbmcgYmFjayB0byBpZGxlIHdpdGggbm8gdGlja3MuCi0gKi8KLXZvaWQgcmN1X2lycV9leGl0KHZvaWQpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlzdHJ1Y3QgcmN1X2R5bnRpY2tfc2NoZWQgKnJkc3NwID0gJnBlcl9jcHUocmN1X2R5bnRpY2tfc2NoZWQsIGNwdSk7Ci0KLQkvKgotCSAqIHJjdV91cGRhdGVfZmxhZyBpcyBzZXQgaWYgd2UgaW50ZXJydXB0ZWQgdGhlIENQVQotCSAqIHdoZW4gaXQgd2FzIGlkbGUgd2l0aCB0aWNrcyBzdG9wcGVkLgotCSAqIE9uY2UgdGhpcyBvY2N1cnMsIHdlIGtlZXAgdHJhY2sgb2YgaW50ZXJydXB0IG5lc3RpbmcKLQkgKiBiZWNhdXNlIGEgTk1JL1NNSSBjb3VsZCBhbHNvIGNvbWUgaW4sIGFuZCB3ZSBzdGlsbAotCSAqIG9ubHkgd2FudCB0aGUgSVJRIHRoYXQgc3RhcnRlZCB0aGUgaW5jcmVtZW50IG9mIHRoZQotCSAqIHJjdV9keW50aWNrX3NjaGVkLmR5bnRpY2tzIHRvIGJlIHRoZSBvbmUgdGhhdCBtb2RpZmllcwotCSAqIGl0IG9uIGV4aXQuCi0JICovCi0JaWYgKHBlcl9jcHUocmN1X3VwZGF0ZV9mbGFnLCBjcHUpKSB7Ci0JCWlmICgtLXBlcl9jcHUocmN1X3VwZGF0ZV9mbGFnLCBjcHUpKQotCQkJcmV0dXJuOwotCi0JCS8qIFRoaXMgbXVzdCBtYXRjaCB0aGUgaW50ZXJydXB0IG5lc3RpbmcgKi8KLQkJV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7Ci0KLQkJLyoKLQkJICogSWYgYW4gTk1JL1NNSSBoYXBwZW5zIG5vdyB3ZSBhcmUgc3RpbGwKLQkJICogcHJvdGVjdGVkIGJ5IHRoZSByY3VfZHludGlja19zY2hlZC5keW50aWNrcyBiZWluZyBvZGQuCi0JCSAqLwotCi0JCS8qCi0JCSAqIFRoZSBmb2xsb3dpbmcgbWVtb3J5IGJhcnJpZXIgZW5zdXJlcyB0aGF0IGFueQotCQkgKiByY3VfcmVhZF91bmxvY2soKSBwcmltaXRpdmVzIGluIHRoZSBpcnEgaGFuZGxlcgotCQkgKiBhcmUgc2VlbiBieSBvdGhlciBDUFVzIHRvIHByZWNlZWQgdGhlIGZvbGxvd2luZwotCQkgKiBpbmNyZW1lbnQgdG8gcmN1X2R5bnRpY2tfc2NoZWQuZHludGlja3MuIFRoaXMKLQkJICogaXMgcmVxdWlyZWQgaW4gb3JkZXIgZm9yIG90aGVyIENQVXMgdG8gZGV0ZXJtaW5lCi0JCSAqIHdoZW4gaXQgaXMgc2FmZSB0byBhZHZhbmNlIHRoZSBSQ1UgZ3JhY2UtcGVyaW9kCi0JCSAqIHN0YXRlIG1hY2hpbmUuCi0JCSAqLwotCQlzbXBfbWIoKTsgLyogc2VlIGFib3ZlIGJsb2NrIGNvbW1lbnQuICovCi0JCXJkc3NwLT5keW50aWNrcysrOwotCQlXQVJOX09OKHJkc3NwLT5keW50aWNrcyAmIDB4MSk7Ci0JfQotfQotCi12b2lkIHJjdV9ubWlfZW50ZXIodm9pZCkKLXsKLQlyY3VfaXJxX2VudGVyKCk7Ci19Ci0KLXZvaWQgcmN1X25taV9leGl0KHZvaWQpCi17Ci0JcmN1X2lycV9leGl0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKGludCBjcHUpCi17Ci0Jc3RydWN0IHJjdV9keW50aWNrX3NjaGVkICpyZHNzcCA9ICZwZXJfY3B1KHJjdV9keW50aWNrX3NjaGVkLCBjcHUpOwotCi0JcmRzc3AtPmR5bnRpY2tzX3NuYXAgPSByZHNzcC0+ZHludGlja3M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1yY3VfdHJ5X2ZsaXBfd2FpdGFja19uZWVkZWQoaW50IGNwdSkKLXsKLQlsb25nIGN1cnI7Ci0JbG9uZyBzbmFwOwotCXN0cnVjdCByY3VfZHludGlja19zY2hlZCAqcmRzc3AgPSAmcGVyX2NwdShyY3VfZHludGlja19zY2hlZCwgY3B1KTsKLQotCWN1cnIgPSByZHNzcC0+ZHludGlja3M7Ci0Jc25hcCA9IHJkc3NwLT5keW50aWNrc19zbmFwOwotCXNtcF9tYigpOyAvKiBmb3JjZSBvcmRlcmluZyB3aXRoIGNwdSBlbnRlcmluZy9sZWF2aW5nIGR5bnRpY2tzLiAqLwotCi0JLyoKLQkgKiBJZiB0aGUgQ1BVIHJlbWFpbmVkIGluIGR5bnRpY2tzIG1vZGUgZm9yIHRoZSBlbnRpcmUgdGltZQotCSAqIGFuZCBkaWRuJ3QgdGFrZSBhbnkgaW50ZXJydXB0cywgTk1JcywgU01Jcywgb3Igd2hhdGV2ZXIsCi0JICogdGhlbiBpdCBjYW5ub3QgYmUgaW4gdGhlIG1pZGRsZSBvZiBhbiByY3VfcmVhZF9sb2NrKCksIHNvCi0JICogdGhlIG5leHQgcmN1X3JlYWRfbG9jaygpIGl0IGV4ZWN1dGVzIG11c3QgdXNlIHRoZSBuZXcgdmFsdWUKLQkgKiBvZiB0aGUgY291bnRlci4gIFNvIHdlIGNhbiBzYWZlbHkgcHJldGVuZCB0aGF0IHRoaXMgQ1BVCi0JICogYWxyZWFkeSBhY2tub3dsZWRnZWQgdGhlIGNvdW50ZXIuCi0JICovCi0KLQlpZiAoKGN1cnIgPT0gc25hcCkgJiYgKChjdXJyICYgMHgxKSA9PSAwKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIElmIHRoZSBDUFUgcGFzc2VkIHRocm91Z2ggb3IgZW50ZXJlZCBhIGR5bnRpY2tzIGlkbGUgcGhhc2Ugd2l0aAotCSAqIG5vIGFjdGl2ZSBpcnEgaGFuZGxlcnMsIHRoZW4sIGFzIGFib3ZlLCB3ZSBjYW4gc2FmZWx5IHByZXRlbmQKLQkgKiB0aGF0IHRoaXMgQ1BVIGFscmVhZHkgYWNrbm93bGVkZ2VkIHRoZSBjb3VudGVyLgotCSAqLwotCi0JaWYgKChjdXJyIC0gc25hcCkgPiAyIHx8IChjdXJyICYgMHgxKSA9PSAwKQotCQlyZXR1cm4gMDsKLQotCS8qIFdlIG5lZWQgdGhpcyBDUFUgdG8gZXhwbGljaXRseSBhY2tub3dsZWRnZSB0aGUgY291bnRlciBmbGlwLiAqLwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1yY3VfdHJ5X2ZsaXBfd2FpdG1iX25lZWRlZChpbnQgY3B1KQotewotCWxvbmcgY3VycjsKLQlsb25nIHNuYXA7Ci0Jc3RydWN0IHJjdV9keW50aWNrX3NjaGVkICpyZHNzcCA9ICZwZXJfY3B1KHJjdV9keW50aWNrX3NjaGVkLCBjcHUpOwotCi0JY3VyciA9IHJkc3NwLT5keW50aWNrczsKLQlzbmFwID0gcmRzc3AtPmR5bnRpY2tzX3NuYXA7Ci0Jc21wX21iKCk7IC8qIGZvcmNlIG9yZGVyaW5nIHdpdGggY3B1IGVudGVyaW5nL2xlYXZpbmcgZHludGlja3MuICovCi0KLQkvKgotCSAqIElmIHRoZSBDUFUgcmVtYWluZWQgaW4gZHludGlja3MgbW9kZSBmb3IgdGhlIGVudGlyZSB0aW1lCi0JICogYW5kIGRpZG4ndCB0YWtlIGFueSBpbnRlcnJ1cHRzLCBOTUlzLCBTTUlzLCBvciB3aGF0ZXZlciwKLQkgKiB0aGVuIGl0IGNhbm5vdCBoYXZlIGV4ZWN1dGVkIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbgotCSAqIGR1cmluZyB0aGF0IHRpbWUsIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0IHRvIGV4ZWN1dGUgYQotCSAqIG1lbW9yeSBiYXJyaWVyLgotCSAqLwotCi0JaWYgKChjdXJyID09IHNuYXApICYmICgoY3VyciAmIDB4MSkgPT0gMCkpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBJZiB0aGUgQ1BVIGVpdGhlciBlbnRlcmVkIG9yIGV4aXRlZCBhbiBvdXRlcm1vc3QgaW50ZXJydXB0LAotCSAqIFNNSSwgTk1JLCBvciB3aGF0ZXZlciBoYW5kbGVyLCB0aGVuIHdlIGtub3cgdGhhdCBpdCBleGVjdXRlZAotCSAqIGEgbWVtb3J5IGJhcnJpZXIgd2hlbiBkb2luZyBzby4gIFNvIHdlIGRvbid0IG5lZWQgYW5vdGhlciBvbmUuCi0JICovCi0JaWYgKGN1cnIgIT0gc25hcCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBXZSBuZWVkIHRoZSBDUFUgdG8gZXhlY3V0ZSBhIG1lbW9yeSBiYXJyaWVyLiAqLwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyX3NjaGVkKGludCBjcHUpCi17Ci0Jc3RydWN0IHJjdV9keW50aWNrX3NjaGVkICpyZHNzcCA9ICZwZXJfY3B1KHJjdV9keW50aWNrX3NjaGVkLCBjcHUpOwotCi0JcmRzc3AtPnNjaGVkX2R5bnRpY2tzX3NuYXAgPSByZHNzcC0+ZHludGlja3M7Ci19Ci0KLXN0YXRpYyBpbnQgcmN1X3FzY3RyX2luY19uZWVkZWRfZHludGljayhpbnQgY3B1KQotewotCWxvbmcgY3VycjsKLQlsb25nIHNuYXA7Ci0Jc3RydWN0IHJjdV9keW50aWNrX3NjaGVkICpyZHNzcCA9ICZwZXJfY3B1KHJjdV9keW50aWNrX3NjaGVkLCBjcHUpOwotCi0JY3VyciA9IHJkc3NwLT5keW50aWNrczsKLQlzbmFwID0gcmRzc3AtPnNjaGVkX2R5bnRpY2tzX3NuYXA7Ci0Jc21wX21iKCk7IC8qIGZvcmNlIG9yZGVyaW5nIHdpdGggY3B1IGVudGVyaW5nL2xlYXZpbmcgZHludGlja3MuICovCi0KLQkvKgotCSAqIElmIHRoZSBDUFUgcmVtYWluZWQgaW4gZHludGlja3MgbW9kZSBmb3IgdGhlIGVudGlyZSB0aW1lCi0JICogYW5kIGRpZG4ndCB0YWtlIGFueSBpbnRlcnJ1cHRzLCBOTUlzLCBTTUlzLCBvciB3aGF0ZXZlciwKLQkgKiB0aGVuIGl0IGNhbm5vdCBiZSBpbiB0aGUgbWlkZGxlIG9mIGFuIHJjdV9yZWFkX2xvY2soKSwgc28KLQkgKiB0aGUgbmV4dCByY3VfcmVhZF9sb2NrKCkgaXQgZXhlY3V0ZXMgbXVzdCB1c2UgdGhlIG5ldyB2YWx1ZQotCSAqIG9mIHRoZSBjb3VudGVyLiAgVGhlcmVmb3JlLCB0aGlzIENQVSBoYXMgYmVlbiBpbiBhIHF1aWVzY2VudAotCSAqIHN0YXRlIHRoZSBlbnRpcmUgdGltZSwgYW5kIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgaXQuCi0JICovCi0KLQlpZiAoKGN1cnIgPT0gc25hcCkgJiYgKChjdXJyICYgMHgxKSA9PSAwKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIElmIHRoZSBDUFUgcGFzc2VkIHRocm91Z2ggb3IgZW50ZXJlZCBhIGR5bnRpY2tzIGlkbGUgcGhhc2Ugd2l0aAotCSAqIG5vIGFjdGl2ZSBpcnEgaGFuZGxlcnMsIHRoZW4sIGFzIGFib3ZlLCB0aGlzIENQVSBoYXMgYWxyZWFkeQotCSAqIHBhc3NlZCB0aHJvdWdoIGEgcXVpZXNjZW50IHN0YXRlLgotCSAqLwotCi0JaWYgKChjdXJyIC0gc25hcCkgPiAyIHx8IChzbmFwICYgMHgxKSA9PSAwKQotCQlyZXR1cm4gMDsKLQotCS8qIFdlIG5lZWQgdGhpcyBDUFUgdG8gZ28gdGhyb3VnaCBhIHF1aWVzY2VudCBzdGF0ZS4gKi8KLQotCXJldHVybiAxOwotfQotCi0jZWxzZSAvKiAhQ09ORklHX05PX0haICovCi0KLSMgZGVmaW5lIGR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKGNwdSkJCWRvIHsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIHJjdV90cnlfZmxpcF93YWl0YWNrX25lZWRlZChjcHUpCQkoMSkKLSMgZGVmaW5lIHJjdV90cnlfZmxpcF93YWl0bWJfbmVlZGVkKGNwdSkJCSgxKQotCi0jIGRlZmluZSBkeW50aWNrX3NhdmVfcHJvZ3Jlc3NfY291bnRlcl9zY2hlZChjcHUpCWRvIHsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIHJjdV9xc2N0cl9pbmNfbmVlZGVkX2R5bnRpY2soY3B1KQkJKDEpCi0KLSNlbmRpZiAvKiBDT05GSUdfTk9fSFogKi8KLQotc3RhdGljIHZvaWQgc2F2ZV9xc2N0cl9zY2hlZChpbnQgY3B1KQotewotCXN0cnVjdCByY3VfZHludGlja19zY2hlZCAqcmRzc3AgPSAmcGVyX2NwdShyY3VfZHludGlja19zY2hlZCwgY3B1KTsKLQotCXJkc3NwLT5zY2hlZF9xc19zbmFwID0gcmRzc3AtPnNjaGVkX3FzOwotfQotCi1zdGF0aWMgaW5saW5lIGludCByY3VfcXNjdHJfaW5jX25lZWRlZChpbnQgY3B1KQotewotCXN0cnVjdCByY3VfZHludGlja19zY2hlZCAqcmRzc3AgPSAmcGVyX2NwdShyY3VfZHludGlja19zY2hlZCwgY3B1KTsKLQotCS8qCi0JICogSWYgdGhlcmUgaGFzIGJlZW4gYSBxdWllc2NlbnQgc3RhdGUsIG5vIG1vcmUgbmVlZCB0byB3YWl0Ci0JICogb24gdGhpcyBDUFUuCi0JICovCi0KLQlpZiAocmRzc3AtPnNjaGVkX3FzICE9IHJkc3NwLT5zY2hlZF9xc19zbmFwKSB7Ci0JCXNtcF9tYigpOyAvKiBmb3JjZSBvcmRlcmluZyB3aXRoIGNwdSBlbnRlcmluZyBzY2hlZHVsZSgpLiAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBXZSBuZWVkIHRoaXMgQ1BVIHRvIGdvIHRocm91Z2ggYSBxdWllc2NlbnQgc3RhdGUuICovCi0KLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIEdldCBoZXJlIHdoZW4gUkNVIGlzIGlkbGUuICBEZWNpZGUgd2hldGhlciB3ZSBuZWVkIHRvCi0gKiBtb3ZlIG91dCBvZiBpZGxlIHN0YXRlLCBhbmQgcmV0dXJuIG5vbi16ZXJvIGlmIHNvLgotICogIlN0cmFpZ2h0Zm9yd2FyZCIgYXBwcm9hY2ggZm9yIHRoZSBtb21lbnQsIG1pZ2h0IGxhdGVyCi0gKiB1c2UgY2FsbGJhY2stbGlzdCBsZW5ndGhzLCBncmFjZS1wZXJpb2QgZHVyYXRpb24sIG9yCi0gKiBzb21lIHN1Y2ggdG8gZGV0ZXJtaW5lIHdoZW4gdG8gZXhpdCBpZGxlIHN0YXRlLgotICogTWlnaHQgYWxzbyBuZWVkIGEgcHJlLWlkbGUgdGVzdCB0aGF0IGRvZXMgbm90IGFjcXVpcmUKLSAqIHRoZSBsb2NrLCBidXQgbGV0J3MgZ2V0IHRoZSBzaW1wbGUgY2FzZSB3b3JraW5nIGZpcnN0Li4uCi0gKi8KLQotc3RhdGljIGludAotcmN1X3RyeV9mbGlwX2lkbGUodm9pZCkKLXsKLQlpbnQgY3B1OwotCi0JUkNVX1RSQUNFX01FKHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfaTEpOwotCWlmICghcmN1X3BlbmRpbmcoc21wX3Byb2Nlc3Nvcl9pZCgpKSkgewotCQlSQ1VfVFJBQ0VfTUUocmN1cHJlZW1wdF90cmFjZV90cnlfZmxpcF9pZTEpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgotCSAqIERvIHRoZSBmbGlwLgotCSAqLwotCi0JUkNVX1RSQUNFX01FKHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfZzEpOwotCXJjdV9jdHJsYmxrLmNvbXBsZXRlZCsrOyAgLyogc3RhbmRzIGluIGZvciByY3VfdHJ5X2ZsaXBfZzIgKi8KLQotCS8qCi0JICogTmVlZCBhIG1lbW9yeSBiYXJyaWVyIHNvIHRoYXQgb3RoZXIgQ1BVcyBzZWUgdGhlIG5ldwotCSAqIGNvdW50ZXIgdmFsdWUgYmVmb3JlIHRoZXkgc2VlIHRoZSBzdWJzZXF1ZW50IGNoYW5nZSBvZiBhbGwKLQkgKiB0aGUgcmN1X2ZsaXBfZmxhZyBpbnN0YW5jZXMgdG8gcmN1X2ZsaXBwZWQuCi0JICovCi0KLQlzbXBfbWIoKTsJLyogc2VlIGFib3ZlIGJsb2NrIGNvbW1lbnQuICovCi0KLQkvKiBOb3cgYXNrIGVhY2ggQ1BVIGZvciBhY2tub3dsZWRnZW1lbnQgb2YgdGhlIGZsaXAuICovCi0KLQlmb3JfZWFjaF9jcHUoY3B1LCB0b19jcHVtYXNrKHJjdV9jcHVfb25saW5lX21hcCkpIHsKLQkJcGVyX2NwdShyY3VfZmxpcF9mbGFnLCBjcHUpID0gcmN1X2ZsaXBwZWQ7Ci0JCWR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKGNwdSk7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBXYWl0IGZvciBDUFVzIHRvIGFja25vd2xlZGdlIHRoZSBmbGlwLgotICovCi0KLXN0YXRpYyBpbnQKLXJjdV90cnlfZmxpcF93YWl0YWNrKHZvaWQpCi17Ci0JaW50IGNwdTsKLQotCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX2ExKTsKLQlmb3JfZWFjaF9jcHUoY3B1LCB0b19jcHVtYXNrKHJjdV9jcHVfb25saW5lX21hcCkpCi0JCWlmIChyY3VfdHJ5X2ZsaXBfd2FpdGFja19uZWVkZWQoY3B1KSAmJgotCQkgICAgcGVyX2NwdShyY3VfZmxpcF9mbGFnLCBjcHUpICE9IHJjdV9mbGlwX3NlZW4pIHsKLQkJCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX2FlMSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JLyoKLQkgKiBNYWtlIHN1cmUgb3VyIGNoZWNrcyBhYm92ZSBkb24ndCBibGVlZCBpbnRvIHN1YnNlcXVlbnQKLQkgKiB3YWl0aW5nIGZvciB0aGUgc3VtIG9mIHRoZSBjb3VudGVycyB0byByZWFjaCB6ZXJvLgotCSAqLwotCi0Jc21wX21iKCk7CS8qIHNlZSBhYm92ZSBibG9jayBjb21tZW50LiAqLwotCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX2EyKTsKLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIFdhaXQgZm9yIGNvbGxlY3RpdmUgYGBsYXN0JycgY291bnRlciB0byByZWFjaCB6ZXJvLAotICogdGhlbiB0ZWxsIGFsbCBDUFVzIHRvIGRvIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgbWVtb3J5IGJhcnJpZXIuCi0gKi8KLQotc3RhdGljIGludAotcmN1X3RyeV9mbGlwX3dhaXR6ZXJvKHZvaWQpCi17Ci0JaW50IGNwdTsKLQlpbnQgbGFzdGlkeCA9ICEocmN1X2N0cmxibGsuY29tcGxldGVkICYgMHgxKTsKLQlpbnQgc3VtID0gMDsKLQotCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgc3VtIG9mIHRoZSAibGFzdCIgY291bnRlcnMgaXMgemVyby4gKi8KLQotCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX3oxKTsKLQlmb3JfZWFjaF9jcHUoY3B1LCB0b19jcHVtYXNrKHJjdV9jcHVfb25saW5lX21hcCkpCi0JCXN1bSArPSBSQ1VfREFUQV9DUFUoY3B1KS0+cmN1X2ZsaXBjdHJbbGFzdGlkeF07Ci0JaWYgKHN1bSAhPSAwKSB7Ci0JCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX3plMSk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogVGhpcyBlbnN1cmVzIHRoYXQgdGhlIG90aGVyIENQVXMgc2VlIHRoZSBjYWxsIGZvcgotCSAqIG1lbW9yeSBiYXJyaWVycyAtYWZ0ZXItIHRoZSBzdW0gdG8gemVybyBoYXMgYmVlbgotCSAqIGRldGVjdGVkIGhlcmUKLQkgKi8KLQlzbXBfbWIoKTsgIC8qICBeXl5eXl5eXl5eXl4gKi8KLQotCS8qIENhbGwgZm9yIGEgbWVtb3J5IGJhcnJpZXIgZnJvbSBlYWNoIENQVS4gKi8KLQlmb3JfZWFjaF9jcHUoY3B1LCB0b19jcHVtYXNrKHJjdV9jcHVfb25saW5lX21hcCkpIHsKLQkJcGVyX2NwdShyY3VfbWJfZmxhZywgY3B1KSA9IHJjdV9tYl9uZWVkZWQ7Ci0JCWR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKGNwdSk7Ci0JfQotCi0JUkNVX1RSQUNFX01FKHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfejIpOwotCXJldHVybiAxOwotfQotCi0vKgotICogV2FpdCBmb3IgYWxsIENQVXMgdG8gZG8gdGhlaXIgZW5kLW9mLWdyYWNlLXBlcmlvZCBtZW1vcnkgYmFycmllci4KLSAqIFJldHVybiAwIG9uY2UgYWxsIENQVXMgaGF2ZSBkb25lIHNvLgotICovCi0KLXN0YXRpYyBpbnQKLXJjdV90cnlfZmxpcF93YWl0bWIodm9pZCkKLXsKLQlpbnQgY3B1OwotCi0JUkNVX1RSQUNFX01FKHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfbTEpOwotCWZvcl9lYWNoX2NwdShjcHUsIHRvX2NwdW1hc2socmN1X2NwdV9vbmxpbmVfbWFwKSkKLQkJaWYgKHJjdV90cnlfZmxpcF93YWl0bWJfbmVlZGVkKGNwdSkgJiYKLQkJICAgIHBlcl9jcHUocmN1X21iX2ZsYWcsIGNwdSkgIT0gcmN1X21iX2RvbmUpIHsKLQkJCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX21lMSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0Jc21wX21iKCk7IC8qIEVuc3VyZSB0aGF0IHRoZSBhYm92ZSBjaGVja3MgcHJlY2VkZSBhbnkgZm9sbG93aW5nIGZsaXAuICovCi0JUkNVX1RSQUNFX01FKHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfbTIpOwotCXJldHVybiAxOwotfQotCi0vKgotICogQXR0ZW1wdCBhIHNpbmdsZSBmbGlwIG9mIHRoZSBjb3VudGVycy4gIFJlbWVtYmVyLCBhIHNpbmdsZSBmbGlwIGRvZXMKLSAqIC1ub3QtIGNvbnN0aXR1dGUgYSBncmFjZSBwZXJpb2QuICBJbnN0ZWFkLCB0aGUgaW50ZXJ2YWwgYmV0d2VlbgotICogYXQgbGVhc3QgR1BfU1RBR0VTIGNvbnNlY3V0aXZlIGZsaXBzIGlzIGEgZ3JhY2UgcGVyaW9kLgotICoKLSAqIElmIGFueW9uZSBpcyBudXRzIGVub3VnaCB0byBydW4gdGhpcyBDT05GSUdfUFJFRU1QVF9SQ1UgaW1wbGVtZW50YXRpb24KLSAqIG9uIGEgbGFyZ2UgU01QLCB0aGV5IG1pZ2h0IHdhbnQgdG8gdXNlIGEgaGllcmFyY2hpY2FsIG9yZ2FuaXphdGlvbiBvZgotICogdGhlIHBlci1DUFUtY291bnRlciBwYWlycy4KLSAqLwotc3RhdGljIHZvaWQgcmN1X3RyeV9mbGlwKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwXzEpOwotCWlmICh1bmxpa2VseSghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnJjdV9jdHJsYmxrLmZsaXBsb2NrLCBmbGFncykpKSB7Ci0JCVJDVV9UUkFDRV9NRShyY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX2UxKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogVGFrZSB0aGUgbmV4dCB0cmFuc2l0aW9uKHMpIHRocm91Z2ggdGhlIFJDVSBncmFjZS1wZXJpb2QKLQkgKiBmbGlwLWNvdW50ZXIgc3RhdGUgbWFjaGluZS4KLQkgKi8KLQotCXN3aXRjaCAocmN1X2N0cmxibGsucmN1X3RyeV9mbGlwX3N0YXRlKSB7Ci0JY2FzZSByY3VfdHJ5X2ZsaXBfaWRsZV9zdGF0ZToKLQkJaWYgKHJjdV90cnlfZmxpcF9pZGxlKCkpCi0JCQlyY3VfY3RybGJsay5yY3VfdHJ5X2ZsaXBfc3RhdGUgPQotCQkJCXJjdV90cnlfZmxpcF93YWl0YWNrX3N0YXRlOwotCQlicmVhazsKLQljYXNlIHJjdV90cnlfZmxpcF93YWl0YWNrX3N0YXRlOgotCQlpZiAocmN1X3RyeV9mbGlwX3dhaXRhY2soKSkKLQkJCXJjdV9jdHJsYmxrLnJjdV90cnlfZmxpcF9zdGF0ZSA9Ci0JCQkJcmN1X3RyeV9mbGlwX3dhaXR6ZXJvX3N0YXRlOwotCQlicmVhazsKLQljYXNlIHJjdV90cnlfZmxpcF93YWl0emVyb19zdGF0ZToKLQkJaWYgKHJjdV90cnlfZmxpcF93YWl0emVybygpKQotCQkJcmN1X2N0cmxibGsucmN1X3RyeV9mbGlwX3N0YXRlID0KLQkJCQlyY3VfdHJ5X2ZsaXBfd2FpdG1iX3N0YXRlOwotCQlicmVhazsKLQljYXNlIHJjdV90cnlfZmxpcF93YWl0bWJfc3RhdGU6Ci0JCWlmIChyY3VfdHJ5X2ZsaXBfd2FpdG1iKCkpCi0JCQlyY3VfY3RybGJsay5yY3VfdHJ5X2ZsaXBfc3RhdGUgPQotCQkJCXJjdV90cnlfZmxpcF9pZGxlX3N0YXRlOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyY3VfY3RybGJsay5mbGlwbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgQ1BVIG5lZWRzIHRvIGRvIGEgbWVtb3J5IGJhcnJpZXIgaW4gb3JkZXIgdG8KLSAqIGVuc3VyZSB0aGF0IGFueSBwcmlvciBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGhhdmUgY29tbWl0dGVkCi0gKiB0aGVpciBjb3VudGVyIG1hbmlwdWxhdGlvbnMgYW5kIGNyaXRpY2FsLXNlY3Rpb24gbWVtb3J5IHJlZmVyZW5jZXMKLSAqIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGdyYWNlIHBlcmlvZCB0byBiZSBjb21wbGV0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHJjdV9jaGVja19tYihpbnQgY3B1KQotewotCWlmIChwZXJfY3B1KHJjdV9tYl9mbGFnLCBjcHUpID09IHJjdV9tYl9uZWVkZWQpIHsKLQkJc21wX21iKCk7ICAvKiBFbnN1cmUgUkNVIHJlYWQtc2lkZSBhY2Nlc3NlcyBhcmUgdmlzaWJsZS4gKi8KLQkJcGVyX2NwdShyY3VfbWJfZmxhZywgY3B1KSA9IHJjdV9tYl9kb25lOwotCX0KLX0KLQotdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHJjdV9kYXRhICpyZHAgPSBSQ1VfREFUQV9DUFUoY3B1KTsKLQotCS8qCi0JICogSWYgdGhpcyBDUFUgdG9vayBpdHMgaW50ZXJydXB0IGZyb20gdXNlciBtb2RlIG9yIGZyb20gdGhlCi0JICogaWRsZSBsb29wLCBhbmQgdGhpcyBpcyBub3QgYSBuZXN0ZWQgaW50ZXJydXB0LCB0aGVuCi0JICogdGhpcyBDUFUgaGFzIHRvIGhhdmUgZXhpdGVkIGFsbCBwcmlvciBwcmVlcHQtZGlzYWJsZQotCSAqIHNlY3Rpb25zIG9mIGNvZGUuICBTbyBpbmNyZW1lbnQgdGhlIGNvdW50ZXIgdG8gbm90ZSB0aGlzLgotCSAqCi0JICogVGhlIG1lbW9yeSBiYXJyaWVyIGlzIG5lZWRlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUKLQkgKiB3cml0ZXMgZnJvbSBhIHByZWVtcHQtZGlzYWJsZSBzZWN0aW9uIG9mIGNvZGUgZ2V0IHJlb3JkZXJlZAotCSAqIGludG8gc2NoZWR1bGUoKSBieSB0aGlzIENQVSdzIHdyaXRlIGJ1ZmZlci4gIFNvIHRoZSBtZW1vcnkKLQkgKiBiYXJyaWVyIG1ha2VzIHN1cmUgdGhhdCB0aGUgcmN1X3FzY3RyX2luYygpIGlzIHNlZW4gYnkgb3RoZXIKLQkgKiBDUFVzIHRvIGhhcHBlbiBhZnRlciBhbnkgc3VjaCB3cml0ZS4KLQkgKi8KLQotCWlmICh1c2VyIHx8Ci0JICAgIChpZGxlX2NwdShjcHUpICYmICFpbl9zb2Z0aXJxKCkgJiYKLQkgICAgIGhhcmRpcnFfY291bnQoKSA8PSAoMSA8PCBIQVJESVJRX1NISUZUKSkpIHsKLQkJc21wX21iKCk7CS8qIEd1YXJkIGFnYWluc3QgYWdncmVzc2l2ZSBzY2hlZHVsZSgpLiAqLwotCSAgICAgCXJjdV9xc2N0cl9pbmMoY3B1KTsKLQl9Ci0KLQlyY3VfY2hlY2tfbWIoY3B1KTsKLQlpZiAocmN1X2N0cmxibGsuY29tcGxldGVkID09IHJkcC0+Y29tcGxldGVkKQotCQlyY3VfdHJ5X2ZsaXAoKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcmRwLT5sb2NrLCBmbGFncyk7Ci0JUkNVX1RSQUNFX1JEUChyY3VwcmVlbXB0X3RyYWNlX2NoZWNrX2NhbGxiYWNrcywgcmRwKTsKLQlfX3JjdV9hZHZhbmNlX2NhbGxiYWNrcyhyZHApOwotCWlmIChyZHAtPmRvbmVsaXN0ID09IE5VTEwpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRwLT5sb2NrLCBmbGFncyk7Ci0JfSBlbHNlIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRwLT5sb2NrLCBmbGFncyk7Ci0JCXJhaXNlX3NvZnRpcnEoUkNVX1NPRlRJUlEpOwotCX0KLX0KLQotLyoKLSAqIE5lZWRlZCBieSBkeW50aWNrcywgdG8gbWFrZSBzdXJlIGFsbCBSQ1UgcHJvY2Vzc2luZyBoYXMgZmluaXNoZWQKLSAqIHdoZW4gd2UgZ28gaWRsZToKLSAqLwotdm9pZCByY3VfYWR2YW5jZV9jYWxsYmFja3MoaW50IGNwdSwgaW50IHVzZXIpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IFJDVV9EQVRBX0NQVShjcHUpOwotCi0JaWYgKHJjdV9jdHJsYmxrLmNvbXBsZXRlZCA9PSByZHAtPmNvbXBsZXRlZCkgewotCQlyY3VfdHJ5X2ZsaXAoKTsKLQkJaWYgKHJjdV9jdHJsYmxrLmNvbXBsZXRlZCA9PSByZHAtPmNvbXBsZXRlZCkKLQkJCXJldHVybjsKLQl9Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJkcC0+bG9jaywgZmxhZ3MpOwotCVJDVV9UUkFDRV9SRFAocmN1cHJlZW1wdF90cmFjZV9jaGVja19jYWxsYmFja3MsIHJkcCk7Ci0JX19yY3VfYWR2YW5jZV9jYWxsYmFja3MocmRwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHAtPmxvY2ssIGZsYWdzKTsKLX0KLQotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotI2RlZmluZSByY3Vfb2ZmbGluZV9jcHVfZW5xdWV1ZShzcmNsaXN0LCBzcmN0YWlsLCBkc3RsaXN0LCBkc3R0YWlsKSBkbyB7IFwKLQkJKmRzdHRhaWwgPSBzcmNsaXN0OyBcCi0JCWlmIChzcmNsaXN0ICE9IE5VTEwpIHsgXAotCQkJZHN0dGFpbCA9IHNyY3RhaWw7IFwKLQkJCXNyY2xpc3QgPSBOVUxMOyBcCi0JCQlzcmN0YWlsID0gJnNyY2xpc3Q7XAotCQl9IFwKLQl9IHdoaWxlICgwKQotCi12b2lkIHJjdV9vZmZsaW5lX2NwdShpbnQgY3B1KQotewotCWludCBpOwotCXN0cnVjdCByY3VfaGVhZCAqbGlzdCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IFJDVV9EQVRBX0NQVShjcHUpOwotCXN0cnVjdCByY3VfaGVhZCAqc2NoZWRsaXN0ID0gTlVMTDsKLQlzdHJ1Y3QgcmN1X2hlYWQgKipzY2hlZHRhaWwgPSAmc2NoZWRsaXN0OwotCXN0cnVjdCByY3VfaGVhZCAqKnRhaWwgPSAmbGlzdDsKLQotCS8qCi0JICogUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbmV3bHkgZGVhZCBDUFUsIHJldGFpbmluZyBvcmRlci4KLQkgKiBPdGhlcndpc2UgcmN1X2JhcnJpZXIoKSB3aWxsIGZhaWwKLQkgKi8KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZyZHAtPmxvY2ssIGZsYWdzKTsKLQlyY3Vfb2ZmbGluZV9jcHVfZW5xdWV1ZShyZHAtPmRvbmVsaXN0LCByZHAtPmRvbmV0YWlsLCBsaXN0LCB0YWlsKTsKLQlmb3IgKGkgPSBHUF9TVEFHRVMgLSAxOyBpID49IDA7IGktLSkKLQkJcmN1X29mZmxpbmVfY3B1X2VucXVldWUocmRwLT53YWl0bGlzdFtpXSwgcmRwLT53YWl0dGFpbFtpXSwKLQkJCQkJCWxpc3QsIHRhaWwpOwotCXJjdV9vZmZsaW5lX2NwdV9lbnF1ZXVlKHJkcC0+bmV4dGxpc3QsIHJkcC0+bmV4dHRhaWwsIGxpc3QsIHRhaWwpOwotCXJjdV9vZmZsaW5lX2NwdV9lbnF1ZXVlKHJkcC0+d2FpdHNjaGVkbGlzdCwgcmRwLT53YWl0c2NoZWR0YWlsLAotCQkJCXNjaGVkbGlzdCwgc2NoZWR0YWlsKTsKLQlyY3Vfb2ZmbGluZV9jcHVfZW5xdWV1ZShyZHAtPm5leHRzY2hlZGxpc3QsIHJkcC0+bmV4dHNjaGVkdGFpbCwKLQkJCQlzY2hlZGxpc3QsIHNjaGVkdGFpbCk7Ci0JcmRwLT5yY3Vfc2NoZWRfc2xlZXBpbmcgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkcC0+bG9jaywgZmxhZ3MpOwotCXJkcC0+d2FpdGxpc3Rjb3VudCA9IDA7Ci0KLQkvKiBEaXNlbmdhZ2UgdGhlIG5ld2x5IGRlYWQgQ1BVIGZyb20gdGhlIGdyYWNlLXBlcmlvZCBjb21wdXRhdGlvbi4gKi8KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZyY3VfY3RybGJsay5mbGlwbG9jaywgZmxhZ3MpOwotCXJjdV9jaGVja19tYihjcHUpOwotCWlmIChwZXJfY3B1KHJjdV9mbGlwX2ZsYWcsIGNwdSkgPT0gcmN1X2ZsaXBwZWQpIHsKLQkJc21wX21iKCk7ICAvKiBTdWJzZXF1ZW50IGNvdW50ZXIgYWNjZXNzZXMgbXVzdCBzZWUgbmV3IHZhbHVlICovCi0JCXBlcl9jcHUocmN1X2ZsaXBfZmxhZywgY3B1KSA9IHJjdV9mbGlwX3NlZW47Ci0JCXNtcF9tYigpOyAgLyogU3Vic2VxdWVudCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zICovCi0JCQkgICAvKiAgc2VlbiAtYWZ0ZXItIGFja25vd2xlZGdlbWVudC4gKi8KLQl9Ci0KLQlSQ1VfREFUQV9NRSgpLT5yY3VfZmxpcGN0clswXSArPSBSQ1VfREFUQV9DUFUoY3B1KS0+cmN1X2ZsaXBjdHJbMF07Ci0JUkNVX0RBVEFfTUUoKS0+cmN1X2ZsaXBjdHJbMV0gKz0gUkNVX0RBVEFfQ1BVKGNwdSktPnJjdV9mbGlwY3RyWzFdOwotCi0JUkNVX0RBVEFfQ1BVKGNwdSktPnJjdV9mbGlwY3RyWzBdID0gMDsKLQlSQ1VfREFUQV9DUFUoY3B1KS0+cmN1X2ZsaXBjdHJbMV0gPSAwOwotCi0JY3B1bWFza19jbGVhcl9jcHUoY3B1LCB0b19jcHVtYXNrKHJjdV9jcHVfb25saW5lX21hcCkpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmN1X2N0cmxibGsuZmxpcGxvY2ssIGZsYWdzKTsKLQotCS8qCi0JICogUGxhY2UgdGhlIHJlbW92ZWQgY2FsbGJhY2tzIG9uIHRoZSBjdXJyZW50IENQVSdzIHF1ZXVlLgotCSAqIE1ha2UgdGhlbSBhbGwgc3RhcnQgYSBuZXcgZ3JhY2UgcGVyaW9kOiBzaW1wbGUgYXBwcm9hY2gsCi0JICogaW4gdGhlb3J5IGNvdWxkIHN0YXJ2ZSBhIGdpdmVuIHNldCBvZiBjYWxsYmFja3MsIGJ1dAotCSAqIHlvdSB3b3VsZCBuZWVkIHRvIGJlIGRvaW5nIHNvbWUgc2VyaW91cyBDUFUgaG90cGx1Z2dpbmcKLQkgKiB0byBtYWtlIHRoaXMgaGFwcGVuLiAgSWYgdGhpcyBiZWNvbWVzIGEgcHJvYmxlbSwgYWRkaW5nCi0JICogYSBzeW5jaHJvbml6ZV9yY3UoKSB0byB0aGUgaG90cGx1ZyBwYXRoIHdvdWxkIGJlIGEgc2ltcGxlCi0JICogZml4LgotCSAqLwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyAgLyogZGlzYWJsZSBwcmVlbXB0IHRpbGwgd2Uga25vdyB3aGF0IGxvY2suICovCi0JcmRwID0gUkNVX0RBVEFfTUUoKTsKLQlzcGluX2xvY2soJnJkcC0+bG9jayk7Ci0JKnJkcC0+bmV4dHRhaWwgPSBsaXN0OwotCWlmIChsaXN0KQotCQlyZHAtPm5leHR0YWlsID0gdGFpbDsKLQkqcmRwLT5uZXh0c2NoZWR0YWlsID0gc2NoZWRsaXN0OwotCWlmIChzY2hlZGxpc3QpCi0JCXJkcC0+bmV4dHNjaGVkdGFpbCA9IHNjaGVkdGFpbDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHAtPmxvY2ssIGZsYWdzKTsKLX0KLQotI2Vsc2UgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwotCi12b2lkIHJjdV9vZmZsaW5lX2NwdShpbnQgY3B1KQotewotfQotCi0jZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwotCi12b2lkIF9fY3B1aW5pdCByY3Vfb25saW5lX2NwdShpbnQgY3B1KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHJjdV9kYXRhICpyZHA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcmN1X2N0cmxibGsuZmxpcGxvY2ssIGZsYWdzKTsKLQljcHVtYXNrX3NldF9jcHUoY3B1LCB0b19jcHVtYXNrKHJjdV9jcHVfb25saW5lX21hcCkpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjdV9jdHJsYmxrLmZsaXBsb2NrLCBmbGFncyk7Ci0KLQkvKgotCSAqIFRoZSByY3Vfc2NoZWQgZ3JhY2UtcGVyaW9kIHByb2Nlc3NpbmcgbWlnaHQgaGF2ZSBieXBhc3NlZAotCSAqIHRoaXMgQ1BVLCBnaXZlbiB0aGF0IGl0IHdhcyBub3QgaW4gdGhlIHJjdV9jcHVfb25saW5lX21hcAotCSAqIHdoZW4gdGhlIGdyYWNlLXBlcmlvZCBzY2FuIHN0YXJ0ZWQuICBUaGlzIG1lYW5zIHRoYXQgdGhlCi0JICogZ3JhY2UtcGVyaW9kIHRhc2sgbWlnaHQgc2xlZXAuICBTbyBtYWtlIHN1cmUgdGhhdCBpZiB0aGlzCi0JICogc2hvdWxkIGhhcHBlbiwgdGhlIGZpcnN0IGNhbGxiYWNrIHBvc3RlZCB0byB0aGlzIENQVSB3aWxsCi0JICogd2FrZSB1cCB0aGUgZ3JhY2UtcGVyaW9kIHRhc2sgaWYgbmVlZCBiZS4KLQkgKi8KLQotCXJkcCA9IFJDVV9EQVRBX0NQVShjcHUpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZyZHAtPmxvY2ssIGZsYWdzKTsKLQlyZHAtPnJjdV9zY2hlZF9zbGVlcGluZyA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRwLT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyhzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKnVudXNlZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCByY3VfaGVhZCAqbmV4dCwgKmxpc3Q7Ci0Jc3RydWN0IHJjdV9kYXRhICpyZHA7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcmRwID0gUkNVX0RBVEFfTUUoKTsKLQlzcGluX2xvY2soJnJkcC0+bG9jayk7Ci0JbGlzdCA9IHJkcC0+ZG9uZWxpc3Q7Ci0JaWYgKGxpc3QgPT0gTlVMTCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHAtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQlyZHAtPmRvbmVsaXN0ID0gTlVMTDsKLQlyZHAtPmRvbmV0YWlsID0gJnJkcC0+ZG9uZWxpc3Q7Ci0JUkNVX1RSQUNFX1JEUChyY3VwcmVlbXB0X3RyYWNlX2RvbmVfcmVtb3ZlLCByZHApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkcC0+bG9jaywgZmxhZ3MpOwotCXdoaWxlIChsaXN0KSB7Ci0JCW5leHQgPSBsaXN0LT5uZXh0OwotCQlsaXN0LT5mdW5jKGxpc3QpOwotCQlsaXN0ID0gbmV4dDsKLQkJUkNVX1RSQUNFX01FKHJjdXByZWVtcHRfdHJhY2VfaW52b2tlKTsKLQl9Ci19Ci0KLXZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHJjdV9kYXRhICpyZHA7Ci0KLQloZWFkLT5mdW5jID0gZnVuYzsKLQloZWFkLT5uZXh0ID0gTlVMTDsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcmRwID0gUkNVX0RBVEFfTUUoKTsKLQlzcGluX2xvY2soJnJkcC0+bG9jayk7Ci0JX19yY3VfYWR2YW5jZV9jYWxsYmFja3MocmRwKTsKLQkqcmRwLT5uZXh0dGFpbCA9IGhlYWQ7Ci0JcmRwLT5uZXh0dGFpbCA9ICZoZWFkLT5uZXh0OwotCVJDVV9UUkFDRV9SRFAocmN1cHJlZW1wdF90cmFjZV9uZXh0X2FkZCwgcmRwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHAtPmxvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTsKLQotdm9pZCBjYWxsX3JjdV9zY2hlZChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKLQlpbnQgd2FrZV9ncCA9IDA7Ci0KLQloZWFkLT5mdW5jID0gZnVuYzsKLQloZWFkLT5uZXh0ID0gTlVMTDsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcmRwID0gUkNVX0RBVEFfTUUoKTsKLQlzcGluX2xvY2soJnJkcC0+bG9jayk7Ci0JKnJkcC0+bmV4dHNjaGVkdGFpbCA9IGhlYWQ7Ci0JcmRwLT5uZXh0c2NoZWR0YWlsID0gJmhlYWQtPm5leHQ7Ci0JaWYgKHJkcC0+cmN1X3NjaGVkX3NsZWVwaW5nKSB7Ci0KLQkJLyogR3JhY2UtcGVyaW9kIHByb2Nlc3NpbmcgbWlnaHQgYmUgc2xlZXBpbmcuLi4gKi8KLQotCQlyZHAtPnJjdV9zY2hlZF9zbGVlcGluZyA9IDA7Ci0JCXdha2VfZ3AgPSAxOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHAtPmxvY2ssIGZsYWdzKTsKLQlpZiAod2FrZV9ncCkgewotCi0JCS8qIFdha2UgdXAgZ3JhY2UtcGVyaW9kIHByb2Nlc3NpbmcsIHVubGVzcyBzb21lb25lIGJlYXQgdXMuICovCi0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJjdV9jdHJsYmxrLnNjaGVkbG9jaywgZmxhZ3MpOwotCQlpZiAocmN1X2N0cmxibGsuc2NoZWRfc2xlZXAgIT0gcmN1X3NjaGVkX3NsZWVwaW5nKQotCQkJd2FrZV9ncCA9IDA7Ci0JCXJjdV9jdHJsYmxrLnNjaGVkX3NsZWVwID0gcmN1X3NjaGVkX25vdF9zbGVlcGluZzsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmN1X2N0cmxibGsuc2NoZWRsb2NrLCBmbGFncyk7Ci0JCWlmICh3YWtlX2dwKQotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZyY3VfY3RybGJsay5zY2hlZF93cSk7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3Vfc2NoZWQpOwotCi0vKgotICogV2FpdCB1bnRpbCBhbGwgY3VycmVudGx5IHJ1bm5pbmcgcHJlZW1wdF9kaXNhYmxlKCkgY29kZSBzZWdtZW50cwotICogKGluY2x1ZGluZyBoYXJkd2FyZS1pcnEtZGlzYWJsZSBzZWdtZW50cykgY29tcGxldGUuICBOb3RlIHRoYXQKLSAqIGluIC1ydCB0aGlzIGRvZXMgLW5vdC0gbmVjZXNzYXJpbHkgcmVzdWx0IGluIGFsbCBjdXJyZW50bHkgZXhlY3V0aW5nCi0gKiBpbnRlcnJ1cHQgLWhhbmRsZXJzLSBoYXZpbmcgY29tcGxldGVkLgotICovCi12b2lkIF9fc3luY2hyb25pemVfc2NoZWQodm9pZCkKLXsKLQlzdHJ1Y3QgcmN1X3N5bmNocm9uaXplIHJjdTsKLQotCWlmIChudW1fb25saW5lX2NwdXMoKSA9PSAxKQotCQlyZXR1cm47ICAvKiBibG9ja2luZyBpcyBncCBpZiBvbmx5IG9uZSBDUFUhICovCi0KLQlpbml0X2NvbXBsZXRpb24oJnJjdS5jb21wbGV0aW9uKTsKLQkvKiBXaWxsIHdha2UgbWUgYWZ0ZXIgUkNVIGZpbmlzaGVkLiAqLwotCWNhbGxfcmN1X3NjaGVkKCZyY3UuaGVhZCwgd2FrZW1lX2FmdGVyX3JjdSk7Ci0JLyogV2FpdCBmb3IgaXQuICovCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmcmN1LmNvbXBsZXRpb24pOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoX19zeW5jaHJvbml6ZV9zY2hlZCk7Ci0KLS8qCi0gKiBrdGhyZWFkIGZ1bmN0aW9uIHRoYXQgbWFuYWdlcyBjYWxsX3JjdV9zY2hlZCBncmFjZSBwZXJpb2RzLgotICovCi1zdGF0aWMgaW50IHJjdV9zY2hlZF9ncmFjZV9wZXJpb2Qodm9pZCAqYXJnKQotewotCWludCBjb3VsZHNsZWVwOwkJLyogbWlnaHQgc2xlZXAgYWZ0ZXIgY3VycmVudCBwYXNzLiAqLwotCWludCBjb3VsZHNsZWVwbmV4dCA9IDA7IC8qIG1pZ2h0IHNsZWVwIGFmdGVyIG5leHQgcGFzcy4gKi8KLQlpbnQgY3B1OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHJjdV9kYXRhICpyZHA7Ci0JaW50IHJldDsKLQotCS8qCi0JICogRWFjaCBwYXNzIHRocm91Z2ggdGhlIGZvbGxvd2luZyBsb29wIGhhbmRsZXMgb25lCi0JICogcmN1X3NjaGVkIGdyYWNlIHBlcmlvZCBjeWNsZS4KLQkgKi8KLQlkbyB7Ci0JCS8qIFNhdmUgZWFjaCBDUFUncyBjdXJyZW50IHN0YXRlLiAqLwotCi0JCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCQlkeW50aWNrX3NhdmVfcHJvZ3Jlc3NfY291bnRlcl9zY2hlZChjcHUpOwotCQkJc2F2ZV9xc2N0cl9zY2hlZChjcHUpOwotCQl9Ci0KLQkJLyoKLQkJICogU2xlZXAgZm9yIGFib3V0IGFuIFJDVSBncmFjZS1wZXJpb2QncyB3b3J0aCB0bwotCQkgKiBhbGxvdyBiZXR0ZXIgYmF0Y2hpbmcgYW5kIHRvIGNvbnN1bWUgbGVzcyBDUFUuCi0JCSAqLwotCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoUkNVX1NDSEVEX0JBVENIX1RJTUUpOwotCi0JCS8qCi0JCSAqIElmIHRoZXJlIHdhcyBub3RoaW5nIHRvIGRvIGxhc3QgdGltZSwgcHJlcGFyZSB0bwotCQkgKiBzbGVlcCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZCBjeWNsZS4KLQkJICovCi0JCWNvdWxkc2xlZXAgPSBjb3VsZHNsZWVwbmV4dDsKLQkJY291bGRzbGVlcG5leHQgPSAxOwotCQlpZiAoY291bGRzbGVlcCkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJjdV9jdHJsYmxrLnNjaGVkbG9jaywgZmxhZ3MpOwotCQkJcmN1X2N0cmxibGsuc2NoZWRfc2xlZXAgPSByY3Vfc2NoZWRfc2xlZXBfcHJlcDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjdV9jdHJsYmxrLnNjaGVkbG9jaywgZmxhZ3MpOwotCQl9Ci0KLQkJLyoKLQkJICogV2FpdCBvbiBlYWNoIENQVSBpbiB0dXJuIHRvIGhhdmUgZWl0aGVyIHZpc2l0ZWQKLQkJICogYSBxdWllc2NlbnQgc3RhdGUgb3IgYmVlbiBpbiBkeW50aWNrcy1pZGxlIG1vZGUuCi0JCSAqLwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQkJd2hpbGUgKHJjdV9xc2N0cl9pbmNfbmVlZGVkKGNwdSkgJiYKLQkJCSAgICAgICByY3VfcXNjdHJfaW5jX25lZWRlZF9keW50aWNrKGNwdSkpIHsKLQkJCQkvKiByZXNjaGVkX2NwdShjcHUpOyBAQEAgKi8KLQkJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMSk7Ci0JCQl9Ci0JCX0KLQotCQkvKiBBZHZhbmNlIGNhbGxiYWNrcyBmb3IgZWFjaCBDUFUuICAqLwotCi0JCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0KLQkJCXJkcCA9IFJDVV9EQVRBX0NQVShjcHUpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJkcC0+bG9jaywgZmxhZ3MpOwotCi0JCQkvKgotCQkJICogV2UgYXJlIHJ1bm5pbmcgb24gdGhpcyBDUFUgaXJxLWRpc2FibGVkLCBzbyBubwotCQkJICogQ1BVIGNhbiBnbyBvZmZsaW5lIHVudGlsIHdlIHJlLWVuYWJsZSBpcnFzLgotCQkJICogVGhlIGN1cnJlbnQgQ1BVIG1pZ2h0IGhhdmUgYWxyZWFkeSBnb25lCi0JCQkgKiBvZmZsaW5lIChiZXR3ZWVuIHRoZSBmb3JfZWFjaF9vZmZsaW5lX2NwdSBhbmQKLQkJCSAqIHRoZSBzcGluX2xvY2tfaXJxc2F2ZSksIGJ1dCBpbiB0aGF0IGNhc2UgYWxsIGl0cwotCQkJICogY2FsbGJhY2sgbGlzdHMgd2lsbCBiZSBlbXB0eSwgc28gbm8gaGFybSBkb25lLgotCQkJICoKLQkJCSAqIEFkdmFuY2UgdGhlIGNhbGxiYWNrcyEgIFdlIHNoYXJlIG5vcm1hbCBSQ1UncwotCQkJICogZG9uZWxpc3QsIHNpbmNlIGNhbGxiYWNrcyBhcmUgaW52b2tlZCB0aGUKLQkJCSAqIHNhbWUgd2F5IGluIGVpdGhlciBjYXNlLgotCQkJICovCi0JCQlpZiAocmRwLT53YWl0c2NoZWRsaXN0ICE9IE5VTEwpIHsKLQkJCQkqcmRwLT5kb25ldGFpbCA9IHJkcC0+d2FpdHNjaGVkbGlzdDsKLQkJCQlyZHAtPmRvbmV0YWlsID0gcmRwLT53YWl0c2NoZWR0YWlsOwotCi0JCQkJLyoKLQkJCQkgKiBOZXh0IHJjdV9jaGVja19jYWxsYmFja3MoKSB3aWxsCi0JCQkJICogZG8gdGhlIHJlcXVpcmVkIHJhaXNlX3NvZnRpcnEoKS4KLQkJCQkgKi8KLQkJCX0KLQkJCWlmIChyZHAtPm5leHRzY2hlZGxpc3QgIT0gTlVMTCkgewotCQkJCXJkcC0+d2FpdHNjaGVkbGlzdCA9IHJkcC0+bmV4dHNjaGVkbGlzdDsKLQkJCQlyZHAtPndhaXRzY2hlZHRhaWwgPSByZHAtPm5leHRzY2hlZHRhaWw7Ci0JCQkJY291bGRzbGVlcCA9IDA7Ci0JCQkJY291bGRzbGVlcG5leHQgPSAwOwotCQkJfSBlbHNlIHsKLQkJCQlyZHAtPndhaXRzY2hlZGxpc3QgPSBOVUxMOwotCQkJCXJkcC0+d2FpdHNjaGVkdGFpbCA9ICZyZHAtPndhaXRzY2hlZGxpc3Q7Ci0JCQl9Ci0JCQlyZHAtPm5leHRzY2hlZGxpc3QgPSBOVUxMOwotCQkJcmRwLT5uZXh0c2NoZWR0YWlsID0gJnJkcC0+bmV4dHNjaGVkbGlzdDsKLQotCQkJLyogTWFyayBzbGVlcCBpbnRlbnRpb24uICovCi0KLQkJCXJkcC0+cmN1X3NjaGVkX3NsZWVwaW5nID0gY291bGRzbGVlcDsKLQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRwLT5sb2NrLCBmbGFncyk7Ci0JCX0KLQotCQkvKiBJZiB3ZSBzYXcgY2FsbGJhY2tzIG9uIHRoZSBsYXN0IHNjYW4sIGdvIGRlYWwgd2l0aCB0aGVtLiAqLwotCi0JCWlmICghY291bGRzbGVlcCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIEF0dGVtcHQgdG8gYmxvY2suLi4gKi8KLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmN1X2N0cmxibGsuc2NoZWRsb2NrLCBmbGFncyk7Ci0JCWlmIChyY3VfY3RybGJsay5zY2hlZF9zbGVlcCAhPSByY3Vfc2NoZWRfc2xlZXBfcHJlcCkgewotCi0JCQkvKgotCQkJICogU29tZW9uZSBwb3N0ZWQgYSBjYWxsYmFjayBhZnRlciB3ZSBzY2FubmVkLgotCQkJICogR28gdGFrZSBjYXJlIG9mIGl0LgotCQkJICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyY3VfY3RybGJsay5zY2hlZGxvY2ssIGZsYWdzKTsKLQkJCWNvdWxkc2xlZXBuZXh0ID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogQmxvY2sgdW50aWwgdGhlIG5leHQgcGVyc29uIHBvc3RzIGEgY2FsbGJhY2suICovCi0KLQkJcmN1X2N0cmxibGsuc2NoZWRfc2xlZXAgPSByY3Vfc2NoZWRfc2xlZXBpbmc7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJjdV9jdHJsYmxrLnNjaGVkbG9jaywgZmxhZ3MpOwotCQlyZXQgPSAwOyAvKiB1bnVzZWQgKi8KLQkJX193YWl0X2V2ZW50X2ludGVycnVwdGlibGUocmN1X2N0cmxibGsuc2NoZWRfd3EsCi0JCQlyY3VfY3RybGJsay5zY2hlZF9zbGVlcCAhPSByY3Vfc2NoZWRfc2xlZXBpbmcsCi0JCQlyZXQpOwotCi0JCWNvdWxkc2xlZXBuZXh0ID0gMDsKLQotCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwotCi0JcmV0dXJuICgwKTsKLX0KLQotLyoKLSAqIENoZWNrIHRvIHNlZSBpZiBhbnkgZnV0dXJlIFJDVS1yZWxhdGVkIHdvcmsgd2lsbCBuZWVkIHRvIGJlIGRvbmUKLSAqIGJ5IHRoZSBjdXJyZW50IENQVSwgZXZlbiBpZiBub25lIG5lZWQgYmUgZG9uZSBpbW1lZGlhdGVseSwgcmV0dXJuaW5nCi0gKiAxIGlmIHNvLiAgQXNzdW1lcyB0aGF0IG5vdGlmaWVycyB3b3VsZCB0YWtlIGNhcmUgb2YgaGFuZGxpbmcgYW55Ci0gKiBvdXRzdGFuZGluZyByZXF1ZXN0cyBmcm9tIHRoZSBSQ1UgY29yZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbjsgaXQgaXMgLW5vdC0KLSAqIGFuIGV4cG9ydGVkIG1lbWJlciBvZiB0aGUgUkNVIEFQSS4KLSAqLwotaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IFJDVV9EQVRBX0NQVShjcHUpOwotCi0JcmV0dXJuIChyZHAtPmRvbmVsaXN0ICE9IE5VTEwgfHwKLQkJISFyZHAtPndhaXRsaXN0Y291bnQgfHwKLQkJcmRwLT5uZXh0bGlzdCAhPSBOVUxMIHx8Ci0JCXJkcC0+bmV4dHNjaGVkbGlzdCAhPSBOVUxMIHx8Ci0JCXJkcC0+d2FpdHNjaGVkbGlzdCAhPSBOVUxMKTsKLX0KLQotaW50IHJjdV9wZW5kaW5nKGludCBjcHUpCi17Ci0Jc3RydWN0IHJjdV9kYXRhICpyZHAgPSBSQ1VfREFUQV9DUFUoY3B1KTsKLQotCS8qIFRoZSBDUFUgaGFzIGF0IGxlYXN0IG9uZSBjYWxsYmFjayBxdWV1ZWQgc29tZXdoZXJlLiAqLwotCi0JaWYgKHJkcC0+ZG9uZWxpc3QgIT0gTlVMTCB8fAotCSAgICAhIXJkcC0+d2FpdGxpc3Rjb3VudCB8fAotCSAgICByZHAtPm5leHRsaXN0ICE9IE5VTEwgfHwKLQkgICAgcmRwLT5uZXh0c2NoZWRsaXN0ICE9IE5VTEwgfHwKLQkgICAgcmRwLT53YWl0c2NoZWRsaXN0ICE9IE5VTEwpCi0JCXJldHVybiAxOwotCi0JLyogVGhlIFJDVSBjb3JlIG5lZWRzIGFuIGFja25vd2xlZGdlbWVudCBmcm9tIHRoaXMgQ1BVLiAqLwotCi0JaWYgKChwZXJfY3B1KHJjdV9mbGlwX2ZsYWcsIGNwdSkgPT0gcmN1X2ZsaXBwZWQpIHx8Ci0JICAgIChwZXJfY3B1KHJjdV9tYl9mbGFnLCBjcHUpID09IHJjdV9tYl9uZWVkZWQpKQotCQlyZXR1cm4gMTsKLQotCS8qIFRoaXMgQ1BVIGhhcyBmYWxsZW4gYmVoaW5kIHRoZSBnbG9iYWwgZ3JhY2UtcGVyaW9kIG51bWJlci4gKi8KLQotCWlmIChyZHAtPmNvbXBsZXRlZCAhPSByY3VfY3RybGJsay5jb21wbGV0ZWQpCi0JCXJldHVybiAxOwotCi0JLyogTm90aGluZyBuZWVkZWQgZnJvbSB0aGlzIENQVS4gKi8KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fY3B1aW5pdCByY3VfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCi0JCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCi17Ci0JbG9uZyBjcHUgPSAobG9uZyloY3B1OwotCi0Jc3dpdGNoIChhY3Rpb24pIHsKLQljYXNlIENQVV9VUF9QUkVQQVJFOgotCWNhc2UgQ1BVX1VQX1BSRVBBUkVfRlJPWkVOOgotCQlyY3Vfb25saW5lX2NwdShjcHUpOwotCQlicmVhazsKLQljYXNlIENQVV9VUF9DQU5DRUxFRDoKLQljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46Ci0JY2FzZSBDUFVfREVBRDoKLQljYXNlIENQVV9ERUFEX0ZST1pFTjoKLQkJcmN1X29mZmxpbmVfY3B1KGNwdSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gTk9USUZZX09LOwotfQotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgcmN1X25iID0gewotCS5ub3RpZmllcl9jYWxsID0gcmN1X2NwdV9ub3RpZnksCi19OwotCi12b2lkIF9faW5pdCBfX3JjdV9pbml0KHZvaWQpCi17Ci0JaW50IGNwdTsKLQlpbnQgaTsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKLQotCXByaW50ayhLRVJOX05PVElDRSAiUHJlZW1wdGlibGUgUkNVIGltcGxlbWVudGF0aW9uLlxuIik7Ci0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlyZHAgPSBSQ1VfREFUQV9DUFUoY3B1KTsKLQkJc3Bpbl9sb2NrX2luaXQoJnJkcC0+bG9jayk7Ci0JCXJkcC0+Y29tcGxldGVkID0gMDsKLQkJcmRwLT53YWl0bGlzdGNvdW50ID0gMDsKLQkJcmRwLT5uZXh0bGlzdCA9IE5VTEw7Ci0JCXJkcC0+bmV4dHRhaWwgPSAmcmRwLT5uZXh0bGlzdDsKLQkJZm9yIChpID0gMDsgaSA8IEdQX1NUQUdFUzsgaSsrKSB7Ci0JCQlyZHAtPndhaXRsaXN0W2ldID0gTlVMTDsKLQkJCXJkcC0+d2FpdHRhaWxbaV0gPSAmcmRwLT53YWl0bGlzdFtpXTsKLQkJfQotCQlyZHAtPmRvbmVsaXN0ID0gTlVMTDsKLQkJcmRwLT5kb25ldGFpbCA9ICZyZHAtPmRvbmVsaXN0OwotCQlyZHAtPnJjdV9mbGlwY3RyWzBdID0gMDsKLQkJcmRwLT5yY3VfZmxpcGN0clsxXSA9IDA7Ci0JCXJkcC0+bmV4dHNjaGVkbGlzdCA9IE5VTEw7Ci0JCXJkcC0+bmV4dHNjaGVkdGFpbCA9ICZyZHAtPm5leHRzY2hlZGxpc3Q7Ci0JCXJkcC0+d2FpdHNjaGVkbGlzdCA9IE5VTEw7Ci0JCXJkcC0+d2FpdHNjaGVkdGFpbCA9ICZyZHAtPndhaXRzY2hlZGxpc3Q7Ci0JCXJkcC0+cmN1X3NjaGVkX3NsZWVwaW5nID0gMDsKLQl9Ci0JcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZyY3VfbmIpOwotCi0JLyoKLQkgKiBXZSBkb24ndCBuZWVkIHByb3RlY3Rpb24gYWdhaW5zdCBDUFUtSG90cGx1ZyBoZXJlCi0JICogc2luY2UKLQkgKiBhKSBJZiBhIENQVSBjb21lcyBvbmxpbmUgd2hpbGUgd2UgYXJlIGl0ZXJhdGluZyBvdmVyIHRoZQotCSAqICAgIGNwdV9vbmxpbmVfbWFzayBiZWxvdywgd2Ugd291bGQgb25seSBlbmQgdXAgbWFraW5nIGEKLQkgKiAgICBkdXBsaWNhdGUgY2FsbCB0byByY3Vfb25saW5lX2NwdSgpIHdoaWNoIHNldHMgdGhlIGNvcnJlc3BvbmRpbmcKLQkgKiAgICBDUFUncyBtYXNrIGluIHRoZSByY3VfY3B1X29ubGluZV9tYXAuCi0JICoKLQkgKiBiKSBBIENQVSBjYW5ub3QgZ28gb2ZmbGluZSBhdCB0aGlzIHBvaW50IGluIHRpbWUgc2luY2UgdGhlIHVzZXIKLQkgKiAgICBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgc3lzZnMgaW50ZXJmYWNlLCBub3IgZG8gd2UKLQkgKiAgICBzdXNwZW5kIHRoZSBzeXN0ZW0uCi0JICovCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCXJjdV9jcHVfbm90aWZ5KCZyY3VfbmIsIENQVV9VUF9QUkVQQVJFLAkodm9pZCAqKShsb25nKSBjcHUpOwotCi0Jb3Blbl9zb2Z0aXJxKFJDVV9TT0ZUSVJRLCByY3VfcHJvY2Vzc19jYWxsYmFja3MpOwotfQotCi0vKgotICogTGF0ZS1ib290LXRpbWUgUkNVIGluaXRpYWxpemF0aW9uIHRoYXQgbXVzdCB3YWl0IHVudGlsIGFmdGVyIHNjaGVkdWxlcgotICogaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCi0gKi8KLXZvaWQgX19pbml0IHJjdV9pbml0X3NjaGVkKHZvaWQpCi17Ci0JcmN1X3NjaGVkX2dyYWNlX3BlcmlvZF90YXNrID0ga3RocmVhZF9ydW4ocmN1X3NjaGVkX2dyYWNlX3BlcmlvZCwKLQkJCQkJCSAgTlVMTCwKLQkJCQkJCSAgInJjdV9zY2hlZF9ncmFjZV9wZXJpb2QiKTsKLQlXQVJOX09OKElTX0VSUihyY3Vfc2NoZWRfZ3JhY2VfcGVyaW9kX3Rhc2spKTsKLX0KLQotI2lmZGVmIENPTkZJR19SQ1VfVFJBQ0UKLWxvbmcgKnJjdXByZWVtcHRfZmxpcGN0cihpbnQgY3B1KQotewotCXJldHVybiAmUkNVX0RBVEFfQ1BVKGNwdSktPnJjdV9mbGlwY3RyWzBdOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmN1cHJlZW1wdF9mbGlwY3RyKTsKLQotaW50IHJjdXByZWVtcHRfZmxpcF9mbGFnKGludCBjcHUpCi17Ci0JcmV0dXJuIHBlcl9jcHUocmN1X2ZsaXBfZmxhZywgY3B1KTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJjdXByZWVtcHRfZmxpcF9mbGFnKTsKLQotaW50IHJjdXByZWVtcHRfbWJfZmxhZyhpbnQgY3B1KQotewotCXJldHVybiBwZXJfY3B1KHJjdV9tYl9mbGFnLCBjcHUpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmN1cHJlZW1wdF9tYl9mbGFnKTsKLQotY2hhciAqcmN1cHJlZW1wdF90cnlfZmxpcF9zdGF0ZV9uYW1lKHZvaWQpCi17Ci0JcmV0dXJuIHJjdV90cnlfZmxpcF9zdGF0ZV9uYW1lc1tyY3VfY3RybGJsay5yY3VfdHJ5X2ZsaXBfc3RhdGVdOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmN1cHJlZW1wdF90cnlfZmxpcF9zdGF0ZV9uYW1lKTsKLQotc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnJjdXByZWVtcHRfdHJhY2VfY3B1KGludCBjcHUpCi17Ci0Jc3RydWN0IHJjdV9kYXRhICpyZHAgPSBSQ1VfREFUQV9DUFUoY3B1KTsKLQotCXJldHVybiAmcmRwLT50cmFjZTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJjdXByZWVtcHRfdHJhY2VfY3B1KTsKLQotI2VuZGlmIC8qICNpZmRlZiBSQ1VfVFJBQ0UgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3VwcmVlbXB0X3RyYWNlLmMgYi9rZXJuZWwvcmN1cHJlZW1wdF90cmFjZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzI2NjVjLi4wMDAwMDAwCi0tLSBhL2tlcm5lbC9yY3VwcmVlbXB0X3RyYWNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzQgKzAsMCBAQAotLyoKLSAqIFJlYWQtQ29weSBVcGRhdGUgdHJhY2luZyBmb3IgcmVhbHRpbWUgaW1wbGVtZW50YXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDYKLSAqCi0gKiBQYXBlcnM6ICBodHRwOi8vd3d3LnJkcm9wLmNvbS91c2Vycy9wYXVsbWNrL1JDVQotICoKLSAqIEZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBSZWFkLUNvcHkgVXBkYXRlIG1lY2hhbmlzbSBzZWUgLQotICogCQlEb2N1bWVudGF0aW9uL1JDVS8gKi50eHQKLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L3JjdXByZWVtcHRfdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgbXV0ZXggcmN1cHJlZW1wdF90cmFjZV9tdXRleDsKLXN0YXRpYyBjaGFyICpyY3VwcmVlbXB0X3RyYWNlX2J1ZjsKLSNkZWZpbmUgUkNVUFJFRU1QVF9UUkFDRV9CVUZfU0laRSA0MDk2Ci0KLXZvaWQgcmN1cHJlZW1wdF90cmFjZV9tb3ZlMmRvbmUoc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKQotewotCXRyYWNlLT5kb25lX2xlbmd0aCArPSB0cmFjZS0+d2FpdF9sZW5ndGg7Ci0JdHJhY2UtPmRvbmVfYWRkICs9IHRyYWNlLT53YWl0X2xlbmd0aDsKLQl0cmFjZS0+d2FpdF9sZW5ndGggPSAwOwotfQotdm9pZCByY3VwcmVlbXB0X3RyYWNlX21vdmUyd2FpdChzdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSAqdHJhY2UpCi17Ci0JdHJhY2UtPndhaXRfbGVuZ3RoICs9IHRyYWNlLT5uZXh0X2xlbmd0aDsKLQl0cmFjZS0+d2FpdF9hZGQgKz0gdHJhY2UtPm5leHRfbGVuZ3RoOwotCXRyYWNlLT5uZXh0X2xlbmd0aCA9IDA7Ci19Ci12b2lkIHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfMShzdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSAqdHJhY2UpCi17Ci0JYXRvbWljX2luYygmdHJhY2UtPnJjdV90cnlfZmxpcF8xKTsKLX0KLXZvaWQgcmN1cHJlZW1wdF90cmFjZV90cnlfZmxpcF9lMShzdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSAqdHJhY2UpCi17Ci0JYXRvbWljX2luYygmdHJhY2UtPnJjdV90cnlfZmxpcF9lMSk7Ci19Ci12b2lkIHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfaTEoc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKQotewotCXRyYWNlLT5yY3VfdHJ5X2ZsaXBfaTErKzsKLX0KLXZvaWQgcmN1cHJlZW1wdF90cmFjZV90cnlfZmxpcF9pZTEoc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKQotewotCXRyYWNlLT5yY3VfdHJ5X2ZsaXBfaWUxKys7Ci19Ci12b2lkIHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfZzEoc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKQotewotCXRyYWNlLT5yY3VfdHJ5X2ZsaXBfZzErKzsKLX0KLXZvaWQgcmN1cHJlZW1wdF90cmFjZV90cnlfZmxpcF9hMShzdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSAqdHJhY2UpCi17Ci0JdHJhY2UtPnJjdV90cnlfZmxpcF9hMSsrOwotfQotdm9pZCByY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX2FlMShzdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSAqdHJhY2UpCi17Ci0JdHJhY2UtPnJjdV90cnlfZmxpcF9hZTErKzsKLX0KLXZvaWQgcmN1cHJlZW1wdF90cmFjZV90cnlfZmxpcF9hMihzdHJ1Y3QgcmN1cHJlZW1wdF90cmFjZSAqdHJhY2UpCi17Ci0JdHJhY2UtPnJjdV90cnlfZmxpcF9hMisrOwotfQotdm9pZCByY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX3oxKHN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICp0cmFjZSkKLXsKLQl0cmFjZS0+cmN1X3RyeV9mbGlwX3oxKys7Ci19Ci12b2lkIHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfemUxKHN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICp0cmFjZSkKLXsKLQl0cmFjZS0+cmN1X3RyeV9mbGlwX3plMSsrOwotfQotdm9pZCByY3VwcmVlbXB0X3RyYWNlX3RyeV9mbGlwX3oyKHN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICp0cmFjZSkKLXsKLQl0cmFjZS0+cmN1X3RyeV9mbGlwX3oyKys7Ci19Ci12b2lkIHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfbTEoc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKQotewotCXRyYWNlLT5yY3VfdHJ5X2ZsaXBfbTErKzsKLX0KLXZvaWQgcmN1cHJlZW1wdF90cmFjZV90cnlfZmxpcF9tZTEoc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKQotewotCXRyYWNlLT5yY3VfdHJ5X2ZsaXBfbWUxKys7Ci19Ci12b2lkIHJjdXByZWVtcHRfdHJhY2VfdHJ5X2ZsaXBfbTIoc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKQotewotCXRyYWNlLT5yY3VfdHJ5X2ZsaXBfbTIrKzsKLX0KLXZvaWQgcmN1cHJlZW1wdF90cmFjZV9jaGVja19jYWxsYmFja3Moc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKQotewotCXRyYWNlLT5yY3VfY2hlY2tfY2FsbGJhY2tzKys7Ci19Ci12b2lkIHJjdXByZWVtcHRfdHJhY2VfZG9uZV9yZW1vdmUoc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKQotewotCXRyYWNlLT5kb25lX3JlbW92ZSArPSB0cmFjZS0+ZG9uZV9sZW5ndGg7Ci0JdHJhY2UtPmRvbmVfbGVuZ3RoID0gMDsKLX0KLXZvaWQgcmN1cHJlZW1wdF90cmFjZV9pbnZva2Uoc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnRyYWNlKQotewotCWF0b21pY19pbmMoJnRyYWNlLT5kb25lX2ludm9rZWQpOwotfQotdm9pZCByY3VwcmVlbXB0X3RyYWNlX25leHRfYWRkKHN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICp0cmFjZSkKLXsKLQl0cmFjZS0+bmV4dF9hZGQrKzsKLQl0cmFjZS0+bmV4dF9sZW5ndGgrKzsKLX0KLQotc3RhdGljIHZvaWQgcmN1cHJlZW1wdF90cmFjZV9zdW0oc3RydWN0IHJjdXByZWVtcHRfdHJhY2UgKnNwKQotewotCXN0cnVjdCByY3VwcmVlbXB0X3RyYWNlICpjcDsKLQlpbnQgY3B1OwotCi0JbWVtc2V0KHNwLCAwLCBzaXplb2YoKnNwKSk7Ci0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQljcCA9IHJjdXByZWVtcHRfdHJhY2VfY3B1KGNwdSk7Ci0JCXNwLT5uZXh0X2xlbmd0aCArPSBjcC0+bmV4dF9sZW5ndGg7Ci0JCXNwLT5uZXh0X2FkZCArPSBjcC0+bmV4dF9hZGQ7Ci0JCXNwLT53YWl0X2xlbmd0aCArPSBjcC0+d2FpdF9sZW5ndGg7Ci0JCXNwLT53YWl0X2FkZCArPSBjcC0+d2FpdF9hZGQ7Ci0JCXNwLT5kb25lX2xlbmd0aCArPSBjcC0+ZG9uZV9sZW5ndGg7Ci0JCXNwLT5kb25lX2FkZCArPSBjcC0+ZG9uZV9hZGQ7Ci0JCXNwLT5kb25lX3JlbW92ZSArPSBjcC0+ZG9uZV9yZW1vdmU7Ci0JCWF0b21pY19hZGQoYXRvbWljX3JlYWQoJmNwLT5kb25lX2ludm9rZWQpLCAmc3AtPmRvbmVfaW52b2tlZCk7Ci0JCXNwLT5yY3VfY2hlY2tfY2FsbGJhY2tzICs9IGNwLT5yY3VfY2hlY2tfY2FsbGJhY2tzOwotCQlhdG9taWNfYWRkKGF0b21pY19yZWFkKCZjcC0+cmN1X3RyeV9mbGlwXzEpLAotCQkJICAgJnNwLT5yY3VfdHJ5X2ZsaXBfMSk7Ci0JCWF0b21pY19hZGQoYXRvbWljX3JlYWQoJmNwLT5yY3VfdHJ5X2ZsaXBfZTEpLAotCQkJICAgJnNwLT5yY3VfdHJ5X2ZsaXBfZTEpOwotCQlzcC0+cmN1X3RyeV9mbGlwX2kxICs9IGNwLT5yY3VfdHJ5X2ZsaXBfaTE7Ci0JCXNwLT5yY3VfdHJ5X2ZsaXBfaWUxICs9IGNwLT5yY3VfdHJ5X2ZsaXBfaWUxOwotCQlzcC0+cmN1X3RyeV9mbGlwX2cxICs9IGNwLT5yY3VfdHJ5X2ZsaXBfZzE7Ci0JCXNwLT5yY3VfdHJ5X2ZsaXBfYTEgKz0gY3AtPnJjdV90cnlfZmxpcF9hMTsKLQkJc3AtPnJjdV90cnlfZmxpcF9hZTEgKz0gY3AtPnJjdV90cnlfZmxpcF9hZTE7Ci0JCXNwLT5yY3VfdHJ5X2ZsaXBfYTIgKz0gY3AtPnJjdV90cnlfZmxpcF9hMjsKLQkJc3AtPnJjdV90cnlfZmxpcF96MSArPSBjcC0+cmN1X3RyeV9mbGlwX3oxOwotCQlzcC0+cmN1X3RyeV9mbGlwX3plMSArPSBjcC0+cmN1X3RyeV9mbGlwX3plMTsKLQkJc3AtPnJjdV90cnlfZmxpcF96MiArPSBjcC0+cmN1X3RyeV9mbGlwX3oyOwotCQlzcC0+cmN1X3RyeV9mbGlwX20xICs9IGNwLT5yY3VfdHJ5X2ZsaXBfbTE7Ci0JCXNwLT5yY3VfdHJ5X2ZsaXBfbWUxICs9IGNwLT5yY3VfdHJ5X2ZsaXBfbWUxOwotCQlzcC0+cmN1X3RyeV9mbGlwX20yICs9IGNwLT5yY3VfdHJ5X2ZsaXBfbTI7Ci0JfQotfQotCi1zdGF0aWMgc3NpemVfdCByY3VzdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCByY3VwcmVlbXB0X3RyYWNlIHRyYWNlOwotCXNzaXplX3QgYmNvdW50OwotCWludCBjbnQgPSAwOwotCi0JcmN1cHJlZW1wdF90cmFjZV9zdW0oJnRyYWNlKTsKLQltdXRleF9sb2NrKCZyY3VwcmVlbXB0X3RyYWNlX211dGV4KTsKLQlzbnByaW50ZigmcmN1cHJlZW1wdF90cmFjZV9idWZbY250XSwgUkNVUFJFRU1QVF9UUkFDRV9CVUZfU0laRSAtIGNudCwKLQkJICJnZ3A9JWxkIHJjYz0lbGRcbiIsCi0JCSByY3VfYmF0Y2hlc19jb21wbGV0ZWQoKSwKLQkJIHRyYWNlLnJjdV9jaGVja19jYWxsYmFja3MpOwotCXNucHJpbnRmKCZyY3VwcmVlbXB0X3RyYWNlX2J1ZltjbnRdLCBSQ1VQUkVFTVBUX1RSQUNFX0JVRl9TSVpFIC0gY250LAotCQkgIm5hPSVsZCBubD0lbGQgd2E9JWxkIHdsPSVsZCBkYT0lbGQgZGw9JWxkIGRyPSVsZCBkaT0lZFxuIgotCQkgIjE9JWQgZTE9JWQgaTE9JWxkIGllMT0lbGQgZzE9JWxkIGExPSVsZCBhZTE9JWxkIGEyPSVsZFxuIgotCQkgInoxPSVsZCB6ZTE9JWxkIHoyPSVsZCBtMT0lbGQgbWUxPSVsZCBtMj0lbGRcbiIsCi0KLQkJIHRyYWNlLm5leHRfYWRkLCB0cmFjZS5uZXh0X2xlbmd0aCwKLQkJIHRyYWNlLndhaXRfYWRkLCB0cmFjZS53YWl0X2xlbmd0aCwKLQkJIHRyYWNlLmRvbmVfYWRkLCB0cmFjZS5kb25lX2xlbmd0aCwKLQkJIHRyYWNlLmRvbmVfcmVtb3ZlLCBhdG9taWNfcmVhZCgmdHJhY2UuZG9uZV9pbnZva2VkKSwKLQkJIGF0b21pY19yZWFkKCZ0cmFjZS5yY3VfdHJ5X2ZsaXBfMSksCi0JCSBhdG9taWNfcmVhZCgmdHJhY2UucmN1X3RyeV9mbGlwX2UxKSwKLQkJIHRyYWNlLnJjdV90cnlfZmxpcF9pMSwgdHJhY2UucmN1X3RyeV9mbGlwX2llMSwKLQkJIHRyYWNlLnJjdV90cnlfZmxpcF9nMSwKLQkJIHRyYWNlLnJjdV90cnlfZmxpcF9hMSwgdHJhY2UucmN1X3RyeV9mbGlwX2FlMSwKLQkJCSB0cmFjZS5yY3VfdHJ5X2ZsaXBfYTIsCi0JCSB0cmFjZS5yY3VfdHJ5X2ZsaXBfejEsIHRyYWNlLnJjdV90cnlfZmxpcF96ZTEsCi0JCQkgdHJhY2UucmN1X3RyeV9mbGlwX3oyLAotCQkgdHJhY2UucmN1X3RyeV9mbGlwX20xLCB0cmFjZS5yY3VfdHJ5X2ZsaXBfbWUxLAotCQkJdHJhY2UucmN1X3RyeV9mbGlwX20yKTsKLQliY291bnQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWZmZXIsIGNvdW50LCBwcG9zLAotCQkJcmN1cHJlZW1wdF90cmFjZV9idWYsIHN0cmxlbihyY3VwcmVlbXB0X3RyYWNlX2J1ZikpOwotCW11dGV4X3VubG9jaygmcmN1cHJlZW1wdF90cmFjZV9tdXRleCk7Ci0JcmV0dXJuIGJjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3QgcmN1Z3BfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlsb25nIG9sZGdwID0gcmN1X2JhdGNoZXNfY29tcGxldGVkKCk7Ci0Jc3NpemVfdCBiY291bnQ7Ci0KLQltdXRleF9sb2NrKCZyY3VwcmVlbXB0X3RyYWNlX211dGV4KTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKLQlzbnByaW50ZihyY3VwcmVlbXB0X3RyYWNlX2J1ZiwgUkNVUFJFRU1QVF9UUkFDRV9CVUZfU0laRSwKLQkJIm9sZGdncD0lbGQgIG5ld2dncD0lbGRcbiIsIG9sZGdwLCByY3VfYmF0Y2hlc19jb21wbGV0ZWQoKSk7Ci0JYmNvdW50ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmZmVyLCBjb3VudCwgcHBvcywKLQkJCXJjdXByZWVtcHRfdHJhY2VfYnVmLCBzdHJsZW4ocmN1cHJlZW1wdF90cmFjZV9idWYpKTsKLQltdXRleF91bmxvY2soJnJjdXByZWVtcHRfdHJhY2VfbXV0ZXgpOwotCXJldHVybiBiY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJjdWN0cnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlpbnQgY250ID0gMDsKLQlpbnQgY3B1OwotCWludCBmID0gcmN1X2JhdGNoZXNfY29tcGxldGVkKCkgJiAweDE7Ci0Jc3NpemVfdCBiY291bnQ7Ci0KLQltdXRleF9sb2NrKCZyY3VwcmVlbXB0X3RyYWNlX211dGV4KTsKLQotCWNudCArPSBzbnByaW50ZigmcmN1cHJlZW1wdF90cmFjZV9idWZbY250XSwgUkNVUFJFRU1QVF9UUkFDRV9CVUZfU0laRSwKLQkJCQkiQ1BVIGxhc3QgY3VyIEYgTVxuIik7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJbG9uZyAqZmxpcGN0ciA9IHJjdXByZWVtcHRfZmxpcGN0cihjcHUpOwotCQljbnQgKz0gc25wcmludGYoJnJjdXByZWVtcHRfdHJhY2VfYnVmW2NudF0sCi0JCQkJUkNVUFJFRU1QVF9UUkFDRV9CVUZfU0laRSAtIGNudCwKLQkJCQkJIiUzZCAlNGxkICUzbGQgJWQgJWRcbiIsCi0JCQkgICAgICAgY3B1LAotCQkJICAgICAgIGZsaXBjdHJbIWZdLAotCQkJICAgICAgIGZsaXBjdHJbZl0sCi0JCQkgICAgICAgcmN1cHJlZW1wdF9mbGlwX2ZsYWcoY3B1KSwKLQkJCSAgICAgICByY3VwcmVlbXB0X21iX2ZsYWcoY3B1KSk7Ci0JfQotCWNudCArPSBzbnByaW50ZigmcmN1cHJlZW1wdF90cmFjZV9idWZbY250XSwKLQkJCVJDVVBSRUVNUFRfVFJBQ0VfQlVGX1NJWkUgLSBjbnQsCi0JCQkiZ2dwID0gJWxkLCBzdGF0ZSA9ICVzXG4iLAotCQkJcmN1X2JhdGNoZXNfY29tcGxldGVkKCksCi0JCQlyY3VwcmVlbXB0X3RyeV9mbGlwX3N0YXRlX25hbWUoKSk7Ci0JY250ICs9IHNucHJpbnRmKCZyY3VwcmVlbXB0X3RyYWNlX2J1ZltjbnRdLAotCQkJUkNVUFJFRU1QVF9UUkFDRV9CVUZfU0laRSAtIGNudCwKLQkJCSJcbiIpOwotCWJjb3VudCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZmZlciwgY291bnQsIHBwb3MsCi0JCQlyY3VwcmVlbXB0X3RyYWNlX2J1Ziwgc3RybGVuKHJjdXByZWVtcHRfdHJhY2VfYnVmKSk7Ci0JbXV0ZXhfdW5sb2NrKCZyY3VwcmVlbXB0X3RyYWNlX211dGV4KTsKLQlyZXR1cm4gYmNvdW50OwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VzdGF0c19mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5yZWFkID0gcmN1c3RhdHNfcmVhZCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWdwX2ZvcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnJlYWQgPSByY3VncF9yZWFkLAotfTsKLQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1Y3Ryc19mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5yZWFkID0gcmN1Y3Ryc19yZWFkLAotfTsKLQotc3RhdGljIHN0cnVjdCBkZW50cnkgKnJjdWRpciwgKnN0YXRkaXIsICpjdHJzZGlyLCAqZ3BkaXI7Ci1zdGF0aWMgaW50IHJjdXByZWVtcHRfZGVidWdmc19pbml0KHZvaWQpCi17Ci0JcmN1ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJyY3UiLCBOVUxMKTsKLQlpZiAoIXJjdWRpcikKLQkJZ290byBvdXQ7Ci0Jc3RhdGRpciA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJjdXN0YXRzIiwgMDQ0NCwgcmN1ZGlyLAotCQkJCQkJTlVMTCwgJnJjdXN0YXRzX2ZvcHMpOwotCWlmICghc3RhdGRpcikKLQkJZ290byBmcmVlX291dDsKLQotCWdwZGlyID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmN1Z3AiLCAwNDQ0LCByY3VkaXIsIE5VTEwsICZyY3VncF9mb3BzKTsKLQlpZiAoIWdwZGlyKQotCQlnb3RvIGZyZWVfb3V0OwotCi0JY3Ryc2RpciA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJjdWN0cnMiLCAwNDQ0LCByY3VkaXIsCi0JCQkJCQlOVUxMLCAmcmN1Y3Ryc19mb3BzKTsKLQlpZiAoIWN0cnNkaXIpCi0JCWdvdG8gZnJlZV9vdXQ7Ci0JcmV0dXJuIDA7Ci1mcmVlX291dDoKLQlpZiAoc3RhdGRpcikKLQkJZGVidWdmc19yZW1vdmUoc3RhdGRpcik7Ci0JaWYgKGdwZGlyKQotCQlkZWJ1Z2ZzX3JlbW92ZShncGRpcik7Ci0JZGVidWdmc19yZW1vdmUocmN1ZGlyKTsKLW91dDoKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgcmN1cHJlZW1wdF90cmFjZV9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCW11dGV4X2luaXQoJnJjdXByZWVtcHRfdHJhY2VfbXV0ZXgpOwotCXJjdXByZWVtcHRfdHJhY2VfYnVmID0ga21hbGxvYyhSQ1VQUkVFTVBUX1RSQUNFX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJjdXByZWVtcHRfdHJhY2VfYnVmKQotCQlyZXR1cm4gMTsKLQlyZXQgPSByY3VwcmVlbXB0X2RlYnVnZnNfaW5pdCgpOwotCWlmIChyZXQpCi0JCWtmcmVlKHJjdXByZWVtcHRfdHJhY2VfYnVmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcmN1cHJlZW1wdF90cmFjZV9jbGVhbnVwKHZvaWQpCi17Ci0JZGVidWdmc19yZW1vdmUoc3RhdGRpcik7Ci0JZGVidWdmc19yZW1vdmUoZ3BkaXIpOwotCWRlYnVnZnNfcmVtb3ZlKGN0cnNkaXIpOwotCWRlYnVnZnNfcmVtb3ZlKHJjdWRpcik7Ci0Ja2ZyZWUocmN1cHJlZW1wdF90cmFjZV9idWYpOwotfQotCi0KLW1vZHVsZV9pbml0KHJjdXByZWVtcHRfdHJhY2VfaW5pdCk7Ci1tb2R1bGVfZXhpdChyY3VwcmVlbXB0X3RyYWNlX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKaW5kZXggOWI0YTk3NS4uYjMzZGI1MyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCkBAIC0yNTcsMTQgKzI1NywxNCBAQAogCXZvaWQgKCppbml0KSh2b2lkKTsKIAl2b2lkICgqY2xlYW51cCkodm9pZCk7CiAJaW50ICgqcmVhZGxvY2spKHZvaWQpOwotCXZvaWQgKCpyZWFkZGVsYXkpKHN0cnVjdCByY3VfcmFuZG9tX3N0YXRlICpycnNwKTsKKwl2b2lkICgqcmVhZF9kZWxheSkoc3RydWN0IHJjdV9yYW5kb21fc3RhdGUgKnJyc3ApOwogCXZvaWQgKCpyZWFkdW5sb2NrKShpbnQgaWR4KTsKIAlpbnQgKCpjb21wbGV0ZWQpKHZvaWQpOwotCXZvaWQgKCpkZWZlcnJlZGZyZWUpKHN0cnVjdCByY3VfdG9ydHVyZSAqcCk7CisJdm9pZCAoKmRlZmVycmVkX2ZyZWUpKHN0cnVjdCByY3VfdG9ydHVyZSAqcCk7CiAJdm9pZCAoKnN5bmMpKHZvaWQpOwogCXZvaWQgKCpjYl9iYXJyaWVyKSh2b2lkKTsKIAlpbnQgKCpzdGF0cykoY2hhciAqcGFnZSk7Ci0JaW50IGlycWNhcGFibGU7CisJaW50IGlycV9jYXBhYmxlOwogCWNoYXIgKm5hbWU7CiB9Owogc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKmN1cl9vcHMgPSBOVUxMOwpAQCAtMzIwLDcgKzMyMCw3IEBACiAJCXJwLT5ydG9ydF9tYnRlc3QgPSAwOwogCQlyY3VfdG9ydHVyZV9mcmVlKHJwKTsKIAl9IGVsc2UKLQkJY3VyX29wcy0+ZGVmZXJyZWRmcmVlKHJwKTsKKwkJY3VyX29wcy0+ZGVmZXJyZWRfZnJlZShycCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX2RlZmVycmVkX2ZyZWUoc3RydWN0IHJjdV90b3J0dXJlICpwKQpAQCAtMzI5LDE4ICszMjksMTggQEAKIH0KIAogc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgcmN1X29wcyA9IHsKLQkuaW5pdCA9IE5VTEwsCi0JLmNsZWFudXAgPSBOVUxMLAotCS5yZWFkbG9jayA9IHJjdV90b3J0dXJlX3JlYWRfbG9jaywKLQkucmVhZGRlbGF5ID0gcmN1X3JlYWRfZGVsYXksCi0JLnJlYWR1bmxvY2sgPSByY3VfdG9ydHVyZV9yZWFkX3VubG9jaywKLQkuY29tcGxldGVkID0gcmN1X3RvcnR1cmVfY29tcGxldGVkLAotCS5kZWZlcnJlZGZyZWUgPSByY3VfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAotCS5zeW5jID0gc3luY2hyb25pemVfcmN1LAotCS5jYl9iYXJyaWVyID0gcmN1X2JhcnJpZXIsCi0JLnN0YXRzID0gTlVMTCwKLQkuaXJxY2FwYWJsZSA9IDEsCi0JLm5hbWUgPSAicmN1IgorCS5pbml0CQk9IE5VTEwsCisJLmNsZWFudXAJPSBOVUxMLAorCS5yZWFkbG9jawk9IHJjdV90b3J0dXJlX3JlYWRfbG9jaywKKwkucmVhZF9kZWxheQk9IHJjdV9yZWFkX2RlbGF5LAorCS5yZWFkdW5sb2NrCT0gcmN1X3RvcnR1cmVfcmVhZF91bmxvY2ssCisJLmNvbXBsZXRlZAk9IHJjdV90b3J0dXJlX2NvbXBsZXRlZCwKKwkuZGVmZXJyZWRfZnJlZQk9IHJjdV90b3J0dXJlX2RlZmVycmVkX2ZyZWUsCisJLnN5bmMJCT0gc3luY2hyb25pemVfcmN1LAorCS5jYl9iYXJyaWVyCT0gcmN1X2JhcnJpZXIsCisJLnN0YXRzCQk9IE5VTEwsCisJLmlycV9jYXBhYmxlIAk9IDEsCisJLm5hbWUgCQk9ICJyY3UiCiB9OwogCiBzdGF0aWMgdm9pZCByY3Vfc3luY190b3J0dXJlX2RlZmVycmVkX2ZyZWUoc3RydWN0IHJjdV90b3J0dXJlICpwKQpAQCAtMzcwLDE4ICszNzAsMTggQEAKIH0KIAogc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgcmN1X3N5bmNfb3BzID0gewotCS5pbml0ID0gcmN1X3N5bmNfdG9ydHVyZV9pbml0LAotCS5jbGVhbnVwID0gTlVMTCwKLQkucmVhZGxvY2sgPSByY3VfdG9ydHVyZV9yZWFkX2xvY2ssCi0JLnJlYWRkZWxheSA9IHJjdV9yZWFkX2RlbGF5LAotCS5yZWFkdW5sb2NrID0gcmN1X3RvcnR1cmVfcmVhZF91bmxvY2ssCi0JLmNvbXBsZXRlZCA9IHJjdV90b3J0dXJlX2NvbXBsZXRlZCwKLQkuZGVmZXJyZWRmcmVlID0gcmN1X3N5bmNfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAotCS5zeW5jID0gc3luY2hyb25pemVfcmN1LAotCS5jYl9iYXJyaWVyID0gTlVMTCwKLQkuc3RhdHMgPSBOVUxMLAotCS5pcnFjYXBhYmxlID0gMSwKLQkubmFtZSA9ICJyY3Vfc3luYyIKKwkuaW5pdAkJPSByY3Vfc3luY190b3J0dXJlX2luaXQsCisJLmNsZWFudXAJPSBOVUxMLAorCS5yZWFkbG9jawk9IHJjdV90b3J0dXJlX3JlYWRfbG9jaywKKwkucmVhZF9kZWxheQk9IHJjdV9yZWFkX2RlbGF5LAorCS5yZWFkdW5sb2NrCT0gcmN1X3RvcnR1cmVfcmVhZF91bmxvY2ssCisJLmNvbXBsZXRlZAk9IHJjdV90b3J0dXJlX2NvbXBsZXRlZCwKKwkuZGVmZXJyZWRfZnJlZQk9IHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKKwkuc3luYwkJPSBzeW5jaHJvbml6ZV9yY3UsCisJLmNiX2JhcnJpZXIJPSBOVUxMLAorCS5zdGF0cwkJPSBOVUxMLAorCS5pcnFfY2FwYWJsZQk9IDEsCisJLm5hbWUJCT0gInJjdV9zeW5jIgogfTsKIAogLyoKQEAgLTQzMiwzMyArNDMyLDMzIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHJjdV9iaF9vcHMgPSB7Ci0JLmluaXQgPSBOVUxMLAotCS5jbGVhbnVwID0gTlVMTCwKLQkucmVhZGxvY2sgPSByY3VfYmhfdG9ydHVyZV9yZWFkX2xvY2ssCi0JLnJlYWRkZWxheSA9IHJjdV9yZWFkX2RlbGF5LCAgLyoganVzdCByZXVzZSByY3UncyB2ZXJzaW9uLiAqLwotCS5yZWFkdW5sb2NrID0gcmN1X2JoX3RvcnR1cmVfcmVhZF91bmxvY2ssCi0JLmNvbXBsZXRlZCA9IHJjdV9iaF90b3J0dXJlX2NvbXBsZXRlZCwKLQkuZGVmZXJyZWRmcmVlID0gcmN1X2JoX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKLQkuc3luYyA9IHJjdV9iaF90b3J0dXJlX3N5bmNocm9uaXplLAotCS5jYl9iYXJyaWVyID0gcmN1X2JhcnJpZXJfYmgsCi0JLnN0YXRzID0gTlVMTCwKLQkuaXJxY2FwYWJsZSA9IDEsCi0JLm5hbWUgPSAicmN1X2JoIgorCS5pbml0CQk9IE5VTEwsCisJLmNsZWFudXAJPSBOVUxMLAorCS5yZWFkbG9jawk9IHJjdV9iaF90b3J0dXJlX3JlYWRfbG9jaywKKwkucmVhZF9kZWxheQk9IHJjdV9yZWFkX2RlbGF5LCAgLyoganVzdCByZXVzZSByY3UncyB2ZXJzaW9uLiAqLworCS5yZWFkdW5sb2NrCT0gcmN1X2JoX3RvcnR1cmVfcmVhZF91bmxvY2ssCisJLmNvbXBsZXRlZAk9IHJjdV9iaF90b3J0dXJlX2NvbXBsZXRlZCwKKwkuZGVmZXJyZWRfZnJlZQk9IHJjdV9iaF90b3J0dXJlX2RlZmVycmVkX2ZyZWUsCisJLnN5bmMJCT0gcmN1X2JoX3RvcnR1cmVfc3luY2hyb25pemUsCisJLmNiX2JhcnJpZXIJPSByY3VfYmFycmllcl9iaCwKKwkuc3RhdHMJCT0gTlVMTCwKKwkuaXJxX2NhcGFibGUJPSAxLAorCS5uYW1lCQk9ICJyY3VfYmgiCiB9OwogCiBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyByY3VfYmhfc3luY19vcHMgPSB7Ci0JLmluaXQgPSByY3Vfc3luY190b3J0dXJlX2luaXQsCi0JLmNsZWFudXAgPSBOVUxMLAotCS5yZWFkbG9jayA9IHJjdV9iaF90b3J0dXJlX3JlYWRfbG9jaywKLQkucmVhZGRlbGF5ID0gcmN1X3JlYWRfZGVsYXksICAvKiBqdXN0IHJldXNlIHJjdSdzIHZlcnNpb24uICovCi0JLnJlYWR1bmxvY2sgPSByY3VfYmhfdG9ydHVyZV9yZWFkX3VubG9jaywKLQkuY29tcGxldGVkID0gcmN1X2JoX3RvcnR1cmVfY29tcGxldGVkLAotCS5kZWZlcnJlZGZyZWUgPSByY3Vfc3luY190b3J0dXJlX2RlZmVycmVkX2ZyZWUsCi0JLnN5bmMgPSByY3VfYmhfdG9ydHVyZV9zeW5jaHJvbml6ZSwKLQkuY2JfYmFycmllciA9IE5VTEwsCi0JLnN0YXRzID0gTlVMTCwKLQkuaXJxY2FwYWJsZSA9IDEsCi0JLm5hbWUgPSAicmN1X2JoX3N5bmMiCisJLmluaXQJCT0gcmN1X3N5bmNfdG9ydHVyZV9pbml0LAorCS5jbGVhbnVwCT0gTlVMTCwKKwkucmVhZGxvY2sJPSByY3VfYmhfdG9ydHVyZV9yZWFkX2xvY2ssCisJLnJlYWRfZGVsYXkJPSByY3VfcmVhZF9kZWxheSwgIC8qIGp1c3QgcmV1c2UgcmN1J3MgdmVyc2lvbi4gKi8KKwkucmVhZHVubG9jawk9IHJjdV9iaF90b3J0dXJlX3JlYWRfdW5sb2NrLAorCS5jb21wbGV0ZWQJPSByY3VfYmhfdG9ydHVyZV9jb21wbGV0ZWQsCisJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc3luY190b3J0dXJlX2RlZmVycmVkX2ZyZWUsCisJLnN5bmMJCT0gcmN1X2JoX3RvcnR1cmVfc3luY2hyb25pemUsCisJLmNiX2JhcnJpZXIJPSBOVUxMLAorCS5zdGF0cwkJPSBOVUxMLAorCS5pcnFfY2FwYWJsZQk9IDEsCisJLm5hbWUJCT0gInJjdV9iaF9zeW5jIgogfTsKIAogLyoKQEAgLTUzMCwxNyArNTMwLDE3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHNyY3Vfb3BzID0gewotCS5pbml0ID0gc3JjdV90b3J0dXJlX2luaXQsCi0JLmNsZWFudXAgPSBzcmN1X3RvcnR1cmVfY2xlYW51cCwKLQkucmVhZGxvY2sgPSBzcmN1X3RvcnR1cmVfcmVhZF9sb2NrLAotCS5yZWFkZGVsYXkgPSBzcmN1X3JlYWRfZGVsYXksCi0JLnJlYWR1bmxvY2sgPSBzcmN1X3RvcnR1cmVfcmVhZF91bmxvY2ssCi0JLmNvbXBsZXRlZCA9IHNyY3VfdG9ydHVyZV9jb21wbGV0ZWQsCi0JLmRlZmVycmVkZnJlZSA9IHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKLQkuc3luYyA9IHNyY3VfdG9ydHVyZV9zeW5jaHJvbml6ZSwKLQkuY2JfYmFycmllciA9IE5VTEwsCi0JLnN0YXRzID0gc3JjdV90b3J0dXJlX3N0YXRzLAotCS5uYW1lID0gInNyY3UiCisJLmluaXQJCT0gc3JjdV90b3J0dXJlX2luaXQsCisJLmNsZWFudXAJPSBzcmN1X3RvcnR1cmVfY2xlYW51cCwKKwkucmVhZGxvY2sJPSBzcmN1X3RvcnR1cmVfcmVhZF9sb2NrLAorCS5yZWFkX2RlbGF5CT0gc3JjdV9yZWFkX2RlbGF5LAorCS5yZWFkdW5sb2NrCT0gc3JjdV90b3J0dXJlX3JlYWRfdW5sb2NrLAorCS5jb21wbGV0ZWQJPSBzcmN1X3RvcnR1cmVfY29tcGxldGVkLAorCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3N5bmNfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAorCS5zeW5jCQk9IHNyY3VfdG9ydHVyZV9zeW5jaHJvbml6ZSwKKwkuY2JfYmFycmllcgk9IE5VTEwsCisJLnN0YXRzCQk9IHNyY3VfdG9ydHVyZV9zdGF0cywKKwkubmFtZQkJPSAic3JjdSIKIH07CiAKIC8qCkBAIC01NzQsMzIgKzU3NCw0OSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzY2hlZF9vcHMgPSB7Ci0JLmluaXQgPSByY3Vfc3luY190b3J0dXJlX2luaXQsCi0JLmNsZWFudXAgPSBOVUxMLAotCS5yZWFkbG9jayA9IHNjaGVkX3RvcnR1cmVfcmVhZF9sb2NrLAotCS5yZWFkZGVsYXkgPSByY3VfcmVhZF9kZWxheSwgIC8qIGp1c3QgcmV1c2UgcmN1J3MgdmVyc2lvbi4gKi8KLQkucmVhZHVubG9jayA9IHNjaGVkX3RvcnR1cmVfcmVhZF91bmxvY2ssCi0JLmNvbXBsZXRlZCA9IHNjaGVkX3RvcnR1cmVfY29tcGxldGVkLAotCS5kZWZlcnJlZGZyZWUgPSByY3Vfc2NoZWRfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAotCS5zeW5jID0gc2NoZWRfdG9ydHVyZV9zeW5jaHJvbml6ZSwKLQkuY2JfYmFycmllciA9IHJjdV9iYXJyaWVyX3NjaGVkLAotCS5zdGF0cyA9IE5VTEwsCi0JLmlycWNhcGFibGUgPSAxLAotCS5uYW1lID0gInNjaGVkIgorCS5pbml0CQk9IHJjdV9zeW5jX3RvcnR1cmVfaW5pdCwKKwkuY2xlYW51cAk9IE5VTEwsCisJLnJlYWRsb2NrCT0gc2NoZWRfdG9ydHVyZV9yZWFkX2xvY2ssCisJLnJlYWRfZGVsYXkJPSByY3VfcmVhZF9kZWxheSwgIC8qIGp1c3QgcmV1c2UgcmN1J3MgdmVyc2lvbi4gKi8KKwkucmVhZHVubG9jawk9IHNjaGVkX3RvcnR1cmVfcmVhZF91bmxvY2ssCisJLmNvbXBsZXRlZAk9IHNjaGVkX3RvcnR1cmVfY29tcGxldGVkLAorCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3NjaGVkX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKKwkuc3luYwkJPSBzY2hlZF90b3J0dXJlX3N5bmNocm9uaXplLAorCS5jYl9iYXJyaWVyCT0gcmN1X2JhcnJpZXJfc2NoZWQsCisJLnN0YXRzCQk9IE5VTEwsCisJLmlycV9jYXBhYmxlCT0gMSwKKwkubmFtZQkJPSAic2NoZWQiCiB9OwogCiBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzY2hlZF9vcHNfc3luYyA9IHsKLQkuaW5pdCA9IHJjdV9zeW5jX3RvcnR1cmVfaW5pdCwKLQkuY2xlYW51cCA9IE5VTEwsCi0JLnJlYWRsb2NrID0gc2NoZWRfdG9ydHVyZV9yZWFkX2xvY2ssCi0JLnJlYWRkZWxheSA9IHJjdV9yZWFkX2RlbGF5LCAgLyoganVzdCByZXVzZSByY3UncyB2ZXJzaW9uLiAqLwotCS5yZWFkdW5sb2NrID0gc2NoZWRfdG9ydHVyZV9yZWFkX3VubG9jaywKLQkuY29tcGxldGVkID0gc2NoZWRfdG9ydHVyZV9jb21wbGV0ZWQsCi0JLmRlZmVycmVkZnJlZSA9IHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKLQkuc3luYyA9IHNjaGVkX3RvcnR1cmVfc3luY2hyb25pemUsCi0JLmNiX2JhcnJpZXIgPSBOVUxMLAotCS5zdGF0cyA9IE5VTEwsCi0JLm5hbWUgPSAic2NoZWRfc3luYyIKKwkuaW5pdAkJPSByY3Vfc3luY190b3J0dXJlX2luaXQsCisJLmNsZWFudXAJPSBOVUxMLAorCS5yZWFkbG9jawk9IHNjaGVkX3RvcnR1cmVfcmVhZF9sb2NrLAorCS5yZWFkX2RlbGF5CT0gcmN1X3JlYWRfZGVsYXksICAvKiBqdXN0IHJldXNlIHJjdSdzIHZlcnNpb24uICovCisJLnJlYWR1bmxvY2sJPSBzY2hlZF90b3J0dXJlX3JlYWRfdW5sb2NrLAorCS5jb21wbGV0ZWQJPSBzY2hlZF90b3J0dXJlX2NvbXBsZXRlZCwKKwkuZGVmZXJyZWRfZnJlZQk9IHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKKwkuc3luYwkJPSBzY2hlZF90b3J0dXJlX3N5bmNocm9uaXplLAorCS5jYl9iYXJyaWVyCT0gTlVMTCwKKwkuc3RhdHMJCT0gTlVMTCwKKwkubmFtZQkJPSAic2NoZWRfc3luYyIKK307CisKK2V4dGVybiBpbnQgcmN1X2V4cGVkaXRlZF90b3J0dXJlX3N0YXRzKGNoYXIgKnBhZ2UpOworCitzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzY2hlZF9leHBlZGl0ZWRfb3BzID0geworCS5pbml0CQk9IHJjdV9zeW5jX3RvcnR1cmVfaW5pdCwKKwkuY2xlYW51cAk9IE5VTEwsCisJLnJlYWRsb2NrCT0gc2NoZWRfdG9ydHVyZV9yZWFkX2xvY2ssCisJLnJlYWRfZGVsYXkJPSByY3VfcmVhZF9kZWxheSwgIC8qIGp1c3QgcmV1c2UgcmN1J3MgdmVyc2lvbi4gKi8KKwkucmVhZHVubG9jawk9IHNjaGVkX3RvcnR1cmVfcmVhZF91bmxvY2ssCisJLmNvbXBsZXRlZAk9IHNjaGVkX3RvcnR1cmVfY29tcGxldGVkLAorCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3N5bmNfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAorCS5zeW5jCQk9IHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCwKKwkuY2JfYmFycmllcgk9IE5VTEwsCisJLnN0YXRzCQk9IHJjdV9leHBlZGl0ZWRfdG9ydHVyZV9zdGF0cywKKwkuaXJxX2NhcGFibGUJPSAxLAorCS5uYW1lCQk9ICJzY2hlZF9leHBlZGl0ZWQiCiB9OwogCiAvKgpAQCAtNjM1LDcgKzY1Miw3IEBACiAJCQkJaSA9IFJDVV9UT1JUVVJFX1BJUEVfTEVOOwogCQkJYXRvbWljX2luYygmcmN1X3RvcnR1cmVfd2NvdW50W2ldKTsKIAkJCW9sZF9ycC0+cnRvcnRfcGlwZV9jb3VudCsrOwotCQkJY3VyX29wcy0+ZGVmZXJyZWRmcmVlKG9sZF9ycCk7CisJCQljdXJfb3BzLT5kZWZlcnJlZF9mcmVlKG9sZF9ycCk7CiAJCX0KIAkJcmN1X3RvcnR1cmVfY3VycmVudF92ZXJzaW9uKys7CiAJCW9sZGJhdGNoID0gY3VyX29wcy0+Y29tcGxldGVkKCk7CkBAIC03MDAsNyArNzE3LDcgQEAKIAlpZiAocC0+cnRvcnRfbWJ0ZXN0ID09IDApCiAJCWF0b21pY19pbmMoJm5fcmN1X3RvcnR1cmVfbWJlcnJvcik7CiAJc3Bpbl9sb2NrKCZyYW5kX2xvY2spOwotCWN1cl9vcHMtPnJlYWRkZWxheSgmcmFuZCk7CisJY3VyX29wcy0+cmVhZF9kZWxheSgmcmFuZCk7CiAJbl9yY3VfdG9ydHVyZV90aW1lcnMrKzsKIAlzcGluX3VubG9jaygmcmFuZF9sb2NrKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKQEAgLTczOCwxMSArNzU1LDExIEBACiAKIAlWRVJCT1NFX1BSSU5US19TVFJJTkcoInJjdV90b3J0dXJlX3JlYWRlciB0YXNrIHN0YXJ0ZWQiKTsKIAlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIDE5KTsKLQlpZiAoaXJxcmVhZGVyICYmIGN1cl9vcHMtPmlycWNhcGFibGUpCisJaWYgKGlycXJlYWRlciAmJiBjdXJfb3BzLT5pcnFfY2FwYWJsZSkKIAkJc2V0dXBfdGltZXJfb25fc3RhY2soJnQsIHJjdV90b3J0dXJlX3RpbWVyLCAwKTsKIAogCWRvIHsKLQkJaWYgKGlycXJlYWRlciAmJiBjdXJfb3BzLT5pcnFjYXBhYmxlKSB7CisJCWlmIChpcnFyZWFkZXIgJiYgY3VyX29wcy0+aXJxX2NhcGFibGUpIHsKIAkJCWlmICghdGltZXJfcGVuZGluZygmdCkpCiAJCQkJbW9kX3RpbWVyKCZ0LCAxKTsKIAkJfQpAQCAtNzU3LDcgKzc3NCw3IEBACiAJCX0KIAkJaWYgKHAtPnJ0b3J0X21idGVzdCA9PSAwKQogCQkJYXRvbWljX2luYygmbl9yY3VfdG9ydHVyZV9tYmVycm9yKTsKLQkJY3VyX29wcy0+cmVhZGRlbGF5KCZyYW5kKTsKKwkJY3VyX29wcy0+cmVhZF9kZWxheSgmcmFuZCk7CiAJCXByZWVtcHRfZGlzYWJsZSgpOwogCQlwaXBlX2NvdW50ID0gcC0+cnRvcnRfcGlwZV9jb3VudDsKIAkJaWYgKHBpcGVfY291bnQgPiBSQ1VfVE9SVFVSRV9QSVBFX0xFTikgewpAQCAtNzc4LDcgKzc5NSw3IEBACiAJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJiBmdWxsc3RvcCA9PSBGVUxMU1RPUF9ET05UU1RPUCk7CiAJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJyY3VfdG9ydHVyZV9yZWFkZXIgdGFzayBzdG9wcGluZyIpOwogCXJjdXRvcnR1cmVfc2h1dGRvd25fYWJzb3JiKCJyY3VfdG9ydHVyZV9yZWFkZXIiKTsKLQlpZiAoaXJxcmVhZGVyICYmIGN1cl9vcHMtPmlycWNhcGFibGUpCisJaWYgKGlycXJlYWRlciAmJiBjdXJfb3BzLT5pcnFfY2FwYWJsZSkKIAkJZGVsX3RpbWVyX3N5bmMoJnQpOwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKQEAgLTEwNzgsNiArMTA5NSw3IEBACiAJaW50IGZpcnN0ZXJyID0gMDsKIAlzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyAqdG9ydHVyZV9vcHNbXSA9CiAJCXsgJnJjdV9vcHMsICZyY3Vfc3luY19vcHMsICZyY3VfYmhfb3BzLCAmcmN1X2JoX3N5bmNfb3BzLAorCQkgICZzY2hlZF9leHBlZGl0ZWRfb3BzLAogCQkgICZzcmN1X29wcywgJnNjaGVkX29wcywgJnNjaGVkX29wc19zeW5jLCB9OwogCiAJbXV0ZXhfbG9jaygmZnVsbHN0b3BfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuYyBiL2tlcm5lbC9yY3V0cmVlLmMKaW5kZXggNzcxN2I5NS4uNmIxMWIwNyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuYworKysgYi9rZXJuZWwvcmN1dHJlZS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTQ2LDYgKzQ3LDggQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIAorI2luY2x1ZGUgInJjdXRyZWUuaCIKKwogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHJjdV9sb2NrX2tleTsKIHN0cnVjdCBsb2NrZGVwX21hcCByY3VfbG9ja19tYXAgPQpAQCAtNzIsMzAgKzc1LDU5IEBACiAJLm5fZm9yY2VfcXNfbmdwID0gMCwgXAogfQogCi1zdHJ1Y3QgcmN1X3N0YXRlIHJjdV9zdGF0ZSA9IFJDVV9TVEFURV9JTklUSUFMSVpFUihyY3Vfc3RhdGUpOwotREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCByY3VfZGF0YSk7CitzdHJ1Y3QgcmN1X3N0YXRlIHJjdV9zY2hlZF9zdGF0ZSA9IFJDVV9TVEFURV9JTklUSUFMSVpFUihyY3Vfc2NoZWRfc3RhdGUpOworREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCByY3Vfc2NoZWRfZGF0YSk7CiAKIHN0cnVjdCByY3Vfc3RhdGUgcmN1X2JoX3N0YXRlID0gUkNVX1NUQVRFX0lOSVRJQUxJWkVSKHJjdV9iaF9zdGF0ZSk7CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9iaF9kYXRhKTsKIAorZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX3NjaGVkKHZvaWQpOworc3RhdGljIHN0cnVjdCByY3Vfbm9kZSAqcmN1X2dldF9yb290KHN0cnVjdCByY3Vfc3RhdGUgKnJzcCk7CitzdGF0aWMgdm9pZCBjcHVfcXVpZXRfbXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAorCQkJICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwgdW5zaWduZWQgbG9uZyBmbGFncyk7CitzdGF0aWMgdm9pZCBjcHVfcXVpZXRfbXNrX2ZpbmlzaChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIHZvaWQgX19yY3Vfb2ZmbGluZV9jcHUoaW50IGNwdSwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwKTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVICovCitzdGF0aWMgdm9pZCBfX3JjdV9wcm9jZXNzX2NhbGxiYWNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCisJCQkJICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKK3N0YXRpYyB2b2lkIF9fY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLAorCQkgICAgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSwKKwkJICAgICAgIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCk7CitzdGF0aWMgaW50IF9fcmN1X3BlbmRpbmcoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7CitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAorCQkJCQkgICBpbnQgcHJlZW1wdGFibGUpOworCisjaW5jbHVkZSAicmN1dHJlZV9wbHVnaW4uaCIKKwogLyoKLSAqIEluY3JlbWVudCB0aGUgcXVpZXNjZW50IHN0YXRlIGNvdW50ZXIuCi0gKiBUaGUgY291bnRlciBpcyBhIGJpdCBkZWdlbmVyYXRlZDogV2UgZG8gbm90IG5lZWQgdG8ga25vdworICogTm90ZSBhIHF1aWVzY2VudCBzdGF0ZS4gIEJlY2F1c2Ugd2UgZG8gbm90IG5lZWQgdG8ga25vdwogICogaG93IG1hbnkgcXVpZXNjZW50IHN0YXRlcyBwYXNzZWQsIGp1c3QgaWYgdGhlcmUgd2FzIGF0IGxlYXN0Ci0gKiBvbmUgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSBncmFjZSBwZXJpb2QuIFRodXMganVzdCBhIGZsYWcuCisgKiBvbmUgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSBncmFjZSBwZXJpb2QsIHRoaXMganVzdCBzZXRzIGEgZmxhZy4KICAqLwotdm9pZCByY3VfcXNjdHJfaW5jKGludCBjcHUpCit2b2lkIHJjdV9zY2hlZF9xcyhpbnQgY3B1KQogewotCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gJnBlcl9jcHUocmN1X2RhdGEsIGNwdSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZHAgPSAmcGVyX2NwdShyY3Vfc2NoZWRfZGF0YSwgY3B1KTsKIAlyZHAtPnBhc3NlZF9xdWllc2MgPSAxOwogCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSByZHAtPmNvbXBsZXRlZDsKKwlyY3VfcHJlZW1wdF9xcyhjcHUpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotdm9pZCByY3VfYmhfcXNjdHJfaW5jKGludCBjcHUpCit2b2lkIHJjdV9iaF9xcyhpbnQgY3B1KQogewotCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gJnBlcl9jcHUocmN1X2JoX2RhdGEsIGNwdSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZHAgPSAmcGVyX2NwdShyY3VfYmhfZGF0YSwgY3B1KTsKIAlyZHAtPnBhc3NlZF9xdWllc2MgPSAxOwogCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSByZHAtPmNvbXBsZXRlZDsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfTk9fSFoKQEAgLTExMCwxNSArMTQyLDE2IEBACiBzdGF0aWMgaW50IHFsb3dtYXJrID0gMTAwOwkvKiBPbmNlIG9ubHkgdGhpcyBtYW55IHBlbmRpbmcsIHVzZSBibGltaXQuICovCiAKIHN0YXRpYyB2b2lkIGZvcmNlX3F1aWVzY2VudF9zdGF0ZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIGludCByZWxheGVkKTsKK3N0YXRpYyBpbnQgcmN1X3BlbmRpbmcoaW50IGNwdSk7CiAKIC8qCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBSQ1UgYmF0Y2hlcyBwcm9jZXNzZWQgdGh1cyBmYXIgZm9yIGRlYnVnICYgc3RhdHMuCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBSQ1Utc2NoZWQgYmF0Y2hlcyBwcm9jZXNzZWQgdGh1cyBmYXIgZm9yIGRlYnVnICYgc3RhdHMuCiAgKi8KLWxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkKHZvaWQpCitsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9zY2hlZCh2b2lkKQogewotCXJldHVybiByY3Vfc3RhdGUuY29tcGxldGVkOworCXJldHVybiByY3Vfc2NoZWRfc3RhdGUuY29tcGxldGVkOwogfQotRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhdGNoZXNfY29tcGxldGVkKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9zY2hlZCk7CiAKIC8qCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBSQ1UgQkggYmF0Y2hlcyBwcm9jZXNzZWQgdGh1cyBmYXIgZm9yIGRlYnVnICYgc3RhdHMuCkBAIC0xODEsNiArMjE0LDEwIEBACiAJCXJldHVybiAxOwogCX0KIAorCS8qIElmIHByZWVtcHRhYmxlIFJDVSwgbm8gcG9pbnQgaW4gc2VuZGluZyByZXNjaGVkdWxlIElQSS4gKi8KKwlpZiAocmRwLT5wcmVlbXB0YWJsZSkKKwkJcmV0dXJuIDA7CisKIAkvKiBUaGUgQ1BVIGlzIG9ubGluZSwgc28gc2VuZCBpdCBhIHJlc2NoZWR1bGUgSVBJLiAqLwogCWlmIChyZHAtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCiAJCXNtcF9zZW5kX3Jlc2NoZWR1bGUocmRwLT5jcHUpOwpAQCAtMTkzLDcgKzIzMCw2IEBACiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19TTVAgKi8KIAogI2lmZGVmIENPTkZJR19OT19IWgotc3RhdGljIERFRklORV9SQVRFTElNSVRfU1RBVEUocmN1X3JzLCAxMCAqIEhaLCA1KTsKIAogLyoqCiAgKiByY3VfZW50ZXJfbm9oeiAtIGluZm9ybSBSQ1UgdGhhdCBjdXJyZW50IENQVSBpcyBlbnRlcmluZyBub2h6CkBAIC0yMTMsNyArMjQ5LDcgQEAKIAlyZHRwID0gJl9fZ2V0X2NwdV92YXIocmN1X2R5bnRpY2tzKTsKIAlyZHRwLT5keW50aWNrcysrOwogCXJkdHAtPmR5bnRpY2tzX25lc3RpbmctLTsKLQlXQVJOX09OX1JBVEVMSU1JVChyZHRwLT5keW50aWNrcyAmIDB4MSwgJnJjdV9ycyk7CisJV0FSTl9PTl9PTkNFKHJkdHAtPmR5bnRpY2tzICYgMHgxKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTIzMiw3ICsyNjgsNyBAQAogCXJkdHAgPSAmX19nZXRfY3B1X3ZhcihyY3VfZHludGlja3MpOwogCXJkdHAtPmR5bnRpY2tzKys7CiAJcmR0cC0+ZHludGlja3NfbmVzdGluZysrOwotCVdBUk5fT05fUkFURUxJTUlUKCEocmR0cC0+ZHludGlja3MgJiAweDEpLCAmcmN1X3JzKTsKKwlXQVJOX09OX09OQ0UoIShyZHRwLT5keW50aWNrcyAmIDB4MSkpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlzbXBfbWIoKTsgLyogQ1BVcyBzZWVpbmcgKysgbXVzdCBzZWUgbGF0ZXIgUkNVIHJlYWQtc2lkZSBjcml0IHNlY3RzICovCiB9CkBAIC0yNTEsNyArMjg3LDcgQEAKIAlpZiAocmR0cC0+ZHludGlja3MgJiAweDEpCiAJCXJldHVybjsKIAlyZHRwLT5keW50aWNrc19ubWkrKzsKLQlXQVJOX09OX1JBVEVMSU1JVCghKHJkdHAtPmR5bnRpY2tzX25taSAmIDB4MSksICZyY3VfcnMpOworCVdBUk5fT05fT05DRSghKHJkdHAtPmR5bnRpY2tzX25taSAmIDB4MSkpOwogCXNtcF9tYigpOyAvKiBDUFVzIHNlZWluZyArKyBtdXN0IHNlZSBsYXRlciBSQ1UgcmVhZC1zaWRlIGNyaXQgc2VjdHMgKi8KIH0KIApAQCAtMjcwLDcgKzMwNiw3IEBACiAJCXJldHVybjsKIAlzbXBfbWIoKTsgLyogQ1BVcyBzZWVpbmcgKysgbXVzdCBzZWUgcHJpb3IgUkNVIHJlYWQtc2lkZSBjcml0IHNlY3RzICovCiAJcmR0cC0+ZHludGlja3Nfbm1pKys7Ci0JV0FSTl9PTl9SQVRFTElNSVQocmR0cC0+ZHludGlja3Nfbm1pICYgMHgxLCAmcmN1X3JzKTsKKwlXQVJOX09OX09OQ0UocmR0cC0+ZHludGlja3Nfbm1pICYgMHgxKTsKIH0KIAogLyoqCkBAIC0yODYsNyArMzIyLDcgQEAKIAlpZiAocmR0cC0+ZHludGlja3NfbmVzdGluZysrKQogCQlyZXR1cm47CiAJcmR0cC0+ZHludGlja3MrKzsKLQlXQVJOX09OX1JBVEVMSU1JVCghKHJkdHAtPmR5bnRpY2tzICYgMHgxKSwgJnJjdV9ycyk7CisJV0FSTl9PTl9PTkNFKCEocmR0cC0+ZHludGlja3MgJiAweDEpKTsKIAlzbXBfbWIoKTsgLyogQ1BVcyBzZWVpbmcgKysgbXVzdCBzZWUgbGF0ZXIgUkNVIHJlYWQtc2lkZSBjcml0IHNlY3RzICovCiB9CiAKQEAgLTMwNSwxMCArMzQxLDEwIEBACiAJCXJldHVybjsKIAlzbXBfbWIoKTsgLyogQ1BVcyBzZWVpbmcgKysgbXVzdCBzZWUgcHJpb3IgUkNVIHJlYWQtc2lkZSBjcml0IHNlY3RzICovCiAJcmR0cC0+ZHludGlja3MrKzsKLQlXQVJOX09OX1JBVEVMSU1JVChyZHRwLT5keW50aWNrcyAmIDB4MSwgJnJjdV9ycyk7CisJV0FSTl9PTl9PTkNFKHJkdHAtPmR5bnRpY2tzICYgMHgxKTsKIAogCS8qIElmIHRoZSBpbnRlcnJ1cHQgcXVldWVkIGEgY2FsbGJhY2ssIGdldCBvdXQgb2YgZHludGljayBtb2RlLiAqLwotCWlmIChfX2dldF9jcHVfdmFyKHJjdV9kYXRhKS5ueHRsaXN0IHx8CisJaWYgKF9fZ2V0X2NwdV92YXIocmN1X3NjaGVkX2RhdGEpLm54dGxpc3QgfHwKIAkgICAgX19nZXRfY3B1X3ZhcihyY3VfYmhfZGF0YSkubnh0bGlzdCkKIAkJc2V0X25lZWRfcmVzY2hlZCgpOwogfQpAQCAtNDYxLDYgKzQ5Nyw3IEBACiAKIAlwcmludGsoS0VSTl9FUlIgIklORk86IFJDVSBkZXRlY3RlZCBDUFUgc3RhbGxzOiIpOwogCWZvciAoOyBybnBfY3VyIDwgcm5wX2VuZDsgcm5wX2N1cisrKSB7CisJCXJjdV9wcmludF90YXNrX3N0YWxsKHJucCk7CiAJCWlmIChybnBfY3VyLT5xc21hc2sgPT0gMCkKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGNwdSA9IDA7IGNwdSA8PSBybnBfY3VyLT5ncnBoaSAtIHJucF9jdXItPmdycGxvOyBjcHUrKykKQEAgLTQ2OSw2ICs1MDYsOCBAQAogCX0KIAlwcmludGsoIiAoZGV0ZWN0ZWQgYnkgJWQsIHQ9JWxkIGppZmZpZXMpXG4iLAogCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIChsb25nKShqaWZmaWVzIC0gcnNwLT5ncF9zdGFydCkpOworCXRyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UoKTsKKwogCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDApOyAgLyogS2ljayB0aGVtIGFsbC4gKi8KIH0KIApAQCAtNDc5LDEyICs1MTgsMTQgQEAKIAogCXByaW50ayhLRVJOX0VSUiAiSU5GTzogUkNVIGRldGVjdGVkIENQVSAlZCBzdGFsbCAodD0lbHUgamlmZmllcylcbiIsCiAJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGppZmZpZXMgLSByc3AtPmdwX3N0YXJ0KTsKLQlkdW1wX3N0YWNrKCk7CisJdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSgpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCWlmICgobG9uZykoamlmZmllcyAtIHJzcC0+amlmZmllc19zdGFsbCkgPj0gMCkKIAkJcnNwLT5qaWZmaWVzX3N0YWxsID0KIAkJCWppZmZpZXMgKyBSQ1VfU0VDT05EU19USUxMX1NUQUxMX1JFQ0hFQ0s7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisKIAlzZXRfbmVlZF9yZXNjaGVkKCk7ICAvKiBraWNrIG91cnNlbHZlcyB0byBnZXQgdGhpbmdzIGdvaW5nLiAqLwogfQogCkBAIC02NzQsNiArNzE1LDE5IEBACiB9CiAKIC8qCisgKiBDbGVhbiB1cCBhZnRlciB0aGUgcHJpb3IgZ3JhY2UgcGVyaW9kIGFuZCBsZXQgcmN1X3N0YXJ0X2dwKCkgc3RhcnQgdXAKKyAqIHRoZSBuZXh0IGdyYWNlIHBlcmlvZCBpZiBvbmUgaXMgbmVlZGVkLiAgTm90ZSB0aGF0IHRoZSBjYWxsZXIgbXVzdAorICogaG9sZCBybnAtPmxvY2ssIGFzIHJlcXVpcmVkIGJ5IHJjdV9zdGFydF9ncCgpLCB3aGljaCB3aWxsIHJlbGVhc2UgaXQuCisgKi8KK3N0YXRpYyB2b2lkIGNwdV9xdWlldF9tc2tfZmluaXNoKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgdW5zaWduZWQgbG9uZyBmbGFncykKKwlfX3JlbGVhc2VzKHJucC0+bG9jaykKK3sKKwlyc3AtPmNvbXBsZXRlZCA9IHJzcC0+Z3BudW07CisJcmN1X3Byb2Nlc3NfZ3BfZW5kKHJzcCwgcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7CisJcmN1X3N0YXJ0X2dwKHJzcCwgZmxhZ3MpOyAgLyogcmVsZWFzZXMgcm9vdCBub2RlJ3Mgcm5wLT5sb2NrLiAqLworfQorCisvKgogICogU2ltaWxhciB0byBjcHVfcXVpZXQoKSwgZm9yIHdoaWNoIGl0IGlzIGEgaGVscGVyIGZ1bmN0aW9uLiAgQWxsb3dzCiAgKiBhIGdyb3VwIG9mIENQVXMgdG8gYmUgcXVpZXRlZCBhdCBvbmUgZ28sIHRob3VnaCBhbGwgdGhlIENQVXMgaW4gdGhlCiAgKiBncm91cCBtdXN0IGJlIHJlcHJlc2VudGVkIGJ5IHRoZSBzYW1lIGxlYWYgcmN1X25vZGUgc3RydWN0dXJlLgpAQCAtNjk0LDcgKzc0OCw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJcm5wLT5xc21hc2sgJj0gfm1hc2s7Ci0JCWlmIChybnAtPnFzbWFzayAhPSAwKSB7CisJCWlmIChybnAtPnFzbWFzayAhPSAwIHx8IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKSB7CiAKIAkJCS8qIE90aGVyIGJpdHMgc3RpbGwgc2V0IGF0IHRoaXMgbGV2ZWwsIHNvIGRvbmUuICovCiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKQEAgLTcxNCwxNCArNzY4LDEwIEBACiAKIAkvKgogCSAqIEdldCBoZXJlIGlmIHdlIGFyZSB0aGUgbGFzdCBDUFUgdG8gcGFzcyB0aHJvdWdoIGEgcXVpZXNjZW50Ci0JICogc3RhdGUgZm9yIHRoaXMgZ3JhY2UgcGVyaW9kLiAgQ2xlYW4gdXAgYW5kIGxldCByY3Vfc3RhcnRfZ3AoKQotCSAqIHN0YXJ0IHVwIHRoZSBuZXh0IGdyYWNlIHBlcmlvZCBpZiBvbmUgaXMgbmVlZGVkLiAgTm90ZSB0aGF0Ci0JICogd2Ugc3RpbGwgaG9sZCBybnAtPmxvY2ssIGFzIHJlcXVpcmVkIGJ5IHJjdV9zdGFydF9ncCgpLCB3aGljaAotCSAqIHdpbGwgcmVsZWFzZSBpdC4KKwkgKiBzdGF0ZSBmb3IgdGhpcyBncmFjZSBwZXJpb2QuICBJbnZva2UgY3B1X3F1aWV0X21za19maW5pc2goKQorCSAqIHRvIGNsZWFuIHVwIGFuZCBzdGFydCB0aGUgbmV4dCBncmFjZSBwZXJpb2QgaWYgb25lIGlzIG5lZWRlZC4KIAkgKi8KLQlyc3AtPmNvbXBsZXRlZCA9IHJzcC0+Z3BudW07Ci0JcmN1X3Byb2Nlc3NfZ3BfZW5kKHJzcCwgcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7Ci0JcmN1X3N0YXJ0X2dwKHJzcCwgZmxhZ3MpOyAgLyogcmVsZWFzZXMgcm5wLT5sb2NrLiAqLworCWNwdV9xdWlldF9tc2tfZmluaXNoKHJzcCwgZmxhZ3MpOyAvKiByZWxlYXNlcyBybnAtPmxvY2suICovCiB9CiAKIC8qCkBAIC04MjgsMTEgKzg3OCwxMiBAQAogCQlzcGluX2xvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCXJucC0+cXNtYXNraW5pdCAmPSB+bWFzazsKIAkJaWYgKHJucC0+cXNtYXNraW5pdCAhPSAwKSB7Ci0JCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQkJYnJlYWs7CiAJCX0KKwkJcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhyc3AsIHJucCk7CiAJCW1hc2sgPSBybnAtPmdycG1hc2s7Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJcm5wID0gcm5wLT5wYXJlbnQ7CiAJfSB3aGlsZSAocm5wICE9IE5VTEwpOwogCWxhc3Rjb21wID0gcnNwLT5jb21wbGV0ZWQ7CkBAIC04NDUsNyArODk2LDcgQEAKIAkvKgogCSAqIE1vdmUgY2FsbGJhY2tzIGZyb20gdGhlIG91dGdvaW5nIENQVSB0byB0aGUgcnVubmluZyBDUFUuCiAJICogTm90ZSB0aGF0IHRoZSBvdXRnb2luZyBDUFUgaXMgbm93IHF1aXNjZW50LCBzbyBpdCBpcyBub3cKLQkgKiAodW5jaGFyYWN0ZXJpc3RpY2FsbHkpIHNhZmUgdG8gYWNjZXNzIGl0IHJjdV9kYXRhIHN0cnVjdHVyZS4KKwkgKiAodW5jaGFyYWN0ZXJpc3RpY2FsbHkpIHNhZmUgdG8gYWNjZXNzIGl0cyByY3VfZGF0YSBzdHJ1Y3R1cmUuCiAJICogTm90ZSBhbHNvIHRoYXQgd2UgbXVzdCBjYXJlZnVsbHkgcmV0YWluIHRoZSBvcmRlciBvZiB0aGUKIAkgKiBvdXRnb2luZyBDUFUncyBjYWxsYmFja3MgaW4gb3JkZXIgZm9yIHJjdV9iYXJyaWVyKCkgdG8gd29yawogCSAqIGNvcnJlY3RseS4gIEZpbmFsbHksIG5vdGUgdGhhdCB3ZSBzdGFydCBhbGwgdGhlIGNhbGxiYWNrcwpAQCAtODc2LDggKzkyNyw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIHJjdV9vZmZsaW5lX2NwdShpbnQgY3B1KQogewotCV9fcmN1X29mZmxpbmVfY3B1KGNwdSwgJnJjdV9zdGF0ZSk7CisJX19yY3Vfb2ZmbGluZV9jcHUoY3B1LCAmcmN1X3NjaGVkX3N0YXRlKTsKIAlfX3JjdV9vZmZsaW5lX2NwdShjcHUsICZyY3VfYmhfc3RhdGUpOworCXJjdV9wcmVlbXB0X29mZmxpbmVfY3B1KGNwdSk7CiB9CiAKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KQEAgLTk2Myw2ICsxMDE1LDggQEAKICAqLwogdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKQogeworCWlmICghcmN1X3BlbmRpbmcoY3B1KSkKKwkJcmV0dXJuOyAvKiBpZiBub3RoaW5nIGZvciBSQ1UgdG8gZG8uICovCiAJaWYgKHVzZXIgfHwKIAkgICAgKGlkbGVfY3B1KGNwdSkgJiYgcmN1X3NjaGVkdWxlcl9hY3RpdmUgJiYKIAkgICAgICFpbl9zb2Z0aXJxKCkgJiYgaGFyZGlycV9jb3VudCgpIDw9ICgxIDw8IEhBUkRJUlFfU0hJRlQpKSkgewpAQCAtOTcxLDE3ICsxMDI1LDE2IEBACiAJCSAqIEdldCBoZXJlIGlmIHRoaXMgQ1BVIHRvb2sgaXRzIGludGVycnVwdCBmcm9tIHVzZXIKIAkJICogbW9kZSBvciBmcm9tIHRoZSBpZGxlIGxvb3AsIGFuZCBpZiB0aGlzIGlzIG5vdCBhCiAJCSAqIG5lc3RlZCBpbnRlcnJ1cHQuICBJbiB0aGlzIGNhc2UsIHRoZSBDUFUgaXMgaW4KLQkJICogYSBxdWllc2NlbnQgc3RhdGUsIHNvIGNvdW50IGl0LgorCQkgKiBhIHF1aWVzY2VudCBzdGF0ZSwgc28gbm90ZSBpdC4KIAkJICoKIAkJICogTm8gbWVtb3J5IGJhcnJpZXIgaXMgcmVxdWlyZWQgaGVyZSBiZWNhdXNlIGJvdGgKLQkJICogcmN1X3FzY3RyX2luYygpIGFuZCByY3VfYmhfcXNjdHJfaW5jKCkgcmVmZXJlbmNlCi0JCSAqIG9ubHkgQ1BVLWxvY2FsIHZhcmlhYmxlcyB0aGF0IG90aGVyIENQVXMgbmVpdGhlcgotCQkgKiBhY2Nlc3Mgbm9yIG1vZGlmeSwgYXQgbGVhc3Qgbm90IHdoaWxlIHRoZSBjb3JyZXNwb25kaW5nCi0JCSAqIENQVSBpcyBvbmxpbmUuCisJCSAqIHJjdV9zY2hlZF9xcygpIGFuZCByY3VfYmhfcXMoKSByZWZlcmVuY2Ugb25seSBDUFUtbG9jYWwKKwkJICogdmFyaWFibGVzIHRoYXQgb3RoZXIgQ1BVcyBuZWl0aGVyIGFjY2VzcyBub3IgbW9kaWZ5LAorCQkgKiBhdCBsZWFzdCBub3Qgd2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcgQ1BVIGlzIG9ubGluZS4KIAkJICovCiAKLQkJcmN1X3FzY3RyX2luYyhjcHUpOwotCQlyY3VfYmhfcXNjdHJfaW5jKGNwdSk7CisJCXJjdV9zY2hlZF9xcyhjcHUpOworCQlyY3VfYmhfcXMoY3B1KTsKIAogCX0gZWxzZSBpZiAoIWluX3NvZnRpcnEoKSkgewogCkBAIC05ODksMTEgKzEwNDIsMTIgQEAKIAkJICogR2V0IGhlcmUgaWYgdGhpcyBDUFUgZGlkIG5vdCB0YWtlIGl0cyBpbnRlcnJ1cHQgZnJvbQogCQkgKiBzb2Z0aXJxLCBpbiBvdGhlciB3b3JkcywgaWYgaXQgaXMgbm90IGludGVycnVwdGluZwogCQkgKiBhIHJjdV9iaCByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIFRoaXMgaXMgYW4gX2JoCi0JCSAqIGNyaXRpY2FsIHNlY3Rpb24sIHNvIGNvdW50IGl0LgorCQkgKiBjcml0aWNhbCBzZWN0aW9uLCBzbyBub3RlIGl0LgogCQkgKi8KIAotCQlyY3VfYmhfcXNjdHJfaW5jKGNwdSk7CisJCXJjdV9iaF9xcyhjcHUpOwogCX0KKwlyY3VfcHJlZW1wdF9jaGVja19jYWxsYmFja3MoY3B1KTsKIAlyYWlzZV9zb2Z0aXJxKFJDVV9TT0ZUSVJRKTsKIH0KIApAQCAtMTEzMiw2ICsxMTg2LDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJV0FSTl9PTl9PTkNFKHJkcC0+YmVlbm9ubGluZSA9PSAwKTsKKwogCS8qCiAJICogSWYgYW4gUkNVIEdQIGhhcyBnb25lIGxvbmcgZW5vdWdoLCBnbyBjaGVjayBmb3IgZHludGljawogCSAqIGlkbGUgQ1BVcyBhbmQsIGlmIG5lZWRlZCwgc2VuZCByZXNjaGVkIElQSXMuCkBAIC0xMTcwLDggKzEyMjYsMTAgQEAKIAkgKi8KIAlzbXBfbWIoKTsgLyogU2VlIGFib3ZlIGJsb2NrIGNvbW1lbnQuICovCiAKLQlfX3JjdV9wcm9jZXNzX2NhbGxiYWNrcygmcmN1X3N0YXRlLCAmX19nZXRfY3B1X3ZhcihyY3VfZGF0YSkpOworCV9fcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCZyY3Vfc2NoZWRfc3RhdGUsCisJCQkJJl9fZ2V0X2NwdV92YXIocmN1X3NjaGVkX2RhdGEpKTsKIAlfX3JjdV9wcm9jZXNzX2NhbGxiYWNrcygmcmN1X2JoX3N0YXRlLCAmX19nZXRfY3B1X3ZhcihyY3VfYmhfZGF0YSkpOworCXJjdV9wcmVlbXB0X3Byb2Nlc3NfY2FsbGJhY2tzKCk7CiAKIAkvKgogCSAqIE1lbW9yeSByZWZlcmVuY2VzIGZyb20gYW55IGxhdGVyIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMKQEAgLTEyMjcsMTMgKzEyODUsMTMgQEAKIH0KIAogLyoKLSAqIFF1ZXVlIGFuIFJDVSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhIGdyYWNlIHBlcmlvZC4KKyAqIFF1ZXVlIGFuIFJDVS1zY2hlZCBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhIGdyYWNlIHBlcmlvZC4KICAqLwotdm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkpCit2b2lkIGNhbGxfcmN1X3NjaGVkKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSkKIHsKLQlfX2NhbGxfcmN1KGhlYWQsIGZ1bmMsICZyY3Vfc3RhdGUpOworCV9fY2FsbF9yY3UoaGVhZCwgZnVuYywgJnJjdV9zY2hlZF9zdGF0ZSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7CitFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdV9zY2hlZCk7CiAKIC8qCiAgKiBRdWV1ZSBhbiBSQ1UgZm9yIGludm9jYXRpb24gYWZ0ZXIgYSBxdWlja2VyIGdyYWNlIHBlcmlvZC4KQEAgLTEzMDUsMTAgKzEzNjMsMTEgQEAKICAqIGJ5IHRoZSBjdXJyZW50IENQVSwgcmV0dXJuaW5nIDEgaWYgc28uICBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlCiAgKiBSQ1UgaW1wbGVtZW50YXRpb247IGl0IGlzIC1ub3QtIGFuIGV4cG9ydGVkIG1lbWJlciBvZiB0aGUgUkNVIEFQSS4KICAqLwotaW50IHJjdV9wZW5kaW5nKGludCBjcHUpCitzdGF0aWMgaW50IHJjdV9wZW5kaW5nKGludCBjcHUpCiB7Ci0JcmV0dXJuIF9fcmN1X3BlbmRpbmcoJnJjdV9zdGF0ZSwgJnBlcl9jcHUocmN1X2RhdGEsIGNwdSkpIHx8Ci0JICAgICAgIF9fcmN1X3BlbmRpbmcoJnJjdV9iaF9zdGF0ZSwgJnBlcl9jcHUocmN1X2JoX2RhdGEsIGNwdSkpOworCXJldHVybiBfX3JjdV9wZW5kaW5nKCZyY3Vfc2NoZWRfc3RhdGUsICZwZXJfY3B1KHJjdV9zY2hlZF9kYXRhLCBjcHUpKSB8fAorCSAgICAgICBfX3JjdV9wZW5kaW5nKCZyY3VfYmhfc3RhdGUsICZwZXJfY3B1KHJjdV9iaF9kYXRhLCBjcHUpKSB8fAorCSAgICAgICByY3VfcHJlZW1wdF9wZW5kaW5nKGNwdSk7CiB9CiAKIC8qCkBAIC0xMzIwLDI3ICsxMzc5LDQ2IEBACiBpbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1KQogewogCS8qIFJDVSBjYWxsYmFja3MgZWl0aGVyIHJlYWR5IG9yIHBlbmRpbmc/ICovCi0JcmV0dXJuIHBlcl9jcHUocmN1X2RhdGEsIGNwdSkubnh0bGlzdCB8fAotCSAgICAgICBwZXJfY3B1KHJjdV9iaF9kYXRhLCBjcHUpLm54dGxpc3Q7CisJcmV0dXJuIHBlcl9jcHUocmN1X3NjaGVkX2RhdGEsIGNwdSkubnh0bGlzdCB8fAorCSAgICAgICBwZXJfY3B1KHJjdV9iaF9kYXRhLCBjcHUpLm54dGxpc3QgfHwKKwkgICAgICAgcmN1X3ByZWVtcHRfbmVlZHNfY3B1KGNwdSk7CiB9CiAKIC8qCi0gKiBJbml0aWFsaXplIGEgQ1BVJ3MgcGVyLUNQVSBSQ1UgZGF0YS4gIFdlIHRha2UgdGhpcyAic2NvcmNoZWQgZWFydGgiCi0gKiBhcHByb2FjaCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgaG93IGxvbmcgdGhlIENQVSBoYXMKLSAqIGJlZW4gZ29uZSwgb3Igd2hldGhlciBpdCBldmVyIHdhcyBvbmxpbmUgcHJldmlvdXNseS4gIFdlIGRvIHRydXN0IHRoZQotICogLT5teW5vZGUgZmllbGQsIGFzIGl0IGlzIGNvbnN0YW50IGZvciBhIGdpdmVuIHN0cnVjdCByY3VfZGF0YSBhbmQKLSAqIGluaXRpYWxpemVkIGR1cmluZyBlYXJseSBib290LgotICoKLSAqIE5vdGUgdGhhdCBvbmx5IG9uZSBvbmxpbmUgb3Igb2ZmbGluZSBldmVudCBjYW4gYmUgaGFwcGVuaW5nIGF0IGEgZ2l2ZW4KLSAqIHRpbWUuICBOb3RlIGFsc28gdGhhdCB3ZSBjYW4gYWNjZXB0IHNvbWUgc2xvcCBpbiB0aGUgcnNwLT5jb21wbGV0ZWQKLSAqIGFjY2VzcyBkdWUgdG8gdGhlIGZhY3QgdGhhdCB0aGlzIENQVSBjYW5ub3QgcG9zc2libHkgaGF2ZSBhbnkgUkNVCi0gKiBjYWxsYmFja3MgaW4gZmxpZ2h0IHlldC4KKyAqIERvIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiBvZiBhIENQVSdzIHBlci1DUFUgUkNVIGRhdGEuCiAgKi8KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdAotcmN1X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQorc3RhdGljIHZvaWQgX19pbml0CityY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUsIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOworCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcnNwLT5yZGFbY3B1XTsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOworCisJLyogU2V0IHVwIGxvY2FsIHN0YXRlLCBlbnN1cmluZyBjb25zaXN0ZW50IHZpZXcgb2YgZ2xvYmFsIHN0YXRlLiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyZHAtPmdycG1hc2sgPSAxVUwgPDwgKGNwdSAtIHJkcC0+bXlub2RlLT5ncnBsbyk7CisJcmRwLT5ueHRsaXN0ID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgUkNVX05FWFRfU0laRTsgaSsrKQorCQlyZHAtPm54dHRhaWxbaV0gPSAmcmRwLT5ueHRsaXN0OworCXJkcC0+cWxlbiA9IDA7CisjaWZkZWYgQ09ORklHX05PX0haCisJcmRwLT5keW50aWNrcyA9ICZwZXJfY3B1KHJjdV9keW50aWNrcywgY3B1KTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCisJcmRwLT5jcHUgPSBjcHU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGEgQ1BVJ3MgcGVyLUNQVSBSQ1UgZGF0YS4gIE5vdGUgdGhhdCBvbmx5IG9uZSBvbmxpbmUgb3IKKyAqIG9mZmxpbmUgZXZlbnQgY2FuIGJlIGhhcHBlbmluZyBhdCBhIGdpdmVuIHRpbWUuICBOb3RlIGFsc28gdGhhdCB3ZQorICogY2FuIGFjY2VwdCBzb21lIHNsb3AgaW4gdGhlIHJzcC0+Y29tcGxldGVkIGFjY2VzcyBkdWUgdG8gdGhlIGZhY3QKKyAqIHRoYXQgdGhpcyBDUFUgY2Fubm90IHBvc3NpYmx5IGhhdmUgYW55IFJDVSBjYWxsYmFja3MgaW4gZmxpZ2h0IHlldC4KKyAqLworc3RhdGljIHZvaWQgX19jcHVpbml0CityY3VfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIGludCBwcmVlbXB0YWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgbGFzdGNvbXA7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcnNwLT5yZGFbY3B1XTsKQEAgLTEzNTQsMTcgKzE0MzIsOSBAQAogCXJkcC0+cGFzc2VkX3F1aWVzYyA9IDA7ICAvKiBXZSBjb3VsZCBiZSByYWNpbmcgd2l0aCBuZXcgR1AsICovCiAJcmRwLT5xc19wZW5kaW5nID0gMTsJIC8qICBzbyBzZXQgdXAgdG8gcmVzcG9uZCB0byBjdXJyZW50IEdQLiAqLwogCXJkcC0+YmVlbm9ubGluZSA9IDE7CSAvKiBXZSBoYXZlIG5vdyBiZWVuIG9ubGluZS4gKi8KKwlyZHAtPnByZWVtcHRhYmxlID0gcHJlZW1wdGFibGU7CiAJcmRwLT5wYXNzZWRfcXVpZXNjX2NvbXBsZXRlZCA9IGxhc3Rjb21wIC0gMTsKLQlyZHAtPmdycG1hc2sgPSAxVUwgPDwgKGNwdSAtIHJkcC0+bXlub2RlLT5ncnBsbyk7Ci0JcmRwLT5ueHRsaXN0ID0gTlVMTDsKLQlmb3IgKGkgPSAwOyBpIDwgUkNVX05FWFRfU0laRTsgaSsrKQotCQlyZHAtPm54dHRhaWxbaV0gPSAmcmRwLT5ueHRsaXN0OwotCXJkcC0+cWxlbiA9IDA7CiAJcmRwLT5ibGltaXQgPSBibGltaXQ7Ci0jaWZkZWYgQ09ORklHX05PX0haCi0JcmRwLT5keW50aWNrcyA9ICZwZXJfY3B1KHJjdV9keW50aWNrcywgY3B1KTsKLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCi0JcmRwLT5jcHUgPSBjcHU7CiAJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAogCS8qCkBAIC0xNDA1LDE2ICsxNDc1LDE2IEBACiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3Vfb25saW5lX2NwdShpbnQgY3B1KQogewotCXJjdV9pbml0X3BlcmNwdV9kYXRhKGNwdSwgJnJjdV9zdGF0ZSk7Ci0JcmN1X2luaXRfcGVyY3B1X2RhdGEoY3B1LCAmcmN1X2JoX3N0YXRlKTsKLQlvcGVuX3NvZnRpcnEoUkNVX1NPRlRJUlEsIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyk7CisJcmN1X2luaXRfcGVyY3B1X2RhdGEoY3B1LCAmcmN1X3NjaGVkX3N0YXRlLCAwKTsKKwlyY3VfaW5pdF9wZXJjcHVfZGF0YShjcHUsICZyY3VfYmhfc3RhdGUsIDApOworCXJjdV9wcmVlbXB0X2luaXRfcGVyY3B1X2RhdGEoY3B1KTsKIH0KIAogLyoKLSAqIEhhbmRsZSBDUFUgb25saW5lL29mZmxpbmUgbm90aWZjYXRpb24gZXZlbnRzLgorICogSGFuZGxlIENQVSBvbmxpbmUvb2ZmbGluZSBub3RpZmljYXRpb24gZXZlbnRzLgogICovCi1zdGF0aWMgaW50IF9fY3B1aW5pdCByY3VfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCi0JCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCitpbnQgX19jcHVpbml0IHJjdV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJbG9uZyBjcHUgPSAobG9uZyloY3B1OwogCkBAIC0xNDg2LDYgKzE1NTYsNyBAQAogCQlybnAgPSByc3AtPmxldmVsW2ldOwogCQlmb3IgKGogPSAwOyBqIDwgcnNwLT5sZXZlbGNudFtpXTsgaisrLCBybnArKykgewogCQkJc3Bpbl9sb2NrX2luaXQoJnJucC0+bG9jayk7CisJCQlybnAtPmdwbnVtID0gMDsKIAkJCXJucC0+cXNtYXNrID0gMDsKIAkJCXJucC0+cXNtYXNraW5pdCA9IDA7CiAJCQlybnAtPmdycGxvID0gaiAqIGNwdXN0cmlkZTsKQEAgLTE1MDMsMTYgKzE1NzQsMjAgQEAKIAkJCQkJICAgICAgaiAvIHJzcC0+bGV2ZWxzcHJlYWRbaSAtIDFdOwogCQkJfQogCQkJcm5wLT5sZXZlbCA9IGk7CisJCQlJTklUX0xJU1RfSEVBRCgmcm5wLT5ibG9ja2VkX3Rhc2tzWzBdKTsKKwkJCUlOSVRfTElTVF9IRUFEKCZybnAtPmJsb2NrZWRfdGFza3NbMV0pOwogCQl9CiAJfQogfQogCiAvKgotICogSGVscGVyIG1hY3JvIGZvciBfX3JjdV9pbml0KCkuICBUbyBiZSB1c2VkIG5vd2hlcmUgZWxzZSEKLSAqIEFzc2lnbnMgbGVhZiBub2RlIHBvaW50ZXJzIGludG8gZWFjaCBDUFUncyByY3VfZGF0YSBzdHJ1Y3R1cmUuCisgKiBIZWxwZXIgbWFjcm8gZm9yIF9fcmN1X2luaXQoKSBhbmQgX19yY3VfaW5pdF9wcmVlbXB0KCkuICBUbyBiZSB1c2VkCisgKiBub3doZXJlIGVsc2UhICBBc3NpZ25zIGxlYWYgbm9kZSBwb2ludGVycyBpbnRvIGVhY2ggQ1BVJ3MgcmN1X2RhdGEKKyAqIHN0cnVjdHVyZS4KICAqLwotI2RlZmluZSBSQ1VfREFUQV9QVFJfSU5JVChyc3AsIHJjdV9kYXRhKSBcCisjZGVmaW5lIFJDVV9JTklUX0ZMQVZPUihyc3AsIHJjdV9kYXRhKSBcCiBkbyB7IFwKKwlyY3VfaW5pdF9vbmUocnNwKTsgXAogCXJucCA9IChyc3ApLT5sZXZlbFtOVU1fUkNVX0xWTFMgLSAxXTsgXAogCWogPSAwOyBcCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsgXApAQCAtMTUyMCwzMiArMTU5NSw0MyBAQAogCQkJaisrOyBcCiAJCXBlcl9jcHUocmN1X2RhdGEsIGkpLm15bm9kZSA9ICZybnBbal07IFwKIAkJKHJzcCktPnJkYVtpXSA9ICZwZXJfY3B1KHJjdV9kYXRhLCBpKTsgXAorCQlyY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGksIHJzcCk7IFwKIAl9IFwKIH0gd2hpbGUgKDApCiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSByY3VfbmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwJPSByY3VfY3B1X25vdGlmeSwKLX07CisjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKIAotdm9pZCBfX2luaXQgX19yY3VfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgX19yY3VfaW5pdF9wcmVlbXB0KHZvaWQpCiB7Ci0JaW50IGk7CQkJLyogQWxsIHVzZWQgYnkgUkNVX0RBVEFfUFRSX0lOSVQoKS4gKi8KKwlpbnQgaTsJCQkvKiBBbGwgdXNlZCBieSBSQ1VfSU5JVF9GTEFWT1IoKS4gKi8KIAlpbnQgajsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAotCXByaW50ayhLRVJOX0lORk8gIkhpZXJhcmNoaWNhbCBSQ1UgaW1wbGVtZW50YXRpb24uXG4iKTsKKwlSQ1VfSU5JVF9GTEFWT1IoJnJjdV9wcmVlbXB0X3N0YXRlLCByY3VfcHJlZW1wdF9kYXRhKTsKK30KKworI2Vsc2UgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCisKK3ZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKQoreworfQorCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCisKK3ZvaWQgX19pbml0IF9fcmN1X2luaXQodm9pZCkKK3sKKwlpbnQgaTsJCQkvKiBBbGwgdXNlZCBieSBSQ1VfSU5JVF9GTEFWT1IoKS4gKi8KKwlpbnQgajsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKKworCXJjdV9ib290dXBfYW5ub3VuY2UoKTsKICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgogCXByaW50ayhLRVJOX0lORk8gIlJDVS1iYXNlZCBkZXRlY3Rpb24gb2Ygc3RhbGxlZCBDUFVzIGlzIGVuYWJsZWQuXG4iKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KLQlyY3VfaW5pdF9vbmUoJnJjdV9zdGF0ZSk7Ci0JUkNVX0RBVEFfUFRSX0lOSVQoJnJjdV9zdGF0ZSwgcmN1X2RhdGEpOwotCXJjdV9pbml0X29uZSgmcmN1X2JoX3N0YXRlKTsKLQlSQ1VfREFUQV9QVFJfSU5JVCgmcmN1X2JoX3N0YXRlLCByY3VfYmhfZGF0YSk7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCi0JCXJjdV9jcHVfbm90aWZ5KCZyY3VfbmIsIENQVV9VUF9QUkVQQVJFLCAodm9pZCAqKShsb25nKWkpOwotCS8qIFJlZ2lzdGVyIG5vdGlmaWVyIGZvciBub24tYm9vdCBDUFVzICovCi0JcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZyY3VfbmIpOworCVJDVV9JTklUX0ZMQVZPUigmcmN1X3NjaGVkX3N0YXRlLCByY3Vfc2NoZWRfZGF0YSk7CisJUkNVX0lOSVRfRkxBVk9SKCZyY3VfYmhfc3RhdGUsIHJjdV9iaF9kYXRhKTsKKwlfX3JjdV9pbml0X3ByZWVtcHQoKTsKKwlvcGVuX3NvZnRpcnEoUkNVX1NPRlRJUlEsIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyk7CiB9CiAKIG1vZHVsZV9wYXJhbShibGltaXQsIGludCwgMCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5oIGIva2VybmVsL3JjdXRyZWUuaAppbmRleCA1ZTg3MmJiLi5iZjhhNmY5IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5oCisrKyBiL2tlcm5lbC9yY3V0cmVlLmgKQEAgLTEsMTAgKzEsMjU5IEBACisvKgorICogUmVhZC1Db3B5IFVwZGF0ZSBtZWNoYW5pc20gZm9yIG11dHVhbCBleGNsdXNpb24gKHRyZWUtYmFzZWQgdmVyc2lvbikKKyAqIEludGVybmFsIG5vbi1wdWJsaWMgZGVmaW5pdGlvbnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAyMDA4CisgKgorICogQXV0aG9yOiBJbmdvIE1vbG5hciA8bWluZ29AZWx0ZS5odT4KKyAqCSAgIFBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CisKKy8qCisgKiBEZWZpbmUgc2hhcGUgb2YgaGllcmFyY2h5IGJhc2VkIG9uIE5SX0NQVVMgYW5kIENPTkZJR19SQ1VfRkFOT1VULgorICogSW4gdGhlb3J5LCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gYWRkIG1vcmUgbGV2ZWxzIHN0cmFpZ2h0Zm9yd2FyZGx5LgorICogSW4gcHJhY3RpY2UsIHRoaXMgaGFzIG5vdCBiZWVuIHRlc3RlZCwgc28gdGhlcmUgaXMgcHJvYmFibHkgc29tZQorICogYnVnIHNvbWV3aGVyZS4KKyAqLworI2RlZmluZSBNQVhfUkNVX0xWTFMgMworI2RlZmluZSBSQ1VfRkFOT1VUCSAgICAgIChDT05GSUdfUkNVX0ZBTk9VVCkKKyNkZWZpbmUgUkNVX0ZBTk9VVF9TUQkgICAgICAoUkNVX0ZBTk9VVCAqIFJDVV9GQU5PVVQpCisjZGVmaW5lIFJDVV9GQU5PVVRfQ1VCRQkgICAgICAoUkNVX0ZBTk9VVF9TUSAqIFJDVV9GQU5PVVQpCisKKyNpZiBOUl9DUFVTIDw9IFJDVV9GQU5PVVQKKyMgIGRlZmluZSBOVU1fUkNVX0xWTFMJICAgICAgMQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzAJICAgICAgMQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgKE5SX0NQVVMpCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMgkgICAgICAwCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMwkgICAgICAwCisjZWxpZiBOUl9DUFVTIDw9IFJDVV9GQU5PVVRfU1EKKyMgIGRlZmluZSBOVU1fUkNVX0xWTFMJICAgICAgMgorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzAJICAgICAgMQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgKCgoTlJfQ1BVUykgKyBSQ1VfRkFOT1VUIC0gMSkgLyBSQ1VfRkFOT1VUKQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzIJICAgICAgKE5SX0NQVVMpCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMwkgICAgICAwCisjZWxpZiBOUl9DUFVTIDw9IFJDVV9GQU5PVVRfQ1VCRQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMUwkgICAgICAzCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMAkgICAgICAxCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMQkgICAgICAoKChOUl9DUFVTKSArIFJDVV9GQU5PVVRfU1EgLSAxKSAvIFJDVV9GQU5PVVRfU1EpCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMgkgICAgICAoKChOUl9DUFVTKSArIChSQ1VfRkFOT1VUKSAtIDEpIC8gKFJDVV9GQU5PVVQpKQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzMJICAgICAgTlJfQ1BVUworI2Vsc2UKKyMgZXJyb3IgIkNPTkZJR19SQ1VfRkFOT1VUIGluc3VmZmljaWVudCBmb3IgTlJfQ1BVUyIKKyNlbmRpZiAvKiAjaWYgKE5SX0NQVVMpIDw9IFJDVV9GQU5PVVQgKi8KKworI2RlZmluZSBSQ1VfU1VNIChOVU1fUkNVX0xWTF8wICsgTlVNX1JDVV9MVkxfMSArIE5VTV9SQ1VfTFZMXzIgKyBOVU1fUkNVX0xWTF8zKQorI2RlZmluZSBOVU1fUkNVX05PREVTIChSQ1VfU1VNIC0gTlJfQ1BVUykKKworLyoKKyAqIER5bnRpY2tzIHBlci1DUFUgc3RhdGUuCisgKi8KK3N0cnVjdCByY3VfZHludGlja3MgeworCWludCBkeW50aWNrc19uZXN0aW5nOwkvKiBUcmFjayBuZXN0aW5nIGxldmVsLCBzb3J0IG9mLiAqLworCWludCBkeW50aWNrczsJCS8qIEV2ZW4gdmFsdWUgZm9yIGR5bnRpY2tzLWlkbGUsIGVsc2Ugb2RkLiAqLworCWludCBkeW50aWNrc19ubWk7CS8qIEV2ZW4gdmFsdWUgZm9yIGVpdGhlciBkeW50aWNrcy1pZGxlIG9yICovCisJCQkJLyogIG5vdCBpbiBubWkgaGFuZGxlciwgZWxzZSBvZGQuICBTbyB0aGlzICovCisJCQkJLyogIHJlbWFpbnMgZXZlbiBmb3Igbm1pIGZyb20gaXJxIGhhbmRsZXIuICovCit9OworCisvKgorICogRGVmaW5pdGlvbiBmb3Igbm9kZSB3aXRoaW4gdGhlIFJDVSBncmFjZS1wZXJpb2QtZGV0ZWN0aW9uIGhpZXJhcmNoeS4KKyAqLworc3RydWN0IHJjdV9ub2RlIHsKKwlzcGlubG9ja190IGxvY2s7CisJbG9uZwlncG51bTsJCS8qIEN1cnJlbnQgZ3JhY2UgcGVyaW9kIGZvciB0aGlzIG5vZGUuICovCisJCQkJLyogIFRoaXMgd2lsbCBlaXRoZXIgYmUgZXF1YWwgdG8gb3Igb25lICovCisJCQkJLyogIGJlaGluZCB0aGUgcm9vdCByY3Vfbm9kZSdzIGdwbnVtLiAqLworCXVuc2lnbmVkIGxvbmcgcXNtYXNrOwkvKiBDUFVzIG9yIGdyb3VwcyB0aGF0IG5lZWQgdG8gc3dpdGNoIGluICovCisJCQkJLyogIG9yZGVyIGZvciBjdXJyZW50IGdyYWNlIHBlcmlvZCB0byBwcm9jZWVkLiovCisJdW5zaWduZWQgbG9uZyBxc21hc2tpbml0OworCQkJCS8qIFBlci1HUCBpbml0aWFsaXphdGlvbiBmb3IgcXNtYXNrLiAqLworCXVuc2lnbmVkIGxvbmcgZ3JwbWFzazsJLyogTWFzayB0byBhcHBseSB0byBwYXJlbnQgcXNtYXNrLiAqLworCWludAlncnBsbzsJCS8qIGxvd2VzdC1udW1iZXJlZCBDUFUgb3IgZ3JvdXAgaGVyZS4gKi8KKwlpbnQJZ3JwaGk7CQkvKiBoaWdoZXN0LW51bWJlcmVkIENQVSBvciBncm91cCBoZXJlLiAqLworCXU4CWdycG51bTsJCS8qIENQVS9ncm91cCBudW1iZXIgZm9yIG5leHQgbGV2ZWwgdXAuICovCisJdTgJbGV2ZWw7CQkvKiByb290IGlzIGF0IGxldmVsIDAuICovCisJc3RydWN0IHJjdV9ub2RlICpwYXJlbnQ7CisJc3RydWN0IGxpc3RfaGVhZCBibG9ja2VkX3Rhc2tzWzJdOworCQkJCS8qIFRhc2tzIGJsb2NrZWQgaW4gUkNVIHJlYWQtc2lkZSBjcml0c2VjdC4gKi8KK30gX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcDsKKworLyogSW5kZXggdmFsdWVzIGZvciBueHR0YWlsIGFycmF5IGluIHN0cnVjdCByY3VfZGF0YS4gKi8KKyNkZWZpbmUgUkNVX0RPTkVfVEFJTAkJMAkvKiBBbHNvIFJDVV9XQUlUIGhlYWQuICovCisjZGVmaW5lIFJDVV9XQUlUX1RBSUwJCTEJLyogQWxzbyBSQ1VfTkVYVF9SRUFEWSBoZWFkLiAqLworI2RlZmluZSBSQ1VfTkVYVF9SRUFEWV9UQUlMCTIJLyogQWxzbyBSQ1VfTkVYVCBoZWFkLiAqLworI2RlZmluZSBSQ1VfTkVYVF9UQUlMCQkzCisjZGVmaW5lIFJDVV9ORVhUX1NJWkUJCTQKKworLyogUGVyLUNQVSBkYXRhIGZvciByZWFkLWNvcHkgdXBkYXRlLiAqLworc3RydWN0IHJjdV9kYXRhIHsKKwkvKiAxKSBxdWllc2NlbnQtc3RhdGUgYW5kIGdyYWNlLXBlcmlvZCBoYW5kbGluZyA6ICovCisJbG9uZwkJY29tcGxldGVkOwkvKiBUcmFjayByc3AtPmNvbXBsZXRlZCBncCBudW1iZXIgKi8KKwkJCQkJLyogIGluIG9yZGVyIHRvIGRldGVjdCBHUCBlbmQuICovCisJbG9uZwkJZ3BudW07CQkvKiBIaWdoZXN0IGdwIG51bWJlciB0aGF0IHRoaXMgQ1BVICovCisJCQkJCS8qICBpcyBhd2FyZSBvZiBoYXZpbmcgc3RhcnRlZC4gKi8KKwlsb25nCQlwYXNzZWRfcXVpZXNjX2NvbXBsZXRlZDsKKwkJCQkJLyogVmFsdWUgb2YgY29tcGxldGVkIGF0IHRpbWUgb2YgcXMuICovCisJYm9vbAkJcGFzc2VkX3F1aWVzYzsJLyogVXNlci1tb2RlL2lkbGUgbG9vcCBldGMuICovCisJYm9vbAkJcXNfcGVuZGluZzsJLyogQ29yZSB3YWl0cyBmb3IgcXVpZXNjIHN0YXRlLiAqLworCWJvb2wJCWJlZW5vbmxpbmU7CS8qIENQVSBvbmxpbmUgYXQgbGVhc3Qgb25jZS4gKi8KKwlib29sCQlwcmVlbXB0YWJsZTsJLyogUHJlZW1wdGFibGUgUkNVPyAqLworCXN0cnVjdCByY3Vfbm9kZSAqbXlub2RlOwkvKiBUaGlzIENQVSdzIGxlYWYgb2YgaGllcmFyY2h5ICovCisJdW5zaWduZWQgbG9uZyBncnBtYXNrOwkJLyogTWFzayB0byBhcHBseSB0byBsZWFmIHFzbWFzay4gKi8KKworCS8qIDIpIGJhdGNoIGhhbmRsaW5nICovCisJLyoKKwkgKiBJZiBueHRsaXN0IGlzIG5vdCBOVUxMLCBpdCBpcyBwYXJ0aXRpb25lZCBhcyBmb2xsb3dzLgorCSAqIEFueSBvZiB0aGUgcGFydGl0aW9ucyBtaWdodCBiZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSB0aGUKKwkgKiBwb2ludGVyIHRvIHRoYXQgcGFydGl0aW9uIHdpbGwgYmUgZXF1YWwgdG8gdGhlIHBvaW50ZXIgZm9yCisJICogdGhlIGZvbGxvd2luZyBwYXJ0aXRpb24uICBXaGVuIHRoZSBsaXN0IGlzIGVtcHR5LCBhbGwgb2YKKwkgKiB0aGUgbnh0dGFpbCBlbGVtZW50cyBwb2ludCB0byBueHRsaXN0LCB3aGljaCBpcyBOVUxMLgorCSAqCisJICogWypueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdLCBOVUxMID0gKm54dHRhaWxbUkNVX05FWFRfVEFJTF0pOgorCSAqCUVudHJpZXMgdGhhdCBtaWdodCBoYXZlIGFycml2ZWQgYWZ0ZXIgY3VycmVudCBHUCBlbmRlZAorCSAqIFsqbnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSwgKm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0pOgorCSAqCUVudHJpZXMga25vd24gdG8gaGF2ZSBhcnJpdmVkIGJlZm9yZSBjdXJyZW50IEdQIGVuZGVkCisJICogWypueHR0YWlsW1JDVV9ET05FX1RBSUxdLCAqbnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSk6CisJICoJRW50cmllcyB0aGF0IGJhdGNoICMgPD0gLT5jb21wbGV0ZWQgLSAxOiB3YWl0aW5nIGZvciBjdXJyZW50IEdQCisJICogW254dGxpc3QsICpueHR0YWlsW1JDVV9ET05FX1RBSUxdKToKKwkgKglFbnRyaWVzIHRoYXQgYmF0Y2ggIyA8PSAtPmNvbXBsZXRlZAorCSAqCVRoZSBncmFjZSBwZXJpb2QgZm9yIHRoZXNlIGVudHJpZXMgaGFzIGNvbXBsZXRlZCwgYW5kCisJICoJdGhlIG90aGVyIGdyYWNlLXBlcmlvZC1jb21wbGV0ZWQgZW50cmllcyBtYXkgYmUgbW92ZWQKKwkgKgloZXJlIHRlbXBvcmFyaWx5IGluIHJjdV9wcm9jZXNzX2NhbGxiYWNrcygpLgorCSAqLworCXN0cnVjdCByY3VfaGVhZCAqbnh0bGlzdDsKKwlzdHJ1Y3QgcmN1X2hlYWQgKipueHR0YWlsW1JDVV9ORVhUX1NJWkVdOworCWxvbmcJCXFsZW47IAkgCS8qICMgb2YgcXVldWVkIGNhbGxiYWNrcyAqLworCWxvbmcJCWJsaW1pdDsJCS8qIFVwcGVyIGxpbWl0IG9uIGEgcHJvY2Vzc2VkIGJhdGNoICovCisKKyNpZmRlZiBDT05GSUdfTk9fSFoKKwkvKiAzKSBkeW50aWNrcyBpbnRlcmZhY2UuICovCisJc3RydWN0IHJjdV9keW50aWNrcyAqZHludGlja3M7CS8qIFNoYXJlZCBwZXItQ1BVIGR5bnRpY2tzIHN0YXRlLiAqLworCWludCBkeW50aWNrc19zbmFwOwkJLyogUGVyLUdQIHRyYWNraW5nIGZvciBkeW50aWNrcy4gKi8KKwlpbnQgZHludGlja3Nfbm1pX3NuYXA7CQkvKiBQZXItR1AgdHJhY2tpbmcgZm9yIGR5bnRpY2tzX25taS4gKi8KKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCisKKwkvKiA0KSByZWFzb25zIHRoaXMgQ1BVIG5lZWRlZCB0byBiZSBraWNrZWQgYnkgZm9yY2VfcXVpZXNjZW50X3N0YXRlICovCisjaWZkZWYgQ09ORklHX05PX0haCisJdW5zaWduZWQgbG9uZyBkeW50aWNrc19mcXM7CS8qIEtpY2tlZCBkdWUgdG8gZHludGlja3MgaWRsZS4gKi8KKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCisJdW5zaWduZWQgbG9uZyBvZmZsaW5lX2ZxczsJLyogS2lja2VkIGR1ZSB0byBiZWluZyBvZmZsaW5lLiAqLworCXVuc2lnbmVkIGxvbmcgcmVzY2hlZF9pcGk7CS8qIFNlbnQgYSByZXNjaGVkIElQSS4gKi8KKworCS8qIDUpIF9fcmN1X3BlbmRpbmcoKSBzdGF0aXN0aWNzLiAqLworCWxvbmcgbl9yY3VfcGVuZGluZzsJCS8qIHJjdV9wZW5kaW5nKCkgY2FsbHMgc2luY2UgYm9vdC4gKi8KKwlsb25nIG5fcnBfcXNfcGVuZGluZzsKKwlsb25nIG5fcnBfY2JfcmVhZHk7CisJbG9uZyBuX3JwX2NwdV9uZWVkc19ncDsKKwlsb25nIG5fcnBfZ3BfY29tcGxldGVkOworCWxvbmcgbl9ycF9ncF9zdGFydGVkOworCWxvbmcgbl9ycF9uZWVkX2ZxczsKKwlsb25nIG5fcnBfbmVlZF9ub3RoaW5nOworCisJaW50IGNwdTsKK307CisKKy8qIFZhbHVlcyBmb3Igc2lnbmFsZWQgZmllbGQgaW4gc3RydWN0IHJjdV9zdGF0ZS4gKi8KKyNkZWZpbmUgUkNVX0dQX0lOSVQJCTAJLyogR3JhY2UgcGVyaW9kIGJlaW5nIGluaXRpYWxpemVkLiAqLworI2RlZmluZSBSQ1VfU0FWRV9EWU5USUNLCTEJLyogTmVlZCB0byBzY2FuIGR5bnRpY2sgc3RhdGUuICovCisjZGVmaW5lIFJDVV9GT1JDRV9RUwkJMgkvKiBOZWVkIHRvIGZvcmNlIHF1aWVzY2VudCBzdGF0ZS4gKi8KKyNpZmRlZiBDT05GSUdfTk9fSFoKKyNkZWZpbmUgUkNVX1NJR05BTF9JTklUCQlSQ1VfU0FWRV9EWU5USUNLCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCisjZGVmaW5lIFJDVV9TSUdOQUxfSU5JVAkJUkNVX0ZPUkNFX1FTCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19OT19IWiAqLworCisjZGVmaW5lIFJDVV9KSUZGSUVTX1RJTExfRk9SQ0VfUVMJIDMJLyogZm9yIHJzcC0+amlmZmllc19mb3JjZV9xcyAqLworI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCisjZGVmaW5lIFJDVV9TRUNPTkRTX1RJTExfU1RBTExfQ0hFQ0sgICAoMTAgKiBIWikgIC8qIGZvciByc3AtPmppZmZpZXNfc3RhbGwgKi8KKyNkZWZpbmUgUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9SRUNIRUNLICgzMCAqIEhaKSAgLyogZm9yIHJzcC0+amlmZmllc19zdGFsbCAqLworI2RlZmluZSBSQ1VfU1RBTExfUkFUX0RFTEFZCQkyCSAgLyogQWxsb3cgb3RoZXIgQ1BVcyB0aW1lICovCisJCQkJCQkgIC8qICB0byB0YWtlIGF0IGxlYXN0IG9uZSAqLworCQkJCQkJICAvKiAgc2NoZWR1bGluZyBjbG9jayBpcnEgKi8KKwkJCQkJCSAgLyogIGJlZm9yZSByYXR0aW5nIG9uIHRoZW0uICovCisKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KKworLyoKKyAqIFJDVSBnbG9iYWwgc3RhdGUsIGluY2x1ZGluZyBub2RlIGhpZXJhcmNoeS4gIFRoaXMgaGllcmFyY2h5IGlzCisgKiByZXByZXNlbnRlZCBpbiAiaGVhcCIgZm9ybSBpbiBhIGRlbnNlIGFycmF5LiAgVGhlIHJvb3QgKGZpcnN0IGxldmVsKQorICogb2YgdGhlIGhpZXJhcmNoeSBpcyBpbiAtPm5vZGVbMF0gKHJlZmVyZW5jZWQgYnkgLT5sZXZlbFswXSksIHRoZSBzZWNvbmQKKyAqIGxldmVsIGluIC0+bm9kZVsxXSB0aHJvdWdoIC0+bm9kZVttXSAoLT5ub2RlWzFdIHJlZmVyZW5jZWQgYnkgLT5sZXZlbFsxXSksCisgKiBhbmQgdGhlIHRoaXJkIGxldmVsIGluIC0+bm9kZVttKzFdIGFuZCBmb2xsb3dpbmcgKC0+bm9kZVttKzFdIHJlZmVyZW5jZWQKKyAqIGJ5IC0+bGV2ZWxbMl0pLiAgVGhlIG51bWJlciBvZiBsZXZlbHMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbnVtYmVyIG9mCisgKiBDUFVzIGFuZCBieSBDT05GSUdfUkNVX0ZBTk9VVC4gIFNtYWxsIHN5c3RlbXMgd2lsbCBoYXZlIGEgImhpZXJhcmNoeSIKKyAqIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgcmN1X25vZGUuCisgKi8KK3N0cnVjdCByY3Vfc3RhdGUgeworCXN0cnVjdCByY3Vfbm9kZSBub2RlW05VTV9SQ1VfTk9ERVNdOwkvKiBIaWVyYXJjaHkuICovCisJc3RydWN0IHJjdV9ub2RlICpsZXZlbFtOVU1fUkNVX0xWTFNdOwkvKiBIaWVyYXJjaHkgbGV2ZWxzLiAqLworCXUzMiBsZXZlbGNudFtNQVhfUkNVX0xWTFMgKyAxXTsJCS8qICMgbm9kZXMgaW4gZWFjaCBsZXZlbC4gKi8KKwl1OCBsZXZlbHNwcmVhZFtOVU1fUkNVX0xWTFNdOwkJLyoga2lkcy9ub2RlIGluIGVhY2ggbGV2ZWwuICovCisJc3RydWN0IHJjdV9kYXRhICpyZGFbTlJfQ1BVU107CQkvKiBhcnJheSBvZiByZHAgcG9pbnRlcnMuICovCisKKwkvKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgZ3VhcmRlZCBieSB0aGUgcm9vdCByY3Vfbm9kZSdzIGxvY2suICovCisKKwl1OAlzaWduYWxlZCBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOworCQkJCQkJLyogRm9yY2UgUVMgc3RhdGUuICovCisJbG9uZwlncG51bTsJCQkJLyogQ3VycmVudCBncCBudW1iZXIuICovCisJbG9uZwljb21wbGV0ZWQ7CQkJLyogIyBvZiBsYXN0IGNvbXBsZXRlZCBncC4gKi8KKwlzcGlubG9ja190IG9ub2ZmbG9jazsJCQkvKiBleGNsdWRlIG9uL29mZmxpbmUgYW5kICovCisJCQkJCQkvKiAgc3RhcnRpbmcgbmV3IEdQLiAqLworCXNwaW5sb2NrX3QgZnFzbG9jazsJCQkvKiBPbmx5IG9uZSB0YXNrIGZvcmNpbmcgKi8KKwkJCQkJCS8qICBxdWllc2NlbnQgc3RhdGVzLiAqLworCXVuc2lnbmVkIGxvbmcgamlmZmllc19mb3JjZV9xczsJCS8qIFRpbWUgYXQgd2hpY2ggdG8gaW52b2tlICovCisJCQkJCQkvKiAgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkuICovCisJdW5zaWduZWQgbG9uZyBuX2ZvcmNlX3FzOwkJLyogTnVtYmVyIG9mIGNhbGxzIHRvICovCisJCQkJCQkvKiAgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkuICovCisJdW5zaWduZWQgbG9uZyBuX2ZvcmNlX3FzX2xoOwkJLyogfk51bWJlciBvZiBjYWxscyBsZWF2aW5nICovCisJCQkJCQkvKiAgZHVlIHRvIGxvY2sgdW5hdmFpbGFibGUuICovCisJdW5zaWduZWQgbG9uZyBuX2ZvcmNlX3FzX25ncDsJCS8qIE51bWJlciBvZiBjYWxscyBsZWF2aW5nICovCisJCQkJCQkvKiAgZHVlIHRvIG5vIEdQIGFjdGl2ZS4gKi8KKyNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgorCXVuc2lnbmVkIGxvbmcgZ3Bfc3RhcnQ7CQkJLyogVGltZSBhdCB3aGljaCBHUCBzdGFydGVkLCAqLworCQkJCQkJLyogIGJ1dCBpbiBqaWZmaWVzLiAqLworCXVuc2lnbmVkIGxvbmcgamlmZmllc19zdGFsbDsJCS8qIFRpbWUgYXQgd2hpY2ggdG8gY2hlY2sgKi8KKwkJCQkJCS8qICBmb3IgQ1BVIHN0YWxscy4gKi8KKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KKyNpZmRlZiBDT05GSUdfTk9fSFoKKwlsb25nIGR5bnRpY2tzX2NvbXBsZXRlZDsJCS8qIFZhbHVlIG9mIGNvbXBsZXRlZCBAIHNuYXAuICovCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLworfTsKKworI2lmZGVmIFJDVV9UUkVFX05PTkNPUkUKIAogLyoKICAqIFJDVSBpbXBsZW1lbnRhdGlvbiBpbnRlcm5hbCBkZWNsYXJhdGlvbnM6CiAgKi8KLWV4dGVybiBzdHJ1Y3QgcmN1X3N0YXRlIHJjdV9zdGF0ZTsKLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9kYXRhKTsKK2V4dGVybiBzdHJ1Y3QgcmN1X3N0YXRlIHJjdV9zY2hlZF9zdGF0ZTsKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9zY2hlZF9kYXRhKTsKIAogZXh0ZXJuIHN0cnVjdCByY3Vfc3RhdGUgcmN1X2JoX3N0YXRlOwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X2JoX2RhdGEpOwogCisjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKK2V4dGVybiBzdHJ1Y3QgcmN1X3N0YXRlIHJjdV9wcmVlbXB0X3N0YXRlOworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X3ByZWVtcHRfZGF0YSk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCisKKyNlbmRpZiAvKiAjaWZkZWYgUkNVX1RSRUVfTk9OQ09SRSAqLworCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaCBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3Nzg5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaApAQCAtMCwwICsxLDUzMiBAQAorLyoKKyAqIFJlYWQtQ29weSBVcGRhdGUgbWVjaGFuaXNtIGZvciBtdXR1YWwgZXhjbHVzaW9uICh0cmVlLWJhc2VkIHZlcnNpb24pCisgKiBJbnRlcm5hbCBub24tcHVibGljIGRlZmluaXRpb25zIHRoYXQgcHJvdmlkZSBlaXRoZXIgY2xhc3NpYworICogb3IgcHJlZW1wdGFibGUgc2VtYW50aWNzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29weXJpZ2h0IFJlZCBIYXQsIDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDkKKyAqCisgKiBBdXRob3I6IEluZ28gTW9sbmFyIDxtaW5nb0BlbHRlLmh1PgorICoJICAgUGF1bCBFLiBNY0tlbm5leSA8cGF1bG1ja0BsaW51eC52bmV0LmlibS5jb20+CisgKi8KKworCisjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKKworc3RydWN0IHJjdV9zdGF0ZSByY3VfcHJlZW1wdF9zdGF0ZSA9IFJDVV9TVEFURV9JTklUSUFMSVpFUihyY3VfcHJlZW1wdF9zdGF0ZSk7CitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9wcmVlbXB0X2RhdGEpOworCisvKgorICogVGVsbCB0aGVtIHdoYXQgUkNVIHRoZXkgYXJlIHJ1bm5pbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfYm9vdHVwX2Fubm91bmNlKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiRXhwZXJpbWVudGFsIHByZWVtcHRhYmxlIGhpZXJhcmNoaWNhbCBSQ1UgaW1wbGVtZW50YXRpb24uXG4iKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIFJDVS1wcmVlbXB0IGJhdGNoZXMgcHJvY2Vzc2VkIHRodXMgZmFyCisgKiBmb3IgZGVidWcgYW5kIHN0YXRpc3RpY3MuCisgKi8KK2xvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX3ByZWVtcHQodm9pZCkKK3sKKwlyZXR1cm4gcmN1X3ByZWVtcHRfc3RhdGUuY29tcGxldGVkOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhdGNoZXNfY29tcGxldGVkX3ByZWVtcHQpOworCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgUkNVIGJhdGNoZXMgcHJvY2Vzc2VkIHRodXMgZmFyIGZvciBkZWJ1ZyAmIHN0YXRzLgorICovCitsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKQoreworCXJldHVybiByY3VfYmF0Y2hlc19jb21wbGV0ZWRfcHJlZW1wdCgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhdGNoZXNfY29tcGxldGVkKTsKKworLyoKKyAqIFJlY29yZCBhIHByZWVtcHRhYmxlLVJDVSBxdWllc2NlbnQgc3RhdGUgZm9yIHRoZSBzcGVjaWZpZWQgQ1BVLiAgTm90ZQorICogdGhhdCB0aGlzIGp1c3QgbWVhbnMgdGhhdCB0aGUgdGFzayBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgQ1BVIGlzCisgKiBub3QgaW4gYSBxdWllc2NlbnQgc3RhdGUuICBUaGVyZSBtaWdodCBiZSBhbnkgbnVtYmVyIG9mIHRhc2tzIGJsb2NrZWQKKyAqIHdoaWxlIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKyAqLworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfcXNfcmVjb3JkKGludCBjcHUpCit7CisJc3RydWN0IHJjdV9kYXRhICpyZHAgPSAmcGVyX2NwdShyY3VfcHJlZW1wdF9kYXRhLCBjcHUpOworCXJkcC0+cGFzc2VkX3F1aWVzYyA9IDE7CisJcmRwLT5wYXNzZWRfcXVpZXNjX2NvbXBsZXRlZCA9IHJkcC0+Y29tcGxldGVkOworfQorCisvKgorICogV2UgaGF2ZSBlbnRlcmVkIHRoZSBzY2hlZHVsZXIgb3IgYXJlIGJldHdlZW4gc29mdGlycXMgaW4ga3NvZnRpcnFkLgorICogSWYgd2UgYXJlIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiwgd2UgbmVlZCB0byByZWZsZWN0CisgKiB0aGF0IGluIHRoZSBzdGF0ZSBvZiB0aGUgcmN1X25vZGUgc3RydWN0dXJlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBDUFUuCisgKiBDYWxsZXIgbXVzdCBkaXNhYmxlIGhhcmRpcnFzLgorICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9xcyhpbnQgY3B1KQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IGN1cnJlbnQ7CisJaW50IHBoYXNlOworCXN0cnVjdCByY3VfZGF0YSAqcmRwOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wOworCisJaWYgKHQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZyAmJgorCSAgICAodC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgJiBSQ1VfUkVBRF9VTkxPQ0tfQkxPQ0tFRCkgPT0gMCkgeworCisJCS8qIFBvc3NpYmx5IGJsb2NraW5nIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gKi8KKwkJcmRwID0gcmN1X3ByZWVtcHRfc3RhdGUucmRhW2NwdV07CisJCXJucCA9IHJkcC0+bXlub2RlOworCQlzcGluX2xvY2soJnJucC0+bG9jayk7CisJCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsIHw9IFJDVV9SRUFEX1VOTE9DS19CTE9DS0VEOworCQl0LT5yY3VfYmxvY2tlZF9ub2RlID0gcm5wOworCisJCS8qCisJCSAqIElmIHRoaXMgQ1BVIGhhcyBhbHJlYWR5IGNoZWNrZWQgaW4sIHRoZW4gdGhpcyB0YXNrCisJCSAqIHdpbGwgaG9sZCB1cCB0aGUgbmV4dCBncmFjZSBwZXJpb2QgcmF0aGVyIHRoYW4gdGhlCisJCSAqIGN1cnJlbnQgZ3JhY2UgcGVyaW9kLiAgUXVldWUgdGhlIHRhc2sgYWNjb3JkaW5nbHkuCisJCSAqIElmIHRoZSB0YXNrIGlzIHF1ZXVlZCBmb3IgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kCisJCSAqIChpLmUuLCB0aGlzIENQVSBoYXMgbm90IHlldCBwYXNzZWQgdGhyb3VnaCBhIHF1aWVzY2VudAorCQkgKiBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kKSwgdGhlbiBhcyBsb25nCisJCSAqIGFzIHRoYXQgdGFzayByZW1haW5zIHF1ZXVlZCwgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kCisJCSAqIGNhbm5vdCBlbmQuCisJCSAqLworCQlwaGFzZSA9ICEocm5wLT5xc21hc2sgJiByZHAtPmdycG1hc2spIF4gKHJucC0+Z3BudW0gJiAweDEpOworCQlsaXN0X2FkZCgmdC0+cmN1X25vZGVfZW50cnksICZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2VdKTsKKwkJc21wX21iKCk7ICAvKiBFbnN1cmUgbGF0ZXIgY3R4dCBzd3RjaCBzZWVuIGFmdGVyIGFib3ZlLiAqLworCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsKKwl9CisKKwkvKgorCSAqIEVpdGhlciB3ZSB3ZXJlIG5vdCBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdG8KKwkgKiBiZWdpbiB3aXRoLCBvciB3ZSBoYXZlIG5vdyByZWNvcmRlZCB0aGF0IGNyaXRpY2FsIHNlY3Rpb24KKwkgKiBnbG9iYWxseS4gIEVpdGhlciB3YXksIHdlIGNhbiBub3cgbm90ZSBhIHF1aWVzY2VudCBzdGF0ZQorCSAqIGZvciB0aGlzIENQVS4gIEFnYWluLCBpZiB3ZSB3ZXJlIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKKwkgKiBzZWN0aW9uLCBhbmQgaWYgdGhhdCBjcml0aWNhbCBzZWN0aW9uIHdhcyBibG9ja2luZyB0aGUgY3VycmVudAorCSAqIGdyYWNlIHBlcmlvZCwgdGhlbiB0aGUgZmFjdCB0aGF0IHRoZSB0YXNrIGhhcyBiZWVuIGVucXVldWVkCisJICogbWVhbnMgdGhhdCB3ZSBjb250aW51ZSB0byBibG9jayB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QuCisJICovCisJcmN1X3ByZWVtcHRfcXNfcmVjb3JkKGNwdSk7CisJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgJj0gfihSQ1VfUkVBRF9VTkxPQ0tfTkVFRF9RUyB8CisJCQkJCVJDVV9SRUFEX1VOTE9DS19HT1RfUVMpOworfQorCisvKgorICogVHJlZS1wcmVlbXB0YWJsZSBSQ1UgaW1wbGVtZW50YXRpb24gZm9yIHJjdV9yZWFkX2xvY2soKS4KKyAqIEp1c3QgaW5jcmVtZW50IC0+cmN1X3JlYWRfbG9ja19uZXN0aW5nLCBzaGFyZWQgc3RhdGUgd2lsbCBiZSB1cGRhdGVkCisgKiBpZiB3ZSBibG9jay4KKyAqLwordm9pZCBfX3JjdV9yZWFkX2xvY2sodm9pZCkKK3sKKwlBQ0NFU1NfT05DRShjdXJyZW50LT5yY3VfcmVhZF9sb2NrX25lc3RpbmcpKys7CisJYmFycmllcigpOyAgLyogbmVlZGVkIGlmIHdlIGV2ZXIgaW52b2tlIHJjdV9yZWFkX2xvY2sgaW4gcmN1dHJlZS5jICovCit9CitFWFBPUlRfU1lNQk9MX0dQTChfX3JjdV9yZWFkX2xvY2spOworCitzdGF0aWMgdm9pZCByY3VfcmVhZF91bmxvY2tfc3BlY2lhbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCit7CisJaW50IGVtcHR5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wOworCWludCBzcGVjaWFsOworCisJLyogTk1JIGhhbmRsZXJzIGNhbm5vdCBibG9jayBhbmQgY2Fubm90IHNhZmVseSBtYW5pcHVsYXRlIHN0YXRlLiAqLworCWlmIChpbl9ubWkoKSkKKwkJcmV0dXJuOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyoKKwkgKiBJZiBSQ1UgY29yZSBpcyB3YWl0aW5nIGZvciB0aGlzIENQVSB0byBleGl0IGNyaXRpY2FsIHNlY3Rpb24sCisJICogbGV0IGl0IGtub3cgdGhhdCB3ZSBoYXZlIGRvbmUgc28uCisJICovCisJc3BlY2lhbCA9IHQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsOworCWlmIChzcGVjaWFsICYgUkNVX1JFQURfVU5MT0NLX05FRURfUVMpIHsKKwkJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgJj0gflJDVV9SRUFEX1VOTE9DS19ORUVEX1FTOworCQl0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCB8PSBSQ1VfUkVBRF9VTkxPQ0tfR09UX1FTOworCX0KKworCS8qIEhhcmR3YXJlIElSUSBoYW5kbGVycyBjYW5ub3QgYmxvY2suICovCisJaWYgKGluX2lycSgpKSB7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIENsZWFuIHVwIGlmIGJsb2NrZWQgZHVyaW5nIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gKi8KKwlpZiAoc3BlY2lhbCAmIFJDVV9SRUFEX1VOTE9DS19CTE9DS0VEKSB7CisJCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsICY9IH5SQ1VfUkVBRF9VTkxPQ0tfQkxPQ0tFRDsKKworCQkvKgorCQkgKiBSZW1vdmUgdGhpcyB0YXNrIGZyb20gdGhlIGxpc3QgaXQgYmxvY2tlZCBvbi4gIFRoZQorCQkgKiB0YXNrIGNhbiBtaWdyYXRlIHdoaWxlIHdlIGFjcXVpcmUgdGhlIGxvY2ssIGJ1dCBhdAorCQkgKiBtb3N0IG9uZSB0aW1lLiAgU28gYXQgbW9zdCB0d28gcGFzc2VzIHRocm91Z2ggbG9vcC4KKwkJICovCisJCWZvciAoOzspIHsKKwkJCXJucCA9IHQtPnJjdV9ibG9ja2VkX25vZGU7CisJCQlzcGluX2xvY2soJnJucC0+bG9jayk7CisJCQlpZiAocm5wID09IHQtPnJjdV9ibG9ja2VkX25vZGUpCisJCQkJYnJlYWs7CisJCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsKKwkJfQorCQllbXB0eSA9IGxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1tybnAtPmdwbnVtICYgMHgxXSk7CisJCWxpc3RfZGVsX2luaXQoJnQtPnJjdV9ub2RlX2VudHJ5KTsKKwkJdC0+cmN1X2Jsb2NrZWRfbm9kZSA9IE5VTEw7CisKKwkJLyoKKwkJICogSWYgdGhpcyB3YXMgdGhlIGxhc3QgdGFzayBvbiB0aGUgY3VycmVudCBsaXN0LCBhbmQgaWYKKwkJICogd2UgYXJlbid0IHdhaXRpbmcgb24gYW55IENQVXMsIHJlcG9ydCB0aGUgcXVpZXNjZW50IHN0YXRlLgorCQkgKiBOb3RlIHRoYXQgYm90aCBjcHVfcXVpZXRfbXNrX2ZpbmlzaCgpIGFuZCBjcHVfcXVpZXRfbXNrKCkKKwkJICogZHJvcCBybnAtPmxvY2sgYW5kIHJlc3RvcmUgaXJxLgorCQkgKi8KKwkJaWYgKCFlbXB0eSAmJiBybnAtPnFzbWFzayA9PSAwICYmCisJCSAgICBsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3Nbcm5wLT5ncG51bSAmIDB4MV0pKSB7CisJCQl0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCAmPQorCQkJCX4oUkNVX1JFQURfVU5MT0NLX05FRURfUVMgfAorCQkJCSAgUkNVX1JFQURfVU5MT0NLX0dPVF9RUyk7CisJCQlpZiAocm5wLT5wYXJlbnQgPT0gTlVMTCkgeworCQkJCS8qIE9ubHkgb25lIHJjdV9ub2RlIGluIHRoZSB0cmVlLiAqLworCQkJCWNwdV9xdWlldF9tc2tfZmluaXNoKCZyY3VfcHJlZW1wdF9zdGF0ZSwgZmxhZ3MpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCS8qIFJlcG9ydCB1cCB0aGUgcmVzdCBvZiB0aGUgaGllcmFyY2h5LiAqLworCQkJbWFzayA9IHJucC0+Z3JwbWFzazsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQkJcm5wID0gcm5wLT5wYXJlbnQ7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCQljcHVfcXVpZXRfbXNrKG1hc2ssICZyY3VfcHJlZW1wdF9zdGF0ZSwgcm5wLCBmbGFncyk7CisJCQlyZXR1cm47CisJCX0KKwkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFRyZWUtcHJlZW1wdGFibGUgUkNVIGltcGxlbWVudGF0aW9uIGZvciByY3VfcmVhZF91bmxvY2soKS4KKyAqIERlY3JlbWVudCAtPnJjdV9yZWFkX2xvY2tfbmVzdGluZy4gIElmIHRoZSByZXN1bHQgaXMgemVybyAob3V0ZXJtb3N0CisgKiByY3VfcmVhZF91bmxvY2soKSkgYW5kIC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgaXMgbm9uLXplcm8sIHRoZW4KKyAqIGludm9rZSByY3VfcmVhZF91bmxvY2tfc3BlY2lhbCgpIHRvIGNsZWFuIHVwIGFmdGVyIGEgY29udGV4dCBzd2l0Y2gKKyAqIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBhbmQgb3RoZXIgc3BlY2lhbCBjYXNlcy4KKyAqLwordm9pZCBfX3JjdV9yZWFkX3VubG9jayh2b2lkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IGN1cnJlbnQ7CisKKwliYXJyaWVyKCk7ICAvKiBuZWVkZWQgaWYgd2UgZXZlciBpbnZva2UgcmN1X3JlYWRfdW5sb2NrIGluIHJjdXRyZWUuYyAqLworCWlmICgtLUFDQ0VTU19PTkNFKHQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZykgPT0gMCAmJgorCSAgICB1bmxpa2VseShBQ0NFU1NfT05DRSh0LT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCkpKQorCQlyY3VfcmVhZF91bmxvY2tfc3BlY2lhbCh0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fcmN1X3JlYWRfdW5sb2NrKTsKKworI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCisKKy8qCisgKiBTY2FuIHRoZSBjdXJyZW50IGxpc3Qgb2YgdGFza3MgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorICogc2VjdGlvbnMsIHByaW50aW5nIG91dCB0aGUgdGlkIG9mIGVhY2guCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmludF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqbHA7CisJaW50IHBoYXNlID0gcm5wLT5ncG51bSAmIDB4MTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1twaGFzZV0pKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcGhhc2UgPSBybnAtPmdwbnVtICYgMHgxOyAvKiByZS1yZWFkIHVuZGVyIGxvY2suICovCisJCWxwID0gJnJucC0+YmxvY2tlZF90YXNrc1twaGFzZV07CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgbHAsIHJjdV9ub2RlX2VudHJ5KQorCQkJcHJpbnRrKCIgUCVkIiwgdC0+cGlkKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJfQorfQorCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICovCisKKy8qCisgKiBDaGVjayBmb3IgcHJlZW1wdGVkIFJDVSByZWFkZXJzIGZvciB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZS4KKyAqIElmIHRoZSBjYWxsZXIgbmVlZHMgYSByZWxpYWJsZSBhbnN3ZXIsIGl0IG11c3QgaG9sZCB0aGUgcmN1X25vZGUncworICogPmxvY2suCisgKi8KK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCXJldHVybiAhbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3JucC0+Z3BudW0gJiAweDFdKTsKK30KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCisvKgorICogSGFuZGxlIHRhc2tsaXN0IG1pZ3JhdGlvbiBmb3IgY2FzZSBpbiB3aGljaCBhbGwgQ1BVcyBjb3ZlcmVkIGJ5IHRoZQorICogc3BlY2lmaWVkIHJjdV9ub2RlIGhhdmUgZ29uZSBvZmZsaW5lLiAgTW92ZSB0aGVtIHVwIHRvIHRoZSByb290CisgKiByY3Vfbm9kZS4gIFRoZSByZWFzb24gZm9yIG5vdCBqdXN0IG1vdmluZyB0aGVtIHRvIHRoZSBpbW1lZGlhdGUKKyAqIHBhcmVudCBpcyB0byByZW1vdmUgdGhlIG5lZWQgZm9yIHJjdV9yZWFkX3VubG9ja19zcGVjaWFsKCkgdG8KKyAqIG1ha2UgbW9yZSB0aGFuIHR3byBhdHRlbXB0cyB0byBhY3F1aXJlIHRoZSB0YXJnZXQgcmN1X25vZGUncyBsb2NrLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHJucC0+bG9jayB3aXRoIGlycXMgZGlzYWJsZWQuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAorCQkJCSAgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCWludCBpOworCXN0cnVjdCBsaXN0X2hlYWQgKmxwOworCXN0cnVjdCBsaXN0X2hlYWQgKmxwX3Jvb3Q7CisJc3RydWN0IHJjdV9ub2RlICpybnBfcm9vdCA9IHJjdV9nZXRfcm9vdChyc3ApOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHA7CisKKwlpZiAocm5wID09IHJucF9yb290KSB7CisJCVdBUk5fT05DRSgxLCAiTGFzdCBDUFUgdGhvdWdodCB0byBiZSBvZmZsaW5lZD8iKTsKKwkJcmV0dXJuOyAgLyogU2hvdWxkbid0IGhhcHBlbjogYXQgbGVhc3Qgb25lIENQVSBvbmxpbmUuICovCisJfQorCisJLyoKKwkgKiBNb3ZlIHRhc2tzIHVwIHRvIHJvb3QgcmN1X25vZGUuICBSZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhlCisJICogcm9vdCByY3Vfbm9kZSBjYW4gYmUgYXQgbW9zdCBvbmUgYWhlYWQgb2YgdGhlIHJlc3Qgb2YgdGhlCisJICogcmN1X25vZGVzIGluIHRlcm1zIG9mIGdwX251bSB2YWx1ZS4gIFRoaXMgZmFjdCBhbGxvd3MgdXMgdG8KKwkgKiBtb3ZlIHRoZSBibG9ja2VkX3Rhc2tzW10gYXJyYXkgZGlyZWN0bHksIGVsZW1lbnQgYnkgZWxlbWVudC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWxwID0gJnJucC0+YmxvY2tlZF90YXNrc1tpXTsKKwkJbHBfcm9vdCA9ICZybnBfcm9vdC0+YmxvY2tlZF90YXNrc1tpXTsKKwkJd2hpbGUgKCFsaXN0X2VtcHR5KGxwKSkgeworCQkJdHAgPSBsaXN0X2VudHJ5KGxwLT5uZXh0LCB0eXBlb2YoKnRwKSwgcmN1X25vZGVfZW50cnkpOworCQkJc3Bpbl9sb2NrKCZybnBfcm9vdC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCQkJbGlzdF9kZWwoJnRwLT5yY3Vfbm9kZV9lbnRyeSk7CisJCQl0cC0+cmN1X2Jsb2NrZWRfbm9kZSA9IHJucF9yb290OworCQkJbGlzdF9hZGQoJnRwLT5yY3Vfbm9kZV9lbnRyeSwgbHBfcm9vdCk7CisJCQlzcGluX3VubG9jaygmcm5wX3Jvb3QtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLworCQl9CisJfQorfQorCisvKgorICogRG8gQ1BVLW9mZmxpbmUgcHJvY2Vzc2luZyBmb3IgcHJlZW1wdGFibGUgUkNVLgorICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9vZmZsaW5lX2NwdShpbnQgY3B1KQoreworCV9fcmN1X29mZmxpbmVfY3B1KGNwdSwgJnJjdV9wcmVlbXB0X3N0YXRlKTsKK30KKworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KKworLyoKKyAqIENoZWNrIGZvciBhIHF1aWVzY2VudCBzdGF0ZSBmcm9tIHRoZSBjdXJyZW50IENQVS4gIFdoZW4gYSB0YXNrIGJsb2NrcywKKyAqIHRoZSB0YXNrIGlzIHJlY29yZGVkIGluIHRoZSBjb3JyZXNwb25kaW5nIENQVSdzIHJjdV9ub2RlIHN0cnVjdHVyZSwKKyAqIHdoaWNoIGlzIGNoZWNrZWQgZWxzZXdoZXJlLgorICoKKyAqIENhbGxlciBtdXN0IGRpc2FibGUgaGFyZCBpcnFzLgorICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19jYWxsYmFja3MoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSBjdXJyZW50OworCisJaWYgKHQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZyA9PSAwKSB7CisJCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsICY9CisJCQl+KFJDVV9SRUFEX1VOTE9DS19ORUVEX1FTIHwgUkNVX1JFQURfVU5MT0NLX0dPVF9RUyk7CisJCXJjdV9wcmVlbXB0X3FzX3JlY29yZChjcHUpOworCQlyZXR1cm47CisJfQorCWlmIChwZXJfY3B1KHJjdV9wcmVlbXB0X2RhdGEsIGNwdSkucXNfcGVuZGluZykgeworCQlpZiAodC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgJiBSQ1VfUkVBRF9VTkxPQ0tfR09UX1FTKSB7CisJCQlyY3VfcHJlZW1wdF9xc19yZWNvcmQoY3B1KTsKKwkJCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsICY9IH5SQ1VfUkVBRF9VTkxPQ0tfR09UX1FTOworCQl9IGVsc2UgaWYgKCEodC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgJgorCQkJICAgICBSQ1VfUkVBRF9VTkxPQ0tfTkVFRF9RUykpIHsKKwkJCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsIHw9IFJDVV9SRUFEX1VOTE9DS19ORUVEX1FTOworCQl9CisJfQorfQorCisvKgorICogUHJvY2VzcyBjYWxsYmFja3MgZm9yIHByZWVtcHRhYmxlIFJDVS4KKyAqLworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfcHJvY2Vzc19jYWxsYmFja3Modm9pZCkKK3sKKwlfX3JjdV9wcm9jZXNzX2NhbGxiYWNrcygmcmN1X3ByZWVtcHRfc3RhdGUsCisJCQkJJl9fZ2V0X2NwdV92YXIocmN1X3ByZWVtcHRfZGF0YSkpOworfQorCisvKgorICogUXVldWUgYSBwcmVlbXB0YWJsZS1SQ1UgY2FsbGJhY2sgZm9yIGludm9jYXRpb24gYWZ0ZXIgYSBncmFjZSBwZXJpb2QuCisgKi8KK3ZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpKQoreworCV9fY2FsbF9yY3UoaGVhZCwgZnVuYywgJnJjdV9wcmVlbXB0X3N0YXRlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTsKKworLyoKKyAqIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgaW1tZWRpYXRlIHByZWVtcHRhYmxlLVJDVS1yZWxhdGVkIHdvcmsKKyAqIHRvIGJlIGRvbmUuCisgKi8KK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRfcGVuZGluZyhpbnQgY3B1KQoreworCXJldHVybiBfX3JjdV9wZW5kaW5nKCZyY3VfcHJlZW1wdF9zdGF0ZSwKKwkJCSAgICAgJnBlcl9jcHUocmN1X3ByZWVtcHRfZGF0YSwgY3B1KSk7Cit9CisKKy8qCisgKiBEb2VzIHByZWVtcHRhYmxlIFJDVSBuZWVkIHRoZSBDUFUgdG8gc3RheSBvdXQgb2YgZHludGlja3MgbW9kZT8KKyAqLworc3RhdGljIGludCByY3VfcHJlZW1wdF9uZWVkc19jcHUoaW50IGNwdSkKK3sKKwlyZXR1cm4gISFwZXJfY3B1KHJjdV9wcmVlbXB0X2RhdGEsIGNwdSkubnh0bGlzdDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgcHJlZW1wdGFibGUgUkNVJ3MgcGVyLUNQVSBkYXRhLgorICovCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X3ByZWVtcHRfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1KQoreworCXJjdV9pbml0X3BlcmNwdV9kYXRhKGNwdSwgJnJjdV9wcmVlbXB0X3N0YXRlLCAxKTsKK30KKworLyoKKyAqIENoZWNrIGZvciBhIHRhc2sgZXhpdGluZyB3aGlsZSBpbiBhIHByZWVtcHRhYmxlLVJDVSByZWFkLXNpZGUKKyAqIGNyaXRpY2FsIHNlY3Rpb24sIGNsZWFuIHVwIGlmIHNvLiAgTm8gbmVlZCB0byBpc3N1ZSB3YXJuaW5ncywKKyAqIGFzIGRlYnVnX2NoZWNrX25vX2xvY2tzX2hlbGQoKSBhbHJlYWR5IGRvZXMgdGhpcyBpZiBsb2NrZGVwCisgKiBpcyBlbmFibGVkLgorICovCit2b2lkIGV4aXRfcmN1KHZvaWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gY3VycmVudDsKKworCWlmICh0LT5yY3VfcmVhZF9sb2NrX25lc3RpbmcgPT0gMCkKKwkJcmV0dXJuOworCXQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZyA9IDE7CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLworCisvKgorICogVGVsbCB0aGVtIHdoYXQgUkNVIHRoZXkgYXJlIHJ1bm5pbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfYm9vdHVwX2Fubm91bmNlKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiSGllcmFyY2hpY2FsIFJDVSBpbXBsZW1lbnRhdGlvbi5cbiIpOworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgUkNVIGJhdGNoZXMgcHJvY2Vzc2VkIHRodXMgZmFyIGZvciBkZWJ1ZyAmIHN0YXRzLgorICovCitsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKQoreworCXJldHVybiByY3VfYmF0Y2hlc19jb21wbGV0ZWRfc2NoZWQoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZCk7CisKKy8qCisgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgd2UgbmV2ZXIgaGF2ZSB0byBjaGVjayBmb3IKKyAqIENQVXMgYmVpbmcgaW4gcXVpZXNjZW50IHN0YXRlcy4KKyAqLworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfcXMoaW50IGNwdSkKK3sKK30KKworI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCisKKy8qCisgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgd2UgbmV2ZXIgaGF2ZSB0byBjaGVjayBmb3IKKyAqIHRhc2tzIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmludF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworfQorCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICovCisKKy8qCisgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgdGhlcmUgYXJlIG5ldmVyIGFueSBwcmVlbXB0ZWQKKyAqIFJDVSByZWFkZXJzLgorICovCitzdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCisvKgorICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIG5lZWRzIHRvIG1pZ3JhdGUKKyAqIHRhc2tzIHRoYXQgd2VyZSBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLgorICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCQkgICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKK30KKworLyoKKyAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBuZWVkcyBDUFUtb2ZmbGluZQorICogcHJvY2Vzc2luZy4KKyAqLworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfb2ZmbGluZV9jcHUoaW50IGNwdSkKK3sKK30KKworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KKworLyoKKyAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBoYXMgYW55IGNhbGxiYWNrcworICogdG8gY2hlY2suCisgKi8KK3ZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUpCit7Cit9CisKKy8qCisgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgaGFzIGFueSBjYWxsYmFja3MKKyAqIHRvIHByb2Nlc3MuCisgKi8KK3ZvaWQgcmN1X3ByZWVtcHRfcHJvY2Vzc19jYWxsYmFja3Modm9pZCkKK3sKK30KKworLyoKKyAqIEluIGNsYXNzaWMgUkNVLCBjYWxsX3JjdSgpIGlzIGp1c3QgY2FsbF9yY3Vfc2NoZWQoKS4KKyAqLwordm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkpCit7CisJY2FsbF9yY3Vfc2NoZWQoaGVhZCwgZnVuYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7CisKKy8qCisgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgaGFzIGFueSB3b3JrIHRvIGRvLgorICovCitzdGF0aWMgaW50IHJjdV9wcmVlbXB0X3BlbmRpbmcoaW50IGNwdSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBuZWVkcyBhbnkgQ1BVLgorICovCitzdGF0aWMgaW50IHJjdV9wcmVlbXB0X25lZWRzX2NwdShpbnQgY3B1KQoreworCXJldHVybiAwOworfQorCisvKgorICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHRoZXJlIGlzIG5vIHBlci1DUFUKKyAqIGRhdGEgdG8gaW5pdGlhbGl6ZS4KKyAqLworc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9wcmVlbXB0X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSkKK3sKK30KKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYyBiL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKaW5kZXggZmUxZGNkYi4uMGVhMWJmZiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYworKysgYi9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKKyNkZWZpbmUgUkNVX1RSRUVfTk9OQ09SRQogI2luY2x1ZGUgInJjdXRyZWUuaCIKIAogc3RhdGljIHZvaWQgcHJpbnRfb25lX3JjdV9kYXRhKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHJjdV9kYXRhICpyZHApCkBAIC03Niw4ICs3NywxMiBAQAogCiBzdGF0aWMgaW50IHNob3dfcmN1ZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKIHsKLQlzZXFfcHV0cyhtLCAicmN1OlxuIik7Ci0JUFJJTlRfUkNVX0RBVEEocmN1X2RhdGEsIHByaW50X29uZV9yY3VfZGF0YSwgbSk7CisjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKKwlzZXFfcHV0cyhtLCAicmN1X3ByZWVtcHQ6XG4iKTsKKwlQUklOVF9SQ1VfREFUQShyY3VfcHJlZW1wdF9kYXRhLCBwcmludF9vbmVfcmN1X2RhdGEsIG0pOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLworCXNlcV9wdXRzKG0sICJyY3Vfc2NoZWQ6XG4iKTsKKwlQUklOVF9SQ1VfREFUQShyY3Vfc2NoZWRfZGF0YSwgcHJpbnRfb25lX3JjdV9kYXRhLCBtKTsKIAlzZXFfcHV0cyhtLCAicmN1X2JoOlxuIik7CiAJUFJJTlRfUkNVX0RBVEEocmN1X2JoX2RhdGEsIHByaW50X29uZV9yY3VfZGF0YSwgbSk7CiAJcmV0dXJuIDA7CkBAIC0xMDIsNyArMTA3LDcgQEAKIAkJcmV0dXJuOwogCXNlcV9wcmludGYobSwgIiVkLCVzLCVsZCwlbGQsJWQsJWxkLCVkIiwKIAkJICAgcmRwLT5jcHUsCi0JCSAgIGNwdV9pc19vZmZsaW5lKHJkcC0+Y3B1KSA/ICJcIllcIiIgOiAiXCJOXCIiLAorCQkgICBjcHVfaXNfb2ZmbGluZShyZHAtPmNwdSkgPyAiXCJOXCIiIDogIlwiWVwiIiwKIAkJICAgcmRwLT5jb21wbGV0ZWQsIHJkcC0+Z3BudW0sCiAJCSAgIHJkcC0+cGFzc2VkX3F1aWVzYywgcmRwLT5wYXNzZWRfcXVpZXNjX2NvbXBsZXRlZCwKIAkJICAgcmRwLT5xc19wZW5kaW5nKTsKQEAgLTEyNCw4ICsxMjksMTIgQEAKIAlzZXFfcHV0cyhtLCAiXCJkdFwiLFwiZHQgbmVzdGluZ1wiLFwiZG5cIixcImRmXCIsIik7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLwogCXNlcV9wdXRzKG0sICJcIm9mXCIsXCJyaVwiLFwicWxcIixcImJcIlxuIik7Ci0Jc2VxX3B1dHMobSwgIlwicmN1OlwiXG4iKTsKLQlQUklOVF9SQ1VfREFUQShyY3VfZGF0YSwgcHJpbnRfb25lX3JjdV9kYXRhX2NzdiwgbSk7CisjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKKwlzZXFfcHV0cyhtLCAiXCJyY3VfcHJlZW1wdDpcIlxuIik7CisJUFJJTlRfUkNVX0RBVEEocmN1X3ByZWVtcHRfZGF0YSwgcHJpbnRfb25lX3JjdV9kYXRhX2NzdiwgbSk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCisJc2VxX3B1dHMobSwgIlwicmN1X3NjaGVkOlwiXG4iKTsKKwlQUklOVF9SQ1VfREFUQShyY3Vfc2NoZWRfZGF0YSwgcHJpbnRfb25lX3JjdV9kYXRhX2NzdiwgbSk7CiAJc2VxX3B1dHMobSwgIlwicmN1X2JoOlwiXG4iKTsKIAlQUklOVF9SQ1VfREFUQShyY3VfYmhfZGF0YSwgcHJpbnRfb25lX3JjdV9kYXRhX2NzdiwgbSk7CiAJcmV0dXJuIDA7CkBAIC0xNzEsOCArMTgwLDEyIEBACiAKIHN0YXRpYyBpbnQgc2hvd19yY3VoaWVyKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogewotCXNlcV9wdXRzKG0sICJyY3U6XG4iKTsKLQlwcmludF9vbmVfcmN1X3N0YXRlKG0sICZyY3Vfc3RhdGUpOworI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVCisJc2VxX3B1dHMobSwgInJjdV9wcmVlbXB0OlxuIik7CisJcHJpbnRfb25lX3JjdV9zdGF0ZShtLCAmcmN1X3ByZWVtcHRfc3RhdGUpOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLworCXNlcV9wdXRzKG0sICJyY3Vfc2NoZWQ6XG4iKTsKKwlwcmludF9vbmVfcmN1X3N0YXRlKG0sICZyY3Vfc2NoZWRfc3RhdGUpOwogCXNlcV9wdXRzKG0sICJyY3VfYmg6XG4iKTsKIAlwcmludF9vbmVfcmN1X3N0YXRlKG0sICZyY3VfYmhfc3RhdGUpOwogCXJldHVybiAwOwpAQCAtMTkzLDggKzIwNiwxMiBAQAogCiBzdGF0aWMgaW50IHNob3dfcmN1Z3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiB7Ci0Jc2VxX3ByaW50ZihtLCAicmN1OiBjb21wbGV0ZWQ9JWxkICBncG51bT0lbGRcbiIsCi0JCSAgIHJjdV9zdGF0ZS5jb21wbGV0ZWQsIHJjdV9zdGF0ZS5ncG51bSk7CisjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKKwlzZXFfcHJpbnRmKG0sICJyY3VfcHJlZW1wdDogY29tcGxldGVkPSVsZCAgZ3BudW09JWxkXG4iLAorCQkgICByY3VfcHJlZW1wdF9zdGF0ZS5jb21wbGV0ZWQsIHJjdV9wcmVlbXB0X3N0YXRlLmdwbnVtKTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KKwlzZXFfcHJpbnRmKG0sICJyY3Vfc2NoZWQ6IGNvbXBsZXRlZD0lbGQgIGdwbnVtPSVsZFxuIiwKKwkJICAgcmN1X3NjaGVkX3N0YXRlLmNvbXBsZXRlZCwgcmN1X3NjaGVkX3N0YXRlLmdwbnVtKTsKIAlzZXFfcHJpbnRmKG0sICJyY3VfYmg6IGNvbXBsZXRlZD0lbGQgIGdwbnVtPSVsZFxuIiwKIAkJICAgcmN1X2JoX3N0YXRlLmNvbXBsZXRlZCwgcmN1X2JoX3N0YXRlLmdwbnVtKTsKIAlyZXR1cm4gMDsKQEAgLTI0Myw4ICsyNjAsMTIgQEAKIAogc3RhdGljIGludCBzaG93X3JjdV9wZW5kaW5nKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogewotCXNlcV9wdXRzKG0sICJyY3U6XG4iKTsKLQlwcmludF9yY3VfcGVuZGluZ3MobSwgJnJjdV9zdGF0ZSk7CisjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKKwlzZXFfcHV0cyhtLCAicmN1X3ByZWVtcHQ6XG4iKTsKKwlwcmludF9yY3VfcGVuZGluZ3MobSwgJnJjdV9wcmVlbXB0X3N0YXRlKTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KKwlzZXFfcHV0cyhtLCAicmN1X3NjaGVkOlxuIik7CisJcHJpbnRfcmN1X3BlbmRpbmdzKG0sICZyY3Vfc2NoZWRfc3RhdGUpOwogCXNlcV9wdXRzKG0sICJyY3VfYmg6XG4iKTsKIAlwcmludF9yY3VfcGVuZGluZ3MobSwgJnJjdV9iaF9zdGF0ZSk7CiAJcmV0dXJuIDA7CkBAIC0yNjQsNjIgKzI4NSw0NyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKnJjdWRpcjsKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkYXRhZGlyOwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmRhdGFkaXJfY3N2Owotc3RhdGljIHN0cnVjdCBkZW50cnkgKmdwZGlyOwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmhpZXJkaXI7Ci1zdGF0aWMgc3RydWN0IGRlbnRyeSAqcmN1X3BlbmRpbmdkaXI7CiAKIHN0YXRpYyBpbnQgX19pbml0IHJjdWNsYXNzaWNfdHJhY2VfaW5pdCh2b2lkKQogeworCXN0cnVjdCBkZW50cnkgKnJldHZhbDsKKwogCXJjdWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigicmN1IiwgTlVMTCk7CiAJaWYgKCFyY3VkaXIpCi0JCWdvdG8gb3V0OworCQlnb3RvIGZyZWVfb3V0OwogCi0JZGF0YWRpciA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJjdWRhdGEiLCAwNDQ0LCByY3VkaXIsCisJcmV0dmFsID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmN1ZGF0YSIsIDA0NDQsIHJjdWRpciwKIAkJCQkJCU5VTEwsICZyY3VkYXRhX2ZvcHMpOwotCWlmICghZGF0YWRpcikKKwlpZiAoIXJldHZhbCkKIAkJZ290byBmcmVlX291dDsKIAotCWRhdGFkaXJfY3N2ID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmN1ZGF0YS5jc3YiLCAwNDQ0LCByY3VkaXIsCisJcmV0dmFsID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmN1ZGF0YS5jc3YiLCAwNDQ0LCByY3VkaXIsCiAJCQkJCQlOVUxMLCAmcmN1ZGF0YV9jc3ZfZm9wcyk7Ci0JaWYgKCFkYXRhZGlyX2NzdikKKwlpZiAoIXJldHZhbCkKIAkJZ290byBmcmVlX291dDsKIAotCWdwZGlyID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmN1Z3AiLCAwNDQ0LCByY3VkaXIsIE5VTEwsICZyY3VncF9mb3BzKTsKLQlpZiAoIWdwZGlyKQorCXJldHZhbCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJjdWdwIiwgMDQ0NCwgcmN1ZGlyLCBOVUxMLCAmcmN1Z3BfZm9wcyk7CisJaWYgKCFyZXR2YWwpCiAJCWdvdG8gZnJlZV9vdXQ7CiAKLQloaWVyZGlyID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmN1aGllciIsIDA0NDQsIHJjdWRpciwKKwlyZXR2YWwgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyY3VoaWVyIiwgMDQ0NCwgcmN1ZGlyLAogCQkJCQkJTlVMTCwgJnJjdWhpZXJfZm9wcyk7Ci0JaWYgKCFoaWVyZGlyKQorCWlmICghcmV0dmFsKQogCQlnb3RvIGZyZWVfb3V0OwogCi0JcmN1X3BlbmRpbmdkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyY3VfcGVuZGluZyIsIDA0NDQsIHJjdWRpciwKKwlyZXR2YWwgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyY3VfcGVuZGluZyIsIDA0NDQsIHJjdWRpciwKIAkJCQkJCU5VTEwsICZyY3VfcGVuZGluZ19mb3BzKTsKLQlpZiAoIXJjdV9wZW5kaW5nZGlyKQorCWlmICghcmV0dmFsKQogCQlnb3RvIGZyZWVfb3V0OwogCXJldHVybiAwOwogZnJlZV9vdXQ6Ci0JaWYgKGRhdGFkaXIpCi0JCWRlYnVnZnNfcmVtb3ZlKGRhdGFkaXIpOwotCWlmIChkYXRhZGlyX2NzdikKLQkJZGVidWdmc19yZW1vdmUoZGF0YWRpcl9jc3YpOwotCWlmIChncGRpcikKLQkJZGVidWdmc19yZW1vdmUoZ3BkaXIpOwotCWRlYnVnZnNfcmVtb3ZlKHJjdWRpcik7Ci1vdXQ6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHJjdWRpcik7CiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCByY3VjbGFzc2ljX3RyYWNlX2NsZWFudXAodm9pZCkKIHsKLQlkZWJ1Z2ZzX3JlbW92ZShkYXRhZGlyKTsKLQlkZWJ1Z2ZzX3JlbW92ZShkYXRhZGlyX2Nzdik7Ci0JZGVidWdmc19yZW1vdmUoZ3BkaXIpOwotCWRlYnVnZnNfcmVtb3ZlKGhpZXJkaXIpOwotCWRlYnVnZnNfcmVtb3ZlKHJjdV9wZW5kaW5nZGlyKTsKLQlkZWJ1Z2ZzX3JlbW92ZShyY3VkaXIpOworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShyY3VkaXIpOwogfQogCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggMWI1OWUyNi4uZDlkYjNmYiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTY0LDcgKzY0LDYgQEAKICNpbmNsdWRlIDxsaW51eC90c2FjY3Rfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheWFjY3QuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWNpcHJvY2FsX2Rpdi5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CkBAIC0xMjAsMzAgKzExOSw4IEBACiAgKi8KICNkZWZpbmUgUlVOVElNRV9JTkYJKCh1NjQpfjBVTEwpCiAKLSNpZmRlZiBDT05GSUdfU01QCi0KIHN0YXRpYyB2b2lkIGRvdWJsZV9ycV9sb2NrKHN0cnVjdCBycSAqcnExLCBzdHJ1Y3QgcnEgKnJxMik7CiAKLS8qCi0gKiBEaXZpZGUgYSBsb2FkIGJ5IGEgc2NoZWQgZ3JvdXAgY3B1X3Bvd2VyIDogKGxvYWQgLyBzZy0+X19jcHVfcG93ZXIpCi0gKiBTaW5jZSBjcHVfcG93ZXIgaXMgYSAnY29uc3RhbnQnLCB3ZSBjYW4gdXNlIGEgcmVjaXByb2NhbCBkaXZpZGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIHNnX2Rpdl9jcHVfcG93ZXIoY29uc3Qgc3RydWN0IHNjaGVkX2dyb3VwICpzZywgdTMyIGxvYWQpCi17Ci0JcmV0dXJuIHJlY2lwcm9jYWxfZGl2aWRlKGxvYWQsIHNnLT5yZWNpcHJvY2FsX2NwdV9wb3dlcik7Ci19Ci0KLS8qCi0gKiBFYWNoIHRpbWUgYSBzY2hlZCBncm91cCBjcHVfcG93ZXIgaXMgY2hhbmdlZCwKLSAqIHdlIG11c3QgY29tcHV0ZSBpdHMgcmVjaXByb2NhbCB2YWx1ZQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2dfaW5jX2NwdV9wb3dlcihzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNnLCB1MzIgdmFsKQotewotCXNnLT5fX2NwdV9wb3dlciArPSB2YWw7Ci0Jc2ctPnJlY2lwcm9jYWxfY3B1X3Bvd2VyID0gcmVjaXByb2NhbF92YWx1ZShzZy0+X19jcHVfcG93ZXIpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbmxpbmUgaW50IHJ0X3BvbGljeShpbnQgcG9saWN5KQogewogCWlmICh1bmxpa2VseShwb2xpY3kgPT0gU0NIRURfRklGTyB8fCBwb2xpY3kgPT0gU0NIRURfUlIpKQpAQCAtMzA5LDggKzI4Niw4IEBACiAKIC8qCiAgKiBSb290IHRhc2sgZ3JvdXAuCi0gKiAJRXZlcnkgVUlEIHRhc2sgZ3JvdXAgKGluY2x1ZGluZyBpbml0X3Rhc2tfZ3JvdXAgYWthIFVJRC0wKSB3aWxsCi0gKiAJYmUgYSBjaGlsZCB0byB0aGlzIGdyb3VwLgorICoJRXZlcnkgVUlEIHRhc2sgZ3JvdXAgKGluY2x1ZGluZyBpbml0X3Rhc2tfZ3JvdXAgYWthIFVJRC0wKSB3aWxsCisgKgliZSBhIGNoaWxkIHRvIHRoaXMgZ3JvdXAuCiAgKi8KIHN0cnVjdCB0YXNrX2dyb3VwIHJvb3RfdGFza19ncm91cDsKIApAQCAtMzE4LDEyICsyOTUsMTIgQEAKIC8qIERlZmF1bHQgdGFzayBncm91cCdzIHNjaGVkIGVudGl0eSBvbiBlYWNoIGNwdSAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzY2hlZF9lbnRpdHksIGluaXRfc2NoZWRfZW50aXR5KTsKIC8qIERlZmF1bHQgdGFzayBncm91cCdzIGNmc19ycSBvbiBlYWNoIGNwdSAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjZnNfcnEsIGluaXRfY2ZzX3JxKSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBjZnNfcnEsIGluaXRfdGdfY2ZzX3JxKTsKICNlbmRpZiAvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwogCiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNjaGVkX3J0X2VudGl0eSwgaW5pdF9zY2hlZF9ydF9lbnRpdHkpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBydF9ycSwgaW5pdF9ydF9ycSkgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgcnRfcnEsIGluaXRfcnRfcnEpOwogI2VuZGlmIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLwogI2Vsc2UgLyogIUNPTkZJR19VU0VSX1NDSEVEICovCiAjZGVmaW5lIHJvb3RfdGFza19ncm91cCBpbml0X3Rhc2tfZ3JvdXAKQEAgLTYxNiw2ICs1OTMsNyBAQAogCiAJdW5zaWduZWQgY2hhciBpZGxlX2F0X3RpY2s7CiAJLyogRm9yIGFjdGl2ZSBiYWxhbmNpbmcgKi8KKwlpbnQgcG9zdF9zY2hlZHVsZTsKIAlpbnQgYWN0aXZlX2JhbGFuY2U7CiAJaW50IHB1c2hfY3B1OwogCS8qIGNwdSBvZiB0aGlzIHJ1bnF1ZXVlOiAqLwpAQCAtNjI2LDYgKzYwNCw5IEBACiAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1pZ3JhdGlvbl90aHJlYWQ7CiAJc3RydWN0IGxpc3RfaGVhZCBtaWdyYXRpb25fcXVldWU7CisKKwl1NjQgcnRfYXZnOworCXU2NCBhZ2Vfc3RhbXA7CiAjZW5kaWYKIAogCS8qIGNhbGNfbG9hZCByZWxhdGVkIGZpZWxkcyAqLwpAQCAtNjkzLDYgKzY3NCw3IEBACiAjZGVmaW5lIHRoaXNfcnEoKQkJKCZfX2dldF9jcHVfdmFyKHJ1bnF1ZXVlcykpCiAjZGVmaW5lIHRhc2tfcnEocCkJCWNwdV9ycSh0YXNrX2NwdShwKSkKICNkZWZpbmUgY3B1X2N1cnIoY3B1KQkJKGNwdV9ycShjcHUpLT5jdXJyKQorI2RlZmluZSByYXdfcnEoKQkJKCZfX3Jhd19nZXRfY3B1X3ZhcihydW5xdWV1ZXMpKQogCiBpbmxpbmUgdm9pZCB1cGRhdGVfcnFfY2xvY2soc3RydWN0IHJxICpycSkKIHsKQEAgLTg2MSw2ICs4NDMsMTQgQEAKIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfc2hhcmVzX3RocmVzaCA9IDQ7CiAKIC8qCisgKiBwZXJpb2Qgb3ZlciB3aGljaCB3ZSBhdmVyYWdlIHRoZSBSVCB0aW1lIGNvbnN1bXB0aW9uLCBtZWFzdXJlZAorICogaW4gbXMuCisgKgorICogZGVmYXVsdDogMXMKKyAqLworY29uc3RfZGVidWcgdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF90aW1lX2F2ZyA9IE1TRUNfUEVSX1NFQzsKKworLyoKICAqIHBlcmlvZCBvdmVyIHdoaWNoIHdlIG1lYXN1cmUgLXJ0IHRhc2sgY3B1IHVzYWdlIGluIHVzLgogICogZGVmYXVsdDogMXMKICAqLwpAQCAtMTI3OCwxMiArMTI2OCwzNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19OT19IWiAqLwogCitzdGF0aWMgdTY0IHNjaGVkX2F2Z19wZXJpb2Qodm9pZCkKK3sKKwlyZXR1cm4gKHU2NClzeXNjdGxfc2NoZWRfdGltZV9hdmcgKiBOU0VDX1BFUl9NU0VDIC8gMjsKK30KKworc3RhdGljIHZvaWQgc2NoZWRfYXZnX3VwZGF0ZShzdHJ1Y3QgcnEgKnJxKQoreworCXM2NCBwZXJpb2QgPSBzY2hlZF9hdmdfcGVyaW9kKCk7CisKKwl3aGlsZSAoKHM2NCkocnEtPmNsb2NrIC0gcnEtPmFnZV9zdGFtcCkgPiBwZXJpb2QpIHsKKwkJcnEtPmFnZV9zdGFtcCArPSBwZXJpb2Q7CisJCXJxLT5ydF9hdmcgLz0gMjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNjaGVkX3J0X2F2Z191cGRhdGUoc3RydWN0IHJxICpycSwgdTY0IHJ0X2RlbHRhKQoreworCXJxLT5ydF9hdmcgKz0gcnRfZGVsdGE7CisJc2NoZWRfYXZnX3VwZGF0ZShycSk7Cit9CisKICNlbHNlIC8qICFDT05GSUdfU01QICovCiBzdGF0aWMgdm9pZCByZXNjaGVkX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCWFzc2VydF9zcGluX2xvY2tlZCgmdGFza19ycShwKS0+bG9jayk7CiAJc2V0X3Rza19uZWVkX3Jlc2NoZWQocCk7CiB9CisKK3N0YXRpYyB2b2lkIHNjaGVkX3J0X2F2Z191cGRhdGUoc3RydWN0IHJxICpycSwgdTY0IHJ0X2RlbHRhKQoreworfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKQEAgLTE1MTMsMjggKzE1MjgsMzUgQEAKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAKK3N0cnVjdCB1cGRhdGVfc2hhcmVzX2RhdGEgeworCXVuc2lnbmVkIGxvbmcgcnFfd2VpZ2h0W05SX0NQVVNdOworfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB1cGRhdGVfc2hhcmVzX2RhdGEsIHVwZGF0ZV9zaGFyZXNfZGF0YSk7CisKIHN0YXRpYyB2b2lkIF9fc2V0X3NlX3NoYXJlcyhzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgdW5zaWduZWQgbG9uZyBzaGFyZXMpOwogCiAvKgogICogQ2FsY3VsYXRlIGFuZCBzZXQgdGhlIGNwdSdzIGdyb3VwIHNoYXJlcy4KICAqLwotc3RhdGljIHZvaWQKLXVwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgaW50IGNwdSwKLQkJCXVuc2lnbmVkIGxvbmcgc2Rfc2hhcmVzLCB1bnNpZ25lZCBsb25nIHNkX3JxX3dlaWdodCkKK3N0YXRpYyB2b2lkIHVwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgaW50IGNwdSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBzZF9zaGFyZXMsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2RfcnFfd2VpZ2h0LAorCQkJCSAgICBzdHJ1Y3QgdXBkYXRlX3NoYXJlc19kYXRhICp1c2QpCiB7Ci0JdW5zaWduZWQgbG9uZyBzaGFyZXM7Ci0JdW5zaWduZWQgbG9uZyBycV93ZWlnaHQ7CisJdW5zaWduZWQgbG9uZyBzaGFyZXMsIHJxX3dlaWdodDsKKwlpbnQgYm9vc3QgPSAwOwogCi0JaWYgKCF0Zy0+c2VbY3B1XSkKLQkJcmV0dXJuOwotCi0JcnFfd2VpZ2h0ID0gdGctPmNmc19ycVtjcHVdLT5ycV93ZWlnaHQ7CisJcnFfd2VpZ2h0ID0gdXNkLT5ycV93ZWlnaHRbY3B1XTsKKwlpZiAoIXJxX3dlaWdodCkgeworCQlib29zdCA9IDE7CisJCXJxX3dlaWdodCA9IE5JQ0VfMF9MT0FEOworCX0KIAogCS8qCi0JICogICAgICAgICAgIFxTdW0gc2hhcmVzICogcnFfd2VpZ2h0Ci0JICogc2hhcmVzID0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogICAgICAgICAgICAgICBcU3VtIHJxX3dlaWdodAotCSAqCisJICogICAgICAgICAgICAgXFN1bV9qIHNoYXJlc19qICogcnFfd2VpZ2h0X2kKKwkgKiBzaGFyZXNfaSA9ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgICAgICAgICAgICAgICAgXFN1bV9qIHJxX3dlaWdodF9qCiAJICovCiAJc2hhcmVzID0gKHNkX3NoYXJlcyAqIHJxX3dlaWdodCkgLyBzZF9ycV93ZWlnaHQ7CiAJc2hhcmVzID0gY2xhbXBfdCh1bnNpZ25lZCBsb25nLCBzaGFyZXMsIE1JTl9TSEFSRVMsIE1BWF9TSEFSRVMpOwpAQCAtMTU0NSw4ICsxNTY3LDggQEAKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKLQkJdGctPmNmc19ycVtjcHVdLT5zaGFyZXMgPSBzaGFyZXM7Ci0KKwkJdGctPmNmc19ycVtjcHVdLT5ycV93ZWlnaHQgPSBib29zdCA/IDAgOiBycV93ZWlnaHQ7CisJCXRnLT5jZnNfcnFbY3B1XS0+c2hhcmVzID0gYm9vc3QgPyAwIDogc2hhcmVzOwogCQlfX3NldF9zZV9zaGFyZXModGctPnNlW2NwdV0sIHNoYXJlcyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CiAJfQpAQCAtMTU1OSwyMiArMTU4MSwzMCBAQAogICovCiBzdGF0aWMgaW50IHRnX3NoYXJlc191cChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHZvaWQgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyB3ZWlnaHQsIHJxX3dlaWdodCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzaGFyZXMgPSAwOworCXVuc2lnbmVkIGxvbmcgd2VpZ2h0LCBycV93ZWlnaHQgPSAwLCBzaGFyZXMgPSAwOworCXN0cnVjdCB1cGRhdGVfc2hhcmVzX2RhdGEgKnVzZDsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAorCWlmICghdGctPnNlWzBdKQorCQlyZXR1cm4gMDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl1c2QgPSAmX19nZXRfY3B1X3Zhcih1cGRhdGVfc2hhcmVzX2RhdGEpOworCiAJZm9yX2VhY2hfY3B1KGksIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkgeworCQl3ZWlnaHQgPSB0Zy0+Y2ZzX3JxW2ldLT5sb2FkLndlaWdodDsKKwkJdXNkLT5ycV93ZWlnaHRbaV0gPSB3ZWlnaHQ7CisKIAkJLyoKIAkJICogSWYgdGhlcmUgYXJlIGN1cnJlbnRseSBubyB0YXNrcyBvbiB0aGUgY3B1IHByZXRlbmQgdGhlcmUKIAkJICogaXMgb25lIG9mIGF2ZXJhZ2UgbG9hZCBzbyB0aGF0IHdoZW4gYSBuZXcgdGFzayBnZXRzIHRvCiAJCSAqIHJ1biBoZXJlIGl0IHdpbGwgbm90IGdldCBkZWxheWVkIGJ5IGdyb3VwIHN0YXJ2YXRpb24uCiAJCSAqLwotCQl3ZWlnaHQgPSB0Zy0+Y2ZzX3JxW2ldLT5sb2FkLndlaWdodDsKIAkJaWYgKCF3ZWlnaHQpCiAJCQl3ZWlnaHQgPSBOSUNFXzBfTE9BRDsKIAotCQl0Zy0+Y2ZzX3JxW2ldLT5ycV93ZWlnaHQgPSB3ZWlnaHQ7CiAJCXJxX3dlaWdodCArPSB3ZWlnaHQ7CiAJCXNoYXJlcyArPSB0Zy0+Y2ZzX3JxW2ldLT5zaGFyZXM7CiAJfQpAQCAtMTU4Niw3ICsxNjE2LDkgQEAKIAkJc2hhcmVzID0gdGctPnNoYXJlczsKIAogCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9kb21haW5fc3BhbihzZCkpCi0JCXVwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHRnLCBpLCBzaGFyZXMsIHJxX3dlaWdodCk7CisJCXVwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHRnLCBpLCBzaGFyZXMsIHJxX3dlaWdodCwgdXNkKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTYxNiw4ICsxNjQ4LDE0IEBACiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9zaGFyZXMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCiB7Ci0JdTY0IG5vdyA9IGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlzNjQgZWxhcHNlZCA9IG5vdyAtIHNkLT5sYXN0X3VwZGF0ZTsKKwlzNjQgZWxhcHNlZDsKKwl1NjQgbm93OworCisJaWYgKHJvb3RfdGFza19ncm91cF9lbXB0eSgpKQorCQlyZXR1cm47CisKKwlub3cgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJZWxhcHNlZCA9IG5vdyAtIHNkLT5sYXN0X3VwZGF0ZTsKIAogCWlmIChlbGFwc2VkID49IChzNjQpKHU2NClzeXNjdGxfc2NoZWRfc2hhcmVzX3JhdGVsaW1pdCkgewogCQlzZC0+bGFzdF91cGRhdGUgPSBub3c7CkBAIC0xNjI3LDYgKzE2NjUsOSBAQAogCiBzdGF0aWMgdm9pZCB1cGRhdGVfc2hhcmVzX2xvY2tlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKIHsKKwlpZiAocm9vdF90YXNrX2dyb3VwX2VtcHR5KCkpCisJCXJldHVybjsKKwogCXNwaW5fdW5sb2NrKCZycS0+bG9jayk7CiAJdXBkYXRlX3NoYXJlcyhzZCk7CiAJc3Bpbl9sb2NrKCZycS0+bG9jayk7CkBAIC0xNjM0LDYgKzE2NzUsOSBAQAogCiBzdGF0aWMgdm9pZCB1cGRhdGVfaF9sb2FkKGxvbmcgY3B1KQogeworCWlmIChyb290X3Rhc2tfZ3JvdXBfZW1wdHkoKSkKKwkJcmV0dXJuOworCiAJd2Fsa190Z190cmVlKHRnX2xvYWRfZG93biwgdGdfbm9wLCAodm9pZCAqKWNwdSk7CiB9CiAKQEAgLTIyNjgsOCArMjMxMiw3IEBACiAJCX0KIAogCQkvKiBBZGp1c3QgYnkgcmVsYXRpdmUgQ1BVIHBvd2VyIG9mIHRoZSBncm91cCAqLwotCQlhdmdfbG9hZCA9IHNnX2Rpdl9jcHVfcG93ZXIoZ3JvdXAsCi0JCQkJYXZnX2xvYWQgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKKwkJYXZnX2xvYWQgPSAoYXZnX2xvYWQgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvIGdyb3VwLT5jcHVfcG93ZXI7CiAKIAkJaWYgKGxvY2FsX2dyb3VwKSB7CiAJCQl0aGlzX2xvYWQgPSBhdmdfbG9hZDsKQEAgLTI2MzcsOSArMjY4MCwzMiBAQAogCXNldF90YXNrX2NwdShwLCBjcHUpOwogCiAJLyoKLQkgKiBNYWtlIHN1cmUgd2UgZG8gbm90IGxlYWsgUEkgYm9vc3RpbmcgcHJpb3JpdHkgdG8gdGhlIGNoaWxkOgorCSAqIE1ha2Ugc3VyZSB3ZSBkbyBub3QgbGVhayBQSSBib29zdGluZyBwcmlvcml0eSB0byB0aGUgY2hpbGQuCiAJICovCiAJcC0+cHJpbyA9IGN1cnJlbnQtPm5vcm1hbF9wcmlvOworCisJLyoKKwkgKiBSZXZlcnQgdG8gZGVmYXVsdCBwcmlvcml0eS9wb2xpY3kgb24gZm9yayBpZiByZXF1ZXN0ZWQuCisJICovCisJaWYgKHVubGlrZWx5KHAtPnNjaGVkX3Jlc2V0X29uX2ZvcmspKSB7CisJCWlmIChwLT5wb2xpY3kgPT0gU0NIRURfRklGTyB8fCBwLT5wb2xpY3kgPT0gU0NIRURfUlIpCisJCQlwLT5wb2xpY3kgPSBTQ0hFRF9OT1JNQUw7CisKKwkJaWYgKHAtPm5vcm1hbF9wcmlvIDwgREVGQVVMVF9QUklPKQorCQkJcC0+cHJpbyA9IERFRkFVTFRfUFJJTzsKKworCQlpZiAoUFJJT19UT19OSUNFKHAtPnN0YXRpY19wcmlvKSA8IDApIHsKKwkJCXAtPnN0YXRpY19wcmlvID0gTklDRV9UT19QUklPKDApOworCQkJc2V0X2xvYWRfd2VpZ2h0KHApOworCQl9CisKKwkJLyoKKwkJICogV2UgZG9uJ3QgbmVlZCB0aGUgcmVzZXQgZmxhZyBhbnltb3JlIGFmdGVyIHRoZSBmb3JrLiBJdCBoYXMKKwkJICogZnVsZmlsbGVkIGl0cyBkdXR5OgorCQkgKi8KKwkJcC0+c2NoZWRfcmVzZXRfb25fZm9yayA9IDA7CisJfQorCiAJaWYgKCFydF9wcmlvKHAtPnByaW8pKQogCQlwLT5zY2hlZF9jbGFzcyA9ICZmYWlyX3NjaGVkX2NsYXNzOwogCkBAIC0yNzk2LDEyICsyODYyLDYgQEAKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJxLT5wcmV2X21tOwogCWxvbmcgcHJldl9zdGF0ZTsKLSNpZmRlZiBDT05GSUdfU01QCi0JaW50IHBvc3Rfc2NoZWR1bGUgPSAwOwotCi0JaWYgKGN1cnJlbnQtPnNjaGVkX2NsYXNzLT5uZWVkc19wb3N0X3NjaGVkdWxlKQotCQlwb3N0X3NjaGVkdWxlID0gY3VycmVudC0+c2NoZWRfY2xhc3MtPm5lZWRzX3Bvc3Rfc2NoZWR1bGUocnEpOwotI2VuZGlmCiAKIAlycS0+cHJldl9tbSA9IE5VTEw7CiAKQEAgLTI4MjAsMTAgKzI4ODAsNiBAQAogCWZpbmlzaF9hcmNoX3N3aXRjaChwcmV2KTsKIAlwZXJmX2NvdW50ZXJfdGFza19zY2hlZF9pbihjdXJyZW50LCBjcHVfb2YocnEpKTsKIAlmaW5pc2hfbG9ja19zd2l0Y2gocnEsIHByZXYpOwotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAocG9zdF9zY2hlZHVsZSkKLQkJY3VycmVudC0+c2NoZWRfY2xhc3MtPnBvc3Rfc2NoZWR1bGUocnEpOwotI2VuZGlmCiAKIAlmaXJlX3NjaGVkX2luX3ByZWVtcHRfbm90aWZpZXJzKGN1cnJlbnQpOwogCWlmIChtbSkKQEAgLTI4MzgsNiArMjg5NCw0MiBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19TTVAKKworLyogYXNzdW1lcyBycS0+bG9jayBpcyBoZWxkICovCitzdGF0aWMgaW5saW5lIHZvaWQgcHJlX3NjaGVkdWxlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKK3sKKwlpZiAocHJldi0+c2NoZWRfY2xhc3MtPnByZV9zY2hlZHVsZSkKKwkJcHJldi0+c2NoZWRfY2xhc3MtPnByZV9zY2hlZHVsZShycSwgcHJldik7Cit9CisKKy8qIHJxLT5sb2NrIGlzIE5PVCBoZWxkLCBidXQgcHJlZW1wdGlvbiBpcyBkaXNhYmxlZCAqLworc3RhdGljIGlubGluZSB2b2lkIHBvc3Rfc2NoZWR1bGUoc3RydWN0IHJxICpycSkKK3sKKwlpZiAocnEtPnBvc3Rfc2NoZWR1bGUpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKHJxLT5jdXJyLT5zY2hlZF9jbGFzcy0+cG9zdF9zY2hlZHVsZSkKKwkJCXJxLT5jdXJyLT5zY2hlZF9jbGFzcy0+cG9zdF9zY2hlZHVsZShycSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CisKKwkJcnEtPnBvc3Rfc2NoZWR1bGUgPSAwOworCX0KK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHByZV9zY2hlZHVsZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3N0X3NjaGVkdWxlKHN0cnVjdCBycSAqcnEpCit7Cit9CisKKyNlbmRpZgorCiAvKioKICAqIHNjaGVkdWxlX3RhaWwgLSBmaXJzdCB0aGluZyBhIGZyZXNobHkgZm9ya2VkIHRocmVhZCBtdXN0IGNhbGwuCiAgKiBAcHJldjogdGhlIHRocmVhZCB3ZSBqdXN0IHN3aXRjaGVkIGF3YXkgZnJvbS4KQEAgLTI4NDgsNiArMjk0MCwxMyBAQAogCXN0cnVjdCBycSAqcnEgPSB0aGlzX3JxKCk7CiAKIAlmaW5pc2hfdGFza19zd2l0Y2gocnEsIHByZXYpOworCisJLyoKKwkgKiBGSVhNRTogZG8gd2UgbmVlZCB0byB3b3JyeSBhYm91dCBycSBiZWluZyBpbnZhbGlkYXRlZCBieSB0aGUKKwkgKiB0YXNrX3N3aXRjaD8KKwkgKi8KKwlwb3N0X3NjaGVkdWxlKHJxKTsKKwogI2lmZGVmIF9fQVJDSF9XQU5UX1VOTE9DS0VEX0NUWFNXCiAJLyogSW4gdGhpcyBjYXNlLCBmaW5pc2hfdGFza19zd2l0Y2ggZG9lcyBub3QgcmVlbmFibGUgcHJlZW1wdGlvbiAqLwogCXByZWVtcHRfZW5hYmxlKCk7CkBAIC0zMzc5LDkgKzM0NzgsMTAgQEAKIHsKIAljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKmNsYXNzOwogCi0JZm9yIChjbGFzcyA9IHNjaGVkX2NsYXNzX2hpZ2hlc3Q7IGNsYXNzOyBjbGFzcyA9IGNsYXNzLT5uZXh0KQorCWZvcl9lYWNoX2NsYXNzKGNsYXNzKSB7CiAJCWlmIChjbGFzcy0+bW92ZV9vbmVfdGFzayh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwgc2QsIGlkbGUpKQogCQkJcmV0dXJuIDE7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNTQ0LDcgKzM2NDQsNyBAQAogCSAqIGNhcGFjaXR5IGJ1dCBzdGlsbCBoYXMgc29tZSBzcGFjZSB0byBwaWNrIHVwIHNvbWUgbG9hZAogCSAqIGZyb20gb3RoZXIgZ3JvdXAgYW5kIHNhdmUgbW9yZSBwb3dlcgogCSAqLwotCWlmIChzZ3MtPnN1bV9ucl9ydW5uaW5nID4gc2dzLT5ncm91cF9jYXBhY2l0eSAtIDEpCisJaWYgKHNncy0+c3VtX25yX3J1bm5pbmcgKyAxID4gc2dzLT5ncm91cF9jYXBhY2l0eSkKIAkJcmV0dXJuOwogCiAJaWYgKHNncy0+c3VtX25yX3J1bm5pbmcgPiBzZHMtPmxlYWRlcl9ucl9ydW5uaW5nIHx8CkBAIC0zNjExLDYgKzM3MTEsNzcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfU0NIRURfTUMgfHwgQ09ORklHX1NDSEVEX1NNVCAqLwogCit1bnNpZ25lZCBsb25nIF9fd2VhayBhcmNoX3NjYWxlX3NtdF9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIHdlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSk7CisJdW5zaWduZWQgbG9uZyBzbXRfZ2FpbiA9IHNkLT5zbXRfZ2FpbjsKKworCXNtdF9nYWluIC89IHdlaWdodDsKKworCXJldHVybiBzbXRfZ2FpbjsKK30KKwordW5zaWduZWQgbG9uZyBzY2FsZV9ydF9wb3dlcihpbnQgY3B1KQoreworCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKKwl1NjQgdG90YWwsIGF2YWlsYWJsZTsKKworCXNjaGVkX2F2Z191cGRhdGUocnEpOworCisJdG90YWwgPSBzY2hlZF9hdmdfcGVyaW9kKCkgKyAocnEtPmNsb2NrIC0gcnEtPmFnZV9zdGFtcCk7CisJYXZhaWxhYmxlID0gdG90YWwgLSBycS0+cnRfYXZnOworCisJaWYgKHVubGlrZWx5KChzNjQpdG90YWwgPCBTQ0hFRF9MT0FEX1NDQUxFKSkKKwkJdG90YWwgPSBTQ0hFRF9MT0FEX1NDQUxFOworCisJdG90YWwgPj49IFNDSEVEX0xPQURfU0hJRlQ7CisKKwlyZXR1cm4gZGl2X3U2NChhdmFpbGFibGUsIHRvdGFsKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2NwdV9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIHdlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSk7CisJdW5zaWduZWQgbG9uZyBwb3dlciA9IFNDSEVEX0xPQURfU0NBTEU7CisJc3RydWN0IHNjaGVkX2dyb3VwICpzZGcgPSBzZC0+Z3JvdXBzOworCisJLyogaGVyZSB3ZSBjb3VsZCBzY2FsZSBiYXNlZCBvbiBjcHVmcmVxICovCisKKwlpZiAoKHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSKSAmJiB3ZWlnaHQgPiAxKSB7CisJCXBvd2VyICo9IGFyY2hfc2NhbGVfc210X3Bvd2VyKHNkLCBjcHUpOworCQlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKKwl9CisKKwlwb3dlciAqPSBzY2FsZV9ydF9wb3dlcihjcHUpOworCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOworCisJaWYgKCFwb3dlcikKKwkJcG93ZXIgPSAxOworCisJc2RnLT5jcHVfcG93ZXIgPSBwb3dlcjsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2dyb3VwX3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQoreworCXN0cnVjdCBzY2hlZF9kb21haW4gKmNoaWxkID0gc2QtPmNoaWxkOworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsICpzZGcgPSBzZC0+Z3JvdXBzOworCXVuc2lnbmVkIGxvbmcgcG93ZXI7CisKKwlpZiAoIWNoaWxkKSB7CisJCXVwZGF0ZV9jcHVfcG93ZXIoc2QsIGNwdSk7CisJCXJldHVybjsKKwl9CisKKwlwb3dlciA9IDA7CisKKwlncm91cCA9IGNoaWxkLT5ncm91cHM7CisJZG8geworCQlwb3dlciArPSBncm91cC0+Y3B1X3Bvd2VyOworCQlncm91cCA9IGdyb3VwLT5uZXh0OworCX0gd2hpbGUgKGdyb3VwICE9IGNoaWxkLT5ncm91cHMpOworCisJc2RnLT5jcHVfcG93ZXIgPSBwb3dlcjsKK30KIAogLyoqCiAgKiB1cGRhdGVfc2dfbGJfc3RhdHMgLSBVcGRhdGUgc2NoZWRfZ3JvdXAncyBzdGF0aXN0aWNzIGZvciBsb2FkIGJhbGFuY2luZy4KQEAgLTM2MjQsNyArMzc5NSw4IEBACiAgKiBAYmFsYW5jZTogU2hvdWxkIHdlIGJhbGFuY2UuCiAgKiBAc2dzOiB2YXJpYWJsZSB0byBob2xkIHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIGdyb3VwLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NnX2xiX3N0YXRzKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsIGludCB0aGlzX2NwdSwKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2dfbGJfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJCQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBpbnQgdGhpc19jcHUsCiAJCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50IGxvYWRfaWR4LCBpbnQgKnNkX2lkbGUsCiAJCQlpbnQgbG9jYWxfZ3JvdXAsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLAogCQkJaW50ICpiYWxhbmNlLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKQEAgLTM2MzUsOCArMzgwNywxMSBAQAogCXVuc2lnbmVkIGxvbmcgc3VtX2F2Z19sb2FkX3Blcl90YXNrOwogCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWRfcGVyX3Rhc2s7CiAKLQlpZiAobG9jYWxfZ3JvdXApCisJaWYgKGxvY2FsX2dyb3VwKSB7CiAJCWJhbGFuY2VfY3B1ID0gZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKTsKKwkJaWYgKGJhbGFuY2VfY3B1ID09IHRoaXNfY3B1KQorCQkJdXBkYXRlX2dyb3VwX3Bvd2VyKHNkLCB0aGlzX2NwdSk7CisJfQogCiAJLyogVGFsbHkgdXAgdGhlIGxvYWQgb2YgYWxsIENQVXMgaW4gdGhlIGdyb3VwICovCiAJc3VtX2F2Z19sb2FkX3Blcl90YXNrID0gYXZnX2xvYWRfcGVyX3Rhc2sgPSAwOwpAQCAtMzY4NSw4ICszODYwLDcgQEAKIAl9CiAKIAkvKiBBZGp1c3QgYnkgcmVsYXRpdmUgQ1BVIHBvd2VyIG9mIHRoZSBncm91cCAqLwotCXNncy0+YXZnX2xvYWQgPSBzZ19kaXZfY3B1X3Bvd2VyKGdyb3VwLAotCQkJc2dzLT5ncm91cF9sb2FkICogU0NIRURfTE9BRF9TQ0FMRSk7CisJc2dzLT5hdmdfbG9hZCA9IChzZ3MtPmdyb3VwX2xvYWQgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvIGdyb3VwLT5jcHVfcG93ZXI7CiAKIAogCS8qCkBAIC0zNjk4LDE0ICszODcyLDE0IEBACiAJICogICAgICBub3JtYWxpemVkIG5yX3J1bm5pbmcgbnVtYmVyIHNvbWV3aGVyZSB0aGF0IG5lZ2F0ZXMKIAkgKiAgICAgIHRoZSBoaWVyYXJjaHk/CiAJICovCi0JYXZnX2xvYWRfcGVyX3Rhc2sgPSBzZ19kaXZfY3B1X3Bvd2VyKGdyb3VwLAotCQkJc3VtX2F2Z19sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSk7CisJYXZnX2xvYWRfcGVyX3Rhc2sgPSAoc3VtX2F2Z19sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkgLworCQlncm91cC0+Y3B1X3Bvd2VyOwogCiAJaWYgKChtYXhfY3B1X2xvYWQgLSBtaW5fY3B1X2xvYWQpID4gMiphdmdfbG9hZF9wZXJfdGFzaykKIAkJc2dzLT5ncm91cF9pbWIgPSAxOwogCi0Jc2dzLT5ncm91cF9jYXBhY2l0eSA9IGdyb3VwLT5fX2NwdV9wb3dlciAvIFNDSEVEX0xPQURfU0NBTEU7Ci0KKwlzZ3MtPmdyb3VwX2NhcGFjaXR5ID0KKwkJRElWX1JPVU5EX0NMT1NFU1QoZ3JvdXAtPmNwdV9wb3dlciwgU0NIRURfTE9BRF9TQ0FMRSk7CiB9CiAKIC8qKgpAQCAtMzcyMyw5ICszODk3LDEzIEBACiAJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywgaW50ICpiYWxhbmNlLAogCQkJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMpCiB7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqY2hpbGQgPSBzZC0+Y2hpbGQ7CiAJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCA9IHNkLT5ncm91cHM7CiAJc3RydWN0IHNnX2xiX3N0YXRzIHNnczsKLQlpbnQgbG9hZF9pZHg7CisJaW50IGxvYWRfaWR4LCBwcmVmZXJfc2libGluZyA9IDA7CisKKwlpZiAoY2hpbGQgJiYgY2hpbGQtPmZsYWdzICYgU0RfUFJFRkVSX1NJQkxJTkcpCisJCXByZWZlcl9zaWJsaW5nID0gMTsKIAogCWluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzZCwgc2RzLCBpZGxlKTsKIAlsb2FkX2lkeCA9IGdldF9zZF9sb2FkX2lkeChzZCwgaWRsZSk7CkBAIC0zNzM2LDE0ICszOTE0LDIyIEBACiAJCWxvY2FsX2dyb3VwID0gY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwKIAkJCQkJICAgICAgIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKIAkJbWVtc2V0KCZzZ3MsIDAsIHNpemVvZihzZ3MpKTsKLQkJdXBkYXRlX3NnX2xiX3N0YXRzKGdyb3VwLCB0aGlzX2NwdSwgaWRsZSwgbG9hZF9pZHgsIHNkX2lkbGUsCisJCXVwZGF0ZV9zZ19sYl9zdGF0cyhzZCwgZ3JvdXAsIHRoaXNfY3B1LCBpZGxlLCBsb2FkX2lkeCwgc2RfaWRsZSwKIAkJCQlsb2NhbF9ncm91cCwgY3B1cywgYmFsYW5jZSwgJnNncyk7CiAKIAkJaWYgKGxvY2FsX2dyb3VwICYmIGJhbGFuY2UgJiYgISgqYmFsYW5jZSkpCiAJCQlyZXR1cm47CiAKIAkJc2RzLT50b3RhbF9sb2FkICs9IHNncy5ncm91cF9sb2FkOwotCQlzZHMtPnRvdGFsX3B3ciArPSBncm91cC0+X19jcHVfcG93ZXI7CisJCXNkcy0+dG90YWxfcHdyICs9IGdyb3VwLT5jcHVfcG93ZXI7CisKKwkJLyoKKwkJICogSW4gY2FzZSB0aGUgY2hpbGQgZG9tYWluIHByZWZlcnMgdGFza3MgZ28gdG8gc2libGluZ3MKKwkJICogZmlyc3QsIGxvd2VyIHRoZSBncm91cCBjYXBhY2l0eSB0byBvbmUgc28gdGhhdCB3ZSdsbCB0cnkKKwkJICogYW5kIG1vdmUgYWxsIHRoZSBleGNlc3MgdGFza3MgYXdheS4KKwkJICovCisJCWlmIChwcmVmZXJfc2libGluZykKKwkJCXNncy5ncm91cF9jYXBhY2l0eSA9IG1pbihzZ3MuZ3JvdXBfY2FwYWNpdHksIDFVTCk7CiAKIAkJaWYgKGxvY2FsX2dyb3VwKSB7CiAJCQlzZHMtPnRoaXNfbG9hZCA9IHNncy5hdmdfbG9hZDsKQEAgLTM3NjMsNyArMzk0OSw2IEBACiAJCXVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKGdyb3VwLCBzZHMsIGxvY2FsX2dyb3VwLCAmc2dzKTsKIAkJZ3JvdXAgPSBncm91cC0+bmV4dDsKIAl9IHdoaWxlIChncm91cCAhPSBzZC0+Z3JvdXBzKTsKLQogfQogCiAvKioKQEAgLTM4MDEsMjggKzM5ODYsMjggQEAKIAkgKiBtb3ZpbmcgdGhlbS4KIAkgKi8KIAotCXB3cl9ub3cgKz0gc2RzLT5idXNpZXN0LT5fX2NwdV9wb3dlciAqCisJcHdyX25vdyArPSBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciAqCiAJCQltaW4oc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy0+bWF4X2xvYWQpOwotCXB3cl9ub3cgKz0gc2RzLT50aGlzLT5fX2NwdV9wb3dlciAqCisJcHdyX25vdyArPSBzZHMtPnRoaXMtPmNwdV9wb3dlciAqCiAJCQltaW4oc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2ssIHNkcy0+dGhpc19sb2FkKTsKIAlwd3Jfbm93IC89IFNDSEVEX0xPQURfU0NBTEU7CiAKIAkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIHN1YnRyYWN0ICovCi0JdG1wID0gc2dfZGl2X2NwdV9wb3dlcihzZHMtPmJ1c2llc3QsCi0JCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpOworCXRtcCA9IChzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpIC8KKwkJc2RzLT5idXNpZXN0LT5jcHVfcG93ZXI7CiAJaWYgKHNkcy0+bWF4X2xvYWQgPiB0bXApCi0JCXB3cl9tb3ZlICs9IHNkcy0+YnVzaWVzdC0+X19jcHVfcG93ZXIgKgorCQlwd3JfbW92ZSArPSBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciAqCiAJCQltaW4oc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy0+bWF4X2xvYWQgLSB0bXApOwogCiAJLyogQW1vdW50IG9mIGxvYWQgd2UnZCBhZGQgKi8KLQlpZiAoc2RzLT5tYXhfbG9hZCAqIHNkcy0+YnVzaWVzdC0+X19jcHVfcG93ZXIgPAorCWlmIChzZHMtPm1heF9sb2FkICogc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIgPAogCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpCi0JCXRtcCA9IHNnX2Rpdl9jcHVfcG93ZXIoc2RzLT50aGlzLAotCQkJc2RzLT5tYXhfbG9hZCAqIHNkcy0+YnVzaWVzdC0+X19jcHVfcG93ZXIpOworCQl0bXAgPSAoc2RzLT5tYXhfbG9hZCAqIHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyKSAvCisJCQlzZHMtPnRoaXMtPmNwdV9wb3dlcjsKIAllbHNlCi0JCXRtcCA9IHNnX2Rpdl9jcHVfcG93ZXIoc2RzLT50aGlzLAotCQkJc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKTsKLQlwd3JfbW92ZSArPSBzZHMtPnRoaXMtPl9fY3B1X3Bvd2VyICoKKwkJdG1wID0gKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkgLworCQkJc2RzLT50aGlzLT5jcHVfcG93ZXI7CisJcHdyX21vdmUgKz0gc2RzLT50aGlzLT5jcHVfcG93ZXIgKgogCQkJbWluKHNkcy0+dGhpc19sb2FkX3Blcl90YXNrLCBzZHMtPnRoaXNfbG9hZCArIHRtcCk7CiAJcHdyX21vdmUgLz0gU0NIRURfTE9BRF9TQ0FMRTsKIApAQCAtMzg1Nyw4ICs0MDQyLDggQEAKIAkJCXNkcy0+bWF4X2xvYWQgLSBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayk7CiAKIAkvKiBIb3cgbXVjaCBsb2FkIHRvIGFjdHVhbGx5IG1vdmUgdG8gZXF1YWxpc2UgdGhlIGltYmFsYW5jZSAqLwotCSppbWJhbGFuY2UgPSBtaW4obWF4X3B1bGwgKiBzZHMtPmJ1c2llc3QtPl9fY3B1X3Bvd2VyLAotCQkoc2RzLT5hdmdfbG9hZCAtIHNkcy0+dGhpc19sb2FkKSAqIHNkcy0+dGhpcy0+X19jcHVfcG93ZXIpCisJKmltYmFsYW5jZSA9IG1pbihtYXhfcHVsbCAqIHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyLAorCQkoc2RzLT5hdmdfbG9hZCAtIHNkcy0+dGhpc19sb2FkKSAqIHNkcy0+dGhpcy0+Y3B1X3Bvd2VyKQogCQkJLyBTQ0hFRF9MT0FEX1NDQUxFOwogCiAJLyoKQEAgLTM5NzYsNiArNDE2MSwyNiBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9vZihpbnQgY3B1KQoreworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gcmN1X2RlcmVmZXJlbmNlKGNwdV9ycShjcHUpLT5zZCk7CisKKwlpZiAoIXNkKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBzZC0+Z3JvdXBzOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwb3dlcl9vZihpbnQgY3B1KQoreworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAgPSBncm91cF9vZihjcHUpOworCisJaWYgKCFncm91cCkKKwkJcmV0dXJuIFNDSEVEX0xPQURfU0NBTEU7CisKKwlyZXR1cm4gZ3JvdXAtPmNwdV9wb3dlcjsKK30KKwogLyoKICAqIGZpbmRfYnVzaWVzdF9xdWV1ZSAtIGZpbmQgdGhlIGJ1c2llc3QgcnVucXVldWUgYW1vbmcgdGhlIGNwdXMgaW4gZ3JvdXAuCiAgKi8KQEAgLTM5ODgsMTUgKzQxOTMsMTggQEAKIAlpbnQgaTsKIAogCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSkgeworCQl1bnNpZ25lZCBsb25nIHBvd2VyID0gcG93ZXJfb2YoaSk7CisJCXVuc2lnbmVkIGxvbmcgY2FwYWNpdHkgPSBESVZfUk9VTkRfQ0xPU0VTVChwb3dlciwgU0NIRURfTE9BRF9TQ0FMRSk7CiAJCXVuc2lnbmVkIGxvbmcgd2w7CiAKIAkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdXMpKQogCQkJY29udGludWU7CiAKIAkJcnEgPSBjcHVfcnEoaSk7Ci0JCXdsID0gd2VpZ2h0ZWRfY3B1bG9hZChpKTsKKwkJd2wgPSB3ZWlnaHRlZF9jcHVsb2FkKGkpICogU0NIRURfTE9BRF9TQ0FMRTsKKwkJd2wgLz0gcG93ZXI7CiAKLQkJaWYgKHJxLT5ucl9ydW5uaW5nID09IDEgJiYgd2wgPiBpbWJhbGFuY2UpCisJCWlmIChjYXBhY2l0eSAmJiBycS0+bnJfcnVubmluZyA9PSAxICYmIHdsID4gaW1iYWxhbmNlKQogCQkJY29udGludWU7CiAKIAkJaWYgKHdsID4gbWF4X2xvYWQpIHsKQEAgLTUzMjUsNyArNTUzMyw3IEBACiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXJxID0gY3B1X3JxKGNwdSk7Ci0JcmN1X3FzY3RyX2luYyhjcHUpOworCXJjdV9zY2hlZF9xcyhjcHUpOwogCXByZXYgPSBycS0+Y3VycjsKIAlzd2l0Y2hfY291bnQgPSAmcHJldi0+bml2Y3N3OwogCkBAIC01MzQ5LDEwICs1NTU3LDcgQEAKIAkJc3dpdGNoX2NvdW50ID0gJnByZXYtPm52Y3N3OwogCX0KIAotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAocHJldi0+c2NoZWRfY2xhc3MtPnByZV9zY2hlZHVsZSkKLQkJcHJldi0+c2NoZWRfY2xhc3MtPnByZV9zY2hlZHVsZShycSwgcHJldik7Ci0jZW5kaWYKKwlwcmVfc2NoZWR1bGUocnEsIHByZXYpOwogCiAJaWYgKHVubGlrZWx5KCFycS0+bnJfcnVubmluZykpCiAJCWlkbGVfYmFsYW5jZShjcHUsIHJxKTsKQEAgLTUzNzgsNiArNTU4Myw4IEBACiAJfSBlbHNlCiAJCXNwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwogCisJcG9zdF9zY2hlZHVsZShycSk7CisKIAlpZiAodW5saWtlbHkocmVhY3F1aXJlX2tlcm5lbF9sb2NrKGN1cnJlbnQpIDwgMCkpCiAJCWdvdG8gbmVlZF9yZXNjaGVkX25vbnByZWVtcHRpYmxlOwogCkBAIC02MTIzLDE3ICs2MzMwLDI1IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKnByZXZfY2xhc3MgPSBwLT5zY2hlZF9jbGFzczsKIAlzdHJ1Y3QgcnEgKnJxOworCWludCByZXNldF9vbl9mb3JrOwogCiAJLyogbWF5IGdyYWIgbm9uLWlycSBwcm90ZWN0ZWQgc3Bpbl9sb2NrcyAqLwogCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiByZWNoZWNrOgogCS8qIGRvdWJsZSBjaGVjayBwb2xpY3kgb25jZSBycSBsb2NrIGhlbGQgKi8KLQlpZiAocG9saWN5IDwgMCkKKwlpZiAocG9saWN5IDwgMCkgeworCQlyZXNldF9vbl9mb3JrID0gcC0+c2NoZWRfcmVzZXRfb25fZm9yazsKIAkJcG9saWN5ID0gb2xkcG9saWN5ID0gcC0+cG9saWN5OwotCWVsc2UgaWYgKHBvbGljeSAhPSBTQ0hFRF9GSUZPICYmIHBvbGljeSAhPSBTQ0hFRF9SUiAmJgotCQkJcG9saWN5ICE9IFNDSEVEX05PUk1BTCAmJiBwb2xpY3kgIT0gU0NIRURfQkFUQ0ggJiYKLQkJCXBvbGljeSAhPSBTQ0hFRF9JRExFKQotCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyZXNldF9vbl9mb3JrID0gISEocG9saWN5ICYgU0NIRURfUkVTRVRfT05fRk9SSyk7CisJCXBvbGljeSAmPSB+U0NIRURfUkVTRVRfT05fRk9SSzsKKworCQlpZiAocG9saWN5ICE9IFNDSEVEX0ZJRk8gJiYgcG9saWN5ICE9IFNDSEVEX1JSICYmCisJCQkJcG9saWN5ICE9IFNDSEVEX05PUk1BTCAmJiBwb2xpY3kgIT0gU0NIRURfQkFUQ0ggJiYKKwkJCQlwb2xpY3kgIT0gU0NIRURfSURMRSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qCiAJICogVmFsaWQgcHJpb3JpdGllcyBmb3IgU0NIRURfRklGTyBhbmQgU0NIRURfUlIgYXJlCiAJICogMS4uTUFYX1VTRVJfUlRfUFJJTy0xLCB2YWxpZCBwcmlvcml0eSBmb3IgU0NIRURfTk9STUFMLApAQCAtNjE3Nyw2ICs2MzkyLDEwIEBACiAJCS8qIGNhbid0IGNoYW5nZSBvdGhlciB1c2VyJ3MgcHJpb3JpdGllcyAqLwogCQlpZiAoIWNoZWNrX3NhbWVfb3duZXIocCkpCiAJCQlyZXR1cm4gLUVQRVJNOworCisJCS8qIE5vcm1hbCB1c2VycyBzaGFsbCBub3QgcmVzZXQgdGhlIHNjaGVkX3Jlc2V0X29uX2ZvcmsgZmxhZyAqLworCQlpZiAocC0+c2NoZWRfcmVzZXRfb25fZm9yayAmJiAhcmVzZXRfb25fZm9yaykKKwkJCXJldHVybiAtRVBFUk07CiAJfQogCiAJaWYgKHVzZXIpIHsKQEAgLTYyMjAsNiArNjQzOSw4IEBACiAJaWYgKHJ1bm5pbmcpCiAJCXAtPnNjaGVkX2NsYXNzLT5wdXRfcHJldl90YXNrKHJxLCBwKTsKIAorCXAtPnNjaGVkX3Jlc2V0X29uX2ZvcmsgPSByZXNldF9vbl9mb3JrOworCiAJb2xkcHJpbyA9IHAtPnByaW87CiAJX19zZXRzY2hlZHVsZXIocnEsIHAsIHBvbGljeSwgcGFyYW0tPnNjaGVkX3ByaW9yaXR5KTsKIApAQCAtNjMzNiwxNCArNjU1NywxNSBAQAogCWlmIChwKSB7CiAJCXJldHZhbCA9IHNlY3VyaXR5X3Rhc2tfZ2V0c2NoZWR1bGVyKHApOwogCQlpZiAoIXJldHZhbCkKLQkJCXJldHZhbCA9IHAtPnBvbGljeTsKKwkJCXJldHZhbCA9IHAtPnBvbGljeQorCQkJCXwgKHAtPnNjaGVkX3Jlc2V0X29uX2ZvcmsgPyBTQ0hFRF9SRVNFVF9PTl9GT1JLIDogMCk7CiAJfQogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCiAvKioKLSAqIHN5c19zY2hlZF9nZXRzY2hlZHVsZXIgLSBnZXQgdGhlIFJUIHByaW9yaXR5IG9mIGEgdGhyZWFkCisgKiBzeXNfc2NoZWRfZ2V0cGFyYW0gLSBnZXQgdGhlIFJUIHByaW9yaXR5IG9mIGEgdGhyZWFkCiAgKiBAcGlkOiB0aGUgcGlkIGluIHF1ZXN0aW9uLgogICogQHBhcmFtOiBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgUlQgcHJpb3JpdHkuCiAgKi8KQEAgLTY1NzEsMTkgKzY3OTMsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2NvbmRfcmVzY2hlZCh2b2lkKQogewotI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUAotCV9fbWlnaHRfc2xlZXAoX19GSUxFX18sIF9fTElORV9fKTsKLSNlbmRpZgotCS8qCi0JICogVGhlIEJLUyBtaWdodCBiZSByZWFjcXVpcmVkIGJlZm9yZSB3ZSBoYXZlIGRyb3BwZWQKLQkgKiBQUkVFTVBUX0FDVElWRSwgd2hpY2ggY291bGQgdHJpZ2dlciBhIHNlY29uZAotCSAqIGNvbmRfcmVzY2hlZCgpIGNhbGwuCi0JICovCi0JZG8gewotCQlhZGRfcHJlZW1wdF9jb3VudChQUkVFTVBUX0FDVElWRSk7Ci0JCXNjaGVkdWxlKCk7Ci0JCXN1Yl9wcmVlbXB0X2NvdW50KFBSRUVNUFRfQUNUSVZFKTsKLQl9IHdoaWxlIChuZWVkX3Jlc2NoZWQoKSk7CisJYWRkX3ByZWVtcHRfY291bnQoUFJFRU1QVF9BQ1RJVkUpOworCXNjaGVkdWxlKCk7CisJc3ViX3ByZWVtcHRfY291bnQoUFJFRU1QVF9BQ1RJVkUpOwogfQogCiBpbnQgX19zY2hlZCBfY29uZF9yZXNjaGVkKHZvaWQpCkBAIC02NTk3LDE4ICs2ODA5LDIwIEBACiBFWFBPUlRfU1lNQk9MKF9jb25kX3Jlc2NoZWQpOwogCiAvKgotICogY29uZF9yZXNjaGVkX2xvY2soKSAtIGlmIGEgcmVzY2hlZHVsZSBpcyBwZW5kaW5nLCBkcm9wIHRoZSBnaXZlbiBsb2NrLAorICogX19jb25kX3Jlc2NoZWRfbG9jaygpIC0gaWYgYSByZXNjaGVkdWxlIGlzIHBlbmRpbmcsIGRyb3AgdGhlIGdpdmVuIGxvY2ssCiAgKiBjYWxsIHNjaGVkdWxlLCBhbmQgb24gcmV0dXJuIHJlYWNxdWlyZSB0aGUgbG9jay4KICAqCiAgKiBUaGlzIHdvcmtzIE9LIGJvdGggd2l0aCBhbmQgd2l0aG91dCBDT05GSUdfUFJFRU1QVC4gV2UgZG8gc3RyYW5nZSBsb3ctbGV2ZWwKICAqIG9wZXJhdGlvbnMgaGVyZSB0byBwcmV2ZW50IHNjaGVkdWxlKCkgZnJvbSBiZWluZyBjYWxsZWQgdHdpY2UgKG9uY2UgdmlhCiAgKiBzcGluX3VubG9jaygpLCBvbmNlIGJ5IGhhbmQpLgogICovCi1pbnQgY29uZF9yZXNjaGVkX2xvY2soc3BpbmxvY2tfdCAqbG9jaykKK2ludCBfX2NvbmRfcmVzY2hlZF9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCiB7CiAJaW50IHJlc2NoZWQgPSBzaG91bGRfcmVzY2hlZCgpOwogCWludCByZXQgPSAwOwogCisJbG9ja2RlcF9hc3NlcnRfaGVsZChsb2NrKTsKKwogCWlmIChzcGluX25lZWRicmVhayhsb2NrKSB8fCByZXNjaGVkKSB7CiAJCXNwaW5fdW5sb2NrKGxvY2spOwogCQlpZiAocmVzY2hlZCkKQEAgLTY2MjAsOSArNjgzNCw5IEBACiAJfQogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGNvbmRfcmVzY2hlZF9sb2NrKTsKK0VYUE9SVF9TWU1CT0woX19jb25kX3Jlc2NoZWRfbG9jayk7CiAKLWludCBfX3NjaGVkIGNvbmRfcmVzY2hlZF9zb2Z0aXJxKHZvaWQpCitpbnQgX19zY2hlZCBfX2NvbmRfcmVzY2hlZF9zb2Z0aXJxKHZvaWQpCiB7CiAJQlVHX09OKCFpbl9zb2Z0aXJxKCkpOwogCkBAIC02NjM0LDcgKzY4NDgsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woY29uZF9yZXNjaGVkX3NvZnRpcnEpOworRVhQT1JUX1NZTUJPTChfX2NvbmRfcmVzY2hlZF9zb2Z0aXJxKTsKIAogLyoqCiAgKiB5aWVsZCAtIHlpZWxkIHRoZSBjdXJyZW50IHByb2Nlc3NvciB0byBvdGhlciB0aHJlYWRzLgpAQCAtNjY1OCwxMSArNjg3MiwxMyBAQAogICovCiB2b2lkIF9fc2NoZWQgaW9fc2NoZWR1bGUodm9pZCkKIHsKLQlzdHJ1Y3QgcnEgKnJxID0gJl9fcmF3X2dldF9jcHVfdmFyKHJ1bnF1ZXVlcyk7CisJc3RydWN0IHJxICpycSA9IHJhd19ycSgpOwogCiAJZGVsYXlhY2N0X2Jsa2lvX3N0YXJ0KCk7CiAJYXRvbWljX2luYygmcnEtPm5yX2lvd2FpdCk7CisJY3VycmVudC0+aW5faW93YWl0ID0gMTsKIAlzY2hlZHVsZSgpOworCWN1cnJlbnQtPmluX2lvd2FpdCA9IDA7CiAJYXRvbWljX2RlYygmcnEtPm5yX2lvd2FpdCk7CiAJZGVsYXlhY2N0X2Jsa2lvX2VuZCgpOwogfQpAQCAtNjY3MCwxMiArNjg4NiwxNCBAQAogCiBsb25nIF9fc2NoZWQgaW9fc2NoZWR1bGVfdGltZW91dChsb25nIHRpbWVvdXQpCiB7Ci0Jc3RydWN0IHJxICpycSA9ICZfX3Jhd19nZXRfY3B1X3ZhcihydW5xdWV1ZXMpOworCXN0cnVjdCBycSAqcnEgPSByYXdfcnEoKTsKIAlsb25nIHJldDsKIAogCWRlbGF5YWNjdF9ibGtpb19zdGFydCgpOwogCWF0b21pY19pbmMoJnJxLT5ucl9pb3dhaXQpOworCWN1cnJlbnQtPmluX2lvd2FpdCA9IDE7CiAJcmV0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwljdXJyZW50LT5pbl9pb3dhaXQgPSAwOwogCWF0b21pY19kZWMoJnJxLT5ucl9pb3dhaXQpOwogCWRlbGF5YWNjdF9ibGtpb19lbmQoKTsKIAlyZXR1cm4gcmV0OwpAQCAtNjk5Miw4ICs3MjEwLDEyIEBACiAKIAlpZiAobWlncmF0ZV90YXNrKHAsIGNwdW1hc2tfYW55X2FuZChjcHVfb25saW5lX21hc2ssIG5ld19tYXNrKSwgJnJlcSkpIHsKIAkJLyogTmVlZCBoZWxwIGZyb20gbWlncmF0aW9uIHRocmVhZDogZHJvcCBsb2NrIGFuZCB3YWl0LiAqLworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm10ID0gcnEtPm1pZ3JhdGlvbl90aHJlYWQ7CisKKwkJZ2V0X3Rhc2tfc3RydWN0KG10KTsKIAkJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiAJCXdha2VfdXBfcHJvY2VzcyhycS0+bWlncmF0aW9uX3RocmVhZCk7CisJCXB1dF90YXNrX3N0cnVjdChtdCk7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJlcS5kb25lKTsKIAkJdGxiX21pZ3JhdGVfZmluaXNoKHAtPm1tKTsKIAkJcmV0dXJuIDA7CkBAIC03MDUxLDYgKzcyNzMsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjZGVmaW5lIFJDVV9NSUdSQVRJT05fSURMRQkwCisjZGVmaW5lIFJDVV9NSUdSQVRJT05fTkVFRF9RUwkxCisjZGVmaW5lIFJDVV9NSUdSQVRJT05fR09UX1FTCTIKKyNkZWZpbmUgUkNVX01JR1JBVElPTl9NVVNUX1NZTkMJMworCiAvKgogICogbWlncmF0aW9uX3RocmVhZCAtIHRoaXMgaXMgYSBoaWdocHJpbyBzeXN0ZW0gdGhyZWFkIHRoYXQgcGVyZm9ybXMKICAqIHRocmVhZCBtaWdyYXRpb24gYnkgYnVtcGluZyB0aHJlYWQgb2ZmIENQVSB0aGVuICdwdXNoaW5nJyBvbnRvCkBAIC03MDU4LDYgKzcyODUsNyBAQAogICovCiBzdGF0aWMgaW50IG1pZ3JhdGlvbl90aHJlYWQodm9pZCAqZGF0YSkKIHsKKwlpbnQgYmFkY3B1OwogCWludCBjcHUgPSAobG9uZylkYXRhOwogCXN0cnVjdCBycSAqcnE7CiAKQEAgLTcwOTIsOCArNzMyMCwxNyBAQAogCQlyZXEgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBtaWdyYXRpb25fcmVxLCBsaXN0KTsKIAkJbGlzdF9kZWxfaW5pdChoZWFkLT5uZXh0KTsKIAotCQlzcGluX3VubG9jaygmcnEtPmxvY2spOwotCQlfX21pZ3JhdGVfdGFzayhyZXEtPnRhc2ssIGNwdSwgcmVxLT5kZXN0X2NwdSk7CisJCWlmIChyZXEtPnRhc2sgIT0gTlVMTCkgeworCQkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKKwkJCV9fbWlncmF0ZV90YXNrKHJlcS0+dGFzaywgY3B1LCByZXEtPmRlc3RfY3B1KTsKKwkJfSBlbHNlIGlmIChsaWtlbHkoY3B1ID09IChiYWRjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCkpKSkgeworCQkJcmVxLT5kZXN0X2NwdSA9IFJDVV9NSUdSQVRJT05fR09UX1FTOworCQkJc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCXJlcS0+ZGVzdF9jcHUgPSBSQ1VfTUlHUkFUSU9OX01VU1RfU1lOQzsKKwkJCXNwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJCQlXQVJOX09OQ0UoMSwgIm1pZ3JhdGlvbl90aHJlYWQoKSBvbiBDUFUgJWQsIGV4cGVjdGVkICVkXG4iLCBiYWRjcHUsIGNwdSk7CisJCX0KIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCiAJCWNvbXBsZXRlKCZyZXEtPmRvbmUpOwpAQCAtNzYyNSw3ICs3ODYyLDcgQEAKIAltaWdyYXRpb25fY2FsbCgmbWlncmF0aW9uX25vdGlmaWVyLCBDUFVfT05MSU5FLCBjcHUpOwogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmbWlncmF0aW9uX25vdGlmaWVyKTsKIAotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiBlYXJseV9pbml0Y2FsbChtaWdyYXRpb25faW5pdCk7CiAjZW5kaWYKQEAgLTc2NzIsNyArNzkwOSw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWlmICghZ3JvdXAtPl9fY3B1X3Bvd2VyKSB7CisJCWlmICghZ3JvdXAtPmNwdV9wb3dlcikgewogCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAkJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IGRvbWFpbi0+Y3B1X3Bvd2VyIG5vdCAiCiAJCQkJCSJzZXRcbiIpOwpAQCAtNzY5Niw5ICs3OTMzLDkgQEAKIAkJY3B1bGlzdF9zY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpOwogCiAJCXByaW50ayhLRVJOX0NPTlQgIiAlcyIsIHN0cik7Ci0JCWlmIChncm91cC0+X19jcHVfcG93ZXIgIT0gU0NIRURfTE9BRF9TQ0FMRSkgewotCQkJcHJpbnRrKEtFUk5fQ09OVCAiIChfX2NwdV9wb3dlciA9ICVkKSIsCi0JCQkJZ3JvdXAtPl9fY3B1X3Bvd2VyKTsKKwkJaWYgKGdyb3VwLT5jcHVfcG93ZXIgIT0gU0NIRURfTE9BRF9TQ0FMRSkgeworCQkJcHJpbnRrKEtFUk5fQ09OVCAiIChjcHVfcG93ZXIgPSAlZCkiLAorCQkJCWdyb3VwLT5jcHVfcG93ZXIpOwogCQl9CiAKIAkJZ3JvdXAgPSBncm91cC0+bmV4dDsKQEAgLTc4NDEsNyArODA3OCw3IEBACiAJcnEtPnJkID0gcmQ7CiAKIAljcHVtYXNrX3NldF9jcHUocnEtPmNwdSwgcmQtPnNwYW4pOwotCWlmIChjcHVtYXNrX3Rlc3RfY3B1KHJxLT5jcHUsIGNwdV9vbmxpbmVfbWFzaykpCisJaWYgKGNwdW1hc2tfdGVzdF9jcHUocnEtPmNwdSwgY3B1X2FjdGl2ZV9tYXNrKSkKIAkJc2V0X3JxX29ubGluZShycSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwpAQCAtNzk4Myw3ICs4MjIwLDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWNwdW1hc2tfY2xlYXIoc2NoZWRfZ3JvdXBfY3B1cyhzZykpOwotCQlzZy0+X19jcHVfcG93ZXIgPSAwOworCQlzZy0+Y3B1X3Bvd2VyID0gMDsKIAogCQlmb3JfZWFjaF9jcHUoaiwgc3BhbikgewogCQkJaWYgKGdyb3VwX2ZuKGosIGNwdV9tYXAsIE5VTEwsIHRtcG1hc2spICE9IGdyb3VwKQpAQCAtODA5MSw2ICs4MzI4LDM5IEBACiAJREVDTEFSRV9CSVRNQVAoc3BhbiwgQ09ORklHX05SX0NQVVMpOwogfTsKIAorc3RydWN0IHNfZGF0YSB7CisjaWZkZWYgQ09ORklHX05VTUEKKwlpbnQJCQlzZF9hbGxub2RlczsKKwljcHVtYXNrX3Zhcl90CQlkb21haW5zcGFuOworCWNwdW1hc2tfdmFyX3QJCWNvdmVyZWQ7CisJY3B1bWFza192YXJfdAkJbm90Y292ZXJlZDsKKyNlbmRpZgorCWNwdW1hc2tfdmFyX3QJCW5vZGVtYXNrOworCWNwdW1hc2tfdmFyX3QJCXRoaXNfc2libGluZ19tYXA7CisJY3B1bWFza192YXJfdAkJdGhpc19jb3JlX21hcDsKKwljcHVtYXNrX3Zhcl90CQlzZW5kX2NvdmVyZWQ7CisJY3B1bWFza192YXJfdAkJdG1wbWFzazsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAJKipzY2hlZF9ncm91cF9ub2RlczsKKwlzdHJ1Y3Qgcm9vdF9kb21haW4JKnJkOworfTsKKworZW51bSBzX2FsbG9jIHsKKwlzYV9zY2hlZF9ncm91cHMgPSAwLAorCXNhX3Jvb3Rkb21haW4sCisJc2FfdG1wbWFzaywKKwlzYV9zZW5kX2NvdmVyZWQsCisJc2FfdGhpc19jb3JlX21hcCwKKwlzYV90aGlzX3NpYmxpbmdfbWFwLAorCXNhX25vZGVtYXNrLAorCXNhX3NjaGVkX2dyb3VwX25vZGVzLAorI2lmZGVmIENPTkZJR19OVU1BCisJc2Ffbm90Y292ZXJlZCwKKwlzYV9jb3ZlcmVkLAorCXNhX2RvbWFpbnNwYW4sCisjZW5kaWYKKwlzYV9ub25lLAorfTsKKwogLyoKICAqIFNNVCBzY2hlZC1kb21haW5zOgogICovCkBAIC04MjA4LDExICs4NDc4LDc2IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCXNnX2luY19jcHVfcG93ZXIoc2csIHNkLT5ncm91cHMtPl9fY3B1X3Bvd2VyKTsKKwkJCXNnLT5jcHVfcG93ZXIgKz0gc2QtPmdyb3Vwcy0+Y3B1X3Bvd2VyOwogCQl9CiAJCXNnID0gc2ctPm5leHQ7CiAJfSB3aGlsZSAoc2cgIT0gZ3JvdXBfaGVhZCk7CiB9CisKK3N0YXRpYyBpbnQgYnVpbGRfbnVtYV9zY2hlZF9ncm91cHMoc3RydWN0IHNfZGF0YSAqZCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwgaW50IG51bSkKK3sKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNnLCAqcHJldjsKKwlpbnQgbiwgajsKKworCWNwdW1hc2tfY2xlYXIoZC0+Y292ZXJlZCk7CisJY3B1bWFza19hbmQoZC0+bm9kZW1hc2ssIGNwdW1hc2tfb2Zfbm9kZShudW0pLCBjcHVfbWFwKTsKKwlpZiAoY3B1bWFza19lbXB0eShkLT5ub2RlbWFzaykpIHsKKwkJZC0+c2NoZWRfZ3JvdXBfbm9kZXNbbnVtXSA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCXNjaGVkX2RvbWFpbl9ub2RlX3NwYW4obnVtLCBkLT5kb21haW5zcGFuKTsKKwljcHVtYXNrX2FuZChkLT5kb21haW5zcGFuLCBkLT5kb21haW5zcGFuLCBjcHVfbWFwKTsKKworCXNnID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3Qgc2NoZWRfZ3JvdXApICsgY3B1bWFza19zaXplKCksCisJCQkgIEdGUF9LRVJORUwsIG51bSk7CisJaWYgKCFzZykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4gbm90IGFsbG9jIGRvbWFpbiBncm91cCBmb3Igbm9kZSAlZFxuIiwKKwkJICAgICAgIG51bSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkLT5zY2hlZF9ncm91cF9ub2Rlc1tudW1dID0gc2c7CisKKwlmb3JfZWFjaF9jcHUoaiwgZC0+bm9kZW1hc2spIHsKKwkJc2QgPSAmcGVyX2NwdShub2RlX2RvbWFpbnMsIGopLnNkOworCQlzZC0+Z3JvdXBzID0gc2c7CisJfQorCisJc2ctPmNwdV9wb3dlciA9IDA7CisJY3B1bWFza19jb3B5KHNjaGVkX2dyb3VwX2NwdXMoc2cpLCBkLT5ub2RlbWFzayk7CisJc2ctPm5leHQgPSBzZzsKKwljcHVtYXNrX29yKGQtPmNvdmVyZWQsIGQtPmNvdmVyZWQsIGQtPm5vZGVtYXNrKTsKKworCXByZXYgPSBzZzsKKwlmb3IgKGogPSAwOyBqIDwgbnJfbm9kZV9pZHM7IGorKykgeworCQluID0gKG51bSArIGopICUgbnJfbm9kZV9pZHM7CisJCWNwdW1hc2tfY29tcGxlbWVudChkLT5ub3Rjb3ZlcmVkLCBkLT5jb3ZlcmVkKTsKKwkJY3B1bWFza19hbmQoZC0+dG1wbWFzaywgZC0+bm90Y292ZXJlZCwgY3B1X21hcCk7CisJCWNwdW1hc2tfYW5kKGQtPnRtcG1hc2ssIGQtPnRtcG1hc2ssIGQtPmRvbWFpbnNwYW4pOworCQlpZiAoY3B1bWFza19lbXB0eShkLT50bXBtYXNrKSkKKwkJCWJyZWFrOworCQljcHVtYXNrX2FuZChkLT50bXBtYXNrLCBkLT50bXBtYXNrLCBjcHVtYXNrX29mX25vZGUobikpOworCQlpZiAoY3B1bWFza19lbXB0eShkLT50bXBtYXNrKSkKKwkJCWNvbnRpbnVlOworCQlzZyA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IHNjaGVkX2dyb3VwKSArIGNwdW1hc2tfc2l6ZSgpLAorCQkJCSAgR0ZQX0tFUk5FTCwgbnVtKTsKKwkJaWYgKCFzZykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJDYW4gbm90IGFsbG9jIGRvbWFpbiBncm91cCBmb3Igbm9kZSAlZFxuIiwgaik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlzZy0+Y3B1X3Bvd2VyID0gMDsKKwkJY3B1bWFza19jb3B5KHNjaGVkX2dyb3VwX2NwdXMoc2cpLCBkLT50bXBtYXNrKTsKKwkJc2ctPm5leHQgPSBwcmV2LT5uZXh0OworCQljcHVtYXNrX29yKGQtPmNvdmVyZWQsIGQtPmNvdmVyZWQsIGQtPnRtcG1hc2spOworCQlwcmV2LT5uZXh0ID0gc2c7CisJCXByZXYgPSBzZzsKKwl9CitvdXQ6CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYgLyogQ09ORklHX05VTUEgKi8KIAogI2lmZGVmIENPTkZJR19OVU1BCkBAIC04MjY2LDE1ICs4NjAxLDEzIEBACiAgKiB0aGVyZSBhcmUgYXN5bW1ldHJpZXMgaW4gdGhlIHRvcG9sb2d5LiBJZiB0aGVyZSBhcmUgYXN5bW1ldHJpZXMsIGdyb3VwCiAgKiBoYXZpbmcgbW9yZSBjcHVfcG93ZXIgd2lsbCBwaWNrdXAgbW9yZSBsb2FkIGNvbXBhcmVkIHRvIHRoZSBncm91cCBoYXZpbmcKICAqIGxlc3MgY3B1X3Bvd2VyLgotICoKLSAqIGNwdV9wb3dlciB3aWxsIGJlIGEgbXVsdGlwbGUgb2YgU0NIRURfTE9BRF9TQ0FMRS4gVGhpcyBtdWx0aXBsZSByZXByZXNlbnRzCi0gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGFza3MgYSBncm91cCBjYW4gaGFuZGxlIGluIHRoZSBwcmVzZW5jZSBvZiBvdGhlciBpZGxlCi0gKiBvciBsaWdodGx5IGxvYWRlZCBncm91cHMgaW4gdGhlIHNhbWUgc2NoZWQgZG9tYWluLgogICovCiBzdGF0aWMgdm9pZCBpbml0X3NjaGVkX2dyb3Vwc19wb3dlcihpbnQgY3B1LCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKIHsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpjaGlsZDsKIAlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwOworCWxvbmcgcG93ZXI7CisJaW50IHdlaWdodDsKIAogCVdBUk5fT04oIXNkIHx8ICFzZC0+Z3JvdXBzKTsKIApAQCAtODI4MywyOCArODYxNiwzMiBAQAogCiAJY2hpbGQgPSBzZC0+Y2hpbGQ7CiAKLQlzZC0+Z3JvdXBzLT5fX2NwdV9wb3dlciA9IDA7CisJc2QtPmdyb3Vwcy0+Y3B1X3Bvd2VyID0gMDsKIAotCS8qCi0JICogRm9yIHBlcmYgcG9saWN5LCBpZiB0aGUgZ3JvdXBzIGluIGNoaWxkIGRvbWFpbiBzaGFyZSByZXNvdXJjZXMKLQkgKiAoZm9yIGV4YW1wbGUgY29yZXMgc2hhcmluZyBzb21lIHBvcnRpb25zIG9mIHRoZSBjYWNoZSBoaWVyYXJjaHkKLQkgKiBvciBTTVQpLCB0aGVuIHNldCB0aGlzIGRvbWFpbiBncm91cHMgY3B1X3Bvd2VyIHN1Y2ggdGhhdCBlYWNoIGdyb3VwCi0JICogY2FuIGhhbmRsZSBvbmx5IG9uZSB0YXNrLCB3aGVuIHRoZXJlIGFyZSBvdGhlciBpZGxlIGdyb3VwcyBpbiB0aGUKLQkgKiBzYW1lIHNjaGVkIGRvbWFpbi4KLQkgKi8KLQlpZiAoIWNoaWxkIHx8ICghKHNkLT5mbGFncyAmIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSAmJgotCQkgICAgICAgKGNoaWxkLT5mbGFncyAmCi0JCQkoU0RfU0hBUkVfQ1BVUE9XRVIgfCBTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTKSkpKSB7Ci0JCXNnX2luY19jcHVfcG93ZXIoc2QtPmdyb3VwcywgU0NIRURfTE9BRF9TQ0FMRSk7CisJaWYgKCFjaGlsZCkgeworCQlwb3dlciA9IFNDSEVEX0xPQURfU0NBTEU7CisJCXdlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSk7CisJCS8qCisJCSAqIFNNVCBzaWJsaW5ncyBzaGFyZSB0aGUgcG93ZXIgb2YgYSBzaW5nbGUgY29yZS4KKwkJICogVXN1YWxseSBtdWx0aXBsZSB0aHJlYWRzIGdldCBhIGJldHRlciB5aWVsZCBvdXQgb2YKKwkJICogdGhhdCBvbmUgY29yZSB0aGFuIGEgc2luZ2xlIHRocmVhZCB3b3VsZCBoYXZlLAorCQkgKiByZWZsZWN0IHRoYXQgaW4gc2QtPnNtdF9nYWluLgorCQkgKi8KKwkJaWYgKChzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUikgJiYgd2VpZ2h0ID4gMSkgeworCQkJcG93ZXIgKj0gc2QtPnNtdF9nYWluOworCQkJcG93ZXIgLz0gd2VpZ2h0OworCQkJcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7CisJCX0KKwkJc2QtPmdyb3Vwcy0+Y3B1X3Bvd2VyICs9IHBvd2VyOwogCQlyZXR1cm47CiAJfQogCiAJLyoKLQkgKiBhZGQgY3B1X3Bvd2VyIG9mIGVhY2ggY2hpbGQgZ3JvdXAgdG8gdGhpcyBncm91cHMgY3B1X3Bvd2VyCisJICogQWRkIGNwdV9wb3dlciBvZiBlYWNoIGNoaWxkIGdyb3VwIHRvIHRoaXMgZ3JvdXBzIGNwdV9wb3dlci4KIAkgKi8KIAlncm91cCA9IGNoaWxkLT5ncm91cHM7CiAJZG8gewotCQlzZ19pbmNfY3B1X3Bvd2VyKHNkLT5ncm91cHMsIGdyb3VwLT5fX2NwdV9wb3dlcik7CisJCXNkLT5ncm91cHMtPmNwdV9wb3dlciArPSBncm91cC0+Y3B1X3Bvd2VyOwogCQlncm91cCA9IGdyb3VwLT5uZXh0OwogCX0gd2hpbGUgKGdyb3VwICE9IGNoaWxkLT5ncm91cHMpOwogfQpAQCAtODM3OCw2ICs4NzE1LDE5OSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgX19mcmVlX2RvbWFpbl9hbGxvY3Moc3RydWN0IHNfZGF0YSAqZCwgZW51bSBzX2FsbG9jIHdoYXQsCisJCQkJIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwKQoreworCXN3aXRjaCAod2hhdCkgeworCWNhc2Ugc2Ffc2NoZWRfZ3JvdXBzOgorCQlmcmVlX3NjaGVkX2dyb3VwcyhjcHVfbWFwLCBkLT50bXBtYXNrKTsgLyogZmFsbCB0aHJvdWdoICovCisJCWQtPnNjaGVkX2dyb3VwX25vZGVzID0gTlVMTDsKKwljYXNlIHNhX3Jvb3Rkb21haW46CisJCWZyZWVfcm9vdGRvbWFpbihkLT5yZCk7IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2Ugc2FfdG1wbWFzazoKKwkJZnJlZV9jcHVtYXNrX3ZhcihkLT50bXBtYXNrKTsgLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBzYV9zZW5kX2NvdmVyZWQ6CisJCWZyZWVfY3B1bWFza192YXIoZC0+c2VuZF9jb3ZlcmVkKTsgLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBzYV90aGlzX2NvcmVfbWFwOgorCQlmcmVlX2NwdW1hc2tfdmFyKGQtPnRoaXNfY29yZV9tYXApOyAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIHNhX3RoaXNfc2libGluZ19tYXA6CisJCWZyZWVfY3B1bWFza192YXIoZC0+dGhpc19zaWJsaW5nX21hcCk7IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2Ugc2Ffbm9kZW1hc2s6CisJCWZyZWVfY3B1bWFza192YXIoZC0+bm9kZW1hc2spOyAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIHNhX3NjaGVkX2dyb3VwX25vZGVzOgorI2lmZGVmIENPTkZJR19OVU1BCisJCWtmcmVlKGQtPnNjaGVkX2dyb3VwX25vZGVzKTsgLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBzYV9ub3Rjb3ZlcmVkOgorCQlmcmVlX2NwdW1hc2tfdmFyKGQtPm5vdGNvdmVyZWQpOyAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIHNhX2NvdmVyZWQ6CisJCWZyZWVfY3B1bWFza192YXIoZC0+Y292ZXJlZCk7IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2Ugc2FfZG9tYWluc3BhbjoKKwkJZnJlZV9jcHVtYXNrX3ZhcihkLT5kb21haW5zcGFuKTsgLyogZmFsbCB0aHJvdWdoICovCisjZW5kaWYKKwljYXNlIHNhX25vbmU6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGVudW0gc19hbGxvYyBfX3Zpc2l0X2RvbWFpbl9hbGxvY2F0aW9uX2hlbGwoc3RydWN0IHNfZGF0YSAqZCwKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwKQoreworI2lmZGVmIENPTkZJR19OVU1BCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmZC0+ZG9tYWluc3BhbiwgR0ZQX0tFUk5FTCkpCisJCXJldHVybiBzYV9ub25lOworCWlmICghYWxsb2NfY3B1bWFza192YXIoJmQtPmNvdmVyZWQsIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gc2FfZG9tYWluc3BhbjsKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZkLT5ub3Rjb3ZlcmVkLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIHNhX2NvdmVyZWQ7CisJLyogQWxsb2NhdGUgdGhlIHBlci1ub2RlIGxpc3Qgb2Ygc2NoZWQgZ3JvdXBzICovCisJZC0+c2NoZWRfZ3JvdXBfbm9kZXMgPSBrY2FsbG9jKG5yX25vZGVfaWRzLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKiksIEdGUF9LRVJORUwpOworCWlmICghZC0+c2NoZWRfZ3JvdXBfbm9kZXMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuIG5vdCBhbGxvYyBzY2hlZCBncm91cCBub2RlIGxpc3RcbiIpOworCQlyZXR1cm4gc2Ffbm90Y292ZXJlZDsKKwl9CisJc2NoZWRfZ3JvdXBfbm9kZXNfYnljcHVbY3B1bWFza19maXJzdChjcHVfbWFwKV0gPSBkLT5zY2hlZF9ncm91cF9ub2RlczsKKyNlbmRpZgorCWlmICghYWxsb2NfY3B1bWFza192YXIoJmQtPm5vZGVtYXNrLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuIHNhX3NjaGVkX2dyb3VwX25vZGVzOworCWlmICghYWxsb2NfY3B1bWFza192YXIoJmQtPnRoaXNfc2libGluZ19tYXAsIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gc2Ffbm9kZW1hc2s7CisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmZC0+dGhpc19jb3JlX21hcCwgR0ZQX0tFUk5FTCkpCisJCXJldHVybiBzYV90aGlzX3NpYmxpbmdfbWFwOworCWlmICghYWxsb2NfY3B1bWFza192YXIoJmQtPnNlbmRfY292ZXJlZCwgR0ZQX0tFUk5FTCkpCisJCXJldHVybiBzYV90aGlzX2NvcmVfbWFwOworCWlmICghYWxsb2NfY3B1bWFza192YXIoJmQtPnRtcG1hc2ssIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gc2Ffc2VuZF9jb3ZlcmVkOworCWQtPnJkID0gYWxsb2Nfcm9vdGRvbWFpbigpOworCWlmICghZC0+cmQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2Fubm90IGFsbG9jIHJvb3QgZG9tYWluXG4iKTsKKwkJcmV0dXJuIHNhX3RtcG1hc2s7CisJfQorCXJldHVybiBzYV9yb290ZG9tYWluOworfQorCitzdGF0aWMgc3RydWN0IHNjaGVkX2RvbWFpbiAqX19idWlsZF9udW1hX3NjaGVkX2RvbWFpbnMoc3RydWN0IHNfZGF0YSAqZCwKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwgc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyICphdHRyLCBpbnQgaSkKK3sKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IE5VTEw7CisjaWZkZWYgQ09ORklHX05VTUEKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpwYXJlbnQ7CisKKwlkLT5zZF9hbGxub2RlcyA9IDA7CisJaWYgKGNwdW1hc2tfd2VpZ2h0KGNwdV9tYXApID4KKwkgICAgU0RfTk9ERVNfUEVSX0RPTUFJTiAqIGNwdW1hc2tfd2VpZ2h0KGQtPm5vZGVtYXNrKSkgeworCQlzZCA9ICZwZXJfY3B1KGFsbG5vZGVzX2RvbWFpbnMsIGkpLnNkOworCQlTRF9JTklUKHNkLCBBTExOT0RFUyk7CisJCXNldF9kb21haW5fYXR0cmlidXRlKHNkLCBhdHRyKTsKKwkJY3B1bWFza19jb3B5KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSwgY3B1X21hcCk7CisJCWNwdV90b19hbGxub2Rlc19ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3VwcywgZC0+dG1wbWFzayk7CisJCWQtPnNkX2FsbG5vZGVzID0gMTsKKwl9CisJcGFyZW50ID0gc2Q7CisKKwlzZCA9ICZwZXJfY3B1KG5vZGVfZG9tYWlucywgaSkuc2Q7CisJU0RfSU5JVChzZCwgTk9ERSk7CisJc2V0X2RvbWFpbl9hdHRyaWJ1dGUoc2QsIGF0dHIpOworCXNjaGVkX2RvbWFpbl9ub2RlX3NwYW4oY3B1X3RvX25vZGUoaSksIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSk7CisJc2QtPnBhcmVudCA9IHBhcmVudDsKKwlpZiAocGFyZW50KQorCQlwYXJlbnQtPmNoaWxkID0gc2Q7CisJY3B1bWFza19hbmQoc2NoZWRfZG9tYWluX3NwYW4oc2QpLCBzY2hlZF9kb21haW5fc3BhbihzZCksIGNwdV9tYXApOworI2VuZGlmCisJcmV0dXJuIHNkOworfQorCitzdGF0aWMgc3RydWN0IHNjaGVkX2RvbWFpbiAqX19idWlsZF9jcHVfc2NoZWRfZG9tYWluKHN0cnVjdCBzX2RhdGEgKmQsCisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsIHN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqYXR0ciwKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpwYXJlbnQsIGludCBpKQoreworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOworCXNkID0gJnBlcl9jcHUocGh5c19kb21haW5zLCBpKS5zZDsKKwlTRF9JTklUKHNkLCBDUFUpOworCXNldF9kb21haW5fYXR0cmlidXRlKHNkLCBhdHRyKTsKKwljcHVtYXNrX2NvcHkoc2NoZWRfZG9tYWluX3NwYW4oc2QpLCBkLT5ub2RlbWFzayk7CisJc2QtPnBhcmVudCA9IHBhcmVudDsKKwlpZiAocGFyZW50KQorCQlwYXJlbnQtPmNoaWxkID0gc2Q7CisJY3B1X3RvX3BoeXNfZ3JvdXAoaSwgY3B1X21hcCwgJnNkLT5ncm91cHMsIGQtPnRtcG1hc2spOworCXJldHVybiBzZDsKK30KKworc3RhdGljIHN0cnVjdCBzY2hlZF9kb21haW4gKl9fYnVpbGRfbWNfc2NoZWRfZG9tYWluKHN0cnVjdCBzX2RhdGEgKmQsCisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsIHN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqYXR0ciwKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpwYXJlbnQsIGludCBpKQoreworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gcGFyZW50OworI2lmZGVmIENPTkZJR19TQ0hFRF9NQworCXNkID0gJnBlcl9jcHUoY29yZV9kb21haW5zLCBpKS5zZDsKKwlTRF9JTklUKHNkLCBNQyk7CisJc2V0X2RvbWFpbl9hdHRyaWJ1dGUoc2QsIGF0dHIpOworCWNwdW1hc2tfYW5kKHNjaGVkX2RvbWFpbl9zcGFuKHNkKSwgY3B1X21hcCwgY3B1X2NvcmVncm91cF9tYXNrKGkpKTsKKwlzZC0+cGFyZW50ID0gcGFyZW50OworCXBhcmVudC0+Y2hpbGQgPSBzZDsKKwljcHVfdG9fY29yZV9ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3VwcywgZC0+dG1wbWFzayk7CisjZW5kaWYKKwlyZXR1cm4gc2Q7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpfX2J1aWxkX3NtdF9zY2hlZF9kb21haW4oc3RydWN0IHNfZGF0YSAqZCwKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwgc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyICphdHRyLAorCXN0cnVjdCBzY2hlZF9kb21haW4gKnBhcmVudCwgaW50IGkpCit7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSBwYXJlbnQ7CisjaWZkZWYgQ09ORklHX1NDSEVEX1NNVAorCXNkID0gJnBlcl9jcHUoY3B1X2RvbWFpbnMsIGkpLnNkOworCVNEX0lOSVQoc2QsIFNJQkxJTkcpOworCXNldF9kb21haW5fYXR0cmlidXRlKHNkLCBhdHRyKTsKKwljcHVtYXNrX2FuZChzY2hlZF9kb21haW5fc3BhbihzZCksIGNwdV9tYXAsIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGkpKTsKKwlzZC0+cGFyZW50ID0gcGFyZW50OworCXBhcmVudC0+Y2hpbGQgPSBzZDsKKwljcHVfdG9fY3B1X2dyb3VwKGksIGNwdV9tYXAsICZzZC0+Z3JvdXBzLCBkLT50bXBtYXNrKTsKKyNlbmRpZgorCXJldHVybiBzZDsKK30KKworc3RhdGljIHZvaWQgYnVpbGRfc2NoZWRfZ3JvdXBzKHN0cnVjdCBzX2RhdGEgKmQsIGVudW0gc2NoZWRfZG9tYWluX2xldmVsIGwsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsIGludCBjcHUpCit7CisJc3dpdGNoIChsKSB7CisjaWZkZWYgQ09ORklHX1NDSEVEX1NNVAorCWNhc2UgU0RfTFZfU0lCTElORzogLyogc2V0IHVwIENQVSAoc2libGluZykgZ3JvdXBzICovCisJCWNwdW1hc2tfYW5kKGQtPnRoaXNfc2libGluZ19tYXAsIGNwdV9tYXAsCisJCQkgICAgdG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2soY3B1KSk7CisJCWlmIChjcHUgPT0gY3B1bWFza19maXJzdChkLT50aGlzX3NpYmxpbmdfbWFwKSkKKwkJCWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKGQtPnRoaXNfc2libGluZ19tYXAsIGNwdV9tYXAsCisJCQkJCQkmY3B1X3RvX2NwdV9ncm91cCwKKwkJCQkJCWQtPnNlbmRfY292ZXJlZCwgZC0+dG1wbWFzayk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NDSEVEX01DCisJY2FzZSBTRF9MVl9NQzogLyogc2V0IHVwIG11bHRpLWNvcmUgZ3JvdXBzICovCisJCWNwdW1hc2tfYW5kKGQtPnRoaXNfY29yZV9tYXAsIGNwdV9tYXAsIGNwdV9jb3JlZ3JvdXBfbWFzayhjcHUpKTsKKwkJaWYgKGNwdSA9PSBjcHVtYXNrX2ZpcnN0KGQtPnRoaXNfY29yZV9tYXApKQorCQkJaW5pdF9zY2hlZF9idWlsZF9ncm91cHMoZC0+dGhpc19jb3JlX21hcCwgY3B1X21hcCwKKwkJCQkJCSZjcHVfdG9fY29yZV9ncm91cCwKKwkJCQkJCWQtPnNlbmRfY292ZXJlZCwgZC0+dG1wbWFzayk7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBTRF9MVl9DUFU6IC8qIHNldCB1cCBwaHlzaWNhbCBncm91cHMgKi8KKwkJY3B1bWFza19hbmQoZC0+bm9kZW1hc2ssIGNwdW1hc2tfb2Zfbm9kZShjcHUpLCBjcHVfbWFwKTsKKwkJaWYgKCFjcHVtYXNrX2VtcHR5KGQtPm5vZGVtYXNrKSkKKwkJCWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKGQtPm5vZGVtYXNrLCBjcHVfbWFwLAorCQkJCQkJJmNwdV90b19waHlzX2dyb3VwLAorCQkJCQkJZC0+c2VuZF9jb3ZlcmVkLCBkLT50bXBtYXNrKTsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX05VTUEKKwljYXNlIFNEX0xWX0FMTE5PREVTOgorCQlpbml0X3NjaGVkX2J1aWxkX2dyb3VwcyhjcHVfbWFwLCBjcHVfbWFwLCAmY3B1X3RvX2FsbG5vZGVzX2dyb3VwLAorCQkJCQlkLT5zZW5kX2NvdmVyZWQsIGQtPnRtcG1hc2spOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwogLyoKICAqIEJ1aWxkIHNjaGVkIGRvbWFpbnMgZm9yIGEgZ2l2ZW4gc2V0IG9mIGNwdXMgYW5kIGF0dGFjaCB0aGUgc2NoZWQgZG9tYWlucwogICogdG8gdGhlIGluZGl2aWR1YWwgY3B1cwpAQCAtODM4NSwyNzMgKzg5MTUsODUgQEAKIHN0YXRpYyBpbnQgX19idWlsZF9zY2hlZF9kb21haW5zKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLAogCQkJCSBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmF0dHIpCiB7Ci0JaW50IGksIGVyciA9IC1FTk9NRU07Ci0Jc3RydWN0IHJvb3RfZG9tYWluICpyZDsKLQljcHVtYXNrX3Zhcl90IG5vZGVtYXNrLCB0aGlzX3NpYmxpbmdfbWFwLCB0aGlzX2NvcmVfbWFwLCBzZW5kX2NvdmVyZWQsCi0JCXRtcG1hc2s7CisJZW51bSBzX2FsbG9jIGFsbG9jX3N0YXRlID0gc2Ffbm9uZTsKKwlzdHJ1Y3Qgc19kYXRhIGQ7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CisJaW50IGk7CiAjaWZkZWYgQ09ORklHX05VTUEKLQljcHVtYXNrX3Zhcl90IGRvbWFpbnNwYW4sIGNvdmVyZWQsIG5vdGNvdmVyZWQ7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICoqc2NoZWRfZ3JvdXBfbm9kZXMgPSBOVUxMOwotCWludCBzZF9hbGxub2RlcyA9IDA7Ci0KLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZkb21haW5zcGFuLCBHRlBfS0VSTkVMKSkKLQkJZ290byBvdXQ7Ci0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmY292ZXJlZCwgR0ZQX0tFUk5FTCkpCi0JCWdvdG8gZnJlZV9kb21haW5zcGFuOwotCWlmICghYWxsb2NfY3B1bWFza192YXIoJm5vdGNvdmVyZWQsIEdGUF9LRVJORUwpKQotCQlnb3RvIGZyZWVfY292ZXJlZDsKKwlkLnNkX2FsbG5vZGVzID0gMDsKICNlbmRpZgogCi0JaWYgKCFhbGxvY19jcHVtYXNrX3Zhcigmbm9kZW1hc2ssIEdGUF9LRVJORUwpKQotCQlnb3RvIGZyZWVfbm90Y292ZXJlZDsKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZ0aGlzX3NpYmxpbmdfbWFwLCBHRlBfS0VSTkVMKSkKLQkJZ290byBmcmVlX25vZGVtYXNrOwotCWlmICghYWxsb2NfY3B1bWFza192YXIoJnRoaXNfY29yZV9tYXAsIEdGUF9LRVJORUwpKQotCQlnb3RvIGZyZWVfdGhpc19zaWJsaW5nX21hcDsKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZzZW5kX2NvdmVyZWQsIEdGUF9LRVJORUwpKQotCQlnb3RvIGZyZWVfdGhpc19jb3JlX21hcDsKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZ0bXBtYXNrLCBHRlBfS0VSTkVMKSkKLQkJZ290byBmcmVlX3NlbmRfY292ZXJlZDsKLQotI2lmZGVmIENPTkZJR19OVU1BCi0JLyoKLQkgKiBBbGxvY2F0ZSB0aGUgcGVyLW5vZGUgbGlzdCBvZiBzY2hlZCBncm91cHMKLQkgKi8KLQlzY2hlZF9ncm91cF9ub2RlcyA9IGtjYWxsb2MobnJfbm9kZV9pZHMsIHNpemVvZihzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKiksCi0JCQkJICAgIEdGUF9LRVJORUwpOwotCWlmICghc2NoZWRfZ3JvdXBfbm9kZXMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuIG5vdCBhbGxvYyBzY2hlZCBncm91cCBub2RlIGxpc3RcbiIpOwotCQlnb3RvIGZyZWVfdG1wbWFzazsKLQl9Ci0jZW5kaWYKLQotCXJkID0gYWxsb2Nfcm9vdGRvbWFpbigpOwotCWlmICghcmQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2Fubm90IGFsbG9jIHJvb3QgZG9tYWluXG4iKTsKLQkJZ290byBmcmVlX3NjaGVkX2dyb3VwczsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfTlVNQQotCXNjaGVkX2dyb3VwX25vZGVzX2J5Y3B1W2NwdW1hc2tfZmlyc3QoY3B1X21hcCldID0gc2NoZWRfZ3JvdXBfbm9kZXM7Ci0jZW5kaWYKKwlhbGxvY19zdGF0ZSA9IF9fdmlzaXRfZG9tYWluX2FsbG9jYXRpb25faGVsbCgmZCwgY3B1X21hcCk7CisJaWYgKGFsbG9jX3N0YXRlICE9IHNhX3Jvb3Rkb21haW4pCisJCWdvdG8gZXJyb3I7CisJYWxsb2Nfc3RhdGUgPSBzYV9zY2hlZF9ncm91cHM7CiAKIAkvKgogCSAqIFNldCB1cCBkb21haW5zIGZvciBjcHVzIHNwZWNpZmllZCBieSB0aGUgY3B1X21hcC4KIAkgKi8KIAlmb3JfZWFjaF9jcHUoaSwgY3B1X21hcCkgewotCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IE5VTEwsICpwOworCQljcHVtYXNrX2FuZChkLm5vZGVtYXNrLCBjcHVtYXNrX29mX25vZGUoY3B1X3RvX25vZGUoaSkpLAorCQkJICAgIGNwdV9tYXApOwogCi0JCWNwdW1hc2tfYW5kKG5vZGVtYXNrLCBjcHVtYXNrX29mX25vZGUoY3B1X3RvX25vZGUoaSkpLCBjcHVfbWFwKTsKLQotI2lmZGVmIENPTkZJR19OVU1BCi0JCWlmIChjcHVtYXNrX3dlaWdodChjcHVfbWFwKSA+Ci0JCQkJU0RfTk9ERVNfUEVSX0RPTUFJTipjcHVtYXNrX3dlaWdodChub2RlbWFzaykpIHsKLQkJCXNkID0gJnBlcl9jcHUoYWxsbm9kZXNfZG9tYWlucywgaSkuc2Q7Ci0JCQlTRF9JTklUKHNkLCBBTExOT0RFUyk7Ci0JCQlzZXRfZG9tYWluX2F0dHJpYnV0ZShzZCwgYXR0cik7Ci0JCQljcHVtYXNrX2NvcHkoc2NoZWRfZG9tYWluX3NwYW4oc2QpLCBjcHVfbWFwKTsKLQkJCWNwdV90b19hbGxub2Rlc19ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3VwcywgdG1wbWFzayk7Ci0JCQlwID0gc2Q7Ci0JCQlzZF9hbGxub2RlcyA9IDE7Ci0JCX0gZWxzZQotCQkJcCA9IE5VTEw7Ci0KLQkJc2QgPSAmcGVyX2NwdShub2RlX2RvbWFpbnMsIGkpLnNkOwotCQlTRF9JTklUKHNkLCBOT0RFKTsKLQkJc2V0X2RvbWFpbl9hdHRyaWJ1dGUoc2QsIGF0dHIpOwotCQlzY2hlZF9kb21haW5fbm9kZV9zcGFuKGNwdV90b19ub2RlKGkpLCBzY2hlZF9kb21haW5fc3BhbihzZCkpOwotCQlzZC0+cGFyZW50ID0gcDsKLQkJaWYgKHApCi0JCQlwLT5jaGlsZCA9IHNkOwotCQljcHVtYXNrX2FuZChzY2hlZF9kb21haW5fc3BhbihzZCksCi0JCQkgICAgc2NoZWRfZG9tYWluX3NwYW4oc2QpLCBjcHVfbWFwKTsKLSNlbmRpZgotCi0JCXAgPSBzZDsKLQkJc2QgPSAmcGVyX2NwdShwaHlzX2RvbWFpbnMsIGkpLnNkOwotCQlTRF9JTklUKHNkLCBDUFUpOwotCQlzZXRfZG9tYWluX2F0dHJpYnV0ZShzZCwgYXR0cik7Ci0JCWNwdW1hc2tfY29weShzY2hlZF9kb21haW5fc3BhbihzZCksIG5vZGVtYXNrKTsKLQkJc2QtPnBhcmVudCA9IHA7Ci0JCWlmIChwKQotCQkJcC0+Y2hpbGQgPSBzZDsKLQkJY3B1X3RvX3BoeXNfZ3JvdXAoaSwgY3B1X21hcCwgJnNkLT5ncm91cHMsIHRtcG1hc2spOwotCi0jaWZkZWYgQ09ORklHX1NDSEVEX01DCi0JCXAgPSBzZDsKLQkJc2QgPSAmcGVyX2NwdShjb3JlX2RvbWFpbnMsIGkpLnNkOwotCQlTRF9JTklUKHNkLCBNQyk7Ci0JCXNldF9kb21haW5fYXR0cmlidXRlKHNkLCBhdHRyKTsKLQkJY3B1bWFza19hbmQoc2NoZWRfZG9tYWluX3NwYW4oc2QpLCBjcHVfbWFwLAotCQkJCQkJICAgY3B1X2NvcmVncm91cF9tYXNrKGkpKTsKLQkJc2QtPnBhcmVudCA9IHA7Ci0JCXAtPmNoaWxkID0gc2Q7Ci0JCWNwdV90b19jb3JlX2dyb3VwKGksIGNwdV9tYXAsICZzZC0+Z3JvdXBzLCB0bXBtYXNrKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NDSEVEX1NNVAotCQlwID0gc2Q7Ci0JCXNkID0gJnBlcl9jcHUoY3B1X2RvbWFpbnMsIGkpLnNkOwotCQlTRF9JTklUKHNkLCBTSUJMSU5HKTsKLQkJc2V0X2RvbWFpbl9hdHRyaWJ1dGUoc2QsIGF0dHIpOwotCQljcHVtYXNrX2FuZChzY2hlZF9kb21haW5fc3BhbihzZCksCi0JCQkgICAgdG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2soaSksIGNwdV9tYXApOwotCQlzZC0+cGFyZW50ID0gcDsKLQkJcC0+Y2hpbGQgPSBzZDsKLQkJY3B1X3RvX2NwdV9ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3VwcywgdG1wbWFzayk7Ci0jZW5kaWYKKwkJc2QgPSBfX2J1aWxkX251bWFfc2NoZWRfZG9tYWlucygmZCwgY3B1X21hcCwgYXR0ciwgaSk7CisJCXNkID0gX19idWlsZF9jcHVfc2NoZWRfZG9tYWluKCZkLCBjcHVfbWFwLCBhdHRyLCBzZCwgaSk7CisJCXNkID0gX19idWlsZF9tY19zY2hlZF9kb21haW4oJmQsIGNwdV9tYXAsIGF0dHIsIHNkLCBpKTsKKwkJc2QgPSBfX2J1aWxkX3NtdF9zY2hlZF9kb21haW4oJmQsIGNwdV9tYXAsIGF0dHIsIHNkLCBpKTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfU0NIRURfU01UCi0JLyogU2V0IHVwIENQVSAoc2libGluZykgZ3JvdXBzICovCiAJZm9yX2VhY2hfY3B1KGksIGNwdV9tYXApIHsKLQkJY3B1bWFza19hbmQodGhpc19zaWJsaW5nX21hcCwKLQkJCSAgICB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhpKSwgY3B1X21hcCk7Ci0JCWlmIChpICE9IGNwdW1hc2tfZmlyc3QodGhpc19zaWJsaW5nX21hcCkpCi0JCQljb250aW51ZTsKLQotCQlpbml0X3NjaGVkX2J1aWxkX2dyb3Vwcyh0aGlzX3NpYmxpbmdfbWFwLCBjcHVfbWFwLAotCQkJCQkmY3B1X3RvX2NwdV9ncm91cCwKLQkJCQkJc2VuZF9jb3ZlcmVkLCB0bXBtYXNrKTsKKwkJYnVpbGRfc2NoZWRfZ3JvdXBzKCZkLCBTRF9MVl9TSUJMSU5HLCBjcHVfbWFwLCBpKTsKKwkJYnVpbGRfc2NoZWRfZ3JvdXBzKCZkLCBTRF9MVl9NQywgY3B1X21hcCwgaSk7CiAJfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfU0NIRURfTUMKLQkvKiBTZXQgdXAgbXVsdGktY29yZSBncm91cHMgKi8KLQlmb3JfZWFjaF9jcHUoaSwgY3B1X21hcCkgewotCQljcHVtYXNrX2FuZCh0aGlzX2NvcmVfbWFwLCBjcHVfY29yZWdyb3VwX21hc2soaSksIGNwdV9tYXApOwotCQlpZiAoaSAhPSBjcHVtYXNrX2ZpcnN0KHRoaXNfY29yZV9tYXApKQotCQkJY29udGludWU7Ci0KLQkJaW5pdF9zY2hlZF9idWlsZF9ncm91cHModGhpc19jb3JlX21hcCwgY3B1X21hcCwKLQkJCQkJJmNwdV90b19jb3JlX2dyb3VwLAotCQkJCQlzZW5kX2NvdmVyZWQsIHRtcG1hc2spOwotCX0KLSNlbmRpZgogCiAJLyogU2V0IHVwIHBoeXNpY2FsIGdyb3VwcyAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9ub2RlX2lkczsgaSsrKSB7Ci0JCWNwdW1hc2tfYW5kKG5vZGVtYXNrLCBjcHVtYXNrX29mX25vZGUoaSksIGNwdV9tYXApOwotCQlpZiAoY3B1bWFza19lbXB0eShub2RlbWFzaykpCi0JCQljb250aW51ZTsKLQotCQlpbml0X3NjaGVkX2J1aWxkX2dyb3Vwcyhub2RlbWFzaywgY3B1X21hcCwKLQkJCQkJJmNwdV90b19waHlzX2dyb3VwLAotCQkJCQlzZW5kX2NvdmVyZWQsIHRtcG1hc2spOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnJfbm9kZV9pZHM7IGkrKykKKwkJYnVpbGRfc2NoZWRfZ3JvdXBzKCZkLCBTRF9MVl9DUFUsIGNwdV9tYXAsIGkpOwogCiAjaWZkZWYgQ09ORklHX05VTUEKIAkvKiBTZXQgdXAgbm9kZSBncm91cHMgKi8KLQlpZiAoc2RfYWxsbm9kZXMpIHsKLQkJaW5pdF9zY2hlZF9idWlsZF9ncm91cHMoY3B1X21hcCwgY3B1X21hcCwKLQkJCQkJJmNwdV90b19hbGxub2Rlc19ncm91cCwKLQkJCQkJc2VuZF9jb3ZlcmVkLCB0bXBtYXNrKTsKLQl9CisJaWYgKGQuc2RfYWxsbm9kZXMpCisJCWJ1aWxkX3NjaGVkX2dyb3VwcygmZCwgU0RfTFZfQUxMTk9ERVMsIGNwdV9tYXAsIDApOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX25vZGVfaWRzOyBpKyspIHsKLQkJLyogU2V0IHVwIG5vZGUgZ3JvdXBzICovCi0JCXN0cnVjdCBzY2hlZF9ncm91cCAqc2csICpwcmV2OwotCQlpbnQgajsKLQotCQljcHVtYXNrX2NsZWFyKGNvdmVyZWQpOwotCQljcHVtYXNrX2FuZChub2RlbWFzaywgY3B1bWFza19vZl9ub2RlKGkpLCBjcHVfbWFwKTsKLQkJaWYgKGNwdW1hc2tfZW1wdHkobm9kZW1hc2spKSB7Ci0JCQlzY2hlZF9ncm91cF9ub2Rlc1tpXSA9IE5VTEw7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXNjaGVkX2RvbWFpbl9ub2RlX3NwYW4oaSwgZG9tYWluc3Bhbik7Ci0JCWNwdW1hc2tfYW5kKGRvbWFpbnNwYW4sIGRvbWFpbnNwYW4sIGNwdV9tYXApOwotCi0JCXNnID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3Qgc2NoZWRfZ3JvdXApICsgY3B1bWFza19zaXplKCksCi0JCQkJICBHRlBfS0VSTkVMLCBpKTsKLQkJaWYgKCFzZykgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuIG5vdCBhbGxvYyBkb21haW4gZ3JvdXAgZm9yICIKLQkJCQkibm9kZSAlZFxuIiwgaSk7CisJZm9yIChpID0gMDsgaSA8IG5yX25vZGVfaWRzOyBpKyspCisJCWlmIChidWlsZF9udW1hX3NjaGVkX2dyb3VwcygmZCwgY3B1X21hcCwgaSkpCiAJCQlnb3RvIGVycm9yOwotCQl9Ci0JCXNjaGVkX2dyb3VwX25vZGVzW2ldID0gc2c7Ci0JCWZvcl9lYWNoX2NwdShqLCBub2RlbWFzaykgewotCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7Ci0KLQkJCXNkID0gJnBlcl9jcHUobm9kZV9kb21haW5zLCBqKS5zZDsKLQkJCXNkLT5ncm91cHMgPSBzZzsKLQkJfQotCQlzZy0+X19jcHVfcG93ZXIgPSAwOwotCQljcHVtYXNrX2NvcHkoc2NoZWRfZ3JvdXBfY3B1cyhzZyksIG5vZGVtYXNrKTsKLQkJc2ctPm5leHQgPSBzZzsKLQkJY3B1bWFza19vcihjb3ZlcmVkLCBjb3ZlcmVkLCBub2RlbWFzayk7Ci0JCXByZXYgPSBzZzsKLQotCQlmb3IgKGogPSAwOyBqIDwgbnJfbm9kZV9pZHM7IGorKykgewotCQkJaW50IG4gPSAoaSArIGopICUgbnJfbm9kZV9pZHM7Ci0KLQkJCWNwdW1hc2tfY29tcGxlbWVudChub3Rjb3ZlcmVkLCBjb3ZlcmVkKTsKLQkJCWNwdW1hc2tfYW5kKHRtcG1hc2ssIG5vdGNvdmVyZWQsIGNwdV9tYXApOwotCQkJY3B1bWFza19hbmQodG1wbWFzaywgdG1wbWFzaywgZG9tYWluc3Bhbik7Ci0JCQlpZiAoY3B1bWFza19lbXB0eSh0bXBtYXNrKSkKLQkJCQlicmVhazsKLQotCQkJY3B1bWFza19hbmQodG1wbWFzaywgdG1wbWFzaywgY3B1bWFza19vZl9ub2RlKG4pKTsKLQkJCWlmIChjcHVtYXNrX2VtcHR5KHRtcG1hc2spKQotCQkJCWNvbnRpbnVlOwotCi0JCQlzZyA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IHNjaGVkX2dyb3VwKSArCi0JCQkJCSAgY3B1bWFza19zaXplKCksCi0JCQkJCSAgR0ZQX0tFUk5FTCwgaSk7Ci0JCQlpZiAoIXNnKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJDYW4gbm90IGFsbG9jIGRvbWFpbiBncm91cCBmb3Igbm9kZSAlZFxuIiwgaik7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJCXNnLT5fX2NwdV9wb3dlciA9IDA7Ci0JCQljcHVtYXNrX2NvcHkoc2NoZWRfZ3JvdXBfY3B1cyhzZyksIHRtcG1hc2spOwotCQkJc2ctPm5leHQgPSBwcmV2LT5uZXh0OwotCQkJY3B1bWFza19vcihjb3ZlcmVkLCBjb3ZlcmVkLCB0bXBtYXNrKTsKLQkJCXByZXYtPm5leHQgPSBzZzsKLQkJCXByZXYgPSBzZzsKLQkJfQotCX0KICNlbmRpZgogCiAJLyogQ2FsY3VsYXRlIENQVSBwb3dlciBmb3IgcGh5c2ljYWwgcGFja2FnZXMgYW5kIG5vZGVzICovCiAjaWZkZWYgQ09ORklHX1NDSEVEX1NNVAogCWZvcl9lYWNoX2NwdShpLCBjcHVfbWFwKSB7Ci0JCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gJnBlcl9jcHUoY3B1X2RvbWFpbnMsIGkpLnNkOwotCisJCXNkID0gJnBlcl9jcHUoY3B1X2RvbWFpbnMsIGkpLnNkOwogCQlpbml0X3NjaGVkX2dyb3Vwc19wb3dlcihpLCBzZCk7CiAJfQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NDSEVEX01DCiAJZm9yX2VhY2hfY3B1KGksIGNwdV9tYXApIHsKLQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSAmcGVyX2NwdShjb3JlX2RvbWFpbnMsIGkpLnNkOwotCisJCXNkID0gJnBlcl9jcHUoY29yZV9kb21haW5zLCBpKS5zZDsKIAkJaW5pdF9zY2hlZF9ncm91cHNfcG93ZXIoaSwgc2QpOwogCX0KICNlbmRpZgogCiAJZm9yX2VhY2hfY3B1KGksIGNwdV9tYXApIHsKLQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSAmcGVyX2NwdShwaHlzX2RvbWFpbnMsIGkpLnNkOwotCisJCXNkID0gJnBlcl9jcHUocGh5c19kb21haW5zLCBpKS5zZDsKIAkJaW5pdF9zY2hlZF9ncm91cHNfcG93ZXIoaSwgc2QpOwogCX0KIAogI2lmZGVmIENPTkZJR19OVU1BCiAJZm9yIChpID0gMDsgaSA8IG5yX25vZGVfaWRzOyBpKyspCi0JCWluaXRfbnVtYV9zY2hlZF9ncm91cHNfcG93ZXIoc2NoZWRfZ3JvdXBfbm9kZXNbaV0pOworCQlpbml0X251bWFfc2NoZWRfZ3JvdXBzX3Bvd2VyKGQuc2NoZWRfZ3JvdXBfbm9kZXNbaV0pOwogCi0JaWYgKHNkX2FsbG5vZGVzKSB7CisJaWYgKGQuc2RfYWxsbm9kZXMpIHsKIAkJc3RydWN0IHNjaGVkX2dyb3VwICpzZzsKIAogCQljcHVfdG9fYWxsbm9kZXNfZ3JvdXAoY3B1bWFza19maXJzdChjcHVfbWFwKSwgY3B1X21hcCwgJnNnLAotCQkJCQkJCQl0bXBtYXNrKTsKKwkJCQkJCQkJZC50bXBtYXNrKTsKIAkJaW5pdF9udW1hX3NjaGVkX2dyb3Vwc19wb3dlcihzZyk7CiAJfQogI2VuZGlmCiAKIAkvKiBBdHRhY2ggdGhlIGRvbWFpbnMgKi8KIAlmb3JfZWFjaF9jcHUoaSwgY3B1X21hcCkgewotCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKICNpZmRlZiBDT05GSUdfU0NIRURfU01UCiAJCXNkID0gJnBlcl9jcHUoY3B1X2RvbWFpbnMsIGkpLnNkOwogI2VsaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpCkBAIC04NjU5LDQ0ICs5MDAxLDE2IEBACiAjZWxzZQogCQlzZCA9ICZwZXJfY3B1KHBoeXNfZG9tYWlucywgaSkuc2Q7CiAjZW5kaWYKLQkJY3B1X2F0dGFjaF9kb21haW4oc2QsIHJkLCBpKTsKKwkJY3B1X2F0dGFjaF9kb21haW4oc2QsIGQucmQsIGkpOwogCX0KIAotCWVyciA9IDA7CisJZC5zY2hlZF9ncm91cF9ub2RlcyA9IE5VTEw7IC8qIGRvbid0IGZyZWUgdGhpcyB3ZSBzdGlsbCBuZWVkIGl0ICovCisJX19mcmVlX2RvbWFpbl9hbGxvY3MoJmQsIHNhX3RtcG1hc2ssIGNwdV9tYXApOworCXJldHVybiAwOwogCi1mcmVlX3RtcG1hc2s6Ci0JZnJlZV9jcHVtYXNrX3Zhcih0bXBtYXNrKTsKLWZyZWVfc2VuZF9jb3ZlcmVkOgotCWZyZWVfY3B1bWFza192YXIoc2VuZF9jb3ZlcmVkKTsKLWZyZWVfdGhpc19jb3JlX21hcDoKLQlmcmVlX2NwdW1hc2tfdmFyKHRoaXNfY29yZV9tYXApOwotZnJlZV90aGlzX3NpYmxpbmdfbWFwOgotCWZyZWVfY3B1bWFza192YXIodGhpc19zaWJsaW5nX21hcCk7Ci1mcmVlX25vZGVtYXNrOgotCWZyZWVfY3B1bWFza192YXIobm9kZW1hc2spOwotZnJlZV9ub3Rjb3ZlcmVkOgotI2lmZGVmIENPTkZJR19OVU1BCi0JZnJlZV9jcHVtYXNrX3Zhcihub3Rjb3ZlcmVkKTsKLWZyZWVfY292ZXJlZDoKLQlmcmVlX2NwdW1hc2tfdmFyKGNvdmVyZWQpOwotZnJlZV9kb21haW5zcGFuOgotCWZyZWVfY3B1bWFza192YXIoZG9tYWluc3Bhbik7Ci1vdXQ6Ci0jZW5kaWYKLQlyZXR1cm4gZXJyOwotCi1mcmVlX3NjaGVkX2dyb3VwczoKLSNpZmRlZiBDT05GSUdfTlVNQQotCWtmcmVlKHNjaGVkX2dyb3VwX25vZGVzKTsKLSNlbmRpZgotCWdvdG8gZnJlZV90bXBtYXNrOwotCi0jaWZkZWYgQ09ORklHX05VTUEKIGVycm9yOgotCWZyZWVfc2NoZWRfZ3JvdXBzKGNwdV9tYXAsIHRtcG1hc2spOwotCWZyZWVfcm9vdGRvbWFpbihyZCk7Ci0JZ290byBmcmVlX3RtcG1hc2s7Ci0jZW5kaWYKKwlfX2ZyZWVfZG9tYWluX2FsbG9jcygmZCwgYWxsb2Nfc3RhdGUsIGNwdV9tYXApOworCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgaW50IGJ1aWxkX3NjaGVkX2RvbWFpbnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXApCkBAIC05MzA0LDExICs5NjE4LDExIEBACiAJCSAqIHN5c3RlbSBjcHUgcmVzb3VyY2UsIGJhc2VkIG9uIHRoZSB3ZWlnaHQgYXNzaWduZWQgdG8gcm9vdAogCQkgKiB1c2VyJ3MgY3B1IHNoYXJlIChJTklUX1RBU0tfR1JPVVBfTE9BRCkuIFRoaXMgaXMgYWNjb21wbGlzaGVkCiAJCSAqIGJ5IGxldHRpbmcgdGFza3Mgb2YgaW5pdF90YXNrX2dyb3VwIHNpdCBpbiBhIHNlcGFyYXRlIGNmc19ycQotCQkgKiAoaW5pdF9jZnNfcnEpIGFuZCBoYXZpbmcgb25lIGVudGl0eSByZXByZXNlbnQgdGhpcyBncm91cCBvZgorCQkgKiAoaW5pdF90Z19jZnNfcnEpIGFuZCBoYXZpbmcgb25lIGVudGl0eSByZXByZXNlbnQgdGhpcyBncm91cCBvZgogCQkgKiB0YXNrcyBpbiBycS0+Y2ZzIChpLmUgaW5pdF90YXNrX2dyb3VwLT5zZVtdICE9IE5VTEwpLgogCQkgKi8KIAkJaW5pdF90Z19jZnNfZW50cnkoJmluaXRfdGFza19ncm91cCwKLQkJCQkmcGVyX2NwdShpbml0X2Nmc19ycSwgaSksCisJCQkJJnBlcl9jcHUoaW5pdF90Z19jZnNfcnEsIGkpLAogCQkJCSZwZXJfY3B1KGluaXRfc2NoZWRfZW50aXR5LCBpKSwgaSwgMSwKIAkJCQlyb290X3Rhc2tfZ3JvdXAuc2VbaV0pOwogCkBAIC05MzM0LDYgKzk2NDgsNyBAQAogI2lmZGVmIENPTkZJR19TTVAKIAkJcnEtPnNkID0gTlVMTDsKIAkJcnEtPnJkID0gTlVMTDsKKwkJcnEtPnBvc3Rfc2NoZWR1bGUgPSAwOwogCQlycS0+YWN0aXZlX2JhbGFuY2UgPSAwOwogCQlycS0+bmV4dF9iYWxhbmNlID0gamlmZmllczsKIAkJcnEtPnB1c2hfY3B1ID0gMDsKQEAgLTkzOTgsMTMgKzk3MTMsMjAgQEAKIH0KIAogI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUAotdm9pZCBfX21pZ2h0X3NsZWVwKGNoYXIgKmZpbGUsIGludCBsaW5lKQorc3RhdGljIGlubGluZSBpbnQgcHJlZW1wdF9jb3VudF9lcXVhbHMoaW50IHByZWVtcHRfb2Zmc2V0KQoreworCWludCBuZXN0ZWQgPSBwcmVlbXB0X2NvdW50KCkgJiB+UFJFRU1QVF9BQ1RJVkU7CisKKwlyZXR1cm4gKG5lc3RlZCA9PSBQUkVFTVBUX0lOQVRPTUlDX0JBU0UgKyBwcmVlbXB0X29mZnNldCk7Cit9CisKK3ZvaWQgX19taWdodF9zbGVlcChjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KQogewogI2lmZGVmIGluX2F0b21pYwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHByZXZfamlmZnk7CS8qIHJhdGVsaW1pdGluZyAqLwogCi0JaWYgKCghaW5fYXRvbWljKCkgJiYgIWlycXNfZGlzYWJsZWQoKSkgfHwKLQkJICAgIHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORyB8fCBvb3BzX2luX3Byb2dyZXNzKQorCWlmICgocHJlZW1wdF9jb3VudF9lcXVhbHMocHJlZW1wdF9vZmZzZXQpICYmICFpcnFzX2Rpc2FibGVkKCkpIHx8CisJICAgIHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORyB8fCBvb3BzX2luX3Byb2dyZXNzKQogCQlyZXR1cm47CiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHByZXZfamlmZnkgKyBIWikgJiYgcHJldl9qaWZmeSkKIAkJcmV0dXJuOwpAQCAtMTA1ODEsMyArMTA5MDMsMTEzIEBACiAJLnN1YnN5c19pZCA9IGNwdWFjY3Rfc3Vic3lzX2lkLAogfTsKICNlbmRpZgkvKiBDT05GSUdfQ0dST1VQX0NQVUFDQ1QgKi8KKworI2lmbmRlZiBDT05GSUdfU01QCisKK2ludCByY3VfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMoY2hhciAqcGFnZSkKK3sKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9leHBlZGl0ZWRfdG9ydHVyZV9zdGF0cyk7CisKK3ZvaWQgc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKHZvaWQpCit7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQpOworCisjZWxzZSAvKiAjaWZuZGVmIENPTkZJR19TTVAgKi8KKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtaWdyYXRpb25fcmVxLCByY3VfbWlncmF0aW9uX3JlcSk7CitzdGF0aWMgREVGSU5FX01VVEVYKHJjdV9zY2hlZF9leHBlZGl0ZWRfbXV0ZXgpOworCisjZGVmaW5lIFJDVV9FWFBFRElURURfU1RBVEVfUE9TVCAtMgorI2RlZmluZSBSQ1VfRVhQRURJVEVEX1NUQVRFX0lETEUgLTEKKworc3RhdGljIGludCByY3VfZXhwZWRpdGVkX3N0YXRlID0gUkNVX0VYUEVESVRFRF9TVEFURV9JRExFOworCitpbnQgcmN1X2V4cGVkaXRlZF90b3J0dXJlX3N0YXRzKGNoYXIgKnBhZ2UpCit7CisJaW50IGNudCA9IDA7CisJaW50IGNwdTsKKworCWNudCArPSBzcHJpbnRmKCZwYWdlW2NudF0sICJzdGF0ZTogJWQgLyIsIHJjdV9leHBlZGl0ZWRfc3RhdGUpOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCSBjbnQgKz0gc3ByaW50ZigmcGFnZVtjbnRdLCAiICVkOiVkIiwKKwkJCQljcHUsIHBlcl9jcHUocmN1X21pZ3JhdGlvbl9yZXEsIGNwdSkuZGVzdF9jcHUpOworCX0KKwljbnQgKz0gc3ByaW50ZigmcGFnZVtjbnRdLCAiXG4iKTsKKwlyZXR1cm4gY250OworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2V4cGVkaXRlZF90b3J0dXJlX3N0YXRzKTsKKworc3RhdGljIGxvbmcgc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkX2NvdW50OworCisvKgorICogV2FpdCBmb3IgYW4gcmN1LXNjaGVkIGdyYWNlIHBlcmlvZCB0byBlbGFwc2UsIGJ1dCB1c2UgImJpZyBoYW1tZXIiCisgKiBhcHByb2FjaCB0byBmb3JjZSBncmFjZSBwZXJpb2QgdG8gZW5kIHF1aWNrbHkuICBUaGlzIGNvbnN1bWVzCisgKiBzaWduaWZpY2FudCB0aW1lIG9uIGFsbCBDUFVzLCBhbmQgaXMgdGh1cyBub3QgcmVjb21tZW5kZWQgZm9yCisgKiBhbnkgc29ydCBvZiBjb21tb24tY2FzZSBjb2RlLgorICoKKyAqIE5vdGUgdGhhdCBpdCBpcyBpbGxlZ2FsIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGlsZSBob2xkaW5nIGFueQorICogbG9jayB0aGF0IGlzIGFjcXVpcmVkIGJ5IGEgQ1BVLWhvdHBsdWcgbm90aWZpZXIuICBGYWlsaW5nIHRvCisgKiBvYnNlcnZlIHRoaXMgcmVzdHJpY3Rpb24gd2lsbCByZXN1bHQgaW4gZGVhZGxvY2suCisgKi8KK3ZvaWQgc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKHZvaWQpCit7CisJaW50IGNwdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWJvb2wgbmVlZF9mdWxsX3N5bmMgPSAwOworCXN0cnVjdCBycSAqcnE7CisJc3RydWN0IG1pZ3JhdGlvbl9yZXEgKnJlcTsKKwlsb25nIHNuYXA7CisJaW50IHRyeWNvdW50ID0gMDsKKworCXNtcF9tYigpOyAgLyogZW5zdXJlIHByaW9yIG1vZCBoYXBwZW5zIGJlZm9yZSBjYXB0dXJpbmcgc25hcC4gKi8KKwlzbmFwID0gQUNDRVNTX09OQ0Uoc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkX2NvdW50KSArIDE7CisJZ2V0X29ubGluZV9jcHVzKCk7CisJd2hpbGUgKCFtdXRleF90cnlsb2NrKCZyY3Vfc2NoZWRfZXhwZWRpdGVkX211dGV4KSkgeworCQlwdXRfb25saW5lX2NwdXMoKTsKKwkJaWYgKHRyeWNvdW50KysgPCAxMCkKKwkJCXVkZWxheSh0cnljb3VudCAqIG51bV9vbmxpbmVfY3B1cygpKTsKKwkJZWxzZSB7CisJCQlzeW5jaHJvbml6ZV9zY2hlZCgpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChBQ0NFU1NfT05DRShzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWRfY291bnQpIC0gc25hcCA+IDApIHsKKwkJCXNtcF9tYigpOyAvKiBlbnN1cmUgdGVzdCBoYXBwZW5zIGJlZm9yZSBjYWxsZXIga2ZyZWUgKi8KKwkJCXJldHVybjsKKwkJfQorCQlnZXRfb25saW5lX2NwdXMoKTsKKwl9CisJcmN1X2V4cGVkaXRlZF9zdGF0ZSA9IFJDVV9FWFBFRElURURfU1RBVEVfUE9TVDsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlycSA9IGNwdV9ycShjcHUpOworCQlyZXEgPSAmcGVyX2NwdShyY3VfbWlncmF0aW9uX3JlcSwgY3B1KTsKKwkJaW5pdF9jb21wbGV0aW9uKCZyZXEtPmRvbmUpOworCQlyZXEtPnRhc2sgPSBOVUxMOworCQlyZXEtPmRlc3RfY3B1ID0gUkNVX01JR1JBVElPTl9ORUVEX1FTOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwkJbGlzdF9hZGQoJnJlcS0+bGlzdCwgJnJxLT5taWdyYXRpb25fcXVldWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCQl3YWtlX3VwX3Byb2Nlc3MocnEtPm1pZ3JhdGlvbl90aHJlYWQpOworCX0KKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlyY3VfZXhwZWRpdGVkX3N0YXRlID0gY3B1OworCQlyZXEgPSAmcGVyX2NwdShyY3VfbWlncmF0aW9uX3JlcSwgY3B1KTsKKwkJcnEgPSBjcHVfcnEoY3B1KTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmcmVxLT5kb25lKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJCWlmICh1bmxpa2VseShyZXEtPmRlc3RfY3B1ID09IFJDVV9NSUdSQVRJT05fTVVTVF9TWU5DKSkKKwkJCW5lZWRfZnVsbF9zeW5jID0gMTsKKwkJcmVxLT5kZXN0X2NwdSA9IFJDVV9NSUdSQVRJT05fSURMRTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwl9CisJcmN1X2V4cGVkaXRlZF9zdGF0ZSA9IFJDVV9FWFBFRElURURfU1RBVEVfSURMRTsKKwltdXRleF91bmxvY2soJnJjdV9zY2hlZF9leHBlZGl0ZWRfbXV0ZXgpOworCXB1dF9vbmxpbmVfY3B1cygpOworCWlmIChuZWVkX2Z1bGxfc3luYykKKwkJc3luY2hyb25pemVfc2NoZWQoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCk7CisKKyNlbmRpZiAvKiAjZWxzZSAjaWZuZGVmIENPTkZJR19TTVAgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jcHVwcmkuYyBiL2tlcm5lbC9zY2hlZF9jcHVwcmkuYwppbmRleCBkMDE0ZWZiLi4wZjA1MmZjIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfY3B1cHJpLmMKKysrIGIva2VybmVsL3NjaGVkX2NwdXByaS5jCkBAIC0xMjcsMjEgKzEyNywxMSBAQAogCiAJLyoKIAkgKiBJZiB0aGUgY3B1IHdhcyBjdXJyZW50bHkgbWFwcGVkIHRvIGEgZGlmZmVyZW50IHZhbHVlLCB3ZQotCSAqIGZpcnN0IG5lZWQgdG8gdW5tYXAgdGhlIG9sZCB2YWx1ZQorCSAqIG5lZWQgdG8gbWFwIGl0IHRvIHRoZSBuZXcgdmFsdWUgdGhlbiByZW1vdmUgdGhlIG9sZCB2YWx1ZS4KKwkgKiBOb3RlLCB3ZSBtdXN0IGFkZCB0aGUgbmV3IHZhbHVlIGZpcnN0LCBvdGhlcndpc2Ugd2UgcmlzayB0aGUKKwkgKiBjcHUgYmVpbmcgY2xlYXJlZCBmcm9tIHByaV9hY3RpdmUsIGFuZCB0aGlzIGNwdSBjb3VsZCBiZQorCSAqIG1pc3NlZCBmb3IgYSBwdXNoIG9yIHB1bGwuCiAJICovCi0JaWYgKGxpa2VseShvbGRwcmkgIT0gQ1BVUFJJX0lOVkFMSUQpKSB7Ci0JCXN0cnVjdCBjcHVwcmlfdmVjICp2ZWMgID0gJmNwLT5wcmlfdG9fY3B1W29sZHByaV07Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnZlYy0+bG9jaywgZmxhZ3MpOwotCi0JCXZlYy0+Y291bnQtLTsKLQkJaWYgKCF2ZWMtPmNvdW50KQotCQkJY2xlYXJfYml0KG9sZHByaSwgY3AtPnByaV9hY3RpdmUpOwotCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHZlYy0+bWFzayk7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjLT5sb2NrLCBmbGFncyk7Ci0JfQotCiAJaWYgKGxpa2VseShuZXdwcmkgIT0gQ1BVUFJJX0lOVkFMSUQpKSB7CiAJCXN0cnVjdCBjcHVwcmlfdmVjICp2ZWMgPSAmY3AtPnByaV90b19jcHVbbmV3cHJpXTsKIApAQCAtMTU0LDYgKzE0NCwxOCBAQAogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlYy0+bG9jaywgZmxhZ3MpOwogCX0KKwlpZiAobGlrZWx5KG9sZHByaSAhPSBDUFVQUklfSU5WQUxJRCkpIHsKKwkJc3RydWN0IGNwdXByaV92ZWMgKnZlYyAgPSAmY3AtPnByaV90b19jcHVbb2xkcHJpXTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjLT5sb2NrLCBmbGFncyk7CisKKwkJdmVjLT5jb3VudC0tOworCQlpZiAoIXZlYy0+Y291bnQpCisJCQljbGVhcl9iaXQob2xkcHJpLCBjcC0+cHJpX2FjdGl2ZSk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgdmVjLT5tYXNrKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWMtPmxvY2ssIGZsYWdzKTsKKwl9CiAKIAkqY3VycnByaSA9IG5ld3ByaTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKaW5kZXggNzBjN2UwYi4uNWRkYmQwOCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2RlYnVnLmMKKysrIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKQEAgLTQwOSw2ICs0MDksOCBAQAogCVBOKHNlLndhaXRfbWF4KTsKIAlQTihzZS53YWl0X3N1bSk7CiAJUChzZS53YWl0X2NvdW50KTsKKwlQTihzZS5pb3dhaXRfc3VtKTsKKwlQKHNlLmlvd2FpdF9jb3VudCk7CiAJUChzY2hlZF9pbmZvLmJrbF9jb3VudCk7CiAJUChzZS5ucl9taWdyYXRpb25zKTsKIAlQKHNlLm5yX21pZ3JhdGlvbnNfY29sZCk7CkBAIC00NzksNiArNDgxLDggQEAKIAlwLT5zZS53YWl0X21heAkJCQk9IDA7CiAJcC0+c2Uud2FpdF9zdW0JCQkJPSAwOwogCXAtPnNlLndhaXRfY291bnQJCQk9IDA7CisJcC0+c2UuaW93YWl0X3N1bQkJCT0gMDsKKwlwLT5zZS5pb3dhaXRfY291bnQJCQk9IDA7CiAJcC0+c2Uuc2xlZXBfbWF4CQkJCT0gMDsKIAlwLT5zZS5zdW1fc2xlZXBfcnVudGltZQkJCT0gMDsKIAlwLT5zZS5ibG9ja19tYXgJCQkJPSAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggNjUyZThiZC4uYWE3Zjg0MSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC0yNCw3ICsyNCw3IEBACiAKIC8qCiAgKiBUYXJnZXRlZCBwcmVlbXB0aW9uIGxhdGVuY3kgZm9yIENQVS1ib3VuZCB0YXNrczoKLSAqIChkZWZhdWx0OiAyMG1zICogKDEgKyBpbG9nKG5jcHVzKSksIHVuaXRzOiBuYW5vc2Vjb25kcykKKyAqIChkZWZhdWx0OiA1bXMgKiAoMSArIGlsb2cobmNwdXMpKSwgdW5pdHM6IG5hbm9zZWNvbmRzKQogICoKICAqIE5PVEU6IHRoaXMgbGF0ZW5jeSB2YWx1ZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGNvbmNlcHQgb2YKICAqICd0aW1lc2xpY2UgbGVuZ3RoJyAtIHRpbWVzbGljZXMgaW4gQ0ZTIGFyZSBvZiB2YXJpYWJsZSBsZW5ndGgKQEAgLTM0LDEzICszNCwxMyBAQAogICogKHRvIHNlZSB0aGUgcHJlY2lzZSBlZmZlY3RpdmUgdGltZXNsaWNlIGxlbmd0aCBvZiB5b3VyIHdvcmtsb2FkLAogICogIHJ1biB2bXN0YXQgYW5kIG1vbml0b3IgdGhlIGNvbnRleHQtc3dpdGNoZXMgKGNzKSBmaWVsZCkKICAqLwotdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9sYXRlbmN5ID0gMjAwMDAwMDBVTEw7Cit1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX2xhdGVuY3kgPSA1MDAwMDAwVUxMOwogCiAvKgogICogTWluaW1hbCBwcmVlbXB0aW9uIGdyYW51bGFyaXR5IGZvciBDUFUtYm91bmQgdGFza3M6Ci0gKiAoZGVmYXVsdDogNCBtc2VjICogKDEgKyBpbG9nKG5jcHVzKSksIHVuaXRzOiBuYW5vc2Vjb25kcykKKyAqIChkZWZhdWx0OiAxIG1zZWMgKiAoMSArIGlsb2cobmNwdXMpKSwgdW5pdHM6IG5hbm9zZWNvbmRzKQogICovCi11bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX21pbl9ncmFudWxhcml0eSA9IDQwMDAwMDBVTEw7Cit1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX21pbl9ncmFudWxhcml0eSA9IDEwMDAwMDBVTEw7CiAKIC8qCiAgKiBpcyBrZXB0IGF0IHN5c2N0bF9zY2hlZF9sYXRlbmN5IC8gc3lzY3RsX3NjaGVkX21pbl9ncmFudWxhcml0eQpAQCAtNDgsMTAgKzQ4LDEwIEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNjaGVkX25yX2xhdGVuY3kgPSA1OwogCiAvKgotICogQWZ0ZXIgZm9yaywgY2hpbGQgcnVucyBmaXJzdC4gKGRlZmF1bHQpIElmIHNldCB0byAwIHRoZW4KKyAqIEFmdGVyIGZvcmssIGNoaWxkIHJ1bnMgZmlyc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSB0aGVuCiAgKiBwYXJlbnQgd2lsbCAodHJ5IHRvKSBydW4gZmlyc3QuCiAgKi8KLWNvbnN0X2RlYnVnIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfY2hpbGRfcnVuc19maXJzdCA9IDE7Cit1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX2NoaWxkX3J1bnNfZmlyc3QgX19yZWFkX21vc3RseTsKIAogLyoKICAqIHN5c19zY2hlZF95aWVsZCgpIGNvbXBhdCBtb2RlCkBAIC02MywxMyArNjMsMTMgQEAKIAogLyoKICAqIFNDSEVEX09USEVSIHdha2UtdXAgZ3JhbnVsYXJpdHkuCi0gKiAoZGVmYXVsdDogNSBtc2VjICogKDEgKyBpbG9nKG5jcHVzKSksIHVuaXRzOiBuYW5vc2Vjb25kcykKKyAqIChkZWZhdWx0OiAxIG1zZWMgKiAoMSArIGlsb2cobmNwdXMpKSwgdW5pdHM6IG5hbm9zZWNvbmRzKQogICoKICAqIFRoaXMgb3B0aW9uIGRlbGF5cyB0aGUgcHJlZW1wdGlvbiBlZmZlY3RzIG9mIGRlY291cGxlZCB3b3JrbG9hZHMKICAqIGFuZCByZWR1Y2VzIHRoZWlyIG92ZXItc2NoZWR1bGluZy4gU3luY2hyb25vdXMgd29ya2xvYWRzIHdpbGwgc3RpbGwKICAqIGhhdmUgaW1tZWRpYXRlIHdha2V1cC9zbGVlcCBsYXRlbmNpZXMuCiAgKi8KLXVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5ID0gNTAwMDAwMFVMOwordW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkgPSAxMDAwMDAwVUw7CiAKIGNvbnN0X2RlYnVnIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QgPSA1MDAwMDBVTDsKIApAQCAtNzksMTEgKzc5LDYgQEAKICAqIENGUyBvcGVyYXRpb25zIG9uIGdlbmVyaWMgc2NoZWR1bGFibGUgZW50aXRpZXM6CiAgKi8KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfb2Yoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihzZSwgc3RydWN0IHRhc2tfc3RydWN0LCBzZSk7Ci19Ci0KICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCiAvKiBjcHUgcnVucXVldWUgdG8gd2hpY2ggdGhpcyBjZnNfcnEgaXMgYXR0YWNoZWQgKi8KQEAgLTk1LDYgKzkwLDE0IEBACiAvKiBBbiBlbnRpdHkgaXMgYSB0YXNrIGlmIGl0IGRvZXNuJ3QgIm93biIgYSBydW5xdWV1ZSAqLwogI2RlZmluZSBlbnRpdHlfaXNfdGFzayhzZSkJKCFzZS0+bXlfcSkKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfb2Yoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCit7CisjaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCisJV0FSTl9PTl9PTkNFKCFlbnRpdHlfaXNfdGFzayhzZSkpOworI2VuZGlmCisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZSwgc3RydWN0IHRhc2tfc3RydWN0LCBzZSk7Cit9CisKIC8qIFdhbGsgdXAgc2NoZWR1bGluZyBlbnRpdGllcyBoaWVyYXJjaHkgKi8KICNkZWZpbmUgZm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKSBcCiAJCWZvciAoOyBzZTsgc2UgPSBzZS0+cGFyZW50KQpAQCAtMTg2LDcgKzE4OSwxMiBAQAogCX0KIH0KIAotI2Vsc2UJLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi8KKyNlbHNlCS8qICFDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19vZihzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHNlKTsKK30KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKIHsKQEAgLTUzNyw2ICs1NDUsMTIgQEAKIAlzY2hlZHN0YXRfc2V0KHNlLT53YWl0X2NvdW50LCBzZS0+d2FpdF9jb3VudCArIDEpOwogCXNjaGVkc3RhdF9zZXQoc2UtPndhaXRfc3VtLCBzZS0+d2FpdF9zdW0gKwogCQkJcnFfb2YoY2ZzX3JxKS0+Y2xvY2sgLSBzZS0+d2FpdF9zdGFydCk7CisjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKKwlpZiAoZW50aXR5X2lzX3Rhc2soc2UpKSB7CisJCXRyYWNlX3NjaGVkX3N0YXRfd2FpdCh0YXNrX29mKHNlKSwKKwkJCXJxX29mKGNmc19ycSktPmNsb2NrIC0gc2UtPndhaXRfc3RhcnQpOworCX0KKyNlbmRpZgogCXNjaGVkc3RhdF9zZXQoc2UtPndhaXRfc3RhcnQsIDApOwogfQogCkBAIC02MjgsOCArNjQyLDEwIEBACiAJCXNlLT5zbGVlcF9zdGFydCA9IDA7CiAJCXNlLT5zdW1fc2xlZXBfcnVudGltZSArPSBkZWx0YTsKIAotCQlpZiAodHNrKQorCQlpZiAodHNrKSB7CiAJCQlhY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHRzaywgZGVsdGEgPj4gMTAsIDEpOworCQkJdHJhY2Vfc2NoZWRfc3RhdF9zbGVlcCh0c2ssIGRlbHRhKTsKKwkJfQogCX0KIAlpZiAoc2UtPmJsb2NrX3N0YXJ0KSB7CiAJCXU2NCBkZWx0YSA9IHJxX29mKGNmc19ycSktPmNsb2NrIC0gc2UtPmJsb2NrX3N0YXJ0OwpAQCAtNjQ0LDYgKzY2MCwxMiBAQAogCQlzZS0+c3VtX3NsZWVwX3J1bnRpbWUgKz0gZGVsdGE7CiAKIAkJaWYgKHRzaykgeworCQkJaWYgKHRzay0+aW5faW93YWl0KSB7CisJCQkJc2UtPmlvd2FpdF9zdW0gKz0gZGVsdGE7CisJCQkJc2UtPmlvd2FpdF9jb3VudCsrOworCQkJCXRyYWNlX3NjaGVkX3N0YXRfaW93YWl0KHRzaywgZGVsdGEpOworCQkJfQorCiAJCQkvKgogCQkJICogQmxvY2tpbmcgdGltZSBpcyBpbiB1bml0cyBvZiBuYW5vc2Vjcywgc28gc2hpZnQgYnkKIAkJCSAqIDIwIHRvIGdldCBhIG1pbGxpc2Vjb25kcy1yYW5nZSBlc3RpbWF0aW9uIG9mIHRoZQpAQCAtNzA1LDExICs3MjcsMTEgQEAKIAogCQkJdnJ1bnRpbWUgLT0gdGhyZXNoOwogCQl9Ci0KLQkJLyogZW5zdXJlIHdlIG5ldmVyIGdhaW4gdGltZSBieSBiZWluZyBwbGFjZWQgYmFja3dhcmRzLiAqLwotCQl2cnVudGltZSA9IG1heF92cnVudGltZShzZS0+dnJ1bnRpbWUsIHZydW50aW1lKTsKIAl9CiAKKwkvKiBlbnN1cmUgd2UgbmV2ZXIgZ2FpbiB0aW1lIGJ5IGJlaW5nIHBsYWNlZCBiYWNrd2FyZHMuICovCisJdnJ1bnRpbWUgPSBtYXhfdnJ1bnRpbWUoc2UtPnZydW50aW1lLCB2cnVudGltZSk7CisKIAlzZS0+dnJ1bnRpbWUgPSB2cnVudGltZTsKIH0KIApAQCAtMTA0NiwxNyArMTA2OCwyMSBAQAogICogc2VhcmNoIHN0YXJ0cyB3aXRoIGNwdXMgY2xvc2VzdCB0aGVuIGZ1cnRoZXIgb3V0IGFzIG5lZWRlZCwKICAqIHNvIHdlIGFsd2F5cyBmYXZvciBhIGNsb3NlciwgaWRsZSBjcHUuCiAgKiBEb21haW5zIG1heSBpbmNsdWRlIENQVXMgdGhhdCBhcmUgbm90IHVzYWJsZSBmb3IgbWlncmF0aW9uLAotICogaGVuY2Ugd2UgbmVlZCB0byBtYXNrIHRoZW0gb3V0IChjcHVfYWN0aXZlX21hc2spCisgKiBoZW5jZSB3ZSBuZWVkIHRvIG1hc2sgdGhlbSBvdXQgKHJxLT5yZC0+b25saW5lKQogICoKICAqIFJldHVybnMgdGhlIENQVSB3ZSBzaG91bGQgd2FrZSBvbnRvLgogICovCiAjaWYgZGVmaW5lZChBUkNIX0hBU19TQ0hFRF9XQUtFX0lETEUpCisKKyNkZWZpbmUgY3B1X3JkX2FjdGl2ZShjcHUsIHJxKSBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgcnEtPnJkLT5vbmxpbmUpCisKIHN0YXRpYyBpbnQgd2FrZV9pZGxlKGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKIAlpbnQgaTsKIAl1bnNpZ25lZCBpbnQgY2hvc2VuX3dha2V1cF9jcHU7CiAJaW50IHRoaXNfY3B1OworCXN0cnVjdCBycSAqdGFza19ycSA9IHRhc2tfcnEocCk7CiAKIAkvKgogCSAqIEF0IFBPV0VSU0FWSU5HU19CQUxBTkNFX1dBS0VVUCBsZXZlbCwgaWYgYm90aCB0aGlzX2NwdSBhbmQgcHJldl9jcHUKQEAgLTEwODksMTAgKzExMTUsMTAgQEAKIAlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkgewogCQlpZiAoKHNkLT5mbGFncyAmIFNEX1dBS0VfSURMRSkKIAkJICAgIHx8ICgoc2QtPmZsYWdzICYgU0RfV0FLRV9JRExFX0ZBUikKLQkJCSYmICF0YXNrX2hvdChwLCB0YXNrX3JxKHApLT5jbG9jaywgc2QpKSkgeworCQkJJiYgIXRhc2tfaG90KHAsIHRhc2tfcnEtPmNsb2NrLCBzZCkpKSB7CiAJCQlmb3JfZWFjaF9jcHVfYW5kKGksIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSwKIAkJCQkJICZwLT5jcHVzX2FsbG93ZWQpIHsKLQkJCQlpZiAoY3B1X2FjdGl2ZShpKSAmJiBpZGxlX2NwdShpKSkgeworCQkJCWlmIChjcHVfcmRfYWN0aXZlKGksIHRhc2tfcnEpICYmIGlkbGVfY3B1KGkpKSB7CiAJCQkJCWlmIChpICE9IHRhc2tfY3B1KHApKSB7CiAJCQkJCQlzY2hlZHN0YXRfaW5jKHAsCiAJCQkJCQkgICAgICAgc2UubnJfd2FrZXVwc19pZGxlKTsKQEAgLTEyMzUsNyArMTI2MSwxNyBAQAogCXRnID0gdGFza19ncm91cChwKTsKIAl3ZWlnaHQgPSBwLT5zZS5sb2FkLndlaWdodDsKIAotCWJhbGFuY2VkID0gMTAwKih0bCArIGVmZmVjdGl2ZV9sb2FkKHRnLCB0aGlzX2NwdSwgd2VpZ2h0LCB3ZWlnaHQpKSA8PQorCS8qCisJICogSW4gbG93LWxvYWQgc2l0dWF0aW9ucywgd2hlcmUgcHJldl9jcHUgaXMgaWRsZSBhbmQgdGhpc19jcHUgaXMgaWRsZQorCSAqIGR1ZSB0byB0aGUgc3luYyBjYXVzZSBhYm92ZSBoYXZpbmcgZHJvcHBlZCB0bCB0byAwLCB3ZSdsbCBhbHdheXMgaGF2ZQorCSAqIGFuIGltYmFsYW5jZSwgYnV0IHRoZXJlJ3MgcmVhbGx5IG5vdGhpbmcgeW91IGNhbiBkbyBhYm91dCB0aGF0LCBzbworCSAqIHRoYXQncyBnb29kIHRvby4KKwkgKgorCSAqIE90aGVyd2lzZSBjaGVjayBpZiBlaXRoZXIgY3B1cyBhcmUgbmVhciBlbm91Z2ggaW4gbG9hZCB0byBhbGxvdyB0aGlzCisJICogdGFzayB0byBiZSB3b2tlbiBvbiB0aGlzX2NwdS4KKwkgKi8KKwliYWxhbmNlZCA9ICF0bCB8fAorCQkxMDAqKHRsICsgZWZmZWN0aXZlX2xvYWQodGcsIHRoaXNfY3B1LCB3ZWlnaHQsIHdlaWdodCkpIDw9CiAJCWltYmFsYW5jZSoobG9hZCArIGVmZmVjdGl2ZV9sb2FkKHRnLCBwcmV2X2NwdSwgMCwgd2VpZ2h0KSk7CiAKIAkvKgpAQCAtMTI3OCw4ICsxMzE0LDYgQEAKIAl0aGlzX3JxCQk9IGNwdV9ycSh0aGlzX2NwdSk7CiAJbmV3X2NwdQkJPSBwcmV2X2NwdTsKIAotCWlmIChwcmV2X2NwdSA9PSB0aGlzX2NwdSkKLQkJZ290byBvdXQ7CiAJLyoKIAkgKiAndGhpc19zZCcgaXMgdGhlIGZpcnN0IGRvbWFpbiB0aGF0IGJvdGgKIAkgKiB0aGlzX2NwdSBhbmQgcHJldl9jcHUgYXJlIHByZXNlbnQgaW46CkBAIC0xNzIxLDYgKzE3NTUsOCBAQAogCXNjaGVkX2luZm9fcXVldWVkKHApOwogCiAJdXBkYXRlX2N1cnIoY2ZzX3JxKTsKKwlpZiAoY3VycikKKwkJc2UtPnZydW50aW1lID0gY3Vyci0+dnJ1bnRpbWU7CiAJcGxhY2VfZW50aXR5KGNmc19ycSwgc2UsIDEpOwogCiAJLyogJ2N1cnInIHdpbGwgYmUgTlVMTCBpZiB0aGUgY2hpbGQgYmVsb25ncyB0byBhIGRpZmZlcmVudCBncm91cCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmggYi9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaAppbmRleCA0NTY5YmZhLi5lMmRjNjNhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaAorKysgYi9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaApAQCAtMSw0ICsxLDQgQEAKLVNDSEVEX0ZFQVQoTkVXX0ZBSVJfU0xFRVBFUlMsIDEpCitTQ0hFRF9GRUFUKE5FV19GQUlSX1NMRUVQRVJTLCAwKQogU0NIRURfRkVBVChOT1JNQUxJWkVEX1NMRUVQRVIsIDApCiBTQ0hFRF9GRUFUKEFEQVBUSVZFX0dSQU4sIDEpCiBTQ0hFRF9GRUFUKFdBS0VVUF9QUkVFTVBULCAxKQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCAzOTE4ZTAxLi4yZWI0YmQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtMywxNSArMywxOCBAQAogICogcG9saWNpZXMpCiAgKi8KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJ0X3Rhc2tfb2Yoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihydF9zZSwgc3RydWN0IHRhc2tfc3RydWN0LCBydCk7Ci19Ci0KICNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKIAogI2RlZmluZSBydF9lbnRpdHlfaXNfdGFzayhydF9zZSkgKCEocnRfc2UpLT5teV9xKQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3sKKyNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKKwlXQVJOX09OX09OQ0UoIXJ0X2VudGl0eV9pc190YXNrKHJ0X3NlKSk7CisjZW5kaWYKKwlyZXR1cm4gY29udGFpbmVyX29mKHJ0X3NlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJ0KTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7CiAJcmV0dXJuIHJ0X3JxLT5ycTsKQEAgLTI2LDYgKzI5LDExIEBACiAKICNkZWZpbmUgcnRfZW50aXR5X2lzX3Rhc2socnRfc2UpICgxKQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcnRfdGFza19vZihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHJ0X3NlLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJ0KTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihydF9ycSwgc3RydWN0IHJxLCBydCk7CkBAIC0xMjgsNiArMTM2LDExIEBACiAJcGxpc3RfZGVsKCZwLT5wdXNoYWJsZV90YXNrcywgJnJxLT5ydC5wdXNoYWJsZV90YXNrcyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGhhc19wdXNoYWJsZV90YXNrcyhzdHJ1Y3QgcnEgKnJxKQoreworCXJldHVybiAhcGxpc3RfaGVhZF9lbXB0eSgmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzKTsKK30KKwogI2Vsc2UKIAogc3RhdGljIGlubGluZSB2b2lkIGVucXVldWVfcHVzaGFibGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCkBAIC02MDIsNiArNjE1LDggQEAKIAljdXJyLT5zZS5leGVjX3N0YXJ0ID0gcnEtPmNsb2NrOwogCWNwdWFjY3RfY2hhcmdlKGN1cnIsIGRlbHRhX2V4ZWMpOwogCisJc2NoZWRfcnRfYXZnX3VwZGF0ZShycSwgZGVsdGFfZXhlYyk7CisKIAlpZiAoIXJ0X2JhbmR3aWR0aF9lbmFibGVkKCkpCiAJCXJldHVybjsKIApAQCAtODc0LDggKzg4OSw2IEBACiAKIAlpZiAoIXRhc2tfY3VycmVudChycSwgcCkgJiYgcC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkKIAkJZW5xdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKLQotCWluY19jcHVfbG9hZChycSwgcC0+c2UubG9hZC53ZWlnaHQpOwogfQogCiBzdGF0aWMgdm9pZCBkZXF1ZXVlX3Rhc2tfcnQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2xlZXApCkBAIC04ODYsOCArODk5LDYgQEAKIAlkZXF1ZXVlX3J0X2VudGl0eShydF9zZSk7CiAKIAlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOwotCi0JZGVjX2NwdV9sb2FkKHJxLCBwLT5zZS5sb2FkLndlaWdodCk7CiB9CiAKIC8qCkBAIC0xMDY0LDYgKzEwNzUsMTQgQEAKIAlpZiAocCkKIAkJZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKIAorI2lmZGVmIENPTkZJR19TTVAKKwkvKgorCSAqIFdlIGRldGVjdCB0aGlzIHN0YXRlIGhlcmUgc28gdGhhdCB3ZSBjYW4gYXZvaWQgdGFraW5nIHRoZSBSUQorCSAqIGxvY2sgYWdhaW4gbGF0ZXIgaWYgdGhlcmUgaXMgbm8gbmVlZCB0byBwdXNoCisJICovCisJcnEtPnBvc3Rfc2NoZWR1bGUgPSBoYXNfcHVzaGFibGVfdGFza3MocnEpOworI2VuZGlmCisKIAlyZXR1cm4gcDsKIH0KIApAQCAtMTE2MiwxMyArMTE4MSw2IEBACiAJCXJldHVybiAtMTsgLyogTm8gdGFyZ2V0cyBmb3VuZCAqLwogCiAJLyoKLQkgKiBPbmx5IGNvbnNpZGVyIENQVXMgdGhhdCBhcmUgdXNhYmxlIGZvciBtaWdyYXRpb24uCi0JICogSSBndWVzcyB3ZSBtaWdodCB3YW50IHRvIGNoYW5nZSBjcHVwcmlfZmluZCgpIHRvIGlnbm9yZSB0aG9zZQotCSAqIGluIHRoZSBmaXJzdCBwbGFjZS4KLQkgKi8KLQljcHVtYXNrX2FuZChsb3dlc3RfbWFzaywgbG93ZXN0X21hc2ssIGNwdV9hY3RpdmVfbWFzayk7Ci0KLQkvKgogCSAqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBidWlsdCBhIG1hc2sgb2YgY3B1cyByZXByZXNlbnRpbmcgdGhlCiAJICogbG93ZXN0IHByaW9yaXR5IHRhc2tzIGluIHRoZSBzeXN0ZW0uICBOb3cgd2Ugd2FudCB0byBlbGVjdAogCSAqIHRoZSBiZXN0IG9uZSBiYXNlZCBvbiBvdXIgYWZmaW5pdHkgYW5kIHRvcG9sb2d5LgpAQCAtMTI2MiwxMSArMTI3NCw2IEBACiAJcmV0dXJuIGxvd2VzdF9ycTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaGFzX3B1c2hhYmxlX3Rhc2tzKHN0cnVjdCBycSAqcnEpCi17Ci0JcmV0dXJuICFwbGlzdF9oZWFkX2VtcHR5KCZycS0+cnQucHVzaGFibGVfdGFza3MpOwotfQotCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfcHVzaGFibGVfdGFzayhzdHJ1Y3QgcnEgKnJxKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKQEAgLTE0NjYsMjMgKzE0NzMsOSBAQAogCQlwdWxsX3J0X3Rhc2socnEpOwogfQogCi0vKgotICogYXNzdW1lcyBycS0+bG9jayBpcyBoZWxkCi0gKi8KLXN0YXRpYyBpbnQgbmVlZHNfcG9zdF9zY2hlZHVsZV9ydChzdHJ1Y3QgcnEgKnJxKQotewotCXJldHVybiBoYXNfcHVzaGFibGVfdGFza3MocnEpOwotfQotCiBzdGF0aWMgdm9pZCBwb3N0X3NjaGVkdWxlX3J0KHN0cnVjdCBycSAqcnEpCiB7Ci0JLyoKLQkgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGlmIG5lZWRzX3Bvc3Rfc2NoZWR1bGVfcnQoKSBpbmRpY2F0ZXMgdGhhdAotCSAqIHdlIG5lZWQgdG8gcHVzaCB0YXNrcyBhd2F5Ci0JICovCi0Jc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOwogCXB1c2hfcnRfdGFza3MocnEpOwotCXNwaW5fdW5sb2NrX2lycSgmcnEtPmxvY2spOwogfQogCiAvKgpAQCAtMTc1OCw3ICsxNzUxLDYgQEAKIAkucnFfb25saW5lICAgICAgICAgICAgICA9IHJxX29ubGluZV9ydCwKIAkucnFfb2ZmbGluZSAgICAgICAgICAgICA9IHJxX29mZmxpbmVfcnQsCiAJLnByZV9zY2hlZHVsZQkJPSBwcmVfc2NoZWR1bGVfcnQsCi0JLm5lZWRzX3Bvc3Rfc2NoZWR1bGUJPSBuZWVkc19wb3N0X3NjaGVkdWxlX3J0LAogCS5wb3N0X3NjaGVkdWxlCQk9IHBvc3Rfc2NoZWR1bGVfcnQsCiAJLnRhc2tfd2FrZV91cAkJPSB0YXNrX3dha2VfdXBfcnQsCiAJLnN3aXRjaGVkX2Zyb20JCT0gc3dpdGNoZWRfZnJvbV9ydCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zbXAuYyBiL2tlcm5lbC9zbXAuYwppbmRleCA5NDE4OGI4Li44ZTIxODUwIDEwMDY0NAotLS0gYS9rZXJuZWwvc21wLmMKKysrIGIva2VybmVsL3NtcC5jCkBAIC0xNzcsNiArMTc3LDExIEBACiAJaW50IGNwdSA9IGdldF9jcHUoKTsKIAogCS8qCisJICogU2hvdWxkbid0IHJlY2VpdmUgdGhpcyBpbnRlcnJ1cHQgb24gYSBjcHUgdGhhdCBpcyBub3QgeWV0IG9ubGluZS4KKwkgKi8KKwlXQVJOX09OX09OQ0UoIWNwdV9vbmxpbmUoY3B1KSk7CisKKwkvKgogCSAqIEVuc3VyZSBlbnRyeSBpcyB2aXNpYmxlIG9uIGNhbGxfZnVuY3Rpb25fcXVldWUgYWZ0ZXIgd2UgaGF2ZQogCSAqIGVudGVyZWQgdGhlIElQSS4gU2VlIGNvbW1lbnQgaW4gc21wX2NhbGxfZnVuY3Rpb25fbWFueS4KIAkgKiBJZiB3ZSBkb24ndCBoYXZlIHRoaXMsIHRoZW4gd2UgbWF5IG1pc3MgYW4gZW50cnkgb24gdGhlIGxpc3QKQEAgLTIzMCw2ICsyMzUsMTEgQEAKIAl1bnNpZ25lZCBpbnQgZGF0YV9mbGFnczsKIAlMSVNUX0hFQUQobGlzdCk7CiAKKwkvKgorCSAqIFNob3VsZG4ndCByZWNlaXZlIHRoaXMgaW50ZXJydXB0IG9uIGEgY3B1IHRoYXQgaXMgbm90IHlldCBvbmxpbmUuCisJICovCisJV0FSTl9PTl9PTkNFKCFjcHVfb25saW5lKHNtcF9wcm9jZXNzb3JfaWQoKSkpOworCiAJc3Bpbl9sb2NrKCZxLT5sb2NrKTsKIAlsaXN0X3JlcGxhY2VfaW5pdCgmcS0+bGlzdCwgJmxpc3QpOwogCXNwaW5fdW5sb2NrKCZxLT5sb2NrKTsKQEAgLTI4NSw4ICsyOTUsMTQgQEAKIAkgKi8KIAl0aGlzX2NwdSA9IGdldF9jcHUoKTsKIAotCS8qIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLQlXQVJOX09OX09OQ0UoaXJxc19kaXNhYmxlZCgpICYmICFvb3BzX2luX3Byb2dyZXNzKTsKKwkvKgorCSAqIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisJICogV2UgYWxsb3cgY3B1J3MgdGhhdCBhcmUgbm90IHlldCBvbmxpbmUgdGhvdWdoLCBhcyBubyBvbmUgZWxzZSBjYW4KKwkgKiBzZW5kIHNtcCBjYWxsIGZ1bmN0aW9uIGludGVycnVwdCB0byB0aGlzIGNwdSBhbmQgYXMgc3VjaCBkZWFkbG9ja3MKKwkgKiBjYW4ndCBoYXBwZW4uCisJICovCisJV0FSTl9PTl9PTkNFKGNwdV9vbmxpbmUodGhpc19jcHUpICYmIGlycXNfZGlzYWJsZWQoKQorCQkgICAgICYmICFvb3BzX2luX3Byb2dyZXNzKTsKIAogCWlmIChjcHUgPT0gdGhpc19jcHUpIHsKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMzI5LDggKzM0NSwxNCBAQAogewogCWNzZF9sb2NrKGRhdGEpOwogCi0JLyogQ2FuIGRlYWRsb2NrIHdoZW4gY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotCVdBUk5fT05fT05DRSh3YWl0ICYmIGlycXNfZGlzYWJsZWQoKSAmJiAhb29wc19pbl9wcm9ncmVzcyk7CisJLyoKKwkgKiBDYW4gZGVhZGxvY2sgd2hlbiBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorCSAqIFdlIGFsbG93IGNwdSdzIHRoYXQgYXJlIG5vdCB5ZXQgb25saW5lIHRob3VnaCwgYXMgbm8gb25lIGVsc2UgY2FuCisJICogc2VuZCBzbXAgY2FsbCBmdW5jdGlvbiBpbnRlcnJ1cHQgdG8gdGhpcyBjcHUgYW5kIGFzIHN1Y2ggZGVhZGxvY2tzCisJICogY2FuJ3QgaGFwcGVuLgorCSAqLworCVdBUk5fT05fT05DRShjcHVfb25saW5lKHNtcF9wcm9jZXNzb3JfaWQoKSkgJiYgd2FpdCAmJiBpcnFzX2Rpc2FibGVkKCkKKwkJICAgICAmJiAhb29wc19pbl9wcm9ncmVzcyk7CiAKIAlnZW5lcmljX2V4ZWNfc2luZ2xlKGNwdSwgZGF0YSwgd2FpdCk7CiB9CkBAIC0zNjUsOCArMzg3LDE0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY3B1LCBuZXh0X2NwdSwgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQkvKiBDYW4gZGVhZGxvY2sgd2hlbiBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCi0JV0FSTl9PTl9PTkNFKGlycXNfZGlzYWJsZWQoKSAmJiAhb29wc19pbl9wcm9ncmVzcyk7CisJLyoKKwkgKiBDYW4gZGVhZGxvY2sgd2hlbiBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorCSAqIFdlIGFsbG93IGNwdSdzIHRoYXQgYXJlIG5vdCB5ZXQgb25saW5lIHRob3VnaCwgYXMgbm8gb25lIGVsc2UgY2FuCisJICogc2VuZCBzbXAgY2FsbCBmdW5jdGlvbiBpbnRlcnJ1cHQgdG8gdGhpcyBjcHUgYW5kIGFzIHN1Y2ggZGVhZGxvY2tzCisJICogY2FuJ3QgaGFwcGVuLgorCSAqLworCVdBUk5fT05fT05DRShjcHVfb25saW5lKHRoaXNfY3B1KSAmJiBpcnFzX2Rpc2FibGVkKCkKKwkJICAgICAmJiAhb29wc19pbl9wcm9ncmVzcyk7CiAKIAkvKiBTbywgd2hhdCdzIGEgQ1BVIHRoZXkgd2FudD8gSWdub3JpbmcgdGhpcyBvbmUuICovCiAJY3B1ID0gY3B1bWFza19maXJzdF9hbmQobWFzaywgY3B1X29ubGluZV9tYXNrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IGViNWUxMzEuLjdkYjI1MDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKKysrIGIva2VybmVsL3NvZnRpcnEuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJCQkJcHJlZW1wdF9jb3VudCgpID0gcHJldl9jb3VudDsKIAkJCX0KIAotCQkJcmN1X2JoX3FzY3RyX2luYyhjcHUpOworCQkJcmN1X2JoX3FzKGNwdSk7CiAJCX0KIAkJaCsrOwogCQlwZW5kaW5nID4+PSAxOwpAQCAtNzIxLDcgKzcyMSw3IEBACiAJCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJCXByZWVtcHRfZGlzYWJsZSgpOwotCQkJcmN1X3FzY3RyX2luYygobG9uZylfX2JpbmRfY3B1KTsKKwkJCXJjdV9zY2hlZF9xcygobG9uZylfX2JpbmRfY3B1KTsKIAkJfQogCQlwcmVlbXB0X2VuYWJsZSgpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NwaW5sb2NrLmMgYi9rZXJuZWwvc3BpbmxvY2suYwppbmRleCA3OTMyNjUzLi41ZGRhYjczIDEwMDY0NAotLS0gYS9rZXJuZWwvc3BpbmxvY2suYworKysgYi9rZXJuZWwvc3BpbmxvY2suYwpAQCAtMjEsNDQgKzIxLDI5IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAorI2lmbmRlZiBfc3Bpbl90cnlsb2NrCiBpbnQgX19sb2NrZnVuYyBfc3Bpbl90cnlsb2NrKHNwaW5sb2NrX3QgKmxvY2spCiB7Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaWYgKF9yYXdfc3Bpbl90cnlsb2NrKGxvY2spKSB7Ci0JCXNwaW5fYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOwotCQlyZXR1cm4gMTsKLQl9Ci0JCi0JcHJlZW1wdF9lbmFibGUoKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gX19zcGluX3RyeWxvY2sobG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKF9zcGluX3RyeWxvY2spOworI2VuZGlmCiAKKyNpZm5kZWYgX3JlYWRfdHJ5bG9jawogaW50IF9fbG9ja2Z1bmMgX3JlYWRfdHJ5bG9jayhyd2xvY2tfdCAqbG9jaykKIHsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAoX3Jhd19yZWFkX3RyeWxvY2sobG9jaykpIHsKLQkJcndsb2NrX2FjcXVpcmVfcmVhZCgmbG9jay0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlwcmVlbXB0X2VuYWJsZSgpOwotCXJldHVybiAwOworCXJldHVybiBfX3JlYWRfdHJ5bG9jayhsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woX3JlYWRfdHJ5bG9jayk7CisjZW5kaWYKIAorI2lmbmRlZiBfd3JpdGVfdHJ5bG9jawogaW50IF9fbG9ja2Z1bmMgX3dyaXRlX3RyeWxvY2socndsb2NrX3QgKmxvY2spCiB7Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaWYgKF9yYXdfd3JpdGVfdHJ5bG9jayhsb2NrKSkgewotCQlyd2xvY2tfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlwcmVlbXB0X2VuYWJsZSgpOwotCXJldHVybiAwOworCXJldHVybiBfX3dyaXRlX3RyeWxvY2sobG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKF93cml0ZV90cnlsb2NrKTsKKyNlbmRpZgogCiAvKgogICogSWYgbG9ja2RlcCBpcyBlbmFibGVkIHRoZW4gd2UgdXNlIHRoZSBub24tcHJlZW1wdGlvbiBzcGluLW9wcwpAQCAtNjcsMTMyICs1MiwxMDEgQEAKICAqLwogI2lmICFkZWZpbmVkKENPTkZJR19HRU5FUklDX0xPQ0tCUkVBSykgfHwgZGVmaW5lZChDT05GSUdfREVCVUdfTE9DS19BTExPQykKIAorI2lmbmRlZiBfcmVhZF9sb2NrCiB2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfbG9jayhyd2xvY2tfdCAqbG9jaykKIHsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlyd2xvY2tfYWNxdWlyZV9yZWFkKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7Ci0JTE9DS19DT05URU5ERUQobG9jaywgX3Jhd19yZWFkX3RyeWxvY2ssIF9yYXdfcmVhZF9sb2NrKTsKKwlfX3JlYWRfbG9jayhsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woX3JlYWRfbG9jayk7CisjZW5kaWYKIAorI2lmbmRlZiBfc3Bpbl9sb2NrX2lycXNhdmUKIHVuc2lnbmVkIGxvbmcgX19sb2NrZnVuYyBfc3Bpbl9sb2NrX2lycXNhdmUoc3BpbmxvY2tfdCAqbG9jaykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXByZWVtcHRfZGlzYWJsZSgpOwotCXNwaW5fYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwotCS8qCi0JICogT24gbG9ja2RlcCB3ZSBkb250IHdhbnQgdGhlIGhhbmQtY29kZWQgaXJxLWVuYWJsZSBvZgotCSAqIF9yYXdfc3Bpbl9sb2NrX2ZsYWdzKCkgY29kZSwgYmVjYXVzZSBsb2NrZGVwIGFzc3VtZXMKLQkgKiB0aGF0IGludGVycnVwdHMgYXJlIG5vdCByZS1lbmFibGVkIGR1cmluZyBsb2NrLWFjcXVpcmU6Ci0JICovCi0jaWZkZWYgQ09ORklHX0xPQ0tERVAKLQlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3NwaW5fdHJ5bG9jaywgX3Jhd19zcGluX2xvY2spOwotI2Vsc2UKLQlfcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCAmZmxhZ3MpOwotI2VuZGlmCi0JcmV0dXJuIGZsYWdzOworCXJldHVybiBfX3NwaW5fbG9ja19pcnFzYXZlKGxvY2spOwogfQogRVhQT1JUX1NZTUJPTChfc3Bpbl9sb2NrX2lycXNhdmUpOworI2VuZGlmCiAKKyNpZm5kZWYgX3NwaW5fbG9ja19pcnEKIHZvaWQgX19sb2NrZnVuYyBfc3Bpbl9sb2NrX2lycShzcGlubG9ja190ICpsb2NrKQogewotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0Jc3Bpbl9hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7Ci0JTE9DS19DT05URU5ERUQobG9jaywgX3Jhd19zcGluX3RyeWxvY2ssIF9yYXdfc3Bpbl9sb2NrKTsKKwlfX3NwaW5fbG9ja19pcnEobG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKF9zcGluX2xvY2tfaXJxKTsKKyNlbmRpZgogCisjaWZuZGVmIF9zcGluX2xvY2tfYmgKIHZvaWQgX19sb2NrZnVuYyBfc3Bpbl9sb2NrX2JoKHNwaW5sb2NrX3QgKmxvY2spCiB7Ci0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCXByZWVtcHRfZGlzYWJsZSgpOwotCXNwaW5fYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwotCUxPQ0tfQ09OVEVOREVEKGxvY2ssIF9yYXdfc3Bpbl90cnlsb2NrLCBfcmF3X3NwaW5fbG9jayk7CisJX19zcGluX2xvY2tfYmgobG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKF9zcGluX2xvY2tfYmgpOworI2VuZGlmCiAKKyNpZm5kZWYgX3JlYWRfbG9ja19pcnFzYXZlCiB1bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3JlYWRfbG9ja19pcnFzYXZlKHJ3bG9ja190ICpsb2NrKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0Jcndsb2NrX2FjcXVpcmVfcmVhZCgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwotCUxPQ0tfQ09OVEVOREVEX0ZMQUdTKGxvY2ssIF9yYXdfcmVhZF90cnlsb2NrLCBfcmF3X3JlYWRfbG9jaywKLQkJCSAgICAgX3Jhd19yZWFkX2xvY2tfZmxhZ3MsICZmbGFncyk7Ci0JcmV0dXJuIGZsYWdzOworCXJldHVybiBfX3JlYWRfbG9ja19pcnFzYXZlKGxvY2spOwogfQogRVhQT1JUX1NZTUJPTChfcmVhZF9sb2NrX2lycXNhdmUpOworI2VuZGlmCiAKKyNpZm5kZWYgX3JlYWRfbG9ja19pcnEKIHZvaWQgX19sb2NrZnVuYyBfcmVhZF9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKIHsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCXByZWVtcHRfZGlzYWJsZSgpOwotCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKLQlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3JlYWRfdHJ5bG9jaywgX3Jhd19yZWFkX2xvY2spOworCV9fcmVhZF9sb2NrX2lycShsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woX3JlYWRfbG9ja19pcnEpOworI2VuZGlmCiAKKyNpZm5kZWYgX3JlYWRfbG9ja19iaAogdm9pZCBfX2xvY2tmdW5jIF9yZWFkX2xvY2tfYmgocndsb2NrX3QgKmxvY2spCiB7Ci0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCXByZWVtcHRfZGlzYWJsZSgpOwotCXJ3bG9ja19hY3F1aXJlX3JlYWQoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKLQlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3JlYWRfdHJ5bG9jaywgX3Jhd19yZWFkX2xvY2spOworCV9fcmVhZF9sb2NrX2JoKGxvY2spOwogfQogRVhQT1JUX1NZTUJPTChfcmVhZF9sb2NrX2JoKTsKKyNlbmRpZgogCisjaWZuZGVmIF93cml0ZV9sb2NrX2lycXNhdmUKIHVuc2lnbmVkIGxvbmcgX19sb2NrZnVuYyBfd3JpdGVfbG9ja19pcnFzYXZlKHJ3bG9ja190ICpsb2NrKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0Jcndsb2NrX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKLQlMT0NLX0NPTlRFTkRFRF9GTEFHUyhsb2NrLCBfcmF3X3dyaXRlX3RyeWxvY2ssIF9yYXdfd3JpdGVfbG9jaywKLQkJCSAgICAgX3Jhd193cml0ZV9sb2NrX2ZsYWdzLCAmZmxhZ3MpOwotCXJldHVybiBmbGFnczsKKwlyZXR1cm4gX193cml0ZV9sb2NrX2lycXNhdmUobG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKF93cml0ZV9sb2NrX2lycXNhdmUpOworI2VuZGlmCiAKKyNpZm5kZWYgX3dyaXRlX2xvY2tfaXJxCiB2b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX2xvY2tfaXJxKHJ3bG9ja190ICpsb2NrKQogewotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0Jcndsb2NrX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKLQlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3dyaXRlX3RyeWxvY2ssIF9yYXdfd3JpdGVfbG9jayk7CisJX193cml0ZV9sb2NrX2lycShsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woX3dyaXRlX2xvY2tfaXJxKTsKKyNlbmRpZgogCisjaWZuZGVmIF93cml0ZV9sb2NrX2JoCiB2b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX2xvY2tfYmgocndsb2NrX3QgKmxvY2spCiB7Ci0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCXByZWVtcHRfZGlzYWJsZSgpOwotCXJ3bG9ja19hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7Ci0JTE9DS19DT05URU5ERUQobG9jaywgX3Jhd193cml0ZV90cnlsb2NrLCBfcmF3X3dyaXRlX2xvY2spOworCV9fd3JpdGVfbG9ja19iaChsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woX3dyaXRlX2xvY2tfYmgpOworI2VuZGlmCiAKKyNpZm5kZWYgX3NwaW5fbG9jawogdm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2soc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlzcGluX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKLQlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3NwaW5fdHJ5bG9jaywgX3Jhd19zcGluX2xvY2spOworCV9fc3Bpbl9sb2NrKGxvY2spOwogfQotCiBFWFBPUlRfU1lNQk9MKF9zcGluX2xvY2spOworI2VuZGlmCiAKKyNpZm5kZWYgX3dyaXRlX2xvY2sKIHZvaWQgX19sb2NrZnVuYyBfd3JpdGVfbG9jayhyd2xvY2tfdCAqbG9jaykKIHsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlyd2xvY2tfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwotCUxPQ0tfQ09OVEVOREVEKGxvY2ssIF9yYXdfd3JpdGVfdHJ5bG9jaywgX3Jhd193cml0ZV9sb2NrKTsKKwlfX3dyaXRlX2xvY2sobG9jayk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woX3dyaXRlX2xvY2spOworI2VuZGlmCiAKICNlbHNlIC8qIENPTkZJR19QUkVFTVBUOiAqLwogCkBAIC0zMTgsMTI1ICsyNzIsMTA5IEBACiAKICNlbmRpZgogCisjaWZuZGVmIF9zcGluX3VubG9jawogdm9pZCBfX2xvY2tmdW5jIF9zcGluX3VubG9jayhzcGlubG9ja190ICpsb2NrKQogewotCXNwaW5fcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwotCV9yYXdfc3Bpbl91bmxvY2sobG9jayk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKKwlfX3NwaW5fdW5sb2NrKGxvY2spOwogfQogRVhQT1JUX1NZTUJPTChfc3Bpbl91bmxvY2spOworI2VuZGlmCiAKKyNpZm5kZWYgX3dyaXRlX3VubG9jawogdm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2socndsb2NrX3QgKmxvY2spCiB7Ci0Jcndsb2NrX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKLQlfcmF3X3dyaXRlX3VubG9jayhsb2NrKTsKLQlwcmVlbXB0X2VuYWJsZSgpOworCV9fd3JpdGVfdW5sb2NrKGxvY2spOwogfQogRVhQT1JUX1NZTUJPTChfd3JpdGVfdW5sb2NrKTsKKyNlbmRpZgogCisjaWZuZGVmIF9yZWFkX3VubG9jawogdm9pZCBfX2xvY2tmdW5jIF9yZWFkX3VubG9jayhyd2xvY2tfdCAqbG9jaykKIHsKLQlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwotCV9yYXdfcmVhZF91bmxvY2sobG9jayk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKKwlfX3JlYWRfdW5sb2NrKGxvY2spOwogfQogRVhQT1JUX1NZTUJPTChfcmVhZF91bmxvY2spOworI2VuZGlmCiAKKyNpZm5kZWYgX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUKIHZvaWQgX19sb2NrZnVuYyBfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXNwaW5fcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwotCV9yYXdfc3Bpbl91bmxvY2sobG9jayk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXByZWVtcHRfZW5hYmxlKCk7CisJX19zcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUpOworI2VuZGlmCiAKKyNpZm5kZWYgX3NwaW5fdW5sb2NrX2lycQogdm9pZCBfX2xvY2tmdW5jIF9zcGluX3VubG9ja19pcnEoc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlzcGluX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKLQlfcmF3X3NwaW5fdW5sb2NrKGxvY2spOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQlwcmVlbXB0X2VuYWJsZSgpOworCV9fc3Bpbl91bmxvY2tfaXJxKGxvY2spOwogfQogRVhQT1JUX1NZTUJPTChfc3Bpbl91bmxvY2tfaXJxKTsKKyNlbmRpZgogCisjaWZuZGVmIF9zcGluX3VubG9ja19iaAogdm9pZCBfX2xvY2tmdW5jIF9zcGluX3VubG9ja19iaChzcGlubG9ja190ICpsb2NrKQogewotCXNwaW5fcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwotCV9yYXdfc3Bpbl91bmxvY2sobG9jayk7Ci0JcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwotCWxvY2FsX2JoX2VuYWJsZV9pcCgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCV9fc3Bpbl91bmxvY2tfYmgobG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKF9zcGluX3VubG9ja19iaCk7CisjZW5kaWYKIAorI2lmbmRlZiBfcmVhZF91bmxvY2tfaXJxcmVzdG9yZQogdm9pZCBfX2xvY2tmdW5jIF9yZWFkX3VubG9ja19pcnFyZXN0b3JlKHJ3bG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7Ci0JX3Jhd19yZWFkX3VubG9jayhsb2NrKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKKwlfX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChfcmVhZF91bmxvY2tfaXJxcmVzdG9yZSk7CisjZW5kaWYKIAorI2lmbmRlZiBfcmVhZF91bmxvY2tfaXJxCiB2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfdW5sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKIHsKLQlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwotCV9yYXdfcmVhZF91bmxvY2sobG9jayk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCXByZWVtcHRfZW5hYmxlKCk7CisJX19yZWFkX3VubG9ja19pcnEobG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKF9yZWFkX3VubG9ja19pcnEpOworI2VuZGlmCiAKKyNpZm5kZWYgX3JlYWRfdW5sb2NrX2JoCiB2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfdW5sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQogewotCXJ3bG9ja19yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAxLCBfUkVUX0lQXyk7Ci0JX3Jhd19yZWFkX3VubG9jayhsb2NrKTsKLQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7Ci0JbG9jYWxfYmhfZW5hYmxlX2lwKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJX19yZWFkX3VubG9ja19iaChsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woX3JlYWRfdW5sb2NrX2JoKTsKKyNlbmRpZgogCisjaWZuZGVmIF93cml0ZV91bmxvY2tfaXJxcmVzdG9yZQogdm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2tfaXJxcmVzdG9yZShyd2xvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwotCV9yYXdfd3JpdGVfdW5sb2NrKGxvY2spOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlwcmVlbXB0X2VuYWJsZSgpOworCV9fd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUpOworI2VuZGlmCiAKKyNpZm5kZWYgX3dyaXRlX3VubG9ja19pcnEKIHZvaWQgX19sb2NrZnVuYyBfd3JpdGVfdW5sb2NrX2lycShyd2xvY2tfdCAqbG9jaykKIHsKLQlyd2xvY2tfcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1JFVF9JUF8pOwotCV9yYXdfd3JpdGVfdW5sb2NrKGxvY2spOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQlwcmVlbXB0X2VuYWJsZSgpOworCV9fd3JpdGVfdW5sb2NrX2lycShsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woX3dyaXRlX3VubG9ja19pcnEpOworI2VuZGlmCiAKKyNpZm5kZWYgX3dyaXRlX3VubG9ja19iaAogdm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2tfYmgocndsb2NrX3QgKmxvY2spCiB7Ci0Jcndsb2NrX3JlbGVhc2UoJmxvY2stPmRlcF9tYXAsIDEsIF9SRVRfSVBfKTsKLQlfcmF3X3dyaXRlX3VubG9jayhsb2NrKTsKLQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7Ci0JbG9jYWxfYmhfZW5hYmxlX2lwKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJX193cml0ZV91bmxvY2tfYmgobG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKF93cml0ZV91bmxvY2tfYmgpOworI2VuZGlmCiAKKyNpZm5kZWYgX3NwaW5fdHJ5bG9ja19iaAogaW50IF9fbG9ja2Z1bmMgX3NwaW5fdHJ5bG9ja19iaChzcGlubG9ja190ICpsb2NrKQogewotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAoX3Jhd19zcGluX3RyeWxvY2sobG9jaykpIHsKLQkJc3Bpbl9hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAxLCBfUkVUX0lQXyk7Ci0JCXJldHVybiAxOwotCX0KLQotCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKLQlsb2NhbF9iaF9lbmFibGVfaXAoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gX19zcGluX3RyeWxvY2tfYmgobG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKF9zcGluX3RyeWxvY2tfYmgpOworI2VuZGlmCiAKIG5vdHJhY2UgaW50IGluX2xvY2tfZnVuY3Rpb25zKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCA1OGJlNzYwLi4xYTYzMWJhIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xvdy13b3JrLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CiAKQEAgLTkyLDYgKzkxLDkgQEAKICNpZmRlZiBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVAogZXh0ZXJuIGludCByY3V0b3J0dXJlX3J1bm5hYmxlOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCAqLworI2lmZGVmIENPTkZJR19CTE9DSworZXh0ZXJuIGludCBibGtfaW9wb2xsX2VuYWJsZWQ7CisjZW5kaWYKIAogLyogQ29uc3RhbnRzIHVzZWQgZm9yIG1pbmltdW0gYW5kICBtYXhpbXVtICovCiAjaWZkZWYgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQCkBAIC0yNDYsNiArMjQ4LDE0IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGUga2Vybl90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJzY2hlZF9jaGlsZF9ydW5zX2ZpcnN0IiwKKwkJLmRhdGEJCT0gJnN5c2N0bF9zY2hlZF9jaGlsZF9ydW5zX2ZpcnN0LAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKICNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELApAQCAtMzAwLDE0ICszMTAsNiBAQAogCX0sCiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKLQkJLnByb2NuYW1lCT0gInNjaGVkX2NoaWxkX3J1bnNfZmlyc3QiLAotCQkuZGF0YQkJPSAmc3lzY3RsX3NjaGVkX2NoaWxkX3J1bnNfZmlyc3QsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKLQl9LAotCXsKLQkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJzY2hlZF9mZWF0dXJlcyIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfc2NoZWRfZmVhdHVyZXMsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC0zMzIsNiArMzM0LDE0IEBACiAJfSwKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAic2NoZWRfdGltZV9hdmciLAorCQkuZGF0YQkJPSAmc3lzY3RsX3NjaGVkX3RpbWVfYXZnLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAidGltZXJfbWlncmF0aW9uIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF90aW1lcl9taWdyYXRpb24sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC05OTAsNyArMTAwMCwxNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCiAJfSwKICNlbmRpZgotCisjaWZkZWYgQ09ORklHX0JMT0NLCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gImJsa19pb3BvbGwiLAorCQkuZGF0YQkJPSAmYmxrX2lvcG9sbF9lbmFibGVkLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKyNlbmRpZgogLyoKICAqIE5PVEU6IGRvIG5vdCBhZGQgbmV3IGVudHJpZXMgdG8gdGhpcyB0YWJsZSB1bmxlc3MgeW91IGhhdmUgcmVhZAogICogRG9jdW1lbnRhdGlvbi9zeXNjdGwvY3RsX3VubnVtYmVyZWQudHh0CmRpZmYgLS1naXQgYS9rZXJuZWwvdGFza3N0YXRzLmMgYi9rZXJuZWwvdGFza3N0YXRzLmMKaW5kZXggODg4YWRiYy4uZWE4Mzg0ZCAxMDA2NDQKLS0tIGEva2VybmVsL3Rhc2tzdGF0cy5jCisrKyBiL2tlcm5lbC90YXNrc3RhdHMuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAvKgogICogU2VuZCB0YXNrc3RhdHMgZGF0YSBpbiBAc2tiIHRvIGxpc3RlbmVyIHdpdGggbmxfcGlkIEBwaWQKICAqLwotc3RhdGljIGludCBzZW5kX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsIHBpZF90IHBpZCkKK3N0YXRpYyBpbnQgc2VuZF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBnZW5sbXNnaGRyICpnZW5saGRyID0gbmxtc2dfZGF0YShubG1zZ19oZHIoc2tiKSk7CiAJdm9pZCAqcmVwbHkgPSBnZW5sbXNnX2RhdGEoZ2VubGhkcik7CkBAIC0xMjAsNyArMTIwLDcgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCXJldHVybiBnZW5sbXNnX3VuaWNhc3Qoc2tiLCBwaWQpOworCXJldHVybiBnZW5sbXNnX3JlcGx5KHNrYiwgaW5mbyk7CiB9CiAKIC8qCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkJCWlmICghc2tiX25leHQpCiAJCQkJYnJlYWs7CiAJCX0KLQkJcmMgPSBnZW5sbXNnX3VuaWNhc3Qoc2tiX2N1ciwgcy0+cGlkKTsKKwkJcmMgPSBnZW5sbXNnX3VuaWNhc3QoJmluaXRfbmV0LCBza2JfY3VyLCBzLT5waWQpOwogCQlpZiAocmMgPT0gLUVDT05OUkVGVVNFRCkgewogCQkJcy0+dmFsaWQgPSAwOwogCQkJZGVsY291bnQrKzsKQEAgLTQxOCw3ICs0MTgsNyBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlyYyA9IHNlbmRfcmVwbHkocmVwX3NrYiwgaW5mby0+c25kX3BpZCk7CisJcmMgPSBzZW5kX3JlcGx5KHJlcF9za2IsIGluZm8pOwogCiBlcnI6CiAJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CkBAIC00ODcsNyArNDg3LDcgQEAKIAl9IGVsc2UKIAkJZ290byBlcnI7CiAKLQlyZXR1cm4gc2VuZF9yZXBseShyZXBfc2tiLCBpbmZvLT5zbmRfcGlkKTsKKwlyZXR1cm4gc2VuZF9yZXBseShyZXBfc2tiLCBpbmZvKTsKIGVycjoKIAlubG1zZ19mcmVlKHJlcF9za2IpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggYTdmMDdkNS4uYTNkMjVmNDE1IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtMTE1Niw4ICsxMTU2LDcgQEAKIAkvKiBOb3RlOiB0aGlzIHRpbWVyIGlycSBjb250ZXh0IG11c3QgYmUgYWNjb3VudGVkIGZvciBhcyB3ZWxsLiAqLwogCWFjY291bnRfcHJvY2Vzc190aWNrKHAsIHVzZXJfdGljayk7CiAJcnVuX2xvY2FsX3RpbWVycygpOwotCWlmIChyY3VfcGVuZGluZyhjcHUpKQotCQlyY3VfY2hlY2tfY2FsbGJhY2tzKGNwdSwgdXNlcl90aWNrKTsKKwlyY3VfY2hlY2tfY2FsbGJhY2tzKGNwdSwgdXNlcl90aWNrKTsKIAlwcmludGtfdGljaygpOwogCXNjaGVkdWxlcl90aWNrKCk7CiAJcnVuX3Bvc2l4X2NwdV90aW1lcnMocCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvS2NvbmZpZyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCmluZGV4IDAxOWYzODAuLjFlYTBkMTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9LY29uZmlnCisrKyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCkBAIC00MSw3ICs0MSw3IEBACiBjb25maWcgSEFWRV9IV19CUkFOQ0hfVFJBQ0VSCiAJYm9vbAogCi1jb25maWcgSEFWRV9GVFJBQ0VfU1lTQ0FMTFMKK2NvbmZpZyBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIAlib29sCiAKIGNvbmZpZyBUUkFDRVJfTUFYX1RSQUNFCkBAIC02MCw5ICs2MCwxNCBAQAogCWJvb2wKIAogY29uZmlnIENPTlRFWFRfU1dJVENIX1RSQUNFUgotCXNlbGVjdCBNQVJLRVJTCiAJYm9vbAogCitjb25maWcgUklOR19CVUZGRVJfQUxMT1dfU1dBUAorCWJvb2wKKwloZWxwCisJIEFsbG93IHRoZSB1c2Ugb2YgcmluZ19idWZmZXJfc3dhcF9jcHUuCisJIEFkZHMgYSB2ZXJ5IHNsaWdodCBvdmVyaGVhZCB0byB0cmFjaW5nIHdoZW4gZW5hYmxlZC4KKwogIyBBbGwgdHJhY2VyIG9wdGlvbnMgc2hvdWxkIHNlbGVjdCBHRU5FUklDX1RSQUNFUi4gRm9yIHRob3NlIG9wdGlvbnMgdGhhdCBhcmUKICMgZW5hYmxlZCBieSBhbGwgdHJhY2VycyAoY29udGV4dCBzd2l0Y2ggYW5kIGV2ZW50IHRyYWNlcikgdGhleSBzZWxlY3QgVFJBQ0lORy4KICMgVGhpcyBhbGxvd3MgdGhvc2Ugb3B0aW9ucyB0byBhcHBlYXIgd2hlbiBubyBvdGhlciB0cmFjZXIgaXMgc2VsZWN0ZWQuIEJ1dCB0aGUKQEAgLTE0Nyw2ICsxNTIsNyBAQAogCXNlbGVjdCBUUkFDRV9JUlFGTEFHUwogCXNlbGVjdCBHRU5FUklDX1RSQUNFUgogCXNlbGVjdCBUUkFDRVJfTUFYX1RSQUNFCisJc2VsZWN0IFJJTkdfQlVGRkVSX0FMTE9XX1NXQVAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBtZWFzdXJlcyB0aGUgdGltZSBzcGVudCBpbiBpcnFzLW9mZiBjcml0aWNhbAogCSAgc2VjdGlvbnMsIHdpdGggbWljcm9zZWNvbmQgYWNjdXJhY3kuCkBAIC0xNjgsNiArMTc0LDcgQEAKIAlkZXBlbmRzIG9uIFBSRUVNUFQKIAlzZWxlY3QgR0VORVJJQ19UUkFDRVIKIAlzZWxlY3QgVFJBQ0VSX01BWF9UUkFDRQorCXNlbGVjdCBSSU5HX0JVRkZFUl9BTExPV19TV0FQCiAJaGVscAogCSAgVGhpcyBvcHRpb24gbWVhc3VyZXMgdGhlIHRpbWUgc3BlbnQgaW4gcHJlZW1wdGlvbiBvZmYgY3JpdGljYWwKIAkgIHNlY3Rpb25zLCB3aXRoIG1pY3Jvc2Vjb25kIGFjY3VyYWN5LgpAQCAtMjExLDcgKzIxOCw3IEBACiAKIGNvbmZpZyBGVFJBQ0VfU1lTQ0FMTFMKIAlib29sICJUcmFjZSBzeXNjYWxscyIKLQlkZXBlbmRzIG9uIEhBVkVfRlRSQUNFX1NZU0NBTExTCisJZGVwZW5kcyBvbiBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIAlzZWxlY3QgR0VORVJJQ19UUkFDRVIKIAlzZWxlY3QgS0FMTFNZTVMKIAloZWxwCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCmluZGV4IDdhMzRjYjUuLjNlYjE1OWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC02NSwxMyArNjUsMTUgQEAKIHsKIAlzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0OwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQgPSBOVUxMOworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyID0gTlVMTDsKIAlpbnQgcGMgPSAwOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJYm9vbCBibGtfdHJhY2VyID0gYmxrX3RyYWNlcl9lbmFibGVkOwogCiAJaWYgKGJsa190cmFjZXIpIHsKKwkJYnVmZmVyID0gYmxrX3RyLT5idWZmZXI7CiAJCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYmxrX3RyLCBUUkFDRV9CTEssCisJCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSywKIAkJCQkJCSAgc2l6ZW9mKCp0KSArIGxlbiwKIAkJCQkJCSAgMCwgcGMpOwogCQlpZiAoIWV2ZW50KQpAQCAtOTYsNyArOTgsNyBAQAogCQltZW1jcHkoKHZvaWQgKikgdCArIHNpemVvZigqdCksIGRhdGEsIGxlbik7CiAKIAkJaWYgKGJsa190cmFjZXIpCi0JCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGV2ZW50LCAwLCBwYyk7CisJCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCAwLCBwYyk7CiAJfQogfQogCkBAIC0xNzksNiArMTgxLDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCA9IE5VTEw7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIgPSBOVUxMOwogCXN0cnVjdCBibGtfaW9fdHJhY2UgKnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJdW5zaWduZWQgbG9uZyAqc2VxdWVuY2U7CkBAIC0yMDQsOCArMjA3LDkgQEAKIAlpZiAoYmxrX3RyYWNlcikgewogCQl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpOwogCisJCWJ1ZmZlciA9IGJsa190ci0+YnVmZmVyOwogCQlwYyA9IHByZWVtcHRfY291bnQoKTsKLQkJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJsa190ciwgVFJBQ0VfQkxLLAorCQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9CTEssCiAJCQkJCQkgIHNpemVvZigqdCkgKyBwZHVfbGVuLAogCQkJCQkJICAwLCBwYyk7CiAJCWlmICghZXZlbnQpCkBAIC0yNTIsNyArMjU2LDcgQEAKIAkJCW1lbWNweSgodm9pZCAqKSB0ICsgc2l6ZW9mKCp0KSwgcGR1X2RhdGEsIHBkdV9sZW4pOwogCiAJCWlmIChibGtfdHJhY2VyKSB7Ci0JCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGV2ZW50LCAwLCBwYyk7CisJCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCAwLCBwYyk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggMjVlZGQ1Yy4uOGM4MDRlMiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtMTAxNiw3MSArMTAxNiwzNSBAQAogX19mdHJhY2VfcmVwbGFjZV9jb2RlKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIGludCBlbmFibGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmdHJhY2VfYWRkcjsKLQl1bnNpZ25lZCBsb25nIGlwLCBmbDsKKwl1bnNpZ25lZCBsb25nIGZsYWcgPSAwVUw7CiAKIAlmdHJhY2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKUZUUkFDRV9BRERSOwogCi0JaXAgPSByZWMtPmlwOwotCiAJLyoKLQkgKiBJZiB0aGlzIHJlY29yZCBpcyBub3QgdG8gYmUgdHJhY2VkIGFuZAotCSAqIGl0IGlzIG5vdCBlbmFibGVkIHRoZW4gZG8gbm90aGluZy4KKwkgKiBJZiB0aGlzIHJlY29yZCBpcyBub3QgdG8gYmUgdHJhY2VkIG9yIHdlIHdhbnQgdG8gZGlzYWJsZSBpdCwKKwkgKiB0aGVuIGRpc2FibGUgaXQuCiAJICoKLQkgKiBJZiB0aGlzIHJlY29yZCBpcyBub3QgdG8gYmUgdHJhY2VkIGFuZAotCSAqIGl0IGlzIGVuYWJsZWQgdGhlbiBkaXNhYmxlIGl0LgorCSAqIElmIHdlIHdhbnQgdG8gZW5hYmxlIGl0IGFuZCBmaWx0ZXJpbmcgaXMgb2ZmLCB0aGVuIGVuYWJsZSBpdC4KIAkgKgorCSAqIElmIHdlIHdhbnQgdG8gZW5hYmxlIGl0IGFuZCBmaWx0ZXJpbmcgaXMgb24sIGVuYWJsZSBpdCBvbmx5IGlmCisJICogaXQncyBmaWx0ZXJlZAogCSAqLwotCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX05PVFJBQ0UpIHsKLQkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRU5BQkxFRCkKLQkJCXJlYy0+ZmxhZ3MgJj0gfkZUUkFDRV9GTF9FTkFCTEVEOwotCQllbHNlCi0JCQlyZXR1cm4gMDsKLQotCX0gZWxzZSBpZiAoZnRyYWNlX2ZpbHRlcmVkICYmIGVuYWJsZSkgewotCQkvKgotCQkgKiBGaWx0ZXJpbmcgaXMgb246Ci0JCSAqLwotCi0JCWZsID0gcmVjLT5mbGFncyAmIChGVFJBQ0VfRkxfRklMVEVSIHwgRlRSQUNFX0ZMX0VOQUJMRUQpOwotCi0JCS8qIFJlY29yZCBpcyBmaWx0ZXJlZCBhbmQgZW5hYmxlZCwgZG8gbm90aGluZyAqLwotCQlpZiAoZmwgPT0gKEZUUkFDRV9GTF9GSUxURVIgfCBGVFJBQ0VfRkxfRU5BQkxFRCkpCi0JCQlyZXR1cm4gMDsKLQotCQkvKiBSZWNvcmQgaXMgbm90IGZpbHRlcmVkIG9yIGVuYWJsZWQsIGRvIG5vdGhpbmcgKi8KLQkJaWYgKCFmbCkKLQkJCXJldHVybiAwOwotCi0JCS8qIFJlY29yZCBpcyBub3QgZmlsdGVyZWQgYnV0IGVuYWJsZWQsIGRpc2FibGUgaXQgKi8KLQkJaWYgKGZsID09IEZUUkFDRV9GTF9FTkFCTEVEKQotCQkJcmVjLT5mbGFncyAmPSB+RlRSQUNFX0ZMX0VOQUJMRUQ7Ci0JCWVsc2UKLQkJLyogT3RoZXJ3aXNlIHJlY29yZCBpcyBmaWx0ZXJlZCBidXQgbm90IGVuYWJsZWQsIGVuYWJsZSBpdCAqLwotCQkJcmVjLT5mbGFncyB8PSBGVFJBQ0VfRkxfRU5BQkxFRDsKLQl9IGVsc2UgewotCQkvKiBEaXNhYmxlIG9yIG5vdCBmaWx0ZXJlZCAqLwotCi0JCWlmIChlbmFibGUpIHsKLQkJCS8qIGlmIHJlY29yZCBpcyBlbmFibGVkLCBkbyBub3RoaW5nICovCi0JCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9FTkFCTEVEKQotCQkJCXJldHVybiAwOwotCi0JCQlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9FTkFCTEVEOwotCi0JCX0gZWxzZSB7Ci0KLQkJCS8qIGlmIHJlY29yZCBpcyBub3QgZW5hYmxlZCwgZG8gbm90aGluZyAqLwotCQkJaWYgKCEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9FTkFCTEVEKSkKLQkJCQlyZXR1cm4gMDsKLQotCQkJcmVjLT5mbGFncyAmPSB+RlRSQUNFX0ZMX0VOQUJMRUQ7Ci0JCX0KKwlpZiAoZW5hYmxlICYmICEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9OT1RSQUNFKSkgeworCQlpZiAoIWZ0cmFjZV9maWx0ZXJlZCB8fCAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GSUxURVIpKQorCQkJZmxhZyA9IEZUUkFDRV9GTF9FTkFCTEVEOwogCX0KIAotCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0VOQUJMRUQpCisJLyogSWYgdGhlIHN0YXRlIG9mIHRoaXMgcmVjb3JkIGhhc24ndCBjaGFuZ2VkLCB0aGVuIGRvIG5vdGhpbmcgKi8KKwlpZiAoKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRU5BQkxFRCkgPT0gZmxhZykKKwkJcmV0dXJuIDA7CisKKwlpZiAoZmxhZykgeworCQlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9FTkFCTEVEOwogCQlyZXR1cm4gZnRyYWNlX21ha2VfY2FsbChyZWMsIGZ0cmFjZV9hZGRyKTsKLQllbHNlCi0JCXJldHVybiBmdHJhY2VfbWFrZV9ub3AoTlVMTCwgcmVjLCBmdHJhY2VfYWRkcik7CisJfQorCisJcmVjLT5mbGFncyAmPSB+RlRSQUNFX0ZMX0VOQUJMRUQ7CisJcmV0dXJuIGZ0cmFjZV9tYWtlX25vcChOVUxMLCByZWMsIGZ0cmFjZV9hZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgZnRyYWNlX3JlcGxhY2VfY29kZShpbnQgZW5hYmxlKQpAQCAtMTM3NSw3ICsxMzM5LDYgQEAKIAl1bnNpZ25lZAkJZmxhZ3M7CiAJdW5zaWduZWQgY2hhcgkJYnVmZmVyW0ZUUkFDRV9CVUZGX01BWCsxXTsKIAl1bnNpZ25lZAkJYnVmZmVyX2lkeDsKLQl1bnNpZ25lZAkJZmlsdGVyZWQ7CiB9OwogCiBzdGF0aWMgdm9pZCAqCkBAIC0xNDM4LDE4ICsxNDAxLDEzIEBACiB7CiAJc3RydWN0IGZ0cmFjZV9mdW5jX3Byb2JlICpyZWM7CiAJc3RydWN0IGhsaXN0X25vZGUgKmhuZCA9IHY7Ci0JY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKIAogCXJlYyA9IGhsaXN0X2VudHJ5KGhuZCwgc3RydWN0IGZ0cmFjZV9mdW5jX3Byb2JlLCBub2RlKTsKIAogCWlmIChyZWMtPm9wcy0+cHJpbnQpCiAJCXJldHVybiByZWMtPm9wcy0+cHJpbnQobSwgcmVjLT5pcCwgcmVjLT5vcHMsIHJlYy0+ZGF0YSk7CiAKLQlrYWxsc3ltc19sb29rdXAocmVjLT5pcCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKLQlzZXFfcHJpbnRmKG0sICIlczoiLCBzdHIpOwotCi0Ja2FsbHN5bXNfbG9va3VwKCh1bnNpZ25lZCBsb25nKXJlYy0+b3BzLT5mdW5jLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOwotCXNlcV9wcmludGYobSwgIiVzIiwgc3RyKTsKKwlzZXFfcHJpbnRmKG0sICIlcGY6JXBmIiwgKHZvaWQgKilyZWMtPmlwLCAodm9pZCAqKXJlYy0+b3BzLT5mdW5jKTsKIAogCWlmIChyZWMtPmRhdGEpCiAJCXNlcV9wcmludGYobSwgIjolcCIsIHJlYy0+ZGF0YSk7CkBAIC0xNTQ3LDcgKzE1MDUsNiBAQAogewogCXN0cnVjdCBmdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBtLT5wcml2YXRlOwogCXN0cnVjdCBkeW5fZnRyYWNlICpyZWMgPSB2OwotCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CiAKIAlpZiAoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9IQVNIKQogCQlyZXR1cm4gdF9oYXNoX3Nob3cobSwgdik7CkBAIC0xNTYwLDkgKzE1MTcsNyBAQAogCWlmICghcmVjKQogCQlyZXR1cm4gMDsKIAotCWthbGxzeW1zX2xvb2t1cChyZWMtPmlwLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOwotCi0Jc2VxX3ByaW50ZihtLCAiJXNcbiIsIHN0cik7CisJc2VxX3ByaW50ZihtLCAiJXBmXG4iLCAodm9pZCAqKXJlYy0+aXApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjAxLDE3ICsxNTU2LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgZnRyYWNlX2F2YWlsX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZnRyYWNlX2l0ZXJhdG9yICppdGVyID0gbS0+cHJpdmF0ZTsKLQotCXNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKLQlrZnJlZShpdGVyKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50CiBmdHJhY2VfZmFpbHVyZXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTIzMTcsNyArMjI2MSw2IEBACiAJfQogCiAJaWYgKGlzc3BhY2UoY2gpKSB7Ci0JCWl0ZXItPmZpbHRlcmVkKys7CiAJCWl0ZXItPmJ1ZmZlcltpdGVyLT5idWZmZXJfaWR4XSA9IDA7CiAJCXJldCA9IGZ0cmFjZV9wcm9jZXNzX3JlZ2V4KGl0ZXItPmJ1ZmZlciwKIAkJCQkJICAgaXRlci0+YnVmZmVyX2lkeCwgZW5hYmxlKTsKQEAgLTI0NDgsNyArMjM5MSw2IEBACiAJCWl0ZXIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoaXRlci0+YnVmZmVyX2lkeCkgewotCQlpdGVyLT5maWx0ZXJlZCsrOwogCQlpdGVyLT5idWZmZXJbaXRlci0+YnVmZmVyX2lkeF0gPSAwOwogCQlmdHJhY2VfbWF0Y2hfcmVjb3JkcyhpdGVyLT5idWZmZXIsIGl0ZXItPmJ1ZmZlcl9pZHgsIGVuYWJsZSk7CiAJfQpAQCAtMjQ3OSwxNCArMjQyMSwxNCBAQAogCS5vcGVuID0gZnRyYWNlX2F2YWlsX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gZnRyYWNlX2F2YWlsX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2ZhaWx1cmVzX2ZvcHMgPSB7CiAJLm9wZW4gPSBmdHJhY2VfZmFpbHVyZXNfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBmdHJhY2VfYXZhaWxfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfZmlsdGVyX2ZvcHMgPSB7CkBAIC0yNTQ4LDcgKzI0OTAsNiBAQAogc3RhdGljIGludCBnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXVuc2lnbmVkIGxvbmcgKnB0ciA9IHY7Ci0JY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKIAogCWlmICghcHRyKQogCQlyZXR1cm4gMDsKQEAgLTI1NTgsOSArMjQ5OSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWthbGxzeW1zX2xvb2t1cCgqcHRyLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOwotCi0Jc2VxX3ByaW50ZihtLCAiJXNcbiIsIHN0cik7CisJc2VxX3ByaW50ZihtLCAiJXBmXG4iLCB2KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jIGIva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jCmluZGV4IDFlZGFhOTUuLjgxYjE2NDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9rbWVtdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMKQEAgLTE4MywxMSArMTgzLDkgQEAKIAogc3RhdGljIGludCBrbWVtX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQlpbnQgY3B1OwogCWttZW10cmFjZV9hcnJheSA9IHRyOwogCi0JZm9yX2VhY2hfY3B1KGNwdSwgY3B1X3Bvc3NpYmxlX21hc2spCi0JCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CisJdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7CiAKIAlrbWVtdHJhY2Vfc3RhcnRfcHJvYmVzKCk7CiAKQEAgLTIzOSwxMiArMjM3LDUyIEBACiB9OwogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QKLWttZW10cmFjZV9wcmludF9hbGxvY191c2VyKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKLQkJCSAgIHN0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnkgKmVudHJ5KQora21lbXRyYWNlX3ByaW50X2FsbG9jKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQogewotCXN0cnVjdCBrbWVtdHJhY2VfdXNlcl9ldmVudF9hbGxvYyAqZXZfYWxsb2M7CiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IGttZW10cmFjZV9hbGxvY19lbnRyeSAqZW50cnk7CisJaW50IHJldDsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGVudHJ5LCBpdGVyLT5lbnQpOworCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAidHlwZV9pZCAlZCBjYWxsX3NpdGUgJXBGIHB0ciAlbHUgIgorCSAgICAiYnl0ZXNfcmVxICVsdSBieXRlc19hbGxvYyAlbHUgZ2ZwX2ZsYWdzICVsdSBub2RlICVkXG4iLAorCSAgICBlbnRyeS0+dHlwZV9pZCwgKHZvaWQgKillbnRyeS0+Y2FsbF9zaXRlLCAodW5zaWduZWQgbG9uZyllbnRyeS0+cHRyLAorCSAgICAodW5zaWduZWQgbG9uZyllbnRyeS0+Ynl0ZXNfcmVxLCAodW5zaWduZWQgbG9uZyllbnRyeS0+Ynl0ZXNfYWxsb2MsCisJICAgICh1bnNpZ25lZCBsb25nKWVudHJ5LT5nZnBfZmxhZ3MsIGVudHJ5LT5ub2RlKTsKKworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90CitrbWVtdHJhY2VfcHJpbnRfZnJlZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlzdHJ1Y3Qga21lbXRyYWNlX2ZyZWVfZW50cnkgKmVudHJ5OworCWludCByZXQ7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShlbnRyeSwgaXRlci0+ZW50KTsKKworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgInR5cGVfaWQgJWQgY2FsbF9zaXRlICVwRiBwdHIgJWx1XG4iLAorCQkJICAgICAgIGVudHJ5LT50eXBlX2lkLCAodm9pZCAqKWVudHJ5LT5jYWxsX3NpdGUsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPnB0cik7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdAora21lbXRyYWNlX3ByaW50X2FsbG9jX3VzZXIoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IGttZW10cmFjZV9hbGxvY19lbnRyeSAqZW50cnk7CiAJc3RydWN0IGttZW10cmFjZV91c2VyX2V2ZW50ICpldjsKKwlzdHJ1Y3Qga21lbXRyYWNlX3VzZXJfZXZlbnRfYWxsb2MgKmV2X2FsbG9jOworCisJdHJhY2VfYXNzaWduX3R5cGUoZW50cnksIGl0ZXItPmVudCk7CiAKIAlldiA9IHRyYWNlX3NlcV9yZXNlcnZlKHMsIHNpemVvZigqZXYpKTsKIAlpZiAoIWV2KQpAQCAtMjcxLDEyICszMDksMTQgQEAKIH0KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90Ci1rbWVtdHJhY2VfcHJpbnRfZnJlZV91c2VyKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKLQkJCSAgc3RydWN0IGttZW10cmFjZV9mcmVlX2VudHJ5ICplbnRyeSkKK2ttZW10cmFjZV9wcmludF9mcmVlX3VzZXIoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IGttZW10cmFjZV9mcmVlX2VudHJ5ICplbnRyeTsKIAlzdHJ1Y3Qga21lbXRyYWNlX3VzZXJfZXZlbnQgKmV2OwogCisJdHJhY2VfYXNzaWduX3R5cGUoZW50cnksIGl0ZXItPmVudCk7CisKIAlldiA9IHRyYWNlX3NlcV9yZXNlcnZlKHMsIHNpemVvZigqZXYpKTsKIAlpZiAoIWV2KQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CkBAIC0yOTQsMTIgKzMzNCwxNCBAQAogCiAvKiBUaGUgdHdvIG90aGVyIGZvbGxvd2luZyBwcm92aWRlIGEgbW9yZSBtaW5pbWFsaXN0aWMgb3V0cHV0ICovCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QKLWttZW10cmFjZV9wcmludF9hbGxvY19jb21wcmVzcyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCi0JCQkJCXN0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnkgKmVudHJ5KQora21lbXRyYWNlX3ByaW50X2FsbG9jX2NvbXByZXNzKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKIHsKKwlzdHJ1Y3Qga21lbXRyYWNlX2FsbG9jX2VudHJ5ICplbnRyeTsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAlpbnQgcmV0OwogCisJdHJhY2VfYXNzaWduX3R5cGUoZW50cnksIGl0ZXItPmVudCk7CisKIAkvKiBBbGxvYyBlbnRyeSAqLwogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgKyAgICAgICIpOwogCWlmICghcmV0KQpAQCAtMzQ1LDI5ICszODcsMjQgQEAKIAlpZiAoIXJldCkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCi0JLyogTm9kZSAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiU0ZCAgICIsIGVudHJ5LT5ub2RlKTsKKwkvKiBOb2RlIGFuZCBjYWxsIHNpdGUqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiU0ZCAgICVwZlxuIiwgZW50cnktPm5vZGUsCisJCQkJCQkgKHZvaWQgKillbnRyeS0+Y2FsbF9zaXRlKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCi0JLyogQ2FsbCBzaXRlICovCi0JcmV0ID0gc2VxX3ByaW50X2lwX3N5bShzLCBlbnRyeS0+Y2FsbF9zaXRlLCAwKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICJcbiIpKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KIAlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QKLWttZW10cmFjZV9wcmludF9mcmVlX2NvbXByZXNzKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKLQkJCSAgICAgIHN0cnVjdCBrbWVtdHJhY2VfZnJlZV9lbnRyeSAqZW50cnkpCitrbWVtdHJhY2VfcHJpbnRfZnJlZV9jb21wcmVzcyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7CisJc3RydWN0IGttZW10cmFjZV9mcmVlX2VudHJ5ICplbnRyeTsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAlpbnQgcmV0OwogCisJdHJhY2VfYXNzaWduX3R5cGUoZW50cnksIGl0ZXItPmVudCk7CisKIAkvKiBGcmVlIGVudHJ5ICovCiAJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAtICAgICAgIik7CiAJaWYgKCFyZXQpCkBAIC00MDEsMTkgKzQzOCwxMSBAQAogCWlmICghcmV0KQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKLQkvKiBTa2lwIG5vZGUgKi8KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgICAgICAgIik7CisJLyogU2tpcCBub2RlIGFuZCBwcmludCBjYWxsIHNpdGUqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgICAgICAlcGZcbiIsICh2b2lkICopZW50cnktPmNhbGxfc2l0ZSk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAotCS8qIENhbGwgc2l0ZSAqLwotCXJldCA9IHNlcV9wcmludF9pcF9zeW0ocywgZW50cnktPmNhbGxfc2l0ZSwgMCk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG4iKSkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCiAJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKIH0KIApAQCAtNDIxLDMyICs0NTAsMzEgQEAKIHsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OwogCisJaWYgKCEoa21lbV90cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfS01FTV9PUFRfTUlOSU1BTCkpCisJCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKKwogCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIFRSQUNFX0tNRU1fQUxMT0M6IHsKLQkJc3RydWN0IGttZW10cmFjZV9hbGxvY19lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQkJaWYgKGttZW1fdHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0tNRU1fT1BUX01JTklNQUwpCi0JCQlyZXR1cm4ga21lbXRyYWNlX3ByaW50X2FsbG9jX2NvbXByZXNzKGl0ZXIsIGZpZWxkKTsKLQkJZWxzZQotCQkJcmV0dXJuIGttZW10cmFjZV9wcmludF9hbGxvY191c2VyKGl0ZXIsIGZpZWxkKTsKLQl9Ci0KLQljYXNlIFRSQUNFX0tNRU1fRlJFRTogewotCQlzdHJ1Y3Qga21lbXRyYWNlX2ZyZWVfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0JCWlmIChrbWVtX3RyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9LTUVNX09QVF9NSU5JTUFMKQotCQkJcmV0dXJuIGttZW10cmFjZV9wcmludF9mcmVlX2NvbXByZXNzKGl0ZXIsIGZpZWxkKTsKLQkJZWxzZQotCQkJcmV0dXJuIGttZW10cmFjZV9wcmludF9mcmVlX3VzZXIoaXRlciwgZmllbGQpOwotCX0KLQorCWNhc2UgVFJBQ0VfS01FTV9BTExPQzoKKwkJcmV0dXJuIGttZW10cmFjZV9wcmludF9hbGxvY19jb21wcmVzcyhpdGVyKTsKKwljYXNlIFRSQUNFX0tNRU1fRlJFRToKKwkJcmV0dXJuIGttZW10cmFjZV9wcmludF9mcmVlX2NvbXByZXNzKGl0ZXIpOwogCWRlZmF1bHQ6CiAJCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKIAl9CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQga21lbV90cmFjZV9hbGxvYyA9IHsKKwkudHlwZQkJCT0gVFJBQ0VfS01FTV9BTExPQywKKwkudHJhY2UJCQk9IGttZW10cmFjZV9wcmludF9hbGxvYywKKwkuYmluYXJ5CQkJPSBrbWVtdHJhY2VfcHJpbnRfYWxsb2NfdXNlciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQga21lbV90cmFjZV9mcmVlID0geworCS50eXBlCQkJPSBUUkFDRV9LTUVNX0ZSRUUsCisJLnRyYWNlCQkJPSBrbWVtdHJhY2VfcHJpbnRfZnJlZSwKKwkuYmluYXJ5CQkJPSBrbWVtdHJhY2VfcHJpbnRfZnJlZV91c2VyLAorfTsKKwogc3RhdGljIHN0cnVjdCB0cmFjZXIga21lbV90cmFjZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJCT0gImttZW10cmFjZSIsCiAJLmluaXQJCQk9IGttZW1fdHJhY2VfaW5pdCwKQEAgLTQ2Myw2ICs0OTEsMjEgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9rbWVtX3RyYWNlcih2b2lkKQogewotCXJldHVybiByZWdpc3Rlcl90cmFjZXIoJmttZW1fdHJhY2VyKTsKKwlpZiAoIXJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgma21lbV90cmFjZV9hbGxvYykpIHsKKwkJcHJfd2FybmluZygiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyIGttZW0gZXZlbnRzXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKCFyZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJmttZW1fdHJhY2VfZnJlZSkpIHsKKwkJcHJfd2FybmluZygiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyIGttZW0gZXZlbnRzXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKCFyZWdpc3Rlcl90cmFjZXIoJmttZW1fdHJhY2VyKSkgeworCQlwcl93YXJuaW5nKCJXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgdGhlIGttZW0gdHJhY2VyXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7CiB9CiBkZXZpY2VfaW5pdGNhbGwoaW5pdF9rbWVtX3RyYWNlcik7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IGEzMzA1MTMuLjQ1NGU3NGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC0yMTgsMTcgKzIxOCwxMiBAQAogCiBzdGF0aWMgaW5saW5lIGludCByYl9udWxsX2V2ZW50KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCiB7Ci0JcmV0dXJuIGV2ZW50LT50eXBlX2xlbiA9PSBSSU5HQlVGX1RZUEVfUEFERElORwotCQkJJiYgZXZlbnQtPnRpbWVfZGVsdGEgPT0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcmJfZGlzY2FyZGVkX2V2ZW50KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCi17Ci0JcmV0dXJuIGV2ZW50LT50eXBlX2xlbiA9PSBSSU5HQlVGX1RZUEVfUEFERElORyAmJiBldmVudC0+dGltZV9kZWx0YTsKKwlyZXR1cm4gZXZlbnQtPnR5cGVfbGVuID09IFJJTkdCVUZfVFlQRV9QQURESU5HICYmICFldmVudC0+dGltZV9kZWx0YTsKIH0KIAogc3RhdGljIHZvaWQgcmJfZXZlbnRfc2V0X3BhZGRpbmcoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKIHsKKwkvKiBwYWRkaW5nIGhhcyBhIE5VTEwgdGltZV9kZWx0YSAqLwogCWV2ZW50LT50eXBlX2xlbiA9IFJJTkdCVUZfVFlQRV9QQURESU5HOwogCWV2ZW50LT50aW1lX2RlbHRhID0gMDsKIH0KQEAgLTMyMiw2ICszMTcsMTQgQEAKIAl1bnNpZ25lZCBjaGFyCSBkYXRhW107CS8qIGRhdGEgb2YgYnVmZmVyIHBhZ2UgKi8KIH07CiAKKy8qCisgKiBOb3RlLCB0aGUgYnVmZmVyX3BhZ2UgbGlzdCBtdXN0IGJlIGZpcnN0LiBUaGUgYnVmZmVyIHBhZ2VzCisgKiBhcmUgYWxsb2NhdGVkIGluIGNhY2hlIGxpbmVzLCB3aGljaCBtZWFucyB0aGF0IGVhY2ggYnVmZmVyCisgKiBwYWdlIHdpbGwgYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGNhY2hlIGxpbmUsIGFuZCB0aHVzCisgKiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyB3aWxsIGJlIHplcm8uIFdlIHVzZSB0aGlzIHRvCisgKiBhZGQgZmxhZ3MgaW4gdGhlIGxpc3Qgc3RydWN0IHBvaW50ZXJzLCB0byBtYWtlIHRoZSByaW5nIGJ1ZmZlcgorICogbG9ja2xlc3MuCisgKi8KIHN0cnVjdCBidWZmZXJfcGFnZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkJLyogbGlzdCBvZiBidWZmZXIgcGFnZXMgKi8KIAlsb2NhbF90CQkgd3JpdGU7CQkvKiBpbmRleCBmb3IgbmV4dCB3cml0ZSAqLwpAQCAtMzMwLDYgKzMzMywyMSBAQAogCXN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpwYWdlOwkvKiBBY3R1YWwgZGF0YSBwYWdlICovCiB9OwogCisvKgorICogVGhlIGJ1ZmZlciBwYWdlIGNvdW50ZXJzLCB3cml0ZSBhbmQgZW50cmllcywgbXVzdCBiZSByZXNldAorICogYXRvbWljYWxseSB3aGVuIGNyb3NzaW5nIHBhZ2UgYm91bmRhcmllcy4gVG8gc3luY2hyb25pemUgdGhpcworICogdXBkYXRlLCB0d28gY291bnRlcnMgYXJlIGluc2VydGVkIGludG8gdGhlIG51bWJlci4gT25lIGlzCisgKiB0aGUgYWN0dWFsIGNvdW50ZXIgZm9yIHRoZSB3cml0ZSBwb3NpdGlvbiBvciBjb3VudCBvbiB0aGUgcGFnZS4KKyAqCisgKiBUaGUgb3RoZXIgaXMgYSBjb3VudGVyIG9mIHVwZGF0ZXJzLiBCZWZvcmUgYW4gdXBkYXRlIGhhcHBlbnMKKyAqIHRoZSB1cGRhdGUgcGFydGl0aW9uIG9mIHRoZSBjb3VudGVyIGlzIGluY3JlbWVudGVkLiBUaGlzIHdpbGwKKyAqIGFsbG93IHRoZSB1cGRhdGVyIHRvIHVwZGF0ZSB0aGUgY291bnRlciBhdG9taWNhbGx5LgorICoKKyAqIFRoZSBjb3VudGVyIGlzIDIwIGJpdHMsIGFuZCB0aGUgc3RhdGUgZGF0YSBpcyAxMi4KKyAqLworI2RlZmluZSBSQl9XUklURV9NQVNLCQkweGZmZmZmCisjZGVmaW5lIFJCX1dSSVRFX0lOVENOVAkJKDEgPDwgMjApCisKIHN0YXRpYyB2b2lkIHJiX2luaXRfcGFnZShzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSAqYnBhZ2UpCiB7CiAJbG9jYWxfc2V0KCZicGFnZS0+Y29tbWl0LCAwKTsKQEAgLTQwMywyMSArNDIxLDIwIEBACiBzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSB7CiAJaW50CQkJCWNwdTsKIAlzdHJ1Y3QgcmluZ19idWZmZXIJCSpidWZmZXI7Ci0Jc3BpbmxvY2tfdAkJCXJlYWRlcl9sb2NrOyAvKiBzZXJpYWxpemUgcmVhZGVycyAqLworCXNwaW5sb2NrX3QJCQlyZWFkZXJfbG9jazsJLyogc2VyaWFsaXplIHJlYWRlcnMgKi8KIAlyYXdfc3BpbmxvY2tfdAkJCWxvY2s7CiAJc3RydWN0IGxvY2tfY2xhc3Nfa2V5CQlsb2NrX2tleTsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlwYWdlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQkqcGFnZXM7CiAJc3RydWN0IGJ1ZmZlcl9wYWdlCQkqaGVhZF9wYWdlOwkvKiByZWFkIGZyb20gaGVhZCAqLwogCXN0cnVjdCBidWZmZXJfcGFnZQkJKnRhaWxfcGFnZTsJLyogd3JpdGUgdG8gdGFpbCAqLwogCXN0cnVjdCBidWZmZXJfcGFnZQkJKmNvbW1pdF9wYWdlOwkvKiBjb21taXR0ZWQgcGFnZXMgKi8KIAlzdHJ1Y3QgYnVmZmVyX3BhZ2UJCSpyZWFkZXJfcGFnZTsKLQl1bnNpZ25lZCBsb25nCQkJbm1pX2Ryb3BwZWQ7Ci0JdW5zaWduZWQgbG9uZwkJCWNvbW1pdF9vdmVycnVuOwotCXVuc2lnbmVkIGxvbmcJCQlvdmVycnVuOwotCXVuc2lnbmVkIGxvbmcJCQlyZWFkOworCWxvY2FsX3QJCQkJY29tbWl0X292ZXJydW47CisJbG9jYWxfdAkJCQlvdmVycnVuOwogCWxvY2FsX3QJCQkJZW50cmllczsKIAlsb2NhbF90CQkJCWNvbW1pdHRpbmc7CiAJbG9jYWxfdAkJCQljb21taXRzOworCXVuc2lnbmVkIGxvbmcJCQlyZWFkOwogCXU2NAkJCQl3cml0ZV9zdGFtcDsKIAl1NjQJCQkJcmVhZF9zdGFtcDsKIAlhdG9taWNfdAkJCXJlY29yZF9kaXNhYmxlZDsKQEAgLTQ1MCwxNCArNDY3LDE5IEBACiB9OwogCiAvKiBidWZmZXIgbWF5IGJlIGVpdGhlciByaW5nX2J1ZmZlciBvciByaW5nX2J1ZmZlcl9wZXJfY3B1ICovCi0jZGVmaW5lIFJCX1dBUk5fT04oYnVmZmVyLCBjb25kKQkJCQlcCi0JKHsJCQkJCQkJXAotCQlpbnQgX19fX19yZXQgPSB1bmxpa2VseShjb25kKTsJCQlcCi0JCWlmIChfX19fX3JldCkgewkJCQkJXAotCQkJYXRvbWljX2luYygmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOwlcCi0JCQlXQVJOX09OKDEpOwkJCQlcCi0JCX0JCQkJCQlcCi0JCV9fX19fcmV0OwkJCQkJXAorI2RlZmluZSBSQl9XQVJOX09OKGIsIGNvbmQpCQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCWludCBfX19fX3JldCA9IHVubGlrZWx5KGNvbmQpOwkJCQlcCisJCWlmIChfX19fX3JldCkgewkJCQkJCVwKKwkJCWlmIChfX3NhbWVfdHlwZSgqKGIpLCBzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSkpIHsgXAorCQkJCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpfX2IgPQlcCisJCQkJCSh2b2lkICopYjsJCQlcCisJCQkJYXRvbWljX2luYygmX19iLT5idWZmZXItPnJlY29yZF9kaXNhYmxlZCk7IFwKKwkJCX0gZWxzZQkJCQkJCVwKKwkJCQlhdG9taWNfaW5jKCZiLT5yZWNvcmRfZGlzYWJsZWQpOwlcCisJCQlXQVJOX09OKDEpOwkJCQkJXAorCQl9CQkJCQkJCVwKKwkJX19fX19yZXQ7CQkJCQkJXAogCX0pCiAKIC8qIFVwIHRoaXMgaWYgeW91IHdhbnQgdG8gdGVzdCB0aGUgVElNRV9FWFRFTlRTIGFuZCBub3JtYWxpemF0aW9uICovCkBAIC00ODksNiArNTExLDM5MCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXApOwogCisvKgorICogTWFraW5nIHRoZSByaW5nIGJ1ZmZlciBsb2NrbGVzcyBtYWtlcyB0aGluZ3MgdHJpY2t5LgorICogQWx0aG91Z2ggd3JpdGVzIG9ubHkgaGFwcGVuIG9uIHRoZSBDUFUgdGhhdCB0aGV5IGFyZSBvbiwKKyAqIGFuZCB0aGV5IG9ubHkgbmVlZCB0byB3b3JyeSBhYm91dCBpbnRlcnJ1cHRzLiBSZWFkcyBjYW4KKyAqIGhhcHBlbiBvbiBhbnkgQ1BVLgorICoKKyAqIFRoZSByZWFkZXIgcGFnZSBpcyBhbHdheXMgb2ZmIHRoZSByaW5nIGJ1ZmZlciwgYnV0IHdoZW4gdGhlCisgKiByZWFkZXIgZmluaXNoZXMgd2l0aCBhIHBhZ2UsIGl0IG5lZWRzIHRvIHN3YXAgaXRzIHBhZ2Ugd2l0aAorICogYSBuZXcgb25lIGZyb20gdGhlIGJ1ZmZlci4gVGhlIHJlYWRlciBuZWVkcyB0byB0YWtlIGZyb20KKyAqIHRoZSBoZWFkICh3cml0ZXMgZ28gdG8gdGhlIHRhaWwpLiBCdXQgaWYgYSB3cml0ZXIgaXMgaW4gb3ZlcndyaXRlCisgKiBtb2RlIGFuZCB3cmFwcywgaXQgbXVzdCBwdXNoIHRoZSBoZWFkIHBhZ2UgZm9yd2FyZC4KKyAqCisgKiBIZXJlIGxpZXMgdGhlIHByb2JsZW0uCisgKgorICogVGhlIHJlYWRlciBtdXN0IGJlIGNhcmVmdWwgdG8gcmVwbGFjZSBvbmx5IHRoZSBoZWFkIHBhZ2UsIGFuZAorICogbm90IGFub3RoZXIgb25lLiBBcyBkZXNjcmliZWQgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSBpbiB0aGUKKyAqIEFTQ0lJIGFydCwgdGhlIHJlYWRlciBzZXRzIGl0cyBvbGQgcGFnZSB0byBwb2ludCB0byB0aGUgbmV4dAorICogcGFnZSBhZnRlciBoZWFkLiBJdCB0aGVuIHNldHMgdGhlIHBhZ2UgYWZ0ZXIgaGVhZCB0byBwb2ludCB0bworICogdGhlIG9sZCByZWFkZXIgcGFnZS4gQnV0IGlmIHRoZSB3cml0ZXIgbW92ZXMgdGhlIGhlYWQgcGFnZQorICogZHVyaW5nIHRoaXMgb3BlcmF0aW9uLCB0aGUgcmVhZGVyIGNvdWxkIGVuZCB1cCB3aXRoIHRoZSB0YWlsLgorICoKKyAqIFdlIHVzZSBjbXB4Y2hnIHRvIGhlbHAgcHJldmVudCB0aGlzIHJhY2UuIFdlIGFsc28gZG8gc29tZXRoaW5nCisgKiBzcGVjaWFsIHdpdGggdGhlIHBhZ2UgYmVmb3JlIGhlYWQuIFdlIHNldCB0aGUgTFNCIHRvIDEuCisgKgorICogV2hlbiB0aGUgd3JpdGVyIG11c3QgcHVzaCB0aGUgcGFnZSBmb3J3YXJkLCBpdCB3aWxsIGNsZWFyIHRoZQorICogYml0IHRoYXQgcG9pbnRzIHRvIHRoZSBoZWFkIHBhZ2UsIG1vdmUgdGhlIGhlYWQsIGFuZCB0aGVuIHNldAorICogdGhlIGJpdCB0aGF0IHBvaW50cyB0byB0aGUgbmV3IGhlYWQgcGFnZS4KKyAqCisgKiBXZSBhbHNvIGRvbid0IHdhbnQgYW4gaW50ZXJydXB0IGNvbWluZyBpbiBhbmQgbW92aW5nIHRoZSBoZWFkCisgKiBwYWdlIG9uIGFub3RoZXIgd3JpdGVyLiBUaHVzIHdlIHVzZSB0aGUgc2Vjb25kIExTQiB0byBjYXRjaAorICogdGhhdCB0b28uIFRodXM6CisgKgorICogaGVhZC0+bGlzdC0+cHJldi0+bmV4dCAgICAgICAgYml0IDEgICAgICAgICAgYml0IDAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLSAgICAgICAgLS0tLS0tLQorICogTm9ybWFsIHBhZ2UgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAwCisgKiBQb2ludHMgdG8gaGVhZCBwYWdlICAgICAgICAgICAgIDAgICAgICAgICAgICAgIDEKKyAqIE5ldyBoZWFkIHBhZ2UgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgMAorICoKKyAqIE5vdGUgd2UgY2FuIG5vdCB0cnVzdCB0aGUgcHJldiBwb2ludGVyIG9mIHRoZSBoZWFkIHBhZ2UsIGJlY2F1c2U6CisgKgorICogKy0tLS0rICAgICAgICstLS0tLSsgICAgICAgICstLS0tLSsKKyAqIHwgICAgfC0tLS0tLT58ICBUICB8LS0tWC0tLT58ICBOICB8CisgKiB8ICAgIHw8LS0tLS0tfCAgICAgfCAgICAgICAgfCAgICAgfAorICogKy0tLS0rICAgICAgICstLS0tLSsgICAgICAgICstLS0tLSsKKyAqICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gfAorICogICB8ICAgICAgICAgICstLS0tLSsgICAgICAgICAgfCB8CisgKiAgICstLS0tLS0tLS0tfCAgUiAgfC0tLS0tLS0tLS0rIHwKKyAqICAgICAgICAgICAgICB8ICAgICB8PC0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICstLS0tLSsKKyAqCisgKiBLZXk6ICAtLS1YLS0+ICBIRUFEIGZsYWcgc2V0IGluIHBvaW50ZXIKKyAqICAgICAgICAgVCAgICAgIFRhaWwgcGFnZQorICogICAgICAgICBSICAgICAgUmVhZGVyIHBhZ2UKKyAqICAgICAgICAgTiAgICAgIE5leHQgcGFnZQorICoKKyAqIChzZWUgX19yYl9yZXNlcnZlX25leHQoKSB0byBzZWUgd2hlcmUgdGhpcyBoYXBwZW5zKQorICoKKyAqICBXaGF0IHRoZSBhYm92ZSBzaG93cyBpcyB0aGF0IHRoZSByZWFkZXIganVzdCBzd2FwcGVkIG91dAorICogIHRoZSByZWFkZXIgcGFnZSB3aXRoIGEgcGFnZSBpbiB0aGUgYnVmZmVyLCBidXQgYmVmb3JlIGl0CisgKiAgY291bGQgbWFrZSB0aGUgbmV3IGhlYWRlciBwb2ludCBiYWNrIHRvIHRoZSBuZXcgcGFnZSBhZGRlZAorICogIGl0IHdhcyBwcmVlbXB0ZWQgYnkgYSB3cml0ZXIuIFRoZSB3cml0ZXIgbW92ZWQgZm9yd2FyZCBvbnRvCisgKiAgdGhlIG5ldyBwYWdlIGFkZGVkIGJ5IHRoZSByZWFkZXIgYW5kIGlzIGFib3V0IHRvIG1vdmUgZm9yd2FyZAorICogIGFnYWluLgorICoKKyAqICBZb3UgY2FuIHNlZSwgaXQgaXMgbGVnaXRpbWF0ZSBmb3IgdGhlIHByZXZpb3VzIHBvaW50ZXIgb2YKKyAqICB0aGUgaGVhZCAob3IgYW55IHBhZ2UpIG5vdCB0byBwb2ludCBiYWNrIHRvIGl0c2VsZi4gQnV0IG9ubHkKKyAqICB0ZW1wb3JhcmlhbGx5LgorICovCisKKyNkZWZpbmUgUkJfUEFHRV9OT1JNQUwJCTBVTAorI2RlZmluZSBSQl9QQUdFX0hFQUQJCTFVTAorI2RlZmluZSBSQl9QQUdFX1VQREFURQkJMlVMCisKKworI2RlZmluZSBSQl9GTEFHX01BU0sJCTNVTAorCisvKiBQQUdFX01PVkVEIGlzIG5vdCBwYXJ0IG9mIHRoZSBtYXNrICovCisjZGVmaW5lIFJCX1BBR0VfTU9WRUQJCTRVTAorCisvKgorICogcmJfbGlzdF9oZWFkIC0gcmVtb3ZlIGFueSBiaXQKKyAqLworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKnJiX2xpc3RfaGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCXVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpbGlzdDsKKworCXJldHVybiAoc3RydWN0IGxpc3RfaGVhZCAqKSh2YWwgJiB+UkJfRkxBR19NQVNLKTsKK30KKworLyoKKyAqIHJiX2lzX2hlYWRfcGFnZSAtIHRlc3QgaWYgdGhlIGdpdmUgcGFnZSBpcyB0aGUgaGVhZCBwYWdlCisgKgorICogQmVjYXVzZSB0aGUgcmVhZGVyIG1heSBtb3ZlIHRoZSBoZWFkX3BhZ2UgcG9pbnRlciwgd2UgY2FuCisgKiBub3QgdHJ1c3Qgd2hhdCB0aGUgaGVhZCBwYWdlIGlzIChpdCBtYXkgYmUgcG9pbnRpbmcgdG8KKyAqIHRoZSByZWFkZXIgcGFnZSkuIEJ1dCBpZiB0aGUgbmV4dCBwYWdlIGlzIGEgaGVhZGVyIHBhZ2UsCisgKiBpdHMgZmxhZ3Mgd2lsbCBiZSBub24gemVyby4KKyAqLworc3RhdGljIGludCBpbmxpbmUKK3JiX2lzX2hlYWRfcGFnZShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkJc3RydWN0IGJ1ZmZlcl9wYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJdmFsID0gKHVuc2lnbmVkIGxvbmcpbGlzdC0+bmV4dDsKKworCWlmICgodmFsICYgflJCX0ZMQUdfTUFTSykgIT0gKHVuc2lnbmVkIGxvbmcpJnBhZ2UtPmxpc3QpCisJCXJldHVybiBSQl9QQUdFX01PVkVEOworCisJcmV0dXJuIHZhbCAmIFJCX0ZMQUdfTUFTSzsKK30KKworLyoKKyAqIHJiX2lzX3JlYWRlcl9wYWdlCisgKgorICogVGhlIHVuaXF1ZSB0aGluZyBhYm91dCB0aGUgcmVhZGVyIHBhZ2UsIGlzIHRoYXQsIGlmIHRoZQorICogd3JpdGVyIGlzIGV2ZXIgb24gaXQsIHRoZSBwcmV2aW91cyBwb2ludGVyIG5ldmVyIHBvaW50cworICogYmFjayB0byB0aGUgcmVhZGVyIHBhZ2UuCisgKi8KK3N0YXRpYyBpbnQgcmJfaXNfcmVhZGVyX3BhZ2Uoc3RydWN0IGJ1ZmZlcl9wYWdlICpwYWdlKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSBwYWdlLT5saXN0LnByZXY7CisKKwlyZXR1cm4gcmJfbGlzdF9oZWFkKGxpc3QtPm5leHQpICE9ICZwYWdlLT5saXN0OworfQorCisvKgorICogcmJfc2V0X2xpc3RfdG9faGVhZCAtIHNldCBhIGxpc3RfaGVhZCB0byBiZSBwb2ludGluZyB0byBoZWFkLgorICovCitzdGF0aWMgdm9pZCByYl9zZXRfbGlzdF90b19oZWFkKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJdW5zaWduZWQgbG9uZyAqcHRyOworCisJcHRyID0gKHVuc2lnbmVkIGxvbmcgKikmbGlzdC0+bmV4dDsKKwkqcHRyIHw9IFJCX1BBR0VfSEVBRDsKKwkqcHRyICY9IH5SQl9QQUdFX1VQREFURTsKK30KKworLyoKKyAqIHJiX2hlYWRfcGFnZV9hY3RpdmF0ZSAtIHNldHMgdXAgaGVhZCBwYWdlCisgKi8KK3N0YXRpYyB2b2lkIHJiX2hlYWRfcGFnZV9hY3RpdmF0ZShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKK3sKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmhlYWQ7CisKKwloZWFkID0gY3B1X2J1ZmZlci0+aGVhZF9wYWdlOworCWlmICghaGVhZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTZXQgdGhlIHByZXZpb3VzIGxpc3QgcG9pbnRlciB0byBoYXZlIHRoZSBIRUFEIGZsYWcuCisJICovCisJcmJfc2V0X2xpc3RfdG9faGVhZChjcHVfYnVmZmVyLCBoZWFkLT5saXN0LnByZXYpOworfQorCitzdGF0aWMgdm9pZCByYl9saXN0X2hlYWRfY2xlYXIoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwl1bnNpZ25lZCBsb25nICpwdHIgPSAodW5zaWduZWQgbG9uZyAqKSZsaXN0LT5uZXh0OworCisJKnB0ciAmPSB+UkJfRkxBR19NQVNLOworfQorCisvKgorICogcmJfaGVhZF9wYWdlX2RhY3RpdmF0ZSAtIGNsZWFycyBoZWFkIHBhZ2UgcHRyIChmb3IgZnJlZSBsaXN0KQorICovCitzdGF0aWMgdm9pZAorcmJfaGVhZF9wYWdlX2RlYWN0aXZhdGUoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGQ7CisKKwkvKiBHbyB0aHJvdWdoIHRoZSB3aG9sZSBsaXN0IGFuZCBjbGVhciBhbnkgcG9pbnRlcnMgZm91bmQuICovCisJcmJfbGlzdF9oZWFkX2NsZWFyKGNwdV9idWZmZXItPnBhZ2VzKTsKKworCWxpc3RfZm9yX2VhY2goaGQsIGNwdV9idWZmZXItPnBhZ2VzKQorCQlyYl9saXN0X2hlYWRfY2xlYXIoaGQpOworfQorCitzdGF0aWMgaW50IHJiX2hlYWRfcGFnZV9zZXQoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCisJCQkgICAgc3RydWN0IGJ1ZmZlcl9wYWdlICpoZWFkLAorCQkJICAgIHN0cnVjdCBidWZmZXJfcGFnZSAqcHJldiwKKwkJCSAgICBpbnQgb2xkX2ZsYWcsIGludCBuZXdfZmxhZykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCXVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpJmhlYWQtPmxpc3Q7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlsaXN0ID0gJnByZXYtPmxpc3Q7CisKKwl2YWwgJj0gflJCX0ZMQUdfTUFTSzsKKworCXJldCA9ICh1bnNpZ25lZCBsb25nKWNtcHhjaGcoJmxpc3QtPm5leHQsCisJCQkJICAgICB2YWwgfCBvbGRfZmxhZywgdmFsIHwgbmV3X2ZsYWcpOworCisJLyogY2hlY2sgaWYgdGhlIHJlYWRlciB0b29rIHRoZSBwYWdlICovCisJaWYgKChyZXQgJiB+UkJfRkxBR19NQVNLKSAhPSB2YWwpCisJCXJldHVybiBSQl9QQUdFX01PVkVEOworCisJcmV0dXJuIHJldCAmIFJCX0ZMQUdfTUFTSzsKK30KKworc3RhdGljIGludCByYl9oZWFkX3BhZ2Vfc2V0X3VwZGF0ZShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmhlYWQsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9wYWdlICpwcmV2LAorCQkJCSAgIGludCBvbGRfZmxhZykKK3sKKwlyZXR1cm4gcmJfaGVhZF9wYWdlX3NldChjcHVfYnVmZmVyLCBoZWFkLCBwcmV2LAorCQkJCW9sZF9mbGFnLCBSQl9QQUdFX1VQREFURSk7Cit9CisKK3N0YXRpYyBpbnQgcmJfaGVhZF9wYWdlX3NldF9oZWFkKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAorCQkJCSBzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmhlYWQsCisJCQkJIHN0cnVjdCBidWZmZXJfcGFnZSAqcHJldiwKKwkJCQkgaW50IG9sZF9mbGFnKQoreworCXJldHVybiByYl9oZWFkX3BhZ2Vfc2V0KGNwdV9idWZmZXIsIGhlYWQsIHByZXYsCisJCQkJb2xkX2ZsYWcsIFJCX1BBR0VfSEVBRCk7Cit9CisKK3N0YXRpYyBpbnQgcmJfaGVhZF9wYWdlX3NldF9ub3JtYWwoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9wYWdlICpoZWFkLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfcGFnZSAqcHJldiwKKwkJCQkgICBpbnQgb2xkX2ZsYWcpCit7CisJcmV0dXJuIHJiX2hlYWRfcGFnZV9zZXQoY3B1X2J1ZmZlciwgaGVhZCwgcHJldiwKKwkJCQlvbGRfZmxhZywgUkJfUEFHRV9OT1JNQUwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmJfaW5jX3BhZ2Uoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCisJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9wYWdlICoqYnBhZ2UpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcCA9IHJiX2xpc3RfaGVhZCgoKmJwYWdlKS0+bGlzdC5uZXh0KTsKKworCSpicGFnZSA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJ1ZmZlcl9wYWdlLCBsaXN0KTsKK30KKworc3RhdGljIHN0cnVjdCBidWZmZXJfcGFnZSAqCityYl9zZXRfaGVhZF9wYWdlKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQoreworCXN0cnVjdCBidWZmZXJfcGFnZSAqaGVhZDsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKnBhZ2U7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwlpbnQgaTsKKworCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsICFjcHVfYnVmZmVyLT5oZWFkX3BhZ2UpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHNhbml0eSBjaGVjayAqLworCWxpc3QgPSBjcHVfYnVmZmVyLT5wYWdlczsKKwlpZiAoUkJfV0FSTl9PTihjcHVfYnVmZmVyLCByYl9saXN0X2hlYWQobGlzdC0+cHJldi0+bmV4dCkgIT0gbGlzdCkpCisJCXJldHVybiBOVUxMOworCisJcGFnZSA9IGhlYWQgPSBjcHVfYnVmZmVyLT5oZWFkX3BhZ2U7CisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSB3cml0ZXIgbW92ZXMgdGhlIGhlYWRlciBiZWhpbmQKKwkgKiB3aGVyZSB3ZSBzdGFydGVkLCBhbmQgd2UgbWlzcyBpbiBvbmUgbG9vcC4KKwkgKiBBIHNlY29uZCBsb29wIHNob3VsZCBncmFiIHRoZSBoZWFkZXIsIGJ1dCB3ZSdsbCBkbworCSAqIHRocmVlIGxvb3BzIGp1c3QgYmVjYXVzZSBJJ20gcGFyYW5vaWQuCisJICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlkbyB7CisJCQlpZiAocmJfaXNfaGVhZF9wYWdlKGNwdV9idWZmZXIsIHBhZ2UsIHBhZ2UtPmxpc3QucHJldikpIHsKKwkJCQljcHVfYnVmZmVyLT5oZWFkX3BhZ2UgPSBwYWdlOworCQkJCXJldHVybiBwYWdlOworCQkJfQorCQkJcmJfaW5jX3BhZ2UoY3B1X2J1ZmZlciwgJnBhZ2UpOworCQl9IHdoaWxlIChwYWdlICE9IGhlYWQpOworCX0KKworCVJCX1dBUk5fT04oY3B1X2J1ZmZlciwgMSk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCByYl9oZWFkX3BhZ2VfcmVwbGFjZShzdHJ1Y3QgYnVmZmVyX3BhZ2UgKm9sZCwKKwkJCQlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKm5ldykKK3sKKwl1bnNpZ25lZCBsb25nICpwdHIgPSAodW5zaWduZWQgbG9uZyAqKSZvbGQtPmxpc3QucHJldi0+bmV4dDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIHJldDsKKworCXZhbCA9ICpwdHIgJiB+UkJfRkxBR19NQVNLOworCXZhbCB8PSBSQl9QQUdFX0hFQUQ7CisKKwlyZXQgPSBjbXB4Y2hnKHB0ciwgdmFsLCAmbmV3LT5saXN0KTsKKworCXJldHVybiByZXQgPT0gdmFsOworfQorCisvKgorICogcmJfdGFpbF9wYWdlX3VwZGF0ZSAtIG1vdmUgdGhlIHRhaWwgcGFnZSBmb3J3YXJkCisgKgorICogUmV0dXJucyAxIGlmIG1vdmVkIHRhaWwgcGFnZSwgMCBpZiBzb21lb25lIGVsc2UgZGlkLgorICovCitzdGF0aWMgaW50IHJiX3RhaWxfcGFnZV91cGRhdGUoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCisJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9wYWdlICp0YWlsX3BhZ2UsCisJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9wYWdlICpuZXh0X3BhZ2UpCit7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpvbGRfdGFpbDsKKwl1bnNpZ25lZCBsb25nIG9sZF9lbnRyaWVzOworCXVuc2lnbmVkIGxvbmcgb2xkX3dyaXRlOworCWludCByZXQgPSAwOworCisJLyoKKwkgKiBUaGUgdGFpbCBwYWdlIG5vdyBuZWVkcyB0byBiZSBtb3ZlZCBmb3J3YXJkLgorCSAqCisJICogV2UgbmVlZCB0byByZXNldCB0aGUgdGFpbCBwYWdlLCBidXQgd2l0aG91dCBtZXNzaW5nCisJICogd2l0aCBwb3NzaWJsZSBlcmFzaW5nIG9mIGRhdGEgYnJvdWdodCBpbiBieSBpbnRlcnJ1cHRzCisJICogdGhhdCBoYXZlIG1vdmVkIHRoZSB0YWlsIHBhZ2UgYW5kIGFyZSBjdXJyZW50bHkgb24gaXQuCisJICoKKwkgKiBXZSBhZGQgYSBjb3VudGVyIHRvIHRoZSB3cml0ZSBmaWVsZCB0byBkZW5vdGUgdGhpcy4KKwkgKi8KKwlvbGRfd3JpdGUgPSBsb2NhbF9hZGRfcmV0dXJuKFJCX1dSSVRFX0lOVENOVCwgJm5leHRfcGFnZS0+d3JpdGUpOworCW9sZF9lbnRyaWVzID0gbG9jYWxfYWRkX3JldHVybihSQl9XUklURV9JTlRDTlQsICZuZXh0X3BhZ2UtPmVudHJpZXMpOworCisJLyoKKwkgKiBKdXN0IG1ha2Ugc3VyZSB3ZSBoYXZlIHNlZW4gb3VyIG9sZF93cml0ZSBhbmQgc3luY2hyb25pemUKKwkgKiB3aXRoIGFueSBpbnRlcnJ1cHRzIHRoYXQgY29tZSBpbi4KKwkgKi8KKwliYXJyaWVyKCk7CisKKwkvKgorCSAqIElmIHRoZSB0YWlsIHBhZ2UgaXMgc3RpbGwgdGhlIHNhbWUgYXMgd2hhdCB3ZSB0aGluaworCSAqIGl0IGlzLCB0aGVuIGl0IGlzIHVwIHRvIHVzIHRvIHVwZGF0ZSB0aGUgdGFpbAorCSAqIHBvaW50ZXIuCisJICovCisJaWYgKHRhaWxfcGFnZSA9PSBjcHVfYnVmZmVyLT50YWlsX3BhZ2UpIHsKKwkJLyogWmVybyB0aGUgd3JpdGUgY291bnRlciAqLworCQl1bnNpZ25lZCBsb25nIHZhbCA9IG9sZF93cml0ZSAmIH5SQl9XUklURV9NQVNLOworCQl1bnNpZ25lZCBsb25nIGV2YWwgPSBvbGRfZW50cmllcyAmIH5SQl9XUklURV9NQVNLOworCisJCS8qCisJCSAqIFRoaXMgd2lsbCBvbmx5IHN1Y2NlZWQgaWYgYW4gaW50ZXJydXB0IGRpZAorCQkgKiBub3QgY29tZSBpbiBhbmQgY2hhbmdlIGl0LiBJbiB3aGljaCBjYXNlLCB3ZQorCQkgKiBkbyBub3Qgd2FudCB0byBtb2RpZnkgaXQuCisJCSAqCisJCSAqIFdlIGFkZCAodm9pZCkgdG8gbGV0IHRoZSBjb21waWxlciBrbm93IHRoYXQgd2UgZG8gbm90IGNhcmUKKwkJICogYWJvdXQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGVzZSBmdW5jdGlvbnMuIFdlIHVzZSB0aGUKKwkJICogY21weGNoZyB0byBvbmx5IHVwZGF0ZSBpZiBhbiBpbnRlcnJ1cHQgZGlkIG5vdCBhbHJlYWR5CisJCSAqIGRvIGl0IGZvciB1cy4gSWYgdGhlIGNtcHhjaGcgZmFpbHMsIHdlIGRvbid0IGNhcmUuCisJCSAqLworCQkodm9pZClsb2NhbF9jbXB4Y2hnKCZuZXh0X3BhZ2UtPndyaXRlLCBvbGRfd3JpdGUsIHZhbCk7CisJCSh2b2lkKWxvY2FsX2NtcHhjaGcoJm5leHRfcGFnZS0+ZW50cmllcywgb2xkX2VudHJpZXMsIGV2YWwpOworCisJCS8qCisJCSAqIE5vIG5lZWQgdG8gd29ycnkgYWJvdXQgcmFjZXMgd2l0aCBjbGVhcmluZyBvdXQgdGhlIGNvbW1pdC4KKwkJICogaXQgb25seSBjYW4gaW5jcmVtZW50IHdoZW4gYSBjb21taXQgdGFrZXMgcGxhY2UuIEJ1dCB0aGF0CisJCSAqIG9ubHkgaGFwcGVucyBpbiB0aGUgb3V0ZXIgbW9zdCBuZXN0ZWQgY29tbWl0LgorCQkgKi8KKwkJbG9jYWxfc2V0KCZuZXh0X3BhZ2UtPnBhZ2UtPmNvbW1pdCwgMCk7CisKKwkJb2xkX3RhaWwgPSBjbXB4Y2hnKCZjcHVfYnVmZmVyLT50YWlsX3BhZ2UsCisJCQkJICAgdGFpbF9wYWdlLCBuZXh0X3BhZ2UpOworCisJCWlmIChvbGRfdGFpbCA9PSB0YWlsX3BhZ2UpCisJCQlyZXQgPSAxOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmJfY2hlY2tfYnBhZ2Uoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCisJCQkgIHN0cnVjdCBidWZmZXJfcGFnZSAqYnBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSAodW5zaWduZWQgbG9uZylicGFnZTsKKworCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsIHZhbCAmIFJCX0ZMQUdfTUFTSykpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcmJfY2hlY2tfbGlzdCAtIG1ha2Ugc3VyZSBhIHBvaW50ZXIgdG8gYSBsaXN0IGhhcyB0aGUgbGFzdCBiaXRzIHplcm8KKyAqLworc3RhdGljIGludCByYl9jaGVja19saXN0KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAorCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJaWYgKFJCX1dBUk5fT04oY3B1X2J1ZmZlciwgcmJfbGlzdF9oZWFkKGxpc3QtPnByZXYpICE9IGxpc3QtPnByZXYpKQorCQlyZXR1cm4gMTsKKwlpZiAoUkJfV0FSTl9PTihjcHVfYnVmZmVyLCByYl9saXN0X2hlYWQobGlzdC0+bmV4dCkgIT0gbGlzdC0+bmV4dCkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiAvKioKICAqIGNoZWNrX3BhZ2VzIC0gaW50ZWdyaXR5IGNoZWNrIG9mIGJ1ZmZlciBwYWdlcwogICogQGNwdV9idWZmZXI6IENQVSBidWZmZXIgd2l0aCBwYWdlcyB0byB0ZXN0CkBAIC00OTgsMTQgKzkwNCwxOSBAQAogICovCiBzdGF0aWMgaW50IHJiX2NoZWNrX3BhZ2VzKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmY3B1X2J1ZmZlci0+cGFnZXM7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IGNwdV9idWZmZXItPnBhZ2VzOwogCXN0cnVjdCBidWZmZXJfcGFnZSAqYnBhZ2UsICp0bXA7CiAKKwlyYl9oZWFkX3BhZ2VfZGVhY3RpdmF0ZShjcHVfYnVmZmVyKTsKKwogCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsIGhlYWQtPm5leHQtPnByZXYgIT0gaGVhZCkpCiAJCXJldHVybiAtMTsKIAlpZiAoUkJfV0FSTl9PTihjcHVfYnVmZmVyLCBoZWFkLT5wcmV2LT5uZXh0ICE9IGhlYWQpKQogCQlyZXR1cm4gLTE7CiAKKwlpZiAocmJfY2hlY2tfbGlzdChjcHVfYnVmZmVyLCBoZWFkKSkKKwkJcmV0dXJuIC0xOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJwYWdlLCB0bXAsIGhlYWQsIGxpc3QpIHsKIAkJaWYgKFJCX1dBUk5fT04oY3B1X2J1ZmZlciwKIAkJCSAgICAgICBicGFnZS0+bGlzdC5uZXh0LT5wcmV2ICE9ICZicGFnZS0+bGlzdCkpCkBAIC01MTMsMjUgKzkyNCwzMyBAQAogCQlpZiAoUkJfV0FSTl9PTihjcHVfYnVmZmVyLAogCQkJICAgICAgIGJwYWdlLT5saXN0LnByZXYtPm5leHQgIT0gJmJwYWdlLT5saXN0KSkKIAkJCXJldHVybiAtMTsKKwkJaWYgKHJiX2NoZWNrX2xpc3QoY3B1X2J1ZmZlciwgJmJwYWdlLT5saXN0KSkKKwkJCXJldHVybiAtMTsKIAl9CiAKKwlyYl9oZWFkX3BhZ2VfYWN0aXZhdGUoY3B1X2J1ZmZlcik7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByYl9hbGxvY2F0ZV9wYWdlcyhzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKIAkJCSAgICAgdW5zaWduZWQgbnJfcGFnZXMpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZjcHVfYnVmZmVyLT5wYWdlczsKIAlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmJwYWdlLCAqdG1wOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlMSVNUX0hFQUQocGFnZXMpOwogCXVuc2lnbmVkIGk7CiAKKwlXQVJOX09OKCFucl9wYWdlcyk7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewogCQlicGFnZSA9IGt6YWxsb2Nfbm9kZShBTElHTihzaXplb2YoKmJwYWdlKSwgY2FjaGVfbGluZV9zaXplKCkpLAogCQkJCSAgICBHRlBfS0VSTkVMLCBjcHVfdG9fbm9kZShjcHVfYnVmZmVyLT5jcHUpKTsKIAkJaWYgKCFicGFnZSkKIAkJCWdvdG8gZnJlZV9wYWdlczsKKworCQlyYl9jaGVja19icGFnZShjcHVfYnVmZmVyLCBicGFnZSk7CisKIAkJbGlzdF9hZGQoJmJwYWdlLT5saXN0LCAmcGFnZXMpOwogCiAJCWFkZHIgPSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CkBAIC01NDEsNyArOTYwLDEzIEBACiAJCXJiX2luaXRfcGFnZShicGFnZS0+cGFnZSk7CiAJfQogCi0JbGlzdF9zcGxpY2UoJnBhZ2VzLCBoZWFkKTsKKwkvKgorCSAqIFRoZSByaW5nIGJ1ZmZlciBwYWdlIGxpc3QgaXMgYSBjaXJjdWxhciBsaXN0IHRoYXQgZG9lcyBub3QKKwkgKiBzdGFydCBhbmQgZW5kIHdpdGggYSBsaXN0IGhlYWQuIEFsbCBwYWdlIGxpc3QgaXRlbXMgcG9pbnQgdG8KKwkgKiBvdGhlciBwYWdlcy4KKwkgKi8KKwljcHVfYnVmZmVyLT5wYWdlcyA9IHBhZ2VzLm5leHQ7CisJbGlzdF9kZWwoJnBhZ2VzKTsKIAogCXJiX2NoZWNrX3BhZ2VzKGNwdV9idWZmZXIpOwogCkBAIC01NzMsMTMgKzk5OCwxNCBAQAogCXNwaW5fbG9ja19pbml0KCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jayk7CiAJbG9ja2RlcF9zZXRfY2xhc3MoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBidWZmZXItPnJlYWRlcl9sb2NrX2tleSk7CiAJY3B1X2J1ZmZlci0+bG9jayA9IChyYXdfc3BpbmxvY2tfdClfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7Ci0JSU5JVF9MSVNUX0hFQUQoJmNwdV9idWZmZXItPnBhZ2VzKTsKIAogCWJwYWdlID0ga3phbGxvY19ub2RlKEFMSUdOKHNpemVvZigqYnBhZ2UpLCBjYWNoZV9saW5lX3NpemUoKSksCiAJCQkgICAgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoY3B1KSk7CiAJaWYgKCFicGFnZSkKIAkJZ290byBmYWlsX2ZyZWVfYnVmZmVyOwogCisJcmJfY2hlY2tfYnBhZ2UoY3B1X2J1ZmZlciwgYnBhZ2UpOworCiAJY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UgPSBicGFnZTsKIAlhZGRyID0gX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghYWRkcikKQEAgLTU5NCw5ICsxMDIwLDExIEBACiAJCWdvdG8gZmFpbF9mcmVlX3JlYWRlcjsKIAogCWNwdV9idWZmZXItPmhlYWRfcGFnZQotCQk9IGxpc3RfZW50cnkoY3B1X2J1ZmZlci0+cGFnZXMubmV4dCwgc3RydWN0IGJ1ZmZlcl9wYWdlLCBsaXN0KTsKKwkJPSBsaXN0X2VudHJ5KGNwdV9idWZmZXItPnBhZ2VzLCBzdHJ1Y3QgYnVmZmVyX3BhZ2UsIGxpc3QpOwogCWNwdV9idWZmZXItPnRhaWxfcGFnZSA9IGNwdV9idWZmZXItPmNvbW1pdF9wYWdlID0gY3B1X2J1ZmZlci0+aGVhZF9wYWdlOwogCisJcmJfaGVhZF9wYWdlX2FjdGl2YXRlKGNwdV9idWZmZXIpOworCiAJcmV0dXJuIGNwdV9idWZmZXI7CiAKICBmYWlsX2ZyZWVfcmVhZGVyOgpAQCAtNjA5LDE1ICsxMDM3LDIyIEBACiAKIHN0YXRpYyB2b2lkIHJiX2ZyZWVfY3B1X2J1ZmZlcihzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmNwdV9idWZmZXItPnBhZ2VzOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBjcHVfYnVmZmVyLT5wYWdlczsKIAlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmJwYWdlLCAqdG1wOwogCiAJZnJlZV9idWZmZXJfcGFnZShjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnBhZ2UsIHRtcCwgaGVhZCwgbGlzdCkgewotCQlsaXN0X2RlbF9pbml0KCZicGFnZS0+bGlzdCk7CisJcmJfaGVhZF9wYWdlX2RlYWN0aXZhdGUoY3B1X2J1ZmZlcik7CisKKwlpZiAoaGVhZCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnBhZ2UsIHRtcCwgaGVhZCwgbGlzdCkgeworCQkJbGlzdF9kZWxfaW5pdCgmYnBhZ2UtPmxpc3QpOworCQkJZnJlZV9idWZmZXJfcGFnZShicGFnZSk7CisJCX0KKwkJYnBhZ2UgPSBsaXN0X2VudHJ5KGhlYWQsIHN0cnVjdCBidWZmZXJfcGFnZSwgbGlzdCk7CiAJCWZyZWVfYnVmZmVyX3BhZ2UoYnBhZ2UpOwogCX0KKwogCWtmcmVlKGNwdV9idWZmZXIpOwogfQogCkBAIC03NjAsMTUgKzExOTUsMTcgQEAKIAlhdG9taWNfaW5jKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOwogCXN5bmNocm9uaXplX3NjaGVkKCk7CiAKKwlyYl9oZWFkX3BhZ2VfZGVhY3RpdmF0ZShjcHVfYnVmZmVyKTsKKwogCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7Ci0JCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsIGxpc3RfZW1wdHkoJmNwdV9idWZmZXItPnBhZ2VzKSkpCisJCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsIGxpc3RfZW1wdHkoY3B1X2J1ZmZlci0+cGFnZXMpKSkKIAkJCXJldHVybjsKLQkJcCA9IGNwdV9idWZmZXItPnBhZ2VzLm5leHQ7CisJCXAgPSBjcHVfYnVmZmVyLT5wYWdlcy0+bmV4dDsKIAkJYnBhZ2UgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBidWZmZXJfcGFnZSwgbGlzdCk7CiAJCWxpc3RfZGVsX2luaXQoJmJwYWdlLT5saXN0KTsKIAkJZnJlZV9idWZmZXJfcGFnZShicGFnZSk7CiAJfQotCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsIGxpc3RfZW1wdHkoJmNwdV9idWZmZXItPnBhZ2VzKSkpCisJaWYgKFJCX1dBUk5fT04oY3B1X2J1ZmZlciwgbGlzdF9lbXB0eShjcHVfYnVmZmVyLT5wYWdlcykpKQogCQlyZXR1cm47CiAKIAlyYl9yZXNldF9jcHUoY3B1X2J1ZmZlcik7CkBAIC03OTAsMTUgKzEyMjcsMTkgQEAKIAlhdG9taWNfaW5jKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOwogCXN5bmNocm9uaXplX3NjaGVkKCk7CiAKKwlzcGluX2xvY2tfaXJxKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jayk7CisJcmJfaGVhZF9wYWdlX2RlYWN0aXZhdGUoY3B1X2J1ZmZlcik7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewogCQlpZiAoUkJfV0FSTl9PTihjcHVfYnVmZmVyLCBsaXN0X2VtcHR5KHBhZ2VzKSkpCiAJCQlyZXR1cm47CiAJCXAgPSBwYWdlcy0+bmV4dDsKIAkJYnBhZ2UgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBidWZmZXJfcGFnZSwgbGlzdCk7CiAJCWxpc3RfZGVsX2luaXQoJmJwYWdlLT5saXN0KTsKLQkJbGlzdF9hZGRfdGFpbCgmYnBhZ2UtPmxpc3QsICZjcHVfYnVmZmVyLT5wYWdlcyk7CisJCWxpc3RfYWRkX3RhaWwoJmJwYWdlLT5saXN0LCBjcHVfYnVmZmVyLT5wYWdlcyk7CiAJfQogCXJiX3Jlc2V0X2NwdShjcHVfYnVmZmVyKTsKKwlzcGluX3VubG9ja19pcnEoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrKTsKIAogCXJiX2NoZWNrX3BhZ2VzKGNwdV9idWZmZXIpOwogCkBAIC05NDksMjEgKzEzOTAsMTQgQEAKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgotcmJfaGVhZF9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKLXsKLQlyZXR1cm4gX19yYl9wYWdlX2luZGV4KGNwdV9idWZmZXItPmhlYWRfcGFnZSwKLQkJCSAgICAgICBjcHVfYnVmZmVyLT5oZWFkX3BhZ2UtPnJlYWQpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCiByYl9pdGVyX2hlYWRfZXZlbnQoc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIgKml0ZXIpCiB7CiAJcmV0dXJuIF9fcmJfcGFnZV9pbmRleChpdGVyLT5oZWFkX3BhZ2UsIGl0ZXItPmhlYWQpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHJiX3BhZ2Vfd3JpdGUoc3RydWN0IGJ1ZmZlcl9wYWdlICpicGFnZSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByYl9wYWdlX3dyaXRlKHN0cnVjdCBidWZmZXJfcGFnZSAqYnBhZ2UpCiB7Ci0JcmV0dXJuIGxvY2FsX3JlYWQoJmJwYWdlLT53cml0ZSk7CisJcmV0dXJuIGxvY2FsX3JlYWQoJmJwYWdlLT53cml0ZSkgJiBSQl9XUklURV9NQVNLOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHJiX3BhZ2VfY29tbWl0KHN0cnVjdCBidWZmZXJfcGFnZSAqYnBhZ2UpCkBAIC05NzEsNiArMTQwNSwxMSBAQAogCXJldHVybiBsb2NhbF9yZWFkKCZicGFnZS0+cGFnZS0+Y29tbWl0KTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJiX3BhZ2VfZW50cmllcyhzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmJwYWdlKQoreworCXJldHVybiBsb2NhbF9yZWFkKCZicGFnZS0+ZW50cmllcykgJiBSQl9XUklURV9NQVNLOworfQorCiAvKiBTaXplIGlzIGRldGVybWluZWQgYnkgd2hhdCBoYXMgYmVlbiBjb21taXRlZCAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCByYl9wYWdlX3NpemUoc3RydWN0IGJ1ZmZlcl9wYWdlICpicGFnZSkKIHsKQEAgLTk4MywyMiArMTQyMiw2IEBACiAJcmV0dXJuIHJiX3BhZ2VfY29tbWl0KGNwdV9idWZmZXItPmNvbW1pdF9wYWdlKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCByYl9oZWFkX3NpemUoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCi17Ci0JcmV0dXJuIHJiX3BhZ2VfY29tbWl0KGNwdV9idWZmZXItPmhlYWRfcGFnZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByYl9pbmNfcGFnZShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKLQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX3BhZ2UgKipicGFnZSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwID0gKCpicGFnZSktPmxpc3QubmV4dDsKLQotCWlmIChwID09ICZjcHVfYnVmZmVyLT5wYWdlcykKLQkJcCA9IHAtPm5leHQ7Ci0KLQkqYnBhZ2UgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBidWZmZXJfcGFnZSwgbGlzdCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQKIHJiX2V2ZW50X2luZGV4KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCiB7CkBAIC0xMDI0LDYgKzE0NDcsOCBAQAogc3RhdGljIHZvaWQKIHJiX3NldF9jb21taXRfdG9fd3JpdGUoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCiB7CisJdW5zaWduZWQgbG9uZyBtYXhfY291bnQ7CisKIAkvKgogCSAqIFdlIG9ubHkgcmFjZSB3aXRoIGludGVycnVwdHMgYW5kIE5NSXMgb24gdGhpcyBDUFUuCiAJICogSWYgd2Ugb3duIHRoZSBjb21taXQgZXZlbnQsIHRoZW4gd2UgY2FuIGNvbW1pdApAQCAtMTAzMyw5ICsxNDU4LDE2IEBACiAJICogYXNzaWduIHRoZSBjb21taXQgdG8gdGhlIHRhaWwuCiAJICovCiAgYWdhaW46CisJbWF4X2NvdW50ID0gY3B1X2J1ZmZlci0+YnVmZmVyLT5wYWdlcyAqIDEwMDsKKwogCXdoaWxlIChjcHVfYnVmZmVyLT5jb21taXRfcGFnZSAhPSBjcHVfYnVmZmVyLT50YWlsX3BhZ2UpIHsKLQkJY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UtPnBhZ2UtPmNvbW1pdCA9Ci0JCQljcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+d3JpdGU7CisJCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsICEoLS1tYXhfY291bnQpKSkKKwkJCXJldHVybjsKKwkJaWYgKFJCX1dBUk5fT04oY3B1X2J1ZmZlciwKKwkJCSAgICAgICByYl9pc19yZWFkZXJfcGFnZShjcHVfYnVmZmVyLT50YWlsX3BhZ2UpKSkKKwkJCXJldHVybjsKKwkJbG9jYWxfc2V0KCZjcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+cGFnZS0+Y29tbWl0LAorCQkJICByYl9wYWdlX3dyaXRlKGNwdV9idWZmZXItPmNvbW1pdF9wYWdlKSk7CiAJCXJiX2luY19wYWdlKGNwdV9idWZmZXIsICZjcHVfYnVmZmVyLT5jb21taXRfcGFnZSk7CiAJCWNwdV9idWZmZXItPndyaXRlX3N0YW1wID0KIAkJCWNwdV9idWZmZXItPmNvbW1pdF9wYWdlLT5wYWdlLT50aW1lX3N0YW1wOwpAQCAtMTA0NCw4ICsxNDc2LDEyIEBACiAJfQogCXdoaWxlIChyYl9jb21taXRfaW5kZXgoY3B1X2J1ZmZlcikgIT0KIAkgICAgICAgcmJfcGFnZV93cml0ZShjcHVfYnVmZmVyLT5jb21taXRfcGFnZSkpIHsKLQkJY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UtPnBhZ2UtPmNvbW1pdCA9Ci0JCQljcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+d3JpdGU7CisKKwkJbG9jYWxfc2V0KCZjcHVfYnVmZmVyLT5jb21taXRfcGFnZS0+cGFnZS0+Y29tbWl0LAorCQkJICByYl9wYWdlX3dyaXRlKGNwdV9idWZmZXItPmNvbW1pdF9wYWdlKSk7CisJCVJCX1dBUk5fT04oY3B1X2J1ZmZlciwKKwkJCSAgIGxvY2FsX3JlYWQoJmNwdV9idWZmZXItPmNvbW1pdF9wYWdlLT5wYWdlLT5jb21taXQpICYKKwkJCSAgIH5SQl9XUklURV9NQVNLKTsKIAkJYmFycmllcigpOwogCX0KIApAQCAtMTA3OCw3ICsxNTE0LDcgQEAKIAkgKiB0byB0aGUgaGVhZCBwYWdlIGluc3RlYWQgb2YgbmV4dC4KIAkgKi8KIAlpZiAoaXRlci0+aGVhZF9wYWdlID09IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlKQotCQlpdGVyLT5oZWFkX3BhZ2UgPSBjcHVfYnVmZmVyLT5oZWFkX3BhZ2U7CisJCWl0ZXItPmhlYWRfcGFnZSA9IHJiX3NldF9oZWFkX3BhZ2UoY3B1X2J1ZmZlcik7CiAJZWxzZQogCQlyYl9pbmNfcGFnZShjcHVfYnVmZmVyLCAmaXRlci0+aGVhZF9wYWdlKTsKIApAQCAtMTEyMiw2ICsxNTU4LDE2MyBAQAogCX0KIH0KIAorLyoKKyAqIHJiX2hhbmRsZV9oZWFkX3BhZ2UgLSB3cml0ZXIgaGl0IHRoZSBoZWFkIHBhZ2UKKyAqCisgKiBSZXR1cm5zOiArMSB0byByZXRyeSBwYWdlCisgKiAgICAgICAgICAgMCB0byBjb250aW51ZQorICogICAgICAgICAgLTEgb24gZXJyb3IKKyAqLworc3RhdGljIGludAorcmJfaGFuZGxlX2hlYWRfcGFnZShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkJICAgIHN0cnVjdCBidWZmZXJfcGFnZSAqdGFpbF9wYWdlLAorCQkgICAgc3RydWN0IGJ1ZmZlcl9wYWdlICpuZXh0X3BhZ2UpCit7CisJc3RydWN0IGJ1ZmZlcl9wYWdlICpuZXdfaGVhZDsKKwlpbnQgZW50cmllczsKKwlpbnQgdHlwZTsKKwlpbnQgcmV0OworCisJZW50cmllcyA9IHJiX3BhZ2VfZW50cmllcyhuZXh0X3BhZ2UpOworCisJLyoKKwkgKiBUaGUgaGFyZCBwYXJ0IGlzIGhlcmUuIFdlIG5lZWQgdG8gbW92ZSB0aGUgaGVhZAorCSAqIGZvcndhcmQsIGFuZCBwcm90ZWN0IGFnYWluc3QgYm90aCByZWFkZXJzIG9uCisJICogb3RoZXIgQ1BVcyBhbmQgd3JpdGVycyBjb21pbmcgaW4gdmlhIGludGVycnVwdHMuCisJICovCisJdHlwZSA9IHJiX2hlYWRfcGFnZV9zZXRfdXBkYXRlKGNwdV9idWZmZXIsIG5leHRfcGFnZSwgdGFpbF9wYWdlLAorCQkJCSAgICAgICBSQl9QQUdFX0hFQUQpOworCisJLyoKKwkgKiB0eXBlIGNhbiBiZSBvbmUgb2YgZm91cjoKKwkgKiAgTk9STUFMIC0gYW4gaW50ZXJydXB0IGFscmVhZHkgbW92ZWQgaXQgZm9yIHVzCisJICogIEhFQUQgICAtIHdlIGFyZSB0aGUgZmlyc3QgdG8gZ2V0IGhlcmUuCisJICogIFVQREFURSAtIHdlIGFyZSB0aGUgaW50ZXJydXB0IGludGVycnVwdGluZworCSAqICAgICAgICAgICBhIGN1cnJlbnQgbW92ZS4KKwkgKiAgTU9WRUQgIC0gYSByZWFkZXIgb24gYW5vdGhlciBDUFUgbW92ZWQgdGhlIG5leHQKKwkgKiAgICAgICAgICAgcG9pbnRlciB0byBpdHMgcmVhZGVyIHBhZ2UuIEdpdmUgdXAKKwkgKiAgICAgICAgICAgYW5kIHRyeSBhZ2Fpbi4KKwkgKi8KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUkJfUEFHRV9IRUFEOgorCQkvKgorCQkgKiBXZSBjaGFuZ2VkIHRoZSBoZWFkIHRvIFVQREFURSwgdGh1cworCQkgKiBpdCBpcyBvdXIgcmVzcG9uc2liaWxpdHkgdG8gdXBkYXRlCisJCSAqIHRoZSBjb3VudGVycy4KKwkJICovCisJCWxvY2FsX2FkZChlbnRyaWVzLCAmY3B1X2J1ZmZlci0+b3ZlcnJ1bik7CisKKwkJLyoKKwkJICogVGhlIGVudHJpZXMgd2lsbCBiZSB6ZXJvZWQgb3V0IHdoZW4gd2UgbW92ZSB0aGUKKwkJICogdGFpbCBwYWdlLgorCQkgKi8KKworCQkvKiBzdGlsbCBtb3JlIHRvIGRvICovCisJCWJyZWFrOworCisJY2FzZSBSQl9QQUdFX1VQREFURToKKwkJLyoKKwkJICogVGhpcyBpcyBhbiBpbnRlcnJ1cHQgdGhhdCBpbnRlcnJ1cHQgdGhlCisJCSAqIHByZXZpb3VzIHVwZGF0ZS4gU3RpbGwgbW9yZSB0byBkby4KKwkJICovCisJCWJyZWFrOworCWNhc2UgUkJfUEFHRV9OT1JNQUw6CisJCS8qCisJCSAqIEFuIGludGVycnVwdCBjYW1lIGluIGJlZm9yZSB0aGUgdXBkYXRlCisJCSAqIGFuZCBwcm9jZXNzZWQgdGhpcyBmb3IgdXMuCisJCSAqIE5vdGhpbmcgbGVmdCB0byBkby4KKwkJICovCisJCXJldHVybiAxOworCWNhc2UgUkJfUEFHRV9NT1ZFRDoKKwkJLyoKKwkJICogVGhlIHJlYWRlciBpcyBvbiBhbm90aGVyIENQVSBhbmQganVzdCBkaWQKKwkJICogYSBzd2FwIHdpdGggb3VyIG5leHRfcGFnZS4KKwkJICogVHJ5IGFnYWluLgorCQkgKi8KKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJUkJfV0FSTl9PTihjcHVfYnVmZmVyLCAxKTsgLyogV1RGPz8/ICovCisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIE5vdyB0aGF0IHdlIGFyZSBoZXJlLCB0aGUgb2xkIGhlYWQgcG9pbnRlciBpcworCSAqIHNldCB0byBVUERBVEUuIFRoaXMgd2lsbCBrZWVwIHRoZSByZWFkZXIgZnJvbQorCSAqIHN3YXBwaW5nIHRoZSBoZWFkIHBhZ2Ugd2l0aCB0aGUgcmVhZGVyIHBhZ2UuCisJICogVGhlIHJlYWRlciAob24gYW5vdGhlciBDUFUpIHdpbGwgc3BpbiB0aWxsCisJICogd2UgYXJlIGZpbmlzaGVkLgorCSAqCisJICogV2UganVzdCBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBpbnRlcnJ1cHRzCisJICogZG9pbmcgdGhlIGpvYi4gV2Ugd2lsbCBzZXQgdGhlIG5leHQgcG9pbnRlcgorCSAqIHRvIEhFQUQuIEFmdGVyIHRoYXQsIHdlIHNldCB0aGUgb2xkIHBvaW50ZXIKKwkgKiB0byBOT1JNQUwsIGJ1dCBvbmx5IGlmIGl0IHdhcyBIRUFEIGJlZm9yZS4KKwkgKiBvdGhlcndpc2Ugd2UgYXJlIGFuIGludGVycnVwdCwgYW5kIG9ubHkKKwkgKiB3YW50IHRoZSBvdXRlciBtb3N0IGNvbW1pdCB0byByZXNldCBpdC4KKwkgKi8KKwluZXdfaGVhZCA9IG5leHRfcGFnZTsKKwlyYl9pbmNfcGFnZShjcHVfYnVmZmVyLCAmbmV3X2hlYWQpOworCisJcmV0ID0gcmJfaGVhZF9wYWdlX3NldF9oZWFkKGNwdV9idWZmZXIsIG5ld19oZWFkLCBuZXh0X3BhZ2UsCisJCQkJICAgIFJCX1BBR0VfTk9STUFMKTsKKworCS8qCisJICogVmFsaWQgcmV0dXJucyBhcmU6CisJICogIEhFQUQgICAtIGFuIGludGVycnVwdCBjYW1lIGluIGFuZCBhbHJlYWR5IHNldCBpdC4KKwkgKiAgTk9STUFMIC0gT25lIG9mIHR3byB0aGluZ3M6CisJICogICAgICAgICAgICAxKSBXZSByZWFsbHkgc2V0IGl0LgorCSAqICAgICAgICAgICAgMikgQSBidW5jaCBvZiBpbnRlcnJ1cHRzIGNhbWUgaW4gYW5kIG1vdmVkCisJICogICAgICAgICAgICAgICB0aGUgcGFnZSBmb3J3YXJkIGFnYWluLgorCSAqLworCXN3aXRjaCAocmV0KSB7CisJY2FzZSBSQl9QQUdFX0hFQUQ6CisJY2FzZSBSQl9QQUdFX05PUk1BTDoKKwkJLyogT0sgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUkJfV0FSTl9PTihjcHVfYnVmZmVyLCAxKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogSXQgaXMgcG9zc2libGUgdGhhdCBhbiBpbnRlcnJ1cHQgY2FtZSBpbiwKKwkgKiBzZXQgdGhlIGhlYWQgdXAsIHRoZW4gbW9yZSBpbnRlcnJ1cHRzIGNhbWUgaW4KKwkgKiBhbmQgbW92ZWQgaXQgYWdhaW4uIFdoZW4gd2UgZ2V0IGJhY2sgaGVyZSwKKwkgKiB0aGUgcGFnZSB3b3VsZCBoYXZlIGJlZW4gc2V0IHRvIE5PUk1BTCBidXQgd2UKKwkgKiBqdXN0IHNldCBpdCBiYWNrIHRvIEhFQUQuCisJICoKKwkgKiBIb3cgZG8geW91IGRldGVjdCB0aGlzPyBXZWxsLCBpZiB0aGF0IGhhcHBlbmVkCisJICogdGhlIHRhaWwgcGFnZSB3b3VsZCBoYXZlIG1vdmVkLgorCSAqLworCWlmIChyZXQgPT0gUkJfUEFHRV9OT1JNQUwpIHsKKwkJLyoKKwkJICogSWYgdGhlIHRhaWwgaGFkIG1vdmVkIHBhc3NlZCBuZXh0LCB0aGVuIHdlIG5lZWQKKwkJICogdG8gcmVzZXQgdGhlIHBvaW50ZXIuCisJCSAqLworCQlpZiAoY3B1X2J1ZmZlci0+dGFpbF9wYWdlICE9IHRhaWxfcGFnZSAmJgorCQkgICAgY3B1X2J1ZmZlci0+dGFpbF9wYWdlICE9IG5leHRfcGFnZSkKKwkJCXJiX2hlYWRfcGFnZV9zZXRfbm9ybWFsKGNwdV9idWZmZXIsIG5ld19oZWFkLAorCQkJCQkJbmV4dF9wYWdlLAorCQkJCQkJUkJfUEFHRV9IRUFEKTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgd2FzIHRoZSBvdXRlciBtb3N0IGNvbW1pdCAodGhlIG9uZSB0aGF0CisJICogY2hhbmdlZCB0aGUgb3JpZ2luYWwgcG9pbnRlciBmcm9tIEhFQUQgdG8gVVBEQVRFKSwKKwkgKiB0aGVuIGl0IGlzIHVwIHRvIHVzIHRvIHJlc2V0IGl0IHRvIE5PUk1BTC4KKwkgKi8KKwlpZiAodHlwZSA9PSBSQl9QQUdFX0hFQUQpIHsKKwkJcmV0ID0gcmJfaGVhZF9wYWdlX3NldF9ub3JtYWwoY3B1X2J1ZmZlciwgbmV4dF9wYWdlLAorCQkJCQkgICAgICB0YWlsX3BhZ2UsCisJCQkJCSAgICAgIFJCX1BBR0VfVVBEQVRFKTsKKwkJaWYgKFJCX1dBUk5fT04oY3B1X2J1ZmZlciwKKwkJCSAgICAgICByZXQgIT0gUkJfUEFHRV9VUERBVEUpKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdW5zaWduZWQgcmJfY2FsY3VsYXRlX2V2ZW50X2xlbmd0aCh1bnNpZ25lZCBsZW5ndGgpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50IGV2ZW50OyAvKiBVc2VkIG9ubHkgZm9yIHNpemVvZiBhcnJheSAqLwpAQCAtMTE4NSw5ICsxNzc4LDYgQEAKIAlldmVudC0+dHlwZV9sZW4gPSBSSU5HQlVGX1RZUEVfUEFERElORzsKIAkvKiB0aW1lIGRlbHRhIG11c3QgYmUgbm9uIHplcm8gKi8KIAlldmVudC0+dGltZV9kZWx0YSA9IDE7Ci0JLyogQWNjb3VudCBmb3IgdGhpcyBhcyBhbiBlbnRyeSAqLwotCWxvY2FsX2luYygmdGFpbF9wYWdlLT5lbnRyaWVzKTsKLQlsb2NhbF9pbmMoJmNwdV9idWZmZXItPmVudHJpZXMpOwogCiAJLyogU2V0IHdyaXRlIHRvIGVuZCBvZiBidWZmZXIgKi8KIAlsZW5ndGggPSAodGFpbCArIGxlbmd0aCkgLSBCVUZfUEFHRV9TSVpFOwpAQCAtMTIwMCw5NiArMTc5MCw5MyBAQAogCSAgICAgc3RydWN0IGJ1ZmZlcl9wYWdlICpjb21taXRfcGFnZSwKIAkgICAgIHN0cnVjdCBidWZmZXJfcGFnZSAqdGFpbF9wYWdlLCB1NjQgKnRzKQogewotCXN0cnVjdCBidWZmZXJfcGFnZSAqbmV4dF9wYWdlLCAqaGVhZF9wYWdlLCAqcmVhZGVyX3BhZ2U7CiAJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIgPSBjcHVfYnVmZmVyLT5idWZmZXI7Ci0JYm9vbCBsb2NrX3Rha2VuID0gZmFsc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKm5leHRfcGFnZTsKKwlpbnQgcmV0OwogCiAJbmV4dF9wYWdlID0gdGFpbF9wYWdlOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCS8qCi0JICogU2luY2UgdGhlIHdyaXRlIHRvIHRoZSBidWZmZXIgaXMgc3RpbGwgbm90Ci0JICogZnVsbHkgbG9ja2xlc3MsIHdlIG11c3QgYmUgY2FyZWZ1bCB3aXRoIE5NSXMuCi0JICogVGhlIGxvY2tzIGluIHRoZSB3cml0ZXJzIGFyZSB0YWtlbiB3aGVuIGEgd3JpdGUKLQkgKiBjcm9zc2VzIHRvIGEgbmV3IHBhZ2UuIFRoZSBsb2NrcyBwcm90ZWN0IGFnYWluc3QKLQkgKiByYWNlcyB3aXRoIHRoZSByZWFkZXJzICh0aGlzIHdpbGwgc29vbiBiZSBmaXhlZAotCSAqIHdpdGggYSBsb2NrbGVzcyBzb2x1dGlvbikuCi0JICoKLQkgKiBCZWNhdXNlIHdlIGNhbiBub3QgcHJvdGVjdCBhZ2FpbnN0IE5NSXMsIGFuZCB3ZQotCSAqIHdhbnQgdG8ga2VlcCB0cmFjZXMgcmVlbnRyYW50LCB3ZSBuZWVkIHRvIG1hbmFnZQotCSAqIHdoYXQgaGFwcGVucyB3aGVuIHdlIGFyZSBpbiBhbiBOTUkuCi0JICoKLQkgKiBOTUlzIGNhbiBoYXBwZW4gYWZ0ZXIgd2UgdGFrZSB0aGUgbG9jay4KLQkgKiBJZiB3ZSBhcmUgaW4gYW4gTk1JLCBvbmx5IHRha2UgdGhlIGxvY2sKLQkgKiBpZiBpdCBpcyBub3QgYWxyZWFkeSB0YWtlbi4gT3RoZXJ3aXNlCi0JICogc2ltcGx5IGZhaWwuCi0JICovCi0JaWYgKHVubGlrZWx5KGluX25taSgpKSkgewotCQlpZiAoIV9fcmF3X3NwaW5fdHJ5bG9jaygmY3B1X2J1ZmZlci0+bG9jaykpIHsKLQkJCWNwdV9idWZmZXItPm5taV9kcm9wcGVkKys7Ci0JCQlnb3RvIG91dF9yZXNldDsKLQkJfQotCX0gZWxzZQotCQlfX3Jhd19zcGluX2xvY2soJmNwdV9idWZmZXItPmxvY2spOwotCi0JbG9ja190YWtlbiA9IHRydWU7Ci0KIAlyYl9pbmNfcGFnZShjcHVfYnVmZmVyLCAmbmV4dF9wYWdlKTsKIAotCWhlYWRfcGFnZSA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKLQlyZWFkZXJfcGFnZSA9IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlOwotCi0JLyogd2UgZ3JhYmJlZCB0aGUgbG9jayBiZWZvcmUgaW5jcmVtZW50aW5nICovCi0JaWYgKFJCX1dBUk5fT04oY3B1X2J1ZmZlciwgbmV4dF9wYWdlID09IHJlYWRlcl9wYWdlKSkKLQkJZ290byBvdXRfcmVzZXQ7Ci0KIAkvKgogCSAqIElmIGZvciBzb21lIHJlYXNvbiwgd2UgaGFkIGFuIGludGVycnVwdCBzdG9ybSB0aGF0IG1hZGUKIAkgKiBpdCBhbGwgdGhlIHdheSBhcm91bmQgdGhlIGJ1ZmZlciwgYmFpbCwgYW5kIHdhcm4KIAkgKiBhYm91dCBpdC4KIAkgKi8KIAlpZiAodW5saWtlbHkobmV4dF9wYWdlID09IGNvbW1pdF9wYWdlKSkgewotCQljcHVfYnVmZmVyLT5jb21taXRfb3ZlcnJ1bisrOworCQlsb2NhbF9pbmMoJmNwdV9idWZmZXItPmNvbW1pdF9vdmVycnVuKTsKIAkJZ290byBvdXRfcmVzZXQ7CiAJfQogCi0JaWYgKG5leHRfcGFnZSA9PSBoZWFkX3BhZ2UpIHsKLQkJaWYgKCEoYnVmZmVyLT5mbGFncyAmIFJCX0ZMX09WRVJXUklURSkpCi0JCQlnb3RvIG91dF9yZXNldDsKKwkvKgorCSAqIFRoaXMgaXMgd2hlcmUgdGhlIGZ1biBiZWdpbnMhCisJICoKKwkgKiBXZSBhcmUgZmlnaHRpbmcgYWdhaW5zdCByYWNlcyBiZXR3ZWVuIGEgcmVhZGVyIHRoYXQKKwkgKiBjb3VsZCBiZSBvbiBhbm90aGVyIENQVSB0cnlpbmcgdG8gc3dhcCBpdHMgcmVhZGVyCisJICogcGFnZSB3aXRoIHRoZSBidWZmZXIgaGVhZC4KKwkgKgorCSAqIFdlIGFyZSBhbHNvIGZpZ2h0aW5nIGFnYWluc3QgaW50ZXJydXB0cyBjb21pbmcgaW4gYW5kCisJICogbW92aW5nIHRoZSBoZWFkIG9yIHRhaWwgb24gdXMgYXMgd2VsbC4KKwkgKgorCSAqIElmIHRoZSBuZXh0IHBhZ2UgaXMgdGhlIGhlYWQgcGFnZSB0aGVuIHdlIGhhdmUgZmlsbGVkCisJICogdGhlIGJ1ZmZlciwgdW5sZXNzIHRoZSBjb21taXQgcGFnZSBpcyBzdGlsbCBvbiB0aGUKKwkgKiByZWFkZXIgcGFnZS4KKwkgKi8KKwlpZiAocmJfaXNfaGVhZF9wYWdlKGNwdV9idWZmZXIsIG5leHRfcGFnZSwgJnRhaWxfcGFnZS0+bGlzdCkpIHsKIAotCQkvKiB0YWlsX3BhZ2UgaGFzIG5vdCBtb3ZlZCB5ZXQ/ICovCi0JCWlmICh0YWlsX3BhZ2UgPT0gY3B1X2J1ZmZlci0+dGFpbF9wYWdlKSB7Ci0JCQkvKiBjb3VudCBvdmVyZmxvd3MgKi8KLQkJCWNwdV9idWZmZXItPm92ZXJydW4gKz0KLQkJCQlsb2NhbF9yZWFkKCZoZWFkX3BhZ2UtPmVudHJpZXMpOworCQkvKgorCQkgKiBJZiB0aGUgY29tbWl0IGlzIG5vdCBvbiB0aGUgcmVhZGVyIHBhZ2UsIHRoZW4KKwkJICogbW92ZSB0aGUgaGVhZGVyIHBhZ2UuCisJCSAqLworCQlpZiAoIXJiX2lzX3JlYWRlcl9wYWdlKGNwdV9idWZmZXItPmNvbW1pdF9wYWdlKSkgeworCQkJLyoKKwkJCSAqIElmIHdlIGFyZSBub3QgaW4gb3ZlcndyaXRlIG1vZGUsCisJCQkgKiB0aGlzIGlzIGVhc3ksIGp1c3Qgc3RvcCBoZXJlLgorCQkJICovCisJCQlpZiAoIShidWZmZXItPmZsYWdzICYgUkJfRkxfT1ZFUldSSVRFKSkKKwkJCQlnb3RvIG91dF9yZXNldDsKIAotCQkJcmJfaW5jX3BhZ2UoY3B1X2J1ZmZlciwgJmhlYWRfcGFnZSk7Ci0JCQljcHVfYnVmZmVyLT5oZWFkX3BhZ2UgPSBoZWFkX3BhZ2U7Ci0JCQljcHVfYnVmZmVyLT5oZWFkX3BhZ2UtPnJlYWQgPSAwOworCQkJcmV0ID0gcmJfaGFuZGxlX2hlYWRfcGFnZShjcHVfYnVmZmVyLAorCQkJCQkJICB0YWlsX3BhZ2UsCisJCQkJCQkgIG5leHRfcGFnZSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9yZXNldDsKKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXRfYWdhaW47CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogV2UgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUgdG9vLiBUaGUKKwkJCSAqIGNvbW1pdCBwYWdlIGNvdWxkIHN0aWxsIGJlIG9uIHRoZSByZWFkZXIKKwkJCSAqIHBhZ2UuIFdlIGNvdWxkIGhhdmUgYSBzbWFsbCBidWZmZXIsIGFuZAorCQkJICogaGF2ZSBmaWxsZWQgdXAgdGhlIGJ1ZmZlciB3aXRoIGV2ZW50cworCQkJICogZnJvbSBpbnRlcnJ1cHRzIGFuZCBzdWNoLCBhbmQgd3JhcHBlZC4KKwkJCSAqCisJCQkgKiBOb3RlLCBpZiB0aGUgdGFpbCBwYWdlIGlzIGFsc28gdGhlIG9uIHRoZQorCQkJICogcmVhZGVyX3BhZ2UsIHdlIGxldCBpdCBtb3ZlIG91dC4KKwkJCSAqLworCQkJaWYgKHVubGlrZWx5KChjcHVfYnVmZmVyLT5jb21taXRfcGFnZSAhPQorCQkJCSAgICAgIGNwdV9idWZmZXItPnRhaWxfcGFnZSkgJiYKKwkJCQkgICAgIChjcHVfYnVmZmVyLT5jb21taXRfcGFnZSA9PQorCQkJCSAgICAgIGNwdV9idWZmZXItPnJlYWRlcl9wYWdlKSkpIHsKKwkJCQlsb2NhbF9pbmMoJmNwdV9idWZmZXItPmNvbW1pdF9vdmVycnVuKTsKKwkJCQlnb3RvIG91dF9yZXNldDsKKwkJCX0KIAkJfQogCX0KIAotCS8qCi0JICogSWYgdGhlIHRhaWwgcGFnZSBpcyBzdGlsbCB0aGUgc2FtZSBhcyB3aGF0IHdlIHRoaW5rCi0JICogaXQgaXMsIHRoZW4gaXQgaXMgdXAgdG8gdXMgdG8gdXBkYXRlIHRoZSB0YWlsCi0JICogcG9pbnRlci4KLQkgKi8KLQlpZiAodGFpbF9wYWdlID09IGNwdV9idWZmZXItPnRhaWxfcGFnZSkgewotCQlsb2NhbF9zZXQoJm5leHRfcGFnZS0+d3JpdGUsIDApOwotCQlsb2NhbF9zZXQoJm5leHRfcGFnZS0+ZW50cmllcywgMCk7Ci0JCWxvY2FsX3NldCgmbmV4dF9wYWdlLT5wYWdlLT5jb21taXQsIDApOwotCQljcHVfYnVmZmVyLT50YWlsX3BhZ2UgPSBuZXh0X3BhZ2U7Ci0KLQkJLyogcmVyZWFkIHRoZSB0aW1lIHN0YW1wICovCisJcmV0ID0gcmJfdGFpbF9wYWdlX3VwZGF0ZShjcHVfYnVmZmVyLCB0YWlsX3BhZ2UsIG5leHRfcGFnZSk7CisJaWYgKHJldCkgeworCQkvKgorCQkgKiBOZXN0ZWQgY29tbWl0cyBhbHdheXMgaGF2ZSB6ZXJvIGRlbHRhcywgc28KKwkJICoganVzdCByZXJlYWQgdGhlIHRpbWUgc3RhbXAKKwkJICovCiAJCSp0cyA9IHJiX3RpbWVfc3RhbXAoYnVmZmVyLCBjcHVfYnVmZmVyLT5jcHUpOwotCQljcHVfYnVmZmVyLT50YWlsX3BhZ2UtPnBhZ2UtPnRpbWVfc3RhbXAgPSAqdHM7CisJCW5leHRfcGFnZS0+cGFnZS0+dGltZV9zdGFtcCA9ICp0czsKIAl9CiAKLQlyYl9yZXNldF90YWlsKGNwdV9idWZmZXIsIHRhaWxfcGFnZSwgdGFpbCwgbGVuZ3RoKTsKKyBvdXRfYWdhaW46CiAKLQlfX3Jhd19zcGluX3VubG9jaygmY3B1X2J1ZmZlci0+bG9jayk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJiX3Jlc2V0X3RhaWwoY3B1X2J1ZmZlciwgdGFpbF9wYWdlLCB0YWlsLCBsZW5ndGgpOwogCiAJLyogZmFpbCBhbmQgbGV0IHRoZSBjYWxsZXIgdHJ5IGFnYWluICovCiAJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CkBAIC0xMjk4LDkgKzE4ODUsNiBAQAogCS8qIHJlc2V0IHdyaXRlICovCiAJcmJfcmVzZXRfdGFpbChjcHVfYnVmZmVyLCB0YWlsX3BhZ2UsIHRhaWwsIGxlbmd0aCk7CiAKLQlpZiAobGlrZWx5KGxvY2tfdGFrZW4pKQotCQlfX3Jhd19zcGluX3VubG9jaygmY3B1X2J1ZmZlci0+bG9jayk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xMzE3LDYgKzE5MDEsOSBAQAogCWJhcnJpZXIoKTsKIAl0YWlsX3BhZ2UgPSBjcHVfYnVmZmVyLT50YWlsX3BhZ2U7CiAJd3JpdGUgPSBsb2NhbF9hZGRfcmV0dXJuKGxlbmd0aCwgJnRhaWxfcGFnZS0+d3JpdGUpOworCisJLyogc2V0IHdyaXRlIHRvIG9ubHkgdGhlIGluZGV4IG9mIHRoZSB3cml0ZSAqLworCXdyaXRlICY9IFJCX1dSSVRFX01BU0s7CiAJdGFpbCA9IHdyaXRlIC0gbGVuZ3RoOwogCiAJLyogU2VlIGlmIHdlIHNob3QgcGFzcyB0aGUgZW5kIG9mIHRoaXMgYnVmZmVyIHBhZ2UgKi8KQEAgLTEzNjEsMTIgKzE5NDgsMTYgQEAKIAlicGFnZSA9IGNwdV9idWZmZXItPnRhaWxfcGFnZTsKIAogCWlmIChicGFnZS0+cGFnZSA9PSAodm9pZCAqKWFkZHIgJiYgcmJfcGFnZV93cml0ZShicGFnZSkgPT0gb2xkX2luZGV4KSB7CisJCXVuc2lnbmVkIGxvbmcgd3JpdGVfbWFzayA9CisJCQlsb2NhbF9yZWFkKCZicGFnZS0+d3JpdGUpICYgflJCX1dSSVRFX01BU0s7CiAJCS8qCiAJCSAqIFRoaXMgaXMgb24gdGhlIHRhaWwgcGFnZS4gSXQgaXMgcG9zc2libGUgdGhhdAogCQkgKiBhIHdyaXRlIGNvdWxkIGNvbWUgaW4gYW5kIG1vdmUgdGhlIHRhaWwgcGFnZQogCQkgKiBhbmQgd3JpdGUgdG8gdGhlIG5leHQgcGFnZS4gVGhhdCBpcyBmaW5lCiAJCSAqIGJlY2F1c2Ugd2UganVzdCBzaG9ydGVuIHdoYXQgaXMgb24gdGhpcyBwYWdlLgogCQkgKi8KKwkJb2xkX2luZGV4ICs9IHdyaXRlX21hc2s7CisJCW5ld19pbmRleCArPSB3cml0ZV9tYXNrOwogCQlpbmRleCA9IGxvY2FsX2NtcHhjaGcoJmJwYWdlLT53cml0ZSwgb2xkX2luZGV4LCBuZXdfaW5kZXgpOwogCQlpZiAoaW5kZXggPT0gb2xkX2luZGV4KQogCQkJcmV0dXJuIDE7CkBAIC0xNDgyLDcgKzIwNzMsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKLXJiX3Jlc2VydmVfbmV4dF9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKK3JiX3Jlc2VydmVfbmV4dF9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKKwkJICAgICAgc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CkBAIC0xNDkyLDYgKzIwODQsMjEgQEAKIAogCXJiX3N0YXJ0X2NvbW1pdChjcHVfYnVmZmVyKTsKIAorI2lmZGVmIENPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQCisJLyoKKwkgKiBEdWUgdG8gdGhlIGFiaWxpdHkgdG8gc3dhcCBhIGNwdSBidWZmZXIgZnJvbSBhIGJ1ZmZlcgorCSAqIGl0IGlzIHBvc3NpYmxlIGl0IHdhcyBzd2FwcGVkIGJlZm9yZSB3ZSBjb21taXR0ZWQuCisJICogKGNvbW1pdHRpbmcgc3RvcHMgYSBzd2FwKS4gV2UgY2hlY2sgZm9yIGl0IGhlcmUgYW5kCisJICogaWYgaXQgaGFwcGVuZWQsIHdlIGhhdmUgdG8gZmFpbCB0aGUgd3JpdGUuCisJICovCisJYmFycmllcigpOworCWlmICh1bmxpa2VseShBQ0NFU1NfT05DRShjcHVfYnVmZmVyLT5idWZmZXIpICE9IGJ1ZmZlcikpIHsKKwkJbG9jYWxfZGVjKCZjcHVfYnVmZmVyLT5jb21taXR0aW5nKTsKKwkJbG9jYWxfZGVjKCZjcHVfYnVmZmVyLT5jb21taXRzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorI2VuZGlmCisKIAlsZW5ndGggPSByYl9jYWxjdWxhdGVfZXZlbnRfbGVuZ3RoKGxlbmd0aCk7CiAgYWdhaW46CiAJLyoKQEAgLTE2NTIsNyArMjI1OSw3IEBACiAJaWYgKGxlbmd0aCA+IEJVRl9NQVhfREFUQV9TSVpFKQogCQlnb3RvIG91dDsKIAotCWV2ZW50ID0gcmJfcmVzZXJ2ZV9uZXh0X2V2ZW50KGNwdV9idWZmZXIsIGxlbmd0aCk7CisJZXZlbnQgPSByYl9yZXNlcnZlX25leHRfZXZlbnQoYnVmZmVyLCBjcHVfYnVmZmVyLCBsZW5ndGgpOwogCWlmICghZXZlbnQpCiAJCWdvdG8gb3V0OwogCkBAIC0xNjc1LDE4ICsyMjgyLDIzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUpOwogCi1zdGF0aWMgdm9pZCByYl9jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCitzdGF0aWMgdm9pZAorcmJfdXBkYXRlX3dyaXRlX3N0YW1wKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAogCQkgICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQogewotCWxvY2FsX2luYygmY3B1X2J1ZmZlci0+ZW50cmllcyk7Ci0KIAkvKgogCSAqIFRoZSBldmVudCBmaXJzdCBpbiB0aGUgY29tbWl0IHF1ZXVlIHVwZGF0ZXMgdGhlCiAJICogdGltZSBzdGFtcC4KIAkgKi8KIAlpZiAocmJfZXZlbnRfaXNfY29tbWl0KGNwdV9idWZmZXIsIGV2ZW50KSkKIAkJY3B1X2J1ZmZlci0+d3JpdGVfc3RhbXAgKz0gZXZlbnQtPnRpbWVfZGVsdGE7Cit9CiAKK3N0YXRpYyB2b2lkIHJiX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciwKKwkJICAgICAgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKK3sKKwlsb2NhbF9pbmMoJmNwdV9idWZmZXItPmVudHJpZXMpOworCXJiX3VwZGF0ZV93cml0ZV9zdGFtcChjcHVfYnVmZmVyLCBldmVudCk7CiAJcmJfZW5kX2NvbW1pdChjcHVfYnVmZmVyKTsKIH0KIApAQCAtMTczMywzMiArMjM0NSw1NyBAQAogCQlldmVudC0+dGltZV9kZWx0YSA9IDE7CiB9CiAKLS8qKgotICogcmluZ19idWZmZXJfZXZlbnRfZGlzY2FyZCAtIGRpc2NhcmQgYW55IGV2ZW50IGluIHRoZSByaW5nIGJ1ZmZlcgotICogQGV2ZW50OiB0aGUgZXZlbnQgdG8gZGlzY2FyZAotICoKLSAqIFNvbWV0aW1lcyBhIGV2ZW50IHRoYXQgaXMgaW4gdGhlIHJpbmcgYnVmZmVyIG5lZWRzIHRvIGJlIGlnbm9yZWQuCi0gKiBUaGlzIGZ1bmN0aW9uIGxldHMgdGhlIHVzZXIgZGlzY2FyZCBhbiBldmVudCBpbiB0aGUgcmluZyBidWZmZXIKLSAqIGFuZCB0aGVuIHRoYXQgZXZlbnQgd2lsbCBub3QgYmUgcmVhZCBsYXRlci4KLSAqCi0gKiBOb3RlLCBpdCBpcyB1cCB0byB0aGUgdXNlciB0byBiZSBjYXJlZnVsIHdpdGggdGhpcywgYW5kIHByb3RlY3QKLSAqIGFnYWluc3QgcmFjZXMuIElmIHRoZSB1c2VyIGRpc2NhcmRzIGFuIGV2ZW50IHRoYXQgaGFzIGJlZW4gY29uc3VtZWQKLSAqIGl0IGlzIHBvc3NpYmxlIHRoYXQgaXQgY291bGQgY29ycnVwdCB0aGUgcmluZyBidWZmZXIuCisvKgorICogRGVjcmVtZW50IHRoZSBlbnRyaWVzIHRvIHRoZSBwYWdlIHRoYXQgYW4gZXZlbnQgaXMgb24uCisgKiBUaGUgZXZlbnQgZG9lcyBub3QgZXZlbiBuZWVkIHRvIGV4aXN0LCBvbmx5IHRoZSBwb2ludGVyCisgKiB0byB0aGUgcGFnZSBpdCBpcyBvbi4gVGhpcyBtYXkgb25seSBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjb21taXQKKyAqIHRha2VzIHBsYWNlLgogICovCi12b2lkIHJpbmdfYnVmZmVyX2V2ZW50X2Rpc2NhcmQoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmJfZGVjcmVtZW50X2VudHJ5KHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAorCQkgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQogewotCXJiX2V2ZW50X2Rpc2NhcmQoZXZlbnQpOworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWV2ZW50OworCXN0cnVjdCBidWZmZXJfcGFnZSAqYnBhZ2UgPSBjcHVfYnVmZmVyLT5jb21taXRfcGFnZTsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKnN0YXJ0OworCisJYWRkciAmPSBQQUdFX01BU0s7CisKKwkvKiBEbyB0aGUgbGlrZWx5IGNhc2UgZmlyc3QgKi8KKwlpZiAobGlrZWx5KGJwYWdlLT5wYWdlID09ICh2b2lkICopYWRkcikpIHsKKwkJbG9jYWxfZGVjKCZicGFnZS0+ZW50cmllcyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEJlY2F1c2UgdGhlIGNvbW1pdCBwYWdlIG1heSBiZSBvbiB0aGUgcmVhZGVyIHBhZ2Ugd2UKKwkgKiBzdGFydCB3aXRoIHRoZSBuZXh0IHBhZ2UgYW5kIGNoZWNrIHRoZSBlbmQgbG9vcCB0aGVyZS4KKwkgKi8KKwlyYl9pbmNfcGFnZShjcHVfYnVmZmVyLCAmYnBhZ2UpOworCXN0YXJ0ID0gYnBhZ2U7CisJZG8geworCQlpZiAoYnBhZ2UtPnBhZ2UgPT0gKHZvaWQgKilhZGRyKSB7CisJCQlsb2NhbF9kZWMoJmJwYWdlLT5lbnRyaWVzKTsKKwkJCXJldHVybjsKKwkJfQorCQlyYl9pbmNfcGFnZShjcHVfYnVmZmVyLCAmYnBhZ2UpOworCX0gd2hpbGUgKGJwYWdlICE9IHN0YXJ0KTsKKworCS8qIGNvbW1pdCBub3QgcGFydCBvZiB0aGlzIGJ1ZmZlcj8/ICovCisJUkJfV0FSTl9PTihjcHVfYnVmZmVyLCAxKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2V2ZW50X2Rpc2NhcmQpOwogCiAvKioKICAqIHJpbmdfYnVmZmVyX2NvbW1pdF9kaXNjYXJkIC0gZGlzY2FyZCBhbiBldmVudCB0aGF0IGhhcyBub3QgYmVlbiBjb21taXR0ZWQKICAqIEBidWZmZXI6IHRoZSByaW5nIGJ1ZmZlcgogICogQGV2ZW50OiBub24gY29tbWl0dGVkIGV2ZW50IHRvIGRpc2NhcmQKICAqCi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gcmluZ19idWZmZXJfZXZlbnRfZGlzY2FyZCBidXQgbXVzdCBvbmx5IGJlCi0gKiBwZXJmb3JtZWQgb24gYW4gZXZlbnQgdGhhdCBoYXMgbm90IGJlZW4gY29tbWl0dGVkIHlldC4gVGhlIGRpZmZlcmVuY2UKLSAqIGlzIHRoYXQgdGhpcyB3aWxsIGFsc28gdHJ5IHRvIGZyZWUgdGhlIGV2ZW50IGZyb20gdGhlIHJpbmcgYnVmZmVyCisgKiBTb21ldGltZXMgYW4gZXZlbnQgdGhhdCBpcyBpbiB0aGUgcmluZyBidWZmZXIgbmVlZHMgdG8gYmUgaWdub3JlZC4KKyAqIFRoaXMgZnVuY3Rpb24gbGV0cyB0aGUgdXNlciBkaXNjYXJkIGFuIGV2ZW50IGluIHRoZSByaW5nIGJ1ZmZlcgorICogYW5kIHRoZW4gdGhhdCBldmVudCB3aWxsIG5vdCBiZSByZWFkIGxhdGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyBpZiBpdCBpcyBjYWxsZWQgYmVmb3JlIHRoZSB0aGUgaXRlbSBoYXMgYmVlbgorICogY29tbWl0dGVkLiBJdCB3aWxsIHRyeSB0byBmcmVlIHRoZSBldmVudCBmcm9tIHRoZSByaW5nIGJ1ZmZlcgogICogaWYgYW5vdGhlciBldmVudCBoYXMgbm90IGJlZW4gYWRkZWQgYmVoaW5kIGl0LgogICoKICAqIElmIGFub3RoZXIgZXZlbnQgaGFzIGJlZW4gYWRkZWQgYmVoaW5kIGl0LCBpdCB3aWxsIHNldCB0aGUgZXZlbnQKQEAgLTE3ODYsMTQgKzI0MjMsMTUgQEAKIAkgKi8KIAlSQl9XQVJOX09OKGJ1ZmZlciwgIWxvY2FsX3JlYWQoJmNwdV9idWZmZXItPmNvbW1pdHRpbmcpKTsKIAorCXJiX2RlY3JlbWVudF9lbnRyeShjcHVfYnVmZmVyLCBldmVudCk7CiAJaWYgKHJiX3RyeV90b19kaXNjYXJkKGNwdV9idWZmZXIsIGV2ZW50KSkKIAkJZ290byBvdXQ7CiAKIAkvKgogCSAqIFRoZSBjb21taXQgaXMgc3RpbGwgdmlzaWJsZSBieSB0aGUgcmVhZGVyLCBzbyB3ZQotCSAqIG11c3QgaW5jcmVtZW50IGVudHJpZXMuCisJICogbXVzdCBzdGlsbCB1cGRhdGUgdGhlIHRpbWVzdGFtcC4KIAkgKi8KLQlsb2NhbF9pbmMoJmNwdV9idWZmZXItPmVudHJpZXMpOworCXJiX3VwZGF0ZV93cml0ZV9zdGFtcChjcHVfYnVmZmVyLCBldmVudCk7CiAgb3V0OgogCXJiX2VuZF9jb21taXQoY3B1X2J1ZmZlcik7CiAKQEAgLTE4NTQsNyArMjQ5Miw3IEBACiAJaWYgKGxlbmd0aCA+IEJVRl9NQVhfREFUQV9TSVpFKQogCQlnb3RvIG91dDsKIAotCWV2ZW50ID0gcmJfcmVzZXJ2ZV9uZXh0X2V2ZW50KGNwdV9idWZmZXIsIGxlbmd0aCk7CisJZXZlbnQgPSByYl9yZXNlcnZlX25leHRfZXZlbnQoYnVmZmVyLCBjcHVfYnVmZmVyLCBsZW5ndGgpOwogCWlmICghZXZlbnQpCiAJCWdvdG8gb3V0OwogCkBAIC0xODc1LDkgKzI1MTMsMTMgQEAKIHN0YXRpYyBpbnQgcmJfcGVyX2NwdV9lbXB0eShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKIHsKIAlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKnJlYWRlciA9IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlOwotCXN0cnVjdCBidWZmZXJfcGFnZSAqaGVhZCA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKKwlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKmhlYWQgPSByYl9zZXRfaGVhZF9wYWdlKGNwdV9idWZmZXIpOwogCXN0cnVjdCBidWZmZXJfcGFnZSAqY29tbWl0ID0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2U7CiAKKwkvKiBJbiBjYXNlIG9mIGVycm9yLCBoZWFkIHdpbGwgYmUgTlVMTCAqLworCWlmICh1bmxpa2VseSghaGVhZCkpCisJCXJldHVybiAxOworCiAJcmV0dXJuIHJlYWRlci0+cmVhZCA9PSByYl9wYWdlX2NvbW1pdChyZWFkZXIpICYmCiAJCShjb21taXQgPT0gcmVhZGVyIHx8CiAJCSAoY29tbWl0ID09IGhlYWQgJiYKQEAgLTE5NjgsNyArMjYxMCw3IEBACiAJCXJldHVybiAwOwogCiAJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOwotCXJldCA9IChsb2NhbF9yZWFkKCZjcHVfYnVmZmVyLT5lbnRyaWVzKSAtIGNwdV9idWZmZXItPm92ZXJydW4pCisJcmV0ID0gKGxvY2FsX3JlYWQoJmNwdV9idWZmZXItPmVudHJpZXMpIC0gbG9jYWxfcmVhZCgmY3B1X2J1ZmZlci0+b3ZlcnJ1bikpCiAJCS0gY3B1X2J1ZmZlci0+cmVhZDsKIAogCXJldHVybiByZXQ7CkBAIC0xOTg5LDMzICsyNjMxLDEzIEBACiAJCXJldHVybiAwOwogCiAJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOwotCXJldCA9IGNwdV9idWZmZXItPm92ZXJydW47CisJcmV0ID0gbG9jYWxfcmVhZCgmY3B1X2J1ZmZlci0+b3ZlcnJ1bik7CiAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUpOwogCiAvKioKLSAqIHJpbmdfYnVmZmVyX25taV9kcm9wcGVkX2NwdSAtIGdldCB0aGUgbnVtYmVyIG9mIG5taXMgdGhhdCB3ZXJlIGRyb3BwZWQKLSAqIEBidWZmZXI6IFRoZSByaW5nIGJ1ZmZlcgotICogQGNwdTogVGhlIHBlciBDUFUgYnVmZmVyIHRvIGdldCB0aGUgbnVtYmVyIG9mIG92ZXJydW5zIGZyb20KLSAqLwotdW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9ubWlfZHJvcHBlZF9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCi17Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7Ci0JdW5zaWduZWQgbG9uZyByZXQ7Ci0KLQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXItPmNwdW1hc2spKQotCQlyZXR1cm4gMDsKLQotCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKLQlyZXQgPSBjcHVfYnVmZmVyLT5ubWlfZHJvcHBlZDsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9ubWlfZHJvcHBlZF9jcHUpOwotCi0vKioKICAqIHJpbmdfYnVmZmVyX2NvbW1pdF9vdmVycnVuX2NwdSAtIGdldCB0aGUgbnVtYmVyIG9mIG92ZXJydW5zIGNhdXNlZCBieSBjb21taXRzCiAgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIKICAqIEBjcHU6IFRoZSBwZXIgQ1BVIGJ1ZmZlciB0byBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBmcm9tCkBAIC0yMDMwLDcgKzI2NTIsNyBAQAogCQlyZXR1cm4gMDsKIAogCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKLQlyZXQgPSBjcHVfYnVmZmVyLT5jb21taXRfb3ZlcnJ1bjsKKwlyZXQgPSBsb2NhbF9yZWFkKCZjcHVfYnVmZmVyLT5jb21taXRfb3ZlcnJ1bik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjA1Myw3ICsyNjc1LDcgQEAKIAlmb3JfZWFjaF9idWZmZXJfY3B1KGJ1ZmZlciwgY3B1KSB7CiAJCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKIAkJZW50cmllcyArPSAobG9jYWxfcmVhZCgmY3B1X2J1ZmZlci0+ZW50cmllcykgLQotCQkJICAgIGNwdV9idWZmZXItPm92ZXJydW4pIC0gY3B1X2J1ZmZlci0+cmVhZDsKKwkJCSAgICBsb2NhbF9yZWFkKCZjcHVfYnVmZmVyLT5vdmVycnVuKSkgLSBjcHVfYnVmZmVyLT5yZWFkOwogCX0KIAogCXJldHVybiBlbnRyaWVzOwpAQCAtMjA3Niw3ICsyNjk4LDcgQEAKIAkvKiBpZiB5b3UgY2FyZSBhYm91dCB0aGlzIGJlaW5nIGNvcnJlY3QsIGxvY2sgdGhlIGJ1ZmZlciAqLwogCWZvcl9lYWNoX2J1ZmZlcl9jcHUoYnVmZmVyLCBjcHUpIHsKIAkJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOwotCQlvdmVycnVucyArPSBjcHVfYnVmZmVyLT5vdmVycnVuOworCQlvdmVycnVucyArPSBsb2NhbF9yZWFkKCZjcHVfYnVmZmVyLT5vdmVycnVuKTsKIAl9CiAKIAlyZXR1cm4gb3ZlcnJ1bnM7CkBAIC0yMDg5LDggKzI3MTEsMTAgQEAKIAogCS8qIEl0ZXJhdG9yIHVzYWdlIGlzIGV4cGVjdGVkIHRvIGhhdmUgcmVjb3JkIGRpc2FibGVkICovCiAJaWYgKGxpc3RfZW1wdHkoJmNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5saXN0KSkgewotCQlpdGVyLT5oZWFkX3BhZ2UgPSBjcHVfYnVmZmVyLT5oZWFkX3BhZ2U7Ci0JCWl0ZXItPmhlYWQgPSBjcHVfYnVmZmVyLT5oZWFkX3BhZ2UtPnJlYWQ7CisJCWl0ZXItPmhlYWRfcGFnZSA9IHJiX3NldF9oZWFkX3BhZ2UoY3B1X2J1ZmZlcik7CisJCWlmICh1bmxpa2VseSghaXRlci0+aGVhZF9wYWdlKSkKKwkJCXJldHVybjsKKwkJaXRlci0+aGVhZCA9IGl0ZXItPmhlYWRfcGFnZS0+cmVhZDsKIAl9IGVsc2UgewogCQlpdGVyLT5oZWFkX3BhZ2UgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZTsKIAkJaXRlci0+aGVhZCA9IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5yZWFkOwpAQCAtMjIwNyw2ICsyODMxLDcgQEAKIAlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKnJlYWRlciA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbnJfbG9vcHMgPSAwOworCWludCByZXQ7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJX19yYXdfc3Bpbl9sb2NrKCZjcHVfYnVmZmVyLT5sb2NrKTsKQEAgLTIyNDAsMzAgKzI4NjUsNTYgQEAKIAkJZ290byBvdXQ7CiAKIAkvKgotCSAqIFNwbGljZSB0aGUgZW1wdHkgcmVhZGVyIHBhZ2UgaW50byB0aGUgbGlzdCBhcm91bmQgdGhlIGhlYWQuCiAJICogUmVzZXQgdGhlIHJlYWRlciBwYWdlIHRvIHNpemUgemVyby4KIAkgKi8KLQotCXJlYWRlciA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKLQljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+bGlzdC5uZXh0ID0gcmVhZGVyLT5saXN0Lm5leHQ7Ci0JY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPmxpc3QucHJldiA9IHJlYWRlci0+bGlzdC5wcmV2OwotCiAJbG9jYWxfc2V0KCZjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+d3JpdGUsIDApOwogCWxvY2FsX3NldCgmY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPmVudHJpZXMsIDApOwogCWxvY2FsX3NldCgmY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnBhZ2UtPmNvbW1pdCwgMCk7CiAKLQkvKiBNYWtlIHRoZSByZWFkZXIgcGFnZSBub3cgcmVwbGFjZSB0aGUgaGVhZCAqLwotCXJlYWRlci0+bGlzdC5wcmV2LT5uZXh0ID0gJmNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5saXN0OwotCXJlYWRlci0+bGlzdC5uZXh0LT5wcmV2ID0gJmNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5saXN0OworIHNwaW46CisJLyoKKwkgKiBTcGxpY2UgdGhlIGVtcHR5IHJlYWRlciBwYWdlIGludG8gdGhlIGxpc3QgYXJvdW5kIHRoZSBoZWFkLgorCSAqLworCXJlYWRlciA9IHJiX3NldF9oZWFkX3BhZ2UoY3B1X2J1ZmZlcik7CisJY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPmxpc3QubmV4dCA9IHJlYWRlci0+bGlzdC5uZXh0OworCWNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5saXN0LnByZXYgPSByZWFkZXItPmxpc3QucHJldjsKIAogCS8qCi0JICogSWYgdGhlIHRhaWwgaXMgb24gdGhlIHJlYWRlciwgdGhlbiB3ZSBtdXN0IHNldCB0aGUgaGVhZAotCSAqIHRvIHRoZSBpbnNlcnRlZCBwYWdlLCBvdGhlcndpc2Ugd2Ugc2V0IGl0IG9uZSBiZWZvcmUuCisJICogY3B1X2J1ZmZlci0+cGFnZXMganVzdCBuZWVkcyB0byBwb2ludCB0byB0aGUgYnVmZmVyLCBpdAorCSAqICBoYXMgbm8gc3BlY2lmaWMgYnVmZmVyIHBhZ2UgdG8gcG9pbnQgdG8uIExldHMgbW92ZSBpdCBvdXQKKwkgKiAgb2Ygb3VyIHdheSBzbyB3ZSBkb24ndCBhY2NpZGVudGx5IHN3YXAgaXQuCiAJICovCi0JY3B1X2J1ZmZlci0+aGVhZF9wYWdlID0gY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2U7CisJY3B1X2J1ZmZlci0+cGFnZXMgPSByZWFkZXItPmxpc3QucHJldjsKIAotCWlmIChjcHVfYnVmZmVyLT5jb21taXRfcGFnZSAhPSByZWFkZXIpCi0JCXJiX2luY19wYWdlKGNwdV9idWZmZXIsICZjcHVfYnVmZmVyLT5oZWFkX3BhZ2UpOworCS8qIFRoZSByZWFkZXIgcGFnZSB3aWxsIGJlIHBvaW50aW5nIHRvIHRoZSBuZXcgaGVhZCAqLworCXJiX3NldF9saXN0X3RvX2hlYWQoY3B1X2J1ZmZlciwgJmNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5saXN0KTsKKworCS8qCisJICogSGVyZSdzIHRoZSB0cmlja3kgcGFydC4KKwkgKgorCSAqIFdlIG5lZWQgdG8gbW92ZSB0aGUgcG9pbnRlciBwYXN0IHRoZSBoZWFkZXIgcGFnZS4KKwkgKiBCdXQgd2UgY2FuIG9ubHkgZG8gdGhhdCBpZiBhIHdyaXRlciBpcyBub3QgY3VycmVudGx5CisJICogbW92aW5nIGl0LiBUaGUgcGFnZSBiZWZvcmUgdGhlIGhlYWRlciBwYWdlIGhhcyB0aGUKKwkgKiBmbGFnIGJpdCAnMScgc2V0IGlmIGl0IGlzIHBvaW50aW5nIHRvIHRoZSBwYWdlIHdlIHdhbnQuCisJICogYnV0IGlmIHRoZSB3cml0ZXIgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgbW92aW5nIGl0CisJICogdGhhbiBpdCB3aWxsIGJlICcyJyBvciBhbHJlYWR5IG1vdmVkICcwJy4KKwkgKi8KKworCXJldCA9IHJiX2hlYWRfcGFnZV9yZXBsYWNlKHJlYWRlciwgY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UpOworCisJLyoKKwkgKiBJZiB3ZSBkaWQgbm90IGNvbnZlcnQgaXQsIHRoZW4gd2UgbXVzdCB0cnkgYWdhaW4uCisJICovCisJaWYgKCFyZXQpCisJCWdvdG8gc3BpbjsKKworCS8qCisJICogWWVhaCEgV2Ugc3VjY2VlZGVkIGluIHJlcGxhY2luZyB0aGUgcGFnZS4KKwkgKgorCSAqIE5vdyBtYWtlIHRoZSBuZXcgaGVhZCBwb2ludCBiYWNrIHRvIHRoZSByZWFkZXIgcGFnZS4KKwkgKi8KKwlyZWFkZXItPmxpc3QubmV4dC0+cHJldiA9ICZjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+bGlzdDsKKwlyYl9pbmNfcGFnZShjcHVfYnVmZmVyLCAmY3B1X2J1ZmZlci0+aGVhZF9wYWdlKTsKIAogCS8qIEZpbmFsbHkgdXBkYXRlIHRoZSByZWFkZXIgcGFnZSB0byB0aGUgbmV3IGhlYWQgKi8KIAljcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSA9IHJlYWRlcjsKQEAgLTIyOTIsOCArMjk0Myw3IEBACiAKIAlldmVudCA9IHJiX3JlYWRlcl9ldmVudChjcHVfYnVmZmVyKTsKIAotCWlmIChldmVudC0+dHlwZV9sZW4gPD0gUklOR0JVRl9UWVBFX0RBVEFfVFlQRV9MRU5fTUFYCi0JCQl8fCByYl9kaXNjYXJkZWRfZXZlbnQoZXZlbnQpKQorCWlmIChldmVudC0+dHlwZV9sZW4gPD0gUklOR0JVRl9UWVBFX0RBVEFfVFlQRV9MRU5fTUFYKQogCQljcHVfYnVmZmVyLT5yZWFkKys7CiAKIAlyYl91cGRhdGVfcmVhZF9zdGFtcChjcHVfYnVmZmVyLCBldmVudCk7CkBAIC0yNTI1LDEwICszMTc1LDggQEAKIAkJc3Bpbl91bmxvY2soJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlpZiAoZXZlbnQgJiYgZXZlbnQtPnR5cGVfbGVuID09IFJJTkdCVUZfVFlQRV9QQURESU5HKSB7Ci0JCWNwdV9yZWxheCgpOworCWlmIChldmVudCAmJiBldmVudC0+dHlwZV9sZW4gPT0gUklOR0JVRl9UWVBFX1BBRERJTkcpCiAJCWdvdG8gYWdhaW47Ci0JfQogCiAJcmV0dXJuIGV2ZW50OwogfQpAQCAtMjU1MywxMCArMzIwMSw4IEBACiAJZXZlbnQgPSByYl9pdGVyX3BlZWsoaXRlciwgdHMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAKLQlpZiAoZXZlbnQgJiYgZXZlbnQtPnR5cGVfbGVuID09IFJJTkdCVUZfVFlQRV9QQURESU5HKSB7Ci0JCWNwdV9yZWxheCgpOworCWlmIChldmVudCAmJiBldmVudC0+dHlwZV9sZW4gPT0gUklOR0JVRl9UWVBFX1BBRERJTkcpCiAJCWdvdG8gYWdhaW47Ci0JfQogCiAJcmV0dXJuIGV2ZW50OwogfQpAQCAtMjYwMiwxMCArMzI0OCw4IEBACiAgb3V0OgogCXByZWVtcHRfZW5hYmxlKCk7CiAKLQlpZiAoZXZlbnQgJiYgZXZlbnQtPnR5cGVfbGVuID09IFJJTkdCVUZfVFlQRV9QQURESU5HKSB7Ci0JCWNwdV9yZWxheCgpOworCWlmIChldmVudCAmJiBldmVudC0+dHlwZV9sZW4gPT0gUklOR0JVRl9UWVBFX1BBRERJTkcpCiAJCWdvdG8gYWdhaW47Ci0JfQogCiAJcmV0dXJuIGV2ZW50OwogfQpAQCAtMjY4NSwyMSArMzMyOSwxOSBAQAogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyID0gaXRlci0+Y3B1X2J1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gYWdhaW46CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CisgYWdhaW46CiAJZXZlbnQgPSByYl9pdGVyX3BlZWsoaXRlciwgdHMpOwogCWlmICghZXZlbnQpCiAJCWdvdG8gb3V0OwogCisJaWYgKGV2ZW50LT50eXBlX2xlbiA9PSBSSU5HQlVGX1RZUEVfUEFERElORykKKwkJZ290byBhZ2FpbjsKKwogCXJiX2FkdmFuY2VfaXRlcihpdGVyKTsKICBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIAotCWlmIChldmVudCAmJiBldmVudC0+dHlwZV9sZW4gPT0gUklOR0JVRl9UWVBFX1BBRERJTkcpIHsKLQkJY3B1X3JlbGF4KCk7Ci0JCWdvdG8gYWdhaW47Ci0JfQotCiAJcmV0dXJuIGV2ZW50OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfcmVhZCk7CkBAIC0yNzE3LDggKzMzNTksMTAgQEAKIHN0YXRpYyB2b2lkCiByYl9yZXNldF9jcHUoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCiB7CisJcmJfaGVhZF9wYWdlX2RlYWN0aXZhdGUoY3B1X2J1ZmZlcik7CisKIAljcHVfYnVmZmVyLT5oZWFkX3BhZ2UKLQkJPSBsaXN0X2VudHJ5KGNwdV9idWZmZXItPnBhZ2VzLm5leHQsIHN0cnVjdCBidWZmZXJfcGFnZSwgbGlzdCk7CisJCT0gbGlzdF9lbnRyeShjcHVfYnVmZmVyLT5wYWdlcywgc3RydWN0IGJ1ZmZlcl9wYWdlLCBsaXN0KTsKIAlsb2NhbF9zZXQoJmNwdV9idWZmZXItPmhlYWRfcGFnZS0+d3JpdGUsIDApOwogCWxvY2FsX3NldCgmY3B1X2J1ZmZlci0+aGVhZF9wYWdlLT5lbnRyaWVzLCAwKTsKIAlsb2NhbF9zZXQoJmNwdV9idWZmZXItPmhlYWRfcGFnZS0+cGFnZS0+Y29tbWl0LCAwKTsKQEAgLTI3MzQsMTYgKzMzNzgsMTcgQEAKIAlsb2NhbF9zZXQoJmNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5wYWdlLT5jb21taXQsIDApOwogCWNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5yZWFkID0gMDsKIAotCWNwdV9idWZmZXItPm5taV9kcm9wcGVkID0gMDsKLQljcHVfYnVmZmVyLT5jb21taXRfb3ZlcnJ1biA9IDA7Ci0JY3B1X2J1ZmZlci0+b3ZlcnJ1biA9IDA7Ci0JY3B1X2J1ZmZlci0+cmVhZCA9IDA7CisJbG9jYWxfc2V0KCZjcHVfYnVmZmVyLT5jb21taXRfb3ZlcnJ1biwgMCk7CisJbG9jYWxfc2V0KCZjcHVfYnVmZmVyLT5vdmVycnVuLCAwKTsKIAlsb2NhbF9zZXQoJmNwdV9idWZmZXItPmVudHJpZXMsIDApOwogCWxvY2FsX3NldCgmY3B1X2J1ZmZlci0+Y29tbWl0dGluZywgMCk7CiAJbG9jYWxfc2V0KCZjcHVfYnVmZmVyLT5jb21taXRzLCAwKTsKKwljcHVfYnVmZmVyLT5yZWFkID0gMDsKIAogCWNwdV9idWZmZXItPndyaXRlX3N0YW1wID0gMDsKIAljcHVfYnVmZmVyLT5yZWFkX3N0YW1wID0gMDsKKworCXJiX2hlYWRfcGFnZV9hY3RpdmF0ZShjcHVfYnVmZmVyKTsKIH0KIAogLyoqCkBAIC0yNzYzLDEyICszNDA4LDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIAorCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsIGxvY2FsX3JlYWQoJmNwdV9idWZmZXItPmNvbW1pdHRpbmcpKSkKKwkJZ290byBvdXQ7CisKIAlfX3Jhd19zcGluX2xvY2soJmNwdV9idWZmZXItPmxvY2spOwogCiAJcmJfcmVzZXRfY3B1KGNwdV9idWZmZXIpOwogCiAJX19yYXdfc3Bpbl91bmxvY2soJmNwdV9idWZmZXItPmxvY2spOwogCisgb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAKIAlhdG9taWNfZGVjKCZjcHVfYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpOwpAQCAtMjg1MSw2ICszNTAwLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2VtcHR5X2NwdSk7CiAKKyNpZmRlZiBDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUAogLyoqCiAgKiByaW5nX2J1ZmZlcl9zd2FwX2NwdSAtIHN3YXAgYSBDUFUgYnVmZmVyIGJldHdlZW4gdHdvIHJpbmcgYnVmZmVycwogICogQGJ1ZmZlcl9hOiBPbmUgYnVmZmVyIHRvIHN3YXAgd2l0aApAQCAtMjkwNSwyMCArMzU1NSwyOCBAQAogCWF0b21pY19pbmMoJmNwdV9idWZmZXJfYS0+cmVjb3JkX2Rpc2FibGVkKTsKIAlhdG9taWNfaW5jKCZjcHVfYnVmZmVyX2ItPnJlY29yZF9kaXNhYmxlZCk7CiAKKwlyZXQgPSAtRUJVU1k7CisJaWYgKGxvY2FsX3JlYWQoJmNwdV9idWZmZXJfYS0+Y29tbWl0dGluZykpCisJCWdvdG8gb3V0X2RlYzsKKwlpZiAobG9jYWxfcmVhZCgmY3B1X2J1ZmZlcl9iLT5jb21taXR0aW5nKSkKKwkJZ290byBvdXRfZGVjOworCiAJYnVmZmVyX2EtPmJ1ZmZlcnNbY3B1XSA9IGNwdV9idWZmZXJfYjsKIAlidWZmZXJfYi0+YnVmZmVyc1tjcHVdID0gY3B1X2J1ZmZlcl9hOwogCiAJY3B1X2J1ZmZlcl9iLT5idWZmZXIgPSBidWZmZXJfYTsKIAljcHVfYnVmZmVyX2EtPmJ1ZmZlciA9IGJ1ZmZlcl9iOwogCisJcmV0ID0gMDsKKworb3V0X2RlYzoKIAlhdG9taWNfZGVjKCZjcHVfYnVmZmVyX2EtPnJlY29yZF9kaXNhYmxlZCk7CiAJYXRvbWljX2RlYygmY3B1X2J1ZmZlcl9iLT5yZWNvcmRfZGlzYWJsZWQpOwotCi0JcmV0ID0gMDsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfc3dhcF9jcHUpOworI2VuZGlmIC8qIENPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQICovCiAKIC8qKgogICogcmluZ19idWZmZXJfYWxsb2NfcmVhZF9wYWdlIC0gYWxsb2NhdGUgYSBwYWdlIHRvIHJlYWQgZnJvbSBidWZmZXIKQEAgLTMwOTEsNyArMzc0OSw3IEBACiAJCXJlYWQgPSAwOwogCX0gZWxzZSB7CiAJCS8qIHVwZGF0ZSB0aGUgZW50cnkgY291bnRlciAqLwotCQljcHVfYnVmZmVyLT5yZWFkICs9IGxvY2FsX3JlYWQoJnJlYWRlci0+ZW50cmllcyk7CisJCWNwdV9idWZmZXItPnJlYWQgKz0gcmJfcGFnZV9lbnRyaWVzKHJlYWRlcik7CiAKIAkJLyogc3dhcCB0aGUgcGFnZXMgKi8KIAkJcmJfaW5pdF9wYWdlKGJwYWdlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggOGMzNTgzOS4uNWM3NWRlZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTQzLDE0ICs0MywxMSBAQAogCiAjZGVmaW5lIFRSQUNFX0JVRkZFUl9GTEFHUwkoUkJfRkxfT1ZFUldSSVRFKQogCi11bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0bHkJdHJhY2luZ19tYXhfbGF0ZW5jeTsKLXVuc2lnbmVkIGxvbmcgX19yZWFkX21vc3RseQl0cmFjaW5nX3RocmVzaDsKLQogLyoKICAqIE9uIGJvb3QgdXAsIHRoZSByaW5nIGJ1ZmZlciBpcyBzZXQgdG8gdGhlIG1pbmltdW0gc2l6ZSwgc28gdGhhdAogICogd2UgZG8gbm90IHdhc3RlIG1lbW9yeSBvbiBzeXN0ZW1zIHRoYXQgYXJlIG5vdCB1c2luZyB0cmFjaW5nLgogICovCi1zdGF0aWMgaW50IHJpbmdfYnVmZmVyX2V4cGFuZGVkOworaW50IHJpbmdfYnVmZmVyX2V4cGFuZGVkOwogCiAvKgogICogV2UgbmVlZCB0byBjaGFuZ2UgdGhpcyBzdGF0ZSB3aGVuIGEgc2VsZnRlc3QgaXMgcnVubmluZy4KQEAgLTY0LDcgKzYxLDcgQEAKIC8qCiAgKiBJZiBhIHRyYWNlciBpcyBydW5uaW5nLCB3ZSBkbyBub3Qgd2FudCB0byBydW4gU0VMRlRFU1QuCiAgKi8KLXN0YXRpYyBib29sIF9fcmVhZF9tb3N0bHkgdHJhY2luZ19zZWxmdGVzdF9kaXNhYmxlZDsKK2Jvb2wgX19yZWFkX21vc3RseSB0cmFjaW5nX3NlbGZ0ZXN0X2Rpc2FibGVkOwogCiAvKiBGb3IgdHJhY2VycyB0aGF0IGRvbid0IGltcGxlbWVudCBjdXN0b20gZmxhZ3MgKi8KIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyX29wdCBkdW1teV90cmFjZXJfb3B0W10gPSB7CkBAIC04OSw3ICs4Niw3IEBACiAgKi8KIHN0YXRpYyBpbnQgdHJhY2luZ19kaXNhYmxlZCA9IDE7CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShsb2NhbF90LCBmdHJhY2VfY3B1X2Rpc2FibGVkKTsKK0RFRklORV9QRVJfQ1BVKGxvY2FsX3QsIGZ0cmFjZV9jcHVfZGlzYWJsZWQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX2Rpc2FibGVfY3B1KHZvaWQpCiB7CkBAIC0xNzIsMTAgKzE2OSwxMSBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRyYWNlX2FycmF5X2NwdSwgZ2xvYmFsX3RyYWNlX2NwdSk7CiAKLWludCBmaWx0ZXJfY3VycmVudF9jaGVja19kaXNjYXJkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqcmVjLAoraW50IGZpbHRlcl9jdXJyZW50X2NoZWNrX2Rpc2NhcmQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQkJIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqcmVjLAogCQkJCSBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQogewotCXJldHVybiBmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCByZWMsIGdsb2JhbF90cmFjZS5idWZmZXIsIGV2ZW50KTsKKwlyZXR1cm4gZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgcmVjLCBidWZmZXIsIGV2ZW50KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZpbHRlcl9jdXJyZW50X2NoZWNrX2Rpc2NhcmQpOwogCkBAIC0yNjYsNiArMjY0LDkgQEAKIAlUUkFDRV9JVEVSX0FOTk9UQVRFIHwgVFJBQ0VfSVRFUl9DT05URVhUX0lORk8gfCBUUkFDRV9JVEVSX1NMRUVQX1RJTUUgfAogCVRSQUNFX0lURVJfR1JBUEhfVElNRTsKIAorc3RhdGljIGludCB0cmFjZV9zdG9wX2NvdW50Oworc3RhdGljIERFRklORV9TUElOTE9DSyh0cmFjaW5nX3N0YXJ0X2xvY2spOworCiAvKioKICAqIHRyYWNlX3dha2VfdXAgLSB3YWtlIHVwIHRhc2tzIHdhaXRpbmcgZm9yIHRyYWNlIGlucHV0CiAgKgpAQCAtMzIzLDUwICszMjQsMjAgQEAKIAkicHJpbnRrLW1zZy1vbmx5IiwKIAkiY29udGV4dC1pbmZvIiwKIAkibGF0ZW5jeS1mb3JtYXQiLAotCSJnbG9iYWwtY2xvY2siLAogCSJzbGVlcC10aW1lIiwKIAkiZ3JhcGgtdGltZSIsCiAJTlVMTAogfTsKIAotLyoKLSAqIGZ0cmFjZV9tYXhfbG9jayBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIHN3YXBwaW5nIG9mIGJ1ZmZlcnMKLSAqIHdoZW4gdGFraW5nIGEgbWF4IHNuYXBzaG90LiBUaGUgYnVmZmVycyB0aGVtc2VsdmVzIGFyZQotICogcHJvdGVjdGVkIGJ5IHBlcl9jcHUgc3BpbmxvY2tzLiBCdXQgdGhlIGFjdGlvbiBvZiB0aGUgc3dhcAotICogbmVlZHMgaXRzIG93biBsb2NrLgotICoKLSAqIFRoaXMgaXMgZGVmaW5lZCBhcyBhIHJhd19zcGlubG9ja190IGluIG9yZGVyIHRvIGhlbHAKLSAqIHdpdGggcGVyZm9ybWFuY2Ugd2hlbiBsb2NrZGVwIGRlYnVnZ2luZyBpcyBlbmFibGVkLgotICovCi1zdGF0aWMgcmF3X3NwaW5sb2NrX3QgZnRyYWNlX21heF9sb2NrID0KLQkocmF3X3NwaW5sb2NrX3QpX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIHN0cnVjdCB7CisJdTY0ICgqZnVuYykodm9pZCk7CisJY29uc3QgY2hhciAqbmFtZTsKK30gdHJhY2VfY2xvY2tzW10gPSB7CisJeyB0cmFjZV9jbG9ja19sb2NhbCwJImxvY2FsIiB9LAorCXsgdHJhY2VfY2xvY2tfZ2xvYmFsLAkiZ2xvYmFsIiB9LAorfTsKIAotLyoKLSAqIENvcHkgdGhlIG5ldyBtYXhpbXVtIHRyYWNlIGludG8gdGhlIHNlcGFyYXRlIG1heGltdW0tdHJhY2UKLSAqIHN0cnVjdHVyZS4gKHRoaXMgd2F5IHRoZSBtYXhpbXVtIHRyYWNlIGlzIHBlcm1hbmVudGx5IHNhdmVkLAotICogZm9yIGxhdGVyIHJldHJpZXZhbCB2aWEgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9sYXRlbmN5X3RyYWNlKQotICovCi1zdGF0aWMgdm9pZAotX191cGRhdGVfbWF4X3RyKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY3B1KQotewotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEgPSB0ci0+ZGF0YVtjcHVdOwotCi0JbWF4X3RyLmNwdSA9IGNwdTsKLQltYXhfdHIudGltZV9zdGFydCA9IGRhdGEtPnByZWVtcHRfdGltZXN0YW1wOwotCi0JZGF0YSA9IG1heF90ci5kYXRhW2NwdV07Ci0JZGF0YS0+c2F2ZWRfbGF0ZW5jeSA9IHRyYWNpbmdfbWF4X2xhdGVuY3k7Ci0KLQltZW1jcHkoZGF0YS0+Y29tbSwgdHNrLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKLQlkYXRhLT5waWQgPSB0c2stPnBpZDsKLQlkYXRhLT51aWQgPSB0YXNrX3VpZCh0c2spOwotCWRhdGEtPm5pY2UgPSB0c2stPnN0YXRpY19wcmlvIC0gMjAgLSBNQVhfUlRfUFJJTzsKLQlkYXRhLT5wb2xpY3kgPSB0c2stPnBvbGljeTsKLQlkYXRhLT5ydF9wcmlvcml0eSA9IHRzay0+cnRfcHJpb3JpdHk7Ci0KLQkvKiByZWNvcmQgdGhpcyB0YXNrcyBjb21tICovCi0JdHJhY2luZ19yZWNvcmRfY21kbGluZSh0c2spOwotfQoraW50IHRyYWNlX2Nsb2NrX2lkOwogCiBzc2l6ZV90IHRyYWNlX3NlcV90b191c2VyKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250KQogewpAQCAtNDExLDYgKzM4Miw1NiBAQAogCXJldHVybiBjbnQ7CiB9CiAKKy8qCisgKiBmdHJhY2VfbWF4X2xvY2sgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBzd2FwcGluZyBvZiBidWZmZXJzCisgKiB3aGVuIHRha2luZyBhIG1heCBzbmFwc2hvdC4gVGhlIGJ1ZmZlcnMgdGhlbXNlbHZlcyBhcmUKKyAqIHByb3RlY3RlZCBieSBwZXJfY3B1IHNwaW5sb2Nrcy4gQnV0IHRoZSBhY3Rpb24gb2YgdGhlIHN3YXAKKyAqIG5lZWRzIGl0cyBvd24gbG9jay4KKyAqCisgKiBUaGlzIGlzIGRlZmluZWQgYXMgYSByYXdfc3BpbmxvY2tfdCBpbiBvcmRlciB0byBoZWxwCisgKiB3aXRoIHBlcmZvcm1hbmNlIHdoZW4gbG9ja2RlcCBkZWJ1Z2dpbmcgaXMgZW5hYmxlZC4KKyAqCisgKiBJdCBpcyBhbHNvIHVzZWQgaW4gb3RoZXIgcGxhY2VzIG91dHNpZGUgdGhlIHVwZGF0ZV9tYXhfdHIKKyAqIHNvIGl0IG5lZWRzIHRvIGJlIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUKKyAqIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFLgorICovCitzdGF0aWMgcmF3X3NwaW5sb2NrX3QgZnRyYWNlX21heF9sb2NrID0KKwkocmF3X3NwaW5sb2NrX3QpX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOworCisjaWZkZWYgQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0UKK3Vuc2lnbmVkIGxvbmcgX19yZWFkX21vc3RseQl0cmFjaW5nX21heF9sYXRlbmN5OwordW5zaWduZWQgbG9uZyBfX3JlYWRfbW9zdGx5CXRyYWNpbmdfdGhyZXNoOworCisvKgorICogQ29weSB0aGUgbmV3IG1heGltdW0gdHJhY2UgaW50byB0aGUgc2VwYXJhdGUgbWF4aW11bS10cmFjZQorICogc3RydWN0dXJlLiAodGhpcyB3YXkgdGhlIG1heGltdW0gdHJhY2UgaXMgcGVybWFuZW50bHkgc2F2ZWQsCisgKiBmb3IgbGF0ZXIgcmV0cmlldmFsIHZpYSAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2xhdGVuY3lfdHJhY2UpCisgKi8KK3N0YXRpYyB2b2lkCitfX3VwZGF0ZV9tYXhfdHIoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjcHUpCit7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSA9IHRyLT5kYXRhW2NwdV07CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqbWF4X2RhdGEgPSB0ci0+ZGF0YVtjcHVdOworCisJbWF4X3RyLmNwdSA9IGNwdTsKKwltYXhfdHIudGltZV9zdGFydCA9IGRhdGEtPnByZWVtcHRfdGltZXN0YW1wOworCisJbWF4X2RhdGEgPSBtYXhfdHIuZGF0YVtjcHVdOworCW1heF9kYXRhLT5zYXZlZF9sYXRlbmN5ID0gdHJhY2luZ19tYXhfbGF0ZW5jeTsKKwltYXhfZGF0YS0+Y3JpdGljYWxfc3RhcnQgPSBkYXRhLT5jcml0aWNhbF9zdGFydDsKKwltYXhfZGF0YS0+Y3JpdGljYWxfZW5kID0gZGF0YS0+Y3JpdGljYWxfZW5kOworCisJbWVtY3B5KGRhdGEtPmNvbW0sIHRzay0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJbWF4X2RhdGEtPnBpZCA9IHRzay0+cGlkOworCW1heF9kYXRhLT51aWQgPSB0YXNrX3VpZCh0c2spOworCW1heF9kYXRhLT5uaWNlID0gdHNrLT5zdGF0aWNfcHJpbyAtIDIwIC0gTUFYX1JUX1BSSU87CisJbWF4X2RhdGEtPnBvbGljeSA9IHRzay0+cG9saWN5OworCW1heF9kYXRhLT5ydF9wcmlvcml0eSA9IHRzay0+cnRfcHJpb3JpdHk7CisKKwkvKiByZWNvcmQgdGhpcyB0YXNrcyBjb21tICovCisJdHJhY2luZ19yZWNvcmRfY21kbGluZSh0c2spOworfQorCiAvKioKICAqIHVwZGF0ZV9tYXhfdHIgLSBzbmFwc2hvdCBhbGwgdHJhY2UgYnVmZmVycyBmcm9tIGdsb2JhbF90cmFjZSB0byBtYXhfdHIKICAqIEB0cjogdHJhY2VyCkBAIC00MjUsMTYgKzQ0NiwxNSBAQAogewogCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmID0gdHItPmJ1ZmZlcjsKIAorCWlmICh0cmFjZV9zdG9wX2NvdW50KQorCQlyZXR1cm47CisKIAlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CiAJX19yYXdfc3Bpbl9sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwogCiAJdHItPmJ1ZmZlciA9IG1heF90ci5idWZmZXI7CiAJbWF4X3RyLmJ1ZmZlciA9IGJ1ZjsKIAotCWZ0cmFjZV9kaXNhYmxlX2NwdSgpOwotCXJpbmdfYnVmZmVyX3Jlc2V0KHRyLT5idWZmZXIpOwotCWZ0cmFjZV9lbmFibGVfY3B1KCk7Ci0KIAlfX3VwZGF0ZV9tYXhfdHIodHIsIHRzaywgY3B1KTsKIAlfX3Jhd19zcGluX3VubG9jaygmZnRyYWNlX21heF9sb2NrKTsKIH0KQEAgLTQ1MiwyMSArNDcyLDM1IEBACiB7CiAJaW50IHJldDsKIAorCWlmICh0cmFjZV9zdG9wX2NvdW50KQorCQlyZXR1cm47CisKIAlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CiAJX19yYXdfc3Bpbl9sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwogCiAJZnRyYWNlX2Rpc2FibGVfY3B1KCk7CiAKLQlyaW5nX2J1ZmZlcl9yZXNldChtYXhfdHIuYnVmZmVyKTsKIAlyZXQgPSByaW5nX2J1ZmZlcl9zd2FwX2NwdShtYXhfdHIuYnVmZmVyLCB0ci0+YnVmZmVyLCBjcHUpOwogCisJaWYgKHJldCA9PSAtRUJVU1kpIHsKKwkJLyoKKwkJICogV2UgZmFpbGVkIHRvIHN3YXAgdGhlIGJ1ZmZlciBkdWUgdG8gYSBjb21taXQgdGFraW5nCisJCSAqIHBsYWNlIG9uIHRoaXMgQ1BVLiBXZSBmYWlsIHRvIHJlY29yZCwgYnV0IHdlIHJlc2V0CisJCSAqIHRoZSBtYXggdHJhY2UgYnVmZmVyIChubyBvbmUgd3JpdGVzIGRpcmVjdGx5IHRvIGl0KQorCQkgKiBhbmQgZmxhZyB0aGF0IGl0IGZhaWxlZC4KKwkJICovCisJCXRyYWNlX2FycmF5X3ByaW50aygmbWF4X3RyLCBfVEhJU19JUF8sCisJCQkiRmFpbGVkIHRvIHN3YXAgYnVmZmVycyBkdWUgdG8gY29tbWl0IGluIHByb2dyZXNzXG4iKTsKKwl9CisKIAlmdHJhY2VfZW5hYmxlX2NwdSgpOwogCi0JV0FSTl9PTl9PTkNFKHJldCAmJiByZXQgIT0gLUVBR0FJTik7CisJV0FSTl9PTl9PTkNFKHJldCAmJiByZXQgIT0gLUVBR0FJTiAmJiByZXQgIT0gLUVCVVNZKTsKIAogCV9fdXBkYXRlX21heF90cih0ciwgdHNrLCBjcHUpOwogCV9fcmF3X3NwaW5fdW5sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwogfQorI2VuZGlmIC8qIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFICovCiAKIC8qKgogICogcmVnaXN0ZXJfdHJhY2VyIC0gcmVnaXN0ZXIgYSB0cmFjZXIgd2l0aCB0aGUgZnRyYWNlIHN5c3RlbS4KQEAgLTUyMyw3ICs1NTcsNiBAQAogCWlmICh0eXBlLT5zZWxmdGVzdCAmJiAhdHJhY2luZ19zZWxmdGVzdF9kaXNhYmxlZCkgewogCQlzdHJ1Y3QgdHJhY2VyICpzYXZlZF90cmFjZXIgPSBjdXJyZW50X3RyYWNlOwogCQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gJmdsb2JhbF90cmFjZTsKLQkJaW50IGk7CiAKIAkJLyoKIAkJICogUnVuIGEgc2VsZnRlc3Qgb24gdGhpcyB0cmFjZXIuCkBAIC01MzIsOCArNTY1LDcgQEAKIAkJICogaW50ZXJuYWwgdHJhY2luZyB0byB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIGlzIGluIG9yZGVyLgogCQkgKiBJZiB3ZSBmYWlsLCB3ZSBkbyBub3QgcmVnaXN0ZXIgdGhpcyB0cmFjZXIuCiAJCSAqLwotCQlmb3JfZWFjaF90cmFjaW5nX2NwdShpKQotCQkJdHJhY2luZ19yZXNldCh0ciwgaSk7CisJCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOwogCiAJCWN1cnJlbnRfdHJhY2UgPSB0eXBlOwogCQkvKiB0aGUgdGVzdCBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIGFuZCBlbmFibGluZyAqLwpAQCAtNTQ2LDggKzU3OCw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCQkvKiBPbmx5IHJlc2V0IG9uIHBhc3NpbmcsIHRvIGF2b2lkIHRvdWNoaW5nIGNvcnJ1cHRlZCBidWZmZXJzICovCi0JCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpCi0JCQl0cmFjaW5nX3Jlc2V0KHRyLCBpKTsKKwkJdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7CiAKIAkJcHJpbnRrKEtFUk5fQ09OVCAiUEFTU0VEXG4iKTsKIAl9CkBAIC02MjIsMjEgKzY1Myw0MiBAQAogCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiB9CiAKLXZvaWQgdHJhY2luZ19yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBpbnQgY3B1KQorc3RhdGljIHZvaWQgX190cmFjaW5nX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBjcHUpCiB7CiAJZnRyYWNlX2Rpc2FibGVfY3B1KCk7CiAJcmluZ19idWZmZXJfcmVzZXRfY3B1KHRyLT5idWZmZXIsIGNwdSk7CiAJZnRyYWNlX2VuYWJsZV9jcHUoKTsKIH0KIAordm9pZCB0cmFjaW5nX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBjcHUpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIgPSB0ci0+YnVmZmVyOworCisJcmluZ19idWZmZXJfcmVjb3JkX2Rpc2FibGUoYnVmZmVyKTsKKworCS8qIE1ha2Ugc3VyZSBhbGwgY29tbWl0cyBoYXZlIGZpbmlzaGVkICovCisJc3luY2hyb25pemVfc2NoZWQoKTsKKwlfX3RyYWNpbmdfcmVzZXQodHIsIGNwdSk7CisKKwlyaW5nX2J1ZmZlcl9yZWNvcmRfZW5hYmxlKGJ1ZmZlcik7Cit9CisKIHZvaWQgdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogeworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyID0gdHItPmJ1ZmZlcjsKIAlpbnQgY3B1OwogCisJcmluZ19idWZmZXJfcmVjb3JkX2Rpc2FibGUoYnVmZmVyKTsKKworCS8qIE1ha2Ugc3VyZSBhbGwgY29tbWl0cyBoYXZlIGZpbmlzaGVkICovCisJc3luY2hyb25pemVfc2NoZWQoKTsKKwogCXRyLT50aW1lX3N0YXJ0ID0gZnRyYWNlX25vdyh0ci0+Y3B1KTsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQl0cmFjaW5nX3Jlc2V0KHRyLCBjcHUpOworCQlfX3RyYWNpbmdfcmVzZXQodHIsIGNwdSk7CisKKwlyaW5nX2J1ZmZlcl9yZWNvcmRfZW5hYmxlKGJ1ZmZlcik7CiB9CiAKIHZvaWQgdHJhY2luZ19yZXNldF9jdXJyZW50KGludCBjcHUpCkBAIC02NjcsOSArNzE5LDYgQEAKIAljbWRsaW5lX2lkeCA9IDA7CiB9CiAKLXN0YXRpYyBpbnQgdHJhY2Vfc3RvcF9jb3VudDsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodHJhY2luZ19zdGFydF9sb2NrKTsKLQogLyoqCiAgKiBmdHJhY2Vfb2ZmX3Blcm1hbmVudCAtIGRpc2FibGUgYWxsIGZ0cmFjZSBjb2RlIHBlcm1hbmVudGx5CiAgKgpAQCAtODUwLDE0ICs4OTksMTUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUpOwogCi1zdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKnRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCQkJCSAgICBpbnQgdHlwZSwKLQkJCQkJCSAgICB1bnNpZ25lZCBsb25nIGxlbiwKLQkJCQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCitzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgordHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKKwkJCSAgaW50IHR5cGUsCisJCQkgIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIGxlbik7CisJZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBsZW4pOwogCWlmIChldmVudCAhPSBOVUxMKSB7CiAJCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CiAKQEAgLTg2Nyw1OCArOTE3LDYwIEBACiAKIAlyZXR1cm4gZXZlbnQ7CiB9Ci1zdGF0aWMgdm9pZCBmdHJhY2VfdHJhY2Vfc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgc2tpcCwgaW50IHBjKTsKLXN0YXRpYyB2b2lkIGZ0cmFjZV90cmFjZV91c2Vyc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX190cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkJCQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAotCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMsCi0JCQkJCWludCB3YWtlKQorc3RhdGljIGlubGluZSB2b2lkCitfX3RyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAorCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMsCisJCQkgICAgIGludCB3YWtlKQogewotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7CiAKLQlmdHJhY2VfdHJhY2Vfc3RhY2sodHIsIGZsYWdzLCA2LCBwYyk7Ci0JZnRyYWNlX3RyYWNlX3VzZXJzdGFjayh0ciwgZmxhZ3MsIHBjKTsKKwlmdHJhY2VfdHJhY2Vfc3RhY2soYnVmZmVyLCBmbGFncywgNiwgcGMpOworCWZ0cmFjZV90cmFjZV91c2Vyc3RhY2soYnVmZmVyLCBmbGFncywgcGMpOwogCiAJaWYgKHdha2UpCiAJCXRyYWNlX3dha2VfdXAoKTsKIH0KIAotdm9pZCB0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkJCQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAotCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCit2b2lkIHRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCisJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQogewotCV9fdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCBmbGFncywgcGMsIDEpOworCV9fdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgZmxhZ3MsIHBjLCAxKTsKIH0KIAogc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKLXRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZShpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBsZW4sCit0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoc3RydWN0IHJpbmdfYnVmZmVyICoqY3VycmVudF9yYiwKKwkJCQkgIGludCB0eXBlLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKIHsKLQlyZXR1cm4gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmZ2xvYmFsX3RyYWNlLAorCSpjdXJyZW50X3JiID0gZ2xvYmFsX3RyYWNlLmJ1ZmZlcjsKKwlyZXR1cm4gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgqY3VycmVudF9yYiwKIAkJCQkJIHR5cGUsIGxlbiwgZmxhZ3MsIHBjKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZSk7CiAKLXZvaWQgdHJhY2VfY3VycmVudF9idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAordm9pZCB0cmFjZV9jdXJyZW50X2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJCQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAogCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCiB7Ci0JX190cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCgmZ2xvYmFsX3RyYWNlLCBldmVudCwgZmxhZ3MsIHBjLCAxKTsKKwlfX3RyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIGZsYWdzLCBwYywgMSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9jdXJyZW50X2J1ZmZlcl91bmxvY2tfY29tbWl0KTsKIAotdm9pZCB0cmFjZV9ub3dha2VfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCwKLQkJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQordm9pZCB0cmFjZV9ub3dha2VfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQkJICAgICAgIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKIHsKLQlfX3RyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KCZnbG9iYWxfdHJhY2UsIGV2ZW50LCBmbGFncywgcGMsIDApOworCV9fdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgZmxhZ3MsIHBjLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX25vd2FrZV9idWZmZXJfdW5sb2NrX2NvbW1pdCk7CiAKLXZvaWQgdHJhY2VfY3VycmVudF9idWZmZXJfZGlzY2FyZF9jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKK3ZvaWQgdHJhY2VfY3VycmVudF9idWZmZXJfZGlzY2FyZF9jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQkJCSBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQogewotCXJpbmdfYnVmZmVyX2Rpc2NhcmRfY29tbWl0KGdsb2JhbF90cmFjZS5idWZmZXIsIGV2ZW50KTsKKwlyaW5nX2J1ZmZlcl9kaXNjYXJkX2NvbW1pdChidWZmZXIsIGV2ZW50KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX2N1cnJlbnRfYnVmZmVyX2Rpc2NhcmRfY29tbWl0KTsKIApAQCAtOTI4LDYgKzk4MCw3IEBACiAJICAgICAgIGludCBwYykKIHsKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmZXZlbnRfZnVuY3Rpb247CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIgPSB0ci0+YnVmZmVyOwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZW50cnk7CiAKQEAgLTkzNSw3ICs5ODgsNyBAQAogCWlmICh1bmxpa2VseShsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKSkpCiAJCXJldHVybjsKIAotCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfRk4sIHNpemVvZigqZW50cnkpLAorCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0ZOLCBzaXplb2YoKmVudHJ5KSwKIAkJCQkJICBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCiAJCXJldHVybjsKQEAgLTk0Myw1OCArOTk2LDEwIEBACiAJZW50cnktPmlwCQkJPSBpcDsKIAllbnRyeS0+cGFyZW50X2lwCQk9IHBhcmVudF9pcDsKIAotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIHRyLT5idWZmZXIsIGV2ZW50KSkKLQkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7CisJaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCisJCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi1zdGF0aWMgaW50IF9fdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqdHJhY2UsCi0JCQkJdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCQlpbnQgcGMpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X2Z1bmNncmFwaF9lbnRyeTsKLQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwotCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5ICplbnRyeTsKLQotCWlmICh1bmxpa2VseShsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKSkpCi0JCXJldHVybiAwOwotCi0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKCZnbG9iYWxfdHJhY2UsIFRSQUNFX0dSQVBIX0VOVCwKLQkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm4gMDsKLQllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCWVudHJ5LT5ncmFwaF9lbnQJCQk9ICp0cmFjZTsKLQlpZiAoIWZpbHRlcl9jdXJyZW50X2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGV2ZW50KSkKLQkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChnbG9iYWxfdHJhY2UuYnVmZmVyLCBldmVudCk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgX190cmFjZV9ncmFwaF9yZXR1cm4oc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsCi0JCQkJdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCQlpbnQgcGMpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X2Z1bmNncmFwaF9leGl0OwotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnkgKmVudHJ5OwotCi0JaWYgKHVubGlrZWx5KGxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIoZnRyYWNlX2NwdV9kaXNhYmxlZCkpKSkKLQkJcmV0dXJuOwotCi0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKCZnbG9iYWxfdHJhY2UsIFRSQUNFX0dSQVBIX1JFVCwKLQkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm47Ci0JZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQllbnRyeS0+cmV0CQkJCT0gKnRyYWNlOwotCWlmICghZmlsdGVyX2N1cnJlbnRfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgZXZlbnQpKQotCQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGdsb2JhbF90cmFjZS5idWZmZXIsIGV2ZW50KTsKLX0KLSNlbmRpZgotCiB2b2lkCiBmdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKICAgICAgICB1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCwgdW5zaWduZWQgbG9uZyBmbGFncywKQEAgLTEwMDQsMTcgKzEwMDksMTcgQEAKIAkJdHJhY2VfZnVuY3Rpb24odHIsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZnRyYWNlX3RyYWNlX3N0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisjaWZkZWYgQ09ORklHX1NUQUNLVFJBQ0UKK3N0YXRpYyB2b2lkIF9fZnRyYWNlX3RyYWNlX3N0YWNrKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAogCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzLAogCQkJCSBpbnQgc2tpcCwgaW50IHBjKQogewotI2lmZGVmIENPTkZJR19TVEFDS1RSQUNFCiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X2tlcm5lbF9zdGFjazsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCBzdGFja19lbnRyeSAqZW50cnk7CiAJc3RydWN0IHN0YWNrX3RyYWNlIHRyYWNlOwogCi0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9TVEFDSywKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9TVEFDSywKIAkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm47CkBAIC0xMDI3LDMyICsxMDMyLDI4IEBACiAJdHJhY2UuZW50cmllcwkJPSBlbnRyeS0+Y2FsbGVyOwogCiAJc2F2ZV9zdGFja190cmFjZSgmdHJhY2UpOwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIHRyLT5idWZmZXIsIGV2ZW50KSkKLQkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7Ci0jZW5kaWYKKwlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWZmZXIsIGV2ZW50KSkKKwkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50KTsKIH0KIAotc3RhdGljIHZvaWQgZnRyYWNlX3RyYWNlX3N0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCSAgICAgICBpbnQgc2tpcCwgaW50IHBjKQordm9pZCBmdHJhY2VfdHJhY2Vfc3RhY2soc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQlpbnQgc2tpcCwgaW50IHBjKQogewogCWlmICghKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TVEFDS1RSQUNFKSkKIAkJcmV0dXJuOwogCi0JX19mdHJhY2VfdHJhY2Vfc3RhY2sodHIsIGZsYWdzLCBza2lwLCBwYyk7CisJX19mdHJhY2VfdHJhY2Vfc3RhY2soYnVmZmVyLCBmbGFncywgc2tpcCwgcGMpOwogfQogCi12b2lkIF9fdHJhY2Vfc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJICAgaW50IHNraXAsIGludCBwYykKK3ZvaWQgX190cmFjZV9zdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgc2tpcCwKKwkJICAgaW50IHBjKQogewotCV9fZnRyYWNlX3RyYWNlX3N0YWNrKHRyLCBmbGFncywgc2tpcCwgcGMpOworCV9fZnRyYWNlX3RyYWNlX3N0YWNrKHRyLT5idWZmZXIsIGZsYWdzLCBza2lwLCBwYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGZ0cmFjZV90cmFjZV91c2Vyc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCit2b2lkCitmdHJhY2VfdHJhY2VfdXNlcnN0YWNrKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCiB7Ci0jaWZkZWYgQ09ORklHX1NUQUNLVFJBQ0UKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmZXZlbnRfdXNlcl9zdGFjazsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCB1c2Vyc3RhY2tfZW50cnkgKmVudHJ5OwpAQCAtMTA2MSw3ICsxMDYyLDcgQEAKIAlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfVVNFUlNUQUNLVFJBQ0UpKQogCQlyZXR1cm47CiAKLQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX1VTRVJfU1RBQ0ssCisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfVVNFUl9TVEFDSywKIAkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm47CkBAIC0xMDc1LDkgKzEwNzYsOCBAQAogCXRyYWNlLmVudHJpZXMJCT0gZW50cnktPmNhbGxlcjsKIAogCXNhdmVfc3RhY2tfdHJhY2VfdXNlcigmdHJhY2UpOwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIHRyLT5idWZmZXIsIGV2ZW50KSkKLQkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7Ci0jZW5kaWYKKwlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWZmZXIsIGV2ZW50KSkKKwkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50KTsKIH0KIAogI2lmZGVmIFVOVVNFRApAQCAtMTA4Nyw2ICsxMDg3LDggQEAKIH0KICNlbmRpZiAvKiBVTlVTRUQgKi8KIAorI2VuZGlmIC8qIENPTkZJR19TVEFDS1RSQUNFICovCisKIHN0YXRpYyB2b2lkCiBmdHJhY2VfdHJhY2Vfc3BlY2lhbCh2b2lkICpfX3RyLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsCkBAIC0xMDk0LDkgKzEwOTYsMTAgQEAKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBfX3RyOworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyID0gdHItPmJ1ZmZlcjsKIAlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZW50cnk7CiAKLQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX1NQRUNJQUwsCisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfU1BFQ0lBTCwKIAkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgcGMpOwogCWlmICghZXZlbnQpCiAJCXJldHVybjsKQEAgLTExMDQsNyArMTEwNyw3IEBACiAJZW50cnktPmFyZzEJCQk9IGFyZzE7CiAJZW50cnktPmFyZzIJCQk9IGFyZzI7CiAJZW50cnktPmFyZzMJCQk9IGFyZzM7Ci0JdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCBwYyk7CisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgMCwgcGMpOwogfQogCiB2b2lkCkBAIC0xMTE1LDYyICsxMTE4LDYgQEAKIH0KIAogdm9pZAotdHJhY2luZ19zY2hlZF9zd2l0Y2hfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKLQkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKLXsKLQlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmZXZlbnRfY29udGV4dF9zd2l0Y2g7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZW50cnk7Ci0KLQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX0NUWCwKLQkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm47Ci0JZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQllbnRyeS0+cHJldl9waWQJCQk9IHByZXYtPnBpZDsKLQllbnRyeS0+cHJldl9wcmlvCQk9IHByZXYtPnByaW87Ci0JZW50cnktPnByZXZfc3RhdGUJCT0gcHJldi0+c3RhdGU7Ci0JZW50cnktPm5leHRfcGlkCQkJPSBuZXh0LT5waWQ7Ci0JZW50cnktPm5leHRfcHJpbwkJPSBuZXh0LT5wcmlvOwotCWVudHJ5LT5uZXh0X3N0YXRlCQk9IG5leHQtPnN0YXRlOwotCWVudHJ5LT5uZXh0X2NwdQk9IHRhc2tfY3B1KG5leHQpOwotCi0JaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgdHItPmJ1ZmZlciwgZXZlbnQpKQotCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIGZsYWdzLCBwYyk7Ci19Ci0KLXZvaWQKLXRyYWNpbmdfc2NoZWRfd2FrZXVwX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKndha2VlLAotCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLAotCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQotewotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZldmVudF93YWtldXA7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZW50cnk7Ci0KLQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX1dBS0UsCi0JCQkJCSAgc2l6ZW9mKCplbnRyeSksIGZsYWdzLCBwYyk7Ci0JaWYgKCFldmVudCkKLQkJcmV0dXJuOwotCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JZW50cnktPnByZXZfcGlkCQkJPSBjdXJyLT5waWQ7Ci0JZW50cnktPnByZXZfcHJpbwkJPSBjdXJyLT5wcmlvOwotCWVudHJ5LT5wcmV2X3N0YXRlCQk9IGN1cnItPnN0YXRlOwotCWVudHJ5LT5uZXh0X3BpZAkJCT0gd2FrZWUtPnBpZDsKLQllbnRyeS0+bmV4dF9wcmlvCQk9IHdha2VlLT5wcmlvOwotCWVudHJ5LT5uZXh0X3N0YXRlCQk9IHdha2VlLT5zdGF0ZTsKLQllbnRyeS0+bmV4dF9jcHUJCQk9IHRhc2tfY3B1KHdha2VlKTsKLQotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIHRyLT5idWZmZXIsIGV2ZW50KSkKLQkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7Ci0JZnRyYWNlX3RyYWNlX3N0YWNrKHRyLCBmbGFncywgNiwgcGMpOwotCWZ0cmFjZV90cmFjZV91c2Vyc3RhY2sodHIsIGZsYWdzLCBwYyk7Ci19Ci0KLXZvaWQKIGZ0cmFjZV9zcGVjaWFsKHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMpCiB7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICZnbG9iYWxfdHJhY2U7CkBAIC0xMTk0LDY4ICsxMTQxLDYgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi1pbnQgdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlKQotewotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOwotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb25nIGRpc2FibGVkOwotCWludCByZXQ7Ci0JaW50IGNwdTsKLQlpbnQgcGM7Ci0KLQlpZiAoIWZ0cmFjZV90cmFjZV90YXNrKGN1cnJlbnQpKQotCQlyZXR1cm4gMDsKLQotCWlmICghZnRyYWNlX2dyYXBoX2FkZHIodHJhY2UtPmZ1bmMpKQotCQlyZXR1cm4gMDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOwotCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKTsKLQlpZiAobGlrZWx5KGRpc2FibGVkID09IDEpKSB7Ci0JCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCQlyZXQgPSBfX3RyYWNlX2dyYXBoX2VudHJ5KHRyLCB0cmFjZSwgZmxhZ3MsIHBjKTsKLQl9IGVsc2UgewotCQlyZXQgPSAwOwotCX0KLQkvKiBPbmx5IGRvIHRoZSBhdG9taWMgaWYgaXQgaXMgbm90IGFscmVhZHkgc2V0ICovCi0JaWYgKCF0ZXN0X3Rza190cmFjZV9ncmFwaChjdXJyZW50KSkKLQkJc2V0X3Rza190cmFjZV9ncmFwaChjdXJyZW50KTsKLQotCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIHRyYWNlX2dyYXBoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UpCi17Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICZnbG9iYWxfdHJhY2U7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgZGlzYWJsZWQ7Ci0JaW50IGNwdTsKLQlpbnQgcGM7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlkYXRhID0gdHItPmRhdGFbY3B1XTsKLQlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7Ci0JaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkgewotCQlwYyA9IHByZWVtcHRfY291bnQoKTsKLQkJX190cmFjZV9ncmFwaF9yZXR1cm4odHIsIHRyYWNlLCBmbGFncywgcGMpOwotCX0KLQlpZiAoIXRyYWNlLT5kZXB0aCkKLQkJY2xlYXJfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpOwotCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwotCi0KIC8qKgogICogdHJhY2VfdmJwcmludGsgLSB3cml0ZSBiaW5hcnkgbXNnIHRvIHRyYWNpbmcgYnVmZmVyCiAgKgpAQCAtMTI2OCw2ICsxMTUzLDcgQEAKIAogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZldmVudF9icHJpbnQ7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gJmdsb2JhbF90cmFjZTsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwogCXN0cnVjdCBicHJpbnRfZW50cnkgKmVudHJ5OwpAQCAtMTMwMCw3ICsxMTg2LDkgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJc2l6ZSA9IHNpemVvZigqZW50cnkpICsgc2l6ZW9mKHUzMikgKiBsZW47Ci0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9CUFJJTlQsIHNpemUsIGZsYWdzLCBwYyk7CisJYnVmZmVyID0gdHItPmJ1ZmZlcjsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9CUFJJTlQsIHNpemUsCisJCQkJCSAgZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQogCQlnb3RvIG91dF91bmxvY2s7CiAJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKQEAgLTEzMDgsOCArMTE5Niw4IEBACiAJZW50cnktPmZtdAkJCT0gZm10OwogCiAJbWVtY3B5KGVudHJ5LT5idWYsIHRyYWNlX2J1Ziwgc2l6ZW9mKHUzMikgKiBsZW4pOwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIHRyLT5idWZmZXIsIGV2ZW50KSkKLQkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7CisJaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCisJCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7CiAKIG91dF91bmxvY2s6CiAJX19yYXdfc3Bpbl91bmxvY2soJnRyYWNlX2J1Zl9sb2NrKTsKQEAgLTEzMjQsMTQgKzEyMTIsMzAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3ZicHJpbnRrKTsKIAotaW50IHRyYWNlX3ZwcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCitpbnQgdHJhY2VfYXJyYXlfcHJpbnRrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisKKwlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfUFJJTlRLKSkKKwkJcmV0dXJuIDA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB0cmFjZV9hcnJheV92cHJpbnRrKHRyLCBpcCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdHJhY2VfYXJyYXlfdnByaW50ayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJdW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCiB7CiAJc3RhdGljIHJhd19zcGlubG9ja190IHRyYWNlX2J1Zl9sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOwogCXN0YXRpYyBjaGFyIHRyYWNlX2J1ZltUUkFDRV9CVUZfU0laRV07CiAKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmZXZlbnRfcHJpbnQ7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gJmdsb2JhbF90cmFjZTsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwogCWludCBjcHUsIGxlbiA9IDAsIHNpemUsIHBjOwogCXN0cnVjdCBwcmludF9lbnRyeSAqZW50cnk7CkBAIC0xMzU5LDcgKzEyNjMsOSBAQAogCXRyYWNlX2J1ZltsZW5dID0gMDsKIAogCXNpemUgPSBzaXplb2YoKmVudHJ5KSArIGxlbiArIDE7Ci0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9QUklOVCwgc2l6ZSwgaXJxX2ZsYWdzLCBwYyk7CisJYnVmZmVyID0gdHItPmJ1ZmZlcjsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9QUklOVCwgc2l6ZSwKKwkJCQkJICBpcnFfZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQogCQlnb3RvIG91dF91bmxvY2s7CiAJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKQEAgLTEzNjcsOCArMTI3Myw4IEBACiAKIAltZW1jcHkoJmVudHJ5LT5idWYsIHRyYWNlX2J1ZiwgbGVuKTsKIAllbnRyeS0+YnVmW2xlbl0gPSAwOwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIHRyLT5idWZmZXIsIGV2ZW50KSkKLQkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7CisJaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCisJCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7CiAKICBvdXRfdW5sb2NrOgogCV9fcmF3X3NwaW5fdW5sb2NrKCZ0cmFjZV9idWZfbG9jayk7CkBAIC0xMzgwLDYgKzEyODYsMTEgQEAKIAogCXJldHVybiBsZW47CiB9CisKK2ludCB0cmFjZV92cHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQoreworCXJldHVybiB0cmFjZV9hcnJheV9wcmludGsoJmdsb2JhbF90cmFjZSwgaXAsIGZtdCwgYXJncyk7Cit9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV92cHJpbnRrKTsKIAogZW51bSB0cmFjZV9maWxlX3R5cGUgewpAQCAtMTUxOSw2ICsxNDMwLDM3IEBACiAJcmV0dXJuIGVudDsKIH0KIAorc3RhdGljIHZvaWQgdHJhY2luZ19pdGVyX3Jlc2V0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gaXRlci0+dHI7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqYnVmX2l0ZXI7CisJdW5zaWduZWQgbG9uZyBlbnRyaWVzID0gMDsKKwl1NjQgdHM7CisKKwl0ci0+ZGF0YVtjcHVdLT5za2lwcGVkX2VudHJpZXMgPSAwOworCisJaWYgKCFpdGVyLT5idWZmZXJfaXRlcltjcHVdKQorCQlyZXR1cm47CisKKwlidWZfaXRlciA9IGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV07CisJcmluZ19idWZmZXJfaXRlcl9yZXNldChidWZfaXRlcik7CisKKwkvKgorCSAqIFdlIGNvdWxkIGhhdmUgdGhlIGNhc2Ugd2l0aCB0aGUgbWF4IGxhdGVuY3kgdHJhY2VycworCSAqIHRoYXQgYSByZXNldCBuZXZlciB0b29rIHBsYWNlIG9uIGEgY3B1LiBUaGlzIGlzIGV2aWRlbnQKKwkgKiBieSB0aGUgdGltZXN0YW1wIGJlaW5nIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4KKwkgKi8KKwl3aGlsZSAoKGV2ZW50ID0gcmluZ19idWZmZXJfaXRlcl9wZWVrKGJ1Zl9pdGVyLCAmdHMpKSkgeworCQlpZiAodHMgPj0gaXRlci0+dHItPnRpbWVfc3RhcnQpCisJCQlicmVhazsKKwkJZW50cmllcysrOworCQlyaW5nX2J1ZmZlcl9yZWFkKGJ1Zl9pdGVyLCBOVUxMKTsKKwl9CisKKwl0ci0+ZGF0YVtjcHVdLT5za2lwcGVkX2VudHJpZXMgPSBlbnRyaWVzOworfQorCiAvKgogICogTm8gbmVjZXNzYXJ5IGxvY2tpbmcgaGVyZS4gVGhlIHdvcnN0IHRoaW5nIHdoaWNoIGNhbgogICogaGFwcGVuIGlzIGxvb3NpbmcgZXZlbnRzIGNvbnN1bWVkIGF0IHRoZSBzYW1lIHRpbWUKQEAgLTE1NTcsMTAgKzE0OTksOSBAQAogCiAJCWlmIChjcHVfZmlsZSA9PSBUUkFDRV9QSVBFX0FMTF9DUFUpIHsKIAkJCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkKLQkJCQlyaW5nX2J1ZmZlcl9pdGVyX3Jlc2V0KGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0pOworCQkJCXRyYWNpbmdfaXRlcl9yZXNldChpdGVyLCBjcHUpOwogCQl9IGVsc2UKLQkJCXJpbmdfYnVmZmVyX2l0ZXJfcmVzZXQoaXRlci0+YnVmZmVyX2l0ZXJbY3B1X2ZpbGVdKTsKLQorCQkJdHJhY2luZ19pdGVyX3Jlc2V0KGl0ZXIsIGNwdV9maWxlKTsKIAogCQlmdHJhY2VfZW5hYmxlX2NwdSgpOwogCkBAIC0xNjA5LDE2ICsxNTUwLDMyIEBACiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGl0ZXItPnRyOwogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEgPSB0ci0+ZGF0YVt0ci0+Y3B1XTsKIAlzdHJ1Y3QgdHJhY2VyICp0eXBlID0gY3VycmVudF90cmFjZTsKLQl1bnNpZ25lZCBsb25nIHRvdGFsOwotCXVuc2lnbmVkIGxvbmcgZW50cmllczsKKwl1bnNpZ25lZCBsb25nIGVudHJpZXMgPSAwOworCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgY291bnQ7CiAJY29uc3QgY2hhciAqbmFtZSA9ICJwcmVlbXB0aW9uIjsKKwlpbnQgY3B1OwogCiAJaWYgKHR5cGUpCiAJCW5hbWUgPSB0eXBlLT5uYW1lOwogCi0JZW50cmllcyA9IHJpbmdfYnVmZmVyX2VudHJpZXMoaXRlci0+dHItPmJ1ZmZlcik7Ci0JdG90YWwgPSBlbnRyaWVzICsKLQkJcmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci0+dHItPmJ1ZmZlcik7CisKKwlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpIHsKKwkJY291bnQgPSByaW5nX2J1ZmZlcl9lbnRyaWVzX2NwdSh0ci0+YnVmZmVyLCBjcHUpOworCQkvKgorCQkgKiBJZiB0aGlzIGJ1ZmZlciBoYXMgc2tpcHBlZCBlbnRyaWVzLCB0aGVuIHdlIGhvbGQgYWxsCisJCSAqIGVudHJpZXMgZm9yIHRoZSB0cmFjZSBhbmQgd2UgbmVlZCB0byBpZ25vcmUgdGhlCisJCSAqIG9uZXMgYmVmb3JlIHRoZSB0aW1lIHN0YW1wLgorCQkgKi8KKwkJaWYgKHRyLT5kYXRhW2NwdV0tPnNraXBwZWRfZW50cmllcykgeworCQkJY291bnQgLT0gdHItPmRhdGFbY3B1XS0+c2tpcHBlZF9lbnRyaWVzOworCQkJLyogdG90YWwgaXMgdGhlIHNhbWUgYXMgdGhlIGVudHJpZXMgKi8KKwkJCXRvdGFsICs9IGNvdW50OworCQl9IGVsc2UKKwkJCXRvdGFsICs9IGNvdW50ICsKKwkJCQlyaW5nX2J1ZmZlcl9vdmVycnVuX2NwdSh0ci0+YnVmZmVyLCBjcHUpOworCQllbnRyaWVzICs9IGNvdW50OworCX0KIAogCXNlcV9wcmludGYobSwgIiMgJXMgbGF0ZW5jeSB0cmFjZSB2MS4xLjUgb24gJXNcbiIsCiAJCSAgIG5hbWUsIFVUU19SRUxFQVNFKTsKQEAgLTE2NjAsNyArMTYxNyw3IEBACiAJCXNlcV9wdXRzKG0sICJcbiMgID0+IGVuZGVkIGF0OiAgICIpOwogCQlzZXFfcHJpbnRfaXBfc3ltKCZpdGVyLT5zZXEsIGRhdGEtPmNyaXRpY2FsX2VuZCwgc3ltX2ZsYWdzKTsKIAkJdHJhY2VfcHJpbnRfc2VxKG0sICZpdGVyLT5zZXEpOwotCQlzZXFfcHV0cyhtLCAiI1xuIik7CisJCXNlcV9wdXRzKG0sICJcbiNcbiIpOwogCX0KIAogCXNlcV9wdXRzKG0sICIjXG4iKTsKQEAgLTE2NzksNiArMTYzNiw5IEBACiAJaWYgKGNwdW1hc2tfdGVzdF9jcHUoaXRlci0+Y3B1LCBpdGVyLT5zdGFydGVkKSkKIAkJcmV0dXJuOwogCisJaWYgKGl0ZXItPnRyLT5kYXRhW2l0ZXItPmNwdV0tPnNraXBwZWRfZW50cmllcykKKwkJcmV0dXJuOworCiAJY3B1bWFza19zZXRfY3B1KGl0ZXItPmNwdSwgaXRlci0+c3RhcnRlZCk7CiAKIAkvKiBEb24ndCBwcmludCBzdGFydGVkIGNwdSBidWZmZXIgZm9yIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgdHJhY2UgKi8KQEAgLTE5NDEsMTkgKzE5MDEsMjMgQEAKIAlpZiAocmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci0+dHItPmJ1ZmZlcikpCiAJCWl0ZXItPml0ZXJfZmxhZ3MgfD0gVFJBQ0VfRklMRV9BTk5PVEFURTsKIAorCS8qIHN0b3AgdGhlIHRyYWNlIHdoaWxlIGR1bXBpbmcgKi8KKwl0cmFjaW5nX3N0b3AoKTsKKwogCWlmIChpdGVyLT5jcHVfZmlsZSA9PSBUUkFDRV9QSVBFX0FMTF9DUFUpIHsKIAkJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7CiAKIAkJCWl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0gPQogCQkJCXJpbmdfYnVmZmVyX3JlYWRfc3RhcnQoaXRlci0+dHItPmJ1ZmZlciwgY3B1KTsKKwkJCXRyYWNpbmdfaXRlcl9yZXNldChpdGVyLCBjcHUpOwogCQl9CiAJfSBlbHNlIHsKIAkJY3B1ID0gaXRlci0+Y3B1X2ZpbGU7CiAJCWl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0gPQogCQkJCXJpbmdfYnVmZmVyX3JlYWRfc3RhcnQoaXRlci0+dHItPmJ1ZmZlciwgY3B1KTsKKwkJdHJhY2luZ19pdGVyX3Jlc2V0KGl0ZXIsIGNwdSk7CiAJfQogCi0JLyogVE9ETyBzdG9wIHRyYWNlciAqLwogCXJldCA9IHNlcV9vcGVuKGZpbGUsICZ0cmFjZXJfc2VxX29wcyk7CiAJaWYgKHJldCA8IDApIHsKIAkJZmFpbF9yZXQgPSBFUlJfUFRSKHJldCk7CkBAIC0xOTYzLDkgKzE5MjcsNiBAQAogCW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJbS0+cHJpdmF0ZSA9IGl0ZXI7CiAKLQkvKiBzdG9wIHRoZSB0cmFjZSB3aGlsZSBkdW1waW5nICovCi0JdHJhY2luZ19zdG9wKCk7Ci0KIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCiAJcmV0dXJuIGl0ZXI7CkBAIC0xOTc2LDYgKzE5MzcsNyBAQAogCQkJcmluZ19idWZmZXJfcmVhZF9maW5pc2goaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSk7CiAJfQogCWZyZWVfY3B1bWFza192YXIoaXRlci0+c3RhcnRlZCk7CisJdHJhY2luZ19zdGFydCgpOwogIGZhaWw6CiAJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAlrZnJlZShpdGVyLT50cmFjZSk7CkBAIC0yMjU3LDggKzIyMTksOCBAQAogCQlsZW4gKz0gMzsgLyogIm5vIiBhbmQgbmV3bGluZSAqLwogCX0KIAotCS8qICsyIGZvciBcbiBhbmQgXDAgKi8KLQlidWYgPSBrbWFsbG9jKGxlbiArIDIsIEdGUF9LRVJORUwpOworCS8qICsxIGZvciBcMCAqLworCWJ1ZiA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKIAkJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMjgxLDcgKzIyNDMsNyBAQAogCX0KIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0JV0FSTl9PTihyID49IGxlbiArIDIpOworCVdBUk5fT04ociA+PSBsZW4gKyAxKTsKIAogCXIgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsIGJ1Ziwgcik7CiAKQEAgLTIyOTIsMjMgKzIyNTQsMjMgQEAKIC8qIFRyeSB0byBhc3NpZ24gYSB0cmFjZXIgc3BlY2lmaWMgb3B0aW9uICovCiBzdGF0aWMgaW50IHNldF90cmFjZXJfb3B0aW9uKHN0cnVjdCB0cmFjZXIgKnRyYWNlLCBjaGFyICpjbXAsIGludCBuZWcpCiB7Ci0Jc3RydWN0IHRyYWNlcl9mbGFncyAqdHJhY2VfZmxhZ3MgPSB0cmFjZS0+ZmxhZ3M7CisJc3RydWN0IHRyYWNlcl9mbGFncyAqdHJhY2VyX2ZsYWdzID0gdHJhY2UtPmZsYWdzOwogCXN0cnVjdCB0cmFjZXJfb3B0ICpvcHRzID0gTlVMTDsKIAlpbnQgcmV0ID0gMCwgaSA9IDA7CiAJaW50IGxlbjsKIAotCWZvciAoaSA9IDA7IHRyYWNlX2ZsYWdzLT5vcHRzW2ldLm5hbWU7IGkrKykgewotCQlvcHRzID0gJnRyYWNlX2ZsYWdzLT5vcHRzW2ldOworCWZvciAoaSA9IDA7IHRyYWNlcl9mbGFncy0+b3B0c1tpXS5uYW1lOyBpKyspIHsKKwkJb3B0cyA9ICZ0cmFjZXJfZmxhZ3MtPm9wdHNbaV07CiAJCWxlbiA9IHN0cmxlbihvcHRzLT5uYW1lKTsKIAogCQlpZiAoc3RybmNtcChjbXAsIG9wdHMtPm5hbWUsIGxlbikgPT0gMCkgewotCQkJcmV0ID0gdHJhY2UtPnNldF9mbGFnKHRyYWNlX2ZsYWdzLT52YWwsCisJCQlyZXQgPSB0cmFjZS0+c2V0X2ZsYWcodHJhY2VyX2ZsYWdzLT52YWwsCiAJCQkJb3B0cy0+Yml0LCAhbmVnKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCS8qIE5vdCBmb3VuZCAqLwotCWlmICghdHJhY2VfZmxhZ3MtPm9wdHNbaV0ubmFtZSkKKwlpZiAoIXRyYWNlcl9mbGFncy0+b3B0c1tpXS5uYW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFJlZnVzZWQgdG8gaGFuZGxlICovCkBAIC0yMzE2LDkgKzIyNzgsOSBAQAogCQlyZXR1cm4gcmV0OwogCiAJaWYgKG5lZykKLQkJdHJhY2VfZmxhZ3MtPnZhbCAmPSB+b3B0cy0+Yml0OworCQl0cmFjZXJfZmxhZ3MtPnZhbCAmPSB+b3B0cy0+Yml0OwogCWVsc2UKLQkJdHJhY2VfZmxhZ3MtPnZhbCB8PSBvcHRzLT5iaXQ7CisJCXRyYWNlcl9mbGFncy0+dmFsIHw9IG9wdHMtPmJpdDsKIAogCXJldHVybiAwOwogfQpAQCAtMjMzMywyMiArMjI5NSw2IEBACiAJCXRyYWNlX2ZsYWdzIHw9IG1hc2s7CiAJZWxzZQogCQl0cmFjZV9mbGFncyAmPSB+bWFzazsKLQotCWlmIChtYXNrID09IFRSQUNFX0lURVJfR0xPQkFMX0NMSykgewotCQl1NjQgKCpmdW5jKSh2b2lkKTsKLQotCQlpZiAoZW5hYmxlZCkKLQkJCWZ1bmMgPSB0cmFjZV9jbG9ja19nbG9iYWw7Ci0JCWVsc2UKLQkJCWZ1bmMgPSB0cmFjZV9jbG9ja19sb2NhbDsKLQotCQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQkJcmluZ19idWZmZXJfc2V0X2Nsb2NrKGdsb2JhbF90cmFjZS5idWZmZXIsIGZ1bmMpOwotCi0JCWlmIChtYXhfdHIuYnVmZmVyKQotCQkJcmluZ19idWZmZXJfc2V0X2Nsb2NrKG1heF90ci5idWZmZXIsIGZ1bmMpOwotCQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwotCX0KIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTMzMTYsNiArMzI2Miw2MiBAQAogCXJldHVybiBjbnQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHRyYWNpbmdfY2xvY2tfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCisJCQkJICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCit7CisJY2hhciBidWZbNjRdOworCWludCBidWZpdGVyID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRyYWNlX2Nsb2Nrcyk7IGkrKykKKwkJYnVmaXRlciArPSBzbnByaW50ZihidWYgKyBidWZpdGVyLCBzaXplb2YoYnVmKSAtIGJ1Zml0ZXIsCisJCQkiJXMlcyVzJXMiLCBpID8gIiAiIDogIiIsCisJCQlpID09IHRyYWNlX2Nsb2NrX2lkID8gIlsiIDogIiIsIHRyYWNlX2Nsb2Nrc1tpXS5uYW1lLAorCQkJaSA9PSB0cmFjZV9jbG9ja19pZCA/ICJdIiA6ICIiKTsKKwlidWZpdGVyICs9IHNucHJpbnRmKGJ1ZiArIGJ1Zml0ZXIsIHNpemVvZihidWYpIC0gYnVmaXRlciwgIlxuIik7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLCBidWYsIGJ1Zml0ZXIpOworfQorCitzdGF0aWMgc3NpemVfdCB0cmFjaW5nX2Nsb2NrX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCQkgICBzaXplX3QgY250LCBsb2ZmX3QgKmZwb3MpCit7CisJY2hhciBidWZbNjRdOworCWNvbnN0IGNoYXIgKmNsb2Nrc3RyOworCWludCBpOworCisJaWYgKGNudCA+PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1ZiwgY250KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWZbY250XSA9IDA7CisKKwljbG9ja3N0ciA9IHN0cnN0cmlwKGJ1Zik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0cmFjZV9jbG9ja3MpOyBpKyspIHsKKwkJaWYgKHN0cmNtcCh0cmFjZV9jbG9ja3NbaV0ubmFtZSwgY2xvY2tzdHIpID09IDApCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gQVJSQVlfU0laRSh0cmFjZV9jbG9ja3MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRyYWNlX2Nsb2NrX2lkID0gaTsKKworCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCisJcmluZ19idWZmZXJfc2V0X2Nsb2NrKGdsb2JhbF90cmFjZS5idWZmZXIsIHRyYWNlX2Nsb2Nrc1tpXS5mdW5jKTsKKwlpZiAobWF4X3RyLmJ1ZmZlcikKKwkJcmluZ19idWZmZXJfc2V0X2Nsb2NrKG1heF90ci5idWZmZXIsIHRyYWNlX2Nsb2Nrc1tpXS5mdW5jKTsKKworCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisKKwkqZnBvcyArPSBjbnQ7CisKKwlyZXR1cm4gY250OworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX21heF9sYXRfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX21heF9sYXRfcmVhZCwKQEAgLTMzNTMsNiArMzM1NSwxMiBAQAogCS53cml0ZQkJPSB0cmFjaW5nX21hcmtfd3JpdGUsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjZV9jbG9ja19mb3BzID0geworCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAorCS5yZWFkCQk9IHRyYWNpbmdfY2xvY2tfcmVhZCwKKwkud3JpdGUJCT0gdHJhY2luZ19jbG9ja193cml0ZSwKK307CisKIHN0cnVjdCBmdHJhY2VfYnVmZmVyX2luZm8gewogCXN0cnVjdCB0cmFjZV9hcnJheQkqdHI7CiAJdm9pZAkJCSpzcGFyZTsKQEAgLTM2MzMsOSArMzY0MSw2IEBACiAJY250ID0gcmluZ19idWZmZXJfY29tbWl0X292ZXJydW5fY3B1KHRyLT5idWZmZXIsIGNwdSk7CiAJdHJhY2Vfc2VxX3ByaW50ZihzLCAiY29tbWl0IG92ZXJydW46ICVsZFxuIiwgY250KTsKIAotCWNudCA9IHJpbmdfYnVmZmVyX25taV9kcm9wcGVkX2NwdSh0ci0+YnVmZmVyLCBjcHUpOwotCXRyYWNlX3NlcV9wcmludGYocywgIm5taSBkcm9wcGVkOiAlbGRcbiIsIGNudCk7Ci0KIAljb3VudCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNvdW50LCBwcG9zLCBzLT5idWZmZXIsIHMtPmxlbik7CiAKIAlrZnJlZShzKTsKQEAgLTQwNjYsMTEgKzQwNzEsMTMgQEAKIAl0cmFjZV9jcmVhdGVfZmlsZSgiY3VycmVudF90cmFjZXIiLCAwNjQ0LCBkX3RyYWNlciwKIAkJCSZnbG9iYWxfdHJhY2UsICZzZXRfdHJhY2VyX2ZvcHMpOwogCisjaWZkZWYgQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0UKIAl0cmFjZV9jcmVhdGVfZmlsZSgidHJhY2luZ19tYXhfbGF0ZW5jeSIsIDA2NDQsIGRfdHJhY2VyLAogCQkJJnRyYWNpbmdfbWF4X2xhdGVuY3ksICZ0cmFjaW5nX21heF9sYXRfZm9wcyk7CiAKIAl0cmFjZV9jcmVhdGVfZmlsZSgidHJhY2luZ190aHJlc2giLCAwNjQ0LCBkX3RyYWNlciwKIAkJCSZ0cmFjaW5nX3RocmVzaCwgJnRyYWNpbmdfbWF4X2xhdF9mb3BzKTsKKyNlbmRpZgogCiAJdHJhY2VfY3JlYXRlX2ZpbGUoIlJFQURNRSIsIDA0NDQsIGRfdHJhY2VyLAogCQkJTlVMTCwgJnRyYWNpbmdfcmVhZG1lX2ZvcHMpOwpAQCAtNDA4Nyw2ICs0MDk0LDkgQEAKIAl0cmFjZV9jcmVhdGVfZmlsZSgic2F2ZWRfY21kbGluZXMiLCAwNDQ0LCBkX3RyYWNlciwKIAkJCU5VTEwsICZ0cmFjaW5nX3NhdmVkX2NtZGxpbmVzX2ZvcHMpOwogCisJdHJhY2VfY3JlYXRlX2ZpbGUoInRyYWNlX2Nsb2NrIiwgMDY0NCwgZF90cmFjZXIsIE5VTEwsCisJCQkgICZ0cmFjZV9jbG9ja19mb3BzKTsKKwogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCXRyYWNlX2NyZWF0ZV9maWxlKCJkeW5fZnRyYWNlX3RvdGFsX2luZm8iLCAwNDQ0LCBkX3RyYWNlciwKIAkJCSZmdHJhY2VfdXBkYXRlX3RvdF9jbnQsICZ0cmFjaW5nX2R5bl9pbmZvX2ZvcHMpOwpAQCAtNDI2NSw3ICs0Mjc1LDYgQEAKIAogX19pbml0IHN0YXRpYyBpbnQgdHJhY2VyX2FsbG9jX2J1ZmZlcnModm9pZCkKIHsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwogCWludCByaW5nX2J1Zl9zaXplOwogCWludCBpOwogCWludCByZXQgPSAtRU5PTUVNOwpAQCAtNDMxNSw3ICs0MzI0LDcgQEAKIAogCS8qIEFsbG9jYXRlIHRoZSBmaXJzdCBwYWdlIGZvciBhbGwgYnVmZmVycyAqLwogCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGkpIHsKLQkJZGF0YSA9IGdsb2JhbF90cmFjZS5kYXRhW2ldID0gJnBlcl9jcHUoZ2xvYmFsX3RyYWNlX2NwdSwgaSk7CisJCWdsb2JhbF90cmFjZS5kYXRhW2ldID0gJnBlcl9jcHUoZ2xvYmFsX3RyYWNlX2NwdSwgaSk7CiAJCW1heF90ci5kYXRhW2ldID0gJnBlcl9jcHUobWF4X2RhdGEsIGkpOwogCX0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmggYi9rZXJuZWwvdHJhY2UvdHJhY2UuaAppbmRleCA4YjlmNGY2Li5mYTFkY2NiIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuaAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuaApAQCAtMzQsOCArMzQsNiBAQAogCVRSQUNFX0dSQVBIX0VOVCwKIAlUUkFDRV9VU0VSX1NUQUNLLAogCVRSQUNFX0hXX0JSQU5DSEVTLAotCVRSQUNFX1NZU0NBTExfRU5URVIsCi0JVFJBQ0VfU1lTQ0FMTF9FWElULAogCVRSQUNFX0tNRU1fQUxMT0MsCiAJVFJBQ0VfS01FTV9GUkVFLAogCVRSQUNFX1BPV0VSLApAQCAtMjM2LDkgKzIzNCw2IEBACiAJYXRvbWljX3QJCWRpc2FibGVkOwogCXZvaWQJCQkqYnVmZmVyX3BhZ2U7CS8qIHJpbmcgYnVmZmVyIHNwYXJlICovCiAKLQkvKiB0aGVzZSBmaWVsZHMgZ2V0IGNvcGllZCBpbnRvIG1heC10cmFjZTogKi8KLQl1bnNpZ25lZCBsb25nCQl0cmFjZV9pZHg7Ci0JdW5zaWduZWQgbG9uZwkJb3ZlcnJ1bjsKIAl1bnNpZ25lZCBsb25nCQlzYXZlZF9sYXRlbmN5OwogCXVuc2lnbmVkIGxvbmcJCWNyaXRpY2FsX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcJCWNyaXRpY2FsX2VuZDsKQEAgLTI0Niw2ICsyNDEsNyBAQAogCXVuc2lnbmVkIGxvbmcJCW5pY2U7CiAJdW5zaWduZWQgbG9uZwkJcG9saWN5OwogCXVuc2lnbmVkIGxvbmcJCXJ0X3ByaW9yaXR5OworCXVuc2lnbmVkIGxvbmcJCXNraXBwZWRfZW50cmllczsKIAljeWNsZV90CQkJcHJlZW1wdF90aW1lc3RhbXA7CiAJcGlkX3QJCQlwaWQ7CiAJdWlkX3QJCQl1aWQ7CkBAIC0zMTksMTAgKzMxNSw2IEBACiAJCQkgIFRSQUNFX0tNRU1fQUxMT0MpOwlcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGttZW10cmFjZV9mcmVlX2VudHJ5LAlcCiAJCQkgIFRSQUNFX0tNRU1fRlJFRSk7CVwKLQkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciwJCVwKLQkJCSAgVFJBQ0VfU1lTQ0FMTF9FTlRFUik7CQkJCVwKLQkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0LAkJXAotCQkJICBUUkFDRV9TWVNDQUxMX0VYSVQpOwkJCQlcCiAJCV9fZnRyYWNlX2JhZF90eXBlKCk7CQkJCQlcCiAJfSB3aGlsZSAoMCkKIApAQCAtNDIzLDEyICs0MTUsMTMgQEAKIAogc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50OwogCi1zdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKnRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCQkJCSAgICBpbnQgdHlwZSwKLQkJCQkJCSAgICB1bnNpZ25lZCBsb25nIGxlbiwKLQkJCQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzLAotCQkJCQkJICAgIGludCBwYyk7Ci12b2lkIHRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCitzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgordHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKKwkJCSAgaW50IHR5cGUsCisJCQkgIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJICBpbnQgcGMpOwordm9pZCB0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKIAkJCQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAogCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYyk7CiAKQEAgLTQ2Nyw2ICs0NjAsNyBAQAogCiB2b2lkIHRyYWNlX2dyYXBoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UpOwogaW50IHRyYWNlX2dyYXBoX2VudHJ5KHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSk7Cit2b2lkIHNldF9ncmFwaF9hcnJheShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKIAogdm9pZCB0cmFjaW5nX3N0YXJ0X2NtZGxpbmVfcmVjb3JkKHZvaWQpOwogdm9pZCB0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQodm9pZCk7CkBAIC00NzgsMTYgKzQ3Miw0MCBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBuc2Vjc190b191c2Vjcyh1bnNpZ25lZCBsb25nIG5zZWNzKTsKIAorI2lmZGVmIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFCiBleHRlcm4gdW5zaWduZWQgbG9uZyB0cmFjaW5nX21heF9sYXRlbmN5OwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJhY2luZ190aHJlc2g7CiAKIHZvaWQgdXBkYXRlX21heF90cihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGNwdSk7CiB2b2lkIHVwZGF0ZV9tYXhfdHJfc2luZ2xlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCiAJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY3B1KTsKKyNlbmRpZiAvKiBDT05GSUdfVFJBQ0VSX01BWF9UUkFDRSAqLwogCi12b2lkIF9fdHJhY2Vfc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJICAgaW50IHNraXAsIGludCBwYyk7CisjaWZkZWYgQ09ORklHX1NUQUNLVFJBQ0UKK3ZvaWQgZnRyYWNlX3RyYWNlX3N0YWNrKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJaW50IHNraXAsIGludCBwYyk7CisKK3ZvaWQgZnRyYWNlX3RyYWNlX3VzZXJzdGFjayhzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCSAgICBpbnQgcGMpOworCit2b2lkIF9fdHJhY2Vfc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHNraXAsCisJCSAgIGludCBwYyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV90cmFjZV9zdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBza2lwLCBpbnQgcGMpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfdHJhY2VfdXNlcnN0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX190cmFjZV9zdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCSBpbnQgc2tpcCwgaW50IHBjKQoreworfQorI2VuZGlmIC8qIENPTkZJR19TVEFDS1RSQUNFICovCiAKIGV4dGVybiBjeWNsZV90IGZ0cmFjZV9ub3coaW50IGNwdSk7CiAKQEAgLTUxMyw2ICs1MzEsMTAgQEAKIGV4dGVybiBpbnQgRFlOX0ZUUkFDRV9URVNUX05BTUUodm9pZCk7CiAjZW5kaWYKIAorZXh0ZXJuIGludCByaW5nX2J1ZmZlcl9leHBhbmRlZDsKK2V4dGVybiBib29sIHRyYWNpbmdfc2VsZnRlc3RfZGlzYWJsZWQ7CitERUNMQVJFX1BFUl9DUFUobG9jYWxfdCwgZnRyYWNlX2NwdV9kaXNhYmxlZCk7CisKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVAogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAogCQkJCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKQEAgLTU0NCw5ICs1NjYsMTYgQEAKIHRyYWNlX3ZicHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsKIGV4dGVybiBpbnQKIHRyYWNlX3ZwcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOworZXh0ZXJuIGludAordHJhY2VfYXJyYXlfdnByaW50ayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkgICAgdW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOworaW50IHRyYWNlX2FycmF5X3ByaW50ayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCAuLi4pOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyB0cmFjZV9mbGFnczsKIAorZXh0ZXJuIGludCB0cmFjZV9jbG9ja19pZDsKKwogLyogU3RhbmRhcmQgb3V0cHV0IGZvcm1hdHRpbmcgZnVuY3Rpb24gdXNlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIHRyYWNlcyAqLwogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIGV4dGVybiBlbnVtIHByaW50X2xpbmVfdCBwcmludF9ncmFwaF9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOwpAQCAtNjM1LDkgKzY2NCw4IEBACiAJVFJBQ0VfSVRFUl9QUklOVEtfTVNHT05MWQk9IDB4MTAwMDAsCiAJVFJBQ0VfSVRFUl9DT05URVhUX0lORk8JCT0gMHgyMDAwMCwgLyogUHJpbnQgcGlkL2NwdS90aW1lICovCiAJVFJBQ0VfSVRFUl9MQVRFTkNZX0ZNVAkJPSAweDQwMDAwLAotCVRSQUNFX0lURVJfR0xPQkFMX0NMSwkJPSAweDgwMDAwLAotCVRSQUNFX0lURVJfU0xFRVBfVElNRQkJPSAweDEwMDAwMCwKLQlUUkFDRV9JVEVSX0dSQVBIX1RJTUUJCT0gMHgyMDAwMDAsCisJVFJBQ0VfSVRFUl9TTEVFUF9USU1FCQk9IDB4ODAwMDAsCisJVFJBQ0VfSVRFUl9HUkFQSF9USU1FCQk9IDB4MTAwMDAwLAogfTsKIAogLyoKQEAgLTczNCw2ICs3NjIsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbGluazsKIAljaGFyCQkJKm5hbWU7CiAJY2hhcgkJCSp0eXBlOworCWludAkJCWZpbHRlcl90eXBlOwogCWludAkJCW9mZnNldDsKIAlpbnQJCQlzaXplOwogCWludAkJCWlzX3NpZ25lZDsKQEAgLTc0MywxMyArNzcyLDE1IEBACiAJaW50CQkJbl9wcmVkczsKIAlzdHJ1Y3QgZmlsdGVyX3ByZWQJKipwcmVkczsKIAljaGFyCQkJKmZpbHRlcl9zdHJpbmc7CisJYm9vbAkJCW5vX3Jlc2V0OwogfTsKIAogc3RydWN0IGV2ZW50X3N1YnN5c3RlbSB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCWNvbnN0IGNoYXIJCSpuYW1lOwogCXN0cnVjdCBkZW50cnkJCSplbnRyeTsKLQl2b2lkCQkJKmZpbHRlcjsKKwlzdHJ1Y3QgZXZlbnRfZmlsdGVyCSpmaWx0ZXI7CisJaW50CQkJbnJfZXZlbnRzOwogfTsKIAogc3RydWN0IGZpbHRlcl9wcmVkOwpAQCAtNzc3LDYgKzgwOCw3IEBACiAJCQkJCWNoYXIgKmZpbHRlcl9zdHJpbmcpOwogZXh0ZXJuIHZvaWQgcHJpbnRfc3Vic3lzdGVtX2V2ZW50X2ZpbHRlcihzdHJ1Y3QgZXZlbnRfc3Vic3lzdGVtICpzeXN0ZW0sCiAJCQkJCSBzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKK2V4dGVybiBpbnQgZmlsdGVyX2Fzc2lnbl90eXBlKGNvbnN0IGNoYXIgKnR5cGUpOwogCiBzdGF0aWMgaW5saW5lIGludAogZmlsdGVyX2NoZWNrX2Rpc2NhcmQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCB2b2lkICpyZWMsCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfYm9vdC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Jvb3QuYwppbmRleCBhMjllZjIzLi4xOWJmYzc1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfYm9vdC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ib290LmMKQEAgLTQxLDE0ICs0MSwxMiBAQAogCiBzdGF0aWMgaW50IGJvb3RfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCWludCBjcHU7CiAJYm9vdF90cmFjZSA9IHRyOwogCiAJaWYgKCF0cikKIAkJcmV0dXJuIDA7CiAKLQlmb3JfZWFjaF9jcHUoY3B1LCBjcHVfcG9zc2libGVfbWFzaykKLQkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKKwl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKIAogCXRyYWNpbmdfc2NoZWRfc3dpdGNoX2Fzc2lnbl90cmFjZSh0cik7CiAJcmV0dXJuIDA7CkBAIC0xMzIsNiArMTMwLDcgQEAKIHZvaWQgdHJhY2VfYm9vdF9jYWxsKHN0cnVjdCBib290X3RyYWNlX2NhbGwgKmJ0LCBpbml0Y2FsbF90IGZuKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7CiAJc3RydWN0IHRyYWNlX2Jvb3RfY2FsbCAqZW50cnk7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGJvb3RfdHJhY2U7CiAKQEAgLTE0NCwxMyArMTQzLDE0IEBACiAJc3ByaW50X3N5bWJvbChidC0+ZnVuYywgKHVuc2lnbmVkIGxvbmcpZm4pOwogCXByZWVtcHRfZGlzYWJsZSgpOwogCi0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9CT09UX0NBTEwsCisJYnVmZmVyID0gdHItPmJ1ZmZlcjsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9CT09UX0NBTEwsCiAJCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIDApOwogCWlmICghZXZlbnQpCiAJCWdvdG8gb3V0OwogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CiAJZW50cnktPmJvb3RfY2FsbCA9ICpidDsKLQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIDAsIDApOworCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIDAsIDApOwogIG91dDoKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQpAQCAtMTU4LDYgKzE1OCw3IEBACiB2b2lkIHRyYWNlX2Jvb3RfcmV0KHN0cnVjdCBib290X3RyYWNlX3JldCAqYnQsIGluaXRjYWxsX3QgZm4pCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKIAlzdHJ1Y3QgdHJhY2VfYm9vdF9yZXQgKmVudHJ5OwogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBib290X3RyYWNlOwogCkBAIC0xNjcsMTMgKzE2OCwxNCBAQAogCXNwcmludF9zeW1ib2woYnQtPmZ1bmMsICh1bnNpZ25lZCBsb25nKWZuKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAotCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfQk9PVF9SRVQsCisJYnVmZmVyID0gdHItPmJ1ZmZlcjsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9CT09UX1JFVCwKIAkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgMCk7CiAJaWYgKCFldmVudCkKIAkJZ290byBvdXQ7CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAllbnRyeS0+Ym9vdF9yZXQgPSAqYnQ7Ci0JdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCAwKTsKKwl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCAwLCAwKTsKICBvdXQ6CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwppbmRleCBlNzUyNzZhLi45N2UyYzRkIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCkBAIC0xNyw2ICsxNyw4IEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKICNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKIAogI2RlZmluZSBUUkFDRV9TWVNURU0gIlRSQUNFX1NZU1RFTSIKQEAgLTI1LDggKzI3LDkgQEAKIAogTElTVF9IRUFEKGZ0cmFjZV9ldmVudHMpOwogCi1pbnQgdHJhY2VfZGVmaW5lX2ZpZWxkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgY2hhciAqdHlwZSwKLQkJICAgICAgIGNoYXIgKm5hbWUsIGludCBvZmZzZXQsIGludCBzaXplLCBpbnQgaXNfc2lnbmVkKQoraW50IHRyYWNlX2RlZmluZV9maWVsZChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIGNvbnN0IGNoYXIgKnR5cGUsCisJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgaW50IGlzX3NpZ25lZCwKKwkJICAgICAgIGludCBmaWx0ZXJfdHlwZSkKIHsKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkICpmaWVsZDsKIApAQCAtNDIsOSArNDUsMTUgQEAKIAlpZiAoIWZpZWxkLT50eXBlKQogCQlnb3RvIGVycjsKIAorCWlmIChmaWx0ZXJfdHlwZSA9PSBGSUxURVJfT1RIRVIpCisJCWZpZWxkLT5maWx0ZXJfdHlwZSA9IGZpbHRlcl9hc3NpZ25fdHlwZSh0eXBlKTsKKwllbHNlCisJCWZpZWxkLT5maWx0ZXJfdHlwZSA9IGZpbHRlcl90eXBlOworCiAJZmllbGQtPm9mZnNldCA9IG9mZnNldDsKIAlmaWVsZC0+c2l6ZSA9IHNpemU7CiAJZmllbGQtPmlzX3NpZ25lZCA9IGlzX3NpZ25lZDsKKwogCWxpc3RfYWRkKCZmaWVsZC0+bGluaywgJmNhbGwtPmZpZWxkcyk7CiAKIAlyZXR1cm4gMDsKQEAgLTYwLDYgKzY5LDI5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9kZWZpbmVfZmllbGQpOwogCisjZGVmaW5lIF9fY29tbW9uX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQlcCisJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGNhbGwsICN0eXBlLCAiY29tbW9uXyIgI2l0ZW0sCQlcCisJCQkJIG9mZnNldG9mKHR5cGVvZihlbnQpLCBpdGVtKSwJCVwKKwkJCQkgc2l6ZW9mKGVudC5pdGVtKSwJCQlcCisJCQkJIGlzX3NpZ25lZF90eXBlKHR5cGUpLCBGSUxURVJfT1RIRVIpOwlcCisJaWYgKHJldCkJCQkJCQkJXAorCQlyZXR1cm4gcmV0OworCitpbnQgdHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQoreworCWludCByZXQ7CisJc3RydWN0IHRyYWNlX2VudHJ5IGVudDsKKworCV9fY29tbW9uX2ZpZWxkKHVuc2lnbmVkIHNob3J0LCB0eXBlKTsKKwlfX2NvbW1vbl9maWVsZCh1bnNpZ25lZCBjaGFyLCBmbGFncyk7CisJX19jb21tb25fZmllbGQodW5zaWduZWQgY2hhciwgcHJlZW1wdF9jb3VudCk7CisJX19jb21tb25fZmllbGQoaW50LCBwaWQpOworCV9fY29tbW9uX2ZpZWxkKGludCwgdGdpZCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHMpOworCiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIAogc3RhdGljIHZvaWQgdHJhY2VfZGVzdHJveV9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQpAQCAtODQsMTQgKzExNiwxNCBAQAogCQlpZiAoY2FsbC0+ZW5hYmxlZCkgewogCQkJY2FsbC0+ZW5hYmxlZCA9IDA7CiAJCQl0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTsKLQkJCWNhbGwtPnVucmVnZnVuYygpOworCQkJY2FsbC0+dW5yZWdmdW5jKGNhbGwtPmRhdGEpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMToKIAkJaWYgKCFjYWxsLT5lbmFibGVkKSB7CiAJCQljYWxsLT5lbmFibGVkID0gMTsKIAkJCXRyYWNpbmdfc3RhcnRfY21kbGluZV9yZWNvcmQoKTsKLQkJCWNhbGwtPnJlZ2Z1bmMoKTsKKwkJCWNhbGwtPnJlZ2Z1bmMoY2FsbC0+ZGF0YSk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtNTc0LDcgKzYwNiw3IEBACiAJdHJhY2Vfc2VxX3ByaW50ZihzLCAiZm9ybWF0OlxuIik7CiAJdHJhY2Vfd3JpdGVfaGVhZGVyKHMpOwogCi0JciA9IGNhbGwtPnNob3dfZm9ybWF0KHMpOworCXIgPSBjYWxsLT5zaG93X2Zvcm1hdChjYWxsLCBzKTsKIAlpZiAoIXIpIHsKIAkJLyoKIAkJICogdWchICBUaGUgZm9ybWF0IG91dHB1dCBpcyBiaWdnZXIgdGhhbiBhIFBBR0UhIQpAQCAtODQ5LDggKzg4MSwxMCBAQAogCiAJLyogRmlyc3Qgc2VlIGlmIHdlIGRpZCBub3QgYWxyZWFkeSBjcmVhdGUgdGhpcyBkaXIgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN5c3RlbSwgJmV2ZW50X3N1YnN5c3RlbXMsIGxpc3QpIHsKLQkJaWYgKHN0cmNtcChzeXN0ZW0tPm5hbWUsIG5hbWUpID09IDApCisJCWlmIChzdHJjbXAoc3lzdGVtLT5uYW1lLCBuYW1lKSA9PSAwKSB7CisJCQlzeXN0ZW0tPm5yX2V2ZW50cysrOwogCQkJcmV0dXJuIHN5c3RlbS0+ZW50cnk7CisJCX0KIAl9CiAKIAkvKiBuZWVkIHRvIGNyZWF0ZSBuZXcgZW50cnkgKi8KQEAgLTg2OSw2ICs5MDMsNyBAQAogCQlyZXR1cm4gZF9ldmVudHM7CiAJfQogCisJc3lzdGVtLT5ucl9ldmVudHMgPSAxOwogCXN5c3RlbS0+bmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzeXN0ZW0tPm5hbWUpIHsKIAkJZGVidWdmc19yZW1vdmUoc3lzdGVtLT5lbnRyeSk7CkBAIC05MjAsMTUgKzk1NSw2IEBACiAJaWYgKHN0cmNtcChjYWxsLT5zeXN0ZW0sIFRSQUNFX1NZU1RFTSkgIT0gMCkKIAkJZF9ldmVudHMgPSBldmVudF9zdWJzeXN0ZW1fZGlyKGNhbGwtPnN5c3RlbSwgZF9ldmVudHMpOwogCi0JaWYgKGNhbGwtPnJhd19pbml0KSB7Ci0JCXJldCA9IGNhbGwtPnJhd19pbml0KCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSB0cmFjZSBwb2ludCIKLQkJCQkgICAiIGV2ZW50cy8lc1xuIiwgY2FsbC0+bmFtZSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCiAJY2FsbC0+ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGNhbGwtPm5hbWUsIGRfZXZlbnRzKTsKIAlpZiAoIWNhbGwtPmRpcikgewogCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgpAQCAtOTQ1LDcgKzk3MSw3IEBACiAJCQkJCSAgaWQpOwogCiAJaWYgKGNhbGwtPmRlZmluZV9maWVsZHMpIHsKLQkJcmV0ID0gY2FsbC0+ZGVmaW5lX2ZpZWxkcygpOworCQlyZXQgPSBjYWxsLT5kZWZpbmVfZmllbGRzKGNhbGwpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgcG9pbnQiCiAJCQkJICAgIiBldmVudHMvJXNcbiIsIGNhbGwtPm5hbWUpOwpAQCAtOTg3LDYgKzEwMTMsMzIgQEAKIAlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCQlmaWx0ZXI7CiB9OwogCitzdGF0aWMgdm9pZCByZW1vdmVfc3Vic3lzdGVtX2Rpcihjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbTsKKworCWlmIChzdHJjbXAobmFtZSwgVFJBQ0VfU1lTVEVNKSA9PSAwKQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN5c3RlbSwgJmV2ZW50X3N1YnN5c3RlbXMsIGxpc3QpIHsKKwkJaWYgKHN0cmNtcChzeXN0ZW0tPm5hbWUsIG5hbWUpID09IDApIHsKKwkJCWlmICghLS1zeXN0ZW0tPm5yX2V2ZW50cykgeworCQkJCXN0cnVjdCBldmVudF9maWx0ZXIgKmZpbHRlciA9IHN5c3RlbS0+ZmlsdGVyOworCisJCQkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHN5c3RlbS0+ZW50cnkpOworCQkJCWxpc3RfZGVsKCZzeXN0ZW0tPmxpc3QpOworCQkJCWlmIChmaWx0ZXIpIHsKKwkJCQkJa2ZyZWUoZmlsdGVyLT5maWx0ZXJfc3RyaW5nKTsKKwkJCQkJa2ZyZWUoZmlsdGVyKTsKKwkJCQl9CisJCQkJa2ZyZWUoc3lzdGVtLT5uYW1lKTsKKwkJCQlrZnJlZShzeXN0ZW0pOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX21vZHVsZV9maWxlX29wcyAqCiB0cmFjZV9jcmVhdGVfZmlsZV9vcHMoc3RydWN0IG1vZHVsZSAqbW9kKQogewpAQCAtMTAyNyw2ICsxMDc5LDcgQEAKIAlzdHJ1Y3QgZnRyYWNlX21vZHVsZV9maWxlX29wcyAqZmlsZV9vcHMgPSBOVUxMOwogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgKnN0YXJ0LCAqZW5kOwogCXN0cnVjdCBkZW50cnkgKmRfZXZlbnRzOworCWludCByZXQ7CiAKIAlzdGFydCA9IG1vZC0+dHJhY2VfZXZlbnRzOwogCWVuZCA9IG1vZC0+dHJhY2VfZXZlbnRzICsgbW9kLT5udW1fdHJhY2VfZXZlbnRzOwpAQCAtMTA0Miw3ICsxMDk1LDE1IEBACiAJCS8qIFRoZSBsaW5rZXIgbWF5IGxlYXZlIGJsYW5rcyAqLwogCQlpZiAoIWNhbGwtPm5hbWUpCiAJCQljb250aW51ZTsKLQorCQlpZiAoY2FsbC0+cmF3X2luaXQpIHsKKwkJCXJldCA9IGNhbGwtPnJhd19pbml0KCk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWlmIChyZXQgIT0gLUVOT1NZUykKKwkJCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgIgorCQkJCQkicG9pbnQgZXZlbnRzLyVzXG4iLCBjYWxsLT5uYW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQogCQkvKgogCQkgKiBUaGlzIG1vZHVsZSBoYXMgZXZlbnRzLCBjcmVhdGUgZmlsZSBvcHMgZm9yIHRoaXMgbW9kdWxlCiAJCSAqIGlmIG5vdCBhbHJlYWR5IGRvbmUuCkBAIC0xMDc3LDYgKzExMzgsNyBAQAogCQkJbGlzdF9kZWwoJmNhbGwtPmxpc3QpOwogCQkJdHJhY2VfZGVzdHJveV9maWVsZHMoY2FsbCk7CiAJCQlkZXN0cm95X3ByZWRzKGNhbGwpOworCQkJcmVtb3ZlX3N1YnN5c3RlbV9kaXIoY2FsbC0+c3lzdGVtKTsKIAkJfQogCX0KIApAQCAtMTEzMyw2ICsxMTk1LDE4IEBACiBleHRlcm4gc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fc3RhcnRfZnRyYWNlX2V2ZW50c1tdOwogZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3N0b3BfZnRyYWNlX2V2ZW50c1tdOwogCitzdGF0aWMgY2hhciBib290dXBfZXZlbnRfYnVmW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhOworCitzdGF0aWMgX19pbml0IGludCBzZXR1cF90cmFjZV9ldmVudChjaGFyICpzdHIpCit7CisJc3RybGNweShib290dXBfZXZlbnRfYnVmLCBzdHIsIENPTU1BTkRfTElORV9TSVpFKTsKKwlyaW5nX2J1ZmZlcl9leHBhbmRlZCA9IDE7CisJdHJhY2luZ19zZWxmdGVzdF9kaXNhYmxlZCA9IDE7CisKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInRyYWNlX2V2ZW50PSIsIHNldHVwX3RyYWNlX2V2ZW50KTsKKwogc3RhdGljIF9faW5pdCBpbnQgZXZlbnRfdHJhY2VfaW5pdCh2b2lkKQogewogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbDsKQEAgLTExNDAsNiArMTIxNCw4IEBACiAJc3RydWN0IGRlbnRyeSAqZW50cnk7CiAJc3RydWN0IGRlbnRyeSAqZF9ldmVudHM7CiAJaW50IHJldDsKKwljaGFyICpidWYgPSBib290dXBfZXZlbnRfYnVmOworCWNoYXIgKnRva2VuOwogCiAJZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7CiAJaWYgKCFkX3RyYWNlcikKQEAgLTExNzksMTIgKzEyNTUsMzQgQEAKIAkJLyogVGhlIGxpbmtlciBtYXkgbGVhdmUgYmxhbmtzICovCiAJCWlmICghY2FsbC0+bmFtZSkKIAkJCWNvbnRpbnVlOworCQlpZiAoY2FsbC0+cmF3X2luaXQpIHsKKwkJCXJldCA9IGNhbGwtPnJhd19pbml0KCk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWlmIChyZXQgIT0gLUVOT1NZUykKKwkJCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgIgorCQkJCQkicG9pbnQgZXZlbnRzLyVzXG4iLCBjYWxsLT5uYW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQogCQlsaXN0X2FkZCgmY2FsbC0+bGlzdCwgJmZ0cmFjZV9ldmVudHMpOwogCQlldmVudF9jcmVhdGVfZGlyKGNhbGwsIGRfZXZlbnRzLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCiAJCQkJICZmdHJhY2VfZW5hYmxlX2ZvcHMsICZmdHJhY2VfZXZlbnRfZmlsdGVyX2ZvcHMsCiAJCQkJICZmdHJhY2VfZXZlbnRfZm9ybWF0X2ZvcHMpOwogCX0KIAorCXdoaWxlICh0cnVlKSB7CisJCXRva2VuID0gc3Ryc2VwKCZidWYsICIsIik7CisKKwkJaWYgKCF0b2tlbikKKwkJCWJyZWFrOworCQlpZiAoISp0b2tlbikKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IGZ0cmFjZV9zZXRfY2xyX2V2ZW50KHRva2VuLCAxKTsKKwkJaWYgKHJldCkKKwkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBlbmFibGUgdHJhY2UgZXZlbnQ6ICVzXG4iLCB0b2tlbik7CisJfQorCiAJcmV0ID0gcmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKCZ0cmFjZV9tb2R1bGVfbmIpOwogCWlmIChyZXQpCiAJCXByX3dhcm5pbmcoIkZhaWxlZCB0byByZWdpc3RlciB0cmFjZSBldmVudHMgbW9kdWxlIG5vdGlmaWVyXG4iKTsKQEAgLTEzMzQsMTIgKzE0MzIsMTMgQEAKIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKGF0b21pY190LCB0ZXN0X2V2ZW50X2Rpc2FibGUpOworc3RhdGljIERFRklORV9QRVJfQ1BVKGF0b21pY190LCBmdHJhY2VfdGVzdF9ldmVudF9kaXNhYmxlKTsKIAogc3RhdGljIHZvaWQKIGZ1bmN0aW9uX3Rlc3RfZXZlbnRzX2NhbGwodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXApCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKIAlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICplbnRyeTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgZGlzYWJsZWQ7CkBAIC0xMzUwLDE0ICsxNDQ5LDE1IEBACiAJcGMgPSBwcmVlbXB0X2NvdW50KCk7CiAJcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKIAljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJnBlcl9jcHUodGVzdF9ldmVudF9kaXNhYmxlLCBjcHUpKTsKKwlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZwZXJfY3B1KGZ0cmFjZV90ZXN0X2V2ZW50X2Rpc2FibGUsIGNwdSkpOwogCiAJaWYgKGRpc2FibGVkICE9IDEpCiAJCWdvdG8gb3V0OwogCiAJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CiAKLQlldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZShUUkFDRV9GTiwgc2l6ZW9mKCplbnRyeSksCisJZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoJmJ1ZmZlciwKKwkJCQkJCSAgVFJBQ0VfRk4sIHNpemVvZigqZW50cnkpLAogCQkJCQkJICBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCiAJCWdvdG8gb3V0OwpAQCAtMTM2NSwxMCArMTQ2NSwxMCBAQAogCWVudHJ5LT5pcAkJCT0gaXA7CiAJZW50cnktPnBhcmVudF9pcAkJPSBwYXJlbnRfaXA7CiAKLQl0cmFjZV9ub3dha2VfYnVmZmVyX3VubG9ja19jb21taXQoZXZlbnQsIGZsYWdzLCBwYyk7CisJdHJhY2Vfbm93YWtlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIGZsYWdzLCBwYyk7CiAKICBvdXQ6Ci0JYXRvbWljX2RlYygmcGVyX2NwdSh0ZXN0X2V2ZW50X2Rpc2FibGUsIGNwdSkpOworCWF0b21pY19kZWMoJnBlcl9jcHUoZnRyYWNlX3Rlc3RfZXZlbnRfZGlzYWJsZSwgY3B1KSk7CiAJZnRyYWNlX3ByZWVtcHRfZW5hYmxlKHJlc2NoZWQpOwogfQogCkBAIC0xMzkyLDEwICsxNDkyLDEwIEBACiAKIHN0YXRpYyBfX2luaXQgaW50IGV2ZW50X3RyYWNlX3NlbGZfdGVzdHNfaW5pdCh2b2lkKQogewotCi0JZXZlbnRfdHJhY2Vfc2VsZl90ZXN0cygpOwotCi0JZXZlbnRfdHJhY2Vfc2VsZl90ZXN0X3dpdGhfZnVuY3Rpb24oKTsKKwlpZiAoIXRyYWNpbmdfc2VsZnRlc3RfZGlzYWJsZWQpIHsKKwkJZXZlbnRfdHJhY2Vfc2VsZl90ZXN0cygpOworCQlldmVudF90cmFjZV9zZWxmX3Rlc3Rfd2l0aF9mdW5jdGlvbigpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKaW5kZXggZjMyZGM5ZC4uOTM2NjBmYiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCkBAIC0xNjMsNiArMTYzLDIwIEBACiAJcmV0dXJuIG1hdGNoOwogfQogCisvKiBGaWx0ZXIgcHJlZGljYXRlIGZvciBjaGFyICogcG9pbnRlcnMgKi8KK3N0YXRpYyBpbnQgZmlsdGVyX3ByZWRfcGNoYXIoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkLCB2b2lkICpldmVudCwKKwkJCSAgICAgaW50IHZhbDEsIGludCB2YWwyKQoreworCWNoYXIgKiphZGRyID0gKGNoYXIgKiopKGV2ZW50ICsgcHJlZC0+b2Zmc2V0KTsKKwlpbnQgY21wLCBtYXRjaDsKKworCWNtcCA9IHN0cm5jbXAoKmFkZHIsIHByZWQtPnN0cl92YWwsIHByZWQtPnN0cl9sZW4pOworCisJbWF0Y2ggPSAoIWNtcCkgXiBwcmVkLT5ub3Q7CisKKwlyZXR1cm4gbWF0Y2g7Cit9CisKIC8qCiAgKiBGaWx0ZXIgcHJlZGljYXRlIGZvciBkeW5hbWljIHNpemVkIGFycmF5cyBvZiBjaGFyYWN0ZXJzLgogICogVGhlc2UgYXJlIGltcGxlbWVudGVkIHRocm91Z2ggYSBsaXN0IG9mIHN0cmluZ3MgYXQgdGhlIGVuZApAQCAtMTc2LDExICsxOTAsMTMgQEAKIHN0YXRpYyBpbnQgZmlsdGVyX3ByZWRfc3RybG9jKHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCwgdm9pZCAqZXZlbnQsCiAJCQkgICAgICBpbnQgdmFsMSwgaW50IHZhbDIpCiB7Ci0JdW5zaWduZWQgc2hvcnQgc3RyX2xvYyA9ICoodW5zaWduZWQgc2hvcnQgKikoZXZlbnQgKyBwcmVkLT5vZmZzZXQpOworCXUzMiBzdHJfaXRlbSA9ICoodTMyICopKGV2ZW50ICsgcHJlZC0+b2Zmc2V0KTsKKwlpbnQgc3RyX2xvYyA9IHN0cl9pdGVtICYgMHhmZmZmOworCWludCBzdHJfbGVuID0gc3RyX2l0ZW0gPj4gMTY7CiAJY2hhciAqYWRkciA9IChjaGFyICopKGV2ZW50ICsgc3RyX2xvYyk7CiAJaW50IGNtcCwgbWF0Y2g7CiAKLQljbXAgPSBzdHJuY21wKGFkZHIsIHByZWQtPnN0cl92YWwsIHByZWQtPnN0cl9sZW4pOworCWNtcCA9IHN0cm5jbXAoYWRkciwgcHJlZC0+c3RyX3ZhbCwgc3RyX2xlbik7CiAKIAltYXRjaCA9ICghY21wKSBeIHByZWQtPm5vdDsKIApAQCAtMjkzLDcgKzMwOSw3IEBACiAJc3RydWN0IGV2ZW50X2ZpbHRlciAqZmlsdGVyID0gY2FsbC0+ZmlsdGVyOwogCiAJbXV0ZXhfbG9jaygmZXZlbnRfbXV0ZXgpOwotCWlmIChmaWx0ZXItPmZpbHRlcl9zdHJpbmcpCisJaWYgKGZpbHRlciAmJiBmaWx0ZXItPmZpbHRlcl9zdHJpbmcpCiAJCXRyYWNlX3NlcV9wcmludGYocywgIiVzXG4iLCBmaWx0ZXItPmZpbHRlcl9zdHJpbmcpOwogCWVsc2UKIAkJdHJhY2Vfc2VxX3ByaW50ZihzLCAibm9uZVxuIik7CkBAIC0zMDYsNyArMzIyLDcgQEAKIAlzdHJ1Y3QgZXZlbnRfZmlsdGVyICpmaWx0ZXIgPSBzeXN0ZW0tPmZpbHRlcjsKIAogCW11dGV4X2xvY2soJmV2ZW50X211dGV4KTsKLQlpZiAoZmlsdGVyLT5maWx0ZXJfc3RyaW5nKQorCWlmIChmaWx0ZXIgJiYgZmlsdGVyLT5maWx0ZXJfc3RyaW5nKQogCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIlc1xuIiwgZmlsdGVyLT5maWx0ZXJfc3RyaW5nKTsKIAllbHNlCiAJCXRyYWNlX3NlcV9wcmludGYocywgIm5vbmVcbiIpOwpAQCAtMzc0LDYgKzM5MCw5IEBACiAJc3RydWN0IGV2ZW50X2ZpbHRlciAqZmlsdGVyID0gY2FsbC0+ZmlsdGVyOwogCWludCBpOwogCisJaWYgKCFmaWx0ZXIpCisJCXJldHVybjsKKwogCWZvciAoaSA9IDA7IGkgPCBNQVhfRklMVEVSX1BSRUQ7IGkrKykgewogCQlpZiAoZmlsdGVyLT5wcmVkc1tpXSkKIAkJCWZpbHRlcl9mcmVlX3ByZWQoZmlsdGVyLT5wcmVkc1tpXSk7CkBAIC0zODQsMTcgKzQwMywxOSBAQAogCWNhbGwtPmZpbHRlciA9IE5VTEw7CiB9CiAKLWludCBpbml0X3ByZWRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3N0YXRpYyBpbnQgaW5pdF9wcmVkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7CiAJc3RydWN0IGV2ZW50X2ZpbHRlciAqZmlsdGVyOwogCXN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZDsKIAlpbnQgaTsKIAorCWlmIChjYWxsLT5maWx0ZXIpCisJCXJldHVybiAwOworCiAJZmlsdGVyID0gY2FsbC0+ZmlsdGVyID0ga3phbGxvYyhzaXplb2YoKmZpbHRlciksIEdGUF9LRVJORUwpOwogCWlmICghY2FsbC0+ZmlsdGVyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNhbGwtPmZpbHRlcl9hY3RpdmUgPSAwOwogCWZpbHRlci0+bl9wcmVkcyA9IDA7CiAKIAlmaWx0ZXItPnByZWRzID0ga3phbGxvYyhNQVhfRklMVEVSX1BSRUQgKiBzaXplb2YocHJlZCksIEdGUF9LRVJORUwpOwpAQCAtNDE2LDMwICs0MzcsNTUgQEAKIAogCXJldHVybiAtRU5PTUVNOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9wcmVkcyk7CiAKLXN0YXRpYyB2b2lkIGZpbHRlcl9mcmVlX3N1YnN5c3RlbV9wcmVkcyhzdHJ1Y3QgZXZlbnRfc3Vic3lzdGVtICpzeXN0ZW0pCitzdGF0aWMgaW50IGluaXRfc3Vic3lzdGVtX3ByZWRzKHN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbSkKIHsKLQlzdHJ1Y3QgZXZlbnRfZmlsdGVyICpmaWx0ZXIgPSBzeXN0ZW0tPmZpbHRlcjsKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGw7Ci0JaW50IGk7Ci0KLQlpZiAoZmlsdGVyLT5uX3ByZWRzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBmaWx0ZXItPm5fcHJlZHM7IGkrKykKLQkJCWZpbHRlcl9mcmVlX3ByZWQoZmlsdGVyLT5wcmVkc1tpXSk7Ci0JCWtmcmVlKGZpbHRlci0+cHJlZHMpOwotCQlmaWx0ZXItPnByZWRzID0gTlVMTDsKLQkJZmlsdGVyLT5uX3ByZWRzID0gMDsKLQl9CisJaW50IGVycjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FsbCwgJmZ0cmFjZV9ldmVudHMsIGxpc3QpIHsKIAkJaWYgKCFjYWxsLT5kZWZpbmVfZmllbGRzKQogCQkJY29udGludWU7CiAKLQkJaWYgKCFzdHJjbXAoY2FsbC0+c3lzdGVtLCBzeXN0ZW0tPm5hbWUpKSB7Ci0JCQlmaWx0ZXJfZGlzYWJsZV9wcmVkcyhjYWxsKTsKLQkJCXJlbW92ZV9maWx0ZXJfc3RyaW5nKGNhbGwtPmZpbHRlcik7CisJCWlmIChzdHJjbXAoY2FsbC0+c3lzdGVtLCBzeXN0ZW0tPm5hbWUpICE9IDApCisJCQljb250aW51ZTsKKworCQllcnIgPSBpbml0X3ByZWRzKGNhbGwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZW51bSB7CisJRklMVEVSX0RJU0FCTEVfQUxMLAorCUZJTFRFUl9JTklUX05PX1JFU0VULAorCUZJTFRFUl9TS0lQX05PX1JFU0VULAorfTsKKworc3RhdGljIHZvaWQgZmlsdGVyX2ZyZWVfc3Vic3lzdGVtX3ByZWRzKHN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbSwKKwkJCQkJaW50IGZsYWcpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWxsLCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgeworCQlpZiAoIWNhbGwtPmRlZmluZV9maWVsZHMpCisJCQljb250aW51ZTsKKworCQlpZiAoc3RyY21wKGNhbGwtPnN5c3RlbSwgc3lzdGVtLT5uYW1lKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKGZsYWcgPT0gRklMVEVSX0lOSVRfTk9fUkVTRVQpIHsKKwkJCWNhbGwtPmZpbHRlci0+bm9fcmVzZXQgPSBmYWxzZTsKKwkJCWNvbnRpbnVlOwogCQl9CisKKwkJaWYgKGZsYWcgPT0gRklMVEVSX1NLSVBfTk9fUkVTRVQgJiYgY2FsbC0+ZmlsdGVyLT5ub19yZXNldCkKKwkJCWNvbnRpbnVlOworCisJCWZpbHRlcl9kaXNhYmxlX3ByZWRzKGNhbGwpOworCQlyZW1vdmVfZmlsdGVyX3N0cmluZyhjYWxsLT5maWx0ZXIpOwogCX0KIH0KIApAQCAtNDY4LDEyICs1MTQsNyBAQAogCXJldHVybiAwOwogfQogCi1lbnVtIHsKLQlGSUxURVJfU1RBVElDX1NUUklORyA9IDEsCi0JRklMVEVSX0RZTl9TVFJJTkcKLX07Ci0KLXN0YXRpYyBpbnQgaXNfc3RyaW5nX2ZpZWxkKGNvbnN0IGNoYXIgKnR5cGUpCitpbnQgZmlsdGVyX2Fzc2lnbl90eXBlKGNvbnN0IGNoYXIgKnR5cGUpCiB7CiAJaWYgKHN0cnN0cih0eXBlLCAiX19kYXRhX2xvYyIpICYmIHN0cnN0cih0eXBlLCAiY2hhciIpKQogCQlyZXR1cm4gRklMVEVSX0RZTl9TVFJJTkc7CkBAIC00ODEsMTIgKzUyMiwxOSBAQAogCWlmIChzdHJjaHIodHlwZSwgJ1snKSAmJiBzdHJzdHIodHlwZSwgImNoYXIiKSkKIAkJcmV0dXJuIEZJTFRFUl9TVEFUSUNfU1RSSU5HOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIEZJTFRFUl9PVEhFUjsKK30KKworc3RhdGljIGJvb2wgaXNfc3RyaW5nX2ZpZWxkKHN0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgKmZpZWxkKQoreworCXJldHVybiBmaWVsZC0+ZmlsdGVyX3R5cGUgPT0gRklMVEVSX0RZTl9TVFJJTkcgfHwKKwkgICAgICAgZmllbGQtPmZpbHRlcl90eXBlID09IEZJTFRFUl9TVEFUSUNfU1RSSU5HIHx8CisJICAgICAgIGZpZWxkLT5maWx0ZXJfdHlwZSA9PSBGSUxURVJfUFRSX1NUUklORzsKIH0KIAogc3RhdGljIGludCBpc19sZWdhbF9vcChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkICpmaWVsZCwgaW50IG9wKQogewotCWlmIChpc19zdHJpbmdfZmllbGQoZmllbGQtPnR5cGUpICYmIChvcCAhPSBPUF9FUSAmJiBvcCAhPSBPUF9ORSkpCisJaWYgKGlzX3N0cmluZ19maWVsZChmaWVsZCkgJiYgKG9wICE9IE9QX0VRICYmIG9wICE9IE9QX05FKSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKQEAgLTUzNywyMiArNTg1LDI0IEBACiAKIHN0YXRpYyBpbnQgZmlsdGVyX2FkZF9wcmVkKHN0cnVjdCBmaWx0ZXJfcGFyc2Vfc3RhdGUgKnBzLAogCQkJICAgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAotCQkJICAgc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkKQorCQkJICAgc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkLAorCQkJICAgYm9vbCBkcnlfcnVuKQogewogCXN0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgKmZpZWxkOwogCWZpbHRlcl9wcmVkX2ZuX3QgZm47CiAJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKLQlpbnQgc3RyaW5nX3R5cGU7CiAJaW50IHJldDsKIAogCXByZWQtPmZuID0gZmlsdGVyX3ByZWRfbm9uZTsKIAogCWlmIChwcmVkLT5vcCA9PSBPUF9BTkQpIHsKIAkJcHJlZC0+cG9wX24gPSAyOwotCQlyZXR1cm4gZmlsdGVyX2FkZF9wcmVkX2ZuKHBzLCBjYWxsLCBwcmVkLCBmaWx0ZXJfcHJlZF9hbmQpOworCQlmbiA9IGZpbHRlcl9wcmVkX2FuZDsKKwkJZ290byBhZGRfcHJlZF9mbjsKIAl9IGVsc2UgaWYgKHByZWQtPm9wID09IE9QX09SKSB7CiAJCXByZWQtPnBvcF9uID0gMjsKLQkJcmV0dXJuIGZpbHRlcl9hZGRfcHJlZF9mbihwcywgY2FsbCwgcHJlZCwgZmlsdGVyX3ByZWRfb3IpOworCQlmbiA9IGZpbHRlcl9wcmVkX29yOworCQlnb3RvIGFkZF9wcmVkX2ZuOwogCX0KIAogCWZpZWxkID0gZmluZF9ldmVudF9maWVsZChjYWxsLCBwcmVkLT5maWVsZF9uYW1lKTsKQEAgLTU2OCwxNiArNjE4LDE3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN0cmluZ190eXBlID0gaXNfc3RyaW5nX2ZpZWxkKGZpZWxkLT50eXBlKTsKLQlpZiAoc3RyaW5nX3R5cGUpIHsKLQkJaWYgKHN0cmluZ190eXBlID09IEZJTFRFUl9TVEFUSUNfU1RSSU5HKQotCQkJZm4gPSBmaWx0ZXJfcHJlZF9zdHJpbmc7Ci0JCWVsc2UKLQkJCWZuID0gZmlsdGVyX3ByZWRfc3RybG9jOworCWlmIChpc19zdHJpbmdfZmllbGQoZmllbGQpKSB7CiAJCXByZWQtPnN0cl9sZW4gPSBmaWVsZC0+c2l6ZTsKLQkJaWYgKHByZWQtPm9wID09IE9QX05FKQotCQkJcHJlZC0+bm90ID0gMTsKLQkJcmV0dXJuIGZpbHRlcl9hZGRfcHJlZF9mbihwcywgY2FsbCwgcHJlZCwgZm4pOworCisJCWlmIChmaWVsZC0+ZmlsdGVyX3R5cGUgPT0gRklMVEVSX1NUQVRJQ19TVFJJTkcpCisJCQlmbiA9IGZpbHRlcl9wcmVkX3N0cmluZzsKKwkJZWxzZSBpZiAoZmllbGQtPmZpbHRlcl90eXBlID09IEZJTFRFUl9EWU5fU1RSSU5HKQorCQkJZm4gPSBmaWx0ZXJfcHJlZF9zdHJsb2M7CisJCWVsc2UgeworCQkJZm4gPSBmaWx0ZXJfcHJlZF9wY2hhcjsKKwkJCXByZWQtPnN0cl9sZW4gPSBzdHJsZW4ocHJlZC0+c3RyX3ZhbCk7CisJCX0KIAl9IGVsc2UgewogCQlpZiAoZmllbGQtPmlzX3NpZ25lZCkKIAkJCXJldCA9IHN0cmljdF9zdHJ0b2xsKHByZWQtPnN0cl92YWwsIDAsICZ2YWwpOwpAQCAtNTg4LDQxICs2MzksMzMgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXByZWQtPnZhbCA9IHZhbDsKLQl9CiAKLQlmbiA9IHNlbGVjdF9jb21wYXJpc29uX2ZuKHByZWQtPm9wLCBmaWVsZC0+c2l6ZSwgZmllbGQtPmlzX3NpZ25lZCk7Ci0JaWYgKCFmbikgewotCQlwYXJzZV9lcnJvcihwcywgRklMVF9FUlJfSU5WQUxJRF9PUCwgMCk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlmbiA9IHNlbGVjdF9jb21wYXJpc29uX2ZuKHByZWQtPm9wLCBmaWVsZC0+c2l6ZSwKKwkJCQkJICBmaWVsZC0+aXNfc2lnbmVkKTsKKwkJaWYgKCFmbikgeworCQkJcGFyc2VfZXJyb3IocHMsIEZJTFRfRVJSX0lOVkFMSURfT1AsIDApOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAl9CiAKIAlpZiAocHJlZC0+b3AgPT0gT1BfTkUpCiAJCXByZWQtPm5vdCA9IDE7CiAKLQlyZXR1cm4gZmlsdGVyX2FkZF9wcmVkX2ZuKHBzLCBjYWxsLCBwcmVkLCBmbik7CithZGRfcHJlZF9mbjoKKwlpZiAoIWRyeV9ydW4pCisJCXJldHVybiBmaWx0ZXJfYWRkX3ByZWRfZm4ocHMsIGNhbGwsIHByZWQsIGZuKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBmaWx0ZXJfYWRkX3N1YnN5c3RlbV9wcmVkKHN0cnVjdCBmaWx0ZXJfcGFyc2Vfc3RhdGUgKnBzLAogCQkJCSAgICAgc3RydWN0IGV2ZW50X3N1YnN5c3RlbSAqc3lzdGVtLAogCQkJCSAgICAgc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkLAotCQkJCSAgICAgY2hhciAqZmlsdGVyX3N0cmluZykKKwkJCQkgICAgIGNoYXIgKmZpbHRlcl9zdHJpbmcsCisJCQkJICAgICBib29sIGRyeV9ydW4pCiB7Ci0Jc3RydWN0IGV2ZW50X2ZpbHRlciAqZmlsdGVyID0gc3lzdGVtLT5maWx0ZXI7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsOwogCWludCBlcnIgPSAwOwotCi0JaWYgKCFmaWx0ZXItPnByZWRzKSB7Ci0JCWZpbHRlci0+cHJlZHMgPSBremFsbG9jKE1BWF9GSUxURVJfUFJFRCAqIHNpemVvZihwcmVkKSwKLQkJCQkJR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCFmaWx0ZXItPnByZWRzKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaWYgKGZpbHRlci0+bl9wcmVkcyA9PSBNQVhfRklMVEVSX1BSRUQpIHsKLQkJcGFyc2VfZXJyb3IocHMsIEZJTFRfRVJSX1RPT19NQU5ZX1BSRURTLCAwKTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQorCWJvb2wgZmFpbCA9IHRydWU7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhbGwsICZmdHJhY2VfZXZlbnRzLCBsaXN0KSB7CiAKQEAgLTYzMiwxOSArNjc1LDI0IEBACiAJCWlmIChzdHJjbXAoY2FsbC0+c3lzdGVtLCBzeXN0ZW0tPm5hbWUpKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gZmlsdGVyX2FkZF9wcmVkKHBzLCBjYWxsLCBwcmVkKTsKLQkJaWYgKGVycikgewotCQkJZmlsdGVyX2ZyZWVfc3Vic3lzdGVtX3ByZWRzKHN5c3RlbSk7Ci0JCQlwYXJzZV9lcnJvcihwcywgRklMVF9FUlJfQkFEX1NVQlNZU19GSUxURVIsIDApOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJcmVwbGFjZV9maWx0ZXJfc3RyaW5nKGNhbGwtPmZpbHRlciwgZmlsdGVyX3N0cmluZyk7CisJCWlmIChjYWxsLT5maWx0ZXItPm5vX3Jlc2V0KQorCQkJY29udGludWU7CisKKwkJZXJyID0gZmlsdGVyX2FkZF9wcmVkKHBzLCBjYWxsLCBwcmVkLCBkcnlfcnVuKTsKKwkJaWYgKGVycikKKwkJCWNhbGwtPmZpbHRlci0+bm9fcmVzZXQgPSB0cnVlOworCQllbHNlCisJCQlmYWlsID0gZmFsc2U7CisKKwkJaWYgKCFkcnlfcnVuKQorCQkJcmVwbGFjZV9maWx0ZXJfc3RyaW5nKGNhbGwtPmZpbHRlciwgZmlsdGVyX3N0cmluZyk7CiAJfQogCi0JZmlsdGVyLT5wcmVkc1tmaWx0ZXItPm5fcHJlZHNdID0gcHJlZDsKLQlmaWx0ZXItPm5fcHJlZHMrKzsKLW91dDoKLQlyZXR1cm4gZXJyOworCWlmIChmYWlsKSB7CisJCXBhcnNlX2Vycm9yKHBzLCBGSUxUX0VSUl9CQURfU1VCU1lTX0ZJTFRFUiwgMCk7CisJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwYXJzZV9pbml0KHN0cnVjdCBmaWx0ZXJfcGFyc2Vfc3RhdGUgKnBzLApAQCAtMTAwMywxMiArMTA1MSwxNCBAQAogc3RhdGljIGludCByZXBsYWNlX3ByZWRzKHN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbSwKIAkJCSBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsCiAJCQkgc3RydWN0IGZpbHRlcl9wYXJzZV9zdGF0ZSAqcHMsCi0JCQkgY2hhciAqZmlsdGVyX3N0cmluZykKKwkJCSBjaGFyICpmaWx0ZXJfc3RyaW5nLAorCQkJIGJvb2wgZHJ5X3J1bikKIHsKIAljaGFyICpvcGVyYW5kMSA9IE5VTEwsICpvcGVyYW5kMiA9IE5VTEw7CiAJc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkOwogCXN0cnVjdCBwb3N0Zml4X2VsdCAqZWx0OwogCWludCBlcnI7CisJaW50IG5fcHJlZHMgPSAwOwogCiAJZXJyID0gY2hlY2tfcHJlZHMocHMpOwogCWlmIChlcnIpCkBAIC0xMDI3LDI0ICsxMDc3LDE0IEBACiAJCQljb250aW51ZTsKIAkJfQogCisJCWlmIChuX3ByZWRzKysgPT0gTUFYX0ZJTFRFUl9QUkVEKSB7CisJCQlwYXJzZV9lcnJvcihwcywgRklMVF9FUlJfVE9PX01BTllfUFJFRFMsIDApOworCQkJcmV0dXJuIC1FTk9TUEM7CisJCX0KKwogCQlpZiAoZWx0LT5vcCA9PSBPUF9BTkQgfHwgZWx0LT5vcCA9PSBPUF9PUikgewogCQkJcHJlZCA9IGNyZWF0ZV9sb2dpY2FsX3ByZWQoZWx0LT5vcCk7Ci0JCQlpZiAoIXByZWQpCi0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQlpZiAoY2FsbCkgewotCQkJCWVyciA9IGZpbHRlcl9hZGRfcHJlZChwcywgY2FsbCwgcHJlZCk7Ci0JCQkJZmlsdGVyX2ZyZWVfcHJlZChwcmVkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZXJyID0gZmlsdGVyX2FkZF9zdWJzeXN0ZW1fcHJlZChwcywgc3lzdGVtLAotCQkJCQkJCXByZWQsIGZpbHRlcl9zdHJpbmcpOwotCQkJCWlmIChlcnIpCi0JCQkJCWZpbHRlcl9mcmVlX3ByZWQocHJlZCk7Ci0JCQl9Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0KLQkJCW9wZXJhbmQxID0gb3BlcmFuZDIgPSBOVUxMOwotCQkJY29udGludWU7CisJCQlnb3RvIGFkZF9wcmVkOwogCQl9CiAKIAkJaWYgKCFvcGVyYW5kMSB8fCAhb3BlcmFuZDIpIHsKQEAgLTEwNTMsMTcgKzEwOTMsMTUgQEAKIAkJfQogCiAJCXByZWQgPSBjcmVhdGVfcHJlZChlbHQtPm9wLCBvcGVyYW5kMSwgb3BlcmFuZDIpOworYWRkX3ByZWQ6CiAJCWlmICghcHJlZCkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAoY2FsbCkgewotCQkJZXJyID0gZmlsdGVyX2FkZF9wcmVkKHBzLCBjYWxsLCBwcmVkKTsKLQkJCWZpbHRlcl9mcmVlX3ByZWQocHJlZCk7Ci0JCX0gZWxzZSB7CisJCWlmIChjYWxsKQorCQkJZXJyID0gZmlsdGVyX2FkZF9wcmVkKHBzLCBjYWxsLCBwcmVkLCBmYWxzZSk7CisJCWVsc2UKIAkJCWVyciA9IGZpbHRlcl9hZGRfc3Vic3lzdGVtX3ByZWQocHMsIHN5c3RlbSwgcHJlZCwKLQkJCQkJCQlmaWx0ZXJfc3RyaW5nKTsKLQkJCWlmIChlcnIpCi0JCQkJZmlsdGVyX2ZyZWVfcHJlZChwcmVkKTsKLQkJfQorCQkJCQkJZmlsdGVyX3N0cmluZywgZHJ5X3J1bik7CisJCWZpbHRlcl9mcmVlX3ByZWQocHJlZCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCkBAIC0xMDgxLDYgKzExMTksMTAgQEAKIAogCW11dGV4X2xvY2soJmV2ZW50X211dGV4KTsKIAorCWVyciA9IGluaXRfcHJlZHMoY2FsbCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5sb2NrOworCiAJaWYgKCFzdHJjbXAoc3Ryc3RyaXAoZmlsdGVyX3N0cmluZyksICIwIikpIHsKIAkJZmlsdGVyX2Rpc2FibGVfcHJlZHMoY2FsbCk7CiAJCXJlbW92ZV9maWx0ZXJfc3RyaW5nKGNhbGwtPmZpbHRlcik7CkBAIC0xMTAzLDcgKzExNDUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSByZXBsYWNlX3ByZWRzKE5VTEwsIGNhbGwsIHBzLCBmaWx0ZXJfc3RyaW5nKTsKKwllcnIgPSByZXBsYWNlX3ByZWRzKE5VTEwsIGNhbGwsIHBzLCBmaWx0ZXJfc3RyaW5nLCBmYWxzZSk7CiAJaWYgKGVycikKIAkJYXBwZW5kX2ZpbHRlcl9lcnIocHMsIGNhbGwtPmZpbHRlcik7CiAKQEAgLTExMjYsOCArMTE2OCwxMiBAQAogCiAJbXV0ZXhfbG9jaygmZXZlbnRfbXV0ZXgpOwogCisJZXJyID0gaW5pdF9zdWJzeXN0ZW1fcHJlZHMoc3lzdGVtKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bmxvY2s7CisKIAlpZiAoIXN0cmNtcChzdHJzdHJpcChmaWx0ZXJfc3RyaW5nKSwgIjAiKSkgewotCQlmaWx0ZXJfZnJlZV9zdWJzeXN0ZW1fcHJlZHMoc3lzdGVtKTsKKwkJZmlsdGVyX2ZyZWVfc3Vic3lzdGVtX3ByZWRzKHN5c3RlbSwgRklMVEVSX0RJU0FCTEVfQUxMKTsKIAkJcmVtb3ZlX2ZpbHRlcl9zdHJpbmcoc3lzdGVtLT5maWx0ZXIpOwogCQltdXRleF91bmxvY2soJmV2ZW50X211dGV4KTsKIAkJcmV0dXJuIDA7CkBAIC0xMTM4LDcgKzExODQsNiBAQAogCWlmICghcHMpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCWZpbHRlcl9mcmVlX3N1YnN5c3RlbV9wcmVkcyhzeXN0ZW0pOwogCXJlcGxhY2VfZmlsdGVyX3N0cmluZyhzeXN0ZW0tPmZpbHRlciwgZmlsdGVyX3N0cmluZyk7CiAKIAlwYXJzZV9pbml0KHBzLCBmaWx0ZXJfb3BzLCBmaWx0ZXJfc3RyaW5nKTsKQEAgLTExNDgsOSArMTE5MywyMyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSByZXBsYWNlX3ByZWRzKHN5c3RlbSwgTlVMTCwgcHMsIGZpbHRlcl9zdHJpbmcpOwotCWlmIChlcnIpCisJZmlsdGVyX2ZyZWVfc3Vic3lzdGVtX3ByZWRzKHN5c3RlbSwgRklMVEVSX0lOSVRfTk9fUkVTRVQpOworCisJLyogdHJ5IHRvIHNlZSB0aGUgZmlsdGVyIGNhbiBiZSBhcHBsaWVkIHRvIHdoaWNoIGV2ZW50cyAqLworCWVyciA9IHJlcGxhY2VfcHJlZHMoc3lzdGVtLCBOVUxMLCBwcywgZmlsdGVyX3N0cmluZywgdHJ1ZSk7CisJaWYgKGVycikgewogCQlhcHBlbmRfZmlsdGVyX2Vycihwcywgc3lzdGVtLT5maWx0ZXIpOworCQlnb3RvIG91dDsKKwl9CisKKwlmaWx0ZXJfZnJlZV9zdWJzeXN0ZW1fcHJlZHMoc3lzdGVtLCBGSUxURVJfU0tJUF9OT19SRVNFVCk7CisKKwkvKiByZWFsbHkgYXBwbHkgdGhlIGZpbHRlciB0byB0aGUgZXZlbnRzICovCisJZXJyID0gcmVwbGFjZV9wcmVkcyhzeXN0ZW0sIE5VTEwsIHBzLCBmaWx0ZXJfc3RyaW5nLCBmYWxzZSk7CisJaWYgKGVycikgeworCQlhcHBlbmRfZmlsdGVyX2Vycihwcywgc3lzdGVtLT5maWx0ZXIpOworCQlmaWx0ZXJfZnJlZV9zdWJzeXN0ZW1fcHJlZHMoc3lzdGVtLCAyKTsKKwl9CiAKIG91dDoKIAlmaWx0ZXJfb3BzdGFja19jbGVhcihwcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKaW5kZXggZDA2Y2Y4OS4uZGYxYmY2ZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpAQCAtNjAsNyArNjAsOCBAQAogI3VuZGVmIFRSQUNFX0VWRU5UX0ZPUk1BVAogI2RlZmluZSBUUkFDRV9FVkVOVF9GT1JNQVQoY2FsbCwgcHJvdG8sIGFyZ3MsIGZtdCwgdHN0cnVjdCwgdHBmbXQpCVwKIHN0YXRpYyBpbnQJCQkJCQkJCVwKLWZ0cmFjZV9mb3JtYXRfIyNjYWxsKHN0cnVjdCB0cmFjZV9zZXEgKnMpCQkJCVwKK2Z0cmFjZV9mb3JtYXRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkLAkJCVwKKwkJICAgICAgc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgYXJncyBmaWVsZDsJCQkJCQlcCiAJaW50IHJldDsJCQkJCQkJXApAQCAtNzYsNyArNzcsOCBAQAogI2RlZmluZSBUUkFDRV9FVkVOVF9GT1JNQVRfTk9GSUxURVIoY2FsbCwgcHJvdG8sIGFyZ3MsIGZtdCwgdHN0cnVjdCwJXAogCQkJCSAgICB0cGZtdCkJCQkJXAogc3RhdGljIGludAkJCQkJCQkJXAotZnRyYWNlX2Zvcm1hdF8jI2NhbGwoc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAorZnRyYWNlX2Zvcm1hdF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQsCQkJXAorCQkgICAgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQkJCQlcCiB7CQkJCQkJCQkJXAogCXN0cnVjdCBhcmdzIGZpZWxkOwkJCQkJCVwKIAlpbnQgcmV0OwkJCQkJCQlcCkBAIC0xMTcsNyArMTE5LDcgQEAKIAogI3VuZGVmIFRSQUNFX0VWRU5UX0ZPUk1BVAogI2RlZmluZSBUUkFDRV9FVkVOVF9GT1JNQVQoY2FsbCwgcHJvdG8sIGFyZ3MsIGZtdCwgdHN0cnVjdCwgdHBmbXQpCVwKLWludCBmdHJhY2VfZGVmaW5lX2ZpZWxkc18jI2NhbGwodm9pZCk7CQkJCQlcCitpbnQgZnRyYWNlX2RlZmluZV9maWVsZHNfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCk7CVwKIHN0YXRpYyBpbnQgZnRyYWNlX3Jhd19pbml0X2V2ZW50XyMjY2FsbCh2b2lkKTsJCQkJXAogCQkJCQkJCQkJXAogc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJCVwKQEAgLTEzMyw3ICsxMzUsNiBAQAogc3RhdGljIGludCBmdHJhY2VfcmF3X2luaXRfZXZlbnRfIyNjYWxsKHZvaWQpCQkJCVwKIHsJCQkJCQkJCQlcCiAJSU5JVF9MSVNUX0hFQUQoJmV2ZW50XyMjY2FsbC5maWVsZHMpOwkJCQlcCi0JaW5pdF9wcmVkcygmZXZlbnRfIyNjYWxsKTsJCQkJCVwKIAlyZXR1cm4gMDsJCQkJCQkJXAogfQkJCQkJCQkJCVwKIApAQCAtMTU2LDcgKzE1Nyw4IEBACiAjZGVmaW5lIFRSQUNFX0ZJRUxEKHR5cGUsIGl0ZW0sIGFzc2lnbikJCQkJCVwKIAlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgI3R5cGUsICNpdGVtLAkJXAogCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJCVwKLQkJCQkgc2l6ZW9mKGZpZWxkLml0ZW0pLCBpc19zaWduZWRfdHlwZSh0eXBlKSk7CVwKKwkJCQkgc2l6ZW9mKGZpZWxkLml0ZW0pLAkJCVwKKwkJCQkgaXNfc2lnbmVkX3R5cGUodHlwZSksIEZJTFRFUl9PVEhFUik7CVwKIAlpZiAocmV0KQkJCQkJCQlcCiAJCXJldHVybiByZXQ7CiAKQEAgLTE2NCw3ICsxNjYsNyBAQAogI2RlZmluZSBUUkFDRV9GSUVMRF9TUEVDSUFMKHR5cGUsIGl0ZW0sIGxlbiwgY21kKQkJCVwKIAlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgI3R5cGUgIlsiICNsZW4gIl0iLCAjaXRlbSwJXAogCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJCVwKLQkJCQkgc2l6ZW9mKGZpZWxkLml0ZW0pLCAwKTsJCVwKKwkJCQkgc2l6ZW9mKGZpZWxkLml0ZW0pLCAwLCBGSUxURVJfT1RIRVIpOwlcCiAJaWYgKHJldCkJCQkJCQkJXAogCQlyZXR1cm4gcmV0OwogCkBAIC0xNzIsNyArMTc0LDggQEAKICNkZWZpbmUgVFJBQ0VfRklFTERfU0lHTih0eXBlLCBpdGVtLCBhc3NpZ24sIGlzX3NpZ25lZCkJCQlcCiAJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICN0eXBlLCAjaXRlbSwJCVwKIAkJCQkgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCQlcCi0JCQkJIHNpemVvZihmaWVsZC5pdGVtKSwgaXNfc2lnbmVkKTsJXAorCQkJCSBzaXplb2YoZmllbGQuaXRlbSksIGlzX3NpZ25lZCwJCVwKKwkJCQkgRklMVEVSX09USEVSKTsJCQkJXAogCWlmIChyZXQpCQkJCQkJCVwKIAkJcmV0dXJuIHJldDsKIApAQCAtMTgyLDE3ICsxODUsMTQgQEAKICN1bmRlZiBUUkFDRV9FVkVOVF9GT1JNQVQKICNkZWZpbmUgVFJBQ0VfRVZFTlRfRk9STUFUKGNhbGwsIHByb3RvLCBhcmdzLCBmbXQsIHRzdHJ1Y3QsIHRwZm10KQlcCiBpbnQJCQkJCQkJCQlcCi1mdHJhY2VfZGVmaW5lX2ZpZWxkc18jI2NhbGwodm9pZCkJCQkJCVwKK2Z0cmFjZV9kZWZpbmVfZmllbGRzXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsID0gJmV2ZW50XyMjY2FsbDsJCVwKIAlzdHJ1Y3QgYXJncyBmaWVsZDsJCQkJCQlcCiAJaW50IHJldDsJCQkJCQkJXAogCQkJCQkJCQkJXAotCV9fY29tbW9uX2ZpZWxkKHVuc2lnbmVkIGNoYXIsIHR5cGUsIDApOwkJCQlcCi0JX19jb21tb25fZmllbGQodW5zaWduZWQgY2hhciwgZmxhZ3MsIDApOwkJCVwKLQlfX2NvbW1vbl9maWVsZCh1bnNpZ25lZCBjaGFyLCBwcmVlbXB0X2NvdW50LCAwKTsJCVwKLQlfX2NvbW1vbl9maWVsZChpbnQsIHBpZCwgMSk7CQkJCQlcCi0JX19jb21tb25fZmllbGQoaW50LCB0Z2lkLCAxKTsJCQkJCVwKKwlyZXQgPSB0cmFjZV9kZWZpbmVfY29tbW9uX2ZpZWxkcyhldmVudF9jYWxsKTsJCQlcCisJaWYgKHJldCkJCQkJCQkJXAorCQlyZXR1cm4gcmV0OwkJCQkJCVwKIAkJCQkJCQkJCVwKIAl0c3RydWN0OwkJCQkJCQlcCiAJCQkJCQkJCQlcCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMKaW5kZXggNzVlZjAwMC4uNWIwMWI5NCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYwpAQCAtMjg4LDExICsyODgsOSBAQAogZnRyYWNlX3RyYWNlX29ub2ZmX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgbG9uZyBpcCwKIAkJCSBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzLCB2b2lkICpkYXRhKQogewotCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CiAJbG9uZyBjb3VudCA9IChsb25nKWRhdGE7CiAKLQlrYWxsc3ltc19sb29rdXAoaXAsIE5VTEwsIE5VTEwsIE5VTEwsIHN0cik7Ci0Jc2VxX3ByaW50ZihtLCAiJXM6Iiwgc3RyKTsKKwlzZXFfcHJpbnRmKG0sICIlcGY6IiwgKHZvaWQgKilpcCk7CiAKIAlpZiAob3BzID09ICZ0cmFjZW9uX3Byb2JlX29wcykKIAkJc2VxX3ByaW50ZihtLCAidHJhY2VvbiIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCmluZGV4IDQyMGVjMzQuLmIzNzQ5YTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAkub3B0cyA9IHRyYWNlX29wdHMKIH07CiAKLS8qIHBpZCBvbiB0aGUgbGFzdCB0cmFjZSBwcm9jZXNzZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfYXJyYXkgKmdyYXBoX2FycmF5OwogCiAKIC8qIEFkZCBhIGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHRvIHRoZSB0cmFjZSBzdGFjayBvbiB0aHJlYWQgaW5mby4qLwpAQCAtMTY2LDEwICsxNjYsMTIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBfX3RyYWNlX2dyYXBoX2VudHJ5KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLAorCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkJaW50IHBjKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZldmVudF9mdW5jZ3JhcGhfZW50cnk7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9IHRyLT5idWZmZXI7CisJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnRfZW50cnkgKmVudHJ5OworCisJaWYgKHVubGlrZWx5KGxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIoZnRyYWNlX2NwdV9kaXNhYmxlZCkpKSkKKwkJcmV0dXJuIDA7CisKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9HUkFQSF9FTlQsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIGZsYWdzLCBwYyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIDA7CisJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwllbnRyeS0+Z3JhcGhfZW50CQkJPSAqdHJhY2U7CisJaWYgKCFmaWx0ZXJfY3VycmVudF9jaGVja19kaXNjYXJkKGJ1ZmZlciwgY2FsbCwgZW50cnksIGV2ZW50KSkKKwkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50KTsKKworCXJldHVybiAxOworfQorCitpbnQgdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlKQoreworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBncmFwaF9hcnJheTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9uZyBkaXNhYmxlZDsKKwlpbnQgcmV0OworCWludCBjcHU7CisJaW50IHBjOworCisJaWYgKHVubGlrZWx5KCF0cikpCisJCXJldHVybiAwOworCisJaWYgKCFmdHJhY2VfdHJhY2VfdGFzayhjdXJyZW50KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWZ0cmFjZV9ncmFwaF9hZGRyKHRyYWNlLT5mdW5jKSkKKwkJcmV0dXJuIDA7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlkYXRhID0gdHItPmRhdGFbY3B1XTsKKwlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CisJaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkgeworCQlwYyA9IHByZWVtcHRfY291bnQoKTsKKwkJcmV0ID0gX190cmFjZV9ncmFwaF9lbnRyeSh0ciwgdHJhY2UsIGZsYWdzLCBwYyk7CisJfSBlbHNlIHsKKwkJcmV0ID0gMDsKKwl9CisJLyogT25seSBkbyB0aGUgYXRvbWljIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHNldCAqLworCWlmICghdGVzdF90c2tfdHJhY2VfZ3JhcGgoY3VycmVudCkpCisJCXNldF90c2tfdHJhY2VfZ3JhcGgoY3VycmVudCk7CisKKwlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX190cmFjZV9ncmFwaF9yZXR1cm4oc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsCisJCQkJdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQlpbnQgcGMpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X2Z1bmNncmFwaF9leGl0OworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIgPSB0ci0+YnVmZmVyOworCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5ICplbnRyeTsKKworCWlmICh1bmxpa2VseShsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKSkpCisJCXJldHVybjsKKworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0dSQVBIX1JFVCwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm47CisJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwllbnRyeS0+cmV0CQkJCT0gKnRyYWNlOworCWlmICghZmlsdGVyX2N1cnJlbnRfY2hlY2tfZGlzY2FyZChidWZmZXIsIGNhbGwsIGVudHJ5LCBldmVudCkpCisJCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7Cit9CisKK3ZvaWQgdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSkKK3sKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gZ3JhcGhfYXJyYXk7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWxvbmcgZGlzYWJsZWQ7CisJaW50IGNwdTsKKwlpbnQgcGM7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlkYXRhID0gdHItPmRhdGFbY3B1XTsKKwlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7CisJaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkgeworCQlwYyA9IHByZWVtcHRfY291bnQoKTsKKwkJX190cmFjZV9ncmFwaF9yZXR1cm4odHIsIHRyYWNlLCBmbGFncywgcGMpOworCX0KKwlpZiAoIXRyYWNlLT5kZXB0aCkKKwkJY2xlYXJfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpOworCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKIHN0YXRpYyBpbnQgZ3JhcGhfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCWludCByZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoJnRyYWNlX2dyYXBoX3JldHVybiwKLQkJCQkJJnRyYWNlX2dyYXBoX2VudHJ5KTsKKwlpbnQgcmV0OworCisJZ3JhcGhfYXJyYXkgPSB0cjsKKwlyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoJnRyYWNlX2dyYXBoX3JldHVybiwKKwkJCQkgICAgJnRyYWNlX2dyYXBoX2VudHJ5KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCXRyYWNpbmdfc3RhcnRfY21kbGluZV9yZWNvcmQoKTsKQEAgLTE3Nyw0OSArMjkwLDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgc2V0X2dyYXBoX2FycmF5KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJZ3JhcGhfYXJyYXkgPSB0cjsKK30KKwogc3RhdGljIHZvaWQgZ3JhcGhfdHJhY2VfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAl0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTsKIAl1bnJlZ2lzdGVyX2Z0cmFjZV9ncmFwaCgpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBsb2cxMF9jcHUoaW50IG5iKQotewotCWlmIChuYiAvIDEwMCkKLQkJcmV0dXJuIDM7Ci0JaWYgKG5iIC8gMTApCi0JCXJldHVybiAyOwotCXJldHVybiAxOwotfQorc3RhdGljIGludCBtYXhfYnl0ZXNfZm9yX2NwdTsKIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90CiBwcmludF9ncmFwaF9jcHUoc3RydWN0IHRyYWNlX3NlcSAqcywgaW50IGNwdSkKIHsKLQlpbnQgaTsKIAlpbnQgcmV0OwotCWludCBsb2cxMF90aGlzID0gbG9nMTBfY3B1KGNwdSk7Ci0JaW50IGxvZzEwX2FsbCA9IGxvZzEwX2NwdShjcHVtYXNrX3dlaWdodChjcHVfb25saW5lX21hc2spKTsKLQogCiAJLyoKIAkgKiBTdGFydCB3aXRoIGEgc3BhY2UgY2hhcmFjdGVyIC0gdG8gbWFrZSBpdCBzdGFuZCBvdXQKIAkgKiB0byB0aGUgcmlnaHQgYSBiaXQgd2hlbiB0cmFjZSBvdXRwdXQgaXMgcGFzdGVkIGludG8KIAkgKiBlbWFpbDoKIAkgKi8KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgIik7Ci0KLQkvKgotCSAqIFRyaWNreSAtIHdlIHNwYWNlIHRoZSBDUFUgZmllbGQgYWNjb3JkaW5nIHRvIHRoZSBtYXgKLQkgKiBudW1iZXIgb2Ygb25saW5lIENQVXMuIE9uIGEgMi1jcHUgc3lzdGVtIGl0IHdvdWxkIHRha2UKLQkgKiBhIG1heGltdW0gb2YgMSBkaWdpdCAtIG9uIGEgMTI4IGNwdSBzeXN0ZW0gaXQgd291bGQKLQkgKiB0YWtlIHVwIHRvIDMgZGlnaXRzOgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBsb2cxMF9hbGwgLSBsb2cxMF90aGlzOyBpKyspIHsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICIpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQl9Ci0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWQpICIsIGNwdSk7CisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICUqZCkgIiwgbWF4X2J5dGVzX2Zvcl9jcHUsIGNwdSk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIApAQCAtNTY1LDExICs2NTksNyBAQAogCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCX0KIAotCXJldCA9IHNlcV9wcmludF9pcF9zeW0ocywgY2FsbC0+ZnVuYywgMCk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIigpO1xuIik7CisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXBmKCk7XG4iLCAodm9pZCAqKWNhbGwtPmZ1bmMpOwogCWlmICghcmV0KQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKQEAgLTYxMiwxMSArNzAyLDcgQEAKIAkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAl9CiAKLQlyZXQgPSBzZXFfcHJpbnRfaXBfc3ltKHMsIGNhbGwtPmZ1bmMsIDApOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIoKSB7XG4iKTsKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlcGYoKSB7XG4iLCAodm9pZCAqKWNhbGwtPmZ1bmMpOwogCWlmICghcmV0KQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKQEAgLTkzNCw2ICsxMDIwLDggQEAKIAogc3RhdGljIF9faW5pdCBpbnQgaW5pdF9ncmFwaF90cmFjZSh2b2lkKQogeworCW1heF9ieXRlc19mb3JfY3B1ID0gc25wcmludGYoTlVMTCwgMCwgIiVkIiwgbnJfY3B1X2lkcyAtIDEpOworCiAJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlcigmZ3JhcGhfdHJhY2UpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYwppbmRleCBiOTIzZDEzLi41NTU1Yjc1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKQEAgLTE3OCw3ICsxNzgsNiBAQAogb3V0OgogCWRhdGEtPmNyaXRpY2FsX3NlcXVlbmNlID0gbWF4X3NlcXVlbmNlOwogCWRhdGEtPnByZWVtcHRfdGltZXN0YW1wID0gZnRyYWNlX25vdyhjcHUpOwotCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CiAJdHJhY2VfZnVuY3Rpb24odHIsIENBTExFUl9BRERSMCwgcGFyZW50X2lwLCBmbGFncywgcGMpOwogfQogCkBAIC0yMDgsNyArMjA3LDYgQEAKIAlkYXRhLT5jcml0aWNhbF9zZXF1ZW5jZSA9IG1heF9zZXF1ZW5jZTsKIAlkYXRhLT5wcmVlbXB0X3RpbWVzdGFtcCA9IGZ0cmFjZV9ub3coY3B1KTsKIAlkYXRhLT5jcml0aWNhbF9zdGFydCA9IHBhcmVudF9pcCA/IDogaXA7Ci0JdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKIAogCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwogCkBAIC0zNzksNiArMzc3LDcgQEAKIAlpcnFzb2ZmX3RyYWNlID0gdHI7CiAJLyogbWFrZSBzdXJlIHRoYXQgdGhlIHRyYWNlciBpcyB2aXNpYmxlICovCiAJc21wX3dtYigpOworCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOwogCXN0YXJ0X2lycXNvZmZfdHJhY2VyKHRyKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jCmluZGV4IGQ1M2I0NWUuLmM0YzliYmQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMKQEAgLTMwNywxMSArMzA3LDEyIEBACiAJCQkJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKIAkJCQlzdHJ1Y3QgbW1pb3RyYWNlX3J3ICpydykKIHsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9IHRyLT5idWZmZXI7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgdHJhY2VfbW1pb3RyYWNlX3J3ICplbnRyeTsKIAlpbnQgcGMgPSBwcmVlbXB0X2NvdW50KCk7CiAKLQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX01NSU9fUlcsCisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfTU1JT19SVywKIAkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgcGMpOwogCWlmICghZXZlbnQpIHsKIAkJYXRvbWljX2luYygmZHJvcHBlZF9jb3VudCk7CkBAIC0zMTksNyArMzIwLDcgQEAKIAl9CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAllbnRyeS0+cncJCQk9ICpydzsKLQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIDAsIHBjKTsKKwl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCAwLCBwYyk7CiB9CiAKIHZvaWQgbW1pb190cmFjZV9ydyhzdHJ1Y3QgbW1pb3RyYWNlX3J3ICpydykKQEAgLTMzMywxMSArMzM0LDEyIEBACiAJCQkJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKIAkJCQlzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqbWFwKQogeworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyID0gdHItPmJ1ZmZlcjsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCB0cmFjZV9tbWlvdHJhY2VfbWFwICplbnRyeTsKIAlpbnQgcGMgPSBwcmVlbXB0X2NvdW50KCk7CiAKLQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX01NSU9fTUFQLAorCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX01NSU9fTUFQLAogCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCBwYyk7CiAJaWYgKCFldmVudCkgewogCQlhdG9taWNfaW5jKCZkcm9wcGVkX2NvdW50KTsKQEAgLTM0NSw3ICszNDcsNyBAQAogCX0KIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwogCWVudHJ5LT5tYXAJCQk9ICptYXA7Ci0JdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCBwYyk7CisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgMCwgcGMpOwogfQogCiB2b2lkIG1taW9fdHJhY2VfbWFwcGluZyhzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqbWFwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3Bvd2VyLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcG93ZXIuYwppbmRleCA4YTMwZDk4Li5mZTFhMDBmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfcG93ZXIuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcG93ZXIuYwpAQCAtMzgsNiArMzgsNyBAQAogewogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZldmVudF9wb3dlcjsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyOwogCXN0cnVjdCB0cmFjZV9wb3dlciAqZW50cnk7CiAJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gcG93ZXJfdHJhY2U7CkBAIC00NSwxOCArNDYsMjAgQEAKIAlpZiAoIXRyYWNlX3Bvd2VyX2VuYWJsZWQpCiAJCXJldHVybjsKIAorCWJ1ZmZlciA9IHRyLT5idWZmZXI7CisKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlpdC0+ZW5kID0ga3RpbWVfZ2V0KCk7CiAJZGF0YSA9IHRyLT5kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CiAKLQlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX1BPV0VSLAorCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX1BPV0VSLAogCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKIAlpZiAoIWV2ZW50KQogCQlnb3RvIG91dDsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwogCWVudHJ5LT5zdGF0ZV9kYXRhID0gKml0OwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIHRyLT5idWZmZXIsIGV2ZW50KSkKLQkJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCAwKTsKKwlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWZmZXIsIGV2ZW50KSkKKwkJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgMCwgMCk7CiAgb3V0OgogCXByZWVtcHRfZW5hYmxlKCk7CiB9CkBAIC02Niw2ICs2OSw3IEBACiB7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X3Bvd2VyOwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7CiAJc3RydWN0IHRyYWNlX3Bvd2VyICplbnRyeTsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBwb3dlcl90cmFjZTsKQEAgLTczLDYgKzc3LDggQEAKIAlpZiAoIXRyYWNlX3Bvd2VyX2VuYWJsZWQpCiAJCXJldHVybjsKIAorCWJ1ZmZlciA9IHRyLT5idWZmZXI7CisKIAltZW1zZXQoaXQsIDAsIHNpemVvZihzdHJ1Y3QgcG93ZXJfdHJhY2UpKTsKIAlpdC0+c3RhdGUgPSBsZXZlbDsKIAlpdC0+dHlwZSA9IHR5cGU7CkBAIC04MSwxNCArODcsMTQgQEAKIAlpdC0+ZW5kID0gaXQtPnN0YW1wOwogCWRhdGEgPSB0ci0+ZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldOwogCi0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9QT1dFUiwKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9QT1dFUiwKIAkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgMCk7CiAJaWYgKCFldmVudCkKIAkJZ290byBvdXQ7CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAllbnRyeS0+c3RhdGVfZGF0YSA9ICppdDsKLQlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCB0ci0+YnVmZmVyLCBldmVudCkpCi0JCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgMCwgMCk7CisJaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCisJCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIDAsIDApOwogIG91dDoKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQpAQCAtMTQ0LDE0ICsxNTAsMTIgQEAKIAogc3RhdGljIGludCBwb3dlcl90cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7Ci0JaW50IGNwdTsKIAlwb3dlcl90cmFjZSA9IHRyOwogCiAJdHJhY2VfcG93ZXJfZW5hYmxlZCA9IDE7CiAJdHJhY2luZ19wb3dlcl9yZWdpc3RlcigpOwogCi0JZm9yX2VhY2hfY3B1KGNwdSwgY3B1X3Bvc3NpYmxlX21hc2spCi0JCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7CisJdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF9zd2l0Y2guYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF9zd2l0Y2guYwppbmRleCBhOTgxMDZkLi41ZmNhMGY1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfc3dpdGNoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3N3aXRjaC5jCkBAIC0yMCw2ICsyMCwzNSBAQAogc3RhdGljIERFRklORV9NVVRFWChzY2hlZF9yZWdpc3Rlcl9tdXRleCk7CiBzdGF0aWMgaW50CQkJc2NoZWRfc3RvcHBlZDsKIAorCit2b2lkCit0cmFjaW5nX3NjaGVkX3N3aXRjaF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAorCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LAorCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZldmVudF9jb250ZXh0X3N3aXRjaDsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9IHRyLT5idWZmZXI7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZW50cnk7CisKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9DVFgsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIGZsYWdzLCBwYyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJZW50cnktPnByZXZfcGlkCQkJPSBwcmV2LT5waWQ7CisJZW50cnktPnByZXZfcHJpbwkJPSBwcmV2LT5wcmlvOworCWVudHJ5LT5wcmV2X3N0YXRlCQk9IHByZXYtPnN0YXRlOworCWVudHJ5LT5uZXh0X3BpZAkJCT0gbmV4dC0+cGlkOworCWVudHJ5LT5uZXh0X3ByaW8JCT0gbmV4dC0+cHJpbzsKKwllbnRyeS0+bmV4dF9zdGF0ZQkJPSBuZXh0LT5zdGF0ZTsKKwllbnRyeS0+bmV4dF9jcHUJPSB0YXNrX2NwdShuZXh0KTsKKworCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQorCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCBmbGFncywgcGMpOworfQorCiBzdGF0aWMgdm9pZAogcHJvYmVfc2NoZWRfc3dpdGNoKHN0cnVjdCBycSAqX19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQpAQCAtNDksNiArNzgsMzYgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKK3ZvaWQKK3RyYWNpbmdfc2NoZWRfd2FrZXVwX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKndha2VlLAorCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLAorCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZldmVudF93YWtldXA7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZW50cnk7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIgPSB0ci0+YnVmZmVyOworCisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfV0FLRSwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm47CisJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwllbnRyeS0+cHJldl9waWQJCQk9IGN1cnItPnBpZDsKKwllbnRyeS0+cHJldl9wcmlvCQk9IGN1cnItPnByaW87CisJZW50cnktPnByZXZfc3RhdGUJCT0gY3Vyci0+c3RhdGU7CisJZW50cnktPm5leHRfcGlkCQkJPSB3YWtlZS0+cGlkOworCWVudHJ5LT5uZXh0X3ByaW8JCT0gd2FrZWUtPnByaW87CisJZW50cnktPm5leHRfc3RhdGUJCT0gd2FrZWUtPnN0YXRlOworCWVudHJ5LT5uZXh0X2NwdQkJCT0gdGFza19jcHUod2FrZWUpOworCisJaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCisJCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7CisJZnRyYWNlX3RyYWNlX3N0YWNrKHRyLT5idWZmZXIsIGZsYWdzLCA2LCBwYyk7CisJZnRyYWNlX3RyYWNlX3VzZXJzdGFjayh0ci0+YnVmZmVyLCBmbGFncywgcGMpOworfQorCiBzdGF0aWMgdm9pZAogcHJvYmVfc2NoZWRfd2FrZXVwKHN0cnVjdCBycSAqX19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp3YWtlZSwgaW50IHN1Y2Nlc3MpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKaW5kZXggZWFjYjI3Mi4uYWQ2OWYxMCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYwpAQCAtMTg2LDExICsxODYsNiBAQAogCiBzdGF0aWMgdm9pZCBfX3dha2V1cF9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCWludCBjcHU7Ci0KLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQotCQl0cmFjaW5nX3Jlc2V0KHRyLCBjcHUpOwotCiAJd2FrZXVwX2NwdSA9IC0xOwogCXdha2V1cF9wcmlvID0gLTE7CiAKQEAgLTIwNCw2ICsxOTksOCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlfX3Jhd19zcGluX2xvY2soJndha2V1cF9sb2NrKTsKIAlfX3dha2V1cF9yZXNldCh0cik7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jCmluZGV4IDAwZGQ2NDguLmQyY2RiYWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jCkBAIC0yODgsNiArMjg4LDcgQEAKIAkgKiB0byBkZXRlY3QgYW5kIHJlY292ZXIgZnJvbSBwb3NzaWJsZSBoYW5ncwogCSAqLwogCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOworCXNldF9ncmFwaF9hcnJheSh0cik7CiAJcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKCZ0cmFjZV9ncmFwaF9yZXR1cm4sCiAJCQkJICAgICZ0cmFjZV9ncmFwaF9lbnRyeV93YXRjaGRvZyk7CiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYwppbmRleCA2YTJhOWQ0Li4wZjZmYWNiIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYwpAQCAtMTg2LDQzICsxODYsMzMgQEAKIH07CiAKIHN0YXRpYyB2b2lkICoKLXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQorX19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiB7Ci0JbG9uZyBpOworCWxvbmcgbiA9ICpwb3MgLSAxOwogCi0JKCpwb3MpKys7Ci0KLQlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCWkgPSAwOwotCWVsc2UgewotCQlpID0gKihsb25nICopdjsKLQkJaSsrOwotCX0KLQotCWlmIChpID49IG1heF9zdGFja190cmFjZS5ucl9lbnRyaWVzIHx8Ci0JICAgIHN0YWNrX2R1bXBfdHJhY2VbaV0gPT0gVUxPTkdfTUFYKQorCWlmIChuID49IG1heF9zdGFja190cmFjZS5ucl9lbnRyaWVzIHx8IHN0YWNrX2R1bXBfdHJhY2Vbbl0gPT0gVUxPTkdfTUFYKQogCQlyZXR1cm4gTlVMTDsKIAotCW0tPnByaXZhdGUgPSAodm9pZCAqKWk7Ci0KKwltLT5wcml2YXRlID0gKHZvaWQgKiluOwogCXJldHVybiAmbS0+cHJpdmF0ZTsKIH0KIAorc3RhdGljIHZvaWQgKgordF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJKCpwb3MpKys7CisJcmV0dXJuIF9fbmV4dChtLCBwb3MpOworfQorCiBzdGF0aWMgdm9pZCAqdF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewotCXZvaWQgKnQgPSBTRVFfU1RBUlRfVE9LRU47Ci0JbG9mZl90IGwgPSAwOwotCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlfX3Jhd19zcGluX2xvY2soJm1heF9zdGFja19sb2NrKTsKIAogCWlmICgqcG9zID09IDApCiAJCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CiAKLQlmb3IgKDsgdCAmJiBsIDwgKnBvczsgdCA9IHRfbmV4dChtLCB0LCAmbCkpCi0JCTsKLQotCXJldHVybiB0OworCXJldHVybiBfX25leHQobSwgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgdF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKQEAgLTIzNCwxNSArMjI0LDggQEAKIHN0YXRpYyBpbnQgdHJhY2VfbG9va3VwX3N0YWNrKHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9uZyBpKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9IHN0YWNrX2R1bXBfdHJhY2VbaV07Ci0jaWZkZWYgQ09ORklHX0tBTExTWU1TCi0JY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKIAotCXNwcmludF9zeW1ib2woc3RyLCBhZGRyKTsKLQotCXJldHVybiBzZXFfcHJpbnRmKG0sICIlc1xuIiwgc3RyKTsKLSNlbHNlCi0JcmV0dXJuIHNlcV9wcmludGYobSwgIiVwXG4iLCAodm9pZCopYWRkcik7Ci0jZW5kaWYKKwlyZXR1cm4gc2VxX3ByaW50ZihtLCAiJXBGXG4iLCAodm9pZCAqKWFkZHIpOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9kaXNhYmxlZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhdC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YXQuYwppbmRleCBhZWEzMjFjLi5hNGJiMjM5IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhdC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGF0LmMKQEAgLTQ5LDcgKzQ5LDggQEAKICAqIGJ1dCBpdCB3aWxsIGF0IGxlYXN0IGFkdmFuY2UgY2xvc2VyIHRvIHRoZSBuZXh0IG9uZQogICogdG8gYmUgcmVsZWFzZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqcmVsZWFzZV9uZXh0KHN0cnVjdCByYl9ub2RlICpub2RlKQorc3RhdGljIHN0cnVjdCByYl9ub2RlICpyZWxlYXNlX25leHQoc3RydWN0IHRyYWNlcl9zdGF0ICp0cywKKwkJCQkgICAgc3RydWN0IHJiX25vZGUgKm5vZGUpCiB7CiAJc3RydWN0IHN0YXRfbm9kZSAqc25vZGU7CiAJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKQEAgLTY3LDYgKzY4LDggQEAKIAkJCXBhcmVudC0+cmJfcmlnaHQgPSBOVUxMOwogCiAJCXNub2RlID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBzdGF0X25vZGUsIG5vZGUpOworCQlpZiAodHMtPnN0YXRfcmVsZWFzZSkKKwkJCXRzLT5zdGF0X3JlbGVhc2Uoc25vZGUtPnN0YXQpOwogCQlrZnJlZShzbm9kZSk7CiAKIAkJcmV0dXJuIHBhcmVudDsKQEAgLTc4LDcgKzgxLDcgQEAKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9IHNlc3Npb24tPnN0YXRfcm9vdC5yYl9ub2RlOwogCiAJd2hpbGUgKG5vZGUpCi0JCW5vZGUgPSByZWxlYXNlX25leHQobm9kZSk7CisJCW5vZGUgPSByZWxlYXNlX25leHQoc2Vzc2lvbi0+dHMsIG5vZGUpOwogCiAJc2Vzc2lvbi0+c3RhdF9yb290ID0gUkJfUk9PVDsKIH0KQEAgLTIwMCwxNyArMjAzLDIxIEBACiB7CiAJc3RydWN0IHN0YXRfc2Vzc2lvbiAqc2Vzc2lvbiA9IHMtPnByaXZhdGU7CiAJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJaW50IG4gPSAqcG9zOwogCWludCBpOwogCiAJLyogUHJldmVudCBmcm9tIHRyYWNlciBzd2l0Y2ggb3IgcmJ0cmVlIG1vZGlmaWNhdGlvbiAqLwogCW11dGV4X2xvY2soJnNlc3Npb24tPnN0YXRfbXV0ZXgpOwogCiAJLyogSWYgd2UgYXJlIGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUsIHByaW50IHRoZSBoZWFkZXJzICovCi0JaWYgKCEqcG9zICYmIHNlc3Npb24tPnRzLT5zdGF0X2hlYWRlcnMpCi0JCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CisJaWYgKHNlc3Npb24tPnRzLT5zdGF0X2hlYWRlcnMpIHsKKwkJaWYgKG4gPT0gMCkKKwkJCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CisJCW4tLTsKKwl9CiAKIAlub2RlID0gcmJfZmlyc3QoJnNlc3Npb24tPnN0YXRfcm9vdCk7Ci0JZm9yIChpID0gMDsgbm9kZSAmJiBpIDwgKnBvczsgaSsrKQorCWZvciAoaSA9IDA7IG5vZGUgJiYgaSA8IG47IGkrKykKIAkJbm9kZSA9IHJiX25leHQobm9kZSk7CiAKIAlyZXR1cm4gbm9kZTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zdGF0LmggYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhdC5oCmluZGV4IGYzNTQ2YTIuLjhmMDM5MTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zdGF0LmgKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YXQuaApAQCAtMTgsNiArMTgsOCBAQAogCWludAkJCSgqc3RhdF9jbXApKHZvaWQgKnAxLCB2b2lkICpwMik7CiAJLyogUHJpbnQgYSBzdGF0IGVudHJ5ICovCiAJaW50CQkJKCpzdGF0X3Nob3cpKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCk7CisJLyogUmVsZWFzZSBhbiBlbnRyeSAqLworCXZvaWQJCQkoKnN0YXRfcmVsZWFzZSkodm9pZCAqc3RhdCk7CiAJLyogUHJpbnQgdGhlIGhlYWRlcnMgb2YgeW91ciBzdGF0IGVudHJpZXMgKi8KIAlpbnQJCQkoKnN0YXRfaGVhZGVycykoc3RydWN0IHNlcV9maWxlICpzKTsKIH07CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCmluZGV4IDVlNTc5NjQuLjg3MTJjZTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCkBAIC0xLDMwICsxLDE4IEBACiAjaW5jbHVkZSA8dHJhY2Uvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgogI2luY2x1ZGUgPGFzbS9zeXNjYWxsLmg+CiAKICNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKICNpbmNsdWRlICJ0cmFjZS5oIgogCi0vKiBLZWVwIGEgY291bnRlciBvZiB0aGUgc3lzY2FsbCB0cmFjaW5nIHVzZXJzICovCi1zdGF0aWMgaW50IHJlZmNvdW50OwotCi0vKiBQcmV2ZW50IGZyb20gcmFjZXMgb24gdGhyZWFkIGZsYWdzIHRvZ2dsaW5nICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHN5c2NhbGxfdHJhY2VfbG9jayk7Ci0KLS8qIE9wdGlvbiB0byBkaXNwbGF5IHRoZSBwYXJhbWV0ZXJzIHR5cGVzICovCi1lbnVtIHsKLQlUUkFDRV9TWVNDQUxMU19PUFRfVFlQRVMgPSAweDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHRyYWNlcl9vcHQgc3lzY2FsbHNfb3B0c1tdID0gewotCXsgVFJBQ0VSX09QVChzeXNjYWxsX2FyZ190eXBlLCBUUkFDRV9TWVNDQUxMU19PUFRfVFlQRVMpIH0sCi0JeyB9Ci19OwotCi1zdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyBzeXNjYWxsc19mbGFncyA9IHsKLQkudmFsID0gMCwgLyogQnkgZGVmYXVsdDogbm8gcGFyYW1ldGVycyB0eXBlcyAqLwotCS5vcHRzID0gc3lzY2FsbHNfb3B0cwotfTsKK3N0YXRpYyBpbnQgc3lzX3JlZmNvdW50X2VudGVyOworc3RhdGljIGludCBzeXNfcmVmY291bnRfZXhpdDsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChlbmFibGVkX2VudGVyX3N5c2NhbGxzLCBOUl9zeXNjYWxscyk7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAoZW5hYmxlZF9leGl0X3N5c2NhbGxzLCBOUl9zeXNjYWxscyk7CiAKIGVudW0gcHJpbnRfbGluZV90CiBwcmludF9zeXNjYWxsX2VudGVyKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQpAQCAtMzUsMzUgKzIzLDQ2IEBACiAJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmVudHJ5OwogCWludCBpLCByZXQsIHN5c2NhbGw7CiAKLQl0cmFjZV9hc3NpZ25fdHlwZSh0cmFjZSwgZW50KTsKLQorCXRyYWNlID0gKHR5cGVvZih0cmFjZSkpZW50OwogCXN5c2NhbGwgPSB0cmFjZS0+bnI7Ci0KIAllbnRyeSA9IHN5c2NhbGxfbnJfdG9fbWV0YShzeXNjYWxsKTsKKwogCWlmICghZW50cnkpCiAJCWdvdG8gZW5kOwogCisJaWYgKGVudHJ5LT5lbnRlcl9pZCAhPSBlbnQtPnR5cGUpIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlnb3RvIGVuZDsKKwl9CisKIAlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlcygiLCBlbnRyeS0+bmFtZSk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAogCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bmJfYXJnczsgaSsrKSB7CiAJCS8qIHBhcmFtZXRlciB0eXBlcyAqLwotCQlpZiAoc3lzY2FsbHNfZmxhZ3MudmFsICYgVFJBQ0VfU1lTQ0FMTFNfT1BUX1RZUEVTKSB7CisJCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfVkVSQk9TRSkgewogCQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXMgIiwgZW50cnktPnR5cGVzW2ldKTsKIAkJCWlmICghcmV0KQogCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAkJfQogCQkvKiBwYXJhbWV0ZXIgdmFsdWVzICovCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzOiAlbHglcyAiLCBlbnRyeS0+YXJnc1tpXSwKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXM6ICVseCVzIiwgZW50cnktPmFyZ3NbaV0sCiAJCQkJICAgICAgIHRyYWNlLT5hcmdzW2ldLAotCQkJCSAgICAgICBpID09IGVudHJ5LT5uYl9hcmdzIC0gMSA/ICIpIiA6ICIsIik7CisJCQkJICAgICAgIGkgPT0gZW50cnktPm5iX2FyZ3MgLSAxID8gIiIgOiAiLCAiKTsKIAkJaWYgKCFyZXQpCiAJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJfQogCisJcmV0ID0gdHJhY2Vfc2VxX3B1dGMocywgJyknKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCiBlbmQ6Ci0JdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG4iKTsKKwlyZXQgPSAgdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwogCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiB9CiAKQEAgLTc3LDE2ICs3NiwyMCBAQAogCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICplbnRyeTsKIAlpbnQgcmV0OwogCi0JdHJhY2VfYXNzaWduX3R5cGUodHJhY2UsIGVudCk7Ci0KKwl0cmFjZSA9ICh0eXBlb2YodHJhY2UpKWVudDsKIAlzeXNjYWxsID0gdHJhY2UtPm5yOwotCiAJZW50cnkgPSBzeXNjYWxsX25yX3RvX21ldGEoc3lzY2FsbCk7CisKIAlpZiAoIWVudHJ5KSB7CiAJCXRyYWNlX3NlcV9wcmludGYocywgIlxuIik7CiAJCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiAJfQogCisJaWYgKGVudHJ5LT5leGl0X2lkICE9IGVudC0+dHlwZSkgeworCQlXQVJOX09OX09OQ0UoMSk7CisJCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKKwl9CisKIAlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlcyAtPiAweCVseFxuIiwgZW50cnktPm5hbWUsCiAJCQkJdHJhY2UtPnJldCk7CiAJaWYgKCFyZXQpCkBAIC05NSw2MiArOTgsMTQwIEBACiAJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKIH0KIAotdm9pZCBzdGFydF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKK2V4dGVybiBjaGFyICpfX2JhZF90eXBlX3NpemUodm9pZCk7CisKKyNkZWZpbmUgU1lTQ0FMTF9GSUVMRCh0eXBlLCBuYW1lKQkJCQkJXAorCXNpemVvZih0eXBlKSAhPSBzaXplb2YodHJhY2UubmFtZSkgPwkJCQlcCisJCV9fYmFkX3R5cGVfc2l6ZSgpIDoJCQkJCVwKKwkJI3R5cGUsICNuYW1lLCBvZmZzZXRvZih0eXBlb2YodHJhY2UpLCBuYW1lKSwgc2l6ZW9mKHRyYWNlLm5hbWUpCisKK2ludCBzeXNjYWxsX2VudGVyX2Zvcm1hdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHN0cnVjdCB0cmFjZV9zZXEgKnMpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICp0OworCWludCBpOworCWludCBucjsKKwlpbnQgcmV0OworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICplbnRyeTsKKwlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciB0cmFjZTsKKwlpbnQgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIsIGFyZ3MpOwogCi0JbXV0ZXhfbG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKKwluciA9IHN5c2NhbGxfbmFtZV90b19ucihjYWxsLT5kYXRhKTsKKwllbnRyeSA9IHN5c2NhbGxfbnJfdG9fbWV0YShucik7CiAKLQkvKiBEb24ndCBlbmFibGUgdGhlIGZsYWcgb24gdGhlIHRhc2tzIHR3aWNlICovCi0JaWYgKCsrcmVmY291bnQgIT0gMSkKLQkJZ290byB1bmxvY2s7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIDA7CiAKLQlhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKCk7Ci0JcmVhZF9sb2NrX2lycXNhdmUoJnRhc2tsaXN0X2xvY2ssIGZsYWdzKTsKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1xuIiwKKwkJCSAgICAgICBTWVNDQUxMX0ZJRUxEKGludCwgbnIpKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CiAKLQlkb19lYWNoX3RocmVhZChnLCB0KSB7Ci0JCXNldF90c2tfdGhyZWFkX2ZsYWcodCwgVElGX1NZU0NBTExfRlRSQUNFKTsKLQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHQpOworCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bmJfYXJnczsgaSsrKSB7CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JXMgJXM7IiwgZW50cnktPnR5cGVzW2ldLAorCQkJCSAgICAgICAgZW50cnktPmFyZ3NbaV0pOworCQlpZiAoIXJldCkKKwkJCXJldHVybiAwOworCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdG9mZnNldDolZDtcdHNpemU6JXp1O1xuIiwgb2Zmc2V0LAorCQkJCSAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiAwOworCQlvZmZzZXQgKz0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCX0KIAotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnRhc2tsaXN0X2xvY2ssIGZsYWdzKTsKKwl0cmFjZV9zZXFfcHV0cyhzLCAiXG5wcmludCBmbXQ6IFwiIik7CisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5uYl9hcmdzOyBpKyspIHsKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXM6IDB4JSUwJXp1bHglcyIsIGVudHJ5LT5hcmdzW2ldLAorCQkJCSAgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkJCQlpID09IGVudHJ5LT5uYl9hcmdzIC0gMSA/ICIiIDogIiwgIik7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIDA7CisJfQorCXRyYWNlX3NlcV9wdXRjKHMsICciJyk7CiAKLXVubG9jazoKLQltdXRleF91bmxvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5uYl9hcmdzOyBpKyspIHsKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiLCAoKHVuc2lnbmVkIGxvbmcpKFJFQy0+JXMpKSIsCisJCQkJICAgICAgIGVudHJ5LT5hcmdzW2ldKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7CiB9CiAKLXZvaWQgc3RvcF9mdHJhY2Vfc3lzY2FsbHModm9pZCkKK2ludCBzeXNjYWxsX2V4aXRfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgc3RydWN0IHRyYWNlX3NlcSAqcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnQ7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0IHRyYWNlOwogCi0JbXV0ZXhfbG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCisJCQkgICAgICAgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iCisJCQkgICAgICAgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iLAorCQkJICAgICAgIFNZU0NBTExfRklFTEQoaW50LCBuciksCisJCQkgICAgICAgU1lTQ0FMTF9GSUVMRCh1bnNpZ25lZCBsb25nLCByZXQpKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CiAKLQkvKiBUaGVyZSBhcmUgcGVyaGFwcyBzdGlsbCBzb21lIHVzZXJzICovCi0JaWYgKC0tcmVmY291bnQpCi0JCWdvdG8gdW5sb2NrOwotCi0JcmVhZF9sb2NrX2lycXNhdmUoJnRhc2tsaXN0X2xvY2ssIGZsYWdzKTsKLQotCWRvX2VhY2hfdGhyZWFkKGcsIHQpIHsKLQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHQsIFRJRl9TWVNDQUxMX0ZUUkFDRSk7Ci0JfSB3aGlsZV9lYWNoX3RocmVhZChnLCB0KTsKLQotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnRhc2tsaXN0X2xvY2ssIGZsYWdzKTsKLQotdW5sb2NrOgotCW11dGV4X3VubG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG5wcmludCBmbXQ6IFwiMHglJWx4XCIsIFJFQy0+cmV0XG4iKTsKIH0KIAotdm9pZCBmdHJhY2Vfc3lzY2FsbF9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2ludCBzeXNjYWxsX2VudGVyX2RlZmluZV9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQoreworCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyIHRyYWNlOworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICptZXRhOworCWludCByZXQ7CisJaW50IG5yOworCWludCBpOworCWludCBvZmZzZXQgPSBvZmZzZXRvZih0eXBlb2YodHJhY2UpLCBhcmdzKTsKKworCW5yID0gc3lzY2FsbF9uYW1lX3RvX25yKGNhbGwtPmRhdGEpOworCW1ldGEgPSBzeXNjYWxsX25yX3RvX21ldGEobnIpOworCisJaWYgKCFtZXRhKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKGNhbGwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWV0YS0+bmJfYXJnczsgaSsrKSB7CisJCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChjYWxsLCBtZXRhLT50eXBlc1tpXSwKKwkJCQkJIG1ldGEtPmFyZ3NbaV0sIG9mZnNldCwKKwkJCQkJIHNpemVvZih1bnNpZ25lZCBsb25nKSwgMCwKKwkJCQkJIEZJTFRFUl9PVEhFUik7CisJCW9mZnNldCArPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IHN5c2NhbGxfZXhpdF9kZWZpbmVfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3sKKwlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0IHRyYWNlOworCWludCByZXQ7CisKKwlyZXQgPSB0cmFjZV9kZWZpbmVfY29tbW9uX2ZpZWxkcyhjYWxsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGNhbGwsIFNZU0NBTExfRklFTEQodW5zaWduZWQgbG9uZywgcmV0KSwgMCwKKwkJCQkgRklMVEVSX09USEVSKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZnRyYWNlX3N5c2NhbGxfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgaWQpCiB7CiAJc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgKmVudHJ5OwogCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNfZGF0YTsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyOwogCWludCBzaXplOwogCWludCBzeXNjYWxsX25yOwogCiAJc3lzY2FsbF9uciA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIHJlZ3MpOworCWlmIChzeXNjYWxsX25yIDwgMCkKKwkJcmV0dXJuOworCWlmICghdGVzdF9iaXQoc3lzY2FsbF9uciwgZW5hYmxlZF9lbnRlcl9zeXNjYWxscykpCisJCXJldHVybjsKIAogCXN5c19kYXRhID0gc3lzY2FsbF9ucl90b19tZXRhKHN5c2NhbGxfbnIpOwogCWlmICghc3lzX2RhdGEpCkBAIC0xNTgsOCArMjM5LDggQEAKIAogCXNpemUgPSBzaXplb2YoKmVudHJ5KSArIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIHN5c19kYXRhLT5uYl9hcmdzOwogCi0JZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoVFJBQ0VfU1lTQ0FMTF9FTlRFUiwgc2l6ZSwKLQkJCQkJCQkwLCAwKTsKKwlldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmYnVmZmVyLCBzeXNfZGF0YS0+ZW50ZXJfaWQsCisJCQkJCQkgIHNpemUsIDAsIDApOwogCWlmICghZXZlbnQpCiAJCXJldHVybjsKIApAQCAtMTY3LDI0ICsyNDgsMzAgQEAKIAllbnRyeS0+bnIgPSBzeXNjYWxsX25yOwogCXN5c2NhbGxfZ2V0X2FyZ3VtZW50cyhjdXJyZW50LCByZWdzLCAwLCBzeXNfZGF0YS0+bmJfYXJncywgZW50cnktPmFyZ3MpOwogCi0JdHJhY2VfY3VycmVudF9idWZmZXJfdW5sb2NrX2NvbW1pdChldmVudCwgMCwgMCk7Ci0JdHJhY2Vfd2FrZV91cCgpOworCWlmICghZmlsdGVyX2N1cnJlbnRfY2hlY2tfZGlzY2FyZChidWZmZXIsIHN5c19kYXRhLT5lbnRlcl9ldmVudCwKKwkJCQkJICBlbnRyeSwgZXZlbnQpKQorCQl0cmFjZV9jdXJyZW50X2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIDAsIDApOwogfQogCi12b2lkIGZ0cmFjZV9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit2b2lkIGZ0cmFjZV9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgcmV0KQogewogCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2V4aXQgKmVudHJ5OwogCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNfZGF0YTsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyOwogCWludCBzeXNjYWxsX25yOwogCiAJc3lzY2FsbF9uciA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIHJlZ3MpOworCWlmIChzeXNjYWxsX25yIDwgMCkKKwkJcmV0dXJuOworCWlmICghdGVzdF9iaXQoc3lzY2FsbF9uciwgZW5hYmxlZF9leGl0X3N5c2NhbGxzKSkKKwkJcmV0dXJuOwogCiAJc3lzX2RhdGEgPSBzeXNjYWxsX25yX3RvX21ldGEoc3lzY2FsbF9ucik7CiAJaWYgKCFzeXNfZGF0YSkKIAkJcmV0dXJuOwogCi0JZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoVFJBQ0VfU1lTQ0FMTF9FWElULAorCWV2ZW50ID0gdHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKCZidWZmZXIsIHN5c19kYXRhLT5leGl0X2lkLAogCQkJCXNpemVvZigqZW50cnkpLCAwLCAwKTsKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm47CkBAIC0xOTMsNTggKzI4MCwyNDQgQEAKIAllbnRyeS0+bnIgPSBzeXNjYWxsX25yOwogCWVudHJ5LT5yZXQgPSBzeXNjYWxsX2dldF9yZXR1cm5fdmFsdWUoY3VycmVudCwgcmVncyk7CiAKLQl0cmFjZV9jdXJyZW50X2J1ZmZlcl91bmxvY2tfY29tbWl0KGV2ZW50LCAwLCAwKTsKLQl0cmFjZV93YWtlX3VwKCk7CisJaWYgKCFmaWx0ZXJfY3VycmVudF9jaGVja19kaXNjYXJkKGJ1ZmZlciwgc3lzX2RhdGEtPmV4aXRfZXZlbnQsCisJCQkJCSAgZW50cnksIGV2ZW50KSkKKwkJdHJhY2VfY3VycmVudF9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCAwLCAwKTsKIH0KIAotc3RhdGljIGludCBpbml0X3N5c2NhbGxfdHJhY2VyKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCitpbnQgcmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIodm9pZCAqcHRyKQogewotCXN0YXJ0X2Z0cmFjZV9zeXNjYWxscygpOworCWludCByZXQgPSAwOworCWludCBudW07CisJY2hhciAqbmFtZTsKIAotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCByZXNldF9zeXNjYWxsX3RyYWNlcihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXN0b3BfZnRyYWNlX3N5c2NhbGxzKCk7Ci0JdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgc3lzY2FsbF9lbnRlcl9ldmVudCA9IHsKLQkudHlwZQkgCT0gVFJBQ0VfU1lTQ0FMTF9FTlRFUiwKLQkudHJhY2UJCT0gcHJpbnRfc3lzY2FsbF9lbnRlciwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgc3lzY2FsbF9leGl0X2V2ZW50ID0gewotCS50eXBlCSAJPSBUUkFDRV9TWVNDQUxMX0VYSVQsCi0JLnRyYWNlCQk9IHByaW50X3N5c2NhbGxfZXhpdCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdHJhY2VyIHN5c2NhbGxfdHJhY2VyIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUJICAgICAJPSAic3lzY2FsbCIsCi0JLmluaXQJCT0gaW5pdF9zeXNjYWxsX3RyYWNlciwKLQkucmVzZXQJCT0gcmVzZXRfc3lzY2FsbF90cmFjZXIsCi0JLmZsYWdzCQk9ICZzeXNjYWxsc19mbGFncywKLX07Ci0KLV9faW5pdCBpbnQgcmVnaXN0ZXJfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgmc3lzY2FsbF9lbnRlcl9ldmVudCk7Ci0JaWYgKCFyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZXZlbnQgJWQgZmFpbGVkIHRvIHJlZ2lzdGVyXG4iLAotCQkgICAgICAgc3lzY2FsbF9lbnRlcl9ldmVudC50eXBlKTsKLQkJV0FSTl9PTl9PTkNFKDEpOworCW5hbWUgPSAoY2hhciAqKXB0cjsKKwludW0gPSBzeXNjYWxsX25hbWVfdG9fbnIobmFtZSk7CisJaWYgKG51bSA8IDAgfHwgbnVtID49IE5SX3N5c2NhbGxzKQorCQlyZXR1cm4gLUVOT1NZUzsKKwltdXRleF9sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOworCWlmICghc3lzX3JlZmNvdW50X2VudGVyKQorCQlyZXQgPSByZWdpc3Rlcl90cmFjZV9zeXNfZW50ZXIoZnRyYWNlX3N5c2NhbGxfZW50ZXIpOworCWlmIChyZXQpIHsKKwkJcHJfaW5mbygiZXZlbnQgdHJhY2U6IENvdWxkIG5vdCBhY3RpdmF0ZSIKKwkJCQkic3lzY2FsbCBlbnRyeSB0cmFjZSBwb2ludCIpOworCX0gZWxzZSB7CisJCXNldF9iaXQobnVtLCBlbmFibGVkX2VudGVyX3N5c2NhbGxzKTsKKwkJc3lzX3JlZmNvdW50X2VudGVyKys7CiAJfQotCi0JcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZzeXNjYWxsX2V4aXRfZXZlbnQpOwotCWlmICghcmV0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImV2ZW50ICVkIGZhaWxlZCB0byByZWdpc3RlclxuIiwKLQkJICAgICAgIHN5c2NhbGxfZXhpdF9ldmVudC50eXBlKTsKLQkJV0FSTl9PTl9PTkNFKDEpOwotCX0KLQotCXJldHVybiByZWdpc3Rlcl90cmFjZXIoJnN5c2NhbGxfdHJhY2VyKTsKKwltdXRleF91bmxvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KLWRldmljZV9pbml0Y2FsbChyZWdpc3Rlcl9mdHJhY2Vfc3lzY2FsbHMpOworCit2b2lkIHVucmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIodm9pZCAqcHRyKQoreworCWludCBudW07CisJY2hhciAqbmFtZTsKKworCW5hbWUgPSAoY2hhciAqKXB0cjsKKwludW0gPSBzeXNjYWxsX25hbWVfdG9fbnIobmFtZSk7CisJaWYgKG51bSA8IDAgfHwgbnVtID49IE5SX3N5c2NhbGxzKQorCQlyZXR1cm47CisJbXV0ZXhfbG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKKwlzeXNfcmVmY291bnRfZW50ZXItLTsKKwljbGVhcl9iaXQobnVtLCBlbmFibGVkX2VudGVyX3N5c2NhbGxzKTsKKwlpZiAoIXN5c19yZWZjb3VudF9lbnRlcikKKwkJdW5yZWdpc3Rlcl90cmFjZV9zeXNfZW50ZXIoZnRyYWNlX3N5c2NhbGxfZW50ZXIpOworCW11dGV4X3VubG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKK30KKworaW50IHJlZ19ldmVudF9zeXNjYWxsX2V4aXQodm9pZCAqcHRyKQoreworCWludCByZXQgPSAwOworCWludCBudW07CisJY2hhciAqbmFtZTsKKworCW5hbWUgPSAoY2hhciAqKXB0cjsKKwludW0gPSBzeXNjYWxsX25hbWVfdG9fbnIobmFtZSk7CisJaWYgKG51bSA8IDAgfHwgbnVtID49IE5SX3N5c2NhbGxzKQorCQlyZXR1cm4gLUVOT1NZUzsKKwltdXRleF9sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOworCWlmICghc3lzX3JlZmNvdW50X2V4aXQpCisJCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3N5c19leGl0KGZ0cmFjZV9zeXNjYWxsX2V4aXQpOworCWlmIChyZXQpIHsKKwkJcHJfaW5mbygiZXZlbnQgdHJhY2U6IENvdWxkIG5vdCBhY3RpdmF0ZSIKKwkJCQkic3lzY2FsbCBleGl0IHRyYWNlIHBvaW50Iik7CisJfSBlbHNlIHsKKwkJc2V0X2JpdChudW0sIGVuYWJsZWRfZXhpdF9zeXNjYWxscyk7CisJCXN5c19yZWZjb3VudF9leGl0Kys7CisJfQorCW11dGV4X3VubG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHVucmVnX2V2ZW50X3N5c2NhbGxfZXhpdCh2b2lkICpwdHIpCit7CisJaW50IG51bTsKKwljaGFyICpuYW1lOworCisJbmFtZSA9IChjaGFyICopcHRyOworCW51bSA9IHN5c2NhbGxfbmFtZV90b19ucihuYW1lKTsKKwlpZiAobnVtIDwgMCB8fCBudW0gPj0gTlJfc3lzY2FsbHMpCisJCXJldHVybjsKKwltdXRleF9sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOworCXN5c19yZWZjb3VudF9leGl0LS07CisJY2xlYXJfYml0KG51bSwgZW5hYmxlZF9leGl0X3N5c2NhbGxzKTsKKwlpZiAoIXN5c19yZWZjb3VudF9leGl0KQorCQl1bnJlZ2lzdGVyX3RyYWNlX3N5c19leGl0KGZ0cmFjZV9zeXNjYWxsX2V4aXQpOworCW11dGV4X3VubG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKK30KKworc3RydWN0IHRyYWNlX2V2ZW50IGV2ZW50X3N5c2NhbGxfZW50ZXIgPSB7CisJLnRyYWNlCQkJPSBwcmludF9zeXNjYWxsX2VudGVyLAorfTsKKworc3RydWN0IHRyYWNlX2V2ZW50IGV2ZW50X3N5c2NhbGxfZXhpdCA9IHsKKwkudHJhY2UJCQk9IHByaW50X3N5c2NhbGxfZXhpdCwKK307CisKKyNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorCitzdGF0aWMgREVDTEFSRV9CSVRNQVAoZW5hYmxlZF9wcm9mX2VudGVyX3N5c2NhbGxzLCBOUl9zeXNjYWxscyk7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAoZW5hYmxlZF9wcm9mX2V4aXRfc3lzY2FsbHMsIE5SX3N5c2NhbGxzKTsKK3N0YXRpYyBpbnQgc3lzX3Byb2ZfcmVmY291bnRfZW50ZXI7CitzdGF0aWMgaW50IHN5c19wcm9mX3JlZmNvdW50X2V4aXQ7CisKK3N0YXRpYyB2b2lkIHByb2Zfc3lzY2FsbF9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBpZCkKK3sKKwlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciAqcmVjOworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNfZGF0YTsKKwlpbnQgc3lzY2FsbF9ucjsKKwlpbnQgc2l6ZTsKKworCXN5c2NhbGxfbnIgPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCByZWdzKTsKKwlpZiAoIXRlc3RfYml0KHN5c2NhbGxfbnIsIGVuYWJsZWRfcHJvZl9lbnRlcl9zeXNjYWxscykpCisJCXJldHVybjsKKworCXN5c19kYXRhID0gc3lzY2FsbF9ucl90b19tZXRhKHN5c2NhbGxfbnIpOworCWlmICghc3lzX2RhdGEpCisJCXJldHVybjsKKworCS8qIGdldCB0aGUgc2l6ZSBhZnRlciBhbGlnbm1lbnQgd2l0aCB0aGUgdTMyIGJ1ZmZlciBzaXplIGZpZWxkICovCisJc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBsb25nKSAqIHN5c19kYXRhLT5uYl9hcmdzICsgc2l6ZW9mKCpyZWMpOworCXNpemUgPSBBTElHTihzaXplICsgc2l6ZW9mKHUzMiksIHNpemVvZih1NjQpKTsKKwlzaXplIC09IHNpemVvZih1MzIpOworCisJZG8geworCQljaGFyIHJhd19kYXRhW3NpemVdOworCisJCS8qIHplcm8gdGhlIGRlYWQgYnl0ZXMgZnJvbSBhbGlnbiB0byBub3QgbGVhayBzdGFjayB0byB1c2VyICovCisJCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7CisKKwkJcmVjID0gKHN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyICopIHJhd19kYXRhOworCQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZyZWMtPmVudCwgMCwgMCk7CisJCXJlYy0+ZW50LnR5cGUgPSBzeXNfZGF0YS0+ZW50ZXJfaWQ7CisJCXJlYy0+bnIgPSBzeXNjYWxsX25yOworCQlzeXNjYWxsX2dldF9hcmd1bWVudHMoY3VycmVudCwgcmVncywgMCwgc3lzX2RhdGEtPm5iX2FyZ3MsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nICopJnJlYy0+YXJncyk7CisJCXBlcmZfdHBjb3VudGVyX2V2ZW50KHN5c19kYXRhLT5lbnRlcl9pZCwgMCwgMSwgcmVjLCBzaXplKTsKKwl9IHdoaWxlKDApOworfQorCitpbnQgcmVnX3Byb2Zfc3lzY2FsbF9lbnRlcihjaGFyICpuYW1lKQoreworCWludCByZXQgPSAwOworCWludCBudW07CisKKwludW0gPSBzeXNjYWxsX25hbWVfdG9fbnIobmFtZSk7CisJaWYgKG51bSA8IDAgfHwgbnVtID49IE5SX3N5c2NhbGxzKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCW11dGV4X2xvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7CisJaWYgKCFzeXNfcHJvZl9yZWZjb3VudF9lbnRlcikKKwkJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc3lzX2VudGVyKHByb2Zfc3lzY2FsbF9lbnRlcik7CisJaWYgKHJldCkgeworCQlwcl9pbmZvKCJldmVudCB0cmFjZTogQ291bGQgbm90IGFjdGl2YXRlIgorCQkJCSJzeXNjYWxsIGVudHJ5IHRyYWNlIHBvaW50Iik7CisJfSBlbHNlIHsKKwkJc2V0X2JpdChudW0sIGVuYWJsZWRfcHJvZl9lbnRlcl9zeXNjYWxscyk7CisJCXN5c19wcm9mX3JlZmNvdW50X2VudGVyKys7CisJfQorCW11dGV4X3VubG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHVucmVnX3Byb2Zfc3lzY2FsbF9lbnRlcihjaGFyICpuYW1lKQoreworCWludCBudW07CisKKwludW0gPSBzeXNjYWxsX25hbWVfdG9fbnIobmFtZSk7CisJaWYgKG51bSA8IDAgfHwgbnVtID49IE5SX3N5c2NhbGxzKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOworCXN5c19wcm9mX3JlZmNvdW50X2VudGVyLS07CisJY2xlYXJfYml0KG51bSwgZW5hYmxlZF9wcm9mX2VudGVyX3N5c2NhbGxzKTsKKwlpZiAoIXN5c19wcm9mX3JlZmNvdW50X2VudGVyKQorCQl1bnJlZ2lzdGVyX3RyYWNlX3N5c19lbnRlcihwcm9mX3N5c2NhbGxfZW50ZXIpOworCW11dGV4X3VubG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgcHJvZl9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgcmV0KQoreworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNfZGF0YTsKKwlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0IHJlYzsKKwlpbnQgc3lzY2FsbF9ucjsKKworCXN5c2NhbGxfbnIgPSBzeXNjYWxsX2dldF9ucihjdXJyZW50LCByZWdzKTsKKwlpZiAoIXRlc3RfYml0KHN5c2NhbGxfbnIsIGVuYWJsZWRfcHJvZl9leGl0X3N5c2NhbGxzKSkKKwkJcmV0dXJuOworCisJc3lzX2RhdGEgPSBzeXNjYWxsX25yX3RvX21ldGEoc3lzY2FsbF9ucik7CisJaWYgKCFzeXNfZGF0YSkKKwkJcmV0dXJuOworCisJdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmcmVjLmVudCwgMCwgMCk7CisJcmVjLmVudC50eXBlID0gc3lzX2RhdGEtPmV4aXRfaWQ7CisJcmVjLm5yID0gc3lzY2FsbF9ucjsKKwlyZWMucmV0ID0gc3lzY2FsbF9nZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MpOworCisJcGVyZl90cGNvdW50ZXJfZXZlbnQoc3lzX2RhdGEtPmV4aXRfaWQsIDAsIDEsICZyZWMsIHNpemVvZihyZWMpKTsKK30KKworaW50IHJlZ19wcm9mX3N5c2NhbGxfZXhpdChjaGFyICpuYW1lKQoreworCWludCByZXQgPSAwOworCWludCBudW07CisKKwludW0gPSBzeXNjYWxsX25hbWVfdG9fbnIobmFtZSk7CisJaWYgKG51bSA8IDAgfHwgbnVtID49IE5SX3N5c2NhbGxzKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCW11dGV4X2xvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7CisJaWYgKCFzeXNfcHJvZl9yZWZjb3VudF9leGl0KQorCQlyZXQgPSByZWdpc3Rlcl90cmFjZV9zeXNfZXhpdChwcm9mX3N5c2NhbGxfZXhpdCk7CisJaWYgKHJldCkgeworCQlwcl9pbmZvKCJldmVudCB0cmFjZTogQ291bGQgbm90IGFjdGl2YXRlIgorCQkJCSJzeXNjYWxsIGVudHJ5IHRyYWNlIHBvaW50Iik7CisJfSBlbHNlIHsKKwkJc2V0X2JpdChudW0sIGVuYWJsZWRfcHJvZl9leGl0X3N5c2NhbGxzKTsKKwkJc3lzX3Byb2ZfcmVmY291bnRfZXhpdCsrOworCX0KKwltdXRleF91bmxvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB1bnJlZ19wcm9mX3N5c2NhbGxfZXhpdChjaGFyICpuYW1lKQoreworCWludCBudW07CisKKwludW0gPSBzeXNjYWxsX25hbWVfdG9fbnIobmFtZSk7CisJaWYgKG51bSA8IDAgfHwgbnVtID49IE5SX3N5c2NhbGxzKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOworCXN5c19wcm9mX3JlZmNvdW50X2V4aXQtLTsKKwljbGVhcl9iaXQobnVtLCBlbmFibGVkX3Byb2ZfZXhpdF9zeXNjYWxscyk7CisJaWYgKCFzeXNfcHJvZl9yZWZjb3VudF9leGl0KQorCQl1bnJlZ2lzdGVyX3RyYWNlX3N5c19leGl0KHByb2Zfc3lzY2FsbF9leGl0KTsKKwltdXRleF91bmxvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7Cit9CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV93b3JrcXVldWUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV93b3JrcXVldWUuYwppbmRleCA5N2ZjZWE0Li40MGNhZmIwIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3dvcmtxdWV1ZS5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgInRyYWNlX3N0YXQuaCIKICNpbmNsdWRlICJ0cmFjZS5oIgogCkBAIC0xNiw2ICsxNyw3IEBACiAvKiBBIGNwdSB3b3JrcXVldWUgdGhyZWFkICovCiBzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cyB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgIGxpc3Q7CisJc3RydWN0IGtyZWYgICAgICAgICAgICAgICAgIGtyZWY7CiAJaW50CQkgICAgICAgICAgICBjcHU7CiAJcGlkX3QJCQkgICAgcGlkOwogLyogQ2FuIGJlIGluc2VydGVkIGZyb20gaW50ZXJydXB0IG9yIHVzZXIgY29udGV4dCwgbmVlZCB0byBiZSBhdG9taWMgKi8KQEAgLTM5LDYgKzQxLDExIEBACiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHdvcmtxdWV1ZV9nbG9iYWxfc3RhdHMsIGFsbF93b3JrcXVldWVfc3RhdCk7CiAjZGVmaW5lIHdvcmtxdWV1ZV9jcHVfc3RhdChjcHUpICgmcGVyX2NwdShhbGxfd29ya3F1ZXVlX3N0YXQsIGNwdSkpCiAKK3N0YXRpYyB2b2lkIGNwdV93b3JrcXVldWVfc3RhdF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQoreworCWtmcmVlKGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cywga3JlZikpOworfQorCiAvKiBJbnNlcnRpb24gb2YgYSB3b3JrICovCiBzdGF0aWMgdm9pZAogcHJvYmVfd29ya3F1ZXVlX2luc2VydGlvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKndxX3RocmVhZCwKQEAgLTk2LDggKzEwMyw4IEBACiAJCXJldHVybjsKIAl9CiAJSU5JVF9MSVNUX0hFQUQoJmN3cy0+bGlzdCk7CisJa3JlZl9pbml0KCZjd3MtPmtyZWYpOwogCWN3cy0+Y3B1ID0gY3B1OwotCiAJY3dzLT5waWQgPSB3cV90aHJlYWQtPnBpZDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOwpAQCAtMTE4LDcgKzEyNSw3IEBACiAJCQkJCQkJbGlzdCkgewogCQlpZiAobm9kZS0+cGlkID09IHdxX3RocmVhZC0+cGlkKSB7CiAJCQlsaXN0X2RlbCgmbm9kZS0+bGlzdCk7Ci0JCQlrZnJlZShub2RlKTsKKwkJCWtyZWZfcHV0KCZub2RlLT5rcmVmLCBjcHVfd29ya3F1ZXVlX3N0YXRfZnJlZSk7CiAJCQlnb3RvIGZvdW5kOwogCQl9CiAJfQpAQCAtMTM3LDkgKzE0NCwxMSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0KSkKKwlpZiAoIWxpc3RfZW1wdHkoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0KSkgewogCQlyZXQgPSBsaXN0X2VudHJ5KHdvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0Lm5leHQsCiAJCQkJIHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzLCBsaXN0KTsKKwkJa3JlZl9nZXQoJnJldC0+a3JlZik7CisJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKIApAQCAtMTYyLDkgKzE3MSw5IEBACiBzdGF0aWMgdm9pZCAqd29ya3F1ZXVlX3N0YXRfbmV4dCh2b2lkICpwcmV2LCBpbnQgaWR4KQogewogCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzICpwcmV2X2N3cyA9IHByZXY7CisJc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMgKnJldDsKIAlpbnQgY3B1ID0gcHJldl9jd3MtPmNwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgKnJldCA9IE5VTEw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKIAlpZiAobGlzdF9pc19sYXN0KCZwcmV2X2N3cy0+bGlzdCwgJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0KSkgewpAQCAtMTc1LDExICsxODQsMTQgQEAKIAkJCQlyZXR1cm4gTlVMTDsKIAkJfSB3aGlsZSAoIShyZXQgPSB3b3JrcXVldWVfc3RhdF9zdGFydF9jcHUoY3B1KSkpOwogCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCXJldCA9IGxpc3RfZW50cnkocHJldl9jd3MtPmxpc3QubmV4dCwKKwkJCQkgc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMsIGxpc3QpOworCQlrcmVmX2dldCgmcmV0LT5rcmVmKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiBsaXN0X2VudHJ5KHByZXZfY3dzLT5saXN0Lm5leHQsIHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzLAotCQkJICBsaXN0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHdvcmtxdWV1ZV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQpAQCAtMjAzLDYgKzIxNSwxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB3b3JrcXVldWVfc3RhdF9yZWxlYXNlKHZvaWQgKnN0YXQpCit7CisJc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMgKm5vZGUgPSBzdGF0OworCisJa3JlZl9wdXQoJm5vZGUtPmtyZWYsIGNwdV93b3JrcXVldWVfc3RhdF9mcmVlKTsKK30KKwogc3RhdGljIGludCB3b3JrcXVldWVfc3RhdF9oZWFkZXJzKHN0cnVjdCBzZXFfZmlsZSAqcykKIHsKIAlzZXFfcHJpbnRmKHMsICIjIENQVSAgSU5TRVJURUQgIEVYRUNVVEVEICAgTkFNRVxuIik7CkBAIC0yMTUsNiArMjM0LDcgQEAKIAkuc3RhdF9zdGFydCA9IHdvcmtxdWV1ZV9zdGF0X3N0YXJ0LAogCS5zdGF0X25leHQgPSB3b3JrcXVldWVfc3RhdF9uZXh0LAogCS5zdGF0X3Nob3cgPSB3b3JrcXVldWVfc3RhdF9zaG93LAorCS5zdGF0X3JlbGVhc2UgPSB3b3JrcXVldWVfc3RhdF9yZWxlYXNlLAogCS5zdGF0X2hlYWRlcnMgPSB3b3JrcXVldWVfc3RhdF9oZWFkZXJzCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2Vwb2ludC5jIGIva2VybmVsL3RyYWNlcG9pbnQuYwppbmRleCAxZWY1ZDNhLi45NDg5YTBhIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2Vwb2ludC5jCisrKyBiL2tlcm5lbC90cmFjZXBvaW50LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIGV4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludCBfX3N0YXJ0X19fdHJhY2Vwb2ludHNbXTsKIGV4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludCBfX3N0b3BfX190cmFjZXBvaW50c1tdOwpAQCAtMjQyLDYgKzI0MywxMSBAQAogewogCVdBUk5fT04oc3RyY21wKCgqZW50cnkpLT5uYW1lLCBlbGVtLT5uYW1lKSAhPSAwKTsKIAorCWlmIChlbGVtLT5yZWdmdW5jICYmICFlbGVtLT5zdGF0ZSAmJiBhY3RpdmUpCisJCWVsZW0tPnJlZ2Z1bmMoKTsKKwllbHNlIGlmIChlbGVtLT51bnJlZ2Z1bmMgJiYgZWxlbS0+c3RhdGUgJiYgIWFjdGl2ZSkKKwkJZWxlbS0+dW5yZWdmdW5jKCk7CisKIAkvKgogCSAqIHJjdV9hc3NpZ25fcG9pbnRlciBoYXMgYSBzbXBfd21iKCkgd2hpY2ggbWFrZXMgc3VyZSB0aGF0IHRoZSBuZXcKIAkgKiBwcm9iZSBjYWxsYmFja3MgYXJyYXkgaXMgY29uc2lzdGVudCBiZWZvcmUgc2V0dGluZyBhIHBvaW50ZXIgdG8gaXQuCkBAIC0yNjEsNiArMjY3LDkgQEAKICAqLwogc3RhdGljIHZvaWQgZGlzYWJsZV90cmFjZXBvaW50KHN0cnVjdCB0cmFjZXBvaW50ICplbGVtKQogeworCWlmIChlbGVtLT51bnJlZ2Z1bmMgJiYgZWxlbS0+c3RhdGUpCisJCWVsZW0tPnVucmVnZnVuYygpOworCiAJZWxlbS0+c3RhdGUgPSAwOwogCXJjdV9hc3NpZ25fcG9pbnRlcihlbGVtLT5mdW5jcywgTlVMTCk7CiB9CkBAIC01NTQsOSArNTYzLDYgQEAKIAogCXN3aXRjaCAodmFsKSB7CiAJY2FzZSBNT0RVTEVfU1RBVEVfQ09NSU5HOgotCQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPnRyYWNlcG9pbnRzLAotCQkJbW9kLT50cmFjZXBvaW50cyArIG1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKLQkJYnJlYWs7CiAJY2FzZSBNT0RVTEVfU1RBVEVfR09JTkc6CiAJCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKG1vZC0+dHJhY2Vwb2ludHMsCiAJCQltb2QtPnRyYWNlcG9pbnRzICsgbW9kLT5udW1fdHJhY2Vwb2ludHMpOwpAQCAtNTc3LDMgKzU4Myw0MSBAQAogX19pbml0Y2FsbChpbml0X3RyYWNlcG9pbnRzKTsKIAogI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCisKKyNpZmRlZiBDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTCisKKy8qIE5COiByZWcvdW5yZWcgYXJlIGNhbGxlZCB3aGlsZSBndWFyZGVkIHdpdGggdGhlIHRyYWNlcG9pbnRzX211dGV4ICovCitzdGF0aWMgaW50IHN5c190cmFjZXBvaW50X3JlZmNvdW50OworCit2b2lkIHN5c2NhbGxfcmVnZnVuYyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqdDsKKworCWlmICghc3lzX3RyYWNlcG9pbnRfcmVmY291bnQpIHsKKwkJcmVhZF9sb2NrX2lycXNhdmUoJnRhc2tsaXN0X2xvY2ssIGZsYWdzKTsKKwkJZG9fZWFjaF90aHJlYWQoZywgdCkgeworCQkJLyogU2tpcCBrZXJuZWwgdGhyZWFkcy4gKi8KKwkJCWlmICh0LT5tbSkKKwkJCQlzZXRfdHNrX3RocmVhZF9mbGFnKHQsIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpOworCQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHQpOworCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrbGlzdF9sb2NrLCBmbGFncyk7CisJfQorCXN5c190cmFjZXBvaW50X3JlZmNvdW50Kys7Cit9CisKK3ZvaWQgc3lzY2FsbF91bnJlZ2Z1bmModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnQ7CisKKwlzeXNfdHJhY2Vwb2ludF9yZWZjb3VudC0tOworCWlmICghc3lzX3RyYWNlcG9pbnRfcmVmY291bnQpIHsKKwkJcmVhZF9sb2NrX2lycXNhdmUoJnRhc2tsaXN0X2xvY2ssIGZsYWdzKTsKKwkJZG9fZWFjaF90aHJlYWQoZywgdCkgeworCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHQsIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQpOworCQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHQpOworCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrbGlzdF9sb2NrLCBmbGFncyk7CisJfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggMDY2ODc5NS4uYWRkZmUyZCAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtMzE3LDggKzMxNyw2IEBACiAJaWYgKGN3cS0+d3EtPmZyZWV6ZWFibGUpCiAJCXNldF9mcmVlemFibGUoKTsKIAotCXNldF91c2VyX25pY2UoY3VycmVudCwgLTUpOwotCiAJZm9yICg7OykgewogCQlwcmVwYXJlX3RvX3dhaXQoJmN3cS0+bW9yZV93b3JrLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJaWYgKCFmcmVlemluZyhjdXJyZW50KSAmJgpAQCAtNjAwLDcgKzU5OCwxMiBAQAogICogc2NoZWR1bGVfd29yayAtIHB1dCB3b3JrIHRhc2sgaW4gZ2xvYmFsIHdvcmtxdWV1ZQogICogQHdvcms6IGpvYiB0byBiZSBkb25lCiAgKgotICogVGhpcyBwdXRzIGEgam9iIGluIHRoZSBrZXJuZWwtZ2xvYmFsIHdvcmtxdWV1ZS4KKyAqIFJldHVybnMgemVybyBpZiBAd29yayB3YXMgYWxyZWFkeSBvbiB0aGUga2VybmVsLWdsb2JhbCB3b3JrcXVldWUgYW5kCisgKiBub24temVybyBvdGhlcndpc2UuCisgKgorICogVGhpcyBwdXRzIGEgam9iIGluIHRoZSBrZXJuZWwtZ2xvYmFsIHdvcmtxdWV1ZSBpZiBpdCB3YXMgbm90IGFscmVhZHkKKyAqIHF1ZXVlZCBhbmQgbGVhdmVzIGl0IGluIHRoZSBzYW1lIHBvc2l0aW9uIG9uIHRoZSBrZXJuZWwtZ2xvYmFsCisgKiB3b3JrcXVldWUgb3RoZXJ3aXNlLgogICovCiBpbnQgc2NoZWR1bGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDEyMzI3YjIuLmQ1N2IxMmYgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC0zMzgsNyArMzM4LDcgQEAKIAogY29uZmlnIERFQlVHX0tNRU1MRUFLCiAJYm9vbCAiS2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9yIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIEVYUEVSSU1FTlRBTCAmJiAoWDg2IHx8IEFSTSkgJiYgXAorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIEVYUEVSSU1FTlRBTCAmJiAoWDg2IHx8IEFSTSB8fCBQUEMpICYmIFwKIAkJIU1FTU9SWV9IT1RQTFVHCiAJc2VsZWN0IERFQlVHX0ZTIGlmIFNZU0ZTCiAJc2VsZWN0IFNUQUNLVFJBQ0UgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUCkBAIC02NTMsNiArNjUzLDIxIEBACiAJICBUaGlzIGlzIGEgcmVsYXRpdmVseSBjaGVhcCBjaGVjayBidXQgaWYgeW91IGNhcmUgYWJvdXQgbWF4aW11bQogCSAgcGVyZm9ybWFuY2UsIHNheSBOLgogCitjb25maWcgREVCVUdfQ1JFREVOVElBTFMKKwlib29sICJEZWJ1ZyBjcmVkZW50aWFsIG1hbmFnZW1lbnQiCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwloZWxwCisJICBFbmFibGUgdGhpcyB0byB0dXJuIG9uIHNvbWUgZGVidWcgY2hlY2tpbmcgZm9yIGNyZWRlbnRpYWwKKwkgIG1hbmFnZW1lbnQuICBUaGUgYWRkaXRpb25hbCBjb2RlIGtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YKKwkgIHBvaW50ZXJzIGZyb20gdGFza19zdHJ1Y3RzIHRvIGFueSBnaXZlbiBjcmVkIHN0cnVjdCwgYW5kIGNoZWNrcyB0bworCSAgc2VlIHRoYXQgdGhpcyBudW1iZXIgbmV2ZXIgZXhjZWVkcyB0aGUgdXNhZ2UgY291bnQgb2YgdGhlIGNyZWQKKwkgIHN0cnVjdC4KKworCSAgRnVydGhlcm1vcmUsIGlmIFNFTGludXggaXMgZW5hYmxlZCwgdGhpcyBhbHNvIGNoZWNrcyB0aGF0IHRoZQorCSAgc2VjdXJpdHkgcG9pbnRlciBpbiB0aGUgY3JlZCBzdHJ1Y3QgaXMgbmV2ZXIgc2VlbiB0byBiZSBpbnZhbGlkLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiAjCiAjIFNlbGVjdCB0aGlzIGNvbmZpZyBvcHRpb24gZnJvbSB0aGUgYXJjaGl0ZWN0dXJlIEtjb25maWcsIGlmIGl0CiAjIGl0IGlzIHByZWZlcnJlZCB0byBhbHdheXMgb2ZmZXIgZnJhbWUgcG9pbnRlcnMgYXMgYSBjb25maWcKQEAgLTcyNSw3ICs3NDAsNyBAQAogCiBjb25maWcgUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgogCWJvb2wgIkNoZWNrIGZvciBzdGFsbGVkIENQVXMgZGVsYXlpbmcgUkNVIGdyYWNlIHBlcmlvZHMiCi0JZGVwZW5kcyBvbiBDTEFTU0lDX1JDVSB8fCBUUkVFX1JDVQorCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVQogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGNhdXNlcyBSQ1UgdG8gcHJpbnRrIGluZm9ybWF0aW9uIG9uIHdoaWNoCkBAIC03OTAsNiArODA1LDIxIEBACiAKIAkgIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgogCitjb25maWcgREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVCisJYm9vbCAiRm9yY2Ugd2VhayBwZXItY3B1IGRlZmluaXRpb25zIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCisJaGVscAorCSAgczM5MCBhbmQgYWxwaGEgcmVxdWlyZSBwZXJjcHUgdmFyaWFibGVzIGluIG1vZHVsZXMgdG8gYmUKKwkgIGRlZmluZWQgd2VhayB0byB3b3JrIGFyb3VuZCBhZGRyZXNzaW5nIHJhbmdlIGlzc3VlIHdoaWNoCisJICBwdXRzIHRoZSBmb2xsb3dpbmcgdHdvIHJlc3RyaWN0aW9ucyBvbiBwZXJjcHUgdmFyaWFibGUKKwkgIGRlZmluaXRpb25zLgorCisJICAxLiBwZXJjcHUgc3ltYm9scyBtdXN0IGJlIHVuaXF1ZSB3aGV0aGVyIHN0YXRpYyBvciBub3QKKwkgIDIuIHBlcmNwdSB2YXJpYWJsZXMgY2FuJ3QgYmUgZGVmaW5lZCBpbnNpZGUgYSBmdW5jdGlvbgorCisJICBUbyBlbnN1cmUgdGhhdCBnZW5lcmljIGNvZGUgZm9sbG93cyB0aGUgYWJvdmUgcnVsZXMsIHRoaXMKKwkgIG9wdGlvbiBmb3JjZXMgYWxsIHBlcmNwdSB2YXJpYWJsZXMgdG8gYmUgZGVmaW5lZCBhcyB3ZWFrLgorCiBjb25maWcgTEtEVE0KIAl0cmlzdGF0ZSAiTGludXggS2VybmVsIER1bXAgVGVzdCBUb29sIE1vZHVsZSIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTApkaWZmIC0tZ2l0IGEvbGliL2luZmxhdGUuYyBiL2xpYi9pbmZsYXRlLmMKaW5kZXggMWE4ZThhOS4uZDEwMjU1OSAxMDA2NDQKLS0tIGEvbGliL2luZmxhdGUuYworKysgYi9saWIvaW5mbGF0ZS5jCkBAIC03LDcgKzcsNyBAQAogICogQWRhcHRlZCBmb3IgYm9vdGluZyBMaW51eCBieSBIYW5udSBTYXZvbGFpbmVuIDE5OTMKICAqIGJhc2VkIG9uIGd6aXAtMS4wLjMgCiAgKgotICogTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPiwgMTk5OS8wNC8xNCA6CisgKiBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PiwgMTk5OS8wNC8xNCA6CiAgKiAgIExpdHRsZSBtb2RzIGZvciBhbGwgdmFyaWFibGUgdG8gcmVzaWRlIGVpdGhlciBpbnRvIHJvZGF0YSBvciBic3Mgc2VnbWVudHMKICAqICAgYnkgbWFya2luZyBjb25zdGFudCB2YXJpYWJsZXMgd2l0aCAnY29uc3QnIGFuZCBpbml0aWFsaXppbmcgYWxsIHRoZSBvdGhlcnMKICAqICAgYXQgcnVuLXRpbWUgb25seS4gIFRoaXMgYWxsb3dzIGZvciB0aGUga2VybmVsIHVuY29tcHJlc3NvciB0byBydW4KZGlmZiAtLWdpdCBhL2xpYi9pc19zaW5nbGVfdGhyZWFkZWQuYyBiL2xpYi9pc19zaW5nbGVfdGhyZWFkZWQuYwppbmRleCBmMWVkMmZlLi5iZDJiZWE5IDEwMDY0NAotLS0gYS9saWIvaXNfc2luZ2xlX3RocmVhZGVkLmMKKysrIGIvbGliL2lzX3NpbmdsZV90aHJlYWRlZC5jCkBAIC0xMiwzNCArMTIsNDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKLS8qKgotICogaXNfc2luZ2xlX3RocmVhZGVkIC0gRGV0ZXJtaW5lIGlmIGEgdGhyZWFkIGdyb3VwIGlzIHNpbmdsZS10aHJlYWRlZCBvciBub3QKLSAqIEBwOiBBIHRhc2sgaW4gdGhlIHRocmVhZCBncm91cCBpbiBxdWVzdGlvbgotICoKLSAqIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSB0aHJlYWQgZ3JvdXAgdG8gd2hpY2ggYSB0YXNrIGJlbG9uZ3MgaXMgc2luZ2xlCi0gKiB0aHJlYWRlZCwgZmFsc2UgaWYgaXQgaXMgbm90LgorLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFzayBkb2VzIG5vdCBzaGFyZSAtPm1tIHdpdGggYW5vdGhlciB0aHJlYWQvcHJvY2Vzcy4KICAqLwotYm9vbCBpc19zaW5nbGVfdGhyZWFkZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQorYm9vbCBjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCh2b2lkKQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnQ7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwLT5tbTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdXJyZW50OworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdGFzay0+bW07CisJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqdDsKKwlib29sIHJldDsKIAotCWlmIChhdG9taWNfcmVhZCgmcC0+c2lnbmFsLT5jb3VudCkgIT0gMSkKLQkJZ290byBubzsKKwlpZiAoYXRvbWljX3JlYWQoJnRhc2stPnNpZ25hbC0+bGl2ZSkgIT0gMSkKKwkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKGF0b21pY19yZWFkKCZwLT5tbS0+bW1fdXNlcnMpICE9IDEpIHsKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJZG9fZWFjaF90aHJlYWQoZywgdCkgewotCQkJaWYgKHQtPm1tID09IG1tICYmIHQgIT0gcCkKLQkJCQlnb3RvIG5vX3VubG9jazsKLQkJfSB3aGlsZV9lYWNoX3RocmVhZChnLCB0KTsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCWlmIChhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA9PSAxKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldCA9IGZhbHNlOworCXJjdV9yZWFkX2xvY2soKTsKKwlmb3JfZWFjaF9wcm9jZXNzKHApIHsKKwkJaWYgKHVubGlrZWx5KHAtPmZsYWdzICYgUEZfS1RIUkVBRCkpCisJCQljb250aW51ZTsKKwkJaWYgKHVubGlrZWx5KHAgPT0gdGFzay0+Z3JvdXBfbGVhZGVyKSkKKwkJCWNvbnRpbnVlOworCisJCXQgPSBwOworCQlkbyB7CisJCQlpZiAodW5saWtlbHkodC0+bW0gPT0gbW0pKQorCQkJCWdvdG8gZm91bmQ7CisJCQlpZiAobGlrZWx5KHQtPm1tKSkKKwkJCQlicmVhazsKKwkJCS8qCisJCQkgKiB0LT5tbSA9PSBOVUxMLiBNYWtlIHN1cmUgbmV4dF90aHJlYWQvbmV4dF90YXNrCisJCQkgKiB3aWxsIHNlZSBvdGhlciBDTE9ORV9WTSB0YXNrcyB3aGljaCBtaWdodCBiZQorCQkJICogZm9ya2VkIGJlZm9yZSBleGl0aW5nLgorCQkJICovCisJCQlzbXBfcm1iKCk7CisJCX0gd2hpbGVfZWFjaF90aHJlYWQocCwgdCk7CiAJfQorCXJldCA9IHRydWU7Citmb3VuZDoKKwlyY3VfcmVhZF91bmxvY2soKTsKIAotCXJldHVybiB0cnVlOwotCi1ub191bmxvY2s6Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotbm86Ci0JcmV0dXJuIGZhbHNlOworCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9saWIvc3dpb3RsYi5jIGIvbGliL3N3aW90bGIuYwppbmRleCBiZmZlNmQ3Li5hYzI1Y2QyIDEwMDY0NAotLS0gYS9saWIvc3dpb3RsYi5jCisrKyBiL2xpYi9zd2lvdGxiLmMKQEAgLTExNCw0NiArMTE0LDExIEBACiBfX3NldHVwKCJzd2lvdGxiPSIsIHNldHVwX2lvX3RsYl9ucGFnZXMpOwogLyogbWFrZSBpb190bGJfb3ZlcmZsb3cgdHVuYWJsZSB0b28/ICovCiAKLXZvaWQgKiBfX3dlYWsgX19pbml0IHN3aW90bGJfYWxsb2NfYm9vdChzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBuc2xhYnMpCi17Ci0JcmV0dXJuIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKHNpemUpOwotfQotCi12b2lkICogX193ZWFrIHN3aW90bGJfYWxsb2ModW5zaWduZWQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgbnNsYWJzKQotewotCXJldHVybiAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0RNQSB8IF9fR0ZQX05PV0FSTiwgb3JkZXIpOwotfQotCi1kbWFfYWRkcl90IF9fd2VhayBzd2lvdGxiX3BoeXNfdG9fYnVzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBwaHlzX2FkZHJfdCBwYWRkcikKLXsKLQlyZXR1cm4gcGFkZHI7Ci19Ci0KLXBoeXNfYWRkcl90IF9fd2VhayBzd2lvdGxiX2J1c190b19waHlzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGJhZGRyKQotewotCXJldHVybiBiYWRkcjsKLX0KLQorLyogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB3b3JrIHdpdGggaGlnaG1lbSBwYWdlICovCiBzdGF0aWMgZG1hX2FkZHJfdCBzd2lvdGxiX3ZpcnRfdG9fYnVzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAogCQkJCSAgICAgIHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpCiB7Ci0JcmV0dXJuIHN3aW90bGJfcGh5c190b19idXMoaHdkZXYsIHZpcnRfdG9fcGh5cyhhZGRyZXNzKSk7Ci19Ci0KLXZvaWQgKiBfX3dlYWsgc3dpb3RsYl9idXNfdG9fdmlydChzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBhZGRyZXNzKQotewotCXJldHVybiBwaHlzX3RvX3ZpcnQoc3dpb3RsYl9idXNfdG9fcGh5cyhod2RldiwgYWRkcmVzcykpOwotfQotCi1pbnQgX193ZWFrIHN3aW90bGJfYXJjaF9hZGRyZXNzX25lZWRzX21hcHBpbmcoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJCSAgICAgICBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplKQotewotCXJldHVybiAhaXNfYnVmZmVyX2RtYV9jYXBhYmxlKGRtYV9nZXRfbWFzayhod2RldiksIGFkZHIsIHNpemUpOwotfQotCi1pbnQgX193ZWFrIHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSkKLXsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGh5c190b19kbWEoaHdkZXYsIHZpcnRfdG9fcGh5cyhhZGRyZXNzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHN3aW90bGJfcHJpbnRfaW5mbyh1bnNpZ25lZCBsb25nIGJ5dGVzKQpAQCAtMTg5LDcgKzE1NCw3IEBACiAJLyoKIAkgKiBHZXQgSU8gVExCIG1lbW9yeSBmcm9tIHRoZSBsb3cgcGFnZXMKIAkgKi8KLQlpb190bGJfc3RhcnQgPSBzd2lvdGxiX2FsbG9jX2Jvb3QoYnl0ZXMsIGlvX3RsYl9uc2xhYnMpOworCWlvX3RsYl9zdGFydCA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKGJ5dGVzKTsKIAlpZiAoIWlvX3RsYl9zdGFydCkKIAkJcGFuaWMoIkNhbm5vdCBhbGxvY2F0ZSBTV0lPVExCIGJ1ZmZlciIpOwogCWlvX3RsYl9lbmQgPSBpb190bGJfc3RhcnQgKyBieXRlczsKQEAgLTI0NSw3ICsyMTAsOCBAQAogCWJ5dGVzID0gaW9fdGxiX25zbGFicyA8PCBJT19UTEJfU0hJRlQ7CiAKIAl3aGlsZSAoKFNMQUJTX1BFUl9QQUdFIDw8IG9yZGVyKSA+IElPX1RMQl9NSU5fU0xBQlMpIHsKLQkJaW9fdGxiX3N0YXJ0ID0gc3dpb3RsYl9hbGxvYyhvcmRlciwgaW9fdGxiX25zbGFicyk7CisJCWlvX3RsYl9zdGFydCA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfRE1BIHwgX19HRlBfTk9XQVJOLAorCQkJCQkJCW9yZGVyKTsKIAkJaWYgKGlvX3RsYl9zdGFydCkKIAkJCWJyZWFrOwogCQlvcmRlci0tOwpAQCAtMzE1LDIwICsyODEsMTAgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWFkZHJlc3NfbmVlZHNfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBpbnQgaXNfc3dpb3RsYl9idWZmZXIocGh5c19hZGRyX3QgcGFkZHIpCiB7Ci0JcmV0dXJuIHN3aW90bGJfYXJjaF9hZGRyZXNzX25lZWRzX21hcHBpbmcoaHdkZXYsIGFkZHIsIHNpemUpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCByYW5nZV9uZWVkc19tYXBwaW5nKHBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSkKLXsKLQlyZXR1cm4gc3dpb3RsYl9mb3JjZSB8fCBzd2lvdGxiX2FyY2hfcmFuZ2VfbmVlZHNfbWFwcGluZyhwYWRkciwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgaXNfc3dpb3RsYl9idWZmZXIoY2hhciAqYWRkcikKLXsKLQlyZXR1cm4gYWRkciA+PSBpb190bGJfc3RhcnQgJiYgYWRkciA8IGlvX3RsYl9lbmQ7CisJcmV0dXJuIHBhZGRyID49IHZpcnRfdG9fcGh5cyhpb190bGJfc3RhcnQpICYmCisJCXBhZGRyIDwgdmlydF90b19waHlzKGlvX3RsYl9lbmQpOwogfQogCiAvKgpAQCAtNTYxLDkgKzUxNyw3IEBACiAJCWRtYV9tYXNrID0gaHdkZXYtPmNvaGVyZW50X2RtYV9tYXNrOwogCiAJcmV0ID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKGZsYWdzLCBvcmRlcik7Ci0JaWYgKHJldCAmJgotCSAgICAhaXNfYnVmZmVyX2RtYV9jYXBhYmxlKGRtYV9tYXNrLCBzd2lvdGxiX3ZpcnRfdG9fYnVzKGh3ZGV2LCByZXQpLAotCQkJCSAgIHNpemUpKSB7CisJaWYgKHJldCAmJiBzd2lvdGxiX3ZpcnRfdG9fYnVzKGh3ZGV2LCByZXQpICsgc2l6ZSA+IGRtYV9tYXNrKSB7CiAJCS8qCiAJCSAqIFRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzbid0IHJlYWNoYWJsZSBieSB0aGUgZGV2aWNlLgogCQkgKi8KQEAgLTU4NSw3ICs1MzksNyBAQAogCWRldl9hZGRyID0gc3dpb3RsYl92aXJ0X3RvX2J1cyhod2RldiwgcmV0KTsKIAogCS8qIENvbmZpcm0gYWRkcmVzcyBjYW4gYmUgRE1BJ2QgYnkgZGV2aWNlICovCi0JaWYgKCFpc19idWZmZXJfZG1hX2NhcGFibGUoZG1hX21hc2ssIGRldl9hZGRyLCBzaXplKSkgeworCWlmIChkZXZfYWRkciArIHNpemUgPiBkbWFfbWFzaykgewogCQlwcmludGsoImh3ZGV2IERNQSBtYXNrID0gMHglMDE2THgsIGRldl9hZGRyID0gMHglMDE2THhcbiIsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRtYV9tYXNrLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkZXZfYWRkcik7CkBAIC02MDEsMTEgKzU1NSwxMyBAQAogCiB2b2lkCiBzd2lvdGxiX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwKLQkJICAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQorCQkgICAgICBkbWFfYWRkcl90IGRldl9hZGRyKQogeworCXBoeXNfYWRkcl90IHBhZGRyID0gZG1hX3RvX3BoeXMoaHdkZXYsIGRldl9hZGRyKTsKKwogCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsKLQlpZiAoIWlzX3N3aW90bGJfYnVmZmVyKHZhZGRyKSkKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgdmFkZHIsIGdldF9vcmRlcihzaXplKSk7CisJaWYgKCFpc19zd2lvdGxiX2J1ZmZlcihwYWRkcikpCisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGdldF9vcmRlcihzaXplKSk7CiAJZWxzZQogCQkvKiBETUFfVE9fREVWSUNFIHRvIGF2b2lkIG1lbWNweSBpbiB1bm1hcF9zaW5nbGUgKi8KIAkJZG9fdW5tYXBfc2luZ2xlKGh3ZGV2LCB2YWRkciwgc2l6ZSwgRE1BX1RPX0RFVklDRSk7CkBAIC02MjUsMTIgKzU4MSwxNSBAQAogCXByaW50ayhLRVJOX0VSUiAiRE1BOiBPdXQgb2YgU1ctSU9NTVUgc3BhY2UgZm9yICV6dSBieXRlcyBhdCAiCiAJICAgICAgICJkZXZpY2UgJXNcbiIsIHNpemUsIGRldiA/IGRldl9uYW1lKGRldikgOiAiPyIpOwogCi0JaWYgKHNpemUgPiBpb190bGJfb3ZlcmZsb3cgJiYgZG9fcGFuaWMpIHsKLQkJaWYgKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UgfHwgZGlyID09IERNQV9CSURJUkVDVElPTkFMKQotCQkJcGFuaWMoIkRNQTogTWVtb3J5IHdvdWxkIGJlIGNvcnJ1cHRlZFxuIik7Ci0JCWlmIChkaXIgPT0gRE1BX1RPX0RFVklDRSB8fCBkaXIgPT0gRE1BX0JJRElSRUNUSU9OQUwpCi0JCQlwYW5pYygiRE1BOiBSYW5kb20gbWVtb3J5IHdvdWxkIGJlIERNQWVkXG4iKTsKLQl9CisJaWYgKHNpemUgPD0gaW9fdGxiX292ZXJmbG93IHx8ICFkb19wYW5pYykKKwkJcmV0dXJuOworCisJaWYgKGRpciA9PSBETUFfQklESVJFQ1RJT05BTCkKKwkJcGFuaWMoIkRNQTogUmFuZG9tIG1lbW9yeSBjb3VsZCBiZSBETUEgYWNjZXNzZWRcbiIpOworCWlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKQorCQlwYW5pYygiRE1BOiBSYW5kb20gbWVtb3J5IGNvdWxkIGJlIERNQSB3cml0dGVuXG4iKTsKKwlpZiAoZGlyID09IERNQV9UT19ERVZJQ0UpCisJCXBhbmljKCJETUE6IFJhbmRvbSBtZW1vcnkgY291bGQgYmUgRE1BIHJlYWRcbiIpOwogfQogCiAvKgpAQCAtNjQ2LDcgKzYwNSw3IEBACiAJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJcGh5c19hZGRyX3QgcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKLQlkbWFfYWRkcl90IGRldl9hZGRyID0gc3dpb3RsYl9waHlzX3RvX2J1cyhkZXYsIHBoeXMpOworCWRtYV9hZGRyX3QgZGV2X2FkZHIgPSBwaHlzX3RvX2RtYShkZXYsIHBoeXMpOwogCXZvaWQgKm1hcDsKIAogCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwpAQCAtNjU1LDggKzYxNCw3IEBACiAJICogd2UgY2FuIHNhZmVseSByZXR1cm4gdGhlIGRldmljZSBhZGRyIGFuZCBub3Qgd29ycnkgYWJvdXQgYm91bmNlCiAJICogYnVmZmVyaW5nIGl0LgogCSAqLwotCWlmICghYWRkcmVzc19uZWVkc19tYXBwaW5nKGRldiwgZGV2X2FkZHIsIHNpemUpICYmCi0JICAgICFyYW5nZV9uZWVkc19tYXBwaW5nKHBoeXMsIHNpemUpKQorCWlmIChkbWFfY2FwYWJsZShkZXYsIGRldl9hZGRyLCBzaXplKSAmJiAhc3dpb3RsYl9mb3JjZSkKIAkJcmV0dXJuIGRldl9hZGRyOwogCiAJLyoKQEAgLTY3Myw3ICs2MzEsNyBAQAogCS8qCiAJICogRW5zdXJlIHRoYXQgdGhlIGFkZHJlc3MgcmV0dXJuZWQgaXMgRE1BJ2JsZQogCSAqLwotCWlmIChhZGRyZXNzX25lZWRzX21hcHBpbmcoZGV2LCBkZXZfYWRkciwgc2l6ZSkpCisJaWYgKCFkbWFfY2FwYWJsZShkZXYsIGRldl9hZGRyLCBzaXplKSkKIAkJcGFuaWMoIm1hcF9zaW5nbGU6IGJvdW5jZSBidWZmZXIgaXMgbm90IERNQSdibGUiKTsKIAogCXJldHVybiBkZXZfYWRkcjsKQEAgLTY5MSwxOSArNjQ5LDI1IEBACiBzdGF0aWMgdm9pZCB1bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCiAJCQkgc2l6ZV90IHNpemUsIGludCBkaXIpCiB7Ci0JY2hhciAqZG1hX2FkZHIgPSBzd2lvdGxiX2J1c190b192aXJ0KGh3ZGV2LCBkZXZfYWRkcik7CisJcGh5c19hZGRyX3QgcGFkZHIgPSBkbWFfdG9fcGh5cyhod2RldiwgZGV2X2FkZHIpOwogCiAJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CiAKLQlpZiAoaXNfc3dpb3RsYl9idWZmZXIoZG1hX2FkZHIpKSB7Ci0JCWRvX3VubWFwX3NpbmdsZShod2RldiwgZG1hX2FkZHIsIHNpemUsIGRpcik7CisJaWYgKGlzX3N3aW90bGJfYnVmZmVyKHBhZGRyKSkgeworCQlkb191bm1hcF9zaW5nbGUoaHdkZXYsIHBoeXNfdG9fdmlydChwYWRkciksIHNpemUsIGRpcik7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoZGlyICE9IERNQV9GUk9NX0RFVklDRSkKIAkJcmV0dXJuOwogCi0JZG1hX21hcmtfY2xlYW4oZG1hX2FkZHIsIHNpemUpOworCS8qCisJICogcGh5c190b192aXJ0IGRvZXNuJ3Qgd29yayB3aXRoIGhpaGdtZW0gcGFnZSBidXQgd2UgY291bGQKKwkgKiBjYWxsIGRtYV9tYXJrX2NsZWFuKCkgd2l0aCBoaWhnbWVtIHBhZ2UgaGVyZS4gSG93ZXZlciwgd2UKKwkgKiBhcmUgZmluZSBzaW5jZSBkbWFfbWFya19jbGVhbigpIGlzIG51bGwgb24gUE9XRVJQQy4gV2UgY2FuCisJICogbWFrZSBkbWFfbWFya19jbGVhbigpIHRha2UgYSBwaHlzaWNhbCBhZGRyZXNzIGlmIG5lY2Vzc2FyeS4KKwkgKi8KKwlkbWFfbWFya19jbGVhbihwaHlzX3RvX3ZpcnQocGFkZHIpLCBzaXplKTsKIH0KIAogdm9pZCBzd2lvdGxiX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCkBAIC03MjgsMTkgKzY5MiwxOSBAQAogc3dpb3RsYl9zeW5jX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKIAkJICAgIHNpemVfdCBzaXplLCBpbnQgZGlyLCBpbnQgdGFyZ2V0KQogewotCWNoYXIgKmRtYV9hZGRyID0gc3dpb3RsYl9idXNfdG9fdmlydChod2RldiwgZGV2X2FkZHIpOworCXBoeXNfYWRkcl90IHBhZGRyID0gZG1hX3RvX3BoeXMoaHdkZXYsIGRldl9hZGRyKTsKIAogCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwogCi0JaWYgKGlzX3N3aW90bGJfYnVmZmVyKGRtYV9hZGRyKSkgewotCQlzeW5jX3NpbmdsZShod2RldiwgZG1hX2FkZHIsIHNpemUsIGRpciwgdGFyZ2V0KTsKKwlpZiAoaXNfc3dpb3RsYl9idWZmZXIocGFkZHIpKSB7CisJCXN5bmNfc2luZ2xlKGh3ZGV2LCBwaHlzX3RvX3ZpcnQocGFkZHIpLCBzaXplLCBkaXIsIHRhcmdldCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoZGlyICE9IERNQV9GUk9NX0RFVklDRSkKIAkJcmV0dXJuOwogCi0JZG1hX21hcmtfY2xlYW4oZG1hX2FkZHIsIHNpemUpOworCWRtYV9tYXJrX2NsZWFuKHBoeXNfdG9fdmlydChwYWRkciksIHNpemUpOwogfQogCiB2b2lkCkBAIC04MTcsMTAgKzc4MSwxMCBAQAogCiAJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVsZW1zLCBpKSB7CiAJCXBoeXNfYWRkcl90IHBhZGRyID0gc2dfcGh5cyhzZyk7Ci0JCWRtYV9hZGRyX3QgZGV2X2FkZHIgPSBzd2lvdGxiX3BoeXNfdG9fYnVzKGh3ZGV2LCBwYWRkcik7CisJCWRtYV9hZGRyX3QgZGV2X2FkZHIgPSBwaHlzX3RvX2RtYShod2RldiwgcGFkZHIpOwogCi0JCWlmIChyYW5nZV9uZWVkc19tYXBwaW5nKHBhZGRyLCBzZy0+bGVuZ3RoKSB8fAotCQkgICAgYWRkcmVzc19uZWVkc19tYXBwaW5nKGh3ZGV2LCBkZXZfYWRkciwgc2ctPmxlbmd0aCkpIHsKKwkJaWYgKHN3aW90bGJfZm9yY2UgfHwKKwkJICAgICFkbWFfY2FwYWJsZShod2RldiwgZGV2X2FkZHIsIHNnLT5sZW5ndGgpKSB7CiAJCQl2b2lkICptYXAgPSBtYXBfc2luZ2xlKGh3ZGV2LCBzZ19waHlzKHNnKSwKIAkJCQkJICAgICAgIHNnLT5sZW5ndGgsIGRpcik7CiAJCQlpZiAoIW1hcCkgewpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCA3NTZjY2FmLi5jYjhhMTEyIDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYworKysgYi9saWIvdnNwcmludGYuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPG5ldC9hZGRyY29uZi5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4JCS8qIGZvciBQQUdFX1NJWkUgKi8KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTYzMCw2MCArNjMxLDE1NiBAQAogfQogCiBzdGF0aWMgY2hhciAqbWFjX2FkZHJlc3Nfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB1OCAqYWRkciwKLQkJCQlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYykKKwkJCQlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYywgY29uc3QgY2hhciAqZm10KQogewotCWNoYXIgbWFjX2FkZHJbNiAqIDNdOyAvKiAoNiAqIDIgaGV4IGRpZ2l0cyksIDUgY29sb25zIGFuZCB0cmFpbGluZyB6ZXJvICovCisJY2hhciBtYWNfYWRkcltzaXplb2YoInh4Onh4Onh4Onh4Onh4Onh4IildOwogCWNoYXIgKnAgPSBtYWNfYWRkcjsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKIAkJcCA9IHBhY2tfaGV4X2J5dGUocCwgYWRkcltpXSk7Ci0JCWlmICghKHNwZWMuZmxhZ3MgJiBTUEVDSUFMKSAmJiBpICE9IDUpCisJCWlmIChmbXRbMF0gPT0gJ00nICYmIGkgIT0gNSkKIAkJCSpwKysgPSAnOic7CiAJfQogCSpwID0gJ1wwJzsKLQlzcGVjLmZsYWdzICY9IH5TUEVDSUFMOwogCiAJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgbWFjX2FkZHIsIHNwZWMpOwogfQogCi1zdGF0aWMgY2hhciAqaXA2X2FkZHJfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB1OCAqYWRkciwKLQkJCQlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYykKK3N0YXRpYyBjaGFyICppcDRfc3RyaW5nKGNoYXIgKnAsIGNvbnN0IHU4ICphZGRyLCBib29sIGxlYWRpbmdfemVyb3MpCiB7Ci0JY2hhciBpcDZfYWRkcls4ICogNV07IC8qICg4ICogNCBoZXggZGlnaXRzKSwgNyBjb2xvbnMgYW5kIHRyYWlsaW5nIHplcm8gKi8KLQljaGFyICpwID0gaXA2X2FkZHI7CiAJaW50IGk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWNoYXIgdGVtcFszXTsJLyogaG9sZCBlYWNoIElQIHF1YWQgaW4gcmV2ZXJzZSBvcmRlciAqLworCQlpbnQgZGlnaXRzID0gcHV0X2RlY190cnVuYyh0ZW1wLCBhZGRyW2ldKSAtIHRlbXA7CisJCWlmIChsZWFkaW5nX3plcm9zKSB7CisJCQlpZiAoZGlnaXRzIDwgMykKKwkJCQkqcCsrID0gJzAnOworCQkJaWYgKGRpZ2l0cyA8IDIpCisJCQkJKnArKyA9ICcwJzsKKwkJfQorCQkvKiByZXZlcnNlIHRoZSBkaWdpdHMgaW4gdGhlIHF1YWQgKi8KKwkJd2hpbGUgKGRpZ2l0cy0tKQorCQkJKnArKyA9IHRlbXBbZGlnaXRzXTsKKwkJaWYgKGkgPCAzKQorCQkJKnArKyA9ICcuJzsKKwl9CisKKwkqcCA9ICdcMCc7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBjaGFyICppcDZfY29tcHJlc3NlZF9zdHJpbmcoY2hhciAqcCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQoreworCWludCBpOworCWludCBqOworCWludCByYW5nZTsKKwl1bnNpZ25lZCBjaGFyIHplcm9sZW5ndGhbOF07CisJaW50IGxvbmdlc3QgPSAxOworCWludCBjb2xvbnBvcyA9IC0xOworCXUxNiB3b3JkOworCXU4IGhpOworCXU4IGxvOworCWJvb2wgbmVlZGNvbG9uID0gZmFsc2U7CisJYm9vbCB1c2VJUHY0ID0gaXB2Nl9hZGRyX3Y0bWFwcGVkKGFkZHIpIHx8IGlwdjZfYWRkcl9pc19pc2F0YXAoYWRkcik7CisKKwltZW1zZXQoemVyb2xlbmd0aCwgMCwgc2l6ZW9mKHplcm9sZW5ndGgpKTsKKworCWlmICh1c2VJUHY0KQorCQlyYW5nZSA9IDY7CisJZWxzZQorCQlyYW5nZSA9IDg7CisKKwkvKiBmaW5kIHBvc2l0aW9uIG9mIGxvbmdlc3QgMCBydW4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmFuZ2U7IGkrKykgeworCQlmb3IgKGogPSBpOyBqIDwgcmFuZ2U7IGorKykgeworCQkJaWYgKGFkZHItPnM2X2FkZHIxNltqXSAhPSAwKQorCQkJCWJyZWFrOworCQkJemVyb2xlbmd0aFtpXSsrOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCByYW5nZTsgaSsrKSB7CisJCWlmICh6ZXJvbGVuZ3RoW2ldID4gbG9uZ2VzdCkgeworCQkJbG9uZ2VzdCA9IHplcm9sZW5ndGhbaV07CisJCQljb2xvbnBvcyA9IGk7CisJCX0KKwl9CisKKwkvKiBlbWl0IGFkZHJlc3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmFuZ2U7IGkrKykgeworCQlpZiAoaSA9PSBjb2xvbnBvcykgeworCQkJaWYgKG5lZWRjb2xvbiB8fCBpID09IDApCisJCQkJKnArKyA9ICc6JzsKKwkJCSpwKysgPSAnOic7CisJCQluZWVkY29sb24gPSBmYWxzZTsKKwkJCWkgKz0gbG9uZ2VzdCAtIDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobmVlZGNvbG9uKSB7CisJCQkqcCsrID0gJzonOworCQkJbmVlZGNvbG9uID0gZmFsc2U7CisJCX0KKwkJLyogaGV4IHUxNiB3aXRob3V0IGxlYWRpbmcgMHMgKi8KKwkJd29yZCA9IG50b2hzKGFkZHItPnM2X2FkZHIxNltpXSk7CisJCWhpID0gd29yZCA+PiA4OworCQlsbyA9IHdvcmQgJiAweGZmOworCQlpZiAoaGkpIHsKKwkJCWlmIChoaSA+IDB4MGYpCisJCQkJcCA9IHBhY2tfaGV4X2J5dGUocCwgaGkpOworCQkJZWxzZQorCQkJCSpwKysgPSBoZXhfYXNjX2xvKGhpKTsKKwkJfQorCQlpZiAoaGkgfHwgbG8gPiAweDBmKQorCQkJcCA9IHBhY2tfaGV4X2J5dGUocCwgbG8pOworCQllbHNlCisJCQkqcCsrID0gaGV4X2FzY19sbyhsbyk7CisJCW5lZWRjb2xvbiA9IHRydWU7CisJfQorCisJaWYgKHVzZUlQdjQpIHsKKwkJaWYgKG5lZWRjb2xvbikKKwkJCSpwKysgPSAnOic7CisJCXAgPSBpcDRfc3RyaW5nKHAsICZhZGRyLT5zNl9hZGRyWzEyXSwgZmFsc2UpOworCX0KKworCSpwID0gJ1wwJzsKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIGNoYXIgKmlwNl9zdHJpbmcoY2hhciAqcCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCBjb25zdCBjaGFyICpmbXQpCit7CisJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlwID0gcGFja19oZXhfYnl0ZShwLCBhZGRyWzIgKiBpXSk7Ci0JCXAgPSBwYWNrX2hleF9ieXRlKHAsIGFkZHJbMiAqIGkgKyAxXSk7Ci0JCWlmICghKHNwZWMuZmxhZ3MgJiBTUEVDSUFMKSAmJiBpICE9IDcpCisJCXAgPSBwYWNrX2hleF9ieXRlKHAsIGFkZHItPnM2X2FkZHJbMiAqIGldKTsKKwkJcCA9IHBhY2tfaGV4X2J5dGUocCwgYWRkci0+czZfYWRkclsyICogaSArIDFdKTsKKwkJaWYgKGZtdFswXSA9PSAnSScgJiYgaSAhPSA3KQogCQkJKnArKyA9ICc6JzsKIAl9CisKIAkqcCA9ICdcMCc7Ci0Jc3BlYy5mbGFncyAmPSB+U1BFQ0lBTDsKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIGNoYXIgKmlwNl9hZGRyX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgY29uc3QgdTggKmFkZHIsCisJCQkgICAgIHN0cnVjdCBwcmludGZfc3BlYyBzcGVjLCBjb25zdCBjaGFyICpmbXQpCit7CisJY2hhciBpcDZfYWRkcltzaXplb2YoInh4eHg6eHh4eDp4eHh4Onh4eHg6eHh4eDp4eHh4OjI1NS4yNTUuMjU1LjI1NSIpXTsKKworCWlmIChmbXRbMF0gPT0gJ0knICYmIGZtdFsyXSA9PSAnYycpCisJCWlwNl9jb21wcmVzc2VkX3N0cmluZyhpcDZfYWRkciwgKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKWFkZHIpOworCWVsc2UKKwkJaXA2X3N0cmluZyhpcDZfYWRkciwgKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKWFkZHIsIGZtdCk7CiAKIAlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBpcDZfYWRkciwgc3BlYyk7CiB9CiAKLXN0YXRpYyBjaGFyICppcDRfYWRkcl9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHU4ICphZGRyLAotCQkJCXN0cnVjdCBwcmludGZfc3BlYyBzcGVjKQorc3RhdGljIGNoYXIgKmlwNF9hZGRyX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgY29uc3QgdTggKmFkZHIsCisJCQkgICAgIHN0cnVjdCBwcmludGZfc3BlYyBzcGVjLCBjb25zdCBjaGFyICpmbXQpCiB7Ci0JY2hhciBpcDRfYWRkcls0ICogNF07IC8qICg0ICogMyBkZWNpbWFsIGRpZ2l0cyksIDMgZG90cyBhbmQgdHJhaWxpbmcgemVybyAqLwotCWNoYXIgdGVtcFszXTsJLyogaG9sZCBlYWNoIElQIHF1YWQgaW4gcmV2ZXJzZSBvcmRlciAqLwotCWNoYXIgKnAgPSBpcDRfYWRkcjsKLQlpbnQgaSwgZGlnaXRzOworCWNoYXIgaXA0X2FkZHJbc2l6ZW9mKCIyNTUuMjU1LjI1NS4yNTUiKV07CiAKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWRpZ2l0cyA9IHB1dF9kZWNfdHJ1bmModGVtcCwgYWRkcltpXSkgLSB0ZW1wOwotCQkvKiByZXZlcnNlIHRoZSBkaWdpdHMgaW4gdGhlIHF1YWQgKi8KLQkJd2hpbGUgKGRpZ2l0cy0tKQotCQkJKnArKyA9IHRlbXBbZGlnaXRzXTsKLQkJaWYgKGkgIT0gMykKLQkJCSpwKysgPSAnLic7Ci0JfQotCSpwID0gJ1wwJzsKLQlzcGVjLmZsYWdzICY9IH5TUEVDSUFMOworCWlwNF9zdHJpbmcoaXA0X2FkZHIsIGFkZHIsIGZtdFswXSA9PSAnaScpOwogCiAJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgaXA0X2FkZHIsIHNwZWMpOwogfQpAQCAtNzAyLDExICs3OTksMTUgQEAKICAqICAgICAgIGFkZHJlc3NlcyAobm90IHRoZSBuYW1lIG5vciB0aGUgZmxhZ3MpCiAgKiAtICdNJyBGb3IgYSA2LWJ5dGUgTUFDIGFkZHJlc3MsIGl0IHByaW50cyB0aGUgYWRkcmVzcyBpbiB0aGUKICAqICAgICAgIHVzdWFsIGNvbG9uLXNlcGFyYXRlZCBoZXggbm90YXRpb24KLSAqIC0gJ0knIFs0Nl0gZm9yIElQdjQvSVB2NiBhZGRyZXNzZXMgcHJpbnRlZCBpbiB0aGUgdXN1YWwgd2F5IChkb3Qtc2VwYXJhdGVkCi0gKiAgICAgICBkZWNpbWFsIGZvciB2NCBhbmQgY29sb24gc2VwYXJhdGVkIG5ldHdvcmstb3JkZXIgMTYgYml0IGhleCBmb3IgdjYpCi0gKiAtICdpJyBbNDZdIGZvciAncmF3JyBJUHY0L0lQdjYgYWRkcmVzc2VzLCBJUHY2IG9taXRzIHRoZSBjb2xvbnMsIElQdjQgaXMKLSAqICAgICAgIGN1cnJlbnRseSB0aGUgc2FtZQotICoKKyAqIC0gJ20nIEZvciBhIDYtYnl0ZSBNQUMgYWRkcmVzcywgaXQgcHJpbnRzIHRoZSBoZXggYWRkcmVzcyB3aXRob3V0IGNvbG9ucworICogLSAnSScgWzQ2XSBmb3IgSVB2NC9JUHY2IGFkZHJlc3NlcyBwcmludGVkIGluIHRoZSB1c3VhbCB3YXkKKyAqICAgICAgIElQdjQgdXNlcyBkb3Qtc2VwYXJhdGVkIGRlY2ltYWwgd2l0aG91dCBsZWFkaW5nIDAncyAoMS4yLjMuNCkKKyAqICAgICAgIElQdjYgdXNlcyBjb2xvbiBzZXBhcmF0ZWQgbmV0d29yay1vcmRlciAxNiBiaXQgaGV4IHdpdGggbGVhZGluZyAwJ3MKKyAqIC0gJ2knIFs0Nl0gZm9yICdyYXcnIElQdjQvSVB2NiBhZGRyZXNzZXMKKyAqICAgICAgIElQdjYgb21pdHMgdGhlIGNvbG9ucyAoMDEwMjAzMDQuLi4wZikKKyAqICAgICAgIElQdjQgdXNlcyBkb3Qtc2VwYXJhdGVkIGRlY2ltYWwgd2l0aCBsZWFkaW5nIDAncyAoMDEwLjEyMy4wNDUuMDA2KQorICogLSAnSTZjJyBmb3IgSVB2NiBhZGRyZXNzZXMgcHJpbnRlZCBhcyBzcGVjaWZpZWQgYnkKKyAqICAgICAgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvaWQvZHJhZnQta2F3YW11cmEtaXB2Ni10ZXh0LXJlcHJlc2VudGF0aW9uLTAzLnR4dAogICogTm90ZTogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAnUycgYW5kICdGJyBpcyB0aGF0IG9uIGlhNjQgYW5kIHBwYzY0CiAgKiBmdW5jdGlvbiBwb2ludGVycyBhcmUgcmVhbGx5IGZ1bmN0aW9uIGRlc2NyaXB0b3JzLCB3aGljaCBjb250YWluIGEKICAqIHBvaW50ZXIgdG8gdGhlIHJlYWwgYWRkcmVzcy4KQEAgLTcyNiwyMCArODI3LDI0IEBACiAJCXJldHVybiBzeW1ib2xfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMsICpmbXQpOwogCWNhc2UgJ1InOgogCQlyZXR1cm4gcmVzb3VyY2Vfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMpOwotCWNhc2UgJ20nOgotCQlzcGVjLmZsYWdzIHw9IFNQRUNJQUw7Ci0JCS8qIEZhbGx0aHJvdWdoICovCi0JY2FzZSAnTSc6Ci0JCXJldHVybiBtYWNfYWRkcmVzc19zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYyk7Ci0JY2FzZSAnaSc6Ci0JCXNwZWMuZmxhZ3MgfD0gU1BFQ0lBTDsKLQkJLyogRmFsbHRocm91Z2ggKi8KLQljYXNlICdJJzoKLQkJaWYgKGZtdFsxXSA9PSAnNicpCi0JCQlyZXR1cm4gaXA2X2FkZHJfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMpOwotCQlpZiAoZm10WzFdID09ICc0JykKLQkJCXJldHVybiBpcDRfYWRkcl9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYyk7Ci0JCXNwZWMuZmxhZ3MgJj0gflNQRUNJQUw7CisJY2FzZSAnTSc6CQkJLyogQ29sb24gc2VwYXJhdGVkOiAwMDowMTowMjowMzowNDowNSAqLworCWNhc2UgJ20nOgkJCS8qIENvbnRpZ3VvdXM6IDAwMDEwMjAzMDQwNSAqLworCQlyZXR1cm4gbWFjX2FkZHJlc3Nfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMsIGZtdCk7CisJY2FzZSAnSSc6CQkJLyogRm9ybWF0dGVkIElQIHN1cHBvcnRlZAorCQkJCQkgKiA0OgkxLjIuMy40CisJCQkJCSAqIDY6CTAwMDE6MDIwMzouLi46MDcwOAorCQkJCQkgKiA2YzoJMTo6NzA4IG9yIDE6OjEuMi4zLjQKKwkJCQkJICovCisJY2FzZSAnaSc6CQkJLyogQ29udGlndW91czoKKwkJCQkJICogNDoJMDAxLjAwMi4wMDMuMDA0CisJCQkJCSAqIDY6ICAgMDAwMTAyLi4uMGYKKwkJCQkJICovCisJCXN3aXRjaCAoZm10WzFdKSB7CisJCWNhc2UgJzYnOgorCQkJcmV0dXJuIGlwNl9hZGRyX3N0cmluZyhidWYsIGVuZCwgcHRyLCBzcGVjLCBmbXQpOworCQljYXNlICc0JzoKKwkJCXJldHVybiBpcDRfYWRkcl9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYywgZm10KTsKKwkJfQogCQlicmVhazsKIAl9CiAJc3BlYy5mbGFncyB8PSBTTUFMTDsKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IGZlNWY2NzQuLjNhYTUxOWYgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAtMTUzLDcgKzE1Myw3IEBACiAjCiBjb25maWcgUEFHRUZMQUdTX0VYVEVOREVECiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gNjRCSVQgfHwgU1BBUlNFTUVNX1ZNRU1NQVAgfHwgIU5VTUEgfHwgIVNQQVJTRU1FTQorCWRlcGVuZHMgb24gNjRCSVQgfHwgU1BBUlNFTUVNX1ZNRU1NQVAgfHwgIVNQQVJTRU1FTQogCiAjIEhlYXZpbHkgdGhyZWFkZWQgYXBwbGljYXRpb25zIG1heSBiZW5lZml0IGZyb20gc3BsaXR0aW5nIHRoZSBtbS13aWRlCiAjIHBhZ2VfdGFibGVfbG9jaywgc28gdGhhdCBmYXVsdHMgb24gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSB1c2VyIGFkZHJlc3MKZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGUKaW5kZXggNWUwYmQ2NC4uZWE0YjE4YiAxMDA2NDQKLS0tIGEvbW0vTWFrZWZpbGUKKysrIGIvbW0vTWFrZWZpbGUKQEAgLTgsNyArOCw3IEBACiAJCQkgICB2bWFsbG9jLm8KIAogb2JqLXkJCQk6PSBib290bWVtLm8gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcCi0JCQkgICBtYWNjZXNzLm8gcGFnZV9hbGxvYy5vIHBhZ2Utd3JpdGViYWNrLm8gcGRmbHVzaC5vIFwKKwkJCSAgIG1hY2Nlc3MubyBwYWdlX2FsbG9jLm8gcGFnZS13cml0ZWJhY2subyBcCiAJCQkgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaG1lbS5vIFwKIAkJCSAgIHByaW9fdHJlZS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFwKIAkJCSAgIHBhZ2VfaXNvbGF0aW9uLm8gbW1faW5pdC5vICQobW11LXkpCkBAIC0zMyw3ICszMyw3IEBACiBvYmotJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpICs9IG1lbW9yeV9ob3RwbHVnLm8KIG9iai0kKENPTkZJR19GU19YSVApICs9IGZpbGVtYXBfeGlwLm8KIG9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUubwotaWZkZWYgQ09ORklHX0hBVkVfRFlOQU1JQ19QRVJfQ1BVX0FSRUEKK2lmbmRlZiBDT05GSUdfSEFWRV9MRUdBQ1lfUEVSX0NQVV9BUkVBCiBvYmotJChDT05GSUdfU01QKSArPSBwZXJjcHUubwogZWxzZQogb2JqLSQoQ09ORklHX1NNUCkgKz0gYWxsb2NwZXJjcHUubwpkaWZmIC0tZ2l0IGEvbW0vYWxsb2NwZXJjcHUuYyBiL21tL2FsbG9jcGVyY3B1LmMKaW5kZXggZGZkZWU2YS4uZGYzNGNlYSAxMDA2NDQKLS0tIGEvbW0vYWxsb2NwZXJjcHUuYworKysgYi9tbS9hbGxvY3BlcmNwdS5jCkBAIC01LDYgKzUsOCBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKICNpZm5kZWYgY2FjaGVfbGluZV9zaXplCiAjZGVmaW5lIGNhY2hlX2xpbmVfc2l6ZSgpCUwxX0NBQ0hFX0JZVEVTCkBAIC0xNDcsMyArMTQ5LDI5IEBACiAJa2ZyZWUoX19wZXJjcHVfZGlzZ3Vpc2UoX19wZGF0YSkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZnJlZV9wZXJjcHUpOworCisvKgorICogR2VuZXJpYyBwZXJjcHUgYXJlYSBzZXR1cC4KKyAqLworI2lmbmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKK3Vuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5OworCitFWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9vZmZzZXQpOworCit2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzaXplLCBpOworCWNoYXIgKnB0cjsKKwl1bnNpZ25lZCBsb25nIG5yX3Bvc3NpYmxlX2NwdXMgPSBudW1fcG9zc2libGVfY3B1cygpOworCisJLyogQ29weSBzZWN0aW9uIGZvciBlYWNoIENQVSAod2UgZGlzY2FyZCB0aGUgb3JpZ2luYWwpICovCisJc2l6ZSA9IEFMSUdOKFBFUkNQVV9FTk9VR0hfUk9PTSwgUEFHRV9TSVpFKTsKKwlwdHIgPSBhbGxvY19ib290bWVtX3BhZ2VzKHNpemUgKiBucl9wb3NzaWJsZV9jcHVzKTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCV9fcGVyX2NwdV9vZmZzZXRbaV0gPSBwdHIgLSBfX3Blcl9jcHVfc3RhcnQ7CisJCW1lbWNweShwdHIsIF9fcGVyX2NwdV9zdGFydCwgX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCk7CisJCXB0ciArPSBzaXplOworCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgKi8KZGlmZiAtLWdpdCBhL21tL2JhY2tpbmctZGV2LmMgYi9tbS9iYWNraW5nLWRldi5jCmluZGV4IGM4NmVkZDIuLjNkM2FjY2IgMTAwNjQ0Ci0tLSBhL21tL2JhY2tpbmctZGV2LmMKKysrIGIvbW0vYmFja2luZy1kZXYuYwpAQCAtMSw4ICsxLDExIEBACiAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KQEAgLTE0LDYgKzE3LDcgQEAKIEVYUE9SVF9TWU1CT0woZGVmYXVsdF91bnBsdWdfaW9fZm4pOwogCiBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8gPSB7CisJLm5hbWUJCT0gImRlZmF1bHQiLAogCS5yYV9wYWdlcwk9IFZNX01BWF9SRUFEQUhFQUQgKiAxMDI0IC8gUEFHRV9DQUNIRV9TSVpFLAogCS5zdGF0ZQkJPSAwLAogCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX01BUF9DT1BZLApAQCAtMjMsNiArMjcsMjQgQEAKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqYmRpX2NsYXNzOwogCisvKgorICogYmRpX2xvY2sgcHJvdGVjdHMgdXBkYXRlcyB0byBiZGlfbGlzdCBhbmQgYmRpX3BlbmRpbmdfbGlzdCwgYXMgd2VsbCBhcworICogcmVhZGVyIHNpZGUgcHJvdGVjdGlvbiBmb3IgYmRpX3BlbmRpbmdfbGlzdC4gYmRpX2xpc3QgaGFzIFJDVSByZWFkZXIgc2lkZQorICogbG9ja2luZy4KKyAqLworREVGSU5FX1NQSU5MT0NLKGJkaV9sb2NrKTsKK0xJU1RfSEVBRChiZGlfbGlzdCk7CitMSVNUX0hFQUQoYmRpX3BlbmRpbmdfbGlzdCk7CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnN5bmNfc3VwZXJzX3RzazsKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBzeW5jX3N1cGVyc190aW1lcjsKKworc3RhdGljIGludCBiZGlfc3luY19zdXBlcnModm9pZCAqKTsKK3N0YXRpYyB2b2lkIHN5bmNfc3VwZXJzX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIHZvaWQgYXJtX3N1cGVyc190aW1lcih2b2lkKTsKKworc3RhdGljIHZvaWQgYmRpX2FkZF9kZWZhdWx0X2ZsdXNoZXJfdGFzayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKTsKKwogI2lmZGVmIENPTkZJR19ERUJVR19GUwogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpAQCAtMzcsOSArNTksMjkgQEAKIHN0YXRpYyBpbnQgYmRpX2RlYnVnX3N0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBtLT5wcml2YXRlOworCXN0cnVjdCBiZGlfd3JpdGViYWNrICp3YjsKIAl1bnNpZ25lZCBsb25nIGJhY2tncm91bmRfdGhyZXNoOwogCXVuc2lnbmVkIGxvbmcgZGlydHlfdGhyZXNoOwogCXVuc2lnbmVkIGxvbmcgYmRpX3RocmVzaDsKKwl1bnNpZ25lZCBsb25nIG5yX2RpcnR5LCBucl9pbywgbnJfbW9yZV9pbywgbnJfd2I7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCS8qCisJICogaW5vZGUgbG9jayBpcyBlbm91Z2ggaGVyZSwgdGhlIGJkaS0+d2JfbGlzdCBpcyBwcm90ZWN0ZWQgYnkKKwkgKiBSQ1Ugb24gdGhlIHJlYWRlciBzaWRlCisJICovCisJbnJfd2IgPSBucl9kaXJ0eSA9IG5yX2lvID0gbnJfbW9yZV9pbyA9IDA7CisJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdiLCAmYmRpLT53Yl9saXN0LCBsaXN0KSB7CisJCW5yX3diKys7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsICZ3Yi0+Yl9kaXJ0eSwgaV9saXN0KQorCQkJbnJfZGlydHkrKzsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJndiLT5iX2lvLCBpX2xpc3QpCisJCQlucl9pbysrOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmd2ItPmJfbW9yZV9pbywgaV9saXN0KQorCQkJbnJfbW9yZV9pbysrOworCX0KKwlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAKIAlnZXRfZGlydHlfbGltaXRzKCZiYWNrZ3JvdW5kX3RocmVzaCwgJmRpcnR5X3RocmVzaCwgJmJkaV90aHJlc2gsIGJkaSk7CiAKQEAgLTQ5LDEyICs5MSwyMiBAQAogCQkgICAiQmRpUmVjbGFpbWFibGU6ICAgJThsdSBrQlxuIgogCQkgICAiQmRpRGlydHlUaHJlc2g6ICAgJThsdSBrQlxuIgogCQkgICAiRGlydHlUaHJlc2g6ICAgICAgJThsdSBrQlxuIgotCQkgICAiQmFja2dyb3VuZFRocmVzaDogJThsdSBrQlxuIiwKKwkJICAgIkJhY2tncm91bmRUaHJlc2g6ICU4bHUga0JcbiIKKwkJICAgIldyaXRlQmFjayB0aHJlYWRzOiU4bHVcbiIKKwkJICAgImJfZGlydHk6ICAgICAgICAgICU4bHVcbiIKKwkJICAgImJfaW86ICAgICAgICAgICAgICU4bHVcbiIKKwkJICAgImJfbW9yZV9pbzogICAgICAgICU4bHVcbiIKKwkJICAgImJkaV9saXN0OiAgICAgICAgICU4dVxuIgorCQkgICAic3RhdGU6ICAgICAgICAgICAgJThseFxuIgorCQkgICAid2JfbWFzazogICAgICAgICAgJThseFxuIgorCQkgICAid2JfbGlzdDogICAgICAgICAgJTh1XG4iCisJCSAgICJ3Yl9jbnQ6ICAgICAgICAgICAlOHVcbiIsCiAJCSAgICh1bnNpZ25lZCBsb25nKSBLKGJkaV9zdGF0KGJkaSwgQkRJX1dSSVRFQkFDSykpLAogCQkgICAodW5zaWduZWQgbG9uZykgSyhiZGlfc3RhdChiZGksIEJESV9SRUNMQUlNQUJMRSkpLAotCQkgICBLKGJkaV90aHJlc2gpLAotCQkgICBLKGRpcnR5X3RocmVzaCksCi0JCSAgIEsoYmFja2dyb3VuZF90aHJlc2gpKTsKKwkJICAgSyhiZGlfdGhyZXNoKSwgSyhkaXJ0eV90aHJlc2gpLAorCQkgICBLKGJhY2tncm91bmRfdGhyZXNoKSwgbnJfd2IsIG5yX2RpcnR5LCBucl9pbywgbnJfbW9yZV9pbywKKwkJICAgIWxpc3RfZW1wdHkoJmJkaS0+YmRpX2xpc3QpLCBiZGktPnN0YXRlLCBiZGktPndiX21hc2ssCisJCSAgICFsaXN0X2VtcHR5KCZiZGktPndiX2xpc3QpLCBiZGktPndiX2NudCk7CiAjdW5kZWYgSwogCiAJcmV0dXJuIDA7CkBAIC0xODUsNiArMjM3LDEzIEBACiB7CiAJaW50IGVycjsKIAorCXN5bmNfc3VwZXJzX3RzayA9IGt0aHJlYWRfcnVuKGJkaV9zeW5jX3N1cGVycywgTlVMTCwgInN5bmNfc3VwZXJzIik7CisJQlVHX09OKElTX0VSUihzeW5jX3N1cGVyc190c2spKTsKKworCWluaXRfdGltZXIoJnN5bmNfc3VwZXJzX3RpbWVyKTsKKwlzZXR1cF90aW1lcigmc3luY19zdXBlcnNfdGltZXIsIHN5bmNfc3VwZXJzX3RpbWVyX2ZuLCAwKTsKKwlhcm1fc3VwZXJzX3RpbWVyKCk7CisKIAllcnIgPSBiZGlfaW5pdCgmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvKTsKIAlpZiAoIWVycikKIAkJYmRpX3JlZ2lzdGVyKCZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8sIE5VTEwsICJkZWZhdWx0Iik7CkBAIC0xOTMsNiArMjUyLDI3OSBAQAogfQogc3Vic3lzX2luaXRjYWxsKGRlZmF1bHRfYmRpX2luaXQpOwogCitzdGF0aWMgdm9pZCBiZGlfd2JfaW5pdChzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IsIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCit7CisJbWVtc2V0KHdiLCAwLCBzaXplb2YoKndiKSk7CisKKwl3Yi0+YmRpID0gYmRpOworCXdiLT5sYXN0X29sZF9mbHVzaCA9IGppZmZpZXM7CisJSU5JVF9MSVNUX0hFQUQoJndiLT5iX2RpcnR5KTsKKwlJTklUX0xJU1RfSEVBRCgmd2ItPmJfaW8pOworCUlOSVRfTElTVF9IRUFEKCZ3Yi0+Yl9tb3JlX2lvKTsKK30KKworc3RhdGljIHZvaWQgYmRpX3Rhc2tfaW5pdChzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLAorCQkJICBzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCisJc3Bpbl9sb2NrKCZiZGktPndiX2xvY2spOworCWxpc3RfYWRkX3RhaWxfcmN1KCZ3Yi0+bGlzdCwgJmJkaS0+d2JfbGlzdCk7CisJc3Bpbl91bmxvY2soJmJkaS0+d2JfbG9jayk7CisKKwl0c2stPmZsYWdzIHw9IFBGX0ZMVVNIRVIgfCBQRl9TV0FQV1JJVEU7CisJc2V0X2ZyZWV6YWJsZSgpOworCisJLyoKKwkgKiBPdXIgcGFyZW50IG1heSBydW4gYXQgYSBkaWZmZXJlbnQgcHJpb3JpdHksIGp1c3Qgc2V0IHVzIHRvIG5vcm1hbAorCSAqLworCXNldF91c2VyX25pY2UodHNrLCAwKTsKK30KKworc3RhdGljIGludCBiZGlfc3RhcnRfZm4odm9pZCAqcHRyKQoreworCXN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiA9IHB0cjsKKwlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gd2ItPmJkaTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBBZGQgdXMgdG8gdGhlIGFjdGl2ZSBiZGlfbGlzdAorCSAqLworCXNwaW5fbG9ja19iaCgmYmRpX2xvY2spOworCWxpc3RfYWRkX3JjdSgmYmRpLT5iZGlfbGlzdCwgJmJkaV9saXN0KTsKKwlzcGluX3VubG9ja19iaCgmYmRpX2xvY2spOworCisJYmRpX3Rhc2tfaW5pdChiZGksIHdiKTsKKworCS8qCisJICogQ2xlYXIgcGVuZGluZyBiaXQgYW5kIHdha2V1cCBhbnlib2R5IHdhaXRpbmcgdG8gdGVhciB1cyBkb3duCisJICovCisJY2xlYXJfYml0KEJESV9wZW5kaW5nLCAmYmRpLT5zdGF0ZSk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwl3YWtlX3VwX2JpdCgmYmRpLT5zdGF0ZSwgQkRJX3BlbmRpbmcpOworCisJcmV0ID0gYmRpX3dyaXRlYmFja190YXNrKHdiKTsKKworCS8qCisJICogUmVtb3ZlIHVzIGZyb20gdGhlIGxpc3QKKwkgKi8KKwlzcGluX2xvY2soJmJkaS0+d2JfbG9jayk7CisJbGlzdF9kZWxfcmN1KCZ3Yi0+bGlzdCk7CisJc3Bpbl91bmxvY2soJmJkaS0+d2JfbG9jayk7CisKKwkvKgorCSAqIEZsdXNoIGFueSB3b3JrIHRoYXQgcmFjZWQgd2l0aCB1cyBleGl0aW5nLiBObyBuZXcgd29yaworCSAqIHdpbGwgYmUgYWRkZWQsIHNpbmNlIHRoaXMgYmRpIGlzbid0IGRpc2NvdmVyYWJsZSBhbnltb3JlLgorCSAqLworCWlmICghbGlzdF9lbXB0eSgmYmRpLT53b3JrX2xpc3QpKQorCQl3Yl9kb193cml0ZWJhY2sod2IsIDEpOworCisJd2ItPnRhc2sgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK2ludCBiZGlfaGFzX2RpcnR5X2lvKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCit7CisJcmV0dXJuIHdiX2hhc19kaXJ0eV9pbygmYmRpLT53Yik7Cit9CisKK3N0YXRpYyB2b2lkIGJkaV9mbHVzaF9pbyhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQoreworCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7CisJCS5iZGkJCQk9IGJkaSwKKwkJLnN5bmNfbW9kZQkJPSBXQl9TWU5DX05PTkUsCisJCS5vbGRlcl90aGFuX3RoaXMJPSBOVUxMLAorCQkucmFuZ2VfY3ljbGljCQk9IDEsCisJCS5ucl90b193cml0ZQkJPSAxMDI0LAorCX07CisKKwl3cml0ZWJhY2tfaW5vZGVzX3diYygmd2JjKTsKK30KKworLyoKKyAqIGt1cGRhdGVkKCkgdXNlZCB0byBkbyB0aGlzLiBXZSBjYW5ub3QgZG8gaXQgZnJvbSB0aGUgYmRpX2Zvcmtlcl90YXNrKCkKKyAqIG9yIHdlIHJpc2sgZGVhZGxvY2tpbmcgb24gLT5zX3Vtb3VudC4gVGhlIGxvbmdlciB0ZXJtIHNvbHV0aW9uIHdvdWxkIGJlCisgKiB0byBpbXBsZW1lbnQgc3luY19zdXBlcnNfYmRpKCkgb3Igc2ltaWxhciBhbmQgc2ltcGx5IGRvIGl0IGZyb20gdGhlCisgKiBiZGkgd3JpdGViYWNrIHRhc2tzIGluZGl2aWR1YWxseS4KKyAqLworc3RhdGljIGludCBiZGlfc3luY19zdXBlcnModm9pZCAqdW51c2VkKQoreworCXNldF91c2VyX25pY2UoY3VycmVudCwgMCk7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZSgpOworCisJCS8qCisJCSAqIERvIHRoaXMgcGVyaW9kaWNhbGx5LCBsaWtlIGt1cGRhdGVkKCkgZGlkIGJlZm9yZS4KKwkJICovCisJCXN5bmNfc3VwZXJzKCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFybV9zdXBlcnNfdGltZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisKKwluZXh0ID0gbXNlY3NfdG9famlmZmllcyhkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwgKiAxMCkgKyBqaWZmaWVzOworCW1vZF90aW1lcigmc3luY19zdXBlcnNfdGltZXIsIHJvdW5kX2ppZmZpZXNfdXAobmV4dCkpOworfQorCitzdGF0aWMgdm9pZCBzeW5jX3N1cGVyc190aW1lcl9mbih1bnNpZ25lZCBsb25nIHVudXNlZCkKK3sKKwl3YWtlX3VwX3Byb2Nlc3Moc3luY19zdXBlcnNfdHNrKTsKKwlhcm1fc3VwZXJzX3RpbWVyKCk7Cit9CisKK3N0YXRpYyBpbnQgYmRpX2Zvcmtlcl90YXNrKHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbWUgPSBwdHI7CisKKwliZGlfdGFza19pbml0KG1lLT5iZGksIG1lKTsKKworCWZvciAoOzspIHsKKwkJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgKnRtcDsKKwkJc3RydWN0IGJkaV93cml0ZWJhY2sgKndiOworCisJCS8qCisJCSAqIFRlbXBvcmFyeSBtZWFzdXJlLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBzZWUKKwkJICogZGlydHkgZGF0YSBvbiB0aGUgZGVmYXVsdCBiYWNraW5nX2Rldl9pbmZvCisJCSAqLworCQlpZiAod2JfaGFzX2RpcnR5X2lvKG1lKSB8fCAhbGlzdF9lbXB0eSgmbWUtPmJkaS0+d29ya19saXN0KSkKKwkJCXdiX2RvX3dyaXRlYmFjayhtZSwgMCk7CisKKwkJc3Bpbl9sb2NrX2JoKCZiZGlfbG9jayk7CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgYW55IGV4aXN0aW5nIGJkaSdzIGhhdmUgZGlydHkgZGF0YSB3aXRob3V0CisJCSAqIGEgdGhyZWFkIHJlZ2lzdGVyZWQuIElmIHNvLCBzZXQgdGhhdCB1cC4KKwkJICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiZGksIHRtcCwgJmJkaV9saXN0LCBiZGlfbGlzdCkgeworCQkJaWYgKGJkaS0+d2IudGFzaykKKwkJCQljb250aW51ZTsKKwkJCWlmIChsaXN0X2VtcHR5KCZiZGktPndvcmtfbGlzdCkgJiYKKwkJCSAgICAhYmRpX2hhc19kaXJ0eV9pbyhiZGkpKQorCQkJCWNvbnRpbnVlOworCisJCQliZGlfYWRkX2RlZmF1bHRfZmx1c2hlcl90YXNrKGJkaSk7CisJCX0KKworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCWlmIChsaXN0X2VtcHR5KCZiZGlfcGVuZGluZ19saXN0KSkgeworCQkJdW5zaWduZWQgbG9uZyB3YWl0OworCisJCQlzcGluX3VubG9ja19iaCgmYmRpX2xvY2spOworCQkJd2FpdCA9IG1zZWNzX3RvX2ppZmZpZXMoZGlydHlfd3JpdGViYWNrX2ludGVydmFsICogMTApOworCQkJc2NoZWR1bGVfdGltZW91dCh3YWl0KTsKKwkJCXRyeV90b19mcmVlemUoKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJCS8qCisJCSAqIFRoaXMgaXMgb3VyIHJlYWwgam9iIC0gY2hlY2sgZm9yIHBlbmRpbmcgZW50cmllcyBpbgorCQkgKiBiZGlfcGVuZGluZ19saXN0LCBhbmQgY3JlYXRlIHRoZSB0YXNrcyB0aGF0IGdvdCBhZGRlZAorCQkgKi8KKwkJYmRpID0gbGlzdF9lbnRyeShiZGlfcGVuZGluZ19saXN0Lm5leHQsIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvLAorCQkJCSBiZGlfbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJmJkaS0+YmRpX2xpc3QpOworCQlzcGluX3VubG9ja19iaCgmYmRpX2xvY2spOworCisJCXdiID0gJmJkaS0+d2I7CisJCXdiLT50YXNrID0ga3RocmVhZF9ydW4oYmRpX3N0YXJ0X2ZuLCB3YiwgImZsdXNoLSVzIiwKKwkJCQkJZGV2X25hbWUoYmRpLT5kZXYpKTsKKwkJLyoKKwkJICogSWYgdGFzayBjcmVhdGlvbiBmYWlscywgdGhlbiByZWFkZCB0aGUgYmRpIHRvCisJCSAqIHRoZSBwZW5kaW5nIGxpc3QgYW5kIGZvcmNlIHdyaXRlb3V0IG9mIHRoZSBiZGkKKwkJICogZnJvbSB0aGlzIGZvcmtlciB0aHJlYWQuIFRoYXQgd2lsbCBmcmVlIHNvbWUgbWVtb3J5CisJCSAqIGFuZCB3ZSBjYW4gdHJ5IGFnYWluLgorCQkgKi8KKwkJaWYgKElTX0VSUih3Yi0+dGFzaykpIHsKKwkJCXdiLT50YXNrID0gTlVMTDsKKworCQkJLyoKKwkJCSAqIEFkZCB0aGlzICdiZGknIHRvIHRoZSBiYWNrLCBzbyB3ZSBnZXQKKwkJCSAqIGEgY2hhbmNlIHRvIGZsdXNoIG90aGVyIGJkaSdzIHRvIGZyZWUKKwkJCSAqIG1lbW9yeS4KKwkJCSAqLworCQkJc3Bpbl9sb2NrX2JoKCZiZGlfbG9jayk7CisJCQlsaXN0X2FkZF90YWlsKCZiZGktPmJkaV9saXN0LCAmYmRpX3BlbmRpbmdfbGlzdCk7CisJCQlzcGluX3VubG9ja19iaCgmYmRpX2xvY2spOworCisJCQliZGlfZmx1c2hfaW8oYmRpKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBiZGlfYWRkX3RvX3BlbmRpbmcoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGk7CisKKwliZGkgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8sIHJjdV9oZWFkKTsKKwlJTklUX0xJU1RfSEVBRCgmYmRpLT5iZGlfbGlzdCk7CisKKwlzcGluX2xvY2soJmJkaV9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZiZGktPmJkaV9saXN0LCAmYmRpX3BlbmRpbmdfbGlzdCk7CisJc3Bpbl91bmxvY2soJmJkaV9sb2NrKTsKKworCS8qCisJICogV2UgYXJlIG5vdyBvbiB0aGUgcGVuZGluZyBsaXN0LCB3YWtlIHVwIGJkaV9mb3JrZXJfdGFzaygpCisJICogdG8gZmluaXNoIHRoZSBqb2IgYW5kIGFkZCB1cyBiYWNrIHRvIHRoZSBhY3RpdmUgYmRpX2xpc3QKKwkgKi8KKwl3YWtlX3VwX3Byb2Nlc3MoZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvLndiLnRhc2spOworfQorCisvKgorICogQWRkIHRoZSBkZWZhdWx0IGZsdXNoZXIgdGFzayB0aGF0IGdldHMgY3JlYXRlZCBmb3IgYW55IGJkaQorICogdGhhdCBoYXMgZGlydHkgZGF0YSBwZW5kaW5nIHdyaXRlb3V0CisgKi8KK3ZvaWQgc3RhdGljIGJkaV9hZGRfZGVmYXVsdF9mbHVzaGVyX3Rhc2soc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKK3sKKwlpZiAoIWJkaV9jYXBfd3JpdGViYWNrX2RpcnR5KGJkaSkpCisJCXJldHVybjsKKworCWlmIChXQVJOX09OKCF0ZXN0X2JpdChCRElfcmVnaXN0ZXJlZCwgJmJkaS0+c3RhdGUpKSkgeworCQlwcmludGsoS0VSTl9FUlIgImJkaSAlcC8lcyBpcyBub3QgcmVnaXN0ZXJlZCFcbiIsCisJCQkJCQkJYmRpLCBiZGktPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBDaGVjayB3aXRoIHRoZSBoZWxwZXIgd2hldGhlciB0byBwcm9jZWVkIGFkZGluZyBhIHRhc2suIFdpbGwgb25seQorCSAqIGFib3J0IGlmIHdlIHR3byBvciBtb3JlIHNpbXVsdGFub3VzIGNhbGxzIHRvCisJICogYmRpX2FkZF9kZWZhdWx0X2ZsdXNoZXJfdGFzaygpIG9jY3VyZWQsIGZ1cnRoZXIgYWRkaXRpb25zIHdpbGwgYmxvY2sKKwkgKiB3YWl0aW5nIGZvciBwcmV2aW91cyBhZGRpdGlvbnMgdG8gZmluaXNoLgorCSAqLworCWlmICghdGVzdF9hbmRfc2V0X2JpdChCRElfcGVuZGluZywgJmJkaS0+c3RhdGUpKSB7CisJCWxpc3RfZGVsX3JjdSgmYmRpLT5iZGlfbGlzdCk7CisKKwkJLyoKKwkJICogV2UgbXVzdCB3YWl0IGZvciB0aGUgY3VycmVudCBSQ1UgcGVyaW9kIHRvIGVuZCBiZWZvcmUKKwkJICogbW92aW5nIHRvIHRoZSBwZW5kaW5nIGxpc3QuIFNvIHNjaGVkdWxlIHRoYXQgb3BlcmF0aW9uCisJCSAqIGZyb20gYW4gUkNVIGNhbGxiYWNrLgorCQkgKi8KKwkJY2FsbF9yY3UoJmJkaS0+cmN1X2hlYWQsIGJkaV9hZGRfdG9fcGVuZGluZyk7CisJfQorfQorCisvKgorICogUmVtb3ZlIGJkaSBmcm9tIGJkaV9saXN0LCBhbmQgZW5zdXJlIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIHZpc2libGUKKyAqLworc3RhdGljIHZvaWQgYmRpX3JlbW92ZV9mcm9tX2xpc3Qoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKK3sKKwlzcGluX2xvY2tfYmgoJmJkaV9sb2NrKTsKKwlsaXN0X2RlbF9yY3UoJmJkaS0+YmRpX2xpc3QpOworCXNwaW5fdW5sb2NrX2JoKCZiZGlfbG9jayk7CisKKwlzeW5jaHJvbml6ZV9yY3UoKTsKK30KKwogaW50IGJkaV9yZWdpc3RlcihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCiAJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewpAQCAtMjExLDkgKzU0MywzMyBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JYmRpLT5kZXYgPSBkZXY7Ci0JYmRpX2RlYnVnX3JlZ2lzdGVyKGJkaSwgZGV2X25hbWUoZGV2KSk7CisJc3Bpbl9sb2NrX2JoKCZiZGlfbG9jayk7CisJbGlzdF9hZGRfdGFpbF9yY3UoJmJkaS0+YmRpX2xpc3QsICZiZGlfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJmJkaV9sb2NrKTsKIAorCWJkaS0+ZGV2ID0gZGV2OworCisJLyoKKwkgKiBKdXN0IHN0YXJ0IHRoZSBmb3JrZXIgdGhyZWFkIGZvciBvdXIgZGVmYXVsdCBiYWNraW5nX2Rldl9pbmZvLAorCSAqIGFuZCBhZGQgb3RoZXIgYmRpJ3MgdG8gdGhlIGxpc3QuIFRoZXkgd2lsbCBnZXQgYSB0aHJlYWQgY3JlYXRlZAorCSAqIG9uLWRlbWFuZCB3aGVuIHRoZXkgbmVlZCBpdC4KKwkgKi8KKwlpZiAoYmRpX2NhcF9mbHVzaF9mb3JrZXIoYmRpKSkgeworCQlzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IgPSAmYmRpLT53YjsKKworCQl3Yi0+dGFzayA9IGt0aHJlYWRfcnVuKGJkaV9mb3JrZXJfdGFzaywgd2IsICJiZGktJXMiLAorCQkJCQkJZGV2X25hbWUoZGV2KSk7CisJCWlmIChJU19FUlIod2ItPnRhc2spKSB7CisJCQl3Yi0+dGFzayA9IE5VTEw7CisJCQlyZXQgPSAtRU5PTUVNOworCisJCQliZGlfcmVtb3ZlX2Zyb21fbGlzdChiZGkpOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJYmRpX2RlYnVnX3JlZ2lzdGVyKGJkaSwgZGV2X25hbWUoZGV2KSk7CisJc2V0X2JpdChCRElfcmVnaXN0ZXJlZCwgJmJkaS0+c3RhdGUpOwogZXhpdDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjI1LDkgKzU4MSw0MCBAQAogfQogRVhQT1JUX1NZTUJPTChiZGlfcmVnaXN0ZXJfZGV2KTsKIAorLyoKKyAqIFJlbW92ZSBiZGkgZnJvbSB0aGUgZ2xvYmFsIGxpc3QgYW5kIHNodXRkb3duIGFueSB0aHJlYWRzIHdlIGhhdmUgcnVubmluZworICovCitzdGF0aWMgdm9pZCBiZGlfd2Jfc2h1dGRvd24oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKK3sKKwlzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2I7CisKKwlpZiAoIWJkaV9jYXBfd3JpdGViYWNrX2RpcnR5KGJkaSkpCisJCXJldHVybjsKKworCS8qCisJICogSWYgc2V0dXAgaXMgcGVuZGluZywgd2FpdCBmb3IgdGhhdCB0byBjb21wbGV0ZSBmaXJzdAorCSAqLworCXdhaXRfb25fYml0KCZiZGktPnN0YXRlLCBCRElfcGVuZGluZywgYmRpX3NjaGVkX3dhaXQsCisJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBub2JvZHkgZmluZHMgdXMgb24gdGhlIGJkaV9saXN0IGFueW1vcmUKKwkgKi8KKwliZGlfcmVtb3ZlX2Zyb21fbGlzdChiZGkpOworCisJLyoKKwkgKiBGaW5hbGx5LCBraWxsIHRoZSBrZXJuZWwgdGhyZWFkcy4gV2UgZG9uJ3QgbmVlZCB0byBiZSBSQ1UKKwkgKiBzYWZlIGFueW1vcmUsIHNpbmNlIHRoZSBiZGkgaXMgZ29uZSBmcm9tIHZpc2liaWxpdHkuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3YiwgJmJkaS0+d2JfbGlzdCwgbGlzdCkKKwkJa3RocmVhZF9zdG9wKHdiLT50YXNrKTsKK30KKwogdm9pZCBiZGlfdW5yZWdpc3RlcihzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQogewogCWlmIChiZGktPmRldikgeworCQlpZiAoIWJkaV9jYXBfZmx1c2hfZm9ya2VyKGJkaSkpCisJCQliZGlfd2Jfc2h1dGRvd24oYmRpKTsKIAkJYmRpX2RlYnVnX3VucmVnaXN0ZXIoYmRpKTsKIAkJZGV2aWNlX3VucmVnaXN0ZXIoYmRpLT5kZXYpOwogCQliZGktPmRldiA9IE5VTEw7CkBAIC0yMzcsMTQgKzYyNCwyNiBAQAogCiBpbnQgYmRpX2luaXQoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKIHsKLQlpbnQgaTsKLQlpbnQgZXJyOworCWludCBpLCBlcnI7CiAKIAliZGktPmRldiA9IE5VTEw7CiAKIAliZGktPm1pbl9yYXRpbyA9IDA7CiAJYmRpLT5tYXhfcmF0aW8gPSAxMDA7CiAJYmRpLT5tYXhfcHJvcF9mcmFjID0gUFJPUF9GUkFDX0JBU0U7CisJc3Bpbl9sb2NrX2luaXQoJmJkaS0+d2JfbG9jayk7CisJSU5JVF9SQ1VfSEVBRCgmYmRpLT5yY3VfaGVhZCk7CisJSU5JVF9MSVNUX0hFQUQoJmJkaS0+YmRpX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZiZGktPndiX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZiZGktPndvcmtfbGlzdCk7CisKKwliZGlfd2JfaW5pdCgmYmRpLT53YiwgYmRpKTsKKworCS8qCisJICogSnVzdCBvbmUgdGhyZWFkIHN1cHBvcnQgZm9yIG5vdywgaGFyZCBjb2RlIG1hc2sgYW5kIGNvdW50CisJICovCisJYmRpLT53Yl9tYXNrID0gMTsKKwliZGktPndiX2NudCA9IDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfQkRJX1NUQVRfSVRFTVM7IGkrKykgewogCQllcnIgPSBwZXJjcHVfY291bnRlcl9pbml0KCZiZGktPmJkaV9zdGF0W2ldLCAwKTsKQEAgLTI2OSw2ICs2NjgsMjAgQEAKIHsKIAlpbnQgaTsKIAorCS8qCisJICogU3BsaWNlIG91ciBlbnRyaWVzIHRvIHRoZSBkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8sIGlmIHRoaXMKKwkgKiBiZGkgZGlzYXBwZWFycworCSAqLworCWlmIChiZGlfaGFzX2RpcnR5X2lvKGJkaSkpIHsKKwkJc3RydWN0IGJkaV93cml0ZWJhY2sgKmRzdCA9ICZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8ud2I7CisKKwkJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKKwkJbGlzdF9zcGxpY2UoJmJkaS0+d2IuYl9kaXJ0eSwgJmRzdC0+Yl9kaXJ0eSk7CisJCWxpc3Rfc3BsaWNlKCZiZGktPndiLmJfaW8sICZkc3QtPmJfaW8pOworCQlsaXN0X3NwbGljZSgmYmRpLT53Yi5iX21vcmVfaW8sICZkc3QtPmJfbW9yZV9pbyk7CisJCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKKwl9CisKIAliZGlfdW5yZWdpc3RlcihiZGkpOwogCiAJZm9yIChpID0gMDsgaSA8IE5SX0JESV9TVEFUX0lURU1TOyBpKyspCmRpZmYgLS1naXQgYS9tbS9ib290bWVtLmMgYi9tbS9ib290bWVtLmMKaW5kZXggNzAxNzQwYy4uNTU1ZDVkMiAxMDA2NDQKLS0tIGEvbW0vYm9vdG1lbS5jCisrKyBiL21tL2Jvb3RtZW0uYwpAQCAtNTIxLDcgKzUyMSwxMSBAQAogCQlyZWdpb24gPSBwaHlzX3RvX3ZpcnQoUEZOX1BIWVMoYmRhdGEtPm5vZGVfbWluX3BmbikgKwogCQkJCXN0YXJ0X29mZik7CiAJCW1lbXNldChyZWdpb24sIDAsIHNpemUpOwotCQlrbWVtbGVha19hbGxvYyhyZWdpb24sIHNpemUsIDEsIDApOworCQkvKgorCQkgKiBUaGUgbWluX2NvdW50IGlzIHNldCB0byAwIHNvIHRoYXQgYm9vdG1lbSBhbGxvY2F0ZWQgYmxvY2tzCisJCSAqIGFyZSBuZXZlciByZXBvcnRlZCBhcyBsZWFrcy4KKwkJICovCisJCWttZW1sZWFrX2FsbG9jKHJlZ2lvbiwgc2l6ZSwgMCwgMCk7CiAJCXJldHVybiByZWdpb247CiAJfQogCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggY2NlYTNiNi4uZGQ1MWM2OGUgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTM5LDExICszOSwxMCBAQAogLyoKICAqIEZJWE1FOiByZW1vdmUgYWxsIGtub3dsZWRnZSBvZiB0aGUgYnVmZmVyIGxheWVyIGZyb20gdGhlIGNvcmUgVk0KICAqLwotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+IC8qIGZvciBnZW5lcmljX29zeW5jX2lub2RlICovCisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4gLyogZm9yIHRyeV90b19mcmVlX2J1ZmZlcnMgKi8KIAogI2luY2x1ZGUgPGFzbS9tbWFuLmg+CiAKLQogLyoKICAqIFNoYXJlZCBtYXBwaW5ncyBpbXBsZW1lbnRlZCAzMC4xMS4xOTk0LiBJdCdzIG5vdCBmdWxseSB3b3JraW5nIHlldCwKICAqIHRob3VnaC4KQEAgLTMwNyw2OCArMzA2LDI0IEBACiB9CiAKIC8qKgotICogc3luY19wYWdlX3JhbmdlIC0gd3JpdGUgYW5kIHdhaXQgb24gYWxsIHBhZ2VzIGluIHRoZSBwYXNzZWQgcmFuZ2UKLSAqIEBpbm9kZToJdGFyZ2V0IGlub2RlCi0gKiBAbWFwcGluZzoJdGFyZ2V0IGFkZHJlc3Nfc3BhY2UKLSAqIEBwb3M6CWJlZ2lubmluZyBvZmZzZXQgaW4gcGFnZXMgdG8gd3JpdGUKLSAqIEBjb3VudDoJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCisgKiBmaWxlbWFwX2ZkYXRhd2FpdF9yYW5nZSAtIHdhaXQgZm9yIGFsbCB1bmRlci13cml0ZWJhY2sgcGFnZXMgdG8gY29tcGxldGUgaW4gYSBnaXZlbiByYW5nZQorICogQG1hcHBpbmc6IGFkZHJlc3Mgc3BhY2Ugc3RydWN0dXJlIHRvIHdhaXQgZm9yCisgKiBAc3RhcnQ6CW9mZnNldCBpbiBieXRlcyB3aGVyZSB0aGUgcmFuZ2Ugc3RhcnRzCisgKiBAZW5kOglvZmZzZXQgaW4gYnl0ZXMgd2hlcmUgdGhlIHJhbmdlIGVuZHMgKGluY2x1c2l2ZSkKICAqCi0gKiBXcml0ZSBhbmQgd2FpdCB1cG9uIGFsbCB0aGUgcGFnZXMgaW4gdGhlIHBhc3NlZCByYW5nZS4gIFRoaXMgaXMgYSAiZGF0YQotICogaW50ZWdyaXR5IiBvcGVyYXRpb24uICBJdCB3YWl0cyB1cG9uIGluLWZsaWdodCB3cml0ZW91dCBiZWZvcmUgc3RhcnRpbmcgYW5kCi0gKiB3YWl0aW5nIHVwb24gbmV3IHdyaXRlb3V0LiAgSWYgdGhlcmUgd2FzIGFuIElPIGVycm9yLCByZXR1cm4gaXQuCisgKiBXYWxrIHRoZSBsaXN0IG9mIHVuZGVyLXdyaXRlYmFjayBwYWdlcyBvZiB0aGUgZ2l2ZW4gYWRkcmVzcyBzcGFjZQorICogaW4gdGhlIGdpdmVuIHJhbmdlIGFuZCB3YWl0IGZvciBhbGwgb2YgdGhlbS4KICAqCi0gKiBXZSBuZWVkIHRvIHJlLXRha2UgaV9tdXRleCBkdXJpbmcgdGhlIGdlbmVyaWNfb3N5bmNfaW5vZGUgbGlzdCB3YWxrIGJlY2F1c2UKLSAqIGl0IGlzIG90aGVyd2lzZSBsaXZlbG9ja2FibGUuCisgKiBUaGlzIGlzIGp1c3QgYSBzaW1wbGUgd3JhcHBlciBzbyB0aGF0IGNhbGxlcnMgZG9uJ3QgaGF2ZSB0byBjb252ZXJ0IG9mZnNldHMKKyAqIHRvIHBhZ2UgaW5kZXhlcyB0aGVtc2VsdmVzCiAgKi8KLWludCBzeW5jX3BhZ2VfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQlsb2ZmX3QgcG9zLCBsb2ZmX3QgY291bnQpCitpbnQgZmlsZW1hcF9mZGF0YXdhaXRfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBzdGFydCwKKwkJCSAgICBsb2ZmX3QgZW5kKQogewotCXBnb2ZmX3Qgc3RhcnQgPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQlwZ29mZl90IGVuZCA9IChwb3MgKyBjb3VudCAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7Ci0JaW50IHJldDsKLQotCWlmICghbWFwcGluZ19jYXBfd3JpdGViYWNrX2RpcnR5KG1hcHBpbmcpIHx8ICFjb3VudCkKLQkJcmV0dXJuIDA7Ci0JcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKG1hcHBpbmcsIHBvcywgcG9zICsgY291bnQgLSAxKTsKLQlpZiAocmV0ID09IDApIHsKLQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQlyZXQgPSBnZW5lcmljX29zeW5jX2lub2RlKGlub2RlLCBtYXBwaW5nLCBPU1lOQ19NRVRBREFUQSk7Ci0JCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCX0KLQlpZiAocmV0ID09IDApCi0JCXJldCA9IHdhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UobWFwcGluZywgc3RhcnQsIGVuZCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gd2FpdF9vbl9wYWdlX3dyaXRlYmFja19yYW5nZShtYXBwaW5nLCBzdGFydCA+PiBQQUdFX0NBQ0hFX1NISUZULAorCQkJCQkgICAgZW5kID4+IFBBR0VfQ0FDSEVfU0hJRlQpOwogfQotRVhQT1JUX1NZTUJPTChzeW5jX3BhZ2VfcmFuZ2UpOwotCi0vKioKLSAqIHN5bmNfcGFnZV9yYW5nZV9ub2xvY2sgLSB3cml0ZSAmIHdhaXQgb24gYWxsIHBhZ2VzIGluIHRoZSBwYXNzZWQgcmFuZ2Ugd2l0aG91dCBsb2NraW5nCi0gKiBAaW5vZGU6CXRhcmdldCBpbm9kZQotICogQG1hcHBpbmc6CXRhcmdldCBhZGRyZXNzX3NwYWNlCi0gKiBAcG9zOgliZWdpbm5pbmcgb2Zmc2V0IGluIHBhZ2VzIHRvIHdyaXRlCi0gKiBAY291bnQ6CW51bWJlciBvZiBieXRlcyB0byB3cml0ZQotICoKLSAqIE5vdGU6IEhvbGRpbmcgaV9tdXRleCBhY3Jvc3Mgc3luY19wYWdlX3JhbmdlX25vbG9jaygpIGlzIG5vdCBhIGdvb2QgaWRlYQotICogYXMgaXQgZm9yY2VzIE9fU1lOQyB3cml0ZXJzIHRvIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc2FtZSBmaWxlCi0gKiB0byBiZSBzZXJpYWxpc2VkIHJpZ2h0IHVudGlsIGlvIGNvbXBsZXRpb24uCi0gKi8KLWludCBzeW5jX3BhZ2VfcmFuZ2Vfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJICAgbG9mZl90IHBvcywgbG9mZl90IGNvdW50KQotewotCXBnb2ZmX3Qgc3RhcnQgPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQlwZ29mZl90IGVuZCA9IChwb3MgKyBjb3VudCAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7Ci0JaW50IHJldDsKLQotCWlmICghbWFwcGluZ19jYXBfd3JpdGViYWNrX2RpcnR5KG1hcHBpbmcpIHx8ICFjb3VudCkKLQkJcmV0dXJuIDA7Ci0JcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKG1hcHBpbmcsIHBvcywgcG9zICsgY291bnQgLSAxKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IGdlbmVyaWNfb3N5bmNfaW5vZGUoaW5vZGUsIG1hcHBpbmcsIE9TWU5DX01FVEFEQVRBKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IHdhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UobWFwcGluZywgc3RhcnQsIGVuZCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woc3luY19wYWdlX3JhbmdlX25vbG9jayk7CitFWFBPUlRfU1lNQk9MKGZpbGVtYXBfZmRhdGF3YWl0X3JhbmdlKTsKIAogLyoqCiAgKiBmaWxlbWFwX2ZkYXRhd2FpdCAtIHdhaXQgZm9yIGFsbCB1bmRlci13cml0ZWJhY2sgcGFnZXMgdG8gY29tcGxldGUKQEAgLTIxNjcsMjAgKzIxMjIsNyBAQAogCQl9CiAJCSpwcG9zID0gZW5kOwogCX0KLQotCS8qCi0JICogU3luYyB0aGUgZnMgbWV0YWRhdGEgYnV0IG5vdCB0aGUgbWlub3IgaW5vZGUgY2hhbmdlcyBhbmQKLQkgKiBvZiBjb3Vyc2Ugbm90IHRoZSBkYXRhIGFzIHdlIGRpZCBkaXJlY3QgRE1BIGZvciB0aGUgSU8uCi0JICogaV9tdXRleCBpcyBoZWxkLCB3aGljaCBwcm90ZWN0cyBnZW5lcmljX29zeW5jX2lub2RlKCkgZnJvbQotCSAqIGxpdmVsb2NraW5nLiAgQUlPIE9fRElSRUNUIG9wcyBhdHRlbXB0IHRvIHN5bmMgbWV0YWRhdGEgaGVyZS4KLQkgKi8KIG91dDoKLQlpZiAoKHdyaXR0ZW4gPj0gMCB8fCB3cml0dGVuID09IC1FSU9DQlFVRVVFRCkgJiYKLQkgICAgKChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKLQkJaW50IGVyciA9IGdlbmVyaWNfb3N5bmNfaW5vZGUoaW5vZGUsIG1hcHBpbmcsIE9TWU5DX01FVEFEQVRBKTsKLQkJaWYgKGVyciA8IDApCi0JCQl3cml0dGVuID0gZXJyOwotCX0KIAlyZXR1cm4gd3JpdHRlbjsKIH0KIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19maWxlX2RpcmVjdF93cml0ZSk7CkBAIC0yMzEyLDggKzIyNTQsNiBAQAogewogCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKLQljb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zICphX29wcyA9IG1hcHBpbmctPmFfb3BzOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwogCXNzaXplX3Qgc3RhdHVzOwogCXN0cnVjdCBpb3ZfaXRlciBpOwogCkBAIC0yMzIzLDE2ICsyMjYzLDYgQEAKIAlpZiAobGlrZWx5KHN0YXR1cyA+PSAwKSkgewogCQl3cml0dGVuICs9IHN0YXR1czsKIAkJKnBwb3MgPSBwb3MgKyBzdGF0dXM7Ci0KLQkJLyoKLQkJICogRm9yIG5vdywgd2hlbiB0aGUgdXNlciBhc2tzIGZvciBPX1NZTkMsIHdlJ2xsIGFjdHVhbGx5IGdpdmUKLQkJICogT19EU1lOQwotCQkgKi8KLQkJaWYgKHVubGlrZWx5KChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKLQkJCWlmICghYV9vcHMtPndyaXRlcGFnZSB8fCAhaXNfc3luY19raW9jYihpb2NiKSkKLQkJCQlzdGF0dXMgPSBnZW5lcmljX29zeW5jX2lub2RlKGlub2RlLCBtYXBwaW5nLAotCQkJCQkJT1NZTkNfTUVUQURBVEF8T1NZTkNfREFUQSk7Ci0JCX0KICAgCX0KIAkKIAkvKgpAQCAtMjM0OCw5ICsyMjc4LDI3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV9idWZmZXJlZF93cml0ZSk7CiAKLXN0YXRpYyBzc2l6ZV90Ci1fX2dlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCi0JCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBwb3MpCisvKioKKyAqIF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZSAtIHdyaXRlIGRhdGEgdG8gYSBmaWxlCisgKiBAaW9jYjoJSU8gc3RhdGUgc3RydWN0dXJlIChmaWxlLCBvZmZzZXQsIGV0Yy4pCisgKiBAaW92Ogl2ZWN0b3Igd2l0aCBkYXRhIHRvIHdyaXRlCisgKiBAbnJfc2VnczoJbnVtYmVyIG9mIHNlZ21lbnRzIGluIHRoZSB2ZWN0b3IKKyAqIEBwcG9zOglwb3NpdGlvbiB3aGVyZSB0byB3cml0ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhbGwgdGhlIHdvcmsgbmVlZGVkIGZvciBhY3R1YWxseSB3cml0aW5nIGRhdGEgdG8gYQorICogZmlsZS4gSXQgZG9lcyBhbGwgYmFzaWMgY2hlY2tzLCByZW1vdmVzIFNVSUQgZnJvbSB0aGUgZmlsZSwgdXBkYXRlcworICogbW9kaWZpY2F0aW9uIHRpbWVzIGFuZCBjYWxscyBwcm9wZXIgc3Vicm91dGluZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UKKyAqIGRvIGRpcmVjdCBJTyBvciBhIHN0YW5kYXJkIGJ1ZmZlcmVkIHdyaXRlLgorICoKKyAqIEl0IGV4cGVjdHMgaV9tdXRleCB0byBiZSBncmFiYmVkIHVubGVzcyB3ZSB3b3JrIG9uIGEgYmxvY2sgZGV2aWNlIG9yIHNpbWlsYXIKKyAqIG9iamVjdCB3aGljaCBkb2VzIG5vdCBuZWVkIGxvY2tpbmcgYXQgYWxsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyAqbm90KiB0YWtlIGNhcmUgb2Ygc3luY2luZyBkYXRhIGluIGNhc2Ugb2YgT19TWU5DIHdyaXRlLgorICogQSBjYWxsZXIgaGFzIHRvIGhhbmRsZSBpdC4gVGhpcyBpcyBtYWlubHkgZHVlIHRvIHRoZSBmYWN0IHRoYXQgd2Ugd2FudCB0bworICogYXZvaWQgc3luY2luZyB1bmRlciBpX211dGV4LgorICovCitzc2l6ZV90IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCSB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiBtYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOwpAQCAtMjQ0Nyw1MSArMjM5NSwzNyBAQAogCWN1cnJlbnQtPmJhY2tpbmdfZGV2X2luZm8gPSBOVUxMOwogCXJldHVybiB3cml0dGVuID8gd3JpdHRlbiA6IGVycjsKIH0KK0VYUE9SVF9TWU1CT0woX19nZW5lcmljX2ZpbGVfYWlvX3dyaXRlKTsKIAotc3NpemVfdCBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlX25vbG9jayhzdHJ1Y3Qga2lvY2IgKmlvY2IsCi0JCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCi17Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwotCXNzaXplX3QgcmV0OwotCi0JQlVHX09OKGlvY2ItPmtpX3BvcyAhPSBwb3MpOwotCi0JcmV0ID0gX19nZW5lcmljX2ZpbGVfYWlvX3dyaXRlX25vbG9jayhpb2NiLCBpb3YsIG5yX3NlZ3MsCi0JCQkmaW9jYi0+a2lfcG9zKTsKLQotCWlmIChyZXQgPiAwICYmICgoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7Ci0JCXNzaXplX3QgZXJyOwotCi0JCWVyciA9IHN5bmNfcGFnZV9yYW5nZV9ub2xvY2soaW5vZGUsIG1hcHBpbmcsIHBvcywgcmV0KTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXQgPSBlcnI7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKTsKLQorLyoqCisgKiBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlIC0gd3JpdGUgZGF0YSB0byBhIGZpbGUKKyAqIEBpb2NiOglJTyBzdGF0ZSBzdHJ1Y3R1cmUKKyAqIEBpb3Y6CXZlY3RvciB3aXRoIGRhdGEgdG8gd3JpdGUKKyAqIEBucl9zZWdzOgludW1iZXIgb2Ygc2VnbWVudHMgaW4gdGhlIHZlY3RvcgorICogQHBvczoJcG9zaXRpb24gaW4gZmlsZSB3aGVyZSB0byB3cml0ZQorICoKKyAqIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBfX2dlbmVyaWNfZmlsZV9haW9fd3JpdGUoKSB0byBiZSB1c2VkIGJ5IG1vc3QKKyAqIGZpbGVzeXN0ZW1zLiBJdCB0YWtlcyBjYXJlIG9mIHN5bmNpbmcgdGhlIGZpbGUgaW4gY2FzZSBvZiBPX1NZTkMgZmlsZQorICogYW5kIGFjcXVpcmVzIGlfbXV0ZXggYXMgbmVlZGVkLgorICovCiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwogCXNzaXplX3QgcmV0OwogCiAJQlVHX09OKGlvY2ItPmtpX3BvcyAhPSBwb3MpOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCXJldCA9IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soaW9jYiwgaW92LCBucl9zZWdzLAotCQkJJmlvY2ItPmtpX3Bvcyk7CisJcmV0ID0gX19nZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgJmlvY2ItPmtpX3Bvcyk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlpZiAocmV0ID4gMCAmJiAoKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkgeworCWlmIChyZXQgPiAwIHx8IHJldCA9PSAtRUlPQ0JRVUVVRUQpIHsKIAkJc3NpemVfdCBlcnI7CiAKLQkJZXJyID0gc3luY19wYWdlX3JhbmdlKGlub2RlLCBtYXBwaW5nLCBwb3MsIHJldCk7Ci0JCWlmIChlcnIgPCAwKQorCQllcnIgPSBnZW5lcmljX3dyaXRlX3N5bmMoZmlsZSwgcG9zLCByZXQpOworCQlpZiAoZXJyIDwgMCAmJiByZXQgPiAwKQogCQkJcmV0ID0gZXJyOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IGNhZmRjZWUuLmIxNmQ2MzYgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYworKysgYi9tbS9odWdldGxiLmMKQEAgLTIzNCw2ICsyMzQsNyBAQAogCiAJcmV0dXJuIDFVTCA8PCAoaHN0YXRlLT5vcmRlciArIFBBR0VfU0hJRlQpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodm1hX2tlcm5lbF9wYWdlc2l6ZSk7CiAKIC8qCiAgKiBSZXR1cm4gdGhlIHBhZ2Ugc2l6ZSBiZWluZyB1c2VkIGJ5IHRoZSBNTVUgdG8gYmFjayBhIFZNQS4gSW4gdGhlIG1ham9yaXR5CmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay10ZXN0LmMgYi9tbS9rbWVtbGVhay10ZXN0LmMKaW5kZXggZDUyOTJmYy4uMTc3YTUxNiAxMDA2NDQKLS0tIGEvbW0va21lbWxlYWstdGVzdC5jCisrKyBiL21tL2ttZW1sZWFrLXRlc3QuYwpAQCAtMzYsNyArMzYsNyBAQAogfTsKIAogc3RhdGljIExJU1RfSEVBRCh0ZXN0X2xpc3QpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHZvaWQgKiwgdGVzdF9wb2ludGVyKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh2b2lkICosIGttZW1sZWFrX3Rlc3RfcG9pbnRlcik7CiAKIC8qCiAgKiBTb21lIHZlcnkgc2ltcGxlIHRlc3RpbmcuIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgZXh0ZW5kZWQgZm9yCkBAIC04Niw5ICs4Niw5IEBACiAJfQogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJcGVyX2NwdSh0ZXN0X3BvaW50ZXIsIGkpID0ga21hbGxvYygxMjksIEdGUF9LRVJORUwpOworCQlwZXJfY3B1KGttZW1sZWFrX3Rlc3RfcG9pbnRlciwgaSkgPSBrbWFsbG9jKDEyOSwgR0ZQX0tFUk5FTCk7CiAJCXByX2luZm8oImttZW1sZWFrOiBrbWFsbG9jKDEyOSkgPSAlcFxuIiwKLQkJCXBlcl9jcHUodGVzdF9wb2ludGVyLCBpKSk7CisJCQlwZXJfY3B1KGttZW1sZWFrX3Rlc3RfcG9pbnRlciwgaSkpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmMKaW5kZXggNDg3MjY3My4uNGVhNDUxMCAxMDA2NDQKLS0tIGEvbW0va21lbWxlYWsuYworKysgYi9tbS9rbWVtbGVhay5jCkBAIC05MiwxMSArOTIsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCisjaW5jbHVkZSA8bGludXgva21lbWNoZWNrLmg+CiAjaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KIAogLyoKQEAgLTEwNyw2ICsxMDksNyBAQAogI2RlZmluZSBTRUNTX0ZJUlNUX1NDQU4JCTYwCS8qIGRlbGF5IGJlZm9yZSB0aGUgZmlyc3Qgc2NhbiAqLwogI2RlZmluZSBTRUNTX1NDQU5fV0FJVAkJNjAwCS8qIHN1YnNlcXVlbnQgYXV0byBzY2FubmluZyBkZWxheSAqLwogI2RlZmluZSBHUkFZX0xJU1RfUEFTU0VTCTI1CS8qIG1heGltdW0gbnVtYmVyIG9mIGdyYXkgbGlzdCBzY2FucyAqLworI2RlZmluZSBNQVhfU0NBTl9TSVpFCQk0MDk2CS8qIG1heGltdW0gc2l6ZSBvZiBhIHNjYW5uZWQgYmxvY2sgKi8KIAogI2RlZmluZSBCWVRFU19QRVJfUE9JTlRFUglzaXplb2Yodm9pZCAqKQogCkBAIC0xMjAsNiArMTIzLDkgQEAKIAlzaXplX3QgbGVuZ3RoOwogfTsKIAorI2RlZmluZSBLTUVNTEVBS19HUkVZCTAKKyNkZWZpbmUgS01FTUxFQUtfQkxBQ0sJLTEKKwogLyoKICAqIFN0cnVjdHVyZSBob2xkaW5nIHRoZSBtZXRhZGF0YSBmb3IgZWFjaCBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrLgogICogTW9kaWZpY2F0aW9ucyB0byBzdWNoIG9iamVjdHMgc2hvdWxkIGJlIG1hZGUgd2hpbGUgaG9sZGluZyB0aGUKQEAgLTE2MSw2ICsxNjcsMTUgQEAKIC8qIGZsYWcgc2V0IG9uIG5ld2x5IGFsbG9jYXRlZCBvYmplY3RzICovCiAjZGVmaW5lIE9CSkVDVF9ORVcJCSgxIDw8IDMpCiAKKy8qIG51bWJlciBvZiBieXRlcyB0byBwcmludCBwZXIgbGluZTsgbXVzdCBiZSAxNiBvciAzMiAqLworI2RlZmluZSBIRVhfUk9XX1NJWkUJCTE2CisvKiBudW1iZXIgb2YgYnl0ZXMgdG8gcHJpbnQgYXQgYSB0aW1lICgxLCAyLCA0LCA4KSAqLworI2RlZmluZSBIRVhfR1JPVVBfU0laRQkJMQorLyogaW5jbHVkZSBBU0NJSSBhZnRlciB0aGUgaGV4IG91dHB1dCAqLworI2RlZmluZSBIRVhfQVNDSUkJCTEKKy8qIG1heCBudW1iZXIgb2YgbGluZXMgdG8gYmUgcHJpbnRlZCAqLworI2RlZmluZSBIRVhfTUFYX0xJTkVTCQkyCisKIC8qIHRoZSBsaXN0IG9mIGFsbCBhbGxvY2F0ZWQgb2JqZWN0cyAqLwogc3RhdGljIExJU1RfSEVBRChvYmplY3RfbGlzdCk7CiAvKiB0aGUgbGlzdCBvZiBncmF5LWNvbG9yZWQgb2JqZWN0cyAoc2VlIGNvbG9yX2dyYXkgY29tbWVudCBiZWxvdykgKi8KQEAgLTIyOCwxMSArMjQzLDE0IEBACiAJaW50IG1pbl9jb3VudDsJCQkvKiBtaW5pbXVtIHJlZmVyZW5jZSBjb3VudCAqLwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwkJLyogc2NhbiBhcmVhIG9mZnNldCAqLwogCXNpemVfdCBsZW5ndGg7CQkJLyogc2NhbiBhcmVhIGxlbmd0aCAqLworCXVuc2lnbmVkIGxvbmcgdHJhY2VbTUFYX1RSQUNFXTsJLyogc3RhY2sgdHJhY2UgKi8KKwl1bnNpZ25lZCBpbnQgdHJhY2VfbGVuOwkJLyogc3RhY2sgdHJhY2UgbGVuZ3RoICovCiB9OwogCiAvKiBlYXJseSBsb2dnaW5nIGJ1ZmZlciBhbmQgY3VycmVudCBwb3NpdGlvbiAqLwotc3RhdGljIHN0cnVjdCBlYXJseV9sb2cgZWFybHlfbG9nW0NPTkZJR19ERUJVR19LTUVNTEVBS19FQVJMWV9MT0dfU0laRV07Ci1zdGF0aWMgaW50IGNydF9lYXJseV9sb2c7CitzdGF0aWMgc3RydWN0IGVhcmx5X2xvZworCWVhcmx5X2xvZ1tDT05GSUdfREVCVUdfS01FTUxFQUtfRUFSTFlfTE9HX1NJWkVdIF9faW5pdGRhdGE7CitzdGF0aWMgaW50IGNydF9lYXJseV9sb2cgX19pbml0ZGF0YTsKIAogc3RhdGljIHZvaWQga21lbWxlYWtfZGlzYWJsZSh2b2lkKTsKIApAQCAtMjU1LDYgKzI3MywzNSBAQAogfSB3aGlsZSAoMCkKIAogLyoKKyAqIFByaW50aW5nIG9mIHRoZSBvYmplY3RzIGhleCBkdW1wIHRvIHRoZSBzZXEgZmlsZS4gVGhlIG51bWJlciBvZiBsaW5lcyB0byBiZQorICogcHJpbnRlZCBpcyBsaW1pdGVkIHRvIEhFWF9NQVhfTElORVMgdG8gcHJldmVudCBzZXEgZmlsZSBzcGFtbWluZy4gVGhlCisgKiBhY3R1YWwgbnVtYmVyIG9mIHByaW50ZWQgYnl0ZXMgZGVwZW5kcyBvbiBIRVhfUk9XX1NJWkUuIEl0IG11c3QgYmUgY2FsbGVkCisgKiB3aXRoIHRoZSBvYmplY3QtPmxvY2sgaGVsZC4KKyAqLworc3RhdGljIHZvaWQgaGV4X2R1bXBfb2JqZWN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLAorCQkJICAgIHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdCkKK3sKKwljb25zdCB1OCAqcHRyID0gKGNvbnN0IHU4ICopb2JqZWN0LT5wb2ludGVyOworCWludCBpLCBsZW4sIHJlbWFpbmluZzsKKwl1bnNpZ25lZCBjaGFyIGxpbmVidWZbSEVYX1JPV19TSVpFICogNV07CisKKwkvKiBsaW1pdCB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIEhFWF9NQVhfTElORVMgKi8KKwlyZW1haW5pbmcgPSBsZW4gPQorCQltaW4ob2JqZWN0LT5zaXplLCAoc2l6ZV90KShIRVhfTUFYX0xJTkVTICogSEVYX1JPV19TSVpFKSk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiAgaGV4IGR1bXAgKGZpcnN0ICVkIGJ5dGVzKTpcbiIsIGxlbik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBIRVhfUk9XX1NJWkUpIHsKKwkJaW50IGxpbmVsZW4gPSBtaW4ocmVtYWluaW5nLCBIRVhfUk9XX1NJWkUpOworCisJCXJlbWFpbmluZyAtPSBIRVhfUk9XX1NJWkU7CisJCWhleF9kdW1wX3RvX2J1ZmZlcihwdHIgKyBpLCBsaW5lbGVuLCBIRVhfUk9XX1NJWkUsCisJCQkJICAgSEVYX0dST1VQX1NJWkUsIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKSwKKwkJCQkgICBIRVhfQVNDSUkpOworCQlzZXFfcHJpbnRmKHNlcSwgIiAgICAlc1xuIiwgbGluZWJ1Zik7CisJfQorfQorCisvKgogICogT2JqZWN0IGNvbG9ycywgZW5jb2RlZCB3aXRoIGNvdW50IGFuZCBtaW5fY291bnQ6CiAgKiAtIHdoaXRlIC0gb3JwaGFuIG9iamVjdCwgbm90IGVub3VnaCByZWZlcmVuY2VzIHRvIGl0IChjb3VudCA8IG1pbl9jb3VudCkKICAqIC0gZ3JheSAgLSBub3Qgb3JwaGFuLCBub3QgbWFya2VkIGFzIGZhbHNlIHBvc2l0aXZlIChtaW5fY291bnQgPT0gMCkgb3IKQEAgLTI2NCwxOSArMzExLDIxIEBACiAgKiBOZXdseSBjcmVhdGVkIG9iamVjdHMgZG9uJ3QgaGF2ZSBhbnkgY29sb3IgYXNzaWduZWQgKG9iamVjdC0+Y291bnQgPT0gLTEpCiAgKiBiZWZvcmUgdGhlIG5leHQgbWVtb3J5IHNjYW4gd2hlbiB0aGV5IGJlY29tZSB3aGl0ZS4KICAqLwotc3RhdGljIGludCBjb2xvcl93aGl0ZShjb25zdCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpCitzdGF0aWMgYm9vbCBjb2xvcl93aGl0ZShjb25zdCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpCiB7Ci0JcmV0dXJuIG9iamVjdC0+Y291bnQgIT0gLTEgJiYgb2JqZWN0LT5jb3VudCA8IG9iamVjdC0+bWluX2NvdW50OworCXJldHVybiBvYmplY3QtPmNvdW50ICE9IEtNRU1MRUFLX0JMQUNLICYmCisJCW9iamVjdC0+Y291bnQgPCBvYmplY3QtPm1pbl9jb3VudDsKIH0KIAotc3RhdGljIGludCBjb2xvcl9ncmF5KGNvbnN0IHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdCkKK3N0YXRpYyBib29sIGNvbG9yX2dyYXkoY29uc3Qgc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0KQogewotCXJldHVybiBvYmplY3QtPm1pbl9jb3VudCAhPSAtMSAmJiBvYmplY3QtPmNvdW50ID49IG9iamVjdC0+bWluX2NvdW50OworCXJldHVybiBvYmplY3QtPm1pbl9jb3VudCAhPSBLTUVNTEVBS19CTEFDSyAmJgorCQlvYmplY3QtPmNvdW50ID49IG9iamVjdC0+bWluX2NvdW50OwogfQogCi1zdGF0aWMgaW50IGNvbG9yX2JsYWNrKGNvbnN0IHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdCkKK3N0YXRpYyBib29sIGNvbG9yX2JsYWNrKGNvbnN0IHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdCkKIHsKLQlyZXR1cm4gb2JqZWN0LT5taW5fY291bnQgPT0gLTE7CisJcmV0dXJuIG9iamVjdC0+bWluX2NvdW50ID09IEtNRU1MRUFLX0JMQUNLOwogfQogCiAvKgpAQCAtMjg0LDcgKzMzMyw3IEBACiAgKiBub3QgYmUgZGVsZXRlZCBhbmQgaGF2ZSBhIG1pbmltdW0gYWdlIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcyBjYXVzZWQgYnkKICAqIHBvaW50ZXJzIHRlbXBvcmFyaWx5IHN0b3JlZCBpbiBDUFUgcmVnaXN0ZXJzLgogICovCi1zdGF0aWMgaW50IHVucmVmZXJlbmNlZF9vYmplY3Qoc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0KQorc3RhdGljIGJvb2wgdW5yZWZlcmVuY2VkX29iamVjdChzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QpCiB7CiAJcmV0dXJuIChvYmplY3QtPmZsYWdzICYgT0JKRUNUX0FMTE9DQVRFRCkgJiYgY29sb3Jfd2hpdGUob2JqZWN0KSAmJgogCQl0aW1lX2JlZm9yZV9lcShvYmplY3QtPmppZmZpZXMgKyBqaWZmaWVzX21pbl9hZ2UsCkBAIC0zMDQsNiArMzUzLDcgQEAKIAkJICAgb2JqZWN0LT5wb2ludGVyLCBvYmplY3QtPnNpemUpOwogCXNlcV9wcmludGYoc2VxLCAiICBjb21tIFwiJXNcIiwgcGlkICVkLCBqaWZmaWVzICVsdVxuIiwKIAkJICAgb2JqZWN0LT5jb21tLCBvYmplY3QtPnBpZCwgb2JqZWN0LT5qaWZmaWVzKTsKKwloZXhfZHVtcF9vYmplY3Qoc2VxLCBvYmplY3QpOwogCXNlcV9wcmludGYoc2VxLCAiICBiYWNrdHJhY2U6XG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBvYmplY3QtPnRyYWNlX2xlbjsgaSsrKSB7CkBAIC0zMzAsNiArMzgwLDcgQEAKIAkJICBvYmplY3QtPmNvbW0sIG9iamVjdC0+cGlkLCBvYmplY3QtPmppZmZpZXMpOwogCXByX25vdGljZSgiICBtaW5fY291bnQgPSAlZFxuIiwgb2JqZWN0LT5taW5fY291bnQpOwogCXByX25vdGljZSgiICBjb3VudCA9ICVkXG4iLCBvYmplY3QtPmNvdW50KTsKKwlwcl9ub3RpY2UoIiAgZmxhZ3MgPSAweCVseFxuIiwgb2JqZWN0LT5mbGFncyk7CiAJcHJfbm90aWNlKCIgIGJhY2t0cmFjZTpcbiIpOwogCXByaW50X3N0YWNrX3RyYWNlKCZ0cmFjZSwgNCk7CiB9CkBAIC00MzQsMjEgKzQ4NSwzNiBAQAogfQogCiAvKgorICogU2F2ZSBzdGFjayB0cmFjZSB0byB0aGUgZ2l2ZW4gYXJyYXkgb2YgTUFYX1RSQUNFIHNpemUuCisgKi8KK3N0YXRpYyBpbnQgX19zYXZlX3N0YWNrX3RyYWNlKHVuc2lnbmVkIGxvbmcgKnRyYWNlKQoreworCXN0cnVjdCBzdGFja190cmFjZSBzdGFja190cmFjZTsKKworCXN0YWNrX3RyYWNlLm1heF9lbnRyaWVzID0gTUFYX1RSQUNFOworCXN0YWNrX3RyYWNlLm5yX2VudHJpZXMgPSAwOworCXN0YWNrX3RyYWNlLmVudHJpZXMgPSB0cmFjZTsKKwlzdGFja190cmFjZS5za2lwID0gMjsKKwlzYXZlX3N0YWNrX3RyYWNlKCZzdGFja190cmFjZSk7CisKKwlyZXR1cm4gc3RhY2tfdHJhY2UubnJfZW50cmllczsKK30KKworLyoKICAqIENyZWF0ZSB0aGUgbWV0YWRhdGEgKHN0cnVjdCBrbWVtbGVha19vYmplY3QpIGNvcnJlc3BvbmRpbmcgdG8gYW4gYWxsb2NhdGVkCiAgKiBtZW1vcnkgYmxvY2sgYW5kIGFkZCBpdCB0byB0aGUgb2JqZWN0X2xpc3QgYW5kIG9iamVjdF90cmVlX3Jvb3QuCiAgKi8KLXN0YXRpYyB2b2lkIGNyZWF0ZV9vYmplY3QodW5zaWduZWQgbG9uZyBwdHIsIHNpemVfdCBzaXplLCBpbnQgbWluX2NvdW50LAotCQkJICBnZnBfdCBnZnApCitzdGF0aWMgc3RydWN0IGttZW1sZWFrX29iamVjdCAqY3JlYXRlX29iamVjdCh1bnNpZ25lZCBsb25nIHB0ciwgc2l6ZV90IHNpemUsCisJCQkJCSAgICAgaW50IG1pbl9jb3VudCwgZ2ZwX3QgZ2ZwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0OwogCXN0cnVjdCBwcmlvX3RyZWVfbm9kZSAqbm9kZTsKLQlzdHJ1Y3Qgc3RhY2tfdHJhY2UgdHJhY2U7CiAKIAlvYmplY3QgPSBrbWVtX2NhY2hlX2FsbG9jKG9iamVjdF9jYWNoZSwgZ2ZwICYgR0ZQX0tNRU1MRUFLX01BU0spOwogCWlmICghb2JqZWN0KSB7CiAJCWttZW1sZWFrX3N0b3AoIkNhbm5vdCBhbGxvY2F0ZSBhIGttZW1sZWFrX29iamVjdCBzdHJ1Y3R1cmVcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiBOVUxMOwogCX0KIAogCUlOSVRfTElTVF9IRUFEKCZvYmplY3QtPm9iamVjdF9saXN0KTsKQEAgLTQ4MiwxOCArNTQ4LDE0IEBACiAJfQogCiAJLyoga2VybmVsIGJhY2t0cmFjZSAqLwotCXRyYWNlLm1heF9lbnRyaWVzID0gTUFYX1RSQUNFOwotCXRyYWNlLm5yX2VudHJpZXMgPSAwOwotCXRyYWNlLmVudHJpZXMgPSBvYmplY3QtPnRyYWNlOwotCXRyYWNlLnNraXAgPSAxOwotCXNhdmVfc3RhY2tfdHJhY2UoJnRyYWNlKTsKLQlvYmplY3QtPnRyYWNlX2xlbiA9IHRyYWNlLm5yX2VudHJpZXM7CisJb2JqZWN0LT50cmFjZV9sZW4gPSBfX3NhdmVfc3RhY2tfdHJhY2Uob2JqZWN0LT50cmFjZSk7CiAKIAlJTklUX1BSSU9fVFJFRV9OT0RFKCZvYmplY3QtPnRyZWVfbm9kZSk7CiAJb2JqZWN0LT50cmVlX25vZGUuc3RhcnQgPSBwdHI7CiAJb2JqZWN0LT50cmVlX25vZGUubGFzdCA9IHB0ciArIHNpemUgLSAxOwogCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZrbWVtbGVha19sb2NrLCBmbGFncyk7CisKIAltaW5fYWRkciA9IG1pbihtaW5fYWRkciwgcHRyKTsKIAltYXhfYWRkciA9IG1heChtYXhfYWRkciwgcHRyICsgc2l6ZSk7CiAJbm9kZSA9IHByaW9fdHJlZV9pbnNlcnQoJm9iamVjdF90cmVlX3Jvb3QsICZvYmplY3QtPnRyZWVfbm9kZSk7CkBAIC01MDQsMjAgKzU2NiwxOSBAQAogCSAqIHJhbmRvbSBtZW1vcnkgYmxvY2tzLgogCSAqLwogCWlmIChub2RlICE9ICZvYmplY3QtPnRyZWVfbm9kZSkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAJCWttZW1sZWFrX3N0b3AoIkNhbm5vdCBpbnNlcnQgMHglbHggaW50byB0aGUgb2JqZWN0IHNlYXJjaCB0cmVlICIKIAkJCSAgICAgICIoYWxyZWFkeSBleGlzdGluZylcbiIsIHB0cik7CiAJCW9iamVjdCA9IGxvb2t1cF9vYmplY3QocHRyLCAxKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJm9iamVjdC0+bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CiAJCWR1bXBfb2JqZWN0X2luZm8ob2JqZWN0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOwogCiAJCWdvdG8gb3V0OwogCX0KIAlsaXN0X2FkZF90YWlsX3JjdSgmb2JqZWN0LT5vYmplY3RfbGlzdCwgJm9iamVjdF9saXN0KTsKIG91dDoKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgma21lbWxlYWtfbG9jaywgZmxhZ3MpOworCXJldHVybiBvYmplY3Q7CiB9CiAKIC8qCkBAIC02MDQsMjUgKzY2NSw0NiBAQAogCiAJcHV0X29iamVjdChvYmplY3QpOwogfQorCitzdGF0aWMgdm9pZCBfX3BhaW50X2l0KHN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdCwgaW50IGNvbG9yKQoreworCW9iamVjdC0+bWluX2NvdW50ID0gY29sb3I7CisJaWYgKGNvbG9yID09IEtNRU1MRUFLX0JMQUNLKQorCQlvYmplY3QtPmZsYWdzIHw9IE9CSkVDVF9OT19TQ0FOOworfQorCitzdGF0aWMgdm9pZCBwYWludF9pdChzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QsIGludCBjb2xvcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9iamVjdC0+bG9jaywgZmxhZ3MpOworCV9fcGFpbnRfaXQob2JqZWN0LCBjb2xvcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHBhaW50X3B0cih1bnNpZ25lZCBsb25nIHB0ciwgaW50IGNvbG9yKQoreworCXN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDsKKworCW9iamVjdCA9IGZpbmRfYW5kX2dldF9vYmplY3QocHRyLCAwKTsKKwlpZiAoIW9iamVjdCkgeworCQlrbWVtbGVha193YXJuKCJUcnlpbmcgdG8gY29sb3IgdW5rbm93biBvYmplY3QgIgorCQkJICAgICAgImF0IDB4JTA4bHggYXMgJXNcbiIsIHB0ciwKKwkJCSAgICAgIChjb2xvciA9PSBLTUVNTEVBS19HUkVZKSA/ICJHcmV5IiA6CisJCQkgICAgICAoY29sb3IgPT0gS01FTUxFQUtfQkxBQ0spID8gIkJsYWNrIiA6ICJVbmtub3duIik7CisJCXJldHVybjsKKwl9CisJcGFpbnRfaXQob2JqZWN0LCBjb2xvcik7CisJcHV0X29iamVjdChvYmplY3QpOworfQorCiAvKgogICogTWFrZSBhIG9iamVjdCBwZXJtYW5lbnRseSBhcyBncmF5LWNvbG9yZWQgc28gdGhhdCBpdCBjYW4gbm8gbG9uZ2VyIGJlCiAgKiByZXBvcnRlZCBhcyBhIGxlYWsuIFRoaXMgaXMgdXNlZCBpbiBnZW5lcmFsIHRvIG1hcmsgYSBmYWxzZSBwb3NpdGl2ZS4KICAqLwogc3RhdGljIHZvaWQgbWFrZV9ncmF5X29iamVjdCh1bnNpZ25lZCBsb25nIHB0cikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDsKLQotCW9iamVjdCA9IGZpbmRfYW5kX2dldF9vYmplY3QocHRyLCAwKTsKLQlpZiAoIW9iamVjdCkgewotCQlrbWVtbGVha193YXJuKCJHcmF5aW5nIHVua25vd24gb2JqZWN0IGF0IDB4JTA4bHhcbiIsIHB0cik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7Ci0Jb2JqZWN0LT5taW5fY291bnQgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9iamVjdC0+bG9jaywgZmxhZ3MpOwotCXB1dF9vYmplY3Qob2JqZWN0KTsKKwlwYWludF9wdHIocHRyLCBLTUVNTEVBS19HUkVZKTsKIH0KIAogLyoKQEAgLTYzMSwxOSArNzEzLDcgQEAKICAqLwogc3RhdGljIHZvaWQgbWFrZV9ibGFja19vYmplY3QodW5zaWduZWQgbG9uZyBwdHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7Ci0KLQlvYmplY3QgPSBmaW5kX2FuZF9nZXRfb2JqZWN0KHB0ciwgMCk7Ci0JaWYgKCFvYmplY3QpIHsKLQkJa21lbWxlYWtfd2FybigiQmxhY2tpbmcgdW5rbm93biBvYmplY3QgYXQgMHglMDhseFxuIiwgcHRyKTsKLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKLQlvYmplY3QtPm1pbl9jb3VudCA9IC0xOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9iamVjdC0+bG9jaywgZmxhZ3MpOwotCXB1dF9vYmplY3Qob2JqZWN0KTsKKwlwYWludF9wdHIocHRyLCBLTUVNTEVBS19CTEFDSyk7CiB9CiAKIC8qCkBAIC03MTUsMTQgKzc4NSwxNSBAQAogICogTG9nIGFuIGVhcmx5IGttZW1sZWFrXyogY2FsbCB0byB0aGUgZWFybHlfbG9nIGJ1ZmZlci4gVGhlc2UgY2FsbHMgd2lsbCBiZQogICogcHJvY2Vzc2VkIGxhdGVyIG9uY2Uga21lbWxlYWsgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuCiAgKi8KLXN0YXRpYyB2b2lkIGxvZ19lYXJseShpbnQgb3BfdHlwZSwgY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKLQkJICAgICAgaW50IG1pbl9jb3VudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCitzdGF0aWMgdm9pZCBfX2luaXQgbG9nX2Vhcmx5KGludCBvcF90eXBlLCBjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAorCQkJICAgICBpbnQgbWluX2NvdW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBlYXJseV9sb2cgKmxvZzsKIAogCWlmIChjcnRfZWFybHlfbG9nID49IEFSUkFZX1NJWkUoZWFybHlfbG9nKSkgewotCQlwcl93YXJuaW5nKCJFYXJseSBsb2cgYnVmZmVyIGV4Y2VlZGVkXG4iKTsKKwkJcHJfd2FybmluZygiRWFybHkgbG9nIGJ1ZmZlciBleGNlZWRlZCwgIgorCQkJICAgInBsZWFzZSBpbmNyZWFzZSBERUJVR19LTUVNTEVBS19FQVJMWV9MT0dfU0laRVxuIik7CiAJCWttZW1sZWFrX2Rpc2FibGUoKTsKIAkJcmV0dXJuOwogCX0KQEAgLTczOSwxNiArODEwLDQ1IEBACiAJbG9nLT5taW5fY291bnQgPSBtaW5fY291bnQ7CiAJbG9nLT5vZmZzZXQgPSBvZmZzZXQ7CiAJbG9nLT5sZW5ndGggPSBsZW5ndGg7CisJaWYgKG9wX3R5cGUgPT0gS01FTUxFQUtfQUxMT0MpCisJCWxvZy0+dHJhY2VfbGVuID0gX19zYXZlX3N0YWNrX3RyYWNlKGxvZy0+dHJhY2UpOwogCWNydF9lYXJseV9sb2crKzsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIC8qCisgKiBMb2cgYW4gZWFybHkgYWxsb2NhdGVkIGJsb2NrIGFuZCBwb3B1bGF0ZSB0aGUgc3RhY2sgdHJhY2UuCisgKi8KK3N0YXRpYyB2b2lkIGVhcmx5X2FsbG9jKHN0cnVjdCBlYXJseV9sb2cgKmxvZykKK3sKKwlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCWlmICghYXRvbWljX3JlYWQoJmttZW1sZWFrX2VuYWJsZWQpIHx8ICFsb2ctPnB0ciB8fCBJU19FUlIobG9nLT5wdHIpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFJDVSBsb2NraW5nIG5lZWRlZCB0byBlbnN1cmUgb2JqZWN0IGlzIG5vdCBmcmVlZCB2aWEgcHV0X29iamVjdCgpLgorCSAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlvYmplY3QgPSBjcmVhdGVfb2JqZWN0KCh1bnNpZ25lZCBsb25nKWxvZy0+cHRyLCBsb2ctPnNpemUsCisJCQkgICAgICAgbG9nLT5taW5fY291bnQsIEdGUF9LRVJORUwpOworCXNwaW5fbG9ja19pcnFzYXZlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbG9nLT50cmFjZV9sZW47IGkrKykKKwkJb2JqZWN0LT50cmFjZVtpXSA9IGxvZy0+dHJhY2VbaV07CisJb2JqZWN0LT50cmFjZV9sZW4gPSBsb2ctPnRyYWNlX2xlbjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworLyoKICAqIE1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGNhbGxiYWNrLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZQogICoga2VybmVsIGFsbG9jYXRvcnMgd2hlbiBhIG5ldyBibG9jayBpcyBhbGxvY2F0ZWQgKGttZW1fY2FjaGVfYWxsb2MsIGttYWxsb2MsCiAgKiB2bWFsbG9jIGV0Yy4pLgogICovCi12b2lkIGttZW1sZWFrX2FsbG9jKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGludCBtaW5fY291bnQsIGdmcF90IGdmcCkKK3ZvaWQgX19yZWYga21lbWxlYWtfYWxsb2MoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgaW50IG1pbl9jb3VudCwKKwkJCSAgZ2ZwX3QgZ2ZwKQogewogCXByX2RlYnVnKCIlcygweCVwLCAlenUsICVkKVxuIiwgX19mdW5jX18sIHB0ciwgc2l6ZSwgbWluX2NvdW50KTsKIApAQCAtNzYzLDcgKzg2Myw3IEBACiAgKiBNZW1vcnkgZnJlZWluZyBmdW5jdGlvbiBjYWxsYmFjay4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUga2VybmVsCiAgKiBhbGxvY2F0b3JzIHdoZW4gYSBibG9jayBpcyBmcmVlZCAoa21lbV9jYWNoZV9mcmVlLCBrZnJlZSwgdmZyZWUgZXRjLikuCiAgKi8KLXZvaWQga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpCit2b2lkIF9fcmVmIGttZW1sZWFrX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKQogewogCXByX2RlYnVnKCIlcygweCVwKVxuIiwgX19mdW5jX18sIHB0cik7CiAKQEAgLTc3OCw3ICs4NzgsNyBAQAogICogUGFydGlhbCBtZW1vcnkgZnJlZWluZyBmdW5jdGlvbiBjYWxsYmFjay4gVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZAogICogZnJvbSBib290bWVtIGFsbG9jYXRvciB3aGVuIChwYXJ0IG9mKSBhIG1lbW9yeSBibG9jayBpcyBmcmVlZC4KICAqLwotdm9pZCBrbWVtbGVha19mcmVlX3BhcnQoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgX19yZWYga21lbWxlYWtfZnJlZV9wYXJ0KGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCiB7CiAJcHJfZGVidWcoIiVzKDB4JXApXG4iLCBfX2Z1bmNfXywgcHRyKTsKIApAQCAtNzkzLDcgKzg5Myw3IEBACiAgKiBNYXJrIGFuIGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBibG9jayBhcyBhIGZhbHNlIHBvc2l0aXZlLiBUaGlzIHdpbGwgY2F1c2UKICAqIHRoZSBibG9jayB0byBubyBsb25nZXIgYmUgcmVwb3J0ZWQgYXMgbGVhayBhbmQgYWx3YXlzIGJlIHNjYW5uZWQuCiAgKi8KLXZvaWQga21lbWxlYWtfbm90X2xlYWsoY29uc3Qgdm9pZCAqcHRyKQordm9pZCBfX3JlZiBrbWVtbGVha19ub3RfbGVhayhjb25zdCB2b2lkICpwdHIpCiB7CiAJcHJfZGVidWcoIiVzKDB4JXApXG4iLCBfX2Z1bmNfXywgcHRyKTsKIApAQCAtODA5LDcgKzkwOSw3IEBACiAgKiBjb3JyZXNwb25kaW5nIGJsb2NrIGlzIG5vdCBhIGxlYWsgYW5kIGRvZXMgbm90IGNvbnRhaW4gYW55IHJlZmVyZW5jZXMgdG8KICAqIG90aGVyIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzLgogICovCi12b2lkIGttZW1sZWFrX2lnbm9yZShjb25zdCB2b2lkICpwdHIpCit2b2lkIF9fcmVmIGttZW1sZWFrX2lnbm9yZShjb25zdCB2b2lkICpwdHIpCiB7CiAJcHJfZGVidWcoIiVzKDB4JXApXG4iLCBfX2Z1bmNfXywgcHRyKTsKIApAQCAtODIzLDggKzkyMyw4IEBACiAvKgogICogTGltaXQgdGhlIHJhbmdlIHRvIGJlIHNjYW5uZWQgaW4gYW4gYWxsb2NhdGVkIG1lbW9yeSBibG9jay4KICAqLwotdm9pZCBrbWVtbGVha19zY2FuX2FyZWEoY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IGxlbmd0aCwKLQkJCWdmcF90IGdmcCkKK3ZvaWQgX19yZWYga21lbWxlYWtfc2Nhbl9hcmVhKGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkgICAgICBzaXplX3QgbGVuZ3RoLCBnZnBfdCBnZnApCiB7CiAJcHJfZGVidWcoIiVzKDB4JXApXG4iLCBfX2Z1bmNfXywgcHRyKTsKIApAQCAtODM4LDcgKzkzOCw3IEBACiAvKgogICogSW5mb3JtIGttZW1sZWFrIG5vdCB0byBzY2FuIHRoZSBnaXZlbiBtZW1vcnkgYmxvY2suCiAgKi8KLXZvaWQga21lbWxlYWtfbm9fc2Nhbihjb25zdCB2b2lkICpwdHIpCit2b2lkIF9fcmVmIGttZW1sZWFrX25vX3NjYW4oY29uc3Qgdm9pZCAqcHRyKQogewogCXByX2RlYnVnKCIlcygweCVwKVxuIiwgX19mdW5jX18sIHB0cik7CiAKQEAgLTg4MiwxNSArOTgyLDIyIEBACiAJdW5zaWduZWQgbG9uZyAqZW5kID0gX2VuZCAtIChCWVRFU19QRVJfUE9JTlRFUiAtIDEpOwogCiAJZm9yIChwdHIgPSBzdGFydDsgcHRyIDwgZW5kOyBwdHIrKykgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQl1bnNpZ25lZCBsb25nIHBvaW50ZXIgPSAqcHRyOwogCQlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXVuc2lnbmVkIGxvbmcgcG9pbnRlcjsKIAogCQlpZiAoYWxsb3dfcmVzY2hlZCkKIAkJCWNvbmRfcmVzY2hlZCgpOwogCQlpZiAoc2Nhbl9zaG91bGRfc3RvcCgpKQogCQkJYnJlYWs7CiAKKwkJLyogZG9uJ3Qgc2NhbiB1bmluaXRpYWxpemVkIG1lbW9yeSAqLworCQlpZiAoIWttZW1jaGVja19pc19vYmpfaW5pdGlhbGl6ZWQoKHVuc2lnbmVkIGxvbmcpcHRyLAorCQkJCQkJICBCWVRFU19QRVJfUE9JTlRFUikpCisJCQljb250aW51ZTsKKworCQlwb2ludGVyID0gKnB0cjsKKwogCQlvYmplY3QgPSBmaW5kX2FuZF9nZXRfb2JqZWN0KHBvaW50ZXIsIDEpOwogCQlpZiAoIW9iamVjdCkKIAkJCWNvbnRpbnVlOwpAQCAtOTQ5LDEwICsxMDU2LDIxIEBACiAJaWYgKCEob2JqZWN0LT5mbGFncyAmIE9CSkVDVF9BTExPQ0FURUQpKQogCQkvKiBhbHJlYWR5IGZyZWVkIG9iamVjdCAqLwogCQlnb3RvIG91dDsKLQlpZiAoaGxpc3RfZW1wdHkoJm9iamVjdC0+YXJlYV9saXN0KSkKLQkJc2Nhbl9ibG9jaygodm9pZCAqKW9iamVjdC0+cG9pbnRlciwKLQkJCSAgICh2b2lkICopKG9iamVjdC0+cG9pbnRlciArIG9iamVjdC0+c2l6ZSksIG9iamVjdCwgMCk7Ci0JZWxzZQorCWlmIChobGlzdF9lbXB0eSgmb2JqZWN0LT5hcmVhX2xpc3QpKSB7CisJCXZvaWQgKnN0YXJ0ID0gKHZvaWQgKilvYmplY3QtPnBvaW50ZXI7CisJCXZvaWQgKmVuZCA9ICh2b2lkICopKG9iamVjdC0+cG9pbnRlciArIG9iamVjdC0+c2l6ZSk7CisKKwkJd2hpbGUgKHN0YXJ0IDwgZW5kICYmIChvYmplY3QtPmZsYWdzICYgT0JKRUNUX0FMTE9DQVRFRCkgJiYKKwkJICAgICAgICEob2JqZWN0LT5mbGFncyAmIE9CSkVDVF9OT19TQ0FOKSkgeworCQkJc2Nhbl9ibG9jayhzdGFydCwgbWluKHN0YXJ0ICsgTUFYX1NDQU5fU0laRSwgZW5kKSwKKwkJCQkgICBvYmplY3QsIDApOworCQkJc3RhcnQgKz0gTUFYX1NDQU5fU0laRTsKKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7CisJCQljb25kX3Jlc2NoZWQoKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKKwkJfQorCX0gZWxzZQogCQlobGlzdF9mb3JfZWFjaF9lbnRyeShhcmVhLCBlbGVtLCAmb2JqZWN0LT5hcmVhX2xpc3QsIG5vZGUpCiAJCQlzY2FuX2Jsb2NrKCh2b2lkICopKG9iamVjdC0+cG9pbnRlciArIGFyZWEtPm9mZnNldCksCiAJCQkJICAgKHZvaWQgKikob2JqZWN0LT5wb2ludGVyICsgYXJlYS0+b2Zmc2V0CkBAIC05NzAsNyArMTA4OCw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3QsICp0bXA7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCWludCBpOwogCWludCBuZXdfbGVha3MgPSAwOwogCWludCBncmF5X2xpc3RfcGFzcyA9IDA7CkBAIC0xMDM3LDE1ICsxMTU0LDE2IEBACiAJfQogCiAJLyoKLQkgKiBTY2FubmluZyB0aGUgdGFzayBzdGFja3MgbWF5IGludHJvZHVjZSBmYWxzZSBuZWdhdGl2ZXMgYW5kIGl0IGlzCi0JICogbm90IGVuYWJsZWQgYnkgZGVmYXVsdC4KKwkgKiBTY2FubmluZyB0aGUgdGFzayBzdGFja3MgKG1heSBpbnRyb2R1Y2UgZmFsc2UgbmVnYXRpdmVzKS4KIAkgKi8KIAlpZiAoa21lbWxlYWtfc3RhY2tfc2NhbikgeworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpnOworCiAJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCWZvcl9lYWNoX3Byb2Nlc3ModGFzaykKLQkJCXNjYW5fYmxvY2sodGFza19zdGFja19wYWdlKHRhc2spLAotCQkJCSAgIHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFLAotCQkJCSAgIE5VTEwsIDApOworCQlkb19lYWNoX3RocmVhZChnLCBwKSB7CisJCQlzY2FuX2Jsb2NrKHRhc2tfc3RhY2tfcGFnZShwKSwgdGFza19zdGFja19wYWdlKHApICsKKwkJCQkgICBUSFJFQURfU0laRSwgTlVMTCwgMCk7CisJCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CiAJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAl9CiAKQEAgLTExNzAsNyArMTI4OCw3IEBACiAgKiBTdGFydCB0aGUgYXV0b21hdGljIG1lbW9yeSBzY2FubmluZyB0aHJlYWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQKICAqIHdpdGggdGhlIHNjYW5fbXV0ZXggaGVsZC4KICAqLwotdm9pZCBzdGFydF9zY2FuX3RocmVhZCh2b2lkKQorc3RhdGljIHZvaWQgc3RhcnRfc2Nhbl90aHJlYWQodm9pZCkKIHsKIAlpZiAoc2Nhbl90aHJlYWQpCiAJCXJldHVybjsKQEAgLTExODUsNyArMTMwMyw3IEBACiAgKiBTdG9wIHRoZSBhdXRvbWF0aWMgbWVtb3J5IHNjYW5uaW5nIHRocmVhZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAogICogd2l0aCB0aGUgc2Nhbl9tdXRleCBoZWxkLgogICovCi12b2lkIHN0b3Bfc2Nhbl90aHJlYWQodm9pZCkKK3N0YXRpYyB2b2lkIHN0b3Bfc2Nhbl90aHJlYWQodm9pZCkKIHsKIAlpZiAoc2Nhbl90aHJlYWQpIHsKIAkJa3RocmVhZF9zdG9wKHNjYW5fdGhyZWFkKTsKQEAgLTEyOTQsNiArMTQxMiw0OSBAQAogCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7CiB9CiAKK3N0YXRpYyBpbnQgZHVtcF9zdHJfb2JqZWN0X2luZm8oY29uc3QgY2hhciAqc3RyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0OworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWFkZHI9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgTlVMTCwgMCk7CisJb2JqZWN0ID0gZmluZF9hbmRfZ2V0X29iamVjdChhZGRyLCAwKTsKKwlpZiAoIW9iamVjdCkgeworCQlwcl9pbmZvKCJVbmtub3duIG9iamVjdCBhdCAweCUwOGx4XG4iLCBhZGRyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9iamVjdC0+bG9jaywgZmxhZ3MpOworCWR1bXBfb2JqZWN0X2luZm8ob2JqZWN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKKworCXB1dF9vYmplY3Qob2JqZWN0KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdlIHVzZSBncmV5IGluc3RlYWQgb2YgYmxhY2sgdG8gZW5zdXJlIHdlIGNhbiBkbyBmdXR1cmUgc2NhbnMgb24gdGhlIHNhbWUKKyAqIG9iamVjdHMuIElmIHdlIGRpZCBub3QgZG8gZnV0dXJlIHNjYW5zIHRoZXNlIGJsYWNrIG9iamVjdHMgY291bGQKKyAqIHBvdGVudGlhbGx5IGNvbnRhaW4gcmVmZXJlbmNlcyB0byBuZXdseSBhbGxvY2F0ZWQgb2JqZWN0cyBpbiB0aGUgZnV0dXJlIGFuZAorICogd2UnZCBlbmQgdXAgd2l0aCBmYWxzZSBwb3NpdGl2ZXMuCisgKi8KK3N0YXRpYyB2b2lkIGttZW1sZWFrX2NsZWFyKHZvaWQpCit7CisJc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uob2JqZWN0LCAmb2JqZWN0X2xpc3QsIG9iamVjdF9saXN0KSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKChvYmplY3QtPmZsYWdzICYgT0JKRUNUX1JFUE9SVEVEKSAmJgorCQkgICAgdW5yZWZlcmVuY2VkX29iamVjdChvYmplY3QpKQorCQkJX19wYWludF9pdChvYmplY3QsIEtNRU1MRUFLX0dSRVkpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvYmplY3QtPmxvY2ssIGZsYWdzKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKIC8qCiAgKiBGaWxlIHdyaXRlIG9wZXJhdGlvbiB0byBjb25maWd1cmUga21lbWxlYWsgYXQgcnVuLXRpbWUuIFRoZSBmb2xsb3dpbmcKICAqIGNvbW1hbmRzIGNhbiBiZSB3cml0dGVuIHRvIHRoZSAvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVhayBmaWxlOgpAQCAtMTMwNSw2ICsxNDY2LDkgQEAKICAqICAgc2Nhbj0uLi4JLSBzZXQgdGhlIGF1dG9tYXRpYyBtZW1vcnkgc2Nhbm5pbmcgcGVyaW9kIGluIHNlY29uZHMgKDAgdG8KICAqCQkgIGRpc2FibGUgaXQpCiAgKiAgIHNjYW4JLSB0cmlnZ2VyIGEgbWVtb3J5IHNjYW4KKyAqICAgY2xlYXIJLSBtYXJrIGFsbCBjdXJyZW50IHJlcG9ydGVkIHVucmVmZXJlbmNlZCBrbWVtbGVhayBvYmplY3RzIGFzCisgKgkJICBncmV5IHRvIGlnbm9yZSBwcmludGluZyB0aGVtCisgKiAgIGR1bXA9Li4uCS0gZHVtcCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb2JqZWN0IGZvdW5kIGF0IHRoZSBnaXZlbiBhZGRyZXNzCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGttZW1sZWFrX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkgICAgICBzaXplX3Qgc2l6ZSwgbG9mZl90ICpwcG9zKQpAQCAtMTM0NSw2ICsxNTA5LDEwIEBACiAJCX0KIAl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAic2NhbiIsIDQpID09IDApCiAJCWttZW1sZWFrX3NjYW4oKTsKKwllbHNlIGlmIChzdHJuY21wKGJ1ZiwgImNsZWFyIiwgNSkgPT0gMCkKKwkJa21lbWxlYWtfY2xlYXIoKTsKKwllbHNlIGlmIChzdHJuY21wKGJ1ZiwgImR1bXA9IiwgNSkgPT0gMCkKKwkJcmV0ID0gZHVtcF9zdHJfb2JqZWN0X2luZm8oYnVmICsgNSk7CiAJZWxzZQogCQlyZXQgPSAtRUlOVkFMOwogCkBAIC0xMzcxLDcgKzE1MzksNyBAQAogICogUGVyZm9ybSB0aGUgZnJlZWluZyBvZiB0aGUga21lbWxlYWsgaW50ZXJuYWwgb2JqZWN0cyBhZnRlciB3YWl0aW5nIGZvciBhbnkKICAqIGN1cnJlbnQgbWVtb3J5IHNjYW4gdG8gY29tcGxldGUuCiAgKi8KLXN0YXRpYyBpbnQga21lbWxlYWtfY2xlYW51cF90aHJlYWQodm9pZCAqYXJnKQorc3RhdGljIHZvaWQga21lbWxlYWtfZG9fY2xlYW51cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGttZW1sZWFrX29iamVjdCAqb2JqZWN0OwogCkBAIC0xMzgzLDIyICsxNTUxLDkgQEAKIAkJZGVsZXRlX29iamVjdF9mdWxsKG9iamVjdC0+cG9pbnRlcik7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJbXV0ZXhfdW5sb2NrKCZzY2FuX211dGV4KTsKLQotCXJldHVybiAwOwogfQogCi0vKgotICogU3RhcnQgdGhlIGNsZWFuLXVwIHRocmVhZC4KLSAqLwotc3RhdGljIHZvaWQga21lbWxlYWtfY2xlYW51cCh2b2lkKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqY2xlYW51cF90aHJlYWQ7Ci0KLQljbGVhbnVwX3RocmVhZCA9IGt0aHJlYWRfcnVuKGttZW1sZWFrX2NsZWFudXBfdGhyZWFkLCBOVUxMLAotCQkJCSAgICAgImttZW1sZWFrLWNsZWFuIik7Ci0JaWYgKElTX0VSUihjbGVhbnVwX3RocmVhZCkpCi0JCXByX3dhcm5pbmcoIkZhaWxlZCB0byBjcmVhdGUgdGhlIGNsZWFuLXVwIHRocmVhZFxuIik7Ci19CitzdGF0aWMgREVDTEFSRV9XT1JLKGNsZWFudXBfd29yaywga21lbWxlYWtfZG9fY2xlYW51cCk7CiAKIC8qCiAgKiBEaXNhYmxlIGttZW1sZWFrLiBObyBtZW1vcnkgYWxsb2NhdGlvbi9mcmVlaW5nIHdpbGwgYmUgdHJhY2VkIG9uY2UgdGhpcwpAQCAtMTQxNiw3ICsxNTcxLDcgQEAKIAogCS8qIGNoZWNrIHdoZXRoZXIgaXQgaXMgdG9vIGVhcmx5IGZvciBhIGtlcm5lbCB0aHJlYWQgKi8KIAlpZiAoYXRvbWljX3JlYWQoJmttZW1sZWFrX2luaXRpYWxpemVkKSkKLQkJa21lbWxlYWtfY2xlYW51cCgpOworCQlzY2hlZHVsZV93b3JrKCZjbGVhbnVwX3dvcmspOwogCiAJcHJfaW5mbygiS2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9yIGRpc2FibGVkXG4iKTsKIH0KQEAgLTE0NjksOCArMTYyNCw3IEBACiAKIAkJc3dpdGNoIChsb2ctPm9wX3R5cGUpIHsKIAkJY2FzZSBLTUVNTEVBS19BTExPQzoKLQkJCWttZW1sZWFrX2FsbG9jKGxvZy0+cHRyLCBsb2ctPnNpemUsIGxvZy0+bWluX2NvdW50LAotCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJCWVhcmx5X2FsbG9jKGxvZyk7CiAJCQlicmVhazsKIAkJY2FzZSBLTUVNTEVBS19GUkVFOgogCQkJa21lbWxlYWtfZnJlZShsb2ctPnB0cik7CkBAIC0xNTEzLDcgKzE2NjcsNyBAQAogCQkgKiBhZnRlciBzZXR0aW5nIGttZW1sZWFrX2luaXRpYWxpemVkIGFuZCB3ZSBtYXkgZW5kIHVwIHdpdGgKIAkJICogdHdvIGNsZWFuLXVwIHRocmVhZHMgYnV0IHNlcmlhbGl6ZWQgYnkgc2Nhbl9tdXRleC4KIAkJICovCi0JCWttZW1sZWFrX2NsZWFudXAoKTsKKwkJc2NoZWR1bGVfd29yaygmY2xlYW51cF93b3JrKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCA4MTYyN2ViLi4xZWVhNGZhIDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTM2LDE1ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgogCiAvKgotICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIHRvIHdyaXRlb3V0IGluIGEgc2luZ2xlIGJkZmx1c2gva3VwZGF0ZQotICogb3BlcmF0aW9uLiAgV2UgZG8gdGhpcyBzbyB3ZSBkb24ndCBob2xkIElfU1lOQyBhZ2FpbnN0IGFuIGlub2RlIGZvcgotICogZW5vcm1vdXMgYW1vdW50cyBvZiB0aW1lLCB3aGljaCB3b3VsZCBibG9jayBhIHVzZXJzcGFjZSB0YXNrIHdoaWNoIGhhcwotICogYmVlbiBmb3JjZWQgdG8gdGhyb3R0bGUgYWdhaW5zdCB0aGF0IGlub2RlLiAgQWxzbywgdGhlIGNvZGUgcmVldmFsdWF0ZXMKLSAqIHRoZSBkaXJ0eSBlYWNoIHRpbWUgaXQgaGFzIHdyaXR0ZW4gdGhpcyBtYW55IHBhZ2VzLgotICovCi0jZGVmaW5lIE1BWF9XUklURUJBQ0tfUEFHRVMJMTAyNAotCi0vKgogICogQWZ0ZXIgYSBDUFUgaGFzIGRpcnRpZWQgdGhpcyBtYW55IHBhZ2VzLCBiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkCiAgKiB3aWxsIGxvb2sgdG8gc2VlIGlmIGl0IG5lZWRzIHRvIGZvcmNlIHdyaXRlYmFjayBvciB0aHJvdHRsaW5nLgogICovCkBAIC0xMTcsOCArMTA4LDYgQEAKIC8qIEVuZCBvZiBzeXNjdGwtZXhwb3J0ZWQgcGFyYW1ldGVycyAqLwogCiAKLXN0YXRpYyB2b2lkIGJhY2tncm91bmRfd3JpdGVvdXQodW5zaWduZWQgbG9uZyBfbWluX3BhZ2VzKTsKLQogLyoKICAqIFNjYWxlIHRoZSB3cml0ZWJhY2sgY2FjaGUgc2l6ZSBwcm9wb3J0aW9uYWwgdG8gdGhlIHJlbGF0aXZlIHdyaXRlb3V0IHNwZWVkcy4KICAqCkBAIC0zMjAsMTUgKzMwOSwxMyBAQAogLyoKICAqCiAgKi8KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmRpX2xvY2spOwogc3RhdGljIHVuc2lnbmVkIGludCBiZGlfbWluX3JhdGlvOwogCiBpbnQgYmRpX3NldF9taW5fcmF0aW8oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgdW5zaWduZWQgaW50IG1pbl9yYXRpbykKIHsKIAlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJkaV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2JoKCZiZGlfbG9jayk7CiAJaWYgKG1pbl9yYXRpbyA+IGJkaS0+bWF4X3JhdGlvKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJfSBlbHNlIHsKQEAgLTM0MCwyNyArMzI3LDI2IEBACiAJCQlyZXQgPSAtRUlOVkFMOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJkaV9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfYmgoJmJkaV9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIGludCBiZGlfc2V0X21heF9yYXRpbyhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCB1bnNpZ25lZCBtYXhfcmF0aW8pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChtYXhfcmF0aW8gPiAxMDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJkaV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2JoKCZiZGlfbG9jayk7CiAJaWYgKGJkaS0+bWluX3JhdGlvID4gbWF4X3JhdGlvKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJfSBlbHNlIHsKIAkJYmRpLT5tYXhfcmF0aW8gPSBtYXhfcmF0aW87CiAJCWJkaS0+bWF4X3Byb3BfZnJhYyA9IChQUk9QX0ZSQUNfQkFTRSAqIG1heF9yYXRpbykgLyAxMDA7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJkaV9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfYmgoJmJkaV9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01NDYsNyArNTMyLDcgQEAKIAkJICogdXAuCiAJCSAqLwogCQlpZiAoYmRpX25yX3JlY2xhaW1hYmxlID4gYmRpX3RocmVzaCkgewotCQkJd3JpdGViYWNrX2lub2Rlcygmd2JjKTsKKwkJCXdyaXRlYmFja19pbm9kZXNfd2JjKCZ3YmMpOwogCQkJcGFnZXNfd3JpdHRlbiArPSB3cml0ZV9jaHVuayAtIHdiYy5ucl90b193cml0ZTsKIAkJCWdldF9kaXJ0eV9saW1pdHMoJmJhY2tncm91bmRfdGhyZXNoLCAmZGlydHlfdGhyZXNoLAogCQkJCSAgICAgICAmYmRpX3RocmVzaCwgYmRpKTsKQEAgLTU3NSw3ICs1NjEsNyBAQAogCQlpZiAocGFnZXNfd3JpdHRlbiA+PSB3cml0ZV9jaHVuaykKIAkJCWJyZWFrOwkJLyogV2UndmUgZG9uZSBvdXIgZHV0eSAqLwogCi0JCWNvbmdlc3Rpb25fd2FpdChCTEtfUldfQVNZTkMsIEhaLzEwKTsKKwkJc2NoZWR1bGVfdGltZW91dCgxKTsKIAl9CiAKIAlpZiAoYmRpX25yX3JlY2xhaW1hYmxlICsgYmRpX25yX3dyaXRlYmFjayA8IGJkaV90aHJlc2ggJiYKQEAgLTU5NCwxMCArNTgwLDEwIEBACiAJICogYmFja2dyb3VuZF90aHJlc2gsIHRvIGtlZXAgdGhlIGFtb3VudCBvZiBkaXJ0eSBtZW1vcnkgbG93LgogCSAqLwogCWlmICgobGFwdG9wX21vZGUgJiYgcGFnZXNfd3JpdHRlbikgfHwKLQkJCSghbGFwdG9wX21vZGUgJiYgKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpCi0JCQkJCSAgKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpCisJICAgICghbGFwdG9wX21vZGUgJiYgKChucl93cml0ZWJhY2sgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKQorCQkJCQkgICsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSkKIAkJCQkJICA+IGJhY2tncm91bmRfdGhyZXNoKSkpCi0JCXBkZmx1c2hfb3BlcmF0aW9uKGJhY2tncm91bmRfd3JpdGVvdXQsIDApOworCQliZGlfc3RhcnRfd3JpdGViYWNrKGJkaSwgbnJfd3JpdGViYWNrKTsKIH0KIAogdm9pZCBzZXRfcGFnZV9kaXJ0eV9iYWxhbmNlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcGFnZV9ta3dyaXRlKQpAQCAtNjEwLDYgKzU5Niw4IEBACiAJfQogfQogCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgYmRwX3JhdGVsaW1pdHMpID0gMDsKKwogLyoqCiAgKiBiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkX25yIC0gYmFsYW5jZSBkaXJ0eSBtZW1vcnkgc3RhdGUKICAqIEBtYXBwaW5nOiBhZGRyZXNzX3NwYWNlIHdoaWNoIHdhcyBkaXJ0aWVkCkBAIC02MjcsNyArNjE1LDYgQEAKIHZvaWQgYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZF9ucihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkJdW5zaWduZWQgbG9uZyBucl9wYWdlc19kaXJ0aWVkKQogewotCXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCByYXRlbGltaXRzKSA9IDA7CiAJdW5zaWduZWQgbG9uZyByYXRlbGltaXQ7CiAJdW5zaWduZWQgbG9uZyAqcDsKIApAQCAtNjQwLDcgKzYyNyw3IEBACiAJICogdGFza3MgaW4gYmFsYW5jZV9kaXJ0eV9wYWdlcygpLiBQZXJpb2QuCiAJICovCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JcCA9ICAmX19nZXRfY3B1X3ZhcihyYXRlbGltaXRzKTsKKwlwID0gICZfX2dldF9jcHVfdmFyKGJkcF9yYXRlbGltaXRzKTsKIAkqcCArPSBucl9wYWdlc19kaXJ0aWVkOwogCWlmICh1bmxpa2VseSgqcCA+PSByYXRlbGltaXQpKSB7CiAJCSpwID0gMDsKQEAgLTY4MSwxNTMgKzY2OCwzNSBAQAogICAgICAgICB9CiB9CiAKLS8qCi0gKiB3cml0ZWJhY2sgYXQgbGVhc3QgX21pbl9wYWdlcywgYW5kIGtlZXAgd3JpdGluZyB1bnRpbCB0aGUgYW1vdW50IG9mIGRpcnR5Ci0gKiBtZW1vcnkgaXMgbGVzcyB0aGFuIHRoZSBiYWNrZ3JvdW5kIHRocmVzaG9sZCwgb3IgdW50aWwgd2UncmUgYWxsIGNsZWFuLgotICovCi1zdGF0aWMgdm9pZCBiYWNrZ3JvdW5kX3dyaXRlb3V0KHVuc2lnbmVkIGxvbmcgX21pbl9wYWdlcykKLXsKLQlsb25nIG1pbl9wYWdlcyA9IF9taW5fcGFnZXM7Ci0Jc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKLQkJLmJkaQkJPSBOVUxMLAotCQkuc3luY19tb2RlCT0gV0JfU1lOQ19OT05FLAotCQkub2xkZXJfdGhhbl90aGlzID0gTlVMTCwKLQkJLm5yX3RvX3dyaXRlCT0gMCwKLQkJLm5vbmJsb2NraW5nCT0gMSwKLQkJLnJhbmdlX2N5Y2xpYwk9IDEsCi0JfTsKLQotCWZvciAoIDsgOyApIHsKLQkJdW5zaWduZWQgbG9uZyBiYWNrZ3JvdW5kX3RocmVzaDsKLQkJdW5zaWduZWQgbG9uZyBkaXJ0eV90aHJlc2g7Ci0KLQkJZ2V0X2RpcnR5X2xpbWl0cygmYmFja2dyb3VuZF90aHJlc2gsICZkaXJ0eV90aHJlc2gsIE5VTEwsIE5VTEwpOwotCQlpZiAoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSkgKwotCQkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSA8IGJhY2tncm91bmRfdGhyZXNoCi0JCQkJJiYgbWluX3BhZ2VzIDw9IDApCi0JCQlicmVhazsKLQkJd2JjLm1vcmVfaW8gPSAwOwotCQl3YmMuZW5jb3VudGVyZWRfY29uZ2VzdGlvbiA9IDA7Ci0JCXdiYy5ucl90b193cml0ZSA9IE1BWF9XUklURUJBQ0tfUEFHRVM7Ci0JCXdiYy5wYWdlc19za2lwcGVkID0gMDsKLQkJd3JpdGViYWNrX2lub2Rlcygmd2JjKTsKLQkJbWluX3BhZ2VzIC09IE1BWF9XUklURUJBQ0tfUEFHRVMgLSB3YmMubnJfdG9fd3JpdGU7Ci0JCWlmICh3YmMubnJfdG9fd3JpdGUgPiAwIHx8IHdiYy5wYWdlc19za2lwcGVkID4gMCkgewotCQkJLyogV3JvdGUgbGVzcyB0aGFuIGV4cGVjdGVkICovCi0JCQlpZiAod2JjLmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gfHwgd2JjLm1vcmVfaW8pCi0JCQkJY29uZ2VzdGlvbl93YWl0KEJMS19SV19BU1lOQywgSFovMTApOwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi0vKgotICogU3RhcnQgd3JpdGViYWNrIG9mIGBucl9wYWdlcycgcGFnZXMuICBJZiBgbnJfcGFnZXMnIGlzIHplcm8sIHdyaXRlIGJhY2sKLSAqIHRoZSB3aG9sZSB3b3JsZC4gIFJldHVybnMgMCBpZiBhIHBkZmx1c2ggdGhyZWFkIHdhcyBkaXNwYXRjaGVkLiAgUmV0dXJucwotICogLTEgaWYgYWxsIHBkZmx1c2ggdGhyZWFkcyB3ZXJlIGJ1c3kuCi0gKi8KLWludCB3YWtldXBfcGRmbHVzaChsb25nIG5yX3BhZ2VzKQotewotCWlmIChucl9wYWdlcyA9PSAwKQotCQlucl9wYWdlcyA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpICsKLQkJCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpOwotCXJldHVybiBwZGZsdXNoX29wZXJhdGlvbihiYWNrZ3JvdW5kX3dyaXRlb3V0LCBucl9wYWdlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdiX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgdW51c2VkKTsKIHN0YXRpYyB2b2lkIGxhcHRvcF90aW1lcl9mbih1bnNpZ25lZCBsb25nIHVudXNlZCk7CiAKLXN0YXRpYyBERUZJTkVfVElNRVIod2JfdGltZXIsIHdiX3RpbWVyX2ZuLCAwLCAwKTsKIHN0YXRpYyBERUZJTkVfVElNRVIobGFwdG9wX21vZGVfd2JfdGltZXIsIGxhcHRvcF90aW1lcl9mbiwgMCwgMCk7CiAKIC8qCi0gKiBQZXJpb2RpYyB3cml0ZWJhY2sgb2YgIm9sZCIgZGF0YS4KLSAqCi0gKiBEZWZpbmUgIm9sZCI6IHRoZSBmaXJzdCB0aW1lIG9uZSBvZiBhbiBpbm9kZSdzIHBhZ2VzIGlzIGRpcnRpZWQsIHdlIG1hcmsgdGhlCi0gKiBkaXJ0eWluZy10aW1lIGluIHRoZSBpbm9kZSdzIGFkZHJlc3Nfc3BhY2UuICBTbyB0aGlzIHBlcmlvZGljIHdyaXRlYmFjayBjb2RlCi0gKiBqdXN0IHdhbGtzIHRoZSBzdXBlcmJsb2NrIGlub2RlIGxpc3QsIHdyaXRpbmcgYmFjayBhbnkgaW5vZGVzIHdoaWNoIGFyZQotICogb2xkZXIgdGhhbiBhIHNwZWNpZmljIHBvaW50IGluIHRpbWUuCi0gKgotICogVHJ5IHRvIHJ1biBvbmNlIHBlciBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwuICBCdXQgaWYgYSB3cml0ZWJhY2sgZXZlbnQKLSAqIHRha2VzIGxvbmdlciB0aGFuIGEgZGlydHlfd3JpdGViYWNrX2ludGVydmFsIGludGVydmFsLCB0aGVuIGxlYXZlIGEKLSAqIG9uZS1zZWNvbmQgZ2FwLgotICoKLSAqIG9sZGVyX3RoYW5fdGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgbnJfdG9fd3JpdGUuICBTbyB3ZSdsbCBvbmx5IHdyaXRlIGJhY2sKLSAqIGFsbCBkaXJ0eSBwYWdlcyBpZiB0aGV5IGFyZSBhbGwgYXR0YWNoZWQgdG8gIm9sZCIgbWFwcGluZ3MuCi0gKi8KLXN0YXRpYyB2b2lkIHdiX2t1cGRhdGUodW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JdW5zaWduZWQgbG9uZyBvbGRlc3RfamlmOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfamlmOwotCXVuc2lnbmVkIGxvbmcgbmV4dF9qaWY7Ci0JbG9uZyBucl90b193cml0ZTsKLQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewotCQkuYmRpCQk9IE5VTEwsCi0JCS5zeW5jX21vZGUJPSBXQl9TWU5DX05PTkUsCi0JCS5vbGRlcl90aGFuX3RoaXMgPSAmb2xkZXN0X2ppZiwKLQkJLm5yX3RvX3dyaXRlCT0gMCwKLQkJLm5vbmJsb2NraW5nCT0gMSwKLQkJLmZvcl9rdXBkYXRlCT0gMSwKLQkJLnJhbmdlX2N5Y2xpYwk9IDEsCi0JfTsKLQotCXN5bmNfc3VwZXJzKCk7Ci0KLQlvbGRlc3RfamlmID0gamlmZmllcyAtIG1zZWNzX3RvX2ppZmZpZXMoZGlydHlfZXhwaXJlX2ludGVydmFsICogMTApOwotCXN0YXJ0X2ppZiA9IGppZmZpZXM7Ci0JbmV4dF9qaWYgPSBzdGFydF9qaWYgKyBtc2Vjc190b19qaWZmaWVzKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCAqIDEwKTsKLQlucl90b193cml0ZSA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpICsKLQkJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUykgKwotCQkJKGlub2Rlc19zdGF0Lm5yX2lub2RlcyAtIGlub2Rlc19zdGF0Lm5yX3VudXNlZCk7Ci0Jd2hpbGUgKG5yX3RvX3dyaXRlID4gMCkgewotCQl3YmMubW9yZV9pbyA9IDA7Ci0JCXdiYy5lbmNvdW50ZXJlZF9jb25nZXN0aW9uID0gMDsKLQkJd2JjLm5yX3RvX3dyaXRlID0gTUFYX1dSSVRFQkFDS19QQUdFUzsKLQkJd3JpdGViYWNrX2lub2Rlcygmd2JjKTsKLQkJaWYgKHdiYy5ucl90b193cml0ZSA+IDApIHsKLQkJCWlmICh3YmMuZW5jb3VudGVyZWRfY29uZ2VzdGlvbiB8fCB3YmMubW9yZV9pbykKLQkJCQljb25nZXN0aW9uX3dhaXQoQkxLX1JXX0FTWU5DLCBIWi8xMCk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7CS8qIEFsbCB0aGUgb2xkIGRhdGEgaXMgd3JpdHRlbiAqLwotCQl9Ci0JCW5yX3RvX3dyaXRlIC09IE1BWF9XUklURUJBQ0tfUEFHRVMgLSB3YmMubnJfdG9fd3JpdGU7Ci0JfQotCWlmICh0aW1lX2JlZm9yZShuZXh0X2ppZiwgamlmZmllcyArIEhaKSkKLQkJbmV4dF9qaWYgPSBqaWZmaWVzICsgSFo7Ci0JaWYgKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCkKLQkJbW9kX3RpbWVyKCZ3Yl90aW1lciwgbmV4dF9qaWYpOwotfQotCi0vKgogICogc3lzY3RsIGhhbmRsZXIgZm9yIC9wcm9jL3N5cy92bS9kaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzCiAgKi8KIGludCBkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzX2hhbmRsZXIoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCXN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbmd0aCwgbG9mZl90ICpwcG9zKQogewogCXByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBmaWxlLCBidWZmZXIsIGxlbmd0aCwgcHBvcyk7Ci0JaWYgKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCkKLQkJbW9kX3RpbWVyKCZ3Yl90aW1lciwgamlmZmllcyArCi0JCQltc2Vjc190b19qaWZmaWVzKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCAqIDEwKSk7Ci0JZWxzZQotCQlkZWxfdGltZXIoJndiX3RpbWVyKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgd2JfdGltZXJfZm4odW5zaWduZWQgbG9uZyB1bnVzZWQpCitzdGF0aWMgdm9pZCBkb19sYXB0b3Bfc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaWYgKHBkZmx1c2hfb3BlcmF0aW9uKHdiX2t1cGRhdGUsIDApIDwgMCkKLQkJbW9kX3RpbWVyKCZ3Yl90aW1lciwgamlmZmllcyArIEhaKTsgLyogZGVsYXkgMSBzZWNvbmQgKi8KLX0KLQotc3RhdGljIHZvaWQgbGFwdG9wX2ZsdXNoKHVuc2lnbmVkIGxvbmcgdW51c2VkKQotewotCXN5c19zeW5jKCk7CisJd2FrZXVwX2ZsdXNoZXJfdGhyZWFkcygwKTsKKwlrZnJlZSh3b3JrKTsKIH0KIAogc3RhdGljIHZvaWQgbGFwdG9wX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgdW51c2VkKQogewotCXBkZmx1c2hfb3BlcmF0aW9uKGxhcHRvcF9mbHVzaCwgMCk7CisJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOworCisJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0FUT01JQyk7CisJaWYgKHdvcmspIHsKKwkJSU5JVF9XT1JLKHdvcmssIGRvX2xhcHRvcF9zeW5jKTsKKwkJc2NoZWR1bGVfd29yayh3b3JrKTsKKwl9CiB9CiAKIC8qCkBAIC05MTAsOCArNzc5LDYgQEAKIHsKIAlpbnQgc2hpZnQ7CiAKLQltb2RfdGltZXIoJndiX3RpbWVyLAotCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCAqIDEwKSk7CiAJd3JpdGViYWNrX3NldF9yYXRlbGltaXQoKTsKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnJhdGVsaW1pdF9uYik7CiAKQEAgLTExNDUsMTIgKzEwMTIsMTAgQEAKIAogCWlmICh3YmMtPm5yX3RvX3dyaXRlIDw9IDApCiAJCXJldHVybiAwOwotCXdiYy0+Zm9yX3dyaXRlcGFnZXMgPSAxOwogCWlmIChtYXBwaW5nLT5hX29wcy0+d3JpdGVwYWdlcykKIAkJcmV0ID0gbWFwcGluZy0+YV9vcHMtPndyaXRlcGFnZXMobWFwcGluZywgd2JjKTsKIAllbHNlCiAJCXJldCA9IGdlbmVyaWNfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMpOwotCXdiYy0+Zm9yX3dyaXRlcGFnZXMgPSAwOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3BkZmx1c2guYyBiL21tL3BkZmx1c2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM1YWM0NC4uMDAwMDAwMAotLS0gYS9tbS9wZGZsdXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyoKLSAqIG1tL3BkZmx1c2guYyAtIHdvcmtlciB0aHJlYWRzIGZvciB3cml0aW5nIGJhY2sgZmlsZXN5c3RlbSBkYXRhCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyLCBMaW51cyBUb3J2YWxkcy4KLSAqCi0gKiAwOUFwcjIwMDIJQW5kcmV3IE1vcnRvbgotICoJCUluaXRpYWwgdmVyc2lvbgotICogMjlGZWIyMDA0CWthb3NAc2dpLmNvbQotICoJCU1vdmUgd29ya2VyIHRocmVhZCBjcmVhdGlvbiB0byBrdGhyZWFkIHRvIGF2b2lkIGNoZXdpbmcKLSAqCQl1cCBzdGFjayBzcGFjZSB3aXRoIG5lc3RlZCBjYWxscyB0byBrZXJuZWxfdGhyZWFkLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgkJLyogTmVlZGVkIGJ5IHdyaXRlYmFjay5oCSAgKi8KLSNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4JLyogUHJvdG90eXBlcyBwZGZsdXNoX29wZXJhdGlvbigpICovCi0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdXNldC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KLQotCi0vKgotICogTWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgcGRmbHVzaCBpbnN0YW5jZXMKLSAqLwotI2RlZmluZSBNSU5fUERGTFVTSF9USFJFQURTCTIKLSNkZWZpbmUgTUFYX1BERkxVU0hfVEhSRUFEUwk4Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0X29uZV9wZGZsdXNoX3RocmVhZCh2b2lkKTsKLQotCi0vKgotICogVGhlIHBkZmx1c2ggdGhyZWFkcyBhcmUgd29ya2VyIHRocmVhZHMgZm9yIHdyaXRpbmcgYmFjayBkaXJ0eSBkYXRhLgotICogSWRlYWxseSwgd2UnZCBsaWtlIG9uZSB0aHJlYWQgcGVyIGFjdGl2ZSBkaXNrIHNwaW5kbGUuICBCdXQgdGhlIGRpc2sKLSAqIHRvcG9sb2d5IGlzIHZlcnkgaGFyZCB0byBkaXZpbmUgYXQgdGhpcyBsZXZlbC4gICBJbnN0ZWFkLCB3ZSB0YWtlCi0gKiBjYXJlIGluIHZhcmlvdXMgcGxhY2VzIHRvIHByZXZlbnQgbW9yZSB0aGFuIG9uZSBwZGZsdXNoIHRocmVhZCBmcm9tCi0gKiBwZXJmb3JtaW5nIHdyaXRlYmFjayBhZ2FpbnN0IGEgc2luZ2xlIGZpbGVzeXN0ZW0uICBwZGZsdXNoIHRocmVhZHMKLSAqIGhhdmUgdGhlIFBGX0ZMVVNIRVIgZmxhZyBzZXQgaW4gY3VycmVudC0+ZmxhZ3MgdG8gYWlkIGluIHRoaXMuCi0gKi8KLQotLyoKLSAqIEFsbCB0aGUgcGRmbHVzaCB0aHJlYWRzLiAgUHJvdGVjdGVkIGJ5IHBkZmx1c2hfbG9jawotICovCi1zdGF0aWMgTElTVF9IRUFEKHBkZmx1c2hfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBkZmx1c2hfbG9jayk7Ci0KLS8qCi0gKiBUaGUgY291bnQgb2YgY3VycmVudGx5LXJ1bm5pbmcgcGRmbHVzaCB0aHJlYWRzLiAgUHJvdGVjdGVkCi0gKiBieSBwZGZsdXNoX2xvY2suCi0gKgotICogUmVhZGFibGUgYnkgc3lzY3RsLCBidXQgbm90IHdyaXRhYmxlLiAgUHVibGlzaGVkIHRvIHVzZXJzcGFjZSBhdAotICogL3Byb2Mvc3lzL3ZtL25yX3BkZmx1c2hfdGhyZWFkcy4KLSAqLwotaW50IG5yX3BkZmx1c2hfdGhyZWFkcyA9IDA7Ci0KLS8qCi0gKiBUaGUgdGltZSBhdCB3aGljaCB0aGUgcGRmbHVzaCB0aHJlYWQgcG9vbCBsYXN0IHdlbnQgZW1wdHkKLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9lbXB0eV9qaWZzOwotCi0vKgotICogVGhlIHBkZmx1c2ggdGhyZWFkLgotICoKLSAqIFRocmVhZCBwb29sIG1hbmFnZW1lbnQgYWxnb3JpdGhtOgotICogCi0gKiAtIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiBwZGZsdXNoIGluc3RhbmNlcyBhcmUgYm91bmQKLSAqICAgYnkgTUlOX1BERkxVU0hfVEhSRUFEUyBhbmQgTUFYX1BERkxVU0hfVEhSRUFEUy4KLSAqIAotICogLSBJZiB0aGVyZSBoYXZlIGJlZW4gbm8gaWRsZSBwZGZsdXNoIGluc3RhbmNlcyBmb3IgMSBzZWNvbmQsIGNyZWF0ZQotICogICBhIG5ldyBvbmUuCi0gKiAKLSAqIC0gSWYgdGhlIGxlYXN0LXJlY2VudGx5LXdlbnQtdG8tc2xlZXAgcGRmbHVzaCB0aHJlYWQgaGFzIGJlZW4gYXNsZWVwCi0gKiAgIGZvciBtb3JlIHRoYW4gb25lIHNlY29uZCwgdGVybWluYXRlIGEgdGhyZWFkLgotICovCi0KLS8qCi0gKiBBIHN0cnVjdHVyZSBmb3IgcGFzc2luZyB3b3JrIHRvIGEgcGRmbHVzaCB0aHJlYWQuICBBbHNvIGZvciBwYXNzaW5nCi0gKiBzdGF0ZSBpbmZvcm1hdGlvbiBiZXR3ZWVuIHBkZmx1c2ggdGhyZWFkcy4gIFByb3RlY3RlZCBieSBwZGZsdXNoX2xvY2suCi0gKi8KLXN0cnVjdCBwZGZsdXNoX3dvcmsgewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqd2hvOwkvKiBUaGUgdGhyZWFkICovCi0Jdm9pZCAoKmZuKSh1bnNpZ25lZCBsb25nKTsJLyogQSBjYWxsYmFjayBmdW5jdGlvbiAqLwotCXVuc2lnbmVkIGxvbmcgYXJnMDsJCS8qIEFuIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFjayAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIE9uIHBkZmx1c2hfbGlzdCwgd2hlbiBpZGxlICovCi0JdW5zaWduZWQgbG9uZyB3aGVuX2lfd2VudF90b19zbGVlcDsKLX07Ci0KLXN0YXRpYyBpbnQgX19wZGZsdXNoKHN0cnVjdCBwZGZsdXNoX3dvcmsgKm15X3dvcmspCi17Ci0JY3VycmVudC0+ZmxhZ3MgfD0gUEZfRkxVU0hFUiB8IFBGX1NXQVBXUklURTsKLQlzZXRfZnJlZXphYmxlKCk7Ci0JbXlfd29yay0+Zm4gPSBOVUxMOwotCW15X3dvcmstPndobyA9IGN1cnJlbnQ7Ci0JSU5JVF9MSVNUX0hFQUQoJm15X3dvcmstPmxpc3QpOwotCi0Jc3Bpbl9sb2NrX2lycSgmcGRmbHVzaF9sb2NrKTsKLQlmb3IgKCA7IDsgKSB7Ci0JCXN0cnVjdCBwZGZsdXNoX3dvcmsgKnBkZjsKLQotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlsaXN0X21vdmUoJm15X3dvcmstPmxpc3QsICZwZGZsdXNoX2xpc3QpOwotCQlteV93b3JrLT53aGVuX2lfd2VudF90b19zbGVlcCA9IGppZmZpZXM7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcGRmbHVzaF9sb2NrKTsKLQkJc2NoZWR1bGUoKTsKLQkJdHJ5X3RvX2ZyZWV6ZSgpOwotCQlzcGluX2xvY2tfaXJxKCZwZGZsdXNoX2xvY2spOwotCQlpZiAoIWxpc3RfZW1wdHkoJm15X3dvcmstPmxpc3QpKSB7Ci0JCQkvKgotCQkJICogU29tZW9uZSB3b2tlIHVzIHVwLCBidXQgd2l0aG91dCByZW1vdmluZyBvdXIgY29udHJvbAotCQkJICogc3RydWN0dXJlIGZyb20gdGhlIGdsb2JhbCBsaXN0LiAgc3dzdXNwIHdpbGwgZG8gdGhpcwotCQkJICogaW4gdHJ5X3RvX2ZyZWV6ZSgpLT5yZWZyaWdlcmF0b3IoKS4gIEhhbmRsZSBpdC4KLQkJCSAqLwotCQkJbXlfd29yay0+Zm4gPSBOVUxMOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKG15X3dvcmstPmZuID09IE5VTEwpIHsKLQkJCXByaW50aygicGRmbHVzaDogYm9ndXMgd2FrZXVwXG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmcGRmbHVzaF9sb2NrKTsKLQotCQkoKm15X3dvcmstPmZuKShteV93b3JrLT5hcmcwKTsKLQotCQlzcGluX2xvY2tfaXJxKCZwZGZsdXNoX2xvY2spOwotCi0JCS8qCi0JCSAqIFRocmVhZCBjcmVhdGlvbjogRm9yIGhvdyBsb25nIGhhdmUgdGhlcmUgYmVlbiB6ZXJvCi0JCSAqIGF2YWlsYWJsZSB0aHJlYWRzPwotCQkgKgotCQkgKiBUbyB0aHJvdHRsZSBjcmVhdGlvbiwgd2UgcmVzZXQgbGFzdF9lbXB0eV9qaWZzLgotCQkgKi8KLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbGFzdF9lbXB0eV9qaWZzICsgMSAqIEhaKSkgewotCQkJaWYgKGxpc3RfZW1wdHkoJnBkZmx1c2hfbGlzdCkpIHsKLQkJCQlpZiAobnJfcGRmbHVzaF90aHJlYWRzIDwgTUFYX1BERkxVU0hfVEhSRUFEUykgewotCQkJCQlsYXN0X2VtcHR5X2ppZnMgPSBqaWZmaWVzOwotCQkJCQlucl9wZGZsdXNoX3RocmVhZHMrKzsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxKCZwZGZsdXNoX2xvY2spOwotCQkJCQlzdGFydF9vbmVfcGRmbHVzaF90aHJlYWQoKTsKLQkJCQkJc3Bpbl9sb2NrX2lycSgmcGRmbHVzaF9sb2NrKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlteV93b3JrLT5mbiA9IE5VTEw7Ci0KLQkJLyoKLQkJICogVGhyZWFkIGRlc3RydWN0aW9uOiBGb3IgaG93IGxvbmcgaGFzIHRoZSBzbGVlcGllc3QKLQkJICogdGhyZWFkIHNsZXB0PwotCQkgKi8KLQkJaWYgKGxpc3RfZW1wdHkoJnBkZmx1c2hfbGlzdCkpCi0JCQljb250aW51ZTsKLQkJaWYgKG5yX3BkZmx1c2hfdGhyZWFkcyA8PSBNSU5fUERGTFVTSF9USFJFQURTKQotCQkJY29udGludWU7Ci0JCXBkZiA9IGxpc3RfZW50cnkocGRmbHVzaF9saXN0LnByZXYsIHN0cnVjdCBwZGZsdXNoX3dvcmssIGxpc3QpOwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBwZGYtPndoZW5faV93ZW50X3RvX3NsZWVwICsgMSAqIEhaKSkgewotCQkJLyogTGltaXQgZXhpdCByYXRlICovCi0JCQlwZGYtPndoZW5faV93ZW50X3RvX3NsZWVwID0gamlmZmllczsKLQkJCWJyZWFrOwkJCQkJLyogZXhldW50ICovCi0JCX0KLQl9Ci0JbnJfcGRmbHVzaF90aHJlYWRzLS07Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwZGZsdXNoX2xvY2spOwotCXJldHVybiAwOwotfQotCi0vKgotICogT2YgY291cnNlLCBteV93b3JrIHdhbnRzIHRvIGJlIGp1c3QgYSBsb2NhbCBpbiBfX3BkZmx1c2goKS4gIEl0IGlzCi0gKiBzZXBhcmF0ZWQgb3V0IGluIHRoaXMgbWFubmVyIHRvIGhvcGVmdWxseSBwcmV2ZW50IHRoZSBjb21waWxlciBmcm9tCi0gKiBwZXJmb3JtaW5nIHVuZm9ydHVuYXRlIG9wdGltaXNhdGlvbnMgYWdhaW5zdCB0aGUgYXV0byB2YXJpYWJsZXMuICBCZWNhdXNlCi0gKiB0aGVzZSBhcmUgdmlzaWJsZSB0byBvdGhlciB0YXNrcyBhbmQgQ1BVcy4gIChObyBwcm9ibGVtIGhhcyBhY3R1YWxseQotICogYmVlbiBvYnNlcnZlZC4gIFRoaXMgaXMganVzdCBwYXJhbm9pYSkuCi0gKi8KLXN0YXRpYyBpbnQgcGRmbHVzaCh2b2lkICpkdW1teSkKLXsKLQlzdHJ1Y3QgcGRmbHVzaF93b3JrIG15X3dvcms7Ci0JY3B1bWFza192YXJfdCBjcHVzX2FsbG93ZWQ7Ci0KLQkvKgotCSAqIFNpbmNlIHRoZSBjYWxsZXIgZG9lc24ndCBldmVuIGNoZWNrIGt0aHJlYWRfcnVuKCkgd29ya2VkLCBsZXQncyBub3QKLQkgKiBmcmVhayBvdXQgdG9vIG11Y2ggaWYgdGhpcyBmYWlscy4KLQkgKi8KLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZjcHVzX2FsbG93ZWQsIEdGUF9LRVJORUwpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInBkZmx1c2ggZmFpbGVkIHRvIGFsbG9jYXRlIGNwdW1hc2tcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgotCSAqIHBkZmx1c2ggY2FuIHNwZW5kIGEgbG90IG9mIHRpbWUgZG9pbmcgZW5jcnlwdGlvbiB2aWEgZG0tY3J5cHQuICBXZQotCSAqIGRvbid0IHdhbnQgdG8gZG8gdGhhdCBhdCBrZXZlbnRkJ3MgcHJpb3JpdHkuCi0JICovCi0Jc2V0X3VzZXJfbmljZShjdXJyZW50LCAwKTsKLQotCS8qCi0JICogU29tZSBjb25maWdzIHB1dCBvdXIgcGFyZW50IGt0aHJlYWQgaW4gYSBsaW1pdGVkIGNwdXNldCwKLQkgKiB3aGljaCBrdGhyZWFkKCkgb3ZlcnJpZGVzLCBmb3JjaW5nIGNwdXNfYWxsb3dlZCA9PSBjcHVfYWxsX21hc2suCi0JICogT3VyIG5lZWRzIGFyZSBtb3JlIG1vZGVzdCAtIGN1dCBiYWNrIHRvIG91ciBjcHVzZXRzIGNwdXNfYWxsb3dlZC4KLQkgKiBUaGlzIGlzIG5lZWRlZCBhcyBwZGZsdXNoJ3MgYXJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQgYW5kIGRlc3Ryb3llZC4KLQkgKiBUaGUgYm9vdHRpbWUgcGRmbHVzaCdzIGFyZSBlYXNpbHkgcGxhY2VkIHcvbyB0aGVzZSAyIGxpbmVzLgotCSAqLwotCWNwdXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgY3B1c19hbGxvd2VkKTsKLQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVzX2FsbG93ZWQpOwotCWZyZWVfY3B1bWFza192YXIoY3B1c19hbGxvd2VkKTsKLQotCXJldHVybiBfX3BkZmx1c2goJm15X3dvcmspOwotfQotCi0vKgotICogQXR0ZW1wdCB0byB3YWtlIHVwIGEgcGRmbHVzaCB0aHJlYWQsIGFuZCBnZXQgaXQgdG8gZG8gc29tZSB3b3JrIGZvciB5b3UuCi0gKiBSZXR1cm5zIHplcm8gaWYgaXQgaW5kZWVkIG1hbmFnZWQgdG8gZmluZCBhIHdvcmtlciB0aHJlYWQsIGFuZCBwYXNzZWQgeW91cgotICogcGF5bG9hZCB0byBpdC4KLSAqLwotaW50IHBkZmx1c2hfb3BlcmF0aW9uKHZvaWQgKCpmbikodW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgYXJnMCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0JQlVHX09OKGZuID09IE5VTEwpOwkvKiBIYXJkIHRvIGRpYWdub3NlIGlmIGl0J3MgZGVmZXJyZWQgKi8KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwZGZsdXNoX2xvY2ssIGZsYWdzKTsKLQlpZiAobGlzdF9lbXB0eSgmcGRmbHVzaF9saXN0KSkgewotCQlyZXQgPSAtMTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgcGRmbHVzaF93b3JrICpwZGY7Ci0KLQkJcGRmID0gbGlzdF9lbnRyeShwZGZsdXNoX2xpc3QubmV4dCwgc3RydWN0IHBkZmx1c2hfd29yaywgbGlzdCk7Ci0JCWxpc3RfZGVsX2luaXQoJnBkZi0+bGlzdCk7Ci0JCWlmIChsaXN0X2VtcHR5KCZwZGZsdXNoX2xpc3QpKQotCQkJbGFzdF9lbXB0eV9qaWZzID0gamlmZmllczsKLQkJcGRmLT5mbiA9IGZuOwotCQlwZGYtPmFyZzAgPSBhcmcwOwotCQl3YWtlX3VwX3Byb2Nlc3MocGRmLT53aG8pOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGZsdXNoX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0X29uZV9wZGZsdXNoX3RocmVhZCh2b2lkKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqazsKLQotCWsgPSBrdGhyZWFkX3J1bihwZGZsdXNoLCBOVUxMLCAicGRmbHVzaCIpOwotCWlmICh1bmxpa2VseShJU19FUlIoaykpKSB7Ci0JCXNwaW5fbG9ja19pcnEoJnBkZmx1c2hfbG9jayk7Ci0JCW5yX3BkZmx1c2hfdGhyZWFkcy0tOwotCQlzcGluX3VubG9ja19pcnEoJnBkZmx1c2hfbG9jayk7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBwZGZsdXNoX2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQotCS8qCi0JICogUHJlLXNldCBucl9wZGZsdXNoX3RocmVhZHMuLi4gIElmIHdlIGZhaWwgdG8gY3JlYXRlLAotCSAqIHRoZSBjb3VudCB3aWxsIGJlIGRlY3JlbWVudGVkLgotCSAqLwotCW5yX3BkZmx1c2hfdGhyZWFkcyA9IE1JTl9QREZMVVNIX1RIUkVBRFM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUlOX1BERkxVU0hfVEhSRUFEUzsgaSsrKQotCQlzdGFydF9vbmVfcGRmbHVzaF90aHJlYWQoKTsKLQlyZXR1cm4gMDsKLX0KLQotbW9kdWxlX2luaXQocGRmbHVzaF9pbml0KTsKZGlmZiAtLWdpdCBhL21tL3BlcmNwdS5jIGIvbW0vcGVyY3B1LmMKaW5kZXggMzMxMWM4OS4uNDNkOGNhYyAxMDA2NDQKLS0tIGEvbW0vcGVyY3B1LmMKKysrIGIvbW0vcGVyY3B1LmMKQEAgLTgsMTIgKzgsMTMgQEAKICAqCiAgKiBUaGlzIGlzIHBlcmNwdSBhbGxvY2F0b3Igd2hpY2ggY2FuIGhhbmRsZSBib3RoIHN0YXRpYyBhbmQgZHluYW1pYwogICogYXJlYXMuICBQZXJjcHUgYXJlYXMgYXJlIGFsbG9jYXRlZCBpbiBjaHVua3MgaW4gdm1hbGxvYyBhcmVhLiAgRWFjaAotICogY2h1bmsgaXMgY29uc2lzdGVkIG9mIG5yX2NwdV9pZHMgdW5pdHMgYW5kIHRoZSBmaXJzdCBjaHVuayBpcyB1c2VkCi0gKiBmb3Igc3RhdGljIHBlcmNwdSB2YXJpYWJsZXMgaW4gdGhlIGtlcm5lbCBpbWFnZSAoc3BlY2lhbCBib290IHRpbWUKLSAqIGFsbG9jL2luaXQgaGFuZGxpbmcgbmVjZXNzYXJ5IGFzIHRoZXNlIGFyZWFzIG5lZWQgdG8gYmUgYnJvdWdodCB1cAotICogYmVmb3JlIGFsbG9jYXRpb24gc2VydmljZXMgYXJlIHJ1bm5pbmcpLiAgVW5pdCBncm93cyBhcyBuZWNlc3NhcnkKLSAqIGFuZCBhbGwgdW5pdHMgZ3JvdyBvciBzaHJpbmsgaW4gdW5pc29uLiAgV2hlbiBhIGNodW5rIGlzIGZpbGxlZCB1cCwKLSAqIGFub3RoZXIgY2h1bmsgaXMgYWxsb2NhdGVkLiAgaWUuIGluIHZtYWxsb2MgYXJlYQorICogY2h1bmsgaXMgY29uc2lzdGVkIG9mIGJvb3QtdGltZSBkZXRlcm1pbmVkIG51bWJlciBvZiB1bml0cyBhbmQgdGhlCisgKiBmaXJzdCBjaHVuayBpcyB1c2VkIGZvciBzdGF0aWMgcGVyY3B1IHZhcmlhYmxlcyBpbiB0aGUga2VybmVsIGltYWdlCisgKiAoc3BlY2lhbCBib290IHRpbWUgYWxsb2MvaW5pdCBoYW5kbGluZyBuZWNlc3NhcnkgYXMgdGhlc2UgYXJlYXMKKyAqIG5lZWQgdG8gYmUgYnJvdWdodCB1cCBiZWZvcmUgYWxsb2NhdGlvbiBzZXJ2aWNlcyBhcmUgcnVubmluZykuCisgKiBVbml0IGdyb3dzIGFzIG5lY2Vzc2FyeSBhbmQgYWxsIHVuaXRzIGdyb3cgb3Igc2hyaW5rIGluIHVuaXNvbi4KKyAqIFdoZW4gYSBjaHVuayBpcyBmaWxsZWQgdXAsIGFub3RoZXIgY2h1bmsgaXMgYWxsb2NhdGVkLiAgaWUuIGluCisgKiB2bWFsbG9jIGFyZWEKICAqCiAgKiAgYzAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSAgICAgICAgICAgICAgICAgICAgICAgICBjMgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgLS0tLS0tLS0tLS0tCkBAIC0yMiwxMSArMjMsMTMgQEAKICAqCiAgKiBBbGxvY2F0aW9uIGlzIGRvbmUgaW4gb2Zmc2V0LXNpemUgYXJlYXMgb2Ygc2luZ2xlIHVuaXQgc3BhY2UuICBJZSwKICAqIGFuIGFyZWEgb2YgNTEyIGJ5dGVzIGF0IDZrIGluIGMxIG9jY3VwaWVzIDUxMiBieXRlcyBhdCA2ayBvZiBjMTp1MCwKLSAqIGMxOnUxLCBjMTp1MiBhbmQgYzE6dTMuICBQZXJjcHUgYWNjZXNzIGNhbiBiZSBkb25lIGJ5IGNvbmZpZ3VyaW5nCi0gKiBwZXJjcHUgYmFzZSByZWdpc3RlcnMgcGNwdV91bml0X3NpemUgYXBhcnQuCisgKiBjMTp1MSwgYzE6dTIgYW5kIGMxOnUzLiAgT24gVU1BLCB1bml0cyBjb3JyZXNwb25kcyBkaXJlY3RseSB0bworICogY3B1cy4gIE9uIE5VTUEsIHRoZSBtYXBwaW5nIGNhbiBiZSBub24tbGluZWFyIGFuZCBldmVuIHNwYXJzZS4KKyAqIFBlcmNwdSBhY2Nlc3MgY2FuIGJlIGRvbmUgYnkgY29uZmlndXJpbmcgcGVyY3B1IGJhc2UgcmVnaXN0ZXJzCisgKiBhY2NvcmRpbmcgdG8gY3B1IHRvIHVuaXQgbWFwcGluZyBhbmQgcGNwdV91bml0X3NpemUuCiAgKgotICogVGhlcmUgYXJlIHVzdWFsbHkgbWFueSBzbWFsbCBwZXJjcHUgYWxsb2NhdGlvbnMgbWFueSBvZiB0aGVtIGFzCi0gKiBzbWFsbCBhcyA0IGJ5dGVzLiAgVGhlIGFsbG9jYXRvciBvcmdhbml6ZXMgY2h1bmtzIGludG8gbGlzdHMKKyAqIFRoZXJlIGFyZSB1c3VhbGx5IG1hbnkgc21hbGwgcGVyY3B1IGFsbG9jYXRpb25zIG1hbnkgb2YgdGhlbSBiZWluZworICogYXMgc21hbGwgYXMgNCBieXRlcy4gIFRoZSBhbGxvY2F0b3Igb3JnYW5pemVzIGNodW5rcyBpbnRvIGxpc3RzCiAgKiBhY2NvcmRpbmcgdG8gZnJlZSBzaXplIGFuZCB0cmllcyB0byBhbGxvY2F0ZSBmcm9tIHRoZSBmdWxsZXN0IG9uZS4KICAqIEVhY2ggY2h1bmsga2VlcHMgdGhlIG1heGltdW0gY29udGlndW91cyBhcmVhIHNpemUgaGludCB3aGljaCBpcwogICogZ3VhcmFudGVlZCB0byBiZSBlcWF1bCB0byBvciBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBjb250aWd1b3VzCkBAIC00Myw3ICs0Niw3IEBACiAgKgogICogVG8gdXNlIHRoaXMgYWxsb2NhdG9yLCBhcmNoIGNvZGUgc2hvdWxkIGRvIHRoZSBmb2xsb3dpbmdzLgogICoKLSAqIC0gZGVmaW5lIENPTkZJR19IQVZFX0RZTkFNSUNfUEVSX0NQVV9BUkVBCisgKiAtIGRyb3AgQ09ORklHX0hBVkVfTEVHQUNZX1BFUl9DUFVfQVJFQQogICoKICAqIC0gZGVmaW5lIF9fYWRkcl90b19wY3B1X3B0cigpIGFuZCBfX3BjcHVfcHRyX3RvX2FkZHIoKSB0byB0cmFuc2xhdGUKICAqICAgcmVndWxhciBhZGRyZXNzIHRvIHBlcmNwdSBwb2ludGVyIGFuZCBiYWNrIGlmIHRoZXkgbmVlZCB0byBiZQpAQCAtNTUsNyArNTgsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpAQCAtODksMjUgKzk0LDM4IEBACiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwkJLyogbGlua2VkIHRvIHBjcHVfc2xvdCBsaXN0cyAqLwogCWludAkJCWZyZWVfc2l6ZTsJLyogZnJlZSBieXRlcyBpbiB0aGUgY2h1bmsgKi8KIAlpbnQJCQljb250aWdfaGludDsJLyogbWF4IGNvbnRpZ3VvdXMgc2l6ZSBoaW50ICovCi0Jc3RydWN0IHZtX3N0cnVjdAkqdm07CQkvKiBtYXBwZWQgdm1hbGxvYyByZWdpb24gKi8KKwl2b2lkCQkJKmJhc2VfYWRkcjsJLyogYmFzZSBhZGRyZXNzIG9mIHRoaXMgY2h1bmsgKi8KIAlpbnQJCQltYXBfdXNlZDsJLyogIyBvZiBtYXAgZW50cmllcyB1c2VkICovCiAJaW50CQkJbWFwX2FsbG9jOwkvKiAjIG9mIG1hcCBlbnRyaWVzIGFsbG9jYXRlZCAqLwogCWludAkJCSptYXA7CQkvKiBhbGxvY2F0aW9uIG1hcCAqLworCXN0cnVjdCB2bV9zdHJ1Y3QJKip2bXM7CQkvKiBtYXBwZWQgdm1hbGxvYyByZWdpb25zICovCiAJYm9vbAkJCWltbXV0YWJsZTsJLyogbm8gW2RlXXBvcHVsYXRpb24gYWxsb3dlZCAqLwotCXN0cnVjdCBwYWdlCQkqKnBhZ2U7CQkvKiBwb2ludHMgdG8gcGFnZSBhcnJheSAqLwotCXN0cnVjdCBwYWdlCQkqcGFnZV9hcltdOwkvKiAjY3B1cyAqIFVOSVRfUEFHRVMgKi8KKwl1bnNpZ25lZCBsb25nCQlwb3B1bGF0ZWRbXTsJLyogcG9wdWxhdGVkIGJpdG1hcCAqLwogfTsKIAogc3RhdGljIGludCBwY3B1X3VuaXRfcGFnZXMgX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQgcGNwdV91bml0X3NpemUgX19yZWFkX21vc3RseTsKLXN0YXRpYyBpbnQgcGNwdV9jaHVua19zaXplIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgaW50IHBjcHVfbnJfdW5pdHMgX19yZWFkX21vc3RseTsKK3N0YXRpYyBpbnQgcGNwdV9hdG9tX3NpemUgX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQgcGNwdV9ucl9zbG90cyBfX3JlYWRfbW9zdGx5Owogc3RhdGljIHNpemVfdCBwY3B1X2NodW5rX3N0cnVjdF9zaXplIF9fcmVhZF9tb3N0bHk7CiAKKy8qIGNwdXMgd2l0aCB0aGUgbG93ZXN0IGFuZCBoaWdoZXN0IHVuaXQgbnVtYmVycyAqLworc3RhdGljIHVuc2lnbmVkIGludCBwY3B1X2ZpcnN0X3VuaXRfY3B1IF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgdW5zaWduZWQgaW50IHBjcHVfbGFzdF91bml0X2NwdSBfX3JlYWRfbW9zdGx5OworCiAvKiB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgY2h1bmsgd2hpY2ggc3RhcnRzIHdpdGggdGhlIGtlcm5lbCBzdGF0aWMgYXJlYSAqLwogdm9pZCAqcGNwdV9iYXNlX2FkZHIgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKHBjcHVfYmFzZV9hZGRyKTsKIAorc3RhdGljIGNvbnN0IGludCAqcGNwdV91bml0X21hcCBfX3JlYWRfbW9zdGx5OwkJLyogY3B1IC0+IHVuaXQgKi8KK2NvbnN0IHVuc2lnbmVkIGxvbmcgKnBjcHVfdW5pdF9vZmZzZXRzIF9fcmVhZF9tb3N0bHk7CS8qIGNwdSAtPiB1bml0IG9mZnNldCAqLworCisvKiBncm91cCBpbmZvcm1hdGlvbiwgdXNlZCBmb3Igdm0gYWxsb2NhdGlvbiAqLworc3RhdGljIGludCBwY3B1X25yX2dyb3VwcyBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnBjcHVfZ3JvdXBfb2Zmc2V0cyBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGNvbnN0IHNpemVfdCAqcGNwdV9ncm91cF9zaXplcyBfX3JlYWRfbW9zdGx5OworCiAvKgogICogVGhlIGZpcnN0IGNodW5rIHdoaWNoIGFsd2F5cyBleGlzdHMuICBOb3RlIHRoYXQgdW5saWtlIG90aGVyCiAgKiBjaHVua3MsIHRoaXMgb25lIGNhbiBiZSBhbGxvY2F0ZWQgYW5kIG1hcHBlZCBpbiBzZXZlcmFsIGRpZmZlcmVudApAQCAtMTI5LDkgKzE0Nyw5IEBACiAgKiBTeW5jaHJvbml6YXRpb24gcnVsZXMuCiAgKgogICogVGhlcmUgYXJlIHR3byBsb2NrcyAtIHBjcHVfYWxsb2NfbXV0ZXggYW5kIHBjcHVfbG9jay4gIFRoZSBmb3JtZXIKLSAqIHByb3RlY3RzIGFsbG9jYXRpb24vcmVjbGFpbSBwYXRocywgY2h1bmtzIGFuZCBjaHVuay0+cGFnZSBhcnJheXMuCi0gKiBUaGUgbGF0dGVyIGlzIGEgc3BpbmxvY2sgYW5kIHByb3RlY3RzIHRoZSBpbmRleCBkYXRhIHN0cnVjdHVyZXMgLQotICogY2h1bmsgc2xvdHMsIGNodW5rcyBhbmQgYXJlYSBtYXBzIGluIGNodW5rcy4KKyAqIHByb3RlY3RzIGFsbG9jYXRpb24vcmVjbGFpbSBwYXRocywgY2h1bmtzLCBwb3B1bGF0ZWQgYml0bWFwIGFuZAorICogdm1hbGxvYyBtYXBwaW5nLiAgVGhlIGxhdHRlciBpcyBhIHNwaW5sb2NrIGFuZCBwcm90ZWN0cyB0aGUgaW5kZXgKKyAqIGRhdGEgc3RydWN0dXJlcyAtIGNodW5rIHNsb3RzLCBjaHVua3MgYW5kIGFyZWEgbWFwcyBpbiBjaHVua3MuCiAgKgogICogRHVyaW5nIGFsbG9jYXRpb24sIHBjcHVfYWxsb2NfbXV0ZXggaXMga2VwdCBsb2NrZWQgYWxsIHRoZSB0aW1lIGFuZAogICogcGNwdV9sb2NrIGlzIGdyYWJiZWQgYW5kIHJlbGVhc2VkIGFzIG5lY2Vzc2FyeS4gIEFsbCBhY3R1YWwgbWVtb3J5CkBAIC0xNzgsMzEgKzE5NiwyMyBAQAogCiBzdGF0aWMgaW50IHBjcHVfcGFnZV9pZHgodW5zaWduZWQgaW50IGNwdSwgaW50IHBhZ2VfaWR4KQogewotCXJldHVybiBjcHUgKiBwY3B1X3VuaXRfcGFnZXMgKyBwYWdlX2lkeDsKLX0KLQotc3RhdGljIHN0cnVjdCBwYWdlICoqcGNwdV9jaHVua19wYWdlcChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGNwdSwgaW50IHBhZ2VfaWR4KQotewotCXJldHVybiAmY2h1bmstPnBhZ2VbcGNwdV9wYWdlX2lkeChjcHUsIHBhZ2VfaWR4KV07CisJcmV0dXJuIHBjcHVfdW5pdF9tYXBbY3B1XSAqIHBjcHVfdW5pdF9wYWdlcyArIHBhZ2VfaWR4OwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwY3B1X2NodW5rX2FkZHIoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAogCQkJCSAgICAgdW5zaWduZWQgaW50IGNwdSwgaW50IHBhZ2VfaWR4KQogewotCXJldHVybiAodW5zaWduZWQgbG9uZyljaHVuay0+dm0tPmFkZHIgKwotCQkocGNwdV9wYWdlX2lkeChjcHUsIHBhZ2VfaWR4KSA8PCBQQUdFX1NISUZUKTsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpY2h1bmstPmJhc2VfYWRkciArIHBjcHVfdW5pdF9vZmZzZXRzW2NwdV0gKworCQkocGFnZV9pZHggPDwgUEFHRV9TSElGVCk7CiB9CiAKLXN0YXRpYyBib29sIHBjcHVfY2h1bmtfcGFnZV9vY2N1cGllZChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssCi0JCQkJICAgICBpbnQgcGFnZV9pZHgpCitzdGF0aWMgc3RydWN0IHBhZ2UgKnBjcHVfY2h1bmtfcGFnZShzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssCisJCQkJICAgIHVuc2lnbmVkIGludCBjcHUsIGludCBwYWdlX2lkeCkKIHsKLQkvKgotCSAqIEFueSBwb3NzaWJsZSBjcHUgaWQgY2FuIGJlIHVzZWQgaGVyZSwgc28gdGhlcmUncyBubyBuZWVkIHRvCi0JICogd29ycnkgYWJvdXQgcHJlZW1wdGlvbiBvciBjcHUgaG90cGx1Zy4KLQkgKi8KLQlyZXR1cm4gKnBjcHVfY2h1bmtfcGFnZXAoY2h1bmssIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksCi0JCQkJIHBhZ2VfaWR4KSAhPSBOVUxMOworCS8qIG11c3Qgbm90IGJlIHVzZWQgb24gcHJlLW1hcHBlZCBjaHVuayAqLworCVdBUk5fT04oY2h1bmstPmltbXV0YWJsZSk7CisKKwlyZXR1cm4gdm1hbGxvY190b19wYWdlKCh2b2lkICopcGNwdV9jaHVua19hZGRyKGNodW5rLCBjcHUsIHBhZ2VfaWR4KSk7CiB9CiAKIC8qIHNldCB0aGUgcG9pbnRlciB0byBhIGNodW5rIGluIGEgcGFnZSBzdHJ1Y3QgKi8KQEAgLTIxNyw2ICsyMjcsMzQgQEAKIAlyZXR1cm4gKHN0cnVjdCBwY3B1X2NodW5rICopcGFnZS0+aW5kZXg7CiB9CiAKK3N0YXRpYyB2b2lkIHBjcHVfbmV4dF91bnBvcChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCAqcnMsIGludCAqcmUsIGludCBlbmQpCit7CisJKnJzID0gZmluZF9uZXh0X3plcm9fYml0KGNodW5rLT5wb3B1bGF0ZWQsIGVuZCwgKnJzKTsKKwkqcmUgPSBmaW5kX25leHRfYml0KGNodW5rLT5wb3B1bGF0ZWQsIGVuZCwgKnJzICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjcHVfbmV4dF9wb3Aoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgKnJzLCBpbnQgKnJlLCBpbnQgZW5kKQoreworCSpycyA9IGZpbmRfbmV4dF9iaXQoY2h1bmstPnBvcHVsYXRlZCwgZW5kLCAqcnMpOworCSpyZSA9IGZpbmRfbmV4dF96ZXJvX2JpdChjaHVuay0+cG9wdWxhdGVkLCBlbmQsICpycyArIDEpOworfQorCisvKgorICogKFVuKXBvcHVsYXRlZCBwYWdlIHJlZ2lvbiBpdGVyYXRvcnMuICBJdGVyYXRlIG92ZXIgKHVuKXBvcHVsYXRlZAorICogcGFnZSByZWdpb25zIGJldHdlbiBAc3RhcnQgYW5kIEBlbmQgaW4gQGNodW5rLiAgQHJzIGFuZCBAcmUgc2hvdWxkCisgKiBiZSBpbnRlZ2VyIHZhcmlhYmxlcyBhbmQgd2lsbCBiZSBzZXQgdG8gc3RhcnQgYW5kIGVuZCBwYWdlIGluZGV4IG9mCisgKiB0aGUgY3VycmVudCByZWdpb24uCisgKi8KKyNkZWZpbmUgcGNwdV9mb3JfZWFjaF91bnBvcF9yZWdpb24oY2h1bmssIHJzLCByZSwgc3RhcnQsIGVuZCkJCSAgICBcCisJZm9yICgocnMpID0gKHN0YXJ0KSwgcGNwdV9uZXh0X3VucG9wKChjaHVuayksICYocnMpLCAmKHJlKSwgKGVuZCkpOyBcCisJICAgICAocnMpIDwgKHJlKTsJCQkJCQkgICAgXAorCSAgICAgKHJzKSA9IChyZSkgKyAxLCBwY3B1X25leHRfdW5wb3AoKGNodW5rKSwgJihycyksICYocmUpLCAoZW5kKSkpCisKKyNkZWZpbmUgcGNwdV9mb3JfZWFjaF9wb3BfcmVnaW9uKGNodW5rLCBycywgcmUsIHN0YXJ0LCBlbmQpCQkgICAgXAorCWZvciAoKHJzKSA9IChzdGFydCksIHBjcHVfbmV4dF9wb3AoKGNodW5rKSwgJihycyksICYocmUpLCAoZW5kKSk7ICAgXAorCSAgICAgKHJzKSA8IChyZSk7CQkJCQkJICAgIFwKKwkgICAgIChycykgPSAocmUpICsgMSwgcGNwdV9uZXh0X3BvcCgoY2h1bmspLCAmKHJzKSwgJihyZSksIChlbmQpKSkKKwogLyoqCiAgKiBwY3B1X21lbV9hbGxvYyAtIGFsbG9jYXRlIG1lbW9yeQogICogQHNpemU6IGJ5dGVzIHRvIGFsbG9jYXRlCkBAIC0yOTIsMTAgKzMzMCwxMCBAQAogICovCiBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY2h1bmtfYWRkcl9zZWFyY2godm9pZCAqYWRkcikKIHsKLQl2b2lkICpmaXJzdF9zdGFydCA9IHBjcHVfZmlyc3RfY2h1bmstPnZtLT5hZGRyOworCXZvaWQgKmZpcnN0X3N0YXJ0ID0gcGNwdV9maXJzdF9jaHVuay0+YmFzZV9hZGRyOwogCiAJLyogaXMgaXQgaW4gdGhlIGZpcnN0IGNodW5rPyAqLwotCWlmIChhZGRyID49IGZpcnN0X3N0YXJ0ICYmIGFkZHIgPCBmaXJzdF9zdGFydCArIHBjcHVfY2h1bmtfc2l6ZSkgeworCWlmIChhZGRyID49IGZpcnN0X3N0YXJ0ICYmIGFkZHIgPCBmaXJzdF9zdGFydCArIHBjcHVfdW5pdF9zaXplKSB7CiAJCS8qIGlzIGl0IGluIHRoZSByZXNlcnZlZCBhcmVhPyAqLwogCQlpZiAoYWRkciA8IGZpcnN0X3N0YXJ0ICsgcGNwdV9yZXNlcnZlZF9jaHVua19saW1pdCkKIAkJCXJldHVybiBwY3B1X3Jlc2VydmVkX2NodW5rOwpAQCAtMzA5LDcgKzM0Nyw3IEBACiAJICogc3BhY2UuICBOb3RlIHRoYXQgYW55IHBvc3NpYmxlIGNwdSBpZCBjYW4gYmUgdXNlZCBoZXJlLCBzbwogCSAqIHRoZXJlJ3Mgbm8gbmVlZCB0byB3b3JyeSBhYm91dCBwcmVlbXB0aW9uIG9yIGNwdSBob3RwbHVnLgogCSAqLwotCWFkZHIgKz0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAqIHBjcHVfdW5pdF9zaXplOworCWFkZHIgKz0gcGNwdV91bml0X29mZnNldHNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJcmV0dXJuIHBjcHVfZ2V0X3BhZ2VfY2h1bmsodm1hbGxvY190b19wYWdlKGFkZHIpKTsKIH0KIApAQCAtNTU4LDQyICs1OTYsMjcyIEBACiB9CiAKIC8qKgotICogcGNwdV91bm1hcCAtIHVubWFwIHBhZ2VzIG91dCBvZiBhIHBjcHVfY2h1bmsKKyAqIHBjcHVfZ2V0X3BhZ2VzX2FuZF9iaXRtYXAgLSBnZXQgdGVtcCBwYWdlcyBhcnJheSBhbmQgYml0bWFwCiAgKiBAY2h1bms6IGNodW5rIG9mIGludGVyZXN0CisgKiBAYml0bWFwcDogb3V0cHV0IHBhcmFtZXRlciBmb3IgYml0bWFwCisgKiBAbWF5X2FsbG9jOiBtYXkgYWxsb2NhdGUgdGhlIGFycmF5CisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cnVjdCBwYWdlIGFuZCBiaXRtYXAsCisgKiBib3RoIG9mIHdoaWNoIGNhbiBiZSBpbmRleGVkIHdpdGggcGNwdV9wYWdlX2lkeCgpLiAgVGhlIHJldHVybmVkCisgKiBhcnJheSBpcyBjbGVhcmVkIHRvIHplcm8gYW5kICpAYml0bWFwcCBpcyBjb3BpZWQgZnJvbQorICogQGNodW5rLT5wb3B1bGF0ZWQuICBOb3RlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgYXJyYXkgYW5kIGJpdG1hcAorICogYW5kIGFjY2VzcyBleGNsdXNpb24gaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5LgorICoKKyAqIENPTlRFWFQ6CisgKiBwY3B1X2FsbG9jX211dGV4IGFuZCBkb2VzIEdGUF9LRVJORUwgYWxsb2NhdGlvbiBpZiBAbWF5X2FsbG9jLgorICogT3RoZXJ3aXNlLCBkb24ndCBjYXJlLgorICoKKyAqIFJFVFVSTlM6CisgKiBQb2ludGVyIHRvIHRlbXAgcGFnZXMgYXJyYXkgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgc3RydWN0IHBhZ2UgKipwY3B1X2dldF9wYWdlc19hbmRfYml0bWFwKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKipiaXRtYXBwLAorCQkJCQkgICAgICAgYm9vbCBtYXlfYWxsb2MpCit7CisJc3RhdGljIHN0cnVjdCBwYWdlICoqcGFnZXM7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgKmJpdG1hcDsKKwlzaXplX3QgcGFnZXNfc2l6ZSA9IHBjcHVfbnJfdW5pdHMgKiBwY3B1X3VuaXRfcGFnZXMgKiBzaXplb2YocGFnZXNbMF0pOworCXNpemVfdCBiaXRtYXBfc2l6ZSA9IEJJVFNfVE9fTE9OR1MocGNwdV91bml0X3BhZ2VzKSAqCisJCQkgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKworCWlmICghcGFnZXMgfHwgIWJpdG1hcCkgeworCQlpZiAobWF5X2FsbG9jICYmICFwYWdlcykKKwkJCXBhZ2VzID0gcGNwdV9tZW1fYWxsb2MocGFnZXNfc2l6ZSk7CisJCWlmIChtYXlfYWxsb2MgJiYgIWJpdG1hcCkKKwkJCWJpdG1hcCA9IHBjcHVfbWVtX2FsbG9jKGJpdG1hcF9zaXplKTsKKwkJaWYgKCFwYWdlcyB8fCAhYml0bWFwKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtc2V0KHBhZ2VzLCAwLCBwYWdlc19zaXplKTsKKwliaXRtYXBfY29weShiaXRtYXAsIGNodW5rLT5wb3B1bGF0ZWQsIHBjcHVfdW5pdF9wYWdlcyk7CisKKwkqYml0bWFwcCA9IGJpdG1hcDsKKwlyZXR1cm4gcGFnZXM7Cit9CisKKy8qKgorICogcGNwdV9mcmVlX3BhZ2VzIC0gZnJlZSBwYWdlcyB3aGljaCB3ZXJlIGFsbG9jYXRlZCBmb3IgQGNodW5rCisgKiBAY2h1bms6IGNodW5rIHBhZ2VzIHdlcmUgYWxsb2NhdGVkIGZvcgorICogQHBhZ2VzOiBhcnJheSBvZiBwYWdlcyB0byBiZSBmcmVlZCwgaW5kZXhlZCBieSBwY3B1X3BhZ2VfaWR4KCkKKyAqIEBwb3B1bGF0ZWQ6IHBvcHVsYXRlZCBiaXRtYXAKKyAqIEBwYWdlX3N0YXJ0OiBwYWdlIGluZGV4IG9mIHRoZSBmaXJzdCBwYWdlIHRvIGJlIGZyZWVkCisgKiBAcGFnZV9lbmQ6IHBhZ2UgaW5kZXggb2YgdGhlIGxhc3QgcGFnZSB0byBiZSBmcmVlZCArIDEKKyAqCisgKiBGcmVlIHBhZ2VzIFtAcGFnZV9zdGFydCBhbmQgQHBhZ2VfZW5kKSBpbiBAcGFnZXMgZm9yIGFsbCB1bml0cy4KKyAqIFRoZSBwYWdlcyB3ZXJlIGFsbG9jYXRlZCBmb3IgQGNodW5rLgorICovCitzdGF0aWMgdm9pZCBwY3B1X2ZyZWVfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAorCQkJICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlZCwKKwkJCSAgICBpbnQgcGFnZV9zdGFydCwgaW50IHBhZ2VfZW5kKQoreworCXVuc2lnbmVkIGludCBjcHU7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCWZvciAoaSA9IHBhZ2Vfc3RhcnQ7IGkgPCBwYWdlX2VuZDsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzW3BjcHVfcGFnZV9pZHgoY3B1LCBpKV07CisKKwkJCWlmIChwYWdlKQorCQkJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQl9CisJfQorfQorCisvKioKKyAqIHBjcHVfYWxsb2NfcGFnZXMgLSBhbGxvY2F0ZXMgcGFnZXMgZm9yIEBjaHVuaworICogQGNodW5rOiB0YXJnZXQgY2h1bmsKKyAqIEBwYWdlczogYXJyYXkgdG8gcHV0IHRoZSBhbGxvY2F0ZWQgcGFnZXMgaW50bywgaW5kZXhlZCBieSBwY3B1X3BhZ2VfaWR4KCkKKyAqIEBwb3B1bGF0ZWQ6IHBvcHVsYXRlZCBiaXRtYXAKKyAqIEBwYWdlX3N0YXJ0OiBwYWdlIGluZGV4IG9mIHRoZSBmaXJzdCBwYWdlIHRvIGJlIGFsbG9jYXRlZAorICogQHBhZ2VfZW5kOiBwYWdlIGluZGV4IG9mIHRoZSBsYXN0IHBhZ2UgdG8gYmUgYWxsb2NhdGVkICsgMQorICoKKyAqIEFsbG9jYXRlIHBhZ2VzIFtAcGFnZV9zdGFydCxAcGFnZV9lbmQpIGludG8gQHBhZ2VzIGZvciBhbGwgdW5pdHMuCisgKiBUaGUgYWxsb2NhdGlvbiBpcyBmb3IgQGNodW5rLiAgUGVyY3B1IGNvcmUgZG9lc24ndCBjYXJlIGFib3V0IHRoZQorICogY29udGVudCBvZiBAcGFnZXMgYW5kIHdpbGwgcGFzcyBpdCB2ZXJiYXRpbSB0byBwY3B1X21hcF9wYWdlcygpLgorICovCitzdGF0aWMgaW50IHBjcHVfYWxsb2NfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAorCQkJICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlZCwKKwkJCSAgICBpbnQgcGFnZV9zdGFydCwgaW50IHBhZ2VfZW5kKQoreworCWNvbnN0IGdmcF90IGdmcCA9IEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfQ09MRDsKKwl1bnNpZ25lZCBpbnQgY3B1OworCWludCBpOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlmb3IgKGkgPSBwYWdlX3N0YXJ0OyBpIDwgcGFnZV9lbmQ7IGkrKykgeworCQkJc3RydWN0IHBhZ2UgKipwYWdlcCA9ICZwYWdlc1twY3B1X3BhZ2VfaWR4KGNwdSwgaSldOworCisJCQkqcGFnZXAgPSBhbGxvY19wYWdlc19ub2RlKGNwdV90b19ub2RlKGNwdSksIGdmcCwgMCk7CisJCQlpZiAoISpwYWdlcCkgeworCQkJCXBjcHVfZnJlZV9wYWdlcyhjaHVuaywgcGFnZXMsIHBvcHVsYXRlZCwKKwkJCQkJCXBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY3B1X3ByZV91bm1hcF9mbHVzaCAtIGZsdXNoIGNhY2hlIHByaW9yIHRvIHVubWFwcGluZworICogQGNodW5rOiBjaHVuayB0aGUgcmVnaW9ucyB0byBiZSBmbHVzaGVkIGJlbG9uZ3MgdG8KKyAqIEBwYWdlX3N0YXJ0OiBwYWdlIGluZGV4IG9mIHRoZSBmaXJzdCBwYWdlIHRvIGJlIGZsdXNoZWQKKyAqIEBwYWdlX2VuZDogcGFnZSBpbmRleCBvZiB0aGUgbGFzdCBwYWdlIHRvIGJlIGZsdXNoZWQgKyAxCisgKgorICogUGFnZXMgaW4gW0BwYWdlX3N0YXJ0LEBwYWdlX2VuZCkgb2YgQGNodW5rIGFyZSBhYm91dCB0byBiZQorICogdW5tYXBwZWQuICBGbHVzaCBjYWNoZS4gIEFzIGVhY2ggZmx1c2hpbmcgdHJpYWwgY2FuIGJlIHZlcnkKKyAqIGV4cGVuc2l2ZSwgaXNzdWUgZmx1c2ggb24gdGhlIHdob2xlIHJlZ2lvbiBhdCBvbmNlIHJhdGhlciB0aGFuCisgKiBkb2luZyBpdCBmb3IgZWFjaCBjcHUuICBUaGlzIGNvdWxkIGJlIGFuIG92ZXJraWxsIGJ1dCBpcyBtb3JlCisgKiBzY2FsYWJsZS4KKyAqLworc3RhdGljIHZvaWQgcGNwdV9wcmVfdW5tYXBfZmx1c2goc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAorCQkJCSBpbnQgcGFnZV9zdGFydCwgaW50IHBhZ2VfZW5kKQoreworCWZsdXNoX2NhY2hlX3Z1bm1hcCgKKwkJcGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2ZpcnN0X3VuaXRfY3B1LCBwYWdlX3N0YXJ0KSwKKwkJcGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2xhc3RfdW5pdF9jcHUsIHBhZ2VfZW5kKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fcGNwdV91bm1hcF9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBucl9wYWdlcykKK3sKKwl1bm1hcF9rZXJuZWxfcmFuZ2Vfbm9mbHVzaChhZGRyLCBucl9wYWdlcyA8PCBQQUdFX1NISUZUKTsKK30KKworLyoqCisgKiBwY3B1X3VubWFwX3BhZ2VzIC0gdW5tYXAgcGFnZXMgb3V0IG9mIGEgcGNwdV9jaHVuaworICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdAorICogQHBhZ2VzOiBwYWdlcyBhcnJheSB3aGljaCBjYW4gYmUgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIHRvIGZyZWUKKyAqIEBwb3B1bGF0ZWQ6IHBvcHVsYXRlZCBiaXRtYXAKICAqIEBwYWdlX3N0YXJ0OiBwYWdlIGluZGV4IG9mIHRoZSBmaXJzdCBwYWdlIHRvIHVubWFwCiAgKiBAcGFnZV9lbmQ6IHBhZ2UgaW5kZXggb2YgdGhlIGxhc3QgcGFnZSB0byB1bm1hcCArIDEKLSAqIEBmbHVzaF90bGI6IHdoZXRoZXIgdG8gZmx1c2ggdGxiIG9yIG5vdAogICoKICAqIEZvciBlYWNoIGNwdSwgdW5tYXAgcGFnZXMgW0BwYWdlX3N0YXJ0LEBwYWdlX2VuZCkgb3V0IG9mIEBjaHVuay4KLSAqIElmIEBmbHVzaCBpcyB0cnVlLCB2Y2FjaGUgaXMgZmx1c2hlZCBiZWZvcmUgdW5tYXBwaW5nIGFuZCB0bGIKLSAqIGFmdGVyLgorICogQ29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiBAcGFnZXMgd2VyZSBjbGVhcmVkIGJ5IHRoZSBjYWxsZXIgYW5kIGNhbgorICogYmUgdXNlZCB0byBjYXJyeSBpbmZvcm1hdGlvbiB0byBwY3B1X2ZyZWVfcGFnZXMoKSB3aGljaCB3aWxsIGJlCisgKiBjYWxsZWQgYWZ0ZXIgYWxsIHVubWFwcyBhcmUgZmluaXNoZWQuICBUaGUgY2FsbGVyIHNob3VsZCBjYWxsCisgKiBwcm9wZXIgcHJlL3Bvc3QgZmx1c2ggZnVuY3Rpb25zLgogICovCi1zdGF0aWMgdm9pZCBwY3B1X3VubWFwKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IHBhZ2Vfc3RhcnQsIGludCBwYWdlX2VuZCwKLQkJICAgICAgIGJvb2wgZmx1c2hfdGxiKQorc3RhdGljIHZvaWQgcGNwdV91bm1hcF9wYWdlcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssCisJCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlZCwKKwkJCSAgICAgaW50IHBhZ2Vfc3RhcnQsIGludCBwYWdlX2VuZCkKIHsKLQl1bnNpZ25lZCBpbnQgbGFzdCA9IG5yX2NwdV9pZHMgLSAxOwogCXVuc2lnbmVkIGludCBjcHU7CisJaW50IGk7CiAKLQkvKiB1bm1hcCBtdXN0IG5vdCBiZSBkb25lIG9uIGltbXV0YWJsZSBjaHVuayAqLwotCVdBUk5fT04oY2h1bmstPmltbXV0YWJsZSk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlmb3IgKGkgPSBwYWdlX3N0YXJ0OyBpIDwgcGFnZV9lbmQ7IGkrKykgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQkvKgotCSAqIEVhY2ggZmx1c2hpbmcgdHJpYWwgY2FuIGJlIHZlcnkgZXhwZW5zaXZlLCBpc3N1ZSBmbHVzaCBvbgotCSAqIHRoZSB3aG9sZSByZWdpb24gYXQgb25jZSByYXRoZXIgdGhhbiBkb2luZyBpdCBmb3IgZWFjaCBjcHUuCi0JICogVGhpcyBjb3VsZCBiZSBhbiBvdmVya2lsbCBidXQgaXMgbW9yZSBzY2FsYWJsZS4KLQkgKi8KLQlmbHVzaF9jYWNoZV92dW5tYXAocGNwdV9jaHVua19hZGRyKGNodW5rLCAwLCBwYWdlX3N0YXJ0KSwKLQkJCSAgIHBjcHVfY2h1bmtfYWRkcihjaHVuaywgbGFzdCwgcGFnZV9lbmQpKTsKKwkJCXBhZ2UgPSBwY3B1X2NodW5rX3BhZ2UoY2h1bmssIGNwdSwgaSk7CisJCQlXQVJOX09OKCFwYWdlKTsKKwkJCXBhZ2VzW3BjcHVfcGFnZV9pZHgoY3B1LCBpKV0gPSBwYWdlOworCQl9CisJCV9fcGNwdV91bm1hcF9wYWdlcyhwY3B1X2NodW5rX2FkZHIoY2h1bmssIGNwdSwgcGFnZV9zdGFydCksCisJCQkJICAgcGFnZV9lbmQgLSBwYWdlX3N0YXJ0KTsKKwl9CiAKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQotCQl1bm1hcF9rZXJuZWxfcmFuZ2Vfbm9mbHVzaCgKLQkJCQlwY3B1X2NodW5rX2FkZHIoY2h1bmssIGNwdSwgcGFnZV9zdGFydCksCi0JCQkJKHBhZ2VfZW5kIC0gcGFnZV9zdGFydCkgPDwgUEFHRV9TSElGVCk7CisJZm9yIChpID0gcGFnZV9zdGFydDsgaSA8IHBhZ2VfZW5kOyBpKyspCisJCV9fY2xlYXJfYml0KGksIHBvcHVsYXRlZCk7Cit9CiAKLQkvKiBkaXR0byBhcyBmbHVzaF9jYWNoZV92dW5tYXAoKSAqLwotCWlmIChmbHVzaF90bGIpCi0JCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UocGNwdV9jaHVua19hZGRyKGNodW5rLCAwLCBwYWdlX3N0YXJ0KSwKLQkJCQkgICAgICAgcGNwdV9jaHVua19hZGRyKGNodW5rLCBsYXN0LCBwYWdlX2VuZCkpOworLyoqCisgKiBwY3B1X3Bvc3RfdW5tYXBfdGxiX2ZsdXNoIC0gZmx1c2ggVExCIGFmdGVyIHVubWFwcGluZworICogQGNodW5rOiBwY3B1X2NodW5rIHRoZSByZWdpb25zIHRvIGJlIGZsdXNoZWQgYmVsb25nIHRvCisgKiBAcGFnZV9zdGFydDogcGFnZSBpbmRleCBvZiB0aGUgZmlyc3QgcGFnZSB0byBiZSBmbHVzaGVkCisgKiBAcGFnZV9lbmQ6IHBhZ2UgaW5kZXggb2YgdGhlIGxhc3QgcGFnZSB0byBiZSBmbHVzaGVkICsgMQorICoKKyAqIFBhZ2VzIFtAcGFnZV9zdGFydCxAcGFnZV9lbmQpIG9mIEBjaHVuayBoYXZlIGJlZW4gdW5tYXBwZWQuICBGbHVzaAorICogVExCIGZvciB0aGUgcmVnaW9ucy4gIFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlIGFyZWEgaXMgdG8gYmUKKyAqIHJldHVybmVkIHRvIHZtYWxsb2MgYXMgdm1hbGxvYyB3aWxsIGhhbmRsZSBUTEIgZmx1c2hpbmcgbGF6aWx5LgorICoKKyAqIEFzIHdpdGggcGNwdV9wcmVfdW5tYXBfZmx1c2goKSwgVExCIGZsdXNoaW5nIGFsc28gaXMgZG9uZSBhdCBvbmNlCisgKiBmb3IgdGhlIHdob2xlIHJlZ2lvbi4KKyAqLworc3RhdGljIHZvaWQgcGNwdV9wb3N0X3VubWFwX3RsYl9mbHVzaChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssCisJCQkJICAgICAgaW50IHBhZ2Vfc3RhcnQsIGludCBwYWdlX2VuZCkKK3sKKwlmbHVzaF90bGJfa2VybmVsX3JhbmdlKAorCQlwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfZmlyc3RfdW5pdF9jcHUsIHBhZ2Vfc3RhcnQpLAorCQlwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfbGFzdF91bml0X2NwdSwgcGFnZV9lbmQpKTsKK30KKworc3RhdGljIGludCBfX3BjcHVfbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJCSAgICBpbnQgbnJfcGFnZXMpCit7CisJcmV0dXJuIG1hcF9rZXJuZWxfcmFuZ2Vfbm9mbHVzaChhZGRyLCBucl9wYWdlcyA8PCBQQUdFX1NISUZULAorCQkJCQlQQUdFX0tFUk5FTCwgcGFnZXMpOworfQorCisvKioKKyAqIHBjcHVfbWFwX3BhZ2VzIC0gbWFwIHBhZ2VzIGludG8gYSBwY3B1X2NodW5rCisgKiBAY2h1bms6IGNodW5rIG9mIGludGVyZXN0CisgKiBAcGFnZXM6IHBhZ2VzIGFycmF5IGNvbnRhaW5pbmcgcGFnZXMgdG8gYmUgbWFwcGVkCisgKiBAcG9wdWxhdGVkOiBwb3B1bGF0ZWQgYml0bWFwCisgKiBAcGFnZV9zdGFydDogcGFnZSBpbmRleCBvZiB0aGUgZmlyc3QgcGFnZSB0byBtYXAKKyAqIEBwYWdlX2VuZDogcGFnZSBpbmRleCBvZiB0aGUgbGFzdCBwYWdlIHRvIG1hcCArIDEKKyAqCisgKiBGb3IgZWFjaCBjcHUsIG1hcCBwYWdlcyBbQHBhZ2Vfc3RhcnQsQHBhZ2VfZW5kKSBpbnRvIEBjaHVuay4gIFRoZQorICogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHBjcHVfcG9zdF9tYXBfZmx1c2goKSBhZnRlciBhbGwKKyAqIG1hcHBpbmdzIGFyZSBjb21wbGV0ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIGNvcnJlc3BvbmRpbmcgYml0cyBpbgorICogQGNodW5rLT5wb3B1bGF0ZWQgYml0bWFwIGFuZCB3aGF0ZXZlciBpcyBuZWNlc3NhcnkgZm9yIHJldmVyc2UKKyAqIGxvb2t1cCAoYWRkciAtPiBjaHVuaykuCisgKi8KK3N0YXRpYyBpbnQgcGNwdV9tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAorCQkJICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nICpwb3B1bGF0ZWQsCisJCQkgIGludCBwYWdlX3N0YXJ0LCBpbnQgcGFnZV9lbmQpCit7CisJdW5zaWduZWQgaW50IGNwdSwgdGNwdTsKKwlpbnQgaSwgZXJyOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQllcnIgPSBfX3BjcHVfbWFwX3BhZ2VzKHBjcHVfY2h1bmtfYWRkcihjaHVuaywgY3B1LCBwYWdlX3N0YXJ0KSwKKwkJCQkgICAgICAgJnBhZ2VzW3BjcHVfcGFnZV9pZHgoY3B1LCBwYWdlX3N0YXJ0KV0sCisJCQkJICAgICAgIHBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnI7CisJfQorCisJLyogbWFwcGluZyBzdWNjZXNzZnVsLCBsaW5rIGNodW5rIGFuZCBtYXJrIHBvcHVsYXRlZCAqLworCWZvciAoaSA9IHBhZ2Vfc3RhcnQ7IGkgPCBwYWdlX2VuZDsgaSsrKSB7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCisJCQlwY3B1X3NldF9wYWdlX2NodW5rKHBhZ2VzW3BjcHVfcGFnZV9pZHgoY3B1LCBpKV0sCisJCQkJCSAgICBjaHVuayk7CisJCV9fc2V0X2JpdChpLCBwb3B1bGF0ZWQpOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KHRjcHUpIHsKKwkJaWYgKHRjcHUgPT0gY3B1KQorCQkJYnJlYWs7CisJCV9fcGNwdV91bm1hcF9wYWdlcyhwY3B1X2NodW5rX2FkZHIoY2h1bmssIHRjcHUsIHBhZ2Vfc3RhcnQpLAorCQkJCSAgIHBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7CisJfQorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogcGNwdV9wb3N0X21hcF9mbHVzaCAtIGZsdXNoIGNhY2hlIGFmdGVyIG1hcHBpbmcKKyAqIEBjaHVuazogcGNwdV9jaHVuayB0aGUgcmVnaW9ucyB0byBiZSBmbHVzaGVkIGJlbG9uZyB0bworICogQHBhZ2Vfc3RhcnQ6IHBhZ2UgaW5kZXggb2YgdGhlIGZpcnN0IHBhZ2UgdG8gYmUgZmx1c2hlZAorICogQHBhZ2VfZW5kOiBwYWdlIGluZGV4IG9mIHRoZSBsYXN0IHBhZ2UgdG8gYmUgZmx1c2hlZCArIDEKKyAqCisgKiBQYWdlcyBbQHBhZ2Vfc3RhcnQsQHBhZ2VfZW5kKSBvZiBAY2h1bmsgaGF2ZSBiZWVuIG1hcHBlZC4gIEZsdXNoCisgKiBjYWNoZS4KKyAqCisgKiBBcyB3aXRoIHBjcHVfcHJlX3VubWFwX2ZsdXNoKCksIFRMQiBmbHVzaGluZyBhbHNvIGlzIGRvbmUgYXQgb25jZQorICogZm9yIHRoZSB3aG9sZSByZWdpb24uCisgKi8KK3N0YXRpYyB2b2lkIHBjcHVfcG9zdF9tYXBfZmx1c2goc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAorCQkJCWludCBwYWdlX3N0YXJ0LCBpbnQgcGFnZV9lbmQpCit7CisJZmx1c2hfY2FjaGVfdm1hcCgKKwkJcGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2ZpcnN0X3VuaXRfY3B1LCBwYWdlX3N0YXJ0KSwKKwkJcGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2xhc3RfdW5pdF9jcHUsIHBhZ2VfZW5kKSk7CiB9CiAKIC8qKgpAQCAtNjEwLDczICs4NzgsNDUgQEAKICAqIENPTlRFWFQ6CiAgKiBwY3B1X2FsbG9jX211dGV4LgogICovCi1zdGF0aWMgdm9pZCBwY3B1X2RlcG9wdWxhdGVfY2h1bmsoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgb2ZmLCBpbnQgc2l6ZSwKLQkJCQkgIGJvb2wgZmx1c2gpCitzdGF0aWMgdm9pZCBwY3B1X2RlcG9wdWxhdGVfY2h1bmsoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgb2ZmLCBpbnQgc2l6ZSkKIHsKIAlpbnQgcGFnZV9zdGFydCA9IFBGTl9ET1dOKG9mZik7CiAJaW50IHBhZ2VfZW5kID0gUEZOX1VQKG9mZiArIHNpemUpOwotCWludCB1bm1hcF9zdGFydCA9IC0xOwotCWludCB1bmluaXRpYWxpemVkX3Zhcih1bm1hcF9lbmQpOwotCXVuc2lnbmVkIGludCBjcHU7Ci0JaW50IGk7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwl1bnNpZ25lZCBsb25nICpwb3B1bGF0ZWQ7CisJaW50IHJzLCByZTsKIAotCWZvciAoaSA9IHBhZ2Vfc3RhcnQ7IGkgPCBwYWdlX2VuZDsgaSsrKSB7Ci0JCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJCXN0cnVjdCBwYWdlICoqcGFnZXAgPSBwY3B1X2NodW5rX3BhZ2VwKGNodW5rLCBjcHUsIGkpOwotCi0JCQlpZiAoISpwYWdlcCkKLQkJCQljb250aW51ZTsKLQotCQkJX19mcmVlX3BhZ2UoKnBhZ2VwKTsKLQotCQkJLyoKLQkJCSAqIElmIGl0J3MgcGFydGlhbCBkZXBvcHVsYXRpb24sIGl0IG1pZ2h0IGdldAotCQkJICogcG9wdWxhdGVkIG9yIGRlcG9wdWxhdGVkIGFnYWluLiAgTWFyayB0aGUKLQkJCSAqIHBhZ2UgZ29uZS4KLQkJCSAqLwotCQkJKnBhZ2VwID0gTlVMTDsKLQotCQkJdW5tYXBfc3RhcnQgPSB1bm1hcF9zdGFydCA8IDAgPyBpIDogdW5tYXBfc3RhcnQ7Ci0JCQl1bm1hcF9lbmQgPSBpICsgMTsKLQkJfQorCS8qIHF1aWNrIHBhdGgsIGNoZWNrIHdoZXRoZXIgaXQncyBlbXB0eSBhbHJlYWR5ICovCisJcGNwdV9mb3JfZWFjaF91bnBvcF9yZWdpb24oY2h1bmssIHJzLCByZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQpIHsKKwkJaWYgKHJzID09IHBhZ2Vfc3RhcnQgJiYgcmUgPT0gcGFnZV9lbmQpCisJCQlyZXR1cm47CisJCWJyZWFrOwogCX0KIAotCWlmICh1bm1hcF9zdGFydCA+PSAwKQotCQlwY3B1X3VubWFwKGNodW5rLCB1bm1hcF9zdGFydCwgdW5tYXBfZW5kLCBmbHVzaCk7Ci19Ci0KLS8qKgotICogcGNwdV9tYXAgLSBtYXAgcGFnZXMgaW50byBhIHBjcHVfY2h1bmsKLSAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKLSAqIEBwYWdlX3N0YXJ0OiBwYWdlIGluZGV4IG9mIHRoZSBmaXJzdCBwYWdlIHRvIG1hcAotICogQHBhZ2VfZW5kOiBwYWdlIGluZGV4IG9mIHRoZSBsYXN0IHBhZ2UgdG8gbWFwICsgMQotICoKLSAqIEZvciBlYWNoIGNwdSwgbWFwIHBhZ2VzIFtAcGFnZV9zdGFydCxAcGFnZV9lbmQpIGludG8gQGNodW5rLgotICogdmNhY2hlIGlzIGZsdXNoZWQgYWZ0ZXJ3YXJkcy4KLSAqLwotc3RhdGljIGludCBwY3B1X21hcChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBwYWdlX3N0YXJ0LCBpbnQgcGFnZV9lbmQpCi17Ci0JdW5zaWduZWQgaW50IGxhc3QgPSBucl9jcHVfaWRzIC0gMTsKLQl1bnNpZ25lZCBpbnQgY3B1OwotCWludCBlcnI7Ci0KLQkvKiBtYXAgbXVzdCBub3QgYmUgZG9uZSBvbiBpbW11dGFibGUgY2h1bmsgKi8KKwkvKiBpbW11dGFibGUgY2h1bmtzIGNhbid0IGJlIGRlcG9wdWxhdGVkICovCiAJV0FSTl9PTihjaHVuay0+aW1tdXRhYmxlKTsKIAotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJZXJyID0gbWFwX2tlcm5lbF9yYW5nZV9ub2ZsdXNoKAotCQkJCXBjcHVfY2h1bmtfYWRkcihjaHVuaywgY3B1LCBwYWdlX3N0YXJ0KSwKLQkJCQkocGFnZV9lbmQgLSBwYWdlX3N0YXJ0KSA8PCBQQUdFX1NISUZULAotCQkJCVBBR0VfS0VSTkVMLAotCQkJCXBjcHVfY2h1bmtfcGFnZXAoY2h1bmssIGNwdSwgcGFnZV9zdGFydCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCS8qCisJICogSWYgY29udHJvbCByZWFjaGVzIGhlcmUsIHRoZXJlIG11c3QgaGF2ZSBiZWVuIGF0IGxlYXN0IG9uZQorCSAqIHN1Y2Nlc3NmdWwgcG9wdWxhdGlvbiBhdHRlbXB0IHNvIHRoZSB0ZW1wIHBhZ2VzIGFycmF5IG11c3QKKwkgKiBiZSBhdmFpbGFibGUgbm93LgorCSAqLworCXBhZ2VzID0gcGNwdV9nZXRfcGFnZXNfYW5kX2JpdG1hcChjaHVuaywgJnBvcHVsYXRlZCwgZmFsc2UpOworCUJVR19PTighcGFnZXMpOwogCi0JLyogZmx1c2ggYXQgb25jZSwgcGxlYXNlIHJlYWQgY29tbWVudHMgaW4gcGNwdV91bm1hcCgpICovCi0JZmx1c2hfY2FjaGVfdm1hcChwY3B1X2NodW5rX2FkZHIoY2h1bmssIDAsIHBhZ2Vfc3RhcnQpLAotCQkJIHBjcHVfY2h1bmtfYWRkcihjaHVuaywgbGFzdCwgcGFnZV9lbmQpKTsKLQlyZXR1cm4gMDsKKwkvKiB1bm1hcCBhbmQgZnJlZSAqLworCXBjcHVfcHJlX3VubWFwX2ZsdXNoKGNodW5rLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCk7CisKKwlwY3B1X2Zvcl9lYWNoX3BvcF9yZWdpb24oY2h1bmssIHJzLCByZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQpCisJCXBjcHVfdW5tYXBfcGFnZXMoY2h1bmssIHBhZ2VzLCBwb3B1bGF0ZWQsIHJzLCByZSk7CisKKwkvKiBubyBuZWVkIHRvIGZsdXNoIHRsYiwgdm1hbGxvYyB3aWxsIGhhbmRsZSBpdCBsYXppbHkgKi8KKworCXBjcHVfZm9yX2VhY2hfcG9wX3JlZ2lvbihjaHVuaywgcnMsIHJlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCkKKwkJcGNwdV9mcmVlX3BhZ2VzKGNodW5rLCBwYWdlcywgcG9wdWxhdGVkLCBycywgcmUpOworCisJLyogY29tbWl0IG5ldyBiaXRtYXAgKi8KKwliaXRtYXBfY29weShjaHVuay0+cG9wdWxhdGVkLCBwb3B1bGF0ZWQsIHBjcHVfdW5pdF9wYWdlcyk7CiB9CiAKIC8qKgpAQCAtNjkzLDU4ICs5MzMsNjggQEAKICAqLwogc3RhdGljIGludCBwY3B1X3BvcHVsYXRlX2NodW5rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZiwgaW50IHNpemUpCiB7Ci0JY29uc3QgZ2ZwX3QgYWxsb2NfbWFzayA9IEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfQ09MRDsKIAlpbnQgcGFnZV9zdGFydCA9IFBGTl9ET1dOKG9mZik7CiAJaW50IHBhZ2VfZW5kID0gUEZOX1VQKG9mZiArIHNpemUpOwotCWludCBtYXBfc3RhcnQgPSAtMTsKLQlpbnQgdW5pbml0aWFsaXplZF92YXIobWFwX2VuZCk7CisJaW50IGZyZWVfZW5kID0gcGFnZV9zdGFydCwgdW5tYXBfZW5kID0gcGFnZV9zdGFydDsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXVuc2lnbmVkIGxvbmcgKnBvcHVsYXRlZDsKIAl1bnNpZ25lZCBpbnQgY3B1OwotCWludCBpOworCWludCBycywgcmUsIHJjOwogCi0JZm9yIChpID0gcGFnZV9zdGFydDsgaSA8IHBhZ2VfZW5kOyBpKyspIHsKLQkJaWYgKHBjcHVfY2h1bmtfcGFnZV9vY2N1cGllZChjaHVuaywgaSkpIHsKLQkJCWlmIChtYXBfc3RhcnQgPj0gMCkgewotCQkJCWlmIChwY3B1X21hcChjaHVuaywgbWFwX3N0YXJ0LCBtYXBfZW5kKSkKLQkJCQkJZ290byBlcnI7Ci0JCQkJbWFwX3N0YXJ0ID0gLTE7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCW1hcF9zdGFydCA9IG1hcF9zdGFydCA8IDAgPyBpIDogbWFwX3N0YXJ0OwotCQltYXBfZW5kID0gaSArIDE7Ci0KLQkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQkJc3RydWN0IHBhZ2UgKipwYWdlcCA9IHBjcHVfY2h1bmtfcGFnZXAoY2h1bmssIGNwdSwgaSk7Ci0KLQkJCSpwYWdlcCA9IGFsbG9jX3BhZ2VzX25vZGUoY3B1X3RvX25vZGUoY3B1KSwKLQkJCQkJCSAgYWxsb2NfbWFzaywgMCk7Ci0JCQlpZiAoISpwYWdlcCkKLQkJCQlnb3RvIGVycjsKLQkJCXBjcHVfc2V0X3BhZ2VfY2h1bmsoKnBhZ2VwLCBjaHVuayk7Ci0JCX0KKwkvKiBxdWljayBwYXRoLCBjaGVjayB3aGV0aGVyIGFsbCBwYWdlcyBhcmUgYWxyZWFkeSB0aGVyZSAqLworCXBjcHVfZm9yX2VhY2hfcG9wX3JlZ2lvbihjaHVuaywgcnMsIHJlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCkgeworCQlpZiAocnMgPT0gcGFnZV9zdGFydCAmJiByZSA9PSBwYWdlX2VuZCkKKwkJCWdvdG8gY2xlYXI7CisJCWJyZWFrOwogCX0KIAotCWlmIChtYXBfc3RhcnQgPj0gMCAmJiBwY3B1X21hcChjaHVuaywgbWFwX3N0YXJ0LCBtYXBfZW5kKSkKLQkJZ290byBlcnI7CisJLyogbmVlZCB0byBhbGxvY2F0ZSBhbmQgbWFwIHBhZ2VzLCB0aGlzIGNodW5rIGNhbid0IGJlIGltbXV0YWJsZSAqLworCVdBUk5fT04oY2h1bmstPmltbXV0YWJsZSk7CiAKKwlwYWdlcyA9IHBjcHVfZ2V0X3BhZ2VzX2FuZF9iaXRtYXAoY2h1bmssICZwb3B1bGF0ZWQsIHRydWUpOworCWlmICghcGFnZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogYWxsb2MgYW5kIG1hcCAqLworCXBjcHVfZm9yX2VhY2hfdW5wb3BfcmVnaW9uKGNodW5rLCBycywgcmUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKSB7CisJCXJjID0gcGNwdV9hbGxvY19wYWdlcyhjaHVuaywgcGFnZXMsIHBvcHVsYXRlZCwgcnMsIHJlKTsKKwkJaWYgKHJjKQorCQkJZ290byBlcnJfZnJlZTsKKwkJZnJlZV9lbmQgPSByZTsKKwl9CisKKwlwY3B1X2Zvcl9lYWNoX3VucG9wX3JlZ2lvbihjaHVuaywgcnMsIHJlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCkgeworCQlyYyA9IHBjcHVfbWFwX3BhZ2VzKGNodW5rLCBwYWdlcywgcG9wdWxhdGVkLCBycywgcmUpOworCQlpZiAocmMpCisJCQlnb3RvIGVycl91bm1hcDsKKwkJdW5tYXBfZW5kID0gcmU7CisJfQorCXBjcHVfcG9zdF9tYXBfZmx1c2goY2h1bmssIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKTsKKworCS8qIGNvbW1pdCBuZXcgYml0bWFwICovCisJYml0bWFwX2NvcHkoY2h1bmstPnBvcHVsYXRlZCwgcG9wdWxhdGVkLCBwY3B1X3VuaXRfcGFnZXMpOworY2xlYXI6CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKLQkJbWVtc2V0KGNodW5rLT52bS0+YWRkciArIGNwdSAqIHBjcHVfdW5pdF9zaXplICsgb2ZmLCAwLAotCQkgICAgICAgc2l6ZSk7Ci0KKwkJbWVtc2V0KCh2b2lkICopcGNwdV9jaHVua19hZGRyKGNodW5rLCBjcHUsIDApICsgb2ZmLCAwLCBzaXplKTsKIAlyZXR1cm4gMDsKLWVycjoKLQkvKiBsaWtlbHkgdW5kZXIgaGVhdnkgbWVtb3J5IHByZXNzdXJlLCBnaXZlIG1lbW9yeSBiYWNrICovCi0JcGNwdV9kZXBvcHVsYXRlX2NodW5rKGNodW5rLCBvZmYsIHNpemUsIHRydWUpOwotCXJldHVybiAtRU5PTUVNOworCitlcnJfdW5tYXA6CisJcGNwdV9wcmVfdW5tYXBfZmx1c2goY2h1bmssIHBhZ2Vfc3RhcnQsIHVubWFwX2VuZCk7CisJcGNwdV9mb3JfZWFjaF91bnBvcF9yZWdpb24oY2h1bmssIHJzLCByZSwgcGFnZV9zdGFydCwgdW5tYXBfZW5kKQorCQlwY3B1X3VubWFwX3BhZ2VzKGNodW5rLCBwYWdlcywgcG9wdWxhdGVkLCBycywgcmUpOworCXBjcHVfcG9zdF91bm1hcF90bGJfZmx1c2goY2h1bmssIHBhZ2Vfc3RhcnQsIHVubWFwX2VuZCk7CitlcnJfZnJlZToKKwlwY3B1X2Zvcl9lYWNoX3VucG9wX3JlZ2lvbihjaHVuaywgcnMsIHJlLCBwYWdlX3N0YXJ0LCBmcmVlX2VuZCkKKwkJcGNwdV9mcmVlX3BhZ2VzKGNodW5rLCBwYWdlcywgcG9wdWxhdGVkLCBycywgcmUpOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9wY3B1X2NodW5rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaykKIHsKIAlpZiAoIWNodW5rKQogCQlyZXR1cm47Ci0JaWYgKGNodW5rLT52bSkKLQkJZnJlZV92bV9hcmVhKGNodW5rLT52bSk7CisJaWYgKGNodW5rLT52bXMpCisJCXBjcHVfZnJlZV92bV9hcmVhcyhjaHVuay0+dm1zLCBwY3B1X25yX2dyb3Vwcyk7CiAJcGNwdV9tZW1fZnJlZShjaHVuay0+bWFwLCBjaHVuay0+bWFwX2FsbG9jICogc2l6ZW9mKGNodW5rLT5tYXBbMF0pKTsKIAlrZnJlZShjaHVuayk7CiB9CkBAIC03NjAsMTAgKzEwMTAsMTEgQEAKIAljaHVuay0+bWFwID0gcGNwdV9tZW1fYWxsb2MoUENQVV9ERkxfTUFQX0FMTE9DICogc2l6ZW9mKGNodW5rLT5tYXBbMF0pKTsKIAljaHVuay0+bWFwX2FsbG9jID0gUENQVV9ERkxfTUFQX0FMTE9DOwogCWNodW5rLT5tYXBbY2h1bmstPm1hcF91c2VkKytdID0gcGNwdV91bml0X3NpemU7Ci0JY2h1bmstPnBhZ2UgPSBjaHVuay0+cGFnZV9hcjsKIAotCWNodW5rLT52bSA9IGdldF92bV9hcmVhKHBjcHVfY2h1bmtfc2l6ZSwgVk1fQUxMT0MpOwotCWlmICghY2h1bmstPnZtKSB7CisJY2h1bmstPnZtcyA9IHBjcHVfZ2V0X3ZtX2FyZWFzKHBjcHVfZ3JvdXBfb2Zmc2V0cywgcGNwdV9ncm91cF9zaXplcywKKwkJCQkgICAgICAgcGNwdV9ucl9ncm91cHMsIHBjcHVfYXRvbV9zaXplLAorCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWNodW5rLT52bXMpIHsKIAkJZnJlZV9wY3B1X2NodW5rKGNodW5rKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNzcxLDYgKzEwMjIsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZjaHVuay0+bGlzdCk7CiAJY2h1bmstPmZyZWVfc2l6ZSA9IHBjcHVfdW5pdF9zaXplOwogCWNodW5rLT5jb250aWdfaGludCA9IHBjcHVfdW5pdF9zaXplOworCWNodW5rLT5iYXNlX2FkZHIgPSBjaHVuay0+dm1zWzBdLT5hZGRyIC0gcGNwdV9ncm91cF9vZmZzZXRzWzBdOwogCiAJcmV0dXJuIGNodW5rOwogfQpAQCAtODYwLDcgKzExMTIsOCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwY3B1X2FsbG9jX211dGV4KTsKIAotCXJldHVybiBfX2FkZHJfdG9fcGNwdV9wdHIoY2h1bmstPnZtLT5hZGRyICsgb2ZmKTsKKwkvKiByZXR1cm4gYWRkcmVzcyByZWxhdGl2ZSB0byBiYXNlIGFkZHJlc3MgKi8KKwlyZXR1cm4gX19hZGRyX3RvX3BjcHVfcHRyKGNodW5rLT5iYXNlX2FkZHIgKyBvZmYpOwogCiBmYWlsX3VubG9jazoKIAlzcGluX3VubG9ja19pcnEoJnBjcHVfbG9jayk7CkBAIC05MzgsMTIgKzExOTEsMTMgQEAKIAl9CiAKIAlzcGluX3VubG9ja19pcnEoJnBjcHVfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZwY3B1X2FsbG9jX211dGV4KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaHVuaywgbmV4dCwgJnRvZG8sIGxpc3QpIHsKLQkJcGNwdV9kZXBvcHVsYXRlX2NodW5rKGNodW5rLCAwLCBwY3B1X3VuaXRfc2l6ZSwgZmFsc2UpOworCQlwY3B1X2RlcG9wdWxhdGVfY2h1bmsoY2h1bmssIDAsIHBjcHVfdW5pdF9zaXplKTsKIAkJZnJlZV9wY3B1X2NodW5rKGNodW5rKTsKIAl9CisKKwltdXRleF91bmxvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOwogfQogCiAvKioKQEAgLTk2OCw3ICsxMjIyLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAKIAljaHVuayA9IHBjcHVfY2h1bmtfYWRkcl9zZWFyY2goYWRkcik7Ci0Jb2ZmID0gYWRkciAtIGNodW5rLT52bS0+YWRkcjsKKwlvZmYgPSBhZGRyIC0gY2h1bmstPmJhc2VfYWRkcjsKIAogCXBjcHVfZnJlZV9hcmVhKGNodW5rLCBvZmYpOwogCkBAIC05ODcsMzAgKzEyNDEsMjk1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmcmVlX3BlcmNwdSk7CiAKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHBjcHVfY2FsY19mY19zaXplcyhzaXplX3Qgc3RhdGljX3NpemUsCisJCQkJCXNpemVfdCByZXNlcnZlZF9zaXplLAorCQkJCQlzc2l6ZV90ICpkeW5fc2l6ZXApCit7CisJc2l6ZV90IHNpemVfc3VtOworCisJc2l6ZV9zdW0gPSBQRk5fQUxJR04oc3RhdGljX3NpemUgKyByZXNlcnZlZF9zaXplICsKKwkJCSAgICAgKCpkeW5fc2l6ZXAgPj0gMCA/ICpkeW5fc2l6ZXAgOiAwKSk7CisJaWYgKCpkeW5fc2l6ZXAgIT0gMCkKKwkJKmR5bl9zaXplcCA9IHNpemVfc3VtIC0gc3RhdGljX3NpemUgLSByZXNlcnZlZF9zaXplOworCisJcmV0dXJuIHNpemVfc3VtOworfQorCiAvKioKLSAqIHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsgLSBpbml0aWFsaXplIHRoZSBmaXJzdCBwZXJjcHUgY2h1bmsKLSAqIEBnZXRfcGFnZV9mbjogY2FsbGJhY2sgdG8gZmV0Y2ggcGFnZSBwb2ludGVyCi0gKiBAc3RhdGljX3NpemU6IHRoZSBzaXplIG9mIHN0YXRpYyBwZXJjcHUgYXJlYSBpbiBieXRlcworICogcGNwdV9hbGxvY19hbGxvY19pbmZvIC0gYWxsb2NhdGUgcGVyY3B1IGFsbG9jYXRpb24gaW5mbworICogQG5yX2dyb3VwczogdGhlIG51bWJlciBvZiBncm91cHMKKyAqIEBucl91bml0czogdGhlIG51bWJlciBvZiB1bml0cworICoKKyAqIEFsbG9jYXRlIGFpIHdoaWNoIGlzIGxhcmdlIGVub3VnaCBmb3IgQG5yX2dyb3VwcyBncm91cHMgY29udGFpbmluZworICogQG5yX3VuaXRzIHVuaXRzLiAgVGhlIHJldHVybmVkIGFpJ3MgZ3JvdXBzWzBdLmNwdV9tYXAgcG9pbnRzIHRvIHRoZQorICogY3B1X21hcCBhcnJheSB3aGljaCBpcyBsb25nIGVub3VnaCBmb3IgQG5yX3VuaXRzIGFuZCBmaWxsZWQgd2l0aAorICogTlJfQ1BVUy4gIEl0J3MgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGluaXRpYWxpemUgY3B1X21hcAorICogcG9pbnRlciBvZiBvdGhlciBncm91cHMuCisgKgorICogUkVUVVJOUzoKKyAqIFBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBwY3B1X2FsbG9jX2luZm8gb24gc3VjY2VzcywgTlVMTCBvbgorICogZmFpbHVyZS4KKyAqLworc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBwY3B1X2FsbG9jX2FsbG9jX2luZm8oaW50IG5yX2dyb3VwcywKKwkJCQkJCSAgICAgIGludCBucl91bml0cykKK3sKKwlzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaTsKKwlzaXplX3QgYmFzZV9zaXplLCBhaV9zaXplOworCXZvaWQgKnB0cjsKKwlpbnQgdW5pdDsKKworCWJhc2Vfc2l6ZSA9IEFMSUdOKHNpemVvZigqYWkpICsgbnJfZ3JvdXBzICogc2l6ZW9mKGFpLT5ncm91cHNbMF0pLAorCQkJICBfX2FsaWdub2ZfXyhhaS0+Z3JvdXBzWzBdLmNwdV9tYXBbMF0pKTsKKwlhaV9zaXplID0gYmFzZV9zaXplICsgbnJfdW5pdHMgKiBzaXplb2YoYWktPmdyb3Vwc1swXS5jcHVfbWFwWzBdKTsKKworCXB0ciA9IGFsbG9jX2Jvb3RtZW1fbm9wYW5pYyhQRk5fQUxJR04oYWlfc2l6ZSkpOworCWlmICghcHRyKQorCQlyZXR1cm4gTlVMTDsKKwlhaSA9IHB0cjsKKwlwdHIgKz0gYmFzZV9zaXplOworCisJYWktPmdyb3Vwc1swXS5jcHVfbWFwID0gcHRyOworCisJZm9yICh1bml0ID0gMDsgdW5pdCA8IG5yX3VuaXRzOyB1bml0KyspCisJCWFpLT5ncm91cHNbMF0uY3B1X21hcFt1bml0XSA9IE5SX0NQVVM7CisKKwlhaS0+bnJfZ3JvdXBzID0gbnJfZ3JvdXBzOworCWFpLT5fX2FpX3NpemUgPSBQRk5fQUxJR04oYWlfc2l6ZSk7CisKKwlyZXR1cm4gYWk7Cit9CisKKy8qKgorICogcGNwdV9mcmVlX2FsbG9jX2luZm8gLSBmcmVlIHBlcmNwdSBhbGxvY2F0aW9uIGluZm8KKyAqIEBhaTogcGNwdV9hbGxvY19pbmZvIHRvIGZyZWUKKyAqCisgKiBGcmVlIEBhaSB3aGljaCB3YXMgYWxsb2NhdGVkIGJ5IHBjcHVfYWxsb2NfYWxsb2NfaW5mbygpLgorICovCit2b2lkIF9faW5pdCBwY3B1X2ZyZWVfYWxsb2NfaW5mbyhzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSkKK3sKKwlmcmVlX2Jvb3RtZW0oX19wYShhaSksIGFpLT5fX2FpX3NpemUpOworfQorCisvKioKKyAqIHBjcHVfYnVpbGRfYWxsb2NfaW5mbyAtIGJ1aWxkIGFsbG9jX2luZm8gY29uc2lkZXJpbmcgZGlzdGFuY2VzIGJldHdlZW4gQ1BVcwogICogQHJlc2VydmVkX3NpemU6IHRoZSBzaXplIG9mIHJlc2VydmVkIHBlcmNwdSBhcmVhIGluIGJ5dGVzCiAgKiBAZHluX3NpemU6IGZyZWUgc2l6ZSBmb3IgZHluYW1pYyBhbGxvY2F0aW9uIGluIGJ5dGVzLCAtMSBmb3IgYXV0bwotICogQHVuaXRfc2l6ZTogdW5pdCBzaXplIGluIGJ5dGVzLCBtdXN0IGJlIG11bHRpcGxlIG9mIFBBR0VfU0laRSwgLTEgZm9yIGF1dG8KLSAqIEBiYXNlX2FkZHI6IG1hcHBlZCBhZGRyZXNzLCBOVUxMIGZvciBhdXRvCi0gKiBAcG9wdWxhdGVfcHRlX2ZuOiBjYWxsYmFjayB0byBhbGxvY2F0ZSBwYWdldGFibGUsIE5VTEwgaWYgdW5uZWNlc3NhcnkKKyAqIEBhdG9tX3NpemU6IGFsbG9jYXRpb24gYXRvbSBzaXplCisgKiBAY3B1X2Rpc3RhbmNlX2ZuOiBjYWxsYmFjayB0byBkZXRlcm1pbmUgZGlzdGFuY2UgYmV0d2VlbiBjcHVzLCBvcHRpb25hbAorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBncm91cGluZyBvZiB1bml0cywgdGhlaXIgbWFwcGluZ3MgdG8gY3B1cworICogYW5kIG90aGVyIHBhcmFtZXRlcnMgY29uc2lkZXJpbmcgbmVlZGVkIHBlcmNwdSBzaXplLCBhbGxvY2F0aW9uCisgKiBhdG9tIHNpemUgYW5kIGRpc3RhbmNlcyBiZXR3ZWVuIENQVXMuCisgKgorICogR3JvdXBzIGFyZSBhbHdheXMgbXV0bGlwbGVzIG9mIGF0b20gc2l6ZSBhbmQgQ1BVcyB3aGljaCBhcmUgb2YKKyAqIExPQ0FMX0RJU1RBTkNFIGJvdGggd2F5cyBhcmUgZ3JvdXBlZCB0b2dldGhlciBhbmQgc2hhcmUgc3BhY2UgZm9yCisgKiB1bml0cyBpbiB0aGUgc2FtZSBncm91cC4gIFRoZSByZXR1cm5lZCBjb25maWd1cmF0aW9uIGlzIGd1YXJhbnRlZWQKKyAqIHRvIGhhdmUgQ1BVcyBvbiBkaWZmZXJlbnQgbm9kZXMgb24gZGlmZmVyZW50IGdyb3VwcyBhbmQgPj03NSUgdXNhZ2UKKyAqIG9mIGFsbG9jYXRlZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCisgKgorICogUkVUVVJOUzoKKyAqIE9uIHN1Y2Nlc3MsIHBvaW50ZXIgdG8gdGhlIG5ldyBhbGxvY2F0aW9uX2luZm8gaXMgcmV0dXJuZWQuICBPbgorICogZmFpbHVyZSwgRVJSX1BUUiB2YWx1ZSBpcyByZXR1cm5lZC4KKyAqLworc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBwY3B1X2J1aWxkX2FsbG9jX2luZm8oCisJCQkJc2l6ZV90IHJlc2VydmVkX3NpemUsIHNzaXplX3QgZHluX3NpemUsCisJCQkJc2l6ZV90IGF0b21fc2l6ZSwKKwkJCQlwY3B1X2ZjX2NwdV9kaXN0YW5jZV9mbl90IGNwdV9kaXN0YW5jZV9mbikKK3sKKwlzdGF0aWMgaW50IGdyb3VwX21hcFtOUl9DUFVTXSBfX2luaXRkYXRhOworCXN0YXRpYyBpbnQgZ3JvdXBfY250W05SX0NQVVNdIF9faW5pdGRhdGE7CisJY29uc3Qgc2l6ZV90IHN0YXRpY19zaXplID0gX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydDsKKwlpbnQgZ3JvdXBfY250X21heCA9IDAsIG5yX2dyb3VwcyA9IDEsIG5yX3VuaXRzID0gMDsKKwlzaXplX3Qgc2l6ZV9zdW0sIG1pbl91bml0X3NpemUsIGFsbG9jX3NpemU7CisJaW50IHVwYSwgbWF4X3VwYSwgdW5pbml0aWFsaXplZF92YXIoYmVzdF91cGEpOwkvKiB1bml0c19wZXJfYWxsb2MgKi8KKwlpbnQgbGFzdF9hbGxvY3MsIGdyb3VwLCB1bml0OworCXVuc2lnbmVkIGludCBjcHUsIHRjcHU7CisJc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWk7CisJdW5zaWduZWQgaW50ICpjcHVfbWFwOworCisJLyoKKwkgKiBEZXRlcm1pbmUgbWluX3VuaXRfc2l6ZSwgYWxsb2Nfc2l6ZSBhbmQgbWF4X3VwYSBzdWNoIHRoYXQKKwkgKiBhbGxvY19zaXplIGlzIG11bHRpcGxlIG9mIGF0b21fc2l6ZSBhbmQgaXMgdGhlIHNtYWxsZXN0CisJICogd2hpY2ggY2FuIGFjY29tb2RhdGUgNGsgYWxpZ25lZCBzZWdtZW50cyB3aGljaCBhcmUgZXF1YWwgdG8KKwkgKiBvciBsYXJnZXIgdGhhbiBtaW5fdW5pdF9zaXplLgorCSAqLworCXNpemVfc3VtID0gcGNwdV9jYWxjX2ZjX3NpemVzKHN0YXRpY19zaXplLCByZXNlcnZlZF9zaXplLCAmZHluX3NpemUpOworCW1pbl91bml0X3NpemUgPSBtYXhfdChzaXplX3QsIHNpemVfc3VtLCBQQ1BVX01JTl9VTklUX1NJWkUpOworCisJYWxsb2Nfc2l6ZSA9IHJvdW5kdXAobWluX3VuaXRfc2l6ZSwgYXRvbV9zaXplKTsKKwl1cGEgPSBhbGxvY19zaXplIC8gbWluX3VuaXRfc2l6ZTsKKwl3aGlsZSAoYWxsb2Nfc2l6ZSAlIHVwYSB8fCAoKGFsbG9jX3NpemUgLyB1cGEpICYgflBBR0VfTUFTSykpCisJCXVwYS0tOworCW1heF91cGEgPSB1cGE7CisKKwkvKiBncm91cCBjcHVzIGFjY29yZGluZyB0byB0aGVpciBwcm94aW1pdHkgKi8KKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCWdyb3VwID0gMDsKKwluZXh0X2dyb3VwOgorCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUodGNwdSkgeworCQkJaWYgKGNwdSA9PSB0Y3B1KQorCQkJCWJyZWFrOworCQkJaWYgKGdyb3VwX21hcFt0Y3B1XSA9PSBncm91cCAmJiBjcHVfZGlzdGFuY2VfZm4gJiYKKwkJCSAgICAoY3B1X2Rpc3RhbmNlX2ZuKGNwdSwgdGNwdSkgPiBMT0NBTF9ESVNUQU5DRSB8fAorCQkJICAgICBjcHVfZGlzdGFuY2VfZm4odGNwdSwgY3B1KSA+IExPQ0FMX0RJU1RBTkNFKSkgeworCQkJCWdyb3VwKys7CisJCQkJbnJfZ3JvdXBzID0gbWF4KG5yX2dyb3VwcywgZ3JvdXAgKyAxKTsKKwkJCQlnb3RvIG5leHRfZ3JvdXA7CisJCQl9CisJCX0KKwkJZ3JvdXBfbWFwW2NwdV0gPSBncm91cDsKKwkJZ3JvdXBfY250W2dyb3VwXSsrOworCQlncm91cF9jbnRfbWF4ID0gbWF4KGdyb3VwX2NudF9tYXgsIGdyb3VwX2NudFtncm91cF0pOworCX0KKworCS8qCisJICogRXhwYW5kIHVuaXQgc2l6ZSB1bnRpbCBhZGRyZXNzIHNwYWNlIHVzYWdlIGdvZXMgb3ZlciA3NSUKKwkgKiBhbmQgdGhlbiBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpdGhvdXQgdXNpbmcgbW9yZSBhZGRyZXNzCisJICogc3BhY2UuCisJICovCisJbGFzdF9hbGxvY3MgPSBJTlRfTUFYOworCWZvciAodXBhID0gbWF4X3VwYTsgdXBhOyB1cGEtLSkgeworCQlpbnQgYWxsb2NzID0gMCwgd2FzdGVkID0gMDsKKworCQlpZiAoYWxsb2Nfc2l6ZSAlIHVwYSB8fCAoKGFsbG9jX3NpemUgLyB1cGEpICYgflBBR0VfTUFTSykpCisJCQljb250aW51ZTsKKworCQlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBucl9ncm91cHM7IGdyb3VwKyspIHsKKwkJCWludCB0aGlzX2FsbG9jcyA9IERJVl9ST1VORF9VUChncm91cF9jbnRbZ3JvdXBdLCB1cGEpOworCQkJYWxsb2NzICs9IHRoaXNfYWxsb2NzOworCQkJd2FzdGVkICs9IHRoaXNfYWxsb2NzICogdXBhIC0gZ3JvdXBfY250W2dyb3VwXTsKKwkJfQorCisJCS8qCisJCSAqIERvbid0IGFjY2VwdCBpZiB3YXN0YWdlIGlzIG92ZXIgMjUlLiAgVGhlCisJCSAqIGdyZWF0ZXItdGhhbiBjb21wYXJpc29uIGVuc3VyZXMgdXBhPT0xIGFsd2F5cworCQkgKiBwYXNzZXMgdGhlIGZvbGxvd2luZyBjaGVjay4KKwkJICovCisJCWlmICh3YXN0ZWQgPiBudW1fcG9zc2libGVfY3B1cygpIC8gMykKKwkJCWNvbnRpbnVlOworCisJCS8qIGFuZCB0aGVuIGRvbid0IGNvbnN1bWUgbW9yZSBtZW1vcnkgKi8KKwkJaWYgKGFsbG9jcyA+IGxhc3RfYWxsb2NzKQorCQkJYnJlYWs7CisJCWxhc3RfYWxsb2NzID0gYWxsb2NzOworCQliZXN0X3VwYSA9IHVwYTsKKwl9CisJdXBhID0gYmVzdF91cGE7CisKKwkvKiBhbGxvY2F0ZSBhbmQgZmlsbCBhbGxvY19pbmZvICovCisJZm9yIChncm91cCA9IDA7IGdyb3VwIDwgbnJfZ3JvdXBzOyBncm91cCsrKQorCQlucl91bml0cyArPSByb3VuZHVwKGdyb3VwX2NudFtncm91cF0sIHVwYSk7CisKKwlhaSA9IHBjcHVfYWxsb2NfYWxsb2NfaW5mbyhucl9ncm91cHMsIG5yX3VuaXRzKTsKKwlpZiAoIWFpKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwljcHVfbWFwID0gYWktPmdyb3Vwc1swXS5jcHVfbWFwOworCisJZm9yIChncm91cCA9IDA7IGdyb3VwIDwgbnJfZ3JvdXBzOyBncm91cCsrKSB7CisJCWFpLT5ncm91cHNbZ3JvdXBdLmNwdV9tYXAgPSBjcHVfbWFwOworCQljcHVfbWFwICs9IHJvdW5kdXAoZ3JvdXBfY250W2dyb3VwXSwgdXBhKTsKKwl9CisKKwlhaS0+c3RhdGljX3NpemUgPSBzdGF0aWNfc2l6ZTsKKwlhaS0+cmVzZXJ2ZWRfc2l6ZSA9IHJlc2VydmVkX3NpemU7CisJYWktPmR5bl9zaXplID0gZHluX3NpemU7CisJYWktPnVuaXRfc2l6ZSA9IGFsbG9jX3NpemUgLyB1cGE7CisJYWktPmF0b21fc2l6ZSA9IGF0b21fc2l6ZTsKKwlhaS0+YWxsb2Nfc2l6ZSA9IGFsbG9jX3NpemU7CisKKwlmb3IgKGdyb3VwID0gMCwgdW5pdCA9IDA7IGdyb3VwX2NudFtncm91cF07IGdyb3VwKyspIHsKKwkJc3RydWN0IHBjcHVfZ3JvdXBfaW5mbyAqZ2kgPSAmYWktPmdyb3Vwc1tncm91cF07CisKKwkJLyoKKwkJICogSW5pdGlhbGl6ZSBiYXNlX29mZnNldCBhcyBpZiBhbGwgZ3JvdXBzIGFyZSBsb2NhdGVkCisJCSAqIGJhY2stdG8tYmFjay4gIFRoZSBjYWxsZXIgc2hvdWxkIHVwZGF0ZSB0aGlzIHRvCisJCSAqIHJlZmxlY3QgYWN0dWFsIGFsbG9jYXRpb24uCisJCSAqLworCQlnaS0+YmFzZV9vZmZzZXQgPSB1bml0ICogYWktPnVuaXRfc2l6ZTsKKworCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQkJaWYgKGdyb3VwX21hcFtjcHVdID09IGdyb3VwKQorCQkJCWdpLT5jcHVfbWFwW2dpLT5ucl91bml0cysrXSA9IGNwdTsKKwkJZ2ktPm5yX3VuaXRzID0gcm91bmR1cChnaS0+bnJfdW5pdHMsIHVwYSk7CisJCXVuaXQgKz0gZ2ktPm5yX3VuaXRzOworCX0KKwlCVUdfT04odW5pdCAhPSBucl91bml0cyk7CisKKwlyZXR1cm4gYWk7Cit9CisKKy8qKgorICogcGNwdV9kdW1wX2FsbG9jX2luZm8gLSBwcmludCBvdXQgaW5mb3JtYXRpb24gYWJvdXQgcGNwdV9hbGxvY19pbmZvCisgKiBAbHZsOiBsb2dsZXZlbAorICogQGFpOiBhbGxvY2F0aW9uIGluZm8gdG8gZHVtcAorICoKKyAqIFByaW50IG91dCBpbmZvcm1hdGlvbiBhYm91dCBAYWkgdXNpbmcgbG9nbGV2ZWwgQGx2bC4KKyAqLworc3RhdGljIHZvaWQgcGNwdV9kdW1wX2FsbG9jX2luZm8oY29uc3QgY2hhciAqbHZsLAorCQkJCSBjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSkKK3sKKwlpbnQgZ3JvdXBfd2lkdGggPSAxLCBjcHVfd2lkdGggPSAxLCB3aWR0aDsKKwljaGFyIGVtcHR5X3N0cltdID0gIi0tLS0tLS0tIjsKKwlpbnQgYWxsb2MgPSAwLCBhbGxvY19lbmQgPSAwOworCWludCBncm91cCwgdjsKKwlpbnQgdXBhLCBhcGw7CS8qIHVuaXRzIHBlciBhbGxvYywgYWxsb2NzIHBlciBsaW5lICovCisKKwl2ID0gYWktPm5yX2dyb3VwczsKKwl3aGlsZSAodiAvPSAxMCkKKwkJZ3JvdXBfd2lkdGgrKzsKKworCXYgPSBudW1fcG9zc2libGVfY3B1cygpOworCXdoaWxlICh2IC89IDEwKQorCQljcHVfd2lkdGgrKzsKKwllbXB0eV9zdHJbbWluX3QoaW50LCBjcHVfd2lkdGgsIHNpemVvZihlbXB0eV9zdHIpIC0gMSldID0gJ1wwJzsKKworCXVwYSA9IGFpLT5hbGxvY19zaXplIC8gYWktPnVuaXRfc2l6ZTsKKwl3aWR0aCA9IHVwYSAqIChjcHVfd2lkdGggKyAxKSArIGdyb3VwX3dpZHRoICsgMzsKKwlhcGwgPSByb3VuZGRvd25fcG93X29mX3R3byhtYXgoNjAgLyB3aWR0aCwgMSkpOworCisJcHJpbnRrKCIlc3BjcHUtYWxsb2M6IHMlenUgciV6dSBkJXp1IHUlenUgYWxsb2M9JXp1KiV6dSIsCisJICAgICAgIGx2bCwgYWktPnN0YXRpY19zaXplLCBhaS0+cmVzZXJ2ZWRfc2l6ZSwgYWktPmR5bl9zaXplLAorCSAgICAgICBhaS0+dW5pdF9zaXplLCBhaS0+YWxsb2Nfc2l6ZSAvIGFpLT5hdG9tX3NpemUsIGFpLT5hdG9tX3NpemUpOworCisJZm9yIChncm91cCA9IDA7IGdyb3VwIDwgYWktPm5yX2dyb3VwczsgZ3JvdXArKykgeworCQljb25zdCBzdHJ1Y3QgcGNwdV9ncm91cF9pbmZvICpnaSA9ICZhaS0+Z3JvdXBzW2dyb3VwXTsKKwkJaW50IHVuaXQgPSAwLCB1bml0X2VuZCA9IDA7CisKKwkJQlVHX09OKGdpLT5ucl91bml0cyAlIHVwYSk7CisJCWZvciAoYWxsb2NfZW5kICs9IGdpLT5ucl91bml0cyAvIHVwYTsKKwkJICAgICBhbGxvYyA8IGFsbG9jX2VuZDsgYWxsb2MrKykgeworCQkJaWYgKCEoYWxsb2MgJSBhcGwpKSB7CisJCQkJcHJpbnRrKCJcbiIpOworCQkJCXByaW50aygiJXNwY3B1LWFsbG9jOiAiLCBsdmwpOworCQkJfQorCQkJcHJpbnRrKCJbJTAqZF0gIiwgZ3JvdXBfd2lkdGgsIGdyb3VwKTsKKworCQkJZm9yICh1bml0X2VuZCArPSB1cGE7IHVuaXQgPCB1bml0X2VuZDsgdW5pdCsrKQorCQkJCWlmIChnaS0+Y3B1X21hcFt1bml0XSAhPSBOUl9DUFVTKQorCQkJCQlwcmludGsoIiUwKmQgIiwgY3B1X3dpZHRoLAorCQkJCQkgICAgICAgZ2ktPmNwdV9tYXBbdW5pdF0pOworCQkJCWVsc2UKKwkJCQkJcHJpbnRrKCIlcyAiLCBlbXB0eV9zdHIpOworCQl9CisJfQorCXByaW50aygiXG4iKTsKK30KKworLyoqCisgKiBwY3B1X3NldHVwX2ZpcnN0X2NodW5rIC0gaW5pdGlhbGl6ZSB0aGUgZmlyc3QgcGVyY3B1IGNodW5rCisgKiBAYWk6IHBjcHVfYWxsb2NfaW5mbyBkZXNjcmliaW5nIGhvdyB0byBwZXJjcHUgYXJlYSBpcyBzaGFwZWQKKyAqIEBiYXNlX2FkZHI6IG1hcHBlZCBhZGRyZXNzCiAgKgogICogSW5pdGlhbGl6ZSB0aGUgZmlyc3QgcGVyY3B1IGNodW5rIHdoaWNoIGNvbnRhaW5zIHRoZSBrZXJuZWwgc3RhdGljCiAgKiBwZXJwY3UgYXJlYS4gIFRoaXMgZnVuY3Rpb24gaXMgdG8gYmUgY2FsbGVkIGZyb20gYXJjaCBwZXJjcHUgYXJlYQotICogc2V0dXAgcGF0aC4gIFRoZSBmaXJzdCB0d28gcGFyYW1ldGVycyBhcmUgbWFuZGF0b3J5LiAgVGhlIHJlc3QgYXJlCi0gKiBvcHRpb25hbC4KKyAqIHNldHVwIHBhdGguCiAgKgotICogQGdldF9wYWdlX2ZuKCkgc2hvdWxkIHJldHVybiBwb2ludGVyIHRvIHBlcmNwdSBwYWdlIGdpdmVuIGNwdQotICogbnVtYmVyIGFuZCBwYWdlIG51bWJlci4gIEl0IHNob3VsZCBhdCBsZWFzdCByZXR1cm4gZW5vdWdoIHBhZ2VzIHRvCi0gKiBjb3ZlciB0aGUgc3RhdGljIGFyZWEuICBUaGUgcmV0dXJuZWQgcGFnZXMgZm9yIHN0YXRpYyBhcmVhIHNob3VsZAotICogaGF2ZSBiZWVuIGluaXRpYWxpemVkIHdpdGggdmFsaWQgZGF0YS4gIElmIEB1bml0X3NpemUgaXMgc3BlY2lmaWVkLAotICogaXQgY2FuIGFsc28gcmV0dXJuIHBhZ2VzIGFmdGVyIHRoZSBzdGF0aWMgYXJlYS4gIE5VTEwgcmV0dXJuCi0gKiBpbmRpY2F0ZXMgZW5kIG9mIHBhZ2VzIGZvciB0aGUgY3B1LiAgTm90ZSB0aGF0IEBnZXRfcGFnZV9mbigpIG11c3QKLSAqIHJldHVybiB0aGUgc2FtZSBudW1iZXIgb2YgcGFnZXMgZm9yIGFsbCBjcHVzLgorICogQGFpIGNvbnRhaW5zIGFsbCBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gaW5pdGlhbGl6ZSB0aGUgZmlyc3QKKyAqIGNodW5rIGFuZCBwcmltZSB0aGUgZHluYW1pYyBwZXJjcHUgYWxsb2NhdG9yLgogICoKLSAqIEByZXNlcnZlZF9zaXplLCBpZiBub24temVybywgc3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgYnl0ZXMgdG8KKyAqIEBhaS0+c3RhdGljX3NpemUgaXMgdGhlIHNpemUgb2Ygc3RhdGljIHBlcmNwdSBhcmVhLgorICoKKyAqIEBhaS0+cmVzZXJ2ZWRfc2l6ZSwgaWYgbm9uLXplcm8sIHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIGJ5dGVzIHRvCiAgKiByZXNlcnZlIGFmdGVyIHRoZSBzdGF0aWMgYXJlYSBpbiB0aGUgZmlyc3QgY2h1bmsuICBUaGlzIHJlc2VydmVzCiAgKiB0aGUgZmlyc3QgY2h1bmsgc3VjaCB0aGF0IGl0J3MgYXZhaWxhYmxlIG9ubHkgdGhyb3VnaCByZXNlcnZlZAogICogcGVyY3B1IGFsbG9jYXRpb24uICBUaGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHNlcnZlIG1vZHVsZSBwZXJjcHUKQEAgLTEwMTgsMjIgKzE1MzcsMjkgQEAKICAqIGxpbWl0ZWQgb2Zmc2V0IHJhbmdlIGZvciBzeW1ib2wgcmVsb2NhdGlvbnMgdG8gZ3VhcmFudGVlIG1vZHVsZQogICogcGVyY3B1IHN5bWJvbHMgZmFsbCBpbnNpZGUgdGhlIHJlbG9jYXRhYmxlIHJhbmdlLgogICoKLSAqIEBkeW5fc2l6ZSwgaWYgbm9uLW5lZ2F0aXZlLCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgYnl0ZXMKLSAqIGF2YWlsYWJsZSBmb3IgZHluYW1pYyBhbGxvY2F0aW9uIGluIHRoZSBmaXJzdCBjaHVuay4gIFNwZWNpZnlpbmcKLSAqIG5vbi1uZWdhdGl2ZSB2YWx1ZSBtYWtlcyBwZXJjcHUgbGVhdmUgYWxvbmUgdGhlIGFyZWEgYmV5b25kCi0gKiBAc3RhdGljX3NpemUgKyBAcmVzZXJ2ZWRfc2l6ZSArIEBkeW5fc2l6ZS4KKyAqIEBhaS0+ZHluX3NpemUgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBmb3IgZHluYW1pYworICogYWxsb2NhdGlvbiBpbiB0aGUgZmlyc3QgY2h1bmsuICBUaGUgYXJlYSBiZXR3ZWVuIEBhaS0+c3RhdGljX3NpemUgKworICogQGFpLT5yZXNlcnZlZF9zaXplICsgQGFpLT5keW5fc2l6ZSBhbmQgQGFpLT51bml0X3NpemUgaXMgdW51c2VkLgogICoKLSAqIEB1bml0X3NpemUsIGlmIG5vbi1uZWdhdGl2ZSwgc3BlY2lmaWVzIHVuaXQgc2l6ZSBhbmQgbXVzdCBiZQotICogYWxpZ25lZCB0byBQQUdFX1NJWkUgYW5kIGVxdWFsIHRvIG9yIGxhcmdlciB0aGFuIEBzdGF0aWNfc2l6ZSArCi0gKiBAcmVzZXJ2ZWRfc2l6ZSArIGlmIG5vbi1uZWdhdGl2ZSwgQGR5bl9zaXplLgorICogQGFpLT51bml0X3NpemUgc3BlY2lmaWVzIHVuaXQgc2l6ZSBhbmQgbXVzdCBiZSBhbGlnbmVkIHRvIFBBR0VfU0laRQorICogYW5kIGVxdWFsIHRvIG9yIGxhcmdlciB0aGFuIEBhaS0+c3RhdGljX3NpemUgKyBAYWktPnJlc2VydmVkX3NpemUgKworICogQGFpLT5keW5fc2l6ZS4KICAqCi0gKiBOb24tbnVsbCBAYmFzZV9hZGRyIG1lYW5zIHRoYXQgdGhlIGNhbGxlciBhbHJlYWR5IGFsbG9jYXRlZCB2aXJ0dWFsCi0gKiByZWdpb24gZm9yIHRoZSBmaXJzdCBjaHVuayBhbmQgbWFwcGVkIGl0LiAgcGVyY3B1IG11c3Qgbm90IG1lc3MKLSAqIHdpdGggdGhlIGNodW5rLiAgTm90ZSB0aGF0IEBiYXNlX2FkZHIgd2l0aCAwIEB1bml0X3NpemUgb3Igbm9uLU5VTEwKLSAqIEBwb3B1bGF0ZV9wdGVfZm4gZG9lc24ndCBtYWtlIGFueSBzZW5zZS4KKyAqIEBhaS0+YXRvbV9zaXplIGlzIHRoZSBhbGxvY2F0aW9uIGF0b20gc2l6ZSBhbmQgdXNlZCBhcyBhbGlnbm1lbnQKKyAqIGZvciB2bSBhcmVhcy4KICAqCi0gKiBAcG9wdWxhdGVfcHRlX2ZuIGlzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHBhZ2V0YWJsZS4gIE5VTEwgbWVhbnMgdGhlCi0gKiBjYWxsZXIgYWxyZWFkeSBwb3B1bGF0ZWQgdGhlIHBhZ2V0YWJsZS4KKyAqIEBhaS0+YWxsb2Nfc2l6ZSBpcyB0aGUgYWxsb2NhdGlvbiBzaXplIGFuZCBhbHdheXMgbXVsdGlwbGUgb2YKKyAqIEBhaS0+YXRvbV9zaXplLiAgVGhpcyBpcyBsYXJnZXIgdGhhbiBAYWktPmF0b21fc2l6ZSBpZgorICogQGFpLT51bml0X3NpemUgaXMgbGFyZ2VyIHRoYW4gQGFpLT5hdG9tX3NpemUuCisgKgorICogQGFpLT5ucl9ncm91cHMgYW5kIEBhaS0+Z3JvdXBzIGRlc2NyaWJlIHZpcnR1YWwgbWVtb3J5IGxheW91dCBvZgorICogcGVyY3B1IGFyZWFzLiAgVW5pdHMgd2hpY2ggc2hvdWxkIGJlIGNvbG9jYXRlZCBhcmUgcHV0IGludG8gdGhlCisgKiBzYW1lIGdyb3VwLiAgRHluYW1pYyBWTSBhcmVhcyB3aWxsIGJlIGFsbG9jYXRlZCBhY2NvcmRpbmcgdG8gdGhlc2UKKyAqIGdyb3VwaW5ncy4gIElmIEBhaS0+bnJfZ3JvdXBzIGlzIHplcm8sIGEgc2luZ2xlIGdyb3VwIGNvbnRhaW5pbmcKKyAqIGFsbCB1bml0cyBpcyBhc3N1bWVkLgorICoKKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgbWFwcGVkIHRoZSBmaXJzdCBjaHVuayBhdCBAYmFzZV9hZGRyIGFuZAorICogY29waWVkIHN0YXRpYyBkYXRhIHRvIGVhY2ggdW5pdC4KICAqCiAgKiBJZiB0aGUgZmlyc3QgY2h1bmsgZW5kcyB1cCB3aXRoIGJvdGggcmVzZXJ2ZWQgYW5kIGR5bmFtaWMgYXJlYXMsIGl0CiAgKiBpcyBzZXJ2ZWQgYnkgdHdvIGNodW5rcyAtIG9uZSB0byBzZXJ2ZSB0aGUgY29yZSBzdGF0aWMgYW5kIHJlc2VydmVkCkBAIC0xMDQzLDQ5ICsxNTY5LDgzIEBACiAgKiBhbmQgYXZhaWxhYmxlIGZvciBkeW5hbWljIGFsbG9jYXRpb24gbGlrZSBhbnkgb3RoZXIgY2h1bmtzLgogICoKICAqIFJFVFVSTlM6Ci0gKiBUaGUgZGV0ZXJtaW5lZCBwY3B1X3VuaXRfc2l6ZSB3aGljaCBjYW4gYmUgdXNlZCB0byBpbml0aWFsaXplCi0gKiBwZXJjcHUgYWNjZXNzLgorICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS4KICAqLwotc2l6ZV90IF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKHBjcHVfZ2V0X3BhZ2VfZm5fdCBnZXRfcGFnZV9mbiwKLQkJCQkgICAgIHNpemVfdCBzdGF0aWNfc2l6ZSwgc2l6ZV90IHJlc2VydmVkX3NpemUsCi0JCQkJICAgICBzc2l6ZV90IGR5bl9zaXplLCBzc2l6ZV90IHVuaXRfc2l6ZSwKLQkJCQkgICAgIHZvaWQgKmJhc2VfYWRkciwKLQkJCQkgICAgIHBjcHVfcG9wdWxhdGVfcHRlX2ZuX3QgcG9wdWxhdGVfcHRlX2ZuKQoraW50IF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLAorCQkJCSAgdm9pZCAqYmFzZV9hZGRyKQogewotCXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0IGZpcnN0X3ZtOwogCXN0YXRpYyBpbnQgc21hcFsyXSwgZG1hcFsyXTsKLQlzaXplX3Qgc2l6ZV9zdW0gPSBzdGF0aWNfc2l6ZSArIHJlc2VydmVkX3NpemUgKwotCQkJICAoZHluX3NpemUgPj0gMCA/IGR5bl9zaXplIDogMCk7CisJc2l6ZV90IGR5bl9zaXplID0gYWktPmR5bl9zaXplOworCXNpemVfdCBzaXplX3N1bSA9IGFpLT5zdGF0aWNfc2l6ZSArIGFpLT5yZXNlcnZlZF9zaXplICsgZHluX3NpemU7CiAJc3RydWN0IHBjcHVfY2h1bmsgKnNjaHVuaywgKmRjaHVuayA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyAqZ3JvdXBfb2Zmc2V0czsKKwlzaXplX3QgKmdyb3VwX3NpemVzOworCXVuc2lnbmVkIGxvbmcgKnVuaXRfb2ZmOwogCXVuc2lnbmVkIGludCBjcHU7Ci0JaW50IG5yX3BhZ2VzOwotCWludCBlcnIsIGk7CisJaW50ICp1bml0X21hcDsKKwlpbnQgZ3JvdXAsIHVuaXQsIGk7CiAKLQkvKiBzYW50aXkgY2hlY2tzICovCisJLyogc2FuaXR5IGNoZWNrcyAqLwogCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHNtYXApID49IFBDUFVfREZMX01BUF9BTExPQyB8fAogCQkgICAgIEFSUkFZX1NJWkUoZG1hcCkgPj0gUENQVV9ERkxfTUFQX0FMTE9DKTsKLQlCVUdfT04oIXN0YXRpY19zaXplKTsKLQlpZiAodW5pdF9zaXplID49IDApIHsKLQkJQlVHX09OKHVuaXRfc2l6ZSA8IHNpemVfc3VtKTsKLQkJQlVHX09OKHVuaXRfc2l6ZSAmIH5QQUdFX01BU0spOwotCQlCVUdfT04odW5pdF9zaXplIDwgUENQVV9NSU5fVU5JVF9TSVpFKTsKLQl9IGVsc2UKLQkJQlVHX09OKGJhc2VfYWRkcik7Ci0JQlVHX09OKGJhc2VfYWRkciAmJiBwb3B1bGF0ZV9wdGVfZm4pOworCUJVR19PTihhaS0+bnJfZ3JvdXBzIDw9IDApOworCUJVR19PTighYWktPnN0YXRpY19zaXplKTsKKwlCVUdfT04oIWJhc2VfYWRkcik7CisJQlVHX09OKGFpLT51bml0X3NpemUgPCBzaXplX3N1bSk7CisJQlVHX09OKGFpLT51bml0X3NpemUgJiB+UEFHRV9NQVNLKTsKKwlCVUdfT04oYWktPnVuaXRfc2l6ZSA8IFBDUFVfTUlOX1VOSVRfU0laRSk7CiAKLQlpZiAodW5pdF9zaXplID49IDApCi0JCXBjcHVfdW5pdF9wYWdlcyA9IHVuaXRfc2l6ZSA+PiBQQUdFX1NISUZUOwotCWVsc2UKLQkJcGNwdV91bml0X3BhZ2VzID0gbWF4X3QoaW50LCBQQ1BVX01JTl9VTklUX1NJWkUgPj4gUEFHRV9TSElGVCwKLQkJCQkJUEZOX1VQKHNpemVfc3VtKSk7CisJcGNwdV9kdW1wX2FsbG9jX2luZm8oS0VSTl9ERUJVRywgYWkpOwogCisJLyogcHJvY2VzcyBncm91cCBpbmZvcm1hdGlvbiBhbmQgYnVpbGQgY29uZmlnIHRhYmxlcyBhY2NvcmRpbmdseSAqLworCWdyb3VwX29mZnNldHMgPSBhbGxvY19ib290bWVtKGFpLT5ucl9ncm91cHMgKiBzaXplb2YoZ3JvdXBfb2Zmc2V0c1swXSkpOworCWdyb3VwX3NpemVzID0gYWxsb2NfYm9vdG1lbShhaS0+bnJfZ3JvdXBzICogc2l6ZW9mKGdyb3VwX3NpemVzWzBdKSk7CisJdW5pdF9tYXAgPSBhbGxvY19ib290bWVtKG5yX2NwdV9pZHMgKiBzaXplb2YodW5pdF9tYXBbMF0pKTsKKwl1bml0X29mZiA9IGFsbG9jX2Jvb3RtZW0obnJfY3B1X2lkcyAqIHNpemVvZih1bml0X29mZlswXSkpOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBucl9jcHVfaWRzOyBjcHUrKykKKwkJdW5pdF9tYXBbY3B1XSA9IE5SX0NQVVM7CisJcGNwdV9maXJzdF91bml0X2NwdSA9IE5SX0NQVVM7CisKKwlmb3IgKGdyb3VwID0gMCwgdW5pdCA9IDA7IGdyb3VwIDwgYWktPm5yX2dyb3VwczsgZ3JvdXArKywgdW5pdCArPSBpKSB7CisJCWNvbnN0IHN0cnVjdCBwY3B1X2dyb3VwX2luZm8gKmdpID0gJmFpLT5ncm91cHNbZ3JvdXBdOworCisJCWdyb3VwX29mZnNldHNbZ3JvdXBdID0gZ2ktPmJhc2Vfb2Zmc2V0OworCQlncm91cF9zaXplc1tncm91cF0gPSBnaS0+bnJfdW5pdHMgKiBhaS0+dW5pdF9zaXplOworCisJCWZvciAoaSA9IDA7IGkgPCBnaS0+bnJfdW5pdHM7IGkrKykgeworCQkJY3B1ID0gZ2ktPmNwdV9tYXBbaV07CisJCQlpZiAoY3B1ID09IE5SX0NQVVMpCisJCQkJY29udGludWU7CisKKwkJCUJVR19PTihjcHUgPiBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KSk7CisJCQlCVUdfT04odW5pdF9tYXBbY3B1XSAhPSBOUl9DUFVTKTsKKworCQkJdW5pdF9tYXBbY3B1XSA9IHVuaXQgKyBpOworCQkJdW5pdF9vZmZbY3B1XSA9IGdpLT5iYXNlX29mZnNldCArIGkgKiBhaS0+dW5pdF9zaXplOworCisJCQlpZiAocGNwdV9maXJzdF91bml0X2NwdSA9PSBOUl9DUFVTKQorCQkJCXBjcHVfZmlyc3RfdW5pdF9jcHUgPSBjcHU7CisJCX0KKwl9CisJcGNwdV9sYXN0X3VuaXRfY3B1ID0gY3B1OworCXBjcHVfbnJfdW5pdHMgPSB1bml0OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJQlVHX09OKHVuaXRfbWFwW2NwdV0gPT0gTlJfQ1BVUyk7CisKKwlwY3B1X25yX2dyb3VwcyA9IGFpLT5ucl9ncm91cHM7CisJcGNwdV9ncm91cF9vZmZzZXRzID0gZ3JvdXBfb2Zmc2V0czsKKwlwY3B1X2dyb3VwX3NpemVzID0gZ3JvdXBfc2l6ZXM7CisJcGNwdV91bml0X21hcCA9IHVuaXRfbWFwOworCXBjcHVfdW5pdF9vZmZzZXRzID0gdW5pdF9vZmY7CisKKwkvKiBkZXRlcm1pbmUgYmFzaWMgcGFyYW1ldGVycyAqLworCXBjcHVfdW5pdF9wYWdlcyA9IGFpLT51bml0X3NpemUgPj4gUEFHRV9TSElGVDsKIAlwY3B1X3VuaXRfc2l6ZSA9IHBjcHVfdW5pdF9wYWdlcyA8PCBQQUdFX1NISUZUOwotCXBjcHVfY2h1bmtfc2l6ZSA9IG5yX2NwdV9pZHMgKiBwY3B1X3VuaXRfc2l6ZTsKLQlwY3B1X2NodW5rX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBwY3B1X2NodW5rKQotCQkrIG5yX2NwdV9pZHMgKiBwY3B1X3VuaXRfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7Ci0KLQlpZiAoZHluX3NpemUgPCAwKQotCQlkeW5fc2l6ZSA9IHBjcHVfdW5pdF9zaXplIC0gc3RhdGljX3NpemUgLSByZXNlcnZlZF9zaXplOworCXBjcHVfYXRvbV9zaXplID0gYWktPmF0b21fc2l6ZTsKKwlwY3B1X2NodW5rX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBwY3B1X2NodW5rKSArCisJCUJJVFNfVE9fTE9OR1MocGNwdV91bml0X3BhZ2VzKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKIAogCS8qCiAJICogQWxsb2NhdGUgY2h1bmsgc2xvdHMuICBUaGUgYWRkaXRpb25hbCBsYXN0IHNsb3QgaXMgZm9yCkBAIC0xMTA1LDE4OSArMTY2NSwzNTEgQEAKIAkgKi8KIAlzY2h1bmsgPSBhbGxvY19ib290bWVtKHBjcHVfY2h1bmtfc3RydWN0X3NpemUpOwogCUlOSVRfTElTVF9IRUFEKCZzY2h1bmstPmxpc3QpOwotCXNjaHVuay0+dm0gPSAmZmlyc3Rfdm07CisJc2NodW5rLT5iYXNlX2FkZHIgPSBiYXNlX2FkZHI7CiAJc2NodW5rLT5tYXAgPSBzbWFwOwogCXNjaHVuay0+bWFwX2FsbG9jID0gQVJSQVlfU0laRShzbWFwKTsKLQlzY2h1bmstPnBhZ2UgPSBzY2h1bmstPnBhZ2VfYXI7CisJc2NodW5rLT5pbW11dGFibGUgPSB0cnVlOworCWJpdG1hcF9maWxsKHNjaHVuay0+cG9wdWxhdGVkLCBwY3B1X3VuaXRfcGFnZXMpOwogCi0JaWYgKHJlc2VydmVkX3NpemUpIHsKLQkJc2NodW5rLT5mcmVlX3NpemUgPSByZXNlcnZlZF9zaXplOworCWlmIChhaS0+cmVzZXJ2ZWRfc2l6ZSkgeworCQlzY2h1bmstPmZyZWVfc2l6ZSA9IGFpLT5yZXNlcnZlZF9zaXplOwogCQlwY3B1X3Jlc2VydmVkX2NodW5rID0gc2NodW5rOwotCQlwY3B1X3Jlc2VydmVkX2NodW5rX2xpbWl0ID0gc3RhdGljX3NpemUgKyByZXNlcnZlZF9zaXplOworCQlwY3B1X3Jlc2VydmVkX2NodW5rX2xpbWl0ID0gYWktPnN0YXRpY19zaXplICsgYWktPnJlc2VydmVkX3NpemU7CiAJfSBlbHNlIHsKIAkJc2NodW5rLT5mcmVlX3NpemUgPSBkeW5fc2l6ZTsKIAkJZHluX3NpemUgPSAwOwkJCS8qIGR5bmFtaWMgYXJlYSBjb3ZlcmVkICovCiAJfQogCXNjaHVuay0+Y29udGlnX2hpbnQgPSBzY2h1bmstPmZyZWVfc2l6ZTsKIAotCXNjaHVuay0+bWFwW3NjaHVuay0+bWFwX3VzZWQrK10gPSAtc3RhdGljX3NpemU7CisJc2NodW5rLT5tYXBbc2NodW5rLT5tYXBfdXNlZCsrXSA9IC1haS0+c3RhdGljX3NpemU7CiAJaWYgKHNjaHVuay0+ZnJlZV9zaXplKQogCQlzY2h1bmstPm1hcFtzY2h1bmstPm1hcF91c2VkKytdID0gc2NodW5rLT5mcmVlX3NpemU7CiAKIAkvKiBpbml0IGR5bmFtaWMgY2h1bmsgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKGR5bl9zaXplKSB7Ci0JCWRjaHVuayA9IGFsbG9jX2Jvb3RtZW0oc2l6ZW9mKHN0cnVjdCBwY3B1X2NodW5rKSk7CisJCWRjaHVuayA9IGFsbG9jX2Jvb3RtZW0ocGNwdV9jaHVua19zdHJ1Y3Rfc2l6ZSk7CiAJCUlOSVRfTElTVF9IRUFEKCZkY2h1bmstPmxpc3QpOwotCQlkY2h1bmstPnZtID0gJmZpcnN0X3ZtOworCQlkY2h1bmstPmJhc2VfYWRkciA9IGJhc2VfYWRkcjsKIAkJZGNodW5rLT5tYXAgPSBkbWFwOwogCQlkY2h1bmstPm1hcF9hbGxvYyA9IEFSUkFZX1NJWkUoZG1hcCk7Ci0JCWRjaHVuay0+cGFnZSA9IHNjaHVuay0+cGFnZV9hcjsJLyogc2hhcmUgcGFnZSBtYXAgd2l0aCBzY2h1bmsgKi8KKwkJZGNodW5rLT5pbW11dGFibGUgPSB0cnVlOworCQliaXRtYXBfZmlsbChkY2h1bmstPnBvcHVsYXRlZCwgcGNwdV91bml0X3BhZ2VzKTsKIAogCQlkY2h1bmstPmNvbnRpZ19oaW50ID0gZGNodW5rLT5mcmVlX3NpemUgPSBkeW5fc2l6ZTsKIAkJZGNodW5rLT5tYXBbZGNodW5rLT5tYXBfdXNlZCsrXSA9IC1wY3B1X3Jlc2VydmVkX2NodW5rX2xpbWl0OwogCQlkY2h1bmstPm1hcFtkY2h1bmstPm1hcF91c2VkKytdID0gZGNodW5rLT5mcmVlX3NpemU7CiAJfQogCi0JLyogYWxsb2NhdGUgdm0gYWRkcmVzcyAqLwotCWZpcnN0X3ZtLmZsYWdzID0gVk1fQUxMT0M7Ci0JZmlyc3Rfdm0uc2l6ZSA9IHBjcHVfY2h1bmtfc2l6ZTsKLQotCWlmICghYmFzZV9hZGRyKQotCQl2bV9hcmVhX3JlZ2lzdGVyX2Vhcmx5KCZmaXJzdF92bSwgUEFHRV9TSVpFKTsKLQllbHNlIHsKLQkJLyoKLQkJICogUGFnZXMgYWxyZWFkeSBtYXBwZWQuICBObyBuZWVkIHRvIHJlbWFwIGludG8KLQkJICogdm1hbGxvYyBhcmVhLiAgSW4gdGhpcyBjYXNlIHRoZSBmaXJzdCBjaHVua3MgY2FuJ3QKLQkJICogYmUgbWFwcGVkIG9yIHVubWFwcGVkIGJ5IHBlcmNwdSBhbmQgYXJlIG1hcmtlZAotCQkgKiBpbW11dGFibGUuCi0JCSAqLwotCQlmaXJzdF92bS5hZGRyID0gYmFzZV9hZGRyOwotCQlzY2h1bmstPmltbXV0YWJsZSA9IHRydWU7Ci0JCWlmIChkY2h1bmspCi0JCQlkY2h1bmstPmltbXV0YWJsZSA9IHRydWU7Ci0JfQotCi0JLyogYXNzaWduIHBhZ2VzICovCi0JbnJfcGFnZXMgPSAtMTsKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBwY3B1X3VuaXRfcGFnZXM7IGkrKykgewotCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBnZXRfcGFnZV9mbihjcHUsIGkpOwotCi0JCQlpZiAoIXBhZ2UpCi0JCQkJYnJlYWs7Ci0JCQkqcGNwdV9jaHVua19wYWdlcChzY2h1bmssIGNwdSwgaSkgPSBwYWdlOwotCQl9Ci0KLQkJQlVHX09OKGkgPCBQRk5fVVAoc3RhdGljX3NpemUpKTsKLQotCQlpZiAobnJfcGFnZXMgPCAwKQotCQkJbnJfcGFnZXMgPSBpOwotCQllbHNlCi0JCQlCVUdfT04obnJfcGFnZXMgIT0gaSk7Ci0JfQotCi0JLyogbWFwIHRoZW0gKi8KLQlpZiAocG9wdWxhdGVfcHRlX2ZuKSB7Ci0JCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykKLQkJCQlwb3B1bGF0ZV9wdGVfZm4ocGNwdV9jaHVua19hZGRyKHNjaHVuaywKLQkJCQkJCQkJY3B1LCBpKSk7Ci0KLQkJZXJyID0gcGNwdV9tYXAoc2NodW5rLCAwLCBucl9wYWdlcyk7Ci0JCWlmIChlcnIpCi0JCQlwYW5pYygiZmFpbGVkIHRvIHNldHVwIHN0YXRpYyBwZXJjcHUgYXJlYSwgZXJyPSVkXG4iLAotCQkJICAgICAgZXJyKTsKLQl9Ci0KIAkvKiBsaW5rIHRoZSBmaXJzdCBjaHVuayBpbiAqLwogCXBjcHVfZmlyc3RfY2h1bmsgPSBkY2h1bmsgPzogc2NodW5rOwogCXBjcHVfY2h1bmtfcmVsb2NhdGUocGNwdV9maXJzdF9jaHVuaywgLTEpOwogCiAJLyogd2UncmUgZG9uZSAqLwotCXBjcHVfYmFzZV9hZGRyID0gKHZvaWQgKilwY3B1X2NodW5rX2FkZHIoc2NodW5rLCAwLCAwKTsKLQlyZXR1cm4gcGNwdV91bml0X3NpemU7CisJcGNwdV9iYXNlX2FkZHIgPSBiYXNlX2FkZHI7CisJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBFbWJlZGRpbmcgZmlyc3QgY2h1bmsgc2V0dXAgaGVscGVyLgotICovCi1zdGF0aWMgdm9pZCAqcGNwdWVfcHRyIF9faW5pdGRhdGE7Ci1zdGF0aWMgc2l6ZV90IHBjcHVlX3NpemUgX19pbml0ZGF0YTsKLXN0YXRpYyBzaXplX3QgcGNwdWVfdW5pdF9zaXplIF9faW5pdGRhdGE7Citjb25zdCBjaGFyICpwY3B1X2ZjX25hbWVzW1BDUFVfRkNfTlJdIF9faW5pdGRhdGEgPSB7CisJW1BDUFVfRkNfQVVUT10JPSAiYXV0byIsCisJW1BDUFVfRkNfRU1CRURdCT0gImVtYmVkIiwKKwlbUENQVV9GQ19QQUdFXQk9ICJwYWdlIiwKK307CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqIF9faW5pdCBwY3B1ZV9nZXRfcGFnZSh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgcGFnZW5vKQorZW51bSBwY3B1X2ZjIHBjcHVfY2hvc2VuX2ZjIF9faW5pdGRhdGEgPSBQQ1BVX0ZDX0FVVE87CisKK3N0YXRpYyBpbnQgX19pbml0IHBlcmNwdV9hbGxvY19zZXR1cChjaGFyICpzdHIpCiB7Ci0Jc2l6ZV90IG9mZiA9IChzaXplX3QpcGFnZW5vIDw8IFBBR0VfU0hJRlQ7CisJaWYgKDApCisJCS8qIG5hZGEgKi87CisjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSworCWVsc2UgaWYgKCFzdHJjbXAoc3RyLCAiZW1iZWQiKSkKKwkJcGNwdV9jaG9zZW5fZmMgPSBQQ1BVX0ZDX0VNQkVEOworI2VuZGlmCisjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LCisJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJwYWdlIikpCisJCXBjcHVfY2hvc2VuX2ZjID0gUENQVV9GQ19QQUdFOworI2VuZGlmCisJZWxzZQorCQlwcl93YXJuaW5nKCJQRVJDUFU6IHVua25vd24gYWxsb2NhdG9yICVzIHNwZWNpZmllZFxuIiwgc3RyKTsKIAotCWlmIChvZmYgPj0gcGNwdWVfc2l6ZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gdmlydF90b19wYWdlKHBjcHVlX3B0ciArIGNwdSAqIHBjcHVlX3VuaXRfc2l6ZSArIG9mZik7CisJcmV0dXJuIDA7CiB9CitlYXJseV9wYXJhbSgicGVyY3B1X2FsbG9jIiwgcGVyY3B1X2FsbG9jX3NldHVwKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSykgfHwgXAorCSFkZWZpbmVkKENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSkKIC8qKgogICogcGNwdV9lbWJlZF9maXJzdF9jaHVuayAtIGVtYmVkIHRoZSBmaXJzdCBwZXJjcHUgY2h1bmsgaW50byBib290bWVtCi0gKiBAc3RhdGljX3NpemU6IHRoZSBzaXplIG9mIHN0YXRpYyBwZXJjcHUgYXJlYSBpbiBieXRlcwogICogQHJlc2VydmVkX3NpemU6IHRoZSBzaXplIG9mIHJlc2VydmVkIHBlcmNwdSBhcmVhIGluIGJ5dGVzCiAgKiBAZHluX3NpemU6IGZyZWUgc2l6ZSBmb3IgZHluYW1pYyBhbGxvY2F0aW9uIGluIGJ5dGVzLCAtMSBmb3IgYXV0bwotICogQHVuaXRfc2l6ZTogdW5pdCBzaXplIGluIGJ5dGVzLCBtdXN0IGJlIG11bHRpcGxlIG9mIFBBR0VfU0laRSwgLTEgZm9yIGF1dG8KKyAqIEBhdG9tX3NpemU6IGFsbG9jYXRpb24gYXRvbSBzaXplCisgKiBAY3B1X2Rpc3RhbmNlX2ZuOiBjYWxsYmFjayB0byBkZXRlcm1pbmUgZGlzdGFuY2UgYmV0d2VlbiBjcHVzLCBvcHRpb25hbAorICogQGFsbG9jX2ZuOiBmdW5jdGlvbiB0byBhbGxvY2F0ZSBwZXJjcHUgcGFnZQorICogQGZyZWVfZm46IGZ1bnRpb24gdG8gZnJlZSBwZXJjcHUgcGFnZQogICoKICAqIFRoaXMgaXMgYSBoZWxwZXIgdG8gZWFzZSBzZXR0aW5nIHVwIGVtYmVkZGVkIGZpcnN0IHBlcmNwdSBjaHVuayBhbmQKICAqIGNhbiBiZSBjYWxsZWQgd2hlcmUgcGNwdV9zZXR1cF9maXJzdF9jaHVuaygpIGlzIGV4cGVjdGVkLgogICoKICAqIElmIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXR1cCB0aGUgZmlyc3QgY2h1bmssIGl0IGlzIGFsbG9jYXRlZAotICogYXMgYSBjb250aWd1b3VzIGFyZWEgdXNpbmcgYm9vdG1lbSBhbGxvY2F0b3IgYW5kIHVzZWQgYXMtaXMgd2l0aG91dAotICogYmVpbmcgbWFwcGVkIGludG8gdm1hbGxvYyBhcmVhLiAgVGhpcyBlbmFibGVzIHRoZSBmaXJzdCBjaHVuayB0bwotICogcGlnZ3kgYmFjayBvbiB0aGUgbGluZWFyIHBoeXNpY2FsIG1hcHBpbmcgd2hpY2ggb2Z0ZW4gdXNlcyBsYXJnZXIKLSAqIHBhZ2Ugc2l6ZS4KKyAqIGJ5IGNhbGxpbmcgQGFsbG9jX2ZuIGFuZCB1c2VkIGFzLWlzIHdpdGhvdXQgYmVpbmcgbWFwcGVkIGludG8KKyAqIHZtYWxsb2MgYXJlYS4gIEFsbG9jYXRpb25zIGFyZSBhbHdheXMgd2hvbGUgbXVsdGlwbGVzIG9mIEBhdG9tX3NpemUKKyAqIGFsaWduZWQgdG8gQGF0b21fc2l6ZS4KKyAqCisgKiBUaGlzIGVuYWJsZXMgdGhlIGZpcnN0IGNodW5rIHRvIHBpZ2d5IGJhY2sgb24gdGhlIGxpbmVhciBwaHlzaWNhbAorICogbWFwcGluZyB3aGljaCBvZnRlbiB1c2VzIGxhcmdlciBwYWdlIHNpemUuICBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMKKyAqIGNhbiByZXN1bHQgaW4gdmVyeSBzcGFyc2UgY3B1LT51bml0IG1hcHBpbmcgb24gTlVNQSBtYWNoaW5lcyB0aHVzCisgKiByZXF1aXJpbmcgbGFyZ2Ugdm1hbGxvYyBhZGRyZXNzIHNwYWNlLiAgRG9uJ3QgdXNlIHRoaXMgYWxsb2NhdG9yIGlmCisgKiB2bWFsbG9jIHNwYWNlIGlzIG5vdCBvcmRlcnMgb2YgbWFnbml0dWRlIGxhcmdlciB0aGFuIGRpc3RhbmNlcworICogYmV0d2VlbiBub2RlIG1lbW9yeSBhZGRyZXNzZXMgKGllLiAzMmJpdCBOVU1BIG1hY2hpbmVzKS4KICAqCiAgKiBXaGVuIEBkeW5fc2l6ZSBpcyBwb3NpdGl2ZSwgZHluYW1pYyBhcmVhIG1pZ2h0IGJlIGxhcmdlciB0aGFuCi0gKiBzcGVjaWZpZWQgdG8gZmlsbCBwYWdlIGFsaWdubWVudC4gIEFsc28sIHdoZW4gQGR5bl9zaXplIGlzIGF1dG8sCi0gKiBAZHluX3NpemUgZG9lcyBub3QgZmlsbCB0aGUgd2hvbGUgZmlyc3QgY2h1bmsgYnV0IG9ubHkgd2hhdCdzCi0gKiBuZWNlc3NhcnkgZm9yIHBhZ2UgYWxpZ25tZW50IGFmdGVyIHN0YXRpYyBhbmQgcmVzZXJ2ZWQgYXJlYXMuCisgKiBzcGVjaWZpZWQgdG8gZmlsbCBwYWdlIGFsaWdubWVudC4gIFdoZW4gQGR5bl9zaXplIGlzIGF1dG8sCisgKiBAZHluX3NpemUgaXMganVzdCBiaWcgZW5vdWdoIHRvIGZpbGwgcGFnZSBhbGlnbm1lbnQgYWZ0ZXIgc3RhdGljCisgKiBhbmQgcmVzZXJ2ZWQgYXJlYXMuCiAgKgogICogSWYgdGhlIG5lZWRlZCBzaXplIGlzIHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSBvciBzcGVjaWZpZWQgdW5pdAotICogc2l6ZSwgdGhlIGxlZnRvdmVyIGlzIHJldHVybmVkIHRvIHRoZSBib290bWVtIGFsbG9jYXRvci4KKyAqIHNpemUsIHRoZSBsZWZ0b3ZlciBpcyByZXR1cm5lZCB1c2luZyBAZnJlZV9mbi4KICAqCiAgKiBSRVRVUk5TOgotICogVGhlIGRldGVybWluZWQgcGNwdV91bml0X3NpemUgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZQotICogcGVyY3B1IGFjY2VzcyBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS4KKyAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCiAgKi8KLXNzaXplX3QgX19pbml0IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoc2l6ZV90IHN0YXRpY19zaXplLCBzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwKLQkJCQkgICAgICBzc2l6ZV90IGR5bl9zaXplLCBzc2l6ZV90IHVuaXRfc2l6ZSkKK2ludCBfX2luaXQgcGNwdV9lbWJlZF9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgc3NpemVfdCBkeW5fc2l6ZSwKKwkJCQkgIHNpemVfdCBhdG9tX3NpemUsCisJCQkJICBwY3B1X2ZjX2NwdV9kaXN0YW5jZV9mbl90IGNwdV9kaXN0YW5jZV9mbiwKKwkJCQkgIHBjcHVfZmNfYWxsb2NfZm5fdCBhbGxvY19mbiwKKwkJCQkgIHBjcHVfZmNfZnJlZV9mbl90IGZyZWVfZm4pCiB7Ci0Jc2l6ZV90IGNodW5rX3NpemU7Ci0JdW5zaWduZWQgaW50IGNwdTsKKwl2b2lkICpiYXNlID0gKHZvaWQgKilVTE9OR19NQVg7CisJdm9pZCAqKmFyZWFzID0gTlVMTDsKKwlzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaTsKKwlzaXplX3Qgc2l6ZV9zdW0sIGFyZWFzX3NpemU7CisJaW50IGdyb3VwLCBpLCByYzsKIAotCS8qIGRldGVybWluZSBwYXJhbWV0ZXJzIGFuZCBhbGxvY2F0ZSAqLwotCXBjcHVlX3NpemUgPSBQRk5fQUxJR04oc3RhdGljX3NpemUgKyByZXNlcnZlZF9zaXplICsKLQkJCSAgICAgICAoZHluX3NpemUgPj0gMCA/IGR5bl9zaXplIDogMCkpOwotCWlmIChkeW5fc2l6ZSAhPSAwKQotCQlkeW5fc2l6ZSA9IHBjcHVlX3NpemUgLSBzdGF0aWNfc2l6ZSAtIHJlc2VydmVkX3NpemU7CisJYWkgPSBwY3B1X2J1aWxkX2FsbG9jX2luZm8ocmVzZXJ2ZWRfc2l6ZSwgZHluX3NpemUsIGF0b21fc2l6ZSwKKwkJCQkgICBjcHVfZGlzdGFuY2VfZm4pOworCWlmIChJU19FUlIoYWkpKQorCQlyZXR1cm4gUFRSX0VSUihhaSk7CiAKLQlpZiAodW5pdF9zaXplID49IDApIHsKLQkJQlVHX09OKHVuaXRfc2l6ZSA8IHBjcHVlX3NpemUpOwotCQlwY3B1ZV91bml0X3NpemUgPSB1bml0X3NpemU7Ci0JfSBlbHNlCi0JCXBjcHVlX3VuaXRfc2l6ZSA9IG1heF90KHNpemVfdCwgcGNwdWVfc2l6ZSwgUENQVV9NSU5fVU5JVF9TSVpFKTsKKwlzaXplX3N1bSA9IGFpLT5zdGF0aWNfc2l6ZSArIGFpLT5yZXNlcnZlZF9zaXplICsgYWktPmR5bl9zaXplOworCWFyZWFzX3NpemUgPSBQRk5fQUxJR04oYWktPm5yX2dyb3VwcyAqIHNpemVvZih2b2lkICopKTsKIAotCWNodW5rX3NpemUgPSBwY3B1ZV91bml0X3NpemUgKiBucl9jcHVfaWRzOwotCi0JcGNwdWVfcHRyID0gX19hbGxvY19ib290bWVtX25vcGFuaWMoY2h1bmtfc2l6ZSwgUEFHRV9TSVpFLAotCQkJCQkgICAgX19wYShNQVhfRE1BX0FERFJFU1MpKTsKLQlpZiAoIXBjcHVlX3B0cikgewotCQlwcl93YXJuaW5nKCJQRVJDUFU6IGZhaWxlZCB0byBhbGxvY2F0ZSAlenUgYnl0ZXMgZm9yICIKLQkJCSAgICJlbWJlZGRpbmdcbiIsIGNodW5rX3NpemUpOwotCQlyZXR1cm4gLUVOT01FTTsKKwlhcmVhcyA9IGFsbG9jX2Jvb3RtZW1fbm9wYW5pYyhhcmVhc19zaXplKTsKKwlpZiAoIWFyZWFzKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZTsKIAl9CiAKLQkvKiByZXR1cm4gdGhlIGxlZnRvdmVyIGFuZCBjb3B5ICovCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBucl9jcHVfaWRzOyBjcHUrKykgewotCQl2b2lkICpwdHIgPSBwY3B1ZV9wdHIgKyBjcHUgKiBwY3B1ZV91bml0X3NpemU7CisJLyogYWxsb2NhdGUsIGNvcHkgYW5kIGRldGVybWluZSBiYXNlIGFkZHJlc3MgKi8KKwlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBhaS0+bnJfZ3JvdXBzOyBncm91cCsrKSB7CisJCXN0cnVjdCBwY3B1X2dyb3VwX2luZm8gKmdpID0gJmFpLT5ncm91cHNbZ3JvdXBdOworCQl1bnNpZ25lZCBpbnQgY3B1ID0gTlJfQ1BVUzsKKwkJdm9pZCAqcHRyOwogCi0JCWlmIChjcHVfcG9zc2libGUoY3B1KSkgewotCQkJZnJlZV9ib290bWVtKF9fcGEocHRyICsgcGNwdWVfc2l6ZSksCi0JCQkJICAgICBwY3B1ZV91bml0X3NpemUgLSBwY3B1ZV9zaXplKTsKLQkJCW1lbWNweShwdHIsIF9fcGVyX2NwdV9sb2FkLCBzdGF0aWNfc2l6ZSk7Ci0JCX0gZWxzZQotCQkJZnJlZV9ib290bWVtKF9fcGEocHRyKSwgcGNwdWVfdW5pdF9zaXplKTsKKwkJZm9yIChpID0gMDsgaSA8IGdpLT5ucl91bml0cyAmJiBjcHUgPT0gTlJfQ1BVUzsgaSsrKQorCQkJY3B1ID0gZ2ktPmNwdV9tYXBbaV07CisJCUJVR19PTihjcHUgPT0gTlJfQ1BVUyk7CisKKwkJLyogYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSB3aG9sZSBncm91cCAqLworCQlwdHIgPSBhbGxvY19mbihjcHUsIGdpLT5ucl91bml0cyAqIGFpLT51bml0X3NpemUsIGF0b21fc2l6ZSk7CisJCWlmICghcHRyKSB7CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIG91dF9mcmVlX2FyZWFzOworCQl9CisJCWFyZWFzW2dyb3VwXSA9IHB0cjsKKworCQliYXNlID0gbWluKHB0ciwgYmFzZSk7CisKKwkJZm9yIChpID0gMDsgaSA8IGdpLT5ucl91bml0czsgaSsrLCBwdHIgKz0gYWktPnVuaXRfc2l6ZSkgeworCQkJaWYgKGdpLT5jcHVfbWFwW2ldID09IE5SX0NQVVMpIHsKKwkJCQkvKiB1bnVzZWQgdW5pdCwgZnJlZSB3aG9sZSAqLworCQkJCWZyZWVfZm4ocHRyLCBhaS0+dW5pdF9zaXplKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIGNvcHkgYW5kIHJldHVybiB0aGUgdW51c2VkIHBhcnQgKi8KKwkJCW1lbWNweShwdHIsIF9fcGVyX2NwdV9sb2FkLCBhaS0+c3RhdGljX3NpemUpOworCQkJZnJlZV9mbihwdHIgKyBzaXplX3N1bSwgYWktPnVuaXRfc2l6ZSAtIHNpemVfc3VtKTsKKwkJfQorCX0KKworCS8qIGJhc2UgYWRkcmVzcyBpcyBub3cga25vd24sIGRldGVybWluZSBncm91cCBiYXNlIG9mZnNldHMgKi8KKwlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBhaS0+bnJfZ3JvdXBzOyBncm91cCsrKQorCQlhaS0+Z3JvdXBzW2dyb3VwXS5iYXNlX29mZnNldCA9IGFyZWFzW2dyb3VwXSAtIGJhc2U7CisKKwlwcl9pbmZvKCJQRVJDUFU6IEVtYmVkZGVkICV6dSBwYWdlcy9jcHUgQCVwIHMlenUgciV6dSBkJXp1IHUlenVcbiIsCisJCVBGTl9ET1dOKHNpemVfc3VtKSwgYmFzZSwgYWktPnN0YXRpY19zaXplLCBhaS0+cmVzZXJ2ZWRfc2l6ZSwKKwkJYWktPmR5bl9zaXplLCBhaS0+dW5pdF9zaXplKTsKKworCXJjID0gcGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgYmFzZSk7CisJZ290byBvdXRfZnJlZTsKKworb3V0X2ZyZWVfYXJlYXM6CisJZm9yIChncm91cCA9IDA7IGdyb3VwIDwgYWktPm5yX2dyb3VwczsgZ3JvdXArKykKKwkJZnJlZV9mbihhcmVhc1tncm91cF0sCisJCQlhaS0+Z3JvdXBzW2dyb3VwXS5ucl91bml0cyAqIGFpLT51bml0X3NpemUpOworb3V0X2ZyZWU6CisJcGNwdV9mcmVlX2FsbG9jX2luZm8oYWkpOworCWlmIChhcmVhcykKKwkJZnJlZV9ib290bWVtKF9fcGEoYXJlYXMpLCBhcmVhc19zaXplKTsKKwlyZXR1cm4gcmM7Cit9CisjZW5kaWYgLyogQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyB8fAorCSAgIUNPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSAqLworCisjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LCisvKioKKyAqIHBjcHVfcGFnZV9maXJzdF9jaHVuayAtIG1hcCB0aGUgZmlyc3QgY2h1bmsgdXNpbmcgUEFHRV9TSVpFIHBhZ2VzCisgKiBAcmVzZXJ2ZWRfc2l6ZTogdGhlIHNpemUgb2YgcmVzZXJ2ZWQgcGVyY3B1IGFyZWEgaW4gYnl0ZXMKKyAqIEBhbGxvY19mbjogZnVuY3Rpb24gdG8gYWxsb2NhdGUgcGVyY3B1IHBhZ2UsIGFsd2F5cyBjYWxsZWQgd2l0aCBQQUdFX1NJWkUKKyAqIEBmcmVlX2ZuOiBmdW50aW9uIHRvIGZyZWUgcGVyY3B1IHBhZ2UsIGFsd2F5cyBjYWxsZWQgd2l0aCBQQUdFX1NJWkUKKyAqIEBwb3B1bGF0ZV9wdGVfZm46IGZ1bmN0aW9uIHRvIHBvcHVsYXRlIHB0ZQorICoKKyAqIFRoaXMgaXMgYSBoZWxwZXIgdG8gZWFzZSBzZXR0aW5nIHVwIHBhZ2UtcmVtYXBwZWQgZmlyc3QgcGVyY3B1CisgKiBjaHVuayBhbmQgY2FuIGJlIGNhbGxlZCB3aGVyZSBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKCkgaXMgZXhwZWN0ZWQuCisgKgorICogVGhpcyBpcyB0aGUgYmFzaWMgYWxsb2NhdG9yLiAgU3RhdGljIHBlcmNwdSBhcmVhIGlzIGFsbG9jYXRlZAorICogcGFnZS1ieS1wYWdlIGludG8gdm1hbGxvYyBhcmVhLgorICoKKyAqIFJFVFVSTlM6CisgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgX19pbml0IHBjcHVfcGFnZV9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwKKwkJCQkgcGNwdV9mY19hbGxvY19mbl90IGFsbG9jX2ZuLAorCQkJCSBwY3B1X2ZjX2ZyZWVfZm5fdCBmcmVlX2ZuLAorCQkJCSBwY3B1X2ZjX3BvcHVsYXRlX3B0ZV9mbl90IHBvcHVsYXRlX3B0ZV9mbikKK3sKKwlzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCB2bTsKKwlzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaTsKKwljaGFyIHBzaXplX3N0clsxNl07CisJaW50IHVuaXRfcGFnZXM7CisJc2l6ZV90IHBhZ2VzX3NpemU7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwlpbnQgdW5pdCwgaSwgaiwgcmM7CisKKwlzbnByaW50Zihwc2l6ZV9zdHIsIHNpemVvZihwc2l6ZV9zdHIpLCAiJWx1SyIsIFBBR0VfU0laRSA+PiAxMCk7CisKKwlhaSA9IHBjcHVfYnVpbGRfYWxsb2NfaW5mbyhyZXNlcnZlZF9zaXplLCAtMSwgUEFHRV9TSVpFLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGFpKSkKKwkJcmV0dXJuIFBUUl9FUlIoYWkpOworCUJVR19PTihhaS0+bnJfZ3JvdXBzICE9IDEpOworCUJVR19PTihhaS0+Z3JvdXBzWzBdLm5yX3VuaXRzICE9IG51bV9wb3NzaWJsZV9jcHVzKCkpOworCisJdW5pdF9wYWdlcyA9IGFpLT51bml0X3NpemUgPj4gUEFHRV9TSElGVDsKKworCS8qIHVuYWxpZ25lZCBhbGxvY2F0aW9ucyBjYW4ndCBiZSBmcmVlZCwgcm91bmQgdXAgdG8gcGFnZSBzaXplICovCisJcGFnZXNfc2l6ZSA9IFBGTl9BTElHTih1bml0X3BhZ2VzICogbnVtX3Bvc3NpYmxlX2NwdXMoKSAqCisJCQkgICAgICAgc2l6ZW9mKHBhZ2VzWzBdKSk7CisJcGFnZXMgPSBhbGxvY19ib290bWVtKHBhZ2VzX3NpemUpOworCisJLyogYWxsb2NhdGUgcGFnZXMgKi8KKwlqID0gMDsKKwlmb3IgKHVuaXQgPSAwOyB1bml0IDwgbnVtX3Bvc3NpYmxlX2NwdXMoKTsgdW5pdCsrKQorCQlmb3IgKGkgPSAwOyBpIDwgdW5pdF9wYWdlczsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgY3B1ID0gYWktPmdyb3Vwc1swXS5jcHVfbWFwW3VuaXRdOworCQkJdm9pZCAqcHRyOworCisJCQlwdHIgPSBhbGxvY19mbihjcHUsIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKKwkJCWlmICghcHRyKSB7CisJCQkJcHJfd2FybmluZygiUEVSQ1BVOiBmYWlsZWQgdG8gYWxsb2NhdGUgJXMgcGFnZSAiCisJCQkJCSAgICJmb3IgY3B1JXVcbiIsIHBzaXplX3N0ciwgY3B1KTsKKwkJCQlnb3RvIGVub21lbTsKKwkJCX0KKwkJCXBhZ2VzW2orK10gPSB2aXJ0X3RvX3BhZ2UocHRyKTsKKwkJfQorCisJLyogYWxsb2NhdGUgdm0gYXJlYSwgbWFwIHRoZSBwYWdlcyBhbmQgY29weSBzdGF0aWMgZGF0YSAqLworCXZtLmZsYWdzID0gVk1fQUxMT0M7CisJdm0uc2l6ZSA9IG51bV9wb3NzaWJsZV9jcHVzKCkgKiBhaS0+dW5pdF9zaXplOworCXZtX2FyZWFfcmVnaXN0ZXJfZWFybHkoJnZtLCBQQUdFX1NJWkUpOworCisJZm9yICh1bml0ID0gMDsgdW5pdCA8IG51bV9wb3NzaWJsZV9jcHVzKCk7IHVuaXQrKykgeworCQl1bnNpZ25lZCBsb25nIHVuaXRfYWRkciA9CisJCQkodW5zaWduZWQgbG9uZyl2bS5hZGRyICsgdW5pdCAqIGFpLT51bml0X3NpemU7CisKKwkJZm9yIChpID0gMDsgaSA8IHVuaXRfcGFnZXM7IGkrKykKKwkJCXBvcHVsYXRlX3B0ZV9mbih1bml0X2FkZHIgKyAoaSA8PCBQQUdFX1NISUZUKSk7CisKKwkJLyogcHRlIGFscmVhZHkgcG9wdWxhdGVkLCB0aGUgZm9sbG93aW5nIHNob3VsZG4ndCBmYWlsICovCisJCXJjID0gX19wY3B1X21hcF9wYWdlcyh1bml0X2FkZHIsICZwYWdlc1t1bml0ICogdW5pdF9wYWdlc10sCisJCQkJICAgICAgdW5pdF9wYWdlcyk7CisJCWlmIChyYyA8IDApCisJCQlwYW5pYygiZmFpbGVkIHRvIG1hcCBwZXJjcHUgYXJlYSwgZXJyPSVkXG4iLCByYyk7CisKKwkJLyoKKwkJICogRklYTUU6IEFyY2hzIHdpdGggdmlydHVhbCBjYWNoZSBzaG91bGQgZmx1c2ggbG9jYWwKKwkJICogY2FjaGUgZm9yIHRoZSBsaW5lYXIgbWFwcGluZyBoZXJlIC0gc29tZXRoaW5nCisJCSAqIGVxdWl2YWxlbnQgdG8gZmx1c2hfY2FjaGVfdm1hcCgpIG9uIHRoZSBsb2NhbCBjcHUuCisJCSAqIGZsdXNoX2NhY2hlX3ZtYXAoKSBjYW4ndCBiZSB1c2VkIGFzIG1vc3Qgc3VwcG9ydGluZworCQkgKiBkYXRhIHN0cnVjdHVyZXMgYXJlIG5vdCBzZXQgdXAgeWV0LgorCQkgKi8KKworCQkvKiBjb3B5IHN0YXRpYyBkYXRhICovCisJCW1lbWNweSgodm9pZCAqKXVuaXRfYWRkciwgX19wZXJfY3B1X2xvYWQsIGFpLT5zdGF0aWNfc2l6ZSk7CiAJfQogCiAJLyogd2UncmUgcmVhZHksIGNvbW1pdCAqLwotCXByX2luZm8oIlBFUkNQVTogRW1iZWRkZWQgJXp1IHBhZ2VzIGF0ICVwLCBzdGF0aWMgZGF0YSAlenUgYnl0ZXNcbiIsCi0JCXBjcHVlX3NpemUgPj4gUEFHRV9TSElGVCwgcGNwdWVfcHRyLCBzdGF0aWNfc2l6ZSk7CisJcHJfaW5mbygiUEVSQ1BVOiAlZCAlcyBwYWdlcy9jcHUgQCVwIHMlenUgciV6dSBkJXp1XG4iLAorCQl1bml0X3BhZ2VzLCBwc2l6ZV9zdHIsIHZtLmFkZHIsIGFpLT5zdGF0aWNfc2l6ZSwKKwkJYWktPnJlc2VydmVkX3NpemUsIGFpLT5keW5fc2l6ZSk7CiAKLQlyZXR1cm4gcGNwdV9zZXR1cF9maXJzdF9jaHVuayhwY3B1ZV9nZXRfcGFnZSwgc3RhdGljX3NpemUsCi0JCQkJICAgICAgcmVzZXJ2ZWRfc2l6ZSwgZHluX3NpemUsCi0JCQkJICAgICAgcGNwdWVfdW5pdF9zaXplLCBwY3B1ZV9wdHIsIE5VTEwpOworCXJjID0gcGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgdm0uYWRkcik7CisJZ290byBvdXRfZnJlZV9hcjsKKworZW5vbWVtOgorCXdoaWxlICgtLWogPj0gMCkKKwkJZnJlZV9mbihwYWdlX2FkZHJlc3MocGFnZXNbal0pLCBQQUdFX1NJWkUpOworCXJjID0gLUVOT01FTTsKK291dF9mcmVlX2FyOgorCWZyZWVfYm9vdG1lbShfX3BhKHBhZ2VzKSwgcGFnZXNfc2l6ZSk7CisJcGNwdV9mcmVlX2FsbG9jX2luZm8oYWkpOworCXJldHVybiByYzsKIH0KKyNlbmRpZiAvKiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksgKi8KKworLyoKKyAqIEdlbmVyaWMgcGVyY3B1IGFyZWEgc2V0dXAuCisgKgorICogVGhlIGVtYmVkZGluZyBoZWxwZXIgaXMgdXNlZCBiZWNhdXNlIGl0cyBiZWhhdmlvciBjbG9zZWx5IHJlc2VtYmxlcworICogdGhlIG9yaWdpbmFsIG5vbi1keW5hbWljIGdlbmVyaWMgcGVyY3B1IGFyZWEgc2V0dXAuICBUaGlzIGlzCisgKiBpbXBvcnRhbnQgYmVjYXVzZSBtYW55IGFyY2hzIGhhdmUgYWRkcmVzc2luZyByZXN0cmljdGlvbnMgYW5kIG1pZ2h0CisgKiBmYWlsIGlmIHRoZSBwZXJjcHUgYXJlYSBpcyBsb2NhdGVkIGZhciBhd2F5IGZyb20gdGhlIHByZXZpb3VzCisgKiBsb2NhdGlvbi4gIEFzIGFuIGFkZGVkIGJvbnVzLCBpbiBub24tTlVNQSBjYXNlcywgZW1iZWRkaW5nIGlzCisgKiBnZW5lcmFsbHkgYSBnb29kIGlkZWEgVExCLXdpc2UgYmVjYXVzZSBwZXJjcHUgYXJlYSBjYW4gcGlnZ3kgYmFjaworICogb24gdGhlIHBoeXNpY2FsIGxpbmVhciBtZW1vcnkgbWFwcGluZyB3aGljaCB1c2VzIGxhcmdlIHBhZ2UKKyAqIG1hcHBpbmdzIG9uIGFwcGxpY2FibGUgYXJjaHMuCisgKi8KKyNpZm5kZWYgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBCit1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseTsKK0VYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7CisKK3N0YXRpYyB2b2lkICogX19pbml0IHBjcHVfZGZsX2ZjX2FsbG9jKHVuc2lnbmVkIGludCBjcHUsIHNpemVfdCBzaXplLAorCQkJCSAgICAgICBzaXplX3QgYWxpZ24pCit7CisJcmV0dXJuIF9fYWxsb2NfYm9vdG1lbV9ub3BhbmljKHNpemUsIGFsaWduLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcGNwdV9kZmxfZmNfZnJlZSh2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworCWZyZWVfYm9vdG1lbShfX3BhKHB0ciksIHNpemUpOworfQorCit2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBkZWx0YTsKKwl1bnNpZ25lZCBpbnQgY3B1OworCWludCByYzsKKworCS8qCisJICogQWx3YXlzIHJlc2VydmUgYXJlYSBmb3IgbW9kdWxlIHBlcmNwdSB2YXJpYWJsZXMuICBUaGF0J3MKKwkgKiB3aGF0IHRoZSBsZWdhY3kgYWxsb2NhdG9yIGRpZC4KKwkgKi8KKwlyYyA9IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLAorCQkJCSAgICBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFLCBQQUdFX1NJWkUsIE5VTEwsCisJCQkJICAgIHBjcHVfZGZsX2ZjX2FsbG9jLCBwY3B1X2RmbF9mY19mcmVlKTsKKwlpZiAocmMgPCAwKQorCQlwYW5pYygiRmFpbGVkIHRvIGluaXRpYWxpemVkIHBlcmNwdSBhcmVhcy4iKTsKKworCWRlbHRhID0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJX19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgKyBwY3B1X3VuaXRfb2Zmc2V0c1tjcHVdOworfQorI2VuZGlmIC8qIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSAqLwpkaWZmIC0tZ2l0IGEvbW0vcXVpY2tsaXN0LmMgYi9tbS9xdWlja2xpc3QuYwppbmRleCBlNjZkMDdkLi42ZWVkZjdlIDEwMDY0NAotLS0gYS9tbS9xdWlja2xpc3QuYworKysgYi9tbS9xdWlja2xpc3QuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3F1aWNrbGlzdC5oPgogCi1ERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcXVpY2tsaXN0LCBxdWlja2xpc3QpW0NPTkZJR19OUl9RVUlDS107CitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcXVpY2tsaXN0IFtDT05GSUdfTlJfUVVJQ0tdLCBxdWlja2xpc3QpOwogCiAjZGVmaW5lIEZSQUNUSU9OX09GX05PREVfTUVNCTE2CiAKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGQ3MTMyMzkuLjVhMGIzZDQgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMjQ0Niw3ICsyNDQ2LDcgQEAKIAkuZ2V0eGF0dHIJPSBnZW5lcmljX2dldHhhdHRyLAogCS5saXN0eGF0dHIJPSBnZW5lcmljX2xpc3R4YXR0ciwKIAkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAotCS5wZXJtaXNzaW9uCT0gc2htZW1fcGVybWlzc2lvbiwKKwkuY2hlY2tfYWNsCT0gc2htZW1fY2hlY2tfYWNsLAogI2VuZGlmCiAKIH07CkBAIC0yNDY5LDcgKzI0NjksNyBAQAogCS5nZXR4YXR0cgk9IGdlbmVyaWNfZ2V0eGF0dHIsCiAJLmxpc3R4YXR0cgk9IGdlbmVyaWNfbGlzdHhhdHRyLAogCS5yZW1vdmV4YXR0cgk9IGdlbmVyaWNfcmVtb3ZleGF0dHIsCi0JLnBlcm1pc3Npb24JPSBzaG1lbV9wZXJtaXNzaW9uLAorCS5jaGVja19hY2wJPSBzaG1lbV9jaGVja19hY2wsCiAjZW5kaWYKIH07CiAKQEAgLTI0ODAsNyArMjQ4MCw3IEBACiAJLmdldHhhdHRyCT0gZ2VuZXJpY19nZXR4YXR0ciwKIAkubGlzdHhhdHRyCT0gZ2VuZXJpY19saXN0eGF0dHIsCiAJLnJlbW92ZXhhdHRyCT0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKLQkucGVybWlzc2lvbgk9IHNobWVtX3Blcm1pc3Npb24sCisJLmNoZWNrX2FjbAk9IHNobWVtX2NoZWNrX2FjbCwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvbW0vc2htZW1fYWNsLmMgYi9tbS9zaG1lbV9hY2wuYwppbmRleCA2MDZhOGU3Li5kZjJjODdmIDEwMDY0NAotLS0gYS9tbS9zaG1lbV9hY2wuYworKysgYi9tbS9zaG1lbV9hY2wuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAvKioKICAqIHNobWVtX2NoZWNrX2FjbCAgLSAgY2hlY2tfYWNsKCkgY2FsbGJhY2sgZm9yIGdlbmVyaWNfcGVybWlzc2lvbigpCiAgKi8KLXN0YXRpYyBpbnQKK2ludAogc2htZW1fY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IHNobWVtX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7CkBAIC0xNjksMTIgKzE2OSwzIEBACiAJfQogCXJldHVybiAtRUFHQUlOOwogfQotCi0vKioKLSAqIHNobWVtX3Blcm1pc3Npb24gIC0gIHBlcm1pc3Npb24oKSBpbm9kZSBvcGVyYXRpb24KLSAqLwotaW50Ci1zaG1lbV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQotewotCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIHNobWVtX2NoZWNrX2FjbCk7Ci19CmRpZmYgLS1naXQgYS9tbS9zbG9iLmMgYi9tbS9zbG9iLmMKaW5kZXggOTY0MWRhMy4uODM3ZWJkNiAxMDA2NDQKLS0tIGEvbW0vc2xvYi5jCisrKyBiL21tL3Nsb2IuYwpAQCAtNjkyLDMgKzY5Miw4IEBACiB7CiAJc2xvYl9yZWFkeSA9IDE7CiB9CisKK3ZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdF9sYXRlKHZvaWQpCit7CisJLyogTm90aGluZyB0byBkbyAqLworfQpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IGI2Mjc2NzUuLjBhMjE2YWEgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYworKysgYi9tbS9zbHViLmMKQEAgLTE0MSw2ICsxNDEsMTMgQEAKIAkJCQlTTEFCX1BPSVNPTiB8IFNMQUJfU1RPUkVfVVNFUikKIAogLyoKKyAqIERlYnVnZ2luZyBmbGFncyB0aGF0IHJlcXVpcmUgbWV0YWRhdGEgdG8gYmUgc3RvcmVkIGluIHRoZSBzbGFiLiAgVGhlc2UgZ2V0CisgKiBkaXNhYmxlZCB3aGVuIHNsdWJfZGVidWc9TyBpcyB1c2VkIGFuZCBhIGNhY2hlJ3MgbWluIG9yZGVyIGluY3JlYXNlcyB3aXRoCisgKiBtZXRhZGF0YS4KKyAqLworI2RlZmluZSBERUJVR19NRVRBREFUQV9GTEFHUyAoU0xBQl9SRURfWk9ORSB8IFNMQUJfUE9JU09OIHwgU0xBQl9TVE9SRV9VU0VSKQorCisvKgogICogU2V0IG9mIGZsYWdzIHRoYXQgd2lsbCBwcmV2ZW50IHNsYWIgbWVyZ2luZwogICovCiAjZGVmaW5lIFNMVUJfTkVWRVJfTUVSR0UgKFNMQUJfUkVEX1pPTkUgfCBTTEFCX1BPSVNPTiB8IFNMQUJfU1RPUkVfVVNFUiB8IFwKQEAgLTMyNSw2ICszMzIsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBjaGFyICpzbHViX2RlYnVnX3NsYWJzOworc3RhdGljIGludCBkaXNhYmxlX2hpZ2hlcl9vcmRlcl9kZWJ1ZzsKIAogLyoKICAqIE9iamVjdCBkZWJ1Z2dpbmcKQEAgLTY0Niw3ICs2NTQsNyBAQAogCXNsYWJfZXJyKHMsIHBhZ2UsICJQYWRkaW5nIG92ZXJ3cml0dGVuLiAweCVwLTB4JXAiLCBmYXVsdCwgZW5kIC0gMSk7CiAJcHJpbnRfc2VjdGlvbigiUGFkZGluZyIsIGVuZCAtIHJlbWFpbmRlciwgcmVtYWluZGVyKTsKIAotCXJlc3RvcmVfYnl0ZXMocywgInNsYWIgcGFkZGluZyIsIFBPSVNPTl9JTlVTRSwgc3RhcnQsIGVuZCk7CisJcmVzdG9yZV9ieXRlcyhzLCAic2xhYiBwYWRkaW5nIiwgUE9JU09OX0lOVVNFLCBlbmQgLSByZW1haW5kZXIsIGVuZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk3Niw2ICs5ODQsMTUgQEAKIAkJICovCiAJCWdvdG8gY2hlY2tfc2xhYnM7CiAKKwlpZiAodG9sb3dlcigqc3RyKSA9PSAnbycpIHsKKwkJLyoKKwkJICogQXZvaWQgZW5hYmxpbmcgZGVidWdnaW5nIG9uIGNhY2hlcyBpZiBpdHMgbWluaW11bSBvcmRlcgorCQkgKiB3b3VsZCBpbmNyZWFzZSBhcyBhIHJlc3VsdC4KKwkJICovCisJCWRpc2FibGVfaGlnaGVyX29yZGVyX2RlYnVnID0gMTsKKwkJZ290byBvdXQ7CisJfQorCiAJc2x1Yl9kZWJ1ZyA9IDA7CiAJaWYgKCpzdHIgPT0gJy0nKQogCQkvKgpAQCAtMTAyNiw4ICsxMDQzLDggQEAKIAkgKiBFbmFibGUgZGVidWdnaW5nIGlmIHNlbGVjdGVkIG9uIHRoZSBrZXJuZWwgY29tbWFuZGxpbmUuCiAJICovCiAJaWYgKHNsdWJfZGVidWcgJiYgKCFzbHViX2RlYnVnX3NsYWJzIHx8Ci0JICAgIHN0cm5jbXAoc2x1Yl9kZWJ1Z19zbGFicywgbmFtZSwgc3RybGVuKHNsdWJfZGVidWdfc2xhYnMpKSA9PSAwKSkKLQkJCWZsYWdzIHw9IHNsdWJfZGVidWc7CisJCSFzdHJuY21wKHNsdWJfZGVidWdfc2xhYnMsIG5hbWUsIHN0cmxlbihzbHViX2RlYnVnX3NsYWJzKSkpKQorCQlmbGFncyB8PSBzbHViX2RlYnVnOwogCiAJcmV0dXJuIGZsYWdzOwogfQpAQCAtMTA1NCw2ICsxMDcxLDggQEAKIH0KICNkZWZpbmUgc2x1Yl9kZWJ1ZyAwCiAKKyNkZWZpbmUgZGlzYWJsZV9oaWdoZXJfb3JkZXJfZGVidWcgMAorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUpCiAJCQkJCQkJeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vZGVfbnJfc2xhYnMoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbikKQEAgLTExMDksOCArMTEyOCw3IEBACiAJfQogCiAJaWYgKGttZW1jaGVja19lbmFibGVkCi0JCSYmICEocy0+ZmxhZ3MgJiAoU0xBQl9OT1RSQUNLIHwgREVCVUdfREVGQVVMVF9GTEFHUykpKQotCXsKKwkJJiYgIShzLT5mbGFncyAmIChTTEFCX05PVFJBQ0sgfCBERUJVR19ERUZBVUxUX0ZMQUdTKSkpIHsKIAkJaW50IHBhZ2VzID0gMSA8PCBvb19vcmRlcihvbyk7CiAKIAkJa21lbWNoZWNrX2FsbG9jX3NoYWRvdyhwYWdlLCBvb19vcmRlcihvbyksIGZsYWdzLCBub2RlKTsKQEAgLTE1NjAsNiArMTU3OCwxMCBAQAogCQkiZGVmYXVsdCBvcmRlcjogJWQsIG1pbiBvcmRlcjogJWRcbiIsIHMtPm5hbWUsIHMtPm9ianNpemUsCiAJCXMtPnNpemUsIG9vX29yZGVyKHMtPm9vKSwgb29fb3JkZXIocy0+bWluKSk7CiAKKwlpZiAob29fb3JkZXIocy0+bWluKSA+IGdldF9vcmRlcihzLT5vYmpzaXplKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiICAlcyBkZWJ1Z2dpbmcgaW5jcmVhc2VkIG1pbiBvcmRlciwgdXNlICIKKwkJICAgICAgICJzbHViX2RlYnVnPU8gdG8gZGlzYWJsZS5cbiIsIHMtPm5hbWUpOworCiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewogCQlzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuID0gZ2V0X25vZGUocywgbm9kZSk7CiAJCXVuc2lnbmVkIGxvbmcgbnJfc2xhYnM7CkBAIC0yMDAxLDcgKzIwMjMsNyBAQAogCQkJCXJldHVybiBvcmRlcjsKIAkJCWZyYWN0aW9uIC89IDI7CiAJCX0KLQkJbWluX29iamVjdHMgLS07CisJCW1pbl9vYmplY3RzLS07CiAJfQogCiAJLyoKQEAgLTIwOTEsOCArMjExMyw4IEBACiAgKi8KICNkZWZpbmUgTlJfS01FTV9DQUNIRV9DUFUgMTAwCiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga21lbV9jYWNoZV9jcHUsCi0JCQkJa21lbV9jYWNoZV9jcHUpW05SX0tNRU1fQ0FDSEVfQ1BVXTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgW05SX0tNRU1fQ0FDSEVfQ1BVXSwKKwkJICAgICAga21lbV9jYWNoZV9jcHUpOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGttZW1fY2FjaGVfY3B1ICosIGttZW1fY2FjaGVfY3B1X2ZyZWUpOwogc3RhdGljIERFQ0xBUkVfQklUTUFQKGttZW1fY2FjaF9jcHVfZnJlZV9pbml0X29uY2UsIENPTkZJR19OUl9DUFVTKTsKQEAgLTI0MDAsNiArMjQyMiw3IEBACiAJICogb24gYm9vdHVwLgogCSAqLwogCWFsaWduID0gY2FsY3VsYXRlX2FsaWdubWVudChmbGFncywgYWxpZ24sIHMtPm9ianNpemUpOworCXMtPmFsaWduID0gYWxpZ247CiAKIAkvKgogCSAqIFNMVUIgc3RvcmVzIG9uZSBvYmplY3QgaW1tZWRpYXRlbHkgYWZ0ZXIgYW5vdGhlciBiZWdpbm5pbmcgZnJvbQpAQCAtMjQ1Miw2ICsyNDc1LDE4IEBACiAKIAlpZiAoIWNhbGN1bGF0ZV9zaXplcyhzLCAtMSkpCiAJCWdvdG8gZXJyb3I7CisJaWYgKGRpc2FibGVfaGlnaGVyX29yZGVyX2RlYnVnKSB7CisJCS8qCisJCSAqIERpc2FibGUgZGVidWdnaW5nIGZsYWdzIHRoYXQgc3RvcmUgbWV0YWRhdGEgaWYgdGhlIG1pbiBzbGFiCisJCSAqIG9yZGVyIGluY3JlYXNlZC4KKwkJICovCisJCWlmIChnZXRfb3JkZXIocy0+c2l6ZSkgPiBnZXRfb3JkZXIocy0+b2Jqc2l6ZSkpIHsKKwkJCXMtPmZsYWdzICY9IH5ERUJVR19NRVRBREFUQV9GTEFHUzsKKwkJCXMtPm9mZnNldCA9IDA7CisJCQlpZiAoIWNhbGN1bGF0ZV9zaXplcyhzLCAtMSkpCisJCQkJZ290byBlcnJvcjsKKwkJfQorCX0KIAogCS8qCiAJICogVGhlIGxhcmdlciB0aGUgb2JqZWN0IHNpemUgaXMsIHRoZSBtb3JlIHBhZ2VzIHdlIHdhbnQgb24gdGhlIHBhcnRpYWwKQEAgLTI3OTAsNiArMjgyNSwxMSBAQAogCTIJLyogMTkyICovCiB9OwogCitzdGF0aWMgaW5saW5lIGludCBzaXplX2luZGV4X2VsZW0oc2l6ZV90IGJ5dGVzKQoreworCXJldHVybiAoYnl0ZXMgLSAxKSAvIDg7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZ2V0X3NsYWIoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewogCWludCBpbmRleDsKQEAgLTI3OTgsNyArMjgzOCw3IEBACiAJCWlmICghc2l6ZSkKIAkJCXJldHVybiBaRVJPX1NJWkVfUFRSOwogCi0JCWluZGV4ID0gc2l6ZV9pbmRleFsoc2l6ZSAtIDEpIC8gOF07CisJCWluZGV4ID0gc2l6ZV9pbmRleFtzaXplX2luZGV4X2VsZW0oc2l6ZSldOwogCX0gZWxzZQogCQlpbmRleCA9IGZscyhzaXplIC0gMSk7CiAKQEAgLTMxNTYsMTAgKzMxOTYsMTIgQEAKIAlzbGFiX3N0YXRlID0gUEFSVElBTDsKIAogCS8qIENhY2hlcyB0aGF0IGFyZSBub3Qgb2YgdGhlIHR3by10by10aGUtcG93ZXItb2Ygc2l6ZSAqLwotCWlmIChLTUFMTE9DX01JTl9TSVpFIDw9IDY0KSB7CisJaWYgKEtNQUxMT0NfTUlOX1NJWkUgPD0gMzIpIHsKIAkJY3JlYXRlX2ttYWxsb2NfY2FjaGUoJmttYWxsb2NfY2FjaGVzWzFdLAogCQkJCSJrbWFsbG9jLTk2IiwgOTYsIEdGUF9OT1dBSVQpOwogCQljYWNoZXMrKzsKKwl9CisJaWYgKEtNQUxMT0NfTUlOX1NJWkUgPD0gNjQpIHsKIAkJY3JlYXRlX2ttYWxsb2NfY2FjaGUoJmttYWxsb2NfY2FjaGVzWzJdLAogCQkJCSJrbWFsbG9jLTE5MiIsIDE5MiwgR0ZQX05PV0FJVCk7CiAJCWNhY2hlcysrOwpAQCAtMzE4NiwxNyArMzIyOCwyOCBAQAogCUJVSUxEX0JVR19PTihLTUFMTE9DX01JTl9TSVpFID4gMjU2IHx8CiAJCShLTUFMTE9DX01JTl9TSVpFICYgKEtNQUxMT0NfTUlOX1NJWkUgLSAxKSkpOwogCi0JZm9yIChpID0gODsgaSA8IEtNQUxMT0NfTUlOX1NJWkU7IGkgKz0gOCkKLQkJc2l6ZV9pbmRleFsoaSAtIDEpIC8gOF0gPSBLTUFMTE9DX1NISUZUX0xPVzsKKwlmb3IgKGkgPSA4OyBpIDwgS01BTExPQ19NSU5fU0laRTsgaSArPSA4KSB7CisJCWludCBlbGVtID0gc2l6ZV9pbmRleF9lbGVtKGkpOworCQlpZiAoZWxlbSA+PSBBUlJBWV9TSVpFKHNpemVfaW5kZXgpKQorCQkJYnJlYWs7CisJCXNpemVfaW5kZXhbZWxlbV0gPSBLTUFMTE9DX1NISUZUX0xPVzsKKwl9CiAKLQlpZiAoS01BTExPQ19NSU5fU0laRSA9PSAxMjgpIHsKKwlpZiAoS01BTExPQ19NSU5fU0laRSA9PSA2NCkgeworCQkvKgorCQkgKiBUaGUgOTYgYnl0ZSBzaXplIGNhY2hlIGlzIG5vdCB1c2VkIGlmIHRoZSBhbGlnbm1lbnQKKwkJICogaXMgNjQgYnl0ZS4KKwkJICovCisJCWZvciAoaSA9IDY0ICsgODsgaSA8PSA5NjsgaSArPSA4KQorCQkJc2l6ZV9pbmRleFtzaXplX2luZGV4X2VsZW0oaSldID0gNzsKKwl9IGVsc2UgaWYgKEtNQUxMT0NfTUlOX1NJWkUgPT0gMTI4KSB7CiAJCS8qCiAJCSAqIFRoZSAxOTIgYnl0ZSBzaXplZCBjYWNoZSBpcyBub3QgdXNlZCBpZiB0aGUgYWxpZ25tZW50CiAJCSAqIGlzIDEyOCBieXRlLiBSZWRpcmVjdCBrbWFsbG9jIHRvIHVzZSB0aGUgMjU2IGJ5dGUgY2FjaGUKIAkJICogaW5zdGVhZC4KIAkJICovCiAJCWZvciAoaSA9IDEyOCArIDg7IGkgPD0gMTkyOyBpICs9IDgpCi0JCQlzaXplX2luZGV4WyhpIC0gMSkgLyA4XSA9IDg7CisJCQlzaXplX2luZGV4W3NpemVfaW5kZXhfZWxlbShpKV0gPSA4OwogCX0KIAogCXNsYWJfc3RhdGUgPSBVUDsKQEAgLTQ1NDMsOCArNDU5NiwxMSBAQAogCX0KIAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcy0+a29iaiwgJnNsYWJfYXR0cl9ncm91cCk7Ci0JaWYgKGVycikKKwlpZiAoZXJyKSB7CisJCWtvYmplY3RfZGVsKCZzLT5rb2JqKTsKKwkJa29iamVjdF9wdXQoJnMtPmtvYmopOwogCQlyZXR1cm4gZXJyOworCX0KIAlrb2JqZWN0X3VldmVudCgmcy0+a29iaiwgS09CSl9BREQpOwogCWlmICghdW5tZXJnZWFibGUpIHsKIAkJLyogU2V0dXAgZmlyc3QgYWxpYXMgKi8KQEAgLTQ3MjYsNyArNDc4Miw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNsYWJfcHJvY19pbml0KHZvaWQpCiB7Ci0JcHJvY19jcmVhdGUoInNsYWJpbmZvIixTX0lXVVNSfFNfSVJVR08sTlVMTCwmcHJvY19zbGFiaW5mb19vcGVyYXRpb25zKTsKKwlwcm9jX2NyZWF0ZSgic2xhYmluZm8iLCBTX0lSVUdPLCBOVUxMLCAmcHJvY19zbGFiaW5mb19vcGVyYXRpb25zKTsKIAlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KHNsYWJfcHJvY19pbml0KTsKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCA0MmNkMzhlLi41YWU2YjhiIDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKKysrIGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC0zNCw2ICszNCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gc3dhcF9iYWNraW5nX2Rldl9pbmZvID0geworCS5uYW1lCQk9ICJzd2FwIiwKIAkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0sgfCBCRElfQ0FQX1NXQVBfQkFDS0VELAogCS51bnBsdWdfaW9fZm4JPSBzd2FwX3VucGx1Z19pb19mbiwKIH07CmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA4ZmZkYzBkLi43NGYxMTAyIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTE2MSw3ICsxNjEsOCBAQAogCQl9CiAKIAkJZXJyID0gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoc2ktPmJkZXYsIHN0YXJ0X2Jsb2NrLAotCQkJCQkJbnJfYmxvY2tzLCBHRlBfS0VSTkVMKTsKKwkJCQkJCW5yX2Jsb2NrcywgR0ZQX0tFUk5FTCwKKwkJCQkJCURJU0NBUkRfRkxfQkFSUklFUik7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIApAQCAtMjAwLDcgKzIwMSw4IEBACiAJCQlzdGFydF9ibG9jayA8PD0gUEFHRV9TSElGVCAtIDk7CiAJCQlucl9ibG9ja3MgPDw9IFBBR0VfU0hJRlQgLSA5OwogCQkJaWYgKGJsa2Rldl9pc3N1ZV9kaXNjYXJkKHNpLT5iZGV2LCBzdGFydF9ibG9jaywKLQkJCQkJCQlucl9ibG9ja3MsIEdGUF9OT0lPKSkKKwkJCQkJCQlucl9ibG9ja3MsIEdGUF9OT0lPLAorCQkJCQkJCURJU0NBUkRfRkxfQkFSUklFUikpCiAJCQkJYnJlYWs7CiAJCX0KIApkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGY4MTg5YTQuLjIwNGI4MjQgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYworKysgYi9tbS92bWFsbG9jLmMKQEAgLTI2NSw2ICsyNjUsNyBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyh2bWFwX2FyZWFfbG9jayk7CiBzdGF0aWMgc3RydWN0IHJiX3Jvb3Qgdm1hcF9hcmVhX3Jvb3QgPSBSQl9ST09UOwogc3RhdGljIExJU1RfSEVBRCh2bWFwX2FyZWFfbGlzdCk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyB2bWFwX2FyZWFfcGNwdV9ob2xlOwogCiBzdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqX19maW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CkBAIC00MzEsNiArNDMyLDE1IEBACiAJUkJfQ0xFQVJfTk9ERSgmdmEtPnJiX25vZGUpOwogCWxpc3RfZGVsX3JjdSgmdmEtPmxpc3QpOwogCisJLyoKKwkgKiBUcmFjayB0aGUgaGlnaGVzdCBwb3NzaWJsZSBjYW5kaWRhdGUgZm9yIHBjcHUgYXJlYQorCSAqIGFsbG9jYXRpb24uICBBcmVhcyBvdXRzaWRlIG9mIHZtYWxsb2MgYXJlYSBjYW4gYmUgcmV0dXJuZWQKKwkgKiBoZXJlIHRvbywgY29uc2lkZXIgb25seSBlbmQgYWRkcmVzc2VzIHdoaWNoIGZhbGwgaW5zaWRlCisJICogdm1hbGxvYyBhcmVhIHByb3Blci4KKwkgKi8KKwlpZiAodmEtPnZhX2VuZCA+IFZNQUxMT0NfU1RBUlQgJiYgdmEtPnZhX2VuZCA8PSBWTUFMTE9DX0VORCkKKwkJdm1hcF9hcmVhX3BjcHVfaG9sZSA9IG1heCh2bWFwX2FyZWFfcGNwdV9ob2xlLCB2YS0+dmFfZW5kKTsKKwogCWNhbGxfcmN1KCZ2YS0+cmN1X2hlYWQsIHJjdV9mcmVlX3ZhKTsKIH0KIApAQCAtMTAzOCw2ICsxMDQ4LDkgQEAKIAkJdmEtPnZhX2VuZCA9IHZhLT52YV9zdGFydCArIHRtcC0+c2l6ZTsKIAkJX19pbnNlcnRfdm1hcF9hcmVhKHZhKTsKIAl9CisKKwl2bWFwX2FyZWFfcGNwdV9ob2xlID0gVk1BTExPQ19FTkQ7CisKIAl2bWFwX2luaXRpYWxpemVkID0gdHJ1ZTsKIH0KIApAQCAtMTEyMiwxMyArMTEzNSwzNCBAQAogREVGSU5FX1JXTE9DSyh2bWxpc3RfbG9jayk7CiBzdHJ1Y3Qgdm1fc3RydWN0ICp2bWxpc3Q7CiAKK3N0YXRpYyB2b2lkIGluc2VydF92bWFsbG9jX3ZtKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCBzdHJ1Y3Qgdm1hcF9hcmVhICp2YSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNhbGxlcikKK3sKKwlzdHJ1Y3Qgdm1fc3RydWN0ICp0bXAsICoqcDsKKworCXZtLT5mbGFncyA9IGZsYWdzOworCXZtLT5hZGRyID0gKHZvaWQgKil2YS0+dmFfc3RhcnQ7CisJdm0tPnNpemUgPSB2YS0+dmFfZW5kIC0gdmEtPnZhX3N0YXJ0OworCXZtLT5jYWxsZXIgPSBjYWxsZXI7CisJdmEtPnByaXZhdGUgPSB2bTsKKwl2YS0+ZmxhZ3MgfD0gVk1fVk1fQVJFQTsKKworCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKKwlmb3IgKHAgPSAmdm1saXN0OyAodG1wID0gKnApICE9IE5VTEw7IHAgPSAmdG1wLT5uZXh0KSB7CisJCWlmICh0bXAtPmFkZHIgPj0gdm0tPmFkZHIpCisJCQlicmVhazsKKwl9CisJdm0tPm5leHQgPSAqcDsKKwkqcCA9IHZtOworCXdyaXRlX3VubG9jaygmdm1saXN0X2xvY2spOworfQorCiBzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYV9ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCWludCBub2RlLCBnZnBfdCBnZnBfbWFzaywgdm9pZCAqY2FsbGVyKQogewogCXN0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwotCXN0cnVjdCB2bV9zdHJ1Y3QgKnRtcCwgKipwOwogCXVuc2lnbmVkIGxvbmcgYWxpZ24gPSAxOwogCiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKQEAgLTExNDcsNyArMTE4MSw3IEBACiAJaWYgKHVubGlrZWx5KCFzaXplKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlhcmVhID0ga21hbGxvY19ub2RlKHNpemVvZigqYXJlYSksIGdmcF9tYXNrICYgR0ZQX1JFQ0xBSU1fTUFTSywgbm9kZSk7CisJYXJlYSA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKmFyZWEpLCBnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0ssIG5vZGUpOwogCWlmICh1bmxpa2VseSghYXJlYSkpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xMTYyLDI1ICsxMTk2LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JYXJlYS0+ZmxhZ3MgPSBmbGFnczsKLQlhcmVhLT5hZGRyID0gKHZvaWQgKil2YS0+dmFfc3RhcnQ7Ci0JYXJlYS0+c2l6ZSA9IHNpemU7Ci0JYXJlYS0+cGFnZXMgPSBOVUxMOwotCWFyZWEtPm5yX3BhZ2VzID0gMDsKLQlhcmVhLT5waHlzX2FkZHIgPSAwOwotCWFyZWEtPmNhbGxlciA9IGNhbGxlcjsKLQl2YS0+cHJpdmF0ZSA9IGFyZWE7Ci0JdmEtPmZsYWdzIHw9IFZNX1ZNX0FSRUE7Ci0KLQl3cml0ZV9sb2NrKCZ2bWxpc3RfbG9jayk7Ci0JZm9yIChwID0gJnZtbGlzdDsgKHRtcCA9ICpwKSAhPSBOVUxMOyBwID0gJnRtcC0+bmV4dCkgewotCQlpZiAodG1wLT5hZGRyID49IGFyZWEtPmFkZHIpCi0JCQlicmVhazsKLQl9Ci0JYXJlYS0+bmV4dCA9ICpwOwotCSpwID0gYXJlYTsKLQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKLQorCWluc2VydF92bWFsbG9jX3ZtKGFyZWEsIHZhLCBmbGFncywgY2FsbGVyKTsKIAlyZXR1cm4gYXJlYTsKIH0KIApAQCAtMTgxOCw2ICsxODM0LDI4NiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZnJlZV92bV9hcmVhKTsKIAorc3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKm5vZGVfdG9fdmEoc3RydWN0IHJiX25vZGUgKm4pCit7CisJcmV0dXJuIG4gPyByYl9lbnRyeShuLCBzdHJ1Y3Qgdm1hcF9hcmVhLCByYl9ub2RlKSA6IE5VTEw7Cit9CisKKy8qKgorICogcHZtX2ZpbmRfbmV4dF9wcmV2IC0gZmluZCB0aGUgbmV4dCBhbmQgcHJldiB2bWFwX2FyZWEgc3Vycm91bmRpbmcgQGVuZAorICogQGVuZDogdGFyZ2V0IGFkZHJlc3MKKyAqIEBwbmV4dDogb3V0IGFyZyBmb3IgdGhlIG5leHQgdm1hcF9hcmVhCisgKiBAcHByZXY6IG91dCBhcmcgZm9yIHRoZSBwcmV2aW91cyB2bWFwX2FyZWEKKyAqCisgKiBSZXR1cm5zOiAldHJ1ZSBpZiBlaXRoZXIgb3IgYm90aCBvZiBuZXh0IGFuZCBwcmV2IGFyZSBmb3VuZCwKKyAqCSAgICAlZmFsc2UgaWYgbm8gdm1hcF9hcmVhIGV4aXN0cworICoKKyAqIEZpbmQgdm1hcF9hcmVhcyBlbmQgYWRkcmVzc2VzIG9mIHdoaWNoIGVuY2xvc2UgQGVuZC4gIGllLiBpZiBub3QKKyAqIE5VTEwsICpwbmV4dC0+dmFfZW5kID4gQGVuZCBhbmQgKnBwcmV2LT52YV9lbmQgPD0gQGVuZC4KKyAqLworc3RhdGljIGJvb2wgcHZtX2ZpbmRfbmV4dF9wcmV2KHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJICAgICAgIHN0cnVjdCB2bWFwX2FyZWEgKipwbmV4dCwKKwkJCSAgICAgICBzdHJ1Y3Qgdm1hcF9hcmVhICoqcHByZXYpCit7CisJc3RydWN0IHJiX25vZGUgKm4gPSB2bWFwX2FyZWFfcm9vdC5yYl9ub2RlOworCXN0cnVjdCB2bWFwX2FyZWEgKnZhID0gTlVMTDsKKworCXdoaWxlIChuKSB7CisJCXZhID0gcmJfZW50cnkobiwgc3RydWN0IHZtYXBfYXJlYSwgcmJfbm9kZSk7CisJCWlmIChlbmQgPCB2YS0+dmFfZW5kKQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGVuZCA+IHZhLT52YV9lbmQpCisJCQluID0gbi0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCWlmICghdmEpCisJCXJldHVybiBmYWxzZTsKKworCWlmICh2YS0+dmFfZW5kID4gZW5kKSB7CisJCSpwbmV4dCA9IHZhOworCQkqcHByZXYgPSBub2RlX3RvX3ZhKHJiX3ByZXYoJigqcG5leHQpLT5yYl9ub2RlKSk7CisJfSBlbHNlIHsKKwkJKnBwcmV2ID0gdmE7CisJCSpwbmV4dCA9IG5vZGVfdG9fdmEocmJfbmV4dCgmKCpwcHJldiktPnJiX25vZGUpKTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogcHZtX2RldGVybWluZV9lbmQgLSBmaW5kIHRoZSBoaWdoZXN0IGFsaWduZWQgYWRkcmVzcyBiZXR3ZWVuIHR3byB2bWFwX2FyZWFzCisgKiBAcG5leHQ6IGluL291dCBhcmcgZm9yIHRoZSBuZXh0IHZtYXBfYXJlYQorICogQHBwcmV2OiBpbi9vdXQgYXJnIGZvciB0aGUgcHJldmlvdXMgdm1hcF9hcmVhCisgKiBAYWxpZ246IGFsaWdubWVudAorICoKKyAqIFJldHVybnM6IGRldGVybWluZWQgZW5kIGFkZHJlc3MKKyAqCisgKiBGaW5kIHRoZSBoaWdoZXN0IGFsaWduZWQgYWRkcmVzcyBiZXR3ZWVuICpAcG5leHQgYW5kICpAcHByZXYgYmVsb3cKKyAqIFZNQUxMT0NfRU5ELiAgKkBwbmV4dCBhbmQgKkBwcHJldiBhcmUgYWRqdXN0ZWQgc28gdGhhdCB0aGUgYWxpZ25lZAorICogZG93biBhZGRyZXNzIGlzIGJldHdlZW4gdGhlIGVuZCBhZGRyZXNzZXMgb2YgdGhlIHR3byB2bWFwX2FyZWFzLgorICoKKyAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFkZHJlc3MgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBtYXkgZmFsbAorICogaW5zaWRlICpAcG5leHQgdm1hcF9hcmVhLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2hlY2tpbmcKKyAqIHRoYXQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHB2bV9kZXRlcm1pbmVfZW5kKHN0cnVjdCB2bWFwX2FyZWEgKipwbmV4dCwKKwkJCQkgICAgICAgc3RydWN0IHZtYXBfYXJlYSAqKnBwcmV2LAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFsaWduKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCAmIH4oYWxpZ24gLSAxKTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlpZiAoKnBuZXh0KQorCQlhZGRyID0gbWluKCgqcG5leHQpLT52YV9zdGFydCAmIH4oYWxpZ24gLSAxKSwgdm1hbGxvY19lbmQpOworCWVsc2UKKwkJYWRkciA9IHZtYWxsb2NfZW5kOworCisJd2hpbGUgKCpwcHJldiAmJiAoKnBwcmV2KS0+dmFfZW5kID4gYWRkcikgeworCQkqcG5leHQgPSAqcHByZXY7CisJCSpwcHJldiA9IG5vZGVfdG9fdmEocmJfcHJldigmKCpwbmV4dCktPnJiX25vZGUpKTsKKwl9CisKKwlyZXR1cm4gYWRkcjsKK30KKworLyoqCisgKiBwY3B1X2dldF92bV9hcmVhcyAtIGFsbG9jYXRlIHZtYWxsb2MgYXJlYXMgZm9yIHBlcmNwdSBhbGxvY2F0b3IKKyAqIEBvZmZzZXRzOiBhcnJheSBjb250YWluaW5nIG9mZnNldCBvZiBlYWNoIGFyZWEKKyAqIEBzaXplczogYXJyYXkgY29udGFpbmluZyBzaXplIG9mIGVhY2ggYXJlYQorICogQG5yX3ZtczogdGhlIG51bWJlciBvZiBhcmVhcyB0byBhbGxvY2F0ZQorICogQGFsaWduOiBhbGlnbm1lbnQsIGFsbCBlbnRyaWVzIGluIEBvZmZzZXRzIGFuZCBAc2l6ZXMgbXVzdCBiZSBhbGlnbmVkIHRvIHRoaXMKKyAqIEBnZnBfbWFzazogYWxsb2NhdGlvbiBtYXNrCisgKgorICogUmV0dXJuczoga21hbGxvYydkIHZtX3N0cnVjdCBwb2ludGVyIGFycmF5IHBvaW50aW5nIHRvIGFsbG9jYXRlZAorICoJICAgIHZtX3N0cnVjdHMgb24gc3VjY2VzcywgJU5VTEwgb24gZmFpbHVyZQorICoKKyAqIFBlcmNwdSBhbGxvY2F0b3Igd2FudHMgdG8gdXNlIGNvbmdydWVudCB2bSBhcmVhcyBzbyB0aGF0IGl0IGNhbgorICogbWFpbnRhaW4gdGhlIG9mZnNldHMgYW1vbmcgcGVyY3B1IGFyZWFzLiAgVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMKKyAqIGNvbmdydWVudCB2bWFsbG9jIGFyZWFzIGZvciBpdC4gIFRoZXNlIGFyZWFzIHRlbmQgdG8gYmUgc2NhdHRlcmVkCisgKiBwcmV0dHkgZmFyLCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBhcmVhcyBlYXNpbHkgZ29pbmcgdXAgdG8KKyAqIGdpZ2FieXRlcy4gIFRvIGF2b2lkIGludGVyYWN0aW5nIHdpdGggcmVndWxhciB2bWFsbG9jcywgdGhlc2UgYXJlYXMKKyAqIGFyZSBhbGxvY2F0ZWQgZnJvbSB0b3AuCisgKgorICogRGVzcGl0ZSBpdHMgY29tcGxpY2F0ZWQgbG9vaywgdGhpcyBhbGxvY2F0b3IgaXMgcmF0aGVyIHNpbXBsZS4gIEl0CisgKiBkb2VzIGV2ZXJ5dGhpbmcgdG9wLWRvd24gYW5kIHNjYW5zIGFyZWFzIGZyb20gdGhlIGVuZCBsb29raW5nIGZvcgorICogbWF0Y2hpbmcgc2xvdC4gIFdoaWxlIHNjYW5uaW5nLCBpZiBhbnkgb2YgdGhlIGFyZWFzIG92ZXJsYXBzIHdpdGgKKyAqIGV4aXN0aW5nIHZtYXBfYXJlYSwgdGhlIGJhc2UgYWRkcmVzcyBpcyBwdWxsZWQgZG93biB0byBmaXQgdGhlCisgKiBhcmVhLiAgU2Nhbm5pbmcgaXMgcmVwZWF0ZWQgdGlsbCBhbGwgdGhlIGFyZWFzIGZpdCBhbmQgdGhlbiBhbGwKKyAqIG5lY2Vzc2FyeSBkYXRhIHN0cnVjdHJlcyBhcmUgaW5zZXJ0ZWQgYW5kIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQuCisgKi8KK3N0cnVjdCB2bV9zdHJ1Y3QgKipwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLAorCQkJCSAgICAgY29uc3Qgc2l6ZV90ICpzaXplcywgaW50IG5yX3ZtcywKKwkJCQkgICAgIHNpemVfdCBhbGlnbiwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyB2bWFsbG9jX3N0YXJ0ID0gQUxJR04oVk1BTExPQ19TVEFSVCwgYWxpZ24pOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCAmIH4oYWxpZ24gLSAxKTsKKwlzdHJ1Y3Qgdm1hcF9hcmVhICoqdmFzLCAqcHJldiwgKm5leHQ7CisJc3RydWN0IHZtX3N0cnVjdCAqKnZtczsKKwlpbnQgYXJlYSwgYXJlYTIsIGxhc3RfYXJlYSwgdGVybV9hcmVhOworCXVuc2lnbmVkIGxvbmcgYmFzZSwgc3RhcnQsIGVuZCwgbGFzdF9lbmQ7CisJYm9vbCBwdXJnZWQgPSBmYWxzZTsKKworCWdmcF9tYXNrICY9IEdGUF9SRUNMQUlNX01BU0s7CisKKwkvKiB2ZXJpZnkgcGFyYW1ldGVycyBhbmQgYWxsb2NhdGUgZGF0YSBzdHJ1Y3R1cmVzICovCisJQlVHX09OKGFsaWduICYgflBBR0VfTUFTSyB8fCAhaXNfcG93ZXJfb2ZfMihhbGlnbikpOworCWZvciAobGFzdF9hcmVhID0gMCwgYXJlYSA9IDA7IGFyZWEgPCBucl92bXM7IGFyZWErKykgeworCQlzdGFydCA9IG9mZnNldHNbYXJlYV07CisJCWVuZCA9IHN0YXJ0ICsgc2l6ZXNbYXJlYV07CisKKwkJLyogaXMgZXZlcnl0aGluZyBhbGlnbmVkIHByb3Blcmx5PyAqLworCQlCVUdfT04oIUlTX0FMSUdORUQob2Zmc2V0c1thcmVhXSwgYWxpZ24pKTsKKwkJQlVHX09OKCFJU19BTElHTkVEKHNpemVzW2FyZWFdLCBhbGlnbikpOworCisJCS8qIGRldGVjdCB0aGUgYXJlYSB3aXRoIHRoZSBoaWdoZXN0IGFkZHJlc3MgKi8KKwkJaWYgKHN0YXJ0ID4gb2Zmc2V0c1tsYXN0X2FyZWFdKQorCQkJbGFzdF9hcmVhID0gYXJlYTsKKworCQlmb3IgKGFyZWEyID0gMDsgYXJlYTIgPCBucl92bXM7IGFyZWEyKyspIHsKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQyID0gb2Zmc2V0c1thcmVhMl07CisJCQl1bnNpZ25lZCBsb25nIGVuZDIgPSBzdGFydDIgKyBzaXplc1thcmVhMl07CisKKwkJCWlmIChhcmVhMiA9PSBhcmVhKQorCQkJCWNvbnRpbnVlOworCisJCQlCVUdfT04oc3RhcnQyID49IHN0YXJ0ICYmIHN0YXJ0MiA8IGVuZCk7CisJCQlCVUdfT04oZW5kMiA8PSBlbmQgJiYgZW5kMiA+IHN0YXJ0KTsKKwkJfQorCX0KKwlsYXN0X2VuZCA9IG9mZnNldHNbbGFzdF9hcmVhXSArIHNpemVzW2xhc3RfYXJlYV07CisKKwlpZiAodm1hbGxvY19lbmQgLSB2bWFsbG9jX3N0YXJ0IDwgbGFzdF9lbmQpIHsKKwkJV0FSTl9PTih0cnVlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdm1zID0ga3phbGxvYyhzaXplb2Yodm1zWzBdKSAqIG5yX3ZtcywgZ2ZwX21hc2spOworCXZhcyA9IGt6YWxsb2Moc2l6ZW9mKHZhc1swXSkgKiBucl92bXMsIGdmcF9tYXNrKTsKKwlpZiAoIXZhcyB8fCAhdm1zKQorCQlnb3RvIGVycl9mcmVlOworCisJZm9yIChhcmVhID0gMDsgYXJlYSA8IG5yX3ZtczsgYXJlYSsrKSB7CisJCXZhc1thcmVhXSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2bWFwX2FyZWEpLCBnZnBfbWFzayk7CisJCXZtc1thcmVhXSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2bV9zdHJ1Y3QpLCBnZnBfbWFzayk7CisJCWlmICghdmFzW2FyZWFdIHx8ICF2bXNbYXJlYV0pCisJCQlnb3RvIGVycl9mcmVlOworCX0KK3JldHJ5OgorCXNwaW5fbG9jaygmdm1hcF9hcmVhX2xvY2spOworCisJLyogc3RhcnQgc2Nhbm5pbmcgLSB3ZSBzY2FuIGZyb20gdGhlIHRvcCwgYmVnaW4gd2l0aCB0aGUgbGFzdCBhcmVhICovCisJYXJlYSA9IHRlcm1fYXJlYSA9IGxhc3RfYXJlYTsKKwlzdGFydCA9IG9mZnNldHNbYXJlYV07CisJZW5kID0gc3RhcnQgKyBzaXplc1thcmVhXTsKKworCWlmICghcHZtX2ZpbmRfbmV4dF9wcmV2KHZtYXBfYXJlYV9wY3B1X2hvbGUsICZuZXh0LCAmcHJldikpIHsKKwkJYmFzZSA9IHZtYWxsb2NfZW5kIC0gbGFzdF9lbmQ7CisJCWdvdG8gZm91bmQ7CisJfQorCWJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZCgmbmV4dCwgJnByZXYsIGFsaWduKSAtIGVuZDsKKworCXdoaWxlICh0cnVlKSB7CisJCUJVR19PTihuZXh0ICYmIG5leHQtPnZhX2VuZCA8PSBiYXNlICsgZW5kKTsKKwkJQlVHX09OKHByZXYgJiYgcHJldi0+dmFfZW5kID4gYmFzZSArIGVuZCk7CisKKwkJLyoKKwkJICogYmFzZSBtaWdodCBoYXZlIHVuZGVyZmxvd2VkLCBhZGQgbGFzdF9lbmQgYmVmb3JlCisJCSAqIGNvbXBhcmluZy4KKwkJICovCisJCWlmIChiYXNlICsgbGFzdF9lbmQgPCB2bWFsbG9jX3N0YXJ0ICsgbGFzdF9lbmQpIHsKKwkJCXNwaW5fdW5sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisJCQlpZiAoIXB1cmdlZCkgeworCQkJCXB1cmdlX3ZtYXBfYXJlYV9sYXp5KCk7CisJCQkJcHVyZ2VkID0gdHJ1ZTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfQorCQkJZ290byBlcnJfZnJlZTsKKwkJfQorCisJCS8qCisJCSAqIElmIG5leHQgb3ZlcmxhcHMsIG1vdmUgYmFzZSBkb3dud2FyZHMgc28gdGhhdCBpdCdzCisJCSAqIHJpZ2h0IGJlbG93IG5leHQgYW5kIHRoZW4gcmVjaGVjay4KKwkJICovCisJCWlmIChuZXh0ICYmIG5leHQtPnZhX3N0YXJ0IDwgYmFzZSArIGVuZCkgeworCQkJYmFzZSA9IHB2bV9kZXRlcm1pbmVfZW5kKCZuZXh0LCAmcHJldiwgYWxpZ24pIC0gZW5kOworCQkJdGVybV9hcmVhID0gYXJlYTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogSWYgcHJldiBvdmVybGFwcywgc2hpZnQgZG93biBuZXh0IGFuZCBwcmV2IGFuZCBtb3ZlCisJCSAqIGJhc2Ugc28gdGhhdCBpdCdzIHJpZ2h0IGJlbG93IG5ldyBuZXh0IGFuZCB0aGVuCisJCSAqIHJlY2hlY2suCisJCSAqLworCQlpZiAocHJldiAmJiBwcmV2LT52YV9lbmQgPiBiYXNlICsgc3RhcnQpICB7CisJCQluZXh0ID0gcHJldjsKKwkJCXByZXYgPSBub2RlX3RvX3ZhKHJiX3ByZXYoJm5leHQtPnJiX25vZGUpKTsKKwkJCWJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZCgmbmV4dCwgJnByZXYsIGFsaWduKSAtIGVuZDsKKwkJCXRlcm1fYXJlYSA9IGFyZWE7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFRoaXMgYXJlYSBmaXRzLCBtb3ZlIG9uIHRvIHRoZSBwcmV2aW91cyBvbmUuICBJZgorCQkgKiB0aGUgcHJldmlvdXMgb25lIGlzIHRoZSB0ZXJtaW5hbCBvbmUsIHdlJ3JlIGRvbmUuCisJCSAqLworCQlhcmVhID0gKGFyZWEgKyBucl92bXMgLSAxKSAlIG5yX3ZtczsKKwkJaWYgKGFyZWEgPT0gdGVybV9hcmVhKQorCQkJYnJlYWs7CisJCXN0YXJ0ID0gb2Zmc2V0c1thcmVhXTsKKwkJZW5kID0gc3RhcnQgKyBzaXplc1thcmVhXTsKKwkJcHZtX2ZpbmRfbmV4dF9wcmV2KGJhc2UgKyBlbmQsICZuZXh0LCAmcHJldik7CisJfQorZm91bmQ6CisJLyogd2UndmUgZm91bmQgYSBmaXR0aW5nIGJhc2UsIGluc2VydCBhbGwgdmEncyAqLworCWZvciAoYXJlYSA9IDA7IGFyZWEgPCBucl92bXM7IGFyZWErKykgeworCQlzdHJ1Y3Qgdm1hcF9hcmVhICp2YSA9IHZhc1thcmVhXTsKKworCQl2YS0+dmFfc3RhcnQgPSBiYXNlICsgb2Zmc2V0c1thcmVhXTsKKwkJdmEtPnZhX2VuZCA9IHZhLT52YV9zdGFydCArIHNpemVzW2FyZWFdOworCQlfX2luc2VydF92bWFwX2FyZWEodmEpOworCX0KKworCXZtYXBfYXJlYV9wY3B1X2hvbGUgPSBiYXNlICsgb2Zmc2V0c1tsYXN0X2FyZWFdOworCisJc3Bpbl91bmxvY2soJnZtYXBfYXJlYV9sb2NrKTsKKworCS8qIGluc2VydCBhbGwgdm0ncyAqLworCWZvciAoYXJlYSA9IDA7IGFyZWEgPCBucl92bXM7IGFyZWErKykKKwkJaW5zZXJ0X3ZtYWxsb2Nfdm0odm1zW2FyZWFdLCB2YXNbYXJlYV0sIFZNX0FMTE9DLAorCQkJCSAgcGNwdV9nZXRfdm1fYXJlYXMpOworCisJa2ZyZWUodmFzKTsKKwlyZXR1cm4gdm1zOworCitlcnJfZnJlZToKKwlmb3IgKGFyZWEgPSAwOyBhcmVhIDwgbnJfdm1zOyBhcmVhKyspIHsKKwkJaWYgKHZhcykKKwkJCWtmcmVlKHZhc1thcmVhXSk7CisJCWlmICh2bXMpCisJCQlrZnJlZSh2bXNbYXJlYV0pOworCX0KKwlrZnJlZSh2YXMpOworCWtmcmVlKHZtcyk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogcGNwdV9mcmVlX3ZtX2FyZWFzIC0gZnJlZSB2bWFsbG9jIGFyZWFzIGZvciBwZXJjcHUgYWxsb2NhdG9yCisgKiBAdm1zOiB2bV9zdHJ1Y3QgcG9pbnRlciBhcnJheSByZXR1cm5lZCBieSBwY3B1X2dldF92bV9hcmVhcygpCisgKiBAbnJfdm1zOiB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBhcmVhcworICoKKyAqIEZyZWUgdm1fc3RydWN0cyBhbmQgdGhlIGFycmF5IGFsbG9jYXRlZCBieSBwY3B1X2dldF92bV9hcmVhcygpLgorICovCit2b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yX3ZtczsgaSsrKQorCQlmcmVlX3ZtX2FyZWEodm1zW2ldKTsKKwlrZnJlZSh2bXMpOworfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB2b2lkICpzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDk0ZTg2ZGQuLmJhODIyOGUgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0xNzIwLDcgKzE3MjAsNyBAQAogCQkgKi8KIAkJaWYgKHRvdGFsX3NjYW5uZWQgPiBzYy0+c3dhcF9jbHVzdGVyX21heCArCiAJCQkJCXNjLT5zd2FwX2NsdXN0ZXJfbWF4IC8gMikgewotCQkJd2FrZXVwX3BkZmx1c2gobGFwdG9wX21vZGUgPyAwIDogdG90YWxfc2Nhbm5lZCk7CisJCQl3YWtldXBfZmx1c2hlcl90aHJlYWRzKGxhcHRvcF9tb2RlID8gMCA6IHRvdGFsX3NjYW5uZWQpOwogCQkJc2MtPm1heV93cml0ZXBhZ2UgPSAxOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IGZlNjQ5MDguLjg4MzY1NzUgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW4uYwpAQCAtMjI1LDEyICsyMjUsNiBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0JLyogVGhlIHJlYWwgZGV2aWNlIG11c3QgYmUgdXAgYW5kIG9wZXJhdGluZyBpbiBvcmRlciB0bwotCSAqIGFzc29zY2lhdGUgYSBWTEFOIGRldmljZSB3aXRoIGl0LgotCSAqLwotCWlmICghKHJlYWxfZGV2LT5mbGFncyAmIElGRl9VUCkpCi0JCXJldHVybiAtRU5FVERPV047Ci0KIAlpZiAoX19maW5kX3ZsYW5fZGV2KHJlYWxfZGV2LCB2bGFuX2lkKSAhPSBOVUxMKQogCQlyZXR1cm4gLUVFWElTVDsKIApAQCAtMzM2LDEyICszMzAsMTMgQEAKIAkJc25wcmludGYobmFtZSwgSUZOQU1TSVosICJ2bGFuJS40aSIsIHZsYW5faWQpOwogCX0KIAotCW5ld19kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCB2bGFuX2Rldl9pbmZvKSwgbmFtZSwKLQkJCSAgICAgICB2bGFuX3NldHVwKTsKKwluZXdfZGV2ID0gYWxsb2NfbmV0ZGV2X21xKHNpemVvZihzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyksIG5hbWUsCisJCQkJICB2bGFuX3NldHVwLCByZWFsX2Rldi0+bnVtX3R4X3F1ZXVlcyk7CiAKIAlpZiAobmV3X2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKKwluZXdfZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSByZWFsX2Rldi0+cmVhbF9udW1fdHhfcXVldWVzOwogCWRldl9uZXRfc2V0KG5ld19kZXYsIG5ldCk7CiAJLyogbmVlZCA0IGJ5dGVzIGZvciBleHRyYSBWTEFOIGhlYWRlciBpbmZvLAogCSAqIGhvcGUgdGhlIHVuZGVybHlpbmcgZGV2aWNlIGNhbiBoYW5kbGUgaXQuCkBAIC0zOTcsNiArMzkyLDkgQEAKIAl2bGFuZGV2LT5mZWF0dXJlcyAmPSB+ZGV2LT52bGFuX2ZlYXR1cmVzOwogCXZsYW5kZXYtPmZlYXR1cmVzIHw9IGRldi0+ZmVhdHVyZXMgJiBkZXYtPnZsYW5fZmVhdHVyZXM7CiAJdmxhbmRldi0+Z3NvX21heF9zaXplID0gZGV2LT5nc29fbWF4X3NpemU7CisjaWYgZGVmaW5lZChDT05GSUdfRkNPRSkgfHwgZGVmaW5lZChDT05GSUdfRkNPRV9NT0RVTEUpCisJdmxhbmRldi0+ZmNvZV9kZHBfeGlkID0gZGV2LT5mY29lX2RkcF94aWQ7CisjZW5kaWYKIAogCWlmIChvbGRfZmVhdHVyZXMgIT0gdmxhbmRldi0+ZmVhdHVyZXMpCiAJCW5ldGRldl9mZWF0dXJlc19jaGFuZ2UodmxhbmRldik7CkBAIC00NjgsNiArNDY2LDE5IEBACiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIE5FVERFVl9DSEFOR0VNVFU6CisJCWZvciAoaSA9IDA7IGkgPCBWTEFOX0dST1VQX0FSUkFZX0xFTjsgaSsrKSB7CisJCQl2bGFuZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGdycCwgaSk7CisJCQlpZiAoIXZsYW5kZXYpCisJCQkJY29udGludWU7CisKKwkJCWlmICh2bGFuZGV2LT5tdHUgPD0gZGV2LT5tdHUpCisJCQkJY29udGludWU7CisKKwkJCWRldl9zZXRfbXR1KHZsYW5kZXYsIGRldi0+bXR1KTsKKwkJfQorCQlicmVhazsKKwogCWNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOgogCQkvKiBQcm9wYWdhdGUgZGV2aWNlIGZlYXR1cmVzIHRvIHVuZGVybHlpbmcgZGV2aWNlICovCiAJCWZvciAoaSA9IDA7IGkgPCBWTEFOX0dST1VQX0FSUkFZX0xFTjsgaSsrKSB7CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCmluZGV4IDk2YmFkOGYuLjQxOThlYzUgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKyBiL25ldC84MDIxcS92bGFuX2Rldi5jCkBAIC0yODgsMTAgKzI4OCwxNCBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCB2bGFuX2Rldl9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB2bGFuX2Rldl9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApOworCWludCBpID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpOwogCXN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKikoc2tiLT5kYXRhKTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCByZXQ7CiAKIAkvKiBIYW5kbGUgbm9uLVZMQU4gZnJhbWVzIGlmIHRoZXkgYXJlIHNlbnQgdG8gdXMsIGZvciBleGFtcGxlIGJ5IERIQ1AuCiAJICoKQEAgLTMxNywyOSArMzIxLDQzIEBACiAJCQl2bGFuX2Rldl9pbmZvKGRldiktPmNudF9pbmNfaGVhZHJvb21fb25fdHgrKzsKIAl9CiAKLQl0eHEtPnR4X3BhY2tldHMrKzsKLQl0eHEtPnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJc2tiLT5kZXYgPSB2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OwotCWRldl9xdWV1ZV94bWl0KHNrYik7CisJbGVuID0gc2tiLT5sZW47CisJcmV0ID0gZGV2X3F1ZXVlX3htaXQoc2tiKTsKKworCWlmIChsaWtlbHkocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpKSB7CisJCXR4cS0+dHhfcGFja2V0cysrOworCQl0eHEtPnR4X2J5dGVzICs9IGxlbjsKKwl9IGVsc2UKKwkJdHhxLT50eF9kcm9wcGVkKys7CisKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi1zdGF0aWMgaW50IHZsYW5fZGV2X2h3YWNjZWxfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHZsYW5fZGV2X2h3YWNjZWxfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCk7CisJaW50IGkgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7CiAJdTE2IHZsYW5fdGNpOworCXVuc2lnbmVkIGludCBsZW47CisJaW50IHJldDsKIAogCXZsYW5fdGNpID0gdmxhbl9kZXZfaW5mbyhkZXYpLT52bGFuX2lkOwogCXZsYW5fdGNpIHw9IHZsYW5fZGV2X2dldF9lZ3Jlc3NfcW9zX21hc2soZGV2LCBza2IpOwogCXNrYiA9IF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuX3RjaSk7CiAKLQl0eHEtPnR4X3BhY2tldHMrKzsKLQl0eHEtPnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCiAJc2tiLT5kZXYgPSB2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OwotCWRldl9xdWV1ZV94bWl0KHNrYik7CisJbGVuID0gc2tiLT5sZW47CisJcmV0ID0gZGV2X3F1ZXVlX3htaXQoc2tiKTsKKworCWlmIChsaWtlbHkocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpKSB7CisJCXR4cS0+dHhfcGFja2V0cysrOworCQl0eHEtPnR4X2J5dGVzICs9IGxlbjsKKwl9IGVsc2UKKwkJdHhxLT50eF9kcm9wcGVkKys7CisKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC01NjEsNiArNTc5LDU1IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX0ZDT0UpIHx8IGRlZmluZWQoQ09ORklHX0ZDT0VfTU9EVUxFKQorc3RhdGljIGludCB2bGFuX2Rldl9mY29lX2RkcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgeGlkLAorCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2djKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW5fZGV2X2luZm8oZGV2KS0+cmVhbF9kZXY7CisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSByZWFsX2Rldi0+bmV0ZGV2X29wczsKKwlpbnQgcmMgPSAwOworCisJaWYgKG9wcy0+bmRvX2Zjb2VfZGRwX3NldHVwKQorCQlyYyA9IG9wcy0+bmRvX2Zjb2VfZGRwX3NldHVwKHJlYWxfZGV2LCB4aWQsIHNnbCwgc2djKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB2bGFuX2Rldl9mY29lX2RkcF9kb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB4aWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKKwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IHJlYWxfZGV2LT5uZXRkZXZfb3BzOworCWludCBsZW4gPSAwOworCisJaWYgKG9wcy0+bmRvX2Zjb2VfZGRwX2RvbmUpCisJCWxlbiA9IG9wcy0+bmRvX2Zjb2VfZGRwX2RvbmUocmVhbF9kZXYsIHhpZCk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IHZsYW5fZGV2X2Zjb2VfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKKwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IHJlYWxfZGV2LT5uZXRkZXZfb3BzOworCWludCByYyA9IC1FSU5WQUw7CisKKwlpZiAob3BzLT5uZG9fZmNvZV9lbmFibGUpCisJCXJjID0gb3BzLT5uZG9fZmNvZV9lbmFibGUocmVhbF9kZXYpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB2bGFuX2Rldl9mY29lX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OworCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gcmVhbF9kZXYtPm5ldGRldl9vcHM7CisJaW50IHJjID0gLUVJTlZBTDsKKworCWlmIChvcHMtPm5kb19mY29lX2Rpc2FibGUpCisJCXJjID0gb3BzLT5uZG9fZmNvZV9kaXNhYmxlKHJlYWxfZGV2KTsKKwlyZXR1cm4gcmM7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgdmxhbl9kZXZfY2hhbmdlX3J4X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjaGFuZ2UpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKQEAgLTYzNSw2ICs3MDIsMTAgQEAKIAlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGRldi0+YnJvYWRjYXN0KSkKIAkJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCByZWFsX2Rldi0+YnJvYWRjYXN0LCBkZXYtPmFkZHJfbGVuKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0ZDT0UpIHx8IGRlZmluZWQoQ09ORklHX0ZDT0VfTU9EVUxFKQorCWRldi0+ZmNvZV9kZHBfeGlkID0gcmVhbF9kZXYtPmZjb2VfZGRwX3hpZDsKKyNlbmRpZgorCiAJaWYgKHJlYWxfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9UWCkgewogCQlkZXYtPmhlYWRlcl9vcHMgICAgICA9IHJlYWxfZGV2LT5oZWFkZXJfb3BzOwogCQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IHJlYWxfZGV2LT5oYXJkX2hlYWRlcl9sZW47CkBAIC03MTUsNiArNzg2LDEyIEBACiAJLm5kb19jaGFuZ2VfcnhfZmxhZ3MJPSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsCiAJLm5kb19kb19pb2N0bAkJPSB2bGFuX2Rldl9pb2N0bCwKIAkubmRvX25laWdoX3NldHVwCT0gdmxhbl9kZXZfbmVpZ2hfc2V0dXAsCisjaWYgZGVmaW5lZChDT05GSUdfRkNPRSkgfHwgZGVmaW5lZChDT05GSUdfRkNPRV9NT0RVTEUpCisJLm5kb19mY29lX2RkcF9zZXR1cAk9IHZsYW5fZGV2X2Zjb2VfZGRwX3NldHVwLAorCS5uZG9fZmNvZV9kZHBfZG9uZQk9IHZsYW5fZGV2X2Zjb2VfZGRwX2RvbmUsCisJLm5kb19mY29lX2VuYWJsZQk9IHZsYW5fZGV2X2Zjb2VfZW5hYmxlLAorCS5uZG9fZmNvZV9kaXNhYmxlCT0gdmxhbl9kZXZfZmNvZV9kaXNhYmxlLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X2FjY2VsX29wcyA9IHsKQEAgLTczMSw2ICs4MDgsMTIgQEAKIAkubmRvX2NoYW5nZV9yeF9mbGFncwk9IHZsYW5fZGV2X2NoYW5nZV9yeF9mbGFncywKIAkubmRvX2RvX2lvY3RsCQk9IHZsYW5fZGV2X2lvY3RsLAogCS5uZG9fbmVpZ2hfc2V0dXAJPSB2bGFuX2Rldl9uZWlnaF9zZXR1cCwKKyNpZiBkZWZpbmVkKENPTkZJR19GQ09FKSB8fCBkZWZpbmVkKENPTkZJR19GQ09FX01PRFVMRSkKKwkubmRvX2Zjb2VfZGRwX3NldHVwCT0gdmxhbl9kZXZfZmNvZV9kZHBfc2V0dXAsCisJLm5kb19mY29lX2RkcF9kb25lCT0gdmxhbl9kZXZfZmNvZV9kZHBfZG9uZSwKKwkubmRvX2Zjb2VfZW5hYmxlCT0gdmxhbl9kZXZfZmNvZV9lbmFibGUsCisJLm5kb19mY29lX2Rpc2FibGUJPSB2bGFuX2Rldl9mY29lX2Rpc2FibGUsCisjZW5kaWYKIH07CiAKIHZvaWQgdmxhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fbmV0bGluay5jIGIvbmV0LzgwMjFxL3ZsYW5fbmV0bGluay5jCmluZGV4IGU5YzkxZGMuLjM0MzE0NmUgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX25ldGxpbmsuYworKysgYi9uZXQvODAyMXEvdmxhbl9uZXRsaW5rLmMKQEAgLTEwMCw2ICsxMDAsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB2bGFuX2dldF90eF9xdWV1ZXMoc3RydWN0IG5ldCAqbmV0LAorCQkJICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCAqbnVtX3R4X3F1ZXVlcywKKwkJCSAgICAgIHVuc2lnbmVkIGludCAqcmVhbF9udW1fdHhfcXVldWVzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldjsKKworCWlmICghdGJbSUZMQV9MSU5LXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWFsX2RldiA9IF9fZGV2X2dldF9ieV9pbmRleChuZXQsIG5sYV9nZXRfdTMyKHRiW0lGTEFfTElOS10pKTsKKwlpZiAoIXJlYWxfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCSpudW1fdHhfcXVldWVzICAgICAgPSByZWFsX2Rldi0+bnVtX3R4X3F1ZXVlczsKKwkqcmVhbF9udW1fdHhfcXVldWVzID0gcmVhbF9kZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB2bGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKIHsKQEAgLTIxNiw2ICsyMzUsNyBAQAogCS5tYXh0eXBlCT0gSUZMQV9WTEFOX01BWCwKIAkucG9saWN5CQk9IHZsYW5fcG9saWN5LAogCS5wcml2X3NpemUJPSBzaXplb2Yoc3RydWN0IHZsYW5fZGV2X2luZm8pLAorCS5nZXRfdHhfcXVldWVzICA9IHZsYW5fZ2V0X3R4X3F1ZXVlcywKIAkuc2V0dXAJCT0gdmxhbl9zZXR1cCwKIAkudmFsaWRhdGUJPSB2bGFuX3ZhbGlkYXRlLAogCS5uZXdsaW5rCT0gdmxhbl9uZXdsaW5rLApkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5wcm9jLmMgYi9uZXQvODAyMXEvdmxhbnByb2MuYwppbmRleCBiNTVhMDkxLi42MjYyYzMzIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbnByb2MuYworKysgYi9uZXQvODAyMXEvdmxhbnByb2MuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgKi8KIAogLyogU3RyaW5ncyAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnZsYW5fbmFtZV90eXBlX3N0cltWTEFOX05BTUVfVFlQRV9ISUdIRVNUXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB2bGFuX25hbWVfdHlwZV9zdHJbVkxBTl9OQU1FX1RZUEVfSElHSEVTVF0gPSB7CiAgICAgW1ZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRF0gICAgICAgID0gIlZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRCIsCiAgICAgW1ZMQU5fTkFNRV9UWVBFX1BMVVNfVklEX05PX1BBRF0JID0gIlZMQU5fTkFNRV9UWVBFX1BMVVNfVklEX05PX1BBRCIsCiAgICAgW1ZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRF9OT19QQURdID0gIlZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRF9OT19QQUQiLApkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCA3MDUxYjk3Li4wNDFjMzVlIDEwMDY0NAotLS0gYS9uZXQvS2NvbmZpZworKysgYi9uZXQvS2NvbmZpZwpAQCAtMjMsNiArMjMsMjYgQEAKIAogaWYgTkVUCiAKK2NvbmZpZyBXQU5UX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTCisJYm9vbAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGNhbiBiZSBzZWxlY3RlZCBieSBvdGhlciBvcHRpb25zIHRoYXQgbmVlZCBjb21wYXQKKwkgIG5ldGxpbmsgbWVzc2FnZXMuCisKK2NvbmZpZyBDT01QQVRfTkVUTElOS19NRVNTQUdFUworCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIENPTVBBVAorCWRlcGVuZHMgb24gV0lSRUxFU1NfRVhUIHx8IFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSB0byBzZW5kIGRpZmZlcmVudCBuZXRsaW5rIG1lc3NhZ2VzCisJICB0byB0YXNrcyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgdGFzayBpcyBhIGNvbXBhdCB0YXNrIG9yIG5vdC4gVG8KKwkgIGFjaGlldmUgdGhpcywgeW91IG5lZWQgdG8gc2V0IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0IHRvIHRoZQorCSAgY29tcGF0IHNrYiBiZWZvcmUgc2VuZGluZyB0aGUgc2tiLCB0aGUgbmV0bGluayBjb2RlIHdpbGwgc29ydCBvdXQKKwkgIHdoaWNoIG1lc3NhZ2UgdG8gYWN0dWFsbHkgcGFzcyB0byB0aGUgdGFzay4KKworCSAgTmV3bHkgd3JpdHRlbiBjb2RlIHNob3VsZCBORVZFUiBuZWVkIHRoaXMgb3B0aW9uIGJ1dCBkbworCSAgY29tcGF0LWluZGVwZW5kZW50IG1lc3NhZ2VzIGluc3RlYWQhCisKIG1lbnUgIk5ldHdvcmtpbmcgb3B0aW9ucyIKIAogc291cmNlICJuZXQvcGFja2V0L0tjb25maWciCmRpZmYgLS1naXQgYS9uZXQvTWFrZWZpbGUgYi9uZXQvTWFrZWZpbGUKaW5kZXggYmEzMjRhZS4uMTU0MmU3MiAxMDA2NDQKLS0tIGEvbmV0L01ha2VmaWxlCisrKyBiL25ldC9NYWtlZmlsZQpAQCAtMjQsNyArMjQsNiBAQAogZW5kaWYKIG9iai0kKENPTkZJR19QQUNLRVQpCQkrPSBwYWNrZXQvCiBvYmotJChDT05GSUdfTkVUX0tFWSkJCSs9IGtleS8KLW9iai0kKENPTkZJR19ORVRfU0NIRUQpCQkrPSBzY2hlZC8KIG9iai0kKENPTkZJR19CUklER0UpCQkrPSBicmlkZ2UvCiBvYmotJChDT05GSUdfTkVUX0RTQSkJCSs9IGRzYS8KIG9iai0kKENPTkZJR19JUFgpCQkrPSBpcHgvCmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2FhcnAuYyBiL25ldC9hcHBsZXRhbGsvYWFycC5jCmluZGV4IDg5Zjk5ZDMuLjlkNGFkZmQgMTAwNjQ0Ci0tLSBhL25ldC9hcHBsZXRhbGsvYWFycC5jCisrKyBiL25ldC9hcHBsZXRhbGsvYWFycC5jCkBAIC01OTksNyArNTk5LDcgQEAKIAogCS8qIE5vbiBFTEFQIHdlIGNhbm5vdCBkby4gKi8KIAlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9FVEhFUikKLQkJcmV0dXJuIC0xOworCQlnb3RvIGZyZWVfaXQ7CiAKIAlza2ItPmRldiA9IGRldjsKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfQVRBTEspOwpAQCAtNjM0LDcgKzYzNCw3IEBACiAJaWYgKCFhKSB7CiAJCS8qIFdob29wcyBzbGlwcGVkLi4uIGdvb2Qgam9iIGl0J3MgYW4gdW5yZWxpYWJsZSBwcm90b2NvbCA4KSAqLwogCQl3cml0ZV91bmxvY2tfYmgoJmFhcnBfbG9jayk7Ci0JCXJldHVybiAtMTsKKwkJZ290byBmcmVlX2l0OwogCX0KIAogCS8qIFNldCB1cCB0aGUgcXVldWUgKi8KQEAgLTY2MywxNSArNjYzLDIxIEBACiAJd3JpdGVfdW5sb2NrX2JoKCZhYXJwX2xvY2spOwogCiAJLyogVGVsbCB0aGUgZGRwIGxheWVyIHdlIGhhdmUgdGFrZW4gb3ZlciBmb3IgdGhpcyBmcmFtZS4gKi8KLQlyZXR1cm4gMDsKKwlnb3RvIHNlbnQ7CiAKIHNlbmRpdDoKIAlpZiAoc2tiLT5zaykKIAkJc2tiLT5wcmlvcml0eSA9IHNrYi0+c2stPnNrX3ByaW9yaXR5OwotCWRldl9xdWV1ZV94bWl0KHNrYik7CisJaWYgKGRldl9xdWV1ZV94bWl0KHNrYikpCisJCWdvdG8gZHJvcDsKIHNlbnQ6Ci0JcmV0dXJuIDE7CisJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CitmcmVlX2l0OgorCWtmcmVlX3NrYihza2IpOworZHJvcDoKKwlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKIH0KK0VYUE9SVF9TWU1CT0woYWFycF9zZW5kX2RkcCk7CiAKIC8qCiAgKglBbiBlbnRyeSBpbiB0aGUgYWFycCB1bnJlc29sdmVkIHF1ZXVlIGhhcyBiZWNvbWUgcmVzb2x2ZWQuIFNlbmQKZGlmZiAtLWdpdCBhL25ldC9hcHBsZXRhbGsvZGRwLmMgYi9uZXQvYXBwbGV0YWxrL2RkcC5jCmluZGV4IDg3NWVkYTUuLjRhNmZmMmIgMTAwNjQ0Ci0tLSBhL25ldC9hcHBsZXRhbGsvZGRwLmMKKysrIGIvbmV0L2FwcGxldGFsay9kZHAuYwpAQCAtMTI3MCw4ICsxMjcwLDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOwogCiAJLyogVGhpcyBuZWVkcyB0byBiZSBhYmxlIHRvIGhhbmRsZSBpcGRkcCJOIiBkZXZpY2VzICovCi0JaWYgKCFkZXYpCi0JCXJldHVybiAtRU5PREVWOworCWlmICghZGV2KSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJfQogCiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKIAlza2JfcHVsbChza2IsIDEzKTsKQEAgLTEyODEsOCArMTI4Myw3IEBACiAJc3RhdHMgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0YXRzLT5yeF9wYWNrZXRzKys7CiAJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuICsgMTM7Ci0JbmV0aWZfcngoc2tiKTsgIC8qIFNlbmQgdGhlIFNLQiB1cCB0byBhIGhpZ2hlciBwbGFjZS4gKi8KLQlyZXR1cm4gMDsKKwlyZXR1cm4gbmV0aWZfcngoc2tiKTsgIC8qIFNlbmQgdGhlIFNLQiB1cCB0byBhIGhpZ2hlciBwbGFjZS4gKi8KIH0KICNlbHNlCiAvKiBtYWtlIGl0IGVhc3kgZm9yIGdjYyB0byBvcHRpbWl6ZSB0aGlzIHRlc3Qgb3V0LCBpLmUuIGtpbGwgdGhlIGNvZGUgKi8KQEAgLTEyOTAsOSArMTI5MSw4IEBACiAjZGVmaW5lIGhhbmRsZV9pcF9vdmVyX2RkcChza2IpIDAKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBhdGFsa19yb3V0ZV9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgZGRwZWhkciAqZGRwLCBfX3UxNiBsZW5faG9wcywKLQkJCSAgICAgICBpbnQgb3JpZ2xlbikKK3N0YXRpYyBpbnQgYXRhbGtfcm91dGVfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGRwZWhkciAqZGRwLCBfX3UxNiBsZW5faG9wcywgaW50IG9yaWdsZW4pCiB7CiAJc3RydWN0IGF0YWxrX3JvdXRlICpydDsKIAlzdHJ1Y3QgYXRhbGtfYWRkciB0YTsKQEAgLTEzNTksOCArMTM1OSw2IEBACiAJCS8qIDIyIGJ5dGVzIC0gMTIgZXRoZXIsIDIgbGVuLCAzIDgwMi4yIDUgc25hcCAqLwogCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgMzIpOwogCQlrZnJlZV9za2Ioc2tiKTsKLQkJaWYgKCFuc2tiKQotCQkJZ290byBvdXQ7CiAJCXNrYiA9IG5za2I7CiAJfSBlbHNlCiAJCXNrYiA9IHNrYl91bnNoYXJlKHNrYiwgR0ZQX0FUT01JQyk7CkBAIC0xMzY5LDEyICsxMzY3LDE2IEBACiAJICogSWYgdGhlIGJ1ZmZlciBkaWRuJ3QgdmFuaXNoIGludG8gdGhlIGxhY2sgb2Ygc3BhY2UgYml0YnVja2V0IHdlIGNhbgogCSAqIHNlbmQgaXQuCiAJICovCi0JaWYgKHNrYiAmJiBhYXJwX3NlbmRfZGRwKHJ0LT5kZXYsIHNrYiwgJnRhLCBOVUxMKSA9PSAtMSkKLQkJZ290byBmcmVlX2l0Owotb3V0OgotCXJldHVybjsKKwlpZiAoc2tiID09IE5VTEwpCisJCWdvdG8gZHJvcDsKKworCWlmIChhYXJwX3NlbmRfZGRwKHJ0LT5kZXYsIHNrYiwgJnRhLCBOVUxMKSA9PSBORVRfWE1JVF9EUk9QKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiBmcmVlX2l0OgogCWtmcmVlX3NrYihza2IpOworZHJvcDoKKwlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKIC8qKgpAQCAtMTQwMCw3ICsxNDAyLDcgQEAKIAlfX3UxNiBsZW5faG9wczsKIAogCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKLQkJZ290byBmcmVlaXQ7CisJCWdvdG8gZHJvcDsKIAogCS8qIERvbid0IG1hbmdsZSBidWZmZXIgaWYgc2hhcmVkICovCiAJaWYgKCEoc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQykpKQpAQCAtMTQwOCw3ICsxNDEwLDcgQEAKIAogCS8qIFNpemUgY2hlY2sgYW5kIG1ha2Ugc3VyZSBoZWFkZXIgaXMgY29udGlndW91cyAqLwogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqZGRwKSkpCi0JCWdvdG8gZnJlZWl0OworCQlnb3RvIGRyb3A7CiAKIAlkZHAgPSBkZHBfaGRyKHNrYik7CiAKQEAgLTE0MjYsNyArMTQyOCw3IEBACiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCpkZHApIHx8IHNrYi0+bGVuIDwgKGxlbl9ob3BzICYgMTAyMykpIHsKIAkJcHJfZGVidWcoIkFwcGxlVGFsazogZHJvcHBpbmcgY29ycnVwdGVkIGZyYW1lIChkZWhfbGVuPSV1LCAiCiAJCQkgInNrYi0+bGVuPSV1KVxuIiwgbGVuX2hvcHMgJiAxMDIzLCBza2ItPmxlbik7Ci0JCWdvdG8gZnJlZWl0OworCQlnb3RvIGRyb3A7CiAJfQogCiAJLyoKQEAgLTE0MzYsNyArMTQzOCw3IEBACiAJaWYgKGRkcC0+ZGVoX3N1bSAmJgogCSAgICBhdGFsa19jaGVja3N1bShza2IsIGxlbl9ob3BzICYgMTAyMykgIT0gZGRwLT5kZWhfc3VtKQogCQkvKiBOb3QgYSB2YWxpZCBBcHBsZVRhbGsgZnJhbWUgLSBkdXN0YmluIHRpbWUgKi8KLQkJZ290byBmcmVlaXQ7CisJCWdvdG8gZHJvcDsKIAogCS8qIENoZWNrIHRoZSBwYWNrZXQgaXMgYWltZWQgYXQgdXMgKi8KIAlpZiAoIWRkcC0+ZGVoX2RuZXQpCS8qIE5ldCAwIGlzICd0aGlzIG5ldHdvcmsnICovCkBAIC0xNDQ4LDggKzE0NTAsNyBAQAogCQkvKiBOb3Qgb3Vycywgc28gd2Ugcm91dGUgdGhlIHBhY2tldCB2aWEgdGhlIGNvcnJlY3QKIAkJICogQXBwbGVUYWxrIGlmYWNlCiAJCSAqLwotCQlhdGFsa19yb3V0ZV9wYWNrZXQoc2tiLCBkZXYsIGRkcCwgbGVuX2hvcHMsIG9yaWdsZW4pOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIGF0YWxrX3JvdXRlX3BhY2tldChza2IsIGRldiwgZGRwLCBsZW5faG9wcywgb3JpZ2xlbik7CiAJfQogCiAJLyogaWYgSVAgb3ZlciBERFAgaXMgbm90IHNlbGVjdGVkIHRoaXMgY29kZSB3aWxsIGJlIG9wdGltaXplZCBvdXQgKi8KQEAgLTE0NjUsMTggKzE0NjYsMjEgQEAKIAogCXNvY2sgPSBhdGFsa19zZWFyY2hfc29ja2V0KCZ0b3NhdCwgYXRpZik7CiAJaWYgKCFzb2NrKSAvKiBCdXQgbm90IG9uZSBvZiBvdXIgc29ja2V0cyAqLwotCQlnb3RvIGZyZWVpdDsKKwkJZ290byBkcm9wOwogCiAJLyogUXVldWUgcGFja2V0IChzdGFuZGFyZCkgKi8KIAlza2ItPnNrID0gc29jazsKIAogCWlmIChzb2NrX3F1ZXVlX3Jjdl9za2Ioc29jaywgc2tiKSA8IDApCi0JCWdvdG8gZnJlZWl0Owotb3V0OgotCXJldHVybiAwOwotZnJlZWl0OgorCQlnb3RvIGRyb3A7CisKKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CisKK2Ryb3A6CiAJa2ZyZWVfc2tiKHNrYik7Ci0JZ290byBvdXQ7CitvdXQ6CisJcmV0dXJuIE5FVF9SWF9EUk9QOworCiB9CiAKIC8qCkBAIC0xNjUyLDEwICsxNjU2LDEwIEBACiAJCWlmIChza2IyKSB7CiAJCQlsb29wYmFjayA9IDE7CiAJCQlTT0NLX0RFQlVHKHNrLCAiU0sgJXA6IHNlbmQgb3V0KGNvcHkpLlxuIiwgc2spOwotCQkJaWYgKGFhcnBfc2VuZF9kZHAoZGV2LCBza2IyLAotCQkJCQkgICZ1c2F0LT5zYXRfYWRkciwgTlVMTCkgPT0gLTEpCi0JCQkJa2ZyZWVfc2tiKHNrYjIpOwotCQkJCS8qIGVsc2UgcXVldWVkL3NlbnQgYWJvdmUgaW4gdGhlIGFhcnAgcXVldWUgKi8KKwkJCS8qCisJCQkgKiBJZiBpdCBmYWlscyBpdCBpcyBxdWV1ZWQvc2VudCBhYm92ZSBpbiB0aGUgYWFycCBxdWV1ZQorCQkJICovCisJCQlhYXJwX3NlbmRfZGRwKGRldiwgc2tiMiwgJnVzYXQtPnNhdF9hZGRyLCBOVUxMKTsKIAkJfQogCX0KIApAQCAtMTY4NSw5ICsxNjg5LDEwIEBACiAJCSAgICB1c2F0ID0gJmdzYXQ7CiAJCX0KIAotCQlpZiAoYWFycF9zZW5kX2RkcChkZXYsIHNrYiwgJnVzYXQtPnNhdF9hZGRyLCBOVUxMKSA9PSAtMSkKLQkJCWtmcmVlX3NrYihza2IpOwotCQkvKiBlbHNlIHF1ZXVlZC9zZW50IGFib3ZlIGluIHRoZSBhYXJwIHF1ZXVlICovCisJCS8qCisJCSAqIElmIGl0IGZhaWxzIGl0IGlzIHF1ZXVlZC9zZW50IGFib3ZlIGluIHRoZSBhYXJwIHF1ZXVlCisJCSAqLworCQlhYXJwX3NlbmRfZGRwKGRldiwgc2tiLCAmdXNhdC0+c2F0X2FkZHIsIE5VTEwpOwogCX0KIAlTT0NLX0RFQlVHKHNrLCAiU0sgJXA6IERvbmUgd3JpdGUgKCVaZCkuXG4iLCBzaywgbGVuKTsKIApAQCAtMTg2NSw3ICsxODcwLDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRkcF9zbmFwX2lkW10gPSB7IDB4MDgsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OUIgfTsKIAogLyogRXhwb3J0IHN5bWJvbHMgZm9yIHVzZSBieSBkcml2ZXJzIHdoZW4gQXBwbGVUYWxrIGlzIGEgbW9kdWxlICovCi1FWFBPUlRfU1lNQk9MKGFhcnBfc2VuZF9kZHApOwogRVhQT1JUX1NZTUJPTChhdHJ0cl9nZXRfZGV2KTsKIEVYUE9SVF9TWU1CT0woYXRhbGtfZmluZF9kZXZfYWRkcik7CiAKZGlmZiAtLWdpdCBhL25ldC9hdG0vYnIyNjg0LmMgYi9uZXQvYXRtL2JyMjY4NC5jCmluZGV4IDI5MTI2NjVmLi4yNmE2NDZkIDEwMDY0NAotLS0gYS9uZXQvYXRtL2JyMjY4NC5jCisrKyBiL25ldC9hdG0vYnIyNjg0LmMKQEAgLTY5LDcgKzY5LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2aWNlOwogCS8qIGtlZXAgb2xkIHB1c2gsIHBvcCBmdW5jdGlvbnMgZm9yIGNoYWluaW5nICovCiAJdm9pZCAoKm9sZF9wdXNoKSAoc3RydWN0IGF0bV92Y2MgKiB2Y2MsIHN0cnVjdCBza19idWZmICogc2tiKTsKLQkvKiB2b2lkICgqb2xkX3BvcCkoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7ICovCisJdm9pZCAoKm9sZF9wb3ApKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpOwogCWVudW0gYnIyNjg0X2VuY2FwcyBlbmNhcHM7CiAJc3RydWN0IGxpc3RfaGVhZCBicnZjY3M7CiAjaWZkZWYgQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVIKQEAgLTE0Miw2ICsxNDIsMjIgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyogY2hhaW5lZCB2Y2MtPnBvcCBmdW5jdGlvbi4gIENoZWNrIGlmIHdlIHNob3VsZCB3YWtlIHRoZSBuZXRpZl9xdWV1ZSAqLworc3RhdGljIHZvaWQgYnIyNjg0X3BvcChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBicjI2ODRfdmNjICpicnZjYyA9IEJSMjY4NF9WQ0ModmNjKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IHNrYi0+ZGV2OworCisJcHJfZGVidWcoImJyMjY4NF9wb3AodmNjICVwIDsgbmV0X2RldiAlcCApXG4iLCB2Y2MsIG5ldF9kZXYpOworCWJydmNjLT5vbGRfcG9wKHZjYywgc2tiKTsKKworCWlmICghbmV0X2RldikKKwkJcmV0dXJuOworCisJaWYgKGF0bV9tYXlfc2VuZCh2Y2MsIDApKQorCQluZXRpZl93YWtlX3F1ZXVlKG5ldF9kZXYpOworCit9CiAvKgogICogU2VuZCBhIHBhY2tldCBvdXQgYSBwYXJ0aWN1bGFyIHZjYy4gIE5vdCB0byB1c2VmdWwgcmlnaHQgbm93LCBidXQgcGF2ZXMKICAqIHRoZSB3YXkgZm9yIG11bHRpcGxlIHZjYydzIHBlciBpdGYuICBSZXR1cm5zIHRydWUgaWYgd2UgY2FuIHNlbmQsCkBAIC0yMDAsMjAgKzIxNiwxOSBAQAogCiAJQVRNX1NLQihza2IpLT52Y2MgPSBhdG12Y2MgPSBicnZjYy0+YXRtdmNjOwogCXByX2RlYnVnKCJhdG1fc2tiKCVwKS0+dmNjKCVwKS0+ZGV2KCVwKVxuIiwgc2tiLCBhdG12Y2MsIGF0bXZjYy0+ZGV2KTsKLQlpZiAoIWF0bV9tYXlfc2VuZChhdG12Y2MsIHNrYi0+dHJ1ZXNpemUpKSB7Ci0JCS8qCi0JCSAqIFdlIGZyZWUgdGhpcyBoZXJlIGZvciBub3csIGJlY2F1c2Ugd2UgY2Fubm90IGtub3cgaW4gYSBoaWdoZXIKLQkJICogbGF5ZXIgd2hldGhlciB0aGUgc2tiIHBvaW50ZXIgaXQgc3VwcGxpZWQgd2Fzbid0IGZyZWVkIHlldC4KLQkJICogTm93LCBpdCBhbHdheXMgaXMuCi0JCSAqLwotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOwotCX0KIAlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZza19hdG0oYXRtdmNjKS0+c2tfd21lbV9hbGxvYyk7CiAJQVRNX1NLQihza2IpLT5hdG1fb3B0aW9ucyA9IGF0bXZjYy0+YXRtX29wdGlvbnM7CiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAlhdG12Y2MtPnNlbmQoYXRtdmNjLCBza2IpOworCisJaWYgKCFhdG1fbWF5X3NlbmQoYXRtdmNjLCAwKSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKGJydmNjLT5kZXZpY2UpOworCQkvKmNoZWNrIGZvciByYWNlIHdpdGggYnIyNjg0X3BvcCovCisJCWlmIChhdG1fbWF5X3NlbmQoYXRtdmNjLCAwKSkKKwkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGJydmNjLT5kZXZpY2UpOworCX0KKwogCXJldHVybiAxOwogfQogCkBAIC0yMjMsNyArMjM4LDggQEAKIAlyZXR1cm4gbGlzdF9lbXB0eSgmYnJkZXYtPmJydmNjcykgPyBOVUxMIDogbGlzdF9lbnRyeV9icnZjYyhicmRldi0+YnJ2Y2NzLm5leHQpOwkvKiAxIHZjYy9kZXYgcmlnaHQgbm93ICovCiB9CiAKLXN0YXRpYyBpbnQgYnIyNjg0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBicjI2ODRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYnIyNjg0X2RldiAqYnJkZXYgPSBCUlBSSVYoZGV2KTsKIAlzdHJ1Y3QgYnIyNjg0X3ZjYyAqYnJ2Y2M7CkBAIC0yMzgsNyArMjU0LDcgQEAKIAkJLyogbmV0aWZfc3RvcF9xdWV1ZShkZXYpOyAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJlYWRfdW5sb2NrKCZkZXZzX2xvY2spOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJaWYgKCFicjI2ODRfeG1pdF92Y2Moc2tiLCBkZXYsIGJydmNjKSkgewogCQkvKgpAQCAtMjUyLDcgKzI2OCw3IEBACiAJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAl9CiAJcmVhZF91bmxvY2soJmRldnNfbG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKQEAgLTUwMyw4ICs1MTksMTAgQEAKIAlhdG12Y2MtPnVzZXJfYmFjayA9IGJydmNjOwogCWJydmNjLT5lbmNhcHMgPSAoZW51bSBicjI2ODRfZW5jYXBzKWJlLmVuY2FwczsKIAlicnZjYy0+b2xkX3B1c2ggPSBhdG12Y2MtPnB1c2g7CisJYnJ2Y2MtPm9sZF9wb3AgPSBhdG12Y2MtPnBvcDsKIAliYXJyaWVyKCk7CiAJYXRtdmNjLT5wdXNoID0gYnIyNjg0X3B1c2g7CisJYXRtdmNjLT5wb3AgPSBicjI2ODRfcG9wOwogCiAJX19za2JfcXVldWVfaGVhZF9pbml0KCZxdWV1ZSk7CiAJcnEgPSAmc2tfYXRtKGF0bXZjYyktPnNrX3JlY2VpdmVfcXVldWU7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2NsaXAuYyBiL25ldC9hdG0vY2xpcC5jCmluZGV4IGU2NWEzYjEuLjY0NjI5YzMgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vY2xpcC5jCisrKyBiL25ldC9hdG0vY2xpcC5jCkBAIC0yNjcsNyArMjY3LDcgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZWlnaF9vcHMgY2xpcF9uZWlnaF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5laWdoX29wcyBjbGlwX25laWdoX29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCiAJLnNvbGljaXQgPQkJY2xpcF9uZWlnaF9zb2xpY2l0LAogCS5lcnJvcl9yZXBvcnQgPQkJY2xpcF9uZWlnaF9lcnJvciwKQEAgLTM2MCw3ICszNjAsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNsaXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGNsaXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNsaXBfcHJpdiAqY2xpcF9wcml2ID0gUFJJVihkZXYpOwogCXN0cnVjdCBhdG1hcnBfZW50cnkgKmVudHJ5OwpAQCAtMzczLDcgKzM3NCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiY2xpcF9zdGFydF94bWl0OiBza2JfZHN0KHNrYikgPT0gTlVMTFxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlpZiAoIXNrYl9kc3Qoc2tiKS0+bmVpZ2hib3VyKSB7CiAjaWYgMApAQCAtMzg3LDcgKzM4OCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiY2xpcF9zdGFydF94bWl0OiBOTyBORUlHSEJPVVIgIVxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAllbnRyeSA9IE5FSUdIMkVOVFJZKHNrYl9kc3Qoc2tiKS0+bmVpZ2hib3VyKTsKIAlpZiAoIWVudHJ5LT52Y2NzKSB7CkBAIC00MDIsNyArNDAzLDcgQEAKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQl9Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlwcl9kZWJ1ZygibmVpZ2ggJXAsIHZjY3MgJXBcbiIsIGVudHJ5LCBlbnRyeS0+dmNjcyk7CiAJQVRNX1NLQihza2IpLT52Y2MgPSB2Y2MgPSBlbnRyeS0+dmNjcy0+dmNjOwpAQCAtNDIxLDE0ICs0MjIsMTQgQEAKIAlvbGQgPSB4Y2hnKCZlbnRyeS0+dmNjcy0+eG9mZiwgMSk7CS8qIGFzc3VtZSBYT0ZGIC4uLiAqLwogCWlmIChvbGQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xpcF9zdGFydF94bWl0OiBYT0ZGLT5YT0ZGIHRyYW5zaXRpb25cbiIpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAl2Y2MtPnNlbmQodmNjLCBza2IpOwogCWlmIChhdG1fbWF5X3NlbmQodmNjLCAwKSkgewogCQllbnRyeS0+dmNjcy0+eG9mZiA9IDA7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpcF9wcml2LT54b2ZmX2xvY2ssIGZsYWdzKTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CS8qIFhPRkYgLT4gdGhyb3R0bGUgaW1tZWRpYXRlbHkgKi8KQEAgLTQ0MCw3ICs0NDEsNyBAQAogCSAgIG9mIHRoZSBicmllZiBuZXRpZl9zdG9wX3F1ZXVlLiBJZiB0aGlzIGlzbid0IHRydWUgb3IgaWYgaXQKIAkgICBjaGFuZ2VzLCB1c2UgbmV0aWZfd2FrZV9xdWV1ZSBpbnN0ZWFkLiAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaXBfcHJpdi0+eG9mZl9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBjbGlwX21raXAoc3RydWN0IGF0bV92Y2MgKnZjYywgaW50IHRpbWVvdXQpCmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlYy5jIGIvbmV0L2F0bS9sZWMuYwppbmRleCBmZjJlNTk0Li5iMmQ2NDQ1IDEwMDY0NAotLS0gYS9uZXQvYXRtL2xlYy5jCisrKyBiL25ldC9hdG0vbGVjLmMKQEAgLTU5LDcgKzU5LDggQEAKIAkJCQkgKi8KIAogc3RhdGljIGludCBsZWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgbGVjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbGVjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBsZWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBsZWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqbGVjX2FycF9maW5kKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKQEAgLTI0Nyw3ICsyNDgsOCBAQAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotc3RhdGljIGludCBsZWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGxlY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBza19idWZmICpza2IyOwogCXN0cnVjdCBsZWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC0yODksNyArMjkxLDcgQEAKIAkJc2tiMiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgTEVDX0hFQURFUl9MRU4pOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJaWYgKHNrYjIgPT0gTlVMTCkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJc2tiID0gc2tiMjsKIAl9CiAJc2tiX3B1c2goc2tiLCAyKTsKQEAgLTMwNyw3ICszMDksNyBAQAogCQlza2IyID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBMRUNfSEVBREVSX0xFTik7CiAJCWtmcmVlX3NrYihza2IpOwogCQlpZiAoc2tiMiA9PSBOVUxMKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQlza2IgPSBza2IyOwogCX0KICNlbmRpZgpAQCAtMzQ1LDcgKzM0Nyw3IEBACiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlpZiAoc2tiMiA9PSBOVUxMKSB7CiAJCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJCX0KIAkJCXNrYiA9IHNrYjI7CiAJCX0KQEAgLTQxNiw3ICs0MTgsNyBAQAogCWlmIChlbnRyeSkKIAkJbGVjX2FycF9wdXQoZW50cnkpOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFRoZSBpbnZlcnNlIHJvdXRpbmUgdG8gbmV0X29wZW4oKS4gKi8KQEAgLTkzNSw5ICs5MzcsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0YXRpYyBjaGFyICpsZWNfYXJwX2dldF9zdGF0dXNfc3RyaW5nKHVuc2lnbmVkIGNoYXIgc3RhdHVzKQorc3RhdGljIGNvbnN0IGNoYXIgKmxlY19hcnBfZ2V0X3N0YXR1c19zdHJpbmcodW5zaWduZWQgY2hhciBzdGF0dXMpCiB7Ci0Jc3RhdGljIGNoYXIgKmxlY19hcnBfc3RhdHVzX3N0cmluZ1tdID0geworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBsZWNfYXJwX3N0YXR1c19zdHJpbmdbXSA9IHsKIAkJIkVTSV9VTktOT1dOICAgICAgICIsCiAJCSJFU0lfQVJQX1BFTkRJTkcgICAiLAogCQkiRVNJX1ZDX1BFTkRJTkcgICAgIiwKQEAgLTExMjEsNyArMTEyMyw4IEBACiAKIHN0YXRpYyBpbnQgbGVjX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotCXN0YXRpYyBjaGFyIGxlY19iYW5uZXJbXSA9ICJJdGYgIE1BQyAgICAgICAgICBBVE0gZGVzdGluYXRpb24iCisJc3RhdGljIGNvbnN0IGNoYXIgbGVjX2Jhbm5lcltdID0KKwkgICAgIkl0ZiAgTUFDICAgICAgICAgIEFUTSBkZXN0aW5hdGlvbiIKIAkgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzICAgICAgICAgICAgRmxhZ3MgIgogCSAgICAiVlBJL1ZDSSBSZWN2IFZQSS9WQ0lcbiI7CiAKQEAgLTE1MDUsNyArMTUwOCw3IEBACiB9CiAKICNpZiBERUJVR19BUlBfVEFCTEUKLXN0YXRpYyBjaGFyICpnZXRfc3RhdHVzX3N0cmluZyh1bnNpZ25lZCBjaGFyIHN0KQorc3RhdGljIGNvbnN0IGNoYXIgKmdldF9zdGF0dXNfc3RyaW5nKHVuc2lnbmVkIGNoYXIgc3QpCiB7CiAJc3dpdGNoIChzdCkgewogCWNhc2UgRVNJX1VOS05PV046CmRpZmYgLS1naXQgYS9uZXQvYXRtL21wYy5jIGIvbmV0L2F0bS9tcGMuYwppbmRleCBlNWJmMTE0Li4zOGE2Y2IwIDEwMDY0NAotLS0gYS9uZXQvYXRtL21wYy5jCisrKyBiL25ldC9hdG0vbXBjLmMKQEAgLTczLDcgKzczLDggQEAKIHN0YXRpYyBpbnQgbXNnX2Zyb21fbXBvYWQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0YXRpYyB2b2lkIG1wY19wdXNoKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIGludCBtcGNfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbXBjX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbXBvYV9ldmVudF9saXN0ZW5lcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm1wb2Ffbm90aWZpZXIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRldik7CiBzdGF0aWMgdm9pZCBtcGNfdGltZXJfcmVmcmVzaCh2b2lkKTsKIHN0YXRpYyB2b2lkIG1wY19jYWNoZV9jaGVjayggdW5zaWduZWQgbG9uZyBjaGVja2luZ190aW1lICApOwpAQCAtNTI4LDcgKzUyOSw4IEBACiAvKgogICogUHJvYmFibHkgbmVlZHMgc29tZSBlcnJvciBjaGVja3MgYW5kIGxvY2tpbmcsIG5vdCBzdXJlLi4uCiAgKi8KLXN0YXRpYyBpbnQgbXBjX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbXBjX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtcG9hX2NsaWVudCAqbXBjOwogCXN0cnVjdCBldGhoZHIgKmV0aDsKQEAgLTU1NCw3ICs1NTYsNyBAQAogCXdoaWxlIChpIDwgbXBjLT5udW1iZXJfb2ZfbXBzX21hY3MpIHsKIAkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoZXRoLT5oX2Rlc3QsIChtcGMtPm1wc19tYWNzICsgaSpFVEhfQUxFTikpKQogCQkJaWYgKCBzZW5kX3ZpYV9zaG9ydGN1dChza2IsIG1wYykgPT0gMCApICAgICAgICAgICAvKiB0cnkgc2hvcnRjdXQgKi8KLQkJCQlyZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdWNjZXNzISAgICAgKi8KKwkJCQlyZXR1cm4gTkVUREVWX1RYX09LOyAgICAgICAgICAgICAgICAgICAgICAvKiBzdWNjZXNzISAgICAgKi8KIAkJaSsrOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcm9jLmMgYi9uZXQvYXRtL3Byb2MuYwppbmRleCAzOGRlNWZmLi5hYjg0MTlhIDEwMDY0NAotLS0gYS9uZXQvYXRtL3Byb2MuYworKysgYi9uZXQvYXRtL3Byb2MuYwpAQCAtMTUxLDggKzE1MSw5IEBACiAKIHN0YXRpYyB2b2lkIHB2Y19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewotCXN0YXRpYyBjb25zdCBjaGFyICpjbGFzc19uYW1lW10gPSB7ICJvZmYiLCJVQlIiLCJDQlIiLCJWQlIiLCJBQlIiIH07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmFhbF9uYW1lW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNsYXNzX25hbWVbXSA9CisJCXsib2ZmIiwiVUJSIiwiQ0JSIiwiVkJSIiwiQUJSIn07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGFhbF9uYW1lW10gPSB7CiAJCSItLS0iLAkiMSIsCSIyIiwJIjMvNCIsCS8qICAwLSAzICovCiAJCSI/Pz8iLAkiNSIsCSI/Pz8iLAkiPz8/IiwJLyogIDQtIDcgKi8KIAkJIj8/PyIsCSI/Pz8iLAkiPz8/IiwJIj8/PyIsCS8qICA4LTExICovCkBAIC0xNzgsNyArMTc5LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnZjY19zdGF0ZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewotCXN0YXRpYyBjb25zdCBjaGFyICptYXBbXSA9IHsgQVRNX1ZTMlRYVF9NQVAgfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWFwW10gPSB7IEFUTV9WUzJUWFRfTUFQIH07CiAKIAlyZXR1cm4gbWFwW0FUTV9WRjJWUyh2Y2MtPmZsYWdzKV07CiB9CkBAIC0zMzUsNyArMzM2LDcgQEAKIAogc3RhdGljIGludCBzdmNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0Jc3RhdGljIGNoYXIgYXRtX3N2Y19iYW5uZXJbXSA9CisJc3RhdGljIGNvbnN0IGNoYXIgYXRtX3N2Y19iYW5uZXJbXSA9CiAJCSJJdGYgVlBJIFZDSSAgICAgICAgICAgU3RhdGUgICAgICBSZW1vdGVcbiI7CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL0tjb25maWcgYi9uZXQvYmx1ZXRvb3RoL0tjb25maWcKaW5kZXggNTlmZGIxZC4uZWQzNzE2OCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9LY29uZmlnCisrKyBiL25ldC9ibHVldG9vdGgvS2NvbmZpZwpAQCAtMzQsNiArMzQsNyBAQAogY29uZmlnIEJUX0wyQ0FQCiAJdHJpc3RhdGUgIkwyQ0FQIHByb3RvY29sIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBCVAorCXNlbGVjdCBDUkMxNgogCWhlbHAKIAkgIEwyQ0FQIChMb2dpY2FsIExpbmsgQ29udHJvbCBhbmQgQWRhcHRhdGlvbiBQcm90b2NvbCkgcHJvdmlkZXMKIAkgIGNvbm5lY3Rpb24gb3JpZW50ZWQgYW5kIGNvbm5lY3Rpb24tbGVzcyBkYXRhIHRyYW5zcG9ydC4gIEwyQ0FQCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwppbmRleCAwMjUwZTA2Li44Y2ZiNWE4IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCisrKyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIHN0YXRpYyBERUZJTkVfUldMT0NLKGJ0X3Byb3RvX2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ0X2xvY2tfa2V5W0JUX01BWF9QUk9UT107Ci1zdGF0aWMgY29uc3QgY2hhciAqYnRfa2V5X3N0cmluZ3NbQlRfTUFYX1BST1RPXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBidF9rZXlfc3RyaW5nc1tCVF9NQVhfUFJPVE9dID0gewogCSJza19sb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX0wyQ0FQIiwKIAkic2tfbG9jay1BRl9CTFVFVE9PVEgtQlRQUk9UT19IQ0kiLAogCSJza19sb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX1NDTyIsCkBAIC02MSw3ICs2MSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ0X3Nsb2NrX2tleVtCVF9NQVhfUFJPVE9dOwotc3RhdGljIGNvbnN0IGNoYXIgKmJ0X3Nsb2NrX2tleV9zdHJpbmdzW0JUX01BWF9QUk9UT10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnRfc2xvY2tfa2V5X3N0cmluZ3NbQlRfTUFYX1BST1RPXSA9IHsKIAkic2xvY2stQUZfQkxVRVRPT1RILUJUUFJPVE9fTDJDQVAiLAogCSJzbG9jay1BRl9CTFVFVE9PVEgtQlRQUk9UT19IQ0kiLAogCSJzbG9jay1BRl9CTFVFVE9PVEgtQlRQUk9UT19TQ08iLApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMKaW5kZXggNTJhNmNlMC4uY2FmZTlmNSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCkBAIC01MzMsNiArNTMzLDEwIEBACiAJcmV0dXJuIGNvbm4gPyAmY29ubi0+ZGV2IDogTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBibmVwX3R5cGUgPSB7CisJLm5hbWUJPSAiYmx1ZXRvb3RoIiwKK307CisKIGludCBibmVwX2FkZF9jb25uZWN0aW9uKHN0cnVjdCBibmVwX2Nvbm5hZGRfcmVxICpyZXEsIHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTU4Niw2ICs1OTAsNyBAQAogI2VuZGlmCiAKIAlTRVRfTkVUREVWX0RFVihkZXYsIGJuZXBfZ2V0X2RldmljZShzKSk7CisJU0VUX05FVERFVl9ERVZUWVBFKGRldiwgJmJuZXBfdHlwZSk7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2JuZXAvbmV0ZGV2LmMgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvbmV0ZGV2LmMKaW5kZXggZDdhMGU5Ny4uMjZmYjgzMSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL25ldGRldi5jCisrKyBiL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYwpAQCAtMTY1LDcgKzE2NSw4IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBibmVwX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYm5lcF9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBibmVwX3Nlc3Npb24gKnMgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBzb2NrICpzayA9IHMtPnNvY2stPnNrOwpAQCAtMTc1LDE0ICsxNzYsMTQgQEAKICNpZmRlZiBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVIKIAlpZiAoYm5lcF9uZXRfbWNfZmlsdGVyKHNrYiwgcykpIHsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSCiAJaWYgKGJuZXBfbmV0X3Byb3RvX2ZpbHRlcihza2IsIHMpKSB7CiAJCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAjZW5kaWYKIApAQCAtMjAzLDcgKzIwNCw3IEBACiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJuZXBfbmV0ZGV2X29wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwppbmRleCBmYTQ3ZDVkLi5hOTc1MDk4IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCkBAIC0yNDYsNiArMjQ2LDggQEAKIAlpZiAoaGRldi0+bm90aWZ5KQogCQloZGV2LT5ub3RpZnkoaGRldiwgSENJX05PVElGWV9DT05OX0FERCk7CiAKKwlhdG9taWNfc2V0KCZjb25uLT5kZXZyZWYsIDApOworCiAJaGNpX2Nvbm5faW5pdF9zeXNmcyhjb25uKTsKIAogCXRhc2tsZXRfZW5hYmxlKCZoZGV2LT50eF90YXNrKTsKQEAgLTI4OCw3ICsyOTAsNyBAQAogCiAJc2tiX3F1ZXVlX3B1cmdlKCZjb25uLT5kYXRhX3EpOwogCi0JaGNpX2Nvbm5fZGVsX3N5c2ZzKGNvbm4pOworCWhjaV9jb25uX3B1dF9kZXZpY2UoY29ubik7CiAKIAloY2lfZGV2X3B1dChoZGV2KTsKIApAQCAtNTgzLDYgKzU4NSwxOSBAQAogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogfQogCit2b2lkIGhjaV9jb25uX2hvbGRfZGV2aWNlKHN0cnVjdCBoY2lfY29ubiAqY29ubikKK3sKKwlhdG9taWNfaW5jKCZjb25uLT5kZXZyZWYpOworfQorRVhQT1JUX1NZTUJPTChoY2lfY29ubl9ob2xkX2RldmljZSk7CisKK3ZvaWQgaGNpX2Nvbm5fcHV0X2RldmljZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNvbm4tPmRldnJlZikpCisJCWhjaV9jb25uX2RlbF9zeXNmcyhjb25uKTsKK30KK0VYUE9SVF9TWU1CT0woaGNpX2Nvbm5fcHV0X2RldmljZSk7CisKIGludCBoY2lfZ2V0X2Nvbm5fbGlzdCh2b2lkIF9fdXNlciAqYXJnKQogewogCXN0cnVjdCBoY2lfY29ubl9saXN0X3JlcSByZXEsICpjbDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwppbmRleCA0MDZhZDA3Li5lMWRhOGY2IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCkBAIC05MTEsNyArOTExLDcgQEAKIAkJaGRldi0+cmVhc3NlbWJseVtpXSA9IE5VTEw7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZoZGV2LT5yZXFfd2FpdF9xKTsKLQlpbml0X01VVEVYKCZoZGV2LT5yZXFfbG9jayk7CisJbXV0ZXhfaW5pdCgmaGRldi0+cmVxX2xvY2spOwogCiAJaW5xdWlyeV9jYWNoZV9pbml0KGhkZXYpOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwppbmRleCAxODRiYTBhLi5lOTlmZTM4IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKQEAgLTg4Nyw2ICs4ODcsNyBAQAogCQl9IGVsc2UKIAkJCWNvbm4tPnN0YXRlID0gQlRfQ09OTkVDVEVEOwogCisJCWhjaV9jb25uX2hvbGRfZGV2aWNlKGNvbm4pOwogCQloY2lfY29ubl9hZGRfc3lzZnMoY29ubik7CiAKIAkJaWYgKHRlc3RfYml0KEhDSV9BVVRILCAmaGRldi0+ZmxhZ3MpKQpAQCAtMTY5Myw2ICsxNjk0LDcgQEAKIAkJY29ubi0+aGFuZGxlID0gX19sZTE2X3RvX2NwdShldi0+aGFuZGxlKTsKIAkJY29ubi0+c3RhdGUgID0gQlRfQ09OTkVDVEVEOwogCisJCWhjaV9jb25uX2hvbGRfZGV2aWNlKGNvbm4pOwogCQloY2lfY29ubl9hZGRfc3lzZnMoY29ubik7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwppbmRleCBiMTg2NzY4Li4wOWJlZGViIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKQEAgLTQwLDYgKzQwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvaGlkcmF3Lmg+CiAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KQEAgLTkyLDEwICs5MywxNCBAQAogewogCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CiAJbGlzdF9hZGQoJnNlc3Npb24tPmxpc3QsICZoaWRwX3Nlc3Npb25fbGlzdCk7CisKKwloY2lfY29ubl9ob2xkX2RldmljZShzZXNzaW9uLT5jb25uKTsKIH0KIAogc3RhdGljIHZvaWQgX19oaWRwX3VubGlua19zZXNzaW9uKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24pCiB7CisJaGNpX2Nvbm5fcHV0X2RldmljZShzZXNzaW9uLT5jb25uKTsKKwogCWxpc3RfZGVsKCZzZXNzaW9uLT5saXN0KTsKIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIH0KQEAgLTM3NCw2ICszNzksNyBAQAogCiAJCS8qIEtpbGwgc2Vzc2lvbiB0aHJlYWQgKi8KIAkJYXRvbWljX2luYygmc2Vzc2lvbi0+dGVybWluYXRlKTsKKwkJaGlkcF9zY2hlZHVsZShzZXNzaW9uKTsKIAl9CiB9CiAKQEAgLTU3Myw3ICs1NzksMTEgQEAKIAlpZiAoc2Vzc2lvbi0+aGlkKSB7CiAJCWlmIChzZXNzaW9uLT5oaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKIAkJCWhpZGlucHV0X2Rpc2Nvbm5lY3Qoc2Vzc2lvbi0+aGlkKTsKKwkJaWYgKHNlc3Npb24tPmhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRFJBVykKKwkJCWhpZHJhd19kaXNjb25uZWN0KHNlc3Npb24tPmhpZCk7CisKIAkJaGlkX2Rlc3Ryb3lfZGV2aWNlKHNlc3Npb24tPmhpZCk7CisJCXNlc3Npb24tPmhpZCA9IE5VTEw7CiAJfQogCiAJLyogV2FrZXVwIHVzZXItc3BhY2UgcG9sbGluZyBmb3Igc29ja2V0IGVycm9ycyAqLwpAQCAtNjAxLDI1ICs2MTEsMjcgQEAKIHsKIAliZGFkZHJfdCAqc3JjID0gJmJ0X3NrKHNlc3Npb24tPmN0cmxfc29jay0+c2spLT5zcmM7CiAJYmRhZGRyX3QgKmRzdCA9ICZidF9zayhzZXNzaW9uLT5jdHJsX3NvY2stPnNrKS0+ZHN0OworCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9IE5VTEw7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7Ci0Jc3RydWN0IGhjaV9jb25uICpjb25uOwogCiAJaGRldiA9IGhjaV9nZXRfcm91dGUoZHN0LCBzcmMpOwogCWlmICghaGRldikKIAkJcmV0dXJuIE5VTEw7CiAKLQljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgQUNMX0xJTkssIGRzdCk7CisJc2Vzc2lvbi0+Y29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2JhKGhkZXYsIEFDTF9MSU5LLCBkc3QpOworCWlmIChzZXNzaW9uLT5jb25uKQorCQlkZXZpY2UgPSAmc2Vzc2lvbi0+Y29ubi0+ZGV2OwogCiAJaGNpX2Rldl9wdXQoaGRldik7CiAKLQlyZXR1cm4gY29ubiA/ICZjb25uLT5kZXYgOiBOVUxMOworCXJldHVybiBkZXZpY2U7CiB9CiAKIHN0YXRpYyBpbnQgaGlkcF9zZXR1cF9pbnB1dChzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uLAogCQkJCXN0cnVjdCBoaWRwX2Nvbm5hZGRfcmVxICpyZXEpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7Ci0JaW50IGk7CisJaW50IGVyciwgaTsKIAogCWlucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFpbnB1dCkKQEAgLTY2Niw3ICs2NzgsMTMgQEAKIAogCWlucHV0LT5ldmVudCA9IGhpZHBfaW5wdXRfZXZlbnQ7CiAKLQlyZXR1cm4gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOworCWlmIChlcnIgPCAwKSB7CisJCWhjaV9jb25uX3B1dF9kZXZpY2Uoc2Vzc2lvbi0+Y29ubik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaGlkcF9vcGVuKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCkBAIC03NDgsMTMgKzc2NiwxMSBAQAogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7CiAJYmRhZGRyX3Qgc3JjLCBkc3Q7Ci0JaW50IHJldDsKKwlpbnQgZXJyOwogCiAJaGlkID0gaGlkX2FsbG9jYXRlX2RldmljZSgpOwotCWlmIChJU19FUlIoaGlkKSkgewotCQlyZXQgPSBQVFJfRVJSKHNlc3Npb24tPmhpZCk7Ci0JCWdvdG8gZXJyOwotCX0KKwlpZiAoSVNfRVJSKGhpZCkpCisJCXJldHVybiBQVFJfRVJSKHNlc3Npb24tPmhpZCk7CiAKIAlzZXNzaW9uLT5oaWQgPSBoaWQ7CiAJc2Vzc2lvbi0+cmVxID0gcmVxOwpAQCAtNzc2LDE2ICs3OTIsMTcgQEAKIAloaWQtPmRldi5wYXJlbnQgPSBoaWRwX2dldF9kZXZpY2Uoc2Vzc2lvbik7CiAJaGlkLT5sbF9kcml2ZXIgPSAmaGlkcF9oaWRfZHJpdmVyOwogCi0JcmV0ID0gaGlkX2FkZF9kZXZpY2UoaGlkKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9oaWQ7CisJZXJyID0gaGlkX2FkZF9kZXZpY2UoaGlkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsZWQ7CiAKIAlyZXR1cm4gMDsKLWVycl9oaWQ6CisKK2ZhaWxlZDoKIAloaWRfZGVzdHJveV9kZXZpY2UoaGlkKTsKIAlzZXNzaW9uLT5oaWQgPSBOVUxMOwotZXJyOgotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgaGlkcF9hZGRfY29ubmVjdGlvbihzdHJ1Y3QgaGlkcF9jb25uYWRkX3JlcSAqcmVxLCBzdHJ1Y3Qgc29ja2V0ICpjdHJsX3NvY2ssIHN0cnVjdCBzb2NrZXQgKmludHJfc29jaykKQEAgLTgzNSwxMyArODUyLDEzIEBACiAJaWYgKHJlcS0+cmRfc2l6ZSA+IDApIHsKIAkJZXJyID0gaGlkcF9zZXR1cF9oaWQoc2Vzc2lvbiwgcmVxKTsKIAkJaWYgKGVyciAmJiBlcnIgIT0gLUVOT0RFVikKLQkJCWdvdG8gZXJyX3NrYjsKKwkJCWdvdG8gcHVyZ2U7CiAJfQogCiAJaWYgKCFzZXNzaW9uLT5oaWQpIHsKIAkJZXJyID0gaGlkcF9zZXR1cF9pbnB1dChzZXNzaW9uLCByZXEpOwogCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyX3NrYjsKKwkJCWdvdG8gcHVyZ2U7CiAJfQogCiAJX19oaWRwX2xpbmtfc2Vzc2lvbihzZXNzaW9uKTsKQEAgLTg2OSwxMyArODg2LDIwIEBACiAKIAlfX2hpZHBfdW5saW5rX3Nlc3Npb24oc2Vzc2lvbik7CiAKLQlpZiAoc2Vzc2lvbi0+aW5wdXQpCisJaWYgKHNlc3Npb24tPmlucHV0KSB7CiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHNlc3Npb24tPmlucHV0KTsKLQlpZiAoc2Vzc2lvbi0+aGlkKQorCQlzZXNzaW9uLT5pbnB1dCA9IE5VTEw7CisJfQorCisJaWYgKHNlc3Npb24tPmhpZCkgewogCQloaWRfZGVzdHJveV9kZXZpY2Uoc2Vzc2lvbi0+aGlkKTsKLWVycl9za2I6CisJCXNlc3Npb24tPmhpZCA9IE5VTEw7CisJfQorCitwdXJnZToKIAlza2JfcXVldWVfcHVyZ2UoJnNlc3Npb24tPmN0cmxfdHJhbnNtaXQpOwogCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+aW50cl90cmFuc21pdCk7CisKIGZhaWxlZDoKIAl1cF93cml0ZSgmaGlkcF9zZXNzaW9uX3NlbSk7CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGlkcC9oaWRwLmggYi9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oCmluZGV4IGU1MDNjODkuLmZhZjNkNzQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGlkcC9oaWRwLmgKKysrIGIvbmV0L2JsdWV0b290aC9oaWRwL2hpZHAuaApAQCAtMTI2LDYgKzEyNiw4IEBACiBzdHJ1Y3QgaGlkcF9zZXNzaW9uIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CisKIAlzdHJ1Y3Qgc29ja2V0ICpjdHJsX3NvY2s7CiAJc3RydWN0IHNvY2tldCAqaW50cl9zb2NrOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKaW5kZXggYmQwYTRjMS4uYjAzMDEyNSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcC5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMTYuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNTAsNyArNTEsOSBAQAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2wyY2FwLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMi4xMyIKKyNkZWZpbmUgVkVSU0lPTiAiMi4xNCIKKworc3RhdGljIGludCBlbmFibGVfZXJ0bSA9IDA7CiAKIHN0YXRpYyB1MzIgbDJjYXBfZmVhdF9tYXNrID0gTDJDQVBfRkVBVF9GSVhFRF9DSEFOOwogc3RhdGljIHU4IGwyY2FwX2ZpeGVkX2NoYW5bOF0gPSB7IDB4MDIsIH07CkBAIC0zMzEsNiArMzM0LDQ4IEBACiAJcmV0dXJuIGhjaV9zZW5kX2FjbChjb25uLT5oY29uLCBza2IsIDApOwogfQogCitzdGF0aWMgaW5saW5lIGludCBsMmNhcF9zZW5kX3NmcmFtZShzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpLCB1MTYgY29udHJvbCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBsMmNhcF9oZHIgKmxoOworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gcGktPmNvbm47CisJaW50IGNvdW50LCBobGVuID0gTDJDQVBfSERSX1NJWkUgKyAyOworCisJaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KQorCQlobGVuICs9IDI7CisKKwlCVF9EQkcoInBpICVwLCBjb250cm9sIDB4JTIuMngiLCBwaSwgY29udHJvbCk7CisKKwljb3VudCA9IG1pbl90KHVuc2lnbmVkIGludCwgY29ubi0+bXR1LCBobGVuKTsKKwljb250cm9sIHw9IEwyQ0FQX0NUUkxfRlJBTUVfVFlQRTsKKworCXNrYiA9IGJ0X3NrYl9hbGxvYyhjb3VudCwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJbGggPSAoc3RydWN0IGwyY2FwX2hkciAqKSBza2JfcHV0KHNrYiwgTDJDQVBfSERSX1NJWkUpOworCWxoLT5sZW4gPSBjcHVfdG9fbGUxNihobGVuIC0gTDJDQVBfSERSX1NJWkUpOworCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihwaS0+ZGNpZCk7CisJcHV0X3VuYWxpZ25lZF9sZTE2KGNvbnRyb2wsIHNrYl9wdXQoc2tiLCAyKSk7CisKKwlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwkJdTE2IGZjcyA9IGNyYzE2KDAsICh1OCAqKWxoLCBjb3VudCAtIDIpOworCQlwdXRfdW5hbGlnbmVkX2xlMTYoZmNzLCBza2JfcHV0KHNrYiwgMikpOworCX0KKworCXJldHVybiBoY2lfc2VuZF9hY2wocGktPmNvbm4tPmhjb24sIHNrYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGwyY2FwX3NlbmRfcnJfb3Jfcm5yKHN0cnVjdCBsMmNhcF9waW5mbyAqcGksIHUxNiBjb250cm9sKQoreworCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fTE9DQUxfQlVTWSkKKwkJY29udHJvbCB8PSBMMkNBUF9TVVBFUl9SQ1ZfTk9UX1JFQURZOworCWVsc2UKKwkJY29udHJvbCB8PSBMMkNBUF9TVVBFUl9SQ1ZfUkVBRFk7CisKKwlyZXR1cm4gbDJjYXBfc2VuZF9zZnJhbWUocGksIGNvbnRyb2wpOworfQorCiBzdGF0aWMgdm9pZCBsMmNhcF9kb19zdGFydChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CkBAIC0zNjQsNiArNDA5LDE2IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IGwyY2FwX2Rpc2Nvbm5fcmVxIHJlcTsKKworCXJlcS5kY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKKwlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLAorCQkJTDJDQVBfRElTQ09OTl9SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKK30KKwogLyogLS0tLSBMMkNBUCBjb25uZWN0aW9ucyAtLS0tICovCiBzdGF0aWMgdm9pZCBsMmNhcF9jb25uX3N0YXJ0KHN0cnVjdCBsMmNhcF9jb25uICpjb25uKQogewpAQCAtNjQ4LDE1ICs3MDMsMTAgQEAKIAljYXNlIEJUX0NPTkZJRzoKIAkJaWYgKHNrLT5za190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSB7CiAJCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKLQkJCXN0cnVjdCBsMmNhcF9kaXNjb25uX3JlcSByZXE7CiAKIAkJCXNrLT5za19zdGF0ZSA9IEJUX0RJU0NPTk47CiAJCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgc2stPnNrX3NuZHRpbWVvKTsKLQotCQkJcmVxLmRjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwotCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLAotCQkJCQlMMkNBUF9ESVNDT05OX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjb25uLCBzayk7CiAJCX0gZWxzZQogCQkJbDJjYXBfY2hhbl9kZWwoc2ssIHJlYXNvbik7CiAJCWJyZWFrOwpAQCAtNzE1LDEyICs3NjUsMTYgQEAKIAogCQlwaS0+aW10dSA9IGwyY2FwX3BpKHBhcmVudCktPmltdHU7CiAJCXBpLT5vbXR1ID0gbDJjYXBfcGkocGFyZW50KS0+b210dTsKKwkJcGktPm1vZGUgPSBsMmNhcF9waShwYXJlbnQpLT5tb2RlOworCQlwaS0+ZmNzICA9IGwyY2FwX3BpKHBhcmVudCktPmZjczsKIAkJcGktPnNlY19sZXZlbCA9IGwyY2FwX3BpKHBhcmVudCktPnNlY19sZXZlbDsKIAkJcGktPnJvbGVfc3dpdGNoID0gbDJjYXBfcGkocGFyZW50KS0+cm9sZV9zd2l0Y2g7CiAJCXBpLT5mb3JjZV9yZWxpYWJsZSA9IGwyY2FwX3BpKHBhcmVudCktPmZvcmNlX3JlbGlhYmxlOwogCX0gZWxzZSB7CiAJCXBpLT5pbXR1ID0gTDJDQVBfREVGQVVMVF9NVFU7CiAJCXBpLT5vbXR1ID0gMDsKKwkJcGktPm1vZGUgPSBMMkNBUF9NT0RFX0JBU0lDOworCQlwaS0+ZmNzICA9IEwyQ0FQX0ZDU19DUkMxNjsKIAkJcGktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKIAkJcGktPnJvbGVfc3dpdGNoID0gMDsKIAkJcGktPmZvcmNlX3JlbGlhYmxlID0gMDsKQEAgLTk1Niw2ICsxMDEwLDE5IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKKwlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+bW9kZSkgeworCWNhc2UgTDJDQVBfTU9ERV9CQVNJQzoKKwkJYnJlYWs7CisJY2FzZSBMMkNBUF9NT0RFX0VSVE06CisJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKKwkJaWYgKGVuYWJsZV9lcnRtKQorCQkJYnJlYWs7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9UU1VQUDsKKwkJZ290byBkb25lOworCX0KKwogCXN3aXRjaCAoc2stPnNrX3N0YXRlKSB7CiAJY2FzZSBCVF9DT05ORUNUOgogCWNhc2UgQlRfQ09OTkVDVDI6CkBAIC0xMDA3LDYgKzEwNzQsMTkgQEAKIAkJZ290byBkb25lOwogCX0KIAorCXN3aXRjaCAobDJjYXBfcGkoc2spLT5tb2RlKSB7CisJY2FzZSBMMkNBUF9NT0RFX0JBU0lDOgorCQlicmVhazsKKwljYXNlIEwyQ0FQX01PREVfRVJUTToKKwljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgorCQlpZiAoZW5hYmxlX2VydG0pCisJCQlicmVhazsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1RTVVBQOworCQlnb3RvIGRvbmU7CisJfQorCiAJaWYgKCFsMmNhcF9waShzayktPnBzbSkgewogCQliZGFkZHJfdCAqc3JjID0gJmJ0X3NrKHNrKS0+c3JjOwogCQl1MTYgcHNtOwpAQCAtMTExNywzOSArMTE5NywyMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbDJjYXBfZG9fc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbikKK3N0YXRpYyB2b2lkIGwyY2FwX21vbml0b3JfdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSAodm9pZCAqKSBhcmc7CisJdTE2IGNvbnRyb2w7CisKKwliaF9sb2NrX3NvY2soc2spOworCWlmIChsMmNhcF9waShzayktPnJldHJ5X2NvdW50ID49IGwyY2FwX3BpKHNrKS0+cmVtb3RlX21heF90eCkgeworCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGwyY2FwX3BpKHNrKS0+Y29ubiwgc2spOworCQlyZXR1cm47CisJfQorCisJbDJjYXBfcGkoc2spLT5yZXRyeV9jb3VudCsrOworCV9fbW9kX21vbml0b3JfdGltZXIoKTsKKworCWNvbnRyb2wgPSBMMkNBUF9DVFJMX1BPTEw7CisJbDJjYXBfc2VuZF9ycl9vcl9ybnIobDJjYXBfcGkoc2spLCBjb250cm9sKTsKKwliaF91bmxvY2tfc29jayhzayk7Cit9CisKK3N0YXRpYyB2b2lkIGwyY2FwX3JldHJhbnNfdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSAodm9pZCAqKSBhcmc7CisJdTE2IGNvbnRyb2w7CisKKwliaF9sb2NrX3NvY2soc2spOworCWwyY2FwX3BpKHNrKS0+cmV0cnlfY291bnQgPSAxOworCV9fbW9kX21vbml0b3JfdGltZXIoKTsKKworCWwyY2FwX3BpKHNrKS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1dBSVRfRjsKKworCWNvbnRyb2wgPSBMMkNBUF9DVFJMX1BPTEw7CisJbDJjYXBfc2VuZF9ycl9vcl9ybnIobDJjYXBfcGkoc2spLCBjb250cm9sKTsKKwliaF91bmxvY2tfc29jayhzayk7Cit9CisKK3N0YXRpYyB2b2lkIGwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJd2hpbGUgKChza2IgPSBza2JfcGVlayhUWF9RVUVVRShzaykpKSkgeworCQlpZiAoYnRfY2Ioc2tiKS0+dHhfc2VxID09IGwyY2FwX3BpKHNrKS0+ZXhwZWN0ZWRfYWNrX3NlcSkKKwkJCWJyZWFrOworCisJCXNrYiA9IHNrYl9kZXF1ZXVlKFRYX1FVRVVFKHNrKSk7CisJCWtmcmVlX3NrYihza2IpOworCisJCWwyY2FwX3BpKHNrKS0+dW5hY2tlZF9mcmFtZXMtLTsKKwl9CisKKwlpZiAoIWwyY2FwX3BpKHNrKS0+dW5hY2tlZF9mcmFtZXMpCisJCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5yZXRyYW5zX3RpbWVyKTsKKworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgbDJjYXBfZG9fc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKKwlpbnQgZXJyOworCisJQlRfREJHKCJzayAlcCwgc2tiICVwIGxlbiAlZCIsIHNrLCBza2IsIHNrYi0+bGVuKTsKKworCWVyciA9IGhjaV9zZW5kX2FjbChwaS0+Y29ubi0+aGNvbiwgc2tiLCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGwyY2FwX3N0cmVhbWluZ19zZW5kKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdHhfc2tiOworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJdTE2IGNvbnRyb2wsIGZjczsKKwlpbnQgZXJyOworCisJd2hpbGUgKChza2IgPSBzay0+c2tfc2VuZF9oZWFkKSkgeworCQl0eF9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKworCQljb250cm9sID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHR4X3NrYi0+ZGF0YSArIEwyQ0FQX0hEUl9TSVpFKTsKKwkJY29udHJvbCB8PSBwaS0+bmV4dF90eF9zZXEgPDwgTDJDQVBfQ1RSTF9UWFNFUV9TSElGVDsKKwkJcHV0X3VuYWxpZ25lZF9sZTE2KGNvbnRyb2wsIHR4X3NrYi0+ZGF0YSArIEwyQ0FQX0hEUl9TSVpFKTsKKworCQlpZiAobDJjYXBfcGkoc2spLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KSB7CisJCQlmY3MgPSBjcmMxNigwLCAodTggKil0eF9za2ItPmRhdGEsIHR4X3NrYi0+bGVuIC0gMik7CisJCQlwdXRfdW5hbGlnbmVkX2xlMTYoZmNzLCB0eF9za2ItPmRhdGEgKyB0eF9za2ItPmxlbiAtIDIpOworCQl9CisKKwkJZXJyID0gbDJjYXBfZG9fc2VuZChzaywgdHhfc2tiKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlwaS0+bmV4dF90eF9zZXEgPSAocGktPm5leHRfdHhfc2VxICsgMSkgJSA2NDsKKworCQlpZiAoc2tiX3F1ZXVlX2lzX2xhc3QoVFhfUVVFVUUoc2spLCBza2IpKQorCQkJc2stPnNrX3NlbmRfaGVhZCA9IE5VTEw7CisJCWVsc2UKKwkJCXNrLT5za19zZW5kX2hlYWQgPSBza2JfcXVldWVfbmV4dChUWF9RVUVVRShzayksIHNrYik7CisKKwkJc2tiID0gc2tiX2RlcXVldWUoVFhfUVVFVUUoc2spKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGwyY2FwX3JldHJhbnNtaXRfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCB1OCB0eF9zZXEpCit7CisJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdHhfc2tiOworCXUxNiBjb250cm9sLCBmY3M7CisJaW50IGVycjsKKworCXNrYiA9IHNrYl9wZWVrKFRYX1FVRVVFKHNrKSk7CisJZG8geworCQlpZiAoYnRfY2Ioc2tiKS0+dHhfc2VxICE9IHR4X3NlcSkgeworCQkJaWYgKHNrYl9xdWV1ZV9pc19sYXN0KFRYX1FVRVVFKHNrKSwgc2tiKSkKKwkJCQlicmVhazsKKwkJCXNrYiA9IHNrYl9xdWV1ZV9uZXh0KFRYX1FVRVVFKHNrKSwgc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHBpLT5yZW1vdGVfbWF4X3R4ICYmCisJCQkJYnRfY2Ioc2tiKS0+cmV0cmllcyA9PSBwaS0+cmVtb3RlX21heF90eCkgeworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOworCQkJYnJlYWs7CisJCX0KKworCQl0eF9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJYnRfY2Ioc2tiKS0+cmV0cmllcysrOworCQljb250cm9sID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHR4X3NrYi0+ZGF0YSArIEwyQ0FQX0hEUl9TSVpFKTsKKwkJY29udHJvbCB8PSAocGktPnJlcV9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQpCisJCQkJfCAodHhfc2VxIDw8IEwyQ0FQX0NUUkxfVFhTRVFfU0hJRlQpOworCQlwdXRfdW5hbGlnbmVkX2xlMTYoY29udHJvbCwgdHhfc2tiLT5kYXRhICsgTDJDQVBfSERSX1NJWkUpOworCisJCWlmIChsMmNhcF9waShzayktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwkJCWZjcyA9IGNyYzE2KDAsICh1OCAqKXR4X3NrYi0+ZGF0YSwgdHhfc2tiLT5sZW4gLSAyKTsKKwkJCXB1dF91bmFsaWduZWRfbGUxNihmY3MsIHR4X3NrYi0+ZGF0YSArIHR4X3NrYi0+bGVuIC0gMik7CisJCX0KKworCQllcnIgPSBsMmNhcF9kb19zZW5kKHNrLCB0eF9za2IpOworCQlpZiAoZXJyIDwgMCkgeworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlicmVhazsKKwl9IHdoaWxlKDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGwyY2FwX2VydG1fc2VuZChzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnR4X3NrYjsKKwlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOworCXUxNiBjb250cm9sLCBmY3M7CisJaW50IGVycjsKKworCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fV0FJVF9GKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgoc2tiID0gc2stPnNrX3NlbmRfaGVhZCkgJiYgKCFsMmNhcF90eF93aW5kb3dfZnVsbChzaykpCisJCQkmJiAhKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9SRU1PVEVfQlVTWSkpIHsKKwkJdHhfc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisKKwkJaWYgKHBpLT5yZW1vdGVfbWF4X3R4ICYmCisJCQkJYnRfY2Ioc2tiKS0+cmV0cmllcyA9PSBwaS0+cmVtb3RlX21heF90eCkgeworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOworCQkJYnJlYWs7CisJCX0KKworCQlidF9jYihza2IpLT5yZXRyaWVzKys7CisKKwkJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNih0eF9za2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7CisJCWNvbnRyb2wgfD0gKHBpLT5yZXFfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUKQorCQkJCXwgKHBpLT5uZXh0X3R4X3NlcSA8PCBMMkNBUF9DVFJMX1RYU0VRX1NISUZUKTsKKwkJcHV0X3VuYWxpZ25lZF9sZTE2KGNvbnRyb2wsIHR4X3NrYi0+ZGF0YSArIEwyQ0FQX0hEUl9TSVpFKTsKKworCisJCWlmIChsMmNhcF9waShzayktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwkJCWZjcyA9IGNyYzE2KDAsICh1OCAqKXNrYi0+ZGF0YSwgdHhfc2tiLT5sZW4gLSAyKTsKKwkJCXB1dF91bmFsaWduZWRfbGUxNihmY3MsIHNrYi0+ZGF0YSArIHR4X3NrYi0+bGVuIC0gMik7CisJCX0KKworCQllcnIgPSBsMmNhcF9kb19zZW5kKHNrLCB0eF9za2IpOworCQlpZiAoZXJyIDwgMCkgeworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlfX21vZF9yZXRyYW5zX3RpbWVyKCk7CisKKwkJYnRfY2Ioc2tiKS0+dHhfc2VxID0gcGktPm5leHRfdHhfc2VxOworCQlwaS0+bmV4dF90eF9zZXEgPSAocGktPm5leHRfdHhfc2VxICsgMSkgJSA2NDsKKworCQlwaS0+dW5hY2tlZF9mcmFtZXMrKzsKKworCQlpZiAoc2tiX3F1ZXVlX2lzX2xhc3QoVFhfUVVFVUUoc2spLCBza2IpKQorCQkJc2stPnNrX3NlbmRfaGVhZCA9IE5VTEw7CisJCWVsc2UKKwkJCXNrLT5za19zZW5kX2hlYWQgPSBza2JfcXVldWVfbmV4dChUWF9RVUVVRShzayksIHNrYik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGwyY2FwX3NrYnVmZl9mcm9taW92ZWMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sIGludCBjb3VudCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqKmZyYWc7Ci0JaW50IGVyciwgaGxlbiwgY291bnQsIHNlbnQgPSAwOwotCXN0cnVjdCBsMmNhcF9oZHIgKmxoOwotCi0JQlRfREJHKCJzayAlcCBsZW4gJWQiLCBzaywgbGVuKTsKLQotCS8qIEZpcnN0IGZyYWdtZW50ICh3aXRoIEwyQ0FQIGhlYWRlcikgKi8KLQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19ER1JBTSkKLQkJaGxlbiA9IEwyQ0FQX0hEUl9TSVpFICsgMjsKLQllbHNlCi0JCWhsZW4gPSBMMkNBUF9IRFJfU0laRTsKLQotCWNvdW50ID0gbWluX3QodW5zaWduZWQgaW50LCAoY29ubi0+bXR1IC0gaGxlbiksIGxlbik7Ci0KLQlza2IgPSBidF9za2Jfc2VuZF9hbGxvYyhzaywgaGxlbiArIGNvdW50LAotCQkJbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOwotCWlmICghc2tiKQotCQlyZXR1cm4gZXJyOwotCi0JLyogQ3JlYXRlIEwyQ0FQIGhlYWRlciAqLwotCWxoID0gKHN0cnVjdCBsMmNhcF9oZHIgKikgc2tiX3B1dChza2IsIEwyQ0FQX0hEUl9TSVpFKTsKLQlsaC0+Y2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKLQlsaC0+bGVuID0gY3B1X3RvX2xlMTYobGVuICsgKGhsZW4gLSBMMkNBUF9IRFJfU0laRSkpOwotCi0JaWYgKHNrLT5za190eXBlID09IFNPQ0tfREdSQU0pCi0JCXB1dF91bmFsaWduZWQobDJjYXBfcGkoc2spLT5wc20sIChfX2xlMTYgKikgc2tiX3B1dChza2IsIDIpKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKmZyYWc7CisJaW50IGVyciwgc2VudCA9IDA7CiAKIAlpZiAobWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgY291bnQpLCBtc2ctPm1zZ19pb3YsIGNvdW50KSkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGZhaWw7CisJCXJldHVybiAtRUZBVUxUOwogCX0KIAogCXNlbnQgKz0gY291bnQ7CkBAIC0xMTYyLDMzICsxNDIyLDE3MyBAQAogCiAJCSpmcmFnID0gYnRfc2tiX3NlbmRfYWxsb2Moc2ssIGNvdW50LCBtc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCwgJmVycik7CiAJCWlmICghKmZyYWcpCi0JCQlnb3RvIGZhaWw7Ci0KLQkJaWYgKG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dCgqZnJhZywgY291bnQpLCBtc2ctPm1zZ19pb3YsIGNvdW50KSkgewotCQkJZXJyID0gLUVGQVVMVDsKLQkJCWdvdG8gZmFpbDsKLQkJfQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChtZW1jcHlfZnJvbWlvdmVjKHNrYl9wdXQoKmZyYWcsIGNvdW50KSwgbXNnLT5tc2dfaW92LCBjb3VudCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlzZW50ICs9IGNvdW50OwogCQlsZW4gIC09IGNvdW50OwogCiAJCWZyYWcgPSAmKCpmcmFnKS0+bmV4dDsKIAl9Ci0JZXJyID0gaGNpX3NlbmRfYWNsKGNvbm4tPmhjb24sIHNrYiwgMCk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZmFpbDsKIAogCXJldHVybiBzZW50OworfQogCi1mYWlsOgotCWtmcmVlX3NrYihza2IpOwotCXJldHVybiBlcnI7CitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2NyZWF0ZV9jb25ubGVzc19wZHUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgZXJyLCBjb3VudCwgaGxlbiA9IEwyQ0FQX0hEUl9TSVpFICsgMjsKKwlzdHJ1Y3QgbDJjYXBfaGRyICpsaDsKKworCUJUX0RCRygic2sgJXAgbGVuICVkIiwgc2ssIChpbnQpbGVuKTsKKworCWNvdW50ID0gbWluX3QodW5zaWduZWQgaW50LCAoY29ubi0+bXR1IC0gaGxlbiksIGxlbik7CisJc2tiID0gYnRfc2tiX3NlbmRfYWxsb2Moc2ssIGNvdW50ICsgaGxlbiwKKwkJCW1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlULCAmZXJyKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwkvKiBDcmVhdGUgTDJDQVAgaGVhZGVyICovCisJbGggPSAoc3RydWN0IGwyY2FwX2hkciAqKSBza2JfcHV0KHNrYiwgTDJDQVBfSERSX1NJWkUpOworCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCWxoLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4gKyAoaGxlbiAtIEwyQ0FQX0hEUl9TSVpFKSk7CisJcHV0X3VuYWxpZ25lZF9sZTE2KGwyY2FwX3BpKHNrKS0+cHNtLCBza2JfcHV0KHNrYiwgMikpOworCisJZXJyID0gbDJjYXBfc2tidWZmX2Zyb21pb3ZlYyhzaywgbXNnLCBsZW4sIGNvdW50LCBza2IpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwl9CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICpsMmNhcF9jcmVhdGVfYmFzaWNfcGR1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGVyciwgY291bnQsIGhsZW4gPSBMMkNBUF9IRFJfU0laRTsKKwlzdHJ1Y3QgbDJjYXBfaGRyICpsaDsKKworCUJUX0RCRygic2sgJXAgbGVuICVkIiwgc2ssIChpbnQpbGVuKTsKKworCWNvdW50ID0gbWluX3QodW5zaWduZWQgaW50LCAoY29ubi0+bXR1IC0gaGxlbiksIGxlbik7CisJc2tiID0gYnRfc2tiX3NlbmRfYWxsb2Moc2ssIGNvdW50ICsgaGxlbiwKKwkJCW1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlULCAmZXJyKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwkvKiBDcmVhdGUgTDJDQVAgaGVhZGVyICovCisJbGggPSAoc3RydWN0IGwyY2FwX2hkciAqKSBza2JfcHV0KHNrYiwgTDJDQVBfSERSX1NJWkUpOworCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCWxoLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4gKyAoaGxlbiAtIEwyQ0FQX0hEUl9TSVpFKSk7CisKKwllcnIgPSBsMmNhcF9za2J1ZmZfZnJvbWlvdmVjKHNrLCBtc2csIGxlbiwgY291bnQsIHNrYik7CisJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2NyZWF0ZV9pZnJhbWVfcGR1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCB1MTYgY29udHJvbCwgdTE2IHNkdWxlbikKK3sKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBlcnIsIGNvdW50LCBobGVuID0gTDJDQVBfSERSX1NJWkUgKyAyOworCXN0cnVjdCBsMmNhcF9oZHIgKmxoOworCisJQlRfREJHKCJzayAlcCBsZW4gJWQiLCBzaywgKGludClsZW4pOworCisJaWYgKHNkdWxlbikKKwkJaGxlbiArPSAyOworCisJaWYgKGwyY2FwX3BpKHNrKS0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKKwkJaGxlbiArPSAyOworCisJY291bnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIChjb25uLT5tdHUgLSBobGVuKSwgbGVuKTsKKwlza2IgPSBidF9za2Jfc2VuZF9hbGxvYyhzaywgY291bnQgKyBobGVuLAorCQkJbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCS8qIENyZWF0ZSBMMkNBUCBoZWFkZXIgKi8KKwlsaCA9IChzdHJ1Y3QgbDJjYXBfaGRyICopIHNrYl9wdXQoc2tiLCBMMkNBUF9IRFJfU0laRSk7CisJbGgtPmNpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJbGgtPmxlbiA9IGNwdV90b19sZTE2KGxlbiArIChobGVuIC0gTDJDQVBfSERSX1NJWkUpKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoY29udHJvbCwgc2tiX3B1dChza2IsIDIpKTsKKwlpZiAoc2R1bGVuKQorCQlwdXRfdW5hbGlnbmVkX2xlMTYoc2R1bGVuLCBza2JfcHV0KHNrYiwgMikpOworCisJZXJyID0gbDJjYXBfc2tidWZmX2Zyb21pb3ZlYyhzaywgbXNnLCBsZW4sIGNvdW50LCBza2IpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwl9CisKKwlpZiAobDJjYXBfcGkoc2spLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KQorCQlwdXRfdW5hbGlnbmVkX2xlMTYoMCwgc2tiX3B1dChza2IsIDIpKTsKKworCWJ0X2NiKHNrYiktPnJldHJpZXMgPSAwOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGwyY2FwX3Nhcl9zZWdtZW50X3NkdShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBzYXJfcXVldWU7CisJdTE2IGNvbnRyb2w7CisJc2l6ZV90IHNpemUgPSAwOworCisJX19za2JfcXVldWVfaGVhZF9pbml0KCZzYXJfcXVldWUpOworCWNvbnRyb2wgPSBMMkNBUF9TRFVfU1RBUlQ7CisJc2tiID0gbDJjYXBfY3JlYXRlX2lmcmFtZV9wZHUoc2ssIG1zZywgcGktPm1heF9wZHVfc2l6ZSwgY29udHJvbCwgbGVuKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlfX3NrYl9xdWV1ZV90YWlsKCZzYXJfcXVldWUsIHNrYik7CisJbGVuIC09IHBpLT5tYXhfcGR1X3NpemU7CisJc2l6ZSArPXBpLT5tYXhfcGR1X3NpemU7CisJY29udHJvbCA9IDA7CisKKwl3aGlsZSAobGVuID4gMCkgeworCQlzaXplX3QgYnVmbGVuOworCisJCWlmIChsZW4gPiBwaS0+bWF4X3BkdV9zaXplKSB7CisJCQljb250cm9sIHw9IEwyQ0FQX1NEVV9DT05USU5VRTsKKwkJCWJ1ZmxlbiA9IHBpLT5tYXhfcGR1X3NpemU7CisJCX0gZWxzZSB7CisJCQljb250cm9sIHw9IEwyQ0FQX1NEVV9FTkQ7CisJCQlidWZsZW4gPSBsZW47CisJCX0KKworCQlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShzaywgbXNnLCBidWZsZW4sIGNvbnRyb2wsIDApOworCQlpZiAoSVNfRVJSKHNrYikpIHsKKwkJCXNrYl9xdWV1ZV9wdXJnZSgmc2FyX3F1ZXVlKTsKKwkJCXJldHVybiBQVFJfRVJSKHNrYik7CisJCX0KKworCQlfX3NrYl9xdWV1ZV90YWlsKCZzYXJfcXVldWUsIHNrYik7CisJCWxlbiAtPSBidWZsZW47CisJCXNpemUgKz0gYnVmbGVuOworCQljb250cm9sID0gMDsKKwl9CisJc2tiX3F1ZXVlX3NwbGljZV90YWlsKCZzYXJfcXVldWUsIFRYX1FVRVVFKHNrKSk7CisJaWYgKHNrLT5za19zZW5kX2hlYWQgPT0gTlVMTCkKKwkJc2stPnNrX3NlbmRfaGVhZCA9IHNhcl9xdWV1ZS5uZXh0OworCisJcmV0dXJuIHNpemU7CiB9CiAKIHN0YXRpYyBpbnQgbDJjYXBfc29ja19zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCWludCBlcnIgPSAwOworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgY29udHJvbDsKKwlpbnQgZXJyOwogCiAJQlRfREJHKCJzb2NrICVwLCBzayAlcCIsIHNvY2ssIHNrKTsKIApAQCAtMTIwMCwxNiArMTYwMCw3MyBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAkvKiBDaGVjayBvdXRnb2luZyBNVFUgKi8KLQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19SQVcgJiYgbGVuID4gbDJjYXBfcGkoc2spLT5vbXR1KQorCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCAmJiBwaS0+bW9kZSA9PSBMMkNBUF9NT0RFX0JBU0lDCisJCQkmJiBsZW4gPiBwaS0+b210dSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlsb2NrX3NvY2soc2spOwogCi0JaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQpCi0JCWVyciA9IGwyY2FwX2RvX3NlbmQoc2ssIG1zZywgbGVuKTsKLQllbHNlCisJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpIHsKIAkJZXJyID0gLUVOT1RDT05OOworCQlnb3RvIGRvbmU7CisJfQogCisJLyogQ29ubmVjdGlvbmxlc3MgY2hhbm5lbCAqLworCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNKSB7CisJCXNrYiA9IGwyY2FwX2NyZWF0ZV9jb25ubGVzc19wZHUoc2ssIG1zZywgbGVuKTsKKwkJZXJyID0gbDJjYXBfZG9fc2VuZChzaywgc2tiKTsKKwkJZ290byBkb25lOworCX0KKworCXN3aXRjaCAocGktPm1vZGUpIHsKKwljYXNlIEwyQ0FQX01PREVfQkFTSUM6CisJCS8qIENyZWF0ZSBhIGJhc2ljIFBEVSAqLworCQlza2IgPSBsMmNhcF9jcmVhdGVfYmFzaWNfcGR1KHNrLCBtc2csIGxlbik7CisJCWlmIChJU19FUlIoc2tiKSkgeworCQkJZXJyID0gUFRSX0VSUihza2IpOworCQkJZ290byBkb25lOworCQl9CisKKwkJZXJyID0gbDJjYXBfZG9fc2VuZChzaywgc2tiKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBsZW47CisJCWJyZWFrOworCisJY2FzZSBMMkNBUF9NT0RFX0VSVE06CisJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKKwkJLyogRW50aXJlIFNEVSBmaXRzIGludG8gb25lIFBEVSAqLworCQlpZiAobGVuIDw9IHBpLT5tYXhfcGR1X3NpemUpIHsKKwkJCWNvbnRyb2wgPSBMMkNBUF9TRFVfVU5TRUdNRU5URUQ7CisJCQlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShzaywgbXNnLCBsZW4sIGNvbnRyb2wsIDApOworCQkJaWYgKElTX0VSUihza2IpKSB7CisJCQkJZXJyID0gUFRSX0VSUihza2IpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCV9fc2tiX3F1ZXVlX3RhaWwoVFhfUVVFVUUoc2spLCBza2IpOworCQkJaWYgKHNrLT5za19zZW5kX2hlYWQgPT0gTlVMTCkKKwkJCQlzay0+c2tfc2VuZF9oZWFkID0gc2tiOworCQl9IGVsc2UgeworCQkvKiBTZWdtZW50IFNEVSBpbnRvIG11bHRpcGxlcyBQRFVzICovCisJCQllcnIgPSBsMmNhcF9zYXJfc2VnbWVudF9zZHUoc2ssIG1zZywgbGVuKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWlmIChwaS0+bW9kZSA9PSBMMkNBUF9NT0RFX1NUUkVBTUlORykKKwkJCWVyciA9IGwyY2FwX3N0cmVhbWluZ19zZW5kKHNrKTsKKwkJZWxzZQorCQkJZXJyID0gbDJjYXBfZXJ0bV9zZW5kKHNrKTsKKworCQlpZiAoIWVycikKKwkJCWVyciA9IGxlbjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVF9EQkcoImJhZCBzdGF0ZSAlMS4xeCIsIHBpLT5tb2RlKTsKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKK2RvbmU6CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTI1Nyw3ICsxNzE0LDggQEAKIAkJb3B0cy5pbXR1ICAgICA9IGwyY2FwX3BpKHNrKS0+aW10dTsKIAkJb3B0cy5vbXR1ICAgICA9IGwyY2FwX3BpKHNrKS0+b210dTsKIAkJb3B0cy5mbHVzaF90byA9IGwyY2FwX3BpKHNrKS0+Zmx1c2hfdG87Ci0JCW9wdHMubW9kZSAgICAgPSBMMkNBUF9NT0RFX0JBU0lDOworCQlvcHRzLm1vZGUgICAgID0gbDJjYXBfcGkoc2spLT5tb2RlOworCQlvcHRzLmZjcyAgICAgID0gbDJjYXBfcGkoc2spLT5mY3M7CiAKIAkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2Yob3B0cyksIG9wdGxlbik7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigoY2hhciAqKSAmb3B0cywgb3B0dmFsLCBsZW4pKSB7CkBAIC0xMjY1LDggKzE3MjMsMTAgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJbDJjYXBfcGkoc2spLT5pbXR1ICA9IG9wdHMuaW10dTsKLQkJbDJjYXBfcGkoc2spLT5vbXR1ICA9IG9wdHMub210dTsKKwkJbDJjYXBfcGkoc2spLT5pbXR1ID0gb3B0cy5pbXR1OworCQlsMmNhcF9waShzayktPm9tdHUgPSBvcHRzLm9tdHU7CisJCWwyY2FwX3BpKHNrKS0+bW9kZSA9IG9wdHMubW9kZTsKKwkJbDJjYXBfcGkoc2spLT5mY3MgID0gb3B0cy5mY3M7CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9MTToKQEAgLTEzNzksNyArMTgzOSw4IEBACiAJCW9wdHMuaW10dSAgICAgPSBsMmNhcF9waShzayktPmltdHU7CiAJCW9wdHMub210dSAgICAgPSBsMmNhcF9waShzayktPm9tdHU7CiAJCW9wdHMuZmx1c2hfdG8gPSBsMmNhcF9waShzayktPmZsdXNoX3RvOwotCQlvcHRzLm1vZGUgICAgID0gTDJDQVBfTU9ERV9CQVNJQzsKKwkJb3B0cy5tb2RlICAgICA9IGwyY2FwX3BpKHNrKS0+bW9kZTsKKwkJb3B0cy5mY3MgICAgICA9IGwyY2FwX3BpKHNrKS0+ZmNzOwogCiAJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2Yob3B0cykpOwogCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJm9wdHMsIGxlbikpCkBAIC0xNzA4LDE2ICsyMTY5LDEwOCBAQAogCSpwdHIgKz0gTDJDQVBfQ09ORl9PUFRfU0laRSArIGxlbjsKIH0KIAorc3RhdGljIGludCBsMmNhcF9tb2RlX3N1cHBvcnRlZChfX3U4IG1vZGUsIF9fdTMyIGZlYXRfbWFzaykKK3sKKwl1MzIgbG9jYWxfZmVhdF9tYXNrID0gbDJjYXBfZmVhdF9tYXNrOworCWlmIChlbmFibGVfZXJ0bSkKKwkJbG9jYWxfZmVhdF9tYXNrIHw9IEwyQ0FQX0ZFQVRfRVJUTSB8IEwyQ0FQX0ZFQVRfU1RSRUFNSU5HOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBMMkNBUF9NT0RFX0VSVE06CisJCXJldHVybiBMMkNBUF9GRUFUX0VSVE0gJiBmZWF0X21hc2sgJiBsb2NhbF9mZWF0X21hc2s7CisJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKKwkJcmV0dXJuIEwyQ0FQX0ZFQVRfU1RSRUFNSU5HICYgZmVhdF9tYXNrICYgbG9jYWxfZmVhdF9tYXNrOworCWRlZmF1bHQ6CisJCXJldHVybiAweDAwOworCX0KK30KKworc3RhdGljIGlubGluZSBfX3U4IGwyY2FwX3NlbGVjdF9tb2RlKF9fdTggbW9kZSwgX191MTYgcmVtb3RlX2ZlYXRfbWFzaykKK3sKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgorCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgorCQlpZiAobDJjYXBfbW9kZV9zdXBwb3J0ZWQobW9kZSwgcmVtb3RlX2ZlYXRfbWFzaykpCisJCQlyZXR1cm4gbW9kZTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIEwyQ0FQX01PREVfQkFTSUM7CisJfQorfQorCiBzdGF0aWMgaW50IGwyY2FwX2J1aWxkX2NvbmZfcmVxKHN0cnVjdCBzb2NrICpzaywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXN0cnVjdCBsMmNhcF9jb25mX3JlcSAqcmVxID0gZGF0YTsKKwlzdHJ1Y3QgbDJjYXBfY29uZl9yZmMgcmZjID0geyAubW9kZSA9IEwyQ0FQX01PREVfRVJUTSB9OwogCXZvaWQgKnB0ciA9IHJlcS0+ZGF0YTsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CiAKLQlpZiAocGktPmltdHUgIT0gTDJDQVBfREVGQVVMVF9NVFUpCi0JCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX01UVSwgMiwgcGktPmltdHUpOworCWlmIChwaS0+bnVtX2NvbmZfcmVxIHx8IHBpLT5udW1fY29uZl9yc3ApCisJCWdvdG8gZG9uZTsKKworCXN3aXRjaCAocGktPm1vZGUpIHsKKwljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgorCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgorCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1NUQVRFMl9ERVZJQ0U7CisJCWlmICghbDJjYXBfbW9kZV9zdXBwb3J0ZWQocGktPm1vZGUsIHBpLT5jb25uLT5mZWF0X21hc2spKQorCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwaS0+bW9kZSA9IGwyY2FwX3NlbGVjdF9tb2RlKHJmYy5tb2RlLCBwaS0+Y29ubi0+ZmVhdF9tYXNrKTsKKwkJYnJlYWs7CisJfQorCitkb25lOgorCXN3aXRjaCAocGktPm1vZGUpIHsKKwljYXNlIEwyQ0FQX01PREVfQkFTSUM6CisJCWlmIChwaS0+aW10dSAhPSBMMkNBUF9ERUZBVUxUX01UVSkKKwkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX01UVSwgMiwgcGktPmltdHUpOworCQlicmVhazsKKworCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgorCQlyZmMubW9kZSAgICAgICAgICAgID0gTDJDQVBfTU9ERV9FUlRNOworCQlyZmMudHh3aW5fc2l6ZSAgICAgID0gTDJDQVBfREVGQVVMVF9UWF9XSU5ET1c7CisJCXJmYy5tYXhfdHJhbnNtaXQgICAgPSBMMkNBUF9ERUZBVUxUX01BWF9UWDsKKwkJcmZjLnJldHJhbnNfdGltZW91dCA9IDA7CisJCXJmYy5tb25pdG9yX3RpbWVvdXQgPSAwOworCQlyZmMubWF4X3BkdV9zaXplICAgID0gY3B1X3RvX2xlMTYoTDJDQVBfREVGQVVMVF9NQVhfUERVX1NJWkUpOworCisJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKKwkJCQkJc2l6ZW9mKHJmYyksICh1bnNpZ25lZCBsb25nKSAmcmZjKTsKKworCQlpZiAoIShwaS0+Y29ubi0+ZmVhdF9tYXNrICYgTDJDQVBfRkVBVF9GQ1MpKQorCQkJYnJlYWs7CisKKwkJaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX05PTkUgfHwKKwkJCQlwaS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfTk9fRkNTX1JFQ1YpIHsKKwkJCXBpLT5mY3MgPSBMMkNBUF9GQ1NfTk9ORTsKKwkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX0ZDUywgMSwgcGktPmZjcyk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgorCQlyZmMubW9kZSAgICAgICAgICAgID0gTDJDQVBfTU9ERV9TVFJFQU1JTkc7CisJCXJmYy50eHdpbl9zaXplICAgICAgPSAwOworCQlyZmMubWF4X3RyYW5zbWl0ICAgID0gMDsKKwkJcmZjLnJldHJhbnNfdGltZW91dCA9IDA7CisJCXJmYy5tb25pdG9yX3RpbWVvdXQgPSAwOworCQlyZmMubWF4X3BkdV9zaXplICAgID0gY3B1X3RvX2xlMTYoTDJDQVBfREVGQVVMVF9NQVhfUERVX1NJWkUpOworCisJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKKwkJCQkJc2l6ZW9mKHJmYyksICh1bnNpZ25lZCBsb25nKSAmcmZjKTsKKworCQlpZiAoIShwaS0+Y29ubi0+ZmVhdF9tYXNrICYgTDJDQVBfRkVBVF9GQ1MpKQorCQkJYnJlYWs7CisKKwkJaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX05PTkUgfHwKKwkJCQlwaS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfTk9fRkNTX1JFQ1YpIHsKKwkJCXBpLT5mY3MgPSBMMkNBUF9GQ1NfTk9ORTsKKwkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX0ZDUywgMSwgcGktPmZjcyk7CisJCX0KKwkJYnJlYWs7CisJfQogCiAJLyogRklYTUU6IE5lZWQgYWN0dWFsIHZhbHVlIG9mIHRoZSBmbHVzaCB0aW1lb3V0ICovCiAJLy9pZiAoZmx1c2hfdG8gIT0gTDJDQVBfREVGQVVMVF9GTFVTSF9UTykKQEAgLTE3NjcsNiArMjMyMCwxMiBAQAogCQkJCW1lbWNweSgmcmZjLCAodm9pZCAqKSB2YWwsIG9sZW4pOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBMMkNBUF9DT05GX0ZDUzoKKwkJCWlmICh2YWwgPT0gTDJDQVBfRkNTX05PTkUpCisJCQkJcGktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9OT19GQ1NfUkVDVjsKKworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWlmIChoaW50KQogCQkJCWJyZWFrOwpAQCAtMTc3NywzMCArMjMzNiw4MyBAQAogCQl9CiAJfQogCisJaWYgKHBpLT5udW1fY29uZl9yc3AgfHwgcGktPm51bV9jb25mX3JlcSkKKwkJZ290byBkb25lOworCisJc3dpdGNoIChwaS0+bW9kZSkgeworCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6CisJY2FzZSBMMkNBUF9NT0RFX0VSVE06CisJCXBpLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRTsKKwkJaWYgKCFsMmNhcF9tb2RlX3N1cHBvcnRlZChwaS0+bW9kZSwgcGktPmNvbm4tPmZlYXRfbWFzaykpCisJCQlyZXR1cm4gLUVDT05OUkVGVVNFRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGktPm1vZGUgPSBsMmNhcF9zZWxlY3RfbW9kZShyZmMubW9kZSwgcGktPmNvbm4tPmZlYXRfbWFzayk7CisJCWJyZWFrOworCX0KKworZG9uZToKKwlpZiAocGktPm1vZGUgIT0gcmZjLm1vZGUpIHsKKwkJcmVzdWx0ID0gTDJDQVBfQ09ORl9VTkFDQ0VQVDsKKwkJcmZjLm1vZGUgPSBwaS0+bW9kZTsKKworCQlpZiAocGktPm51bV9jb25mX3JzcCA9PSAxKQorCQkJcmV0dXJuIC1FQ09OTlJFRlVTRUQ7CisKKwkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfUkZDLAorCQkJCQlzaXplb2YocmZjKSwgKHVuc2lnbmVkIGxvbmcpICZyZmMpOworCX0KKworCiAJaWYgKHJlc3VsdCA9PSBMMkNBUF9DT05GX1NVQ0NFU1MpIHsKIAkJLyogQ29uZmlndXJlIG91dHB1dCBvcHRpb25zIGFuZCBsZXQgdGhlIG90aGVyIHNpZGUga25vdwogCQkgKiB3aGljaCBvbmVzIHdlIGRvbid0IGxpa2UuICovCiAKLQkJaWYgKHJmYy5tb2RlID09IEwyQ0FQX01PREVfQkFTSUMpIHsKLQkJCWlmIChtdHUgPCBwaS0+b210dSkKLQkJCQlyZXN1bHQgPSBMMkNBUF9DT05GX1VOQUNDRVBUOwotCQkJZWxzZSB7Ci0JCQkJcGktPm9tdHUgPSBtdHU7Ci0JCQkJcGktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9PVVRQVVRfRE9ORTsKLQkJCX0KKwkJaWYgKG10dSA8IEwyQ0FQX0RFRkFVTFRfTUlOX01UVSkKKwkJCXJlc3VsdCA9IEwyQ0FQX0NPTkZfVU5BQ0NFUFQ7CisJCWVsc2UgeworCQkJcGktPm9tdHUgPSBtdHU7CisJCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX01UVV9ET05FOworCQl9CisJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX01UVSwgMiwgcGktPm9tdHUpOwogCi0JCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9NVFUsIDIsIHBpLT5vbXR1KTsKLQkJfSBlbHNlIHsKKwkJc3dpdGNoIChyZmMubW9kZSkgeworCQljYXNlIEwyQ0FQX01PREVfQkFTSUM6CisJCQlwaS0+ZmNzID0gTDJDQVBfRkNTX05PTkU7CisJCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX01PREVfRE9ORTsKKwkJCWJyZWFrOworCisJCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgorCQkJcGktPnJlbW90ZV90eF93aW4gPSByZmMudHh3aW5fc2l6ZTsKKwkJCXBpLT5yZW1vdGVfbWF4X3R4ID0gcmZjLm1heF90cmFuc21pdDsKKwkJCXBpLT5tYXhfcGR1X3NpemUgPSByZmMubWF4X3BkdV9zaXplOworCisJCQlyZmMucmV0cmFuc190aW1lb3V0ID0gTDJDQVBfREVGQVVMVF9SRVRSQU5TX1RPOworCQkJcmZjLm1vbml0b3JfdGltZW91dCA9IEwyQ0FQX0RFRkFVTFRfTU9OSVRPUl9UTzsKKworCQkJcGktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9NT0RFX0RPTkU7CisJCQlicmVhazsKKworCQljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgorCQkJcGktPnJlbW90ZV90eF93aW4gPSByZmMudHh3aW5fc2l6ZTsKKwkJCXBpLT5tYXhfcGR1X3NpemUgPSByZmMubWF4X3BkdV9zaXplOworCisJCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX01PREVfRE9ORTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CiAJCQlyZXN1bHQgPSBMMkNBUF9DT05GX1VOQUNDRVBUOwogCiAJCQltZW1zZXQoJnJmYywgMCwgc2l6ZW9mKHJmYykpOwotCQkJcmZjLm1vZGUgPSBMMkNBUF9NT0RFX0JBU0lDOwotCi0JCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9SRkMsCi0JCQkJCQlzaXplb2YocmZjKSwgKHVuc2lnbmVkIGxvbmcpICZyZmMpOworCQkJcmZjLm1vZGUgPSBwaS0+bW9kZTsKIAkJfQotCX0KIAorCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9SRkMsCisJCQkJCXNpemVvZihyZmMpLCAodW5zaWduZWQgbG9uZykgJnJmYyk7CisKKwkJaWYgKHJlc3VsdCA9PSBMMkNBUF9DT05GX1NVQ0NFU1MpCisJCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX09VVFBVVF9ET05FOworCX0KIAlyc3AtPnNjaWQgICA9IGNwdV90b19sZTE2KHBpLT5kY2lkKTsKIAlyc3AtPnJlc3VsdCA9IGNwdV90b19sZTE2KHJlc3VsdCk7CiAJcnNwLT5mbGFncyAgPSBjcHVfdG9fbGUxNigweDAwMDApOwpAQCAtMTgwOCw2ICsyNDIwLDczIEBACiAJcmV0dXJuIHB0ciAtIGRhdGE7CiB9CiAKK3N0YXRpYyBpbnQgbDJjYXBfcGFyc2VfY29uZl9yc3Aoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpyc3AsIGludCBsZW4sIHZvaWQgKmRhdGEsIHUxNiAqcmVzdWx0KQoreworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IGwyY2FwX2NvbmZfcmVxICpyZXEgPSBkYXRhOworCXZvaWQgKnB0ciA9IHJlcS0+ZGF0YTsKKwlpbnQgdHlwZSwgb2xlbjsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlzdHJ1Y3QgbDJjYXBfY29uZl9yZmMgcmZjOworCisJQlRfREJHKCJzayAlcCwgcnNwICVwLCBsZW4gJWQsIHJlcSAlcCIsIHNrLCByc3AsIGxlbiwgZGF0YSk7CisKKwl3aGlsZSAobGVuID49IEwyQ0FQX0NPTkZfT1BUX1NJWkUpIHsKKwkJbGVuIC09IGwyY2FwX2dldF9jb25mX29wdCgmcnNwLCAmdHlwZSwgJm9sZW4sICZ2YWwpOworCisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEwyQ0FQX0NPTkZfTVRVOgorCQkJaWYgKHZhbCA8IEwyQ0FQX0RFRkFVTFRfTUlOX01UVSkgeworCQkJCSpyZXN1bHQgPSBMMkNBUF9DT05GX1VOQUNDRVBUOworCQkJCXBpLT5vbXR1ID0gTDJDQVBfREVGQVVMVF9NSU5fTVRVOworCQkJfSBlbHNlCisJCQkJcGktPm9tdHUgPSB2YWw7CisJCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9NVFUsIDIsIHBpLT5vbXR1KTsKKwkJCWJyZWFrOworCisJCWNhc2UgTDJDQVBfQ09ORl9GTFVTSF9UTzoKKwkJCXBpLT5mbHVzaF90byA9IHZhbDsKKwkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX0ZMVVNIX1RPLAorCQkJCQkJCTIsIHBpLT5mbHVzaF90byk7CisJCQlicmVhazsKKworCQljYXNlIEwyQ0FQX0NPTkZfUkZDOgorCQkJaWYgKG9sZW4gPT0gc2l6ZW9mKHJmYykpCisJCQkJbWVtY3B5KCZyZmMsICh2b2lkICopdmFsLCBvbGVuKTsKKworCQkJaWYgKChwaS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRSkgJiYKKwkJCQkJCQlyZmMubW9kZSAhPSBwaS0+bW9kZSkKKwkJCQlyZXR1cm4gLUVDT05OUkVGVVNFRDsKKworCQkJcGktPm1vZGUgPSByZmMubW9kZTsKKwkJCXBpLT5mY3MgPSAwOworCisJCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9SRkMsCisJCQkJCXNpemVvZihyZmMpLCAodW5zaWduZWQgbG9uZykgJnJmYyk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICgqcmVzdWx0ID09IEwyQ0FQX0NPTkZfU1VDQ0VTUykgeworCQlzd2l0Y2ggKHJmYy5tb2RlKSB7CisJCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgorCQkJcGktPnJlbW90ZV90eF93aW4gICA9IHJmYy50eHdpbl9zaXplOworCQkJcGktPnJldHJhbnNfdGltZW91dCA9IHJmYy5yZXRyYW5zX3RpbWVvdXQ7CisJCQlwaS0+bW9uaXRvcl90aW1lb3V0ID0gcmZjLm1vbml0b3JfdGltZW91dDsKKwkJCXBpLT5tYXhfcGR1X3NpemUgICAgPSBsZTE2X3RvX2NwdShyZmMubWF4X3BkdV9zaXplKTsKKwkJCWJyZWFrOworCQljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgorCQkJcGktPm1heF9wZHVfc2l6ZSAgICA9IGxlMTZfdG9fY3B1KHJmYy5tYXhfcGR1X3NpemUpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXEtPmRjaWQgICA9IGNwdV90b19sZTE2KHBpLT5kY2lkKTsKKwlyZXEtPmZsYWdzICA9IGNwdV90b19sZTE2KDB4MDAwMCk7CisKKwlyZXR1cm4gcHRyIC0gZGF0YTsKK30KKwogc3RhdGljIGludCBsMmNhcF9idWlsZF9jb25mX3JzcChzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKmRhdGEsIHUxNiByZXN1bHQsIHUxNiBmbGFncykKIHsKIAlzdHJ1Y3QgbDJjYXBfY29uZl9yc3AgKnJzcCA9IGRhdGE7CkBAIC0xOTk0LDYgKzI2NzMsNyBAQAogCiAJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX2dldF9pZGVudChjb25uKSwgTDJDQVBfQ09ORl9SRVEsCiAJCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKHNrLCByZXEpLCByZXEpOworCQlsMmNhcF9waShzayktPm51bV9jb25mX3JlcSsrOwogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfQ1JfUEVORDoKQEAgLTIwNTIsMTAgKzI3MzIsMTMgQEAKIAogCS8qIENvbXBsZXRlIGNvbmZpZy4gKi8KIAlsZW4gPSBsMmNhcF9wYXJzZV9jb25mX3JlcShzaywgcnNwKTsKLQlpZiAobGVuIDwgMCkKKwlpZiAobGVuIDwgMCkgeworCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNvbm4sIHNrKTsKIAkJZ290byB1bmxvY2s7CisJfQogCiAJbDJjYXBfc2VuZF9jbWQoY29ubiwgY21kLT5pZGVudCwgTDJDQVBfQ09ORl9SU1AsIGxlbiwgcnNwKTsKKwlsMmNhcF9waShzayktPm51bV9jb25mX3JzcCsrOwogCiAJLyogUmVzZXQgY29uZmlnIGJ1ZmZlci4gKi8KIAlsMmNhcF9waShzayktPmNvbmZfbGVuID0gMDsKQEAgLTIwNjQsNyArMjc0NywyMiBAQAogCQlnb3RvIHVubG9jazsKIAogCWlmIChsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX0lOUFVUX0RPTkUpIHsKKwkJaWYgKCEobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9OT19GQ1NfUkVDVikKKwkJCQl8fCBsMmNhcF9waShzayktPmZjcyAhPSBMMkNBUF9GQ1NfTk9ORSkKKwkJCWwyY2FwX3BpKHNrKS0+ZmNzID0gTDJDQVBfRkNTX0NSQzE2OworCiAJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKKwkJbDJjYXBfcGkoc2spLT5uZXh0X3R4X3NlcSA9IDA7CisJCWwyY2FwX3BpKHNrKS0+ZXhwZWN0ZWRfYWNrX3NlcSA9IDA7CisJCWwyY2FwX3BpKHNrKS0+dW5hY2tlZF9mcmFtZXMgPSAwOworCisJCXNldHVwX3RpbWVyKCZsMmNhcF9waShzayktPnJldHJhbnNfdGltZXIsCisJCQkJbDJjYXBfcmV0cmFuc190aW1lb3V0LCAodW5zaWduZWQgbG9uZykgc2spOworCQlzZXR1cF90aW1lcigmbDJjYXBfcGkoc2spLT5tb25pdG9yX3RpbWVyLAorCQkJCWwyY2FwX21vbml0b3JfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpIHNrKTsKKworCQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoVFhfUVVFVUUoc2spKTsKKwkJX19za2JfcXVldWVfaGVhZF9pbml0KFNSRUpfUVVFVUUoc2spKTsKIAkJbDJjYXBfY2hhbl9yZWFkeShzayk7CiAJCWdvdG8gdW5sb2NrOwogCX0KQEAgLTIwNzMsNiArMjc3MSw3IEBACiAJCXU4IGJ1Zls2NF07CiAJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX2dldF9pZGVudChjb25uKSwgTDJDQVBfQ09ORl9SRVEsCiAJCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKHNrLCBidWYpLCBidWYpOworCQlsMmNhcF9waShzayktPm51bV9jb25mX3JlcSsrOwogCX0KIAogdW5sb2NrOgpAQCAtMjEwMiwyOSArMjgwMSwzMiBAQAogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfQ09ORl9VTkFDQ0VQVDoKLQkJaWYgKCsrbDJjYXBfcGkoc2spLT5jb25mX3JldHJ5IDwgTDJDQVBfQ09ORl9NQVhfUkVUUklFUykgewotCQkJY2hhciByZXFbMTI4XTsKLQkJCS8qIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gYWRqdXN0IEwyQ0FQIHBhcmFtZXRlcnMKLQkJCSAqIHRoYXQgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoZSBzcGVjLiBXZSBzaW1wbHkKLQkJCSAqIHJlc2VuZCBjb25maWcgcmVxdWVzdCB0aGF0IHdlIHNlbnQgZWFybGllci4gSXQgaXMKLQkJCSAqIHN0dXBpZCwgYnV0IGl0IGhlbHBzIHF1YWxpZmljYXRpb24gdGVzdGluZyB3aGljaAotCQkJICogZXhwZWN0cyBhdCBsZWFzdCBzb21lIHJlc3BvbnNlIGZyb20gdXMuICovCi0JCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9nZXRfaWRlbnQoY29ubiksIEwyQ0FQX0NPTkZfUkVRLAotCQkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIHJlcSksIHJlcSk7Ci0JCQlnb3RvIGRvbmU7CisJCWlmIChsMmNhcF9waShzayktPm51bV9jb25mX3JzcCA8PSBMMkNBUF9DT05GX01BWF9DT05GX1JTUCkgeworCQkJaW50IGxlbiA9IGNtZC0+bGVuIC0gc2l6ZW9mKCpyc3ApOworCQkJY2hhciByZXFbNjRdOworCisJCQkvKiB0aHJvdyBvdXQgYW55IG9sZCBzdG9yZWQgY29uZiByZXF1ZXN0cyAqLworCQkJcmVzdWx0ID0gTDJDQVBfQ09ORl9TVUNDRVNTOworCQkJbGVuID0gbDJjYXBfcGFyc2VfY29uZl9yc3Aoc2ssIHJzcC0+ZGF0YSwKKwkJCQkJCQlsZW4sIHJlcSwgJnJlc3VsdCk7CisJCQlpZiAobGVuIDwgMCkgeworCQkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEoY29ubiwgc2spOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLAorCQkJCQkJTDJDQVBfQ09ORl9SRVEsIGxlbiwgcmVxKTsKKwkJCWwyY2FwX3BpKHNrKS0+bnVtX2NvbmZfcmVxKys7CisJCQlpZiAocmVzdWx0ICE9IEwyQ0FQX0NPTkZfU1VDQ0VTUykKKwkJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKIAkJfQogCiAJZGVmYXVsdDoKIAkJc2stPnNrX3N0YXRlID0gQlRfRElTQ09OTjsKIAkJc2stPnNrX2VyciA9IEVDT05OUkVTRVQ7CiAJCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBIWiAqIDUpOwotCQl7Ci0JCQlzdHJ1Y3QgbDJjYXBfZGlzY29ubl9yZXEgcmVxOwotCQkJcmVxLmRjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwotCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLAotCQkJCQlMMkNBUF9ESVNDT05OX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOwotCQl9CisJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEoY29ubiwgc2spOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC0yMTM0LDcgKzI4MzYsMTYgQEAKIAlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9JTlBVVF9ET05FOwogCiAJaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfT1VUUFVUX0RPTkUpIHsKKwkJaWYgKCEobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9OT19GQ1NfUkVDVikKKwkJCQl8fCBsMmNhcF9waShzayktPmZjcyAhPSBMMkNBUF9GQ1NfTk9ORSkKKwkJCWwyY2FwX3BpKHNrKS0+ZmNzID0gTDJDQVBfRkNTX0NSQzE2OworCiAJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKKwkJbDJjYXBfcGkoc2spLT5leHBlY3RlZF90eF9zZXEgPSAwOworCQlsMmNhcF9waShzayktPmJ1ZmZlcl9zZXEgPSAwOworCQlsMmNhcF9waShzayktPm51bV90b19hY2sgPSAwOworCQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoVFhfUVVFVUUoc2spKTsKKwkJX19za2JfcXVldWVfaGVhZF9pbml0KFNSRUpfUVVFVUUoc2spKTsKIAkJbDJjYXBfY2hhbl9yZWFkeShzayk7CiAJfQogCkBAIC0yMTY1LDYgKzI4NzYsMTEgQEAKIAogCXNrLT5za19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7CiAKKwlza2JfcXVldWVfcHVyZ2UoVFhfUVVFVUUoc2spKTsKKwlza2JfcXVldWVfcHVyZ2UoU1JFSl9RVUVVRShzaykpOworCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5yZXRyYW5zX3RpbWVyKTsKKwlkZWxfdGltZXIoJmwyY2FwX3BpKHNrKS0+bW9uaXRvcl90aW1lcik7CisKIAlsMmNhcF9jaGFuX2RlbChzaywgRUNPTk5SRVNFVCk7CiAJYmhfdW5sb2NrX3NvY2soc2spOwogCkBAIC0yMTg3LDYgKzI5MDMsMTEgQEAKIAlpZiAoIXNrKQogCQlyZXR1cm4gMDsKIAorCXNrYl9xdWV1ZV9wdXJnZShUWF9RVUVVRShzaykpOworCXNrYl9xdWV1ZV9wdXJnZShTUkVKX1FVRVVFKHNrKSk7CisJZGVsX3RpbWVyKCZsMmNhcF9waShzayktPnJldHJhbnNfdGltZXIpOworCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5tb25pdG9yX3RpbWVyKTsKKwogCWwyY2FwX2NoYW5fZGVsKHNrLCAwKTsKIAliaF91bmxvY2tfc29jayhzayk7CiAKQEAgLTIyMDUsMTAgKzI5MjYsMTQgQEAKIAogCWlmICh0eXBlID09IEwyQ0FQX0lUX0ZFQVRfTUFTSykgewogCQl1OCBidWZbOF07CisJCXUzMiBmZWF0X21hc2sgPSBsMmNhcF9mZWF0X21hc2s7CiAJCXN0cnVjdCBsMmNhcF9pbmZvX3JzcCAqcnNwID0gKHN0cnVjdCBsMmNhcF9pbmZvX3JzcCAqKSBidWY7CiAJCXJzcC0+dHlwZSAgID0gY3B1X3RvX2xlMTYoTDJDQVBfSVRfRkVBVF9NQVNLKTsKIAkJcnNwLT5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9JUl9TVUNDRVNTKTsKLQkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMihsMmNhcF9mZWF0X21hc2spLCAoX19sZTMyICopIHJzcC0+ZGF0YSk7CisJCWlmIChlbmFibGVfZXJ0bSkKKwkJCWZlYXRfbWFzayB8PSBMMkNBUF9GRUFUX0VSVE0gfCBMMkNBUF9GRUFUX1NUUkVBTUlORworCQkJCQkJCSB8IEwyQ0FQX0ZFQVRfRkNTOworCQlwdXRfdW5hbGlnbmVkX2xlMzIoZmVhdF9tYXNrLCByc3AtPmRhdGEpOwogCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjbWQtPmlkZW50LAogCQkJCQlMMkNBUF9JTkZPX1JTUCwgc2l6ZW9mKGJ1ZiksIGJ1Zik7CiAJfSBlbHNlIGlmICh0eXBlID09IEwyQ0FQX0lUX0ZJWEVEX0NIQU4pIHsKQEAgLTIzNTksOSArMzA4NCwzNzQgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIH0KIAorc3RhdGljIGludCBsMmNhcF9jaGVja19mY3Moc3RydWN0IGwyY2FwX3BpbmZvICpwaSwgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJdTE2IG91cl9mY3MsIHJjdl9mY3M7CisJaW50IGhkcl9zaXplID0gTDJDQVBfSERSX1NJWkUgKyAyOworCisJaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KSB7CisJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSAyKTsKKwkJcmN2X2ZjcyA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEgKyBza2ItPmxlbik7CisJCW91cl9mY3MgPSBjcmMxNigwLCBza2ItPmRhdGEgLSBoZHJfc2l6ZSwgc2tiLT5sZW4gKyBoZHJfc2l6ZSk7CisKKwkJaWYgKG91cl9mY3MgIT0gcmN2X2ZjcykKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbDJjYXBfYWRkX3RvX3NyZWpfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eF9zZXEsIHU4IHNhcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV4dF9za2I7CisKKwlidF9jYihza2IpLT50eF9zZXEgPSB0eF9zZXE7CisJYnRfY2Ioc2tiKS0+c2FyID0gc2FyOworCisJbmV4dF9za2IgPSBza2JfcGVlayhTUkVKX1FVRVVFKHNrKSk7CisJaWYgKCFuZXh0X3NrYikgeworCQlfX3NrYl9xdWV1ZV90YWlsKFNSRUpfUVVFVUUoc2spLCBza2IpOworCQlyZXR1cm47CisJfQorCisJZG8geworCQlpZiAoYnRfY2IobmV4dF9za2IpLT50eF9zZXEgPiB0eF9zZXEpIHsKKwkJCV9fc2tiX3F1ZXVlX2JlZm9yZShTUkVKX1FVRVVFKHNrKSwgbmV4dF9za2IsIHNrYik7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoc2tiX3F1ZXVlX2lzX2xhc3QoU1JFSl9RVUVVRShzayksIG5leHRfc2tiKSkKKwkJCWJyZWFrOworCisJfSB3aGlsZSgobmV4dF9za2IgPSBza2JfcXVldWVfbmV4dChTUkVKX1FVRVVFKHNrKSwgbmV4dF9za2IpKSk7CisKKwlfX3NrYl9xdWV1ZV90YWlsKFNSRUpfUVVFVUUoc2spLCBza2IpOworfQorCitzdGF0aWMgaW50IGwyY2FwX3Nhcl9yZWFzc2VtYmx5X3NkdShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHUxNiBjb250cm9sKQoreworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IHNrX2J1ZmYgKl9za2I7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlzd2l0Y2ggKGNvbnRyb2wgJiBMMkNBUF9DVFJMX1NBUikgeworCWNhc2UgTDJDQVBfU0RVX1VOU0VHTUVOVEVEOgorCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpIHsKKwkJCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJCWJyZWFrOworCQl9CisKKwkJZXJyID0gc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBza2IpOworCQlpZiAoIWVycikKKwkJCXJldHVybiAwOworCisJCWJyZWFrOworCisJY2FzZSBMMkNBUF9TRFVfU1RBUlQ6CisJCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0FSX1NEVSkgeworCQkJa2ZyZWVfc2tiKHBpLT5zZHUpOworCQkJYnJlYWs7CisJCX0KKworCQlwaS0+c2R1X2xlbiA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEpOworCQlza2JfcHVsbChza2IsIDIpOworCisJCXBpLT5zZHUgPSBidF9za2JfYWxsb2MocGktPnNkdV9sZW4sIEdGUF9BVE9NSUMpOworCQlpZiAoIXBpLT5zZHUpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCisJCW1lbWNweShza2JfcHV0KHBpLT5zZHUsIHNrYi0+bGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TQVJfU0RVOworCQlwaS0+cGFydGlhbF9zZHVfbGVuID0gc2tiLT5sZW47CisJCWVyciA9IDA7CisJCWJyZWFrOworCisJY2FzZSBMMkNBUF9TRFVfQ09OVElOVUU6CisJCWlmICghKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfU0RVKSkKKwkJCWJyZWFrOworCisJCW1lbWNweShza2JfcHV0KHBpLT5zZHUsIHNrYi0+bGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwkJcGktPnBhcnRpYWxfc2R1X2xlbiArPSBza2ItPmxlbjsKKwkJaWYgKHBpLT5wYXJ0aWFsX3NkdV9sZW4gPiBwaS0+c2R1X2xlbikKKwkJCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJZWxzZQorCQkJZXJyID0gMDsKKworCQlicmVhazsKKworCWNhc2UgTDJDQVBfU0RVX0VORDoKKwkJaWYgKCEocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpKQorCQkJYnJlYWs7CisKKwkJbWVtY3B5KHNrYl9wdXQocGktPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TQVJfU0RVOworCQlwaS0+cGFydGlhbF9zZHVfbGVuICs9IHNrYi0+bGVuOworCisJCWlmIChwaS0+cGFydGlhbF9zZHVfbGVuID09IHBpLT5zZHVfbGVuKSB7CisJCQlfc2tiID0gc2tiX2Nsb25lKHBpLT5zZHUsIEdGUF9BVE9NSUMpOworCQkJZXJyID0gc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBfc2tiKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCWtmcmVlX3NrYihfc2tiKTsKKwkJfQorCQlrZnJlZV9za2IocGktPnNkdSk7CisJCWVyciA9IDA7CisKKwkJYnJlYWs7CisJfQorCisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbDJjYXBfY2hlY2tfc3Jlal9nYXAoc3RydWN0IHNvY2sgKnNrLCB1OCB0eF9zZXEpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgY29udHJvbCA9IDA7CisKKwl3aGlsZSgoc2tiID0gc2tiX3BlZWsoU1JFSl9RVUVVRShzaykpKSkgeworCQlpZiAoYnRfY2Ioc2tiKS0+dHhfc2VxICE9IHR4X3NlcSkKKwkJCWJyZWFrOworCisJCXNrYiA9IHNrYl9kZXF1ZXVlKFNSRUpfUVVFVUUoc2spKTsKKwkJY29udHJvbCB8PSBidF9jYihza2IpLT5zYXIgPDwgTDJDQVBfQ1RSTF9TQVJfU0hJRlQ7CisJCWwyY2FwX3Nhcl9yZWFzc2VtYmx5X3NkdShzaywgc2tiLCBjb250cm9sKTsKKwkJbDJjYXBfcGkoc2spLT5idWZmZXJfc2VxX3NyZWogPQorCQkJKGwyY2FwX3BpKHNrKS0+YnVmZmVyX3NlcV9zcmVqICsgMSkgJSA2NDsKKwkJdHhfc2VxKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBsMmNhcF9yZXNlbmRfc3JlamZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTggdHhfc2VxKQoreworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IHNyZWpfbGlzdCAqbCwgKnRtcDsKKwl1MTYgY29udHJvbDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsLHRtcCwgU1JFSl9MSVNUKHNrKSwgbGlzdCkgeworCQlpZiAobC0+dHhfc2VxID09IHR4X3NlcSkgeworCQkJbGlzdF9kZWwoJmwtPmxpc3QpOworCQkJa2ZyZWUobCk7CisJCQlyZXR1cm47CisJCX0KKwkJY29udHJvbCA9IEwyQ0FQX1NVUEVSX1NFTEVDVF9SRUpFQ1Q7CisJCWNvbnRyb2wgfD0gbC0+dHhfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOworCQlsMmNhcF9zZW5kX3NmcmFtZShwaSwgY29udHJvbCk7CisJCWxpc3RfZGVsKCZsLT5saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmbC0+bGlzdCwgU1JFSl9MSVNUKHNrKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBsMmNhcF9zZW5kX3NyZWpmcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHU4IHR4X3NlcSkKK3sKKwlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOworCXN0cnVjdCBzcmVqX2xpc3QgKm5ldzsKKwl1MTYgY29udHJvbDsKKworCXdoaWxlICh0eF9zZXEgIT0gcGktPmV4cGVjdGVkX3R4X3NlcSkgeworCQljb250cm9sID0gTDJDQVBfU1VQRVJfU0VMRUNUX1JFSkVDVDsKKwkJY29udHJvbCB8PSBwaS0+ZXhwZWN0ZWRfdHhfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOworCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NFTkRfUEJJVCkgeworCQkJY29udHJvbCB8PSBMMkNBUF9DVFJMX1BPTEw7CisJCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TRU5EX1BCSVQ7CisJCX0KKwkJbDJjYXBfc2VuZF9zZnJhbWUocGksIGNvbnRyb2wpOworCisJCW5ldyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzcmVqX2xpc3QpLCBHRlBfQVRPTUlDKTsKKwkJbmV3LT50eF9zZXEgPSBwaS0+ZXhwZWN0ZWRfdHhfc2VxKys7CisJCWxpc3RfYWRkX3RhaWwoJm5ldy0+bGlzdCwgU1JFSl9MSVNUKHNrKSk7CisJfQorCXBpLT5leHBlY3RlZF90eF9zZXErKzsKK30KKworc3RhdGljIGlubGluZSBpbnQgbDJjYXBfZGF0YV9jaGFubmVsX2lmcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHUxNiByeF9jb250cm9sLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJdTggdHhfc2VxID0gX19nZXRfdHhzZXEocnhfY29udHJvbCk7CisJdTE2IHR4X2NvbnRyb2wgPSAwOworCXU4IHNhciA9IHJ4X2NvbnRyb2wgPj4gTDJDQVBfQ1RSTF9TQVJfU0hJRlQ7CisJaW50IGVyciA9IDA7CisKKwlCVF9EQkcoInNrICVwIHJ4X2NvbnRyb2wgMHglNC40eCBsZW4gJWQiLCBzaywgcnhfY29udHJvbCwgc2tiLT5sZW4pOworCisJaWYgKHR4X3NlcSA9PSBwaS0+ZXhwZWN0ZWRfdHhfc2VxKQorCQlnb3RvIGV4cGVjdGVkOworCisJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKKwkJc3RydWN0IHNyZWpfbGlzdCAqZmlyc3Q7CisKKwkJZmlyc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KFNSRUpfTElTVChzayksCisJCQkJc3RydWN0IHNyZWpfbGlzdCwgbGlzdCk7CisJCWlmICh0eF9zZXEgPT0gZmlyc3QtPnR4X3NlcSkgeworCQkJbDJjYXBfYWRkX3RvX3NyZWpfcXVldWUoc2ssIHNrYiwgdHhfc2VxLCBzYXIpOworCQkJbDJjYXBfY2hlY2tfc3Jlal9nYXAoc2ssIHR4X3NlcSk7CisKKwkJCWxpc3RfZGVsKCZmaXJzdC0+bGlzdCk7CisJCQlrZnJlZShmaXJzdCk7CisKKwkJCWlmIChsaXN0X2VtcHR5KFNSRUpfTElTVChzaykpKSB7CisJCQkJcGktPmJ1ZmZlcl9zZXEgPSBwaS0+YnVmZmVyX3NlcV9zcmVqOworCQkJCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NSRUpfU0VOVDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBzcmVqX2xpc3QgKmw7CisJCQlsMmNhcF9hZGRfdG9fc3Jlal9xdWV1ZShzaywgc2tiLCB0eF9zZXEsIHNhcik7CisKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkobCwgU1JFSl9MSVNUKHNrKSwgbGlzdCkgeworCQkJCWlmIChsLT50eF9zZXEgPT0gdHhfc2VxKSB7CisJCQkJCWwyY2FwX3Jlc2VuZF9zcmVqZnJhbWUoc2ssIHR4X3NlcSk7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKwkJCWwyY2FwX3NlbmRfc3JlamZyYW1lKHNrLCB0eF9zZXEpOworCQl9CisJfSBlbHNlIHsKKwkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TUkVKX1NFTlQ7CisKKwkJSU5JVF9MSVNUX0hFQUQoU1JFSl9MSVNUKHNrKSk7CisJCXBpLT5idWZmZXJfc2VxX3NyZWogPSBwaS0+YnVmZmVyX3NlcTsKKworCQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoU1JFSl9RVUVVRShzaykpOworCQlsMmNhcF9hZGRfdG9fc3Jlal9xdWV1ZShzaywgc2tiLCB0eF9zZXEsIHNhcik7CisKKwkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TRU5EX1BCSVQ7CisKKwkJbDJjYXBfc2VuZF9zcmVqZnJhbWUoc2ssIHR4X3NlcSk7CisJfQorCXJldHVybiAwOworCitleHBlY3RlZDoKKwlwaS0+ZXhwZWN0ZWRfdHhfc2VxID0gKHBpLT5leHBlY3RlZF90eF9zZXEgKyAxKSAlIDY0OworCisJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKKwkJbDJjYXBfYWRkX3RvX3NyZWpfcXVldWUoc2ssIHNrYiwgdHhfc2VxLCBzYXIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwaS0+YnVmZmVyX3NlcSA9IChwaS0+YnVmZmVyX3NlcSArIDEpICUgNjQ7CisKKwllcnIgPSBsMmNhcF9zYXJfcmVhc3NlbWJseV9zZHUoc2ssIHNrYiwgcnhfY29udHJvbCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlwaS0+bnVtX3RvX2FjayA9IChwaS0+bnVtX3RvX2FjayArIDEpICUgTDJDQVBfREVGQVVMVF9OVU1fVE9fQUNLOworCWlmIChwaS0+bnVtX3RvX2FjayA9PSBMMkNBUF9ERUZBVUxUX05VTV9UT19BQ0sgLSAxKSB7CisJCXR4X2NvbnRyb2wgfD0gTDJDQVBfU1VQRVJfUkNWX1JFQURZOworCQl0eF9jb250cm9sIHw9IHBpLT5idWZmZXJfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOworCQlsMmNhcF9zZW5kX3NmcmFtZShwaSwgdHhfY29udHJvbCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBsMmNhcF9kYXRhX2NoYW5uZWxfc2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTE2IHJ4X2NvbnRyb2wsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKKwl1OCB0eF9zZXEgPSBfX2dldF9yZXFzZXEocnhfY29udHJvbCk7CisKKwlCVF9EQkcoInNrICVwIHJ4X2NvbnRyb2wgMHglNC40eCBsZW4gJWQiLCBzaywgcnhfY29udHJvbCwgc2tiLT5sZW4pOworCisJc3dpdGNoIChyeF9jb250cm9sICYgTDJDQVBfQ1RSTF9TVVBFUlZJU0UpIHsKKwljYXNlIEwyQ0FQX1NVUEVSX1JDVl9SRUFEWToKKwkJaWYgKHJ4X2NvbnRyb2wgJiBMMkNBUF9DVFJMX1BPTEwpIHsKKwkJCXUxNiBjb250cm9sID0gTDJDQVBfQ1RSTF9GSU5BTDsKKwkJCWNvbnRyb2wgfD0gTDJDQVBfU1VQRVJfUkNWX1JFQURZIHwKKwkJCQkocGktPmJ1ZmZlcl9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQpOworCQkJbDJjYXBfc2VuZF9zZnJhbWUobDJjYXBfcGkoc2spLCBjb250cm9sKTsKKwkJCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFTU9URV9CVVNZOworCisJCX0gZWxzZSBpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfRklOQUwpIHsKKwkJCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFTU9URV9CVVNZOworCQkJcGktPmV4cGVjdGVkX2Fja19zZXEgPSB0eF9zZXE7CisJCQlsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhzayk7CisKKwkJCWlmICghKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9XQUlUX0YpKQorCQkJCWJyZWFrOworCisJCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9XQUlUX0Y7CisJCQlkZWxfdGltZXIoJnBpLT5tb25pdG9yX3RpbWVyKTsKKworCQkJaWYgKHBpLT51bmFja2VkX2ZyYW1lcyA+IDApCisJCQkJX19tb2RfcmV0cmFuc190aW1lcigpOworCQl9IGVsc2UgeworCQkJcGktPmV4cGVjdGVkX2Fja19zZXEgPSB0eF9zZXE7CisJCQlsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhzayk7CisKKwkJCWlmICgocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKQorCQkJCQkmJiAocGktPnVuYWNrZWRfZnJhbWVzID4gMCkpCisJCQkJX19tb2RfcmV0cmFuc190aW1lcigpOworCisJCQlsMmNhcF9lcnRtX3NlbmQoc2spOworCQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEwyQ0FQX1NVUEVSX1JFSkVDVDoKKwkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CisKKwkJcGktPmV4cGVjdGVkX2Fja19zZXEgPSBfX2dldF9yZXFzZXEocnhfY29udHJvbCk7CisJCWwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKHNrKTsKKworCQlzay0+c2tfc2VuZF9oZWFkID0gVFhfUVVFVUUoc2spLT5uZXh0OworCQlwaS0+bmV4dF90eF9zZXEgPSBwaS0+ZXhwZWN0ZWRfYWNrX3NlcTsKKworCQlsMmNhcF9lcnRtX3NlbmQoc2spOworCisJCWJyZWFrOworCisJY2FzZSBMMkNBUF9TVVBFUl9TRUxFQ1RfUkVKRUNUOgorCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKKworCQlpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfUE9MTCkgeworCQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZShzaywgdHhfc2VxKTsKKwkJCXBpLT5leHBlY3RlZF9hY2tfc2VxID0gdHhfc2VxOworCQkJbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoc2spOworCQkJbDJjYXBfZXJ0bV9zZW5kKHNrKTsKKwkJCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7CisJCQkJcGktPnNyZWpfc2F2ZV9yZXFzZXEgPSB0eF9zZXE7CisJCQkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TUkVKX0FDVDsKKwkJCX0KKwkJfSBlbHNlIGlmIChyeF9jb250cm9sICYgTDJDQVBfQ1RSTF9GSU5BTCkgeworCQkJaWYgKChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU1JFSl9BQ1QpICYmCisJCQkJCXBpLT5zcmVqX3NhdmVfcmVxc2VxID09IHR4X3NlcSkKKwkJCQlwaS0+c3Jlal9zYXZlX3JlcXNlcSAmPSB+TDJDQVBfQ09OTl9TUkVKX0FDVDsKKwkJCWVsc2UKKwkJCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lKHNrLCB0eF9zZXEpOworCQl9CisJCWVsc2UgeworCQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZShzaywgdHhfc2VxKTsKKwkJCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7CisJCQkJcGktPnNyZWpfc2F2ZV9yZXFzZXEgPSB0eF9zZXE7CisJCQkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TUkVKX0FDVDsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgTDJDQVBfU1VQRVJfUkNWX05PVF9SRUFEWToKKwkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKKwkJcGktPmV4cGVjdGVkX2Fja19zZXEgPSB0eF9zZXE7CisJCWwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKHNrKTsKKworCQlkZWxfdGltZXIoJmwyY2FwX3BpKHNrKS0+cmV0cmFuc190aW1lcik7CisJCWlmIChyeF9jb250cm9sICYgTDJDQVBfQ1RSTF9QT0xMKSB7CisJCQl1MTYgY29udHJvbCA9IEwyQ0FQX0NUUkxfRklOQUw7CisJCQlsMmNhcF9zZW5kX3JyX29yX3JucihsMmNhcF9waShzayksIGNvbnRyb2wpOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCBsMmNhcF9kYXRhX2NoYW5uZWwoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHUxNiBjaWQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGk7CisJdTE2IGNvbnRyb2wsIGxlbjsKKwl1OCB0eF9zZXE7CisJaW50IGVycjsKIAogCXNrID0gbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZCgmY29ubi0+Y2hhbl9saXN0LCBjaWQpOwogCWlmICghc2spIHsKQEAgLTIzNjksMjIgKzM0NTksOTEgQEAKIAkJZ290byBkcm9wOwogCX0KIAorCXBpID0gbDJjYXBfcGkoc2spOworCiAJQlRfREJHKCJzayAlcCwgbGVuICVkIiwgc2ssIHNrYi0+bGVuKTsKIAogCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEKQogCQlnb3RvIGRyb3A7CiAKLQlpZiAobDJjYXBfcGkoc2spLT5pbXR1IDwgc2tiLT5sZW4pCi0JCWdvdG8gZHJvcDsKKwlzd2l0Y2ggKHBpLT5tb2RlKSB7CisJY2FzZSBMMkNBUF9NT0RFX0JBU0lDOgorCQkvKiBJZiBzb2NrZXQgcmVjdiBidWZmZXJzIG92ZXJmbG93cyB3ZSBkcm9wIGRhdGEgaGVyZQorCQkgKiB3aGljaCBpcyAqYmFkKiBiZWNhdXNlIEwyQ0FQIGhhcyB0byBiZSByZWxpYWJsZS4KKwkJICogQnV0IHdlIGRvbid0IGhhdmUgYW55IG90aGVyIGNob2ljZS4gTDJDQVAgZG9lc24ndAorCQkgKiBwcm92aWRlIGZsb3cgY29udHJvbCBtZWNoYW5pc20uICovCiAKLQkvKiBJZiBzb2NrZXQgcmVjdiBidWZmZXJzIG92ZXJmbG93cyB3ZSBkcm9wIGRhdGEgaGVyZQotCSAqIHdoaWNoIGlzICpiYWQqIGJlY2F1c2UgTDJDQVAgaGFzIHRvIGJlIHJlbGlhYmxlLgotCSAqIEJ1dCB3ZSBkb24ndCBoYXZlIGFueSBvdGhlciBjaG9pY2UuIEwyQ0FQIGRvZXNuJ3QKLQkgKiBwcm92aWRlIGZsb3cgY29udHJvbCBtZWNoYW5pc20uICovCisJCWlmIChwaS0+aW10dSA8IHNrYi0+bGVuKQorCQkJZ290byBkcm9wOwogCi0JaWYgKCFzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYikpCisJCWlmICghc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBza2IpKQorCQkJZ290byBkb25lOworCQlicmVhazsKKworCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgorCQljb250cm9sID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHNrYi0+ZGF0YSk7CisJCXNrYl9wdWxsKHNrYiwgMik7CisJCWxlbiA9IHNrYi0+bGVuOworCisJCWlmIChfX2lzX3Nhcl9zdGFydChjb250cm9sKSkKKwkJCWxlbiAtPSAyOworCisJCWlmIChwaS0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKKwkJCWxlbiAtPSAyOworCisJCS8qCisJCSAqIFdlIGNhbiBqdXN0IGRyb3AgdGhlIGNvcnJ1cHRlZCBJLWZyYW1lIGhlcmUuCisJCSAqIFJlY2VpdmVyIHdpbGwgbWlzcyBpdCBhbmQgc3RhcnQgcHJvcGVyIHJlY292ZXJ5CisJCSAqIHByb2NlZHVyZXMgYW5kIGFzayByZXRyYW5zbWlzc2lvbi4KKwkJICovCisJCWlmIChsZW4gPiBMMkNBUF9ERUZBVUxUX01BWF9QRFVfU0laRSkKKwkJCWdvdG8gZHJvcDsKKworCQlpZiAobDJjYXBfY2hlY2tfZmNzKHBpLCBza2IpKQorCQkJZ290byBkcm9wOworCisJCWlmIChfX2lzX2lmcmFtZShjb250cm9sKSkKKwkJCWVyciA9IGwyY2FwX2RhdGFfY2hhbm5lbF9pZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CisJCWVsc2UKKwkJCWVyciA9IGwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CisKKwkJaWYgKCFlcnIpCisJCQlnb3RvIGRvbmU7CisJCWJyZWFrOworCisJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKKwkJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEpOworCQlza2JfcHVsbChza2IsIDIpOworCQlsZW4gPSBza2ItPmxlbjsKKworCQlpZiAoX19pc19zYXJfc3RhcnQoY29udHJvbCkpCisJCQlsZW4gLT0gMjsKKworCQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpCisJCQlsZW4gLT0gMjsKKworCQlpZiAobGVuID4gTDJDQVBfREVGQVVMVF9NQVhfUERVX1NJWkUgfHwgX19pc19zZnJhbWUoY29udHJvbCkpCisJCQlnb3RvIGRyb3A7CisKKwkJaWYgKGwyY2FwX2NoZWNrX2ZjcyhwaSwgc2tiKSkKKwkJCWdvdG8gZHJvcDsKKworCQl0eF9zZXEgPSBfX2dldF90eHNlcShjb250cm9sKTsKKworCQlpZiAocGktPmV4cGVjdGVkX3R4X3NlcSA9PSB0eF9zZXEpCisJCQlwaS0+ZXhwZWN0ZWRfdHhfc2VxID0gKHBpLT5leHBlY3RlZF90eF9zZXEgKyAxKSAlIDY0OworCQllbHNlCisJCQlwaS0+ZXhwZWN0ZWRfdHhfc2VxID0gdHhfc2VxICsgMTsKKworCQllcnIgPSBsMmNhcF9zYXJfcmVhc3NlbWJseV9zZHUoc2ssIHNrYiwgY29udHJvbCk7CisKIAkJZ290byBkb25lOwogCisJZGVmYXVsdDoKKwkJQlRfREJHKCJzayAlcDogYmFkIG1vZGUgMHglMi4yeCIsIHNrLCBsMmNhcF9waShzayktPm1vZGUpOworCQlicmVhazsKKwl9CisKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAKQEAgLTI0MzMsNiArMzU5MiwxMSBAQAogCWNpZCA9IF9fbGUxNl90b19jcHUobGgtPmNpZCk7CiAJbGVuID0gX19sZTE2X3RvX2NwdShsaC0+bGVuKTsKIAorCWlmIChsZW4gIT0gc2tiLT5sZW4pIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybjsKKwl9CisKIAlCVF9EQkcoImxlbiAlZCwgY2lkIDB4JTQuNHgiLCBsZW4sIGNpZCk7CiAKIAlzd2l0Y2ggKGNpZCkgewpAQCAtMjQ0MSw3ICszNjA1LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX0NJRF9DT05OX0xFU1M6Ci0JCXBzbSA9IGdldF91bmFsaWduZWQoKF9fbGUxNiAqKSBza2ItPmRhdGEpOworCQlwc20gPSBnZXRfdW5hbGlnbmVkX2xlMTYoc2tiLT5kYXRhKTsKIAkJc2tiX3B1bGwoc2tiLCAyKTsKIAkJbDJjYXBfY29ubGVzc19jaGFubmVsKGNvbm4sIHBzbSwgc2tiKTsKIAkJYnJlYWs7CkBAIC0yODI4LDYgKzM5OTIsOSBAQAogbW9kdWxlX2luaXQobDJjYXBfaW5pdCk7CiBtb2R1bGVfZXhpdChsMmNhcF9leGl0KTsKIAorbW9kdWxlX3BhcmFtKGVuYWJsZV9lcnRtLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX2VydG0sICJFbmFibGUgZW5oYW5jZWQgcmV0cmFuc21pc3Npb24gbW9kZSIpOworCiBNT0RVTEVfQVVUSE9SKCJNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFubi5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkJsdWV0b290aCBMMkNBUCB2ZXIgIiBWRVJTSU9OKTsKIE1PRFVMRV9WRVJTSU9OKFZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCmluZGV4IDk0YjMzODguLjI1NjkyYmMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKQEAgLTI0NCw2ICsyNDQsMzMgQEAKIAkJCQkJCQkJYXV0aF90eXBlKTsKIH0KIAorc3RhdGljIHZvaWQgcmZjb21tX3Nlc3Npb25fdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnMgPSAodm9pZCAqKSBhcmc7CisKKwlCVF9EQkcoInNlc3Npb24gJXAgc3RhdGUgJWxkIiwgcywgcy0+c3RhdGUpOworCisJc2V0X2JpdChSRkNPTU1fVElNRURfT1VULCAmcy0+ZmxhZ3MpOworCXJmY29tbV9zZXNzaW9uX3B1dChzKTsKKwlyZmNvbW1fc2NoZWR1bGUoUkZDT01NX1NDSEVEX1RJTUVPKTsKK30KKworc3RhdGljIHZvaWQgcmZjb21tX3Nlc3Npb25fc2V0X3RpbWVyKHN0cnVjdCByZmNvbW1fc2Vzc2lvbiAqcywgbG9uZyB0aW1lb3V0KQoreworCUJUX0RCRygic2Vzc2lvbiAlcCBzdGF0ZSAlbGQgdGltZW91dCAlbGQiLCBzLCBzLT5zdGF0ZSwgdGltZW91dCk7CisKKwlpZiAoIW1vZF90aW1lcigmcy0+dGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KSkKKwkJcmZjb21tX3Nlc3Npb25faG9sZChzKTsKK30KKworc3RhdGljIHZvaWQgcmZjb21tX3Nlc3Npb25fY2xlYXJfdGltZXIoc3RydWN0IHJmY29tbV9zZXNzaW9uICpzKQoreworCUJUX0RCRygic2Vzc2lvbiAlcCBzdGF0ZSAlbGQiLCBzLCBzLT5zdGF0ZSk7CisKKwlpZiAodGltZXJfcGVuZGluZygmcy0+dGltZXIpICYmIGRlbF90aW1lcigmcy0+dGltZXIpKQorCQlyZmNvbW1fc2Vzc2lvbl9wdXQocyk7Cit9CisKIC8qIC0tLS0gUkZDT01NIERMQ3MgLS0tLSAqLwogc3RhdGljIHZvaWQgcmZjb21tX2RsY190aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMzIwLDYgKzM0Nyw3IEBACiAKIAlyZmNvbW1fc2Vzc2lvbl9ob2xkKHMpOwogCisJcmZjb21tX3Nlc3Npb25fY2xlYXJfdGltZXIocyk7CiAJcmZjb21tX2RsY19ob2xkKGQpOwogCWxpc3RfYWRkKCZkLT5saXN0LCAmcy0+ZGxjcyk7CiAJZC0+c2Vzc2lvbiA9IHM7CkBAIC0zMzUsNiArMzYzLDkgQEAKIAlkLT5zZXNzaW9uID0gTlVMTDsKIAlyZmNvbW1fZGxjX3B1dChkKTsKIAorCWlmIChsaXN0X2VtcHR5KCZzLT5kbGNzKSkKKwkJcmZjb21tX3Nlc3Npb25fc2V0X3RpbWVyKHMsIFJGQ09NTV9JRExFX1RJTUVPVVQpOworCiAJcmZjb21tX3Nlc3Npb25fcHV0KHMpOwogfQogCkBAIC01NjcsNiArNTk4LDggQEAKIAogCUJUX0RCRygic2Vzc2lvbiAlcCBzb2NrICVwIiwgcywgc29jayk7CiAKKwlzZXR1cF90aW1lcigmcy0+dGltZXIsIHJmY29tbV9zZXNzaW9uX3RpbWVvdXQsICh1bnNpZ25lZCBsb25nKSBzKTsKKwogCUlOSVRfTElTVF9IRUFEKCZzLT5kbGNzKTsKIAlzLT5zdGF0ZSA9IHN0YXRlOwogCXMtPnNvY2sgID0gc29jazsKQEAgLTU5OCw2ICs2MzEsNyBAQAogCWlmIChzdGF0ZSA9PSBCVF9DT05ORUNURUQpCiAJCXJmY29tbV9zZW5kX2Rpc2MocywgMCk7CiAKKwlyZmNvbW1fc2Vzc2lvbl9jbGVhcl90aW1lcihzKTsKIAlzb2NrX3JlbGVhc2Uocy0+c29jayk7CiAJa2ZyZWUocyk7CiAKQEAgLTYzOSw2ICs2NzMsNyBAQAogCQlfX3JmY29tbV9kbGNfY2xvc2UoZCwgZXJyKTsKIAl9CiAKKwlyZmNvbW1fc2Vzc2lvbl9jbGVhcl90aW1lcihzKTsKIAlyZmNvbW1fc2Vzc2lvbl9wdXQocyk7CiB9CiAKQEAgLTE4NzksNiArMTkxNCwxMiBAQAogCQlzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnM7CiAJCXMgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZmNvbW1fc2Vzc2lvbiwgbGlzdCk7CiAKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fVElNRURfT1VULCAmcy0+ZmxhZ3MpKSB7CisJCQlzLT5zdGF0ZSA9IEJUX0RJU0NPTk47CisJCQlyZmNvbW1fc2VuZF9kaXNjKHMsIDApOworCQkJY29udGludWU7CisJCX0KKwogCQlpZiAocy0+c3RhdGUgPT0gQlRfTElTVEVOKSB7CiAJCQlyZmNvbW1fYWNjZXB0X2Nvbm5lY3Rpb24ocyk7CiAJCQljb250aW51ZTsKQEAgLTIwODAsNyArMjEyMSw3IEBACiAvKiAtLS0tIEluaXRpYWxpemF0aW9uIC0tLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHJmY29tbV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKKwlpbnQgZXJyOwogCiAJbDJjYXBfbG9hZCgpOwogCkBAIC0yMDg4LDMzICsyMTI5LDM1IEBACiAKIAlyZmNvbW1fdGhyZWFkID0ga3RocmVhZF9ydW4ocmZjb21tX3J1biwgTlVMTCwgImtyZmNvbW1kIik7CiAJaWYgKElTX0VSUihyZmNvbW1fdGhyZWFkKSkgewotCQlyZXQgPSBQVFJfRVJSKHJmY29tbV90aHJlYWQpOwotCQlnb3RvIG91dF90aHJlYWQ7CisJCWVyciA9IFBUUl9FUlIocmZjb21tX3RocmVhZCk7CisJCWdvdG8gdW5yZWdpc3RlcjsKIAl9CiAKIAlpZiAoY2xhc3NfY3JlYXRlX2ZpbGUoYnRfY2xhc3MsICZjbGFzc19hdHRyX3JmY29tbV9kbGMpIDwgMCkKIAkJQlRfRVJSKCJGYWlsZWQgdG8gY3JlYXRlIFJGQ09NTSBpbmZvIGZpbGUiKTsKIAotCXJldCA9IHJmY29tbV9pbml0X3R0eXMoKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF90dHk7CisJZXJyID0gcmZjb21tX2luaXRfdHR5cygpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHN0b3A7CiAKLQlyZXQgPSByZmNvbW1faW5pdF9zb2NrZXRzKCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfc29jazsKKwllcnIgPSByZmNvbW1faW5pdF9zb2NrZXRzKCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gY2xlYW51cDsKIAogCUJUX0lORk8oIlJGQ09NTSB2ZXIgJXMiLCBWRVJTSU9OKTsKIAogCXJldHVybiAwOwogCi1vdXRfc29jazoKK2NsZWFudXA6CiAJcmZjb21tX2NsZWFudXBfdHR5cygpOwotb3V0X3R0eToKKworc3RvcDoKIAlrdGhyZWFkX3N0b3AocmZjb21tX3RocmVhZCk7Ci1vdXRfdGhyZWFkOgorCit1bnJlZ2lzdGVyOgogCWhjaV91bnJlZ2lzdGVyX2NiKCZyZmNvbW1fY2IpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcmZjb21tX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvc2NvLmMgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCmluZGV4IDUxYWUwYzMuLjEzYzI3ZjEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvc2NvLmMKKysrIGIvbmV0L2JsdWV0b290aC9zY28uYwpAQCAtMzU5LDIwICszNTksOSBAQAogCXNvY2tfcHV0KHNrKTsKIH0KIAotLyogQ2xvc2Ugc29ja2V0LgotICogTXVzdCBiZSBjYWxsZWQgb24gdW5sb2NrZWQgc29ja2V0LgotICovCi1zdGF0aWMgdm9pZCBzY29fc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdm9pZCBfX3Njb19zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzaykKIHsKLQlzdHJ1Y3Qgc2NvX2Nvbm4gKmNvbm47Ci0KLQlzY29fc29ja19jbGVhcl90aW1lcihzayk7Ci0KLQlsb2NrX3NvY2soc2spOwotCi0JY29ubiA9IHNjb19waShzayktPmNvbm47Ci0KLQlCVF9EQkcoInNrICVwIHN0YXRlICVkIGNvbm4gJXAgc29ja2V0ICVwIiwgc2ssIHNrLT5za19zdGF0ZSwgY29ubiwgc2stPnNrX3NvY2tldCk7CisJQlRfREJHKCJzayAlcCBzdGF0ZSAlZCBzb2NrZXQgJXAiLCBzaywgc2stPnNrX3N0YXRlLCBzay0+c2tfc29ja2V0KTsKIAogCXN3aXRjaCAoc2stPnNrX3N0YXRlKSB7CiAJY2FzZSBCVF9MSVNURU46CkBAIC0zOTAsOSArMzc5LDE1IEBACiAJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTsKIAkJYnJlYWs7CiAJfQorfQogCisvKiBNdXN0IGJlIGNhbGxlZCBvbiB1bmxvY2tlZCBzb2NrZXQuICovCitzdGF0aWMgdm9pZCBzY29fc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spCit7CisJc2NvX3NvY2tfY2xlYXJfdGltZXIoc2spOworCWxvY2tfc29jayhzayk7CisJX19zY29fc29ja19jbG9zZShzayk7CiAJcmVsZWFzZV9zb2NrKHNrKTsKLQogCXNjb19zb2NrX2tpbGwoc2spOwogfQogCkBAIC03NDgsNiArNzQzLDMwIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBzY29fc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCWludCBlcnIgPSAwOworCisJQlRfREJHKCJzb2NrICVwLCBzayAlcCIsIHNvY2ssIHNrKTsKKworCWlmICghc2spCisJCXJldHVybiAwOworCisJbG9ja19zb2NrKHNrKTsKKwlpZiAoIXNrLT5za19zaHV0ZG93bikgeworCQlzay0+c2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLOworCQlzY29fc29ja19jbGVhcl90aW1lcihzayk7CisJCV9fc2NvX3NvY2tfY2xvc2Uoc2spOworCisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfTElOR0VSKSAmJiBzay0+c2tfbGluZ2VydGltZSkKKwkJCWVyciA9IGJ0X3NvY2tfd2FpdF9zdGF0ZShzaywgQlRfQ0xPU0VELAorCQkJCQkJCXNrLT5za19saW5nZXJ0aW1lKTsKKwl9CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IHNjb19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKQEAgLTk2OSw3ICs5ODgsNyBAQAogCS5pb2N0bAkJPSBidF9zb2NrX2lvY3RsLAogCS5tbWFwCQk9IHNvY2tfbm9fbW1hcCwKIAkuc29ja2V0cGFpcgk9IHNvY2tfbm9fc29ja2V0cGFpciwKLQkuc2h1dGRvd24JPSBzb2NrX25vX3NodXRkb3duLAorCS5zaHV0ZG93bgk9IHNjb19zb2NrX3NodXRkb3duLAogCS5zZXRzb2Nrb3B0CT0gc2NvX3NvY2tfc2V0c29ja29wdCwKIAkuZ2V0c29ja29wdAk9IHNjb19zb2NrX2dldHNvY2tvcHQKIH07CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwppbmRleCAxODUzOGQ3Li4wN2EwNzc3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCisrKyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJicl9wcml2YXRlLmgiCiAKIC8qIG5ldCBkZXZpY2UgdHJhbnNtaXQgYWx3YXlzIGNhbGxlZCB3aXRoIG5vIEJIIChwcmVlbXB0X2Rpc2FibGVkKSAqLwotaW50IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCituZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGRldik7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqZGVzdCA9IHNrYi0+ZGF0YTsKQEAgLTM5LDcgKzM5LDcgQEAKIAllbHNlCiAJCWJyX2Zsb29kX2RlbGl2ZXIoYnIsIHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IGJyX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCmluZGV4IGQyYzI3YzguLmJjMTcwNGEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCisrKyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCkBAIC0yMiw3ICsyMiw4IEBACiBzdGF0aWMgaW5saW5lIGludCBzaG91bGRfZGVsaXZlcihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogCQkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXJldHVybiAoc2tiLT5kZXYgIT0gcC0+ZGV2ICYmIHAtPnN0YXRlID09IEJSX1NUQVRFX0ZPUldBUkRJTkcpOworCXJldHVybiAoKChwLT5mbGFncyAmIEJSX0hBSVJQSU5fTU9ERSkgfHwgc2tiLT5kZXYgIT0gcC0+ZGV2KSAmJgorCQlwLT5zdGF0ZSA9PSBCUl9TVEFURV9GT1JXQVJESU5HKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBwYWNrZXRfbGVuZ3RoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lmLmMgYi9uZXQvYnJpZGdlL2JyX2lmLmMKaW5kZXggZWI0MDRkYy4uMTQyZWJhYyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfaWYuYwpAQCAtMjU2LDYgKzI1Niw3IEBACiAJcC0+cGF0aF9jb3N0ID0gcG9ydF9jb3N0KGRldik7CiAJcC0+cHJpb3JpdHkgPSAweDgwMDAgPj4gQlJfUE9SVF9CSVRTOwogCXAtPnBvcnRfbm8gPSBpbmRleDsKKwlwLT5mbGFncyA9IDA7CiAJYnJfaW5pdF9wb3J0KHApOwogCXAtPnN0YXRlID0gQlJfU1RBVEVfRElTQUJMRUQ7CiAJYnJfc3RwX3BvcnRfdGltZXJfaW5pdChwKTsKQEAgLTI2Myw2ICsyNjQsMTAgQEAKIAlyZXR1cm4gcDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBicl90eXBlID0geworCS5uYW1lCT0gImJyaWRnZSIsCit9OworCiBpbnQgYnJfYWRkX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTI3OSw2ICsyODQsOCBAQAogCQkJZ290byBvdXRfZnJlZTsKIAl9CiAKKwlTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCAmYnJfdHlwZSk7CisKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggZDIyZjYxMS4uOTA3YTgyZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC0zNTksNyArMzU5LDcgQEAKIAkJCQl9LAogCQkJCS5wcm90byA9IDAsCiAJCQl9OwotCQkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChkZXYpOworCQkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwogCiAJCQkvKiBJZiBlcnIgZXF1YWxzIC1FSE9TVFVOUkVBQ0ggdGhlIGVycm9yIGlzIGR1ZSB0byBhCiAJCQkgKiBtYXJ0aWFuIGRlc3RpbmF0aW9uIG9yIGR1ZSB0byB0aGUgZmFjdCB0aGF0CkBAIC05MDUsNDYgKzkwNSw2MiBAQAogICogRm9yIGJyX25mX3Bvc3Rfcm91dGluZywgd2UgbmVlZCAocHJpbyA9IE5GX0JSX1BSSV9MQVNUKSwgYmVjYXVzZQogICogaXBfcmVmcmFnKCkgY2FuIHJldHVybiBORl9TVE9MRU4uICovCiBzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGJyX25mX29wc1tdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JeyAuaG9vayA9IGJyX25mX3ByZV9yb3V0aW5nLAotCSAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JICAucGYgPSBQRl9CUklER0UsCi0JICAuaG9va251bSA9IE5GX0JSX1BSRV9ST1VUSU5HLAotCSAgLnByaW9yaXR5ID0gTkZfQlJfUFJJX0JSTkYsIH0sCi0JeyAuaG9vayA9IGJyX25mX2xvY2FsX2luLAotCSAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JICAucGYgPSBQRl9CUklER0UsCi0JICAuaG9va251bSA9IE5GX0JSX0xPQ0FMX0lOLAotCSAgLnByaW9yaXR5ID0gTkZfQlJfUFJJX0JSTkYsIH0sCi0JeyAuaG9vayA9IGJyX25mX2ZvcndhcmRfaXAsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKLQkgIC5wZiA9IFBGX0JSSURHRSwKLQkgIC5ob29rbnVtID0gTkZfQlJfRk9SV0FSRCwKLQkgIC5wcmlvcml0eSA9IE5GX0JSX1BSSV9CUk5GIC0gMSwgfSwKLQl7IC5ob29rID0gYnJfbmZfZm9yd2FyZF9hcnAsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKLQkgIC5wZiA9IFBGX0JSSURHRSwKLQkgIC5ob29rbnVtID0gTkZfQlJfRk9SV0FSRCwKLQkgIC5wcmlvcml0eSA9IE5GX0JSX1BSSV9CUk5GLCB9LAotCXsgLmhvb2sgPSBicl9uZl9sb2NhbF9vdXQsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKLQkgIC5wZiA9IFBGX0JSSURHRSwKLQkgIC5ob29rbnVtID0gTkZfQlJfTE9DQUxfT1VULAotCSAgLnByaW9yaXR5ID0gTkZfQlJfUFJJX0ZJUlNULCB9LAotCXsgLmhvb2sgPSBicl9uZl9wb3N0X3JvdXRpbmcsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKLQkgIC5wZiA9IFBGX0JSSURHRSwKLQkgIC5ob29rbnVtID0gTkZfQlJfUE9TVF9ST1VUSU5HLAotCSAgLnByaW9yaXR5ID0gTkZfQlJfUFJJX0xBU1QsIH0sCi0JeyAuaG9vayA9IGlwX3NhYm90YWdlX2luLAotCSAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JICAucGYgPSBQRl9JTkVULAotCSAgLmhvb2tudW0gPSBORl9JTkVUX1BSRV9ST1VUSU5HLAotCSAgLnByaW9yaXR5ID0gTkZfSVBfUFJJX0ZJUlNULCB9LAotCXsgLmhvb2sgPSBpcF9zYWJvdGFnZV9pbiwKLQkgIC5vd25lciA9IFRISVNfTU9EVUxFLAotCSAgLnBmID0gUEZfSU5FVDYsCi0JICAuaG9va251bSA9IE5GX0lORVRfUFJFX1JPVVRJTkcsCi0JICAucHJpb3JpdHkgPSBORl9JUDZfUFJJX0ZJUlNULCB9LAorCXsKKwkJLmhvb2sgPSBicl9uZl9wcmVfcm91dGluZywKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wZiA9IFBGX0JSSURHRSwKKwkJLmhvb2tudW0gPSBORl9CUl9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5ID0gTkZfQlJfUFJJX0JSTkYsCisJfSwKKwl7CisJCS5ob29rID0gYnJfbmZfbG9jYWxfaW4sCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucGYgPSBQRl9CUklER0UsCisJCS5ob29rbnVtID0gTkZfQlJfTE9DQUxfSU4sCisJCS5wcmlvcml0eSA9IE5GX0JSX1BSSV9CUk5GLAorCX0sCisJeworCQkuaG9vayA9IGJyX25mX2ZvcndhcmRfaXAsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucGYgPSBQRl9CUklER0UsCisJCS5ob29rbnVtID0gTkZfQlJfRk9SV0FSRCwKKwkJLnByaW9yaXR5ID0gTkZfQlJfUFJJX0JSTkYgLSAxLAorCX0sCisJeworCQkuaG9vayA9IGJyX25mX2ZvcndhcmRfYXJwLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBmID0gUEZfQlJJREdFLAorCQkuaG9va251bSA9IE5GX0JSX0ZPUldBUkQsCisJCS5wcmlvcml0eSA9IE5GX0JSX1BSSV9CUk5GLAorCX0sCisJeworCQkuaG9vayA9IGJyX25mX2xvY2FsX291dCwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wZiA9IFBGX0JSSURHRSwKKwkJLmhvb2tudW0gPSBORl9CUl9MT0NBTF9PVVQsCisJCS5wcmlvcml0eSA9IE5GX0JSX1BSSV9GSVJTVCwKKwl9LAorCXsKKwkJLmhvb2sgPSBicl9uZl9wb3N0X3JvdXRpbmcsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucGYgPSBQRl9CUklER0UsCisJCS5ob29rbnVtID0gTkZfQlJfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkgPSBORl9CUl9QUklfTEFTVCwKKwl9LAorCXsKKwkJLmhvb2sgPSBpcF9zYWJvdGFnZV9pbiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wZiA9IFBGX0lORVQsCisJCS5ob29rbnVtID0gTkZfSU5FVF9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5ID0gTkZfSVBfUFJJX0ZJUlNULAorCX0sCisJeworCQkuaG9vayA9IGlwX3NhYm90YWdlX2luLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBmID0gUEZfSU5FVDYsCisJCS5ob29rbnVtID0gTkZfSU5FVF9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCwKKwl9LAogfTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggZDViNTUzNy4uMjExNGU0NSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKQEAgLTgxLDYgKzgxLDkgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJbWVzc2FnZV9hZ2VfdGltZXI7CiAJc3RydWN0IGtvYmplY3QJCQlrb2JqOwogCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKKworCXVuc2lnbmVkIGxvbmcgCQkJZmxhZ3M7CisjZGVmaW5lIEJSX0hBSVJQSU5fTU9ERQkJMHgwMDAwMDAwMQogfTsKIAogc3RydWN0IG5ldF9icmlkZ2UKQEAgLTE0MCw3ICsxNDMsOCBAQAogCiAvKiBicl9kZXZpY2UuYyAqLwogZXh0ZXJuIHZvaWQgYnJfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBuZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKiBicl9mZGIuYyAqLwogZXh0ZXJuIGludCBicl9mZGJfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3RwLmMgYi9uZXQvYnJpZGdlL2JyX3N0cC5jCmluZGV4IDA2NjA1MTUuLmZkM2Y4ZDYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zdHAuYwpAQCAtMjEsNyArMjEsNyBAQAogICovCiAjZGVmaW5lIE1FU1NBR0VfQUdFX0lOQ1IJKChIWiA8IDI1NikgPyAxIDogKEhaLzI1NikpCiAKLXN0YXRpYyBjb25zdCBjaGFyICpicl9wb3J0X3N0YXRlX25hbWVzW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnJfcG9ydF9zdGF0ZV9uYW1lc1tdID0gewogCVtCUl9TVEFURV9ESVNBQkxFRF0gPSAiZGlzYWJsZWQiLAogCVtCUl9TVEFURV9MSVNURU5JTkddID0gImxpc3RlbmluZyIsCiAJW0JSX1NUQVRFX0xFQVJOSU5HXSA9ICJsZWFybmluZyIsCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N5c2ZzX2lmLmMgYi9uZXQvYnJpZGdlL2JyX3N5c2ZzX2lmLmMKaW5kZXggNGEzY2RmOC4uODIwNjQzYSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zeXNmc19pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3lzZnNfaWYuYwpAQCAtMTQzLDYgKzE0MywyMiBAQAogfQogc3RhdGljIEJSUE9SVF9BVFRSKGZsdXNoLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9mbHVzaCk7CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfaGFpcnBpbl9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgaGFpcnBpbl9tb2RlID0gKHAtPmZsYWdzICYgQlJfSEFJUlBJTl9NT0RFKSA/IDEgOiAwOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBoYWlycGluX21vZGUpOworfQorc3RhdGljIHNzaXplX3Qgc3RvcmVfaGFpcnBpbl9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGxvbmcgdikKK3sKKwlpZiAodikKKwkJcC0+ZmxhZ3MgfD0gQlJfSEFJUlBJTl9NT0RFOworCWVsc2UKKwkJcC0+ZmxhZ3MgJj0gfkJSX0hBSVJQSU5fTU9ERTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBCUlBPUlRfQVRUUihoYWlycGluX21vZGUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBzaG93X2hhaXJwaW5fbW9kZSwgc3RvcmVfaGFpcnBpbl9tb2RlKTsKKwogc3RhdGljIHN0cnVjdCBicnBvcnRfYXR0cmlidXRlICpicnBvcnRfYXR0cnNbXSA9IHsKIAkmYnJwb3J0X2F0dHJfcGF0aF9jb3N0LAogCSZicnBvcnRfYXR0cl9wcmlvcml0eSwKQEAgLTE1OSw2ICsxNzUsNyBAQAogCSZicnBvcnRfYXR0cl9mb3J3YXJkX2RlbGF5X3RpbWVyLAogCSZicnBvcnRfYXR0cl9ob2xkX3RpbWVyLAogCSZicnBvcnRfYXR0cl9mbHVzaCwKKwkmYnJwb3J0X2F0dHJfaGFpcnBpbl9tb2RlLAogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYwppbmRleCBhOTRmM2NjLi5lNGVhM2ZkIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCkBAIC01MCwxNCArNTAsNiBAQAogCXVuc2lnbmVkIGNoYXIgaXBfZHN0WzRdOwogfTsKIAotc3RhdGljIHZvaWQgcHJpbnRfTUFDKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnApCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKywgcCsrKQotCQlwcmludGsoIiUwMnglYyIsICpwLCBpID09IEVUSF9BTEVOIC0gMSA/ICcgJzonOicpOwotfQotCiBzdGF0aWMgdm9pZAogcHJpbnRfcG9ydHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdWludDhfdCBwcm90b2NvbCwgaW50IG9mZnNldCkKIHsKQEAgLTg4LDE0ICs4MCwxMSBAQAogCXVuc2lnbmVkIGludCBiaXRtYXNrOwogCiAJc3Bpbl9sb2NrX2JoKCZlYnRfbG9nX2xvY2spOwotCXByaW50aygiPCVjPiVzIElOPSVzIE9VVD0lcyBNQUMgc291cmNlID0gIiwgJzAnICsgbG9naW5mby0+dS5sb2cubGV2ZWwsCi0JICAgICAgIHByZWZpeCwgaW4gPyBpbi0+bmFtZSA6ICIiLCBvdXQgPyBvdXQtPm5hbWUgOiAiIik7Ci0KLQlwcmludF9NQUMoZXRoX2hkcihza2IpLT5oX3NvdXJjZSk7Ci0JcHJpbnRrKCJNQUMgZGVzdCA9ICIpOwotCXByaW50X01BQyhldGhfaGRyKHNrYiktPmhfZGVzdCk7Ci0KLQlwcmludGsoInByb3RvID0gMHglMDR4IiwgbnRvaHMoZXRoX2hkcihza2IpLT5oX3Byb3RvKSk7CisJcHJpbnRrKCI8JWM+JXMgSU49JXMgT1VUPSVzIE1BQyBzb3VyY2UgPSAlcE0gTUFDIGRlc3QgPSAlcE0gcHJvdG8gPSAweCUwNHgiLAorCSAgICAgICAnMCcgKyBsb2dpbmZvLT51LmxvZy5sZXZlbCwgcHJlZml4LAorCSAgICAgICBpbiA/IGluLT5uYW1lIDogIiIsIG91dCA/IG91dC0+bmFtZSA6ICIiLAorCSAgICAgICBldGhfaGRyKHNrYiktPmhfc291cmNlLCBldGhfaGRyKHNrYiktPmhfZGVzdCwKKwkgICAgICAgbnRvaHMoZXRoX2hkcihza2IpLT5oX3Byb3RvKSk7CiAKIAlpZiAobG9naW5mby0+dHlwZSA9PSBORl9MT0dfVFlQRV9MT0cpCiAJCWJpdG1hc2sgPSBsb2dpbmZvLT51LmxvZy5sb2dmbGFnczsKQEAgLTE3MSwxMiArMTYwLDggQEAKIAkJCQlwcmludGsoIiBJTkNPTVBMRVRFIEFSUCBwYXlsb2FkIik7CiAJCQkJZ290byBvdXQ7CiAJCQl9Ci0JCQlwcmludGsoIiBBUlAgTUFDIFNSQz0iKTsKLQkJCXByaW50X01BQyhhcC0+bWFjX3NyYyk7Ci0JCQlwcmludGsoIiBBUlAgSVAgU1JDPSVwSTQiLCBhcC0+aXBfc3JjKTsKLQkJCXByaW50aygiIEFSUCBNQUMgRFNUPSIpOwotCQkJcHJpbnRfTUFDKGFwLT5tYWNfZHN0KTsKLQkJCXByaW50aygiIEFSUCBJUCBEU1Q9JXBJNCIsIGFwLT5pcF9kc3QpOworCQkJcHJpbnRrKCIgQVJQIE1BQyBTUkM9JXBNIEFSUCBJUCBTUkM9JXBJNCBBUlAgTUFDIERTVD0lcE0gQVJQIElQIERTVD0lcEk0IiwKKwkJCQkJYXAtPm1hY19zcmMsIGFwLT5pcF9zcmMsIGFwLT5tYWNfZHN0LCBhcC0+aXBfZHN0KTsKIAkJfQogCX0KIG91dDoKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCmluZGV4IDEzM2VlYWUuLmNlNTA2ODggMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJaWYgKHVsb2dpbmZvLT5xdGhyZXNob2xkID4gRUJUX1VMT0dfTUFYX1FMRU4pCiAJCXVsb2dpbmZvLT5xdGhyZXNob2xkID0gRUJUX1VMT0dfTUFYX1FMRU47CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgZWJ0X3Vsb2dfdGdfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYwppbmRleCBjNzUxMTExLi5kMzJhYjEzIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBlYnRfdGFibGUgYnJvdXRlX3RhYmxlID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWJ0X3RhYmxlIGJyb3V0ZV90YWJsZSA9CiB7CiAJLm5hbWUJCT0gImJyb3V0ZSIsCiAJLnRhYmxlCQk9ICZpbml0aWFsX3RhYmxlLApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMKaW5kZXggYTVlZWE3Mi4uNjBiMWE2YyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jCkBAIC01MCw3ICs1MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZWJ0X3RhYmxlIGZyYW1lX2ZpbHRlciA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGVidF90YWJsZSBmcmFtZV9maWx0ZXIgPQogewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS50YWJsZQkJPSAmaW5pdGlhbF90YWJsZSwKQEAgLTc3LDIxICs3NywyMSBAQAogCXsKIAkJLmhvb2sJCT0gZWJ0X2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0JSSURHRSwKKwkJLnBmCQk9IE5GUFJPVE9fQlJJREdFLAogCQkuaG9va251bQk9IE5GX0JSX0xPQ0FMX0lOLAogCQkucHJpb3JpdHkJPSBORl9CUl9QUklfRklMVEVSX0JSSURHRUQsCiAJfSwKIAl7CiAJCS5ob29rCQk9IGVidF9pbl9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9CUklER0UsCisJCS5wZgkJPSBORlBST1RPX0JSSURHRSwKIAkJLmhvb2tudW0JPSBORl9CUl9GT1JXQVJELAogCQkucHJpb3JpdHkJPSBORl9CUl9QUklfRklMVEVSX0JSSURHRUQsCiAJfSwKIAl7CiAJCS5ob29rCQk9IGVidF9vdXRfaG9vaywKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfQlJJREdFLAorCQkucGYJCT0gTkZQUk9UT19CUklER0UsCiAJCS5ob29rbnVtCT0gTkZfQlJfTE9DQUxfT1VULAogCQkucHJpb3JpdHkJPSBORl9CUl9QUklfRklMVEVSX09USEVSLAogCX0sCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9uYXQuYwppbmRleCA2MDI0YzU1Li40YTk4ODA0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMKQEAgLTc3LDIxICs3NywyMSBAQAogCXsKIAkJLmhvb2sJCT0gZWJ0X25hdF9vdXQsCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0JSSURHRSwKKwkJLnBmCQk9IE5GUFJPVE9fQlJJREdFLAogCQkuaG9va251bQk9IE5GX0JSX0xPQ0FMX09VVCwKIAkJLnByaW9yaXR5CT0gTkZfQlJfUFJJX05BVF9EU1RfT1RIRVIsCiAJfSwKIAl7CiAJCS5ob29rCQk9IGVidF9uYXRfb3V0LAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9CUklER0UsCisJCS5wZgkJPSBORlBST1RPX0JSSURHRSwKIAkJLmhvb2tudW0JPSBORl9CUl9QT1NUX1JPVVRJTkcsCiAJCS5wcmlvcml0eQk9IE5GX0JSX1BSSV9OQVRfU1JDLAogCX0sCiAJewogCQkuaG9vawkJPSBlYnRfbmF0X2luLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9CUklER0UsCisJCS5wZgkJPSBORlBST1RPX0JSSURHRSwKIAkJLmhvb2tudW0JPSBORl9CUl9QUkVfUk9VVElORywKIAkJLnByaW9yaXR5CT0gTkZfQlJfUFJJX05BVF9EU1RfQlJJREdFRCwKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKaW5kZXggMzc5MjhkNS4uYmQxYzY1NCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCkBAIC0xMTAzLDIzICsxMTAzLDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RydWN0IGVidF90YWJsZSAqZWJ0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF90YWJsZSAqdGFibGUpCitzdHJ1Y3QgZWJ0X3RhYmxlICoKK2VidF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBlYnRfdGFibGUgKmlucHV0X3RhYmxlKQogewogCXN0cnVjdCBlYnRfdGFibGVfaW5mbyAqbmV3aW5mbzsKLQlzdHJ1Y3QgZWJ0X3RhYmxlICp0OworCXN0cnVjdCBlYnRfdGFibGUgKnQsICp0YWJsZTsKIAlzdHJ1Y3QgZWJ0X3JlcGxhY2Vfa2VybmVsICpyZXBsOwogCWludCByZXQsIGksIGNvdW50ZXJzaXplOwogCXZvaWQgKnA7CiAKLQlpZiAoIXRhYmxlIHx8ICEocmVwbCA9IHRhYmxlLT50YWJsZSkgfHwgIXJlcGwtPmVudHJpZXMgfHwKLQkgICAgcmVwbC0+ZW50cmllc19zaXplID09IDAgfHwKLQkgICAgcmVwbC0+Y291bnRlcnMgfHwgdGFibGUtPnByaXZhdGUpIHsKKwlpZiAoaW5wdXRfdGFibGUgPT0gTlVMTCB8fCAocmVwbCA9IGlucHV0X3RhYmxlLT50YWJsZSkgPT0gTlVMTCB8fAorCSAgICByZXBsLT5lbnRyaWVzID09IDAgfHwgcmVwbC0+ZW50cmllc19zaXplID09IDAgfHwKKwkgICAgcmVwbC0+Y291bnRlcnMgIT0gTlVMTCB8fCBpbnB1dF90YWJsZS0+cHJpdmF0ZSAhPSBOVUxMKSB7CiAJCUJVR1BSSU5UKCJCYWQgdGFibGUgZGF0YSBmb3IgZWJ0X3JlZ2lzdGVyX3RhYmxlISEhXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCiAJLyogRG9uJ3QgYWRkIG9uZSB0YWJsZSB0byBtdWx0aXBsZSBsaXN0cy4gKi8KLQl0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihzdHJ1Y3QgZWJ0X3RhYmxlKSwgR0ZQX0tFUk5FTCk7CisJdGFibGUgPSBrbWVtZHVwKGlucHV0X3RhYmxlLCBzaXplb2Yoc3RydWN0IGVidF90YWJsZSksIEdGUF9LRVJORUwpOwogCWlmICghdGFibGUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCBlNzMzNzI1Li5lZjFjNDNhIDEwMDY0NAotLS0gYS9uZXQvY2FuL2FmX2Nhbi5jCisrKyBiL25ldC9jYW4vYWZfY2FuLmMKQEAgLTY1MSwxMiArNjUxLDE2IEBACiAJc3RydWN0IGNhbl9mcmFtZSAqY2YgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXNrYi0+ZGF0YTsKIAlpbnQgbWF0Y2hlczsKIAotCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0NBTiB8fCAhbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKKwkJZ290byBkcm9wOwogCi0JQlVHX09OKHNrYi0+bGVuICE9IHNpemVvZihzdHJ1Y3QgY2FuX2ZyYW1lKSB8fCBjZi0+Y2FuX2RsYyA+IDgpOworCWlmIChXQVJOX09OQ0UoZGV2LT50eXBlICE9IEFSUEhSRF9DQU4gfHwKKwkJICAgICAgc2tiLT5sZW4gIT0gc2l6ZW9mKHN0cnVjdCBjYW5fZnJhbWUpIHx8CisJCSAgICAgIGNmLT5jYW5fZGxjID4gOCwKKwkJICAgICAgIlBGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBza2J1ZjogIgorCQkgICAgICAiZGV2IHR5cGUgJWQsIGxlbiAlZCwgY2FuX2RsYyAlZFxuIiwKKwkJICAgICAgZGV2LT50eXBlLCBza2ItPmxlbiwgY2YtPmNhbl9kbGMpKQorCQlnb3RvIGRyb3A7CiAKIAkvKiB1cGRhdGUgc3RhdGlzdGljcyAqLwogCWNhbl9zdGF0cy5yeF9mcmFtZXMrKzsKQEAgLTY4Miw3ICs2ODYsMTEgQEAKIAkJY2FuX3N0YXRzLm1hdGNoZXNfZGVsdGErKzsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CisKK2Ryb3A6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9iY20uYyBiL25ldC9jYW4vYmNtLmMKaW5kZXggNzI3MjBjNy4uNTk3ZGE0ZiAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9iY20uYworKysgYi9uZXQvY2FuL2JjbS5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KQEAgLTE0NiwyMyArMTQ3LDE4IEBACiAJcmV0dXJuICI/Pz8iOwogfQogCi1zdGF0aWMgaW50IGJjbV9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgYmNtX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7Ci0Jc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopZGF0YTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltLT5wcml2YXRlOwogCXN0cnVjdCBiY21fc29jayAqYm8gPSBiY21fc2soc2spOwogCXN0cnVjdCBiY21fb3AgKm9wOwogCi0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIj4+PiBzb2NrZXQgJXAiLAotCQkJc2stPnNrX3NvY2tldCk7Ci0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIiAvIHNrICVwIiwgc2spOwotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICIgLyBibyAlcCIsIGJvKTsKLQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiIC8gZHJvcHBlZCAlbHUiLAotCQkJYm8tPmRyb3BwZWRfdXNyX21zZ3MpOwotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICIgLyBib3VuZCAlcyIsCi0JCQliY21fcHJvY19nZXRpZm5hbWUoYm8tPmlmaW5kZXgpKTsKLQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiIDw8PFxuIik7CisJc2VxX3ByaW50ZihtLCAiPj4+IHNvY2tldCAlcCIsIHNrLT5za19zb2NrZXQpOworCXNlcV9wcmludGYobSwgIiAvIHNrICVwIiwgc2spOworCXNlcV9wcmludGYobSwgIiAvIGJvICVwIiwgYm8pOworCXNlcV9wcmludGYobSwgIiAvIGRyb3BwZWQgJWx1IiwgYm8tPmRyb3BwZWRfdXNyX21zZ3MpOworCXNlcV9wcmludGYobSwgIiAvIGJvdW5kICVzIiwgYmNtX3Byb2NfZ2V0aWZuYW1lKGJvLT5pZmluZGV4KSk7CisJc2VxX3ByaW50ZihtLCAiIDw8PFxuIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wLCAmYm8tPnJ4X29wcywgbGlzdCkgewogCkBAIC0xNzIsNzEgKzE2OCw2MiBAQAogCQlpZiAoIW9wLT5mcmFtZXNfYWJzKQogCQkJY29udGludWU7CiAKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkicnhfb3A6ICUwM1ggJS01cyAiLAorCQlzZXFfcHJpbnRmKG0sICJyeF9vcDogJTAzWCAlLTVzICIsCiAJCQkJb3AtPmNhbl9pZCwgYmNtX3Byb2NfZ2V0aWZuYW1lKG9wLT5pZmluZGV4KSk7Ci0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJbJWRdJWMgIiwKLQkJCQlvcC0+bmZyYW1lcywKKwkJc2VxX3ByaW50ZihtLCAiWyVkXSVjICIsIG9wLT5uZnJhbWVzLAogCQkJCShvcC0+ZmxhZ3MgJiBSWF9DSEVDS19ETEMpPydkJzonICcpOwogCQlpZiAob3AtPmt0X2l2YWwxLnR2NjQpCi0JCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAotCQkJCQkidGltZW89JWxsZCAiLAorCQkJc2VxX3ByaW50ZihtLCAidGltZW89JWxsZCAiLAogCQkJCQkobG9uZyBsb25nKQogCQkJCQlrdGltZV90b191cyhvcC0+a3RfaXZhbDEpKTsKIAogCQlpZiAob3AtPmt0X2l2YWwyLnR2NjQpCi0JCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAotCQkJCQkidGhyPSVsbGQgIiwKKwkJCXNlcV9wcmludGYobSwgInRocj0lbGxkICIsCiAJCQkJCShsb25nIGxvbmcpCiAJCQkJCWt0aW1lX3RvX3VzKG9wLT5rdF9pdmFsMikpOwogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIiMgcmVjdiAlbGQgKCVsZCkgPT4gcmVkdWN0aW9uOiAiLAorCQlzZXFfcHJpbnRmKG0sICIjIHJlY3YgJWxkICglbGQpID0+IHJlZHVjdGlvbjogIiwKIAkJCQlvcC0+ZnJhbWVzX2ZpbHRlcmVkLCBvcC0+ZnJhbWVzX2Ficyk7CiAKIAkJcmVkdWN0aW9uID0gMTAwIC0gKG9wLT5mcmFtZXNfZmlsdGVyZWQgKiAxMDApIC8gb3AtPmZyYW1lc19hYnM7CiAKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIiVzJWxkJSVcbiIsCisJCXNlcV9wcmludGYobSwgIiVzJWxkJSVcbiIsCiAJCQkJKHJlZHVjdGlvbiA9PSAxMDApPyJuZWFyICI6IiIsIHJlZHVjdGlvbik7Ci0KLQkJaWYgKGxlbiA+IFBBR0VfU0laRSAtIDIwMCkgewotCQkJLyogbWFyayBvdXRwdXQgY3V0IG9mZiAqLwotCQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIiguLilcbiIpOwotCQkJYnJlYWs7Ci0JCX0KIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wLCAmYm8tPnR4X29wcywgbGlzdCkgewogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJInR4X29wOiAlMDNYICVzIFslZF0gIiwKKwkJc2VxX3ByaW50ZihtLCAidHhfb3A6ICUwM1ggJXMgWyVkXSAiLAogCQkJCW9wLT5jYW5faWQsIGJjbV9wcm9jX2dldGlmbmFtZShvcC0+aWZpbmRleCksCiAJCQkJb3AtPm5mcmFtZXMpOwogCiAJCWlmIChvcC0+a3RfaXZhbDEudHY2NCkKLQkJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJ0MT0lbGxkICIsCisJCQlzZXFfcHJpbnRmKG0sICJ0MT0lbGxkICIsCiAJCQkJCShsb25nIGxvbmcpIGt0aW1lX3RvX3VzKG9wLT5rdF9pdmFsMSkpOwogCiAJCWlmIChvcC0+a3RfaXZhbDIudHY2NCkKLQkJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJ0Mj0lbGxkICIsCisJCQlzZXFfcHJpbnRmKG0sICJ0Mj0lbGxkICIsCiAJCQkJCShsb25nIGxvbmcpIGt0aW1lX3RvX3VzKG9wLT5rdF9pdmFsMikpOwogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICIjIHNlbnQgJWxkXG4iLAotCQkJCW9wLT5mcmFtZXNfYWJzKTsKLQotCQlpZiAobGVuID4gUEFHRV9TSVpFIC0gMTAwKSB7Ci0JCQkvKiBtYXJrIG91dHB1dCBjdXQgb2ZmICovCi0JCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiKC4uKVxuIik7Ci0JCQlicmVhazsKLQkJfQorCQlzZXFfcHJpbnRmKG0sICIjIHNlbnQgJWxkXG4iLCBvcC0+ZnJhbWVzX2Ficyk7CiAJfQotCi0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlxuIik7Ci0KLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuOworCXNlcV9wdXRjKG0sICdcbicpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJjbV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGJjbV9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiY21fcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBiY21fcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKgogICogYmNtX2Nhbl90eCAtIHNlbmQgdGhlIChuZXh0KSBDQU4gZnJhbWUgdG8gdGhlIGFwcHJvcHJpYXRlIENBTiBpbnRlcmZhY2UKICAqICAgICAgICAgICAgICBvZiB0aGUgZ2l2ZW4gYmNtIHR4IG9wCkBAIC0xNTE1LDkgKzE1MDIsOSBAQAogCWlmIChwcm9jX2RpcikgewogCQkvKiB1bmlxdWUgc29ja2V0IGFkZHJlc3MgYXMgZmlsZW5hbWUgKi8KIAkJc3ByaW50Zihiby0+cHJvY25hbWUsICIlcCIsIHNvY2spOwotCQliby0+YmNtX3Byb2NfcmVhZCA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoYm8tPnByb2NuYW1lLCAwNjQ0LAotCQkJCQkJCSAgIHByb2NfZGlyLAotCQkJCQkJCSAgIGJjbV9yZWFkX3Byb2MsIHNrKTsKKwkJYm8tPmJjbV9wcm9jX3JlYWQgPSBwcm9jX2NyZWF0ZV9kYXRhKGJvLT5wcm9jbmFtZSwgMDY0NCwKKwkJCQkJCSAgICAgcHJvY19kaXIsCisJCQkJCQkgICAgICZiY21fcHJvY19mb3BzLCBzayk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvY2FuL3Byb2MuYyBiL25ldC9jYW4vcHJvYy5jCmluZGV4IDE0NjM2NTMuLjliOWFkMjkgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vcHJvYy5jCisrKyBiL25ldC9jYW4vcHJvYy5jCkBAIC0xOTYsOCArMTk2LDggQEAKICAqCiAgKi8KIAotc3RhdGljIGludCBjYW5fcHJpbnRfcmN2bGlzdChjaGFyICpwYWdlLCBpbnQgbGVuLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqcnhfbGlzdCwKLQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGNhbl9wcmludF9yY3ZsaXN0KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGhsaXN0X2hlYWQgKnJ4X2xpc3QsCisJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCByZWNlaXZlciAqcjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKQEAgLTIwOCwxOTkgKzIwOCwxODggQEAKIAkJCSIgICAlLTVzICAlMDhYICAlMDh4ICAlMDh4ICAlMDh4ICAlOGxkICAlc1xuIiA6CiAJCQkiICAgJS01cyAgICAgJTAzWCAgICAlMDh4ICAlMDhseCAgJTA4bHggICU4bGQgICVzXG4iOwogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sIGZtdCwKLQkJCQlETkFNRShkZXYpLCByLT5jYW5faWQsIHItPm1hc2ssCisJCXNlcV9wcmludGYobSwgZm10LCBETkFNRShkZXYpLCByLT5jYW5faWQsIHItPm1hc2ssCiAJCQkJKHVuc2lnbmVkIGxvbmcpci0+ZnVuYywgKHVuc2lnbmVkIGxvbmcpci0+ZGF0YSwKIAkJCQlyLT5tYXRjaGVzLCByLT5pZGVudCk7Ci0KLQkJLyogZG9lcyBhIHR5cGljYWwgbGluZSBmaXQgaW50byB0aGUgY3VycmVudCBidWZmZXI/ICovCi0KLQkJLyogMTAwIEJ5dGVzIGJlZm9yZSBlbmQgb2YgYnVmZmVyICovCi0JCWlmIChsZW4gPiBQQUdFX1NJWkUgLSAxMDApIHsKLQkJCS8qIG1hcmsgb3V0cHV0IGN1dCBvZmYgKi8KLQkJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJCSIgICAoLi4pXG4iKTsKLQkJCWJyZWFrOwotCQl9CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGludCBjYW5fcHJpbnRfcmVjdl9iYW5uZXIoY2hhciAqcGFnZSwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGNhbl9wcmludF9yZWN2X2Jhbm5lcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJLyoKIAkgKiAgICAgICAgICAgICAgICAgIGNhbjEuICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCiAJICogICAgICAgICAgICAgICAgIC4uLi4uLi4gICAgICAgICAgMCAgdHAyMAogCSAqLwotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkiICBkZXZpY2UgICBjYW5faWQgICBjYW5fbWFzayAgZnVuY3Rpb24iCisJc2VxX3B1dHMobSwgIiAgZGV2aWNlICAgY2FuX2lkICAgY2FuX21hc2sgIGZ1bmN0aW9uIgogCQkJIiAgdXNlcmRhdGEgICBtYXRjaGVzICBpZGVudFxuIik7Ci0KLQlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgaW50IGNhbl9wcm9jX3JlYWRfc3RhdHMoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgY2FuX3N0YXRzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7CisJc2VxX3B1dGMobSwgJ1xuJyk7CisJc2VxX3ByaW50ZihtLCAiICU4bGQgdHJhbnNtaXR0ZWQgZnJhbWVzIChUWEYpXG4iLCBjYW5fc3RhdHMudHhfZnJhbWVzKTsKKwlzZXFfcHJpbnRmKG0sICIgJThsZCByZWNlaXZlZCBmcmFtZXMgKFJYRilcbiIsIGNhbl9zdGF0cy5yeF9mcmFtZXMpOworCXNlcV9wcmludGYobSwgIiAlOGxkIG1hdGNoZWQgZnJhbWVzIChSWE1GKVxuIiwgY2FuX3N0YXRzLm1hdGNoZXMpOwogCi0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlxuIik7Ci0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCSIgJThsZCB0cmFuc21pdHRlZCBmcmFtZXMgKFRYRilcbiIsCi0JCQljYW5fc3RhdHMudHhfZnJhbWVzKTsKLQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAotCQkJIiAlOGxkIHJlY2VpdmVkIGZyYW1lcyAoUlhGKVxuIiwgY2FuX3N0YXRzLnJ4X2ZyYW1lcyk7Ci0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCSIgJThsZCBtYXRjaGVkIGZyYW1lcyAoUlhNRilcbiIsIGNhbl9zdGF0cy5tYXRjaGVzKTsKLQotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJcbiIpOworCXNlcV9wdXRjKG0sICdcbicpOwogCiAJaWYgKGNhbl9zdGF0dGltZXIuZnVuY3Rpb24gPT0gY2FuX3N0YXRfdXBkYXRlKSB7Ci0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIiAlOGxkICUlIHRvdGFsIG1hdGNoIHJhdGlvIChSWE1SKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgJSUgdG90YWwgbWF0Y2ggcmF0aW8gKFJYTVIpXG4iLAogCQkJCWNhbl9zdGF0cy50b3RhbF9yeF9tYXRjaF9yYXRpbyk7CiAKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkiICU4bGQgZnJhbWVzL3MgdG90YWwgdHggcmF0ZSAoVFhSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgZnJhbWVzL3MgdG90YWwgdHggcmF0ZSAoVFhSKVxuIiwKIAkJCQljYW5fc3RhdHMudG90YWxfdHhfcmF0ZSk7Ci0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIiAlOGxkIGZyYW1lcy9zIHRvdGFsIHJ4IHJhdGUgKFJYUilcbiIsCisJCXNlcV9wcmludGYobSwgIiAlOGxkIGZyYW1lcy9zIHRvdGFsIHJ4IHJhdGUgKFJYUilcbiIsCiAJCQkJY2FuX3N0YXRzLnRvdGFsX3J4X3JhdGUpOwogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJcbiIpOworCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAotCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAotCQkJCSIgJThsZCAlJSBjdXJyZW50IG1hdGNoIHJhdGlvIChDUlhNUilcbiIsCisJCXNlcV9wcmludGYobSwgIiAlOGxkICUlIGN1cnJlbnQgbWF0Y2ggcmF0aW8gKENSWE1SKVxuIiwKIAkJCQljYW5fc3RhdHMuY3VycmVudF9yeF9tYXRjaF9yYXRpbyk7CiAKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkiICU4bGQgZnJhbWVzL3MgY3VycmVudCB0eCByYXRlIChDVFhSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgZnJhbWVzL3MgY3VycmVudCB0eCByYXRlIChDVFhSKVxuIiwKIAkJCQljYW5fc3RhdHMuY3VycmVudF90eF9yYXRlKTsKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkiICU4bGQgZnJhbWVzL3MgY3VycmVudCByeCByYXRlIChDUlhSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgZnJhbWVzL3MgY3VycmVudCByeCByYXRlIChDUlhSKVxuIiwKIAkJCQljYW5fc3RhdHMuY3VycmVudF9yeF9yYXRlKTsKIAotCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiXG4iKTsKKwkJc2VxX3B1dGMobSwgJ1xuJyk7CiAKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkiICU4bGQgJSUgbWF4IG1hdGNoIHJhdGlvIChNUlhNUilcbiIsCisJCXNlcV9wcmludGYobSwgIiAlOGxkICUlIG1heCBtYXRjaCByYXRpbyAoTVJYTVIpXG4iLAogCQkJCWNhbl9zdGF0cy5tYXhfcnhfbWF0Y2hfcmF0aW8pOwogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIiAlOGxkIGZyYW1lcy9zIG1heCB0eCByYXRlIChNVFhSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgZnJhbWVzL3MgbWF4IHR4IHJhdGUgKE1UWFIpXG4iLAogCQkJCWNhbl9zdGF0cy5tYXhfdHhfcmF0ZSk7Ci0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIiAlOGxkIGZyYW1lcy9zIG1heCByeCByYXRlIChNUlhSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgZnJhbWVzL3MgbWF4IHJ4IHJhdGUgKE1SWFIpXG4iLAogCQkJCWNhbl9zdGF0cy5tYXhfcnhfcmF0ZSk7CiAKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlxuIik7CisJCXNlcV9wdXRjKG0sICdcbicpOwogCX0KIAotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkiICU4bGQgY3VycmVudCByZWNlaXZlIGxpc3QgZW50cmllcyAoQ1JDVilcbiIsCisJc2VxX3ByaW50ZihtLCAiICU4bGQgY3VycmVudCByZWNlaXZlIGxpc3QgZW50cmllcyAoQ1JDVilcbiIsCiAJCQljYW5fcHN0YXRzLnJjdl9lbnRyaWVzKTsKLQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAotCQkJIiAlOGxkIG1heGltdW0gcmVjZWl2ZSBsaXN0IGVudHJpZXMgKE1SQ1YpXG4iLAorCXNlcV9wcmludGYobSwgIiAlOGxkIG1heGltdW0gcmVjZWl2ZSBsaXN0IGVudHJpZXMgKE1SQ1YpXG4iLAogCQkJY2FuX3BzdGF0cy5yY3ZfZW50cmllc19tYXgpOwogCiAJaWYgKGNhbl9wc3RhdHMuc3RhdHNfcmVzZXQpCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIlxuICU4bGQgc3RhdGlzdGljIHJlc2V0cyAoU1RSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiXG4gJThsZCBzdGF0aXN0aWMgcmVzZXRzIChTVFIpXG4iLAogCQkJCWNhbl9wc3RhdHMuc3RhdHNfcmVzZXQpOwogCiAJaWYgKGNhbl9wc3RhdHMudXNlcl9yZXNldCkKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkiICU4bGQgdXNlciBzdGF0aXN0aWMgcmVzZXRzIChVU1RSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgdXNlciBzdGF0aXN0aWMgcmVzZXRzIChVU1RSKVxuIiwKIAkJCQljYW5fcHN0YXRzLnVzZXJfcmVzZXQpOwogCi0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlxuIik7Ci0KLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuOworCXNlcV9wdXRjKG0sICdcbicpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNhbl9wcm9jX3JlYWRfcmVzZXRfc3RhdHMoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkJICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBjYW5fc3RhdHNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBsZW4gPSAwOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjYW5fc3RhdHNfcHJvY19zaG93LCBOVUxMKTsKK30KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FuX3N0YXRzX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY2FuX3N0YXRzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBjYW5fcmVzZXRfc3RhdHNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKIAl1c2VyX3Jlc2V0ID0gMTsKIAogCWlmIChjYW5fc3RhdHRpbWVyLmZ1bmN0aW9uID09IGNhbl9zdGF0X3VwZGF0ZSkgewotCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAotCQkJCSJTY2hlZHVsZWQgc3RhdGlzdGljIHJlc2V0ICMlbGQuXG4iLAorCQlzZXFfcHJpbnRmKG0sICJTY2hlZHVsZWQgc3RhdGlzdGljIHJlc2V0ICMlbGQuXG4iLAogCQkJCWNhbl9wc3RhdHMuc3RhdHNfcmVzZXQgKyAxKTsKIAogCX0gZWxzZSB7CiAJCWlmIChjYW5fc3RhdHMuamlmZmllc19pbml0ICE9IGppZmZpZXMpCiAJCQljYW5faW5pdF9zdGF0cygpOwogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIlBlcmZvcm1lZCBzdGF0aXN0aWMgcmVzZXQgIyVsZC5cbiIsCisJCXNlcV9wcmludGYobSwgIlBlcmZvcm1lZCBzdGF0aXN0aWMgcmVzZXQgIyVsZC5cbiIsCiAJCQkJY2FuX3BzdGF0cy5zdGF0c19yZXNldCk7CiAJfQotCi0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjYW5fcHJvY19yZWFkX3ZlcnNpb24oY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkJIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGNhbl9yZXNldF9zdGF0c19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IGxlbiA9IDA7Ci0KLQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiJXNcbiIsCi0JCQlDQU5fVkVSU0lPTl9TVFJJTkcpOwotCSplb2YgPSAxOwotCXJldHVybiBsZW47CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNhbl9yZXNldF9zdGF0c19wcm9jX3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IGNhbl9wcm9jX3JlYWRfcmN2bGlzdChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhbl9yZXNldF9zdGF0c19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGNhbl9yZXNldF9zdGF0c19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgY2FuX3ZlcnNpb25fcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzZXFfcHJpbnRmKG0sICIlc1xuIiwgQ0FOX1ZFUlNJT05fU1RSSU5HKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYW5fdmVyc2lvbl9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNhbl92ZXJzaW9uX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhbl92ZXJzaW9uX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY2FuX3ZlcnNpb25fcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IGNhbl9yY3ZsaXN0X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJLyogZG91YmxlIGNhc3QgdG8gcHJldmVudCBHQ0Mgd2FybmluZyAqLwotCWludCBpZHggPSAoaW50KShsb25nKWRhdGE7Ci0JaW50IGxlbiA9IDA7CisJaW50IGlkeCA9IChpbnQpKGxvbmcpbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZGV2X3Jjdl9saXN0cyAqZDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkiXG5yZWNlaXZlIGxpc3QgJyVzJzpcbiIsIHJ4X2xpc3RfbmFtZVtpZHhdKTsKKwlzZXFfcHJpbnRmKG0sICJcbnJlY2VpdmUgbGlzdCAnJXMnOlxuIiwgcnhfbGlzdF9uYW1lW2lkeF0pOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkLCBuLCAmY2FuX3J4X2Rldl9saXN0LCBsaXN0KSB7CiAKIAkJaWYgKCFobGlzdF9lbXB0eSgmZC0+cnhbaWR4XSkpIHsKLQkJCWxlbiA9IGNhbl9wcmludF9yZWN2X2Jhbm5lcihwYWdlLCBsZW4pOwotCQkJbGVuID0gY2FuX3ByaW50X3Jjdmxpc3QocGFnZSwgbGVuLCAmZC0+cnhbaWR4XSwgZC0+ZGV2KTsKKwkJCWNhbl9wcmludF9yZWN2X2Jhbm5lcihtKTsKKwkJCWNhbl9wcmludF9yY3ZsaXN0KG0sICZkLT5yeFtpZHhdLCBkLT5kZXYpOwogCQl9IGVsc2UKLQkJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJCSIgICglczogbm8gZW50cnkpXG4iLCBETkFNRShkLT5kZXYpKTsKLQotCQkvKiBleGl0IG9uIGVuZCBvZiBidWZmZXI/ICovCi0JCWlmIChsZW4gPiBQQUdFX1NJWkUgLSAxMDApCi0JCQlicmVhazsKKwkJCXNlcV9wcmludGYobSwgIiAgKCVzOiBubyBlbnRyeSlcbiIsIEROQU1FKGQtPmRldikpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJcbiIpOwotCi0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbjsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjYW5fcHJvY19yZWFkX3Jjdmxpc3Rfc2ZmKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJCSAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgY2FuX3Jjdmxpc3RfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBsZW4gPSAwOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjYW5fcmN2bGlzdF9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYW5fcmN2bGlzdF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGNhbl9yY3ZsaXN0X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBjYW5fcmN2bGlzdF9zZmZfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKIAlzdHJ1Y3QgZGV2X3Jjdl9saXN0cyAqZDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAogCS8qIFJYX1NGRiAqLwotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkiXG5yZWNlaXZlIGxpc3QgJ3J4X3NmZic6XG4iKTsKKwlzZXFfcHV0cyhtLCAiXG5yZWNlaXZlIGxpc3QgJ3J4X3NmZic6XG4iKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZCwgbiwgJmNhbl9yeF9kZXZfbGlzdCwgbGlzdCkgewpAQCAtNDEzLDQ2ICs0MDIsMzggQEAKIAkJCX0KIAogCQlpZiAoIWFsbF9lbXB0eSkgewotCQkJbGVuID0gY2FuX3ByaW50X3JlY3ZfYmFubmVyKHBhZ2UsIGxlbik7CisJCQljYW5fcHJpbnRfcmVjdl9iYW5uZXIobSk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgMHg4MDA7IGkrKykgewotCQkJCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4X3NmZltpXSkgJiYKLQkJCQkgICAgbGVuIDwgUEFHRV9TSVpFIC0gMTAwKQotCQkJCQlsZW4gPSBjYW5fcHJpbnRfcmN2bGlzdChwYWdlLCBsZW4sCi0JCQkJCQkJCSZkLT5yeF9zZmZbaV0sCi0JCQkJCQkJCWQtPmRldik7CisJCQkJaWYgKCFobGlzdF9lbXB0eSgmZC0+cnhfc2ZmW2ldKSkKKwkJCQkJY2FuX3ByaW50X3Jjdmxpc3QobSwgJmQtPnJ4X3NmZltpXSwKKwkJCQkJCQkgIGQtPmRldik7CiAJCQl9CiAJCX0gZWxzZQotCQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkJIiAgKCVzOiBubyBlbnRyeSlcbiIsIEROQU1FKGQtPmRldikpOwotCi0JCS8qIGV4aXQgb24gZW5kIG9mIGJ1ZmZlcj8gKi8KLQkJaWYgKGxlbiA+IFBBR0VfU0laRSAtIDEwMCkKLQkJCWJyZWFrOworCQkJc2VxX3ByaW50ZihtLCAiICAoJXM6IG5vIGVudHJ5KVxuIiwgRE5BTUUoZC0+ZGV2KSk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlxuIik7Ci0KLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuOworCXNlcV9wdXRjKG0sICdcbicpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNhbl9yY3ZsaXN0X3NmZl9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNhbl9yY3ZsaXN0X3NmZl9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYW5fcmN2bGlzdF9zZmZfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBjYW5fcmN2bGlzdF9zZmZfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKgogICogcHJvYyB1dGlsaXR5IGZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmNhbl9jcmVhdGVfcHJvY19yZWFkZW50cnkoY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJCQltb2RlX3QgbW9kZSwKLQkJCQkJCQlyZWFkX3Byb2NfdCAqcmVhZF9wcm9jLAotCQkJCQkJCXZvaWQgKmRhdGEpCi17Ci0JaWYgKGNhbl9kaXIpCi0JCXJldHVybiBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KG5hbWUsIG1vZGUsIGNhbl9kaXIsIHJlYWRfcHJvYywKLQkJCQkJICAgICAgZGF0YSk7Ci0JZWxzZQotCQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIHZvaWQgY2FuX3JlbW92ZV9wcm9jX3JlYWRlbnRyeShjb25zdCBjaGFyICpuYW1lKQogewogCWlmIChjYW5fZGlyKQpAQCAtNDc0LDI0ICs0NTUsMjQgQEAKIAl9CiAKIAkvKiBvd24gcHJvY2ZzIGVudHJpZXMgZnJvbSB0aGUgQUZfQ0FOIGNvcmUgKi8KLQlwZGVfdmVyc2lvbiAgICAgPSBjYW5fY3JlYXRlX3Byb2NfcmVhZGVudHJ5KENBTl9QUk9DX1ZFUlNJT04sIDA2NDQsCi0JCQkJCWNhbl9wcm9jX3JlYWRfdmVyc2lvbiwgTlVMTCk7Ci0JcGRlX3N0YXRzICAgICAgID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19TVEFUUywgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9zdGF0cywgTlVMTCk7Ci0JcGRlX3Jlc2V0X3N0YXRzID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SRVNFVF9TVEFUUywgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yZXNldF9zdGF0cywgTlVMTCk7Ci0JcGRlX3Jjdmxpc3RfZXJyID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SQ1ZMSVNUX0VSUiwgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yY3ZsaXN0LCAodm9pZCAqKVJYX0VSUik7Ci0JcGRlX3Jjdmxpc3RfYWxsID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SQ1ZMSVNUX0FMTCwgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yY3ZsaXN0LCAodm9pZCAqKVJYX0FMTCk7Ci0JcGRlX3Jjdmxpc3RfZmlsID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SQ1ZMSVNUX0ZJTCwgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yY3ZsaXN0LCAodm9pZCAqKVJYX0ZJTCk7Ci0JcGRlX3Jjdmxpc3RfaW52ID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SQ1ZMSVNUX0lOViwgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yY3ZsaXN0LCAodm9pZCAqKVJYX0lOVik7Ci0JcGRlX3Jjdmxpc3RfZWZmID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SQ1ZMSVNUX0VGRiwgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yY3ZsaXN0LCAodm9pZCAqKVJYX0VGRik7Ci0JcGRlX3Jjdmxpc3Rfc2ZmID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SQ1ZMSVNUX1NGRiwgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yY3ZsaXN0X3NmZiwgTlVMTCk7CisJcGRlX3ZlcnNpb24gICAgID0gcHJvY19jcmVhdGUoQ0FOX1BST0NfVkVSU0lPTiwgMDY0NCwgY2FuX2RpciwKKwkJCQkgICAgICAmY2FuX3ZlcnNpb25fcHJvY19mb3BzKTsKKwlwZGVfc3RhdHMgICAgICAgPSBwcm9jX2NyZWF0ZShDQU5fUFJPQ19TVEFUUywgMDY0NCwgY2FuX2RpciwKKwkJCQkgICAgICAmY2FuX3N0YXRzX3Byb2NfZm9wcyk7CisJcGRlX3Jlc2V0X3N0YXRzID0gcHJvY19jcmVhdGUoQ0FOX1BST0NfUkVTRVRfU1RBVFMsIDA2NDQsIGNhbl9kaXIsCisJCQkJICAgICAgJmNhbl9yZXNldF9zdGF0c19wcm9jX2ZvcHMpOworCXBkZV9yY3ZsaXN0X2VyciA9IHByb2NfY3JlYXRlX2RhdGEoQ0FOX1BST0NfUkNWTElTVF9FUlIsIDA2NDQsIGNhbl9kaXIsCisJCQkJCSAgICZjYW5fcmN2bGlzdF9wcm9jX2ZvcHMsICh2b2lkICopUlhfRVJSKTsKKwlwZGVfcmN2bGlzdF9hbGwgPSBwcm9jX2NyZWF0ZV9kYXRhKENBTl9QUk9DX1JDVkxJU1RfQUxMLCAwNjQ0LCBjYW5fZGlyLAorCQkJCQkgICAmY2FuX3Jjdmxpc3RfcHJvY19mb3BzLCAodm9pZCAqKVJYX0FMTCk7CisJcGRlX3Jjdmxpc3RfZmlsID0gcHJvY19jcmVhdGVfZGF0YShDQU5fUFJPQ19SQ1ZMSVNUX0ZJTCwgMDY0NCwgY2FuX2RpciwKKwkJCQkJICAgJmNhbl9yY3ZsaXN0X3Byb2NfZm9wcywgKHZvaWQgKilSWF9GSUwpOworCXBkZV9yY3ZsaXN0X2ludiA9IHByb2NfY3JlYXRlX2RhdGEoQ0FOX1BST0NfUkNWTElTVF9JTlYsIDA2NDQsIGNhbl9kaXIsCisJCQkJCSAgICZjYW5fcmN2bGlzdF9wcm9jX2ZvcHMsICh2b2lkICopUlhfSU5WKTsKKwlwZGVfcmN2bGlzdF9lZmYgPSBwcm9jX2NyZWF0ZV9kYXRhKENBTl9QUk9DX1JDVkxJU1RfRUZGLCAwNjQ0LCBjYW5fZGlyLAorCQkJCQkgICAmY2FuX3Jjdmxpc3RfcHJvY19mb3BzLCAodm9pZCAqKVJYX0VGRik7CisJcGRlX3Jjdmxpc3Rfc2ZmID0gcHJvY19jcmVhdGUoQ0FOX1BST0NfUkNWTElTVF9TRkYsIDA2NDQsIGNhbl9kaXIsCisJCQkJICAgICAgJmNhbl9yY3ZsaXN0X3NmZl9wcm9jX2ZvcHMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L2NvbXBhdC5jIGIvbmV0L2NvbXBhdC5jCmluZGV4IDhkNzM5MDUuLjEyNzI4YjEgMTAwNjQ0Ci0tLSBhL25ldC9jb21wYXQuYworKysgYi9uZXQvY29tcGF0LmMKQEAgLTc0Myw2ICs3NDMsMTggQEAKIAlyZXR1cm4gc3lzX3JlY3Ztc2coZmQsIChzdHJ1Y3QgbXNnaGRyIF9fdXNlciAqKW1zZywgZmxhZ3MgfCBNU0dfQ01TR19DT01QQVQpOwogfQogCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19yZWN2KGludCBmZCwgdm9pZCBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgdW5zaWduZWQgZmxhZ3MpCit7CisJcmV0dXJuIHN5c19yZWN2KGZkLCBidWYsIGxlbiwgZmxhZ3MgfCBNU0dfQ01TR19DT01QQVQpOworfQorCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19yZWN2ZnJvbShpbnQgZmQsIHZvaWQgX191c2VyICpidWYsIHNpemVfdCBsZW4sCisJCQkJICAgIHVuc2lnbmVkIGZsYWdzLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICphZGRyLAorCQkJCSAgICBpbnQgX191c2VyICphZGRybGVuKQoreworCXJldHVybiBzeXNfcmVjdmZyb20oZmQsIGJ1ZiwgbGVuLCBmbGFncyB8IE1TR19DTVNHX0NPTVBBVCwgYWRkciwgYWRkcmxlbik7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NvY2tldGNhbGwoaW50IGNhbGwsIHUzMiBfX3VzZXIgKmFyZ3MpCiB7CiAJaW50IHJldDsKQEAgLTc4OCwxMCArODAwLDExIEBACiAJCXJldCA9IHN5c19zZW5kdG8oYTAsIGNvbXBhdF9wdHIoYTEpLCBhWzJdLCBhWzNdLCBjb21wYXRfcHRyKGFbNF0pLCBhWzVdKTsKIAkJYnJlYWs7CiAJY2FzZSBTWVNfUkVDVjoKLQkJcmV0ID0gc3lzX3JlY3YoYTAsIGNvbXBhdF9wdHIoYTEpLCBhWzJdLCBhWzNdKTsKKwkJcmV0ID0gY29tcGF0X3N5c19yZWN2KGEwLCBjb21wYXRfcHRyKGExKSwgYVsyXSwgYVszXSk7CiAJCWJyZWFrOwogCWNhc2UgU1lTX1JFQ1ZGUk9NOgotCQlyZXQgPSBzeXNfcmVjdmZyb20oYTAsIGNvbXBhdF9wdHIoYTEpLCBhWzJdLCBhWzNdLCBjb21wYXRfcHRyKGFbNF0pLCBjb21wYXRfcHRyKGFbNV0pKTsKKwkJcmV0ID0gY29tcGF0X3N5c19yZWN2ZnJvbShhMCwgY29tcGF0X3B0cihhMSksIGFbMl0sIGFbM10sCisJCQkJCSAgY29tcGF0X3B0cihhWzRdKSwgY29tcGF0X3B0cihhWzVdKSk7CiAJCWJyZWFrOwogCWNhc2UgU1lTX1NIVVRET1dOOgogCQlyZXQgPSBzeXNfc2h1dGRvd24oYTAsYTEpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmMKaW5kZXggYjBmZTY5Mi4uMWM2Y2YzYSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uYworKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvdGNwX3N0YXRlcy5oPgorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9za2IuaD4KIAogLyoKICAqCUlzIGEgc29ja2V0ICdjb25uZWN0aW9uIG9yaWVudGVkJyA/CkBAIC0yODQsNiArMjg1LDggQEAKIAlpbnQgaSwgY29weSA9IHN0YXJ0IC0gb2Zmc2V0OwogCXN0cnVjdCBza19idWZmICpmcmFnX2l0ZXI7CiAKKwl0cmFjZV9za2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIGxlbik7CisKIAkvKiBDb3B5IGhlYWRlci4gKi8KIAlpZiAoY29weSA+IDApIHsKIAkJaWYgKGNvcHkgPiBsZW4pCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDZhOTQ0NzUuLjg0OTQ1NDcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0xOTEsNyArMTkxLDYgQEAKICAqIHNlbWFwaG9yZSBoZWxkLgogICovCiBERUZJTkVfUldMT0NLKGRldl9iYXNlX2xvY2spOwotCiBFWFBPUlRfU1lNQk9MKGRldl9iYXNlX2xvY2spOwogCiAjZGVmaW5lIE5FVERFVl9IQVNIQklUUwk4CkBAIC0yNDgsNiArMjQ3LDcgQEAKICAqLwogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc29mdG5ldF9kYXRhLCBzb2Z0bmV0X2RhdGEpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHNvZnRuZXRfZGF0YSk7CiAKICNpZmRlZiBDT05GSUdfTE9DS0RFUAogLyoKQEAgLTI2OSwxMCArMjY5LDEwIEBACiAJIEFSUEhSRF9JUkRBLCBBUlBIUkRfRkNQUCwgQVJQSFJEX0ZDQUwsIEFSUEhSRF9GQ1BMLAogCSBBUlBIUkRfRkNGQUJSSUMsIEFSUEhSRF9JRUVFODAyX1RSLCBBUlBIUkRfSUVFRTgwMjExLAogCSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNLCBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQLCBBUlBIUkRfUEhPTkVULAotCSBBUlBIUkRfUEhPTkVUX1BJUEUsIEFSUEhSRF9JRUVFODAyMTU0LCBBUlBIUkRfSUVFRTgwMjE1NF9QSFksCisJIEFSUEhSRF9QSE9ORVRfUElQRSwgQVJQSFJEX0lFRUU4MDIxNTQsCiAJIEFSUEhSRF9WT0lELCBBUlBIUkRfTk9ORX07CiAKLXN0YXRpYyBjb25zdCBjaGFyICpuZXRkZXZfbG9ja19uYW1lW10gPQorc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5ldGRldl9sb2NrX25hbWVbXSA9CiAJeyJfeG1pdF9ORVRST00iLCAiX3htaXRfRVRIRVIiLCAiX3htaXRfRUVUSEVSIiwgIl94bWl0X0FYMjUiLAogCSAiX3htaXRfUFJPTkVUIiwgIl94bWl0X0NIQU9TIiwgIl94bWl0X0lFRUU4MDIiLCAiX3htaXRfQVJDTkVUIiwKIAkgIl94bWl0X0FQUExFVExLIiwgIl94bWl0X0RMQ0kiLCAiX3htaXRfQVRNIiwgIl94bWl0X01FVFJJQ09NIiwKQEAgLTI4Nyw3ICsyODcsNyBAQAogCSAiX3htaXRfSVJEQSIsICJfeG1pdF9GQ1BQIiwgIl94bWl0X0ZDQUwiLCAiX3htaXRfRkNQTCIsCiAJICJfeG1pdF9GQ0ZBQlJJQyIsICJfeG1pdF9JRUVFODAyX1RSIiwgIl94bWl0X0lFRUU4MDIxMSIsCiAJICJfeG1pdF9JRUVFODAyMTFfUFJJU00iLCAiX3htaXRfSUVFRTgwMjExX1JBRElPVEFQIiwgIl94bWl0X1BIT05FVCIsCi0JICJfeG1pdF9QSE9ORVRfUElQRSIsICJfeG1pdF9JRUVFODAyMTU0IiwgIl94bWl0X0lFRUU4MDIxNTRfUEhZIiwKKwkgIl94bWl0X1BIT05FVF9QSVBFIiwgIl94bWl0X0lFRUU4MDIxNTQiLAogCSAiX3htaXRfVk9JRCIsICJfeG1pdF9OT05FIn07CiAKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbmV0ZGV2X3htaXRfbG9ja19rZXlbQVJSQVlfU0laRShuZXRkZXZfbG9ja190eXBlKV07CkBAIC0zODEsNiArMzgxLDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJnB0eXBlX2xvY2spOwogfQorRVhQT1JUX1NZTUJPTChkZXZfYWRkX3BhY2spOwogCiAvKioKICAqCV9fZGV2X3JlbW92ZV9wYWNrCSAtIHJlbW92ZSBwYWNrZXQgaGFuZGxlcgpAQCAtNDE4LDYgKzQxOSw4IEBACiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnB0eXBlX2xvY2spOwogfQorRVhQT1JUX1NZTUJPTChfX2Rldl9yZW1vdmVfcGFjayk7CisKIC8qKgogICoJZGV2X3JlbW92ZV9wYWNrCSAtIHJlbW92ZSBwYWNrZXQgaGFuZGxlcgogICoJQHB0OiBwYWNrZXQgdHlwZSBkZWNsYXJhdGlvbgpAQCAtNDM2LDYgKzQzOSw3IEBACiAKIAlzeW5jaHJvbml6ZV9uZXQoKTsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X3JlbW92ZV9wYWNrKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCkBAIC00OTksNiArNTAzLDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9ib290X3NldHVwX2NoZWNrKTsKIAogCiAvKioKQEAgLTU5MSw2ICs1OTYsNyBAQAogCX0KIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woX19kZXZfZ2V0X2J5X25hbWUpOwogCiAvKioKICAqCWRldl9nZXRfYnlfbmFtZQkJLSBmaW5kIGEgZGV2aWNlIGJ5IGl0cyBuYW1lCkBAIC02MTUsNiArNjIxLDcgQEAKIAlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CiAJcmV0dXJuIGRldjsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X2dldF9ieV9uYW1lKTsKIAogLyoqCiAgKglfX2Rldl9nZXRfYnlfaW5kZXggLSBmaW5kIGEgZGV2aWNlIGJ5IGl0cyBpZmluZGV4CkBAIC02NDAsNiArNjQ3LDcgQEAKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKF9fZGV2X2dldF9ieV9pbmRleCk7CiAKIAogLyoqCkBAIC02NjQsNiArNjcyLDcgQEAKIAlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CiAJcmV0dXJuIGRldjsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X2dldF9ieV9pbmRleCk7CiAKIC8qKgogICoJZGV2X2dldGJ5aHdhZGRyIC0gZmluZCBhIGRldmljZSBieSBpdHMgaGFyZHdhcmUgYWRkcmVzcwpAQCAtNjkzLDcgKzcwMiw2IEBACiAKIAlyZXR1cm4gTlVMTDsKIH0KLQogRVhQT1JUX1NZTUJPTChkZXZfZ2V0Ynlod2FkZHIpOwogCiBzdHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0Zmlyc3RieWh3dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIHNob3J0IHR5cGUpCkBAIC03MDcsNyArNzE1LDYgQEAKIAogCXJldHVybiBOVUxMOwogfQotCiBFWFBPUlRfU1lNQk9MKF9fZGV2X2dldGZpcnN0Ynlod3R5cGUpOwogCiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldGZpcnN0Ynlod3R5cGUoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBzaG9ydCB0eXBlKQpAQCAtNzIxLDcgKzcyOCw2IEBACiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gZGV2OwogfQotCiBFWFBPUlRfU1lNQk9MKGRldl9nZXRmaXJzdGJ5aHd0eXBlKTsKIAogLyoqCkBAIC03MzYsNyArNzQyLDggQEAKICAqCWRldl9wdXQgdG8gaW5kaWNhdGUgdGhleSBoYXZlIGZpbmlzaGVkIHdpdGggaXQuCiAgKi8KIAotc3RydWN0IG5ldF9kZXZpY2UgKiBkZXZfZ2V0X2J5X2ZsYWdzKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgc2hvcnQgaWZfZmxhZ3MsIHVuc2lnbmVkIHNob3J0IG1hc2spCitzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9mbGFncyhzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIHNob3J0IGlmX2ZsYWdzLAorCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBtYXNrKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsICpyZXQ7CiAKQEAgLTc1Miw2ICs3NTksNyBAQAogCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChkZXZfZ2V0X2J5X2ZsYWdzKTsKIAogLyoqCiAgKglkZXZfdmFsaWRfbmFtZSAtIGNoZWNrIGlmIG5hbWUgaXMgb2theSBmb3IgbmV0d29yayBkZXZpY2UKQEAgLTc3Nyw2ICs3ODUsNyBAQAogCX0KIAlyZXR1cm4gMTsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X3ZhbGlkX25hbWUpOwogCiAvKioKICAqCV9fZGV2X2FsbG9jX25hbWUgLSBhbGxvY2F0ZSBhIG5hbWUgZm9yIGEgZGV2aWNlCkBAIC04NzAsNiArODc5LDcgQEAKIAkJc3RybGNweShkZXYtPm5hbWUsIGJ1ZiwgSUZOQU1TSVopOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGRldl9hbGxvY19uYW1lKTsKIAogCiAvKioKQEAgLTkwNiw4ICs5MTYsNyBAQAogCQllcnIgPSBkZXZfYWxsb2NfbmFtZShkZXYsIG5ld25hbWUpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JfQotCWVsc2UgaWYgKF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbmV3bmFtZSkpCisJfSBlbHNlIGlmIChfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5ld25hbWUpKQogCQlyZXR1cm4gLUVFWElTVDsKIAllbHNlCiAJCXN0cmxjcHkoZGV2LT5uYW1lLCBuZXduYW1lLCBJRk5BTVNJWik7CkBAIC05NzAsNyArOTc5LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZGV2LT5pZmFsaWFzID0ga3JlYWxsb2MoZGV2LT5pZmFsaWFzLCBsZW4rMSwgR0ZQX0tFUk5FTCk7CisJZGV2LT5pZmFsaWFzID0ga3JlYWxsb2MoZGV2LT5pZmFsaWFzLCBsZW4gKyAxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldi0+aWZhbGlhcykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEwMDYsNiArMTAxNSw3IEBACiAJCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgZGV2LCAwKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9zdGF0ZV9jaGFuZ2UpOwogCiB2b2lkIG5ldGRldl9ib25kaW5nX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTAzMSw5ICsxMDQxLDEwIEBACiAJZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBuYW1lKTsKIAlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CiAKLQlpZiAoIWRldiAmJiBjYXBhYmxlKENBUF9TWVNfTU9EVUxFKSkKKwlpZiAoIWRldiAmJiBjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQlyZXF1ZXN0X21vZHVsZSgiJXMiLCBuYW1lKTsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X2xvYWQpOwogCiAvKioKICAqCWRldl9vcGVuCS0gcHJlcGFyZSBhbiBpbnRlcmZhY2UgZm9yIHVzZS4KQEAgLTExMTgsNiArMTEyOSw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChkZXZfb3Blbik7CiAKIC8qKgogICoJZGV2X2Nsb3NlIC0gc2h1dGRvd24gYW4gaW50ZXJmYWNlLgpAQCAtMTE4NCw2ICsxMTk2LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChkZXZfY2xvc2UpOwogCiAKIC8qKgpAQCAtMTI3OSw2ICsxMjkyLDcgQEAKIAlyYXdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmbmV0ZGV2X2NoYWluLCBuYik7CiAJZ290byB1bmxvY2s7CiB9CitFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcik7CiAKIC8qKgogICoJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIgLSB1bnJlZ2lzdGVyIGEgbmV0d29yayBub3RpZmllciBibG9jawpAQCAtMTI5OSw2ICsxMzEzLDcgQEAKIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKTsKIAogLyoqCiAgKgljYWxsX25ldGRldmljZV9ub3RpZmllcnMgLSBjYWxsIGFsbCBuZXR3b3JrIG5vdGlmaWVyIGJsb2NrcwpAQCAtMTMyMSwxMSArMTMzNiwxMyBAQAogewogCWF0b21pY19pbmMoJm5ldHN0YW1wX25lZWRlZCk7CiB9CitFWFBPUlRfU1lNQk9MKG5ldF9lbmFibGVfdGltZXN0YW1wKTsKIAogdm9pZCBuZXRfZGlzYWJsZV90aW1lc3RhbXAodm9pZCkKIHsKIAlhdG9taWNfZGVjKCZuZXRzdGFtcF9uZWVkZWQpOwogfQorRVhQT1JUX1NZTUJPTChuZXRfZGlzYWJsZV90aW1lc3RhbXApOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTM1OSw3ICsxMzc2LDcgQEAKIAkJaWYgKChwdHlwZS0+ZGV2ID09IGRldiB8fCAhcHR5cGUtPmRldikgJiYKIAkJICAgIChwdHlwZS0+YWZfcGFja2V0X3ByaXYgPT0gTlVMTCB8fAogCQkgICAgIChzdHJ1Y3Qgc29jayAqKXB0eXBlLT5hZl9wYWNrZXRfcHJpdiAhPSBza2ItPnNrKSkgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjI9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJCWlmICghc2tiMikKIAkJCQlicmVhazsKIApAQCAtMTUyNyw2ICsxNTQ0LDcgQEAKIG91dDoKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChza2JfY2hlY2tzdW1faGVscCk7CiAKIC8qKgogICoJc2tiX2dzb19zZWdtZW50IC0gUGVyZm9ybSBzZWdtZW50YXRpb24gb24gc2tiLgpAQCAtMTU4OSw3ICsxNjA3LDYgQEAKIAogCXJldHVybiBzZWdzOwogfQotCiBFWFBPUlRfU1lNQk9MKHNrYl9nc29fc2VnbWVudCk7CiAKIC8qIFRha2UgYWN0aW9uIHdoZW4gaGFyZHdhcmUgcmVjZXB0aW9uIGNoZWNrc3VtIGVycm9ycyBhcmUgZGV0ZWN0ZWQuICovCkBAIC0xNzA0LDcgKzE3MjEsNyBAQAogCQkJc2tiX2RzdF9kcm9wKHNrYik7CiAKIAkJcmMgPSBvcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGV2KTsKLQkJaWYgKHJjID09IDApCisJCWlmIChyYyA9PSBORVRERVZfVFhfT0spCiAJCQl0eHFfdHJhbnNfdXBkYXRlKHR4cSk7CiAJCS8qCiAJCSAqIFRPRE86IGlmIHNrYl9vcnBoYW4oKSB3YXMgY2FsbGVkIGJ5CkBAIC0xNzMwLDcgKzE3NDcsNyBAQAogCQlza2ItPm5leHQgPSBuc2tiLT5uZXh0OwogCQluc2tiLT5uZXh0ID0gTlVMTDsKIAkJcmMgPSBvcHMtPm5kb19zdGFydF94bWl0KG5za2IsIGRldik7Ci0JCWlmICh1bmxpa2VseShyYykpIHsKKwkJaWYgKHVubGlrZWx5KHJjICE9IE5FVERFVl9UWF9PSykpIHsKIAkJCW5za2ItPm5leHQgPSBza2ItPm5leHQ7CiAJCQlza2ItPm5leHQgPSBuc2tiOwogCQkJcmV0dXJuIHJjOwpAQCAtMTc0NCw3ICsxNzYxLDcgQEAKIAogb3V0X2tmcmVlX3NrYjoKIAlrZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdTMyIHNrYl90eF9oYXNocm5kOwpAQCAtMTc1NSw3ICsxNzcyLDcgQEAKIAogCWlmIChza2JfcnhfcXVldWVfcmVjb3JkZWQoc2tiKSkgewogCQloYXNoID0gc2tiX2dldF9yeF9xdWV1ZShza2IpOwotCQl3aGlsZSAodW5saWtlbHkgKGhhc2ggPj0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpKQorCQl3aGlsZSAodW5saWtlbHkoaGFzaCA+PSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcykpCiAJCQloYXNoIC09IGRldi0+cmVhbF9udW1fdHhfcXVldWVzOwogCQlyZXR1cm4gaGFzaDsKIAl9CkBAIC0xNzg2LDYgKzE4MDMsNDAgQEAKIAlyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHF1ZXVlX2luZGV4KTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgX19kZXZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpxLAorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEpCit7CisJc3BpbmxvY2tfdCAqcm9vdF9sb2NrID0gcWRpc2NfbG9jayhxKTsKKwlpbnQgcmM7CisKKwlzcGluX2xvY2socm9vdF9sb2NrKTsKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoX19RRElTQ19TVEFURV9ERUFDVElWQVRFRCwgJnEtPnN0YXRlKSkpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJjID0gTkVUX1hNSVRfRFJPUDsKKwl9IGVsc2UgaWYgKChxLT5mbGFncyAmIFRDUV9GX0NBTl9CWVBBU1MpICYmICFxZGlzY19xbGVuKHEpICYmCisJCSAgICF0ZXN0X2FuZF9zZXRfYml0KF9fUURJU0NfU1RBVEVfUlVOTklORywgJnEtPnN0YXRlKSkgeworCQkvKgorCQkgKiBUaGlzIGlzIGEgd29yay1jb25zZXJ2aW5nIHF1ZXVlOyB0aGVyZSBhcmUgbm8gb2xkIHNrYnMKKwkJICogd2FpdGluZyB0byBiZSBzZW50IG91dDsgYW5kIHRoZSBxZGlzYyBpcyBub3QgcnVubmluZyAtCisJCSAqIHhtaXQgdGhlIHNrYiBkaXJlY3RseS4KKwkJICovCisJCV9fcWRpc2NfdXBkYXRlX2JzdGF0cyhxLCBza2ItPmxlbik7CisJCWlmIChzY2hfZGlyZWN0X3htaXQoc2tiLCBxLCBkZXYsIHR4cSwgcm9vdF9sb2NrKSkKKwkJCV9fcWRpc2NfcnVuKHEpOworCQllbHNlCisJCQljbGVhcl9iaXQoX19RRElTQ19TVEFURV9SVU5OSU5HLCAmcS0+c3RhdGUpOworCisJCXJjID0gTkVUX1hNSVRfU1VDQ0VTUzsKKwl9IGVsc2UgeworCQlyYyA9IHFkaXNjX2VucXVldWVfcm9vdChza2IsIHEpOworCQlxZGlzY19ydW4ocSk7CisJfQorCXNwaW5fdW5sb2NrKHJvb3RfbG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKIC8qKgogICoJZGV2X3F1ZXVlX3htaXQgLSB0cmFuc21pdCBhIGJ1ZmZlcgogICoJQHNrYjogYnVmZmVyIHRvIHRyYW5zbWl0CkBAIC0xODU2LDIyICsxOTA3LDEwIEBACiAJcSA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKIAogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAotCXNrYi0+dGNfdmVyZCA9IFNFVF9UQ19BVChza2ItPnRjX3ZlcmQsQVRfRUdSRVNTKTsKKwlza2ItPnRjX3ZlcmQgPSBTRVRfVENfQVQoc2tiLT50Y192ZXJkLCBBVF9FR1JFU1MpOwogI2VuZGlmCiAJaWYgKHEtPmVucXVldWUpIHsKLQkJc3BpbmxvY2tfdCAqcm9vdF9sb2NrID0gcWRpc2NfbG9jayhxKTsKLQotCQlzcGluX2xvY2socm9vdF9sb2NrKTsKLQotCQlpZiAodW5saWtlbHkodGVzdF9iaXQoX19RRElTQ19TVEFURV9ERUFDVElWQVRFRCwgJnEtPnN0YXRlKSkpIHsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJcmMgPSBORVRfWE1JVF9EUk9QOwotCQl9IGVsc2UgewotCQkJcmMgPSBxZGlzY19lbnF1ZXVlX3Jvb3Qoc2tiLCBxKTsKLQkJCXFkaXNjX3J1bihxKTsKLQkJfQotCQlzcGluX3VubG9jayhyb290X2xvY2spOwotCisJCXJjID0gX19kZXZfeG1pdF9za2Ioc2tiLCBxLCBkZXYsIHR4cSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTg5NSw3ICsxOTM0LDcgQEAKIAkJCUhBUkRfVFhfTE9DSyhkZXYsIHR4cSwgY3B1KTsKIAogCQkJaWYgKCFuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpIHsKLQkJCQlyYyA9IDA7CisJCQkJcmMgPSBORVRfWE1JVF9TVUNDRVNTOwogCQkJCWlmICghZGV2X2hhcmRfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxKSkgewogCQkJCQlIQVJEX1RYX1VOTE9DSyhkZXYsIHR4cSk7CiAJCQkJCWdvdG8gb3V0OwpAQCAtMTkyNCw2ICsxOTYzLDcgQEAKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAlyZXR1cm4gcmM7CiB9CitFWFBPUlRfU1lNQk9MKGRldl9xdWV1ZV94bWl0KTsKIAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xOTkwLDYgKzIwMzAsNyBAQAogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBORVRfUlhfRFJPUDsKIH0KK0VYUE9SVF9TWU1CT0wobmV0aWZfcngpOwogCiBpbnQgbmV0aWZfcnhfbmkoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTIwMDMsNyArMjA0NCw2IEBACiAKIAlyZXR1cm4gZXJyOwogfQotCiBFWFBPUlRfU1lNQk9MKG5ldGlmX3J4X25pKTsKIAogc3RhdGljIHZvaWQgbmV0X3R4X2FjdGlvbihzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmgpCkBAIC0yMDc2LDcgKzIxMTYsNyBAQAogLyogVGhpcyBob29rIGlzIGRlZmluZWQgaGVyZSBmb3IgQVRNIExBTkUgKi8KIGludCAoKmJyX2ZkYl90ZXN0X2FkZHJfaG9vaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgdW5zaWduZWQgY2hhciAqYWRkcikgX19yZWFkX21vc3RseTsKLUVYUE9SVF9TWU1CT0woYnJfZmRiX3Rlc3RfYWRkcl9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGJyX2ZkYl90ZXN0X2FkZHJfaG9vayk7CiAjZW5kaWYKIAogLyoKQEAgLTIwODUsNyArMjEyNSw3IEBACiAgKi8KIHN0cnVjdCBza19idWZmICooKmJyX2hhbmRsZV9mcmFtZV9ob29rKShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTChicl9oYW5kbGVfZnJhbWVfaG9vayk7CitFWFBPUlRfU1lNQk9MX0dQTChicl9oYW5kbGVfZnJhbWVfaG9vayk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmhhbmRsZV9icmlkZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqKnB0X3ByZXYsIGludCAqcmV0LApAQCAtMjMzNiw2ICsyMzc2LDcgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChuZXRpZl9yZWNlaXZlX3NrYik7CiAKIC8qIE5ldHdvcmsgZGV2aWNlIGlzIGdvaW5nIGF3YXksIGZsdXNoIGFueSBwYWNrZXRzIHN0aWxsIHBlbmRpbmcgICovCiBzdGF0aWMgdm9pZCBmbHVzaF9iYWNrbG9nKHZvaWQgKmFyZykKQEAgLTI4NTIsNyArMjg5Myw3IEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyBnaWZjb25mX2Z1bmNfdCAqIGdpZmNvbmZfbGlzdCBbTlBST1RPXTsKK3N0YXRpYyBnaWZjb25mX2Z1bmNfdCAqZ2lmY29uZl9saXN0W05QUk9UT107CiAKIC8qKgogICoJcmVnaXN0ZXJfZ2lmY29uZgktCXJlZ2lzdGVyIGEgU0lPQ0dJRiBoYW5kbGVyCkBAIC0yODYzLDEzICsyOTA0LDE0IEBACiAgKgl0aGF0IGlzIHBhc3NlZCBtdXN0IG5vdCBiZSBmcmVlZCBvciByZXVzZWQgdW50aWwgaXQgaGFzIGJlZW4gcmVwbGFjZWQKICAqCWJ5IGFub3RoZXIgaGFuZGxlci4KICAqLwotaW50IHJlZ2lzdGVyX2dpZmNvbmYodW5zaWduZWQgaW50IGZhbWlseSwgZ2lmY29uZl9mdW5jX3QgKiBnaWZjb25mKQoraW50IHJlZ2lzdGVyX2dpZmNvbmYodW5zaWduZWQgaW50IGZhbWlseSwgZ2lmY29uZl9mdW5jX3QgKmdpZmNvbmYpCiB7CiAJaWYgKGZhbWlseSA+PSBOUFJPVE8pCiAJCXJldHVybiAtRUlOVkFMOwogCWdpZmNvbmZfbGlzdFtmYW1pbHldID0gZ2lmY29uZjsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wocmVnaXN0ZXJfZ2lmY29uZik7CiAKIAogLyoKQEAgLTMwODAsNyArMzEyMiw3IEBACiAJc2VxX3ByaW50ZihzZXEsICIlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKIAkJICAgcy0+dG90YWwsIHMtPmRyb3BwZWQsIHMtPnRpbWVfc3F1ZWV6ZSwgMCwKIAkJICAgMCwgMCwgMCwgMCwgLyogd2FzIGZhc3Ryb3V0ZSAqLwotCQkgICBzLT5jcHVfY29sbGlzaW9uICk7CisJCSAgIHMtPmNwdV9jb2xsaXNpb24pOwogCXJldHVybiAwOwogfQogCkBAIC0zMzE2LDYgKzMzNTgsNyBAQAogCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgc2xhdmUsIElGRl9TTEFWRSk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9zZXRfbWFzdGVyKTsKIAogc3RhdGljIHZvaWQgZGV2X2NoYW5nZV9yeF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZmxhZ3MpCiB7CkBAIC0zMzk0LDYgKzM0MzcsNyBAQAogCQlkZXZfc2V0X3J4X21vZGUoZGV2KTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChkZXZfc2V0X3Byb21pc2N1aXR5KTsKIAogLyoqCiAgKglkZXZfc2V0X2FsbG11bHRpCS0gdXBkYXRlIGFsbG11bHRpIGNvdW50IG9uIGEgZGV2aWNlCkBAIC0zNDM3LDYgKzM0ODEsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X3NldF9hbGxtdWx0aSk7CiAKIC8qCiAgKglVcGxvYWQgdW5pY2FzdCBhbmQgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgdG8gZGV2aWNlIGFuZApAQCAtMzkyNyw2ICszOTcyLDcgQEAKIAl9CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9fZGV2X2FkZHJfc3luYyk7CiAKIHZvaWQgX19kZXZfYWRkcl91bnN5bmMoc3RydWN0IGRldl9hZGRyX2xpc3QgKip0bywgaW50ICp0b19jb3VudCwKIAkJICAgICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICoqZnJvbSwgaW50ICpmcm9tX2NvdW50KQpAQCAtMzk0Niw2ICszOTkyLDcgQEAKIAkJZGEgPSBuZXh0OwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9fZGV2X2FkZHJfdW5zeW5jKTsKIAogLyoqCiAgKglkZXZfdW5pY2FzdF9zeW5jIC0gU3luY2hyb25pemUgZGV2aWNlJ3MgdW5pY2FzdCBsaXN0IHRvIGFub3RoZXIgZGV2aWNlCkBAIC00MDY0LDYgKzQxMTEsNyBAQAogCiAJcmV0dXJuIGZsYWdzOwogfQorRVhQT1JUX1NZTUJPTChkZXZfZ2V0X2ZsYWdzKTsKIAogLyoqCiAgKglkZXZfY2hhbmdlX2ZsYWdzIC0gY2hhbmdlIGRldmljZSBzZXR0aW5ncwpAQCAtNDExNCwxMiArNDE2MiwxMyBAQAogCX0KIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQICYmCi0JICAgICgob2xkX2ZsYWdzIF4gZGV2LT5mbGFncykgJn4gKElGRl9VUCB8IElGRl9QUk9NSVNDIHwgSUZGX0FMTE1VTFRJIHwKKwkgICAgKChvbGRfZmxhZ3MgXiBkZXYtPmZsYWdzKSAmIH4oSUZGX1VQIHwgSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkgfAogCQkJCQkgIElGRl9WT0xBVElMRSkpKQogCQljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRSwgZGV2KTsKIAogCWlmICgoZmxhZ3MgXiBkZXYtPmdmbGFncykgJiBJRkZfUFJPTUlTQykgewotCQlpbnQgaW5jID0gKGZsYWdzICYgSUZGX1BST01JU0MpID8gKzEgOiAtMTsKKwkJaW50IGluYyA9IChmbGFncyAmIElGRl9QUk9NSVNDKSA/IDEgOiAtMTsKKwogCQlkZXYtPmdmbGFncyBePSBJRkZfUFJPTUlTQzsKIAkJZGV2X3NldF9wcm9taXNjdWl0eShkZXYsIGluYyk7CiAJfQpAQCAtNDEyOSw3ICs0MTc4LDggQEAKIAkgICBJRkZfQUxMTVVMVEkgaXMgcmVxdWVzdGVkIG5vdCBhc2tpbmcgdXMgYW5kIG5vdCByZXBvcnRpbmcuCiAJICovCiAJaWYgKChmbGFncyBeIGRldi0+Z2ZsYWdzKSAmIElGRl9BTExNVUxUSSkgewotCQlpbnQgaW5jID0gKGZsYWdzICYgSUZGX0FMTE1VTFRJKSA/ICsxIDogLTE7CisJCWludCBpbmMgPSAoZmxhZ3MgJiBJRkZfQUxMTVVMVEkpID8gMSA6IC0xOworCiAJCWRldi0+Z2ZsYWdzIF49IElGRl9BTExNVUxUSTsKIAkJZGV2X3NldF9hbGxtdWx0aShkZXYsIGluYyk7CiAJfQpAQCAtNDE0MSw2ICs0MTkxLDcgQEAKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGRldl9jaGFuZ2VfZmxhZ3MpOwogCiAvKioKICAqCWRldl9zZXRfbXR1IC0gQ2hhbmdlIG1heGltdW0gdHJhbnNmZXIgdW5pdApAQCAtNDE3NCw2ICs0MjI1LDcgQEAKIAkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9DSEFOR0VNVFUsIGRldik7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X3NldF9tdHUpOwogCiAvKioKICAqCWRldl9zZXRfbWFjX2FkZHJlc3MgLSBDaGFuZ2UgTWVkaWEgQWNjZXNzIENvbnRyb2wgQWRkcmVzcwpAQCAtNDE5OCw2ICs0MjUwLDcgQEAKIAkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9DSEFOR0VBRERSLCBkZXYpOwogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKGRldl9zZXRfbWFjX2FkZHJlc3MpOwogCiAvKgogICoJUGVyZm9ybSB0aGUgU0lPQ3hJRnh4eCBjYWxscywgaW5zaWRlIHJlYWRfbG9jayhkZXZfYmFzZV9sb2NrKQpAQCAtNDIxMSw1NiArNDI2NCw1NiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgU0lPQ0dJRkZMQUdTOgkvKiBHZXQgaW50ZXJmYWNlIGZsYWdzICovCi0JCQlpZnItPmlmcl9mbGFncyA9IChzaG9ydCkgZGV2X2dldF9mbGFncyhkZXYpOwotCQkJcmV0dXJuIDA7CisJY2FzZSBTSU9DR0lGRkxBR1M6CS8qIEdldCBpbnRlcmZhY2UgZmxhZ3MgKi8KKwkJaWZyLT5pZnJfZmxhZ3MgPSAoc2hvcnQpIGRldl9nZXRfZmxhZ3MoZGV2KTsKKwkJcmV0dXJuIDA7CiAKLQkJY2FzZSBTSU9DR0lGTUVUUklDOgkvKiBHZXQgdGhlIG1ldHJpYyBvbiB0aGUgaW50ZXJmYWNlCi0JCQkJCSAgIChjdXJyZW50bHkgdW51c2VkKSAqLwotCQkJaWZyLT5pZnJfbWV0cmljID0gMDsKLQkJCXJldHVybiAwOworCWNhc2UgU0lPQ0dJRk1FVFJJQzoJLyogR2V0IHRoZSBtZXRyaWMgb24gdGhlIGludGVyZmFjZQorCQkJCSAgIChjdXJyZW50bHkgdW51c2VkKSAqLworCQlpZnItPmlmcl9tZXRyaWMgPSAwOworCQlyZXR1cm4gMDsKIAotCQljYXNlIFNJT0NHSUZNVFU6CS8qIEdldCB0aGUgTVRVIG9mIGEgZGV2aWNlICovCi0JCQlpZnItPmlmcl9tdHUgPSBkZXYtPm10dTsKLQkJCXJldHVybiAwOworCWNhc2UgU0lPQ0dJRk1UVToJLyogR2V0IHRoZSBNVFUgb2YgYSBkZXZpY2UgKi8KKwkJaWZyLT5pZnJfbXR1ID0gZGV2LT5tdHU7CisJCXJldHVybiAwOwogCi0JCWNhc2UgU0lPQ0dJRkhXQUREUjoKLQkJCWlmICghZGV2LT5hZGRyX2xlbikKLQkJCQltZW1zZXQoaWZyLT5pZnJfaHdhZGRyLnNhX2RhdGEsIDAsIHNpemVvZiBpZnItPmlmcl9od2FkZHIuc2FfZGF0YSk7Ci0JCQllbHNlCi0JCQkJbWVtY3B5KGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLCBkZXYtPmRldl9hZGRyLAotCQkJCSAgICAgICBtaW4oc2l6ZW9mIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLCAoc2l6ZV90KSBkZXYtPmFkZHJfbGVuKSk7Ci0JCQlpZnItPmlmcl9od2FkZHIuc2FfZmFtaWx5ID0gZGV2LT50eXBlOwotCQkJcmV0dXJuIDA7CisJY2FzZSBTSU9DR0lGSFdBRERSOgorCQlpZiAoIWRldi0+YWRkcl9sZW4pCisJCQltZW1zZXQoaWZyLT5pZnJfaHdhZGRyLnNhX2RhdGEsIDAsIHNpemVvZiBpZnItPmlmcl9od2FkZHIuc2FfZGF0YSk7CisJCWVsc2UKKwkJCW1lbWNweShpZnItPmlmcl9od2FkZHIuc2FfZGF0YSwgZGV2LT5kZXZfYWRkciwKKwkJCSAgICAgICBtaW4oc2l6ZW9mIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLCAoc2l6ZV90KSBkZXYtPmFkZHJfbGVuKSk7CisJCWlmci0+aWZyX2h3YWRkci5zYV9mYW1pbHkgPSBkZXYtPnR5cGU7CisJCXJldHVybiAwOwogCi0JCWNhc2UgU0lPQ0dJRlNMQVZFOgotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFrOworCWNhc2UgU0lPQ0dJRlNMQVZFOgorCQllcnIgPSAtRUlOVkFMOworCQlicmVhazsKIAotCQljYXNlIFNJT0NHSUZNQVA6Ci0JCQlpZnItPmlmcl9tYXAubWVtX3N0YXJ0ID0gZGV2LT5tZW1fc3RhcnQ7Ci0JCQlpZnItPmlmcl9tYXAubWVtX2VuZCAgID0gZGV2LT5tZW1fZW5kOwotCQkJaWZyLT5pZnJfbWFwLmJhc2VfYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCQkJaWZyLT5pZnJfbWFwLmlycSAgICAgICA9IGRldi0+aXJxOwotCQkJaWZyLT5pZnJfbWFwLmRtYSAgICAgICA9IGRldi0+ZG1hOwotCQkJaWZyLT5pZnJfbWFwLnBvcnQgICAgICA9IGRldi0+aWZfcG9ydDsKLQkJCXJldHVybiAwOworCWNhc2UgU0lPQ0dJRk1BUDoKKwkJaWZyLT5pZnJfbWFwLm1lbV9zdGFydCA9IGRldi0+bWVtX3N0YXJ0OworCQlpZnItPmlmcl9tYXAubWVtX2VuZCAgID0gZGV2LT5tZW1fZW5kOworCQlpZnItPmlmcl9tYXAuYmFzZV9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJCWlmci0+aWZyX21hcC5pcnEgICAgICAgPSBkZXYtPmlycTsKKwkJaWZyLT5pZnJfbWFwLmRtYSAgICAgICA9IGRldi0+ZG1hOworCQlpZnItPmlmcl9tYXAucG9ydCAgICAgID0gZGV2LT5pZl9wb3J0OworCQlyZXR1cm4gMDsKIAotCQljYXNlIFNJT0NHSUZJTkRFWDoKLQkJCWlmci0+aWZyX2lmaW5kZXggPSBkZXYtPmlmaW5kZXg7Ci0JCQlyZXR1cm4gMDsKKwljYXNlIFNJT0NHSUZJTkRFWDoKKwkJaWZyLT5pZnJfaWZpbmRleCA9IGRldi0+aWZpbmRleDsKKwkJcmV0dXJuIDA7CiAKLQkJY2FzZSBTSU9DR0lGVFhRTEVOOgotCQkJaWZyLT5pZnJfcWxlbiA9IGRldi0+dHhfcXVldWVfbGVuOwotCQkJcmV0dXJuIDA7CisJY2FzZSBTSU9DR0lGVFhRTEVOOgorCQlpZnItPmlmcl9xbGVuID0gZGV2LT50eF9xdWV1ZV9sZW47CisJCXJldHVybiAwOwogCi0JCWRlZmF1bHQ6Ci0JCQkvKiBkZXZfaW9jdGwoKSBzaG91bGQgZW5zdXJlIHRoaXMgY2FzZQotCQkJICogaXMgbmV2ZXIgcmVhY2hlZAotCQkJICovCi0JCQlXQVJOX09OKDEpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGRldl9pb2N0bCgpIHNob3VsZCBlbnN1cmUgdGhpcyBjYXNlCisJCSAqIGlzIG5ldmVyIHJlYWNoZWQKKwkJICovCisJCVdBUk5fT04oMSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWJyZWFrOwogCiAJfQogCXJldHVybiBlcnI7CkBAIC00MjgxLDkyICs0MzM0LDkxIEBACiAJb3BzID0gZGV2LT5uZXRkZXZfb3BzOwogCiAJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBTSU9DU0lGRkxBR1M6CS8qIFNldCBpbnRlcmZhY2UgZmxhZ3MgKi8KLQkJCXJldHVybiBkZXZfY2hhbmdlX2ZsYWdzKGRldiwgaWZyLT5pZnJfZmxhZ3MpOworCWNhc2UgU0lPQ1NJRkZMQUdTOgkvKiBTZXQgaW50ZXJmYWNlIGZsYWdzICovCisJCXJldHVybiBkZXZfY2hhbmdlX2ZsYWdzKGRldiwgaWZyLT5pZnJfZmxhZ3MpOwogCi0JCWNhc2UgU0lPQ1NJRk1FVFJJQzoJLyogU2V0IHRoZSBtZXRyaWMgb24gdGhlIGludGVyZmFjZQotCQkJCQkgICAoY3VycmVudGx5IHVudXNlZCkgKi8KLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwljYXNlIFNJT0NTSUZNRVRSSUM6CS8qIFNldCB0aGUgbWV0cmljIG9uIHRoZSBpbnRlcmZhY2UKKwkJCQkgICAoY3VycmVudGx5IHVudXNlZCkgKi8KKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JCWNhc2UgU0lPQ1NJRk1UVToJLyogU2V0IHRoZSBNVFUgb2YgYSBkZXZpY2UgKi8KLQkJCXJldHVybiBkZXZfc2V0X210dShkZXYsIGlmci0+aWZyX210dSk7CisJY2FzZSBTSU9DU0lGTVRVOgkvKiBTZXQgdGhlIE1UVSBvZiBhIGRldmljZSAqLworCQlyZXR1cm4gZGV2X3NldF9tdHUoZGV2LCBpZnItPmlmcl9tdHUpOwogCi0JCWNhc2UgU0lPQ1NJRkhXQUREUjoKLQkJCXJldHVybiBkZXZfc2V0X21hY19hZGRyZXNzKGRldiwgJmlmci0+aWZyX2h3YWRkcik7CisJY2FzZSBTSU9DU0lGSFdBRERSOgorCQlyZXR1cm4gZGV2X3NldF9tYWNfYWRkcmVzcyhkZXYsICZpZnItPmlmcl9od2FkZHIpOwogCi0JCWNhc2UgU0lPQ1NJRkhXQlJPQURDQVNUOgotCQkJaWYgKGlmci0+aWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gZGV2LT50eXBlKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCBpZnItPmlmcl9od2FkZHIuc2FfZGF0YSwKLQkJCSAgICAgICBtaW4oc2l6ZW9mIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLCAoc2l6ZV90KSBkZXYtPmFkZHJfbGVuKSk7Ci0JCQljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRUFERFIsIGRldik7Ci0JCQlyZXR1cm4gMDsKKwljYXNlIFNJT0NTSUZIV0JST0FEQ0FTVDoKKwkJaWYgKGlmci0+aWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gZGV2LT50eXBlKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgaWZyLT5pZnJfaHdhZGRyLnNhX2RhdGEsCisJCSAgICAgICBtaW4oc2l6ZW9mIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLCAoc2l6ZV90KSBkZXYtPmFkZHJfbGVuKSk7CisJCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfQ0hBTkdFQUREUiwgZGV2KTsKKwkJcmV0dXJuIDA7CiAKLQkJY2FzZSBTSU9DU0lGTUFQOgotCQkJaWYgKG9wcy0+bmRvX3NldF9jb25maWcpIHsKLQkJCQlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCi0JCQkJCXJldHVybiAtRU5PREVWOwotCQkJCXJldHVybiBvcHMtPm5kb19zZXRfY29uZmlnKGRldiwgJmlmci0+aWZyX21hcCk7CisJY2FzZSBTSU9DU0lGTUFQOgorCQlpZiAob3BzLT5uZG9fc2V0X2NvbmZpZykgeworCQkJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKQorCQkJCXJldHVybiAtRU5PREVWOworCQkJcmV0dXJuIG9wcy0+bmRvX3NldF9jb25maWcoZGV2LCAmaWZyLT5pZnJfbWFwKTsKKwkJfQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwljYXNlIFNJT0NBRERNVUxUSToKKwkJaWYgKCghb3BzLT5uZG9fc2V0X211bHRpY2FzdF9saXN0ICYmICFvcHMtPm5kb19zZXRfcnhfbW9kZSkgfHwKKwkJICAgIGlmci0+aWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gQUZfVU5TUEVDKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKKwkJCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gZGV2X21jX2FkZChkZXYsIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLAorCQkJCSAgZGV2LT5hZGRyX2xlbiwgMSk7CisKKwljYXNlIFNJT0NERUxNVUxUSToKKwkJaWYgKCghb3BzLT5uZG9fc2V0X211bHRpY2FzdF9saXN0ICYmICFvcHMtPm5kb19zZXRfcnhfbW9kZSkgfHwKKwkJICAgIGlmci0+aWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gQUZfVU5TUEVDKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKKwkJCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gZGV2X21jX2RlbGV0ZShkZXYsIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLAorCQkJCSAgICAgZGV2LT5hZGRyX2xlbiwgMSk7CisKKwljYXNlIFNJT0NTSUZUWFFMRU46CisJCWlmIChpZnItPmlmcl9xbGVuIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IGlmci0+aWZyX3FsZW47CisJCXJldHVybiAwOworCisJY2FzZSBTSU9DU0lGTkFNRToKKwkJaWZyLT5pZnJfbmV3bmFtZVtJRk5BTVNJWi0xXSA9ICdcMCc7CisJCXJldHVybiBkZXZfY2hhbmdlX25hbWUoZGV2LCBpZnItPmlmcl9uZXduYW1lKTsKKworCS8qCisJICoJVW5rbm93biBvciBwcml2YXRlIGlvY3RsCisJICovCisJZGVmYXVsdDoKKwkJaWYgKChjbWQgPj0gU0lPQ0RFVlBSSVZBVEUgJiYKKwkJICAgIGNtZCA8PSBTSU9DREVWUFJJVkFURSArIDE1KSB8fAorCQkgICAgY21kID09IFNJT0NCT05ERU5TTEFWRSB8fAorCQkgICAgY21kID09IFNJT0NCT05EUkVMRUFTRSB8fAorCQkgICAgY21kID09IFNJT0NCT05EU0VUSFdBRERSIHx8CisJCSAgICBjbWQgPT0gU0lPQ0JPTkRTTEFWRUlORk9RVUVSWSB8fAorCQkgICAgY21kID09IFNJT0NCT05ESU5GT1FVRVJZIHx8CisJCSAgICBjbWQgPT0gU0lPQ0JPTkRDSEFOR0VBQ1RJVkUgfHwKKwkJICAgIGNtZCA9PSBTSU9DR01JSVBIWSB8fAorCQkgICAgY21kID09IFNJT0NHTUlJUkVHIHx8CisJCSAgICBjbWQgPT0gU0lPQ1NNSUlSRUcgfHwKKwkJICAgIGNtZCA9PSBTSU9DQlJBRERJRiB8fAorCQkgICAgY21kID09IFNJT0NCUkRFTElGIHx8CisJCSAgICBjbWQgPT0gU0lPQ1NIV1RTVEFNUCB8fAorCQkgICAgY21kID09IFNJT0NXQU5ERVYpIHsKKwkJCWVyciA9IC1FT1BOT1RTVVBQOworCQkJaWYgKG9wcy0+bmRvX2RvX2lvY3RsKSB7CisJCQkJaWYgKG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCisJCQkJCWVyciA9IG9wcy0+bmRvX2RvX2lvY3RsKGRldiwgaWZyLCBjbWQpOworCQkJCWVsc2UKKwkJCQkJZXJyID0gLUVOT0RFVjsKIAkJCX0KLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCQljYXNlIFNJT0NBRERNVUxUSToKLQkJCWlmICgoIW9wcy0+bmRvX3NldF9tdWx0aWNhc3RfbGlzdCAmJiAhb3BzLT5uZG9fc2V0X3J4X21vZGUpIHx8Ci0JCQkgICAgaWZyLT5pZnJfaHdhZGRyLnNhX2ZhbWlseSAhPSBBRl9VTlNQRUMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCi0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQlyZXR1cm4gZGV2X21jX2FkZChkZXYsIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLAotCQkJCQkgIGRldi0+YWRkcl9sZW4sIDEpOwotCi0JCWNhc2UgU0lPQ0RFTE1VTFRJOgotCQkJaWYgKCghb3BzLT5uZG9fc2V0X211bHRpY2FzdF9saXN0ICYmICFvcHMtPm5kb19zZXRfcnhfbW9kZSkgfHwKLQkJCSAgICBpZnItPmlmcl9od2FkZHIuc2FfZmFtaWx5ICE9IEFGX1VOU1BFQykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCXJldHVybiBkZXZfbWNfZGVsZXRlKGRldiwgaWZyLT5pZnJfaHdhZGRyLnNhX2RhdGEsCi0JCQkJCSAgICAgZGV2LT5hZGRyX2xlbiwgMSk7Ci0KLQkJY2FzZSBTSU9DU0lGVFhRTEVOOgotCQkJaWYgKGlmci0+aWZyX3FsZW4gPCAwKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJZGV2LT50eF9xdWV1ZV9sZW4gPSBpZnItPmlmcl9xbGVuOwotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBTSU9DU0lGTkFNRToKLQkJCWlmci0+aWZyX25ld25hbWVbSUZOQU1TSVotMV0gPSAnXDAnOwotCQkJcmV0dXJuIGRldl9jaGFuZ2VfbmFtZShkZXYsIGlmci0+aWZyX25ld25hbWUpOwotCi0JCS8qCi0JCSAqCVVua25vd24gb3IgcHJpdmF0ZSBpb2N0bAotCQkgKi8KLQotCQlkZWZhdWx0OgotCQkJaWYgKChjbWQgPj0gU0lPQ0RFVlBSSVZBVEUgJiYKLQkJCSAgICBjbWQgPD0gU0lPQ0RFVlBSSVZBVEUgKyAxNSkgfHwKLQkJCSAgICBjbWQgPT0gU0lPQ0JPTkRFTlNMQVZFIHx8Ci0JCQkgICAgY21kID09IFNJT0NCT05EUkVMRUFTRSB8fAotCQkJICAgIGNtZCA9PSBTSU9DQk9ORFNFVEhXQUREUiB8fAotCQkJICAgIGNtZCA9PSBTSU9DQk9ORFNMQVZFSU5GT1FVRVJZIHx8Ci0JCQkgICAgY21kID09IFNJT0NCT05ESU5GT1FVRVJZIHx8Ci0JCQkgICAgY21kID09IFNJT0NCT05EQ0hBTkdFQUNUSVZFIHx8Ci0JCQkgICAgY21kID09IFNJT0NHTUlJUEhZIHx8Ci0JCQkgICAgY21kID09IFNJT0NHTUlJUkVHIHx8Ci0JCQkgICAgY21kID09IFNJT0NTTUlJUkVHIHx8Ci0JCQkgICAgY21kID09IFNJT0NCUkFERElGIHx8Ci0JCQkgICAgY21kID09IFNJT0NCUkRFTElGIHx8Ci0JCQkgICAgY21kID09IFNJT0NTSFdUU1RBTVAgfHwKLQkJCSAgICBjbWQgPT0gU0lPQ1dBTkRFVikgewotCQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJCWlmIChvcHMtPm5kb19kb19pb2N0bCkgewotCQkJCQlpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKLQkJCQkJCWVyciA9IG9wcy0+bmRvX2RvX2lvY3RsKGRldiwgaWZyLCBjbWQpOwotCQkJCQllbHNlCi0JCQkJCQllcnIgPSAtRU5PREVWOwotCQkJCX0KLQkJCX0gZWxzZQotCQkJCWVyciA9IC1FSU5WQUw7CisJCX0gZWxzZQorCQkJZXJyID0gLUVJTlZBTDsKIAogCX0KIAlyZXR1cm4gZXJyOwpAQCAtNDQyMywxMzUgKzQ0NzUsMTM1IEBACiAJICovCiAKIAlzd2l0Y2ggKGNtZCkgewotCQkvKgotCQkgKglUaGVzZSBpb2N0bCBjYWxsczoKLQkJICoJLSBjYW4gYmUgZG9uZSBieSBhbGwuCi0JCSAqCS0gYXRvbWljIGFuZCBkbyBub3QgcmVxdWlyZSBsb2NraW5nLgotCQkgKgktIHJldHVybiBhIHZhbHVlCi0JCSAqLwotCQljYXNlIFNJT0NHSUZGTEFHUzoKLQkJY2FzZSBTSU9DR0lGTUVUUklDOgotCQljYXNlIFNJT0NHSUZNVFU6Ci0JCWNhc2UgU0lPQ0dJRkhXQUREUjoKLQkJY2FzZSBTSU9DR0lGU0xBVkU6Ci0JCWNhc2UgU0lPQ0dJRk1BUDoKLQkJY2FzZSBTSU9DR0lGSU5ERVg6Ci0JCWNhc2UgU0lPQ0dJRlRYUUxFTjoKLQkJCWRldl9sb2FkKG5ldCwgaWZyLmlmcl9uYW1lKTsKLQkJCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7Ci0JCQlyZXQgPSBkZXZfaWZzaW9jX2xvY2tlZChuZXQsICZpZnIsIGNtZCk7Ci0JCQlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7Ci0JCQlpZiAoIXJldCkgewotCQkJCWlmIChjb2xvbikKLQkJCQkJKmNvbG9uID0gJzonOwotCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmaWZyLAotCQkJCQkJIHNpemVvZihzdHJ1Y3QgaWZyZXEpKSkKLQkJCQkJcmV0ID0gLUVGQVVMVDsKLQkJCX0KLQkJCXJldHVybiByZXQ7CisJLyoKKwkgKglUaGVzZSBpb2N0bCBjYWxsczoKKwkgKgktIGNhbiBiZSBkb25lIGJ5IGFsbC4KKwkgKgktIGF0b21pYyBhbmQgZG8gbm90IHJlcXVpcmUgbG9ja2luZy4KKwkgKgktIHJldHVybiBhIHZhbHVlCisJICovCisJY2FzZSBTSU9DR0lGRkxBR1M6CisJY2FzZSBTSU9DR0lGTUVUUklDOgorCWNhc2UgU0lPQ0dJRk1UVToKKwljYXNlIFNJT0NHSUZIV0FERFI6CisJY2FzZSBTSU9DR0lGU0xBVkU6CisJY2FzZSBTSU9DR0lGTUFQOgorCWNhc2UgU0lPQ0dJRklOREVYOgorCWNhc2UgU0lPQ0dJRlRYUUxFTjoKKwkJZGV2X2xvYWQobmV0LCBpZnIuaWZyX25hbWUpOworCQlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOworCQlyZXQgPSBkZXZfaWZzaW9jX2xvY2tlZChuZXQsICZpZnIsIGNtZCk7CisJCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWlmIChjb2xvbikKKwkJCQkqY29sb24gPSAnOic7CisJCQlpZiAoY29weV90b191c2VyKGFyZywgJmlmciwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgaWZyZXEpKSkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQl9CisJCXJldHVybiByZXQ7CiAKLQkJY2FzZSBTSU9DRVRIVE9PTDoKLQkJCWRldl9sb2FkKG5ldCwgaWZyLmlmcl9uYW1lKTsKLQkJCXJ0bmxfbG9jaygpOwotCQkJcmV0ID0gZGV2X2V0aHRvb2wobmV0LCAmaWZyKTsKLQkJCXJ0bmxfdW5sb2NrKCk7Ci0JCQlpZiAoIXJldCkgewotCQkJCWlmIChjb2xvbikKLQkJCQkJKmNvbG9uID0gJzonOwotCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmaWZyLAotCQkJCQkJIHNpemVvZihzdHJ1Y3QgaWZyZXEpKSkKLQkJCQkJcmV0ID0gLUVGQVVMVDsKLQkJCX0KLQkJCXJldHVybiByZXQ7CisJY2FzZSBTSU9DRVRIVE9PTDoKKwkJZGV2X2xvYWQobmV0LCBpZnIuaWZyX25hbWUpOworCQlydG5sX2xvY2soKTsKKwkJcmV0ID0gZGV2X2V0aHRvb2wobmV0LCAmaWZyKTsKKwkJcnRubF91bmxvY2soKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWlmIChjb2xvbikKKwkJCQkqY29sb24gPSAnOic7CisJCQlpZiAoY29weV90b191c2VyKGFyZywgJmlmciwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgaWZyZXEpKSkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQl9CisJCXJldHVybiByZXQ7CiAKLQkJLyoKLQkJICoJVGhlc2UgaW9jdGwgY2FsbHM6Ci0JCSAqCS0gcmVxdWlyZSBzdXBlcnVzZXIgcG93ZXIuCi0JCSAqCS0gcmVxdWlyZSBzdHJpY3Qgc2VyaWFsaXphdGlvbi4KLQkJICoJLSByZXR1cm4gYSB2YWx1ZQotCQkgKi8KLQkJY2FzZSBTSU9DR01JSVBIWToKLQkJY2FzZSBTSU9DR01JSVJFRzoKLQkJY2FzZSBTSU9DU0lGTkFNRToKLQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCQlyZXR1cm4gLUVQRVJNOworCS8qCisJICoJVGhlc2UgaW9jdGwgY2FsbHM6CisJICoJLSByZXF1aXJlIHN1cGVydXNlciBwb3dlci4KKwkgKgktIHJlcXVpcmUgc3RyaWN0IHNlcmlhbGl6YXRpb24uCisJICoJLSByZXR1cm4gYSB2YWx1ZQorCSAqLworCWNhc2UgU0lPQ0dNSUlQSFk6CisJY2FzZSBTSU9DR01JSVJFRzoKKwljYXNlIFNJT0NTSUZOQU1FOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQlkZXZfbG9hZChuZXQsIGlmci5pZnJfbmFtZSk7CisJCXJ0bmxfbG9jaygpOworCQlyZXQgPSBkZXZfaWZzaW9jKG5ldCwgJmlmciwgY21kKTsKKwkJcnRubF91bmxvY2soKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWlmIChjb2xvbikKKwkJCQkqY29sb24gPSAnOic7CisJCQlpZiAoY29weV90b191c2VyKGFyZywgJmlmciwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgaWZyZXEpKSkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQl9CisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqCVRoZXNlIGlvY3RsIGNhbGxzOgorCSAqCS0gcmVxdWlyZSBzdXBlcnVzZXIgcG93ZXIuCisJICoJLSByZXF1aXJlIHN0cmljdCBzZXJpYWxpemF0aW9uLgorCSAqCS0gZG8gbm90IHJldHVybiBhIHZhbHVlCisJICovCisJY2FzZSBTSU9DU0lGRkxBR1M6CisJY2FzZSBTSU9DU0lGTUVUUklDOgorCWNhc2UgU0lPQ1NJRk1UVToKKwljYXNlIFNJT0NTSUZNQVA6CisJY2FzZSBTSU9DU0lGSFdBRERSOgorCWNhc2UgU0lPQ1NJRlNMQVZFOgorCWNhc2UgU0lPQ0FERE1VTFRJOgorCWNhc2UgU0lPQ0RFTE1VTFRJOgorCWNhc2UgU0lPQ1NJRkhXQlJPQURDQVNUOgorCWNhc2UgU0lPQ1NJRlRYUUxFTjoKKwljYXNlIFNJT0NTTUlJUkVHOgorCWNhc2UgU0lPQ0JPTkRFTlNMQVZFOgorCWNhc2UgU0lPQ0JPTkRSRUxFQVNFOgorCWNhc2UgU0lPQ0JPTkRTRVRIV0FERFI6CisJY2FzZSBTSU9DQk9ORENIQU5HRUFDVElWRToKKwljYXNlIFNJT0NCUkFERElGOgorCWNhc2UgU0lPQ0JSREVMSUY6CisJY2FzZSBTSU9DU0hXVFNUQU1QOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNJT0NCT05EU0xBVkVJTkZPUVVFUlk6CisJY2FzZSBTSU9DQk9ORElORk9RVUVSWToKKwkJZGV2X2xvYWQobmV0LCBpZnIuaWZyX25hbWUpOworCQlydG5sX2xvY2soKTsKKwkJcmV0ID0gZGV2X2lmc2lvYyhuZXQsICZpZnIsIGNtZCk7CisJCXJ0bmxfdW5sb2NrKCk7CisJCXJldHVybiByZXQ7CisKKwljYXNlIFNJT0NHSUZNRU06CisJCS8qIEdldCB0aGUgcGVyIGRldmljZSBtZW1vcnkgc3BhY2UuIFdlIGNhbiBhZGQgdGhpcyBidXQKKwkJICogY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IGl0ICovCisJY2FzZSBTSU9DU0lGTUVNOgorCQkvKiBTZXQgdGhlIHBlciBkZXZpY2UgbWVtb3J5IGJ1ZmZlciBzcGFjZS4KKwkJICogTm90IGFwcGxpY2FibGUgaW4gb3VyIGNhc2UgKi8KKwljYXNlIFNJT0NTSUZMSU5LOgorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICoJVW5rbm93biBvciBwcml2YXRlIGlvY3RsLgorCSAqLworCWRlZmF1bHQ6CisJCWlmIChjbWQgPT0gU0lPQ1dBTkRFViB8fAorCQkgICAgKGNtZCA+PSBTSU9DREVWUFJJVkFURSAmJgorCQkgICAgIGNtZCA8PSBTSU9DREVWUFJJVkFURSArIDE1KSkgewogCQkJZGV2X2xvYWQobmV0LCBpZnIuaWZyX25hbWUpOwogCQkJcnRubF9sb2NrKCk7CiAJCQlyZXQgPSBkZXZfaWZzaW9jKG5ldCwgJmlmciwgY21kKTsKIAkJCXJ0bmxfdW5sb2NrKCk7Ci0JCQlpZiAoIXJldCkgewotCQkJCWlmIChjb2xvbikKLQkJCQkJKmNvbG9uID0gJzonOwotCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmaWZyLAorCQkJaWYgKCFyZXQgJiYgY29weV90b191c2VyKGFyZywgJmlmciwKIAkJCQkJCSBzaXplb2Yoc3RydWN0IGlmcmVxKSkpCi0JCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQl9CisJCQkJcmV0ID0gLUVGQVVMVDsKIAkJCXJldHVybiByZXQ7Ci0KLQkJLyoKLQkJICoJVGhlc2UgaW9jdGwgY2FsbHM6Ci0JCSAqCS0gcmVxdWlyZSBzdXBlcnVzZXIgcG93ZXIuCi0JCSAqCS0gcmVxdWlyZSBzdHJpY3Qgc2VyaWFsaXphdGlvbi4KLQkJICoJLSBkbyBub3QgcmV0dXJuIGEgdmFsdWUKLQkJICovCi0JCWNhc2UgU0lPQ1NJRkZMQUdTOgotCQljYXNlIFNJT0NTSUZNRVRSSUM6Ci0JCWNhc2UgU0lPQ1NJRk1UVToKLQkJY2FzZSBTSU9DU0lGTUFQOgotCQljYXNlIFNJT0NTSUZIV0FERFI6Ci0JCWNhc2UgU0lPQ1NJRlNMQVZFOgotCQljYXNlIFNJT0NBRERNVUxUSToKLQkJY2FzZSBTSU9DREVMTVVMVEk6Ci0JCWNhc2UgU0lPQ1NJRkhXQlJPQURDQVNUOgotCQljYXNlIFNJT0NTSUZUWFFMRU46Ci0JCWNhc2UgU0lPQ1NNSUlSRUc6Ci0JCWNhc2UgU0lPQ0JPTkRFTlNMQVZFOgotCQljYXNlIFNJT0NCT05EUkVMRUFTRToKLQkJY2FzZSBTSU9DQk9ORFNFVEhXQUREUjoKLQkJY2FzZSBTSU9DQk9ORENIQU5HRUFDVElWRToKLQkJY2FzZSBTSU9DQlJBRERJRjoKLQkJY2FzZSBTSU9DQlJERUxJRjoKLQkJY2FzZSBTSU9DU0hXVFNUQU1QOgotCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJCXJldHVybiAtRVBFUk07Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBTSU9DQk9ORFNMQVZFSU5GT1FVRVJZOgotCQljYXNlIFNJT0NCT05ESU5GT1FVRVJZOgotCQkJZGV2X2xvYWQobmV0LCBpZnIuaWZyX25hbWUpOwotCQkJcnRubF9sb2NrKCk7Ci0JCQlyZXQgPSBkZXZfaWZzaW9jKG5ldCwgJmlmciwgY21kKTsKLQkJCXJ0bmxfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gcmV0OwotCi0JCWNhc2UgU0lPQ0dJRk1FTToKLQkJCS8qIEdldCB0aGUgcGVyIGRldmljZSBtZW1vcnkgc3BhY2UuIFdlIGNhbiBhZGQgdGhpcyBidXQKLQkJCSAqIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBpdCAqLwotCQljYXNlIFNJT0NTSUZNRU06Ci0JCQkvKiBTZXQgdGhlIHBlciBkZXZpY2UgbWVtb3J5IGJ1ZmZlciBzcGFjZS4KLQkJCSAqIE5vdCBhcHBsaWNhYmxlIGluIG91ciBjYXNlICovCi0JCWNhc2UgU0lPQ1NJRkxJTks6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKgotCQkgKglVbmtub3duIG9yIHByaXZhdGUgaW9jdGwuCi0JCSAqLwotCQlkZWZhdWx0OgotCQkJaWYgKGNtZCA9PSBTSU9DV0FOREVWIHx8Ci0JCQkgICAgKGNtZCA+PSBTSU9DREVWUFJJVkFURSAmJgotCQkJICAgICBjbWQgPD0gU0lPQ0RFVlBSSVZBVEUgKyAxNSkpIHsKLQkJCQlkZXZfbG9hZChuZXQsIGlmci5pZnJfbmFtZSk7Ci0JCQkJcnRubF9sb2NrKCk7Ci0JCQkJcmV0ID0gZGV2X2lmc2lvYyhuZXQsICZpZnIsIGNtZCk7Ci0JCQkJcnRubF91bmxvY2soKTsKLQkJCQlpZiAoIXJldCAmJiBjb3B5X3RvX3VzZXIoYXJnLCAmaWZyLAotCQkJCQkJCSBzaXplb2Yoc3RydWN0IGlmcmVxKSkpCi0JCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJCS8qIFRha2UgY2FyZSBvZiBXaXJlbGVzcyBFeHRlbnNpb25zICovCi0JCQlpZiAoY21kID49IFNJT0NJV0ZJUlNUICYmIGNtZCA8PSBTSU9DSVdMQVNUKQotCQkJCXJldHVybiB3ZXh0X2hhbmRsZV9pb2N0bChuZXQsICZpZnIsIGNtZCwgYXJnKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCS8qIFRha2UgY2FyZSBvZiBXaXJlbGVzcyBFeHRlbnNpb25zICovCisJCWlmIChjbWQgPj0gU0lPQ0lXRklSU1QgJiYgY21kIDw9IFNJT0NJV0xBU1QpCisJCQlyZXR1cm4gd2V4dF9oYW5kbGVfaW9jdGwobmV0LCAmaWZyLCBjbWQsIGFyZyk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIH0KIApAQCAtNDgxNiw2ICs0ODY4LDcgQEAKIAkJZGV2LT5uZXRkZXZfb3BzLT5uZG9fdW5pbml0KGRldik7CiAJZ290byBvdXQ7CiB9CitFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX25ldGRldmljZSk7CiAKIC8qKgogICoJaW5pdF9kdW1teV9uZXRkZXYJLSBpbml0IGEgZHVtbXkgbmV0d29yayBkZXZpY2UgZm9yIE5BUEkKQEAgLTUxNjgsNiArNTIyMSw3IEBACiAJLyogd2lsbCBmcmVlIHZpYSBkZXZpY2UgcmVsZWFzZSAqLwogCXB1dF9kZXZpY2UoJmRldi0+ZGV2KTsKIH0KK0VYUE9SVF9TWU1CT0woZnJlZV9uZXRkZXYpOwogCiAvKioKICAqCXN5bmNocm9uaXplX25ldCAtICBTeW5jaHJvbml6ZSB3aXRoIHBhY2tldCByZWNlaXZlIHByb2Nlc3NpbmcKQEAgLTUxODAsNiArNTIzNCw3IEBACiAJbWlnaHRfc2xlZXAoKTsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KK0VYUE9SVF9TWU1CT0woc3luY2hyb25pemVfbmV0KTsKIAogLyoqCiAgKgl1bnJlZ2lzdGVyX25ldGRldmljZSAtIHJlbW92ZSBkZXZpY2UgZnJvbSB0aGUga2VybmVsCkBAIC01MjAwLDYgKzUyNTUsNyBAQAogCS8qIEZpbmlzaCBwcm9jZXNzaW5nIHVucmVnaXN0ZXIgYWZ0ZXIgdW5sb2NrICovCiAJbmV0X3NldF90b2RvKGRldik7CiB9CitFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbmV0ZGV2aWNlKTsKIAogLyoqCiAgKgl1bnJlZ2lzdGVyX25ldGRldiAtIHJlbW92ZSBkZXZpY2UgZnJvbSB0aGUga2VybmVsCkBAIC01MjE4LDcgKzUyNzQsNiBAQAogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAJcnRubF91bmxvY2soKTsKIH0KLQogRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX25ldGRldik7CiAKIC8qKgpAQCAtNTM0Nyw2ICs1NDAyLDcgQEAKIG91dDoKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKTsKIAogc3RhdGljIGludCBkZXZfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLApAQCAtNTQwNyw3ICs1NDYzLDcgQEAKIAkJCQkJdW5zaWduZWQgbG9uZyBtYXNrKQogewogCS8qIElmIGRldmljZSBuZWVkcyBjaGVja3N1bW1pbmcsIGRvd25ncmFkZSB0byBpdC4gKi8KLSAgICAgICAgaWYgKGFsbCAmIE5FVElGX0ZfTk9fQ1NVTSAmJiAhKG9uZSAmIE5FVElGX0ZfTk9fQ1NVTSkpCisJaWYgKGFsbCAmIE5FVElGX0ZfTk9fQ1NVTSAmJiAhKG9uZSAmIE5FVElGX0ZfTk9fQ1NVTSkpCiAJCWFsbCBePSBORVRJRl9GX05PX0NTVU0gfCAob25lICYgTkVUSUZfRl9BTExfQ1NVTSk7CiAJZWxzZSBpZiAobWFzayAmIE5FVElGX0ZfQUxMX0NTVU0pIHsKIAkJLyogSWYgb25lIGRldmljZSBzdXBwb3J0cyB2NC92NiBjaGVja3N1bW1pbmcsIHNldCBmb3IgYWxsLiAqLwpAQCAtNTYzMyw0MSArNTY4OSwzIEBACiAKIGxhdGVfaW5pdGNhbGxfc3luYyhpbml0aWFsaXplX2hhc2hybmQpOwogCi1FWFBPUlRfU1lNQk9MKF9fZGV2X2dldF9ieV9pbmRleCk7Ci1FWFBPUlRfU1lNQk9MKF9fZGV2X2dldF9ieV9uYW1lKTsKLUVYUE9SVF9TWU1CT0woX19kZXZfcmVtb3ZlX3BhY2spOwotRVhQT1JUX1NZTUJPTChkZXZfdmFsaWRfbmFtZSk7Ci1FWFBPUlRfU1lNQk9MKGRldl9hZGRfcGFjayk7Ci1FWFBPUlRfU1lNQk9MKGRldl9hbGxvY19uYW1lKTsKLUVYUE9SVF9TWU1CT0woZGV2X2Nsb3NlKTsKLUVYUE9SVF9TWU1CT0woZGV2X2dldF9ieV9mbGFncyk7Ci1FWFBPUlRfU1lNQk9MKGRldl9nZXRfYnlfaW5kZXgpOwotRVhQT1JUX1NZTUJPTChkZXZfZ2V0X2J5X25hbWUpOwotRVhQT1JUX1NZTUJPTChkZXZfb3Blbik7Ci1FWFBPUlRfU1lNQk9MKGRldl9xdWV1ZV94bWl0KTsKLUVYUE9SVF9TWU1CT0woZGV2X3JlbW92ZV9wYWNrKTsKLUVYUE9SVF9TWU1CT0woZGV2X3NldF9hbGxtdWx0aSk7Ci1FWFBPUlRfU1lNQk9MKGRldl9zZXRfcHJvbWlzY3VpdHkpOwotRVhQT1JUX1NZTUJPTChkZXZfY2hhbmdlX2ZsYWdzKTsKLUVYUE9SVF9TWU1CT0woZGV2X3NldF9tdHUpOwotRVhQT1JUX1NZTUJPTChkZXZfc2V0X21hY19hZGRyZXNzKTsKLUVYUE9SVF9TWU1CT0woZnJlZV9uZXRkZXYpOwotRVhQT1JUX1NZTUJPTChuZXRkZXZfYm9vdF9zZXR1cF9jaGVjayk7Ci1FWFBPUlRfU1lNQk9MKG5ldGRldl9zZXRfbWFzdGVyKTsKLUVYUE9SVF9TWU1CT0wobmV0ZGV2X3N0YXRlX2NoYW5nZSk7Ci1FWFBPUlRfU1lNQk9MKG5ldGlmX3JlY2VpdmVfc2tiKTsKLUVYUE9SVF9TWU1CT0wobmV0aWZfcngpOwotRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9naWZjb25mKTsKLUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbmV0ZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKTsKLUVYUE9SVF9TWU1CT0woc2tiX2NoZWNrc3VtX2hlbHApOwotRVhQT1JUX1NZTUJPTChzeW5jaHJvbml6ZV9uZXQpOwotRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX25ldGRldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKTsKLUVYUE9SVF9TWU1CT0wobmV0X2VuYWJsZV90aW1lc3RhbXApOwotRVhQT1JUX1NZTUJPTChuZXRfZGlzYWJsZV90aW1lc3RhbXApOwotRVhQT1JUX1NZTUJPTChkZXZfZ2V0X2ZsYWdzKTsKLQotRVhQT1JUX1NZTUJPTChkZXZfbG9hZCk7Ci0KLUVYUE9SVF9QRVJfQ1BVX1NZTUJPTChzb2Z0bmV0X2RhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMgYi9uZXQvY29yZS9kcm9wX21vbml0b3IuYwppbmRleCA5ZDY2ZmE5Li4wYTExM2YyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kcm9wX21vbml0b3IuYworKysgYi9uZXQvY29yZS9kcm9wX21vbml0b3IuYwpAQCAtNTIsNiArNTIsNyBAQAogCiBzdHJ1Y3QgZG1faHdfc3RhdF9kZWx0YSB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBsb25nIGxhc3Rfcng7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCByY3VfaGVhZCByY3U7CiAJdW5zaWduZWQgbG9uZyBsYXN0X2Ryb3BfdmFsOwpAQCAtMTgwLDE3ICsxODEsMjUgQEAKIAlzdHJ1Y3QgZG1faHdfc3RhdF9kZWx0YSAqbmV3X3N0YXQ7CiAKIAkvKgotCSAqIFJhdGVsaW1pdCBvdXIgY2hlY2sgdGltZSB0byBkbV9od19jaGVja19kZWx0YSBqaWZmaWVzCisJICogRG9uJ3QgY2hlY2sgbmFwaSBzdHJ1Y3R1cmVzIHdpdGggbm8gYXNzb2NpYXRlZCBkZXZpY2UKIAkgKi8KLQlpZiAoIXRpbWVfYWZ0ZXIoamlmZmllcywgbmFwaS0+ZGV2LT5sYXN0X3J4ICsgZG1faHdfY2hlY2tfZGVsdGEpKQorCWlmICghbmFwaS0+ZGV2KQogCQlyZXR1cm47CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobmV3X3N0YXQsICZod19zdGF0c19saXN0LCBsaXN0KSB7CisJCS8qCisJCSAqIG9ubHkgYWRkIGEgbm90ZSB0byBvdXIgbW9uaXRvciBidWZmZXIgaWY6CisJCSAqIDEpIHRoaXMgaXMgdGhlIGRldiB3ZSByZWNlaXZlZCBvbgorCQkgKiAyKSBpdHMgYWZ0ZXIgdGhlIGxhc3RfcnggZGVsdGEKKwkJICogMykgb3VyIHJ4X2Ryb3BwZWQgY291bnQgaGFzIGdvbmUgdXAKKwkJICovCiAJCWlmICgobmV3X3N0YXQtPmRldiA9PSBuYXBpLT5kZXYpICAmJgorCQkgICAgKHRpbWVfYWZ0ZXIoamlmZmllcywgbmV3X3N0YXQtPmxhc3RfcnggKyBkbV9od19jaGVja19kZWx0YSkpICYmCiAJCSAgICAobmFwaS0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkICE9IG5ld19zdGF0LT5sYXN0X2Ryb3BfdmFsKSkgewogCQkJdHJhY2VfZHJvcF9jb21tb24oTlVMTCwgTlVMTCk7CiAJCQluZXdfc3RhdC0+bGFzdF9kcm9wX3ZhbCA9IG5hcGktPmRldi0+c3RhdHMucnhfZHJvcHBlZDsKKwkJCW5ld19zdGF0LT5sYXN0X3J4ID0gamlmZmllczsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMjg2LDYgKzI5NSw3IEBACiAJCQlnb3RvIG91dDsKIAogCQluZXdfc3RhdC0+ZGV2ID0gZGV2OworCQluZXdfc3RhdC0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCUlOSVRfUkNVX0hFQUQoJm5ld19zdGF0LT5yY3UpOwogCQlzcGluX2xvY2soJnRyYWNlX3N0YXRlX2xvY2spOwogCQlsaXN0X2FkZF9yY3UoJm5ld19zdGF0LT5saXN0LCAmaHdfc3RhdHNfbGlzdCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ldGh0b29sLmMgYi9uZXQvY29yZS9ldGh0b29sLmMKaW5kZXggZDlkNTE2MC4uNGMxMmRkYiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZXRodG9vbC5jCisrKyBiL25ldC9jb3JlL2V0aHRvb2wuYwpAQCAtMzAsMTAgKzMwLDE3IEBACiAJcmV0dXJuIG5ldGlmX2NhcnJpZXJfb2soZGV2KSA/IDEgOiAwOwogfQogCit1MzIgZXRodG9vbF9vcF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pICE9IDA7Cit9CitFWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3BfZ2V0X3J4X2NzdW0pOworCiB1MzIgZXRodG9vbF9vcF9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pICE9IDA7CiB9CitFWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0pOwogCiBpbnQgZXRodG9vbF9vcF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKIHsKQEAgLTg5MSw2ICs4OTgsMTkgQEAKIAlyZXR1cm4gYWN0b3IoZGV2LCBlZGF0YS5kYXRhKTsKIH0KIAorc3RhdGljIGludCBldGh0b29sX2ZsYXNoX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyIF9fdXNlciAqdXNlcmFkZHIpCit7CisJc3RydWN0IGV0aHRvb2xfZmxhc2ggZWZsOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZlZmwsIHVzZXJhZGRyLCBzaXplb2YoZWZsKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5mbGFzaF9kZXZpY2UpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBkZXYtPmV0aHRvb2xfb3BzLT5mbGFzaF9kZXZpY2UoZGV2LCAmZWZsKTsKK30KKwogLyogVGhlIG1haW4gZW50cnkgcG9pbnQgaW4gdGhpcyBmaWxlLiAgQ2FsbGVkIGZyb20gbmV0L2NvcmUvZGV2LmMgKi8KIAogaW50IGRldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIpCkBAIC0xMDA0LDcgKzEwMjQsOSBAQAogCQlicmVhazsKIAljYXNlIEVUSFRPT0xfR1JYQ1NVTToKIAkJcmMgPSBldGh0b29sX2dldF92YWx1ZShkZXYsIHVzZXJhZGRyLCBldGhjbWQsCi0JCQkJICAgICAgIGRldi0+ZXRodG9vbF9vcHMtPmdldF9yeF9jc3VtKTsKKwkJCQkgICAgICAgKGRldi0+ZXRodG9vbF9vcHMtPmdldF9yeF9jc3VtID8KKwkJCQkJZGV2LT5ldGh0b29sX29wcy0+Z2V0X3J4X2NzdW0gOgorCQkJCQlldGh0b29sX29wX2dldF9yeF9jc3VtKSk7CiAJCWJyZWFrOwogCWNhc2UgRVRIVE9PTF9TUlhDU1VNOgogCQlyYyA9IGV0aHRvb2xfc2V0X3J4X2NzdW0oZGV2LCB1c2VyYWRkcik7CkBAIC0xMDY4LDcgKzEwOTAsOSBAQAogCQlicmVhazsKIAljYXNlIEVUSFRPT0xfR0ZMQUdTOgogCQlyYyA9IGV0aHRvb2xfZ2V0X3ZhbHVlKGRldiwgdXNlcmFkZHIsIGV0aGNtZCwKLQkJCQkgICAgICAgZGV2LT5ldGh0b29sX29wcy0+Z2V0X2ZsYWdzKTsKKwkJCQkgICAgICAgKGRldi0+ZXRodG9vbF9vcHMtPmdldF9mbGFncyA/CisJCQkJCWRldi0+ZXRodG9vbF9vcHMtPmdldF9mbGFncyA6CisJCQkJCWV0aHRvb2xfb3BfZ2V0X2ZsYWdzKSk7CiAJCWJyZWFrOwogCWNhc2UgRVRIVE9PTF9TRkxBR1M6CiAJCXJjID0gZXRodG9vbF9zZXRfdmFsdWUoZGV2LCB1c2VyYWRkciwKQEAgLTExMDAsNiArMTEyNCw5IEBACiAJY2FzZSBFVEhUT09MX1NHUk86CiAJCXJjID0gZXRodG9vbF9zZXRfZ3JvKGRldiwgdXNlcmFkZHIpOwogCQlicmVhazsKKwljYXNlIEVUSFRPT0xfRkxBU0hERVY6CisJCXJjID0gZXRodG9vbF9mbGFzaF9kZXZpY2UoZGV2LCB1c2VyYWRkcik7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJjID0gLUVPUE5PVFNVUFA7CiAJfQpAQCAtMTExNiw3ICsxMTQzLDYgQEAKIEVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9nZXRfbGluayk7CiBFWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3BfZ2V0X3NnKTsKIEVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9nZXRfdHNvKTsKLUVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9nZXRfdHhfY3N1bSk7CiBFWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3Bfc2V0X3NnKTsKIEVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9zZXRfdHNvKTsKIEVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9zZXRfdHhfY3N1bSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDE2M2I0ZjUuLmU1ODdlNjggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC02OTIsNzUgKzY5Miw3NCBAQAogCQloaC0+aGhfb3V0cHV0ID0gbmVpZ2gtPm9wcy0+aGhfb3V0cHV0OwogfQogCi1zdGF0aWMgdm9pZCBuZWlnaF9wZXJpb2RpY190aW1lcih1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyB2b2lkIG5laWdoX3BlcmlvZGljX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gKHN0cnVjdCBuZWlnaF90YWJsZSAqKWFyZzsKKwlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmVpZ2hfdGFibGUsIGdjX3dvcmsud29yayk7CiAJc3RydWN0IG5laWdoYm91ciAqbiwgKipucDsKLQl1bnNpZ25lZCBsb25nIGV4cGlyZSwgbm93ID0gamlmZmllczsKKwl1bnNpZ25lZCBpbnQgaTsKIAogCU5FSUdIX0NBQ0hFX1NUQVRfSU5DKHRibCwgcGVyaW9kaWNfZ2NfcnVucyk7CiAKLQl3cml0ZV9sb2NrKCZ0YmwtPmxvY2spOworCXdyaXRlX2xvY2tfYmgoJnRibC0+bG9jayk7CiAKIAkvKgogCSAqCXBlcmlvZGljYWxseSByZWNvbXB1dGUgUmVhY2hhYmxlVGltZSBmcm9tIHJhbmRvbSBmdW5jdGlvbgogCSAqLwogCi0JaWYgKHRpbWVfYWZ0ZXIobm93LCB0YmwtPmxhc3RfcmFuZCArIDMwMCAqIEhaKSkgeworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRibC0+bGFzdF9yYW5kICsgMzAwICogSFopKSB7CiAJCXN0cnVjdCBuZWlnaF9wYXJtcyAqcDsKLQkJdGJsLT5sYXN0X3JhbmQgPSBub3c7CisJCXRibC0+bGFzdF9yYW5kID0gamlmZmllczsKIAkJZm9yIChwID0gJnRibC0+cGFybXM7IHA7IHAgPSBwLT5uZXh0KQogCQkJcC0+cmVhY2hhYmxlX3RpbWUgPQogCQkJCW5laWdoX3JhbmRfcmVhY2hfdGltZShwLT5iYXNlX3JlYWNoYWJsZV90aW1lKTsKIAl9CiAKLQlucCA9ICZ0YmwtPmhhc2hfYnVja2V0c1t0YmwtPmhhc2hfY2hhaW5fZ2NdOwotCXRibC0+aGFzaF9jaGFpbl9nYyA9ICgodGJsLT5oYXNoX2NoYWluX2djICsgMSkgJiB0YmwtPmhhc2hfbWFzayk7CisJZm9yIChpID0gMCA7IGkgPD0gdGJsLT5oYXNoX21hc2s7IGkrKykgeworCQlucCA9ICZ0YmwtPmhhc2hfYnVja2V0c1tpXTsKIAotCXdoaWxlICgobiA9ICpucCkgIT0gTlVMTCkgewotCQl1bnNpZ25lZCBpbnQgc3RhdGU7CisJCXdoaWxlICgobiA9ICpucCkgIT0gTlVMTCkgeworCQkJdW5zaWduZWQgaW50IHN0YXRlOwogCi0JCXdyaXRlX2xvY2soJm4tPmxvY2spOworCQkJd3JpdGVfbG9jaygmbi0+bG9jayk7CiAKLQkJc3RhdGUgPSBuLT5udWRfc3RhdGU7Ci0JCWlmIChzdGF0ZSAmIChOVURfUEVSTUFORU5UIHwgTlVEX0lOX1RJTUVSKSkgeworCQkJc3RhdGUgPSBuLT5udWRfc3RhdGU7CisJCQlpZiAoc3RhdGUgJiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9JTl9USU1FUikpIHsKKwkJCQl3cml0ZV91bmxvY2soJm4tPmxvY2spOworCQkJCWdvdG8gbmV4dF9lbHQ7CisJCQl9CisKKwkJCWlmICh0aW1lX2JlZm9yZShuLT51c2VkLCBuLT5jb25maXJtZWQpKQorCQkJCW4tPnVzZWQgPSBuLT5jb25maXJtZWQ7CisKKwkJCWlmIChhdG9taWNfcmVhZCgmbi0+cmVmY250KSA9PSAxICYmCisJCQkgICAgKHN0YXRlID09IE5VRF9GQUlMRUQgfHwKKwkJCSAgICAgdGltZV9hZnRlcihqaWZmaWVzLCBuLT51c2VkICsgbi0+cGFybXMtPmdjX3N0YWxldGltZSkpKSB7CisJCQkJKm5wID0gbi0+bmV4dDsKKwkJCQluLT5kZWFkID0gMTsKKwkJCQl3cml0ZV91bmxvY2soJm4tPmxvY2spOworCQkJCW5laWdoX2NsZWFudXBfYW5kX3JlbGVhc2Uobik7CisJCQkJY29udGludWU7CisJCQl9CiAJCQl3cml0ZV91bmxvY2soJm4tPmxvY2spOwotCQkJZ290byBuZXh0X2VsdDsKLQkJfQotCi0JCWlmICh0aW1lX2JlZm9yZShuLT51c2VkLCBuLT5jb25maXJtZWQpKQotCQkJbi0+dXNlZCA9IG4tPmNvbmZpcm1lZDsKLQotCQlpZiAoYXRvbWljX3JlYWQoJm4tPnJlZmNudCkgPT0gMSAmJgotCQkgICAgKHN0YXRlID09IE5VRF9GQUlMRUQgfHwKLQkJICAgICB0aW1lX2FmdGVyKG5vdywgbi0+dXNlZCArIG4tPnBhcm1zLT5nY19zdGFsZXRpbWUpKSkgewotCQkJKm5wID0gbi0+bmV4dDsKLQkJCW4tPmRlYWQgPSAxOwotCQkJd3JpdGVfdW5sb2NrKCZuLT5sb2NrKTsKLQkJCW5laWdoX2NsZWFudXBfYW5kX3JlbGVhc2Uobik7Ci0JCQljb250aW51ZTsKLQkJfQotCQl3cml0ZV91bmxvY2soJm4tPmxvY2spOwogCiBuZXh0X2VsdDoKLQkJbnAgPSAmbi0+bmV4dDsKKwkJCW5wID0gJm4tPm5leHQ7CisJCX0KKwkJLyoKKwkJICogSXQncyBmaW5lIHRvIHJlbGVhc2UgbG9jayBoZXJlLCBldmVuIGlmIGhhc2ggdGFibGUKKwkJICogZ3Jvd3Mgd2hpbGUgd2UgYXJlIHByZWVtcHRlZC4KKwkJICovCisJCXdyaXRlX3VubG9ja19iaCgmdGJsLT5sb2NrKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJCXdyaXRlX2xvY2tfYmgoJnRibC0+bG9jayk7CiAJfQotCiAJLyogQ3ljbGUgdGhyb3VnaCBhbGwgaGFzaCBidWNrZXRzIGV2ZXJ5IGJhc2VfcmVhY2hhYmxlX3RpbWUvMiB0aWNrcy4KIAkgKiBBUlAgZW50cnkgdGltZW91dHMgcmFuZ2UgZnJvbSAxLzIgYmFzZV9yZWFjaGFibGVfdGltZSB0byAzLzIKIAkgKiBiYXNlX3JlYWNoYWJsZV90aW1lLgogCSAqLwotCWV4cGlyZSA9IHRibC0+cGFybXMuYmFzZV9yZWFjaGFibGVfdGltZSA+PiAxOwotCWV4cGlyZSAvPSAodGJsLT5oYXNoX21hc2sgKyAxKTsKLQlpZiAoIWV4cGlyZSkKLQkJZXhwaXJlID0gMTsKLQotCWlmIChleHBpcmU+SFopCi0JCW1vZF90aW1lcigmdGJsLT5nY190aW1lciwgcm91bmRfamlmZmllcyhub3cgKyBleHBpcmUpKTsKLQllbHNlCi0JCW1vZF90aW1lcigmdGJsLT5nY190aW1lciwgbm93ICsgZXhwaXJlKTsKLQotCXdyaXRlX3VubG9jaygmdGJsLT5sb2NrKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRibC0+Z2Nfd29yaywKKwkJCSAgICAgIHRibC0+cGFybXMuYmFzZV9yZWFjaGFibGVfdGltZSA+PiAxKTsKKwl3cml0ZV91bmxvY2tfYmgoJnRibC0+bG9jayk7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIGludCBuZWlnaF9tYXhfcHJvYmVzKHN0cnVjdCBuZWlnaGJvdXIgKm4pCkBAIC0xMzE2LDcgKzEzMTUsNyBAQAogfQogRVhQT1JUX1NZTUJPTChwbmVpZ2hfZW5xdWV1ZSk7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5laWdoX3Bhcm1zICpsb29rdXBfbmVpZ2hfcGFyYW1zKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLAorc3RhdGljIGlubGluZSBzdHJ1Y3QgbmVpZ2hfcGFybXMgKmxvb2t1cF9uZWlnaF9wYXJtcyhzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwKIAkJCQkJCSAgICAgIHN0cnVjdCBuZXQgKm5ldCwgaW50IGlmaW5kZXgpCiB7CiAJc3RydWN0IG5laWdoX3Bhcm1zICpwOwpAQCAtMTMzNyw3ICsxMzM2LDcgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CiAKLQlyZWYgPSBsb29rdXBfbmVpZ2hfcGFyYW1zKHRibCwgbmV0LCAwKTsKKwlyZWYgPSBsb29rdXBfbmVpZ2hfcGFybXModGJsLCBuZXQsIDApOwogCWlmICghcmVmKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMTQ0MiwxMCArMTQ0MSw4IEBACiAJZ2V0X3JhbmRvbV9ieXRlcygmdGJsLT5oYXNoX3JuZCwgc2l6ZW9mKHRibC0+aGFzaF9ybmQpKTsKIAogCXJ3bG9ja19pbml0KCZ0YmwtPmxvY2spOwotCXNldHVwX3RpbWVyKCZ0YmwtPmdjX3RpbWVyLCBuZWlnaF9wZXJpb2RpY190aW1lciwgKHVuc2lnbmVkIGxvbmcpdGJsKTsKLQl0YmwtPmdjX3RpbWVyLmV4cGlyZXMgID0gbm93ICsgMTsKLQlhZGRfdGltZXIoJnRibC0+Z2NfdGltZXIpOwotCisJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSgmdGJsLT5nY193b3JrLCBuZWlnaF9wZXJpb2RpY193b3JrKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRibC0+Z2Nfd29yaywgdGJsLT5wYXJtcy5yZWFjaGFibGVfdGltZSk7CiAJc2V0dXBfdGltZXIoJnRibC0+cHJveHlfdGltZXIsIG5laWdoX3Byb3h5X3Byb2Nlc3MsICh1bnNpZ25lZCBsb25nKXRibCk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdF9jbGFzcygmdGJsLT5wcm94eV9xdWV1ZSwKIAkJCSZuZWlnaF90YWJsZV9wcm94eV9xdWV1ZV9jbGFzcyk7CkBAIC0xNDgyLDcgKzE0NzksOCBAQAogCXN0cnVjdCBuZWlnaF90YWJsZSAqKnRwOwogCiAJLyogSXQgaXMgbm90IGNsZWFuLi4uIEZpeCBpdCB0byB1bmxvYWQgSVB2NiBtb2R1bGUgc2FmZWx5ICovCi0JZGVsX3RpbWVyX3N5bmMoJnRibC0+Z2NfdGltZXIpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnRibC0+Z2Nfd29yayk7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAlkZWxfdGltZXJfc3luYygmdGJsLT5wcm94eV90aW1lcik7CiAJcG5laWdoX3F1ZXVlX3B1cmdlKCZ0YmwtPnByb3h5X3F1ZXVlKTsKIAluZWlnaF9pZmRvd24odGJsLCBOVUxMKTsKQEAgLTE3NTIsNyArMTc1MCw2IEBACiAJCQkubmR0Y19sYXN0X3JhbmQJCT0gamlmZmllc190b19tc2VjcyhyYW5kX2RlbHRhKSwKIAkJCS5uZHRjX2hhc2hfcm5kCQk9IHRibC0+aGFzaF9ybmQsCiAJCQkubmR0Y19oYXNoX21hc2sJCT0gdGJsLT5oYXNoX21hc2ssCi0JCQkubmR0Y19oYXNoX2NoYWluX2djCT0gdGJsLT5oYXNoX2NoYWluX2djLAogCQkJLm5kdGNfcHJveHlfcWxlbgk9IHRibC0+cHJveHlfcXVldWUucWxlbiwKIAkJfTsKIApAQCAtMTkwNiw3ICsxOTAzLDcgQEAKIAkJaWYgKHRicFtORFRQQV9JRklOREVYXSkKIAkJCWlmaW5kZXggPSBubGFfZ2V0X3UzMih0YnBbTkRUUEFfSUZJTkRFWF0pOwogCi0JCXAgPSBsb29rdXBfbmVpZ2hfcGFyYW1zKHRibCwgbmV0LCBpZmluZGV4KTsKKwkJcCA9IGxvb2t1cF9uZWlnaF9wYXJtcyh0YmwsIG5ldCwgaWZpbmRleCk7CiAJCWlmIChwID09IE5VTEwpIHsKIAkJCWVyciA9IC1FTk9FTlQ7CiAJCQlnb3RvIGVycm91dF90YmxfbG9jazsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKaW5kZXggMzk5NDY4MC4uYWQ5MWU5ZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqb3BlcnN0YXRlc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG9wZXJzdGF0ZXNbXSA9IHsKIAkidW5rbm93biIsCiAJIm5vdHByZXNlbnQiLCAvKiBjdXJyZW50bHkgdW51c2VkICovCiAJImRvd24iLApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCmluZGV4IDE5NzI4MzAuLjFjMWFmMjcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYworKysgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKQEAgLTYsNiArNiw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgogCkBAIC0xMjcsNyArMTI5LDcgQEAKIAlydiA9IHNldHVwX25ldChuZXQpOwogCWlmIChydiA9PSAwKSB7CiAJCXJ0bmxfbG9jaygpOwotCQlsaXN0X2FkZF90YWlsKCZuZXQtPmxpc3QsICZuZXRfbmFtZXNwYWNlX2xpc3QpOworCQlsaXN0X2FkZF90YWlsX3JjdSgmbmV0LT5saXN0LCAmbmV0X25hbWVzcGFjZV9saXN0KTsKIAkJcnRubF91bmxvY2soKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZuZXRfbXV0ZXgpOwpAQCAtMTU2LDkgKzE1OCwxNiBAQAogCiAJLyogRG9uJ3QgbGV0IGFueW9uZSBlbHNlIGZpbmQgdXMuICovCiAJcnRubF9sb2NrKCk7Ci0JbGlzdF9kZWwoJm5ldC0+bGlzdCk7CisJbGlzdF9kZWxfcmN1KCZuZXQtPmxpc3QpOwogCXJ0bmxfdW5sb2NrKCk7CiAKKwkvKgorCSAqIEFub3RoZXIgQ1BVIG1pZ2h0IGJlIHJjdS1pdGVyYXRpbmcgdGhlIGxpc3QsIHdhaXQgZm9yIGl0LgorCSAqIFRoaXMgbmVlZHMgdG8gYmUgYmVmb3JlIGNhbGxpbmcgdGhlIGV4aXQoKSBub3RpZmllcnMsIHNvCisJICogdGhlIHJjdV9iYXJyaWVyKCkgYmVsb3cgaXNuJ3Qgc3VmZmljaWVudCBhbG9uZS4KKwkgKi8KKwlzeW5jaHJvbml6ZV9yY3UoKTsKKwogCS8qIFJ1biBhbGwgb2YgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGV4aXQgbWV0aG9kcyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShvcHMsICZwZXJuZXRfbGlzdCwgbGlzdCkgewogCQlpZiAob3BzLT5leGl0KQpAQCAtMTkzLDYgKzIwMiwyNiBAQAogfQogI2VuZGlmCiAKK3N0cnVjdCBuZXQgKmdldF9uZXRfbnNfYnlfcGlkKHBpZF90IHBpZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CisKKwkvKiBMb29rdXAgdGhlIG5ldHdvcmsgbmFtZXNwYWNlICovCisJbmV0ID0gRVJSX1BUUigtRVNSQ0gpOworCXJjdV9yZWFkX2xvY2soKTsKKwl0c2sgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOworCWlmICh0c2spIHsKKwkJc3RydWN0IG5zcHJveHkgKm5zcHJveHk7CisJCW5zcHJveHkgPSB0YXNrX25zcHJveHkodHNrKTsKKwkJaWYgKG5zcHJveHkpCisJCQluZXQgPSBnZXRfbmV0KG5zcHJveHktPm5ldF9ucyk7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBuZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnZXRfbmV0X25zX2J5X3BpZCk7CisKIHN0YXRpYyBpbnQgX19pbml0IG5ldF9uc19pbml0KHZvaWQpCiB7CiAJc3RydWN0IG5ldF9nZW5lcmljICpuZzsKQEAgLTIxOSw3ICsyNDgsNyBAQAogCQlwYW5pYygiQ291bGQgbm90IHNldHVwIHRoZSBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlIik7CiAKIAlydG5sX2xvY2soKTsKLQlsaXN0X2FkZF90YWlsKCZpbml0X25ldC5saXN0LCAmbmV0X25hbWVzcGFjZV9saXN0KTsKKwlsaXN0X2FkZF90YWlsX3JjdSgmaW5pdF9uZXQubGlzdCwgJm5ldF9uYW1lc3BhY2VfbGlzdCk7CiAJcnRubF91bmxvY2soKTsKIAogCW11dGV4X3VubG9jaygmbmV0X211dGV4KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCAxYjc2ZWIxLi4wYjRkMGQzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC05LDYgKzksNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAyICBSZWQgSGF0LCBJbmMuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTUwLDYgKzUxLDkgQEAKIHN0YXRpYyB2b2lkIHphcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpOwogc3RhdGljIHZvaWQgYXJwX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IGNhcnJpZXJfdGltZW91dCA9IDQ7Cittb2R1bGVfcGFyYW0oY2Fycmllcl90aW1lb3V0LCB1aW50LCAwNjQ0KTsKKwogc3RhdGljIHZvaWQgcXVldWVfcHJvY2VzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvID0KQEAgLTczNyw3ICs3NDEsNyBAQAogCQl9CiAKIAkJYXRsZWFzdCA9IGppZmZpZXMgKyBIWi8xMDsKLQkJYXRtb3N0ID0gamlmZmllcyArIDQqSFo7CisJCWF0bW9zdCA9IGppZmZpZXMgKyBjYXJyaWVyX3RpbWVvdXQgKiBIWjsKIAkJd2hpbGUgKCFuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7CiAJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBhdG1vc3QpKSB7CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IDE5YjhjMjAuLjBiY2VjYmYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0xMzEsNiArMTMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC0xNjIsMTQgKzE2MywxMyBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CQkvKiBkb19kaXYgKi8KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KIAotI2RlZmluZSBWRVJTSU9OICAicGt0Z2VuIHYyLjcwOiBQYWNrZXQgR2VuZXJhdG9yIGZvciBwYWNrZXQgcGVyZm9ybWFuY2UgdGVzdGluZy5cbiIKLQorI2RlZmluZSBWRVJTSU9OIAkiMi43MiIKICNkZWZpbmUgSVBfTkFNRV9TWiAzMgogI2RlZmluZSBNQVhfTVBMU19MQUJFTFMgMTYgLyogVGhpcyBpcyB0aGUgbWF4IGxhYmVsIHN0YWNrIGRlcHRoICovCiAjZGVmaW5lIE1QTFNfU1RBQ0tfQk9UVE9NIGh0b25sKDB4MDAwMDAxMDApCkBAIC0yMDYsNyArMjA2LDcgQEAKICNkZWZpbmUgUEtUR0VOX01BR0lDIDB4YmU5YmU5NTUKICNkZWZpbmUgUEdfUFJPQ19ESVIgInBrdGdlbiIKICNkZWZpbmUgUEdDVFJMCSAgICAicGdjdHJsIgotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGdfcHJvY19kaXIgPSBOVUxMOworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGdfcHJvY19kaXI7CiAKICNkZWZpbmUgTUFYX0NGTE9XUyAgNjU1MzYKIApAQCAtMjMxLDkgKzIzMSw5IEBACiAJICovCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsJLyogcHJvYyBmaWxlICovCiAJc3RydWN0IHBrdGdlbl90aHJlYWQgKnBnX3RocmVhZDsvKiB0aGUgb3duZXIgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBVc2VkIGZvciBjaGFpbmluZyBpbiB0aGUgdGhyZWFkJ3MgcnVuLXF1ZXVlICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkJLyogY2hhaW5pbmcgaW4gdGhlIHRocmVhZCdzIHJ1bi1xdWV1ZSAqLwogCi0JaW50IHJ1bm5pbmc7CQkvKiBpZiB0aGlzIGNoYW5nZXMgdG8gZmFsc2UsIHRoZSB0ZXN0IHdpbGwgc3RvcCAqLworCWludCBydW5uaW5nOwkJLyogaWYgZmFsc2UsIHRoZSB0ZXN0IHdpbGwgc3RvcCAqLwogCiAJLyogSWYgbWluICE9IG1heCwgdGhlbiB3ZSB3aWxsIGVpdGhlciBkbyBhIGxpbmVhciBpdGVyYXRpb24sIG9yCiAJICogd2Ugd2lsbCBkbyBhIHJhbmRvbSBzZWxlY3Rpb24gZnJvbSB3aXRoaW4gdGhlIHJhbmdlLgpAQCAtMjQ2LDMzICsyNDYsMzcgQEAKIAlpbnQgbWF4X3BrdF9zaXplOwkvKiA9IEVUSF9aTEVOOyAqLwogCWludCBwa3Rfb3ZlcmhlYWQ7CS8qIG92ZXJoZWFkIGZvciBNUExTLCBWTEFOcywgSVBTRUMgZXRjICovCiAJaW50IG5mcmFnczsKLQlfX3UzMiBkZWxheV91czsJCS8qIERlZmF1bHQgZGVsYXkgKi8KLQlfX3UzMiBkZWxheV9uczsKKwl1NjQgZGVsYXk7CQkvKiBuYW5vLXNlY29uZHMgKi8KKwogCV9fdTY0IGNvdW50OwkJLyogRGVmYXVsdCBObyBwYWNrZXRzIHRvIHNlbmQgKi8KIAlfX3U2NCBzb2ZhcjsJCS8qIEhvdyBtYW55IHBrdHMgd2UndmUgc2VudCBzbyBmYXIgKi8KIAlfX3U2NCB0eF9ieXRlczsJCS8qIEhvdyBtYW55IGJ5dGVzIHdlJ3ZlIHRyYW5zbWl0dGVkICovCi0JX191NjQgZXJyb3JzOwkJLyogRXJyb3JzIHdoZW4gdHJ5aW5nIHRvIHRyYW5zbWl0LCBwa3RzIHdpbGwgYmUgcmUtc2VudCAqLworCV9fdTY0IGVycm9yczsJCS8qIEVycm9ycyB3aGVuIHRyeWluZyB0byB0cmFuc21pdCwKKwkJCQkgICBwa3RzIHdpbGwgYmUgcmUtc2VudCAqLwogCiAJLyogcnVudGltZSBjb3VudGVycyByZWxhdGluZyB0byBjbG9uZV9za2IgKi8KLQlfX3U2NCBuZXh0X3R4X3VzOwkvKiB0aW1lc3RhbXAgb2Ygd2hlbiB0byB0eCBuZXh0ICovCi0JX191MzIgbmV4dF90eF9uczsKIAogCV9fdTY0IGFsbG9jYXRlZF9za2JzOwogCV9fdTMyIGNsb25lX2NvdW50OwogCWludCBsYXN0X29rOwkJLyogV2FzIGxhc3Qgc2tiIHNlbnQ/Ci0JCQkJICogT3IgYSBmYWlsZWQgdHJhbnNtaXQgb2Ygc29tZSBzb3J0PyAgVGhpcyB3aWxsIGtlZXAKLQkJCQkgKiBzZXF1ZW5jZSBudW1iZXJzIGluIG9yZGVyLCBmb3IgZXhhbXBsZS4KKwkJCQkgKiBPciBhIGZhaWxlZCB0cmFuc21pdCBvZiBzb21lIHNvcnQ/CisJCQkJICogVGhpcyB3aWxsIGtlZXAgc2VxdWVuY2UgbnVtYmVycyBpbiBvcmRlcgogCQkJCSAqLwotCV9fdTY0IHN0YXJ0ZWRfYXQ7CS8qIG1pY3JvLXNlY29uZHMgKi8KLQlfX3U2NCBzdG9wcGVkX2F0OwkvKiBtaWNyby1zZWNvbmRzICovCi0JX191NjQgaWRsZV9hY2M7CQkvKiBtaWNyby1zZWNvbmRzICovCisJa3RpbWVfdCBuZXh0X3R4OworCWt0aW1lX3Qgc3RhcnRlZF9hdDsKKwlrdGltZV90IHN0b3BwZWRfYXQ7CisJdTY0CWlkbGVfYWNjOwkvKiBuYW5vLXNlY29uZHMgKi8KKwogCV9fdTMyIHNlcV9udW07CiAKLQlpbnQgY2xvbmVfc2tiOwkJLyogVXNlIG11bHRpcGxlIFNLQnMgZHVyaW5nIHBhY2tldCBnZW4uICBJZiB0aGlzIG51bWJlcgotCQkJCSAqIGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGVuIHRoYXQgbWFueSBjb3BpZXMgb2YgdGhlIHNhbWUKLQkJCQkgKiBwYWNrZXQgd2lsbCBiZSBzZW50IGJlZm9yZSBhIG5ldyBwYWNrZXQgaXMgYWxsb2NhdGVkLgotCQkJCSAqIEZvciBpbnN0YW5jZSwgaWYgeW91IHdhbnQgdG8gc2VuZCAxMDI0IGlkZW50aWNhbCBwYWNrZXRzCi0JCQkJICogYmVmb3JlIGNyZWF0aW5nIGEgbmV3IHBhY2tldCwgc2V0IGNsb25lX3NrYiB0byAxMDI0LgorCWludCBjbG9uZV9za2I7CQkvKgorCQkJCSAqIFVzZSBtdWx0aXBsZSBTS0JzIGR1cmluZyBwYWNrZXQgZ2VuLgorCQkJCSAqIElmIHRoaXMgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGVuCisJCQkJICogdGhhdCBtYW55IGNvcGllcyBvZiB0aGUgc2FtZSBwYWNrZXQgd2lsbCBiZQorCQkJCSAqIHNlbnQgYmVmb3JlIGEgbmV3IHBhY2tldCBpcyBhbGxvY2F0ZWQuCisJCQkJICogSWYgeW91IHdhbnQgdG8gc2VuZCAxMDI0IGlkZW50aWNhbCBwYWNrZXRzCisJCQkJICogYmVmb3JlIGNyZWF0aW5nIGEgbmV3IHBhY2tldCwKKwkJCQkgKiBzZXQgY2xvbmVfc2tiIHRvIDEwMjQuCiAJCQkJICovCiAKIAljaGFyIGRzdF9taW5bSVBfTkFNRV9TWl07CS8qIElQLCBpZSAxLjIuMy40ICovCkBAIC0zMDQsOCArMzA4LDEwIEBACiAJX191MTYgdWRwX2RzdF9tYXg7CS8qIGV4Y2x1c2l2ZSwgZGVzdCBVRFAgcG9ydCAqLwogCiAJLyogRFNDUCArIEVDTiAqLwotCV9fdTggdG9zOyAgICAgICAgICAgIC8qIHNpeCBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgKGZvcm1lcikgSVB2NCBUT1MgYXJlIGZvciBkc2NwIGNvZGVwb2ludCAqLwotCV9fdTggdHJhZmZpY19jbGFzczsgIC8qIGRpdHRvIGZvciB0aGUgKGZvcm1lcikgVHJhZmZpYyBDbGFzcyBpbiBJUHY2IChzZWUgUkZDIDMyNjAsIHNlYy4gNCkgKi8KKwlfX3U4IHRvczsgICAgICAgICAgICAvKiBzaXggTVNCIG9mIChmb3JtZXIpIElQdjQgVE9TCisJCQkJYXJlIGZvciBkc2NwIGNvZGVwb2ludCAqLworCV9fdTggdHJhZmZpY19jbGFzczsgIC8qIGRpdHRvIGZvciB0aGUgKGZvcm1lcikgVHJhZmZpYyBDbGFzcyBpbiBJUHY2CisJCQkJKHNlZSBSRkMgMzI2MCwgc2VjLiA0KSAqLwogCiAJLyogTVBMUyAqLwogCXVuc2lnbmVkIG5yX2xhYmVsczsJLyogRGVwdGggb2Ygc3RhY2ssIDAgPSBubyBNUExTICovCkBAIC0zNDYsMTUgKzM1MiwxNyBAQAogCSAqLwogCV9fdTE2IHBhZDsJCS8qIHBhZCBvdXQgdGhlIGhoIHN0cnVjdCB0byBhbiBldmVuIDE2IGJ5dGVzICovCiAKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwkvKiBza2Igd2UgYXJlIHRvIHRyYW5zbWl0IG5leHQsIG1haW5seSB1c2VkIGZvciB3aGVuIHdlCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsJLyogc2tiIHdlIGFyZSB0byB0cmFuc21pdCBuZXh0LCB1c2VkIGZvciB3aGVuIHdlCiAJCQkJICogYXJlIHRyYW5zbWl0dGluZyB0aGUgc2FtZSBvbmUgbXVsdGlwbGUgdGltZXMKIAkJCQkgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZSAqb2RldjsJLyogVGhlIG91dC1nb2luZyBkZXZpY2UuICBOb3RlIHRoYXQgdGhlIGRldmljZSBzaG91bGQKLQkJCQkJICogaGF2ZSBpdCdzIHBnX2luZm8gcG9pbnRlciBwb2ludGluZyBiYWNrIHRvIHRoaXMKLQkJCQkJICogZGV2aWNlLiAgVGhpcyB3aWxsIGJlIHNldCB3aGVuIHRoZSB1c2VyIHNwZWNpZmllcwotCQkJCQkgKiB0aGUgb3V0LWdvaW5nIGRldmljZSBuYW1lIChub3Qgd2hlbiB0aGUgaW5qZWN0IGlzCi0JCQkJCSAqIHN0YXJ0ZWQgYXMgaXQgdXNlZCB0byBkby4pCi0JCQkJCSAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpvZGV2OyAvKiBUaGUgb3V0LWdvaW5nIGRldmljZS4KKwkJCQkgICogTm90ZSB0aGF0IHRoZSBkZXZpY2Ugc2hvdWxkIGhhdmUgaXQncworCQkJCSAgKiBwZ19pbmZvIHBvaW50ZXIgcG9pbnRpbmcgYmFjayB0byB0aGlzCisJCQkJICAqIGRldmljZS4KKwkJCQkgICogU2V0IHdoZW4gdGhlIHVzZXIgc3BlY2lmaWVzIHRoZSBvdXQtZ29pbmcKKwkJCQkgICogZGV2aWNlIG5hbWUgKG5vdCB3aGVuIHRoZSBpbmplY3QgaXMKKwkJCQkgICogc3RhcnRlZCBhcyBpdCB1c2VkIHRvIGRvLikKKwkJCQkgICovCiAJc3RydWN0IGZsb3dfc3RhdGUgKmZsb3dzOwogCXVuc2lnbmVkIGNmbG93czsJLyogQ29uY3VycmVudCBmbG93cyAoY29uZmlnKSAqLwogCXVuc2lnbmVkIGxmbG93OwkJLyogRmxvdyBsZW5ndGggIChjb25maWcpICovCkBAIC0zNzksMTMgKzM4NywxNCBAQAogfTsKIAogc3RydWN0IHBrdGdlbl90aHJlYWQgewotCXNwaW5sb2NrX3QgaWZfbG9jazsKKwlzcGlubG9ja190IGlmX2xvY2s7CQkvKiBmb3IgbGlzdCBvZiBkZXZpY2VzICovCiAJc3RydWN0IGxpc3RfaGVhZCBpZl9saXN0OwkvKiBBbGwgZGV2aWNlIGhlcmUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHRoX2xpc3Q7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAJY2hhciByZXN1bHRbNTEyXTsKIAotCS8qIEZpZWxkIGZvciB0aHJlYWQgdG8gcmVjZWl2ZSAicG9zdGVkIiBldmVudHMgdGVybWluYXRlLCBzdG9wIGlmcyBldGMuICovCisJLyogRmllbGQgZm9yIHRocmVhZCB0byByZWNlaXZlICJwb3N0ZWQiIGV2ZW50cyB0ZXJtaW5hdGUsCisJICAgc3RvcCBpZnMgZXRjLiAqLwogCiAJdTMyIGNvbnRyb2w7CiAJaW50IGNwdTsKQEAgLTM5NywyNCArNDA2LDIyIEBACiAjZGVmaW5lIFJFTU9WRSAxCiAjZGVmaW5lIEZJTkQgICAwCiAKLS8qKiBDb252ZXJ0IHRvIG1pY3JvLXNlY29uZHMgKi8KLXN0YXRpYyBpbmxpbmUgX191NjQgdHZfdG9fdXMoY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2KQorc3RhdGljIGlubGluZSBrdGltZV90IGt0aW1lX25vdyh2b2lkKQogewotCV9fdTY0IHVzID0gdHYtPnR2X3VzZWM7Ci0JdXMgKz0gKF9fdTY0KSB0di0+dHZfc2VjICogKF9fdTY0KSAxMDAwMDAwOwotCXJldHVybiB1czsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJa3RpbWVfZ2V0X3RzKCZ0cyk7CisKKwlyZXR1cm4gdGltZXNwZWNfdG9fa3RpbWUodHMpOwogfQogCi1zdGF0aWMgX191NjQgZ2V0Q3VyVXModm9pZCkKKy8qIFRoaXMgd29ya3MgZXZlbiBpZiAzMiBiaXQgYmVjYXVzZSBvZiBjYXJlZnVsIGJ5dGUgb3JkZXIgY2hvaWNlICovCitzdGF0aWMgaW5saW5lIGludCBrdGltZV9sdChjb25zdCBrdGltZV90IGNtcDEsIGNvbnN0IGt0aW1lX3QgY21wMikKIHsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKLQlyZXR1cm4gdHZfdG9fdXMoJnR2KTsKKwlyZXR1cm4gY21wMS50djY0IDwgY21wMi50djY0OwogfQogCi0vKiBvbGQgaW5jbHVkZSBlbmQgKi8KLQotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBWRVJTSU9OOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0KKwkicGt0Z2VuICIgVkVSU0lPTiAiOiBQYWNrZXQgR2VuZXJhdG9yIGZvciBwYWNrZXQgcGVyZm9ybWFuY2UgdGVzdGluZy5cbiI7CiAKIHN0YXRpYyBpbnQgcGt0Z2VuX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIHN0cnVjdCBwa3RnZW5fZGV2ICppKTsKIHN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSk7CkBAIC00MjQsNyArNDMxLDcgQEAKIHN0YXRpYyB2b2lkIHBrdGdlbl9ydW5fYWxsX3RocmVhZHModm9pZCk7CiBzdGF0aWMgdm9pZCBwa3RnZW5fcmVzZXRfYWxsX3RocmVhZHModm9pZCk7CiBzdGF0aWMgdm9pZCBwa3RnZW5fc3RvcF9hbGxfdGhyZWFkc19pZnModm9pZCk7Ci1zdGF0aWMgaW50IHBrdGdlbl9zdG9wX2RldmljZShzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldik7CisKIHN0YXRpYyB2b2lkIHBrdGdlbl9zdG9wKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KTsKIHN0YXRpYyB2b2lkIHBrdGdlbl9jbGVhcl9jb3VudGVycyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldik7CiAKQEAgLTQzMiwxMCArNDM5LDEwIEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGZtdF9pcDYoY2hhciAqcywgY29uc3QgY2hhciBpcFsxNl0pOwogCiAvKiBNb2R1bGUgcGFyYW1ldGVycywgZGVmYXVsdHMuICovCi1zdGF0aWMgaW50IHBnX2NvdW50X2QgPSAxMDAwOwkvKiAxMDAwIHBrdHMgYnkgZGVmYXVsdCAqLwotc3RhdGljIGludCBwZ19kZWxheV9kOwotc3RhdGljIGludCBwZ19jbG9uZV9za2JfZDsKLXN0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IHBnX2NvdW50X2QgX19yZWFkX21vc3RseSA9IDEwMDA7CitzdGF0aWMgaW50IHBnX2RlbGF5X2QgX19yZWFkX21vc3RseTsKK3N0YXRpYyBpbnQgcGdfY2xvbmVfc2tiX2QgIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgaW50IGRlYnVnICBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgREVGSU5FX01VVEVYKHBrdGdlbl90aHJlYWRfbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKHBrdGdlbl90aHJlYWRzKTsKQEAgLTQ1MSwxMiArNDU4LDEyIEBACiAKIHN0YXRpYyBpbnQgcGdjdHJsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0Jc2VxX3B1dHMoc2VxLCBWRVJTSU9OKTsKKwlzZXFfcHV0cyhzZXEsIHZlcnNpb24pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCBwZ2N0cmxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLAotCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKK3N0YXRpYyBzc2l6ZV90IHBnY3RybF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlpbnQgZXJyID0gMDsKIAljaGFyIGRhdGFbMTI4XTsKQEAgLTUwOSwxMCArNTE2LDkgQEAKIAogc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiA9IHNlcS0+cHJpdmF0ZTsKLQlfX3U2NCBzYTsKLQlfX3U2NCBzdG9wcGVkOwotCV9fdTY0IG5vdyA9IGdldEN1clVzKCk7CisJY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBzZXEtPnByaXZhdGU7CisJa3RpbWVfdCBzdG9wcGVkOworCXU2NCBpZGxlOwogCiAJc2VxX3ByaW50ZihzZXEsCiAJCSAgICJQYXJhbXM6IGNvdW50ICVsbHUgIG1pbl9wa3Rfc2l6ZTogJXUgIG1heF9wa3Rfc2l6ZTogJXVcbiIsCkBAIC01MjAsOSArNTI2LDggQEAKIAkJICAgcGt0X2Rldi0+bWF4X3BrdF9zaXplKTsKIAogCXNlcV9wcmludGYoc2VxLAotCQkgICAiICAgICBmcmFnczogJWQgIGRlbGF5OiAldSAgY2xvbmVfc2tiOiAlZCAgaWZuYW1lOiAlc1xuIiwKLQkJICAgcGt0X2Rldi0+bmZyYWdzLAotCQkgICAxMDAwICogcGt0X2Rldi0+ZGVsYXlfdXMgKyBwa3RfZGV2LT5kZWxheV9ucywKKwkJICAgIiAgICAgZnJhZ3M6ICVkICBkZWxheTogJWxsdSAgY2xvbmVfc2tiOiAlZCAgaWZuYW1lOiAlc1xuIiwKKwkJICAgcGt0X2Rldi0+bmZyYWdzLCAodW5zaWduZWQgbG9uZyBsb25nKSBwa3RfZGV2LT5kZWxheSwKIAkJICAgcGt0X2Rldi0+Y2xvbmVfc2tiLCBwa3RfZGV2LT5vZGV2LT5uYW1lKTsKIAogCXNlcV9wcmludGYoc2VxLCAiICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcbiIsIHBrdF9kZXYtPmNmbG93cywKQEAgLTU0OSwxMSArNTU0LDE0IEBACiAJCQkgICAiICAgICBkYWRkcjogJXMgIG1pbl9kYWRkcjogJXMgIG1heF9kYWRkcjogJXNcbiIsIGIxLAogCQkJICAgYjIsIGIzKTsKIAotCX0gZWxzZQorCX0gZWxzZSB7CiAJCXNlcV9wcmludGYoc2VxLAotCQkJICAgIiAgICAgZHN0X21pbjogJXMgIGRzdF9tYXg6ICVzXG4gICAgIHNyY19taW46ICVzICBzcmNfbWF4OiAlc1xuIiwKLQkJCSAgIHBrdF9kZXYtPmRzdF9taW4sIHBrdF9kZXYtPmRzdF9tYXgsIHBrdF9kZXYtPnNyY19taW4sCi0JCQkgICBwa3RfZGV2LT5zcmNfbWF4KTsKKwkJCSAgICIgICAgIGRzdF9taW46ICVzICBkc3RfbWF4OiAlc1xuIiwKKwkJCSAgIHBrdF9kZXYtPmRzdF9taW4sIHBrdF9kZXYtPmRzdF9tYXgpOworCQlzZXFfcHJpbnRmKHNlcSwKKwkJCSAgICIgICAgICAgIHNyY19taW46ICVzICBzcmNfbWF4OiAlc1xuIiwKKwkJCSAgIHBrdF9kZXYtPnNyY19taW4sIHBrdF9kZXYtPnNyY19tYXgpOworCX0KIAogCXNlcV9wdXRzKHNlcSwgIiAgICAgc3JjX21hYzogIik7CiAKQEAgLTU2NSw3ICs1NzMsOCBAQAogCXNlcV9wcmludGYoc2VxLCAiJXBNXG4iLCBwa3RfZGV2LT5kc3RfbWFjKTsKIAogCXNlcV9wcmludGYoc2VxLAotCQkgICAiICAgICB1ZHBfc3JjX21pbjogJWQgIHVkcF9zcmNfbWF4OiAlZCAgdWRwX2RzdF9taW46ICVkICB1ZHBfZHN0X21heDogJWRcbiIsCisJCSAgICIgICAgIHVkcF9zcmNfbWluOiAlZCAgdWRwX3NyY19tYXg6ICVkIgorCQkgICAiICB1ZHBfZHN0X21pbjogJWQgIHVkcF9kc3RfbWF4OiAlZFxuIiwKIAkJICAgcGt0X2Rldi0+dWRwX3NyY19taW4sIHBrdF9kZXYtPnVkcF9zcmNfbWF4LAogCQkgICBwa3RfZGV2LT51ZHBfZHN0X21pbiwgcGt0X2Rldi0+dWRwX2RzdF9tYXgpOwogCkBAIC01ODEsMjMgKzU5MCwyMSBAQAogCQkJCSAgIGkgPT0gcGt0X2Rldi0+bnJfbGFiZWxzLTEgPyAiXG4iIDogIiwgIik7CiAJfQogCi0JaWYgKHBrdF9kZXYtPnZsYW5faWQgIT0gMHhmZmZmKSB7CisJaWYgKHBrdF9kZXYtPnZsYW5faWQgIT0gMHhmZmZmKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAgICAgdmxhbl9pZDogJXUgIHZsYW5fcDogJXUgIHZsYW5fY2ZpOiAldVxuIiwKLQkJCSAgIHBrdF9kZXYtPnZsYW5faWQsIHBrdF9kZXYtPnZsYW5fcCwgcGt0X2Rldi0+dmxhbl9jZmkpOwotCX0KKwkJCSAgIHBrdF9kZXYtPnZsYW5faWQsIHBrdF9kZXYtPnZsYW5fcCwKKwkJCSAgIHBrdF9kZXYtPnZsYW5fY2ZpKTsKIAotCWlmIChwa3RfZGV2LT5zdmxhbl9pZCAhPSAweGZmZmYpIHsKKwlpZiAocGt0X2Rldi0+c3ZsYW5faWQgIT0gMHhmZmZmKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAgICAgc3ZsYW5faWQ6ICV1ICB2bGFuX3A6ICV1ICB2bGFuX2NmaTogJXVcbiIsCi0JCQkgICBwa3RfZGV2LT5zdmxhbl9pZCwgcGt0X2Rldi0+c3ZsYW5fcCwgcGt0X2Rldi0+c3ZsYW5fY2ZpKTsKLQl9CisJCQkgICBwa3RfZGV2LT5zdmxhbl9pZCwgcGt0X2Rldi0+c3ZsYW5fcCwKKwkJCSAgIHBrdF9kZXYtPnN2bGFuX2NmaSk7CiAKLQlpZiAocGt0X2Rldi0+dG9zKSB7CisJaWYgKHBrdF9kZXYtPnRvcykKIAkJc2VxX3ByaW50ZihzZXEsICIgICAgIHRvczogMHglMDJ4XG4iLCBwa3RfZGV2LT50b3MpOwotCX0KIAotCWlmIChwa3RfZGV2LT50cmFmZmljX2NsYXNzKSB7CisJaWYgKHBrdF9kZXYtPnRyYWZmaWNfY2xhc3MpCiAJCXNlcV9wcmludGYoc2VxLCAiICAgICB0cmFmZmljX2NsYXNzOiAweCUwMnhcbiIsIHBrdF9kZXYtPnRyYWZmaWNfY2xhc3MpOwotCX0KIAogCXNlcV9wcmludGYoc2VxLCAiICAgICBGbGFnczogIik7CiAKQEAgLTY1NCwxNyArNjYxLDIxIEBACiAKIAlzZXFfcHV0cyhzZXEsICJcbiIpOwogCi0Jc2EgPSBwa3RfZGV2LT5zdGFydGVkX2F0OwotCXN0b3BwZWQgPSBwa3RfZGV2LT5zdG9wcGVkX2F0OwotCWlmIChwa3RfZGV2LT5ydW5uaW5nKQotCQlzdG9wcGVkID0gbm93OwkvKiBub3QgcmVhbGx5IHN0b3BwZWQsIG1vcmUgbGlrZSBsYXN0LXJ1bm5pbmctYXQgKi8KKwkvKiBub3QgcmVhbGx5IHN0b3BwZWQsIG1vcmUgbGlrZSBsYXN0LXJ1bm5pbmctYXQgKi8KKwlzdG9wcGVkID0gcGt0X2Rldi0+cnVubmluZyA/IGt0aW1lX25vdygpIDogcGt0X2Rldi0+c3RvcHBlZF9hdDsKKwlpZGxlID0gcGt0X2Rldi0+aWRsZV9hY2M7CisJZG9fZGl2KGlkbGUsIE5TRUNfUEVSX1VTRUMpOwogCiAJc2VxX3ByaW50ZihzZXEsCi0JCSAgICJDdXJyZW50OlxuICAgICBwa3RzLXNvZmFyOiAlbGx1ICBlcnJvcnM6ICVsbHVcbiAgICAgc3RhcnRlZDogJWxsdXVzICBzdG9wcGVkOiAlbGx1dXMgaWRsZTogJWxsdXVzXG4iLAorCQkgICAiQ3VycmVudDpcbiAgICAgcGt0cy1zb2ZhcjogJWxsdSAgZXJyb3JzOiAlbGx1XG4iLAogCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtPnNvZmFyLAotCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtPmVycm9ycywgKHVuc2lnbmVkIGxvbmcgbG9uZylzYSwKLQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzdG9wcGVkLAotCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtPmlkbGVfYWNjKTsKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwa3RfZGV2LT5lcnJvcnMpOworCisJc2VxX3ByaW50ZihzZXEsCisJCSAgICIgICAgIHN0YXJ0ZWQ6ICVsbHV1cyAgc3RvcHBlZDogJWxsdXVzIGlkbGU6ICVsbHV1c1xuIiwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykga3RpbWVfdG9fdXMocGt0X2Rldi0+c3RhcnRlZF9hdCksCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGt0aW1lX3RvX3VzKHN0b3BwZWQpLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBpZGxlKTsKIAogCXNlcV9wcmludGYoc2VxLAogCQkgICAiICAgICBzZXFfbnVtOiAlZCAgY3VyX2RzdF9tYWNfb2Zmc2V0OiAlZCAgY3VyX3NyY19tYWNfb2Zmc2V0OiAlZFxuIiwKQEAgLTY5Niw3ICs3MDcsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgaGV4MzJfYXJnKGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZmZlciwgdW5zaWduZWQgbG9uZyBtYXhsZW4sIF9fdTMyICpudW0pCitzdGF0aWMgaW50IGhleDMyX2FyZyhjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWZmZXIsIHVuc2lnbmVkIGxvbmcgbWF4bGVuLAorCQkgICAgIF9fdTMyICpudW0pCiB7CiAJaW50IGkgPSAwOwogCSpudW0gPSAwOwpAQCAtODQ2LDkgKzg1OCw5IEBACiAJLyogUmVhZCB2YXJpYWJsZSBuYW1lICovCiAKIAlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZihuYW1lKSAtIDEpOwotCWlmIChsZW4gPCAwKSB7CisJaWYgKGxlbiA8IDApCiAJCXJldHVybiBsZW47Ci0JfQorCiAJbWVtc2V0KG5hbWUsIDAsIHNpemVvZihuYW1lKSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKG5hbWUsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC04NzIsOSArODg0LDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJtaW5fcGt0X3NpemUiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlpZiAodmFsdWUgPCAxNCArIDIwICsgOCkKIAkJCXZhbHVlID0gMTQgKyAyMCArIDg7CkBAIC04ODksOSArOTAxLDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJtYXhfcGt0X3NpemUiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlpZiAodmFsdWUgPCAxNCArIDIwICsgOCkKIAkJCXZhbHVlID0gMTQgKyAyMCArIDg7CkBAIC05MDgsOSArOTIwLDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJwa3Rfc2l6ZSIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCWlmICh2YWx1ZSA8IDE0ICsgMjAgKyA4KQogCQkJdmFsdWUgPSAxNCArIDIwICsgODsKQEAgLTkyNSw5ICs5MzcsOSBAQAogCiAJaWYgKCFzdHJjbXAobmFtZSwgImRlYnVnIikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEwLCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJZGVidWcgPSB2YWx1ZTsKIAkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogZGVidWc9JXUiLCBkZWJ1Zyk7CkBAIC05MzYsOSArOTQ4LDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJmcmFncyIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCXBrdF9kZXYtPm5mcmFncyA9IHZhbHVlOwogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBmcmFncz0ldSIsIHBrdF9kZXYtPm5mcmFncyk7CkBAIC05NDYsMjYgKzk1OCwyNCBAQAogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAiZGVsYXkiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwotCQlpZiAodmFsdWUgPT0gMHg3RkZGRkZGRikgewotCQkJcGt0X2Rldi0+ZGVsYXlfdXMgPSAweDdGRkZGRkZGOwotCQkJcGt0X2Rldi0+ZGVsYXlfbnMgPSAwOwotCQl9IGVsc2UgewotCQkJcGt0X2Rldi0+ZGVsYXlfdXMgPSB2YWx1ZSAvIDEwMDA7Ci0JCQlwa3RfZGV2LT5kZWxheV9ucyA9IHZhbHVlICUgMTAwMDsKLQkJfQotCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBkZWxheT0ldSIsCi0JCQkxMDAwICogcGt0X2Rldi0+ZGVsYXlfdXMgKyBwa3RfZGV2LT5kZWxheV9ucyk7CisJCWlmICh2YWx1ZSA9PSAweDdGRkZGRkZGKQorCQkJcGt0X2Rldi0+ZGVsYXkgPSBVTExPTkdfTUFYOworCQllbHNlCisJCQlwa3RfZGV2LT5kZWxheSA9ICh1NjQpdmFsdWUgKiBOU0VDX1BFUl9VU0VDOworCisJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IGRlbGF5PSVsbHUiLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi0+ZGVsYXkpOwogCQlyZXR1cm4gY291bnQ7CiAJfQogCWlmICghc3RyY21wKG5hbWUsICJ1ZHBfc3JjX21pbiIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCWlmICh2YWx1ZSAhPSBwa3RfZGV2LT51ZHBfc3JjX21pbikgewogCQkJcGt0X2Rldi0+dWRwX3NyY19taW4gPSB2YWx1ZTsKQEAgLTk3Niw5ICs5ODYsOSBAQAogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAidWRwX2RzdF9taW4iKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlpZiAodmFsdWUgIT0gcGt0X2Rldi0+dWRwX2RzdF9taW4pIHsKIAkJCXBrdF9kZXYtPnVkcF9kc3RfbWluID0gdmFsdWU7CkBAIC05ODksOSArOTk5LDkgQEAKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgInVkcF9zcmNfbWF4IikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEwLCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKHZhbHVlICE9IHBrdF9kZXYtPnVkcF9zcmNfbWF4KSB7CiAJCQlwa3RfZGV2LT51ZHBfc3JjX21heCA9IHZhbHVlOwpAQCAtMTAwMiw5ICsxMDEyLDkgQEAKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgInVkcF9kc3RfbWF4IikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEwLCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKHZhbHVlICE9IHBrdF9kZXYtPnVkcF9kc3RfbWF4KSB7CiAJCQlwa3RfZGV2LT51ZHBfZHN0X21heCA9IHZhbHVlOwpAQCAtMTAxNSw5ICsxMDI1LDkgQEAKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgImNsb25lX3NrYiIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCXBrdF9kZXYtPmNsb25lX3NrYiA9IHZhbHVlOwogCkBAIC0xMDI2LDkgKzEwMzYsOSBAQAogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAiY291bnQiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlwa3RfZGV2LT5jb3VudCA9IHZhbHVlOwogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBjb3VudD0lbGx1IiwKQEAgLTEwMzcsOSArMTA0Nyw5IEBACiAJfQogCWlmICghc3RyY21wKG5hbWUsICJzcmNfbWFjX2NvdW50IikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEwLCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKHBrdF9kZXYtPnNyY19tYWNfY291bnQgIT0gdmFsdWUpIHsKIAkJCXBrdF9kZXYtPnNyY19tYWNfY291bnQgPSB2YWx1ZTsKQEAgLTEwNTEsOSArMTA2MSw5IEBACiAJfQogCWlmICghc3RyY21wKG5hbWUsICJkc3RfbWFjX2NvdW50IikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEwLCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKHBrdF9kZXYtPmRzdF9tYWNfY291bnQgIT0gdmFsdWUpIHsKIAkJCXBrdF9kZXYtPmRzdF9tYWNfY291bnQgPSB2YWx1ZTsKQEAgLTEwNjcsOSArMTA3Nyw5IEBACiAJCWNoYXIgZlszMl07CiAJCW1lbXNldChmLCAwLCAzMik7CiAJCWxlbiA9IHN0cm5fbGVuKCZ1c2VyX2J1ZmZlcltpXSwgc2l6ZW9mKGYpIC0gMSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWlmIChjb3B5X2Zyb21fdXNlcihmLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJaSArPSBsZW47CkBAIC0xMTY4LDkgKzExNzgsOCBAQAogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAiZHN0X21pbiIpIHx8ICFzdHJjbXAobmFtZSwgImRzdCIpKSB7CiAJCWxlbiA9IHN0cm5fbGVuKCZ1c2VyX2J1ZmZlcltpXSwgc2l6ZW9mKHBrdF9kZXYtPmRzdF9taW4pIC0gMSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQogCiAJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTE5MCw5ICsxMTk5LDkgQEAKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgImRzdF9tYXgiKSkgewogCQlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZihwa3RfZGV2LT5kc3RfbWF4KSAtIDEpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTMwMyw5ICsxMzEyLDkgQEAKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgInNyY19taW4iKSkgewogCQlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZihwa3RfZGV2LT5zcmNfbWluKSAtIDEpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnVmW2xlbl0gPSAwOwpAQCAtMTMyNCw5ICsxMzMzLDkgQEAKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgInNyY19tYXgiKSkgewogCQlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZihwa3RfZGV2LT5zcmNfbWF4KSAtIDEpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnVmW2xlbl0gPSAwOwpAQCAtMTM1MCw5ICsxMzU5LDkgQEAKIAkJbWVtY3B5KG9sZF9kbWFjLCBwa3RfZGV2LT5kc3RfbWFjLCBFVEhfQUxFTik7CiAKIAkJbGVuID0gc3Rybl9sZW4oJnVzZXJfYnVmZmVyW2ldLCBzaXplb2YodmFsc3RyKSAtIDEpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQltZW1zZXQodmFsc3RyLCAwLCBzaXplb2YodmFsc3RyKSk7CiAJCWlmIChjb3B5X2Zyb21fdXNlcih2YWxzdHIsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTM5Miw5ICsxNDAxLDkgQEAKIAkJbWVtY3B5KG9sZF9zbWFjLCBwa3RfZGV2LT5zcmNfbWFjLCBFVEhfQUxFTik7CiAKIAkJbGVuID0gc3Rybl9sZW4oJnVzZXJfYnVmZmVyW2ldLCBzaXplb2YodmFsc3RyKSAtIDEpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQltZW1zZXQodmFsc3RyLCAwLCBzaXplb2YodmFsc3RyKSk7CiAJCWlmIChjb3B5X2Zyb21fdXNlcih2YWxzdHIsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTQzNSw5ICsxNDQ0LDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJmbG93cyIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCWlmICh2YWx1ZSA+IE1BWF9DRkxPV1MpCiAJCQl2YWx1ZSA9IE1BWF9DRkxPV1M7CkBAIC0xNDQ5LDkgKzE0NTgsOSBAQAogCiAJaWYgKCFzdHJjbXAobmFtZSwgImZsb3dsZW4iKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlwa3RfZGV2LT5sZmxvdyA9IHZhbHVlOwogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBmbG93bGVuPSV1IiwgcGt0X2Rldi0+bGZsb3cpOwpAQCAtMTQ2MCw5ICsxNDY5LDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJxdWV1ZV9tYXBfbWluIikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDUsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlwa3RfZGV2LT5xdWV1ZV9tYXBfbWluID0gdmFsdWU7CiAJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHF1ZXVlX21hcF9taW49JXUiLCBwa3RfZGV2LT5xdWV1ZV9tYXBfbWluKTsKQEAgLTE0NzEsOSArMTQ4MCw5IEBACiAKIAlpZiAoIXN0cmNtcChuYW1lLCAicXVldWVfbWFwX21heCIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCA1LCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJcGt0X2Rldi0+cXVldWVfbWFwX21heCA9IHZhbHVlOwogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBxdWV1ZV9tYXBfbWF4PSV1IiwgcGt0X2Rldi0+cXVldWVfbWFwX21heCk7CkBAIC0xNTA1LDkgKzE1MTQsOSBAQAogCiAJaWYgKCFzdHJjbXAobmFtZSwgInZsYW5faWQiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgNCwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCWlmICh2YWx1ZSA8PSA0MDk1KSB7CiAJCQlwa3RfZGV2LT52bGFuX2lkID0gdmFsdWU7ICAvKiB0dXJuIG9uIFZMQU4gKi8KQEAgLTE1MzIsOSArMTU0MSw5IEBACiAKIAlpZiAoIXN0cmNtcChuYW1lLCAidmxhbl9wIikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlpZiAoKHZhbHVlIDw9IDcpICYmIChwa3RfZGV2LT52bGFuX2lkICE9IDB4ZmZmZikpIHsKIAkJCXBrdF9kZXYtPnZsYW5fcCA9IHZhbHVlOwpAQCAtMTU0Nyw5ICsxNTU2LDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJ2bGFuX2NmaSIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxLCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKCh2YWx1ZSA8PSAxKSAmJiAocGt0X2Rldi0+dmxhbl9pZCAhPSAweGZmZmYpKSB7CiAJCQlwa3RfZGV2LT52bGFuX2NmaSA9IHZhbHVlOwpAQCAtMTU2Miw5ICsxNTcxLDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJzdmxhbl9pZCIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCA0LCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKCh2YWx1ZSA8PSA0MDk1KSAmJiAoKHBrdF9kZXYtPnZsYW5faWQgIT0gMHhmZmZmKSkpIHsKIAkJCXBrdF9kZXYtPnN2bGFuX2lkID0gdmFsdWU7ICAvKiB0dXJuIG9uIFNWTEFOICovCkBAIC0xNTg5LDkgKzE1OTgsOSBAQAogCiAJaWYgKCFzdHJjbXAobmFtZSwgInN2bGFuX3AiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMSwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCWlmICgodmFsdWUgPD0gNykgJiYgKHBrdF9kZXYtPnN2bGFuX2lkICE9IDB4ZmZmZikpIHsKIAkJCXBrdF9kZXYtPnN2bGFuX3AgPSB2YWx1ZTsKQEAgLTE2MDQsOSArMTYxMyw5IEBACiAKIAlpZiAoIXN0cmNtcChuYW1lLCAic3ZsYW5fY2ZpIikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlpZiAoKHZhbHVlIDw9IDEpICYmIChwa3RfZGV2LT5zdmxhbl9pZCAhPSAweGZmZmYpKSB7CiAJCQlwa3RfZGV2LT5zdmxhbl9jZmkgPSB2YWx1ZTsKQEAgLTE2MjAsOSArMTYyOSw5IEBACiAJaWYgKCFzdHJjbXAobmFtZSwgInRvcyIpKSB7CiAJCV9fdTMyIHRtcF92YWx1ZSA9IDA7CiAJCWxlbiA9IGhleDMyX2FyZygmdXNlcl9idWZmZXJbaV0sIDIsICZ0bXBfdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKGxlbiA9PSAyKSB7CiAJCQlwa3RfZGV2LT50b3MgPSB0bXBfdmFsdWU7CkBAIC0xNjM2LDkgKzE2NDUsOSBAQAogCWlmICghc3RyY21wKG5hbWUsICJ0cmFmZmljX2NsYXNzIikpIHsKIAkJX191MzIgdG1wX3ZhbHVlID0gMDsKIAkJbGVuID0gaGV4MzJfYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMiwgJnRtcF92YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlpZiAobGVuID09IDIpIHsKIAkJCXBrdF9kZXYtPnRyYWZmaWNfY2xhc3MgPSB0bXBfdmFsdWU7CkBAIC0xNjcwLDcgKzE2NzksNyBAQAogc3RhdGljIGludCBwa3RnZW5fdGhyZWFkX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJc3RydWN0IHBrdGdlbl90aHJlYWQgKnQgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXY7CisJY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXY7CiAKIAlCVUdfT04oIXQpOwogCkBAIC0xODczLDggKzE4ODIsMTAgQEAKIAogCQkJcmVtb3ZlX3Byb2NfZW50cnkocGt0X2Rldi0+ZW50cnktPm5hbWUsIHBnX3Byb2NfZGlyKTsKIAotCQkJcGt0X2Rldi0+ZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShkZXYtPm5hbWUsIDA2MDAsCi0JCQkJCQkJICAgcGdfcHJvY19kaXIpOworCQkJcGt0X2Rldi0+ZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKGRldi0+bmFtZSwgMDYwMCwKKwkJCQkJCQkgIHBnX3Byb2NfZGlyLAorCQkJCQkJCSAgJnBrdGdlbl9pZl9mb3BzLAorCQkJCQkJCSAgcGt0X2Rldik7CiAJCQlpZiAoIXBrdF9kZXYtPmVudHJ5KQogCQkJCXByaW50ayhLRVJOX0VSUiAicGt0Z2VuOiBjYW4ndCBtb3ZlIHByb2MgIgogCQkJCSAgICAgICAiIGVudHJ5IGZvciAnJXMnXG4iLCBkZXYtPm5hbWUpOwpAQCAtMTkwOCwxMyArMTkxOSwxNCBAQAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpwa3RnZW5fZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBjb25zdCBjaGFyICppZm5hbWUpCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKnBrdGdlbl9kZXZfZ2V0X2J5X25hbWUoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsCisJCQkJCQkgY29uc3QgY2hhciAqaWZuYW1lKQogewogCWNoYXIgYltJRk5BTVNJWis1XTsKIAlpbnQgaSA9IDA7CiAKLQlmb3IoaT0wOyBpZm5hbWVbaV0gIT0gJ0AnOyBpKyspIHsKLQkJaWYoaSA9PSBJRk5BTVNJWikKKwlmb3IgKGkgPSAwOyBpZm5hbWVbaV0gIT0gJ0AnOyBpKyspIHsKKwkJaWYgKGkgPT0gSUZOQU1TSVopCiAJCQlicmVhazsKIAogCQliW2ldID0gaWZuYW1lW2ldOwpAQCAtMTk4MSw3ICsxOTkzLDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicGt0Z2VuOiBXQVJOSU5HOiBSZXF1ZXN0ZWQgIgogCQkgICAgICAgInF1ZXVlX21hcF9taW4gKHplcm8tYmFzZWQpICglZCkgZXhjZWVkcyB2YWxpZCByYW5nZSAiCiAJCSAgICAgICAiWzAgLSAlZF0gZm9yICglZCkgcXVldWVzIG9uICVzLCByZXNldHRpbmdcbiIsCi0JCSAgICAgICBwa3RfZGV2LT5xdWV1ZV9tYXBfbWluLCAobnR4cSA/OiAxKS0gMSwgbnR4cSwKKwkJICAgICAgIHBrdF9kZXYtPnF1ZXVlX21hcF9taW4sIChudHhxID86IDEpIC0gMSwgbnR4cSwKIAkJICAgICAgIHBrdF9kZXYtPm9kZXYtPm5hbWUpOwogCQlwa3RfZGV2LT5xdWV1ZV9tYXBfbWluID0gbnR4cSAtIDE7CiAJfQpAQCAtMTk4OSw3ICsyMDAxLDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicGt0Z2VuOiBXQVJOSU5HOiBSZXF1ZXN0ZWQgIgogCQkgICAgICAgInF1ZXVlX21hcF9tYXggKHplcm8tYmFzZWQpICglZCkgZXhjZWVkcyB2YWxpZCByYW5nZSAiCiAJCSAgICAgICAiWzAgLSAlZF0gZm9yICglZCkgcXVldWVzIG9uICVzLCByZXNldHRpbmdcbiIsCi0JCSAgICAgICBwa3RfZGV2LT5xdWV1ZV9tYXBfbWF4LCAobnR4cSA/OiAxKS0gMSwgbnR4cSwKKwkJICAgICAgIHBrdF9kZXYtPnF1ZXVlX21hcF9tYXgsIChudHhxID86IDEpIC0gMSwgbnR4cSwKIAkJICAgICAgIHBrdF9kZXYtPm9kZXYtPm5hbWUpOwogCQlwa3RfZGV2LT5xdWV1ZV9tYXBfbWF4ID0gbnR4cSAtIDE7CiAJfQpAQCAtMjAzMCw3ICsyMDQyLDggQEAKIAkJCSAqLwogCiAJCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCQlpZiAoKGlkZXYgPSBfX2luNl9kZXZfZ2V0KHBrdF9kZXYtPm9kZXYpKSAhPSBOVUxMKSB7CisJCQlpZGV2ID0gX19pbjZfZGV2X2dldChwa3RfZGV2LT5vZGV2KTsKKwkJCWlmIChpZGV2KSB7CiAJCQkJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwOwogCiAJCQkJcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKQEAgLTIwODksMjcgKzIxMDIsNDAgQEAKIAlwa3RfZGV2LT5uZmxvd3MgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBzcGluKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBfX3U2NCBzcGluX3VudGlsX3VzKQorCitzdGF0aWMgdm9pZCBzcGluKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBrdGltZV90IHNwaW5fdW50aWwpCiB7Ci0JX191NjQgc3RhcnQ7Ci0JX191NjQgbm93OworCWt0aW1lX3Qgc3RhcnQ7CisJczMyIHJlbWFpbmluZzsKKwlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyIHQ7CiAKLQlzdGFydCA9IG5vdyA9IGdldEN1clVzKCk7Ci0Jd2hpbGUgKG5vdyA8IHNwaW5fdW50aWxfdXMpIHsKLQkJLyogVE9ETzogb3B0aW1pemUgc2xlZXBpbmcgYmVoYXZpb3IgKi8KLQkJaWYgKHNwaW5fdW50aWxfdXMgLSBub3cgPiBqaWZmaWVzX3RvX3VzZWNzKDEpICsgMSkKLQkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKLQkJZWxzZSBpZiAoc3Bpbl91bnRpbF91cyAtIG5vdyA+IDEwMCkgewotCQkJaWYgKCFwa3RfZGV2LT5ydW5uaW5nKQotCQkJCXJldHVybjsKLQkJCWlmIChuZWVkX3Jlc2NoZWQoKSkKKwlocnRpbWVyX2luaXRfb25fc3RhY2soJnQudGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX0FCUyk7CisJaHJ0aW1lcl9zZXRfZXhwaXJlcygmdC50aW1lciwgc3Bpbl91bnRpbCk7CisKKwlyZW1haW5pbmcgPSBrdGltZV90b191cyhocnRpbWVyX2V4cGlyZXNfcmVtYWluaW5nKCZ0LnRpbWVyKSk7CisJaWYgKHJlbWFpbmluZyA8PSAwKQorCQlyZXR1cm47CisKKwlzdGFydCA9IGt0aW1lX25vdygpOworCWlmIChyZW1haW5pbmcgPCAxMDApCisJCXVkZWxheShyZW1haW5pbmcpOyAJLyogcmVhbGx5IHNtYWxsIGp1c3Qgc3BpbiAqLworCWVsc2UgeworCQkvKiBzZWUgZG9fbmFub3NsZWVwICovCisJCWhydGltZXJfaW5pdF9zbGVlcGVyKCZ0LCBjdXJyZW50KTsKKwkJZG8geworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCWhydGltZXJfc3RhcnRfZXhwaXJlcygmdC50aW1lciwgSFJUSU1FUl9NT0RFX0FCUyk7CisJCQlpZiAoIWhydGltZXJfYWN0aXZlKCZ0LnRpbWVyKSkKKwkJCQl0LnRhc2sgPSBOVUxMOworCisJCQlpZiAobGlrZWx5KHQudGFzaykpCiAJCQkJc2NoZWR1bGUoKTsKLQkJfQogCi0JCW5vdyA9IGdldEN1clVzKCk7CisJCQlocnRpbWVyX2NhbmNlbCgmdC50aW1lcik7CisJCX0gd2hpbGUgKHQudGFzayAmJiBwa3RfZGV2LT5ydW5uaW5nICYmICFzaWduYWxfcGVuZGluZyhjdXJyZW50KSk7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAl9Ci0KLQlwa3RfZGV2LT5pZGxlX2FjYyArPSBub3cgLSBzdGFydDsKKwlwa3RfZGV2LT5pZGxlX2FjYyArPSBrdGltZV90b19ucyhrdGltZV9zdWIoa3RpbWVfbm93KCksIHN0YXJ0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGt0X292ZXJoZWFkKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQpAQCAtMjEyMCwxMyArMjE0Niw5IEBACiAJcGt0X2Rldi0+cGt0X292ZXJoZWFkICs9IFNWTEFOX1RBR19TSVpFKHBrdF9kZXYpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmX3NlZW4oc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGludCBmbG93KQorc3RhdGljIGlubGluZSBpbnQgZl9zZWVuKGNvbnN0IHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBpbnQgZmxvdykKIHsKLQotCWlmIChwa3RfZGV2LT5mbG93c1tmbG93XS5mbGFncyAmIEZfSU5JVCkKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKKwlyZXR1cm4gISEocGt0X2Rldi0+Zmxvd3NbZmxvd10uZmxhZ3MgJiBGX0lOSVQpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCkBAIC0yMTc0LDcgKzIxOTYsNyBAQAogCQlpZiAoeCkgewogCQkJcGt0X2Rldi0+Zmxvd3NbZmxvd10ueCA9IHg7CiAJCQlzZXRfcGt0X292ZXJoZWFkKHBrdF9kZXYpOwotCQkJcGt0X2Rldi0+cGt0X292ZXJoZWFkKz14LT5wcm9wcy5oZWFkZXJfbGVuOworCQkJcGt0X2Rldi0+cGt0X292ZXJoZWFkICs9IHgtPnByb3BzLmhlYWRlcl9sZW47CiAJCX0KIAogCX0KQEAgLTIzMTMsMTggKzIzMzUsMTggQEAKIAogCWlmICghKHBrdF9kZXYtPmZsYWdzICYgRl9JUFY2KSkgewogCi0JCWlmICgoaW1uID0gbnRvaGwocGt0X2Rldi0+c2FkZHJfbWluKSkgPCAoaW14ID0KLQkJCQkJCQkgbnRvaGwocGt0X2Rldi0+Ci0JCQkJCQkJICAgICAgIHNhZGRyX21heCkpKSB7CisJCWltbiA9IG50b2hsKHBrdF9kZXYtPnNhZGRyX21pbik7CisJCWlteCA9IG50b2hsKHBrdF9kZXYtPnNhZGRyX21heCk7CisJCWlmIChpbW4gPCBpbXgpIHsKIAkJCV9fdTMyIHQ7CiAJCQlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQU1JDX1JORCkKIAkJCQl0ID0gcmFuZG9tMzIoKSAlIChpbXggLSBpbW4pICsgaW1uOwogCQkJZWxzZSB7CiAJCQkJdCA9IG50b2hsKHBrdF9kZXYtPmN1cl9zYWRkcik7CiAJCQkJdCsrOwotCQkJCWlmICh0ID4gaW14KSB7CisJCQkJaWYgKHQgPiBpbXgpCiAJCQkJCXQgPSBpbW47Ci0JCQkJfQorCiAJCQl9CiAJCQlwa3RfZGV2LT5jdXJfc2FkZHIgPSBodG9ubCh0KTsKIAkJfQpAQCAtMjQzNSwxNCArMjQ1NywxNCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7CiAKLQl4LT5jdXJsZnQuYnl0ZXMgKz1za2ItPmxlbjsKKwl4LT5jdXJsZnQuYnl0ZXMgKz0gc2tiLT5sZW47CiAJeC0+Y3VybGZ0LnBhY2tldHMrKzsKIGVycm9yOgogCXNwaW5fdW5sb2NrKCZ4LT5sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9TQXMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCitzdGF0aWMgdm9pZCBmcmVlX1NBcyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIHsKIAlpZiAocGt0X2Rldi0+Y2Zsb3dzKSB7CiAJCS8qIGxldCBnbyBvZiB0aGUgU0FzIGlmIHdlIGhhdmUgdGhlbSAqLwpAQCAtMjQ1Nyw3ICsyNDc5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHByb2Nlc3NfaXBzZWMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsCitzdGF0aWMgaW50IHByb2Nlc3NfaXBzZWMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsCiAJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgcHJvdG9jb2wpCiB7CiAJaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9JUFNFQ19PTikgewpAQCAtMjQ2NywxMSArMjQ4OSwxMSBAQAogCQkJaW50IHJldDsKIAkJCV9fdTggKmV0aDsKIAkJCW5oZWFkID0geC0+cHJvcHMuaGVhZGVyX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpOwotCQkJaWYgKG5oZWFkID4wKSB7CisJCQlpZiAobmhlYWQgPiAwKSB7CiAJCQkJcmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIG5oZWFkLCAwLCBHRlBfQVRPTUlDKTsKIAkJCQlpZiAocmV0IDwgMCkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGV4cGFuZGluZyAiCi0JCQkJCSAgICAgICAiaXBzZWMgcGFja2V0ICVkXG4iLHJldCk7CisJCQkJCSAgICAgICAiaXBzZWMgcGFja2V0ICVkXG4iLCByZXQpOwogCQkJCQlnb3RvIGVycjsKIAkJCQl9CiAJCQl9CkBAIC0yNDgxLDEzICsyNTAzLDEzIEBACiAJCQlyZXQgPSBwa3RnZW5fb3V0cHV0X2lwc2VjKHNrYiwgcGt0X2Rldik7CiAJCQlpZiAocmV0KSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBjcmVhdGluZyBpcHNlYyAiCi0JCQkJICAgICAgICJwYWNrZXQgJWRcbiIscmV0KTsKKwkJCQkgICAgICAgInBhY2tldCAlZFxuIiwgcmV0KTsKIAkJCQlnb3RvIGVycjsKIAkJCX0KIAkJCS8qIHJlc3RvcmUgbGwgKi8KIAkJCWV0aCA9IChfX3U4ICopIHNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOwogCQkJbWVtY3B5KGV0aCwgcGt0X2Rldi0+aGgsIDEyKTsKLQkJCSoodTE2ICopICYgZXRoWzEyXSA9IHByb3RvY29sOworCQkJKih1MTYgKikgJmV0aFsxMl0gPSBwcm90b2NvbDsKIAkJfQogCX0KIAlyZXR1cm4gMTsKQEAgLTI1MDAsOSArMjUyMiw5IEBACiBzdGF0aWMgdm9pZCBtcGxzX3B1c2goX19iZTMyICptcGxzLCBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIHsKIAl1bnNpZ25lZCBpOwotCWZvciAoaSA9IDA7IGkgPCBwa3RfZGV2LT5ucl9sYWJlbHM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBwa3RfZGV2LT5ucl9sYWJlbHM7IGkrKykKIAkJKm1wbHMrKyA9IHBrdF9kZXYtPmxhYmVsc1tpXSAmIH5NUExTX1NUQUNLX0JPVFRPTTsKLQl9CisKIAltcGxzLS07CiAJKm1wbHMgfD0gTVBMU19TVEFDS19CT1RUT007CiB9CkBAIC0yNTQzLDggKzI1NjUsOSBAQAogCW1vZF9jdXJfaGVhZGVycyhwa3RfZGV2KTsKIAogCWRhdGFsZW4gPSAob2Rldi0+aGFyZF9oZWFkZXJfbGVuICsgMTYpICYgfjB4ZjsKLQlza2IgPSBhbGxvY19za2IocGt0X2Rldi0+Y3VyX3BrdF9zaXplICsgNjQgKyBkYXRhbGVuICsKLQkJCXBrdF9kZXYtPnBrdF9vdmVyaGVhZCwgR0ZQX0FUT01JQyk7CisJc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG9kZXYsCisJCQkJIHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSArIDY0CisJCQkJICsgZGF0YWxlbiArIHBrdF9kZXYtPnBrdF9vdmVyaGVhZCwgR0ZQX05PV0FJVCk7CiAJaWYgKCFza2IpIHsKIAkJc3ByaW50Zihwa3RfZGV2LT5yZXN1bHQsICJObyBtZW1vcnkiKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0yNjY4LDggKzI2OTEsOSBAQAogCQl9CiAJfQogCi0JLyogU3RhbXAgdGhlIHRpbWUsIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGNvbnZlcnQgdGhlbSB0byBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KLQorCS8qIFN0YW1wIHRoZSB0aW1lLCBhbmQgc2VxdWVuY2UgbnVtYmVyLAorCSAqIGNvbnZlcnQgdGhlbSB0byBuZXR3b3JrIGJ5dGUgb3JkZXIKKwkgKi8KIAlpZiAocGdoKSB7CiAJCXN0cnVjdCB0aW1ldmFsIHRpbWVzdGFtcDsKIApAQCAtMjg4Miw4ICsyOTA2LDkgQEAKIAlxdWV1ZV9tYXAgPSBwa3RfZGV2LT5jdXJfcXVldWVfbWFwOwogCW1vZF9jdXJfaGVhZGVycyhwa3RfZGV2KTsKIAotCXNrYiA9IGFsbG9jX3NrYihwa3RfZGV2LT5jdXJfcGt0X3NpemUgKyA2NCArIDE2ICsKLQkJCXBrdF9kZXYtPnBrdF9vdmVyaGVhZCwgR0ZQX0FUT01JQyk7CisJc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG9kZXYsCisJCQkJIHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSArIDY0CisJCQkJICsgMTYgKyBwa3RfZGV2LT5wa3Rfb3ZlcmhlYWQsIEdGUF9OT1dBSVQpOwogCWlmICghc2tiKSB7CiAJCXNwcmludGYocGt0X2Rldi0+cmVzdWx0LCAiTm8gbWVtb3J5Iik7CiAJCXJldHVybiBOVUxMOwpAQCAtMjkyMiw3ICsyOTQ3LDcgQEAKIAl1ZHBoID0gdWRwX2hkcihza2IpOwogCiAJbWVtY3B5KGV0aCwgcGt0X2Rldi0+aGgsIDEyKTsKLQkqKF9fYmUxNiAqKSAmIGV0aFsxMl0gPSBwcm90b2NvbDsKKwkqKF9fYmUxNiAqKSAmZXRoWzEyXSA9IHByb3RvY29sOwogCiAJLyogRXRoICsgSVBoICsgVURQaCArIG1wbHMgKi8KIAlkYXRhbGVuID0gcGt0X2Rldi0+Y3VyX3BrdF9zaXplIC0gMTQgLQpAQCAtMzAxNiw4ICszMDQxLDEwIEBACiAJCX0KIAl9CiAKLQkvKiBTdGFtcCB0aGUgdGltZSwgYW5kIHNlcXVlbmNlIG51bWJlciwgY29udmVydCB0aGVtIHRvIG5ldHdvcmsgYnl0ZSBvcmRlciAqLwotCS8qIHNob3VsZCB3ZSB1cGRhdGUgY2xvbmVkIHBhY2tldHMgdG9vID8gKi8KKwkvKiBTdGFtcCB0aGUgdGltZSwgYW5kIHNlcXVlbmNlIG51bWJlciwKKwkgKiBjb252ZXJ0IHRoZW0gdG8gbmV0d29yayBieXRlIG9yZGVyCisJICogc2hvdWxkIHdlIHVwZGF0ZSBjbG9uZWQgcGFja2V0cyB0b28gPworCSAqLwogCWlmIChwZ2gpIHsKIAkJc3RydWN0IHRpbWV2YWwgdGltZXN0YW1wOwogCkBAIC0zMDMzLDggKzMwNjAsOCBAQAogCXJldHVybiBza2I7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LAotCQkJCQkgIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQorc3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiwKKwkJCQkgICBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIHsKIAlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQVjYpCiAJCXJldHVybiBmaWxsX3BhY2tldF9pcHY2KG9kZXYsIHBrdF9kZXYpOwpAQCAtMzA3Miw5ICszMDk5LDkgQEAKIAkJCXBrdGdlbl9jbGVhcl9jb3VudGVycyhwa3RfZGV2KTsKIAkJCXBrdF9kZXYtPnJ1bm5pbmcgPSAxOwkvKiBDcmFua2UgeWVzZWxmISAqLwogCQkJcGt0X2Rldi0+c2tiID0gTlVMTDsKLQkJCXBrdF9kZXYtPnN0YXJ0ZWRfYXQgPSBnZXRDdXJVcygpOwotCQkJcGt0X2Rldi0+bmV4dF90eF91cyA9IGdldEN1clVzKCk7CS8qIFRyYW5zbWl0IGltbWVkaWF0ZWx5ICovCi0JCQlwa3RfZGV2LT5uZXh0X3R4X25zID0gMDsKKwkJCXBrdF9kZXYtPnN0YXJ0ZWRfYXQgPQorCQkJCXBrdF9kZXYtPm5leHRfdHggPSBrdGltZV9ub3coKTsKKwogCQkJc2V0X3BrdF9vdmVyaGVhZChwa3RfZGV2KTsKIAogCQkJc3RyY3B5KHBrdF9kZXYtPnJlc3VsdCwgIlN0YXJ0aW5nIik7CkBAIC0zMTAxLDE3ICszMTI4LDE0IEBACiAJbXV0ZXhfdW5sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOwogfQogCi1zdGF0aWMgaW50IHRocmVhZF9pc19ydW5uaW5nKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KQorc3RhdGljIGludCB0aHJlYWRfaXNfcnVubmluZyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCkKIHsKLQlzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldjsKLQlpbnQgcmVzID0gMDsKKwljb25zdCBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGt0X2RldiwgJnQtPmlmX2xpc3QsIGxpc3QpCi0JCWlmIChwa3RfZGV2LT5ydW5uaW5nKSB7Ci0JCQlyZXMgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQlyZXR1cm4gcmVzOworCQlpZiAocGt0X2Rldi0+cnVubmluZykKKwkJCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBrdGdlbl93YWl0X3RocmVhZF9ydW4oc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpCkBAIC0zMTY4LDcgKzMxOTIsOCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOwogCi0Jc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMTI1KSk7CS8qIFByb3BhZ2F0ZSB0aHJlYWQtPmNvbnRyb2wgICovCisJLyogUHJvcGFnYXRlIHRocmVhZC0+Y29udHJvbCAgKi8KKwlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygxMjUpKTsKIAogCXBrdGdlbl93YWl0X2FsbF90aHJlYWRzX3J1bigpOwogfQpAQCAtMzE4NiwzNSArMzIxMSwyOSBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOwogCi0Jc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMTI1KSk7CS8qIFByb3BhZ2F0ZSB0aHJlYWQtPmNvbnRyb2wgICovCisJLyogUHJvcGFnYXRlIHRocmVhZC0+Y29udHJvbCAgKi8KKwlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygxMjUpKTsKIAogCXBrdGdlbl93YWl0X2FsbF90aHJlYWRzX3J1bigpOwogfQogCiBzdGF0aWMgdm9pZCBzaG93X3Jlc3VsdHMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGludCBucl9mcmFncykKIHsKLQlfX3U2NCB0b3RhbF91cywgYnBzLCBtYnBzLCBwcHMsIGlkbGU7CisJX191NjQgYnBzLCBtYnBzLCBwcHM7CiAJY2hhciAqcCA9IHBrdF9kZXYtPnJlc3VsdDsKKwlrdGltZV90IGVsYXBzZWQgPSBrdGltZV9zdWIocGt0X2Rldi0+c3RvcHBlZF9hdCwKKwkJCQkgICAgcGt0X2Rldi0+c3RhcnRlZF9hdCk7CisJa3RpbWVfdCBpZGxlID0gbnNfdG9fa3RpbWUocGt0X2Rldi0+aWRsZV9hY2MpOwogCi0JdG90YWxfdXMgPSBwa3RfZGV2LT5zdG9wcGVkX2F0IC0gcGt0X2Rldi0+c3RhcnRlZF9hdDsKLQotCWlkbGUgPSBwa3RfZGV2LT5pZGxlX2FjYzsKLQotCXAgKz0gc3ByaW50ZihwLCAiT0s6ICVsbHUoYyVsbHUrZCVsbHUpIHVzZWMsICVsbHUgKCVkYnl0ZSwlZGZyYWdzKVxuIiwKLQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsX3VzLAotCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHRvdGFsX3VzIC0gaWRsZSksCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpZGxlLAorCXAgKz0gc3ByaW50ZihwLCAiT0s6ICVsbHUoYyVsbHUrZCVsbHUpIG5zZWMsICVsbHUgKCVkYnl0ZSwlZGZyYWdzKVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWt0aW1lX3RvX3VzKGVsYXBzZWQpLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fdXMoa3RpbWVfc3ViKGVsYXBzZWQsIGlkbGUpKSwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWt0aW1lX3RvX3VzKGlkbGUpLAogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGt0X2Rldi0+c29mYXIsCiAJCSAgICAgcGt0X2Rldi0+Y3VyX3BrdF9zaXplLCBucl9mcmFncyk7CiAKLQlwcHMgPSBwa3RfZGV2LT5zb2ZhciAqIFVTRUNfUEVSX1NFQzsKLQotCXdoaWxlICgodG90YWxfdXMgPj4gMzIpICE9IDApIHsKLQkJcHBzID4+PSAxOwotCQl0b3RhbF91cyA+Pj0gMTsKLQl9Ci0KLQlkb19kaXYocHBzLCB0b3RhbF91cyk7CisJcHBzID0gZGl2NjRfdTY0KHBrdF9kZXYtPnNvZmFyICogTlNFQ19QRVJfU0VDLAorCQkJa3RpbWVfdG9fbnMoZWxhcHNlZCkpOwogCiAJYnBzID0gcHBzICogOCAqIHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZTsKIApAQCAtMzIyOCw3ICszMjQ3LDYgQEAKIH0KIAogLyogU2V0IHN0b3BwZWQtYXQgdGltZXIsIHJlbW92ZSBmcm9tIHJ1bm5pbmcgbGlzdCwgZG8gY291bnRlcnMgJiBzdGF0aXN0aWNzICovCi0KIHN0YXRpYyBpbnQgcGt0Z2VuX3N0b3BfZGV2aWNlKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewogCWludCBucl9mcmFncyA9IHBrdF9kZXYtPnNrYiA/IHNrYl9zaGluZm8ocGt0X2Rldi0+c2tiKS0+bnJfZnJhZ3MgOiAtMTsKQEAgLTMyMzksNyArMzI1Nyw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXBrdF9kZXYtPnN0b3BwZWRfYXQgPSBnZXRDdXJVcygpOworCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCXBrdF9kZXYtPnNrYiA9IE5VTEw7CisJcGt0X2Rldi0+c3RvcHBlZF9hdCA9IGt0aW1lX25vdygpOwogCXBrdF9kZXYtPnJ1bm5pbmcgPSAwOwogCiAJc2hvd19yZXN1bHRzKHBrdF9kZXYsIG5yX2ZyYWdzKTsKQEAgLTMyNTgsNyArMzI3OCw3IEBACiAJCQljb250aW51ZTsKIAkJaWYgKGJlc3QgPT0gTlVMTCkKIAkJCWJlc3QgPSBwa3RfZGV2OwotCQllbHNlIGlmIChwa3RfZGV2LT5uZXh0X3R4X3VzIDwgYmVzdC0+bmV4dF90eF91cykKKwkJZWxzZSBpZiAoa3RpbWVfbHQocGt0X2Rldi0+bmV4dF90eCwgYmVzdC0+bmV4dF90eCkpCiAJCQliZXN0ID0gcGt0X2RldjsKIAl9CiAJaWZfdW5sb2NrKHQpOwpAQCAtMzI3NSw5ICszMjk1LDYgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGt0X2RldiwgJnQtPmlmX2xpc3QsIGxpc3QpIHsKIAkJcGt0Z2VuX3N0b3BfZGV2aWNlKHBrdF9kZXYpOwotCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKLQotCQlwa3RfZGV2LT5za2IgPSBOVUxMOwogCX0KIAogCWlmX3VubG9jayh0KTsKQEAgLTMzNDgsMzAgKzMzNjUsMzcgQEAKIAltdXRleF91bmxvY2soJnBrdGdlbl90aHJlYWRfbG9jayk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCitzdGF0aWMgdm9pZCBpZGxlKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQoreworCWt0aW1lX3QgaWRsZV9zdGFydCA9IGt0aW1lX25vdygpOworCisJaWYgKG5lZWRfcmVzY2hlZCgpKQorCQlzY2hlZHVsZSgpOworCWVsc2UKKwkJY3B1X3JlbGF4KCk7CisKKwlwa3RfZGV2LT5pZGxlX2FjYyArPSBrdGltZV90b19ucyhrdGltZV9zdWIoa3RpbWVfbm93KCksIGlkbGVfc3RhcnQpKTsKK30KKworCitzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IHBrdF9kZXYtPm9kZXY7Ci0JaW50ICgqeG1pdCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKikKKwluZXRkZXZfdHhfdCAoKnhtaXQpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopCiAJCT0gb2Rldi0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQ7CiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwotCV9fdTY0IGlkbGVfc3RhcnQgPSAwOwogCXUxNiBxdWV1ZV9tYXA7CiAJaW50IHJldDsKIAotCWlmIChwa3RfZGV2LT5kZWxheV91cyB8fCBwa3RfZGV2LT5kZWxheV9ucykgewotCQl1NjQgbm93OwotCi0JCW5vdyA9IGdldEN1clVzKCk7Ci0JCWlmIChub3cgPCBwa3RfZGV2LT5uZXh0X3R4X3VzKQotCQkJc3Bpbihwa3RfZGV2LCBwa3RfZGV2LT5uZXh0X3R4X3VzKTsKKwlpZiAocGt0X2Rldi0+ZGVsYXkpIHsKKwkJc3Bpbihwa3RfZGV2LCBwa3RfZGV2LT5uZXh0X3R4KTsKIAogCQkvKiBUaGlzIGlzIG1heCBERUxBWSwgdGhpcyBoYXMgc3BlY2lhbCBtZWFuaW5nIG9mCiAJCSAqICJuZXZlciB0cmFuc21pdCIKIAkJICovCi0JCWlmIChwa3RfZGV2LT5kZWxheV91cyA9PSAweDdGRkZGRkZGKSB7Ci0JCQlwa3RfZGV2LT5uZXh0X3R4X3VzID0gZ2V0Q3VyVXMoKSArIHBrdF9kZXYtPmRlbGF5X3VzOwotCQkJcGt0X2Rldi0+bmV4dF90eF9ucyA9IHBrdF9kZXYtPmRlbGF5X25zOwotCQkJZ290byBvdXQ7CisJCWlmIChwa3RfZGV2LT5kZWxheSA9PSBVTExPTkdfTUFYKSB7CisJCQlwa3RfZGV2LT5uZXh0X3R4ID0ga3RpbWVfYWRkX25zKGt0aW1lX25vdygpLCBVTE9OR19NQVgpOworCQkJcmV0dXJuOwogCQl9CiAJfQogCkBAIC0zMzgzLDQ3ICszNDA3LDMyIEBACiAJfQogCiAJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShvZGV2LCBxdWV1ZV9tYXApOwotCWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgfHwKLQkgICAgbmV0aWZfdHhfcXVldWVfZnJvemVuKHR4cSkgfHwKLQkgICAgbmVlZF9yZXNjaGVkKCkpIHsKLQkJaWRsZV9zdGFydCA9IGdldEN1clVzKCk7Ci0KLQkJaWYgKCFuZXRpZl9ydW5uaW5nKG9kZXYpKSB7CisJLyogRGlkIHdlIHNhdHVyYXRlIHRoZSBxdWV1ZSBhbHJlYWR5PyAqLworCWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgfHwgbmV0aWZfdHhfcXVldWVfZnJvemVuKHR4cSkpIHsKKwkJLyogSWYgZGV2aWNlIGlzIGRvd24sIHRoZW4gYWxsIHF1ZXVlcyBhcmUgcGVybW5hbnRseSBmcm96ZW4gKi8KKwkJaWYgKG5ldGlmX3J1bm5pbmcob2RldikpCisJCQlpZGxlKHBrdF9kZXYpOworCQllbHNlCiAJCQlwa3RnZW5fc3RvcF9kZXZpY2UocGt0X2Rldik7Ci0JCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKLQkJCXBrdF9kZXYtPnNrYiA9IE5VTEw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAobmVlZF9yZXNjaGVkKCkpCi0JCQlzY2hlZHVsZSgpOwotCi0JCXBrdF9kZXYtPmlkbGVfYWNjICs9IGdldEN1clVzKCkgLSBpZGxlX3N0YXJ0OwotCi0JCWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgfHwKLQkJICAgIG5ldGlmX3R4X3F1ZXVlX2Zyb3plbih0eHEpKSB7Ci0JCQlwa3RfZGV2LT5uZXh0X3R4X3VzID0gZ2V0Q3VyVXMoKTsJLyogVE9ETyAqLwotCQkJcGt0X2Rldi0+bmV4dF90eF9ucyA9IDA7Ci0JCQlnb3RvIG91dDsJLyogVHJ5IHRoZSBuZXh0IGludGVyZmFjZSAqLwotCQl9CisJCXJldHVybjsKIAl9CiAKLQlpZiAocGt0X2Rldi0+bGFzdF9vayB8fCAhcGt0X2Rldi0+c2tiKSB7Ci0JCWlmICgoKytwa3RfZGV2LT5jbG9uZV9jb3VudCA+PSBwa3RfZGV2LT5jbG9uZV9za2IpCi0JCSAgICB8fCAoIXBrdF9kZXYtPnNrYikpIHsKLQkJCS8qIGJ1aWxkIGEgbmV3IHBrdCAqLwotCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CisJaWYgKCFwa3RfZGV2LT5za2IgfHwgKHBrdF9kZXYtPmxhc3Rfb2sgJiYKKwkJCSAgICAgICsrcGt0X2Rldi0+Y2xvbmVfY291bnQgPj0gcGt0X2Rldi0+Y2xvbmVfc2tiKSkgeworCQkvKiBidWlsZCBhIG5ldyBwa3QgKi8KKwkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CiAKLQkJCXBrdF9kZXYtPnNrYiA9IGZpbGxfcGFja2V0KG9kZXYsIHBrdF9kZXYpOwotCQkJaWYgKHBrdF9kZXYtPnNrYiA9PSBOVUxMKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJwa3RnZW46IEVSUk9SOiBjb3VsZG4ndCAiCi0JCQkJICAgICAgICJhbGxvY2F0ZSBza2IgaW4gZmlsbF9wYWNrZXQuXG4iKTsKLQkJCQlzY2hlZHVsZSgpOwotCQkJCXBrdF9kZXYtPmNsb25lX2NvdW50LS07CS8qIGJhY2sgb3V0IGluY3JlbWVudCwgT09NICovCi0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlwa3RfZGV2LT5hbGxvY2F0ZWRfc2ticysrOwotCQkJcGt0X2Rldi0+Y2xvbmVfY291bnQgPSAwOwkvKiByZXNldCBjb3VudGVyICovCisJCXBrdF9kZXYtPnNrYiA9IGZpbGxfcGFja2V0KG9kZXYsIHBrdF9kZXYpOworCQlpZiAocGt0X2Rldi0+c2tiID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicGt0Z2VuOiBFUlJPUjogY291bGRuJ3QgIgorCQkJICAgICAgICJhbGxvY2F0ZSBza2IgaW4gZmlsbF9wYWNrZXQuXG4iKTsKKwkJCXNjaGVkdWxlKCk7CisJCQlwa3RfZGV2LT5jbG9uZV9jb3VudC0tOwkvKiBiYWNrIG91dCBpbmNyZW1lbnQsIE9PTSAqLworCQkJcmV0dXJuOwogCQl9CisKKwkJcGt0X2Rldi0+YWxsb2NhdGVkX3NrYnMrKzsKKwkJcGt0X2Rldi0+Y2xvbmVfY291bnQgPSAwOwkvKiByZXNldCBjb3VudGVyICovCiAJfQogCiAJLyogZmlsbF9wYWNrZXQoKSBtaWdodCBoYXZlIGNoYW5nZWQgdGhlIHF1ZXVlICovCkBAIC0zNDMxLDczICszNDQwLDUzIEBACiAJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShvZGV2LCBxdWV1ZV9tYXApOwogCiAJX19uZXRpZl90eF9sb2NrX2JoKHR4cSk7Ci0JaWYgKCFuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgJiYKLQkgICAgIW5ldGlmX3R4X3F1ZXVlX2Zyb3plbih0eHEpKSB7Ci0KKwlpZiAodW5saWtlbHkobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpIHx8IG5ldGlmX3R4X3F1ZXVlX2Zyb3plbih0eHEpKSkKKwkJcGt0X2Rldi0+bGFzdF9vayA9IDA7CisJZWxzZSB7CiAJCWF0b21pY19pbmMoJihwa3RfZGV2LT5za2ItPnVzZXJzKSk7Ci0JICAgICAgcmV0cnlfbm93OgorCisJcmV0cnlfbm93OgogCQlyZXQgPSAoKnhtaXQpKHBrdF9kZXYtPnNrYiwgb2Rldik7Ci0JCWlmIChsaWtlbHkocmV0ID09IE5FVERFVl9UWF9PSykpIHsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSBORVRERVZfVFhfT0s6CiAJCQl0eHFfdHJhbnNfdXBkYXRlKHR4cSk7CiAJCQlwa3RfZGV2LT5sYXN0X29rID0gMTsKIAkJCXBrdF9kZXYtPnNvZmFyKys7CiAJCQlwa3RfZGV2LT5zZXFfbnVtKys7CiAJCQlwa3RfZGV2LT50eF9ieXRlcyArPSBwa3RfZGV2LT5jdXJfcGt0X3NpemU7Ci0KLQkJfSBlbHNlIGlmIChyZXQgPT0gTkVUREVWX1RYX0xPQ0tFRAotCQkJICAgJiYgKG9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MTFRYKSkgeworCQkJYnJlYWs7CisJCWNhc2UgTkVUREVWX1RYX0xPQ0tFRDoKIAkJCWNwdV9yZWxheCgpOwogCQkJZ290byByZXRyeV9ub3c7Ci0JCX0gZWxzZSB7CS8qIFJldHJ5IGl0IG5leHQgdGltZSAqLwotCi0JCQlhdG9taWNfZGVjKCYocGt0X2Rldi0+c2tiLT51c2VycykpOwotCi0JCQlpZiAoZGVidWcgJiYgbmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0lORk8gInBrdGdlbjogSGFyZCB4bWl0IGVycm9yXG4iKTsKLQorCQlkZWZhdWx0OiAvKiBEcml2ZXJzIGFyZSBub3Qgc3VwcG9zZWQgdG8gcmV0dXJuIG90aGVyIHZhbHVlcyEgKi8KKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJcHJfaW5mbygicGt0Z2VuOiAlcyB4bWl0IGVycm9yOiAlZFxuIiwKKwkJCQkJb2Rldi0+bmFtZSwgcmV0KTsKIAkJCXBrdF9kZXYtPmVycm9ycysrOworCQkJLyogZmFsbHRocnUgKi8KKwkJY2FzZSBORVRERVZfVFhfQlVTWToKKwkJCS8qIFJldHJ5IGl0IG5leHQgdGltZSAqLworCQkJYXRvbWljX2RlYygmKHBrdF9kZXYtPnNrYi0+dXNlcnMpKTsKIAkJCXBrdF9kZXYtPmxhc3Rfb2sgPSAwOwogCQl9CiAKLQkJcGt0X2Rldi0+bmV4dF90eF91cyA9IGdldEN1clVzKCk7Ci0JCXBrdF9kZXYtPm5leHRfdHhfbnMgPSAwOwotCi0JCXBrdF9kZXYtPm5leHRfdHhfdXMgKz0gcGt0X2Rldi0+ZGVsYXlfdXM7Ci0JCXBrdF9kZXYtPm5leHRfdHhfbnMgKz0gcGt0X2Rldi0+ZGVsYXlfbnM7Ci0KLQkJaWYgKHBrdF9kZXYtPm5leHRfdHhfbnMgPiAxMDAwKSB7Ci0JCQlwa3RfZGV2LT5uZXh0X3R4X3VzKys7Ci0JCQlwa3RfZGV2LT5uZXh0X3R4X25zIC09IDEwMDA7Ci0JCX0KKwkJaWYgKHBrdF9kZXYtPmRlbGF5KQorCQkJcGt0X2Rldi0+bmV4dF90eCA9IGt0aW1lX2FkZF9ucyhrdGltZV9ub3coKSwKKwkJCQkJCQlwa3RfZGV2LT5kZWxheSk7CiAJfQotCi0JZWxzZSB7CQkJLyogUmV0cnkgaXQgbmV4dCB0aW1lICovCi0JCXBrdF9kZXYtPmxhc3Rfb2sgPSAwOwotCQlwa3RfZGV2LT5uZXh0X3R4X3VzID0gZ2V0Q3VyVXMoKTsJLyogVE9ETyAqLwotCQlwa3RfZGV2LT5uZXh0X3R4X25zID0gMDsKLQl9Ci0KIAlfX25ldGlmX3R4X3VubG9ja19iaCh0eHEpOwogCiAJLyogSWYgcGt0X2Rldi0+Y291bnQgaXMgemVybywgdGhlbiBydW4gZm9yZXZlciAqLwogCWlmICgocGt0X2Rldi0+Y291bnQgIT0gMCkgJiYgKHBrdF9kZXYtPnNvZmFyID49IHBrdF9kZXYtPmNvdW50KSkgewotCQlpZiAoYXRvbWljX3JlYWQoJihwa3RfZGV2LT5za2ItPnVzZXJzKSkgIT0gMSkgewotCQkJaWRsZV9zdGFydCA9IGdldEN1clVzKCk7Ci0JCQl3aGlsZSAoYXRvbWljX3JlYWQoJihwa3RfZGV2LT5za2ItPnVzZXJzKSkgIT0gMSkgewotCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJc2NoZWR1bGUoKTsKLQkJCX0KLQkJCXBrdF9kZXYtPmlkbGVfYWNjICs9IGdldEN1clVzKCkgLSBpZGxlX3N0YXJ0OworCQl3aGlsZSAoYXRvbWljX3JlYWQoJihwa3RfZGV2LT5za2ItPnVzZXJzKSkgIT0gMSkgeworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCWJyZWFrOworCQkJaWRsZShwa3RfZGV2KTsKIAkJfQogCiAJCS8qIERvbmUgd2l0aCB0aGlzICovCiAJCXBrdGdlbl9zdG9wX2RldmljZShwa3RfZGV2KTsKLQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7Ci0JCXBrdF9kZXYtPnNrYiA9IE5VTEw7CiAJfQotb3V0OjsKIH0KIAogLyoKQEAgLTM1MTYsNyArMzUwNSw4IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdC0+cXVldWUpOwogCWNvbXBsZXRlKCZ0LT5zdGFydF9kb25lKTsKIAotCXByX2RlYnVnKCJwa3RnZW46IHN0YXJ0aW5nIHBrdGdlbi8lZDogIHBpZD0lZFxuIiwgY3B1LCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CisJcHJfZGVidWcoInBrdGdlbjogc3RhcnRpbmcgcGt0Z2VuLyVkOiAgcGlkPSVkXG4iLAorCQkgY3B1LCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCkBAIC0zNjUxLDggKzM2NDEsNyBAQAogCXBrdF9kZXYtPm1heF9wa3Rfc2l6ZSA9IEVUSF9aTEVOOwogCXBrdF9kZXYtPm5mcmFncyA9IDA7CiAJcGt0X2Rldi0+Y2xvbmVfc2tiID0gcGdfY2xvbmVfc2tiX2Q7Ci0JcGt0X2Rldi0+ZGVsYXlfdXMgPSBwZ19kZWxheV9kIC8gMTAwMDsKLQlwa3RfZGV2LT5kZWxheV9ucyA9IHBnX2RlbGF5X2QgJSAxMDAwOworCXBrdF9kZXYtPmRlbGF5ID0gcGdfZGVsYXlfZDsKIAlwa3RfZGV2LT5jb3VudCA9IHBnX2NvdW50X2Q7CiAJcGt0X2Rldi0+c29mYXIgPSAwOwogCXBrdF9kZXYtPnVkcF9zcmNfbWluID0gOTsJLyogc2luayBwb3J0ICovCkBAIC0zODY0LDEwICszODUzLDE1IEBACiBtb2R1bGVfaW5pdChwZ19pbml0KTsKIG1vZHVsZV9leGl0KHBnX2NsZWFudXApOwogCi1NT0RVTEVfQVVUSE9SKCJSb2JlcnQgT2xzc29uIDxyb2JlcnQub2xzc29uQGl0cy51dS5zZSIpOworTU9EVUxFX0FVVEhPUigiUm9iZXJ0IE9sc3NvbiA8cm9iZXJ0Lm9sc3NvbkBpdHMudXUuc2U+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBhY2tldCBHZW5lcmF0b3IgdG9vbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oVkVSU0lPTik7CiBtb2R1bGVfcGFyYW0ocGdfY291bnRfZCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocGdfY291bnRfZCwgIkRlZmF1bHQgbnVtYmVyIG9mIHBhY2tldHMgdG8gaW5qZWN0Iik7CiBtb2R1bGVfcGFyYW0ocGdfZGVsYXlfZCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocGdfZGVsYXlfZCwgIkRlZmF1bHQgZGVsYXkgYmV0d2VlbiBwYWNrZXRzIChuYW5vc2Vjb25kcykiKTsKIG1vZHVsZV9wYXJhbShwZ19jbG9uZV9za2JfZCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocGdfY2xvbmVfc2tiX2QsICJEZWZhdWx0IG51bWJlciBvZiBjb3BpZXMgb2YgdGhlIHNhbWUgcGFja2V0Iik7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRlYnVnZ2luZyBvZiBwa3RnZW4gbW9kdWxlIik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IGQ3ODAzMGYuLmViNDI4NzMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FkZHIuaD4KLSNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTUyLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L2ZpYl9ydWxlcy5oPgogI2luY2x1ZGUgPG5ldC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogCiBzdHJ1Y3QgcnRubF9saW5rCiB7CkBAIC02MDYsNyArNjA2LDYgQEAKIAkJCSAgICBpbnQgdHlwZSwgdTMyIHBpZCwgdTMyIHNlcSwgdTMyIGNoYW5nZSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCXN0cnVjdCBpZmluZm9tc2cgKmlmbTsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CkBAIC02MzcsOSArNjM2LDggQEAKIAlpZiAoZGV2LT5tYXN0ZXIpCiAJCU5MQV9QVVRfVTMyKHNrYiwgSUZMQV9NQVNURVIsIGRldi0+bWFzdGVyLT5pZmluZGV4KTsKIAotCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKLQlpZiAodHhxLT5xZGlzY19zbGVlcGluZykKLQkJTkxBX1BVVF9TVFJJTkcoc2tiLCBJRkxBX1FESVNDLCB0eHEtPnFkaXNjX3NsZWVwaW5nLT5vcHMtPmlkKTsKKwlpZiAoZGV2LT5xZGlzYykKKwkJTkxBX1BVVF9TVFJJTkcoc2tiLCBJRkxBX1FESVNDLCBkZXYtPnFkaXNjLT5vcHMtPmlkKTsKIAogCWlmIChkZXYtPmlmYWxpYXMpCiAJCU5MQV9QVVRfU1RSSU5HKHNrYiwgSUZMQV9JRkFMSUFTLCBkZXYtPmlmYWxpYXMpOwpAQCAtNzI1LDI1ICs3MjMsNiBAQAogCVtJRkxBX0lORk9fREFUQV0JPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBuZXQgKmdldF9uZXRfbnNfYnlfcGlkKHBpZF90IHBpZCkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKLQlzdHJ1Y3QgbmV0ICpuZXQ7Ci0KLQkvKiBMb29rdXAgdGhlIG5ldHdvcmsgbmFtZXNwYWNlICovCi0JbmV0ID0gRVJSX1BUUigtRVNSQ0gpOwotCXJjdV9yZWFkX2xvY2soKTsKLQl0c2sgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOwotCWlmICh0c2spIHsKLQkJc3RydWN0IG5zcHJveHkgKm5zcHJveHk7Ci0JCW5zcHJveHkgPSB0YXNrX25zcHJveHkodHNrKTsKLQkJaWYgKG5zcHJveHkpCi0JCQluZXQgPSBnZXRfbmV0KG5zcHJveHktPm5ldF9ucyk7Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiBuZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgdmFsaWRhdGVfbGlua21zZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdKQogewogCWlmIChkZXYpIHsKQEAgLTk5MywxMiArOTcyLDIwIEBACiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXVuc2lnbmVkIGludCBudW1fcXVldWVzID0gMTsKKwl1bnNpZ25lZCBpbnQgcmVhbF9udW1fcXVldWVzID0gMTsKIAorCWlmIChvcHMtPmdldF90eF9xdWV1ZXMpIHsKKwkJZXJyID0gb3BzLT5nZXRfdHhfcXVldWVzKG5ldCwgdGIsICZudW1fcXVldWVzLCAmcmVhbF9udW1fcXVldWVzKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyOworCX0KIAllcnIgPSAtRU5PTUVNOwotCWRldiA9IGFsbG9jX25ldGRldihvcHMtPnByaXZfc2l6ZSwgaWZuYW1lLCBvcHMtPnNldHVwKTsKKwlkZXYgPSBhbGxvY19uZXRkZXZfbXEob3BzLT5wcml2X3NpemUsIGlmbmFtZSwgb3BzLT5zZXR1cCwgbnVtX3F1ZXVlcyk7CiAJaWYgKCFkZXYpCiAJCWdvdG8gZXJyOwogCisJZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSByZWFsX251bV9xdWV1ZXM7CiAJaWYgKHN0cmNocihkZXYtPm5hbWUsICclJykpIHsKIAkJZXJyID0gZGV2X2FsbG9jX25hbWUoZGV2LCBkZXYtPm5hbWUpOwogCQlpZiAoZXJyIDwgMCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggOWUwNTk3ZC4uODBhOTYxNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTU1OSw5ICs1NTksNiBAQAogI2VuZGlmCiAjZW5kaWYKIAluZXctPnZsYW5fdGNpCQk9IG9sZC0+dmxhbl90Y2k7Ci0jaWYgZGVmaW5lZChDT05GSUdfTUFDODAyMTEpIHx8IGRlZmluZWQoQ09ORklHX01BQzgwMjExX01PRFVMRSkKLQluZXctPmRvX25vdF9lbmNyeXB0CT0gb2xkLT5kb19ub3RfZW5jcnlwdDsKLSNlbmRpZgogCiAJc2tiX2NvcHlfc2VjbWFyayhuZXcsIG9sZCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggNzYzMzQyMi4uMzBkNTQ0NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAgKiBzdHJpbmdzIGJ1aWxkLXRpbWUsIHNvIHRoYXQgcnVudGltZSBpbml0aWFsaXphdGlvbiBvZiBzb2NrZXQKICAqIGxvY2tzIGlzIGZhc3QpOgogICovCi1zdGF0aWMgY29uc3QgY2hhciAqYWZfZmFtaWx5X2tleV9zdHJpbmdzW0FGX01BWCsxXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBhZl9mYW1pbHlfa2V5X3N0cmluZ3NbQUZfTUFYKzFdID0gewogICAic2tfbG9jay1BRl9VTlNQRUMiLCAic2tfbG9jay1BRl9VTklYIiAgICAgLCAic2tfbG9jay1BRl9JTkVUIiAgICAgLAogICAic2tfbG9jay1BRl9BWDI1IiAgLCAic2tfbG9jay1BRl9JUFgiICAgICAgLCAic2tfbG9jay1BRl9BUFBMRVRBTEsiLAogICAic2tfbG9jay1BRl9ORVRST00iLCAic2tfbG9jay1BRl9CUklER0UiICAgLCAic2tfbG9jay1BRl9BVE1QVkMiICAgLApAQCAtMTU4LDcgKzE1OCw3IEBACiAgICJza19sb2NrLUFGX0lFRUU4MDIxNTQiLAogICAic2tfbG9jay1BRl9NQVgiCiB9Owotc3RhdGljIGNvbnN0IGNoYXIgKmFmX2ZhbWlseV9zbG9ja19rZXlfc3RyaW5nc1tBRl9NQVgrMV0gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYWZfZmFtaWx5X3Nsb2NrX2tleV9zdHJpbmdzW0FGX01BWCsxXSA9IHsKICAgInNsb2NrLUFGX1VOU1BFQyIsICJzbG9jay1BRl9VTklYIiAgICAgLCAic2xvY2stQUZfSU5FVCIgICAgICwKICAgInNsb2NrLUFGX0FYMjUiICAsICJzbG9jay1BRl9JUFgiICAgICAgLCAic2xvY2stQUZfQVBQTEVUQUxLIiwKICAgInNsb2NrLUFGX05FVFJPTSIsICJzbG9jay1BRl9CUklER0UiICAgLCAic2xvY2stQUZfQVRNUFZDIiAgICwKQEAgLTE3NCw3ICsxNzQsNyBAQAogICAic2xvY2stQUZfSUVFRTgwMjE1NCIsCiAgICJzbG9jay1BRl9NQVgiCiB9Owotc3RhdGljIGNvbnN0IGNoYXIgKmFmX2ZhbWlseV9jbG9ja19rZXlfc3RyaW5nc1tBRl9NQVgrMV0gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYWZfZmFtaWx5X2Nsb2NrX2tleV9zdHJpbmdzW0FGX01BWCsxXSA9IHsKICAgImNsb2NrLUFGX1VOU1BFQyIsICJjbG9jay1BRl9VTklYIiAgICAgLCAiY2xvY2stQUZfSU5FVCIgICAgICwKICAgImNsb2NrLUFGX0FYMjUiICAsICJjbG9jay1BRl9JUFgiICAgICAgLCAiY2xvY2stQUZfQVBQTEVUQUxLIiwKICAgImNsb2NrLUFGX05FVFJPTSIsICJjbG9jay1BRl9CUklER0UiICAgLCAiY2xvY2stQUZfQVRNUFZDIiAgICwKQEAgLTQ4Miw2ICs0ODIsOCBAQAogCQlzay0+c2tfcmV1c2UgPSB2YWxib29sOwogCQlicmVhazsKIAljYXNlIFNPX1RZUEU6CisJY2FzZSBTT19QUk9UT0NPTDoKKwljYXNlIFNPX0RPTUFJTjoKIAljYXNlIFNPX0VSUk9SOgogCQlyZXQgPSAtRU5PUFJPVE9PUFQ7CiAJCWJyZWFrOwpAQCAtNzY0LDYgKzc2NiwxNCBAQAogCQl2LnZhbCA9IHNrLT5za190eXBlOwogCQlicmVhazsKIAorCWNhc2UgU09fUFJPVE9DT0w6CisJCXYudmFsID0gc2stPnNrX3Byb3RvY29sOworCQlicmVhazsKKworCWNhc2UgU09fRE9NQUlOOgorCQl2LnZhbCA9IHNrLT5za19mYW1pbHk7CisJCWJyZWFrOworCiAJY2FzZSBTT19FUlJPUjoKIAkJdi52YWwgPSAtc29ja19lcnJvcihzayk7CiAJCWlmICh2LnZhbCA9PSAwKQpkaWZmIC0tZ2l0IGEvbmV0L2RjYi9kY2JubC5jIGIvbmV0L2RjYi9kY2JubC5jCmluZGV4IDgzNzk0OTYuLmUwODc5YmYgMTAwNjQ0Ci0tLSBhL25ldC9kY2IvZGNibmwuYworKysgYi9uZXQvZGNiL2RjYm5sLmMKQEAgLTY0LDYgKzY0LDcgQEAKIAlbRENCX0FUVFJfQ0FQXSAgICAgICAgID0gey50eXBlID0gTkxBX05FU1RFRH0sCiAJW0RDQl9BVFRSX1BGQ19TVEFURV0gICA9IHsudHlwZSA9IE5MQV9VOH0sCiAJW0RDQl9BVFRSX0JDTl0gICAgICAgICA9IHsudHlwZSA9IE5MQV9ORVNURUR9LAorCVtEQ0JfQVRUUl9BUFBdICAgICAgICAgPSB7LnR5cGUgPSBOTEFfTkVTVEVEfSwKIH07CiAKIC8qIERDQiBwcmlvcml0eSBmbG93IGNvbnRyb2wgdG8gVXNlciBQcmlvcml0eSBuZXN0ZWQgYXR0cmlidXRlcyAqLwpAQCAtMTU4LDYgKzE1OSwxMyBAQAogCVtEQ0JfQkNOX0FUVFJfQUxMXSAgICAgICAgICA9IHsudHlwZSA9IE5MQV9GTEFHfSwKIH07CiAKKy8qIERDQiBBUFAgbmVzdGVkIGF0dHJpYnV0ZXMuICovCitzdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kgZGNibmxfYXBwX25lc3RbRENCX0FQUF9BVFRSX01BWCArIDFdID0geworCVtEQ0JfQVBQX0FUVFJfSURUWVBFXSAgICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCisJW0RDQl9BUFBfQVRUUl9JRF0gICAgICAgICAgID0gey50eXBlID0gTkxBX1UxNn0sCisJW0RDQl9BUFBfQVRUUl9QUklPUklUWV0gICAgID0gey50eXBlID0gTkxBX1U4fSwKK307CisKIC8qIHN0YW5kYXJkIG5ldGxpbmsgcmVwbHkgY2FsbCAqLwogc3RhdGljIGludCBkY2JubF9yZXBseSh1OCB2YWx1ZSwgdTggZXZlbnQsIHU4IGNtZCwgdTggYXR0ciwgdTMyIHBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHNlcSwgdTE2IGZsYWdzKQpAQCAtNTM2LDYgKzU0NCwxMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGRjYm5sX2dldGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgbmxhdHRyICoqdGIsCisgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcGlkLCB1MzIgc2VxLCB1MTYgZmxhZ3MpCit7CisJc3RydWN0IHNrX2J1ZmYgKmRjYm5sX3NrYjsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwlzdHJ1Y3QgZGNibXNnICpkY2I7CisJc3RydWN0IG5sYXR0ciAqYXBwX25lc3Q7CisJc3RydWN0IG5sYXR0ciAqYXBwX3RiW0RDQl9BUFBfQVRUUl9NQVggKyAxXTsKKwl1MTYgaWQ7CisJdTggdXAsIGlkdHlwZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmICghdGJbRENCX0FUVFJfQVBQXSB8fCAhbmV0ZGV2LT5kY2JubF9vcHMtPmdldGFwcCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBubGFfcGFyc2VfbmVzdGVkKGFwcF90YiwgRENCX0FQUF9BVFRSX01BWCwgdGJbRENCX0FUVFJfQVBQXSwKKwkgICAgICAgICAgICAgICAgICAgICAgIGRjYm5sX2FwcF9uZXN0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IC1FSU5WQUw7CisJLyogYWxsIG11c3QgYmUgbm9uLW51bGwgKi8KKwlpZiAoKCFhcHBfdGJbRENCX0FQUF9BVFRSX0lEVFlQRV0pIHx8CisJICAgICghYXBwX3RiW0RDQl9BUFBfQVRUUl9JRF0pKQorCQlnb3RvIG91dDsKKworCS8qIGVpdGhlciBieSBldGggdHlwZSBvciBieSBzb2NrZXQgbnVtYmVyICovCisJaWR0eXBlID0gbmxhX2dldF91OChhcHBfdGJbRENCX0FQUF9BVFRSX0lEVFlQRV0pOworCWlmICgoaWR0eXBlICE9IERDQl9BUFBfSURUWVBFX0VUSFRZUEUpICYmCisJICAgIChpZHR5cGUgIT0gRENCX0FQUF9JRFRZUEVfUE9SVE5VTSkpCisJCWdvdG8gb3V0OworCisJaWQgPSBubGFfZ2V0X3UxNihhcHBfdGJbRENCX0FQUF9BVFRSX0lEXSk7CisJdXAgPSBuZXRkZXYtPmRjYm5sX29wcy0+Z2V0YXBwKG5ldGRldiwgaWR0eXBlLCBpZCk7CisKKwkvKiBzZW5kIHRoaXMgYmFjayAqLworCWRjYm5sX3NrYiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghZGNibmxfc2tiKQorCQlnb3RvIG91dDsKKworCW5saCA9IE5MTVNHX05FVyhkY2JubF9za2IsIHBpZCwgc2VxLCBSVE1fR0VURENCLCBzaXplb2YoKmRjYiksIGZsYWdzKTsKKwlkY2IgPSBOTE1TR19EQVRBKG5saCk7CisJZGNiLT5kY2JfZmFtaWx5ID0gQUZfVU5TUEVDOworCWRjYi0+Y21kID0gRENCX0NNRF9HQVBQOworCisJYXBwX25lc3QgPSBubGFfbmVzdF9zdGFydChkY2JubF9za2IsIERDQl9BVFRSX0FQUCk7CisJcmV0ID0gbmxhX3B1dF91OChkY2JubF9za2IsIERDQl9BUFBfQVRUUl9JRFRZUEUsIGlkdHlwZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfY2FuY2VsOworCisJcmV0ID0gbmxhX3B1dF91MTYoZGNibmxfc2tiLCBEQ0JfQVBQX0FUVFJfSUQsIGlkKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9jYW5jZWw7CisKKwlyZXQgPSBubGFfcHV0X3U4KGRjYm5sX3NrYiwgRENCX0FQUF9BVFRSX1BSSU9SSVRZLCB1cCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfY2FuY2VsOworCisJbmxhX25lc3RfZW5kKGRjYm5sX3NrYiwgYXBwX25lc3QpOworCW5sbXNnX2VuZChkY2JubF9za2IsIG5saCk7CisKKwlyZXQgPSBydG5sX3VuaWNhc3QoZGNibmxfc2tiLCAmaW5pdF9uZXQsIHBpZCk7CisJaWYgKHJldCkKKwkJZ290byBubG1zZ19mYWlsdXJlOworCisJZ290byBvdXQ7CisKK291dF9jYW5jZWw6CisJbmxhX25lc3RfY2FuY2VsKGRjYm5sX3NrYiwgYXBwX25lc3QpOworbmxtc2dfZmFpbHVyZToKKwlrZnJlZV9za2IoZGNibmxfc2tiKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRjYm5sX3NldGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgbmxhdHRyICoqdGIsCisgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcGlkLCB1MzIgc2VxLCB1MTYgZmxhZ3MpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJdTE2IGlkOworCXU4IHVwLCBpZHR5cGU7CisJc3RydWN0IG5sYXR0ciAqYXBwX3RiW0RDQl9BUFBfQVRUUl9NQVggKyAxXTsKKworCWlmICghdGJbRENCX0FUVFJfQVBQXSB8fCAhbmV0ZGV2LT5kY2JubF9vcHMtPnNldGFwcCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBubGFfcGFyc2VfbmVzdGVkKGFwcF90YiwgRENCX0FQUF9BVFRSX01BWCwgdGJbRENCX0FUVFJfQVBQXSwKKwkgICAgICAgICAgICAgICAgICAgICAgIGRjYm5sX2FwcF9uZXN0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IC1FSU5WQUw7CisJLyogYWxsIG11c3QgYmUgbm9uLW51bGwgKi8KKwlpZiAoKCFhcHBfdGJbRENCX0FQUF9BVFRSX0lEVFlQRV0pIHx8CisJICAgICghYXBwX3RiW0RDQl9BUFBfQVRUUl9JRF0pIHx8CisJICAgICghYXBwX3RiW0RDQl9BUFBfQVRUUl9QUklPUklUWV0pKQorCQlnb3RvIG91dDsKKworCS8qIGVpdGhlciBieSBldGggdHlwZSBvciBieSBzb2NrZXQgbnVtYmVyICovCisJaWR0eXBlID0gbmxhX2dldF91OChhcHBfdGJbRENCX0FQUF9BVFRSX0lEVFlQRV0pOworCWlmICgoaWR0eXBlICE9IERDQl9BUFBfSURUWVBFX0VUSFRZUEUpICYmCisJICAgIChpZHR5cGUgIT0gRENCX0FQUF9JRFRZUEVfUE9SVE5VTSkpCisJCWdvdG8gb3V0OworCisJaWQgPSBubGFfZ2V0X3UxNihhcHBfdGJbRENCX0FQUF9BVFRSX0lEXSk7CisJdXAgPSBubGFfZ2V0X3U4KGFwcF90YltEQ0JfQVBQX0FUVFJfUFJJT1JJVFldKTsKKworCXJldCA9IGRjYm5sX3JlcGx5KG5ldGRldi0+ZGNibmxfb3BzLT5zZXRhcHAobmV0ZGV2LCBpZHR5cGUsIGlkLCB1cCksCisJICAgICAgICAgICAgICAgICAgUlRNX1NFVERDQiwgRENCX0NNRF9TQVBQLCBEQ0JfQVRUUl9BUFAsCisJICAgICAgICAgICAgICAgICAgcGlkLCBzZXEsIGZsYWdzKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IF9fZGNibmxfcGdfZ2V0Y2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBubGF0dHIgKip0YiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHBpZCwgdTMyIHNlcSwgdTE2IGZsYWdzLCBpbnQgZGlyKQogewpAQCAtMTA5Myw2ICsxMjE1LDE0IEBACiAJCXJldCA9IGRjYm5sX2Jjbl9zZXRjZmcobmV0ZGV2LCB0YiwgcGlkLCBubGgtPm5sbXNnX3NlcSwKIAkJICAgICAgICAgICAgICAgICAgICAgICBubGgtPm5sbXNnX2ZsYWdzKTsKIAkJZ290byBvdXQ7CisJY2FzZSBEQ0JfQ01EX0dBUFA6CisJCXJldCA9IGRjYm5sX2dldGFwcChuZXRkZXYsIHRiLCBwaWQsIG5saC0+bmxtc2dfc2VxLAorCQkgICAgICAgICAgICAgICAgICAgbmxoLT5ubG1zZ19mbGFncyk7CisJCWdvdG8gb3V0OworCWNhc2UgRENCX0NNRF9TQVBQOgorCQlyZXQgPSBkY2JubF9zZXRhcHAobmV0ZGV2LCB0YiwgcGlkLCBubGgtPm5sbXNnX3NlcSwKKwkJICAgICAgICAgICAgICAgICAgIG5saC0+bmxtc2dfZmxhZ3MpOworCQlnb3RvIG91dDsKIAlkZWZhdWx0OgogCQlnb3RvIGVycm91dDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYwppbmRleCBhMjdiN2Y0Li5mNTk2Y2UxIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNpZmRlZiBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRwogc3RhdGljIGNvbnN0IGNoYXIgKmNjaWQzX3R4X3N0YXRlX25hbWUoZW51bSBjY2lkM19oY190eF9zdGF0ZXMgc3RhdGUpCiB7Ci0Jc3RhdGljIGNoYXIgKmNjaWQzX3N0YXRlX25hbWVzW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNjaWQzX3N0YXRlX25hbWVzW10gPSB7CiAJW1RGUkNfU1NUQVRFX05PX1NFTlRdICA9ICJOT19TRU5UIiwKIAlbVEZSQ19TU1RBVEVfTk9fRkJBQ0tdID0gIk5PX0ZCQUNLIiwKIAlbVEZSQ19TU1RBVEVfRkJBQ0tdICAgID0gIkZCQUNLIiwKQEAgLTY0Niw3ICs2NDYsNyBAQAogI2lmZGVmIENPTkZJR19JUF9EQ0NQX0NDSUQzX0RFQlVHCiBzdGF0aWMgY29uc3QgY2hhciAqY2NpZDNfcnhfc3RhdGVfbmFtZShlbnVtIGNjaWQzX2hjX3J4X3N0YXRlcyBzdGF0ZSkKIHsKLQlzdGF0aWMgY2hhciAqY2NpZDNfcnhfc3RhdGVfbmFtZXNbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgY2NpZDNfcnhfc3RhdGVfbmFtZXNbXSA9IHsKIAlbVEZSQ19SU1RBVEVfTk9fREFUQV0gPSAiTk9fREFUQSIsCiAJW1RGUkNfUlNUQVRFX0RBVEFdICAgID0gIkRBVEEiLAogCVtURlJDX1JTVEFURV9URVJNXSAgICA9ICJURVJNIiwKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2ZlYXQuYyBiL25ldC9kY2NwL2ZlYXQuYwppbmRleCBiMDQxNjBhLi45NzJiOGRjIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9mZWF0LmMKKysrIGIvbmV0L2RjY3AvZmVhdC5jCkBAIC0yMTMsNyArMjEzLDcgQEAKICAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF9mbmFtZShjb25zdCB1OCBmZWF0KQogewotCXN0YXRpYyBjb25zdCBjaGFyICpmZWF0dXJlX25hbWVzW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGZlYXR1cmVfbmFtZXNbXSA9IHsKIAkJW0RDQ1BGX1JFU0VSVkVEXQk9ICJSZXNlcnZlZCIsCiAJCVtEQ0NQRl9DQ0lEXQkJPSAiQ0NJRCIsCiAJCVtEQ0NQRl9TSE9SVF9TRVFOT1NdCT0gIkFsbG93IFNob3J0IFNlcW5vcyIsCkBAIC0yMzYsOCArMjM2LDkgQEAKIAlyZXR1cm4gZmVhdHVyZV9uYW1lc1tmZWF0XTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF9zbmFtZVtdID0geyAiREVGQVVMVCIsICJJTklUSUFMSVNJTkciLCAiQ0hBTkdJTkciLAotCQkJCQkgIlVOU1RBQkxFIiwgIlNUQUJMRSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBkY2NwX2ZlYXRfc25hbWVbXSA9IHsKKwkiREVGQVVMVCIsICJJTklUSUFMSVNJTkciLCAiQ0hBTkdJTkciLCAiVU5TVEFCTEUiLCAiU1RBQkxFIiwKK307CiAKICNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwogc3RhdGljIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF9vbmFtZShjb25zdCB1OCBvcHQpCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pcHY0LmMgYi9uZXQvZGNjcC9pcHY0LmMKaW5kZXggYTBhMzZjOS4uZDAxYzAwZCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvaXB2NC5jCisrKyBiL25ldC9kY2NwL2lwdjQuYwpAQCAtODgwLDcgKzg4MCw3IEBACiAJZ290byBkaXNjYXJkX2l0OwogfQogCi1zdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjRfYWZfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgZGNjcF9pcHY0X2FmX29wcyA9IHsKIAkucXVldWVfeG1pdAkgICA9IGlwX3F1ZXVlX3htaXQsCiAJLnNlbmRfY2hlY2sJICAgPSBkY2NwX3Y0X3NlbmRfY2hlY2ssCiAJLnJlYnVpbGRfaGVhZGVyCSAgID0gaW5ldF9za19yZWJ1aWxkX2hlYWRlciwKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCAzZTcwZmFhLi42NGYwMTFjIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC0zNSw4ICszNSw4IEBACiAKIC8qIFRoZSBwZXItbmV0IGRjY3AudjZfY3RsX3NrIGlzIHVzZWQgZm9yIHNlbmRpbmcgUlNUcyBhbmQgQUNLcyAqLwogCi1zdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjZfbWFwcGVkOwotc3RhdGljIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgZGNjcF9pcHY2X2FmX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGRjY3BfaXB2Nl9tYXBwZWQ7CitzdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjZfYWZfb3BzOwogCiBzdGF0aWMgdm9pZCBkY2NwX3Y2X2hhc2goc3RydWN0IHNvY2sgKnNrKQogewpAQCAtMTA1NSw3ICsxMDU1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjZfYWZfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgZGNjcF9pcHY2X2FmX29wcyA9IHsKIAkucXVldWVfeG1pdAkgICA9IGluZXQ2X2Nza194bWl0LAogCS5zZW5kX2NoZWNrCSAgID0gZGNjcF92Nl9zZW5kX2NoZWNrLAogCS5yZWJ1aWxkX2hlYWRlcgkgICA9IGluZXQ2X3NrX3JlYnVpbGRfaGVhZGVyLApAQCAtMTA3Niw3ICsxMDc2LDcgQEAKIC8qCiAgKglEQ0NQIG92ZXIgSVB2NCB2aWEgSU5FVDYgQVBJCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGRjY3BfaXB2Nl9tYXBwZWQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjZfbWFwcGVkID0gewogCS5xdWV1ZV94bWl0CSAgID0gaXBfcXVldWVfeG1pdCwKIAkuc2VuZF9jaGVjawkgICA9IGRjY3BfdjRfc2VuZF9jaGVjaywKIAkucmVidWlsZF9oZWFkZXIJICAgPSBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyLApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvdG8uYyBiL25ldC9kY2NwL3Byb3RvLmMKaW5kZXggMWJjYTkyMC4uOTIzZGIwNiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvdG8uYworKysgYi9uZXQvZGNjcC9wcm90by5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAogY29uc3QgY2hhciAqZGNjcF9wYWNrZXRfbmFtZShjb25zdCBpbnQgdHlwZSkKIHsKLQlzdGF0aWMgY29uc3QgY2hhciAqZGNjcF9wYWNrZXRfbmFtZXNbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZGNjcF9wYWNrZXRfbmFtZXNbXSA9IHsKIAkJW0RDQ1BfUEtUX1JFUVVFU1RdICA9ICJSRVFVRVNUIiwKIAkJW0RDQ1BfUEtUX1JFU1BPTlNFXSA9ICJSRVNQT05TRSIsCiAJCVtEQ0NQX1BLVF9EQVRBXQkgICAgPSAiREFUQSIsCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogY29uc3QgY2hhciAqZGNjcF9zdGF0ZV9uYW1lKGNvbnN0IGludCBzdGF0ZSkKIHsKLQlzdGF0aWMgY2hhciAqZGNjcF9zdGF0ZV9uYW1lc1tdID0geworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBkY2NwX3N0YXRlX25hbWVzW10gPSB7CiAJW0RDQ1BfT1BFTl0JCT0gIk9QRU4iLAogCVtEQ0NQX1JFUVVFU1RJTkddCT0gIlJFUVVFU1RJTkciLAogCVtEQ0NQX1BBUlRPUEVOXQkJPSAiUEFSVE9QRU4iLApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9uZWlnaC5jIGIvbmV0L2RlY25ldC9kbl9uZWlnaC5jCmluZGV4IDkyMzc4NmIuLjc5NGI1YmYgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fbmVpZ2guYworKysgYi9uZXQvZGVjbmV0L2RuX25laWdoLmMKQEAgLTU5LDcgKzU5LDcgQEAKIC8qCiAgKiBGb3IgdGFsa2luZyB0byBicm9hZGNhc3QgZGV2aWNlczogRXRoZXJuZXQgJiBQUFAKICAqLwotc3RhdGljIHN0cnVjdCBuZWlnaF9vcHMgZG5fbG9uZ19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5laWdoX29wcyBkbl9sb25nX29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0RFQ25ldCwKIAkuZXJyb3JfcmVwb3J0ID0JCWRuX2xvbmdfZXJyb3JfcmVwb3J0LAogCS5vdXRwdXQgPQkJZG5fbG9uZ19vdXRwdXQsCkBAIC03MSw3ICs3MSw3IEBACiAvKgogICogRm9yIHRhbGtpbmcgdG8gcG9pbnRvcG9pbnQgYW5kIG11bHRpZHJvcCBkZXZpY2VzOiBERENNUCBhbmQgWC4yNQogICovCi1zdGF0aWMgc3RydWN0IG5laWdoX29wcyBkbl9zaG9ydF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5laWdoX29wcyBkbl9zaG9ydF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9ERUNuZXQsCiAJLmVycm9yX3JlcG9ydCA9CQlkbl9zaG9ydF9lcnJvcl9yZXBvcnQsCiAJLm91dHB1dCA9CQlkbl9zaG9ydF9vdXRwdXQsCkBAIC04Myw3ICs4Myw3IEBACiAvKgogICogRm9yIHRhbGtpbmcgdG8gREVDbmV0IHBoYXNlIElJSSBub2RlcwogICovCi1zdGF0aWMgc3RydWN0IG5laWdoX29wcyBkbl9waGFzZTNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBuZWlnaF9vcHMgZG5fcGhhc2UzX29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0RFQ25ldCwKIAkuZXJyb3JfcmVwb3J0ID0JCWRuX3Nob3J0X2Vycm9yX3JlcG9ydCwgLyogQ2FuIHVzZSBzaG9ydCB2ZXJzaW9uIGhlcmUgKi8KIAkub3V0cHV0ID0JCWRuX3BoYXNlM19vdXRwdXQsCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKaW5kZXggMWQ2Y2E4YS4uOTM4M2QzZSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwpAQCAtNzc0LDcgKzc3NCw3IEBACiAKIAlrZnJlZV9za2Ioc2tiKTsKIAotCXJldHVybiBORVRfUlhfQkFEOworCXJldHVybiBORVRfUlhfRFJPUDsKIH0KIAogc3RhdGljIGludCBkbl9ydF9zZXRfbmV4dF9ob3Aoc3RydWN0IGRuX3JvdXRlICpydCwgc3RydWN0IGRuX2ZpYl9yZXMgKnJlcykKZGlmZiAtLWdpdCBhL25ldC9kc2EvZHNhX3ByaXYuaCBiL25ldC9kc2EvZHNhX3ByaXYuaAppbmRleCA0MTA1NWYzLi40YjBlYTA1IDEwMDY0NAotLS0gYS9uZXQvZHNhL2RzYV9wcml2LmgKKysrIGIvbmV0L2RzYS9kc2FfcHJpdi5oCkBAIC0xNjksMTMgKzE2OSwxMyBAQAogCQkJCSAgICBpbnQgcG9ydCwgY2hhciAqbmFtZSk7CiAKIC8qIHRhZ19kc2EuYyAqLwotaW50IGRzYV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworbmV0ZGV2X3R4X3QgZHNhX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qIHRhZ19lZHNhLmMgKi8KLWludCBlZHNhX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CituZXRkZXZfdHhfdCBlZHNhX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qIHRhZ190cmFpbGVyLmMgKi8KLWludCB0cmFpbGVyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CituZXRkZXZfdHhfdCB0cmFpbGVyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19kc2EuYyBiL25ldC9kc2EvdGFnX2RzYS5jCmluZGV4IDhmYTI1YmEuLmNkZjJkMjggMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX2RzYS5jCisrKyBiL25ldC9kc2EvdGFnX2RzYS5jCkBAIC0xNSw3ICsxNSw3IEBACiAKICNkZWZpbmUgRFNBX0hMRU4JNAogCi1pbnQgZHNhX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IGRzYV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCAqZHNhX2hlYWRlcjsKZGlmZiAtLWdpdCBhL25ldC9kc2EvdGFnX2Vkc2EuYyBiL25ldC9kc2EvdGFnX2Vkc2EuYwppbmRleCA4MTU2MDdiLi44ZjUzOTQ4IDEwMDY0NAotLS0gYS9uZXQvZHNhL3RhZ19lZHNhLmMKKysrIGIvbmV0L2RzYS90YWdfZWRzYS5jCkBAIC0xNiw3ICsxNiw3IEBACiAjZGVmaW5lIERTQV9ITEVOCTQKICNkZWZpbmUgRURTQV9ITEVOCTgKIAotaW50IGVkc2FfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorbmV0ZGV2X3R4X3QgZWRzYV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCAqZWRzYV9oZWFkZXI7CmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ190cmFpbGVyLmMgYi9uZXQvZHNhL3RhZ190cmFpbGVyLmMKaW5kZXggMWMzZTMwYy4uYTg1YzgyOSAxMDA2NDQKLS0tIGEvbmV0L2RzYS90YWdfdHJhaWxlci5jCisrKyBiL25ldC9kc2EvdGFnX3RyYWlsZXIuYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgImRzYV9wcml2LmgiCiAKLWludCB0cmFpbGVyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IHRyYWlsZXJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7CmRpZmYgLS1naXQgYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwppbmRleCBmMGJiYzU3Li4wZTAyNTRmIDEwMDY0NAotLS0gYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCisrKyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKQEAgLTEwNzMsNyArMTA3Myw3IEBACiAJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CiAJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBlY19mcmFtZWhkcikpOwogCQluZXRpZl9yeChza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogCX0KIAogCXNrID0gZWNfbGlzdGVuaW5nX3NvY2tldChoZHItPnBvcnQsIGhkci0+c3JjX3N0biwgaGRyLT5zcmNfbmV0KTsKQEAgLTEwODQsNyArMTA4NCw3IEBACiAJCQkgICAgaGRyLT5wb3J0KSkKIAkJZ290byBkcm9wOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogCiBkcm9wOgogCWtmcmVlX3NrYihza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUgYi9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZQppbmRleCBmOTkzMzhhLi40MDY4YTlmIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZQorKysgYi9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLW9iai0kKENPTkZJR19JRUVFODAyMTU0KSArPQlubDgwMjE1NC5vIGFmXzgwMjE1NC5vCitvYmotJChDT05GSUdfSUVFRTgwMjE1NCkgKz0Jbmw4MDIxNTQubyBhZl84MDIxNTQubyB3cGFuLWNsYXNzLm8KIG5sODAyMTU0LXkJCTo9IG5ldGxpbmsubyBubF9wb2xpY3kubwogYWZfODAyMTU0LXkJCTo9IGFmX2llZWU4MDIxNTQubyByYXcubyBkZ3JhbS5vCiAKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L2FmX2llZWU4MDIxNTQuYyBiL25ldC9pZWVlODAyMTU0L2FmX2llZWU4MDIxNTQuYwppbmRleCBhZjY2MTgwLi5jZDk0OWQ1IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9hZl9pZWVlODAyMTU0LmMKKysrIGIvbmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5jCkBAIC0zNCw4ICszNCw4IEBACiAjaW5jbHVkZSA8bmV0L3RjcF9zdGF0ZXMuaD4KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4KIAotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0L2FmX2llZWU4MDIxNTQuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjE1NC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvYWZfaWVlZTgwMjE1NC5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0X25ldGRldi5oPgogCiAjaW5jbHVkZSAiYWY4MDIxNTQuaCIKIApAQCAtMTQ3LDkgKzE0Nyw3IEBACiAJZGV2X2xvYWQoc29ja19uZXQoc2spLCBpZnIuaWZyX25hbWUpOwogCWRldiA9IGRldl9nZXRfYnlfbmFtZShzb2NrX25ldChzayksIGlmci5pZnJfbmFtZSk7CiAKLQlpZiAoKGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fAotCSAgICAgZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X1BIWSkgJiYKLQkgICAgZGV2LT5uZXRkZXZfb3BzLT5uZG9fZG9faW9jdGwpCisJaWYgKGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCAmJiBkZXYtPm5ldGRldl9vcHMtPm5kb19kb19pb2N0bCkKIAkJcmV0ID0gZGV2LT5uZXRkZXZfb3BzLT5uZG9fZG9faW9jdGwoZGV2LCAmaWZyLCBjbWQpOwogCiAJaWYgKCFyZXQgJiYgY29weV90b191c2VyKGFyZywgJmlmciwgc2l6ZW9mKHN0cnVjdCBpZnJlcSkpKQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvZGdyYW0uYyBiL25ldC9pZWVlODAyMTU0L2RncmFtLmMKaW5kZXggYmE4YjIxNC4uNzdhZTY4NSAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxNTQvZGdyYW0uYworKysgYi9uZXQvaWVlZTgwMjE1NC9kZ3JhbS5jCkBAIC0yNiw5ICsyNiw5IEBACiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0L21hY19kZWYuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjE1NC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvYWZfaWVlZTgwMjE1NC5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0Lmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxNTRfbmV0ZGV2Lmg+CiAKICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CiAKQEAgLTQwLDkgKzQwLDExIEBACiBzdHJ1Y3QgZGdyYW1fc29jayB7CiAJc3RydWN0IHNvY2sgc2s7CiAKLQlpbnQgYm91bmQ7CiAJc3RydWN0IGllZWU4MDIxNTRfYWRkciBzcmNfYWRkcjsKIAlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyIGRzdF9hZGRyOworCisJdW5zaWduZWQgYm91bmQ6MTsKKwl1bnNpZ25lZCB3YW50X2FjazoxOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZGdyYW1fc29jayAqZGdyYW1fc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQpAQCAtNTAsNyArNTIsNiBAQAogCXJldHVybiBjb250YWluZXJfb2Yoc2ssIHN0cnVjdCBkZ3JhbV9zb2NrLCBzayk7CiB9CiAKLQogc3RhdGljIHZvaWQgZGdyYW1faGFzaChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJd3JpdGVfbG9ja19iaCgmZGdyYW1fbG9jayk7CkBAIC03Myw2ICs3NCw3IEBACiAKIAlyby0+ZHN0X2FkZHIuYWRkcl90eXBlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7CiAJcm8tPmRzdF9hZGRyLnBhbl9pZCA9IDB4ZmZmZjsKKwlyby0+d2FudF9hY2sgPSAxOwogCW1lbXNldCgmcm8tPmRzdF9hZGRyLmh3YWRkciwgMHhmZiwgc2l6ZW9mKHJvLT5kc3RfYWRkci5od2FkZHIpKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTg2LDE4ICs4OCwxOCBAQAogewogCXN0cnVjdCBzb2NrYWRkcl9pZWVlODAyMTU0ICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pZWVlODAyMTU0ICopdWFkZHI7CiAJc3RydWN0IGRncmFtX3NvY2sgKnJvID0gZGdyYW1fc2soc2spOwotCWludCBlcnIgPSAwOworCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKKwlsb2NrX3NvY2soc2spOworCiAJcm8tPmJvdW5kID0gMDsKIAogCWlmIChsZW4gPCBzaXplb2YoKmFkZHIpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAKIAlpZiAoYWRkci0+ZmFtaWx5ICE9IEFGX0lFRUU4MDIxNTQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbG9ja19zb2NrKHNrKTsKKwkJZ290byBvdXQ7CiAKIAlkZXYgPSBpZWVlODAyMTU0X2dldF9kZXYoc29ja19uZXQoc2spLCAmYWRkci0+YWRkcik7CiAJaWYgKCFkZXYpIHsKQEAgLTExMyw2ICsxMTUsNyBAQAogCW1lbWNweSgmcm8tPnNyY19hZGRyLCAmYWRkci0+YWRkciwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTU0X2FkZHIpKTsKIAogCXJvLT5ib3VuZCA9IDE7CisJZXJyID0gMDsKIG91dF9wdXQ6CiAJZGV2X3B1dChkZXYpOwogb3V0OgpAQCAtMjM1LDcgKzIzOCwxMCBAQAogCiAJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAKLQltYWNfY2Ioc2tiKS0+ZmxhZ3MgPSBJRUVFODAyMTU0X0ZDX1RZUEVfREFUQSB8IE1BQ19DQl9GTEFHX0FDS1JFUTsKKwltYWNfY2Ioc2tiKS0+ZmxhZ3MgPSBJRUVFODAyMTU0X0ZDX1RZUEVfREFUQTsKKwlpZiAocm8tPndhbnRfYWNrKQorCQltYWNfY2Ioc2tiKS0+ZmxhZ3MgfD0gTUFDX0NCX0ZMQUdfQUNLUkVROworCiAJbWFjX2NiKHNrYiktPnNlcSA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS0+Z2V0X2RzbihkZXYpOwogCWVyciA9IGRldl9oYXJkX2hlYWRlcihza2IsIGRldiwgRVRIX1BfSUVFRTgwMjE1NCwgJnJvLT5kc3RfYWRkciwKIAkJCXJvLT5ib3VuZCA/ICZyby0+c3JjX2FkZHIgOiBOVUxMLCBzaXplKTsKQEAgLTM4MCwxMyArMzg2LDU5IEBACiBzdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewotCXJldHVybiAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgZGdyYW1fc29jayAqcm8gPSBkZ3JhbV9zayhzayk7CisKKwlpbnQgdmFsLCBsZW47CisKKwlpZiAobGV2ZWwgIT0gU09MX0lFRUU4MDIxNTQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgV1BBTl9XQU5UQUNLOgorCQl2YWwgPSByby0+d2FudF9hY2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisJfQorCisJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZ2YWwsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRncmFtX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciBvcHRsZW4pCiB7Ci0JcmV0dXJuIC1FT1BOT1RTVVBQOworCXN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTsKKwlpbnQgdmFsOworCWludCBlcnIgPSAwOworCisJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopb3B0dmFsKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBXUEFOX1dBTlRBQ0s6CisJCXJvLT53YW50X2FjayA9ICEhdmFsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RydWN0IHByb3RvIGllZWU4MDIxNTRfZGdyYW1fcHJvdCA9IHsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L25ldGxpbmsuYyBiL25ldC9pZWVlODAyMTU0L25ldGxpbmsuYwppbmRleCAyN2VkYTlmLi4yMTA2ZWNiIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMKKysrIGIvbmV0L2llZWU4MDIxNTQvbmV0bGluay5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKiBXcml0dGVuIGJ5OgogICogU2VyZ2V5IExhcGluIDxzbGFwaW5Ab3NzZmFucy5vcmc+CiAgKiBEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiA8ZGJhcnlzaGtvdkBnbWFpbC5jb20+CisgKiBNYXhpbSBPc2lwb3YgPG1heGltLm9zaXBvdkBzaWVtZW5zLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yNiwxMCArMjcsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPGxpbnV4L25sODAyMTU0Lmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0L25sODAyMTU0Lmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxNTQvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L2FmX2llZWU4MDIxNTQuaD4KKyNpbmNsdWRlIDxuZXQvbmw4MDIxNTQuaD4KKyNpbmNsdWRlIDxuZXQvaWVlZTgwMjE1NC5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0X25ldGRldi5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGllZWU4MDIxNTRfc2VxX251bTsKIApAQCAtNzMsNyArNzYsNyBAQAogCS8qIFhYWDogbmxoIGlzIHJpZ2h0IGF0IHRoZSBzdGFydCBvZiBtc2cgKi8KIAl2b2lkICpoZHIgPSBnZW5sbXNnX2RhdGEoTkxNU0dfREFUQShtc2ctPmRhdGEpKTsKIAotCWlmICghZ2VubG1zZ19lbmQobXNnLCBoZHIpKQorCWlmIChnZW5sbXNnX2VuZChtc2csIGhkcikgPCAwKQogCQlnb3RvIG91dDsKIAogCXJldHVybiBnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIGllZWU4MDIxNTRfY29vcmRfbWNncnAuaWQsCkBAIC0yMjksNyArMjMyLDcgQEAKIEVYUE9SVF9TWU1CT0woaWVlZTgwMjE1NF9ubF9iZWFjb25faW5kaWMpOwogCiBpbnQgaWVlZTgwMjE1NF9ubF9zY2FuX2NvbmZpcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJdTggc3RhdHVzLCB1OCBzY2FuX3R5cGUsIHUzMiB1bnNjYW5uZWQsCisJCXU4IHN0YXR1cywgdTggc2Nhbl90eXBlLCB1MzIgdW5zY2FubmVkLCB1OCBwYWdlLAogCQl1OCAqZWRsLyogLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYW5fZGVzY19saXN0ICovKQogewogCXN0cnVjdCBza19idWZmICptc2c7CkBAIC0yNDgsNiArMjUxLDcgQEAKIAlOTEFfUFVUX1U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX1NUQVRVUywgc3RhdHVzKTsKIAlOTEFfUFVUX1U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX1NDQU5fVFlQRSwgc2Nhbl90eXBlKTsKIAlOTEFfUFVUX1UzMihtc2csIElFRUU4MDIxNTRfQVRUUl9DSEFOTkVMUywgdW5zY2FubmVkKTsKKwlOTEFfUFVUX1U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX1BBR0UsIHBhZ2UpOwogCiAJaWYgKGVkbCkKIAkJTkxBX1BVVChtc2csIElFRUU4MDIxNTRfQVRUUl9FRF9MSVNULCAyNywgZWRsKTsKQEAgLTI2MCw2ICsyNjQsNjAgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjE1NF9ubF9zY2FuX2NvbmZpcm0pOwogCitpbnQgaWVlZTgwMjE1NF9ubF9zdGFydF9jb25maXJtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHN0YXR1cykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwltc2cgPSBpZWVlODAyMTU0X25sX2NyZWF0ZSgwLCBJRUVFODAyMTU0X1NUQVJUX0NPTkYpOworCWlmICghbXNnKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKKwlOTEFfUFVUX1NUUklORyhtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRSwgZGV2LT5uYW1lKTsKKwlOTEFfUFVUX1UzMihtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfSU5ERVgsIGRldi0+aWZpbmRleCk7CisJTkxBX1BVVChtc2csIElFRUU4MDIxNTRfQVRUUl9IV19BRERSLCBJRUVFODAyMTU0X0FERFJfTEVOLAorCQkJZGV2LT5kZXZfYWRkcik7CisKKwlOTEFfUFVUX1U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX1NUQVRVUywgc3RhdHVzKTsKKworCXJldHVybiBpZWVlODAyMTU0X25sX2ZpbmlzaChtc2cpOworCitubGFfcHV0X2ZhaWx1cmU6CisJbmxtc2dfZnJlZShtc2cpOworCXJldHVybiAtRU5PQlVGUzsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjE1NF9ubF9zdGFydF9jb25maXJtKTsKKworc3RhdGljIGludCBpZWVlODAyMTU0X25sX2ZpbGxfaWZhY2Uoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBpZCwKKwl1MzIgc2VxLCBpbnQgZmxhZ3MsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdm9pZCAqaGRyOworCisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwloZHIgPSBnZW5sbXNnX3B1dChtc2csIDAsIHNlcSwgJmllZWU4MDIxNTRfY29vcmRpbmF0b3JfZmFtaWx5LCBmbGFncywKKwkJSUVFRTgwMjE1NF9MSVNUX0lGQUNFKTsKKwlpZiAoIWhkcikKKwkJZ290byBvdXQ7CisKKwlOTEFfUFVUX1NUUklORyhtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRSwgZGV2LT5uYW1lKTsKKwlOTEFfUFVUX1UzMihtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfSU5ERVgsIGRldi0+aWZpbmRleCk7CisKKwlOTEFfUFVUKG1zZywgSUVFRTgwMjE1NF9BVFRSX0hXX0FERFIsIElFRUU4MDIxNTRfQUREUl9MRU4sCisJCWRldi0+ZGV2X2FkZHIpOworCU5MQV9QVVRfVTE2KG1zZywgSUVFRTgwMjE1NF9BVFRSX1NIT1JUX0FERFIsCisJCWllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS0+Z2V0X3Nob3J0X2FkZHIoZGV2KSk7CisJTkxBX1BVVF9VMTYobXNnLCBJRUVFODAyMTU0X0FUVFJfUEFOX0lELAorCQlpZWVlODAyMTU0X21sbWVfb3BzKGRldiktPmdldF9wYW5faWQoZGV2KSk7CisJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKworbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKK291dDoKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCiAvKiBSZXF1ZXN0cyBmcm9tIHVzZXJzcGFjZSAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppZWVlODAyMTU0X25sX2dldF9kZXYoc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKQEAgLTI3Miw3ICszMzAsNyBAQAogCQlkZXYgPSBkZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBuYW1lKTsKIAl9IGVsc2UgaWYgKGluZm8tPmF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVZfSU5ERVhdKQogCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwKLQkJCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfREVWX0lOREVYXSkpOworCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFVl9JTkRFWF0pKTsKIAllbHNlCiAJCXJldHVybiBOVUxMOwogCkBAIC0yOTIsNiArMzUwLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgYWRkcjsKKwl1OCBwYWdlOwogCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKCFpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTF0gfHwKQEAgLTMxNyw4ICszNzYsMTQgQEAKIAl9CiAJYWRkci5wYW5faWQgPSBubGFfZ2V0X3UxNihpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfUEFOX0lEXSk7CiAKKwlpZiAoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX1BBR0VdKQorCQlwYWdlID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfUEFHRV0pOworCWVsc2UKKwkJcGFnZSA9IDA7CisKIAlyZXQgPSBpZWVlODAyMTU0X21sbWVfb3BzKGRldiktPmFzc29jX3JlcShkZXYsICZhZGRyLAogCQkJbmxhX2dldF91OChpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTF0pLAorCQkJcGFnZSwKIAkJCW5sYV9nZXRfdTgoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NBUEFCSUxJVFldKSk7CiAKIAlkZXZfcHV0KGRldik7CkBAIC00MDEsNiArNDY2LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyIGFkZHI7CiAKIAl1OCBjaGFubmVsLCBiY25fb3JkLCBzZl9vcmQ7CisJdTggcGFnZTsKIAlpbnQgcGFuX2Nvb3JkLCBibHgsIGNvb3JkX3JlYWxpZ247CiAJaW50IHJldDsKIApAQCAtNDMxLDcgKzQ5NywxOSBAQAogCWJseCA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX0JBVF9FWFRdKTsKIAljb29yZF9yZWFsaWduID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfUkVBTElHTl0pOwogCi0JcmV0ID0gaWVlZTgwMjE1NF9tbG1lX29wcyhkZXYpLT5zdGFydF9yZXEoZGV2LCAmYWRkciwgY2hhbm5lbCwKKwlpZiAoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX1BBR0VdKQorCQlwYWdlID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfUEFHRV0pOworCWVsc2UKKwkJcGFnZSA9IDA7CisKKworCWlmIChhZGRyLnNob3J0X2FkZHIgPT0gSUVFRTgwMjE1NF9BRERSX0JST0FEQ0FTVCkgeworCQlpZWVlODAyMTU0X25sX3N0YXJ0X2NvbmZpcm0oZGV2LCBJRUVFODAyMTU0X05PX1NIT1JUX0FERFJFU1MpOworCQlkZXZfcHV0KGRldik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS0+c3RhcnRfcmVxKGRldiwgJmFkZHIsIGNoYW5uZWwsIHBhZ2UsCiAJCWJjbl9vcmQsIHNmX29yZCwgcGFuX2Nvb3JkLCBibHgsIGNvb3JkX3JlYWxpZ24pOwogCiAJZGV2X3B1dChkZXYpOwpAQCAtNDQ1LDYgKzUyMyw3IEBACiAJdTggdHlwZTsKIAl1MzIgY2hhbm5lbHM7CiAJdTggZHVyYXRpb247CisJdTggcGFnZTsKIAogCWlmICghaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX1NDQU5fVFlQRV0gfHwKIAkgICAgIWluZm8tPmF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DSEFOTkVMU10gfHwKQEAgLTQ1OSwxMyArNTM4LDgwIEBACiAJY2hhbm5lbHMgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTFNdKTsKIAlkdXJhdGlvbiA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RVUkFUSU9OXSk7CiAKLQlyZXQgPSBpZWVlODAyMTU0X21sbWVfb3BzKGRldiktPnNjYW5fcmVxKGRldiwgdHlwZSwgY2hhbm5lbHMsCisJaWYgKGluZm8tPmF0dHJzW0lFRUU4MDIxNTRfQVRUUl9QQUdFXSkKKwkJcGFnZSA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX1BBR0VdKTsKKwllbHNlCisJCXBhZ2UgPSAwOworCisKKwlyZXQgPSBpZWVlODAyMTU0X21sbWVfb3BzKGRldiktPnNjYW5fcmVxKGRldiwgdHlwZSwgY2hhbm5lbHMsIHBhZ2UsCiAJCQlkdXJhdGlvbik7CiAKIAlkZXZfcHV0KGRldik7CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTU0X2xpc3RfaWZhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwlzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCS8qIFJlcXVlc3QgZm9yIGludGVyZmFjZSBuYW1lLCBpbmRleCwgdHlwZSwgSUVFRSBhZGRyZXNzLAorCSAgIFBBTiBJZCwgc2hvcnQgYWRkcmVzcyAqLworCXN0cnVjdCBza19idWZmICptc2c7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisJaW50IHJjID0gLUVOT0JVRlM7CisKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKKworCWRldiA9IGllZWU4MDIxNTRfbmxfZ2V0X2RldihpbmZvKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlnb3RvIG91dF9kZXY7CisKKwlyYyA9IGllZWU4MDIxNTRfbmxfZmlsbF9pZmFjZShtc2csIGluZm8tPnNuZF9waWQsIGluZm8tPnNuZF9zZXEsCisJCQkwLCBkZXYpOworCWlmIChyYyA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlkZXZfcHV0KGRldik7CisKKwlyZXR1cm4gZ2VubG1zZ191bmljYXN0KCZpbml0X25ldCwgbXNnLCBpbmZvLT5zbmRfcGlkKTsKK291dF9mcmVlOgorCW5sbXNnX2ZyZWUobXNnKTsKK291dF9kZXY6CisJZGV2X3B1dChkZXYpOworCXJldHVybiByYzsKKworfQorCitzdGF0aWMgaW50IGllZWU4MDIxNTRfZHVtcF9pZmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKK3sKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWludCBpZHg7CisJaW50IHNfaWR4ID0gY2ItPmFyZ3NbMF07CisKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKKworCWlkeCA9IDA7CisJZm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7CisJCWlmIChpZHggPCBzX2lkeCB8fCAoZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KSkKKwkJCWdvdG8gY29udDsKKworCQlpZiAoaWVlZTgwMjE1NF9ubF9maWxsX2lmYWNlKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCisJCQljYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLCBkZXYpIDwgMCkKKwkJCWJyZWFrOworY29udDoKKwkJaWR4Kys7CisJfQorCWNiLT5hcmdzWzBdID0gaWR4OworCisJcmV0dXJuIHNrYi0+bGVuOworfQorCiAjZGVmaW5lIElFRUU4MDIxNTRfT1AoX2NtZCwgX2Z1bmMpCQkJXAogCXsJCQkJCQlcCiAJCS5jbWQJPSBfY21kLAkJCQlcCkBAIC00NzUsMTIgKzYyMSwyMiBAQAogCQkuZmxhZ3MJPSBHRU5MX0FETUlOX1BFUk0sCQlcCiAJfQogCisjZGVmaW5lIElFRUU4MDIxNTRfRFVNUChfY21kLCBfZnVuYywgX2R1bXApCQlcCisJewkJCQkJCVwKKwkJLmNtZAk9IF9jbWQsCQkJCVwKKwkJLnBvbGljeQk9IGllZWU4MDIxNTRfcG9saWN5LAkJXAorCQkuZG9pdAk9IF9mdW5jLAkJCVwKKwkJLmR1bXBpdAk9IF9kdW1wLAkJCVwKKwl9CisKIHN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgaWVlZTgwMjE1NF9jb29yZGluYXRvcl9vcHNbXSA9IHsKIAlJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfQVNTT0NJQVRFX1JFUSwgaWVlZTgwMjE1NF9hc3NvY2lhdGVfcmVxKSwKIAlJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfQVNTT0NJQVRFX1JFU1AsIGllZWU4MDIxNTRfYXNzb2NpYXRlX3Jlc3ApLAogCUlFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9ESVNBU1NPQ0lBVEVfUkVRLCBpZWVlODAyMTU0X2Rpc2Fzc29jaWF0ZV9yZXEpLAogCUlFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9TQ0FOX1JFUSwgaWVlZTgwMjE1NF9zY2FuX3JlcSksCiAJSUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X1NUQVJUX1JFUSwgaWVlZTgwMjE1NF9zdGFydF9yZXEpLAorCUlFRUU4MDIxNTRfRFVNUChJRUVFODAyMTU0X0xJU1RfSUZBQ0UsIGllZWU4MDIxNTRfbGlzdF9pZmFjZSwKKwkJCQkJCQlpZWVlODAyMTU0X2R1bXBfaWZhY2UpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaWVlZTgwMjE1NF9ubF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9ubF9wb2xpY3kuYyBiL25ldC9pZWVlODAyMTU0L25sX3BvbGljeS5jCmluZGV4IGM3ZDcxZDEuLjIzNjNlYmUgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L25sX3BvbGljeS5jCisrKyBiL25ldC9pZWVlODAyMTU0L25sX3BvbGljeS5jCkBAIC0yNCw3ICsyNCw3IEBACiAKICNkZWZpbmUgTkxBX0hXX0FERFIgTkxBX1U2NAogCi1zdHJ1Y3QgbmxhX3BvbGljeSBpZWVlODAyMTU0X3BvbGljeVtJRUVFODAyMTU0X0FUVFJfTUFYICsgMV0gPSB7Citjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpZWVlODAyMTU0X3BvbGljeVtJRUVFODAyMTU0X0FUVFJfTUFYICsgMV0gPSB7CiAJW0lFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRV0gPSB7IC50eXBlID0gTkxBX1NUUklORywgfSwKIAlbSUVFRTgwMjE1NF9BVFRSX0RFVl9JTkRFWF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSwKIApAQCAtMzMsNiArMzMsNyBAQAogCVtJRUVFODAyMTU0X0FUVFJfSFdfQUREUl0gPSB7IC50eXBlID0gTkxBX0hXX0FERFIsIH0sCiAJW0lFRUU4MDIxNTRfQVRUUl9QQU5fSURdID0geyAudHlwZSA9IE5MQV9VMTYsIH0sCiAJW0lFRUU4MDIxNTRfQVRUUl9DSEFOTkVMXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sCisJW0lFRUU4MDIxNTRfQVRUUl9QQUdFXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sCiAJW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9TSE9SVF9BRERSXSA9IHsgLnR5cGUgPSBOTEFfVTE2LCB9LAogCVtJRUVFODAyMTU0X0FUVFJfQ09PUkRfSFdfQUREUl0gPSB7IC50eXBlID0gTkxBX0hXX0FERFIsIH0sCiAJW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9QQU5fSURdID0geyAudHlwZSA9IE5MQV9VMTYsIH0sCkBAIC01MCwzICs1MSw0IEBACiAJW0lFRUU4MDIxNTRfQVRUUl9EVVJBVElPTl0gPSB7IC50eXBlID0gTkxBX1U4LCB9LAogCVtJRUVFODAyMTU0X0FUVFJfRURfTElTVF0gPSB7IC5sZW4gPSAyNyB9LAogfTsKKwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvcmF3LmMgYi9uZXQvaWVlZTgwMjE1NC9yYXcuYwppbmRleCA5MzE1OTc3Li40NjgxNTAxIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9yYXcuYworKysgYi9uZXQvaWVlZTgwMjE1NC9yYXcuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0L2FmX2llZWU4MDIxNTQuaD4KKyNpbmNsdWRlIDxuZXQvYWZfaWVlZTgwMjE1NC5oPgogCiAjaW5jbHVkZSAiYWY4MDIxNTQuaCIKIApAQCAtNzQsOCArNzQsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0X1BIWSAmJgotCSAgICBkZXYtPnR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpIHsKKwlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KSB7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3B1dDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC93cGFuLWNsYXNzLmMgYi9uZXQvaWVlZTgwMjE1NC93cGFuLWNsYXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMwNjYwNAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pZWVlODAyMTU0L3dwYW4tY2xhc3MuYwpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBTaWVtZW5zIEFHCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8bmV0L3dwYW4tcGh5Lmg+CisKKyNkZWZpbmUgTUFTVEVSX1NIT1dfQ09NUExFWChuYW1lLCBmb3JtYXRfc3RyaW5nLCBhcmdzLi4uKQkJXAorc3RhdGljIHNzaXplX3QgbmFtZSAjIyBfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHdwYW5fcGh5ICpwaHkgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgd3Bhbl9waHksIGRldik7CVwKKwlpbnQgcmV0OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJbXV0ZXhfbG9jaygmcGh5LT5waWJfbG9jayk7CQkJCQlcCisJcmV0ID0gc3ByaW50ZihidWYsIGZvcm1hdF9zdHJpbmcgIlxuIiwgYXJncyk7CQkJXAorCW11dGV4X3VubG9jaygmcGh5LT5waWJfbG9jayk7CQkJCQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorfQorCisjZGVmaW5lIE1BU1RFUl9TSE9XKGZpZWxkLCBmb3JtYXRfc3RyaW5nKQkJCQlcCisJTUFTVEVSX1NIT1dfQ09NUExFWChmaWVsZCwgZm9ybWF0X3N0cmluZywgcGh5LT5maWVsZCkKKworTUFTVEVSX1NIT1coY3VycmVudF9jaGFubmVsLCAiJWQiKTsKK01BU1RFUl9TSE9XKGN1cnJlbnRfcGFnZSwgIiVkIik7CitNQVNURVJfU0hPVyhjaGFubmVsc19zdXBwb3J0ZWQsICIlI3giKTsKK01BU1RFUl9TSE9XX0NPTVBMRVgodHJhbnNtaXRfcG93ZXIsICIlZCArLSAlZCBkQiIsCisJKChzaWduZWQgY2hhcikgKHBoeS0+dHJhbnNtaXRfcG93ZXIgPDwgMikpID4+IDIsCisJKHBoeS0+dHJhbnNtaXRfcG93ZXIgPj4gNikgPyAocGh5LT50cmFuc21pdF9wb3dlciA+PiA2KSAqIDMgOiAxICk7CitNQVNURVJfU0hPVyhjY2FfbW9kZSwgIiVkIik7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwbWliX2F0dHJzW10gPSB7CisJX19BVFRSX1JPKGN1cnJlbnRfY2hhbm5lbCksCisJX19BVFRSX1JPKGN1cnJlbnRfcGFnZSksCisJX19BVFRSX1JPKGNoYW5uZWxzX3N1cHBvcnRlZCksCisJX19BVFRSX1JPKHRyYW5zbWl0X3Bvd2VyKSwKKwlfX0FUVFJfUk8oY2NhX21vZGUpLAorCXt9LAorfTsKKworc3RhdGljIHZvaWQgd3Bhbl9waHlfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkKQoreworCXN0cnVjdCB3cGFuX3BoeSAqcGh5ID0gY29udGFpbmVyX29mKGQsIHN0cnVjdCB3cGFuX3BoeSwgZGV2KTsKKwlrZnJlZShwaHkpOworfQorCitzdGF0aWMgc3RydWN0IGNsYXNzIHdwYW5fcGh5X2NsYXNzID0geworCS5uYW1lID0gImllZWU4MDIxNTQiLAorCS5kZXZfcmVsZWFzZSA9IHdwYW5fcGh5X3JlbGVhc2UsCisJLmRldl9hdHRycyA9IHBtaWJfYXR0cnMsCit9OworCitzdGF0aWMgREVGSU5FX01VVEVYKHdwYW5fcGh5X211dGV4KTsKK3N0YXRpYyBpbnQgd3Bhbl9waHlfaWR4OworCitzdGF0aWMgaW50IHdwYW5fcGh5X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gIXN0cmNtcChkZXZfbmFtZShkZXYpLCAoY29uc3QgY2hhciAqKWRhdGEpOworfQorCitzdHJ1Y3Qgd3Bhbl9waHkgKndwYW5fcGh5X2ZpbmQoY29uc3QgY2hhciAqc3RyKQoreworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCWlmIChXQVJOX09OKCFzdHIpKQorCQlyZXR1cm4gTlVMTDsKKworCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZ3cGFuX3BoeV9jbGFzcywgTlVMTCwKKwkJCSh2b2lkICopc3RyLCB3cGFuX3BoeV9tYXRjaCk7CisJaWYgKCFkZXYpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB3cGFuX3BoeSwgZGV2KTsKK30KK0VYUE9SVF9TWU1CT0wod3Bhbl9waHlfZmluZCk7CisKK3N0YXRpYyBpbnQgd3Bhbl9waHlfaWR4X3ZhbGlkKGludCBpZHgpCit7CisJcmV0dXJuIGlkeCA+PSAwOworfQorCitzdHJ1Y3Qgd3Bhbl9waHkgKndwYW5fcGh5X2FsbG9jKHNpemVfdCBwcml2X3NpemUpCit7CisJc3RydWN0IHdwYW5fcGh5ICpwaHkgPSBremFsbG9jKHNpemVvZigqcGh5KSArIHByaXZfc2l6ZSwKKwkJCUdGUF9LRVJORUwpOworCisJbXV0ZXhfbG9jaygmd3Bhbl9waHlfbXV0ZXgpOworCXBoeS0+aWR4ID0gd3Bhbl9waHlfaWR4Kys7CisJaWYgKHVubGlrZWx5KCF3cGFuX3BoeV9pZHhfdmFsaWQocGh5LT5pZHgpKSkgeworCQl3cGFuX3BoeV9pZHgtLTsKKwkJbXV0ZXhfdW5sb2NrKCZ3cGFuX3BoeV9tdXRleCk7CisJCWtmcmVlKHBoeSk7CisJCXJldHVybiBOVUxMOworCX0KKwltdXRleF91bmxvY2soJndwYW5fcGh5X211dGV4KTsKKworCW11dGV4X2luaXQoJnBoeS0+cGliX2xvY2spOworCisJZGV2aWNlX2luaXRpYWxpemUoJnBoeS0+ZGV2KTsKKwlkZXZfc2V0X25hbWUoJnBoeS0+ZGV2LCAid3Bhbi1waHklZCIsIHBoeS0+aWR4KTsKKworCXBoeS0+ZGV2LmNsYXNzID0gJndwYW5fcGh5X2NsYXNzOworCisJcmV0dXJuIHBoeTsKK30KK0VYUE9SVF9TWU1CT0wod3Bhbl9waHlfYWxsb2MpOworCitpbnQgd3Bhbl9waHlfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSkKK3sKKwlwaHktPmRldi5wYXJlbnQgPSBwYXJlbnQ7CisKKwlyZXR1cm4gZGV2aWNlX2FkZCgmcGh5LT5kZXYpOworfQorRVhQT1JUX1NZTUJPTCh3cGFuX3BoeV9yZWdpc3Rlcik7CisKK3ZvaWQgd3Bhbl9waHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSkKK3sKKwlkZXZpY2VfZGVsKCZwaHktPmRldik7Cit9CitFWFBPUlRfU1lNQk9MKHdwYW5fcGh5X3VucmVnaXN0ZXIpOworCit2b2lkIHdwYW5fcGh5X2ZyZWUoc3RydWN0IHdwYW5fcGh5ICpwaHkpCit7CisJcHV0X2RldmljZSgmcGh5LT5kZXYpOworfQorRVhQT1JUX1NZTUJPTCh3cGFuX3BoeV9mcmVlKTsKKworc3RhdGljIGludCBfX2luaXQgd3Bhbl9waHlfY2xhc3NfaW5pdCh2b2lkKQoreworCXJldHVybiBjbGFzc19yZWdpc3Rlcigmd3Bhbl9waHlfY2xhc3MpOworfQorc3Vic3lzX2luaXRjYWxsKHdwYW5fcGh5X2NsYXNzX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd3Bhbl9waHlfY2xhc3NfZXhpdCh2b2lkKQoreworCWNsYXNzX3VucmVnaXN0ZXIoJndwYW5fcGh5X2NsYXNzKTsKK30KK21vZHVsZV9leGl0KHdwYW5fcGh5X2NsYXNzX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIklFRUUgODAyLjE1LjQgZGV2aWNlIGNsYXNzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCA1NjZlYTZjLi42YzMwYTczIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC0xMjQsNyArMTI0LDYgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaW5ldHN3X2xvY2spOwogCiBzdHJ1Y3QgaXB2NF9jb25maWcgaXB2NF9jb25maWc7Ci0KIEVYUE9SVF9TWU1CT0woaXB2NF9jb25maWcpOwogCiAvKiBOZXcgZGVzdHJ1Y3Rpb24gcm91dGluZSAqLwpAQCAtMTM5LDEyICsxMzgsMTIgQEAKIAlza19tZW1fcmVjbGFpbShzayk7CiAKIAlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0gJiYgc2stPnNrX3N0YXRlICE9IFRDUF9DTE9TRSkgewotCQlwcmludGsoIkF0dGVtcHQgdG8gcmVsZWFzZSBUQ1Agc29ja2V0IGluIHN0YXRlICVkICVwXG4iLAorCQlwcl9lcnIoIkF0dGVtcHQgdG8gcmVsZWFzZSBUQ1Agc29ja2V0IGluIHN0YXRlICVkICVwXG4iLAogCQkgICAgICAgc2stPnNrX3N0YXRlLCBzayk7CiAJCXJldHVybjsKIAl9CiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKLQkJcHJpbnRrKCJBdHRlbXB0IHRvIHJlbGVhc2UgYWxpdmUgaW5ldCBzb2NrZXQgJXBcbiIsIHNrKTsKKwkJcHJfZXJyKCJBdHRlbXB0IHRvIHJlbGVhc2UgYWxpdmUgaW5ldCBzb2NrZXQgJXBcbiIsIHNrKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTU3LDYgKzE1Niw3IEBACiAJZHN0X3JlbGVhc2Uoc2stPnNrX2RzdF9jYWNoZSk7CiAJc2tfcmVmY250X2RlYnVnX2RlYyhzayk7CiB9CitFWFBPUlRfU1lNQk9MKGluZXRfc29ja19kZXN0cnVjdCk7CiAKIC8qCiAgKglUaGUgcm91dGluZXMgYmV5b25kIHRoaXMgcG9pbnQgaGFuZGxlIHRoZSBiZWhhdmlvdXIgb2YgYW4gQUZfSU5FVApAQCAtMjE5LDYgKzIxOSw3IEBACiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChpbmV0X2xpc3Rlbik7CiAKIHUzMiBpbmV0X2VoYXNoX3NlY3JldCBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChpbmV0X2VoYXNoX3NlY3JldCk7CkBAIC00MzUsOSArNDM2LDExIEBACiAJfQogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpbmV0X3JlbGVhc2UpOwogCiAvKiBJdCBpcyBvZmYgYnkgZGVmYXVsdCwgc2VlIGJlbG93LiAqLwogaW50IHN5c2N0bF9pcF9ub25sb2NhbF9iaW5kIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MKHN5c2N0bF9pcF9ub25sb2NhbF9iaW5kKTsKIAogaW50IGluZXRfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgYWRkcl9sZW4pCiB7CkBAIC01MTksNiArNTIyLDcgQEAKIG91dDoKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChpbmV0X2JpbmQpOwogCiBpbnQgaW5ldF9kZ3JhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqIHVhZGRyLAogCQkgICAgICAgaW50IGFkZHJfbGVuLCBpbnQgZmxhZ3MpCkBAIC01MzIsNiArNTM2LDcgQEAKIAkJcmV0dXJuIC1FQUdBSU47CiAJcmV0dXJuIHNrLT5za19wcm90LT5jb25uZWN0KHNrLCAoc3RydWN0IHNvY2thZGRyICopdWFkZHIsIGFkZHJfbGVuKTsKIH0KK0VYUE9SVF9TWU1CT0woaW5ldF9kZ3JhbV9jb25uZWN0KTsKIAogc3RhdGljIGxvbmcgaW5ldF93YWl0X2Zvcl9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lbykKIHsKQEAgLTY0MSw2ICs2NDYsNyBAQAogCQlzb2NrLT5zdGF0ZSA9IFNTX0RJU0NPTk5FQ1RJTkc7CiAJZ290byBvdXQ7CiB9CitFWFBPUlRfU1lNQk9MKGluZXRfc3RyZWFtX2Nvbm5lY3QpOwogCiAvKgogICoJQWNjZXB0IGEgcGVuZGluZyBjb25uZWN0aW9uLiBUaGUgVENQIGxheWVyIG5vdyBnaXZlcyBCU0Qgc2VtYW50aWNzLgpAQCAtNjY4LDYgKzY3NCw3IEBACiBkb19lcnI6CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woaW5ldF9hY2NlcHQpOwogCiAKIC8qCkBAIC02OTksNiArNzA2LDcgQEAKIAkqdWFkZHJfbGVuID0gc2l6ZW9mKCpzaW4pOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpbmV0X2dldG5hbWUpOwogCiBpbnQgaW5ldF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCQkgc2l6ZV90IHNpemUpCkBAIC03MTEsOSArNzE5LDExIEBACiAKIAlyZXR1cm4gc2stPnNrX3Byb3QtPnNlbmRtc2coaW9jYiwgc2ssIG1zZywgc2l6ZSk7CiB9CitFWFBPUlRfU1lNQk9MKGluZXRfc2VuZG1zZyk7CiAKIAotc3RhdGljIHNzaXplX3QgaW5ldF9zZW5kcGFnZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3N0YXRpYyBzc2l6ZV90IGluZXRfc2VuZHBhZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvZmZzZXQsCisJCQkgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAKQEAgLTc4MCw2ICs3OTAsNyBAQAogCXJlbGVhc2Vfc29jayhzayk7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woaW5ldF9zaHV0ZG93bik7CiAKIC8qCiAgKglpb2N0bCgpIGNhbGxzIHlvdSBjYW4gaXNzdWUgb24gYW4gSU5FVCBzb2NrZXQuIE1vc3Qgb2YgdGhlc2UgYXJlCkBAIC03OTgsNDQgKzgwOSw0NSBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgU0lPQ0dTVEFNUDoKLQkJCWVyciA9IHNvY2tfZ2V0X3RpbWVzdGFtcChzaywgKHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqKWFyZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBTSU9DR1NUQU1QTlM6Ci0JCQllcnIgPSBzb2NrX2dldF90aW1lc3RhbXBucyhzaywgKHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKilhcmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0lPQ0FERFJUOgotCQljYXNlIFNJT0NERUxSVDoKLQkJY2FzZSBTSU9DUlRNU0c6Ci0JCQllcnIgPSBpcF9ydF9pb2N0bChuZXQsIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKLQkJCWJyZWFrOwotCQljYXNlIFNJT0NEQVJQOgotCQljYXNlIFNJT0NHQVJQOgotCQljYXNlIFNJT0NTQVJQOgotCQkJZXJyID0gYXJwX2lvY3RsKG5ldCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0lPQ0dJRkFERFI6Ci0JCWNhc2UgU0lPQ1NJRkFERFI6Ci0JCWNhc2UgU0lPQ0dJRkJSREFERFI6Ci0JCWNhc2UgU0lPQ1NJRkJSREFERFI6Ci0JCWNhc2UgU0lPQ0dJRk5FVE1BU0s6Ci0JCWNhc2UgU0lPQ1NJRk5FVE1BU0s6Ci0JCWNhc2UgU0lPQ0dJRkRTVEFERFI6Ci0JCWNhc2UgU0lPQ1NJRkRTVEFERFI6Ci0JCWNhc2UgU0lPQ1NJRlBGTEFHUzoKLQkJY2FzZSBTSU9DR0lGUEZMQUdTOgotCQljYXNlIFNJT0NTSUZGTEFHUzoKLQkJCWVyciA9IGRldmluZXRfaW9jdGwobmV0LCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmIChzay0+c2tfcHJvdC0+aW9jdGwpCi0JCQkJZXJyID0gc2stPnNrX3Byb3QtPmlvY3RsKHNrLCBjbWQsIGFyZyk7Ci0JCQllbHNlCi0JCQkJZXJyID0gLUVOT0lPQ1RMQ01EOwotCQkJYnJlYWs7CisJY2FzZSBTSU9DR1NUQU1QOgorCQllcnIgPSBzb2NrX2dldF90aW1lc3RhbXAoc2ssIChzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKwljYXNlIFNJT0NHU1RBTVBOUzoKKwkJZXJyID0gc29ja19nZXRfdGltZXN0YW1wbnMoc2ssIChzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DQUREUlQ6CisJY2FzZSBTSU9DREVMUlQ6CisJY2FzZSBTSU9DUlRNU0c6CisJCWVyciA9IGlwX3J0X2lvY3RsKG5ldCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKwljYXNlIFNJT0NEQVJQOgorCWNhc2UgU0lPQ0dBUlA6CisJY2FzZSBTSU9DU0FSUDoKKwkJZXJyID0gYXJwX2lvY3RsKG5ldCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKwljYXNlIFNJT0NHSUZBRERSOgorCWNhc2UgU0lPQ1NJRkFERFI6CisJY2FzZSBTSU9DR0lGQlJEQUREUjoKKwljYXNlIFNJT0NTSUZCUkRBRERSOgorCWNhc2UgU0lPQ0dJRk5FVE1BU0s6CisJY2FzZSBTSU9DU0lGTkVUTUFTSzoKKwljYXNlIFNJT0NHSUZEU1RBRERSOgorCWNhc2UgU0lPQ1NJRkRTVEFERFI6CisJY2FzZSBTSU9DU0lGUEZMQUdTOgorCWNhc2UgU0lPQ0dJRlBGTEFHUzoKKwljYXNlIFNJT0NTSUZGTEFHUzoKKwkJZXJyID0gZGV2aW5ldF9pb2N0bChuZXQsIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKHNrLT5za19wcm90LT5pb2N0bCkKKwkJCWVyciA9IHNrLT5za19wcm90LT5pb2N0bChzaywgY21kLCBhcmcpOworCQllbHNlCisJCQllcnIgPSAtRU5PSU9DVExDTUQ7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChpbmV0X2lvY3RsKTsKIAogY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHMgPSB7CiAJLmZhbWlseQkJICAgPSBQRl9JTkVULApAQCAtODYyLDYgKzg3NCw3IEBACiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCiAjZW5kaWYKIH07CitFWFBPUlRfU1lNQk9MKGluZXRfc3RyZWFtX29wcyk7CiAKIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldF9kZ3JhbV9vcHMgPSB7CiAJLmZhbWlseQkJICAgPSBQRl9JTkVULApAQCAtODg3LDYgKzkwMCw3IEBACiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCiAjZW5kaWYKIH07CitFWFBPUlRfU1lNQk9MKGluZXRfZGdyYW1fb3BzKTsKIAogLyoKICAqIEZvciBTT0NLX1JBVyBzb2NrZXRzOyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgaW5ldF9kZ3JhbV9vcHMgYnV0IHdpdGhvdXQKQEAgLTEwMTYsNiArMTAzMCw3IEBACiAJICAgICAgIHAtPnR5cGUpOwogCWdvdG8gb3V0OwogfQorRVhQT1JUX1NZTUJPTChpbmV0X3JlZ2lzdGVyX3Byb3Rvc3cpOwogCiB2b2lkIGluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KHN0cnVjdCBpbmV0X3Byb3Rvc3cgKnApCiB7CkBAIC0xMDMxLDYgKzEwNDYsNyBAQAogCQlzeW5jaHJvbml6ZV9uZXQoKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KTsKIAogLyoKICAqICAgICAgU2hhbGwgd2UgdHJ5IHRvIGRhbWFnZSBvdXRwdXQgcGFja2V0cyBpZiByb3V0aW5nIGRldiBjaGFuZ2VzPwpAQCAtMTE0MSw3ICsxMTU3LDYgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0KIEVYUE9SVF9TWU1CT0woaW5ldF9za19yZWJ1aWxkX2hlYWRlcik7CiAKIHN0YXRpYyBpbnQgaW5ldF9nc29fc2VuZF9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTE4Nyw2ICsxMjAyLDcgQEAKIAlpbnQgcHJvdG87CiAJaW50IGlobDsKIAlpbnQgaWQ7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IDA7CiAKIAlpZiAoIShmZWF0dXJlcyAmIE5FVElGX0ZfVjRfQ1NVTSkpCiAJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1NHOwpAQCAtMTIyOSw3ICsxMjQ1LDE0IEBACiAJc2tiID0gc2VnczsKIAlkbyB7CiAJCWlwaCA9IGlwX2hkcihza2IpOwotCQlpcGgtPmlkID0gaHRvbnMoaWQrKyk7CisJCWlmIChwcm90byA9PSBJUFBST1RPX1VEUCkgeworCQkJaXBoLT5pZCA9IGh0b25zKGlkKTsKKwkJCWlwaC0+ZnJhZ19vZmYgPSBodG9ucyhvZmZzZXQgPj4gMyk7CisJCQlpZiAoc2tiLT5uZXh0ICE9IE5VTEwpCisJCQkJaXBoLT5mcmFnX29mZiB8PSBodG9ucyhJUF9NRik7CisJCQlvZmZzZXQgKz0gKHNrYi0+bGVuIC0gc2tiLT5tYWNfbGVuIC0gaXBoLT5paGwgKiA0KTsKKwkJfSBlbHNlCisJCQlpcGgtPmlkID0gaHRvbnMoaWQrKyk7CiAJCWlwaC0+dG90X2xlbiA9IGh0b25zKHNrYi0+bGVuIC0gc2tiLT5tYWNfbGVuKTsKIAkJaXBoLT5jaGVjayA9IDA7CiAJCWlwaC0+Y2hlY2sgPSBpcF9mYXN0X2NzdW0oc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGlwaC0+aWhsKTsKQEAgLTEzNjEsNyArMTM4NCw2IEBACiAJfQogCXJldHVybiByYzsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jdGxfc29ja19jcmVhdGUpOwogCiB1bnNpZ25lZCBsb25nIHNubXBfZm9sZF9maWVsZCh2b2lkICptaWJbXSwgaW50IG9mZnQpCkBAIC0xNDI1LDYgKzE0NDcsOCBAQAogc3RhdGljIHN0cnVjdCBuZXRfcHJvdG9jb2wgdWRwX3Byb3RvY29sID0gewogCS5oYW5kbGVyID0JdWRwX3JjdiwKIAkuZXJyX2hhbmRsZXIgPQl1ZHBfZXJyLAorCS5nc29fc2VuZF9jaGVjayA9IHVkcDRfdWZvX3NlbmRfY2hlY2ssCisJLmdzb19zZWdtZW50ID0gdWRwNF91Zm9fZnJhZ21lbnQsCiAJLm5vX3BvbGljeSA9CTEsCiAJLm5ldG5zX29rID0JMSwKIH07CkBAIC0xNjY2LDE5ICsxNjkwLDMgQEAKIAogTU9EVUxFX0FMSUFTX05FVFBST1RPKFBGX0lORVQpOwogCi1FWFBPUlRfU1lNQk9MKGluZXRfYWNjZXB0KTsKLUVYUE9SVF9TWU1CT0woaW5ldF9iaW5kKTsKLUVYUE9SVF9TWU1CT0woaW5ldF9kZ3JhbV9jb25uZWN0KTsKLUVYUE9SVF9TWU1CT0woaW5ldF9kZ3JhbV9vcHMpOwotRVhQT1JUX1NZTUJPTChpbmV0X2dldG5hbWUpOwotRVhQT1JUX1NZTUJPTChpbmV0X2lvY3RsKTsKLUVYUE9SVF9TWU1CT0woaW5ldF9saXN0ZW4pOwotRVhQT1JUX1NZTUJPTChpbmV0X3JlZ2lzdGVyX3Byb3Rvc3cpOwotRVhQT1JUX1NZTUJPTChpbmV0X3JlbGVhc2UpOwotRVhQT1JUX1NZTUJPTChpbmV0X3NlbmRtc2cpOwotRVhQT1JUX1NZTUJPTChpbmV0X3NodXRkb3duKTsKLUVYUE9SVF9TWU1CT0woaW5ldF9zb2NrX2Rlc3RydWN0KTsKLUVYUE9SVF9TWU1CT0woaW5ldF9zdHJlYW1fY29ubmVjdCk7Ci1FWFBPUlRfU1lNQk9MKGluZXRfc3RyZWFtX29wcyk7Ci1FWFBPUlRfU1lNQk9MKGluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KTsKLUVYUE9SVF9TWU1CT0woc3lzY3RsX2lwX25vbmxvY2FsX2JpbmQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCAwOTBlOTk5Li40ZTgwZjMzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiBzdGF0aWMgdm9pZCBhcnBfZXJyb3JfcmVwb3J0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkIHBhcnBfcmVkbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAotc3RhdGljIHN0cnVjdCBuZWlnaF9vcHMgYXJwX2dlbmVyaWNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBuZWlnaF9vcHMgYXJwX2dlbmVyaWNfb3BzID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVCwKIAkuc29saWNpdCA9CQlhcnBfc29saWNpdCwKIAkuZXJyb3JfcmVwb3J0ID0JCWFycF9lcnJvcl9yZXBvcnQsCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkucXVldWVfeG1pdCA9CQlkZXZfcXVldWVfeG1pdCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmVpZ2hfb3BzIGFycF9oaF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5laWdoX29wcyBhcnBfaGhfb3BzID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVCwKIAkuc29saWNpdCA9CQlhcnBfc29saWNpdCwKIAkuZXJyb3JfcmVwb3J0ID0JCWFycF9lcnJvcl9yZXBvcnQsCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkucXVldWVfeG1pdCA9CQlkZXZfcXVldWVfeG1pdCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmVpZ2hfb3BzIGFycF9kaXJlY3Rfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBuZWlnaF9vcHMgYXJwX2RpcmVjdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAogCS5vdXRwdXQgPQkJZGV2X3F1ZXVlX3htaXQsCiAJLmNvbm5lY3RlZF9vdXRwdXQgPQlkZXZfcXVldWVfeG1pdCwKQEAgLTE1OCw3ICsxNTgsNyBAQAogCS5xdWV1ZV94bWl0ID0JCWRldl9xdWV1ZV94bWl0LAogfTsKIAotc3RydWN0IG5laWdoX29wcyBhcnBfYnJva2VuX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBuZWlnaF9vcHMgYXJwX2Jyb2tlbl9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAogCS5zb2xpY2l0ID0JCWFycF9zb2xpY2l0LAogCS5lcnJvcl9yZXBvcnQgPQkJYXJwX2Vycm9yX3JlcG9ydCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl90cmllLmMgYi9uZXQvaXB2NC9maWJfdHJpZS5jCmluZGV4IDYzYzJmYTcuLjI5MWJkZjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl90cmllLmMKKysrIGIvbmV0L2lwdjQvZmliX3RyaWUuYwpAQCAtNDgsNyArNDgsNyBAQAogICoJCVBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgogICovCiAKLSNkZWZpbmUgVkVSU0lPTiAiMC40MDgiCisjZGVmaW5lIFZFUlNJT04gIjAuNDA5IgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xNjQsNiArMTY0LDE0IEBACiBzdGF0aWMgc3RydWN0IHRub2RlICpoYWx2ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bik7CiAvKiB0bm9kZXMgdG8gZnJlZSBhZnRlciByZXNpemUoKTsgcHJvdGVjdGVkIGJ5IFJUTkwgKi8KIHN0YXRpYyBzdHJ1Y3QgdG5vZGUgKnRub2RlX2ZyZWVfaGVhZDsKK3N0YXRpYyBzaXplX3QgdG5vZGVfZnJlZV9zaXplOworCisvKgorICogc3luY2hyb25pemVfcmN1IGFmdGVyIGNhbGxfcmN1IGZvciB0aGF0IG1hbnkgcGFnZXM7IGl0IHNob3VsZCBiZSBlc3BlY2lhbGx5CisgKiB1c2VmdWwgYmVmb3JlIHJlc2l6aW5nIHRoZSByb290IG5vZGUgd2l0aCBQUkVFTVBUX05PTkUgY29uZmlnczsgdGhlIHZhbHVlIHdhcworICogb2J0YWluZWQgZXhwZXJpbWVudGFsbHksIGFpbWluZyB0byBhdm9pZCB2aXNpYmxlIHNsb3dkb3duLgorICovCitzdGF0aWMgY29uc3QgaW50IHN5bmNfcGFnZXMgPSAxMjg7CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZm5fYWxpYXNfa21lbSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp0cmllX2xlYWZfa21lbSBfX3JlYWRfbW9zdGx5OwpAQCAtMzE3LDggKzMyNSw3IEBACiBzdGF0aWMgY29uc3QgaW50IGhhbHZlX3RocmVzaG9sZCA9IDI1Owogc3RhdGljIGNvbnN0IGludCBpbmZsYXRlX3RocmVzaG9sZCA9IDUwOwogc3RhdGljIGNvbnN0IGludCBoYWx2ZV90aHJlc2hvbGRfcm9vdCA9IDE1Owotc3RhdGljIGNvbnN0IGludCBpbmZsYXRlX3RocmVzaG9sZF9yb290ID0gMjU7Ci0KK3N0YXRpYyBjb25zdCBpbnQgaW5mbGF0ZV90aHJlc2hvbGRfcm9vdCA9IDMwOwogCiBzdGF0aWMgdm9pZCBfX2FsaWFzX2ZyZWVfbWVtKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKQEAgLTM5Myw2ICs0MDAsOCBAQAogCUJVR19PTihJU19MRUFGKHRuKSk7CiAJdG4tPnRub2RlX2ZyZWUgPSB0bm9kZV9mcmVlX2hlYWQ7CiAJdG5vZGVfZnJlZV9oZWFkID0gdG47CisJdG5vZGVfZnJlZV9zaXplICs9IHNpemVvZihzdHJ1Y3QgdG5vZGUpICsKKwkJCSAgIChzaXplb2Yoc3RydWN0IG5vZGUgKikgPDwgdG4tPmJpdHMpOwogfQogCiBzdGF0aWMgdm9pZCB0bm9kZV9mcmVlX2ZsdXNoKHZvaWQpCkBAIC00MDQsNiArNDEzLDExIEBACiAJCXRuLT50bm9kZV9mcmVlID0gTlVMTDsKIAkJdG5vZGVfZnJlZSh0bik7CiAJfQorCisJaWYgKHRub2RlX2ZyZWVfc2l6ZSA+PSBQQUdFX1NJWkUgKiBzeW5jX3BhZ2VzKSB7CisJCXRub2RlX2ZyZWVfc2l6ZSA9IDA7CisJCXN5bmNocm9uaXplX3JjdSgpOworCX0KIH0KIAogc3RhdGljIHN0cnVjdCBsZWFmICpsZWFmX25ldyh2b2lkKQpAQCAtNDk5LDE0ICs1MTMsMTQgQEAKIAlyY3VfYXNzaWduX3BvaW50ZXIodG4tPmNoaWxkW2ldLCBuKTsKIH0KIAorI2RlZmluZSBNQVhfV09SSyAxMAogc3RhdGljIHN0cnVjdCBub2RlICpyZXNpemUoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCB0bm9kZSAqdG4pCiB7CiAJaW50IGk7Ci0JaW50IGVyciA9IDA7CiAJc3RydWN0IHRub2RlICpvbGRfdG47CiAJaW50IGluZmxhdGVfdGhyZXNob2xkX3VzZTsKIAlpbnQgaGFsdmVfdGhyZXNob2xkX3VzZTsKLQlpbnQgbWF4X3Jlc2l6ZTsKKwlpbnQgbWF4X3dvcms7CiAKIAlpZiAoIXRuKQogCQlyZXR1cm4gTlVMTDsKQEAgLTUyMSwxOCArNTM1LDcgQEAKIAl9CiAJLyogT25lIGNoaWxkICovCiAJaWYgKHRuLT5lbXB0eV9jaGlsZHJlbiA9PSB0bm9kZV9jaGlsZF9sZW5ndGgodG4pIC0gMSkKLQkJZm9yIChpID0gMDsgaSA8IHRub2RlX2NoaWxkX2xlbmd0aCh0bik7IGkrKykgewotCQkJc3RydWN0IG5vZGUgKm47Ci0KLQkJCW4gPSB0bi0+Y2hpbGRbaV07Ci0JCQlpZiAoIW4pCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIGNvbXByZXNzIG9uZSBsZXZlbCAqLwotCQkJbm9kZV9zZXRfcGFyZW50KG4sIE5VTEwpOwotCQkJdG5vZGVfZnJlZV9zYWZlKHRuKTsKLQkJCXJldHVybiBuOwotCQl9CisJCWdvdG8gb25lX2NoaWxkOwogCS8qCiAJICogRG91YmxlIGFzIGxvbmcgYXMgdGhlIHJlc3VsdGluZyBub2RlIGhhcyBhIG51bWJlciBvZgogCSAqIG5vbmVtcHR5IG5vZGVzIHRoYXQgYXJlIGFib3ZlIHRoZSB0aHJlc2hvbGQuCkBAIC02MDEsMTQgKzYwNCwxNyBAQAogCiAJLyogS2VlcCByb290IG5vZGUgbGFyZ2VyICAqLwogCi0JaWYgKCF0bi0+cGFyZW50KQorCWlmICghbm9kZV9wYXJlbnQoKHN0cnVjdCBub2RlKikgdG4pKSB7CiAJCWluZmxhdGVfdGhyZXNob2xkX3VzZSA9IGluZmxhdGVfdGhyZXNob2xkX3Jvb3Q7Ci0JZWxzZQorCQloYWx2ZV90aHJlc2hvbGRfdXNlID0gaGFsdmVfdGhyZXNob2xkX3Jvb3Q7CisJfQorCWVsc2UgewogCQlpbmZsYXRlX3RocmVzaG9sZF91c2UgPSBpbmZsYXRlX3RocmVzaG9sZDsKKwkJaGFsdmVfdGhyZXNob2xkX3VzZSA9IGhhbHZlX3RocmVzaG9sZDsKKwl9CiAKLQllcnIgPSAwOwotCW1heF9yZXNpemUgPSAxMDsKLQl3aGlsZSAoKHRuLT5mdWxsX2NoaWxkcmVuID4gMCAmJiAgbWF4X3Jlc2l6ZS0tICYmCisJbWF4X3dvcmsgPSBNQVhfV09SSzsKKwl3aGlsZSAoKHRuLT5mdWxsX2NoaWxkcmVuID4gMCAmJiAgbWF4X3dvcmstLSAmJgogCQk1MCAqICh0bi0+ZnVsbF9jaGlsZHJlbiArIHRub2RlX2NoaWxkX2xlbmd0aCh0bikKIAkJICAgICAgLSB0bi0+ZW1wdHlfY2hpbGRyZW4pCiAJCT49IGluZmxhdGVfdGhyZXNob2xkX3VzZSAqIHRub2RlX2NoaWxkX2xlbmd0aCh0bikpKSB7CkBAIC02MjUsMzUgKzYzMSwxOSBAQAogCQl9CiAJfQogCi0JaWYgKG1heF9yZXNpemUgPCAwKSB7Ci0JCWlmICghdG4tPnBhcmVudCkKLQkJCXByX3dhcm5pbmcoIkZpeCBpbmZsYXRlX3RocmVzaG9sZF9yb290LiIKLQkJCQkgICAiIE5vdz0lZCBzaXplPSVkIGJpdHNcbiIsCi0JCQkJICAgaW5mbGF0ZV90aHJlc2hvbGRfcm9vdCwgdG4tPmJpdHMpOwotCQllbHNlCi0JCQlwcl93YXJuaW5nKCJGaXggaW5mbGF0ZV90aHJlc2hvbGQuIgotCQkJCSAgICIgTm93PSVkIHNpemU9JWQgYml0c1xuIiwKLQkJCQkgICBpbmZsYXRlX3RocmVzaG9sZCwgdG4tPmJpdHMpOwotCX0KLQogCWNoZWNrX3Rub2RlKHRuKTsKIAorCS8qIFJldHVybiBpZiBhdCBsZWFzdCBvbmUgaW5mbGF0ZSBpcyBydW4gKi8KKwlpZiggbWF4X3dvcmsgIT0gTUFYX1dPUkspCisJCXJldHVybiAoc3RydWN0IG5vZGUgKikgdG47CisKIAkvKgogCSAqIEhhbHZlIGFzIGxvbmcgYXMgdGhlIG51bWJlciBvZiBlbXB0eSBjaGlsZHJlbiBpbiB0aGlzCiAJICogbm9kZSBpcyBhYm92ZSB0aHJlc2hvbGQuCiAJICovCiAKLQotCS8qIEtlZXAgcm9vdCBub2RlIGxhcmdlciAgKi8KLQotCWlmICghdG4tPnBhcmVudCkKLQkJaGFsdmVfdGhyZXNob2xkX3VzZSA9IGhhbHZlX3RocmVzaG9sZF9yb290OwotCWVsc2UKLQkJaGFsdmVfdGhyZXNob2xkX3VzZSA9IGhhbHZlX3RocmVzaG9sZDsKLQotCWVyciA9IDA7Ci0JbWF4X3Jlc2l6ZSA9IDEwOwotCXdoaWxlICh0bi0+Yml0cyA+IDEgJiYgIG1heF9yZXNpemUtLSAmJgorCW1heF93b3JrID0gTUFYX1dPUks7CisJd2hpbGUgKHRuLT5iaXRzID4gMSAmJiAgbWF4X3dvcmstLSAmJgogCSAgICAgICAxMDAgKiAodG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSAtIHRuLT5lbXB0eV9jaGlsZHJlbikgPAogCSAgICAgICBoYWx2ZV90aHJlc2hvbGRfdXNlICogdG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSkgewogCkBAIC02NjgsMTkgKzY1OCwxMCBAQAogCQl9CiAJfQogCi0JaWYgKG1heF9yZXNpemUgPCAwKSB7Ci0JCWlmICghdG4tPnBhcmVudCkKLQkJCXByX3dhcm5pbmcoIkZpeCBoYWx2ZV90aHJlc2hvbGRfcm9vdC4iCi0JCQkJICAgIiBOb3c9JWQgc2l6ZT0lZCBiaXRzXG4iLAotCQkJCSAgIGhhbHZlX3RocmVzaG9sZF9yb290LCB0bi0+Yml0cyk7Ci0JCWVsc2UKLQkJCXByX3dhcm5pbmcoIkZpeCBoYWx2ZV90aHJlc2hvbGQuIgotCQkJCSAgICIgTm93PSVkIHNpemU9JWQgYml0c1xuIiwKLQkJCQkgICBoYWx2ZV90aHJlc2hvbGQsIHRuLT5iaXRzKTsKLQl9CiAKIAkvKiBPbmx5IG9uZSBjaGlsZCByZW1haW5zICovCi0JaWYgKHRuLT5lbXB0eV9jaGlsZHJlbiA9PSB0bm9kZV9jaGlsZF9sZW5ndGgodG4pIC0gMSkKKwlpZiAodG4tPmVtcHR5X2NoaWxkcmVuID09IHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLSAxKSB7CitvbmVfY2hpbGQ6CiAJCWZvciAoaSA9IDA7IGkgPCB0bm9kZV9jaGlsZF9sZW5ndGgodG4pOyBpKyspIHsKIAkJCXN0cnVjdCBub2RlICpuOwogCkBAIC02OTQsNyArNjc1LDcgQEAKIAkJCXRub2RlX2ZyZWVfc2FmZSh0bik7CiAJCQlyZXR1cm4gbjsKIAkJfQotCisJfQogCXJldHVybiAoc3RydWN0IG5vZGUgKikgdG47CiB9CiAKQEAgLTE0MzUsNyArMTQxNiw3IEBACiAJCQljaW5kZXggPSB0a2V5X2V4dHJhY3RfYml0cyhtYXNrX3BmeChrZXksIGN1cnJlbnRfcHJlZml4X2xlbmd0aCksCiAJCQkJCQkgICBwb3MsIGJpdHMpOwogCi0JCW4gPSB0bm9kZV9nZXRfY2hpbGQocG4sIGNpbmRleCk7CisJCW4gPSB0bm9kZV9nZXRfY2hpbGRfcmN1KHBuLCBjaW5kZXgpOwogCiAJCWlmIChuID09IE5VTEwpIHsKICNpZmRlZiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMKQEAgLTE1NzAsNyArMTU1MSw3IEBACiAJCWlmIChjaG9wcGVkX29mZiA8PSBwbi0+Yml0cykgewogCQkJY2luZGV4ICY9IH4oMSA8PCAoY2hvcHBlZF9vZmYtMSkpOwogCQl9IGVsc2UgewotCQkJc3RydWN0IHRub2RlICpwYXJlbnQgPSBub2RlX3BhcmVudCgoc3RydWN0IG5vZGUgKikgcG4pOworCQkJc3RydWN0IHRub2RlICpwYXJlbnQgPSBub2RlX3BhcmVudF9yY3UoKHN0cnVjdCBub2RlICopIHBuKTsKIAkJCWlmICghcGFyZW50KQogCQkJCWdvdG8gZmFpbGVkOwogCkBAIC0xNzgzLDcgKzE3NjQsNyBAQAogc3RhdGljIHN0cnVjdCBsZWFmICp0cmllX25leHRsZWFmKHN0cnVjdCBsZWFmICpsKQogewogCXN0cnVjdCBub2RlICpjID0gKHN0cnVjdCBub2RlICopIGw7Ci0Jc3RydWN0IHRub2RlICpwID0gbm9kZV9wYXJlbnQoYyk7CisJc3RydWN0IHRub2RlICpwID0gbm9kZV9wYXJlbnRfcmN1KGMpOwogCiAJaWYgKCFwKQogCQlyZXR1cm4gTlVMTDsJLyogdHJpZSB3aXRoIGp1c3Qgb25lIGxlYWYgKi8KQEAgLTIzOTEsNyArMjM3Miw3IEBACiAJfQogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqcnRuX3R5cGVfbmFtZXNbX19SVE5fTUFYXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBydG5fdHlwZV9uYW1lc1tfX1JUTl9NQVhdID0gewogCVtSVE5fVU5TUEVDXSA9ICJVTlNQRUMiLAogCVtSVE5fVU5JQ0FTVF0gPSAiVU5JQ0FTVCIsCiAJW1JUTl9MT0NBTF0gPSAiTE9DQUwiLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYwppbmRleCA2MTI4M2Y5Li4xM2YwNzgxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYwpAQCAtMjE4LDggKzIxOCw4IEBACiAJCS8qIFdlIHB1cmdlZCB0aGUgZW50aXJlIHNsb3QsIGFueXRoaW5nIGxlZnQ/ICAqLwogCQlpZiAodHdkci0+dHdfY291bnQpCiAJCQluZWVkX3RpbWVyID0gMTsKKwkJdHdkci0+c2xvdCA9ICgodHdkci0+c2xvdCArIDEpICYgKElORVRfVFdEUl9UV0tJTExfU0xPVFMgLSAxKSk7CiAJfQotCXR3ZHItPnNsb3QgPSAoKHR3ZHItPnNsb3QgKyAxKSAmIChJTkVUX1RXRFJfVFdLSUxMX1NMT1RTIC0gMSkpOwogCWlmIChuZWVkX3RpbWVyKQogCQltb2RfdGltZXIoJnR3ZHItPnR3X3RpbWVyLCBqaWZmaWVzICsgdHdkci0+cGVyaW9kKTsKIG91dDoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggODJjMTFkZC4uNTMzYWZhYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTY2Miw3ICs2NjIsNyBAQAogCXJldHVybigwKTsKIH0KIAotc3RhdGljIGludCBpcGdyZV90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdHVubmVsLT5kZXYtPnN0YXRzOwpAQCAtODIxLDcgKzgyMSw3IEBACiAJCQlzdGF0cy0+dHhfZHJvcHBlZCsrOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJdHVubmVsLT5yZWN1cnNpb24tLTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCQlpZiAoc2tiLT5zaykKIAkJCXNrYl9zZXRfb3duZXJfdyhuZXdfc2tiLCBza2ItPnNrKTsKQEAgLTg4OSw3ICs4ODksNyBAQAogCiAJSVBUVU5ORUxfWE1JVCgpOwogCXR1bm5lbC0+cmVjdXJzaW9uLS07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogdHhfZXJyb3JfaWNtcDoKIAlkc3RfbGlua19mYWlsdXJlKHNrYik7CkBAIC04OTgsNyArODk4LDcgQEAKIAlzdGF0cy0+dHhfZXJyb3JzKys7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXR1bm5lbC0+cmVjdXJzaW9uLS07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBpcGdyZV90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggN2ZmY2Q5Ni4uOWZlNWQ3YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTEzMDQsNyArMTMwNCw3IEBACiAJZXJyID0gaXBfbG9jYWxfb3V0KHNrYik7CiAJaWYgKGVycikgewogCQlpZiAoZXJyID4gMCkKLQkJCWVyciA9IGluZXQtPnJlY3ZlcnIgPyBuZXRfeG1pdF9lcnJubyhlcnIpIDogMDsKKwkJCWVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycm9yOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCA5M2UyYjc4Li42MjU0OGNiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKKysrIGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0zODcsNyArMzg3LDcgQEAKICAqCWFuZCB0aGF0IHNrYiBpcyBmaWxsZWQgcHJvcGVybHkgYnkgdGhhdCBmdW5jdGlvbi4KICAqLwogCi1zdGF0aWMgaW50IGlwaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBpcGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdHVubmVsLT5kZXYtPnN0YXRzOwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAJCQlzdGF0cy0+dHhfZHJvcHBlZCsrOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJdHVubmVsLT5yZWN1cnNpb24tLTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCQlpZiAoc2tiLT5zaykKIAkJCXNrYl9zZXRfb3duZXJfdyhuZXdfc2tiLCBza2ItPnNrKTsKQEAgLTUyNCw3ICs1MjQsNyBAQAogCiAJSVBUVU5ORUxfWE1JVCgpOwogCXR1bm5lbC0+cmVjdXJzaW9uLS07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogdHhfZXJyb3JfaWNtcDoKIAlkc3RfbGlua19mYWlsdXJlKHNrYik7CkBAIC01MzIsNyArNTMyLDcgQEAKIAlzdGF0cy0+dHhfZXJyb3JzKys7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXR1bm5lbC0+cmVjdXJzaW9uLS07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgaXBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCA5YThkYTVlLi42NWQ0MjFjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAogI2lmZGVmIENPTkZJR19JUF9QSU1TTQogCi1zdGF0aWMgaW50IHJlZ192aWZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHJlZ192aWZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIApAQCAtMjEyLDcgKzIxMiw3IEBACiAJCQkgIElHTVBNU0dfV0hPTEVQS1QpOwogCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiAJa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyByZWdfdmlmX25ldGRldl9vcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCA3NTA1ZGZmLi4yNzc3NGM5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTgsNyArOCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQogICoKICAqLwotCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CkBAIC0zNDEsMTUgKzM0MSwxMSBAQAogfQogCiAvKiBBbGwgemVyb2VzID09IHVuY29uZGl0aW9uYWwgcnVsZS4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVuY29uZGl0aW9uYWwoY29uc3Qgc3RydWN0IGFycHRfYXJwICphcnApCitzdGF0aWMgaW5saW5lIGJvb2wgdW5jb25kaXRpb25hbChjb25zdCBzdHJ1Y3QgYXJwdF9hcnAgKmFycCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGFycHRfYXJwIHVuY29uZDsKIAotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoKmFycCkvc2l6ZW9mKF9fdTMyKTsgaSsrKQotCQlpZiAoKChfX3UzMiAqKWFycClbaV0pCi0JCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOworCXJldHVybiBtZW1jbXAoYXJwLCAmdW5jb25kLCBzaXplb2YodW5jb25kKSkgPT0gMDsKIH0KIAogLyogRmlndXJlcyBvdXQgZnJvbSB3aGF0IGhvb2sgZWFjaCBydWxlIGNhbiBiZSBjYWxsZWQ6IHJldHVybnMgMCBpZgpAQCAtNTM3LDEyICs1MzMsMjggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgYm9vbCBjaGVja191bmRlcmZsb3coc3RydWN0IGFycHRfZW50cnkgKmUpCit7CisJY29uc3Qgc3RydWN0IGFycHRfZW50cnlfdGFyZ2V0ICp0OworCXVuc2lnbmVkIGludCB2ZXJkaWN0OworCisJaWYgKCF1bmNvbmRpdGlvbmFsKCZlLT5hcnApKQorCQlyZXR1cm4gZmFsc2U7CisJdCA9IGFycHRfZ2V0X3RhcmdldChlKTsKKwlpZiAoc3RyY21wKHQtPnUudXNlci5uYW1lLCBYVF9TVEFOREFSRF9UQVJHRVQpICE9IDApCisJCXJldHVybiBmYWxzZTsKKwl2ZXJkaWN0ID0gKChzdHJ1Y3QgYXJwdF9zdGFuZGFyZF90YXJnZXQgKil0KS0+dmVyZGljdDsKKwl2ZXJkaWN0ID0gLXZlcmRpY3QgLSAxOworCXJldHVybiB2ZXJkaWN0ID09IE5GX0RST1AgfHwgdmVyZGljdCA9PSBORl9BQ0NFUFQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2VudHJ5X3NpemVfYW5kX2hvb2tzKHN0cnVjdCBhcnB0X2VudHJ5ICplLAogCQkJCQkgICAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLAogCQkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmJhc2UsCiAJCQkJCSAgICAgdW5zaWduZWQgY2hhciAqbGltaXQsCiAJCQkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50ICpob29rX2VudHJpZXMsCiAJCQkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJdW5zaWduZWQgaW50IGg7CkBAIC01NjIsMTUgKzU3NCwyMSBAQAogCiAJLyogQ2hlY2sgaG9va3MgJiB1bmRlcmZsb3dzICovCiAJZm9yIChoID0gMDsgaCA8IE5GX0FSUF9OVU1IT09LUzsgaCsrKSB7CisJCWlmICghKHZhbGlkX2hvb2tzICYgKDEgPDwgaCkpKQorCQkJY29udGludWU7CiAJCWlmICgodW5zaWduZWQgY2hhciAqKWUgLSBiYXNlID09IGhvb2tfZW50cmllc1toXSkKIAkJCW5ld2luZm8tPmhvb2tfZW50cnlbaF0gPSBob29rX2VudHJpZXNbaF07Ci0JCWlmICgodW5zaWduZWQgY2hhciAqKWUgLSBiYXNlID09IHVuZGVyZmxvd3NbaF0pCisJCWlmICgodW5zaWduZWQgY2hhciAqKWUgLSBiYXNlID09IHVuZGVyZmxvd3NbaF0pIHsKKwkJCWlmICghY2hlY2tfdW5kZXJmbG93KGUpKSB7CisJCQkJcHJfZXJyKCJVbmRlcmZsb3dzIG11c3QgYmUgdW5jb25kaXRpb25hbCBhbmQgIgorCQkJCSAgICAgICAidXNlIHRoZSBTVEFOREFSRCB0YXJnZXQgd2l0aCAiCisJCQkJICAgICAgICJBQ0NFUFQvRFJPUFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CiAJCQluZXdpbmZvLT51bmRlcmZsb3dbaF0gPSB1bmRlcmZsb3dzW2hdOworCQl9CiAJfQogCi0JLyogRklYTUU6IHVuZGVyZmxvd3MgbXVzdCBiZSB1bmNvbmRpdGlvbmFsLCBzdGFuZGFyZCB2ZXJkaWN0cwotCSAgIDwgMCAobm90IEFSUFRfUkVUVVJOKS4gLS1SUiAqLwotCiAJLyogQ2xlYXIgY291bnRlcnMgYW5kIGNvbWVmcm9tICovCiAJZS0+Y291bnRlcnMgPSAoKHN0cnVjdCB4dF9jb3VudGVycykgeyAwLCAwIH0pOwogCWUtPmNvbWVmcm9tID0gMDsKQEAgLTYzMCw3ICs2NDgsNyBAQAogCQkJCSBuZXdpbmZvLAogCQkJCSBlbnRyeTAsCiAJCQkJIGVudHJ5MCArIHNpemUsCi0JCQkJIGhvb2tfZW50cmllcywgdW5kZXJmbG93cywgJmkpOworCQkJCSBob29rX2VudHJpZXMsIHVuZGVyZmxvd3MsIHZhbGlkX2hvb2tzLCAmaSk7CiAJZHVwcmludGYoInRyYW5zbGF0ZV90YWJsZTogQVJQVF9FTlRSWV9JVEVSQVRFIGdpdmVzICVkXG4iLCByZXQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTE3NjAsNyArMTc3OCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RydWN0IHh0X3RhYmxlICphcnB0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHh0X3RhYmxlICp0YWJsZSwKK3N0cnVjdCB4dF90YWJsZSAqYXJwdF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGFycHRfcmVwbGFjZSAqcmVwbCkKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCmluZGV4IDZlY2ZkYWUuLjk3MzM3NjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNkZWZpbmUgRklMVEVSX1ZBTElEX0hPT0tTICgoMSA8PCBORl9BUlBfSU4pIHwgKDEgPDwgTkZfQVJQX09VVCkgfCBcCiAJCQkgICAoMSA8PCBORl9BUlBfRk9SV0FSRCkpCiAKLXN0YXRpYyBzdHJ1Y3QKK3N0YXRpYyBjb25zdCBzdHJ1Y3QKIHsKIAlzdHJ1Y3QgYXJwdF9yZXBsYWNlIHJlcGw7CiAJc3RydWN0IGFycHRfc3RhbmRhcmQgZW50cmllc1szXTsKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkudGVybSA9IEFSUFRfRVJST1JfSU5JVCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X2ZpbHRlciA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X2ZpbHRlciA9IHsKIAkubmFtZQkJPSAiZmlsdGVyIiwKIAkudmFsaWRfaG9va3MJPSBGSUxURVJfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCmluZGV4IGZkZWZhZTYuLmNkZTc1NWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKQEAgLTgsNiArOCw3IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTE5MCwxNiArMTkxLDExIEBACiAKIC8qIEFsbCB6ZXJvZXMgPT0gdW5jb25kaXRpb25hbCBydWxlLiAqLwogLyogTWlsZGx5IHBlcmYgY3JpdGljYWwgKG9ubHkgaWYgcGFja2V0IHRyYWNpbmcgaXMgb24pICovCi1zdGF0aWMgaW5saW5lIGludAotdW5jb25kaXRpb25hbChjb25zdCBzdHJ1Y3QgaXB0X2lwICppcCkKK3N0YXRpYyBpbmxpbmUgYm9vbCB1bmNvbmRpdGlvbmFsKGNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwKQogewotCXVuc2lnbmVkIGludCBpOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXB0X2lwIHVuY29uZDsKIAotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoKmlwKS9zaXplb2YoX191MzIpOyBpKyspCi0JCWlmICgoKF9fdTMyICopaXApW2ldKQotCQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKKwlyZXR1cm4gbWVtY21wKGlwLCAmdW5jb25kLCBzaXplb2YodW5jb25kKSkgPT0gMDsKICN1bmRlZiBGV0lOVgogfQogCkBAIC0zMTUsNyArMzExLDYgQEAKIAogCXN0YXRpYyBjb25zdCBjaGFyIG51bGxkZXZuYW1lW0lGTkFNU0laXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsKIAljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwOwotCXVfaW50MTZfdCBkYXRhbGVuOwogCWJvb2wgaG90ZHJvcCA9IGZhbHNlOwogCS8qIEluaXRpYWxpemluZyB2ZXJkaWN0IHRvIE5GX0RST1Aga2VlcHMgZ2NjIGhhcHB5LiAqLwogCXVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDsKQEAgLTMyOCw3ICszMjMsNiBAQAogCiAJLyogSW5pdGlhbGl6YXRpb24gKi8KIAlpcCA9IGlwX2hkcihza2IpOwotCWRhdGFsZW4gPSBza2ItPmxlbiAtIGlwLT5paGwgKiA0OwogCWluZGV2ID0gaW4gPyBpbi0+bmFtZSA6IG51bGxkZXZuYW1lOwogCW91dGRldiA9IG91dCA/IG91dC0+bmFtZSA6IG51bGxkZXZuYW1lOwogCS8qIFdlIGhhbmRsZSBmcmFnbWVudHMgYnkgZGVhbGluZyB3aXRoIHRoZSBmaXJzdCBmcmFnbWVudCBhcwpAQCAtNDI3LDggKzQyMSw2IEBACiAjZW5kaWYKIAkJLyogVGFyZ2V0IG1pZ2h0IGhhdmUgY2hhbmdlZCBzdHVmZi4gKi8KIAkJaXAgPSBpcF9oZHIoc2tiKTsKLQkJZGF0YWxlbiA9IHNrYi0+bGVuIC0gaXAtPmlobCAqIDQ7Ci0KIAkJaWYgKHZlcmRpY3QgPT0gSVBUX0NPTlRJTlVFKQogCQkJZSA9IGlwdF9uZXh0X2VudHJ5KGUpOwogCQllbHNlCkBAIC03MTYsNiArNzA4LDIxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGJvb2wgY2hlY2tfdW5kZXJmbG93KHN0cnVjdCBpcHRfZW50cnkgKmUpCit7CisJY29uc3Qgc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CisJdW5zaWduZWQgaW50IHZlcmRpY3Q7CisKKwlpZiAoIXVuY29uZGl0aW9uYWwoJmUtPmlwKSkKKwkJcmV0dXJuIGZhbHNlOworCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKKwlpZiAoc3RyY21wKHQtPnUudXNlci5uYW1lLCBYVF9TVEFOREFSRF9UQVJHRVQpICE9IDApCisJCXJldHVybiBmYWxzZTsKKwl2ZXJkaWN0ID0gKChzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCAqKXQpLT52ZXJkaWN0OworCXZlcmRpY3QgPSAtdmVyZGljdCAtIDE7CisJcmV0dXJuIHZlcmRpY3QgPT0gTkZfRFJPUCB8fCB2ZXJkaWN0ID09IE5GX0FDQ0VQVDsKK30KKwogc3RhdGljIGludAogY2hlY2tfZW50cnlfc2l6ZV9hbmRfaG9va3Moc3RydWN0IGlwdF9lbnRyeSAqZSwKIAkJCSAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLApAQCAtNzIzLDYgKzczMCw3IEBACiAJCQkgICB1bnNpZ25lZCBjaGFyICpsaW1pdCwKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAogCQkJICAgY29uc3QgdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzLAorCQkJICAgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLAogCQkJICAgdW5zaWduZWQgaW50ICppKQogewogCXVuc2lnbmVkIGludCBoOwpAQCAtNzQyLDE1ICs3NTAsMjEgQEAKIAogCS8qIENoZWNrIGhvb2tzICYgdW5kZXJmbG93cyAqLwogCWZvciAoaCA9IDA7IGggPCBORl9JTkVUX05VTUhPT0tTOyBoKyspIHsKKwkJaWYgKCEodmFsaWRfaG9va3MgJiAoMSA8PCBoKSkpCisJCQljb250aW51ZTsKIAkJaWYgKCh1bnNpZ25lZCBjaGFyICopZSAtIGJhc2UgPT0gaG9va19lbnRyaWVzW2hdKQogCQkJbmV3aW5mby0+aG9va19lbnRyeVtoXSA9IGhvb2tfZW50cmllc1toXTsKLQkJaWYgKCh1bnNpZ25lZCBjaGFyICopZSAtIGJhc2UgPT0gdW5kZXJmbG93c1toXSkKKwkJaWYgKCh1bnNpZ25lZCBjaGFyICopZSAtIGJhc2UgPT0gdW5kZXJmbG93c1toXSkgeworCQkJaWYgKCFjaGVja191bmRlcmZsb3coZSkpIHsKKwkJCQlwcl9lcnIoIlVuZGVyZmxvd3MgbXVzdCBiZSB1bmNvbmRpdGlvbmFsIGFuZCAiCisJCQkJICAgICAgICJ1c2UgdGhlIFNUQU5EQVJEIHRhcmdldCB3aXRoICIKKwkJCQkgICAgICAgIkFDQ0VQVC9EUk9QXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KIAkJCW5ld2luZm8tPnVuZGVyZmxvd1toXSA9IHVuZGVyZmxvd3NbaF07CisJCX0KIAl9CiAKLQkvKiBGSVhNRTogdW5kZXJmbG93cyBtdXN0IGJlIHVuY29uZGl0aW9uYWwsIHN0YW5kYXJkIHZlcmRpY3RzCi0JICAgPCAwIChub3QgSVBUX1JFVFVSTikuIC0tUlIgKi8KLQogCS8qIENsZWFyIGNvdW50ZXJzIGFuZCBjb21lZnJvbSAqLwogCWUtPmNvdW50ZXJzID0gKChzdHJ1Y3QgeHRfY291bnRlcnMpIHsgMCwgMCB9KTsKIAllLT5jb21lZnJvbSA9IDA7CkBAIC04MTMsNyArODI3LDcgQEAKIAkJCQluZXdpbmZvLAogCQkJCWVudHJ5MCwKIAkJCQllbnRyeTAgKyBzaXplLAotCQkJCWhvb2tfZW50cmllcywgdW5kZXJmbG93cywgJmkpOworCQkJCWhvb2tfZW50cmllcywgdW5kZXJmbG93cywgdmFsaWRfaG9va3MsICZpKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTIwNTEsNyArMjA2NSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RydWN0IHh0X3RhYmxlICppcHRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAorc3RydWN0IHh0X3RhYmxlICppcHRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgaXB0X3JlcGxhY2UgKnJlcGwpCiB7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKaW5kZXggYzMwYTk2OS4uZGY1NjZjYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKQEAgLTUzLDExICs1MywxMSBAQAogCS50ZXJtID0gSVBUX0VSUk9SX0lOSVQsCQkJLyogRVJST1IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X2ZpbHRlciA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X2ZpbHRlciA9IHsKIAkubmFtZQkJPSAiZmlsdGVyIiwKIAkudmFsaWRfaG9va3MJPSBGSUxURVJfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAotCS5hZgkJPSBBRl9JTkVULAorCS5hZgkJPSBORlBST1RPX0lQVjQsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCkBAIC0xMDIsMjEgKzEwMiwyMSBAQAogCXsKIAkJLmhvb2sJCT0gaXB0X2xvY2FsX2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0ZJTFRFUiwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXB0X2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9GT1JXQVJELAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfRklMVEVSLAogCX0sCiAJewogCQkuaG9vawkJPSBpcHRfbG9jYWxfb3V0X2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCiAJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9GSUxURVIsCiAJfSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMKaW5kZXggNDA4NzYxNC4uMDM2MDQ3ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAkJCSAgICAoMSA8PCBORl9JTkVUX1BPU1RfUk9VVElORykpCiAKIC8qIE91Y2ggLSBmaXZlIGRpZmZlcmVudCBob29rcz8gTWF5YmUgdGhpcyBzaG91bGQgYmUgYSBjb25maWcgb3B0aW9uLi4uLi4gLS0gQkMgKi8KLXN0YXRpYyBzdHJ1Y3QKK3N0YXRpYyBjb25zdCBzdHJ1Y3QKIHsKIAlzdHJ1Y3QgaXB0X3JlcGxhY2UgcmVwbDsKIAlzdHJ1Y3QgaXB0X3N0YW5kYXJkIGVudHJpZXNbNV07CkBAIC02NCwxMSArNjQsMTEgQEAKIAkudGVybSA9IElQVF9FUlJPUl9JTklULAkJCS8qIEVSUk9SICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9tYW5nbGVyID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfbWFuZ2xlciA9IHsKIAkubmFtZQkJPSAibWFuZ2xlIiwKIAkudmFsaWRfaG9va3MJPSBNQU5HTEVfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAotCS5hZgkJPSBBRl9JTkVULAorCS5hZgkJPSBORlBST1RPX0lQVjQsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCkBAIC0xNjIsMzUgKzE2MiwzNSBAQAogCXsKIAkJLmhvb2sJCT0gaXB0X3ByZV9yb3V0aW5nX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9QUkVfUk9VVElORywKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX01BTkdMRSwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXB0X2xvY2FsX2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX01BTkdMRSwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXB0X2ZvcndhcmRfaG9vaywKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVCwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0ZPUldBUkQsCiAJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9NQU5HTEUsCiAJfSwKIAl7CiAJCS5ob29rCQk9IGlwdF9sb2NhbF9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVULAorCQkucGYJCT0gTkZQUk9UT19JUFY0LAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfT1VULAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTUFOR0xFLAogCX0sCiAJewogCQkuaG9vawkJPSBpcHRfcG9zdF9yb3V0aW5nX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9QT1NUX1JPVVRJTkcsCiAJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9NQU5HTEUsCiAJfSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKaW5kZXggZTUzNTZkYS4uOTkzZWRjMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKQEAgLTksNyArOSw3IEBACiAKICNkZWZpbmUgUkFXX1ZBTElEX0hPT0tTICgoMSA8PCBORl9JTkVUX1BSRV9ST1VUSU5HKSB8ICgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKSkKIAotc3RhdGljIHN0cnVjdAorc3RhdGljIGNvbnN0IHN0cnVjdAogewogCXN0cnVjdCBpcHRfcmVwbGFjZSByZXBsOwogCXN0cnVjdCBpcHRfc3RhbmRhcmQgZW50cmllc1syXTsKQEAgLTM2LDExICszNiwxMSBAQAogCS50ZXJtID0gSVBUX0VSUk9SX0lOSVQsCQkJLyogRVJST1IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X3JhdyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X3JhdyA9IHsKIAkubmFtZSA9ICJyYXciLAogCS52YWxpZF9ob29rcyA9ICBSQVdfVkFMSURfSE9PS1MsCiAJLm1lID0gVEhJU19NT0RVTEUsCi0JLmFmID0gQUZfSU5FVCwKKwkuYWYgPSBORlBST1RPX0lQVjQsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCkBAIC03NCwxNCArNzQsMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB0X29wc1tdIF9fcmVhZF9tb3N0bHkgPSB7CiAJewogCQkuaG9vayA9IGlwdF9ob29rLAotCQkucGYgPSBQRl9JTkVULAorCQkucGYgPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtID0gTkZfSU5FVF9QUkVfUk9VVElORywKIAkJLnByaW9yaXR5ID0gTkZfSVBfUFJJX1JBVywKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CiAJCS5ob29rID0gaXB0X2xvY2FsX2hvb2ssCi0JCS5wZiA9IFBGX0lORVQsCisJCS5wZiA9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0gPSBORl9JTkVUX0xPQ0FMX09VVCwKIAkJLnByaW9yaXR5ID0gTkZfSVBfUFJJX1JBVywKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYwppbmRleCAyOWFiNjMwLi45OWViNzZjNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jCkBAIC0yNyw3ICsyNyw3IEBACiAJCQkJKDEgPDwgTkZfSU5FVF9GT1JXQVJEKSB8IFwKIAkJCQkoMSA8PCBORl9JTkVUX0xPQ0FMX09VVCkKIAotc3RhdGljIHN0cnVjdAorc3RhdGljIGNvbnN0IHN0cnVjdAogewogCXN0cnVjdCBpcHRfcmVwbGFjZSByZXBsOwogCXN0cnVjdCBpcHRfc3RhbmRhcmQgZW50cmllc1szXTsKQEAgLTU3LDExICs1NywxMSBAQAogCS50ZXJtID0gSVBUX0VSUk9SX0lOSVQsCQkJLyogRVJST1IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgc2VjdXJpdHlfdGFibGUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHNlY3VyaXR5X3RhYmxlID0gewogCS5uYW1lCQk9ICJzZWN1cml0eSIsCiAJLnZhbGlkX2hvb2tzCT0gU0VDVVJJVFlfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAotCS5hZgkJPSBBRl9JTkVULAorCS5hZgkJPSBORlBST1RPX0lQVjQsCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50CkBAIC0xMDUsMjEgKzEwNSwyMSBAQAogCXsKIAkJLmhvb2sJCT0gaXB0X2xvY2FsX2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX1NFQ1VSSVRZLAogCX0sCiAJewogCQkuaG9vawkJPSBpcHRfZm9yd2FyZF9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVULAorCQkucGYJCT0gTkZQUk9UT19JUFY0LAogCQkuaG9va251bQk9IE5GX0lORVRfRk9SV0FSRCwKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX1NFQ1VSSVRZLAogCX0sCiAJewogCQkuaG9vawkJPSBpcHRfbG9jYWxfb3V0X2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCiAJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9TRUNVUklUWSwKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKaW5kZXggN2QyZWFkNy4uYWE5NWJiOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pcHY0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY0L25mX2RlZnJhZ19pcHY0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9sb2cuaD4KIAogaW50ICgqbmZfbmF0X3NlcV9hZGp1c3RfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKQEAgLTExMyw4ICsxMTQsMTEgQEAKIAogCXJldCA9IGhlbHBlci0+aGVscChza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpICsgaXBfaGRybGVuKHNrYiksCiAJCQkgICBjdCwgY3RpbmZvKTsKLQlpZiAocmV0ICE9IE5GX0FDQ0VQVCkKKwlpZiAocmV0ICE9IE5GX0FDQ0VQVCkgeworCQluZl9sb2dfcGFja2V0KE5GUFJPVE9fSVBWNCwgaG9va251bSwgc2tiLCBpbiwgb3V0LCBOVUxMLAorCQkJICAgICAgIm5mX2N0XyVzOiBkcm9wcGluZyBwYWNrZXQiLCBoZWxwZXItPm5hbWUpOwogCQlyZXR1cm4gcmV0OworCX0KIAogCWlmICh0ZXN0X2JpdChJUFNfU0VRX0FESlVTVF9CSVQsICZjdC0+c3RhdHVzKSkgewogCQl0eXBlb2YobmZfbmF0X3NlcV9hZGp1c3RfaG9vaykgc2VxX2FkanVzdDsKQEAgLTE1OCwyOCArMTYyLDI4IEBACiAJewogCQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19pbiwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVCwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX1BSRV9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLLAogCX0sCiAJewogCQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19sb2NhbCwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVCwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXB2NF9jb25maXJtLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVULAorCQkucGYJCT0gTkZQUk9UT19JUFY0LAogCQkuaG9va251bQk9IE5GX0lORVRfUE9TVF9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCiAJfSwKIAl7CiAJCS5ob29rCQk9IGlwdjRfY29uZmlybSwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVCwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCiAJfSwKQEAgLTI1NiwxMSArMjYwLDExIEBACiAJdHVwbGUuZHN0LnUzLmlwID0gaW5ldC0+ZGFkZHI7CiAJdHVwbGUuZHN0LnUudGNwLnBvcnQgPSBpbmV0LT5kcG9ydDsKIAl0dXBsZS5zcmMubDNudW0gPSBQRl9JTkVUOwotCXR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVENQOworCXR1cGxlLmRzdC5wcm90b251bSA9IHNrLT5za19wcm90b2NvbDsKIAotCS8qIFdlIG9ubHkgZG8gVENQIGF0IHRoZSBtb21lbnQ6IGlzIHRoZXJlIGEgYmV0dGVyIHdheT8gKi8KLQlpZiAoc3RyY21wKHNrLT5za19wcm90LT5uYW1lLCAiVENQIikpIHsKLQkJcHJfZGVidWcoIlNPX09SSUdJTkFMX0RTVDogTm90IGEgVENQIHNvY2tldFxuIik7CisJLyogV2Ugb25seSBkbyBUQ1AgYW5kIFNDVFAgYXQgdGhlIG1vbWVudDogaXMgdGhlcmUgYSBiZXR0ZXIgd2F5PyAqLworCWlmIChzay0+c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJiYgc2stPnNrX3Byb3RvY29sICE9IElQUFJPVE9fU0NUUCkgeworCQlwcl9kZWJ1ZygiU09fT1JJR0lOQUxfRFNUOiBOb3QgYSBUQ1AvU0NUUCBzb2NrZXRcbiIpOwogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwppbmRleCAzMjI5ZTBhLi42OGFmYzZlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAJbWF4aXAgPSBudG9obChyYW5nZS0+bWF4X2lwKTsKIAlqID0gamhhc2hfMndvcmRzKChfX2ZvcmNlIHUzMil0dXBsZS0+c3JjLnUzLmlwLAogCQkJIHJhbmdlLT5mbGFncyAmIElQX05BVF9SQU5HRV9QRVJTSVNURU5UID8KLQkJCQkoX19mb3JjZSB1MzIpdHVwbGUtPmRzdC51My5pcCA6IDAsIDApOworCQkJCTAgOiAoX19mb3JjZSB1MzIpdHVwbGUtPmRzdC51My5pcCwgMCk7CiAJaiA9ICgodTY0KWogKiAobWF4aXAgLSBtaW5pcCArIDEpKSA+PiAzMjsKIAkqdmFyX2lwcCA9IGh0b25sKG1pbmlwICsgaik7CiB9CkBAIC02MjAsNyArNjIwLDcgQEAKIH07CiAKIHN0YXRpYyBpbnQKLW5mbmV0bGlua19wYXJzZV9uYXQoc3RydWN0IG5sYXR0ciAqbmF0LAorbmZuZXRsaW5rX3BhcnNlX25hdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpuYXQsCiAJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKQogewogCXN0cnVjdCBubGF0dHIgKnRiW0NUQV9OQVRfTUFYKzFdOwpAQCAtNjU2LDcgKzY1Niw3IEBACiBzdGF0aWMgaW50CiBuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKLQkJCSAgc3RydWN0IG5sYXR0ciAqYXR0cikKKwkJCSAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cikKIHsKIAlzdHJ1Y3QgbmZfbmF0X3JhbmdlIHJhbmdlOwogCkBAIC02NzEsNyArNjcxLDcgQEAKIHN0YXRpYyBpbnQKIG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXAoc3RydWN0IG5mX2Nvbm4gKmN0LAogCQkJICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwLAotCQkJICBzdHJ1Y3QgbmxhdHRyICphdHRyKQorCQkJICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKQogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKaW5kZXggNjM0OGE3OS4uOWU4MWUwZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAkJCSAoMSA8PCBORl9JTkVUX1BPU1RfUk9VVElORykgfCBcCiAJCQkgKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpKQogCi1zdGF0aWMgc3RydWN0CitzdGF0aWMgY29uc3Qgc3RydWN0CiB7CiAJc3RydWN0IGlwdF9yZXBsYWNlIHJlcGw7CiAJc3RydWN0IGlwdF9zdGFuZGFyZCBlbnRyaWVzWzNdOwpAQCAtNTgsMTEgKzU4LDExIEBACiAJLnRlcm0gPSBJUFRfRVJST1JfSU5JVCwJCQkvKiBFUlJPUiAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB4dF90YWJsZSBuYXRfdGFibGUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIG5hdF90YWJsZSA9IHsKIAkubmFtZQkJPSAibmF0IiwKIAkudmFsaWRfaG9va3MJPSBOQVRfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAotCS5hZgkJPSBBRl9JTkVULAorCS5hZgkJPSBORlBST1RPX0lQVjQsCiB9OwogCiAvKiBTb3VyY2UgTkFUICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3N0YW5kYWxvbmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCmluZGV4IDU1NjdiZDAuLjVmNDFkMDEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCkBAIC0yNTEsNyArMjUxLDcgQEAKIAl7CiAJCS5ob29rCQk9IG5mX25hdF9pbiwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVCwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX1BSRV9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCwKIAl9LApAQCAtMjU5LDcgKzI1OSw3IEBACiAJewogCQkuaG9vawkJPSBuZl9uYXRfb3V0LAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVULAorCQkucGYJCT0gTkZQUk9UT19JUFY0LAogCQkuaG9va251bQk9IE5GX0lORVRfUE9TVF9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKIAl9LApAQCAtMjY3LDcgKzI2Nyw3IEBACiAJewogCQkuaG9vawkJPSBuZl9uYXRfbG9jYWxfZm4sCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCiAJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfRFNULAogCX0sCkBAIC0yNzUsNyArMjc1LDcgQEAKIAl7CiAJCS5ob29rCQk9IG5mX25hdF9mbiwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVCwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcHJvdG9jb2wuYyBiL25ldC9pcHY0L3Byb3RvY29sLmMKaW5kZXggZWE1MGRhMC4uYTJlNWZjMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcHJvdG9jb2wuYworKysgYi9uZXQvaXB2NC9wcm90b2NvbC5jCkBAIC0yMiwyNiArMjIsMTEgQEAKICAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0jaW5jbHVkZSA8bmV0L2ljbXAuaD4KLSNpbmNsdWRlIDxuZXQvdWRwLmg+Ci0jaW5jbHVkZSA8bmV0L2lwaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pZ21wLmg+CiAKIHN0cnVjdCBuZXRfcHJvdG9jb2wgKmluZXRfcHJvdG9zW01BWF9JTkVUX1BST1RPU10gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaW5ldF9wcm90b19sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Jhdy5jIGIvbmV0L2lwdjQvcmF3LmMKaW5kZXggMjk3OWYxNC4uZWJiMWU1OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcmF3LmMKKysrIGIvbmV0L2lwdjQvcmF3LmMKQEAgLTM3NSw3ICszNzUsNyBAQAogCWVyciA9IE5GX0hPT0soUEZfSU5FVCwgTkZfSU5FVF9MT0NBTF9PVVQsIHNrYiwgTlVMTCwgcnQtPnUuZHN0LmRldiwKIAkJICAgICAgZHN0X291dHB1dCk7CiAJaWYgKGVyciA+IDApCi0JCWVyciA9IGluZXQtPnJlY3ZlcnIgPyBuZXRfeG1pdF9lcnJubyhlcnIpIDogMDsKKwkJZXJyID0gbmV0X3htaXRfZXJybm8oZXJyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogb3V0OgpAQCAtMzg2LDYgKzM4Niw4IEBACiAJa2ZyZWVfc2tiKHNrYik7CiBlcnJvcjoKIAlJUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CisJaWYgKGVyciA9PSAtRU5PQlVGUyAmJiAhaW5ldC0+cmVjdmVycikKKwkJZXJyID0gMDsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC01NzYsOCArNTc4LDExIEBACiAJCQkJCSZpcGMsICZydCwgbXNnLT5tc2dfZmxhZ3MpOwogCQlpZiAoZXJyKQogCQkJaXBfZmx1c2hfcGVuZGluZ19mcmFtZXMoc2spOwotCQllbHNlIGlmICghKG1zZy0+bXNnX2ZsYWdzICYgTVNHX01PUkUpKQorCQllbHNlIGlmICghKG1zZy0+bXNnX2ZsYWdzICYgTVNHX01PUkUpKSB7CiAJCQllcnIgPSBpcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKKwkJCWlmIChlcnIgPT0gLUVOT0JVRlMgJiYgIWluZXQtPnJlY3ZlcnIpCisJCQkJZXJyID0gMDsKKwkJfQogCQlyZWxlYXNlX3NvY2soc2spOwogCX0KIGRvbmU6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCAyNzhmNDZmLi45MTg2N2QzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTE1MTQsMTMgKzE1MTQsMTcgQEAKIHZvaWQgaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwotCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQocnQtPnUuZHN0LmRldik7CisJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OworCWludCBsb2dfbWFydGlhbnM7CiAKLQlpZiAoIWluX2RldikKKwlyY3VfcmVhZF9sb2NrKCk7CisJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShydC0+dS5kc3QuZGV2KTsKKwlpZiAoIWluX2RldiB8fCAhSU5fREVWX1RYX1JFRElSRUNUUyhpbl9kZXYpKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47Ci0KLQlpZiAoIUlOX0RFVl9UWF9SRURJUkVDVFMoaW5fZGV2KSkKLQkJZ290byBvdXQ7CisJfQorCWxvZ19tYXJ0aWFucyA9IElOX0RFVl9MT0dfTUFSVElBTlMoaW5fZGV2KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qIE5vIHJlZGlyZWN0ZWQgcGFja2V0cyBkdXJpbmcgaXBfcnRfcmVkaXJlY3Rfc2lsZW5jZTsKIAkgKiByZXNldCB0aGUgYWxnb3JpdGhtLgpAQCAtMTUzMyw3ICsxNTM3LDcgQEAKIAkgKi8KIAlpZiAocnQtPnUuZHN0LnJhdGVfdG9rZW5zID49IGlwX3J0X3JlZGlyZWN0X251bWJlcikgewogCQlydC0+dS5kc3QucmF0ZV9sYXN0ID0gamlmZmllczsKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAl9CiAKIAkvKiBDaGVjayBmb3IgbG9hZCBsaW1pdDsgc2V0IHJhdGVfbGFzdCB0byB0aGUgbGF0ZXN0IHNlbnQKQEAgLTE1NDcsNyArMTU1MSw3IEBACiAJCXJ0LT51LmRzdC5yYXRlX2xhc3QgPSBqaWZmaWVzOwogCQkrK3J0LT51LmRzdC5yYXRlX3Rva2VuczsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRQotCQlpZiAoSU5fREVWX0xPR19NQVJUSUFOUyhpbl9kZXYpICYmCisJCWlmIChsb2dfbWFydGlhbnMgJiYKIAkJICAgIHJ0LT51LmRzdC5yYXRlX3Rva2VucyA9PSBpcF9ydF9yZWRpcmVjdF9udW1iZXIgJiYKIAkJICAgIG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhvc3QgJXBJNC9pZiVkIGlnbm9yZXMgcmVkaXJlY3RzIGZvciAlcEk0IHRvICVwSTQuXG4iLApAQCAtMTU1NSw4ICsxNTU5LDYgQEAKIAkJCQkmcnQtPnJ0X2RzdCwgJnJ0LT5ydF9nYXRld2F5KTsKICNlbmRpZgogCX0KLW91dDoKLQlpbl9kZXZfcHV0KGluX2Rldik7CiB9CiAKIHN0YXRpYyBpbnQgaXBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTM0NDIsNyArMzQ0NCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGNyZWF0ZSByb3V0ZSBwcm9jIGZpbGVzXG4iKTsKICNpZmRlZiBDT05GSUdfWEZSTQogCXhmcm1faW5pdCgpOwotCXhmcm00X2luaXQoKTsKKwl4ZnJtNF9pbml0KGlwX3J0X21heF9zaXplKTsKICNlbmRpZgogCXJ0bmxfcmVnaXN0ZXIoUEZfSU5FVCwgUlRNX0dFVFJPVVRFLCBpbmV0X3J0bV9nZXRyb3V0ZSwgTlVMTCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY0L3N5bmNvb2tpZXMuYwppbmRleCBjZDJiOTdmLi5hNmUwZTA3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeW5jb29raWVzLmMKKysrIGIvbmV0L2lwdjQvc3luY29va2llcy5jCkBAIC0zNywxMiArMzcsMTMgQEAKICNkZWZpbmUgQ09PS0lFQklUUyAyNAkvKiBVcHBlciBiaXRzIHN0b3JlIGNvdW50ICovCiAjZGVmaW5lIENPT0tJRU1BU0sgKCgoX191MzIpMSA8PCBDT09LSUVCSVRTKSAtIDEpCiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShfX3UzMiwgY29va2llX3NjcmF0Y2gpWzE2ICsgNSArIFNIQV9XT1JLU1BBQ0VfV09SRFNdOworc3RhdGljIERFRklORV9QRVJfQ1BVKF9fdTMyIFsxNiArIDUgKyBTSEFfV09SS1NQQUNFX1dPUkRTXSwKKwkJICAgICAgaXB2NF9jb29raWVfc2NyYXRjaCk7CiAKIHN0YXRpYyB1MzIgY29va2llX2hhc2goX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0LAogCQkgICAgICAgdTMyIGNvdW50LCBpbnQgYykKIHsKLQlfX3UzMiAqdG1wID0gX19nZXRfY3B1X3Zhcihjb29raWVfc2NyYXRjaCk7CisJX191MzIgKnRtcCA9IF9fZ2V0X2NwdV92YXIoaXB2NF9jb29raWVfc2NyYXRjaCk7CiAKIAltZW1jcHkodG1wICsgNCwgc3luY29va2llX3NlY3JldFtjXSwgc2l6ZW9mKHN5bmNvb2tpZV9zZWNyZXRbY10pKTsKIAl0bXBbMF0gPSAoX19mb3JjZSB1MzIpc2FkZHI7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IDkxMTQ1MjQuLmVkZWVhMDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC0xODM5LDcgKzE4MzksNyBAQAogCQkvKiBVbnJlYWQgZGF0YSB3YXMgdG9zc2VkLCB6YXAgdGhlIGNvbm5lY3Rpb24uICovCiAJCU5FVF9JTkNfU1RBVFNfVVNFUihzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVE9OQ0xPU0UpOwogCQl0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpOwotCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9LRVJORUwpOworCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIHNrLT5za19hbGxvY2F0aW9uKTsKIAl9IGVsc2UgaWYgKHNvY2tfZmxhZyhzaywgU09DS19MSU5HRVIpICYmICFzay0+c2tfbGluZ2VydGltZSkgewogCQkvKiBDaGVjayB6ZXJvIGxpbmdlciBfYWZ0ZXJfIGNoZWNraW5nIGZvciB1bnJlYWQgZGF0YS4gKi8KIAkJc2stPnNrX3Byb3QtPmRpc2Nvbm5lY3Qoc2ssIDApOwpAQCAtMjMzNiwxMyArMjMzNiwxMyBAQAogCQl2YWwgPSAhISh0cC0+bm9uYWdsZSZUQ1BfTkFHTEVfQ09SSyk7CiAJCWJyZWFrOwogCWNhc2UgVENQX0tFRVBJRExFOgotCQl2YWwgPSAodHAtPmtlZXBhbGl2ZV90aW1lID8gOiBzeXNjdGxfdGNwX2tlZXBhbGl2ZV90aW1lKSAvIEhaOworCQl2YWwgPSBrZWVwYWxpdmVfdGltZV93aGVuKHRwKSAvIEhaOwogCQlicmVhazsKIAljYXNlIFRDUF9LRUVQSU5UVkw6Ci0JCXZhbCA9ICh0cC0+a2VlcGFsaXZlX2ludHZsID8gOiBzeXNjdGxfdGNwX2tlZXBhbGl2ZV9pbnR2bCkgLyBIWjsKKwkJdmFsID0ga2VlcGFsaXZlX2ludHZsX3doZW4odHApIC8gSFo7CiAJCWJyZWFrOwogCWNhc2UgVENQX0tFRVBDTlQ6Ci0JCXZhbCA9IHRwLT5rZWVwYWxpdmVfcHJvYmVzID8gOiBzeXNjdGxfdGNwX2tlZXBhbGl2ZV9wcm9iZXM7CisJCXZhbCA9IGtlZXBhbGl2ZV9wcm9iZXModHApOwogCQlicmVhazsKIAljYXNlIFRDUF9TWU5DTlQ6CiAJCXZhbCA9IGljc2stPmljc2tfc3luX3JldHJpZXMgPyA6IHN5c2N0bF90Y3Bfc3luX3JldHJpZXM7CkBAIC0yNjU4LDcgKzI2NTgsNyBAQAogCiBFWFBPUlRfU1lNQk9MKHRjcF9mcmVlX21kNXNpZ19wb29sKTsKIAotc3RhdGljIHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKipfX3RjcF9hbGxvY19tZDVzaWdfcG9vbCh2b2lkKQorc3RhdGljIHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKipfX3RjcF9hbGxvY19tZDVzaWdfcG9vbChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaW50IGNwdTsKIAlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICoqcG9vbDsKQEAgLTI2NzEsNyArMjY3MSw3IEBACiAJCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKnA7CiAJCXN0cnVjdCBjcnlwdG9faGFzaCAqaGFzaDsKIAotCQlwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwkJcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgc2stPnNrX2FsbG9jYXRpb24pOwogCQlpZiAoIXApCiAJCQlnb3RvIG91dF9mcmVlOwogCQkqcGVyX2NwdV9wdHIocG9vbCwgY3B1KSA9IHA7CkBAIC0yNjg4LDcgKzI2ODgsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3QgdGNwX21kNXNpZ19wb29sICoqdGNwX2FsbG9jX21kNXNpZ19wb29sKHZvaWQpCitzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICoqdGNwX2FsbG9jX21kNXNpZ19wb29sKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICoqcG9vbDsKIAlpbnQgYWxsb2MgPSAwOwpAQCAtMjcwOSw3ICsyNzA5LDcgQEAKIAogCWlmIChhbGxvYykgewogCQkvKiB3ZSBjYW5ub3QgaG9sZCBzcGlubG9jayBoZXJlIGJlY2F1c2UgdGhpcyBtYXkgc2xlZXAuICovCi0JCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKipwID0gX190Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woKTsKKwkJc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqKnAgPSBfX3RjcF9hbGxvY19tZDVzaWdfcG9vbChzayk7CiAJCXNwaW5fbG9ja19iaCgmdGNwX21kNXNpZ19wb29sX2xvY2spOwogCQlpZiAoIXApIHsKIAkJCXRjcF9tZDVzaWdfdXNlcnMtLTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9jb25nLmMgYi9uZXQvaXB2NC90Y3BfY29uZy5jCmluZGV4IGU5MmJlYjkuLjY0MjhiMzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9jb25nLmMKKysrIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJc3Bpbl9sb2NrKCZ0Y3BfY29uZ19saXN0X2xvY2spOwogCWNhID0gdGNwX2NhX2ZpbmQobmFtZSk7CiAjaWZkZWYgQ09ORklHX01PRFVMRVMKLQlpZiAoIWNhICYmIGNhcGFibGUoQ0FQX1NZU19NT0RVTEUpKSB7CisJaWYgKCFjYSAmJiBjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CiAJCXNwaW5fdW5sb2NrKCZ0Y3BfY29uZ19saXN0X2xvY2spOwogCiAJCXJlcXVlc3RfbW9kdWxlKCJ0Y3BfJXMiLCBuYW1lKTsKQEAgLTI0Niw3ICsyNDYsNyBAQAogCiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkvKiBub3QgZm91bmQgYXR0ZW1wdCB0byBhdXRvbG9hZCBtb2R1bGUgKi8KLQlpZiAoIWNhICYmIGNhcGFibGUoQ0FQX1NZU19NT0RVTEUpKSB7CisJaWYgKCFjYSAmJiBjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXF1ZXN0X21vZHVsZSgidGNwXyVzIiwgbmFtZSk7CiAJCXJjdV9yZWFkX2xvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMmJkYjBkYS4uYWY2ZDZmYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTY4NSw3ICs2ODUsNyBAQAogCSAqICAgIGlzIGludmlzaWJsZS4gQWN0dWFsbHksIExpbnV4LTIuNCBhbHNvIGdlbmVyYXRlcyBlcnJhdGljCiAJICogICAgQUNLcyBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCiAJICovCi0JaW5ldF9jc2soc2spLT5pY3NrX3J0byA9ICh0cC0+c3J0dCA+PiAzKSArIHRwLT5ydHR2YXI7CisJaW5ldF9jc2soc2spLT5pY3NrX3J0byA9IF9fdGNwX3NldF9ydG8odHApOwogCiAJLyogMi4gRml4dXBzIG1hZGUgZWFybGllciBjYW5ub3QgYmUgcmlnaHQuCiAJICogICAgSWYgd2UgZG8gbm90IGVzdGltYXRlIFJUTyBjb3JyZWN0bHkgd2l0aG91dCB0aGVtLApAQCAtNjk2LDggKzY5Niw3IEBACiAJLyogTk9URTogY2xhbXBpbmcgYXQgVENQX1JUT19NSU4gaXMgbm90IHJlcXVpcmVkLCBjdXJyZW50IGFsZ28KIAkgKiBndWFyYW50ZWVzIHRoYXQgcnRvIGlzIGhpZ2hlci4KIAkgKi8KLQlpZiAoaW5ldF9jc2soc2spLT5pY3NrX3J0byA+IFRDUF9SVE9fTUFYKQotCQlpbmV0X2NzayhzayktPmljc2tfcnRvID0gVENQX1JUT19NQVg7CisJdGNwX2JvdW5kX3J0byhzayk7CiB9CiAKIC8qIFNhdmUgbWV0cmljcyBsZWFybmVkIGJ5IHRoaXMgVENQIHNlc3Npb24uCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCA2ZDg4MjE5Li4wNTQzNTYxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTMyOCwyNiArMzI4LDI5IEBACiAgKgogICovCiAKLXZvaWQgdGNwX3Y0X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbykKK3ZvaWQgdGNwX3Y0X2VycihzdHJ1Y3Qgc2tfYnVmZiAqaWNtcF9za2IsIHUzMiBpbmZvKQogewotCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKLQlzdHJ1Y3QgdGNwaGRyICp0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0+ZGF0YSArIChpcGgtPmlobCA8PCAyKSk7CisJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopaWNtcF9za2ItPmRhdGE7CisJc3RydWN0IHRjcGhkciAqdGggPSAoc3RydWN0IHRjcGhkciAqKShpY21wX3NrYi0+ZGF0YSArIChpcGgtPmlobCA8PCAyKSk7CisJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrOwogCXN0cnVjdCB0Y3Bfc29jayAqdHA7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDsKLQljb25zdCBpbnQgdHlwZSA9IGljbXBfaGRyKHNrYiktPnR5cGU7Ci0JY29uc3QgaW50IGNvZGUgPSBpY21wX2hkcihza2IpLT5jb2RlOworCWNvbnN0IGludCB0eXBlID0gaWNtcF9oZHIoaWNtcF9za2IpLT50eXBlOworCWNvbnN0IGludCBjb2RlID0gaWNtcF9oZHIoaWNtcF9za2IpLT5jb2RlOwogCXN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fdTMyIHNlcTsKKwlfX3UzMiByZW1haW5pbmc7CiAJaW50IGVycjsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGljbXBfc2tiLT5kZXYpOwogCi0JaWYgKHNrYi0+bGVuIDwgKGlwaC0+aWhsIDw8IDIpICsgOCkgeworCWlmIChpY21wX3NrYi0+bGVuIDwgKGlwaC0+aWhsIDw8IDIpICsgOCkgewogCQlJQ01QX0lOQ19TVEFUU19CSChuZXQsIElDTVBfTUlCX0lORVJST1JTKTsKIAkJcmV0dXJuOwogCX0KIAogCXNrID0gaW5ldF9sb29rdXAobmV0LCAmdGNwX2hhc2hpbmZvLCBpcGgtPmRhZGRyLCB0aC0+ZGVzdCwKLQkJCWlwaC0+c2FkZHIsIHRoLT5zb3VyY2UsIGluZXRfaWlmKHNrYikpOworCQkJaXBoLT5zYWRkciwgdGgtPnNvdXJjZSwgaW5ldF9paWYoaWNtcF9za2IpKTsKIAlpZiAoIXNrKSB7CiAJCUlDTVBfSU5DX1NUQVRTX0JIKG5ldCwgSUNNUF9NSUJfSU5FUlJPUlMpOwogCQlyZXR1cm47CkBAIC0zNjcsNiArMzcwLDcgQEAKIAlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkKIAkJZ290byBvdXQ7CiAKKwlpY3NrID0gaW5ldF9jc2soc2spOwogCXRwID0gdGNwX3NrKHNrKTsKIAlzZXEgPSBudG9obCh0aC0+c2VxKTsKIAlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4gJiYKQEAgLTM5Myw2ICszOTcsMzkgQEAKIAkJfQogCiAJCWVyciA9IGljbXBfZXJyX2NvbnZlcnRbY29kZV0uZXJybm87CisJCS8qIGNoZWNrIGlmIGljbXBfc2tiIGFsbG93cyByZXZlcnQgb2YgYmFja29mZgorCQkgKiAoc2VlIGRyYWZ0LXppbW1lcm1hbm4tdGNwLWxjZCkgKi8KKwkJaWYgKGNvZGUgIT0gSUNNUF9ORVRfVU5SRUFDSCAmJiBjb2RlICE9IElDTVBfSE9TVF9VTlJFQUNIKQorCQkJYnJlYWs7CisJCWlmIChzZXEgIT0gdHAtPnNuZF91bmEgIHx8ICFpY3NrLT5pY3NrX3JldHJhbnNtaXRzIHx8CisJCSAgICAhaWNzay0+aWNza19iYWNrb2ZmKQorCQkJYnJlYWs7CisKKwkJaWNzay0+aWNza19iYWNrb2ZmLS07CisJCWluZXRfY3NrKHNrKS0+aWNza19ydG8gPSBfX3RjcF9zZXRfcnRvKHRwKSA8PAorCQkJCQkgaWNzay0+aWNza19iYWNrb2ZmOworCQl0Y3BfYm91bmRfcnRvKHNrKTsKKworCQlza2IgPSB0Y3Bfd3JpdGVfcXVldWVfaGVhZChzayk7CisJCUJVR19PTighc2tiKTsKKworCQlyZW1haW5pbmcgPSBpY3NrLT5pY3NrX3J0byAtIG1pbihpY3NrLT5pY3NrX3J0bywKKwkJCQl0Y3BfdGltZV9zdGFtcCAtIFRDUF9TS0JfQ0Ioc2tiKS0+d2hlbik7CisKKwkJaWYgKHJlbWFpbmluZykgeworCQkJaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX1JFVFJBTlMsCisJCQkJCQkgIHJlbWFpbmluZywgVENQX1JUT19NQVgpOworCQl9IGVsc2UgaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKKwkJCS8qIFJUTyByZXZlcnQgY2xvY2tlZCBvdXQgcmV0cmFuc21pc3Npb24sCisJCQkgKiBidXQgc29ja2V0IGlzIGxvY2tlZC4gV2lsbCBkZWZlci4gKi8KKwkJCWluZXRfY3NrX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9SRVRSQU5TLAorCQkJCQkJICBIWi8yMCwgVENQX1JUT19NQVgpOworCQl9IGVsc2UgeworCQkJLyogUlRPIHJldmVydCBjbG9ja2VkIG91dCByZXRyYW5zbWlzc2lvbi4KKwkJCSAqIFdpbGwgcmV0cmFuc21pdCBub3cgKi8KKwkJCXRjcF9yZXRyYW5zbWl0X3RpbWVyKHNrKTsKKwkJfQorCiAJCWJyZWFrOwogCWNhc2UgSUNNUF9USU1FX0VYQ0VFREVEOgogCQllcnIgPSBFSE9TVFVOUkVBQ0g7CkBAIC04NDksNyArODg2LDcgQEAKIAkJCX0KIAkJCXNrLT5za19yb3V0ZV9jYXBzICY9IH5ORVRJRl9GX0dTT19NQVNLOwogCQl9Ci0JCWlmICh0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woKSA9PSBOVUxMKSB7CisJCWlmICh0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woc2spID09IE5VTEwpIHsKIAkJCWtmcmVlKG5ld2tleSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtOTcwLDggKzEwMDcsOSBAQAogCiAJaWYgKCF0Y3Bfc2soc2spLT5tZDVzaWdfaW5mbykgewogCQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQkJc3RydWN0IHRjcF9tZDVzaWdfaW5mbyAqcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CisJCXN0cnVjdCB0Y3BfbWQ1c2lnX2luZm8gKnA7CiAKKwkJcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgc2stPnNrX2FsbG9jYXRpb24pOwogCQlpZiAoIXApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtOTc5LDcgKzEwMTcsNyBAQAogCQlzay0+c2tfcm91dGVfY2FwcyAmPSB+TkVUSUZfRl9HU09fTUFTSzsKIAl9CiAKLQluZXdrZXkgPSBrbWVtZHVwKGNtZC50Y3BtX2tleSwgY21kLnRjcG1fa2V5bGVuLCBHRlBfS0VSTkVMKTsKKwluZXdrZXkgPSBrbWVtZHVwKGNtZC50Y3BtX2tleSwgY21kLnRjcG1fa2V5bGVuLCBzay0+c2tfYWxsb2NhdGlvbik7CiAJaWYgKCFuZXdrZXkpCiAJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiB0Y3BfdjRfbWQ1X2RvX2FkZChzaywgc2luLT5zaW5fYWRkci5zX2FkZHIsCkBAIC0xMTU4LDcgKzExOTYsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCi1zdGF0aWMgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzIHRjcF9yZXF1ZXN0X3NvY2tfaXB2NF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzIHRjcF9yZXF1ZXN0X3NvY2tfaXB2NF9vcHMgPSB7CiAJLm1kNV9sb29rdXAJPQl0Y3BfdjRfcmVxc2tfbWQ1X2xvb2t1cCwKIAkuY2FsY19tZDVfaGFzaAk9CXRjcF92NF9tZDVfaGFzaF9za2IsCiB9OwpAQCAtMTcxNyw3ICsxNzU1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY0X3NwZWNpZmljID0geworY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY0X3NwZWNpZmljID0gewogCS5xdWV1ZV94bWl0CSAgID0gaXBfcXVldWVfeG1pdCwKIAkuc2VuZF9jaGVjawkgICA9IHRjcF92NF9zZW5kX2NoZWNrLAogCS5yZWJ1aWxkX2hlYWRlcgkgICA9IGluZXRfc2tfcmVidWlsZF9oZWFkZXIsCkBAIC0xNzM3LDcgKzE3NzUsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCi1zdGF0aWMgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY0X3NwZWNpZmljID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2NF9zcGVjaWZpYyA9IHsKIAkubWQ1X2xvb2t1cAkJPSB0Y3BfdjRfbWQ1X2xvb2t1cCwKIAkuY2FsY19tZDVfaGFzaAkJPSB0Y3BfdjRfbWQ1X2hhc2hfc2tiLAogCS5tZDVfYWRkCQk9IHRjcF92NF9tZDVfYWRkX2Z1bmMsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggZjhkNjdjYy4uZTQ4YzM3ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJCQlpZiAoa2V5ICE9IE5VTEwpIHsKIAkJCQltZW1jcHkoJnRjcHR3LT50d19tZDVfa2V5LCBrZXktPmtleSwga2V5LT5rZXlsZW4pOwogCQkJCXRjcHR3LT50d19tZDVfa2V5bGVuID0ga2V5LT5rZXlsZW47Ci0JCQkJaWYgKHRjcF9hbGxvY19tZDVzaWdfcG9vbCgpID09IE5VTEwpCisJCQkJaWYgKHRjcF9hbGxvY19tZDVzaWdfcG9vbChzaykgPT0gTlVMTCkKIAkJCQkJQlVHKCk7CiAJCQl9CiAJCX0gd2hpbGUgKDApOwpAQCAtNjU3LDI5ICs2NTcsNiBAQAogCWNoaWxkID0gaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcy0+c3luX3JlY3Zfc29jayhzaywgc2tiLCByZXEsIE5VTEwpOwogCWlmIChjaGlsZCA9PSBOVUxMKQogCQlnb3RvIGxpc3Rlbl9vdmVyZmxvdzsKLSNpZmRlZiBDT05GSUdfVENQX01ENVNJRwotCWVsc2UgewotCQkvKiBDb3B5IG92ZXIgdGhlIE1ENSBrZXkgZnJvbSB0aGUgb3JpZ2luYWwgc29ja2V0ICovCi0JCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqa2V5OwotCQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQkJa2V5ID0gdHAtPmFmX3NwZWNpZmljLT5tZDVfbG9va3VwKHNrLCBjaGlsZCk7Ci0JCWlmIChrZXkgIT0gTlVMTCkgewotCQkJLyoKLQkJCSAqIFdlJ3JlIHVzaW5nIG9uZSwgc28gY3JlYXRlIGEgbWF0Y2hpbmcga2V5IG9uIHRoZQotCQkJICogbmV3c2sgc3RydWN0dXJlLiBJZiB3ZSBmYWlsIHRvIGdldCBtZW1vcnkgdGhlbiB3ZQotCQkJICogZW5kIHVwIG5vdCBjb3B5aW5nIHRoZSBrZXkgYWNyb3NzLiBTaHVja3MuCi0JCQkgKi8KLQkJCWNoYXIgKm5ld2tleSA9IGttZW1kdXAoa2V5LT5rZXksIGtleS0+a2V5bGVuLAotCQkJCQkgICAgICAgR0ZQX0FUT01JQyk7Ci0JCQlpZiAobmV3a2V5KSB7Ci0JCQkJaWYgKCF0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woKSkKLQkJCQkJQlVHKCk7Ci0JCQkJdHAtPmFmX3NwZWNpZmljLT5tZDVfYWRkKGNoaWxkLCBjaGlsZCwgbmV3a2V5LAotCQkJCQkJCSBrZXktPmtleWxlbik7Ci0JCQl9Ci0JCX0KLQl9Ci0jZW5kaWYKIAogCWluZXRfY3NrX3JlcXNrX3F1ZXVlX3VubGluayhzaywgcmVxLCBwcmV2KTsKIAlpbmV0X2Nza19yZXFza19xdWV1ZV9yZW1vdmVkKHNrLCByZXEpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGJkNjI3MTIuLjUyMDBhYWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTU5LDYgKzU5LDcgQEAKIC8qIEJ5IGRlZmF1bHQsIFJGQzI4NjEgYmVoYXZpb3IuICAqLwogaW50IHN5c2N0bF90Y3Bfc2xvd19zdGFydF9hZnRlcl9pZGxlIF9fcmVhZF9tb3N0bHkgPSAxOwogCisvKiBBY2NvdW50IGZvciBuZXcgZGF0YSB0aGF0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIG5ldHdvcmsuICovCiBzdGF0aWMgdm9pZCB0Y3BfZXZlbnRfbmV3X2RhdGFfc2VudChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CkBAIC0xNDIsNiArMTQzLDcgQEAKIAl0cC0+c25kX2N3bmRfdXNlZCA9IDA7CiB9CiAKKy8qIENvbmdlc3Rpb24gc3RhdGUgYWNjb3VudGluZyBhZnRlciBhIHBhY2tldCBoYXMgYmVlbiBzZW50LiAqLwogc3RhdGljIHZvaWQgdGNwX2V2ZW50X2RhdGFfc2VudChzdHJ1Y3QgdGNwX3NvY2sgKnRwLAogCQkJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIHsKQEAgLTE2MSw2ICsxNjMsNyBAQAogCQlpY3NrLT5pY3NrX2Fjay5waW5ncG9uZyA9IDE7CiB9CiAKKy8qIEFjY291bnQgZm9yIGFuIEFDSyB3ZSBzZW50LiAqLwogc3RhdGljIGlubGluZSB2b2lkIHRjcF9ldmVudF9hY2tfc2VudChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBwa3RzKQogewogCXRjcF9kZWNfcXVpY2thY2tfbW9kZShzaywgcGt0cyk7CkBAIC0yNzYsNiArMjc5LDcgQEAKIAlyZXR1cm4gbmV3X3dpbjsKIH0KIAorLyogUGFja2V0IEVDTiBzdGF0ZSBmb3IgYSBTWU4tQUNLICovCiBzdGF0aWMgaW5saW5lIHZvaWQgVENQX0VDTl9zZW5kX3N5bmFjayhzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgJj0gflRDUENCX0ZMQUdfQ1dSOwpAQCAtMjgzLDYgKzI4Nyw3IEBACiAJCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgJj0gflRDUENCX0ZMQUdfRUNFOwogfQogCisvKiBQYWNrZXQgRUNOIHN0YXRlIGZvciBhIFNZTi4gICovCiBzdGF0aWMgaW5saW5lIHZvaWQgVENQX0VDTl9zZW5kX3N5bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CkBAIC0zMDEsNiArMzA2LDkgQEAKIAkJdGgtPmVjZSA9IDE7CiB9CiAKKy8qIFNldCB1cCBFQ04gc3RhdGUgZm9yIGEgcGFja2V0IG9uIGEgRVNUQUJMSVNIRUQgc29ja2V0IHRoYXQgaXMgYWJvdXQgdG8KKyAqIGJlIHNlbnQuCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBUQ1BfRUNOX3NlbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCWludCB0Y3BfaGVhZGVyX2xlbikKIHsKQEAgLTM2Miw3ICszNzAsOSBAQAogCV9fdTMyIHRzdmFsLCB0c2VjcjsJLyogbmVlZCB0byBpbmNsdWRlIE9QVElPTl9UUyAqLwogfTsKIAotLyogQmV3YXJlOiBTb21ldGhpbmcgaW4gdGhlIEludGVybmV0IGlzIHZlcnkgc2Vuc2l0aXZlIHRvIHRoZSBvcmRlcmluZyBvZgorLyogV3JpdGUgcHJldmlvdXNseSBjb21wdXRlZCBUQ1Agb3B0aW9ucyB0byB0aGUgcGFja2V0LgorICoKKyAqIEJld2FyZTogU29tZXRoaW5nIGluIHRoZSBJbnRlcm5ldCBpcyB2ZXJ5IHNlbnNpdGl2ZSB0byB0aGUgb3JkZXJpbmcgb2YKICAqIFRDUCBvcHRpb25zLCB3ZSBsZWFybmVkIHRoaXMgdGhyb3VnaCB0aGUgaGFyZCB3YXksIHNvIGJlIGNhcmVmdWwgaGVyZS4KICAqIEx1Y2tpbHkgd2UgY2FuIGF0IGxlYXN0IGJsYW1lIG90aGVycyBmb3IgdGhlaXIgbm9uLWNvbXBsaWFuY2UgYnV0IGZyb20KICAqIGludGVyLW9wZXJhdGliaWxpdHkgcGVyc3BlY3RpdmUgaXQgc2VlbXMgdGhhdCB3ZSdyZSBzb21ld2hhdCBzdHVjayB3aXRoCkBAIC00NDUsNiArNDU1LDkgQEAKIAl9CiB9CiAKKy8qIENvbXB1dGUgVENQIG9wdGlvbnMgZm9yIFNZTiBwYWNrZXRzLiBUaGlzIGlzIG5vdCB0aGUgZmluYWwKKyAqIG5ldHdvcmsgd2lyZSBmb3JtYXQgeWV0LgorICovCiBzdGF0aWMgdW5zaWduZWQgdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLAogCQkJCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqKm1kNSkgewpAQCAtNDkzLDYgKzUwNiw3IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKKy8qIFNldCB1cCBUQ1Agb3B0aW9ucyBmb3IgU1lOLUFDS3MuICovCiBzdGF0aWMgdW5zaWduZWQgdGNwX3N5bmFja19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiAJCQkJICAgdW5zaWduZWQgbXNzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtNTQxLDYgKzU1NSw5IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKKy8qIENvbXB1dGUgVENQIG9wdGlvbnMgZm9yIEVTVEFCTElTSEVEIHNvY2tldHMuIFRoaXMgaXMgbm90IHRoZQorICogZmluYWwgd2lyZSBmb3JtYXQgeWV0LgorICovCiBzdGF0aWMgdW5zaWduZWQgdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQlzdHJ1Y3QgdGNwX291dF9vcHRpb25zICpvcHRzLAogCQkJCQlzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKiptZDUpIHsKQEAgLTcwNSw3ICs3MjIsNyBAQAogCXJldHVybiBuZXRfeG1pdF9ldmFsKGVycik7CiB9CiAKLS8qIFRoaXMgcm91dGluZSBqdXN0IHF1ZXVlJ3MgdGhlIGJ1ZmZlcgorLyogVGhpcyByb3V0aW5lIGp1c3QgcXVldWVzIHRoZSBidWZmZXIgZm9yIHNlbmRpbmcuCiAgKgogICogTk9URTogcHJvYmUwIHRpbWVyIGlzIG5vdCBjaGVja2VkLCBkbyBub3QgZm9yZ2V0IHRjcF9wdXNoX3BlbmRpbmdfZnJhbWVzLAogICogb3RoZXJ3aXNlIHNvY2tldCBjYW4gc3RhbGwuCkBAIC03MjIsNiArNzM5LDcgQEAKIAlza19tZW1fY2hhcmdlKHNrLCBza2ItPnRydWVzaXplKTsKIH0KIAorLyogSW5pdGlhbGl6ZSBUU08gc2VnbWVudHMgZm9yIGEgcGFja2V0LiAqLwogc3RhdGljIHZvaWQgdGNwX3NldF9za2JfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSB1bnNpZ25lZCBpbnQgbXNzX25vdykKIHsKQEAgLTkwOSw2ICs5MjcsNyBAQAogCXNrYi0+bGVuID0gc2tiLT5kYXRhX2xlbjsKIH0KIAorLyogUmVtb3ZlIGFja2VkIGRhdGEgZnJvbSBhIHBhY2tldCBpbiB0aGUgdHJhbnNtaXQgcXVldWUuICovCiBpbnQgdGNwX3RyaW1faGVhZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBsZW4pCiB7CiAJaWYgKHNrYl9jbG9uZWQoc2tiKSAmJiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpCkBAIC05MzcsNyArOTU2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogTm90IGFjY291bnRpbmcgZm9yIFNBQ0tzIGhlcmUuICovCisvKiBDYWxjdWxhdGUgTVNTLiBOb3QgYWNjb3VudGluZyBmb3IgU0FDS3MgaGVyZS4gICovCiBpbnQgdGNwX210dV90b19tc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgcG10dSkKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKQEAgLTk4MSw2ICsxMDAwLDcgQEAKIAlyZXR1cm4gbXR1OwogfQogCisvKiBNVFUgcHJvYmluZyBpbml0IHBlciBzb2NrZXQgKi8KIHZvaWQgdGNwX210dXBfaW5pdChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CkBAIC0xMTQzLDcgKzExNjMsOCBAQAogCXJldHVybiAwOwogfQogCi0vKiBUaGlzIG11c3QgYmUgaW52b2tlZCB0aGUgZmlyc3QgdGltZSB3ZSBjb25zaWRlciB0cmFuc21pdHRpbmcKKy8qIEludGlhbGl6ZSBUU08gc3RhdGUgb2YgYSBza2IuCisgKiBUaGlzIG11c3QgYmUgaW52b2tlZCB0aGUgZmlyc3QgdGltZSB3ZSBjb25zaWRlciB0cmFuc21pdHRpbmcKICAqIFNLQiBvbnRvIHRoZSB3aXJlLgogICovCiBzdGF0aWMgaW50IHRjcF9pbml0X3Rzb19zZWdzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTExNTgsNiArMTE3OSw3IEBACiAJcmV0dXJuIHRzb19zZWdzOwogfQogCisvKiBNaW5zaGFsbCdzIHZhcmlhbnQgb2YgdGhlIE5hZ2xlIHNlbmQgY2hlY2suICovCiBzdGF0aWMgaW5saW5lIGludCB0Y3BfbWluc2hhbGxfY2hlY2soY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCkKIHsKIAlyZXR1cm4gYWZ0ZXIodHAtPnNuZF9zbWwsIHRwLT5zbmRfdW5hKSAmJgpAQCAtMTI0Miw2ICsxMjY0LDcgQEAKIAlyZXR1cm4gY3duZF9xdW90YTsKIH0KIAorLyogVGVzdCBpZiBzZW5kaW5nIGlzIGFsbG93ZWQgcmlnaHQgbm93LiAqLwogaW50IHRjcF9tYXlfc2VuZF9ub3coc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwpAQCAtMTM3OCw2ICsxNDAxLDEwIEBACiB9CiAKIC8qIENyZWF0ZSBhIG5ldyBNVFUgcHJvYmUgaWYgd2UgYXJlIHJlYWR5LgorICogTVRVIHByb2JlIGlzIHJlZ3VsYXJseSBhdHRlbXB0aW5nIHRvIGluY3JlYXNlIHRoZSBwYXRoIE1UVSBieQorICogZGVsaWJlcmF0ZWx5IHNlbmRpbmcgbGFyZ2VyIHBhY2tldHMuICBUaGlzIGRpc2NvdmVycyByb3V0aW5nCisgKiBjaGFuZ2VzIHJlc3VsdGluZyBpbiBsYXJnZXIgcGF0aCBNVFVzLgorICoKICAqIFJldHVybnMgMCBpZiB3ZSBzaG91bGQgd2FpdCB0byBwcm9iZSAobm8gY3duZCBhdmFpbGFibGUpLAogICogICAgICAgICAxIGlmIGEgcHJvYmUgd2FzIHNlbnQsCiAgKiAgICAgICAgIC0xIG90aGVyd2lzZQpAQCAtMTc5MCw2ICsxODE3LDcgQEAKIAlza193bWVtX2ZyZWVfc2tiKHNrLCBuZXh0X3NrYik7CiB9CiAKKy8qIENoZWNrIGlmIGNvYWxlc2NpbmcgU0tCcyBpcyBsZWdhbC4gKi8KIHN0YXRpYyBpbnQgdGNwX2Nhbl9jb2xsYXBzZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKHRjcF9za2JfcGNvdW50KHNrYikgPiAxKQpAQCAtMTgwOCw2ICsxODM2LDkgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyogQ29sbGFwc2UgcGFja2V0cyBpbiB0aGUgcmV0cmFuc21pdCBxdWV1ZSB0byBtYWtlIHRvIGNyZWF0ZQorICogbGVzcyBwYWNrZXRzIG9uIHRoZSB3aXJlLiBUaGlzIGlzIG9ubHkgZG9uZSBvbiByZXRyYW5zbWlzc2lvbi4KKyAqLwogc3RhdGljIHZvaWQgdGNwX3JldHJhbnNfdHJ5X2NvbGxhcHNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnRvLAogCQkJCSAgICAgaW50IHNwYWNlKQogewpAQCAtMTk1Nyw2ICsxOTg4LDkgQEAKIAlyZXR1cm4gZXJyOwogfQogCisvKiBDaGVjayBpZiB3ZSBmb3J3YXJkIHJldHJhbnNtaXRzIGFyZSBwb3NzaWJsZSBpbiB0aGUgY3VycmVudAorICogd2luZG93L2Nvbmdlc3Rpb24gc3RhdGUuCisgKi8KIHN0YXRpYyBpbnQgdGNwX2Nhbl9mb3J3YXJkX3JldHJhbnNtaXQoc3RydWN0IHNvY2sgKnNrKQogewogCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKQEAgLTIxMDEsNyArMjEzNSw4IEBACiAJfSBlbHNlIHsKIAkJLyogU29ja2V0IGlzIGxvY2tlZCwga2VlcCB0cnlpbmcgdW50aWwgbWVtb3J5IGlzIGF2YWlsYWJsZS4gKi8KIAkJZm9yICg7OykgewotCQkJc2tiID0gYWxsb2Nfc2tiX2ZjbG9uZShNQVhfVENQX0hFQURFUiwgR0ZQX0tFUk5FTCk7CisJCQlza2IgPSBhbGxvY19za2JfZmNsb25lKE1BWF9UQ1BfSEVBREVSLAorCQkJCQkgICAgICAgc2stPnNrX2FsbG9jYXRpb24pOwogCQkJaWYgKHNrYikKIAkJCQlicmVhazsKIAkJCXlpZWxkKCk7CkBAIC0yMTQ1LDcgKzIxODAsOCBAQAogCVRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX09VVFJTVFMpOwogfQogCi0vKiBXQVJOSU5HOiBUaGlzIHJvdXRpbmUgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aGVuIHdlIGhhdmUgYWxyZWFkeSBzZW50CisvKiBTZW5kIGEgY3Jvc3NlZCBTWU4tQUNLIGR1cmluZyBzb2NrZXQgZXN0YWJsaXNobWVudC4KKyAqIFdBUk5JTkc6IFRoaXMgcm91dGluZSBtdXN0IG9ubHkgYmUgY2FsbGVkIHdoZW4gd2UgaGF2ZSBhbHJlYWR5IHNlbnQKICAqIGEgU1lOIHBhY2tldCB0aGF0IGNyb3NzZWQgdGhlIGluY29taW5nIFNZTiB0aGF0IGNhdXNlZCB0aGlzIHJvdXRpbmUKICAqIHRvIGdldCBjYWxsZWQuIElmIHRoaXMgYXNzdW1wdGlvbiBmYWlscyB0aGVuIHRoZSBpbml0aWFsIHJjdl93bmQKICAqIGFuZCByY3Zfd3NjYWxlIHZhbHVlcyB3aWxsIG5vdCBiZSBjb3JyZWN0LgpAQCAtMjE4MCw5ICsyMjE2LDcgQEAKIAlyZXR1cm4gdGNwX3RyYW5zbWl0X3NrYihzaywgc2tiLCAxLCBHRlBfQVRPTUlDKTsKIH0KIAotLyoKLSAqIFByZXBhcmUgYSBTWU4tQUNLLgotICovCisvKiBQcmVwYXJlIGEgU1lOLUFDSy4gKi8KIHN0cnVjdCBza19idWZmICp0Y3BfbWFrZV9zeW5hY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJCQkJc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewpAQCAtMjI2OSw5ICsyMzAzLDcgQEAKIAlyZXR1cm4gc2tiOwogfQogCi0vKgotICogRG8gYWxsIGNvbm5lY3Qgc29ja2V0IHNldHVwcyB0aGF0IGNhbiBiZSBkb25lIEFGIGluZGVwZW5kZW50LgotICovCisvKiBEbyBhbGwgY29ubmVjdCBzb2NrZXQgc2V0dXBzIHRoYXQgY2FuIGJlIGRvbmUgQUYgaW5kZXBlbmRlbnQuICovCiBzdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBfX3NrX2RzdF9nZXQoc2spOwpAQCAtMjMzMCw5ICsyMzYyLDcgQEAKIAl0Y3BfY2xlYXJfcmV0cmFucyh0cCk7CiB9CiAKLS8qCi0gKiBCdWlsZCBhIFNZTiBhbmQgc2VuZCBpdCBvZmYuCi0gKi8KKy8qIEJ1aWxkIGEgU1lOIGFuZCBzZW5kIGl0IG9mZi4gKi8KIGludCB0Y3BfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CkBAIC0yMzU5LDcgKzIzODksNyBAQAogCXNrLT5za193bWVtX3F1ZXVlZCArPSBidWZmLT50cnVlc2l6ZTsKIAlza19tZW1fY2hhcmdlKHNrLCBidWZmLT50cnVlc2l6ZSk7CiAJdHAtPnBhY2tldHNfb3V0ICs9IHRjcF9za2JfcGNvdW50KGJ1ZmYpOwotCXRjcF90cmFuc21pdF9za2Ioc2ssIGJ1ZmYsIDEsIEdGUF9LRVJORUwpOworCXRjcF90cmFuc21pdF9za2Ioc2ssIGJ1ZmYsIDEsIHNrLT5za19hbGxvY2F0aW9uKTsKIAogCS8qIFdlIGNoYW5nZSB0cC0+c25kX254dCBhZnRlciB0aGUgdGNwX3RyYW5zbWl0X3NrYigpIGNhbGwKIAkgKiBpbiBvcmRlciB0byBtYWtlIHRoaXMgcGFja2V0IGdldCBjb3VudGVkIGluIHRjcE91dFNlZ3MuCkBAIC0yNDkzLDYgKzI1MjMsNyBAQAogCXJldHVybiB0Y3BfdHJhbnNtaXRfc2tiKHNrLCBza2IsIDAsIEdGUF9BVE9NSUMpOwogfQogCisvKiBJbml0aWF0ZSBrZWVwYWxpdmUgb3Igd2luZG93IHByb2JlIGZyb20gdGltZXIuICovCiBpbnQgdGNwX3dyaXRlX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IGIxNDRhMjYuLmNkYjJjYTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC0xMzcsMTMgKzEzNywxNCBAQAogewogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAlpbnQgcmV0cnlfdW50aWw7CisJYm9vbCBkb19yZXNldDsKIAogCWlmICgoMSA8PCBzay0+c2tfc3RhdGUpICYgKFRDUEZfU1lOX1NFTlQgfCBUQ1BGX1NZTl9SRUNWKSkgewogCQlpZiAoaWNzay0+aWNza19yZXRyYW5zbWl0cykKIAkJCWRzdF9uZWdhdGl2ZV9hZHZpY2UoJnNrLT5za19kc3RfY2FjaGUpOwogCQlyZXRyeV91bnRpbCA9IGljc2stPmljc2tfc3luX3JldHJpZXMgPyA6IHN5c2N0bF90Y3Bfc3luX3JldHJpZXM7CiAJfSBlbHNlIHsKLQkJaWYgKGljc2stPmljc2tfcmV0cmFuc21pdHMgPj0gc3lzY3RsX3RjcF9yZXRyaWVzMSkgeworCQlpZiAocmV0cmFuc21pdHNfdGltZWRfb3V0KHNrLCBzeXNjdGxfdGNwX3JldHJpZXMxKSkgewogCQkJLyogQmxhY2sgaG9sZSBkZXRlY3Rpb24gKi8KIAkJCXRjcF9tdHVfcHJvYmluZyhpY3NrLCBzayk7CiAKQEAgLTE1NSwxMyArMTU2LDE1IEBACiAJCQljb25zdCBpbnQgYWxpdmUgPSAoaWNzay0+aWNza19ydG8gPCBUQ1BfUlRPX01BWCk7CiAKIAkJCXJldHJ5X3VudGlsID0gdGNwX29ycGhhbl9yZXRyaWVzKHNrLCBhbGl2ZSk7CisJCQlkb19yZXNldCA9IGFsaXZlIHx8CisJCQkJICAgIXJldHJhbnNtaXRzX3RpbWVkX291dChzaywgcmV0cnlfdW50aWwpOwogCi0JCQlpZiAodGNwX291dF9vZl9yZXNvdXJjZXMoc2ssIGFsaXZlIHx8IGljc2stPmljc2tfcmV0cmFuc21pdHMgPCByZXRyeV91bnRpbCkpCisJCQlpZiAodGNwX291dF9vZl9yZXNvdXJjZXMoc2ssIGRvX3Jlc2V0KSkKIAkJCQlyZXR1cm4gMTsKIAkJfQogCX0KIAotCWlmIChpY3NrLT5pY3NrX3JldHJhbnNtaXRzID49IHJldHJ5X3VudGlsKSB7CisJaWYgKHJldHJhbnNtaXRzX3RpbWVkX291dChzaywgcmV0cnlfdW50aWwpKSB7CiAJCS8qIEhhcyBpdCBnb25lIGp1c3QgdG9vIGZhcj8gKi8KIAkJdGNwX3dyaXRlX2Vycihzayk7CiAJCXJldHVybiAxOwpAQCAtMjc5LDcgKzI4Miw3IEBACiAgKglUaGUgVENQIHJldHJhbnNtaXQgdGltZXIuCiAgKi8KIAotc3RhdGljIHZvaWQgdGNwX3JldHJhbnNtaXRfdGltZXIoc3RydWN0IHNvY2sgKnNrKQordm9pZCB0Y3BfcmV0cmFuc21pdF90aW1lcihzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwpAQCAtMzg1LDcgKzM4OCw3IEBACiBvdXRfcmVzZXRfdGltZXI6CiAJaWNzay0+aWNza19ydG8gPSBtaW4oaWNzay0+aWNza19ydG8gPDwgMSwgVENQX1JUT19NQVgpOwogCWluZXRfY3NrX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9SRVRSQU5TLCBpY3NrLT5pY3NrX3J0bywgVENQX1JUT19NQVgpOwotCWlmIChpY3NrLT5pY3NrX3JldHJhbnNtaXRzID4gc3lzY3RsX3RjcF9yZXRyaWVzMSkKKwlpZiAocmV0cmFuc21pdHNfdGltZWRfb3V0KHNrLCBzeXNjdGxfdGNwX3JldHJpZXMxICsgMSkpCiAJCV9fc2tfZHN0X3Jlc2V0KHNrKTsKIAogb3V0OjsKQEAgLTQ5OSw4ICs1MDIsNyBAQAogCWVsYXBzZWQgPSB0Y3BfdGltZV9zdGFtcCAtIHRwLT5yY3ZfdHN0YW1wOwogCiAJaWYgKGVsYXBzZWQgPj0ga2VlcGFsaXZlX3RpbWVfd2hlbih0cCkpIHsKLQkJaWYgKCghdHAtPmtlZXBhbGl2ZV9wcm9iZXMgJiYgaWNzay0+aWNza19wcm9iZXNfb3V0ID49IHN5c2N0bF90Y3Bfa2VlcGFsaXZlX3Byb2JlcykgfHwKLQkJICAgICAodHAtPmtlZXBhbGl2ZV9wcm9iZXMgJiYgaWNzay0+aWNza19wcm9iZXNfb3V0ID49IHRwLT5rZWVwYWxpdmVfcHJvYmVzKSkgeworCQlpZiAoaWNzay0+aWNza19wcm9iZXNfb3V0ID49IGtlZXBhbGl2ZV9wcm9iZXModHApKSB7CiAJCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMpOwogCQkJdGNwX3dyaXRlX2Vycihzayk7CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmMKaW5kZXggODBlMzgxMi4uZWJhYWE3ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwLmMKKysrIGIvbmV0L2lwdjQvdWRwLmMKQEAgLTExMCwxMSArMTEwLDEyIEBACiBFWFBPUlRfU1lNQk9MKHVkcF90YWJsZSk7CiAKIGludCBzeXNjdGxfdWRwX21lbVszXSBfX3JlYWRfbW9zdGx5OwotaW50IHN5c2N0bF91ZHBfcm1lbV9taW4gX19yZWFkX21vc3RseTsKLWludCBzeXNjdGxfdWRwX3dtZW1fbWluIF9fcmVhZF9tb3N0bHk7Ci0KIEVYUE9SVF9TWU1CT0woc3lzY3RsX3VkcF9tZW0pOworCitpbnQgc3lzY3RsX3VkcF9ybWVtX21pbiBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChzeXNjdGxfdWRwX3JtZW1fbWluKTsKKworaW50IHN5c2N0bF91ZHBfd21lbV9taW4gX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0woc3lzY3RsX3VkcF93bWVtX21pbik7CiAKIGF0b21pY190IHVkcF9tZW1vcnlfYWxsb2NhdGVkOwpAQCAtMTU4LDcgKzE1OSw3IEBACiAgKi8KIGludCB1ZHBfbGliX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSwKIAkJICAgICAgIGludCAoKnNhZGRyX2NvbXApKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsCi0JCQkJCSBjb25zdCBzdHJ1Y3Qgc29jayAqc2syICkgICAgKQorCQkJCQkgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikpCiB7CiAJc3RydWN0IHVkcF9oc2xvdCAqaHNsb3Q7CiAJc3RydWN0IHVkcF90YWJsZSAqdWRwdGFibGUgPSBzay0+c2tfcHJvdC0+aC51ZHBfdGFibGU7CkBAIC0yMjEsMTQgKzIyMiwxNSBAQAogZmFpbDoKIAlyZXR1cm4gZXJyb3I7CiB9CitFWFBPUlRfU1lNQk9MKHVkcF9saWJfZ2V0X3BvcnQpOwogCiBzdGF0aWMgaW50IGlwdjRfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDEgPSBpbmV0X3NrKHNrMSksICppbmV0MiA9IGluZXRfc2soc2syKTsKIAotCXJldHVybiAJKCAhaXB2Nl9vbmx5X3NvY2soc2syKSAgJiYKLQkJICAoIWluZXQxLT5yY3Zfc2FkZHIgfHwgIWluZXQyLT5yY3Zfc2FkZHIgfHwKLQkJICAgaW5ldDEtPnJjdl9zYWRkciA9PSBpbmV0Mi0+cmN2X3NhZGRyICAgICAgKSk7CisJcmV0dXJuIAkoIWlwdjZfb25seV9zb2NrKHNrMikgICYmCisJCSAoIWluZXQxLT5yY3Zfc2FkZHIgfHwgIWluZXQyLT5yY3Zfc2FkZHIgfHwKKwkJICAgaW5ldDEtPnJjdl9zYWRkciA9PSBpbmV0Mi0+cmN2X3NhZGRyKSk7CiB9CiAKIGludCB1ZHBfdjRfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtKQpAQCAtMzgzLDggKzM4NSw4IEBACiB2b2lkIF9fdWRwNF9saWJfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvLCBzdHJ1Y3QgdWRwX3RhYmxlICp1ZHB0YWJsZSkKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwotCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciopc2tiLT5kYXRhOwotCXN0cnVjdCB1ZHBoZHIgKnVoID0gKHN0cnVjdCB1ZHBoZHIqKShza2ItPmRhdGErKGlwaC0+aWhsPDwyKSk7CisJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOworCXN0cnVjdCB1ZHBoZHIgKnVoID0gKHN0cnVjdCB1ZHBoZHIgKikoc2tiLT5kYXRhKyhpcGgtPmlobDw8MikpOwogCWNvbnN0IGludCB0eXBlID0gaWNtcF9oZHIoc2tiKS0+dHlwZTsKIAljb25zdCBpbnQgY29kZSA9IGljbXBfaGRyKHNrYiktPmNvZGU7CiAJc3RydWN0IHNvY2sgKnNrOwpAQCAtNDM5LDcgKzQ0MSw3IEBACiAJCWlmICghaGFyZGVyciB8fCBzay0+c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKQogCQkJZ290byBvdXQ7CiAJfSBlbHNlIHsKLQkJaXBfaWNtcF9lcnJvcihzaywgc2tiLCBlcnIsIHVoLT5kZXN0LCBpbmZvLCAodTgqKSh1aCsxKSk7CisJCWlwX2ljbXBfZXJyb3Ioc2ssIHNrYiwgZXJyLCB1aC0+ZGVzdCwgaW5mbywgKHU4ICopKHVoKzEpKTsKIAl9CiAJc2stPnNrX2VyciA9IGVycjsKIAlzay0+c2tfZXJyb3JfcmVwb3J0KHNrKTsKQEAgLTQ3NCw3ICs0NzYsNyBAQAogICogCSAgICAgICAgKGNoZWNrc3VtIGZpZWxkIG11c3QgYmUgemVyb2VkIG91dCkKICAqLwogc3RhdGljIHZvaWQgdWRwNF9od2NzdW1fb3V0Z29pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSBfX2JlMzIgc3JjLCBfX2JlMzIgZHN0LCBpbnQgbGVuICAgICAgKQorCQkJCSBfX2JlMzIgc3JjLCBfX2JlMzIgZHN0LCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJc3RydWN0IHVkcGhkciAqdWggPSB1ZHBfaGRyKHNrYik7CkBAIC01NDUsNyArNTQ3LDcgQEAKIAogCX0gZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeyAvKiBVRFAgaGFyZHdhcmUgY3N1bSAqLwogCi0JCXVkcDRfaHdjc3VtX291dGdvaW5nKHNrLCBza2IsIGZsLT5mbDRfc3JjLGZsLT5mbDRfZHN0LCB1cC0+bGVuKTsKKwkJdWRwNF9od2NzdW1fb3V0Z29pbmcoc2ssIHNrYiwgZmwtPmZsNF9zcmMsIGZsLT5mbDRfZHN0LCB1cC0+bGVuKTsKIAkJZ290byBzZW5kOwogCiAJfSBlbHNlCQkJCQkJIC8qICAgYG5vcm1hbCcgVURQICAgICovCkBAIC01NTMsMTggKzU1NSwyNCBAQAogCiAJLyogYWRkIHByb3RvY29sLWRlcGVuZGVudCBwc2V1ZG8taGVhZGVyICovCiAJdWgtPmNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoZmwtPmZsNF9zcmMsIGZsLT5mbDRfZHN0LCB1cC0+bGVuLAotCQkJCSAgICAgIHNrLT5za19wcm90b2NvbCwgY3N1bSAgICAgICAgICAgICApOworCQkJCSAgICAgIHNrLT5za19wcm90b2NvbCwgY3N1bSk7CiAJaWYgKHVoLT5jaGVjayA9PSAwKQogCQl1aC0+Y2hlY2sgPSBDU1VNX01BTkdMRURfMDsKIAogc2VuZDoKIAllcnIgPSBpcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgPT0gLUVOT0JVRlMgJiYgIWluZXQtPnJlY3ZlcnIpIHsKKwkJCVVEUF9JTkNfU1RBVFNfVVNFUihzb2NrX25ldChzayksCisJCQkJCSAgIFVEUF9NSUJfU05EQlVGRVJST1JTLCBpc191ZHBsaXRlKTsKKwkJCWVyciA9IDA7CisJCX0KKwl9IGVsc2UKKwkJVURQX0lOQ19TVEFUU19VU0VSKHNvY2tfbmV0KHNrKSwKKwkJCQkgICBVRFBfTUlCX09VVERBVEFHUkFNUywgaXNfdWRwbGl0ZSk7CiBvdXQ6CiAJdXAtPmxlbiA9IDA7CiAJdXAtPnBlbmRpbmcgPSAwOwotCWlmICghZXJyKQotCQlVRFBfSU5DX1NUQVRTX1VTRVIoc29ja19uZXQoc2spLAotCQkJCVVEUF9NSUJfT1VUREFUQUdSQU1TLCBpc191ZHBsaXRlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC01OTIsNyArNjAwLDcgQEAKIAkgKglDaGVjayB0aGUgZmxhZ3MuCiAJICovCiAKLQlpZiAobXNnLT5tc2dfZmxhZ3MmTVNHX09PQikJLyogTWlycm9yIEJTRCBlcnJvciBtZXNzYWdlIGNvbXBhdGliaWxpdHkgKi8KKwlpZiAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfT09CKSAvKiBNaXJyb3IgQlNEIGVycm9yIG1lc3NhZ2UgY29tcGF0aWJpbGl0eSAqLwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpcGMub3B0ID0gTlVMTDsKQEAgLTYxOSw3ICs2MjcsNyBAQAogCSAqCUdldCBhbmQgdmVyaWZ5IHRoZSBhZGRyZXNzLgogCSAqLwogCWlmIChtc2ctPm1zZ19uYW1lKSB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqIHVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luKiltc2ctPm1zZ19uYW1lOworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKiB1c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW1zZy0+bXNnX25hbWU7CiAJCWlmIChtc2ctPm1zZ19uYW1lbGVuIDwgc2l6ZW9mKCp1c2luKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAodXNpbi0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKSB7CkBAIC02ODQsNyArNjkyLDcgQEAKIAl9CiAKIAlpZiAoY29ubmVjdGVkKQotCQlydCA9IChzdHJ1Y3QgcnRhYmxlKilza19kc3RfY2hlY2soc2ssIDApOworCQlydCA9IChzdHJ1Y3QgcnRhYmxlICopc2tfZHN0X2NoZWNrKHNrLCAwKTsKIAogCWlmIChydCA9PSBOVUxMKSB7CiAJCXN0cnVjdCBmbG93aSBmbCA9IHsgLm9pZiA9IGlwYy5vaWYsCkBAIC03ODIsNiArNzkwLDcgQEAKIAllcnIgPSAwOwogCWdvdG8gb3V0OwogfQorRVhQT1JUX1NZTUJPTCh1ZHBfc2VuZG1zZyk7CiAKIGludCB1ZHBfc2VuZHBhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNldCwKIAkJIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCkBAIC04NzEsNiArODgwLDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTCh1ZHBfaW9jdGwpOwogCiAvKgogICogCVRoaXMgc2hvdWxkIGJlIGVhc3ksIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGVyZSB3ZQpAQCAtODkyLDcgKzkwMiw3IEBACiAJICoJQ2hlY2sgYW55IHBhc3NlZCBhZGRyZXNzZXMKIAkgKi8KIAlpZiAoYWRkcl9sZW4pCi0JCSphZGRyX2xlbj1zaXplb2YoKnNpbik7CisJCSphZGRyX2xlbiA9IHNpemVvZigqc2luKTsKIAogCWlmIChmbGFncyAmIE1TR19FUlJRVUVVRSkKIAkJcmV0dXJuIGlwX3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTsKQEAgLTkyMyw5ICs5MzMsMTEgQEAKIAogCWlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKQogCQllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwKLQkJCQkJICAgICAgbXNnLT5tc2dfaW92LCBjb3BpZWQgICAgICAgKTsKKwkJCQkJICAgICAgbXNnLT5tc2dfaW92LCBjb3BpZWQpOwogCWVsc2UgewotCQllcnIgPSBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbV9pb3ZlYyhza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgbXNnLT5tc2dfaW92KTsKKwkJZXJyID0gc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWMoc2tiLAorCQkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwKKwkJCQkJCSAgICAgICBtc2ctPm1zZ19pb3YpOwogCiAJCWlmIChlcnIgPT0gLUVJTlZBTCkKIAkJCWdvdG8gY3N1bV9jb3B5X2VycjsKQEAgLTk0MSw4ICs5NTMsNyBAQAogCXNvY2tfcmVjdl90aW1lc3RhbXAobXNnLCBzaywgc2tiKTsKIAogCS8qIENvcHkgdGhlIGFkZHJlc3MuICovCi0JaWYgKHNpbikKLQl7CisJaWYgKHNpbikgewogCQlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogCQlzaW4tPnNpbl9wb3J0ID0gdWRwX2hkcihza2IpLT5zb3VyY2U7CiAJCXNpbi0+c2luX2FkZHIuc19hZGRyID0gaXBfaGRyKHNrYiktPnNhZGRyOwpAQCAtOTk1LDYgKzEwMDYsNyBAQAogCXNrX2RzdF9yZXNldChzayk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHVkcF9kaXNjb25uZWN0KTsKIAogdm9pZCB1ZHBfbGliX3VuaGFzaChzdHJ1Y3Qgc29jayAqc2spCiB7CkBAIC0xMDQ0LDcgKzEwNTYsNyBAQAogICogTm90ZSB0aGF0IGluIHRoZSBzdWNjZXNzIGFuZCBlcnJvciBjYXNlcywgdGhlIHNrYiBpcyBhc3N1bWVkIHRvCiAgKiBoYXZlIGVpdGhlciBiZWVuIHJlcXVldWVkIG9yIGZyZWVkLgogICovCi1pbnQgdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCB1ZHBfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7CiAJaW50IHJjOwpAQCAtMTIxNCw3ICsxMjI2LDcgQEAKIAlpZiAodWgtPmNoZWNrID09IDApIHsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKSB7Ci0JICAgICAgIGlmICghY3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwgc2tiLT5sZW4sCisJCWlmICghY3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwgc2tiLT5sZW4sCiAJCQkJICAgICAgcHJvdG8sIHNrYi0+Y3N1bSkpCiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCX0KQEAgLTEzNTUsNyArMTM2Nyw3IEBACiAJaW50IGVyciA9IDA7CiAJaW50IGlzX3VkcGxpdGUgPSBJU19VRFBMSVRFKHNrKTsKIAotCWlmIChvcHRsZW48c2l6ZW9mKGludCkpCisJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopb3B0dmFsKSkKQEAgLTE0MjYsNiArMTQzOCw3IEBACiAKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTCh1ZHBfbGliX3NldHNvY2tvcHQpOwogCiBpbnQgdWRwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQpAQCAtMTQ1Myw3ICsxNDY2LDcgQEAKIAlzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTsKIAlpbnQgdmFsLCBsZW47CiAKLQlpZiAoZ2V0X3VzZXIobGVuLG9wdGxlbikpCisJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGludCkpOwpAQCAtMTQ4NiwxMCArMTQ5OSwxMSBAQAogCiAJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZ2YWwsbGVuKSkKKwlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJnZhbCwgbGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHVkcF9saWJfZ2V0c29ja29wdCk7CiAKIGludCB1ZHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCSAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKQEAgLTE1MjgsOSArMTU0Miw5IEBACiAJaW50IAlpc19saXRlID0gSVNfVURQTElURShzayk7CiAKIAkvKiBDaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byBjaGVja3N1bSBlcnJvcnMgKi8KLQlpZiAoIChtYXNrICYgUE9MTFJETk9STSkgJiYKLQkgICAgICEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spICYmCi0JICAgICAhKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikpeworCWlmICgobWFzayAmIFBPTExSRE5PUk0pICYmCisJICAgICEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spICYmCisJICAgICEoc2stPnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKSkgewogCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpyY3ZxID0gJnNrLT5za19yZWNlaXZlX3F1ZXVlOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCkBAIC0xNTUyLDYgKzE1NjYsNyBAQAogCXJldHVybiBtYXNrOwogCiB9CitFWFBPUlRfU1lNQk9MKHVkcF9wb2xsKTsKIAogc3RydWN0IHByb3RvIHVkcF9wcm90ID0gewogCS5uYW1lCQkgICA9ICJVRFAiLApAQCAtMTU4Miw2ICsxNTk3LDcgQEAKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfdWRwX2dldHNvY2tvcHQsCiAjZW5kaWYKIH07CitFWFBPUlRfU1lNQk9MKHVkcF9wcm90KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTE3MDMsMTEgKzE3MTksMTMgQEAKIAkJcmMgPSAtRU5PTUVNOwogCXJldHVybiByYzsKIH0KK0VYUE9SVF9TWU1CT0wodWRwX3Byb2NfcmVnaXN0ZXIpOwogCiB2b2lkIHVkcF9wcm9jX3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdWRwX3NlcV9hZmluZm8gKmFmaW5mbykKIHsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCBhZmluZm8tPm5hbWUpOwogfQorRVhQT1JUX1NZTUJPTCh1ZHBfcHJvY191bnJlZ2lzdGVyKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgdm9pZCB1ZHA0X2Zvcm1hdF9zb2NrKHN0cnVjdCBzb2NrICpzcCwgc3RydWN0IHNlcV9maWxlICpmLApAQCAtMTc0MSw3ICsxNzU5LDcgQEAKIAkJaW50IGxlbjsKIAogCQl1ZHA0X2Zvcm1hdF9zb2NrKHYsIHNlcSwgc3RhdGUtPmJ1Y2tldCwgJmxlbik7Ci0JCXNlcV9wcmludGYoc2VxLCAiJSpzXG4iLCAxMjcgLSBsZW4gLCIiKTsKKwkJc2VxX3ByaW50ZihzZXEsICIlKnNcbiIsIDEyNyAtIGxlbiwgIiIpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE4MTYsMTYgKzE4MzQsNjQgQEAKIAlzeXNjdGxfdWRwX3dtZW1fbWluID0gU0tfTUVNX1FVQU5UVU07CiB9CiAKLUVYUE9SVF9TWU1CT0wodWRwX2Rpc2Nvbm5lY3QpOwotRVhQT1JUX1NZTUJPTCh1ZHBfaW9jdGwpOwotRVhQT1JUX1NZTUJPTCh1ZHBfcHJvdCk7Ci1FWFBPUlRfU1lNQk9MKHVkcF9zZW5kbXNnKTsKLUVYUE9SVF9TWU1CT0wodWRwX2xpYl9nZXRzb2Nrb3B0KTsKLUVYUE9SVF9TWU1CT0wodWRwX2xpYl9zZXRzb2Nrb3B0KTsKLUVYUE9SVF9TWU1CT0wodWRwX3BvbGwpOwotRVhQT1JUX1NZTUJPTCh1ZHBfbGliX2dldF9wb3J0KTsKK2ludCB1ZHA0X3Vmb19zZW5kX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IpCit7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CisJc3RydWN0IHVkcGhkciAqdWg7CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotRVhQT1JUX1NZTUJPTCh1ZHBfcHJvY19yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKHVkcF9wcm9jX3VucmVnaXN0ZXIpOwotI2VuZGlmCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp1aCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlwaCA9IGlwX2hkcihza2IpOworCXVoID0gdWRwX2hkcihza2IpOworCisJdWgtPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsIHNrYi0+bGVuLAorCQkJCSAgICAgICBJUFBST1RPX1VEUCwgMCk7CisJc2tiLT5jc3VtX3N0YXJ0ID0gc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtIHNrYi0+aGVhZDsKKwlza2ItPmNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNrX2J1ZmYgKnVkcDRfdWZvX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCBmZWF0dXJlcykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2VncyA9IEVSUl9QVFIoLUVJTlZBTCk7CisJdW5zaWduZWQgaW50IG1zczsKKwlpbnQgb2Zmc2V0OworCV9fd3N1bSBjc3VtOworCisJbXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKKwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPD0gbXNzKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoc2tiX2dzb19vayhza2IsIGZlYXR1cmVzIHwgTkVUSUZfRl9HU09fUk9CVVNUKSkgeworCQkvKiBQYWNrZXQgaXMgZnJvbSBhbiB1bnRydXN0ZWQgc291cmNlLCByZXNldCBnc29fc2Vncy4gKi8KKwkJaW50IHR5cGUgPSBza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlOworCisJCWlmICh1bmxpa2VseSh0eXBlICYgfihTS0JfR1NPX1VEUCB8IFNLQl9HU09fRE9ER1kpIHx8CisJCQkgICAgICEodHlwZSAmIChTS0JfR1NPX1VEUCkpKSkKKwkJCWdvdG8gb3V0OworCisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgPSBESVZfUk9VTkRfVVAoc2tiLT5sZW4sIG1zcyk7CisKKwkJc2VncyA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIERvIHNvZnR3YXJlIFVGTy4gQ29tcGxldGUgYW5kIGZpbGwgaW4gdGhlIFVEUCBjaGVja3N1bSBhcyBIVyBjYW5ub3QKKwkgKiBkbyBjaGVja3N1bSBvZiBVRFAgcGFja2V0cyBzZW50IGFzIG11bHRpcGxlIElQIGZyYWdtZW50cy4KKwkgKi8KKwlvZmZzZXQgPSBza2ItPmNzdW1fc3RhcnQgLSBza2JfaGVhZHJvb20oc2tiKTsKKwljc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItPmxlbiAtIG9mZnNldCwgMCk7CisJb2Zmc2V0ICs9IHNrYi0+Y3N1bV9vZmZzZXQ7CisJKihfX3N1bTE2ICopKHNrYi0+ZGF0YSArIG9mZnNldCkgPSBjc3VtX2ZvbGQoY3N1bSk7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJLyogRnJhZ21lbnQgdGhlIHNrYi4gSVAgaGVhZGVycyBvZiB0aGUgZnJhZ21lbnRzIGFyZSB1cGRhdGVkIGluCisJICogaW5ldF9nc29fc2VnbWVudCgpCisJICovCisJc2VncyA9IHNrYl9zZWdtZW50KHNrYiwgZmVhdHVyZXMpOworb3V0OgorCXJldHVybiBzZWdzOworfQorCmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IDAwNzFlZTYuLjc0ZmIyZWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC0yNjQsNiArMjY0LDIyIEBACiAJLmZpbGxfZHN0ID0JCXhmcm00X2ZpbGxfZHN0LAogfTsKIAorI2lmZGVmIENPTkZJR19TWVNDVEwKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHhmcm00X3BvbGljeV90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJ4ZnJtNF9nY190aHJlc2giLAorCQkuZGF0YSAgICAgICAgICAgPSAmeGZybTRfZHN0X29wcy5nY190aHJlc2gsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZihpbnQpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSBwcm9jX2RvaW50dmVjLAorCX0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnN5c2N0bF9oZHI7CisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IHhmcm00X3BvbGljeV9pbml0KHZvaWQpCiB7CiAJeGZybV9wb2xpY3lfcmVnaXN0ZXJfYWZpbmZvKCZ4ZnJtNF9wb2xpY3lfYWZpbmZvKTsKQEAgLTI3MSwxMiArMjg3LDMxIEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB4ZnJtNF9wb2xpY3lfZmluaSh2b2lkKQogeworI2lmZGVmIENPTkZJR19TWVNDVEwKKwlpZiAoc3lzY3RsX2hkcikKKwkJdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKHN5c2N0bF9oZHIpOworI2VuZGlmCiAJeGZybV9wb2xpY3lfdW5yZWdpc3Rlcl9hZmluZm8oJnhmcm00X3BvbGljeV9hZmluZm8pOwogfQogCi12b2lkIF9faW5pdCB4ZnJtNF9pbml0KHZvaWQpCit2b2lkIF9faW5pdCB4ZnJtNF9pbml0KGludCBydF9tYXhfc2l6ZSkKIHsKIAl4ZnJtNF9zdGF0ZV9pbml0KCk7CiAJeGZybTRfcG9saWN5X2luaXQoKTsKKwkvKgorCSAqIFNlbGVjdCBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBnY190aHJlc2ggYmFzZWQgb24gdGhlIG1haW4gcm91dGUKKwkgKiB0YWJsZSBoYXNoIHNpemUuICBJdCBzZWVtcyB0byBtZSB0aGUgd29yc3QgY2FzZSBzY2VuYXJpbyBpcyB3aGVuCisJICogd2UgaGF2ZSBpcHNlYyBvcGVyYXRpbmcgaW4gdHJhbnNwb3J0IG1vZGUsIGluIHdoaWNoIHdlIGNyZWF0ZSBhCisJICogZHN0X2VudHJ5IHBlciBzb2NrZXQuICBUaGUgeGZybSBnYyBhbGdvcml0aG0gc3RhcnRzIHRyeWluZyB0byByZW1vdmUKKwkgKiBlbnRyaWVzIGF0IGdjX3RocmVzaCwgYW5kIHByZXZlbnRzIG5ldyBhbGxvY2F0aW9ucyBhcyAyKmdjX3RocmVzaAorCSAqIHNvIGxldHMgc2V0IGFuIGluaXRpYWwgeGZybSBnY190aHJlc2ggdmFsdWUgYXQgdGhlIHJ0X21heF9zaXplLzIuCisJICogVGhhdCB3aWxsIGxldCB1cyBzdG9yZSBhbiBpcHNlYyBjb25uZWN0aW9uIHBlciByb3V0ZSB0YWJsZSBlbnRyeSwKKwkgKiBhbmQgc3RhcnQgY2xlYW5pbmcgd2hlbiB3ZXJlIDEvMiBmdWxsCisJICovCisJeGZybTRfZHN0X29wcy5nY190aHJlc2ggPSBydF9tYXhfc2l6ZS8yOworI2lmZGVmIENPTkZJR19TWVNDVEwKKwlzeXNjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZSgmaW5pdF9uZXQsIG5ldF9pcHY0X2N0bF9wYXRoLAorCQkJCQkJeGZybTRfcG9saWN5X3RhYmxlKTsKKyNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCA0M2IzYzlmLi5jOWIzNjkwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTEzNzEsMTIgKzEzNzEsMTQgQEAKIAogLyogR2V0cyByZWZlcmVuY2VkIGFkZHJlc3MsIGRlc3Ryb3lzIGlmYWRkciAqLwogCi1zdGF0aWMgdm9pZCBhZGRyY29uZl9kYWRfc3RvcChzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnApCitzdGF0aWMgdm9pZCBhZGRyY29uZl9kYWRfc3RvcChzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnAsIGludCBkYWRfZmFpbGVkKQogewogCWlmIChpZnAtPmZsYWdzJklGQV9GX1BFUk1BTkVOVCkgewogCQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7CiAJCWFkZHJjb25mX2RlbF90aW1lcihpZnApOwogCQlpZnAtPmZsYWdzIHw9IElGQV9GX1RFTlRBVElWRTsKKwkJaWYgKGRhZF9mYWlsZWQpCisJCQlpZnAtPmZsYWdzIHw9IElGQV9GX0RBREZBSUxFRDsKIAkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7CiAJCWluNl9pZmFfcHV0KGlmcCk7CiAjaWZkZWYgQ09ORklHX0lQVjZfUFJJVkFDWQpAQCAtMTQyMiw3ICsxNDI0LDcgQEAKIAkJfQogCX0KIAotCWFkZHJjb25mX2RhZF9zdG9wKGlmcCk7CisJYWRkcmNvbmZfZGFkX3N0b3AoaWZwLCAxKTsKIH0KIAogLyogSm9pbiB0byBzb2xpY2l0ZWQgYWRkciBtdWx0aWNhc3QgZ3JvdXAuICovCkBAIC0yNzc4LDcgKzI3ODAsNyBAQAogCSAgICBpZGV2LT5jbmYuYWNjZXB0X2RhZCA8IDEgfHwKIAkgICAgIShpZnAtPmZsYWdzJklGQV9GX1RFTlRBVElWRSkgfHwKIAkgICAgaWZwLT5mbGFncyAmIElGQV9GX05PREFEKSB7Ci0JCWlmcC0+ZmxhZ3MgJj0gfihJRkFfRl9URU5UQVRJVkV8SUZBX0ZfT1BUSU1JU1RJQyk7CisJCWlmcC0+ZmxhZ3MgJj0gfihJRkFfRl9URU5UQVRJVkV8SUZBX0ZfT1BUSU1JU1RJQ3xJRkFfRl9EQURGQUlMRUQpOwogCQlzcGluX3VubG9ja19iaCgmaWZwLT5sb2NrKTsKIAkJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwogCkBAIC0yNzk1LDcgKzI3OTcsNyBAQAogCQkgKiAtIG90aGVyd2lzZSwga2lsbCBpdC4KIAkJICovCiAJCWluNl9pZmFfaG9sZChpZnApOwotCQlhZGRyY29uZl9kYWRfc3RvcChpZnApOworCQlhZGRyY29uZl9kYWRfc3RvcChpZnAsIDApOwogCQlyZXR1cm47CiAJfQogCkBAIC0yODI5LDcgKzI4MzEsNyBAQAogCQkgKiBEQUQgd2FzIHN1Y2Nlc3NmdWwKIAkJICovCiAKLQkJaWZwLT5mbGFncyAmPSB+KElGQV9GX1RFTlRBVElWRXxJRkFfRl9PUFRJTUlTVElDKTsKKwkJaWZwLT5mbGFncyAmPSB+KElGQV9GX1RFTlRBVElWRXxJRkFfRl9PUFRJTUlTVElDfElGQV9GX0RBREZBSUxFRCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOwogCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FmX2luZXQ2LmMgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCmluZGV4IDQ1ZjlhMmEuLmExMjNhMzIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmMKKysrIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwpAQCAtNzc0LDYgKzc3NCwxMSBAQAogCXN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTsKIAlzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CiAJc3RydWN0IGluZXQ2X3Byb3RvY29sICpvcHM7CisJaW50IHByb3RvOworCXN0cnVjdCBmcmFnX2hkciAqZnB0cjsKKwl1bnNpZ25lZCBpbnQgdW5mcmFnX2lwNmhsZW47CisJdTggKnByZXZoZHI7CisJaW50IG9mZnNldCA9IDA7CiAKIAlpZiAoIShmZWF0dXJlcyAmIE5FVElGX0ZfVjZfQ1NVTSkpCiAJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1NHOwpAQCAtNzkzLDEwICs3OTgsOSBAQAogCV9fc2tiX3B1bGwoc2tiLCBzaXplb2YoKmlwdjZoKSk7CiAJc2VncyA9IEVSUl9QVFIoLUVQUk9UT05PU1VQUE9SVCk7CiAKKwlwcm90byA9IGlwdjZfZ3NvX3B1bGxfZXh0aGRycyhza2IsIGlwdjZoLT5uZXh0aGRyKTsKIAlyY3VfcmVhZF9sb2NrKCk7Ci0Jb3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXQ2X3Byb3Rvc1sKLQkJaXB2Nl9nc29fcHVsbF9leHRoZHJzKHNrYiwgaXB2NmgtPm5leHRoZHIpXSk7Ci0KKwlvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldDZfcHJvdG9zW3Byb3RvXSk7CiAJaWYgKGxpa2VseShvcHMgJiYgb3BzLT5nc29fc2VnbWVudCkpIHsKIAkJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAkJc2VncyA9IG9wcy0+Z3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7CkBAIC04MTAsNiArODE0LDE2IEBACiAJCWlwdjZoID0gaXB2Nl9oZHIoc2tiKTsKIAkJaXB2NmgtPnBheWxvYWRfbGVuID0gaHRvbnMoc2tiLT5sZW4gLSBza2ItPm1hY19sZW4gLQogCQkJCQkgICBzaXplb2YoKmlwdjZoKSk7CisJCWlmIChwcm90byA9PSBJUFBST1RPX1VEUCkgeworCQkJdW5mcmFnX2lwNmhsZW4gPSBpcDZfZmluZF8xc3RmcmFnb3B0KHNrYiwgJnByZXZoZHIpOworCQkJZnB0ciA9IChzdHJ1Y3QgZnJhZ19oZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKworCQkJCXVuZnJhZ19pcDZobGVuKTsKKwkJCWZwdHItPmZyYWdfb2ZmID0gaHRvbnMob2Zmc2V0KTsKKwkJCWlmIChza2ItPm5leHQgIT0gTlVMTCkKKwkJCQlmcHRyLT5mcmFnX29mZiB8PSBodG9ucyhJUDZfTUYpOworCQkJb2Zmc2V0ICs9IChudG9ocyhpcHY2aC0+cGF5bG9hZF9sZW4pIC0KKwkJCQkgICBzaXplb2Yoc3RydWN0IGZyYWdfaGRyKSk7CisJCX0KIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2ljbXAuYyBiL25ldC9pcHY2L2ljbXAuYwppbmRleCBlYWI2MmE3Li5lMjMyNWY2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pY21wLmMKKysrIGIvbmV0L2lwdjYvaWNtcC5jCkBAIC0zMjMsNyArMzIzLDcgQEAKIAlpbnQgaWlmID0gMDsKIAlpbnQgYWRkcl90eXBlID0gMDsKIAlpbnQgbGVuOwotCWludCBobGltaXQsIHRjbGFzczsKKwlpbnQgaGxpbWl0OwogCWludCBlcnIgPSAwOwogCiAJaWYgKCh1OCAqKWhkciA8IHNrYi0+aGVhZCB8fApAQCAtNDY5LDEwICs0NjksNiBAQAogCWlmIChobGltaXQgPCAwKQogCQlobGltaXQgPSBpcDZfZHN0X2hvcGxpbWl0KGRzdCk7CiAKLQl0Y2xhc3MgPSBucC0+dGNsYXNzOwotCWlmICh0Y2xhc3MgPCAwKQotCQl0Y2xhc3MgPSAwOwotCiAJbXNnLnNrYiA9IHNrYjsKIAltc2cub2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7CiAJbXNnLnR5cGUgPSB0eXBlOwpAQCAtNDg4LDggKzQ4NCw4IEBACiAKIAllcnIgPSBpcDZfYXBwZW5kX2RhdGEoc2ssIGljbXB2Nl9nZXRmcmFnLCAmbXNnLAogCQkJICAgICAgbGVuICsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkciksCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGljbXA2aGRyKSwKLQkJCSAgICAgIGhsaW1pdCwgdGNsYXNzLCBOVUxMLCAmZmwsIChzdHJ1Y3QgcnQ2X2luZm8qKWRzdCwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpLCBobGltaXQsCisJCQkgICAgICBucC0+dGNsYXNzLCBOVUxMLCAmZmwsIChzdHJ1Y3QgcnQ2X2luZm8qKWRzdCwKIAkJCSAgICAgIE1TR19ET05UV0FJVCk7CiAJaWYgKGVycikgewogCQlpcDZfZmx1c2hfcGVuZGluZ19mcmFtZXMoc2spOwpAQCAtNTIyLDcgKzUxOCw2IEBACiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCWludCBlcnIgPSAwOwogCWludCBobGltaXQ7Ci0JaW50IHRjbGFzczsKIAogCXNhZGRyID0gJmlwdjZfaGRyKHNrYiktPmRhZGRyOwogCkBAIC01NjIsMTAgKzU1Nyw2IEBACiAJaWYgKGhsaW1pdCA8IDApCiAJCWhsaW1pdCA9IGlwNl9kc3RfaG9wbGltaXQoZHN0KTsKIAotCXRjbGFzcyA9IG5wLT50Y2xhc3M7Ci0JaWYgKHRjbGFzcyA8IDApCi0JCXRjbGFzcyA9IDA7Ci0KIAlpZGV2ID0gaW42X2Rldl9nZXQoc2tiLT5kZXYpOwogCiAJbXNnLnNrYiA9IHNrYjsKQEAgLTU3Myw3ICs1NjQsNyBAQAogCW1zZy50eXBlID0gSUNNUFY2X0VDSE9fUkVQTFk7CiAKIAllcnIgPSBpcDZfYXBwZW5kX2RhdGEoc2ssIGljbXB2Nl9nZXRmcmFnLCAmbXNnLCBza2ItPmxlbiArIHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpLAotCQkJCXNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpLCBobGltaXQsIHRjbGFzcywgTlVMTCwgJmZsLAorCQkJCXNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpLCBobGltaXQsIG5wLT50Y2xhc3MsIE5VTEwsICZmbCwKIAkJCQkoc3RydWN0IHJ0Nl9pbmZvKilkc3QsIE1TR19ET05UV0FJVCk7CiAKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmMKaW5kZXggNTJlZTFkYy4uMGU5M2NhNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jCisrKyBiL25ldC9pcHY2L2lwNl9maWIuYwpAQCAtMTY0LDEyICsxNjQsNiBAQAogCQlkc3RfZnJlZSgmcnQtPnUuZHN0KTsKIH0KIAotI2lmZGVmIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUwotI2RlZmluZSBGSUJfVEFCTEVfSEFTSFNaIDI1NgotI2Vsc2UKLSNkZWZpbmUgRklCX1RBQkxFX0hBU0hTWiAxCi0jZW5kaWYKLQogc3RhdGljIHZvaWQgZmliNl9saW5rX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfdGFibGUgKnRiKQogewogCXVuc2lnbmVkIGludCBoOwpAQCAtMTgwLDcgKzE3NCw3IEBACiAJICovCiAJcndsb2NrX2luaXQoJnRiLT50YjZfbG9jayk7CiAKLQloID0gdGItPnRiNl9pZCAmIChGSUJfVEFCTEVfSEFTSFNaIC0gMSk7CisJaCA9IHRiLT50YjZfaWQgJiAoRklCNl9UQUJMRV9IQVNIU1ogLSAxKTsKIAogCS8qCiAJICogTm8gcHJvdGVjdGlvbiBuZWNlc3NhcnksIHRoaXMgaXMgdGhlIG9ubHkgbGlzdCBtdXRhdGF0aW9uCkBAIC0yMzEsNyArMjI1LDcgQEAKIAogCWlmIChpZCA9PSAwKQogCQlpZCA9IFJUNl9UQUJMRV9NQUlOOwotCWggPSBpZCAmIChGSUJfVEFCTEVfSEFTSFNaIC0gMSk7CisJaCA9IGlkICYgKEZJQjZfVEFCTEVfSEFTSFNaIC0gMSk7CiAJcmN1X3JlYWRfbG9jaygpOwogCWhlYWQgPSAmbmV0LT5pcHY2LmZpYl90YWJsZV9oYXNoW2hdOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0Yiwgbm9kZSwgaGVhZCwgdGI2X2hsaXN0KSB7CkBAIC0zODIsNyArMzc2LDcgQEAKIAlhcmcubmV0ID0gbmV0OwogCXctPmFyZ3MgPSAmYXJnOwogCi0JZm9yIChoID0gc19oOyBoIDwgRklCX1RBQkxFX0hBU0hTWjsgaCsrLCBzX2UgPSAwKSB7CisJZm9yIChoID0gc19oOyBoIDwgRklCNl9UQUJMRV9IQVNIU1o7IGgrKywgc19lID0gMCkgewogCQllID0gMDsKIAkJaGVhZCA9ICZuZXQtPmlwdjYuZmliX3RhYmxlX2hhc2hbaF07CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRiLCBub2RlLCBoZWFkLCB0YjZfaGxpc3QpIHsKQEAgLTEzNjgsNyArMTM2Miw3IEBACiAJdW5zaWduZWQgaW50IGg7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yIChoID0gMDsgaCA8IEZJQl9UQUJMRV9IQVNIU1o7IGgrKykgeworCWZvciAoaCA9IDA7IGggPCBGSUI2X1RBQkxFX0hBU0hTWjsgaCsrKSB7CiAJCWhlYWQgPSAmbmV0LT5pcHY2LmZpYl90YWJsZV9oYXNoW2hdOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodGFibGUsIG5vZGUsIGhlYWQsIHRiNl9obGlzdCkgewogCQkJd3JpdGVfbG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKQEAgLTE0ODMsNyArMTQ3Nyw3IEBACiAJaWYgKCFuZXQtPmlwdjYucnQ2X3N0YXRzKQogCQlnb3RvIG91dF90aW1lcjsKIAotCW5ldC0+aXB2Ni5maWJfdGFibGVfaGFzaCA9IGtjYWxsb2MoRklCX1RBQkxFX0hBU0hTWiwKKwluZXQtPmlwdjYuZmliX3RhYmxlX2hhc2ggPSBrY2FsbG9jKEZJQjZfVEFCTEVfSEFTSFNaLAogCQkJCQkgICBzaXplb2YoKm5ldC0+aXB2Ni5maWJfdGFibGVfaGFzaCksCiAJCQkJCSAgIEdGUF9LRVJORUwpOwogCWlmICghbmV0LT5pcHY2LmZpYl90YWJsZV9oYXNoKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2lucHV0LmMgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwppbmRleCA2ZDZhNDI3Li4yZDljYmFhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwpAQCAtNjMsNyArNjMsNyBAQAogCiAJaWYgKHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX09USEVSSE9TVCkgewogCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRfUlhfRFJPUDsKIAl9CiAKIAlyY3VfcmVhZF9sb2NrKCk7CkBAIC0xMzMsNyArMTMzLDcgQEAKIAkJaWYgKGlwdjZfcGFyc2VfaG9wb3B0cyhza2IpIDwgMCkgewogCQkJSVA2X0lOQ19TVEFUU19CSChuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUX1JYX0RST1A7CiAJCX0KIAl9CiAKQEAgLTE0OSw3ICsxNDksNyBAQAogZHJvcDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlrZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggODdmODQxOS4uY2Q0ODgwMWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKQEAgLTU3LDE4ICs1Nyw2IEBACiAKIHN0YXRpYyBpbnQgaXA2X2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCAoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYgKikpOwogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGlwdjZfc2VsZWN0X2lkZW50KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmcmFnX2hkciAqZmhkcikKLXsKLQlzdGF0aWMgdTMyIGlwdjZfZnJhZ21lbnRhdGlvbl9pZCA9IDE7Ci0Jc3RhdGljIERFRklORV9TUElOTE9DSyhpcDZfaWRfbG9jayk7Ci0KLQlzcGluX2xvY2tfYmgoJmlwNl9pZF9sb2NrKTsKLQlmaGRyLT5pZGVudGlmaWNhdGlvbiA9IGh0b25sKGlwdjZfZnJhZ21lbnRhdGlvbl9pZCk7Ci0JaWYgKCsraXB2Nl9mcmFnbWVudGF0aW9uX2lkID09IDApCi0JCWlwdjZfZnJhZ21lbnRhdGlvbl9pZCA9IDE7Ci0Jc3Bpbl91bmxvY2tfYmgoJmlwNl9pZF9sb2NrKTsKLX0KLQogaW50IF9faXA2X2xvY2FsX291dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCBsZW47CkBAIC0yMDYsNyArMTk0LDggQEAKIAlzdHJ1Y3QgaXB2NmhkciAqaGRyOwogCXU4ICBwcm90byA9IGZsLT5wcm90bzsKIAlpbnQgc2VnX2xlbiA9IHNrYi0+bGVuOwotCWludCBobGltaXQsIHRjbGFzczsKKwlpbnQgaGxpbWl0ID0gLTE7CisJaW50IHRjbGFzcyA9IDA7CiAJdTMyIG10dTsKIAogCWlmIChvcHQpIHsKQEAgLTI0OSwxOSArMjM4LDEzIEBACiAJLyoKIAkgKglGaWxsIGluIHRoZSBJUHY2IGhlYWRlcgogCSAqLwotCi0JaGxpbWl0ID0gLTE7Ci0JaWYgKG5wKQorCWlmIChucCkgeworCQl0Y2xhc3MgPSBucC0+dGNsYXNzOwogCQlobGltaXQgPSBucC0+aG9wX2xpbWl0OworCX0KIAlpZiAoaGxpbWl0IDwgMCkKIAkJaGxpbWl0ID0gaXA2X2RzdF9ob3BsaW1pdChkc3QpOwogCi0JdGNsYXNzID0gLTE7Ci0JaWYgKG5wKQotCQl0Y2xhc3MgPSBucC0+dGNsYXNzOwotCWlmICh0Y2xhc3MgPCAwKQotCQl0Y2xhc3MgPSAwOwotCiAJKihfX2JlMzIgKiloZHIgPSBodG9ubCgweDYwMDAwMDAwIHwgKHRjbGFzcyA8PCAyMCkpIHwgZmwtPmZsNl9mbG93bGFiZWw7CiAKIAloZHItPnBheWxvYWRfbGVuID0gaHRvbnMoc2VnX2xlbik7CkBAIC03MDYsNyArNjg5LDcgQEAKIAkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAJCW1lbWNweShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgdG1wX2hkciwgaGxlbik7CiAKLQkJaXB2Nl9zZWxlY3RfaWRlbnQoc2tiLCBmaCk7CisJCWlwdjZfc2VsZWN0X2lkZW50KGZoKTsKIAkJZmgtPm5leHRoZHIgPSBuZXh0aGRyOwogCQlmaC0+cmVzZXJ2ZWQgPSAwOwogCQlmaC0+ZnJhZ19vZmYgPSBodG9ucyhJUDZfTUYpOwpAQCAtODQ0LDcgKzgyNyw3IEBACiAJCWZoLT5uZXh0aGRyID0gbmV4dGhkcjsKIAkJZmgtPnJlc2VydmVkID0gMDsKIAkJaWYgKCFmcmFnX2lkKSB7Ci0JCQlpcHY2X3NlbGVjdF9pZGVudChza2IsIGZoKTsKKwkJCWlwdjZfc2VsZWN0X2lkZW50KGZoKTsKIAkJCWZyYWdfaWQgPSBmaC0+aWRlbnRpZmljYXRpb247CiAJCX0gZWxzZQogCQkJZmgtPmlkZW50aWZpY2F0aW9uID0gZnJhZ19pZDsKQEAgLTEwODcsMTEgKzEwNzAsMTMgQEAKIAlpZiAoIWVycikgewogCQlzdHJ1Y3QgZnJhZ19oZHIgZmhkcjsKIAotCQkvKiBzcGVjaWZ5IHRoZSBsZW5ndGggb2YgZWFjaCBJUCBkYXRhZ3JhbSBmcmFnbWVudCovCi0JCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSBtdHUgLSBmcmFnaGVhZGVybGVuIC0KLQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgZnJhZ19oZHIpOworCQkvKiBTcGVjaWZ5IHRoZSBsZW5ndGggb2YgZWFjaCBJUHY2IGRhdGFncmFtIGZyYWdtZW50LgorCQkgKiBJdCBoYXMgdG8gYmUgYSBtdWx0aXBsZSBvZiA4LgorCQkgKi8KKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IChtdHUgLSBmcmFnaGVhZGVybGVuIC0KKwkJCQkJICAgICBzaXplb2Yoc3RydWN0IGZyYWdfaGRyKSkgJiB+NzsKIAkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9IFNLQl9HU09fVURQOwotCQlpcHY2X3NlbGVjdF9pZGVudChza2IsICZmaGRyKTsKKwkJaXB2Nl9zZWxlY3RfaWRlbnQoJmZoZHIpOwogCQlza2Jfc2hpbmZvKHNrYiktPmlwNl9mcmFnX2lkID0gZmhkci5pZGVudGlmaWNhdGlvbjsKIAkJX19za2JfcXVldWVfdGFpbCgmc2stPnNrX3dyaXRlX3F1ZXVlLCBza2IpOwogCkBAIC0xNTI2LDcgKzE1MTEsNyBAQAogCWVyciA9IGlwNl9sb2NhbF9vdXQoc2tiKTsKIAlpZiAoZXJyKSB7CiAJCWlmIChlcnIgPiAwKQotCQkJZXJyID0gbnAtPnJlY3ZlcnIgPyBuZXRfeG1pdF9lcnJubyhlcnIpIDogMDsKKwkJCWVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycm9yOwogCX0KQEAgLTE1MzUsNiArMTUyMCw3IEBACiAJaXA2X2NvcmtfcmVsZWFzZShpbmV0LCBucCk7CiAJcmV0dXJuIGVycjsKIGVycm9yOgorCUlQNl9JTkNfU1RBVFMobmV0LCBydC0+cnQ2aV9pZGV2LCBJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CiAJZ290byBvdXQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwppbmRleCA1MWY0MTBlLi43ZDI1YmJlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC0xMDM2LDcgKzEwMzYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEwNjMsMTQgKzEwNjMsMTQgQEAKIAkJZ290byB0eF9lcnI7CiAKIAl0LT5yZWN1cnNpb24tLTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiB0eF9lcnI6CiAJc3RhdHMtPnR4X2Vycm9ycysrOwogCXN0YXRzLT50eF9kcm9wcGVkKys7CiAJa2ZyZWVfc2tiKHNrYik7CiAJdC0+cmVjdXJzaW9uLS07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgaXA2X3RubF9zZXRfY2FwKHN0cnVjdCBpcDZfdG5sICp0KQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmMKaW5kZXggYzc2OWYxNS4uNWM4ZDczNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2bXIuYworKysgYi9uZXQvaXB2Ni9pcDZtci5jCkBAIC0yMDQsNyArMjA0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpcDZtcl92aWZfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXA2bXJfdmlmX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gaXA2bXJfdmlmX3NlcV9zdGFydCwKIAkubmV4dCAgPSBpcDZtcl92aWZfc2VxX25leHQsCiAJLnN0b3AgID0gaXA2bXJfdmlmX3NlcV9zdG9wLApAQCAtMjE3LDcgKzIxNyw3IEBACiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcG1yX3ZpZl9pdGVyKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwNm1yX3ZpZl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXA2bXJfdmlmX2ZvcHMgPSB7CiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAogCS5vcGVuICAgID0gaXA2bXJfdmlmX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKQEAgLTM0MSw3ICszNDEsNyBAQAogCQkJICAgIHNpemVvZihzdHJ1Y3QgaXBtcl9tZmNfaXRlcikpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcDZtcl9tZmNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwNm1yX21mY19mb3BzID0gewogCS5vd25lcgkgPSBUSElTX01PRFVMRSwKIAkub3BlbiAgICA9IGlwbXJfbWZjX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKQEAgLTQxNiw3ICs0MTYsOCBAQAogCiAvKiBTZXJ2aWNlIHJvdXRpbmVzIGNyZWF0aW5nIHZpcnR1YWwgaW50ZXJmYWNlczogUElNUkVHICovCiAKLXN0YXRpYyBpbnQgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAKQEAgLTQyNyw3ICs0MjgsNyBAQAogCQkJICAgTVJUNk1TR19XSE9MRVBLVCk7CiAJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKIAlrZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJlZ192aWZfbmV0ZGV2X29wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCBhN2ZkZjlhLi5mNWUwNjgyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC0zMTUsNiArMzE1LDkgQEAKIAkJCWdvdG8gZV9pbnZhbDsKIAkJaWYgKHZhbCA8IC0xIHx8IHZhbCA+IDB4ZmYpCiAJCQlnb3RvIGVfaW52YWw7CisJCS8qIFJGQyAzNTQyLCA2LjU6IGRlZmF1bHQgdHJhZmZpYyBjbGFzcyBvZiAweDAgKi8KKwkJaWYgKHZhbCA9PSAtMSkKKwkJCXZhbCA9IDA7CiAJCW5wLT50Y2xhc3MgPSB2YWw7CiAJCXJldHYgPSAwOwogCQlicmVhazsKQEAgLTEwMzcsOCArMTA0MCw2IEBACiAKIAljYXNlIElQVjZfVENMQVNTOgogCQl2YWwgPSBucC0+dGNsYXNzOwotCQlpZiAodmFsIDwgMCkKLQkJCXZhbCA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSBJUFY2X1JFQ1ZUQ0xBU1M6CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9tY2FzdC5jIGIvbmV0L2lwdjYvbWNhc3QuYwppbmRleCA0YjI2NGVkLi43MWMzZGFjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9tY2FzdC5jCisrKyBiL25ldC9pcHY2L21jYXN0LmMKQEAgLTIxMDcsNyArMjEwNyw2IEBACiAJCWZvciAoaj0wOyBqPGk7IGorKykKIAkJCSh2b2lkKSBpcDZfbWNfZGVsMV9zcmMocG1jLCBzZm1vZGUsICZwc2ZzcmNbaV0pOwogCX0gZWxzZSBpZiAoaXNleGNsdWRlICE9IChwbWMtPm1jYV9zZmNvdW50W01DQVNUX0VYQ0xVREVdICE9IDApKSB7Ci0JCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBwbWMtPmlkZXY7CiAJCXN0cnVjdCBpcDZfc2ZfbGlzdCAqcHNmOwogCiAJCS8qIGZpbHRlciBtb2RlIGNoYW5nZSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggOWViNjhlOS4uNzAxNTQ3OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmRpc2MuYworKysgYi9uZXQvaXB2Ni9uZGlzYy5jCkBAIC05OCw3ICs5OCw3IEBACiBzdGF0aWMgdm9pZCBwbmRpc2NfZGVzdHJ1Y3RvcihzdHJ1Y3QgcG5laWdoX2VudHJ5ICpuKTsKIHN0YXRpYyB2b2lkIHBuZGlzY19yZWRvKHN0cnVjdCBza19idWZmICpza2IpOwogCi1zdGF0aWMgc3RydWN0IG5laWdoX29wcyBuZGlzY19nZW5lcmljX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmVpZ2hfb3BzIG5kaXNjX2dlbmVyaWNfb3BzID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVDYsCiAJLnNvbGljaXQgPQkJbmRpc2Nfc29saWNpdCwKIAkuZXJyb3JfcmVwb3J0ID0JCW5kaXNjX2Vycm9yX3JlcG9ydCwKQEAgLTEwOCw3ICsxMDgsNyBAQAogCS5xdWV1ZV94bWl0ID0JCWRldl9xdWV1ZV94bWl0LAogfTsKIAotc3RhdGljIHN0cnVjdCBuZWlnaF9vcHMgbmRpc2NfaGhfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBuZWlnaF9vcHMgbmRpc2NfaGhfb3BzID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVDYsCiAJLnNvbGljaXQgPQkJbmRpc2Nfc29saWNpdCwKIAkuZXJyb3JfcmVwb3J0ID0JCW5kaXNjX2Vycm9yX3JlcG9ydCwKQEAgLTExOSw3ICsxMTksNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IG5laWdoX29wcyBuZGlzY19kaXJlY3Rfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBuZWlnaF9vcHMgbmRpc2NfZGlyZWN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQ2LAogCS5vdXRwdXQgPQkJZGV2X3F1ZXVlX3htaXQsCiAJLmNvbm5lY3RlZF9vdXRwdXQgPQlkZXZfcXVldWVfeG1pdCwKQEAgLTk1NSw4ICs5NTUsOCBAQAogCQkgKi8KIAkJaWYgKHNrYi0+cGt0X3R5cGUgIT0gUEFDS0VUX0xPT1BCQUNLKQogCQkJTkRfUFJJTlRLMShLRVJOX1dBUk5JTkcKLQkJCSAgICJJQ01QdjYgTkE6IHNvbWVvbmUgYWR2ZXJ0aXNlcyBvdXIgYWRkcmVzcyBvbiAlcyFcbiIsCi0JCQkgICBpZnAtPmlkZXYtPmRldi0+bmFtZSk7CisJCQkgICAiSUNNUHY2IE5BOiBzb21lb25lIGFkdmVydGlzZXMgb3VyIGFkZHJlc3MgJXBJNiBvbiAlcyFcbiIsCisJCQkgICAmaWZwLT5hZGRyLCBpZnAtPmlkZXYtPmRldi0+bmFtZSk7CiAJCWluNl9pZmFfcHV0KGlmcCk7CiAJCXJldHVybjsKIAl9CkBAIC0xMTUxLDEwICsxMTUxLDYgQEAKIAkJCSAgIHNrYi0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoaW42X2Rldi0+Y25mLmZvcndhcmRpbmcgfHwgIWluNl9kZXYtPmNuZi5hY2NlcHRfcmEpIHsKLQkJaW42X2Rldl9wdXQoaW42X2Rldik7Ci0JCXJldHVybjsKLQl9CiAKIAlpZiAoIW5kaXNjX3BhcnNlX29wdGlvbnMob3B0LCBvcHRsZW4sICZuZG9wdHMpKSB7CiAJCWluNl9kZXZfcHV0KGluNl9kZXYpOwpAQCAtMTE2Myw2ICsxMTU5LDEwIEBACiAJCXJldHVybjsKIAl9CiAKKwkvKiBza2lwIHJvdXRlIGFuZCBsaW5rIGNvbmZpZ3VyYXRpb24gb24gcm91dGVycyAqLworCWlmIChpbjZfZGV2LT5jbmYuZm9yd2FyZGluZyB8fCAhaW42X2Rldi0+Y25mLmFjY2VwdF9yYSkKKwkJZ290byBza2lwX2xpbmtwYXJtczsKKwogI2lmZGVmIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFCiAJLyogc2tpcCBsaW5rLXNwZWNpZmljIHBhcmFtZXRlcnMgZnJvbSBpbnRlcmlvciByb3V0ZXJzICovCiAJaWYgKHNrYi0+bmRpc2Nfbm9kZXR5cGUgPT0gTkRJU0NfTk9ERVRZUEVfTk9ERUZBVUxUKQpAQCAtMTI4Myw5ICsxMjgzLDcgQEAKIAkJfQogCX0KIAotI2lmZGVmIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFCiBza2lwX2xpbmtwYXJtczoKLSNlbmRpZgogCiAJLyoKIAkgKglQcm9jZXNzIG9wdGlvbnMuCkBAIC0xMzEyLDYgKzEzMTAsMTAgQEAKIAkJCSAgICAgTkVJR0hfVVBEQVRFX0ZfSVNST1VURVIpOwogCX0KIAorCS8qIHNraXAgcm91dGUgYW5kIGxpbmsgY29uZmlndXJhdGlvbiBvbiByb3V0ZXJzICovCisJaWYgKGluNl9kZXYtPmNuZi5mb3J3YXJkaW5nIHx8ICFpbjZfZGV2LT5jbmYuYWNjZXB0X3JhKQorCQlnb3RvIG91dDsKKwogI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk8KIAlpZiAoaW42X2Rldi0+Y25mLmFjY2VwdF9yYV9ydHJfcHJlZiAmJiBuZG9wdHMubmRfb3B0c19yaSkgewogCQlzdHJ1Y3QgbmRfb3B0X2hkciAqcDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IGNlZDFmMmMuLmNjOWY4ZWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtOCw3ICs4LDcgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC0yMjIsMTYgKzIyMiwxMSBAQAogCiAvKiBBbGwgemVyb2VzID09IHVuY29uZGl0aW9uYWwgcnVsZS4gKi8KIC8qIE1pbGRseSBwZXJmIGNyaXRpY2FsIChvbmx5IGlmIHBhY2tldCB0cmFjaW5nIGlzIG9uKSAqLwotc3RhdGljIGlubGluZSBpbnQKLXVuY29uZGl0aW9uYWwoY29uc3Qgc3RydWN0IGlwNnRfaXA2ICppcHY2KQorc3RhdGljIGlubGluZSBib29sIHVuY29uZGl0aW9uYWwoY29uc3Qgc3RydWN0IGlwNnRfaXA2ICppcHY2KQogewotCXVuc2lnbmVkIGludCBpOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXA2dF9pcDYgdW5jb25kOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZigqaXB2Nik7IGkrKykKLQkJaWYgKCgoY2hhciAqKWlwdjYpW2ldKQotCQkJYnJlYWs7Ci0KLQlyZXR1cm4gKGkgPT0gc2l6ZW9mKCppcHY2KSk7CisJcmV0dXJuIG1lbWNtcChpcHY2LCAmdW5jb25kLCBzaXplb2YodW5jb25kKSkgPT0gMDsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UpIHx8IFwKQEAgLTc0NSw2ICs3NDAsMjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgYm9vbCBjaGVja191bmRlcmZsb3coc3RydWN0IGlwNnRfZW50cnkgKmUpCit7CisJY29uc3Qgc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0ICp0OworCXVuc2lnbmVkIGludCB2ZXJkaWN0OworCisJaWYgKCF1bmNvbmRpdGlvbmFsKCZlLT5pcHY2KSkKKwkJcmV0dXJuIGZhbHNlOworCXQgPSBpcDZ0X2dldF90YXJnZXQoZSk7CisJaWYgKHN0cmNtcCh0LT51LnVzZXIubmFtZSwgWFRfU1RBTkRBUkRfVEFSR0VUKSAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisJdmVyZGljdCA9ICgoc3RydWN0IGlwNnRfc3RhbmRhcmRfdGFyZ2V0ICopdCktPnZlcmRpY3Q7CisJdmVyZGljdCA9IC12ZXJkaWN0IC0gMTsKKwlyZXR1cm4gdmVyZGljdCA9PSBORl9EUk9QIHx8IHZlcmRpY3QgPT0gTkZfQUNDRVBUOworfQorCiBzdGF0aWMgaW50CiBjaGVja19lbnRyeV9zaXplX2FuZF9ob29rcyhzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwKIAkJCSAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLApAQCAtNzUyLDYgKzc2Miw3IEBACiAJCQkgICB1bnNpZ25lZCBjaGFyICpsaW1pdCwKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAogCQkJICAgY29uc3QgdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzLAorCQkJICAgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLAogCQkJICAgdW5zaWduZWQgaW50ICppKQogewogCXVuc2lnbmVkIGludCBoOwpAQCAtNzcxLDE1ICs3ODIsMjEgQEAKIAogCS8qIENoZWNrIGhvb2tzICYgdW5kZXJmbG93cyAqLwogCWZvciAoaCA9IDA7IGggPCBORl9JTkVUX05VTUhPT0tTOyBoKyspIHsKKwkJaWYgKCEodmFsaWRfaG9va3MgJiAoMSA8PCBoKSkpCisJCQljb250aW51ZTsKIAkJaWYgKCh1bnNpZ25lZCBjaGFyICopZSAtIGJhc2UgPT0gaG9va19lbnRyaWVzW2hdKQogCQkJbmV3aW5mby0+aG9va19lbnRyeVtoXSA9IGhvb2tfZW50cmllc1toXTsKLQkJaWYgKCh1bnNpZ25lZCBjaGFyICopZSAtIGJhc2UgPT0gdW5kZXJmbG93c1toXSkKKwkJaWYgKCh1bnNpZ25lZCBjaGFyICopZSAtIGJhc2UgPT0gdW5kZXJmbG93c1toXSkgeworCQkJaWYgKCFjaGVja191bmRlcmZsb3coZSkpIHsKKwkJCQlwcl9lcnIoIlVuZGVyZmxvd3MgbXVzdCBiZSB1bmNvbmRpdGlvbmFsIGFuZCAiCisJCQkJICAgICAgICJ1c2UgdGhlIFNUQU5EQVJEIHRhcmdldCB3aXRoICIKKwkJCQkgICAgICAgIkFDQ0VQVC9EUk9QXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KIAkJCW5ld2luZm8tPnVuZGVyZmxvd1toXSA9IHVuZGVyZmxvd3NbaF07CisJCX0KIAl9CiAKLQkvKiBGSVhNRTogdW5kZXJmbG93cyBtdXN0IGJlIHVuY29uZGl0aW9uYWwsIHN0YW5kYXJkIHZlcmRpY3RzCi0JICAgPCAwIChub3QgSVA2VF9SRVRVUk4pLiAtLVJSICovCi0KIAkvKiBDbGVhciBjb3VudGVycyBhbmQgY29tZWZyb20gKi8KIAllLT5jb3VudGVycyA9ICgoc3RydWN0IHh0X2NvdW50ZXJzKSB7IDAsIDAgfSk7CiAJZS0+Y29tZWZyb20gPSAwOwpAQCAtODQyLDcgKzg1OSw3IEBACiAJCQkJbmV3aW5mbywKIAkJCQllbnRyeTAsCiAJCQkJZW50cnkwICsgc2l6ZSwKLQkJCQlob29rX2VudHJpZXMsIHVuZGVyZmxvd3MsICZpKTsKKwkJCQlob29rX2VudHJpZXMsIHVuZGVyZmxvd3MsIHZhbGlkX2hvb2tzLCAmaSk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0yMDgzLDcgKzIxMDAsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCB4dF90YWJsZSAqaXA2dF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCitzdHJ1Y3QgeHRfdGFibGUgKmlwNnRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHh0X3RhYmxlICp0YWJsZSwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBpcDZ0X3JlcGxhY2UgKnJlcGwpCiB7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2V1aTY0LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ldWk2NC5jCmluZGV4IGRiNjEwYmEuLmNhMjg3ZjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2V1aTY0LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZXVpNjQuYwpAQCAtMjMsNyArMjMsNiBAQAogZXVpNjRfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewogCXVuc2lnbmVkIGNoYXIgZXVpNjRbOF07Ci0JaW50IGkgPSAwOwogCiAJaWYgKCEoc2tiX21hY19oZWFkZXIoc2tiKSA+PSBza2ItPmhlYWQgJiYKIAkgICAgICBza2JfbWFjX2hlYWRlcihza2IpICsgRVRIX0hMRU4gPD0gc2tiLT5kYXRhKSAmJgpAQCAtNDIsMTIgKzQxLDggQEAKIAkJCWV1aTY0WzRdID0gMHhmZTsKIAkJCWV1aTY0WzBdIF49IDB4MDI7CiAKLQkJCWkgPSAwOwotCQkJd2hpbGUgKGlwdjZfaGRyKHNrYiktPnNhZGRyLnM2X2FkZHJbOCArIGldID09IGV1aTY0W2ldCi0JCQkgICAgICAgJiYgaSA8IDgpCi0JCQkJaSsrOwotCi0JCQlpZiAoaSA9PSA4KQorCQkJaWYgKCFtZW1jbXAoaXB2Nl9oZHIoc2tiKS0+c2FkZHIuczZfYWRkciArIDgsIGV1aTY0LAorCQkJCSAgICBzaXplb2YoZXVpNjQpKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYwppbmRleCBlZjVhMGEzLi42ZjQzODNhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCkBAIC01MSwxMSArNTEsMTEgQEAKIAkudGVybSA9IElQNlRfRVJST1JfSU5JVCwJCS8qIEVSUk9SICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAogCS5tZQkJPSBUSElTX01PRFVMRSwKLQkuYWYJCT0gQUZfSU5FVDYsCisJLmFmCQk9IE5GUFJPVE9fSVBWNiwKIH07CiAKIC8qIFRoZSB3b3JrIGNvbWVzIGluIGhlcmUgZnJvbSBuZXRmaWx0ZXIuYy4gKi8KQEAgLTk1LDIxICs5NSwyMSBAQAogCXsKIAkJLmhvb2sJCT0gaXA2dF9pbl9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVUNiwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAogCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0ZJTFRFUiwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXA2dF9pbl9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVUNiwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0ZPUldBUkQsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfRklMVEVSLAogCX0sCiAJewogCQkuaG9vawkJPSBpcDZ0X2xvY2FsX291dF9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVUNiwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKIAkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9GSUxURVIsCiAJfSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYwppbmRleCBhYjBkMzk4Li4wYWQ5MTQzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCkBAIC0yMSw3ICsyMSw3IEBACiAJCQkgICAgKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpIHwgXAogCQkJICAgICgxIDw8IE5GX0lORVRfUE9TVF9ST1VUSU5HKSkKIAotc3RhdGljIHN0cnVjdAorc3RhdGljIGNvbnN0IHN0cnVjdAogewogCXN0cnVjdCBpcDZ0X3JlcGxhY2UgcmVwbDsKIAlzdHJ1Y3QgaXA2dF9zdGFuZGFyZCBlbnRyaWVzWzVdOwpAQCAtNTcsMTEgKzU3LDExIEBACiAJLnRlcm0gPSBJUDZUX0VSUk9SX0lOSVQsCQkvKiBFUlJPUiAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfbWFuZ2xlciA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X21hbmdsZXIgPSB7CiAJLm5hbWUJCT0gIm1hbmdsZSIsCiAJLnZhbGlkX2hvb2tzCT0gTUFOR0xFX1ZBTElEX0hPT0tTLAogCS5tZQkJPSBUSElTX01PRFVMRSwKLQkuYWYJCT0gQUZfSU5FVDYsCisJLmFmCQk9IE5GUFJPVE9fSVBWNiwKIH07CiAKIC8qIFRoZSB3b3JrIGNvbWVzIGluIGhlcmUgZnJvbSBuZXRmaWx0ZXIuYy4gKi8KQEAgLTEzNiwzNSArMTM2LDM1IEBACiAJewogCQkuaG9vawkJPSBpcDZ0X2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAorCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfUFJFX1JPVVRJTkcsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTUFOR0xFLAogCX0sCiAJewogCQkuaG9vawkJPSBpcDZ0X2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAorCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfSU4sCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTUFOR0xFLAogCX0sCiAJewogCQkuaG9vawkJPSBpcDZ0X2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAorCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfRk9SV0FSRCwKIAkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9NQU5HTEUsCiAJfSwKIAl7CiAJCS5ob29rCQk9IGlwNnRfbG9jYWxfb3V0X2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAorCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfT1VULAogCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX01BTkdMRSwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXA2dF9wb3N0X3JvdXRpbmdfaG9vaywKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVDYsCisJCS5wZgkJPSBORlBST1RPX0lQVjYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9QT1NUX1JPVVRJTkcsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTUFOR0xFLAogCX0sCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKaW5kZXggNGI3OTJiNi4uZWQxYTExOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYwpAQCAtOCw3ICs4LDcgQEAKIAogI2RlZmluZSBSQVdfVkFMSURfSE9PS1MgKCgxIDw8IE5GX0lORVRfUFJFX1JPVVRJTkcpIHwgKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpKQogCi1zdGF0aWMgc3RydWN0CitzdGF0aWMgY29uc3Qgc3RydWN0CiB7CiAJc3RydWN0IGlwNnRfcmVwbGFjZSByZXBsOwogCXN0cnVjdCBpcDZ0X3N0YW5kYXJkIGVudHJpZXNbMl07CkBAIC0zNSwxMSArMzUsMTEgQEAKIAkudGVybSA9IElQNlRfRVJST1JfSU5JVCwJCS8qIEVSUk9SICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CiAJLm5hbWUgPSAicmF3IiwKIAkudmFsaWRfaG9va3MgPSBSQVdfVkFMSURfSE9PS1MsCiAJLm1lID0gVEhJU19NT0RVTEUsCi0JLmFmID0gQUZfSU5FVDYsCisJLmFmID0gTkZQUk9UT19JUFY2LAogfTsKIAogLyogVGhlIHdvcmsgY29tZXMgaW4gaGVyZSBmcm9tIG5ldGZpbHRlci5jLiAqLwpAQCAtNjgsMTQgKzY4LDE0IEBACiBzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwNnRfb3BzW10gX19yZWFkX21vc3RseSA9IHsKIAl7CiAJICAuaG9vayA9IGlwNnRfcHJlX3JvdXRpbmdfaG9vaywKLQkgIC5wZiA9IFBGX0lORVQ2LAorCSAgLnBmID0gTkZQUk9UT19JUFY2LAogCSAgLmhvb2tudW0gPSBORl9JTkVUX1BSRV9ST1VUSU5HLAogCSAgLnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCwKIAkgIC5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewogCSAgLmhvb2sgPSBpcDZ0X2xvY2FsX291dF9ob29rLAotCSAgLnBmID0gUEZfSU5FVDYsCisJICAucGYgPSBORlBST1RPX0lQVjYsCiAJICAuaG9va251bSA9IE5GX0lORVRfTE9DQUxfT1VULAogCSAgLnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCwKIAkgIC5vd25lciA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3NlY3VyaXR5LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYwppbmRleCAwZWEzN2ZmLi40MWI0NDRjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYwpAQCAtMjYsNyArMjYsNyBAQAogCQkJCSgxIDw8IE5GX0lORVRfRk9SV0FSRCkgfCBcCiAJCQkJKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpCiAKLXN0YXRpYyBzdHJ1Y3QKK3N0YXRpYyBjb25zdCBzdHJ1Y3QKIHsKIAlzdHJ1Y3QgaXA2dF9yZXBsYWNlIHJlcGw7CiAJc3RydWN0IGlwNnRfc3RhbmRhcmQgZW50cmllc1szXTsKQEAgLTU2LDExICs1NiwxMSBAQAogCS50ZXJtID0gSVA2VF9FUlJPUl9JTklULAkJLyogRVJST1IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgc2VjdXJpdHlfdGFibGUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHNlY3VyaXR5X3RhYmxlID0gewogCS5uYW1lCQk9ICJzZWN1cml0eSIsCiAJLnZhbGlkX2hvb2tzCT0gU0VDVVJJVFlfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAotCS5hZgkJPSBBRl9JTkVUNiwKKwkuYWYJCT0gTkZQUk9UT19JUFY2LAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludApAQCAtMTAxLDIxICsxMDEsMjEgQEAKIAl7CiAJCS5ob29rCQk9IGlwNnRfbG9jYWxfaW5faG9vaywKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVDYsCisJCS5wZgkJPSBORlBST1RPX0lQVjYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKIAkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9TRUNVUklUWSwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXA2dF9mb3J3YXJkX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAorCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfRk9SV0FSRCwKIAkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9TRUNVUklUWSwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXA2dF9sb2NhbF9vdXRfaG9vaywKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVDYsCisJCS5wZgkJPSBORlBST1RPX0lQVjYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfU0VDVVJJVFksCiAJfSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IDJhMTVjMmQuLjVmMmVjMjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pcHY2Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9sb2cuaD4KIAogc3RhdGljIGJvb2wgaXB2Nl9wa3RfdG9fdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IG5ob2ZmLAogCQkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCkBAIC0xNzYsOCArMTc3LDExIEBACiAJfQogCiAJcmV0ID0gaGVscGVyLT5oZWxwKHNrYiwgcHJvdG9mZiwgY3QsIGN0aW5mbyk7Ci0JaWYgKHJldCAhPSBORl9BQ0NFUFQpCisJaWYgKHJldCAhPSBORl9BQ0NFUFQpIHsKKwkJbmZfbG9nX3BhY2tldChORlBST1RPX0lQVjYsIGhvb2tudW0sIHNrYiwgaW4sIG91dCwgTlVMTCwKKwkJCSAgICAgICJuZl9jdF8lczogZHJvcHBpbmcgcGFja2V0IiwgaGVscGVyLT5uYW1lKTsKIAkJcmV0dXJuIHJldDsKKwl9CiBvdXQ6CiAJLyogV2UndmUgc2VlbiBpdCBjb21pbmcgb3V0IHRoZSBvdGhlciBzaWRlOiBjb25maXJtIGl0ICovCiAJcmV0dXJuIG5mX2Nvbm50cmFja19jb25maXJtKHNrYik7CkBAIC0yNjUsNDIgKzI2OSw0MiBAQAogCXsKIAkJLmhvb2sJCT0gaXB2Nl9kZWZyYWcsCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAorCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfUFJFX1JPVVRJTkcsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXB2Nl9jb25udHJhY2tfaW4sCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAorCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfUFJFX1JPVVRJTkcsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLLAogCX0sCiAJewogCQkuaG9vawkJPSBpcHY2X2Nvbm50cmFja19sb2NhbCwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVDYsCisJCS5wZgkJPSBORlBST1RPX0lQVjYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLLAogCX0sCiAJewogCQkuaG9vawkJPSBpcHY2X2RlZnJhZywKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVDYsCisJCS5wZgkJPSBORlBST1RPX0lQVjYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRywKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXB2Nl9jb25maXJtLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVUNiwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX1BPU1RfUk9VVElORywKIAkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9MQVNULAogCX0sCiAJewogCQkuaG9vawkJPSBpcHY2X2NvbmZpcm0sCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAorCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfSU4sCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTEFTVC0xLAogCX0sCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9wcm9jLmMgYi9uZXQvaXB2Ni9wcm9jLmMKaW5kZXggNTkwZGRlZi4uYzk2MDVjMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcHJvYy5jCisrKyBiL25ldC9pcHY2L3Byb2MuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiB9OwogCiAvKiBSRkMgNDI5MyB2NiBJQ01QTXNnU3RhdHNUYWJsZTsgbmFtZWQgaXRlbXMgZm9yIFJGQyAyNDY2IGNvbXBhdGliaWxpdHkgKi8KLXN0YXRpYyBjaGFyICppY21wNnR5cGUybmFtZVsyNTZdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGljbXA2dHlwZTJuYW1lWzI1Nl0gPSB7CiAJW0lDTVBWNl9ERVNUX1VOUkVBQ0hdID0gIkRlc3RVbnJlYWNocyIsCiAJW0lDTVBWNl9QS1RfVE9PQklHXSA9ICJQa3RUb29CaWdzIiwKIAlbSUNNUFY2X1RJTUVfRVhDRUVEXSA9ICJUaW1lRXhjZHMiLApAQCAtMTQ0LDcgKzE0NCw3IEBACiAJLyogcHJpbnQgYnkgbmFtZSAtLSBkZXByZWNhdGVkIGl0ZW1zICovCiAJZm9yIChpID0gMDsgaSA8IElDTVA2TVNHX01JQl9NQVg7IGkrKykgewogCQlpbnQgaWNtcHR5cGU7Ci0JCWNoYXIgKnA7CisJCWNvbnN0IGNoYXIgKnA7CiAKIAkJaWNtcHR5cGUgPSBpICYgMHhmZjsKIAkJcCA9IGljbXA2dHlwZTJuYW1lW2ljbXB0eXBlXTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Byb3RvY29sLmMgYi9uZXQvaXB2Ni9wcm90b2NvbC5jCmluZGV4IDlhYjc4OTEuLjU2ODg2NGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Byb3RvY29sLmMKKysrIGIvbmV0L2lwdjYvcHJvdG9jb2wuYwpAQCAtMjAsMjAgKzIwLDkgQEAKICAqICAgICAgLSBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZSAnaW5ldDZfcHJvdG9jb2xfYmFzZScKICAqICAgICAgLSBNb2RpZmllZCBpbmV0Nl9kZWxfcHJvdG9jb2woKSB0byBjb3JyZWN0bHkgbWFpbnRhaW4gY29weSBiaXQuCiAgKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0KLSNpbmNsdWRlIDxuZXQvc29jay5oPgotI2luY2x1ZGUgPG5ldC9zbm1wLmg+Ci0KLSNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAKIHN0cnVjdCBpbmV0Nl9wcm90b2NvbCAqaW5ldDZfcHJvdG9zW01BWF9JTkVUX1BST1RPU107CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jCmluZGV4IGQ2YzNjMWMuLjdkNjc1YjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Jhdy5jCisrKyBiL25ldC9pcHY2L3Jhdy5jCkBAIC02NDIsNyArNjQyLDcgQEAKIAllcnIgPSBORl9IT09LKFBGX0lORVQ2LCBORl9JTkVUX0xPQ0FMX09VVCwgc2tiLCBOVUxMLCBydC0+dS5kc3QuZGV2LAogCQkgICAgICBkc3Rfb3V0cHV0KTsKIAlpZiAoZXJyID4gMCkKLQkJZXJyID0gbnAtPnJlY3ZlcnIgPyBuZXRfeG1pdF9lcnJubyhlcnIpIDogMDsKKwkJZXJyID0gbmV0X3htaXRfZXJybm8oZXJyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogb3V0OgpAQCAtNjUzLDYgKzY1Myw4IEBACiAJa2ZyZWVfc2tiKHNrYik7CiBlcnJvcjoKIAlJUDZfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgcnQtPnJ0NmlfaWRldiwgSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOworCWlmIChlcnIgPT0gLUVOT0JVRlMgJiYgIW5wLT5yZWN2ZXJyKQorCQllcnIgPSAwOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg3NywxMSArODc5LDggQEAKIAkJCWhsaW1pdCA9IGlwNl9kc3RfaG9wbGltaXQoZHN0KTsKIAl9CiAKLQlpZiAodGNsYXNzIDwgMCkgeworCWlmICh0Y2xhc3MgPCAwKQogCQl0Y2xhc3MgPSBucC0+dGNsYXNzOwotCQlpZiAodGNsYXNzIDwgMCkKLQkJCXRjbGFzcyA9IDA7Ci0JfQogCiAJaWYgKG1zZy0+bXNnX2ZsYWdzJk1TR19DT05GSVJNKQogCQlnb3RvIGRvX2NvbmZpcm07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCAxNDczZWUwLi45Y2NmZWYzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTY2NSw3ICs2NjUsNyBAQAogCQkJCW5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX2VsYXN0aWNpdHkgPSAxOwogCQkJCW5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX21pbl9pbnRlcnZhbCA9IDA7CiAKLQkJCQlpcDZfZHN0X2djKG5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CisJCQkJaXA2X2RzdF9nYygmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzKTsKIAogCQkJCW5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX2VsYXN0aWNpdHkgPQogCQkJCQlzYXZlZF9ydF9lbGFzdGljaXR5OwpAQCAtOTcwLDcgKzk3MCw3IEBACiAJaWYgKHVubGlrZWx5KGlkZXYgPT0gTlVMTCkpCiAJCXJldHVybiBOVUxMOwogCi0JcnQgPSBpcDZfZHN0X2FsbG9jKG5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CisJcnQgPSBpcDZfZHN0X2FsbG9jKCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOwogCWlmICh1bmxpa2VseShydCA9PSBOVUxMKSkgewogCQlpbjZfZGV2X3B1dChpZGV2KTsKIAkJZ290byBvdXQ7CkBAIC0xMDYwLDcgKzEwNjAsNyBAQAogc3RhdGljIGludCBpcDZfZHN0X2djKHN0cnVjdCBkc3Rfb3BzICpvcHMpCiB7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwotCXN0cnVjdCBuZXQgKm5ldCA9IG9wcy0+ZHN0X25ldDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBjb250YWluZXJfb2Yob3BzLCBzdHJ1Y3QgbmV0LCBpcHY2LmlwNl9kc3Rfb3BzKTsKIAlpbnQgcnRfbWluX2ludGVydmFsID0gbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfbWluX2ludGVydmFsOwogCWludCBydF9tYXhfc2l6ZSA9IG5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X21heF9zaXplOwogCWludCBydF9lbGFzdGljaXR5ID0gbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfZWxhc3RpY2l0eTsKQEAgLTExNTQsNyArMTE1NCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0ID0gaXA2X2RzdF9hbGxvYyhuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOworCXJ0ID0gaXA2X2RzdF9hbGxvYygmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzKTsKIAogCWlmIChydCA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CkBAIC0xNjQzLDcgKzE2NDMsNyBAQAogc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqIGlwNl9ydF9jb3B5KHN0cnVjdCBydDZfaW5mbyAqb3J0KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQob3J0LT5ydDZpX2Rldik7Ci0Jc3RydWN0IHJ0Nl9pbmZvICpydCA9IGlwNl9kc3RfYWxsb2MobmV0LT5pcHY2LmlwNl9kc3Rfb3BzKTsKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gaXA2X2RzdF9hbGxvYygmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzKTsKIAogCWlmIChydCkgewogCQlydC0+dS5kc3QuaW5wdXQgPSBvcnQtPnUuZHN0LmlucHV0OwpAQCAtMTkyMyw3ICsxOTIzLDcgQEAKIAkJCQkgICAgaW50IGFueWNhc3QpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChpZGV2LT5kZXYpOwotCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBpcDZfZHN0X2FsbG9jKG5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CisJc3RydWN0IHJ0Nl9pbmZvICpydCA9IGlwNl9kc3RfYWxsb2MoJm5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAKIAlpZiAocnQgPT0gTlVMTCkKQEAgLTI1MDEsNyArMjUwMSw3IEBACiAJCSAgIG5ldC0+aXB2Ni5ydDZfc3RhdHMtPmZpYl9ydF9hbGxvYywKIAkJICAgbmV0LT5pcHY2LnJ0Nl9zdGF0cy0+ZmliX3J0X2VudHJpZXMsCiAJCSAgIG5ldC0+aXB2Ni5ydDZfc3RhdHMtPmZpYl9ydF9jYWNoZSwKLQkJICAgYXRvbWljX3JlYWQoJm5ldC0+aXB2Ni5pcDZfZHN0X29wcy0+ZW50cmllcyksCisJCSAgIGF0b21pY19yZWFkKCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMuZW50cmllcyksCiAJCSAgIG5ldC0+aXB2Ni5ydDZfc3RhdHMtPmZpYl9kaXNjYXJkZWRfcm91dGVzKTsKIAogCXJldHVybiAwOwpAQCAtMjYzNyw3ICsyNjM3LDcgQEAKIAogCWlmICh0YWJsZSkgewogCQl0YWJsZVswXS5kYXRhID0gJm5ldC0+aXB2Ni5zeXNjdGwuZmx1c2hfZGVsYXk7Ci0JCXRhYmxlWzFdLmRhdGEgPSAmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzLT5nY190aHJlc2g7CisJCXRhYmxlWzFdLmRhdGEgPSAmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzLmdjX3RocmVzaDsKIAkJdGFibGVbMl0uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9tYXhfc2l6ZTsKIAkJdGFibGVbM10uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9nY19taW5faW50ZXJ2YWw7CiAJCXRhYmxlWzRdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfdGltZW91dDsKQEAgLTI2NTUsMTIgKzI2NTUsOCBAQAogewogCWludCByZXQgPSAtRU5PTUVNOwogCi0JbmV0LT5pcHY2LmlwNl9kc3Rfb3BzID0ga21lbWR1cCgmaXA2X2RzdF9vcHNfdGVtcGxhdGUsCi0JCQkJCXNpemVvZigqbmV0LT5pcHY2LmlwNl9kc3Rfb3BzKSwKLQkJCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuZXQtPmlwdjYuaXA2X2RzdF9vcHMpCi0JCWdvdG8gb3V0OwotCW5ldC0+aXB2Ni5pcDZfZHN0X29wcy0+ZHN0X25ldCA9IGhvbGRfbmV0KG5ldCk7CisJbWVtY3B5KCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMsICZpcDZfZHN0X29wc190ZW1wbGF0ZSwKKwkgICAgICAgc2l6ZW9mKG5ldC0+aXB2Ni5pcDZfZHN0X29wcykpOwogCiAJbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5ID0ga21lbWR1cCgmaXA2X251bGxfZW50cnlfdGVtcGxhdGUsCiAJCQkJCSAgIHNpemVvZigqbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5KSwKQEAgLTI2NjksNyArMjY2NSw3IEBACiAJCWdvdG8gb3V0X2lwNl9kc3Rfb3BzOwogCW5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeS0+dS5kc3QucGF0aCA9CiAJCShzdHJ1Y3QgZHN0X2VudHJ5ICopbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5OwotCW5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeS0+dS5kc3Qub3BzID0gbmV0LT5pcHY2LmlwNl9kc3Rfb3BzOworCW5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeS0+dS5kc3Qub3BzID0gJm5ldC0+aXB2Ni5pcDZfZHN0X29wczsKIAogI2lmZGVmIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUwogCW5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnkgPSBrbWVtZHVwKCZpcDZfcHJvaGliaXRfZW50cnlfdGVtcGxhdGUsCkBAIC0yNjc5LDcgKzI2NzUsNyBAQAogCQlnb3RvIG91dF9pcDZfbnVsbF9lbnRyeTsKIAluZXQtPmlwdjYuaXA2X3Byb2hpYml0X2VudHJ5LT51LmRzdC5wYXRoID0KIAkJKHN0cnVjdCBkc3RfZW50cnkgKiluZXQtPmlwdjYuaXA2X3Byb2hpYml0X2VudHJ5OwotCW5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnktPnUuZHN0Lm9wcyA9IG5ldC0+aXB2Ni5pcDZfZHN0X29wczsKKwluZXQtPmlwdjYuaXA2X3Byb2hpYml0X2VudHJ5LT51LmRzdC5vcHMgPSAmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzOwogCiAJbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeSA9IGttZW1kdXAoJmlwNl9ibGtfaG9sZV9lbnRyeV90ZW1wbGF0ZSwKIAkJCQkJICAgICAgIHNpemVvZigqbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeSksCkBAIC0yNjg4LDcgKzI2ODQsNyBAQAogCQlnb3RvIG91dF9pcDZfcHJvaGliaXRfZW50cnk7CiAJbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+dS5kc3QucGF0aCA9CiAJCShzdHJ1Y3QgZHN0X2VudHJ5ICopbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeTsKLQluZXQtPmlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5LT51LmRzdC5vcHMgPSBuZXQtPmlwdjYuaXA2X2RzdF9vcHM7CisJbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+dS5kc3Qub3BzID0gJm5ldC0+aXB2Ni5pcDZfZHN0X29wczsKICNlbmRpZgogCiAJbmV0LT5pcHY2LnN5c2N0bC5mbHVzaF9kZWxheSA9IDA7CkBAIC0yNzE3LDggKzI3MTMsNiBAQAogCWtmcmVlKG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeSk7CiAjZW5kaWYKIG91dF9pcDZfZHN0X29wczoKLQlyZWxlYXNlX25ldChuZXQtPmlwdjYuaXA2X2RzdF9vcHMtPmRzdF9uZXQpOwotCWtmcmVlKG5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CiAJZ290byBvdXQ7CiB9CiAKQEAgLTI3MzMsOCArMjcyNyw2IEBACiAJa2ZyZWUobmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeSk7CiAJa2ZyZWUobmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeSk7CiAjZW5kaWYKLQlyZWxlYXNlX25ldChuZXQtPmlwdjYuaXA2X2RzdF9vcHMtPmRzdF9uZXQpOwotCWtmcmVlKG5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXA2X3JvdXRlX25ldF9vcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jCmluZGV4IDk4YjczMjdkLi4wYWU0ZjY0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYworKysgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtNjA5LDcgKzYwOSw4IEBACiAgKglhbmQgdGhhdCBza2IgaXMgZmlsbGVkIHByb3Blcmx5IGJ5IHRoYXQgZnVuY3Rpb24uCiAgKi8KIAotc3RhdGljIGludCBpcGlwNl90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGlwaXA2X3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnR1bm5lbC0+ZGV2LT5zdGF0czsKQEAgLTc1Myw3ICs3NTQsNyBAQAogCQkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCXR1bm5lbC0+cmVjdXJzaW9uLS07Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAkJaWYgKHNrYi0+c2spCiAJCQlza2Jfc2V0X293bmVyX3cobmV3X3NrYiwgc2tiLT5zayk7CkBAIC03NzgsNyArNzc5LDcgQEAKIAlpcGgtPnZlcnNpb24JCT0JNDsKIAlpcGgtPmlobAkJPQlzaXplb2Yoc3RydWN0IGlwaGRyKT4+MjsKIAlpZiAobXR1ID4gSVBWNl9NSU5fTVRVKQotCQlpcGgtPmZyYWdfb2ZmCT0JaHRvbnMoSVBfREYpOworCQlpcGgtPmZyYWdfb2ZmCT0JdGlwaC0+ZnJhZ19vZmY7CiAJZWxzZQogCQlpcGgtPmZyYWdfb2ZmCT0JMDsKIApAQCAtNzk0LDcgKzc5NSw3IEBACiAKIAlJUFRVTk5FTF9YTUlUKCk7CiAJdHVubmVsLT5yZWN1cnNpb24tLTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiB0eF9lcnJvcl9pY21wOgogCWRzdF9saW5rX2ZhaWx1cmUoc2tiKTsKQEAgLTgwMiw3ICs4MDMsNyBAQAogCXN0YXRzLT50eF9lcnJvcnMrKzsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJdHVubmVsLT5yZWN1cnNpb24tLTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY2L3N5bmNvb2tpZXMuYwppbmRleCA4YzI1MTM5Li42YjZhZTkxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zeW5jb29raWVzLmMKKysrIGIvbmV0L2lwdjYvc3luY29va2llcy5jCkBAIC03NCwxMiArNzQsMTMgQEAKIAlyZXR1cm4gY2hpbGQ7CiB9CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShfX3UzMiwgY29va2llX3NjcmF0Y2gpWzE2ICsgNSArIFNIQV9XT1JLU1BBQ0VfV09SRFNdOworc3RhdGljIERFRklORV9QRVJfQ1BVKF9fdTMyIFsxNiArIDUgKyBTSEFfV09SS1NQQUNFX1dPUkRTXSwKKwkJICAgICAgaXB2Nl9jb29raWVfc2NyYXRjaCk7CiAKIHN0YXRpYyB1MzIgY29va2llX2hhc2goc3RydWN0IGluNl9hZGRyICpzYWRkciwgc3RydWN0IGluNl9hZGRyICpkYWRkciwKIAkJICAgICAgIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0LCB1MzIgY291bnQsIGludCBjKQogewotCV9fdTMyICp0bXAgPSBfX2dldF9jcHVfdmFyKGNvb2tpZV9zY3JhdGNoKTsKKwlfX3UzMiAqdG1wID0gX19nZXRfY3B1X3ZhcihpcHY2X2Nvb2tpZV9zY3JhdGNoKTsKIAogCS8qCiAJICogd2UgaGF2ZSAzMjAgYml0cyBvZiBpbmZvcm1hdGlvbiB0byBoYXNoLCBjb3B5IGluIHRoZSByZW1haW5pbmcKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKaW5kZXggYTAzMTAzNC4uMGRjNmE0ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKQEAgLTQwLDcgKzQwLDcgQEAKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKIAotc3RhdGljIGN0bF90YWJsZSBpcHY2X3RhYmxlW10gPSB7CitzdGF0aWMgY3RsX3RhYmxlIGlwdjZfcm90YWJsZVtdID0gewogCXsKIAkJLmN0bF9uYW1lCT0gTkVUX0lQVjZfTUxEX01BWF9NU0YsCiAJCS5wcm9jbmFtZQk9ICJtbGRfbWF4X21zZiIsCkBAIC0xMzAsNyArMTMwLDcgQEAKIHsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAotCWlwNl9oZWFkZXIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3JvdGFibGUobmV0X2lwdjZfY3RsX3BhdGgsIGlwdjZfdGFibGUpOworCWlwNl9oZWFkZXIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3JvdGFibGUobmV0X2lwdjZfY3RsX3BhdGgsIGlwdjZfcm90YWJsZSk7CiAJaWYgKGlwNl9oZWFkZXIgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IGQ4NDlkZDUuLjNhYWUwZjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtNzUsMTEgKzc1LDExIEBACiAKIHN0YXRpYyBpbnQJdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogCi1zdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X21hcHBlZDsKLXN0YXRpYyBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjZfc3BlY2lmaWM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X21hcHBlZDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjZfc3BlY2lmaWM7CiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKLXN0YXRpYyBzdHJ1Y3QgdGNwX3NvY2tfYWZfb3BzIHRjcF9zb2NrX2lwdjZfc3BlY2lmaWM7Ci1zdGF0aWMgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY2X21hcHBlZF9zcGVjaWZpYzsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNwX3NvY2tfYWZfb3BzIHRjcF9zb2NrX2lwdjZfc3BlY2lmaWM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY2X21hcHBlZF9zcGVjaWZpYzsKICNlbHNlCiBzdGF0aWMgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICp0Y3BfdjZfbWQ1X2RvX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCkBAIC01OTEsNyArNTkxLDcgQEAKIAkJCX0KIAkJCXNrLT5za19yb3V0ZV9jYXBzICY9IH5ORVRJRl9GX0dTT19NQVNLOwogCQl9Ci0JCWlmICh0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woKSA9PSBOVUxMKSB7CisJCWlmICh0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woc2spID09IE5VTEwpIHsKIAkJCWtmcmVlKG5ld2tleSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtODk0LDcgKzg5NCw3IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKLXN0YXRpYyBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja19vcHMgdGNwX3JlcXVlc3Rfc29ja19pcHY2X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja19vcHMgdGNwX3JlcXVlc3Rfc29ja19pcHY2X29wcyA9IHsKIAkubWQ1X2xvb2t1cAk9CXRjcF92Nl9yZXFza19tZDVfbG9va3VwLAogCS5jYWxjX21kNV9oYXNoCT0JdGNwX3Y2X21kNV9oYXNoX3NrYiwKIH07CkBAIC0xMDAzLDYgKzEwMDMsNyBAQAogCXNrYl9yZXNlcnZlKGJ1ZmYsIE1BWF9IRUFERVIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgdG90X2xlbik7CiAKIAl0MSA9IChzdHJ1Y3QgdGNwaGRyICopIHNrYl9wdXNoKGJ1ZmYsIHRvdF9sZW4pOworCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAKIAkvKiBTd2FwIHRoZSBzZW5kIGFuZCB0aGUgcmVjZWl2ZS4gKi8KIAltZW1zZXQodDEsIDAsIHNpemVvZigqdDEpKTsKQEAgLTE3NjAsNyArMTc2MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjZfc3BlY2lmaWMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X3NwZWNpZmljID0gewogCS5xdWV1ZV94bWl0CSAgID0gaW5ldDZfY3NrX3htaXQsCiAJLnNlbmRfY2hlY2sJICAgPSB0Y3BfdjZfc2VuZF9jaGVjaywKIAkucmVidWlsZF9oZWFkZXIJICAgPSBpbmV0Nl9za19yZWJ1aWxkX2hlYWRlciwKQEAgLTE3ODAsNyArMTc4MSw3IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKLXN0YXRpYyBzdHJ1Y3QgdGNwX3NvY2tfYWZfb3BzIHRjcF9zb2NrX2lwdjZfc3BlY2lmaWMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY2X3NwZWNpZmljID0gewogCS5tZDVfbG9va3VwCT0JdGNwX3Y2X21kNV9sb29rdXAsCiAJLmNhbGNfbWQ1X2hhc2gJPQl0Y3BfdjZfbWQ1X2hhc2hfc2tiLAogCS5tZDVfYWRkCT0JdGNwX3Y2X21kNV9hZGRfZnVuYywKQEAgLTE3OTIsNyArMTc5Myw3IEBACiAgKglUQ1Agb3ZlciBJUHY0IHZpYSBJTkVUNiBBUEkKICAqLwogCi1zdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X21hcHBlZCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjZfbWFwcGVkID0gewogCS5xdWV1ZV94bWl0CSAgID0gaXBfcXVldWVfeG1pdCwKIAkuc2VuZF9jaGVjawkgICA9IHRjcF92NF9zZW5kX2NoZWNrLAogCS5yZWJ1aWxkX2hlYWRlcgkgICA9IGluZXRfc2tfcmVidWlsZF9oZWFkZXIsCkBAIC0xODEyLDcgKzE4MTMsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCi1zdGF0aWMgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY2X21hcHBlZF9zcGVjaWZpYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNwX3NvY2tfYWZfb3BzIHRjcF9zb2NrX2lwdjZfbWFwcGVkX3NwZWNpZmljID0gewogCS5tZDVfbG9va3VwCT0JdGNwX3Y0X21kNV9sb29rdXAsCiAJLmNhbGNfbWQ1X2hhc2gJPQl0Y3BfdjRfbWQ1X2hhc2hfc2tiLAogCS5tZDVfYWRkCT0JdGNwX3Y2X21kNV9hZGRfZnVuYywKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggMzNiNTliZC4uMTY0MDQwNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTYzOCw2ICs2MzgsNDcgQEAKIAl9CiB9CiAKKy8qKgorICogCXVkcDZfaHdjc3VtX291dGdvaW5nICAtICBoYW5kbGUgb3V0Z29pbmcgSFcgY2hlY2tzdW1taW5nCisgKiAJQHNrOiAJc29ja2V0IHdlIGFyZSBzZW5kaW5nIG9uCisgKiAJQHNrYjogCXNrX2J1ZmYgY29udGFpbmluZyB0aGUgZmlsbGVkLWluIFVEUCBoZWFkZXIKKyAqIAkgICAgICAgIChjaGVja3N1bSBmaWVsZCBtdXN0IGJlIHplcm9lZCBvdXQpCisgKi8KK3N0YXRpYyB2b2lkIHVkcDZfaHdjc3VtX291dGdvaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXN0cnVjdCB1ZHBoZHIgKnVoID0gdWRwX2hkcihza2IpOworCV9fd3N1bSBjc3VtID0gMDsKKworCWlmIChza2JfcXVldWVfbGVuKCZzay0+c2tfd3JpdGVfcXVldWUpID09IDEpIHsKKwkJLyogT25seSBvbmUgZnJhZ21lbnQgb24gdGhlIHNvY2tldC4gICovCisJCXNrYi0+Y3N1bV9zdGFydCA9IHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgLSBza2ItPmhlYWQ7CisJCXNrYi0+Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7CisJCXVoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBsZW4sIElQUFJPVE9fVURQLCAwKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBIVy1jaGVja3N1bSB3b24ndCB3b3JrIGFzIHRoZXJlIGFyZSB0d28gb3IgbW9yZQorCQkgKiBmcmFnbWVudHMgb24gdGhlIHNvY2tldCBzbyB0aGF0IGFsbCBjc3VtcyBvZiBza19idWZmcworCQkgKiBzaG91bGQgYmUgdG9nZXRoZXIKKwkJICovCisJCW9mZnNldCA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CisJCXNrYi0+Y3N1bSA9IHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLT5sZW4gLSBvZmZzZXQsIDApOworCisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCQlza2JfcXVldWVfd2Fsaygmc2stPnNrX3dyaXRlX3F1ZXVlLCBza2IpIHsKKwkJCWNzdW0gPSBjc3VtX2FkZChjc3VtLCBza2ItPmNzdW0pOworCQl9CisKKwkJdWgtPmNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKHNhZGRyLCBkYWRkciwgbGVuLCBJUFBST1RPX1VEUCwKKwkJCQkJICAgIGNzdW0pOworCQlpZiAodWgtPmNoZWNrID09IDApCisJCQl1aC0+Y2hlY2sgPSBDU1VNX01BTkdMRURfMDsKKwl9Cit9CisKIC8qCiAgKglTZW5kaW5nCiAgKi8KQEAgLTY2OCw3ICs3MDksMTEgQEAKIAogCWlmIChpc191ZHBsaXRlKQogCQljc3VtID0gdWRwbGl0ZV9jc3VtX291dGdvaW5nKHNrLCBza2IpOwotCSBlbHNlCisJZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeyAvKiBVRFAgaGFyZHdhcmUgY3N1bSAqLworCQl1ZHA2X2h3Y3N1bV9vdXRnb2luZyhzaywgc2tiLCAmZmwtPmZsNl9zcmMsICZmbC0+Zmw2X2RzdCwKKwkJCQkgICAgIHVwLT5sZW4pOworCQlnb3RvIHNlbmQ7CisJfSBlbHNlCiAJCWNzdW0gPSB1ZHBfY3N1bV9vdXRnb2luZyhzaywgc2tiKTsKIAogCS8qIGFkZCBwcm90b2NvbC1kZXBlbmRlbnQgcHNldWRvLWhlYWRlciAqLwpAQCAtNjc3LDEzICs3MjIsMjAgQEAKIAlpZiAodWgtPmNoZWNrID09IDApCiAJCXVoLT5jaGVjayA9IENTVU1fTUFOR0xFRF8wOwogCitzZW5kOgogCWVyciA9IGlwNl9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgPT0gLUVOT0JVRlMgJiYgIWluZXQ2X3NrKHNrKS0+cmVjdmVycikgeworCQkJVURQNl9JTkNfU1RBVFNfVVNFUihzb2NrX25ldChzayksCisJCQkJCSAgICBVRFBfTUlCX1NOREJVRkVSUk9SUywgaXNfdWRwbGl0ZSk7CisJCQllcnIgPSAwOworCQl9CisJfSBlbHNlCisJCVVEUDZfSU5DX1NUQVRTX1VTRVIoc29ja19uZXQoc2spLAorCQkJCSAgICBVRFBfTUlCX09VVERBVEFHUkFNUywgaXNfdWRwbGl0ZSk7CiBvdXQ6CiAJdXAtPmxlbiA9IDA7CiAJdXAtPnBlbmRpbmcgPSAwOwotCWlmICghZXJyKQotCQlVRFA2X0lOQ19TVEFUU19VU0VSKHNvY2tfbmV0KHNrKSwKLQkJCQlVRFBfTUlCX09VVERBVEFHUkFNUywgaXNfdWRwbGl0ZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtOTAwLDExICs5NTIsOCBAQAogCQkJaGxpbWl0ID0gaXA2X2RzdF9ob3BsaW1pdChkc3QpOwogCX0KIAotCWlmICh0Y2xhc3MgPCAwKSB7CisJaWYgKHRjbGFzcyA8IDApCiAJCXRjbGFzcyA9IG5wLT50Y2xhc3M7Ci0JCWlmICh0Y2xhc3MgPCAwKQotCQkJdGNsYXNzID0gMDsKLQl9CiAKIAlpZiAobXNnLT5tc2dfZmxhZ3MmTVNHX0NPTkZJUk0pCiAJCWdvdG8gZG9fY29uZmlybTsKQEAgLTEwMzIsOSArMTA4MSwxMDIgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IHVkcDZfdWZvX3NlbmRfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CisJc3RydWN0IHVkcGhkciAqdWg7CisKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKnVoKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaXB2NmggPSBpcHY2X2hkcihza2IpOworCXVoID0gdWRwX2hkcihza2IpOworCisJdWgtPmNoZWNrID0gfmNzdW1faXB2Nl9tYWdpYygmaXB2NmgtPnNhZGRyLCAmaXB2NmgtPmRhZGRyLCBza2ItPmxlbiwKKwkJCQkgICAgIElQUFJPVE9fVURQLCAwKTsKKwlza2ItPmNzdW1fc3RhcnQgPSBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0gc2tiLT5oZWFkOworCXNrYi0+Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcDZfdWZvX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGludCBmZWF0dXJlcykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2VncyA9IEVSUl9QVFIoLUVJTlZBTCk7CisJdW5zaWduZWQgaW50IG1zczsKKwl1bnNpZ25lZCBpbnQgdW5mcmFnX2lwNmhsZW4sIHVuZnJhZ19sZW47CisJc3RydWN0IGZyYWdfaGRyICpmcHRyOworCXU4ICptYWNfc3RhcnQsICpwcmV2aGRyOworCXU4IG5leHRoZHI7CisJdTggZnJhZ19oZHJfc3ogPSBzaXplb2Yoc3RydWN0IGZyYWdfaGRyKTsKKwlpbnQgb2Zmc2V0OworCV9fd3N1bSBjc3VtOworCisJbXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKKwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPD0gbXNzKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoc2tiX2dzb19vayhza2IsIGZlYXR1cmVzIHwgTkVUSUZfRl9HU09fUk9CVVNUKSkgeworCQkvKiBQYWNrZXQgaXMgZnJvbSBhbiB1bnRydXN0ZWQgc291cmNlLCByZXNldCBnc29fc2Vncy4gKi8KKwkJaW50IHR5cGUgPSBza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlOworCisJCWlmICh1bmxpa2VseSh0eXBlICYgfihTS0JfR1NPX1VEUCB8IFNLQl9HU09fRE9ER1kpIHx8CisJCQkgICAgICEodHlwZSAmIChTS0JfR1NPX1VEUCkpKSkKKwkJCWdvdG8gb3V0OworCisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgPSBESVZfUk9VTkRfVVAoc2tiLT5sZW4sIG1zcyk7CisKKwkJc2VncyA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIERvIHNvZnR3YXJlIFVGTy4gQ29tcGxldGUgYW5kIGZpbGwgaW4gdGhlIFVEUCBjaGVja3N1bSBhcyBIVyBjYW5ub3QKKwkgKiBkbyBjaGVja3N1bSBvZiBVRFAgcGFja2V0cyBzZW50IGFzIG11bHRpcGxlIElQIGZyYWdtZW50cy4KKwkgKi8KKwlvZmZzZXQgPSBza2ItPmNzdW1fc3RhcnQgLSBza2JfaGVhZHJvb20oc2tiKTsKKwljc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItPmxlbi0gb2Zmc2V0LCAwKTsKKwlvZmZzZXQgKz0gc2tiLT5jc3VtX29mZnNldDsKKwkqKF9fc3VtMTYgKikoc2tiLT5kYXRhICsgb2Zmc2V0KSA9IGNzdW1fZm9sZChjc3VtKTsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBlbm91Z2ggaGVhZHJvb20gdG8gaW5zZXJ0IGZyYWdtZW50IGhlYWRlci4gKi8KKwlpZiAoKHNrYl9oZWFkcm9vbShza2IpIDwgZnJhZ19oZHJfc3opICYmCisJICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBmcmFnX2hkcl9zeiwgMCwgR0ZQX0FUT01JQykpCisJCWdvdG8gb3V0OworCisJLyogRmluZCB0aGUgdW5mcmFnbWVudGFibGUgaGVhZGVyIGFuZCBzaGlmdCBpdCBsZWZ0IGJ5IGZyYWdfaGRyX3N6CisJICogYnl0ZXMgdG8gaW5zZXJ0IGZyYWdtZW50IGhlYWRlci4KKwkgKi8KKwl1bmZyYWdfaXA2aGxlbiA9IGlwNl9maW5kXzFzdGZyYWdvcHQoc2tiLCAmcHJldmhkcik7CisJbmV4dGhkciA9ICpwcmV2aGRyOworCSpwcmV2aGRyID0gTkVYVEhEUl9GUkFHTUVOVDsKKwl1bmZyYWdfbGVuID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2JfbWFjX2hlYWRlcihza2IpICsKKwkJICAgICB1bmZyYWdfaXA2aGxlbjsKKwltYWNfc3RhcnQgPSBza2JfbWFjX2hlYWRlcihza2IpOworCW1lbW1vdmUobWFjX3N0YXJ0LWZyYWdfaGRyX3N6LCBtYWNfc3RhcnQsIHVuZnJhZ19sZW4pOworCisJc2tiLT5tYWNfaGVhZGVyIC09IGZyYWdfaGRyX3N6OworCXNrYi0+bmV0d29ya19oZWFkZXIgLT0gZnJhZ19oZHJfc3o7CisKKwlmcHRyID0gKHN0cnVjdCBmcmFnX2hkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHVuZnJhZ19pcDZobGVuKTsKKwlmcHRyLT5uZXh0aGRyID0gbmV4dGhkcjsKKwlmcHRyLT5yZXNlcnZlZCA9IDA7CisJaXB2Nl9zZWxlY3RfaWRlbnQoZnB0cik7CisKKwkvKiBGcmFnbWVudCB0aGUgc2tiLiBpcHY2IGhlYWRlciBhbmQgdGhlIHJlbWFpbmluZyBmaWVsZHMgb2YgdGhlCisJICogZnJhZ21lbnQgaGVhZGVyIGFyZSB1cGRhdGVkIGluIGlwdjZfZ3NvX3NlZ21lbnQoKQorCSAqLworCXNlZ3MgPSBza2Jfc2VnbWVudChza2IsIGZlYXR1cmVzKTsKKworb3V0OgorCXJldHVybiBzZWdzOworfQorCiBzdGF0aWMgc3RydWN0IGluZXQ2X3Byb3RvY29sIHVkcHY2X3Byb3RvY29sID0gewogCS5oYW5kbGVyCT0JdWRwdjZfcmN2LAogCS5lcnJfaGFuZGxlcgk9CXVkcHY2X2VyciwKKwkuZ3NvX3NlbmRfY2hlY2sgPQl1ZHA2X3Vmb19zZW5kX2NoZWNrLAorCS5nc29fc2VnbWVudAk9CXVkcDZfdWZvX2ZyYWdtZW50LAogCS5mbGFncwkJPQlJTkVUNl9QUk9UT19OT1BPTElDWXxJTkVUNl9QUk9UT19GSU5BTCwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKaW5kZXggM2EzYzY3Ny4uOGVjM2Q0NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKKysrIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKQEAgLTMwNiw5ICszMDYsMjYgQEAKIAl4ZnJtX3BvbGljeV91bnJlZ2lzdGVyX2FmaW5mbygmeGZybTZfcG9saWN5X2FmaW5mbyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB4ZnJtNl9wb2xpY3lfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAieGZybTZfZ2NfdGhyZXNoIiwKKwkJLmRhdGEJICAgCT0gJnhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoLAorCQkubWF4bGVuCSAJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJICAgCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gcHJvY19kb2ludHZlYywKKwl9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpzeXNjdGxfaGRyOworI2VuZGlmCisKIGludCBfX2luaXQgeGZybTZfaW5pdCh2b2lkKQogewogCWludCByZXQ7CisJdW5zaWduZWQgaW50IGdjX3RocmVzaDsKIAogCXJldCA9IHhmcm02X3BvbGljeV9pbml0KCk7CiAJaWYgKHJldCkKQEAgLTMxNyw2ICszMzQsMjMgQEAKIAlyZXQgPSB4ZnJtNl9zdGF0ZV9pbml0KCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfcG9saWN5OworCS8qCisJICogV2UgbmVlZCBhIGdvb2QgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHhmcm02IGdjIHRocmVzaG9sZC4KKwkgKiBJbiBpcHY0IHdlIHNldCBpdCB0byB0aGUgcm91dGUgaGFzaCB0YWJsZSBzaXplICogOCwgd2hpY2gKKwkgKiBpcyBoYWxmIHRoZSBzaXplIG9mIHRoZSBtYXhpbWF1bSByb3V0ZSBjYWNoZSBmb3IgaXB2NC4gIEl0CisJICogd291bGQgYmUgZ29vZCB0byBkbyB0aGUgc2FtZSB0aGluZyBmb3IgdjYsIGV4Y2VwdCB0aGUgdGFibGUgaXMKKwkgKiBjb25zdHJ1Y3RlZCBkaWZmZXJlbnRseSBoZXJlLiAgSGVyZSBlYWNoIHRhYmxlIGZvciBhIG5ldCBuYW1lc3BhY2UKKwkgKiBjYW4gaGF2ZSBGSUJfVEFCTEVfSEFTSFNaIGVudHJpZXMsIHNvIGxldHMgZ28gd2l0aCB0aGUgc2FtZQorCSAqIGNvbXB1dGF0aW9uIHRoYXQgd2UgdXNlZCBmb3IgaXB2NCBoZXJlLiAgQWxzbywgbGV0cyBrZWVwIHRoZSBpbml0aWFsCisJICogZ2NfdGhyZXNoIHRvIGEgbWluaW11bSBvZiAxMDI0LCBzaW5jZSwgdGhlIGlwdjYgcm91dGUgY2FjaGUgZGVmYXVsdHMKKwkgKiB0byB0aGF0IGFzIGEgbWluaW11bSBhcyB3ZWxsCisJICovCisJZ2NfdGhyZXNoID0gRklCNl9UQUJMRV9IQVNIU1ogKiA4OworCXhmcm02X2RzdF9vcHMuZ2NfdGhyZXNoID0gKGdjX3RocmVzaCA8IDEwMjQpID8gMTAyNCA6IGdjX3RocmVzaDsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJc3lzY3RsX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoJmluaXRfbmV0LCBuZXRfaXB2Nl9jdGxfcGF0aCwKKwkJCQkJCXhmcm02X3BvbGljeV90YWJsZSk7CisjZW5kaWYKIG91dDoKIAlyZXR1cm4gcmV0Owogb3V0X3BvbGljeToKQEAgLTMyNiw2ICszNjAsMTAgQEAKIAogdm9pZCB4ZnJtNl9maW5pKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorCWlmIChzeXNjdGxfaGRyKQorCQl1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoc3lzY3RsX2hkcik7CisjZW5kaWYKIAkvL3hmcm02X2lucHV0X2ZpbmkoKTsKIAl4ZnJtNl9wb2xpY3lfZmluaSgpOwogCXhmcm02X3N0YXRlX2ZpbmkoKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fZXZlbnQuYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fZXZlbnQuYwppbmRleCBjMzViM2VmLi5kNzg1NTRmIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9ldmVudC5jCkBAIC00OSw3ICs0OSw3IEBACiBzdGF0aWMgaW50IGlyY29tbV9zdGF0ZV9jb25uKHN0cnVjdCBpcmNvbW1fY2IgKnNlbGYsIElSQ09NTV9FVkVOVCBldmVudCwKIAkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlyY29tbV9pbmZvICppbmZvKTsKIAotY2hhciAqaXJjb21tX3N0YXRlW10gPSB7Citjb25zdCBjaGFyICpjb25zdCBpcmNvbW1fc3RhdGVbXSA9IHsKIAkiSVJDT01NX0lETEUiLAogCSJJUkNPTU1fV0FJVEkiLAogCSJJUkNPTU1fV0FJVFIiLApAQCAtNTcsNyArNTcsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19JUkRBX0RFQlVHCi1zdGF0aWMgY2hhciAqaXJjb21tX2V2ZW50W10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaXJjb21tX2V2ZW50W10gPSB7CiAJIklSQ09NTV9DT05ORUNUX1JFUVVFU1QiLAogCSJJUkNPTU1fQ09OTkVDVF9SRVNQT05TRSIsCiAJIklSQ09NTV9UVFBfQ09OTkVDVF9JTkRJQ0FUSU9OIiwKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHlfYXR0YWNoLmMKaW5kZXggOTAzMmExZC4uZWFmYzAxMCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHlfYXR0YWNoLmMKKysrIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHlfYXR0YWNoLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBzdHJ1Y3QgaXJjb21tX3R0eV9pbmZvICppbmZvKTsKIAotY2hhciAqaXJjb21tX3R0eV9zdGF0ZVtdID0geworY29uc3QgY2hhciAqY29uc3QgaXJjb21tX3R0eV9zdGF0ZVtdID0gewogCSJJUkNPTU1fVFRZX0lETEUiLAogCSJJUkNPTU1fVFRZX1NFQVJDSCIsCiAJIklSQ09NTV9UVFlfUVVFUllfUEFSQU1FVEVSUyIsCkBAIC05MSw3ICs5MSw3IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX0lSREFfREVCVUcKLXN0YXRpYyBjaGFyICppcmNvbW1fdHR5X2V2ZW50W10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaXJjb21tX3R0eV9ldmVudFtdID0gewogCSJJUkNPTU1fVFRZX0FUVEFDSF9DQUJMRSIsCiAJIklSQ09NTV9UVFlfREVUQUNIX0NBQkxFIiwKIAkiSVJDT01NX1RUWV9EQVRBX1JFUVVFU1QiLApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJpYXAuYyBiL25ldC9pcmRhL2lyaWFwLmMKaW5kZXggNGExMDVkYy4uMjk0ZTM0ZCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJpYXAuYworKysgYi9uZXQvaXJkYS9pcmlhcC5jCkBAIC00NCw3ICs0NCw3IEBACiAKICNpZmRlZiBDT05GSUdfSVJEQV9ERUJVRwogLyogRklYTUU6IFRoaXMgb25lIHNob3VsZCBnbyBpbiBpcmxtcC5jICovCi1zdGF0aWMgY29uc3QgY2hhciAqaWFzX2NoYXJzZXRfdHlwZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBpYXNfY2hhcnNldF90eXBlc1tdID0gewogCSJDU19BU0NJSSIsCiAJIkNTX0lTT184ODU5XzEiLAogCSJDU19JU09fODg1OV8yIiwKQEAgLTk2Niw3ICs5NjYsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAotc3RhdGljIGNvbnN0IGNoYXIgKmlhc192YWx1ZV90eXBlc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlhc192YWx1ZV90eXBlc1tdID0gewogCSJJQVNfTUlTU0lORyIsCiAJIklBU19JTlRFR0VSIiwKIAkiSUFTX09DVF9TRVEiLApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYwppbmRleCA3NzRkNzNhLi42MjExNjgyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYwpAQCAtNjksMTQgKzY5LDE0IEBACiBzdGF0aWMgaW50IGFjY2VzcyA9IEFDQ0VTU19QRUVSOyAvKiBQRUVSLCBESVJFQ1Qgb3IgSE9TVEVEICovCiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGNvbnN0IGNoYXIgKmlybGFuX2FjY2Vzc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlybGFuX2FjY2Vzc1tdID0gewogCSJVTktOT1dOIiwKIAkiRElSRUNUIiwKIAkiUEVFUiIsCiAJIkhPU1RFRCIKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICppcmxhbl9tZWRpYVtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlybGFuX21lZGlhW10gPSB7CiAJIlVOS05PV04iLAogCSI4MDIuMyIsCiAJIjgwMi41IgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYwppbmRleCA3MjRiY2Y5Li43YjZiNjMxIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYwpAQCAtNDEsNyArNDEsOCBAQAogCiBzdGF0aWMgaW50ICBpcmxhbl9ldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgIGlybGFuX2V0aF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgIGlybGFuX2V0aF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90ICBpcmxhbl9ldGhfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0KCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXJsYW5fZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIApAQCAtMTYyLDcgKzE2Myw4IEBACiAgKiAgICBUcmFuc21pdHMgZXRoZXJuZXQgZnJhbWVzIG92ZXIgSXJEQSBsaW5rLgogICoKICAqLwotc3RhdGljIGludCBpcmxhbl9ldGhfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGlybGFuX2V0aF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlybGFuX2NiICpzZWxmID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcmV0OwpAQCAtMTc3LDcgKzE3OSw3IEBACiAKIAkJLyogRGlkIHRoZSByZWFsbG9jIHN1Y2NlZWQ/ICovCiAJCWlmIChuZXdfc2tiID09IE5VTEwpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAKIAkJLyogVXNlIHRoZSBuZXcgc2tiIGluc3RlYWQgKi8KIAkJc2tiID0gbmV3X3NrYjsKQEAgLTIwOSw3ICsyMTEsNyBAQAogCQlzZWxmLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYXAuYyBiL25ldC9pcmRhL2lybGFwLmMKaW5kZXggZTQ5NjViNy4uMzU2ZTY1YiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYXAuYworKysgYi9uZXQvaXJkYS9pcmxhcC5jCkBAIC02Myw3ICs2Myw3IEBACiAJCQkJCXN0cnVjdCBxb3NfaW5mbyAqcW9zX3VzZXIpOwogCiAjaWZkZWYgQ09ORklHX0lSREFfREVCVUcKLXN0YXRpYyBjaGFyICpsYXBfcmVhc29uc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGxhcF9yZWFzb25zW10gPSB7CiAJIkVSUk9SLCBOT1QgVVNFRCIsCiAJIkxBUF9ESVNDX0lORElDQVRJT04iLAogCSJMQVBfTk9fUkVTUE9OU0UiLApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYXBfZXZlbnQuYyBiL25ldC9pcmRhL2lybGFwX2V2ZW50LmMKaW5kZXggMTZjNGVmMC4uYzVjNTE5NSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYXBfZXZlbnQuYworKysgYi9uZXQvaXJkYS9pcmxhcF9ldmVudC5jCkBAIC03OCw3ICs3OCw3IEBACiAJCQkJICAgc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IGlybGFwX2luZm8gKik7CiAKICNpZmRlZiBDT05GSUdfSVJEQV9ERUJVRwotc3RhdGljIGNvbnN0IGNoYXIgKmlybGFwX2V2ZW50W10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaXJsYXBfZXZlbnRbXSA9IHsKIAkiRElTQ09WRVJZX1JFUVVFU1QiLAogCSJDT05ORUNUX1JFUVVFU1QiLAogCSJDT05ORUNUX1JFU1BPTlNFIiwKQEAgLTEyMCw3ICsxMjAsNyBAQAogfTsKICNlbmRpZgkvKiBDT05GSUdfSVJEQV9ERUJVRyAqLwogCi1jb25zdCBjaGFyICppcmxhcF9zdGF0ZVtdID0geworY29uc3QgY2hhciAqY29uc3QgaXJsYXBfc3RhdGVbXSA9IHsKIAkiTEFQX05ETSIsCiAJIkxBUF9RVUVSWSIsCiAJIkxBUF9SRVBMWSIsCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxtcF9ldmVudC5jIGIvbmV0L2lyZGEvaXJsbXBfZXZlbnQuYwppbmRleCA3OGNjZTBjLi5jMWZiNWRiIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxtcF9ldmVudC5jCisrKyBiL25ldC9pcmRhL2lybG1wX2V2ZW50LmMKQEAgLTMzLDEzICszMywxMyBAQAogI2luY2x1ZGUgPG5ldC9pcmRhL2lybG1wX2ZyYW1lLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJsbXBfZXZlbnQuaD4KIAotY29uc3QgY2hhciAqaXJsbXBfc3RhdGVbXSA9IHsKK2NvbnN0IGNoYXIgKmNvbnN0IGlybG1wX3N0YXRlW10gPSB7CiAJIkxBUF9TVEFOREJZIiwKIAkiTEFQX1VfQ09OTkVDVCIsCiAJIkxBUF9BQ1RJVkUiLAogfTsKIAotY29uc3QgY2hhciAqaXJsc2FwX3N0YXRlW10gPSB7Citjb25zdCBjaGFyICpjb25zdCBpcmxzYXBfc3RhdGVbXSA9IHsKIAkiTFNBUF9ESVNDT05ORUNURUQiLAogCSJMU0FQX0NPTk5FQ1QiLAogCSJMU0FQX0NPTk5FQ1RfUEVORCIsCkBAIC00OSw3ICs0OSw3IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX0lSREFfREVCVUcKLXN0YXRpYyBjb25zdCBjaGFyICppcmxtcF9ldmVudFtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlybG1wX2V2ZW50W10gPSB7CiAJIkxNX0NPTk5FQ1RfUkVRVUVTVCIsCiAJIkxNX0NPTk5FQ1RfQ09ORklSTSIsCiAJIkxNX0NPTk5FQ1RfUkVTUE9OU0UiLApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmggYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuaAppbmRleCBkOWY4YmQ0Li5iNWRmMjQxIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuaAorKysgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuaApAQCAtOTUsNyArOTUsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogVkFSSUFCTEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIEZpbGVzeXN0ZW0gY2FsbGJhY2tzICh0byBjYWxsIHVzKSAqLwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXJuZXRfZGV2aWNlX2ZvcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXJuZXRfZGV2aWNlX2ZvcHMgPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSBkZXZfaXJuZXRfcmVhZCwKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybmV0bGluay5jIGIvbmV0L2lyZGEvaXJuZXRsaW5rLmMKaW5kZXggOGRkN2VkNy4uNDc2YjMwNyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJuZXRsaW5rLmMKKysrIGIvbmV0L2lyZGEvaXJuZXRsaW5rLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAJZ2VubG1zZ19lbmQobXNnLCBoZHIpOwogCi0JcmV0dXJuIGdlbmxtc2dfdW5pY2FzdChtc2csIGluZm8tPnNuZF9waWQpOworCXJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiAKICBlcnJfb3V0OgogCW5sbXNnX2ZyZWUobXNnKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lycHJvYy5jIGIvbmV0L2lyZGEvaXJwcm9jLmMKaW5kZXggOGZmMTg2MS4uMzE4NzY2ZSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJwcm9jLmMKKysrIGIvbmV0L2lyZGEvaXJwcm9jLmMKQEAgLTM0LDIxICszNCwyMSBAQAogI2luY2x1ZGUgPG5ldC9pcmRhL2lybGFwLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJsbXAuaD4KIAotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGlzY292ZXJ5X3NlcV9mb3BzOwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXJsYXBfc2VxX2ZvcHM7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcmxtcF9zZXFfZm9wczsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlydHRwX3NlcV9mb3BzOwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXJpYXNfc2VxX2ZvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkaXNjb3Zlcnlfc2VxX2ZvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcmxhcF9zZXFfZm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlybG1wX3NlcV9mb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXJ0dHBfc2VxX2ZvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcmlhc19zZXFfZm9wczsKIAogc3RydWN0IGlyZGFfZW50cnkgewogCWNvbnN0IGNoYXIgKm5hbWU7Ci0Jc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKKwljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOwogfTsKIAogc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2lyZGE7CiBFWFBPUlRfU1lNQk9MKHByb2NfaXJkYSk7CiAKLXN0YXRpYyBzdHJ1Y3QgaXJkYV9lbnRyeSBpcmRhX2RpcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJkYV9lbnRyeSBpcmRhX2RpcnNbXSA9IHsKIAl7ImRpc2NvdmVyeSIsCSZkaXNjb3Zlcnlfc2VxX2ZvcHN9LAogCXsiaXJ0dHAiLAkmaXJ0dHBfc2VxX2ZvcHN9LAogCXsiaXJsbXAiLAkmaXJsbXBfc2VxX2ZvcHN9LApkaWZmIC0tZ2l0IGEvbmV0L2tleS9hZl9rZXkuYyBiL25ldC9rZXkvYWZfa2V5LmMKaW5kZXggZGJhOWFiZC4uNGU5ODE5MyAxMDA2NDQKLS0tIGEvbmV0L2tleS9hZl9rZXkuYworKysgYi9uZXQva2V5L2FmX2tleS5jCkBAIC0zNzA1LDcgKzM3MDUsNyBAQAogCXJlYWRfdW5sb2NrKCZwZmtleV90YWJsZV9sb2NrKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwZmtleV9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwZmtleV9zZXFfb3BzID0gewogCS5zdGFydAk9IHBma2V5X3NlcV9zdGFydCwKIAkubmV4dAk9IHBma2V5X3NlcV9uZXh0LAogCS5zdG9wCT0gcGZrZXlfc2VxX3N0b3AsCkBAIC0zNzE4LDcgKzM3MTgsNyBAQAogCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBma2V5X3Byb2Nfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGZrZXlfcHJvY19vcHMgPSB7CiAJLm9wZW4JID0gcGZrZXlfc2VxX29wZW4sCiAJLnJlYWQJID0gc2VxX3JlYWQsCiAJLmxsc2VlawkgPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9uZXQvbGFwYi9sYXBiX2lmYWNlLmMgYi9uZXQvbGFwYi9sYXBiX2lmYWNlLmMKaW5kZXggMmJhMWJjNC4uYmRhOTZkMSAxMDA2NDQKLS0tIGEvbmV0L2xhcGIvbGFwYl9pZmFjZS5jCisrKyBiL25ldC9sYXBiL2xhcGJfaWZhY2UuYwpAQCAtNDA3LDcgKzQwNyw3IEBACiAJCXJldHVybiBsYXBiLT5jYWxsYmFja3MuZGF0YV9pbmRpY2F0aW9uKGxhcGItPmRldiwgc2tiKTsKIAogCWtmcmVlX3NrYihza2IpOwotCXJldHVybiBORVRfUlhfQ05fSElHSDsgLyogRm9yIG5vdzsgbXVzdCBiZSAhPSBORVRfUlhfRFJPUCAqLworCXJldHVybiBORVRfUlhfU1VDQ0VTUzsgLyogRm9yIG5vdzsgbXVzdCBiZSAhPSBORVRfUlhfRFJPUCAqLwogfQogCiBpbnQgbGFwYl9kYXRhX3RyYW5zbWl0KHN0cnVjdCBsYXBiX2NiICpsYXBiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfcHJvYy5jIGIvbmV0L2xsYy9sbGNfcHJvYy5jCmluZGV4IGY5N2JlNDcuLmJlNDdhYzQyNyAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfcHJvYy5jCisrKyBiL25ldC9sbGMvbGxjX3Byb2MuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjaGFyICpsbGNfY29ubl9zdGF0ZV9uYW1lc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGxsY19jb25uX3N0YXRlX25hbWVzW10gPSB7CiAJW0xMQ19DT05OX1NUQVRFX0FETV0gPSAgICAgICAgImFkbSIsCiAJW0xMQ19DT05OX1NUQVRFX1NFVFVQXSA9ICAgICAgInNldHVwIiwKIAlbTExDX0NPTk5fU1RBVEVfTk9STUFMXSA9ICAgICAibm9ybWFsIiwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9LY29uZmlnIGIvbmV0L21hYzgwMjExL0tjb25maWcKaW5kZXggNzgzNmVlOS4uNGQ1NTQzYSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL0tjb25maWcKKysrIGIvbmV0L21hYzgwMjExL0tjb25maWcKQEAgLTYsNyArNiw2IEBACiAJc2VsZWN0IENSWVBUT19BUkM0CiAJc2VsZWN0IENSWVBUT19BRVMKIAlzZWxlY3QgQ1JDMzIKLQlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgSUVFRSA4MDIuMTEKIAkgIG5ldHdvcmtpbmcgc3RhY2suCkBAIC0xNCwyNCArMTMsNyBAQAogY29tbWVudCAiQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEiCiAJZGVwZW5kcyBvbiBDRkc4MDIxMT1uCiAKLWNvbmZpZyBNQUM4MDIxMV9ERUZBVUxUX1BTCi0JYm9vbCAiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0IgotCWRlcGVuZHMgb24gTUFDODAyMTEKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIHBvd2Vyc2F2ZSBtb2RlIGJ5IGRlZmF1bHQuCi0KLQkgIElmIHRoaXMgY2F1c2VzIHlvdXIgYXBwbGljYXRpb25zIHRvIG1pc2JlaGF2ZSB5b3Ugc2hvdWxkIGZpeCB5b3VyCi0JICBhcHBsaWNhdGlvbnMgaW5zdGVhZCAtLSB0aGV5IG5lZWQgdG8gcmVnaXN0ZXIgdGhlaXIgbmV0d29yawotCSAgbGF0ZW5jeSByZXF1aXJlbWVudCwgc2VlIERvY3VtZW50YXRpb24vcG93ZXIvcG1fcW9zX2ludGVyZmFjZS50eHQuCi0KLWNvbmZpZyBNQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFCi0JaW50Ci0JZGVmYXVsdCAxIGlmIE1BQzgwMjExX0RFRkFVTFRfUFMKLQlkZWZhdWx0IDAKLQotbWVudSAiUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24iCi0JZGVwZW5kcyBvbiBNQUM4MDIxMSAhPSBuCitpZiBNQUM4MDIxMSAhPSBuCiAKIGNvbmZpZyBNQUM4MDIxMV9SQ19QSUQKIAlib29sICJQSUQgY29udHJvbGxlciBiYXNlZCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIiBpZiBFTUJFRERFRApAQCAtNzgsMTcgKzYwLDE3IEBACiAJZGVmYXVsdCAicGlkIiBpZiBNQUM4MDIxMV9SQ19ERUZBVUxUX1BJRAogCWRlZmF1bHQgIiIKIAotZW5kbWVudQorZW5kaWYKIAogY29uZmlnIE1BQzgwMjExX01FU0gKIAlib29sICJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIChwcmUtODAyLjExcykgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1BQzgwMjExICYmIEVYUEVSSU1FTlRBTAotCWRlcGVuZHMgb24gQlJPS0VOCiAJLS0taGVscC0tLQogCSBUaGlzIG9wdGlvbnMgZW5hYmxlcyBzdXBwb3J0IG9mIERyYWZ0IDgwMi4xMXMgbWVzaCBuZXR3b3JraW5nLgotCSBUaGUgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gRHJhZnQgMS4wOCBvZiB0aGUgTWVzaCBOZXR3b3JraW5nCi0JIGFtZW5kbWVudC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gdmlzaXQgaHR0cDovL28xMXMub3JnLy4KLQorCSBUaGUgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gRHJhZnQgMi4wOCBvZiB0aGUgTWVzaCBOZXR3b3JraW5nCisJIGFtZW5kbWVudC4gIEhvd2V2ZXIsIG5vIGNvbXBsaWFuY2Ugd2l0aCB0aGF0IGRyYWZ0IGlzIGNsYWltZWQgb3IgZXZlbgorCSBwb3NzaWJsZSwgYXMgZHJhZnRzIGxlYXZlIGEgbnVtYmVyIG9mIGlkZW50aWZpZXJzIHRvIGJlIGRlZmluZWQgYWZ0ZXIKKwkgcmF0aWZpY2F0aW9uLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gdmlzaXQgaHR0cDovL28xMXMub3JnLy4KIAogY29uZmlnIE1BQzgwMjExX0xFRFMKIAlib29sICJFbmFibGUgTEVEIHRyaWdnZXJzIgpAQCAtMjIyLDMgKzIwNCwxNSBAQAogCSAgYW5kIHNob3cgdGhlbSBpbiBkZWJ1Z2ZzLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgTUFDODAyMTFfRFJJVkVSX0FQSV9UUkFDRVIKKwlib29sICJEcml2ZXIgQVBJIHRyYWNlciIKKwlkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlUKKwlkZXBlbmRzIG9uIEVWRU5UX1RSQUNJTkcKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIG1ha2UgbWFjODAyMTEgcmVnaXN0ZXIgd2l0aCB0aGUgZnRyYWNlCisJICBmcmFtZXdvcmsgZm9yIHRoZSBkcml2ZXIgQVBJIC0tIHlvdSBjYW4gc2VlIHdoaWNoCisJICBkcml2ZXIgbWV0aG9kcyBpdCBpcyBjYWxsaW5nIHRoZW4gYnkgbG9va2luZyBhdCB0aGUKKwkgIHRyYWNlLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL01ha2VmaWxlIGIvbmV0L21hYzgwMjExL01ha2VmaWxlCmluZGV4IDBlM2FiODguLjlmM2NmNzEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9NYWtlZmlsZQorKysgYi9uZXQvbWFjODAyMTEvTWFrZWZpbGUKQEAgLTMsNyArMyw2IEBACiAjIG1hYzgwMjExIG9iamVjdHMKIG1hYzgwMjExLXkgOj0gXAogCW1haW4ubyBcCi0Jd2V4dC5vIFwKIAlzdGFfaW5mby5vIFwKIAl3ZXAubyBcCiAJd3BhLm8gXApAQCAtNDEsNiArNDAsOSBAQAogCiBtYWM4MDIxMS0kKENPTkZJR19QTSkgKz0gcG0ubwogCittYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9EUklWRVJfQVBJX1RSQUNFUikgKz0gZHJpdmVyLXRyYWNlLm8KK0NGTEFHU19kcml2ZXItdHJhY2UubyA6PSAtSSQoc3JjKQorCiAjIG9iamVjdHMgZm9yIFBJRCBhbGdvcml0aG0KIHJjODAyMTFfcGlkLXkgOj0gcmM4MDIxMV9waWRfYWxnby5vCiByYzgwMjExX3BpZC0kKENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTKSArPSByYzgwMjExX3BpZF9kZWJ1Z2ZzLm8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguYwppbmRleCBhMjRlNTk4Li5iZDc2NWYzIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYWdnLXR4LmMKKysrIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCkBAIC0zOTEsOSArMzkxLDYgQEAKIAogCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnBlbmRpbmcpKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwotCQkvKiBtYXJrIHF1ZXVlIGFzIHBlbmRpbmcsIGl0IGlzIHN0b3BwZWQgYWxyZWFkeSAqLwotCQlfX3NldF9iaXQoSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BFTkRJTkcsCi0JCQkgICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CiAJCS8qIGNvcHkgb3ZlciByZW1haW5pbmcgcGFja2V0cyAqLwogCQlza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCgKIAkJCSZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnBlbmRpbmcsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggM2Y0NzI3Ni4uNTYwOGY2YyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtNTcsMzYgKzU3LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX2RlbF9pZmFjZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBpbnQgaWZpbmRleCkKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2RlbF9pZmFjZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0KLQkvKiB3ZSdyZSB1bmRlciBSVE5MICovCi0JZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpbmRleCk7Ci0JaWYgKCFkZXYpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCi0JaWVlZTgwMjExX2lmX3JlbW92ZShzZGF0YSk7CisJaWVlZTgwMjExX2lmX3JlbW92ZShJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwgaW50IGlmaW5kZXgsCitzdGF0aWMgaW50IGllZWU4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCiAJCQkJICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJaW50IHJldDsKIAotCS8qIHdlJ3JlIHVuZGVyIFJUTkwgKi8KLQlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmluZGV4KTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlpZiAoIW5sODAyMTFfdHlwZV9jaGVjayh0eXBlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTMzOCw2ICszMjMsOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKIAorCXNpbmZvLT5nZW5lcmF0aW9uID0gc2RhdGEtPmxvY2FsLT5zdGFfZ2VuZXJhdGlvbjsKKwogCXNpbmZvLT5maWxsZWQgPSBTVEFUSU9OX0lORk9fSU5BQ1RJVkVfVElNRSB8CiAJCQlTVEFUSU9OX0lORk9fUlhfQllURVMgfAogCQkJU1RBVElPTl9JTkZPX1RYX0JZVEVTIHwKQEAgLTkyNCw2ICs5MTEsOCBAQAogCWVsc2UKIAkJbWVtc2V0KG5leHRfaG9wLCAwLCBFVEhfQUxFTik7CiAKKwlwaW5mby0+Z2VuZXJhdGlvbiA9IG1lc2hfcGF0aHNfZ2VuZXJhdGlvbjsKKwogCXBpbmZvLT5maWxsZWQgPSBNUEFUSF9JTkZPX0ZSQU1FX1FMRU4gfAogCQkJTVBBVEhfSU5GT19EU04gfAogCQkJTVBBVEhfSU5GT19NRVRSSUMgfApAQCAtMTE3NywxMjMgKzExNjYsMjkgQEAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCAqcmVxKQogewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCi0Jc3dpdGNoIChyZXEtPmF1dGhfdHlwZSkgewotCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTToKLQkJc2RhdGEtPnUubWdkLmF1dGhfYWxncyA9IElFRUU4MDIxMV9BVVRIX0FMR19PUEVOOwotCQlicmVhazsKLQljYXNlIE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWToKLQkJc2RhdGEtPnUubWdkLmF1dGhfYWxncyA9IElFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZOwotCQlicmVhazsKLQljYXNlIE5MODAyMTFfQVVUSFRZUEVfRlQ6Ci0JCXNkYXRhLT51Lm1nZC5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfRlQ7Ci0JCWJyZWFrOwotCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUDoKLQkJc2RhdGEtPnUubWdkLmF1dGhfYWxncyA9IElFRUU4MDIxMV9BVVRIX0FMR19MRUFQOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JbWVtY3B5KHNkYXRhLT51Lm1nZC5ic3NpZCwgcmVxLT5wZWVyX2FkZHIsIEVUSF9BTEVOKTsKLQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7Ci0Jc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQlNTSURfU0VUOwotCi0JLyogVE9ETzogcmVxLT5jaGFuICovCi0Jc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKLQotCWlmIChyZXEtPnNzaWQpIHsKLQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7Ci0JCW1lbWNweShzZGF0YS0+dS5tZ2Quc3NpZCwgcmVxLT5zc2lkLCByZXEtPnNzaWRfbGVuKTsKLQkJc2RhdGEtPnUubWdkLnNzaWRfbGVuID0gcmVxLT5zc2lkX2xlbjsKLQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7Ci0JfQotCi0Ja2ZyZWUoc2RhdGEtPnUubWdkLnNtZV9hdXRoX2llKTsKLQlzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWUgPSBOVUxMOwotCXNkYXRhLT51Lm1nZC5zbWVfYXV0aF9pZV9sZW4gPSAwOwotCWlmIChyZXEtPmllKSB7Ci0JCXNkYXRhLT51Lm1nZC5zbWVfYXV0aF9pZSA9IGttYWxsb2MocmVxLT5pZV9sZW4sIEdGUF9LRVJORUwpOwotCQlpZiAoc2RhdGEtPnUubWdkLnNtZV9hdXRoX2llID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJbWVtY3B5KHNkYXRhLT51Lm1nZC5zbWVfYXV0aF9pZSwgcmVxLT5pZSwgcmVxLT5pZV9sZW4pOwotCQlzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWVfbGVuID0gcmVxLT5pZV9sZW47Ci0JfQotCi0Jc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfRVhUX1NNRTsKLQlzZGF0YS0+dS5tZ2Quc3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOwotCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEpOwotCXJldHVybiAwOworCXJldHVybiBpZWVlODAyMTFfbWdkX2F1dGgoSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KSwgcmVxKTsKIH0KIAogc3RhdGljIGludCBpZWVlODAyMTFfYXNzb2Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBjZmc4MDIxMV9hc3NvY19yZXF1ZXN0ICpyZXEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0JaW50IHJldDsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWlmIChtZW1jbXAoc2RhdGEtPnUubWdkLmJzc2lkLCByZXEtPnBlZXJfYWRkciwgRVRIX0FMRU4pICE9IDAgfHwKLQkgICAgIShzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQpKQotCQlyZXR1cm4gLUVOT0xJTks7IC8qIG5vdCBhdXRoZW50aWNhdGVkICovCi0KLQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7Ci0Jc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQlNTSURfU0VUOwotCi0JLyogVE9ETzogcmVxLT5jaGFuICovCi0Jc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKLQotCWlmIChyZXEtPnNzaWQpIHsKLQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7Ci0JCW1lbWNweShzZGF0YS0+dS5tZ2Quc3NpZCwgcmVxLT5zc2lkLCByZXEtPnNzaWRfbGVuKTsKLQkJc2RhdGEtPnUubWdkLnNzaWRfbGVuID0gcmVxLT5zc2lkX2xlbjsKLQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7Ci0JfSBlbHNlCi0JCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7Ci0KLQlyZXQgPSBpZWVlODAyMTFfc3RhX3NldF9leHRyYV9pZShzZGF0YSwgcmVxLT5pZSwgcmVxLT5pZV9sZW4pOwotCWlmIChyZXQgJiYgcmV0ICE9IC1FQUxSRUFEWSkKLQkJcmV0dXJuIHJldDsKLQotCWlmIChyZXEtPnVzZV9tZnApIHsKLQkJc2RhdGEtPnUubWdkLm1mcCA9IElFRUU4MDIxMV9NRlBfUkVRVUlSRUQ7Ci0JCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX01GUF9FTkFCTEVEOwotCX0gZWxzZSB7Ci0JCXNkYXRhLT51Lm1nZC5tZnAgPSBJRUVFODAyMTFfTUZQX0RJU0FCTEVEOwotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQ7Ci0JfQotCi0JaWYgKHJlcS0+Y29udHJvbF9wb3J0KQotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQ7Ci0JZWxzZQotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUOwotCi0Jc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfRVhUX1NNRTsKLQlzZGF0YS0+dS5tZ2Quc3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOwotCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEpOwotCXJldHVybiAwOworCXJldHVybiBpZWVlODAyMTFfbWdkX2Fzc29jKElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldiksIHJlcSk7CiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2RlYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCAqcmVxKQorCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCAqcmVxLAorCQkJICAgIHZvaWQgKmNvb2tpZSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0KLQkvKiBUT0RPOiByZXEtPmllLCByZXEtPnBlZXJfYWRkciAqLwotCXJldHVybiBpZWVlODAyMTFfc3RhX2RlYXV0aGVudGljYXRlKHNkYXRhLCByZXEtPnJlYXNvbl9jb2RlKTsKKwlyZXR1cm4gaWVlZTgwMjExX21nZF9kZWF1dGgoSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KSwKKwkJCQkgICAgcmVxLCBjb29raWUpOwogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9kaXNhc3NvYyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGNmZzgwMjExX2Rpc2Fzc29jX3JlcXVlc3QgKnJlcSkKKwkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9kaXNhc3NvY19yZXF1ZXN0ICpyZXEsCisJCQkgICAgICB2b2lkICpjb29raWUpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCi0JLyogVE9ETzogcmVxLT5pZSwgcmVxLT5wZWVyX2FkZHIgKi8KLQlyZXR1cm4gaWVlZTgwMjExX3N0YV9kaXNhc3NvY2lhdGUoc2RhdGEsIHJlcS0+cmVhc29uX2NvZGUpOworCXJldHVybiBpZWVlODAyMTFfbWdkX2Rpc2Fzc29jKElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldiksCisJCQkJICAgICAgcmVxLCBjb29raWUpOwogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9qb2luX2lic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTEzNzQsNiArMTI2OSwxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGllZWU4MDIxMV9zZXRfd2RzX3BlZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHU4ICphZGRyKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCW1lbWNweSgmc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgaWVlZTgwMjExX3Jma2lsbF9wb2xsKHN0cnVjdCB3aXBoeSAqd2lwaHkpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKQEAgLTEzODEsNiArMTI4Niw4NSBAQAogCWRydl9yZmtpbGxfcG9sbChsb2NhbCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkw4MDIxMV9URVNUTU9ERQorc3RhdGljIGludCBpZWVlODAyMTFfdGVzdG1vZGVfY21kKHN0cnVjdCB3aXBoeSAqd2lwaHksIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKKworCWlmICghbG9jYWwtPm9wcy0+dGVzdG1vZGVfY21kKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gbG9jYWwtPm9wcy0+dGVzdG1vZGVfY21kKCZsb2NhbC0+aHcsIGRhdGEsIGxlbik7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBpZWVlODAyMTFfc2V0X3Bvd2VyX21nbXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgYm9vbCBlbmFibGVkLCBpbnQgdGltZW91dCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmbG9jYWwtPmh3LmNvbmY7CisKKwlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoZW5hYmxlZCA9PSBzZGF0YS0+dS5tZ2QucG93ZXJzYXZlICYmCisJICAgIHRpbWVvdXQgPT0gY29uZi0+ZHluYW1pY19wc190aW1lb3V0KQorCQlyZXR1cm4gMDsKKworCXNkYXRhLT51Lm1nZC5wb3dlcnNhdmUgPSBlbmFibGVkOworCWNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCA9IHRpbWVvdXQ7CisKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMpCisJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CisKKwlpZWVlODAyMTFfcmVjYWxjX3BzKGxvY2FsLCAtMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfc2V0X2JpdHJhdGVfbWFzayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICAgY29uc3QgdTggKmFkZHIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGNmZzgwMjExX2JpdHJhdGVfbWFzayAqbWFzaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlpbnQgaSwgZXJyID0gLUVJTlZBTDsKKwl1MzIgdGFyZ2V0X3JhdGU7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisKKwkvKiB0YXJnZXRfcmF0ZSA9IC0xLCByYXRlLT5maXhlZCA9IDAgbWVhbnMgYXV0byBvbmx5LCBzbyB1c2UgYWxsIHJhdGVzCisJICogdGFyZ2V0X3JhdGUgPSBYLCByYXRlLT5maXhlZCA9IDEgbWVhbnMgb25seSByYXRlIFgKKwkgKiB0YXJnZXRfcmF0ZSA9IFgsIHJhdGUtPmZpeGVkID0gMCBtZWFucyBhbGwgcmF0ZXMgPD0gWCAqLworCXNkYXRhLT5tYXhfcmF0ZWN0cmxfcmF0ZWlkeCA9IC0xOworCXNkYXRhLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPSAtMTsKKworCWlmIChtYXNrLT5maXhlZCkKKwkJdGFyZ2V0X3JhdGUgPSBtYXNrLT5maXhlZCAvIDEwMDsKKwllbHNlIGlmIChtYXNrLT5tYXhyYXRlKQorCQl0YXJnZXRfcmF0ZSA9IG1hc2stPm1heHJhdGUgLyAxMDA7CisJZWxzZQorCQlyZXR1cm4gMDsKKworCWZvciAoaT0wOyBpPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYnJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOworCQlpbnQgdGhpc19yYXRlID0gYnJhdGUtPmJpdHJhdGU7CisKKwkJaWYgKHRhcmdldF9yYXRlID09IHRoaXNfcmF0ZSkgeworCQkJc2RhdGEtPm1heF9yYXRlY3RybF9yYXRlaWR4ID0gaTsKKwkJCWlmIChtYXNrLT5maXhlZCkKKwkJCQlzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID0gaTsKKwkJCWVyciA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBlcnI7Cit9CisKIHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHsKIAkuYWRkX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9hZGRfaWZhY2UsCiAJLmRlbF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfZGVsX2lmYWNlLApAQCAtMTQyMiw1ICsxNDA2LDkgQEAKIAkuc2V0X3dpcGh5X3BhcmFtcyA9IGllZWU4MDIxMV9zZXRfd2lwaHlfcGFyYW1zLAogCS5zZXRfdHhfcG93ZXIgPSBpZWVlODAyMTFfc2V0X3R4X3Bvd2VyLAogCS5nZXRfdHhfcG93ZXIgPSBpZWVlODAyMTFfZ2V0X3R4X3Bvd2VyLAorCS5zZXRfd2RzX3BlZXIgPSBpZWVlODAyMTFfc2V0X3dkc19wZWVyLAogCS5yZmtpbGxfcG9sbCA9IGllZWU4MDIxMV9yZmtpbGxfcG9sbCwKKwlDRkc4MDIxMV9URVNUTU9ERV9DTUQoaWVlZTgwMjExX3Rlc3Rtb2RlX2NtZCkKKwkuc2V0X3Bvd2VyX21nbXQgPSBpZWVlODAyMTFfc2V0X3Bvd2VyX21nbXQsCisJLnNldF9iaXRyYXRlX21hc2sgPSBpZWVlODAyMTFfc2V0X2JpdHJhdGVfbWFzaywKIH07CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnMuYwppbmRleCA2YzQzOWNkLi45Njk5MWI2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKQEAgLTE3NSw3ICsxNzUsNyBAQAogCWZvciAocSA9IDA7IHEgPCBsb2NhbC0+aHcucXVldWVzOyBxKyspCiAJCXJlcyArPSBzcHJpbnRmKGJ1ZiArIHJlcywgIiUwMmQ6ICUjLjhseC8lZFxuIiwgcSwKIAkJCQlsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3FdLAotCQkJCV9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgcSkpOworCQkJCXNrYl9xdWV1ZV9sZW4oJmxvY2FsLT5wZW5kaW5nW3FdKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKaW5kZXggZTM0MjAzMi4uNjEyMzRlNyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKQEAgLTk1LDMzICs5NSw5IEBACiBJRUVFODAyMTFfSUZfRklMRShtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgbWF4X3JhdGVjdHJsX3JhdGVpZHgsIERFQyk7CiAKIC8qIFNUQSBhdHRyaWJ1dGVzICovCi1JRUVFODAyMTFfSUZfRklMRShzdGF0ZSwgdS5tZ2Quc3RhdGUsIERFQyk7CiBJRUVFODAyMTFfSUZfRklMRShic3NpZCwgdS5tZ2QuYnNzaWQsIE1BQyk7Ci1JRUVFODAyMTFfSUZfRklMRShwcmV2X2Jzc2lkLCB1Lm1nZC5wcmV2X2Jzc2lkLCBNQUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoc3NpZF9sZW4sIHUubWdkLnNzaWRfbGVuLCBTSVpFKTsKIElFRUU4MDIxMV9JRl9GSUxFKGFpZCwgdS5tZ2QuYWlkLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXBfY2FwYWIsIHUubWdkLmFwX2NhcGFiLCBIRVgpOwogSUVFRTgwMjExX0lGX0ZJTEUoY2FwYWIsIHUubWdkLmNhcGFiLCBIRVgpOwotSUVFRTgwMjExX0lGX0ZJTEUoZXh0cmFfaWVfbGVuLCB1Lm1nZC5leHRyYV9pZV9sZW4sIFNJWkUpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF90cmllcywgdS5tZ2QuYXV0aF90cmllcywgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGFzc29jX3RyaWVzLCB1Lm1nZC5hc3NvY190cmllcywgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxncywgdS5tZ2QuYXV0aF9hbGdzLCBIRVgpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF9hbGcsIHUubWdkLmF1dGhfYWxnLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoYXV0aF90cmFuc2FjdGlvbiwgdS5tZ2QuYXV0aF90cmFuc2FjdGlvbiwgREVDKTsKLQotc3RhdGljIHNzaXplX3QgaWVlZTgwMjExX2lmX2ZtdF9mbGFncygKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQotewotCXJldHVybiBzY25wcmludGYoYnVmLCBidWZsZW4sICIlcyVzJXMlcyVzJXMlc1xuIiwKLQkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfU1NJRF9TRVQgPyAiU1NJRFxuIiA6ICIiLAotCQkgc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQgPyAiQlNTSURcbiIgOiAiIiwKLQkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQgPyAicHJldiBCU1NJRFxuIiA6ICIiLAotCQkgc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEID8gIkFVVEhcbiIgOiAiIiwKLQkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCA/ICJBU1NPQ1xuIiA6ICIiLAotCQkgc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMID8gIlBST0JFUkVRIFBPTExcbiIgOiAiIiwKLQkJIHNkYXRhLT52aWYuYnNzX2NvbmYudXNlX2N0c19wcm90ID8gIkNUUyBwcm90XG4iIDogIiIpOwotfQotX19JRUVFODAyMTFfSUZfRklMRShmbGFncyk7CiAKIC8qIEFQIGF0dHJpYnV0ZXMgKi8KIElFRUU4MDIxMV9JRl9GSUxFKG51bV9zdGFfcHMsIHUuYXAubnVtX3N0YV9wcywgQVRPTUlDKTsKQEAgLTE0MCw2ICsxMTYsOCBAQAogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKIC8qIE1lc2ggc3RhdHMgYXR0cmlidXRlcyAqLworSUVFRTgwMjExX0lGX0ZJTEUoZndkZWRfbWNhc3QsIHUubWVzaC5tc2hzdGF0cy5md2RlZF9tY2FzdCwgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGZ3ZGVkX3VuaWNhc3QsIHUubWVzaC5tc2hzdGF0cy5md2RlZF91bmljYXN0LCBERUMpOwogSUVFRTgwMjExX0lGX0ZJTEUoZndkZWRfZnJhbWVzLCB1Lm1lc2gubXNoc3RhdHMuZndkZWRfZnJhbWVzLCBERUMpOwogSUVFRTgwMjExX0lGX0ZJTEUoZHJvcHBlZF9mcmFtZXNfdHRsLCB1Lm1lc2gubXNoc3RhdHMuZHJvcHBlZF9mcmFtZXNfdHRsLCBERUMpOwogSUVFRTgwMjExX0lGX0ZJTEUoZHJvcHBlZF9mcmFtZXNfbm9fcm91dGUsCkBAIC0xODQsMjAgKzE2Miw5IEBACiAJREVCVUdGU19BREQoZm9yY2VfdW5pY2FzdF9yYXRlaWR4LCBzdGEpOwogCURFQlVHRlNfQUREKG1heF9yYXRlY3RybF9yYXRlaWR4LCBzdGEpOwogCi0JREVCVUdGU19BREQoc3RhdGUsIHN0YSk7CiAJREVCVUdGU19BREQoYnNzaWQsIHN0YSk7Ci0JREVCVUdGU19BREQocHJldl9ic3NpZCwgc3RhKTsKLQlERUJVR0ZTX0FERChzc2lkX2xlbiwgc3RhKTsKIAlERUJVR0ZTX0FERChhaWQsIHN0YSk7Ci0JREVCVUdGU19BREQoYXBfY2FwYWIsIHN0YSk7CiAJREVCVUdGU19BREQoY2FwYWIsIHN0YSk7Ci0JREVCVUdGU19BREQoZXh0cmFfaWVfbGVuLCBzdGEpOwotCURFQlVHRlNfQUREKGF1dGhfdHJpZXMsIHN0YSk7Ci0JREVCVUdGU19BREQoYXNzb2NfdHJpZXMsIHN0YSk7Ci0JREVCVUdGU19BREQoYXV0aF9hbGdzLCBzdGEpOwotCURFQlVHRlNfQUREKGF1dGhfYWxnLCBzdGEpOwotCURFQlVHRlNfQUREKGF1dGhfdHJhbnNhY3Rpb24sIHN0YSk7Ci0JREVCVUdGU19BREQoZmxhZ3MsIHN0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkZF9hcF9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKQEAgLTI0MCw2ICsyMDcsOCBAQAogewogCXNkYXRhLT5tZXNoX3N0YXRzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigibWVzaF9zdGF0cyIsCiAJCQkJc2RhdGEtPmRlYnVnZnNkaXIpOworCU1FU0hTVEFUU19BREQoZndkZWRfbWNhc3QpOworCU1FU0hTVEFUU19BREQoZndkZWRfdW5pY2FzdCk7CiAJTUVTSFNUQVRTX0FERChmd2RlZF9mcmFtZXMpOwogCU1FU0hTVEFUU19BREQoZHJvcHBlZF9mcmFtZXNfdHRsKTsKIAlNRVNIU1RBVFNfQUREKGRyb3BwZWRfZnJhbWVzX25vX3JvdXRlKTsKQEAgLTMxNywyMCArMjg2LDkgQEAKIAlERUJVR0ZTX0RFTChmb3JjZV91bmljYXN0X3JhdGVpZHgsIHN0YSk7CiAJREVCVUdGU19ERUwobWF4X3JhdGVjdHJsX3JhdGVpZHgsIHN0YSk7CiAKLQlERUJVR0ZTX0RFTChzdGF0ZSwgc3RhKTsKIAlERUJVR0ZTX0RFTChic3NpZCwgc3RhKTsKLQlERUJVR0ZTX0RFTChwcmV2X2Jzc2lkLCBzdGEpOwotCURFQlVHRlNfREVMKHNzaWRfbGVuLCBzdGEpOwogCURFQlVHRlNfREVMKGFpZCwgc3RhKTsKLQlERUJVR0ZTX0RFTChhcF9jYXBhYiwgc3RhKTsKIAlERUJVR0ZTX0RFTChjYXBhYiwgc3RhKTsKLQlERUJVR0ZTX0RFTChleHRyYV9pZV9sZW4sIHN0YSk7Ci0JREVCVUdGU19ERUwoYXV0aF90cmllcywgc3RhKTsKLQlERUJVR0ZTX0RFTChhc3NvY190cmllcywgc3RhKTsKLQlERUJVR0ZTX0RFTChhdXRoX2FsZ3MsIHN0YSk7Ci0JREVCVUdGU19ERUwoYXV0aF9hbGcsIHN0YSk7Ci0JREVCVUdGU19ERUwoYXV0aF90cmFuc2FjdGlvbiwgc3RhKTsKLQlERUJVR0ZTX0RFTChmbGFncywgc3RhKTsKIH0KIAogc3RhdGljIHZvaWQgZGVsX2FwX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtMzczLDYgKzMzMSw4IEBACiAKIHN0YXRpYyB2b2lkIGRlbF9tZXNoX3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCU1FU0hTVEFUU19ERUwoZndkZWRfbWNhc3QpOworCU1FU0hTVEFUU19ERUwoZndkZWRfdW5pY2FzdCk7CiAJTUVTSFNUQVRTX0RFTChmd2RlZF9mcmFtZXMpOwogCU1FU0hTVEFUU19ERUwoZHJvcHBlZF9mcmFtZXNfdHRsKTsKIAlNRVNIU1RBVFNfREVMKGRyb3BwZWRfZnJhbWVzX25vX3JvdXRlKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKaW5kZXggOTAyMzBjNy4uMzNhMmU4OSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKQEAgLTEyMCw0NSArMTIwLDM4IEBACiBzdGF0aWMgc3NpemVfdCBzdGFfYWdnX3N0YXR1c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZbNzY4XSwgKnAgPSBidWY7CisJY2hhciBidWZbMzAgKyBTVEFfVElEX05VTSAqIDcwXSwgKnAgPSBidWY7CiAJaW50IGk7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJBZ2cgc3RhdGUgZm9yIFNUQSBpczpcbiIpOwotCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiIFNUQSBuZXh0IGRpYWxvZ190b2tlbiBpcyAlZCBcbiAiCi0JCQkiVElEcyBpbmZvIGlzOiBcbiBUSUQgOiIsCi0JCQkoc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3IgKyAxKSk7Ci0JZm9yIChpID0gMDsgaSA8IFNUQV9USURfTlVNOyBpKyspCi0JCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiJTVkIiwgaSk7CiAKLQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlxuIFJYICA6Iik7Ci0JZm9yIChpID0gMDsgaSA8IFNUQV9USURfTlVNOyBpKyspCi0JCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiJTVkIiwKLQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbaV0pOworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKwlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIm5leHQgZGlhbG9nX3Rva2VuIGlzICUjMDJ4XG4iLAorCQkJc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3IgKyAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgU1RBX1RJRF9OVU07IGkrKykgeworCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlRJRCAlMDJkOiIsIGkpOworCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiBSWD0leCIsCisJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFtpXSk7CisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiL0RUS049JSMuMngiLAorCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbaV0gPworCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0tPmRpYWxvZ190b2tlbiA6IDApOworCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIi9TU049JSMuM3giLAorCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbaV0gPworCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0tPnNzbiA6IDApOwogCi0JcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcbiBEVEtOOiIpOwotCWZvciAoaSA9IDA7IGkgPCBTVEFfVElEX05VTTsgaSsrKQotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiU1ZCIsCi0JCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W2ldID8KLQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0tPmRpYWxvZ190b2tlbiA6IDApOwotCi0JcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcbiBUWCAgOiIpOwotCWZvciAoaSA9IDA7IGkgPCBTVEFfVElEX05VTTsgaSsrKQotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiU1ZCIsCi0JCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldKTsKLQotCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiXG4gRFRLTjoiKTsKLQlmb3IgKGkgPSAwOyBpIDwgU1RBX1RJRF9OVU07IGkrKykKLQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIlNWQiLAotCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSA/Ci0JCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldLT5kaWFsb2dfdG9rZW4gOiAwKTsKLQotCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiXG4gU1NOIDoiKTsKLQlmb3IgKGkgPSAwOyBpIDwgU1RBX1RJRF9OVU07IGkrKykKLQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIlNWQiLAotCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSA/Ci0JCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldLT5zc24gOiAwKTsKLQotCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiXG4iKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIgVFg9JXgiLAorCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbaV0pOworCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIi9EVEtOPSUjLjJ4IiwKKwkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldID8KKwkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldLT5kaWFsb2dfdG9rZW4gOiAwKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIvU1NOPSUjLjN4IiwKKwkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldID8KKwkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldLT5zc24gOiAwKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIvcGVuZGluZz0lMDNkIiwKKwkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldID8KKwkJCQlza2JfcXVldWVfbGVuKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldLT5wZW5kaW5nKSA6IDApOworCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlxuIik7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHAgLSBidWYpOwogfQpAQCAtMjAzLDYgKzE5NiwyMiBAQAogCURFQlVHRlNfQUREKGluYWN0aXZlX21zKTsKIAlERUJVR0ZTX0FERChsYXN0X3NlcV9jdHJsKTsKIAlERUJVR0ZTX0FERChhZ2dfc3RhdHVzKTsKKwlERUJVR0ZTX0FERChkZXYpOworCURFQlVHRlNfQUREKHJ4X3BhY2tldHMpOworCURFQlVHRlNfQUREKHR4X3BhY2tldHMpOworCURFQlVHRlNfQUREKHJ4X2J5dGVzKTsKKwlERUJVR0ZTX0FERCh0eF9ieXRlcyk7CisJREVCVUdGU19BREQocnhfZHVwbGljYXRlcyk7CisJREVCVUdGU19BREQocnhfZnJhZ21lbnRzKTsKKwlERUJVR0ZTX0FERChyeF9kcm9wcGVkKTsKKwlERUJVR0ZTX0FERCh0eF9mcmFnbWVudHMpOworCURFQlVHRlNfQUREKHR4X2ZpbHRlcmVkKTsKKwlERUJVR0ZTX0FERCh0eF9yZXRyeV9mYWlsZWQpOworCURFQlVHRlNfQUREKHR4X3JldHJ5X2NvdW50KTsKKwlERUJVR0ZTX0FERChsYXN0X3NpZ25hbCk7CisJREVCVUdGU19BREQobGFzdF9xdWFsKTsKKwlERUJVR0ZTX0FERChsYXN0X25vaXNlKTsKKwlERUJVR0ZTX0FERCh3ZXBfd2Vha19pdl9jb3VudCk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3N0YV9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKQEAgLTIxMiw2ICsyMjEsMjMgQEAKIAlERUJVR0ZTX0RFTChpbmFjdGl2ZV9tcyk7CiAJREVCVUdGU19ERUwobGFzdF9zZXFfY3RybCk7CiAJREVCVUdGU19ERUwoYWdnX3N0YXR1cyk7CisJREVCVUdGU19ERUwoYWlkKTsKKwlERUJVR0ZTX0RFTChkZXYpOworCURFQlVHRlNfREVMKHJ4X3BhY2tldHMpOworCURFQlVHRlNfREVMKHR4X3BhY2tldHMpOworCURFQlVHRlNfREVMKHJ4X2J5dGVzKTsKKwlERUJVR0ZTX0RFTCh0eF9ieXRlcyk7CisJREVCVUdGU19ERUwocnhfZHVwbGljYXRlcyk7CisJREVCVUdGU19ERUwocnhfZnJhZ21lbnRzKTsKKwlERUJVR0ZTX0RFTChyeF9kcm9wcGVkKTsKKwlERUJVR0ZTX0RFTCh0eF9mcmFnbWVudHMpOworCURFQlVHRlNfREVMKHR4X2ZpbHRlcmVkKTsKKwlERUJVR0ZTX0RFTCh0eF9yZXRyeV9mYWlsZWQpOworCURFQlVHRlNfREVMKHR4X3JldHJ5X2NvdW50KTsKKwlERUJVR0ZTX0RFTChsYXN0X3NpZ25hbCk7CisJREVCVUdGU19ERUwobGFzdF9xdWFsKTsKKwlERUJVR0ZTX0RFTChsYXN0X25vaXNlKTsKKwlERUJVR0ZTX0RFTCh3ZXBfd2Vha19pdl9jb3VudCk7CiAKIAlkZWJ1Z2ZzX3JlbW92ZShzdGEtPmRlYnVnZnMuZGlyKTsKIAlzdGEtPmRlYnVnZnMuZGlyID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmggYi9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oCmluZGV4IGIxMzQ0NmEuLjAyMGE5NGEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgKKysrIGIvbmV0L21hYzgwMjExL2RyaXZlci1vcHMuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAiZHJpdmVyLXRyYWNlLmgiCiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl90eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTExLDI5ICsxMiw0OSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBkcnZfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7Ci0JcmV0dXJuIGxvY2FsLT5vcHMtPnN0YXJ0KCZsb2NhbC0+aHcpOworCWludCByZXQ7CisKKwlsb2NhbC0+c3RhcnRlZCA9IHRydWU7CisJc21wX21iKCk7CisJcmV0ID0gbG9jYWwtPm9wcy0+c3RhcnQoJmxvY2FsLT5odyk7CisJdHJhY2VfZHJ2X3N0YXJ0KGxvY2FsLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAlsb2NhbC0+b3BzLT5zdG9wKCZsb2NhbC0+aHcpOworCXRyYWNlX2Rydl9zdG9wKGxvY2FsKTsKKworCS8qIHN5bmMgYXdheSBhbGwgd29yayBvbiB0aGUgdGFza2xldCBiZWZvcmUgY2xlYXJpbmcgc3RhcnRlZCAqLworCXRhc2tsZXRfZGlzYWJsZSgmbG9jYWwtPnRhc2tsZXQpOworCXRhc2tsZXRfZW5hYmxlKCZsb2NhbC0+dGFza2xldCk7CisKKwliYXJyaWVyKCk7CisKKwlsb2NhbC0+c3RhcnRlZCA9IGZhbHNlOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkcnZfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCiB7Ci0JcmV0dXJuIGxvY2FsLT5vcHMtPmFkZF9pbnRlcmZhY2UoJmxvY2FsLT5odywgY29uZik7CisJaW50IHJldCA9IGxvY2FsLT5vcHMtPmFkZF9pbnRlcmZhY2UoJmxvY2FsLT5odywgY29uZik7CisJdHJhY2VfZHJ2X2FkZF9pbnRlcmZhY2UobG9jYWwsIGNvbmYtPm1hY19hZGRyLCBjb25mLT52aWYsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKIAlsb2NhbC0+b3BzLT5yZW1vdmVfaW50ZXJmYWNlKCZsb2NhbC0+aHcsIGNvbmYpOworCXRyYWNlX2Rydl9yZW1vdmVfaW50ZXJmYWNlKGxvY2FsLCBjb25mLT5tYWNfYWRkciwgY29uZi0+dmlmKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTMyIGNoYW5nZWQpCiB7Ci0JcmV0dXJuIGxvY2FsLT5vcHMtPmNvbmZpZygmbG9jYWwtPmh3LCBjaGFuZ2VkKTsKKwlpbnQgcmV0ID0gbG9jYWwtPm9wcy0+Y29uZmlnKCZsb2NhbC0+aHcsIGNoYW5nZWQpOworCXRyYWNlX2Rydl9jb25maWcobG9jYWwsIGNoYW5nZWQsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApAQCAtNDMsMjQgKzY0LDQ1IEBACiB7CiAJaWYgKGxvY2FsLT5vcHMtPmJzc19pbmZvX2NoYW5nZWQpCiAJCWxvY2FsLT5vcHMtPmJzc19pbmZvX2NoYW5nZWQoJmxvY2FsLT5odywgdmlmLCBpbmZvLCBjaGFuZ2VkKTsKKwl0cmFjZV9kcnZfYnNzX2luZm9fY2hhbmdlZChsb2NhbCwgdmlmLCBpbmZvLCBjaGFuZ2VkKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgZHJ2X3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQlpbnQgbWNfY291bnQsCisJCQkJCXN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQoreworCXU2NCByZXQgPSAwOworCisJaWYgKGxvY2FsLT5vcHMtPnByZXBhcmVfbXVsdGljYXN0KQorCQlyZXQgPSBsb2NhbC0+b3BzLT5wcmVwYXJlX211bHRpY2FzdCgmbG9jYWwtPmh3LCBtY19jb3VudCwKKwkJCQkJCSAgICBtY19saXN0KTsKKworCXRyYWNlX2Rydl9wcmVwYXJlX211bHRpY2FzdChsb2NhbCwgbWNfY291bnQsIHJldCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAogCQkJCQl1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCQlpbnQgbWNfY291bnQsCi0JCQkJCXN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQorCQkJCQl1NjQgbXVsdGljYXN0KQogeworCW1pZ2h0X3NsZWVwKCk7CisKIAlsb2NhbC0+b3BzLT5jb25maWd1cmVfZmlsdGVyKCZsb2NhbC0+aHcsIGNoYW5nZWRfZmxhZ3MsIHRvdGFsX2ZsYWdzLAotCQkJCSAgICAgbWNfY291bnQsIG1jX2xpc3QpOworCQkJCSAgICAgbXVsdGljYXN0KTsKKwl0cmFjZV9kcnZfY29uZmlndXJlX2ZpbHRlcihsb2NhbCwgY2hhbmdlZF9mbGFncywgdG90YWxfZmxhZ3MsCisJCQkJICAgbXVsdGljYXN0KTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBib29sIHNldCkKIHsKKwlpbnQgcmV0ID0gMDsKIAlpZiAobG9jYWwtPm9wcy0+c2V0X3RpbSkKLQkJcmV0dXJuIGxvY2FsLT5vcHMtPnNldF90aW0oJmxvY2FsLT5odywgc3RhLCBzZXQpOwotCXJldHVybiAwOworCQlyZXQgPSBsb2NhbC0+b3BzLT5zZXRfdGltKCZsb2NhbC0+aHcsIHN0YSwgc2V0KTsKKwl0cmFjZV9kcnZfc2V0X3RpbShsb2NhbCwgc3RhLCBzZXQsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCkBAIC02OCw3ICsxMTAsOSBAQAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKLQlyZXR1cm4gbG9jYWwtPm9wcy0+c2V0X2tleSgmbG9jYWwtPmh3LCBjbWQsIHZpZiwgc3RhLCBrZXkpOworCWludCByZXQgPSBsb2NhbC0+b3BzLT5zZXRfa2V5KCZsb2NhbC0+aHcsIGNtZCwgdmlmLCBzdGEsIGtleSk7CisJdHJhY2VfZHJ2X3NldF9rZXkobG9jYWwsIGNtZCwgdmlmLCBzdGEsIGtleSwgcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3VwZGF0ZV90a2lwX2tleShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKQEAgLTc5LDMyICsxMjMsNDEgQEAKIAlpZiAobG9jYWwtPm9wcy0+dXBkYXRlX3RraXBfa2V5KQogCQlsb2NhbC0+b3BzLT51cGRhdGVfdGtpcF9rZXkoJmxvY2FsLT5odywgY29uZiwgYWRkcmVzcywKIAkJCQkJICAgIGl2MzIsIHBoYXNlMWtleSk7CisJdHJhY2VfZHJ2X3VwZGF0ZV90a2lwX2tleShsb2NhbCwgY29uZiwgYWRkcmVzcywgaXYzMik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQogewotCXJldHVybiBsb2NhbC0+b3BzLT5od19zY2FuKCZsb2NhbC0+aHcsIHJlcSk7CisJaW50IHJldCA9IGxvY2FsLT5vcHMtPmh3X3NjYW4oJmxvY2FsLT5odywgcmVxKTsKKwl0cmFjZV9kcnZfaHdfc2Nhbihsb2NhbCwgcmVxLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAlpZiAobG9jYWwtPm9wcy0+c3dfc2Nhbl9zdGFydCkKIAkJbG9jYWwtPm9wcy0+c3dfc2Nhbl9zdGFydCgmbG9jYWwtPmh3KTsKKwl0cmFjZV9kcnZfc3dfc2Nhbl9zdGFydChsb2NhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAlpZiAobG9jYWwtPm9wcy0+c3dfc2Nhbl9jb21wbGV0ZSkKIAkJbG9jYWwtPm9wcy0+c3dfc2Nhbl9jb21wbGV0ZSgmbG9jYWwtPmh3KTsKKwl0cmFjZV9kcnZfc3dfc2Nhbl9jb21wbGV0ZShsb2NhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQogewotCWlmICghbG9jYWwtPm9wcy0+Z2V0X3N0YXRzKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIGxvY2FsLT5vcHMtPmdldF9zdGF0cygmbG9jYWwtPmh3LCBzdGF0cyk7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJaWYgKGxvY2FsLT5vcHMtPmdldF9zdGF0cykKKwkJcmV0ID0gbG9jYWwtPm9wcy0+Z2V0X3N0YXRzKCZsb2NhbC0+aHcsIHN0YXRzKTsKKwl0cmFjZV9kcnZfZ2V0X3N0YXRzKGxvY2FsLCBzdGF0cywgcmV0KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfZ2V0X3RraXBfc2VxKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApAQCAtMTEyLDE0ICsxNjUsMTcgQEAKIHsKIAlpZiAobG9jYWwtPm9wcy0+Z2V0X3RraXBfc2VxKQogCQlsb2NhbC0+b3BzLT5nZXRfdGtpcF9zZXEoJmxvY2FsLT5odywgaHdfa2V5X2lkeCwgaXYzMiwgaXYxNik7CisJdHJhY2VfZHJ2X2dldF90a2lwX3NlcShsb2NhbCwgaHdfa2V5X2lkeCwgaXYzMiwgaXYxNik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkJdTMyIHZhbHVlKQogeworCWludCByZXQgPSAwOwogCWlmIChsb2NhbC0+b3BzLT5zZXRfcnRzX3RocmVzaG9sZCkKLQkJcmV0dXJuIGxvY2FsLT5vcHMtPnNldF9ydHNfdGhyZXNob2xkKCZsb2NhbC0+aHcsIHZhbHVlKTsKLQlyZXR1cm4gMDsKKwkJcmV0ID0gbG9jYWwtPm9wcy0+c2V0X3J0c190aHJlc2hvbGQoJmxvY2FsLT5odywgdmFsdWUpOworCXRyYWNlX2Rydl9zZXRfcnRzX3RocmVzaG9sZChsb2NhbCwgdmFsdWUsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApAQCAtMTI5LDQ2ICsxODUsNTcgQEAKIHsKIAlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkKIAkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeSgmbG9jYWwtPmh3LCB2aWYsIGNtZCwgc3RhKTsKKwl0cmFjZV9kcnZfc3RhX25vdGlmeShsb2NhbCwgdmlmLCBjbWQsIHN0YSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1MTYgcXVldWUsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQogeworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKIAlpZiAobG9jYWwtPm9wcy0+Y29uZl90eCkKLQkJcmV0dXJuIGxvY2FsLT5vcHMtPmNvbmZfdHgoJmxvY2FsLT5odywgcXVldWUsIHBhcmFtcyk7Ci0JcmV0dXJuIC1FT1BOT1RTVVBQOworCQlyZXQgPSBsb2NhbC0+b3BzLT5jb25mX3R4KCZsb2NhbC0+aHcsIHF1ZXVlLCBwYXJhbXMpOworCXRyYWNlX2Rydl9jb25mX3R4KGxvY2FsLCBxdWV1ZSwgcGFyYW1zLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCiB7Ci0JcmV0dXJuIGxvY2FsLT5vcHMtPmdldF90eF9zdGF0cygmbG9jYWwtPmh3LCBzdGF0cyk7CisJaW50IHJldCA9IGxvY2FsLT5vcHMtPmdldF90eF9zdGF0cygmbG9jYWwtPmh3LCBzdGF0cyk7CisJdHJhY2VfZHJ2X2dldF90eF9zdGF0cyhsb2NhbCwgc3RhdHMsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB1NjQgZHJ2X2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CisJdTY0IHJldCA9IC0xVUxMOwogCWlmIChsb2NhbC0+b3BzLT5nZXRfdHNmKQotCQlyZXR1cm4gbG9jYWwtPm9wcy0+Z2V0X3RzZigmbG9jYWwtPmh3KTsKLQlyZXR1cm4gLTFVTEw7CisJCXJldCA9IGxvY2FsLT5vcHMtPmdldF90c2YoJmxvY2FsLT5odyk7CisJdHJhY2VfZHJ2X2dldF90c2YobG9jYWwsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9zZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1NjQgdHNmKQogewogCWlmIChsb2NhbC0+b3BzLT5zZXRfdHNmKQogCQlsb2NhbC0+b3BzLT5zZXRfdHNmKCZsb2NhbC0+aHcsIHRzZik7CisJdHJhY2VfZHJ2X3NldF90c2YobG9jYWwsIHRzZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCWlmIChsb2NhbC0+b3BzLT5yZXNldF90c2YpCiAJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZigmbG9jYWwtPmh3KTsKKwl0cmFjZV9kcnZfcmVzZXRfdHNmKGxvY2FsKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X3R4X2xhc3RfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogeworCWludCByZXQgPSAxOwogCWlmIChsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbikKLQkJcmV0dXJuIGxvY2FsLT5vcHMtPnR4X2xhc3RfYmVhY29uKCZsb2NhbC0+aHcpOwotCXJldHVybiAxOworCQlyZXQgPSBsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbigmbG9jYWwtPmh3KTsKKwl0cmFjZV9kcnZfdHhfbGFzdF9iZWFjb24obG9jYWwsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKQEAgLTE3NiwxMCArMjQzLDEyIEBACiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwKIAkJCQkgICB1MTYgKnNzbikKIHsKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CiAJaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikKLQkJcmV0dXJuIGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbigmbG9jYWwtPmh3LCBhY3Rpb24sCi0JCQkJCQlzdGEsIHRpZCwgc3NuKTsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbigmbG9jYWwtPmh3LCBhY3Rpb24sCisJCQkJCSAgICAgICBzdGEsIHRpZCwgc3NuKTsKKwl0cmFjZV9kcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCBhY3Rpb24sIHN0YSwgdGlkLCBzc24sIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmMgYi9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkODcxMQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuYwpAQCAtMCwwICsxLDkgQEAKKy8qIGJ1ZyBpbiB0cmFjZXBvaW50LmgsIGl0IHNob3VsZCBpbmNsdWRlIHRoaXMgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworLyogc3BhcnNlIGlzbid0IHRvbyBoYXBweSB3aXRoIGFsbCBtYWNyb3MuLi4gKi8KKyNpZm5kZWYgX19DSEVDS0VSX18KKyNpbmNsdWRlICJkcml2ZXItb3BzLmgiCisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlICJkcml2ZXItdHJhY2UuaCIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oIGIvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YjkwNTEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmgKQEAgLTAsMCArMSw2NzIgQEAKKyNpZiAhZGVmaW5lZChfX01BQzgwMjExX0RSSVZFUl9UUkFDRSkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKKyNkZWZpbmUgX19NQUM4MDIxMV9EUklWRVJfVFJBQ0UKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorCisjaWYgIWRlZmluZWQoQ09ORklHX01BQzgwMjExX0RSSVZFUl9BUElfVFJBQ0VSKSB8fCBkZWZpbmVkKF9fQ0hFQ0tFUl9fKQorI3VuZGVmIFRSQUNFX0VWRU5UCisjZGVmaW5lIFRSQUNFX0VWRU5UKG5hbWUsIHByb3RvLCAuLi4pIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV8gIyMgbmFtZShwcm90bykge30KKyNlbmRpZgorCisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBtYWM4MDIxMQorCisjZGVmaW5lIE1BWE5BTUUJCTMyCisjZGVmaW5lIExPQ0FMX0VOVFJZCV9fYXJyYXkoY2hhciwgd2lwaHlfbmFtZSwgMzIpCisjZGVmaW5lIExPQ0FMX0FTU0lHTglzdHJsY3B5KF9fZW50cnktPndpcGh5X25hbWUsIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgTUFYTkFNRSkKKyNkZWZpbmUgTE9DQUxfUFJfRk1UCSIlcyIKKyNkZWZpbmUgTE9DQUxfUFJfQVJHCV9fZW50cnktPndpcGh5X25hbWUKKworI2RlZmluZSBTVEFfRU5UUlkJX19hcnJheShjaGFyLCBzdGFfYWRkciwgRVRIX0FMRU4pCisjZGVmaW5lIFNUQV9BU1NJR04JKHN0YSA/IG1lbWNweShfX2VudHJ5LT5zdGFfYWRkciwgc3RhLT5hZGRyLCBFVEhfQUxFTikgOiBtZW1zZXQoX19lbnRyeS0+c3RhX2FkZHIsIDAsIEVUSF9BTEVOKSkKKyNkZWZpbmUgU1RBX1BSX0ZNVAkiIHN0YTolcE0iCisjZGVmaW5lIFNUQV9QUl9BUkcJX19lbnRyeS0+c3RhX2FkZHIKKworI2RlZmluZSBWSUZfRU5UUlkJX19maWVsZChlbnVtIG5sODAyMTFfaWZ0eXBlLCB2aWZfdHlwZSkgX19maWVsZCh2b2lkICosIHZpZikKKyNkZWZpbmUgVklGX0FTU0lHTglfX2VudHJ5LT52aWZfdHlwZSA9IHZpZiA/IHZpZi0+dHlwZSA6IDA7IF9fZW50cnktPnZpZiA9IHZpZgorI2RlZmluZSBWSUZfUFJfRk1UCSIgdmlmOiVwKCVkKSIKKyNkZWZpbmUgVklGX1BSX0FSRwlfX2VudHJ5LT52aWYsIF9fZW50cnktPnZpZl90eXBlCisKK1RSQUNFX0VWRU5UKGRydl9zdGFydCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgaW50IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCByZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJX19maWVsZChpbnQsIHJldCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJX19lbnRyeS0+cmV0ID0gcmV0OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCwgTE9DQUxfUFJfQVJHCisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3N0b3AsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpLAorCisJVFBfQVJHUyhsb2NhbCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCwgTE9DQUxfUFJfQVJHCisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X2FkZF9pbnRlcmZhY2UsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBjb25zdCB1OCAqYWRkciwKKwkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSBpbnQgcmV0KSwKKworCVRQX0FSR1MobG9jYWwsIGFkZHIsIHZpZiwgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCVZJRl9FTlRSWQorCQlfX2FycmF5KGNoYXIsIGFkZHIsIDYpCisJCV9fZmllbGQoaW50LCByZXQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCVZJRl9BU1NJR047CisJCW1lbWNweShfX2VudHJ5LT5hZGRyLCBhZGRyLCA2KTsKKwkJX19lbnRyeS0+cmV0ID0gcmV0OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAgVklGX1BSX0ZNVCAiIGFkZHI6JXBNIHJldDolZCIsCisJCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRywgX19lbnRyeS0+YWRkciwgX19lbnRyeS0+cmV0CisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3JlbW92ZV9pbnRlcmZhY2UsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBjb25zdCB1OCAqYWRkciwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiksCisKKwlUUF9BUkdTKGxvY2FsLCBhZGRyLCB2aWYpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJVklGX0VOVFJZCisJCV9fYXJyYXkoY2hhciwgYWRkciwgNikKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJVklGX0FTU0lHTjsKKwkJbWVtY3B5KF9fZW50cnktPmFkZHIsIGFkZHIsIDYpOworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAgVklGX1BSX0ZNVCAiIGFkZHI6JXBNIiwKKwkJTE9DQUxfUFJfQVJHLCBWSUZfUFJfQVJHLCBfX2VudHJ5LT5hZGRyCisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X2NvbmZpZywKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJIHUzMiBjaGFuZ2VkLAorCQkgaW50IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCBjaGFuZ2VkLCByZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJX19maWVsZCh1MzIsIGNoYW5nZWQpCisJCV9fZmllbGQoaW50LCByZXQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPmNoYW5nZWQgPSBjaGFuZ2VkOworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgY2g6JSN4IHJldDolZCIsCisJCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+Y2hhbmdlZCwgX19lbnRyeS0+cmV0CisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X2Jzc19pbmZvX2NoYW5nZWQsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKKwkJIHUzMiBjaGFuZ2VkKSwKKworCVRQX0FSR1MobG9jYWwsIHZpZiwgaW5mbywgY2hhbmdlZCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlWSUZfRU5UUlkKKwkJX19maWVsZChib29sLCBhc3NvYykKKwkJX19maWVsZCh1MTYsIGFpZCkKKwkJX19maWVsZChib29sLCBjdHMpCisJCV9fZmllbGQoYm9vbCwgc2hvcnRwcmUpCisJCV9fZmllbGQoYm9vbCwgc2hvcnRzbG90KQorCQlfX2ZpZWxkKHU4LCBkdGltcGVyKQorCQlfX2ZpZWxkKHUxNiwgYmNuaW50KQorCQlfX2ZpZWxkKHUxNiwgYXNzb2NfY2FwKQorCQlfX2ZpZWxkKHU2NCwgdGltZXN0YW1wKQorCQlfX2ZpZWxkKHUzMiwgYmFzaWNfcmF0ZXMpCisJCV9fZmllbGQodTMyLCBjaGFuZ2VkKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlWSUZfQVNTSUdOOworCQlfX2VudHJ5LT5jaGFuZ2VkID0gY2hhbmdlZDsKKwkJX19lbnRyeS0+YWlkID0gaW5mby0+YWlkOworCQlfX2VudHJ5LT5hc3NvYyA9IGluZm8tPmFzc29jOworCQlfX2VudHJ5LT5zaG9ydHByZSA9IGluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZTsKKwkJX19lbnRyeS0+Y3RzID0gaW5mby0+dXNlX2N0c19wcm90OworCQlfX2VudHJ5LT5zaG9ydHNsb3QgPSBpbmZvLT51c2Vfc2hvcnRfc2xvdDsKKwkJX19lbnRyeS0+ZHRpbXBlciA9IGluZm8tPmR0aW1fcGVyaW9kOworCQlfX2VudHJ5LT5iY25pbnQgPSBpbmZvLT5iZWFjb25faW50OworCQlfX2VudHJ5LT5hc3NvY19jYXAgPSBpbmZvLT5hc3NvY19jYXBhYmlsaXR5OworCQlfX2VudHJ5LT50aW1lc3RhbXAgPSBpbmZvLT50aW1lc3RhbXA7CisJCV9fZW50cnktPmJhc2ljX3JhdGVzID0gaW5mby0+YmFzaWNfcmF0ZXM7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICBWSUZfUFJfRk1UICIgY2hhbmdlZDolI3giLAorCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIF9fZW50cnktPmNoYW5nZWQKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfcHJlcGFyZV9tdWx0aWNhc3QsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBtY19jb3VudCwgdTY0IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCBtY19jb3VudCwgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQoaW50LCBtY19jb3VudCkKKwkJX19maWVsZCh1NjQsIHJldCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJX19lbnRyeS0+bWNfY291bnQgPSBtY19jb3VudDsKKwkJX19lbnRyeS0+cmV0ID0gcmV0OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAiIHByZXBhcmUgbWMgKCVkKTogJWxseCIsCisJCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+bWNfY291bnQsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpIF9fZW50cnktPnJldAorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9jb25maWd1cmVfZmlsdGVyLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCisJCSB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkgdTY0IG11bHRpY2FzdCksCisKKwlUUF9BUkdTKGxvY2FsLCBjaGFuZ2VkX2ZsYWdzLCB0b3RhbF9mbGFncywgbXVsdGljYXN0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQodW5zaWduZWQgaW50LCBjaGFuZ2VkKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgdG90YWwpCisJCV9fZmllbGQodTY0LCBtdWx0aWNhc3QpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPmNoYW5nZWQgPSBjaGFuZ2VkX2ZsYWdzOworCQlfX2VudHJ5LT50b3RhbCA9ICp0b3RhbF9mbGFnczsKKwkJX19lbnRyeS0+bXVsdGljYXN0ID0gbXVsdGljYXN0OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAiIGNoYW5nZWQ6JSN4IHRvdGFsOiUjeCIsCisJCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+Y2hhbmdlZCwgX19lbnRyeS0+dG90YWwKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfc2V0X3RpbSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgc2V0LCBpbnQgcmV0KSwKKworCVRQX0FSR1MobG9jYWwsIHN0YSwgc2V0LCByZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJU1RBX0VOVFJZCisJCV9fZmllbGQoYm9vbCwgc2V0KQorCQlfX2ZpZWxkKGludCwgcmV0KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlTVEFfQVNTSUdOOworCQlfX2VudHJ5LT5zZXQgPSBzZXQ7CisJCV9fZW50cnktPnJldCA9IHJldDsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgU1RBX1BSX0ZNVCAiIHNldDolZCByZXQ6JWQiLAorCQlMT0NBTF9QUl9BUkcsIFNUQV9QUl9GTVQsIF9fZW50cnktPnNldCwgX19lbnRyeS0+cmV0CisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3NldF9rZXksCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBlbnVtIHNldF9rZXlfY21kIGNtZCwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksIGludCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgY21kLCB2aWYsIHN0YSwga2V5LCByZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJVklGX0VOVFJZCisJCVNUQV9FTlRSWQorCQlfX2ZpZWxkKGVudW0gaWVlZTgwMjExX2tleV9hbGcsIGFsZykKKwkJX19maWVsZCh1OCwgaHdfa2V5X2lkeCkKKwkJX19maWVsZCh1OCwgZmxhZ3MpCisJCV9fZmllbGQoczgsIGtleWlkeCkKKwkJX19maWVsZChpbnQsIHJldCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJVklGX0FTU0lHTjsKKwkJU1RBX0FTU0lHTjsKKwkJX19lbnRyeS0+YWxnID0ga2V5LT5hbGc7CisJCV9fZW50cnktPmZsYWdzID0ga2V5LT5mbGFnczsKKwkJX19lbnRyeS0+a2V5aWR4ID0ga2V5LT5rZXlpZHg7CisJCV9fZW50cnktPmh3X2tleV9pZHggPSBrZXktPmh3X2tleV9pZHg7CisJCV9fZW50cnktPnJldCA9IHJldDsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIFZJRl9QUl9GTVQgIFNUQV9QUl9GTVQgIiByZXQ6JWQiLAorCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIFNUQV9QUl9BUkcsIF9fZW50cnktPnJldAorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl91cGRhdGVfdGtpcF9rZXksCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpjb25mLAorCQkgY29uc3QgdTggKmFkZHJlc3MsIHUzMiBpdjMyKSwKKworCVRQX0FSR1MobG9jYWwsIGNvbmYsIGFkZHJlc3MsIGl2MzIpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJX19hcnJheSh1OCwgYWRkciwgNikKKwkJX19maWVsZCh1MzIsIGl2MzIpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCW1lbWNweShfX2VudHJ5LT5hZGRyLCBhZGRyZXNzLCA2KTsKKwkJX19lbnRyeS0+aXYzMiA9IGl2MzI7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgYWRkcjolcE0gaXYzMjolI3giLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPmFkZHIsIF9fZW50cnktPml2MzIKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfaHdfc2NhbiwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSwgaW50IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCByZXEsIHJldCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKGludCwgcmV0KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgcmV0OiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT5yZXQKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfc3dfc2Nhbl9zdGFydCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCksCisKKwlUUF9BUkdTKGxvY2FsKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1ULCBMT0NBTF9QUl9BUkcKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfc3dfc2Nhbl9jb21wbGV0ZSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCksCisKKwlUUF9BUkdTKGxvY2FsKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1ULCBMT0NBTF9QUl9BUkcKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfZ2V0X3N0YXRzLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzLAorCQkgaW50IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCBzdGF0cywgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQoaW50LCByZXQpCisJCV9fZmllbGQodW5zaWduZWQgaW50LCBhY2tmYWlsKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgcnRzZmFpbCkKKwkJX19maWVsZCh1bnNpZ25lZCBpbnQsIGZjc2VycikKKwkJX19maWVsZCh1bnNpZ25lZCBpbnQsIHJ0c3N1Y2MpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPnJldCA9IHJldDsKKwkJX19lbnRyeS0+YWNrZmFpbCA9IHN0YXRzLT5kb3QxMUFDS0ZhaWx1cmVDb3VudDsKKwkJX19lbnRyeS0+cnRzZmFpbCA9IHN0YXRzLT5kb3QxMVJUU0ZhaWx1cmVDb3VudDsKKwkJX19lbnRyeS0+ZmNzZXJyID0gc3RhdHMtPmRvdDExRkNTRXJyb3JDb3VudDsKKwkJX19lbnRyeS0+cnRzc3VjYyA9IHN0YXRzLT5kb3QxMVJUU1N1Y2Nlc3NDb3VudDsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIiByZXQ6JWQiLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnJldAorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9nZXRfdGtpcF9zZXEsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSB1OCBod19rZXlfaWR4LCB1MzIgKml2MzIsIHUxNiAqaXYxNiksCisKKwlUUF9BUkdTKGxvY2FsLCBod19rZXlfaWR4LCBpdjMyLCBpdjE2KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQodTgsIGh3X2tleV9pZHgpCisJCV9fZmllbGQodTMyLCBpdjMyKQorCQlfX2ZpZWxkKHUxNiwgaXYxNikKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJX19lbnRyeS0+aHdfa2V5X2lkeCA9IGh3X2tleV9pZHg7CisJCV9fZW50cnktPml2MzIgPSAqaXYzMjsKKwkJX19lbnRyeS0+aXYxNiA9ICppdjE2OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCwgTE9DQUxfUFJfQVJHCisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3NldF9ydHNfdGhyZXNob2xkLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1MzIgdmFsdWUsIGludCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgdmFsdWUsIHJldCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKHUzMiwgdmFsdWUpCisJCV9fZmllbGQoaW50LCByZXQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPnJldCA9IHJldDsKKwkJX19lbnRyeS0+dmFsdWUgPSB2YWx1ZTsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIiB2YWx1ZTolZCByZXQ6JWQiLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnZhbHVlLCBfX2VudHJ5LT5yZXQKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfc3RhX25vdGlmeSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpLAorCisJVFBfQVJHUyhsb2NhbCwgdmlmLCBjbWQsIHN0YSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlWSUZfRU5UUlkKKwkJU1RBX0VOVFJZCisJCV9fZmllbGQodTMyLCBjbWQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCVZJRl9BU1NJR047CisJCVNUQV9BU1NJR047CisJCV9fZW50cnktPmNtZCA9IGNtZDsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIFZJRl9QUl9GTVQgIFNUQV9QUl9GTVQgIiBjbWQ6JWQiLAorCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIFNUQV9QUl9BUkcsIF9fZW50cnktPmNtZAorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9jb25mX3R4LAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1MTYgcXVldWUsCisJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zLAorCQkgaW50IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCBxdWV1ZSwgcGFyYW1zLCByZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJX19maWVsZCh1MTYsIHF1ZXVlKQorCQlfX2ZpZWxkKHUxNiwgdHhvcCkKKwkJX19maWVsZCh1MTYsIGN3X21pbikKKwkJX19maWVsZCh1MTYsIGN3X21heCkKKwkJX19maWVsZCh1OCwgYWlmcykKKwkJX19maWVsZChpbnQsIHJldCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJX19lbnRyeS0+cXVldWUgPSBxdWV1ZTsKKwkJX19lbnRyeS0+cmV0ID0gcmV0OworCQlfX2VudHJ5LT50eG9wID0gcGFyYW1zLT50eG9wOworCQlfX2VudHJ5LT5jd19tYXggPSBwYXJhbXMtPmN3X21heDsKKwkJX19lbnRyeS0+Y3dfbWluID0gcGFyYW1zLT5jd19taW47CisJCV9fZW50cnktPmFpZnMgPSBwYXJhbXMtPmFpZnM7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgcXVldWU6JWQgcmV0OiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT5xdWV1ZSwgX19lbnRyeS0+cmV0CisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X2dldF90eF9zdGF0cywKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzLAorCQkgaW50IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCBzdGF0cywgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQoaW50LCByZXQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPnJldCA9IHJldDsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIiByZXQ6JWQiLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnJldAorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9nZXRfdHNmLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1NjQgcmV0KSwKKworCVRQX0FSR1MobG9jYWwsIHJldCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKHU2NCwgcmV0KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgcmV0OiVsbHUiLAorCQlMT0NBTF9QUl9BUkcsICh1bnNpZ25lZCBsb25nIGxvbmcpX19lbnRyeS0+cmV0CisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3NldF90c2YsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU2NCB0c2YpLAorCisJVFBfQVJHUyhsb2NhbCwgdHNmKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQodTY0LCB0c2YpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPnRzZiA9IHRzZjsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIiB0c2Y6JWxsdSIsCisJCUxPQ0FMX1BSX0FSRywgKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT50c2YKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfcmVzZXRfdHNmLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKSwKKworCVRQX0FSR1MobG9jYWwpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQsIExPQ0FMX1BSX0FSRworCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl90eF9sYXN0X2JlYWNvbiwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgaW50IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCByZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJX19maWVsZChpbnQsIHJldCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJX19lbnRyeS0+cmV0ID0gcmV0OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAiIHJldDolZCIsCisJCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+cmV0CisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X2FtcGR1X2FjdGlvbiwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsCisJCSB1MTYgKnNzbiwgaW50IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCBhY3Rpb24sIHN0YSwgdGlkLCBzc24sIHJldCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlTVEFfRU5UUlkKKwkJX19maWVsZCh1MzIsIGFjdGlvbikKKwkJX19maWVsZCh1MTYsIHRpZCkKKwkJX19maWVsZCh1MTYsIHNzbikKKwkJX19maWVsZChpbnQsIHJldCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJU1RBX0FTU0lHTjsKKwkJX19lbnRyeS0+cmV0ID0gcmV0OworCQlfX2VudHJ5LT5hY3Rpb24gPSBhY3Rpb247CisJCV9fZW50cnktPnRpZCA9IHRpZDsKKwkJX19lbnRyeS0+c3NuID0gKnNzbjsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIFNUQV9QUl9GTVQgIiBhY3Rpb246JWQgdGlkOiVkIHJldDolZCIsCisJCUxPQ0FMX1BSX0FSRywgU1RBX1BSX0FSRywgX19lbnRyeS0+YWN0aW9uLCBfX2VudHJ5LT50aWQsIF9fZW50cnktPnJldAorCSkKKyk7CisjZW5kaWYgLyogIV9fTUFDODAyMTFfRFJJVkVSX1RSQUNFIHx8IFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEICovCisKKyN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEgKKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRIIC4KKyN1bmRlZiBUUkFDRV9JTkNMVURFX0ZJTEUKKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIGRyaXZlci10cmFjZQorI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2V2ZW50LmMgYi9uZXQvbWFjODAyMTEvZXZlbnQuYwppbmRleCBmMjg4ZDAxLi4wMWFlNzU5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZXZlbnQuYworKysgYi9uZXQvbWFjODAyMTEvZXZlbnQuYwpAQCAtNyw4ICs3LDcgQEAKICAqCiAgKiBtYWM4MDIxMSAtIGV2ZW50cwogICovCi0KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCiAKIC8qCkBAIC0xNywyNiArMTYsMTIgQEAKICAqIGRyaXZlciBvciBpcyBzdGlsbCBpbiB0aGUgZnJhbWUpLCBpdCBzaG91bGQgcHJvdmlkZSB0aGF0IGluZm9ybWF0aW9uLgogICovCiB2b2lkIG1hYzgwMjExX2V2X21pY2hhZWxfbWljX2ZhaWx1cmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBrZXlpZHgsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCBjb25zdCB1OCAqdHNjKQorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgY29uc3QgdTggKnRzYywKKwkJCQkgICAgIGdmcF90IGdmcCkKIHsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0JY2hhciAqYnVmID0ga21hbGxvYygxMjgsIEdGUF9BVE9NSUMpOwotCi0JaWYgKGJ1ZikgewotCQkvKiBUT0RPOiBuZWVkZWQgcGFyYW1ldGVyczogY291bnQsIGtleSB0eXBlLCBUU0MgKi8KLQkJc3ByaW50ZihidWYsICJNTE1FLU1JQ0hBRUxNSUNGQUlMVVJFLmluZGljYXRpb24oIgotCQkJImtleWlkPSVkICVzY2FzdCBhZGRyPSVwTSkiLAotCQkJa2V5aWR4LCBoZHItPmFkZHIxWzBdICYgMHgwMSA/ICJicm9hZCIgOiAidW5pIiwKLQkJCWhkci0+YWRkcjIpOwotCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7Ci0JCXdycXUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJd2lyZWxlc3Nfc2VuZF9ldmVudChzZGF0YS0+ZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgYnVmKTsKLQkJa2ZyZWUoYnVmKTsKLQl9Ci0KIAljZmc4MDIxMV9taWNoYWVsX21pY19mYWlsdXJlKHNkYXRhLT5kZXYsIGhkci0+YWRkcjIsCiAJCQkJICAgICAoaGRyLT5hZGRyMVswXSAmIDB4MDEpID8KIAkJCQkgICAgIE5MODAyMTFfS0VZVFlQRV9HUk9VUCA6CiAJCQkJICAgICBOTDgwMjExX0tFWVRZUEVfUEFJUldJU0UsCi0JCQkJICAgICBrZXlpZHgsIHRzYyk7CisJCQkJICAgICBrZXlpZHgsIHRzYywgZ2ZwKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCmluZGV4IDBiMzAyNzcuLjkyMGVjODcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pYnNzLmMKKysrIGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtNTcsNyArNTcsNyBAQAogCSAqLwogCWlmIChhdXRoX2FsZyA9PSBXTEFOX0FVVEhfT1BFTiAmJiBhdXRoX3RyYW5zYWN0aW9uID09IDEpCiAJCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIDIsIFdMQU5fQVVUSF9PUEVOLCBOVUxMLCAwLAotCQkJCSAgICBzZGF0YS0+dS5pYnNzLmJzc2lkLCAwKTsKKwkJCQkgICAgc2RhdGEtPnUuaWJzcy5ic3NpZCwgTlVMTCwgMCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCkBAIC00OTQsNyArNDk0LDcgQEAKIAogCWNhcGFiaWxpdHkgPSBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKIAotCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkpCisJaWYgKGlmaWJzcy0+cHJpdmFjeSkKIAkJY2FwYWJpbGl0eSB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKIAllbHNlCiAJCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gMDsKQEAgLTUyNCw5ICs1MjQsOCBAQAogCQlyZXR1cm47CiAKIAljYXBhYmlsaXR5ID0gV0xBTl9DQVBBQklMSVRZX0lCU1M7Ci0JaWYgKHNkYXRhLT5kZWZhdWx0X2tleSkKKwlpZiAoaWZpYnNzLT5wcml2YWN5KQogCQljYXBhYmlsaXR5IHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwotCiAJaWYgKGlmaWJzcy0+Zml4ZWRfYnNzaWQpCiAJCWJzc2lkID0gaWZpYnNzLT5ic3NpZDsKIAlpZiAoaWZpYnNzLT5maXhlZF9jaGFubmVsKQpAQCAtNzA1LDcgKzcwNCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwogCXUxNiBmYzsKIAotCXJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItPmNiOworCXJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKIAlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOwogCkBAIC03NDMsNyArNzQyLDcgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCiAJCXJldHVybjsKIAotCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKQorCWlmIChsb2NhbC0+c2Nhbm5pbmcpCiAJCXJldHVybjsKIAogCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpCkBAIC03ODIsNyArNzgxLDcgQEAKIAl9CiAKIAlzZXRfYml0KElFRUU4MDIxMV9JQlNTX1JFUV9SVU4sICZpZmlic3MtPnJlcXVlc3QpOwotCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmaWJzcy0+d29yayk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmlmaWJzcy0+d29yayk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTgzNiw4ICs4MzUsNyBAQAogfQogCiBpZWVlODAyMTFfcnhfcmVzdWx0Ci1pZWVlODAyMTFfaWJzc19yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKK2llZWU4MDIxMV9pYnNzX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwpAQCAtODUyLDExICs4NTAsMTAgQEAKIAlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKLQkJbWVtY3B5KHNrYi0+Y2IsIHJ4X3N0YXR1cywgc2l6ZW9mKCpyeF9zdGF0dXMpKTsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKIAkJc2tiX3F1ZXVlX3RhaWwoJnNkYXRhLT51Lmlic3Muc2tiX3F1ZXVlLCBza2IpOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZzZGF0YS0+dS5pYnNzLndvcmspOworCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmc2RhdGEtPnUuaWJzcy53b3JrKTsKIAkJcmV0dXJuIFJYX1FVRVVFRDsKIAl9CiAKQEAgLTg3NCw2ICs4NzEsOCBAQAogCX0gZWxzZQogCQlzZGF0YS0+dS5pYnNzLmZpeGVkX2Jzc2lkID0gZmFsc2U7CiAKKwlzZGF0YS0+dS5pYnNzLnByaXZhY3kgPSBwYXJhbXMtPnByaXZhY3k7CisKIAlzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQgPSBwYXJhbXMtPmJlYWNvbl9pbnRlcnZhbDsKIAogCXNkYXRhLT51Lmlic3MuY2hhbm5lbCA9IHBhcmFtcy0+Y2hhbm5lbDsKQEAgLTkxMyw3ICs5MTIsNyBAQAogCWllZWU4MDIxMV9yZWNhbGNfaWRsZShzZGF0YS0+bG9jYWwpOwogCiAJc2V0X2JpdChJRUVFODAyMTFfSUJTU19SRVFfUlVOLCAmc2RhdGEtPnUuaWJzcy5yZXF1ZXN0KTsKLQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUuaWJzcy53b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmc2RhdGEtPmxvY2FsLT5odywgJnNkYXRhLT51Lmlic3Mud29yayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggNjhlYjUwNS4uNTg4MDA1YzggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgotI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSAia2V5LmgiCiAjaW5jbHVkZSAic3RhX2luZm8uaCIKQEAgLTIxMyw3ICsyMTIsOSBAQAogfTsKIAogc3RydWN0IG1lc2hfc3RhdHMgewotCV9fdTMyIGZ3ZGVkX2ZyYW1lczsJCS8qIE1lc2ggZm9yd2FyZGVkIGZyYW1lcyAqLworCV9fdTMyIGZ3ZGVkX21jYXN0OwkJLyogTWVzaCBmb3J3YXJkZWQgbXVsdGljYXN0IGZyYW1lcyAqLworCV9fdTMyIGZ3ZGVkX3VuaWNhc3Q7CQkvKiBNZXNoIGZvcndhcmRlZCB1bmljYXN0IGZyYW1lcyAqLworCV9fdTMyIGZ3ZGVkX2ZyYW1lczsJCS8qIE1lc2ggdG90YWwgZm9yd2FyZGVkIGZyYW1lcyAqLwogCV9fdTMyIGRyb3BwZWRfZnJhbWVzX3R0bDsJLyogTm90IHRyYW5zbWl0dGVkIHNpbmNlIG1lc2hfdHRsID09IDAqLwogCV9fdTMyIGRyb3BwZWRfZnJhbWVzX25vX3JvdXRlOwkvKiBOb3QgdHJhbnNtaXR0ZWQsIG5vIHJvdXRlIGZvdW5kICovCiAJYXRvbWljX3QgZXN0YWJfcGxpbmtzOwpAQCAtMjI3LDg2ICsyMjgsODEgQEAKIAl1OCBmbGFnczsKIH07CiAKLS8qIGZsYWdzIHVzZWQgaW4gc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkLmZsYWdzICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfU1NJRF9TRVQJCUJJVCgwKQotI2RlZmluZSBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVAkJQklUKDEpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQJQklUKDIpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRAlCSVQoMykKLSNkZWZpbmUgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVECUJJVCg0KQotI2RlZmluZSBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwJQklUKDUpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfQ1JFQVRFX0lCU1MJQklUKDYpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUCUJJVCg3KQotI2RlZmluZSBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVECUJJVCg4KQotLyogaG9sZSBhdCA5LCBwbGVhc2UgcmUtdXNlICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTAlCSVQoMTApCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwJQklUKDExKQotI2RlZmluZSBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwJQklUKDEyKQotI2RlZmluZSBJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRAlCSVQoMTMpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRAlCSVQoMTQpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVECUJJVCgxNSkKLSNkZWZpbmUgSUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRAlCSVQoMTYpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfRVhUX1NNRQkJQklUKDE3KQotLyogZmxhZ3MgZm9yIE1MTUUgcmVxdWVzdCAqLwotI2RlZmluZSBJRUVFODAyMTFfU1RBX1JFUV9TQ0FOIDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUQV9SRVFfQVVUSCAxCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX1JVTiAgMgorZW51bSBpZWVlODAyMTFfbWdkX3N0YXRlIHsKKwlJRUVFODAyMTFfTUdEX1NUQVRFX0lETEUsCisJSUVFRTgwMjExX01HRF9TVEFURV9QUk9CRSwKKwlJRUVFODAyMTFfTUdEX1NUQVRFX0FVVEgsCisJSUVFRTgwMjExX01HRF9TVEFURV9BU1NPQywKK307CiAKLS8qIGJpdGZpZWxkIG9mIGFsbG93ZWQgYXV0aCBhbGdzICovCi0jZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIEJJVCgwKQotI2RlZmluZSBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSBCSVQoMSkKLSNkZWZpbmUgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVAgQklUKDIpCi0jZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19GVCBCSVQoMykKK3N0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOworCWludCBpZV9sZW47CisJdTggcHJldl9ic3NpZFtFVEhfQUxFTl07CisJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKKwl1OCBzc2lkX2xlbjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJZW51bSBpZWVlODAyMTFfbWdkX3N0YXRlIHN0YXRlOworCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbjsKKworCWludCB0cmllczsKKworCXU4IGtleVtXTEFOX0tFWV9MRU5fV0VQMTA0XTsKKwl1OCBrZXlfbGVuLCBrZXlfaWR4OworCisJLyogbXVzdCBiZSBsYXN0ICovCisJdTggaWVbMF07IC8qIGZvciBhdXRoIG9yIGFzc29jIGZyYW1lLCBub3QgcHJvYmUgKi8KK307CisKKy8qIGZsYWdzIHVzZWQgaW4gc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkLmZsYWdzICovCitlbnVtIGllZWU4MDIxMV9zdGFfZmxhZ3MgeworCUlFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwJPSBCSVQoMCksCisJSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwJPSBCSVQoMSksCisJSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQJPSBCSVQoMiksCisJSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRAk9IEJJVCgzKSwKKwlJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOCT0gQklUKDQpLAorCUlFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVECT0gQklUKDUpLAorCUlFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQJPSBCSVQoNiksCit9OworCisvKiBmbGFncyBmb3IgTUxNRSByZXF1ZXN0ICovCitlbnVtIGllZWU4MDIxMV9zdGFfcmVxdWVzdCB7CisJSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwKK307CiAKIHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCB7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgY29ubl9tb25fdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgYmNuX21vbl90aW1lcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBjaHN3aXRjaF90aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbW9uaXRvcl93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBjaHN3aXRjaF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBiZWFjb25fbG9zc193b3JrOwogCi0JdTggYnNzaWRbRVRIX0FMRU5dLCBwcmV2X2Jzc2lkW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBsb25nIHByb2JlX3RpbWVvdXQ7CisJaW50IHByb2JlX3NlbmRfY291bnQ7CiAKLQl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCXNpemVfdCBzc2lkX2xlbjsKKwlzdHJ1Y3QgbXV0ZXggbXR4OworCXN0cnVjdCBpZWVlODAyMTFfYnNzICphc3NvY2lhdGVkOworCXN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKm9sZF9hc3NvY2lhdGVfd29yazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHdvcmtfbGlzdDsKIAotCWVudW0gewotCQlJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQsCi0JCUlFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkUsCi0JCUlFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUsCi0JCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUsCi0JCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVELAotCX0gc3RhdGU7CisJdTggYnNzaWRbRVRIX0FMRU5dOwogCiAJdTE2IGFpZDsKLQl1MTYgYXBfY2FwYWIsIGNhcGFiOwotCXU4ICpleHRyYV9pZTsgLyogdG8gYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiBBc3NvY1JlcSAqLwotCXNpemVfdCBleHRyYV9pZV9sZW47Ci0KLQkvKiBUaGUgbGFzdCBBc3NvY1JlcS9SZXNwIElFcyAqLwotCXU4ICphc3NvY3JlcV9pZXMsICphc3NvY3Jlc3BfaWVzOwotCXNpemVfdCBhc3NvY3JlcV9pZXNfbGVuLCBhc3NvY3Jlc3BfaWVzX2xlbjsKKwl1MTYgY2FwYWI7CiAKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9xdWV1ZTsKIAotCWludCBhc3NvY19zY2FuX3RyaWVzOyAvKiBudW1iZXIgb2Ygc2NhbnMgZG9uZSBwcmUtYXNzb2NpYXRpb24gKi8KLQlpbnQgZGlyZWN0X3Byb2JlX3RyaWVzOyAvKiByZXRyaWVzIGZvciBkaXJlY3QgcHJvYmVzICovCi0JaW50IGF1dGhfdHJpZXM7IC8qIHJldHJpZXMgZm9yIGF1dGggcmVxICovCi0JaW50IGFzc29jX3RyaWVzOyAvKiByZXRyaWVzIGZvciBhc3NvYyByZXEgKi8KLQogCXVuc2lnbmVkIGxvbmcgdGltZXJzX3J1bm5pbmc7IC8qIHVzZWQgZm9yIHF1aWVzY2UvcmVzdGFydCAqLwogCWJvb2wgcG93ZXJzYXZlOyAvKiBwb3dlcnNhdmUgcmVxdWVzdGVkIGZvciB0aGlzIGlmYWNlICovCiAKIAl1bnNpZ25lZCBsb25nIHJlcXVlc3Q7CiAKLQl1bnNpZ25lZCBsb25nIGxhc3RfcHJvYmU7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X2JlYWNvbjsKLQogCXVuc2lnbmVkIGludCBmbGFnczsKIAotCXVuc2lnbmVkIGludCBhdXRoX2FsZ3M7IC8qIGJpdGZpZWxkIG9mIGFsbG93ZWQgYXV0aCBhbGdzICovCi0JaW50IGF1dGhfYWxnOyAvKiBjdXJyZW50bHkgdXNlZCBJRUVFIDgwMi4xMSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gKi8KLQlpbnQgYXV0aF90cmFuc2FjdGlvbjsKLQogCXUzMiBiZWFjb25fY3JjOwogCiAJZW51bSB7CkBAIC0zMTYsMTAgKzMxMiw2IEBACiAJfSBtZnA7IC8qIG1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbiAqLwogCiAJaW50IHdtbV9sYXN0X3BhcmFtX3NldDsKLQotCS8qIEV4dHJhIElFIGRhdGEgZm9yIG1hbmFnZW1lbnQgZnJhbWVzICovCi0JdTggKnNtZV9hdXRoX2llOwotCXNpemVfdCBzbWVfYXV0aF9pZV9sZW47CiB9OwogCiBlbnVtIGllZWU4MDIxMV9pYnNzX3JlcXVlc3QgewpAQCAtMzM5LDYgKzMzMSw3IEBACiAKIAlib29sIGZpeGVkX2Jzc2lkOwogCWJvb2wgZml4ZWRfY2hhbm5lbDsKKwlib29sIHByaXZhY3k7CiAKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKQEAgLTM2NCw3ICszNTcsNyBAQAogCiAJdW5zaWduZWQgbG9uZyB0aW1lcnNfcnVubmluZzsKIAotCWJvb2wgaG91c2VrZWVwaW5nOworCXVuc2lnbmVkIGxvbmcgd3JrcV9mbGFnczsKIAogCXU4IG1lc2hfaWRbSUVFRTgwMjExX01BWF9NRVNIX0lEX0xFTl07CiAJc2l6ZV90IG1lc2hfaWRfbGVuOwpAQCAtMzc0LDYgKzM2NywxMCBAQAogCXU4IG1lc2hfcG1faWRbNF07CiAJLyogQ29uZ2VzdGlvbiBDb250cm9sIE1vZGUgSWRlbnRpZmllciAqLwogCXU4IG1lc2hfY2NfaWRbNF07CisJLyogU3luY2hyb25pemF0aW9uIFByb3RvY29sIElkZW50aWZpZXIgKi8KKwl1OCBtZXNoX3NwX2lkWzRdOworCS8qIEF1dGhlbnRpY2F0aW9uIFByb3RvY29sIElkZW50aWZpZXIgKi8KKwl1OCBtZXNoX2F1dGhfaWRbNF07CiAJLyogTG9jYWwgbWVzaCBEZXN0aW5hdGlvbiBTZXF1ZW5jZSBOdW1iZXIgKi8KIAl1MzIgZHNuOwogCS8qIExhc3QgdXNlZCBQUkVRIElEICovCkBAIC00NzgsMjAgKzQ3NSw5IEBACiAJdW5pb24gewogCQlzdHJ1Y3QgewogCQkJc3RydWN0IGRlbnRyeSAqZHJvcF91bmVuY3J5cHRlZDsKLQkJCXN0cnVjdCBkZW50cnkgKnN0YXRlOwogCQkJc3RydWN0IGRlbnRyeSAqYnNzaWQ7Ci0JCQlzdHJ1Y3QgZGVudHJ5ICpwcmV2X2Jzc2lkOwotCQkJc3RydWN0IGRlbnRyeSAqc3NpZF9sZW47CiAJCQlzdHJ1Y3QgZGVudHJ5ICphaWQ7Ci0JCQlzdHJ1Y3QgZGVudHJ5ICphcF9jYXBhYjsKIAkJCXN0cnVjdCBkZW50cnkgKmNhcGFiOwotCQkJc3RydWN0IGRlbnRyeSAqZXh0cmFfaWVfbGVuOwotCQkJc3RydWN0IGRlbnRyeSAqYXV0aF90cmllczsKLQkJCXN0cnVjdCBkZW50cnkgKmFzc29jX3RyaWVzOwotCQkJc3RydWN0IGRlbnRyeSAqYXV0aF9hbGdzOwotCQkJc3RydWN0IGRlbnRyeSAqYXV0aF9hbGc7Ci0JCQlzdHJ1Y3QgZGVudHJ5ICphdXRoX3RyYW5zYWN0aW9uOwotCQkJc3RydWN0IGRlbnRyeSAqZmxhZ3M7CiAJCQlzdHJ1Y3QgZGVudHJ5ICpmb3JjZV91bmljYXN0X3JhdGVpZHg7CiAJCQlzdHJ1Y3QgZGVudHJ5ICptYXhfcmF0ZWN0cmxfcmF0ZWlkeDsKIAkJfSBzdGE7CkBAIC01MjYsNiArNTEyLDggQEAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogCXN0cnVjdCBkZW50cnkgKm1lc2hfc3RhdHNfZGlyOwogCXN0cnVjdCB7CisJCXN0cnVjdCBkZW50cnkgKmZ3ZGVkX21jYXN0OworCQlzdHJ1Y3QgZGVudHJ5ICpmd2RlZF91bmljYXN0OwogCQlzdHJ1Y3QgZGVudHJ5ICpmd2RlZF9mcmFtZXM7CiAJCXN0cnVjdCBkZW50cnkgKmRyb3BwZWRfZnJhbWVzX3R0bDsKIAkJc3RydWN0IGRlbnRyeSAqZHJvcHBlZF9mcmFtZXNfbm9fcm91dGU7CkBAIC01ODgsMTIgKzU3Niw0NCBAQAogCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DU0EsCiAJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OLAogCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9TVVNQRU5ELAotCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HLAogCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9TS0JfQURELAogfTsKIAotc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CisvKioKKyAqIG1hYzgwMjExIHNjYW4gZmxhZ3MgLSBjdXJyZW50bHkgYWN0aXZlIHNjYW4gbW9kZQorICoKKyAqIEBTQ0FOX1NXX1NDQU5OSU5HOiBXZSdyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2Ygc2Nhbm5pbmcgYnV0IG1heSBhcworICoJd2VsbCBiZSBvbiB0aGUgb3BlcmF0aW5nIGNoYW5uZWwKKyAqIEBTQ0FOX0hXX1NDQU5OSU5HOiBUaGUgaGFyZHdhcmUgaXMgc2Nhbm5pbmcgZm9yIHVzLCB3ZSBoYXZlIG5vIHdheSB0bworICoJZGV0ZXJtaW5lIGlmIHdlIGFyZSBvbiB0aGUgb3BlcmF0aW5nIGNoYW5uZWwgb3Igbm90CisgKiBAU0NBTl9PRkZfQ0hBTk5FTDogV2UncmUgb2ZmIG91ciBvcGVyYXRpbmcgY2hhbm5lbCBmb3Igc2Nhbm5pbmcsCisgKglnZXRzIG9ubHkgc2V0IGluIGNvbmp1bmN0aW9uIHdpdGggU0NBTl9TV19TQ0FOTklORworICovCitlbnVtIHsKKwlTQ0FOX1NXX1NDQU5OSU5HLAorCVNDQU5fSFdfU0NBTk5JTkcsCisJU0NBTl9PRkZfQ0hBTk5FTCwKK307CisKKy8qKgorICogZW51bSBtYWM4MDIxMV9zY2FuX3N0YXRlIC0gc2NhbiBzdGF0ZSBtYWNoaW5lIHN0YXRlcworICoKKyAqIEBTQ0FOX0RFQ0lTSU9OOiBNYWluIGVudHJ5IHBvaW50IHRvIHRoZSBzY2FuIHN0YXRlIG1hY2hpbmUsIHRoaXMgc3RhdGUKKyAqCWRldGVybWluZXMgaWYgd2Ugc2hvdWxkIGtlZXAgb24gc2Nhbm5pbmcgb3Igc3dpdGNoIGJhY2sgdG8gdGhlCisgKglvcGVyYXRpbmcgY2hhbm5lbAorICogQFNDQU5fU0VUX0NIQU5ORUw6IFNldCB0aGUgbmV4dCBjaGFubmVsIHRvIGJlIHNjYW5uZWQKKyAqIEBTQ0FOX1NFTkRfUFJPQkU6IFNlbmQgcHJvYmUgcmVxdWVzdHMgYW5kIHdhaXQgZm9yIHByb2JlIHJlc3BvbnNlcworICogQFNDQU5fTEVBVkVfT1BFUl9DSEFOTkVMOiBMZWF2ZSB0aGUgb3BlcmF0aW5nIGNoYW5uZWwsIG5vdGlmeSB0aGUgQVAKKyAqCWFib3V0IHVzIGxlYXZpbmcgdGhlIGNoYW5uZWwgYW5kIHN0b3AgYWxsIGFzc29jaWF0ZWQgU1RBIGludGVyZmFjZXMKKyAqIEBTQ0FOX0VOVEVSX09QRVJfQ0hBTk5FTDogRW50ZXIgdGhlIG9wZXJhdGluZyBjaGFubmVsIGFnYWluLCBub3RpZnkgdGhlCisgKglBUCBhYm91dCB1cyBiZWluZyBiYWNrIGFuZCByZXN0YXJ0IGFsbCBhc3NvY2lhdGVkIFNUQSBpbnRlcmZhY2VzCisgKi8KK2VudW0gbWFjODAyMTFfc2Nhbl9zdGF0ZSB7CisJU0NBTl9ERUNJU0lPTiwKKwlTQ0FOX1NFVF9DSEFOTkVMLAorCVNDQU5fU0VORF9QUk9CRSwKKwlTQ0FOX0xFQVZFX09QRVJfQ0hBTk5FTCwKKwlTQ0FOX0VOVEVSX09QRVJfQ0hBTk5FTCwKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgewpAQCAtNjA0LDE3ICs2MjQsMzMgQEAKIAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7CiAKKwkvKgorCSAqIHByaXZhdGUgd29ya3F1ZXVlIHRvIG1hYzgwMjExLiBtYWM4MDIxMSBtYWtlcyB0aGlzIGFjY2Vzc2libGUKKwkgKiB2aWEgaWVlZTgwMjExX3F1ZXVlX3dvcmsoKQorCSAqLworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CisKIAl1bnNpZ25lZCBsb25nIHF1ZXVlX3N0b3BfcmVhc29uc1tJRUVFODAyMTFfTUFYX1FVRVVFU107CiAJLyogYWxzbyB1c2VkIHRvIHByb3RlY3QgYW1wZHVfYWNfcXVldWUgYW5kIGFtZHB1X2FjX3N0b3BfcmVmY250ICovCiAJc3BpbmxvY2tfdCBxdWV1ZV9zdG9wX3JlYXNvbl9sb2NrOwogCi0Jc3RydWN0IG5ldF9kZXZpY2UgKm1kZXY7IC8qIHdtYXN0ZXIjIC0gIm1hc3RlciIgODAyLjExIGRldmljZSAqLwogCWludCBvcGVuX2NvdW50OwogCWludCBtb25pdG9ycywgY29va2VkX21udHJzOwogCS8qIG51bWJlciBvZiBpbnRlcmZhY2VzIHdpdGggY29ycmVzcG9uZGluZyBGSUZfIGZsYWdzICovCi0JaW50IGZpZl9mY3NmYWlsLCBmaWZfcGxjcGZhaWwsIGZpZl9jb250cm9sLCBmaWZfb3RoZXJfYnNzOworCWludCBmaWZfZmNzZmFpbCwgZmlmX3BsY3BmYWlsLCBmaWZfY29udHJvbCwgZmlmX290aGVyX2JzcywgZmlmX3BzcG9sbDsKIAl1bnNpZ25lZCBpbnQgZmlsdGVyX2ZsYWdzOyAvKiBGSUZfKiAqLwogCXN0cnVjdCBpd19zdGF0aXN0aWNzIHdzdGF0czsKKworCS8qIHByb3RlY3RzIHRoZSBhZ2dyZWdhdGVkIG11bHRpY2FzdCBsaXN0IGFuZCBmaWx0ZXIgY2FsbHMgKi8KKwlzcGlubG9ja190IGZpbHRlcl9sb2NrOworCisJLyogdXNlZCBmb3IgdXBsb2FkaW5nIGNoYW5nZWQgbWMgbGlzdCAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCByZWNvbmZpZ19maWx0ZXI7CisKKwkvKiBhZ2dyZWdhdGVkIG11bHRpY2FzdCBsaXN0ICovCisJc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3Q7CisJaW50IG1jX2NvdW50OworCiAJYm9vbCB0aW1faW5fbG9ja2VkX3NlY3Rpb247IC8qIHNlZSBpZWVlODAyMTFfYmVhY29uX2dldCgpICovCiAKIAkvKgpAQCAtNjMxLDYgKzY2Nyw5IEBACiAJICovCiAJYm9vbCBxdWllc2Npbmc7CiAKKwkvKiBkZXZpY2UgaXMgc3RhcnRlZCAqLworCWJvb2wgc3RhcnRlZDsKKwogCWludCB0eF9oZWFkcm9vbTsgLyogcmVxdWlyZWQgaGVhZHJvb20gZm9yIGhhcmR3YXJlL3JhZGlvdGFwICovCiAKIAkvKiBUYXNrbGV0IGFuZCBza2IgcXVldWUgdG8gcHJvY2VzcyBjYWxscyBmcm9tIElSUSBtb2RlLiBBbGwgZnJhbWVzCkBAIC02NTMsNiArNjkyLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHN0YV9saXN0OwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhX2hhc2hbU1RBX0hBU0hfU0laRV07CiAJc3RydWN0IHRpbWVyX2xpc3Qgc3RhX2NsZWFudXA7CisJaW50IHN0YV9nZW5lcmF0aW9uOwogCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBwZW5kaW5nW0lFRUU4MDIxMV9NQVhfUVVFVUVTXTsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHhfcGVuZGluZ190YXNrbGV0OwpAQCAtNjg3LDkgKzcyNyw5IEBACiAKIAkvKiBTY2FubmluZyBhbmQgQlNTIGxpc3QgKi8KIAlzdHJ1Y3QgbXV0ZXggc2Nhbl9tdHg7Ci0JYm9vbCBzd19zY2FubmluZywgaHdfc2Nhbm5pbmc7CisJdW5zaWduZWQgbG9uZyBzY2FubmluZzsKIAlzdHJ1Y3QgY2ZnODAyMTFfc3NpZCBzY2FuX3NzaWQ7Ci0Jc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCBpbnRfc2Nhbl9yZXE7CisJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqaW50X3NjYW5fcmVxOwogCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqc2Nhbl9jaGFubmVsOwogCWNvbnN0IHU4ICpvcmlnX2llczsKQEAgLTY5Nyw3ICs3MzcsNyBAQAogCWludCBzY2FuX2NoYW5uZWxfaWR4OwogCWludCBzY2FuX2llc19sZW47CiAKLQllbnVtIHsgU0NBTl9TRVRfQ0hBTk5FTCwgU0NBTl9TRU5EX1BST0JFIH0gc2Nhbl9zdGF0ZTsKKwllbnVtIG1hYzgwMjExX3NjYW5fc3RhdGUgbmV4dF9zY2FuX3N0YXRlOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl93b3JrOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNjYW5fc2RhdGE7CiAJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBvcGVyX2NoYW5uZWxfdHlwZTsKQEAgLTgzNCwxMCArODc0LDYgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqCiBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0KLQlCVUdfT04oIWxvY2FsIHx8IGxvY2FsLT5tZGV2ID09IGRldik7Ci0KIAlyZXR1cm4gbmV0ZGV2X3ByaXYoZGV2KTsKIH0KIApAQCAtOTM3LDIxICs5NzMsMjAgQEAKIHZvaWQgaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogdTMyIGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiAKLS8qIHdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgaWVlZTgwMjExX2l3X2hhbmRsZXJfZGVmOwotCiAvKiBTVEEgY29kZSAqLwogdm9pZCBpZWVlODAyMTFfc3RhX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK2ludCBpZWVlODAyMTFfbWdkX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfYXV0aF9yZXF1ZXN0ICpyZXEpOworaW50IGllZWU4MDIxMV9tZ2RfYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQlzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCAqcmVxKTsKK2ludCBpZWVlODAyMTFfbWdkX2RlYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSBzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgKnJlcSwKKwkJCSB2b2lkICpjb29raWUpOworaW50IGllZWU4MDIxMV9tZ2RfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfZGlzYXNzb2NfcmVxdWVzdCAqcmVxLAorCQkJICAgdm9pZCAqY29va2llKTsKIGllZWU4MDIxMV9yeF9yZXN1bHQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7Ci1pbnQgaWVlZTgwMjExX3N0YV9jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwotaW50IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pOwotaW50IGllZWU4MDIxMV9zdGFfZ2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCAqbGVuKTsKLWludCBpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkKTsKLXZvaWQgaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Ci1pbnQgaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbik7Ci1pbnQgaWVlZTgwMjExX3N0YV9kaXNhc3NvY2lhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHUxNiByZWFzb24pOworCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBpZWVlODAyMTFfc2VuZF9wc3BvbGwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9yZWNhbGNfcHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHMzMiBsYXRlbmN5KTsKQEAgLTk2Nyw4ICsxMDAyLDcgQEAKIHZvaWQgaWVlZTgwMjExX2lic3Nfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIHZvaWQgaWVlZTgwMjExX2lic3Nfc2V0dXBfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogaWVlZTgwMjExX3J4X3Jlc3VsdAotaWVlZTgwMjExX2lic3NfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOworaWVlZTgwMjExX2lic3NfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJCXU4ICpic3NpZCwgdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzKTsKIGludCBpZWVlODAyMTFfaWJzc19qb2luKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtOTgzLDE2ICsxMDE3LDkgQEAKIAkJCQkgICAgY29uc3QgdTggKnNzaWQsIHU4IHNzaWRfbGVuKTsKIGludCBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKTsKLWludCBpZWVlODAyMTFfc2Nhbl9yZXN1bHRzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiB2b2lkIGllZWU4MDIxMV9zY2FuX2NhbmNlbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiBpZWVlODAyMTFfcnhfcmVzdWx0Ci1pZWVlODAyMTFfc2Nhbl9yeChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOwotaW50IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKmllLCBzaXplX3QgbGVuKTsKK2llZWU4MDIxMV9zY2FuX3J4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogdm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogc3RydWN0IGllZWU4MDIxMV9ic3MgKgpAQCAtMTAwOCw4ICsxMDM1LDYgQEAKIAkJICAgICB1OCAqc3NpZCwgdTggc3NpZF9sZW4pOwogdm9pZCBpZWVlODAyMTFfcnhfYnNzX3B1dChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcyk7Ci12b2lkIGllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYnNzaWQsCi0JCQkgICAgIGludCBmcmVxLCB1OCAqc3NpZCwgdTggc3NpZF9sZW4pOwogCiAvKiBpbnRlcmZhY2UgaGFuZGxpbmcgKi8KIGludCBpZWVlODAyMTFfaWZfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBjb25zdCBjaGFyICpuYW1lLApAQCAtMTAyNSw5ICsxMDUwLDEwIEBACiAvKiB0eCBoYW5kbGluZyAqLwogdm9pZCBpZWVlODAyMTFfY2xlYXJfdHhfcGVuZGluZyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiB2b2lkIGllZWU4MDIxMV90eF9wZW5kaW5nKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1pbnQgaWVlZTgwMjExX21hc3Rlcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1pbnQgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CituZXRkZXZfdHhfdCBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK25ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKiBIVCAqLwogdm9pZCBpZWVlODAyMTFfaHRfY2FwX2llX3RvX3N0YV9odF9jYXAoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCkBAIC0xMDY1LDYgKzEwOTEsNyBAQAogCiAvKiBTdXNwZW5kL3Jlc3VtZSBhbmQgaHcgcmVjb25maWd1cmF0aW9uICovCiBpbnQgaWVlZTgwMjExX3JlY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX3N0b3BfZGV2aWNlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIAogI2lmZGVmIENPTkZJR19QTQogaW50IF9faWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwpAQCAtMTA5Miw3ICsxMTE5LDggQEAKIGludCBpZWVlODAyMTFfZnJhbWVfZHVyYXRpb24oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHNpemVfdCBsZW4sCiAJCQkgICAgIGludCByYXRlLCBpbnQgZXJwLCBpbnQgc2hvcnRfcHJlYW1ibGUpOwogdm9pZCBtYWM4MDIxMV9ldl9taWNoYWVsX21pY19mYWlsdXJlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQga2V5aWR4LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgY29uc3QgdTggKnRzYyk7CisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCBjb25zdCB1OCAqdHNjLAorCQkJCSAgICAgZ2ZwX3QgZ2ZwKTsKIHZvaWQgaWVlZTgwMjExX3NldF93bW1fZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgICAgIGludCBlbmNyeXB0KTsKQEAgLTExMjksOCArMTE1Nyw4IEBACiAKIHZvaWQgaWVlZTgwMjExX3NlbmRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSB1MTYgdHJhbnNhY3Rpb24sIHUxNiBhdXRoX2FsZywKLQkJCSB1OCAqZXh0cmEsIHNpemVfdCBleHRyYV9sZW4sCi0JCQkgY29uc3QgdTggKmJzc2lkLCBpbnQgZW5jcnlwdCk7CisJCQkgdTggKmV4dHJhLCBzaXplX3QgZXh0cmFfbGVuLCBjb25zdCB1OCAqYnNzaWQsCisJCQkgY29uc3QgdTggKmtleSwgdTgga2V5X2xlbiwgdTgga2V5X2lkeCk7CiBpbnQgaWVlZTgwMjExX2J1aWxkX3ByZXFfaWVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnVmZmVyLAogCQkJICAgICBjb25zdCB1OCAqaWUsIHNpemVfdCBpZV9sZW4pOwogdm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IGI3YzhhNDQuLmI4Mjk1Y2IgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC0xOTAsMTAgKzE5MCw2IEBACiAJCQkgICAgICAgRVRIX0FMRU4pOwogCX0KIAotCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobnVsbF9hZGRyLCBsb2NhbC0+bWRldi0+ZGV2X2FkZHIpID09IDApCi0JCW1lbWNweShsb2NhbC0+bWRldi0+ZGV2X2FkZHIsIGxvY2FsLT5ody53aXBoeS0+cGVybV9hZGRyLAotCQkgICAgICAgRVRIX0FMRU4pOwotCiAJLyoKIAkgKiBWYWxpZGF0ZSB0aGUgTUFDIGFkZHJlc3MgZm9yIHRoaXMgZGV2aWNlLgogCSAqLwpAQCAtMjI0LDE4ICsyMjAsMTUgQEAKIAkJCWxvY2FsLT5maWZfZmNzZmFpbCsrOwogCQlpZiAoc2RhdGEtPnUubW50cl9mbGFncyAmIE1PTklUT1JfRkxBR19QTENQRkFJTCkKIAkJCWxvY2FsLT5maWZfcGxjcGZhaWwrKzsKLQkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfQ09OVFJPTCkKKwkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfQ09OVFJPTCkgewogCQkJbG9jYWwtPmZpZl9jb250cm9sKys7CisJCQlsb2NhbC0+ZmlmX3BzcG9sbCsrOworCQl9CiAJCWlmIChzZGF0YS0+dS5tbnRyX2ZsYWdzICYgTU9OSVRPUl9GTEFHX09USEVSX0JTUykKIAkJCWxvY2FsLT5maWZfb3RoZXJfYnNzKys7CiAKLQkJbmV0aWZfYWRkcl9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAkJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwotCQluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CiAJCWJyZWFrOwotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgogCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOwogCQljb25mLnR5cGUgPSBzZGF0YS0+dmlmLnR5cGU7CkBAIC0yNDYsMTIgKzIzOSwxNSBAQAogCiAJCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKSB7CiAJCQlsb2NhbC0+ZmlmX290aGVyX2JzcysrOwotCQkJbmV0aWZfYWRkcl9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAkJCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKLQkJCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAogCQkJaWVlZTgwMjExX3N0YXJ0X21lc2goc2RhdGEpOworCQl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQkJbG9jYWwtPmZpZl9wc3BvbGwrKzsKKworCQkJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwogCQl9CisKIAkJY2hhbmdlZCB8PSBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oc2RhdGEpOwogCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgY2hhbmdlZCk7CiAJCWllZWU4MDIxMV9lbmFibGVfa2V5cyhzZGF0YSk7CkBAIC0yODEsMTUgKzI3Nyw2IEBACiAJCX0KIAl9CiAKLQlpZiAobG9jYWwtPm9wZW5fY291bnQgPT0gMCkgewotCQlyZXMgPSBkZXZfb3Blbihsb2NhbC0+bWRldik7Ci0JCVdBUk5fT04ocmVzKTsKLQkJaWYgKHJlcykKLQkJCWdvdG8gZXJyX2RlbF9pbnRlcmZhY2U7Ci0JCXRhc2tsZXRfZW5hYmxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKLQkJdGFza2xldF9lbmFibGUoJmxvY2FsLT50YXNrbGV0KTsKLQl9Ci0KIAkvKgogCSAqIHNldF9tdWx0aWNhc3RfbGlzdCB3aWxsIGJlIGludm9rZWQgYnkgdGhlIG5ldHdvcmtpbmcgY29yZQogCSAqIHdoaWNoIHdpbGwgY2hlY2sgd2hldGhlciBhbnkgaW5jcmVtZW50cyBoZXJlIHdlcmUgZG9uZSBpbgpAQCAtMzIzLDcgKzMxMCw3IEBACiAJICogdG8gZml4IHRoaXMuCiAJICovCiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZzZGF0YS0+dS5tZ2Qud29yayk7CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZzZGF0YS0+dS5tZ2Qud29yayk7CiAKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGRldik7CiAKQEAgLTM0Niw3ICszMzMsMTAgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiBjb25mOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDsKIAl1MzIgaHdfcmVjb25mX2ZsYWdzID0gMDsKKwlpbnQgaTsKIAogCS8qCiAJICogU3RvcCBUWCBvbiB0aGlzIGludGVyZmFjZSBmaXJzdC4KQEAgLTM2NiwxOCArMzU2LDYgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qCi0JICogQW5ub3VuY2UgdGhhdCB3ZSBhcmUgbGVhdmluZyB0aGUgbmV0d29yaywgaW4gY2FzZSB3ZSBhcmUgYQotCSAqIHN0YXRpb24gaW50ZXJmYWNlIHR5cGUuIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSByZW1vdmluZwotCSAqIGFsbCBzdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggc3RhX2luZm9fZmx1c2gsIG90aGVyd2lzZSBTVEEKLQkgKiBpbmZvcm1hdGlvbiB3aWxsIGJlIGdvbmUgYW5kIG5vIGFubm91bmNlIGJlaW5nIGRvbmUuCi0JICovCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCWlmIChzZGF0YS0+dS5tZ2Quc3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEKQotCQkJaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzZGF0YSwKLQkJCQlXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7Ci0JfQotCi0JLyoKIAkgKiBSZW1vdmUgYWxsIHN0YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZS4KIAkgKgogCSAqIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBjYWxsaW5nIG9wcy0+cmVtb3ZlX2ludGVyZmFjZSgpCkBAIC00MDgsMTMgKzM4NiwyNCBAQAogCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfUFJPTUlTQykKIAkJYXRvbWljX2RlYygmbG9jYWwtPmlmZl9wcm9taXNjcyk7CiAKLQlkZXZfbWNfdW5zeW5jKGxvY2FsLT5tZGV2LCBkZXYpOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCWxvY2FsLT5maWZfcHNwb2xsLS07CisKKwluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKKwlzcGluX2xvY2tfYmgoJmxvY2FsLT5maWx0ZXJfbG9jayk7CisJX19kZXZfYWRkcl91bnN5bmMoJmxvY2FsLT5tY19saXN0LCAmbG9jYWwtPm1jX2NvdW50LAorCQkJICAmZGV2LT5tY19saXN0LCAmZGV2LT5tY19jb3VudCk7CisJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5maWx0ZXJfbG9jayk7CisJbmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTsKKworCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKKwogCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+ZHluYW1pY19wc190aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogCiAJLyogQVBzIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgKi8KIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnZsYW4sICp0bXA7CisJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnZsYW4sICp0bXBzZGF0YTsKIAkJc3RydWN0IGJlYWNvbl9kYXRhICpvbGRfYmVhY29uID0gc2RhdGEtPnUuYXAuYmVhY29uOwogCiAJCS8qIHJlbW92ZSBiZWFjb24gKi8KQEAgLTQyMyw3ICs0MTIsNyBAQAogCQlrZnJlZShvbGRfYmVhY29uKTsKIAogCQkvKiBkb3duIGFsbCBkZXBlbmRlbnQgZGV2aWNlcywgdGhhdCBpcyBWTEFOcyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmxhbiwgdG1wLCAmc2RhdGEtPnUuYXAudmxhbnMsCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuLCB0bXBzZGF0YSwgJnNkYXRhLT51LmFwLnZsYW5zLAogCQkJCQkgdS52bGFuLmxpc3QpCiAJCQlkZXZfY2xvc2Uodmxhbi0+ZGV2KTsKIAkJV0FSTl9PTighbGlzdF9lbXB0eSgmc2RhdGEtPnUuYXAudmxhbnMpKTsKQEAgLTQ1MiwyOSArNDQxLDMwIEBACiAJCQlsb2NhbC0+ZmlmX2Zjc2ZhaWwtLTsKIAkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfUExDUEZBSUwpCiAJCQlsb2NhbC0+ZmlmX3BsY3BmYWlsLS07Ci0JCWlmIChzZGF0YS0+dS5tbnRyX2ZsYWdzICYgTU9OSVRPUl9GTEFHX0NPTlRST0wpCisJCWlmIChzZGF0YS0+dS5tbnRyX2ZsYWdzICYgTU9OSVRPUl9GTEFHX0NPTlRST0wpIHsKKwkJCWxvY2FsLT5maWZfcHNwb2xsLS07CiAJCQlsb2NhbC0+ZmlmX2NvbnRyb2wtLTsKKwkJfQogCQlpZiAoc2RhdGEtPnUubW50cl9mbGFncyAmIE1PTklUT1JfRkxBR19PVEhFUl9CU1MpCiAJCQlsb2NhbC0+ZmlmX290aGVyX2Jzcy0tOwogCi0JCW5ldGlmX2FkZHJfbG9ja19iaChsb2NhbC0+bWRldik7CiAJCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKLQkJbmV0aWZfYWRkcl91bmxvY2tfYmgobG9jYWwtPm1kZXYpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCW1lbXNldChzZGF0YS0+dS5tZ2QuYnNzaWQsIDAsIEVUSF9BTEVOKTsKIAkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lm1nZC5jaHN3aXRjaF90aW1lcik7CiAJCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5tZ2QudGltZXIpOworCQlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUubWdkLmNvbm5fbW9uX3RpbWVyKTsKKwkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lm1nZC5iY25fbW9uX3RpbWVyKTsKIAkJLyoKLQkJICogSWYgdGhlIHRpbWVyIGZpcmVkIHdoaWxlIHdlIHdhaXRlZCBmb3IgaXQsIGl0IHdpbGwgaGF2ZQotCQkgKiByZXF1ZXVlZCB0aGUgd29yay4gTm93IHRoZSB3b3JrIHdpbGwgYmUgcnVubmluZyBhZ2FpbgorCQkgKiBJZiBhbnkgb2YgdGhlIHRpbWVycyBmaXJlZCB3aGlsZSB3ZSB3YWl0ZWQgZm9yIGl0LCBpdCB3aWxsCisJCSAqIGhhdmUgcXVldWVkIGl0cyB3b3JrLiBOb3cgdGhlIHdvcmsgd2lsbCBiZSBydW5uaW5nIGFnYWluCiAJCSAqIGJ1dCB3aWxsIG5vdCByZWFybSB0aGUgdGltZXIgYWdhaW4gYmVjYXVzZSBpdCBjaGVja3MKIAkJICogd2hldGhlciB0aGUgaW50ZXJmYWNlIGlzIHJ1bm5pbmcsIHdoaWNoLCBhdCB0aGlzIHBvaW50LAogCQkgKiBpdCBubyBsb25nZXIgaXMuCiAJCSAqLwogCQljYW5jZWxfd29ya19zeW5jKCZzZGF0YS0+dS5tZ2Qud29yayk7CiAJCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51Lm1nZC5jaHN3aXRjaF93b3JrKTsKLQorCQljYW5jZWxfd29ya19zeW5jKCZzZGF0YS0+dS5tZ2QubW9uaXRvcl93b3JrKTsKIAkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUubWdkLmJlYWNvbl9sb3NzX3dvcmspOwogCiAJCS8qCkBAIC00ODUsMTIgKzQ3NSw2IEBACiAJCSAqLwogCQlzeW5jaHJvbml6ZV9yY3UoKTsKIAkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5tZ2Quc2tiX3F1ZXVlKTsKLQotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRCB8Ci0JCQkJCUlFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRCk7Ci0JCWtmcmVlKHNkYXRhLT51Lm1nZC5leHRyYV9pZSk7Ci0JCXNkYXRhLT51Lm1nZC5leHRyYV9pZSA9IE5VTEw7Ci0JCXNkYXRhLT51Lm1nZC5leHRyYV9pZV9sZW4gPSAwOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CkBAIC01MDcsMzcgKzQ5MSwyMyBAQAogCQkJbG9jYWwtPmZpZl9vdGhlcl9ic3MtLTsKIAkJCWF0b21pY19kZWMoJmxvY2FsLT5pZmZfYWxsbXVsdGlzKTsKIAotCQkJbmV0aWZfYWRkcl9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAkJCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKLQkJCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAogCQkJaWVlZTgwMjExX3N0b3BfbWVzaChzZGF0YSk7CiAJCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKLQkJaWYgKGxvY2FsLT5zY2FuX3NkYXRhID09IHNkYXRhKSB7Ci0JCQlpZiAoIWxvY2FsLT5vcHMtPmh3X3NjYW4pCi0JCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZsb2NhbC0+c2Nhbl93b3JrKTsKLQkJCS8qCi0JCQkgKiBUaGUgc29mdHdhcmUgc2NhbiBjYW4gbm8gbG9uZ2VyIHJ1biBub3csIHNvIHdlIGNhbgotCQkJICogY2xlYXIgb3V0IHRoZSBzY2FuX3NkYXRhIHJlZmVyZW5jZS4gSG93ZXZlciwgdGhlCi0JCQkgKiBoYXJkd2FyZSBzY2FuIG1heSBzdGlsbCBiZSBydW5uaW5nLiBUaGUgY29tcGxldGUKLQkJCSAqIGZ1bmN0aW9uIG11c3QgYmUgcHJlcGFyZWQgdG8gaGFuZGxlIGEgTlVMTCB2YWx1ZS4KLQkJCSAqLwotCQkJbG9jYWwtPnNjYW5fc2RhdGEgPSBOVUxMOwotCQkJLyoKLQkJCSAqIFRoZSBtZW1vcnkgYmFycmllciBndWFyYW50ZWVzIHRoYXQgYW5vdGhlciBDUFUKLQkJCSAqIHRoYXQgaXMgaGFyZHdhcmUtc2Nhbm5pbmcgd2lsbCBub3cgc2VlIHRoZSBmYWN0Ci0JCQkgKiB0aGF0IHRoaXMgaW50ZXJmYWNlIGlzIGdvbmUuCi0JCQkgKi8KLQkJCXNtcF9tYigpOwotCQkJLyoKLQkJCSAqIElmIHNvZnR3YXJlIHNjYW5uaW5nLCBjb21wbGV0ZSB0aGUgc2NhbiBidXQgc2luY2UKLQkJCSAqIHRoZSBzY2FuX3NkYXRhIGlzIE5VTEwgYWxyZWFkeSBkb24ndCBzZW5kIG91dCBhCi0JCQkgKiBzY2FuIGV2ZW50IHRvIHVzZXJzcGFjZSAtLSB0aGUgc2NhbiBpcyBpbmNvbXBsZXRlLgotCQkJICovCi0JCQlpZiAobG9jYWwtPnN3X3NjYW5uaW5nKQotCQkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgmbG9jYWwtPmh3LCB0cnVlKTsKKwkJaWYgKGxvY2FsLT5zY2FuX3NkYXRhID09IHNkYXRhKQorCQkJaWVlZTgwMjExX3NjYW5fY2FuY2VsKGxvY2FsKTsKKworCQkvKgorCQkgKiBEaXNhYmxlIGJlYWNvbmluZyBmb3IgQVAgYW5kIG1lc2gsIElCU1MgY2FuJ3QKKwkJICogc3RpbGwgYmUgam9pbmVkIHRvIGEgbmV0d29yayBhdCB0aGlzIHBvaW50LgorCQkgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKKwkJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLAorCQkJCUJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKIAkJfQogCiAJCWNvbmYudmlmID0gJnNkYXRhLT52aWY7CkBAIC01NTUsMTcgKzUyNSw4IEBACiAJaWVlZTgwMjExX3JlY2FsY19wcyhsb2NhbCwgLTEpOwogCiAJaWYgKGxvY2FsLT5vcGVuX2NvdW50ID09IDApIHsKLQkJaWYgKG5ldGlmX3J1bm5pbmcobG9jYWwtPm1kZXYpKQotCQkJZGV2X2Nsb3NlKGxvY2FsLT5tZGV2KTsKLQotCQlkcnZfc3RvcChsb2NhbCk7Ci0KLQkJaWVlZTgwMjExX2xlZF9yYWRpbyhsb2NhbCwgZmFsc2UpOwotCi0JCWZsdXNoX3dvcmtxdWV1ZShsb2NhbC0+aHcud29ya3F1ZXVlKTsKLQotCQl0YXNrbGV0X2Rpc2FibGUoJmxvY2FsLT50eF9wZW5kaW5nX3Rhc2tsZXQpOwotCQl0YXNrbGV0X2Rpc2FibGUoJmxvY2FsLT50YXNrbGV0KTsKKwkJaWVlZTgwMjExX2NsZWFyX3R4X3BlbmRpbmcobG9jYWwpOworCQlpZWVlODAyMTFfc3RvcF9kZXZpY2UobG9jYWwpOwogCiAJCS8qIG5vIHJlY29uZmlndXJpbmcgYWZ0ZXIgc3RvcCEgKi8KIAkJaHdfcmVjb25mX2ZsYWdzID0gMDsKQEAgLTU3NSw2ICs1MzYsMTggQEAKIAlpZiAoaHdfcmVjb25mX2ZsYWdzKQogCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBod19yZWNvbmZfZmxhZ3MpOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9NQVhfUVVFVUVTOyBpKyspIHsKKwkJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmbG9jYWwtPnBlbmRpbmdbaV0sIHNrYiwgdG1wKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJCQlpZiAoaW5mby0+Y29udHJvbC52aWYgPT0gJnNkYXRhLT52aWYpIHsKKwkJCQlfX3NrYl91bmxpbmsoc2tiLCAmbG9jYWwtPnBlbmRpbmdbaV0pOworCQkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCQl9CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKKwogCXJldHVybiAwOwogfQogCkBAIC02MDQsOCArNTc3LDExIEBACiAJCQlhdG9taWNfZGVjKCZsb2NhbC0+aWZmX3Byb21pc2NzKTsKIAkJc2RhdGEtPmZsYWdzIF49IElFRUU4MDIxMV9TREFUQV9QUk9NSVNDOwogCX0KLQotCWRldl9tY19zeW5jKGxvY2FsLT5tZGV2LCBkZXYpOworCXNwaW5fbG9ja19iaCgmbG9jYWwtPmZpbHRlcl9sb2NrKTsKKwlfX2Rldl9hZGRyX3N5bmMoJmxvY2FsLT5tY19saXN0LCAmbG9jYWwtPm1jX2NvdW50LAorCQkJJmRldi0+bWNfbGlzdCwgJmRldi0+bWNfY291bnQpOworCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+ZmlsdGVyX2xvY2spOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZsb2NhbC0+cmVjb25maWdfZmlsdGVyKTsKIH0KIAogLyoKQEAgLTY1MiwxMSArNjI4LDYgQEAKIAkJCWtmcmVlX3NrYihzZGF0YS0+dS5pYnNzLnByZXNwKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlrZnJlZShzZGF0YS0+dS5tZ2QuZXh0cmFfaWUpOwotCQlrZnJlZShzZGF0YS0+dS5tZ2QuYXNzb2NyZXFfaWVzKTsKLQkJa2ZyZWUoc2RhdGEtPnUubWdkLmFzc29jcmVzcF9pZXMpOwotCQlrZnJlZShzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWUpOwotCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1dEUzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgpAQCAtNjk1LDcgKzY2Niw2IEBACiB7CiAJZXRoZXJfc2V0dXAoZGV2KTsKIAlkZXYtPm5ldGRldl9vcHMgPSAmaWVlZTgwMjExX2RhdGFpZl9vcHM7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWY7CiAJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7CiB9CiAKQEAgLTc4NCw2ICs3NTQsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSB3aXBoeV90eXBlID0geworCS5uYW1lCT0gIndsYW4iLAorfTsKKwogaW50IGllZWU4MDIxMV9pZl9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZXdfZGV2LCBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsCiAJCSAgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKQEAgLTc5OCw2ICs3NzIsNyBAQAogCQkJICAgIG5hbWUsIGllZWU4MDIxMV9pZl9zZXR1cCk7CiAJaWYgKCFuZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKKwlkZXZfbmV0X3NldChuZGV2LCB3aXBoeV9uZXQobG9jYWwtPmh3LndpcGh5KSk7CiAKIAluZGV2LT5uZWVkZWRfaGVhZHJvb20gPSBsb2NhbC0+dHhfaGVhZHJvb20gKwogCQkJCTQqNiAvKiBmb3VyIE1BQyBhZGRyZXNzZXMgKi8KQEAgLTgxNCw3ICs3ODksNyBAQAogCiAJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBsb2NhbC0+aHcud2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwogCVNFVF9ORVRERVZfREVWKG5kZXYsIHdpcGh5X2Rldihsb2NhbC0+aHcud2lwaHkpKTsKLQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOworCVNFVF9ORVRERVZfREVWVFlQRShuZGV2LCAmd2lwaHlfdHlwZSk7CiAKIAkvKiBkb24ndCB1c2UgSUVFRTgwMjExX0RFVl9UT19TVUJfSUYgYmVjYXVzZSBpdCBjaGVja3MgdG9vIG11Y2ggKi8KIAlzZGF0YSA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtOTMxLDcgKzkwNiw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJaW50IGNvdW50ID0gMDsKIAotCWlmIChsb2NhbC0+aHdfc2Nhbm5pbmcgfHwgbG9jYWwtPnN3X3NjYW5uaW5nKQorCWlmIChsb2NhbC0+c2Nhbm5pbmcpCiAJCXJldHVybiBpZWVlODAyMTFfaWRsZV9vZmYobG9jYWwsICJzY2FubmluZyIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CkBAIC05MzksNyArOTE0LDggQEAKIAkJCWNvbnRpbnVlOwogCQkvKiBkbyBub3QgY291bnQgZGlzYWJsZWQgbWFuYWdlZCBpbnRlcmZhY2VzICovCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCQkgICAgc2RhdGEtPnUubWdkLnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRCkKKwkJICAgICFzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCAmJgorCQkgICAgbGlzdF9lbXB0eSgmc2RhdGEtPnUubWdkLndvcmtfbGlzdCkpCiAJCQljb250aW51ZTsKIAkJLyogZG8gbm90IGNvdW50IHVudXNlZCBJQlNTIGludGVyZmFjZXMgKi8KIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21haW4uYyBiL25ldC9tYWM4MDIxMS9tYWluLmMKaW5kZXggMDkyYTAxNy4uNzk3ZjUzOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21haW4uYworKysgYi9uZXQvbWFjODAyMTEvbWFpbi5jCkBAIC01MCw5ICs1MCw5IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCi0vKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBtZGV2IHR4IGxvY2sgKi8KIHZvaWQgaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CisJdTY0IG1jOwogCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzOwogCXVuc2lnbmVkIGludCBuZXdfZmxhZ3MgPSAwOwogCkBAIC02Miw3ICs2Miw3IEBACiAJaWYgKGF0b21pY19yZWFkKCZsb2NhbC0+aWZmX2FsbG11bHRpcykpCiAJCW5ld19mbGFncyB8PSBGSUZfQUxMTVVMVEk7CiAKLQlpZiAobG9jYWwtPm1vbml0b3JzKQorCWlmIChsb2NhbC0+bW9uaXRvcnMgfHwgbG9jYWwtPnNjYW5uaW5nKQogCQluZXdfZmxhZ3MgfD0gRklGX0JDTl9QUkJSRVNQX1BST01JU0M7CiAKIAlpZiAobG9jYWwtPmZpZl9mY3NmYWlsKQpAQCAtNzcsNzcgKzc3LDI5IEBACiAJaWYgKGxvY2FsLT5maWZfb3RoZXJfYnNzKQogCQluZXdfZmxhZ3MgfD0gRklGX09USEVSX0JTUzsKIAorCWlmIChsb2NhbC0+ZmlmX3BzcG9sbCkKKwkJbmV3X2ZsYWdzIHw9IEZJRl9QU1BPTEw7CisKKwlzcGluX2xvY2tfYmgoJmxvY2FsLT5maWx0ZXJfbG9jayk7CiAJY2hhbmdlZF9mbGFncyA9IGxvY2FsLT5maWx0ZXJfZmxhZ3MgXiBuZXdfZmxhZ3M7CiAKKwltYyA9IGRydl9wcmVwYXJlX211bHRpY2FzdChsb2NhbCwgbG9jYWwtPm1jX2NvdW50LCBsb2NhbC0+bWNfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5maWx0ZXJfbG9jayk7CisKIAkvKiBiZSBhIGJpdCBuYXN0eSAqLwogCW5ld19mbGFncyB8PSAoMTw8MzEpOwogCi0JZHJ2X2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwsIGNoYW5nZWRfZmxhZ3MsICZuZXdfZmxhZ3MsCi0JCQkgICAgIGxvY2FsLT5tZGV2LT5tY19jb3VudCwKLQkJCSAgICAgbG9jYWwtPm1kZXYtPm1jX2xpc3QpOworCWRydl9jb25maWd1cmVfZmlsdGVyKGxvY2FsLCBjaGFuZ2VkX2ZsYWdzLCAmbmV3X2ZsYWdzLCBtYyk7CiAKIAlXQVJOX09OKG5ld19mbGFncyAmICgxPDwzMSkpOwogCiAJbG9jYWwtPmZpbHRlcl9mbGFncyA9IG5ld19mbGFncyAmIH4oMTw8MzEpOwogfQogCi0vKiBtYXN0ZXIgaW50ZXJmYWNlICovCi0KLXN0YXRpYyBpbnQgaGVhZGVyX3BhcnNlXzgwMjExKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgKmhhZGRyKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3JlY29uZmlnX2ZpbHRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JbWVtY3B5KGhhZGRyLCBza2JfbWFjX2hlYWRlcihza2IpICsgMTAsIEVUSF9BTEVOKTsgLyogYWRkcjIgKi8KLQlyZXR1cm4gRVRIX0FMRU47Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBpZWVlODAyMTFfaGVhZGVyX29wcyA9IHsKLQkuY3JlYXRlCQk9IGV0aF9oZWFkZXIsCi0JLnBhcnNlCQk9IGhlYWRlcl9wYXJzZV84MDIxMSwKLQkucmVidWlsZAk9IGV0aF9yZWJ1aWxkX2hlYWRlciwKLQkuY2FjaGUJCT0gZXRoX2hlYWRlcl9jYWNoZSwKLQkuY2FjaGVfdXBkYXRlCT0gZXRoX2hlYWRlcl9jYWNoZV91cGRhdGUsCi19OwotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9tYXN0ZXJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgKm1wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IG1wcml2LT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlpbnQgcmVzID0gLUVPUE5PVFNVUFA7Ci0KLQkvKiB3ZSBob2xkIHRoZSBSVE5MIGhlcmUgc28gY2FuIHNhZmVseSB3YWxrIHRoZSBsaXN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7Ci0JCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7Ci0JCQlyZXMgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhsb2NhbC0+bWRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZWVlODAyMTFfbWFzdGVyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX21hc3Rlcl9wcml2ICptcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBtcHJpdi0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0KLQkvKiB3ZSBob2xkIHRoZSBSVE5MIGhlcmUgc28gY2FuIHNhZmVseSB3YWxrIHRoZSBsaXN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQotCQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKLQkJCWRldl9jbG9zZShzZGF0YS0+ZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfbWFzdGVyX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgKm1wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IG1wcml2LT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsLCByZWNvbmZpZ19maWx0ZXIpOwogCiAJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwogfQpAQCAtMjU5LDcgKzIxMSw4IEBACiAJfQogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkgewotCQlpZiAobG9jYWwtPnN3X3NjYW5uaW5nKSB7CisJCWlmIChsb2NhbC0+cXVpZXNjaW5nIHx8ICFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpIHx8CisJCSAgICB0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCAmbG9jYWwtPnNjYW5uaW5nKSkgewogCQkJc2RhdGEtPnZpZi5ic3NfY29uZi5lbmFibGVfYmVhY29uID0gZmFsc2U7CiAJCX0gZWxzZSB7CiAJCQkvKgpAQCAtMjg4LDkgKzI0MSw2IEBACiAKIAlkcnZfYnNzX2luZm9fY2hhbmdlZChsb2NhbCwgJnNkYXRhLT52aWYsCiAJCQkgICAgICZzZGF0YS0+dmlmLmJzc19jb25mLCBjaGFuZ2VkKTsKLQotCS8qIERFUFJFQ0FURUQgKi8KLQlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50OwogfQogCiB1MzIgaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtMzEwLDcgKzI2MCw2IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWludCB0bXA7CiAKLQlza2ItPmRldiA9IGxvY2FsLT5tZGV2OwogCXNrYi0+cGt0X3R5cGUgPSBJRUVFODAyMTFfVFhfU1RBVFVTX01TRzsKIAlza2JfcXVldWVfdGFpbChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUyA/CiAJCSAgICAgICAmbG9jYWwtPnNrYl9xdWV1ZSA6ICZsb2NhbC0+c2tiX3F1ZXVlX3VucmVsaWFibGUsIHNrYik7CkBAIC0zMzAsMTkgKzI3OSwxNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKikgZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXR1czsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOwogCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmbG9jYWwtPnNrYl9xdWV1ZSkpIHx8CiAJICAgICAgIChza2IgPSBza2JfZGVxdWV1ZSgmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlKSkpIHsKIAkJc3dpdGNoIChza2ItPnBrdF90eXBlKSB7CiAJCWNhc2UgSUVFRTgwMjExX1JYX01TRzoKLQkJCS8qIHN0YXR1cyBpcyBpbiBza2ItPmNiICovCi0JCQltZW1jcHkoJnJ4X3N0YXR1cywgc2tiLT5jYiwgc2l6ZW9mKHJ4X3N0YXR1cykpOwogCQkJLyogQ2xlYXIgc2tiLT5wa3RfdHlwZSBpbiBvcmRlciB0byBub3QgY29uZnVzZSBrZXJuZWwKIAkJCSAqIG5ldHN0YWNrLiAqLwogCQkJc2tiLT5wa3RfdHlwZSA9IDA7Ci0JCQlfX2llZWU4MDIxMV9yeChsb2NhbF90b19odyhsb2NhbCksIHNrYiwgJnJ4X3N0YXR1cyk7CisJCQlpZWVlODAyMTFfcngobG9jYWxfdG9faHcobG9jYWwpLCBza2IpOwogCQkJYnJlYWs7CiAJCWNhc2UgSUVFRTgwMjExX1RYX1NUQVRVU19NU0c6CiAJCQlza2ItPnBrdF90eXBlID0gMDsKQEAgLTM3NSw2ICszMjEsMzEgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKKwkvKgorCSAqIFhYWDogVGhpcyBpcyB0ZW1wb3JhcnkhCisJICoKKwkgKglUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgd2hlbiB3ZSBnZXQgaGVyZSwgdGhlIGRyaXZlciB3aWxsCisJICoJcXVpdGUgbGlrZWx5IGhhdmUgcHJldHR5IG11Y2ggb3ZlcndyaXR0ZW4gaW5mby0+Y29udHJvbCBieQorCSAqCXVzaW5nIGluZm8tPmRyaXZlcl9kYXRhIG9yIGluZm8tPnJhdGVfZHJpdmVyX2RhdGEuIFRodXMsCisJICoJd2hlbiBwYXNzaW5nIG91dCB0aGUgZnJhbWUgdG8gdGhlIGRyaXZlciBhZ2Fpbiwgd2Ugd291bGQgYmUKKwkgKglwYXNzaW5nIGNvbXBsZXRlbHkgYm9ndXMgZGF0YSBzaW5jZSB0aGUgZHJpdmVyIHdvdWxkIHRoZW4KKwkgKglleHBlY3QgYSBwcm9wZXJseSBmaWxsZWQgaW5mby0+Y29udHJvbC4gSW4gbWFjODAyMTEgaXRzZWxmCisJICoJdGhlIHNhbWUgcHJvYmxlbSBvY2N1cnMsIHNpbmNlIHdlIG5lZWQgaW5mby0+Y29udHJvbC52aWYKKwkgKglpbnRlcm5hbGx5LgorCSAqCisJICoJVG8gZml4IHRoaXMsIHdlIHNob3VsZCBzZW5kIHRoZSBmcmFtZSB0aHJvdWdoIFRYIHByb2Nlc3NpbmcKKwkgKglhZ2Fpbi4gSG93ZXZlciwgaXQncyBub3QgdGhhdCBzaW1wbGUsIHNpbmNlIHRoZSBmcmFtZSB3aWxsCisJICoJaGF2ZSBiZWVuIHNvZnR3YXJlLWVuY3J5cHRlZCAoaWYgYXBwbGljYWJsZSkgYWxyZWFkeSwgYW5kCisJICoJZW5jcnlwdGluZyBpdCBhZ2FpbiBkb2Vzbid0IGRvIG11Y2ggZ29vZC4gU28gdG8gcHJvcGVybHkgZG8KKwkgKgl0aGF0LCB3ZSBub3Qgb25seSBoYXZlIHRvIHNraXAgdGhlIGFjdHVhbCAncmF3JyBlbmNyeXB0aW9uCisJICoJKGtleSBzZWxlY3Rpb24gZXRjLiBzdGlsbCBoYXMgdG8gYmUgZG9uZSEpIGJ1dCBhbHNvIHRoZQorCSAqCXNlcXVlbmNlIG51bWJlciBhc3NpZ25tZW50IHNpbmNlIHRoYXQgaW1wYWN0cyB0aGUgY3J5cHRvCisJICoJZW5jYXBzdWxhdGlvbiwgb2YgY291cnNlLgorCSAqCisJICoJSGVuY2UsIGZvciBub3csIGZpeCB0aGUgYnVnIGJ5IGp1c3QgZHJvcHBpbmcgdGhlIGZyYW1lLgorCSAqLworCWdvdG8gZHJvcDsKKwogCXN0YS0+dHhfZmlsdGVyZWRfY291bnQrKzsKIAogCS8qCkBAIC00MjgsNiArMzk5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAorIGRyb3A6CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKIAlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgVFggZmlsdGVyZWQgZnJhbWUsICIKQEAgLTUxMCw2ICs0ODIsOCBAQAogCQl9CiAKIAkJcmF0ZV9jb250cm9sX3R4X3N0YXR1cyhsb2NhbCwgc2JhbmQsIHN0YSwgc2tiKTsKKwkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc3RhLT5zZGF0YS0+dmlmKSkKKwkJCWllZWU4MDIxMXNfdXBkYXRlX21ldHJpYyhsb2NhbCwgc3RhLCBza2IpOwogCX0KIAogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtNjg1LDYgKzY1OSw3IEBACiAJaWYgKCF3aXBoeSkKIAkJcmV0dXJuIE5VTEw7CiAKKwl3aXBoeS0+bmV0bnNvayA9IHRydWU7CiAJd2lwaHktPnByaXZpZCA9IG1hYzgwMjExX3dpcGh5X3ByaXZpZDsKIAogCS8qIFllcywgcHV0dGluZyBjZmc4MDIxMV9ic3MgaW50byBpZWVlODAyMTFfYnNzIGlzIGEgaGFjayAqLwpAQCAtNzExLDcgKzY4Niw2IEBACiAJbG9jYWwtPmh3Lm1heF9yYXRlcyA9IDE7CiAJbG9jYWwtPmh3LmNvbmYubG9uZ19mcmFtZV9tYXhfdHhfY291bnQgPSB3aXBoeS0+cmV0cnlfbG9uZzsKIAlsb2NhbC0+aHcuY29uZi5zaG9ydF9mcmFtZV9tYXhfdHhfY291bnQgPSB3aXBoeS0+cmV0cnlfc2hvcnQ7Ci0JbG9jYWwtPmh3LmNvbmYucmFkaW9fZW5hYmxlZCA9IHRydWU7CiAJbG9jYWwtPnVzZXJfcG93ZXJfbGV2ZWwgPSAtMTsKIAogCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+aW50ZXJmYWNlcyk7CkBAIC03MTksMTMgKzY5MywxNSBAQAogCW11dGV4X2luaXQoJmxvY2FsLT5zY2FuX210eCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmbG9jYWwtPmtleV9sb2NrKTsKLQorCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+ZmlsdGVyX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jayk7CiAKIAlJTklUX0RFTEFZRURfV09SSygmbG9jYWwtPnNjYW5fd29yaywgaWVlZTgwMjExX3NjYW5fd29yayk7CiAKIAlJTklUX1dPUksoJmxvY2FsLT5yZXN0YXJ0X3dvcmssIGllZWU4MDIxMV9yZXN0YXJ0X3dvcmspOwogCisJSU5JVF9XT1JLKCZsb2NhbC0+cmVjb25maWdfZmlsdGVyLCBpZWVlODAyMTFfcmVjb25maWdfZmlsdGVyKTsKKwogCUlOSVRfV09SSygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmssCiAJCSAgaWVlZTgwMjExX2R5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogCUlOSVRfV09SSygmbG9jYWwtPmR5bmFtaWNfcHNfZGlzYWJsZV93b3JrLApAQCAtNzM5LDEyICs3MTUsMTAgQEAKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnBlbmRpbmdbaV0pOwogCXRhc2tsZXRfaW5pdCgmbG9jYWwtPnR4X3BlbmRpbmdfdGFza2xldCwgaWVlZTgwMjExX3R4X3BlbmRpbmcsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpbG9jYWwpOwotCXRhc2tsZXRfZGlzYWJsZSgmbG9jYWwtPnR4X3BlbmRpbmdfdGFza2xldCk7CiAKIAl0YXNrbGV0X2luaXQoJmxvY2FsLT50YXNrbGV0LAogCQkgICAgIGllZWU4MDIxMV90YXNrbGV0X2hhbmRsZXIsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGxvY2FsKTsKLQl0YXNrbGV0X2Rpc2FibGUoJmxvY2FsLT50YXNrbGV0KTsKIAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxvY2FsLT5za2JfcXVldWUpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxvY2FsLT5za2JfcXVldWVfdW5yZWxpYWJsZSk7CkBAIC03NTUsMzAgKzcyOSwxMSBAQAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYWxsb2NfaHcpOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tYXN0ZXJfb3BzID0gewotCS5uZG9fc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RhcnRfeG1pdCwKLQkubmRvX29wZW4gPSBpZWVlODAyMTFfbWFzdGVyX29wZW4sCi0JLm5kb19zdG9wID0gaWVlZTgwMjExX21hc3Rlcl9zdG9wLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX21hc3Rlcl9zZXRfbXVsdGljYXN0X2xpc3QsCi0JLm5kb19zZWxlY3RfcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlLAotfTsKLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX21hc3Rlcl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbWRldikKLXsKLQltZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKLQltZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9tYXN0ZXJfb3BzOwotCW1kZXYtPmhlYWRlcl9vcHMgPSAmaWVlZTgwMjExX2hlYWRlcl9vcHM7Ci0JbWRldi0+dHhfcXVldWVfbGVuID0gMTAwMDsKLQltZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOwotfQotCiBpbnQgaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCWludCByZXN1bHQ7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwotCXN0cnVjdCBuZXRfZGV2aWNlICptZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgKm1wcml2OwogCWludCBjaGFubmVscywgaSwgaiwgbWF4X2JpdHJhdGVzOwogCWJvb2wgc3VwcF9odDsKIAlzdGF0aWMgY29uc3QgdTMyIGNpcGhlcl9zdWl0ZXNbXSA9IHsKQEAgLTgxOCw5ICs3NzMsOSBAQAogCQlzdXBwX2h0ID0gc3VwcF9odCB8fCBzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZDsKIAl9CiAKLQlsb2NhbC0+aW50X3NjYW5fcmVxLm5fY2hhbm5lbHMgPSBjaGFubmVsczsKLQlsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSAqIGNoYW5uZWxzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxvY2FsLT5pbnRfc2Nhbl9yZXEuY2hhbm5lbHMpCisJbG9jYWwtPmludF9zY2FuX3JlcSA9IGt6YWxsb2Moc2l6ZW9mKCpsb2NhbC0+aW50X3NjYW5fcmVxKSArCisJCQkJICAgICAgc2l6ZW9mKHZvaWQgKikgKiBjaGFubmVscywgR0ZQX0tFUk5FTCk7CisJaWYgKCFsb2NhbC0+aW50X3NjYW5fcmVxKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIGlmIGxvdy1sZXZlbCBkcml2ZXIgc3VwcG9ydHMgQVAsIHdlIGFsc28gc3VwcG9ydCBWTEFOICovCkBAIC04NzcsMTkgKzgzMiw5IEBACiAJaWYgKGh3LT5xdWV1ZXMgPiBJRUVFODAyMTFfTUFYX1FVRVVFUykKIAkJaHctPnF1ZXVlcyA9IElFRUU4MDIxMV9NQVhfUVVFVUVTOwogCi0JbWRldiA9IGFsbG9jX25ldGRldl9tcShzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiksCi0JCQkgICAgICAgIndtYXN0ZXIlZCIsIGllZWU4MDIxMV9tYXN0ZXJfc2V0dXAsCi0JCQkgICAgICAgaHctPnF1ZXVlcyk7Ci0JaWYgKCFtZGV2KQotCQlnb3RvIGZhaWxfbWRldl9hbGxvYzsKLQotCW1wcml2ID0gbmV0ZGV2X3ByaXYobWRldik7Ci0JbXByaXYtPmxvY2FsID0gbG9jYWw7Ci0JbG9jYWwtPm1kZXYgPSBtZGV2OwotCi0JbG9jYWwtPmh3LndvcmtxdWV1ZSA9CisJbG9jYWwtPndvcmtxdWV1ZSA9CiAJCWNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7Ci0JaWYgKCFsb2NhbC0+aHcud29ya3F1ZXVlKSB7CisJaWYgKCFsb2NhbC0+d29ya3F1ZXVlKSB7CiAJCXJlc3VsdCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbF93b3JrcXVldWU7CiAJfQpAQCAtOTIxLDE3ICs4NjYsNiBAQAogCX0KIAogCXJ0bmxfbG9jaygpOwotCXJlc3VsdCA9IGRldl9hbGxvY19uYW1lKGxvY2FsLT5tZGV2LCBsb2NhbC0+bWRldi0+bmFtZSk7Ci0JaWYgKHJlc3VsdCA8IDApCi0JCWdvdG8gZmFpbF9kZXY7Ci0KLQltZW1jcHkobG9jYWwtPm1kZXYtPmRldl9hZGRyLCBsb2NhbC0+aHcud2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwotCVNFVF9ORVRERVZfREVWKGxvY2FsLT5tZGV2LCB3aXBoeV9kZXYobG9jYWwtPmh3LndpcGh5KSk7Ci0JbG9jYWwtPm1kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTkVUTlNfTE9DQUw7Ci0KLQlyZXN1bHQgPSByZWdpc3Rlcl9uZXRkZXZpY2UobG9jYWwtPm1kZXYpOwotCWlmIChyZXN1bHQgPCAwKQotCQlnb3RvIGZhaWxfZGV2OwogCiAJcmVzdWx0ID0gaWVlZTgwMjExX2luaXRfcmF0ZV9jdHJsX2FsZyhsb2NhbCwKIAkJCQkJICAgICAgaHctPnJhdGVfY29udHJvbF9hbGdvcml0aG0pOwpAQCAtOTU2LDEzICs4OTAsMTMgQEAKIAogCS8qIGFsbG9jIGludGVybmFsIHNjYW4gcmVxdWVzdCAqLwogCWkgPSAwOwotCWxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHMgPSAmbG9jYWwtPnNjYW5fc3NpZDsKLQlsb2NhbC0+aW50X3NjYW5fcmVxLm5fc3NpZHMgPSAxOworCWxvY2FsLT5pbnRfc2Nhbl9yZXEtPnNzaWRzID0gJmxvY2FsLT5zY2FuX3NzaWQ7CisJbG9jYWwtPmludF9zY2FuX3JlcS0+bl9zc2lkcyA9IDE7CiAJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgewogCQlpZiAoIWh3LT53aXBoeS0+YmFuZHNbYmFuZF0pCiAJCQljb250aW51ZTsKIAkJZm9yIChqID0gMDsgaiA8IGh3LT53aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7IGorKykgewotCQkJbG9jYWwtPmludF9zY2FuX3JlcS5jaGFubmVsc1tpXSA9CisJCQlsb2NhbC0+aW50X3NjYW5fcmVxLT5jaGFubmVsc1tpXSA9CiAJCQkJJmh3LT53aXBoeS0+YmFuZHNbYmFuZF0tPmNoYW5uZWxzW2pdOwogCQkJaSsrOwogCQl9CkBAIC05ODQsMjMgKzkxOCwxNyBAQAogCWllZWU4MDIxMV9sZWRfZXhpdChsb2NhbCk7CiAJaWVlZTgwMjExX3JlbW92ZV9pbnRlcmZhY2VzKGxvY2FsKTsKICBmYWlsX3JhdGU6Ci0JdW5yZWdpc3Rlcl9uZXRkZXZpY2UobG9jYWwtPm1kZXYpOwotCWxvY2FsLT5tZGV2ID0gTlVMTDsKLSBmYWlsX2RldjoKIAlydG5sX3VubG9jaygpOwogCWllZWU4MDIxMV93ZXBfZnJlZShsb2NhbCk7CiAgZmFpbF93ZXA6CiAJc3RhX2luZm9fc3RvcChsb2NhbCk7CiAgZmFpbF9zdGFfaW5mbzoKIAlkZWJ1Z2ZzX2h3X2RlbChsb2NhbCk7Ci0JZGVzdHJveV93b3JrcXVldWUobG9jYWwtPmh3LndvcmtxdWV1ZSk7CisJZGVzdHJveV93b3JrcXVldWUobG9jYWwtPndvcmtxdWV1ZSk7CiAgZmFpbF93b3JrcXVldWU6Ci0JaWYgKGxvY2FsLT5tZGV2KQotCQlmcmVlX25ldGRldihsb2NhbC0+bWRldik7Ci0gZmFpbF9tZGV2X2FsbG9jOgogCXdpcGh5X3VucmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKICBmYWlsX3dpcGh5X3JlZ2lzdGVyOgotCWtmcmVlKGxvY2FsLT5pbnRfc2Nhbl9yZXEuY2hhbm5lbHMpOworCWtmcmVlKGxvY2FsLT5pbnRfc2Nhbl9yZXEpOwogCXJldHVybiByZXN1bHQ7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yZWdpc3Rlcl9odyk7CkBAIC0xMDIyLDE1ICs5NTAsMTIgQEAKIAkgKiBiZWNhdXNlIHRoZSBkcml2ZXIgY2Fubm90IGJlIGhhbmRpbmcgdXMgZnJhbWVzIGFueQogCSAqIG1vcmUgYW5kIHRoZSB0YXNrbGV0IGlzIGtpbGxlZC4KIAkgKi8KLQotCS8qIEZpcnN0LCB3ZSByZW1vdmUgYWxsIHZpcnR1YWwgaW50ZXJmYWNlcy4gKi8KIAlpZWVlODAyMTFfcmVtb3ZlX2ludGVyZmFjZXMobG9jYWwpOwogCi0JLyogdGhlbiwgZmluYWxseSwgcmVtb3ZlIHRoZSBtYXN0ZXIgaW50ZXJmYWNlICovCi0JdW5yZWdpc3Rlcl9uZXRkZXZpY2UobG9jYWwtPm1kZXYpOwotCiAJcnRubF91bmxvY2soKTsKIAorCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5yZWNvbmZpZ19maWx0ZXIpOworCiAJaWVlZTgwMjExX2NsZWFyX3R4X3BlbmRpbmcobG9jYWwpOwogCXN0YV9pbmZvX3N0b3AobG9jYWwpOwogCXJhdGVfY29udHJvbF9kZWluaXRpYWxpemUobG9jYWwpOwpAQCAtMTA0MywxMiArOTY4LDExIEBACiAJc2tiX3F1ZXVlX3B1cmdlKCZsb2NhbC0+c2tiX3F1ZXVlKTsKIAlza2JfcXVldWVfcHVyZ2UoJmxvY2FsLT5za2JfcXVldWVfdW5yZWxpYWJsZSk7CiAKLQlkZXN0cm95X3dvcmtxdWV1ZShsb2NhbC0+aHcud29ya3F1ZXVlKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShsb2NhbC0+d29ya3F1ZXVlKTsKIAl3aXBoeV91bnJlZ2lzdGVyKGxvY2FsLT5ody53aXBoeSk7CiAJaWVlZTgwMjExX3dlcF9mcmVlKGxvY2FsKTsKIAlpZWVlODAyMTFfbGVkX2V4aXQobG9jYWwpOwotCWZyZWVfbmV0ZGV2KGxvY2FsLT5tZGV2KTsKLQlrZnJlZShsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzKTsKKwlrZnJlZShsb2NhbC0+aW50X3NjYW5fcmVxKTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcpOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaC5jIGIvbmV0L21hYzgwMjExL21lc2guYwppbmRleCAxMWNmNDViLi5mNzM2NGU1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoLmMKQEAgLTE4LDggKzE4LDExIEBACiAjZGVmaW5lIFBQX09GRlNFVCAJMQkJLyogUGF0aCBTZWxlY3Rpb24gUHJvdG9jb2wgKi8KICNkZWZpbmUgUE1fT0ZGU0VUCTUJCS8qIFBhdGggU2VsZWN0aW9uIE1ldHJpYyAgICovCiAjZGVmaW5lIENDX09GRlNFVAk5CQkvKiBDb25nZXN0aW9uIENvbnRyb2wgTW9kZSAqLwotI2RlZmluZSBDQVBBQl9PRkZTRVQgMTcKLSNkZWZpbmUgQUNDRVBUX1BMSU5LUyAweDgwCisjZGVmaW5lIFNQX09GRlNFVAkxMwkJLyogU3luY2hyb25pemF0aW9uIFByb3RvY29sICovCisjZGVmaW5lIEFVVEhfT0ZGU0VUCTE3CQkvKiBBdXRoZW50aWNhdGlvbiBQcm90b2NvbCAqLworI2RlZmluZSBDQVBBQl9PRkZTRVQgCTIyCisjZGVmaW5lIENBUEFCX0FDQ0VQVF9QTElOS1MgMHg4MAorI2RlZmluZSBDQVBBQl9GT1JXQVJESU5HICAgIDB4MTAKIAogI2RlZmluZSBUTVJfUlVOTklOR19ISwkwCiAjZGVmaW5lIFRNUl9SVU5OSU5HX01QCTEKQEAgLTQ3LDE0ICs1MCwxNCBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKIAotCWlmbXNoLT5ob3VzZWtlZXBpbmcgPSB0cnVlOworCWlmbXNoLT53cmtxX2ZsYWdzIHw9IE1FU0hfV09SS19IT1VTRUtFRVBJTkc7CiAKIAlpZiAobG9jYWwtPnF1aWVzY2luZykgewogCQlzZXRfYml0KFRNUl9SVU5OSU5HX0hLLCAmaWZtc2gtPnRpbWVyc19ydW5uaW5nKTsKIAkJcmV0dXJuOwogCX0KIAotCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbXNoLT53b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtc2gtPndvcmspOwogfQogCiAvKioKQEAgLTg0LDcgKzg3LDkgQEAKIAkJbWVtY21wKGlmbXNoLT5tZXNoX2lkLCBpZS0+bWVzaF9pZCwgaWUtPm1lc2hfaWRfbGVuKSA9PSAwICYmCiAJCW1lbWNtcChpZm1zaC0+bWVzaF9wcF9pZCwgaWUtPm1lc2hfY29uZmlnICsgUFBfT0ZGU0VULCA0KSA9PSAwICYmCiAJCW1lbWNtcChpZm1zaC0+bWVzaF9wbV9pZCwgaWUtPm1lc2hfY29uZmlnICsgUE1fT0ZGU0VULCA0KSA9PSAwICYmCi0JCW1lbWNtcChpZm1zaC0+bWVzaF9jY19pZCwgaWUtPm1lc2hfY29uZmlnICsgQ0NfT0ZGU0VULCA0KSA9PSAwKQorCQltZW1jbXAoaWZtc2gtPm1lc2hfY2NfaWQsIGllLT5tZXNoX2NvbmZpZyArIENDX09GRlNFVCwgNCkgPT0gMCAmJgorCQltZW1jbXAoaWZtc2gtPm1lc2hfc3BfaWQsIGllLT5tZXNoX2NvbmZpZyArIFNQX09GRlNFVCwgNCkgPT0gMCAmJgorCQltZW1jbXAoaWZtc2gtPm1lc2hfYXV0aF9pZCwgaWUtPm1lc2hfY29uZmlnICsgQVVUSF9PRkZTRVQsIDQpID09IDApCiAJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIGZhbHNlOwpAQCAtOTcsNyArMTAyLDcgQEAKICAqLwogYm9vbCBtZXNoX3BlZXJfYWNjZXB0c19wbGlua3Moc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmllKQogewotCXJldHVybiAoKihpZS0+bWVzaF9jb25maWcgKyBDQVBBQl9PRkZTRVQpICYgQUNDRVBUX1BMSU5LUykgIT0gMDsKKwlyZXR1cm4gKCooaWUtPm1lc2hfY29uZmlnICsgQ0FQQUJfT0ZGU0VUKSAmIENBUEFCX0FDQ0VQVF9QTElOS1MpICE9IDA7CiB9CiAKIC8qKgpAQCAtMTIzLDExICsxMjgsMTggQEAKIAogdm9pZCBtZXNoX2lkc19zZXRfZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKnN0YSkKIHsKLQl1OCBkZWZfaWRbNF0gPSB7MHgwMCwgMHgwRiwgMHhBQywgMHhmZn07CisJdTggb3VpWzNdID0gezB4MDAsIDB4MEYsIDB4QUN9OwogCi0JbWVtY3B5KHN0YS0+bWVzaF9wcF9pZCwgZGVmX2lkLCA0KTsKLQltZW1jcHkoc3RhLT5tZXNoX3BtX2lkLCBkZWZfaWQsIDQpOwotCW1lbWNweShzdGEtPm1lc2hfY2NfaWQsIGRlZl9pZCwgNCk7CisJbWVtY3B5KHN0YS0+bWVzaF9wcF9pZCwgb3VpLCBzaXplb2Yob3VpKSk7CisJbWVtY3B5KHN0YS0+bWVzaF9wbV9pZCwgb3VpLCBzaXplb2Yob3VpKSk7CisJbWVtY3B5KHN0YS0+bWVzaF9jY19pZCwgb3VpLCBzaXplb2Yob3VpKSk7CisJbWVtY3B5KHN0YS0+bWVzaF9zcF9pZCwgb3VpLCBzaXplb2Yob3VpKSk7CisJbWVtY3B5KHN0YS0+bWVzaF9hdXRoX2lkLCBvdWksIHNpemVvZihvdWkpKTsKKwlzdGEtPm1lc2hfcHBfaWRbc2l6ZW9mKG91aSldID0gMDsKKwlzdGEtPm1lc2hfcG1faWRbc2l6ZW9mKG91aSldID0gMDsKKwlzdGEtPm1lc2hfY2NfaWRbc2l6ZW9mKG91aSldID0gMHhmZjsKKwlzdGEtPm1lc2hfc3BfaWRbc2l6ZW9mKG91aSldID0gMHhmZjsKKwlzdGEtPm1lc2hfYXV0aF9pZFtzaXplb2Yob3VpKV0gPSAweDA7CiB9CiAKIGludCBtZXNoX3JtY19pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtMjQ1LDcgKzI1Nyw3IEBACiAJaWYgKHNkYXRhLT51Lm1lc2gubWVzaF9pZF9sZW4pCiAJCW1lbWNweShwb3MsIHNkYXRhLT51Lm1lc2gubWVzaF9pZCwgc2RhdGEtPnUubWVzaC5tZXNoX2lkX2xlbik7CiAKLQlwb3MgPSBza2JfcHV0KHNrYiwgMjEpOworCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTik7CiAJKnBvcysrID0gV0xBTl9FSURfTUVTSF9DT05GSUc7CiAJKnBvcysrID0gSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTjsKIAkvKiBWZXJzaW9uICovCkBAIC0yNjMsMTUgKzI3NSwyMiBAQAogCW1lbWNweShwb3MsIHNkYXRhLT51Lm1lc2gubWVzaF9jY19pZCwgNCk7CiAJcG9zICs9IDQ7CiAKLQkvKiBDaGFubmVsIHByZWNlZGVuY2U6Ci0JICogTm90IHJ1bm5pbmcgc2ltcGxlIGNoYW5uZWwgdW5pZmljYXRpb24gcHJvdG9jb2wKLQkgKi8KLQltZW1zZXQocG9zLCAweDAwLCA0KTsKKwkvKiBTeW5jaHJvbml6YXRpb24gcHJvdG9jb2wgaWRlbnRpZmllciAqLworCW1lbWNweShwb3MsIHNkYXRhLT51Lm1lc2gubWVzaF9zcF9pZCwgNCk7CiAJcG9zICs9IDQ7CiAKKwkvKiBBdXRoZW50aWNhdGlvbiBQcm90b2NvbCBpZGVudGlmaWVyICovCisJbWVtY3B5KHBvcywgc2RhdGEtPnUubWVzaC5tZXNoX2F1dGhfaWQsIDQpOworCXBvcyArPSA0OworCisJLyogTWVzaCBGb3JtYXRpb24gSW5mbyAqLworCW1lbXNldChwb3MsIDB4MDAsIDEpOworCXBvcyArPSAxOworCiAJLyogTWVzaCBjYXBhYmlsaXR5ICovCiAJc2RhdGEtPnUubWVzaC5hY2NlcHRpbmdfcGxpbmtzID0gbWVzaF9wbGlua19hdmFpbGFibGVzKHNkYXRhKTsKLQkqcG9zKysgPSBzZGF0YS0+dS5tZXNoLmFjY2VwdGluZ19wbGlua3MgPyBBQ0NFUFRfUExJTktTIDogMHgwMDsKKwkqcG9zID0gQ0FQQUJfRk9SV0FSRElORzsKKwkqcG9zKysgfD0gc2RhdGEtPnUubWVzaC5hY2NlcHRpbmdfcGxpbmtzID8gQ0FQQUJfQUNDRVBUX1BMSU5LUyA6IDB4MDA7CiAJKnBvcysrID0gMHgwMDsKIAogCXJldHVybjsKQEAgLTMyMCwzMCArMzM5LDYgQEAKIAlyZXR1cm4gbmV3dGJsOwogfQogCi1zdGF0aWMgdm9pZCBfX21lc2hfdGFibGVfZnJlZShzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKQotewotCWtmcmVlKHRibC0+aGFzaF9idWNrZXRzKTsKLQlrZnJlZSh0YmwtPmhhc2h3bG9jayk7Ci0Ja2ZyZWUodGJsKTsKLX0KLQotdm9pZCBtZXNoX3RhYmxlX2ZyZWUoc3RydWN0IG1lc2hfdGFibGUgKnRibCwgYm9vbCBmcmVlX2xlYWZzKQotewotCXN0cnVjdCBobGlzdF9oZWFkICptZXNoX2hhc2g7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKnAsICpxOwotCWludCBpOwotCi0JbWVzaF9oYXNoID0gdGJsLT5oYXNoX2J1Y2tldHM7Ci0JZm9yIChpID0gMDsgaSA8PSB0YmwtPmhhc2hfbWFzazsgaSsrKSB7Ci0JCXNwaW5fbG9jaygmdGJsLT5oYXNod2xvY2tbaV0pOwotCQlobGlzdF9mb3JfZWFjaF9zYWZlKHAsIHEsICZtZXNoX2hhc2hbaV0pIHsKLQkJCXRibC0+ZnJlZV9ub2RlKHAsIGZyZWVfbGVhZnMpOwotCQkJYXRvbWljX2RlYygmdGJsLT5lbnRyaWVzKTsKLQkJfQotCQlzcGluX3VubG9jaygmdGJsLT5oYXNod2xvY2tbaV0pOwotCX0KLQlfX21lc2hfdGFibGVfZnJlZSh0YmwpOwotfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWVzaF9wYXRoX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTM1Nyw2MyArMzUyLDc5IEBACiAJCXJldHVybjsKIAl9CiAKLQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1zaC0+d29yayk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmlmbXNoLT53b3JrKTsKIH0KIAotc3RydWN0IG1lc2hfdGFibGUgKm1lc2hfdGFibGVfZ3JvdyhzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKQotewotCXN0cnVjdCBtZXNoX3RhYmxlICpuZXd0Ymw7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKm9sZGhhc2g7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKnAsICpxOwotCWludCBpOwotCi0JaWYgKGF0b21pY19yZWFkKCZ0YmwtPmVudHJpZXMpCi0JCQk8IHRibC0+bWVhbl9jaGFpbl9sZW4gKiAodGJsLT5oYXNoX21hc2sgKyAxKSkKLQkJZ290byBlbmRncm93OwotCi0JbmV3dGJsID0gbWVzaF90YWJsZV9hbGxvYyh0YmwtPnNpemVfb3JkZXIgKyAxKTsKLQlpZiAoIW5ld3RibCkKLQkJZ290byBlbmRncm93OwotCi0JbmV3dGJsLT5mcmVlX25vZGUgPSB0YmwtPmZyZWVfbm9kZTsKLQluZXd0YmwtPm1lYW5fY2hhaW5fbGVuID0gdGJsLT5tZWFuX2NoYWluX2xlbjsKLQluZXd0YmwtPmNvcHlfbm9kZSA9IHRibC0+Y29weV9ub2RlOwotCWF0b21pY19zZXQoJm5ld3RibC0+ZW50cmllcywgYXRvbWljX3JlYWQoJnRibC0+ZW50cmllcykpOwotCi0Jb2xkaGFzaCA9IHRibC0+aGFzaF9idWNrZXRzOwotCWZvciAoaSA9IDA7IGkgPD0gdGJsLT5oYXNoX21hc2s7IGkrKykKLQkJaGxpc3RfZm9yX2VhY2gocCwgJm9sZGhhc2hbaV0pCi0JCQlpZiAodGJsLT5jb3B5X25vZGUocCwgbmV3dGJsKSA8IDApCi0JCQkJZ290byBlcnJjb3B5OwotCi0JcmV0dXJuIG5ld3RibDsKLQotZXJyY29weToKLQlmb3IgKGkgPSAwOyBpIDw9IG5ld3RibC0+aGFzaF9tYXNrOyBpKyspIHsKLQkJaGxpc3RfZm9yX2VhY2hfc2FmZShwLCBxLCAmbmV3dGJsLT5oYXNoX2J1Y2tldHNbaV0pCi0JCQl0YmwtPmZyZWVfbm9kZShwLCAwKTsKKy8qKgorICogaWVlZTgwMjExX2ZpbGxfbWVzaF9hZGRyZXNzZXMgLSBmaWxsIGFkZHJlc3NlcyBvZiBhIGxvY2FsbHkgb3JpZ2luYXRlZCBtZXNoIGZyYW1lCisgKiBAaGRyOiAgICAJODAyLjExIGZyYW1lIGhlYWRlcgorICogQGZjOgkJZnJhbWUgY29udHJvbCBmaWVsZAorICogQG1lc2hkYToJZGVzdGluYXRpb24gYWRkcmVzcyBpbiB0aGUgbWVzaAorICogQG1lc2hzYToJc291cmNlIGFkZHJlc3MgYWRkcmVzcyBpbiB0aGUgbWVzaC4gIFNhbWUgYXMgVEEsIGFzIGZyYW1lIGlzCisgKiAgICAgICAgICAgICAgbG9jYWxseSBvcmlnaW5hdGVkLgorICoKKyAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSA4MDIuMTEgKGRvZXMgbm90IGluY2x1ZGUgYSBtZXNoIGNvbnRyb2wgaGVhZGVyKQorICovCitpbnQgaWVlZTgwMjExX2ZpbGxfbWVzaF9hZGRyZXNzZXMoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgX19sZTE2ICpmYywgY2hhcgorCQkqbWVzaGRhLCBjaGFyICptZXNoc2EpIHsKKwlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIobWVzaGRhKSkgeworCQkqZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTKTsKKwkJLyogREEgVEEgU0EgKi8KKwkJbWVtY3B5KGhkci0+YWRkcjEsIG1lc2hkYSwgRVRIX0FMRU4pOworCQltZW1jcHkoaGRyLT5hZGRyMiwgbWVzaHNhLCBFVEhfQUxFTik7CisJCW1lbWNweShoZHItPmFkZHIzLCBtZXNoc2EsIEVUSF9BTEVOKTsKKwkJcmV0dXJuIDI0OworCX0gZWxzZSB7CisJCSpmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMgfAorCQkJCUlFRUU4MDIxMV9GQ1RMX1RPRFMpOworCQkvKiBSQSBUQSBEQSBTQSAqLworCQltZW1zZXQoaGRyLT5hZGRyMSwgMCwgRVRIX0FMRU4pOyAgIC8qIFJBIGlzIHJlc29sdmVkIGxhdGVyICovCisJCW1lbWNweShoZHItPmFkZHIyLCBtZXNoc2EsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGhkci0+YWRkcjMsIG1lc2hkYSwgRVRIX0FMRU4pOworCQltZW1jcHkoaGRyLT5hZGRyNCwgbWVzaHNhLCBFVEhfQUxFTik7CisJCXJldHVybiAzMDsKIAl9Ci0JX19tZXNoX3RhYmxlX2ZyZWUobmV3dGJsKTsKLWVuZGdyb3c6Ci0JcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgogICogaWVlZTgwMjExX25ld19tZXNoX2hlYWRlciAtIGNyZWF0ZSBhIG5ldyBtZXNoIGhlYWRlcgogICogQG1lc2hoZHI6ICAgIHVuaW5pdGlhbGl6ZWQgbWVzaCBoZWFkZXIKICAqIEBzZGF0YToJbWVzaCBpbnRlcmZhY2UgdG8gYmUgdXNlZAorICogQGFkZHI0OglhZGRyNCBvZiB0aGUgbWVzaCBmcmFtZSAoMXN0IGluIGFlIGhlYWRlcikKKyAqICAgICAgICAgICAgICBtYXkgYmUgTlVMTAorICogQGFkZHI1OglhZGRyNSBvZiB0aGUgbWVzaCBmcmFtZSAoMXN0IG9yIDJuZCBpbiBhZSBoZWFkZXIpCisgKiAgICAgICAgICAgICAgbWF5IGJlIE5VTEwgdW5sZXNzIGFkZHI2IGlzIHByZXNlbnQKKyAqIEBhZGRyNjoJYWRkcjYgb2YgdGhlIG1lc2ggZnJhbWUgKDJuZCBvciAzcmQgaW4gYWUgaGVhZGVyKQorICogCQltYXkgYmUgTlVMTCB1bmxlc3MgYWRkcjUgaXMgcHJlc2VudAogICoKICAqIFJldHVybiB0aGUgaGVhZGVyIGxlbmd0aC4KICAqLwogaW50IGllZWU4MDIxMV9uZXdfbWVzaF9oZWFkZXIoc3RydWN0IGllZWU4MDIxMXNfaGRyICptZXNoaGRyLAotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKKwkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmFkZHI0LAorCQljaGFyICphZGRyNSwgY2hhciAqYWRkcjYpCiB7Ci0JbWVzaGhkci0+ZmxhZ3MgPSAwOworCWludCBhZWxlbiA9IDA7CisJbWVtc2V0KG1lc2hoZHIsIDAsIHNpemVvZihtZXNoaGRyKSk7CiAJbWVzaGhkci0+dHRsID0gc2RhdGEtPnUubWVzaC5tc2hjZmcuZG90MTFNZXNoVFRMOwogCXB1dF91bmFsaWduZWQoY3B1X3RvX2xlMzIoc2RhdGEtPnUubWVzaC5tZXNoX3NlcW51bSksICZtZXNoaGRyLT5zZXFudW0pOwogCXNkYXRhLT51Lm1lc2gubWVzaF9zZXFudW0rKzsKLQotCXJldHVybiA2OworCWlmIChhZGRyNCkgeworCQltZXNoaGRyLT5mbGFncyB8PSBNRVNIX0ZMQUdTX0FFX0E0OworCQlhZWxlbiArPSBFVEhfQUxFTjsKKwkJbWVtY3B5KG1lc2hoZHItPmVhZGRyMSwgYWRkcjQsIEVUSF9BTEVOKTsKKwl9CisJaWYgKGFkZHI1ICYmIGFkZHI2KSB7CisJCW1lc2hoZHItPmZsYWdzIHw9IE1FU0hfRkxBR1NfQUVfQTVfQTY7CisJCWFlbGVuICs9IDIgKiBFVEhfQUxFTjsKKwkJaWYgKCFhZGRyNCkgeworCQkJbWVtY3B5KG1lc2hoZHItPmVhZGRyMSwgYWRkcjUsIEVUSF9BTEVOKTsKKwkJCW1lbWNweShtZXNoaGRyLT5lYWRkcjIsIGFkZHI2LCBFVEhfQUxFTik7CisJCX0gZWxzZSB7CisJCQltZW1jcHkobWVzaGhkci0+ZWFkZHIyLCBhZGRyNSwgRVRIX0FMRU4pOworCQkJbWVtY3B5KG1lc2hoZHItPmVhZGRyMywgYWRkcjYsIEVUSF9BTEVOKTsKKwkJfQorCX0KKwlyZXR1cm4gNiArIGFlbGVuOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWVzaF9ob3VzZWtlZXBpbmcoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCkBAIC00MzMsNyArNDQ0LDYgQEAKIAlpZiAoZnJlZV9wbGlua3MgIT0gc2RhdGEtPnUubWVzaC5hY2NlcHRpbmdfcGxpbmtzKQogCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OKTsKIAotCWlmbXNoLT5ob3VzZWtlZXBpbmcgPSBmYWxzZTsKIAltb2RfdGltZXIoJmlmbXNoLT5ob3VzZWtlZXBpbmdfdGltZXIsCiAJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgSUVFRTgwMjExX01FU0hfSE9VU0VLRUVQSU5HX0lOVEVSVkFMKSk7CiB9CkBAIC00NzAsMTAgKzQ4MCwxMiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAotCWlmbXNoLT5ob3VzZWtlZXBpbmcgPSB0cnVlOwotCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbXNoLT53b3JrKTsKKwlpZm1zaC0+d3JrcV9mbGFncyB8PSBNRVNIX1dPUktfSE9VU0VLRUVQSU5HOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1zaC0+d29yayk7CisJc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gTUVTSF9ERUZBVUxUX0JFQUNPTl9JTlRFUlZBTDsKIAlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OIHwKLQkJCQkJCUJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKKwkJCQkJCUJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEIHwKKwkJCQkJCUJTU19DSEFOR0VEX0JFQUNPTl9JTlQpOwogfQogCiB2b2lkIGllZWU4MDIxMV9zdG9wX21lc2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCkBAIC01NjgsNyArNTgwLDcgQEAKIAogCWlmbXNoID0gJnNkYXRhLT51Lm1lc2g7CiAKLQlyeF9zdGF0dXMgPSAoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKikgc2tiLT5jYjsKKwlyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAJc3R5cGUgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKSAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFOwogCkBAIC01OTcsNyArNjA5LDcgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCiAJCXJldHVybjsKIAotCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKQorCWlmIChsb2NhbC0+c2Nhbm5pbmcpCiAJCXJldHVybjsKIAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmlmbXNoLT5za2JfcXVldWUpKSkKQEAgLTYwOCw3ICs2MjAsMTMgQEAKIAkJICAgICAgIGlmbXNoLT5sYXN0X3ByZXEgKyBtc2Vjc190b19qaWZmaWVzKGlmbXNoLT5tc2hjZmcuZG90MTFNZXNoSFdNUHByZXFNaW5JbnRlcnZhbCkpKQogCQltZXNoX3BhdGhfc3RhcnRfZGlzY292ZXJ5KHNkYXRhKTsKIAotCWlmIChpZm1zaC0+aG91c2VrZWVwaW5nKQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTUVTSF9XT1JLX0dST1dfTVBBVEhfVEFCTEUsICZpZm1zaC0+d3JrcV9mbGFncykpCisJCW1lc2hfbXBhdGhfdGFibGVfZ3JvdygpOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNRVNIX1dPUktfR1JPV19NUEFUSF9UQUJMRSwgJmlmbXNoLT53cmtxX2ZsYWdzKSkKKwkJbWVzaF9tcHBfdGFibGVfZ3JvdygpOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNRVNIX1dPUktfSE9VU0VLRUVQSU5HLCAmaWZtc2gtPndya3FfZmxhZ3MpKQogCQlpZWVlODAyMTFfbWVzaF9ob3VzZWtlZXBpbmcoc2RhdGEsIGlmbXNoKTsKIH0KIApAQCAtNjE5LDcgKzYzNyw3IEBACiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpCiAJCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQotCQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUubWVzaC53b3JrKTsKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZzZGF0YS0+dS5tZXNoLndvcmspOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCkBAIC02NzEsOCArNjg5LDcgQEAKIH0KIAogaWVlZTgwMjExX3J4X3Jlc3VsdAotaWVlZTgwMjExX21lc2hfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCitpZWVlODAyMTFfbWVzaF9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKQEAgLTY4NiwxMiArNzAzLDE0IEBACiAJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKIAogCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgeworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKKwkJaWYgKHNrYi0+bGVuIDwgSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSkKKwkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKLQkJbWVtY3B5KHNrYi0+Y2IsIHJ4X3N0YXR1cywgc2l6ZW9mKCpyeF9zdGF0dXMpKTsKIAkJc2tiX3F1ZXVlX3RhaWwoJmlmbXNoLT5za2JfcXVldWUsIHNrYik7Ci0JCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbXNoLT53b3JrKTsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmlmbXNoLT53b3JrKTsKIAkJcmV0dXJuIFJYX1FVRVVFRDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmggYi9uZXQvbWFjODAyMTEvbWVzaC5oCmluZGV4IGM3ZDcyODEuLmRkMWMxOTMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmgKKysrIGIvbmV0L21hYzgwMjExL21lc2guaApAQCAtNDQsNiArNDQsMjMgQEAKIH07CiAKIC8qKgorICogZW51bSBtZXNoX2RlZmVycmVkX3Rhc2tfZmxhZ3MgLSBtYWM4MDIxMSBtZXNoIGRlZmVycmVkIHRhc2tzCisgKgorICoKKyAqCisgKiBATUVTSF9XT1JLX0hPVVNFS0VFUElORzogcnVuIHRoZSBwZXJpb2RpYyBtZXNoIGhvdXNla2VlcGluZyB0YXNrcworICogQE1FU0hfV09SS19HUk9XX01QQVRIX1RBQkxFOiB0aGUgbWVzaCBwYXRoIHRhYmxlIGlzIGZ1bGwgYW5kIG5lZWRzCisgKiB0byBncm93LgorICogQE1FU0hfV09SS19HUk9XX01QUF9UQUJMRTogdGhlIG1lc2ggcG9ydGFscyB0YWJsZSBpcyBmdWxsIGFuZCBuZWVkcyB0bworICogZ3JvdworICovCitlbnVtIG1lc2hfZGVmZXJyZWRfdGFza19mbGFncyB7CisJTUVTSF9XT1JLX0hPVVNFS0VFUElORywKKwlNRVNIX1dPUktfR1JPV19NUEFUSF9UQUJMRSwKKwlNRVNIX1dPUktfR1JPV19NUFBfVEFCTEUsCit9OworCisvKioKICAqIHN0cnVjdCBtZXNoX3BhdGggLSBtYWM4MDIxMSBtZXNoIHBhdGggc3RydWN0dXJlCiAgKgogICogQGRzdDogbWVzaCBwYXRoIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzCkBAIC02MSw3ICs3OCw3IEBACiAgKiAJcmV0cnkKICAqIEBkaXNjb3ZlcnlfcmV0cmllczogbnVtYmVyIG9mIGRpc2NvdmVyeSByZXRyaWVzCiAgKiBAZmxhZ3M6IG1lc2ggcGF0aCBmbGFncywgYXMgc3BlY2lmaWVkIG9uICZlbnVtIG1lc2hfcGF0aF9mbGFncwotICogQHN0YXRlX2xvY2s6IG1lc2ggcGF0IHN0YXRlIGxvY2sKKyAqIEBzdGF0ZV9sb2NrOiBtZXNoIHBhdGggc3RhdGUgbG9jawogICoKICAqCiAgKiBUaGUgY29tYmluYXRpb24gb2YgZHN0IGFuZCBzZGF0YSBpcyB1bmlxdWUgaW4gdGhlIG1lc2ggcGF0aCB0YWJsZS4gU2luY2UgdGhlCkBAIC0xNzQsNiArMTkxLDcgQEAKICAqLwogI2RlZmluZSBNRVNIX1BBVEhfUkVGUkVTSF9USU1FCQkJMTAwMAogI2RlZmluZSBNRVNIX01JTl9ESVNDT1ZFUllfVElNRU9VVCAoMiAqIE1FU0hfRElBTV9UUkFWRVJTQUxfVElNRSkKKyNkZWZpbmUgTUVTSF9ERUZBVUxUX0JFQUNPTl9JTlRFUlZBTAkJMTAwMCAJLyogaW4gMTAyNCB1cyB1bml0cyAqLwogCiAjZGVmaW5lIE1FU0hfTUFYX1BSRVFfUkVUUklFUyA0CiAjZGVmaW5lIE1FU0hfUEFUSF9FWFBJUkUgKDYwMCAqIEhaKQpAQCAtMTkzLDggKzIxMSwxMSBAQAogCiAvKiBQdWJsaWMgaW50ZXJmYWNlcyAqLwogLyogVmFyaW91cyAqLworaW50IGllZWU4MDIxMV9maWxsX21lc2hfYWRkcmVzc2VzKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIF9fbGUxNiAqZmMsCisJCWNoYXIgKmRhLCBjaGFyICpzYSk7CiBpbnQgaWVlZTgwMjExX25ld19tZXNoX2hlYWRlcihzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1lc2hoZHIsCi0JCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKKwkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmFkZHI0LAorCQljaGFyICphZGRyNSwgY2hhciAqYWRkcjYpOwogaW50IG1lc2hfcm1jX2NoZWNrKHU4ICphZGRyLCBzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1lc2hfaGRyLAogCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiBib29sIG1lc2hfbWF0Y2hlc19sb2NhbChzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqaWUsCkBAIC0yMDUsMTEgKzIyNiwxMiBAQAogdm9pZCBtZXNoX3JtY19mcmVlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIGludCBtZXNoX3JtY19pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExc19pbml0KHZvaWQpOwordm9pZCBpZWVlODAyMTFzX3VwZGF0ZV9tZXRyaWMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCXN0cnVjdCBzdGFfaW5mbyAqc3RhaW5mbywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGllZWU4MDIxMXNfc3RvcCh2b2lkKTsKIHZvaWQgaWVlZTgwMjExX21lc2hfaW5pdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiBpZWVlODAyMTFfcnhfcmVzdWx0Ci1pZWVlODAyMTFfbWVzaF9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7CitpZWVlODAyMTFfbWVzaF9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgaWVlZTgwMjExX3N0YXJ0X21lc2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogdm9pZCBpZWVlODAyMTFfc3RvcF9tZXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIApAQCAtMjQ3LDcgKzI2OSw4IEBACiAvKiBNZXNoIHRhYmxlcyAqLwogc3RydWN0IG1lc2hfdGFibGUgKm1lc2hfdGFibGVfYWxsb2MoaW50IHNpemVfb3JkZXIpOwogdm9pZCBtZXNoX3RhYmxlX2ZyZWUoc3RydWN0IG1lc2hfdGFibGUgKnRibCwgYm9vbCBmcmVlX2xlYWZzKTsKLXN0cnVjdCBtZXNoX3RhYmxlICptZXNoX3RhYmxlX2dyb3coc3RydWN0IG1lc2hfdGFibGUgKnRibCk7Cit2b2lkIG1lc2hfbXBhdGhfdGFibGVfZ3Jvdyh2b2lkKTsKK3ZvaWQgbWVzaF9tcHBfdGFibGVfZ3Jvdyh2b2lkKTsKIHUzMiBtZXNoX3RhYmxlX2hhc2godTggKmFkZHIsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQlzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKTsKIC8qIE1lc2ggcGF0aHMgKi8KQEAgLTI2Niw2ICsyODksOCBAQAogdm9pZCBtZXNoX3BhdGhfcXVpZXNjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIG1lc2hfcGF0aF9yZXN0YXJ0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIAorZXh0ZXJuIGludCBtZXNoX3BhdGhzX2dlbmVyYXRpb247CisKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogZXh0ZXJuIGludCBtZXNoX2FsbG9jYXRlZDsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCmluZGV4IGY0OWVmMjguLmUxMmE3ODYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKQEAgLTIwMSw2ICsyMDEsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBpZWVlODAyMTFzX3VwZGF0ZV9tZXRyaWMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCXN0cnVjdCBzdGFfaW5mbyAqc3RhaW5mbywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlpbnQgZmFpbGVkOworCisJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm47CisKKwlmYWlsZWQgPSAhKHR4aW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spOworCisJLyogbW92aW5nIGF2ZXJhZ2UsIHNjYWxlZCB0byAxMDAgKi8KKwlzdGFpbmZvLT5mYWlsX2F2ZyA9ICgoODAgKiBzdGFpbmZvLT5mYWlsX2F2ZyArIDUpIC8gMTAwICsgMjAgKiBmYWlsZWQpOworCWlmIChzdGFpbmZvLT5mYWlsX2F2ZyA+IDk1KQorCQltZXNoX3BsaW5rX2Jyb2tlbihzdGFpbmZvKTsKK30KKwogc3RhdGljIHUzMiBhaXJ0aW1lX2xpbmtfbWV0cmljX2dldChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKQEAgLTM5Nyw3ICs0MTUsOCBAQAogCiBzdGF0aWMgdm9pZCBod21wX3ByZXFfZnJhbWVfcHJvY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCSAgICB1OCAqcHJlcV9lbGVtLCB1MzIgbWV0cmljKSB7CisJCQkJICAgIHU4ICpwcmVxX2VsZW0sIHUzMiBtZXRyaWMpCit7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tZXNoICppZm1zaCA9ICZzZGF0YS0+dS5tZXNoOwogCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoOwogCXU4ICpkc3RfYWRkciwgKm9yaWdfYWRkcjsKQEAgLTQzMCw3ICs0NDksNyBAQAogCQkJaWYgKCghKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9EU05fVkFMSUQpKSB8fAogCQkJCQlEU05fTFQobXBhdGgtPmRzbiwgZHN0X2RzbikpIHsKIAkJCQltcGF0aC0+ZHNuID0gZHN0X2RzbjsKLQkJCQltcGF0aC0+ZmxhZ3MgJj0gTUVTSF9QQVRIX0RTTl9WQUxJRDsKKwkJCQltcGF0aC0+ZmxhZ3MgfD0gTUVTSF9QQVRIX0RTTl9WQUxJRDsKIAkJCX0gZWxzZSBpZiAoKCEoZHN0X2ZsYWdzICYgTVBfRl9ETykpICYmCiAJCQkJCShtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfQUNUSVZFKSkgewogCQkJCXJlcGx5ID0gdHJ1ZTsKQEAgLTQ3OCw2ICs0OTcsNyBAQAogCQkJCWhvcGNvdW50LCB0dGwsIGNwdV90b19sZTMyKGxpZmV0aW1lKSwKIAkJCQljcHVfdG9fbGUzMihtZXRyaWMpLCBjcHVfdG9fbGUzMihwcmVxX2lkKSwKIAkJCQlzZGF0YSk7CisJCWlmbXNoLT5tc2hzdGF0cy5md2RlZF9tY2FzdCsrOwogCQlpZm1zaC0+bXNoc3RhdHMuZndkZWRfZnJhbWVzKys7CiAJfQogfQpAQCAtNTM2LDYgKzU1Niw4IEBACiAJCWNwdV90b19sZTMyKGxpZmV0aW1lKSwgY3B1X3RvX2xlMzIobWV0cmljKSwKIAkJMCwgc2RhdGEpOwogCXJjdV9yZWFkX3VubG9jaygpOworCisJc2RhdGEtPnUubWVzaC5tc2hzdGF0cy5md2RlZF91bmljYXN0Kys7CiAJc2RhdGEtPnUubWVzaC5tc2hzdGF0cy5md2RlZF9mcmFtZXMrKzsKIAlyZXR1cm47CiAKQEAgLTY2MCwxNCArNjgyLDE0IEBACiAJc3Bpbl91bmxvY2soJmlmbXNoLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZm1zaC0+bGFzdF9wcmVxICsgbWluX3ByZXFfaW50X2ppZmYoc2RhdGEpKSkKLQkJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbXNoLT53b3JrKTsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJnNkYXRhLT5sb2NhbC0+aHcsICZpZm1zaC0+d29yayk7CiAKIAllbHNlIGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBpZm1zaC0+bGFzdF9wcmVxKSkgewogCQkvKiBhdm9pZCBsb25nIHdhaXQgaWYgZGlkIG5vdCBzZW5kIHByZXFzIGZvciBhIGxvbmcgdGltZQogCQkgKiBhbmQgamlmZmllcyB3cmFwcGVkIGFyb3VuZAogCQkgKi8KIAkJaWZtc2gtPmxhc3RfcHJlcSA9IGppZmZpZXMgLSBtaW5fcHJlcV9pbnRfamlmZihzZGF0YSkgLSAxOwotCQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtc2gtPndvcmspOworCQlpZWVlODAyMTFfcXVldWVfd29yaygmc2RhdGEtPmxvY2FsLT5odywgJmlmbXNoLT53b3JrKTsKIAl9IGVsc2UKIAkJbW9kX3RpbWVyKCZpZm1zaC0+bWVzaF9wYXRoX3RpbWVyLCBpZm1zaC0+bGFzdF9wcmVxICsKIAkJCQkJCW1pbl9wcmVxX2ludF9qaWZmKHNkYXRhKSk7CkBAIC02ODYsMTEgKzcwOCwxMSBAQAogCXU4IHR0bCwgZHN0X2ZsYWdzOwogCXUzMiBsaWZldGltZTsKIAotCXNwaW5fbG9jaygmaWZtc2gtPm1lc2hfcHJlcV9xdWV1ZV9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmlmbXNoLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CiAJaWYgKCFpZm1zaC0+cHJlcV9xdWV1ZV9sZW4gfHwKIAkJdGltZV9iZWZvcmUoamlmZmllcywgaWZtc2gtPmxhc3RfcHJlcSArCiAJCQkJbWluX3ByZXFfaW50X2ppZmYoc2RhdGEpKSkgewotCQlzcGluX3VubG9jaygmaWZtc2gtPm1lc2hfcHJlcV9xdWV1ZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmlmbXNoLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY5OCw3ICs3MjAsNyBAQAogCQkJc3RydWN0IG1lc2hfcHJlcV9xdWV1ZSwgbGlzdCk7CiAJbGlzdF9kZWwoJnByZXFfbm9kZS0+bGlzdCk7CiAJLS1pZm1zaC0+cHJlcV9xdWV1ZV9sZW47Ci0Jc3Bpbl91bmxvY2soJmlmbXNoLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmlmbXNoLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbXBhdGggPSBtZXNoX3BhdGhfbG9va3VwKHByZXFfbm9kZS0+ZHN0LCBzZGF0YSk7CkBAIC03ODQsNyArODA2LDYgQEAKIAkJbWVzaF9wYXRoX2FkZChkc3RfYWRkciwgc2RhdGEpOwogCQltcGF0aCA9IG1lc2hfcGF0aF9sb29rdXAoZHN0X2FkZHIsIHNkYXRhKTsKIAkJaWYgKCFtcGF0aCkgewotCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJc2RhdGEtPnUubWVzaC5tc2hzdGF0cy5kcm9wcGVkX2ZyYW1lc19ub19yb3V0ZSsrOwogCQkJZXJyID0gLUVOT1NQQzsKIAkJCWdvdG8gZW5kbG9va3VwOwpAQCAtNzkyLDcgKzgxMyw3IEBACiAJfQogCiAJaWYgKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9BQ1RJVkUpIHsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbXBhdGgtPmV4cF90aW1lIC0KKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbXBhdGgtPmV4cF90aW1lICsKIAkJCW1zZWNzX3RvX2ppZmZpZXMoc2RhdGEtPnUubWVzaC5tc2hjZmcucGF0aF9yZWZyZXNoX3RpbWUpKQogCQkJCSYmICFtZW1jbXAoc2RhdGEtPmRldi0+ZGV2X2FkZHIsIGhkci0+YWRkcjQsCiAJCQkJCSAgIEVUSF9BTEVOKQpAQCAtODA0LDE3ICs4MjUsMTcgQEAKIAkJbWVtY3B5KGhkci0+YWRkcjEsIG1wYXRoLT5uZXh0X2hvcC0+c3RhLmFkZHIsCiAJCQkJRVRIX0FMRU4pOwogCX0gZWxzZSB7CisJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAkJaWYgKCEobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX1JFU09MVklORykpIHsKIAkJCS8qIFN0YXJ0IGRpc2NvdmVyeSBvbmx5IGlmIGl0IGlzIG5vdCBydW5uaW5nIHlldCAqLwogCQkJbWVzaF9xdWV1ZV9wcmVxKG1wYXRoLCBQUkVRX1FfRl9TVEFSVCk7CiAJCX0KIAogCQlpZiAoc2tiX3F1ZXVlX2xlbigmbXBhdGgtPmZyYW1lX3F1ZXVlKSA+PQotCQkJCU1FU0hfRlJBTUVfUVVFVUVfTEVOKSB7Ci0JCQlza2JfdG9fZnJlZSA9IG1wYXRoLT5mcmFtZV9xdWV1ZS5uZXh0OwotCQkJc2tiX3VubGluayhza2JfdG9fZnJlZSwgJm1wYXRoLT5mcmFtZV9xdWV1ZSk7Ci0JCX0KKwkJCQlNRVNIX0ZSQU1FX1FVRVVFX0xFTikKKwkJCXNrYl90b19mcmVlID0gc2tiX2RlcXVldWUoJm1wYXRoLT5mcmFtZV9xdWV1ZSk7CiAKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HOwogCQlza2JfcXVldWVfdGFpbCgmbXBhdGgtPmZyYW1lX3F1ZXVlLCBza2IpOwogCQlpZiAoc2tiX3RvX2ZyZWUpCiAJCQltZXNoX3BhdGhfZGlzY2FyZF9mcmFtZShza2JfdG9fZnJlZSwgc2RhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCmluZGV4IDQ3OTU5N2UuLjc1MWM0ZDAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKQEAgLTM4LDYgKzM4LDcxIEBACiBzdGF0aWMgc3RydWN0IG1lc2hfdGFibGUgKm1lc2hfcGF0aHM7CiBzdGF0aWMgc3RydWN0IG1lc2hfdGFibGUgKm1wcF9wYXRoczsgLyogU3RvcmUgcGF0aHMgZm9yIE1QUCZNQVAgKi8KIAoraW50IG1lc2hfcGF0aHNfZ2VuZXJhdGlvbjsKK3N0YXRpYyB2b2lkIF9fbWVzaF90YWJsZV9mcmVlKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwpCit7CisJa2ZyZWUodGJsLT5oYXNoX2J1Y2tldHMpOworCWtmcmVlKHRibC0+aGFzaHdsb2NrKTsKKwlrZnJlZSh0YmwpOworfQorCit2b2lkIG1lc2hfdGFibGVfZnJlZShzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBib29sIGZyZWVfbGVhZnMpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKm1lc2hfaGFzaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcCwgKnE7CisJaW50IGk7CisKKwltZXNoX2hhc2ggPSB0YmwtPmhhc2hfYnVja2V0czsKKwlmb3IgKGkgPSAwOyBpIDw9IHRibC0+aGFzaF9tYXNrOyBpKyspIHsKKwkJc3Bpbl9sb2NrKCZ0YmwtPmhhc2h3bG9ja1tpXSk7CisJCWhsaXN0X2Zvcl9lYWNoX3NhZmUocCwgcSwgJm1lc2hfaGFzaFtpXSkgeworCQkJdGJsLT5mcmVlX25vZGUocCwgZnJlZV9sZWFmcyk7CisJCQlhdG9taWNfZGVjKCZ0YmwtPmVudHJpZXMpOworCQl9CisJCXNwaW5fdW5sb2NrKCZ0YmwtPmhhc2h3bG9ja1tpXSk7CisJfQorCV9fbWVzaF90YWJsZV9mcmVlKHRibCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWVzaF90YWJsZSAqbWVzaF90YWJsZV9ncm93KHN0cnVjdCBtZXNoX3RhYmxlICp0YmwpCit7CisJc3RydWN0IG1lc2hfdGFibGUgKm5ld3RibDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqb2xkaGFzaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcCwgKnE7CisJaW50IGk7CisKKwlpZiAoYXRvbWljX3JlYWQoJnRibC0+ZW50cmllcykKKwkJCTwgdGJsLT5tZWFuX2NoYWluX2xlbiAqICh0YmwtPmhhc2hfbWFzayArIDEpKQorCQlnb3RvIGVuZGdyb3c7CisKKwluZXd0YmwgPSBtZXNoX3RhYmxlX2FsbG9jKHRibC0+c2l6ZV9vcmRlciArIDEpOworCWlmICghbmV3dGJsKQorCQlnb3RvIGVuZGdyb3c7CisKKwluZXd0YmwtPmZyZWVfbm9kZSA9IHRibC0+ZnJlZV9ub2RlOworCW5ld3RibC0+bWVhbl9jaGFpbl9sZW4gPSB0YmwtPm1lYW5fY2hhaW5fbGVuOworCW5ld3RibC0+Y29weV9ub2RlID0gdGJsLT5jb3B5X25vZGU7CisJYXRvbWljX3NldCgmbmV3dGJsLT5lbnRyaWVzLCBhdG9taWNfcmVhZCgmdGJsLT5lbnRyaWVzKSk7CisKKwlvbGRoYXNoID0gdGJsLT5oYXNoX2J1Y2tldHM7CisJZm9yIChpID0gMDsgaSA8PSB0YmwtPmhhc2hfbWFzazsgaSsrKQorCQlobGlzdF9mb3JfZWFjaChwLCAmb2xkaGFzaFtpXSkKKwkJCWlmICh0YmwtPmNvcHlfbm9kZShwLCBuZXd0YmwpIDwgMCkKKwkJCQlnb3RvIGVycmNvcHk7CisKKwlyZXR1cm4gbmV3dGJsOworCitlcnJjb3B5OgorCWZvciAoaSA9IDA7IGkgPD0gbmV3dGJsLT5oYXNoX21hc2s7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9zYWZlKHAsIHEsICZuZXd0YmwtPmhhc2hfYnVja2V0c1tpXSkKKwkJCXRibC0+ZnJlZV9ub2RlKHAsIDApOworCX0KKwlfX21lc2hfdGFibGVfZnJlZShuZXd0YmwpOworZW5kZ3JvdzoKKwlyZXR1cm4gTlVMTDsKK30KKworCiAvKiBUaGlzIGxvY2sgd2lsbCBoYXZlIHRoZSBncm93IHRhYmxlIGZ1bmN0aW9uIGFzIHdyaXRlciBhbmQgYWRkIC8gZGVsZXRlIG5vZGVzCiAgKiBhcyByZWFkZXJzLiBXaGVuIHJlYWRpbmcgdGhlIHRhYmxlIChpLmUuIGRvaW5nIGxvb2t1cHMpIHdlIGFyZSB3ZWxsIHByb3RlY3RlZAogICogYnkgUkNVCkBAIC01NSw3ICsxMjAsMjUgQEAKICAqLwogdm9pZCBtZXNoX3BhdGhfYXNzaWduX25leHRob3Aoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogeworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHRtcHE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCXJjdV9hc3NpZ25fcG9pbnRlcihtcGF0aC0+bmV4dF9ob3AsIHN0YSk7CisKKwlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJnRtcHEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1wYXRoLT5mcmFtZV9xdWV1ZS5sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJm1wYXRoLT5mcmFtZV9xdWV1ZSkpICE9IE5VTEwpIHsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwkJbWVtY3B5KGhkci0+YWRkcjEsIHN0YS0+c3RhLmFkZHIsIEVUSF9BTEVOKTsKKwkJX19za2JfcXVldWVfdGFpbCgmdG1wcSwgc2tiKTsKKwl9CisKKwlza2JfcXVldWVfc3BsaWNlKCZ0bXBxLCAmbXBhdGgtPmZyYW1lX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGF0aC0+ZnJhbWVfcXVldWUubG9jaywgZmxhZ3MpOwogfQogCiAKQEAgLTE2Nyw2ICsyNTAsOCBAQAogICovCiBpbnQgbWVzaF9wYXRoX2FkZCh1OCAqZHN0LCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoID0gJnNkYXRhLT51Lm1lc2g7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsICpuZXdfbXBhdGg7CiAJc3RydWN0IG1wYXRoX25vZGUgKm5vZGUsICpuZXdfbm9kZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OwpAQCAtMTc1LDggKzI2MCw2IEBACiAJaW50IGVyciA9IDA7CiAJdTMyIGhhc2hfaWR4OwogCi0JbWlnaHRfc2xlZXAoKTsKLQogCWlmIChtZW1jbXAoZHN0LCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pID09IDApCiAJCS8qIG5ldmVyIGFkZCBvdXJzZWx2ZXMgYXMgbmVpZ2hib3VycyAqLwogCQlyZXR1cm4gLUVOT1RTVVBQOwpAQCAtMTg4LDExICsyNzEsMTEgQEAKIAkJcmV0dXJuIC1FTk9TUEM7CiAKIAllcnIgPSAtRU5PTUVNOwotCW5ld19tcGF0aCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZXNoX3BhdGgpLCBHRlBfS0VSTkVMKTsKKwluZXdfbXBhdGggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWVzaF9wYXRoKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFuZXdfbXBhdGgpCiAJCWdvdG8gZXJyX3BhdGhfYWxsb2M7CiAKLQluZXdfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtcGF0aF9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJbmV3X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXBhdGhfbm9kZSksIEdGUF9BVE9NSUMpOwogCWlmICghbmV3X25vZGUpCiAJCWdvdG8gZXJyX25vZGVfYWxsb2M7CiAKQEAgLTIyNSwyMyArMzA4LDEzIEBACiAJCW1lc2hfcGF0aHMtPm1lYW5fY2hhaW5fbGVuICogKG1lc2hfcGF0aHMtPmhhc2hfbWFzayArIDEpKQogCQlncm93ID0gMTsKIAorCW1lc2hfcGF0aHNfZ2VuZXJhdGlvbisrOworCiAJc3Bpbl91bmxvY2soJm1lc2hfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOwogCXJlYWRfdW5sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAlpZiAoZ3JvdykgewotCQlzdHJ1Y3QgbWVzaF90YWJsZSAqb2xkdGJsLCAqbmV3dGJsOwotCi0JCXdyaXRlX2xvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOwotCQlvbGR0YmwgPSBtZXNoX3BhdGhzOwotCQluZXd0YmwgPSBtZXNoX3RhYmxlX2dyb3cobWVzaF9wYXRocyk7Ci0JCWlmICghbmV3dGJsKSB7Ci0JCQl3cml0ZV91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcmN1X2Fzc2lnbl9wb2ludGVyKG1lc2hfcGF0aHMsIG5ld3RibCk7Ci0JCXdyaXRlX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7Ci0KLQkJc3luY2hyb25pemVfcmN1KCk7Ci0JCW1lc2hfdGFibGVfZnJlZShvbGR0YmwsIGZhbHNlKTsKKwkJc2V0X2JpdChNRVNIX1dPUktfR1JPV19NUEFUSF9UQUJMRSwgICZpZm1zaC0+d3JrcV9mbGFncyk7CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1zaC0+d29yayk7CiAJfQogCXJldHVybiAwOwogCkBAIC0yNTYsOSArMzI5LDQ2IEBACiAJcmV0dXJuIGVycjsKIH0KIAordm9pZCBtZXNoX21wYXRoX3RhYmxlX2dyb3codm9pZCkKK3sKKwlzdHJ1Y3QgbWVzaF90YWJsZSAqb2xkdGJsLCAqbmV3dGJsOworCisJd3JpdGVfbG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJb2xkdGJsID0gbWVzaF9wYXRoczsKKwluZXd0YmwgPSBtZXNoX3RhYmxlX2dyb3cobWVzaF9wYXRocyk7CisJaWYgKCFuZXd0YmwpIHsKKwkJd3JpdGVfdW5sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlyY3VfYXNzaWduX3BvaW50ZXIobWVzaF9wYXRocywgbmV3dGJsKTsKKwl3cml0ZV91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCisJc3luY2hyb25pemVfcmN1KCk7CisJbWVzaF90YWJsZV9mcmVlKG9sZHRibCwgZmFsc2UpOworfQorCit2b2lkIG1lc2hfbXBwX3RhYmxlX2dyb3codm9pZCkKK3sKKwlzdHJ1Y3QgbWVzaF90YWJsZSAqb2xkdGJsLCAqbmV3dGJsOworCisJd3JpdGVfbG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJb2xkdGJsID0gbXBwX3BhdGhzOworCW5ld3RibCA9IG1lc2hfdGFibGVfZ3JvdyhtcHBfcGF0aHMpOworCWlmICghbmV3dGJsKSB7CisJCXdyaXRlX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJCXJldHVybjsKKwl9CisJcmN1X2Fzc2lnbl9wb2ludGVyKG1wcF9wYXRocywgbmV3dGJsKTsKKwl3cml0ZV91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCisJc3luY2hyb25pemVfcmN1KCk7CisJbWVzaF90YWJsZV9mcmVlKG9sZHRibCwgZmFsc2UpOworfQogCiBpbnQgbXBwX3BhdGhfYWRkKHU4ICpkc3QsIHU4ICptcHAsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgKm5ld19tcGF0aDsKIAlzdHJ1Y3QgbXBhdGhfbm9kZSAqbm9kZSwgKm5ld19ub2RlOwogCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CkBAIC0yNjcsOCArMzc3LDYgQEAKIAlpbnQgZXJyID0gMDsKIAl1MzIgaGFzaF9pZHg7CiAKLQltaWdodF9zbGVlcCgpOwotCiAJaWYgKG1lbWNtcChkc3QsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgPT0gMCkKIAkJLyogbmV2ZXIgYWRkIG91cnNlbHZlcyBhcyBuZWlnaGJvdXJzICovCiAJCXJldHVybiAtRU5PVFNVUFA7CkBAIC0yNzcsMTEgKzM4NSwxMSBAQAogCQlyZXR1cm4gLUVOT1RTVVBQOwogCiAJZXJyID0gLUVOT01FTTsKLQluZXdfbXBhdGggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWVzaF9wYXRoKSwgR0ZQX0tFUk5FTCk7CisJbmV3X21wYXRoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1lc2hfcGF0aCksIEdGUF9BVE9NSUMpOwogCWlmICghbmV3X21wYXRoKQogCQlnb3RvIGVycl9wYXRoX2FsbG9jOwogCi0JbmV3X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXBhdGhfbm9kZSksIEdGUF9LRVJORUwpOworCW5ld19ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1wYXRoX25vZGUpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW5ld19ub2RlKQogCQlnb3RvIGVycl9ub2RlX2FsbG9jOwogCkBAIC0zMTUsMjAgKzQyMyw4IEBACiAJc3Bpbl91bmxvY2soJm1wcF9wYXRocy0+aGFzaHdsb2NrW2hhc2hfaWR4XSk7CiAJcmVhZF91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCWlmIChncm93KSB7Ci0JCXN0cnVjdCBtZXNoX3RhYmxlICpvbGR0YmwsICpuZXd0Ymw7Ci0KLQkJd3JpdGVfbG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7Ci0JCW9sZHRibCA9IG1wcF9wYXRoczsKLQkJbmV3dGJsID0gbWVzaF90YWJsZV9ncm93KG1wcF9wYXRocyk7Ci0JCWlmICghbmV3dGJsKSB7Ci0JCQl3cml0ZV91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcmN1X2Fzc2lnbl9wb2ludGVyKG1wcF9wYXRocywgbmV3dGJsKTsKLQkJd3JpdGVfdW5sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKLQotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJbWVzaF90YWJsZV9mcmVlKG9sZHRibCwgZmFsc2UpOworCQlzZXRfYml0KE1FU0hfV09SS19HUk9XX01QUF9UQUJMRSwgICZpZm1zaC0+d3JrcV9mbGFncyk7CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1zaC0+d29yayk7CiAJfQogCXJldHVybiAwOwogCkBAIC00NjYsNiArNTYyLDcgQEAKIAogCWVyciA9IC1FTlhJTzsKIGVuZGRlbDoKKwltZXNoX3BhdGhzX2dlbmVyYXRpb24rKzsKIAlzcGluX3VubG9jaygmbWVzaF9wYXRocy0+aGFzaHdsb2NrW2hhc2hfaWR4XSk7CiAJcmVhZF91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCXJldHVybiBlcnI7CkBAIC00ODEsMTEgKzU3OCw5IEBACiAgKi8KIHZvaWQgbWVzaF9wYXRoX3R4X3BlbmRpbmcoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJm1wYXRoLT5mcmFtZV9xdWV1ZSkpICYmCi0JCQkobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX0FDVElWRSkpCi0JCWRldl9xdWV1ZV94bWl0KHNrYik7CisJaWYgKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9BQ1RJVkUpCisJCWllZWU4MDIxMV9hZGRfcGVuZGluZ19za2JzKG1wYXRoLT5zZGF0YS0+bG9jYWwsCisJCQkJJm1wYXRoLT5mcmFtZV9xdWV1ZSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKaW5kZXggY2IxNDI1My4uZmZjYmFkNyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCkBAIC00MDksNyArNDA5LDcgQEAKIAliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUuYWN0aW9uLnUucGxpbmtfYWN0aW9uLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CiAJaWYgKG1nbXQtPnUuYWN0aW9uLnUucGxpbmtfYWN0aW9uLmFjdGlvbl9jb2RlID09IFBMSU5LX0NPTkZJUk0pIHsKIAkJYmFzZWFkZHIgKz0gNDsKLQkJYmFzZWxlbiAtPSA0OworCQliYXNlbGVuICs9IDQ7CiAJfQogCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMoYmFzZWFkZHIsIGxlbiAtIGJhc2VsZW4sICZlbGVtcyk7CiAJaWYgKCFlbGVtcy5wZWVyX2xpbmspIHsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IDA3ZTdlNDEuLjk3YTI3OGEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMjcsNDUgKzI3LDEwMSBAQAogI2luY2x1ZGUgInJhdGUuaCIKICNpbmNsdWRlICJsZWQuaCIKIAotI2RlZmluZSBJRUVFODAyMTFfQVNTT0NfU0NBTlNfTUFYX1RSSUVTIDIKICNkZWZpbmUgSUVFRTgwMjExX0FVVEhfVElNRU9VVCAoSFogLyA1KQogI2RlZmluZSBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMgMwogI2RlZmluZSBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCAoSFogLyA1KQogI2RlZmluZSBJRUVFODAyMTFfQVNTT0NfTUFYX1RSSUVTIDMKLSNkZWZpbmUgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwgKDIgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1BST0JFX1dBSVQgKEhaIC8gNSkKLSNkZWZpbmUgSUVFRTgwMjExX1BST0JFX0lETEVfVElNRSAoNjAgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwgKDEgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX01BWF9QUk9CRV9UUklFUyA1CisKKy8qCisgKiBiZWFjb24gbG9zcyBkZXRlY3Rpb24gdGltZW91dAorICogWFhYOiBzaG91bGQgZGVwZW5kIG9uIGJlYWNvbiBpbnRlcnZhbAorICovCisjZGVmaW5lIElFRUU4MDIxMV9CRUFDT05fTE9TU19USU1FCSgyICogSFopCisvKgorICogVGltZSB0aGUgY29ubmVjdGlvbiBjYW4gYmUgaWRsZSBiZWZvcmUgd2UgcHJvYmUKKyAqIGl0IHRvIHNlZSBpZiB3ZSBjYW4gc3RpbGwgdGFsayB0byB0aGUgQVAuCisgKi8KKyNkZWZpbmUgSUVFRTgwMjExX0NPTk5FQ1RJT05fSURMRV9USU1FCSgzMCAqIEhaKQorLyoKKyAqIFRpbWUgd2Ugd2FpdCBmb3IgYSBwcm9iZSByZXNwb25zZSBhZnRlciBzZW5kaW5nCisgKiBhIHByb2JlIHJlcXVlc3QgYmVjYXVzZSBvZiBiZWFjb24gbG9zcyBvciBmb3IKKyAqIGNoZWNraW5nIHRoZSBjb25uZWN0aW9uIHN0aWxsIHdvcmtzLgorICovCisjZGVmaW5lIElFRUU4MDIxMV9QUk9CRV9XQUlUCQkoSFogLyAyKQogCiAjZGVmaW5lIFRNUl9SVU5OSU5HX1RJTUVSCTAKICNkZWZpbmUgVE1SX1JVTk5JTkdfQ0hBTlNXCTEKIAorLyoKKyAqIEFsbCBjZmc4MDIxMSBmdW5jdGlvbnMgaGF2ZSB0byBiZSBjYWxsZWQgb3V0c2lkZSBhIGxvY2tlZAorICogc2VjdGlvbiBzbyB0aGF0IHRoZXkgY2FuIGFjcXVpcmUgYSBsb2NrIHRoZW1zZWx2ZXMuLi4gVGhpcworICogaXMgbXVjaCBzaW1wbGVyIHRoYW4gcXVldWluZyB1cCB0aGluZ3MgaW4gY2ZnODAyMTEsIGJ1dCB3ZQorICogZG8gbmVlZCBzb21lIGluZGlyZWN0aW9uIGZvciB0aGF0IGhlcmUuCisgKi8KK2VudW0gcnhfbWdtdF9hY3Rpb24geworCS8qIG5vIGFjdGlvbiByZXF1aXJlZCAqLworCVJYX01HTVRfTk9ORSwKKworCS8qIGNhbGxlciBtdXN0IGNhbGwgY2ZnODAyMTFfc2VuZF9yeF9hdXRoKCkgKi8KKwlSWF9NR01UX0NGRzgwMjExX0FVVEgsCisKKwkvKiBjYWxsZXIgbXVzdCBjYWxsIGNmZzgwMjExX3NlbmRfcnhfYXNzb2MoKSAqLworCVJYX01HTVRfQ0ZHODAyMTFfQVNTT0MsCisKKwkvKiBjYWxsZXIgbXVzdCBjYWxsIGNmZzgwMjExX3NlbmRfZGVhdXRoKCkgKi8KKwlSWF9NR01UX0NGRzgwMjExX0RFQVVUSCwKKworCS8qIGNhbGxlciBtdXN0IGNhbGwgY2ZnODAyMTFfc2VuZF9kaXNhc3NvYygpICovCisJUlhfTUdNVF9DRkc4MDIxMV9ESVNBU1NPQywKKworCS8qIGNhbGxlciBtdXN0IGNhbGwgY2ZnODAyMTFfYXV0aF90aW1lb3V0KCkgJiBmcmVlIHdvcmsgKi8KKwlSWF9NR01UX0NGRzgwMjExX0FVVEhfVE8sCisKKwkvKiBjYWxsZXIgbXVzdCBjYWxsIGNmZzgwMjExX2Fzc29jX3RpbWVvdXQoKSAmIGZyZWUgd29yayAqLworCVJYX01HTVRfQ0ZHODAyMTFfQVNTT0NfVE8sCit9OworCiAvKiB1dGlscyAqLworc3RhdGljIGlubGluZSB2b2lkIEFTU0VSVF9NR0RfTVRYKHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QpCit7CisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZpZm1nZC0+bXR4KSk7Cit9CisKKy8qCisgKiBXZSBjYW4gaGF2ZSBtdWx0aXBsZSB3b3JrIGl0ZW1zIChhbmQgY29ubmVjdGlvbiBwcm9iaW5nKQorICogc2NoZWR1bGluZyB0aGlzIHRpbWVyLCBidXQgd2UgbmVlZCB0byB0YWtlIGNhcmUgdG8gb25seQorICogcmVzY2hlZHVsZSBpdCB3aGVuIGl0IHNob3VsZCBmaXJlIF9lYXJsaWVyXyB0aGFuIGl0IHdhcworICogYXNrZWQgZm9yIGJlZm9yZSwgb3IgaWYgaXQncyBub3QgcGVuZGluZyByaWdodCBub3cuIFRoaXMKKyAqIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdC4gTm90ZSB0aGF0IGl0IHRoZW4gaXMgcmVxdWlyZWQgdG8KKyAqIHJ1biB0aGlzIGZ1bmN0aW9uIGZvciBhbGwgdGltZW91dHMgYWZ0ZXIgdGhlIGZpcnN0IG9uZQorICogaGFzIGhhcHBlbmVkIC0tIHRoZSB3b3JrIHRoYXQgcnVucyBmcm9tIHRoaXMgdGltZXIgd2lsbAorICogZG8gdGhhdC4KKyAqLworc3RhdGljIHZvaWQgcnVuX2FnYWluKHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlBU1NFUlRfTUdEX01UWChpZm1nZCk7CisKKwlpZiAoIXRpbWVyX3BlbmRpbmcoJmlmbWdkLT50aW1lcikgfHwKKwkgICAgdGltZV9iZWZvcmUodGltZW91dCwgaWZtZ2QtPnRpbWVyLmV4cGlyZXMpKQorCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgdGltZW91dCk7Cit9CisKK3N0YXRpYyB2b2lkIG1vZF9iZWFjb25fdGltZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJaWYgKHNkYXRhLT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUikKKwkJcmV0dXJuOworCisJbW9kX3RpbWVyKCZzZGF0YS0+dS5tZ2QuYmNuX21vbl90aW1lciwKKwkJICByb3VuZF9qaWZmaWVzX3VwKGppZmZpZXMgKyBJRUVFODAyMTFfQkVBQ09OX0xPU1NfVElNRSkpOworfQorCiBzdGF0aWMgaW50IGVjdzJjdyhpbnQgZWN3KQogewogCXJldHVybiAoMSA8PCBlY3cpIC0gMTsKIH0KIAotc3RhdGljIHU4ICppZWVlODAyMTFfYnNzX2dldF9pZShzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLCB1OCBpZSkKLXsKLQl1OCAqZW5kLCAqcG9zOwotCi0JcG9zID0gYnNzLT5jYnNzLmluZm9ybWF0aW9uX2VsZW1lbnRzOwotCWlmIChwb3MgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0JZW5kID0gcG9zICsgYnNzLT5jYnNzLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50czsKLQotCXdoaWxlIChwb3MgKyAxIDwgZW5kKSB7Ci0JCWlmIChwb3MgKyAyICsgcG9zWzFdID4gZW5kKQotCQkJYnJlYWs7Ci0JCWlmIChwb3NbMF0gPT0gaWUpCi0JCQlyZXR1cm4gcG9zOwotCQlwb3MgKz0gMiArIHBvc1sxXTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGludCBpZWVlODAyMTFfY29tcGF0aWJsZV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAogCQkJCSAgICAgIHUzMiAqcmF0ZXMpCkBAIC05NCwxMSArMTUwLDEwIEBACiAgKi8KIHN0YXRpYyB1MzIgaWVlZTgwMjExX2VuYWJsZV9odChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0aSwKLQkJCSAgICAgICB1MTYgYXBfaHRfY2FwX2ZsYWdzKQorCQkJICAgICAgIGNvbnN0IHU4ICpic3NpZCwgdTE2IGFwX2h0X2NhcF9mbGFncykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MzIgY2hhbmdlZCA9IDA7CiAJdTE2IGh0X29wbW9kZTsKQEAgLTE0NywxMiArMjAyLDEwIEBACiAJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIDApOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKLQotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CisJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgYnNzaWQpOwogCQlpZiAoc3RhKQogCQkJcmF0ZV9jb250cm9sX3JhdGVfdXBkYXRlKGxvY2FsLCBzYmFuZCwgc3RhLAogCQkJCQkJIElFRUU4MDIxMV9SQ19IVF9DSEFOR0VEKTsKLQogCQlyY3VfcmVhZF91bmxvY2soKTsKICAgICAgICAgfQogCkBAIC0xNzUsMjMgKzIyOCwyNCBAQAogCiAvKiBmcmFtZSBzZW5kaW5nIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1OCAqcG9zLCAqaWVzLCAqaHRfaWU7CisJdTggKnBvczsKKwljb25zdCB1OCAqaWVzLCAqaHRfaWU7CiAJaW50IGksIGxlbiwgY291bnQsIHJhdGVzX2xlbiwgc3VwcF9yYXRlc19sZW47CiAJdTE2IGNhcGFiOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IHdtbSA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJdTMyIHJhdGVzID0gMDsKIAogCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsKLQkJCSAgICBzaXplb2YoKm1nbXQpICsgMjAwICsgaWZtZ2QtPmV4dHJhX2llX2xlbiArCi0JCQkgICAgaWZtZ2QtPnNzaWRfbGVuKTsKKwkJCSAgICBzaXplb2YoKm1nbXQpICsgMjAwICsgd2stPmllX2xlbiArCisJCQkgICAgd2stPnNzaWRfbGVuKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGFzc29jICIKIAkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CkBAIC0yMTAsNDUgKzI2NCwzNSBAQAogCQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOwogCX0KIAotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQsCi0JCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJICAgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7Ci0JaWYgKGJzcykgewotCQlpZiAoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwotCQlpZiAoYnNzLT53bW1fdXNlZCkKLQkJCXdtbSA9IDE7CisJaWYgKHdrLT5ic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQorCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKKwlpZiAod2stPmJzcy0+d21tX3VzZWQpCisJCXdtbSA9IDE7CiAKLQkJLyogZ2V0IGFsbCByYXRlcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBhbmQgdGhlIEFQIGFzCi0JCSAqIHNvbWUgQVBzIGRvbid0IGxpa2UgZ2V0dGluZyBhIHN1cGVyc2V0IG9mIHRoZWlyIHJhdGVzCi0JCSAqIGluIHRoZSBhc3NvY2lhdGlvbiByZXF1ZXN0IChlLmcuIEQtTGluayBEQVAgMTM1MyBpbgotCQkgKiBiLW9ubHkgbW9kZSkgKi8KLQkJcmF0ZXNfbGVuID0gaWVlZTgwMjExX2NvbXBhdGlibGVfcmF0ZXMoYnNzLCBzYmFuZCwgJnJhdGVzKTsKKwkvKiBnZXQgYWxsIHJhdGVzIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGFuZCB0aGUgQVAgYXMKKwkgKiBzb21lIEFQcyBkb24ndCBsaWtlIGdldHRpbmcgYSBzdXBlcnNldCBvZiB0aGVpciByYXRlcworCSAqIGluIHRoZSBhc3NvY2lhdGlvbiByZXF1ZXN0IChlLmcuIEQtTGluayBEQVAgMTM1MyBpbgorCSAqIGItb25seSBtb2RlKSAqLworCXJhdGVzX2xlbiA9IGllZWU4MDIxMV9jb21wYXRpYmxlX3JhdGVzKHdrLT5ic3MsIHNiYW5kLCAmcmF0ZXMpOwogCi0JCWlmICgoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgJiYKLQkJICAgIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVCkpCi0JCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVDsKLQotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQl9IGVsc2UgewotCQlyYXRlcyA9IH4wOwotCQlyYXRlc19sZW4gPSBzYmFuZC0+bl9iaXRyYXRlczsKLQl9CisJaWYgKCh3ay0+YnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgJiYKKwkgICAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UKSkKKwkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQ7CiAKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwogCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+ZGEsIHdrLT5ic3MtPmNic3MuYnNzaWQsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIHdrLT5ic3MtPmNic3MuYnNzaWQsIEVUSF9BTEVOKTsKIAotCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUKSB7CisJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIod2stPnByZXZfYnNzaWQpKSB7CiAJCXNrYl9wdXQoc2tiLCAxMCk7CiAJCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CiAJCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUSk7CiAJCW1nbXQtPnUucmVhc3NvY19yZXEuY2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGNhcGFiKTsKIAkJbWdtdC0+dS5yZWFzc29jX3JlcS5saXN0ZW5faW50ZXJ2YWwgPQogCQkJCWNwdV90b19sZTE2KGxvY2FsLT5ody5jb25mLmxpc3Rlbl9pbnRlcnZhbCk7Ci0JCW1lbWNweShtZ210LT51LnJlYXNzb2NfcmVxLmN1cnJlbnRfYXAsIGlmbWdkLT5wcmV2X2Jzc2lkLAorCQltZW1jcHkobWdtdC0+dS5yZWFzc29jX3JlcS5jdXJyZW50X2FwLCB3ay0+cHJldl9ic3NpZCwKIAkJICAgICAgIEVUSF9BTEVOKTsKIAl9IGVsc2UgewogCQlza2JfcHV0KHNrYiwgNCk7CkBAIC0yNjAsMTAgKzMwNCwxMCBAQAogCX0KIAogCS8qIFNTSUQgKi8KLQlpZXMgPSBwb3MgPSBza2JfcHV0KHNrYiwgMiArIGlmbWdkLT5zc2lkX2xlbik7CisJaWVzID0gcG9zID0gc2tiX3B1dChza2IsIDIgKyB3ay0+c3NpZF9sZW4pOwogCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0JKnBvcysrID0gaWZtZ2QtPnNzaWRfbGVuOwotCW1lbWNweShwb3MsIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCSpwb3MrKyA9IHdrLT5zc2lkX2xlbjsKKwltZW1jcHkocG9zLCB3ay0+c3NpZCwgd2stPnNzaWRfbGVuKTsKIAogCS8qIGFkZCBhbGwgcmF0ZXMgd2hpY2ggd2VyZSBtYXJrZWQgdG8gYmUgdXNlZCBhYm92ZSAqLwogCXN1cHBfcmF0ZXNfbGVuID0gcmF0ZXNfbGVuOwpAQCAtMzE4LDkgKzM2Miw5IEBACiAJCX0KIAl9CiAKLQlpZiAoaWZtZ2QtPmV4dHJhX2llKSB7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKLQkJbWVtY3B5KHBvcywgaWZtZ2QtPmV4dHJhX2llLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKKwlpZiAod2stPmllX2xlbiAmJiB3ay0+aWUpIHsKKwkJcG9zID0gc2tiX3B1dChza2IsIHdrLT5pZV9sZW4pOworCQltZW1jcHkocG9zLCB3ay0+aWUsIHdrLT5pZV9sZW4pOwogCX0KIAogCWlmICh3bW0gJiYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7CkBAIC0zNDUsOSArMzg5LDkgQEAKIAkgKi8KIAlpZiAod21tICYmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgogCSAgICBzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCAmJgotCSAgICAoaHRfaWUgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX0hUX0lORk9STUFUSU9OKSkgJiYKKwkgICAgKGh0X2llID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoJndrLT5ic3MtPmNic3MsIFdMQU5fRUlEX0hUX0lORk9STUFUSU9OKSkgJiYKIAkgICAgaHRfaWVbMV0gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykgJiYKLQkgICAgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkpIHsKKwkgICAgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9ESVNBQkxFXzExTikpKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqaHRfaW5mbyA9CiAJCQkoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICopKGh0X2llICsgMik7CiAJCXUxNiBjYXAgPSBzYmFuZC0+aHRfY2FwLmNhcDsKQEAgLTM4MiwxOCArNDI2LDEzIEBACiAJCW1lbWNweShwb3MsICZzYmFuZC0+aHRfY2FwLm1jcywgc2l6ZW9mKHNiYW5kLT5odF9jYXAubWNzKSk7CiAJfQogCi0Ja2ZyZWUoaWZtZ2QtPmFzc29jcmVxX2llcyk7Ci0JaWZtZ2QtPmFzc29jcmVxX2llc19sZW4gPSAoc2tiLT5kYXRhICsgc2tiLT5sZW4pIC0gaWVzOwotCWlmbWdkLT5hc3NvY3JlcV9pZXMgPSBrbWFsbG9jKGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoaWZtZ2QtPmFzc29jcmVxX2llcykKLQkJbWVtY3B5KGlmbWdkLT5hc3NvY3JlcV9pZXMsIGllcywgaWZtZ2QtPmFzc29jcmVxX2llc19sZW4pOwotCiAJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9kZWF1dGhfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSAgIHUxNiBzdHlwZSwgdTE2IHJlYXNvbikKKwkJCQkJICAgY29uc3QgdTggKmJzc2lkLCB1MTYgc3R5cGUsIHUxNiByZWFzb24sCisJCQkJCSAgIHZvaWQgKmNvb2tpZSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKQEAgLTQxMCwxOCArNDQ5LDE4IEBACiAKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwogCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+ZGEsIGJzc2lkLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5ic3NpZCwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOwogCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IHN0eXBlKTsKIAlza2JfcHV0KHNrYiwgMik7CiAJLyogdS5kZWF1dGgucmVhc29uX2NvZGUgPT0gdS5kaXNhc3NvYy5yZWFzb25fY29kZSAqLwogCW1nbXQtPnUuZGVhdXRoLnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYocmVhc29uKTsKIAogCWlmIChzdHlwZSA9PSBJRUVFODAyMTFfU1RZUEVfREVBVVRIKQotCQljZmc4MDIxMV9zZW5kX2RlYXV0aChzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgc2tiLT5sZW4pOworCQljZmc4MDIxMV9zZW5kX2RlYXV0aChzZGF0YS0+ZGV2LCAodTggKiltZ210LCBza2ItPmxlbiwgY29va2llKTsKIAllbHNlCi0JCWNmZzgwMjExX3NlbmRfZGlzYXNzb2Moc2RhdGEtPmRldiwgKHU4ICopIG1nbXQsIHNrYi0+bGVuKTsKKwkJY2ZnODAyMTFfc2VuZF9kaXNhc3NvYyhzZGF0YS0+ZGV2LCAodTggKiltZ210LCBza2ItPmxlbiwgY29va2llKTsKIAlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQpOwogfQogCkBAIC00OTQsMjggKzUzMywyNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsIHUubWdkLmNoc3dpdGNoX3dvcmspOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCiAJCXJldHVybjsKIAotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KHNkYXRhLT5sb2NhbCwgaWZtZ2QtPmJzc2lkLAotCQkJCSAgIHNkYXRhLT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkgICBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKLQlpZiAoIWJzcykKLQkJZ290byBleGl0OworCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOworCWlmICghaWZtZ2QtPmFzc29jaWF0ZWQpCisJCWdvdG8gb3V0OwogCiAJc2RhdGEtPmxvY2FsLT5vcGVyX2NoYW5uZWwgPSBzZGF0YS0+bG9jYWwtPmNzYV9jaGFubmVsOwotCS8qIFhYWDogc2hvdWxkbid0IHJlYWxseSBtb2RpZnkgY2ZnODAyMTEtb3duZWQgZGF0YSEgKi8KLQlpZiAoIWllZWU4MDIxMV9od19jb25maWcoc2RhdGEtPmxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkpCi0JCWJzcy0+Y2Jzcy5jaGFubmVsID0gc2RhdGEtPmxvY2FsLT5vcGVyX2NoYW5uZWw7CisJaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKTsKIAotCWllZWU4MDIxMV9yeF9ic3NfcHV0KHNkYXRhLT5sb2NhbCwgYnNzKTsKLWV4aXQ6Ci0JaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRDsKKwkvKiBYWFg6IHNob3VsZG4ndCByZWFsbHkgbW9kaWZ5IGNmZzgwMjExLW93bmVkIGRhdGEhICovCisJaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuY2hhbm5lbCA9IHNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsOworCiAJaWVlZTgwMjExX3dha2VfcXVldWVzX2J5X3JlYXNvbigmc2RhdGEtPmxvY2FsLT5odywKIAkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0NTQSk7Cisgb3V0OgorCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9DU0FfUkVDRUlWRUQ7CisJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX2Noc3dpdGNoX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTUyOSw3ICs1NjYsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT5jaHN3aXRjaF93b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmc2RhdGEtPmxvY2FsLT5odywgJmlmbWdkLT5jaHN3aXRjaF93b3JrKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfc3RhX3Byb2Nlc3NfY2hhbnN3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTU0MCwxMCArNTc3LDEyIEBACiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJaW50IG5ld19mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KHN3X2VsZW0tPm5ld19jaF9udW0pOwogCi0JaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkKKwlBU1NFUlRfTUdEX01UWChpZm1nZCk7CisKKwlpZiAoIWlmbWdkLT5hc3NvY2lhdGVkKQogCQlyZXR1cm47CiAKLQlpZiAoc2RhdGEtPmxvY2FsLT5zd19zY2FubmluZyB8fCBzZGF0YS0+bG9jYWwtPmh3X3NjYW5uaW5nKQorCWlmIChzZGF0YS0+bG9jYWwtPnNjYW5uaW5nKQogCQlyZXR1cm47CiAKIAkvKiBEaXNyZWdhcmQgc3Vic2VxdWVudCBiZWFjb25zIGlmIHdlIGFyZSBhbHJlYWR5IHJ1bm5pbmcgYSB0aW1lcgpAQCAtNTU5LDcgKzU5OCw3IEBACiAJc2RhdGEtPmxvY2FsLT5jc2FfY2hhbm5lbCA9IG5ld19jaDsKIAogCWlmIChzd19lbGVtLT5jb3VudCA8PSAxKSB7Ci0JCXF1ZXVlX3dvcmsoc2RhdGEtPmxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+Y2hzd2l0Y2hfd29yayk7CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LCAmaWZtZ2QtPmNoc3dpdGNoX3dvcmspOwogCX0gZWxzZSB7CiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJnNkYXRhLT5sb2NhbC0+aHcsCiAJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DU0EpOwpAQCAtNjAxLDcgKzY0MCw3IEBACiAJICogSWYgd2UgYXJlIHNjYW5uaW5nIHJpZ2h0IG5vdyB0aGVuIHRoZSBwYXJhbWV0ZXJzIHdpbGwKIAkgKiB0YWtlIGVmZmVjdCB3aGVuIHNjYW4gZmluaXNoZXMuCiAJICovCi0JaWYgKGxvY2FsLT5od19zY2FubmluZyB8fCBsb2NhbC0+c3dfc2Nhbm5pbmcpCisJaWYgKGxvY2FsLT5zY2FubmluZykKIAkJcmV0dXJuOwogCiAJaWYgKGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCA+IDAgJiYKQEAgLTY1MSw4ICs2OTAsOSBAQAogCX0KIAogCWlmIChjb3VudCA9PSAxICYmIGZvdW5kLT51Lm1nZC5wb3dlcnNhdmUgJiYKLQkgICAgKGZvdW5kLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgJiYKLQkgICAgIShmb3VuZC0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwpKSB7CisJICAgIGZvdW5kLT51Lm1nZC5hc3NvY2lhdGVkICYmIGxpc3RfZW1wdHkoJmZvdW5kLT51Lm1nZC53b3JrX2xpc3QpICYmCisJICAgICEoZm91bmQtPnUubWdkLmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwgfAorCQkJCSAgICBJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCkpKSB7CiAJCXMzMiBiZWFjb25pbnRfdXM7CiAKIAkJaWYgKGxhdGVuY3kgPCAwKQpAQCAtNzI0LDcgKzc2NCw3IEBACiAJaWYgKGxvY2FsLT5xdWllc2NpbmcgfHwgbG9jYWwtPnN1c3BlbmRlZCkKIAkJcmV0dXJuOwogCi0JcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZsb2NhbC0+ZHluYW1pY19wc19lbmFibGVfd29yayk7CiB9CiAKIC8qIE1MTUUgKi8KQEAgLTgwNiw5ICs4NDYsNiBAQAogCQkJCQkgICB1MTYgY2FwYWIsIGJvb2wgZXJwX3ZhbGlkLCB1OCBlcnApCiB7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmc2RhdGEtPnZpZi5ic3NfY29uZjsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotI2VuZGlmCiAJdTMyIGNoYW5nZWQgPSAwOwogCWJvb2wgdXNlX3Byb3RlY3Rpb247CiAJYm9vbCB1c2Vfc2hvcnRfcHJlYW1ibGU7CkBAIC04MjUsNDIgKzg2MiwxNiBAQAogCXVzZV9zaG9ydF9zbG90ID0gISEoY2FwYWIgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FKTsKIAogCWlmICh1c2VfcHJvdGVjdGlvbiAhPSBic3NfY29uZi0+dXNlX2N0c19wcm90KSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDVFMgcHJvdGVjdGlvbiAlcyAoQlNTSUQ9JXBNKVxuIiwKLQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLAotCQkJICAgICAgIHVzZV9wcm90ZWN0aW9uID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKLQkJCSAgICAgICBpZm1nZC0+YnNzaWQpOwotCQl9Ci0jZW5kaWYKIAkJYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCA9IHVzZV9wcm90ZWN0aW9uOwogCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVDsKIAl9CiAKIAlpZiAodXNlX3Nob3J0X3ByZWFtYmxlICE9IGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN3aXRjaGVkIHRvICVzIGJhcmtlciBwcmVhbWJsZSIKLQkJCSAgICAgICAiIChCU1NJRD0lcE0pXG4iLAotCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsCi0JCQkgICAgICAgdXNlX3Nob3J0X3ByZWFtYmxlID8gInNob3J0IiA6ICJsb25nIiwKLQkJCSAgICAgICBpZm1nZC0+YnNzaWQpOwotCQl9Ci0jZW5kaWYKIAkJYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSA9IHVzZV9zaG9ydF9wcmVhbWJsZTsKIAkJY2hhbmdlZCB8PSBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEU7CiAJfQogCiAJaWYgKHVzZV9zaG9ydF9zbG90ICE9IGJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogc3dpdGNoZWQgdG8gJXMgc2xvdCB0aW1lIgotCQkJICAgICAgICIgKEJTU0lEPSVwTSlcbiIsCi0JCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwKLQkJCSAgICAgICB1c2Vfc2hvcnRfc2xvdCA/ICJzaG9ydCIgOiAibG9uZyIsCi0JCQkgICAgICAgaWZtZ2QtPmJzc2lkKTsKLQkJfQotI2VuZGlmCiAJCWJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCA9IHVzZV9zaG9ydF9zbG90OwogCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0VSUF9TTE9UOwogCX0KQEAgLTg2OCwxMDUgKzg3OSwzMSBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQotewotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQotCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLQlpZiAoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKQotCQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOwotCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0Jd2lyZWxlc3Nfc2VuZF9ldmVudChzZGF0YS0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9zZW5kX2Fzc29jaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQljaGFyICpidWY7Ci0Jc2l6ZV90IGxlbjsKLQlpbnQgaTsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0KLQlpZiAoIWlmbWdkLT5hc3NvY3JlcV9pZXMgJiYgIWlmbWdkLT5hc3NvY3Jlc3BfaWVzKQotCQlyZXR1cm47Ci0KLQlidWYgPSBrbWFsbG9jKDUwICsgMiAqIChpZm1nZC0+YXNzb2NyZXFfaWVzX2xlbiArCi0JCQkJaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVybjsKLQotCWxlbiA9IHNwcmludGYoYnVmLCAiQVNTT0NJTkZPKCIpOwotCWlmIChpZm1nZC0+YXNzb2NyZXFfaWVzKSB7Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlJlcUlFcz0iKTsKLQkJZm9yIChpID0gMDsgaSA8IGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuOyBpKyspIHsKLQkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUwMngiLAotCQkJCSAgICAgICBpZm1nZC0+YXNzb2NyZXFfaWVzW2ldKTsKLQkJfQotCX0KLQlpZiAoaWZtZ2QtPmFzc29jcmVzcF9pZXMpIHsKLQkJaWYgKGlmbWdkLT5hc3NvY3JlcV9pZXMpCi0JCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIgIik7Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlJlc3BJRXM9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZm1nZC0+YXNzb2NyZXNwX2llc19sZW47IGkrKykgewotCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJTAyeCIsCi0JCQkJICAgICAgIGlmbWdkLT5hc3NvY3Jlc3BfaWVzW2ldKTsKLQkJfQotCX0KLQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIpIik7Ci0KLQlpZiAobGVuID4gSVdfQ1VTVE9NX01BWCkgewotCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIkFTU09DUkVTUElFPSIpOwotCQlmb3IgKGkgPSAwOyBpIDwgaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKLQkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUwMngiLAotCQkJCSAgICAgICBpZm1nZC0+YXNzb2NyZXNwX2llc1tpXSk7Ci0JCX0KLQl9Ci0KLQlpZiAobGVuIDw9IElXX0NVU1RPTV9NQVgpIHsKLQkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCQl3cnF1LmRhdGEubGVuZ3RoID0gbGVuOwotCQl3aXJlbGVzc19zZW5kX2V2ZW50KHNkYXRhLT5kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBidWYpOwotCX0KLQotCWtmcmVlKGJ1Zik7Ci19Ci0KLQogc3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssCiAJCQkJICAgICB1MzIgYnNzX2luZm9fY2hhbmdlZCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmbG9jYWxfdG9faHcobG9jYWwpLT5jb25mOwotCi0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzID0gd2stPmJzczsKIAogCWJzc19pbmZvX2NoYW5nZWQgfD0gQlNTX0NIQU5HRURfQVNTT0M7Ci0JaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKKwkvKiBzZXQgdGltaW5nIGluZm9ybWF0aW9uICovCisJc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gYnNzLT5jYnNzLmJlYWNvbl9pbnRlcnZhbDsKKwlzZGF0YS0+dmlmLmJzc19jb25mLnRpbWVzdGFtcCA9IGJzcy0+Y2Jzcy50c2Y7CisJc2RhdGEtPnZpZi5ic3NfY29uZi5kdGltX3BlcmlvZCA9IGJzcy0+ZHRpbV9wZXJpb2Q7CiAKLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAotCQkJCSAgIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwotCWlmIChic3MpIHsKLQkJLyogc2V0IHRpbWluZyBpbmZvcm1hdGlvbiAqLwotCQlzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQgPSBic3MtPmNic3MuYmVhY29uX2ludGVydmFsOwotCQlzZGF0YS0+dmlmLmJzc19jb25mLnRpbWVzdGFtcCA9IGJzcy0+Y2Jzcy50c2Y7Ci0JCXNkYXRhLT52aWYuYnNzX2NvbmYuZHRpbV9wZXJpb2QgPSBic3MtPmR0aW1fcGVyaW9kOworCWJzc19pbmZvX2NoYW5nZWQgfD0gQlNTX0NIQU5HRURfQkVBQ09OX0lOVDsKKwlic3NfaW5mb19jaGFuZ2VkIHw9IGllZWU4MDIxMV9oYW5kbGVfYnNzX2NhcGFiaWxpdHkoc2RhdGEsCisJCWJzcy0+Y2Jzcy5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKIAotCQlic3NfaW5mb19jaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0JFQUNPTl9JTlQ7Ci0JCWJzc19pbmZvX2NoYW5nZWQgfD0gaWVlZTgwMjExX2hhbmRsZV9ic3NfY2FwYWJpbGl0eShzZGF0YSwKLQkJCWJzcy0+Y2Jzcy5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKKwlzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCA9IGJzczsKKwlzZGF0YS0+dS5tZ2Qub2xkX2Fzc29jaWF0ZV93b3JrID0gd2s7CisJbWVtY3B5KHNkYXRhLT51Lm1nZC5ic3NpZCwgYnNzLT5jYnNzLmJzc2lkLCBFVEhfQUxFTik7CiAKLQkJY2ZnODAyMTFfaG9sZF9ic3MoJmJzcy0+Y2Jzcyk7CisJLyoganVzdCB0byBiZSBzdXJlICovCisJc2RhdGEtPnUubWdkLmZsYWdzICY9IH4oSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwgfAorCQkJCUlFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwpOwogCi0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCX0KLQotCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOwotCW1lbWNweShpZm1nZC0+cHJldl9ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7Ci0JaWVlZTgwMjExX3N0YV9zZW5kX2Fzc29jaW5mbyhzZGF0YSk7Ci0KLQlpZm1nZC0+bGFzdF9wcm9iZSA9IGppZmZpZXM7CiAJaWVlZTgwMjExX2xlZF9hc3NvYyhsb2NhbCwgMSk7CiAKIAlzZGF0YS0+dmlmLmJzc19jb25mLmFzc29jID0gMTsKQEAgLTk4MiwxNzYgKzkxOSwxNTcgQEAKIAogCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBic3NfaW5mb19jaGFuZ2VkKTsKIAotCS8qIHdpbGwgYmUgc2FtZSBhcyBzZGF0YSAqLwotCWlmIChsb2NhbC0+cHNfc2RhdGEpIHsKLQkJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCQlpZWVlODAyMTFfcmVjYWxjX3BzKGxvY2FsLCAtMSk7Ci0JCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCX0KKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJaWVlZTgwMjExX3JlY2FsY19wcyhsb2NhbCwgLTEpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29uKHNkYXRhLT5kZXYpOwotCi0JaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCitzdGF0aWMgZW51bSByeF9tZ210X2FjdGlvbiBfX211c3RfY2hlY2sKK2llZWU4MDIxMV9kaXJlY3RfcHJvYmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAotCWlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMrKzsKLQlpZiAoaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcyA+IElFRUU4MDIxMV9BVVRIX01BWF9UUklFUykgeworCXdrLT50cmllcysrOworCWlmICh3ay0+dHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgdG8gQVAgJXBNIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7Ci0JCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKLQkJY2ZnODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQoc2RhdGEtPmRldiwgaWZtZ2QtPmJzc2lkKTsKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHdrLT5ic3MtPmNic3MuYnNzaWQpOwogCiAJCS8qCiAJCSAqIE1vc3QgbGlrZWx5IEFQIGlzIG5vdCBpbiB0aGUgcmFuZ2Ugc28gcmVtb3ZlIHRoZQotCQkgKiBic3MgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB0byB0aGUgQVAKKwkJICogYnNzIHN0cnVjdCBmb3IgdGhhdCBBUC4KIAkJICovCi0JCWllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHNkYXRhLCBpZm1nZC0+YnNzaWQsCi0JCQkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCWlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCQljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgJndrLT5ic3MtPmNic3MpOwogCiAJCS8qCiAJCSAqIFdlIG1pZ2h0IGhhdmUgYSBwZW5kaW5nIHNjYW4gd2hpY2ggaGFkIG5vIGNoYW5jZSB0byBydW4geWV0Ci0JCSAqIGR1ZSB0byBzdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFLgotCQkgKiBIZW5jZSwgcXVldWUgdGhlIFNUQXMgd29yayBhZ2FpbgorCQkgKiBkdWUgdG8gd29yayBuZWVkaW5nIHRvIGJlIGRvbmUuIEhlbmNlLCBxdWV1ZSB0aGUgU1RBcyB3b3JrCisJCSAqIGFnYWluIGZvciB0aGF0LgogCQkgKi8KLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPndvcmspOwotCQlyZXR1cm47CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1nZC0+d29yayk7CisJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FVVEhfVE87CiAJfQogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgdG8gQVAgJXBNIHRyeSAlZFxuIiwKLQkJCXNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCwKLQkJCWlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvIEFQICVwTSAodHJ5ICVkKVxuIiwKKwkJCXNkYXRhLT5kZXYtPm5hbWUsIHdrLT5ic3MtPmNic3MuYnNzaWQsCisJCQl3ay0+dHJpZXMpOwogCi0JaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKLQotCS8qIERpcmVjdCBwcm9iZSBpcyBzZW50IHRvIGJyb2FkY2FzdCBhZGRyZXNzIGFzIHNvbWUgQVBzCisJLyoKKwkgKiBEaXJlY3QgcHJvYmUgaXMgc2VudCB0byBicm9hZGNhc3QgYWRkcmVzcyBhcyBzb21lIEFQcwogCSAqIHdpbGwgbm90IGFuc3dlciB0byBkaXJlY3QgcGFja2V0IGluIHVuYXNzb2NpYXRlZCBzdGF0ZS4KIAkgKi8KLQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIE5VTEwsCi0JCQkJIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4sIE5VTEwsIDApOworCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgTlVMTCwgd2stPnNzaWQsIHdrLT5zc2lkX2xlbiwgTlVMTCwgMCk7CiAKLQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQpOworCXdrLT50aW1lb3V0ID0gamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQ7CisJcnVuX2FnYWluKGlmbWdkLCB3ay0+dGltZW91dCk7CisKKwlyZXR1cm4gUlhfTUdNVF9OT05FOwogfQogCiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCitzdGF0aWMgZW51bSByeF9tZ210X2FjdGlvbiBfX211c3RfY2hlY2sKK2llZWU4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQl1OCAqaWVzOwotCXNpemVfdCBpZXNfbGVuOwogCi0JaWZtZ2QtPmF1dGhfdHJpZXMrKzsKLQlpZiAoaWZtZ2QtPmF1dGhfdHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKKwl3ay0+dHJpZXMrKzsKKwlpZiAod2stPnRyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRpb24gd2l0aCBBUCAlcE0iCiAJCSAgICAgICAiIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7Ci0JCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKLQkJY2ZnODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQoc2RhdGEtPmRldiwgaWZtZ2QtPmJzc2lkKTsKLQkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKLQkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCB3ay0+YnNzLT5jYnNzLmJzc2lkKTsKKworCQkvKgorCQkgKiBNb3N0IGxpa2VseSBBUCBpcyBub3QgaW4gdGhlIHJhbmdlIHNvIHJlbW92ZSB0aGUKKwkJICogYnNzIHN0cnVjdCBmb3IgdGhhdCBBUC4KKwkJICovCisJCWNmZzgwMjExX3VubGlua19ic3MobG9jYWwtPmh3LndpcGh5LCAmd2stPmJzcy0+Y2Jzcyk7CiAKIAkJLyoKIAkJICogV2UgbWlnaHQgaGF2ZSBhIHBlbmRpbmcgc2NhbiB3aGljaCBoYWQgbm8gY2hhbmNlIHRvIHJ1biB5ZXQKLQkJICogZHVlIHRvIHN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUuCi0JCSAqIEhlbmNlLCBxdWV1ZSB0aGUgU1RBcyB3b3JrIGFnYWluCisJCSAqIGR1ZSB0byB3b3JrIG5lZWRpbmcgdG8gYmUgZG9uZS4gSGVuY2UsIHF1ZXVlIHRoZSBTVEFzIHdvcmsKKwkJICogYWdhaW4gZm9yIHRoYXQuCiAJCSAqLwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7Ci0JCXJldHVybjsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmlmbWdkLT53b3JrKTsKKwkJcmV0dXJuIFJYX01HTVRfQ0ZHODAyMTFfQVVUSF9UTzsKIAl9CiAKLQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlIHdpdGggQVAgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlIHdpdGggQVAgJXBNICh0cnkgJWQpXG4iLAorCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCB3ay0+YnNzLT5jYnNzLmJzc2lkLCB3ay0+dHJpZXMpOwogCi0JaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkgewotCQlpZXMgPSBpZm1nZC0+c21lX2F1dGhfaWU7Ci0JCWllc19sZW4gPSBpZm1nZC0+c21lX2F1dGhfaWVfbGVuOwotCX0gZWxzZSB7Ci0JCWllcyA9IE5VTEw7Ci0JCWllc19sZW4gPSAwOwotCX0KLQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAxLCBpZm1nZC0+YXV0aF9hbGcsIGllcywgaWVzX2xlbiwKLQkJCSAgICBpZm1nZC0+YnNzaWQsIDApOwotCWlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID0gMjsKKwlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAxLCB3ay0+YXV0aF9hbGcsIHdrLT5pZSwgd2stPmllX2xlbiwKKwkJCSAgICB3ay0+YnNzLT5jYnNzLmJzc2lkLCBOVUxMLCAwLCAwKTsKKwl3ay0+YXV0aF90cmFuc2FjdGlvbiA9IDI7CiAKLQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQpOworCXdrLT50aW1lb3V0ID0gamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQ7CisJcnVuX2FnYWluKGlmbWdkLCB3ay0+dGltZW91dCk7CisKKwlyZXR1cm4gUlhfTUdNVF9OT05FOwogfQogCi0vKgotICogVGhlIGRpc2Fzc29jICdyZWFzb24nIGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgb3VyIG93biByZWFzb24KLSAqIGlmIHNlbGYgZGlzY29ubmVjdGVkIG9yIGEgcmVhc29uIGNvZGUgZnJvbSB0aGUgQVAuCi0gKi8KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgYm9vbCBkZWF1dGgsIGJvb2wgc2VsZl9kaXNjb25uZWN0ZWQsCi0JCQkJICAgdTE2IHJlYXNvbikKKwkJCQkgICBib29sIGRlYXV0aCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmbG9jYWxfdG9faHcobG9jYWwpLT5jb25mOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdTMyIGNoYW5nZWQgPSAwLCBjb25maWdfY2hhbmdlZCA9IDA7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCisJQVNTRVJUX01HRF9NVFgoaWZtZ2QpOworCisJaWYgKFdBUk5fT04oIWlmbWdkLT5hc3NvY2lhdGVkKSkKKwkJcmV0dXJuOworCisJbWVtY3B5KGJzc2lkLCBpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pOworCisJaWZtZ2QtPmFzc29jaWF0ZWQgPSBOVUxMOworCW1lbXNldChpZm1nZC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKIAogCWlmIChkZWF1dGgpIHsKLQkJaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7Ci0JCWlmbWdkLT5hdXRoX3RyaWVzID0gMDsKKwkJa2ZyZWUoaWZtZ2QtPm9sZF9hc3NvY2lhdGVfd29yayk7CisJCWlmbWdkLT5vbGRfYXNzb2NpYXRlX3dvcmsgPSBOVUxMOworCX0gZWxzZSB7CisJCXN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrID0gaWZtZ2QtPm9sZF9hc3NvY2lhdGVfd29yazsKKworCQl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0lETEU7CisJCWxpc3RfYWRkKCZ3ay0+bGlzdCwgJmlmbWdkLT53b3JrX2xpc3QpOwogCX0KLQlpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7Ci0JaWZtZ2QtPmFzc29jX3RyaWVzID0gMDsKKworCS8qCisJICogd2UgbmVlZCB0byBjb21taXQgdGhlIGFzc29jaWF0ZWQgPSBOVUxMIGNoYW5nZSBiZWNhdXNlIHRoZQorCSAqIHNjYW4gY29kZSB1c2VzIHRoYXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpZmFjZSBzaG91bGQKKwkgKiBnbyB0by93YWtlIHVwIGZyb20gcG93ZXJzYXZlIG9yIG5vdCAtLSBhbmQgY291bGQgb3RoZXJ3aXNlCisJICogd2FrZSB0aGUgcXVldWVzIGVycm9uZW91c2x5LgorCSAqLworCXNtcF9tYigpOworCisJLyoKKwkgKiBUaHVzLCB3ZSBjYW4gb25seSBhZnRlcndhcmRzIHN0b3AgdGhlIHF1ZXVlcyAtLSB0byBhY2NvdW50CisJICogZm9yIHRoZSBjYXNlIHdoZXJlIGFub3RoZXIgQ1BVIGlzIGZpbmlzaGluZyBhIHNjYW4gYXQgdGhpcworCSAqIHRpbWUgLS0gd2UgZG9uJ3Qgd2FudCB0aGUgc2NhbiBjb2RlIHRvIGVuYWJsZSBxdWV1ZXMuCisJICovCiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtPmRldik7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgYnNzaWQpOwogCWlmIChzdGEpCiAJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0YSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAotCQkJCSAgIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwotCi0JaWYgKGJzcykgewotCQljZmc4MDIxMV91bmhvbGRfYnNzKCZic3MtPmNic3MpOwotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQl9Ci0KLQlpZiAoc2VsZl9kaXNjb25uZWN0ZWQpIHsKLQkJaWYgKGRlYXV0aCkKLQkJCWllZWU4MDIxMV9zZW5kX2RlYXV0aF9kaXNhc3NvYyhzZGF0YSwKLQkJCQlJRUVFODAyMTFfU1RZUEVfREVBVVRILCByZWFzb24pOwotCQllbHNlCi0JCQlpZWVlODAyMTFfc2VuZF9kZWF1dGhfZGlzYXNzb2Moc2RhdGEsCi0JCQkJSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DLCByZWFzb24pOwotCX0KLQotCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOwogCWNoYW5nZWQgfD0gaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHNkYXRhKTsKIAogCWllZWU4MDIxMV9sZWRfYXNzb2MobG9jYWwsIDApOwogCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfQVNTT0M7CiAJc2RhdGEtPnZpZi5ic3NfY29uZi5hc3NvYyA9IGZhbHNlOwogCi0JaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSk7Ci0KLQlpZiAoc2VsZl9kaXNjb25uZWN0ZWQgfHwgcmVhc29uID09IFdMQU5fUkVBU09OX0RJU0FTU09DX1NUQV9IQVNfTEVGVCkgewotCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7Ci0JCWllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHNkYXRhLCBpZm1nZC0+YnNzaWQsCi0JCQkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCWlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwotCX0KLQogCWllZWU4MDIxMV9zZXRfd21tX2RlZmF1bHQoc2RhdGEpOwogCiAJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKQEAgLTExODAsNyArMTA5OCw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBic3NpZCk7CiAJaWYgKCFzdGEpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKQEAgLTExOTMsODMgKzExMTEsNDIgQEAKIAlzdGFfaW5mb19kZXN0cm95KHN0YSk7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV93ZXBfY29uZmlndXJlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKLXsKLQlpZiAoIXNkYXRhIHx8ICFzZGF0YS0+ZGVmYXVsdF9rZXkgfHwKLQkgICAgc2RhdGEtPmRlZmF1bHRfa2V5LT5jb25mLmFsZyAhPSBBTEdfV0VQKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCWludCBic3NfcHJpdmFjeTsKLQlpbnQgd2VwX3ByaXZhY3k7Ci0JaW50IHByaXZhY3lfaW52b2tlZDsKLQotCWlmICghaWZtZ2QgfHwgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkpCi0JCXJldHVybiAwOwotCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCwKLQkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkgICBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKLQlpZiAoIWJzcykKLQkJcmV0dXJuIDA7Ci0KLQlic3NfcHJpdmFjeSA9ICEhKGJzcy0+Y2Jzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpOwotCXdlcF9wcml2YWN5ID0gISFpZWVlODAyMTFfc3RhX3dlcF9jb25maWd1cmVkKHNkYXRhKTsKLQlwcml2YWN5X2ludm9rZWQgPSAhIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRCk7Ci0KLQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQotCWlmICgoYnNzX3ByaXZhY3kgPT0gd2VwX3ByaXZhY3kpIHx8IChic3NfcHJpdmFjeSA9PSBwcml2YWN5X2ludm9rZWQpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQorc3RhdGljIGVudW0gcnhfbWdtdF9hY3Rpb24gX19tdXN0X2NoZWNrCitpZWVlODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkgICAgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2spCiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAKLQlpZm1nZC0+YXNzb2NfdHJpZXMrKzsKLQlpZiAoaWZtZ2QtPmFzc29jX3RyaWVzID4gSUVFRTgwMjExX0FTU09DX01BWF9UUklFUykgeworCXdrLT50cmllcysrOworCWlmICh3ay0+dHJpZXMgPiBJRUVFODAyMTFfQVNTT0NfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRpb24gd2l0aCBBUCAlcE0iCiAJCSAgICAgICAiIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7Ci0JCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKLQkJY2ZnODAyMTFfc2VuZF9hc3NvY190aW1lb3V0KHNkYXRhLT5kZXYsIGlmbWdkLT5ic3NpZCk7Ci0JCWllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHNkYXRhLCBpZm1nZC0+YnNzaWQsCi0JCQkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCWlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCk7CisKKwkJLyoKKwkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCisJCSAqIGJzcyBzdHJ1Y3QgZm9yIHRoYXQgQVAuCisJCSAqLworCQljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgJndrLT5ic3MtPmNic3MpOworCiAJCS8qCiAJCSAqIFdlIG1pZ2h0IGhhdmUgYSBwZW5kaW5nIHNjYW4gd2hpY2ggaGFkIG5vIGNoYW5jZSB0byBydW4geWV0Ci0JCSAqIGR1ZSB0byBzdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFLgotCQkgKiBIZW5jZSwgcXVldWUgdGhlIFNUQXMgd29yayBhZ2FpbgorCQkgKiBkdWUgdG8gd29yayBuZWVkaW5nIHRvIGJlIGRvbmUuIEhlbmNlLCBxdWV1ZSB0aGUgU1RBcyB3b3JrCisJCSAqIGFnYWluIGZvciB0aGF0LgogCQkgKi8KLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPndvcmspOwotCQlyZXR1cm47CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1nZC0+d29yayk7CisJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FTU09DX1RPOwogCX0KIAotCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGUgd2l0aCBBUCAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7Ci0JaWYgKGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHNkYXRhKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG1pc21hdGNoIGluIHByaXZhY3kgY29uZmlndXJhdGlvbiBhbmQgIgotCQkgICAgICAgIm1peGVkLWNlbGwgZGlzYWJsZWQgLSBhYm9ydCBhc3NvY2lhdGlvblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKLQkJcmV0dXJuOwotCX0KKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZSB3aXRoIEFQICVwTSAodHJ5ICVkKVxuIiwKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCwgd2stPnRyaWVzKTsKKwlpZWVlODAyMTFfc2VuZF9hc3NvYyhzZGF0YSwgd2spOwogCi0JaWVlZTgwMjExX3NlbmRfYXNzb2Moc2RhdGEpOworCXdrLT50aW1lb3V0ID0gamlmZmllcyArIElFRUU4MDIxMV9BU1NPQ19USU1FT1VUOworCXJ1bl9hZ2FpbihpZm1nZCwgd2stPnRpbWVvdXQpOwogCi0JbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCk7CisJcmV0dXJuIFJYX01HTVRfTk9ORTsKIH0KIAogdm9pZCBpZWVlODAyMTFfc3RhX3J4X25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTEyODAsMTIgKzExNTcsODQgQEAKIAkgKiBmcm9tIEFQIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBjb25uZWN0aW9uIGlzIHdvcmtpbmcgYm90aCB3YXlzCiAJICogYXQgdGhhdCB0aW1lLiBCdXQgbXVsdGljYXN0IGZyYW1lcyAoYW5kIGhlbmNlIGFsc28gYmVhY29ucykgbXVzdAogCSAqIGJlIGlnbm9yZWQgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIHRvIHRyaWdnZXIgdGhlIHRpbWVyIGR1cmluZwotCSAqIGRhdGEgaWRsZSBwZXJpb2RzIGZvciBzZW5kaW5nIHRoZSBwZXJpb2RpY2FsIHByb2JlIHJlcXVlc3QgdG8KLQkgKiB0aGUgQVAuCisJICogZGF0YSBpZGxlIHBlcmlvZHMgZm9yIHNlbmRpbmcgdGhlIHBlcmlvZGljIHByb2JlIHJlcXVlc3QgdG8gdGhlCisJICogQVAgd2UncmUgY29ubmVjdGVkIHRvLgogCSAqLwotCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCi0JCW1vZF90aW1lcigmc2RhdGEtPnUubWdkLnRpbWVyLAotCQkJICBqaWZmaWVzICsgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwpOworCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwkJcmV0dXJuOworCisJbW9kX3RpbWVyKCZzZGF0YS0+dS5tZ2QuY29ubl9tb25fdGltZXIsCisJCSAgcm91bmRfamlmZmllc191cChqaWZmaWVzICsgSUVFRTgwMjExX0NPTk5FQ1RJT05fSURMRV9USU1FKSk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9tZ2RfcHJvYmVfYXBfc2VuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwljb25zdCB1OCAqc3NpZDsKKworCXNzaWQgPSBpZWVlODAyMTFfYnNzX2dldF9pZSgmaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MsIFdMQU5fRUlEX1NTSUQpOworCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsCisJCQkJIHNzaWQgKyAyLCBzc2lkWzFdLCBOVUxMLCAwKTsKKworCWlmbWdkLT5wcm9iZV9zZW5kX2NvdW50Kys7CisJaWZtZ2QtPnByb2JlX3RpbWVvdXQgPSBqaWZmaWVzICsgSUVFRTgwMjExX1BST0JFX1dBSVQ7CisJcnVuX2FnYWluKGlmbWdkLCBpZm1nZC0+cHJvYmVfdGltZW91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9tZ2RfcHJvYmVfYXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgYm9vbCBiZWFjb24pCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJYm9vbCBhbHJlYWR5ID0gZmFsc2U7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCXJldHVybjsKKworCWlmIChzZGF0YS0+bG9jYWwtPnNjYW5uaW5nKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKKworCWlmICghaWZtZ2QtPmFzc29jaWF0ZWQpCisJCWdvdG8gb3V0OworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKKwlpZiAoYmVhY29uICYmIG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZXRlY3RlZCBiZWFjb24gbG9zcyBmcm9tIEFQICIKKwkJICAgICAgICItIHNlbmRpbmcgcHJvYmUgcmVxdWVzdFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisjZW5kaWYKKworCS8qCisJICogVGhlIGRyaXZlci9vdXIgd29yayBoYXMgYWxyZWFkeSByZXBvcnRlZCB0aGlzIGV2ZW50IG9yIHRoZQorCSAqIGNvbm5lY3Rpb24gbW9uaXRvcmluZyBoYXMga2lja2VkIGluIGFuZCB3ZSBoYXZlIGFscmVhZHkgc2VudAorCSAqIGEgcHJvYmUgcmVxdWVzdC4gT3IgbWF5YmUgdGhlIEFQIGRpZWQgYW5kIHRoZSBkcml2ZXIga2VlcHMKKwkgKiByZXBvcnRpbmcgdW50aWwgd2UgZGlzYXNzb2NpYXRlLi4uCisJICoKKwkgKiBJbiBlaXRoZXIgY2FzZSB3ZSBoYXZlIHRvIGlnbm9yZSB0aGUgY3VycmVudCBjYWxsIHRvIHRoaXMKKwkgKiBmdW5jdGlvbiAoZXhjZXB0IGZvciBzZXR0aW5nIHRoZSBjb3JyZWN0IHByb2JlIHJlYXNvbiBiaXQpCisJICogYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd291bGQgcmVzZXQgdGhlIHRpbWVyIGV2ZXJ5IHRpbWUgYW5kCisJICogbmV2ZXIgY2hlY2sgd2hldGhlciB3ZSByZWNlaXZlZCBhIHByb2JlIHJlc3BvbnNlIQorCSAqLworCWlmIChpZm1nZC0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9CRUFDT05fUE9MTCB8CisJCQkgICAgSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwpKQorCQlhbHJlYWR5ID0gdHJ1ZTsKKworCWlmIChiZWFjb24pCisJCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMOworCWVsc2UKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQ09OTkVDVElPTl9QT0xMOworCisJaWYgKGFscmVhZHkpCisJCWdvdG8gb3V0OworCisJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlpZWVlODAyMTFfcmVjYWxjX3BzKHNkYXRhLT5sb2NhbCwgLTEpOworCW11dGV4X3VubG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKKworCWlmbWdkLT5wcm9iZV9zZW5kX2NvdW50ID0gMDsKKwlpZWVlODAyMTFfbWdkX3Byb2JlX2FwX3NlbmQoc2RhdGEpOworIG91dDoKKwltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwogfQogCiB2b2lkIGllZWU4MDIxMV9iZWFjb25fbG9zc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTEyOTMsMTQ3ICsxMjQyLDI4IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKIAkJCSAgICAgdS5tZ2QuYmVhY29uX2xvc3Nfd29yayk7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKLQkvKgotCSAqIFRoZSBkcml2ZXIgaGFzIGFscmVhZHkgcmVwb3J0ZWQgdGhpcyBldmVudCBhbmQgd2UgaGF2ZQotCSAqIGFscmVhZHkgc2VudCBhIHByb2JlIHJlcXVlc3QuIE1heWJlIHRoZSBBUCBkaWVkIGFuZCB0aGUKLQkgKiBkcml2ZXIga2VlcHMgcmVwb3J0aW5nIHVudGlsIHdlIGRpc2Fzc29jaWF0ZS4uLiBXZSBoYXZlCi0JICogdG8gaWdub3JlIHRoYXQgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd291bGQgY29udGludWFsbHkKLQkgKiByZXNldCB0aGUgdGltZXIgYW5kIG5ldmVyIGNoZWNrIHdoZXRoZXIgd2UgcmVjZWl2ZWQgYQotCSAqIHByb2JlIHJlc3BvbnNlIQotCSAqLwotCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwpCi0JCXJldHVybjsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCi0JaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyaXZlciByZXBvcnRzIGJlYWNvbiBsb3NzIGZyb20gQVAgJXBNICIKLQkJICAgICAgICItIHNlbmRpbmcgcHJvYmUgcmVxdWVzdFxuIiwgc2RhdGEtPmRldi0+bmFtZSwKLQkJICAgICAgIHNkYXRhLT51Lm1nZC5ic3NpZCk7Ci0JfQotI2VuZGlmCi0KLQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOwotCi0JbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKLQlpZWVlODAyMTFfcmVjYWxjX3BzKHNkYXRhLT5sb2NhbCwgLTEpOwotCW11dGV4X3VubG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKLQotCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZtZ2QtPmJzc2lkLCBpZm1nZC0+c3NpZCwKLQkJCQkgaWZtZ2QtPnNzaWRfbGVuLCBOVUxMLCAwKTsKLQotCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX1BST0JFX1dBSVQpOworCWllZWU4MDIxMV9tZ2RfcHJvYmVfYXAoc2RhdGEsIHRydWUpOwogfQogCiB2b2lkIGllZWU4MDIxMV9iZWFjb25fbG9zcyhzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7CiAKLQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLAotCQkgICAmc2RhdGEtPnUubWdkLmJlYWNvbl9sb3NzX3dvcmspOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LCAmc2RhdGEtPnUubWdkLmJlYWNvbl9sb3NzX3dvcmspOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYmVhY29uX2xvc3MpOwogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9yeDsKLQlib29sIGRpc2Fzc29jID0gZmFsc2U7Ci0KLQkvKiBUT0RPOiBzdGFydCBtb25pdG9yaW5nIGN1cnJlbnQgQVAgc2lnbmFsIHF1YWxpdHkgYW5kIG51bWJlciBvZgotCSAqIG1pc3NlZCBiZWFjb25zLiBTY2FuIG90aGVyIGNoYW5uZWxzIGV2ZXJ5IG5vdyBhbmQgdGhlbiBhbmQgc2VhcmNoCi0JICogZm9yIGJldHRlciBBUHMuICovCi0JLyogVE9ETzogcmVtb3ZlIGV4cGlyZWQgQlNTZXMgKi8KLQotCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOwotCWlmICghc3RhKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gU1RBIGVudHJ5IGZvciBvd24gQVAgJXBNXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKLQkJZGlzYXNzb2MgPSB0cnVlOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbGFzdF9yeCA9IHN0YS0+bGFzdF9yeDsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCWlmICgoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMKSAmJgotCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfcnggKyBJRUVFODAyMTFfUFJPQkVfV0FJVCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBubyBwcm9iZSByZXNwb25zZSBmcm9tIEFQICVwTSAiCi0JCSAgICAgICAiLSBkaXNhc3NvY2lhdGluZ1xuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7Ci0JCWRpc2Fzc29jID0gdHJ1ZTsKLQkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qCi0JICogQmVhY29uIGZpbHRlcmluZyBpcyBvbmx5IGVuYWJsZWQgd2l0aCBwb3dlciBzYXZlIGFuZCB0aGVuIHRoZQotCSAqIHN0YWNrIHNob3VsZCBub3QgY2hlY2sgZm9yIGJlYWNvbiBsb3NzLgotCSAqLwotCWlmICghKChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUikgJiYKLQkgICAgICAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykpICYmCi0JICAgIHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJICAgICAgIGlmbWdkLT5sYXN0X2JlYWNvbiArIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmVhY29uIGxvc3MgZnJvbSBBUCAlcE0gIgotCQkJICAgICAgICItIHNlbmRpbmcgcHJvYmUgcmVxdWVzdFxuIiwKLQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOwotCQl9Ci0jZW5kaWYKLQkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKLQkJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCQlpZWVlODAyMTFfcmVjYWxjX3BzKGxvY2FsLCAtMSk7Ci0JCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmbWdkLT5ic3NpZCwgaWZtZ2QtPnNzaWQsCi0JCQkJCSBpZm1nZC0+c3NpZF9sZW4sIE5VTEwsIDApOwotCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9QUk9CRV9XQUlUKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbGFzdF9yeCArIElFRUU4MDIxMV9QUk9CRV9JRExFX1RJTUUpKSB7Ci0JCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7Ci0JCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKLQkJaWVlZTgwMjExX3JlY2FsY19wcyhsb2NhbCwgLTEpOwotCQltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKLQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZm1nZC0+YnNzaWQsIGlmbWdkLT5zc2lkLAotCQkJCQkgaWZtZ2QtPnNzaWRfbGVuLCBOVUxMLCAwKTsKLQl9Ci0KLSBvdXQ6Ci0JaWYgKCFkaXNhc3NvYykKLQkJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsCi0JCQkgIGppZmZpZXMgKyBJRUVFODAyMTFfTU9OSVRPUklOR19JTlRFUlZBTCk7Ci0JZWxzZQotCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlLCB0cnVlLAotCQkJCQlXTEFOX1JFQVNPTl9QUkVWX0FVVEhfTk9UX1ZBTElEKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0KKwl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0lETEU7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGVkXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEOwotCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0VYVF9TTUUpIHsKLQkJLyogV2FpdCBmb3IgU01FIHRvIHJlcXVlc3QgYXNzb2NpYXRpb24gKi8KLQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOwotCQlpZWVlODAyMTFfcmVjYWxjX2lkbGUoc2RhdGEtPmxvY2FsKTsKLQl9IGVsc2UKLQkJaWVlZTgwMjExX2Fzc29jaWF0ZShzZGF0YSk7CiB9CiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuKQogewpAQCAtMTQ0NCwxNjEgKzEyNzQsMTMzIEBACiAJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhwb3MsIGxlbiAtIChwb3MgLSAodTggKikgbWdtdCksICZlbGVtcyk7CiAJaWYgKCFlbGVtcy5jaGFsbGVuZ2UpCiAJCXJldHVybjsKLQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAzLCBzZGF0YS0+dS5tZ2QuYXV0aF9hbGcsCisJaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgMywgd2stPmF1dGhfYWxnLAogCQkJICAgIGVsZW1zLmNoYWxsZW5nZSAtIDIsIGVsZW1zLmNoYWxsZW5nZV9sZW4gKyAyLAotCQkJICAgIHNkYXRhLT51Lm1nZC5ic3NpZCwgMSk7Ci0Jc2RhdGEtPnUubWdkLmF1dGhfdHJhbnNhY3Rpb24gPSA0OworCQkJICAgIHdrLT5ic3MtPmNic3MuYnNzaWQsCisJCQkgICAgd2stPmtleSwgd2stPmtleV9sZW4sIHdrLT5rZXlfaWR4KTsKKwl3ay0+YXV0aF90cmFuc2FjdGlvbiA9IDQ7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCSAgIHNpemVfdCBsZW4pCitzdGF0aWMgZW51bSByeF9tZ210X2FjdGlvbiBfX211c3RfY2hlY2sKK2llZWU4MDIxMV9yeF9tZ210X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1c19jb2RlOwogCi0JaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFKQotCQlyZXR1cm47CisJaWYgKHdrLT5zdGF0ZSAhPSBJRUVFODAyMTFfTUdEX1NUQVRFX0FVVEgpCisJCXJldHVybiBSWF9NR01UX05PTkU7CiAKIAlpZiAobGVuIDwgMjQgKyA2KQotCQlyZXR1cm47CisJCXJldHVybiBSWF9NR01UX05PTkU7CiAKLQlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQotCQlyZXR1cm47CisJaWYgKG1lbWNtcCh3ay0+YnNzLT5jYnNzLmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCisJCXJldHVybiBSWF9NR01UX05PTkU7CiAKLQlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQotCQlyZXR1cm47CisJaWYgKG1lbWNtcCh3ay0+YnNzLT5jYnNzLmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCisJCXJldHVybiBSWF9NR01UX05PTkU7CiAKIAlhdXRoX2FsZyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX2FsZyk7CiAJYXV0aF90cmFuc2FjdGlvbiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uKTsKIAlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSk7CiAKLQlpZiAoYXV0aF9hbGcgIT0gaWZtZ2QtPmF1dGhfYWxnIHx8Ci0JICAgIGF1dGhfdHJhbnNhY3Rpb24gIT0gaWZtZ2QtPmF1dGhfdHJhbnNhY3Rpb24pCi0JCXJldHVybjsKKwlpZiAoYXV0aF9hbGcgIT0gd2stPmF1dGhfYWxnIHx8CisJICAgIGF1dGhfdHJhbnNhY3Rpb24gIT0gd2stPmF1dGhfdHJhbnNhY3Rpb24pCisJCXJldHVybiBSWF9NR01UX05PTkU7CiAKIAlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewotCQlpZiAoc3RhdHVzX2NvZGUgPT0gV0xBTl9TVEFUVVNfTk9UX1NVUFBPUlRFRF9BVVRIX0FMRykgewotCQkJdTggYWxnc1szXTsKLQkJCWNvbnN0IGludCBudW1fYWxncyA9IEFSUkFZX1NJWkUoYWxncyk7Ci0JCQlpbnQgaSwgcG9zOwotCQkJYWxnc1swXSA9IGFsZ3NbMV0gPSBhbGdzWzJdID0gMHhmZjsKLQkJCWlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCi0JCQkJYWxnc1swXSA9IFdMQU5fQVVUSF9PUEVOOwotCQkJaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSkKLQkJCQlhbGdzWzFdID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7Ci0JCQlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQotCQkJCWFsZ3NbMl0gPSBXTEFOX0FVVEhfTEVBUDsKLQkJCWlmIChpZm1nZC0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX09QRU4pCi0JCQkJcG9zID0gMDsKLQkJCWVsc2UgaWYgKGlmbWdkLT5hdXRoX2FsZyA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSkKLQkJCQlwb3MgPSAxOwotCQkJZWxzZQotCQkJCXBvcyA9IDI7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2FsZ3M7IGkrKykgewotCQkJCXBvcysrOwotCQkJCWlmIChwb3MgPj0gbnVtX2FsZ3MpCi0JCQkJCXBvcyA9IDA7Ci0JCQkJaWYgKGFsZ3NbcG9zXSA9PSBpZm1nZC0+YXV0aF9hbGcgfHwKLQkJCQkgICAgYWxnc1twb3NdID09IDB4ZmYpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmIChhbGdzW3Bvc10gPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkgJiYKLQkJCQkgICAgIWllZWU4MDIxMV9zdGFfd2VwX2NvbmZpZ3VyZWQoc2RhdGEpKQotCQkJCQljb250aW51ZTsKLQkJCQlpZm1nZC0+YXV0aF9hbGcgPSBhbGdzW3Bvc107Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuOworCQlsaXN0X2RlbCgmd2stPmxpc3QpOworCQlrZnJlZSh3ayk7CisJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FVVEg7CiAJfQogCi0Jc3dpdGNoIChpZm1nZC0+YXV0aF9hbGcpIHsKKwlzd2l0Y2ggKHdrLT5hdXRoX2FsZykgewogCWNhc2UgV0xBTl9BVVRIX09QRU46CiAJY2FzZSBXTEFOX0FVVEhfTEVBUDoKIAljYXNlIFdMQU5fQVVUSF9GVDoKLQkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhKTsKLQkJY2ZnODAyMTFfc2VuZF9yeF9hdXRoKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBsZW4pOwotCQlicmVhazsKKwkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhLCB3ayk7CisJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FVVEg7CiAJY2FzZSBXTEFOX0FVVEhfU0hBUkVEX0tFWToKLQkJaWYgKGlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID09IDQpIHsKLQkJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSk7Ci0JCQljZmc4MDIxMV9zZW5kX3J4X2F1dGgoc2RhdGEtPmRldiwgKHU4ICopIG1nbXQsIGxlbik7CisJCWlmICh3ay0+YXV0aF90cmFuc2FjdGlvbiA9PSA0KSB7CisJCQlpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc2RhdGEsIHdrKTsKKwkJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FVVEg7CiAJCX0gZWxzZQotCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHNkYXRhLCBtZ210LCBsZW4pOworCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHNkYXRhLCB3aywgbWdtdCwgbGVuKTsKIAkJYnJlYWs7CiAJfQorCisJcmV0dXJuIFJYX01HTVRfTk9ORTsKIH0KIAogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCi0JCQkJICAgICBzaXplX3QgbGVuKQorc3RhdGljIGVudW0gcnhfbWdtdF9hY3Rpb24gX19tdXN0X2NoZWNrCitpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssCisJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCWNvbnN0IHU4ICpic3NpZCA9IE5VTEw7CiAJdTE2IHJlYXNvbl9jb2RlOwogCiAJaWYgKGxlbiA8IDI0ICsgMikKLQkJcmV0dXJuOworCQlyZXR1cm4gUlhfTUdNVF9OT05FOwogCi0JaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCi0JCXJldHVybjsKKwlBU1NFUlRfTUdEX01UWChpZm1nZCk7CisKKwlpZiAod2spCisJCWJzc2lkID0gd2stPmJzcy0+Y2Jzcy5ic3NpZDsKKwllbHNlCisJCWJzc2lkID0gaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQ7CiAKIAlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGVhdXRoLnJlYXNvbl9jb2RlKTsKIAotCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZGVhdXRoZW50aWNhdGVkIChSZWFzb246ICV1KVxuIiwKLQkJCQlzZGF0YS0+ZGV2LT5uYW1lLCByZWFzb25fY29kZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0ZWQgZnJvbSAlcE0gKFJlYXNvbjogJXUpXG4iLAorCQkJc2RhdGEtPmRldi0+bmFtZSwgYnNzaWQsIHJlYXNvbl9jb2RlKTsKIAotCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkgJiYKLQkgICAgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFIHx8Ci0JICAgICBpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSB8fAotCSAgICAgaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSkgewotCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOwotCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArCi0JCQkJICAgICAgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwpOworCWlmICghd2spIHsKKwkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSk7CisJfSBlbHNlIHsKKwkJbGlzdF9kZWwoJndrLT5saXN0KTsKKwkJa2ZyZWUod2spOwogCX0KIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIGZhbHNlLCAwKTsKLQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKLQljZmc4MDIxMV9zZW5kX2RlYXV0aChzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgbGVuKTsKKwlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9ERUFVVEg7CiB9CiAKIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkgICAgICAgc2l6ZV90IGxlbikKK3N0YXRpYyBlbnVtIHJ4X21nbXRfYWN0aW9uIF9fbXVzdF9jaGVjaworaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJdTE2IHJlYXNvbl9jb2RlOwogCiAJaWYgKGxlbiA8IDI0ICsgMikKLQkJcmV0dXJuOworCQlyZXR1cm4gUlhfTUdNVF9OT05FOwogCi0JaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCi0JCXJldHVybjsKKwlBU1NFUlRfTUdEX01UWChpZm1nZCk7CisKKwlpZiAoV0FSTl9PTighaWZtZ2QtPmFzc29jaWF0ZWQpKQorCQlyZXR1cm4gUlhfTUdNVF9OT05FOworCisJaWYgKFdBUk5fT04obWVtY21wKGlmbWdkLT5hc3NvY2lhdGVkLT5jYnNzLmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pKSkKKwkJcmV0dXJuIFJYX01HTVRfTk9ORTsKIAogCXJlYXNvbl9jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5kaXNhc3NvYy5yZWFzb25fY29kZSk7CiAKLQlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc2Fzc29jaWF0ZWQgKFJlYXNvbjogJXUpXG4iLAotCQkJCXNkYXRhLT5kZXYtPm5hbWUsIHJlYXNvbl9jb2RlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc2Fzc29jaWF0ZWQgKFJlYXNvbjogJXUpXG4iLAorCQkJc2RhdGEtPmRldi0+bmFtZSwgcmVhc29uX2NvZGUpOwogCi0JaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9FWFRfU01FKSAmJgotCSAgICBpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKLQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURTsKLQkJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKwotCQkJCSAgICAgIElFRUU4MDIxMV9SRVRSWV9BVVRIX0lOVEVSVkFMKTsKLQl9Ci0KLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSwgZmFsc2UsIHJlYXNvbl9jb2RlKTsKLQljZmc4MDIxMV9zZW5kX2Rpc2Fzc29jKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBsZW4pOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGZhbHNlKTsKKwlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9ESVNBU1NPQzsKIH0KIAogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCQkgc2l6ZV90IGxlbiwKLQkJCQkJIGludCByZWFzc29jKQorc3RhdGljIGVudW0gcnhfbWdtdF9hY3Rpb24gX19tdXN0X2NoZWNrCitpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAorCQkJICAgICBib29sIHJlYXNzb2MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CkBAIC0xNjE0LDE3ICsxNDE2LDE2IEBACiAJYm9vbCBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCA9IGZhbHNlLCBuZXdzdGEgPSBmYWxzZTsKIAl1MTYgYXBfaHRfY2FwX2ZsYWdzOwogCi0JLyogQXNzb2NSZXNwIGFuZCBSZWFzc29jUmVzcCBoYXZlIGlkZW50aWNhbCBzdHJ1Y3R1cmUsIHNvIHByb2Nlc3MgYm90aAotCSAqIG9mIHRoZW0gaW4gdGhpcyBmdW5jdGlvbi4gKi8KLQotCWlmIChpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSkKLQkJcmV0dXJuOworCS8qCisJICogQXNzb2NSZXNwIGFuZCBSZWFzc29jUmVzcCBoYXZlIGlkZW50aWNhbCBzdHJ1Y3R1cmUsIHNvIHByb2Nlc3MgYm90aAorCSAqIG9mIHRoZW0gaW4gdGhpcyBmdW5jdGlvbi4KKwkgKi8KIAogCWlmIChsZW4gPCAyNCArIDYpCi0JCXJldHVybjsKKwkJcmV0dXJuIFJYX01HTVRfTk9ORTsKIAotCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCi0JCXJldHVybjsKKwlpZiAobWVtY21wKHdrLT5ic3MtPmNic3MuYnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkKKwkJcmV0dXJuIFJYX01HTVRfTk9ORTsKIAogCWNhcGFiX2luZm8gPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuY2FwYWJfaW5mbyk7CiAJc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3Auc3RhdHVzX2NvZGUpOwpAQCAtMTY0NywyNiArMTQ0OCwxOCBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFQIHJlamVjdGVkIGFzc29jaWF0aW9uIHRlbXBvcmFyaWx5OyAiCiAJCSAgICAgICAiY29tZWJhY2sgZHVyYXRpb24gJXUgVFUgKCV1IG1zKVxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHR1LCBtcyk7CisJCXdrLT50aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobXMpOwogCQlpZiAobXMgPiBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCkKLQkJCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLAotCQkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobXMpKTsKLQkJcmV0dXJuOworCQkJcnVuX2FnYWluKGlmbWdkLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhtcykpOworCQlyZXR1cm4gUlhfTUdNVF9OT05FOwogCX0KIAogCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogQVAgZGVuaWVkIGFzc29jaWF0aW9uIChjb2RlPSVkKVxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHN0YXR1c19jb2RlKTsKLQkJLyogaWYgdGhpcyB3YXMgYSByZWFzc29jaWF0aW9uLCBlbnN1cmUgd2UgdHJ5IGEgImZ1bGwiCi0JCSAqIGFzc29jaWF0aW9uIG5leHQgdGltZS4gVGhpcyB3b3JrcyBhcm91bmQgc29tZSBicm9rZW4gQVBzCi0JCSAqIHdoaWNoIGRvIG5vdCBjb3JyZWN0bHkgcmVqZWN0IHJlYXNzb2NpYXRpb24gcmVxdWVzdHMuICovCi0JCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKLQkJY2ZnODAyMTFfc2VuZF9yeF9hc3NvYyhzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgbGVuKTsKLQkJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkgewotCQkJLyogV2FpdCBmb3IgU01FIHRvIGRlY2lkZSB3aGF0IHRvIGRvIG5leHQgKi8KLQkJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7Ci0JCX0KLQkJcmV0dXJuOworCQlsaXN0X2RlbCgmd2stPmxpc3QpOworCQlrZnJlZSh3ayk7CisJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FTU09DOwogCX0KIAogCWlmICgoYWlkICYgKEJJVCgxNSkgfCBCSVQoMTQpKSkgIT0gKEJJVCgxNSkgfCBCSVQoMTQpKSkKQEAgLTE2NzcsNTIgKzE0NzAsMzYgQEAKIAlpZiAoIWVsZW1zLnN1cHBfcmF0ZXMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBubyBTdXBwUmF0ZXMgZWxlbWVudCBpbiBBc3NvY1Jlc3BcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gUlhfTUdNVF9OT05FOwogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRlZFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CiAJaWZtZ2QtPmFpZCA9IGFpZDsKLQlpZm1nZC0+YXBfY2FwYWIgPSBjYXBhYl9pbmZvOwotCi0Ja2ZyZWUoaWZtZ2QtPmFzc29jcmVzcF9pZXMpOwotCWlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbiA9IGxlbiAtIChwb3MgLSAodTggKikgbWdtdCk7Ci0JaWZtZ2QtPmFzc29jcmVzcF9pZXMgPSBrbWFsbG9jKGlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGlmbWdkLT5hc3NvY3Jlc3BfaWVzKQotCQltZW1jcHkoaWZtZ2QtPmFzc29jcmVzcF9pZXMsIHBvcywgaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAogCS8qIEFkZCBTVEEgZW50cnkgZm9yIHRoZSBBUCAqLwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHdrLT5ic3MtPmNic3MuYnNzaWQpOwogCWlmICghc3RhKSB7CiAJCW5ld3N0YSA9IHRydWU7CiAKLQkJc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGlmbWdkLT5ic3NpZCwgR0ZQX0FUT01JQyk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCisJCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCB3ay0+YnNzLT5jYnNzLmJzc2lkLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzdGEpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jIFNUQSBlbnRyeSBmb3IiCiAJCQkgICAgICAgIiB0aGUgQVBcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlyZXR1cm47CisJCQlyZXR1cm4gUlhfTUdNVF9OT05FOwogCQl9CiAKLQkJLyogdXBkYXRlIG5ldyBzdGEgd2l0aCBpdHMgbGFzdCByeCBhY3Rpdml0eSAqLwotCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOworCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQVVUSCB8IFdMQU5fU1RBX0FTU09DIHwKKwkJCQkgICBXTEFOX1NUQV9BU1NPQ19BUCk7CisJCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUKSkKKwkJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9BVVRIT1JJWkVEKTsKKworCQlyY3VfcmVhZF9sb2NrKCk7CiAJfQogCi0JLyoKLQkgKiBGSVhNRTogRG8gd2UgcmVhbGx5IG5lZWQgdG8gdXBkYXRlIHRoZSBzdGFfaW5mbydzIGluZm9ybWF0aW9uIGhlcmU/Ci0JICoJICBXZSBhbHJlYWR5IGtub3cgYWJvdXQgdGhlIEFQICh3ZSBmb3VuZCBpdCBpbiBvdXIgbGlzdCkgc28gaXQKLQkgKgkgIHNob3VsZCBhbHJlYWR5IGJlIGZpbGxlZCB3aXRoIHRoZSByaWdodCBpbmZvLCBubz8KLQkgKgkgIEFzIGlzIHN0YW5kcywgYWxsIHRoaXMgaXMgcmFjeSBiZWNhdXNlIHR5cGljYWxseSB3ZSBhc3N1bWUKLQkgKgkgIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIGZpbGxlZCBpbiBoZXJlIChleGNlcHQgZmxhZ3MpIGRvZXNuJ3QKLQkgKgkgIGNoYW5nZSB3aGlsZSBhIFNUQSBzdHJ1Y3R1cmUgaXMgYWxpdmUuIEFzIHN1Y2gsIGl0IHNob3VsZCBtb3ZlCi0JICoJICB0byBiZXR3ZWVuIHRoZSBzdGFfaW5mb19hbGxvYygpIGFuZCBzdGFfaW5mb19pbnNlcnQoKSBhYm92ZS4KLQkgKi8KLQotCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9BVVRIIHwgV0xBTl9TVEFfQVNTT0MgfCBXTEFOX1NUQV9BU1NPQ19BUCk7Ci0JaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQpKQotCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQVVUSE9SSVpFRCk7Ci0KIAlyYXRlcyA9IDA7CiAJYmFzaWNfcmF0ZXMgPSAwOwogCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKQEAgLTE3NzEsOCArMTU0OCw3IEBACiAJZWxzZQogCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CiAKLQkvKiBJZiBUS0lQL1dFUCBpcyB1c2VkLCBubyBuZWVkIHRvIHBhcnNlIEFQJ3MgSFQgY2FwYWJpbGl0aWVzICovCi0JaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkKKwlpZiAoZWxlbXMuaHRfY2FwX2VsZW0gJiYgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOKSkKIAkJaWVlZTgwMjExX2h0X2NhcF9pZV90b19zdGFfaHRfY2FwKHNiYW5kLAogCQkJCWVsZW1zLmh0X2NhcF9lbGVtLCAmc3RhLT5zdGEuaHRfY2FwKTsKIApAQCAtMTc5Miw3ICsxNTY4LDcgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGluc2VydCBTVEEgZW50cnkgZm9yIgogCQkJICAgICAgICIgdGhlIEFQIChlcnJvciAlZClcbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGVycik7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCXJldHVybjsKKwkJCXJldHVybiBSWF9NR01UX05PTkU7CiAJCX0KIAl9CiAKQEAgLTE4MDYsMjQgKzE1ODIsMjkgQEAKIAogCWlmIChlbGVtcy5odF9pbmZvX2VsZW0gJiYgZWxlbXMud21tX3BhcmFtICYmCiAJICAgIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgotCSAgICAhKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRCkpCisJICAgICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9ESVNBQkxFXzExTikpCiAJCWNoYW5nZWQgfD0gaWVlZTgwMjExX2VuYWJsZV9odChzZGF0YSwgZWxlbXMuaHRfaW5mb19lbGVtLAorCQkJCQkgICAgICAgd2stPmJzcy0+Y2Jzcy5ic3NpZCwKIAkJCQkJICAgICAgIGFwX2h0X2NhcF9mbGFncyk7CiAKKyAgICAgICAgLyogZGVsZXRlIHdvcmsgaXRlbSAtLSBtdXN0IGJlIGJlZm9yZSBzZXRfYXNzb2NpYXRlZCBmb3IgUFMgKi8KKwlsaXN0X2RlbCgmd2stPmxpc3QpOworCiAJLyogc2V0IEFJRCBhbmQgYXNzb2MgY2FwYWJpbGl0eSwKIAkgKiBpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoKSB3aWxsIHRlbGwgdGhlIGRyaXZlciAqLwogCWJzc19jb25mLT5haWQgPSBhaWQ7CiAJYnNzX2NvbmYtPmFzc29jX2NhcGFiaWxpdHkgPSBjYXBhYl9pbmZvOwotCWllZWU4MDIxMV9zZXRfYXNzb2NpYXRlZChzZGF0YSwgY2hhbmdlZCk7CisJLyogdGhpcyB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHdrICovCisJaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHNkYXRhLCB3aywgY2hhbmdlZCk7CiAKIAkvKgotCSAqIGluaXRpYWxpc2UgdGhlIHRpbWUgb2YgbGFzdCBiZWFjb24gdG8gYmUgdGhlIGFzc29jaWF0aW9uIHRpbWUsCi0JICogb3RoZXJ3aXNlIGJlYWNvbiBsb3NzIGNoZWNrIHdpbGwgdHJpZ2dlciBpbW1lZGlhdGVseQorCSAqIFN0YXJ0IHRpbWVyIHRvIHByb2JlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBBUCBub3cuCisJICogQWxzbyBzdGFydCB0aGUgdGltZXIgdGhhdCB3aWxsIGRldGVjdCBiZWFjb24gbG9zcy4KIAkgKi8KLQlpZm1nZC0+bGFzdF9iZWFjb24gPSBqaWZmaWVzOworCWllZWU4MDIxMV9zdGFfcnhfbm90aWZ5KHNkYXRhLCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKiltZ210KTsKKwltb2RfYmVhY29uX3RpbWVyKHNkYXRhKTsKIAotCWllZWU4MDIxMV9hc3NvY2lhdGVkKHNkYXRhKTsKLQljZmc4MDIxMV9zZW5kX3J4X2Fzc29jKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBsZW4pOworCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FTU09DOwogfQogCiAKQEAgLTE4NTEsMjMgKzE2MzIsMjUgQEAKIAogCWJzcyA9IGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUobG9jYWwsIHJ4X3N0YXR1cywgbWdtdCwgbGVuLCBlbGVtcywKIAkJCQkJY2hhbm5lbCwgYmVhY29uKTsKLQlpZiAoIWJzcykKKwlpZiAoYnNzKQorCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKworCWlmICghc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpCiAJCXJldHVybjsKIAogCWlmIChlbGVtcy0+Y2hfc3dpdGNoX2VsZW0gJiYgKGVsZW1zLT5jaF9zd2l0Y2hfZWxlbV9sZW4gPT0gMykgJiYKLQkgICAgKG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkpIHsKKwkgICAgKG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsCisJCQkJCQkJRVRIX0FMRU4pID09IDApKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqc3dfZWxlbSA9CiAJCQkoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICopZWxlbXMtPmNoX3N3aXRjaF9lbGVtOwogCQlpZWVlODAyMTFfc3RhX3Byb2Nlc3NfY2hhbnN3aXRjaChzZGF0YSwgc3dfZWxlbSwgYnNzKTsKIAl9Ci0KLQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCQkgc2l6ZV90IGxlbiwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrLAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAogCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwpAQCAtMTg3Niw2ICsxNjU5LDggQEAKIAogCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAorCUFTU0VSVF9NR0RfTVRYKGlmbWdkKTsKKwogCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCiAJCXJldHVybjsgLyogaWdub3JlIFByb2JlUmVzcCB0byBmb3JlaWduIGFkZHJlc3MgKi8KIApAQCAtMTg4OSwxNyArMTY3NCwzMiBAQAogCWllZWU4MDIxMV9yeF9ic3NfaW5mbyhzZGF0YSwgbWdtdCwgbGVuLCByeF9zdGF0dXMsICZlbGVtcywgZmFsc2UpOwogCiAJLyogZGlyZWN0IHByb2JlIG1heSBiZSBwYXJ0IG9mIHRoZSBhc3NvY2lhdGlvbiBmbG93ICovCi0JaWYgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFKSB7CisJaWYgKHdrICYmIHdrLT5zdGF0ZSA9PSBJRUVFODAyMTFfTUdEX1NUQVRFX1BST0JFKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlcyBkaXJlY3QgcHJvYmUgcmVzcG9uZGVkXG4iLAogCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEpOworCQl3ay0+dHJpZXMgPSAwOworCQl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0FVVEg7CisJCVdBUk5fT04oaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzZGF0YSwgd2spICE9IFJYX01HTVRfTk9ORSk7CiAJfQogCi0JaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCkgewotCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKKwlpZiAoaWZtZ2QtPmFzc29jaWF0ZWQgJiYKKwkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pID09IDAgJiYKKwkgICAgaWZtZ2QtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwgfAorCQkJICAgIElFRUU4MDIxMV9TVEFfQ09OTkVDVElPTl9QT0xMKSkgeworCQlpZm1nZC0+ZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCB8CisJCQkJICBJRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMKTsKIAkJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKIAkJaWVlZTgwMjExX3JlY2FsY19wcyhzZGF0YS0+bG9jYWwsIC0xKTsKIAkJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmlmbGlzdF9tdHgpOworCQkvKgorCQkgKiBXZSd2ZSByZWNlaXZlZCBhIHByb2JlIHJlc3BvbnNlLCBidXQgYXJlIG5vdCBzdXJlIHdoZXRoZXIKKwkJICogd2UgaGF2ZSBvciB3aWxsIGJlIHJlY2VpdmluZyBhbnkgYmVhY29ucyBvciBkYXRhLCBzbyBsZXQncworCQkgKiBzY2hlZHVsZSB0aGUgdGltZXJzIGFnYWluLCBqdXN0IGluIGNhc2UuCisJCSAqLworCQltb2RfYmVhY29uX3RpbWVyKHNkYXRhKTsKKwkJbW9kX3RpbWVyKCZpZm1nZC0+Y29ubl9tb25fdGltZXIsCisJCQkgIHJvdW5kX2ppZmZpZXNfdXAoamlmZmllcyArCisJCQkJCSAgIElFRUU4MDIxMV9DT05ORUNUSU9OX0lETEVfVElNRSkpOwogCX0KIH0KIApAQCAtMTkzNyw2ICsxNzM3LDkgQEAKIAlib29sIGVycF92YWxpZCwgZGlyZWN0ZWRfdGltID0gZmFsc2U7CiAJdTggZXJwX3ZhbHVlID0gMDsKIAl1MzIgbmNyYzsKKwl1OCAqYnNzaWQ7CisKKwlBU1NFUlRfTUdEX01UWChpZm1nZCk7CiAKIAkvKiBQcm9jZXNzIGJlYWNvbiBmcm9tIHRoZSBjdXJyZW50IEJTUyAqLwogCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5iZWFjb24udmFyaWFibGUgLSAodTggKikgbWdtdDsKQEAgLTE5NDYsMjMgKzE3NDksNDEgQEAKIAlpZiAocnhfc3RhdHVzLT5mcmVxICE9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKQogCQlyZXR1cm47CiAKLQlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHx8Ci0JICAgIG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKKwkvKgorCSAqIFdlIG1pZ2h0IGhhdmUgcmVjZWl2ZWQgYSBudW1iZXIgb2YgZnJhbWVzLCBhbW9uZyB0aGVtIGEKKwkgKiBkaXNhc3NvYyBmcmFtZSBhbmQgYSBiZWFjb24uLi4KKwkgKi8KKwlpZiAoIWlmbWdkLT5hc3NvY2lhdGVkKQogCQlyZXR1cm47CiAKLQlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMKSB7CisJYnNzaWQgPSBpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZDsKKworCS8qCisJICogQW5kIGluIHRoZW9yeSBldmVuIGZyYW1lcyBmcm9tIGEgZGlmZmVyZW50IEFQIHdlIHdlcmUganVzdAorCSAqIGFzc29jaWF0ZWQgdG8gYSBzcGxpdC1zZWNvbmQgYWdvIQorCSAqLworCWlmIChtZW1jbXAoYnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKKwkJcmV0dXJuOworCisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwpIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGNhbmNlbGxpbmcgcHJvYmVyZXEgcG9sbCBkdWUgIgogCQkJICAgICAgICJ0byBhIHJlY2VpdmVkIGJlYWNvblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CiAJCX0KICNlbmRpZgotCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKKwkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMOwogCQltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJCWllZWU4MDIxMV9yZWNhbGNfcHMobG9jYWwsIC0xKTsKIAkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJfQogCisJLyoKKwkgKiBQdXNoIHRoZSBiZWFjb24gbG9zcyBkZXRlY3Rpb24gaW50byB0aGUgZnV0dXJlIHNpbmNlCisJICogd2UgYXJlIHByb2Nlc3NpbmcgYSBiZWFjb24gZnJvbSB0aGUgQVAganVzdCBub3cuCisJICovCisJbW9kX2JlYWNvbl90aW1lcihzZGF0YSk7CisKIAluY3JjID0gY3JjMzJfYmUoMCwgKHZvaWQgKikmbWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCwgNCk7CiAJbmNyYyA9IGllZWU4MDJfMTFfcGFyc2VfZWxlbXNfY3JjKG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlLAogCQkJCQkgIGxlbiAtIGJhc2VsZW4sICZlbGVtcywKQEAgLTIwMTksMTUgKzE4NDAsMTUgQEAKIAogCiAJaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmIGVsZW1zLmh0X2luZm9fZWxlbSAmJiBlbGVtcy53bW1fcGFyYW0gJiYKLQkgICAgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKSB7CisJICAgICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9ESVNBQkxFXzExTikpIHsKIAkJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCQl1MTYgYXBfaHRfY2FwX2ZsYWdzOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7Ci0JCWlmICghc3RhKSB7CisJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgYnNzaWQpOworCQlpZiAoV0FSTl9PTighc3RhKSkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTIwNDIsMTUgKzE4NjMsMTEgQEAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJY2hhbmdlZCB8PSBpZWVlODAyMTFfZW5hYmxlX2h0KHNkYXRhLCBlbGVtcy5odF9pbmZvX2VsZW0sCi0JCQkJCSAgICAgICBhcF9odF9jYXBfZmxhZ3MpOworCQkJCQkgICAgICAgYnNzaWQsIGFwX2h0X2NhcF9mbGFncyk7CiAJfQogCisJLyogTm90ZTogY291bnRyeSBJRSBwYXJzaW5nIGlzIGRvbmUgZm9yIHVzIGJ5IGNmZzgwMjExICovCiAJaWYgKGVsZW1zLmNvdW50cnlfZWxlbSkgewotCQkvKiBOb3RlIHdlIGFyZSBvbmx5IHJldmlld2luZyB0aGlzIG9uIGJlYWNvbnMKLQkJICogZm9yIHRoZSBCU1NJRCB3ZSBhcmUgYXNzb2NpYXRlZCB0byAqLwotCQlyZWd1bGF0b3J5X2hpbnRfMTFkKGxvY2FsLT5ody53aXBoeSwKLQkJCWVsZW1zLmNvdW50cnlfZWxlbSwgZWxlbXMuY291bnRyeV9lbGVtX2xlbik7Ci0KIAkJLyogVE9ETzogSUJTUyBhbHNvIG5lZWRzIHRoaXMgKi8KIAkJaWYgKGVsZW1zLnB3cl9jb25zdHJfZWxlbSkKIAkJCWllZWU4MDIxMV9oYW5kbGVfcHdyX2NvbnN0cihzZGF0YSwKQEAgLTIwNjMsOCArMTg4MCw3IEBACiB9CiAKIGllZWU4MDIxMV9yeF9yZXN1bHQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKQEAgLTIwODAsMTQgKzE4OTYsMTQgQEAKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046Ci0JCW1lbWNweShza2ItPmNiLCByeF9zdGF0dXMsIHNpemVvZigqcnhfc3RhdHVzKSk7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OOgogCQlza2JfcXVldWVfdGFpbCgmc2RhdGEtPnUubWdkLnNrYl9xdWV1ZSwgc2tiKTsKLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUubWdkLndvcmspOworCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmc2RhdGEtPnUubWdkLndvcmspOwogCQlyZXR1cm4gUlhfUVVFVUVEOwogCX0KIApAQCAtMjA5Nyw0MCArMTkxMywxMTkgQEAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrOworCWVudW0gcnhfbWdtdF9hY3Rpb24gcm1hID0gUlhfTUdNVF9OT05FOwogCXUxNiBmYzsKIAogCXJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItPmNiOwogCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKIAlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOwogCi0Jc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCi0JCQkJCSAgICAgcnhfc3RhdHVzKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAotCQkJCQkgcnhfc3RhdHVzKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgotCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sIDEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6Ci0JCWllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKLQkJaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2Moc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKKworCWlmIChpZm1nZC0+YXNzb2NpYXRlZCAmJgorCSAgICBtZW1jbXAoaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsIG1nbXQtPmJzc2lkLAorCQkJCQkJCUVUSF9BTEVOKSA9PSAwKSB7CisJCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgeworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046CisJCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAorCQkJCQkJIHJ4X3N0YXR1cyk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKKwkJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc2RhdGEsIE5VTEwsIG1nbXQsCisJCQkJCQkgICAgIHNrYi0+bGVuLCByeF9zdGF0dXMpOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKKwkJCXJtYSA9IGllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzZGF0YSwgTlVMTCwKKwkJCQkJCSAgICAgICBtZ210LCBza2ItPmxlbik7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6CisJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKKwkJCS8qIFhYWDogZGlmZmVyZW50aWF0ZSwgY2FuIG9ubHkgaGFwcGVuIGZvciBDU0Egbm93ISAqLworCQkJaWVlZTgwMjExX3N0YV9wcm9jZXNzX2NoYW5zd2l0Y2goc2RhdGEsCisJCQkJCSZtZ210LT51LmFjdGlvbi51LmNoYW5fc3dpdGNoLnN3X2VsZW0sCisJCQkJCWlmbWdkLT5hc3NvY2lhdGVkKTsKKwkJCWJyZWFrOworCQl9CisJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisKKwkJc3dpdGNoIChybWEpIHsKKwkJY2FzZSBSWF9NR01UX05PTkU6CisJCQkvKiBubyBhY3Rpb24gKi8KKwkJCWJyZWFrOworCQljYXNlIFJYX01HTVRfQ0ZHODAyMTFfREVBVVRIOgorCQkJY2ZnODAyMTFfc2VuZF9kZWF1dGgoc2RhdGEtPmRldiwgKHU4ICopbWdtdCwgc2tiLT5sZW4sCisJCQkJCSAgICAgTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSBSWF9NR01UX0NGRzgwMjExX0RJU0FTU09DOgorCQkJY2ZnODAyMTFfc2VuZF9kaXNhc3NvYyhzZGF0YS0+ZGV2LCAodTggKiltZ210LCBza2ItPmxlbiwKKwkJCQkJICAgICAgIE5VTEwpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlXQVJOKDEsICJ1bmV4cGVjdGVkOiAlZCIsIHJtYSk7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aywgJmlmbWdkLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKG1lbWNtcCh3ay0+YnNzLT5jYnNzLmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKKwkJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc2RhdGEsIHdrLCBtZ210LCBza2ItPmxlbiwKKwkJCQkJCSAgICAgcnhfc3RhdHVzKTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgorCQkJcm1hID0gaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgd2ssIG1nbXQsIHNrYi0+bGVuKTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgorCQkJcm1hID0gaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgd2ssIG1nbXQsCisJCQkJCQkJICAgc2tiLT5sZW4sIGZhbHNlKTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6CisJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCB3aywgbWdtdCwKKwkJCQkJCQkgICBza2ItPmxlbiwgdHJ1ZSk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgorCQkJcm1hID0gaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHNkYXRhLCB3aywgbWdtdCwKKwkJCQkJCSAgICAgICBza2ItPmxlbik7CisJCQlicmVhazsKKwkJfQorCQkvKgorCQkgKiBXZSd2ZSBwcm9jZXNzZWQgdGhpcyBmcmFtZSBmb3IgdGhhdCB3b3JrLCBzbyBpdCBjYW4ndAorCQkgKiBiZWxvbmcgdG8gYW5vdGhlciB3b3JrIHN0cnVjdC4KKwkJICogTkI6IHRoaXMgaXMgYWxzbyByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MgYmVjYXVzZSB0aGUKKwkJICogY2FsbGVkIGZ1bmN0aW9ucyBjYW4gZnJlZSAnd2snLCBhbmQgZm9yICdybWEnIQorCQkgKi8KIAkJYnJlYWs7CiAJfQogCisJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKKworCXN3aXRjaCAocm1hKSB7CisJY2FzZSBSWF9NR01UX05PTkU6CisJCS8qIG5vIGFjdGlvbiAqLworCQlicmVhazsKKwljYXNlIFJYX01HTVRfQ0ZHODAyMTFfQVVUSDoKKwkJY2ZnODAyMTFfc2VuZF9yeF9hdXRoKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBza2ItPmxlbik7CisJCWJyZWFrOworCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9BU1NPQzoKKwkJY2ZnODAyMTFfc2VuZF9yeF9hc3NvYyhzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgc2tiLT5sZW4pOworCQlicmVhazsKKwljYXNlIFJYX01HTVRfQ0ZHODAyMTFfREVBVVRIOgorCQljZmc4MDIxMV9zZW5kX2RlYXV0aChzZGF0YS0+ZGV2LCAodTggKiltZ210LCBza2ItPmxlbiwgTlVMTCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk4oMSwgInVuZXhwZWN0ZWQ6ICVkIiwgcm1hKTsKKwl9CisKKyBvdXQ6CiAJa2ZyZWVfc2tiKHNrYik7CiB9CiAKQEAgLTIxNDYsMTI1ICsyMDQxLDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpOwotCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtZ2QtPndvcmspOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0KLQkvKiBSZXNldCBvd24gVFNGIHRvIGFsbG93IHRpbWUgc3luY2hyb25pemF0aW9uIHdvcmsuICovCi0JZHJ2X3Jlc2V0X3RzZihsb2NhbCk7Ci0KLQlpZm1nZC0+d21tX2xhc3RfcGFyYW1fc2V0ID0gLTE7IC8qIGFsbG93IGFueSBXTU0gdXBkYXRlICovCi0KLQotCWlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCi0JCWlmbWdkLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9PUEVOOwotCWVsc2UgaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSkKLQkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7Ci0JZWxzZSBpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQotCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfTEVBUDsKLQllbHNlIGlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX0ZUKQotCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfRlQ7Ci0JZWxzZQotCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKLQlpZm1nZC0+YXV0aF90cmFuc2FjdGlvbiA9IC0xOwotCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOwotCWlmbWdkLT5hc3NvY19zY2FuX3RyaWVzID0gMDsKLQlpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzID0gMDsKLQlpZm1nZC0+YXV0aF90cmllcyA9IDA7Ci0JaWZtZ2QtPmFzc29jX3RyaWVzID0gMDsKLQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7Ci0JbmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtPmRldik7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCXU4ICpic3NpZCA9IGlmbWdkLT5ic3NpZCwgKnNzaWQgPSBpZm1nZC0+c3NpZDsKLQl1OCBzc2lkX2xlbiA9IGlmbWdkLT5zc2lkX2xlbjsKLQl1MTYgY2FwYV9tYXNrID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKLQl1MTYgY2FwYV92YWwgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9IGxvY2FsLT5vcGVyX2NoYW5uZWw7Ci0KLQlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0VYVF9TTUUpICYmCi0JICAgIGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwgfAotCQkJICAgIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAotCQkJICAgIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkpIHsKLQkJY2FwYV9tYXNrIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwotCQlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5KQotCQkJY2FwYV92YWwgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7Ci0JfQotCi0JaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkKLQkJY2hhbiA9IE5VTEw7Ci0KLQlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCkKLQkJYnNzaWQgPSBOVUxMOwotCi0JaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkgewotCQlzc2lkID0gTlVMTDsKLQkJc3NpZF9sZW4gPSAwOwotCX0KLQotCWJzcyA9ICh2b2lkICopY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksIGNoYW4sCi0JCQkJICAgICAgIGJzc2lkLCBzc2lkLCBzc2lkX2xlbiwKLQkJCQkgICAgICAgY2FwYV9tYXNrLCBjYXBhX3ZhbCk7Ci0KLQlpZiAoYnNzKSB7Ci0JCWxvY2FsLT5vcGVyX2NoYW5uZWwgPSBic3MtPmNic3MuY2hhbm5lbDsKLQkJbG9jYWwtPm9wZXJfY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOwotCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCAwKTsKLQotCQlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUKSkKLQkJCWllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc2RhdGEsIGJzcy0+c3NpZCwKLQkJCQkJICAgICAgIGJzcy0+c3NpZF9sZW4pOwotCQlpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzZGF0YSwgYnNzLT5jYnNzLmJzc2lkKTsKLQkJaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzZGF0YSwgYnNzLT5zdXBwX3JhdGVzX2xlbiwKLQkJCQkJCSAgICBic3MtPnN1cHBfcmF0ZXMpOwotCQlpZiAoc2RhdGEtPnUubWdkLm1mcCA9PSBJRUVFODAyMTFfTUZQX1JFUVVJUkVEKQotCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQ7Ci0JCWVsc2UKLQkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRDsKLQotCQkvKiBTZW5kIG91dCBkaXJlY3QgcHJvYmUgaWYgbm8gcHJvYmUgcmVzcCB3YXMgcmVjZWl2ZWQgb3IKLQkJICogdGhlIG9uZSB3ZSBoYXZlIGlzIG91dGRhdGVkCi0JCSAqLwotCQlpZiAoIWJzcy0+bGFzdF9wcm9iZV9yZXNwIHx8Ci0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+bGFzdF9wcm9iZV9yZXNwCi0JCQkJCSsgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSkpCi0JCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOwotCQllbHNlCi0JCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOwotCi0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCQlpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoc2RhdGEpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlpZiAoaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMgPCBJRUVFODAyMTFfQVNTT0NfU0NBTlNfTUFYX1RSSUVTKSB7Ci0KLQkJCWlmbWdkLT5hc3NvY19zY2FuX3RyaWVzKys7Ci0KLQkJCWllZWU4MDIxMV9yZXF1ZXN0X2ludGVybmFsX3NjYW4oc2RhdGEsIGlmbWdkLT5zc2lkLAotCQkJCQkJCXNzaWRfbGVuKTsKLQotCQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKLQkJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmbWdkLT5yZXF1ZXN0KTsKLQkJfSBlbHNlIHsKLQkJCWlmbWdkLT5hc3NvY19zY2FuX3RyaWVzID0gMDsKLQkJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIC0xOwotfQotCi0KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQpAQCAtMjI3Miw4OSArMjA1MSwyMDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwogCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssICp0bXA7CisJTElTVF9IRUFEKGZyZWVfd29yayk7CisJZW51bSByeF9tZ210X2FjdGlvbiBybWE7CisJYm9vbCBhbnlidXN5ID0gZmFsc2U7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCiAJCXJldHVybjsKIAotCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKQorCWlmIChsb2NhbC0+c2Nhbm5pbmcpCiAJCXJldHVybjsKIAogCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKIAkJcmV0dXJuOwogCiAJLyoKLQkgKiBOb3RoaW5nIHNob3VsZCBoYXZlIGJlZW4gc3R1ZmZlZCBpbnRvIHRoZSB3b3JrcXVldWUgZHVyaW5nCi0JICogdGhlIHN1c3BlbmQtPnJlc3VtZSBjeWNsZS4gSWYgdGhpcyBXQVJOIGlzIHNlZW4gdGhlbiB0aGVyZQotCSAqIGlzIGEgYnVnIHdpdGggZWl0aGVyIHRoZSBkcml2ZXIgc3VzcGVuZCBvciBzb21ldGhpbmcgaW4KLQkgKiBtYWM4MDIxMSBzdHVmZmluZyBpbnRvIHRoZSB3b3JrcXVldWUgd2hpY2ggd2UgaGF2ZW4ndCB5ZXQKLQkgKiBjbGVhcmVkIGR1cmluZyBtYWM4MDIxMSdzIHN1c3BlbmQgY3ljbGUuCisJICogaWVlZTgwMjExX3F1ZXVlX3dvcmsoKSBzaG91bGQgaGF2ZSBwaWNrZWQgdXAgbW9zdCBjYXNlcywKKwkgKiBoZXJlIHdlJ2xsIHBpY2sgdGhlIHRoZSByZXN0LgogCSAqLwotCWlmIChXQVJOX09OKGxvY2FsLT5zdXNwZW5kZWQpKQorCWlmIChXQVJOKGxvY2FsLT5zdXNwZW5kZWQsICJTVEEgTUxNRSB3b3JrIHNjaGVkdWxlZCB3aGlsZSAiCisJCSAiZ29pbmcgdG8gc3VzcGVuZFxuIikpCiAJCXJldHVybjsKIAogCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAorCS8qIGZpcnN0IHByb2Nlc3MgZnJhbWVzIHRvIGF2b2lkIHRpbWluZyBvdXQgd2hpbGUgYSBmcmFtZSBpcyBwZW5kaW5nICovCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaWZtZ2QtPnNrYl9xdWV1ZSkpKQogCQlpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9tZ210KHNkYXRhLCBza2IpOwogCi0JaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFICYmCi0JICAgIGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFICYmCi0JICAgIGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFICYmCi0JICAgIHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZtZ2QtPnJlcXVlc3QpKSB7Ci0JCXF1ZXVlX2RlbGF5ZWRfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmbG9jYWwtPnNjYW5fd29yaywKLQkJCQkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKDApKTsKLQkJcmV0dXJuOworCS8qIHRoZW4gcHJvY2VzcyB0aGUgcmVzdCBvZiB0aGUgd29yayAqLworCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOworCisJaWYgKGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMIHwKKwkJCSAgICBJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCkgJiYKKwkgICAgaWZtZ2QtPmFzc29jaWF0ZWQpIHsKKwkJdTggYnNzaWRbRVRIX0FMRU5dOworCisJCW1lbWNweShic3NpZCwgaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsIEVUSF9BTEVOKTsKKwkJaWYgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyhpZm1nZC0+cHJvYmVfdGltZW91dCkpCisJCQlydW5fYWdhaW4oaWZtZ2QsIGlmbWdkLT5wcm9iZV90aW1lb3V0KTsKKworCQllbHNlIGlmIChpZm1nZC0+cHJvYmVfc2VuZF9jb3VudCA8IElFRUU4MDIxMV9NQVhfUFJPQkVfVFJJRVMpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRworCQkJcHJpbnRrKEtFUk5fREVCVUcgIk5vIHByb2JlIHJlc3BvbnNlIGZyb20gQVAgJXBNIgorCQkJCSIgYWZ0ZXIgJWRtcywgdHJ5ICVkXG4iLCBic3NpZCwKKwkJCQkoMTAwMCAqIElFRUU4MDIxMV9QUk9CRV9XQUlUKS9IWiwKKwkJCQlpZm1nZC0+cHJvYmVfc2VuZF9jb3VudCk7CisjZW5kaWYKKwkJCWllZWU4MDIxMV9tZ2RfcHJvYmVfYXBfc2VuZChzZGF0YSk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogV2UgYWN0dWFsbHkgbG9zdCB0aGUgY29ubmVjdGlvbiAuLi4gb3IgZGlkIHdlPworCQkJICogTGV0J3MgbWFrZSBzdXJlIQorCQkJICovCisJCQlpZm1nZC0+ZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCB8CisJCQkJCSAgSUVFRTgwMjExX1NUQV9CRUFDT05fUE9MTCk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiTm8gcHJvYmUgcmVzcG9uc2UgZnJvbSBBUCAlcE0iCisJCQkJIiBhZnRlciAlZG1zLCBkaXNjb25uZWN0aW5nLlxuIiwKKwkJCQlic3NpZCwgKDEwMDAgKiBJRUVFODAyMTFfUFJPQkVfV0FJVCkvSFopOworCQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSk7CisJCQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOworCQkJLyoKKwkJCSAqIG11c3QgYmUgb3V0c2lkZSBsb2NrIGR1ZSB0byBjZmc4MDIxMSwKKwkJCSAqIGJ1dCB0aGF0J3Mgbm90IGEgcHJvYmxlbS4KKwkJCSAqLworCQkJaWVlZTgwMjExX3NlbmRfZGVhdXRoX2Rpc2Fzc29jKHNkYXRhLCBic3NpZCwKKwkJCQkJSUVFRTgwMjExX1NUWVBFX0RFQVVUSCwKKwkJCQkJV0xBTl9SRUFTT05fRElTQVNTT0NfRFVFX1RPX0lOQUNUSVZJVFksCisJCQkJCU5VTEwpOworCQkJbXV0ZXhfbG9jaygmaWZtZ2QtPm10eCk7CisJCX0KIAl9CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZm1nZC0+cmVxdWVzdCkpIHsKLQkJaWYgKGllZWU4MDIxMV9zdGFfY29uZmlnX2F1dGgoc2RhdGEpKQotCQkJcmV0dXJuOwotCQljbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpOwotCX0gZWxzZSBpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZm1nZC0+cmVxdWVzdCkpCi0JCXJldHVybjsKIAogCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7CiAKLQlzd2l0Y2ggKGlmbWdkLT5zdGF0ZSkgewotCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOgotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU6Ci0JCWllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc2RhdGEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU6Ci0JCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU6Ci0JCWllZWU4MDIxMV9hc3NvY2lhdGUoc2RhdGEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEOgotCQlpZWVlODAyMTFfYXNzb2NpYXRlZChzZGF0YSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVdBUk5fT04oMSk7Ci0JCWJyZWFrOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3aywgdG1wLCAmaWZtZ2QtPndvcmtfbGlzdCwgbGlzdCkgeworCQlpZiAodGltZV9pc19hZnRlcl9qaWZmaWVzKHdrLT50aW1lb3V0KSkgeworCQkJLyoKKwkJCSAqIFRoaXMgd29yayBpdGVtIGlzbid0IHN1cHBvc2VkIHRvIGJlIHdvcmtlZCBvbgorCQkJICogcmlnaHQgbm93LCBidXQgdGFrZSBjYXJlIHRvIGFkanVzdCB0aGUgdGltZXIKKwkJCSAqIHByb3Blcmx5LgorCQkJICovCisJCQlydW5fYWdhaW4oaWZtZ2QsIHdrLT50aW1lb3V0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoICh3ay0+c3RhdGUpIHsKKwkJZGVmYXVsdDoKKwkJCVdBUk5fT04oMSk7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBJRUVFODAyMTFfTUdEX1NUQVRFX0lETEU6CisJCQkvKiBub3RoaW5nICovCisJCQlybWEgPSBSWF9NR01UX05PTkU7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfTUdEX1NUQVRFX1BST0JFOgorCQkJcm1hID0gaWVlZTgwMjExX2RpcmVjdF9wcm9iZShzZGF0YSwgd2spOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX01HRF9TVEFURV9BVVRIOgorCQkJcm1hID0gaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzZGF0YSwgd2spOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX01HRF9TVEFURV9BU1NPQzoKKwkJCXJtYSA9IGllZWU4MDIxMV9hc3NvY2lhdGUoc2RhdGEsIHdrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoIChybWEpIHsKKwkJY2FzZSBSWF9NR01UX05PTkU6CisJCQkvKiBubyBhY3Rpb24gcmVxdWlyZWQgKi8KKwkJCWJyZWFrOworCQljYXNlIFJYX01HTVRfQ0ZHODAyMTFfQVVUSF9UTzoKKwkJY2FzZSBSWF9NR01UX0NGRzgwMjExX0FTU09DX1RPOgorCQkJbGlzdF9kZWwoJndrLT5saXN0KTsKKwkJCWxpc3RfYWRkKCZ3ay0+bGlzdCwgJmZyZWVfd29yayk7CisJCQl3ay0+dHJpZXMgPSBybWE7IC8qIHNtYWxsIGFidXNlIGJ1dCBvbmx5IGxvY2FsICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVdBUk4oMSwgInVuZXhwZWN0ZWQ6ICVkIiwgcm1hKTsKKwkJfQogCX0KIAotCWlmIChpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzZGF0YSkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcml2YWN5IGNvbmZpZ3VyYXRpb24gbWlzbWF0Y2ggYW5kICIKLQkJICAgICAgICJtaXhlZC1jZWxsIGRpc2FibGVkIC0gZGlzYXNzb2NpYXRlXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQotCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSwgdHJ1ZSwKLQkJCQkJV0xBTl9SRUFTT05fVU5TUEVDSUZJRUQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZpZm1nZC0+d29ya19saXN0LCBsaXN0KSB7CisJCWlmICh3ay0+c3RhdGUgIT0gSUVFRTgwMjExX01HRF9TVEFURV9JRExFKSB7CisJCQlhbnlidXN5ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CiAJfQorCWlmICghYW55YnVzeSAmJgorCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmbWdkLT5yZXF1ZXN0KSkKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yaygmbG9jYWwtPmh3LAorCQkJCQkgICAgICZsb2NhbC0+c2Nhbl93b3JrLAorCQkJCQkgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoMCkpOworCisJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3aywgdG1wLCAmZnJlZV93b3JrLCBsaXN0KSB7CisJCXN3aXRjaCAod2stPnRyaWVzKSB7CisJCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9BVVRIX1RPOgorCQkJY2ZnODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQoc2RhdGEtPmRldiwKKwkJCQkJCSAgIHdrLT5ic3MtPmNic3MuYnNzaWQpOworCQkJYnJlYWs7CisJCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9BU1NPQ19UTzoKKwkJCWNmZzgwMjExX3NlbmRfYXNzb2NfdGltZW91dChzZGF0YS0+ZGV2LAorCQkJCQkJICAgIHdrLT5ic3MtPmNic3MuYnNzaWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlXQVJOKDEsICJ1bmV4cGVjdGVkOiAlZCIsIHdrLT50cmllcyk7CisJCX0KKworCQlsaXN0X2RlbCgmd2stPmxpc3QpOworCQlrZnJlZSh3ayk7CisJfQorCisJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9iY25fbW9uX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICopIGRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwlpZiAobG9jYWwtPnF1aWVzY2luZykKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJnNkYXRhLT5sb2NhbC0+aHcsICZzZGF0YS0+dS5tZ2QuYmVhY29uX2xvc3Nfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfY29ubl9tb25fdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KKwkJKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKikgZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKworCWlmIChsb2NhbC0+cXVpZXNjaW5nKQorCQlyZXR1cm47CisKKwlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtZ2QtPm1vbml0b3Jfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbW9uaXRvcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAorCQkJICAgICB1Lm1nZC5tb25pdG9yX3dvcmspOworCisJaWVlZTgwMjExX21nZF9wcm9iZV9hcChzZGF0YSwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcmVzdGFydF9zdGFfdGltZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCS8qCi0JCSAqIE5lZWQgdG8gdXBkYXRlIGxhc3RfYmVhY29uIHRvIGF2b2lkIGJlYWNvbiBsb3NzCi0JCSAqIHRlc3QgdG8gdHJpZ2dlci4KLQkJICovCi0JCXNkYXRhLT51Lm1nZC5sYXN0X2JlYWNvbiA9IGppZmZpZXM7CisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+KElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwgfAorCQkJCQlJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCk7CiAKLQotCQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLAorCQkvKiBsZXQncyBwcm9iZSB0aGUgY29ubmVjdGlvbiBvbmNlICovCisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LAorCQkJICAgJnNkYXRhLT51Lm1nZC5tb25pdG9yX3dvcmspOworCQkvKiBhbmQgZG8gYWxsIHRoZSBvdGhlciByZWd1bGFyIHdvcmsgdG9vICovCisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LAogCQkJICAgJnNkYXRhLT51Lm1nZC53b3JrKTsKIAl9CiB9CkBAIC0yMzc4LDYgKzIyNzQsMTEgQEAKIAljYW5jZWxfd29ya19zeW5jKCZpZm1nZC0+Y2hzd2l0Y2hfd29yayk7CiAJaWYgKGRlbF90aW1lcl9zeW5jKCZpZm1nZC0+Y2hzd2l0Y2hfdGltZXIpKQogCQlzZXRfYml0KFRNUl9SVU5OSU5HX0NIQU5TVywgJmlmbWdkLT50aW1lcnNfcnVubmluZyk7CisKKwljYW5jZWxfd29ya19zeW5jKCZpZm1nZC0+bW9uaXRvcl93b3JrKTsKKwkvKiB0aGVzZSB3aWxsIGp1c3QgYmUgcmUtZXN0YWJsaXNoZWQgb24gY29ubmVjdGlvbiAqLworCWRlbF90aW1lcl9zeW5jKCZpZm1nZC0+Y29ubl9tb25fdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZpZm1nZC0+YmNuX21vbl90aW1lcik7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3N0YV9yZXN0YXJ0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtMjM5NSwxODUgKzIyOTYsMzAgQEAKIHZvaWQgaWVlZTgwMjExX3N0YV9zZXR1cF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwotCXUzMiBod19mbGFnczsKIAogCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlJTklUX1dPUksoJmlmbWdkLT53b3JrLCBpZWVlODAyMTFfc3RhX3dvcmspOworCUlOSVRfV09SSygmaWZtZ2QtPm1vbml0b3Jfd29yaywgaWVlZTgwMjExX3N0YV9tb25pdG9yX3dvcmspOwogCUlOSVRfV09SSygmaWZtZ2QtPmNoc3dpdGNoX3dvcmssIGllZWU4MDIxMV9jaHN3aXRjaF93b3JrKTsKIAlJTklUX1dPUksoJmlmbWdkLT5iZWFjb25fbG9zc193b3JrLCBpZWVlODAyMTFfYmVhY29uX2xvc3Nfd29yayk7CiAJc2V0dXBfdGltZXIoJmlmbWdkLT50aW1lciwgaWVlZTgwMjExX3N0YV90aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7CisJc2V0dXBfdGltZXIoJmlmbWdkLT5iY25fbW9uX3RpbWVyLCBpZWVlODAyMTFfc3RhX2Jjbl9tb25fdGltZXIsCisJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOworCXNldHVwX3RpbWVyKCZpZm1nZC0+Y29ubl9tb25fdGltZXIsIGllZWU4MDIxMV9zdGFfY29ubl9tb25fdGltZXIsCisJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOwogCXNldHVwX3RpbWVyKCZpZm1nZC0+Y2hzd2l0Y2hfdGltZXIsIGllZWU4MDIxMV9jaHN3aXRjaF90aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaWZtZ2QtPnNrYl9xdWV1ZSk7CiAKKwlJTklUX0xJU1RfSEVBRCgmaWZtZ2QtPndvcmtfbGlzdCk7CisKIAlpZm1nZC0+Y2FwYWIgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOwotCWlmbWdkLT5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTiB8Ci0JCUlFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZOwotCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTIHwKLQkJSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8Ci0JCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKKwlpZm1nZC0+ZmxhZ3MgPSAwOwogCWlmIChzZGF0YS0+bG9jYWwtPmh3LnF1ZXVlcyA+PSA0KQogCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRDsKIAotCWh3X2ZsYWdzID0gc2RhdGEtPmxvY2FsLT5ody5mbGFnczsKLQotCWlmIChod19mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUykgewotCQlpZm1nZC0+cG93ZXJzYXZlID0gQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU7Ci0JCXNkYXRhLT5sb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQgPSA1MDA7Ci0JfQotfQotCi0vKiBjb25maWd1cmF0aW9uIGhvb2tzICovCi12b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0KLQlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCi0JCXJldHVybjsKLQotCWlmICgoaWZtZ2QtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQlNTSURfU0VUIHwKLQkJCSAgICAgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCkpICYmCi0JICAgIChpZm1nZC0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9TU0lEX1NFVCB8Ci0JCQkgICAgIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkpKSB7Ci0KLQkJaWYgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkKLQkJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsCi0JCQkJCSAgICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7Ci0KLQkJaWYgKGlmbWdkLT5zc2lkX2xlbiA9PSAwKSB7Ci0JCQkvKgotCQkJICogT25seSBhbGxvdyBhc3NvY2lhdGlvbiB0byBiZSBzdGFydGVkIGlmIGEgdmFsaWQgU1NJRAotCQkJICogaXMgY29uZmlndXJlZC4KLQkJCSAqLwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9FWFRfU01FKSB8fAotCQkgICAgaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUpCi0JCQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZm1nZC0+cmVxdWVzdCk7Ci0JCWVsc2UgaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkKLQkJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7Ci0JfQotfQotCi1pbnQgaWVlZTgwMjExX3N0YV9jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0KLQlpZiAoaWZtZ2QtPnNzaWRfbGVuKQotCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9TU0lEX1NFVDsKLQllbHNlCi0JCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9TU0lEX1NFVDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwotCi0JaWYgKGxlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotCi0JaWYgKGlmbWdkLT5zc2lkX2xlbiAhPSBsZW4gfHwgbWVtY21wKGlmbWdkLT5zc2lkLCBzc2lkLCBsZW4pICE9IDApIHsKLQkJaWYgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkKLQkJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsCi0JCQkJCSAgICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7Ci0KLQkJLyoKLQkJICogRG8gbm90IHVzZSByZWFzc29jaWF0aW9uIGlmIFNTSUQgaXMgY2hhbmdlZCAoZGlmZmVyZW50IEVTUykuCi0JCSAqLwotCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7Ci0JCW1lbXNldChpZm1nZC0+c3NpZCwgMCwgc2l6ZW9mKGlmbWdkLT5zc2lkKSk7Ci0JCW1lbWNweShpZm1nZC0+c3NpZCwgc3NpZCwgbGVuKTsKLQkJaWZtZ2QtPnNzaWRfbGVuID0gbGVuOwotCX0KLQotCXJldHVybiBpZWVlODAyMTFfc3RhX2NvbW1pdChzZGF0YSk7Ci19Ci0KLWludCBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQltZW1jcHkoc3NpZCwgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7Ci0JKmxlbiA9IGlmbWdkLT5zc2lkX2xlbjsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGllZWU4MDIxMV9zdGFfc2V0X2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYnNzaWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0KLQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCBpZm1nZC0+YnNzaWQpICE9IDAgJiYKLQkgICAgaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKQotCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlLCB0cnVlLAotCQkJCSAgICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7Ci0KLQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpIHsKLQkJbWVtY3B5KGlmbWdkLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKLQkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQlNTSURfU0VUOwotCX0gZWxzZSB7Ci0JCW1lbXNldChpZm1nZC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKLQkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKLQl9Ci0KLQlyZXR1cm4gaWVlZTgwMjExX3N0YV9jb21taXQoc2RhdGEpOwotfQotCi1pbnQgaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICAgICAgY29uc3QgY2hhciAqaWUsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0KLQlpZiAobGVuID09IDAgJiYgaWZtZ2QtPmV4dHJhX2llX2xlbiA9PSAwKQotCQlyZXR1cm4gLUVBTFJFQURZOwotCi0JaWYgKGxlbiA9PSBpZm1nZC0+ZXh0cmFfaWVfbGVuICYmIGlmbWdkLT5leHRyYV9pZSAmJgotCSAgICBtZW1jbXAoaWZtZ2QtPmV4dHJhX2llLCBpZSwgbGVuKSA9PSAwKQotCQlyZXR1cm4gLUVBTFJFQURZOwotCi0Ja2ZyZWUoaWZtZ2QtPmV4dHJhX2llKTsKLQlpZiAobGVuID09IDApIHsKLQkJaWZtZ2QtPmV4dHJhX2llID0gTlVMTDsKLQkJaWZtZ2QtPmV4dHJhX2llX2xlbiA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQlpZm1nZC0+ZXh0cmFfaWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpZm1nZC0+ZXh0cmFfaWUpIHsKLQkJaWZtZ2QtPmV4dHJhX2llX2xlbiA9IDA7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQltZW1jcHkoaWZtZ2QtPmV4dHJhX2llLCBpZSwgbGVuKTsKLQlpZm1nZC0+ZXh0cmFfaWVfbGVuID0gbGVuOwotCXJldHVybiAwOwotfQotCi1pbnQgaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbikKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRlYXV0aGVudGljYXRpbmcgYnkgbG9jYWwgY2hvaWNlIChyZWFzb249JWQpXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZWFzb24pOwotCi0JaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSwgdHJ1ZSwgcmVhc29uKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGllZWU4MDIxMV9zdGFfZGlzYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1MTYgcmVhc29uKQotewotCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhc3NvY2lhdGluZyBieSBsb2NhbCBjaG9pY2UgKHJlYXNvbj0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlYXNvbik7Ci0KLQlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpKQotCQlyZXR1cm4gLUVOT0xJTks7Ci0KLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSwgdHJ1ZSwgcmVhc29uKTsKLQlyZXR1cm4gMDsKKwltdXRleF9pbml0KCZpZm1nZC0+bXR4KTsKIH0KIAogLyogc2NhbiBmaW5pc2hlZCBub3RpZmljYXRpb24gKi8KQEAgLTI2MDIsMyArMjM0OCwyMjUgQEAKIAogCXJldHVybiAwOwogfQorCisvKiBjb25maWcgaG9va3MgKi8KK2ludCBpZWVlODAyMTFfbWdkX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfYXV0aF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJY29uc3QgdTggKnNzaWQ7CisJc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2s7CisJdTE2IGF1dGhfYWxnOworCisJc3dpdGNoIChyZXEtPmF1dGhfdHlwZSkgeworCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTToKKwkJYXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVk6CisJCWF1dGhfYWxnID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9GVDoKKwkJYXV0aF9hbGcgPSBXTEFOX0FVVEhfRlQ7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUDoKKwkJYXV0aF9hbGcgPSBXTEFOX0FVVEhfTEVBUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXdrID0ga3phbGxvYyhzaXplb2YoKndrKSArIHJlcS0+aWVfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdrLT5ic3MgPSAodm9pZCAqKXJlcS0+YnNzOworCisJaWYgKHJlcS0+aWUgJiYgcmVxLT5pZV9sZW4pIHsKKwkJbWVtY3B5KHdrLT5pZSwgcmVxLT5pZSwgcmVxLT5pZV9sZW4pOworCQl3ay0+aWVfbGVuID0gcmVxLT5pZV9sZW47CisJfQorCisJaWYgKHJlcS0+a2V5ICYmIHJlcS0+a2V5X2xlbikgeworCQl3ay0+a2V5X2xlbiA9IHJlcS0+a2V5X2xlbjsKKwkJd2stPmtleV9pZHggPSByZXEtPmtleV9pZHg7CisJCW1lbWNweSh3ay0+a2V5LCByZXEtPmtleSwgcmVxLT5rZXlfbGVuKTsKKwl9CisKKwlzc2lkID0gaWVlZTgwMjExX2Jzc19nZXRfaWUocmVxLT5ic3MsIFdMQU5fRUlEX1NTSUQpOworCW1lbWNweSh3ay0+c3NpZCwgc3NpZCArIDIsIHNzaWRbMV0pOworCXdrLT5zc2lkX2xlbiA9IHNzaWRbMV07CisKKwl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX1BST0JFOworCXdrLT5hdXRoX2FsZyA9IGF1dGhfYWxnOworCXdrLT50aW1lb3V0ID0gamlmZmllczsgLyogcnVuIHJpZ2h0IGF3YXkgKi8KKworCS8qCisJICogWFhYOiBpZiBzdGlsbCBhc3NvY2lhdGVkIG5lZWQgdG8gdGVsbCBBUCB0aGF0IHdlJ3JlIGdvaW5nCisJICoJdG8gc2xlZXAgYW5kIHRoZW4gY2hhbmdlIGNoYW5uZWwgZXRjLgorCSAqLworCXNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsID0gcmVxLT5ic3MtPmNoYW5uZWw7CisJaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIDApOworCisJbXV0ZXhfbG9jaygmaWZtZ2QtPm10eCk7CisJbGlzdF9hZGQoJndrLT5saXN0LCAmc2RhdGEtPnUubWdkLndvcmtfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKKworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LCAmc2RhdGEtPnUubWdkLndvcmspOworCXJldHVybiAwOworfQorCitpbnQgaWVlZTgwMjExX21nZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCXN0cnVjdCBjZmc4MDIxMV9hc3NvY19yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssICpmb3VuZCA9IE5VTEw7CisJaW50IGksIGVycjsKKworCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aywgJmlmbWdkLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCZ3ay0+YnNzLT5jYnNzID09IHJlcS0+YnNzICYmCisJCSAgICB3ay0+c3RhdGUgPT0gSUVFRTgwMjExX01HRF9TVEFURV9JRExFKSB7CisJCQlmb3VuZCA9IHdrOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kKSB7CisJCWVyciA9IC1FTk9MSU5LOworCQlnb3RvIG91dDsKKwl9CisKKwlsaXN0X2RlbCgmZm91bmQtPmxpc3QpOworCisJd2sgPSBrcmVhbGxvYyhmb3VuZCwgc2l6ZW9mKCp3aykgKyByZXEtPmllX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3aykgeworCQlsaXN0X2FkZCgmZm91bmQtPmxpc3QsICZpZm1nZC0+d29ya19saXN0KTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbGlzdF9hZGQoJndrLT5saXN0LCAmaWZtZ2QtPndvcmtfbGlzdCk7CisKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfRElTQUJMRV8xMU47CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVxLT5jcnlwdG8ubl9jaXBoZXJzX3BhaXJ3aXNlOyBpKyspCisJCWlmIChyZXEtPmNyeXB0by5jaXBoZXJzX3BhaXJ3aXNlW2ldID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8CisJCSAgICByZXEtPmNyeXB0by5jaXBoZXJzX3BhaXJ3aXNlW2ldID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAgfHwKKwkJICAgIHJlcS0+Y3J5cHRvLmNpcGhlcnNfcGFpcndpc2VbaV0gPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KQorCQkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfRElTQUJMRV8xMU47CisKKwlzZGF0YS0+bG9jYWwtPm9wZXJfY2hhbm5lbCA9IHJlcS0+YnNzLT5jaGFubmVsOworCWllZWU4MDIxMV9od19jb25maWcoc2RhdGEtPmxvY2FsLCAwKTsKKworCWlmIChyZXEtPmllICYmIHJlcS0+aWVfbGVuKSB7CisJCW1lbWNweSh3ay0+aWUsIHJlcS0+aWUsIHJlcS0+aWVfbGVuKTsKKwkJd2stPmllX2xlbiA9IHJlcS0+aWVfbGVuOworCX0gZWxzZQorCQl3ay0+aWVfbGVuID0gMDsKKworCWlmIChyZXEtPnByZXZfYnNzaWQpCisJCW1lbWNweSh3ay0+cHJldl9ic3NpZCwgcmVxLT5wcmV2X2Jzc2lkLCBFVEhfQUxFTik7CisKKwl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0FTU09DOworCXdrLT50cmllcyA9IDA7CisJd2stPnRpbWVvdXQgPSBqaWZmaWVzOyAvKiBydW4gcmlnaHQgYXdheSAqLworCisJaWYgKHJlcS0+dXNlX21mcCkgeworCQlpZm1nZC0+bWZwID0gSUVFRTgwMjExX01GUF9SRVFVSVJFRDsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQ7CisJfSBlbHNlIHsKKwkJaWZtZ2QtPm1mcCA9IElFRUU4MDIxMV9NRlBfRElTQUJMRUQ7CisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRDsKKwl9CisKKwlpZiAocmVxLT5jcnlwdG8uY29udHJvbF9wb3J0KQorCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQ7CisJZWxzZQorCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUOworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJnNkYXRhLT5sb2NhbC0+aHcsICZzZGF0YS0+dS5tZ2Qud29yayk7CisKKwllcnIgPSAwOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGllZWU4MDIxMV9tZ2RfZGVhdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJIHN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCAqcmVxLAorCQkJIHZvaWQgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3azsKKwljb25zdCB1OCAqYnNzaWQgPSBOVUxMOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0aW5nIGJ5IGxvY2FsIGNob2ljZSAocmVhc29uPSVkKVxuIiwKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVxLT5yZWFzb25fY29kZSk7CisKKwltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKKworCWlmIChpZm1nZC0+YXNzb2NpYXRlZCAmJiAmaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MgPT0gcmVxLT5ic3MpIHsKKwkJYnNzaWQgPSByZXEtPmJzcy0+YnNzaWQ7CisJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUpOworCX0gZWxzZSBsaXN0X2Zvcl9lYWNoX2VudHJ5KHdrLCAmaWZtZ2QtPndvcmtfbGlzdCwgbGlzdCkgeworCQlpZiAoJndrLT5ic3MtPmNic3MgPT0gcmVxLT5ic3MpIHsKKwkJCWJzc2lkID0gcmVxLT5ic3MtPmJzc2lkOworCQkJbGlzdF9kZWwoJndrLT5saXN0KTsKKwkJCWtmcmVlKHdrKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBjZmc4MDIxMSBzaG91bGQgY2F0Y2ggdGhpcyAuLi4gYnV0IGl0J3MgcmFjeSBzaW5jZQorCSAqIHdlIGNhbiByZWNlaXZlIGEgZGVhdXRoIGZyYW1lLCBwcm9jZXNzIGl0LCBoYW5kIGl0CisJICogdG8gY2ZnODAyMTEgd2hpbGUgdGhhdCdzIGluIGEgbG9ja2VkIHNlY3Rpb24gYWxyZWFkeQorCSAqIHRyeWluZyB0byB0ZWxsIHVzIHRoYXQgdGhlIHVzZXIgd2FudHMgdG8gZGlzY29ubmVjdC4KKwkgKi8KKwlpZiAoIWJzc2lkKSB7CisJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisJCXJldHVybiAtRU5PTElOSzsKKwl9CisKKwltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOworCisJaWVlZTgwMjExX3NlbmRfZGVhdXRoX2Rpc2Fzc29jKHNkYXRhLCBic3NpZCwKKwkJCUlFRUU4MDIxMV9TVFlQRV9ERUFVVEgsIHJlcS0+cmVhc29uX2NvZGUsCisJCQljb29raWUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBpZWVlODAyMTFfbWdkX2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgc3RydWN0IGNmZzgwMjExX2Rpc2Fzc29jX3JlcXVlc3QgKnJlcSwKKwkJCSAgIHZvaWQgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlzYXNzb2NpYXRpbmcgYnkgbG9jYWwgY2hvaWNlIChyZWFzb249JWQpXG4iLAorCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZXEtPnJlYXNvbl9jb2RlKTsKKworCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOworCisJLyoKKwkgKiBjZmc4MDIxMSBzaG91bGQgY2F0Y2ggdGhpcyAuLi4gYnV0IGl0J3MgcmFjeSBzaW5jZQorCSAqIHdlIGNhbiByZWNlaXZlIGEgZGlzYXNzb2MgZnJhbWUsIHByb2Nlc3MgaXQsIGhhbmQgaXQKKwkgKiB0byBjZmc4MDIxMSB3aGlsZSB0aGF0J3MgaW4gYSBsb2NrZWQgc2VjdGlvbiBhbHJlYWR5CisJICogdHJ5aW5nIHRvIHRlbGwgdXMgdGhhdCB0aGUgdXNlciB3YW50cyB0byBkaXNjb25uZWN0LgorCSAqLworCWlmICgmaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MgIT0gcmVxLT5ic3MpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKKwkJcmV0dXJuIC1FTk9MSU5LOworCX0KKworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGZhbHNlKTsKKworCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisKKwlpZWVlODAyMTFfc2VuZF9kZWF1dGhfZGlzYXNzb2Moc2RhdGEsIHJlcS0+YnNzLT5ic3NpZCwKKwkJCUlFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQywgcmVxLT5yZWFzb25fY29kZSwKKwkJCWNvb2tpZSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcG0uYyBiL25ldC9tYWM4MDIxMS9wbS5jCmluZGV4IDVlM2Q0NzYuLmU1MzVmMWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9wbS5jCisrKyBiL25ldC9tYWM4MDIxMS9wbS5jCkBAIC0yNiw3ICsyNiw3IEBACiAJLyogbWFrZSBxdWllc2NpbmcgdmlzaWJsZSB0byB0aW1lcnMgZXZlcnl3aGVyZSAqLwogCW1iKCk7CiAKLQlmbHVzaF93b3JrcXVldWUobG9jYWwtPmh3LndvcmtxdWV1ZSk7CisJZmx1c2hfd29ya3F1ZXVlKGxvY2FsLT53b3JrcXVldWUpOwogCiAJLyogRG9uJ3QgdHJ5IHRvIHJ1biB0aW1lcnMgd2hpbGUgc3VzcGVuZGVkLiAqLwogCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+c3RhX2NsZWFudXApOwpAQCAtOTYsNiArOTYsMTAgQEAKIAkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQogCQkJY29udGludWU7CiAKKwkJLyogZGlzYWJsZSBiZWFjb25pbmcgKi8KKwkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsCisJCQlCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCk7CisKIAkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKIAkJY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOwogCQljb25mLm1hY19hZGRyID0gc2RhdGEtPmRldi0+ZGV2X2FkZHI7CkBAIC0xMDMsMTcgKzEwNyw4IEBACiAJfQogCiAJLyogc3RvcCBoYXJkd2FyZSAtIHRoaXMgbXVzdCBzdG9wIFJYICovCi0JaWYgKGxvY2FsLT5vcGVuX2NvdW50KSB7Ci0JCWllZWU4MDIxMV9sZWRfcmFkaW8obG9jYWwsIGZhbHNlKTsKLQkJZHJ2X3N0b3AobG9jYWwpOwotCX0KLQotCS8qCi0JICogZmx1c2ggYWdhaW4sIGluIGNhc2UgZHJpdmVyIHF1ZXVlZCB3b3JrIC0tIGl0Ci0JICogc2hvdWxkbid0IGJlIGRvaW5nIChvciBjYW5jZWwgZXZlcnl0aGluZyBpbiB0aGUKLQkgKiBzdG9wIGNhbGxiYWNrKSB0aGF0IGJ1dCBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LgotCSAqLwotCWZsdXNoX3dvcmtxdWV1ZShsb2NhbC0+aHcud29ya3F1ZXVlKTsKKwlpZiAobG9jYWwtPm9wZW5fY291bnQpCisJCWllZWU4MDIxMV9zdG9wX2RldmljZShsb2NhbCk7CiAKIAlsb2NhbC0+c3VzcGVuZGVkID0gdHJ1ZTsKIAkvKiBuZWVkIHN1c3BlbmRlZCB0byBiZSB2aXNpYmxlIGJlZm9yZSBxdWllc2NpbmcgaXMgZmFsc2UgKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYXRlLmMgYi9uZXQvbWFjODAyMTEvcmF0ZS5jCmluZGV4IDQ2NDFmMDAuLmIzM2VmYzQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmMKKysrIGIvbmV0L21hYzgwMjExL3JhdGUuYwpAQCAtMTk4LDYgKzE5OCwzNSBAQAogCWtmcmVlKGN0cmxfcmVmKTsKIH0KIAorc3RhdGljIGJvb2wgcmNfbm9fZGF0YV9vcl9ub19hY2soc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4cmMtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJX19sZTE2IGZjOworCisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisKKwlyZXR1cm4gKChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSB8fCAhaWVlZTgwMjExX2lzX2RhdGEoZmMpKTsKK30KKworYm9vbCByYXRlX2NvbnRyb2xfc2VuZF9sb3coc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgIHZvaWQgKnByaXZfc3RhLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eHJjLT5za2IpOworCisJaWYgKCFzdGEgfHwgIXByaXZfc3RhIHx8IHJjX25vX2RhdGFfb3Jfbm9fYWNrKHR4cmMpKSB7CisJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0gcmF0ZV9sb3dlc3RfaW5kZXgodHhyYy0+c2JhbmQsIHN0YSk7CisJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPQorCQkJKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spID8KKwkJCTEgOiB0eHJjLT5ody0+bWF4X3JhdGVfdHJpZXM7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MKHJhdGVfY29udHJvbF9zZW5kX2xvdyk7CisKIHZvaWQgcmF0ZV9jb250cm9sX2dldF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCAqdHhyYykKQEAgLTI1OCw3ICsyODcsNyBAQAogCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYsICpvbGQ7CiAKIAlBU1NFUlRfUlROTCgpOwotCWlmIChsb2NhbC0+b3Blbl9jb3VudCB8fCBuZXRpZl9ydW5uaW5nKGxvY2FsLT5tZGV2KSkKKwlpZiAobG9jYWwtPm9wZW5fY291bnQpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlyZWYgPSByYXRlX2NvbnRyb2xfYWxsb2MobmFtZSwgbG9jYWwpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsLmMKaW5kZXggMzc3NzFhYi4uN2M1MTQyOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbC5jCkBAIC03MCwyMCArNzAsNiBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wKLXVzZV9sb3dfcmF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQl1MTYgZmM7Ci0KLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0KLQlyZXR1cm4gKChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSB8fAotCQkoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpOwotfQotCi0KIHN0YXRpYyB2b2lkCiBtaW5zdHJlbF91cGRhdGVfc3RhdHMoc3RydWN0IG1pbnN0cmVsX3ByaXYgKm1wLCBzdHJ1Y3QgbWluc3RyZWxfc3RhX2luZm8gKm1pKQogewpAQCAtMjMyLDcgKzIxOCw2IEBACiAJCSAgdm9pZCAqcHJpdl9zdGEsIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSB0eHJjLT5za2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPSB0eHJjLT5zYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IG1pbnN0cmVsX3N0YV9pbmZvICptaSA9IHByaXZfc3RhOwogCXN0cnVjdCBtaW5zdHJlbF9wcml2ICptcCA9IHByaXY7CkBAIC0yNDUsMTQgKzIzMCw4IEBACiAJaW50IG1ycl9uZHhbM107CiAJaW50IHNhbXBsZV9yYXRlOwogCi0JaWYgKCFzdGEgfHwgIW1pIHx8IHVzZV9sb3dfcmF0ZShza2IpKSB7Ci0JCWFyWzBdLmlkeCA9IHJhdGVfbG93ZXN0X2luZGV4KHNiYW5kLCBzdGEpOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykKLQkJCWFyWzBdLmNvdW50ID0gMTsKLQkJZWxzZQotCQkJYXJbMF0uY291bnQgPSBtcC0+bWF4X3JldHJ5OworCWlmIChyYXRlX2NvbnRyb2xfc2VuZF9sb3coc3RhLCBwcml2X3N0YSwgdHhyYykpCiAJCXJldHVybjsKLQl9CiAKIAltcnIgPSBtcC0+aGFzX21yciAmJiAhdHhyYy0+cnRzICYmICF0eHJjLT5ic3NfY29uZi0+dXNlX2N0c19wcm90OwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbC5oIGIvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuaAppbmRleCA4NjlmZTBlLi4zOGJmNDE2OCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuaAorKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbC5oCkBAIC0zMyw3ICszMyw2IEBACiAKIAkvKiBwZXItcmF0ZSB0aHJvdWdocHV0ICovCiAJdTMyIGN1cl90cDsKLQl1MzIgdGhyb3VnaHB1dDsKIAogCXU2NCBzdWNjX2hpc3Q7CiAJdTY0IGF0dF9oaXN0OwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfZGVidWdmcy5jCmluZGV4IDk4ZjQ4MDcuLmE3MTVkOTQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9kZWJ1Z2ZzLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAkJcCArPSBzcHJpbnRmKHAsICIlM3UlcyIsIG1yLT5iaXRyYXRlIC8gMiwKIAkJCQkobXItPmJpdHJhdGUgJiAxID8gIi41IiA6ICIgICIpKTsKIAotCQl0cCA9ICgobXItPmN1cl90cCAqIDk2KSAvIDE4MDAwKSA+PiAxMDsKKwkJdHAgPSBtci0+Y3VyX3RwIC8gKCgxODAwMCA8PCAxMCkgLyA5Nik7CiAJCXByb2IgPSBtci0+Y3VyX3Byb2IgLyAxODsKIAkJZXByb2IgPSBtci0+cHJvYmFiaWxpdHkgLyAxODsKIApAQCAtMTM5LDcgKzEzOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbnN0cmVsX3N0YXRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbnN0cmVsX3N0YXRfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IG1pbnN0cmVsX3N0YXRzX29wZW4sCiAJLnJlYWQgPSBtaW5zdHJlbF9zdGF0c19yZWFkLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2FsZ28uYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZF9hbGdvLmMKaW5kZXggYTBiZWY3Ni4uNjk5ZDNlZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2FsZ28uYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfYWxnby5jCkBAIC0xNjksMTkgKzE2OSw5IEBACiAJICogc3RpbGwgYSBnb29kIG1lYXN1cmVtZW50IGFuZCBjb3B5IGl0LiAqLwogCWlmICh1bmxpa2VseShzcGluZm8tPnR4X251bV94bWl0ID09IDApKQogCQlwZiA9IHNwaW5mby0+bGFzdF9wZjsKLQllbHNlIHsKLQkJLyogWFhYOiBCQUQgSEFDSyEhISAqLwotCQlzdHJ1Y3Qgc3RhX2luZm8gKnNpID0gY29udGFpbmVyX29mKHN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpOwotCisJZWxzZQogCQlwZiA9IHNwaW5mby0+dHhfbnVtX2ZhaWxlZCAqIDEwMCAvIHNwaW5mby0+dHhfbnVtX3htaXQ7CiAKLQkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2ktPnNkYXRhLT52aWYpICYmIHBmID09IDEwMCkKLQkJCW1lc2hfcGxpbmtfYnJva2VuKHNpKTsKLQkJcGYgPDw9IFJDX1BJRF9BUklUSF9TSElGVDsKLQkJc2ktPmZhaWxfYXZnID0gKChwZiArIChzcGluZm8tPmxhc3RfcGYgPDwgMykpIC8gOSkKLQkJCQkJPj4gUkNfUElEX0FSSVRIX1NISUZUOwotCX0KLQogCXNwaW5mby0+dHhfbnVtX3htaXQgPSAwOwogCXNwaW5mby0+dHhfbnVtX2ZhaWxlZCA9IDA7CiAKQEAgLTI3NiwxMSArMjY2LDkgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhyYy0+c2tiOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gdHhyYy0+c2JhbmQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXN0cnVjdCByY19waWRfc3RhX2luZm8gKnNwaW5mbyA9IHByaXZfc3RhOwogCWludCByYXRlaWR4OwotCXUxNiBmYzsKIAogCWlmICh0eHJjLT5ydHMpCiAJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPQpAQCAtMjkwLDE2ICsyNzgsOCBAQAogCQkJdHhyYy0+aHctPmNvbmYuc2hvcnRfZnJhbWVfbWF4X3R4X2NvdW50OwogCiAJLyogU2VuZCBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgTk9fQUNLIGRhdGEgdXNpbmcgbG93ZXN0IHJhdGUuICovCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCWlmICghc3RhIHx8ICFzcGluZm8gfHwKLQkgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBIHx8Ci0JICAgIGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spIHsKLQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPSByYXRlX2xvd2VzdF9pbmRleChzYmFuZCwgc3RhKTsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spCi0JCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50ID0gMTsKLQorCWlmIChyYXRlX2NvbnRyb2xfc2VuZF9sb3coc3RhLCBwcml2X3N0YSwgdHhyYykpCiAJCXJldHVybjsKLQl9CiAKIAlyYXRlaWR4ID0gc3BpbmZvLT50eHJhdGVfaWR4OwogCkBAIC0zMjEsNyArMzAxLDYgQEAKIAlzdHJ1Y3QgcmNfcGlkX3N0YV9pbmZvICpzcGluZm8gPSBwcml2X3N0YTsKIAlzdHJ1Y3QgcmNfcGlkX2luZm8gKnBpbmZvID0gcHJpdjsKIAlzdHJ1Y3QgcmNfcGlkX3JhdGVpbmZvICpyaW5mbyA9IHBpbmZvLT5yaW5mbzsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnNpOwogCWludCBpLCBqLCB0bXA7CiAJYm9vbCBzOwogCkBAIC0zNTgsOSArMzM3LDYgQEAKIAl9CiAKIAlzcGluZm8tPnR4cmF0ZV9pZHggPSByYXRlX2xvd2VzdF9pbmRleChzYmFuZCwgc3RhKTsKLQkvKiBIQUNLICovCi0Jc2kgPSBjb250YWluZXJfb2Yoc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7Ci0Jc2ktPmZhaWxfYXZnID0gMDsKIH0KIAogc3RhdGljIHZvaWQgKnJhdGVfY29udHJvbF9waWRfYWxsb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYwppbmRleCBhMDhhOWI1Li5hNTkwNDNmYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAogI3VuZGVmIFJDX1BJRF9QUklOVF9CVUZfU0laRQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY19waWRfZm9wX2V2ZW50cyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjX3BpZF9mb3BfZXZlbnRzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5yZWFkID0gcmF0ZV9jb250cm9sX3BpZF9ldmVudHNfcmVhZCwKIAkucG9sbCA9IHJhdGVfY29udHJvbF9waWRfZXZlbnRzX3BvbGwsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jCmluZGV4IDA5MzZmYzIuLmMwMTU4OGYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9yeC5jCkBAIC0zMCw3ICszMCw2IEBACiBzdGF0aWMgdTggaWVlZTgwMjExX3N0YV9tYW5hZ2VfcmVvcmRlcl9idWYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgIHN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcngsCiAJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsCiAJCQkJCSAgIHUxNiBtcGR1X3NlcV9udW0sCiAJCQkJCSAgIGludCBiYXJfcmVxKTsKIC8qCkBAIC01OSwxMSArNTgsMTEgQEAKIAlyZXR1cm4gc2tiOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzaG91bGRfZHJvcF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAotCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorc3RhdGljIGlubGluZSBpbnQgc2hvdWxkX2Ryb3BfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgaW50IHByZXNlbnRfZmNzX2xlbiwKIAkJCQkgICAgaW50IHJhZGlvdGFwX2xlbikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAogCWlmIChzdGF0dXMtPmZsYWcgJiAoUlhfRkxBR19GQUlMRURfRkNTX0NSQyB8IFJYX0ZMQUdfRkFJTEVEX1BMQ1BfQ1JDKSkKQEAgLTExMSwxMCArMTEwLDEwIEBACiBzdGF0aWMgdm9pZAogaWVlZTgwMjExX2FkZF9yeF9yYWRpb3RhcF9oZWFkZXIoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSwKIAkJCQkgaW50IHJ0YXBfbGVuKQogeworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcnRoZHI7CiAJdW5zaWduZWQgY2hhciAqcG9zOwogCkBAIC0yMjAsOSArMjE5LDkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBza19idWZmICoKIGllZWU4MDIxMV9yeF9tb25pdG9yKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ3NrYiwKLQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAogCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKG9yaWdza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCWludCBuZWVkZWRfaGVhZHJvb20gPSAwOwogCXN0cnVjdCBza19idWZmICpza2IsICpza2IyOwpAQCAtMjQ4LDggKzI0Nyw3IEBACiAJCXByZXNlbnRfZmNzX2xlbiA9IEZDU19MRU47CiAKIAlpZiAoIWxvY2FsLT5tb25pdG9ycykgewotCQlpZiAoc2hvdWxkX2Ryb3BfZnJhbWUoc3RhdHVzLCBvcmlnc2tiLCBwcmVzZW50X2Zjc19sZW4sCi0JCQkJICAgICAgcnRhcF9sZW4pKSB7CisJCWlmIChzaG91bGRfZHJvcF9mcmFtZShvcmlnc2tiLCBwcmVzZW50X2Zjc19sZW4sIHJ0YXBfbGVuKSkgewogCQkJZGV2X2tmcmVlX3NrYihvcmlnc2tiKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC0yNTcsNyArMjU1LDcgQEAKIAkJcmV0dXJuIHJlbW92ZV9tb25pdG9yX2luZm8obG9jYWwsIG9yaWdza2IsIHJ0YXBfbGVuKTsKIAl9CiAKLQlpZiAoc2hvdWxkX2Ryb3BfZnJhbWUoc3RhdHVzLCBvcmlnc2tiLCBwcmVzZW50X2Zjc19sZW4sIHJ0YXBfbGVuKSkgeworCWlmIChzaG91bGRfZHJvcF9mcmFtZShvcmlnc2tiLCBwcmVzZW50X2Zjc19sZW4sIHJ0YXBfbGVuKSkgewogCQkvKiBvbmx5IG5lZWQgdG8gZXhwYW5kIGhlYWRyb29tIGlmIG5lY2Vzc2FyeSAqLwogCQlza2IgPSBvcmlnc2tiOwogCQlvcmlnc2tiID0gTlVMTDsKQEAgLTI4OSw3ICsyODcsNyBAQAogCiAJLyogaWYgbmVjZXNzYXJ5LCBwcmVwZW5kIHJhZGlvdGFwIGluZm9ybWF0aW9uICovCiAJaWYgKCEoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19SQURJT1RBUCkpCi0JCWllZWU4MDIxMV9hZGRfcnhfcmFkaW90YXBfaGVhZGVyKGxvY2FsLCBza2IsIHN0YXR1cywgcmF0ZSwKKwkJaWVlZTgwMjExX2FkZF9yeF9yYWRpb3RhcF9oZWFkZXIobG9jYWwsIHNrYiwgcmF0ZSwKIAkJCQkJCSBuZWVkZWRfaGVhZHJvb20pOwogCiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKQEAgLTQyMCwxMyArNDE4LDEzIEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSByeC0+bG9jYWw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LT5za2I7CiAKLQlpZiAodW5saWtlbHkobG9jYWwtPmh3X3NjYW5uaW5nKSkKLQkJcmV0dXJuIGllZWU4MDIxMV9zY2FuX3J4KHJ4LT5zZGF0YSwgc2tiLCByeC0+c3RhdHVzKTsKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9IV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykpKQorCQlyZXR1cm4gaWVlZTgwMjExX3NjYW5fcngocngtPnNkYXRhLCBza2IpOwogCi0JaWYgKHVubGlrZWx5KGxvY2FsLT5zd19zY2FubmluZykpIHsKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykgJiYKKwkJICAgICAocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0lOX1NDQU4pKSkgewogCQkvKiBkcm9wIGFsbCB0aGUgb3RoZXIgcGFja2V0cyBkdXJpbmcgYSBzb2Z0d2FyZSBzY2FuIGFueXdheSAqLwotCQlpZiAoaWVlZTgwMjExX3NjYW5fcngocngtPnNkYXRhLCBza2IsIHJ4LT5zdGF0dXMpCi0JCSAgICAhPSBSWF9RVUVVRUQpCisJCWlmIChpZWVlODAyMTFfc2Nhbl9yeChyeC0+c2RhdGEsIHNrYikgIT0gUlhfUVVFVUVEKQogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gUlhfUVVFVUVEOwogCX0KQEAgLTQ5MSwxMiArNDg5LDIxIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LT5za2ItPmRhdGE7CiAJdW5zaWduZWQgaW50IGhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKKwljaGFyICpkZXZfYWRkciA9IHJ4LT5kZXYtPmRldl9hZGRyOwogCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJaWYgKCFpZWVlODAyMTFfaGFzX2E0KGhkci0+ZnJhbWVfY29udHJvbCkpCi0JCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwotCQlpZiAobWVtY21wKGhkci0+YWRkcjQsIHJ4LT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgPT0gMCkKLQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkgeworCQkJaWYgKGllZWU4MDIxMV9oYXNfdG9kcyhoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJCQkJIWllZWU4MDIxMV9oYXNfZnJvbWRzKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCWlmIChtZW1jbXAoaGRyLT5hZGRyMywgZGV2X2FkZHIsIEVUSF9BTEVOKSA9PSAwKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCX0gZWxzZSB7CisJCQlpZiAoIWllZWU4MDIxMV9oYXNfYTQoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCQkJaWYgKG1lbWNtcChoZHItPmFkZHI0LCBkZXZfYWRkciwgRVRIX0FMRU4pID09IDApCisJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJfQogCX0KIAogCS8qIElmIHRoZXJlIGlzIG5vdCBhbiBlc3RhYmxpc2hlZCBwZWVyIGxpbmsgYW5kIHRoaXMgaXMgbm90IGEgcGVlciBsaW5rCkBAIC01MjksNyArNTM2LDcgQEAKIAogCWlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCi0JICAgIG1lc2hfcm1jX2NoZWNrKGhkci0+YWRkcjQsIG1zaF9oX2dldChoZHIsIGhkcmxlbiksIHJ4LT5zZGF0YSkpCisJICAgIG1lc2hfcm1jX2NoZWNrKGhkci0+YWRkcjMsIG1zaF9oX2dldChoZHIsIGhkcmxlbiksIHJ4LT5zZGF0YSkpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAjdW5kZWYgbXNoX2hfZ2V0CiAKQEAgLTc4NSw3ICs3OTIsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCiAJYXRvbWljX2luYygmc2RhdGEtPmJzcy0+bnVtX3N0YV9wcyk7Ci0Jc2V0X2FuZF9jbGVhcl9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QUywgV0xBTl9TVEFfUFNQT0xMKTsKKwlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfUFMpOwogCWRydl9zdGFfbm90aWZ5KGxvY2FsLCAmc2RhdGEtPnZpZiwgU1RBX05PVElGWV9TTEVFUCwgJnN0YS0+c3RhKTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICIlczogU1RBICVwTSBhaWQgJWQgZW50ZXJzIHBvd2VyIHNhdmUgbW9kZVxuIiwKQEAgLTgwMSw3ICs4MDgsNyBAQAogCiAJYXRvbWljX2RlYygmc2RhdGEtPmJzcy0+bnVtX3N0YV9wcyk7CiAKLQljbGVhcl9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QUyB8IFdMQU5fU1RBX1BTUE9MTCk7CisJY2xlYXJfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfUFMpOwogCWRydl9zdGFfbm90aWZ5KGxvY2FsLCAmc2RhdGEtPnZpZiwgU1RBX05PVElGWV9BV0FLRSwgJnN0YS0+c3RhKTsKIAogCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzdGEtPnBzX3R4X2J1ZikpCkBAIC04MzYsMjggKzg0MywyMiBAQAogCWlmICghc3RhKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKLQkvKiBVcGRhdGUgbGFzdF9yeCBvbmx5IGZvciBJQlNTIHBhY2tldHMgd2hpY2ggYXJlIGZvciB0aGUgY3VycmVudAotCSAqIEJTU0lEIHRvIGF2b2lkIGtlZXBpbmcgdGhlIGN1cnJlbnQgSUJTUyBuZXR3b3JrIGFsaXZlIGluIGNhc2VzIHdoZXJlCi0JICogb3RoZXIgU1RBcyBhcmUgdXNpbmcgZGlmZmVyZW50IEJTU0lELiAqLworCS8qCisJICogVXBkYXRlIGxhc3Rfcnggb25seSBmb3IgSUJTUyBwYWNrZXRzIHdoaWNoIGFyZSBmb3IgdGhlIGN1cnJlbnQKKwkgKiBCU1NJRCB0byBhdm9pZCBrZWVwaW5nIHRoZSBjdXJyZW50IElCU1MgbmV0d29yayBhbGl2ZSBpbiBjYXNlcworCSAqIHdoZXJlIG90aGVyIFNUQXMgc3RhcnQgdXNpbmcgZGlmZmVyZW50IEJTU0lELgorCSAqLwogCWlmIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CiAJCXU4ICpic3NpZCA9IGllZWU4MDIxMV9nZXRfYnNzaWQoaGRyLCByeC0+c2tiLT5sZW4sCiAJCQkJCQlOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWQsIHJ4LT5zZGF0YS0+dS5pYnNzLmJzc2lkKSA9PSAwKQogCQkJc3RhLT5sYXN0X3J4ID0gamlmZmllczsKLQl9IGVsc2UKLQlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpIHx8Ci0JICAgIHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkvKiBVcGRhdGUgbGFzdF9yeCBvbmx5IGZvciB1bmljYXN0IGZyYW1lcyBpbiBvcmRlciB0byBwcmV2ZW50Ci0JCSAqIHRoZSBQcm9iZSBSZXF1ZXN0IGZyYW1lcyAodGhlIG9ubHkgYnJvYWRjYXN0IGZyYW1lcyBmcm9tIGEKLQkJICogU1RBIGluIGluZnJhc3RydWN0dXJlIG1vZGUpIGZyb20ga2VlcGluZyBhIGNvbm5lY3Rpb24gYWxpdmUuCisJfSBlbHNlIGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpIHsKKwkJLyoKIAkJICogTWVzaCBiZWFjb25zIHdpbGwgdXBkYXRlIGxhc3Rfcnggd2hlbiBpZiB0aGV5IGFyZSBmb3VuZCB0bwogCQkgKiBtYXRjaCB0aGUgY3VycmVudCBsb2NhbCBjb25maWd1cmF0aW9uIHdoZW4gcHJvY2Vzc2VkLgogCQkgKi8KLQkJaWYgKHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCQkgICAgaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCQlyeC0+c2RhdGEtPnUubWdkLmxhc3RfYmVhY29uID0gamlmZmllczsKLQkJfSBlbHNlCi0JCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOworCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOwogCX0KIAogCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkpCkBAIC0xMTI1LDE0ICsxMTI2LDE1IEBACiAJCXNrYl9xdWV1ZV9lbXB0eSgmcngtPnN0YS0+cHNfdHhfYnVmKTsKIAogCWlmIChza2IpIHsKKwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0KIAkJCShzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKIAkJLyoKLQkJICogVGVsbCBUWCBwYXRoIHRvIHNlbmQgb25lIGZyYW1lIGV2ZW4gdGhvdWdoIHRoZSBTVEEgbWF5CisJCSAqIFRlbGwgVFggcGF0aCB0byBzZW5kIHRoaXMgZnJhbWUgZXZlbiB0aG91Z2ggdGhlIFNUQSBtYXkKIAkJICogc3RpbGwgcmVtYWluIGlzIFBTIG1vZGUgYWZ0ZXIgdGhpcyBmcmFtZSBleGNoYW5nZS4KIAkJICovCi0JCXNldF9zdGFfZmxhZ3MocngtPnN0YSwgV0xBTl9TVEFfUFNQT0xMKTsKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9QU1BPTExfUkVTUE9OU0U7CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAiU1RBICVwTSBhaWQgJWQ6IFBTIFBvbGwgKGVudHJpZXMgYWZ0ZXIgJWQpXG4iLApAQCAtMTE0Nyw3ICsxMTQ5LDcgQEAKIAkJZWxzZQogCQkJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsKIAotCQlkZXZfcXVldWVfeG1pdChza2IpOworCQlpZWVlODAyMTFfYWRkX3BlbmRpbmdfc2tiKHJ4LT5sb2NhbCwgc2tiKTsKIAogCQlpZiAobm9fcGVuZGluZ19wa3RzKQogCQkJc3RhX2luZm9fY2xlYXJfdGltX2JpdChyeC0+c3RhKTsKQEAgLTE0ODcsMTAgKzE0ODksMTMgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1lc2hfaGRyOwogCXVuc2lnbmVkIGludCBoZHJsZW47CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LT5za2IsICpmd2Rfc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAJbWVzaF9oZHIgPSAoc3RydWN0IGllZWU4MDIxMXNfaGRyICopIChza2ItPmRhdGEgKyBoZHJsZW4pOworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocngtPmRldik7CiAKIAlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCXJldHVybiBSWF9DT05USU5VRTsKQEAgLTE0OTksMTEgKzE1MDQsMTAgQEAKIAkJLyogaWxsZWdhbCBmcmFtZSAqLwogCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCi0JaWYgKG1lc2hfaGRyLT5mbGFncyAmIE1FU0hfRkxBR1NfQUVfQTVfQTYpewotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCisJCQkobWVzaF9oZHItPmZsYWdzICYgTUVTSF9GTEFHU19BRV9BNV9BNikpIHsKIAkJc3RydWN0IG1lc2hfcGF0aCAqbXBwYXRoOwogCi0JCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocngtPmRldik7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJbXBwYXRoID0gbXBwX3BhdGhfbG9va3VwKG1lc2hfaGRyLT5lYWRkcjIsIHNkYXRhKTsKIAkJaWYgKCFtcHBhdGgpIHsKQEAgLTE1MTgsNyArMTUyMiw5IEBACiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIAotCWlmIChjb21wYXJlX2V0aGVyX2FkZHIocngtPmRldi0+ZGV2X2FkZHIsIGhkci0+YWRkcjMpID09IDApCisJLyogRnJhbWUgaGFzIHJlYWNoZWQgZGVzdGluYXRpb24uICBEb24ndCBmb3J3YXJkICovCisJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJgorCQkJY29tcGFyZV9ldGhlcl9hZGRyKHJ4LT5kZXYtPmRldl9hZGRyLCBoZHItPmFkZHIzKSA9PSAwKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAltZXNoX2hkci0+dHRsLS07CkBAIC0xNTI5LDYgKzE1MzUsOCBAQAogCQkJCQkJICAgICBkcm9wcGVkX2ZyYW1lc190dGwpOwogCQllbHNlIHsKIAkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpmd2RfaGRyOworCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCiAJCQlmd2Rfc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKIAogCQkJaWYgKCFmd2Rfc2tiICYmIG5ldF9yYXRlbGltaXQoKSkKQEAgLTE1MzYsMTkgKzE1NDQsNDAgQEAKIAkJCQkJCSAgIHJ4LT5kZXYtPm5hbWUpOwogCiAJCQlmd2RfaGRyID0gIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBmd2Rfc2tiLT5kYXRhOwotCQkJLyoKLQkJCSAqIFNhdmUgVEEgdG8gYWRkcjEgdG8gc2VuZCBUQSBhIHBhdGggZXJyb3IgaWYgYQotCQkJICogc3VpdGFibGUgbmV4dCBob3AgaXMgbm90IGZvdW5kCi0JCQkgKi8KLQkJCW1lbWNweShmd2RfaGRyLT5hZGRyMSwgZndkX2hkci0+YWRkcjIsIEVUSF9BTEVOKTsKIAkJCW1lbWNweShmd2RfaGRyLT5hZGRyMiwgcngtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQkJCWZ3ZF9za2ItPmRldiA9IHJ4LT5sb2NhbC0+bWRldjsKLQkJCWZ3ZF9za2ItPmlpZiA9IHJ4LT5kZXYtPmlmaW5kZXg7Ci0JCQlkZXZfcXVldWVfeG1pdChmd2Rfc2tiKTsKKwkJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKGZ3ZF9za2IpOworCQkJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOworCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HOworCQkJaW5mby0+Y29udHJvbC52aWYgPSAmcngtPnNkYXRhLT52aWY7CisJCQlpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKGxvY2FsLCBmd2Rfc2tiKTsKKwkJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihmd2RfaGRyLT5hZGRyMSkpCisJCQkJSUVFRTgwMjExX0lGU1RBX01FU0hfQ1RSX0lOQygmc2RhdGEtPnUubWVzaCwKKwkJCQkJCQkJZndkZWRfbWNhc3QpOworCQkJZWxzZSB7CisJCQkJaW50IGVycjsKKwkJCQkvKgorCQkJCSAqIFNhdmUgVEEgdG8gYWRkcjEgdG8gc2VuZCBUQSBhIHBhdGggZXJyb3IgaWYgYQorCQkJCSAqIHN1aXRhYmxlIG5leHQgaG9wIGlzIG5vdCBmb3VuZAorCQkJCSAqLworCQkJCW1lbWNweShmd2RfaGRyLT5hZGRyMSwgZndkX2hkci0+YWRkcjIsCisJCQkJCQlFVEhfQUxFTik7CisJCQkJZXJyID0gbWVzaF9uZXh0aG9wX2xvb2t1cChmd2Rfc2tiLCBzZGF0YSk7CisJCQkJLyogRmFpbGVkIHRvIGltbWVkaWF0ZWx5IHJlc29sdmUgbmV4dCBob3A6CisJCQkJICogZndkZWQgZnJhbWUgd2FzIGRyb3BwZWQgb3Igd2lsbCBiZSBhZGRlZAorCQkJCSAqIGxhdGVyIHRvIHRoZSBwZW5kaW5nIHNrYiBxdWV1ZS4gICovCisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKworCQkJCUlFRUU4MDIxMV9JRlNUQV9NRVNIX0NUUl9JTkMoJnNkYXRhLT51Lm1lc2gsCisJCQkJCQkJCWZ3ZGVkX3VuaWNhc3QpOworCQkJfQorCQkJSUVFRTgwMjExX0lGU1RBX01FU0hfQ1RSX0lOQygmc2RhdGEtPnUubWVzaCwKKwkJCQkJCSAgICAgZndkZWRfZnJhbWVzKTsKKwkJCWllZWU4MDIxMV9hZGRfcGVuZGluZ19za2IobG9jYWwsIGZ3ZF9za2IpOwogCQl9CiAJfQogCi0JaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjMpIHx8CisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpIHx8CiAJICAgIHJ4LT5kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCXJldHVybiBSWF9DT05USU5VRTsKIAllbHNlCkBAIC0xNjIwLDcgKzE2NDksNyBAQAogCQkvKiBtYW5hZ2UgcmVvcmRlcmluZyBidWZmZXIgYWNjb3JkaW5nIHRvIHJlcXVlc3RlZCAqLwogCQkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KIAkJcmN1X3JlYWRfbG9jaygpOwotCQlpZWVlODAyMTFfc3RhX21hbmFnZV9yZW9yZGVyX2J1ZihodywgdGlkX2FnZ19yeCwgTlVMTCwgTlVMTCwKKwkJaWVlZTgwMjExX3N0YV9tYW5hZ2VfcmVvcmRlcl9idWYoaHcsIHRpZF9hZ2dfcngsIE5VTEwsCiAJCQkJCQkgc3RhcnRfc2VxX251bSwgMSk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKQEAgLTE2NDQsMTIgKzE2NzMsNyBAQAogCiAJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5zYSwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwIHx8CiAJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwKSB7Ci0JCS8qIE5vdCBmcm9tIHRoZSBjdXJyZW50IEFQLiAqLwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHNkYXRhLT51Lm1nZC5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKSB7Ci0JCS8qIEFzc29jaWF0aW9uIGluIHByb2dyZXNzOyBpZ25vcmUgU0EgUXVlcnkgKi8KKwkJLyogTm90IGZyb20gdGhlIGN1cnJlbnQgQVAgb3Igbm90IGFzc29jaWF0ZWQgeWV0LiAqLwogCQlyZXR1cm47CiAJfQogCkBAIC0xNjg2LDcgKzE3MTAsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocngtPmRldik7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSByeC0+c2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IGxlbiA9IHJ4LT5za2ItPmxlbjsKIAogCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9jb250cm9sKSkKQEAgLTE3NjQsMTcgKzE3ODcsNyBAQAogCQkJaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTikpCiAJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAotCQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIHNkYXRhLT51Lm1nZC5ic3NpZCwKLQkJCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJCSAgIHNkYXRhLT51Lm1nZC5zc2lkLAotCQkJCQkgICBzZGF0YS0+dS5tZ2Quc3NpZF9sZW4pOwotCQkJaWYgKCFic3MpCi0JCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKLQotCQkJaWVlZTgwMjExX3N0YV9wcm9jZXNzX2NoYW5zd2l0Y2goc2RhdGEsCi0JCQkJICAgICAmbWdtdC0+dS5hY3Rpb24udS5jaGFuX3N3aXRjaC5zd19lbGVtLCBic3MpOwotCQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci0JCQlicmVhazsKKwkJCXJldHVybiBpZWVlODAyMTFfc3RhX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DQVRFR09SWV9TQV9RVUVSWToKQEAgLTE4MTcsMTkgKzE4MzAsMTggQEAKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAogCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQotCQlyZXR1cm4gaWVlZTgwMjExX21lc2hfcnhfbWdtdChzZGF0YSwgcngtPnNrYiwgcngtPnN0YXR1cyk7CisJCXJldHVybiBpZWVlODAyMTFfbWVzaF9yeF9tZ210KHNkYXRhLCByeC0+c2tiKTsKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCXJldHVybiBpZWVlODAyMTFfaWJzc19yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKKwkJcmV0dXJuIGllZWU4MDIxMV9pYnNzX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IpOwogCiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKKwkJcmV0dXJuIGllZWU4MDIxMV9zdGFfcnhfbWdtdChzZGF0YSwgcngtPnNrYik7CiAKIAlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlpbnQga2V5aWR4OwpAQCAtMTg2Niw3ICsxODc4LDggQEAKIAkgICAgIWllZWU4MDIxMV9pc19hdXRoKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCWdvdG8gaWdub3JlOwogCi0JbWFjODAyMTFfZXZfbWljaGFlbF9taWNfZmFpbHVyZShyeC0+c2RhdGEsIGtleWlkeCwgaGRyLCBOVUxMKTsKKwltYWM4MDIxMV9ldl9taWNoYWVsX21pY19mYWlsdXJlKHJ4LT5zZGF0YSwga2V5aWR4LCBoZHIsIE5VTEwsCisJCQkJCUdGUF9BVE9NSUMpOwogIGlnbm9yZToKIAlkZXZfa2ZyZWVfc2tiKHJ4LT5za2IpOwogCXJ4LT5za2IgPSBOVUxMOwpAQCAtMjAyOCwxMyArMjA0MSw4IEBACiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQlpZiAoIWJzc2lkKQogCQkJcmV0dXJuIDA7Ci0JCWlmICghaWVlZTgwMjExX2Jzc2lkX21hdGNoKGJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQpKSB7Ci0JCQlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfSU5fU0NBTikpCi0JCQkJcmV0dXJuIDA7Ci0JCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKLQkJfSBlbHNlIGlmICghbXVsdGljYXN0ICYmCi0JCQkgICBjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPmRldi0+ZGV2X2FkZHIsCi0JCQkJCSAgICAgIGhkci0+YWRkcjEpICE9IDApIHsKKwkJaWYgKCFtdWx0aWNhc3QgJiYKKwkJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+ZGV2LT5kZXZfYWRkciwgaGRyLT5hZGRyMSkgIT0gMCkgewogCQkJaWYgKCEoc2RhdGEtPmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykpCiAJCQkJcmV0dXJuIDA7CiAJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKQEAgLTIxMTQsOSArMjEyMiw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywKIAkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKQEAgLTIxNDMsMTEgKzIxNTEsMTIgQEAKIAl9CiAKIAlpZiAoKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfTU1JQ19FUlJPUikpIHsKLQkJaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChsb2NhbC0+bWRldiwgaGRyLCAmcngpOworCQlpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KGhkciwgJnJ4KTsKIAkJcmV0dXJuOwogCX0KIAotCWlmICh1bmxpa2VseShsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKSkKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9IV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykgfHwKKwkJICAgICB0ZXN0X2JpdChTQ0FOX09GRl9DSEFOTkVMLCAmbG9jYWwtPnNjYW5uaW5nKSkpCiAJCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9SWF9JTl9TQ0FOOwogCiAJaWVlZTgwMjExX3BhcnNlX3FvcygmcngpOwpAQCAtMjIyNywyMCArMjIzNiwyMSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmW2luZGV4XTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzOwogCi0JaWYgKCF0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZltpbmRleF0pCisJaWYgKCFza2IpCiAJCWdvdG8gbm9fZnJhbWU7CiAKKwlzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKKwogCS8qIHJlbGVhc2UgdGhlIHJlb3JkZXJlZCBmcmFtZXMgdG8gc3RhY2sgKi8KLQltZW1jcHkoJnN0YXR1cywgdGlkX2FnZ19yeC0+cmVvcmRlcl9idWZbaW5kZXhdLT5jYiwgc2l6ZW9mKHN0YXR1cykpOwotCXNiYW5kID0gaHctPndpcGh5LT5iYW5kc1tzdGF0dXMuYmFuZF07Ci0JaWYgKHN0YXR1cy5mbGFnICYgUlhfRkxBR19IVCkKKwlzYmFuZCA9IGh3LT53aXBoeS0+YmFuZHNbc3RhdHVzLT5iYW5kXTsKKwlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkKIAkJcmF0ZSA9IHNiYW5kLT5iaXRyYXRlczsgLyogVE9ETzogSFQgcmF0ZXMgKi8KIAllbHNlCi0JCXJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW3N0YXR1cy5yYXRlX2lkeF07Ci0JX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgdGlkX2FnZ19yeC0+cmVvcmRlcl9idWZbaW5kZXhdLAotCQkJCSAgICAgJnN0YXR1cywgcmF0ZSk7CisJCXJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW3N0YXR1cy0+cmF0ZV9pZHhdOworCV9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHNrYiwgcmF0ZSk7CiAJdGlkX2FnZ19yeC0+c3RvcmVkX21wZHVfbnVtLS07CiAJdGlkX2FnZ19yeC0+cmVvcmRlcl9idWZbaW5kZXhdID0gTlVMTDsKIApAQCAtMjI2NSw3ICsyMjc1LDYgQEAKIHN0YXRpYyB1OCBpZWVlODAyMTFfc3RhX21hbmFnZV9yZW9yZGVyX2J1ZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICAgc3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX2FnZ19yeCwKIAkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4c3RhdHVzLAogCQkJCQkgICB1MTYgbXBkdV9zZXFfbnVtLAogCQkJCQkgICBpbnQgYmFyX3JlcSkKIHsKQEAgLTIzMjQsOCArMjMzMyw2IEBACiAJLyogcHV0IHRoZSBmcmFtZSBpbiB0aGUgcmVvcmRlcmluZyBidWZmZXIgKi8KIAl0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZltpbmRleF0gPSBza2I7CiAJdGlkX2FnZ19yeC0+cmVvcmRlcl90aW1lW2luZGV4XSA9IGppZmZpZXM7Ci0JbWVtY3B5KHRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmW2luZGV4XS0+Y2IsIHJ4c3RhdHVzLAotCSAgICAgICBzaXplb2YoKnJ4c3RhdHVzKSk7CiAJdGlkX2FnZ19yeC0+c3RvcmVkX21wZHVfbnVtKys7CiAJLyogcmVsZWFzZSB0aGUgYnVmZmVyIHVudGlsIG5leHQgbWlzc2luZyBmcmFtZSAqLwogCWluZGV4ID0gc2VxX3N1Yih0aWRfYWdnX3J4LT5oZWFkX3NlcV9udW0sIHRpZF9hZ2dfcngtPnNzbikKQEAgLTIzNzQsOCArMjM4MSw3IEBACiB9CiAKIHN0YXRpYyB1OCBpZWVlODAyMTFfcnhfcmVvcmRlcl9hbXBkdShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKQorCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CkBAIC0yNDI0LDcgKzI0MzAsNyBAQAogCiAJLyogYWNjb3JkaW5nIHRvIG1wZHUgc2VxdWVuY2UgbnVtYmVyIGRlYWwgd2l0aCByZW9yZGVyaW5nIGJ1ZmZlciAqLwogCW1wZHVfc2VxX251bSA9IChzYyAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKLQlyZXQgPSBpZWVlODAyMTFfc3RhX21hbmFnZV9yZW9yZGVyX2J1ZihodywgdGlkX2FnZ19yeCwgc2tiLCBzdGF0dXMsCisJcmV0ID0gaWVlZTgwMjExX3N0YV9tYW5hZ2VfcmVvcmRlcl9idWYoaHcsIHRpZF9hZ2dfcngsIHNrYiwKIAkJCQkJCW1wZHVfc2VxX251bSwgMCk7CiAgZW5kX3Jlb3JkZXI6CiAJcmV0dXJuIHJldDsKQEAgLTI0MzQsMjQgKzI0NDAsMjAgQEAKICAqIFRoaXMgaXMgdGhlIHJlY2VpdmUgcGF0aCBoYW5kbGVyLiBJdCBpcyBjYWxsZWQgYnkgYSBsb3cgbGV2ZWwgZHJpdmVyIHdoZW4gYW4KICAqIDgwMi4xMSBNUERVIGlzIHJlY2VpdmVkIGZyb20gdGhlIGhhcmR3YXJlLgogICovCi12b2lkIF9faWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykKK3ZvaWQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCi0JaWYgKHN0YXR1cy0+YmFuZCA8IDAgfHwKLQkgICAgc3RhdHVzLT5iYW5kID49IElFRUU4MDIxMV9OVU1fQkFORFMpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoV0FSTl9PTihzdGF0dXMtPmJhbmQgPCAwIHx8CisJCSAgICBzdGF0dXMtPmJhbmQgPj0gSUVFRTgwMjExX05VTV9CQU5EUykpCisJCWdvdG8gZHJvcDsKIAogCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tzdGF0dXMtPmJhbmRdOwotCWlmICghc2JhbmQpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoV0FSTl9PTighc2JhbmQpKQorCQlnb3RvIGRyb3A7CiAKIAkvKgogCSAqIElmIHdlJ3JlIHN1c3BlbmRpbmcsIGl0IGlzIHBvc3NpYmxlIGFsdGhvdWdoIG5vdCB0b28gbGlrZWx5CkBAIC0yNDYwLDE2ICsyNDYyLDIxIEBACiAJICogdGhhdCBtaWdodCwgZm9yIGV4YW1wbGUsIGNhdXNlIHN0YXRpb25zIHRvIGJlIGFkZGVkIG9yIG90aGVyCiAJICogZHJpdmVyIGNhbGxiYWNrcyBiZSBpbnZva2VkLgogCSAqLwotCWlmICh1bmxpa2VseShsb2NhbC0+cXVpZXNjaW5nIHx8IGxvY2FsLT5zdXNwZW5kZWQpKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQorCWlmICh1bmxpa2VseShsb2NhbC0+cXVpZXNjaW5nIHx8IGxvY2FsLT5zdXNwZW5kZWQpKQorCQlnb3RvIGRyb3A7CisKKwkvKgorCSAqIFRoZSBzYW1lIGhhcHBlbnMgd2hlbiB3ZSdyZSBub3QgZXZlbiBzdGFydGVkLAorCSAqIGJ1dCB0aGF0J3Mgd29ydGggYSB3YXJuaW5nLgorCSAqLworCWlmIChXQVJOX09OKCFsb2NhbC0+c3RhcnRlZCkpCisJCWdvdG8gZHJvcDsKIAogCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSB7CiAJCS8qIHJhdGVfaWR4IGlzIE1DUyBpbmRleCAqLwogCQlpZiAoV0FSTl9PTihzdGF0dXMtPnJhdGVfaWR4IDwgMCB8fAogCQkJICAgIHN0YXR1cy0+cmF0ZV9pZHggPj0gNzYpKQotCQkJcmV0dXJuOworCQkJZ290byBkcm9wOwogCQkvKiBIVCByYXRlcyBhcmUgbm90IGluIHRoZSB0YWJsZSAtIHVzZSB0aGUgaGlnaGVzdCBsZWdhY3kgcmF0ZQogCQkgKiBmb3Igbm93IHNpbmNlIG90aGVyIHBhcnRzIG9mIG1hYzgwMjExIG1heSBub3QgeWV0IGJlIGZ1bGx5CiAJCSAqIE1DUyBhd2FyZS4gKi8KQEAgLTI0NzcsNyArMjQ4NCw3IEBACiAJfSBlbHNlIHsKIAkJaWYgKFdBUk5fT04oc3RhdHVzLT5yYXRlX2lkeCA8IDAgfHwKIAkJCSAgICBzdGF0dXMtPnJhdGVfaWR4ID49IHNiYW5kLT5uX2JpdHJhdGVzKSkKLQkJCXJldHVybjsKKwkJCWdvdG8gZHJvcDsKIAkJcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbc3RhdHVzLT5yYXRlX2lkeF07CiAJfQogCkBAIC0yNDk0LDcgKzI1MDEsNyBAQAogCSAqIGlmIGl0IHdhcyBwcmV2aW91c2x5IHByZXNlbnQuCiAJICogQWxzbywgZnJhbWVzIHdpdGggbGVzcyB0aGFuIDE2IGJ5dGVzIGFyZSBkcm9wcGVkLgogCSAqLwotCXNrYiA9IGllZWU4MDIxMV9yeF9tb25pdG9yKGxvY2FsLCBza2IsIHN0YXR1cywgcmF0ZSk7CisJc2tiID0gaWVlZTgwMjExX3J4X21vbml0b3IobG9jYWwsIHNrYiwgcmF0ZSk7CiAJaWYgKCFza2IpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKQEAgLTI1MTIsMjUgKzI1MTksMjUgQEAKIAkgKiBmcmFtZXMgZnJvbSBvdGhlciB0aGFuIG9wZXJhdGlvbmFsIGNoYW5uZWwpLCBidXQgdGhhdCBzaG91bGQgbm90CiAJICogaGFwcGVuIGluIG5vcm1hbCBuZXR3b3Jrcy4KIAkgKi8KLQlpZiAoIWllZWU4MDIxMV9yeF9yZW9yZGVyX2FtcGR1KGxvY2FsLCBza2IsIHN0YXR1cykpCi0JCV9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHNrYiwgc3RhdHVzLCByYXRlKTsKKwlpZiAoIWllZWU4MDIxMV9yeF9yZW9yZGVyX2FtcGR1KGxvY2FsLCBza2IpKQorCQlfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KGh3LCBza2IsIHJhdGUpOwogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm47CisgZHJvcDoKKwlrZnJlZV9za2Ioc2tiKTsKIH0KLUVYUE9SVF9TWU1CT0woX19pZWVlODAyMTFfcngpOworRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcngpOwogCiAvKiBUaGlzIGlzIGEgdmVyc2lvbiBvZiB0aGUgcnggaGFuZGxlciB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSBoYXJkIGlycQogICogY29udGV4dC4gUG9zdCB0aGUgc2tiIG9uIHRoZSBxdWV1ZSBhbmQgc2NoZWR1bGUgdGhlIHRhc2tsZXQgKi8KLXZvaWQgaWVlZTgwMjExX3J4X2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpCit2b2lkIGllZWU4MDIxMV9yeF9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCiAJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cykgPiBzaXplb2Yoc2tiLT5jYikpOwogCi0Jc2tiLT5kZXYgPSBsb2NhbC0+bWRldjsKLQkvKiBjb3B5IHN0YXR1cyBpbnRvIHNrYi0+Y2IgZm9yIHVzZSBieSB0YXNrbGV0ICovCi0JbWVtY3B5KHNrYi0+Y2IsIHN0YXR1cywgc2l6ZW9mKCpzdGF0dXMpKTsKIAlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX1JYX01TRzsKIAlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnNrYl9xdWV1ZSwgc2tiKTsKIAl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dGFza2xldCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uYwppbmRleCAyYThkMDlhLi4wMzk5MDExIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc2Nhbi5jCisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogCiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKICNpbmNsdWRlICJkcml2ZXItb3BzLmgiCkBAIC0yNiw3ICsyNSw3IEBACiAKICNkZWZpbmUgSUVFRTgwMjExX1BST0JFX0RFTEFZIChIWiAvIDMzKQogI2RlZmluZSBJRUVFODAyMTFfQ0hBTk5FTF9USU1FIChIWiAvIDMzKQotI2RlZmluZSBJRUVFODAyMTFfUEFTU0lWRV9DSEFOTkVMX1RJTUUgKEhaIC8gNSkKKyNkZWZpbmUgSUVFRTgwMjExX1BBU1NJVkVfQ0hBTk5FTF9USU1FIChIWiAvIDgpCiAKIHN0cnVjdCBpZWVlODAyMTFfYnNzICoKIGllZWU4MDIxMV9yeF9ic3NfZ2V0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnNzaWQsIGludCBmcmVxLApAQCAtMTIxLDIzICsxMjAsMTAgQEAKIAlyZXR1cm4gYnNzOwogfQogCi12b2lkIGllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYnNzaWQsCi0JCQkgICAgIGludCBmcmVxLCB1OCAqc3NpZCwgdTggc3NpZF9sZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBic3NpZCwgZnJlcSwgc3NpZCwgc3NpZF9sZW4pOwotCWlmIChic3MpIHsKLQkJY2ZnODAyMTFfdW5saW5rX2Jzcyhsb2NhbC0+aHcud2lwaHksICh2b2lkICopYnNzKTsKLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci0JfQotfQotCiBpZWVlODAyMTFfcnhfcmVzdWx0Ci1pZWVlODAyMTFfc2Nhbl9yeChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoraWVlZTgwMjExX3NjYW5fcngoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCXU4ICplbGVtZW50czsKQEAgLTI3OCw3ICsyNjQsNyBAQAogCiAJbXV0ZXhfbG9jaygmbG9jYWwtPnNjYW5fbXR4KTsKIAotCWlmIChXQVJOX09OKCFsb2NhbC0+aHdfc2Nhbm5pbmcgJiYgIWxvY2FsLT5zd19zY2FubmluZykpIHsKKwlpZiAoV0FSTl9PTighbG9jYWwtPnNjYW5uaW5nKSkgewogCQltdXRleF91bmxvY2soJmxvY2FsLT5zY2FuX210eCk7CiAJCXJldHVybjsKIAl9CkBAIC0yODgsMTYgKzI3NCwxNiBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGxvY2FsLT5od19zY2FubmluZykKKwlpZiAodGVzdF9iaXQoU0NBTl9IV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykpCiAJCWllZWU4MDIxMV9yZXN0b3JlX3NjYW5faWVzKGxvY2FsKTsKIAotCWlmIChsb2NhbC0+c2Nhbl9yZXEgIT0gJmxvY2FsLT5pbnRfc2Nhbl9yZXEpCisJaWYgKGxvY2FsLT5zY2FuX3JlcSAhPSBsb2NhbC0+aW50X3NjYW5fcmVxKQogCQljZmc4MDIxMV9zY2FuX2RvbmUobG9jYWwtPnNjYW5fcmVxLCBhYm9ydGVkKTsKIAlsb2NhbC0+c2Nhbl9yZXEgPSBOVUxMOworCWxvY2FsLT5zY2FuX3NkYXRhID0gTlVMTDsKIAotCXdhc19od19zY2FuID0gbG9jYWwtPmh3X3NjYW5uaW5nOwotCWxvY2FsLT5od19zY2FubmluZyA9IGZhbHNlOwotCWxvY2FsLT5zd19zY2FubmluZyA9IGZhbHNlOworCXdhc19od19zY2FuID0gdGVzdF9iaXQoU0NBTl9IV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZyk7CisJbG9jYWwtPnNjYW5uaW5nID0gMDsKIAlsb2NhbC0+c2Nhbl9jaGFubmVsID0gTlVMTDsKIAogCS8qIHdlIG9ubHkgaGF2ZSB0byBwcm90ZWN0IHNjYW5fcmVxIGFuZCBody9zdyBzY2FuICovCkBAIC0zMDcsMTYgKzI5Myw3IEBACiAJaWYgKHdhc19od19zY2FuKQogCQlnb3RvIGRvbmU7CiAKLQluZXRpZl90eF9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKLQluZXRpZl9hZGRyX2xvY2sobG9jYWwtPm1kZXYpOwotCWxvY2FsLT5maWx0ZXJfZmxhZ3MgJj0gfkZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDOwotCWRydl9jb25maWd1cmVfZmlsdGVyKGxvY2FsLCBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQywKLQkJCSAgICAgJmxvY2FsLT5maWx0ZXJfZmxhZ3MsCi0JCQkgICAgIGxvY2FsLT5tZGV2LT5tY19jb3VudCwKLQkJCSAgICAgbG9jYWwtPm1kZXYtPm1jX2xpc3QpOwotCi0JbmV0aWZfYWRkcl91bmxvY2sobG9jYWwtPm1kZXYpOwotCW5ldGlmX3R4X3VubG9ja19iaChsb2NhbC0+bWRldik7CisJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwogCiAJZHJ2X3N3X3NjYW5fY29tcGxldGUobG9jYWwpOwogCkBAIC0zMjcsNyArMzA0LDcgQEAKIAogCQkvKiBUZWxsIEFQIHdlJ3JlIGJhY2sgKi8KIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCQlpZiAoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7CisJCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpIHsKIAkJCQlpZWVlODAyMTFfc2Nhbl9wc19kaXNhYmxlKHNkYXRhKTsKIAkJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJCQl9CkBAIC0zODIsMzAgKzM1OSwyNCBAQAogCQkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoCiAJCQkJc2RhdGEsIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKIAotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJCWlmIChzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHsKLQkJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7Ci0JCQkJaWVlZTgwMjExX3NjYW5fcHNfZW5hYmxlKHNkYXRhKTsKLQkJCX0KLQkJfSBlbHNlCisJCS8qCisJCSAqIG9ubHkgaGFuZGxlIG5vbi1TVEEgaW50ZXJmYWNlcyBoZXJlLCBTVEEgaW50ZXJmYWNlcworCQkgKiBhcmUgaGFuZGxlZCBpbiB0aGUgc2NhbiBzdGF0ZSBtYWNoaW5lCisJCSAqLworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJfQogCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCi0JbG9jYWwtPnNjYW5fc3RhdGUgPSBTQ0FOX1NFVF9DSEFOTkVMOworCWxvY2FsLT5uZXh0X3NjYW5fc3RhdGUgPSBTQ0FOX0RFQ0lTSU9OOwogCWxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID0gMDsKIAotCW5ldGlmX2FkZHJfbG9ja19iaChsb2NhbC0+bWRldik7Ci0JbG9jYWwtPmZpbHRlcl9mbGFncyB8PSBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQzsKLQlkcnZfY29uZmlndXJlX2ZpbHRlcihsb2NhbCwgRklGX0JDTl9QUkJSRVNQX1BST01JU0MsCi0JCQkgICAgICZsb2NhbC0+ZmlsdGVyX2ZsYWdzLAotCQkJICAgICBsb2NhbC0+bWRldi0+bWNfY291bnQsCi0JCQkgICAgIGxvY2FsLT5tZGV2LT5tY19saXN0KTsKLQluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CisJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwogCiAJLyogVE9ETzogc3RhcnQgc2NhbiBhcyBzb29uIGFzIGFsbCBudWxsZnVuYyBmcmFtZXMgYXJlIEFDS2VkICovCi0JcXVldWVfZGVsYXllZF93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZsb2NhbC0+c2Nhbl93b3JrLAotCQkJICAgSUVFRTgwMjExX0NIQU5ORUxfVElNRSk7CisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yaygmbG9jYWwtPmh3LAorCQkJCSAgICAgJmxvY2FsLT5zY2FuX3dvcmssCisJCQkJICAgICBJRUVFODAyMTFfQ0hBTk5FTF9USU1FKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDQxLDIwICs0MTIsMTggQEAKIAlsb2NhbC0+c2Nhbl9yZXEgPSByZXE7CiAJbG9jYWwtPnNjYW5fc2RhdGEgPSBzZGF0YTsKIAotCWlmIChyZXEgIT0gJmxvY2FsLT5pbnRfc2Nhbl9yZXEgJiYKKwlpZiAocmVxICE9IGxvY2FsLT5pbnRfc2Nhbl9yZXEgJiYKIAkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFIHx8Ci0JICAgICBpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSB8fAotCSAgICAgaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUpKSB7Ci0JCS8qIGFjdHVhbGx5IHdhaXQgZm9yIHRoZSBhc3NvYyB0byBmaW5pc2gvdGltZSBvdXQgKi8KKwkgICAgIWxpc3RfZW1wdHkoJmlmbWdkLT53b3JrX2xpc3QpKSB7CisJCS8qIGFjdHVhbGx5IHdhaXQgZm9yIHRoZSB3b3JrIGl0J3MgZG9pbmcgdG8gZmluaXNoL3RpbWUgb3V0ICovCiAJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmbWdkLT5yZXF1ZXN0KTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGxvY2FsLT5vcHMtPmh3X3NjYW4pCi0JCWxvY2FsLT5od19zY2FubmluZyA9IHRydWU7CisJCV9fc2V0X2JpdChTQ0FOX0hXX1NDQU5OSU5HLCAmbG9jYWwtPnNjYW5uaW5nKTsKIAllbHNlCi0JCWxvY2FsLT5zd19zY2FubmluZyA9IHRydWU7CisJCV9fc2V0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCAmbG9jYWwtPnNjYW5uaW5nKTsKIAkvKgogCSAqIEtpY2tpbmcgb2ZmIHRoZSBzY2FuIG5lZWQgbm90IGJlIHByb3RlY3RlZCwKIAkgKiBvbmx5IHRoZSBzY2FuIHZhcmlhYmxlIHN0dWZmLCBzaW5jZSBub3cKQEAgLTQ3NywxMSArNDQ2LDkgQEAKIAltdXRleF9sb2NrKCZsb2NhbC0+c2Nhbl9tdHgpOwogCiAJaWYgKHJjKSB7Ci0JCWlmIChsb2NhbC0+b3BzLT5od19zY2FuKSB7Ci0JCQlsb2NhbC0+aHdfc2Nhbm5pbmcgPSBmYWxzZTsKKwkJaWYgKGxvY2FsLT5vcHMtPmh3X3NjYW4pCiAJCQlpZWVlODAyMTFfcmVzdG9yZV9zY2FuX2llcyhsb2NhbCk7Ci0JCX0gZWxzZQotCQkJbG9jYWwtPnN3X3NjYW5uaW5nID0gZmFsc2U7CisJCWxvY2FsLT5zY2FubmluZyA9IDA7CiAKIAkJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKIApAQCAtNDkyLDEzICs0NTksMTk1IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IGllZWU4MDIxMV9zY2FuX3N0YXRlX2RlY2lzaW9uKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQkgdW5zaWduZWQgbG9uZyAqbmV4dF9kZWxheSkKK3sKKwlib29sIGFzc29jaWF0ZWQgPSBmYWxzZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCS8qIGlmIG5vIG1vcmUgYmFuZHMvY2hhbm5lbHMgbGVmdCwgY29tcGxldGUgc2NhbiBhbmQgYWR2YW5jZSB0byB0aGUgaWRsZSBzdGF0ZSAqLworCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA+PSBsb2NhbC0+c2Nhbl9yZXEtPm5fY2hhbm5lbHMpIHsKKwkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKCZsb2NhbC0+aHcsIGZhbHNlKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogY2hlY2sgaWYgYXQgbGVhc3Qgb25lIFNUQSBpbnRlcmZhY2UgaXMgYXNzb2NpYXRlZCAqLworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJY29udGludWU7CisKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpIHsKKwkJCQlhc3NvY2lhdGVkID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKworCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsKSB7CisJCS8qCisJCSAqIHdlJ3JlIGN1cnJlbnRseSBzY2FubmluZyBhIGRpZmZlcmVudCBjaGFubmVsLCBsZXQncworCQkgKiBzd2l0Y2ggYmFjayB0byB0aGUgb3BlcmF0aW5nIGNoYW5uZWwgbm93IGlmIGF0IGxlYXN0CisJCSAqIG9uZSBpbnRlcmZhY2UgaXMgYXNzb2NpYXRlZC4gT3RoZXJ3aXNlIGp1c3Qgc2NhbiB0aGUKKwkJICogbmV4dCBjaGFubmVsCisJCSAqLworCQlpZiAoYXNzb2NpYXRlZCkKKwkJCWxvY2FsLT5uZXh0X3NjYW5fc3RhdGUgPSBTQ0FOX0VOVEVSX09QRVJfQ0hBTk5FTDsKKwkJZWxzZQorCQkJbG9jYWwtPm5leHRfc2Nhbl9zdGF0ZSA9IFNDQU5fU0VUX0NIQU5ORUw7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogd2UncmUgb24gdGhlIG9wZXJhdGluZyBjaGFubmVsIGN1cnJlbnRseSwgbGV0J3MKKwkJICogbGVhdmUgdGhhdCBjaGFubmVsIG5vdyB0byBzY2FuIGFub3RoZXIgb25lCisJCSAqLworCQlsb2NhbC0+bmV4dF9zY2FuX3N0YXRlID0gU0NBTl9MRUFWRV9PUEVSX0NIQU5ORUw7CisJfQorCisJKm5leHRfZGVsYXkgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9zdGF0ZV9sZWF2ZV9vcGVyX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqbmV4dF9kZWxheSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCS8qCisJICogbm90aWZ5IHRoZSBBUCBhYm91dCB1cyBsZWF2aW5nIHRoZSBjaGFubmVsIGFuZCBzdG9wIGFsbCBTVEEgaW50ZXJmYWNlcworCSAqLworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJY29udGludWU7CisKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CisJCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpCisJCQkJaWVlZTgwMjExX3NjYW5fcHNfZW5hYmxlKHNkYXRhKTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKworCV9fc2V0X2JpdChTQ0FOX09GRl9DSEFOTkVMLCAmbG9jYWwtPnNjYW5uaW5nKTsKKworCS8qIGFkdmFuY2UgdG8gdGhlIG5leHQgY2hhbm5lbCB0byBiZSBzY2FubmVkICovCisJKm5leHRfZGVsYXkgPSBIWiAvIDEwOworCWxvY2FsLT5uZXh0X3NjYW5fc3RhdGUgPSBTQ0FOX1NFVF9DSEFOTkVMOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9zdGF0ZV9lbnRlcl9vcGVyX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqbmV4dF9kZWxheSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOworCisJLyogc3dpdGNoIGJhY2sgdG8gdGhlIG9wZXJhdGluZyBjaGFubmVsICovCisJbG9jYWwtPnNjYW5fY2hhbm5lbCA9IE5VTEw7CisJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpOworCisJLyoKKwkgKiBub3RpZnkgdGhlIEFQIGFib3V0IHVzIGJlaW5nIGJhY2sgYW5kIHJlc3RhcnQgYWxsIFNUQSBpbnRlcmZhY2VzCisJICovCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCQljb250aW51ZTsKKworCQkvKiBUZWxsIEFQIHdlJ3JlIGJhY2sgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpCisJCQkJaWVlZTgwMjExX3NjYW5fcHNfZGlzYWJsZShzZGF0YSk7CisJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisKKwlfX2NsZWFyX2JpdChTQ0FOX09GRl9DSEFOTkVMLCAmbG9jYWwtPnNjYW5uaW5nKTsKKworCSpuZXh0X2RlbGF5ID0gSFogLyA1OworCWxvY2FsLT5uZXh0X3NjYW5fc3RhdGUgPSBTQ0FOX0RFQ0lTSU9OOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9zdGF0ZV9zZXRfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nICpuZXh0X2RlbGF5KQoreworCWludCBza2lwOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOworCisJc2tpcCA9IDA7CisJY2hhbiA9IGxvY2FsLT5zY2FuX3JlcS0+Y2hhbm5lbHNbbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHhdOworCisJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQgfHwKKwkgICAgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgorCSAgICAgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JQlNTKSkKKwkJc2tpcCA9IDE7CisKKwlpZiAoIXNraXApIHsKKwkJbG9jYWwtPnNjYW5fY2hhbm5lbCA9IGNoYW47CisJCWlmIChpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLAorCQkJCQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkpCisJCQlza2lwID0gMTsKKwl9CisKKwkvKiBhZHZhbmNlIHN0YXRlIG1hY2hpbmUgdG8gbmV4dCBjaGFubmVsL2JhbmQgKi8KKwlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCsrOworCisJaWYgKHNraXApIHsKKwkJLyogaWYgd2Ugc2tpcCB0aGlzIGNoYW5uZWwgcmV0dXJuIHRvIHRoZSBkZWNpc2lvbiBzdGF0ZSAqLworCQlsb2NhbC0+bmV4dF9zY2FuX3N0YXRlID0gU0NBTl9ERUNJU0lPTjsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogUHJvYmUgZGVsYXkgaXMgdXNlZCB0byB1cGRhdGUgdGhlIE5BViwgY2YuIDExLjEuMy4yLjIKKwkgKiAod2hpY2ggdW5mb3J0dW5hdGVseSBkb2Vzbid0IHNheSBfd2h5XyBzdGVwIGEpIGlzIGRvbmUsCisJICogYnV0IGl0IHdhaXRzIGZvciB0aGUgcHJvYmUgZGVsYXkgb3IgdW50aWwgYSBmcmFtZSBpcworCSAqIHJlY2VpdmVkIC0gYW5kIHRoZSByZWNlaXZlZCBmcmFtZSB3b3VsZCB1cGRhdGUgdGhlIE5BVikuCisJICogRm9yIG5vdywgd2UgZG8gbm90IHN1cHBvcnQgd2FpdGluZyB1bnRpbCBhIGZyYW1lIGlzCisJICogcmVjZWl2ZWQuCisJICoKKwkgKiBJbiBhbnkgY2FzZSwgaXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgYSBwYXNzaXZlIHNjYW4uCisJICovCisJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOIHx8CisJICAgICFsb2NhbC0+c2Nhbl9yZXEtPm5fc3NpZHMpIHsKKwkJKm5leHRfZGVsYXkgPSBJRUVFODAyMTFfUEFTU0lWRV9DSEFOTkVMX1RJTUU7CisJCWxvY2FsLT5uZXh0X3NjYW5fc3RhdGUgPSBTQ0FOX0RFQ0lTSU9OOworCQlyZXR1cm47CisJfQorCisJLyogYWN0aXZlIHNjYW4sIHNlbmQgcHJvYmVzICovCisJKm5leHRfZGVsYXkgPSBJRUVFODAyMTFfUFJPQkVfREVMQVk7CisJbG9jYWwtPm5leHRfc2Nhbl9zdGF0ZSA9IFNDQU5fU0VORF9QUk9CRTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NjYW5fc3RhdGVfc2VuZF9wcm9iZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKm5leHRfZGVsYXkpCit7CisJaW50IGk7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBsb2NhbC0+c2Nhbl9yZXEtPm5fc3NpZHM7IGkrKykKKwkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKAorCQkJc2RhdGEsIE5VTEwsCisJCQlsb2NhbC0+c2Nhbl9yZXEtPnNzaWRzW2ldLnNzaWQsCisJCQlsb2NhbC0+c2Nhbl9yZXEtPnNzaWRzW2ldLnNzaWRfbGVuLAorCQkJbG9jYWwtPnNjYW5fcmVxLT5pZSwgbG9jYWwtPnNjYW5fcmVxLT5pZV9sZW4pOworCisJLyoKKwkgKiBBZnRlciBzZW5kaW5nIHByb2JlIHJlcXVlc3RzLCB3YWl0IGZvciBwcm9iZSByZXNwb25zZXMKKwkgKiBvbiB0aGUgY2hhbm5lbC4KKwkgKi8KKwkqbmV4dF9kZWxheSA9IElFRUU4MDIxMV9DSEFOTkVMX1RJTUU7CisJbG9jYWwtPm5leHRfc2Nhbl9zdGF0ZSA9IFNDQU5fREVDSVNJT047Cit9CisKIHZvaWQgaWVlZTgwMjExX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwgc2Nhbl93b3JrLndvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwotCWludCBza2lwLCBpOwogCXVuc2lnbmVkIGxvbmcgbmV4dF9kZWxheSA9IDA7CiAKIAltdXRleF9sb2NrKCZsb2NhbC0+c2Nhbl9tdHgpOwpAQCAtNTA3LDExICs2NTYsMTIgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChsb2NhbC0+c2Nhbl9yZXEgJiYgIShsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKSkgeworCWlmIChsb2NhbC0+c2Nhbl9yZXEgJiYgIWxvY2FsLT5zY2FubmluZykgewogCQlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEgPSBsb2NhbC0+c2Nhbl9yZXE7CiAJCWludCByYzsKIAogCQlsb2NhbC0+c2Nhbl9yZXEgPSBOVUxMOworCQlsb2NhbC0+c2Nhbl9zZGF0YSA9IE5VTEw7CiAKIAkJcmMgPSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCByZXEpOwogCQltdXRleF91bmxvY2soJmxvY2FsLT5zY2FuX210eCk7CkBAIC01MzEsNzIgKzY4MSwzMiBAQAogCQlyZXR1cm47CiAJfQogCi0Jc3dpdGNoIChsb2NhbC0+c2Nhbl9zdGF0ZSkgewotCWNhc2UgU0NBTl9TRVRfQ0hBTk5FTDoKLQkJLyogaWYgbm8gbW9yZSBiYW5kcy9jaGFubmVscyBsZWZ0LCBjb21wbGV0ZSBzY2FuICovCi0JCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA+PSBsb2NhbC0+c2Nhbl9yZXEtPm5fY2hhbm5lbHMpIHsKLQkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgmbG9jYWwtPmh3LCBmYWxzZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc2tpcCA9IDA7Ci0JCWNoYW4gPSBsb2NhbC0+c2Nhbl9yZXEtPmNoYW5uZWxzW2xvY2FsLT5zY2FuX2NoYW5uZWxfaWR4XTsKLQotCQlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCB8fAotCQkgICAgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCQkgICAgIGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSUJTUykpCi0JCQlza2lwID0gMTsKLQotCQlpZiAoIXNraXApIHsKLQkJCWxvY2FsLT5zY2FuX2NoYW5uZWwgPSBjaGFuOwotCQkJaWYgKGllZWU4MDIxMV9od19jb25maWcobG9jYWwsCi0JCQkJCQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkpCi0JCQkJc2tpcCA9IDE7Ci0JCX0KLQotCQkvKiBhZHZhbmNlIHN0YXRlIG1hY2hpbmUgdG8gbmV4dCBjaGFubmVsL2JhbmQgKi8KLQkJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHgrKzsKLQotCQlpZiAoc2tpcCkKKwkvKgorCSAqIGFzIGxvbmcgYXMgbm8gZGVsYXkgaXMgcmVxdWlyZWQgYWR2YW5jZSBpbW1lZGlhdGVseQorCSAqIHdpdGhvdXQgc2NoZWR1bGluZyBhIG5ldyB3b3JrCisJICovCisJZG8geworCQlzd2l0Y2ggKGxvY2FsLT5uZXh0X3NjYW5fc3RhdGUpIHsKKwkJY2FzZSBTQ0FOX0RFQ0lTSU9OOgorCQkJaWYgKGllZWU4MDIxMV9zY2FuX3N0YXRlX2RlY2lzaW9uKGxvY2FsLCAmbmV4dF9kZWxheSkpCisJCQkJcmV0dXJuOwogCQkJYnJlYWs7Ci0KLQkJLyoKLQkJICogUHJvYmUgZGVsYXkgaXMgdXNlZCB0byB1cGRhdGUgdGhlIE5BViwgY2YuIDExLjEuMy4yLjIKLQkJICogKHdoaWNoIHVuZm9ydHVuYXRlbHkgZG9lc24ndCBzYXkgX3doeV8gc3RlcCBhKSBpcyBkb25lLAotCQkgKiBidXQgaXQgd2FpdHMgZm9yIHRoZSBwcm9iZSBkZWxheSBvciB1bnRpbCBhIGZyYW1lIGlzCi0JCSAqIHJlY2VpdmVkIC0gYW5kIHRoZSByZWNlaXZlZCBmcmFtZSB3b3VsZCB1cGRhdGUgdGhlIE5BVikuCi0JCSAqIEZvciBub3csIHdlIGRvIG5vdCBzdXBwb3J0IHdhaXRpbmcgdW50aWwgYSBmcmFtZSBpcwotCQkgKiByZWNlaXZlZC4KLQkJICoKLQkJICogSW4gYW55IGNhc2UsIGl0IGlzIG5vdCBuZWNlc3NhcnkgZm9yIGEgcGFzc2l2ZSBzY2FuLgotCQkgKi8KLQkJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOIHx8Ci0JCSAgICAhbG9jYWwtPnNjYW5fcmVxLT5uX3NzaWRzKSB7Ci0JCQluZXh0X2RlbGF5ID0gSUVFRTgwMjExX1BBU1NJVkVfQ0hBTk5FTF9USU1FOworCQljYXNlIFNDQU5fU0VUX0NIQU5ORUw6CisJCQlpZWVlODAyMTFfc2Nhbl9zdGF0ZV9zZXRfY2hhbm5lbChsb2NhbCwgJm5leHRfZGVsYXkpOworCQkJYnJlYWs7CisJCWNhc2UgU0NBTl9TRU5EX1BST0JFOgorCQkJaWVlZTgwMjExX3NjYW5fc3RhdGVfc2VuZF9wcm9iZShsb2NhbCwgJm5leHRfZGVsYXkpOworCQkJYnJlYWs7CisJCWNhc2UgU0NBTl9MRUFWRV9PUEVSX0NIQU5ORUw6CisJCQlpZWVlODAyMTFfc2Nhbl9zdGF0ZV9sZWF2ZV9vcGVyX2NoYW5uZWwobG9jYWwsICZuZXh0X2RlbGF5KTsKKwkJCWJyZWFrOworCQljYXNlIFNDQU5fRU5URVJfT1BFUl9DSEFOTkVMOgorCQkJaWVlZTgwMjExX3NjYW5fc3RhdGVfZW50ZXJfb3Blcl9jaGFubmVsKGxvY2FsLCAmbmV4dF9kZWxheSk7CiAJCQlicmVhazsKIAkJfQorCX0gd2hpbGUgKG5leHRfZGVsYXkgPT0gMCk7CiAKLQkJbmV4dF9kZWxheSA9IElFRUU4MDIxMV9QUk9CRV9ERUxBWTsKLQkJbG9jYWwtPnNjYW5fc3RhdGUgPSBTQ0FOX1NFTkRfUFJPQkU7Ci0JCWJyZWFrOwotCWNhc2UgU0NBTl9TRU5EX1BST0JFOgotCQlmb3IgKGkgPSAwOyBpIDwgbG9jYWwtPnNjYW5fcmVxLT5uX3NzaWRzOyBpKyspCi0JCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoCi0JCQkJc2RhdGEsIE5VTEwsCi0JCQkJbG9jYWwtPnNjYW5fcmVxLT5zc2lkc1tpXS5zc2lkLAotCQkJCWxvY2FsLT5zY2FuX3JlcS0+c3NpZHNbaV0uc3NpZF9sZW4sCi0JCQkJbG9jYWwtPnNjYW5fcmVxLT5pZSwgbG9jYWwtPnNjYW5fcmVxLT5pZV9sZW4pOwotCi0JCS8qCi0JCSAqIEFmdGVyIHNlbmRpbmcgcHJvYmUgcmVxdWVzdHMsIHdhaXQgZm9yIHByb2JlIHJlc3BvbnNlcwotCQkgKiBvbiB0aGUgY2hhbm5lbC4KLQkJICovCi0JCW5leHRfZGVsYXkgPSBJRUVFODAyMTFfQ0hBTk5FTF9USU1FOwotCQlsb2NhbC0+c2Nhbl9zdGF0ZSA9IFNDQU5fU0VUX0NIQU5ORUw7Ci0JCWJyZWFrOwotCX0KLQotCXF1ZXVlX2RlbGF5ZWRfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmbG9jYWwtPnNjYW5fd29yaywKLQkJCSAgIG5leHRfZGVsYXkpOworCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoJmxvY2FsLT5odywgJmxvY2FsLT5zY2FuX3dvcmssIG5leHRfZGVsYXkpOwogfQogCiBpbnQgaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTYyMywxMCArNzMzLDEwIEBACiAJaWYgKGxvY2FsLT5zY2FuX3JlcSkKIAkJZ290byB1bmxvY2s7CiAKLQltZW1jcHkobG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkLCBzc2lkLCBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKLQlsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWRfbGVuID0gc3NpZF9sZW47CisJbWVtY3B5KGxvY2FsLT5pbnRfc2Nhbl9yZXEtPnNzaWRzWzBdLnNzaWQsIHNzaWQsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOworCWxvY2FsLT5pbnRfc2Nhbl9yZXEtPnNzaWRzWzBdLnNzaWRfbGVuID0gc3NpZF9sZW47CiAKLQlyZXQgPSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCAmc2RhdGEtPmxvY2FsLT5pbnRfc2Nhbl9yZXEpOworCXJldCA9IF9faWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIHNkYXRhLT5sb2NhbC0+aW50X3NjYW5fcmVxKTsKICB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c2Nhbl9tdHgpOwogCXJldHVybiByZXQ7CkBAIC02MzQsNyArNzQ0LDcgQEAKIAogdm9pZCBpZWVlODAyMTFfc2Nhbl9jYW5jZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7Ci0JYm9vbCBzd3NjYW47CisJYm9vbCBhYm9ydHNjYW47CiAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmxvY2FsLT5zY2FuX3dvcmspOwogCkBAIC02NDMsOSArNzUzLDEwIEBACiAJICogcXVldWVkIC0tIG1vc3RseSBhdCBzdXNwZW5kIHVuZGVyIFJUTkwuCiAJICovCiAJbXV0ZXhfbG9jaygmbG9jYWwtPnNjYW5fbXR4KTsKLQlzd3NjYW4gPSBsb2NhbC0+c3dfc2Nhbm5pbmc7CisJYWJvcnRzY2FuID0gdGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykgfHwKKwkJICAgICghbG9jYWwtPnNjYW5uaW5nICYmIGxvY2FsLT5zY2FuX3JlcSk7CiAJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c2Nhbl9tdHgpOwogCi0JaWYgKHN3c2NhbikKKwlpZiAoYWJvcnRzY2FuKQogCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoJmxvY2FsLT5odywgdHJ1ZSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCmluZGV4IGEzNjBiY2UuLmVlYzAwMTQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCkBAIC0zNDksNiArMzQ5LDcgQEAKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAJbGlzdF9hZGQoJnN0YS0+bGlzdCwgJmxvY2FsLT5zdGFfbGlzdCk7CisJbG9jYWwtPnN0YV9nZW5lcmF0aW9uKys7CiAJbG9jYWwtPm51bV9zdGErKzsKIAlzdGFfaW5mb19oYXNoX2FkZChsb2NhbCwgc3RhKTsKIApAQCAtNDg1LDYgKzQ4Niw3IEBACiAJfQogCiAJbG9jYWwtPm51bV9zdGEtLTsKKwlsb2NhbC0+c3RhX2dlbmVyYXRpb24rKzsKIAogCWlmIChsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KSB7CiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKaW5kZXggNDlhMWExZi4uY2NjM2FkZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKQEAgLTMwLDcgKzMwLDYgQEAKICAqIEBXTEFOX1NUQV9BU1NPQ19BUDogV2UncmUgYXNzb2NpYXRlZCB0byB0aGF0IHN0YXRpb24sIGl0IGlzIGFuIEFQLgogICogQFdMQU5fU1RBX1dNRTogU3RhdGlvbiBpcyBhIFFvUy1TVEEuCiAgKiBAV0xBTl9TVEFfV0RTOiBTdGF0aW9uIGlzIG9uZSBvZiBvdXIgV0RTIHBlZXJzLgotICogQFdMQU5fU1RBX1BTUE9MTDogU3RhdGlvbiBoYXMganVzdCBQUy1wb2xsZWQgdXMuCiAgKiBAV0xBTl9TVEFfQ0xFQVJfUFNfRklMVDogQ2xlYXIgUFMgZmlsdGVyIGluIGhhcmR3YXJlICh1c2luZyB0aGUKICAqCUlFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVCBjb250cm9sIGZsYWcpIHdoZW4gdGhlIG5leHQKICAqCWZyYW1lIHRvIHRoaXMgc3RhdGlvbiBpcyB0cmFuc21pdHRlZC4KQEAgLTQ3LDcgKzQ2LDYgQEAKIAlXTEFOX1NUQV9BU1NPQ19BUAk9IDE8PDUsCiAJV0xBTl9TVEFfV01FCQk9IDE8PDYsCiAJV0xBTl9TVEFfV0RTCQk9IDE8PDcsCi0JV0xBTl9TVEFfUFNQT0xMCQk9IDE8PDgsCiAJV0xBTl9TVEFfQ0xFQVJfUFNfRklMVAk9IDE8PDksCiAJV0xBTl9TVEFfTUZQCQk9IDE8PDEwLAogCVdMQU5fU1RBX1NVU1BFTkQJPSAxPDwxMQpAQCAtMzA4LDYgKzMwNiwyMyBAQAogCQlzdHJ1Y3QgZGVudHJ5ICppbmFjdGl2ZV9tczsKIAkJc3RydWN0IGRlbnRyeSAqbGFzdF9zZXFfY3RybDsKIAkJc3RydWN0IGRlbnRyeSAqYWdnX3N0YXR1czsKKwkJc3RydWN0IGRlbnRyeSAqYWlkOworCQlzdHJ1Y3QgZGVudHJ5ICpkZXY7CisJCXN0cnVjdCBkZW50cnkgKnJ4X3BhY2tldHM7CisJCXN0cnVjdCBkZW50cnkgKnR4X3BhY2tldHM7CisJCXN0cnVjdCBkZW50cnkgKnJ4X2J5dGVzOworCQlzdHJ1Y3QgZGVudHJ5ICp0eF9ieXRlczsKKwkJc3RydWN0IGRlbnRyeSAqcnhfZHVwbGljYXRlczsKKwkJc3RydWN0IGRlbnRyeSAqcnhfZnJhZ21lbnRzOworCQlzdHJ1Y3QgZGVudHJ5ICpyeF9kcm9wcGVkOworCQlzdHJ1Y3QgZGVudHJ5ICp0eF9mcmFnbWVudHM7CisJCXN0cnVjdCBkZW50cnkgKnR4X2ZpbHRlcmVkOworCQlzdHJ1Y3QgZGVudHJ5ICp0eF9yZXRyeV9mYWlsZWQ7CisJCXN0cnVjdCBkZW50cnkgKnR4X3JldHJ5X2NvdW50OworCQlzdHJ1Y3QgZGVudHJ5ICpsYXN0X3NpZ25hbDsKKwkJc3RydWN0IGRlbnRyeSAqbGFzdF9xdWFsOworCQlzdHJ1Y3QgZGVudHJ5ICpsYXN0X25vaXNlOworCQlzdHJ1Y3QgZGVudHJ5ICp3ZXBfd2Vha19pdl9jb3VudDsKIAkJYm9vbCBhZGRfaGFzX3J1bjsKIAl9IGRlYnVnZnM7CiAjZW5kaWYKQEAgLTM0MiwxNyArMzU3LDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPmZsYWdsb2NrLCBpcnFmbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYW5kX2NsZWFyX3N0YV9mbGFncyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKLQkJCQkJICAgY29uc3QgdTMyIHNldCwgY29uc3QgdTMyIGNsZWFyKQotewotCXVuc2lnbmVkIGxvbmcgaXJxZmw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhLT5mbGFnbG9jaywgaXJxZmwpOwotCXN0YS0+ZmxhZ3MgfD0gc2V0OwotCXN0YS0+ZmxhZ3MgJj0gfmNsZWFyOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YS0+ZmxhZ2xvY2ssIGlycWZsKTsKLX0KLQogc3RhdGljIGlubGluZSB1MzIgdGVzdF9zdGFfZmxhZ3Moc3RydWN0IHN0YV9pbmZvICpzdGEsIGNvbnN0IHUzMiBmbGFncykKIHsKIAl1MzIgcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCAzYTg5MjJjLi41MTQzZDIwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJaWYgKHVubGlrZWx5KGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpCiAJCXJldHVybiBUWF9DT05USU5VRTsKIAotCWlmICh1bmxpa2VseSh0eC0+bG9jYWwtPnN3X3NjYW5uaW5nKSAmJgorCWlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX09GRl9DSEFOTkVMLCAmdHgtPmxvY2FsLT5zY2FubmluZykpICYmCiAJICAgICFpZWVlODAyMTFfaXNfcHJvYmVfcmVxKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKIAkgICAgIWllZWU4MDIxMV9pc19udWxsZnVuYyhoZHItPmZyYW1lX2NvbnRyb2wpKQogCQkvKgpAQCAtMzE3LDMwICszMTcsMzAgQEAKIAlpZiAoIWF0b21pY19yZWFkKCZ0eC0+c2RhdGEtPmJzcy0+bnVtX3N0YV9wcykpCiAJCXJldHVybiBUWF9DT05USU5VRTsKIAotCS8qIGJ1ZmZlcmVkIGluIG1hYzgwMjExICovCi0JaWYgKHR4LT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HKSB7Ci0JCWlmICh0eC0+bG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkID49IFRPVEFMX01BWF9UWF9CVUZGRVIpCi0JCQlwdXJnZV9vbGRfcHNfYnVmZmVycyh0eC0+bG9jYWwpOwotCQlpZiAoc2tiX3F1ZXVlX2xlbigmdHgtPnNkYXRhLT5ic3MtPnBzX2JjX2J1ZikgPj0KLQkJICAgIEFQX01BWF9CQ19CVUZGRVIpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRwotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogQkMgVFggYnVmZmVyIGZ1bGwgLSAiCi0JCQkJICAgICAgICJkcm9wcGluZyB0aGUgb2xkZXN0IGZyYW1lXG4iLAotCQkJCSAgICAgICB0eC0+ZGV2LT5uYW1lKTsKLQkJCX0KLSNlbmRpZgotCQkJZGV2X2tmcmVlX3NrYihza2JfZGVxdWV1ZSgmdHgtPnNkYXRhLT5ic3MtPnBzX2JjX2J1ZikpOwotCQl9IGVsc2UKLQkJCXR4LT5sb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQrKzsKLQkJc2tiX3F1ZXVlX3RhaWwoJnR4LT5zZGF0YS0+YnNzLT5wc19iY19idWYsIHR4LT5za2IpOwotCQlyZXR1cm4gVFhfUVVFVUVEOworCS8qIGJ1ZmZlcmVkIGluIGhhcmR3YXJlICovCisJaWYgKCEodHgtPmxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcpKSB7CisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNOworCisJCXJldHVybiBUWF9DT05USU5VRTsKIAl9CiAKLQkvKiBidWZmZXJlZCBpbiBoYXJkd2FyZSAqLwotCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNOworCS8qIGJ1ZmZlcmVkIGluIG1hYzgwMjExICovCisJaWYgKHR4LT5sb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQgPj0gVE9UQUxfTUFYX1RYX0JVRkZFUikKKwkJcHVyZ2Vfb2xkX3BzX2J1ZmZlcnModHgtPmxvY2FsKTsKIAotCXJldHVybiBUWF9DT05USU5VRTsKKwlpZiAoc2tiX3F1ZXVlX2xlbigmdHgtPnNkYXRhLT5ic3MtPnBzX2JjX2J1ZikgPj0gQVBfTUFYX0JDX0JVRkZFUikgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEJDIFRYIGJ1ZmZlciBmdWxsIC0gZHJvcHBpbmcgdGhlIG9sZGVzdCBmcmFtZVxuIiwKKwkJCSAgICAgICB0eC0+ZGV2LT5uYW1lKTsKKyNlbmRpZgorCQlkZXZfa2ZyZWVfc2tiKHNrYl9kZXF1ZXVlKCZ0eC0+c2RhdGEtPmJzcy0+cHNfYmNfYnVmKSk7CisJfSBlbHNlCisJCXR4LT5sb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQrKzsKKworCXNrYl9xdWV1ZV90YWlsKCZ0eC0+c2RhdGEtPmJzcy0+cHNfYmNfYnVmLCB0eC0+c2tiKTsKKworCXJldHVybiBUWF9RVUVVRUQ7CiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX3VzZV9tZnAoX19sZTE2IGZjLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKQEAgLTM3Myw3ICszNzMsNyBAQAogCXN0YWZsYWdzID0gZ2V0X3N0YV9mbGFncyhzdGEpOwogCiAJaWYgKHVubGlrZWx5KChzdGFmbGFncyAmIFdMQU5fU1RBX1BTKSAmJgotCQkgICAgICEoc3RhZmxhZ3MgJiBXTEFOX1NUQV9QU1BPTEwpKSkgeworCQkgICAgICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1BTUE9MTF9SRVNQT05TRSkpKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlNUQSAlcE0gYWlkICVkOiBQUyBidWZmZXIgKGVudHJpZXMgIgogCQkgICAgICAgImJlZm9yZSAlZClcbiIsCkBAIC00MDAsNiArNDAwLDcgQEAKIAkJCXN0YV9pbmZvX3NldF90aW1fYml0KHN0YSk7CiAKIAkJaW5mby0+Y29udHJvbC5qaWZmaWVzID0gamlmZmllczsKKwkJaW5mby0+Y29udHJvbC52aWYgPSAmdHgtPnNkYXRhLT52aWY7CiAJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORzsKIAkJc2tiX3F1ZXVlX3RhaWwoJnN0YS0+cHNfdHhfYnVmLCB0eC0+c2tiKTsKIAkJcmV0dXJuIFRYX1FVRVVFRDsKQEAgLTQxMSwyNCArNDEyLDcgQEAKIAkJICAgICAgIHN0YS0+c3RhLmFkZHIpOwogCX0KICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRyAqLwotCWlmICh0ZXN0X2FuZF9jbGVhcl9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QU1BPTEwpKSB7Ci0JCS8qCi0JCSAqIFRoZSBzbGVlcGluZyBzdGF0aW9uIHdpdGggcGVuZGluZyBkYXRhIGlzIG5vdyBzbm9vemluZy4KLQkJICogSXQgcXVlcmllZCB1cyBmb3IgaXRzIGJ1ZmZlcmVkIGZyYW1lcyBhbmQgd2lsbCBnbyBiYWNrCi0JCSAqIHRvIGRlZXAgc2xlZXAgb25jZSBpdCBnb3QgZXZlcnl0aGluZy4KLQkJICoKLQkJICogaW5mb3JtIHRoZSBkcml2ZXIsIGluIGNhc2UgdGhlIGhhcmR3YXJlIGRvZXMgcG93ZXJzYXZlCi0JCSAqIGZyYW1lIGZpbHRlcmluZyBhbmQga2VlcHMgYSBzdGF0aW9uICBibGFja2xpc3Qgb24gaXRzIG93bgotCQkgKiAoZS5nOiBwNTQpLCBzbyB0aGF0IGZyYW1lcyBjYW4gYmUgZGVsaXZlcmVkIHVuaW1wZWRlZC4KLQkJICoKLQkJICogTm90ZTogSXQgc2hvdWxkIGJlIHNhZmUgdG8gZGlzYWJsZSB0aGUgZmlsdGVyIG5vdy4KLQkJICogQXMsIGl0IGlzIHJlYWxseSB1bmxpa2VseSB0aGF0IHdlIHN0aWxsIGhhdmUgYW55IHBlbmRpbmcKLQkJICogZnJhbWUgZm9yIHRoaXMgc3RhdGlvbiBpbiB0aGUgaHcncyBidWZmZXJzL2ZpZm9zIGxlZnQsCi0JCSAqIHRoYXQgaXMgbm90IHJlamVjdGVkIHdpdGggYSB1bnN1Y2Nlc3NmdWwgdHhfc3RhdHVzIHlldC4KLQkJICovCiAKLQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9DTEVBUl9QU19GSUxUOwotCX0KIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKQEAgLTQ1MSw3ICs0MzUsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtPnNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4LT5za2ItPmRhdGE7CiAKLQlpZiAodW5saWtlbHkodHgtPnNrYi0+ZG9fbm90X2VuY3J5cHQpKQorCWlmICh1bmxpa2VseShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQpKQogCQl0eC0+a2V5ID0gTlVMTDsKIAllbHNlIGlmICh0eC0+c3RhICYmIChrZXkgPSByY3VfZGVyZWZlcmVuY2UodHgtPnN0YS0+a2V5KSkpCiAJCXR4LT5rZXkgPSBrZXk7CkBAIC00OTcsNyArNDgxLDcgQEAKIAl9CiAKIAlpZiAoIXR4LT5rZXkgfHwgISh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSkKLQkJdHgtPnNrYi0+ZG9fbm90X2VuY3J5cHQgPSAxOworCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwogCiAJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQpAQCAtNTEyLDYgKzQ5Niw3IEBACiAJaW50IGksIGxlbjsKIAlib29sIGludmFsID0gZmFsc2UsIHJ0cyA9IGZhbHNlLCBzaG9ydF9wcmVhbWJsZSA9IGZhbHNlOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sIHR4cmM7CisJdTMyIHN0YV9mbGFnczsKIAogCW1lbXNldCgmdHhyYywgMCwgc2l6ZW9mKHR4cmMpKTsKIApAQCAtNTQ0LDcgKzUyOSwyNiBAQAogCSAgICAgKHR4LT5zdGEgJiYgdGVzdF9zdGFfZmxhZ3ModHgtPnN0YSwgV0xBTl9TVEFfU0hPUlRfUFJFQU1CTEUpKSkpCiAJCXR4cmMuc2hvcnRfcHJlYW1ibGUgPSBzaG9ydF9wcmVhbWJsZSA9IHRydWU7CiAKKwlzdGFfZmxhZ3MgPSB0eC0+c3RhID8gZ2V0X3N0YV9mbGFncyh0eC0+c3RhKSA6IDA7CiAKKwkvKgorCSAqIExldHMgbm90IGJvdGhlciByYXRlIGNvbnRyb2wgaWYgd2UncmUgYXNzb2NpYXRlZCBhbmQgY2Fubm90CisJICogdGFsayB0byB0aGUgc3RhLiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLgorCSAqLworCWlmIChXQVJOKHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsICZ0eC0+bG9jYWwtPnNjYW5uaW5nKSAmJgorCQkgKHN0YV9mbGFncyAmIFdMQU5fU1RBX0FTU09DKSAmJgorCQkgIXJhdGVfdXNhYmxlX2luZGV4X2V4aXN0cyhzYmFuZCwgJnR4LT5zdGEtPnN0YSksCisJCSAiJXM6IERyb3BwZWQgZGF0YSBmcmFtZSBhcyBubyB1c2FibGUgYml0cmF0ZSBmb3VuZCB3aGlsZSAiCisJCSAic2Nhbm5pbmcgYW5kIGFzc29jaWF0ZWQuIFRhcmdldCBzdGF0aW9uOiAiCisJCSAiJXBNIG9uICVkIEdIeiBiYW5kXG4iLAorCQkgdHgtPmRldi0+bmFtZSwgaGRyLT5hZGRyMSwKKwkJIHR4LT5jaGFubmVsLT5iYW5kID8gNSA6IDIpKQorCQlyZXR1cm4gVFhfRFJPUDsKKworCS8qCisJICogSWYgd2UncmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGEgYXQgdGhpcyBwb2ludCB3ZSBrbm93IHdlIGNhbiBhdAorCSAqIGxlYXN0IHNlbmQgdGhlIGZyYW1lIGF0IHRoZSBsb3dlc3QgYml0IHJhdGUuCisJICovCiAJcmF0ZV9jb250cm9sX2dldF9yYXRlKHR4LT5zZGF0YSwgdHgtPnN0YSwgJnR4cmMpOwogCiAJaWYgKHVubGlrZWx5KGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4IDwgMCkpCkBAIC02NzYsNyArNjgwLDcgQEAKIAkgKiBudW1iZXIsIGlmIHdlIGhhdmUgbm8gbWF0Y2hpbmcgaW50ZXJmYWNlIHRoZW4gd2UKIAkgKiBuZWl0aGVyIGFzc2lnbiBvbmUgb3Vyc2VsdmVzIG5vciBhc2sgdGhlIGRyaXZlciB0by4KIAkgKi8KLQlpZiAodW5saWtlbHkoIWluZm8tPmNvbnRyb2wudmlmKSkKKwlpZiAodW5saWtlbHkoaW5mby0+Y29udHJvbC52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikpCiAJCXJldHVybiBUWF9DT05USU5VRTsKIAogCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfY3RsKGhkci0+ZnJhbWVfY29udHJvbCkpKQpAQCAtNjk2LDcgKzcwMCw2IEBACiAJCS8qIGZvciBwdXJlIFNUQSBtb2RlIHdpdGhvdXQgYmVhY29ucywgd2UgY2FuIGRvIGl0ICovCiAJCWhkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNih0eC0+c2RhdGEtPnNlcXVlbmNlX251bWJlcik7CiAJCXR4LT5zZGF0YS0+c2VxdWVuY2VfbnVtYmVyICs9IDB4MTA7Ci0JCXR4LT5zZGF0YS0+c2VxdWVuY2VfbnVtYmVyICY9IElFRUU4MDIxMV9TQ1RMX1NFUTsKIAkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCX0KIApAQCAtNzU0LDkgKzc1Nyw3IEBACiAJCW1lbWNweSh0bXAtPmNiLCBza2ItPmNiLCBzaXplb2YodG1wLT5jYikpOwogCQlza2JfY29weV9xdWV1ZV9tYXBwaW5nKHRtcCwgc2tiKTsKIAkJdG1wLT5wcmlvcml0eSA9IHNrYi0+cHJpb3JpdHk7Ci0JCXRtcC0+ZG9fbm90X2VuY3J5cHQgPSBza2ItPmRvX25vdF9lbmNyeXB0OwogCQl0bXAtPmRldiA9IHNrYi0+ZGV2OwotCQl0bXAtPmlpZiA9IHNrYi0+aWlmOwogCiAJCS8qIGNvcHkgaGVhZGVyIGFuZCBkYXRhICovCiAJCW1lbWNweShza2JfcHV0KHRtcCwgaGRybGVuKSwgc2tiLT5kYXRhLCBoZHJsZW4pOwpAQCAtNzg0LDcgKzc4NSw3IEBACiAKIAkvKgogCSAqIFdhcm4gd2hlbiBzdWJtaXR0aW5nIGEgZnJhZ21lbnRlZCBBLU1QRFUgZnJhbWUgYW5kIGRyb3AgaXQuCi0JICogVGhpcyBzY2VuYXJpbyBpcyBoYW5kbGVkIGluIF9faWVlZTgwMjExX3R4X3ByZXBhcmUgYnV0IGV4dHJhCisJICogVGhpcyBzY2VuYXJpbyBpcyBoYW5kbGVkIGluIGllZWU4MDIxMV90eF9wcmVwYXJlIGJ1dCBleHRyYQogCSAqIGNhdXRpb24gdGFrZW4gaGVyZSBhcyBmcmFnbWVudGVkIGFtcGR1IG1heSBjYXVzZSBUeCBzdG9wLgogCSAqLwogCWlmIChXQVJOX09OKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkpCkBAIC04NDIsNiArODQzLDIzIEBACiB9CiAKIHN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lCitpZWVlODAyMTFfdHhfaF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQoreworCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOworCisJaWYgKCF0eC0+c3RhKQorCQlyZXR1cm4gVFhfQ09OVElOVUU7CisKKwl0eC0+c3RhLT50eF9wYWNrZXRzKys7CisJZG8geworCQl0eC0+c3RhLT50eF9mcmFnbWVudHMrKzsKKwkJdHgtPnN0YS0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJfSB3aGlsZSAoKHNrYiA9IHNrYi0+bmV4dCkpOworCisJcmV0dXJuIFRYX0NPTlRJTlVFOworfQorCitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCWlmICghdHgtPmtleSkKQEAgLTg4NSwyMyArOTAzLDYgQEAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lCi1pZWVlODAyMTFfdHhfaF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQotewotCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOwotCi0JaWYgKCF0eC0+c3RhKQotCQlyZXR1cm4gVFhfQ09OVElOVUU7Ci0KLQl0eC0+c3RhLT50eF9wYWNrZXRzKys7Ci0JZG8gewotCQl0eC0+c3RhLT50eF9mcmFnbWVudHMrKzsKLQkJdHgtPnN0YS0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JfSB3aGlsZSAoKHNrYiA9IHNrYi0+bmV4dCkpOwotCi0JcmV0dXJuIFRYX0NPTlRJTlVFOwotfQotCiAvKiBhY3R1YWwgdHJhbnNtaXQgcGF0aCAqLwogCiAvKgpAQCAtOTIzLDExICs5MjQsMTIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcnRoZHIgPQogCQkoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKikgc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlpbnQgcmV0ID0gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX2luaXQoJml0ZXJhdG9yLCBydGhkciwgc2tiLT5sZW4pOwogCiAJc2JhbmQgPSB0eC0+bG9jYWwtPmh3LndpcGh5LT5iYW5kc1t0eC0+Y2hhbm5lbC0+YmFuZF07CiAKLQlza2ItPmRvX25vdF9lbmNyeXB0ID0gMTsKKwlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwogCXR4LT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0ZSQUdNRU5URUQ7CiAKIAkvKgpAQCAtOTY1LDcgKzk2Nyw3IEBACiAJCQkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIEZDU19MRU4pOwogCQkJfQogCQkJaWYgKCppdGVyYXRvci50aGlzX2FyZyAmIElFRUU4MDIxMV9SQURJT1RBUF9GX1dFUCkKLQkJCQl0eC0+c2tiLT5kb19ub3RfZW5jcnlwdCA9IDA7CisJCQkJaW5mby0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CiAJCQlpZiAoKml0ZXJhdG9yLnRoaXNfYXJnICYgSUVFRTgwMjExX1JBRElPVEFQX0ZfRlJBRykKIAkJCQl0eC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0ZSQUdNRU5URUQ7CiAJCQlicmVhazsKQEAgLTk5OCwxMyArMTAwMCwxMiBAQAogICogaW5pdGlhbGlzZXMgQHR4CiAgKi8KIHN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0Ci1fX2llZWU4MDIxMV90eF9wcmVwYXJlKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgsCi0JCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2llZWU4MDIxMV90eF9wcmVwYXJlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgsCisJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWludCBoZHJsZW4sIHRpZDsKIAl1OCAqcWMsICpzdGF0ZTsKQEAgLTEwMTIsOSArMTAxMyw5IEBACiAKIAltZW1zZXQodHgsIDAsIHNpemVvZigqdHgpKTsKIAl0eC0+c2tiID0gc2tiOwotCXR4LT5kZXYgPSBkZXY7IC8qIHVzZSBvcmlnaW5hbCBpbnRlcmZhY2UgKi8KKwl0eC0+ZGV2ID0gc2RhdGEtPmRldjsgLyogdXNlIG9yaWdpbmFsIGludGVyZmFjZSAqLwogCXR4LT5sb2NhbCA9IGxvY2FsOwotCXR4LT5zZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJdHgtPnNkYXRhID0gc2RhdGE7CiAJdHgtPmNoYW5uZWwgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsOwogCS8qCiAJICogU2V0IHRoaXMgZmxhZyAodXNlZCBiZWxvdyB0byBpbmRpY2F0ZSAiYXV0b21hdGljIGZyYWdtZW50YXRpb24iKSwKQEAgLTEwMjMsNyArMTAyNCw2IEBACiAJdHgtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEOwogCiAJLyogcHJvY2VzcyBhbmQgcmVtb3ZlIHRoZSBpbmplY3Rpb24gcmFkaW90YXAgaGVhZGVyICovCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCWlmICh1bmxpa2VseShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKSB7CiAJCWlmICghX19pZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAodHgsIHNrYikpCiAJCQlyZXR1cm4gVFhfRFJPUDsKQEAgLTEwNzUsNiArMTA3NSw3IEBACiAJCX0gZWxzZSBpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9JRExFKSB7CiAJCQkvKiBpbiBwcm9ncmVzcyAqLwogCQkJcXVldWVkID0gdHJ1ZTsKKwkJCWluZm8tPmNvbnRyb2wudmlmID0gJnNkYXRhLT52aWY7CiAJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfTkVFRF9UWFBST0NFU1NJTkc7CiAJCQlfX3NrYl9xdWV1ZV90YWlsKCZ0aWRfdHgtPnBlbmRpbmcsIHNrYik7CiAJCX0KQEAgLTExMTksNTAgKzExMjAsMjkgQEAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLS8qCi0gKiBOQjogQHR4IGlzIHVuaW5pdGlhbGlzZWQgd2hlbiBwYXNzZWQgaW4gaGVyZQotICovCi1zdGF0aWMgaW50IGllZWU4MDIxMV90eF9wcmVwYXJlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgsCi0JCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCi0JZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIHNrYi0+aWlmKTsKLQlpZiAodW5saWtlbHkoZGV2ICYmICFpc19pZWVlODAyMTFfZGV2aWNlKGxvY2FsLCBkZXYpKSkgewotCQlkZXZfcHV0KGRldik7Ci0JCWRldiA9IE5VTEw7Ci0JfQotCWlmICh1bmxpa2VseSghZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JLyoKLQkgKiBpbml0aWFsaXNlcyB0eCB3aXRoIGNvbnRyb2wKLQkgKgotCSAqIHJldHVybiB2YWx1ZSBpcyBzYWZlIHRvIGlnbm9yZSBoZXJlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbgotCSAqIGNhbiBvbmx5IGJlIGludm9rZWQgZm9yIG11bHRpY2FzdCBmcmFtZXMKLQkgKgotCSAqIFhYWDogY2xlYW4gdXAKLQkgKi8KLQlfX2llZWU4MDIxMV90eF9wcmVwYXJlKHR4LCBza2IsIGRldik7Ci0JZGV2X3B1dChkZXYpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IF9faWVlZTgwMjExX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnAsCi0JCQkgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQorCQkJICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKKwkJCSAgYm9vbCB0eHBlbmRpbmcpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpza2JwLCAqbmV4dDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0LCBsZW47CiAJYm9vbCBmcmFnbSA9IGZhbHNlOwogCi0JbG9jYWwtPm1kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQogCXdoaWxlIChza2IpIHsKLQkJaWYgKGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKCZsb2NhbC0+aHcsCi0JCQkJCSAgICBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSkpCi0JCQlyZXR1cm4gSUVFRTgwMjExX1RYX1BFTkRJTkc7CisJCWludCBxID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisJCXJldCA9IElFRUU4MDIxMV9UWF9PSzsKKwkJaWYgKGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcV0gfHwKKwkJICAgICghdHhwZW5kaW5nICYmICFza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW3FdKSkpCisJCQlyZXQgPSBJRUVFODAyMTFfVFhfUEVORElORzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKKwkJaWYgKHJldCAhPSBJRUVFODAyMTFfVFhfT0spCisJCQlyZXR1cm4gcmV0OwogCiAJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKQEAgLTExNzIsMTMgKzExNTIsMzUgQEAKIAogCQluZXh0ID0gc2tiLT5uZXh0OwogCQlsZW4gPSBza2ItPmxlbjsKKworCQlpZiAobmV4dCkKKwkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfTU9SRV9GUkFNRVM7CisKKwkJc2RhdGEgPSB2aWZfdG9fc2RhdGEoaW5mby0+Y29udHJvbC52aWYpOworCisJCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKKwkJCWluZm8tPmNvbnRyb2wudmlmID0gTlVMTDsKKwkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46CisJCQlpbmZvLT5jb250cm9sLnZpZiA9ICZjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1LmFwKS0+dmlmOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBrZWVwICovCisJCQlicmVhazsKKwkJfQorCiAJCXJldCA9IGRydl90eChsb2NhbCwgc2tiKTsKIAkJaWYgKFdBUk5fT04ocmV0ICE9IE5FVERFVl9UWF9PSyAmJiBza2ItPmxlbiAhPSBsZW4pKSB7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXQgPSBORVRERVZfVFhfT0s7CiAJCX0KLQkJaWYgKHJldCAhPSBORVRERVZfVFhfT0spCisJCWlmIChyZXQgIT0gTkVUREVWX1RYX09LKSB7CisJCQlpbmZvLT5jb250cm9sLnZpZiA9ICZzZGF0YS0+dmlmOwogCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9BR0FJTjsKKwkJfQorCiAJCSpza2JwID0gc2tiID0gbmV4dDsKIAkJaWVlZTgwMjExX2xlZF90eChsb2NhbCwgMSk7CiAJCWZyYWdtID0gdHJ1ZTsKQEAgLTEyMTAsOSArMTIxMiw5IEBACiAJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc2VxdWVuY2UpCiAJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfZnJhZ21lbnQpCiAJLyogaGFuZGxlcnMgYWZ0ZXIgZnJhZ21lbnQgbXVzdCBiZSBhd2FyZSBvZiB0eCBpbmZvIGZyYWdtZW50YXRpb24hICovCisJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc3RhdHMpCiAJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfZW5jcnlwdCkKIAlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jYWxjdWxhdGVfZHVyYXRpb24pCi0JQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc3RhdHMpCiAjdW5kZWYgQ0FMTF9UWEgKIAogIHR4aF9kb25lOgpAQCAtMTIzNCwxMCArMTIzNiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSBib29sIHR4cGVuZGluZykKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHR4cGVuZGluZykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSB0eDsKIAlpZWVlODAyMTFfdHhfcmVzdWx0IHJlc19wcmVwYXJlOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKQEAgLTEyNDgsOCArMTI1MCw2IEBACiAKIAlxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCi0JV0FSTl9PTighdHhwZW5kaW5nICYmICFza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSkpOwotCiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgMTApKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwpAQCAtMTI1OCw3ICsxMjU4LDcgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAkvKiBpbml0aWFsaXNlcyB0eCAqLwotCXJlc19wcmVwYXJlID0gX19pZWVlODAyMTFfdHhfcHJlcGFyZSgmdHgsIHNrYiwgZGV2KTsKKwlyZXNfcHJlcGFyZSA9IGllZWU4MDIxMV90eF9wcmVwYXJlKHNkYXRhLCAmdHgsIHNrYik7CiAKIAlpZiAodW5saWtlbHkocmVzX3ByZXBhcmUgPT0gVFhfRFJPUCkpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMTI3Nyw3ICsxMjc3LDcgQEAKIAogCXJldHJpZXMgPSAwOwogIHJldHJ5OgotCXJldCA9IF9faWVlZTgwMjExX3R4KGxvY2FsLCAmdHguc2tiLCB0eC5zdGEpOworCXJldCA9IF9faWVlZTgwMjExX3R4KGxvY2FsLCAmdHguc2tiLCB0eC5zdGEsIHR4cGVuZGluZyk7CiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIElFRUU4MDIxMV9UWF9PSzoKIAkJYnJlYWs7CkBAIC0xMjk1LDM0ICsxMjk1LDM1IEBACiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CiAKLQkJaWYgKF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgcXVldWUpKSB7CisJCWlmIChsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSB8fAorCQkgICAgIXNrYl9xdWV1ZV9lbXB0eSgmbG9jYWwtPnBlbmRpbmdbcXVldWVdKSkgeworCQkJLyoKKwkJCSAqIGlmIHF1ZXVlIGlzIHN0b3BwZWQsIHF1ZXVlIHVwIGZyYW1lcyBmb3IgbGF0ZXIKKwkJCSAqIHRyYW5zbWlzc2lvbiBmcm9tIHRoZSB0YXNrbGV0CisJCQkgKi8KIAkJCWRvIHsKIAkJCQluZXh0ID0gc2tiLT5uZXh0OwogCQkJCXNrYi0+bmV4dCA9IE5VTEw7CiAJCQkJaWYgKHVubGlrZWx5KHR4cGVuZGluZykpCi0JCQkJCXNrYl9xdWV1ZV9oZWFkKCZsb2NhbC0+cGVuZGluZ1txdWV1ZV0sCi0JCQkJCQkgICAgICAgc2tiKTsKKwkJCQkJX19za2JfcXVldWVfaGVhZCgmbG9jYWwtPnBlbmRpbmdbcXVldWVdLAorCQkJCQkJCSBza2IpOwogCQkJCWVsc2UKLQkJCQkJc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSwKLQkJCQkJCSAgICAgICBza2IpOworCQkJCQlfX3NrYl9xdWV1ZV90YWlsKCZsb2NhbC0+cGVuZGluZ1txdWV1ZV0sCisJCQkJCQkJIHNrYik7CiAJCQl9IHdoaWxlICgoc2tiID0gbmV4dCkpOwogCi0JCQkvKgotCQkJICogTWFrZSBzdXJlIG5vYm9keSB3aWxsIGVuYWJsZSB0aGUgcXVldWUgb24gdXMKLQkJCSAqICh3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIHRhc2tsZXQpIG5vciBkaXNhYmxlIHRoZQotCQkJICogbmV0ZGV2IHF1ZXVlIHVuZGVybmVhdGggdGhlIHBlbmRpbmcgaGFuZGxpbmcgY29kZS4KLQkJCSAqLwotCQkJX19zZXRfYml0KElFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HLAotCQkJCSAgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKLQogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssCiAJCQkJCSAgICAgICBmbGFncyk7CiAJCX0gZWxzZSB7CisJCQkvKgorCQkJICogb3RoZXJ3aXNlIHJldHJ5LCBidXQgdGhpcyBpcyBhIHJhY2UgY29uZGl0aW9uIG9yCisJCQkgKiBhIGRyaXZlciBidWcgKHdoaWNoIHdlIHdhcm4gYWJvdXQgaWYgaXQgcGVyc2lzdHMpCisJCQkgKi8KIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLAogCQkJCQkgICAgICAgZmxhZ3MpOwogCiAJCQlyZXRyaWVzKys7Ci0JCQlpZiAoV0FSTihyZXRyaWVzID4gMTAsICJ0eCByZWZ1c2VkIGJ1dCBxdWV1ZSBhY3RpdmUiKSkKKwkJCWlmIChXQVJOKHJldHJpZXMgPiAxMCwgInR4IHJlZnVzZWQgYnV0IHF1ZXVlIGFjdGl2ZVxuIikpCiAJCQkJZ290byBkcm9wOwogCQkJZ290byByZXRyeTsKIAkJfQpAQCAtMTM4Myw0NCArMTM4NCwyNSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaWVlZTgwMjExX21hc3Rlcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiAqbXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gbXByaXYtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqb3NkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnRtcF9zZGF0YTsKIAlpbnQgaGVhZHJvb207CiAJYm9vbCBtYXlfZW5jcnlwdDsKLQllbnVtIHsKLQkJTk9UX01PTklUT1IsCi0JCUZPVU5EX1NEQVRBLAotCQlVTktOT1dOX0FERFJFU1MsCi0JfSBtb25pdG9yX2lmYWNlID0gTk9UX01PTklUT1I7CiAKLQlpZiAoc2tiLT5paWYpCi0JCW9kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgc2tiLT5paWYpOwotCWlmICh1bmxpa2VseShvZGV2ICYmICFpc19pZWVlODAyMTFfZGV2aWNlKGxvY2FsLCBvZGV2KSkpIHsKLQkJZGV2X3B1dChvZGV2KTsKLQkJb2RldiA9IE5VTEw7Ci0JfQotCWlmICh1bmxpa2VseSghb2RldikpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IERpc2NhcmRlZCBwYWNrZXQgd2l0aCBub25leGlzdGVudCAiCi0JCSAgICAgICAib3JpZ2luYXRpbmcgZGV2aWNlXG4iLCBkZXYtPm5hbWUpOwotI2VuZGlmCi0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQl9CisJZGV2X2hvbGQoc2RhdGEtPmRldik7CiAKIAlpZiAoKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykgJiYKIAkgICAgbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID4gMCAmJgotCSAgICAhbG9jYWwtPnN3X3NjYW5uaW5nICYmICFsb2NhbC0+aHdfc2Nhbm5pbmcgJiYgbG9jYWwtPnBzX3NkYXRhKSB7CisJICAgICEobG9jYWwtPnNjYW5uaW5nKSAmJiBsb2NhbC0+cHNfc2RhdGEpIHsKIAkJaWYgKGxvY2FsLT5ody5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpIHsKIAkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJmxvY2FsLT5odywKIAkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BTKTsKLQkJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsCiAJCQkJCSZsb2NhbC0+ZHluYW1pY19wc19kaXNhYmxlX3dvcmspOwogCQl9CiAKQEAgLTE0MjgsMzEgKzE0MTAsMTMgQEAKIAkJICAgICAgICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCkpOwogCX0KIAotCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQogCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKIAotCW9zZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKG9kZXYpOwotCi0JaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmb3NkYXRhLT52aWYpICYmCi0JICAgIGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjMpKQotCQkJbWVtY3B5KGhkci0+YWRkcjEsIGhkci0+YWRkcjMsIEVUSF9BTEVOKTsKLQkJZWxzZQotCQkJaWYgKG1lc2hfbmV4dGhvcF9sb29rdXAoc2tiLCBvc2RhdGEpKSB7Ci0JCQkJZGV2X3B1dChvZGV2KTsKLQkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwotCQkJfQotCQlpZiAobWVtY21wKG9kZXYtPmRldl9hZGRyLCBoZHItPmFkZHI0LCBFVEhfQUxFTikgIT0gMCkKLQkJCUlFRUU4MDIxMV9JRlNUQV9NRVNIX0NUUl9JTkMoJm9zZGF0YS0+dS5tZXNoLAotCQkJCQkJCSAgICBmd2RlZF9mcmFtZXMpOwotCX0gZWxzZSBpZiAodW5saWtlbHkob3NkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlpZiAodW5saWtlbHkoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpKSB7CiAJCWludCBoZHJsZW47CiAJCXUxNiBsZW5fcnRoZHI7CiAKIAkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRDsKLQkJbW9uaXRvcl9pZmFjZSA9IFVOS05PV05fQUREUkVTUzsKIAogCQlsZW5fcnRoZHIgPSBpZWVlODAyMTFfZ2V0X3JhZGlvdGFwX2xlbihza2ItPmRhdGEpOwogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoc2tiLT5kYXRhICsgbGVuX3J0aGRyKTsKQEAgLTE0NzEsMjAgKzE0MzUsMTcgQEAKIAkJCSAqLwogCiAJCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLAorCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wX3NkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsCiAJCQkJCQlsaXN0KSB7Ci0JCQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJCWlmICghbmV0aWZfcnVubmluZyh0bXBfc2RhdGEtPmRldikpCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCQkJaWYgKHRtcF9zZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPmRldi0+ZGV2X2FkZHIsCisJCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcih0bXBfc2RhdGEtPmRldi0+ZGV2X2FkZHIsCiAJCQkJCQkgICAgICAgaGRyLT5hZGRyMikpIHsKLQkJCQkJZGV2X2hvbGQoc2RhdGEtPmRldik7Ci0JCQkJCWRldl9wdXQob2Rldik7Ci0JCQkJCW9zZGF0YSA9IHNkYXRhOwotCQkJCQlvZGV2ID0gb3NkYXRhLT5kZXY7Ci0JCQkJCXNrYi0+aWlmID0gc2RhdGEtPmRldi0+aWZpbmRleDsKLQkJCQkJbW9uaXRvcl9pZmFjZSA9IEZPVU5EX1NEQVRBOworCQkJCQlkZXZfaG9sZCh0bXBfc2RhdGEtPmRldik7CisJCQkJCWRldl9wdXQoc2RhdGEtPmRldik7CisJCQkJCXNkYXRhID0gdG1wX3NkYXRhOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC0xNDkyLDQwICsxNDUzLDQ0IEBACiAJCX0KIAl9CiAKLQltYXlfZW5jcnlwdCA9ICFza2ItPmRvX25vdF9lbmNyeXB0OworCW1heV9lbmNyeXB0ID0gIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQpOwogCi0JaGVhZHJvb20gPSBvc2RhdGEtPmxvY2FsLT50eF9oZWFkcm9vbTsKKwloZWFkcm9vbSA9IGxvY2FsLT50eF9oZWFkcm9vbTsKIAlpZiAobWF5X2VuY3J5cHQpCiAJCWhlYWRyb29tICs9IElFRUU4MDIxMV9FTkNSWVBUX0hFQURST09NOwogCWhlYWRyb29tIC09IHNrYl9oZWFkcm9vbShza2IpOwogCWhlYWRyb29tID0gbWF4X3QoaW50LCAwLCBoZWFkcm9vbSk7CiAKLQlpZiAoaWVlZTgwMjExX3NrYl9yZXNpemUob3NkYXRhLT5sb2NhbCwgc2tiLCBoZWFkcm9vbSwgbWF5X2VuY3J5cHQpKSB7CisJaWYgKGllZWU4MDIxMV9za2JfcmVzaXplKGxvY2FsLCBza2IsIGhlYWRyb29tLCBtYXlfZW5jcnlwdCkpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlkZXZfcHV0KG9kZXYpOwotCQlyZXR1cm4gTkVUREVWX1RYX09LOworCQlkZXZfcHV0KHNkYXRhLT5kZXYpOworCQlyZXR1cm47CiAJfQogCi0JaWYgKG9zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKLQkJb3NkYXRhID0gY29udGFpbmVyX29mKG9zZGF0YS0+YnNzLAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCi0JCQkJICAgICAgdS5hcCk7Ci0JaWYgKGxpa2VseShtb25pdG9yX2lmYWNlICE9IFVOS05PV05fQUREUkVTUykpCi0JCWluZm8tPmNvbnRyb2wudmlmID0gJm9zZGF0YS0+dmlmOworCWluZm8tPmNvbnRyb2wudmlmID0gJnNkYXRhLT52aWY7CiAKLQlpZWVlODAyMTFfdHgob2Rldiwgc2tiLCBmYWxzZSk7Ci0JZGV2X3B1dChvZGV2KTsKKwlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSAmJgorCSAgICBpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCSFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwkJCWlmIChtZXNoX25leHRob3BfbG9va3VwKHNrYiwgc2RhdGEpKSB7CisJCQkJLyogc2tiIHF1ZXVlZDogZG9uJ3QgZnJlZSAqLworCQkJCWRldl9wdXQoc2RhdGEtPmRldik7CisJCQkJcmV0dXJuOworCQkJfQogCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKKwlpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKGxvY2FsLCBza2IpOworCWllZWU4MDIxMV90eChzZGF0YSwgc2tiLCBmYWxzZSk7CisJZGV2X3B1dChzZGF0YS0+ZGV2KTsKIH0KIAotaW50IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsOwogCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpwcnRoZHIgPQogCQkoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKilza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXUxNiBsZW5fcnRoZHI7CiAKIAkvKgpAQCAtMTU2MywxNSArMTUyOCw2IEBACiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgbGVuX3J0aGRyKSkKIAkJZ290byBmYWlsOyAvKiBza2IgdG9vIHNob3J0IGZvciBjbGFpbWVkIHJ0IGhlYWRlciBleHRlbnQgKi8KIAotCXNrYi0+ZGV2ID0gbG9jYWwtPm1kZXY7Ci0KLQkvKiBuZWVkZWQgYmVjYXVzZSB3ZSBzZXQgc2tiIGRldmljZSB0byBtYXN0ZXIgKi8KLQlza2ItPmlpZiA9IGRldi0+aWZpbmRleDsKLQotCS8qIHNvbWV0aW1lcyB3ZSBkbyBlbmNyeXB0IGluamVjdGVkIGZyYW1lcywgd2lsbCBiZSBmaXhlZAotCSAqIHVwIGluIHJhZGlvdGFwIHBhcnNlciBpZiBub3Qgd2FudGVkICovCi0Jc2tiLT5kb19ub3RfZW5jcnlwdCA9IDA7Ci0KIAkvKgogCSAqIGZpeCB1cCB0aGUgcG9pbnRlcnMgYWNjb3VudGluZyBmb3IgdGhlIHJhZGlvdGFwCiAJICogaGVhZGVyIHN0aWxsIGJlaW5nIGluIHRoZXJlLiAgV2UgYXJlIGJlaW5nIGdpdmVuCkBAIC0xNTg2LDggKzE1NDIsMTAgQEAKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgbGVuX3J0aGRyKTsKIAlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBsZW5fcnRoZHIpOwogCi0JLyogcGFzcyB0aGUgcmFkaW90YXAgaGVhZGVyIHVwIHRvIHRoZSBuZXh0IHN0YWdlIGludGFjdCAqLwotCWRldl9xdWV1ZV94bWl0KHNrYik7CisJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOworCisJLyogcGFzcyB0aGUgcmFkaW90YXAgaGVhZGVyIHVwIHRvIHhtaXQgKi8KKwlpZWVlODAyMTFfeG1pdChJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpLCBza2IpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGZhaWw6CkBAIC0xNjEwLDExICsxNTY4LDEyIEBACiAgKiBlbmNhcHN1bGF0ZWQgcGFja2V0IHdpbGwgdGhlbiBiZSBwYXNzZWQgdG8gbWFzdGVyIGludGVyZmFjZSwgd2xhbiMuMTEsIGZvcgogICogdHJhbnNtaXNzaW9uICh0aHJvdWdoIGxvdy1sZXZlbCBkcml2ZXIpLgogICovCi1pbnQgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWludCByZXQgPSBORVRERVZfVFhfQlVTWSwgaGVhZF9uZWVkOwogCXUxNiBldGhlcnR5cGUsIGhkcmxlbiwgIG1lc2hoZHJsZW4gPSAwOwogCV9fbGUxNiBmYzsKQEAgLTE2MjcsNyArMTU4Niw3IEBACiAJdTMyIHN0YV9mbGFncyA9IDA7CiAKIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCBFVEhfSExFTikpIHsKLQkJcmV0ID0gMDsKKwkJcmV0ID0gTkVUREVWX1RYX09LOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC0xNjYwLDUyICsxNjE5LDU4IEBACiAJCWJyZWFrOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgotCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMgfCBJRUVFODAyMTFfRkNUTF9UT0RTKTsKIAkJaWYgKCFzZGF0YS0+dS5tZXNoLm1zaGNmZy5kb3QxMU1lc2hUVEwpIHsKIAkJCS8qIERvIG5vdCBzZW5kIGZyYW1lcyB3aXRoIG1lc2hfdHRsID09IDAgKi8KIAkJCXNkYXRhLT51Lm1lc2gubXNoc3RhdHMuZHJvcHBlZF9mcmFtZXNfdHRsKys7Ci0JCQlyZXQgPSAwOworCQkJcmV0ID0gTkVUREVWX1RYX09LOwogCQkJZ290byBmYWlsOwogCQl9Ci0JCW1lbXNldCgmbWVzaF9oZHIsIDAsIHNpemVvZihtZXNoX2hkcikpOwogCiAJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkciwKIAkJCQkJICBza2ItPmRhdGEgKyBFVEhfQUxFTikgPT0gMCkgewotCQkJLyogUkEgVEEgREEgU0EgKi8KLQkJCW1lbXNldChoZHIuYWRkcjEsIDAsIEVUSF9BTEVOKTsKLQkJCW1lbWNweShoZHIuYWRkcjIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQkJCW1lbWNweShoZHIuYWRkcjMsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwotCQkJbWVtY3B5KGhkci5hZGRyNCwgc2tiLT5kYXRhICsgRVRIX0FMRU4sIEVUSF9BTEVOKTsKLQkJCW1lc2hoZHJsZW4gPSBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKCZtZXNoX2hkciwgc2RhdGEpOworCQkJaGRybGVuID0gaWVlZTgwMjExX2ZpbGxfbWVzaF9hZGRyZXNzZXMoJmhkciwgJmZjLAorCQkJCQlza2ItPmRhdGEsIHNrYi0+ZGF0YSArIEVUSF9BTEVOKTsKKwkJCW1lc2hoZHJsZW4gPSBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKCZtZXNoX2hkciwKKwkJCQkJc2RhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOwogCQl9IGVsc2UgewogCQkJLyogcGFja2V0IGZyb20gb3RoZXIgaW50ZXJmYWNlICovCiAJCQlzdHJ1Y3QgbWVzaF9wYXRoICptcHBhdGg7CisJCQlpbnQgaXNfbWVzaF9tY2FzdCA9IDE7CisJCQljaGFyICptZXNoX2RhOwogCi0JCQltZW1zZXQoaGRyLmFkZHIxLCAwLCBFVEhfQUxFTik7Ci0JCQltZW1jcHkoaGRyLmFkZHIyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JCQltZW1jcHkoaGRyLmFkZHI0LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0KKwkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihza2ItPmRhdGEpKQotCQkJCW1lbWNweShoZHIuYWRkcjMsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOworCQkJCS8qIERBIFRBIG1TQSBBRTpTQSAqLworCQkJCW1lc2hfZGEgPSBza2ItPmRhdGE7CiAJCQllbHNlIHsKLQkJCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQkJbXBwYXRoID0gbXBwX3BhdGhfbG9va3VwKHNrYi0+ZGF0YSwgc2RhdGEpOwotCQkJCWlmIChtcHBhdGgpCi0JCQkJCW1lbWNweShoZHIuYWRkcjMsIG1wcGF0aC0+bXBwLCBFVEhfQUxFTik7Ci0JCQkJZWxzZQotCQkJCQltZW1zZXQoaGRyLmFkZHIzLCAweGZmLCBFVEhfQUxFTik7Ci0JCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJaWYgKG1wcGF0aCkgeworCQkJCQkvKiBSQSBUQSBtREEgbVNBIEFFOkRBIFNBICovCisJCQkJCW1lc2hfZGEgPSBtcHBhdGgtPm1wcDsKKwkJCQkJaXNfbWVzaF9tY2FzdCA9IDA7CisJCQkJfSBlbHNlCisJCQkJCS8qIERBIFRBIG1TQSBBRTpTQSAqLworCQkJCQltZXNoX2RhID0gZGV2LT5icm9hZGNhc3Q7CiAJCQl9CisJCQloZHJsZW4gPSBpZWVlODAyMTFfZmlsbF9tZXNoX2FkZHJlc3NlcygmaGRyLCAmZmMsCisJCQkJCW1lc2hfZGEsIGRldi0+ZGV2X2FkZHIpOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlpZiAoaXNfbWVzaF9tY2FzdCkKKwkJCQltZXNoaGRybGVuID0KKwkJCQkJaWVlZTgwMjExX25ld19tZXNoX2hlYWRlcigmbWVzaF9oZHIsCisJCQkJCQkJc2RhdGEsCisJCQkJCQkJc2tiLT5kYXRhICsgRVRIX0FMRU4sCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKwkJCWVsc2UKKwkJCQltZXNoaGRybGVuID0KKwkJCQkJaWVlZTgwMjExX25ld19tZXNoX2hlYWRlcigmbWVzaF9oZHIsCisJCQkJCQkJc2RhdGEsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlza2ItPmRhdGEsCisJCQkJCQkJc2tiLT5kYXRhICsgRVRIX0FMRU4pOwogCi0JCQltZXNoX2hkci5mbGFncyB8PSBNRVNIX0ZMQUdTX0FFX0E1X0E2OwotCQkJbWVzaF9oZHIudHRsID0gc2RhdGEtPnUubWVzaC5tc2hjZmcuZG90MTFNZXNoVFRMOwotCQkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMihzZGF0YS0+dS5tZXNoLm1lc2hfc2VxbnVtKSwgJm1lc2hfaGRyLnNlcW51bSk7Ci0JCQltZW1jcHkobWVzaF9oZHIuZWFkZHIxLCBza2ItPmRhdGEsIEVUSF9BTEVOKTsKLQkJCW1lbWNweShtZXNoX2hkci5lYWRkcjIsIHNrYi0+ZGF0YSArIEVUSF9BTEVOLCBFVEhfQUxFTik7Ci0JCQlzZGF0YS0+dS5tZXNoLm1lc2hfc2VxbnVtKys7Ci0JCQltZXNoaGRybGVuID0gMTg7CiAJCX0KLQkJaGRybGVuID0gMzA7CiAJCWJyZWFrOwogI2VuZGlmCiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgpAQCAtMTcyNCw3ICsxNjg5LDcgQEAKIAkJaGRybGVuID0gMjQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldCA9IDA7CisJCXJldCA9IE5FVERFVl9UWF9PSzsKIAkJZ290byBmYWlsOwogCX0KIApAQCAtMTc2Niw3ICsxNzMxLDcgQEAKIAogCQlJODAyX0RFQlVHX0lOQyhsb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF91bmF1dGhfcG9ydCk7CiAKLQkJcmV0ID0gMDsKKwkJcmV0ID0gTkVUREVWX1RYX09LOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC0xODQyLDkgKzE4MDcsNiBAQAogCW5oX3BvcyArPSBoZHJsZW47CiAJaF9wb3MgKz0gaGRybGVuOwogCi0Jc2tiLT5paWYgPSBkZXYtPmlmaW5kZXg7Ci0KLQlza2ItPmRldiA9IGxvY2FsLT5tZGV2OwogCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKQEAgLTE4NTUsMTMgKzE4MTcsMTUgQEAKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgbmhfcG9zKTsKIAlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBoX3Bvcyk7CiAKLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlkZXZfcXVldWVfeG1pdChza2IpOworCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKIAotCXJldHVybiAwOworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWllZWU4MDIxMV94bWl0KHNkYXRhLCBza2IpOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogIGZhaWw6Ci0JaWYgKCFyZXQpCisJaWYgKHJldCA9PSBORVRERVZfVFhfT0spCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCXJldHVybiByZXQ7CkBAIC0xODg3LDEwMSArMTg1MSw3NCBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlpbnQgcmV0OwogCWJvb2wgcmVzdWx0ID0gdHJ1ZTsKIAotCS8qIGRvZXMgaW50ZXJmYWNlIHN0aWxsIGV4aXN0PyAqLwotCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBza2ItPmlpZik7Ci0JaWYgKCFkZXYpIHsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKiB2YWxpZGF0ZSBpbmZvLT5jb250cm9sLnZpZiBhZ2FpbnN0IHNrYi0+aWlmICovCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKLQkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCi0JCQkJICAgICB1LmFwKTsKLQotCWlmICh1bmxpa2VseShpbmZvLT5jb250cm9sLnZpZiAmJiBpbmZvLT5jb250cm9sLnZpZiAhPSAmc2RhdGEtPnZpZikpIHsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXN1bHQgPSB0cnVlOwotCQlnb3RvIG91dDsKLQl9CisJc2RhdGEgPSB2aWZfdG9fc2RhdGEoaW5mby0+Y29udHJvbC52aWYpOwogCiAJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HKSB7Ci0JCWllZWU4MDIxMV90eChkZXYsIHNrYiwgdHJ1ZSk7CisJCWllZWU4MDIxMV90eChzZGF0YSwgc2tiLCB0cnVlKTsKIAl9IGVsc2UgewogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7CiAKLQkJcmV0ID0gX19pZWVlODAyMTFfdHgobG9jYWwsICZza2IsIHN0YSk7CisJCXJldCA9IF9faWVlZTgwMjExX3R4KGxvY2FsLCAmc2tiLCBzdGEsIHRydWUpOwogCQlpZiAocmV0ICE9IElFRUU4MDIxMV9UWF9PSykKIAkJCXJlc3VsdCA9IGZhbHNlOwogCX0KIAotIG91dDoKLQlkZXZfcHV0KGRldik7Ci0KIAlyZXR1cm4gcmVzdWx0OwogfQogCiAvKgotICogVHJhbnNtaXQgYWxsIHBlbmRpbmcgcGFja2V0cy4gQ2FsbGVkIGZyb20gdGFza2xldCwgbG9ja3MgbWFzdGVyIGRldmljZQotICogVFggbG9jayBzbyB0aGF0IG5vIG5ldyBwYWNrZXRzIGNhbiBjb21lIGluLgorICogVHJhbnNtaXQgYWxsIHBlbmRpbmcgcGFja2V0cy4gQ2FsbGVkIGZyb20gdGFza2xldC4KICAqLwogdm9pZCBpZWVlODAyMTFfdHhfcGVuZGluZyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSAoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqKWRhdGE7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5tZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7Ci0JYm9vbCBuZXh0OworCWJvb2wgdHhvazsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQluZXRpZl90eF9sb2NrX2JoKGRldik7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbG9jYWwtPmh3LnF1ZXVlczsgaSsrKSB7CiAJCS8qCiAJCSAqIElmIHF1ZXVlIGlzIHN0b3BwZWQgYnkgc29tZXRoaW5nIG90aGVyIHRoYW4gZHVlIHRvIHBlbmRpbmcKIAkJICogZnJhbWVzLCBvciB3ZSBoYXZlIG5vIHBlbmRpbmcgZnJhbWVzLCBwcm9jZWVkIHRvIG5leHQgcXVldWUuCiAJCSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKLQkJbmV4dCA9IGZhbHNlOwotCQlpZiAobG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1tpXSAhPQotCQkJQklUKElFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HKSB8fAorCQlpZiAobG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1tpXSB8fAogCQkgICAgc2tiX3F1ZXVlX2VtcHR5KCZsb2NhbC0+cGVuZGluZ1tpXSkpCi0JCQluZXh0ID0gdHJ1ZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKLQotCQlpZiAobmV4dCkKIAkJCWNvbnRpbnVlOwogCi0JCS8qCi0JCSAqIHN0YXJ0IHRoZSBxdWV1ZSBub3cgdG8gYWxsb3cgcHJvY2Vzc2luZyBvdXIgcGFja2V0cywKLQkJICogd2UncmUgdW5kZXIgdGhlIHR4IGxvY2sgaGVyZSBhbnl3YXkgc28gbm90aGluZyB3aWxsCi0JCSAqIGhhcHBlbiBhcyBhIHJlc3VsdCBvZiB0aGlzCi0JCSAqLwotCQluZXRpZl9zdGFydF9zdWJxdWV1ZShsb2NhbC0+bWRldiwgaSk7Ci0KIAkJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW2ldKSkgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kZXF1ZXVlKCZsb2NhbC0+cGVuZGluZ1tpXSk7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZSgmbG9jYWwtPnBlbmRpbmdbaV0pOworCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCQkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAKLQkJCWlmICghaWVlZTgwMjExX3R4X3BlbmRpbmdfc2tiKGxvY2FsLCBza2IpKSB7Ci0JCQkJc2tiX3F1ZXVlX2hlYWQoJmxvY2FsLT5wZW5kaW5nW2ldLCBza2IpOwotCQkJCWJyZWFrOworCQkJaWYgKFdBUk5fT04oIWluZm8tPmNvbnRyb2wudmlmKSkgeworCQkJCWtmcmVlX3NrYihza2IpOworCQkJCWNvbnRpbnVlOwogCQkJfQorCisJCQlzZGF0YSA9IHZpZl90b19zZGF0YShpbmZvLT5jb250cm9sLnZpZik7CisJCQlkZXZfaG9sZChzZGF0YS0+ZGV2KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLAorCQkJCQkJZmxhZ3MpOworCisJCQl0eG9rID0gaWVlZTgwMjExX3R4X3BlbmRpbmdfc2tiKGxvY2FsLCBza2IpOworCQkJZGV2X3B1dChzZGF0YS0+ZGV2KTsKKwkJCWlmICghdHhvaykKKwkJCQlfX3NrYl9xdWV1ZV9oZWFkKCZsb2NhbC0+cGVuZGluZ1tpXSwgc2tiKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywKKwkJCQkJICBmbGFncyk7CisJCQlpZiAoIXR4b2spCisJCQkJYnJlYWs7CiAJCX0KLQotCQkvKiBTdGFydCByZWd1bGFyIHBhY2tldCBwcm9jZXNzaW5nIGFnYWluLiAqLwotCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZsb2NhbC0+cGVuZGluZ1tpXSkpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oJmxvY2FsLT5odywgaSwKLQkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BFTkRJTkcpOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwogCi0JbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTIxNTYsOCArMjA5Myw3IEBACiAKIAlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCi0Jc2tiLT5kb19ub3RfZW5jcnlwdCA9IDE7Ci0KKwlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwogCWluZm8tPmJhbmQgPSBiYW5kOwogCS8qCiAJICogWFhYOiBGb3Igbm93LCBhbHdheXMgdXNlIHRoZSBsb3dlc3QgcmF0ZQpAQCAtMjIyOCw5ICsyMTY0LDYgQEAKIAlzZGF0YSA9IHZpZl90b19zZGF0YSh2aWYpOwogCWJzcyA9ICZzZGF0YS0+dS5hcDsKIAotCWlmICghYnNzKQotCQlyZXR1cm4gTlVMTDsKLQogCXJjdV9yZWFkX2xvY2soKTsKIAliZWFjb24gPSByY3VfZGVyZWZlcmVuY2UoYnNzLT5iZWFjb24pOwogCkBAIC0yMjU2LDcgKzIxODksNyBAQAogCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsKIAkJfQogCi0JCWlmICghaWVlZTgwMjExX3R4X3ByZXBhcmUobG9jYWwsICZ0eCwgc2tiKSkKKwkJaWYgKCFpZWVlODAyMTFfdHhfcHJlcGFyZShzZGF0YSwgJnR4LCBza2IpKQogCQkJYnJlYWs7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJfQpAQCAtMjI3NiwzICsyMjA5LDI0IEBACiAJcmV0dXJuIHNrYjsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyk7CisKK3ZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgaW50IGVuY3J5cHQpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIDApOworCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAwKTsKKwlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCAwKTsKKworCWlmICghZW5jcnlwdCkKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDsKKworCS8qCisJICogVGhlIG90aGVyIHBhdGggY2FsbGluZyBpZWVlODAyMTFfeG1pdCBpcyBmcm9tIHRoZSB0YXNrbGV0LAorCSAqIGFuZCB3aGlsZSB3ZSBjYW4gaGFuZGxlIGNvbmN1cnJlbnQgdHJhbnNtaXNzaW9ucyBsb2NraW5nCisJICogcmVxdWlyZW1lbnRzIGFyZSB0aGF0IHdlIGRvIG5vdCBjb21lIGludG8gdHggd2l0aCBiaHMgb24uCisJICovCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWllZWU4MDIxMV94bWl0KHNkYXRhLCBza2IpOworCWxvY2FsX2JoX2VuYWJsZSgpOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggOTE1ZTc3Ny4uZGQ2NTY0MyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAibWVzaC5oIgogI2luY2x1ZGUgIndtZS5oIgogI2luY2x1ZGUgImxlZC5oIgorI2luY2x1ZGUgIndlcC5oIgogCiAvKiBwcml2aWQgZm9yIHdpcGh5cyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGV5IGJlbG9uZyB0byB1cyBvciBub3QgKi8KIHZvaWQgKm1hYzgwMjExX3dpcGh5X3ByaXZpZCA9ICZtYWM4MDIxMV93aXBoeV9wcml2aWQ7CkBAIC0yNzQsMTYgKzI3NSwxMiBAQAogCiAJX19jbGVhcl9iaXQocmVhc29uLCAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOwogCi0JaWYgKCFza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSkgJiYKLQkgICAgbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0gPT0KLQkJCQlCSVQoSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BFTkRJTkcpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKLQogCWlmIChsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSAhPSAwKQogCQkvKiBzb21lb25lIHN0aWxsIGhhcyB0aGlzIHF1ZXVlIHN0b3BwZWQgKi8KIAkJcmV0dXJuOwogCi0JbmV0aWZfd2FrZV9zdWJxdWV1ZShsb2NhbC0+bWRldiwgcXVldWUpOworCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZsb2NhbC0+cGVuZGluZ1txdWV1ZV0pKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKIH0KIAogdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSwKQEAgLTMxMiwxNCArMzA5LDYgQEAKIAlpZiAoV0FSTl9PTihxdWV1ZSA+PSBody0+cXVldWVzKSkKIAkJcmV0dXJuOwogCi0JLyoKLQkgKiBPbmx5IHN0b3AgaWYgaXQgd2FzIHByZXZpb3VzbHkgcnVubmluZywgdGhpcyBpcyBuZWNlc3NhcnkKLQkgKiBmb3IgY29ycmVjdCBwZW5kaW5nIHBhY2tldHMgaGFuZGxpbmcgYmVjYXVzZSB0aGVyZSB3ZSBtYXkKLQkgKiBzdGFydCAoYnV0IG5vdCB3YWtlKSB0aGUgcXVldWUgYW5kIHJlbHkgb24gdGhhdC4KLQkgKi8KLQlpZiAoIWxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKQotCQluZXRpZl9zdG9wX3N1YnF1ZXVlKGxvY2FsLT5tZGV2LCBxdWV1ZSk7Ci0KIAlfX3NldF9iaXQocmVhc29uLCAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOwogfQogCkBAIC0zNDcsMTEgKzMzNiwxNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKworCWlmIChXQVJOX09OKCFpbmZvLT5jb250cm9sLnZpZikpIHsKKwkJa2ZyZWUoc2tiKTsKKwkJcmV0dXJuOworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwogCV9faWVlZTgwMjExX3N0b3BfcXVldWUoaHcsIHF1ZXVlLCBJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fU0tCX0FERCk7Ci0JX19pZWVlODAyMTFfc3RvcF9xdWV1ZShodywgcXVldWUsIElFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HKTsKLQlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnBlbmRpbmdbcXVldWVdLCBza2IpOworCV9fc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSwgc2tiKTsKIAlfX2llZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBxdWV1ZSwgSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1NLQl9BREQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CiB9CkBAIC0zNzAsMTggKzM2NCwyMSBAQAogCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1NLQl9BREQpOwogCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShza2JzKSkpIHsKKwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJCWlmIChXQVJOX09OKCFpbmZvLT5jb250cm9sLnZpZikpIHsKKwkJCWtmcmVlKHNrYik7CisJCQljb250aW51ZTsKKwkJfQorCiAJCXJldCsrOwogCQlxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCQlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnBlbmRpbmdbcXVldWVdLCBza2IpOworCQlfX3NrYl9xdWV1ZV90YWlsKCZsb2NhbC0+cGVuZGluZ1txdWV1ZV0sIHNrYik7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGh3LT5xdWV1ZXM7IGkrKykgewotCQlpZiAocmV0KQotCQkJX19pZWVlODAyMTFfc3RvcF9xdWV1ZShodywgaSwKLQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUEVORElORyk7CisJZm9yIChpID0gMDsgaSA8IGh3LT5xdWV1ZXM7IGkrKykKIAkJX19pZWVlODAyMTFfd2FrZV9xdWV1ZShodywgaSwKIAkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9TS0JfQUREKTsKLQl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CkBAIC00MTIsMTEgKzQwOSwxNiBAQAogaW50IGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcXVldWUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OwogCiAJaWYgKFdBUk5fT04ocXVldWUgPj0gaHctPnF1ZXVlcykpCiAJCXJldHVybiB0cnVlOwogCi0JcmV0dXJuIF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgcXVldWUpOworCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOworCXJldCA9ICEhbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcXVldWVfc3RvcHBlZCk7CiAKQEAgLTUwOSw2ICs1MTEsNDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyk7CiAKKy8qCisgKiBOb3RoaW5nIHNob3VsZCBoYXZlIGJlZW4gc3R1ZmZlZCBpbnRvIHRoZSB3b3JrcXVldWUgZHVyaW5nCisgKiB0aGUgc3VzcGVuZC0+cmVzdW1lIGN5Y2xlLiBJZiB0aGlzIFdBUk4gaXMgc2VlbiB0aGVuIHRoZXJlCisgKiBpcyBhIGJ1ZyB3aXRoIGVpdGhlciB0aGUgZHJpdmVyIHN1c3BlbmQgb3Igc29tZXRoaW5nIGluCisgKiBtYWM4MDIxMSBzdHVmZmluZyBpbnRvIHRoZSB3b3JrcXVldWUgd2hpY2ggd2UgaGF2ZW4ndCB5ZXQKKyAqIGNsZWFyZWQgZHVyaW5nIG1hYzgwMjExJ3Mgc3VzcGVuZCBjeWNsZS4KKyAqLworc3RhdGljIGJvb2wgaWVlZTgwMjExX2Nhbl9xdWV1ZV93b3JrKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworICAgICAgICBpZiAoV0FSTihsb2NhbC0+c3VzcGVuZGVkLCAicXVldWVpbmcgaWVlZTgwMjExIHdvcmsgd2hpbGUgIgorCQkgImdvaW5nIHRvIHN1c3BlbmRcbiIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCit2b2lkIGllZWU4MDIxMV9xdWV1ZV93b3JrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisKKwlpZiAoIWllZWU4MDIxMV9jYW5fcXVldWVfd29yayhsb2NhbCkpCisJCXJldHVybjsKKworCXF1ZXVlX3dvcmsobG9jYWwtPndvcmtxdWV1ZSwgd29yayk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9xdWV1ZV93b3JrKTsKKwordm9pZCBpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmssCisJCQkJICB1bnNpZ25lZCBsb25nIGRlbGF5KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCisJaWYgKCFpZWVlODAyMTFfY2FuX3F1ZXVlX3dvcmsobG9jYWwpKQorCQlyZXR1cm47CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsobG9jYWwtPndvcmtxdWV1ZSwgZHdvcmssIGRlbGF5KTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayk7CisKIHZvaWQgaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyh1OCAqc3RhcnQsIHNpemVfdCBsZW4sCiAJCQkgICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zKQogewpAQCAtNzYwLDIwICs4MDIsNiBAQAogCWllZWU4MDIxMV9zZXRfd21tX2RlZmF1bHQoc2RhdGEpOwogfQogCi12b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIGludCBlbmNyeXB0KQotewotCXNrYi0+ZGV2ID0gc2RhdGEtPmxvY2FsLT5tZGV2OwotCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIDApOwotCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAwKTsKLQlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCAwKTsKLQotCXNrYi0+aWlmID0gc2RhdGEtPmRldi0+aWZpbmRleDsKLQlza2ItPmRvX25vdF9lbmNyeXB0ID0gIWVuY3J5cHQ7Ci0KLQlkZXZfcXVldWVfeG1pdChza2IpOwotfQotCiB1MzIgaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKQEAgLTgwNCwxMiArODMyLDEzIEBACiAKIHZvaWQgaWVlZTgwMjExX3NlbmRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSB1MTYgdHJhbnNhY3Rpb24sIHUxNiBhdXRoX2FsZywKLQkJCSB1OCAqZXh0cmEsIHNpemVfdCBleHRyYV9sZW4sCi0JCQkgY29uc3QgdTggKmJzc2lkLCBpbnQgZW5jcnlwdCkKKwkJCSB1OCAqZXh0cmEsIHNpemVfdCBleHRyYV9sZW4sIGNvbnN0IHU4ICpic3NpZCwKKwkJCSBjb25zdCB1OCAqa2V5LCB1OCBrZXlfbGVuLCB1OCBrZXlfaWR4KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCWludCBlcnI7CiAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCiAJCQkgICAgc2l6ZW9mKCptZ210KSArIDYgKyBleHRyYV9sZW4pOwpAQCAtODI0LDggKzg1Myw2IEBACiAJbWVtc2V0KG1nbXQsIDAsIDI0ICsgNik7CiAJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKIAkJCQkJICBJRUVFODAyMTFfU1RZUEVfQVVUSCk7Ci0JaWYgKGVuY3J5cHQpCi0JCW1nbXQtPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKIAltZW1jcHkobWdtdC0+ZGEsIGJzc2lkLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShtZ210LT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKQEAgLTgzNSw3ICs4NjIsMTMgQEAKIAlpZiAoZXh0cmEpCiAJCW1lbWNweShza2JfcHV0KHNrYiwgZXh0cmFfbGVuKSwgZXh0cmEsIGV4dHJhX2xlbik7CiAKLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGVuY3J5cHQpOworCWlmIChhdXRoX2FsZyA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSAmJiB0cmFuc2FjdGlvbiA9PSAzKSB7CisJCW1nbXQtPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKwkJZXJyID0gaWVlZTgwMjExX3dlcF9lbmNyeXB0KGxvY2FsLCBza2IsIGtleSwga2V5X2xlbiwga2V5X2lkeCk7CisJCVdBUk5fT04oZXJyKTsKKwl9CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwogfQogCiBpbnQgaWVlZTgwMjExX2J1aWxkX3ByZXFfaWVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnVmZmVyLApAQCAtOTc0LDYgKzEwMDcsMTYgQEAKIAlyZXR1cm4gc3VwcF9yYXRlczsKIH0KIAordm9pZCBpZWVlODAyMTFfc3RvcF9kZXZpY2Uoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCit7CisJaWVlZTgwMjExX2xlZF9yYWRpbyhsb2NhbCwgZmFsc2UpOworCisJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPnJlY29uZmlnX2ZpbHRlcik7CisJZHJ2X3N0b3AobG9jYWwpOworCisJZmx1c2hfd29ya3F1ZXVlKGxvY2FsLT53b3JrcXVldWUpOworfQorCiBpbnQgaWVlZTgwMjExX3JlY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKQEAgLTEwNDMsOSArMTA4Niw3IEBACiAJLyogcmVjb25maWd1cmUgaGFyZHdhcmUgKi8KIAlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCB+MCk7CiAKLQluZXRpZl9hZGRyX2xvY2tfYmgobG9jYWwtPm1kZXYpOwogCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKLQluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CiAKIAkvKiBGaW5hbGx5IGFsc28gcmVjb25maWd1cmUgYWxsIHRoZSBCU1MgaW5mb3JtYXRpb24gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKQEAgLTExMjEsMyArMTE2Miw0IEBACiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KKwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dlcC5jIGIvbmV0L21hYzgwMjExL3dlcC5jCmluZGV4IGVmNzMxMDUuLjhhOTgwZjEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93ZXAuYworKysgYi9uZXQvbWFjODAyMTEvd2VwLmMKQEAgLTY3LDEwICs2NywxMCBAQAogCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV93ZXBfZ2V0X2l2KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LCB1OCAqaXYpCisJCQkJIGludCBrZXlsZW4sIGludCBrZXlpZHgsIHU4ICppdikKIHsKIAlsb2NhbC0+d2VwX2l2Kys7Ci0JaWYgKGllZWU4MDIxMV93ZXBfd2Vha19pdihsb2NhbC0+d2VwX2l2LCBrZXktPmNvbmYua2V5bGVuKSkKKwlpZiAoaWVlZTgwMjExX3dlcF93ZWFrX2l2KGxvY2FsLT53ZXBfaXYsIGtleWxlbikpCiAJCWxvY2FsLT53ZXBfaXYgKz0gMHgwMTAwOwogCiAJaWYgKCFpdikKQEAgLTc5LDEzICs3OSwxMyBAQAogCSppdisrID0gKGxvY2FsLT53ZXBfaXYgPj4gMTYpICYgMHhmZjsKIAkqaXYrKyA9IChsb2NhbC0+d2VwX2l2ID4+IDgpICYgMHhmZjsKIAkqaXYrKyA9IGxvY2FsLT53ZXBfaXYgJiAweGZmOwotCSppdisrID0ga2V5LT5jb25mLmtleWlkeCA8PCA2OworCSppdisrID0ga2V5aWR4IDw8IDY7CiB9CiAKIAogc3RhdGljIHU4ICppZWVlODAyMTFfd2VwX2FkZF9pdihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCisJCQkJaW50IGtleWxlbiwgaW50IGtleWlkeCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXVuc2lnbmVkIGludCBoZHJsZW47CkBAIC0xMDAsNyArMTAwLDcgQEAKIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAJbmV3aGRyID0gc2tiX3B1c2goc2tiLCBXRVBfSVZfTEVOKTsKIAltZW1tb3ZlKG5ld2hkciwgbmV3aGRyICsgV0VQX0lWX0xFTiwgaGRybGVuKTsKLQlpZWVlODAyMTFfd2VwX2dldF9pdihsb2NhbCwga2V5LCBuZXdoZHIgKyBoZHJsZW4pOworCWllZWU4MDIxMV93ZXBfZ2V0X2l2KGxvY2FsLCBrZXlsZW4sIGtleWlkeCwgbmV3aGRyICsgaGRybGVuKTsKIAlyZXR1cm4gbmV3aGRyICsgaGRybGVuOwogfQogCkBAIC0xNDQsNDMgKzE0NCwzMiBAQAogICoKICAqIFdFUCBmcmFtZSBwYXlsb2FkOiBJViArIFRYIGtleSBpZHgsIFJDNChkYXRhKSwgSUNWID0gUkM0KENSQzMyKGRhdGEpKQogICovCi1pbnQgaWVlZTgwMjExX3dlcF9lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQoraW50IGllZWU4MDIxMV93ZXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgY29uc3QgdTggKmtleSwgaW50IGtleWxlbiwgaW50IGtleWlkeCkKIHsKLQl1MzIga2xlbjsKLQl1OCAqcmM0a2V5LCAqaXY7CisJdTggKml2OwogCXNpemVfdCBsZW47CisJdTggcmM0a2V5WzMgKyBXTEFOX0tFWV9MRU5fV0VQMTA0XTsKIAotCWlmICgha2V5IHx8IGtleS0+Y29uZi5hbGcgIT0gQUxHX1dFUCkKKwlpdiA9IGllZWU4MDIxMV93ZXBfYWRkX2l2KGxvY2FsLCBza2IsIGtleWxlbiwga2V5aWR4KTsKKwlpZiAoIWl2KQogCQlyZXR1cm4gLTE7CiAKLQlrbGVuID0gMyArIGtleS0+Y29uZi5rZXlsZW47Ci0JcmM0a2V5ID0ga21hbGxvYyhrbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXJjNGtleSkKLQkJcmV0dXJuIC0xOwotCi0JaXYgPSBpZWVlODAyMTFfd2VwX2FkZF9pdihsb2NhbCwgc2tiLCBrZXkpOwotCWlmICghaXYpIHsKLQkJa2ZyZWUocmM0a2V5KTsKLQkJcmV0dXJuIC0xOwotCX0KLQogCWxlbiA9IHNrYi0+bGVuIC0gKGl2ICsgV0VQX0lWX0xFTiAtIHNrYi0+ZGF0YSk7CiAKIAkvKiBQcmVwZW5kIDI0LWJpdCBJViB0byBSQzQga2V5ICovCiAJbWVtY3B5KHJjNGtleSwgaXYsIDMpOwogCiAJLyogQ29weSByZXN0IG9mIHRoZSBXRVAga2V5ICh0aGUgc2VjcmV0IHBhcnQpICovCi0JbWVtY3B5KHJjNGtleSArIDMsIGtleS0+Y29uZi5rZXksIGtleS0+Y29uZi5rZXlsZW4pOworCW1lbWNweShyYzRrZXkgKyAzLCBrZXksIGtleWxlbik7CiAKIAkvKiBBZGQgcm9vbSBmb3IgSUNWICovCiAJc2tiX3B1dChza2IsIFdFUF9JQ1ZfTEVOKTsKIAotCWllZWU4MDIxMV93ZXBfZW5jcnlwdF9kYXRhKGxvY2FsLT53ZXBfdHhfdGZtLCByYzRrZXksIGtsZW4sCisJaWVlZTgwMjExX3dlcF9lbmNyeXB0X2RhdGEobG9jYWwtPndlcF90eF90Zm0sIHJjNGtleSwga2V5bGVuICsgMywKIAkJCQkgICBpdiArIFdFUF9JVl9MRU4sIGxlbik7CiAKLQlrZnJlZShyYzRrZXkpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNiw4ICsyMDUsOSBAQAogICogZmFpbHVyZS4gSWYgZnJhbWUgaXMgT0ssIElWIGFuZCBJQ1Ygd2lsbCBiZSByZW1vdmVkLCBpLmUuLCBkZWNyeXB0ZWQgcGF5bG9hZAogICogaXMgbW92ZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2tiIGFuZCBza2IgbGVuZ3RoIHdpbGwgYmUgcmVkdWNlZC4KICAqLwotaW50IGllZWU4MDIxMV93ZXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3dlcF9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQogewogCXUzMiBrbGVuOwogCXU4ICpyYzRrZXk7CkBAIC0zMTQsMTIgKzMwNCwxNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAogCWlmICghKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpKSB7Ci0JCWlmIChpZWVlODAyMTFfd2VwX2VuY3J5cHQodHgtPmxvY2FsLCBza2IsIHR4LT5rZXkpKQorCQlpZiAoaWVlZTgwMjExX3dlcF9lbmNyeXB0KHR4LT5sb2NhbCwgc2tiLCB0eC0+a2V5LT5jb25mLmtleSwKKwkJCQkJICB0eC0+a2V5LT5jb25mLmtleWxlbiwKKwkJCQkJICB0eC0+a2V5LT5jb25mLmtleWlkeCkpCiAJCQlyZXR1cm4gLTE7CiAJfSBlbHNlIHsKIAkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKIAkJaWYgKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpIHsKLQkJCWlmICghaWVlZTgwMjExX3dlcF9hZGRfaXYodHgtPmxvY2FsLCBza2IsIHR4LT5rZXkpKQorCQkJaWYgKCFpZWVlODAyMTFfd2VwX2FkZF9pdih0eC0+bG9jYWwsIHNrYiwKKwkJCQkJCSAgdHgtPmtleS0+Y29uZi5rZXlsZW4sCisJCQkJCQkgIHR4LT5rZXktPmNvbmYua2V5aWR4KSkKIAkJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd2VwLmggYi9uZXQvbWFjODAyMTEvd2VwLmgKaW5kZXggZDNmMGRiNC4uZmUyOWQ3ZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dlcC5oCisrKyBiL25ldC9tYWM4MDIxMS93ZXAuaApAQCAtMjAsMTIgKzIwLDExIEBACiB2b2lkIGllZWU4MDIxMV93ZXBfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiB2b2lkIGllZWU4MDIxMV93ZXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sIHU4ICpyYzRrZXksCiAJCQkJc2l6ZV90IGtsZW4sIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pOworaW50IGllZWU4MDIxMV93ZXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgY29uc3QgdTggKmtleSwgaW50IGtleWxlbiwgaW50IGtleWlkeCk7CiBpbnQgaWVlZTgwMjExX3dlcF9kZWNyeXB0X2RhdGEoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSwgdTggKnJjNGtleSwKIAkJCSAgICAgICBzaXplX3Qga2xlbiwgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbik7Ci1pbnQgaWVlZTgwMjExX3dlcF9lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTsKLWludCBpZWVlODAyMTFfd2VwX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwogYm9vbCBpZWVlODAyMTFfd2VwX2lzX3dlYWtfaXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSk7CiAKIGllZWU4MDIxMV9yeF9yZXN1bHQKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93ZXh0LmMgYi9uZXQvbWFjODAyMTEvd2V4dC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGE4MWY0Li4wMDAwMDAwCi0tLSBhL25ldC9tYWM4MDIxMS93ZXh0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAyLTIwMDUsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KLSAqIENvcHlyaWdodCAyMDA1LTIwMDYsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgotI2luY2x1ZGUgImxlZC5oIgotI2luY2x1ZGUgInJhdGUuaCIKLSNpbmNsdWRlICJ3cGEuaCIKLSNpbmNsdWRlICJhZXNfY2NtLmgiCi0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlpbnQgcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc2RhdGEsIGV4dHJhLCBkYXRhLT5sZW5ndGgpOwotCQlpZiAocmV0ICYmIHJldCAhPSAtRUFMUkVBRFkpCi0JCQlyZXR1cm4gcmV0OwotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7Ci0JCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9FWFRfU01FOwotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUOwotCQlpZiAocmV0ICE9IC1FQUxSRUFEWSkKLQkJCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9zaXdmcmVxKGRldiwgaW5mbywgZnJlcSwgZXh0cmEpOwotCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKLQotCS8qIGZyZXEtPmUgPT0gMDogZnJlcS0+bSA9IGNoYW5uZWw7IG90aGVyd2lzZSBmcmVxID0gbSAqIDEwXmUgKi8KLQlpZiAoZnJlcS0+ZSA9PSAwKSB7Ci0JCWlmIChmcmVxLT5tIDwgMCkgewotCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PQotCQkJCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlCi0JCQljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKGxvY2FsLT5ody53aXBoeSwKLQkJCQlpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZnJlcS0+bSkpOwotCX0gZWxzZSB7Ci0JCWludCBpLCBkaXYgPSAxMDAwMDAwOwotCQlmb3IgKGkgPSAwOyBpIDwgZnJlcS0+ZTsgaSsrKQotCQkJZGl2IC89IDEwOwotCQlpZiAoZGl2IDw9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbChsb2NhbC0+aHcud2lwaHksIGZyZXEtPm0gLyBkaXYpOwotCX0KLQotCWlmICghY2hhbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKgotCSAqIG5vIGNoYW5nZSBleGNlcHQgbWF5YmUgYXV0byAtPiBmaXhlZCwgaWdub3JlIHRoZSBIVAotCSAqIHNldHRpbmcgc28geW91IGNhbiBmaXggYSBjaGFubmVsIHlvdSdyZSBvbiBhbHJlYWR5Ci0JICovCi0JaWYgKGxvY2FsLT5vcGVyX2NoYW5uZWwgPT0gY2hhbikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEpOwotCi0JbG9jYWwtPm9wZXJfY2hhbm5lbCA9IGNoYW47Ci0JbG9jYWwtPm9wZXJfY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOwotCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfZ2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9naXdmcmVxKGRldiwgaW5mbywgZnJlcSwgZXh0cmEpOwotCi0JZnJlcS0+bSA9IGxvY2FsLT5vcGVyX2NoYW5uZWwtPmNlbnRlcl9mcmVxOwotCWZyZXEtPmUgPSA2OwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpzc2lkKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlzaXplX3QgbGVuID0gZGF0YS0+bGVuZ3RoOwotCWludCByZXQ7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQlyZXR1cm4gY2ZnODAyMTFfaWJzc193ZXh0X3Npd2Vzc2lkKGRldiwgaW5mbywgZGF0YSwgc3NpZCk7Ci0KLQkvKiBpd2NvbmZpZyB1c2VzIG51bCB0ZXJtaW5hdGlvbiBpbiBTU0lELi4gKi8KLQlpZiAobGVuID4gMCAmJiBzc2lkW2xlbiAtIDFdID09ICdcMCcpCi0JCWxlbi0tOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCWlmIChkYXRhLT5mbGFncykKLQkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOwotCQllbHNlCi0JCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOwotCi0JCXJldCA9IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc2RhdGEsIHNzaWQsIGxlbik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9FWFRfU01FOwotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUOwotCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCkKLXsKLQlzaXplX3QgbGVuOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9naXdlc3NpZChkZXYsIGluZm8sIGRhdGEsIHNzaWQpOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCWludCByZXMgPSBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHNkYXRhLCBzc2lkLCAmbGVuKTsKLQkJaWYgKHJlcyA9PSAwKSB7Ci0JCQlkYXRhLT5sZW5ndGggPSBsZW47Ci0JCQlkYXRhLT5mbGFncyA9IDE7Ci0JCX0gZWxzZQotCQkJZGF0YS0+ZmxhZ3MgPSAwOwotCQlyZXR1cm4gcmVzOwotCX0KLQotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfc2l3YXAoZGV2LCBpbmZvLCBhcF9hZGRyLCBleHRyYSk7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJaW50IHJldDsKLQotCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKCh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSkpCi0JCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8Ci0JCQkJSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOwotCQllbHNlIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcigodTggKikgJmFwX2FkZHItPnNhX2RhdGEpKQotCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7Ci0JCWVsc2UKLQkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKLQkJcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc2RhdGEsICh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfRVhUX1NNRTsKLQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0NPTlRST0xfUE9SVDsKLQkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSk7Ci0JCXJldHVybiAwOwotCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1dEUykgewotCQkvKgotCQkgKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gdXBkYXRlIHRoZSBXRFMgcGVlciBhZGRyZXNzCi0JCSAqIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZywgdGhlbiB3ZSBuZWVkIHRvIGRvCi0JCSAqIG1vcmUgd29yayBoZXJlLCBuYW1lbHkgaWYgaXQgaXMgcnVubmluZyB3ZSBuZWVkIHRvCi0JCSAqIGFkZCBhIG5ldyBhbmQgcmVtb3ZlIHRoZSBvbGQgU1RBIGVudHJ5LCB0aGlzIGlzCi0JCSAqIG5vcm1hbGx5IGhhbmRsZWQgYnkgX29wZW4oKSBhbmQgX3N0b3AoKS4KLQkJICovCi0JCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCQlyZXR1cm4gLUVCVVNZOwotCi0JCW1lbWNweSgmc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEsCi0JCSAgICAgICBFVEhfQUxFTik7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9naXdhcChkZXYsIGluZm8sIGFwX2FkZHIsIGV4dHJhKTsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlpZiAoc2RhdGEtPnUubWdkLnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSB7Ci0JCQlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOwotCQl9IGVsc2UKLQkJCW1lbXNldCgmYXBfYWRkci0+c2FfZGF0YSwgMCwgRVRIX0FMRU4pOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9XRFMpIHsKLQkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51Lndkcy5yZW1vdGVfYWRkciwgRVRIX0FMRU4pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcmF0ZSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlpbnQgaSwgZXJyID0gLUVJTlZBTDsKLQl1MzIgdGFyZ2V0X3JhdGUgPSByYXRlLT52YWx1ZSAvIDEwMDAwMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCS8qIHRhcmdldF9yYXRlID0gLTEsIHJhdGUtPmZpeGVkID0gMCBtZWFucyBhdXRvIG9ubHksIHNvIHVzZSBhbGwgcmF0ZXMKLQkgKiB0YXJnZXRfcmF0ZSA9IFgsIHJhdGUtPmZpeGVkID0gMSBtZWFucyBvbmx5IHJhdGUgWAotCSAqIHRhcmdldF9yYXRlID0gWCwgcmF0ZS0+Zml4ZWQgPSAwIG1lYW5zIGFsbCByYXRlcyA8PSBYICovCi0Jc2RhdGEtPm1heF9yYXRlY3RybF9yYXRlaWR4ID0gLTE7Ci0Jc2RhdGEtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeCA9IC0xOwotCWlmIChyYXRlLT52YWx1ZSA8IDApCi0JCXJldHVybiAwOwotCi0JZm9yIChpPTA7IGk8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpicmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbaV07Ci0JCWludCB0aGlzX3JhdGUgPSBicmF0ZS0+Yml0cmF0ZTsKLQotCQlpZiAodGFyZ2V0X3JhdGUgPT0gdGhpc19yYXRlKSB7Ci0JCQlzZGF0YS0+bWF4X3JhdGVjdHJsX3JhdGVpZHggPSBpOwotCQkJaWYgKHJhdGUtPmZpeGVkKQotCQkJCXNkYXRhLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPSBpOwotCQkJZXJyID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJhdGUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUubWdkLmJzc2lkKTsKLQotCWlmIChzdGEgJiYgIShzdGEtPmxhc3RfdHhfcmF0ZS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpKQotCQlyYXRlLT52YWx1ZSA9IHNiYW5kLT5iaXRyYXRlc1tzdGEtPmxhc3RfdHhfcmF0ZS5pZHhdLmJpdHJhdGU7Ci0JZWxzZQotCQlyYXRlLT52YWx1ZSA9IDA7Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCWlmICghc3RhKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXJhdGUtPnZhbHVlICo9IDEwMDAwMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKndycSwKLQkJCQkgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmxvY2FsLT5ody5jb25mOwotCWludCB0aW1lb3V0ID0gMDsKLQlib29sIHBzOwotCi0JaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICh3cnEtPmRpc2FibGVkKSB7Ci0JCXBzID0gZmFsc2U7Ci0JCXRpbWVvdXQgPSAwOwotCQlnb3RvIHNldDsKLQl9Ci0KLQlzd2l0Y2ggKHdycS0+ZmxhZ3MgJiBJV19QT1dFUl9NT0RFKSB7Ci0JY2FzZSBJV19QT1dFUl9PTjogICAgICAgLyogSWYgbm90IHNwZWNpZmllZCAqLwotCWNhc2UgSVdfUE9XRVJfTU9ERTogICAgIC8qIElmIHNldCBhbGwgbWFzayAqLwotCWNhc2UgSVdfUE9XRVJfQUxMX1I6ICAgIC8qIElmIGV4cGxpY2l0ZWx5IHN0YXRlIGFsbCAqLwotCQlwcyA9IHRydWU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6ICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSB3ZSBpZ25vcmUgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHdycS0+ZmxhZ3MgJiB+KElXX1BPV0VSX01PREUgfCBJV19QT1dFUl9USU1FT1VUKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAod3JxLT5mbGFncyAmIElXX1BPV0VSX1RJTUVPVVQpCi0JCXRpbWVvdXQgPSB3cnEtPnZhbHVlIC8gMTAwMDsKLQotIHNldDoKLQlpZiAocHMgPT0gc2RhdGEtPnUubWdkLnBvd2Vyc2F2ZSAmJiB0aW1lb3V0ID09IGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCkKLQkJcmV0dXJuIDA7Ci0KLQlzZGF0YS0+dS5tZ2QucG93ZXJzYXZlID0gcHM7Ci0JY29uZi0+ZHluYW1pY19wc190aW1lb3V0ID0gdGltZW91dDsKLQotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUykKLQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKLQotCWllZWU4MDIxMV9yZWNhbGNfcHMobG9jYWwsIC0xKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJCSAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0KLQl3cnF1LT5wb3dlci5kaXNhYmxlZCA9ICFzZGF0YS0+dS5tZ2QucG93ZXJzYXZlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHN0cnVjdCBpd19wYXJhbSAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWludCByZXQgPSAwOwotCi0Jc3dpdGNoIChkYXRhLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKLQljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKLQljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6Ci0JY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgotCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKLQljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQX01HTVQ6Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6Ci0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJaWYgKGRhdGEtPnZhbHVlICYgKElXX0FVVEhfQ0lQSEVSX1dFUDQwIHwKLQkJCSAgICBJV19BVVRIX0NJUEhFUl9XRVAxMDQgfCBJV19BVVRIX0NJUEhFUl9US0lQKSkKLQkJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0KLQkJCQkJSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEOwotCQkJZWxzZQotCQkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPQotCQkJCQl+SUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgotCQlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9ICEhZGF0YS0+dmFsdWU7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6Ci0JCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCWVsc2UgewotCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRDsKLQkJCS8qCi0JCQkgKiBQcml2YWN5IGludm9rZWQgYnkgd3BhX3N1cHBsaWNhbnQsIHN0b3JlIHRoZQotCQkJICogdmFsdWUgYW5kIGFsbG93IGFzc29jaWF0aW5nIHRvIGEgcHJvdGVjdGVkCi0JCQkgKiBuZXR3b3JrIHdpdGhvdXQgaGF2aW5nIGEga2V5IHVwIGZyb250LgotCQkJICovCi0JCQlpZiAoZGF0YS0+dmFsdWUpCi0JCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9Ci0JCQkJCUlFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJc2RhdGEtPnUubWdkLmF1dGhfYWxncyA9IGRhdGEtPnZhbHVlOwotCQllbHNlCi0JCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX01GUDoKLQkJaWYgKCEoc2RhdGEtPmxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRSkpIHsKLQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCQlzd2l0Y2ggKGRhdGEtPnZhbHVlKSB7Ci0JCQljYXNlIElXX0FVVEhfTUZQX0RJU0FCTEVEOgotCQkJCXNkYXRhLT51Lm1nZC5tZnAgPSBJRUVFODAyMTFfTUZQX0RJU0FCTEVEOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJV19BVVRIX01GUF9PUFRJT05BTDoKLQkJCQlzZGF0YS0+dS5tZ2QubWZwID0gSUVFRTgwMjExX01GUF9PUFRJT05BTDsKLQkJCQlicmVhazsKLQkJCWNhc2UgSVdfQVVUSF9NRlBfUkVRVUlSRUQ6Ci0JCQkJc2RhdGEtPnUubWdkLm1mcCA9IElFRUU4MDIxMV9NRlBfUkVRVUlSRUQ7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogR2V0IHdpcmVsZXNzIHN0YXRpc3RpY3MuICBDYWxsZWQgYnkgL3Byb2MvbmV0L3dpcmVsZXNzIGFuZCBieSBTSU9DR0lXU1RBVFMgKi8KLXN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqaWVlZTgwMjExX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZsb2NhbC0+d3N0YXRzOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUubWdkLmJzc2lkKTsKLQotCWlmICghc3RhKSB7Ci0JCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCA9IDA7Ci0JCXdzdGF0cy0+ZGlzY2FyZC5taXNjID0gMDsKLQkJd3N0YXRzLT5xdWFsLnF1YWwgPSAwOwotCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSAwOwotCQl3c3RhdHMtPnF1YWwubm9pc2UgPSAwOwotCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IElXX1FVQUxfQUxMX0lOVkFMSUQ7Ci0JfSBlbHNlIHsKLQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSAwOwotCQkvKgotCQkgKiBtaXJyb3Igd2hhdCBjZmc4MDIxMSBkb2VzIGZvciBpd3JhbmdlL3NjYW4gcmVzdWx0cywKLQkJICogb3RoZXJ3aXNlIHVzZXJzcGFjZSBnZXRzIGNvbmZ1c2VkLgotCQkgKi8KLQkJaWYgKGxvY2FsLT5ody5mbGFncyAmIChJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQyB8Ci0JCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKSkgewotCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOwotCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7Ci0JCX0gZWxzZSB7Ci0JCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7Ci0JCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfSU5WQUxJRDsKLQkJfQotCi0JCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQykgewotCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gc3RhLT5sYXN0X3NpZ25hbDsKLQkJCXdzdGF0cy0+cXVhbC5xdWFsID0gc3RhLT5sYXN0X3NpZ25hbDsKLQkJfSBlbHNlIGlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkgewotCQkJaW50IHNpZyA9IHN0YS0+bGFzdF9zaWduYWw7Ci0KLQkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfREJNOwotCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gc2lnOwotCQkJaWYgKHNpZyA8IC0xMTApCi0JCQkJc2lnID0gLTExMDsKLQkJCWVsc2UgaWYgKHNpZyA+IC00MCkKLQkJCQlzaWcgPSAtNDA7Ci0JCQl3c3RhdHMtPnF1YWwucXVhbCA9IHNpZyArIDExMDsKLQkJfQotCi0JCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNKSB7Ci0JCQkvKgotCQkJICogVGhpcyBhc3N1bWVzIHRoYXQgaWYgZHJpdmVyIHJlcG9ydHMgbm9pc2UsIGl0IGFsc28KLQkJCSAqIHJlcG9ydHMgc2lnbmFsIGluIGRCbS4KLQkJCSAqLwotCQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gc3RhLT5sYXN0X25vaXNlOwotCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9VUERBVEVEOwotCQl9IGVsc2UgewotCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9JTlZBTElEOwotCQl9Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gd3N0YXRzOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpbnQgcmV0ID0gMDsKLQotCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0JY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQlkYXRhLT52YWx1ZSA9IHNkYXRhLT51Lm1nZC5hdXRoX2FsZ3M7Ci0JCWVsc2UKLQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLQotLyogU3RydWN0dXJlcyB0byBleHBvcnQgdGhlIFdpcmVsZXNzIEhhbmRsZXJzICovCi0KLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyIGllZWU4MDIxMV9oYW5kbGVyW10gPQotewotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXQ09NTUlUICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3bmFtZSwJCS8qIFNJT0NHSVdOQU1FICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdOV0lEICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdOV0lEICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdmcmVxLAkJLyogU0lPQ1NJV0ZSRVEgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2ZyZXEsCQkvKiBTSU9DR0lXRlJFUSAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd21vZGUsCQkvKiBTSU9DU0lXTU9ERSAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd21vZGUsCQkvKiBTSU9DR0lXTU9ERSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXU0VOUyAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXU0VOUyAqLwotCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1JBTkdFICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3cmFuZ2UsCQkvKiBTSU9DR0lXUkFOR0UgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdQUklWICovCi0JKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sCQkvKiBTSU9DR0lXUFJJViAqLwotCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1NUQVRTICovCi0JKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sCQkvKiBTSU9DR0lXU1RBVFMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1NQWSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXU1BZICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdUSFJTUFkgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV1RIUlNQWSAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3YXAsCQkvKiBTSU9DU0lXQVAgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2FwLAkJLyogU0lPQ0dJV0FQICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3bWxtZSwJCS8qIFNJT0NTSVdNTE1FICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdBUExJU1QgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdzY2FuLAkJLyogU0lPQ1NJV1NDQU4gKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdzY2FuLAkJLyogU0lPQ0dJV1NDQU4gKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd2Vzc2lkLAkJLyogU0lPQ1NJV0VTU0lEICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdlc3NpZCwJCS8qIFNJT0NHSVdFU1NJRCAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXTklDS04gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV05JQ0tOICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3cmF0ZSwJCS8qIFNJT0NTSVdSQVRFICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdyYXRlLAkJLyogU0lPQ0dJV1JBVEUgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdydHMsCQkvKiBTSU9DU0lXUlRTICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3cnRzLAkJLyogU0lPQ0dJV1JUUyAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd2ZyYWcsCQkvKiBTSU9DU0lXRlJBRyAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd2ZyYWcsCQkvKiBTSU9DR0lXRlJBRyAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd3R4cG93ZXIsCQkvKiBTSU9DU0lXVFhQT1cgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXd0eHBvd2VyLAkJLyogU0lPQ0dJV1RYUE9XICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3cmV0cnksCQkvKiBTSU9DU0lXUkVUUlkgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdyZXRyeSwJCS8qIFNJT0NHSVdSRVRSWSAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd2VuY29kZSwJCS8qIFNJT0NTSVdFTkNPREUgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdlbmNvZGUsCQkvKiBTSU9DR0lXRU5DT0RFICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdwb3dlciwJCS8qIFNJT0NTSVdQT1dFUiAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3cG93ZXIsCQkvKiBTSU9DR0lXUE9XRVIgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdnZW5pZSwJCS8qIFNJT0NTSVdHRU5JRSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXR0VOSUUgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd2F1dGgsCQkvKiBTSU9DU0lXQVVUSCAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3YXV0aCwJCS8qIFNJT0NHSVdBVVRIICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3ZW5jb2RlZXh0LAkvKiBTSU9DU0lXRU5DT0RFRVhUICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdFTkNPREVFWFQgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1BNS1NBICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLX07Ci0KLWNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWYgPQotewotCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKGllZWU4MDIxMV9oYW5kbGVyKSwKLQkuc3RhbmRhcmQJPSAoaXdfaGFuZGxlciAqKSBpZWVlODAyMTFfaGFuZGxlciwKLQkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gaWVlZTgwMjExX2dldF93aXJlbGVzc19zdGF0cywKLX07CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd21lLmMgYi9uZXQvbWFjODAyMTEvd21lLmMKaW5kZXggMTE2YTkyMy4uYjE5Yjc2OSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dtZS5jCisrKyBiL25ldC9tYWM4MDIxMS93bWUuYwpAQCAtODUsMTAgKzg1LDggQEAKIAlyZXR1cm4gaWVlZTgwMl8xZF90b19hY1tza2ItPnByaW9yaXR5XTsKIH0KIAotdTE2IGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX21hc3Rlcl9wcml2ICptcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBtcHJpdi0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJdTE2IHF1ZXVlOwogCXU4IHRpZDsKQEAgLTExMyw1ICsxMTEsNSBAQAogCQkqcCA9IDA7CiAJfQogCi0JcmV0dXJuIHF1ZXVlOworCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIHF1ZXVlKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93bWUuaCBiL25ldC9tYWM4MDIxMS93bWUuaAppbmRleCA3NTIwZDJlLi5kNGZkODdjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd21lLmgKKysrIGIvbmV0L21hYzgwMjExL3dtZS5oCkBAIC0yMCw2ICsyMCw3IEBACiAKIGV4dGVybiBjb25zdCBpbnQgaWVlZTgwMl8xZF90b19hY1s4XTsKIAotdTE2IGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKICNlbmRpZiAvKiBfV01FX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93cGEuYyBiL25ldC9tYWM4MDIxMS93cGEuYwppbmRleCBkY2ZhZTg4Li43MDc3ODY5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd3BhLmMKKysrIGIvbmV0L21hYzgwMjExL3dwYS5jCkBAIC0xMjIsNyArMTIyLDggQEAKIAkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCiAJCW1hYzgwMjExX2V2X21pY2hhZWxfbWljX2ZhaWx1cmUocngtPnNkYXRhLCByeC0+a2V5LT5jb25mLmtleWlkeCwKLQkJCQkJCSh2b2lkICopIHNrYi0+ZGF0YSwgTlVMTCk7CisJCQkJCQkodm9pZCAqKSBza2ItPmRhdGEsIE5VTEwsCisJCQkJCQlHRlBfQVRPTUlDKTsKIAkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKaW5kZXggMjAxYjhlYS4uM2M3ZTQyNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYwpAQCAtMTgsNiArMTgsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC0yNjIsMTIgKzI2NSwxMiBAQAogCWlmICh2c2VxLT5kZWx0YSB8fCB2c2VxLT5wcmV2aW91c19kZWx0YSkgewogCQlpZihhZnRlcihzZXEsIHZzZXEtPmluaXRfc2VxKSkgewogCQkJdGgtPnNlcSA9IGh0b25sKHNlcSArIHZzZXEtPmRlbHRhKTsKLQkJCUlQX1ZTX0RCRyg5LCAidnNfZml4X3NlcSgpOiBhZGRlZCBkZWx0YSAoJWQpIHRvIHNlcVxuIiwKLQkJCQkgIHZzZXEtPmRlbHRhKTsKKwkJCUlQX1ZTX0RCRyg5LCAiJXMoKTogYWRkZWQgZGVsdGEgKCVkKSB0byBzZXFcbiIsCisJCQkJICBfX2Z1bmNfXywgdnNlcS0+ZGVsdGEpOwogCQl9IGVsc2UgewogCQkJdGgtPnNlcSA9IGh0b25sKHNlcSArIHZzZXEtPnByZXZpb3VzX2RlbHRhKTsKLQkJCUlQX1ZTX0RCRyg5LCAidnNfZml4X3NlcSgpOiBhZGRlZCBwcmV2aW91c19kZWx0YSAiCi0JCQkJICAiKCVkKSB0byBzZXFcbiIsIHZzZXEtPnByZXZpb3VzX2RlbHRhKTsKKwkJCUlQX1ZTX0RCRyg5LCAiJXMoKTogYWRkZWQgcHJldmlvdXNfZGVsdGEgKCVkKSB0byBzZXFcbiIsCisJCQkJICBfX2Z1bmNfXywgdnNlcS0+cHJldmlvdXNfZGVsdGEpOwogCQl9CiAJfQogfQpAQCAtMjkxLDE0ICsyOTQsMTQgQEAKIAkJICAgdG8gcmVjZWl2ZSBuZXh0LCBzbyBjb21wYXJlIGl0IHdpdGggaW5pdF9zZXErZGVsdGEgKi8KIAkJaWYoYWZ0ZXIoYWNrX3NlcSwgdnNlcS0+aW5pdF9zZXErdnNlcS0+ZGVsdGEpKSB7CiAJCQl0aC0+YWNrX3NlcSA9IGh0b25sKGFja19zZXEgLSB2c2VxLT5kZWx0YSk7Ci0JCQlJUF9WU19EQkcoOSwgInZzX2ZpeF9hY2tfc2VxKCk6IHN1YnRyYWN0ZWQgZGVsdGEgIgotCQkJCSAgIiglZCkgZnJvbSBhY2tfc2VxXG4iLCB2c2VxLT5kZWx0YSk7CisJCQlJUF9WU19EQkcoOSwgIiVzKCk6IHN1YnRyYWN0ZWQgZGVsdGEgIgorCQkJCSAgIiglZCkgZnJvbSBhY2tfc2VxXG4iLCBfX2Z1bmNfXywgdnNlcS0+ZGVsdGEpOwogCiAJCX0gZWxzZSB7CiAJCQl0aC0+YWNrX3NlcSA9IGh0b25sKGFja19zZXEgLSB2c2VxLT5wcmV2aW91c19kZWx0YSk7Ci0JCQlJUF9WU19EQkcoOSwgInZzX2ZpeF9hY2tfc2VxKCk6IHN1YnRyYWN0ZWQgIgorCQkJSVBfVlNfREJHKDksICIlcygpOiBzdWJ0cmFjdGVkICIKIAkJCQkgICJwcmV2aW91c19kZWx0YSAoJWQpIGZyb20gYWNrX3NlcVxuIiwKLQkJCQkgIHZzZXEtPnByZXZpb3VzX2RlbHRhKTsKKwkJCQkgIF9fZnVuY19fLCB2c2VxLT5wcmV2aW91c19kZWx0YSk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCA3N2JmZGZlLi4yN2MzMGNmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKQEAgLTIyLDYgKzIyLDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CkBAIC0xNTAsOCArMTUzLDggQEAKIAkJYXRvbWljX2luYygmY3AtPnJlZmNudCk7CiAJCXJldCA9IDE7CiAJfSBlbHNlIHsKLQkJSVBfVlNfRVJSKCJpcF92c19jb25uX2hhc2goKTogcmVxdWVzdCBmb3IgYWxyZWFkeSBoYXNoZWQsICIKLQkJCSAgImNhbGxlZCBmcm9tICVwXG4iLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCQlwcl9lcnIoIiVzKCk6IHJlcXVlc3QgZm9yIGFscmVhZHkgaGFzaGVkLCBjYWxsZWQgZnJvbSAlcEZcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAkJcmV0ID0gMDsKIAl9CiAKQEAgLTY4OSw3ICs2OTIsNyBAQAogCiAJY3AgPSBrbWVtX2NhY2hlX3phbGxvYyhpcF92c19jb25uX2NhY2hlcCwgR0ZQX0FUT01JQyk7CiAJaWYgKGNwID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSX1JMKCJpcF92c19jb25uX25ldzogbm8gbWVtb3J5IGF2YWlsYWJsZS5cbiIpOworCQlJUF9WU19FUlJfUkwoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTEwNzMsMTAgKzEwNzYsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JSVBfVlNfSU5GTygiQ29ubmVjdGlvbiBoYXNoIHRhYmxlIGNvbmZpZ3VyZWQgIgotCQkgICAiKHNpemU9JWQsIG1lbW9yeT0lbGRLYnl0ZXMpXG4iLAotCQkgICBJUF9WU19DT05OX1RBQl9TSVpFLAotCQkgICAobG9uZykoSVBfVlNfQ09OTl9UQUJfU0laRSpzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkpLzEwMjQpOworCXByX2luZm8oIkNvbm5lY3Rpb24gaGFzaCB0YWJsZSBjb25maWd1cmVkICIKKwkJIihzaXplPSVkLCBtZW1vcnk9JWxkS2J5dGVzKVxuIiwKKwkJSVBfVlNfQ09OTl9UQUJfU0laRSwKKwkJKGxvbmcpKElQX1ZTX0NPTk5fVEFCX1NJWkUqc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpKS8xMDI0KTsKIAlJUF9WU19EQkcoMCwgIkVhY2ggY29ubmVjdGlvbiBlbnRyeSBuZWVkcyAlWmQgYnl0ZXMgYXQgbGVhc3RcbiIsCiAJCSAgc2l6ZW9mKHN0cnVjdCBpcF92c19jb25uKSk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCmluZGV4IDhkZGRiMTcuLmI5NTY5OWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtMjQsNiArMjQsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KQEAgLTM4OCw5ICszOTEsOSBAQAogCSAqLwogCWlmICghc3ZjLT5md21hcmsgJiYgcHB0clsxXSAhPSBzdmMtPnBvcnQpIHsKIAkJaWYgKCFzdmMtPnBvcnQpCi0JCQlJUF9WU19FUlIoIlNjaGVkdWxlOiBwb3J0IHplcm8gb25seSBzdXBwb3J0ZWQgIgotCQkJCSAgImluIHBlcnNpc3RlbnQgc2VydmljZXMsICIKLQkJCQkgICJjaGVjayB5b3VyIGlwdnMgY29uZmlndXJhdGlvblxuIik7CisJCQlwcl9lcnIoIlNjaGVkdWxlOiBwb3J0IHplcm8gb25seSBzdXBwb3J0ZWQgIgorCQkJICAgICAgICJpbiBwZXJzaXN0ZW50IHNlcnZpY2VzLCAiCisJCQkgICAgICAgImNoZWNrIHlvdXIgaXB2cyBjb25maWd1cmF0aW9uXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC00NjIsNyArNDY1LDcgQEAKIAkJaXBfdnNfc2VydmljZV9wdXQoc3ZjKTsKIAogCQkvKiBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbiBlbnRyeSAqLwotCQlJUF9WU19EQkcoNiwgImlwX3ZzX2xlYXZlOiBjcmVhdGUgYSBjYWNoZV9ieXBhc3MgZW50cnlcbiIpOworCQlJUF9WU19EQkcoNiwgIiVzKCk6IGNyZWF0ZSBhIGNhY2hlX2J5cGFzcyBlbnRyeVxuIiwgX19mdW5jX18pOwogCQljcCA9IGlwX3ZzX2Nvbm5fbmV3KHN2Yy0+YWYsIGlwaC5wcm90b2NvbCwKIAkJCQkgICAgJmlwaC5zYWRkciwgcHB0clswXSwKIAkJCQkgICAgJmlwaC5kYWRkciwgcHB0clsxXSwKQEAgLTY2NCw4ICs2NjcsOCBAQAogCXVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDsKIAogCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSAwKSB7Ci0JCUlQX1ZTX0VSUigic2hvdWxkbid0IHJlYWNoIGhlcmUsIGJlY2F1c2UgdGhlIGJveCBpcyBvbiB0aGUgIgotCQkJICAiaGFsZiBjb25uZWN0aW9uIGluIHRoZSB0dW4vZHIgbW9kdWxlLlxuIik7CisJCXByX2Vycigic2hvdWxkbid0IHJlYWNoIGhlcmUsIGJlY2F1c2UgdGhlIGJveCBpcyBvbiB0aGUgIgorCQkgICAgICAgImhhbGYgY29ubmVjdGlvbiBpbiB0aGUgdHVuL2RyIG1vZHVsZS5cbiIpOwogCX0KIAogCS8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqLwpAQCAtMTI1Niw3ICsxMjU5LDcgQEAKIAlzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoOwogCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7CiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwotCWludCByZXQsIHJlc3RhcnQsIGFmOworCWludCByZXQsIHJlc3RhcnQsIGFmLCBwa3RzOwogCiAJYWYgPSAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpID8gQUZfSU5FVCA6IEFGX0lORVQ2OwogCkBAIC0xMjc0LDEzICsxMjc3LDI0IEBACiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCi0JaWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7Ci0JCWludCByZWxhdGVkLCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcChza2IsICZyZWxhdGVkLCBob29rbnVtKTsKKyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgorCWlmIChhZiA9PSBBRl9JTkVUNikgeworCQlpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUFY2KSkgeworCQkJaW50IHJlbGF0ZWQsIHZlcmRpY3QgPSBpcF92c19pbl9pY21wX3Y2KHNrYiwgJnJlbGF0ZWQsIGhvb2tudW0pOwogCi0JCWlmIChyZWxhdGVkKQotCQkJcmV0dXJuIHZlcmRpY3Q7Ci0JCWlwX3ZzX2ZpbGxfaXBoZHIoYWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKLQl9CisJCQlpZiAocmVsYXRlZCkKKwkJCQlyZXR1cm4gdmVyZGljdDsKKwkJCWlwX3ZzX2ZpbGxfaXBoZHIoYWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKKwkJfQorCX0gZWxzZQorI2VuZGlmCisJCWlmICh1bmxpa2VseShpcGgucHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSkgeworCQkJaW50IHJlbGF0ZWQsIHZlcmRpY3QgPSBpcF92c19pbl9pY21wKHNrYiwgJnJlbGF0ZWQsIGhvb2tudW0pOworCisJCQlpZiAocmVsYXRlZCkKKwkJCQlyZXR1cm4gdmVyZGljdDsKKwkJCWlwX3ZzX2ZpbGxfaXBoZHIoYWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKKwkJfQogCiAJLyogUHJvdG9jb2wgc3VwcG9ydGVkPyAqLwogCXBwID0gaXBfdnNfcHJvdG9fZ2V0KGlwaC5wcm90b2NvbCk7CkBAIC0xMzQzLDEyICsxMzU3LDEyIEBACiAJICogU3luYyBjb25uZWN0aW9uIGlmIGl0IGlzIGFib3V0IHRvIGNsb3NlIHRvCiAJICogZW5jb3JhZ2UgdGhlIHN0YW5kYnkgc2VydmVycyB0byB1cGRhdGUgdGhlIGNvbm5lY3Rpb25zIHRpbWVvdXQKIAkgKi8KLQlhdG9taWNfaW5jKCZjcC0+aW5fcGt0cyk7CisJcGt0cyA9IGF0b21pY19hZGRfcmV0dXJuKDEsICZjcC0+aW5fcGt0cyk7CiAJaWYgKGFmID09IEFGX0lORVQgJiYKIAkgICAgKGlwX3ZzX3N5bmNfc3RhdGUgJiBJUF9WU19TVEFURV9NQVNURVIpICYmCiAJICAgICgoKGNwLT5wcm90b2NvbCAhPSBJUFBST1RPX1RDUCB8fAogCSAgICAgICBjcC0+c3RhdGUgPT0gSVBfVlNfVENQX1NfRVNUQUJMSVNIRUQpICYmCi0JICAgICAgKGF0b21pY19yZWFkKCZjcC0+aW5fcGt0cykgJSBzeXNjdGxfaXBfdnNfc3luY190aHJlc2hvbGRbMV0KKwkgICAgICAocGt0cyAlIHN5c2N0bF9pcF92c19zeW5jX3RocmVzaG9sZFsxXQogCSAgICAgICA9PSBzeXNjdGxfaXBfdnNfc3luY190aHJlc2hvbGRbMF0pKSB8fAogCSAgICAgKChjcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApICYmIChjcC0+b2xkX3N0YXRlICE9IGNwLT5zdGF0ZSkgJiYKIAkgICAgICAoKGNwLT5zdGF0ZSA9PSBJUF9WU19UQ1BfU19GSU5fV0FJVCkgfHwKQEAgLTE0ODcsNyArMTUwMSw3IEBACiAKIAlyZXQgPSBpcF92c19jb250cm9sX2luaXQoKTsKIAlpZiAocmV0IDwgMCkgewotCQlJUF9WU19FUlIoImNhbid0IHNldHVwIGNvbnRyb2wuXG4iKTsKKwkJcHJfZXJyKCJjYW4ndCBzZXR1cCBjb250cm9sLlxuIik7CiAJCWdvdG8gY2xlYW51cF9lc3RpbWF0b3I7CiAJfQogCkBAIC0xNDk1LDIzICsxNTA5LDIzIEBACiAKIAlyZXQgPSBpcF92c19hcHBfaW5pdCgpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiY2FuJ3Qgc2V0dXAgYXBwbGljYXRpb24gaGVscGVyLlxuIik7CisJCXByX2VycigiY2FuJ3Qgc2V0dXAgYXBwbGljYXRpb24gaGVscGVyLlxuIik7CiAJCWdvdG8gY2xlYW51cF9wcm90b2NvbDsKIAl9CiAKIAlyZXQgPSBpcF92c19jb25uX2luaXQoKTsKIAlpZiAocmV0IDwgMCkgewotCQlJUF9WU19FUlIoImNhbid0IHNldHVwIGNvbm5lY3Rpb24gdGFibGUuXG4iKTsKKwkJcHJfZXJyKCJjYW4ndCBzZXR1cCBjb25uZWN0aW9uIHRhYmxlLlxuIik7CiAJCWdvdG8gY2xlYW51cF9hcHA7CiAJfQogCiAJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXBfdnNfb3BzLCBBUlJBWV9TSVpFKGlwX3ZzX29wcykpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiY2FuJ3QgcmVnaXN0ZXIgaG9va3MuXG4iKTsKKwkJcHJfZXJyKCJjYW4ndCByZWdpc3RlciBob29rcy5cbiIpOwogCQlnb3RvIGNsZWFudXBfY29ubjsKIAl9CiAKLQlJUF9WU19JTkZPKCJpcHZzIGxvYWRlZC5cbiIpOworCXByX2luZm8oImlwdnMgbG9hZGVkLlxuIik7CiAJcmV0dXJuIHJldDsKIAogICBjbGVhbnVwX2Nvbm46CkBAIC0xNTM0LDcgKzE1NDgsNyBAQAogCWlwX3ZzX3Byb3RvY29sX2NsZWFudXAoKTsKIAlpcF92c19jb250cm9sX2NsZWFudXAoKTsKIAlpcF92c19lc3RpbWF0b3JfY2xlYW51cCgpOwotCUlQX1ZTX0lORk8oImlwdnMgdW5sb2FkZWQuXG4iKTsKKwlwcl9pbmZvKCJpcHZzIHVubG9hZGVkLlxuIik7CiB9CiAKIG1vZHVsZV9pbml0KGlwX3ZzX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCmluZGV4IDdjMTMzM2MuLmZiYTI4OTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKQEAgLTE4LDYgKzE4LDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMzQwLDggKzM0Myw4IEBACiAJdW5zaWduZWQgaGFzaDsKIAogCWlmIChzdmMtPmZsYWdzICYgSVBfVlNfU1ZDX0ZfSEFTSEVEKSB7Ci0JCUlQX1ZTX0VSUigiaXBfdnNfc3ZjX2hhc2goKTogcmVxdWVzdCBmb3IgYWxyZWFkeSBoYXNoZWQsICIKLQkJCSAgImNhbGxlZCBmcm9tICVwXG4iLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCQlwcl9lcnIoIiVzKCk6IHJlcXVlc3QgZm9yIGFscmVhZHkgaGFzaGVkLCBjYWxsZWQgZnJvbSAlcEZcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zNzQsOCArMzc3LDggQEAKIHN0YXRpYyBpbnQgaXBfdnNfc3ZjX3VuaGFzaChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKQogewogCWlmICghKHN2Yy0+ZmxhZ3MgJiBJUF9WU19TVkNfRl9IQVNIRUQpKSB7Ci0JCUlQX1ZTX0VSUigiaXBfdnNfc3ZjX3VuaGFzaCgpOiByZXF1ZXN0IGZvciB1bmhhc2ggZmxhZ2dlZCwgIgotCQkJICAiY2FsbGVkIGZyb20gJXBcbiIsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJCXByX2VycigiJXMoKTogcmVxdWVzdCBmb3IgdW5oYXNoIGZsYWdnZWQsIGNhbGxlZCBmcm9tICVwRlxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTg0MSw3ICs4NDQsNyBAQAogCiAJZGVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcF92c19kZXN0KSwgR0ZQX0FUT01JQyk7CiAJaWYgKGRlc3QgPT0gTlVMTCkgewotCQlJUF9WU19FUlIoImlwX3ZzX25ld19kZXN0OiBrbWFsbG9jIGZhaWxlZC5cbiIpOworCQlwcl9lcnIoIiVzKCk6IG5vIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC04ODUsMTMgKzg4OCwxMyBAQAogCUVudGVyRnVuY3Rpb24oMik7CiAKIAlpZiAodWRlc3QtPndlaWdodCA8IDApIHsKLQkJSVBfVlNfRVJSKCJpcF92c19hZGRfZGVzdCgpOiBzZXJ2ZXIgd2VpZ2h0IGxlc3MgdGhhbiB6ZXJvXG4iKTsKKwkJcHJfZXJyKCIlcygpOiBzZXJ2ZXIgd2VpZ2h0IGxlc3MgdGhhbiB6ZXJvXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRVJBTkdFOwogCX0KIAogCWlmICh1ZGVzdC0+bF90aHJlc2hvbGQgPiB1ZGVzdC0+dV90aHJlc2hvbGQpIHsKLQkJSVBfVlNfRVJSKCJpcF92c19hZGRfZGVzdCgpOiBsb3dlciB0aHJlc2hvbGQgaXMgaGlnaGVyIHRoYW4gIgotCQkJICAidXBwZXIgdGhyZXNob2xkXG4iKTsKKwkJcHJfZXJyKCIlcygpOiBsb3dlciB0aHJlc2hvbGQgaXMgaGlnaGVyIHRoYW4gdXBwZXIgdGhyZXNob2xkXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKQEAgLTkwMyw3ICs5MDYsNyBAQAogCWRlc3QgPSBpcF92c19sb29rdXBfZGVzdChzdmMsICZkYWRkciwgZHBvcnQpOwogCiAJaWYgKGRlc3QgIT0gTlVMTCkgewotCQlJUF9WU19EQkcoMSwgImlwX3ZzX2FkZF9kZXN0KCk6IGRlc3QgYWxyZWFkeSBleGlzdHNcbiIpOworCQlJUF9WU19EQkcoMSwgIiVzKCk6IGRlc3QgYWxyZWFkeSBleGlzdHNcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJfQogCkBAIC05OTcsMTMgKzEwMDAsMTMgQEAKIAlFbnRlckZ1bmN0aW9uKDIpOwogCiAJaWYgKHVkZXN0LT53ZWlnaHQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiaXBfdnNfZWRpdF9kZXN0KCk6IHNlcnZlciB3ZWlnaHQgbGVzcyB0aGFuIHplcm9cbiIpOworCQlwcl9lcnIoIiVzKCk6IHNlcnZlciB3ZWlnaHQgbGVzcyB0aGFuIHplcm9cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FUkFOR0U7CiAJfQogCiAJaWYgKHVkZXN0LT5sX3RocmVzaG9sZCA+IHVkZXN0LT51X3RocmVzaG9sZCkgewotCQlJUF9WU19FUlIoImlwX3ZzX2VkaXRfZGVzdCgpOiBsb3dlciB0aHJlc2hvbGQgaXMgaGlnaGVyIHRoYW4gIgotCQkJICAidXBwZXIgdGhyZXNob2xkXG4iKTsKKwkJcHJfZXJyKCIlcygpOiBsb3dlciB0aHJlc2hvbGQgaXMgaGlnaGVyIHRoYW4gdXBwZXIgdGhyZXNob2xkXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKQEAgLTEwMTUsNyArMTAxOCw3IEBACiAJZGVzdCA9IGlwX3ZzX2xvb2t1cF9kZXN0KHN2YywgJmRhZGRyLCBkcG9ydCk7CiAKIAlpZiAoZGVzdCA9PSBOVUxMKSB7Ci0JCUlQX1ZTX0RCRygxLCAiaXBfdnNfZWRpdF9kZXN0KCk6IGRlc3QgZG9lc24ndCBleGlzdFxuIik7CisJCUlQX1ZTX0RCRygxLCAiJXMoKTogZGVzdCBkb2Vzbid0IGV4aXN0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIApAQCAtMTExNSw3ICsxMTE4LDcgQEAKIAlkZXN0ID0gaXBfdnNfbG9va3VwX2Rlc3Qoc3ZjLCAmdWRlc3QtPmFkZHIsIGRwb3J0KTsKIAogCWlmIChkZXN0ID09IE5VTEwpIHsKLQkJSVBfVlNfREJHKDEsICJpcF92c19kZWxfZGVzdCgpOiBkZXN0aW5hdGlvbiBub3QgZm91bmQhXG4iKTsKKwkJSVBfVlNfREJHKDEsICIlcygpOiBkZXN0aW5hdGlvbiBub3QgZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIApAQCAtMTE2MSw4ICsxMTY0LDcgQEAKIAkvKiBMb29rdXAgdGhlIHNjaGVkdWxlciBieSAndS0+c2NoZWRfbmFtZScgKi8KIAlzY2hlZCA9IGlwX3ZzX3NjaGVkdWxlcl9nZXQodS0+c2NoZWRfbmFtZSk7CiAJaWYgKHNjaGVkID09IE5VTEwpIHsKLQkJSVBfVlNfSU5GTygiU2NoZWR1bGVyIG1vZHVsZSBpcF92c18lcyBub3QgZm91bmRcbiIsCi0JCQkgICB1LT5zY2hlZF9uYW1lKTsKKwkJcHJfaW5mbygiU2NoZWR1bGVyIG1vZHVsZSBpcF92c18lcyBub3QgZm91bmRcbiIsIHUtPnNjaGVkX25hbWUpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIG91dF9tb2RfZGVjOwogCX0KQEAgLTExNzYsNyArMTE3OCw3IEBACiAKIAlzdmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VydmljZSksIEdGUF9BVE9NSUMpOwogCWlmIChzdmMgPT0gTlVMTCkgewotCQlJUF9WU19EQkcoMSwgImlwX3ZzX2FkZF9zZXJ2aWNlOiBrbWFsbG9jIGZhaWxlZC5cbiIpOworCQlJUF9WU19EQkcoMSwgIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMTI1OSw4ICsxMjYxLDcgQEAKIAkgKi8KIAlzY2hlZCA9IGlwX3ZzX3NjaGVkdWxlcl9nZXQodS0+c2NoZWRfbmFtZSk7CiAJaWYgKHNjaGVkID09IE5VTEwpIHsKLQkJSVBfVlNfSU5GTygiU2NoZWR1bGVyIG1vZHVsZSBpcF92c18lcyBub3QgZm91bmRcbiIsCi0JCQkgICB1LT5zY2hlZF9uYW1lKTsKKwkJcHJfaW5mbygiU2NoZWR1bGVyIG1vZHVsZSBpcF92c18lcyBub3QgZm91bmRcbiIsIHUtPnNjaGVkX25hbWUpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAJb2xkX3NjaGVkID0gc2NoZWQ7CkBAIC0yMDc3LDggKzIwNzgsOCBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKGxlbiAhPSBzZXRfYXJnbGVuW1NFVF9DTURJRChjbWQpXSkgewotCQlJUF9WU19FUlIoInNldF9jdGw6IGxlbiAldSAhPSAldVxuIiwKLQkJCSAgbGVuLCBzZXRfYXJnbGVuW1NFVF9DTURJRChjbWQpXSk7CisJCXByX2Vycigic2V0X2N0bDogbGVuICV1ICE9ICV1XG4iLAorCQkgICAgICAgbGVuLCBzZXRfYXJnbGVuW1NFVF9DTURJRChjbWQpXSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjEyOSw5ICsyMTMwLDkgQEAKIAogCS8qIENoZWNrIGZvciB2YWxpZCBwcm90b2NvbDogVENQIG9yIFVEUCwgZXZlbiBmb3IgZndtYXJrIT0wICovCiAJaWYgKHVzdmMucHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJiYgdXN2Yy5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkgewotCQlJUF9WU19FUlIoInNldF9jdGw6IGludmFsaWQgcHJvdG9jb2w6ICVkICVwSTQ6JWQgJXNcbiIsCi0JCQkgIHVzdmMucHJvdG9jb2wsICZ1c3ZjLmFkZHIuaXAsCi0JCQkgIG50b2hzKHVzdmMucG9ydCksIHVzdmMuc2NoZWRfbmFtZSk7CisJCXByX2Vycigic2V0X2N0bDogaW52YWxpZCBwcm90b2NvbDogJWQgJXBJNDolZCAlc1xuIiwKKwkJICAgICAgIHVzdmMucHJvdG9jb2wsICZ1c3ZjLmFkZHIuaXAsCisJCSAgICAgICBudG9ocyh1c3ZjLnBvcnQpLCB1c3ZjLnNjaGVkX25hbWUpOwogCQlyZXQgPSAtRUZBVUxUOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpAQCAtMjM1Niw4ICsyMzU3LDggQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmICgqbGVuIDwgZ2V0X2FyZ2xlbltHRVRfQ01ESUQoY21kKV0pIHsKLQkJSVBfVlNfRVJSKCJnZXRfY3RsOiBsZW4gJXUgPCAldVxuIiwKLQkJCSAgKmxlbiwgZ2V0X2FyZ2xlbltHRVRfQ01ESUQoY21kKV0pOworCQlwcl9lcnIoImdldF9jdGw6IGxlbiAldSA8ICV1XG4iLAorCQkgICAgICAgKmxlbiwgZ2V0X2FyZ2xlbltHRVRfQ01ESUQoY21kKV0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI0MDIsNyArMjQwMyw3IEBACiAJCXNpemUgPSBzaXplb2YoKmdldCkgKwogCQkJc2l6ZW9mKHN0cnVjdCBpcF92c19zZXJ2aWNlX2VudHJ5KSAqIGdldC0+bnVtX3NlcnZpY2VzOwogCQlpZiAoKmxlbiAhPSBzaXplKSB7Ci0JCQlJUF9WU19FUlIoImxlbmd0aDogJXUgIT0gJXVcbiIsICpsZW4sIHNpemUpOworCQkJcHJfZXJyKCJsZW5ndGg6ICV1ICE9ICV1XG4iLCAqbGVuLCBzaXplKTsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMjQ0Miw3ICsyNDQzLDcgQEAKIAkJc2l6ZSA9IHNpemVvZigqZ2V0KSArCiAJCQlzaXplb2Yoc3RydWN0IGlwX3ZzX2Rlc3RfZW50cnkpICogZ2V0LT5udW1fZGVzdHM7CiAJCWlmICgqbGVuICE9IHNpemUpIHsKLQkJCUlQX1ZTX0VSUigibGVuZ3RoOiAldSAhPSAldVxuIiwgKmxlbiwgc2l6ZSk7CisJCQlwcl9lcnIoImxlbmd0aDogJXUgIT0gJXVcbiIsICpsZW4sIHNpemUpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0zMTcwLDcgKzMxNzEsNyBAQAogCWVsc2UgaWYgKGNtZCA9PSBJUFZTX0NNRF9HRVRfQ09ORklHKQogCQlyZXBseV9jbWQgPSBJUFZTX0NNRF9TRVRfQ09ORklHOwogCWVsc2UgewotCQlJUF9WU19FUlIoInVua25vd24gR2VuZXJpYyBOZXRsaW5rIGNvbW1hbmRcbiIpOworCQlwcl9lcnIoInVua25vd24gR2VuZXJpYyBOZXRsaW5rIGNvbW1hbmRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTMyMzEsMTEgKzMyMzIsMTEgQEAKIAl9CiAKIAlnZW5sbXNnX2VuZChtc2csIHJlcGx5KTsKLQlyZXQgPSBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKKwlyZXQgPSBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiAJZ290byBvdXQ7CiAKIG5sYV9wdXRfZmFpbHVyZToKLQlJUF9WU19FUlIoIm5vdCBlbm91Z2ggc3BhY2UgaW4gTmV0bGluayBtZXNzYWdlXG4iKTsKKwlwcl9lcnIoIm5vdCBlbm91Z2ggc3BhY2UgaW4gTmV0bGluayBtZXNzYWdlXG4iKTsKIAlyZXQgPSAtRU1TR1NJWkU7CiAKIG91dF9lcnI6CkBAIC0zMzY2LDEzICszMzY3LDEzIEBACiAKIAlyZXQgPSBuZl9yZWdpc3Rlcl9zb2Nrb3B0KCZpcF92c19zb2Nrb3B0cyk7CiAJaWYgKHJldCkgewotCQlJUF9WU19FUlIoImNhbm5vdCByZWdpc3RlciBzb2Nrb3B0LlxuIik7CisJCXByX2VycigiY2Fubm90IHJlZ2lzdGVyIHNvY2tvcHQuXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBpcF92c19nZW5sX3JlZ2lzdGVyKCk7CiAJaWYgKHJldCkgewotCQlJUF9WU19FUlIoImNhbm5vdCByZWdpc3RlciBHZW5lcmljIE5ldGxpbmsgaW50ZXJmYWNlLlxuIik7CisJCXByX2VycigiY2Fubm90IHJlZ2lzdGVyIEdlbmVyaWMgTmV0bGluayBpbnRlcmZhY2UuXG4iKTsKIAkJbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KCZpcF92c19zb2Nrb3B0cyk7CiAJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwppbmRleCBhOWRhYzc0Li5mZTNlMTg4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwpAQCAtMzUsNiArMzUsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE0Nyw3ICsxNTAsNyBAQAogCXRibCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcF92c19kaF9idWNrZXQpKklQX1ZTX0RIX1RBQl9TSVpFLAogCQkgICAgICBHRlBfQVRPTUlDKTsKIAlpZiAodGJsID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSKCJpcF92c19kaF9pbml0X3N2YygpOiBubyBtZW1vcnlcbiIpOworCQlwcl9lcnIoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc3ZjLT5zY2hlZF9kYXRhID0gdGJsOwpAQCAtMjE0LDcgKzIxNyw3IEBACiAKIAlpcF92c19maWxsX2lwaGRyKHN2Yy0+YWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfZGhfc2NoZWR1bGUoKTogU2NoZWR1bGluZy4uLlxuIik7CisJSVBfVlNfREJHKDYsICIlcygpOiBTY2hlZHVsaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAl0YmwgPSAoc3RydWN0IGlwX3ZzX2RoX2J1Y2tldCAqKXN2Yy0+c2NoZWRfZGF0YTsKIAlkZXN0ID0gaXBfdnNfZGhfZ2V0KHN2Yy0+YWYsIHRibCwgJmlwaC5kYWRkcik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMKaW5kZXggMmViMjg2MC4uNzAyYjUzYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYwpAQCAtMTEsNiArMTEsMTAgQEAKICAqIENoYW5nZXM6CiAgKgogICovCisKKyNkZWZpbmUgS01TR19DT01QT05FTlQgIklQVlMiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jCmluZGV4IDQyOGVkYmYuLjMzZTJjNzkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMKQEAgLTIyLDYgKzIyLDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zODIsOCArMzg1LDggQEAKIAkJcmV0ID0gcmVnaXN0ZXJfaXBfdnNfYXBwX2luYyhhcHAsIGFwcC0+cHJvdG9jb2wsIHBvcnRzW2ldKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQlJUF9WU19JTkZPKCIlczogbG9hZGVkIHN1cHBvcnQgb24gcG9ydFslZF0gPSAlZFxuIiwKLQkJCSAgIGFwcC0+bmFtZSwgaSwgcG9ydHNbaV0pOworCQlwcl9pbmZvKCIlczogbG9hZGVkIHN1cHBvcnQgb24gcG9ydFslZF0gPSAlZFxuIiwKKwkJCWFwcC0+bmFtZSwgaSwgcG9ydHNbaV0pOwogCX0KIAogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYwppbmRleCAzZWI1ZTI2Li5jMTc1N2YzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMKQEAgLTM5LDYgKzM5LDkgQEAKICAqIG1lIHRvIHdyaXRlIHRoaXMgbW9kdWxlLgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgIklQVlMiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTk5LDcgKzIwMiw3IEBACiAJaWYgKCFlbikgewogCQllbiA9IGttYWxsb2Moc2l6ZW9mKCplbiksIEdGUF9BVE9NSUMpOwogCQlpZiAoIWVuKSB7Ci0JCQlJUF9WU19FUlIoImlwX3ZzX2xibGNfbmV3KCk6IG5vIG1lbW9yeVxuIik7CisJCQlwcl9lcnIoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIApAQCAtMzMyLDcgKzMzNSw3IEBACiAJICovCiAJdGJsID0ga21hbGxvYyhzaXplb2YoKnRibCksIEdGUF9BVE9NSUMpOwogCWlmICh0YmwgPT0gTlVMTCkgewotCQlJUF9WU19FUlIoImlwX3ZzX2xibGNfaW5pdF9zdmMoKTogbm8gbWVtb3J5XG4iKTsKKwkJcHJfZXJyKCIlcygpOiBubyBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXN2Yy0+c2NoZWRfZGF0YSA9IHRibDsKQEAgLTQ3Nyw3ICs0ODAsNyBAQAogCiAJaXBfdnNfZmlsbF9pcGhkcihzdmMtPmFmLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgJmlwaCk7CiAKLQlJUF9WU19EQkcoNiwgImlwX3ZzX2xibGNfc2NoZWR1bGUoKTogU2NoZWR1bGluZy4uLlxuIik7CisJSVBfVlNfREJHKDYsICIlcygpOiBTY2hlZHVsaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBGaXJzdCBsb29rIGluIG91ciBjYWNoZSAqLwogCXJlYWRfbG9jaygmc3ZjLT5zY2hlZF9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKaW5kZXggYzA0Y2U1Ni4uNzE1YjU3ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKQEAgLTM3LDYgKzM3LDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMDgsNyArMTExLDcgQEAKIAogCWUgPSBrbWFsbG9jKHNpemVvZigqZSksIEdGUF9BVE9NSUMpOwogCWlmIChlID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSKCJpcF92c19kZXN0X3NldF9pbnNlcnQoKTogbm8gbWVtb3J5XG4iKTsKKwkJcHJfZXJyKCIlcygpOiBubyBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0yMDIsOCArMjA1LDkgQEAKIAkJfQogCX0KIAotCUlQX1ZTX0RCR19CVUYoNiwgImlwX3ZzX2Rlc3Rfc2V0X21pbjogc2VydmVyICVzOiVkICIKKwlJUF9WU19EQkdfQlVGKDYsICIlcygpOiBzZXJ2ZXIgJXM6JWQgIgogCQkgICAgICAiYWN0aXZlY29ubnMgJWQgcmVmY250ICVkIHdlaWdodCAlZCBvdmVyaGVhZCAlZFxuIiwKKwkJICAgICAgX19mdW5jX18sCiAJCSAgICAgIElQX1ZTX0RCR19BRERSKGxlYXN0LT5hZiwgJmxlYXN0LT5hZGRyKSwKIAkJICAgICAgbnRvaHMobGVhc3QtPnBvcnQpLAogCQkgICAgICBhdG9taWNfcmVhZCgmbGVhc3QtPmFjdGl2ZWNvbm5zKSwKQEAgLTI0OSw4ICsyNTMsOSBAQAogCQl9CiAJfQogCi0JSVBfVlNfREJHX0JVRig2LCAiaXBfdnNfZGVzdF9zZXRfbWF4OiBzZXJ2ZXIgJXM6JWQgIgorCUlQX1ZTX0RCR19CVUYoNiwgIiVzKCk6IHNlcnZlciAlczolZCAiCiAJCSAgICAgICJhY3RpdmVjb25ucyAlZCByZWZjbnQgJWQgd2VpZ2h0ICVkIG92ZXJoZWFkICVkXG4iLAorCQkgICAgICBfX2Z1bmNfXywKIAkJICAgICAgSVBfVlNfREJHX0FERFIobW9zdC0+YWYsICZtb3N0LT5hZGRyKSwgbnRvaHMobW9zdC0+cG9ydCksCiAJCSAgICAgIGF0b21pY19yZWFkKCZtb3N0LT5hY3RpdmVjb25ucyksCiAJCSAgICAgIGF0b21pY19yZWFkKCZtb3N0LT5yZWZjbnQpLApAQCAtMzc0LDcgKzM3OSw3IEBACiAJaWYgKCFlbikgewogCQllbiA9IGttYWxsb2Moc2l6ZW9mKCplbiksIEdGUF9BVE9NSUMpOwogCQlpZiAoIWVuKSB7Ci0JCQlJUF9WU19FUlIoImlwX3ZzX2xibGNyX25ldygpOiBubyBtZW1vcnlcbiIpOworCQkJcHJfZXJyKCIlcygpOiBubyBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKQEAgLTUwOCw3ICs1MTMsNyBAQAogCSAqLwogCXRibCA9IGttYWxsb2Moc2l6ZW9mKCp0YmwpLCBHRlBfQVRPTUlDKTsKIAlpZiAodGJsID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSKCJpcF92c19sYmxjcl9pbml0X3N2YygpOiBubyBtZW1vcnlcbiIpOworCQlwcl9lcnIoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc3ZjLT5zY2hlZF9kYXRhID0gdGJsOwpAQCAtNjU0LDcgKzY1OSw3IEBACiAKIAlpcF92c19maWxsX2lwaGRyKHN2Yy0+YWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfbGJsY3Jfc2NoZWR1bGUoKTogU2NoZWR1bGluZy4uLlxuIik7CisJSVBfVlNfREJHKDYsICIlcygpOiBTY2hlZHVsaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBGaXJzdCBsb29rIGluIG91ciBjYWNoZSAqLwogCXJlYWRfbG9jaygmc3ZjLT5zY2hlZF9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmMKaW5kZXggZDBkYWRjOC4uNGY2OWRiMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmMKQEAgLTE0LDYgKzE0LDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCkBAIC00NCw3ICs0Nyw3IEBACiAJc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsICpsZWFzdCA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGxvaCA9IDAsIGRvaDsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfbGNfc2NoZWR1bGUoKTogU2NoZWR1bGluZy4uLlxuIik7CisJSVBfVlNfREJHKDYsICIlcygpOiBTY2hlZHVsaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKgogCSAqIFNpbXBseSBzZWxlY3QgdGhlIHNlcnZlciB3aXRoIHRoZSBsZWFzdCBudW1iZXIgb2YKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKaW5kZXggNjk0OTUyZC4uYzQxM2UxOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKQEAgLTMxLDYgKzMxLDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCkBAIC01Nyw3ICs2MCw3IEBACiAJc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsICpsZWFzdCA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGxvaCA9IDAsIGRvaDsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfbnFfc2NoZWR1bGUoKTogU2NoZWR1bGluZy4uLlxuIik7CisJSVBfVlNfREJHKDYsICIlcygpOiBTY2hlZHVsaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKgogCSAqIFdlIGNhbGN1bGF0ZSB0aGUgbG9hZCBvZiBlYWNoIGRlc3Qgc2VydmVyIGFzIGZvbGxvd3M6CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jCmluZGV4IGEwMTUyMGUuLjNlNzY3MTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jCkBAIC0xMyw2ICsxMyw5IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgIklQVlMiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTEyNCw3ICsxMjcsOCBAQAogICoJU2V0IHRpbWVvdXQgdmFsdWUgZm9yIHN0YXRlIHNwZWNpZmllZCBieSBuYW1lCiAgKi8KIGludAotaXBfdnNfc2V0X3N0YXRlX3RpbWVvdXQoaW50ICp0YWJsZSwgaW50IG51bSwgY2hhciAqKm5hbWVzLCBjaGFyICpuYW1lLCBpbnQgdG8pCitpcF92c19zZXRfc3RhdGVfdGltZW91dChpbnQgKnRhYmxlLCBpbnQgbnVtLCBjb25zdCBjaGFyICpjb25zdCAqbmFtZXMsCisJCQljb25zdCBjaGFyICpuYW1lLCBpbnQgdG8pCiB7CiAJaW50IGk7CiAKQEAgLTE4MSw3ICsxODUsNyBAQAogCQkJCSZpaC0+ZGFkZHIsIG50b2hzKHBwdHJbMV0pKTsKIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiSVBWUzogJXM6ICVzXG4iLCBtc2csIGJ1Zik7CisJcHJfZGVidWcoIiVzOiAlc1xuIiwgbXNnLCBidWYpOwogfQogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKQEAgLTIxNSw3ICsyMTksNyBAQAogCQkJCSZpaC0+ZGFkZHIsIG50b2hzKHBwdHJbMV0pKTsKIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiSVBWUzogJXM6ICVzXG4iLCBtc2csIGJ1Zik7CisJcHJfZGVidWcoIiVzOiAlc1xuIiwgbXNnLCBidWYpOwogfQogI2VuZGlmCiAKQEAgLTI1OSw3ICsyNjMsNyBAQAogI2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19FU1AKIAlSRUdJU1RFUl9QUk9UT0NPTCgmaXBfdnNfcHJvdG9jb2xfZXNwKTsKICNlbmRpZgotCUlQX1ZTX0lORk8oIlJlZ2lzdGVyZWQgcHJvdG9jb2xzICglcylcbiIsICZwcm90b2NvbHNbMl0pOworCXByX2luZm8oIlJlZ2lzdGVyZWQgcHJvdG9jb2xzICglcylcbiIsICZwcm90b2NvbHNbMl0pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fYWhfZXNwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fYWhfZXNwLmMKaW5kZXggNzlmNTZjMS4uYzMwYjQzYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX2FoX2VzcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19haF9lc3AuYwpAQCAtMTAsNiArMTAsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTM4LDcgKzE0MSw3IEBACiAJCXNwcmludGYoYnVmLCAiJXMgJXBJNC0+JXBJNCIsCiAJCQlwcC0+bmFtZSwgJmloLT5zYWRkciwgJmloLT5kYWRkcik7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiSVBWUzogJXM6ICVzXG4iLCBtc2csIGJ1Zik7CisJcHJfZGVidWcoIiVzOiAlc1xuIiwgbXNnLCBidWYpOwogfQogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKQEAgLTE1Niw3ICsxNTksNyBAQAogCQlzcHJpbnRmKGJ1ZiwgIiVzICVwSTYtPiVwSTYiLAogCQkJcHAtPm5hbWUsICZpaC0+c2FkZHIsICZpaC0+ZGFkZHIpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIklQVlM6ICVzOiAlc1xuIiwgbXNnLCBidWYpOworCXByX2RlYnVnKCIlczogJXNcbiIsIG1zZywgYnVmKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKaW5kZXggOGNiYTQxOC4uOTFkMjhlMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwpAQCAtMTMsNiArMTMsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4gICAgICAgICAgICAgICAgICAvKiBmb3IgdGNwaGRyICovCkBAIC0zNzQsNyArMzc3LDcgQEAKIAlbSVBfVlNfVENQX1NfTEFTVF0JCT0JMipIWiwKIH07CiAKLXN0YXRpYyBjaGFyICogdGNwX3N0YXRlX25hbWVfdGFibGVbSVBfVlNfVENQX1NfTEFTVCsxXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0Y3Bfc3RhdGVfbmFtZV90YWJsZVtJUF9WU19UQ1BfU19MQVNUKzFdID0gewogCVtJUF9WU19UQ1BfU19OT05FXQkJPQkiTk9ORSIsCiAJW0lQX1ZTX1RDUF9TX0VTVEFCTElTSEVEXQk9CSJFU1RBQkxJU0hFRCIsCiAJW0lQX1ZTX1RDUF9TX1NZTl9TRU5UXQkJPQkiU1lOX1NFTlQiLApAQCAtNjYxLDcgKzY2NCw3IEBACiAJCQkJYnJlYWs7CiAJCQlzcGluX3VubG9jaygmdGNwX2FwcF9sb2NrKTsKIAotCQkJSVBfVlNfREJHX0JVRig5LCAiJXM6IEJpbmRpbmcgY29ubiAlczoldS0+IgorCQkJSVBfVlNfREJHX0JVRig5LCAiJXMoKTogQmluZGluZyBjb25uICVzOiV1LT4iCiAJCQkJICAgICAgIiVzOiV1IHRvIGFwcCAlcyBvbiBwb3J0ICV1XG4iLAogCQkJCSAgICAgIF9fZnVuY19fLAogCQkJCSAgICAgIElQX1ZTX0RCR19BRERSKGNwLT5hZiwgJmNwLT5jYWRkciksCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKaW5kZXggZDI5MzBhNy4uZTdhNjg4NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYwpAQCAtMTMsNiArMTMsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNDQyLDcgKzQ0NSw3IEBACiAJCQkJYnJlYWs7CiAJCQlzcGluX3VubG9jaygmdWRwX2FwcF9sb2NrKTsKIAotCQkJSVBfVlNfREJHX0JVRig5LCAiJXM6IEJpbmRpbmcgY29ubiAlczoldS0+IgorCQkJSVBfVlNfREJHX0JVRig5LCAiJXMoKTogQmluZGluZyBjb25uICVzOiV1LT4iCiAJCQkJICAgICAgIiVzOiV1IHRvIGFwcCAlcyBvbiBwb3J0ICV1XG4iLAogCQkJCSAgICAgIF9fZnVuY19fLAogCQkJCSAgICAgIElQX1ZTX0RCR19BRERSKGNwLT5hZiwgJmNwLT5jYWRkciksCkBAIC00NjksNyArNDcyLDcgQEAKIAlbSVBfVlNfVURQX1NfTEFTVF0JCT0JMipIWiwKIH07CiAKLXN0YXRpYyBjaGFyICogdWRwX3N0YXRlX25hbWVfdGFibGVbSVBfVlNfVURQX1NfTEFTVCsxXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB1ZHBfc3RhdGVfbmFtZV90YWJsZVtJUF9WU19VRFBfU19MQVNUKzFdID0gewogCVtJUF9WU19VRFBfU19OT1JNQUxdCQk9CSJVRFAiLAogCVtJUF9WU19VRFBfU19MQVNUXQkJPQkiQlVHISIsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuYwppbmRleCAyZDE2YWI3Li5lMjEwZjM3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuYwpAQCAtMTksNiArMTksOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKQEAgLTQ4LDcgKzUxLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcTsKIAlzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdDsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfcnJfc2NoZWR1bGUoKTogU2NoZWR1bGluZy4uLlxuIik7CisJSVBfVlNfREJHKDYsICIlcygpOiBTY2hlZHVsaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAl3cml0ZV9sb2NrKCZzdmMtPnNjaGVkX2xvY2spOwogCXAgPSAoc3RydWN0IGxpc3RfaGVhZCAqKXN2Yy0+c2NoZWRfZGF0YTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zY2hlZC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NjaGVkLmMKaW5kZXggYTQ2YWQ5ZS4uYmJjMWFjNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NjaGVkLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NjaGVkLmMKQEAgLTE3LDYgKzE3LDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC00NCwxMSArNDcsMTEgQEAKIAlpbnQgcmV0OwogCiAJaWYgKHN2YyA9PSBOVUxMKSB7Ci0JCUlQX1ZTX0VSUigiaXBfdnNfYmluZF9zY2hlZHVsZXIoKTogc3ZjIGFyZyBOVUxMXG4iKTsKKwkJcHJfZXJyKCIlcygpOiBzdmMgYXJnIE5VTExcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChzY2hlZHVsZXIgPT0gTlVMTCkgewotCQlJUF9WU19FUlIoImlwX3ZzX2JpbmRfc2NoZWR1bGVyKCk6IHNjaGVkdWxlciBhcmcgTlVMTFxuIik7CisJCXByX2VycigiJXMoKTogc2NoZWR1bGVyIGFyZyBOVUxMXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTcsNyArNjAsNyBAQAogCWlmIChzY2hlZHVsZXItPmluaXRfc2VydmljZSkgewogCQlyZXQgPSBzY2hlZHVsZXItPmluaXRfc2VydmljZShzdmMpOwogCQlpZiAocmV0KSB7Ci0JCQlJUF9WU19FUlIoImlwX3ZzX2JpbmRfc2NoZWR1bGVyKCk6IGluaXQgZXJyb3JcbiIpOworCQkJcHJfZXJyKCIlcygpOiBpbml0IGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtNzQsMTkgKzc3LDE5IEBACiAJc3RydWN0IGlwX3ZzX3NjaGVkdWxlciAqc2NoZWQ7CiAKIAlpZiAoc3ZjID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSKCJpcF92c191bmJpbmRfc2NoZWR1bGVyKCk6IHN2YyBhcmcgTlVMTFxuIik7CisJCXByX2VycigiJXMoKTogc3ZjIGFyZyBOVUxMXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXNjaGVkID0gc3ZjLT5zY2hlZHVsZXI7CiAJaWYgKHNjaGVkID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSKCJpcF92c191bmJpbmRfc2NoZWR1bGVyKCk6IHN2YyBpc24ndCBib3VuZFxuIik7CisJCXByX2VycigiJXMoKTogc3ZjIGlzbid0IGJvdW5kXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChzY2hlZC0+ZG9uZV9zZXJ2aWNlKSB7CiAJCWlmIChzY2hlZC0+ZG9uZV9zZXJ2aWNlKHN2YykgIT0gMCkgewotCQkJSVBfVlNfRVJSKCJpcF92c191bmJpbmRfc2NoZWR1bGVyKCk6IGRvbmUgZXJyb3JcbiIpOworCQkJcHJfZXJyKCIlcygpOiBkb25lIGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTEwMyw4ICsxMDYsNyBAQAogewogCXN0cnVjdCBpcF92c19zY2hlZHVsZXIgKnNjaGVkOwogCi0JSVBfVlNfREJHKDIsICJpcF92c19zY2hlZF9nZXRieW5hbWUoKTogc2NoZWRfbmFtZSBcIiVzXCJcbiIsCi0JCSAgc2NoZWRfbmFtZSk7CisJSVBfVlNfREJHKDIsICIlcygpOiBzY2hlZF9uYW1lIFwiJXNcIlxuIiwgX19mdW5jX18sIHNjaGVkX25hbWUpOwogCiAJcmVhZF9sb2NrX2JoKCZfX2lwX3ZzX3NjaGVkX2xvY2spOwogCkBAIC0xNzAsMTIgKzE3MiwxMiBAQAogCXN0cnVjdCBpcF92c19zY2hlZHVsZXIgKnNjaGVkOwogCiAJaWYgKCFzY2hlZHVsZXIpIHsKLQkJSVBfVlNfRVJSKCJyZWdpc3Rlcl9pcF92c19zY2hlZHVsZXIoKTogTlVMTCBhcmdcbiIpOworCQlwcl9lcnIoIiVzKCk6IE5VTEwgYXJnXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICghc2NoZWR1bGVyLT5uYW1lKSB7Ci0JCUlQX1ZTX0VSUigicmVnaXN0ZXJfaXBfdnNfc2NoZWR1bGVyKCk6IE5VTEwgc2NoZWR1bGVyX25hbWVcbiIpOworCQlwcl9lcnIoIiVzKCk6IE5VTEwgc2NoZWR1bGVyX25hbWVcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xODcsOCArMTg5LDggQEAKIAlpZiAoIWxpc3RfZW1wdHkoJnNjaGVkdWxlci0+bl9saXN0KSkgewogCQl3cml0ZV91bmxvY2tfYmgoJl9faXBfdnNfc2NoZWRfbG9jayk7CiAJCWlwX3ZzX3VzZV9jb3VudF9kZWMoKTsKLQkJSVBfVlNfRVJSKCJyZWdpc3Rlcl9pcF92c19zY2hlZHVsZXIoKTogWyVzXSBzY2hlZHVsZXIgIgotCQkJICAiYWxyZWFkeSBsaW5rZWRcbiIsIHNjaGVkdWxlci0+bmFtZSk7CisJCXByX2VycigiJXMoKTogWyVzXSBzY2hlZHVsZXIgYWxyZWFkeSBsaW5rZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc2NoZWR1bGVyLT5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMDAsOSArMjAyLDggQEAKIAkJaWYgKHN0cmNtcChzY2hlZHVsZXItPm5hbWUsIHNjaGVkLT5uYW1lKSA9PSAwKSB7CiAJCQl3cml0ZV91bmxvY2tfYmgoJl9faXBfdnNfc2NoZWRfbG9jayk7CiAJCQlpcF92c191c2VfY291bnRfZGVjKCk7Ci0JCQlJUF9WU19FUlIoInJlZ2lzdGVyX2lwX3ZzX3NjaGVkdWxlcigpOiBbJXNdIHNjaGVkdWxlciAiCi0JCQkJCSJhbHJlYWR5IGV4aXN0ZWQgaW4gdGhlIHN5c3RlbVxuIiwKLQkJCQkJc2NoZWR1bGVyLT5uYW1lKTsKKwkJCXByX2VycigiJXMoKTogWyVzXSBzY2hlZHVsZXIgYWxyZWFkeSBleGlzdGVkICIKKwkJCSAgICAgICAiaW4gdGhlIHN5c3RlbVxuIiwgX19mdW5jX18sIHNjaGVkdWxlci0+bmFtZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTIxMiw3ICsyMTMsNyBAQAogCWxpc3RfYWRkKCZzY2hlZHVsZXItPm5fbGlzdCwgJmlwX3ZzX3NjaGVkdWxlcnMpOwogCXdyaXRlX3VubG9ja19iaCgmX19pcF92c19zY2hlZF9sb2NrKTsKIAotCUlQX1ZTX0lORk8oIlslc10gc2NoZWR1bGVyIHJlZ2lzdGVyZWQuXG4iLCBzY2hlZHVsZXItPm5hbWUpOworCXByX2luZm8oIlslc10gc2NoZWR1bGVyIHJlZ2lzdGVyZWQuXG4iLCBzY2hlZHVsZXItPm5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjQsMTUgKzIyNSwxNSBAQAogaW50IHVucmVnaXN0ZXJfaXBfdnNfc2NoZWR1bGVyKHN0cnVjdCBpcF92c19zY2hlZHVsZXIgKnNjaGVkdWxlcikKIHsKIAlpZiAoIXNjaGVkdWxlcikgewotCQlJUF9WU19FUlIoICJ1bnJlZ2lzdGVyX2lwX3ZzX3NjaGVkdWxlcigpOiBOVUxMIGFyZ1xuIik7CisJCXByX2VycigiJXMoKTogTlVMTCBhcmdcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJd3JpdGVfbG9ja19iaCgmX19pcF92c19zY2hlZF9sb2NrKTsKIAlpZiAobGlzdF9lbXB0eSgmc2NoZWR1bGVyLT5uX2xpc3QpKSB7CiAJCXdyaXRlX3VubG9ja19iaCgmX19pcF92c19zY2hlZF9sb2NrKTsKLQkJSVBfVlNfRVJSKCJ1bnJlZ2lzdGVyX2lwX3ZzX3NjaGVkdWxlcigpOiBbJXNdIHNjaGVkdWxlciAiCi0JCQkgICJpcyBub3QgaW4gdGhlIGxpc3QuIGZhaWxlZFxuIiwgc2NoZWR1bGVyLT5uYW1lKTsKKwkJcHJfZXJyKCIlcygpOiBbJXNdIHNjaGVkdWxlciBpcyBub3QgaW4gdGhlIGxpc3QuIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBzY2hlZHVsZXItPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI0NSw3ICsyNDYsNyBAQAogCS8qIGRlY3JlYXNlIHRoZSBtb2R1bGUgdXNlIGNvdW50ICovCiAJaXBfdnNfdXNlX2NvdW50X2RlYygpOwogCi0JSVBfVlNfSU5GTygiWyVzXSBzY2hlZHVsZXIgdW5yZWdpc3RlcmVkLlxuIiwgc2NoZWR1bGVyLT5uYW1lKTsKKwlwcl9pbmZvKCJbJXNdIHNjaGVkdWxlciB1bnJlZ2lzdGVyZWQuXG4iLCBzY2hlZHVsZXItPm5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMKaW5kZXggMjBlNDY1Ny4uMWFiNzVhOSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuYwpAQCAtMzUsNiArMzUsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKQEAgLTYxLDcgKzY0LDcgQEAKIAlzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgKmxlYXN0OwogCXVuc2lnbmVkIGludCBsb2gsIGRvaDsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfc2VkX3NjaGVkdWxlKCk6IFNjaGVkdWxpbmcuLi5cbiIpOworCUlQX1ZTX0RCRyg2LCAiJXMoKTogU2NoZWR1bGluZy4uLlxuIiwgX19mdW5jX18pOwogCiAJLyoKIAkgKiBXZSBjYWxjdWxhdGUgdGhlIGxvYWQgb2YgZWFjaCBkZXN0IHNlcnZlciBhcyBmb2xsb3dzOgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYwppbmRleCA3NTcwOWViLi44ZTZjZmQzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYwpAQCAtMzIsNiArMzIsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE0NCw3ICsxNDcsNyBAQAogCXRibCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcF92c19zaF9idWNrZXQpKklQX1ZTX1NIX1RBQl9TSVpFLAogCQkgICAgICBHRlBfQVRPTUlDKTsKIAlpZiAodGJsID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSKCJpcF92c19zaF9pbml0X3N2YygpOiBubyBtZW1vcnlcbiIpOworCQlwcl9lcnIoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc3ZjLT5zY2hlZF9kYXRhID0gdGJsOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggNWM0ODM3OC4uZTE3N2YwZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCkBAIC0xNyw2ICsxNyw5IEBACiAgKglKdXN0aW4gT3NzZXZvb3J0CToJRml4IGVuZGlhbiBwcm9ibGVtIG9uIHN5bmMgbWVzc2FnZSBzaXplLgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgIklQVlMiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgpAQCAtMjQzLDcgKzI0Niw3IEBACiAJaWYgKCFjdXJyX3NiKSB7CiAJCWlmICghKGN1cnJfc2I9aXBfdnNfc3luY19idWZmX2NyZWF0ZSgpKSkgewogCQkJc3Bpbl91bmxvY2soJmN1cnJfc2JfbG9jayk7Ci0JCQlJUF9WU19FUlIoImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxuIik7CisJCQlwcl9lcnIoImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC00MDksNyArNDEyLDcgQEAKIAkJCWlmIChkZXN0KQogCQkJCWF0b21pY19kZWMoJmRlc3QtPnJlZmNudCk7CiAJCQlpZiAoIWNwKSB7Ci0JCQkJSVBfVlNfRVJSKCJpcF92c19jb25uX25ldyBmYWlsZWRcbiIpOworCQkJCXByX2VycigiaXBfdnNfY29ubl9uZXcgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0gZWxzZSBpZiAoIWNwLT5kZXN0KSB7CkBAIC01NzcsOCArNTgwLDggQEAKIAogCWFkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldiwgMCwgUlRfU0NPUEVfVU5JVkVSU0UpOwogCWlmICghYWRkcikKLQkJSVBfVlNfRVJSKCJZb3UgcHJvYmFibHkgbmVlZCB0byBzcGVjaWZ5IElQIGFkZHJlc3Mgb24gIgotCQkJICAibXVsdGljYXN0IGludGVyZmFjZS5cbiIpOworCQlwcl9lcnIoIllvdSBwcm9iYWJseSBuZWVkIHRvIHNwZWNpZnkgSVAgYWRkcmVzcyBvbiAiCisJCSAgICAgICAibXVsdGljYXN0IGludGVyZmFjZS5cbiIpOwogCiAJSVBfVlNfREJHKDcsICJiaW5kaW5nIHNvY2tldCB3aXRoICglcykgJXBJNFxuIiwKIAkJICBpZm5hbWUsICZhZGRyKTsKQEAgLTYwMiwxMyArNjA1LDEzIEBACiAJLyogRmlyc3QgY3JlYXRlIGEgc29ja2V0ICovCiAJcmVzdWx0ID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgJnNvY2spOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiRXJyb3IgZHVyaW5nIGNyZWF0aW9uIG9mIHNvY2tldDsgdGVybWluYXRpbmdcbiIpOworCQlwcl9lcnIoIkVycm9yIGR1cmluZyBjcmVhdGlvbiBvZiBzb2NrZXQ7IHRlcm1pbmF0aW5nXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIAl9CiAKIAlyZXN1bHQgPSBzZXRfbWNhc3RfaWYoc29jay0+c2ssIGlwX3ZzX21hc3Rlcl9tY2FzdF9pZm4pOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiRXJyb3Igc2V0dGluZyBvdXRib3VuZCBtY2FzdCBpbnRlcmZhY2VcbiIpOworCQlwcl9lcnIoIkVycm9yIHNldHRpbmcgb3V0Ym91bmQgbWNhc3QgaW50ZXJmYWNlXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTYxNywxNCArNjIwLDE0IEBACiAKIAlyZXN1bHQgPSBiaW5kX21jYXN0aWZfYWRkcihzb2NrLCBpcF92c19tYXN0ZXJfbWNhc3RfaWZuKTsKIAlpZiAocmVzdWx0IDwgMCkgewotCQlJUF9WU19FUlIoIkVycm9yIGJpbmRpbmcgYWRkcmVzcyBvZiB0aGUgbWNhc3QgaW50ZXJmYWNlXG4iKTsKKwkJcHJfZXJyKCJFcnJvciBiaW5kaW5nIGFkZHJlc3Mgb2YgdGhlIG1jYXN0IGludGVyZmFjZVxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJcmVzdWx0ID0gc29jay0+b3BzLT5jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJm1jYXN0X2FkZHIsCiAJCQlzaXplb2Yoc3RydWN0IHNvY2thZGRyKSwgMCk7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJSVBfVlNfRVJSKCJFcnJvciBjb25uZWN0aW5nIHRvIHRoZSBtdWx0aWNhc3QgYWRkclxuIik7CisJCXByX2VycigiRXJyb3IgY29ubmVjdGluZyB0byB0aGUgbXVsdGljYXN0IGFkZHJcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtNjQ3LDcgKzY1MCw3IEBACiAJLyogRmlyc3QgY3JlYXRlIGEgc29ja2V0ICovCiAJcmVzdWx0ID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgJnNvY2spOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiRXJyb3IgZHVyaW5nIGNyZWF0aW9uIG9mIHNvY2tldDsgdGVybWluYXRpbmdcbiIpOworCQlwcl9lcnIoIkVycm9yIGR1cmluZyBjcmVhdGlvbiBvZiBzb2NrZXQ7IHRlcm1pbmF0aW5nXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIAl9CiAKQEAgLTY1Nyw3ICs2NjAsNyBAQAogCXJlc3VsdCA9IHNvY2stPm9wcy0+YmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZtY2FzdF9hZGRyLAogCQkJc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiRXJyb3IgYmluZGluZyB0byB0aGUgbXVsdGljYXN0IGFkZHJcbiIpOworCQlwcl9lcnIoIkVycm9yIGJpbmRpbmcgdG8gdGhlIG11bHRpY2FzdCBhZGRyXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTY2Niw3ICs2NjksNyBAQAogCQkJKHN0cnVjdCBpbl9hZGRyICopICZtY2FzdF9hZGRyLnNpbl9hZGRyLAogCQkJaXBfdnNfYmFja3VwX21jYXN0X2lmbik7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJSVBfVlNfRVJSKCJFcnJvciBqb2luaW5nIHRvIHRoZSBtdWx0aWNhc3QgZ3JvdXBcbiIpOworCQlwcl9lcnIoIkVycm9yIGpvaW5pbmcgdG8gdGhlIG11bHRpY2FzdCBncm91cFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC03MDYsNyArNzA5LDcgQEAKIAltc2ctPnNpemUgPSBodG9ucyhtc2ctPnNpemUpOwogCiAJaWYgKGlwX3ZzX3NlbmRfYXN5bmMoc29jaywgKGNoYXIgKiltc2csIG1zaXplKSAhPSBtc2l6ZSkKLQkJSVBfVlNfRVJSKCJpcF92c19zZW5kX2FzeW5jIGVycm9yXG4iKTsKKwkJcHJfZXJyKCJpcF92c19zZW5kX2FzeW5jIGVycm9yXG4iKTsKIH0KIAogc3RhdGljIGludApAQCAtNzM3LDkgKzc0MCw5IEBACiAJc3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvID0gZGF0YTsKIAlzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYjsKIAotCUlQX1ZTX0lORk8oInN5bmMgdGhyZWFkIHN0YXJ0ZWQ6IHN0YXRlID0gTUFTVEVSLCBtY2FzdF9pZm4gPSAlcywgIgotCQkgICAic3luY2lkID0gJWRcbiIsCi0JCSAgIGlwX3ZzX21hc3Rlcl9tY2FzdF9pZm4sIGlwX3ZzX21hc3Rlcl9zeW5jaWQpOworCXByX2luZm8oInN5bmMgdGhyZWFkIHN0YXJ0ZWQ6IHN0YXRlID0gTUFTVEVSLCBtY2FzdF9pZm4gPSAlcywgIgorCQkic3luY2lkID0gJWRcbiIsCisJCWlwX3ZzX21hc3Rlcl9tY2FzdF9pZm4sIGlwX3ZzX21hc3Rlcl9zeW5jaWQpOwogCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJd2hpbGUgKChzYiA9IHNiX2RlcXVldWUoKSkpIHsKQEAgLTc4MCw5ICs3ODMsOSBAQAogCXN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhICp0aW5mbyA9IGRhdGE7CiAJaW50IGxlbjsKIAotCUlQX1ZTX0lORk8oInN5bmMgdGhyZWFkIHN0YXJ0ZWQ6IHN0YXRlID0gQkFDS1VQLCBtY2FzdF9pZm4gPSAlcywgIgotCQkgICAic3luY2lkID0gJWRcbiIsCi0JCSAgIGlwX3ZzX2JhY2t1cF9tY2FzdF9pZm4sIGlwX3ZzX2JhY2t1cF9zeW5jaWQpOworCXByX2luZm8oInN5bmMgdGhyZWFkIHN0YXJ0ZWQ6IHN0YXRlID0gQkFDS1VQLCBtY2FzdF9pZm4gPSAlcywgIgorCQkic3luY2lkID0gJWRcbiIsCisJCWlwX3ZzX2JhY2t1cF9tY2FzdF9pZm4sIGlwX3ZzX2JhY2t1cF9zeW5jaWQpOwogCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCp0aW5mby0+c29jay0+c2stPnNrX3NsZWVwLApAQCAtNzk0LDcgKzc5Nyw3IEBACiAJCQlsZW4gPSBpcF92c19yZWNlaXZlKHRpbmZvLT5zb2NrLCB0aW5mby0+YnVmLAogCQkJCQlzeW5jX3JlY3ZfbWVzZ19tYXhsZW4pOwogCQkJaWYgKGxlbiA8PSAwKSB7Ci0JCQkJSVBfVlNfRVJSKCJyZWNlaXZpbmcgbWVzc2FnZSBlcnJvclxuIik7CisJCQkJcHJfZXJyKCJyZWNlaXZpbmcgbWVzc2FnZSBlcnJvclxuIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTgyNCw3ICs4MjcsNyBAQAogCWludCAoKnRocmVhZGZuKSh2b2lkICpkYXRhKTsKIAlpbnQgcmVzdWx0ID0gLUVOT01FTTsKIAotCUlQX1ZTX0RCRyg3LCAiJXM6IHBpZCAlZFxuIiwgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKKwlJUF9WU19EQkcoNywgIiVzKCk6IHBpZCAlZFxuIiwgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAlJUF9WU19EQkcoNywgIkVhY2ggaXBfdnNfc3luY19jb25uIGVudHJ5IG5lZWRzICVaZCBieXRlc1xuIiwKIAkJICBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubikpOwogCkBAIC05MDEsMTQgKzkwNCwxNCBAQAogCiBpbnQgc3RvcF9zeW5jX3RocmVhZChpbnQgc3RhdGUpCiB7Ci0JSVBfVlNfREJHKDcsICIlczogcGlkICVkXG4iLCBfX2Z1bmNfXywgdGFza19waWRfbnIoY3VycmVudCkpOworCUlQX1ZTX0RCRyg3LCAiJXMoKTogcGlkICVkXG4iLCBfX2Z1bmNfXywgdGFza19waWRfbnIoY3VycmVudCkpOwogCiAJaWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUikgewogCQlpZiAoIXN5bmNfbWFzdGVyX3RocmVhZCkKIAkJCXJldHVybiAtRVNSQ0g7CiAKLQkJSVBfVlNfSU5GTygic3RvcHBpbmcgbWFzdGVyIHN5bmMgdGhyZWFkICVkIC4uLlxuIiwKLQkJCSAgIHRhc2tfcGlkX25yKHN5bmNfbWFzdGVyX3RocmVhZCkpOworCQlwcl9pbmZvKCJzdG9wcGluZyBtYXN0ZXIgc3luYyB0aHJlYWQgJWQgLi4uXG4iLAorCQkJdGFza19waWRfbnIoc3luY19tYXN0ZXJfdGhyZWFkKSk7CiAKIAkJLyoKIAkJICogVGhlIGxvY2sgc3luY2hyb25pemVzIHdpdGggc2JfcXVldWVfdGFpbCgpLCBzbyB0aGF0IHdlIGRvbid0CkBAIC05MjUsOCArOTI4LDggQEAKIAkJaWYgKCFzeW5jX2JhY2t1cF90aHJlYWQpCiAJCQlyZXR1cm4gLUVTUkNIOwogCi0JCUlQX1ZTX0lORk8oInN0b3BwaW5nIGJhY2t1cCBzeW5jIHRocmVhZCAlZCAuLi5cbiIsCi0JCQkgICB0YXNrX3BpZF9ucihzeW5jX2JhY2t1cF90aHJlYWQpKTsKKwkJcHJfaW5mbygic3RvcHBpbmcgYmFja3VwIHN5bmMgdGhyZWFkICVkIC4uLlxuIiwKKwkJCXRhc2tfcGlkX25yKHN5bmNfYmFja3VwX3RocmVhZCkpOwogCiAJCWlwX3ZzX3N5bmNfc3RhdGUgJj0gfklQX1ZTX1NUQVRFX0JBQ0tVUDsKIAkJa3RocmVhZF9zdG9wKHN5bmNfYmFja3VwX3RocmVhZCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMKaW5kZXggOGU5NDI1Ni4uYmJkZGZkYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuYwpAQCAtMTksNiArMTksOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYwppbmRleCBmN2Q3NGVmLi42MTgyZThlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jCkBAIC0xOCw2ICsxOCw5IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgIklQVlMiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KQEAgLTc0LDExICs3NywxMiBAQAogc3RhdGljIGludCBpcF92c193cnJfbWF4X3dlaWdodChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKQogewogCXN0cnVjdCBpcF92c19kZXN0ICpkZXN0OwotCWludCB3ZWlnaHQgPSAwOworCWludCBuZXdfd2VpZ2h0LCB3ZWlnaHQgPSAwOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXN0LCAmc3ZjLT5kZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoYXRvbWljX3JlYWQoJmRlc3QtPndlaWdodCkgPiB3ZWlnaHQpCi0JCQl3ZWlnaHQgPSBhdG9taWNfcmVhZCgmZGVzdC0+d2VpZ2h0KTsKKwkJbmV3X3dlaWdodCA9IGF0b21pY19yZWFkKCZkZXN0LT53ZWlnaHQpOworCQlpZiAobmV3X3dlaWdodCA+IHdlaWdodCkKKwkJCXdlaWdodCA9IG5ld193ZWlnaHQ7CiAJfQogCiAJcmV0dXJuIHdlaWdodDsKQEAgLTk0LDcgKzk4LDcgQEAKIAkgKi8KIAltYXJrID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwX3ZzX3dycl9tYXJrKSwgR0ZQX0FUT01JQyk7CiAJaWYgKG1hcmsgPT0gTlVMTCkgewotCQlJUF9WU19FUlIoImlwX3ZzX3dycl9pbml0X3N2YygpOiBubyBtZW1vcnlcbiIpOworCQlwcl9lcnIoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWFyay0+Y2wgPSAmc3ZjLT5kZXN0aW5hdGlvbnM7CkBAIC0xNDEsNyArMTQ1LDcgQEAKIAlzdHJ1Y3QgaXBfdnNfd3JyX21hcmsgKm1hcmsgPSBzdmMtPnNjaGVkX2RhdGE7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfd3JyX3NjaGVkdWxlKCk6IFNjaGVkdWxpbmcuLi5cbiIpOworCUlQX1ZTX0RCRyg2LCAiJXMoKTogU2NoZWR1bGluZy4uLlxuIiwgX19mdW5jX18pOwogCiAJLyoKIAkgKiBUaGlzIGxvb3Agd2lsbCBhbHdheXMgdGVybWluYXRlLCBiZWNhdXNlIG1hcmstPmN3IGluICgwLCBtYXhfd2VpZ2h0XQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKaW5kZXggNTg3NDY1Ny4uMzBiMzE4OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jCkBAIC0xMyw2ICsxMyw5IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgIklQVlMiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4gICAgICAgICAgICAgICAgICAvKiBmb3IgdGNwaGRyICovCiAjaW5jbHVkZSA8bmV0L2lwLmg+CkBAIC0yMzUsOCArMjM4LDggQEAKIAlFbnRlckZ1bmN0aW9uKDEwKTsKIAogCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpKSB7Ci0JCUlQX1ZTX0RCR19STCgiaXBfdnNfYnlwYXNzX3htaXQoKTogaXBfcm91dGVfb3V0cHV0IGVycm9yLCBkZXN0OiAlcEk0XG4iLAotCQkJICAgICAmaXBoLT5kYWRkcik7CisJCUlQX1ZTX0RCR19STCgiJXMoKTogaXBfcm91dGVfb3V0cHV0IGVycm9yLCBkZXN0OiAlcEk0XG4iLAorCQkJICAgICBfX2Z1bmNfXywgJmlwaC0+ZGFkZHIpOwogCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAJfQogCkBAIC0yNDUsNyArMjQ4LDcgQEAKIAlpZiAoKHNrYi0+bGVuID4gbXR1KSAmJiAoaXBoLT5mcmFnX29mZiAmIGh0b25zKElQX0RGKSkpIHsKIAkJaXBfcnRfcHV0KHJ0KTsKIAkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsSUNNUF9GUkFHX05FRURFRCwgaHRvbmwobXR1KSk7Ci0JCUlQX1ZTX0RCR19STCgiaXBfdnNfYnlwYXNzX3htaXQoKTogZnJhZyBuZWVkZWRcbiIpOworCQlJUF9WU19EQkdfUkwoIiVzKCk6IGZyYWcgbmVlZGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCkBAIC0yOTksOCArMzAyLDggQEAKIAogCXJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKWlwNl9yb3V0ZV9vdXRwdXQoJmluaXRfbmV0LCBOVUxMLCAmZmwpOwogCWlmICghcnQpIHsKLQkJSVBfVlNfREJHX1JMKCJpcF92c19ieXBhc3NfeG1pdF92NigpOiBpcDZfcm91dGVfb3V0cHV0IGVycm9yLCBkZXN0OiAlcEk2XG4iLAotCQkJICAgICAmaXBoLT5kYWRkcik7CisJCUlQX1ZTX0RCR19STCgiJXMoKTogaXA2X3JvdXRlX291dHB1dCBlcnJvciwgZGVzdDogJXBJNlxuIiwKKwkJCSAgICAgX19mdW5jX18sICZpcGgtPmRhZGRyKTsKIAkJZ290byB0eF9lcnJvcl9pY21wOwogCX0KIApAQCAtMzA5LDcgKzMxMiw3IEBACiAJaWYgKHNrYi0+bGVuID4gbXR1KSB7CiAJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwogCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUsIHNrYi0+ZGV2KTsKLQkJSVBfVlNfREJHX1JMKCJpcF92c19ieXBhc3NfeG1pdF92NigpOiBmcmFnIG5lZWRlZFxuIik7CisJCUlQX1ZTX0RCR19STCgiJXMoKTogZnJhZyBuZWVkZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byB0eF9lcnJvcjsKIAl9CiAKQEAgLTUzNiw5ICs1MzksOSBAQAogCUVudGVyRnVuY3Rpb24oMTApOwogCiAJaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApKSB7Ci0JCUlQX1ZTX0RCR19STCgiaXBfdnNfdHVubmVsX3htaXQoKTogcHJvdG9jb2wgZXJyb3IsICIKKwkJSVBfVlNfREJHX1JMKCIlcygpOiBwcm90b2NvbCBlcnJvciwgIgogCQkJICAgICAiRVRIX1BfSVA6ICVkLCBza2IgcHJvdG9jb2w6ICVkXG4iLAotCQkJICAgICBodG9ucyhFVEhfUF9JUCksIHNrYi0+cHJvdG9jb2wpOworCQkJICAgICBfX2Z1bmNfXywgaHRvbnMoRVRIX1BfSVApLCBza2ItPnByb3RvY29sKTsKIAkJZ290byB0eF9lcnJvcjsKIAl9CiAKQEAgLTU1MCw3ICs1NTMsNyBAQAogCW10dSA9IGRzdF9tdHUoJnJ0LT51LmRzdCkgLSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKIAlpZiAobXR1IDwgNjgpIHsKIAkJaXBfcnRfcHV0KHJ0KTsKLQkJSVBfVlNfREJHX1JMKCJpcF92c190dW5uZWxfeG1pdCgpOiBtdHUgbGVzcyB0aGFuIDY4XG4iKTsKKwkJSVBfVlNfREJHX1JMKCIlcygpOiBtdHUgbGVzcyB0aGFuIDY4XG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCWlmIChza2JfZHN0KHNrYikpCkBAIC01NjIsNyArNTY1LDcgQEAKIAkgICAgJiYgbXR1IDwgbnRvaHMob2xkX2lwaC0+dG90X2xlbikpIHsKIAkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsSUNNUF9GUkFHX05FRURFRCwgaHRvbmwobXR1KSk7CiAJCWlwX3J0X3B1dChydCk7Ci0JCUlQX1ZTX0RCR19STCgiaXBfdnNfdHVubmVsX3htaXQoKTogZnJhZyBuZWVkZWRcbiIpOworCQlJUF9WU19EQkdfUkwoIiVzKCk6IGZyYWcgbmVlZGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCkBAIC01NzgsNyArNTgxLDcgQEAKIAkJaWYgKCFuZXdfc2tiKSB7CiAJCQlpcF9ydF9wdXQocnQpOwogCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlJUF9WU19FUlJfUkwoImlwX3ZzX3R1bm5lbF94bWl0KCk6IG5vIG1lbW9yeVxuIik7CisJCQlJUF9WU19FUlJfUkwoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIE5GX1NUT0xFTjsKIAkJfQogCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTY0Niw5ICs2NDksOSBAQAogCUVudGVyRnVuY3Rpb24oMTApOwogCiAJaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKLQkJSVBfVlNfREJHX1JMKCJpcF92c190dW5uZWxfeG1pdF92NigpOiBwcm90b2NvbCBlcnJvciwgIgorCQlJUF9WU19EQkdfUkwoIiVzKCk6IHByb3RvY29sIGVycm9yLCAiCiAJCQkgICAgICJFVEhfUF9JUFY2OiAlZCwgc2tiIHByb3RvY29sOiAlZFxuIiwKLQkJCSAgICAgaHRvbnMoRVRIX1BfSVBWNiksIHNrYi0+cHJvdG9jb2wpOworCQkJICAgICBfX2Z1bmNfXywgaHRvbnMoRVRIX1BfSVBWNiksIHNrYi0+cHJvdG9jb2wpOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KIApAQCAtNjYyLDcgKzY2NSw3IEBACiAJLyogVE9ETyBJUHY2OiBkbyB3ZSBuZWVkIHRoaXMgY2hlY2sgaW4gSVB2Nj8gKi8KIAlpZiAobXR1IDwgMTI4MCkgewogCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKLQkJSVBfVlNfREJHX1JMKCJpcF92c190dW5uZWxfeG1pdF92NigpOiBtdHUgbGVzcyB0aGFuIDEyODBcbiIpOworCQlJUF9WU19EQkdfUkwoIiVzKCk6IG10dSBsZXNzIHRoYW4gMTI4MFxuIiwgX19mdW5jX18pOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KIAlpZiAoc2tiX2RzdChza2IpKQpAQCAtNjcxLDcgKzY3NCw3IEBACiAJaWYgKG10dSA8IG50b2hzKG9sZF9pcGgtPnBheWxvYWRfbGVuKSArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpIHsKIAkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1LCBza2ItPmRldik7CiAJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwotCQlJUF9WU19EQkdfUkwoImlwX3ZzX3R1bm5lbF94bWl0X3Y2KCk6IGZyYWcgbmVlZGVkXG4iKTsKKwkJSVBfVlNfREJHX1JMKCIlcygpOiBmcmFnIG5lZWRlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KIApAQCAtNjg3LDcgKzY5MCw3IEBACiAJCWlmICghbmV3X3NrYikgewogCQkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCUlQX1ZTX0VSUl9STCgiaXBfdnNfdHVubmVsX3htaXRfdjYoKTogbm8gbWVtb3J5XG4iKTsKKwkJCUlQX1ZTX0VSUl9STCgiJXMoKTogbm8gbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gTkZfU1RPTEVOOwogCQl9CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtNzYwLDcgKzc2Myw3IEBACiAJaWYgKChpcGgtPmZyYWdfb2ZmICYgaHRvbnMoSVBfREYpKSAmJiBza2ItPmxlbiA+IG10dSkgewogCQlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCxJQ01QX0ZSQUdfTkVFREVELCBodG9ubChtdHUpKTsKIAkJaXBfcnRfcHV0KHJ0KTsKLQkJSVBfVlNfREJHX1JMKCJpcF92c19kcl94bWl0KCk6IGZyYWcgbmVlZGVkXG4iKTsKKwkJSVBfVlNfREJHX1JMKCIlcygpOiBmcmFnIG5lZWRlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KIApAQCAtODEzLDcgKzgxNiw3IEBACiAJaWYgKHNrYi0+bGVuID4gbXR1KSB7CiAJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSwgc2tiLT5kZXYpOwogCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKLQkJSVBfVlNfREJHX1JMKCJpcF92c19kcl94bWl0X3Y2KCk6IGZyYWcgbmVlZGVkXG4iKTsKKwkJSVBfVlNfREJHX1JMKCIlcygpOiBmcmFnIG5lZWRlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KIApAQCAtODg4LDcgKzg5MSw3IEBACiAJaWYgKChza2ItPmxlbiA+IG10dSkgJiYgKGlwX2hkcihza2IpLT5mcmFnX29mZiAmIGh0b25zKElQX0RGKSkpIHsKIAkJaXBfcnRfcHV0KHJ0KTsKIAkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfRlJBR19ORUVERUQsIGh0b25sKG10dSkpOwotCQlJUF9WU19EQkdfUkwoImlwX3ZzX2luX2ljbXAoKTogZnJhZyBuZWVkZWRcbiIpOworCQlJUF9WU19EQkdfUkwoIiVzKCk6IGZyYWcgbmVlZGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCkBAIC05NjMsNyArOTY2LDcgQEAKIAlpZiAoc2tiLT5sZW4gPiBtdHUpIHsKIAkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CiAJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSwgc2tiLT5kZXYpOwotCQlJUF9WU19EQkdfUkwoImlwX3ZzX2luX2ljbXAoKTogZnJhZyBuZWVkZWRcbiIpOworCQlJUF9WU19EQkdfUkwoIiVzKCk6IGZyYWcgbmVlZGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggYjU4NjliOS4uYjM3MTA5OCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtNDcsNyArNDcsNyBAQAogCiBpbnQgKCpuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2spKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCQkgICAgICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwLAotCQkJCSAgICAgIHN0cnVjdCBubGF0dHIgKmF0dHIpIF9fcmVhZF9tb3N0bHk7CisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cikgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vayk7CiAKIERFRklORV9TUElOTE9DSyhuZl9jb25udHJhY2tfbG9jayk7CkBAIC0xMDg5LDE0ICsxMDg5LDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfZmx1c2hfcmVwb3J0KTsKIAotc3RhdGljIHZvaWQgbmZfY3RfcmVsZWFzZV9keWluZ19saXN0KHZvaWQpCitzdGF0aWMgdm9pZCBuZl9jdF9yZWxlYXNlX2R5aW5nX2xpc3Qoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAKIAlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShoLCBuLCAmaW5pdF9uZXQuY3QuZHlpbmcsIGhubm9kZSkgeworCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0LmR5aW5nLCBobm5vZGUpIHsKIAkJY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwogCQkvKiBuZXZlciBmYWlscyB0byByZW1vdmUgdGhlbSwgbm8gbGlzdGVuZXJzIGF0IHRoaXMgcG9pbnQgKi8KIAkJbmZfY3Rfa2lsbChjdCk7CkBAIC0xMTE1LDcgKzExMTUsNyBAQAogewogIGlfc2VlX2RlYWRfcGVvcGxlOgogCW5mX2N0X2l0ZXJhdGVfY2xlYW51cChuZXQsIGtpbGxfYWxsLCBOVUxMKTsKLQluZl9jdF9yZWxlYXNlX2R5aW5nX2xpc3QoKTsKKwluZl9jdF9yZWxlYXNlX2R5aW5nX2xpc3QobmV0KTsKIAlpZiAoYXRvbWljX3JlYWQoJm5ldC0+Y3QuY291bnQpICE9IDApIHsKIAkJc2NoZWR1bGUoKTsKIAkJZ290byBpX3NlZV9kZWFkX3Blb3BsZTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA0OTQ3OWQxLi41OWQ4MDY0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC03MDQsNyArNzA0LDggQEAKIH0KIAogc3RhdGljIGludAotY3RuZXRsaW5rX3BhcnNlX3R1cGxlKHN0cnVjdCBubGF0dHIgKmNkYVtdLCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKK2N0bmV0bGlua19wYXJzZV90dXBsZShjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sCisJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQkgICAgICBlbnVtIGN0YXR0cl90dXBsZSB0eXBlLCB1X2ludDhfdCBsM251bSkKIHsKIAlzdHJ1Y3QgbmxhdHRyICp0YltDVEFfVFVQTEVfTUFYKzFdOwpAQCAtNzQwLDcgKzc0MSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1jdG5ldGxpbmtfcGFyc2VfaGVscChzdHJ1Y3QgbmxhdHRyICphdHRyLCBjaGFyICoqaGVscGVyX25hbWUpCitjdG5ldGxpbmtfcGFyc2VfaGVscChjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCBjaGFyICoqaGVscGVyX25hbWUpCiB7CiAJc3RydWN0IG5sYXR0ciAqdGJbQ1RBX0hFTFBfTUFYKzFdOwogCkBAIC03NjQsNyArNzY1LDggQEAKIAogc3RhdGljIGludAogY3RuZXRsaW5rX2RlbF9jb25udHJhY2soc3RydWN0IHNvY2sgKmN0bmwsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc3RydWN0IG5sYXR0ciAqY2RhW10pCisJCQljb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJCWNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKQEAgLTgyMyw3ICs4MjUsOCBAQAogCiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFjayhzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBubG1zZ2hkciAqbmxoLCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSkKKwkJCWNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOwpAQCAtODg0LDcgKzg4Nyw3IEBACiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKLQkJCSAgc3RydWN0IG5sYXR0ciAqYXR0cikKKwkJCSAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cikKIHsKIAl0eXBlb2YobmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cF9ob29rKSBwYXJzZV9uYXRfc2V0dXA7CiAKQEAgLTkxNCw3ICs5MTcsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBpbnQKLWN0bmV0bGlua19jaGFuZ2Vfc3RhdHVzKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5sYXR0ciAqY2RhW10pCitjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKIAl1bnNpZ25lZCBsb25nIGQ7CiAJdW5zaWduZWQgaW50IHN0YXR1cyA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX1NUQVRVU10pKTsKQEAgLTk0MCw3ICs5NDMsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1jdG5ldGxpbmtfY2hhbmdlX25hdChzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQorY3RuZXRsaW5rX2NoYW5nZV9uYXQoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pCiB7CiAjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKIAlpbnQgcmV0OwpAQCAtOTY2LDcgKzk2OSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1jdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQorY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKIAlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGN0KTsKQEAgLTEwMjgsNyArMTAzMSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1jdG5ldGxpbmtfY2hhbmdlX3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSkKK2N0bmV0bGlua19jaGFuZ2VfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKIAl1X2ludDMyX3QgdGltZW91dCA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX1RJTUVPVVRdKSk7CiAKQEAgLTEwNDIsOSArMTA0NSwxMCBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotY3RuZXRsaW5rX2NoYW5nZV9wcm90b2luZm8oc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSkKK2N0bmV0bGlua19jaGFuZ2VfcHJvdG9pbmZvKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKQogewotCXN0cnVjdCBubGF0dHIgKnRiW0NUQV9QUk9UT0lORk9fTUFYKzFdLCAqYXR0ciA9IGNkYVtDVEFfUFJPVE9JTkZPXTsKKwljb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyID0gY2RhW0NUQV9QUk9UT0lORk9dOworCXN0cnVjdCBubGF0dHIgKnRiW0NUQV9QUk9UT0lORk9fTUFYKzFdOwogCXN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bzsKIAlpbnQgZXJyID0gMDsKIApAQCAtMTA2MSw3ICsxMDY1LDcgQEAKIAogI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECiBzdGF0aWMgaW5saW5lIGludAotY2hhbmdlX25hdF9zZXFfYWRqKHN0cnVjdCBuZl9uYXRfc2VxICpuYXRzZXEsIHN0cnVjdCBubGF0dHIgKmF0dHIpCitjaGFuZ2VfbmF0X3NlcV9hZGooc3RydWN0IG5mX25hdF9zZXEgKm5hdHNlcSwgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHIpCiB7CiAJc3RydWN0IG5sYXR0ciAqY2RhW0NUQV9OQVRfU0VRX01BWCsxXTsKIApAQCAtMTA4OSw3ICsxMDkzLDggQEAKIH0KIAogc3RhdGljIGludAotY3RuZXRsaW5rX2NoYW5nZV9uYXRfc2VxX2FkaihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQorY3RuZXRsaW5rX2NoYW5nZV9uYXRfc2VxX2FkaihzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgbmZfY29ubl9uYXQgKm5hdCA9IG5mY3RfbmF0KGN0KTsKQEAgLTExMjAsNyArMTEyNSw4IEBACiAjZW5kaWYKIAogc3RhdGljIGludAotY3RuZXRsaW5rX2NoYW5nZV9jb25udHJhY2soc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSkKK2N0bmV0bGlua19jaGFuZ2VfY29ubnRyYWNrKHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKIAlpbnQgZXJyOwogCkBAIC0xMTY5LDcgKzExNzUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IG5mX2Nvbm4gKgotY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2soc3RydWN0IG5sYXR0ciAqY2RhW10sCitjdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFjayhjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sCiAJCQkgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvdHVwbGUsCiAJCQkgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpydHVwbGUsCiAJCQkgICB1OCB1MykKQEAgLTEzMDQsNyArMTMxMCw4IEBACiAKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19uZXdfY29ubnRyYWNrKHN0cnVjdCBzb2NrICpjdG5sLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQorCQkJY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCQljb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBvdHVwbGUsIHJ0dXBsZTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmggPSBOVUxMOwpAQCAtMTYyOSw3ICsxNjM2LDggQEAKIAogc3RhdGljIGludAogY3RuZXRsaW5rX2dldF9leHBlY3Qoc3RydWN0IHNvY2sgKmN0bmwsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQorCQkgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CkBAIC0xNjg5LDcgKzE2OTcsOCBAQAogCiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfZGVsX2V4cGVjdChzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc3RydWN0IG5sYXR0ciAqY2RhW10pCisJCSAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCSAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKQEAgLTE3NjcsMTMgKzE3NzYsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIHN0YXRpYyBpbnQKLWN0bmV0bGlua19jaGFuZ2VfZXhwZWN0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICp4LCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSkKK2N0bmV0bGlua19jaGFuZ2VfZXhwZWN0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICp4LAorCQkJY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKQogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAogc3RhdGljIGludAotY3RuZXRsaW5rX2NyZWF0ZV9leHBlY3Qoc3RydWN0IG5sYXR0ciAqY2RhW10sIHVfaW50OF90IHUzLCB1MzIgcGlkLCBpbnQgcmVwb3J0KQorY3RuZXRsaW5rX2NyZWF0ZV9leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1X2ludDhfdCB1MywKKwkJCXUzMiBwaWQsIGludCByZXBvcnQpCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZSwgbWFzaywgbWFzdGVyX3R1cGxlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaCA9IE5VTEw7CkBAIC0xODMxLDcgKzE4NDIsOCBAQAogCiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfbmV3X2V4cGVjdChzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc3RydWN0IG5sYXR0ciAqY2RhW10pCisJCSAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCSAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCmluZGV4IDkyNzYxYTkuLmVlZGMwYzEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAotCQllcnIgPSBuYy0+Y2FsbChuZm5sLCBza2IsIG5saCwgY2RhKTsKKwkJZXJyID0gbmMtPmNhbGwobmZubCwgc2tiLCBubGgsIChjb25zdCBzdHJ1Y3QgbmxhdHRyICoqKWNkYSk7CiAJCWlmIChlcnIgPT0gLUVBR0FJTikKIAkJCWdvdG8gcmVwbGF5OwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwppbmRleCA2NmE2ZGQ1Li5mOTAwZGMzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwpAQCAtNjk0LDcgKzY5NCw4IEBACiAKIHN0YXRpYyBpbnQKIG5mdWxubF9yZWN2X3Vuc3VwcChzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc3RydWN0IG5sYXR0ciAqbmZxYVtdKQorCQkgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5mcWFbXSkKIHsKIAlyZXR1cm4gLUVOT1RTVVBQOwogfQpAQCAtNzE2LDcgKzcxNyw4IEBACiAKIHN0YXRpYyBpbnQKIG5mdWxubF9yZWN2X2NvbmZpZyhzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBubGF0dHIgKm5mdWxhW10pCisJCSAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmZ1bGFbXSkKIHsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gTkxNU0dfREFUQShubGgpOwogCXVfaW50MTZfdCBncm91cF9udW0gPSBudG9ocyhuZm1zZy0+cmVzX2lkKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCmluZGV4IDcxZGFhMDkuLjdhOWRlYzkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwpAQCAtNjA4LDcgKzYwOCw4IEBACiAKIHN0YXRpYyBpbnQKIG5mcW5sX3JlY3ZfdmVyZGljdChzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBubGF0dHIgKm5mcWFbXSkKKwkJICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCSAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBuZnFhW10pCiB7CiAJc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IE5MTVNHX0RBVEEobmxoKTsKIAl1X2ludDE2X3QgcXVldWVfbnVtID0gbnRvaHMobmZtc2ctPnJlc19pZCk7CkBAIC02NzAsNyArNjcxLDggQEAKIAogc3RhdGljIGludAogbmZxbmxfcmVjdl91bnN1cHAoc3RydWN0IHNvY2sgKmN0bmwsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBubGF0dHIgKm5mcWFbXSkKKwkJICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmZxYVtdKQogewogCXJldHVybiAtRU5PVFNVUFA7CiB9CkBAIC02ODcsNyArNjg5LDggQEAKIAogc3RhdGljIGludAogbmZxbmxfcmVjdl9jb25maWcoc3RydWN0IHNvY2sgKmN0bmwsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBubGF0dHIgKm5mcWFbXSkKKwkJICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmZxYVtdKQogewogCXN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBOTE1TR19EQVRBKG5saCk7CiAJdV9pbnQxNl90IHF1ZXVlX251bSA9IG50b2hzKG5mbXNnLT5yZXNfaWQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCmluZGV4IDAyNWQxYTAuLmE2YWM4M2EgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKQEAgLTczNiwxNiArNzM2LDE3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4dF9yZXBsYWNlX3RhYmxlKTsKIAotc3RydWN0IHh0X3RhYmxlICp4dF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCitzdHJ1Y3QgeHRfdGFibGUgKnh0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKmlucHV0X3RhYmxlLAogCQkJCSAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpib290c3RyYXAsCiAJCQkJICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKLQlzdHJ1Y3QgeHRfdGFibGUgKnQ7CisJc3RydWN0IHh0X3RhYmxlICp0LCAqdGFibGU7CiAKIAkvKiBEb24ndCBhZGQgb25lIG9iamVjdCB0byBtdWx0aXBsZSBsaXN0cy4gKi8KLQl0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihzdHJ1Y3QgeHRfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwl0YWJsZSA9IGttZW1kdXAoaW5wdXRfdGFibGUsIHNpemVvZihzdHJ1Y3QgeHRfdGFibGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRhYmxlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DT05OTUFSSy5jIGIvbmV0L25ldGZpbHRlci94dF9DT05OTUFSSy5jCmluZGV4IGQ2ZTVhYjQuLjU5MzQ1NzAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmMKQEAgLTM2LDQ1ICszNiw2IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWNvbm5tYXJrX3RnX3YwKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgeHRfY29ubm1hcmtfdGFyZ2V0X2luZm8gKm1hcmtpbmZvID0gcGFyLT50YXJnaW5mbzsKLQlzdHJ1Y3QgbmZfY29ubiAqY3Q7Ci0JZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87Ci0JdV9pbnQzMl90IGRpZmY7Ci0JdV9pbnQzMl90IG1hcms7Ci0JdV9pbnQzMl90IG5ld21hcms7Ci0KLQljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwotCWlmIChjdCkgewotCQlzd2l0Y2gobWFya2luZm8tPm1vZGUpIHsKLQkJY2FzZSBYVF9DT05OTUFSS19TRVQ6Ci0JCQluZXdtYXJrID0gKGN0LT5tYXJrICYgfm1hcmtpbmZvLT5tYXNrKSB8IG1hcmtpbmZvLT5tYXJrOwotCQkJaWYgKG5ld21hcmsgIT0gY3QtPm1hcmspIHsKLQkJCQljdC0+bWFyayA9IG5ld21hcms7Ci0JCQkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfTUFSSywgY3QpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgWFRfQ09OTk1BUktfU0FWRToKLQkJCW5ld21hcmsgPSAoY3QtPm1hcmsgJiB+bWFya2luZm8tPm1hc2spIHwKLQkJCQkgIChza2ItPm1hcmsgJiBtYXJraW5mby0+bWFzayk7Ci0JCQlpZiAoY3QtPm1hcmsgIT0gbmV3bWFyaykgewotCQkJCWN0LT5tYXJrID0gbmV3bWFyazsKLQkJCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9NQVJLLCBjdCk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBYVF9DT05OTUFSS19SRVNUT1JFOgotCQkJbWFyayA9IHNrYi0+bWFyazsKLQkJCWRpZmYgPSAoY3QtPm1hcmsgXiBtYXJrKSAmIG1hcmtpbmZvLT5tYXNrOwotCQkJc2tiLT5tYXJrID0gbWFyayBeIGRpZmY7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiBYVF9DT05USU5VRTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAogY29ubm1hcmtfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3RhcmdldF9wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCB4dF9jb25ubWFya190Z2luZm8xICppbmZvID0gcGFyLT50YXJnaW5mbzsKQEAgLTExMiwzMCArNzMsNiBAQAogCXJldHVybiBYVF9DT05USU5VRTsKIH0KIAotc3RhdGljIGJvb2wgY29ubm1hcmtfdGdfY2hlY2tfdjAoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IHh0X2Nvbm5tYXJrX3RhcmdldF9pbmZvICptYXRjaGluZm8gPSBwYXItPnRhcmdpbmZvOwotCi0JaWYgKG1hdGNoaW5mby0+bW9kZSA9PSBYVF9DT05OTUFSS19SRVNUT1JFKSB7Ci0JCWlmIChzdHJjbXAocGFyLT50YWJsZSwgIm1hbmdsZSIpICE9IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNPTk5NQVJLOiByZXN0b3JlIGNhbiBvbmx5IGJlICIKLQkJCSAgICAgICAiY2FsbGVkIGZyb20gXCJtYW5nbGVcIiB0YWJsZSwgbm90IFwiJXNcIlxuIiwKLQkJCSAgICAgICBwYXItPnRhYmxlKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQlpZiAobWF0Y2hpbmZvLT5tYXJrID4gMHhmZmZmZmZmZiB8fCBtYXRjaGluZm8tPm1hc2sgPiAweGZmZmZmZmZmKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkNPTk5NQVJLOiBPbmx5IHN1cHBvcnRzIDMyYml0IG1hcmtcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChuZl9jdF9sM3Byb3RvX3RyeV9tb2R1bGVfZ2V0KHBhci0+ZmFtaWx5KSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2FuJ3QgbG9hZCBjb25udHJhY2sgc3VwcG9ydCBmb3IgIgotCQkJCSAgICAicHJvdG89JXVcbiIsIHBhci0+ZmFtaWx5KTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIGJvb2wgY29ubm1hcmtfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiB7CiAJaWYgKG5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQocGFyLT5mYW1pbHkpIDwgMCkgewpAQCAtMTUxLDc0ICs4OCwyNSBAQAogCW5mX2N0X2wzcHJvdG9fbW9kdWxlX3B1dChwYXItPmZhbWlseSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdHJ1Y3QgY29tcGF0X3h0X2Nvbm5tYXJrX3RhcmdldF9pbmZvIHsKLQljb21wYXRfdWxvbmdfdAltYXJrLCBtYXNrOwotCXVfaW50OF90CW1vZGU7Ci0JdV9pbnQ4X3QJX19wYWQxOwotCXVfaW50MTZfdAlfX3BhZDI7Ci19OwotCi1zdGF0aWMgdm9pZCBjb25ubWFya190Z19jb21wYXRfZnJvbV91c2VyX3YwKHZvaWQgKmRzdCwgdm9pZCAqc3JjKQotewotCWNvbnN0IHN0cnVjdCBjb21wYXRfeHRfY29ubm1hcmtfdGFyZ2V0X2luZm8gKmNtID0gc3JjOwotCXN0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbyBtID0gewotCQkubWFyawk9IGNtLT5tYXJrLAotCQkubWFzawk9IGNtLT5tYXNrLAotCQkubW9kZQk9IGNtLT5tb2RlLAotCX07Ci0JbWVtY3B5KGRzdCwgJm0sIHNpemVvZihtKSk7Ci19Ci0KLXN0YXRpYyBpbnQgY29ubm1hcmtfdGdfY29tcGF0X3RvX3VzZXJfdjAodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKQotewotCWNvbnN0IHN0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbyAqbSA9IHNyYzsKLQlzdHJ1Y3QgY29tcGF0X3h0X2Nvbm5tYXJrX3RhcmdldF9pbmZvIGNtID0gewotCQkubWFyawk9IG0tPm1hcmssCi0JCS5tYXNrCT0gbS0+bWFzaywKLQkJLm1vZGUJPSBtLT5tb2RlLAotCX07Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcihkc3QsICZjbSwgc2l6ZW9mKGNtKSkgPyAtRUZBVUxUIDogMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCi0KLXN0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGNvbm5tYXJrX3RnX3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JewotCQkubmFtZQkJPSAiQ09OTk1BUksiLAotCQkucmV2aXNpb24JPSAwLAotCQkuZmFtaWx5CQk9IE5GUFJPVE9fVU5TUEVDLAotCQkuY2hlY2tlbnRyeQk9IGNvbm5tYXJrX3RnX2NoZWNrX3YwLAotCQkuZGVzdHJveQk9IGNvbm5tYXJrX3RnX2Rlc3Ryb3ksCi0JCS50YXJnZXQJCT0gY29ubm1hcmtfdGdfdjAsCi0JCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbyksCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotCQkuY29tcGF0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X2Nvbm5tYXJrX3RhcmdldF9pbmZvKSwKLQkJLmNvbXBhdF9mcm9tX3VzZXIgPSBjb25ubWFya190Z19jb21wYXRfZnJvbV91c2VyX3YwLAotCQkuY29tcGF0X3RvX3VzZXIJPSBjb25ubWFya190Z19jb21wYXRfdG9fdXNlcl92MCwKLSNlbmRpZgotCQkubWUJCT0gVEhJU19NT0RVTEUKLQl9LAotCXsKLQkJLm5hbWUgICAgICAgICAgID0gIkNPTk5NQVJLIiwKLQkJLnJldmlzaW9uICAgICAgID0gMSwKLQkJLmZhbWlseSAgICAgICAgID0gTkZQUk9UT19VTlNQRUMsCi0JCS5jaGVja2VudHJ5ICAgICA9IGNvbm5tYXJrX3RnX2NoZWNrLAotCQkudGFyZ2V0ICAgICAgICAgPSBjb25ubWFya190ZywKLQkJLnRhcmdldHNpemUgICAgID0gc2l6ZW9mKHN0cnVjdCB4dF9jb25ubWFya190Z2luZm8xKSwKLQkJLmRlc3Ryb3kgICAgICAgID0gY29ubm1hcmtfdGdfZGVzdHJveSwKLQkJLm1lICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGNvbm5tYXJrX3RnX3JlZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lICAgICAgICAgICA9ICJDT05OTUFSSyIsCisJLnJldmlzaW9uICAgICAgID0gMSwKKwkuZmFtaWx5ICAgICAgICAgPSBORlBST1RPX1VOU1BFQywKKwkuY2hlY2tlbnRyeSAgICAgPSBjb25ubWFya190Z19jaGVjaywKKwkudGFyZ2V0ICAgICAgICAgPSBjb25ubWFya190ZywKKwkudGFyZ2V0c2l6ZSAgICAgPSBzaXplb2Yoc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzEpLAorCS5kZXN0cm95ICAgICAgICA9IGNvbm5tYXJrX3RnX2Rlc3Ryb3ksCisJLm1lICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjb25ubWFya190Z19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldHMoY29ubm1hcmtfdGdfcmVnLAotCSAgICAgICBBUlJBWV9TSVpFKGNvbm5tYXJrX3RnX3JlZykpOworCXJldHVybiB4dF9yZWdpc3Rlcl90YXJnZXQoJmNvbm5tYXJrX3RnX3JlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjb25ubWFya190Z19leGl0KHZvaWQpCiB7Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXRzKGNvbm5tYXJrX3RnX3JlZywgQVJSQVlfU0laRShjb25ubWFya190Z19yZWcpKTsKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmY29ubm1hcmtfdGdfcmVnKTsKIH0KIAogbW9kdWxlX2luaXQoY29ubm1hcmtfdGdfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0RTQ1AuYyBiL25ldC9uZXRmaWx0ZXIveHRfRFNDUC5jCmluZGV4IDZhMzQ3ZTcuLjc0Y2U4OTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfRFNDUC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfRFNDUC5jCkBAIC0xOCw3ICsxOCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UT1MuaD4KIAogTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IERTQ1AvVE9TIGZpZWxkIG1vZGlmaWNhdGlvbiIpOwpAQCAtNzMsNDEgKzcyLDYgQEAKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludAotdG9zX3RnX3YwKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgaXB0X3Rvc190YXJnZXRfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0Jc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKLQl1X2ludDhfdCBvbGR0b3M7Ci0KLQlpZiAoKGlwaC0+dG9zICYgSVBUT1NfVE9TX01BU0spICE9IGluZm8tPnRvcykgewotCQlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQotCQkJcmV0dXJuIE5GX0RST1A7Ci0KLQkJaXBoICAgICAgPSBpcF9oZHIoc2tiKTsKLQkJb2xkdG9zICAgPSBpcGgtPnRvczsKLQkJaXBoLT50b3MgPSAoaXBoLT50b3MgJiBJUFRPU19QUkVDX01BU0spIHwgaW5mby0+dG9zOwotCQljc3VtX3JlcGxhY2UyKCZpcGgtPmNoZWNrLCBodG9ucyhvbGR0b3MpLCBodG9ucyhpcGgtPnRvcykpOwotCX0KLQotCXJldHVybiBYVF9DT05USU5VRTsKLX0KLQotc3RhdGljIGJvb2wgdG9zX3RnX2NoZWNrX3YwKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcHRfdG9zX3RhcmdldF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKLQljb25zdCB1aW50OF90IHRvcyA9IGluZm8tPnRvczsKLQotCWlmICh0b3MgIT0gSVBUT1NfTE9XREVMQVkgJiYgdG9zICE9IElQVE9TX1RIUk9VR0hQVVQgJiYKLQkgICAgdG9zICE9IElQVE9TX1JFTElBQklMSVRZICYmIHRvcyAhPSBJUFRPU19NSU5DT1NUICYmCi0JICAgIHRvcyAhPSBJUFRPU19OT1JNQUxTVkMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9TOiBiYWQgdG9zIHZhbHVlICUjeFxuIiwgdG9zKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50CiB0b3NfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3RhcmdldF9wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCB4dF90b3NfdGFyZ2V0X2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOwpAQCAtMTY4LDE2ICsxMzIsNiBAQAogCX0sCiAJewogCQkubmFtZQkJPSAiVE9TIiwKLQkJLnJldmlzaW9uCT0gMCwKLQkJLmZhbWlseQkJPSBORlBST1RPX0lQVjQsCi0JCS50YWJsZQkJPSAibWFuZ2xlIiwKLQkJLnRhcmdldAkJPSB0b3NfdGdfdjAsCi0JCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfdG9zX3RhcmdldF9pbmZvKSwKLQkJLmNoZWNrZW50cnkJPSB0b3NfdGdfY2hlY2tfdjAsCi0JCS5tZQkJPSBUSElTX01PRFVMRSwKLQl9LAotCXsKLQkJLm5hbWUJCT0gIlRPUyIsCiAJCS5yZXZpc2lvbgk9IDEsCiAJCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY0LAogCQkudGFibGUJCT0gIm1hbmdsZSIsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfTUFSSy5jCmluZGV4IDY3NTc0YmMuLjIyNWY4ZDEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTUFSSy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTUFSSy5jCkBAIC0yNSwzOSArMjUsNiBAQAogTU9EVUxFX0FMSUFTKCJpcDZ0X01BUksiKTsKIAogc3RhdGljIHVuc2lnbmVkIGludAotbWFya190Z192MChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm8gKm1hcmtpbmZvID0gcGFyLT50YXJnaW5mbzsKLQotCXNrYi0+bWFyayA9IG1hcmtpbmZvLT5tYXJrOwotCXJldHVybiBYVF9DT05USU5VRTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotbWFya190Z192MShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm9fdjEgKm1hcmtpbmZvID0gcGFyLT50YXJnaW5mbzsKLQlpbnQgbWFyayA9IDA7Ci0KLQlzd2l0Y2ggKG1hcmtpbmZvLT5tb2RlKSB7Ci0JY2FzZSBYVF9NQVJLX1NFVDoKLQkJbWFyayA9IG1hcmtpbmZvLT5tYXJrOwotCQlicmVhazsKLQotCWNhc2UgWFRfTUFSS19BTkQ6Ci0JCW1hcmsgPSBza2ItPm1hcmsgJiBtYXJraW5mby0+bWFyazsKLQkJYnJlYWs7Ci0KLQljYXNlIFhUX01BUktfT1I6Ci0JCW1hcmsgPSBza2ItPm1hcmsgfCBtYXJraW5mby0+bWFyazsKLQkJYnJlYWs7Ci0JfQotCi0Jc2tiLT5tYXJrID0gbWFyazsKLQlyZXR1cm4gWFRfQ09OVElOVUU7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKIG1hcmtfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3RhcmdldF9wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCB4dF9tYXJrX3RnaW5mbzIgKmluZm8gPSBwYXItPnRhcmdpbmZvOwpAQCAtNjYsMTM1ICszMywyMyBAQAogCXJldHVybiBYVF9DT05USU5VRTsKIH0KIAotc3RhdGljIGJvb2wgbWFya190Z19jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mbyAqbWFya2luZm8gPSBwYXItPnRhcmdpbmZvOwotCi0JaWYgKG1hcmtpbmZvLT5tYXJrID4gMHhmZmZmZmZmZikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJNQVJLOiBPbmx5IHN1cHBvcnRzIDMyYml0IHdpZGUgbWFya1xuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIG1hcmtfdGdfY2hlY2tfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm9fdjEgKm1hcmtpbmZvID0gcGFyLT50YXJnaW5mbzsKLQotCWlmIChtYXJraW5mby0+bW9kZSAhPSBYVF9NQVJLX1NFVAotCSAgICAmJiBtYXJraW5mby0+bW9kZSAhPSBYVF9NQVJLX0FORAotCSAgICAmJiBtYXJraW5mby0+bW9kZSAhPSBYVF9NQVJLX09SKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk1BUks6IHVua25vd24gbW9kZSAldVxuIiwKLQkJICAgICAgIG1hcmtpbmZvLT5tb2RlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAobWFya2luZm8tPm1hcmsgPiAweGZmZmZmZmZmKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk1BUks6IE9ubHkgc3VwcG9ydHMgMzJiaXQgd2lkZSBtYXJrXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotI2lmZGVmIENPTkZJR19DT01QQVQKLXN0cnVjdCBjb21wYXRfeHRfbWFya190YXJnZXRfaW5mbyB7Ci0JY29tcGF0X3Vsb25nX3QJbWFyazsKLX07Ci0KLXN0YXRpYyB2b2lkIG1hcmtfdGdfY29tcGF0X2Zyb21fdXNlcl92MCh2b2lkICpkc3QsIHZvaWQgKnNyYykKLXsKLQljb25zdCBzdHJ1Y3QgY29tcGF0X3h0X21hcmtfdGFyZ2V0X2luZm8gKmNtID0gc3JjOwotCXN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvIG0gPSB7Ci0JCS5tYXJrCT0gY20tPm1hcmssCi0JfTsKLQltZW1jcHkoZHN0LCAmbSwgc2l6ZW9mKG0pKTsKLX0KLQotc3RhdGljIGludCBtYXJrX3RnX2NvbXBhdF90b191c2VyX3YwKHZvaWQgX191c2VyICpkc3QsIHZvaWQgKnNyYykKLXsKLQljb25zdCBzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mbyAqbSA9IHNyYzsKLQlzdHJ1Y3QgY29tcGF0X3h0X21hcmtfdGFyZ2V0X2luZm8gY20gPSB7Ci0JCS5tYXJrCT0gbS0+bWFyaywKLQl9OwotCXJldHVybiBjb3B5X3RvX3VzZXIoZHN0LCAmY20sIHNpemVvZihjbSkpID8gLUVGQVVMVCA6IDA7Ci19Ci0KLXN0cnVjdCBjb21wYXRfeHRfbWFya190YXJnZXRfaW5mb192MSB7Ci0JY29tcGF0X3Vsb25nX3QJbWFyazsKLQl1X2ludDhfdAltb2RlOwotCXVfaW50OF90CV9fcGFkMTsKLQl1X2ludDE2X3QJX19wYWQyOwotfTsKLQotc3RhdGljIHZvaWQgbWFya190Z19jb21wYXRfZnJvbV91c2VyX3YxKHZvaWQgKmRzdCwgdm9pZCAqc3JjKQotewotCWNvbnN0IHN0cnVjdCBjb21wYXRfeHRfbWFya190YXJnZXRfaW5mb192MSAqY20gPSBzcmM7Ci0Jc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm9fdjEgbSA9IHsKLQkJLm1hcmsJPSBjbS0+bWFyaywKLQkJLm1vZGUJPSBjbS0+bW9kZSwKLQl9OwotCW1lbWNweShkc3QsICZtLCBzaXplb2YobSkpOwotfQotCi1zdGF0aWMgaW50IG1hcmtfdGdfY29tcGF0X3RvX3VzZXJfdjEodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKQotewotCWNvbnN0IHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvX3YxICptID0gc3JjOwotCXN0cnVjdCBjb21wYXRfeHRfbWFya190YXJnZXRfaW5mb192MSBjbSA9IHsKLQkJLm1hcmsJPSBtLT5tYXJrLAotCQkubW9kZQk9IG0tPm1vZGUsCi0JfTsKLQlyZXR1cm4gY29weV90b191c2VyKGRzdCwgJmNtLCBzaXplb2YoY20pKSA/IC1FRkFVTFQgOiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KLQotc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgbWFya190Z19yZWdbXSBfX3JlYWRfbW9zdGx5ID0gewotCXsKLQkJLm5hbWUJCT0gIk1BUksiLAotCQkuZmFtaWx5CQk9IE5GUFJPVE9fVU5TUEVDLAotCQkucmV2aXNpb24JPSAwLAotCQkuY2hlY2tlbnRyeQk9IG1hcmtfdGdfY2hlY2tfdjAsCi0JCS50YXJnZXQJCT0gbWFya190Z192MCwKLQkJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm8pLAotI2lmZGVmIENPTkZJR19DT01QQVQKLQkJLmNvbXBhdHNpemUJPSBzaXplb2Yoc3RydWN0IGNvbXBhdF94dF9tYXJrX3RhcmdldF9pbmZvKSwKLQkJLmNvbXBhdF9mcm9tX3VzZXIgPSBtYXJrX3RnX2NvbXBhdF9mcm9tX3VzZXJfdjAsCi0JCS5jb21wYXRfdG9fdXNlcgk9IG1hcmtfdGdfY29tcGF0X3RvX3VzZXJfdjAsCi0jZW5kaWYKLQkJLnRhYmxlCQk9ICJtYW5nbGUiLAotCQkubWUJCT0gVEhJU19NT0RVTEUsCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJNQVJLIiwKLQkJLmZhbWlseQkJPSBORlBST1RPX1VOU1BFQywKLQkJLnJldmlzaW9uCT0gMSwKLQkJLmNoZWNrZW50cnkJPSBtYXJrX3RnX2NoZWNrX3YxLAotCQkudGFyZ2V0CQk9IG1hcmtfdGdfdjEsCi0JCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvX3YxKSwKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0JCS5jb21wYXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfbWFya190YXJnZXRfaW5mb192MSksCi0JCS5jb21wYXRfZnJvbV91c2VyID0gbWFya190Z19jb21wYXRfZnJvbV91c2VyX3YxLAotCQkuY29tcGF0X3RvX3VzZXIJPSBtYXJrX3RnX2NvbXBhdF90b191c2VyX3YxLAotI2VuZGlmCi0JCS50YWJsZQkJPSAibWFuZ2xlIiwKLQkJLm1lCQk9IFRISVNfTU9EVUxFLAotCX0sCi0JewotCQkubmFtZSAgICAgICAgICAgPSAiTUFSSyIsCi0JCS5yZXZpc2lvbiAgICAgICA9IDIsCi0JCS5mYW1pbHkgICAgICAgICA9IE5GUFJPVE9fVU5TUEVDLAotCQkudGFyZ2V0ICAgICAgICAgPSBtYXJrX3RnLAotCQkudGFyZ2V0c2l6ZSAgICAgPSBzaXplb2Yoc3RydWN0IHh0X21hcmtfdGdpbmZvMiksCi0JCS5tZSAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCX0sCitzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBtYXJrX3RnX3JlZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lICAgICAgICAgICA9ICJNQVJLIiwKKwkucmV2aXNpb24gICAgICAgPSAyLAorCS5mYW1pbHkgICAgICAgICA9IE5GUFJPVE9fVU5TUEVDLAorCS50YXJnZXQgICAgICAgICA9IG1hcmtfdGcsCisJLnRhcmdldHNpemUgICAgID0gc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX3RnaW5mbzIpLAorCS5tZSAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFya190Z19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldHMobWFya190Z19yZWcsIEFSUkFZX1NJWkUobWFya190Z19yZWcpKTsKKwlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0KCZtYXJrX3RnX3JlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYXJrX3RnX2V4aXQodm9pZCkKIHsKLQl4dF91bnJlZ2lzdGVyX3RhcmdldHMobWFya190Z19yZWcsIEFSUkFZX1NJWkUobWFya190Z19yZWcpKTsKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmbWFya190Z19yZWcpOwogfQogCiBtb2R1bGVfaW5pdChtYXJrX3RnX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25ubWFyay5jIGIvbmV0L25ldGZpbHRlci94dF9jb25ubWFyay5jCmluZGV4IDg2Y2FjYWIuLjEyMmFhOGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmMKQEAgLTQ3LDM2ICs0Nyw2IEBACiAJcmV0dXJuICgoY3QtPm1hcmsgJiBpbmZvLT5tYXNrKSA9PSBpbmZvLT5tYXJrKSBeIGluZm8tPmludmVydDsKIH0KIAotc3RhdGljIGJvb2wKLWNvbm5tYXJrX210X3YwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCB4dF9jb25ubWFya19pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87Ci0JY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0OwotCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwotCi0JY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKLQlpZiAoIWN0KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gKChjdC0+bWFyayAmIGluZm8tPm1hc2spID09IGluZm8tPm1hcmspIF4gaW5mby0+aW52ZXJ0OwotfQotCi1zdGF0aWMgYm9vbCBjb25ubWFya19tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyAqY20gPSBwYXItPm1hdGNoaW5mbzsKLQotCWlmIChjbS0+bWFyayA+IDB4ZmZmZmZmZmYgfHwgY20tPm1hc2sgPiAweGZmZmZmZmZmKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNvbm5tYXJrOiBvbmx5IHN1cHBvcnQgMzJiaXQgbWFya1xuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JaWYgKG5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQocGFyLT5mYW1pbHkpIDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjYW4ndCBsb2FkIGNvbm50cmFjayBzdXBwb3J0IGZvciAiCi0JCQkJICAgICJwcm90bz0ldVxuIiwgcGFyLT5mYW1pbHkpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgYm9vbCBjb25ubWFya19tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIHsKIAlpZiAobmZfY3RfbDNwcm90b190cnlfbW9kdWxlX2dldChwYXItPmZhbWlseSkgPCAwKSB7CkBAIC05Miw3NCArNjIsMjUgQEAKIAluZl9jdF9sM3Byb3RvX21vZHVsZV9wdXQocGFyLT5mYW1pbHkpOwogfQogCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotc3RydWN0IGNvbXBhdF94dF9jb25ubWFya19pbmZvIHsKLQljb21wYXRfdWxvbmdfdAltYXJrLCBtYXNrOwotCXVfaW50OF90CWludmVydDsKLQl1X2ludDhfdAlfX3BhZDE7Ci0JdV9pbnQxNl90CV9fcGFkMjsKLX07Ci0KLXN0YXRpYyB2b2lkIGNvbm5tYXJrX210X2NvbXBhdF9mcm9tX3VzZXJfdjAodm9pZCAqZHN0LCB2b2lkICpzcmMpCi17Ci0JY29uc3Qgc3RydWN0IGNvbXBhdF94dF9jb25ubWFya19pbmZvICpjbSA9IHNyYzsKLQlzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyBtID0gewotCQkubWFyawk9IGNtLT5tYXJrLAotCQkubWFzawk9IGNtLT5tYXNrLAotCQkuaW52ZXJ0CT0gY20tPmludmVydCwKLQl9OwotCW1lbWNweShkc3QsICZtLCBzaXplb2YobSkpOwotfQotCi1zdGF0aWMgaW50IGNvbm5tYXJrX210X2NvbXBhdF90b191c2VyX3YwKHZvaWQgX191c2VyICpkc3QsIHZvaWQgKnNyYykKLXsKLQljb25zdCBzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyAqbSA9IHNyYzsKLQlzdHJ1Y3QgY29tcGF0X3h0X2Nvbm5tYXJrX2luZm8gY20gPSB7Ci0JCS5tYXJrCT0gbS0+bWFyaywKLQkJLm1hc2sJPSBtLT5tYXNrLAotCQkuaW52ZXJ0CT0gbS0+aW52ZXJ0LAotCX07Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcihkc3QsICZjbSwgc2l6ZW9mKGNtKSkgPyAtRUZBVUxUIDogMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCi0KLXN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggY29ubm1hcmtfbXRfcmVnW10gX19yZWFkX21vc3RseSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJjb25ubWFyayIsCi0JCS5yZXZpc2lvbgk9IDAsCi0JCS5mYW1pbHkJCT0gTkZQUk9UT19VTlNQRUMsCi0JCS5jaGVja2VudHJ5CT0gY29ubm1hcmtfbXRfY2hlY2tfdjAsCi0JCS5tYXRjaAkJPSBjb25ubWFya19tdF92MCwKLQkJLmRlc3Ryb3kJPSBjb25ubWFya19tdF9kZXN0cm95LAotCQkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25ubWFya19pbmZvKSwKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0JCS5jb21wYXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfY29ubm1hcmtfaW5mbyksCi0JCS5jb21wYXRfZnJvbV91c2VyID0gY29ubm1hcmtfbXRfY29tcGF0X2Zyb21fdXNlcl92MCwKLQkJLmNvbXBhdF90b191c2VyCT0gY29ubm1hcmtfbXRfY29tcGF0X3RvX3VzZXJfdjAsCi0jZW5kaWYKLQkJLm1lCQk9IFRISVNfTU9EVUxFCi0JfSwKLQl7Ci0JCS5uYW1lICAgICAgICAgICA9ICJjb25ubWFyayIsCi0JCS5yZXZpc2lvbiAgICAgICA9IDEsCi0JCS5mYW1pbHkgICAgICAgICA9IE5GUFJPVE9fVU5TUEVDLAotCQkuY2hlY2tlbnRyeSAgICAgPSBjb25ubWFya19tdF9jaGVjaywKLQkJLm1hdGNoICAgICAgICAgID0gY29ubm1hcmtfbXQsCi0JCS5tYXRjaHNpemUgICAgICA9IHNpemVvZihzdHJ1Y3QgeHRfY29ubm1hcmtfbXRpbmZvMSksCi0JCS5kZXN0cm95ICAgICAgICA9IGNvbm5tYXJrX210X2Rlc3Ryb3ksCi0JCS5tZSAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCX0sCitzdGF0aWMgc3RydWN0IHh0X21hdGNoIGNvbm5tYXJrX210X3JlZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lICAgICAgICAgICA9ICJjb25ubWFyayIsCisJLnJldmlzaW9uICAgICAgID0gMSwKKwkuZmFtaWx5ICAgICAgICAgPSBORlBST1RPX1VOU1BFQywKKwkuY2hlY2tlbnRyeSAgICAgPSBjb25ubWFya19tdF9jaGVjaywKKwkubWF0Y2ggICAgICAgICAgPSBjb25ubWFya19tdCwKKwkubWF0Y2hzaXplICAgICAgPSBzaXplb2Yoc3RydWN0IHh0X2Nvbm5tYXJrX210aW5mbzEpLAorCS5kZXN0cm95ICAgICAgICA9IGNvbm5tYXJrX210X2Rlc3Ryb3ksCisJLm1lICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjb25ubWFya19tdF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoZXMoY29ubm1hcmtfbXRfcmVnLAotCSAgICAgICBBUlJBWV9TSVpFKGNvbm5tYXJrX210X3JlZykpOworCXJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaCgmY29ubm1hcmtfbXRfcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNvbm5tYXJrX210X2V4aXQodm9pZCkKIHsKLQl4dF91bnJlZ2lzdGVyX21hdGNoZXMoY29ubm1hcmtfbXRfcmVnLCBBUlJBWV9TSVpFKGNvbm5tYXJrX210X3JlZykpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJmNvbm5tYXJrX210X3JlZyk7CiB9CiAKIG1vZHVsZV9pbml0KGNvbm5tYXJrX210X2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmMKaW5kZXggZmM1ODE4MC4uNmRjNDY1MiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jCkBAIC0xOSwxMDEgKzE5LDEyIEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIk1hcmMgQm91Y2hlciA8bWFyY0BtYnNpLmNhPiIpOwotTU9EVUxFX0FVVEhPUigiSmFuIEVuZ2VsaGFyZHQgPGplbmdlbGhAY29tcHV0ZXJnbWJoLmRlPiIpOworTU9EVUxFX0FVVEhPUigiSmFuIEVuZ2VsaGFyZHQgPGplbmdlbGhAbWVkb3phcy5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogY29ubmVjdGlvbiB0cmFja2luZyBzdGF0ZSBtYXRjaCIpOwogTU9EVUxFX0FMSUFTKCJpcHRfY29ubnRyYWNrIik7CiBNT0RVTEVfQUxJQVMoImlwNnRfY29ubnRyYWNrIik7CiAKIHN0YXRpYyBib29sCi1jb25udHJhY2tfbXRfdjAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IHh0X2Nvbm50cmFja19pbmZvICpzaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwotCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdDsKLQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKLQl1bnNpZ25lZCBpbnQgc3RhdGViaXQ7Ci0KLQljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwotCi0jZGVmaW5lIEZXSU5WKGJvb2wsIGludmZsZykgKChib29sKSBeICEhKHNpbmZvLT5pbnZmbGFncyAmIChpbnZmbGcpKSkKLQotCWlmIChjdCA9PSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkKLQkJc3RhdGViaXQgPSBYVF9DT05OVFJBQ0tfU1RBVEVfVU5UUkFDS0VEOwotCWVsc2UgaWYgKGN0KQotCQlzdGF0ZWJpdCA9IFhUX0NPTk5UUkFDS19TVEFURV9CSVQoY3RpbmZvKTsKLQllbHNlCi0JCXN0YXRlYml0ID0gWFRfQ09OTlRSQUNLX1NUQVRFX0lOVkFMSUQ7Ci0KLQlpZiAoc2luZm8tPmZsYWdzICYgWFRfQ09OTlRSQUNLX1NUQVRFKSB7Ci0JCWlmIChjdCkgewotCQkJaWYgKHRlc3RfYml0KElQU19TUkNfTkFUX0JJVCwgJmN0LT5zdGF0dXMpKQotCQkJCXN0YXRlYml0IHw9IFhUX0NPTk5UUkFDS19TVEFURV9TTkFUOwotCQkJaWYgKHRlc3RfYml0KElQU19EU1RfTkFUX0JJVCwgJmN0LT5zdGF0dXMpKQotCQkJCXN0YXRlYml0IHw9IFhUX0NPTk5UUkFDS19TVEFURV9ETkFUOwotCQl9Ci0JCWlmIChGV0lOVigoc3RhdGViaXQgJiBzaW5mby0+c3RhdGVtYXNrKSA9PSAwLAotCQkJICBYVF9DT05OVFJBQ0tfU1RBVEUpKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChjdCA9PSBOVUxMKSB7Ci0JCWlmIChzaW5mby0+ZmxhZ3MgJiB+WFRfQ09OTlRSQUNLX1NUQVRFKQotCQkJcmV0dXJuIGZhbHNlOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlpZiAoc2luZm8tPmZsYWdzICYgWFRfQ09OTlRSQUNLX1BST1RPICYmCi0JICAgIEZXSU5WKG5mX2N0X3Byb3RvbnVtKGN0KSAhPQotCQkgIHNpbmZvLT50dXBsZVtJUF9DVF9ESVJfT1JJR0lOQUxdLmRzdC5wcm90b251bSwKLQkJICBYVF9DT05OVFJBQ0tfUFJPVE8pKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoc2luZm8tPmZsYWdzICYgWFRfQ09OTlRSQUNLX09SSUdTUkMgJiYKLQkgICAgRldJTlYoKGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMudTMuaXAgJgotCQkgICBzaW5mby0+c2lwbXNrW0lQX0NUX0RJUl9PUklHSU5BTF0uc19hZGRyKSAhPQotCQkgIHNpbmZvLT50dXBsZVtJUF9DVF9ESVJfT1JJR0lOQUxdLnNyYy5pcCwKLQkJICBYVF9DT05OVFJBQ0tfT1JJR1NSQykpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChzaW5mby0+ZmxhZ3MgJiBYVF9DT05OVFJBQ0tfT1JJR0RTVCAmJgotCSAgICBGV0lOVigoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC51My5pcCAmCi0JCSAgIHNpbmZvLT5kaXBtc2tbSVBfQ1RfRElSX09SSUdJTkFMXS5zX2FkZHIpICE9Ci0JCSAgc2luZm8tPnR1cGxlW0lQX0NUX0RJUl9PUklHSU5BTF0uZHN0LmlwLAotCQkgIFhUX0NPTk5UUkFDS19PUklHRFNUKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKHNpbmZvLT5mbGFncyAmIFhUX0NPTk5UUkFDS19SRVBMU1JDICYmCi0JICAgIEZXSU5WKChjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuc3JjLnUzLmlwICYKLQkJICAgc2luZm8tPnNpcG1za1tJUF9DVF9ESVJfUkVQTFldLnNfYWRkcikgIT0KLQkJICBzaW5mby0+dHVwbGVbSVBfQ1RfRElSX1JFUExZXS5zcmMuaXAsCi0JCSAgWFRfQ09OTlRSQUNLX1JFUExTUkMpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoc2luZm8tPmZsYWdzICYgWFRfQ09OTlRSQUNLX1JFUExEU1QgJiYKLQkgICAgRldJTlYoKGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZS5kc3QudTMuaXAgJgotCQkgICBzaW5mby0+ZGlwbXNrW0lQX0NUX0RJUl9SRVBMWV0uc19hZGRyKSAhPQotCQkgIHNpbmZvLT50dXBsZVtJUF9DVF9ESVJfUkVQTFldLmRzdC5pcCwKLQkJICBYVF9DT05OVFJBQ0tfUkVQTERTVCkpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChzaW5mby0+ZmxhZ3MgJiBYVF9DT05OVFJBQ0tfU1RBVFVTICYmCi0JICAgIEZXSU5WKChjdC0+c3RhdHVzICYgc2luZm8tPnN0YXR1c21hc2spID09IDAsCi0JCSAgWFRfQ09OTlRSQUNLX1NUQVRVUykpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmKHNpbmZvLT5mbGFncyAmIFhUX0NPTk5UUkFDS19FWFBJUkVTKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9IHRpbWVyX3BlbmRpbmcoJmN0LT50aW1lb3V0KSA/Ci0JCQkJCShjdC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllcykvSFogOiAwOwotCi0JCWlmIChGV0lOVighKGV4cGlyZXMgPj0gc2luZm8tPmV4cGlyZXNfbWluICYmCi0JCQkgICAgZXhwaXJlcyA8PSBzaW5mby0+ZXhwaXJlc19tYXgpLAotCQkJICBYVF9DT05OVFJBQ0tfRVhQSVJFUykpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotI3VuZGVmIEZXSU5WCi19Ci0KLXN0YXRpYyBib29sCiBjb25udHJhY2tfYWRkcmNtcChjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmthZGRyLAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICp1YWRkciwKICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqdW1hc2ssIHVuc2lnbmVkIGludCBsM3Byb3RvKQpAQCAtMzM3LDczICsyNDgsOSBAQAogCWNvbm50cmFja19tdF9kZXN0cm95KHBhcik7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdHJ1Y3QgY29tcGF0X3h0X2Nvbm50cmFja19pbmZvCi17Ci0JY29tcGF0X3VpbnRfdAkJCXN0YXRlbWFzazsKLQljb21wYXRfdWludF90CQkJc3RhdHVzbWFzazsKLQlzdHJ1Y3QgaXBfY29ubnRyYWNrX29sZF90dXBsZQl0dXBsZVtJUF9DVF9ESVJfTUFYXTsKLQlzdHJ1Y3QgaW5fYWRkcgkJCXNpcG1za1tJUF9DVF9ESVJfTUFYXTsKLQlzdHJ1Y3QgaW5fYWRkcgkJCWRpcG1za1tJUF9DVF9ESVJfTUFYXTsKLQljb21wYXRfdWxvbmdfdAkJCWV4cGlyZXNfbWluOwotCWNvbXBhdF91bG9uZ190CQkJZXhwaXJlc19tYXg7Ci0JdV9pbnQ4X3QJCQlmbGFnczsKLQl1X2ludDhfdAkJCWludmZsYWdzOwotfTsKLQotc3RhdGljIHZvaWQgY29ubnRyYWNrX210X2NvbXBhdF9mcm9tX3VzZXJfdjAodm9pZCAqZHN0LCB2b2lkICpzcmMpCi17Ci0JY29uc3Qgc3RydWN0IGNvbXBhdF94dF9jb25udHJhY2tfaW5mbyAqY20gPSBzcmM7Ci0Jc3RydWN0IHh0X2Nvbm50cmFja19pbmZvIG0gPSB7Ci0JCS5zdGF0ZW1hc2sJPSBjbS0+c3RhdGVtYXNrLAotCQkuc3RhdHVzbWFzawk9IGNtLT5zdGF0dXNtYXNrLAotCQkuZXhwaXJlc19taW4JPSBjbS0+ZXhwaXJlc19taW4sCi0JCS5leHBpcmVzX21heAk9IGNtLT5leHBpcmVzX21heCwKLQkJLmZsYWdzCQk9IGNtLT5mbGFncywKLQkJLmludmZsYWdzCT0gY20tPmludmZsYWdzLAotCX07Ci0JbWVtY3B5KG0udHVwbGUsIGNtLT50dXBsZSwgc2l6ZW9mKG0udHVwbGUpKTsKLQltZW1jcHkobS5zaXBtc2ssIGNtLT5zaXBtc2ssIHNpemVvZihtLnNpcG1zaykpOwotCW1lbWNweShtLmRpcG1zaywgY20tPmRpcG1zaywgc2l6ZW9mKG0uZGlwbXNrKSk7Ci0JbWVtY3B5KGRzdCwgJm0sIHNpemVvZihtKSk7Ci19Ci0KLXN0YXRpYyBpbnQgY29ubnRyYWNrX210X2NvbXBhdF90b191c2VyX3YwKHZvaWQgX191c2VyICpkc3QsIHZvaWQgKnNyYykKLXsKLQljb25zdCBzdHJ1Y3QgeHRfY29ubnRyYWNrX2luZm8gKm0gPSBzcmM7Ci0Jc3RydWN0IGNvbXBhdF94dF9jb25udHJhY2tfaW5mbyBjbSA9IHsKLQkJLnN0YXRlbWFzawk9IG0tPnN0YXRlbWFzaywKLQkJLnN0YXR1c21hc2sJPSBtLT5zdGF0dXNtYXNrLAotCQkuZXhwaXJlc19taW4JPSBtLT5leHBpcmVzX21pbiwKLQkJLmV4cGlyZXNfbWF4CT0gbS0+ZXhwaXJlc19tYXgsCi0JCS5mbGFncwkJPSBtLT5mbGFncywKLQkJLmludmZsYWdzCT0gbS0+aW52ZmxhZ3MsCi0JfTsKLQltZW1jcHkoY20udHVwbGUsIG0tPnR1cGxlLCBzaXplb2YoY20udHVwbGUpKTsKLQltZW1jcHkoY20uc2lwbXNrLCBtLT5zaXBtc2ssIHNpemVvZihjbS5zaXBtc2spKTsKLQltZW1jcHkoY20uZGlwbXNrLCBtLT5kaXBtc2ssIHNpemVvZihjbS5kaXBtc2spKTsKLQlyZXR1cm4gY29weV90b191c2VyKGRzdCwgJmNtLCBzaXplb2YoY20pKSA/IC1FRkFVTFQgOiAwOwotfQotI2VuZGlmCi0KIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggY29ubnRyYWNrX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7CiAJewogCQkubmFtZSAgICAgICA9ICJjb25udHJhY2siLAotCQkucmV2aXNpb24gICA9IDAsCi0JCS5mYW1pbHkgICAgID0gTkZQUk9UT19JUFY0LAotCQkubWF0Y2ggICAgICA9IGNvbm50cmFja19tdF92MCwKLQkJLmNoZWNrZW50cnkgPSBjb25udHJhY2tfbXRfY2hlY2ssCi0JCS5kZXN0cm95ICAgID0gY29ubnRyYWNrX210X2Rlc3Ryb3ksCi0JCS5tYXRjaHNpemUgID0gc2l6ZW9mKHN0cnVjdCB4dF9jb25udHJhY2tfaW5mbyksCi0JCS5tZSAgICAgICAgID0gVEhJU19NT0RVTEUsCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotCQkuY29tcGF0c2l6ZSAgICAgICA9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X2Nvbm50cmFja19pbmZvKSwKLQkJLmNvbXBhdF9mcm9tX3VzZXIgPSBjb25udHJhY2tfbXRfY29tcGF0X2Zyb21fdXNlcl92MCwKLQkJLmNvbXBhdF90b191c2VyICAgPSBjb25udHJhY2tfbXRfY29tcGF0X3RvX3VzZXJfdjAsCi0jZW5kaWYKLQl9LAotCXsKLQkJLm5hbWUgICAgICAgPSAiY29ubnRyYWNrIiwKIAkJLnJldmlzaW9uICAgPSAxLAogCQkuZmFtaWx5ICAgICA9IE5GUFJPVE9fVU5TUEVDLAogCQkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgeHRfY29ubnRyYWNrX210aW5mbzEpLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9kc2NwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYwppbmRleCBjM2Y4MDg1Li4wMjgwZDNhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYwpAQCAtMTUsNyArMTUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdG9zLmg+CiAKIE1PRFVMRV9BVVRIT1IoIkhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBEU0NQL1RPUyBmaWVsZCBtYXRjaCIpOwpAQCAtNTUsMTQgKzU0LDYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wKLXRvc19tdF92MChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgaXB0X3Rvc19pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87Ci0KLQlyZXR1cm4gKGlwX2hkcihza2IpLT50b3MgPT0gaW5mby0+dG9zKSBeIGluZm8tPmludmVydDsKLX0KLQogc3RhdGljIGJvb2wgdG9zX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCB4dF90b3NfbWF0Y2hfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwpAQCAtOTQsMTQgKzg1LDYgQEAKIAl9LAogCXsKIAkJLm5hbWUJCT0gInRvcyIsCi0JCS5yZXZpc2lvbgk9IDAsCi0JCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY0LAotCQkubWF0Y2gJCT0gdG9zX210X3YwLAotCQkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfdG9zX2luZm8pLAotCQkubWUJCT0gVEhJU19NT0RVTEUsCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJ0b3MiLAogCQkucmV2aXNpb24JPSAxLAogCQkuZmFtaWx5CQk9IE5GUFJPVE9fSVBWNCwKIAkJLm1hdGNoCQk9IHRvc19tdCwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jIGIvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKaW5kZXggNTAxZjliNi4uZmZjOTYzOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKQEAgLTE0LDQwICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2lwcmFuZ2UuaD4KLQotc3RhdGljIGJvb2wKLWlwcmFuZ2VfbXRfdjAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwdF9pcHJhbmdlX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwotCi0JaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9TUkMpIHsKLQkJaWYgKChudG9obChpcGgtPnNhZGRyKSA8IG50b2hsKGluZm8tPnNyYy5taW5faXApCi0JCQkgIHx8IG50b2hsKGlwaC0+c2FkZHIpID4gbnRvaGwoaW5mby0+c3JjLm1heF9pcCkpCi0JCQkgXiAhIShpbmZvLT5mbGFncyAmIElQUkFOR0VfU1JDX0lOVikpIHsKLQkJCXByX2RlYnVnKCJzcmMgSVAgJXBJNCBOT1QgaW4gcmFuZ2UgJXMlcEk0LSVwSTRcbiIsCi0JCQkJICZpcGgtPnNhZGRyLAotCQkJCSBpbmZvLT5mbGFncyAmIElQUkFOR0VfU1JDX0lOViA/ICIoSU5WKSAiIDogIiIsCi0JCQkJICZpbmZvLT5zcmMubWluX2lwLAotCQkJCSAmaW5mby0+c3JjLm1heF9pcCk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1QpIHsKLQkJaWYgKChudG9obChpcGgtPmRhZGRyKSA8IG50b2hsKGluZm8tPmRzdC5taW5faXApCi0JCQkgIHx8IG50b2hsKGlwaC0+ZGFkZHIpID4gbnRvaGwoaW5mby0+ZHN0Lm1heF9pcCkpCi0JCQkgXiAhIShpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUX0lOVikpIHsKLQkJCXByX2RlYnVnKCJkc3QgSVAgJXBJNCBOT1QgaW4gcmFuZ2UgJXMlcEk0LSVwSTRcbiIsCi0JCQkJICZpcGgtPmRhZGRyLAotCQkJCSBpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUX0lOViA/ICIoSU5WKSAiIDogIiIsCi0JCQkJICZpbmZvLT5kc3QubWluX2lwLAotCQkJCSAmaW5mby0+ZHN0Lm1heF9pcCk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JcmV0dXJuIHRydWU7Ci19CiAKIHN0YXRpYyBib29sCiBpcHJhbmdlX210NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKQEAgLTEyNywxNCArOTMsNiBAQAogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBpcHJhbmdlX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7CiAJewogCQkubmFtZSAgICAgID0gImlwcmFuZ2UiLAotCQkucmV2aXNpb24gID0gMCwKLQkJLmZhbWlseSAgICA9IE5GUFJPVE9fSVBWNCwKLQkJLm1hdGNoICAgICA9IGlwcmFuZ2VfbXRfdjAsCi0JCS5tYXRjaHNpemUgPSBzaXplb2Yoc3RydWN0IGlwdF9pcHJhbmdlX2luZm8pLAotCQkubWUgICAgICAgID0gVEhJU19NT0RVTEUsCi0JfSwKLQl7Ci0JCS5uYW1lICAgICAgPSAiaXByYW5nZSIsCiAJCS5yZXZpc2lvbiAgPSAxLAogCQkuZmFtaWx5ICAgID0gTkZQUk9UT19JUFY0LAogCQkubWF0Y2ggICAgID0gaXByYW5nZV9tdDQsCkBAIC0xNjQsNyArMTIyLDggQEAKIG1vZHVsZV9pbml0KGlwcmFuZ2VfbXRfaW5pdCk7CiBtb2R1bGVfZXhpdChpcHJhbmdlX210X2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSm96c2VmIEthZGxlY3NpayA8a2FkbGVjQGJsYWNraG9sZS5rZmtpLmh1PiwgSmFuIEVuZ2VsaGFyZHQgPGplbmdlbGhAY29tcHV0ZXJnbWJoLmRlPiIpOworTU9EVUxFX0FVVEhPUigiSm96c2VmIEthZGxlY3NpayA8a2FkbGVjQGJsYWNraG9sZS5rZmtpLmh1PiIpOworTU9EVUxFX0FVVEhPUigiSmFuIEVuZ2VsaGFyZHQgPGplbmdlbGhAbWVkb3phcy5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogYXJiaXRyYXJ5IElQdjQgcmFuZ2UgbWF0Y2hpbmciKTsKIE1PRFVMRV9BTElBUygiaXB0X2lwcmFuZ2UiKTsKIE1PRFVMRV9BTElBUygiaXA2dF9pcHJhbmdlIik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X21hcmsuYyBiL25ldC9uZXRmaWx0ZXIveHRfbWFyay5jCmluZGV4IDEwYjllMzQuLjFkYjA3ZDggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbWFyay5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfbWFyay5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqCShDKSAxOTk5LTIwMDEgTWFyYyBCb3VjaGVyIDxtYXJjQG1ic2kuY2E+CiAgKglDb3B5cmlnaHQgwqkgQ0MgQ29tcHV0ZXIgQ29uc3VsdGFudHMgR21iSCwgMjAwNyAtIDIwMDgKLSAqCUphbiBFbmdlbGhhcmR0IDxqZW5nZWxoQGNvbXB1dGVyZ21iaC5kZT4KKyAqCUphbiBFbmdlbGhhcmR0IDxqZW5nZWxoQG1lZG96YXMuZGU+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yMywxNCArMjMsNiBAQAogTU9EVUxFX0FMSUFTKCJpcDZ0X21hcmsiKTsKIAogc3RhdGljIGJvb2wKLW1hcmtfbXRfdjAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IHh0X21hcmtfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwotCi0JcmV0dXJuICgoc2tiLT5tYXJrICYgaW5mby0+bWFzaykgPT0gaW5mby0+bWFyaykgXiBpbmZvLT5pbnZlcnQ7Ci19Ci0KLXN0YXRpYyBib29sCiBtYXJrX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCB4dF9tYXJrX210aW5mbzEgKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKQEAgLTM4LDgxICszMCwyMyBAQAogCXJldHVybiAoKHNrYi0+bWFyayAmIGluZm8tPm1hc2spID09IGluZm8tPm1hcmspIF4gaW5mby0+aW52ZXJ0OwogfQogCi1zdGF0aWMgYm9vbCBtYXJrX210X2NoZWNrX3YwKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCB4dF9tYXJrX2luZm8gKm1pbmZvID0gcGFyLT5tYXRjaGluZm87Ci0KLQlpZiAobWluZm8tPm1hcmsgPiAweGZmZmZmZmZmIHx8IG1pbmZvLT5tYXNrID4gMHhmZmZmZmZmZikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYXJrOiBvbmx5IHN1cHBvcnRzIDMyYml0IG1hcmtcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotc3RydWN0IGNvbXBhdF94dF9tYXJrX2luZm8gewotCWNvbXBhdF91bG9uZ190CW1hcmssIG1hc2s7Ci0JdV9pbnQ4X3QJaW52ZXJ0OwotCXVfaW50OF90CV9fcGFkMTsKLQl1X2ludDE2X3QJX19wYWQyOwotfTsKLQotc3RhdGljIHZvaWQgbWFya19tdF9jb21wYXRfZnJvbV91c2VyX3YwKHZvaWQgKmRzdCwgdm9pZCAqc3JjKQotewotCWNvbnN0IHN0cnVjdCBjb21wYXRfeHRfbWFya19pbmZvICpjbSA9IHNyYzsKLQlzdHJ1Y3QgeHRfbWFya19pbmZvIG0gPSB7Ci0JCS5tYXJrCT0gY20tPm1hcmssCi0JCS5tYXNrCT0gY20tPm1hc2ssCi0JCS5pbnZlcnQJPSBjbS0+aW52ZXJ0LAotCX07Ci0JbWVtY3B5KGRzdCwgJm0sIHNpemVvZihtKSk7Ci19Ci0KLXN0YXRpYyBpbnQgbWFya19tdF9jb21wYXRfdG9fdXNlcl92MCh2b2lkIF9fdXNlciAqZHN0LCB2b2lkICpzcmMpCi17Ci0JY29uc3Qgc3RydWN0IHh0X21hcmtfaW5mbyAqbSA9IHNyYzsKLQlzdHJ1Y3QgY29tcGF0X3h0X21hcmtfaW5mbyBjbSA9IHsKLQkJLm1hcmsJPSBtLT5tYXJrLAotCQkubWFzawk9IG0tPm1hc2ssCi0JCS5pbnZlcnQJPSBtLT5pbnZlcnQsCi0JfTsKLQlyZXR1cm4gY29weV90b191c2VyKGRzdCwgJmNtLCBzaXplb2YoY20pKSA/IC1FRkFVTFQgOiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KLQotc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBtYXJrX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JewotCQkubmFtZQkJPSAibWFyayIsCi0JCS5yZXZpc2lvbgk9IDAsCi0JCS5mYW1pbHkJCT0gTkZQUk9UT19VTlNQRUMsCi0JCS5jaGVja2VudHJ5CT0gbWFya19tdF9jaGVja192MCwKLQkJLm1hdGNoCQk9IG1hcmtfbXRfdjAsCi0JCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X21hcmtfaW5mbyksCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotCQkuY29tcGF0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X21hcmtfaW5mbyksCi0JCS5jb21wYXRfZnJvbV91c2VyID0gbWFya19tdF9jb21wYXRfZnJvbV91c2VyX3YwLAotCQkuY29tcGF0X3RvX3VzZXIJPSBtYXJrX210X2NvbXBhdF90b191c2VyX3YwLAotI2VuZGlmCi0JCS5tZQkJPSBUSElTX01PRFVMRSwKLQl9LAotCXsKLQkJLm5hbWUgICAgICAgICAgID0gIm1hcmsiLAotCQkucmV2aXNpb24gICAgICAgPSAxLAotCQkuZmFtaWx5ICAgICAgICAgPSBORlBST1RPX1VOU1BFQywKLQkJLm1hdGNoICAgICAgICAgID0gbWFya19tdCwKLQkJLm1hdGNoc2l6ZSAgICAgID0gc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX210aW5mbzEpLAotCQkubWUgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKLQl9LAorc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBtYXJrX210X3JlZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lICAgICAgICAgICA9ICJtYXJrIiwKKwkucmV2aXNpb24gICAgICAgPSAxLAorCS5mYW1pbHkgICAgICAgICA9IE5GUFJPVE9fVU5TUEVDLAorCS5tYXRjaCAgICAgICAgICA9IG1hcmtfbXQsCisJLm1hdGNoc2l6ZSAgICAgID0gc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX210aW5mbzEpLAorCS5tZSAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFya19tdF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoZXMobWFya19tdF9yZWcsIEFSUkFZX1NJWkUobWFya19tdF9yZWcpKTsKKwlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goJm1hcmtfbXRfcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG1hcmtfbXRfZXhpdCh2b2lkKQogewotCXh0X3VucmVnaXN0ZXJfbWF0Y2hlcyhtYXJrX210X3JlZywgQVJSQVlfU0laRShtYXJrX210X3JlZykpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJm1hcmtfbXRfcmVnKTsKIH0KIAogbW9kdWxlX2luaXQobWFya19tdF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jCmluZGV4IDBmNDgyZTIuLjYzZTE5MDUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9vc2YuYwpAQCAtNzAsNyArNzAsOCBAQAogfQogCiBzdGF0aWMgaW50IHh0X29zZl9hZGRfY2FsbGJhY2soc3RydWN0IHNvY2sgKmN0bmwsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc3RydWN0IG5sYXR0ciAqb3NmX2F0dHJzW10pCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG9zZl9hdHRyc1tdKQogewogCXN0cnVjdCB4dF9vc2ZfdXNlcl9maW5nZXIgKmY7CiAJc3RydWN0IHh0X29zZl9maW5nZXIgKmtmID0gTlVMTCwgKnNmOwpAQCAtMTEyLDcgKzExMyw4IEBACiB9CiAKIHN0YXRpYyBpbnQgeHRfb3NmX3JlbW92ZV9jYWxsYmFjayhzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBubG1zZ2hkciAqbmxoLCBzdHJ1Y3QgbmxhdHRyICpvc2ZfYXR0cnNbXSkKKwkJCQkgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJCSAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG9zZl9hdHRyc1tdKQogewogCXN0cnVjdCB4dF9vc2ZfdXNlcl9maW5nZXIgKmY7CiAJc3RydWN0IHh0X29zZl9maW5nZXIgKnNmOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9vd25lci5jIGIvbmV0L25ldGZpbHRlci94dF9vd25lci5jCmluZGV4IDIyYjJhNWUuLmQyNGM3NmQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfb3duZXIuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X293bmVyLmMKQEAgLTUsNyArNSw2IEBACiAgKiAoQykgMjAwMCBNYXJjIEJvdWNoZXIgPG1hcmNAbWJzaS5jYT4KICAqCiAgKiBDb3B5cmlnaHQgwqkgQ0MgQ29tcHV0ZXIgQ29uc3VsdGFudHMgR21iSCwgMjAwNyAtIDIwMDgKLSAqIDxqZW5nZWxoQGNvbXB1dGVyZ21iaC5kZT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTE3LDYwICsxNiw2IEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfb3duZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X293bmVyLmg+Ci0KLXN0YXRpYyBib29sCi1vd25lcl9tdF92MChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgaXB0X293bmVyX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQljb25zdCBzdHJ1Y3QgZmlsZSAqZmlscDsKLQotCWlmIChza2ItPnNrID09IE5VTEwgfHwgc2tiLT5zay0+c2tfc29ja2V0ID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQotCWZpbHAgPSBza2ItPnNrLT5za19zb2NrZXQtPmZpbGU7Ci0JaWYgKGZpbHAgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKGluZm8tPm1hdGNoICYgSVBUX09XTkVSX1VJRCkKLQkJaWYgKChmaWxwLT5mX2NyZWQtPmZzdWlkICE9IGluZm8tPnVpZCkgXgotCQkgICAgISEoaW5mby0+aW52ZXJ0ICYgSVBUX09XTkVSX1VJRCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoaW5mby0+bWF0Y2ggJiBJUFRfT1dORVJfR0lEKQotCQlpZiAoKGZpbHAtPmZfY3JlZC0+ZnNnaWQgIT0gaW5mby0+Z2lkKSBeCi0JCSAgICAhIShpbmZvLT5pbnZlcnQgJiBJUFRfT1dORVJfR0lEKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbAotb3duZXJfbXQ2X3YwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcDZ0X293bmVyX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQljb25zdCBzdHJ1Y3QgZmlsZSAqZmlscDsKLQotCWlmIChza2ItPnNrID09IE5VTEwgfHwgc2tiLT5zay0+c2tfc29ja2V0ID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQotCWZpbHAgPSBza2ItPnNrLT5za19zb2NrZXQtPmZpbGU7Ci0JaWYgKGZpbHAgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKGluZm8tPm1hdGNoICYgSVA2VF9PV05FUl9VSUQpCi0JCWlmICgoZmlscC0+Zl9jcmVkLT5mc3VpZCAhPSBpbmZvLT51aWQpIF4KLQkJICAgICEhKGluZm8tPmludmVydCAmIElQNlRfT1dORVJfVUlEKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCWlmIChpbmZvLT5tYXRjaCAmIElQNlRfT1dORVJfR0lEKQotCQlpZiAoKGZpbHAtPmZfY3JlZC0+ZnNnaWQgIT0gaW5mby0+Z2lkKSBeCi0JCSAgICAhIShpbmZvLT5pbnZlcnQgJiBJUDZUX09XTkVSX0dJRCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KIAogc3RhdGljIGJvb2wKIG93bmVyX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQpAQCAtMTA3LDgxICs1MiwzMCBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBvd25lcl9tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgaXB0X293bmVyX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQotCWlmIChpbmZvLT5tYXRjaCAmIChJUFRfT1dORVJfUElEIHwgSVBUX09XTkVSX1NJRCB8IElQVF9PV05FUl9DT01NKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIEtCVUlMRF9NT0ROQU1FCi0JCSAgICAgICAiOiBQSUQsIFNJRCBhbmQgY29tbWFuZCBtYXRjaGluZyBpcyBub3QgIgotCQkgICAgICAgInN1cHBvcnRlZCBhbnltb3JlXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBvd25lcl9tdDZfY2hlY2tfdjAoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfb3duZXJfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwotCi0JaWYgKGluZm8tPm1hdGNoICYgKElQNlRfT1dORVJfUElEIHwgSVA2VF9PV05FUl9TSUQpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgS0JVSUxEX01PRE5BTUUKLQkJICAgICAgICI6IFBJRCBhbmQgU0lEIG1hdGNoaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYW55bW9yZVxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBvd25lcl9tdF9yZWdbXSBfX3JlYWRfbW9zdGx5ID0gewotCXsKLQkJLm5hbWUgICAgICAgPSAib3duZXIiLAotCQkucmV2aXNpb24gICA9IDAsCi0JCS5mYW1pbHkgICAgID0gTkZQUk9UT19JUFY0LAotCQkubWF0Y2ggICAgICA9IG93bmVyX210X3YwLAotCQkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgaXB0X293bmVyX2luZm8pLAotCQkuY2hlY2tlbnRyeSA9IG93bmVyX210X2NoZWNrX3YwLAotCQkuaG9va3MgICAgICA9ICgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKSB8Ci0JCSAgICAgICAgICAgICAgKDEgPDwgTkZfSU5FVF9QT1NUX1JPVVRJTkcpLAotCQkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAotCX0sCi0JewotCQkubmFtZSAgICAgICA9ICJvd25lciIsCi0JCS5yZXZpc2lvbiAgID0gMCwKLQkJLmZhbWlseSAgICAgPSBORlBST1RPX0lQVjYsCi0JCS5tYXRjaCAgICAgID0gb3duZXJfbXQ2X3YwLAotCQkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgaXA2dF9vd25lcl9pbmZvKSwKLQkJLmNoZWNrZW50cnkgPSBvd25lcl9tdDZfY2hlY2tfdjAsCi0JCS5ob29rcyAgICAgID0gKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpIHwKLQkJICAgICAgICAgICAgICAoMSA8PCBORl9JTkVUX1BPU1RfUk9VVElORyksCi0JCS5tZSAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JfSwKLQl7Ci0JCS5uYW1lICAgICAgID0gIm93bmVyIiwKLQkJLnJldmlzaW9uICAgPSAxLAotCQkuZmFtaWx5ICAgICA9IE5GUFJPVE9fVU5TUEVDLAotCQkubWF0Y2ggICAgICA9IG93bmVyX210LAotCQkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgeHRfb3duZXJfbWF0Y2hfaW5mbyksCi0JCS5ob29rcyAgICAgID0gKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpIHwKLQkJICAgICAgICAgICAgICAoMSA8PCBORl9JTkVUX1BPU1RfUk9VVElORyksCi0JCS5tZSAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggb3duZXJfbXRfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUgICAgICAgPSAib3duZXIiLAorCS5yZXZpc2lvbiAgID0gMSwKKwkuZmFtaWx5ICAgICA9IE5GUFJPVE9fVU5TUEVDLAorCS5tYXRjaCAgICAgID0gb3duZXJfbXQsCisJLm1hdGNoc2l6ZSAgPSBzaXplb2Yoc3RydWN0IHh0X293bmVyX21hdGNoX2luZm8pLAorCS5ob29rcyAgICAgID0gKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpIHwKKwkgICAgICAgICAgICAgICgxIDw8IE5GX0lORVRfUE9TVF9ST1VUSU5HKSwKKwkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb3duZXJfbXRfaW5pdCh2b2lkKQogewotCXJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaGVzKG93bmVyX210X3JlZywgQVJSQVlfU0laRShvd25lcl9tdF9yZWcpKTsKKwlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goJm93bmVyX210X3JlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvd25lcl9tdF9leGl0KHZvaWQpCiB7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaGVzKG93bmVyX210X3JlZywgQVJSQVlfU0laRShvd25lcl9tdF9yZWcpKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZvd25lcl9tdF9yZWcpOwogfQogCiBtb2R1bGVfaW5pdChvd25lcl9tdF9pbml0KTsKIG1vZHVsZV9leGl0KG93bmVyX210X2V4aXQpOwotTU9EVUxFX0FVVEhPUigiSmFuIEVuZ2VsaGFyZHQgPGplbmdlbGhAY29tcHV0ZXJnbWJoLmRlPiIpOworTU9EVUxFX0FVVEhPUigiSmFuIEVuZ2VsaGFyZHQgPGplbmdlbGhAbWVkb3phcy5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogc29ja2V0IG93bmVyIG1hdGNoaW5nIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVMoImlwdF9vd25lciIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMKaW5kZXggMTZlNmM0My4uNmNlMDAyMCAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jCkBAIC0xODUsOCArMTg1LDcgQEAKIAlyZXR1cm4gMDsKIAogY2ZnX3VubGJsX21hcF9hZGRfZmFpbHVyZToKLQlpZiAoZW50cnkgIT0gTlVMTCkKLQkJa2ZyZWUoZW50cnktPmRvbWFpbik7CisJa2ZyZWUoZW50cnktPmRvbWFpbik7CiAJa2ZyZWUoZW50cnkpOwogCWtmcmVlKGFkZHJtYXApOwogCWtmcmVlKG1hcDQpOwpAQCAtMzg1LDggKzM4NCw3IEBACiAKIGNmZ19jaXBzb3Y0X21hcF9hZGRfZmFpbHVyZToKIAljaXBzb192NF9kb2lfcHV0ZGVmKGRvaV9kZWYpOwotCWlmIChlbnRyeSAhPSBOVUxMKQotCQlrZnJlZShlbnRyeS0+ZG9tYWluKTsKKwlrZnJlZShlbnRyeS0+ZG9tYWluKTsKIAlrZnJlZShlbnRyeSk7CiAJa2ZyZWUoYWRkcm1hcCk7CiAJa2ZyZWUoYWRkcmluZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDI5MzZmYTMuLmQwZmYzODIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTgzLDYgKzgzLDExIEBACiAJc3RydWN0IG1vZHVsZQkJKm1vZHVsZTsKIH07CiAKK3N0cnVjdCBsaXN0ZW5lcnNfcmN1X2hlYWQgeworCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKKwl2b2lkICpwdHI7Cit9OworCiAjZGVmaW5lIE5FVExJTktfS0VSTkVMX1NPQ0tFVAkweDEKICNkZWZpbmUgTkVUTElOS19SRUNWX1BLVElORk8JMHgyCiAjZGVmaW5lIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IJMHg0CkBAIC0xMzU2LDcgKzEzNjEsNyBAQAogCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sayA9IG5sa19zayhzayk7CiAJaW50IG5vYmxvY2sgPSBmbGFncyZNU0dfRE9OVFdBSVQ7CiAJc2l6ZV90IGNvcGllZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBza19idWZmICpza2IsICpmcmFnIF9fbWF5YmVfdW51c2VkID0gTlVMTDsKIAlpbnQgZXJyOwogCiAJaWYgKGZsYWdzJk1TR19PT0IpCkBAIC0xMzY4LDYgKzEzNzMsMzUgQEAKIAlpZiAoc2tiID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCisjaWZkZWYgQ09ORklHX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTCisJaWYgKHVubGlrZWx5KHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0KSkgeworCQlib29sIG5lZWRfY29tcGF0ID0gISEoZmxhZ3MgJiBNU0dfQ01TR19DT01QQVQpOworCisJCS8qCisJCSAqIElmIHRoaXMgc2tiIGhhcyBhIGZyYWdfbGlzdCwgdGhlbiBoZXJlIHRoYXQgbWVhbnMgdGhhdAorCQkgKiB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoZSBmcmFnX2xpc3Qgc2tiIGZvciBjb21wYXQgdGFza3MKKwkJICogYW5kIHRoZSByZWd1bGFyIHNrYiBmb3Igbm9uLWNvbXBhdCB0YXNrcy4KKwkJICoKKwkJICogVGhlIHNrYiBtaWdodCAoYW5kIGxpa2VseSB3aWxsKSBiZSBjbG9uZWQsIHNvIHdlIGNhbid0CisJCSAqIGp1c3QgcmVzZXQgZnJhZ19saXN0IGFuZCBnbyBvbiB3aXRoIHRoaW5ncyAtLSB3ZSBuZWVkIHRvCisJCSAqIGtlZXAgdGhhdC4gRm9yIHRoZSBjb21wYXQgY2FzZSB0aGF0J3MgZWFzeSAtLSBzaW1wbHkgZ2V0CisJCSAqIGEgcmVmZXJlbmNlIHRvIHRoZSBjb21wYXQgc2tiIGFuZCBmcmVlIHRoZSByZWd1bGFyIG9uZQorCQkgKiBpbmNsdWRpbmcgdGhlIGZyYWcuIEZvciB0aGUgbm9uLWNvbXBhdCBjYXNlLCB3ZSBuZWVkIHRvCisJCSAqIGF2b2lkIHNlbmRpbmcgdGhlIGZyYWcgdG8gdGhlIHVzZXIgLS0gc28gYXNzaWduIE5VTEwgYnV0CisJCSAqIHJlc3RvcmUgaXQgYmVsb3cgYmVmb3JlIGZyZWVpbmcgdGhlIHNrYi4KKwkJICovCisJCWlmIChuZWVkX2NvbXBhdCkgeworCQkJc3RydWN0IHNrX2J1ZmYgKmNvbXBza2IgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdDsKKwkJCXNrYl9nZXQoY29tcHNrYik7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCXNrYiA9IGNvbXBza2I7CisJCX0gZWxzZSB7CisJCQlmcmFnID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7CisJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdCA9IE5VTEw7CisJCX0KKwl9CisjZW5kaWYKKwogCW1zZy0+bXNnX25hbWVsZW4gPSAwOwogCiAJY29waWVkID0gc2tiLT5sZW47CkBAIC0xMzk4LDYgKzE0MzIsMTEgQEAKIAlzaW9jYi0+c2NtLT5jcmVkcyA9ICpORVRMSU5LX0NSRURTKHNrYik7CiAJaWYgKGZsYWdzICYgTVNHX1RSVU5DKQogCQljb3BpZWQgPSBza2ItPmxlbjsKKworI2lmZGVmIENPTkZJR19DT01QQVRfTkVUTElOS19NRVNTQUdFUworCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0ID0gZnJhZzsKKyNlbmRpZgorCiAJc2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7CiAKIAlpZiAobmxrLT5jYiAmJiBhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpIDw9IHNrLT5za19yY3ZidWYgLyAyKQpAQCAtMTQ1Myw3ICsxNDkyLDggQEAKIAlpZiAoZ3JvdXBzIDwgMzIpCiAJCWdyb3VwcyA9IDMyOwogCi0JbGlzdGVuZXJzID0ga3phbGxvYyhOTEdSUFNaKGdyb3VwcyksIEdGUF9LRVJORUwpOworCWxpc3RlbmVycyA9IGt6YWxsb2MoTkxHUlBTWihncm91cHMpICsgc2l6ZW9mKHN0cnVjdCBsaXN0ZW5lcnNfcmN1X2hlYWQpLAorCQkJICAgIEdGUF9LRVJORUwpOwogCWlmICghbGlzdGVuZXJzKQogCQlnb3RvIG91dF9zb2NrX3JlbGVhc2U7CiAKQEAgLTE1MDEsNiArMTU0MSwxNCBAQAogRVhQT1JUX1NZTUJPTChuZXRsaW5rX2tlcm5lbF9yZWxlYXNlKTsKIAogCitzdGF0aWMgdm9pZCBuZXRsaW5rX2ZyZWVfb2xkX2xpc3RlbmVycyhzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKQoreworCXN0cnVjdCBsaXN0ZW5lcnNfcmN1X2hlYWQgKmxyaDsKKworCWxyaCA9IGNvbnRhaW5lcl9vZihyY3VfaGVhZCwgc3RydWN0IGxpc3RlbmVyc19yY3VfaGVhZCwgcmN1X2hlYWQpOworCWtmcmVlKGxyaC0+cHRyKTsKK30KKwogLyoqCiAgKiBuZXRsaW5rX2NoYW5nZV9uZ3JvdXBzIC0gY2hhbmdlIG51bWJlciBvZiBtdWx0aWNhc3QgZ3JvdXBzCiAgKgpAQCAtMTUxNiw2ICsxNTY0LDcgQEAKIGludCBuZXRsaW5rX2NoYW5nZV9uZ3JvdXBzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGdyb3VwcykKIHsKIAl1bnNpZ25lZCBsb25nICpsaXN0ZW5lcnMsICpvbGQgPSBOVUxMOworCXN0cnVjdCBsaXN0ZW5lcnNfcmN1X2hlYWQgKm9sZF9yY3VfaGVhZDsKIAlzdHJ1Y3QgbmV0bGlua190YWJsZSAqdGJsID0gJm5sX3RhYmxlW3NrLT5za19wcm90b2NvbF07CiAJaW50IGVyciA9IDA7CiAKQEAgLTE1MjQsNyArMTU3Myw5IEBACiAKIAluZXRsaW5rX3RhYmxlX2dyYWIoKTsKIAlpZiAoTkxHUlBTWih0YmwtPmdyb3VwcykgPCBOTEdSUFNaKGdyb3VwcykpIHsKLQkJbGlzdGVuZXJzID0ga3phbGxvYyhOTEdSUFNaKGdyb3VwcyksIEdGUF9BVE9NSUMpOworCQlsaXN0ZW5lcnMgPSBremFsbG9jKE5MR1JQU1ooZ3JvdXBzKSArCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgbGlzdGVuZXJzX3JjdV9oZWFkKSwKKwkJCQkgICAgR0ZQX0FUT01JQyk7CiAJCWlmICghbGlzdGVuZXJzKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBvdXRfdW5ncmFiOwpAQCAtMTUzMiwxNiArMTU4MywyNCBAQAogCQlvbGQgPSB0YmwtPmxpc3RlbmVyczsKIAkJbWVtY3B5KGxpc3RlbmVycywgb2xkLCBOTEdSUFNaKHRibC0+Z3JvdXBzKSk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcih0YmwtPmxpc3RlbmVycywgbGlzdGVuZXJzKTsKKwkJLyoKKwkJICogRnJlZSB0aGUgb2xkIG1lbW9yeSBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIHNvIHdlCisJCSAqIGRvbid0IGxlYWsgaXQuIFdlIHVzZSBjYWxsX3JjdSgpIGhlcmUgaW4gb3JkZXIgdG8gYmUKKwkJICogYWJsZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBhdG9taWMgY29udGV4dHMuIFRoZQorCQkgKiBhbGxvY2F0aW9uIG9mIHRoaXMgbWVtb3J5IHdpbGwgaGF2ZSByZXNlcnZlZCBlbm91Z2gKKwkJICogc3BhY2UgZm9yIHN0cnVjdCBsaXN0ZW5lcnNfcmN1X2hlYWQgYXQgdGhlIGVuZC4KKwkJICovCisJCW9sZF9yY3VfaGVhZCA9ICh2b2lkICopKHRibC0+bGlzdGVuZXJzICsKKwkJCQkJTkxHUlBMT05HUyh0YmwtPmdyb3VwcykpOworCQlvbGRfcmN1X2hlYWQtPnB0ciA9IG9sZDsKKwkJY2FsbF9yY3UoJm9sZF9yY3VfaGVhZC0+cmN1X2hlYWQsIG5ldGxpbmtfZnJlZV9vbGRfbGlzdGVuZXJzKTsKIAl9CiAJdGJsLT5ncm91cHMgPSBncm91cHM7CiAKICBvdXRfdW5ncmFiOgogCW5ldGxpbmtfdGFibGVfdW5ncmFiKCk7Ci0Jc3luY2hyb25pemVfcmN1KCk7Ci0Ja2ZyZWUob2xkKTsKIAlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChuZXRsaW5rX2NoYW5nZV9uZ3JvdXBzKTsKIAogLyoqCiAgKiBuZXRsaW5rX2NsZWFyX211bHRpY2FzdF91c2VycyAtIGtpY2sgb2ZmIG11bHRpY2FzdCBsaXN0ZW5lcnMKQEAgLTE1NjQsNyArMTYyMyw2IEBACiAKIAluZXRsaW5rX3RhYmxlX3VuZ3JhYigpOwogfQotRVhQT1JUX1NZTUJPTChuZXRsaW5rX2NsZWFyX211bHRpY2FzdF91c2Vycyk7CiAKIHZvaWQgbmV0bGlua19zZXRfbm9ucm9vdChpbnQgcHJvdG9jb2wsIHVuc2lnbmVkIGludCBmbGFncykKIHsKQEAgLTE2NDcsNyArMTcwNSw3IEBACiB9CiAKIGludCBuZXRsaW5rX2R1bXBfc3RhcnQoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCSAgICAgICBpbnQgKCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICopLAogCQkgICAgICAgaW50ICgqZG9uZSkoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKikpCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCmluZGV4IGVlZDRjNmEuLjY2ZjZiYTAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCkBAIC0xOCw4ICsxOCw2IEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CiAKLXN0cnVjdCBzb2NrICpnZW5sX3NvY2sgPSBOVUxMOwotCiBzdGF0aWMgREVGSU5FX01VVEVYKGdlbmxfbXV0ZXgpOyAvKiBzZXJpYWxpemF0aW9uIG9mIG1lc3NhZ2UgcHJvY2Vzc2luZyAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2VubF9sb2NrKHZvaWQpCkBAIC0xMzgsNyArMTM2LDcgQEAKIHsKIAlpbnQgaWQ7CiAJdW5zaWduZWQgbG9uZyAqbmV3X2dyb3VwczsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCiAJQlVHX09OKGdycC0+bmFtZVswXSA9PSAnXDAnKTsKIApAQCAtMTc1LDEwICsxNzMsMzEgQEAKIAkJbWNfZ3JvdXBzX2xvbmdzKys7CiAJfQogCi0JZXJyID0gbmV0bGlua19jaGFuZ2Vfbmdyb3VwcyhnZW5sX3NvY2ssCi0JCQkJICAgICBtY19ncm91cHNfbG9uZ3MgKiBCSVRTX1BFUl9MT05HKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKKwlpZiAoZmFtaWx5LT5uZXRuc29rKSB7CisJCXN0cnVjdCBuZXQgKm5ldDsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWZvcl9lYWNoX25ldF9yY3UobmV0KSB7CisJCQllcnIgPSBuZXRsaW5rX2NoYW5nZV9uZ3JvdXBzKG5ldC0+Z2VubF9zb2NrLAorCQkJCQltY19ncm91cHNfbG9uZ3MgKiBCSVRTX1BFUl9MT05HKTsKKwkJCWlmIChlcnIpIHsKKwkJCQkvKgorCQkJCSAqIE5vIG5lZWQgdG8gcm9sbCBiYWNrLCBjYW4gb25seSBmYWlsIGlmCisJCQkJICogbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMgYW5kIHRoZW4gdGhlCisJCQkJICogbnVtYmVyIG9mIF9wb3NzaWJsZV8gZ3JvdXBzIGhhcyBiZWVuCisJCQkJICogaW5jcmVhc2VkIG9uIHNvbWUgc29ja2V0cyB3aGljaCBpcyBvay4KKwkJCQkgKi8KKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9IGVsc2UgeworCQllcnIgPSBuZXRsaW5rX2NoYW5nZV9uZ3JvdXBzKGluaXRfbmV0Lmdlbmxfc29jaywKKwkJCQkJICAgICBtY19ncm91cHNfbG9uZ3MgKiBCSVRTX1BFUl9MT05HKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KIAogCWdycC0+aWQgPSBpZDsKIAlzZXRfYml0KGlkLCBtY19ncm91cHMpOwpAQCAtMTk1LDggKzIxNCwxNCBAQAogc3RhdGljIHZvaWQgX19nZW5sX3VucmVnaXN0ZXJfbWNfZ3JvdXAoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksCiAJCQkJICAgICAgIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCAqZ3JwKQogeworCXN0cnVjdCBuZXQgKm5ldDsKIAlCVUdfT04oZ3JwLT5mYW1pbHkgIT0gZmFtaWx5KTsKLQluZXRsaW5rX2NsZWFyX211bHRpY2FzdF91c2VycyhnZW5sX3NvY2ssIGdycC0+aWQpOworCisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX25ldF9yY3UobmV0KQorCQluZXRsaW5rX2NsZWFyX211bHRpY2FzdF91c2VycyhuZXQtPmdlbmxfc29jaywgZ3JwLT5pZCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKIAljbGVhcl9iaXQoZ3JwLT5pZCwgbWNfZ3JvdXBzKTsKIAlsaXN0X2RlbCgmZ3JwLT5saXN0KTsKIAlnZW5sX2N0cmxfZXZlbnQoQ1RSTF9DTURfREVMTUNBU1RfR1JQLCBncnApOwpAQCAtNDY3LDYgKzQ5Miw3IEBACiB7CiAJc3RydWN0IGdlbmxfb3BzICpvcHM7CiAJc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHk7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJc3RydWN0IGdlbmxfaW5mbyBpbmZvOwogCXN0cnVjdCBnZW5sbXNnaGRyICpoZHIgPSBubG1zZ19kYXRhKG5saCk7CiAJaW50IGhkcmxlbiwgZXJyOwpAQCAtNDc1LDYgKzUwMSwxMCBAQAogCWlmIChmYW1pbHkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKKwkvKiB0aGlzIGZhbWlseSBkb2Vzbid0IGV4aXN0IGluIHRoaXMgbmV0bnMgKi8KKwlpZiAoIWZhbWlseS0+bmV0bnNvayAmJiAhbmV0X2VxKG5ldCwgJmluaXRfbmV0KSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKIAloZHJsZW4gPSBHRU5MX0hEUkxFTiArIGZhbWlseS0+aGRyc2l6ZTsKIAlpZiAobmxoLT5ubG1zZ19sZW4gPCBubG1zZ19tc2dfc2l6ZShoZHJsZW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ5Miw3ICs1MjIsNyBAQAogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJCWdlbmxfdW5sb2NrKCk7Ci0JCWVyciA9IG5ldGxpbmtfZHVtcF9zdGFydChnZW5sX3NvY2ssIHNrYiwgbmxoLAorCQllcnIgPSBuZXRsaW5rX2R1bXBfc3RhcnQobmV0LT5nZW5sX3NvY2ssIHNrYiwgbmxoLAogCQkJCQkgb3BzLT5kdW1waXQsIG9wcy0+ZG9uZSk7CiAJCWdlbmxfbG9jaygpOwogCQlyZXR1cm4gZXJyOwpAQCAtNTE0LDYgKzU0NCw3IEBACiAJaW5mby5nZW5saGRyID0gbmxtc2dfZGF0YShubGgpOwogCWluZm8udXNlcmhkciA9IG5sbXNnX2RhdGEobmxoKSArIEdFTkxfSERSTEVOOwogCWluZm8uYXR0cnMgPSBmYW1pbHktPmF0dHJidWY7CisJZ2VubF9pbmZvX25ldF9zZXQoJmluZm8sIG5ldCk7CiAKIAlyZXR1cm4gb3BzLT5kb2l0KHNrYiwgJmluZm8pOwogfQpAQCAtNTM0LDYgKzU2NSw3IEBACiAJLm5hbWUgPSAibmxjdHJsIiwKIAkudmVyc2lvbiA9IDB4MiwKIAkubWF4YXR0ciA9IENUUkxfQVRUUl9NQVgsCisJLm5ldG5zb2sgPSB0cnVlLAogfTsKIAogc3RhdGljIGludCBjdHJsX2ZpbGxfaW5mbyhzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSwgdTMyIHBpZCwgdTMyIHNlcSwKQEAgLTY1MCw2ICs2ODIsNyBAQAogCiAJaW50IGksIG4gPSAwOwogCXN0cnVjdCBnZW5sX2ZhbWlseSAqcnQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJaW50IGNoYWluc190b19za2lwID0gY2ItPmFyZ3NbMF07CiAJaW50IGZhbXNfdG9fc2tpcCA9IGNiLT5hcmdzWzFdOwogCkBAIC02NTgsNiArNjkxLDggQEAKIAkJCWNvbnRpbnVlOwogCQluID0gMDsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShydCwgZ2VubF9mYW1pbHlfY2hhaW4oaSksIGZhbWlseV9saXN0KSB7CisJCQlpZiAoIXJ0LT5uZXRuc29rICYmICFuZXRfZXEobmV0LCAmaW5pdF9uZXQpKQorCQkJCWNvbnRpbnVlOwogCQkJaWYgKCsrbiA8IGZhbXNfdG9fc2tpcCkKIAkJCQljb250aW51ZTsKIAkJCWlmIChjdHJsX2ZpbGxfaW5mbyhydCwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCkBAIC03MjksNiArNzY0LDcgQEAKIAlpZiAoaW5mby0+YXR0cnNbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0pIHsKIAkJdTE2IGlkID0gbmxhX2dldF91MTYoaW5mby0+YXR0cnNbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0pOwogCQlyZXMgPSBnZW5sX2ZhbWlseV9maW5kX2J5aWQoaWQpOworCQllcnIgPSAtRU5PRU5UOwogCX0KIAogCWlmIChpbmZvLT5hdHRyc1tDVFJMX0FUVFJfRkFNSUxZX05BTUVdKSB7CkBAIC03MzYsNDkgKzc3Miw2MSBAQAogCiAJCW5hbWUgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tDVFJMX0FUVFJfRkFNSUxZX05BTUVdKTsKIAkJcmVzID0gZ2VubF9mYW1pbHlfZmluZF9ieW5hbWUobmFtZSk7CisJCWVyciA9IC1FTk9FTlQ7CiAJfQogCi0JaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCWVyciA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXJyb3V0OworCWlmIChyZXMgPT0gTlVMTCkKKwkJcmV0dXJuIGVycjsKKworCWlmICghcmVzLT5uZXRuc29rICYmICFuZXRfZXEoZ2VubF9pbmZvX25ldChpbmZvKSwgJmluaXRfbmV0KSkgeworCQkvKiBmYW1pbHkgZG9lc24ndCBleGlzdCBoZXJlICovCisJCXJldHVybiAtRU5PRU5UOwogCX0KIAogCW1zZyA9IGN0cmxfYnVpbGRfZmFtaWx5X21zZyhyZXMsIGluZm8tPnNuZF9waWQsIGluZm8tPnNuZF9zZXEsCiAJCQkJICAgIENUUkxfQ01EX05FV0ZBTUlMWSk7Ci0JaWYgKElTX0VSUihtc2cpKSB7Ci0JCWVyciA9IFBUUl9FUlIobXNnKTsKLQkJZ290byBlcnJvdXQ7Ci0JfQorCWlmIChJU19FUlIobXNnKSkKKwkJcmV0dXJuIFBUUl9FUlIobXNnKTsKIAotCWVyciA9IGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKLWVycm91dDoKLQlyZXR1cm4gZXJyOworCXJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiB9CiAKIHN0YXRpYyBpbnQgZ2VubF9jdHJsX2V2ZW50KGludCBldmVudCwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5OworCXN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCAqZ3JwOwogCi0JaWYgKGdlbmxfc29jayA9PSBOVUxMKQorCS8qIGdlbmwgaXMgc3RpbGwgaW5pdGlhbGlzaW5nICovCisJaWYgKCFpbml0X25ldC5nZW5sX3NvY2spCiAJCXJldHVybiAwOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQ1RSTF9DTURfTkVXRkFNSUxZOgogCWNhc2UgQ1RSTF9DTURfREVMRkFNSUxZOgotCQltc2cgPSBjdHJsX2J1aWxkX2ZhbWlseV9tc2coZGF0YSwgMCwgMCwgZXZlbnQpOwotCQlpZiAoSVNfRVJSKG1zZykpCi0JCQlyZXR1cm4gUFRSX0VSUihtc2cpOwotCi0JCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgR0VOTF9JRF9DVFJMLCBHRlBfS0VSTkVMKTsKKwkJZmFtaWx5ID0gZGF0YTsKKwkJbXNnID0gY3RybF9idWlsZF9mYW1pbHlfbXNnKGZhbWlseSwgMCwgMCwgZXZlbnQpOwogCQlicmVhazsKIAljYXNlIENUUkxfQ01EX05FV01DQVNUX0dSUDoKIAljYXNlIENUUkxfQ01EX0RFTE1DQVNUX0dSUDoKKwkJZ3JwID0gZGF0YTsKKwkJZmFtaWx5ID0gZ3JwLT5mYW1pbHk7CiAJCW1zZyA9IGN0cmxfYnVpbGRfbWNncnBfbXNnKGRhdGEsIDAsIDAsIGV2ZW50KTsKLQkJaWYgKElTX0VSUihtc2cpKQotCQkJcmV0dXJuIFBUUl9FUlIobXNnKTsKLQotCQlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIEdFTkxfSURfQ1RSTCwgR0ZQX0tFUk5FTCk7CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChJU19FUlIobXNnKSkKKwkJcmV0dXJuIFBUUl9FUlIobXNnKTsKKworCWlmICghZmFtaWx5LT5uZXRuc29rKSB7CisJCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKCZpbml0X25ldCwgbXNnLCAwLAorCQkJCQlHRU5MX0lEX0NUUkwsIEdGUF9LRVJORUwpOworCX0gZWxzZSB7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJZ2VubG1zZ19tdWx0aWNhc3RfYWxsbnMobXNnLCAwLCBHRU5MX0lEX0NUUkwsIEdGUF9BVE9NSUMpOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTc5NSw2ICs4NDMsMzMgQEAKIAkubmFtZQkJPSAibm90aWZ5IiwKIH07CiAKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBnZW5sX3Blcm5ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwkvKiB3ZSdsbCBidW1wIHRoZSBncm91cCBudW1iZXIgcmlnaHQgYWZ0ZXJ3YXJkcyAqLworCW5ldC0+Z2VubF9zb2NrID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKG5ldCwgTkVUTElOS19HRU5FUklDLCAwLAorCQkJCQkgICAgICAgZ2VubF9yY3YsICZnZW5sX211dGV4LAorCQkJCQkgICAgICAgVEhJU19NT0RVTEUpOworCisJaWYgKCFuZXQtPmdlbmxfc29jayAmJiBuZXRfZXEobmV0LCAmaW5pdF9uZXQpKQorCQlwYW5pYygiR0VOTDogQ2Fubm90IGluaXRpYWxpemUgZ2VuZXJpYyBuZXRsaW5rXG4iKTsKKworCWlmICghbmV0LT5nZW5sX3NvY2spCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZ2VubF9wZXJuZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJbmV0bGlua19rZXJuZWxfcmVsZWFzZShuZXQtPmdlbmxfc29jayk7CisJbmV0LT5nZW5sX3NvY2sgPSBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGdlbmxfcGVybmV0X29wcyA9IHsKKwkuaW5pdCA9IGdlbmxfcGVybmV0X2luaXQsCisJLmV4aXQgPSBnZW5sX3Blcm5ldF9leGl0LAorfTsKKwogc3RhdGljIGludCBfX2luaXQgZ2VubF9pbml0KHZvaWQpCiB7CiAJaW50IGksIGVycjsKQEAgLTgwNCwzNiArODc5LDY3IEBACiAKIAllcnIgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseSgmZ2VubF9jdHJsKTsKIAlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJvdXQ7CisJCWdvdG8gcHJvYmxlbTsKIAogCWVyciA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZnZW5sX2N0cmwsICZnZW5sX2N0cmxfb3BzKTsKIAlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJvdXRfcmVnaXN0ZXI7CisJCWdvdG8gcHJvYmxlbTsKIAogCW5ldGxpbmtfc2V0X25vbnJvb3QoTkVUTElOS19HRU5FUklDLCBOTF9OT05ST09UX1JFQ1YpOwogCi0JLyogd2UnbGwgYnVtcCB0aGUgZ3JvdXAgbnVtYmVyIHJpZ2h0IGFmdGVyd2FyZHMgKi8KLQlnZW5sX3NvY2sgPSBuZXRsaW5rX2tlcm5lbF9jcmVhdGUoJmluaXRfbmV0LCBORVRMSU5LX0dFTkVSSUMsIDAsCi0JCQkJCSAgZ2VubF9yY3YsICZnZW5sX211dGV4LCBUSElTX01PRFVMRSk7Ci0JaWYgKGdlbmxfc29jayA9PSBOVUxMKQotCQlwYW5pYygiR0VOTDogQ2Fubm90IGluaXRpYWxpemUgZ2VuZXJpYyBuZXRsaW5rXG4iKTsKKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZnZW5sX3Blcm5ldF9vcHMpOworCWlmIChlcnIpCisJCWdvdG8gcHJvYmxlbTsKIAogCWVyciA9IGdlbmxfcmVnaXN0ZXJfbWNfZ3JvdXAoJmdlbmxfY3RybCwgJm5vdGlmeV9ncnApOwogCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm91dF9yZWdpc3RlcjsKKwkJZ290byBwcm9ibGVtOwogCiAJcmV0dXJuIDA7CiAKLWVycm91dF9yZWdpc3RlcjoKLQlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZnZW5sX2N0cmwpOwotZXJyb3V0OgorcHJvYmxlbToKIAlwYW5pYygiR0VOTDogQ2Fubm90IHJlZ2lzdGVyIGNvbnRyb2xsZXI6ICVkXG4iLCBlcnIpOwogfQogCiBzdWJzeXNfaW5pdGNhbGwoZ2VubF9pbml0KTsKIAotRVhQT1JUX1NZTUJPTChnZW5sX3NvY2spOwogRVhQT1JUX1NZTUJPTChnZW5sX3JlZ2lzdGVyX29wcyk7CiBFWFBPUlRfU1lNQk9MKGdlbmxfdW5yZWdpc3Rlcl9vcHMpOwogRVhQT1JUX1NZTUJPTChnZW5sX3JlZ2lzdGVyX2ZhbWlseSk7CiBFWFBPUlRfU1lNQk9MKGdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkpOworCitzdGF0aWMgaW50IGdlbmxtc2dfbWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdW5zaWduZWQgbG9uZyBncm91cCwKKwkJCSBnZnBfdCBmbGFncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqdG1wOworCXN0cnVjdCBuZXQgKm5ldCwgKnByZXYgPSBOVUxMOworCWludCBlcnI7CisKKwlmb3JfZWFjaF9uZXRfcmN1KG5ldCkgeworCQlpZiAocHJldikgeworCQkJdG1wID0gc2tiX2Nsb25lKHNrYiwgZmxhZ3MpOworCQkJaWYgKCF0bXApIHsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCQllcnIgPSBubG1zZ19tdWx0aWNhc3QocHJldi0+Z2VubF9zb2NrLCB0bXAsCisJCQkJCSAgICAgIHBpZCwgZ3JvdXAsIGZsYWdzKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXByZXYgPSBuZXQ7CisJfQorCisJcmV0dXJuIG5sbXNnX211bHRpY2FzdChwcmV2LT5nZW5sX3NvY2ssIHNrYiwgcGlkLCBncm91cCwgZmxhZ3MpOworIGVycm9yOgorCWtmcmVlX3NrYihza2IpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBnZW5sbXNnX211bHRpY2FzdF9hbGxucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXAsCisJCQkgICAgZ2ZwX3QgZmxhZ3MpCit7CisJcmV0dXJuIGdlbmxtc2dfbWNhc3Qoc2tiLCBwaWQsIGdyb3VwLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGdlbmxtc2dfbXVsdGljYXN0X2FsbG5zKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRyb20vbnJfZGV2LmMgYi9uZXQvbmV0cm9tL25yX2Rldi5jCmluZGV4IDM1MTM3MjQuLjdhYTExYjAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRyb20vbnJfZGV2LmMKKysrIGIvbmV0L25ldHJvbS9ucl9kZXYuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbnJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IG5yX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CkBAIC0xNzcsMTMgKzE3NywxMyBAQAogCWlmICghbnJfcm91dGVfZnJhbWUoc2tiLCBOVUxMKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJc3RhdHMtPnR4X2Vycm9ycysrOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlzdGF0cy0+dHhfcGFja2V0cysrOwogCXN0YXRzLT50eF9ieXRlcyArPSBsZW47CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgbnJfaGVhZGVyX29wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IGViZTU3MTguLmQzZDUyYzY2IDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTEzNyw4ICsxMzcsNyBAQAogCiAvKiBQcml2YXRlIHBhY2tldCBzb2NrZXQgc3RydWN0dXJlcy4gKi8KIAotc3RydWN0IHBhY2tldF9tY2xpc3QKLXsKK3N0cnVjdCBwYWNrZXRfbWNsaXN0IHsKIAlzdHJ1Y3QgcGFja2V0X21jbGlzdAkqbmV4dDsKIAlpbnQJCQlpZmluZGV4OwogCWludAkJCWNvdW50OwpAQCAtMTQ5LDggKzE0OCw3IEBACiAvKiBpZGVudGljYWwgdG8gc3RydWN0IHBhY2tldF9tcmVxIGV4Y2VwdCBpdCBoYXMKICAqIGEgbG9uZ2VyIGFkZHJlc3MgZmllbGQuCiAgKi8KLXN0cnVjdCBwYWNrZXRfbXJlcV9tYXgKLXsKK3N0cnVjdCBwYWNrZXRfbXJlcV9tYXggewogCWludAkJbXJfaWZpbmRleDsKIAl1bnNpZ25lZCBzaG9ydAltcl90eXBlOwogCXVuc2lnbmVkIHNob3J0CW1yX2FsZW47CkBAIC0xNjIsNyArMTYwLDcgQEAKIAkJaW50IGNsb3NpbmcsIGludCB0eF9yaW5nKTsKIAogc3RydWN0IHBhY2tldF9yaW5nX2J1ZmZlciB7Ci0JY2hhciAqCQkJKnBnX3ZlYzsKKwljaGFyCQkJKipwZ192ZWM7CiAJdW5zaWduZWQgaW50CQloZWFkOwogCXVuc2lnbmVkIGludAkJZnJhbWVzX3Blcl9ibG9jazsKIAl1bnNpZ25lZCBpbnQJCWZyYW1lX3NpemU7CkBAIC0yMzksNyArMjM3LDcgQEAKIAkJZmx1c2hfZGNhY2hlX3BhZ2UodmlydF90b19wYWdlKCZoLmgyLT50cF9zdGF0dXMpKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJUUEFDS0VUIHZlcnNpb24gbm90IHN1cHBvcnRlZFxuIik7CisJCXByX2VycigiVFBBQ0tFVCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlCVUcoKTsKIAl9CiAKQEAgLTI2NSw3ICsyNjMsNyBAQAogCQlmbHVzaF9kY2FjaGVfcGFnZSh2aXJ0X3RvX3BhZ2UoJmguaDItPnRwX3N0YXR1cykpOwogCQlyZXR1cm4gaC5oMi0+dHBfc3RhdHVzOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiVFBBQ0tFVCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlwcl9lcnIoIlRQQUNLRVQgdmVyc2lvbiBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJQlVHKCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTMyNyw3ICszMjUsNyBAQAogCVdBUk5fT04oYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKSk7CiAKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkgewotCQlwcmludGsoIkF0dGVtcHQgdG8gcmVsZWFzZSBhbGl2ZSBwYWNrZXQgc29ja2V0OiAlcFxuIiwgc2spOworCQlwcl9lcnIoIkF0dGVtcHQgdG8gcmVsZWFzZSBhbGl2ZSBwYWNrZXQgc29ja2V0OiAlcFxuIiwgc2spOwogCQlyZXR1cm47CiAJfQogCkBAIC0zMzksNyArMzM3LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wc19zcGt0OwogCi1zdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQorc3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHNvY2thZGRyX3BrdCAqc3BrdDsKQEAgLTM2OCw3ICszNjcsOCBAQAogCWlmIChkZXZfbmV0KGRldikgIT0gc29ja19uZXQoc2spKQogCQlnb3RvIG91dDsKIAotCWlmICgoc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQykpID09IE5VTEwpCisJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIG9vbTsKIAogCS8qIGRyb3AgYW55IHJvdXRpbmcgaW5mbyAqLwpAQCAtMzk0LDcgKzM5NCw3IEBACiAJICoJdG8gcHJldmVudCBzb2NrZXRzIHVzaW5nIGFsbCB0aGUgbWVtb3J5IHVwLgogCSAqLwogCi0JaWYgKHNvY2tfcXVldWVfcmN2X3NrYihzayxza2IpID09IDApCisJaWYgKHNvY2tfcXVldWVfcmN2X3NrYihzaywgc2tiKSA9PSAwKQogCQlyZXR1cm4gMDsKIAogb3V0OgpAQCAtNDEzLDI1ICs0MTMsMjMgQEAKIAkJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IHNvY2thZGRyX3BrdCAqc2FkZHI9KHN0cnVjdCBzb2NrYWRkcl9wa3QgKiltc2ctPm1zZ19uYW1lOworCXN0cnVjdCBzb2NrYWRkcl9wa3QgKnNhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9wa3QgKiltc2ctPm1zZ19uYW1lOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlfX2JlMTYgcHJvdG89MDsKKwlfX2JlMTYgcHJvdG8gPSAwOwogCWludCBlcnI7CiAKIAkvKgogCSAqCUdldCBhbmQgdmVyaWZ5IHRoZSBhZGRyZXNzLgogCSAqLwogCi0JaWYgKHNhZGRyKQotCXsKKwlpZiAoc2FkZHIpIHsKIAkJaWYgKG1zZy0+bXNnX25hbWVsZW4gPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkKLQkJCXJldHVybigtRUlOVkFMKTsKLQkJaWYgKG1zZy0+bXNnX25hbWVsZW49PXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfcGt0KSkKLQkJCXByb3RvPXNhZGRyLT5zcGt0X3Byb3RvY29sOwotCX0KLQllbHNlCi0JCXJldHVybigtRU5PVENPTk4pOwkvKiBTT0NLX1BBQ0tFVCBtdXN0IGJlIHNlbnQgZ2l2aW5nIGFuIGFkZHJlc3MgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAobXNnLT5tc2dfbmFtZWxlbiA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3BrdCkpCisJCQlwcm90byA9IHNhZGRyLT5zcGt0X3Byb3RvY29sOworCX0gZWxzZQorCQlyZXR1cm4gLUVOT1RDT05OOwkvKiBTT0NLX1BBQ0tFVCBtdXN0IGJlIHNlbnQgZ2l2aW5nIGFuIGFkZHJlc3MgKi8KIAogCS8qCiAJICoJRmluZCB0aGUgZGV2aWNlIGZpcnN0IHRvIHNpemUgY2hlY2sgaXQKQEAgLTQ0OCw4ICs0NDYsOCBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKgotCSAqCVlvdSBtYXkgbm90IHF1ZXVlIGEgZnJhbWUgYmlnZ2VyIHRoYW4gdGhlIG10dS4gVGhpcyBpcyB0aGUgbG93ZXN0IGxldmVsCi0JICoJcmF3IHByb3RvY29sIGFuZCB5b3UgbXVzdCBkbyB5b3VyIG93biBmcmFnbWVudGF0aW9uIGF0IHRoaXMgbGV2ZWwuCisJICogWW91IG1heSBub3QgcXVldWUgYSBmcmFtZSBiaWdnZXIgdGhhbiB0aGUgbXR1LiBUaGlzIGlzIHRoZSBsb3dlc3QgbGV2ZWwKKwkgKiByYXcgcHJvdG9jb2wgYW5kIHlvdSBtdXN0IGRvIHlvdXIgb3duIGZyYWdtZW50YXRpb24gYXQgdGhpcyBsZXZlbC4KIAkgKi8KIAogCWVyciA9IC1FTVNHU0laRTsKQEAgLTQ2MCw5ICs0NTgsOSBAQAogCXNrYiA9IHNvY2tfd21hbGxvYyhzaywgbGVuICsgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSwgMCwgR0ZQX0tFUk5FTCk7CiAKIAkvKgotCSAqCUlmIHRoZSB3cml0ZSBidWZmZXIgaXMgZnVsbCwgdGhlbiB0b3VnaC4gQXQgdGhpcyBsZXZlbCB0aGUgdXNlciBnZXRzIHRvCi0JICoJZGVhbCB3aXRoIHRoZSBwcm9ibGVtIC0gZG8geW91ciBvd24gYWxnb3JpdGhtaWMgYmFja29mZnMuIFRoYXQncyBmYXIKLQkgKgltb3JlIGZsZXhpYmxlLgorCSAqIElmIHRoZSB3cml0ZSBidWZmZXIgaXMgZnVsbCwgdGhlbiB0b3VnaC4gQXQgdGhpcyBsZXZlbCB0aGUgdXNlcgorCSAqIGdldHMgdG8gZGVhbCB3aXRoIHRoZSBwcm9ibGVtIC0gZG8geW91ciBvd24gYWxnb3JpdGhtaWMgYmFja29mZnMuCisJICogVGhhdCdzIGZhciBtb3JlIGZsZXhpYmxlLgogCSAqLwogCiAJaWYgKHNrYiA9PSBOVUxMKQpAQCAtNDg4LDcgKzQ4Niw3IEBACiAJfQogCiAJLyogUmV0dXJucyAtRUZBVUxUIG9uIGVycm9yICovCi0JZXJyID0gbWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYixsZW4pLCBtc2ctPm1zZ19pb3YsIGxlbik7CisJZXJyID0gbWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgbGVuKSwgbXNnLT5tc2dfaW92LCBsZW4pOwogCXNrYi0+cHJvdG9jb2wgPSBwcm90bzsKIAlza2ItPmRldiA9IGRldjsKIAlza2ItPnByaW9yaXR5ID0gc2stPnNrX3ByaW9yaXR5OwpAQCAtNTAxLDcgKzQ5OSw3IEBACiAKIAlkZXZfcXVldWVfeG1pdChza2IpOwogCWRldl9wdXQoZGV2KTsKLQlyZXR1cm4obGVuKTsKKwlyZXR1cm4gbGVuOwogCiBvdXRfZnJlZToKIAlrZnJlZV9za2Ioc2tiKTsKQEAgLTUzNywxMiArNTM1LDEzIEBACiAgICB3ZSB3aWxsIG5vdCBoYXJtIGFueW9uZS4KICAqLwogCi1zdGF0aWMgaW50IHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQorc3RhdGljIGludCBwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHNvY2thZGRyX2xsICpzbGw7CiAJc3RydWN0IHBhY2tldF9zb2NrICpwbzsKLQl1OCAqIHNrYl9oZWFkID0gc2tiLT5kYXRhOworCXU4ICpza2JfaGVhZCA9IHNrYi0+ZGF0YTsKIAlpbnQgc2tiX2xlbiA9IHNrYi0+bGVuOwogCXVuc2lnbmVkIGludCBzbmFwbGVuLCByZXM7CiAKQEAgLTY0OCw3ICs2NDcsOCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BBQ0tFVF9NTUFQCi1zdGF0aWMgaW50IHRwYWNrZXRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKK3N0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHBhY2tldF9zb2NrICpwbzsKQEAgLTY1OCw3ICs2NTgsNyBAQAogCQlzdHJ1Y3QgdHBhY2tldDJfaGRyICpoMjsKIAkJdm9pZCAqcmF3OwogCX0gaDsKLQl1OCAqIHNrYl9oZWFkID0gc2tiLT5kYXRhOworCXU4ICpza2JfaGVhZCA9IHNrYi0+ZGF0YTsKIAlpbnQgc2tiX2xlbiA9IHNrYi0+bGVuOwogCXVuc2lnbmVkIGludCBzbmFwbGVuLCByZXM7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBUUF9TVEFUVVNfTE9TSU5HfFRQX1NUQVRVU19VU0VSOwpAQCAtODIxLDcgKzgyMSw3IEBACiBzdGF0aWMgdm9pZCB0cGFja2V0X2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBwYWNrZXRfc29jayAqcG8gPSBwa3Rfc2soc2tiLT5zayk7Ci0Jdm9pZCAqIHBoOworCXZvaWQgKnBoOwogCiAJQlVHX09OKHNrYiA9PSBOVUxMKTsKIApAQCAtODM2LDkgKzgzNiw5IEBACiAJc29ja193ZnJlZShza2IpOwogfQogCi1zdGF0aWMgaW50IHRwYWNrZXRfZmlsbF9za2Ioc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKiBza2IsCi0JCXZvaWQgKiBmcmFtZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNpemVfbWF4LAotCQlfX2JlMTYgcHJvdG8sIHVuc2lnbmVkIGNoYXIgKiBhZGRyKQorc3RhdGljIGludCB0cGFja2V0X2ZpbGxfc2tiKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBza19idWZmICpza2IsCisJCXZvaWQgKmZyYW1lLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc2l6ZV9tYXgsCisJCV9fYmUxNiBwcm90bywgdW5zaWduZWQgY2hhciAqYWRkcikKIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB0cGFja2V0X2hkciAqaDE7CkBAIC04NjcsOCArODY3LDcgQEAKIAkJYnJlYWs7CiAJfQogCWlmICh1bmxpa2VseSh0cF9sZW4gPiBzaXplX21heCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwYWNrZXQgc2l6ZSBpcyB0b28gbG9uZyAoJWQgPiAlZClcbiIsCi0JCQkJdHBfbGVuLCBzaXplX21heCk7CisJCXByX2VycigicGFja2V0IHNpemUgaXMgdG9vIGxvbmcgKCVkID4gJWQpXG4iLCB0cF9sZW4sIHNpemVfbWF4KTsKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAl9CiAKQEAgLTg4MywxMiArODgyLDExIEBACiAJCQkJTlVMTCwgdHBfbGVuKTsKIAkJaWYgKHVubGlrZWx5KGVyciA8IDApKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlmIChkZXYtPmhhcmRfaGVhZGVyX2xlbiApIHsKKwl9IGVsc2UgaWYgKGRldi0+aGFyZF9oZWFkZXJfbGVuKSB7CiAJCS8qIG5ldCBkZXZpY2UgZG9lc24ndCBsaWtlIGVtcHR5IGhlYWQgKi8KIAkJaWYgKHVubGlrZWx5KHRwX2xlbiA8PSBkZXYtPmhhcmRfaGVhZGVyX2xlbikpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicGFja2V0IHNpemUgaXMgdG9vIHNob3J0ICIKLQkJCQkJIiglZCA8ICVkKVxuIiwgdHBfbGVuLAotCQkJCQlkZXYtPmhhcmRfaGVhZGVyX2xlbik7CisJCQlwcl9lcnIoInBhY2tldCBzaXplIGlzIHRvbyBzaG9ydCAoJWQgPCAlZClcbiIsCisJCQkgICAgICAgdHBfbGVuLCBkZXYtPmhhcmRfaGVhZGVyX2xlbik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC05MTcsOSArOTE1LDggQEAKIAkJbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwogCiAJCWlmICh1bmxpa2VseShucl9mcmFncyA+PSBNQVhfU0tCX0ZSQUdTKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJQYWNrZXQgZXhjZWVkIHRoZSBudW1iZXIgIgotCQkJCQkib2Ygc2tiIGZyYWdzKCVsdSlcbiIsCi0JCQkJCU1BWF9TS0JfRlJBR1MpOworCQkJcHJfZXJyKCJQYWNrZXQgZXhjZWVkIHRoZSBudW1iZXIgb2Ygc2tiIGZyYWdzKCVsdSlcbiIsCisJCQkgICAgICAgTUFYX1NLQl9GUkFHUyk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCkBAIC05NDQsOCArOTQxLDggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCV9fYmUxNiBwcm90bzsKIAlpbnQgaWZpbmRleCwgZXJyLCByZXNlcnZlID0gMDsKLQl2b2lkICogcGg7Ci0Jc3RydWN0IHNvY2thZGRyX2xsICpzYWRkcj0oc3RydWN0IHNvY2thZGRyX2xsICopbXNnLT5tc2dfbmFtZTsKKwl2b2lkICpwaDsKKwlzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9sbCAqKW1zZy0+bXNnX25hbWU7CiAJaW50IHRwX2xlbiwgc2l6ZV9tYXg7CiAJdW5zaWduZWQgY2hhciAqYWRkcjsKIAlpbnQgbGVuX3N1bSA9IDA7CkBAIC0xMDM4LDggKzEwMzUsNyBAQAogCQkJZ290byBvdXRfeG1pdDsKIAkJcGFja2V0X2luY3JlbWVudF9oZWFkKCZwby0+dHhfcmluZyk7CiAJCWxlbl9zdW0gKz0gdHBfbGVuOwotCX0KLQl3aGlsZSAobGlrZWx5KChwaCAhPSBOVUxMKSB8fCAoKCEobXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQpKQorCX0gd2hpbGUgKGxpa2VseSgocGggIT0gTlVMTCkgfHwgKCghKG1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlUKSkKIAkJCQkJJiYgKGF0b21pY19yZWFkKCZwby0+dHhfcmluZy5wZW5kaW5nKSkpKQogCSAgICAgICk7CiAKQEAgLTEwNjQsNyArMTA2MCw3IEBACiAJCQkgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNhZGRyPShzdHJ1Y3Qgc29ja2FkZHJfbGwgKiltc2ctPm1zZ19uYW1lOworCXN0cnVjdCBzb2NrYWRkcl9sbCAqc2FkZHIgPSAoc3RydWN0IHNvY2thZGRyX2xsICopbXNnLT5tc2dfbmFtZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJX19iZTE2IHByb3RvOwpAQCAtMTExMCw3ICsxMTA2LDcgQEAKIAogCXNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssIGxlbiArIExMX0FMTE9DQVRFRF9TUEFDRShkZXYpLAogCQkJCW1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlULCAmZXJyKTsKLQlpZiAoc2tiPT1OVUxMKQorCWlmIChza2IgPT0gTlVMTCkKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJc2tiX3Jlc2VydmUoc2tiLCBMTF9SRVNFUlZFRF9TUEFDRShkZXYpKTsKQEAgLTExMjIsNyArMTExOCw3IEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAKIAkvKiBSZXR1cm5zIC1FRkFVTFQgb24gZXJyb3IgKi8KLQllcnIgPSBtZW1jcHlfZnJvbWlvdmVjKHNrYl9wdXQoc2tiLGxlbiksIG1zZy0+bXNnX2lvdiwgbGVuKTsKKwllcnIgPSBtZW1jcHlfZnJvbWlvdmVjKHNrYl9wdXQoc2tiLCBsZW4pLCBtc2ctPm1zZ19pb3YsIGxlbik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZTsKIApAQCAtMTE0MCw3ICsxMTM2LDcgQEAKIAogCWRldl9wdXQoZGV2KTsKIAotCXJldHVybihsZW4pOworCXJldHVybiBsZW47CiAKIG91dF9mcmVlOgogCWtmcmVlX3NrYihza2IpOwpAQCAtMTI4Myw5ICsxMjc5LDEwIEBACiAgKglCaW5kIGEgcGFja2V0IHNvY2tldCB0byBhIGRldmljZQogICovCiAKLXN0YXRpYyBpbnQgcGFja2V0X2JpbmRfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgYWRkcl9sZW4pCitzdGF0aWMgaW50IHBhY2tldF9iaW5kX3Nwa3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKKwkJCSAgICBpbnQgYWRkcl9sZW4pCiB7Ci0Jc3RydWN0IHNvY2sgKnNrPXNvY2stPnNrOworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCWNoYXIgbmFtZVsxNV07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlpbnQgZXJyID0gLUVOT0RFVjsKQEAgLTEyOTYsNyArMTI5Myw3IEBACiAKIAlpZiAoYWRkcl9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwotCXN0cmxjcHkobmFtZSx1YWRkci0+c2FfZGF0YSxzaXplb2YobmFtZSkpOworCXN0cmxjcHkobmFtZSwgdWFkZHItPnNhX2RhdGEsIHNpemVvZihuYW1lKSk7CiAKIAlkZXYgPSBkZXZfZ2V0X2J5X25hbWUoc29ja19uZXQoc2spLCBuYW1lKTsKIAlpZiAoZGV2KSB7CkBAIC0xMzA4LDggKzEzMDUsOCBAQAogCiBzdGF0aWMgaW50IHBhY2tldF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNsbCA9IChzdHJ1Y3Qgc29ja2FkZHJfbGwqKXVhZGRyOwotCXN0cnVjdCBzb2NrICpzaz1zb2NrLT5zazsKKwlzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNsbCA9IChzdHJ1Y3Qgc29ja2FkZHJfbGwgKil1YWRkcjsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlpbnQgZXJyOwogCkBAIC0xNDA0LDcgKzE0MDEsNyBAQAogCXNrX2FkZF9ub2RlKHNrLCAmbmV0LT5wYWNrZXQuc2tsaXN0KTsKIAlzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgJnBhY2tldF9wcm90bywgMSk7CiAJd3JpdGVfdW5sb2NrX2JoKCZuZXQtPnBhY2tldC5za2xpc3RfbG9jayk7Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogb3V0OgogCXJldHVybiBlcnI7CiB9CkBAIC0xNDQxLDcgKzE0MzgsNyBAQAogCSAqCWJ1dCB0aGVuIGl0IHdpbGwgYmxvY2suCiAJICovCiAKLQlza2I9c2tiX3JlY3ZfZGF0YWdyYW0oc2ssZmxhZ3MsZmxhZ3MmTVNHX0RPTlRXQUlULCZlcnIpOworCXNrYiA9IHNrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncywgZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOwogCiAJLyoKIAkgKglBbiBlcnJvciBvY2N1cnJlZCBzbyByZXR1cm4gaXQuIEJlY2F1c2Ugc2tiX3JlY3ZfZGF0YWdyYW0oKQpAQCAtMTQ2OSwxMCArMTQ2Niw5IEBACiAJICovCiAKIAljb3BpZWQgPSBza2ItPmxlbjsKLQlpZiAoY29waWVkID4gbGVuKQotCXsKLQkJY29waWVkPWxlbjsKLQkJbXNnLT5tc2dfZmxhZ3N8PU1TR19UUlVOQzsKKwlpZiAoY29waWVkID4gbGVuKSB7CisJCWNvcGllZCA9IGxlbjsKKwkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOwogCX0KIAogCWVyciA9IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgMCwgbXNnLT5tc2dfaW92LCBjb3BpZWQpOwpAQCAtMTUzOSw3ICsxNTM1LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBwYWNrZXRfc29jayAqcG8gPSBwa3Rfc2soc2spOwotCXN0cnVjdCBzb2NrYWRkcl9sbCAqc2xsID0gKHN0cnVjdCBzb2NrYWRkcl9sbCopdWFkZHI7CisJc3RydWN0IHNvY2thZGRyX2xsICpzbGwgPSAoc3RydWN0IHNvY2thZGRyX2xsICopdWFkZHI7CiAKIAlpZiAocGVlcikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTU4NCwxNCArMTU4MCwxNSBAQAogCQllbHNlCiAJCQlyZXR1cm4gZGV2X3VuaWNhc3RfZGVsZXRlKGRldiwgaS0+YWRkcik7CiAJCWJyZWFrOwotCWRlZmF1bHQ6OworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcGFja2V0X2Rldl9tY2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF9tY2xpc3QgKmksIGludCB3aGF0KQogewotCWZvciAoIDsgaTsgaT1pLT5uZXh0KSB7CisJZm9yICggOyBpOyBpID0gaS0+bmV4dCkgewogCQlpZiAoaS0+aWZpbmRleCA9PSBkZXYtPmlmaW5kZXgpCiAJCQlwYWNrZXRfZGV2X21jKGRldiwgaSwgd2hhdCk7CiAJfQpAQCAtMTY5Myw3ICsxNjkwLDggQEAKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogCQlwby0+bWNsaXN0ID0gbWwtPm5leHQ7Ci0JCWlmICgoZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIG1sLT5pZmluZGV4KSkgIT0gTlVMTCkgeworCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgbWwtPmlmaW5kZXgpOworCQlpZiAoZGV2ICE9IE5VTEwpIHsKIAkJCXBhY2tldF9kZXZfbWMoZGV2LCBtbCwgLTEpOwogCQkJZGV2X3B1dChkZXYpOwogCQl9CkBAIC0xNzIzLDcgKzE3MjEsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChsZW4gPiBzaXplb2YobXJlcSkpCiAJCQlsZW4gPSBzaXplb2YobXJlcSk7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmbXJlcSxvcHR2YWwsbGVuKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZtcmVxLCBvcHR2YWwsIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJaWYgKGxlbiA8IChtcmVxLm1yX2FsZW4gKyBvZmZzZXRvZihzdHJ1Y3QgcGFja2V0X21yZXEsIG1yX2FkZHJlc3MpKSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTc0MCw5ICsxNzM4LDkgQEAKIAl7CiAJCXN0cnVjdCB0cGFja2V0X3JlcSByZXE7CiAKLQkJaWYgKG9wdGxlbjxzaXplb2YocmVxKSkKKwkJaWYgKG9wdGxlbiA8IHNpemVvZihyZXEpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxLG9wdHZhbCxzaXplb2YocmVxKSkpCisJCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxLCBvcHR2YWwsIHNpemVvZihyZXEpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gcGFja2V0X3NldF9yaW5nKHNrLCAmcmVxLCAwLCBvcHRuYW1lID09IFBBQ0tFVF9UWF9SSU5HKTsKIAl9CkBAIC0xNzUwLDkgKzE3NDgsOSBAQAogCXsKIAkJaW50IHZhbDsKIAotCQlpZiAob3B0bGVuIT1zaXplb2YodmFsKSkKKwkJaWYgKG9wdGxlbiAhPSBzaXplb2YodmFsKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhbCxvcHR2YWwsc2l6ZW9mKHZhbCkpKQorCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhbCwgb3B0dmFsLCBzaXplb2YodmFsKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlwa3Rfc2soc2spLT5jb3B5X3RocmVzaCA9IHZhbDsKQEAgLTE5ODUsNTEgKzE5ODMsNTEgQEAKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgU0lPQ09VVFE6Ci0JCXsKLQkJCWludCBhbW91bnQgPSBza193bWVtX2FsbG9jX2dldChzayk7CisJY2FzZSBTSU9DT1VUUToKKwl7CisJCWludCBhbW91bnQgPSBza193bWVtX2FsbG9jX2dldChzayk7CiAKLQkJCXJldHVybiBwdXRfdXNlcihhbW91bnQsIChpbnQgX191c2VyICopYXJnKTsKLQkJfQotCQljYXNlIFNJT0NJTlE6Ci0JCXsKLQkJCXN0cnVjdCBza19idWZmICpza2I7Ci0JCQlpbnQgYW1vdW50ID0gMDsKKwkJcmV0dXJuIHB1dF91c2VyKGFtb3VudCwgKGludCBfX3VzZXIgKilhcmcpOworCX0KKwljYXNlIFNJT0NJTlE6CisJeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlpbnQgYW1vdW50ID0gMDsKIAotCQkJc3Bpbl9sb2NrX2JoKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKLQkJCXNrYiA9IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7Ci0JCQlpZiAoc2tiKQotCQkJCWFtb3VudCA9IHNrYi0+bGVuOwotCQkJc3Bpbl91bmxvY2tfYmgoJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOwotCQkJcmV0dXJuIHB1dF91c2VyKGFtb3VudCwgKGludCBfX3VzZXIgKilhcmcpOwotCQl9Ci0JCWNhc2UgU0lPQ0dTVEFNUDoKLQkJCXJldHVybiBzb2NrX2dldF90aW1lc3RhbXAoc2ssIChzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKilhcmcpOwotCQljYXNlIFNJT0NHU1RBTVBOUzoKLQkJCXJldHVybiBzb2NrX2dldF90aW1lc3RhbXBucyhzaywgKHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKilhcmcpOworCQlzcGluX2xvY2tfYmgoJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOworCQlza2IgPSBza2JfcGVlaygmc2stPnNrX3JlY2VpdmVfcXVldWUpOworCQlpZiAoc2tiKQorCQkJYW1vdW50ID0gc2tiLT5sZW47CisJCXNwaW5fdW5sb2NrX2JoKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKKwkJcmV0dXJuIHB1dF91c2VyKGFtb3VudCwgKGludCBfX3VzZXIgKilhcmcpOworCX0KKwljYXNlIFNJT0NHU1RBTVA6CisJCXJldHVybiBzb2NrX2dldF90aW1lc3RhbXAoc2ssIChzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKilhcmcpOworCWNhc2UgU0lPQ0dTVEFNUE5TOgorCQlyZXR1cm4gc29ja19nZXRfdGltZXN0YW1wbnMoc2ssIChzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopYXJnKTsKIAogI2lmZGVmIENPTkZJR19JTkVUCi0JCWNhc2UgU0lPQ0FERFJUOgotCQljYXNlIFNJT0NERUxSVDoKLQkJY2FzZSBTSU9DREFSUDoKLQkJY2FzZSBTSU9DR0FSUDoKLQkJY2FzZSBTSU9DU0FSUDoKLQkJY2FzZSBTSU9DR0lGQUREUjoKLQkJY2FzZSBTSU9DU0lGQUREUjoKLQkJY2FzZSBTSU9DR0lGQlJEQUREUjoKLQkJY2FzZSBTSU9DU0lGQlJEQUREUjoKLQkJY2FzZSBTSU9DR0lGTkVUTUFTSzoKLQkJY2FzZSBTSU9DU0lGTkVUTUFTSzoKLQkJY2FzZSBTSU9DR0lGRFNUQUREUjoKLQkJY2FzZSBTSU9DU0lGRFNUQUREUjoKLQkJY2FzZSBTSU9DU0lGRkxBR1M6Ci0JCQlpZiAoIW5ldF9lcShzb2NrX25ldChzayksICZpbml0X25ldCkpCi0JCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQkJCXJldHVybiBpbmV0X2RncmFtX29wcy5pb2N0bChzb2NrLCBjbWQsIGFyZyk7CisJY2FzZSBTSU9DQUREUlQ6CisJY2FzZSBTSU9DREVMUlQ6CisJY2FzZSBTSU9DREFSUDoKKwljYXNlIFNJT0NHQVJQOgorCWNhc2UgU0lPQ1NBUlA6CisJY2FzZSBTSU9DR0lGQUREUjoKKwljYXNlIFNJT0NTSUZBRERSOgorCWNhc2UgU0lPQ0dJRkJSREFERFI6CisJY2FzZSBTSU9DU0lGQlJEQUREUjoKKwljYXNlIFNJT0NHSUZORVRNQVNLOgorCWNhc2UgU0lPQ1NJRk5FVE1BU0s6CisJY2FzZSBTSU9DR0lGRFNUQUREUjoKKwljYXNlIFNJT0NTSUZEU1RBRERSOgorCWNhc2UgU0lPQ1NJRkZMQUdTOgorCQlpZiAoIW5ldF9lcShzb2NrX25ldChzayksICZpbml0X25ldCkpCisJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCQlyZXR1cm4gaW5ldF9kZ3JhbV9vcHMuaW9jdGwoc29jaywgY21kLCBhcmcpOwogI2VuZGlmCiAKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDM5LDcgKzIwMzcsNyBAQAogI2RlZmluZSBwYWNrZXRfcG9sbCBkYXRhZ3JhbV9wb2xsCiAjZWxzZQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHBhY2tldF9wb2xsKHN0cnVjdCBmaWxlICogZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFja2V0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkJcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKQEAgLTIwNjksNyArMjA2Nyw3IEBACiBzdGF0aWMgdm9pZCBwYWNrZXRfbW1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKLQlzdHJ1Y3Qgc29ja2V0ICogc29jayA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCiAJaWYgKHNrKQpAQCAtMjA3OSw3ICsyMDc3LDcgQEAKIHN0YXRpYyB2b2lkIHBhY2tldF9tbV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKLQlzdHJ1Y3Qgc29ja2V0ICogc29jayA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCiAJaWYgKHNrKQpAQCAtMjA4Nyw4ICsyMDg1LDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwYWNrZXRfbW1hcF9vcHMgPSB7Ci0JLm9wZW4gPQlwYWNrZXRfbW1fb3BlbiwKLQkuY2xvc2UgPXBhY2tldF9tbV9jbG9zZSwKKwkub3Blbgk9CXBhY2tldF9tbV9vcGVuLAorCS5jbG9zZQk9CXBhY2tldF9tbV9jbG9zZSwKIH07CiAKIHN0YXRpYyB2b2lkIGZyZWVfcGdfdmVjKGNoYXIgKipwZ192ZWMsIHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgaW50IGxlbikKQEAgLTIyMzksOCArMjIzNyw4IEBACiAJCXNrYl9xdWV1ZV9wdXJnZShyYl9xdWV1ZSk7CiAjdW5kZWYgWEMKIAkJaWYgKGF0b21pY19yZWFkKCZwby0+bWFwcGVkKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJwYWNrZXRfbW1hcDogdm1hIGlzIGJ1c3k6ICVkXG4iLAotCQkJCQkJYXRvbWljX3JlYWQoJnBvLT5tYXBwZWQpKTsKKwkJCXByX2VycigicGFja2V0X21tYXA6IHZtYSBpcyBidXN5OiAlZFxuIiwKKwkJCSAgICAgICBhdG9taWNfcmVhZCgmcG8tPm1hcHBlZCkpOwogCX0KIAltdXRleF91bmxvY2soJnBvLT5wZ192ZWNfbG9jayk7CiAKQEAgLTIzMDMsNyArMjMwMSw3IEBACiAJCQlpbnQgcGdfbnVtOwogCiAJCQlmb3IgKHBnX251bSA9IDA7IHBnX251bSA8IHJiLT5wZ192ZWNfcGFnZXM7Ci0JCQkJCXBnX251bSsrLHBhZ2UrKykgeworCQkJCQlwZ19udW0rKywgcGFnZSsrKSB7CiAJCQkJZXJyID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCBzdGFydCwgcGFnZSk7CiAJCQkJaWYgKHVubGlrZWx5KGVycikpCiAJCQkJCWdvdG8gb3V0OwpAQCAtMjM3Miw3ICsyMzcwLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGFja2V0X25ldGRldl9ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9cGFja2V0X25vdGlmaWVyLAorCS5ub3RpZmllcl9jYWxsID0JcGFja2V0X25vdGlmaWVyLAogfTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCkBAIC0yNDAyLDcgKzI0MDAsNyBAQAogCSsrKnBvczsKIAlyZXR1cm4gICh2ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJPyBza19oZWFkKCZuZXQtPnBhY2tldC5za2xpc3QpCi0JCTogc2tfbmV4dCgoc3RydWN0IHNvY2sqKXYpIDsKKwkJOiBza19uZXh0KChzdHJ1Y3Qgc29jayAqKXYpIDsKIH0KIAogc3RhdGljIHZvaWQgcGFja2V0X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtMjQzMCw3ICsyNDI4LDcgQEAKIAkJCSAgIHBvLT5ydW5uaW5nLAogCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX3JtZW1fYWxsb2MpLAogCQkJICAgc29ja19pX3VpZChzKSwKLQkJCSAgIHNvY2tfaV9pbm8ocykgKTsKKwkJCSAgIHNvY2tfaV9pbm8ocykpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9kYXRhZ3JhbS5jIGIvbmV0L3Bob25ldC9kYXRhZ3JhbS5jCmluZGV4IGUwODc4NjIuLmVmNWM3NWMgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvZGF0YWdyYW0uYworKysgYi9uZXQvcGhvbmV0L2RhdGFncmFtLmMKQEAgLTE1OSw4ICsxNTksMTEgQEAKIHN0YXRpYyBpbnQgcG5fYmFja2xvZ19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCBlcnIgPSBzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYik7Ci0JaWYgKGVyciA8IDApCisJaWYgKGVyciA8IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CisJCWlmIChlcnIgPT0gLUVOT01FTSkKKwkJCWF0b21pY19pbmMoJnNrLT5za19kcm9wcyk7CisJfQogCXJldHVybiBlcnIgPyBORVRfUlhfRFJPUCA6IE5FVF9SWF9TVUNDRVNTOwogfQogCmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BlcC1ncHJzLmMgYi9uZXQvcGhvbmV0L3BlcC1ncHJzLmMKaW5kZXggNDgwODM5ZC4uZDE4MzUwOSAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9wZXAtZ3Bycy5jCisrKyBiL25ldC9waG9uZXQvcGVwLWdwcnMuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ3Byc194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZ3Byc194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGdwcnNfZGV2ICpncCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNvY2sgKnNrID0gZ3AtPnNrOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJc2tiX29ycGhhbihza2IpOwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCWlmIChwZXBfd3JpdGVhYmxlKHNrKSkKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbnQgZ3Byc19zZXRfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQpkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wZXAuYyBiL25ldC9waG9uZXQvcGVwLmMKaW5kZXggZWVmODMzZS4uYjgyNTJkMiAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9wZXAuYworKysgYi9uZXQvcGhvbmV0L3BlcC5jCkBAIC0zNDYsOCArMzQ2LDEwIEBACiAJCWJyZWFrOwogCiAJY2FzZSBQTlNfUEVQX0NUUkxfUkVROgotCQlpZiAoc2tiX3F1ZXVlX2xlbigmcG4tPmN0cmxyZXFfcXVldWUpID49IFBOUElQRV9DVFJMUkVRX01BWCkKKwkJaWYgKHNrYl9xdWV1ZV9sZW4oJnBuLT5jdHJscmVxX3F1ZXVlKSA+PSBQTlBJUEVfQ1RSTFJFUV9NQVgpIHsKKwkJCWF0b21pY19pbmMoJnNrLT5za19kcm9wcyk7CiAJCQlicmVhazsKKwkJfQogCQlfX3NrYl9wdWxsKHNrYiwgNCk7CiAJCXF1ZXVlID0gJnBuLT5jdHJscmVxX3F1ZXVlOwogCQlnb3RvIHF1ZXVlOwpAQCAtMzU4LDEwICszNjAsMTMgQEAKIAkJCWVyciA9IHNvY2tfcXVldWVfcmN2X3NrYihzaywgc2tiKTsKIAkJCWlmICghZXJyKQogCQkJCXJldHVybiAwOworCQkJaWYgKGVyciA9PSAtRU5PTUVNKQorCQkJCWF0b21pY19pbmMoJnNrLT5za19kcm9wcyk7CiAJCQlicmVhazsKIAkJfQogCiAJCWlmIChwbi0+cnhfY3JlZGl0cyA9PSAwKSB7CisJCQlhdG9taWNfaW5jKCZzay0+c2tfZHJvcHMpOwogCQkJZXJyID0gLUVOT0JVRlM7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wbl9kZXYuYyBiL25ldC9waG9uZXQvcG5fZGV2LmMKaW5kZXggYzJiNzdhNi4uMmY2NWRjYSAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9wbl9kZXYuYworKysgYi9uZXQvcGhvbmV0L3BuX2Rldi5jCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGhvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KICNpbmNsdWRlIDxuZXQvcGhvbmV0L3BuX2Rldi5oPgpAQCAtMTk0LDE0ICsxOTYsMzcgQEAKIAlyZXR1cm4gZXJyOwogfQogCisvKiBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBhIFBob25ldCBkZXZpY2UsIGlmIHN1cHBvcnRlZCAqLworc3RhdGljIGludCBwaG9uZXRfZGV2aWNlX2F1dG9jb25mKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlmX3Bob25ldF9yZXEgcmVxOworCWludCByZXQ7CisKKwlpZiAoIWRldi0+bmV0ZGV2X29wcy0+bmRvX2RvX2lvY3RsKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXQgPSBkZXYtPm5ldGRldl9vcHMtPm5kb19kb19pb2N0bChkZXYsIChzdHJ1Y3QgaWZyZXEgKikmcmVxLAorCQkJCQkJU0lPQ1BOR0FVVE9DT05GKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gcGhvbmV0X2FkZHJlc3NfYWRkKGRldiwgcmVxLmlmcl9waG9uZXRfYXV0b2NvbmYuZGV2aWNlKTsKK30KKwogLyogbm90aWZ5IFBob25ldCBvZiBkZXZpY2UgZXZlbnRzICovCiBzdGF0aWMgaW50IHBob25ldF9kZXZpY2Vfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbWUsIHVuc2lnbmVkIGxvbmcgd2hhdCwKIAkJCQl2b2lkICphcmcpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFyZzsKIAotCWlmICh3aGF0ID09IE5FVERFVl9VTlJFR0lTVEVSKQorCXN3aXRjaCAod2hhdCkgeworCWNhc2UgTkVUREVWX1JFR0lTVEVSOgorCQlpZiAoZGV2LT50eXBlID09IEFSUEhSRF9QSE9ORVQpCisJCQlwaG9uZXRfZGV2aWNlX2F1dG9jb25mKGRldik7CisJCWJyZWFrOworCWNhc2UgTkVUREVWX1VOUkVHSVNURVI6CiAJCXBob25ldF9kZXZpY2VfZGVzdHJveShkZXYpOworCQlicmVhazsKKwl9CiAJcmV0dXJuIDA7CiAKIH0KQEAgLTIxOCw2ICsyNDMsMTEgQEAKIAlpZiAoIXBubikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgInBob25ldCIsIDAsICZwbl9zb2NrX3NlcV9mb3BzKSkgeworCQlrZnJlZShwbm4pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKIAlJTklUX0xJU1RfSEVBRCgmcG5uLT5wbmRldnMubGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJnBubi0+cG5kZXZzLmxvY2spOwogCW5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIHBob25ldF9uZXRfaWQsIHBubik7CkBAIC0yMzMsNiArMjYzLDggQEAKIAlmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpCiAJCXBob25ldF9kZXZpY2VfZGVzdHJveShkZXYpOwogCXJ0bmxfdW5sb2NrKCk7CisKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAicGhvbmV0Iik7CiAJa2ZyZWUocG5uKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wbl9uZXRsaW5rLmMgYi9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYwppbmRleCBmOGI0Y2VlLi5kMjFmZDM1IDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYworKysgYi9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAKIAkJCWlmIChmaWxsX2FkZHIoc2tiLCBwbmQtPm5ldGRldiwgYWRkciA8PCAyLAogCQkJCQkgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCi0JCQkJCWNiLT5ubGgtPm5sbXNnX3NlcSwgUlRNX05FV0FERFIpKQorCQkJCQljYi0+bmxoLT5ubG1zZ19zZXEsIFJUTV9ORVdBRERSKSA8IDApCiAJCQkJZ290byBvdXQ7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3NvY2tldC5jIGIvbmV0L3Bob25ldC9zb2NrZXQuYwppbmRleCBhZGEyYTM1Li43YTRlZTM5IDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3NvY2tldC5jCisrKyBiL25ldC9waG9uZXQvc29ja2V0LmMKQEAgLTQxMiwzICs0MTIsMTAyIEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHBuX3NvY2tfZ2V0X3BvcnQpOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqcG5fc29ja19nZXRfaWR4KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBzb2NrICpza25vZGU7CisKKwlza19mb3JfZWFjaChza25vZGUsIG5vZGUsICZwbnNvY2tzLmhsaXN0KSB7CisJCWlmICghbmV0X2VxKG5ldCwgc29ja19uZXQoc2tub2RlKSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFwb3MpCisJCQlyZXR1cm4gc2tub2RlOworCQlwb3MtLTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqcG5fc29ja19nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOworCisJZG8KKwkJc2sgPSBza19uZXh0KHNrKTsKKwl3aGlsZSAoc2sgJiYgIW5ldF9lcShuZXQsIHNvY2tfbmV0KHNrKSkpOworCisJcmV0dXJuIHNrOworfQorCitzdGF0aWMgdm9pZCAqcG5fc29ja19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMocG5zb2Nrcy5sb2NrKQoreworCXNwaW5fbG9ja19iaCgmcG5zb2Nrcy5sb2NrKTsKKwlyZXR1cm4gKnBvcyA/IHBuX3NvY2tfZ2V0X2lkeChzZXEsICpwb3MgLSAxKSA6IFNFUV9TVEFSVF9UT0tFTjsKK30KKworc3RhdGljIHZvaWQgKnBuX3NvY2tfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBzb2NrICpzazsKKworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKKwkJc2sgPSBwbl9zb2NrX2dldF9pZHgoc2VxLCAwKTsKKwllbHNlCisJCXNrID0gcG5fc29ja19nZXRfbmV4dChzZXEsIHYpOworCSgqcG9zKSsrOworCXJldHVybiBzazsKK30KKworc3RhdGljIHZvaWQgcG5fc29ja19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKHBuc29ja3MubG9jaykKK3sKKwlzcGluX3VubG9ja19iaCgmcG5zb2Nrcy5sb2NrKTsKK30KKworc3RhdGljIGludCBwbl9zb2NrX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCWludCBsZW47CisKKwlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCisJCXNlcV9wcmludGYoc2VxLCAiJXMlbiIsICJwdCAgbG9jICByZW0gcnMgc3QgdHhfcXVldWUgcnhfcXVldWUgIgorCQkJIiAgdWlkIGlub2RlIHJlZiBwb2ludGVyIGRyb3BzIiwgJmxlbik7CisJZWxzZSB7CisJCXN0cnVjdCBzb2NrICpzayA9IHY7CisJCXN0cnVjdCBwbl9zb2NrICpwbiA9IHBuX3NrKHNrKTsKKworCQlzZXFfcHJpbnRmKHNlcSwgIiUyZCAlMDRYOiUwNFg6JTAyWCAlMDJYICUwOFg6JTA4WCAlNWQgJWx1ICIKKwkJCSIlZCAlcCAlZCVuIiwKKwkJCXNrLT5za19wcm90b2NvbCwgcG4tPnNvYmplY3QsIDAsIHBuLT5yZXNvdXJjZSwKKwkJCXNrLT5za19zdGF0ZSwKKwkJCXNrX3dtZW1fYWxsb2NfZ2V0KHNrKSwgc2tfcm1lbV9hbGxvY19nZXQoc2spLAorCQkJc29ja19pX3VpZChzayksIHNvY2tfaV9pbm8oc2spLAorCQkJYXRvbWljX3JlYWQoJnNrLT5za19yZWZjbnQpLCBzaywKKwkJCWF0b21pY19yZWFkKCZzay0+c2tfZHJvcHMpLCAmbGVuKTsKKwl9CisJc2VxX3ByaW50ZihzZXEsICIlKnNcbiIsIDEyNyAtIGxlbiwgIiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBuX3NvY2tfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBwbl9zb2NrX3NlcV9zdGFydCwKKwkubmV4dCA9IHBuX3NvY2tfc2VxX25leHQsCisJLnN0b3AgPSBwbl9zb2NrX3NlcV9zdG9wLAorCS5zaG93ID0gcG5fc29ja19zZXFfc2hvdywKK307CisKK3N0YXRpYyBpbnQgcG5fc29ja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3Blbl9uZXQoaW5vZGUsIGZpbGUsICZwbl9zb2NrX3NlcV9vcHMsCisJCQkJc2l6ZW9mKHN0cnVjdCBzZXFfbmV0X3ByaXZhdGUpKTsKK30KKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwbl9zb2NrX3NlcV9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gcG5fc29ja19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX25ldCwKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvS2NvbmZpZyBiL25ldC9yZHMvS2NvbmZpZwppbmRleCA3OTY3NzNiLi5lYzc1M2IzIDEwMDY0NAotLS0gYS9uZXQvcmRzL0tjb25maWcKKysrIGIvbmV0L3Jkcy9LY29uZmlnCkBAIC0xLDE0ICsxLDI4IEBACiAKIGNvbmZpZyBSRFMKLQl0cmlzdGF0ZSAiUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAoUkRTKSAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIElORVQgJiYgSU5GSU5JQkFORF9JUE9JQiAmJiBFWFBFUklNRU5UQUwKLQlkZXBlbmRzIG9uIElORklOSUJBTkQgJiYgSU5GSU5JQkFORF9BRERSX1RSQU5TCisJdHJpc3RhdGUgIlRoZSBSRFMgUHJvdG9jb2wgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBJTkVUICYmIEVYUEVSSU1FTlRBTAogCS0tLWhlbHAtLS0KLQkgIFJEUyBwcm92aWRlcyByZWxpYWJsZSwgc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIGRhdGFncmFtcwotCSAgb3ZlciBJbmZpbmliYW5kLgorCSAgVGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgcHJvdG9jb2wgcHJvdmlkZXMgcmVsaWFibGUsCisJICBzZXF1ZW5jZWQgZGVsaXZlcnkgb2YgZGF0YWdyYW1zIG92ZXIgSW5maW5pYmFuZCwgaVdBUlAsCisJICBvciBUQ1AuCisKK2NvbmZpZyBSRFNfUkRNQQorCXRyaXN0YXRlICJSRFMgb3ZlciBJbmZpbmliYW5kIGFuZCBpV0FSUCIKKwlkZXBlbmRzIG9uIFJEUyAmJiBJTkZJTklCQU5EICYmIElORklOSUJBTkRfQUREUl9UUkFOUworCS0tLWhlbHAtLS0KKwkgIEFsbG93IFJEUyB0byB1c2UgSW5maW5pYmFuZCBhbmQgaVdBUlAgYXMgYSB0cmFuc3BvcnQuCisJICBUaGlzIHRyYW5zcG9ydCBzdXBwb3J0cyBSRE1BIG9wZXJhdGlvbnMuCisKK2NvbmZpZyBSRFNfVENQCisJdHJpc3RhdGUgIlJEUyBvdmVyIFRDUCIKKwlkZXBlbmRzIG9uIFJEUworCS0tLWhlbHAtLS0KKwkgIEFsbG93IFJEUyB0byB1c2UgVENQIGFzIGEgdHJhbnNwb3J0LgorCSAgVGhpcyB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBSRE1BIG9wZXJhdGlvbnMuCiAKIGNvbmZpZyBSRFNfREVCVUcKLSAgICAgICAgYm9vbCAiRGVidWdnaW5nIG1lc3NhZ2VzIgorICAgICAgICBib29sICJSRFMgZGVidWdnaW5nIG1lc3NhZ2VzIgogCWRlcGVuZHMgb24gUkRTCiAgICAgICAgIGRlZmF1bHQgbgogCmRpZmYgLS1naXQgYS9uZXQvcmRzL01ha2VmaWxlIGIvbmV0L3Jkcy9NYWtlZmlsZQppbmRleCA1MWYyNzU4Li5iNDZlY2ExIDEwMDY0NAotLS0gYS9uZXQvcmRzL01ha2VmaWxlCisrKyBiL25ldC9yZHMvTWFrZWZpbGUKQEAgLTEsMTMgKzEsMjAgQEAKIG9iai0kKENPTkZJR19SRFMpICs9IHJkcy5vCiByZHMteSA6PQlhZl9yZHMubyBiaW5kLm8gY29uZy5vIGNvbm5lY3Rpb24ubyBpbmZvLm8gbWVzc2FnZS5vICAgXAogCQkJcmVjdi5vIHNlbmQubyBzdGF0cy5vIHN5c2N0bC5vIHRocmVhZHMubyB0cmFuc3BvcnQubyBcCi0JCQlsb29wLm8gcGFnZS5vIHJkbWEubyBcCi0JCQlyZG1hX3RyYW5zcG9ydC5vIFwKKwkJCWxvb3AubyBwYWdlLm8gcmRtYS5vCisKK29iai0kKENPTkZJR19SRFNfUkRNQSkgKz0gcmRzX3JkbWEubworcmRzX3JkbWEtb2JqcyA6PQlyZG1hX3RyYW5zcG9ydC5vIFwKIAkJCWliLm8gaWJfY20ubyBpYl9yZWN2Lm8gaWJfcmluZy5vIGliX3NlbmQubyBpYl9zdGF0cy5vIFwKIAkJCWliX3N5c2N0bC5vIGliX3JkbWEubyBcCiAJCQlpdy5vIGl3X2NtLm8gaXdfcmVjdi5vIGl3X3JpbmcubyBpd19zZW5kLm8gaXdfc3RhdHMubyBcCiAJCQlpd19zeXNjdGwubyBpd19yZG1hLm8KIAorCitvYmotJChDT05GSUdfUkRTX1RDUCkgKz0gcmRzX3RjcC5vCityZHNfdGNwLW9ianMgOj0JCXRjcC5vIHRjcF9jb25uZWN0Lm8gdGNwX2xpc3Rlbi5vIHRjcF9yZWN2Lm8gXAorCQkJdGNwX3NlbmQubyB0Y3Bfc3RhdHMubworCiBpZmVxICgkKENPTkZJR19SRFNfREVCVUcpLCB5KQogRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKIGVuZGlmCmRpZmYgLS1naXQgYS9uZXQvcmRzL2FmX3Jkcy5jIGIvbmV0L3Jkcy9hZl9yZHMuYwppbmRleCBiMTFlN2U1Li4xMDhlZDJlIDEwMDY0NAotLS0gYS9uZXQvcmRzL2FmX3Jkcy5jCisrKyBiL25ldC9yZHMvYWZfcmRzLmMKQEAgLTM5LDcgKzM5LDYgQEAKIAogI2luY2x1ZGUgInJkcy5oIgogI2luY2x1ZGUgInJkbWEuaCIKLSNpbmNsdWRlICJyZG1hX3RyYW5zcG9ydC5oIgogCiAvKiB0aGlzIGlzIGp1c3QgdXNlZCBmb3Igc3RhdHMgZ2F0aGVyaW5nIDovICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19zb2NrX2xvY2spOwpAQCAtNTA5LDcgKzUwOCw2IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCByZHNfZXhpdCh2b2lkKQogewotCXJkc19yZG1hX2V4aXQoKTsKIAlzb2NrX3VucmVnaXN0ZXIocmRzX2ZhbWlseV9vcHMuZmFtaWx5KTsKIAlwcm90b191bnJlZ2lzdGVyKCZyZHNfcHJvdG8pOwogCXJkc19jb25uX2V4aXQoKTsKQEAgLTU0OSwxNCArNTQ3LDggQEAKIAlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1NPQ0tFVFMsIHJkc19zb2NrX2luZm8pOwogCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fUkVDVl9NRVNTQUdFUywgcmRzX3NvY2tfaW5jX2luZm8pOwogCi0JLyogaWIvaXdhcnAgdHJhbnNwb3J0cyBjdXJyZW50bHkgY29tcGlsZWQtaW4gKi8KLQlyZXQgPSByZHNfcmRtYV9pbml0KCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfc29jazsKIAlnb3RvIG91dDsKIAotb3V0X3NvY2s6Ci0Jc29ja191bnJlZ2lzdGVyKHJkc19mYW1pbHlfb3BzLmZhbWlseSk7CiBvdXRfcHJvdG86CiAJcHJvdG9fdW5yZWdpc3RlcigmcmRzX3Byb3RvKTsKIG91dF9zdGF0czoKZGlmZiAtLWdpdCBhL25ldC9yZHMvYmluZC5jIGIvbmV0L3Jkcy9iaW5kLmMKaW5kZXggYzE3Y2MzOS4uNWQ5NWZjMCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9iaW5kLmMKKysrIGIvbmV0L3Jkcy9iaW5kLmMKQEAgLTE4Nyw2ICsxODcsOSBAQAogCWlmICh0cmFucyA9PSBOVUxMKSB7CiAJCXJldCA9IC1FQUREUk5PVEFWQUlMOwogCQlyZHNfcmVtb3ZlX2JvdW5kKHJzKTsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0lORk8gIlJEUzogcmRzX2JpbmQoKSBjb3VsZCBub3QgZmluZCBhIHRyYW5zcG9ydCwgIgorCQkJCSJsb2FkIHJkc190Y3Agb3IgcmRzX3JkbWE/XG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvcmRzL2NvbmcuYyBiL25ldC9yZHMvY29uZy5jCmluZGV4IDcxMGU0NTkuLmRkMjcxMWQgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvY29uZy5jCisrKyBiL25ldC9yZHMvY29uZy5jCkBAIC0yNTQsNiArMjU0LDcgQEAKIAkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbW9uaXRvcl9sb2NrLCBmbGFncyk7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX2NvbmdfbWFwX3VwZGF0ZWQpOwogCiBpbnQgcmRzX2NvbmdfdXBkYXRlZF9zaW5jZSh1bnNpZ25lZCBsb25nICpyZWNlbnQpCiB7CmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCmluZGV4IGQxNDQ0NWMuLmNjOGI1NjggMTAwNjQ0Ci0tLSBhL25ldC9yZHMvY29ubmVjdGlvbi5jCisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIAkJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnAsCiAJCQkJICAgICAgIGludCBpc19vdXRnb2luZykKIHsKLQlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sICp0bXAsICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgKnBhcmVudCA9IE5VTEw7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSByZHNfY29ubl9idWNrZXQobGFkZHIsIGZhZGRyKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CkBAIC0xNTUsNyArMTU1LDYgQEAKIAl9CiAKIAlJTklUX0hMSVNUX05PREUoJmNvbm4tPmNfaGFzaF9ub2RlKTsKLQljb25uLT5jX3ZlcnNpb24gPSBSRFNfUFJPVE9DT0xfM18wOwogCWNvbm4tPmNfbGFkZHIgPSBsYWRkcjsKIAljb25uLT5jX2ZhZGRyID0gZmFkZHI7CiAJc3Bpbl9sb2NrX2luaXQoJmNvbm4tPmNfbG9jayk7CkBAIC0yMTEsMjYgKzIxMCw0MCBAQAogCSAgdHJhbnMtPnRfbmFtZSA/IHRyYW5zLT50X25hbWUgOiAiW3Vua25vd25dIiwKIAkgIGlzX291dGdvaW5nID8gIihvdXRnb2luZykiIDogIiIpOwogCisJLyoKKwkgKiBTaW5jZSB3ZSByYW4gd2l0aG91dCBob2xkaW5nIHRoZSBjb25uIGxvY2ssIHNvbWVvbmUgY291bGQKKwkgKiBoYXZlIGNyZWF0ZWQgdGhlIHNhbWUgY29ubiAoZWl0aGVyIG5vcm1hbCBvciBwYXNzaXZlKSBpbiB0aGUKKwkgKiBpbnRlcmltLiBXZSBjaGVjayB3aGlsZSBob2xkaW5nIHRoZSBsb2NrLiBJZiB3ZSB3b24sIHdlIGNvbXBsZXRlCisJICogaW5pdCBhbmQgcmV0dXJuIG91ciBjb25uLiBJZiB3ZSBsb3N0LCB3ZSByb2xsYmFjayBhbmQgcmV0dXJuIHRoZQorCSAqIG90aGVyIG9uZS4KKwkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOwotCWlmIChwYXJlbnQgPT0gTlVMTCkgewotCQl0bXAgPSByZHNfY29ubl9sb29rdXAoaGVhZCwgbGFkZHIsIGZhZGRyLCB0cmFucyk7Ci0JCWlmICh0bXAgPT0gTlVMTCkKLQkJCWhsaXN0X2FkZF9oZWFkKCZjb25uLT5jX2hhc2hfbm9kZSwgaGVhZCk7Ci0JfSBlbHNlIHsKLQkJdG1wID0gcGFyZW50LT5jX3Bhc3NpdmU7Ci0JCWlmICghdG1wKQorCWlmIChwYXJlbnQpIHsKKwkJLyogQ3JlYXRpbmcgcGFzc2l2ZSBjb25uICovCisJCWlmIChwYXJlbnQtPmNfcGFzc2l2ZSkgeworCQkJdHJhbnMtPmNvbm5fZnJlZShjb25uLT5jX3RyYW5zcG9ydF9kYXRhKTsKKwkJCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKKwkJCWNvbm4gPSBwYXJlbnQtPmNfcGFzc2l2ZTsKKwkJfSBlbHNlIHsKIAkJCXBhcmVudC0+Y19wYXNzaXZlID0gY29ubjsKLQl9Ci0KLQlpZiAodG1wKSB7Ci0JCXRyYW5zLT5jb25uX2ZyZWUoY29ubi0+Y190cmFuc3BvcnRfZGF0YSk7Ci0JCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKLQkJY29ubiA9IHRtcDsKKwkJCXJkc19jb25nX2FkZF9jb25uKGNvbm4pOworCQkJcmRzX2Nvbm5fY291bnQrKzsKKwkJfQogCX0gZWxzZSB7Ci0JCXJkc19jb25nX2FkZF9jb25uKGNvbm4pOwotCQlyZHNfY29ubl9jb3VudCsrOwotCX0KKwkJLyogQ3JlYXRpbmcgbm9ybWFsIGNvbm4gKi8KKwkJc3RydWN0IHJkc19jb25uZWN0aW9uICpmb3VuZDsKIAorCQlmb3VuZCA9IHJkc19jb25uX2xvb2t1cChoZWFkLCBsYWRkciwgZmFkZHIsIHRyYW5zKTsKKwkJaWYgKGZvdW5kKSB7CisJCQl0cmFucy0+Y29ubl9mcmVlKGNvbm4tPmNfdHJhbnNwb3J0X2RhdGEpOworCQkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOworCQkJY29ubiA9IGZvdW5kOworCQl9IGVsc2UgeworCQkJaGxpc3RfYWRkX2hlYWQoJmNvbm4tPmNfaGFzaF9ub2RlLCBoZWFkKTsKKwkJCXJkc19jb25nX2FkZF9jb25uKGNvbm4pOworCQkJcmRzX2Nvbm5fY291bnQrKzsKKwkJfQorCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CiAKIG91dDoKQEAgLTI0MiwxMiArMjU1LDE0IEBACiB7CiAJcmV0dXJuIF9fcmRzX2Nvbm5fY3JlYXRlKGxhZGRyLCBmYWRkciwgdHJhbnMsIGdmcCwgMCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9jcmVhdGUpOwogCiBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyhfX2JlMzIgbGFkZHIsIF9fYmUzMiBmYWRkciwKIAkJCQkgICAgICAgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zLCBnZnBfdCBnZnApCiB7CiAJcmV0dXJuIF9fcmRzX2Nvbm5fY3JlYXRlKGxhZGRyLCBmYWRkciwgdHJhbnMsIGdmcCwgMSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcpOwogCiB2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQogewpAQCAtMjkwLDYgKzMwNSw3IEBACiAKIAlyZHNfY29ubl9jb3VudC0tOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZGVzdHJveSk7CiAKIHN0YXRpYyB2b2lkIHJkc19jb25uX21lc3NhZ2VfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAogCQkJCSAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLApAQCAtMzkzLDYgKzQwOSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfZm9yX2VhY2hfY29ubl9pbmZvKTsKIAogc3RhdGljIGludCByZHNfY29ubl9pbmZvX3Zpc2l0b3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAogCQkJCSAgdm9pZCAqYnVmZmVyKQpAQCAtNDY4LDYgKzQ4NSw3IEBACiAJYXRvbWljX3NldCgmY29ubi0+Y19zdGF0ZSwgUkRTX0NPTk5fRVJST1IpOwogCXF1ZXVlX3dvcmsocmRzX3dxLCAmY29ubi0+Y19kb3duX3cpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fZHJvcCk7CiAKIC8qCiAgKiBBbiBlcnJvciBvY2N1cnJlZCBvbiB0aGUgY29ubmVjdGlvbgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5jIGIvbmV0L3Jkcy9pYi5jCmluZGV4IGI5YmNkMzIuLjUzNmViZTUgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWIuYworKysgYi9uZXQvcmRzL2liLmMKQEAgLTQzLDExICs0MywxNCBAQAogCiB1bnNpZ25lZCBpbnQgZm1yX3Bvb2xfc2l6ZSA9IFJEU19GTVJfUE9PTF9TSVpFOwogdW5zaWduZWQgaW50IGZtcl9tZXNzYWdlX3NpemUgPSBSRFNfRk1SX1NJWkUgKyAxOyAvKiArMSBhbGxvd3MgZm9yIHVuYWxpZ25lZCBNUnMgKi8KK3Vuc2lnbmVkIGludCByZHNfaWJfcmV0cnlfY291bnQgPSBSRFNfSUJfREVGQVVMVF9SRVRSWV9DT1VOVDsKIAogbW9kdWxlX3BhcmFtKGZtcl9wb29sX3NpemUsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZtcl9wb29sX3NpemUsICIgTWF4IG51bWJlciBvZiBmbXIgcGVyIEhDQSIpOwogbW9kdWxlX3BhcmFtKGZtcl9tZXNzYWdlX3NpemUsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZtcl9tZXNzYWdlX3NpemUsICIgTWF4IHNpemUgb2YgYSBSRE1BIHRyYW5zZmVyIik7Cittb2R1bGVfcGFyYW0ocmRzX2liX3JldHJ5X2NvdW50LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhyZHNfaWJfcmV0cnlfY291bnQsICIgTnVtYmVyIG9mIGh3IHJldHJpZXMgYmVmb3JlIHJlcG9ydGluZyBhbiBlcnJvciIpOwogCiBzdHJ1Y3QgbGlzdF9oZWFkIHJkc19pYl9kZXZpY2VzOwogCkBAIC04Miw5ICs4NSw2IEBACiAJcmRzX2liZGV2LT5tYXhfd3JzID0gZGV2X2F0dHItPm1heF9xcF93cjsKIAlyZHNfaWJkZXYtPm1heF9zZ2UgPSBtaW4oZGV2X2F0dHItPm1heF9zZ2UsIFJEU19JQl9NQVhfU0dFKTsKIAotCXJkc19pYmRldi0+Zm1yX3BhZ2Vfc2hpZnQgPSBtYXgoOSwgZmZzKGRldl9hdHRyLT5wYWdlX3NpemVfY2FwKSAtIDEpOwotCXJkc19pYmRldi0+Zm1yX3BhZ2Vfc2l6ZSAgPSAxIDw8IHJkc19pYmRldi0+Zm1yX3BhZ2Vfc2hpZnQ7Ci0JcmRzX2liZGV2LT5mbXJfcGFnZV9tYXNrICA9IH4oKHU2NCkgcmRzX2liZGV2LT5mbXJfcGFnZV9zaXplIC0gMSk7CiAJcmRzX2liZGV2LT5mbXJfbWF4X3JlbWFwcyA9IGRldl9hdHRyLT5tYXhfbWFwX3Blcl9mbXI/OiAzMjsKIAlyZHNfaWJkZXYtPm1heF9mbXJzID0gZGV2X2F0dHItPm1heF9mbXIgPwogCQkJbWluX3QodW5zaWduZWQgaW50LCBkZXZfYXR0ci0+bWF4X2ZtciwgZm1yX3Bvb2xfc2l6ZSkgOgpAQCAtMjgyLDYgKzI4Miw3IEBACiAJLmZsdXNoX21ycwkJPSByZHNfaWJfZmx1c2hfbXJzLAogCS50X293bmVyCQk9IFRISVNfTU9EVUxFLAogCS50X25hbWUJCQk9ICJpbmZpbmliYW5kIiwKKwkudF90eXBlCQkJPSBSRFNfVFJBTlNfSUIKIH07CiAKIGludCBfX2luaXQgcmRzX2liX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWIuaCBiL25ldC9yZHMvaWIuaAppbmRleCA0NTVhZTczLi4xMzc4Yjg1IDEwMDY0NAotLS0gYS9uZXQvcmRzL2liLmgKKysrIGIvbmV0L3Jkcy9pYi5oCkBAIC0xNSw2ICsxNSw4IEBACiAjZGVmaW5lIFJEU19JQl9ERUZBVUxUX1JFQ1ZfV1IJCTEwMjQKICNkZWZpbmUgUkRTX0lCX0RFRkFVTFRfU0VORF9XUgkJMjU2CiAKKyNkZWZpbmUgUkRTX0lCX0RFRkFVTFRfUkVUUllfQ09VTlQJMgorCiAjZGVmaW5lIFJEU19JQl9TVVBQT1JURURfUFJPVE9DT0xTCTB4MDAwMDAwMDMJLyogbWlub3IgdmVyc2lvbnMgc3VwcG9ydGVkICovCiAKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHJkc19pYl9kZXZpY2VzOwpAQCAtMTU3LDkgKzE1OSw2IEBACiAJc3RydWN0IGliX3BkCQkqcGQ7CiAJc3RydWN0IGliX21yCQkqbXI7CiAJc3RydWN0IHJkc19pYl9tcl9wb29sCSptcl9wb29sOwotCWludAkJCWZtcl9wYWdlX3NoaWZ0OwotCWludAkJCWZtcl9wYWdlX3NpemU7Ci0JdTY0CQkJZm1yX3BhZ2VfbWFzazsKIAl1bnNpZ25lZCBpbnQJCWZtcl9tYXhfcmVtYXBzOwogCXVuc2lnbmVkIGludAkJbWF4X2ZtcnM7CiAJaW50CQkJbWF4X3NnZTsKQEAgLTI0Nyw2ICsyNDYsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IGZtcl9wb29sX3NpemU7CiBleHRlcm4gdW5zaWduZWQgaW50IGZtcl9tZXNzYWdlX3NpemU7CitleHRlcm4gdW5zaWduZWQgaW50IHJkc19pYl9yZXRyeV9jb3VudDsKIAogZXh0ZXJuIHNwaW5sb2NrX3QgaWJfbm9kZXZfY29ubnNfbG9jazsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGliX25vZGV2X2Nvbm5zOwpAQCAtMzU1LDE3ICszNTUsMjUgQEAKIC8qCiAgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBnZXR0aW5nL3NldHRpbmcgdGhlIGhlYWRlciBhbmQgZGF0YSBTR0VzIGluCiAgKiBSRFMgcGFja2V0cyAobm90IFJETUEpCisgKgorICogRnJvbSB2ZXJzaW9uIDMuMSBvbndhcmRzLCBoZWFkZXIgaXMgaW4gZnJvbnQgb2YgZGF0YSBpbiB0aGUgc2dlLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl9zZ2UgKgogcmRzX2liX2hlYWRlcl9zZ2Uoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3NnZSAqc2dlKQogewotCXJldHVybiAmc2dlWzBdOworCWlmIChpYy0+Y29ubi0+Y192ZXJzaW9uID4gUkRTX1BST1RPQ09MXzNfMCkKKwkJcmV0dXJuICZzZ2VbMF07CisJZWxzZQorCQlyZXR1cm4gJnNnZVsxXTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaWJfc2dlICoKIHJkc19pYl9kYXRhX3NnZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfc2dlICpzZ2UpCiB7Ci0JcmV0dXJuICZzZ2VbMV07CisJaWYgKGljLT5jb25uLT5jX3ZlcnNpb24gPiBSRFNfUFJPVE9DT0xfM18wKQorCQlyZXR1cm4gJnNnZVsxXTsKKwllbHNlCisJCXJldHVybiAmc2dlWzBdOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfY20uYyBiL25ldC9yZHMvaWJfY20uYwppbmRleCBmOGU0MGUxLi5jMmQzNzJmIDEwMDY0NAotLS0gYS9uZXQvcmRzL2liX2NtLmMKKysrIGIvbmV0L3Jkcy9pYl9jbS5jCkBAIC05OCwyMSArOTgsMzQgQEAKIAlzdHJ1Y3QgaWJfcXBfYXR0ciBxcF9hdHRyOwogCWludCBlcnI7CiAKLQlpZiAoZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhX2xlbikgeworCWlmIChldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGFfbGVuID49IHNpemVvZigqZHApKSB7CiAJCWRwID0gZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhOwogCi0JCXJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwKKwkJLyogbWFrZSBzdXJlIGl0IGlzbid0IGVtcHR5IGRhdGEgKi8KKwkJaWYgKGRwLT5kcF9wcm90b2NvbF9tYWpvcikgeworCQkJcmRzX2liX3NldF9wcm90b2NvbChjb25uLAogCQkJCVJEU19QUk9UT0NPTChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IsCi0JCQkJCWRwLT5kcF9wcm90b2NvbF9taW5vcikpOwotCQlyZHNfaWJfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcC0+ZHBfY3JlZGl0KSk7CisJCQkJZHAtPmRwX3Byb3RvY29sX21pbm9yKSk7CisJCQlyZHNfaWJfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcC0+ZHBfY3JlZGl0KSk7CisJCX0KIAl9CiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUy9JQjogY29ubmVjdGVkIHRvICVwSTQgdmVyc2lvbiAldS4ldSVzXG4iLAotCQkJJmNvbm4tPmNfbGFkZHIsCisJCQkmY29ubi0+Y19mYWRkciwKIAkJCVJEU19QUk9UT0NPTF9NQUpPUihjb25uLT5jX3ZlcnNpb24pLAogCQkJUkRTX1BST1RPQ09MX01JTk9SKGNvbm4tPmNfdmVyc2lvbiksCiAJCQlpYy0+aV9mbG93Y3RsID8gIiwgZmxvdyBjb250cm9sIiA6ICIiKTsKIAorCS8qCisJICogSW5pdCByaW5ncyBhbmQgZmlsbCByZWN2LiB0aGlzIG5lZWRzIHRvIHdhaXQgdW50aWwgcHJvdG9jb2wgbmVnb3RpYXRpb24KKwkgKiBpcyBjb21wbGV0ZSwgc2luY2UgcmluZyBsYXlvdXQgaXMgZGlmZmVyZW50IGZyb20gMy4wIHRvIDMuMS4KKwkgKi8KKwlyZHNfaWJfc2VuZF9pbml0X3JpbmcoaWMpOworCXJkc19pYl9yZWN2X2luaXRfcmluZyhpYyk7CisJLyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgLSBhcyBhIHNpZGUgZWZmZWN0LCB0aGlzIHdpbGwgdXBkYXRlCisJICogdGhlIHBvc3RlZCBjcmVkaXQgY291bnQuICovCisJcmRzX2liX3JlY3ZfcmVmaWxsKGNvbm4sIEdGUF9LRVJORUwsIEdGUF9ISUdIVVNFUiwgMSk7CisKIAkvKiBUdW5lIFJOUiBiZWhhdmlvciAqLwogCXJkc19pYl90dW5lX3JucihpYywgJnFwX2F0dHIpOwogCkBAIC0xNDUsNyArMTU4LDcgQEAKIAkvKiBYWFggdHVuZSB0aGVzZT8gKi8KIAljb25uX3BhcmFtLT5yZXNwb25kZXJfcmVzb3VyY2VzID0gMTsKIAljb25uX3BhcmFtLT5pbml0aWF0b3JfZGVwdGggPSAxOwotCWNvbm5fcGFyYW0tPnJldHJ5X2NvdW50ID0gNzsKKwljb25uX3BhcmFtLT5yZXRyeV9jb3VudCA9IG1pbl90KHVuc2lnbmVkIGludCwgcmRzX2liX3JldHJ5X2NvdW50LCA3KTsKIAljb25uX3BhcmFtLT5ybnJfcmV0cnlfY291bnQgPSA3OwogCiAJaWYgKGRwKSB7CkBAIC0xOTAsOSArMjAzLDkgQEAKIAkJcmRtYV9ub3RpZnkoaWMtPmlfY21faWQsIElCX0VWRU5UX0NPTU1fRVNUKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL2liOiB1bmhhbmRsZWQgUVAgZXZlbnQgJXUgIgotCQkgICAgICAgIm9uIGNvbm5lY3Rpb24gdG8gJXBJNFxuIiwgZXZlbnQtPmV2ZW50LAotCQkgICAgICAgJmNvbm4tPmNfZmFkZHIpOworCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAiUkRTL0lCOiBGYXRhbCBRUCBFdmVudCAldSAiCisJCQkiLSBjb25uZWN0aW9uICVwSTQtPiVwSTQsIHJlY29ubmVjdGluZ1xuIiwKKwkJCWV2ZW50LT5ldmVudCwgJmNvbm4tPmNfbGFkZHIsICZjb25uLT5jX2ZhZGRyKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMzIxLDcgKzMzNCw3IEBACiAJCXJkc2RlYnVnKCJzZW5kIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCXJkc19pYl9zZW5kX2luaXRfcmluZyhpYyk7CisJbWVtc2V0KGljLT5pX3NlbmRzLCAwLCBpYy0+aV9zZW5kX3Jpbmcud19uciAqIHNpemVvZihzdHJ1Y3QgcmRzX2liX3NlbmRfd29yaykpOwogCiAJaWMtPmlfcmVjdnMgPSB2bWFsbG9jKGljLT5pX3JlY3ZfcmluZy53X25yICogc2l6ZW9mKHN0cnVjdCByZHNfaWJfcmVjdl93b3JrKSk7CiAJaWYgKGljLT5pX3JlY3ZzID09IE5VTEwpIHsKQEAgLTMyOSwxNCArMzQyLDEwIEBACiAJCXJkc2RlYnVnKCJyZWN2IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQorCW1lbXNldChpYy0+aV9yZWN2cywgMCwgaWMtPmlfcmVjdl9yaW5nLndfbnIgKiBzaXplb2Yoc3RydWN0IHJkc19pYl9yZWN2X3dvcmspKTsKIAotCXJkc19pYl9yZWN2X2luaXRfcmluZyhpYyk7CiAJcmRzX2liX3JlY3ZfaW5pdF9hY2soaWMpOwogCi0JLyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgLSBhcyBhIHNpZGUgZWZmZWN0LCB0aGlzIHdpbGwgdXBkYXRlCi0JICogdGhlIHBvc3RlZCBjcmVkaXQgY291bnQuICovCi0JcmRzX2liX3JlY3ZfcmVmaWxsKGNvbm4sIEdGUF9LRVJORUwsIEdGUF9ISUdIVVNFUiwgMSk7Ci0KIAlyZHNkZWJ1ZygiY29ubiAlcCBwZCAlcCBtciAlcCBjcSAlcCAlcFxuIiwgY29ubiwgaWMtPmlfcGQsIGljLT5pX21yLAogCQkgaWMtPmlfc2VuZF9jcSwgaWMtPmlfcmVjdl9jcSk7CiAKQEAgLTM0NCwxOSArMzUzLDMyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHUzMiByZHNfaWJfcHJvdG9jb2xfY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSAqZHApCitzdGF0aWMgdTMyIHJkc19pYl9wcm90b2NvbF9jb21wYXRpYmxlKHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCkKIHsKKwljb25zdCBzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSAqZHAgPSBldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGE7CiAJdTE2IGNvbW1vbjsKIAl1MzIgdmVyc2lvbiA9IDA7CiAKLQkvKiByZG1hX2NtIHByaXZhdGUgZGF0YSBpcyBvZGQgLSB3aGVuIHRoZXJlIGlzIGFueSBwcml2YXRlIGRhdGEgaW4gdGhlCisJLyoKKwkgKiByZG1hX2NtIHByaXZhdGUgZGF0YSBpcyBvZGQgLSB3aGVuIHRoZXJlIGlzIGFueSBwcml2YXRlIGRhdGEgaW4gdGhlCiAJICogcmVxdWVzdCwgd2Ugd2lsbCBiZSBnaXZlbiBhIHByZXR0eSBsYXJnZSBidWZmZXIgd2l0aG91dCB0ZWxsaW5nIHVzIHRoZQogCSAqIG9yaWdpbmFsIHNpemUuIFRoZSBvbmx5IHdheSB0byB0ZWxsIHRoZSBkaWZmZXJlbmNlIGlzIGJ5IGxvb2tpbmcgYXQKIAkgKiB0aGUgY29udGVudHMsIHdoaWNoIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvLgogCSAqIElmIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGZpZWxkcyBhcmVuJ3Qgc2V0LCB0aGlzIGlzIGEgY29ubmVjdGlvbiBhdHRlbXB0CiAJICogZnJvbSBhbiBvbGRlciB2ZXJzaW9uLiBUaGlzIGNvdWxkIGNvdWxkIGJlIDMuMCBvciAyLjAgLSB3ZSBjYW4ndCB0ZWxsLgotCSAqIFdlIHJlYWxseSBzaG91bGQgaGF2ZSBjaGFuZ2VkIHRoaXMgZm9yIE9GRUQgMS4zIDotKCAqLwotCWlmIChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IgPT0gMCkKKwkgKiBXZSByZWFsbHkgc2hvdWxkIGhhdmUgY2hhbmdlZCB0aGlzIGZvciBPRkVEIDEuMyA6LSgKKwkgKi8KKworCS8qIEJlIHBhcmFub2lkLiBSRFMgYWx3YXlzIGhhcyBwcml2ZGF0YSAqLworCWlmICghZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhX2xlbikgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUyBpbmNvbWluZyBjb25uZWN0aW9uIGhhcyBubyBwcml2YXRlIGRhdGEsICIKKwkJCSJyZWplY3RpbmdcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBFdmVuIGlmIGxlbiBpcyBjcmFwICpub3cqIEkgc3RpbGwgd2FudCB0byBjaGVjayBpdC4gLUFTRyAqLworCWlmIChldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGFfbGVuIDwgc2l6ZW9mICgqZHApCisJICAgIHx8IGRwLT5kcF9wcm90b2NvbF9tYWpvciA9PSAwKQogCQlyZXR1cm4gUkRTX1BST1RPQ09MXzNfMDsKIAogCWNvbW1vbiA9IGJlMTZfdG9fY3B1KGRwLT5kcF9wcm90b2NvbF9taW5vcl9tYXNrKSAmIFJEU19JQl9TVVBQT1JURURfUFJPVE9DT0xTOwpAQCAtMzg4LDcgKzQxMCw3IEBACiAJaW50IGVyciwgZGVzdHJveSA9IDE7CiAKIAkvKiBDaGVjayB3aGV0aGVyIHRoZSByZW1vdGUgcHJvdG9jb2wgdmVyc2lvbiBtYXRjaGVzIG91cnMuICovCi0JdmVyc2lvbiA9IHJkc19pYl9wcm90b2NvbF9jb21wYXRpYmxlKGRwKTsKKwl2ZXJzaW9uID0gcmRzX2liX3Byb3RvY29sX2NvbXBhdGlibGUoZXZlbnQpOwogCWlmICghdmVyc2lvbikKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmRtYS5jIGIvbmV0L3Jkcy9pYl9yZG1hLmMKaW5kZXggODEwMzNhZi4uZWYzYWI1YiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9yZG1hLmMKKysrIGIvbmV0L3Jkcy9pYl9yZG1hLmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogCiAJcG9vbC0+Zm1yX2F0dHIubWF4X3BhZ2VzID0gZm1yX21lc3NhZ2Vfc2l6ZTsKIAlwb29sLT5mbXJfYXR0ci5tYXhfbWFwcyA9IHJkc19pYmRldi0+Zm1yX21heF9yZW1hcHM7Ci0JcG9vbC0+Zm1yX2F0dHIucGFnZV9zaGlmdCA9IHJkc19pYmRldi0+Zm1yX3BhZ2Vfc2hpZnQ7CisJcG9vbC0+Zm1yX2F0dHIucGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7CiAJcG9vbC0+bWF4X2ZyZWVfcGlubmVkID0gcmRzX2liZGV2LT5tYXhfZm1ycyAqIGZtcl9tZXNzYWdlX3NpemUgLyA0OwogCiAJLyogV2UgbmV2ZXIgYWxsb3cgbW9yZSB0aGFuIG1heF9pdGVtcyBNUnMgdG8gYmUgYWxsb2NhdGVkLgpAQCAtMzQ5LDEzICszNDksMTMgQEAKIAkJdW5zaWduZWQgaW50IGRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGRldiwgJnNjYXRbaV0pOwogCQl1NjQgZG1hX2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzY2F0W2ldKTsKIAotCQlpZiAoZG1hX2FkZHIgJiB+cmRzX2liZGV2LT5mbXJfcGFnZV9tYXNrKSB7CisJCWlmIChkbWFfYWRkciAmIH5QQUdFX01BU0spIHsKIAkJCWlmIChpID4gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWVsc2UKIAkJCQkrK3BhZ2VfY250OwogCQl9Ci0JCWlmICgoZG1hX2FkZHIgKyBkbWFfbGVuKSAmIH5yZHNfaWJkZXYtPmZtcl9wYWdlX21hc2spIHsKKwkJaWYgKChkbWFfYWRkciArIGRtYV9sZW4pICYgflBBR0VfTUFTSykgewogCQkJaWYgKGkgPCBzZ19kbWFfbGVuIC0gMSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWVsc2UKQEAgLTM2NSw3ICszNjUsNyBAQAogCQlsZW4gKz0gZG1hX2xlbjsKIAl9CiAKLQlwYWdlX2NudCArPSBsZW4gPj4gcmRzX2liZGV2LT5mbXJfcGFnZV9zaGlmdDsKKwlwYWdlX2NudCArPSBsZW4gPj4gUEFHRV9TSElGVDsKIAlpZiAocGFnZV9jbnQgPiBmbXJfbWVzc2FnZV9zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMzc4LDkgKzM3OCw5IEBACiAJCXVuc2lnbmVkIGludCBkbWFfbGVuID0gaWJfc2dfZG1hX2xlbihkZXYsICZzY2F0W2ldKTsKIAkJdTY0IGRtYV9hZGRyID0gaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2NhdFtpXSk7CiAKLQkJZm9yIChqID0gMDsgaiA8IGRtYV9sZW47IGogKz0gcmRzX2liZGV2LT5mbXJfcGFnZV9zaXplKQorCQlmb3IgKGogPSAwOyBqIDwgZG1hX2xlbjsgaiArPSBQQUdFX1NJWkUpCiAJCQlkbWFfcGFnZXNbcGFnZV9jbnQrK10gPQotCQkJCShkbWFfYWRkciAmIHJkc19pYmRldi0+Zm1yX3BhZ2VfbWFzaykgKyBqOworCQkJCShkbWFfYWRkciAmIFBBR0VfTUFTSykgKyBqOwogCX0KIAogCXJldCA9IGliX21hcF9waHlzX2ZtcihpYm1yLT5mbXIsCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3JlY3YuYyBiL25ldC9yZHMvaWJfcmVjdi5jCmluZGV4IDU3MDliYWQuLmNkN2E2Y2YgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWJfcmVjdi5jCisrKyBiL25ldC9yZHMvaWJfcmVjdi5jCkBAIC01NTUsNiArNTU1LDQ3IEBACiAJcmV0dXJuIHJkc19pYl9nZXRfYWNrKGljKTsKIH0KIAorc3RhdGljIHN0cnVjdCByZHNfaGVhZGVyICpyZHNfaWJfZ2V0X2hlYWRlcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJCSAgICBzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdiwKKwkJCQkJICAgIHUzMiBkYXRhX2xlbikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwl2b2lkICpoZHJfYnVmZiA9ICZpYy0+aV9yZWN2X2hkcnNbcmVjdiAtIGljLT5pX3JlY3ZzXTsKKwl2b2lkICphZGRyOworCXUzMiBtaXNwbGFjZWRfaGRyX2J5dGVzOworCisJLyoKKwkgKiBTdXBwb3J0IGhlYWRlciBhdCB0aGUgZnJvbnQgKFJEUyAzLjErKSBhcyB3ZWxsIGFzIGhlYWRlci1hdC1lbmQuCisJICoKKwkgKiBDYXNlczoKKwkgKiAxKSBoZWFkZXIgYWxsIGluIGhlYWRlciBidWZmIChncmVhdCEpCisJICogMikgaGVhZGVyIGFsbCBpbiBkYXRhIHBhZ2UgKGNvcHkgYWxsIHRvIGhlYWRlciBidWZmKQorCSAqIDMpIGhlYWRlciBzcGxpdCBhY3Jvc3MgaGRyIGJ1ZiArIGRhdGEgcGFnZQorCSAqICAgIChtb3ZlIGJpdCBpbiBoZHIgYnVmZiB0byBlbmQgYmVmb3JlIGNvcHlpbmcgb3RoZXIgYml0IGZyb20gZGF0YSBwYWdlKQorCSAqLworCWlmIChjb25uLT5jX3ZlcnNpb24gPiBSRFNfUFJPVE9DT0xfM18wIHx8IGRhdGFfbGVuID09IFJEU19GUkFHX1NJWkUpCisJICAgICAgICByZXR1cm4gaGRyX2J1ZmY7CisKKwlpZiAoZGF0YV9sZW4gPD0gKFJEU19GUkFHX1NJWkUgLSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKSkgeworCQlhZGRyID0ga21hcF9hdG9taWMocmVjdi0+cl9mcmFnLT5mX3BhZ2UsIEtNX1NPRlRJUlEwKTsKKwkJbWVtY3B5KGhkcl9idWZmLAorCQkgICAgICAgYWRkciArIHJlY3YtPnJfZnJhZy0+Zl9vZmZzZXQgKyBkYXRhX2xlbiwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCQlrdW5tYXBfYXRvbWljKGFkZHIsIEtNX1NPRlRJUlEwKTsKKwkJcmV0dXJuIGhkcl9idWZmOworCX0KKworCW1pc3BsYWNlZF9oZHJfYnl0ZXMgPSAoc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSAtIChSRFNfRlJBR19TSVpFIC0gZGF0YV9sZW4pKTsKKworCW1lbW1vdmUoaGRyX2J1ZmYgKyBtaXNwbGFjZWRfaGRyX2J5dGVzLCBoZHJfYnVmZiwgbWlzcGxhY2VkX2hkcl9ieXRlcyk7CisKKwlhZGRyID0ga21hcF9hdG9taWMocmVjdi0+cl9mcmFnLT5mX3BhZ2UsIEtNX1NPRlRJUlEwKTsKKwltZW1jcHkoaGRyX2J1ZmYsIGFkZHIgKyByZWN2LT5yX2ZyYWctPmZfb2Zmc2V0ICsgZGF0YV9sZW4sCisJICAgICAgIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgLSBtaXNwbGFjZWRfaGRyX2J5dGVzKTsKKwlrdW5tYXBfYXRvbWljKGFkZHIsIEtNX1NPRlRJUlEwKTsKKwlyZXR1cm4gaGRyX2J1ZmY7Cit9CisKIC8qCiAgKiBJdCdzIGtpbmQgb2YgbGFtZSB0aGF0IHdlJ3JlIGNvcHlpbmcgZnJvbSB0aGUgcG9zdGVkIHJlY2VpdmUgcGFnZXMgaW50bwogICogbG9uZy1saXZlZCBiaXRtYXBzLiAgV2UgY291bGQgaGF2ZSBwb3N0ZWQgdGhlIGJpdG1hcHMgYW5kIHJkbWEgd3JpdHRlbiBpbnRvCkBAIC02NDUsNyArNjg2LDcgQEAKIH07CiAKIHN0YXRpYyB2b2lkIHJkc19pYl9wcm9jZXNzX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAotCQkJCXN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2LCB1MzIgYnl0ZV9sZW4sCisJCQkJc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3YsIHUzMiBkYXRhX2xlbiwKIAkJCQlzdHJ1Y3QgcmRzX2liX2Fja19zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CkBAIC02NTUsOSArNjk2LDkgQEAKIAkvKiBYWFggc2h1dCBkb3duIHRoZSBjb25uZWN0aW9uIGlmIHBvcnQgMCwwIGFyZSBzZWVuPyAqLwogCiAJcmRzZGVidWcoImljICVwIGliaW5jICVwIHJlY3YgJXAgYnl0ZSBsZW4gJXVcbiIsIGljLCBpYmluYywgcmVjdiwKLQkJIGJ5dGVfbGVuKTsKKwkJIGRhdGFfbGVuKTsKIAotCWlmIChieXRlX2xlbiA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpIHsKKwlpZiAoZGF0YV9sZW4gPCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKSB7CiAJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJpbmNvbWluZyBtZXNzYWdlICIKIAkJICAgICAgICJmcm9tICVwSTQgZGlkbid0IGluY2x1ZSBhICIKIAkJICAgICAgICJoZWFkZXIsIGRpc2Nvbm5lY3RpbmcgYW5kICIKQEAgLTY2NSw5ICs3MDYsOSBAQAogCQkgICAgICAgJmNvbm4tPmNfZmFkZHIpOwogCQlyZXR1cm47CiAJfQotCWJ5dGVfbGVuIC09IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJZGF0YV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKIAotCWloZHIgPSAmaWMtPmlfcmVjdl9oZHJzW3JlY3YgLSBpYy0+aV9yZWN2c107CisJaWhkciA9IHJkc19pYl9nZXRfaGVhZGVyKGNvbm4sIHJlY3YsIGRhdGFfbGVuKTsKIAogCS8qIFZhbGlkYXRlIHRoZSBjaGVja3N1bS4gKi8KIAlpZiAoIXJkc19tZXNzYWdlX3ZlcmlmeV9jaGVja3N1bShpaGRyKSkgewpAQCAtNjg3LDcgKzcyOCw3IEBACiAJaWYgKGloZHItPmhfY3JlZGl0KQogCQlyZHNfaWJfc2VuZF9hZGRfY3JlZGl0cyhjb25uLCBpaGRyLT5oX2NyZWRpdCk7CiAKLQlpZiAoaWhkci0+aF9zcG9ydCA9PSAwICYmIGloZHItPmhfZHBvcnQgPT0gMCAmJiBieXRlX2xlbiA9PSAwKSB7CisJaWYgKGloZHItPmhfc3BvcnQgPT0gMCAmJiBpaGRyLT5oX2Rwb3J0ID09IDAgJiYgZGF0YV9sZW4gPT0gMCkgewogCQkvKiBUaGlzIGlzIGFuIEFDSy1vbmx5IHBhY2tldC4gVGhlIGZhY3QgdGhhdCBpdCBnZXRzCiAJCSAqIHNwZWNpYWwgdHJlYXRtZW50IGhlcmUgaXMgdGhhdCBoaXN0b3JpY2FsbHksIEFDS3MKIAkJICogd2VyZSByYXRoZXIgc3BlY2lhbCBiZWFzdHMuCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3N0YXRzLmMgYi9uZXQvcmRzL2liX3N0YXRzLmMKaW5kZXggMDJlM2UzZC4uZDJjOTA0ZCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9zdGF0cy5jCisrKyBiL25ldC9yZHMvaWJfc3RhdHMuYwpAQCAtMzcsOSArMzcsOSBAQAogI2luY2x1ZGUgInJkcy5oIgogI2luY2x1ZGUgImliLmgiCiAKLURFRklORV9QRVJfQ1BVKHN0cnVjdCByZHNfaWJfc3RhdGlzdGljcywgcmRzX2liX3N0YXRzKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CitERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgcmRzX2liX3N0YXRpc3RpY3MsIHJkc19pYl9zdGF0cyk7CiAKLXN0YXRpYyBjaGFyICpyZHNfaWJfc3RhdF9uYW1lc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHJkc19pYl9zdGF0X25hbWVzW10gPSB7CiAJImliX2Nvbm5lY3RfcmFjZWQiLAogCSJpYl9saXN0ZW5fY2xvc2VkX3N0YWxlIiwKIAkiaWJfdHhfY3FfY2FsbCIsCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3N5c2N0bC5jIGIvbmV0L3Jkcy9pYl9zeXNjdGwuYwppbmRleCBkODc4MzBkLi44NGI1ZmZjYiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9zeXNjdGwuYworKysgYi9uZXQvcmRzL2liX3N5c2N0bC5jCkBAIC01Myw3ICs1MywxNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWluID0gMTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21heCA9IH4wVUw7CiAKLXVuc2lnbmVkIGludCByZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbCA9IDE7CisvKgorICogVGhpcyBzeXNjdGwgZG9lcyBub3RoaW5nLgorICoKKyAqIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggUkRTIDMuMCB3aXJlIHByb3RvY29sCisgKiBkaXNhYmxlcyBpbml0aWFsIEZDIGNyZWRpdCBleGNoYW5nZS4KKyAqIElmIGl0J3MgZXZlciBwb3NzaWJsZSB0byBkcm9wIDMuMCBzdXBwb3J0LAorICogc2V0dGluZyB0aGlzIHRvIDEgYW5kIG1vdmluZyBpbml0L3JlZmlsbCBvZiBzZW5kL3JlY3YKKyAqIHJpbmdzIGZyb20gaWJfY21fY29ubmVjdF9jb21wbGV0ZSgpIGJhY2sgaW50byBpYl9zZXR1cF9xcCgpCisgKiB3aWxsIGNhdXNlIGNyZWRpdHMgdG8gYmUgYWRkZWQgYmVmb3JlIHByb3RvY29sIG5lZ290aWF0aW9uLgorICovCit1bnNpZ25lZCBpbnQgcmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2wgPSAwOwogCiBjdGxfdGFibGUgcmRzX2liX3N5c2N0bF90YWJsZVtdID0gewogCXsKZGlmZiAtLWdpdCBhL25ldC9yZHMvaW5mby5jIGIvbmV0L3Jkcy9pbmZvLmMKaW5kZXggNjJhZWVmMy4uODE0YTkxYSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pbmZvLmMKKysrIGIvbmV0L3Jkcy9pbmZvLmMKQEAgLTc5LDYgKzc5LDcgQEAKIAlyZHNfaW5mb19mdW5jc1tvZmZzZXRdID0gZnVuYzsKIAlzcGluX3VubG9jaygmcmRzX2luZm9fbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKTsKIAogdm9pZCByZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoaW50IG9wdG5hbWUsIHJkc19pbmZvX2Z1bmMgZnVuYykKIHsKQEAgLTkxLDYgKzkyLDcgQEAKIAlyZHNfaW5mb19mdW5jc1tvZmZzZXRdID0gTlVMTDsKIAlzcGluX3VubG9jaygmcmRzX2luZm9fbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMpOwogCiAvKgogICogVHlwaWNhbGx5IHdlIGhvbGQgYW4gYXRvbWljIGttYXAgYWNyb3NzIG11bHRpcGxlIHJkc19pbmZvX2NvcHkoKSBjYWxscwpAQCAtMTM3LDYgKzEzOSw3IEBACiAJCX0KIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfaW5mb19jb3B5KTsKIAogLyoKICAqIEBvcHR2YWwgcG9pbnRzIHRvIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIHRoYXQgdGhlIGluZm9ybWF0aW9uIHNuYXBzaG90CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3LmMgYi9uZXQvcmRzL2l3LmMKaW5kZXggZDE2ZTFjYi4uZGIyMjRmNyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pdy5jCisrKyBiL25ldC9yZHMvaXcuYwpAQCAtODMsMjMgKzgzLDE2IEBACiAJcmRzX2l3ZGV2LT5tYXhfd3JzID0gZGV2X2F0dHItPm1heF9xcF93cjsKIAlyZHNfaXdkZXYtPm1heF9zZ2UgPSBtaW4oZGV2X2F0dHItPm1heF9zZ2UsIFJEU19JV19NQVhfU0dFKTsKIAotCXJkc19pd2Rldi0+cGFnZV9zaGlmdCA9IG1heChQQUdFX1NISUZULCBmZnMoZGV2X2F0dHItPnBhZ2Vfc2l6ZV9jYXApIC0gMSk7Ci0KIAlyZHNfaXdkZXYtPmRldiA9IGRldmljZTsKIAlyZHNfaXdkZXYtPnBkID0gaWJfYWxsb2NfcGQoZGV2aWNlKTsKIAlpZiAoSVNfRVJSKHJkc19pd2Rldi0+cGQpKQogCQlnb3RvIGZyZWVfZGV2OwogCiAJaWYgKCFyZHNfaXdkZXYtPmRtYV9sb2NhbF9sa2V5KSB7Ci0JCWlmIChkZXZpY2UtPm5vZGVfdHlwZSAhPSBSRE1BX05PREVfUk5JQykgewotCQkJcmRzX2l3ZGV2LT5tciA9IGliX2dldF9kbWFfbXIocmRzX2l3ZGV2LT5wZCwKLQkJCQkJCUlCX0FDQ0VTU19MT0NBTF9XUklURSk7Ci0JCX0gZWxzZSB7Ci0JCQlyZHNfaXdkZXYtPm1yID0gaWJfZ2V0X2RtYV9tcihyZHNfaXdkZXYtPnBkLAotCQkJCQkJSUJfQUNDRVNTX1JFTU9URV9SRUFEIHwKLQkJCQkJCUlCX0FDQ0VTU19SRU1PVEVfV1JJVEUgfAotCQkJCQkJSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKTsKLQkJfQorCQlyZHNfaXdkZXYtPm1yID0gaWJfZ2V0X2RtYV9tcihyZHNfaXdkZXYtPnBkLAorCQkJCQlJQl9BQ0NFU1NfUkVNT1RFX1JFQUQgfAorCQkJCQlJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFIHwKKwkJCQkJSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKTsKIAkJaWYgKElTX0VSUihyZHNfaXdkZXYtPm1yKSkKIAkJCWdvdG8gZXJyX3BkOwogCX0gZWxzZQpAQCAtMjkxLDYgKzI4NCw3IEBACiAJLmZsdXNoX21ycwkJPSByZHNfaXdfZmx1c2hfbXJzLAogCS50X293bmVyCQk9IFRISVNfTU9EVUxFLAogCS50X25hbWUJCQk9ICJpd2FycCIsCisJLnRfdHlwZQkJCT0gUkRTX1RSQU5TX0lXQVJQLAogCS50X3ByZWZlcl9sb29wYmFjawk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3LmggYi9uZXQvcmRzL2l3LmgKaW5kZXggMDcxNWRkZS4uZGQ3MmI2MiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pdy5oCisrKyBiL25ldC9yZHMvaXcuaApAQCAtMTgxLDcgKzE4MSw2IEBACiAJc3RydWN0IGliX3BkCQkqcGQ7CiAJc3RydWN0IGliX21yCQkqbXI7CiAJc3RydWN0IHJkc19pd19tcl9wb29sCSptcl9wb29sOwotCWludAkJCXBhZ2Vfc2hpZnQ7CiAJaW50CQkJbWF4X3NnZTsKIAl1bnNpZ25lZCBpbnQJCW1heF93cnM7CiAJdW5zaWduZWQgaW50CQlkbWFfbG9jYWxfbGtleToxOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19yZG1hLmMgYi9uZXQvcmRzL2l3X3JkbWEuYwppbmRleCBkY2RiMzdkLi5kZTRhMWIxIDEwMDY0NAotLS0gYS9uZXQvcmRzL2l3X3JkbWEuYworKysgYi9uZXQvcmRzL2l3X3JkbWEuYwpAQCAtMjYzLDE4ICsyNjMsMTIgQEAKIH0KIAogc3RhdGljIHU2NCAqcmRzX2l3X21hcF9zY2F0dGVybGlzdChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LAotCQkJc3RydWN0IHJkc19pd19zY2F0dGVybGlzdCAqc2csCi0JCQl1bnNpZ25lZCBpbnQgZG1hX3BhZ2Vfc2hpZnQpCisJCQlzdHJ1Y3QgcmRzX2l3X3NjYXR0ZXJsaXN0ICpzZykKIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSByZHNfaXdkZXYtPmRldjsKIAl1NjQgKmRtYV9wYWdlcyA9IE5VTEw7Ci0JdTY0IGRtYV9tYXNrOwotCXVuc2lnbmVkIGludCBkbWFfcGFnZV9zaXplOwogCWludCBpLCBqLCByZXQ7CiAKLQlkbWFfcGFnZV9zaXplID0gMSA8PCBkbWFfcGFnZV9zaGlmdDsKLQlkbWFfbWFzayA9IGRtYV9wYWdlX3NpemUgLSAxOwotCiAJV0FSTl9PTihzZy0+ZG1hX2xlbik7CiAKIAlzZy0+ZG1hX2xlbiA9IGliX2RtYV9tYXBfc2coZGV2LCBzZy0+bGlzdCwgc2ctPmxlbiwgRE1BX0JJRElSRUNUSU9OQUwpOwpAQCAtMjk1LDE4ICsyODksMTggQEAKIAkJc2ctPmJ5dGVzICs9IGRtYV9sZW47CiAKIAkJZW5kX2FkZHIgPSBkbWFfYWRkciArIGRtYV9sZW47Ci0JCWlmIChkbWFfYWRkciAmIGRtYV9tYXNrKSB7CisJCWlmIChkbWFfYWRkciAmIFBBR0VfTUFTSykgewogCQkJaWYgKGkgPiAwKQogCQkJCWdvdG8gb3V0X3VubWFwOwotCQkJZG1hX2FkZHIgJj0gfmRtYV9tYXNrOworCQkJZG1hX2FkZHIgJj0gflBBR0VfTUFTSzsKIAkJfQotCQlpZiAoZW5kX2FkZHIgJiBkbWFfbWFzaykgeworCQlpZiAoZW5kX2FkZHIgJiBQQUdFX01BU0spIHsKIAkJCWlmIChpIDwgc2ctPmRtYV9sZW4gLSAxKQogCQkJCWdvdG8gb3V0X3VubWFwOwotCQkJZW5kX2FkZHIgPSAoZW5kX2FkZHIgKyBkbWFfbWFzaykgJiB+ZG1hX21hc2s7CisJCQllbmRfYWRkciA9IChlbmRfYWRkciArIFBBR0VfTUFTSykgJiB+UEFHRV9NQVNLOwogCQl9CiAKLQkJc2ctPmRtYV9ucGFnZXMgKz0gKGVuZF9hZGRyIC0gZG1hX2FkZHIpID4+IGRtYV9wYWdlX3NoaWZ0OworCQlzZy0+ZG1hX25wYWdlcyArPSAoZW5kX2FkZHIgLSBkbWFfYWRkcikgPj4gUEFHRV9TSElGVDsKIAl9CiAKIAkvKiBOb3cgZ2F0aGVyIHRoZSBkbWEgYWRkcnMgaW50byBvbmUgbGlzdCAqLwpAQCAtMzI1LDggKzMxOSw4IEBACiAJCXU2NCBlbmRfYWRkcjsKIAogCQllbmRfYWRkciA9IGRtYV9hZGRyICsgZG1hX2xlbjsKLQkJZG1hX2FkZHIgJj0gfmRtYV9tYXNrOwotCQlmb3IgKDsgZG1hX2FkZHIgPCBlbmRfYWRkcjsgZG1hX2FkZHIgKz0gZG1hX3BhZ2Vfc2l6ZSkKKwkJZG1hX2FkZHIgJj0gflBBR0VfTUFTSzsKKwkJZm9yICg7IGRtYV9hZGRyIDwgZW5kX2FkZHI7IGRtYV9hZGRyICs9IFBBR0VfU0laRSkKIAkJCWRtYV9wYWdlc1tqKytdID0gZG1hX2FkZHI7CiAJCUJVR19PTihqID4gc2ctPmRtYV9ucGFnZXMpOwogCX0KQEAgLTcyNyw3ICs3MjEsNyBAQAogCWZfd3Iud3IuZmFzdF9yZWcucmtleSA9IG1hcHBpbmctPm1fcmtleTsKIAlmX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdCA9IGlibXItPnBhZ2VfbGlzdDsKIAlmX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW4gPSBtYXBwaW5nLT5tX3NnLmRtYV9sZW47Ci0JZl93ci53ci5mYXN0X3JlZy5wYWdlX3NoaWZ0ID0gaWJtci0+ZGV2aWNlLT5wYWdlX3NoaWZ0OworCWZfd3Iud3IuZmFzdF9yZWcucGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7CiAJZl93ci53ci5mYXN0X3JlZy5hY2Nlc3NfZmxhZ3MgPSBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUgfAogCQkJCUlCX0FDQ0VTU19SRU1PVEVfUkVBRCB8CiAJCQkJSUJfQUNDRVNTX1JFTU9URV9XUklURTsKQEAgLTc4MCw5ICs3NzQsNyBAQAogCiAJcmRzX2l3X3NldF9zY2F0dGVybGlzdCgmbWFwcGluZy0+bV9zZywgc2csIHNnX2xlbik7CiAKLQlkbWFfcGFnZXMgPSByZHNfaXdfbWFwX3NjYXR0ZXJsaXN0KHJkc19pd2RldiwKLQkJCQkmbWFwcGluZy0+bV9zZywKLQkJCQlyZHNfaXdkZXYtPnBhZ2Vfc2hpZnQpOworCWRtYV9wYWdlcyA9IHJkc19pd19tYXBfc2NhdHRlcmxpc3QocmRzX2l3ZGV2LCAmbWFwcGluZy0+bV9zZyk7CiAJaWYgKElTX0VSUihkbWFfcGFnZXMpKSB7CiAJCXJldCA9IFBUUl9FUlIoZG1hX3BhZ2VzKTsKIAkJZG1hX3BhZ2VzID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfc2VuZC5jIGIvbmV0L3Jkcy9pd19zZW5kLmMKaW5kZXggNDRhNmEwNS4uMWY1YWJlMyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pd19zZW5kLmMKKysrIGIvbmV0L3Jkcy9pd19zZW5kLmMKQEAgLTc3OSw3ICs3NzksNyBAQAogCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcucmtleSA9IHNlbmQtPnNfbXItPnJrZXk7CiAJc2VuZC0+c193ci53ci5mYXN0X3JlZy5wYWdlX2xpc3QgPSBzZW5kLT5zX3BhZ2VfbGlzdDsKIAlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW4gPSBuZW50OwotCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcucGFnZV9zaGlmdCA9IHJkc19pd2Rldi0+cGFnZV9zaGlmdDsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLnBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUOwogCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcuYWNjZXNzX2ZsYWdzID0gSUJfQUNDRVNTX1JFTU9URV9XUklURTsKIAlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLmlvdmFfc3RhcnQgPSBzZ19hZGRyOwogCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3N0YXRzLmMgYi9uZXQvcmRzL2l3X3N0YXRzLmMKaW5kZXggY2NjN2U4Zi4uNWZlNjdmNiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pd19zdGF0cy5jCisrKyBiL25ldC9yZHMvaXdfc3RhdHMuYwpAQCAtMzcsOSArMzcsOSBAQAogI2luY2x1ZGUgInJkcy5oIgogI2luY2x1ZGUgIml3LmgiCiAKLURFRklORV9QRVJfQ1BVKHN0cnVjdCByZHNfaXdfc3RhdGlzdGljcywgcmRzX2l3X3N0YXRzKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CitERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgcmRzX2l3X3N0YXRpc3RpY3MsIHJkc19pd19zdGF0cyk7CiAKLXN0YXRpYyBjaGFyICpyZHNfaXdfc3RhdF9uYW1lc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHJkc19pd19zdGF0X25hbWVzW10gPSB7CiAJIml3X2Nvbm5lY3RfcmFjZWQiLAogCSJpd19saXN0ZW5fY2xvc2VkX3N0YWxlIiwKIAkiaXdfdHhfY3FfY2FsbCIsCmRpZmYgLS1naXQgYS9uZXQvcmRzL21lc3NhZ2UuYyBiL25ldC9yZHMvbWVzc2FnZS5jCmluZGV4IDVhMTVkYzguLmNhNTBhOGUgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvbWVzc2FnZS5jCisrKyBiL25ldC9yZHMvbWVzc2FnZS5jCkBAIC01MCw2ICs1MCw3IEBACiAJcmRzZGVidWcoImFkZHJlZiBybSAlcCByZWYgJWRcbiIsIHJtLCBhdG9taWNfcmVhZCgmcm0tPm1fcmVmY291bnQpKTsKIAlhdG9taWNfaW5jKCZybS0+bV9yZWZjb3VudCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfbWVzc2FnZV9hZGRyZWYpOwogCiAvKgogICogVGhpcyByZWxpZXMgb24gZG1hX21hcF9zZygpIG5vdCB0b3VjaGluZyBzZ1tdLnBhZ2UgZHVyaW5nIG1lcmdpbmcuCkBAIC05Miw2ICs5Myw3IEBACiAJCWtmcmVlKHJtKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfbWVzc2FnZV9wdXQpOwogCiB2b2lkIHJkc19tZXNzYWdlX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKIHsKQEAgLTEwOCw2ICsxMTAsNyBAQAogCWhkci0+aF9zZXF1ZW5jZSA9IGNwdV90b19iZTY0KHNlcSk7CiAJaGRyLT5oX2V4dGhkclswXSA9IFJEU19FWFRIRFJfTk9ORTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcik7CiAKIGludCByZHNfbWVzc2FnZV9hZGRfZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsCiAJCXVuc2lnbmVkIGludCB0eXBlLCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQpAQCAtMTMzLDYgKzEzNiw3IEBACiAJZHN0W2xlbl0gPSBSRFNfRVhUSERSX05PTkU7CiAJcmV0dXJuIDE7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfbWVzc2FnZV9hZGRfZXh0ZW5zaW9uKTsKIAogLyoKICAqIElmIGEgbWVzc2FnZSBoYXMgZXh0ZW5zaW9uIGhlYWRlcnMsIHJldHJpZXZlIHRoZW0gaGVyZS4KQEAgLTIwOCw2ICsyMTIsNyBAQAogCWV4dF9oZHIuaF9yZG1hX29mZnNldCA9IGNwdV90b19iZTMyKG9mZnNldCk7CiAJcmV0dXJuIHJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oaGRyLCBSRFNfRVhUSERSX1JETUFfREVTVCwgJmV4dF9oZHIsIHNpemVvZihleHRfaGRyKSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfbWVzc2FnZV9hZGRfcmRtYV9kZXN0X2V4dGVuc2lvbik7CiAKIHN0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfYWxsb2ModW5zaWduZWQgaW50IG5lbnRzLCBnZnBfdCBnZnApCiB7CkBAIC0zOTksNCArNDA0LDUgQEAKIAlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcmRzX21lc3NhZ2VfZmx1c2hfd2FpdHEpKQogCQl3YWtlX3VwKCZyZHNfbWVzc2FnZV9mbHVzaF93YWl0cSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfbWVzc2FnZV91bm1hcHBlZCk7CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvcGFnZS5jIGIvbmV0L3Jkcy9wYWdlLmMKaW5kZXggYzQ2MDc0My4uMzY3OTAxMiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9wYWdlLmMKKysrIGIvbmV0L3Jkcy9wYWdlLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAl1bnNpZ25lZCBsb25nCXJfb2Zmc2V0OwogfTsKIAotREVGSU5FX1BFUl9DUFUoc3RydWN0IHJkc19wYWdlX3JlbWFpbmRlciwgcmRzX3BhZ2VfcmVtYWluZGVycykgX19fX2NhY2hlbGluZV9hbGlnbmVkOworREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IHJkc19wYWdlX3JlbWFpbmRlciwgcmRzX3BhZ2VfcmVtYWluZGVycyk7CiAKIC8qCiAgKiByZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtZXJybm8gb24gZmFpbHVyZS4KQEAgLTgxLDYgKzgxLDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX3BhZ2VfY29weV91c2VyKTsKIAogLyoKICAqIE1lc3NhZ2UgYWxsb2NhdGlvbiB1c2VzIHRoaXMgdG8gYnVpbGQgdXAgcmVnaW9ucyBvZiBhIG1lc3NhZ2UuCmRpZmYgLS1naXQgYS9uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMgYi9uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMKaW5kZXggN2QwZjkwMS4uOWVjZTkxMCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jCisrKyBiL25ldC9yZHMvcmRtYV90cmFuc3BvcnQuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBSRE1BX0NNX0VWRU5UX0RJU0NPTk5FQ1RFRDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBESVNDT05ORUNUIGV2ZW50IC0gZHJvcHBpbmcgY29ubmVjdGlvbiAiCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9SRE1BOiBESVNDT05ORUNUIGV2ZW50IC0gZHJvcHBpbmcgY29ubmVjdGlvbiAiCiAJCQkiJXBJNC0+JXBJNFxuIiwgJmNvbm4tPmNfbGFkZHIsCiAJCQkgJmNvbm4tPmNfZmFkZHIpOwogCQlyZHNfY29ubl9kcm9wKGNvbm4pOwpAQCAtMTMyLDEyICsxMzIsMTIgQEAKIAljbV9pZCA9IHJkbWFfY3JlYXRlX2lkKHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXIsIE5VTEwsIFJETUFfUFNfVENQKTsKIAlpZiAoSVNfRVJSKGNtX2lkKSkgewogCQlyZXQgPSBQVFJfRVJSKGNtX2lkKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJSRFMvSVc6IGZhaWxlZCB0byBzZXR1cCBsaXN0ZW5lciwgIgorCQlwcmludGsoS0VSTl9FUlIgIlJEUy9SRE1BOiBmYWlsZWQgdG8gc2V0dXAgbGlzdGVuZXIsICIKIAkJICAgICAgICJyZG1hX2NyZWF0ZV9pZCgpIHJldHVybmVkICVkXG4iLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlzaW4uc2luX2ZhbWlseSA9IFBGX0lORVQsCisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVULAogCXNpbi5zaW5fYWRkci5zX2FkZHIgPSAoX19mb3JjZSB1MzIpaHRvbmwoSU5BRERSX0FOWSk7CiAJc2luLnNpbl9wb3J0ID0gKF9fZm9yY2UgdTE2KWh0b25zKFJEU19QT1JUKTsKIApAQCAtMTQ3LDE0ICsxNDcsMTQgQEAKIAkgKi8KIAlyZXQgPSByZG1hX2JpbmRfYWRkcihjbV9pZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4pOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJSRFMvSVc6IGZhaWxlZCB0byBzZXR1cCBsaXN0ZW5lciwgIgorCQlwcmludGsoS0VSTl9FUlIgIlJEUy9SRE1BOiBmYWlsZWQgdG8gc2V0dXAgbGlzdGVuZXIsICIKIAkJICAgICAgICJyZG1hX2JpbmRfYWRkcigpIHJldHVybmVkICVkXG4iLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlyZXQgPSByZG1hX2xpc3RlbihjbV9pZCwgMTI4KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUkRTL0lXOiBmYWlsZWQgdG8gc2V0dXAgbGlzdGVuZXIsICIKKwkJcHJpbnRrKEtFUk5fRVJSICJSRFMvUkRNQTogZmFpbGVkIHRvIHNldHVwIGxpc3RlbmVyLCAiCiAJCSAgICAgICAicmRtYV9saXN0ZW4oKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjAzLDYgKzIwMyw3IEBACiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KK21vZHVsZV9pbml0KHJkc19yZG1hX2luaXQpOwogCiB2b2lkIHJkc19yZG1hX2V4aXQodm9pZCkKIHsKQEAgLTIxMSw0ICsyMTIsOSBAQAogCXJkc19pYl9leGl0KCk7CiAJcmRzX2l3X2V4aXQoKTsKIH0KK21vZHVsZV9leGl0KHJkc19yZG1hX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJPcmFjbGUgQ29ycG9yYXRpb24gPHJkcy1kZXZlbEBvc3Mub3JhY2xlLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUkRTOiBJQi9pV0FSUCB0cmFuc3BvcnQiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZHMuaCBiL25ldC9yZHMvcmRzLmgKaW5kZXggZGJlMTExMi4uODVkNmY4OSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9yZHMuaAorKysgYi9uZXQvcmRzL3Jkcy5oCkBAIC0zMTEsMTEgKzMxMSwxNyBAQAogICogCQkgICBmbGFnIGFuZCBoZWFkZXIuCiAgKi8KIAorI2RlZmluZSBSRFNfVFJBTlNfSUIJMAorI2RlZmluZSBSRFNfVFJBTlNfSVdBUlAJMQorI2RlZmluZSBSRFNfVFJBTlNfVENQCTIKKyNkZWZpbmUgUkRTX1RSQU5TX0NPVU5UCTMKKwogc3RydWN0IHJkc190cmFuc3BvcnQgewogCWNoYXIJCQl0X25hbWVbVFJBTlNOQU1TSVpdOwogCXN0cnVjdCBsaXN0X2hlYWQJdF9pdGVtOwogCXN0cnVjdCBtb2R1bGUJCSp0X293bmVyOwogCXVuc2lnbmVkIGludAkJdF9wcmVmZXJfbG9vcGJhY2s6MTsKKwl1bnNpZ25lZCBpbnQJCXRfdHlwZTsKIAogCWludCAoKmxhZGRyX2NoZWNrKShfX2JlMzIgYWRkcik7CiAJaW50ICgqY29ubl9hbGxvYykoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBnZnApOwpAQCAtNjUyLDcgKzY1OCw4IEBACiBpbnQgX19pbml0IHJkc19zdGF0c19pbml0KHZvaWQpOwogdm9pZCByZHNfc3RhdHNfZXhpdCh2b2lkKTsKIHZvaWQgcmRzX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCi0JCQkgdWludDY0X3QgKnZhbHVlcywgY2hhciAqKm5hbWVzLCBzaXplX3QgbnIpOworCQkJIHVpbnQ2NF90ICp2YWx1ZXMsIGNvbnN0IGNoYXIgKmNvbnN0ICpuYW1lcywKKwkJCSBzaXplX3QgbnIpOwogCiAvKiBzeXNjdGwuYyAqLwogaW50IF9faW5pdCByZHNfc3lzY3RsX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL3JlY3YuYyBiL25ldC9yZHMvcmVjdi5jCmluZGV4IGYyMTE4YzUuLmZkZmYzM2MgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvcmVjdi5jCisrKyBiL25ldC9yZHMvcmVjdi5jCkBAIC00NiwxMiArNDYsMTQgQEAKIAlpbmMtPmlfc2FkZHIgPSBzYWRkcjsKIAlpbmMtPmlfcmRtYV9jb29raWUgPSAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX2luY19pbml0KTsKIAogdm9pZCByZHNfaW5jX2FkZHJlZihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCiB7CiAJcmRzZGVidWcoImFkZHJlZiBpbmMgJXAgcmVmICVkXG4iLCBpbmMsIGF0b21pY19yZWFkKCZpbmMtPmlfcmVmY291bnQpKTsKIAlhdG9taWNfaW5jKCZpbmMtPmlfcmVmY291bnQpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX2luY19hZGRyZWYpOwogCiB2b2lkIHJkc19pbmNfcHV0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKIHsKQEAgLTYyLDYgKzY0LDcgQEAKIAkJaW5jLT5pX2Nvbm4tPmNfdHJhbnMtPmluY19mcmVlKGluYyk7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX2luY19wdXQpOwogCiBzdGF0aWMgdm9pZCByZHNfcmVjdl9yY3ZidWZfZGVsdGEoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgc3RydWN0IHJkc19jb25nX21hcCAqbWFwLApAQCAtMjM3LDYgKzI0MCw3IEBACiAJaWYgKHJzKQogCQlyZHNfc29ja19wdXQocnMpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX3JlY3ZfaW5jb21pbmcpOwogCiAvKgogICogYmUgdmVyeSBjYXJlZnVsIGhlcmUuICBUaGlzIGlzIGJlaW5nIGNhbGxlZCBhcyB0aGUgY29uZGl0aW9uIGluCkBAIC00MDksMTggKzQxMywxOCBAQAogCWlmIChtc2dfZmxhZ3MgJiBNU0dfT09CKQogCQlnb3RvIG91dDsKIAotCS8qIElmIHRoZXJlIGFyZSBwZW5kaW5nIG5vdGlmaWNhdGlvbnMsIGRvIHRob3NlIC0gYW5kIG5vdGhpbmcgZWxzZSAqLwotCWlmICghbGlzdF9lbXB0eSgmcnMtPnJzX25vdGlmeV9xdWV1ZSkpIHsKLQkJcmV0ID0gcmRzX25vdGlmeV9xdWV1ZV9nZXQocnMsIG1zZyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChycy0+cnNfY29uZ19ub3RpZnkpIHsKLQkJcmV0ID0gcmRzX25vdGlmeV9jb25nKHJzLCBtc2cpOwotCQlnb3RvIG91dDsKLQl9Ci0KIAl3aGlsZSAoMSkgeworCQkvKiBJZiB0aGVyZSBhcmUgcGVuZGluZyBub3RpZmljYXRpb25zLCBkbyB0aG9zZSAtIGFuZCBub3RoaW5nIGVsc2UgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZycy0+cnNfbm90aWZ5X3F1ZXVlKSkgeworCQkJcmV0ID0gcmRzX25vdGlmeV9xdWV1ZV9nZXQocnMsIG1zZyk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChycy0+cnNfY29uZ19ub3RpZnkpIHsKKwkJCXJldCA9IHJkc19ub3RpZnlfY29uZyhycywgbXNnKTsKKwkJCWJyZWFrOworCQl9CisKIAkJaWYgKCFyZHNfbmV4dF9pbmNvbWluZyhycywgJmluYykpIHsKIAkJCWlmIChub25ibG9jaykgewogCQkJCXJldCA9IC1FQUdBSU47CkBAIC00MjgsNyArNDMyLDkgQEAKIAkJCX0KIAogCQkJdGltZW8gPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgqc2stPnNrX3NsZWVwLAotCQkJCQkJcmRzX25leHRfaW5jb21pbmcocnMsICZpbmMpLAorCQkJCQkJKCFsaXN0X2VtcHR5KCZycy0+cnNfbm90aWZ5X3F1ZXVlKQorCQkJCQkJfHwgcnMtPnJzX2Nvbmdfbm90aWZ5CisJCQkJCQl8fCByZHNfbmV4dF9pbmNvbWluZyhycywgJmluYykpLAogCQkJCQkJdGltZW8pOwogCQkJcmRzZGVidWcoInJlY3Ztc2cgd29rZSBpbmMgJXAgdGltZW8gJWxkXG4iLCBpbmMsCiAJCQkJIHRpbWVvKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmMKaW5kZXggYTRhN2Y0Mi4uMjhjODhmZiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9zZW5kLmMKKysrIGIvbmV0L3Jkcy9zZW5kLmMKQEAgLTQzOSw2ICs0MzksNyBAQAogCQlzb2NrX3B1dChyZHNfcnNfdG9fc2socnMpKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfcmRtYV9zZW5kX2NvbXBsZXRlKTsKIAogLyoKICAqIFRoaXMgaXMgdGhlIHNhbWUgYXMgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZSBleGNlcHQgd2UKQEAgLTQ5NCw2ICs0OTUsNyBAQAogCiAJcmV0dXJuIGZvdW5kOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX3NlbmRfZ2V0X21lc3NhZ2UpOwogCiAvKgogICogVGhpcyByZW1vdmVzIG1lc3NhZ2VzIGZyb20gdGhlIHNvY2tldCdzIGxpc3QgaWYgdGhleSdyZSBvbiBpdC4gIFRoZSBsaXN0CkBAIC02MTAsNiArNjEyLDcgQEAKIAkvKiBub3cgcmVtb3ZlIHRoZSBtZXNzYWdlcyBmcm9tIHRoZSBzb2NrIGxpc3QgYXMgbmVlZGVkICovCiAJcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jaygmbGlzdCwgUkRTX1JETUFfU1VDQ0VTUyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfc2VuZF9kcm9wX2Fja2VkKTsKIAogdm9pZCByZHNfc2VuZF9kcm9wX3RvKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBzb2NrYWRkcl9pbiAqZGVzdCkKIHsKZGlmZiAtLWdpdCBhL25ldC9yZHMvc3RhdHMuYyBiL25ldC9yZHMvc3RhdHMuYwppbmRleCA2MzcxNDY4Li43NTk4ZWIwIDEwMDY0NAotLS0gYS9uZXQvcmRzL3N0YXRzLmMKKysrIGIvbmV0L3Jkcy9zdGF0cy5jCkBAIC0zNywxMCArMzcsMTEgQEAKICNpbmNsdWRlICJyZHMuaCIKIAogREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IHJkc19zdGF0aXN0aWNzLCByZHNfc3RhdHMpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTChyZHNfc3RhdHMpOwogCiAvKiA6Liwkcy91bnNpZ25lZCBsb25nXD4uKlw8c19cKC4qXCk7LyJcMSIsL2cgKi8KIAotc3RhdGljIGNoYXIgKnJkc19zdGF0X25hbWVzW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcmRzX3N0YXRfbmFtZXNbXSA9IHsKIAkiY29ubl9yZXNldCIsCiAJInJlY3ZfZHJvcF9iYWRfY2hlY2tzdW0iLAogCSJyZWN2X2Ryb3Bfb2xkX3NlcSIsCkBAIC03Nyw3ICs3OCw3IEBACiB9OwogCiB2b2lkIHJkc19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAotCQkJIHVpbnQ2NF90ICp2YWx1ZXMsIGNoYXIgKipuYW1lcywgc2l6ZV90IG5yKQorCQkJIHVpbnQ2NF90ICp2YWx1ZXMsIGNvbnN0IGNoYXIgKmNvbnN0ICpuYW1lcywgc2l6ZV90IG5yKQogewogCXN0cnVjdCByZHNfaW5mb19jb3VudGVyIGN0cjsKIAlzaXplX3QgaTsKQEAgLTkwLDYgKzkxLDcgQEAKIAkJcmRzX2luZm9fY29weShpdGVyLCAmY3RyLCBzaXplb2YoY3RyKSk7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX3N0YXRzX2luZm9fY29weSk7CiAKIC8qCiAgKiBUaGlzIGdpdmVzIGdsb2JhbCBjb3VudGVycyBhY3Jvc3MgYWxsIHRoZSB0cmFuc3BvcnRzLiAgVGhlIHN0cmluZ3MKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MTk4YWUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3RjcC5jCkBAIC0wLDAgKzEsMzIwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInRjcC5oIgorCisvKiBvbmx5IGZvciBpbmZvIGV4cG9ydGluZyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhyZHNfdGNwX3RjX2xpc3RfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHJkc190Y3BfdGNfbGlzdCk7Cit1bnNpZ25lZCBpbnQgcmRzX3RjcF90Y19jb3VudDsKKworLyogVHJhY2sgcmRzX3RjcF9jb25uZWN0aW9uIHN0cnVjdHMgc28gdGhleSBjYW4gYmUgY2xlYW5lZCB1cCAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhyZHNfdGNwX2Nvbm5fbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHJkc190Y3BfY29ubl9saXN0KTsKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfdGNwX2Nvbm5fc2xhYjsKKworI2RlZmluZSBSRFNfVENQX0RFRkFVTFRfQlVGU0laRSAoMTI4ICogMTAyNCkKKworLyogZG9pbmcgaXQgdGhpcyB3YXkgYXZvaWRzIGNhbGxpbmcgdGNwX3NrKCkgKi8KK3ZvaWQgcmRzX3RjcF9ub25hZ2xlKHN0cnVjdCBzb2NrZXQgKnNvY2spCit7CisJbW1fc2VnbWVudF90IG9sZGZzID0gZ2V0X2ZzKCk7CisJaW50IHZhbCA9IDE7CisKKwlzZXRfZnMoS0VSTkVMX0RTKTsKKwlzb2NrLT5vcHMtPnNldHNvY2tvcHQoc29jaywgU09MX1RDUCwgVENQX05PREVMQVksIChjaGFyIF9fdXNlciAqKSZ2YWwsCisJCQkgICAgICBzaXplb2YodmFsKSk7CisJc2V0X2ZzKG9sZGZzKTsKK30KKwordm9pZCByZHNfdGNwX3R1bmUoc3RydWN0IHNvY2tldCAqc29jaykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKworCXJkc190Y3Bfbm9uYWdsZShzb2NrKTsKKworCS8qCisJICogV2UncmUgdHJ5aW5nIHRvIHNhdHVyYXRlIGdpZ2FiaXQgd2l0aCB0aGUgZGVmYXVsdCwKKwkgKiBzZWUgc3ZjX3NvY2tfc2V0YnVmc2l6ZSgpLgorCSAqLworCWxvY2tfc29jayhzayk7CisJc2stPnNrX3NuZGJ1ZiA9IFJEU19UQ1BfREVGQVVMVF9CVUZTSVpFOworCXNrLT5za19yY3ZidWYgPSBSRFNfVENQX0RFRkFVTFRfQlVGU0laRTsKKwlzay0+c2tfdXNlcmxvY2tzIHw9IFNPQ0tfU05EQlVGX0xPQ0t8U09DS19SQ1ZCVUZfTE9DSzsKKwlyZWxlYXNlX3NvY2soc2spOworfQorCit1MzIgcmRzX3RjcF9zbmRfbnh0KHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjKQoreworCXJldHVybiB0Y3Bfc2sodGMtPnRfc29jay0+c2spLT5zbmRfbnh0OworfQorCit1MzIgcmRzX3RjcF9zbmRfdW5hKHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjKQoreworCXJldHVybiB0Y3Bfc2sodGMtPnRfc29jay0+c2spLT5zbmRfdW5hOworfQorCit2b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jaywKKwkJCSAgICAgICBzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YykKK3sKKwlyZHNkZWJ1ZygicmVzdG9yaW5nIHNvY2sgJXAgY2FsbGJhY2tzIGZyb20gdGMgJXBcbiIsIHNvY2ssIHRjKTsKKwl3cml0ZV9sb2NrX2JoKCZzb2NrLT5zay0+c2tfY2FsbGJhY2tfbG9jayk7CisKKwkvKiBkb25lIHVuZGVyIHRoZSBjYWxsYmFja19sb2NrIHRvIHNlcmlhbGl6ZSB3aXRoIHdyaXRlX3NwYWNlICovCisJc3Bpbl9sb2NrKCZyZHNfdGNwX3RjX2xpc3RfbG9jayk7CisJbGlzdF9kZWxfaW5pdCgmdGMtPnRfbGlzdF9pdGVtKTsKKwlyZHNfdGNwX3RjX2NvdW50LS07CisJc3Bpbl91bmxvY2soJnJkc190Y3BfdGNfbGlzdF9sb2NrKTsKKworCXRjLT50X3NvY2sgPSBOVUxMOworCisJc29jay0+c2stPnNrX3dyaXRlX3NwYWNlID0gdGMtPnRfb3JpZ193cml0ZV9zcGFjZTsKKwlzb2NrLT5zay0+c2tfZGF0YV9yZWFkeSA9IHRjLT50X29yaWdfZGF0YV9yZWFkeTsKKwlzb2NrLT5zay0+c2tfc3RhdGVfY2hhbmdlID0gdGMtPnRfb3JpZ19zdGF0ZV9jaGFuZ2U7CisJc29jay0+c2stPnNrX3VzZXJfZGF0YSA9IE5VTEw7CisKKwl3cml0ZV91bmxvY2tfYmgoJnNvY2stPnNrLT5za19jYWxsYmFja19sb2NrKTsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIG9ubHkgcGF0aCB0aGF0IHNldHMgdGMtPnRfc29jay4gIFNlbmQgYW5kIHJlY2VpdmUgdHJ1c3QgdGhhdAorICogaXQgaXMgc2V0LiAgVGhlIFJEU19DT05OX0NPTk5FQ1RFRCBiaXQgcHJvdGVjdHMgdGhvc2UgcGF0aHMgZnJvbSBiZWluZworICogY2FsbGVkIHdoaWxlIGl0IGlzbid0IHNldC4KKyAqLwordm9pZCByZHNfdGNwX3NldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCXJkc2RlYnVnKCJzZXR0aW5nIHNvY2sgJXAgY2FsbGJhY2tzIHRvIHRjICVwXG4iLCBzb2NrLCB0Yyk7CisJd3JpdGVfbG9ja19iaCgmc29jay0+c2stPnNrX2NhbGxiYWNrX2xvY2spOworCisJLyogZG9uZSB1bmRlciB0aGUgY2FsbGJhY2tfbG9jayB0byBzZXJpYWxpemUgd2l0aCB3cml0ZV9zcGFjZSAqLworCXNwaW5fbG9jaygmcmRzX3RjcF90Y19saXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnRjLT50X2xpc3RfaXRlbSwgJnJkc190Y3BfdGNfbGlzdCk7CisJcmRzX3RjcF90Y19jb3VudCsrOworCXNwaW5fdW5sb2NrKCZyZHNfdGNwX3RjX2xpc3RfbG9jayk7CisKKwkvKiBhY2NlcHRlZCBzb2NrZXRzIG5lZWQgb3VyIGxpc3RlbiBkYXRhIHJlYWR5IHVuZG9uZSAqLworCWlmIChzb2NrLT5zay0+c2tfZGF0YV9yZWFkeSA9PSByZHNfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KQorCQlzb2NrLT5zay0+c2tfZGF0YV9yZWFkeSA9IHNvY2stPnNrLT5za191c2VyX2RhdGE7CisKKwl0Yy0+dF9zb2NrID0gc29jazsKKwl0Yy0+Y29ubiA9IGNvbm47CisJdGMtPnRfb3JpZ19kYXRhX3JlYWR5ID0gc29jay0+c2stPnNrX2RhdGFfcmVhZHk7CisJdGMtPnRfb3JpZ193cml0ZV9zcGFjZSA9IHNvY2stPnNrLT5za193cml0ZV9zcGFjZTsKKwl0Yy0+dF9vcmlnX3N0YXRlX2NoYW5nZSA9IHNvY2stPnNrLT5za19zdGF0ZV9jaGFuZ2U7CisKKwlzb2NrLT5zay0+c2tfdXNlcl9kYXRhID0gY29ubjsKKwlzb2NrLT5zay0+c2tfZGF0YV9yZWFkeSA9IHJkc190Y3BfZGF0YV9yZWFkeTsKKwlzb2NrLT5zay0+c2tfd3JpdGVfc3BhY2UgPSByZHNfdGNwX3dyaXRlX3NwYWNlOworCXNvY2stPnNrLT5za19zdGF0ZV9jaGFuZ2UgPSByZHNfdGNwX3N0YXRlX2NoYW5nZTsKKworCXdyaXRlX3VubG9ja19iaCgmc29jay0+c2stPnNrX2NhbGxiYWNrX2xvY2spOworfQorCitzdGF0aWMgdm9pZCByZHNfdGNwX3RjX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgICAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJc3RydWN0IHJkc19pbmZvX3RjcF9zb2NrZXQgdHNpbmZvOworCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKwlpbnQgc2lubGVuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc190Y3BfdGNfbGlzdF9sb2NrLCBmbGFncyk7CisKKwlpZiAobGVuIC8gc2l6ZW9mKHRzaW5mbykgPCByZHNfdGNwX3RjX2NvdW50KQorCQlnb3RvIG91dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGMsICZyZHNfdGNwX3RjX2xpc3QsIHRfbGlzdF9pdGVtKSB7CisKKwkJc29jay0+b3BzLT5nZXRuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCAmc2lubGVuLCAwKTsKKwkJdHNpbmZvLmxvY2FsX2FkZHIgPSBzaW4uc2luX2FkZHIuc19hZGRyOworCQl0c2luZm8ubG9jYWxfcG9ydCA9IHNpbi5zaW5fcG9ydDsKKwkJc29jay0+b3BzLT5nZXRuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCAmc2lubGVuLCAxKTsKKwkJdHNpbmZvLnBlZXJfYWRkciA9IHNpbi5zaW5fYWRkci5zX2FkZHI7CisJCXRzaW5mby5wZWVyX3BvcnQgPSBzaW4uc2luX3BvcnQ7CisKKwkJdHNpbmZvLmhkcl9yZW0gPSB0Yy0+dF90aW5jX2hkcl9yZW07CisJCXRzaW5mby5kYXRhX3JlbSA9IHRjLT50X3RpbmNfZGF0YV9yZW07CisJCXRzaW5mby5sYXN0X3NlbnRfbnh0ID0gdGMtPnRfbGFzdF9zZW50X254dDsKKwkJdHNpbmZvLmxhc3RfZXhwZWN0ZWRfdW5hID0gdGMtPnRfbGFzdF9leHBlY3RlZF91bmE7CisJCXRzaW5mby5sYXN0X3NlZW5fdW5hID0gdGMtPnRfbGFzdF9zZWVuX3VuYTsKKworCQlyZHNfaW5mb19jb3B5KGl0ZXIsICZ0c2luZm8sIHNpemVvZih0c2luZm8pKTsKKwl9CisKK291dDoKKwlsZW5zLT5uciA9IHJkc190Y3BfdGNfY291bnQ7CisJbGVucy0+ZWFjaCA9IHNpemVvZih0c2luZm8pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX3RjcF90Y19saXN0X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCByZHNfdGNwX2xhZGRyX2NoZWNrKF9fYmUzMiBhZGRyKQoreworCWlmIChpbmV0X2FkZHJfdHlwZSgmaW5pdF9uZXQsIGFkZHIpID09IFJUTl9MT0NBTCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworfQorCitzdGF0aWMgaW50IHJkc190Y3BfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YzsKKworCXRjID0ga21lbV9jYWNoZV9hbGxvYyhyZHNfdGNwX2Nvbm5fc2xhYiwgZ2ZwKTsKKwlpZiAodGMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0Yy0+dF9zb2NrID0gTlVMTDsKKwl0Yy0+dF90aW5jID0gTlVMTDsKKwl0Yy0+dF90aW5jX2hkcl9yZW0gPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXRjLT50X3RpbmNfZGF0YV9yZW0gPSAwOworCisJY29ubi0+Y190cmFuc3BvcnRfZGF0YSA9IHRjOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX3RjcF9jb25uX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnRjLT50X3RjcF9ub2RlLCAmcmRzX3RjcF9jb25uX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX3RjcF9jb25uX2xvY2spOworCisJcmRzZGVidWcoImFsbG9jZWQgdGMgJXBcbiIsIGNvbm4tPmNfdHJhbnNwb3J0X2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZHNfdGNwX2Nvbm5fZnJlZSh2b2lkICphcmcpCit7CisJc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBhcmc7CisJcmRzZGVidWcoImZyZWVpbmcgdGMgJXBcbiIsIHRjKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX3RjcF9jb25uX3NsYWIsIHRjKTsKK30KKworc3RhdGljIHZvaWQgcmRzX3RjcF9kZXN0cm95X2Nvbm5zKHZvaWQpCit7CisJc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMsICpfdGM7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KKwlzcGluX2xvY2tfaXJxKCZyZHNfdGNwX2Nvbm5fbG9jayk7CisJbGlzdF9zcGxpY2UoJnJkc190Y3BfY29ubl9saXN0LCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyZHNfdGNwX2Nvbm5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfdGNwX2Nvbm5fbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGMsIF90YywgJnRtcF9saXN0LCB0X3RjcF9ub2RlKSB7CisJCWlmICh0Yy0+Y29ubi0+Y19wYXNzaXZlKQorCQkJcmRzX2Nvbm5fZGVzdHJveSh0Yy0+Y29ubi0+Y19wYXNzaXZlKTsKKwkJcmRzX2Nvbm5fZGVzdHJveSh0Yy0+Y29ubik7CisJfQorfQorCit2b2lkIHJkc190Y3BfZXhpdCh2b2lkKQoreworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19UQ1BfU09DS0VUUywgcmRzX3RjcF90Y19pbmZvKTsKKwlyZHNfdGNwX2xpc3Rlbl9zdG9wKCk7CisJcmRzX3RjcF9kZXN0cm95X2Nvbm5zKCk7CisJcmRzX3RyYW5zX3VucmVnaXN0ZXIoJnJkc190Y3BfdHJhbnNwb3J0KTsKKwlyZHNfdGNwX3JlY3ZfZXhpdCgpOworCWttZW1fY2FjaGVfZGVzdHJveShyZHNfdGNwX2Nvbm5fc2xhYik7Cit9Cittb2R1bGVfZXhpdChyZHNfdGNwX2V4aXQpOworCitzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfdGNwX3RyYW5zcG9ydCA9IHsKKwkubGFkZHJfY2hlY2sJCT0gcmRzX3RjcF9sYWRkcl9jaGVjaywKKwkueG1pdF9wcmVwYXJlCQk9IHJkc190Y3BfeG1pdF9wcmVwYXJlLAorCS54bWl0X2NvbXBsZXRlCQk9IHJkc190Y3BfeG1pdF9jb21wbGV0ZSwKKwkueG1pdF9jb25nX21hcAkJPSByZHNfdGNwX3htaXRfY29uZ19tYXAsCisJLnhtaXQJCQk9IHJkc190Y3BfeG1pdCwKKwkucmVjdgkJCT0gcmRzX3RjcF9yZWN2LAorCS5jb25uX2FsbG9jCQk9IHJkc190Y3BfY29ubl9hbGxvYywKKwkuY29ubl9mcmVlCQk9IHJkc190Y3BfY29ubl9mcmVlLAorCS5jb25uX2Nvbm5lY3QJCT0gcmRzX3RjcF9jb25uX2Nvbm5lY3QsCisJLmNvbm5fc2h1dGRvd24JCT0gcmRzX3RjcF9jb25uX3NodXRkb3duLAorCS5pbmNfY29weV90b191c2VyCT0gcmRzX3RjcF9pbmNfY29weV90b191c2VyLAorCS5pbmNfcHVyZ2UJCT0gcmRzX3RjcF9pbmNfcHVyZ2UsCisJLmluY19mcmVlCQk9IHJkc190Y3BfaW5jX2ZyZWUsCisJLnN0YXRzX2luZm9fY29weQk9IHJkc190Y3Bfc3RhdHNfaW5mb19jb3B5LAorCS5leGl0CQkJPSByZHNfdGNwX2V4aXQsCisJLnRfb3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnRfbmFtZQkJCT0gInRjcCIsCisJLnRfdHlwZQkJCT0gUkRTX1RSQU5TX1RDUCwKKwkudF9wcmVmZXJfbG9vcGJhY2sJPSAxLAorfTsKKworaW50IF9faW5pdCByZHNfdGNwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmRzX3RjcF9jb25uX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicmRzX3RjcF9jb25uZWN0aW9uIiwKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24pLAorCQkJCQkgICAgICAwLCAwLCBOVUxMKTsKKwlpZiAocmRzX3RjcF9jb25uX3NsYWIgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSByZHNfdGNwX3JlY3ZfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3NsYWI7CisKKwlyZXQgPSByZHNfdHJhbnNfcmVnaXN0ZXIoJnJkc190Y3BfdHJhbnNwb3J0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZWN2OworCisJcmV0ID0gcmRzX3RjcF9saXN0ZW5faW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3JlZ2lzdGVyOworCisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19UQ1BfU09DS0VUUywgcmRzX3RjcF90Y19pbmZvKTsKKworCWdvdG8gb3V0OworCitvdXRfcmVnaXN0ZXI6CisJcmRzX3RyYW5zX3VucmVnaXN0ZXIoJnJkc190Y3BfdHJhbnNwb3J0KTsKK291dF9yZWN2OgorCXJkc190Y3BfcmVjdl9leGl0KCk7CitvdXRfc2xhYjoKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX3RjcF9jb25uX3NsYWIpOworb3V0OgorCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdChyZHNfdGNwX2luaXQpOworCitNT0RVTEVfQVVUSE9SKCJPcmFjbGUgQ29ycG9yYXRpb24gPHJkcy1kZXZlbEBvc3Mub3JhY2xlLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUkRTOiBUQ1AgdHJhbnNwb3J0Iik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CisKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmggYi9uZXQvcmRzL3RjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NGZhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3RjcC5oCkBAIC0wLDAgKzEsOTMgQEAKKyNpZm5kZWYgX1JEU19UQ1BfSAorI2RlZmluZSBfUkRTX1RDUF9ICisKKyNkZWZpbmUgUkRTX1RDUF9QT1JUCTE2Mzg1CisKK3N0cnVjdCByZHNfdGNwX2luY29taW5nIHsKKwlzdHJ1Y3QgcmRzX2luY29taW5nCXRpX2luYzsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXRpX3NrYl9saXN0OworfTsKKworc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiB7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCXRfdGNwX25vZGU7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICAgKmNvbm47CisJc3RydWN0IHNvY2tldAkJKnRfc29jazsKKwl2b2lkCQkJKnRfb3JpZ193cml0ZV9zcGFjZTsKKwl2b2lkCQkJKnRfb3JpZ19kYXRhX3JlYWR5OworCXZvaWQJCQkqdF9vcmlnX3N0YXRlX2NoYW5nZTsKKworCXN0cnVjdCByZHNfdGNwX2luY29taW5nCSp0X3RpbmM7CisJc2l6ZV90CQkJdF90aW5jX2hkcl9yZW07CisJc2l6ZV90CQkJdF90aW5jX2RhdGFfcmVtOworCisJLyogWFhYIGVycm9yIHJlcG9ydD8gKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdF9jb25uX3c7CisJc3RydWN0IHdvcmtfc3RydWN0CXRfc2VuZF93OworCXN0cnVjdCB3b3JrX3N0cnVjdAl0X2Rvd25fdzsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdF9yZWN2X3c7CisKKwkvKiBmb3IgaW5mbyBleHBvcnRpbmcgb25seSAqLworCXN0cnVjdCBsaXN0X2hlYWQJdF9saXN0X2l0ZW07CisJdTMyCQkJdF9sYXN0X3NlbnRfbnh0OworCXUzMgkJCXRfbGFzdF9leHBlY3RlZF91bmE7CisJdTMyCQkJdF9sYXN0X3NlZW5fdW5hOworfTsKKworc3RydWN0IHJkc190Y3Bfc3RhdGlzdGljcyB7CisJdWludDY0X3QJc190Y3BfZGF0YV9yZWFkeV9jYWxsczsKKwl1aW50NjRfdAlzX3RjcF93cml0ZV9zcGFjZV9jYWxsczsKKwl1aW50NjRfdAlzX3RjcF9zbmRidWZfZnVsbDsKKwl1aW50NjRfdAlzX3RjcF9jb25uZWN0X3JhY2VkOworCXVpbnQ2NF90CXNfdGNwX2xpc3Rlbl9jbG9zZWRfc3RhbGU7Cit9OworCisvKiB0Y3AuYyAqLworaW50IF9faW5pdCByZHNfdGNwX2luaXQodm9pZCk7Cit2b2lkIHJkc190Y3BfZXhpdCh2b2lkKTsKK3ZvaWQgcmRzX3RjcF90dW5lKHN0cnVjdCBzb2NrZXQgKnNvY2spOwordm9pZCByZHNfdGNwX25vbmFnbGUoc3RydWN0IHNvY2tldCAqc29jayk7Cit2b2lkIHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkgICAgICAgc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMpOwordTMyIHJkc190Y3Bfc25kX254dChzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yyk7Cit1MzIgcmRzX3RjcF9zbmRfdW5hKHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjKTsKK3U2NCByZHNfdGNwX21hcF9zZXEoc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMsIHUzMiBzZXEpOworZXh0ZXJuIHN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc190Y3BfdHJhbnNwb3J0OworCisvKiB0Y3BfY29ubmVjdC5jICovCitpbnQgcmRzX3RjcF9jb25uX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX3RjcF9jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc190Y3Bfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzayk7CisKKy8qIHRjcF9saXN0ZW4uYyAqLworaW50IF9faW5pdCByZHNfdGNwX2xpc3Rlbl9pbml0KHZvaWQpOwordm9pZCByZHNfdGNwX2xpc3Rlbl9zdG9wKHZvaWQpOwordm9pZCByZHNfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgaW50IGJ5dGVzKTsKKworLyogdGNwX3JlY3YuYyAqLworaW50IF9faW5pdCByZHNfdGNwX3JlY3ZfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX3RjcF9yZWN2X2V4aXQodm9pZCk7Cit2b2lkIHJkc190Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIGludCBieXRlcyk7CitpbnQgcmRzX3RjcF9yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc190Y3BfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc190Y3BfaW5jX2ZyZWUoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKK2ludCByZHNfdGNwX2luY19jb3B5X3RvX3VzZXIoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgICAgc2l6ZV90IHNpemUpOworCisvKiB0Y3Bfc2VuZC5jICovCit2b2lkIHJkc190Y3BfeG1pdF9wcmVwYXJlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc190Y3BfeG1pdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworaW50IHJkc190Y3BfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJICAgICAgICAgdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywgdW5zaWduZWQgaW50IG9mZik7Cit2b2lkIHJkc190Y3Bfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKTsKK2ludCByZHNfdGNwX3htaXRfY29uZ19tYXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJICBzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKworLyogdGNwX3N0YXRzLmMgKi8KK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmRzX3RjcF9zdGF0aXN0aWNzLCByZHNfdGNwX3N0YXRzKTsKKyNkZWZpbmUgcmRzX3RjcF9zdGF0c19pbmMobWVtYmVyKSByZHNfc3RhdHNfaW5jX3doaWNoKHJkc190Y3Bfc3RhdHMsIG1lbWJlcikKK3Vuc2lnbmVkIGludCByZHNfdGNwX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgYXZhaWwpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwX2Nvbm5lY3QuYyBiL25ldC9yZHMvdGNwX2Nvbm5lY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTE1MjJmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy90Y3BfY29ubmVjdC5jCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInRjcC5oIgorCit2b2lkIHJkc190Y3Bfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzaykKK3sKKwl2b2lkICgqc3RhdGVfY2hhbmdlKShzdHJ1Y3Qgc29jayAqc2spOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwlzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YzsKKworCXJlYWRfbG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOworCWNvbm4gPSBzay0+c2tfdXNlcl9kYXRhOworCWlmIChjb25uID09IE5VTEwpIHsKKwkJc3RhdGVfY2hhbmdlID0gc2stPnNrX3N0YXRlX2NoYW5nZTsKKwkJZ290byBvdXQ7CisJfQorCXRjID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdGF0ZV9jaGFuZ2UgPSB0Yy0+dF9vcmlnX3N0YXRlX2NoYW5nZTsKKworCXJkc2RlYnVnKCJzb2NrICVwIHN0YXRlX2NoYW5nZSB0byAlZFxuIiwgdGMtPnRfc29jaywgc2stPnNrX3N0YXRlKTsKKworCXN3aXRjaChzay0+c2tfc3RhdGUpIHsKKwkJLyogaWdub3JlIGNvbm5lY3Rpbmcgc29ja2V0cyBhcyB0aGV5IG1ha2UgcHJvZ3Jlc3MgKi8KKwkJY2FzZSBUQ1BfU1lOX1NFTlQ6CisJCWNhc2UgVENQX1NZTl9SRUNWOgorCQkJYnJlYWs7CisJCWNhc2UgVENQX0VTVEFCTElTSEVEOgorCQkJcmRzX2Nvbm5lY3RfY29tcGxldGUoY29ubik7CisJCQlicmVhazsKKwkJY2FzZSBUQ1BfQ0xPU0U6CisJCQlyZHNfY29ubl9kcm9wKGNvbm4pOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorb3V0OgorCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CisJc3RhdGVfY2hhbmdlKHNrKTsKK30KKworaW50IHJkc190Y3BfY29ubl9jb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gTlVMTDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc3JjLCBkZXN0OworCWludCByZXQ7CisKKwlyZXQgPSBzb2NrX2NyZWF0ZShQRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1AsICZzb2NrKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZHNfdGNwX3R1bmUoc29jayk7CisKKwlzcmMuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJc3JjLnNpbl9hZGRyLnNfYWRkciA9IChfX2ZvcmNlIHUzMiljb25uLT5jX2xhZGRyOworCXNyYy5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucygwKTsKKworCXJldCA9IHNvY2stPm9wcy0+YmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJnNyYywgc2l6ZW9mKHNyYykpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoImJpbmQgZmFpbGVkIHdpdGggJWQgYXQgYWRkcmVzcyAldS4ldS4ldS4ldVxuIiwKKwkJICAgICByZXQsIE5JUFFVQUQoY29ubi0+Y19sYWRkcikpOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWRlc3Quc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWNvbm4tPmNfZmFkZHI7CisJZGVzdC5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucyhSRFNfVENQX1BPUlQpOworCisJLyoKKwkgKiBvbmNlIHdlIGNhbGwgY29ubmVjdCgpIHdlIGNhbiBzdGFydCBnZXR0aW5nIGNhbGxiYWNrcyBhbmQgdGhleQorCSAqIG93biB0aGUgc29ja2V0CisJICovCisJcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNvbm4pOworCXJldCA9IHNvY2stPm9wcy0+Y29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmRlc3QsIHNpemVvZihkZXN0KSwKKwkJCQkgT19OT05CTE9DSyk7CisJc29jayA9IE5VTEw7CisKKwlyZHNkZWJ1ZygiY29ubmVjdCB0byBhZGRyZXNzICV1LiV1LiV1LiV1IHJldHVybmVkICVkXG4iLAorCQkgTklQUVVBRChjb25uLT5jX2ZhZGRyKSwgcmV0KTsKKwlpZiAocmV0ID09IC1FSU5QUk9HUkVTUykKKwkJcmV0ID0gMDsKKworb3V0OgorCWlmIChzb2NrKQorCQlzb2NrX3JlbGVhc2Uoc29jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEJlZm9yZSBraWxsaW5nIHRoZSB0Y3Agc29ja2V0IHRoaXMgbmVlZHMgdG8gc2VyaWFsaXplIHdpdGggY2FsbGJhY2tzLiAgVGhlCisgKiBjYWxsZXIgaGFzIGFscmVhZHkgZ3JhYmJlZCB0aGUgc2VuZGluZyBzZW0gc28gd2UncmUgc2VyaWFsaXplZCB3aXRoIG90aGVyCisgKiBzZW5kZXJzLgorICoKKyAqIFRDUCBjYWxscyB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIHNvY2sgbG9jayBzbyB3ZSBob2xkIGl0IHdoaWxlIHdlIHJlc2V0IHRoZQorICogY2FsbGJhY2tzIHRvIHRob3NlIHNldCBieSBUQ1AuICBPdXIgY2FsbGJhY2tzIHdvbid0IGV4ZWN1dGUgYWdhaW4gb25jZSB3ZQorICogaG9sZCB0aGUgc29jayBsb2NrLgorICovCit2b2lkIHJkc190Y3BfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0Yy0+dF9zb2NrOworCisJcmRzZGVidWcoInNodXR0aW5nIGRvd24gY29ubiAlcCB0YyAlcCBzb2NrICVwXG4iLCBjb25uLCB0Yywgc29jayk7CisKKwlpZiAoc29jaykgeworCQlzb2NrLT5vcHMtPnNodXRkb3duKHNvY2ssIFJDVl9TSFVURE9XTiB8IFNFTkRfU0hVVERPV04pOworCQlsb2NrX3NvY2soc29jay0+c2spOworCQlyZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHNvY2ssIHRjKTsgLyogdGMtPnRjX3NvY2sgPSBOVUxMICovCisKKwkJcmVsZWFzZV9zb2NrKHNvY2stPnNrKTsKKwkJc29ja19yZWxlYXNlKHNvY2spOworCX07CisKKwlpZiAodGMtPnRfdGluYykgeworCQlyZHNfaW5jX3B1dCgmdGMtPnRfdGluYy0+dGlfaW5jKTsKKwkJdGMtPnRfdGluYyA9IE5VTEw7CisJfQorCXRjLT50X3RpbmNfaGRyX3JlbSA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJdGMtPnRfdGluY19kYXRhX3JlbSA9IDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcF9saXN0ZW4uYyBiL25ldC9yZHMvdGNwX2xpc3Rlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0Yjc0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJ0Y3AuaCIKKworLyoKKyAqIGNoZWVzeSwgYnV0IHNpbXBsZS4uCisgKi8KK3N0YXRpYyB2b2lkIHJkc190Y3BfYWNjZXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIERFQ0xBUkVfV09SSyhyZHNfdGNwX2xpc3Rlbl93b3JrLCByZHNfdGNwX2FjY2VwdF93b3JrZXIpOworc3RhdGljIHN0cnVjdCBzb2NrZXQgKnJkc190Y3BfbGlzdGVuX3NvY2s7CisKK3N0YXRpYyBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCBzb2NrZXQgKnNvY2spCit7CisJc3RydWN0IHNvY2tldCAqbmV3X3NvY2sgPSBOVUxMOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwlpbnQgcmV0OworCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7CisKKwlyZXQgPSBzb2NrX2NyZWF0ZV9saXRlKHNvY2stPnNrLT5za19mYW1pbHksIHNvY2stPnNrLT5za190eXBlLAorCQkJICAgICAgIHNvY2stPnNrLT5za19wcm90b2NvbCwgJm5ld19zb2NrKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCW5ld19zb2NrLT50eXBlID0gc29jay0+dHlwZTsKKwluZXdfc29jay0+b3BzID0gc29jay0+b3BzOworCXJldCA9IHNvY2stPm9wcy0+YWNjZXB0KHNvY2ssIG5ld19zb2NrLCBPX05PTkJMT0NLKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZHNfdGNwX3R1bmUobmV3X3NvY2spOworCisJaW5ldCA9IGluZXRfc2sobmV3X3NvY2stPnNrKTsKKworCXJkc2RlYnVnKCJhY2NlcHRlZCB0Y3AgJXUuJXUuJXUuJXU6JXUgLT4gJXUuJXUuJXUuJXU6JXVcbiIsCisJCSAgTklQUVVBRChpbmV0LT5zYWRkciksIG50b2hzKGluZXQtPnNwb3J0KSwKKwkJICBOSVBRVUFEKGluZXQtPmRhZGRyKSwgbnRvaHMoaW5ldC0+ZHBvcnQpKTsKKworCWNvbm4gPSByZHNfY29ubl9jcmVhdGUoaW5ldC0+c2FkZHIsIGluZXQtPmRhZGRyLCAmcmRzX3RjcF90cmFuc3BvcnQsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKElTX0VSUihjb25uKSkgeworCQlyZXQgPSBQVFJfRVJSKGNvbm4pOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIHNlZSB0aGUgY29tbWVudCBhYm92ZSByZHNfcXVldWVfZGVsYXllZF9yZWNvbm5lY3QoKQorCSAqLworCWlmICghcmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9ET1dOLCBSRFNfQ09OTl9DT05ORUNUSU5HKSkgeworCQlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApCisJCQlyZHNfdGNwX3N0YXRzX2luYyhzX3RjcF9saXN0ZW5fY2xvc2VkX3N0YWxlKTsKKwkJZWxzZQorCQkJcmRzX3RjcF9zdGF0c19pbmMoc190Y3BfY29ubmVjdF9yYWNlZCk7CisJCXJkc19jb25uX2Ryb3AoY29ubik7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCXJkc190Y3Bfc2V0X2NhbGxiYWNrcyhuZXdfc29jaywgY29ubik7CisJcmRzX2Nvbm5lY3RfY29tcGxldGUoY29ubik7CisJbmV3X3NvY2sgPSBOVUxMOworCXJldCA9IDA7CisKK291dDoKKwlpZiAobmV3X3NvY2spCisJCXNvY2tfcmVsZWFzZShuZXdfc29jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmRzX3RjcF9hY2NlcHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwl3aGlsZSAocmRzX3RjcF9hY2NlcHRfb25lKHJkc190Y3BfbGlzdGVuX3NvY2spID09IDApCisJCWNvbmRfcmVzY2hlZCgpOworfQorCit2b2lkIHJkc190Y3BfbGlzdGVuX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBpbnQgYnl0ZXMpCit7CisJdm9pZCAoKnJlYWR5KShzdHJ1Y3Qgc29jayAqc2ssIGludCBieXRlcyk7CisKKwlyZHNkZWJ1ZygibGlzdGVuIGRhdGEgcmVhZHkgc2sgJXBcbiIsIHNrKTsKKworCXJlYWRfbG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOworCXJlYWR5ID0gc2stPnNrX3VzZXJfZGF0YTsKKwlpZiAocmVhZHkgPT0gTlVMTCkgeyAvKiBjaGVjayBmb3IgdGVhcmRvd24gcmFjZSAqLworCQlyZWFkeSA9IHNrLT5za19kYXRhX3JlYWR5OworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIC0+c2tfZGF0YV9yZWFkeSBpcyBhbHNvIGNhbGxlZCBmb3IgYSBuZXdseSBlc3RhYmxpc2hlZCBjaGlsZCBzb2NrZXQKKwkgKiBiZWZvcmUgaXQgaGFzIGJlZW4gYWNjZXB0ZWQgYW5kIHRoZSBhY2NlcHRlciBoYXMgc2V0IHVwIHRoZWlyCisJICogZGF0YV9yZWFkeS4uIHdlIG9ubHkgd2FudCB0byBxdWV1ZSBsaXN0ZW4gd29yayBmb3Igb3VyIGxpc3RlbmluZworCSAqIHNvY2tldAorCSAqLworCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikKKwkJcXVldWVfd29yayhyZHNfd3EsICZyZHNfdGNwX2xpc3Rlbl93b3JrKTsKKworb3V0OgorCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CisJcmVhZHkoc2ssIGJ5dGVzKTsKK30KKworaW50IF9faW5pdCByZHNfdGNwX2xpc3Rlbl9pbml0KHZvaWQpCit7CisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gTlVMTDsKKwlpbnQgcmV0OworCisJcmV0ID0gc29ja19jcmVhdGUoUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQLCAmc29jayk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJc29jay0+c2stPnNrX3JldXNlID0gMTsKKwlyZHNfdGNwX25vbmFnbGUoc29jayk7CisKKwl3cml0ZV9sb2NrX2JoKCZzb2NrLT5zay0+c2tfY2FsbGJhY2tfbG9jayk7CisJc29jay0+c2stPnNrX3VzZXJfZGF0YSA9IHNvY2stPnNrLT5za19kYXRhX3JlYWR5OworCXNvY2stPnNrLT5za19kYXRhX3JlYWR5ID0gcmRzX3RjcF9saXN0ZW5fZGF0YV9yZWFkeTsKKwl3cml0ZV91bmxvY2tfYmgoJnNvY2stPnNrLT5za19jYWxsYmFja19sb2NrKTsKKworCXNpbi5zaW5fZmFtaWx5ID0gUEZfSU5FVCwKKwlzaW4uc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWh0b25sKElOQUREUl9BTlkpOworCXNpbi5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucyhSRFNfVENQX1BPUlQpOworCisJcmV0ID0gc29jay0+b3BzLT5iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc2luKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gc29jay0+b3BzLT5saXN0ZW4oc29jaywgNjQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJkc190Y3BfbGlzdGVuX3NvY2sgPSBzb2NrOworCXNvY2sgPSBOVUxMOworb3V0OgorCWlmIChzb2NrKQorCQlzb2NrX3JlbGVhc2Uoc29jayk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfdGNwX2xpc3Rlbl9zdG9wKHZvaWQpCit7CisJc3RydWN0IHNvY2tldCAqc29jayA9IHJkc190Y3BfbGlzdGVuX3NvY2s7CisJc3RydWN0IHNvY2sgKnNrOworCisJaWYgKHNvY2sgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc2sgPSBzb2NrLT5zazsKKworCS8qIHNlcmlhbGl6ZSB3aXRoIGFuZCBwcmV2ZW50IGZ1cnRoZXIgY2FsbGJhY2tzICovCisJbG9ja19zb2NrKHNrKTsKKwl3cml0ZV9sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CisJaWYgKHNrLT5za191c2VyX2RhdGEpIHsKKwkJc2stPnNrX2RhdGFfcmVhZHkgPSBzay0+c2tfdXNlcl9kYXRhOworCQlzay0+c2tfdXNlcl9kYXRhID0gTlVMTDsKKwl9CisJd3JpdGVfdW5sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CisJcmVsZWFzZV9zb2NrKHNrKTsKKworCS8qIHdhaXQgZm9yIGFjY2VwdHMgdG8gc3RvcCBhbmQgY2xvc2UgdGhlIHNvY2tldCAqLworCWZsdXNoX3dvcmtxdWV1ZShyZHNfd3EpOworCXNvY2tfcmVsZWFzZShzb2NrKTsKKwlyZHNfdGNwX2xpc3Rlbl9zb2NrID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwX3JlY3YuYyBiL25ldC9yZHMvdGNwX3JlY3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDBkYWZmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy90Y3BfcmVjdi5jCkBAIC0wLDAgKzEsMzU2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJ0Y3AuaCIKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfdGNwX2luY29taW5nX3NsYWI7CisKK3ZvaWQgcmRzX3RjcF9pbmNfcHVyZ2Uoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXN0cnVjdCByZHNfdGNwX2luY29taW5nICp0aW5jOworCXRpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX3RjcF9pbmNvbWluZywgdGlfaW5jKTsKKwlyZHNkZWJ1ZygicHVyZ2luZyB0aW5jICVwIGluYyAlcFxuIiwgdGluYywgaW5jKTsKKwlza2JfcXVldWVfcHVyZ2UoJnRpbmMtPnRpX3NrYl9saXN0KTsKK30KKwordm9pZCByZHNfdGNwX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX3RjcF9pbmNvbWluZyAqdGluYzsKKwl0aW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc190Y3BfaW5jb21pbmcsIHRpX2luYyk7CisJcmRzX3RjcF9pbmNfcHVyZ2UoaW5jKTsKKwlyZHNkZWJ1ZygiZnJlZWluZyB0aW5jICVwIGluYyAlcFxuIiwgdGluYywgaW5jKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX3RjcF9pbmNvbWluZ19zbGFiLCB0aW5jKTsKK30KKworLyoKKyAqIHRoaXMgaXMgcHJldHR5IGxhbWUsIGJ1dCwgd2hhdGV2ZXIuCisgKi8KK2ludCByZHNfdGNwX2luY19jb3B5X3RvX3VzZXIoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCBzdHJ1Y3QgaW92ZWMgKmZpcnN0X2lvdiwKKwkJCSAgICAgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHJkc190Y3BfaW5jb21pbmcgKnRpbmM7CisJc3RydWN0IGlvdmVjICppb3YsIHRtcDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGxvbmcgdG9fY29weSwgc2tiX29mZjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChzaXplID09IDApCisJCWdvdG8gb3V0OworCisJdGluYyA9IGNvbnRhaW5lcl9vZihpbmMsIHN0cnVjdCByZHNfdGNwX2luY29taW5nLCB0aV9pbmMpOworCWlvdiA9IGZpcnN0X2lvdjsKKwl0bXAgPSAqaW92OworCisJc2tiX3F1ZXVlX3dhbGsoJnRpbmMtPnRpX3NrYl9saXN0LCBza2IpIHsKKwkJc2tiX29mZiA9IDA7CisJCXdoaWxlIChza2Jfb2ZmIDwgc2tiLT5sZW4pIHsKKwkJCXdoaWxlICh0bXAuaW92X2xlbiA9PSAwKSB7CisJCQkJaW92Kys7CisJCQkJdG1wID0gKmlvdjsKKwkJCX0KKworCQkJdG9fY29weSA9IG1pbih0bXAuaW92X2xlbiwgc2l6ZSk7CisJCQl0b19jb3B5ID0gbWluKHRvX2NvcHksIHNrYi0+bGVuIC0gc2tiX29mZik7CisKKwkJCXJkc2RlYnVnKCJyZXQgJWQgc2l6ZSAlenUgc2tiICVwIHNrYl9vZmYgJWx1ICIKKwkJCQkgInNrYmxlbiAlZCBpb3ZfYmFzZSAlcCBpb3ZfbGVuICV6dSBjcHkgJWx1XG4iLAorCQkJCSByZXQsIHNpemUsIHNrYiwgc2tiX29mZiwgc2tiLT5sZW4sCisJCQkJIHRtcC5pb3ZfYmFzZSwgdG1wLmlvdl9sZW4sIHRvX2NvcHkpOworCisJCQkvKiBtb2RpZmllcyB0bXAgYXMgaXQgY29waWVzICovCisJCQlpZiAoc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCBza2Jfb2ZmLCAmdG1wLAorCQkJCQkJICAgIHRvX2NvcHkpKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJc2l6ZSAtPSB0b19jb3B5OworCQkJcmV0ICs9IHRvX2NvcHk7CisJCQlza2Jfb2ZmICs9IHRvX2NvcHk7CisJCQlpZiAoc2l6ZSA9PSAwKQorCQkJCWdvdG8gb3V0OworCQl9CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBXZSBoYXZlIGEgc2VyaWVzIG9mIHNrYnMgdGhhdCBoYXZlIGZyYWdtZW50ZWQgcGllY2VzIG9mIHRoZSBjb25nZXN0aW9uCisgKiBiaXRtYXAuICBUaGV5IG11c3QgYWRkIHVwIHRvIHRoZSBleGFjdCBzaXplIG9mIHRoZSBjb25nZXN0aW9uIGJpdG1hcC4gIFdlCisgKiB1c2UgdGhlIHNrYiBoZWxwZXJzIHRvIGNvcHkgdGhvc2UgaW50byB0aGUgcGFnZXMgdGhhdCBtYWtlIHVwIHRoZSBpbi1tZW1vcnkKKyAqIGNvbmdlc3Rpb24gYml0bWFwIGZvciB0aGUgcmVtb3RlIGFkZHJlc3Mgb2YgdGhpcyBjb25uZWN0aW9uLiAgV2UgdGhlbiB0ZWxsCisgKiB0aGUgY29uZ2VzdGlvbiBjb3JlIHRoYXQgdGhlIGJpdG1hcCBoYXMgYmVlbiBjaGFuZ2VkIHNvIHRoYXQgaXQgY2FuIHdha2UgdXAKKyAqIHNsZWVwZXJzLgorICoKKyAqIFRoaXMgaXMgcmFjaW5nIHdpdGggc2VuZGluZyBwYXRocyB3aGljaCBhcmUgdXNpbmcgdGVzdF9iaXQgdG8gc2VlIGlmIHRoZQorICogYml0bWFwIGluZGljYXRlcyB0aGF0IHRoZWlyIHJlY2lwaWVudCBpcyBjb25nZXN0ZWQuCisgKi8KKworc3RhdGljIHZvaWQgcmRzX3RjcF9jb25nX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJICAgICAgc3RydWN0IHJkc190Y3BfaW5jb21pbmcgKnRpbmMpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgdG9fY29weSwgc2tiX29mZjsKKwl1bnNpZ25lZCBpbnQgbWFwX29mZjsKKwl1bnNpZ25lZCBpbnQgbWFwX3BhZ2U7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwOworCWludCByZXQ7CisKKwkvKiBjYXRjaCBjb21wbGV0ZWx5IGNvcnJ1cHQgcGFja2V0cyAqLworCWlmIChiZTMyX3RvX2NwdSh0aW5jLT50aV9pbmMuaV9oZHIuaF9sZW4pICE9IFJEU19DT05HX01BUF9CWVRFUykKKwkJcmV0dXJuOworCisJbWFwX3BhZ2UgPSAwOworCW1hcF9vZmYgPSAwOworCW1hcCA9IGNvbm4tPmNfZmNvbmc7CisKKwlza2JfcXVldWVfd2FsaygmdGluYy0+dGlfc2tiX2xpc3QsIHNrYikgeworCQlza2Jfb2ZmID0gMDsKKwkJd2hpbGUgKHNrYl9vZmYgPCBza2ItPmxlbikgeworCQkJdG9fY29weSA9IG1pbl90KHVuc2lnbmVkIGludCwgUEFHRV9TSVpFIC0gbWFwX29mZiwKKwkJCQkJc2tiLT5sZW4gLSBza2Jfb2ZmKTsKKworCQkJQlVHX09OKG1hcF9wYWdlID49IFJEU19DT05HX01BUF9QQUdFUyk7CisKKwkJCS8qIG9ubHkgcmV0dXJucyAwIG9yIC1lcnJvciAqLworCQkJcmV0ID0gc2tiX2NvcHlfYml0cyhza2IsIHNrYl9vZmYsCisJCQkJKHZvaWQgKiltYXAtPm1fcGFnZV9hZGRyc1ttYXBfcGFnZV0gKyBtYXBfb2ZmLAorCQkJCXRvX2NvcHkpOworCQkJQlVHX09OKHJldCAhPSAwKTsKKworCQkJc2tiX29mZiArPSB0b19jb3B5OworCQkJbWFwX29mZiArPSB0b19jb3B5OworCQkJaWYgKG1hcF9vZmYgPT0gUEFHRV9TSVpFKSB7CisJCQkJbWFwX29mZiA9IDA7CisJCQkJbWFwX3BhZ2UrKzsKKwkJCX0KKwkJfQorCX0KKworCXJkc19jb25nX21hcF91cGRhdGVkKG1hcCwgfih1NjQpIDApOworfQorCitzdHJ1Y3QgcmRzX3RjcF9kZXNjX2FyZyB7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworCWdmcF90IGdmcDsKKwllbnVtIGttX3R5cGUga207Cit9OworCitzdGF0aWMgaW50IHJkc190Y3BfZGF0YV9yZWN2KHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgbGVuKQoreworCXN0cnVjdCByZHNfdGNwX2Rlc2NfYXJnICphcmcgPSBkZXNjLT5hcmcuZGF0YTsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBhcmctPmNvbm47CisJc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfdGNwX2luY29taW5nICp0aW5jID0gdGMtPnRfdGluYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmU7CisJc2l6ZV90IGxlZnQgPSBsZW4sIHRvX2NvcHk7CisKKwlyZHNkZWJ1ZygidGNwIGRhdGEgdGMgJXAgc2tiICVwIG9mZnNldCAldSBsZW4gJXp1XG4iLCB0Yywgc2tiLCBvZmZzZXQsCisJCSBsZW4pOworCisJLyoKKwkgKiB0Y3BfcmVhZF9zb2NrKCkgaW50ZXJwcmV0cyBwYXJ0aWFsIHByb2dyZXNzIGFzIGFuIGluZGljYXRpb24gdG8gc3RvcAorCSAqIHByb2Nlc3NpbmcuCisJICovCisJd2hpbGUgKGxlZnQpIHsKKwkJaWYgKHRpbmMgPT0gTlVMTCkgeworCQkJdGluYyA9IGttZW1fY2FjaGVfYWxsb2MocmRzX3RjcF9pbmNvbWluZ19zbGFiLAorCQkJCQkgICAgICAgIGFyZy0+Z2ZwKTsKKwkJCWlmICh0aW5jID09IE5VTEwpIHsKKwkJCQlkZXNjLT5lcnJvciA9IC1FTk9NRU07CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQl0Yy0+dF90aW5jID0gdGluYzsKKwkJCXJkc2RlYnVnKCJhbGxvY2VkIHRpbmMgJXBcbiIsIHRpbmMpOworCQkJcmRzX2luY19pbml0KCZ0aW5jLT50aV9pbmMsIGNvbm4sIGNvbm4tPmNfZmFkZHIpOworCQkJLyoKKwkJCSAqIFhYWCAqIHdlIG1pZ2h0IGJlIGFibGUgdG8gdXNlIHRoZSBfXyB2YXJpYW50cyB3aGVuCisJCQkgKiB3ZSd2ZSBhbHJlYWR5IHNlcmlhbGl6ZWQgYXQgYSBoaWdoZXIgbGV2ZWwuCisJCQkgKi8KKwkJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnRpbmMtPnRpX3NrYl9saXN0KTsKKwkJfQorCisJCWlmIChsZWZ0ICYmIHRjLT50X3RpbmNfaGRyX3JlbSkgeworCQkJdG9fY29weSA9IG1pbih0Yy0+dF90aW5jX2hkcl9yZW0sIGxlZnQpOworCQkJcmRzZGVidWcoImNvcHlpbmcgJXp1IGhlYWRlciBmcm9tIHNrYiAlcFxuIiwgdG9fY29weSwKKwkJCQkgc2tiKTsKKwkJCXNrYl9jb3B5X2JpdHMoc2tiLCBvZmZzZXQsCisJCQkJICAgICAgKGNoYXIgKikmdGluYy0+dGlfaW5jLmlfaGRyICsKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgLQorCQkJCQkJdGMtPnRfdGluY19oZHJfcmVtLAorCQkJCSAgICAgIHRvX2NvcHkpOworCQkJdGMtPnRfdGluY19oZHJfcmVtIC09IHRvX2NvcHk7CisJCQlsZWZ0IC09IHRvX2NvcHk7CisJCQlvZmZzZXQgKz0gdG9fY29weTsKKworCQkJaWYgKHRjLT50X3RpbmNfaGRyX3JlbSA9PSAwKSB7CisJCQkJLyogY291bGQgYmUgMCBmb3IgYSAwIGxlbiBtZXNzYWdlICovCisJCQkJdGMtPnRfdGluY19kYXRhX3JlbSA9CisJCQkJCWJlMzJfdG9fY3B1KHRpbmMtPnRpX2luYy5pX2hkci5oX2xlbik7CisJCQl9CisJCX0KKworCQlpZiAobGVmdCAmJiB0Yy0+dF90aW5jX2RhdGFfcmVtKSB7CisJCQljbG9uZSA9IHNrYl9jbG9uZShza2IsIGFyZy0+Z2ZwKTsKKwkJCWlmIChjbG9uZSA9PSBOVUxMKSB7CisJCQkJZGVzYy0+ZXJyb3IgPSAtRU5PTUVNOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQl0b19jb3B5ID0gbWluKHRjLT50X3RpbmNfZGF0YV9yZW0sIGxlZnQpOworCQkJcHNrYl9wdWxsKGNsb25lLCBvZmZzZXQpOworCQkJcHNrYl90cmltKGNsb25lLCB0b19jb3B5KTsKKwkJCXNrYl9xdWV1ZV90YWlsKCZ0aW5jLT50aV9za2JfbGlzdCwgY2xvbmUpOworCisJCQlyZHNkZWJ1Zygic2tiICVwIGRhdGEgJXAgbGVuICVkIG9mZiAldSB0b19jb3B5ICV6dSAtPiAiCisJCQkJICJjbG9uZSAlcCBkYXRhICVwIGxlbiAlZFxuIiwKKwkJCQkgc2tiLCBza2ItPmRhdGEsIHNrYi0+bGVuLCBvZmZzZXQsIHRvX2NvcHksCisJCQkJIGNsb25lLCBjbG9uZS0+ZGF0YSwgY2xvbmUtPmxlbik7CisKKwkJCXRjLT50X3RpbmNfZGF0YV9yZW0gLT0gdG9fY29weTsKKwkJCWxlZnQgLT0gdG9fY29weTsKKwkJCW9mZnNldCArPSB0b19jb3B5OworCQl9CisKKwkJaWYgKHRjLT50X3RpbmNfaGRyX3JlbSA9PSAwICYmIHRjLT50X3RpbmNfZGF0YV9yZW0gPT0gMCkgeworCQkJaWYgKHRpbmMtPnRpX2luYy5pX2hkci5oX2ZsYWdzID09IFJEU19GTEFHX0NPTkdfQklUTUFQKQorCQkJCXJkc190Y3BfY29uZ19yZWN2KGNvbm4sIHRpbmMpOworCQkJZWxzZQorCQkJCXJkc19yZWN2X2luY29taW5nKGNvbm4sIGNvbm4tPmNfZmFkZHIsCisJCQkJCQkgIGNvbm4tPmNfbGFkZHIsICZ0aW5jLT50aV9pbmMsCisJCQkJCQkgIGFyZy0+Z2ZwLCBhcmctPmttKTsKKworCQkJdGMtPnRfdGluY19oZHJfcmVtID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwkJCXRjLT50X3RpbmNfZGF0YV9yZW0gPSAwOworCQkJdGMtPnRfdGluYyA9IE5VTEw7CisJCQlyZHNfaW5jX3B1dCgmdGluYy0+dGlfaW5jKTsKKwkJCXRpbmMgPSBOVUxMOworCQl9CisJfQorb3V0OgorCXJkc2RlYnVnKCJyZXR1cm5pbmcgbGVuICV6dSBsZWZ0ICV6dSBza2IgbGVuICVkIHJ4IHF1ZXVlIGRlcHRoICVkXG4iLAorCQkgbGVuLCBsZWZ0LCBza2ItPmxlbiwKKwkJIHNrYl9xdWV1ZV9sZW4oJnRjLT50X3NvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSk7CisJcmV0dXJuIGxlbiAtIGxlZnQ7Cit9CisKKy8qIHRoZSBjYWxsZXIgaGFzIHRvIGhvbGQgdGhlIHNvY2sgbG9jayAqLworaW50IHJkc190Y3BfcmVhZF9zb2NrKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwLCBlbnVtIGttX3R5cGUga20pCit7CisJc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0Yy0+dF9zb2NrOworCXJlYWRfZGVzY3JpcHRvcl90IGRlc2M7CisJc3RydWN0IHJkc190Y3BfZGVzY19hcmcgYXJnOworCisJLyogSXQncyBsaWtlIGdsaWIgaW4gdGhlIGtlcm5lbCEgKi8KKwlhcmcuY29ubiA9IGNvbm47CisJYXJnLmdmcCA9IGdmcDsKKwlhcmcua20gPSBrbTsKKwlkZXNjLmFyZy5kYXRhID0gJmFyZzsKKwlkZXNjLmVycm9yID0gMDsKKwlkZXNjLmNvdW50ID0gMTsgLyogZ2l2ZSBtb3JlIHRoYW4gb25lIHNrYiBwZXIgY2FsbCAqLworCisJdGNwX3JlYWRfc29jayhzb2NrLT5zaywgJmRlc2MsIHJkc190Y3BfZGF0YV9yZWN2KTsKKwlyZHNkZWJ1ZygidGNwX3JlYWRfc29jayBmb3IgdGMgJXAgZ2ZwIDB4JXggcmV0dXJuZWQgJWRcbiIsIHRjLCBnZnAsCisJCSBkZXNjLmVycm9yKTsKKworCXJldHVybiBkZXNjLmVycm9yOworfQorCisvKgorICogV2UgaG9sZCB0aGUgc29jayBsb2NrIHRvIHNlcmlhbGl6ZSBvdXIgcmRzX3RjcF9yZWN2LT50Y3BfcmVhZF9zb2NrIGZyb20KKyAqIGRhdGFfcmVhZHkuCisgKgorICogaWYgd2UgZmFpbCB0byBhbGxvY2F0ZSB3ZSdyZSBpbiB0cm91YmxlLi4gYmxpbmRseSB3YWl0IHNvbWUgdGltZSBiZWZvcmUKKyAqIHRyeWluZyBhZ2FpbiB0byBzZWUgaWYgdGhlIFZNIGNhbiBmcmVlIHVwIHNvbWV0aGluZyBmb3IgdXMuCisgKi8KK2ludCByZHNfdGNwX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdGMtPnRfc29jazsKKwlpbnQgcmV0ID0gMDsKKworCXJkc2RlYnVnKCJyZWN2IHdvcmtlciBjb25uICVwIHRjICVwIHNvY2sgJXBcbiIsIGNvbm4sIHRjLCBzb2NrKTsKKworCWxvY2tfc29jayhzb2NrLT5zayk7CisJcmV0ID0gcmRzX3RjcF9yZWFkX3NvY2soY29ubiwgR0ZQX0tFUk5FTCwgS01fVVNFUjApOworCXJlbGVhc2Vfc29jayhzb2NrLT5zayk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc190Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIGludCBieXRlcykKK3sKKwl2b2lkICgqcmVhZHkpKHN0cnVjdCBzb2NrICpzaywgaW50IGJ5dGVzKTsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7CisKKwlyZHNkZWJ1ZygiZGF0YSByZWFkeSBzayAlcCBieXRlcyAlZFxuIiwgc2ssIGJ5dGVzKTsKKworCXJlYWRfbG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOworCWNvbm4gPSBzay0+c2tfdXNlcl9kYXRhOworCWlmIChjb25uID09IE5VTEwpIHsgLyogY2hlY2sgZm9yIHRlYXJkb3duIHJhY2UgKi8KKwkJcmVhZHkgPSBzay0+c2tfZGF0YV9yZWFkeTsKKwkJZ290byBvdXQ7CisJfQorCisJdGMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXJlYWR5ID0gdGMtPnRfb3JpZ19kYXRhX3JlYWR5OworCXJkc190Y3Bfc3RhdHNfaW5jKHNfdGNwX2RhdGFfcmVhZHlfY2FsbHMpOworCisJaWYgKHJkc190Y3BfcmVhZF9zb2NrKGNvbm4sIEdGUF9BVE9NSUMsIEtNX1NPRlRJUlEwKSA9PSAtRU5PTUVNKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19yZWN2X3csIDApOworb3V0OgorCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CisJcmVhZHkoc2ssIGJ5dGVzKTsKK30KKworaW50IF9faW5pdCByZHNfdGNwX3JlY3ZfaW5pdCh2b2lkKQoreworCXJkc190Y3BfaW5jb21pbmdfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJyZHNfdGNwX2luY29taW5nIiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfdGNwX2luY29taW5nKSwKKwkJCQkJMCwgMCwgTlVMTCk7CisJaWYgKHJkc190Y3BfaW5jb21pbmdfc2xhYiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfdGNwX3JlY3ZfZXhpdCh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShyZHNfdGNwX2luY29taW5nX3NsYWIpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3Bfc2VuZC5jIGIvbmV0L3Jkcy90Y3Bfc2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNTQ1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3RjcF9zZW5kLmMKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAidGNwLmgiCisKK3N0YXRpYyB2b2lkIHJkc190Y3BfY29yayhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgdmFsKQoreworCW1tX3NlZ21lbnRfdCBvbGRmczsKKworCW9sZGZzID0gZ2V0X2ZzKCk7CisJc2V0X2ZzKEtFUk5FTF9EUyk7CisJc29jay0+b3BzLT5zZXRzb2Nrb3B0KHNvY2ssIFNPTF9UQ1AsIFRDUF9DT1JLLCAoY2hhciBfX3VzZXIgKikmdmFsLAorCQkJICAgICAgc2l6ZW9mKHZhbCkpOworCXNldF9mcyhvbGRmcyk7Cit9CisKK3ZvaWQgcmRzX3RjcF94bWl0X3ByZXBhcmUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCXJkc190Y3BfY29yayh0Yy0+dF9zb2NrLCAxKTsKK30KKwordm9pZCByZHNfdGNwX3htaXRfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCXJkc190Y3BfY29yayh0Yy0+dF9zb2NrLCAwKTsKK30KKworLyogdGhlIGNvcmUgc2VuZF9zZW0gc2VyaWFsaXplcyB0aGlzIHdpdGggb3RoZXIgeG1pdCBhbmQgc2h1dGRvd24gKi8KK2ludCByZHNfdGNwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3Qga3ZlYyB2ZWMgPSB7CisgICAgICAgICAgICAgICAgLmlvdl9iYXNlID0gZGF0YSwKKyAgICAgICAgICAgICAgICAuaW92X2xlbiA9IGxlbiwKKwl9OworICAgICAgICBzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsKKyAgICAgICAgICAgICAgICAubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlUIHwgTVNHX05PU0lHTkFMLAorICAgICAgICB9OworCisJcmV0dXJuIGtlcm5lbF9zZW5kbXNnKHNvY2ssICZtc2csICZ2ZWMsIDEsIHZlYy5pb3ZfbGVuKTsKK30KKworLyogdGhlIGNvcmUgc2VuZF9zZW0gc2VyaWFsaXplcyB0aGlzIHdpdGggb3RoZXIgeG1pdCBhbmQgc2h1dGRvd24gKi8KK2ludCByZHNfdGNwX3htaXRfY29uZ19tYXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJICBzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXN0YXRpYyBzdHJ1Y3QgcmRzX2hlYWRlciByZHNfdGNwX21hcF9oZWFkZXIgPSB7CisJCS5oX2ZsYWdzID0gUkRTX0ZMQUdfQ09OR19CSVRNQVAsCisJfTsKKwlzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJdW5zaWduZWQgbG9uZyBpOworCWludCByZXQ7CisJaW50IGNvcGllZCA9IDA7CisKKwkvKiBTb21lIHByb2JsZW0gY2xhaW1zIGNwdV90b19iZTMyKGNvbnN0YW50KSBpc24ndCBhIGNvbnN0YW50LiAqLworCXJkc190Y3BfbWFwX2hlYWRlci5oX2xlbiA9IGNwdV90b19iZTMyKFJEU19DT05HX01BUF9CWVRFUyk7CisKKwlpZiAob2Zmc2V0IDwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSkgeworCQlyZXQgPSByZHNfdGNwX3NlbmRtc2codGMtPnRfc29jaywKKwkJCQkgICAgICAodm9pZCAqKSZyZHNfdGNwX21hcF9oZWFkZXIgKyBvZmZzZXQsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSAtIG9mZnNldCk7CisJCWlmIChyZXQgPD0gMCkKKwkJCXJldHVybiByZXQ7CisJCW9mZnNldCArPSByZXQ7CisJCWNvcGllZCA9IHJldDsKKwkJaWYgKG9mZnNldCA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpCisJCQlyZXR1cm4gcmV0OworCX0KKworCW9mZnNldCAtPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCWkgPSBvZmZzZXQgLyBQQUdFX1NJWkU7CisJb2Zmc2V0ID0gb2Zmc2V0ICUgUEFHRV9TSVpFOworCUJVR19PTihpID49IFJEU19DT05HX01BUF9QQUdFUyk7CisKKwlkbyB7CisJCXJldCA9IHRjLT50X3NvY2stPm9wcy0+c2VuZHBhZ2UodGMtPnRfc29jaywKKwkJCQkJdmlydF90b19wYWdlKG1hcC0+bV9wYWdlX2FkZHJzW2ldKSwKKwkJCQkJb2Zmc2V0LCBQQUdFX1NJWkUgLSBvZmZzZXQsCisJCQkJCU1TR19ET05UV0FJVCk7CisJCWlmIChyZXQgPD0gMCkKKwkJCWJyZWFrOworCQljb3BpZWQgKz0gcmV0OworCQlvZmZzZXQgKz0gcmV0OworCQlpZiAob2Zmc2V0ID09IFBBR0VfU0laRSkgeworCQkJb2Zmc2V0ID0gMDsKKwkJCWkrKzsKKwkJfQorCX0gd2hpbGUgKGkgPCBSRFNfQ09OR19NQVBfUEFHRVMpOworCisgICAgICAgIHJldHVybiBjb3BpZWQgPyBjb3BpZWQgOiByZXQ7Cit9CisKKy8qIHRoZSBjb3JlIHNlbmRfc2VtIHNlcmlhbGl6ZXMgdGhpcyB3aXRoIG90aGVyIHhtaXQgYW5kIHNodXRkb3duICovCitpbnQgcmRzX3RjcF94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkgICAgICAgICB1bnNpZ25lZCBpbnQgaGRyX29mZiwgdW5zaWduZWQgaW50IHNnLCB1bnNpZ25lZCBpbnQgb2ZmKQoreworCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlpbnQgZG9uZSA9IDA7CisJaW50IHJldCA9IDA7CisKKwlpZiAoaGRyX29mZiA9PSAwKSB7CisJCS8qCisJCSAqIG1fYWNrX3NlcSBpcyBzZXQgdG8gdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgbGFzdCBieXRlIG9mCisJCSAqIGhlYWRlciBhbmQgZGF0YS4gIHNlZSByZHNfdGNwX2lzX2Fja2VkKCkuCisJCSAqLworCQl0Yy0+dF9sYXN0X3NlbnRfbnh0ID0gcmRzX3RjcF9zbmRfbnh0KHRjKTsKKwkJcm0tPm1fYWNrX3NlcSA9IHRjLT50X2xhc3Rfc2VudF9ueHQgKworCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgKworCQkJCWJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikgLSAxOworCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJc2V0X2JpdChSRFNfTVNHX0hBU19BQ0tfU0VRLCAmcm0tPm1fZmxhZ3MpOworCQl0Yy0+dF9sYXN0X2V4cGVjdGVkX3VuYSA9IHJtLT5tX2Fja19zZXEgKyAxOworCisJCXJkc2RlYnVnKCJybSAlcCB0Y3Agbnh0ICV1IGFja19zZXEgJWxsdVxuIiwKKwkJCSBybSwgcmRzX3RjcF9zbmRfbnh0KHRjKSwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJtLT5tX2Fja19zZXEpOworCX0KKworCWlmIChoZHJfb2ZmIDwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSkgeworCQkvKiBzZWUgcmRzX3RjcF93cml0ZV9zcGFjZSgpICovCisJCXNldF9iaXQoU09DS19OT1NQQUNFLCAmdGMtPnRfc29jay0+c2stPnNrX3NvY2tldC0+ZmxhZ3MpOworCisJCXJldCA9IHJkc190Y3Bfc2VuZG1zZyh0Yy0+dF9zb2NrLAorCQkJCSAgICAgICh2b2lkICopJnJtLT5tX2luYy5pX2hkciArIGhkcl9vZmYsCisJCQkJICAgICAgc2l6ZW9mKHJtLT5tX2luYy5pX2hkcikgLSBoZHJfb2ZmKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwkJZG9uZSArPSByZXQ7CisJCWlmIChoZHJfb2ZmICsgZG9uZSAhPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKQorCQkJZ290byBvdXQ7CisJfQorCisJd2hpbGUgKHNnIDwgcm0tPm1fbmVudHMpIHsKKwkJcmV0ID0gdGMtPnRfc29jay0+b3BzLT5zZW5kcGFnZSh0Yy0+dF9zb2NrLAorCQkJCQkJc2dfcGFnZSgmcm0tPm1fc2dbc2ddKSwKKwkJCQkJCXJtLT5tX3NnW3NnXS5vZmZzZXQgKyBvZmYsCisJCQkJCQlybS0+bV9zZ1tzZ10ubGVuZ3RoIC0gb2ZmLAorCQkJCQkJTVNHX0RPTlRXQUlUfE1TR19OT1NJR05BTCk7CisJCXJkc2RlYnVnKCJ0Y3Agc2VuZHBhZ2UgJXA6JXU6JXUgcmV0ICVkXG4iLCAodm9pZCAqKXNnX3BhZ2UoJnJtLT5tX3NnW3NnXSksCisJCQkgcm0tPm1fc2dbc2ddLm9mZnNldCArIG9mZiwgcm0tPm1fc2dbc2ddLmxlbmd0aCAtIG9mZiwKKwkJCSByZXQpOworCQlpZiAocmV0IDw9IDApCisJCQlicmVhazsKKworCQlvZmYgKz0gcmV0OworCQlkb25lICs9IHJldDsKKwkJaWYgKG9mZiA9PSBybS0+bV9zZ1tzZ10ubGVuZ3RoKSB7CisJCQlvZmYgPSAwOworCQkJc2crKzsKKwkJfQorCX0KKworb3V0OgorCWlmIChyZXQgPD0gMCkgeworCQkvKiB3cml0ZV9zcGFjZSB3aWxsIGhpdCBhZnRlciBFQUdBSU4sIGFsbCBlbHNlIGZhdGFsICovCisJCWlmIChyZXQgPT0gLUVBR0FJTikgeworCQkJcmRzX3RjcF9zdGF0c19pbmMoc190Y3Bfc25kYnVmX2Z1bGwpOworCQkJcmV0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy90Y3A6IHNlbmQgdG8gJXUuJXUuJXUuJXUgIgorCQkJICAgICAgICJyZXR1cm5lZCAlZCwgZGlzY29ubmVjdGluZyBhbmQgcmVjb25uZWN0aW5nXG4iLAorCQkJICAgICAgIE5JUFFVQUQoY29ubi0+Y19mYWRkciksIHJldCk7CisJCQlyZHNfY29ubl9kcm9wKGNvbm4pOworCQl9CisJfQorCWlmIChkb25lID09IDApCisJCWRvbmUgPSByZXQ7CisJcmV0dXJuIGRvbmU7Cit9CisKKy8qCisgKiBybS0+bV9hY2tfc2VxIGlzIHNldCB0byB0aGUgdGNwIHNlcXVlbmNlIG51bWJlciB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZQorICogbGFzdCBieXRlIG9mIHRoZSBtZXNzYWdlLCBpbmNsdWRpbmcgdGhlIGhlYWRlci4gIFRoaXMgbWVhbnMgdGhhdCB0aGUKKyAqIGVudGlyZSBtZXNzYWdlIGhhcyBiZWVuIHJlY2VpdmVkIGlmIHJtLT5tX2Fja19zZXEgaXMgImJlZm9yZSIgdGhlIG5leHQKKyAqIHVuYWNrZWQgYnl0ZSBvZiB0aGUgVENQIHNlcXVlbmNlIHNwYWNlLiAgV2UgaGF2ZSB0byBkbyB2ZXJ5IGNhcmVmdWwKKyAqIHdyYXBwaW5nIDMyYml0IGNvbXBhcmlzb25zIGhlcmUuCisgKi8KK3N0YXRpYyBpbnQgcmRzX3RjcF9pc19hY2tlZChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCB1aW50NjRfdCBhY2spCit7CisJaWYgKCF0ZXN0X2JpdChSRFNfTVNHX0hBU19BQ0tfU0VRLCAmcm0tPm1fZmxhZ3MpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKF9fczMyKSgodTMyKXJtLT5tX2Fja19zZXEgLSAodTMyKWFjaykgPCAwOworfQorCit2b2lkIHJkc190Y3Bfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKQoreworCXZvaWQgKCp3cml0ZV9zcGFjZSkoc3RydWN0IHNvY2sgKnNrKTsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7CisKKwlyZWFkX2xvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKKwljb25uID0gc2stPnNrX3VzZXJfZGF0YTsKKwlpZiAoY29ubiA9PSBOVUxMKSB7CisJCXdyaXRlX3NwYWNlID0gc2stPnNrX3dyaXRlX3NwYWNlOworCQlnb3RvIG91dDsKKwl9CisKKwl0YyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJcmRzZGVidWcoIndyaXRlX3NwYWNlIGZvciB0YyAlcFxuIiwgdGMpOworCXdyaXRlX3NwYWNlID0gdGMtPnRfb3JpZ193cml0ZV9zcGFjZTsKKwlyZHNfdGNwX3N0YXRzX2luYyhzX3RjcF93cml0ZV9zcGFjZV9jYWxscyk7CisKKwlyZHNkZWJ1ZygidGNwIHVuYSAldVxuIiwgcmRzX3RjcF9zbmRfdW5hKHRjKSk7CisJdGMtPnRfbGFzdF9zZWVuX3VuYSA9IHJkc190Y3Bfc25kX3VuYSh0Yyk7CisJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCByZHNfdGNwX3NuZF91bmEodGMpLCByZHNfdGNwX2lzX2Fja2VkKTsKKworCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CitvdXQ6CisJcmVhZF91bmxvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKKworCS8qCisJICogd3JpdGVfc3BhY2UgaXMgb25seSBjYWxsZWQgd2hlbiBkYXRhIGxlYXZlcyB0Y3AncyBzZW5kIHF1ZXVlIGlmCisJICogU09DS19OT1NQQUNFIGlzIHNldC4gIFdlIHNldCBTT0NLX05PU1BBQ0UgZXZlcnkgdGltZSB3ZSBwdXQKKwkgKiBkYXRhIGluIHRjcCdzIHNlbmQgcXVldWUgYmVjYXVzZSB3ZSB1c2Ugd3JpdGVfc3BhY2UgdG8gcGFyc2UgdGhlCisJICogc2VxdWVuY2UgbnVtYmVycyBhbmQgbm90aWNlIHRoYXQgcmRzIG1lc3NhZ2VzIGhhdmUgYmVlbiBmdWxseQorCSAqIHJlY2VpdmVkLgorCSAqCisJICogdGNwJ3Mgd3JpdGVfc3BhY2UgY2xlYXJzIFNPQ0tfTk9TUEFDRSBpZiB0aGUgc2VuZCBxdWV1ZSBoYXMgbW9yZQorCSAqIHRoYW4gYSBjZXJ0YWluIGFtb3VudCBvZiBzcGFjZS4gU28gd2UgbmVlZCB0byBzZXQgaXQgYWdhaW4gKmFmdGVyKgorCSAqIHdlIGNhbGwgdGNwJ3Mgd3JpdGVfc3BhY2Ugb3IgZWxzZSB3ZSBtaWdodCBvbmx5IGdldCBjYWxsZWQgb24gdGhlCisJICogZmlyc3Qgb2YgYSBzZXJpZXMgb2YgaW5jb21pbmcgdGNwIGFja3MuCisJICovCisJd3JpdGVfc3BhY2Uoc2spOworCisJaWYgKHNrLT5za19zb2NrZXQpCisJCXNldF9iaXQoU09DS19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3Bfc3RhdHMuYyBiL25ldC9yZHMvdGNwX3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4OThkMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvdGNwX3N0YXRzLmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJ0Y3AuaCIKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHJkc190Y3Bfc3RhdGlzdGljcywgcmRzX3RjcF9zdGF0cykKKwlfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKK3N0YXRpYyBjb25zdCBjaGFyIGNvbnN0ICpyZHNfdGNwX3N0YXRfbmFtZXNbXSA9IHsKKwkidGNwX2RhdGFfcmVhZHlfY2FsbHMiLAorCSJ0Y3Bfd3JpdGVfc3BhY2VfY2FsbHMiLAorCSJ0Y3Bfc25kYnVmX2Z1bGwiLAorCSJ0Y3BfY29ubmVjdF9yYWNlZCIsCisJInRjcF9saXN0ZW5fY2xvc2VkX3N0YWxlIiwKK307CisKK3Vuc2lnbmVkIGludCByZHNfdGNwX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgYXZhaWwpCit7CisJc3RydWN0IHJkc190Y3Bfc3RhdGlzdGljcyBzdGF0cyA9IHswLCB9OworCXVpbnQ2NF90ICpzcmM7CisJdWludDY0X3QgKnN1bTsKKwlzaXplX3QgaTsKKwlpbnQgY3B1OworCisJaWYgKGF2YWlsIDwgQVJSQVlfU0laRShyZHNfdGNwX3N0YXRfbmFtZXMpKQorCQlnb3RvIG91dDsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXNyYyA9ICh1aW50NjRfdCAqKSYocGVyX2NwdShyZHNfdGNwX3N0YXRzLCBjcHUpKTsKKwkJc3VtID0gKHVpbnQ2NF90ICopJnN0YXRzOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0YXRzKSAvIHNpemVvZih1aW50NjRfdCk7IGkrKykKKwkJCSooc3VtKyspICs9ICooc3JjKyspOworCX0KKworCXJkc19zdGF0c19pbmZvX2NvcHkoaXRlciwgKHVpbnQ2NF90ICopJnN0YXRzLCByZHNfdGNwX3N0YXRfbmFtZXMsCisJCQkgICAgQVJSQVlfU0laRShyZHNfdGNwX3N0YXRfbmFtZXMpKTsKK291dDoKKwlyZXR1cm4gQVJSQVlfU0laRShyZHNfdGNwX3N0YXRfbmFtZXMpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90aHJlYWRzLmMgYi9uZXQvcmRzL3RocmVhZHMuYwppbmRleCA4MjhhMWJmLi5kZDdlMGNhIDEwMDY0NAotLS0gYS9uZXQvcmRzL3RocmVhZHMuYworKysgYi9uZXQvcmRzL3RocmVhZHMuYwpAQCAtNjgsNiArNjgsNyBAQAogICoJKFRDUCwgSUIvUkRNQSkgdG8gcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IHN5bmNocm9uaXNhdGlvbi4KICAqLwogc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJkc193cTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJkc193cSk7CiAKIHZvaWQgcmRzX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQogewpAQCAtODksNiArOTAsNyBAQAogCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CiAJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfcmVjdl93LCAwKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uZWN0X2NvbXBsZXRlKTsKIAogLyoKICAqIFRoaXMgcmFuZG9tIGV4cG9uZW50aWFsIGJhY2tvZmYgaXMgcmVsaWVkIG9uIHRvIGV2ZW50dWFsbHkgcmVzb2x2ZSByYWNpbmcKZGlmZiAtLWdpdCBhL25ldC9yZHMvdHJhbnNwb3J0LmMgYi9uZXQvcmRzL3RyYW5zcG9ydC5jCmluZGV4IDc2N2RhNjEuLjdlMTA2NzkgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3Jkcy90cmFuc3BvcnQuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgInJkcy5oIgogI2luY2x1ZGUgImxvb3AuaCIKIAotc3RhdGljIExJU1RfSEVBRChyZHNfdHJhbnNwb3J0cyk7CitzdGF0aWMgc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zcG9ydHNbUkRTX1RSQU5TX0NPVU5UXTsKIHN0YXRpYyBERUNMQVJFX1JXU0VNKHJkc190cmFuc19zZW0pOwogCiBpbnQgcmRzX3RyYW5zX3JlZ2lzdGVyKHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucykKQEAgLTQ2LDM2ICs0Niw0NCBAQAogCiAJZG93bl93cml0ZSgmcmRzX3RyYW5zX3NlbSk7CiAKLQlsaXN0X2FkZF90YWlsKCZ0cmFucy0+dF9pdGVtLCAmcmRzX3RyYW5zcG9ydHMpOwotCXByaW50ayhLRVJOX0lORk8gIlJlZ2lzdGVyZWQgUkRTLyVzIHRyYW5zcG9ydFxuIiwgdHJhbnMtPnRfbmFtZSk7CisJaWYgKHRyYW5zcG9ydHNbdHJhbnMtPnRfdHlwZV0pCisJCXByaW50ayhLRVJOX0VSUiAiUkRTIFRyYW5zcG9ydCB0eXBlICVkIGFscmVhZHkgcmVnaXN0ZXJlZFxuIiwKKwkJCXRyYW5zLT50X3R5cGUpOworCWVsc2UgeworCQl0cmFuc3BvcnRzW3RyYW5zLT50X3R5cGVdID0gdHJhbnM7CisJCXByaW50ayhLRVJOX0lORk8gIlJlZ2lzdGVyZWQgUkRTLyVzIHRyYW5zcG9ydFxuIiwgdHJhbnMtPnRfbmFtZSk7CisJfQogCiAJdXBfd3JpdGUoJnJkc190cmFuc19zZW0pOwogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfdHJhbnNfcmVnaXN0ZXIpOwogCiB2b2lkIHJkc190cmFuc191bnJlZ2lzdGVyKHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucykKIHsKIAlkb3duX3dyaXRlKCZyZHNfdHJhbnNfc2VtKTsKIAotCWxpc3RfZGVsX2luaXQoJnRyYW5zLT50X2l0ZW0pOworCXRyYW5zcG9ydHNbdHJhbnMtPnRfdHlwZV0gPSBOVUxMOwogCXByaW50ayhLRVJOX0lORk8gIlVucmVnaXN0ZXJlZCBSRFMvJXMgdHJhbnNwb3J0XG4iLCB0cmFucy0+dF9uYW1lKTsKIAogCXVwX3dyaXRlKCZyZHNfdHJhbnNfc2VtKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJkc190cmFuc191bnJlZ2lzdGVyKTsKIAogc3RydWN0IHJkc190cmFuc3BvcnQgKnJkc190cmFuc19nZXRfcHJlZmVycmVkKF9fYmUzMiBhZGRyKQogewotCXN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFuczsKIAlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqcmV0ID0gTlVMTDsKKwlpbnQgaTsKIAogCWlmIChJTl9MT09QQkFDSyhudG9obChhZGRyKSkpCiAJCXJldHVybiAmcmRzX2xvb3BfdHJhbnNwb3J0OwogCiAJZG93bl9yZWFkKCZyZHNfdHJhbnNfc2VtKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyYW5zLCAmcmRzX3RyYW5zcG9ydHMsIHRfaXRlbSkgewotCQlpZiAodHJhbnMtPmxhZGRyX2NoZWNrKGFkZHIpID09IDApIHsKLQkJCXJldCA9IHRyYW5zOworCWZvciAoaSA9IDA7IGkgPCBSRFNfVFJBTlNfQ09VTlQ7IGkrKykKKwl7CisJCWlmICh0cmFuc3BvcnRzW2ldICYmICh0cmFuc3BvcnRzW2ldLT5sYWRkcl9jaGVjayhhZGRyKSA9PSAwKSkgeworCQkJcmV0ID0gdHJhbnNwb3J0c1tpXTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtOTcsMTIgKzEwNSwxNSBAQAogCXN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFuczsKIAl1bnNpZ25lZCBpbnQgdG90YWwgPSAwOwogCXVuc2lnbmVkIGludCBwYXJ0OworCWludCBpOwogCiAJcmRzX2luZm9faXRlcl91bm1hcChpdGVyKTsKIAlkb3duX3JlYWQoJnJkc190cmFuc19zZW0pOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgJnJkc190cmFuc3BvcnRzLCB0X2l0ZW0pIHsKLQkJaWYgKHRyYW5zLT5zdGF0c19pbmZvX2NvcHkgPT0gTlVMTCkKKwlmb3IgKGkgPSAwOyBpIDwgUkRTX1RSQU5TX0NPVU5UOyBpKyspCisJeworCQl0cmFucyA9IHRyYW5zcG9ydHNbaV07CisJCWlmICghdHJhbnMgfHwgIXRyYW5zLT5zdGF0c19pbmZvX2NvcHkpCiAJCQljb250aW51ZTsKIAogCQlwYXJ0ID0gdHJhbnMtPnN0YXRzX2luZm9fY29weShpdGVyLCBhdmFpbCk7CmRpZmYgLS1naXQgYS9uZXQvcmZraWxsL2NvcmUuYyBiL25ldC9yZmtpbGwvY29yZS5jCmluZGV4IDJmYzRhMTcuLmRiZWFmMjkgMTAwNjQ0Ci0tLSBhL25ldC9yZmtpbGwvY29yZS5jCisrKyBiL25ldC9yZmtpbGwvY29yZS5jCkBAIC01ODksMTEgKzU4OSwxMyBAQAogCQlyZXR1cm4gIndpbWF4IjsKIAljYXNlIFJGS0lMTF9UWVBFX1dXQU46CiAJCXJldHVybiAid3dhbiI7CisJY2FzZSBSRktJTExfVFlQRV9HUFM6CisJCXJldHVybiAiZ3BzIjsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9CiAKLQlCVUlMRF9CVUdfT04oTlVNX1JGS0lMTF9UWVBFUyAhPSBSRktJTExfVFlQRV9XV0FOICsgMSk7CisJQlVJTERfQlVHX09OKE5VTV9SRktJTExfVFlQRVMgIT0gUkZLSUxMX1RZUEVfR1BTICsgMSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHJma2lsbF90eXBlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LApAQCAtMTA5MSwxMCArMTA5MywxNiBAQAogCXN0cnVjdCByZmtpbGxfZXZlbnQgZXY7CiAKIAkvKiB3ZSBkb24ndCBuZWVkIHRoZSAnaGFyZCcgdmFyaWFibGUgYnV0IGFjY2VwdCBpdCAqLwotCWlmIChjb3VudCA8IHNpemVvZihldikgLSAxKQorCWlmIChjb3VudCA8IFJGS0lMTF9FVkVOVF9TSVpFX1YxIC0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmV2LCBidWYsIHNpemVvZihldikgLSAxKSkKKwkvKgorCSAqIENvcHkgYXMgbXVjaCBkYXRhIGFzIHdlIGNhbiBhY2NlcHQgaW50byBvdXIgJ2V2JyBidWZmZXIsCisJICogYnV0IHRlbGwgdXNlcnNwYWNlIGhvdyBtdWNoIHdlJ3ZlIGNvcGllZCBzbyBpdCBjYW4gZGV0ZXJtaW5lCisJICogb3VyIEFQSSB2ZXJzaW9uIGV2ZW4gaW4gYSB3cml0ZSgpIGNhbGwsIGlmIGl0IGNhcmVzLgorCSAqLworCWNvdW50ID0gbWluKGNvdW50LCBzaXplb2YoZXYpKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmV2LCBidWYsIGNvdW50KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoZXYub3AgIT0gUkZLSUxMX09QX0NIQU5HRSAmJiBldi5vcCAhPSBSRktJTExfT1BfQ0hBTkdFX0FMTCkKZGlmZiAtLWdpdCBhL25ldC9yb3NlL3Jvc2VfZGV2LmMgYi9uZXQvcm9zZS9yb3NlX2Rldi5jCmluZGV4IDM4OWQ2ZTAuLjQyNGI4OTMgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL3Jvc2VfZGV2LmMKKysrIGIvbmV0L3Jvc2Uvcm9zZV9kZXYuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcm9zZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgcm9zZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CiAKQEAgLTE0MSw3ICsxNDEsNyBAQAogCX0KIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJc3RhdHMtPnR4X2Vycm9ycysrOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyByb3NlX2hlYWRlcl9vcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItYWNrLmMgYi9uZXQvcnhycGMvYXItYWNrLmMKaW5kZXggM2FjMTY3Mi4uYzlmMWYwYSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FyLWFjay5jCisrKyBiL25ldC9yeHJwYy9hci1hY2suYwpAQCAtMjAsNyArMjAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgcnhycGNfYWNrX2RlZmVyID0gMTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKnJ4cnBjX2Fja3NbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCByeHJwY19hY2tzW10gPSB7CiAJIi0tLSIsICJSRVEiLCAiRFVQIiwgIk9PUyIsICJXSU4iLCAiTUVNIiwgIlBORyIsICJQTlIiLCAiRExZIiwgIklETCIsCiAJIi0/LSIKIH07CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvTWFrZWZpbGUgYi9uZXQvc2NoZWQvTWFrZWZpbGUKaW5kZXggNTRkOTUwYy4uZjE0ZTcxYiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL01ha2VmaWxlCisrKyBiL25ldC9zY2hlZC9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBUcmFmZmljIENvbnRyb2wgVW5pdC4KICMKIAotb2JqLXkJOj0gc2NoX2dlbmVyaWMubworb2JqLXkJOj0gc2NoX2dlbmVyaWMubyBzY2hfbXEubwogCiBvYmotJChDT05GSUdfTkVUX1NDSEVEKQkJKz0gc2NoX2FwaS5vIHNjaF9ibGFja2hvbGUubwogb2JqLSQoQ09ORklHX05FVF9DTFMpCQkrPSBjbHNfYXBpLm8KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCmluZGV4IDlkMDNjYzMuLjJkZmIzZTcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9hcGkuYwpAQCAtMTAxMSw3ICsxMDExLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBubGF0dHIgKgotZmluZF9kdW1wX2tpbmQoc3RydWN0IG5sbXNnaGRyICpuKQorZmluZF9kdW1wX2tpbmQoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpuKQogewogCXN0cnVjdCBubGF0dHIgKnRiMSwgKnRiMltUQ0FfQUNUX01BWCsxXTsKIAlzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfQUNUX01BWF9QUklPICsgMV07CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2FwaS5jIGIvbmV0L3NjaGVkL2Nsc19hcGkuYwppbmRleCAwOWNkY2RmLi42YTUzNjk0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jCisrKyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKQEAgLTE2OCw4ICsxNjgsNyBAQAogCiAJLyogRmluZCBxZGlzYyAqLwogCWlmICghcGFyZW50KSB7Ci0JCXN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKLQkJcSA9IGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmc7CisJCXEgPSBkZXYtPnFkaXNjOwogCQlwYXJlbnQgPSBxLT5oYW5kbGU7CiAJfSBlbHNlIHsKIAkJcSA9IHFkaXNjX2xvb2t1cChkZXYsIFRDX0hfTUFKKHQtPnRjbV9wYXJlbnQpKTsKQEAgLTE4MSw2ICsxODAsOSBAQAogCWlmICgoY29wcyA9IHEtPm9wcy0+Y2xfb3BzKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChjb3BzLT50Y2ZfY2hhaW4gPT0gTlVMTCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJLyogRG8gd2Ugc2VhcmNoIGZvciBmaWx0ZXIsIGF0dGFjaGVkIHRvIGNsYXNzPyAqLwogCWlmIChUQ19IX01JTihwYXJlbnQpKSB7CiAJCWNsID0gY29wcy0+Z2V0KHEsIHBhcmVudCk7CkBAIC00MDUsNyArNDA3LDYgQEAKIHN0YXRpYyBpbnQgdGNfZHVtcF90ZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKLQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWU7CiAJaW50IHQ7CiAJaW50IHNfdDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtNDI0LDE1ICs0MjUsMTYgQEAKIAlpZiAoKGRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCB0Y20tPnRjbV9pZmluZGV4KSkgPT0gTlVMTCkKIAkJcmV0dXJuIHNrYi0+bGVuOwogCi0JZGV2X3F1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApOwogCWlmICghdGNtLT50Y21fcGFyZW50KQotCQlxID0gZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZzsKKwkJcSA9IGRldi0+cWRpc2M7CiAJZWxzZQogCQlxID0gcWRpc2NfbG9va3VwKGRldiwgVENfSF9NQUoodGNtLT50Y21fcGFyZW50KSk7CiAJaWYgKCFxKQogCQlnb3RvIG91dDsKIAlpZiAoKGNvcHMgPSBxLT5vcHMtPmNsX29wcykgPT0gTlVMTCkKIAkJZ290byBlcnJvdXQ7CisJaWYgKGNvcHMtPnRjZl9jaGFpbiA9PSBOVUxMKQorCQlnb3RvIGVycm91dDsKIAlpZiAoVENfSF9NSU4odGNtLT50Y21fcGFyZW50KSkgewogCQljbCA9IGNvcHMtPmdldChxLCB0Y20tPnRjbV9wYXJlbnQpOwogCQlpZiAoY2wgPT0gMCkKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IGZkYjY5NGUuLjY5MmQ5YTQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwpAQCAtMjA3LDcgKzIwNyw3IEBACiBzdGF0aWMgdm9pZCBxZGlzY19saXN0X2FkZChzdHJ1Y3QgUWRpc2MgKnEpCiB7CiAJaWYgKChxLT5wYXJlbnQgIT0gVENfSF9ST09UKSAmJiAhKHEtPmZsYWdzICYgVENRX0ZfSU5HUkVTUykpCi0JCWxpc3RfYWRkX3RhaWwoJnEtPmxpc3QsICZxZGlzY19yb290X3NsZWVwaW5nKHEpLT5saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmcS0+bGlzdCwgJnFkaXNjX2RldihxKS0+cWRpc2MtPmxpc3QpOwogfQogCiB2b2lkIHFkaXNjX2xpc3RfZGVsKHN0cnVjdCBRZGlzYyAqcSkKQEAgLTIxOSwxNyArMjE5LDExIEBACiAKIHN0cnVjdCBRZGlzYyAqcWRpc2NfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBoYW5kbGUpCiB7Ci0JdW5zaWduZWQgaW50IGk7CiAJc3RydWN0IFFkaXNjICpxOwogCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKTsKLQkJc3RydWN0IFFkaXNjICp0eHFfcm9vdCA9IHR4cS0+cWRpc2Nfc2xlZXBpbmc7Ci0KLQkJcSA9IHFkaXNjX21hdGNoX2Zyb21fcm9vdCh0eHFfcm9vdCwgaGFuZGxlKTsKLQkJaWYgKHEpCi0JCQlnb3RvIG91dDsKLQl9CisJcSA9IHFkaXNjX21hdGNoX2Zyb21fcm9vdChkZXYtPnFkaXNjLCBoYW5kbGUpOworCWlmIChxKQorCQlnb3RvIG91dDsKIAogCXEgPSBxZGlzY19tYXRjaF9mcm9tX3Jvb3QoZGV2LT5yeF9xdWV1ZS5xZGlzY19zbGVlcGluZywgaGFuZGxlKTsKIG91dDoKQEAgLTYxNiwzMiArNjEwLDYgQEAKIAlyZXR1cm4gaT4wID8gYXV0b2hhbmRsZSA6IDA7CiB9CiAKLS8qIEF0dGFjaCB0b3BsZXZlbCBxZGlzYyB0byBkZXZpY2UgcXVldWUuICovCi0KLXN0YXRpYyBzdHJ1Y3QgUWRpc2MgKmRldl9ncmFmdF9xZGlzYyhzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsCi0JCQkJICAgICBzdHJ1Y3QgUWRpc2MgKnFkaXNjKQotewotCXN0cnVjdCBRZGlzYyAqb3FkaXNjID0gZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZzsKLQlzcGlubG9ja190ICpyb290X2xvY2s7Ci0KLQlyb290X2xvY2sgPSBxZGlzY19sb2NrKG9xZGlzYyk7Ci0Jc3Bpbl9sb2NrX2JoKHJvb3RfbG9jayk7Ci0KLQkvKiBQcnVuZSBvbGQgc2NoZWR1bGVyICovCi0JaWYgKG9xZGlzYyAmJiBhdG9taWNfcmVhZCgmb3FkaXNjLT5yZWZjbnQpIDw9IDEpCi0JCXFkaXNjX3Jlc2V0KG9xZGlzYyk7Ci0KLQkvKiAuLi4gYW5kIGdyYWZ0IG5ldyBvbmUgKi8KLQlpZiAocWRpc2MgPT0gTlVMTCkKLQkJcWRpc2MgPSAmbm9vcF9xZGlzYzsKLQlkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nID0gcWRpc2M7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGRldl9xdWV1ZS0+cWRpc2MsICZub29wX3FkaXNjKTsKLQotCXNwaW5fdW5sb2NrX2JoKHJvb3RfbG9jayk7Ci0KLQlyZXR1cm4gb3FkaXNjOwotfQotCiB2b2lkIHFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbihzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgaW50IG4pCiB7CiAJY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyAqY29wczsKQEAgLTcxMCw2ICs2NzgsMTEgQEAKIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApCiAJCQlkZXZfZGVhY3RpdmF0ZShkZXYpOwogCisJCWlmIChuZXcgJiYgbmV3LT5vcHMtPmF0dGFjaCkgeworCQkJbmV3LT5vcHMtPmF0dGFjaChuZXcpOworCQkJbnVtX3EgPSAwOworCQl9CisKIAkJZm9yIChpID0gMDsgaSA8IG51bV9xOyBpKyspIHsKIAkJCXN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSA9ICZkZXYtPnJ4X3F1ZXVlOwogCkBAIC03MjAsMjIgKzY5MywyNyBAQAogCQkJaWYgKG5ldyAmJiBpID4gMCkKIAkJCQlhdG9taWNfaW5jKCZuZXctPnJlZmNudCk7CiAKLQkJCW5vdGlmeV9hbmRfZGVzdHJveShza2IsIG4sIGNsYXNzaWQsIG9sZCwgbmV3KTsKKwkJCXFkaXNjX2Rlc3Ryb3kob2xkKTsKIAkJfQogCisJCW5vdGlmeV9hbmRfZGVzdHJveShza2IsIG4sIGNsYXNzaWQsIGRldi0+cWRpc2MsIG5ldyk7CisJCWlmIChuZXcgJiYgIW5ldy0+b3BzLT5hdHRhY2gpCisJCQlhdG9taWNfaW5jKCZuZXctPnJlZmNudCk7CisJCWRldi0+cWRpc2MgPSBuZXcgPyA6ICZub29wX3FkaXNjOworCiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQogCQkJZGV2X2FjdGl2YXRlKGRldik7CiAJfSBlbHNlIHsKIAkJY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyAqY29wcyA9IHBhcmVudC0+b3BzLT5jbF9vcHM7CiAKLQkJZXJyID0gLUVJTlZBTDsKLQotCQlpZiAoY29wcykgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJaWYgKGNvcHMgJiYgY29wcy0+Z3JhZnQpIHsKIAkJCXVuc2lnbmVkIGxvbmcgY2wgPSBjb3BzLT5nZXQocGFyZW50LCBjbGFzc2lkKTsKIAkJCWlmIChjbCkgewogCQkJCWVyciA9IGNvcHMtPmdyYWZ0KHBhcmVudCwgY2wsIG5ldywgJm9sZCk7CiAJCQkJY29wcy0+cHV0KHBhcmVudCwgY2wpOwotCQkJfQorCQkJfSBlbHNlCisJCQkJZXJyID0gLUVOT0VOVDsKIAkJfQogCQlpZiAoIWVycikKIAkJCW5vdGlmeV9hbmRfZGVzdHJveShza2IsIG4sIGNsYXNzaWQsIG9sZCwgbmV3KTsKQEAgLTc1NSw3ICs3MzMsOCBAQAogCiBzdGF0aWMgc3RydWN0IFFkaXNjICoKIHFkaXNjX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsCi0JICAgICB1MzIgcGFyZW50LCB1MzIgaGFuZGxlLCBzdHJ1Y3QgbmxhdHRyICoqdGNhLCBpbnQgKmVycnApCisJICAgICBzdHJ1Y3QgUWRpc2MgKnAsIHUzMiBwYXJlbnQsIHUzMiBoYW5kbGUsCisJICAgICBzdHJ1Y3QgbmxhdHRyICoqdGNhLCBpbnQgKmVycnApCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmxhdHRyICpraW5kID0gdGNhW1RDQV9LSU5EXTsKQEAgLTgzMiwyNCArODExLDIxIEBACiAJCWlmICh0Y2FbVENBX1JBVEVdKSB7CiAJCQlzcGlubG9ja190ICpyb290X2xvY2s7CiAKKwkJCWVyciA9IC1FT1BOT1RTVVBQOworCQkJaWYgKHNjaC0+ZmxhZ3MgJiBUQ1FfRl9NUVJPT1QpCisJCQkJZ290byBlcnJfb3V0NDsKKwogCQkJaWYgKChzY2gtPnBhcmVudCAhPSBUQ19IX1JPT1QpICYmCi0JCQkgICAgIShzY2gtPmZsYWdzICYgVENRX0ZfSU5HUkVTUykpCisJCQkgICAgIShzY2gtPmZsYWdzICYgVENRX0ZfSU5HUkVTUykgJiYKKwkJCSAgICAoIXAgfHwgIShwLT5mbGFncyAmIFRDUV9GX01RUk9PVCkpKQogCQkJCXJvb3RfbG9jayA9IHFkaXNjX3Jvb3Rfc2xlZXBpbmdfbG9jayhzY2gpOwogCQkJZWxzZQogCQkJCXJvb3RfbG9jayA9IHFkaXNjX2xvY2soc2NoKTsKIAogCQkJZXJyID0gZ2VuX25ld19lc3RpbWF0b3IoJnNjaC0+YnN0YXRzLCAmc2NoLT5yYXRlX2VzdCwKIAkJCQkJCXJvb3RfbG9jaywgdGNhW1RDQV9SQVRFXSk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJLyoKLQkJCQkgKiBBbnkgYnJva2VuIHFkaXNjcyB0aGF0IHdvdWxkIHJlcXVpcmUKLQkJCQkgKiBhIG9wcy0+cmVzZXQoKSBoZXJlPyBUaGUgcWRpc2Mgd2FzIG5ldmVyCi0JCQkJICogaW4gYWN0aW9uIHNvIGl0IHNob3VsZG4ndCBiZSBuZWNlc3NhcnkuCi0JCQkJICovCi0JCQkJaWYgKG9wcy0+ZGVzdHJveSkKLQkJCQkJb3BzLT5kZXN0cm95KHNjaCk7Ci0JCQkJZ290byBlcnJfb3V0MzsKLQkJCX0KKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnJfb3V0NDsKIAkJfQogCiAJCXFkaXNjX2xpc3RfYWRkKHNjaCk7CkBAIC04NjUsNiArODQxLDE1IEBACiBlcnJfb3V0OgogCSplcnJwID0gZXJyOwogCXJldHVybiBOVUxMOworCitlcnJfb3V0NDoKKwkvKgorCSAqIEFueSBicm9rZW4gcWRpc2NzIHRoYXQgd291bGQgcmVxdWlyZSBhIG9wcy0+cmVzZXQoKSBoZXJlPworCSAqIFRoZSBxZGlzYyB3YXMgbmV2ZXIgaW4gYWN0aW9uIHNvIGl0IHNob3VsZG4ndCBiZSBuZWNlc3NhcnkuCisJICovCisJaWYgKG9wcy0+ZGVzdHJveSkKKwkJb3BzLT5kZXN0cm95KHNjaCk7CisJZ290byBlcnJfb3V0MzsKIH0KIAogc3RhdGljIGludCBxZGlzY19jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKip0Y2EpCkBAIC04ODksMTMgKzg3NCwxNiBAQAogCXFkaXNjX3B1dF9zdGFiKHNjaC0+c3RhYik7CiAJc2NoLT5zdGFiID0gc3RhYjsKIAotCWlmICh0Y2FbVENBX1JBVEVdKQorCWlmICh0Y2FbVENBX1JBVEVdKSB7CiAJCS8qIE5COiBpZ25vcmVzIGVycm9ycyBmcm9tIHJlcGxhY2VfZXN0aW1hdG9yCiAJCSAgIGJlY2F1c2UgY2hhbmdlIGNhbid0IGJlIHVuZG9uZS4gKi8KKwkJaWYgKHNjaC0+ZmxhZ3MgJiBUQ1FfRl9NUVJPT1QpCisJCQlnb3RvIG91dDsKIAkJZ2VuX3JlcGxhY2VfZXN0aW1hdG9yKCZzY2gtPmJzdGF0cywgJnNjaC0+cmF0ZV9lc3QsCiAJCQkJCSAgICBxZGlzY19yb290X3NsZWVwaW5nX2xvY2soc2NoKSwKIAkJCQkJICAgIHRjYVtUQ0FfUkFURV0pOwotCisJfQorb3V0OgogCXJldHVybiAwOwogfQogCkBAIC05NzQsOSArOTYyLDcgQEAKIAkJCQlxID0gZGV2LT5yeF9xdWV1ZS5xZGlzY19zbGVlcGluZzsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCXN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZTsKLQkJCWRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKLQkJCXEgPSBkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nOworCQkJcSA9IGRldi0+cWRpc2M7CiAJCX0KIAkJaWYgKCFxKQogCQkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0xMDQ0LDkgKzEwMzAsNyBAQAogCQkJCXEgPSBkZXYtPnJ4X3F1ZXVlLnFkaXNjX3NsZWVwaW5nOwogCQkJfQogCQl9IGVsc2UgewotCQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlOwotCQkJZGV2X3F1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApOwotCQkJcSA9IGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmc7CisJCQlxID0gZGV2LT5xZGlzYzsKIAkJfQogCiAJCS8qIEl0IG1heSBiZSBkZWZhdWx0IHFkaXNjLCBpZ25vcmUgaXQgKi8KQEAgLTExMjMsMTMgKzExMDcsMTkgQEAKIAlpZiAoIShuLT5ubG1zZ19mbGFncyZOTE1fRl9DUkVBVEUpKQogCQlyZXR1cm4gLUVOT0VOVDsKIAlpZiAoY2xpZCA9PSBUQ19IX0lOR1JFU1MpCi0JCXEgPSBxZGlzY19jcmVhdGUoZGV2LCAmZGV2LT5yeF9xdWV1ZSwKKwkJcSA9IHFkaXNjX2NyZWF0ZShkZXYsICZkZXYtPnJ4X3F1ZXVlLCBwLAogCQkJCSB0Y20tPnRjbV9wYXJlbnQsIHRjbS0+dGNtX3BhcmVudCwKIAkJCQkgdGNhLCAmZXJyKTsKLQllbHNlCi0JCXEgPSBxZGlzY19jcmVhdGUoZGV2LCBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCksCisJZWxzZSB7CisJCXVuc2lnbmVkIGludCBudHggPSAwOworCisJCWlmIChwICYmIHAtPm9wcy0+Y2xfb3BzICYmIHAtPm9wcy0+Y2xfb3BzLT5zZWxlY3RfcXVldWUpCisJCQludHggPSBwLT5vcHMtPmNsX29wcy0+c2VsZWN0X3F1ZXVlKHAsIHRjbSk7CisKKwkJcSA9IHFkaXNjX2NyZWF0ZShkZXYsIG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBudHgpLCBwLAogCQkJCSB0Y20tPnRjbV9wYXJlbnQsIHRjbS0+dGNtX2hhbmRsZSwKIAkJCQkgdGNhLCAmZXJyKTsKKwl9CiAJaWYgKHEgPT0gTlVMTCkgewogCQlpZiAoZXJyID09IC1FQUdBSU4pCiAJCQlnb3RvIHJlcGxheTsKQEAgLTEyOTEsOCArMTI4MSw3IEBACiAJCQlzX3FfaWR4ID0gMDsKIAkJcV9pZHggPSAwOwogCi0JCWRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKLQkJaWYgKHRjX2R1bXBfcWRpc2Nfcm9vdChkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nLCBza2IsIGNiLCAmcV9pZHgsIHNfcV9pZHgpIDwgMCkKKwkJaWYgKHRjX2R1bXBfcWRpc2Nfcm9vdChkZXYtPnFkaXNjLCBza2IsIGNiLCAmcV9pZHgsIHNfcV9pZHgpIDwgMCkKIAkJCWdvdG8gZG9uZTsKIAogCQlkZXZfcXVldWUgPSAmZGV2LT5yeF9xdWV1ZTsKQEAgLTEzMjMsNyArMTMxMiw2IEBACiBzdGF0aWMgaW50IHRjX2N0bF90Y2xhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlOwogCXN0cnVjdCB0Y21zZyAqdGNtID0gTkxNU0dfREFUQShuKTsKIAlzdHJ1Y3QgbmxhdHRyICp0Y2FbVENBX01BWCArIDFdOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMzYxLDcgKzEzNDksNiBAQAogCiAJLyogU3RlcCAxLiBEZXRlcm1pbmUgcWRpc2MgaGFuZGxlIFg6MCAqLwogCi0JZGV2X3F1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApOwogCWlmIChwaWQgIT0gVENfSF9ST09UKSB7CiAJCXUzMiBxaWQxID0gVENfSF9NQUoocGlkKTsKIApAQCAtMTM3Miw3ICsxMzU5LDcgQEAKIAkJfSBlbHNlIGlmIChxaWQxKSB7CiAJCQlxaWQgPSBxaWQxOwogCQl9IGVsc2UgaWYgKHFpZCA9PSAwKQotCQkJcWlkID0gZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZy0+aGFuZGxlOworCQkJcWlkID0gZGV2LT5xZGlzYy0+aGFuZGxlOwogCiAJCS8qIE5vdyBxaWQgaXMgZ2VudWluZSBxZGlzYyBoYW5kbGUgY29uc2lzdGVudAogCQkgICBib3RoIHdpdGggcGFyZW50IGFuZCBjaGlsZC4KQEAgLTEzODMsNyArMTM3MCw3IEBACiAJCQlwaWQgPSBUQ19IX01BS0UocWlkLCBwaWQpOwogCX0gZWxzZSB7CiAJCWlmIChxaWQgPT0gMCkKLQkJCXFpZCA9IGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmctPmhhbmRsZTsKKwkJCXFpZCA9IGRldi0+cWRpc2MtPmhhbmRsZTsKIAl9CiAKIAkvKiBPSy4gTG9jYXRlIHFkaXNjICovCkBAIC0xNDE3LDcgKzE0MDQsOSBAQAogCQkJCWdvdG8gb3V0OwogCQkJYnJlYWs7CiAJCWNhc2UgUlRNX0RFTFRDTEFTUzoKLQkJCWVyciA9IGNvcHMtPmRlbGV0ZShxLCBjbCk7CisJCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJCWlmIChjb3BzLT5kZWxldGUpCisJCQkJZXJyID0gY29wcy0+ZGVsZXRlKHEsIGNsKTsKIAkJCWlmIChlcnIgPT0gMCkKIAkJCQl0Y2xhc3Nfbm90aWZ5KHNrYiwgbiwgcSwgY2wsIFJUTV9ERUxUQ0xBU1MpOwogCQkJZ290byBvdXQ7CkBAIC0xNDMxLDcgKzE0MjAsOSBAQAogCX0KIAogCW5ld19jbCA9IGNsOwotCWVyciA9IGNvcHMtPmNoYW5nZShxLCBjbGlkLCBwaWQsIHRjYSwgJm5ld19jbCk7CisJZXJyID0gLUVPUE5PVFNVUFA7CisJaWYgKGNvcHMtPmNoYW5nZSkKKwkJZXJyID0gY29wcy0+Y2hhbmdlKHEsIGNsaWQsIHBpZCwgdGNhLCAmbmV3X2NsKTsKIAlpZiAoZXJyID09IDApCiAJCXRjbGFzc19ub3RpZnkoc2tiLCBuLCBxLCBuZXdfY2wsIFJUTV9ORVdUQ0xBU1MpOwogCkBAIC0xNTg2LDggKzE1NzcsNyBAQAogCXNfdCA9IGNiLT5hcmdzWzBdOwogCXQgPSAwOwogCi0JZGV2X3F1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApOwotCWlmICh0Y19kdW1wX3RjbGFzc19yb290KGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmcsIHNrYiwgdGNtLCBjYiwgJnQsIHNfdCkgPCAwKQorCWlmICh0Y19kdW1wX3RjbGFzc19yb290KGRldi0+cWRpc2MsIHNrYiwgdGNtLCBjYiwgJnQsIHNfdCkgPCAwKQogCQlnb3RvIGRvbmU7CiAKIAlkZXZfcXVldWUgPSAmZGV2LT5yeF9xdWV1ZTsKQEAgLTE3MDcsNiArMTY5Nyw3IEBACiB7CiAJcmVnaXN0ZXJfcWRpc2MoJnBmaWZvX3FkaXNjX29wcyk7CiAJcmVnaXN0ZXJfcWRpc2MoJmJmaWZvX3FkaXNjX29wcyk7CisJcmVnaXN0ZXJfcWRpc2MoJm1xX3FkaXNjX29wcyk7CiAJcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAicHNjaGVkIiwgMCwgJnBzY2hlZF9mb3BzKTsKIAogCXJ0bmxfcmVnaXN0ZXIoUEZfVU5TUEVDLCBSVE1fTkVXUURJU0MsIHRjX21vZGlmeV9xZGlzYywgTlVMTCk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2NicS5jIGIvbmV0L3NjaGVkL3NjaF9jYnEuYwppbmRleCBkNTc5OGUxLi41YjEzMmM0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2NicS5jCisrKyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKQEAgLTE2MjEsMjkgKzE2MjEsMjUgQEAKIHsKIAlzdHJ1Y3QgY2JxX2NsYXNzICpjbCA9IChzdHJ1Y3QgY2JxX2NsYXNzKilhcmc7CiAKLQlpZiAoY2wpIHsKLQkJaWYgKG5ldyA9PSBOVUxMKSB7Ci0JCQluZXcgPSBxZGlzY19jcmVhdGVfZGZsdChxZGlzY19kZXYoc2NoKSwgc2NoLT5kZXZfcXVldWUsCi0JCQkJCQkmcGZpZm9fcWRpc2Nfb3BzLAotCQkJCQkJY2wtPmNvbW1vbi5jbGFzc2lkKTsKLQkJCWlmIChuZXcgPT0gTlVMTCkKLQkJCQlyZXR1cm4gLUVOT0JVRlM7Ci0JCX0gZWxzZSB7CisJaWYgKG5ldyA9PSBOVUxMKSB7CisJCW5ldyA9IHFkaXNjX2NyZWF0ZV9kZmx0KHFkaXNjX2RldihzY2gpLCBzY2gtPmRldl9xdWV1ZSwKKwkJCQkJJnBmaWZvX3FkaXNjX29wcywgY2wtPmNvbW1vbi5jbGFzc2lkKTsKKwkJaWYgKG5ldyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9CVUZTOworCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCi0JCQlpZiAoY2wtPnBvbGljZSA9PSBUQ19QT0xJQ0VfUkVDTEFTU0lGWSkKLQkJCQluZXctPnJlc2hhcGVfZmFpbCA9IGNicV9yZXNoYXBlX2ZhaWw7CisJCWlmIChjbC0+cG9saWNlID09IFRDX1BPTElDRV9SRUNMQVNTSUZZKQorCQkJbmV3LT5yZXNoYXBlX2ZhaWwgPSBjYnFfcmVzaGFwZV9mYWlsOwogI2VuZGlmCi0JCX0KLQkJc2NoX3RyZWVfbG9jayhzY2gpOwotCQkqb2xkID0gY2wtPnE7Ci0JCWNsLT5xID0gbmV3OwotCQlxZGlzY190cmVlX2RlY3JlYXNlX3FsZW4oKm9sZCwgKCpvbGQpLT5xLnFsZW4pOwotCQlxZGlzY19yZXNldCgqb2xkKTsKLQkJc2NoX3RyZWVfdW5sb2NrKHNjaCk7Ci0KLQkJcmV0dXJuIDA7CiAJfQotCXJldHVybiAtRU5PRU5UOworCXNjaF90cmVlX2xvY2soc2NoKTsKKwkqb2xkID0gY2wtPnE7CisJY2wtPnEgPSBuZXc7CisJcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKCpvbGQsICgqb2xkKS0+cS5xbGVuKTsKKwlxZGlzY19yZXNldCgqb2xkKTsKKwlzY2hfdHJlZV91bmxvY2soc2NoKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IFFkaXNjICoKQEAgLTE2NTEsNyArMTY0Nyw3IEBACiB7CiAJc3RydWN0IGNicV9jbGFzcyAqY2wgPSAoc3RydWN0IGNicV9jbGFzcyopYXJnOwogCi0JcmV0dXJuIGNsID8gY2wtPnEgOiBOVUxMOworCXJldHVybiBjbC0+cTsKIH0KIAogc3RhdGljIHZvaWQgY2JxX3FsZW5fbm90aWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZykKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggMjdkMDM4MS4uNGFlNmFhNSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTM3LDE1ICszNywxMSBAQAogICogLSB1cGRhdGVzIHRvIHRyZWUgYW5kIHRyZWUgd2Fsa2luZyBhcmUgb25seSBkb25lIHVuZGVyIHRoZSBydG5sIG11dGV4LgogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IHFkaXNjX3FsZW4oc3RydWN0IFFkaXNjICpxKQotewotCXJldHVybiBxLT5xLnFsZW47Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGRldl9yZXF1ZXVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnEpCiB7CiAJcS0+Z3NvX3NrYiA9IHNrYjsKIAlxLT5xc3RhdHMucmVxdWV1ZXMrKzsKKwlxLT5xLnFsZW4rKzsJLyogaXQncyBzdGlsbCBwYXJ0IG9mIHRoZSBxdWV1ZSAqLwogCV9fbmV0aWZfc2NoZWR1bGUocSk7CiAKIAlyZXR1cm4gMDsKQEAgLTYxLDkgKzU3LDExIEBACiAKIAkJLyogY2hlY2sgdGhlIHJlYXNvbiBvZiByZXF1ZXVpbmcgd2l0aG91dCB0eCBsb2NrIGZpcnN0ICovCiAJCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7Ci0JCWlmICghbmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpICYmICFuZXRpZl90eF9xdWV1ZV9mcm96ZW4odHhxKSkKKwkJaWYgKCFuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgJiYKKwkJICAgICFuZXRpZl90eF9xdWV1ZV9mcm96ZW4odHhxKSkgewogCQkJcS0+Z3NvX3NrYiA9IE5VTEw7Ci0JCWVsc2UKKwkJCXEtPnEucWxlbi0tOworCQl9IGVsc2UKIAkJCXNrYiA9IE5VTEw7CiAJfSBlbHNlIHsKIAkJc2tiID0gcS0+ZGVxdWV1ZShxKTsKQEAgLTEwMyw0NCArMTAxLDIzIEBACiB9CiAKIC8qCi0gKiBOT1RFOiBDYWxsZWQgdW5kZXIgcWRpc2NfbG9jayhxKSB3aXRoIGxvY2FsbHkgZGlzYWJsZWQgQkguCi0gKgotICogX19RRElTQ19TVEFURV9SVU5OSU5HIGd1YXJhbnRlZXMgb25seSBvbmUgQ1BVIGNhbiBwcm9jZXNzCi0gKiB0aGlzIHFkaXNjIGF0IGEgdGltZS4gcWRpc2NfbG9jayhxKSBzZXJpYWxpemVzIHF1ZXVlIGFjY2Vzc2VzIGZvcgotICogdGhpcyBxdWV1ZS4KLSAqCi0gKiAgbmV0aWZfdHhfbG9jayBzZXJpYWxpemVzIGFjY2Vzc2VzIHRvIGRldmljZSBkcml2ZXIuCi0gKgotICogIHFkaXNjX2xvY2socSkgYW5kIG5ldGlmX3R4X2xvY2sgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwKLSAqICBpZiBvbmUgaXMgZ3JhYmJlZCwgYW5vdGhlciBtdXN0IGJlIGZyZWUuCi0gKgotICogTm90ZSwgdGhhdCB0aGlzIHByb2NlZHVyZSBjYW4gYmUgY2FsbGVkIGJ5IGEgd2F0Y2hkb2cgdGltZXIKKyAqIFRyYW5zbWl0IG9uZSBza2IsIGFuZCBoYW5kbGUgdGhlIHJldHVybiBzdGF0dXMgYXMgcmVxdWlyZWQuIEhvbGRpbmcgdGhlCisgKiBfX1FESVNDX1NUQVRFX1JVTk5JTkcgYml0IGd1YXJhbnRlZXMgdGhhdCBvbmx5IG9uZSBDUFUgY2FuIGV4ZWN1dGUgdGhpcworICogZnVuY3Rpb24uCiAgKgogICogUmV0dXJucyB0byB0aGUgY2FsbGVyOgogICoJCQkJMCAgLSBxdWV1ZSBpcyBlbXB0eSBvciB0aHJvdHRsZWQuCiAgKgkJCQk+MCAtIHF1ZXVlIGlzIG5vdCBlbXB0eS4KLSAqCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHFkaXNjX3Jlc3RhcnQoc3RydWN0IFFkaXNjICpxKQoraW50IHNjaF9kaXJlY3RfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnEsCisJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEsCisJCSAgICBzcGlubG9ja190ICpyb290X2xvY2spCiB7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCWludCByZXQgPSBORVRERVZfVFhfQlVTWTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXNwaW5sb2NrX3QgKnJvb3RfbG9jazsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JLyogRGVxdWV1ZSBwYWNrZXQgKi8KLQlpZiAodW5saWtlbHkoKHNrYiA9IGRlcXVldWVfc2tiKHEpKSA9PSBOVUxMKSkKLQkJcmV0dXJuIDA7Ci0KLQlyb290X2xvY2sgPSBxZGlzY19sb2NrKHEpOwogCiAJLyogQW5kIHJlbGVhc2UgcWRpc2MgKi8KIAlzcGluX3VubG9jayhyb290X2xvY2spOwogCi0JZGV2ID0gcWRpc2NfZGV2KHEpOwotCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7Ci0KIAlIQVJEX1RYX0xPQ0soZGV2LCB0eHEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJaWYgKCFuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgJiYKIAkgICAgIW5ldGlmX3R4X3F1ZXVlX2Zyb3plbih0eHEpKQpAQCAtMTc3LDYgKzE1NCw0NCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBOT1RFOiBDYWxsZWQgdW5kZXIgcWRpc2NfbG9jayhxKSB3aXRoIGxvY2FsbHkgZGlzYWJsZWQgQkguCisgKgorICogX19RRElTQ19TVEFURV9SVU5OSU5HIGd1YXJhbnRlZXMgb25seSBvbmUgQ1BVIGNhbiBwcm9jZXNzCisgKiB0aGlzIHFkaXNjIGF0IGEgdGltZS4gcWRpc2NfbG9jayhxKSBzZXJpYWxpemVzIHF1ZXVlIGFjY2Vzc2VzIGZvcgorICogdGhpcyBxdWV1ZS4KKyAqCisgKiAgbmV0aWZfdHhfbG9jayBzZXJpYWxpemVzIGFjY2Vzc2VzIHRvIGRldmljZSBkcml2ZXIuCisgKgorICogIHFkaXNjX2xvY2socSkgYW5kIG5ldGlmX3R4X2xvY2sgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwKKyAqICBpZiBvbmUgaXMgZ3JhYmJlZCwgYW5vdGhlciBtdXN0IGJlIGZyZWUuCisgKgorICogTm90ZSwgdGhhdCB0aGlzIHByb2NlZHVyZSBjYW4gYmUgY2FsbGVkIGJ5IGEgd2F0Y2hkb2cgdGltZXIKKyAqCisgKiBSZXR1cm5zIHRvIHRoZSBjYWxsZXI6CisgKgkJCQkwICAtIHF1ZXVlIGlzIGVtcHR5IG9yIHRocm90dGxlZC4KKyAqCQkJCT4wIC0gcXVldWUgaXMgbm90IGVtcHR5LgorICoKKyAqLworc3RhdGljIGlubGluZSBpbnQgcWRpc2NfcmVzdGFydChzdHJ1Y3QgUWRpc2MgKnEpCit7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3BpbmxvY2tfdCAqcm9vdF9sb2NrOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwkvKiBEZXF1ZXVlIHBhY2tldCAqLworCXNrYiA9IGRlcXVldWVfc2tiKHEpOworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuIDA7CisKKwlyb290X2xvY2sgPSBxZGlzY19sb2NrKHEpOworCWRldiA9IHFkaXNjX2RldihxKTsKKwl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOworCisJcmV0dXJuIHNjaF9kaXJlY3RfeG1pdChza2IsIHEsIGRldiwgdHhxLCByb290X2xvY2spOworfQorCiB2b2lkIF9fcWRpc2NfcnVuKHN0cnVjdCBRZGlzYyAqcSkKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUgPSBqaWZmaWVzOwpAQCAtMzkxLDE4ICs0MDYsMzggQEAKIAogI2RlZmluZSBQRklGT19GQVNUX0JBTkRTIDMKIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpwcmlvMmxpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgICBzdHJ1Y3QgUWRpc2MgKnFkaXNjKQorLyoKKyAqIFByaXZhdGUgZGF0YSBmb3IgYSBwZmlmb19mYXN0IHNjaGVkdWxlciBjb250YWluaW5nOgorICogCS0gcXVldWVzIGZvciB0aGUgdGhyZWUgYmFuZAorICogCS0gYml0bWFwIGluZGljYXRpbmcgd2hpY2ggb2YgdGhlIGJhbmRzIGNvbnRhaW4gc2ticworICovCitzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2IHsKKwl1MzIgYml0bWFwOworCXN0cnVjdCBza19idWZmX2hlYWQgcVtQRklGT19GQVNUX0JBTkRTXTsKK307CisKKy8qCisgKiBDb252ZXJ0IGEgYml0bWFwIHRvIHRoZSBmaXJzdCBiYW5kIG51bWJlciB3aGVyZSBhbiBza2IgaXMgcXVldWVkLCB3aGVyZToKKyAqIAliaXRtYXA9MCBtZWFucyB0aGVyZSBhcmUgbm8gc2ticyBvbiBhbnkgYmFuZC4KKyAqIAliaXRtYXA9MSBtZWFucyB0aGVyZSBpcyBhbiBza2Igb24gYmFuZCAwLgorICoJYml0bWFwPTcgbWVhbnMgdGhlcmUgYXJlIHNrYnMgb24gYWxsIDMgYmFuZHMsIGV0Yy4KKyAqLworc3RhdGljIGNvbnN0IGludCBiaXRtYXAyYmFuZFtdID0gey0xLCAwLCAxLCAwLCAyLCAwLCAxLCAwfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpiYW5kMmxpc3Qoc3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiwKKwkJCQkJICAgICBpbnQgYmFuZCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0ID0gcWRpc2NfcHJpdihxZGlzYyk7Ci0JcmV0dXJuIGxpc3QgKyBwcmlvMmJhbmRbc2tiLT5wcmlvcml0eSAmIFRDX1BSSU9fTUFYXTsKKwlyZXR1cm4gcHJpdi0+cSArIGJhbmQ7CiB9CiAKIHN0YXRpYyBpbnQgcGZpZm9fZmFzdF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyogcWRpc2MpCiB7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCA9IHByaW8ybGlzdChza2IsIHFkaXNjKTsKKwlpZiAoc2tiX3F1ZXVlX2xlbigmcWRpc2MtPnEpIDwgcWRpc2NfZGV2KHFkaXNjKS0+dHhfcXVldWVfbGVuKSB7CisJCWludCBiYW5kID0gcHJpbzJiYW5kW3NrYi0+cHJpb3JpdHkgJiBUQ19QUklPX01BWF07CisJCXN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTsKKwkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCA9IGJhbmQybGlzdChwcml2LCBiYW5kKTsKIAotCWlmIChza2JfcXVldWVfbGVuKGxpc3QpIDwgcWRpc2NfZGV2KHFkaXNjKS0+dHhfcXVldWVfbGVuKSB7CisJCXByaXYtPmJpdG1hcCB8PSAoMSA8PCBiYW5kKTsKIAkJcWRpc2MtPnEucWxlbisrOwogCQlyZXR1cm4gX19xZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBxZGlzYywgbGlzdCk7CiAJfQpAQCAtNDEyLDE0ICs0NDcsMTggQEAKIAogc3RhdGljIHN0cnVjdCBza19idWZmICpwZmlmb19mYXN0X2RlcXVldWUoc3RydWN0IFFkaXNjKiBxZGlzYykKIHsKLQlpbnQgcHJpbzsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0ID0gcWRpc2NfcHJpdihxZGlzYyk7CisJc3RydWN0IHBmaWZvX2Zhc3RfcHJpdiAqcHJpdiA9IHFkaXNjX3ByaXYocWRpc2MpOworCWludCBiYW5kID0gYml0bWFwMmJhbmRbcHJpdi0+Yml0bWFwXTsKIAotCWZvciAocHJpbyA9IDA7IHByaW8gPCBQRklGT19GQVNUX0JBTkRTOyBwcmlvKyspIHsKLQkJaWYgKCFza2JfcXVldWVfZW1wdHkobGlzdCArIHByaW8pKSB7Ci0JCQlxZGlzYy0+cS5xbGVuLS07Ci0JCQlyZXR1cm4gX19xZGlzY19kZXF1ZXVlX2hlYWQocWRpc2MsIGxpc3QgKyBwcmlvKTsKLQkJfQorCWlmIChsaWtlbHkoYmFuZCA+PSAwKSkgeworCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0ID0gYmFuZDJsaXN0KHByaXYsIGJhbmQpOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19xZGlzY19kZXF1ZXVlX2hlYWQocWRpc2MsIGxpc3QpOworCisJCXFkaXNjLT5xLnFsZW4tLTsKKwkJaWYgKHNrYl9xdWV1ZV9lbXB0eShsaXN0KSkKKwkJCXByaXYtPmJpdG1hcCAmPSB+KDEgPDwgYmFuZCk7CisKKwkJcmV0dXJuIHNrYjsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTQyNywxMiArNDY2LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGZpZm9fZmFzdF9wZWVrKHN0cnVjdCBRZGlzYyogcWRpc2MpCiB7Ci0JaW50IHByaW87Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCA9IHFkaXNjX3ByaXYocWRpc2MpOworCXN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTsKKwlpbnQgYmFuZCA9IGJpdG1hcDJiYW5kW3ByaXYtPmJpdG1hcF07CiAKLQlmb3IgKHByaW8gPSAwOyBwcmlvIDwgUEZJRk9fRkFTVF9CQU5EUzsgcHJpbysrKSB7Ci0JCWlmICghc2tiX3F1ZXVlX2VtcHR5KGxpc3QgKyBwcmlvKSkKLQkJCXJldHVybiBza2JfcGVlayhsaXN0ICsgcHJpbyk7CisJaWYgKGJhbmQgPj0gMCkgeworCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0ID0gYmFuZDJsaXN0KHByaXYsIGJhbmQpOworCisJCXJldHVybiBza2JfcGVlayhsaXN0KTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTQ0MSwxMSArNDgxLDEyIEBACiBzdGF0aWMgdm9pZCBwZmlmb19mYXN0X3Jlc2V0KHN0cnVjdCBRZGlzYyogcWRpc2MpCiB7CiAJaW50IHByaW87Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCA9IHFkaXNjX3ByaXYocWRpc2MpOworCXN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTsKIAogCWZvciAocHJpbyA9IDA7IHByaW8gPCBQRklGT19GQVNUX0JBTkRTOyBwcmlvKyspCi0JCV9fcWRpc2NfcmVzZXRfcXVldWUocWRpc2MsIGxpc3QgKyBwcmlvKTsKKwkJX19xZGlzY19yZXNldF9xdWV1ZShxZGlzYywgYmFuZDJsaXN0KHByaXYsIHByaW8pKTsKIAorCXByaXYtPmJpdG1hcCA9IDA7CiAJcWRpc2MtPnFzdGF0cy5iYWNrbG9nID0gMDsKIAlxZGlzYy0+cS5xbGVuID0gMDsKIH0KQEAgLTQ2NSwxNyArNTA2LDE3IEBACiBzdGF0aWMgaW50IHBmaWZvX2Zhc3RfaW5pdChzdHJ1Y3QgUWRpc2MgKnFkaXNjLCBzdHJ1Y3QgbmxhdHRyICpvcHQpCiB7CiAJaW50IHByaW87Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCA9IHFkaXNjX3ByaXYocWRpc2MpOworCXN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTsKIAogCWZvciAocHJpbyA9IDA7IHByaW8gPCBQRklGT19GQVNUX0JBTkRTOyBwcmlvKyspCi0JCXNrYl9xdWV1ZV9oZWFkX2luaXQobGlzdCArIHByaW8pOworCQlza2JfcXVldWVfaGVhZF9pbml0KGJhbmQybGlzdChwcml2LCBwcmlvKSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBRZGlzY19vcHMgcGZpZm9fZmFzdF9vcHMgX19yZWFkX21vc3RseSA9IHsKK3N0cnVjdCBRZGlzY19vcHMgcGZpZm9fZmFzdF9vcHMgX19yZWFkX21vc3RseSA9IHsKIAkuaWQJCT0JInBmaWZvX2Zhc3QiLAotCS5wcml2X3NpemUJPQlQRklGT19GQVNUX0JBTkRTICogc2l6ZW9mKHN0cnVjdCBza19idWZmX2hlYWQpLAorCS5wcml2X3NpemUJPQlzaXplb2Yoc3RydWN0IHBmaWZvX2Zhc3RfcHJpdiksCiAJLmVucXVldWUJPQlwZmlmb19mYXN0X2VucXVldWUsCiAJLmRlcXVldWUJPQlwZmlmb19mYXN0X2RlcXVldWUsCiAJLnBlZWsJCT0JcGZpZm9fZmFzdF9wZWVrLApAQCAtNTQ3LDggKzU4OCwxMSBAQAogCWlmIChvcHMtPnJlc2V0KQogCQlvcHMtPnJlc2V0KHFkaXNjKTsKIAotCWtmcmVlX3NrYihxZGlzYy0+Z3NvX3NrYik7Ci0JcWRpc2MtPmdzb19za2IgPSBOVUxMOworCWlmIChxZGlzYy0+Z3NvX3NrYikgeworCQlrZnJlZV9za2IocWRpc2MtPmdzb19za2IpOworCQlxZGlzYy0+Z3NvX3NrYiA9IE5VTEw7CisJCXFkaXNjLT5xLnFsZW4gPSAwOworCX0KIH0KIEVYUE9SVF9TWU1CT0wocWRpc2NfcmVzZXQpOwogCkBAIC01NzksMTcgKzYyMywyOSBAQAogfQogRVhQT1JUX1NZTUJPTChxZGlzY19kZXN0cm95KTsKIAotc3RhdGljIGJvb2wgZGV2X2FsbF9xZGlzY19zbGVlcGluZ19ub29wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisvKiBBdHRhY2ggdG9wbGV2ZWwgcWRpc2MgdG8gZGV2aWNlIHF1ZXVlLiAqLworc3RydWN0IFFkaXNjICpkZXZfZ3JhZnRfcWRpc2Moc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAorCQkJICAgICAgc3RydWN0IFFkaXNjICpxZGlzYykKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgUWRpc2MgKm9xZGlzYyA9IGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmc7CisJc3BpbmxvY2tfdCAqcm9vdF9sb2NrOwogCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBpKTsKKwlyb290X2xvY2sgPSBxZGlzY19sb2NrKG9xZGlzYyk7CisJc3Bpbl9sb2NrX2JoKHJvb3RfbG9jayk7CiAKLQkJaWYgKHR4cS0+cWRpc2Nfc2xlZXBpbmcgIT0gJm5vb3BfcWRpc2MpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOworCS8qIFBydW5lIG9sZCBzY2hlZHVsZXIgKi8KKwlpZiAob3FkaXNjICYmIGF0b21pY19yZWFkKCZvcWRpc2MtPnJlZmNudCkgPD0gMSkKKwkJcWRpc2NfcmVzZXQob3FkaXNjKTsKKworCS8qIC4uLiBhbmQgZ3JhZnQgbmV3IG9uZSAqLworCWlmIChxZGlzYyA9PSBOVUxMKQorCQlxZGlzYyA9ICZub29wX3FkaXNjOworCWRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmcgPSBxZGlzYzsKKwlyY3VfYXNzaWduX3BvaW50ZXIoZGV2X3F1ZXVlLT5xZGlzYywgJm5vb3BfcWRpc2MpOworCisJc3Bpbl91bmxvY2tfYmgocm9vdF9sb2NrKTsKKworCXJldHVybiBvcWRpc2M7CiB9CiAKIHN0YXRpYyB2b2lkIGF0dGFjaF9vbmVfZGVmYXVsdF9xZGlzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNjA1LDEyICs2NjEsMzUgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBhY3RpdmF0aW9uIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAkJCXJldHVybjsKIAkJfQorCisJCS8qIENhbiBieS1wYXNzIHRoZSBxdWV1ZSBkaXNjaXBsaW5lIGZvciBkZWZhdWx0IHFkaXNjICovCisJCXFkaXNjLT5mbGFncyB8PSBUQ1FfRl9DQU5fQllQQVNTOwogCX0gZWxzZSB7CiAJCXFkaXNjID0gICZub3F1ZXVlX3FkaXNjOwogCX0KIAlkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nID0gcWRpc2M7CiB9CiAKK3N0YXRpYyB2b2lkIGF0dGFjaF9kZWZhdWx0X3FkaXNjcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKKwlzdHJ1Y3QgUWRpc2MgKnFkaXNjOworCisJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApOworCisJaWYgKCFuZXRpZl9pc19tdWx0aXF1ZXVlKGRldikgfHwgZGV2LT50eF9xdWV1ZV9sZW4gPT0gMCkgeworCQluZXRkZXZfZm9yX2VhY2hfdHhfcXVldWUoZGV2LCBhdHRhY2hfb25lX2RlZmF1bHRfcWRpc2MsIE5VTEwpOworCQlkZXYtPnFkaXNjID0gdHhxLT5xZGlzY19zbGVlcGluZzsKKwkJYXRvbWljX2luYygmZGV2LT5xZGlzYy0+cmVmY250KTsKKwl9IGVsc2UgeworCQlxZGlzYyA9IHFkaXNjX2NyZWF0ZV9kZmx0KGRldiwgdHhxLCAmbXFfcWRpc2Nfb3BzLCBUQ19IX1JPT1QpOworCQlpZiAocWRpc2MpIHsKKwkJCXFkaXNjLT5vcHMtPmF0dGFjaChxZGlzYyk7CisJCQlkZXYtPnFkaXNjID0gcWRpc2M7CisJCX0KKwl9Cit9CisKIHN0YXRpYyB2b2lkIHRyYW5zaXRpb25fb25lX3FkaXNjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJIHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSwKIAkJCQkgdm9pZCAqX25lZWRfd2F0Y2hkb2cpCkBAIC02MzgsOCArNzE3LDggQEAKIAkgICB2aXJ0dWFsIGludGVyZmFjZXMKIAkgKi8KIAotCWlmIChkZXZfYWxsX3FkaXNjX3NsZWVwaW5nX25vb3AoZGV2KSkKLQkJbmV0ZGV2X2Zvcl9lYWNoX3R4X3F1ZXVlKGRldiwgYXR0YWNoX29uZV9kZWZhdWx0X3FkaXNjLCBOVUxMKTsKKwlpZiAoZGV2LT5xZGlzYyA9PSAmbm9vcF9xZGlzYykKKwkJYXR0YWNoX2RlZmF1bHRfcWRpc2NzKGRldik7CiAKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkKIAkJLyogRGVsYXkgYWN0aXZhdGlvbiB1bnRpbCBuZXh0IGNhcnJpZXItb24gZXZlbnQgKi8KQEAgLTczMCw2ICs4MDksNyBAQAogCiB2b2lkIGRldl9pbml0X3NjaGVkdWxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCWRldi0+cWRpc2MgPSAmbm9vcF9xZGlzYzsKIAluZXRkZXZfZm9yX2VhY2hfdHhfcXVldWUoZGV2LCBkZXZfaW5pdF9zY2hlZHVsZXJfcXVldWUsICZub29wX3FkaXNjKTsKIAlkZXZfaW5pdF9zY2hlZHVsZXJfcXVldWUoZGV2LCAmZGV2LT5yeF9xdWV1ZSwgJm5vb3BfcWRpc2MpOwogCkBAIC03NTUsNSArODM1LDggQEAKIHsKIAluZXRkZXZfZm9yX2VhY2hfdHhfcXVldWUoZGV2LCBzaHV0ZG93bl9zY2hlZHVsZXJfcXVldWUsICZub29wX3FkaXNjKTsKIAlzaHV0ZG93bl9zY2hlZHVsZXJfcXVldWUoZGV2LCAmZGV2LT5yeF9xdWV1ZSwgJm5vb3BfcWRpc2MpOworCXFkaXNjX2Rlc3Ryb3koZGV2LT5xZGlzYyk7CisJZGV2LT5xZGlzYyA9ICZub29wX3FkaXNjOworCiAJV0FSTl9PTih0aW1lcl9wZW5kaW5nKCZkZXYtPndhdGNoZG9nX3RpbWVyKSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IGRhZDAxNDQuLjM3NWQ2NGMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCkBAIC0xMjAzLDggKzEyMDMsNiBAQAogewogCXN0cnVjdCBoZnNjX2NsYXNzICpjbCA9IChzdHJ1Y3QgaGZzY19jbGFzcyAqKWFyZzsKIAotCWlmIChjbCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0VOVDsKIAlpZiAoY2wtPmxldmVsID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKG5ldyA9PSBOVUxMKSB7CkBAIC0xMjI4LDcgKzEyMjYsNyBAQAogewogCXN0cnVjdCBoZnNjX2NsYXNzICpjbCA9IChzdHJ1Y3QgaGZzY19jbGFzcyAqKWFyZzsKIAotCWlmIChjbCAhPSBOVUxMICYmIGNsLT5sZXZlbCA9PSAwKQorCWlmIChjbC0+bGV2ZWwgPT0gMCkKIAkJcmV0dXJuIGNsLT5xZGlzYzsKIAogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9odGIuYyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKaW5kZXggZWM0ZDQ2My4uODVhY2FiOSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9odGIuYworKysgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCkBAIC0xMTE3LDMwICsxMTE3LDI5IEBACiB7CiAJc3RydWN0IGh0Yl9jbGFzcyAqY2wgPSAoc3RydWN0IGh0Yl9jbGFzcyAqKWFyZzsKIAotCWlmIChjbCAmJiAhY2wtPmxldmVsKSB7Ci0JCWlmIChuZXcgPT0gTlVMTCAmJgotCQkgICAgKG5ldyA9IHFkaXNjX2NyZWF0ZV9kZmx0KHFkaXNjX2RldihzY2gpLCBzY2gtPmRldl9xdWV1ZSwKLQkJCQkJICAgICAmcGZpZm9fcWRpc2Nfb3BzLAotCQkJCQkgICAgIGNsLT5jb21tb24uY2xhc3NpZCkpCi0JCSAgICA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9CVUZTOwotCQlzY2hfdHJlZV9sb2NrKHNjaCk7Ci0JCSpvbGQgPSBjbC0+dW4ubGVhZi5xOwotCQljbC0+dW4ubGVhZi5xID0gbmV3OwotCQlpZiAoKm9sZCAhPSBOVUxMKSB7Ci0JCQlxZGlzY190cmVlX2RlY3JlYXNlX3FsZW4oKm9sZCwgKCpvbGQpLT5xLnFsZW4pOwotCQkJcWRpc2NfcmVzZXQoKm9sZCk7Ci0JCX0KLQkJc2NoX3RyZWVfdW5sb2NrKHNjaCk7Ci0JCXJldHVybiAwOworCWlmIChjbC0+bGV2ZWwpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChuZXcgPT0gTlVMTCAmJgorCSAgICAobmV3ID0gcWRpc2NfY3JlYXRlX2RmbHQocWRpc2NfZGV2KHNjaCksIHNjaC0+ZGV2X3F1ZXVlLAorCQkJCSAgICAgJnBmaWZvX3FkaXNjX29wcywKKwkJCQkgICAgIGNsLT5jb21tb24uY2xhc3NpZCkpID09IE5VTEwpCisJCXJldHVybiAtRU5PQlVGUzsKKworCXNjaF90cmVlX2xvY2soc2NoKTsKKwkqb2xkID0gY2wtPnVuLmxlYWYucTsKKwljbC0+dW4ubGVhZi5xID0gbmV3OworCWlmICgqb2xkICE9IE5VTEwpIHsKKwkJcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKCpvbGQsICgqb2xkKS0+cS5xbGVuKTsKKwkJcWRpc2NfcmVzZXQoKm9sZCk7CiAJfQotCXJldHVybiAtRU5PRU5UOworCXNjaF90cmVlX3VubG9jayhzY2gpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IFFkaXNjICpodGJfbGVhZihzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGh0Yl9jbGFzcyAqY2wgPSAoc3RydWN0IGh0Yl9jbGFzcyAqKWFyZzsKLQlyZXR1cm4gKGNsICYmICFjbC0+bGV2ZWwpID8gY2wtPnVuLmxlYWYucSA6IE5VTEw7CisJcmV0dXJuICFjbC0+bGV2ZWwgPyBjbC0+dW4ubGVhZi5xIDogTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgaHRiX3FsZW5fbm90aWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZykKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaW5ncmVzcy5jIGIvbmV0L3NjaGVkL3NjaF9pbmdyZXNzLmMKaW5kZXggNGEyYjc3My4uYTllNjQ2YiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9pbmdyZXNzLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9pbmdyZXNzLmMKQEAgLTIyLDEyICsyMiw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2xhc3MvZmxvdyBvcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBpbmdyZXNzX2dyYWZ0KHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZywKLQkJCSBzdHJ1Y3QgUWRpc2MgKm5ldywgc3RydWN0IFFkaXNjICoqb2xkKQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQogc3RhdGljIHN0cnVjdCBRZGlzYyAqaW5ncmVzc19sZWFmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlyZXR1cm4gTlVMTDsKQEAgLTQ4LDEyICs0Miw2IEBACiB7CiB9CiAKLXN0YXRpYyBpbnQgaW5ncmVzc19jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50LAotCQkJICBzdHJ1Y3QgbmxhdHRyICoqdGNhLCB1bnNpZ25lZCBsb25nICphcmcpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGluZ3Jlc3Nfd2FsayhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFkaXNjX3dhbGtlciAqd2Fsa2VyKQogewogCXJldHVybjsKQEAgLTEyMywxMSArMTExLDkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBRZGlzY19jbGFzc19vcHMgaW5ncmVzc19jbGFzc19vcHMgPSB7Ci0JLmdyYWZ0CQk9CWluZ3Jlc3NfZ3JhZnQsCiAJLmxlYWYJCT0JaW5ncmVzc19sZWFmLAogCS5nZXQJCT0JaW5ncmVzc19nZXQsCiAJLnB1dAkJPQlpbmdyZXNzX3B1dCwKLQkuY2hhbmdlCQk9CWluZ3Jlc3NfY2hhbmdlLAogCS53YWxrCQk9CWluZ3Jlc3Nfd2FsaywKIAkudGNmX2NoYWluCT0JaW5ncmVzc19maW5kX3RjZiwKIAkuYmluZF90Y2YJPQlpbmdyZXNzX2JpbmRfZmlsdGVyLApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9tcS5jIGIvbmV0L3NjaGVkL3NjaF9tcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNWVlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvc2NoZWQvc2NoX21xLmMKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBuZXQvc2NoZWQvc2NoX21xLmMJCUNsYXNzZnVsIG11bHRpcXVldWUgZHVtbXkgc2NoZWR1bGVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4KKworc3RydWN0IG1xX3NjaGVkIHsKKwlzdHJ1Y3QgUWRpc2MJCSoqcWRpc2NzOworfTsKKworc3RhdGljIHZvaWQgbXFfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7CisJc3RydWN0IG1xX3NjaGVkICpwcml2ID0gcWRpc2NfcHJpdihzY2gpOworCXVuc2lnbmVkIGludCBudHg7CisKKwlpZiAoIXByaXYtPnFkaXNjcykKKwkJcmV0dXJuOworCWZvciAobnR4ID0gMDsgbnR4IDwgZGV2LT5udW1fdHhfcXVldWVzICYmIHByaXYtPnFkaXNjc1tudHhdOyBudHgrKykKKwkJcWRpc2NfZGVzdHJveShwcml2LT5xZGlzY3NbbnR4XSk7CisJa2ZyZWUocHJpdi0+cWRpc2NzKTsKK30KKworc3RhdGljIGludCBtcV9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpOworCXN0cnVjdCBtcV9zY2hlZCAqcHJpdiA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWU7CisJc3RydWN0IFFkaXNjICpxZGlzYzsKKwl1bnNpZ25lZCBpbnQgbnR4OworCisJaWYgKHNjaC0+cGFyZW50ICE9IFRDX0hfUk9PVCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCFuZXRpZl9pc19tdWx0aXF1ZXVlKGRldikpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIHByZS1hbGxvY2F0ZSBxZGlzY3MsIGF0dGFjaG1lbnQgY2FuJ3QgZmFpbCAqLworCXByaXYtPnFkaXNjcyA9IGtjYWxsb2MoZGV2LT5udW1fdHhfcXVldWVzLCBzaXplb2YocHJpdi0+cWRpc2NzWzBdKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdi0+cWRpc2NzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChudHggPSAwOyBudHggPCBkZXYtPm51bV90eF9xdWV1ZXM7IG50eCsrKSB7CisJCWRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBudHgpOworCQlxZGlzYyA9IHFkaXNjX2NyZWF0ZV9kZmx0KGRldiwgZGV2X3F1ZXVlLCAmcGZpZm9fZmFzdF9vcHMsCisJCQkJCSAgVENfSF9NQUtFKFRDX0hfTUFKKHNjaC0+aGFuZGxlKSwKKwkJCQkJCSAgICBUQ19IX01JTihudHggKyAxKSkpOworCQlpZiAocWRpc2MgPT0gTlVMTCkKKwkJCWdvdG8gZXJyOworCQlxZGlzYy0+ZmxhZ3MgfD0gVENRX0ZfQ0FOX0JZUEFTUzsKKwkJcHJpdi0+cWRpc2NzW250eF0gPSBxZGlzYzsKKwl9CisKKwlzY2gtPmZsYWdzIHw9IFRDUV9GX01RUk9PVDsKKwlyZXR1cm4gMDsKKworZXJyOgorCW1xX2Rlc3Ryb3koc2NoKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgbXFfYXR0YWNoKHN0cnVjdCBRZGlzYyAqc2NoKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTsKKwlzdHJ1Y3QgbXFfc2NoZWQgKnByaXYgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IFFkaXNjICpxZGlzYzsKKwl1bnNpZ25lZCBpbnQgbnR4OworCisJZm9yIChudHggPSAwOyBudHggPCBkZXYtPm51bV90eF9xdWV1ZXM7IG50eCsrKSB7CisJCXFkaXNjID0gcHJpdi0+cWRpc2NzW250eF07CisJCXFkaXNjID0gZGV2X2dyYWZ0X3FkaXNjKHFkaXNjLT5kZXZfcXVldWUsIHFkaXNjKTsKKwkJaWYgKHFkaXNjKQorCQkJcWRpc2NfZGVzdHJveShxZGlzYyk7CisJfQorCWtmcmVlKHByaXYtPnFkaXNjcyk7CisJcHJpdi0+cWRpc2NzID0gTlVMTDsKK30KKworc3RhdGljIGludCBtcV9kdW1wKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTsKKwlzdHJ1Y3QgUWRpc2MgKnFkaXNjOworCXVuc2lnbmVkIGludCBudHg7CisKKwlzY2gtPnEucWxlbiA9IDA7CisJbWVtc2V0KCZzY2gtPmJzdGF0cywgMCwgc2l6ZW9mKHNjaC0+YnN0YXRzKSk7CisJbWVtc2V0KCZzY2gtPnFzdGF0cywgMCwgc2l6ZW9mKHNjaC0+cXN0YXRzKSk7CisKKwlmb3IgKG50eCA9IDA7IG50eCA8IGRldi0+bnVtX3R4X3F1ZXVlczsgbnR4KyspIHsKKwkJcWRpc2MgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgbnR4KS0+cWRpc2Nfc2xlZXBpbmc7CisJCXNwaW5fbG9ja19iaChxZGlzY19sb2NrKHFkaXNjKSk7CisJCXNjaC0+cS5xbGVuCQkrPSBxZGlzYy0+cS5xbGVuOworCQlzY2gtPmJzdGF0cy5ieXRlcwkrPSBxZGlzYy0+YnN0YXRzLmJ5dGVzOworCQlzY2gtPmJzdGF0cy5wYWNrZXRzCSs9IHFkaXNjLT5ic3RhdHMucGFja2V0czsKKwkJc2NoLT5xc3RhdHMucWxlbgkrPSBxZGlzYy0+cXN0YXRzLnFsZW47CisJCXNjaC0+cXN0YXRzLmJhY2tsb2cJKz0gcWRpc2MtPnFzdGF0cy5iYWNrbG9nOworCQlzY2gtPnFzdGF0cy5kcm9wcwkrPSBxZGlzYy0+cXN0YXRzLmRyb3BzOworCQlzY2gtPnFzdGF0cy5yZXF1ZXVlcwkrPSBxZGlzYy0+cXN0YXRzLnJlcXVldWVzOworCQlzY2gtPnFzdGF0cy5vdmVybGltaXRzCSs9IHFkaXNjLT5xc3RhdHMub3ZlcmxpbWl0czsKKwkJc3Bpbl91bmxvY2tfYmgocWRpc2NfbG9jayhxZGlzYykpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgKm1xX3F1ZXVlX2dldChzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7CisJdW5zaWduZWQgbG9uZyBudHggPSBjbCAtIDE7CisKKwlpZiAobnR4ID49IGRldi0+bnVtX3R4X3F1ZXVlcykKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBudHgpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG1xX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHRjbXNnICp0Y20pCit7CisJdW5zaWduZWQgaW50IG50eCA9IFRDX0hfTUlOKHRjbS0+dGNtX3BhcmVudCk7CisKKwlpZiAoIW1xX3F1ZXVlX2dldChzY2gsIG50eCkpCisJCXJldHVybiAwOworCXJldHVybiBudHggLSAxOworfQorCitzdGF0aWMgaW50IG1xX2dyYWZ0KHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLCBzdHJ1Y3QgUWRpc2MgKm5ldywKKwkJICAgIHN0cnVjdCBRZGlzYyAqKm9sZCkKK3sKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUgPSBtcV9xdWV1ZV9nZXQoc2NoLCBjbCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApCisJCWRldl9kZWFjdGl2YXRlKGRldik7CisKKwkqb2xkID0gZGV2X2dyYWZ0X3FkaXNjKGRldl9xdWV1ZSwgbmV3KTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQorCQlkZXZfYWN0aXZhdGUoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBRZGlzYyAqbXFfbGVhZihzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCkKK3sKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUgPSBtcV9xdWV1ZV9nZXQoc2NoLCBjbCk7CisKKwlyZXR1cm4gZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZzsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXFfZ2V0KHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCkKK3sKKwl1bnNpZ25lZCBpbnQgbnR4ID0gVENfSF9NSU4oY2xhc3NpZCk7CisKKwlpZiAoIW1xX3F1ZXVlX2dldChzY2gsIG50eCkpCisJCXJldHVybiAwOworCXJldHVybiBudHg7Cit9CisKK3N0YXRpYyB2b2lkIG1xX3B1dChzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgbXFfZHVtcF9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCwKKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNtc2cgKnRjbSkKK3sKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUgPSBtcV9xdWV1ZV9nZXQoc2NoLCBjbCk7CisKKwl0Y20tPnRjbV9wYXJlbnQgPSBUQ19IX1JPT1Q7CisJdGNtLT50Y21faGFuZGxlIHw9IFRDX0hfTUlOKGNsKTsKKwl0Y20tPnRjbV9pbmZvID0gZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZy0+aGFuZGxlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1xX2R1bXBfY2xhc3Nfc3RhdHMoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsCisJCQkgICAgICAgc3RydWN0IGduZXRfZHVtcCAqZCkKK3sKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUgPSBtcV9xdWV1ZV9nZXQoc2NoLCBjbCk7CisKKwlzY2ggPSBkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nOworCWlmIChnbmV0X3N0YXRzX2NvcHlfYmFzaWMoZCwgJnNjaC0+YnN0YXRzKSA8IDAgfHwKKwkgICAgZ25ldF9zdGF0c19jb3B5X3F1ZXVlKGQsICZzY2gtPnFzdGF0cykgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1xX3dhbGsoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZGlzY193YWxrZXIgKmFyZykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7CisJdW5zaWduZWQgaW50IG50eDsKKworCWlmIChhcmctPnN0b3ApCisJCXJldHVybjsKKworCWFyZy0+Y291bnQgPSBhcmctPnNraXA7CisJZm9yIChudHggPSBhcmctPnNraXA7IG50eCA8IGRldi0+bnVtX3R4X3F1ZXVlczsgbnR4KyspIHsKKwkJaWYgKGFyZy0+Zm4oc2NoLCBudHggKyAxLCBhcmcpIDwgMCkgeworCQkJYXJnLT5zdG9wID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWFyZy0+Y291bnQrKzsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIG1xX2NsYXNzX29wcyA9IHsKKwkuc2VsZWN0X3F1ZXVlCT0gbXFfc2VsZWN0X3F1ZXVlLAorCS5ncmFmdAkJPSBtcV9ncmFmdCwKKwkubGVhZgkJPSBtcV9sZWFmLAorCS5nZXQJCT0gbXFfZ2V0LAorCS5wdXQJCT0gbXFfcHV0LAorCS53YWxrCQk9IG1xX3dhbGssCisJLmR1bXAJCT0gbXFfZHVtcF9jbGFzcywKKwkuZHVtcF9zdGF0cwk9IG1xX2R1bXBfY2xhc3Nfc3RhdHMsCit9OworCitzdHJ1Y3QgUWRpc2Nfb3BzIG1xX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0geworCS5jbF9vcHMJCT0gJm1xX2NsYXNzX29wcywKKwkuaWQJCT0gIm1xIiwKKwkucHJpdl9zaXplCT0gc2l6ZW9mKHN0cnVjdCBtcV9zY2hlZCksCisJLmluaXQJCT0gbXFfaW5pdCwKKwkuZGVzdHJveQk9IG1xX2Rlc3Ryb3ksCisJLmF0dGFjaAkJPSBtcV9hdHRhY2gsCisJLmR1bXAJCT0gbXFfZHVtcCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCit9OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKaW5kZXggOTEyNzMxMi4uMDY5ZjgxYyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYworKysgYi9uZXQvc2NoZWQvc2NoX211bHRpcS5jCkBAIC0yOTgsOSArMjk4LDYgQEAKIAlzdHJ1Y3QgbXVsdGlxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAJdW5zaWduZWQgbG9uZyBiYW5kID0gYXJnIC0gMTsKIAotCWlmIChiYW5kID49IHEtPmJhbmRzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChuZXcgPT0gTlVMTCkKIAkJbmV3ID0gJm5vb3BfcWRpc2M7CiAKQEAgLTMyMCw5ICszMTcsNiBAQAogCXN0cnVjdCBtdWx0aXFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAl1bnNpZ25lZCBsb25nIGJhbmQgPSBhcmcgLSAxOwogCi0JaWYgKGJhbmQgPj0gcS0+YmFuZHMpCi0JCXJldHVybiBOVUxMOwotCiAJcmV0dXJuIHEtPnF1ZXVlc1tiYW5kXTsKIH0KIApAQCAtMzQ4LDM2ICszNDIsMTMgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgbXVsdGlxX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGhhbmRsZSwgdTMyIHBhcmVudCwKLQkJCSBzdHJ1Y3QgbmxhdHRyICoqdGNhLCB1bnNpZ25lZCBsb25nICphcmcpCi17Ci0JdW5zaWduZWQgbG9uZyBjbCA9ICphcmc7Ci0Jc3RydWN0IG11bHRpcV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwotCi0JaWYgKGNsIC0gMSA+IHEtPmJhbmRzKQotCQlyZXR1cm4gLUVOT0VOVDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtdWx0aXFfZGVsZXRlKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsKQotewotCXN0cnVjdCBtdWx0aXFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKLQlpZiAoY2wgLSAxID4gcS0+YmFuZHMpCi0JCXJldHVybiAtRU5PRU5UOwotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyBpbnQgbXVsdGlxX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsCiAJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y21zZyAqdGNtKQogewogCXN0cnVjdCBtdWx0aXFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAotCWlmIChjbCAtIDEgPiBxLT5iYW5kcykKLQkJcmV0dXJuIC1FTk9FTlQ7CiAJdGNtLT50Y21faGFuZGxlIHw9IFRDX0hfTUlOKGNsKTsKLQlpZiAocS0+cXVldWVzW2NsLTFdKQotCQl0Y20tPnRjbV9pbmZvID0gcS0+cXVldWVzW2NsLTFdLT5oYW5kbGU7CisJdGNtLT50Y21faW5mbyA9IHEtPnF1ZXVlc1tjbC0xXS0+aGFuZGxlOwogCXJldHVybiAwOwogfQogCkBAIC00MzAsOCArNDAxLDYgQEAKIAkubGVhZgkJPQltdWx0aXFfbGVhZiwKIAkuZ2V0CQk9CW11bHRpcV9nZXQsCiAJLnB1dAkJPQltdWx0aXFfcHV0LAotCS5jaGFuZ2UJCT0JbXVsdGlxX2NoYW5nZSwKLQkuZGVsZXRlCQk9CW11bHRpcV9kZWxldGUsCiAJLndhbGsJCT0JbXVsdGlxX3dhbGssCiAJLnRjZl9jaGFpbgk9CW11bHRpcV9maW5kX3RjZiwKIAkuYmluZF90Y2YJPQltdWx0aXFfYmluZCwKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcHJpby5jIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKaW5kZXggOTRjZWNlZi4uMGY3M2M0MSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9wcmlvLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKQEAgLTI2Miw5ICsyNjIsNiBAQAogCXN0cnVjdCBwcmlvX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAJdW5zaWduZWQgbG9uZyBiYW5kID0gYXJnIC0gMTsKIAotCWlmIChiYW5kID49IHEtPmJhbmRzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChuZXcgPT0gTlVMTCkKIAkJbmV3ID0gJm5vb3BfcWRpc2M7CiAKQEAgLTI4NCw5ICsyODEsNiBAQAogCXN0cnVjdCBwcmlvX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAJdW5zaWduZWQgbG9uZyBiYW5kID0gYXJnIC0gMTsKIAotCWlmIChiYW5kID49IHEtPmJhbmRzKQotCQlyZXR1cm4gTlVMTDsKLQogCXJldHVybiBxLT5xdWV1ZXNbYmFuZF07CiB9CiAKQEAgLTMxMSwzNSArMzA1LDEzIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IHByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgaGFuZGxlLCB1MzIgcGFyZW50LCBzdHJ1Y3QgbmxhdHRyICoqdGNhLCB1bnNpZ25lZCBsb25nICphcmcpCi17Ci0JdW5zaWduZWQgbG9uZyBjbCA9ICphcmc7Ci0Jc3RydWN0IHByaW9fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKLQotCWlmIChjbCAtIDEgPiBxLT5iYW5kcykKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHJpb19kZWxldGUoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpCi17Ci0Jc3RydWN0IHByaW9fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKLQlpZiAoY2wgLSAxID4gcS0+YmFuZHMpCi0JCXJldHVybiAtRU5PRU5UOwotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyBpbnQgcHJpb19kdW1wX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgc3RydWN0IHRjbXNnICp0Y20pCiB7CiAJc3RydWN0IHByaW9fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAotCWlmIChjbCAtIDEgPiBxLT5iYW5kcykKLQkJcmV0dXJuIC1FTk9FTlQ7CiAJdGNtLT50Y21faGFuZGxlIHw9IFRDX0hfTUlOKGNsKTsKLQlpZiAocS0+cXVldWVzW2NsLTFdKQotCQl0Y20tPnRjbV9pbmZvID0gcS0+cXVldWVzW2NsLTFdLT5oYW5kbGU7CisJdGNtLT50Y21faW5mbyA9IHEtPnF1ZXVlc1tjbC0xXS0+aGFuZGxlOwogCXJldHVybiAwOwogfQogCkBAIC0zOTIsOCArMzY0LDYgQEAKIAkubGVhZgkJPQlwcmlvX2xlYWYsCiAJLmdldAkJPQlwcmlvX2dldCwKIAkucHV0CQk9CXByaW9fcHV0LAotCS5jaGFuZ2UJCT0JcHJpb19jaGFuZ2UsCi0JLmRlbGV0ZQkJPQlwcmlvX2RlbGV0ZSwKIAkud2FsawkJPQlwcmlvX3dhbGssCiAJLnRjZl9jaGFpbgk9CXByaW9fZmluZF90Y2YsCiAJLmJpbmRfdGNmCT0JcHJpb19iaW5kLApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9yZWQuYyBiL25ldC9zY2hlZC9zY2hfcmVkLmMKaW5kZXggMmJkZjI0MS4uMDcyY2RmNCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9yZWQuYworKysgYi9uZXQvc2NoZWQvc2NoX3JlZC5jCkBAIC0yNjgsOCArMjY4LDYgQEAKIHsKIAlzdHJ1Y3QgcmVkX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAKLQlpZiAoY2wgIT0gMSkKLQkJcmV0dXJuIC1FTk9FTlQ7CiAJdGNtLT50Y21faGFuZGxlIHw9IFRDX0hfTUlOKDEpOwogCXRjbS0+dGNtX2luZm8gPSBxLT5xZGlzYy0+aGFuZGxlOwogCXJldHVybiAwOwpAQCAtMzA4LDE3ICszMDYsNiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGludCByZWRfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCwgdTMyIHBhcmVudGlkLAotCQkJICAgIHN0cnVjdCBubGF0dHIgKip0Y2EsIHVuc2lnbmVkIGxvbmcgKmFyZykKLXsKLQlyZXR1cm4gLUVOT1NZUzsKLX0KLQotc3RhdGljIGludCByZWRfZGVsZXRlKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsKQotewotCXJldHVybiAtRU5PU1lTOwotfQotCiBzdGF0aWMgdm9pZCByZWRfd2FsayhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFkaXNjX3dhbGtlciAqd2Fsa2VyKQogewogCWlmICghd2Fsa2VyLT5zdG9wKSB7CkBAIC0zMzEsMjAgKzMxOCwxMiBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG8gKipyZWRfZmluZF90Y2Yoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHJlZF9jbGFzc19vcHMgPSB7CiAJLmdyYWZ0CQk9CXJlZF9ncmFmdCwKIAkubGVhZgkJPQlyZWRfbGVhZiwKIAkuZ2V0CQk9CXJlZF9nZXQsCiAJLnB1dAkJPQlyZWRfcHV0LAotCS5jaGFuZ2UJCT0JcmVkX2NoYW5nZV9jbGFzcywKLQkuZGVsZXRlCQk9CXJlZF9kZWxldGUsCiAJLndhbGsJCT0JcmVkX3dhbGssCi0JLnRjZl9jaGFpbgk9CXJlZF9maW5kX3RjZiwKIAkuZHVtcAkJPQlyZWRfZHVtcF9jbGFzcywKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jCmluZGV4IDg3MDY5MjAuLmNiMjEzODAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfc2ZxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwpAQCAtNDk2LDEyICs0OTYsNiBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBzZnFfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCwgdTMyIHBhcmVudGlkLAotCQkJICAgIHN0cnVjdCBubGF0dHIgKip0Y2EsIHVuc2lnbmVkIGxvbmcgKmFyZykKLXsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNmcV9nZXQoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkKQogewogCXJldHVybiAwOwpAQCAtNTYwLDcgKzU1NCw2IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHNmcV9jbGFzc19vcHMgPSB7CiAJLmdldAkJPQlzZnFfZ2V0LAotCS5jaGFuZ2UJCT0Jc2ZxX2NoYW5nZV9jbGFzcywKIAkudGNmX2NoYWluCT0Jc2ZxX2ZpbmRfdGNmLAogCS5kdW1wCQk9CXNmcV9kdW1wX2NsYXNzLAogCS5kdW1wX3N0YXRzCT0Jc2ZxX2R1bXBfY2xhc3Nfc3RhdHMsCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RiZi5jIGIvbmV0L3NjaGVkL3NjaF90YmYuYwppbmRleCBlMjJkZmU4Li44ZmI4MTA3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RiZi5jCisrKyBiL25ldC9zY2hlZC9zY2hfdGJmLmMKQEAgLTM2OCw5ICszNjgsNiBAQAogewogCXN0cnVjdCB0YmZfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAotCWlmIChjbCAhPSAxKSAJLyogb25seSBvbmUgY2xhc3MgKi8KLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KIAl0Y20tPnRjbV9oYW5kbGUgfD0gVENfSF9NSU4oMSk7CiAJdGNtLT50Y21faW5mbyA9IHEtPnFkaXNjLT5oYW5kbGU7CiAKQEAgLTQxMCwxNyArNDA3LDYgQEAKIHsKIH0KIAotc3RhdGljIGludCB0YmZfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCwgdTMyIHBhcmVudGlkLAotCQkJICAgIHN0cnVjdCBubGF0dHIgKip0Y2EsIHVuc2lnbmVkIGxvbmcgKmFyZykKLXsKLQlyZXR1cm4gLUVOT1NZUzsKLX0KLQotc3RhdGljIGludCB0YmZfZGVsZXRlKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlyZXR1cm4gLUVOT1NZUzsKLX0KLQogc3RhdGljIHZvaWQgdGJmX3dhbGsoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZGlzY193YWxrZXIgKndhbGtlcikKIHsKIAlpZiAoIXdhbGtlci0+c3RvcCkgewpAQCAtNDMzLDIxICs0MTksMTMgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvICoqdGJmX2ZpbmRfdGNmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsKQotewotCXJldHVybiBOVUxMOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyB0YmZfY2xhc3Nfb3BzID0KIHsKIAkuZ3JhZnQJCT0JdGJmX2dyYWZ0LAogCS5sZWFmCQk9CXRiZl9sZWFmLAogCS5nZXQJCT0JdGJmX2dldCwKIAkucHV0CQk9CXRiZl9wdXQsCi0JLmNoYW5nZQkJPQl0YmZfY2hhbmdlX2NsYXNzLAotCS5kZWxldGUJCT0JdGJmX2RlbGV0ZSwKIAkud2FsawkJPQl0YmZfd2FsaywKLQkudGNmX2NoYWluCT0JdGJmX2ZpbmRfdGNmLAogCS5kdW1wCQk9CXRiZl9kdW1wX2NsYXNzLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90ZXFsLmMgYi9uZXQvc2NoZWQvc2NoX3RlcWwuYwppbmRleCA5YzAwMmI2Li41YTAwMmMyIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RlcWwuYworKysgYi9uZXQvc2NoZWQvc2NoX3RlcWwuYwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJcmV0dXJuIF9fdGVxbF9yZXNvbHZlKHNrYiwgc2tiX3JlcywgZGV2KTsKIH0KIAotc3RhdGljIGludCB0ZXFsX21hc3Rlcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgdGVxbF9tYXN0ZXJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0ZXFsX21hc3RlciAqbWFzdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCk7CkBAIC0zMDcsMTQgKzMwNywxNCBAQAogCiAJCQkJaWYgKCFuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHNsYXZlX3R4cSkgJiYKIAkJCQkgICAgIW5ldGlmX3R4X3F1ZXVlX2Zyb3plbihzbGF2ZV90eHEpICYmCi0JCQkJICAgIHNsYXZlX29wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLCBzbGF2ZSkgPT0gMCkgeworCQkJCSAgICBzbGF2ZV9vcHMtPm5kb19zdGFydF94bWl0KHNrYiwgc2xhdmUpID09IE5FVERFVl9UWF9PSykgewogCQkJCQl0eHFfdHJhbnNfdXBkYXRlKHNsYXZlX3R4cSk7CiAJCQkJCV9fbmV0aWZfdHhfdW5sb2NrKHNsYXZlX3R4cSk7CiAJCQkJCW1hc3Rlci0+c2xhdmVzID0gTkVYVF9TTEFWRShxKTsKIAkJCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCQkJCQl0eHEtPnR4X3BhY2tldHMrKzsKIAkJCQkJdHhxLT50eF9ieXRlcyArPSBsZW5ndGg7Ci0JCQkJCXJldHVybiAwOworCQkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJCX0KIAkJCQlfX25ldGlmX3R4X3VubG9jayhzbGF2ZV90eHEpOwogCQkJfQpAQCAtMzIzLDcgKzMyMyw3IEBACiAJCQlicmVhazsKIAkJY2FzZSAxOgogCQkJbWFzdGVyLT5zbGF2ZXMgPSBORVhUX1NMQVZFKHEpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQlkZWZhdWx0OgogCQkJbm9yZXMgPSAxOwogCQkJYnJlYWs7CkBAIC0zNDUsNyArMzQ1LDcgQEAKIGRyb3A6CiAJdHhxLT50eF9kcm9wcGVkKys7CiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbnQgdGVxbF9tYXN0ZXJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwppbmRleCA1MjU4NjRiLi44NDUwOTYwIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuYworKysgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwpAQCAtMTEyLDYgKzExMiw3IEBACiAJYXNvYy0+Y29va2llX2xpZmUudHZfdXNlYyA9IChzcC0+YXNzb2NwYXJhbXMuc2Fzb2NfY29va2llX2xpZmUgJSAxMDAwKQogCQkJCQkqIDEwMDA7CiAJYXNvYy0+ZnJhZ19wb2ludCA9IDA7CisJYXNvYy0+dXNlcl9mcmFnID0gc3AtPnVzZXJfZnJhZzsKIAogCS8qIFNldCB0aGUgYXNzb2NpYXRpb24gbWF4X3JldHJhbnMgYW5kIFJUTyB2YWx1ZXMgZnJvbSB0aGUKIAkgKiBzb2NrZXQgdmFsdWVzLgpAQCAtMjAyLDYgKzIwMyw3IEBACiAJYXNvYy0+YV9yd25kID0gYXNvYy0+cnduZDsKIAogCWFzb2MtPnJ3bmRfb3ZlciA9IDA7CisJYXNvYy0+cnduZF9wcmVzcyA9IDA7CiAKIAkvKiBVc2UgbXkgb3duIG1heCB3aW5kb3cgdW50aWwgSSBsZWFybiBzb21ldGhpbmcgYmV0dGVyLiAgKi8KIAlhc29jLT5wZWVyLnJ3bmQgPSBTQ1RQX0RFRkFVTFRfTUFYV0lORE9XOwpAQCAtNTgyLDYgKzU4NCwzMyBAQAogCSAgICBhc29jLT5hZGRpcF9sYXN0X2FzY29uZi0+dHJhbnNwb3J0ID09IHBlZXIpCiAJCWFzb2MtPmFkZGlwX2xhc3RfYXNjb25mLT50cmFuc3BvcnQgPSBOVUxMOwogCisJLyogSWYgd2UgaGF2ZSBzb21ldGhpbmcgb24gdGhlIHRyYW5zbWl0dGVkIGxpc3QsIHdlIGhhdmUgdG8KKwkgKiBzYXZlIGl0IG9mZi4gIFRoZSBiZXN0IHBsYWNlIGlzIHRoZSBhY3RpdmUgcGF0aC4KKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnBlZXItPnRyYW5zbWl0dGVkKSkgeworCQlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKmFjdGl2ZSA9IGFzb2MtPnBlZXIuYWN0aXZlX3BhdGg7CisJCXN0cnVjdCBzY3RwX2NodW5rICpjaDsKKworCQkvKiBSZXNldCB0aGUgdHJhbnNwb3J0IG9mIGVhY2ggY2h1bmsgb24gdGhpcyBsaXN0ICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2gsICZwZWVyLT50cmFuc21pdHRlZCwKKwkJCQkJdHJhbnNtaXR0ZWRfbGlzdCkgeworCQkJY2gtPnRyYW5zcG9ydCA9IE5VTEw7CisJCQljaC0+cnR0X2luX3Byb2dyZXNzID0gMDsKKwkJfQorCisJCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmcGVlci0+dHJhbnNtaXR0ZWQsCisJCQkJCSZhY3RpdmUtPnRyYW5zbWl0dGVkKTsKKworCQkvKiBTdGFydCBhIFQzIHRpbWVyIGhlcmUgaW4gY2FzZSBpdCB3YXNuJ3QgcnVubmluZyBzbworCQkgKiB0aGF0IHRoZXNlIG1pZ3JhdGVkIHBhY2tldHMgaGF2ZSBhIGNoYW5jZSB0byBnZXQKKwkJICogcmV0cm5hc21pdHRlZC4KKwkJICovCisJCWlmICghdGltZXJfcGVuZGluZygmYWN0aXZlLT5UM19ydHhfdGltZXIpKQorCQkJaWYgKCFtb2RfdGltZXIoJmFjdGl2ZS0+VDNfcnR4X3RpbWVyLAorCQkJCQlqaWZmaWVzICsgYWN0aXZlLT5ydG8pKQorCQkJCXNjdHBfdHJhbnNwb3J0X2hvbGQoYWN0aXZlKTsKKwl9CisKIAlhc29jLT5wZWVyLnRyYW5zcG9ydF9jb3VudC0tOwogCiAJc2N0cF90cmFuc3BvcnRfZnJlZShwZWVyKTsKQEAgLTY1MSwxMyArNjgwLDE1IEBACiAJICovCiAJcGVlci0+cGFyYW1fZmxhZ3MgPSBhc29jLT5wYXJhbV9mbGFnczsKIAorCXNjdHBfdHJhbnNwb3J0X3JvdXRlKHBlZXIsIE5VTEwsIHNwKTsKKwogCS8qIEluaXRpYWxpemUgdGhlIHBtdHUgb2YgdGhlIHRyYW5zcG9ydC4gKi8KLQlpZiAocGVlci0+cGFyYW1fZmxhZ3MgJiBTUFBfUE1UVURfRU5BQkxFKQotCQlzY3RwX3RyYW5zcG9ydF9wbXR1KHBlZXIpOwotCWVsc2UgaWYgKGFzb2MtPnBhdGhtdHUpCi0JCXBlZXItPnBhdGhtdHUgPSBhc29jLT5wYXRobXR1OwotCWVsc2UKLQkJcGVlci0+cGF0aG10dSA9IFNDVFBfREVGQVVMVF9NQVhTRUdNRU5UOworCWlmIChwZWVyLT5wYXJhbV9mbGFncyAmIFNQUF9QTVRVRF9ESVNBQkxFKSB7CisJCWlmIChhc29jLT5wYXRobXR1KQorCQkJcGVlci0+cGF0aG10dSA9IGFzb2MtPnBhdGhtdHU7CisJCWVsc2UKKwkJCXBlZXItPnBhdGhtdHUgPSBTQ1RQX0RFRkFVTFRfTUFYU0VHTUVOVDsKKwl9CiAKIAkvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0cmFuc3BvcnQgYWRkciBvbiB0aGlzIGFzc29jaWF0aW9uLAogCSAqIGluaXRpYWxpemUgdGhlIGFzc29jaWF0aW9uIFBNVFUgdG8gdGhlIHBlZXIncyBQTVRVLgpAQCAtNjczLDcgKzcwNCw3IEBACiAJCQkgICIlZFxuIiwgYXNvYywgYXNvYy0+cGF0aG10dSk7CiAJcGVlci0+cG10dV9wZW5kaW5nID0gMDsKIAotCWFzb2MtPmZyYWdfcG9pbnQgPSBzY3RwX2ZyYWdfcG9pbnQoc3AsIGFzb2MtPnBhdGhtdHUpOworCWFzb2MtPmZyYWdfcG9pbnQgPSBzY3RwX2ZyYWdfcG9pbnQoYXNvYywgYXNvYy0+cGF0aG10dSk7CiAKIAkvKiBUaGUgYXNvYy0+cGVlci5wb3J0IG1pZ2h0IG5vdCBiZSBtZWFuaW5nZnVsIHlldCwgYnV0CiAJICogaW5pdGlhbGl6ZSB0aGUgcGFja2V0IHN0cnVjdHVyZSBhbnl3YXkuCkBAIC04MTAsMTEgKzg0MSwxNiBAQAogCQlicmVhazsKIAogCWNhc2UgU0NUUF9UUkFOU1BPUlRfRE9XTjoKLQkJLyogaWYgdGhlIHRyYW5zb3J0IHdhcyBuZXZlciBjb25maXJtZWQsIGRvIG5vdCB0cmFuc2l0aW9uIGl0Ci0JCSAqIHRvIGluYWN0aXZlIHN0YXRlLgorCQkvKiBJZiB0aGUgdHJhbnNwb3J0IHdhcyBuZXZlciBjb25maXJtZWQsIGRvIG5vdCB0cmFuc2l0aW9uIGl0CisJCSAqIHRvIGluYWN0aXZlIHN0YXRlLiAgQWxzbywgcmVsZWFzZSB0aGUgY2FjaGVkIHJvdXRlIHNpbmNlCisJCSAqIHRoZXJlIG1heSBiZSBhIGJldHRlciByb3V0ZSBuZXh0IHRpbWUuCiAJCSAqLwogCQlpZiAodHJhbnNwb3J0LT5zdGF0ZSAhPSBTQ1RQX1VOQ09ORklSTUVEKQogCQkJdHJhbnNwb3J0LT5zdGF0ZSA9IFNDVFBfSU5BQ1RJVkU7CisJCWVsc2UgeworCQkJZHN0X3JlbGVhc2UodHJhbnNwb3J0LT5kc3QpOworCQkJdHJhbnNwb3J0LT5kc3QgPSBOVUxMOworCQl9CiAKIAkJc3BjX3N0YXRlID0gU0NUUF9BRERSX1VOUkVBQ0hBQkxFOwogCQlicmVhazsKQEAgLTEzMjQsOSArMTM2MCw4IEBACiAJfQogCiAJaWYgKHBtdHUpIHsKLQkJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKGFzb2MtPmJhc2Uuc2spOwogCQlhc29jLT5wYXRobXR1ID0gcG10dTsKLQkJYXNvYy0+ZnJhZ19wb2ludCA9IHNjdHBfZnJhZ19wb2ludChzcCwgcG10dSk7CisJCWFzb2MtPmZyYWdfcG9pbnQgPSBzY3RwX2ZyYWdfcG9pbnQoYXNvYywgcG10dSk7CiAJfQogCiAJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBhc29jOiVwLCBwbXR1OiVkLCBmcmFnX3BvaW50OiVkXG4iLApAQCAtMTM2OSw2ICsxNDA0LDE3IEBACiAJCWFzb2MtPnJ3bmQgKz0gbGVuOwogCX0KIAorCS8qIElmIHdlIGhhZCB3aW5kb3cgcHJlc3N1cmUsIHN0YXJ0IHJlY292ZXJpbmcgaXQKKwkgKiBvbmNlIG91ciByd25kIGhhZCByZWFjaGVkIHRoZSBhY2N1bXVsYXRlZCBwcmVzc3VyZQorCSAqIHRocmVzaG9sZC4gIFRoZSBpZGVhIGlzIHRvIHJlY292ZXIgc2xvd2x5LCBidXQgdXAKKwkgKiB0byB0aGUgaW5pdGlhbCBhZHZlcnRpc2VkIHdpbmRvdy4KKwkgKi8KKwlpZiAoYXNvYy0+cnduZF9wcmVzcyAmJiBhc29jLT5yd25kID49IGFzb2MtPnJ3bmRfcHJlc3MpIHsKKwkJaW50IGNoYW5nZSA9IG1pbihhc29jLT5wYXRobXR1LCBhc29jLT5yd25kX3ByZXNzKTsKKwkJYXNvYy0+cnduZCArPSBjaGFuZ2U7CisJCWFzb2MtPnJ3bmRfcHJlc3MgLT0gY2hhbmdlOworCX0KKwogCVNDVFBfREVCVUdfUFJJTlRLKCIlczogYXNvYyAlcCByd25kIGluY3JlYXNlZCBieSAlZCB0byAoJXUsICV1KSAiCiAJCQkgICItICV1XG4iLCBfX2Z1bmNfXywgYXNvYywgbGVuLCBhc29jLT5yd25kLAogCQkJICBhc29jLT5yd25kX292ZXIsIGFzb2MtPmFfcnduZCk7CkBAIC0xNDAxLDE3ICsxNDQ3LDM4IEBACiAvKiBEZWNyZWFzZSBhc29jJ3MgcnduZCBieSBsZW4uICovCiB2b2lkIHNjdHBfYXNzb2NfcnduZF9kZWNyZWFzZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgdW5zaWduZWQgbGVuKQogeworCWludCByeF9jb3VudDsKKwlpbnQgb3ZlciA9IDA7CisKIAlTQ1RQX0FTU0VSVChhc29jLT5yd25kLCAicnduZCB6ZXJvIiwgcmV0dXJuKTsKIAlTQ1RQX0FTU0VSVCghYXNvYy0+cnduZF9vdmVyLCAicnduZF9vdmVyIG5vdCB6ZXJvIiwgcmV0dXJuKTsKKworCWlmIChhc29jLT5lcC0+cmN2YnVmX3BvbGljeSkKKwkJcnhfY291bnQgPSBhdG9taWNfcmVhZCgmYXNvYy0+cm1lbV9hbGxvYyk7CisJZWxzZQorCQlyeF9jb3VudCA9IGF0b21pY19yZWFkKCZhc29jLT5iYXNlLnNrLT5za19ybWVtX2FsbG9jKTsKKworCS8qIElmIHdlJ3ZlIHJlYWNoZWQgb3Igb3ZlcmZsb3dlZCBvdXIgcmVjZWl2ZSBidWZmZXIsIGFubm91bmNlCisJICogYSAwIHJ3bmQgaWYgcnduZCB3b3VsZCBzdGlsbCBiZSBwb3NpdGl2ZS4gIFN0b3JlIHRoZQorCSAqIHRoZSBwb3R0ZW50aWFsIHByZXNzdXJlIG92ZXJmbG93IHNvIHRoYXQgdGhlIHdpbmRvdyBjYW4gYmUgcmVzdG9yZWQKKwkgKiBiYWNrIHRvIG9yaWdpbmFsIHZhbHVlLgorCSAqLworCWlmIChyeF9jb3VudCA+PSBhc29jLT5iYXNlLnNrLT5za19yY3ZidWYpCisJCW92ZXIgPSAxOworCiAJaWYgKGFzb2MtPnJ3bmQgPj0gbGVuKSB7CiAJCWFzb2MtPnJ3bmQgLT0gbGVuOworCQlpZiAob3ZlcikgeworCQkJYXNvYy0+cnduZF9wcmVzcyA9IGFzb2MtPnJ3bmQ7CisJCQlhc29jLT5yd25kID0gMDsKKwkJfQogCX0gZWxzZSB7CiAJCWFzb2MtPnJ3bmRfb3ZlciA9IGxlbiAtIGFzb2MtPnJ3bmQ7CiAJCWFzb2MtPnJ3bmQgPSAwOwogCX0KLQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IGFzb2MgJXAgcnduZCBkZWNyZWFzZWQgYnkgJWQgdG8gKCV1LCAldSlcbiIsCisJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBhc29jICVwIHJ3bmQgZGVjcmVhc2VkIGJ5ICVkIHRvICgldSwgJXUsICV1KVxuIiwKIAkJCSAgX19mdW5jX18sIGFzb2MsIGxlbiwgYXNvYy0+cnduZCwKLQkJCSAgYXNvYy0+cnduZF9vdmVyKTsKKwkJCSAgYXNvYy0+cnduZF9vdmVyLCBhc29jLT5yd25kX3ByZXNzKTsKIH0KIAogLyogQnVpbGQgdGhlIGJpbmQgYWRkcmVzcyBsaXN0IGZvciB0aGUgYXNzb2NpYXRpb24gYmFzZWQgb24gaW5mbyBmcm9tIHRoZQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYmluZF9hZGRyLmMgYi9uZXQvc2N0cC9iaW5kX2FkZHIuYwppbmRleCA2ZDU5NDRhLi4xM2E2ZmJhIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9iaW5kX2FkZHIuYworKysgYi9uZXQvc2N0cC9iaW5kX2FkZHIuYwpAQCAtNTEwLDkgKzUxMCwyOCBAQAogCSAqIG9mIHJlcXVlc3RlZCBkZXN0aW5hdGlvbiBhZGRyZXNzLCBzZW5kZXIgYW5kIHJlY2VpdmVyCiAJICogU0hPVUxEIGluY2x1ZGUgYWxsIG9mIGl0cyBhZGRyZXNzZXMgd2l0aCBsZXZlbCBncmVhdGVyCiAJICogdGhhbiBvciBlcXVhbCB0byBMLgorCSAqCisJICogQWRkcmVzcyBzY29waW5nIGNhbiBiZSBzZWxlY3RpdmVseSBjb250cm9sbGVkIHZpYSBzeXNjdGwKKwkgKiBvcHRpb24KIAkgKi8KLQlpZiAoYWRkcl9zY29wZSA8PSBzY29wZSkKKwlzd2l0Y2ggKHNjdHBfc2NvcGVfcG9saWN5KSB7CisJY2FzZSBTQ1RQX1NDT1BFX1BPTElDWV9ESVNBQkxFOgogCQlyZXR1cm4gMTsKKwljYXNlIFNDVFBfU0NPUEVfUE9MSUNZX0VOQUJMRToKKwkJaWYgKGFkZHJfc2NvcGUgPD0gc2NvcGUpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NDT1BFX1BPTElDWV9QUklWQVRFOgorCQlpZiAoYWRkcl9zY29wZSA8PSBzY29wZSB8fCBTQ1RQX1NDT1BFX1BSSVZBVEUgPT0gYWRkcl9zY29wZSkKKwkJCXJldHVybiAxOworCQlicmVhazsKKwljYXNlIFNDVFBfU0NPUEVfUE9MSUNZX0xJTks6CisJCWlmIChhZGRyX3Njb3BlIDw9IHNjb3BlIHx8IFNDVFBfU0NPUEVfTElOSyA9PSBhZGRyX3Njb3BlKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvY2h1bmsuYyBiL25ldC9zY3RwL2NodW5rLmMKaW5kZXggMTc0OGVmOS4uYWNmN2M0ZCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvY2h1bmsuYworKysgYi9uZXQvc2N0cC9jaHVuay5jCkBAIC01OSw2ICs1OSw3IEBACiAJbXNnLT5jYW5fYWJhbmRvbiA9IDA7CiAJbXNnLT5leHBpcmVzX2F0ID0gMDsKIAlJTklUX0xJU1RfSEVBRCgmbXNnLT5jaHVua3MpOworCW1zZy0+bXNnX3NpemUgPSAwOwogfQogCiAvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkYXRhbXNnLiAqLwpAQCAtNzMsNiArNzQsMTkgQEAKIAlyZXR1cm4gbXNnOwogfQogCit2b2lkIHNjdHBfZGF0YW1zZ19mcmVlKHN0cnVjdCBzY3RwX2RhdGFtc2cgKm1zZykKK3sKKwlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bms7CisKKwkvKiBUaGlzIGRvZXNuJ3QgaGF2ZSB0byBiZSBhIF9zYWZlIHZhaXJhbnQgYmVjYXVzZQorCSAqIHNjdHBfY2h1bmtfZnJlZSgpIG9ubHkgZHJvcHMgdGhlIHJlZnMuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgJm1zZy0+Y2h1bmtzLCBmcmFnX2xpc3QpCisJCXNjdHBfY2h1bmtfZnJlZShjaHVuayk7CisKKwlzY3RwX2RhdGFtc2dfcHV0KG1zZyk7Cit9CisKIC8qIEZpbmFsIGRlc3RydWN0cnVjdGlvbiBvZiBkYXRhbXNnIG1lbW9yeS4gKi8KIHN0YXRpYyB2b2lkIHNjdHBfZGF0YW1zZ19kZXN0cm95KHN0cnVjdCBzY3RwX2RhdGFtc2cgKm1zZykKIHsKQEAgLTE0Miw2ICsxNTYsNyBAQAogewogCXNjdHBfZGF0YW1zZ19ob2xkKG1zZyk7CiAJY2h1bmstPm1zZyA9IG1zZzsKKwltc2ctPm1zZ19zaXplICs9IGNodW5rLT5za2ItPmxlbjsKIH0KIAogCkBAIC0xNTgsNiArMTczLDcgQEAKIHsKIAlpbnQgbWF4LCB3aG9sZSwgaSwgb2Zmc2V0LCBvdmVyLCBlcnI7CiAJaW50IGxlbiwgZmlyc3RfbGVuOworCWludCBtYXhfZGF0YTsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bms7CiAJc3RydWN0IHNjdHBfZGF0YW1zZyAqbXNnOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRlbXA7CkBAIC0xNzksOCArMTk1LDE0IEBACiAJCQkJICBfX2Z1bmNfXywgbXNnLCBtc2ctPmV4cGlyZXNfYXQsIGppZmZpZXMpOwogCX0KIAotCW1heCA9IGFzb2MtPmZyYWdfcG9pbnQ7CisJLyogVGhpcyBpcyB0aGUgYmlnZ2VzdCBwb3NzaWJsZSBEQVRBIGNodW5rIHRoYXQgY2FuIGZpdCBpbnRvCisJICogdGhlIHBhY2tldAorCSAqLworCW1heF9kYXRhID0gYXNvYy0+cGF0aG10dSAtCisJCXNjdHBfc2soYXNvYy0+YmFzZS5zayktPnBmLT5hZi0+bmV0X2hlYWRlcl9sZW4gLQorCQlzaXplb2Yoc3RydWN0IHNjdHBoZHIpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspOwogCisJbWF4ID0gYXNvYy0+ZnJhZ19wb2ludDsKIAkvKiBJZiB0aGUgdGhlIHBlZXIgcmVxdWVzdGVkIHRoYXQgd2UgYXV0aGVudGljYXRlIERBVEEgY2h1bmtzCiAJICogd2UgbmVlZCB0byBhY2NvdW5kIGZvciBidW5kbGluZyBvZiB0aGUgQVVUSCBjaHVua3MgYWxvbmcgd2l0aAogCSAqIERBVEEuCkBAIC0xODksMjMgKzIxMSw0MSBAQAogCQlzdHJ1Y3Qgc2N0cF9obWFjICpobWFjX2Rlc2MgPSBzY3RwX2F1dGhfYXNvY19nZXRfaG1hYyhhc29jKTsKIAogCQlpZiAoaG1hY19kZXNjKQotCQkJbWF4IC09IFdPUkRfUk9VTkQoc2l6ZW9mKHNjdHBfYXV0aF9jaHVua190KSArCisJCQltYXhfZGF0YSAtPSBXT1JEX1JPVU5EKHNpemVvZihzY3RwX2F1dGhfY2h1bmtfdCkgKwogCQkJCQkgICAgaG1hY19kZXNjLT5obWFjX2xlbik7CiAJfQogCisJLyogTm93LCBjaGVjayBpZiB3ZSBuZWVkIHRvIHJlZHVjZSBvdXIgbWF4ICovCisJaWYgKG1heCA+IG1heF9kYXRhKQorCQltYXggPSBtYXhfZGF0YTsKKwogCXdob2xlID0gMDsKIAlmaXJzdF9sZW4gPSBtYXg7CiAKLQkvKiBFbmNvdXJhZ2UgQ29va2llLUVDSE8gYnVuZGxpbmcuICovCi0JaWYgKGFzb2MtPnN0YXRlIDwgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSB7Ci0JCXdob2xlID0gbXNnX2xlbiAvIChtYXggLSBTQ1RQX0FSQklUUkFSWV9DT09LSUVfRUNIT19MRU4pOworCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcGVuZGluZyBTQUNLIGFuZCB0cnkgdG8gbGV0IGl0IGJlIGJ1bmRsZWQKKwkgKiB3aXRoIHRoaXMgbWVzc2FnZS4gIERvIHRoaXMgaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgZGF0YSBxdWV1ZWQgYWxyZWFkeS4KKwkgKiBUbyBjaGVjayB0aGF0LCBsb29rIGF0IG91dF9xbGVuIGFuZCByZXRyYW5zbWl0IGxpc3QuCisJICogTk9URTogd2Ugd2lsbCBub3QgcmVkdWNlIHRvIGFjY291bnQgZm9yIFNBQ0ssIGlmIHRoZSBtZXNzYWdlIHdvdWxkCisJICogbm90IGhhdmUgYmVlbiBmcmFnbWVudGVkLgorCSAqLworCWlmICh0aW1lcl9wZW5kaW5nKCZhc29jLT50aW1lcnNbU0NUUF9FVkVOVF9USU1FT1VUX1NBQ0tdKSAmJgorCSAgICBhc29jLT5vdXRxdWV1ZS5vdXRfcWxlbiA9PSAwICYmCisJICAgIGxpc3RfZW1wdHkoJmFzb2MtPm91dHF1ZXVlLnJldHJhbnNtaXQpICYmCisJICAgIG1zZ19sZW4gPiBtYXgpCisJCW1heF9kYXRhIC09IFdPUkRfUk9VTkQoc2l6ZW9mKHNjdHBfc2Fja19jaHVua190KSk7CiAKLQkJLyogQWNjb3VudCBmb3IgdGhlIERBVEEgdG8gYmUgYnVuZGxlZCB3aXRoIHRoZSBDT09LSUUtRUNITy4gKi8KLQkJaWYgKHdob2xlKSB7Ci0JCQlmaXJzdF9sZW4gPSBtYXggLSBTQ1RQX0FSQklUUkFSWV9DT09LSUVfRUNIT19MRU47Ci0JCQltc2dfbGVuIC09IGZpcnN0X2xlbjsKLQkJCXdob2xlID0gMTsKLQkJfQorCS8qIEVuY291cmFnZSBDb29raWUtRUNITyBidW5kbGluZy4gKi8KKwlpZiAoYXNvYy0+c3RhdGUgPCBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpCisJCW1heF9kYXRhIC09IFNDVFBfQVJCSVRSQVJZX0NPT0tJRV9FQ0hPX0xFTjsKKworCS8qIE5vdyB0aGF0IHdlIGFkanVzdGVkIGNvbXBsZXRlbHksIHJlc2V0IGZpcnN0X2xlbiAqLworCWlmIChmaXJzdF9sZW4gPiBtYXhfZGF0YSkKKwkJZmlyc3RfbGVuID0gbWF4X2RhdGE7CisKKwkvKiBBY2NvdW50IGZvciBhIGRpZmZlcmVudCBzaXplZCBmaXJzdCBmcmFnbWVudCAqLworCWlmIChtc2dfbGVuID49IGZpcnN0X2xlbikgeworCQltc2dfbGVuIC09IGZpcnN0X2xlbjsKKwkJd2hvbGUgPSAxOwogCX0KIAogCS8qIEhvdyBtYW55IGZ1bGwgc2l6ZWQ/ICBIb3cgbWFueSBieXRlcyBsZWZ0b3Zlcj8gKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL2RlYnVnLmMgYi9uZXQvc2N0cC9kZWJ1Zy5jCmluZGV4IDdmZjU0OGEuLmJmMjRmYTYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2RlYnVnLmMKKysrIGIvbmV0L3NjdHAvZGVidWcuYwpAQCAtNTIsNyArNTIsNyBAQAogI2VuZGlmCS8qIFNDVFBfREVCVUcgKi8KIAogLyogVGhlc2UgYXJlIHByaW50YWJsZSBmb3JtcyBvZiBDaHVuayBJRCdzIGZyb20gc2VjdGlvbiAzLjEuICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnNjdHBfY2lkX3RibFtTQ1RQX05VTV9CQVNFX0NIVU5LX1RZUEVTXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzY3RwX2NpZF90YmxbU0NUUF9OVU1fQkFTRV9DSFVOS19UWVBFU10gPSB7CiAJIkRBVEEiLAogCSJJTklUIiwKIAkiSU5JVF9BQ0siLApAQCAtOTcsNyArOTcsNyBAQAogfQogCiAvKiBUaGVzZSBhcmUgcHJpbnRhYmxlIGZvcm1zIG9mIHRoZSBzdGF0ZXMuICAqLwotY29uc3QgY2hhciAqc2N0cF9zdGF0ZV90YmxbU0NUUF9TVEFURV9OVU1fU1RBVEVTXSA9IHsKK2NvbnN0IGNoYXIgKmNvbnN0IHNjdHBfc3RhdGVfdGJsW1NDVFBfU1RBVEVfTlVNX1NUQVRFU10gPSB7CiAJIlNUQVRFX0VNUFRZIiwKIAkiU1RBVEVfQ0xPU0VEIiwKIAkiU1RBVEVfQ09PS0lFX1dBSVQiLApAQCAtMTEwLDcgKzExMCw3IEBACiB9OwogCiAvKiBFdmVudHMgdGhhdCBjb3VsZCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFuIGFzc29jaWF0aW9uLiAgKi8KLWNvbnN0IGNoYXIgKnNjdHBfZXZ0dHlwZV90YmxbXSA9IHsKK2NvbnN0IGNoYXIgKmNvbnN0IHNjdHBfZXZ0dHlwZV90YmxbXSA9IHsKIAkiRVZFTlRfVF91bmtub3duIiwKIAkiRVZFTlRfVF9DSFVOSyIsCiAJIkVWRU5UX1RfVElNRU9VVCIsCkBAIC0xMTksNyArMTE5LDcgQEAKIH07CiAKIC8qIFJldHVybiB2YWx1ZSBvZiBhIHN0YXRlIGZ1bmN0aW9uICovCi1jb25zdCBjaGFyICpzY3RwX3N0YXR1c190YmxbXSA9IHsKK2NvbnN0IGNoYXIgKmNvbnN0IHNjdHBfc3RhdHVzX3RibFtdID0gewogCSJESVNQT1NJVElPTl9ESVNDQVJEIiwKIAkiRElTUE9TSVRJT05fQ09OU1VNRSIsCiAJIkRJU1BPU0lUSU9OX05PTUVNIiwKQEAgLTEzMiw3ICsxMzIsNyBAQAogfTsKIAogLyogUHJpbnRhYmxlIGZvcm1zIG9mIHByaW1pdGl2ZXMgKi8KLXN0YXRpYyBjb25zdCBjaGFyICpzY3RwX3ByaW1pdGl2ZV90YmxbU0NUUF9OVU1fUFJJTUlUSVZFX1RZUEVTXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzY3RwX3ByaW1pdGl2ZV90YmxbU0NUUF9OVU1fUFJJTUlUSVZFX1RZUEVTXSA9IHsKIAkiUFJJTUlUSVZFX0FTU09DSUFURSIsCiAJIlBSSU1JVElWRV9TSFVURE9XTiIsCiAJIlBSSU1JVElWRV9BQk9SVCIsCkBAIC0xNDksNyArMTQ5LDcgQEAKIAlyZXR1cm4gInVua25vd25fcHJpbWl0aXZlIjsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKnNjdHBfb3RoZXJfdGJsW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc2N0cF9vdGhlcl90YmxbXSA9IHsKIAkiTk9fUEVORElOR19UU04iLAogCSJJQ01QX1BST1RPX1VOUkVBQ0giLAogfTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogCXJldHVybiAidW5rbm93biAnb3RoZXInIGV2ZW50IjsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKnNjdHBfdGltZXJfdGJsW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc2N0cF90aW1lcl90YmxbXSA9IHsKIAkiVElNRU9VVF9OT05FIiwKIAkiVElNRU9VVF9UMV9DT09LSUUiLAogCSJUSU1FT1VUX1QxX0lOSVQiLApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvb3V0cHV0LmMgYi9uZXQvc2N0cC9vdXRwdXQuYwppbmRleCBiOTRjMjExLi41Y2JkYThmIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRwdXQuYworKysgYi9uZXQvc2N0cC9vdXRwdXQuYwpAQCAtNjEsOCArNjEsMjQgQEAKICNpbmNsdWRlIDxuZXQvc2N0cC9jaGVja3N1bS5oPgogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgcHJpdmF0ZSBoZWxwZXJzLiAqLwotc3RhdGljIHNjdHBfeG1pdF90IHNjdHBfcGFja2V0X2FwcGVuZF9kYXRhKHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LAorc3RhdGljIHNjdHBfeG1pdF90IHNjdHBfcGFja2V0X2Nhbl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwKIAkJCQkJICAgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rKTsKK3N0YXRpYyB2b2lkIHNjdHBfcGFja2V0X2FwcGVuZF9kYXRhKHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LAorCQkJCQkgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmspOworc3RhdGljIHNjdHBfeG1pdF90IHNjdHBfcGFja2V0X3dpbGxfZml0KHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LAorCQkJCQlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCisJCQkJCXUxNiBjaHVua19sZW4pOworCitzdGF0aWMgdm9pZCBzY3RwX3BhY2tldF9yZXNldChzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCkKK3sKKwlwYWNrZXQtPnNpemUgPSBwYWNrZXQtPm92ZXJoZWFkOworCXBhY2tldC0+aGFzX2Nvb2tpZV9lY2hvID0gMDsKKwlwYWNrZXQtPmhhc19zYWNrID0gMDsKKwlwYWNrZXQtPmhhc19kYXRhID0gMDsKKwlwYWNrZXQtPmhhc19hdXRoID0gMDsKKwlwYWNrZXQtPmlwZnJhZ29rID0gMDsKKwlwYWNrZXQtPmF1dGggPSBOVUxMOworfQogCiAvKiBDb25maWcgYSBwYWNrZXQuCiAgKiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBmb2xsb3d1cCBzZXQgb2YgaW5pdGlhbGl6YXRpb25zLgpAQCAtNzUsMTMgKzkxLDggQEAKIAlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IHBhY2tldDolcCB2dGFnOjB4JXhcbiIsIF9fZnVuY19fLAogCQkJICBwYWNrZXQsIHZ0YWcpOwogCisJc2N0cF9wYWNrZXRfcmVzZXQocGFja2V0KTsKIAlwYWNrZXQtPnZ0YWcgPSB2dGFnOwotCXBhY2tldC0+aGFzX2Nvb2tpZV9lY2hvID0gMDsKLQlwYWNrZXQtPmhhc19zYWNrID0gMDsKLQlwYWNrZXQtPmhhc19hdXRoID0gMDsKLQlwYWNrZXQtPmhhc19kYXRhID0gMDsKLQlwYWNrZXQtPmlwZnJhZ29rID0gMDsKLQlwYWNrZXQtPmF1dGggPSBOVUxMOwogCiAJaWYgKGVjbl9jYXBhYmxlICYmIHNjdHBfcGFja2V0X2VtcHR5KHBhY2tldCkpIHsKIAkJY2h1bmsgPSBzY3RwX2dldF9lY25lX3ByZXBlbmQocGFja2V0LT50cmFuc3BvcnQtPmFzb2MpOwpAQCAtMTE5LDE1ICsxMzAsOSBAQAogCX0KIAlvdmVyaGVhZCArPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwogCXBhY2tldC0+b3ZlcmhlYWQgPSBvdmVyaGVhZDsKLQlwYWNrZXQtPnNpemUgPSBvdmVyaGVhZDsKKwlzY3RwX3BhY2tldF9yZXNldChwYWNrZXQpOwogCXBhY2tldC0+dnRhZyA9IDA7Ci0JcGFja2V0LT5oYXNfY29va2llX2VjaG8gPSAwOwotCXBhY2tldC0+aGFzX3NhY2sgPSAwOwotCXBhY2tldC0+aGFzX2F1dGggPSAwOwotCXBhY2tldC0+aGFzX2RhdGEgPSAwOwotCXBhY2tldC0+aXBmcmFnb2sgPSAwOwogCXBhY2tldC0+bWFsbG9jZWQgPSAwOwotCXBhY2tldC0+YXV0aCA9IE5VTEw7CiAJcmV0dXJuIHBhY2tldDsKIH0KIApAQCAtMjA0LDcgKzIwOSw3IEBACiAJLyogU2VlIGlmIHRoaXMgaXMgYW4gYXV0aCBjaHVuayB3ZSBhcmUgYnVuZGxpbmcgb3IgaWYKIAkgKiBhdXRoIGlzIGFscmVhZHkgYnVuZGxlZC4KIAkgKi8KLQlpZiAoY2h1bmstPmNodW5rX2hkci0+dHlwZSA9PSBTQ1RQX0NJRF9BVVRIIHx8IHBrdC0+YXV0aCkKKwlpZiAoY2h1bmstPmNodW5rX2hkci0+dHlwZSA9PSBTQ1RQX0NJRF9BVVRIIHx8IHBrdC0+aGFzX2F1dGgpCiAJCXJldHVybiByZXR2YWw7CiAKIAkvKiBpZiB0aGUgcGVlciBkaWQgbm90IHJlcXVlc3QgdGhpcyBjaHVuayB0byBiZSBhdXRoZW50aWNhdGVkLApAQCAtMjM0LDE4ICsyMzksMTkgQEAKIAlpZiAoc2N0cF9jaHVua19pc19kYXRhKGNodW5rKSAmJiAhcGt0LT5oYXNfc2FjayAmJgogCSAgICAhcGt0LT5oYXNfY29va2llX2VjaG8pIHsKIAkJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcjsKIAkJYXNvYyA9IHBrdC0+dHJhbnNwb3J0LT5hc29jOworCQl0aW1lciA9ICZhc29jLT50aW1lcnNbU0NUUF9FVkVOVF9USU1FT1VUX1NBQ0tdOwogCi0JCWlmIChhc29jLT5hX3J3bmQgPiBhc29jLT5yd25kKSB7CisJCS8qIElmIHRoZSBTQUNLIHRpbWVyIGlzIHJ1bm5pbmcsIHdlIGhhdmUgYSBwZW5kaW5nIFNBQ0sgKi8KKwkJaWYgKHRpbWVyX3BlbmRpbmcodGltZXIpKSB7CiAJCQlzdHJ1Y3Qgc2N0cF9jaHVuayAqc2FjazsKIAkJCWFzb2MtPmFfcnduZCA9IGFzb2MtPnJ3bmQ7CiAJCQlzYWNrID0gc2N0cF9tYWtlX3NhY2soYXNvYyk7CiAJCQlpZiAoc2FjaykgewotCQkJCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcjsKIAkJCQlyZXR2YWwgPSBzY3RwX3BhY2tldF9hcHBlbmRfY2h1bmsocGt0LCBzYWNrKTsKIAkJCQlhc29jLT5wZWVyLnNhY2tfbmVlZGVkID0gMDsKLQkJCQl0aW1lciA9ICZhc29jLT50aW1lcnNbU0NUUF9FVkVOVF9USU1FT1VUX1NBQ0tdOwotCQkJCWlmICh0aW1lcl9wZW5kaW5nKHRpbWVyKSAmJiBkZWxfdGltZXIodGltZXIpKQorCQkJCWlmIChkZWxfdGltZXIodGltZXIpKQogCQkJCQlzY3RwX2Fzc29jaWF0aW9uX3B1dChhc29jKTsKIAkJCX0KIAkJfQpAQCAtMjYxLDEzICsyNjcsMjAgQEAKIHsKIAlzY3RwX3htaXRfdCByZXR2YWwgPSBTQ1RQX1hNSVRfT0s7CiAJX191MTYgY2h1bmtfbGVuID0gV09SRF9ST1VORChudG9ocyhjaHVuay0+Y2h1bmtfaGRyLT5sZW5ndGgpKTsKLQlzaXplX3QgcHNpemU7Ci0Jc2l6ZV90IHBtdHU7Ci0JaW50IHRvb19iaWc7CiAKIAlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IHBhY2tldDolcCBjaHVuazolcFxuIiwgX19mdW5jX18sIHBhY2tldCwKIAkJCSAgY2h1bmspOwogCisJLyogRGF0YSBjaHVua3MgYXJlIHNwZWNpYWwuICBCZWZvcmUgc2VlaW5nIHdoYXQgZWxzZSB3ZSBjYW4KKwkgKiBidW5kbGUgaW50byB0aGlzIHBhY2tldCwgY2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBhbGxvd2VkIHRvCisJICogc2VuZCB0aGlzIERBVEEuCisJICovCisJaWYgKHNjdHBfY2h1bmtfaXNfZGF0YShjaHVuaykpIHsKKwkJcmV0dmFsID0gc2N0cF9wYWNrZXRfY2FuX2FwcGVuZF9kYXRhKHBhY2tldCwgY2h1bmspOworCQlpZiAocmV0dmFsICE9IFNDVFBfWE1JVF9PSykKKwkJCWdvdG8gZmluaXNoOworCX0KKwogCS8qIFRyeSB0byBidW5kbGUgQVVUSCBjaHVuayAqLwogCXJldHZhbCA9IHNjdHBfcGFja2V0X2J1bmRsZV9hdXRoKHBhY2tldCwgY2h1bmspOwogCWlmIChyZXR2YWwgIT0gU0NUUF9YTUlUX09LKQpAQCAtMjc4LDUxICsyOTEsMTYgQEAKIAlpZiAocmV0dmFsICE9IFNDVFBfWE1JVF9PSykKIAkJZ290byBmaW5pc2g7CiAKLQlwc2l6ZSA9IHBhY2tldC0+c2l6ZTsKLQlwbXR1ICA9ICgocGFja2V0LT50cmFuc3BvcnQtPmFzb2MpID8KLQkJIChwYWNrZXQtPnRyYW5zcG9ydC0+YXNvYy0+cGF0aG10dSkgOgotCQkgKHBhY2tldC0+dHJhbnNwb3J0LT5wYXRobXR1KSk7CisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgY2h1bmsgd2lsbCBmaXQgaW50byB0aGUgcGFja2V0ICovCisJcmV0dmFsID0gc2N0cF9wYWNrZXRfd2lsbF9maXQocGFja2V0LCBjaHVuaywgY2h1bmtfbGVuKTsKKwlpZiAocmV0dmFsICE9IFNDVFBfWE1JVF9PSykKKwkJZ290byBmaW5pc2g7CiAKLQl0b29fYmlnID0gKHBzaXplICsgY2h1bmtfbGVuID4gcG10dSk7Ci0KLQkvKiBEZWNpZGUgaWYgd2UgbmVlZCB0byBmcmFnbWVudCBvciByZXN1Ym1pdCBsYXRlci4gKi8KLQlpZiAodG9vX2JpZykgewotCQkvKiBJdCdzIE9LIHRvIGZyYWdtZXQgYXQgSVAgbGV2ZWwgaWYgYW55IG9uZSBvZiB0aGUgZm9sbG93aW5nCi0JCSAqIGlzIHRydWU6Ci0JCSAqIAkxLiBUaGUgcGFja2V0IGlzIGVtcHR5IChtZWFuaW5nIHRoaXMgY2h1bmsgaXMgZ3JlYXRlcgotCQkgKiAJICAgdGhlIE1UVSkKLQkJICogCTIuIFRoZSBjaHVuayB3ZSBhcmUgYWRkaW5nIGlzIGEgY29udHJvbCBjaHVuawotCQkgKiAJMy4gVGhlIHBhY2tldCBkb2Vzbid0IGhhdmUgYW55IGRhdGEgaW4gaXQgeWV0IGFuZCBkYXRhCi0JCSAqIAlyZXF1aXJlcyBhdXRoZW50aWNhdGlvbi4KLQkJICovCi0JCWlmIChzY3RwX3BhY2tldF9lbXB0eShwYWNrZXQpIHx8ICFzY3RwX2NodW5rX2lzX2RhdGEoY2h1bmspIHx8Ci0JCSAgICAoIXBhY2tldC0+aGFzX2RhdGEgJiYgY2h1bmstPmF1dGgpKSB7Ci0JCQkvKiBXZSBubyBsb25nZXIgZG8gcmUtZnJhZ21lbnRhdGlvbi4KLQkJCSAqIEp1c3QgZnJhZ21lbnQgYXQgdGhlIElQIGxheWVyLCBpZiB3ZQotCQkJICogYWN0dWFsbHkgaGl0IHRoaXMgY29uZGl0aW9uCi0JCQkgKi8KLQkJCXBhY2tldC0+aXBmcmFnb2sgPSAxOwotCQkJZ290byBhcHBlbmQ7Ci0KLQkJfSBlbHNlIHsKLQkJCXJldHZhbCA9IFNDVFBfWE1JVF9QTVRVX0ZVTEw7Ci0JCQlnb3RvIGZpbmlzaDsKLQkJfQotCX0KLQotYXBwZW5kOgotCS8qIFdlIGJlbGlldmUgdGhhdCB0aGlzIGNodW5rIGlzIE9LIHRvIGFkZCB0byB0aGUgcGFja2V0IChhcwotCSAqIGxvbmcgYXMgd2UgaGF2ZSB0aGUgY3duZCBmb3IgaXQpLgotCSAqLwotCi0JLyogREFUQSBpcyBhIHNwZWNpYWwgY2FzZSBzaW5jZSB3ZSBtdXN0IGV4YW1pbmUgYm90aCByd25kIGFuZCBjd25kCi0JICogYmVmb3JlIHdlIHNlbmQgREFUQS4KLQkgKi8KKwkvKiBXZSBiZWxpZXZlIHRoYXQgdGhpcyBjaHVuayBpcyBPSyB0byBhZGQgdG8gdGhlIHBhY2tldCAqLwogCXN3aXRjaCAoY2h1bmstPmNodW5rX2hkci0+dHlwZSkgewogCSAgICBjYXNlIFNDVFBfQ0lEX0RBVEE6Ci0JCXJldHZhbCA9IHNjdHBfcGFja2V0X2FwcGVuZF9kYXRhKHBhY2tldCwgY2h1bmspOwotCQlpZiAoU0NUUF9YTUlUX09LICE9IHJldHZhbCkKLQkJCWdvdG8gZmluaXNoOworCQkvKiBBY2NvdW50IGZvciB0aGUgZGF0YSBiZWluZyBpbiB0aGUgcGFja2V0ICovCisJCXNjdHBfcGFja2V0X2FwcGVuZF9kYXRhKHBhY2tldCwgY2h1bmspOwogCQkvKiBEaXNhbGxvdyBTQUNLIGJ1bmRsaW5nIGFmdGVyIERBVEEuICovCiAJCXBhY2tldC0+aGFzX3NhY2sgPSAxOwogCQkvKiBEaXNhbGxvdyBBVVRIIGJ1bmRsaW5nIGFmdGVyIERBVEEgKi8KQEAgLTU5OCw3ICs1NzYsNyBAQAogCSgqdHAtPmFmX3NwZWNpZmljLT5zY3RwX3htaXQpKG5za2IsIHRwKTsKIAogb3V0OgotCXBhY2tldC0+c2l6ZSA9IHBhY2tldC0+b3ZlcmhlYWQ7CisJc2N0cF9wYWNrZXRfcmVzZXQocGFja2V0KTsKIAlyZXR1cm4gZXJyOwogbm9fcm91dGU6CiAJa2ZyZWVfc2tiKG5za2IpOwpAQCAtNjMyLDE2ICs2MTAsMTUgQEAKICAqIDJuZCBMZXZlbCBBYnN0cmFjdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogVGhpcyBwcml2YXRlIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHNwZWNpZmljcyBvZiBhcHBlbmRpbmcgREFUQSBjaHVua3MuICAqLwotc3RhdGljIHNjdHBfeG1pdF90IHNjdHBfcGFja2V0X2FwcGVuZF9kYXRhKHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LAorLyogVGhpcyBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrIHRvIHNlZSBpZiBhIGNodW5rIGNhbiBiZSBhZGRlZCAqLworc3RhdGljIHNjdHBfeG1pdF90IHNjdHBfcGFja2V0X2Nhbl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwKIAkJCQkJICAgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rKQogewogCXNjdHBfeG1pdF90IHJldHZhbCA9IFNDVFBfWE1JVF9PSzsKLQlzaXplX3QgZGF0YXNpemUsIHJ3bmQsIGluZmxpZ2h0OworCXNpemVfdCBkYXRhc2l6ZSwgcnduZCwgaW5mbGlnaHQsIGZsaWdodF9zaXplOwogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gcGFja2V0LT50cmFuc3BvcnQ7CiAJX191MzIgbWF4X2J1cnN0X2J5dGVzOwogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gdHJhbnNwb3J0LT5hc29jOwotCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0cF9zayhhc29jLT5iYXNlLnNrKTsKIAlzdHJ1Y3Qgc2N0cF9vdXRxICpxID0gJmFzb2MtPm91dHF1ZXVlOwogCiAJLyogUkZDIDI5NjAgNi4xICBUcmFuc21pc3Npb24gb2YgREFUQSBDaHVua3MKQEAgLTY1OCw3ICs2MzUsOCBAQAogCSAqLwogCiAJcnduZCA9IGFzb2MtPnBlZXIucnduZDsKLQlpbmZsaWdodCA9IGFzb2MtPm91dHF1ZXVlLm91dHN0YW5kaW5nX2J5dGVzOworCWluZmxpZ2h0ID0gcS0+b3V0c3RhbmRpbmdfYnl0ZXM7CisJZmxpZ2h0X3NpemUgPSB0cmFuc3BvcnQtPmZsaWdodF9zaXplOwogCiAJZGF0YXNpemUgPSBzY3RwX2RhdGFfc2l6ZShjaHVuayk7CiAKQEAgLTY4MSw4ICs2NTksOCBAQAogCSAqCQljd25kID0gZmxpZ2h0c2l6ZSArIE1heC5CdXJzdCAqIE1UVQogCSAqLwogCW1heF9idXJzdF9ieXRlcyA9IGFzb2MtPm1heF9idXJzdCAqIGFzb2MtPnBhdGhtdHU7Ci0JaWYgKCh0cmFuc3BvcnQtPmZsaWdodF9zaXplICsgbWF4X2J1cnN0X2J5dGVzKSA8IHRyYW5zcG9ydC0+Y3duZCkgewotCQl0cmFuc3BvcnQtPmN3bmQgPSB0cmFuc3BvcnQtPmZsaWdodF9zaXplICsgbWF4X2J1cnN0X2J5dGVzOworCWlmICgoZmxpZ2h0X3NpemUgKyBtYXhfYnVyc3RfYnl0ZXMpIDwgdHJhbnNwb3J0LT5jd25kKSB7CisJCXRyYW5zcG9ydC0+Y3duZCA9IGZsaWdodF9zaXplICsgbWF4X2J1cnN0X2J5dGVzOwogCQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IGN3bmQgbGltaXRlZCBieSBtYXhfYnVyc3Q6ICIKIAkJCQkgICJ0cmFuc3BvcnQ6ICVwLCBjd25kOiAlZCwgIgogCQkJCSAgInNzdGhyZXNoOiAlZCwgZmxpZ2h0X3NpemU6ICVkLCAiCkBAIC03MDcsNyArNjg1LDcgQEAKIAkgKiAgICBpZ25vcmUgdGhlIHZhbHVlIG9mIGN3bmQgYW5kIFNIT1VMRCBOT1QgZGVsYXkgcmV0cmFuc21pc3Npb24uCiAJICovCiAJaWYgKGNodW5rLT5mYXN0X3JldHJhbnNtaXQgIT0gU0NUUF9ORUVEX0ZSVFgpCi0JCWlmICh0cmFuc3BvcnQtPmZsaWdodF9zaXplID49IHRyYW5zcG9ydC0+Y3duZCkgeworCQlpZiAoZmxpZ2h0X3NpemUgPj0gdHJhbnNwb3J0LT5jd25kKSB7CiAJCQlyZXR2YWwgPSBTQ1RQX1hNSVRfUldORF9GVUxMOwogCQkJZ290byBmaW5pc2g7CiAJCX0KQEAgLTcxNywyMCArNjk1LDM2IEBACiAJICogaWYgYW55IHByZXZpb3VzbHkgdHJhbnNtaXR0ZWQgZGF0YSBvbiB0aGUgY29ubmVjdGlvbiByZW1haW5zCiAJICogdW5hY2tub3dsZWRnZWQuCiAJICovCi0JaWYgKCFzcC0+bm9kZWxheSAmJiBzY3RwX3BhY2tldF9lbXB0eShwYWNrZXQpICYmCi0JICAgIHEtPm91dHN0YW5kaW5nX2J5dGVzICYmIHNjdHBfc3RhdGUoYXNvYywgRVNUQUJMSVNIRUQpKSB7Ci0JCXVuc2lnbmVkIGxlbiA9IGRhdGFzaXplICsgcS0+b3V0X3FsZW47CisJaWYgKCFzY3RwX3NrKGFzb2MtPmJhc2Uuc2spLT5ub2RlbGF5ICYmIHNjdHBfcGFja2V0X2VtcHR5KHBhY2tldCkgJiYKKwkgICAgaW5mbGlnaHQgJiYgc2N0cF9zdGF0ZShhc29jLCBFU1RBQkxJU0hFRCkpIHsKKwkJdW5zaWduZWQgbWF4ID0gdHJhbnNwb3J0LT5wYXRobXR1IC0gcGFja2V0LT5vdmVyaGVhZDsKKwkJdW5zaWduZWQgbGVuID0gY2h1bmstPnNrYi0+bGVuICsgcS0+b3V0X3FsZW47CiAKIAkJLyogQ2hlY2sgd2hldGhlciB0aGlzIGNodW5rIGFuZCBhbGwgdGhlIHJlc3Qgb2YgcGVuZGluZwogCQkgKiBkYXRhIHdpbGwgZml0IG9yIGRlbGF5IGluIGhvcGVzIG9mIGJ1bmRsaW5nIGEgZnVsbAogCQkgKiBzaXplZCBwYWNrZXQuCisJCSAqIERvbid0IGRlbGF5IGxhcmdlIG1lc3NhZ2Ugd3JpdGVzIHRoYXQgbWF5IGhhdmUgYmVlbgorCQkgKiBmcmFnbWVuZXRlZCBpbnRvIHNtYWxsIHBlaWNlcy4KIAkJICovCi0JCWlmIChsZW4gPCBhc29jLT5mcmFnX3BvaW50KSB7CisJCWlmICgobGVuIDwgbWF4KSAmJiAoY2h1bmstPm1zZy0+bXNnX3NpemUgPCBtYXgpKSB7CiAJCQlyZXR2YWwgPSBTQ1RQX1hNSVRfTkFHTEVfREVMQVk7CiAJCQlnb3RvIGZpbmlzaDsKIAkJfQogCX0KIAorZmluaXNoOgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qIFRoaXMgcHJpdmF0ZSBmdW5jdGlvbiBkb2VzIG1hbmFnZW1lbnQgdGhpbmdzIHdoZW4gYWRkaW5nIERBVEEgY2h1bmsgKi8KK3N0YXRpYyB2b2lkIHNjdHBfcGFja2V0X2FwcGVuZF9kYXRhKHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LAorCQkJCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaykKK3sKKwlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCA9IHBhY2tldC0+dHJhbnNwb3J0OworCXNpemVfdCBkYXRhc2l6ZSA9IHNjdHBfZGF0YV9zaXplKGNodW5rKTsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9IHRyYW5zcG9ydC0+YXNvYzsKKwl1MzIgcnduZCA9IGFzb2MtPnBlZXIucnduZDsKKwogCS8qIEtlZXAgdHJhY2sgb2YgaG93IG1hbnkgYnl0ZXMgYXJlIGluIGZsaWdodCBvdmVyIHRoaXMgdHJhbnNwb3J0LiAqLwogCXRyYW5zcG9ydC0+ZmxpZ2h0X3NpemUgKz0gZGF0YXNpemU7CiAKQEAgLTc1Myw3ICs3NDcsNDUgQEAKIAkvKiBIYXMgYmVlbiBhY2NlcHRlZCBmb3IgdHJhbnNtaXNzaW9uLiAqLwogCWlmICghYXNvYy0+cGVlci5wcnNjdHBfY2FwYWJsZSkKIAkJY2h1bmstPm1zZy0+Y2FuX2FiYW5kb24gPSAwOworfQogCi1maW5pc2g6CitzdGF0aWMgc2N0cF94bWl0X3Qgc2N0cF9wYWNrZXRfd2lsbF9maXQoc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQsCisJCQkJCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywKKwkJCQkJdTE2IGNodW5rX2xlbikKK3sKKwlzaXplX3QgcHNpemU7CisJc2l6ZV90IHBtdHU7CisJaW50IHRvb19iaWc7CisJc2N0cF94bWl0X3QgcmV0dmFsID0gU0NUUF9YTUlUX09LOworCisJcHNpemUgPSBwYWNrZXQtPnNpemU7CisJcG10dSAgPSAoKHBhY2tldC0+dHJhbnNwb3J0LT5hc29jKSA/CisJCShwYWNrZXQtPnRyYW5zcG9ydC0+YXNvYy0+cGF0aG10dSkgOgorCQkocGFja2V0LT50cmFuc3BvcnQtPnBhdGhtdHUpKTsKKworCXRvb19iaWcgPSAocHNpemUgKyBjaHVua19sZW4gPiBwbXR1KTsKKworCS8qIERlY2lkZSBpZiB3ZSBuZWVkIHRvIGZyYWdtZW50IG9yIHJlc3VibWl0IGxhdGVyLiAqLworCWlmICh0b29fYmlnKSB7CisJCS8qIEl0J3MgT0sgdG8gZnJhZ21ldCBhdCBJUCBsZXZlbCBpZiBhbnkgb25lIG9mIHRoZSBmb2xsb3dpbmcKKwkJICogaXMgdHJ1ZToKKwkJICogCTEuIFRoZSBwYWNrZXQgaXMgZW1wdHkgKG1lYW5pbmcgdGhpcyBjaHVuayBpcyBncmVhdGVyCisJCSAqIAkgICB0aGUgTVRVKQorCQkgKiAJMi4gVGhlIGNodW5rIHdlIGFyZSBhZGRpbmcgaXMgYSBjb250cm9sIGNodW5rCisJCSAqIAkzLiBUaGUgcGFja2V0IGRvZXNuJ3QgaGF2ZSBhbnkgZGF0YSBpbiBpdCB5ZXQgYW5kIGRhdGEKKwkJICogCXJlcXVpcmVzIGF1dGhlbnRpY2F0aW9uLgorCQkgKi8KKwkJaWYgKHNjdHBfcGFja2V0X2VtcHR5KHBhY2tldCkgfHwgIXNjdHBfY2h1bmtfaXNfZGF0YShjaHVuaykgfHwKKwkJICAgICghcGFja2V0LT5oYXNfZGF0YSAmJiBjaHVuay0+YXV0aCkpIHsKKwkJCS8qIFdlIG5vIGxvbmdlciBkbyByZS1mcmFnbWVudGF0aW9uLgorCQkJICogSnVzdCBmcmFnbWVudCBhdCB0aGUgSVAgbGF5ZXIsIGlmIHdlCisJCQkgKiBhY3R1YWxseSBoaXQgdGhpcyBjb25kaXRpb24KKwkJCSAqLworCQkJcGFja2V0LT5pcGZyYWdvayA9IDE7CisJCX0gZWxzZSB7CisJCQlyZXR2YWwgPSBTQ1RQX1hNSVRfUE1UVV9GVUxMOworCQl9CisJfQorCiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHF1ZXVlLmMgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCmluZGV4IGQ3NjVmYzUuLmM5ZjIwZTIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHF1ZXVlLmMKKysrIGIvbmV0L3NjdHAvb3V0cXVldWUuYwpAQCAtNDA2LDggKzQwNiw5IEBACiAJCQkgKiBub3QgYmUgcmV0cmFuc21pdHRlZAogCQkJICovCiAJCQlpZiAoIWNodW5rLT50c25fZ2FwX2Fja2VkKSB7Ci0JCQkJY2h1bmstPnRyYW5zcG9ydC0+ZmxpZ2h0X3NpemUgLT0KLQkJCQkJCXNjdHBfZGF0YV9zaXplKGNodW5rKTsKKwkJCQlpZiAoY2h1bmstPnRyYW5zcG9ydCkKKwkJCQkJY2h1bmstPnRyYW5zcG9ydC0+ZmxpZ2h0X3NpemUgLT0KKwkJCQkJCQlzY3RwX2RhdGFfc2l6ZShjaHVuayk7CiAJCQkJcS0+b3V0c3RhbmRpbmdfYnl0ZXMgLT0gc2N0cF9kYXRhX3NpemUoY2h1bmspOwogCQkJCXEtPmFzb2MtPnBlZXIucnduZCArPSAoc2N0cF9kYXRhX3NpemUoY2h1bmspICsKIAkJCQkJCQlzaXplb2Yoc3RydWN0IHNrX2J1ZmYpKTsKQEAgLTQ0Myw3ICs0NDQsOCBAQAogCQkJcS0+YXNvYy0+cGVlci5yd25kICs9IChzY3RwX2RhdGFfc2l6ZShjaHVuaykgKwogCQkJCQkJc2l6ZW9mKHN0cnVjdCBza19idWZmKSk7CiAJCQlxLT5vdXRzdGFuZGluZ19ieXRlcyAtPSBzY3RwX2RhdGFfc2l6ZShjaHVuayk7Ci0JCQl0cmFuc3BvcnQtPmZsaWdodF9zaXplIC09IHNjdHBfZGF0YV9zaXplKGNodW5rKTsKKwkJCWlmIChjaHVuay0+dHJhbnNwb3J0KQorCQkJCXRyYW5zcG9ydC0+ZmxpZ2h0X3NpemUgLT0gc2N0cF9kYXRhX3NpemUoY2h1bmspOwogCiAJCQkvKiBzY3RwaW1wZ3VpZGUtMDUgU2VjdGlvbiAyLjguMgogCQkJICogTTUpIElmIGEgVDMtcnR4IHRpbWVyIGV4cGlyZXMsIHRoZQpAQCAtMTMxMCw2ICsxMzEyLDcgQEAKIAlfX3UzMiBydHQ7CiAJX191OCByZXN0YXJ0X3RpbWVyID0gMDsKIAlpbnQgYnl0ZXNfYWNrZWQgPSAwOworCWludCBtaWdyYXRlX2J5dGVzID0gMDsKIAogCS8qIFRoZXNlIHN0YXRlIHZhcmlhYmxlcyBhcmUgZm9yIGNvaGVyZW50IGRlYnVnIG91dHB1dC4gLS14Z3VvICovCiAKQEAgLTEzNDMsOCArMTM0Niw5IEBACiAJCQkgKiBjb25zaWRlcmluZyBpdCBhcyAnb3V0c3RhbmRpbmcnLgogCQkJICovCiAJCQlpZiAoIXRjaHVuay0+dHNuX2dhcF9hY2tlZCkgewotCQkJCXRjaHVuay0+dHJhbnNwb3J0LT5mbGlnaHRfc2l6ZSAtPQotCQkJCQkJc2N0cF9kYXRhX3NpemUodGNodW5rKTsKKwkJCQlpZiAodGNodW5rLT50cmFuc3BvcnQpCisJCQkJCXRjaHVuay0+dHJhbnNwb3J0LT5mbGlnaHRfc2l6ZSAtPQorCQkJCQkJCXNjdHBfZGF0YV9zaXplKHRjaHVuayk7CiAJCQkJcS0+b3V0c3RhbmRpbmdfYnl0ZXMgLT0gc2N0cF9kYXRhX3NpemUodGNodW5rKTsKIAkJCX0KIAkJCWNvbnRpbnVlOwpAQCAtMTM3OCw2ICsxMzgyLDIwIEBACiAJCQkJCQkJCSAgcnR0KTsKIAkJCQl9CiAJCQl9CisKKwkJCS8qIElmIHRoZSBjaHVuayBoYXNuJ3QgYmVlbiBtYXJrZWQgYXMgQUNLRUQsCisJCQkgKiBtYXJrIGl0IGFuZCBhY2NvdW50IGJ5dGVzX2Fja2VkIGlmIHRoZQorCQkJICogY2h1bmsgaGFkIGEgdmFsaWQgdHJhbnNwb3J0IChpdCB3aWxsIG5vdAorCQkJICogaGF2ZSBhIHRyYW5zcG9ydCBpZiBBU0NPTkYgaGFkIGRlbGV0ZWQgaXQKKwkJCSAqIHdoaWxlIERBVEEgd2FzIG91dHN0YW5kaW5nKS4KKwkJCSAqLworCQkJaWYgKCF0Y2h1bmstPnRzbl9nYXBfYWNrZWQpIHsKKwkJCQl0Y2h1bmstPnRzbl9nYXBfYWNrZWQgPSAxOworCQkJCWJ5dGVzX2Fja2VkICs9IHNjdHBfZGF0YV9zaXplKHRjaHVuayk7CisJCQkJaWYgKCF0Y2h1bmstPnRyYW5zcG9ydCkKKwkJCQkJbWlncmF0ZV9ieXRlcyArPSBzY3RwX2RhdGFfc2l6ZSh0Y2h1bmspOworCQkJfQorCiAJCQlpZiAoVFNOX2x0ZSh0c24sIHNhY2tfY3RzbikpIHsKIAkJCQkvKiBSRkMgMjk2MCAgNi4zLjIgUmV0cmFuc21pc3Npb24gVGltZXIgUnVsZXMKIAkJCQkgKgpAQCAtMTM5MSw4ICsxNDA5LDYgQEAKIAkJCQlyZXN0YXJ0X3RpbWVyID0gMTsKIAogCQkJCWlmICghdGNodW5rLT50c25fZ2FwX2Fja2VkKSB7Ci0JCQkJCXRjaHVuay0+dHNuX2dhcF9hY2tlZCA9IDE7Ci0JCQkJCWJ5dGVzX2Fja2VkICs9IHNjdHBfZGF0YV9zaXplKHRjaHVuayk7CiAJCQkJCS8qCiAJCQkJCSAqIFNGUi1DQUNDIGFsZ29yaXRobToKIAkJCQkJICogMikgSWYgdGhlIFNBQ0sgY29udGFpbnMgZ2FwIGFja3MKQEAgLTE0MzIsMTAgKzE0NDgsNiBAQAogCQkJCSAqIG9sZGVyIHRoYW4gdGhhdCBuZXdseSBhY2tub3dsZWRnZWQgREFUQQogCQkJCSAqIGNodW5rLCBhcmUgcXVhbGlmaWVkIGFzICdTdHJheSBEQVRBIGNodW5rcycuCiAJCQkJICovCi0JCQkJaWYgKCF0Y2h1bmstPnRzbl9nYXBfYWNrZWQpIHsKLQkJCQkJdGNodW5rLT50c25fZ2FwX2Fja2VkID0gMTsKLQkJCQkJYnl0ZXNfYWNrZWQgKz0gc2N0cF9kYXRhX3NpemUodGNodW5rKTsKLQkJCQl9CiAJCQkJbGlzdF9hZGRfdGFpbChsY2h1bmssICZ0bGlzdCk7CiAJCQl9CiAKQEAgLTE0OTEsNyArMTUwMyw4IEBACiAJCQkJCQkgIHRzbik7CiAJCQkJdGNodW5rLT50c25fZ2FwX2Fja2VkID0gMDsKIAotCQkJCWJ5dGVzX2Fja2VkIC09IHNjdHBfZGF0YV9zaXplKHRjaHVuayk7CisJCQkJaWYgKHRjaHVuay0+dHJhbnNwb3J0KQorCQkJCQlieXRlc19hY2tlZCAtPSBzY3RwX2RhdGFfc2l6ZSh0Y2h1bmspOwogCiAJCQkJLyogUkZDIDI5NjAgNi4zLjIgUmV0cmFuc21pc3Npb24gVGltZXIgUnVsZXMKIAkJCQkgKgpAQCAtMTU2MSw2ICsxNTc0LDE0IEBACiAjZW5kaWYgLyogU0NUUF9ERUJVRyAqLwogCWlmICh0cmFuc3BvcnQpIHsKIAkJaWYgKGJ5dGVzX2Fja2VkKSB7CisJCQkvKiBXZSBtYXkgaGF2ZSBjb3VudGVkIERBVEEgdGhhdCB3YXMgbWlncmF0ZWQKKwkJCSAqIHRvIHRoaXMgdHJhbnNwb3J0IGR1ZSB0byBERUwtSVAgb3BlcmF0aW9uLgorCQkJICogU3VidHJhY3QgdGhvc2UgYnl0ZXMsIHNpbmNlIHRoZSB3ZXJlIG5ldmVyCisJCQkgKiBzZW5kIG9uIHRoaXMgdHJhbnNwb3J0IGFuZCBzaG91bGRuJ3QgYmUKKwkJCSAqIGNyZWRpdGVkIHRvIHRoaXMgdHJhbnNwb3J0LgorCQkJICovCisJCQlieXRlc19hY2tlZCAtPSBtaWdyYXRlX2J5dGVzOworCiAJCQkvKiA4LjIuIFdoZW4gYW4gb3V0c3RhbmRpbmcgVFNOIGlzIGFja25vd2xlZGdlZCwKIAkJCSAqIHRoZSBlbmRwb2ludCBzaGFsbCBjbGVhciB0aGUgZXJyb3IgY291bnRlciBvZgogCQkJICogdGhlIGRlc3RpbmF0aW9uIHRyYW5zcG9ydCBhZGRyZXNzIHRvIHdoaWNoIHRoZQpAQCAtMTU4OSw3ICsxNjEwLDcgQEAKIAkJCXRyYW5zcG9ydC0+ZmxpZ2h0X3NpemUgLT0gYnl0ZXNfYWNrZWQ7CiAJCQlpZiAodHJhbnNwb3J0LT5mbGlnaHRfc2l6ZSA9PSAwKQogCQkJCXRyYW5zcG9ydC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7Ci0JCQlxLT5vdXRzdGFuZGluZ19ieXRlcyAtPSBieXRlc19hY2tlZDsKKwkJCXEtPm91dHN0YW5kaW5nX2J5dGVzIC09IGJ5dGVzX2Fja2VkICsgbWlncmF0ZV9ieXRlczsKIAkJfSBlbHNlIHsKIAkJCS8qIFJGQyAyOTYwIDYuMSwgc2N0cGltcGd1aWRlLTA2IDIuMTUuMgogCQkJICogV2hlbiBhIHNlbmRlciBpcyBkb2luZyB6ZXJvIHdpbmRvdyBwcm9iaW5nLCBpdApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvcHJvYy5jIGIvbmV0L3NjdHAvcHJvYy5jCmluZGV4IGYyNjg5MTAuLmQwOTNjYmYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb2MuYworKysgYi9uZXQvc2N0cC9wcm9jLmMKQEAgLTUxMiwxMCArNTEyLDggQEAKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7CiAKLQlwID0gY3JlYXRlX3Byb2NfZW50cnkoInJlbWFkZHIiLCBTX0lSVUdPLCBwcm9jX25ldF9zY3RwKTsKKwlwID0gcHJvY19jcmVhdGUoInJlbWFkZHIiLCBTX0lSVUdPLCBwcm9jX25ldF9zY3RwLCAmc2N0cF9yZW1hZGRyX3NlcV9mb3BzKTsKIAlpZiAoIXApCiAJCXJldHVybiAtRU5PTUVNOwotCXAtPnByb2NfZm9wcyA9ICZzY3RwX3JlbWFkZHJfc2VxX2ZvcHM7Ci0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IGE3NmRhNjUuLjYwMDkzYmUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtNDMxLDE2ICs0MzEsMTQgQEAKICAqIG9mIHJlcXVlc3RlZCBkZXN0aW5hdGlvbiBhZGRyZXNzLCBzZW5kZXIgYW5kIHJlY2VpdmVyCiAgKiBTSE9VTEQgaW5jbHVkZSBhbGwgb2YgaXRzIGFkZHJlc3NlcyB3aXRoIGxldmVsIGdyZWF0ZXIKICAqIHRoYW4gb3IgZXF1YWwgdG8gTC4KKyAqCisgKiBJUHY0IHNjb3BpbmcgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCBzeXNjdGwgb3B0aW9uCisgKiBuZXQuc2N0cC5hZGRyX3Njb3BlX3BvbGljeQogICovCiBzdGF0aWMgc2N0cF9zY29wZV90IHNjdHBfdjRfc2NvcGUodW5pb24gc2N0cF9hZGRyICphZGRyKQogewogCXNjdHBfc2NvcGVfdCByZXR2YWw7CiAKLQkvKiBTaG91bGQgSVB2NCBzY29waW5nIGJlIGEgc3lzY3RsIGNvbmZpZ3VyYWJsZSBvcHRpb24KLQkgKiBzbyB1c2VycyBjYW4gdHVybiBpdCBvZmYgKGRlZmF1bHQgb24pIGZvciBjZXJ0YWluCi0JICogdW5jb252ZW50aW9uYWwgbmV0d29ya2luZyBlbnZpcm9ubWVudHM/Ci0JICovCi0KIAkvKiBDaGVjayBmb3IgdW51c2FibGUgU0NUUCBhZGRyZXNzZXMuICovCiAJaWYgKElTX0lQVjRfVU5VU0FCTEVfQUREUkVTUyhhZGRyLT52NC5zaW5fYWRkci5zX2FkZHIpKSB7CiAJCXJldHZhbCA9ICBTQ1RQX1NDT1BFX1VOVVNBQkxFOwpAQCAtMTI1OSw2ICsxMjU3LDkgQEAKIAkvKiBEaXNhYmxlIEFVVEggYnkgZGVmYXVsdC4gKi8KIAlzY3RwX2F1dGhfZW5hYmxlID0gMDsKIAorCS8qIFNldCBTQ09QRSBwb2xpY3kgdG8gZW5hYmxlZCAqLworCXNjdHBfc2NvcGVfcG9saWN5ID0gU0NUUF9TQ09QRV9QT0xJQ1lfRU5BQkxFOworCiAJc2N0cF9zeXNjdGxfcmVnaXN0ZXIoKTsKIAogCUlOSVRfTElTVF9IRUFEKCZzY3RwX2FkZHJlc3NfZmFtaWxpZXMpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IDYxY2M2MDcuLjlkODgxYTYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYworKysgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTI4NjEsNiArMjg2MSwxMSBAQAogCWFkZHJfcGFyYW0gPSAodW5pb24gc2N0cF9hZGRyX3BhcmFtICopCiAJCQkoKHZvaWQgKilhc2NvbmZfcGFyYW0gKyBzaXplb2Yoc2N0cF9hZGRpcF9wYXJhbV90KSk7CiAKKwlpZiAoYXNjb25mX3BhcmFtLT5wYXJhbV9oZHIudHlwZSAhPSBTQ1RQX1BBUkFNX0FERF9JUCAmJgorCSAgICBhc2NvbmZfcGFyYW0tPnBhcmFtX2hkci50eXBlICE9IFNDVFBfUEFSQU1fREVMX0lQICYmCisJICAgIGFzY29uZl9wYXJhbS0+cGFyYW1faGRyLnR5cGUgIT0gU0NUUF9QQVJBTV9TRVRfUFJJTUFSWSkKKwkJcmV0dXJuIFNDVFBfRVJST1JfVU5LTk9XTl9QQVJBTTsKKwogCXN3aXRjaCAoYWRkcl9wYXJhbS0+djQucGFyYW1faGRyLnR5cGUpIHsKIAljYXNlIFNDVFBfUEFSQU1fSVBWNl9BRERSRVNTOgogCQlpZiAoIWFzb2MtPnBlZXIuaXB2Nl9hZGRyZXNzKQpAQCAtMjk1OCw5ICsyOTYzLDYgQEAKIAogCQlzY3RwX2Fzc29jX3NldF9wcmltYXJ5KGFzb2MsIHBlZXIpOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gU0NUUF9FUlJPUl9VTktOT1dOX1BBUkFNOwotCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gU0NUUF9FUlJPUl9OT19FUlJPUjsKQEAgLTMxMDQsNyArMzEwNiw3IEBACiB9CiAKIC8qIFByb2Nlc3MgYSBhc2NvbmYgcGFyYW1ldGVyIHRoYXQgaXMgc3VjY2Vzc2Z1bGx5IGFja2VkLiAqLwotc3RhdGljIGludCBzY3RwX2FzY29uZl9wYXJhbV9zdWNjZXNzKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorc3RhdGljIHZvaWQgc2N0cF9hc2NvbmZfcGFyYW1fc3VjY2VzcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCQkgICAgIHNjdHBfYWRkaXBfcGFyYW1fdCAqYXNjb25mX3BhcmFtKQogewogCXN0cnVjdCBzY3RwX2FmICphZjsKQEAgLTMxMTMsNyArMzExNSw2IEBACiAJdW5pb24gc2N0cF9hZGRyX3BhcmFtICphZGRyX3BhcmFtOwogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0OwogCXN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5ICpzYWRkcjsKLQlpbnQgcmV0dmFsID0gMDsKIAogCWFkZHJfcGFyYW0gPSAodW5pb24gc2N0cF9hZGRyX3BhcmFtICopCiAJCQkoKHZvaWQgKilhc2NvbmZfcGFyYW0gKyBzaXplb2Yoc2N0cF9hZGRpcF9wYXJhbV90KSk7CkBAIC0zMTMzLDEwICszMTM0LDE4IEBACiAJCQkJc2FkZHItPnN0YXRlID0gU0NUUF9BRERSX1NSQzsKIAkJfQogCQlsb2NhbF9iaF9lbmFibGUoKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFuc3BvcnQsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsCisJCQkJdHJhbnNwb3J0cykgeworCQkJaWYgKHRyYW5zcG9ydC0+c3RhdGUgPT0gU0NUUF9BQ1RJVkUpCisJCQkJY29udGludWU7CisJCQlkc3RfcmVsZWFzZSh0cmFuc3BvcnQtPmRzdCk7CisJCQlzY3RwX3RyYW5zcG9ydF9yb3V0ZSh0cmFuc3BvcnQsIE5VTEwsCisJCQkJCSAgICAgc2N0cF9zayhhc29jLT5iYXNlLnNrKSk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQ1RQX1BBUkFNX0RFTF9JUDoKIAkJbG9jYWxfYmhfZGlzYWJsZSgpOwotCQlyZXR2YWwgPSBzY3RwX2RlbF9iaW5kX2FkZHIoYnAsICZhZGRyKTsKKwkJc2N0cF9kZWxfYmluZF9hZGRyKGJwLCAmYWRkcik7CiAJCWxvY2FsX2JoX2VuYWJsZSgpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyYW5zcG9ydCwgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwKIAkJCQl0cmFuc3BvcnRzKSB7CkBAIC0zMTQ4LDggKzMxNTcsNiBAQAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLQotCXJldHVybiByZXR2YWw7CiB9CiAKIC8qIEdldCB0aGUgY29ycmVzcG9uZGluZyBBU0NPTkYgcmVzcG9uc2UgZXJyb3IgY29kZSBmcm9tIHRoZSBBU0NPTkZfQUNLIGNodW5rCkBAIC0zMjY2LDcgKzMyNzMsNyBAQAogCiAJCXN3aXRjaCAoZXJyX2NvZGUpIHsKIAkJY2FzZSBTQ1RQX0VSUk9SX05PX0VSUk9SOgotCQkJcmV0dmFsID0gc2N0cF9hc2NvbmZfcGFyYW1fc3VjY2Vzcyhhc29jLCBhc2NvbmZfcGFyYW0pOworCQkJc2N0cF9hc2NvbmZfcGFyYW1fc3VjY2Vzcyhhc29jLCBhc2NvbmZfcGFyYW0pOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTQ1RQX0VSUk9SX1JTUkNfTE9XOgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCmluZGV4IDg2NDI2YWEuLjg2NzRkNDkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYworKysgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKQEAgLTQ0MCwxNCArNDQwLDI2IEBACiAJLyogVGhlIGNoZWNrIGZvciBhc3NvY2lhdGlvbidzIG92ZXJhbGwgZXJyb3IgY291bnRlciBleGNlZWRpbmcgdGhlCiAJICogdGhyZXNob2xkIGlzIGRvbmUgaW4gdGhlIHN0YXRlIGZ1bmN0aW9uLgogCSAqLwotCS8qIFdoZW4gcHJvYmluZyBVTkNPTkZJUk1FRCBhZGRyZXNzZXMsIHRoZSBhc3NvY2lhdGlvbiBvdmVyYWxsCi0JICogZXJyb3IgY291bnQgaXMgTk9UIGluY3JlbWVudGVkCisJLyogV2UgYXJlIGhlcmUgZHVlIHRvIGEgdGltZXIgZXhwaXJhdGlvbi4gIElmIHRoZSB0aW1lciB3YXMKKwkgKiBub3QgYSBIRUFSVEJFQVQsIHRoZW4gbm9ybWFsIGVycm9yIHRyYWNraW5nIGlzIGRvbmUuCisJICogSWYgdGhlIHRpbWVyIHdhcyBhIGhlYXJ0YmVhdCwgd2Ugb25seSBpbmNyZW1lbnQgZXJyb3IgY291bnRzCisJICogd2hlbiB3ZSBhbHJlYWR5IGhhdmUgYW4gb3V0c3RhbmRpbmcgSEVBUlRCRUFUIHRoYXQgaGFzIG5vdAorCSAqIGJlZW4gYWNrbm93bGVkZ2VkLgorCSAqIEFkZGl0aW9uYWx5LCBzb21lIHRyYW5wb3J0IHN0YXRlcyBpbmhpYml0IGVycm9yIGluY3JlbWVudHMuCiAJICovCi0JaWYgKHRyYW5zcG9ydC0+c3RhdGUgIT0gU0NUUF9VTkNPTkZJUk1FRCkKKwlpZiAoIWlzX2hiKSB7CiAJCWFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQrKzsKKwkJaWYgKHRyYW5zcG9ydC0+c3RhdGUgIT0gU0NUUF9JTkFDVElWRSkKKwkJCXRyYW5zcG9ydC0+ZXJyb3JfY291bnQrKzsKKwkgfSBlbHNlIGlmICh0cmFuc3BvcnQtPmhiX3NlbnQpIHsKKwkJaWYgKHRyYW5zcG9ydC0+c3RhdGUgIT0gU0NUUF9VTkNPTkZJUk1FRCkKKwkJCWFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQrKzsKKwkJaWYgKHRyYW5zcG9ydC0+c3RhdGUgIT0gU0NUUF9JTkFDVElWRSkKKwkJCXRyYW5zcG9ydC0+ZXJyb3JfY291bnQrKzsKKwl9CiAKIAlpZiAodHJhbnNwb3J0LT5zdGF0ZSAhPSBTQ1RQX0lOQUNUSVZFICYmCi0JICAgICh0cmFuc3BvcnQtPmVycm9yX2NvdW50KysgPj0gdHJhbnNwb3J0LT5wYXRobWF4cnh0KSkgeworCSAgICAodHJhbnNwb3J0LT5lcnJvcl9jb3VudCA+IHRyYW5zcG9ydC0+cGF0aG1heHJ4dCkpIHsKIAkJU0NUUF9ERUJVR19QUklOVEtfSVBBRERSKCJ0cmFuc3BvcnRfc3RyaWtlOmFzc29jaWF0aW9uICVwIiwKIAkJCQkJICIgdHJhbnNwb3J0IElQOiBwb3J0OiVkIGZhaWxlZC5cbiIsCiAJCQkJCSBhc29jLApAQCAtOTMxLDYgKzk0MywyNyBAQAogCiB9CiAKKy8qIFNlbmQgdGhlIHdob2xlIG1lc3NhZ2UsIGNodW5rIGJ5IGNodW5rLCB0byB0aGUgb3V0cXVldWUuCisgKiBUaGlzIHdheSB0aGUgd2hvbGUgbWVzc2FnZSBpcyBxdWV1ZWQgdXAgYW5kIGJ1bmRsaW5nIGlmCisgKiBlbmNvdXJhZ2VkIGZvciBzbWFsbCBmcmFnbWVudHMuCisgKi8KK3N0YXRpYyBpbnQgc2N0cF9jbWRfc2VuZF9tc2coc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCQkJc3RydWN0IHNjdHBfZGF0YW1zZyAqbXNnKQoreworCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuazsKKwlpbnQgZXJyb3IgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgJm1zZy0+Y2h1bmtzLCBmcmFnX2xpc3QpIHsKKwkJZXJyb3IgPSBzY3RwX291dHFfdGFpbCgmYXNvYy0+b3V0cXVldWUsIGNodW5rKTsKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCisKKwogLyogVGhlc2UgdGhyZWUgbWFjcm9zIGFsbG93IHVzIHRvIHB1bGwgdGhlIGRlYnVnZ2luZyBjb2RlIG91dCBvZiB0aGUKICAqIG1haW4gZmxvdyBvZiBzY3RwX2RvX3NtKCkgdG8ga2VlcCBhdHRlbnRpb24gZm9jdXNlZCBvbiB0aGUgcmVhbAogICogZnVuY3Rpb25hbGl0eSB0aGVyZS4KQEAgLTE1MDAsNyArMTUzMyw4IEBACiAJCWNhc2UgU0NUUF9DTURfUFJPQ0VTU19DVFNOOgogCQkJLyogRHVtbXkgdXAgYSBTQUNLIGZvciBwcm9jZXNzaW5nLiAqLwogCQkJc2Fja2guY3VtX3Rzbl9hY2sgPSBjbWQtPm9iai5iZTMyOwotCQkJc2Fja2guYV9yd25kID0gMDsKKwkJCXNhY2toLmFfcnduZCA9IGFzb2MtPnBlZXIucnduZCArCisJCQkJCWFzb2MtPm91dHF1ZXVlLm91dHN0YW5kaW5nX2J5dGVzOwogCQkJc2Fja2gubnVtX2dhcF9hY2tfYmxvY2tzID0gMDsKIAkJCXNhY2toLm51bV9kdXBfdHNucyA9IDA7CiAJCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1BST0NFU1NfU0FDSywKQEAgLTE1NzUsNyArMTYwOSwxMyBAQAogCQljYXNlIFNDVFBfQ01EX1VQREFURV9JTklUVEFHOgogCQkJYXNvYy0+cGVlci5pLmluaXRfdGFnID0gY21kLT5vYmoudTMyOwogCQkJYnJlYWs7Ci0KKwkJY2FzZSBTQ1RQX0NNRF9TRU5EX01TRzoKKwkJCWlmICghYXNvYy0+b3V0cXVldWUuY29yaykgeworCQkJCXNjdHBfb3V0cV9jb3JrKCZhc29jLT5vdXRxdWV1ZSk7CisJCQkJbG9jYWxfY29yayA9IDE7CisJCQl9CisJCQllcnJvciA9IHNjdHBfY21kX3NlbmRfbXNnKGFzb2MsIGNtZC0+b2JqLm1zZyk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkltcG9zc2libGUgY29tbWFuZDogJXUsICVwXG4iLAogCQkJICAgICAgIGNtZC0+dmVyYiwgY21kLT5vYmoucHRyKTsKQEAgLTE1OTMsOSArMTYzMyw5IEBACiAJICovCiAJaWYgKGFzb2MgJiYgU0NUUF9FVkVOVF9UX0NIVU5LID09IGV2ZW50X3R5cGUgJiYgY2h1bmspIHsKIAkJaWYgKGNodW5rLT5lbmRfb2ZfcGFja2V0IHx8IGNodW5rLT5zaW5nbGV0b24pCi0JCQlzY3RwX291dHFfdW5jb3JrKCZhc29jLT5vdXRxdWV1ZSk7CisJCQllcnJvciA9IHNjdHBfb3V0cV91bmNvcmsoJmFzb2MtPm91dHF1ZXVlKTsKIAl9IGVsc2UgaWYgKGxvY2FsX2NvcmspCi0JCQlzY3RwX291dHFfdW5jb3JrKCZhc29jLT5vdXRxdWV1ZSk7CisJCWVycm9yID0gc2N0cF9vdXRxX3VuY29yaygmYXNvYy0+b3V0cXVldWUpOwogCXJldHVybiBlcnJvcjsKIG5vbWVtOgogCWVycm9yID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKaW5kZXggNzI4ODE5Mi4uYzhmYWUxOSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKQEAgLTMzNCw2ICszMzQsMTUgQEAKIAlpZiAoIXNjdHBfY2h1bmtfbGVuZ3RoX3ZhbGlkKGNodW5rLCBzaXplb2Yoc2N0cF9pbml0X2NodW5rX3QpKSkKIAkJcmV0dXJuIHNjdHBfc2ZfcGRpc2NhcmQoZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOwogCisJLyogSWYgdGhlIElOSVQgaXMgY29taW5nIHRvd2FyZCBhIGNsb3Npbmcgc29ja2V0LCB3ZSdsbCBzZW5kIGJhY2sKKwkgKiBhbmQgQUJPUlQuICBFc3NlbnRpYWxseSwgdGhpcyBjYXRjaGVzIHRoZSByYWNlIG9mIElOSVQgYmVpbmcKKwkgKiBiYWNrbG9nZWQgdG8gdGhlIHNvY2tldCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSB1c2VyIGlzc2VzIGNsb3NlKCkuCisJICogU2luY2UgdGhlIHNvY2tldCBhbmQgYWxsIGl0cyBhc3NvY2lhdGlvbnMgYXJlIGdvaW5nIGF3YXksIHdlCisJICogY2FuIHRyZWF0IHRoaXMgT09UQgorCSAqLworCWlmIChzY3RwX3NzdGF0ZShlcC0+YmFzZS5zaywgQ0xPU0lORykpCisJCXJldHVybiBzY3RwX3NmX3RhYm9ydF84XzRfOChlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CisKIAkvKiBWZXJpZnkgdGhlIElOSVQgY2h1bmsgYmVmb3JlIHByb2Nlc3NpbmcgaXQuICovCiAJZXJyX2NodW5rID0gTlVMTDsKIAlpZiAoIXNjdHBfdmVyaWZ5X2luaXQoYXNvYywgY2h1bmstPmNodW5rX2hkci0+dHlwZSwKQEAgLTk2Miw3ICs5NzEsNyBAQAogewogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gKHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKSBhcmc7CiAKLQlpZiAoYXNvYy0+b3ZlcmFsbF9lcnJvcl9jb3VudCA+IGFzb2MtPm1heF9yZXRyYW5zKSB7CisJaWYgKGFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQgPj0gYXNvYy0+bWF4X3JldHJhbnMpIHsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLAogCQkJCVNDVFBfRVJST1IoRVRJTUVET1VUKSk7CiAJCS8qIENNRF9BU1NPQ19GQUlMRUQgY2FsbHMgQ01EX0RFTEVURV9UQ0IuICovCkBAIC0xMTA2LDcgKzExMTUsOCBAQAogCQlyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CiAKIAkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgSEVBUlRCRUFULUFDSyBjaHVuayBoYXMgYSB2YWxpZCBsZW5ndGguICAqLwotCWlmICghc2N0cF9jaHVua19sZW5ndGhfdmFsaWQoY2h1bmssIHNpemVvZihzY3RwX2hlYXJ0YmVhdF9jaHVua190KSkpCisJaWYgKCFzY3RwX2NodW5rX2xlbmd0aF92YWxpZChjaHVuaywgc2l6ZW9mKHNjdHBfY2h1bmtoZHJfdCkgKworCQkJCQkgICAgc2l6ZW9mKHNjdHBfc2VuZGVyX2hiX2luZm9fdCkpKQogCQlyZXR1cm4gc2N0cF9zZl92aW9sYXRpb25fY2h1bmtsZW4oZXAsIGFzb2MsIHR5cGUsIGFyZywKIAkJCQkJCSAgY29tbWFuZHMpOwogCkBAIC0yNTYxLDYgKzI1NzEsMTIgQEAKIAljaHVuay0+c3ViaC5zaHV0ZG93bl9oZHIgPSBzZGg7CiAJY3RzbiA9IG50b2hsKHNkaC0+Y3VtX3Rzbl9hY2spOwogCisJaWYgKFRTTl9sdChjdHNuLCBhc29jLT5jdHNuX2Fja19wb2ludCkpIHsKKwkJU0NUUF9ERUJVR19QUklOVEsoImN0c24gJXhcbiIsIGN0c24pOworCQlTQ1RQX0RFQlVHX1BSSU5USygiY3Rzbl9hY2tfcG9pbnQgJXhcbiIsIGFzb2MtPmN0c25fYWNrX3BvaW50KTsKKwkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDsKKwl9CisKIAkvKiBJZiBDdW11bGF0aXZlIFRTTiBBY2sgYmV5b25kIHRoZSBtYXggdHNuIGN1cnJlbnRseQogCSAqIHNlbmQsIHRlcm1pbmF0aW5nIHRoZSBhc3NvY2lhdGlvbiBhbmQgcmVzcG9uZCB0byB0aGUKIAkgKiBzZW5kZXIgd2l0aCBhbiBBQk9SVC4KQEAgLTI2MjQsNiArMjY0MCw3IEBACiB7CiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rID0gYXJnOwogCXNjdHBfc2h1dGRvd25oZHJfdCAqc2RoOworCV9fdTMyIGN0c247CiAKIAlpZiAoIXNjdHBfdnRhZ192ZXJpZnkoY2h1bmssIGFzb2MpKQogCQlyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CkBAIC0yNjM1LDEyICsyNjUyLDE5IEBACiAJCQkJCQkgIGNvbW1hbmRzKTsKIAogCXNkaCA9IChzY3RwX3NodXRkb3duaGRyX3QgKiljaHVuay0+c2tiLT5kYXRhOworCWN0c24gPSBudG9obChzZGgtPmN1bV90c25fYWNrKTsKKworCWlmIChUU05fbHQoY3RzbiwgYXNvYy0+Y3Rzbl9hY2tfcG9pbnQpKSB7CisJCVNDVFBfREVCVUdfUFJJTlRLKCJjdHNuICV4XG4iLCBjdHNuKTsKKwkJU0NUUF9ERUJVR19QUklOVEsoImN0c25fYWNrX3BvaW50ICV4XG4iLCBhc29jLT5jdHNuX2Fja19wb2ludCk7CisJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7CisJfQogCiAJLyogSWYgQ3VtdWxhdGl2ZSBUU04gQWNrIGJleW9uZCB0aGUgbWF4IHRzbiBjdXJyZW50bHkKIAkgKiBzZW5kLCB0ZXJtaW5hdGluZyB0aGUgYXNzb2NpYXRpb24gYW5kIHJlc3BvbmQgdG8gdGhlCiAJICogc2VuZGVyIHdpdGggYW4gQUJPUlQuCiAJICovCi0JaWYgKCFUU05fbHQobnRvaGwoc2RoLT5jdW1fdHNuX2FjayksIGFzb2MtPm5leHRfdHNuKSkKKwlpZiAoIVRTTl9sdChjdHNuLCBhc29jLT5uZXh0X3RzbikpCiAJCXJldHVybiBzY3RwX3NmX3Zpb2xhdGlvbl9jdHNuKGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTsKIAogCS8qIHZlcmlmeSwgYnkgY2hlY2tpbmcgdGhlIEN1bXVsYXRpdmUgVFNOIEFjayBmaWVsZCBvZiB0aGUKQEAgLTI4NjcsNiArMjg5MSw5IEBACiAJCWdvdG8gZGlzY2FyZF9mb3JjZTsKIAljYXNlIFNDVFBfSUVSUk9SX05PX0RBVEE6CiAJCWdvdG8gY29uc3VtZTsKKwljYXNlIFNDVFBfSUVSUk9SX1BST1RPX1ZJT0xBVElPTjoKKwkJcmV0dXJuIHNjdHBfc2ZfYWJvcnRfdmlvbGF0aW9uKGVwLCBhc29jLCBjaHVuaywgY29tbWFuZHMsCisJCQkodTggKiljaHVuay0+c3ViaC5kYXRhX2hkciwgc2l6ZW9mKHNjdHBfZGF0YWhkcl90KSk7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQpAQCAtMjk3Nyw2ICszMDA0LDkgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQ1RQX0lFUlJPUl9OT19EQVRBOgogCQlnb3RvIGNvbnN1bWU7CisJY2FzZSBTQ1RQX0lFUlJPUl9QUk9UT19WSU9MQVRJT046CisJCXJldHVybiBzY3RwX3NmX2Fib3J0X3Zpb2xhdGlvbihlcCwgYXNvYywgY2h1bmssIGNvbW1hbmRzLAorCQkJKHU4ICopY2h1bmstPnN1YmguZGF0YV9oZHIsIHNpemVvZihzY3RwX2RhdGFoZHJfdCkpOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KQEAgLTM1MTksNiArMzU0OSwxMiBAQAogCQlhc2NvbmZfYWNrID0gc2N0cF9hc3NvY19sb29rdXBfYXNjb25mX2Fjayhhc29jLCBoZHItPnNlcmlhbCk7CiAJCWlmICghYXNjb25mX2FjaykKIAkJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7CisKKwkJLyogUmVzZXQgdGhlIHRyYW5zcG9ydCBzbyB0aGF0IHdlIHNlbGVjdCB0aGUgY29ycmVjdCBvbmUKKwkJICogdGhpcyB0aW1lIGFyb3VuZC4gIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QKKwkJICogYWNjaWRlbnRhbGx5IHVzZSBhIHN0YWxlIHRyYW5zcG9ydCB0aGF0J3MgYmVlbiByZW1vdmVkLgorCQkgKi8KKwkJYXNjb25mX2Fjay0+dHJhbnNwb3J0ID0gTlVMTDsKIAl9IGVsc2UgewogCQkvKiBBRERJUCA1LjIgRTUpIE90aGVyd2lzZSwgdGhlIEFTQ09ORiBDaHVuayBpcyBkaXNjYXJkZWQgc2luY2UKIAkJICogaXQgbXVzdCBiZSBlaXRoZXIgYSBzdGFsZSBwYWNrZXQgb3IgZnJvbSBhbiBhdHRhY2tlci4KQEAgLTQ1NDYsOSArNDU4Miw5IEBACiAJCQkJICAgICAgIHZvaWQgKmFyZywKIAkJCQkgICAgICAgc2N0cF9jbWRfc2VxX3QgKmNvbW1hbmRzKQogewotCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuayA9IGFyZzsKKwlzdHJ1Y3Qgc2N0cF9kYXRhbXNnICptc2cgPSBhcmc7CiAKLQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1JFUExZLCBTQ1RQX0NIVU5LKGNodW5rKSk7CisJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRU5EX01TRywgU0NUUF9EQVRBTVNHKG1zZykpOwogCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7CiB9CiAKQEAgLTU4NDcsNiArNTg4Myw5IEBACiAJX191MzIgdHNuOwogCXN0cnVjdCBzY3RwX3Rzbm1hcCAqbWFwID0gKHN0cnVjdCBzY3RwX3Rzbm1hcCAqKSZhc29jLT5wZWVyLnRzbl9tYXA7CiAJc3RydWN0IHNvY2sgKnNrID0gYXNvYy0+YmFzZS5zazsKKwl1MTYgc3NuOworCXUxNiBzaWQ7CisJdTggb3JkZXJlZCA9IDA7CiAKIAlkYXRhX2hkciA9IGNodW5rLT5zdWJoLmRhdGFfaGRyID0gKHNjdHBfZGF0YWhkcl90ICopY2h1bmstPnNrYi0+ZGF0YTsKIAlza2JfcHVsbChjaHVuay0+c2tiLCBzaXplb2Yoc2N0cF9kYXRhaGRyX3QpKTsKQEAgLTU5ODYsOCArNjAyNSwxMCBAQAogCSAqLwogCWlmIChjaHVuay0+Y2h1bmtfaGRyLT5mbGFncyAmIFNDVFBfREFUQV9VTk9SREVSRUQpCiAJCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX0lOVU5PUkRFUkNIVU5LUyk7Ci0JZWxzZQorCWVsc2UgewogCQlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9JTk9SREVSQ0hVTktTKTsKKwkJb3JkZXJlZCA9IDE7CisJfQogCiAJLyogUkZDIDI5NjAgNi41IFN0cmVhbSBJZGVudGlmaWVyIGFuZCBTdHJlYW0gU2VxdWVuY2UgTnVtYmVyCiAJICoKQEAgLTU5OTcsNyArNjAzOCw4IEBACiAJICogd2l0aCBjYXVzZSBzZXQgdG8gIkludmFsaWQgU3RyZWFtIElkZW50aWZpZXIiIChTZWUgU2VjdGlvbiAzLjMuMTApCiAJICogYW5kIGRpc2NhcmQgdGhlIERBVEEgY2h1bmsuCiAJICovCi0JaWYgKG50b2hzKGRhdGFfaGRyLT5zdHJlYW0pID49IGFzb2MtPmMuc2luaXRfbWF4X2luc3RyZWFtcykgeworCXNpZCA9IG50b2hzKGRhdGFfaGRyLT5zdHJlYW0pOworCWlmIChzaWQgPj0gYXNvYy0+Yy5zaW5pdF9tYXhfaW5zdHJlYW1zKSB7CiAJCS8qIE1hcmsgdHNuIGFzIHJlY2VpdmVkIGV2ZW4gdGhvdWdoIHdlIGRyb3AgaXQgKi8KIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9SRVBPUlRfVFNOLCBTQ1RQX1UzMih0c24pKTsKIApAQCAtNjAxMCw2ICs2MDUyLDE4IEBACiAJCXJldHVybiBTQ1RQX0lFUlJPUl9CQURfU1RSRUFNOwogCX0KIAorCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgU1NOIGlzIHBvc3NpYmxlIGZvciB0aGlzIFRTTi4KKwkgKiBUaGUgYmlnZ2VzdCBnYXAgd2UgY2FuIHJlY29yZCBpcyA0SyB3aWRlLiAgU2luY2UgU1NOcyB3cmFwCisJICogYXQgYW4gdW5zaWduZWQgc2hvcnQsIHRoZXJlIGlzIG5vIHdheSB0aGF0IGFuIFNTTiBjYW4KKwkgKiB3cmFwIGFuZCBmb3IgYSB2YWxpZCBUU04uICBXZSBjYW4gc2ltcGx5IGNoZWNrIGlmIHRoZSBjdXJyZW50CisJICogU1NOIGlzIHNtYWxsZXIgdGhlbiB0aGUgbmV4dCBleHBlY3RlZCBvbmUuICBJZiBpdCBpcywgaXQgd3JhcHBlZAorCSAqIGFuZCBpcyBpbnZhbGlkLgorCSAqLworCXNzbiA9IG50b2hzKGRhdGFfaGRyLT5zc24pOworCWlmIChvcmRlcmVkICYmIFNTTl9sdChzc24sIHNjdHBfc3NuX3BlZWsoJmFzb2MtPnNzbm1hcC0+aW4sIHNpZCkpKSB7CisJCXJldHVybiBTQ1RQX0lFUlJPUl9QUk9UT19WSU9MQVRJT047CisJfQorCiAJLyogU2VuZCB0aGUgZGF0YSB1cCB0byB0aGUgdXNlci4gIE5vdGU6ICBTY2hlZHVsZSAgdGhlCiAJICogU0NUUF9DTURfQ0hVTktfVUxQIGNtZCBiZWZvcmUgdGhlIFNDVFBfQ01EX0dFTl9TQUNLLCBhcyB0aGUgU0FDSwogCSAqIGNodW5rIG5lZWRzIHRoZSB1cGRhdGVkIHJ3bmQuCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jCmluZGV4IDk3MTg5MGQuLjg5YWYzN2EgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCisrKyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC0xMzYxLDYgKzEzNjEsNyBAQAogCiAJc2N0cF9sb2NrX3NvY2soc2spOwogCXNrLT5za19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7CisJc2stPnNrX3N0YXRlID0gU0NUUF9TU19DTE9TSU5HOwogCiAJZXAgPSBzY3RwX3NrKHNrKS0+ZXA7CiAKQEAgLTE4MTMsMjAgKzE4MTQsMjIgQEAKIAkJc2N0cF9zZXRfb3duZXJfdyhjaHVuayk7CiAKIAkJY2h1bmstPnRyYW5zcG9ydCA9IGNodW5rX3RwOwotCi0JCS8qIFNlbmQgaXQgdG8gdGhlIGxvd2VyIGxheWVycy4gIE5vdGU6ICBhbGwgY2h1bmtzCi0JCSAqIG11c3QgZWl0aGVyIGZhaWwgb3Igc3VjY2VlZC4gICBUaGUgbG93ZXIgbGF5ZXIKLQkJICogd29ya3MgdGhhdCB3YXkgdG9kYXkuICBLZWVwIGl0IHRoYXQgd2F5IG9yIHRoaXMKLQkJICogYnJlYWtzLgotCQkgKi8KLQkJZXJyID0gc2N0cF9wcmltaXRpdmVfU0VORChhc29jLCBjaHVuayk7Ci0JCS8qIERpZCB0aGUgbG93ZXIgbGF5ZXIgYWNjZXB0IHRoZSBjaHVuaz8gKi8KLQkJaWYgKGVycikKLQkJCXNjdHBfY2h1bmtfZnJlZShjaHVuayk7Ci0JCVNDVFBfREVCVUdfUFJJTlRLKCJXZSBzZW50IHByaW1pdGl2ZWx5LlxuIik7CiAJfQogCi0Jc2N0cF9kYXRhbXNnX3B1dChkYXRhbXNnKTsKKwkvKiBTZW5kIGl0IHRvIHRoZSBsb3dlciBsYXllcnMuICBOb3RlOiAgYWxsIGNodW5rcworCSAqIG11c3QgZWl0aGVyIGZhaWwgb3Igc3VjY2VlZC4gICBUaGUgbG93ZXIgbGF5ZXIKKwkgKiB3b3JrcyB0aGF0IHdheSB0b2RheS4gIEtlZXAgaXQgdGhhdCB3YXkgb3IgdGhpcworCSAqIGJyZWFrcy4KKwkgKi8KKwllcnIgPSBzY3RwX3ByaW1pdGl2ZV9TRU5EKGFzb2MsIGRhdGFtc2cpOworCS8qIERpZCB0aGUgbG93ZXIgbGF5ZXIgYWNjZXB0IHRoZSBjaHVuaz8gKi8KKwlpZiAoZXJyKQorCQlzY3RwX2RhdGFtc2dfZnJlZShkYXRhbXNnKTsKKwllbHNlCisJCXNjdHBfZGF0YW1zZ19wdXQoZGF0YW1zZyk7CisKKwlTQ1RQX0RFQlVHX1BSSU5USygiV2Ugc2VudCBwcmltaXRpdmVseS5cbiIpOworCiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZTsKIAllbHNlCkBAIC0yMjQwLDcgKzIyNDMsNyBAQAogCQkJc2N0cF9hc3NvY19zeW5jX3BtdHUoYXNvYyk7CiAJCX0gZWxzZSBpZiAoYXNvYykgewogCQkJYXNvYy0+cGF0aG10dSA9IHBhcmFtcy0+c3BwX3BhdGhtdHU7Ci0JCQlzY3RwX2ZyYWdfcG9pbnQoc3AsIHBhcmFtcy0+c3BwX3BhdGhtdHUpOworCQkJc2N0cF9mcmFnX3BvaW50KGFzb2MsIHBhcmFtcy0+c3BwX3BhdGhtdHUpOwogCQl9IGVsc2UgewogCQkJc3AtPnBhdGhtdHUgPSBwYXJhbXMtPnNwcF9wYXRobXR1OwogCQl9CkBAIC0yODc3LDE1ICsyODgwLDEwIEBACiAJCQl2YWwgLT0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArCiAJCQkJCXNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKTsKIAkJfQotCi0JCWFzb2MtPmZyYWdfcG9pbnQgPSB2YWw7CisJCWFzb2MtPnVzZXJfZnJhZyA9IHZhbDsKKwkJYXNvYy0+ZnJhZ19wb2ludCA9IHNjdHBfZnJhZ19wb2ludChhc29jLCBhc29jLT5wYXRobXR1KTsKIAl9IGVsc2UgewogCQlzcC0+dXNlcl9mcmFnID0gdmFsOwotCi0JCS8qIFVwZGF0ZSB0aGUgZnJhZ19wb2ludCBvZiB0aGUgZXhpc3RpbmcgYXNzb2NpYXRpb25zLiAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICYoc3AtPmVwLT5hc29jcyksIGFzb2NzKSB7Ci0JCQlhc29jLT5mcmFnX3BvaW50ID0gc2N0cF9mcmFnX3BvaW50KHNwLCBhc29jLT5wYXRobXR1KTsKLQkJfQogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc3lzY3RsLmMgYi9uZXQvc2N0cC9zeXNjdGwuYwppbmRleCA2M2VhYmJjLi5hYjcxNTFkIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zeXNjdGwuYworKysgYi9uZXQvc2N0cC9zeXNjdGwuYwpAQCAtNTEsNiArNTEsNyBAQAogc3RhdGljIGludCBpbnRfbWF4ID0gSU5UX01BWDsKIHN0YXRpYyBpbnQgc2Fja190aW1lcl9taW4gPSAxOwogc3RhdGljIGludCBzYWNrX3RpbWVyX21heCA9IDUwMDsKK3N0YXRpYyBpbnQgYWRkcl9zY29wZV9tYXggPSAzOyAvKiBjaGVjayBzY3RwX3Njb3BlX3BvbGljeV90IGluIGluY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmggZm9yIG1heCBlbnRyaWVzICovCiAKIGV4dGVybiBpbnQgc3lzY3RsX3NjdHBfbWVtWzNdOwogZXh0ZXJuIGludCBzeXNjdGxfc2N0cF9ybWVtWzNdOwpAQCAtMjcyLDYgKzI3MywxNyBAQAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKIAkJLnN0cmF0ZWd5CT0gc3lzY3RsX2ludHZlYwogCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gImFkZHJfc2NvcGVfcG9saWN5IiwKKwkJLmRhdGEJCT0gJnNjdHBfc2NvcGVfcG9saWN5LAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmYWRkcl9zY29wZV9tYXgsCisJfSwKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvdHJhbnNwb3J0LmMgYi9uZXQvc2N0cC90cmFuc3BvcnQuYwppbmRleCBlNWRkZTQ1Li5jMjU2ZTQ4IDEwMDY0NAotLS0gYS9uZXQvc2N0cC90cmFuc3BvcnQuYworKysgYi9uZXQvc2N0cC90cmFuc3BvcnQuYwpAQCAtNTAzLDYgKzUwMyw5IEBACiAJCXRyYW5zcG9ydC0+c3N0aHJlc2ggPSBtYXgodHJhbnNwb3J0LT5jd25kLzIsCiAJCQkJCSAgNCp0cmFuc3BvcnQtPmFzb2MtPnBhdGhtdHUpOwogCQl0cmFuc3BvcnQtPmN3bmQgPSB0cmFuc3BvcnQtPmFzb2MtPnBhdGhtdHU7CisKKwkJLyogVDMtcnR4IGFsc28gY2xlYXJzIGZhc3QgcmVjb3Zlcnkgb24gdGhlIHRyYW5zcG9ydCAqLworCQl0cmFuc3BvcnQtPmZhc3RfcmVjb3ZlcnkgPSAwOwogCQlicmVhazsKIAogCWNhc2UgU0NUUF9MT1dFUl9DV05EX0ZBU1RfUlRYOgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9NYWtlZmlsZSBiL25ldC9zdW5ycGMvTWFrZWZpbGUKaW5kZXggZGI3M2ZkMi4uOWQyZmNhNSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9NYWtlZmlsZQorKysgYi9uZXQvc3VucnBjL01ha2VmaWxlCkBAIC0xMCw3ICsxMCw3IEBACiBzdW5ycGMteSA6PSBjbG50Lm8geHBydC5vIHNvY2tsaWIubyB4cHJ0c29jay5vIHNjaGVkLm8gXAogCSAgICBhdXRoLm8gYXV0aF9udWxsLm8gYXV0aF91bml4Lm8gYXV0aF9nZW5lcmljLm8gXAogCSAgICBzdmMubyBzdmNzb2NrLm8gc3ZjYXV0aC5vIHN2Y2F1dGhfdW5peC5vIFwKLQkgICAgcnBjYl9jbG50Lm8gdGltZXIubyB4ZHIubyBcCisJICAgIGFkZHIubyBycGNiX2NsbnQubyB0aW1lci5vIHhkci5vIFwKIAkgICAgc3VucnBjX3N5bXMubyBjYWNoZS5vIHJwY19waXBlLm8gXAogCSAgICBzdmNfeHBydC5vCiBzdW5ycGMtJChDT05GSUdfTkZTX1Y0XzEpICs9IGJhY2tjaGFubmVsX3Jxc3QubyBiY19zdmMubwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hZGRyLmMgYi9uZXQvc3VucnBjL2FkZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmU4ZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3N1bnJwYy9hZGRyLmMKQEAgLTAsMCArMSwzNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSwgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBDb252ZXJ0IHNvY2tldCBhZGRyZXNzZXMgdG8gcHJlc2VudGF0aW9uIGFkZHJlc3NlcyBhbmQgdW5pdmVyc2FsCisgKiBhZGRyZXNzZXMsIGFuZCB2aWNlIHZlcnNhLgorICoKKyAqIFVuaXZlcnNhbCBhZGRyZXNzZXMgYXJlIGludHJvZHVjZWQgYnkgUkZDIDE4MzMgYW5kIGZ1cnRoZXIgcmVmaW5lZCBieQorICogcmVjZW50IFJGQ3MgZGVzY3JpYmluZyBORlN2NC4gIFRoZSB1bml2ZXJzYWwgYWRkcmVzcyBmb3JtYXQgaXMgcGFydAorICogb2YgdGhlIGV4dGVybmFsIChuZXR3b3JrKSBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgcnBjYmluZCB2ZXJzaW9uIDMKKyAqIGFuZCA0LCBhbmQgYnkgTkZTdjQuICBTdWNoIGFuIGFkZHJlc3MgaXMgYSBzdHJpbmcgY29udGFpbmluZyBhCisgKiBwcmVzZW50YXRpb24gZm9ybWF0IElQIGFkZHJlc3MgZm9sbG93ZWQgYnkgYSBwb3J0IG51bWJlciBpbgorICogImhpYnl0ZS5sb2J5dGUiIGZvcm1hdC4KKyAqCisgKiBJUHY2IGFkZHJlc3NlcyBjYW4gYWxzbyBpbmNsdWRlIGEgc2NvcGUgSUQsIHR5cGljYWxseSBkZW5vdGVkIGJ5CisgKiBhICclJyBmb2xsb3dlZCBieSBhIGRldmljZSBuYW1lIG9yIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuICBSZWZlciB0bworICogUkZDIDQyOTEsIFNlY3Rpb24gMi4yIGZvciBkZXRhaWxzIG9uIElQdjYgcHJlc2VudGF0aW9uIGZvcm1hdHMuCisgKi8KKworI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCitzdGF0aWMgc2l6ZV90IHJwY19udG9wNl9ub3Njb3BlaWQoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAsCisJCQkJICBjaGFyICpidWYsIGNvbnN0IGludCBidWZsZW4pCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciA9ICZzaW42LT5zaW42X2FkZHI7CisKKwkvKgorCSAqIFJGQyA0MjkxLCBTZWN0aW9uIDIuMi4yCisJICoKKwkgKiBTaG9ydGhhbmRlZCBBTlkgYWRkcmVzcworCSAqLworCWlmIChpcHY2X2FkZHJfYW55KGFkZHIpKQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBidWZsZW4sICI6OiIpOworCisJLyoKKwkgKiBSRkMgNDI5MSwgU2VjdGlvbiAyLjIuMgorCSAqCisJICogU2hvcnRoYW5kZWQgbG9vcGJhY2sgYWRkcmVzcworCSAqLworCWlmIChpcHY2X2FkZHJfbG9vcGJhY2soYWRkcikpCisJCXJldHVybiBzbnByaW50ZihidWYsIGJ1ZmxlbiwgIjo6MSIpOworCisJLyoKKwkgKiBSRkMgNDI5MSwgU2VjdGlvbiAyLjIuMworCSAqCisJICogU3BlY2lhbCBwcmVzZW50YXRpb24gYWRkcmVzcyBmb3JtYXQgZm9yIG1hcHBlZCB2NAorCSAqIGFkZHJlc3Nlcy4KKwkgKi8KKwlpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKGFkZHIpKQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBidWZsZW4sICI6OmZmZmY6JXBJNCIsCisJCQkJCSZhZGRyLT5zNl9hZGRyMzJbM10pOworCisJLyoKKwkgKiBSRkMgNDI5MSwgU2VjdGlvbiAyLjIuMQorCSAqCisJICogVG8ga2VlcCB0aGUgcmVzdWx0IGFzIHNob3J0IGFzIHBvc3NpYmxlLCBlc3BlY2lhbGx5CisJICogc2luY2Ugd2UgZG9uJ3Qgc2hvcnRoYW5kLCB3ZSBkb24ndCB3YW50IGxlYWRpbmcgemVyb3MKKwkgKiBpbiBlYWNoIGhhbGZ3b3JkLCBzbyBhdm9pZCAlcEk2LgorCSAqLworCXJldHVybiBzbnByaW50ZihidWYsIGJ1ZmxlbiwgIiV4OiV4OiV4OiV4OiV4OiV4OiV4OiV4IiwKKwkJbnRvaHMoYWRkci0+czZfYWRkcjE2WzBdKSwgbnRvaHMoYWRkci0+czZfYWRkcjE2WzFdKSwKKwkJbnRvaHMoYWRkci0+czZfYWRkcjE2WzJdKSwgbnRvaHMoYWRkci0+czZfYWRkcjE2WzNdKSwKKwkJbnRvaHMoYWRkci0+czZfYWRkcjE2WzRdKSwgbnRvaHMoYWRkci0+czZfYWRkcjE2WzVdKSwKKwkJbnRvaHMoYWRkci0+czZfYWRkcjE2WzZdKSwgbnRvaHMoYWRkci0+czZfYWRkcjE2WzddKSk7Cit9CisKK3N0YXRpYyBzaXplX3QgcnBjX250b3A2KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLAorCQkJY2hhciAqYnVmLCBjb25zdCBzaXplX3QgYnVmbGVuKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDsKKwljaGFyIHNjb3BlYnVmW0lQVjZfU0NPUEVfSURfTEVOXTsKKwlzaXplX3QgbGVuOworCWludCByYzsKKworCWxlbiA9IHJwY19udG9wNl9ub3Njb3BlaWQoc2FwLCBidWYsIGJ1Zmxlbik7CisJaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKKwkJcmV0dXJuIGxlbjsKKworCWlmICghKGlwdjZfYWRkcl90eXBlKCZzaW42LT5zaW42X2FkZHIpICYgSVBWNl9BRERSX0xJTktMT0NBTCkgJiYKKwkgICAgIShpcHY2X2FkZHJfdHlwZSgmc2luNi0+c2luNl9hZGRyKSAmIElQVjZfQUREUl9TSVRFTE9DQUwpKQorCQlyZXR1cm4gbGVuOworCisJcmMgPSBzbnByaW50ZihzY29wZWJ1Ziwgc2l6ZW9mKHNjb3BlYnVmKSwgIiVjJXUiLAorCQkJSVBWNl9TQ09QRV9ERUxJTUlURVIsIHNpbjYtPnNpbjZfc2NvcGVfaWQpOworCWlmICh1bmxpa2VseSgoc2l6ZV90KXJjID4gc2l6ZW9mKHNjb3BlYnVmKSkpCisJCXJldHVybiAwOworCisJbGVuICs9IHJjOworCWlmICh1bmxpa2VseShsZW4gPiBidWZsZW4pKQorCQlyZXR1cm4gMDsKKworCXN0cmNhdChidWYsIHNjb3BlYnVmKTsKKwlyZXR1cm4gbGVuOworfQorCisjZWxzZQkvKiAhKGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKSkgKi8KKworc3RhdGljIHNpemVfdCBycGNfbnRvcDZfbm9zY29wZWlkKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLAorCQkJCSAgY2hhciAqYnVmLCBjb25zdCBpbnQgYnVmbGVuKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc2l6ZV90IHJwY19udG9wNihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwKKwkJCWNoYXIgKmJ1ZiwgY29uc3Qgc2l6ZV90IGJ1ZmxlbikKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCS8qICEoZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpKSAqLworCitzdGF0aWMgaW50IHJwY19udG9wNChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwKKwkJICAgICBjaGFyICpidWYsIGNvbnN0IHNpemVfdCBidWZsZW4pCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopc2FwOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXBJNCIsICZzaW4tPnNpbl9hZGRyKTsKK30KKworLyoqCisgKiBycGNfbnRvcCAtIGNvbnN0cnVjdCBhIHByZXNlbnRhdGlvbiBhZGRyZXNzIGluIEBidWYKKyAqIEBzYXA6IHNvY2tldCBhZGRyZXNzCisgKiBAYnVmOiBjb25zdHJ1Y3Rpb24gYXJlYQorICogQGJ1Zmxlbjogc2l6ZSBvZiBAYnVmLCBpbiBieXRlcworICoKKyAqIFBsYW50cyBhICVOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gQGJ1ZiBhbmQgcmV0dXJucyB0aGUgbGVuZ3RoCisgKiBvZiB0aGUgc3RyaW5nLCBleGNsdWRpbmcgdGhlICVOVUwuICBPdGhlcndpc2UgemVybyBpcyByZXR1cm5lZC4KKyAqLworc2l6ZV90IHJwY19udG9wKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLCBjaGFyICpidWYsIGNvbnN0IHNpemVfdCBidWZsZW4pCit7CisJc3dpdGNoIChzYXAtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJcmV0dXJuIHJwY19udG9wNChzYXAsIGJ1ZiwgYnVmbGVuKTsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gcnBjX250b3A2KHNhcCwgYnVmLCBidWZsZW4pOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnBjX250b3ApOworCitzdGF0aWMgc2l6ZV90IHJwY19wdG9uNChjb25zdCBjaGFyICpidWYsIGNvbnN0IHNpemVfdCBidWZsZW4sCisJCQlzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgY29uc3Qgc2l6ZV90IHNhbGVuKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDsKKwl1OCAqYWRkciA9ICh1OCAqKSZzaW4tPnNpbl9hZGRyLnNfYWRkcjsKKworCWlmIChidWZsZW4gPiBJTkVUX0FERFJTVFJMRU4gfHwgc2FsZW4gPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoc2FwLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisKKwlpZiAoaW40X3B0b24oYnVmLCBidWZsZW4sIGFkZHIsICdcMCcsIE5VTEwpID09IDApCisJCXJldHVybiAwOworCisJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7OworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCitzdGF0aWMgaW50IHJwY19wYXJzZV9zY29wZV9pZChjb25zdCBjaGFyICpidWYsIGNvbnN0IHNpemVfdCBidWZsZW4sCisJCQkgICAgICBjb25zdCBjaGFyICpkZWxpbSwgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNikKK3sKKwljaGFyICpwOworCXNpemVfdCBsZW47CisKKwlpZiAoKGJ1ZiArIGJ1ZmxlbikgPT0gZGVsaW0pCisJCXJldHVybiAxOworCisJaWYgKCpkZWxpbSAhPSBJUFY2X1NDT1BFX0RFTElNSVRFUikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIShpcHY2X2FkZHJfdHlwZSgmc2luNi0+c2luNl9hZGRyKSAmIElQVjZfQUREUl9MSU5LTE9DQUwpICYmCisJICAgICEoaXB2Nl9hZGRyX3R5cGUoJnNpbjYtPnNpbjZfYWRkcikgJiBJUFY2X0FERFJfU0lURUxPQ0FMKSkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSAoYnVmICsgYnVmbGVuKSAtIGRlbGltIC0gMTsKKwlwID0ga3N0cm5kdXAoZGVsaW0gKyAxLCBsZW4sIEdGUF9LRVJORUwpOworCWlmIChwKSB7CisJCXVuc2lnbmVkIGxvbmcgc2NvcGVfaWQgPSAwOworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCisJCWRldiA9IGRldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIHApOworCQlpZiAoZGV2ICE9IE5VTEwpIHsKKwkJCXNjb3BlX2lkID0gZGV2LT5pZmluZGV4OworCQkJZGV2X3B1dChkZXYpOworCQl9IGVsc2UgeworCQkJaWYgKHN0cmljdF9zdHJ0b3VsKHAsIDEwLCAmc2NvcGVfaWQpID09IDApIHsKKwkJCQlrZnJlZShwKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCisJCWtmcmVlKHApOworCisJCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSBzY29wZV9pZDsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzaXplX3QgcnBjX3B0b242KGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3Qgc2l6ZV90IGJ1ZmxlbiwKKwkJCXN0cnVjdCBzb2NrYWRkciAqc2FwLCBjb25zdCBzaXplX3Qgc2FsZW4pCit7CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwOworCXU4ICphZGRyID0gKHU4ICopJnNpbjYtPnNpbjZfYWRkci5pbjZfdTsKKwljb25zdCBjaGFyICpkZWxpbTsKKworCWlmIChidWZsZW4gPiAoSU5FVDZfQUREUlNUUkxFTiArIElQVjZfU0NPUEVfSURfTEVOKSB8fAorCSAgICBzYWxlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoc2FwLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCisJaWYgKGluNl9wdG9uKGJ1ZiwgYnVmbGVuLCBhZGRyLCBJUFY2X1NDT1BFX0RFTElNSVRFUiwgJmRlbGltKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmICghcnBjX3BhcnNlX3Njb3BlX2lkKGJ1ZiwgYnVmbGVuLCBkZWxpbSwgc2luNikpCisJCXJldHVybiAwOworCisJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworfQorI2Vsc2UKK3N0YXRpYyBzaXplX3QgcnBjX3B0b242KGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3Qgc2l6ZV90IGJ1ZmxlbiwKKwkJCXN0cnVjdCBzb2NrYWRkciAqc2FwLCBjb25zdCBzaXplX3Qgc2FsZW4pCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoqCisgKiBycGNfcHRvbiAtIENvbnN0cnVjdCBhIHNvY2thZGRyIGluIEBzYXAKKyAqIEBidWY6IEMgc3RyaW5nIGNvbnRhaW5pbmcgcHJlc2VudGF0aW9uIGZvcm1hdCBJUCBhZGRyZXNzCisgKiBAYnVmbGVuOiBsZW5ndGggb2YgcHJlc2VudGF0aW9uIGFkZHJlc3MgaW4gYnl0ZXMKKyAqIEBzYXA6IGJ1ZmZlciBpbnRvIHdoaWNoIHRvIHBsYW50IHNvY2tldCBhZGRyZXNzCisgKiBAc2FsZW46IHNpemUgb2YgYnVmZmVyIGluIGJ5dGVzCisgKgorICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgc29ja2V0IGFkZHJlc3MgaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlCisgKiB6ZXJvIGlzIHJldHVybmVkLgorICoKKyAqIFBsYW50cyBhIHNvY2tldCBhZGRyZXNzIGluIEBzYXAgYW5kIHJldHVybnMgdGhlIHNpemUgb2YgdGhlCisgKiBzb2NrZXQgYWRkcmVzcywgaWYgc3VjY2Vzc2Z1bC4gIFJldHVybnMgemVybyBpZiBhbiBlcnJvcgorICogb2NjdXJyZWQuCisgKi8KK3NpemVfdCBycGNfcHRvbihjb25zdCBjaGFyICpidWYsIGNvbnN0IHNpemVfdCBidWZsZW4sCisJCXN0cnVjdCBzb2NrYWRkciAqc2FwLCBjb25zdCBzaXplX3Qgc2FsZW4pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmbGVuOyBpKyspCisJCWlmIChidWZbaV0gPT0gJzonKQorCQkJcmV0dXJuIHJwY19wdG9uNihidWYsIGJ1Zmxlbiwgc2FwLCBzYWxlbik7CisJcmV0dXJuIHJwY19wdG9uNChidWYsIGJ1Zmxlbiwgc2FwLCBzYWxlbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChycGNfcHRvbik7CisKKy8qKgorICogcnBjX3NvY2thZGRyMnVhZGRyIC0gQ29uc3RydWN0IGEgdW5pdmVyc2FsIGFkZHJlc3Mgc3RyaW5nIGZyb20gQHNhcC4KKyAqIEBzYXA6IHNvY2tldCBhZGRyZXNzCisgKgorICogUmV0dXJucyBhICVOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeTsKKyAqIG90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkIGlmIGFuIGVycm9yIG9jY3VycmVkLiAgQ2FsbGVyIG11c3QKKyAqIGZyZWUgdGhlIHJldHVybmVkIHN0cmluZy4KKyAqLworY2hhciAqcnBjX3NvY2thZGRyMnVhZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwKQoreworCWNoYXIgcG9ydGJ1ZltSUENCSU5EX01BWFVBRERSUExFTl07CisJY2hhciBhZGRyYnVmW1JQQ0JJTkRfTUFYVUFERFJMRU5dOworCXVuc2lnbmVkIHNob3J0IHBvcnQ7CisKKwlzd2l0Y2ggKHNhcC0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlpZiAocnBjX250b3A0KHNhcCwgYWRkcmJ1Ziwgc2l6ZW9mKGFkZHJidWYpKSA9PSAwKQorCQkJcmV0dXJuIE5VTEw7CisJCXBvcnQgPSBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcCktPnNpbl9wb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJaWYgKHJwY19udG9wNl9ub3Njb3BlaWQoc2FwLCBhZGRyYnVmLCBzaXplb2YoYWRkcmJ1ZikpID09IDApCisJCQlyZXR1cm4gTlVMTDsKKwkJcG9ydCA9IG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcCktPnNpbjZfcG9ydCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChzbnByaW50Zihwb3J0YnVmLCBzaXplb2YocG9ydGJ1ZiksCisJCSAgICAgIi4ldS4ldSIsIHBvcnQgPj4gOCwgcG9ydCAmIDB4ZmYpID4gKGludClzaXplb2YocG9ydGJ1ZikpCisJCXJldHVybiBOVUxMOworCisJaWYgKHN0cmxjYXQoYWRkcmJ1ZiwgcG9ydGJ1Ziwgc2l6ZW9mKGFkZHJidWYpKSA+IHNpemVvZihhZGRyYnVmKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4ga3N0cmR1cChhZGRyYnVmLCBHRlBfS0VSTkVMKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJwY19zb2NrYWRkcjJ1YWRkcik7CisKKy8qKgorICogcnBjX3VhZGRyMnNvY2thZGRyIC0gY29udmVydCBhIHVuaXZlcnNhbCBhZGRyZXNzIHRvIGEgc29ja2V0IGFkZHJlc3MuCisgKiBAdWFkZHI6IEMgc3RyaW5nIGNvbnRhaW5pbmcgdW5pdmVyc2FsIGFkZHJlc3MgdG8gY29udmVydAorICogQHVhZGRyX2xlbjogbGVuZ3RoIG9mIHVuaXZlcnNhbCBhZGRyZXNzIHN0cmluZworICogQHNhcDogYnVmZmVyIGludG8gd2hpY2ggdG8gcGxhbnQgc29ja2V0IGFkZHJlc3MKKyAqIEBzYWxlbjogc2l6ZSBvZiBidWZmZXIKKyAqCisgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBzb2NrZXQgYWRkcmVzcyBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UKKyAqIHplcm8gaXMgcmV0dXJuZWQuCisgKi8KK3NpemVfdCBycGNfdWFkZHIyc29ja2FkZHIoY29uc3QgY2hhciAqdWFkZHIsIGNvbnN0IHNpemVfdCB1YWRkcl9sZW4sCisJCQkgIHN0cnVjdCBzb2NrYWRkciAqc2FwLCBjb25zdCBzaXplX3Qgc2FsZW4pCit7CisJY2hhciAqYywgYnVmW1JQQ0JJTkRfTUFYVUFERFJMRU5dOworCXVuc2lnbmVkIGxvbmcgcG9ydGxvLCBwb3J0aGk7CisJdW5zaWduZWQgc2hvcnQgcG9ydDsKKworCWlmICh1YWRkcl9sZW4gPiBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkoYnVmLCB1YWRkciwgdWFkZHJfbGVuKTsKKworCWJ1Zlt1YWRkcl9sZW5dID0gJ1xuJzsKKwlidWZbdWFkZHJfbGVuICsgMV0gPSAnXDAnOworCisJYyA9IHN0cnJjaHIoYnVmLCAnLicpOworCWlmICh1bmxpa2VseShjID09IE5VTEwpKQorCQlyZXR1cm4gMDsKKwlpZiAodW5saWtlbHkoc3RyaWN0X3N0cnRvdWwoYyArIDEsIDEwLCAmcG9ydGxvKSAhPSAwKSkKKwkJcmV0dXJuIDA7CisJaWYgKHVubGlrZWx5KHBvcnRsbyA+IDI1NSkpCisJCXJldHVybiAwOworCisJY1swXSA9ICdcbic7CisJY1sxXSA9ICdcMCc7CisKKwljID0gc3RycmNocihidWYsICcuJyk7CisJaWYgKHVubGlrZWx5KGMgPT0gTlVMTCkpCisJCXJldHVybiAwOworCWlmICh1bmxpa2VseShzdHJpY3Rfc3RydG91bChjICsgMSwgMTAsICZwb3J0aGkpICE9IDApKQorCQlyZXR1cm4gMDsKKwlpZiAodW5saWtlbHkocG9ydGhpID4gMjU1KSkKKwkJcmV0dXJuIDA7CisKKwlwb3J0ID0gKHVuc2lnbmVkIHNob3J0KSgocG9ydGhpIDw8IDgpIHwgcG9ydGxvKTsKKworCWNbMF0gPSAnXDAnOworCisJaWYgKHJwY19wdG9uKGJ1Ziwgc3RybGVuKGJ1ZiksIHNhcCwgc2FsZW4pID09IDApCisJCXJldHVybiAwOworCisJc3dpdGNoIChzYXAtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXApLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJY2FzZSBBRl9JTkVUNjoKKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwKS0+c2luNl9wb3J0ID0gaHRvbnMocG9ydCk7CisJCXJldHVybiBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChycGNfdWFkZHIyc29ja2FkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCmluZGV4IDY2ZDQ1OGYuLmZjNmE0M2MgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKQEAgLTg5LDggKzg5LDggQEAKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChwaXBlX3ZlcnNpb25fd2FpdHF1ZXVlKTsKIAogc3RhdGljIHZvaWQgZ3NzX2ZyZWVfY3R4KHN0cnVjdCBnc3NfY2xfY3R4ICopOwotc3RhdGljIHN0cnVjdCBycGNfcGlwZV9vcHMgZ3NzX3VwY2FsbF9vcHNfdjA7Ci1zdGF0aWMgc3RydWN0IHJwY19waXBlX29wcyBnc3NfdXBjYWxsX29wc192MTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3BpcGVfb3BzIGdzc191cGNhbGxfb3BzX3YwOworc3RhdGljIGNvbnN0IHN0cnVjdCBycGNfcGlwZV9vcHMgZ3NzX3VwY2FsbF9vcHNfdjE7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGdzc19jbF9jdHggKgogZ3NzX2dldF9jdHgoc3RydWN0IGdzc19jbF9jdHggKmN0eCkKQEAgLTc3Nyw3ICs3NzcsNyBAQAogCSAqIHRoYXQgd2Ugc3VwcG9ydGVkIG9ubHkgdGhlIG9sZCBwaXBlLiAgU28gd2UgaW5zdGVhZCBjcmVhdGUKIAkgKiB0aGUgbmV3IHBpcGUgZmlyc3QuCiAJICovCi0JZ3NzX2F1dGgtPmRlbnRyeVsxXSA9IHJwY19ta3BpcGUoY2xudC0+Y2xfZGVudHJ5LAorCWdzc19hdXRoLT5kZW50cnlbMV0gPSBycGNfbWtwaXBlKGNsbnQtPmNsX3BhdGguZGVudHJ5LAogCQkJCQkgImdzc2QiLAogCQkJCQkgY2xudCwgJmdzc191cGNhbGxfb3BzX3YxLAogCQkJCQkgUlBDX1BJUEVfV0FJVF9GT1JfT1BFTik7CkBAIC03ODYsNyArNzg2LDcgQEAKIAkJZ290byBlcnJfcHV0X21lY2g7CiAJfQogCi0JZ3NzX2F1dGgtPmRlbnRyeVswXSA9IHJwY19ta3BpcGUoY2xudC0+Y2xfZGVudHJ5LAorCWdzc19hdXRoLT5kZW50cnlbMF0gPSBycGNfbWtwaXBlKGNsbnQtPmNsX3BhdGguZGVudHJ5LAogCQkJCQkgZ3NzX2F1dGgtPm1lY2gtPmdtX25hbWUsCiAJCQkJCSBjbG50LCAmZ3NzX3VwY2FsbF9vcHNfdjAsCiAJCQkJCSBSUENfUElQRV9XQUlUX0ZPUl9PUEVOKTsKQEAgLTE1MDcsNyArMTUwNyw3IEBACiAJLmNydW53cmFwX3Jlc3AJPSBnc3NfdW53cmFwX3Jlc3AsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJwY19waXBlX29wcyBnc3NfdXBjYWxsX29wc192MCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3BpcGVfb3BzIGdzc191cGNhbGxfb3BzX3YwID0gewogCS51cGNhbGwJCT0gZ3NzX3BpcGVfdXBjYWxsLAogCS5kb3duY2FsbAk9IGdzc19waXBlX2Rvd25jYWxsLAogCS5kZXN0cm95X21zZwk9IGdzc19waXBlX2Rlc3Ryb3lfbXNnLApAQCAtMTUxNSw3ICsxNTE1LDcgQEAKIAkucmVsZWFzZV9waXBlCT0gZ3NzX3BpcGVfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcnBjX3BpcGVfb3BzIGdzc191cGNhbGxfb3BzX3YxID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBycGNfcGlwZV9vcHMgZ3NzX3VwY2FsbF9vcHNfdjEgPSB7CiAJLnVwY2FsbAkJPSBnc3NfcGlwZV91cGNhbGwsCiAJLmRvd25jYWxsCT0gZ3NzX3BpcGVfZG93bmNhbGwsCiAJLmRlc3Ryb3lfbXNnCT0gZ3NzX3BpcGVfZGVzdHJveV9tc2csCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKaW5kZXggMjI3OGE1MC4uMmU2YTE0OCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYwpAQCAtMTgxLDYgKzE4MSwxMSBAQAogCSgqYnBwKVstMV0gPSAnXG4nOwogfQogCitzdGF0aWMgaW50IHJzaV91cGNhbGwoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QsIHN0cnVjdCBjYWNoZV9oZWFkICpoKQoreworCXJldHVybiBzdW5ycGNfY2FjaGVfcGlwZV91cGNhbGwoY2QsIGgsIHJzaV9yZXF1ZXN0KTsKK30KKwogCiBzdGF0aWMgaW50IHJzaV9wYXJzZShzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCwKIAkJICAgIGNoYXIgKm1lc2csIGludCBtbGVuKQpAQCAtMjcwLDcgKzI3NSw3IEBACiAJLmhhc2hfdGFibGUgICAgID0gcnNpX3RhYmxlLAogCS5uYW1lICAgICAgICAgICA9ICJhdXRoLnJwY3NlYy5pbml0IiwKIAkuY2FjaGVfcHV0ICAgICAgPSByc2lfcHV0LAotCS5jYWNoZV9yZXF1ZXN0ICA9IHJzaV9yZXF1ZXN0LAorCS5jYWNoZV91cGNhbGwgICA9IHJzaV91cGNhbGwsCiAJLmNhY2hlX3BhcnNlICAgID0gcnNpX3BhcnNlLAogCS5tYXRjaAkJPSByc2lfbWF0Y2gsCiAJLmluaXQJCT0gcnNpX2luaXQsCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NhY2hlLmMgYi9uZXQvc3VucnBjL2NhY2hlLmMKaW5kZXggZmYwYzIzMC4uNDVjZGFmZiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jYWNoZS5jCisrKyBiL25ldC9zdW5ycGMvY2FjaGUuYwpAQCAtMjcsMTAgKzI3LDEyIEBACiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdGF0cy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9ycGNfcGlwZV9mcy5oPgogCiAjZGVmaW5lCSBSUENEQkdfRkFDSUxJVFkgUlBDREJHX0NBQ0hFCiAKQEAgLTE3NSw3ICsxNzcsMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN1bnJwY19jYWNoZV91cGRhdGUpOwogCi1zdGF0aWMgaW50IGNhY2hlX21ha2VfdXBjYWxsKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmRldGFpbCwgc3RydWN0IGNhY2hlX2hlYWQgKmgpOworc3RhdGljIGludCBjYWNoZV9tYWtlX3VwY2FsbChzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCwgc3RydWN0IGNhY2hlX2hlYWQgKmgpCit7CisJaWYgKCFjZC0+Y2FjaGVfdXBjYWxsKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gY2QtPmNhY2hlX3VwY2FsbChjZCwgaCk7Cit9CisKIC8qCiAgKiBUaGlzIGlzIHRoZSBnZW5lcmljIGNhY2hlIG1hbmFnZW1lbnQgcm91dGluZSBmb3IgYWxsCiAgKiB0aGUgYXV0aGVudGljYXRpb24gY2FjaGVzLgpAQCAtMjg0LDc2ICsyOTIsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjdXJyZW50X2RldGFpbDsKIHN0YXRpYyBpbnQgY3VycmVudF9pbmRleDsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FjaGVfZmlsZV9vcGVyYXRpb25zOwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29udGVudF9maWxlX29wZXJhdGlvbnM7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYWNoZV9mbHVzaF9vcGVyYXRpb25zOwotCiBzdGF0aWMgdm9pZCBkb19jYWNoZV9jbGVhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGNhY2hlX2NsZWFuZXIsIGRvX2NhY2hlX2NsZWFuKTsKIAotc3RhdGljIHZvaWQgcmVtb3ZlX2NhY2hlX3Byb2NfZW50cmllcyhzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCkKK3N0YXRpYyB2b2lkIHN1bnJwY19pbml0X2NhY2hlX2RldGFpbChzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCkKIHsKLQlpZiAoY2QtPnByb2NfZW50ID09IE5VTEwpCi0JCXJldHVybjsKLQlpZiAoY2QtPmZsdXNoX2VudCkKLQkJcmVtb3ZlX3Byb2NfZW50cnkoImZsdXNoIiwgY2QtPnByb2NfZW50KTsKLQlpZiAoY2QtPmNoYW5uZWxfZW50KQotCQlyZW1vdmVfcHJvY19lbnRyeSgiY2hhbm5lbCIsIGNkLT5wcm9jX2VudCk7Ci0JaWYgKGNkLT5jb250ZW50X2VudCkKLQkJcmVtb3ZlX3Byb2NfZW50cnkoImNvbnRlbnQiLCBjZC0+cHJvY19lbnQpOwotCWNkLT5wcm9jX2VudCA9IE5VTEw7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoY2QtPm5hbWUsIHByb2NfbmV0X3JwYyk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGludCBjcmVhdGVfY2FjaGVfcHJvY19lbnRyaWVzKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKQotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcDsKLQotCWNkLT5wcm9jX2VudCA9IHByb2NfbWtkaXIoY2QtPm5hbWUsIHByb2NfbmV0X3JwYyk7Ci0JaWYgKGNkLT5wcm9jX2VudCA9PSBOVUxMKQotCQlnb3RvIG91dF9ub21lbTsKLQljZC0+Y2hhbm5lbF9lbnQgPSBjZC0+Y29udGVudF9lbnQgPSBOVUxMOwotCi0JcCA9IHByb2NfY3JlYXRlX2RhdGEoImZsdXNoIiwgU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsCi0JCQkgICAgIGNkLT5wcm9jX2VudCwgJmNhY2hlX2ZsdXNoX29wZXJhdGlvbnMsIGNkKTsKLQljZC0+Zmx1c2hfZW50ID0gcDsKLQlpZiAocCA9PSBOVUxMKQotCQlnb3RvIG91dF9ub21lbTsKLQotCWlmIChjZC0+Y2FjaGVfcmVxdWVzdCB8fCBjZC0+Y2FjaGVfcGFyc2UpIHsKLQkJcCA9IHByb2NfY3JlYXRlX2RhdGEoImNoYW5uZWwiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwKLQkJCQkgICAgIGNkLT5wcm9jX2VudCwgJmNhY2hlX2ZpbGVfb3BlcmF0aW9ucywgY2QpOwotCQljZC0+Y2hhbm5lbF9lbnQgPSBwOwotCQlpZiAocCA9PSBOVUxMKQotCQkJZ290byBvdXRfbm9tZW07Ci0JfQotCWlmIChjZC0+Y2FjaGVfc2hvdykgewotCQlwID0gcHJvY19jcmVhdGVfZGF0YSgiY29udGVudCIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLAotCQkJCWNkLT5wcm9jX2VudCwgJmNvbnRlbnRfZmlsZV9vcGVyYXRpb25zLCBjZCk7Ci0JCWNkLT5jb250ZW50X2VudCA9IHA7Ci0JCWlmIChwID09IE5VTEwpCi0JCQlnb3RvIG91dF9ub21lbTsKLQl9Ci0JcmV0dXJuIDA7Ci1vdXRfbm9tZW06Ci0JcmVtb3ZlX2NhY2hlX3Byb2NfZW50cmllcyhjZCk7Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0jZWxzZSAvKiBDT05GSUdfUFJPQ19GUyAqLwotc3RhdGljIGludCBjcmVhdGVfY2FjaGVfcHJvY19lbnRyaWVzKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLWludCBjYWNoZV9yZWdpc3RlcihzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gY3JlYXRlX2NhY2hlX3Byb2NfZW50cmllcyhjZCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKIAlyd2xvY2tfaW5pdCgmY2QtPmhhc2hfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmNkLT5xdWV1ZSk7CiAJc3Bpbl9sb2NrKCZjYWNoZV9saXN0X2xvY2spOwpAQCAtMzY3LDExICszMTAsOSBAQAogCiAJLyogc3RhcnQgdGhlIGNsZWFuaW5nIHByb2Nlc3MgKi8KIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNhY2hlX2NsZWFuZXIsIDApOwotCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoY2FjaGVfcmVnaXN0ZXIpOwogCi12b2lkIGNhY2hlX3VucmVnaXN0ZXIoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpCitzdGF0aWMgdm9pZCBzdW5ycGNfZGVzdHJveV9jYWNoZV9kZXRhaWwoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpCiB7CiAJY2FjaGVfcHVyZ2UoY2QpOwogCXNwaW5fbG9jaygmY2FjaGVfbGlzdF9sb2NrKTsKQEAgLTM4Niw3ICszMjcsNiBAQAogCWxpc3RfZGVsX2luaXQoJmNkLT5vdGhlcnMpOwogCXdyaXRlX3VubG9jaygmY2QtPmhhc2hfbG9jayk7CiAJc3Bpbl91bmxvY2soJmNhY2hlX2xpc3RfbG9jayk7Ci0JcmVtb3ZlX2NhY2hlX3Byb2NfZW50cmllcyhjZCk7CiAJaWYgKGxpc3RfZW1wdHkoJmNhY2hlX2xpc3QpKSB7CiAJCS8qIG1vZHVsZSBtdXN0IGJlIGJlaW5nIHVubG9hZGVkIHNvIGl0cyBzYWZlIHRvIGtpbGwgdGhlIHdvcmtlciAqLwogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmNhY2hlX2NsZWFuZXIpOwpAQCAtMzk1LDcgKzMzNSw2IEBACiBvdXQ6CiAJcHJpbnRrKEtFUk5fRVJSICJuZnNkOiBmYWlsZWQgdG8gdW5yZWdpc3RlciAlcyBjYWNoZVxuIiwgY2QtPm5hbWUpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoY2FjaGVfdW5yZWdpc3Rlcik7CiAKIC8qIGNsZWFuIGNhY2hlIHRyaWVzIHRvIGZpbmQgc29tZXRoaW5nIHRvIGNsZWFuCiAgKiBhbmQgY2xlYW5zIGl0LgpAQCAtNjg3LDE4ICs2MjYsMTggQEAKIAlpbnQJCQlvZmZzZXQ7CS8qIGlmIG5vbi0wLCB3ZSBoYXZlIGEgcmVmY250IG9uIG5leHQgcmVxdWVzdCAqLwogfTsKIAotc3RhdGljIHNzaXplX3QKLWNhY2hlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3QgY2FjaGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKnBwb3MsIHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKQogewogCXN0cnVjdCBjYWNoZV9yZWFkZXIgKnJwID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBjYWNoZV9yZXF1ZXN0ICpycTsKLQlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFBERShmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgZXJyOwogCiAJaWYgKGNvdW50ID09IDApCiAJCXJldHVybiAwOwogCi0JbXV0ZXhfbG9jaygmcXVldWVfaW9fbXV0ZXgpOyAvKiBwcm90ZWN0IGFnYWluc3QgbXVsdGlwbGUgY29uY3VycmVudAorCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsgLyogcHJvdGVjdCBhZ2FpbnN0IG11bHRpcGxlIGNvbmN1cnJlbnQKIAkJCSAgICAgICogcmVhZGVycyBvbiB0aGlzIGZpbGUgKi8KICBhZ2FpbjoKIAlzcGluX2xvY2soJnF1ZXVlX2xvY2spOwpAQCAtNzExLDcgKzY1MCw3IEBACiAJfQogCWlmIChycC0+cS5saXN0Lm5leHQgPT0gJmNkLT5xdWV1ZSkgewogCQlzcGluX3VubG9jaygmcXVldWVfbG9jayk7Ci0JCW11dGV4X3VubG9jaygmcXVldWVfaW9fbXV0ZXgpOworCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAkJQlVHX09OKHJwLT5vZmZzZXQpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC03NTgsNDkgKzY5Nyw5MCBAQAogCX0KIAlpZiAoZXJyID09IC1FQUdBSU4pCiAJCWdvdG8gYWdhaW47Ci0JbXV0ZXhfdW5sb2NrKCZxdWV1ZV9pb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIGVyciA/IGVyciA6ICBjb3VudDsKIH0KIAotc3RhdGljIGNoYXIgd3JpdGVfYnVmWzgxOTJdOyAvKiBwcm90ZWN0ZWQgYnkgcXVldWVfaW9fbXV0ZXggKi8KLQotc3RhdGljIHNzaXplX3QKLWNhY2hlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCi0JICAgIGxvZmZfdCAqcHBvcykKK3N0YXRpYyBzc2l6ZV90IGNhY2hlX2RvX2Rvd25jYWxsKGNoYXIgKmthZGRyLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSBzaXplX3QgY291bnQsIHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKQogewotCWludCBlcnI7Ci0Jc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBQREUoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CisJc3NpemVfdCByZXQ7CiAKLQlpZiAoY291bnQgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGNvdW50ID49IHNpemVvZih3cml0ZV9idWYpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJnF1ZXVlX2lvX211dGV4KTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcih3cml0ZV9idWYsIGJ1ZiwgY291bnQpKSB7Ci0JCW11dGV4X3VubG9jaygmcXVldWVfaW9fbXV0ZXgpOworCWlmIChjb3B5X2Zyb21fdXNlcihrYWRkciwgYnVmLCBjb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KLQl3cml0ZV9idWZbY291bnRdID0gJ1wwJzsKLQlpZiAoY2QtPmNhY2hlX3BhcnNlKQotCQllcnIgPSBjZC0+Y2FjaGVfcGFyc2UoY2QsIHdyaXRlX2J1ZiwgY291bnQpOwotCWVsc2UKLQkJZXJyID0gLUVJTlZBTDsKKwlrYWRkcltjb3VudF0gPSAnXDAnOworCXJldCA9IGNkLT5jYWNoZV9wYXJzZShjZCwga2FkZHIsIGNvdW50KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gY291bnQ7CisJcmV0dXJuIHJldDsKK30KIAorc3RhdGljIHNzaXplX3QgY2FjaGVfc2xvd19kb3duY2FsbChjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgIHNpemVfdCBjb3VudCwgc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpCit7CisJc3RhdGljIGNoYXIgd3JpdGVfYnVmWzgxOTJdOyAvKiBwcm90ZWN0ZWQgYnkgcXVldWVfaW9fbXV0ZXggKi8KKwlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoY291bnQgPj0gc2l6ZW9mKHdyaXRlX2J1ZikpCisJCWdvdG8gb3V0OworCW11dGV4X2xvY2soJnF1ZXVlX2lvX211dGV4KTsKKwlyZXQgPSBjYWNoZV9kb19kb3duY2FsbCh3cml0ZV9idWYsIGJ1ZiwgY291bnQsIGNkKTsKIAltdXRleF91bmxvY2soJnF1ZXVlX2lvX211dGV4KTsKLQlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgY2FjaGVfZG93bmNhbGwoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkgICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwljaGFyICprYWRkcjsKKwlzc2l6ZV90IHJldCA9IC1FTk9NRU07CisKKwlpZiAoY291bnQgPj0gUEFHRV9DQUNIRV9TSVpFKQorCQlnb3RvIG91dF9zbG93OworCisJcGFnZSA9IGZpbmRfb3JfY3JlYXRlX3BhZ2UobWFwcGluZywgMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYWdlKQorCQlnb3RvIG91dF9zbG93OworCisJa2FkZHIgPSBrbWFwKHBhZ2UpOworCXJldCA9IGNhY2hlX2RvX2Rvd25jYWxsKGthZGRyLCBidWYsIGNvdW50LCBjZCk7CisJa3VubWFwKHBhZ2UpOworCXVubG9ja19wYWdlKHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwlyZXR1cm4gcmV0Oworb3V0X3Nsb3c6CisJcmV0dXJuIGNhY2hlX3Nsb3dfZG93bmNhbGwoYnVmLCBjb3VudCwgY2QpOworfQorCitzdGF0aWMgc3NpemVfdCBjYWNoZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLAorCQkJICAgc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxwLT5mX21hcHBpbmc7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJc3NpemVfdCByZXQgPSAtRUlOVkFMOworCisJaWYgKCFjZC0+Y2FjaGVfcGFyc2UpCisJCWdvdG8gb3V0OworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldCA9IGNhY2hlX2Rvd25jYWxsKG1hcHBpbmcsIGJ1ZiwgY291bnQsIGNkKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKK291dDoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocXVldWVfd2FpdCk7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWNhY2hlX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpCitzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQsCisJCQkgICAgICAgc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpCiB7CiAJdW5zaWduZWQgaW50IG1hc2s7CiAJc3RydWN0IGNhY2hlX3JlYWRlciAqcnAgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGNhY2hlX3F1ZXVlICpjcTsKLQlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFBERShmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKIAogCXBvbGxfd2FpdChmaWxwLCAmcXVldWVfd2FpdCwgd2FpdCk7CiAKQEAgLTgyMiwxNCArODAyLDEzIEBACiAJcmV0dXJuIG1hc2s7CiB9CiAKLXN0YXRpYyBpbnQKLWNhY2hlX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGNhY2hlX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnLAorCQkgICAgICAgc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpCiB7CiAJaW50IGxlbiA9IDA7CiAJc3RydWN0IGNhY2hlX3JlYWRlciAqcnAgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGNhY2hlX3F1ZXVlICpjcTsKLQlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFBERShpbm8pLT5kYXRhOwogCiAJaWYgKGNtZCAhPSBGSU9OUkVBRCB8fCAhcnApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODUyLDE1ICs4MzEsMTUgQEAKIAlyZXR1cm4gcHV0X3VzZXIobGVuLCAoaW50IF9fdXNlciAqKWFyZyk7CiB9CiAKLXN0YXRpYyBpbnQKLWNhY2hlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGNhY2hlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCSAgICAgIHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKQogewogCXN0cnVjdCBjYWNoZV9yZWFkZXIgKnJwID0gTlVMTDsKIAorCWlmICghY2QgfHwgIXRyeV9tb2R1bGVfZ2V0KGNkLT5vd25lcikpCisJCXJldHVybiAtRUFDQ0VTOwogCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbHApOwogCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCXN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkID0gUERFKGlub2RlKS0+ZGF0YTsKLQogCQlycCA9IGttYWxsb2Moc2l6ZW9mKCpycCksIEdGUF9LRVJORUwpOwogCQlpZiAoIXJwKQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC04NzUsMTEgKzg1NCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1jYWNoZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBjYWNoZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJIHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKQogewogCXN0cnVjdCBjYWNoZV9yZWFkZXIgKnJwID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkID0gUERFKGlub2RlKS0+ZGF0YTsKIAogCWlmIChycCkgewogCQlzcGluX2xvY2soJnF1ZXVlX2xvY2spOwpAQCAtOTAzLDIzICs4ODEsMTIgQEAKIAkJY2QtPmxhc3RfY2xvc2UgPSBnZXRfc2Vjb25kcygpOwogCQlhdG9taWNfZGVjKCZjZC0+cmVhZGVycyk7CiAJfQorCW1vZHVsZV9wdXQoY2QtPm93bmVyKTsKIAlyZXR1cm4gMDsKIH0KIAogCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhY2hlX2ZpbGVfb3BlcmF0aW9ucyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmxsc2VlawkJPSBub19sbHNlZWssCi0JLnJlYWQJCT0gY2FjaGVfcmVhZCwKLQkud3JpdGUJCT0gY2FjaGVfd3JpdGUsCi0JLnBvbGwJCT0gY2FjaGVfcG9sbCwKLQkuaW9jdGwJCT0gY2FjaGVfaW9jdGwsIC8qIGZvciBGSU9OUkVBRCAqLwotCS5vcGVuCQk9IGNhY2hlX29wZW4sCi0JLnJlbGVhc2UJPSBjYWNoZV9yZWxlYXNlLAotfTsKLQotCiBzdGF0aWMgdm9pZCBxdWV1ZV9sb29zZShzdHJ1Y3QgY2FjaGVfZGV0YWlsICpkZXRhaWwsIHN0cnVjdCBjYWNoZV9oZWFkICpjaCkKIHsKIAlzdHJ1Y3QgY2FjaGVfcXVldWUgKmNxOwpAQCAtMTAyMCwxNSArOTg3LDIxIEBACiAJaWYgKGRldGFpbC0+bGFzdF93YXJuICE9IGRldGFpbC0+bGFzdF9jbG9zZSkgewogCQlkZXRhaWwtPmxhc3Rfd2FybiA9IGRldGFpbC0+bGFzdF9jbG9zZTsKIAkJaWYgKGRldGFpbC0+d2Fybl9ub19saXN0ZW5lcikKLQkJCWRldGFpbC0+d2Fybl9ub19saXN0ZW5lcihkZXRhaWwpOworCQkJZGV0YWlsLT53YXJuX25vX2xpc3RlbmVyKGRldGFpbCwgZGV0YWlsLT5sYXN0X2Nsb3NlICE9IDApOwogCX0KIH0KIAogLyoKLSAqIHJlZ2lzdGVyIGFuIHVwY2FsbCByZXF1ZXN0IHRvIHVzZXItc3BhY2UuCisgKiByZWdpc3RlciBhbiB1cGNhbGwgcmVxdWVzdCB0byB1c2VyLXNwYWNlIGFuZCBxdWV1ZSBpdCB1cCBmb3IgcmVhZCgpIGJ5IHRoZQorICogdXBjYWxsIGRhZW1vbi4KKyAqCiAgKiBFYWNoIHJlcXVlc3QgaXMgYXQgbW9zdCBvbmUgcGFnZSBsb25nLgogICovCi1zdGF0aWMgaW50IGNhY2hlX21ha2VfdXBjYWxsKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmRldGFpbCwgc3RydWN0IGNhY2hlX2hlYWQgKmgpCitpbnQgc3VucnBjX2NhY2hlX3BpcGVfdXBjYWxsKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmRldGFpbCwgc3RydWN0IGNhY2hlX2hlYWQgKmgsCisJCXZvaWQgKCpjYWNoZV9yZXF1ZXN0KShzdHJ1Y3QgY2FjaGVfZGV0YWlsICosCisJCQkJICAgICAgc3RydWN0IGNhY2hlX2hlYWQgKiwKKwkJCQkgICAgICBjaGFyICoqLAorCQkJCSAgICAgIGludCAqKSkKIHsKIAogCWNoYXIgKmJ1ZjsKQEAgLTEwMzYsOSArMTAwOSw2IEBACiAJY2hhciAqYnA7CiAJaW50IGxlbjsKIAotCWlmIChkZXRhaWwtPmNhY2hlX3JlcXVlc3QgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoYXRvbWljX3JlYWQoJmRldGFpbC0+cmVhZGVycykgPT0gMCAmJgogCSAgICBkZXRhaWwtPmxhc3RfY2xvc2UgPCBnZXRfc2Vjb25kcygpIC0gMzApIHsKIAkJCXdhcm5fbm9fbGlzdGVuZXIoZGV0YWlsKTsKQEAgLTEwNTcsNyArMTAyNyw3IEBACiAKIAlicCA9IGJ1ZjsgbGVuID0gUEFHRV9TSVpFOwogCi0JZGV0YWlsLT5jYWNoZV9yZXF1ZXN0KGRldGFpbCwgaCwgJmJwLCAmbGVuKTsKKwljYWNoZV9yZXF1ZXN0KGRldGFpbCwgaCwgJmJwLCAmbGVuKTsKIAogCWlmIChsZW4gPCAwKSB7CiAJCWtmcmVlKGJ1Zik7CkBAIC0xMDc1LDYgKzEwNDUsNyBAQAogCXdha2VfdXAoJnF1ZXVlX3dhaXQpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc3VucnBjX2NhY2hlX3BpcGVfdXBjYWxsKTsKIAogLyoKICAqIHBhcnNlIGEgbWVzc2FnZSBmcm9tIHVzZXItc3BhY2UgYW5kIHBhc3MgaXQKQEAgLTEyNDIsMTEgKzEyMTMsMTMgQEAKIAkuc2hvdwk9IGNfc2hvdywKIH07CiAKLXN0YXRpYyBpbnQgY29udGVudF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBjb250ZW50X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCkKIHsKIAlzdHJ1Y3QgaGFuZGxlICpoYW47Ci0Jc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBQREUoaW5vZGUpLT5kYXRhOwogCisJaWYgKCFjZCB8fCAhdHJ5X21vZHVsZV9nZXQoY2QtPm93bmVyKSkKKwkJcmV0dXJuIC1FQUNDRVM7CiAJaGFuID0gX19zZXFfb3Blbl9wcml2YXRlKGZpbGUsICZjYWNoZV9jb250ZW50X29wLCBzaXplb2YoKmhhbikpOwogCWlmIChoYW4gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMjU1LDE3ICsxMjI4LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbnRlbnRfZmlsZV9vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IGNvbnRlbnRfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCi19Oworc3RhdGljIGludCBjb250ZW50X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCXN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKQoreworCWludCByZXQgPSBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTsKKwltb2R1bGVfcHV0KGNkLT5vd25lcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvcGVuX2ZsdXNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpCit7CisJaWYgKCFjZCB8fCAhdHJ5X21vZHVsZV9nZXQoY2QtPm93bmVyKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50IHJlbGVhc2VfZmx1c2goc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCkKK3sKKwltb2R1bGVfcHV0KGNkLT5vd25lcik7CisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBzc2l6ZV90IHJlYWRfZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCi0JCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCisJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLAorCQkJICBzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCkKIHsKLQlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKIAljaGFyIHRidWZbMjBdOwogCXVuc2lnbmVkIGxvbmcgcCA9ICpwcG9zOwogCXNpemVfdCBsZW47CkBAIC0xMjgzLDEwICsxMjcyLDEwIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHNzaXplX3Qgd3JpdGVfZmx1c2goc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKLQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCB3cml0ZV9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLAorCQkJICAgc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpCiB7Ci0Jc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CiAJY2hhciB0YnVmWzIwXTsKIAljaGFyICplcDsKIAlsb25nIGZsdXNodGltZTsKQEAgLTEzMDcsOCArMTI5NiwzNDMgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhY2hlX2ZsdXNoX29wZXJhdGlvbnMgPSB7Ci0JLm9wZW4JCT0gbm9uc2Vla2FibGVfb3BlbiwKLQkucmVhZAkJPSByZWFkX2ZsdXNoLAotCS53cml0ZQkJPSB3cml0ZV9mbHVzaCwKK3N0YXRpYyBzc2l6ZV90IGNhY2hlX3JlYWRfcHJvY2ZzKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFBERShmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKKworCXJldHVybiBjYWNoZV9yZWFkKGZpbHAsIGJ1ZiwgY291bnQsIHBwb3MsIGNkKTsKK30KKworc3RhdGljIHNzaXplX3QgY2FjaGVfd3JpdGVfcHJvY2ZzKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBQREUoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CisKKwlyZXR1cm4gY2FjaGVfd3JpdGUoZmlscCwgYnVmLCBjb3VudCwgcHBvcywgY2QpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlX3BvbGxfcHJvY2ZzKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkID0gUERFKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOworCisJcmV0dXJuIGNhY2hlX3BvbGwoZmlscCwgd2FpdCwgY2QpOworfQorCitzdGF0aWMgaW50IGNhY2hlX2lvY3RsX3Byb2NmcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkID0gUERFKGlub2RlKS0+ZGF0YTsKKworCXJldHVybiBjYWNoZV9pb2N0bChpbm9kZSwgZmlscCwgY21kLCBhcmcsIGNkKTsKK30KKworc3RhdGljIGludCBjYWNoZV9vcGVuX3Byb2NmcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFBERShpbm9kZSktPmRhdGE7CisKKwlyZXR1cm4gY2FjaGVfb3Blbihpbm9kZSwgZmlscCwgY2QpOworfQorCitzdGF0aWMgaW50IGNhY2hlX3JlbGVhc2VfcHJvY2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkID0gUERFKGlub2RlKS0+ZGF0YTsKKworCXJldHVybiBjYWNoZV9yZWxlYXNlKGlub2RlLCBmaWxwLCBjZCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhY2hlX2ZpbGVfb3BlcmF0aW9uc19wcm9jZnMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS5yZWFkCQk9IGNhY2hlX3JlYWRfcHJvY2ZzLAorCS53cml0ZQkJPSBjYWNoZV93cml0ZV9wcm9jZnMsCisJLnBvbGwJCT0gY2FjaGVfcG9sbF9wcm9jZnMsCisJLmlvY3RsCQk9IGNhY2hlX2lvY3RsX3Byb2NmcywgLyogZm9yIEZJT05SRUFEICovCisJLm9wZW4JCT0gY2FjaGVfb3Blbl9wcm9jZnMsCisJLnJlbGVhc2UJPSBjYWNoZV9yZWxlYXNlX3Byb2NmcywKIH07CisKK3N0YXRpYyBpbnQgY29udGVudF9vcGVuX3Byb2NmcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFBERShpbm9kZSktPmRhdGE7CisKKwlyZXR1cm4gY29udGVudF9vcGVuKGlub2RlLCBmaWxwLCBjZCk7Cit9CisKK3N0YXRpYyBpbnQgY29udGVudF9yZWxlYXNlX3Byb2NmcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFBERShpbm9kZSktPmRhdGE7CisKKwlyZXR1cm4gY29udGVudF9yZWxlYXNlKGlub2RlLCBmaWxwLCBjZCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbnRlbnRfZmlsZV9vcGVyYXRpb25zX3Byb2NmcyA9IHsKKwkub3BlbgkJPSBjb250ZW50X29wZW5fcHJvY2ZzLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gY29udGVudF9yZWxlYXNlX3Byb2NmcywKK307CisKK3N0YXRpYyBpbnQgb3Blbl9mbHVzaF9wcm9jZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBQREUoaW5vZGUpLT5kYXRhOworCisJcmV0dXJuIG9wZW5fZmx1c2goaW5vZGUsIGZpbHAsIGNkKTsKK30KKworc3RhdGljIGludCByZWxlYXNlX2ZsdXNoX3Byb2NmcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFBERShpbm9kZSktPmRhdGE7CisKKwlyZXR1cm4gcmVsZWFzZV9mbHVzaChpbm9kZSwgZmlscCwgY2QpOworfQorCitzdGF0aWMgc3NpemVfdCByZWFkX2ZsdXNoX3Byb2NmcyhzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFBERShmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKKworCXJldHVybiByZWFkX2ZsdXNoKGZpbHAsIGJ1ZiwgY291bnQsIHBwb3MsIGNkKTsKK30KKworc3RhdGljIHNzaXplX3Qgd3JpdGVfZmx1c2hfcHJvY2ZzKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkID0gUERFKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOworCisJcmV0dXJuIHdyaXRlX2ZsdXNoKGZpbHAsIGJ1ZiwgY291bnQsIHBwb3MsIGNkKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FjaGVfZmx1c2hfb3BlcmF0aW9uc19wcm9jZnMgPSB7CisJLm9wZW4JCT0gb3Blbl9mbHVzaF9wcm9jZnMsCisJLnJlYWQJCT0gcmVhZF9mbHVzaF9wcm9jZnMsCisJLndyaXRlCQk9IHdyaXRlX2ZsdXNoX3Byb2NmcywKKwkucmVsZWFzZQk9IHJlbGVhc2VfZmx1c2hfcHJvY2ZzLAorfTsKKworc3RhdGljIHZvaWQgcmVtb3ZlX2NhY2hlX3Byb2NfZW50cmllcyhzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCkKK3sKKwlpZiAoY2QtPnUucHJvY2ZzLnByb2NfZW50ID09IE5VTEwpCisJCXJldHVybjsKKwlpZiAoY2QtPnUucHJvY2ZzLmZsdXNoX2VudCkKKwkJcmVtb3ZlX3Byb2NfZW50cnkoImZsdXNoIiwgY2QtPnUucHJvY2ZzLnByb2NfZW50KTsKKwlpZiAoY2QtPnUucHJvY2ZzLmNoYW5uZWxfZW50KQorCQlyZW1vdmVfcHJvY19lbnRyeSgiY2hhbm5lbCIsIGNkLT51LnByb2Nmcy5wcm9jX2VudCk7CisJaWYgKGNkLT51LnByb2Nmcy5jb250ZW50X2VudCkKKwkJcmVtb3ZlX3Byb2NfZW50cnkoImNvbnRlbnQiLCBjZC0+dS5wcm9jZnMucHJvY19lbnQpOworCWNkLT51LnByb2Nmcy5wcm9jX2VudCA9IE5VTEw7CisJcmVtb3ZlX3Byb2NfZW50cnkoY2QtPm5hbWUsIHByb2NfbmV0X3JwYyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIGludCBjcmVhdGVfY2FjaGVfcHJvY19lbnRyaWVzKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcDsKKworCWNkLT51LnByb2Nmcy5wcm9jX2VudCA9IHByb2NfbWtkaXIoY2QtPm5hbWUsIHByb2NfbmV0X3JwYyk7CisJaWYgKGNkLT51LnByb2Nmcy5wcm9jX2VudCA9PSBOVUxMKQorCQlnb3RvIG91dF9ub21lbTsKKwljZC0+dS5wcm9jZnMuY2hhbm5lbF9lbnQgPSBOVUxMOworCWNkLT51LnByb2Nmcy5jb250ZW50X2VudCA9IE5VTEw7CisKKwlwID0gcHJvY19jcmVhdGVfZGF0YSgiZmx1c2giLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwKKwkJCSAgICAgY2QtPnUucHJvY2ZzLnByb2NfZW50LAorCQkJICAgICAmY2FjaGVfZmx1c2hfb3BlcmF0aW9uc19wcm9jZnMsIGNkKTsKKwljZC0+dS5wcm9jZnMuZmx1c2hfZW50ID0gcDsKKwlpZiAocCA9PSBOVUxMKQorCQlnb3RvIG91dF9ub21lbTsKKworCWlmIChjZC0+Y2FjaGVfdXBjYWxsIHx8IGNkLT5jYWNoZV9wYXJzZSkgeworCQlwID0gcHJvY19jcmVhdGVfZGF0YSgiY2hhbm5lbCIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLAorCQkJCSAgICAgY2QtPnUucHJvY2ZzLnByb2NfZW50LAorCQkJCSAgICAgJmNhY2hlX2ZpbGVfb3BlcmF0aW9uc19wcm9jZnMsIGNkKTsKKwkJY2QtPnUucHJvY2ZzLmNoYW5uZWxfZW50ID0gcDsKKwkJaWYgKHAgPT0gTlVMTCkKKwkJCWdvdG8gb3V0X25vbWVtOworCX0KKwlpZiAoY2QtPmNhY2hlX3Nob3cpIHsKKwkJcCA9IHByb2NfY3JlYXRlX2RhdGEoImNvbnRlbnQiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwKKwkJCQljZC0+dS5wcm9jZnMucHJvY19lbnQsCisJCQkJJmNvbnRlbnRfZmlsZV9vcGVyYXRpb25zX3Byb2NmcywgY2QpOworCQljZC0+dS5wcm9jZnMuY29udGVudF9lbnQgPSBwOworCQlpZiAocCA9PSBOVUxMKQorCQkJZ290byBvdXRfbm9tZW07CisJfQorCXJldHVybiAwOworb3V0X25vbWVtOgorCXJlbW92ZV9jYWNoZV9wcm9jX2VudHJpZXMoY2QpOworCXJldHVybiAtRU5PTUVNOworfQorI2Vsc2UgLyogQ09ORklHX1BST0NfRlMgKi8KK3N0YXRpYyBpbnQgY3JlYXRlX2NhY2hlX3Byb2NfZW50cmllcyhzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitpbnQgY2FjaGVfcmVnaXN0ZXIoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpCit7CisJaW50IHJldDsKKworCXN1bnJwY19pbml0X2NhY2hlX2RldGFpbChjZCk7CisJcmV0ID0gY3JlYXRlX2NhY2hlX3Byb2NfZW50cmllcyhjZCk7CisJaWYgKHJldCkKKwkJc3VucnBjX2Rlc3Ryb3lfY2FjaGVfZGV0YWlsKGNkKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2FjaGVfcmVnaXN0ZXIpOworCit2b2lkIGNhY2hlX3VucmVnaXN0ZXIoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpCit7CisJcmVtb3ZlX2NhY2hlX3Byb2NfZW50cmllcyhjZCk7CisJc3VucnBjX2Rlc3Ryb3lfY2FjaGVfZGV0YWlsKGNkKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNhY2hlX3VucmVnaXN0ZXIpOworCitzdGF0aWMgc3NpemVfdCBjYWNoZV9yZWFkX3BpcGVmcyhzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBSUENfSShmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+cHJpdmF0ZTsKKworCXJldHVybiBjYWNoZV9yZWFkKGZpbHAsIGJ1ZiwgY291bnQsIHBwb3MsIGNkKTsKK30KKworc3RhdGljIHNzaXplX3QgY2FjaGVfd3JpdGVfcGlwZWZzKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBSUENfSShmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+cHJpdmF0ZTsKKworCXJldHVybiBjYWNoZV93cml0ZShmaWxwLCBidWYsIGNvdW50LCBwcG9zLCBjZCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FjaGVfcG9sbF9waXBlZnMoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBSUENfSShmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+cHJpdmF0ZTsKKworCXJldHVybiBjYWNoZV9wb2xsKGZpbHAsIHdhaXQsIGNkKTsKK30KKworc3RhdGljIGludCBjYWNoZV9pb2N0bF9waXBlZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFJQQ19JKGlub2RlKS0+cHJpdmF0ZTsKKworCXJldHVybiBjYWNoZV9pb2N0bChpbm9kZSwgZmlscCwgY21kLCBhcmcsIGNkKTsKK30KKworc3RhdGljIGludCBjYWNoZV9vcGVuX3BpcGVmcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFJQQ19JKGlub2RlKS0+cHJpdmF0ZTsKKworCXJldHVybiBjYWNoZV9vcGVuKGlub2RlLCBmaWxwLCBjZCk7Cit9CisKK3N0YXRpYyBpbnQgY2FjaGVfcmVsZWFzZV9waXBlZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBSUENfSShpbm9kZSktPnByaXZhdGU7CisKKwlyZXR1cm4gY2FjaGVfcmVsZWFzZShpbm9kZSwgZmlscCwgY2QpOworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhY2hlX2ZpbGVfb3BlcmF0aW9uc19waXBlZnMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS5yZWFkCQk9IGNhY2hlX3JlYWRfcGlwZWZzLAorCS53cml0ZQkJPSBjYWNoZV93cml0ZV9waXBlZnMsCisJLnBvbGwJCT0gY2FjaGVfcG9sbF9waXBlZnMsCisJLmlvY3RsCQk9IGNhY2hlX2lvY3RsX3BpcGVmcywgLyogZm9yIEZJT05SRUFEICovCisJLm9wZW4JCT0gY2FjaGVfb3Blbl9waXBlZnMsCisJLnJlbGVhc2UJPSBjYWNoZV9yZWxlYXNlX3BpcGVmcywKK307CisKK3N0YXRpYyBpbnQgY29udGVudF9vcGVuX3BpcGVmcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCA9IFJQQ19JKGlub2RlKS0+cHJpdmF0ZTsKKworCXJldHVybiBjb250ZW50X29wZW4oaW5vZGUsIGZpbHAsIGNkKTsKK30KKworc3RhdGljIGludCBjb250ZW50X3JlbGVhc2VfcGlwZWZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkID0gUlBDX0koaW5vZGUpLT5wcml2YXRlOworCisJcmV0dXJuIGNvbnRlbnRfcmVsZWFzZShpbm9kZSwgZmlscCwgY2QpOworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbnRlbnRfZmlsZV9vcGVyYXRpb25zX3BpcGVmcyA9IHsKKwkub3BlbgkJPSBjb250ZW50X29wZW5fcGlwZWZzLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gY29udGVudF9yZWxlYXNlX3BpcGVmcywKK307CisKK3N0YXRpYyBpbnQgb3Blbl9mbHVzaF9waXBlZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBSUENfSShpbm9kZSktPnByaXZhdGU7CisKKwlyZXR1cm4gb3Blbl9mbHVzaChpbm9kZSwgZmlscCwgY2QpOworfQorCitzdGF0aWMgaW50IHJlbGVhc2VfZmx1c2hfcGlwZWZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkID0gUlBDX0koaW5vZGUpLT5wcml2YXRlOworCisJcmV0dXJuIHJlbGVhc2VfZmx1c2goaW5vZGUsIGZpbHAsIGNkKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVhZF9mbHVzaF9waXBlZnMoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGNhY2hlX2RldGFpbCAqY2QgPSBSUENfSShmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+cHJpdmF0ZTsKKworCXJldHVybiByZWFkX2ZsdXNoKGZpbHAsIGJ1ZiwgY291bnQsIHBwb3MsIGNkKTsKK30KKworc3RhdGljIHNzaXplX3Qgd3JpdGVfZmx1c2hfcGlwZWZzKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkID0gUlBDX0koZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPnByaXZhdGU7CisKKwlyZXR1cm4gd3JpdGVfZmx1c2goZmlscCwgYnVmLCBjb3VudCwgcHBvcywgY2QpOworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhY2hlX2ZsdXNoX29wZXJhdGlvbnNfcGlwZWZzID0geworCS5vcGVuCQk9IG9wZW5fZmx1c2hfcGlwZWZzLAorCS5yZWFkCQk9IHJlYWRfZmx1c2hfcGlwZWZzLAorCS53cml0ZQkJPSB3cml0ZV9mbHVzaF9waXBlZnMsCisJLnJlbGVhc2UJPSByZWxlYXNlX2ZsdXNoX3BpcGVmcywKK307CisKK2ludCBzdW5ycGNfY2FjaGVfcmVnaXN0ZXJfcGlwZWZzKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCQkgY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IHVtb2RlLAorCQkJCSBzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCkKK3sKKwlzdHJ1Y3QgcXN0ciBxOworCXN0cnVjdCBkZW50cnkgKmRpcjsKKwlpbnQgcmV0ID0gMDsKKworCXN1bnJwY19pbml0X2NhY2hlX2RldGFpbChjZCk7CisJcS5uYW1lID0gbmFtZTsKKwlxLmxlbiA9IHN0cmxlbihuYW1lKTsKKwlxLmhhc2ggPSBmdWxsX25hbWVfaGFzaChxLm5hbWUsIHEubGVuKTsKKwlkaXIgPSBycGNfY3JlYXRlX2NhY2hlX2RpcihwYXJlbnQsICZxLCB1bW9kZSwgY2QpOworCWlmICghSVNfRVJSKGRpcikpCisJCWNkLT51LnBpcGVmcy5kaXIgPSBkaXI7CisJZWxzZSB7CisJCXN1bnJwY19kZXN0cm95X2NhY2hlX2RldGFpbChjZCk7CisJCXJldCA9IFBUUl9FUlIoZGlyKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN1bnJwY19jYWNoZV9yZWdpc3Rlcl9waXBlZnMpOworCit2b2lkIHN1bnJwY19jYWNoZV91bnJlZ2lzdGVyX3BpcGVmcyhzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCkKK3sKKwlycGNfcmVtb3ZlX2NhY2hlX2RpcihjZC0+dS5waXBlZnMuZGlyKTsKKwljZC0+dS5waXBlZnMuZGlyID0gTlVMTDsKKwlzdW5ycGNfZGVzdHJveV9jYWNoZV9kZXRhaWwoY2QpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3VucnBjX2NhY2hlX3VucmVnaXN0ZXJfcGlwZWZzKTsKKwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jbG50LmMgYi9uZXQvc3VucnBjL2NsbnQuYwppbmRleCBkZjEwMzlmLi5mYWMwY2E5IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2NsbnQuYworKysgYi9uZXQvc3VucnBjL2NsbnQuYwpAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpAQCAtOTcsMzMgKzk5LDQ5IEBACiBycGNfc2V0dXBfcGlwZWRpcihzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIGNoYXIgKmRpcl9uYW1lKQogewogCXN0YXRpYyB1aW50MzJfdCBjbG50aWQ7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlzdHJ1Y3QgcGF0aCBwYXRoOworCWNoYXIgbmFtZVsxNV07CisJc3RydWN0IHFzdHIgcSA9IHsKKwkJLm5hbWUgPSBuYW1lLAorCX07CiAJaW50IGVycm9yOwogCi0JY2xudC0+Y2xfdmZzbW50ID0gRVJSX1BUUigtRU5PRU5UKTsKLQljbG50LT5jbF9kZW50cnkgPSBFUlJfUFRSKC1FTk9FTlQpOworCWNsbnQtPmNsX3BhdGgubW50ID0gRVJSX1BUUigtRU5PRU5UKTsKKwljbG50LT5jbF9wYXRoLmRlbnRyeSA9IEVSUl9QVFIoLUVOT0VOVCk7CiAJaWYgKGRpcl9uYW1lID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JY2xudC0+Y2xfdmZzbW50ID0gcnBjX2dldF9tb3VudCgpOwotCWlmIChJU19FUlIoY2xudC0+Y2xfdmZzbW50KSkKLQkJcmV0dXJuIFBUUl9FUlIoY2xudC0+Y2xfdmZzbW50KTsKKwlwYXRoLm1udCA9IHJwY19nZXRfbW91bnQoKTsKKwlpZiAoSVNfRVJSKHBhdGgubW50KSkKKwkJcmV0dXJuIFBUUl9FUlIocGF0aC5tbnQpOworCWVycm9yID0gdmZzX3BhdGhfbG9va3VwKHBhdGgubW50LT5tbnRfcm9vdCwgcGF0aC5tbnQsIGRpcl9uYW1lLCAwLCAmbmQpOworCWlmIChlcnJvcikKKwkJZ290byBlcnI7CiAKIAlmb3IgKDs7KSB7Ci0JCXNucHJpbnRmKGNsbnQtPmNsX3BhdGhuYW1lLCBzaXplb2YoY2xudC0+Y2xfcGF0aG5hbWUpLAotCQkJCSIlcy9jbG50JXgiLCBkaXJfbmFtZSwKLQkJCQkodW5zaWduZWQgaW50KWNsbnRpZCsrKTsKLQkJY2xudC0+Y2xfcGF0aG5hbWVbc2l6ZW9mKGNsbnQtPmNsX3BhdGhuYW1lKSAtIDFdID0gJ1wwJzsKLQkJY2xudC0+Y2xfZGVudHJ5ID0gcnBjX21rZGlyKGNsbnQtPmNsX3BhdGhuYW1lLCBjbG50KTsKLQkJaWYgKCFJU19FUlIoY2xudC0+Y2xfZGVudHJ5KSkKLQkJCXJldHVybiAwOwotCQllcnJvciA9IFBUUl9FUlIoY2xudC0+Y2xfZGVudHJ5KTsKKwkJcS5sZW4gPSBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJjbG50JXgiLCAodW5zaWduZWQgaW50KWNsbnRpZCsrKTsKKwkJbmFtZVtzaXplb2YobmFtZSkgLSAxXSA9ICdcMCc7CisJCXEuaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKHEubmFtZSwgcS5sZW4pOworCQlwYXRoLmRlbnRyeSA9IHJwY19jcmVhdGVfY2xpZW50X2RpcihuZC5wYXRoLmRlbnRyeSwgJnEsIGNsbnQpOworCQlpZiAoIUlTX0VSUihwYXRoLmRlbnRyeSkpCisJCQlicmVhazsKKwkJZXJyb3IgPSBQVFJfRVJSKHBhdGguZGVudHJ5KTsKIAkJaWYgKGVycm9yICE9IC1FRVhJU1QpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIlJQQzogQ291bGRuJ3QgY3JlYXRlIHBpcGVmcyBlbnRyeSAlcywgZXJyb3IgJWRcbiIsCi0JCQkJCWNsbnQtPmNsX3BhdGhuYW1lLCBlcnJvcik7Ci0JCQlycGNfcHV0X21vdW50KCk7Ci0JCQlyZXR1cm4gZXJyb3I7CisJCQlwcmludGsoS0VSTl9JTkZPICJSUEM6IENvdWxkbid0IGNyZWF0ZSBwaXBlZnMgZW50cnkiCisJCQkJCSIgJXMvJXMsIGVycm9yICVkXG4iLAorCQkJCQlkaXJfbmFtZSwgbmFtZSwgZXJyb3IpOworCQkJZ290byBlcnJfcGF0aF9wdXQ7CiAJCX0KIAl9CisJcGF0aF9wdXQoJm5kLnBhdGgpOworCWNsbnQtPmNsX3BhdGggPSBwYXRoOworCXJldHVybiAwOworZXJyX3BhdGhfcHV0OgorCXBhdGhfcHV0KCZuZC5wYXRoKTsKK2VycjoKKwlycGNfcHV0X21vdW50KCk7CisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgc3RydWN0IHJwY19jbG50ICogcnBjX25ld19jbGllbnQoY29uc3Qgc3RydWN0IHJwY19jcmVhdGVfYXJncyAqYXJncywgc3RydWN0IHJwY194cHJ0ICp4cHJ0KQpAQCAtMjMxLDggKzI0OSw4IEBACiAJcmV0dXJuIGNsbnQ7CiAKIG91dF9ub19hdXRoOgotCWlmICghSVNfRVJSKGNsbnQtPmNsX2RlbnRyeSkpIHsKLQkJcnBjX3JtZGlyKGNsbnQtPmNsX2RlbnRyeSk7CisJaWYgKCFJU19FUlIoY2xudC0+Y2xfcGF0aC5kZW50cnkpKSB7CisJCXJwY19yZW1vdmVfY2xpZW50X2RpcihjbG50LT5jbF9wYXRoLmRlbnRyeSk7CiAJCXJwY19wdXRfbW91bnQoKTsKIAl9CiBvdXRfbm9fcGF0aDoKQEAgLTQyMyw4ICs0NDEsOCBAQAogCiAJZHByaW50aygiUlBDOiAgICAgICBkZXN0cm95aW5nICVzIGNsaWVudCBmb3IgJXNcbiIsCiAJCQljbG50LT5jbF9wcm90bmFtZSwgY2xudC0+Y2xfc2VydmVyKTsKLQlpZiAoIUlTX0VSUihjbG50LT5jbF9kZW50cnkpKSB7Ci0JCXJwY19ybWRpcihjbG50LT5jbF9kZW50cnkpOworCWlmICghSVNfRVJSKGNsbnQtPmNsX3BhdGguZGVudHJ5KSkgeworCQlycGNfcmVtb3ZlX2NsaWVudF9kaXIoY2xudC0+Y2xfcGF0aC5kZW50cnkpOwogCQlycGNfcHV0X21vdW50KCk7CiAJfQogCWlmIChjbG50LT5jbF9wYXJlbnQgIT0gY2xudCkgewpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jIGIvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCmluZGV4IDljZWQwNjIuLjdmNjc2YmQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvcnBjX3BpcGUuYworKysgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9ycGNfcGlwZV9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jYWNoZS5oPgogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpycGNfbW91bnQgX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQgcnBjX21vdW50X2NvdW50OwpAQCAtMTI1LDcgKzEyNiw3IEBACiBycGNfY2xvc2VfcGlwZXMoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgcnBjX2lub2RlICpycGNpID0gUlBDX0koaW5vZGUpOwotCXN0cnVjdCBycGNfcGlwZV9vcHMgKm9wczsKKwljb25zdCBzdHJ1Y3QgcnBjX3BpcGVfb3BzICpvcHM7CiAJaW50IG5lZWRfcmVsZWFzZTsKIAogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKQEAgLTM5OCw2NiArMzk5LDEyIEBACiAKIAogLyoKLSAqIFdlIGhhdmUgYSBzaW5nbGUgZGlyZWN0b3J5IHdpdGggMSBub2RlIGluIGl0LgotICovCi1lbnVtIHsKLQlSUENBVVRIX1Jvb3QgPSAxLAotCVJQQ0FVVEhfbG9ja2QsCi0JUlBDQVVUSF9tb3VudCwKLQlSUENBVVRIX25mcywKLQlSUENBVVRIX3BvcnRtYXAsCi0JUlBDQVVUSF9zdGF0ZCwKLQlSUENBVVRIX25mc2Q0X2NiLAotCVJQQ0FVVEhfUm9vdEVPRgotfTsKLQotLyoKICAqIERlc2NyaXB0aW9uIG9mIGZzIGNvbnRlbnRzLgogICovCiBzdHJ1Y3QgcnBjX2ZpbGVsaXN0IHsKLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqaV9mb3A7Ci0JaW50IG1vZGU7Ci19OwotCi1zdGF0aWMgc3RydWN0IHJwY19maWxlbGlzdCBmaWxlc1tdID0gewotCVtSUENBVVRIX2xvY2tkXSA9IHsKLQkJLm5hbWUgPSAibG9ja2QiLAotCQkubW9kZSA9IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywKLQl9LAotCVtSUENBVVRIX21vdW50XSA9IHsKLQkJLm5hbWUgPSAibW91bnQiLAotCQkubW9kZSA9IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywKLQl9LAotCVtSUENBVVRIX25mc10gPSB7Ci0JCS5uYW1lID0gIm5mcyIsCi0JCS5tb2RlID0gU19JRkRJUiB8IFNfSVJVR08gfCBTX0lYVUdPLAotCX0sCi0JW1JQQ0FVVEhfcG9ydG1hcF0gPSB7Ci0JCS5uYW1lID0gInBvcnRtYXAiLAotCQkubW9kZSA9IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywKLQl9LAotCVtSUENBVVRIX3N0YXRkXSA9IHsKLQkJLm5hbWUgPSAic3RhdGQiLAotCQkubW9kZSA9IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywKLQl9LAotCVtSUENBVVRIX25mc2Q0X2NiXSA9IHsKLQkJLm5hbWUgPSAibmZzZDRfY2IiLAotCQkubW9kZSA9IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywKLQl9LAotfTsKLQotZW51bSB7Ci0JUlBDQVVUSF9pbmZvID0gMiwKLQlSUENBVVRIX0VPRgotfTsKLQotc3RhdGljIHN0cnVjdCBycGNfZmlsZWxpc3QgYXV0aGZpbGVzW10gPSB7Ci0JW1JQQ0FVVEhfaW5mb10gPSB7Ci0JCS5uYW1lID0gImluZm8iLAotCQkuaV9mb3AgPSAmcnBjX2luZm9fb3BlcmF0aW9ucywKLQkJLm1vZGUgPSBTX0lGUkVHIHwgU19JUlVTUiwKLQl9LAorCXVtb2RlX3QgbW9kZTsKIH07CiAKIHN0cnVjdCB2ZnNtb3VudCAqcnBjX2dldF9tb3VudCh2b2lkKQpAQCAtNDY5LDExICs0MTYsMTMgQEAKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAlyZXR1cm4gcnBjX21vdW50OwogfQorRVhQT1JUX1NZTUJPTF9HUEwocnBjX2dldF9tb3VudCk7CiAKIHZvaWQgcnBjX3B1dF9tb3VudCh2b2lkKQogewogCXNpbXBsZV9yZWxlYXNlX2ZzKCZycGNfbW91bnQsICZycGNfbW91bnRfY291bnQpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocnBjX3B1dF9tb3VudCk7CiAKIHN0YXRpYyBpbnQgcnBjX2RlbGV0ZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewpAQCAtNDg0LDM5ICs0MzMsOCBAQAogCS5kX2RlbGV0ZSA9IHJwY19kZWxldGVfZGVudHJ5LAogfTsKIAotc3RhdGljIGludAotcnBjX2xvb2t1cF9wYXJlbnQoY2hhciAqcGF0aCwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCi17Ci0Jc3RydWN0IHZmc21vdW50ICptbnQ7Ci0KLQlpZiAocGF0aFswXSA9PSAnXDAnKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCW1udCA9IHJwY19nZXRfbW91bnQoKTsKLQlpZiAoSVNfRVJSKG1udCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzIGZhaWxlZCB0byBtb3VudCAiCi0JCQkgICAgICAgInBzZXVkb2ZpbGVzeXN0ZW0gXG4iLCBfX0ZJTEVfXywgX19mdW5jX18pOwotCQlyZXR1cm4gUFRSX0VSUihtbnQpOwotCX0KLQotCWlmICh2ZnNfcGF0aF9sb29rdXAobW50LT5tbnRfcm9vdCwgbW50LCBwYXRoLCBMT09LVVBfUEFSRU5ULCBuZCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzIGZhaWxlZCB0byBmaW5kIHBhdGggJXNcbiIsCi0JCQkJX19GSUxFX18sIF9fZnVuY19fLCBwYXRoKTsKLQkJcnBjX3B1dF9tb3VudCgpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ycGNfcmVsZWFzZV9wYXRoKHN0cnVjdCBuYW1laWRhdGEgKm5kKQotewotCXBhdGhfcHV0KCZuZC0+cGF0aCk7Ci0JcnBjX3B1dF9tb3VudCgpOwotfQotCiBzdGF0aWMgc3RydWN0IGlub2RlICoKLXJwY19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vZGUpCitycGNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKHNiKTsKIAlpZiAoIWlub2RlKQpAQCAtNTM0LDIxMiArNDUyLDI3NCBAQAogCXJldHVybiBpbm9kZTsKIH0KIAotLyoKLSAqIEZJWE1FOiBUaGlzIHByb2JhYmx5IGhhcyByYWNlcy4KLSAqLwotc3RhdGljIHZvaWQgcnBjX2RlcG9wdWxhdGUoc3RydWN0IGRlbnRyeSAqcGFyZW50LAotCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlb2YpCi17Ci0Jc3RydWN0IGlub2RlICpkaXIgPSBwYXJlbnQtPmRfaW5vZGU7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbmV4dDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksICpkdmVjWzEwXTsKLQlpbnQgbiA9IDA7Ci0KLQltdXRleF9sb2NrX25lc3RlZCgmZGlyLT5pX211dGV4LCBJX01VVEVYX0NISUxEKTsKLXJlcGVhdDoKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCAmcGFyZW50LT5kX3N1YmRpcnMpIHsKLQkJZGVudHJ5ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBkZW50cnksIGRfdS5kX2NoaWxkKTsKLQkJaWYgKCFkZW50cnktPmRfaW5vZGUgfHwKLQkJCQlkZW50cnktPmRfaW5vZGUtPmlfaW5vIDwgc3RhcnQgfHwKLQkJCQlkZW50cnktPmRfaW5vZGUtPmlfaW5vID49IGVvZikKLQkJCWNvbnRpbnVlOwotCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJaWYgKCFkX3VuaGFzaGVkKGRlbnRyeSkpIHsKLQkJCWRnZXRfbG9ja2VkKGRlbnRyeSk7Ci0JCQlfX2RfZHJvcChkZW50cnkpOwotCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJCWR2ZWNbbisrXSA9IGRlbnRyeTsKLQkJCWlmIChuID09IEFSUkFZX1NJWkUoZHZlYykpCi0JCQkJYnJlYWs7Ci0JCX0gZWxzZQotCQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQlpZiAobikgewotCQlkbyB7Ci0JCQlkZW50cnkgPSBkdmVjWy0tbl07Ci0JCQlpZiAoU19JU1JFRyhkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCi0JCQkJc2ltcGxlX3VubGluayhkaXIsIGRlbnRyeSk7Ci0JCQllbHNlIGlmIChTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKLQkJCQlzaW1wbGVfcm1kaXIoZGlyLCBkZW50cnkpOwotCQkJZF9kZWxldGUoZGVudHJ5KTsKLQkJCWRwdXQoZGVudHJ5KTsKLQkJfSB3aGlsZSAobik7Ci0JCWdvdG8gcmVwZWF0OwotCX0KLQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXJwY19wb3B1bGF0ZShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCi0JCXN0cnVjdCBycGNfZmlsZWxpc3QgKmZpbGVzLAotCQlpbnQgc3RhcnQsIGludCBlb2YpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSwgKmRpciA9IHBhcmVudC0+ZF9pbm9kZTsKLQl2b2lkICpwcml2YXRlID0gUlBDX0koZGlyKS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Ci0JaW50IG1vZGUsIGk7Ci0KLQltdXRleF9sb2NrKCZkaXItPmlfbXV0ZXgpOwotCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW9mOyBpKyspIHsKLQkJZGVudHJ5ID0gZF9hbGxvY19uYW1lKHBhcmVudCwgZmlsZXNbaV0ubmFtZSk7Ci0JCWlmICghZGVudHJ5KQotCQkJZ290byBvdXRfYmFkOwotCQlkZW50cnktPmRfb3AgPSAmcnBjX2RlbnRyeV9vcGVyYXRpb25zOwotCQltb2RlID0gZmlsZXNbaV0ubW9kZTsKLQkJaW5vZGUgPSBycGNfZ2V0X2lub2RlKGRpci0+aV9zYiwgbW9kZSk7Ci0JCWlmICghaW5vZGUpIHsKLQkJCWRwdXQoZGVudHJ5KTsKLQkJCWdvdG8gb3V0X2JhZDsKLQkJfQotCQlpbm9kZS0+aV9pbm8gPSBpOwotCQlpZiAoZmlsZXNbaV0uaV9mb3ApCi0JCQlpbm9kZS0+aV9mb3AgPSBmaWxlc1tpXS5pX2ZvcDsKLQkJaWYgKHByaXZhdGUpCi0JCQlycGNfaW5vZGVfc2V0b3duZXIoaW5vZGUsIHByaXZhdGUpOwotCQlpZiAoU19JU0RJUihtb2RlKSkKLQkJCWluY19ubGluayhkaXIpOwotCQlkX2FkZChkZW50cnksIGlub2RlKTsKLQkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwotCXJldHVybiAwOwotb3V0X2JhZDoKLQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzIGZhaWxlZCB0byBwb3B1bGF0ZSBkaXJlY3RvcnkgJXNcbiIsCi0JCQlfX0ZJTEVfXywgX19mdW5jX18sIHBhcmVudC0+ZF9uYW1lLm5hbWUpOwotCXJldHVybiAtRU5PTUVNOwotfQotCi1zdGF0aWMgaW50Ci1fX3JwY19ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIGludCBfX3JwY19jcmVhdGVfY29tbW9uKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkgICAgICAgdW1vZGVfdCBtb2RlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmlfZm9wLAorCQkJICAgICAgIHZvaWQgKnByaXZhdGUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAotCWlub2RlID0gcnBjX2dldF9pbm9kZShkaXItPmlfc2IsIFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTyk7CisJQlVHX09OKCFkX3VuaGFzaGVkKGRlbnRyeSkpOworCWlub2RlID0gcnBjX2dldF9pbm9kZShkaXItPmlfc2IsIG1vZGUpOwogCWlmICghaW5vZGUpCiAJCWdvdG8gb3V0X2VycjsKIAlpbm9kZS0+aV9pbm8gPSBpdW5pcXVlKGRpci0+aV9zYiwgMTAwKTsKLQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCWluY19ubGluayhkaXIpOwotCWZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTsKKwlpZiAoaV9mb3ApCisJCWlub2RlLT5pX2ZvcCA9IGlfZm9wOworCWlmIChwcml2YXRlKQorCQlycGNfaW5vZGVfc2V0b3duZXIoaW5vZGUsIHByaXZhdGUpOworCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCXJldHVybiAwOwogb3V0X2VycjoKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXMgZmFpbGVkIHRvIGFsbG9jYXRlIGlub2RlIGZvciBkZW50cnkgJXNcbiIsCiAJCQlfX0ZJTEVfXywgX19mdW5jX18sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCWRwdXQoZGVudHJ5KTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIGludAotX19ycGNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3N0YXRpYyBpbnQgX19ycGNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQl1bW9kZV90IG1vZGUsCisJCQljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICppX2ZvcCwKKwkJCXZvaWQgKnByaXZhdGUpCiB7Ci0JaW50IGVycm9yOwotCWVycm9yID0gc2ltcGxlX3JtZGlyKGRpciwgZGVudHJ5KTsKLQlpZiAoIWVycm9yKQotCQlkX2RlbGV0ZShkZW50cnkpOwotCXJldHVybiBlcnJvcjsKKwlpbnQgZXJyOworCisJZXJyID0gX19ycGNfY3JlYXRlX2NvbW1vbihkaXIsIGRlbnRyeSwgU19JRlJFRyB8IG1vZGUsIGlfZm9wLCBwcml2YXRlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICoKLXJwY19sb29rdXBfY3JlYXRlKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgaW50IGV4Y2x1c2l2ZSkKK3N0YXRpYyBpbnQgX19ycGNfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJICAgICAgIHVtb2RlX3QgbW9kZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmlfZm9wLAorCQkgICAgICAgdm9pZCAqcHJpdmF0ZSkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gX19ycGNfY3JlYXRlX2NvbW1vbihkaXIsIGRlbnRyeSwgU19JRkRJUiB8IG1vZGUsIGlfZm9wLCBwcml2YXRlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWluY19ubGluayhkaXIpOworCWZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX3JwY19ta3BpcGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCXVtb2RlX3QgbW9kZSwKKwkJCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmlfZm9wLAorCQkJdm9pZCAqcHJpdmF0ZSwKKwkJCWNvbnN0IHN0cnVjdCBycGNfcGlwZV9vcHMgKm9wcywKKwkJCWludCBmbGFncykKK3sKKwlzdHJ1Y3QgcnBjX2lub2RlICpycGNpOworCWludCBlcnI7CisKKwllcnIgPSBfX3JwY19jcmVhdGVfY29tbW9uKGRpciwgZGVudHJ5LCBTX0lGSUZPIHwgbW9kZSwgaV9mb3AsIHByaXZhdGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcnBjaSA9IFJQQ19JKGRlbnRyeS0+ZF9pbm9kZSk7CisJcnBjaS0+bmtlcm5fcmVhZHdyaXRlcnMgPSAxOworCXJwY2ktPnByaXZhdGUgPSBwcml2YXRlOworCXJwY2ktPmZsYWdzID0gZmxhZ3M7CisJcnBjaS0+b3BzID0gb3BzOworCWZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19ycGNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgcmV0OworCisJZGdldChkZW50cnkpOworCXJldCA9IHNpbXBsZV9ybWRpcihkaXIsIGRlbnRyeSk7CisJZF9kZWxldGUoZGVudHJ5KTsKKwlkcHV0KGRlbnRyeSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX3JwY191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgcmV0OworCisJZGdldChkZW50cnkpOworCXJldCA9IHNpbXBsZV91bmxpbmsoZGlyLCBkZW50cnkpOworCWRfZGVsZXRlKGRlbnRyeSk7CisJZHB1dChkZW50cnkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19ycGNfcm1waXBlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgcnBjX2lub2RlICpycGNpID0gUlBDX0koaW5vZGUpOworCisJcnBjaS0+bmtlcm5fcmVhZHdyaXRlcnMtLTsKKwlpZiAocnBjaS0+bmtlcm5fcmVhZHdyaXRlcnMgIT0gMCkKKwkJcmV0dXJuIDA7CisJcnBjX2Nsb3NlX3BpcGVzKGlub2RlKTsKKwlyZXR1cm4gX19ycGNfdW5saW5rKGRpciwgZGVudHJ5KTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fcnBjX2xvb2t1cF9jcmVhdGUoc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQkJCQkgIHN0cnVjdCBxc3RyICpuYW1lKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKworCWRlbnRyeSA9IGRfbG9va3VwKHBhcmVudCwgbmFtZSk7CisJaWYgKCFkZW50cnkpIHsKKwkJZGVudHJ5ID0gZF9hbGxvYyhwYXJlbnQsIG5hbWUpOworCQlpZiAoIWRlbnRyeSkgeworCQkJZGVudHJ5ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCX0KKwlpZiAoIWRlbnRyeS0+ZF9pbm9kZSkKKwkJZGVudHJ5LT5kX29wID0gJnJwY19kZW50cnlfb3BlcmF0aW9uczsKK291dF9lcnI6CisJcmV0dXJuIGRlbnRyeTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fcnBjX2xvb2t1cF9jcmVhdGVfZXhjbHVzaXZlKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCQkJICBzdHJ1Y3QgcXN0ciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisKKwlkZW50cnkgPSBfX3JwY19sb29rdXBfY3JlYXRlKHBhcmVudCwgbmFtZSk7CisJaWYgKGRlbnRyeS0+ZF9pbm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gZGVudHJ5OworCWRwdXQoZGVudHJ5KTsKKwlyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTsKK30KKworLyoKKyAqIEZJWE1FOiBUaGlzIHByb2JhYmx5IGhhcyByYWNlcy4KKyAqLworc3RhdGljIHZvaWQgX19ycGNfZGVwb3B1bGF0ZShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBycGNfZmlsZWxpc3QgKmZpbGVzLAorCQkJICAgICBpbnQgc3RhcnQsIGludCBlb2YpCiB7CiAJc3RydWN0IGlub2RlICpkaXIgPSBwYXJlbnQtPmRfaW5vZGU7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCXN0cnVjdCBxc3RyIG5hbWU7CisJaW50IGk7CisKKwlmb3IgKGkgPSBzdGFydDsgaSA8IGVvZjsgaSsrKSB7CisJCW5hbWUubmFtZSA9IGZpbGVzW2ldLm5hbWU7CisJCW5hbWUubGVuID0gc3RybGVuKGZpbGVzW2ldLm5hbWUpOworCQluYW1lLmhhc2ggPSBmdWxsX25hbWVfaGFzaChuYW1lLm5hbWUsIG5hbWUubGVuKTsKKwkJZGVudHJ5ID0gZF9sb29rdXAocGFyZW50LCAmbmFtZSk7CisKKwkJaWYgKGRlbnRyeSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmIChkZW50cnktPmRfaW5vZGUgPT0gTlVMTCkKKwkJCWdvdG8gbmV4dDsKKwkJc3dpdGNoIChkZW50cnktPmRfaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkgeworCQkJZGVmYXVsdDoKKwkJCQlCVUcoKTsKKwkJCWNhc2UgU19JRlJFRzoKKwkJCQlfX3JwY191bmxpbmsoZGlyLCBkZW50cnkpOworCQkJCWJyZWFrOworCQkJY2FzZSBTX0lGRElSOgorCQkJCV9fcnBjX3JtZGlyKGRpciwgZGVudHJ5KTsKKwkJfQorbmV4dDoKKwkJZHB1dChkZW50cnkpOworCX0KK30KKworc3RhdGljIHZvaWQgcnBjX2RlcG9wdWxhdGUoc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQkJICAgY29uc3Qgc3RydWN0IHJwY19maWxlbGlzdCAqZmlsZXMsCisJCQkgICBpbnQgc3RhcnQsIGludCBlb2YpCit7CisJc3RydWN0IGlub2RlICpkaXIgPSBwYXJlbnQtPmRfaW5vZGU7CisKKwltdXRleF9sb2NrX25lc3RlZCgmZGlyLT5pX211dGV4LCBJX01VVEVYX0NISUxEKTsKKwlfX3JwY19kZXBvcHVsYXRlKHBhcmVudCwgZmlsZXMsIHN0YXJ0LCBlb2YpOworCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKK30KKworc3RhdGljIGludCBycGNfcG9wdWxhdGUoc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQkJY29uc3Qgc3RydWN0IHJwY19maWxlbGlzdCAqZmlsZXMsCisJCQlpbnQgc3RhcnQsIGludCBlb2YsCisJCQl2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCBpbm9kZSAqZGlyID0gcGFyZW50LT5kX2lub2RlOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlpbnQgaSwgZXJyOworCisJbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsKKwlmb3IgKGkgPSBzdGFydDsgaSA8IGVvZjsgaSsrKSB7CisJCXN0cnVjdCBxc3RyIHE7CisKKwkJcS5uYW1lID0gZmlsZXNbaV0ubmFtZTsKKwkJcS5sZW4gPSBzdHJsZW4oZmlsZXNbaV0ubmFtZSk7CisJCXEuaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKHEubmFtZSwgcS5sZW4pOworCQlkZW50cnkgPSBfX3JwY19sb29rdXBfY3JlYXRlX2V4Y2x1c2l2ZShwYXJlbnQsICZxKTsKKwkJZXJyID0gUFRSX0VSUihkZW50cnkpOworCQlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCQlnb3RvIG91dF9iYWQ7CisJCXN3aXRjaCAoZmlsZXNbaV0ubW9kZSAmIFNfSUZNVCkgeworCQkJZGVmYXVsdDoKKwkJCQlCVUcoKTsKKwkJCWNhc2UgU19JRlJFRzoKKwkJCQllcnIgPSBfX3JwY19jcmVhdGUoZGlyLCBkZW50cnksCisJCQkJCQlmaWxlc1tpXS5tb2RlLAorCQkJCQkJZmlsZXNbaV0uaV9mb3AsCisJCQkJCQlwcml2YXRlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19JRkRJUjoKKwkJCQllcnIgPSBfX3JwY19ta2RpcihkaXIsIGRlbnRyeSwKKwkJCQkJCWZpbGVzW2ldLm1vZGUsCisJCQkJCQlOVUxMLAorCQkJCQkJcHJpdmF0ZSk7CisJCX0KKwkJaWYgKGVyciAhPSAwKQorCQkJZ290byBvdXRfYmFkOworCX0KKwltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CisJcmV0dXJuIDA7CitvdXRfYmFkOgorCV9fcnBjX2RlcG9wdWxhdGUocGFyZW50LCBmaWxlcywgc3RhcnQsIGVvZik7CisJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcyBmYWlsZWQgdG8gcG9wdWxhdGUgZGlyZWN0b3J5ICVzXG4iLAorCQkJX19GSUxFX18sIF9fZnVuY19fLCBwYXJlbnQtPmRfbmFtZS5uYW1lKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqcnBjX21rZGlyX3BvcHVsYXRlKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJc3RydWN0IHFzdHIgKm5hbWUsIHVtb2RlX3QgbW9kZSwgdm9pZCAqcHJpdmF0ZSwKKwkJaW50ICgqcG9wdWxhdGUpKHN0cnVjdCBkZW50cnkgKiwgdm9pZCAqKSwgdm9pZCAqYXJnc19wb3B1bGF0ZSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJc3RydWN0IGlub2RlICpkaXIgPSBwYXJlbnQtPmRfaW5vZGU7CisJaW50IGVycm9yOwogCiAJbXV0ZXhfbG9ja19uZXN0ZWQoJmRpci0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwotCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHBhcmVudCwgbGVuKTsKKwlkZW50cnkgPSBfX3JwY19sb29rdXBfY3JlYXRlX2V4Y2x1c2l2ZShwYXJlbnQsIG5hbWUpOwogCWlmIChJU19FUlIoZGVudHJ5KSkKKwkJZ290byBvdXQ7CisJZXJyb3IgPSBfX3JwY19ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSwgTlVMTCwgcHJpdmF0ZSk7CisJaWYgKGVycm9yICE9IDApCiAJCWdvdG8gb3V0X2VycjsKLQlpZiAoIWRlbnRyeS0+ZF9pbm9kZSkKLQkJZGVudHJ5LT5kX29wID0gJnJwY19kZW50cnlfb3BlcmF0aW9uczsKLQllbHNlIGlmIChleGNsdXNpdmUpIHsKLQkJZHB1dChkZW50cnkpOwotCQlkZW50cnkgPSBFUlJfUFRSKC1FRVhJU1QpOwotCQlnb3RvIG91dF9lcnI7CisJaWYgKHBvcHVsYXRlICE9IE5VTEwpIHsKKwkJZXJyb3IgPSBwb3B1bGF0ZShkZW50cnksIGFyZ3NfcG9wdWxhdGUpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGVycl9ybWRpcjsKIAl9Ci0JcmV0dXJuIGRlbnRyeTsKLW91dF9lcnI6Ci0JbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwotCXJldHVybiBkZW50cnk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICoKLXJwY19sb29rdXBfbmVnYXRpdmUoY2hhciAqcGF0aCwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCWludCBlcnJvcjsKLQotCWlmICgoZXJyb3IgPSBycGNfbG9va3VwX3BhcmVudChwYXRoLCBuZCkpICE9IDApCi0JCXJldHVybiBFUlJfUFRSKGVycm9yKTsKLQlkZW50cnkgPSBycGNfbG9va3VwX2NyZWF0ZShuZC0+cGF0aC5kZW50cnksIG5kLT5sYXN0Lm5hbWUsIG5kLT5sYXN0LmxlbiwKLQkJCQkgICAxKTsKLQlpZiAoSVNfRVJSKGRlbnRyeSkpCi0JCXJwY19yZWxlYXNlX3BhdGgobmQpOwotCXJldHVybiBkZW50cnk7Ci19Ci0KLS8qKgotICogcnBjX21rZGlyIC0gQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBpbiBycGNfcGlwZWZzCi0gKiBAcGF0aDogcGF0aCBmcm9tIHRoZSBycGNfcGlwZWZzIHJvb3QgdG8gdGhlIG5ldyBkaXJlY3RvcnkKLSAqIEBycGNfY2xpZW50OiBycGMgY2xpZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgZGlyZWN0b3J5Ci0gKgotICogVGhpcyBjcmVhdGVzIGEgZGlyZWN0b3J5IGF0IHRoZSBnaXZlbiBAcGF0aCBhc3NvY2lhdGVkIHdpdGgKLSAqIEBycGNfY2xudCwgd2hpY2ggd2lsbCBjb250YWluIGEgZmlsZSBuYW1lZCAiaW5mbyIgd2l0aCBzb21lIGJhc2ljCi0gKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50LCB0b2dldGhlciB3aXRoIGFueSAicGlwZXMiIHRoYXQgbWF5Ci0gKiBsYXRlciBiZSBjcmVhdGVkIHVzaW5nIHJwY19ta3BpcGUoKS4KLSAqLwotc3RydWN0IGRlbnRyeSAqCi1ycGNfbWtkaXIoY2hhciAqcGF0aCwgc3RydWN0IHJwY19jbG50ICpycGNfY2xpZW50KQotewotCXN0cnVjdCBuYW1laWRhdGEgbmQ7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqZGlyOwotCWludCBlcnJvcjsKLQotCWRlbnRyeSA9IHJwY19sb29rdXBfbmVnYXRpdmUocGF0aCwgJm5kKTsKLQlpZiAoSVNfRVJSKGRlbnRyeSkpCi0JCXJldHVybiBkZW50cnk7Ci0JZGlyID0gbmQucGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JaWYgKChlcnJvciA9IF9fcnBjX21rZGlyKGRpciwgZGVudHJ5KSkgIT0gMCkKLQkJZ290byBlcnJfZHB1dDsKLQlSUENfSShkZW50cnktPmRfaW5vZGUpLT5wcml2YXRlID0gcnBjX2NsaWVudDsKLQllcnJvciA9IHJwY19wb3B1bGF0ZShkZW50cnksIGF1dGhmaWxlcywKLQkJCVJQQ0FVVEhfaW5mbywgUlBDQVVUSF9FT0YpOwotCWlmIChlcnJvcikKLQkJZ290byBlcnJfZGVwb3B1bGF0ZTsKLQlkZ2V0KGRlbnRyeSk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwotCXJwY19yZWxlYXNlX3BhdGgoJm5kKTsKIAlyZXR1cm4gZGVudHJ5OwotZXJyX2RlcG9wdWxhdGU6Ci0JcnBjX2RlcG9wdWxhdGUoZGVudHJ5LCBSUENBVVRIX2luZm8sIFJQQ0FVVEhfRU9GKTsKK2Vycl9ybWRpcjoKIAlfX3JwY19ybWRpcihkaXIsIGRlbnRyeSk7Ci1lcnJfZHB1dDoKLQlkcHV0KGRlbnRyeSk7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzKCkgZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMgKGVycm5vID0gJWQpXG4iLAotCQkJX19GSUxFX18sIF9fZnVuY19fLCBwYXRoLCBlcnJvcik7CitvdXRfZXJyOgogCWRlbnRyeSA9IEVSUl9QVFIoZXJyb3IpOwogCWdvdG8gb3V0OwogfQogCi0vKioKLSAqIHJwY19ybWRpciAtIFJlbW92ZSBhIGRpcmVjdG9yeSBjcmVhdGVkIHdpdGggcnBjX21rZGlyKCkKLSAqIEBkZW50cnk6IGRpcmVjdG9yeSB0byByZW1vdmUKLSAqLwotaW50Ci1ycGNfcm1kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIGludCBycGNfcm1kaXJfZGVwb3B1bGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCXZvaWQgKCpkZXBvcHVsYXRlKShzdHJ1Y3QgZGVudHJ5ICopKQogewogCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKIAlzdHJ1Y3QgaW5vZGUgKmRpcjsKQEAgLTc0OCw5ICs3MjgsOSBAQAogCXBhcmVudCA9IGRnZXRfcGFyZW50KGRlbnRyeSk7CiAJZGlyID0gcGFyZW50LT5kX2lub2RlOwogCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKLQlycGNfZGVwb3B1bGF0ZShkZW50cnksIFJQQ0FVVEhfaW5mbywgUlBDQVVUSF9FT0YpOworCWlmIChkZXBvcHVsYXRlICE9IE5VTEwpCisJCWRlcG9wdWxhdGUoZGVudHJ5KTsKIAllcnJvciA9IF9fcnBjX3JtZGlyKGRpciwgZGVudHJ5KTsKLQlkcHV0KGRlbnRyeSk7CiAJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwogCWRwdXQocGFyZW50KTsKIAlyZXR1cm4gZXJyb3I7CkBAIC03NzYsNTAgKzc1Niw1NCBAQAogICogVGhlIEBwcml2YXRlIGFyZ3VtZW50IHBhc3NlZCBoZXJlIHdpbGwgYmUgYXZhaWxhYmxlIHRvIGFsbCB0aGVzZSBtZXRob2RzCiAgKiBmcm9tIHRoZSBmaWxlIHBvaW50ZXIsIHZpYSBSUENfSShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSktPnByaXZhdGUuCiAgKi8KLXN0cnVjdCBkZW50cnkgKgotcnBjX21rcGlwZShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnByaXZhdGUsIHN0cnVjdCBycGNfcGlwZV9vcHMgKm9wcywgaW50IGZsYWdzKQorc3RydWN0IGRlbnRyeSAqcnBjX21rcGlwZShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgIHZvaWQgKnByaXZhdGUsIGNvbnN0IHN0cnVjdCBycGNfcGlwZV9vcHMgKm9wcywKKwkJCSAgaW50IGZsYWdzKQogewogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKLQlzdHJ1Y3QgaW5vZGUgKmRpciwgKmlub2RlOwotCXN0cnVjdCBycGNfaW5vZGUgKnJwY2k7CisJc3RydWN0IGlub2RlICpkaXIgPSBwYXJlbnQtPmRfaW5vZGU7CisJdW1vZGVfdCB1bW9kZSA9IFNfSUZJRk8gfCBTX0lSVVNSIHwgU19JV1VTUjsKKwlzdHJ1Y3QgcXN0ciBxOworCWludCBlcnI7CiAKLQlkZW50cnkgPSBycGNfbG9va3VwX2NyZWF0ZShwYXJlbnQsIG5hbWUsIHN0cmxlbihuYW1lKSwgMCk7CisJaWYgKG9wcy0+dXBjYWxsID09IE5VTEwpCisJCXVtb2RlICY9IH5TX0lSVUdPOworCWlmIChvcHMtPmRvd25jYWxsID09IE5VTEwpCisJCXVtb2RlICY9IH5TX0lXVUdPOworCisJcS5uYW1lID0gbmFtZTsKKwlxLmxlbiA9IHN0cmxlbihuYW1lKTsKKwlxLmhhc2ggPSBmdWxsX25hbWVfaGFzaChxLm5hbWUsIHEubGVuKSwKKworCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKKwlkZW50cnkgPSBfX3JwY19sb29rdXBfY3JlYXRlKHBhcmVudCwgJnEpOwogCWlmIChJU19FUlIoZGVudHJ5KSkKLQkJcmV0dXJuIGRlbnRyeTsKLQlkaXIgPSBwYXJlbnQtPmRfaW5vZGU7CisJCWdvdG8gb3V0OwogCWlmIChkZW50cnktPmRfaW5vZGUpIHsKLQkJcnBjaSA9IFJQQ19JKGRlbnRyeS0+ZF9pbm9kZSk7CisJCXN0cnVjdCBycGNfaW5vZGUgKnJwY2kgPSBSUENfSShkZW50cnktPmRfaW5vZGUpOwogCQlpZiAocnBjaS0+cHJpdmF0ZSAhPSBwcml2YXRlIHx8CiAJCQkJcnBjaS0+b3BzICE9IG9wcyB8fAogCQkJCXJwY2ktPmZsYWdzICE9IGZsYWdzKSB7CiAJCQlkcHV0IChkZW50cnkpOwotCQkJZGVudHJ5ID0gRVJSX1BUUigtRUJVU1kpOworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBvdXRfZXJyOwogCQl9CiAJCXJwY2ktPm5rZXJuX3JlYWR3cml0ZXJzKys7CiAJCWdvdG8gb3V0OwogCX0KLQlpbm9kZSA9IHJwY19nZXRfaW5vZGUoZGlyLT5pX3NiLCBTX0lGSUZPIHwgU19JUlVTUiB8IFNfSVdVU1IpOwotCWlmICghaW5vZGUpCi0JCWdvdG8gZXJyX2RwdXQ7Ci0JaW5vZGUtPmlfaW5vID0gaXVuaXF1ZShkaXItPmlfc2IsIDEwMCk7Ci0JaW5vZGUtPmlfZm9wID0gJnJwY19waXBlX2ZvcHM7Ci0JZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQlycGNpID0gUlBDX0koaW5vZGUpOwotCXJwY2ktPnByaXZhdGUgPSBwcml2YXRlOwotCXJwY2ktPmZsYWdzID0gZmxhZ3M7Ci0JcnBjaS0+b3BzID0gb3BzOwotCXJwY2ktPm5rZXJuX3JlYWR3cml0ZXJzID0gMTsKLQlmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpOwotCWRnZXQoZGVudHJ5KTsKKworCWVyciA9IF9fcnBjX21rcGlwZShkaXIsIGRlbnRyeSwgdW1vZGUsICZycGNfcGlwZV9mb3BzLAorCQkJICAgcHJpdmF0ZSwgb3BzLCBmbGFncyk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZXJyOwogb3V0OgogCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKIAlyZXR1cm4gZGVudHJ5OwotZXJyX2RwdXQ6Ci0JZHB1dChkZW50cnkpOwotCWRlbnRyeSA9IEVSUl9QVFIoLUVOT01FTSk7CitvdXRfZXJyOgorCWRlbnRyeSA9IEVSUl9QVFIoZXJyKTsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXMoKSBmYWlsZWQgdG8gY3JlYXRlIHBpcGUgJXMvJXMgKGVycm5vID0gJWQpXG4iLAogCQkJX19GSUxFX18sIF9fZnVuY19fLCBwYXJlbnQtPmRfbmFtZS5uYW1lLCBuYW1lLAotCQkJLUVOT01FTSk7CisJCQllcnIpOwogCWdvdG8gb3V0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnBjX21rcGlwZSk7CkBAIC04NDIsMTkgKzgyNiwxMDcgQEAKIAlwYXJlbnQgPSBkZ2V0X3BhcmVudChkZW50cnkpOwogCWRpciA9IHBhcmVudC0+ZF9pbm9kZTsKIAltdXRleF9sb2NrX25lc3RlZCgmZGlyLT5pX211dGV4LCBJX01VVEVYX1BBUkVOVCk7Ci0JaWYgKC0tUlBDX0koZGVudHJ5LT5kX2lub2RlKS0+bmtlcm5fcmVhZHdyaXRlcnMgPT0gMCkgewotCQlycGNfY2xvc2VfcGlwZXMoZGVudHJ5LT5kX2lub2RlKTsKLQkJZXJyb3IgPSBzaW1wbGVfdW5saW5rKGRpciwgZGVudHJ5KTsKLQkJaWYgKCFlcnJvcikKLQkJCWRfZGVsZXRlKGRlbnRyeSk7Ci0JfQotCWRwdXQoZGVudHJ5KTsKKwllcnJvciA9IF9fcnBjX3JtcGlwZShkaXIsIGRlbnRyeSk7CiAJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwogCWRwdXQocGFyZW50KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChycGNfdW5saW5rKTsKIAorZW51bSB7CisJUlBDQVVUSF9pbmZvLAorCVJQQ0FVVEhfRU9GCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19maWxlbGlzdCBhdXRoZmlsZXNbXSA9IHsKKwlbUlBDQVVUSF9pbmZvXSA9IHsKKwkJLm5hbWUgPSAiaW5mbyIsCisJCS5pX2ZvcCA9ICZycGNfaW5mb19vcGVyYXRpb25zLAorCQkubW9kZSA9IFNfSUZSRUcgfCBTX0lSVVNSLAorCX0sCit9OworCitzdGF0aWMgaW50IHJwY19jbG50ZGlyX3BvcHVsYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlyZXR1cm4gcnBjX3BvcHVsYXRlKGRlbnRyeSwKKwkJCSAgICBhdXRoZmlsZXMsIFJQQ0FVVEhfaW5mbywgUlBDQVVUSF9FT0YsCisJCQkgICAgcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJwY19jbG50ZGlyX2RlcG9wdWxhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXJwY19kZXBvcHVsYXRlKGRlbnRyeSwgYXV0aGZpbGVzLCBSUENBVVRIX2luZm8sIFJQQ0FVVEhfRU9GKTsKK30KKworLyoqCisgKiBycGNfY3JlYXRlX2NsaWVudF9kaXIgLSBDcmVhdGUgYSBuZXcgcnBjX2NsaWVudCBkaXJlY3RvcnkgaW4gcnBjX3BpcGVmcworICogQHBhdGg6IHBhdGggZnJvbSB0aGUgcnBjX3BpcGVmcyByb290IHRvIHRoZSBuZXcgZGlyZWN0b3J5CisgKiBAcnBjX2NsaWVudDogcnBjIGNsaWVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGRpcmVjdG9yeQorICoKKyAqIFRoaXMgY3JlYXRlcyBhIGRpcmVjdG9yeSBhdCB0aGUgZ2l2ZW4gQHBhdGggYXNzb2NpYXRlZCB3aXRoCisgKiBAcnBjX2NsbnQsIHdoaWNoIHdpbGwgY29udGFpbiBhIGZpbGUgbmFtZWQgImluZm8iIHdpdGggc29tZSBiYXNpYworICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNsaWVudCwgdG9nZXRoZXIgd2l0aCBhbnkgInBpcGVzIiB0aGF0IG1heQorICogbGF0ZXIgYmUgY3JlYXRlZCB1c2luZyBycGNfbWtwaXBlKCkuCisgKi8KK3N0cnVjdCBkZW50cnkgKnJwY19jcmVhdGVfY2xpZW50X2RpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJICAgc3RydWN0IHFzdHIgKm5hbWUsCisJCQkJICAgc3RydWN0IHJwY19jbG50ICpycGNfY2xpZW50KQoreworCXJldHVybiBycGNfbWtkaXJfcG9wdWxhdGUoZGVudHJ5LCBuYW1lLCBTX0lSVUdPIHwgU19JWFVHTywgTlVMTCwKKwkJCXJwY19jbG50ZGlyX3BvcHVsYXRlLCBycGNfY2xpZW50KTsKK30KKworLyoqCisgKiBycGNfcmVtb3ZlX2NsaWVudF9kaXIgLSBSZW1vdmUgYSBkaXJlY3RvcnkgY3JlYXRlZCB3aXRoIHJwY19jcmVhdGVfY2xpZW50X2RpcigpCisgKiBAZGVudHJ5OiBkaXJlY3RvcnkgdG8gcmVtb3ZlCisgKi8KK2ludCBycGNfcmVtb3ZlX2NsaWVudF9kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXJldHVybiBycGNfcm1kaXJfZGVwb3B1bGF0ZShkZW50cnksIHJwY19jbG50ZGlyX2RlcG9wdWxhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19maWxlbGlzdCBjYWNoZV9waXBlZnNfZmlsZXNbM10gPSB7CisJWzBdID0geworCQkubmFtZSA9ICJjaGFubmVsIiwKKwkJLmlfZm9wID0gJmNhY2hlX2ZpbGVfb3BlcmF0aW9uc19waXBlZnMsCisJCS5tb2RlID0gU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lID0gImNvbnRlbnQiLAorCQkuaV9mb3AgPSAmY29udGVudF9maWxlX29wZXJhdGlvbnNfcGlwZWZzLAorCQkubW9kZSA9IFNfSUZSRUd8U19JUlVTUiwKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUgPSAiZmx1c2giLAorCQkuaV9mb3AgPSAmY2FjaGVfZmx1c2hfb3BlcmF0aW9uc19waXBlZnMsCisJCS5tb2RlID0gU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsCisJfSwKK307CisKK3N0YXRpYyBpbnQgcnBjX2NhY2hlZGlyX3BvcHVsYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlyZXR1cm4gcnBjX3BvcHVsYXRlKGRlbnRyeSwKKwkJCSAgICBjYWNoZV9waXBlZnNfZmlsZXMsIDAsIDMsCisJCQkgICAgcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJwY19jYWNoZWRpcl9kZXBvcHVsYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlycGNfZGVwb3B1bGF0ZShkZW50cnksIGNhY2hlX3BpcGVmc19maWxlcywgMCwgMyk7Cit9CisKK3N0cnVjdCBkZW50cnkgKnJwY19jcmVhdGVfY2FjaGVfZGlyKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IHFzdHIgKm5hbWUsCisJCQkJICAgIG1vZGVfdCB1bW9kZSwgc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpCit7CisJcmV0dXJuIHJwY19ta2Rpcl9wb3B1bGF0ZShwYXJlbnQsIG5hbWUsIHVtb2RlLCBOVUxMLAorCQkJcnBjX2NhY2hlZGlyX3BvcHVsYXRlLCBjZCk7Cit9CisKK3ZvaWQgcnBjX3JlbW92ZV9jYWNoZV9kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXJwY19ybWRpcl9kZXBvcHVsYXRlKGRlbnRyeSwgcnBjX2NhY2hlZGlyX2RlcG9wdWxhdGUpOworfQorCiAvKgogICogcG9wdWxhdGUgdGhlIGZpbGVzeXN0ZW0KICAqLwpAQCAtODY2LDYgKzkzOCw1MSBAQAogCiAjZGVmaW5lIFJQQ0FVVEhfR1NTTUFHSUMgMHg2NzU5Njk2OQogCisvKgorICogV2UgaGF2ZSBhIHNpbmdsZSBkaXJlY3Rvcnkgd2l0aCAxIG5vZGUgaW4gaXQuCisgKi8KK2VudW0geworCVJQQ0FVVEhfbG9ja2QsCisJUlBDQVVUSF9tb3VudCwKKwlSUENBVVRIX25mcywKKwlSUENBVVRIX3BvcnRtYXAsCisJUlBDQVVUSF9zdGF0ZCwKKwlSUENBVVRIX25mc2Q0X2NiLAorCVJQQ0FVVEhfY2FjaGUsCisJUlBDQVVUSF9Sb290RU9GCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19maWxlbGlzdCBmaWxlc1tdID0geworCVtSUENBVVRIX2xvY2tkXSA9IHsKKwkJLm5hbWUgPSAibG9ja2QiLAorCQkubW9kZSA9IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywKKwl9LAorCVtSUENBVVRIX21vdW50XSA9IHsKKwkJLm5hbWUgPSAibW91bnQiLAorCQkubW9kZSA9IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywKKwl9LAorCVtSUENBVVRIX25mc10gPSB7CisJCS5uYW1lID0gIm5mcyIsCisJCS5tb2RlID0gU19JRkRJUiB8IFNfSVJVR08gfCBTX0lYVUdPLAorCX0sCisJW1JQQ0FVVEhfcG9ydG1hcF0gPSB7CisJCS5uYW1lID0gInBvcnRtYXAiLAorCQkubW9kZSA9IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywKKwl9LAorCVtSUENBVVRIX3N0YXRkXSA9IHsKKwkJLm5hbWUgPSAic3RhdGQiLAorCQkubW9kZSA9IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywKKwl9LAorCVtSUENBVVRIX25mc2Q0X2NiXSA9IHsKKwkJLm5hbWUgPSAibmZzZDRfY2IiLAorCQkubW9kZSA9IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywKKwl9LAorCVtSUENBVVRIX2NhY2hlXSA9IHsKKwkJLm5hbWUgPSAiY2FjaGUiLAorCQkubW9kZSA9IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywKKwl9LAorfTsKKwogc3RhdGljIGludAogcnBjX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKIHsKQEAgLTg4Niw3ICsxMDAzLDcgQEAKIAkJaXB1dChpbm9kZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlpZiAocnBjX3BvcHVsYXRlKHJvb3QsIGZpbGVzLCBSUENBVVRIX1Jvb3QgKyAxLCBSUENBVVRIX1Jvb3RFT0YpKQorCWlmIChycGNfcG9wdWxhdGUocm9vdCwgZmlsZXMsIFJQQ0FVVEhfbG9ja2QsIFJQQ0FVVEhfUm9vdEVPRiwgTlVMTCkpCiAJCWdvdG8gb3V0OwogCXNiLT5zX3Jvb3QgPSByb290OwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKaW5kZXggYmVlZTZkYS4uODMwZmFmNCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYworKysgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jCkBAIC03NSw2ICs3NSwzNyBAQAogI2RlZmluZSBSUENCX09XTkVSX1NUUklORwkiMCIKICNkZWZpbmUgUlBDQl9NQVhPV05FUkxFTglzaXplb2YoUlBDQl9PV05FUl9TVFJJTkcpCiAKKy8qCisgKiBYRFIgZGF0YSB0eXBlIHNpemVzCisgKi8KKyNkZWZpbmUgUlBDQl9wcm9ncmFtX3N6CQkoMSkKKyNkZWZpbmUgUlBDQl92ZXJzaW9uX3N6CQkoMSkKKyNkZWZpbmUgUlBDQl9wcm90b2NvbF9zegkoMSkKKyNkZWZpbmUgUlBDQl9wb3J0X3N6CQkoMSkKKyNkZWZpbmUgUlBDQl9ib29sZWFuX3N6CQkoMSkKKworI2RlZmluZSBSUENCX25ldGlkX3N6CQkoMSArIFhEUl9RVUFETEVOKFJQQ0JJTkRfTUFYTkVUSURMRU4pKQorI2RlZmluZSBSUENCX2FkZHJfc3oJCSgxICsgWERSX1FVQURMRU4oUlBDQklORF9NQVhVQUREUkxFTikpCisjZGVmaW5lIFJQQ0Jfb3duZXJzdHJpbmdfc3oJKDEgKyBYRFJfUVVBRExFTihSUENCX01BWE9XTkVSTEVOKSkKKworLyoKKyAqIFhEUiBhcmd1bWVudCBhbmQgcmVzdWx0IHNpemVzCisgKi8KKyNkZWZpbmUgUlBDQl9tYXBwaW5nYXJnc19zegkoUlBDQl9wcm9ncmFtX3N6ICsgUlBDQl92ZXJzaW9uX3N6ICsgXAorCQkJCVJQQ0JfcHJvdG9jb2xfc3ogKyBSUENCX3BvcnRfc3opCisjZGVmaW5lIFJQQ0JfZ2V0YWRkcmFyZ3Nfc3oJKFJQQ0JfcHJvZ3JhbV9zeiArIFJQQ0JfdmVyc2lvbl9zeiArIFwKKwkJCQlSUENCX25ldGlkX3N6ICsgUlBDQl9hZGRyX3N6ICsgXAorCQkJCVJQQ0Jfb3duZXJzdHJpbmdfc3opCisKKyNkZWZpbmUgUlBDQl9nZXRwb3J0cmVzX3N6CVJQQ0JfcG9ydF9zegorI2RlZmluZSBSUENCX3NldHJlc19zegkJUlBDQl9ib29sZWFuX3N6CisKKy8qCisgKiBOb3RlIHRoYXQgUkZDIDE4MzMgZG9lcyBub3QgcHV0IGFueSBzaXplIHJlc3RyaWN0aW9ucyBvbiB0aGUKKyAqIGFkZHJlc3Mgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSByZW1vdGUgcnBjYmluZCBkYXRhYmFzZS4KKyAqLworI2RlZmluZSBSUENCX2dldGFkZHJyZXNfc3oJUlBDQl9hZGRyX3N6CisKIHN0YXRpYyB2b2lkCQkJcnBjYl9nZXRwb3J0X2RvbmUoc3RydWN0IHJwY190YXNrICosIHZvaWQgKik7CiBzdGF0aWMgdm9pZAkJCXJwY2JfbWFwX3JlbGVhc2Uodm9pZCAqZGF0YSk7CiBzdGF0aWMgc3RydWN0IHJwY19wcm9ncmFtCXJwY2JfcHJvZ3JhbTsKQEAgLTEyMiw2ICsxNTMsNyBAQAogCiAJcnBjYl93YWtlX3JwY2JpbmRfd2FpdGVycyhtYXAtPnJfeHBydCwgbWFwLT5yX3N0YXR1cyk7CiAJeHBydF9wdXQobWFwLT5yX3hwcnQpOworCWtmcmVlKG1hcC0+cl9hZGRyKTsKIAlrZnJlZShtYXApOwogfQogCkBAIC0yNjgsMTIgKzMwMCw5IEBACiAJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2FwOwogCXN0cnVjdCBycGNiaW5kX2FyZ3MgKm1hcCA9IG1zZy0+cnBjX2FyZ3A7CiAJdW5zaWduZWQgc2hvcnQgcG9ydCA9IG50b2hzKHNpbi0+c2luX3BvcnQpOwotCWNoYXIgYnVmWzMyXTsKKwlpbnQgcmVzdWx0OwogCi0JLyogQ29uc3RydWN0IEFGX0lORVQgdW5pdmVyc2FsIGFkZHJlc3MgKi8KLQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXBJNC4ldS4ldSIsCi0JCSAmc2luLT5zaW5fYWRkci5zX2FkZHIsIHBvcnQgPj4gOCwgcG9ydCAmIDB4ZmYpOwotCW1hcC0+cl9hZGRyID0gYnVmOworCW1hcC0+cl9hZGRyID0gcnBjX3NvY2thZGRyMnVhZGRyKHNhcCk7CiAKIAlkcHJpbnRrKCJSUEM6ICAgICAgICVzcmVnaXN0ZXJpbmcgWyV1LCAldSwgJXMsICclcyddIHdpdGggIgogCQkibG9jYWwgcnBjYmluZFxuIiwgKHBvcnQgPyAiIiA6ICJ1biIpLApAQCAtMjg0LDcgKzMxMyw5IEBACiAJaWYgKHBvcnQpCiAJCW1zZy0+cnBjX3Byb2MgPSAmcnBjYl9wcm9jZWR1cmVzNFtSUENCUFJPQ19TRVRdOwogCi0JcmV0dXJuIHJwY2JfcmVnaXN0ZXJfY2FsbChSUENCVkVSU180LCBtc2cpOworCXJlc3VsdCA9IHJwY2JfcmVnaXN0ZXJfY2FsbChSUENCVkVSU180LCBtc2cpOworCWtmcmVlKG1hcC0+cl9hZGRyKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKgpAQCAtMjk2LDE2ICszMjcsOSBAQAogCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDsKIAlzdHJ1Y3QgcnBjYmluZF9hcmdzICptYXAgPSBtc2ctPnJwY19hcmdwOwogCXVuc2lnbmVkIHNob3J0IHBvcnQgPSBudG9ocyhzaW42LT5zaW42X3BvcnQpOwotCWNoYXIgYnVmWzY0XTsKKwlpbnQgcmVzdWx0OwogCi0JLyogQ29uc3RydWN0IEFGX0lORVQ2IHVuaXZlcnNhbCBhZGRyZXNzICovCi0JaWYgKGlwdjZfYWRkcl9hbnkoJnNpbjYtPnNpbjZfYWRkcikpCi0JCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICI6Oi4ldS4ldSIsCi0JCQkJcG9ydCA+PiA4LCBwb3J0ICYgMHhmZik7Ci0JZWxzZQotCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXBJNi4ldS4ldSIsCi0JCQkgJnNpbjYtPnNpbjZfYWRkciwgcG9ydCA+PiA4LCBwb3J0ICYgMHhmZik7Ci0JbWFwLT5yX2FkZHIgPSBidWY7CisJbWFwLT5yX2FkZHIgPSBycGNfc29ja2FkZHIydWFkZHIoc2FwKTsKIAogCWRwcmludGsoIlJQQzogICAgICAgJXNyZWdpc3RlcmluZyBbJXUsICV1LCAlcywgJyVzJ10gd2l0aCAiCiAJCSJsb2NhbCBycGNiaW5kXG4iLCAocG9ydCA/ICIiIDogInVuIiksCkBAIC0zMTYsNyArMzQwLDkgQEAKIAlpZiAocG9ydCkKIAkJbXNnLT5ycGNfcHJvYyA9ICZycGNiX3Byb2NlZHVyZXM0W1JQQ0JQUk9DX1NFVF07CiAKLQlyZXR1cm4gcnBjYl9yZWdpc3Rlcl9jYWxsKFJQQ0JWRVJTXzQsIG1zZyk7CisJcmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKFJQQ0JWRVJTXzQsIG1zZyk7CisJa2ZyZWUobWFwLT5yX2FkZHIpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgcnBjYl91bnJlZ2lzdGVyX2FsbF9wcm90b2ZhbWlsaWVzKHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnKQpAQCAtNDI4LDcgKzQ1NCw3IEBACiAJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKIAkJLnJwY19wcm9jCT0gJnJwY2JfcHJvY2VkdXJlczJbUlBDQlBST0NfR0VUUE9SVF0sCiAJCS5ycGNfYXJncAk9ICZtYXAsCi0JCS5ycGNfcmVzcAk9ICZtYXAucl9wb3J0LAorCQkucnBjX3Jlc3AJPSAmbWFwLAogCX07CiAJc3RydWN0IHJwY19jbG50CSpycGNiX2NsbnQ7CiAJaW50IHN0YXR1czsKQEAgLTQ1OCw3ICs0ODQsNyBAQAogCXN0cnVjdCBycGNfbWVzc2FnZSBtc2cgPSB7CiAJCS5ycGNfcHJvYyA9IHByb2MsCiAJCS5ycGNfYXJncCA9IG1hcCwKLQkJLnJwY19yZXNwID0gJm1hcC0+cl9wb3J0LAorCQkucnBjX3Jlc3AgPSBtYXAsCiAJfTsKIAlzdHJ1Y3QgcnBjX3Rhc2tfc2V0dXAgdGFza19zZXR1cF9kYXRhID0gewogCQkucnBjX2NsaWVudCA9IHJwY2JfY2xudCwKQEAgLTUzOSw2ICs1NjUsNyBAQAogCQlnb3RvIGJhaWxvdXRfbm9mcmVlOwogCX0KIAorCS8qIFBhcmVudCB0cmFuc3BvcnQncyBkZXN0aW5hdGlvbiBhZGRyZXNzICovCiAJc2FsZW4gPSBycGNfcGVlcmFkZHIoY2xudCwgc2FwLCBzaXplb2YoYWRkcikpOwogCiAJLyogRG9uJ3QgZXZlciB1c2UgcnBjYmluZCB2MiBmb3IgQUZfSU5FVDYgcmVxdWVzdHMgKi8KQEAgLTU4OSwxMSArNjE2LDIyIEBACiAJbWFwLT5yX3Byb3QgPSB4cHJ0LT5wcm90OwogCW1hcC0+cl9wb3J0ID0gMDsKIAltYXAtPnJfeHBydCA9IHhwcnRfZ2V0KHhwcnQpOwotCW1hcC0+cl9uZXRpZCA9IHJwY19wZWVyYWRkcjJzdHIoY2xudCwgUlBDX0RJU1BMQVlfTkVUSUQpOwotCW1hcC0+cl9hZGRyID0gcnBjX3BlZXJhZGRyMnN0cihycGNiX2NsbnQsIFJQQ19ESVNQTEFZX1VOSVZFUlNBTF9BRERSKTsKLQltYXAtPnJfb3duZXIgPSAiIjsKIAltYXAtPnJfc3RhdHVzID0gLUVJTzsKIAorCXN3aXRjaCAoYmluZF92ZXJzaW9uKSB7CisJY2FzZSBSUENCVkVSU180OgorCWNhc2UgUlBDQlZFUlNfMzoKKwkJbWFwLT5yX25ldGlkID0gcnBjX3BlZXJhZGRyMnN0cihjbG50LCBSUENfRElTUExBWV9ORVRJRCk7CisJCW1hcC0+cl9hZGRyID0gcnBjX3NvY2thZGRyMnVhZGRyKHNhcCk7CisJCW1hcC0+cl9vd25lciA9ICIiOworCQlicmVhazsKKwljYXNlIFJQQ0JWRVJTXzI6CisJCW1hcC0+cl9hZGRyID0gTlVMTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCiAJY2hpbGQgPSBycGNiX2NhbGxfYXN5bmMocnBjYl9jbG50LCBtYXAsIHByb2MpOwogCXJwY19yZWxlYXNlX2NsaWVudChycGNiX2NsbnQpOwogCWlmIChJU19FUlIoY2hpbGQpKSB7CkBAIC02NTYsMTc2ICs2OTQsMjc4IEBACiAgKiBYRFIgZnVuY3Rpb25zIGZvciBycGNiaW5kCiAgKi8KIAotc3RhdGljIGludCBycGNiX2VuY29kZV9tYXBwaW5nKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsCi0JCQkgICAgICAgc3RydWN0IHJwY2JpbmRfYXJncyAqcnBjYikKK3N0YXRpYyBpbnQgcnBjYl9lbmNfbWFwcGluZyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAorCQkJICAgIGNvbnN0IHN0cnVjdCBycGNiaW5kX2FyZ3MgKnJwY2IpCiB7Ci0JZHByaW50aygiUlBDOiAgICAgICBlbmNvZGluZyBycGNiIHJlcXVlc3QgKCV1LCAldSwgJWQsICV1KVxuIiwKKwlzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2sgPSByZXEtPnJxX3Rhc2s7CisJc3RydWN0IHhkcl9zdHJlYW0geGRyOworCisJZHByaW50aygiUlBDOiAlNXUgZW5jb2RpbmcgUE1BUF8lcyBjYWxsICgldSwgJXUsICVkLCAldSlcbiIsCisJCQl0YXNrLT50a19waWQsIHRhc2stPnRrX21zZy5ycGNfcHJvYy0+cF9uYW1lLAogCQkJcnBjYi0+cl9wcm9nLCBycGNiLT5yX3ZlcnMsIHJwY2ItPnJfcHJvdCwgcnBjYi0+cl9wb3J0KTsKKworCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKKworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSgmeGRyLCBzaXplb2YoX19iZTMyKSAqIFJQQ0JfbWFwcGluZ2FyZ3Nfc3opOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTzsKKwogCSpwKysgPSBodG9ubChycGNiLT5yX3Byb2cpOwogCSpwKysgPSBodG9ubChycGNiLT5yX3ZlcnMpOwogCSpwKysgPSBodG9ubChycGNiLT5yX3Byb3QpOwotCSpwKysgPSBodG9ubChycGNiLT5yX3BvcnQpOworCSpwICAgPSBodG9ubChycGNiLT5yX3BvcnQpOwogCi0JcmVxLT5ycV9zbGVuID0geGRyX2FkanVzdF9pb3ZlYyhyZXEtPnJxX3N2ZWMsIHApOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJwY2JfZGVjb2RlX2dldHBvcnQoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKLQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCAqcG9ydHApCitzdGF0aWMgaW50IHJwY2JfZGVjX2dldHBvcnQoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKKwkJCSAgICBzdHJ1Y3QgcnBjYmluZF9hcmdzICpycGNiKQogewotCSpwb3J0cCA9ICh1bnNpZ25lZCBzaG9ydCkgbnRvaGwoKnArKyk7Ci0JZHByaW50aygiUlBDOiAgICAgICBycGNiIGdldHBvcnQgcmVzdWx0OiAldVxuIiwKLQkJCSpwb3J0cCk7CisJc3RydWN0IHJwY190YXNrICp0YXNrID0gcmVxLT5ycV90YXNrOworCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKKwl1bnNpZ25lZCBsb25nIHBvcnQ7CisKKwl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJlcS0+cnFfcmN2X2J1ZiwgcCk7CisKKwlycGNiLT5yX3BvcnQgPSAwOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKCZ4ZHIsIHNpemVvZihfX2JlMzIpKTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FSU87CisKKwlwb3J0ID0gbnRvaGwoKnApOworCWRwcmludGsoIlJQQzogJTV1IFBNQVBfJXMgcmVzdWx0OiAlbHVcbiIsIHRhc2stPnRrX3BpZCwKKwkJCXRhc2stPnRrX21zZy5ycGNfcHJvYy0+cF9uYW1lLCBwb3J0KTsKKwlpZiAodW5saWtlbHkocG9ydCA+IFVTSE9SVF9NQVgpKQorCQlyZXR1cm4gLUVJTzsKKworCXJwY2ItPnJfcG9ydCA9IHBvcnQ7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnBjYl9kZWNvZGVfc2V0KHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsCi0JCQkgICB1bnNpZ25lZCBpbnQgKmJvb2xwKQorc3RhdGljIGludCBycGNiX2RlY19zZXQoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKKwkJCXVuc2lnbmVkIGludCAqYm9vbHApCiB7Ci0JKmJvb2xwID0gKHVuc2lnbmVkIGludCkgbnRvaGwoKnArKyk7Ci0JZHByaW50aygiUlBDOiAgICAgICBycGNiIHNldC91bnNldCBjYWxsICVzXG4iLAorCXN0cnVjdCBycGNfdGFzayAqdGFzayA9IHJlcS0+cnFfdGFzazsKKwlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CisKKwl4ZHJfaW5pdF9kZWNvZGUoJnhkciwgJnJlcS0+cnFfcmN2X2J1ZiwgcCk7CisKKwlwID0geGRyX2lubGluZV9kZWNvZGUoJnhkciwgc2l6ZW9mKF9fYmUzMikpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTzsKKworCSpib29scCA9IDA7CisJaWYgKCpwKQorCQkqYm9vbHAgPSAxOworCisJZHByaW50aygiUlBDOiAlNXUgUlBDQl8lcyBjYWxsICVzXG4iLAorCQkJdGFzay0+dGtfcGlkLCB0YXNrLT50a19tc2cucnBjX3Byb2MtPnBfbmFtZSwKIAkJCSgqYm9vbHAgPyAic3VjY2VlZGVkIiA6ICJmYWlsZWQiKSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnBjYl9lbmNvZGVfZ2V0YWRkcihzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAotCQkJICAgICAgIHN0cnVjdCBycGNiaW5kX2FyZ3MgKnJwY2IpCitzdGF0aWMgaW50IGVuY29kZV9ycGNiX3N0cmluZyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBjaGFyICpzdHJpbmcsCisJCQkJY29uc3QgdTMyIG1heHN0cmxlbikKIHsKLQlkcHJpbnRrKCJSUEM6ICAgICAgIGVuY29kaW5nIHJwY2IgcmVxdWVzdCAoJXUsICV1LCAlcylcbiIsCi0JCQlycGNiLT5yX3Byb2csIHJwY2ItPnJfdmVycywgcnBjYi0+cl9hZGRyKTsKLQkqcCsrID0gaHRvbmwocnBjYi0+cl9wcm9nKTsKLQkqcCsrID0gaHRvbmwocnBjYi0+cl92ZXJzKTsKKwl1MzIgbGVuOworCV9fYmUzMiAqcDsKIAotCXAgPSB4ZHJfZW5jb2RlX3N0cmluZyhwLCBycGNiLT5yX25ldGlkKTsKLQlwID0geGRyX2VuY29kZV9zdHJpbmcocCwgcnBjYi0+cl9hZGRyKTsKLQlwID0geGRyX2VuY29kZV9zdHJpbmcocCwgcnBjYi0+cl9vd25lcik7CisJaWYgKHVubGlrZWx5KHN0cmluZyA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FSU87CisJbGVuID0gc3RybGVuKHN0cmluZyk7CisJaWYgKHVubGlrZWx5KGxlbiA+IG1heHN0cmxlbikpCisJCXJldHVybiAtRUlPOwogCi0JcmVxLT5ycV9zbGVuID0geGRyX2FkanVzdF9pb3ZlYyhyZXEtPnJxX3N2ZWMsIHApOworCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIHNpemVvZihfX2JlMzIpICsgbGVuKTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FSU87CisJeGRyX2VuY29kZV9vcGFxdWUocCwgc3RyaW5nLCBsZW4pOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnBjYl9kZWNvZGVfZ2V0YWRkcihzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAotCQkJICAgICAgIHVuc2lnbmVkIHNob3J0ICpwb3J0cCkKK3N0YXRpYyBpbnQgcnBjYl9lbmNfZ2V0YWRkcihzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAorCQkJICAgIGNvbnN0IHN0cnVjdCBycGNiaW5kX2FyZ3MgKnJwY2IpCiB7Ci0JY2hhciAqYWRkcjsKLQl1MzIgYWRkcl9sZW47Ci0JaW50IGMsIGksIGYsIGZpcnN0LCB2YWw7CisJc3RydWN0IHJwY190YXNrICp0YXNrID0gcmVxLT5ycV90YXNrOworCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAotCSpwb3J0cCA9IDA7Ci0JYWRkcl9sZW4gPSBudG9obCgqcCsrKTsKKwlkcHJpbnRrKCJSUEM6ICU1dSBlbmNvZGluZyBSUENCXyVzIGNhbGwgKCV1LCAldSwgJyVzJywgJyVzJylcbiIsCisJCQl0YXNrLT50a19waWQsIHRhc2stPnRrX21zZy5ycGNfcHJvYy0+cF9uYW1lLAorCQkJcnBjYi0+cl9wcm9nLCBycGNiLT5yX3ZlcnMsCisJCQlycGNiLT5yX25ldGlkLCBycGNiLT5yX2FkZHIpOwogCi0JaWYgKGFkZHJfbGVuID09IDApIHsKLQkJZHByaW50aygiUlBDOiAgICAgICBycGNiX2RlY29kZV9nZXRhZGRyOiAiCi0JCQkJCSJzZXJ2aWNlIGlzIG5vdCByZWdpc3RlcmVkXG4iKTsKKwl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7CisKKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoJnhkciwKKwkJCXNpemVvZihfX2JlMzIpICogKFJQQ0JfcHJvZ3JhbV9zeiArIFJQQ0JfdmVyc2lvbl9zeikpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTzsKKwkqcCsrID0gaHRvbmwocnBjYi0+cl9wcm9nKTsKKwkqcCA9IGh0b25sKHJwY2ItPnJfdmVycyk7CisKKwlpZiAoZW5jb2RlX3JwY2Jfc3RyaW5nKCZ4ZHIsIHJwY2ItPnJfbmV0aWQsIFJQQ0JJTkRfTUFYTkVUSURMRU4pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoZW5jb2RlX3JwY2Jfc3RyaW5nKCZ4ZHIsIHJwY2ItPnJfYWRkciwgUlBDQklORF9NQVhVQUREUkxFTikpCisJCXJldHVybiAtRUlPOworCWlmIChlbmNvZGVfcnBjYl9zdHJpbmcoJnhkciwgcnBjYi0+cl9vd25lciwgUlBDQl9NQVhPV05FUkxFTikpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnBjYl9kZWNfZ2V0YWRkcihzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAorCQkJICAgIHN0cnVjdCBycGNiaW5kX2FyZ3MgKnJwY2IpCit7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcmVzczsKKwlzdHJ1Y3Qgc29ja2FkZHIgKnNhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcmVzczsKKwlzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2sgPSByZXEtPnJxX3Rhc2s7CisJc3RydWN0IHhkcl9zdHJlYW0geGRyOworCXUzMiBsZW47CisKKwlycGNiLT5yX3BvcnQgPSAwOworCisJeGRyX2luaXRfZGVjb2RlKCZ4ZHIsICZyZXEtPnJxX3Jjdl9idWYsIHApOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKCZ4ZHIsIHNpemVvZihfX2JlMzIpKTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJZ290byBvdXRfZmFpbDsKKwlsZW4gPSBudG9obCgqcCk7CisKKwkvKgorCSAqIElmIHRoZSByZXR1cm5lZCB1bml2ZXJzYWwgYWRkcmVzcyBpcyBhIG51bGwgc3RyaW5nLAorCSAqIHRoZSByZXF1ZXN0ZWQgUlBDIHNlcnZpY2Ugd2FzIG5vdCByZWdpc3RlcmVkLgorCSAqLworCWlmIChsZW4gPT0gMCkgeworCQlkcHJpbnRrKCJSUEM6ICU1dSBSUENCIHJlcGx5OiBwcm9ncmFtIG5vdCByZWdpc3RlcmVkXG4iLAorCQkJCXRhc2stPnRrX3BpZCk7CiAJCXJldHVybiAwOwogCX0KIAotCS8qCi0JICogU2ltcGxlIHNhbml0eSBjaGVjay4KLQkgKi8KLQlpZiAoYWRkcl9sZW4gPiBSUENCSU5EX01BWFVBRERSTEVOKQotCQlnb3RvIG91dF9lcnI7CisJaWYgKHVubGlrZWx5KGxlbiA+IFJQQ0JJTkRfTUFYVUFERFJMRU4pKQorCQlnb3RvIG91dF9mYWlsOwogCi0JLyoKLQkgKiBTdGFydCBhdCB0aGUgZW5kIGFuZCB3YWxrIGJhY2t3YXJkcyB1bnRpbCB0aGUgZmlyc3QgZG90Ci0JICogaXMgZW5jb3VudGVyZWQuICBXaGVuIHRoZSBzZWNvbmQgZG90IGlzIGZvdW5kLCB3ZSBoYXZlCi0JICogYm90aCBwYXJ0cyBvZiB0aGUgcG9ydCBudW1iZXIuCi0JICovCi0JYWRkciA9IChjaGFyICopcDsKLQl2YWwgPSAwOwotCWZpcnN0ID0gMTsKLQlmID0gMTsKLQlmb3IgKGkgPSBhZGRyX2xlbiAtIDE7IGkgPiAwOyBpLS0pIHsKLQkJYyA9IGFkZHJbaV07Ci0JCWlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgewotCQkJdmFsICs9IChjIC0gJzAnKSAqIGY7Ci0JCQlmICo9IDEwOwotCQl9IGVsc2UgaWYgKGMgPT0gJy4nKSB7Ci0JCQlpZiAoZmlyc3QpIHsKLQkJCQkqcG9ydHAgPSB2YWw7Ci0JCQkJdmFsID0gZmlyc3QgPSAwOwotCQkJCWYgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQkqcG9ydHAgfD0gKHZhbCA8PCA4KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KKwlwID0geGRyX2lubGluZV9kZWNvZGUoJnhkciwgbGVuKTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJZ290byBvdXRfZmFpbDsKKwlkcHJpbnRrKCJSUEM6ICU1dSBSUENCXyVzIHJlcGx5OiAlc1xuIiwgdGFzay0+dGtfcGlkLAorCQkJdGFzay0+dGtfbXNnLnJwY19wcm9jLT5wX25hbWUsIChjaGFyICopcCk7CiAKLQkvKgotCSAqIFNpbXBsZSBzYW5pdHkgY2hlY2suICBJZiB3ZSBuZXZlciBzYXcgYSBkb3QgaW4gdGhlIHJlcGx5LAotCSAqIHRoZW4gdGhpcyB3YXMgcHJvYmFibHkganVzdCBnYXJiYWdlLgotCSAqLwotCWlmIChmaXJzdCkKLQkJZ290byBvdXRfZXJyOworCWlmIChycGNfdWFkZHIyc29ja2FkZHIoKGNoYXIgKilwLCBsZW4sIHNhcCwgc2l6ZW9mKGFkZHJlc3MpKSA9PSAwKQorCQlnb3RvIG91dF9mYWlsOworCXJwY2ItPnJfcG9ydCA9IHJwY19nZXRfcG9ydChzYXApOwogCi0JZHByaW50aygiUlBDOiAgICAgICBycGNiX2RlY29kZV9nZXRhZGRyIHBvcnQ9JXVcbiIsICpwb3J0cCk7CiAJcmV0dXJuIDA7CiAKLW91dF9lcnI6Ci0JZHByaW50aygiUlBDOiAgICAgICBycGNiaW5kIHNlcnZlciByZXR1cm5lZCBtYWxmb3JtZWQgcmVwbHlcbiIpOworb3V0X2ZhaWw6CisJZHByaW50aygiUlBDOiAlNXUgbWFsZm9ybWVkIFJQQ0JfJXMgcmVwbHlcbiIsCisJCQl0YXNrLT50a19waWQsIHRhc2stPnRrX21zZy5ycGNfcHJvYy0+cF9uYW1lKTsKIAlyZXR1cm4gLUVJTzsKIH0KIAotI2RlZmluZSBSUENCX3Byb2dyYW1fc3oJCSgxdSkKLSNkZWZpbmUgUlBDQl92ZXJzaW9uX3N6CQkoMXUpCi0jZGVmaW5lIFJQQ0JfcHJvdG9jb2xfc3oJKDF1KQotI2RlZmluZSBSUENCX3BvcnRfc3oJCSgxdSkKLSNkZWZpbmUgUlBDQl9ib29sZWFuX3N6CQkoMXUpCi0KLSNkZWZpbmUgUlBDQl9uZXRpZF9zegkJKDErWERSX1FVQURMRU4oUlBDQklORF9NQVhORVRJRExFTikpCi0jZGVmaW5lIFJQQ0JfYWRkcl9zegkJKDErWERSX1FVQURMRU4oUlBDQklORF9NQVhVQUREUkxFTikpCi0jZGVmaW5lIFJQQ0Jfb3duZXJzdHJpbmdfc3oJKDErWERSX1FVQURMRU4oUlBDQl9NQVhPV05FUkxFTikpCi0KLSNkZWZpbmUgUlBDQl9tYXBwaW5nYXJnc19zeglSUENCX3Byb2dyYW1fc3orUlBDQl92ZXJzaW9uX3N6KwlcCi0JCQkJUlBDQl9wcm90b2NvbF9zeitSUENCX3BvcnRfc3oKLSNkZWZpbmUgUlBDQl9nZXRhZGRyYXJnc19zeglSUENCX3Byb2dyYW1fc3orUlBDQl92ZXJzaW9uX3N6KwlcCi0JCQkJUlBDQl9uZXRpZF9zeitSUENCX2FkZHJfc3orCQlcCi0JCQkJUlBDQl9vd25lcnN0cmluZ19zegotCi0jZGVmaW5lIFJQQ0Jfc2V0cmVzX3N6CQlSUENCX2Jvb2xlYW5fc3oKLSNkZWZpbmUgUlBDQl9nZXRwb3J0cmVzX3N6CVJQQ0JfcG9ydF9zegotCi0vKgotICogTm90ZSB0aGF0IFJGQyAxODMzIGRvZXMgbm90IHB1dCBhbnkgc2l6ZSByZXN0cmljdGlvbnMgb24gdGhlCi0gKiBhZGRyZXNzIHN0cmluZyByZXR1cm5lZCBieSB0aGUgcmVtb3RlIHJwY2JpbmQgZGF0YWJhc2UuCi0gKi8KLSNkZWZpbmUgUlBDQl9nZXRhZGRycmVzX3N6CVJQQ0JfYWRkcl9zegotCi0jZGVmaW5lIFBST0MocHJvYywgYXJndHlwZSwgcmVzdHlwZSkJCQkJCVwKLQlbUlBDQlBST0NfIyNwcm9jXSA9IHsJCQkJCQlcCi0JCS5wX3Byb2MJCT0gUlBDQlBST0NfIyNwcm9jLAkJCVwKLQkJLnBfZW5jb2RlCT0gKGt4ZHJwcm9jX3QpIHJwY2JfZW5jb2RlXyMjYXJndHlwZSwJXAotCQkucF9kZWNvZGUJPSAoa3hkcnByb2NfdCkgcnBjYl9kZWNvZGVfIyNyZXN0eXBlLAlcCi0JCS5wX2FyZ2xlbgk9IFJQQ0JfIyNhcmd0eXBlIyNhcmdzX3N6LAkJXAotCQkucF9yZXBsZW4JPSBSUENCXyMjcmVzdHlwZSMjcmVzX3N6LAkJXAotCQkucF9zdGF0aWR4CT0gUlBDQlBST0NfIyNwcm9jLAkJCVwKLQkJLnBfdGltZXIJPSAwLAkJCQkJXAotCQkucF9uYW1lCQk9ICNwcm9jLAkJCQlcCi0JfQotCiAvKgogICogTm90IGFsbCBycGNiaW5kIHByb2NlZHVyZXMgZGVzY3JpYmVkIGluIFJGQyAxODMzIGFyZSBpbXBsZW1lbnRlZAogICogc2luY2UgdGhlIExpbnV4IGtlcm5lbCBSUEMgY29kZSByZXF1aXJlcyBvbmx5IHRoZXNlLgogICovCisKIHN0YXRpYyBzdHJ1Y3QgcnBjX3Byb2NpbmZvIHJwY2JfcHJvY2VkdXJlczJbXSA9IHsKLQlQUk9DKFNFVCwJCW1hcHBpbmcsCXNldCksCi0JUFJPQyhVTlNFVCwJCW1hcHBpbmcsCXNldCksCi0JUFJPQyhHRVRQT1JULAkJbWFwcGluZywJZ2V0cG9ydCksCisJW1JQQ0JQUk9DX1NFVF0gPSB7CisJCS5wX3Byb2MJCT0gUlBDQlBST0NfU0VULAorCQkucF9lbmNvZGUJPSAoa3hkcnByb2NfdClycGNiX2VuY19tYXBwaW5nLAorCQkucF9kZWNvZGUJPSAoa3hkcnByb2NfdClycGNiX2RlY19zZXQsCisJCS5wX2FyZ2xlbgk9IFJQQ0JfbWFwcGluZ2FyZ3Nfc3osCisJCS5wX3JlcGxlbgk9IFJQQ0Jfc2V0cmVzX3N6LAorCQkucF9zdGF0aWR4CT0gUlBDQlBST0NfU0VULAorCQkucF90aW1lcgk9IDAsCisJCS5wX25hbWUJCT0gIlNFVCIsCisJfSwKKwlbUlBDQlBST0NfVU5TRVRdID0geworCQkucF9wcm9jCQk9IFJQQ0JQUk9DX1VOU0VULAorCQkucF9lbmNvZGUJPSAoa3hkcnByb2NfdClycGNiX2VuY19tYXBwaW5nLAorCQkucF9kZWNvZGUJPSAoa3hkcnByb2NfdClycGNiX2RlY19zZXQsCisJCS5wX2FyZ2xlbgk9IFJQQ0JfbWFwcGluZ2FyZ3Nfc3osCisJCS5wX3JlcGxlbgk9IFJQQ0Jfc2V0cmVzX3N6LAorCQkucF9zdGF0aWR4CT0gUlBDQlBST0NfVU5TRVQsCisJCS5wX3RpbWVyCT0gMCwKKwkJLnBfbmFtZQkJPSAiVU5TRVQiLAorCX0sCisJW1JQQ0JQUk9DX0dFVFBPUlRdID0geworCQkucF9wcm9jCQk9IFJQQ0JQUk9DX0dFVFBPUlQsCisJCS5wX2VuY29kZQk9IChreGRycHJvY190KXJwY2JfZW5jX21hcHBpbmcsCisJCS5wX2RlY29kZQk9IChreGRycHJvY190KXJwY2JfZGVjX2dldHBvcnQsCisJCS5wX2FyZ2xlbgk9IFJQQ0JfbWFwcGluZ2FyZ3Nfc3osCisJCS5wX3JlcGxlbgk9IFJQQ0JfZ2V0cG9ydHJlc19zeiwKKwkJLnBfc3RhdGlkeAk9IFJQQ0JQUk9DX0dFVFBPUlQsCisJCS5wX3RpbWVyCT0gMCwKKwkJLnBfbmFtZQkJPSAiR0VUUE9SVCIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcnBjX3Byb2NpbmZvIHJwY2JfcHJvY2VkdXJlczNbXSA9IHsKLQlQUk9DKFNFVCwJCWdldGFkZHIsCXNldCksCi0JUFJPQyhVTlNFVCwJCWdldGFkZHIsCXNldCksCi0JUFJPQyhHRVRBRERSLAkJZ2V0YWRkciwJZ2V0YWRkciksCisJW1JQQ0JQUk9DX1NFVF0gPSB7CisJCS5wX3Byb2MJCT0gUlBDQlBST0NfU0VULAorCQkucF9lbmNvZGUJPSAoa3hkcnByb2NfdClycGNiX2VuY19nZXRhZGRyLAorCQkucF9kZWNvZGUJPSAoa3hkcnByb2NfdClycGNiX2RlY19zZXQsCisJCS5wX2FyZ2xlbgk9IFJQQ0JfZ2V0YWRkcmFyZ3Nfc3osCisJCS5wX3JlcGxlbgk9IFJQQ0Jfc2V0cmVzX3N6LAorCQkucF9zdGF0aWR4CT0gUlBDQlBST0NfU0VULAorCQkucF90aW1lcgk9IDAsCisJCS5wX25hbWUJCT0gIlNFVCIsCisJfSwKKwlbUlBDQlBST0NfVU5TRVRdID0geworCQkucF9wcm9jCQk9IFJQQ0JQUk9DX1VOU0VULAorCQkucF9lbmNvZGUJPSAoa3hkcnByb2NfdClycGNiX2VuY19nZXRhZGRyLAorCQkucF9kZWNvZGUJPSAoa3hkcnByb2NfdClycGNiX2RlY19zZXQsCisJCS5wX2FyZ2xlbgk9IFJQQ0JfZ2V0YWRkcmFyZ3Nfc3osCisJCS5wX3JlcGxlbgk9IFJQQ0Jfc2V0cmVzX3N6LAorCQkucF9zdGF0aWR4CT0gUlBDQlBST0NfVU5TRVQsCisJCS5wX3RpbWVyCT0gMCwKKwkJLnBfbmFtZQkJPSAiVU5TRVQiLAorCX0sCisJW1JQQ0JQUk9DX0dFVEFERFJdID0geworCQkucF9wcm9jCQk9IFJQQ0JQUk9DX0dFVEFERFIsCisJCS5wX2VuY29kZQk9IChreGRycHJvY190KXJwY2JfZW5jX2dldGFkZHIsCisJCS5wX2RlY29kZQk9IChreGRycHJvY190KXJwY2JfZGVjX2dldGFkZHIsCisJCS5wX2FyZ2xlbgk9IFJQQ0JfZ2V0YWRkcmFyZ3Nfc3osCisJCS5wX3JlcGxlbgk9IFJQQ0JfZ2V0YWRkcnJlc19zeiwKKwkJLnBfc3RhdGlkeAk9IFJQQ0JQUk9DX0dFVEFERFIsCisJCS5wX3RpbWVyCT0gMCwKKwkJLnBfbmFtZQkJPSAiR0VUQUREUiIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcnBjX3Byb2NpbmZvIHJwY2JfcHJvY2VkdXJlczRbXSA9IHsKLQlQUk9DKFNFVCwJCWdldGFkZHIsCXNldCksCi0JUFJPQyhVTlNFVCwJCWdldGFkZHIsCXNldCksCi0JUFJPQyhHRVRBRERSLAkJZ2V0YWRkciwJZ2V0YWRkciksCi0JUFJPQyhHRVRWRVJTQUREUiwJZ2V0YWRkciwJZ2V0YWRkciksCisJW1JQQ0JQUk9DX1NFVF0gPSB7CisJCS5wX3Byb2MJCT0gUlBDQlBST0NfU0VULAorCQkucF9lbmNvZGUJPSAoa3hkcnByb2NfdClycGNiX2VuY19nZXRhZGRyLAorCQkucF9kZWNvZGUJPSAoa3hkcnByb2NfdClycGNiX2RlY19zZXQsCisJCS5wX2FyZ2xlbgk9IFJQQ0JfZ2V0YWRkcmFyZ3Nfc3osCisJCS5wX3JlcGxlbgk9IFJQQ0Jfc2V0cmVzX3N6LAorCQkucF9zdGF0aWR4CT0gUlBDQlBST0NfU0VULAorCQkucF90aW1lcgk9IDAsCisJCS5wX25hbWUJCT0gIlNFVCIsCisJfSwKKwlbUlBDQlBST0NfVU5TRVRdID0geworCQkucF9wcm9jCQk9IFJQQ0JQUk9DX1VOU0VULAorCQkucF9lbmNvZGUJPSAoa3hkcnByb2NfdClycGNiX2VuY19nZXRhZGRyLAorCQkucF9kZWNvZGUJPSAoa3hkcnByb2NfdClycGNiX2RlY19zZXQsCisJCS5wX2FyZ2xlbgk9IFJQQ0JfZ2V0YWRkcmFyZ3Nfc3osCisJCS5wX3JlcGxlbgk9IFJQQ0Jfc2V0cmVzX3N6LAorCQkucF9zdGF0aWR4CT0gUlBDQlBST0NfVU5TRVQsCisJCS5wX3RpbWVyCT0gMCwKKwkJLnBfbmFtZQkJPSAiVU5TRVQiLAorCX0sCisJW1JQQ0JQUk9DX0dFVEFERFJdID0geworCQkucF9wcm9jCQk9IFJQQ0JQUk9DX0dFVEFERFIsCisJCS5wX2VuY29kZQk9IChreGRycHJvY190KXJwY2JfZW5jX2dldGFkZHIsCisJCS5wX2RlY29kZQk9IChreGRycHJvY190KXJwY2JfZGVjX2dldGFkZHIsCisJCS5wX2FyZ2xlbgk9IFJQQ0JfZ2V0YWRkcmFyZ3Nfc3osCisJCS5wX3JlcGxlbgk9IFJQQ0JfZ2V0YWRkcnJlc19zeiwKKwkJLnBfc3RhdGlkeAk9IFJQQ0JQUk9DX0dFVEFERFIsCisJCS5wX3RpbWVyCT0gMCwKKwkJLnBfbmFtZQkJPSAiR0VUQUREUiIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcnBjYl9pbmZvIHJwY2JfbmV4dF92ZXJzaW9uW10gPSB7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N1bnJwY19zeW1zLmMgYi9uZXQvc3VucnBjL3N1bnJwY19zeW1zLmMKaW5kZXggYWRhYTgxOS4uOGNjZTkyMSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jCisrKyBiL25ldC9zdW5ycGMvc3VucnBjX3N5bXMuYwpAQCAtNjksNSArNjksNSBAQAogCXJjdV9iYXJyaWVyKCk7IC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgY2FsbF9yY3UoKSdzICovCiB9CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1tb2R1bGVfaW5pdChpbml0X3N1bnJwYyk7Citmc19pbml0Y2FsbChpbml0X3N1bnJwYyk7IC8qIEVuc3VyZSB3ZSdyZSBpbml0aWFsaXNlZCBiZWZvcmUgbmZzICovCiBtb2R1bGVfZXhpdChjbGVhbnVwX3N1bnJwYyk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jIGIvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYwppbmRleCA1Yzg2NWUyLi42Y2FmZmEzIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jCisrKyBiL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMKQEAgLTE3MSw2ICsxNzEsMTEgQEAKIAkoKmJwcClbLTFdID0gJ1xuJzsKIH0KIAorc3RhdGljIGludCBpcF9tYXBfdXBjYWxsKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqaCkKK3sKKwlyZXR1cm4gc3VucnBjX2NhY2hlX3BpcGVfdXBjYWxsKGNkLCBoLCBpcF9tYXBfcmVxdWVzdCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaXBfbWFwICppcF9tYXBfbG9va3VwKGNoYXIgKmNsYXNzLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOwogc3RhdGljIGludCBpcF9tYXBfdXBkYXRlKHN0cnVjdCBpcF9tYXAgKmlwbSwgc3RydWN0IHVuaXhfZG9tYWluICp1ZG9tLCB0aW1lX3QgZXhwaXJ5KTsKIApAQCAtMjg5LDcgKzI5NCw3IEBACiAJLmhhc2hfdGFibGUJPSBpcF90YWJsZSwKIAkubmFtZQkJPSAiYXV0aC51bml4LmlwIiwKIAkuY2FjaGVfcHV0CT0gaXBfbWFwX3B1dCwKLQkuY2FjaGVfcmVxdWVzdAk9IGlwX21hcF9yZXF1ZXN0LAorCS5jYWNoZV91cGNhbGwJPSBpcF9tYXBfdXBjYWxsLAogCS5jYWNoZV9wYXJzZQk9IGlwX21hcF9wYXJzZSwKIAkuY2FjaGVfc2hvdwk9IGlwX21hcF9zaG93LAogCS5tYXRjaAkJPSBpcF9tYXBfbWF0Y2gsCkBAIC01MjMsNiArNTI4LDExIEBACiAJKCpicHApWy0xXSA9ICdcbic7CiB9CiAKK3N0YXRpYyBpbnQgdW5peF9naWRfdXBjYWxsKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkLCBzdHJ1Y3QgY2FjaGVfaGVhZCAqaCkKK3sKKwlyZXR1cm4gc3VucnBjX2NhY2hlX3BpcGVfdXBjYWxsKGNkLCBoLCB1bml4X2dpZF9yZXF1ZXN0KTsKK30KKwogc3RhdGljIHN0cnVjdCB1bml4X2dpZCAqdW5peF9naWRfbG9va3VwKHVpZF90IHVpZCk7CiBleHRlcm4gc3RydWN0IGNhY2hlX2RldGFpbCB1bml4X2dpZF9jYWNoZTsKIApAQCAtNjIyLDcgKzYzMiw3IEBACiAJLmhhc2hfdGFibGUJPSBnaWRfdGFibGUsCiAJLm5hbWUJCT0gImF1dGgudW5peC5naWQiLAogCS5jYWNoZV9wdXQJPSB1bml4X2dpZF9wdXQsCi0JLmNhY2hlX3JlcXVlc3QJPSB1bml4X2dpZF9yZXF1ZXN0LAorCS5jYWNoZV91cGNhbGwJPSB1bml4X2dpZF91cGNhbGwsCiAJLmNhY2hlX3BhcnNlCT0gdW5peF9naWRfcGFyc2UsCiAJLmNhY2hlX3Nob3cJPSB1bml4X2dpZF9zaG93LAogCS5tYXRjaAkJPSB1bml4X2dpZF9tYXRjaCwKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvdGltZXIuYyBiL25ldC9zdW5ycGMvdGltZXIuYwppbmRleCAzMWJlY2JmLi5kZDgyNDM0IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3RpbWVyLmMKKysrIGIvbmV0L3N1bnJwYy90aW1lci5jCkBAIC0yNSw4ICsyNSwxMyBAQAogI2RlZmluZSBSUENfUlRPX0lOSVQgKEhaLzUpCiAjZGVmaW5lIFJQQ19SVE9fTUlOIChIWi8xMCkKIAotdm9pZAotcnBjX2luaXRfcnR0KHN0cnVjdCBycGNfcnR0ICpydCwgdW5zaWduZWQgbG9uZyB0aW1lbykKKy8qKgorICogcnBjX2luaXRfcnR0IC0gSW5pdGlhbGl6ZSBhbiBSUEMgUlRUIGVzdGltYXRvciBjb250ZXh0CisgKiBAcnQ6IGNvbnRleHQgdG8gaW5pdGlhbGl6ZQorICogQHRpbWVvOiBpbml0aWFsIHRpbWVvdXQgdmFsdWUsIGluIGppZmZpZXMKKyAqCisgKi8KK3ZvaWQgcnBjX2luaXRfcnR0KHN0cnVjdCBycGNfcnR0ICpydCwgdW5zaWduZWQgbG9uZyB0aW1lbykKIHsKIAl1bnNpZ25lZCBsb25nIGluaXQgPSAwOwogCXVuc2lnbmVkIGk7CkBAIC00MywxMiArNDgsMTYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJwY19pbml0X3J0dCk7CiAKLS8qCisvKioKKyAqIHJwY191cGRhdGVfcnR0IC0gVXBkYXRlIGFuIFJQQyBSVFQgZXN0aW1hdG9yIGNvbnRleHQKKyAqIEBydDogY29udGV4dCB0byB1cGRhdGUKKyAqIEB0aW1lcjogdGltZXIgYXJyYXkgaW5kZXggKHJlcXVlc3QgdHlwZSkKKyAqIEBtOiByZWNlbnQgYWN0dWFsIFJUVCwgaW4gamlmZmllcworICoKICAqIE5COiBXaGVuIGNvbXB1dGluZyB0aGUgc21vb3RoZWQgUlRUIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24sCiAgKiAgICAgYmUgY2FyZWZ1bCBub3QgdG8gcHJvZHVjZSBuZWdhdGl2ZSBpbnRlcm1lZGlhdGUgcmVzdWx0cy4KICAqLwotdm9pZAotcnBjX3VwZGF0ZV9ydHQoc3RydWN0IHJwY19ydHQgKnJ0LCB1bnNpZ25lZCB0aW1lciwgbG9uZyBtKQordm9pZCBycGNfdXBkYXRlX3J0dChzdHJ1Y3QgcnBjX3J0dCAqcnQsIHVuc2lnbmVkIHRpbWVyLCBsb25nIG0pCiB7CiAJbG9uZyAqc3J0dCwgKnNkcnR0OwogCkBAIC03OSwyMSArODgsMjUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJwY191cGRhdGVfcnR0KTsKIAotLyoKLSAqIEVzdGltYXRlIHJ0byBmb3IgYW4gbmZzIHJwYyBzZW50IHZpYS4gYW4gdW5yZWxpYWJsZSBkYXRhZ3JhbS4KLSAqIFVzZSB0aGUgbWVhbiBhbmQgbWVhbiBkZXZpYXRpb24gb2YgcnR0IGZvciB0aGUgYXBwcm9wcmlhdGUgdHlwZSBvZiBycGMKLSAqIGZvciB0aGUgZnJlcXVlbnQgcnBjcyBhbmQgYSBkZWZhdWx0IGZvciB0aGUgb3RoZXJzLgotICogVGhlIGp1c3RpZmljYXRpb24gZm9yIGRvaW5nICJvdGhlciIgdGhpcyB3YXkgaXMgdGhhdCB0aGVzZSBycGNzCi0gKiBoYXBwZW4gc28gaW5mcmVxdWVudGx5IHRoYXQgdGltZXIgZXN0LiB3b3VsZCBwcm9iYWJseSBiZSBzdGFsZS4KLSAqIEFsc28sIHNpbmNlIG1hbnkgb2YgdGhlc2UgcnBjcyBhcmUKLSAqIG5vbi1pZGVtcG90ZW50LCBhIGNvbnNlcnZhdGl2ZSB0aW1lb3V0IGlzIGRlc2lyZWQuCisvKioKKyAqIHJwY19jYWxjX3J0byAtIFByb3ZpZGUgYW4gZXN0aW1hdGVkIHRpbWVvdXQgdmFsdWUKKyAqIEBydDogY29udGV4dCB0byB1c2UgZm9yIGNhbGN1bGF0aW9uCisgKiBAdGltZXI6IHRpbWVyIGFycmF5IGluZGV4IChyZXF1ZXN0IHR5cGUpCisgKgorICogRXN0aW1hdGUgUlRPIGZvciBhbiBORlMgUlBDIHNlbnQgdmlhIGFuIHVucmVsaWFibGUgZGF0YWdyYW0uICBVc2UKKyAqIHRoZSBtZWFuIGFuZCBtZWFuIGRldmlhdGlvbiBvZiBSVFQgZm9yIHRoZSBhcHByb3ByaWF0ZSB0eXBlIG9mIFJQQworICogZm9yIGZyZXF1ZW50bHkgaXNzdWVkIFJQQ3MsIGFuZCBhIGZpeGVkIGRlZmF1bHQgZm9yIHRoZSBvdGhlcnMuCisgKgorICogVGhlIGp1c3RpZmljYXRpb24gZm9yIGRvaW5nICJvdGhlciIgdGhpcyB3YXkgaXMgdGhhdCB0aGVzZSBSUENzCisgKiBoYXBwZW4gc28gaW5mcmVxdWVudGx5IHRoYXQgdGltZXIgZXN0aW1hdGlvbiB3b3VsZCBwcm9iYWJseSBiZQorICogc3RhbGUuICBBbHNvLCBzaW5jZSBtYW55IG9mIHRoZXNlIFJQQ3MgYXJlIG5vbi1pZGVtcG90ZW50LCBhCisgKiBjb25zZXJ2YXRpdmUgdGltZW91dCBpcyBkZXNpcmVkLgorICoKICAqIGdldGF0dHIsIGxvb2t1cCwKICAqIHJlYWQsIHdyaXRlLCBjb21taXQgICAgIC0gQSs0RAogICogb3RoZXIgICAgICAgICAgICAgICAgICAgLSB0aW1lbwogICovCi0KLXVuc2lnbmVkIGxvbmcKLXJwY19jYWxjX3J0byhzdHJ1Y3QgcnBjX3J0dCAqcnQsIHVuc2lnbmVkIHRpbWVyKQordW5zaWduZWQgbG9uZyBycGNfY2FsY19ydG8oc3RydWN0IHJwY19ydHQgKnJ0LCB1bnNpZ25lZCB0aW1lcikKIHsKIAl1bnNpZ25lZCBsb25nIHJlczsKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94ZHIuYyBiL25ldC9zdW5ycGMveGRyLmMKaW5kZXggNDA2ZTI2ZC4uOGJkNjkwYyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94ZHIuYworKysgYi9uZXQvc3VucnBjL3hkci5jCkBAIC0yNCw3ICsyNCw3IEBACiAJdW5zaWduZWQgaW50CXF1YWRsZW4gPSBYRFJfUVVBRExFTihvYmotPmxlbik7CiAKIAlwW3F1YWRsZW5dID0gMDsJCS8qIHplcm8gdHJhaWxpbmcgYnl0ZXMgKi8KLQkqcCsrID0gaHRvbmwob2JqLT5sZW4pOworCSpwKysgPSBjcHVfdG9fYmUzMihvYmotPmxlbik7CiAJbWVtY3B5KHAsIG9iai0+ZGF0YSwgb2JqLT5sZW4pOwogCXJldHVybiBwICsgWERSX1FVQURMRU4ob2JqLT5sZW4pOwogfQpAQCAtMzUsNyArMzUsNyBAQAogewogCXVuc2lnbmVkIGludAlsZW47CiAKLQlpZiAoKGxlbiA9IG50b2hsKCpwKyspKSA+IFhEUl9NQVhfTkVUT0JKKQorCWlmICgobGVuID0gYmUzMl90b19jcHUoKnArKykpID4gWERSX01BWF9ORVRPQkopCiAJCXJldHVybiBOVUxMOwogCW9iai0+bGVuICA9IGxlbjsKIAlvYmotPmRhdGEgPSAodTggKikgcDsKQEAgLTgzLDcgKzgzLDcgQEAKICAqLwogX19iZTMyICp4ZHJfZW5jb2RlX29wYXF1ZShfX2JlMzIgKnAsIGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKLQkqcCsrID0gaHRvbmwobmJ5dGVzKTsKKwkqcCsrID0gY3B1X3RvX2JlMzIobmJ5dGVzKTsKIAlyZXR1cm4geGRyX2VuY29kZV9vcGFxdWVfZml4ZWQocCwgcHRyLCBuYnl0ZXMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoeGRyX2VuY29kZV9vcGFxdWUpOwpAQCAtMTAxLDcgKzEwMSw3IEBACiB7CiAJdTMyIGxlbjsKIAotCWxlbiA9IG50b2hsKCpwKyspOworCWxlbiA9IGJlMzJfdG9fY3B1KCpwKyspOwogCWlmIChsZW4gPiBtYXhsZW4pCiAJCXJldHVybiBOVUxMOwogCSpsZW5wID0gbGVuOwpAQCAtNzcxLDcgKzc3MSw3IEBACiAJc3RhdHVzID0gcmVhZF9ieXRlc19mcm9tX3hkcl9idWYoYnVmLCBiYXNlLCAmcmF3LCBzaXplb2YoKm9iaikpOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7Ci0JKm9iaiA9IG50b2hsKHJhdyk7CisJKm9iaiA9IGJlMzJfdG9fY3B1KHJhdyk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4ZHJfZGVjb2RlX3dvcmQpOwpAQCAtNzc5LDcgKzc3OSw3IEBACiBpbnQKIHhkcl9lbmNvZGVfd29yZChzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgdTMyIG9iaikKIHsKLQlfX2JlMzIJcmF3ID0gaHRvbmwob2JqKTsKKwlfX2JlMzIJcmF3ID0gY3B1X3RvX2JlMzIob2JqKTsKIAogCXJldHVybiB3cml0ZV9ieXRlc190b194ZHJfYnVmKGJ1ZiwgYmFzZSwgJnJhdywgc2l6ZW9mKG9iaikpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFuc3BvcnQuYyBiL25ldC9zdW5ycGMveHBydHJkbWEvdHJhbnNwb3J0LmMKaW5kZXggMWRkNjEyMy4uOWE2M2Y2NiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFuc3BvcnQuYworKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jCkBAIC0xNjgsNDcgKzE2OCwyNSBAQAogc3RhdGljIHZvaWQKIHhwcnRfcmRtYV9mb3JtYXRfYWRkcmVzc2VzKHN0cnVjdCBycGNfeHBydCAqeHBydCkKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICopCisJc3RydWN0IHNvY2thZGRyICpzYXAgPSAoc3RydWN0IHNvY2thZGRyICopCiAJCQkJCSZycGN4X3RvX3JkbWFkKHhwcnQpLmFkZHI7Ci0JY2hhciAqYnVmOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDsKKwljaGFyIGJ1Zls2NF07CiAKLQlidWYgPSBremFsbG9jKDIwLCBHRlBfS0VSTkVMKTsKLQlpZiAoYnVmKQotCQlzbnByaW50ZihidWYsIDIwLCAiJXBJNCIsICZhZGRyLT5zaW5fYWRkci5zX2FkZHIpOwotCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSA9IGJ1ZjsKKwkodm9pZClycGNfbnRvcChzYXAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSA9IGtzdHJkdXAoYnVmLCBHRlBfS0VSTkVMKTsKIAotCWJ1ZiA9IGt6YWxsb2MoOCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGJ1ZikKLQkJc25wcmludGYoYnVmLCA4LCAiJXUiLCBudG9ocyhhZGRyLT5zaW5fcG9ydCkpOwotCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9QT1JUXSA9IGJ1ZjsKKwkodm9pZClzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXUiLCBycGNfZ2V0X3BvcnQoc2FwKSk7CisJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdID0ga3N0cmR1cChidWYsIEdGUF9LRVJORUwpOwogCiAJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BST1RPXSA9ICJyZG1hIjsKIAotCWJ1ZiA9IGt6YWxsb2MoNDgsIEdGUF9LRVJORUwpOwotCWlmIChidWYpCi0JCXNucHJpbnRmKGJ1ZiwgNDgsICJhZGRyPSVwSTQgcG9ydD0ldSBwcm90bz0lcyIsCi0JCQkmYWRkci0+c2luX2FkZHIuc19hZGRyLAotCQkJbnRvaHMoYWRkci0+c2luX3BvcnQpLCAicmRtYSIpOwotCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BTExdID0gYnVmOworCSh2b2lkKXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDJ4JTAyeCUwMnglMDJ4IiwKKwkJCQlOSVBRVUFEKHNpbi0+c2luX2FkZHIuc19hZGRyKSk7CisJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0hFWF9BRERSXSA9IGtzdHJkdXAoYnVmLCBHRlBfS0VSTkVMKTsKIAotCWJ1ZiA9IGt6YWxsb2MoMTAsIEdGUF9LRVJORUwpOwotCWlmIChidWYpCi0JCXNucHJpbnRmKGJ1ZiwgMTAsICIlMDJ4JTAyeCUwMnglMDJ4IiwKLQkJCU5JUFFVQUQoYWRkci0+c2luX2FkZHIuc19hZGRyKSk7Ci0JeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0hFWF9BRERSXSA9IGJ1ZjsKLQotCWJ1ZiA9IGt6YWxsb2MoOCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGJ1ZikKLQkJc25wcmludGYoYnVmLCA4LCAiJTRoeCIsIG50b2hzKGFkZHItPnNpbl9wb3J0KSk7Ci0JeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0hFWF9QT1JUXSA9IGJ1ZjsKLQotCWJ1ZiA9IGt6YWxsb2MoMzAsIEdGUF9LRVJORUwpOwotCWlmIChidWYpCi0JCXNucHJpbnRmKGJ1ZiwgMzAsICIlcEk0LiV1LiV1IiwKLQkJCSZhZGRyLT5zaW5fYWRkci5zX2FkZHIsCi0JCQludG9ocyhhZGRyLT5zaW5fcG9ydCkgPj4gOCwKLQkJCW50b2hzKGFkZHItPnNpbl9wb3J0KSAmIDB4ZmYpOwotCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9VTklWRVJTQUxfQUREUl0gPSBidWY7CisJKHZvaWQpc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiU0aHgiLCBycGNfZ2V0X3BvcnQoc2FwKSk7CisJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0hFWF9QT1JUXSA9IGtzdHJkdXAoYnVmLCBHRlBfS0VSTkVMKTsKIAogCS8qIG5ldGlkICovCiAJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX05FVElEXSA9ICJyZG1hIjsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHNvY2suYyBiL25ldC9zdW5ycGMveHBydHNvY2suYwppbmRleCA4M2M3M2M0Li42MjQzOGYzIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCkBAIC0yNDgsOCArMjQ4LDggQEAKIAkgKiBDb25uZWN0aW9uIG9mIHRyYW5zcG9ydHMKIAkgKi8KIAlzdHJ1Y3QgZGVsYXllZF93b3JrCWNvbm5lY3Rfd29ya2VyOwotCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCWFkZHI7Ci0JdW5zaWduZWQgc2hvcnQJCXBvcnQ7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJc3JjYWRkcjsKKwl1bnNpZ25lZCBzaG9ydAkJc3JjcG9ydDsKIAogCS8qCiAJICogVURQIHNvY2tldCBidWZmZXIgc2l6ZSBwYXJhbWV0ZXJzCkBAIC0yOTYsMTE3ICsyOTYsNjAgQEAKIAlyZXR1cm4gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgJnhwcnQtPmFkZHI7CiB9CiAKLXN0YXRpYyB2b2lkIHhzX2Zvcm1hdF9pcHY0X3BlZXJfYWRkcmVzc2VzKHN0cnVjdCBycGNfeHBydCAqeHBydCwKLQkJCQkJICBjb25zdCBjaGFyICpwcm90b2NvbCwKLQkJCQkJICBjb25zdCBjaGFyICpuZXRpZCkKK3N0YXRpYyB2b2lkIHhzX2Zvcm1hdF9jb21tb25fcGVlcl9hZGRyZXNzZXMoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQogewotCXN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciA9IHhzX2FkZHJfaW4oeHBydCk7Ci0JY2hhciAqYnVmOworCXN0cnVjdCBzb2NrYWRkciAqc2FwID0geHNfYWRkcih4cHJ0KTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCWNoYXIgYnVmWzEyOF07CiAKLQlidWYgPSBremFsbG9jKDIwLCBHRlBfS0VSTkVMKTsKLQlpZiAoYnVmKSB7Ci0JCXNucHJpbnRmKGJ1ZiwgMjAsICIlcEk0IiwgJmFkZHItPnNpbl9hZGRyLnNfYWRkcik7CisJKHZvaWQpcnBjX250b3Aoc2FwLCBidWYsIHNpemVvZihidWYpKTsKKwl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0gPSBrc3RyZHVwKGJ1ZiwgR0ZQX0tFUk5FTCk7CisKKwlzd2l0Y2ggKHNhcC0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlzaW4gPSB4c19hZGRyX2luKHhwcnQpOworCQkodm9pZClzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTAyeCUwMnglMDJ4JTAyeCIsCisJCQkJCU5JUFFVQUQoc2luLT5zaW5fYWRkci5zX2FkZHIpKTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJc2luNiA9IHhzX2FkZHJfaW42KHhwcnQpOworCQkodm9pZClzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXBpNiIsICZzaW42LT5zaW42X2FkZHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKIAl9Ci0JeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FERFJdID0gYnVmOwotCi0JYnVmID0ga3phbGxvYyg4LCBHRlBfS0VSTkVMKTsKLQlpZiAoYnVmKSB7Ci0JCXNucHJpbnRmKGJ1ZiwgOCwgIiV1IiwKLQkJCQludG9ocyhhZGRyLT5zaW5fcG9ydCkpOwotCX0KLQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUE9SVF0gPSBidWY7Ci0KLQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUFJPVE9dID0gcHJvdG9jb2w7Ci0KLQlidWYgPSBremFsbG9jKDQ4LCBHRlBfS0VSTkVMKTsKLQlpZiAoYnVmKSB7Ci0JCXNucHJpbnRmKGJ1ZiwgNDgsICJhZGRyPSVwSTQgcG9ydD0ldSBwcm90bz0lcyIsCi0JCQkmYWRkci0+c2luX2FkZHIuc19hZGRyLAotCQkJbnRvaHMoYWRkci0+c2luX3BvcnQpLAotCQkJcHJvdG9jb2wpOwotCX0KLQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUxMXSA9IGJ1ZjsKLQotCWJ1ZiA9IGt6YWxsb2MoMTAsIEdGUF9LRVJORUwpOwotCWlmIChidWYpIHsKLQkJc25wcmludGYoYnVmLCAxMCwgIiUwMnglMDJ4JTAyeCUwMngiLAotCQkJCU5JUFFVQUQoYWRkci0+c2luX2FkZHIuc19hZGRyKSk7Ci0JfQotCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9IRVhfQUREUl0gPSBidWY7Ci0KLQlidWYgPSBremFsbG9jKDgsIEdGUF9LRVJORUwpOwotCWlmIChidWYpIHsKLQkJc25wcmludGYoYnVmLCA4LCAiJTRoeCIsCi0JCQkJbnRvaHMoYWRkci0+c2luX3BvcnQpKTsKLQl9Ci0JeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0hFWF9QT1JUXSA9IGJ1ZjsKLQotCWJ1ZiA9IGt6YWxsb2MoMzAsIEdGUF9LRVJORUwpOwotCWlmIChidWYpIHsKLQkJc25wcmludGYoYnVmLCAzMCwgIiVwSTQuJXUuJXUiLAotCQkJCSZhZGRyLT5zaW5fYWRkci5zX2FkZHIsCi0JCQkJbnRvaHMoYWRkci0+c2luX3BvcnQpID4+IDgsCi0JCQkJbnRvaHMoYWRkci0+c2luX3BvcnQpICYgMHhmZik7Ci0JfQotCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9VTklWRVJTQUxfQUREUl0gPSBidWY7Ci0KLQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfTkVUSURdID0gbmV0aWQ7CisJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0hFWF9BRERSXSA9IGtzdHJkdXAoYnVmLCBHRlBfS0VSTkVMKTsKIH0KIAotc3RhdGljIHZvaWQgeHNfZm9ybWF0X2lwdjZfcGVlcl9hZGRyZXNzZXMoc3RydWN0IHJwY194cHJ0ICp4cHJ0LAotCQkJCQkgIGNvbnN0IGNoYXIgKnByb3RvY29sLAotCQkJCQkgIGNvbnN0IGNoYXIgKm5ldGlkKQorc3RhdGljIHZvaWQgeHNfZm9ybWF0X2NvbW1vbl9wZWVyX3BvcnRzKHN0cnVjdCBycGNfeHBydCAqeHBydCkKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyID0geHNfYWRkcl9pbjYoeHBydCk7Ci0JY2hhciAqYnVmOworCXN0cnVjdCBzb2NrYWRkciAqc2FwID0geHNfYWRkcih4cHJ0KTsKKwljaGFyIGJ1ZlsxMjhdOwogCi0JYnVmID0ga3phbGxvYyg0MCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGJ1ZikgewotCQlzbnByaW50ZihidWYsIDQwLCAiJXBJNiIsJmFkZHItPnNpbjZfYWRkcik7Ci0JfQotCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSA9IGJ1ZjsKKwkodm9pZClzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXUiLCBycGNfZ2V0X3BvcnQoc2FwKSk7CisJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdID0ga3N0cmR1cChidWYsIEdGUF9LRVJORUwpOwogCi0JYnVmID0ga3phbGxvYyg4LCBHRlBfS0VSTkVMKTsKLQlpZiAoYnVmKSB7Ci0JCXNucHJpbnRmKGJ1ZiwgOCwgIiV1IiwKLQkJCQludG9ocyhhZGRyLT5zaW42X3BvcnQpKTsKLQl9Ci0JeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdID0gYnVmOworCSh2b2lkKXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlNGh4IiwgcnBjX2dldF9wb3J0KHNhcCkpOworCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9IRVhfUE9SVF0gPSBrc3RyZHVwKGJ1ZiwgR0ZQX0tFUk5FTCk7Cit9CiAKK3N0YXRpYyB2b2lkIHhzX2Zvcm1hdF9wZWVyX2FkZHJlc3NlcyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsCisJCQkJICAgICBjb25zdCBjaGFyICpwcm90b2NvbCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKm5ldGlkKQorewogCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9QUk9UT10gPSBwcm90b2NvbDsKLQotCWJ1ZiA9IGt6YWxsb2MoNjQsIEdGUF9LRVJORUwpOwotCWlmIChidWYpIHsKLQkJc25wcmludGYoYnVmLCA2NCwgImFkZHI9JXBJNiBwb3J0PSV1IHByb3RvPSVzIiwKLQkJCQkmYWRkci0+c2luNl9hZGRyLAotCQkJCW50b2hzKGFkZHItPnNpbjZfcG9ydCksCi0JCQkJcHJvdG9jb2wpOwotCX0KLQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUxMXSA9IGJ1ZjsKLQotCWJ1ZiA9IGt6YWxsb2MoMzYsIEdGUF9LRVJORUwpOwotCWlmIChidWYpCi0JCXNucHJpbnRmKGJ1ZiwgMzYsICIlcGk2IiwgJmFkZHItPnNpbjZfYWRkcik7Ci0KLQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfSEVYX0FERFJdID0gYnVmOwotCi0JYnVmID0ga3phbGxvYyg4LCBHRlBfS0VSTkVMKTsKLQlpZiAoYnVmKSB7Ci0JCXNucHJpbnRmKGJ1ZiwgOCwgIiU0aHgiLAotCQkJCW50b2hzKGFkZHItPnNpbjZfcG9ydCkpOwotCX0KLQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfSEVYX1BPUlRdID0gYnVmOwotCi0JYnVmID0ga3phbGxvYyg1MCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGJ1ZikgewotCQlzbnByaW50ZihidWYsIDUwLCAiJXBJNi4ldS4ldSIsCi0JCQkgJmFkZHItPnNpbjZfYWRkciwKLQkJCSBudG9ocyhhZGRyLT5zaW42X3BvcnQpID4+IDgsCi0JCQkgbnRvaHMoYWRkci0+c2luNl9wb3J0KSAmIDB4ZmYpOwotCX0KLQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfVU5JVkVSU0FMX0FERFJdID0gYnVmOwotCiAJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX05FVElEXSA9IG5ldGlkOworCXhzX2Zvcm1hdF9jb21tb25fcGVlcl9hZGRyZXNzZXMoeHBydCk7CisJeHNfZm9ybWF0X2NvbW1vbl9wZWVyX3BvcnRzKHhwcnQpOworfQorCitzdGF0aWMgdm9pZCB4c191cGRhdGVfcGVlcl9wb3J0KHN0cnVjdCBycGNfeHBydCAqeHBydCkKK3sKKwlrZnJlZSh4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfSEVYX1BPUlRdKTsKKwlrZnJlZSh4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUE9SVF0pOworCisJeHNfZm9ybWF0X2NvbW1vbl9wZWVyX3BvcnRzKHhwcnQpOwogfQogCiBzdGF0aWMgdm9pZCB4c19mcmVlX3BlZXJfYWRkcmVzc2VzKHN0cnVjdCBycGNfeHBydCAqeHBydCkKQEAgLTE1ODcsMjUgKzE1MzAsMTUgQEAKICAqLwogc3RhdGljIHZvaWQgeHNfc2V0X3BvcnQoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCB1bnNpZ25lZCBzaG9ydCBwb3J0KQogewotCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHhzX2FkZHIoeHBydCk7Ci0KIAlkcHJpbnRrKCJSUEM6ICAgICAgIHNldHRpbmcgcG9ydCBmb3IgeHBydCAlcCB0byAldVxuIiwgeHBydCwgcG9ydCk7CiAKLQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKLQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyKS0+c2luX3BvcnQgPSBodG9ucyhwb3J0KTsKLQkJYnJlYWs7Ci0JY2FzZSBBRl9JTkVUNjoKLQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkciktPnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9CisJcnBjX3NldF9wb3J0KHhzX2FkZHIoeHBydCksIHBvcnQpOworCXhzX3VwZGF0ZV9wZWVyX3BvcnQoeHBydCk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCB4c19nZXRfc3JjcG9ydChzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQsIHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7Ci0JdW5zaWduZWQgc2hvcnQgcG9ydCA9IHRyYW5zcG9ydC0+cG9ydDsKKwl1bnNpZ25lZCBzaG9ydCBwb3J0ID0gdHJhbnNwb3J0LT5zcmNwb3J0OwogCiAJaWYgKHBvcnQgPT0gMCAmJiB0cmFuc3BvcnQtPnhwcnQucmVzdnBvcnQpCiAJCXBvcnQgPSB4c19nZXRfcmFuZG9tX3BvcnQoKTsKQEAgLTE2MTQsOCArMTU0Nyw4IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCB4c19uZXh0X3NyY3BvcnQoc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBzaG9ydCBwb3J0KQogewotCWlmICh0cmFuc3BvcnQtPnBvcnQgIT0gMCkKLQkJdHJhbnNwb3J0LT5wb3J0ID0gMDsKKwlpZiAodHJhbnNwb3J0LT5zcmNwb3J0ICE9IDApCisJCXRyYW5zcG9ydC0+c3JjcG9ydCA9IDA7CiAJaWYgKCF0cmFuc3BvcnQtPnhwcnQucmVzdnBvcnQpCiAJCXJldHVybiAwOwogCWlmIChwb3J0IDw9IHhwcnRfbWluX3Jlc3Zwb3J0IHx8IHBvcnQgPiB4cHJ0X21heF9yZXN2cG9ydCkKQEAgLTE2MzMsNyArMTU2Niw3IEBACiAJdW5zaWduZWQgc2hvcnQgcG9ydCA9IHhzX2dldF9zcmNwb3J0KHRyYW5zcG9ydCwgc29jayk7CiAJdW5zaWduZWQgc2hvcnQgbGFzdDsKIAotCXNhID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZ0cmFuc3BvcnQtPmFkZHI7CisJc2EgPSAoc3RydWN0IHNvY2thZGRyX2luICopJnRyYW5zcG9ydC0+c3JjYWRkcjsKIAlteWFkZHIuc2luX2FkZHIgPSBzYS0+c2luX2FkZHI7CiAJZG8gewogCQlteWFkZHIuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKQEAgLTE2NDIsNyArMTU3NSw3IEBACiAJCWlmIChwb3J0ID09IDApCiAJCQlicmVhazsKIAkJaWYgKGVyciA9PSAwKSB7Ci0JCQl0cmFuc3BvcnQtPnBvcnQgPSBwb3J0OworCQkJdHJhbnNwb3J0LT5zcmNwb3J0ID0gcG9ydDsKIAkJCWJyZWFrOwogCQl9CiAJCWxhc3QgPSBwb3J0OwpAQCAtMTY2Niw3ICsxNTk5LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBwb3J0ID0geHNfZ2V0X3NyY3BvcnQodHJhbnNwb3J0LCBzb2NrKTsKIAl1bnNpZ25lZCBzaG9ydCBsYXN0OwogCi0Jc2EgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZ0cmFuc3BvcnQtPmFkZHI7CisJc2EgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZ0cmFuc3BvcnQtPnNyY2FkZHI7CiAJbXlhZGRyLnNpbjZfYWRkciA9IHNhLT5zaW42X2FkZHI7CiAJZG8gewogCQlteWFkZHIuc2luNl9wb3J0ID0gaHRvbnMocG9ydCk7CkBAIC0xNjc1LDcgKzE2MDgsNyBAQAogCQlpZiAocG9ydCA9PSAwKQogCQkJYnJlYWs7CiAJCWlmIChlcnIgPT0gMCkgewotCQkJdHJhbnNwb3J0LT5wb3J0ID0gcG9ydDsKKwkJCXRyYW5zcG9ydC0+c3JjcG9ydCA9IHBvcnQ7CiAJCQlicmVhazsKIAkJfQogCQlsYXN0ID0gcG9ydDsKQEAgLTE3ODAsOCArMTcxMywxMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlkcHJpbnRrKCJSUEM6ICAgICAgIHdvcmtlciBjb25uZWN0aW5nIHhwcnQgJXAgdG8gYWRkcmVzczogJXNcbiIsCi0JCQl4cHJ0LCB4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUxMXSk7CisJZHByaW50aygiUlBDOiAgICAgICB3b3JrZXIgY29ubmVjdGluZyB4cHJ0ICVwIHZpYSAlcyB0byAiCisJCQkJIiVzIChwb3J0ICVzKVxuIiwgeHBydCwKKwkJCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9QUk9UT10sCisJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUREUl0sCisJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUE9SVF0pOwogCiAJeHNfdWRwX2ZpbmlzaF9jb25uZWN0aW5nKHhwcnQsIHNvY2spOwogCXN0YXR1cyA9IDA7CkBAIC0xODIyLDggKzE3NTgsMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZHByaW50aygiUlBDOiAgICAgICB3b3JrZXIgY29ubmVjdGluZyB4cHJ0ICVwIHRvIGFkZHJlc3M6ICVzXG4iLAotCQkJeHBydCwgeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FMTF0pOworCWRwcmludGsoIlJQQzogICAgICAgd29ya2VyIGNvbm5lY3RpbmcgeHBydCAlcCB2aWEgJXMgdG8gIgorCQkJCSIlcyAocG9ydCAlcylcbiIsIHhwcnQsCisJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUFJPVE9dLAorCQkJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FERFJdLAorCQkJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdKTsKIAogCXhzX3VkcF9maW5pc2hfY29ubmVjdGluZyh4cHJ0LCBzb2NrKTsKIAlzdGF0dXMgPSAwOwpAQCAtMTk0OCw4ICsxODg3LDExIEBACiAJCQlnb3RvIG91dF9lYWdhaW47CiAJfQogCi0JZHByaW50aygiUlBDOiAgICAgICB3b3JrZXIgY29ubmVjdGluZyB4cHJ0ICVwIHRvIGFkZHJlc3M6ICVzXG4iLAotCQkJeHBydCwgeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FMTF0pOworCWRwcmludGsoIlJQQzogICAgICAgd29ya2VyIGNvbm5lY3RpbmcgeHBydCAlcCB2aWEgJXMgdG8gIgorCQkJCSIlcyAocG9ydCAlcylcbiIsIHhwcnQsCisJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUFJPVE9dLAorCQkJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FERFJdLAorCQkJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BPUlRdKTsKIAogCXN0YXR1cyA9IHhzX3RjcF9maW5pc2hfY29ubmVjdGluZyh4cHJ0LCBzb2NrKTsKIAlkcHJpbnRrKCJSUEM6ICAgICAgICVwIGNvbm5lY3Qgc3RhdHVzICVkIGNvbm5lY3RlZCAlZCBzb2NrIHN0YXRlICVkXG4iLApAQCAtMjEyMCw3ICsyMDYyLDcgQEAKIAlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQgPSBjb250YWluZXJfb2YoeHBydCwgc3RydWN0IHNvY2tfeHBydCwgeHBydCk7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIlx0eHBydDpcdHVkcCAldSAlbHUgJWx1ICVsdSAlbHUgJUx1ICVMdVxuIiwKLQkJCXRyYW5zcG9ydC0+cG9ydCwKKwkJCXRyYW5zcG9ydC0+c3JjcG9ydCwKIAkJCXhwcnQtPnN0YXQuYmluZF9jb3VudCwKIAkJCXhwcnQtPnN0YXQuc2VuZHMsCiAJCQl4cHJ0LT5zdGF0LnJlY3ZzLApAQCAtMjE0NCw3ICsyMDg2LDcgQEAKIAkJaWRsZV90aW1lID0gKGxvbmcpKGppZmZpZXMgLSB4cHJ0LT5sYXN0X3VzZWQpIC8gSFo7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIlx0eHBydDpcdHRjcCAldSAlbHUgJWx1ICVsdSAlbGQgJWx1ICVsdSAlbHUgJUx1ICVMdVxuIiwKLQkJCXRyYW5zcG9ydC0+cG9ydCwKKwkJCXRyYW5zcG9ydC0+c3JjcG9ydCwKIAkJCXhwcnQtPnN0YXQuYmluZF9jb3VudCwKIAkJCXhwcnQtPnN0YXQuY29ubmVjdF9jb3VudCwKIAkJCXhwcnQtPnN0YXQuY29ubmVjdF90aW1lLApAQCAtMjIyMyw3ICsyMTY1LDcgQEAKIAltZW1jcHkoJnhwcnQtPmFkZHIsIGFyZ3MtPmRzdGFkZHIsIGFyZ3MtPmFkZHJsZW4pOwogCXhwcnQtPmFkZHJsZW4gPSBhcmdzLT5hZGRybGVuOwogCWlmIChhcmdzLT5zcmNhZGRyKQotCQltZW1jcHkoJm5ldy0+YWRkciwgYXJncy0+c3JjYWRkciwgYXJncy0+YWRkcmxlbik7CisJCW1lbWNweSgmbmV3LT5zcmNhZGRyLCBhcmdzLT5zcmNhZGRyLCBhcmdzLT5hZGRybGVuKTsKIAogCXJldHVybiB4cHJ0OwogfQpAQCAtMjI3Miw3ICsyMjE0LDcgQEAKIAogCQlJTklUX0RFTEFZRURfV09SSygmdHJhbnNwb3J0LT5jb25uZWN0X3dvcmtlciwKIAkJCQkJeHNfdWRwX2Nvbm5lY3Rfd29ya2VyNCk7Ci0JCXhzX2Zvcm1hdF9pcHY0X3BlZXJfYWRkcmVzc2VzKHhwcnQsICJ1ZHAiLCBSUENCSU5EX05FVElEX1VEUCk7CisJCXhzX2Zvcm1hdF9wZWVyX2FkZHJlc3Nlcyh4cHJ0LCAidWRwIiwgUlBDQklORF9ORVRJRF9VRFApOwogCQlicmVhazsKIAljYXNlIEFGX0lORVQ2OgogCQlpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkciktPnNpbjZfcG9ydCAhPSBodG9ucygwKSkKQEAgLTIyODAsMTUgKzIyMjIsMjIgQEAKIAogCQlJTklUX0RFTEFZRURfV09SSygmdHJhbnNwb3J0LT5jb25uZWN0X3dvcmtlciwKIAkJCQkJeHNfdWRwX2Nvbm5lY3Rfd29ya2VyNik7Ci0JCXhzX2Zvcm1hdF9pcHY2X3BlZXJfYWRkcmVzc2VzKHhwcnQsICJ1ZHAiLCBSUENCSU5EX05FVElEX1VEUDYpOworCQl4c19mb3JtYXRfcGVlcl9hZGRyZXNzZXMoeHBydCwgInVkcCIsIFJQQ0JJTkRfTkVUSURfVURQNik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWtmcmVlKHhwcnQpOwogCQlyZXR1cm4gRVJSX1BUUigtRUFGTk9TVVBQT1JUKTsKIAl9CiAKLQlkcHJpbnRrKCJSUEM6ICAgICAgIHNldCB1cCB0cmFuc3BvcnQgdG8gYWRkcmVzcyAlc1xuIiwKLQkJCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BTExdKTsKKwlpZiAoeHBydF9ib3VuZCh4cHJ0KSkKKwkJZHByaW50aygiUlBDOiAgICAgICBzZXQgdXAgeHBydCB0byAlcyAocG9ydCAlcykgdmlhICVzXG4iLAorCQkJCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSwKKwkJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUE9SVF0sCisJCQkJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BST1RPXSk7CisJZWxzZQorCQlkcHJpbnRrKCJSUEM6ICAgICAgIHNldCB1cCB4cHJ0IHRvICVzIChhdXRvYmluZCkgdmlhICVzXG4iLAorCQkJCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSwKKwkJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUFJPVE9dKTsKIAogCWlmICh0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCiAJCXJldHVybiB4cHJ0OwpAQCAtMjMzNywyMyArMjI4NiwzMyBAQAogCQlpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyKS0+c2luX3BvcnQgIT0gaHRvbnMoMCkpCiAJCQl4cHJ0X3NldF9ib3VuZCh4cHJ0KTsKIAotCQlJTklUX0RFTEFZRURfV09SSygmdHJhbnNwb3J0LT5jb25uZWN0X3dvcmtlciwgeHNfdGNwX2Nvbm5lY3Rfd29ya2VyNCk7Ci0JCXhzX2Zvcm1hdF9pcHY0X3BlZXJfYWRkcmVzc2VzKHhwcnQsICJ0Y3AiLCBSUENCSU5EX05FVElEX1RDUCk7CisJCUlOSVRfREVMQVlFRF9XT1JLKCZ0cmFuc3BvcnQtPmNvbm5lY3Rfd29ya2VyLAorCQkJCQl4c190Y3BfY29ubmVjdF93b3JrZXI0KTsKKwkJeHNfZm9ybWF0X3BlZXJfYWRkcmVzc2VzKHhwcnQsICJ0Y3AiLCBSUENCSU5EX05FVElEX1RDUCk7CiAJCWJyZWFrOwogCWNhc2UgQUZfSU5FVDY6CiAJCWlmICgoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyKS0+c2luNl9wb3J0ICE9IGh0b25zKDApKQogCQkJeHBydF9zZXRfYm91bmQoeHBydCk7CiAKLQkJSU5JVF9ERUxBWUVEX1dPUksoJnRyYW5zcG9ydC0+Y29ubmVjdF93b3JrZXIsIHhzX3RjcF9jb25uZWN0X3dvcmtlcjYpOwotCQl4c19mb3JtYXRfaXB2Nl9wZWVyX2FkZHJlc3Nlcyh4cHJ0LCAidGNwIiwgUlBDQklORF9ORVRJRF9UQ1A2KTsKKwkJSU5JVF9ERUxBWUVEX1dPUksoJnRyYW5zcG9ydC0+Y29ubmVjdF93b3JrZXIsCisJCQkJCXhzX3RjcF9jb25uZWN0X3dvcmtlcjYpOworCQl4c19mb3JtYXRfcGVlcl9hZGRyZXNzZXMoeHBydCwgInRjcCIsIFJQQ0JJTkRfTkVUSURfVENQNik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWtmcmVlKHhwcnQpOwogCQlyZXR1cm4gRVJSX1BUUigtRUFGTk9TVVBQT1JUKTsKIAl9CiAKLQlkcHJpbnRrKCJSUEM6ICAgICAgIHNldCB1cCB0cmFuc3BvcnQgdG8gYWRkcmVzcyAlc1xuIiwKLQkJCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BTExdKTsKKwlpZiAoeHBydF9ib3VuZCh4cHJ0KSkKKwkJZHByaW50aygiUlBDOiAgICAgICBzZXQgdXAgeHBydCB0byAlcyAocG9ydCAlcykgdmlhICVzXG4iLAorCQkJCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSwKKwkJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUE9SVF0sCisJCQkJeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX1BST1RPXSk7CisJZWxzZQorCQlkcHJpbnRrKCJSUEM6ICAgICAgIHNldCB1cCB4cHJ0IHRvICVzIChhdXRvYmluZCkgdmlhICVzXG4iLAorCQkJCXhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BRERSXSwKKwkJCQl4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfUFJPVE9dKTsKKwogCiAJaWYgKHRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKIAkJcmV0dXJuIHhwcnQ7CkBAIC0yNDEyLDMgKzIzNzEsNTUgQEAKIAl4cHJ0X3VucmVnaXN0ZXJfdHJhbnNwb3J0KCZ4c191ZHBfdHJhbnNwb3J0KTsKIAl4cHJ0X3VucmVnaXN0ZXJfdHJhbnNwb3J0KCZ4c190Y3BfdHJhbnNwb3J0KTsKIH0KKworc3RhdGljIGludCBwYXJhbV9zZXRfdWludF9taW5tYXgoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCwKKwkJdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCkKK3sKKwl1bnNpZ25lZCBsb25nIG51bTsKKwlpbnQgcmV0OworCisJaWYgKCF2YWwpCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9IHN0cmljdF9zdHJ0b3VsKHZhbCwgMCwgJm51bSk7CisJaWYgKHJldCA9PSAtRUlOVkFMIHx8IG51bSA8IG1pbiB8fCBudW0gPiBtYXgpCisJCXJldHVybiAtRUlOVkFMOworCSooKHVuc2lnbmVkIGludCAqKWtwLT5hcmcpID0gbnVtOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcmFtX3NldF9wb3J0bnIoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlyZXR1cm4gcGFyYW1fc2V0X3VpbnRfbWlubWF4KHZhbCwga3AsCisJCQlSUENfTUlOX1JFU1ZQT1JULAorCQkJUlBDX01BWF9SRVNWUE9SVCk7Cit9CisKK3N0YXRpYyBpbnQgcGFyYW1fZ2V0X3BvcnRucihjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCXJldHVybiBwYXJhbV9nZXRfdWludChidWZmZXIsIGtwKTsKK30KKyNkZWZpbmUgcGFyYW1fY2hlY2tfcG9ydG5yKG5hbWUsIHApIFwKKwlfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHVuc2lnbmVkIGludCk7CisKK21vZHVsZV9wYXJhbV9uYW1lZChtaW5fcmVzdnBvcnQsIHhwcnRfbWluX3Jlc3Zwb3J0LCBwb3J0bnIsIDA2NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKG1heF9yZXN2cG9ydCwgeHBydF9tYXhfcmVzdnBvcnQsIHBvcnRuciwgMDY0NCk7CisKK3N0YXRpYyBpbnQgcGFyYW1fc2V0X3Nsb3RfdGFibGVfc2l6ZShjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCXJldHVybiBwYXJhbV9zZXRfdWludF9taW5tYXgodmFsLCBrcCwKKwkJCVJQQ19NSU5fU0xPVF9UQUJMRSwKKwkJCVJQQ19NQVhfU0xPVF9UQUJMRSk7Cit9CisKK3N0YXRpYyBpbnQgcGFyYW1fZ2V0X3Nsb3RfdGFibGVfc2l6ZShjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCXJldHVybiBwYXJhbV9nZXRfdWludChidWZmZXIsIGtwKTsKK30KKyNkZWZpbmUgcGFyYW1fY2hlY2tfc2xvdF90YWJsZV9zaXplKG5hbWUsIHApIFwKKwlfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHVuc2lnbmVkIGludCk7CisKK21vZHVsZV9wYXJhbV9uYW1lZCh0Y3Bfc2xvdF90YWJsZV9lbnRyaWVzLCB4cHJ0X3RjcF9zbG90X3RhYmxlX2VudHJpZXMsCisJCSAgIHNsb3RfdGFibGVfc2l6ZSwgMDY0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQodWRwX3Nsb3RfdGFibGVfZW50cmllcywgeHBydF91ZHBfc2xvdF90YWJsZV9lbnRyaWVzLAorCQkgICBzbG90X3RhYmxlX3NpemUsIDA2NDQpOworCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iZWFyZXIuYyBiL25ldC90aXBjL2JlYXJlci5jCmluZGV4IGE3YTM2NzcuLjMyNzAxMWYgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JlYXJlci5jCisrKyBiL25ldC90aXBjL2JlYXJlci5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAkJd2FybigiTWVkaWEgPCVzPiByZWplY3RlZCwgbm8gYnJvYWRjYXN0IGFkZHJlc3NcbiIsIG5hbWUpOwogCQlnb3RvIGV4aXQ7CiAJfQotCWlmICgoYmVhcmVyX3ByaW9yaXR5IDwgVElQQ19NSU5fTElOS19QUkkpICYmCisJaWYgKChiZWFyZXJfcHJpb3JpdHkgPCBUSVBDX01JTl9MSU5LX1BSSSkgfHwKIAkgICAgKGJlYXJlcl9wcmlvcml0eSA+IFRJUENfTUFYX0xJTktfUFJJKSkgewogCQl3YXJuKCJNZWRpYSA8JXM+IHJlamVjdGVkLCBpbGxlZ2FsIHByaW9yaXR5ICgldSlcbiIsIG5hbWUsCiAJCSAgICAgYmVhcmVyX3ByaW9yaXR5KTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL25ldGxpbmsuYyBiL25ldC90aXBjL25ldGxpbmsuYwppbmRleCAzYzU3MDA1Li43YmRhOGUzIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uZXRsaW5rLmMKKysrIGIvbmV0L3RpcGMvbmV0bGluay5jCkBAIC02Miw3ICs2Miw3IEBACiAJCXJlcF9ubGggPSBubG1zZ19oZHIocmVwX2J1Zik7CiAJCW1lbWNweShyZXBfbmxoLCByZXFfbmxoLCBoZHJfc3BhY2UpOwogCQlyZXBfbmxoLT5ubG1zZ19sZW4gPSByZXBfYnVmLT5sZW47Ci0JCWdlbmxtc2dfdW5pY2FzdChyZXBfYnVmLCBORVRMSU5LX0NCKHNrYikucGlkKTsKKwkJZ2VubG1zZ191bmljYXN0KCZpbml0X25ldCwgcmVwX2J1ZiwgTkVUTElOS19DQihza2IpLnBpZCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jCmluZGV4IDE4NDg2OTMuLmU4MjU0ZTggMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3NvY2tldC5jCisrKyBiL25ldC90aXBjL3NvY2tldC5jCkBAIC0xNzQ4LDYgKzE3NDgsMTIgQEAKIAkJdmFsdWUgPSBqaWZmaWVzX3RvX21zZWNzKHNrLT5za19yY3Z0aW1lbyk7CiAJCS8qIG5vIG5lZWQgdG8gc2V0ICJyZXMiLCBzaW5jZSBhbHJlYWR5IDAgYXQgdGhpcyBwb2ludCAqLwogCQlicmVhazsKKwkgY2FzZSBUSVBDX05PREVfUkVDVlFfREVQVEg6CisJCXZhbHVlID0gKHUzMilhdG9taWNfcmVhZCgmdGlwY19xdWV1ZV9zaXplKTsKKwkJYnJlYWs7CisJIGNhc2UgVElQQ19TT0NLX1JFQ1ZRX0RFUFRIOgorCQl2YWx1ZSA9IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVzID0gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggZmMzZWJiOS4uNTFhYjQ5NyAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtMTUwMSw2ICsxNTAxLDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBzZW50ID0gMDsKIAlzdHJ1Y3Qgc2NtX2Nvb2tpZSB0bXBfc2NtOworCWJvb2wgZmRzX3NlbnQgPSBmYWxzZTsKIAogCWlmIChOVUxMID09IHNpb2NiLT5zY20pCiAJCXNpb2NiLT5zY20gPSAmdG1wX3NjbTsKQEAgLTE1NjIsMTIgKzE1NjMsMTQgQEAKIAkJc2l6ZSA9IG1pbl90KGludCwgc2l6ZSwgc2tiX3RhaWxyb29tKHNrYikpOwogCiAJCW1lbWNweShVTklYQ1JFRFMoc2tiKSwgJnNpb2NiLT5zY20tPmNyZWRzLCBzaXplb2Yoc3RydWN0IHVjcmVkKSk7Ci0JCWlmIChzaW9jYi0+c2NtLT5mcCkgeworCQkvKiBPbmx5IHNlbmQgdGhlIGZkcyBpbiB0aGUgZmlyc3QgYnVmZmVyICovCisJCWlmIChzaW9jYi0+c2NtLT5mcCAmJiAhZmRzX3NlbnQpIHsKIAkJCWVyciA9IHVuaXhfYXR0YWNoX2ZkcyhzaW9jYi0+c2NtLCBza2IpOwogCQkJaWYgKGVycikgewogCQkJCWtmcmVlX3NrYihza2IpOwogCQkJCWdvdG8gb3V0X2VycjsKIAkJCX0KKwkJCWZkc19zZW50ID0gdHJ1ZTsKIAkJfQogCiAJCWVyciA9IG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dChza2IsIHNpemUpLCBtc2ctPm1zZ19pb3YsIHNpemUpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwppbmRleCA0NDI4ZGQ1Li5hYmY3Y2EzIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMSw2ICsxLDQ3IEBACiBjb25maWcgQ0ZHODAyMTEKLQl0cmlzdGF0ZSAiSW1wcm92ZWQgd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUEkiCisJdHJpc3RhdGUgImNmZzgwMjExIC0gd2lyZWxlc3MgY29uZmlndXJhdGlvbiBBUEkiCiAJZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTAorCS0tLWhlbHAtLS0KKwkgIGNmZzgwMjExIGlzIHRoZSBMaW51eCB3aXJlbGVzcyBMQU4gKDgwMi4xMSkgY29uZmlndXJhdGlvbiBBUEkuCisJICBFbmFibGUgdGhpcyBpZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGRldmljZS4KKworCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraToKKworCSAgaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2NmZzgwMjExCisKKwkgIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUgaXQgd2lsbCBiZSBjYWxsZWQgY2ZnODAyMTEuCisKK2NvbmZpZyBOTDgwMjExX1RFU1RNT0RFCisJYm9vbCAibmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kIgorCWRlcGVuZHMgb24gQ0ZHODAyMTEKKwloZWxwCisJICBUaGUgbmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kIGhlbHBzIGltcGxlbWVudGluZyB0aGluZ3MgbGlrZQorCSAgZmFjdG9yeSBjYWxpYnJhdGlvbiBvciB2YWxpZGF0aW9uIHRvb2xzIGZvciB3aXJlbGVzcyBjaGlwcy4KKworCSAgU2VsZWN0IHRoaXMgb3B0aW9uIE9OTFkgZm9yIGtlcm5lbHMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5CisJICBidWlsdCBmb3Igc3VjaCBwdXJwb3Nlcy4KKworCSAgRGVidWdnaW5nIHRvb2xzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGVuZCB1cCBpbiB0aGUgaGFuZHMgb2YKKwkgIHVzZXJzIHNob3VsZCBiZXR0ZXIgYmUgaW1wbGVtZW50ZWQgd2l0aCBkZWJ1Z2ZzLgorCisJICBTYXkgTi4KKworY29uZmlnIENGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HUworCWJvb2wgImVuYWJsZSBkZXZlbG9wZXIgd2FybmluZ3MiCisJZGVwZW5kcyBvbiBDRkc4MDIxMQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc29tZSBhZGRpdGlvbmFsIHdhcm5pbmdzIHRoYXQgaGVscAorCSAgY2ZnODAyMTEgZGV2ZWxvcGVycyBhbmQgZHJpdmVyIGRldmVsb3BlcnMsIGJ1dCB0aGF0IGNhbgorCSAgdHJpZ2dlciBkdWUgdG8gcmFjZXMgd2l0aCB1c2Vyc3BhY2UuCisKKwkgIEZvciBleGFtcGxlLCB3aGVuIGEgZHJpdmVyIHJlcG9ydHMgdGhhdCBpdCB3YXMgZGlzY29ubmVjdGVkCisJICBmcm9tIHRoZSBBUCwgYnV0IHRoZSB1c2VyIGRpc2Nvbm5lY3RzIG1hbnVhbGx5IGF0IHRoZSBzYW1lCisJICB0aW1lLCB0aGUgd2FybmluZyBtaWdodCB0cmlnZ2VyIHNwdXJpb3VzbHkgZHVlIHRvIHJhY2VzLgorCisJICBTYXkgWSBvbmx5IGlmIHlvdSBhcmUgZGV2ZWxvcGluZyBjZmc4MDIxMSBvciBhIGRyaXZlciBiYXNlZAorCSAgb24gaXQgKG9yIG1hYzgwMjExKS4KKwogCiBjb25maWcgQ0ZHODAyMTFfUkVHX0RFQlVHCiAJYm9vbCAiY2ZnODAyMTEgcmVndWxhdG9yeSBkZWJ1Z2dpbmciCkBAIC04LDkgKzQ5LDI5IEBACiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgWW91IGNhbiBlbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB0byBkZWJ1ZyByZWd1bGF0b3J5IGNoYW5nZXMuCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjZmc4MDIxMSByZWd1bGF0b3J5IHJlZmVyIHRvIHRoZSB3aXJlbGVzcworCSAgd2lraToKKworCSAgaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9SZWd1bGF0b3J5CiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTCisJYm9vbCAiZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0IgorCWRlcGVuZHMgb24gQ0ZHODAyMTEKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHBvd2Vyc2F2ZSBtb2RlIGJ5IGRlZmF1bHQuCisKKwkgIElmIHRoaXMgY2F1c2VzIHlvdXIgYXBwbGljYXRpb25zIHRvIG1pc2JlaGF2ZSB5b3Ugc2hvdWxkIGZpeCB5b3VyCisJICBhcHBsaWNhdGlvbnMgaW5zdGVhZCAtLSB0aGV5IG5lZWQgdG8gcmVnaXN0ZXIgdGhlaXIgbmV0d29yaworCSAgbGF0ZW5jeSByZXF1aXJlbWVudCwgc2VlIERvY3VtZW50YXRpb24vcG93ZXIvcG1fcW9zX2ludGVyZmFjZS50eHQuCisKK2NvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFCisJaW50CisJZGVmYXVsdCAxIGlmIENGRzgwMjExX0RFRkFVTFRfUFMKKwlkZWZhdWx0IDAKKwogY29uZmlnIENGRzgwMjExX0RFQlVHRlMKIAlib29sICJjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXMiCiAJZGVwZW5kcyBvbiBDRkc4MDIxMSAmJiBERUJVR19GUwpAQCAtMzUsMTkgKzk2LDEzIEBACiAKIGNvbmZpZyBXSVJFTEVTU19FWFQKIAlib29sICJXaXJlbGVzcyBleHRlbnNpb25zIgotCWRlZmF1bHQgbgorCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGxlZ2FjeSB3aXJlbGVzcyBleHRlbnNpb25zCiAJICAod2lyZWxlc3MgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiB2aWEgaW9jdGxzLikKIAotCSAgV2lyZWxlc3MgZXh0ZW5zaW9ucyB3aWxsIGJlIHJlcGxhY2VkIGJ5IGNmZzgwMjExIGFuZAotCSAgd2lsbCBiZSByZXF1aXJlZCBvbmx5IGJ5IGxlZ2FjeSBkcml2ZXJzIHRoYXQgaW1wbGVtZW50Ci0JICB3aXJlbGVzcyBleHRlbnNpb24gaGFuZGxlcnMuIFRoaXMgb3B0aW9uIGRvZXMgbm90Ci0JICBhZmZlY3QgdGhlIHdpcmVsZXNzLWV4dGVuc2lvbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Ci0JICBjb2RlIGluIGNmZzgwMjExLgotCi0JICBTYXkgTiAoaWYgeW91IGNhbikgdW5sZXNzIHlvdSBrbm93IHlvdSBuZWVkIHdpcmVsZXNzCi0JICBleHRlbnNpb25zIGZvciBleHRlcm5hbCBtb2R1bGVzLgorCSAgU2F5IFkgdW5sZXNzIHlvdSd2ZSB1cGdyYWRlZCBhbGwgeW91ciB1c2Vyc3BhY2UgdG8gdXNlCisJICBubDgwMjExIGluc3RlYWQgb2Ygd2lyZWxlc3MgZXh0ZW5zaW9ucy4KIAogY29uZmlnIFdJUkVMRVNTX0VYVF9TWVNGUwogCWJvb2wgIldpcmVsZXNzIGV4dGVuc2lvbnMgc3lzZnMgZmlsZXMiCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvTWFrZWZpbGUgYi9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKaW5kZXggZjc4YzQ4My4uM2VjYWE5MSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL01ha2VmaWxlCisrKyBiL25ldC93aXJlbGVzcy9NYWtlZmlsZQpAQCAtNSw4ICs1LDkgQEAKIG9iai0kKENPTkZJR19MSUI4MDIxMV9DUllQVF9DQ01QKSArPSBsaWI4MDIxMV9jcnlwdF9jY21wLm8KIG9iai0kKENPTkZJR19MSUI4MDIxMV9DUllQVF9US0lQKSArPSBsaWI4MDIxMV9jcnlwdF90a2lwLm8KIAotY2ZnODAyMTEteSArPSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubyBzY2FuLm8gbmw4MDIxMS5vIG1sbWUubyBpYnNzLm8KK2NmZzgwMjExLXkgKz0gY29yZS5vIHN5c2ZzLm8gcmFkaW90YXAubyB1dGlsLm8gcmVnLm8gc2Nhbi5vIG5sODAyMTEubworY2ZnODAyMTEteSArPSBtbG1lLm8gaWJzcy5vIHNtZS5vIGNoYW4ubwogY2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgKz0gZGVidWdmcy5vCi1jZmc4MDIxMS0kKENPTkZJR19XSVJFTEVTU19FWFQpICs9IHdleHQtY29tcGF0Lm8KK2NmZzgwMjExLSQoQ09ORklHX1dJUkVMRVNTX0VYVCkgKz0gd2V4dC1jb21wYXQubyB3ZXh0LXNtZS5vCiAKIGNjZmxhZ3MteSArPSAtRF9fQ0hFQ0tfRU5ESUFOX18KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jaGFuLmMgYi9uZXQvd2lyZWxlc3MvY2hhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NmFjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvd2lyZWxlc3MvY2hhbi5jCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgaGVscGVyIGNvZGUgdG8gaGFuZGxlIGNoYW5uZWwKKyAqIHNldHRpbmdzIGFuZCBrZWVwaW5nIHRyYWNrIG9mIHdoYXQgaXMgcG9zc2libGUgYXQKKyAqIGFueSBwb2ludCBpbiB0aW1lLgorICoKKyAqIENvcHlyaWdodCAyMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKi8KKworI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgorI2luY2x1ZGUgImNvcmUuaCIKKworc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICoKK3JkZXZfZml4ZWRfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCSAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKmZvcl93ZGV2KQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpyZXN1bHQgPSBOVUxMOworCisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZyZGV2LT5kZXZsaXN0X210eCkpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmcmRldi0+bmV0ZGV2X2xpc3QsIGxpc3QpIHsKKwkJaWYgKHdkZXYgPT0gZm9yX3dkZXYpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBMb2NrIG1hbnVhbGx5IHRvIHRlbGwgbG9ja2RlcCBhYm91dCBhbGxvd2VkCisJCSAqIG5lc3RpbmcgaGVyZSBpZiBmb3Jfd2Rldi0+bXR4IGlzIGhlbGQgYWxyZWFkeS4KKwkJICogVGhpcyBpcyBvayBhcyBpdCdzIGFsbCB1bmRlciB0aGUgcmRldiBkZXZsaXN0CisJCSAqIG11dGV4IGFuZCBhcyBzdWNoIGNhbiBvbmx5IGJlIGRvbmUgb25jZSBhdCBhbnkKKwkJICogZ2l2ZW4gdGltZS4KKwkJICovCisJCW11dGV4X2xvY2tfbmVzdGVkKCZ3ZGV2LT5tdHgsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwkJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKQorCQkJcmVzdWx0ID0gd2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5jaGFubmVsOworCQl3ZGV2X3VubG9jayh3ZGV2KTsKKworCQlpZiAocmVzdWx0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHJkZXZfc2V0X2ZyZXEoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgIHN0cnVjdCB3aXJlbGVzc19kZXYgKmZvcl93ZGV2LAorCQkgIGludCBmcmVxLCBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9jYXA7CisJaW50IHJlc3VsdDsKKworCWlmIChyZGV2X2ZpeGVkX2NoYW5uZWwocmRldiwgZm9yX3dkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFyZGV2LT5vcHMtPnNldF9jaGFubmVsKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKCZyZGV2LT53aXBoeSwgZnJlcSk7CisKKwkvKiBQcmltYXJ5IGNoYW5uZWwgbm90IGFsbG93ZWQgKi8KKwlpZiAoIWNoYW4gfHwgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgJiYKKwkgICAgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19IVDQwTUlOVVMpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgaWYgKGNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMgJiYKKwkJIGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSFQ0MFBMVVMpCisJCXJldHVybiAtRUlOVkFMOworCisJaHRfY2FwID0gJnJkZXYtPndpcGh5LmJhbmRzW2NoYW4tPmJhbmRdLT5odF9jYXA7CisKKwlpZiAoY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9OT19IVCkgeworCQlpZiAoIWh0X2NhcC0+aHRfc3VwcG9ydGVkKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKCEoaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkgfHwKKwkJICAgIGh0X2NhcC0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF80ME1IWl9JTlRPTEVSQU5UKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVzdWx0ID0gcmRldi0+b3BzLT5zZXRfY2hhbm5lbCgmcmRldi0+d2lwaHksIGNoYW4sIGNoYW5uZWxfdHlwZSk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJkZXYtPmNoYW5uZWwgPSBjaGFuOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCBkNTg1MDI5Li40NWIyYmUzIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KQEAgLTE5LDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAic3lzZnMuaCIKICNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisjaW5jbHVkZSAid2V4dC1jb21wYXQuaCIKIAogLyogbmFtZSBmb3Igc3lzZnMsICVkIGlzIGFwcGVuZGVkICovCiAjZGVmaW5lIFBIWV9OQU1FICJwaHkiCkBAIC0zMCwxMiArMzIsMTEgQEAKIC8qIFJDVSBtaWdodCBiZSBhcHByb3ByaWF0ZSBoZXJlIHNpbmNlIHdlIHVzdWFsbHkKICAqIG9ubHkgcmVhZCB0aGUgbGlzdCwgYW5kIHRoYXQgY2FuIGhhcHBlbiBxdWl0ZQogICogb2Z0ZW4gYmVjYXVzZSB3ZSBuZWVkIHRvIGRvIGl0IGZvciBlYWNoIGNvbW1hbmQgKi8KLUxJU1RfSEVBRChjZmc4MDIxMV9kcnZfbGlzdCk7CitMSVNUX0hFQUQoY2ZnODAyMTFfcmRldl9saXN0KTsKK2ludCBjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbjsKIAogLyoKLSAqIFRoaXMgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBjZmc4MDIxMV9kcnZfbGlzdCwgY2ZnODAyMTFfcmVnZG9tYWluLAotICogY291bnRyeV9pZV9yZWdkb21haW4sIHRoZSByZWdfYmVhY29uX2xpc3QgYW5kIHRoZSB0aGUgbGFzdCByZWd1bGF0b3J5Ci0gKiByZXF1ZXN0IHJlY2VpcHQgKGxhc3RfcmVxdWVzdCkuCisgKiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgY2ZnODAyMTFfcmRldl9saXN0CiAgKi8KIERFRklORV9NVVRFWChjZmc4MDIxMV9tdXRleCk7CiAKQEAgLTQzLDE4ICs0NCwxOCBAQAogc3RhdGljIHN0cnVjdCBkZW50cnkgKmllZWU4MDIxMV9kZWJ1Z2ZzX2RpcjsKIAogLyogcmVxdWlyZXMgY2ZnODAyMTFfbXV0ZXggdG8gYmUgaGVsZCEgKi8KLXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeChpbnQgd2lwaHlfaWR4KQorc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpjZmc4MDIxMV9yZGV2X2J5X3dpcGh5X2lkeChpbnQgd2lwaHlfaWR4KQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmVzdWx0ID0gTlVMTCwgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJlc3VsdCA9IE5VTEwsICpyZGV2OwogCiAJaWYgKCF3aXBoeV9pZHhfdmFsaWQod2lwaHlfaWR4KSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkgewotCQlpZiAoZHJ2LT53aXBoeV9pZHggPT0gd2lwaHlfaWR4KSB7Ci0JCQlyZXN1bHQgPSBkcnY7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmY2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KSB7CisJCWlmIChyZGV2LT53aXBoeV9pZHggPT0gd2lwaHlfaWR4KSB7CisJCQlyZXN1bHQgPSByZGV2OwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC02NCwzMiArNjUsMzIgQEAKIAogaW50IGdldF93aXBoeV9pZHgoc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJaWYgKCF3aXBoeSkKIAkJcmV0dXJuIFdJUEhZX0lEWF9TVEFMRTsKLQlkcnYgPSB3aXBoeV90b19kZXYod2lwaHkpOwotCXJldHVybiBkcnYtPndpcGh5X2lkeDsKKwlyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlyZXR1cm4gcmRldi0+d2lwaHlfaWR4OwogfQogCi0vKiByZXF1aXJlcyBjZmc4MDIxMV9kcnZfbXV0ZXggdG8gYmUgaGVsZCEgKi8KKy8qIHJlcXVpcmVzIGNmZzgwMjExX3JkZXZfbXV0ZXggdG8gYmUgaGVsZCEgKi8KIHN0cnVjdCB3aXBoeSAqd2lwaHlfaWR4X3RvX3dpcGh5KGludCB3aXBoeV9pZHgpCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCiAJaWYgKCF3aXBoeV9pZHhfdmFsaWQod2lwaHlfaWR4KSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOwogCi0JZHJ2ID0gY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeCh3aXBoeV9pZHgpOwotCWlmICghZHJ2KQorCXJkZXYgPSBjZmc4MDIxMV9yZGV2X2J5X3dpcGh5X2lkeCh3aXBoeV9pZHgpOworCWlmICghcmRldikKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuICZkcnYtPndpcGh5OworCXJldHVybiAmcmRldi0+d2lwaHk7CiB9CiAKIC8qIHJlcXVpcmVzIGNmZzgwMjExX211dGV4IHRvIGJlIGhlbGQhICovCiBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKgotX19jZmc4MDIxMV9kcnZfZnJvbV9pbmZvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCitfX2NmZzgwMjExX3JkZXZfZnJvbV9pbmZvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJaW50IGlmaW5kZXg7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpieXdpcGh5aWR4ID0gTlVMTCwgKmJ5aWZpZHggPSBOVUxMOwpAQCAtOTksMTQgKzEwMCwxNCBAQAogCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZXSkgewotCQlieXdpcGh5aWR4ID0gY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeCgKKwkJYnl3aXBoeWlkeCA9IGNmZzgwMjExX3JkZXZfYnlfd2lwaHlfaWR4KAogCQkJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV0pKTsKIAkJZXJyID0gLUVOT0RFVjsKIAl9CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lGSU5ERVhdKSB7CiAJCWlmaW5kZXggPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUZJTkRFWF0pOwotCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpbmRleCk7CisJCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoZ2VubF9pbmZvX25ldChpbmZvKSwgaWZpbmRleCk7CiAJCWlmIChkZXYpIHsKIAkJCWlmIChkZXYtPmllZWU4MDIxMV9wdHIpCiAJCQkJYnlpZmlkeCA9CkBAIC0xMzQsNTQgKzEzNSw0OCBAQAogc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoKIGNmZzgwMjExX2dldF9kZXZfZnJvbV9pbmZvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCiAJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwotCWRydiA9IF9fY2ZnODAyMTFfZHJ2X2Zyb21faW5mbyhpbmZvKTsKKwlyZGV2ID0gX19jZmc4MDIxMV9yZGV2X2Zyb21faW5mbyhpbmZvKTsKIAogCS8qIGlmIGl0IGlzIG5vdCBhbiBlcnJvciB3ZSBncmFiIHRoZSBsb2NrIG9uCiAJICogaXQgdG8gYXNzdXJlIGl0IHdvbid0IGJlIGdvaW5nIGF3YXkgd2hpbGUKIAkgKiB3ZSBvcGVyYXRlIG9uIGl0ICovCi0JaWYgKCFJU19FUlIoZHJ2KSkKLQkJbXV0ZXhfbG9jaygmZHJ2LT5tdHgpOworCWlmICghSVNfRVJSKHJkZXYpKQorCQltdXRleF9sb2NrKCZyZGV2LT5tdHgpOwogCiAJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKLQlyZXR1cm4gZHJ2OworCXJldHVybiByZGV2OwogfQogCiBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKgotY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoaW50IGlmaW5kZXgpCitjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZmluZGV4KQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gRVJSX1BUUigtRU5PREVWKTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBFUlJfUFRSKC1FTk9ERVYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKIAltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7Ci0JZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpOworCWRldiA9IGRldl9nZXRfYnlfaW5kZXgobmV0LCBpZmluZGV4KTsKIAlpZiAoIWRldikKIAkJZ290byBvdXQ7CiAJaWYgKGRldi0+aWVlZTgwMjExX3B0cikgewotCQlkcnYgPSB3aXBoeV90b19kZXYoZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeSk7Ci0JCW11dGV4X2xvY2soJmRydi0+bXR4KTsKKwkJcmRldiA9IHdpcGh5X3RvX2RldihkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5KTsKKwkJbXV0ZXhfbG9jaygmcmRldi0+bXR4KTsKIAl9IGVsc2UKLQkJZHJ2ID0gRVJSX1BUUigtRU5PREVWKTsKKwkJcmRldiA9IEVSUl9QVFIoLUVOT0RFVik7CiAJZGV2X3B1dChkZXYpOwogIG91dDoKIAltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKLQlyZXR1cm4gZHJ2OwotfQotCi12b2lkIGNmZzgwMjExX3B1dF9kZXYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYpCi17Ci0JQlVHX09OKElTX0VSUihkcnYpKTsKLQltdXRleF91bmxvY2soJmRydi0+bXR4KTsKKwlyZXR1cm4gcmRldjsKIH0KIAogLyogcmVxdWlyZXMgY2ZnODAyMTFfbXV0ZXggdG8gYmUgaGVsZCAqLwogaW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJY2hhciAqbmV3bmFtZSkKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYyOwogCWludCB3aXBoeV9pZHgsIHRha2VuID0gLTEsIHJlc3VsdCwgZGlnaXRzOwogCiAJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKQEAgLTIwNyw4ICsyMDIsOCBAQAogCQlyZXR1cm4gMDsKIAogCS8qIEVuc3VyZSBhbm90aGVyIGRldmljZSBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgdGhpcyBuYW1lLiAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpCi0JCWlmIChzdHJjbXAobmV3bmFtZSwgZGV2X25hbWUoJmRydi0+d2lwaHkuZGV2KSkgPT0gMCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYyLCAmY2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KQorCQlpZiAoc3RyY21wKG5ld25hbWUsIGRldl9uYW1lKCZyZGV2Mi0+d2lwaHkuZGV2KSkgPT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJcmVzdWx0ID0gZGV2aWNlX3JlbmFtZSgmcmRldi0+d2lwaHkuZGV2LCBuZXduYW1lKTsKQEAgLTIyOCwyOCArMjIzLDY0IEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICBzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKKwlpbnQgZXJyID0gMDsKKworCWlmICghcmRldi0+d2lwaHkubmV0bnNvaykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmcmRldi0+bmV0ZGV2X2xpc3QsIGxpc3QpIHsKKwkJd2Rldi0+bmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9ORVROU19MT0NBTDsKKwkJZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtPm5ldGRldiwgbmV0LCAid2xhbiVkIik7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwkJd2Rldi0+bmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOworCX0KKworCWlmIChlcnIpIHsKKwkJLyogZmFpbGVkIC0tIGNsZWFuIHVwIHRvIG9sZCBuZXRucyAqLworCQluZXQgPSB3aXBoeV9uZXQoJnJkZXYtPndpcGh5KTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2Uod2RldiwgJnJkZXYtPm5ldGRldl9saXN0LAorCQkJCQkJICAgICBsaXN0KSB7CisJCQl3ZGV2LT5uZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX05FVE5TX0xPQ0FMOworCQkJZXJyID0gZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKHdkZXYtPm5ldGRldiwgbmV0LAorCQkJCQkJCSJ3bGFuJWQiKTsKKwkJCVdBUk5fT04oZXJyKTsKKwkJCXdkZXYtPm5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ORVROU19MT0NBTDsKKwkJfQorCX0KKworCXdpcGh5X25ldF9zZXQoJnJkZXYtPndpcGh5LCBuZXQpOworCisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIHZvaWQgY2ZnODAyMTFfcmZraWxsX3BvbGwoc3RydWN0IHJma2lsbCAqcmZraWxsLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gZGF0YTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBkYXRhOwogCi0JZHJ2LT5vcHMtPnJma2lsbF9wb2xsKCZkcnYtPndpcGh5KTsKKwlyZGV2LT5vcHMtPnJma2lsbF9wb2xsKCZyZGV2LT53aXBoeSk7CiB9CiAKIHN0YXRpYyBpbnQgY2ZnODAyMTFfcmZraWxsX3NldF9ibG9jayh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYgPSBkYXRhOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGRhdGE7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKIAogCWlmICghYmxvY2tlZCkKIAkJcmV0dXJuIDA7CiAKIAlydG5sX2xvY2soKTsKLQltdXRleF9sb2NrKCZkcnYtPmRldmxpc3RfbXR4KTsKKwltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZkcnYtPm5ldGRldl9saXN0LCBsaXN0KQorCWxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgJnJkZXYtPm5ldGRldl9saXN0LCBsaXN0KQogCQlkZXZfY2xvc2Uod2Rldi0+bmV0ZGV2KTsKIAotCW11dGV4X3VubG9jaygmZHJ2LT5kZXZsaXN0X210eCk7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CiAJcnRubF91bmxvY2soKTsKIAogCXJldHVybiAwOwpAQCAtMjU3LDEwICsyODgsMjUgQEAKIAogc3RhdGljIHZvaWQgY2ZnODAyMTFfcmZraWxsX3N5bmNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCi0JZHJ2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSwgcmZraWxsX3N5bmMpOwotCWNmZzgwMjExX3Jma2lsbF9zZXRfYmxvY2soZHJ2LCByZmtpbGxfYmxvY2tlZChkcnYtPnJma2lsbCkpOworCXJkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlLCByZmtpbGxfc3luYyk7CisJY2ZnODAyMTFfcmZraWxsX3NldF9ibG9jayhyZGV2LCByZmtpbGxfYmxvY2tlZChyZGV2LT5yZmtpbGwpKTsKK30KKworc3RhdGljIHZvaWQgY2ZnODAyMTFfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCisJcmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UsCisJCQkgICAgZXZlbnRfd29yayk7CisKKwlydG5sX2xvY2soKTsKKwljZmc4MDIxMV9sb2NrX3JkZXYocmRldik7CisKKwljZmc4MDIxMV9wcm9jZXNzX3JkZXZfZXZlbnRzKHJkZXYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCXJ0bmxfdW5sb2NrKCk7CiB9CiAKIC8qIGV4cG9ydGVkIGZ1bmN0aW9ucyAqLwpAQCAtMjY5LDc2ICszMTUsOTAgQEAKIHsKIAlzdGF0aWMgaW50IHdpcGh5X2NvdW50ZXI7CiAKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJaW50IGFsbG9jX3NpemU7CiAKLQlXQVJOX09OKCFvcHMtPmFkZF9rZXkgJiYgb3BzLT5kZWxfa2V5KTsKLQlXQVJOX09OKG9wcy0+YWRkX2tleSAmJiAhb3BzLT5kZWxfa2V5KTsKKwlXQVJOX09OKG9wcy0+YWRkX2tleSAmJiAoIW9wcy0+ZGVsX2tleSB8fCAhb3BzLT5zZXRfZGVmYXVsdF9rZXkpKTsKKwlXQVJOX09OKG9wcy0+YXV0aCAmJiAoIW9wcy0+YXNzb2MgfHwgIW9wcy0+ZGVhdXRoIHx8ICFvcHMtPmRpc2Fzc29jKSk7CisJV0FSTl9PTihvcHMtPmNvbm5lY3QgJiYgIW9wcy0+ZGlzY29ubmVjdCk7CisJV0FSTl9PTihvcHMtPmpvaW5faWJzcyAmJiAhb3BzLT5sZWF2ZV9pYnNzKTsKKwlXQVJOX09OKG9wcy0+YWRkX3ZpcnR1YWxfaW50ZiAmJiAhb3BzLT5kZWxfdmlydHVhbF9pbnRmKTsKKwlXQVJOX09OKG9wcy0+YWRkX3N0YXRpb24gJiYgIW9wcy0+ZGVsX3N0YXRpb24pOworCVdBUk5fT04ob3BzLT5hZGRfbXBhdGggJiYgIW9wcy0+ZGVsX21wYXRoKTsKIAotCWFsbG9jX3NpemUgPSBzaXplb2YoKmRydikgKyBzaXplb2ZfcHJpdjsKKwlhbGxvY19zaXplID0gc2l6ZW9mKCpyZGV2KSArIHNpemVvZl9wcml2OwogCi0JZHJ2ID0ga3phbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRydikKKwlyZGV2ID0ga3phbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkZXYpCiAJCXJldHVybiBOVUxMOwogCi0JZHJ2LT5vcHMgPSBvcHM7CisJcmRldi0+b3BzID0gb3BzOwogCiAJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCi0JZHJ2LT53aXBoeV9pZHggPSB3aXBoeV9jb3VudGVyKys7CisJcmRldi0+d2lwaHlfaWR4ID0gd2lwaHlfY291bnRlcisrOwogCi0JaWYgKHVubGlrZWx5KCF3aXBoeV9pZHhfdmFsaWQoZHJ2LT53aXBoeV9pZHgpKSkgeworCWlmICh1bmxpa2VseSghd2lwaHlfaWR4X3ZhbGlkKHJkZXYtPndpcGh5X2lkeCkpKSB7CiAJCXdpcGh5X2NvdW50ZXItLTsKIAkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJCS8qIHVnaCwgd3JhcHBlZCEgKi8KLQkJa2ZyZWUoZHJ2KTsKKwkJa2ZyZWUocmRldik7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJLyogZ2l2ZSBpdCBhIHByb3BlciBuYW1lICovCi0JZGV2X3NldF9uYW1lKCZkcnYtPndpcGh5LmRldiwgUEhZX05BTUUgIiVkIiwgZHJ2LT53aXBoeV9pZHgpOworCWRldl9zZXRfbmFtZSgmcmRldi0+d2lwaHkuZGV2LCBQSFlfTkFNRSAiJWQiLCByZGV2LT53aXBoeV9pZHgpOwogCi0JbXV0ZXhfaW5pdCgmZHJ2LT5tdHgpOwotCW11dGV4X2luaXQoJmRydi0+ZGV2bGlzdF9tdHgpOwotCUlOSVRfTElTVF9IRUFEKCZkcnYtPm5ldGRldl9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmZHJ2LT5ic3NfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRydi0+YnNzX2xpc3QpOworCW11dGV4X2luaXQoJnJkZXYtPm10eCk7CisJbXV0ZXhfaW5pdCgmcmRldi0+ZGV2bGlzdF9tdHgpOworCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5uZXRkZXZfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJnJkZXYtPmJzc19sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcmRldi0+YnNzX2xpc3QpOworCUlOSVRfV09SSygmcmRldi0+c2Nhbl9kb25lX3drLCBfX2NmZzgwMjExX3NjYW5fZG9uZSk7CiAKLQlkZXZpY2VfaW5pdGlhbGl6ZSgmZHJ2LT53aXBoeS5kZXYpOwotCWRydi0+d2lwaHkuZGV2LmNsYXNzID0gJmllZWU4MDIxMV9jbGFzczsKLQlkcnYtPndpcGh5LmRldi5wbGF0Zm9ybV9kYXRhID0gZHJ2OworCWRldmljZV9pbml0aWFsaXplKCZyZGV2LT53aXBoeS5kZXYpOworCXJkZXYtPndpcGh5LmRldi5jbGFzcyA9ICZpZWVlODAyMTFfY2xhc3M7CisJcmRldi0+d2lwaHkuZGV2LnBsYXRmb3JtX2RhdGEgPSByZGV2OwogCi0JZHJ2LT5yZmtpbGxfb3BzLnNldF9ibG9jayA9IGNmZzgwMjExX3Jma2lsbF9zZXRfYmxvY2s7Ci0JZHJ2LT5yZmtpbGwgPSByZmtpbGxfYWxsb2MoZGV2X25hbWUoJmRydi0+d2lwaHkuZGV2KSwKLQkJCQkgICAmZHJ2LT53aXBoeS5kZXYsIFJGS0lMTF9UWVBFX1dMQU4sCi0JCQkJICAgJmRydi0+cmZraWxsX29wcywgZHJ2KTsKKwlyZGV2LT53aXBoeS5wc19kZWZhdWx0ID0gQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU7CiAKLQlpZiAoIWRydi0+cmZraWxsKSB7Ci0JCWtmcmVlKGRydik7CisJd2lwaHlfbmV0X3NldCgmcmRldi0+d2lwaHksICZpbml0X25ldCk7CisKKwlyZGV2LT5yZmtpbGxfb3BzLnNldF9ibG9jayA9IGNmZzgwMjExX3Jma2lsbF9zZXRfYmxvY2s7CisJcmRldi0+cmZraWxsID0gcmZraWxsX2FsbG9jKGRldl9uYW1lKCZyZGV2LT53aXBoeS5kZXYpLAorCQkJCSAgICZyZGV2LT53aXBoeS5kZXYsIFJGS0lMTF9UWVBFX1dMQU4sCisJCQkJICAgJnJkZXYtPnJma2lsbF9vcHMsIHJkZXYpOworCisJaWYgKCFyZGV2LT5yZmtpbGwpIHsKKwkJa2ZyZWUocmRldik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCUlOSVRfV09SSygmZHJ2LT5yZmtpbGxfc3luYywgY2ZnODAyMTFfcmZraWxsX3N5bmNfd29yayk7CisJSU5JVF9XT1JLKCZyZGV2LT5yZmtpbGxfc3luYywgY2ZnODAyMTFfcmZraWxsX3N5bmNfd29yayk7CisJSU5JVF9XT1JLKCZyZGV2LT5jb25uX3dvcmssIGNmZzgwMjExX2Nvbm5fd29yayk7CisJSU5JVF9XT1JLKCZyZGV2LT5ldmVudF93b3JrLCBjZmc4MDIxMV9ldmVudF93b3JrKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJkZXYtPmRldl93YWl0KTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSB3aXBoeSBwYXJhbWV0ZXJzIHRvIElFRUUgODAyLjExIE1JQiBkZWZhdWx0IHZhbHVlcy4KIAkgKiBGcmFnbWVudGF0aW9uIGFuZCBSVFMgdGhyZXNob2xkIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0IHdpdGggdGhlCiAJICogc3BlY2lhbCAtMSB2YWx1ZS4KIAkgKi8KLQlkcnYtPndpcGh5LnJldHJ5X3Nob3J0ID0gNzsKLQlkcnYtPndpcGh5LnJldHJ5X2xvbmcgPSA0OwotCWRydi0+d2lwaHkuZnJhZ190aHJlc2hvbGQgPSAodTMyKSAtMTsKLQlkcnYtPndpcGh5LnJ0c190aHJlc2hvbGQgPSAodTMyKSAtMTsKKwlyZGV2LT53aXBoeS5yZXRyeV9zaG9ydCA9IDc7CisJcmRldi0+d2lwaHkucmV0cnlfbG9uZyA9IDQ7CisJcmRldi0+d2lwaHkuZnJhZ190aHJlc2hvbGQgPSAodTMyKSAtMTsKKwlyZGV2LT53aXBoeS5ydHNfdGhyZXNob2xkID0gKHUzMikgLTE7CiAKLQlyZXR1cm4gJmRydi0+d2lwaHk7CisJcmV0dXJuICZyZGV2LT53aXBoeTsKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfbmV3KTsKIAogaW50IHdpcGh5X3JlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CiAJaW50IHJlczsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CkBAIC0zNDYsOSArNDA2LDYgQEAKIAlpbnQgaTsKIAl1MTYgaWZtb2RlcyA9IHdpcGh5LT5pbnRlcmZhY2VfbW9kZXM7CiAKLQlpZiAoV0FSTl9PTih3aXBoeS0+bWF4X3NjYW5fc3NpZHMgPCAxKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKiBzYW5pdHkgY2hlY2sgaWZtb2RlcyAqLwogCVdBUk5fT04oIWlmbW9kZXMpOwogCWlmbW9kZXMgJj0gKCgxIDw8IF9fTkw4MDIxMV9JRlRZUEVfQUZURVJfTEFTVCkgLSAxKSAmIH4xOwpAQCAtMzk1LDExICs0NTIsMTEgQEAKIAkvKiBjaGVjayBhbmQgc2V0IHVwIGJpdHJhdGVzICovCiAJaWVlZTgwMjExX3NldF9iaXRyYXRlX2ZsYWdzKHdpcGh5KTsKIAotCXJlcyA9IGRldmljZV9hZGQoJmRydi0+d2lwaHkuZGV2KTsKKwlyZXMgPSBkZXZpY2VfYWRkKCZyZGV2LT53aXBoeS5kZXYpOwogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKLQlyZXMgPSByZmtpbGxfcmVnaXN0ZXIoZHJ2LT5yZmtpbGwpOworCXJlcyA9IHJma2lsbF9yZWdpc3RlcihyZGV2LT5yZmtpbGwpOwogCWlmIChyZXMpCiAJCWdvdG8gb3V0X3JtX2RldjsKIApAQCAtNDA4LDE2ICs0NjUsMTcgQEAKIAkvKiBzZXQgdXAgcmVndWxhdG9yeSBpbmZvICovCiAJd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkod2lwaHksIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFKTsKIAotCWxpc3RfYWRkKCZkcnYtPmxpc3QsICZjZmc4MDIxMV9kcnZfbGlzdCk7CisJbGlzdF9hZGQoJnJkZXYtPmxpc3QsICZjZmc4MDIxMV9yZGV2X2xpc3QpOworCWNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uKys7CiAKIAltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAogCS8qIGFkZCB0byBkZWJ1Z2ZzICovCi0JZHJ2LT53aXBoeS5kZWJ1Z2ZzZGlyID0KLQkJZGVidWdmc19jcmVhdGVfZGlyKHdpcGh5X25hbWUoJmRydi0+d2lwaHkpLAorCXJkZXYtPndpcGh5LmRlYnVnZnNkaXIgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIod2lwaHlfbmFtZSgmcmRldi0+d2lwaHkpLAogCQkJCSAgIGllZWU4MDIxMV9kZWJ1Z2ZzX2Rpcik7Ci0JaWYgKElTX0VSUihkcnYtPndpcGh5LmRlYnVnZnNkaXIpKQotCQlkcnYtPndpcGh5LmRlYnVnZnNkaXIgPSBOVUxMOworCWlmIChJU19FUlIocmRldi0+d2lwaHkuZGVidWdmc2RpcikpCisJCXJkZXYtPndpcGh5LmRlYnVnZnNkaXIgPSBOVUxMOwogCiAJaWYgKHdpcGh5LT5jdXN0b21fcmVndWxhdG9yeSkgewogCQlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0IHJlcXVlc3Q7CkBAIC00MzAsODMgKzQ4OCwxMDEgQEAKIAkJbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoJnJlcXVlc3QpOwogCX0KIAotCWNmZzgwMjExX2RlYnVnZnNfZHJ2X2FkZChkcnYpOworCWNmZzgwMjExX2RlYnVnZnNfcmRldl9hZGQocmRldik7CiAKIAlyZXR1cm4gMDsKIAogIG91dF9ybV9kZXY6Ci0JZGV2aWNlX2RlbCgmZHJ2LT53aXBoeS5kZXYpOworCWRldmljZV9kZWwoJnJkZXYtPndpcGh5LmRldik7CiAJcmV0dXJuIHJlczsKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfcmVnaXN0ZXIpOwogCiB2b2lkIHdpcGh5X3Jma2lsbF9zdGFydF9wb2xsaW5nKHN0cnVjdCB3aXBoeSAqd2lwaHkpCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CiAKLQlpZiAoIWRydi0+b3BzLT5yZmtpbGxfcG9sbCkKKwlpZiAoIXJkZXYtPm9wcy0+cmZraWxsX3BvbGwpCiAJCXJldHVybjsKLQlkcnYtPnJma2lsbF9vcHMucG9sbCA9IGNmZzgwMjExX3Jma2lsbF9wb2xsOwotCXJma2lsbF9yZXN1bWVfcG9sbGluZyhkcnYtPnJma2lsbCk7CisJcmRldi0+cmZraWxsX29wcy5wb2xsID0gY2ZnODAyMTFfcmZraWxsX3BvbGw7CisJcmZraWxsX3Jlc3VtZV9wb2xsaW5nKHJkZXYtPnJma2lsbCk7CiB9CiBFWFBPUlRfU1lNQk9MKHdpcGh5X3Jma2lsbF9zdGFydF9wb2xsaW5nKTsKIAogdm9pZCB3aXBoeV9yZmtpbGxfc3RvcF9wb2xsaW5nKHN0cnVjdCB3aXBoeSAqd2lwaHkpCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CiAKLQlyZmtpbGxfcGF1c2VfcG9sbGluZyhkcnYtPnJma2lsbCk7CisJcmZraWxsX3BhdXNlX3BvbGxpbmcocmRldi0+cmZraWxsKTsKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfcmZraWxsX3N0b3BfcG9sbGluZyk7CiAKIHZvaWQgd2lwaHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOwogCi0JcmZraWxsX3VucmVnaXN0ZXIoZHJ2LT5yZmtpbGwpOworCXJma2lsbF91bnJlZ2lzdGVyKHJkZXYtPnJma2lsbCk7CiAKIAkvKiBwcm90ZWN0IHRoZSBkZXZpY2UgbGlzdCAqLwogCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAotCUJVR19PTighbGlzdF9lbXB0eSgmZHJ2LT5uZXRkZXZfbGlzdCkpOworCXdhaXRfZXZlbnQocmRldi0+ZGV2X3dhaXQsICh7CisJCWludCBfX2NvdW50OworCQltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJCV9fY291bnQgPSByZGV2LT5vcGVuY291bnQ7CisJCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCQlfX2NvdW50ID09IDA7fSkpOworCisJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCUJVR19PTighbGlzdF9lbXB0eSgmcmRldi0+bmV0ZGV2X2xpc3QpKTsKKwltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKIAogCS8qCi0JICogVHJ5IHRvIGdyYWIgZHJ2LT5tdHguIElmIGEgY29tbWFuZCBpcyBzdGlsbCBpbiBwcm9ncmVzcywKKwkgKiBGaXJzdCByZW1vdmUgdGhlIGhhcmR3YXJlIGZyb20gZXZlcnl3aGVyZSwgdGhpcyBtYWtlcworCSAqIGl0IGltcG9zc2libGUgdG8gZmluZCBmcm9tIHVzZXJzcGFjZS4KKwkgKi8KKwljZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfZGVsKHJkZXYpOworCWxpc3RfZGVsKCZyZGV2LT5saXN0KTsKKworCS8qCisJICogVHJ5IHRvIGdyYWIgcmRldi0+bXR4LiBJZiBhIGNvbW1hbmQgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MsCiAJICogaG9wZWZ1bGx5IHRoZSBkcml2ZXIgd2lsbCByZWZ1c2UgaXQgc2luY2UgaXQncyB0ZWFyaW5nCiAJICogZG93biB0aGUgZGV2aWNlIGFscmVhZHkuIFdlIHdhaXQgZm9yIHRoaXMgY29tbWFuZCB0byBjb21wbGV0ZQogCSAqIGJlZm9yZSB1bmxpbmtpbmcgdGhlIGl0ZW0gZnJvbSB0aGUgbGlzdC4KIAkgKiBOb3RlOiBhcyBjb2RpZmllZCBieSB0aGUgQlVHX09OIGFib3ZlIHdlIGNhbm5vdCBnZXQgaGVyZSBpZgotCSAqIGEgdmlydHVhbCBpbnRlcmZhY2UgaXMgc3RpbGwgYXNzb2NpYXRlZC4gSGVuY2UsIHdlIGNhbiBvbmx5Ci0JICogZ2V0IHRvIGxvY2sgY29udGVudGlvbiBoZXJlIGlmIHVzZXJzcGFjZSBpc3N1ZXMgYSBjb21tYW5kCi0JICogdGhhdCBpZGVudGlmaWVkIHRoZSBoYXJkd2FyZSBieSB3aXBoeSBpbmRleC4KKwkgKiBhIHZpcnR1YWwgaW50ZXJmYWNlIGlzIHN0aWxsIHByZXNlbnQuIEhlbmNlLCB3ZSBjYW4gb25seSBnZXQKKwkgKiB0byBsb2NrIGNvbnRlbnRpb24gaGVyZSBpZiB1c2Vyc3BhY2UgaXNzdWVzIGEgY29tbWFuZCB0aGF0CisJICogaWRlbnRpZmllZCB0aGUgaGFyZHdhcmUgYnkgd2lwaHkgaW5kZXguCiAJICovCi0JbXV0ZXhfbG9jaygmZHJ2LT5tdHgpOwotCS8qIHVubG9jayBhZ2FpbiBiZWZvcmUgZnJlZWluZyAqLwotCW11dGV4X3VubG9jaygmZHJ2LT5tdHgpOwotCi0JY2ZnODAyMTFfZGVidWdmc19kcnZfZGVsKGRydik7CisJY2ZnODAyMTFfbG9ja19yZGV2KHJkZXYpOworCS8qIG5vdGhpbmcgKi8KKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAogCS8qIElmIHRoaXMgZGV2aWNlIGdvdCBhIHJlZ3VsYXRvcnkgaGludCB0ZWxsIGNvcmUgaXRzCiAJICogZnJlZSB0byBsaXN0ZW4gbm93IHRvIGEgbmV3IHNoaW55IGRldmljZSByZWd1bGF0b3J5IGhpbnQgKi8KIAlyZWdfZGV2aWNlX3JlbW92ZSh3aXBoeSk7CiAKLQlsaXN0X2RlbCgmZHJ2LT5saXN0KTsKLQlkZXZpY2VfZGVsKCZkcnYtPndpcGh5LmRldik7Ci0JZGVidWdmc19yZW1vdmUoZHJ2LT53aXBoeS5kZWJ1Z2ZzZGlyKTsKKwljZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbisrOworCWRldmljZV9kZWwoJnJkZXYtPndpcGh5LmRldik7CisJZGVidWdmc19yZW1vdmUocmRldi0+d2lwaHkuZGVidWdmc2Rpcik7CiAKIAltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKworCWZsdXNoX3dvcmsoJnJkZXYtPnNjYW5fZG9uZV93ayk7CisJY2FuY2VsX3dvcmtfc3luYygmcmRldi0+Y29ubl93b3JrKTsKKwlmbHVzaF93b3JrKCZyZGV2LT5ldmVudF93b3JrKTsKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfdW5yZWdpc3Rlcik7CiAKLXZvaWQgY2ZnODAyMTFfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYpCit2b2lkIGNmZzgwMjExX2Rldl9mcmVlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpzY2FuLCAqdG1wOwotCXJma2lsbF9kZXN0cm95KGRydi0+cmZraWxsKTsKLQltdXRleF9kZXN0cm95KCZkcnYtPm10eCk7Ci0JbXV0ZXhfZGVzdHJveSgmZHJ2LT5kZXZsaXN0X210eCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjYW4sIHRtcCwgJmRydi0+YnNzX2xpc3QsIGxpc3QpCisJcmZraWxsX2Rlc3Ryb3kocmRldi0+cmZraWxsKTsKKwltdXRleF9kZXN0cm95KCZyZGV2LT5tdHgpOworCW11dGV4X2Rlc3Ryb3koJnJkZXYtPmRldmxpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2NhbiwgdG1wLCAmcmRldi0+YnNzX2xpc3QsIGxpc3QpCiAJCWNmZzgwMjExX3B1dF9ic3MoJnNjYW4tPnB1Yik7Ci0Ja2ZyZWUoZHJ2KTsKKwlrZnJlZShyZGV2KTsKIH0KIAogdm9pZCB3aXBoeV9mcmVlKHN0cnVjdCB3aXBoeSAqd2lwaHkpCkBAIC01MTcsNjggKzU5MywxODEgQEAKIAogdm9pZCB3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKHN0cnVjdCB3aXBoeSAqd2lwaHksIGJvb2wgYmxvY2tlZCkKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKIAotCWlmIChyZmtpbGxfc2V0X2h3X3N0YXRlKGRydi0+cmZraWxsLCBibG9ja2VkKSkKLQkJc2NoZWR1bGVfd29yaygmZHJ2LT5yZmtpbGxfc3luYyk7CisJaWYgKHJma2lsbF9zZXRfaHdfc3RhdGUocmRldi0+cmZraWxsLCBibG9ja2VkKSkKKwkJc2NoZWR1bGVfd29yaygmcmRldi0+cmZraWxsX3N5bmMpOwogfQogRVhQT1JUX1NZTUJPTCh3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKTsKIAorc3RhdGljIHZvaWQgd2Rldl9jbGVhbnVwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCisJd2RldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2LCBjbGVhbnVwX3dvcmspOworCXJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCisJY2ZnODAyMTFfbG9ja19yZGV2KHJkZXYpOworCisJaWYgKFdBUk5fT04ocmRldi0+c2Nhbl9yZXEgJiYgcmRldi0+c2Nhbl9yZXEtPmRldiA9PSB3ZGV2LT5uZXRkZXYpKSB7CisJCXJkZXYtPnNjYW5fcmVxLT5hYm9ydGVkID0gdHJ1ZTsKKwkJX19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIHRydWUpOworCX0KKworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCisJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCXJkZXYtPm9wZW5jb3VudC0tOworCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCXdha2VfdXAoJnJkZXYtPmRldl93YWl0KTsKKworCWRldl9wdXQod2Rldi0+bmV0ZGV2KTsKK30KKwogc3RhdGljIGludCBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuYiwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgc3RhdGUsCiAJCQkJCSB2b2lkICpuZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZGV2OworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCi0JaWYgKCFkZXYtPmllZWU4MDIxMV9wdHIpCisJaWYgKCF3ZGV2KQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKLQlyZGV2ID0gd2lwaHlfdG9fZGV2KGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHkpOworCXJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOwogCi0JV0FSTl9PTihkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCk7CisJV0FSTl9PTih3ZGV2LT5pZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpOwogCiAJc3dpdGNoIChzdGF0ZSkgewogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgorCQkvKgorCQkgKiBOQjogY2Fubm90IHRha2UgcmRldi0+bXR4IGhlcmUgYmVjYXVzZSB0aGlzIG1heSBiZQorCQkgKiBjYWxsZWQgd2l0aGluIGNvZGUgcHJvdGVjdGVkIGJ5IGl0IHdoZW4gaW50ZXJmYWNlcworCQkgKiBhcmUgYWRkZWQgd2l0aCBubDgwMjExLgorCQkgKi8KKwkJbXV0ZXhfaW5pdCgmd2Rldi0+bXR4KTsKKwkJSU5JVF9XT1JLKCZ3ZGV2LT5jbGVhbnVwX3dvcmssIHdkZXZfY2xlYW51cF93b3JrKTsKKwkJSU5JVF9MSVNUX0hFQUQoJndkZXYtPmV2ZW50X2xpc3QpOworCQlzcGluX2xvY2tfaW5pdCgmd2Rldi0+ZXZlbnRfbG9jayk7CiAJCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKLQkJbGlzdF9hZGQoJmRldi0+aWVlZTgwMjExX3B0ci0+bGlzdCwgJnJkZXYtPm5ldGRldl9saXN0KTsKKwkJbGlzdF9hZGQoJndkZXYtPmxpc3QsICZyZGV2LT5uZXRkZXZfbGlzdCk7CisJCXJkZXYtPmRldmxpc3RfZ2VuZXJhdGlvbisrOworCQkvKiBjYW4gb25seSBjaGFuZ2UgbmV0bnMgd2l0aCB3aXBoeSAqLworCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTkVUTlNfTE9DQUw7CisKIAkJaWYgKHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXYtPmRldi5rb2JqLCAmcmRldi0+d2lwaHkuZGV2LmtvYmosCiAJCQkJICAgICAgInBoeTgwMjExIikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAid2lyZWxlc3M6IGZhaWxlZCB0byBhZGQgcGh5ODAyMTEgIgogCQkJCSJzeW1saW5rIHRvIG5ldGRldiFcbiIpOwogCQl9Ci0JCWRldi0+aWVlZTgwMjExX3B0ci0+bmV0ZGV2ID0gZGV2OwotI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKLQkJZGV2LT5pZWVlODAyMTFfcHRyLT53ZXh0LmRlZmF1bHRfa2V5ID0gLTE7Ci0JCWRldi0+aWVlZTgwMjExX3B0ci0+d2V4dC5kZWZhdWx0X21nbXRfa2V5ID0gLTE7Ci0jZW5kaWYKKwkJd2Rldi0+bmV0ZGV2ID0gZGV2OworCQl3ZGV2LT5zbWVfc3RhdGUgPSBDRkc4MDIxMV9TTUVfSURMRTsKIAkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAorCQlpZiAoIWRldi0+d2lyZWxlc3NfaGFuZGxlcnMpCisJCQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmNmZzgwMjExX3dleHRfaGFuZGxlcjsKKwkJd2Rldi0+d2V4dC5kZWZhdWx0X2tleSA9IC0xOworCQl3ZGV2LT53ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSAtMTsKKwkJd2Rldi0+d2V4dC5jb25uZWN0LmF1dGhfdHlwZSA9IE5MODAyMTFfQVVUSFRZUEVfQVVUT01BVElDOworCQl3ZGV2LT53ZXh0LnBzID0gd2Rldi0+d2lwaHktPnBzX2RlZmF1bHQ7CisJCXdkZXYtPndleHQucHNfdGltZW91dCA9IDEwMDsKKwkJaWYgKHJkZXYtPm9wcy0+c2V0X3Bvd2VyX21nbXQpCisJCQlpZiAocmRldi0+b3BzLT5zZXRfcG93ZXJfbWdtdCh3ZGV2LT53aXBoeSwgZGV2LAorCQkJCQkJICAgICAgd2Rldi0+d2V4dC5wcywKKwkJCQkJCSAgICAgIHdkZXYtPndleHQucHNfdGltZW91dCkpIHsKKwkJCQkvKiBhc3N1bWUgdGhpcyBtZWFucyBpdCdzIG9mZiAqLworCQkJCXdkZXYtPndleHQucHMgPSBmYWxzZTsKKwkJCX0KKyNlbmRpZgogCQlicmVhazsKIAljYXNlIE5FVERFVl9HT0lOR19ET1dOOgotCQlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXN3aXRjaCAod2Rldi0+aWZ0eXBlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCQljZmc4MDIxMV9sZWF2ZV9pYnNzKHJkZXYsIGRldiwgdHJ1ZSk7CiAJCQlicmVhazsKLQkJaWYgKCFkZXYtPmllZWU4MDIxMV9wdHItPnNzaWRfbGVuKQorCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCQl3ZGV2X2xvY2sod2Rldik7CisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAorCQkJa2ZyZWUod2Rldi0+d2V4dC5pZSk7CisJCQl3ZGV2LT53ZXh0LmllID0gTlVMTDsKKwkJCXdkZXYtPndleHQuaWVfbGVuID0gMDsKKwkJCXdkZXYtPndleHQuY29ubmVjdC5hdXRoX3R5cGUgPSBOTDgwMjExX0FVVEhUWVBFX0FVVE9NQVRJQzsKKyNlbmRpZgorCQkJX19jZmc4MDIxMV9kaXNjb25uZWN0KHJkZXYsIGRldiwKKwkJCQkJICAgICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcsIHRydWUpOworCQkJY2ZnODAyMTFfbWxtZV9kb3duKHJkZXYsIGRldik7CisJCQl3ZGV2X3VubG9jayh3ZGV2KTsKIAkJCWJyZWFrOwotCQljZmc4MDIxMV9sZWF2ZV9pYnNzKHJkZXYsIGRldiwgdHJ1ZSk7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIE5FVERFVl9ET1dOOgorCQlkZXZfaG9sZChkZXYpOworCQlzY2hlZHVsZV93b3JrKCZ3ZGV2LT5jbGVhbnVwX3dvcmspOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9VUDoKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBhIHJlYWxseSBxdWljayBET1dOL1VQIHN1Y2Nlc3Npb24gd2UgbWF5CisJCSAqIGhhdmUgdGhpcyB3b3JrIHN0aWxsIHBlbmRpbmcgLi4uIGNhbmNlbCBpdCBhbmQgc2VlCisJCSAqIGlmIGl0IHdhcyBwZW5kaW5nLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gYWNjb3VudAorCQkgKiBmb3Igc29tZSBvZiB0aGUgd29yayBpdCB3b3VsZCBoYXZlIGRvbmUuCisJCSAqLworCQlpZiAoY2FuY2VsX3dvcmtfc3luYygmd2Rldi0+Y2xlYW51cF93b3JrKSkgeworCQkJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCQkJcmRldi0+b3BlbmNvdW50LS07CisJCQltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwkJCWRldl9wdXQoZGV2KTsKKwkJfQogI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKLQkJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJYnJlYWs7Ci0JCWlmICghZGV2LT5pZWVlODAyMTFfcHRyLT53ZXh0Lmlic3Muc3NpZF9sZW4pCi0JCQlicmVhazsKLQkJY2ZnODAyMTFfam9pbl9pYnNzKHJkZXYsIGRldiwgJmRldi0+aWVlZTgwMjExX3B0ci0+d2V4dC5pYnNzKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgorCQljZmc4MDIxMV9sb2NrX3JkZXYocmRldik7CiAJCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZkZXYtPmllZWU4MDIxMV9wdHItPmxpc3QpKSB7CisJCXdkZXZfbG9jayh3ZGV2KTsKKwkJc3dpdGNoICh3ZGV2LT5pZnR5cGUpIHsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCWNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHJkZXYsIHdkZXYpOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCWNmZzgwMjExX21nZF93ZXh0X2Nvbm5lY3QocmRldiwgd2Rldik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCXdkZXZfdW5sb2NrKHdkZXYpOworCQlyZGV2LT5vcGVuY291bnQrKzsKKwkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgTkVUREVWX1VOUkVHSVNURVI6CisJCS8qCisJCSAqIE5COiBjYW5ub3QgdGFrZSByZGV2LT5tdHggaGVyZSBiZWNhdXNlIHRoaXMgbWF5IGJlCisJCSAqIGNhbGxlZCB3aXRoaW4gY29kZSBwcm90ZWN0ZWQgYnkgaXQgd2hlbiBpbnRlcmZhY2VzCisJCSAqIGFyZSByZW1vdmVkIHdpdGggbmw4MDIxMS4KKwkJICovCisJCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwkJLyoKKwkJICogSXQgaXMgcG9zc2libGUgdG8gZ2V0IE5FVERFVl9VTlJFR0lTVEVSCisJCSAqIG11bHRpcGxlIHRpbWVzLiBUbyBkZXRlY3QgdGhhdCwgY2hlY2sKKwkJICogdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHN0aWxsIG9uIHRoZSBsaXN0CisJCSAqIG9mIHJlZ2lzdGVyZWQgaW50ZXJmYWNlcywgYW5kIG9ubHkgdGhlbgorCQkgKiByZW1vdmUgYW5kIGNsZWFuIGl0IHVwLgorCQkgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZ3ZGV2LT5saXN0KSkgewogCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldi0+ZGV2LmtvYmosICJwaHk4MDIxMSIpOwotCQkJbGlzdF9kZWxfaW5pdCgmZGV2LT5pZWVlODAyMTFfcHRyLT5saXN0KTsKKwkJCWxpc3RfZGVsX2luaXQoJndkZXYtPmxpc3QpOworCQkJcmRldi0+ZGV2bGlzdF9nZW5lcmF0aW9uKys7CisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAorCQkJa2ZyZWUod2Rldi0+d2V4dC5rZXlzKTsKKyNlbmRpZgogCQl9CiAJCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9QUkVfVVA6CisJCWlmICghKHdkZXYtPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQod2Rldi0+aWZ0eXBlKSkpCisJCQlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubygtRU9QTk9UU1VQUCk7CiAJCWlmIChyZmtpbGxfYmxvY2tlZChyZGV2LT5yZmtpbGwpKQogCQkJcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oLUVSRktJTEwpOwogCQlicmVhazsKQEAgLTU5MSwxMCArNzgwLDMyIEBACiAJLm5vdGlmaWVyX2NhbGwgPSBjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXJfY2FsbCwKIH07CiAKLXN0YXRpYyBpbnQgY2ZnODAyMTFfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBjZmc4MDIxMV9wZXJuZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCisJcnRubF9sb2NrKCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkgeworCQlpZiAobmV0X2VxKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBuZXQpKQorCQkJV0FSTl9PTihjZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgJmluaXRfbmV0KSk7CisJfQorCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCXJ0bmxfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgY2ZnODAyMTFfcGVybmV0X29wcyA9IHsKKwkuZXhpdCA9IGNmZzgwMjExX3Blcm5ldF9leGl0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2ZnODAyMTFfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZjZmc4MDIxMV9wZXJuZXRfb3BzKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mYWlsX3Blcm5ldDsKKwogCWVyciA9IHdpcGh5X3N5c2ZzX2luaXQoKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mYWlsX3N5c2ZzOwpAQCAtNjIyLDkgKzgzMywxMCBAQAogb3V0X2ZhaWxfbm90aWZpZXI6CiAJd2lwaHlfc3lzZnNfZXhpdCgpOwogb3V0X2ZhaWxfc3lzZnM6CisJdW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZjZmc4MDIxMV9wZXJuZXRfb3BzKTsKK291dF9mYWlsX3Blcm5ldDoKIAlyZXR1cm4gZXJyOwogfQotCiBzdWJzeXNfaW5pdGNhbGwoY2ZnODAyMTFfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIGNmZzgwMjExX2V4aXQodm9pZCkKQEAgLTYzNCw1ICs4NDYsNiBAQAogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZjZmc4MDIxMV9uZXRkZXZfbm90aWZpZXIpOwogCXdpcGh5X3N5c2ZzX2V4aXQoKTsKIAlyZWd1bGF0b3J5X2V4aXQoKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmNmZzgwMjExX3Blcm5ldF9vcHMpOwogfQogbW9kdWxlX2V4aXQoY2ZnODAyMTFfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaAppbmRleCBiZmEzNDBjLi4yYTMzZDhiIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmgKQEAgLTQ5LDYgKzQ5LDkgQEAKIAkvKiBhc3NvY2lhdGUgbmV0ZGV2IGxpc3QgKi8KIAlzdHJ1Y3QgbXV0ZXggZGV2bGlzdF9tdHg7CiAJc3RydWN0IGxpc3RfaGVhZCBuZXRkZXZfbGlzdDsKKwlpbnQgZGV2bGlzdF9nZW5lcmF0aW9uOworCWludCBvcGVuY291bnQ7IC8qIGFsc28gcHJvdGVjdGVkIGJ5IGRldmxpc3RfbXR4ICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgZGV2X3dhaXQ7CiAKIAkvKiBCU1Nlcy9zY2FubmluZyAqLwogCXNwaW5sb2NrX3QgYnNzX2xvY2s7CkBAIC01Nyw2ICs2MCwxNyBAQAogCXUzMiBic3NfZ2VuZXJhdGlvbjsKIAlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcTsgLyogcHJvdGVjdGVkIGJ5IFJUTkwgKi8KIAl1bnNpZ25lZCBsb25nIHN1c3BlbmRfYXQ7CisJc3RydWN0IHdvcmtfc3RydWN0IHNjYW5fZG9uZV93azsKKworI2lmZGVmIENPTkZJR19OTDgwMjExX1RFU1RNT0RFCisJc3RydWN0IGdlbmxfaW5mbyAqdGVzdG1vZGVfaW5mbzsKKyNlbmRpZgorCisJc3RydWN0IHdvcmtfc3RydWN0IGNvbm5fd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXZlbnRfd29yazsKKworCS8qIGN1cnJlbnQgY2hhbm5lbCAqLworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKIAogI2lmZGVmIENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTCiAJLyogRGVidWdmcyBlbnRyaWVzICovCkBAIC04OSwxMyArMTAzLDE0IEBACiB9CiAKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggY2ZnODAyMTFfbXV0ZXg7Ci1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCBjZmc4MDIxMV9kcnZfbGlzdDsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNmZzgwMjExX3JkZXZfbGlzdDsKK2V4dGVybiBpbnQgY2ZnODAyMTFfcmRldl9saXN0X2dlbmVyYXRpb247CiAKICNkZWZpbmUgYXNzZXJ0X2NmZzgwMjExX2xvY2soKSBXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmNmZzgwMjExX211dGV4KSkKIAogLyoKICAqIFlvdSBjYW4gdXNlIHRoaXMgdG8gbWFyayBhIHdpcGh5X2lkeCBhcyBub3QgaGF2aW5nIGFuIGFzc29jaWF0ZWQgd2lwaHkuCi0gKiBJdCBndWFyYW50ZWVzIGNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgod2lwaHlfaWR4KSB3aWxsIHJldHVybiBOVUxMCisgKiBJdCBndWFyYW50ZWVzIGNmZzgwMjExX3JkZXZfYnlfd2lwaHlfaWR4KHdpcGh5X2lkeCkgd2lsbCByZXR1cm4gTlVMTAogICovCiAjZGVmaW5lIFdJUEhZX0lEWF9TVEFMRSAtMQogCkBAIC0xMDQsMTcgKzExOSw0MCBAQAogCXN0cnVjdCByYl9ub2RlIHJibjsKIAl1bnNpZ25lZCBsb25nIHRzOwogCXN0cnVjdCBrcmVmIHJlZjsKLQlib29sIGhvbGQsIGllc19hbGxvY2F0ZWQ7CisJYXRvbWljX3QgaG9sZDsKKwlib29sIGllc19hbGxvY2F0ZWQ7CiAKIAkvKiBtdXN0IGJlIGxhc3QgYmVjYXVzZSBvZiBwcml2IG1lbWJlciAqLwogCXN0cnVjdCBjZmc4MDIxMV9ic3MgcHViOwogfTsKIAotc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KGludCB3aXBoeV9pZHgpOworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3NfZnJvbV9wdWIoc3RydWN0IGNmZzgwMjExX2JzcyAqcHViKQoreworCXJldHVybiBjb250YWluZXJfb2YocHViLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2ZnODAyMTFfcmVmX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MpCit7CisJa3JlZl9nZXQoJmJzcy0+cmVmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNmZzgwMjExX2hvbGRfYnNzKHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcykKK3sKKwlhdG9taWNfaW5jKCZic3MtPmhvbGQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2ZnODAyMTFfdW5ob2xkX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MpCit7CisJaW50IHIgPSBhdG9taWNfZGVjX3JldHVybigmYnNzLT5ob2xkKTsKKwlXQVJOX09OKHIgPCAwKTsKK30KKworCitzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmNmZzgwMjExX3JkZXZfYnlfd2lwaHlfaWR4KGludCB3aXBoeV9pZHgpOwogaW50IGdldF93aXBoeV9pZHgoc3RydWN0IHdpcGh5ICp3aXBoeSk7CiAKIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCi1fX2NmZzgwMjExX2Rydl9mcm9tX2luZm8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CitfX2NmZzgwMjExX3JkZXZfZnJvbV9pbmZvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogCiAvKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZHJpdmVyCkBAIC0xMjIsMTIgKzE2MCwxMiBAQAogICogSWYgc3VjY2Vzc2Z1bCwgaXQgcmV0dXJucyBub24tTlVMTCBhbmQgYWxzbyBsb2NrcwogICogdGhlIGRyaXZlcidzIG11dGV4IQogICoKLSAqIFRoaXMgbWVhbnMgdGhhdCB5b3UgbmVlZCB0byBjYWxsIGNmZzgwMjExX3B1dF9kZXYoKQorICogVGhpcyBtZWFucyB0aGF0IHlvdSBuZWVkIHRvIGNhbGwgY2ZnODAyMTFfdW5sb2NrX3JkZXYoKQogICogYmVmb3JlIGJlaW5nIGFsbG93ZWQgdG8gYWNxdWlyZSAmY2ZnODAyMTFfbXV0ZXghCiAgKgogICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBuZWVkIHRvIGxvY2sgdGhlIGdsb2JhbAogICogbXV0ZXggdG8gZ2V0IGFuIGl0ZW0gb2ZmIHRoZSBsaXN0IHNhZmVseSwgYW5kIHRoZW4KLSAqIHdlIGxvY2sgdGhlIGRydiBtdXRleCBzbyBpdCBkb2Vzbid0IGdvIGF3YXkgdW5kZXIgdXMuCisgKiB3ZSBsb2NrIHRoZSByZGV2IG11dGV4IHNvIGl0IGRvZXNuJ3QgZ28gYXdheSB1bmRlciB1cy4KICAqCiAgKiBXZSBkb24ndCB3YW50IHRvIGtlZXAgY2ZnODAyMTFfbXV0ZXggbG9ja2VkCiAgKiBmb3IgYWxsIHRoZSB0aW1lIGluIG9yZGVyIHRvIGFsbG93IHJlcXVlc3RzIG9uCkBAIC0xMzksMTkgKzE3Nyw5MyBAQAogZXh0ZXJuIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCiBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faW5mbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIAotLyogcmVxdWlyZXMgY2ZnODAyMTFfZHJ2X211dGV4IHRvIGJlIGhlbGQhICovCisvKiByZXF1aXJlcyBjZmc4MDIxMV9yZGV2X211dGV4IHRvIGJlIGhlbGQhICovCiBzdHJ1Y3Qgd2lwaHkgKndpcGh5X2lkeF90b193aXBoeShpbnQgd2lwaHlfaWR4KTsKIAogLyogaWRlbnRpY2FsIHRvIGNmZzgwMjExX2dldF9kZXZfZnJvbV9pbmZvIGJ1dCBvbmx5IG9wZXJhdGUgb24gaWZpbmRleCAqLwogZXh0ZXJuIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCi1jZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChpbnQgaWZpbmRleCk7CitjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZmluZGV4KTsKIAotZXh0ZXJuIHZvaWQgY2ZnODAyMTFfcHV0X2RldihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydik7CitpbnQgY2ZnODAyMTFfc3dpdGNoX25ldG5zKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgc3RydWN0IG5ldCAqbmV0KTsKKworc3RhdGljIGlubGluZSB2b2lkIGNmZzgwMjExX2xvY2tfcmRldihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpCit7CisJbXV0ZXhfbG9jaygmcmRldi0+bXR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNmZzgwMjExX3VubG9ja19yZGV2KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKK3sKKwlCVUdfT04oSVNfRVJSKHJkZXYpIHx8ICFyZGV2KTsKKwltdXRleF91bmxvY2soJnJkZXYtPm10eCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3ZGV2X2xvY2soc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKKwlfX2FjcXVpcmVzKHdkZXYpCit7CisJbXV0ZXhfbG9jaygmd2Rldi0+bXR4KTsKKwlfX2FjcXVpcmUod2Rldi0+bXR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdkZXZfdW5sb2NrKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCisJX19yZWxlYXNlcyh3ZGV2KQoreworCV9fcmVsZWFzZSh3ZGV2LT5tdHgpOworCW11dGV4X3VubG9jaygmd2Rldi0+bXR4KTsKK30KKworI2RlZmluZSBBU1NFUlRfUkRFVl9MT0NLKHJkZXYpIFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmKHJkZXYpLT5tdHgpKTsKKyNkZWZpbmUgQVNTRVJUX1dERVZfTE9DSyh3ZGV2KSBXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJih3ZGV2KS0+bXR4KSk7CisKK2VudW0gY2ZnODAyMTFfZXZlbnRfdHlwZSB7CisJRVZFTlRfQ09OTkVDVF9SRVNVTFQsCisJRVZFTlRfUk9BTUVELAorCUVWRU5UX0RJU0NPTk5FQ1RFRCwKKwlFVkVOVF9JQlNTX0pPSU5FRCwKK307CisKK3N0cnVjdCBjZmc4MDIxMV9ldmVudCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWVudW0gY2ZnODAyMTFfZXZlbnRfdHlwZSB0eXBlOworCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTggYnNzaWRbRVRIX0FMRU5dOworCQkJY29uc3QgdTggKnJlcV9pZTsKKwkJCWNvbnN0IHU4ICpyZXNwX2llOworCQkJc2l6ZV90IHJlcV9pZV9sZW47CisJCQlzaXplX3QgcmVzcF9pZV9sZW47CisJCQl1MTYgc3RhdHVzOworCQl9IGNyOworCQlzdHJ1Y3QgeworCQkJdTggYnNzaWRbRVRIX0FMRU5dOworCQkJY29uc3QgdTggKnJlcV9pZTsKKwkJCWNvbnN0IHU4ICpyZXNwX2llOworCQkJc2l6ZV90IHJlcV9pZV9sZW47CisJCQlzaXplX3QgcmVzcF9pZV9sZW47CisJCX0gcm07CisJCXN0cnVjdCB7CisJCQljb25zdCB1OCAqaWU7CisJCQlzaXplX3QgaWVfbGVuOworCQkJdTE2IHJlYXNvbjsKKwkJfSBkYzsKKwkJc3RydWN0IHsKKwkJCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwkJfSBpajsKKwl9OworfTsKKworc3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzIHsKKwlzdHJ1Y3Qga2V5X3BhcmFtcyBwYXJhbXNbNl07CisJdTggZGF0YVs2XVtXTEFOX01BWF9LRVlfTEVOXTsKKwlpbnQgZGVmLCBkZWZtZ210OworfTsKKwogCiAvKiBmcmVlIG9iamVjdCAqLwotZXh0ZXJuIHZvaWQgY2ZnODAyMTFfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYpOworZXh0ZXJuIHZvaWQgY2ZnODAyMTFfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KTsKIAotZXh0ZXJuIGludCBjZmc4MDIxMV9kZXZfcmVuYW1lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2LAorZXh0ZXJuIGludCBjZmc4MDIxMV9kZXZfcmVuYW1lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgICAgICBjaGFyICpuZXduYW1lKTsKIAogdm9pZCBpZWVlODAyMTFfc2V0X2JpdHJhdGVfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSk7CkBAIC0xNjMsMTUgKzI3NSwxMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFnZV9zZWNzKTsKIAogLyogSUJTUyAqLworaW50IF9fY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zLAorCQkJIHN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqY29ubmtleXMpOwogaW50IGNmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2lic3NfcGFyYW1zICpwYXJhbXMpOworCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2lic3NfcGFyYW1zICpwYXJhbXMsCisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKmNvbm5rZXlzKTsKIHZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dCk7CiBpbnQgY2ZnODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dCk7Cit2b2lkIF9fY2ZnODAyMTFfaWJzc19qb2luZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkKTsKK2ludCBjZmc4MDIxMV9pYnNzX3dleHRfam9pbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7CisKKy8qIE1MTUUgKi8KK2ludCBfX2NmZzgwMjExX21sbWVfYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkgZW51bSBubDgwMjExX2F1dGhfdHlwZSBhdXRoX3R5cGUsCisJCQkgY29uc3QgdTggKmJzc2lkLAorCQkJIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZF9sZW4sCisJCQkgY29uc3QgdTggKmllLCBpbnQgaWVfbGVuLAorCQkJIGNvbnN0IHU4ICprZXksIGludCBrZXlfbGVuLCBpbnQga2V5X2lkeCk7CitpbnQgY2ZnODAyMTFfbWxtZV9hdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJICAgICAgIGVudW0gbmw4MDIxMV9hdXRoX3R5cGUgYXV0aF90eXBlLCBjb25zdCB1OCAqYnNzaWQsCisJCSAgICAgICBjb25zdCB1OCAqc3NpZCwgaW50IHNzaWRfbGVuLAorCQkgICAgICAgY29uc3QgdTggKmllLCBpbnQgaWVfbGVuLAorCQkgICAgICAgY29uc3QgdTggKmtleSwgaW50IGtleV9sZW4sIGludCBrZXlfaWR4KTsKK2ludCBfX2NmZzgwMjExX21sbWVfYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkgIGNvbnN0IHU4ICpic3NpZCwgY29uc3QgdTggKnByZXZfYnNzaWQsCisJCQkgIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZF9sZW4sCisJCQkgIGNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwgYm9vbCB1c2VfbWZwLAorCQkJICBzdHJ1Y3QgY2ZnODAyMTFfY3J5cHRvX3NldHRpbmdzICpjcnlwdCk7CitpbnQgY2ZnODAyMTFfbWxtZV9hc3NvYyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQljb25zdCB1OCAqYnNzaWQsIGNvbnN0IHU4ICpwcmV2X2Jzc2lkLAorCQkJY29uc3QgdTggKnNzaWQsIGludCBzc2lkX2xlbiwKKwkJCWNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwgYm9vbCB1c2VfbWZwLAorCQkJc3RydWN0IGNmZzgwMjExX2NyeXB0b19zZXR0aW5ncyAqY3J5cHQpOworaW50IF9fY2ZnODAyMTFfbWxtZV9kZWF1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAorCQkJICAgY29uc3QgdTggKmllLCBpbnQgaWVfbGVuLCB1MTYgcmVhc29uKTsKK2ludCBjZmc4MDIxMV9tbG1lX2RlYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAorCQkJIGNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwgdTE2IHJlYXNvbik7CitpbnQgY2ZnODAyMTFfbWxtZV9kaXNhc3NvYyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCQkgICBjb25zdCB1OCAqaWUsIGludCBpZV9sZW4sIHUxNiByZWFzb24pOwordm9pZCBjZmc4MDIxMV9tbG1lX2Rvd24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIF9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAorCQkJICAgICAgIGNvbnN0IHU4ICpyZXFfaWUsIHNpemVfdCByZXFfaWVfbGVuLAorCQkJICAgICAgIGNvbnN0IHU4ICpyZXNwX2llLCBzaXplX3QgcmVzcF9pZV9sZW4sCisJCQkgICAgICAgdTE2IHN0YXR1cywgYm9vbCB3ZXh0ZXYsCisJCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKTsKKworLyogU01FICovCitpbnQgX19jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKmNvbm5lY3QsCisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKmNvbm5rZXlzLAorCQkgICAgICAgY29uc3QgdTggKnByZXZfYnNzaWQpOworaW50IGNmZzgwMjExX2Nvbm5lY3Qoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpjb25uZWN0LAorCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqY29ubmtleXMpOworaW50IF9fY2ZnODAyMTFfZGlzY29ubmVjdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiByZWFzb24sCisJCQkgIGJvb2wgd2V4dGV2KTsKK2ludCBjZmc4MDIxMV9kaXNjb25uZWN0KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiByZWFzb24sCisJCQlib29sIHdleHRldik7Cit2b2lkIF9fY2ZnODAyMTFfcm9hbWVkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGNvbnN0IHU4ICpic3NpZCwKKwkJICAgICAgIGNvbnN0IHU4ICpyZXFfaWUsIHNpemVfdCByZXFfaWVfbGVuLAorCQkgICAgICAgY29uc3QgdTggKnJlc3BfaWUsIHNpemVfdCByZXNwX2llX2xlbik7CitpbnQgY2ZnODAyMTFfbWdkX3dleHRfY29ubmVjdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTsKKwordm9pZCBjZmc4MDIxMV9jb25uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK2Jvb2wgY2ZnODAyMTFfc21lX2ZhaWxlZF9yZWFzc29jKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpOwogCiAvKiBpbnRlcm5hbCBoZWxwZXJzICovCi1pbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMsIGludCBrZXlfaWR4LAoraW50IGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcywgaW50IGtleV9pZHgsCiAJCQkJICAgY29uc3QgdTggKm1hY19hZGRyKTsKK3ZvaWQgX19jZmc4MDIxMV9kaXNjb25uZWN0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmllLAorCQkJICAgICBzaXplX3QgaWVfbGVuLCB1MTYgcmVhc29uLCBib29sIGZyb21fYXApOwordm9pZCBjZmc4MDIxMV9zbWVfc2Nhbl9kb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBjZmc4MDIxMV9zbWVfcnhfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKK3ZvaWQgY2ZnODAyMTFfc21lX2Rpc2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpZHgpOwordm9pZCBfX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKTsKK3ZvaWQgX19fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwgYm9vbCBsZWFrKTsKK3ZvaWQgY2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTsKK2ludCBjZmc4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIG5sODAyMTFfaWZ0eXBlIG50eXBlLAorCQkJICB1MzIgKmZsYWdzLCBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKTsKK3ZvaWQgY2ZnODAyMTFfcHJvY2Vzc19yZGV2X2V2ZW50cyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpOworCitzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKgorcmRldl9maXhlZF9jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJICAgc3RydWN0IHdpcmVsZXNzX2RldiAqZm9yX3dkZXYpOworaW50IHJkZXZfc2V0X2ZyZXEoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgIHN0cnVjdCB3aXJlbGVzc19kZXYgKmZvcl93ZGV2LAorCQkgIGludCBmcmVxLCBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSk7CisKKyNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTCisjZGVmaW5lIENGRzgwMjExX0RFVl9XQVJOX09OKGNvbmQpCVdBUk5fT04oY29uZCkKKyNlbHNlCisvKgorICogVHJpY2sgdG8gZW5hYmxlIHVzaW5nIGl0IGFzIGEgY29uZGl0aW9uLAorICogYW5kIGFsc28gbm90IGdpdmUgYSB3YXJuaW5nIHdoZW4gaXQncworICogbm90IHVzZWQgdGhhdCB3YXkuCisgKi8KKyNkZWZpbmUgQ0ZHODAyMTFfREVWX1dBUk5fT04oY29uZCkJKHtib29sIF9fciA9IChjb25kKTsgX19yOyB9KQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX05FVF9XSVJFTEVTU19DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9kZWJ1Z2ZzLmMgYi9uZXQvd2lyZWxlc3MvZGVidWdmcy5jCmluZGV4IDY3OWRkZmMuLjEzZDkzZDggMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9kZWJ1Z2ZzLmMKKysrIGIvbmV0L3dpcmVsZXNzL2RlYnVnZnMuYwpAQCAtMTA0LDE1ICsxMDQsMTUgQEAKIH07CiAKICNkZWZpbmUgREVCVUdGU19BREQobmFtZSkJCQkJCQlcCi0JZHJ2LT5kZWJ1Z2ZzLm5hbWUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCBTX0lSVUdPLCBwaHlkLAlcCi0JCQkJCQkgICZkcnYtPndpcGh5LCAmbmFtZSMjIF9vcHMpOworCXJkZXYtPmRlYnVnZnMubmFtZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIFNfSVJVR08sIHBoeWQsCVwKKwkJCQkJCSAgJnJkZXYtPndpcGh5LCAmbmFtZSMjIF9vcHMpOwogI2RlZmluZSBERUJVR0ZTX0RFTChuYW1lKQkJCQkJCVwKLQlkZWJ1Z2ZzX3JlbW92ZShkcnYtPmRlYnVnZnMubmFtZSk7CQkJCVwKLQlkcnYtPmRlYnVnZnMubmFtZSA9IE5VTEw7CisJZGVidWdmc19yZW1vdmUocmRldi0+ZGVidWdmcy5uYW1lKTsJCQkJXAorCXJkZXYtPmRlYnVnZnMubmFtZSA9IE5VTEw7CiAKLXZvaWQgY2ZnODAyMTFfZGVidWdmc19kcnZfYWRkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2KQordm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfYWRkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpwaHlkID0gZHJ2LT53aXBoeS5kZWJ1Z2ZzZGlyOworCXN0cnVjdCBkZW50cnkgKnBoeWQgPSByZGV2LT53aXBoeS5kZWJ1Z2ZzZGlyOwogCiAJREVCVUdGU19BREQocnRzX3RocmVzaG9sZCk7CiAJREVCVUdGU19BREQoZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQpOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJREVCVUdGU19BREQoaHQ0MGFsbG93X21hcCk7CiB9CiAKLXZvaWQgY2ZnODAyMTFfZGVidWdmc19kcnZfZGVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2KQordm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfZGVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKIHsKIAlERUJVR0ZTX0RFTChydHNfdGhyZXNob2xkKTsKIAlERUJVR0ZTX0RFTChmcmFnbWVudGF0aW9uX3RocmVzaG9sZCk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvZGVidWdmcy5oIGIvbmV0L3dpcmVsZXNzL2RlYnVnZnMuaAppbmRleCBjMjI2OTgzLi42NDE5YjZkIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvZGVidWdmcy5oCisrKyBiL25ldC93aXJlbGVzcy9kZWJ1Z2ZzLmgKQEAgLTIsMTMgKzIsMTMgQEAKICNkZWZpbmUgX19DRkc4MDIxMV9ERUJVR0ZTX0gKIAogI2lmZGVmIENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTCi12b2lkIGNmZzgwMjExX2RlYnVnZnNfZHJ2X2FkZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydik7Ci12b2lkIGNmZzgwMjExX2RlYnVnZnNfZHJ2X2RlbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydik7Cit2b2lkIGNmZzgwMjExX2RlYnVnZnNfcmRldl9hZGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KTsKK3ZvaWQgY2ZnODAyMTFfZGVidWdmc19yZGV2X2RlbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUKLXZvaWQgY2ZnODAyMTFfZGVidWdmc19kcnZfYWRkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2KSB7fQordm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfYWRkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikge30KIHN0YXRpYyBpbmxpbmUKLXZvaWQgY2ZnODAyMTFfZGVidWdmc19kcnZfZGVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2KSB7fQordm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfZGVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikge30KICNlbmRpZgogCiAjZW5kaWYgLyogX19DRkc4MDIxMV9ERUJVR0ZTX0ggKi8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9pYnNzLmMgYi9uZXQvd2lyZWxlc3MvaWJzcy5jCmluZGV4IGE0YTFjMzQuLmM4ODMzODkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9pYnNzLmMKKysrIGIvbmV0L3dpcmVsZXNzL2lic3MuYwpAQCAtNywxMCArNywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisjaW5jbHVkZSAid2V4dC1jb21wYXQuaCIKICNpbmNsdWRlICJubDgwMjExLmgiCiAKIAotdm9pZCBjZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsIGdmcF90IGdmcCkKK3ZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQpCiB7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKIAlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CkBAIC0yMSwxMCArMjIsNyBAQAogCWlmIChXQVJOX09OKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpCiAJCXJldHVybjsKIAotCWlmIChXQVJOX09OKCF3ZGV2LT5zc2lkX2xlbikpCi0JCXJldHVybjsKLQotCWlmIChtZW1jbXAoYnNzaWQsIHdkZXYtPmJzc2lkLCBFVEhfQUxFTikgPT0gMCkKKwlpZiAoIXdkZXYtPnNzaWRfbGVuKQogCQlyZXR1cm47CiAKIAlic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHdkZXYtPndpcGh5LCBOVUxMLCBic3NpZCwKQEAgLTM2LDM5ICszNCw3NiBAQAogCiAJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKSB7CiAJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0+Y3VycmVudF9ic3MpOwotCQljZmc4MDIxMV9wdXRfYnNzKHdkZXYtPmN1cnJlbnRfYnNzKTsKKwkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+Y3VycmVudF9ic3MtPnB1Yik7CiAJfQogCi0JY2ZnODAyMTFfaG9sZF9ic3MoYnNzKTsKLQl3ZGV2LT5jdXJyZW50X2JzcyA9IGJzczsKLQltZW1jcHkod2Rldi0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJY2ZnODAyMTFfaG9sZF9ic3MoYnNzX2Zyb21fcHViKGJzcykpOworCXdkZXYtPmN1cnJlbnRfYnNzID0gYnNzX2Zyb21fcHViKGJzcyk7CiAKLQlubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpLCBkZXYsIGJzc2lkLCBnZnApOworCWNmZzgwMjExX3VwbG9hZF9jb25uZWN0X2tleXMod2Rldik7CisKKwlubDgwMjExX3NlbmRfaWJzc19ic3NpZCh3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpLCBkZXYsIGJzc2lkLAorCQkJCUdGUF9LRVJORUwpOwogI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKIAltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CiAJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBic3NpZCwgRVRIX0FMRU4pOwogCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKICNlbmRpZgogfQotRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9pYnNzX2pvaW5lZCk7CiAKLWludCBjZmc4MDIxMV9qb2luX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zKQordm9pZCBjZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisJc3RydWN0IGNmZzgwMjExX2V2ZW50ICpldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0ZHODAyMTFfREVWX1dBUk5fT04oIXdkZXYtPnNzaWRfbGVuKTsKKworCWV2ID0ga3phbGxvYyhzaXplb2YoKmV2KSwgZ2ZwKTsKKwlpZiAoIWV2KQorCQlyZXR1cm47CisKKwlldi0+dHlwZSA9IEVWRU5UX0lCU1NfSk9JTkVEOworCW1lbWNweShldi0+Y3IuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2Rldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmV2LT5saXN0LCAmd2Rldi0+ZXZlbnRfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2Rldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCXNjaGVkdWxlX3dvcmsoJnJkZXYtPmV2ZW50X3dvcmspOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9pYnNzX2pvaW5lZCk7CisKK2ludCBfX2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcywKKwkJCSBzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKmNvbm5rZXlzKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwogCWludCBlcnI7CiAKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJY2hhbiA9IHJkZXZfZml4ZWRfY2hhbm5lbChyZGV2LCB3ZGV2KTsKKwlpZiAoY2hhbiAmJiBjaGFuICE9IHBhcmFtcy0+Y2hhbm5lbCkKKwkJcmV0dXJuIC1FQlVTWTsKKwogCWlmICh3ZGV2LT5zc2lkX2xlbikKIAkJcmV0dXJuIC1FQUxSRUFEWTsKIAorCWlmIChXQVJOX09OKHdkZXYtPmNvbm5lY3Rfa2V5cykpCisJCWtmcmVlKHdkZXYtPmNvbm5lY3Rfa2V5cyk7CisJd2Rldi0+Y29ubmVjdF9rZXlzID0gY29ubmtleXM7CisKICNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCiAJd2Rldi0+d2V4dC5pYnNzLmNoYW5uZWwgPSBwYXJhbXMtPmNoYW5uZWw7CiAjZW5kaWYKIAllcnIgPSByZGV2LT5vcHMtPmpvaW5faWJzcygmcmRldi0+d2lwaHksIGRldiwgcGFyYW1zKTsKLQotCWlmIChlcnIpCisJaWYgKGVycikgeworCQl3ZGV2LT5jb25uZWN0X2tleXMgPSBOVUxMOwogCQlyZXR1cm4gZXJyOworCX0KIAogCW1lbWNweSh3ZGV2LT5zc2lkLCBwYXJhbXMtPnNzaWQsIHBhcmFtcy0+c3NpZF9sZW4pOwogCXdkZXYtPnNzaWRfbGVuID0gcGFyYW1zLT5zc2lkX2xlbjsKQEAgLTc2LDQ1ICsxMTEsMTA3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dCkKK2ludCBjZmc4MDIxMV9qb2luX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zLAorCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICpjb25ua2V5cykKIHsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJd2Rldl9sb2NrKHdkZXYpOworCWVyciA9IF9fY2ZnODAyMTFfam9pbl9pYnNzKHJkZXYsIGRldiwgcGFyYW1zLCBjb25ua2V5cyk7CisJd2Rldl91bmxvY2sod2Rldik7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2NmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCWludCBpOworCisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKKworCWtmcmVlKHdkZXYtPmNvbm5lY3Rfa2V5cyk7CisJd2Rldi0+Y29ubmVjdF9rZXlzID0gTlVMTDsKKworCS8qCisJICogRGVsZXRlIGFsbCB0aGUga2V5cyAuLi4gcGFpcndpc2Uga2V5cyBjYW4ndCByZWFsbHkKKwkgKiBleGlzdCBhbnkgbW9yZSBhbnl3YXksIGJ1dCBkZWZhdWx0IGtleXMgbWlnaHQuCisJICovCisJaWYgKHJkZXYtPm9wcy0+ZGVsX2tleSkKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCXJkZXYtPm9wcy0+ZGVsX2tleSh3ZGV2LT53aXBoeSwgZGV2LCBpLCBOVUxMKTsKIAogCWlmICh3ZGV2LT5jdXJyZW50X2JzcykgewogCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmN1cnJlbnRfYnNzKTsKLQkJY2ZnODAyMTFfcHV0X2Jzcyh3ZGV2LT5jdXJyZW50X2Jzcyk7CisJCWNmZzgwMjExX3B1dF9ic3MoJndkZXYtPmN1cnJlbnRfYnNzLT5wdWIpOwogCX0KIAogCXdkZXYtPmN1cnJlbnRfYnNzID0gTlVMTDsKIAl3ZGV2LT5zc2lkX2xlbiA9IDA7Ci0JbWVtc2V0KHdkZXYtPmJzc2lkLCAwLCBFVEhfQUxFTik7CiAjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAogCWlmICghbm93ZXh0KQogCQl3ZGV2LT53ZXh0Lmlic3Muc3NpZF9sZW4gPSAwOwogI2VuZGlmCiB9CiAKLWludCBjZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KQordm9pZCBjZmc4MDIxMV9jbGVhcl9pYnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KQogeworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisKKwl3ZGV2X2xvY2sod2Rldik7CisJX19jZmc4MDIxMV9jbGVhcl9pYnNzKGRldiwgbm93ZXh0KTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKK30KKworc3RhdGljIGludCBfX2NmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dCkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOwogCWludCBlcnI7CiAKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJaWYgKCF3ZGV2LT5zc2lkX2xlbikKKwkJcmV0dXJuIC1FTk9MSU5LOworCiAJZXJyID0gcmRldi0+b3BzLT5sZWF2ZV9pYnNzKCZyZGV2LT53aXBoeSwgZGV2KTsKIAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQljZmc4MDIxMV9jbGVhcl9pYnNzKGRldiwgbm93ZXh0KTsKKwlfX2NmZzgwMjExX2NsZWFyX2lic3MoZGV2LCBub3dleHQpOwogCiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCi1zdGF0aWMgaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKLQkJCQkgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQoraW50IGNmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpCiB7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlpbnQgZXJyOworCisJd2Rldl9sb2NrKHdkZXYpOworCWVyciA9IF9fY2ZnODAyMTFfbGVhdmVfaWJzcyhyZGV2LCBkZXYsIG5vd2V4dCk7CisJd2Rldl91bmxvY2sod2Rldik7CisKKwlyZXR1cm4gZXJyOworfQorCisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAoraW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQoreworCXN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqY2sgPSBOVUxMOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKLQlpbnQgaTsKKwlpbnQgaSwgZXJyOworCisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKIAogCWlmICghd2Rldi0+d2V4dC5pYnNzLmJlYWNvbl9pbnRlcnZhbCkKIAkJd2Rldi0+d2V4dC5pYnNzLmJlYWNvbl9pbnRlcnZhbCA9IDEwMDsKQEAgLTE1NCw0MyArMjUxLDY2IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKHdkZXYtPm5ldGRldikpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIGNmZzgwMjExX2pvaW5faWJzcyh3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpLAotCQkJCSAgd2Rldi0+bmV0ZGV2LCAmd2Rldi0+d2V4dC5pYnNzKTsKKwlpZiAod2Rldi0+d2V4dC5rZXlzKQorCQl3ZGV2LT53ZXh0LmtleXMtPmRlZiA9IHdkZXYtPndleHQuZGVmYXVsdF9rZXk7CisKKwl3ZGV2LT53ZXh0Lmlic3MucHJpdmFjeSA9IHdkZXYtPndleHQuZGVmYXVsdF9rZXkgIT0gLTE7CisKKwlpZiAod2Rldi0+d2V4dC5rZXlzKSB7CisJCWNrID0ga21lbWR1cCh3ZGV2LT53ZXh0LmtleXMsIHNpemVvZigqY2spLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjaykKKwkJCXJldHVybiAtRU5PTUVNOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJY2stPnBhcmFtc1tpXS5rZXkgPSBjay0+ZGF0YVtpXTsKKwl9CisJZXJyID0gX19jZmc4MDIxMV9qb2luX2lic3MocmRldiwgd2Rldi0+bmV0ZGV2LAorCQkJCSAgICZ3ZGV2LT53ZXh0Lmlic3MsIGNrKTsKKwlpZiAoZXJyKQorCQlrZnJlZShjayk7CisKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgY2ZnODAyMTFfaWJzc193ZXh0X3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKKwkJCSAgICAgICBzdHJ1Y3QgaXdfZnJlcSAqd2V4dGZyZXEsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwotCWludCBlcnI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBOVUxMOworCWludCBlcnIsIGZyZXE7CiAKIAkvKiBjYWxsIG9ubHkgZm9yIGlic3MhICovCiAJaWYgKFdBUk5fT04od2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIXdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSktPm9wcy0+am9pbl9pYnNzKQorCWlmICghcmRldi0+b3BzLT5qb2luX2lic3MpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWNoYW4gPSBjZmc4MDIxMV93ZXh0X2ZyZXEod2Rldi0+d2lwaHksIGZyZXEpOwotCWlmIChjaGFuICYmIElTX0VSUihjaGFuKSkKLQkJcmV0dXJuIFBUUl9FUlIoY2hhbik7CisJZnJlcSA9IGNmZzgwMjExX3dleHRfZnJlcSh3ZGV2LT53aXBoeSwgd2V4dGZyZXEpOworCWlmIChmcmVxIDwgMCkKKwkJcmV0dXJuIGZyZXE7CiAKLQlpZiAoY2hhbiAmJgotCSAgICAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JQlNTIHx8Ci0JICAgICBjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGZyZXEpIHsKKwkJY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCh3ZGV2LT53aXBoeSwgZnJlcSk7CisJCWlmICghY2hhbikKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JQlNTIHx8CisJCSAgICBjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJaWYgKHdkZXYtPndleHQuaWJzcy5jaGFubmVsID09IGNoYW4pCiAJCXJldHVybiAwOwogCi0JaWYgKHdkZXYtPnNzaWRfbGVuKSB7Ci0JCWVyciA9IGNmZzgwMjExX2xlYXZlX2lic3Mod2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KSwKLQkJCQkJICBkZXYsIHRydWUpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9CisJd2Rldl9sb2NrKHdkZXYpOworCWVyciA9IDA7CisJaWYgKHdkZXYtPnNzaWRfbGVuKQorCQllcnIgPSBfX2NmZzgwMjExX2xlYXZlX2lic3MocmRldiwgZGV2LCB0cnVlKTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAlpZiAoY2hhbikgewogCQl3ZGV2LT53ZXh0Lmlic3MuY2hhbm5lbCA9IGNoYW47CkBAIC0yMDAsMTAgKzMyMCwxNCBAQAogCQl3ZGV2LT53ZXh0Lmlic3MuY2hhbm5lbF9maXhlZCA9IGZhbHNlOwogCX0KIAotCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfam9pbih3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpLCB3ZGV2KTsKKwltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJd2Rldl9sb2NrKHdkZXYpOworCWVyciA9IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHJkZXYsIHdkZXYpOworCXdkZXZfdW5sb2NrKHdkZXYpOworCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCisJcmV0dXJuIGVycjsKIH0KLS8qIHRlbXBvcmFyeSBzeW1ib2wgLSBtYXJrIEdQTCAtIGluIHRoZSBmdXR1cmUgdGhlIGhhbmRsZXIgd29uJ3QgYmUgKi8KLUVYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX2lic3Nfd2V4dF9zaXdmcmVxKTsKIAogaW50IGNmZzgwMjExX2lic3Nfd2V4dF9naXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKQEAgLTIxNiwxMCArMzQwLDEyIEBACiAJaWYgKFdBUk5fT04od2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwl3ZGV2X2xvY2sod2Rldik7CiAJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKQotCQljaGFuID0gd2Rldi0+Y3VycmVudF9ic3MtPmNoYW5uZWw7CisJCWNoYW4gPSB3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmNoYW5uZWw7CiAJZWxzZSBpZiAod2Rldi0+d2V4dC5pYnNzLmNoYW5uZWwpCiAJCWNoYW4gPSB3ZGV2LT53ZXh0Lmlic3MuY2hhbm5lbDsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKIAogCWlmIChjaGFuKSB7CiAJCWZyZXEtPm0gPSBjaGFuLT5jZW50ZXJfZnJlcTsKQEAgLTIzMCwxNCArMzU2LDEzIEBACiAJLyogbm8gY2hhbm5lbCBpZiBub3Qgam9pbmluZyAqLwogCXJldHVybiAtRUlOVkFMOwogfQotLyogdGVtcG9yYXJ5IHN5bWJvbCAtIG1hcmsgR1BMIC0gaW4gdGhlIGZ1dHVyZSB0aGUgaGFuZGxlciB3b24ndCBiZSAqLwotRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfaWJzc193ZXh0X2dpd2ZyZXEpOwogCiBpbnQgY2ZnODAyMTFfaWJzc193ZXh0X3Npd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKnNzaWQpCiB7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOwogCXNpemVfdCBsZW4gPSBkYXRhLT5sZW5ndGg7CiAJaW50IGVycjsKIApAQCAtMjQ1LDE1ICszNzAsMTcgQEAKIAlpZiAoV0FSTl9PTih3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KS0+b3BzLT5qb2luX2lic3MpCisJaWYgKCFyZGV2LT5vcHMtPmpvaW5faWJzcykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKHdkZXYtPnNzaWRfbGVuKSB7Ci0JCWVyciA9IGNmZzgwMjExX2xlYXZlX2lic3Mod2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KSwKLQkJCQkJICBkZXYsIHRydWUpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9CisJd2Rldl9sb2NrKHdkZXYpOworCWVyciA9IDA7CisJaWYgKHdkZXYtPnNzaWRfbGVuKQorCQllcnIgPSBfX2NmZzgwMjExX2xlYXZlX2lic3MocmRldiwgZGV2LCB0cnVlKTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAkvKiBpd2NvbmZpZyB1c2VzIG51bCB0ZXJtaW5hdGlvbiBpbiBTU0lELi4gKi8KIAlpZiAobGVuID4gMCAmJiBzc2lkW2xlbiAtIDFdID09ICdcMCcpCkBAIC0yNjMsMTAgKzM5MCwxNCBAQAogCW1lbWNweSh3ZGV2LT53ZXh0Lmlic3Muc3NpZCwgc3NpZCwgbGVuKTsKIAl3ZGV2LT53ZXh0Lmlic3Muc3NpZF9sZW4gPSBsZW47CiAKLQlyZXR1cm4gY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4od2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KSwgd2Rldik7CisJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCXdkZXZfbG9jayh3ZGV2KTsKKwllcnIgPSBjZmc4MDIxMV9pYnNzX3dleHRfam9pbihyZGV2LCB3ZGV2KTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKwltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKworCXJldHVybiBlcnI7CiB9Ci0vKiB0ZW1wb3Jhcnkgc3ltYm9sIC0gbWFyayBHUEwgLSBpbiB0aGUgZnV0dXJlIHRoZSBoYW5kbGVyIHdvbid0IGJlICovCi1FWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV9pYnNzX3dleHRfc2l3ZXNzaWQpOwogCiBpbnQgY2ZnODAyMTFfaWJzc193ZXh0X2dpd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKQEAgLTI4MCw2ICs0MTEsNyBAQAogCiAJZGF0YS0+ZmxhZ3MgPSAwOwogCisJd2Rldl9sb2NrKHdkZXYpOwogCWlmICh3ZGV2LT5zc2lkX2xlbikgewogCQlkYXRhLT5mbGFncyA9IDE7CiAJCWRhdGEtPmxlbmd0aCA9IHdkZXYtPnNzaWRfbGVuOwpAQCAtMjg5LDE3ICs0MjEsMTcgQEAKIAkJZGF0YS0+bGVuZ3RoID0gd2Rldi0+d2V4dC5pYnNzLnNzaWRfbGVuOwogCQltZW1jcHkoc3NpZCwgd2Rldi0+d2V4dC5pYnNzLnNzaWQsIGRhdGEtPmxlbmd0aCk7CiAJfQorCXdkZXZfdW5sb2NrKHdkZXYpOwogCiAJcmV0dXJuIDA7CiB9Ci0vKiB0ZW1wb3Jhcnkgc3ltYm9sIC0gbWFyayBHUEwgLSBpbiB0aGUgZnV0dXJlIHRoZSBoYW5kbGVyIHdvbid0IGJlICovCi1FWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV9pYnNzX3dleHRfZ2l3ZXNzaWQpOwogCiBpbnQgY2ZnODAyMTFfaWJzc193ZXh0X3Npd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOwogCXU4ICpic3NpZCA9IGFwX2FkZHItPnNhX2RhdGE7CiAJaW50IGVycjsKIApAQCAtMzA3LDcgKzQzOSw3IEBACiAJaWYgKFdBUk5fT04od2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIXdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSktPm9wcy0+am9pbl9pYnNzKQorCWlmICghcmRldi0+b3BzLT5qb2luX2lic3MpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChhcF9hZGRyLT5zYV9mYW1pbHkgIT0gQVJQSFJEX0VUSEVSKQpAQCAtMzI2LDEyICs0NTgsMTQgQEAKIAkgICAgY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCB3ZGV2LT53ZXh0Lmlic3MuYnNzaWQpID09IDApCiAJCXJldHVybiAwOwogCi0JaWYgKHdkZXYtPnNzaWRfbGVuKSB7Ci0JCWVyciA9IGNmZzgwMjExX2xlYXZlX2lic3Mod2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KSwKLQkJCQkJICBkZXYsIHRydWUpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9CisJd2Rldl9sb2NrKHdkZXYpOworCWVyciA9IDA7CisJaWYgKHdkZXYtPnNzaWRfbGVuKQorCQllcnIgPSBfX2NmZzgwMjExX2xlYXZlX2lic3MocmRldiwgZGV2LCB0cnVlKTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAlpZiAoYnNzaWQpIHsKIAkJbWVtY3B5KHdkZXYtPndleHQuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CkBAIC0zMzksMTAgKzQ3MywxNCBAQAogCX0gZWxzZQogCQl3ZGV2LT53ZXh0Lmlic3MuYnNzaWQgPSBOVUxMOwogCi0JcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSksIHdkZXYpOworCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwl3ZGV2X2xvY2sod2Rldik7CisJZXJyID0gY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4ocmRldiwgd2Rldik7CisJd2Rldl91bmxvY2sod2Rldik7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisKKwlyZXR1cm4gZXJyOwogfQotLyogdGVtcG9yYXJ5IHN5bWJvbCAtIG1hcmsgR1BMIC0gaW4gdGhlIGZ1dHVyZSB0aGUgaGFuZGxlciB3b24ndCBiZSAqLwotRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfaWJzc193ZXh0X3Npd2FwKTsKIAogaW50IGNmZzgwMjExX2lic3Nfd2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApAQCAtMzU2LDE0ICs0OTQsMTYgQEAKIAogCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKIAotCWlmICh3ZGV2LT53ZXh0Lmlic3MuYnNzaWQpIHsKKwl3ZGV2X2xvY2sod2Rldik7CisJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKQorCQltZW1jcHkoYXBfYWRkci0+c2FfZGF0YSwgd2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5ic3NpZCwgRVRIX0FMRU4pOworCWVsc2UgaWYgKHdkZXYtPndleHQuaWJzcy5ic3NpZCkKIAkJbWVtY3B5KGFwX2FkZHItPnNhX2RhdGEsIHdkZXYtPndleHQuaWJzcy5ic3NpZCwgRVRIX0FMRU4pOwotCQlyZXR1cm4gMDsKLQl9CisJZWxzZQorCQltZW1zZXQoYXBfYWRkci0+c2FfZGF0YSwgMCwgRVRIX0FMRU4pOwogCi0JbWVtY3B5KGFwX2FkZHItPnNhX2RhdGEsIHdkZXYtPmJzc2lkLCBFVEhfQUxFTik7CisJd2Rldl91bmxvY2sod2Rldik7CisKIAlyZXR1cm4gMDsKIH0KLS8qIHRlbXBvcmFyeSBzeW1ib2wgLSBtYXJrIEdQTCAtIGluIHRoZSBmdXR1cmUgdGhlIGhhbmRsZXIgd29uJ3QgYmUgKi8KLUVYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX2lic3Nfd2V4dF9naXdhcCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9tbG1lLmMgYi9uZXQvd2lyZWxlc3MvbWxtZS5jCmluZGV4IDQyMTg0MzYuLjc5ZDJlZWMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9tbG1lLmMKKysrIGIvbmV0L3dpcmVsZXNzL21sbWUuYwpAQCAtOCw3NSArOCw2NTIgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJubDgwMjExLmgiCiAKIHZvaWQgY2ZnODAyMTFfc2VuZF9yeF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCiB7Ci0Jc3RydWN0IHdpcGh5ICp3aXBoeSA9IGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHk7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gd2Rldi0+d2lwaHk7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKLQlubDgwMjExX3NlbmRfcnhfYXV0aChyZGV2LCBkZXYsIGJ1ZiwgbGVuKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopYnVmOworCXU4ICpic3NpZCA9IG1nbXQtPmJzc2lkOworCWludCBpOworCXUxNiBzdGF0dXMgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguc3RhdHVzX2NvZGUpOworCWJvb2wgZG9uZSA9IGZhbHNlOworCisJd2Rldl9sb2NrKHdkZXYpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9BVVRIX0JTU0VTOyBpKyspIHsKKwkJaWYgKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0gJiYKKwkJICAgIG1lbWNtcCh3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldLT5wdWIuYnNzaWQsIGJzc2lkLAorCQkJCQkJCUVUSF9BTEVOKSA9PSAwKSB7CisJCQlpZiAoc3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCQl3ZGV2LT5hdXRoX2Jzc2VzW2ldID0gd2Rldi0+YXV0aHRyeV9ic3Nlc1tpXTsKKwkJCX0gZWxzZSB7CisJCQkJY2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldKTsKKwkJCQljZmc4MDIxMV9wdXRfYnNzKCZ3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldLT5wdWIpOworCQkJfQorCQkJd2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSA9IE5VTEw7CisJCQlkb25lID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJV0FSTl9PTighZG9uZSk7CisKKwlubDgwMjExX3NlbmRfcnhfYXV0aChyZGV2LCBkZXYsIGJ1ZiwgbGVuLCBHRlBfS0VSTkVMKTsKKwljZmc4MDIxMV9zbWVfcnhfYXV0aChkZXYsIGJ1ZiwgbGVuKTsKKworCXdkZXZfdW5sb2NrKHdkZXYpOwogfQogRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zZW5kX3J4X2F1dGgpOwogCiB2b2lkIGNmZzgwMjExX3NlbmRfcnhfYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKKwl1MTYgc3RhdHVzX2NvZGU7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gd2Rldi0+d2lwaHk7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKLQlubDgwMjExX3NlbmRfcnhfYXNzb2MocmRldiwgZGV2LCBidWYsIGxlbik7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKWJ1ZjsKKwl1OCAqaWUgPSBtZ210LT51LmFzc29jX3Jlc3AudmFyaWFibGU7CisJaW50IGksIGllb2ZmcyA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5hc3NvY19yZXNwLnZhcmlhYmxlKTsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MgPSBOVUxMOworCisJd2Rldl9sb2NrKHdkZXYpOworCisJc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3Auc3RhdHVzX2NvZGUpOworCisJLyoKKwkgKiBUaGlzIGlzIGEgYml0IG9mIGEgaGFjaywgd2UgZG9uJ3Qgbm90aWZ5IHVzZXJzcGFjZSBvZgorCSAqIGEgKHJlLSlhc3NvY2lhdGlvbiByZXBseSBpZiB3ZSB0cmllZCB0byBzZW5kIGEgcmVhc3NvYworCSAqIGFuZCBnb3QgYSByZWplY3QgLS0gd2Ugb25seSB0cnkgYWdhaW4gd2l0aCBhbiBhc3NvYworCSAqIGZyYW1lIGluc3RlYWQgb2YgcmVhc3NvYy4KKwkgKi8KKwlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUyAmJiB3ZGV2LT5jb25uICYmCisJICAgIGNmZzgwMjExX3NtZV9mYWlsZWRfcmVhc3NvYyh3ZGV2KSkKKwkJZ290byBvdXQ7CisKKwlubDgwMjExX3NlbmRfcnhfYXNzb2MocmRldiwgZGV2LCBidWYsIGxlbiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoc3RhdHVzX2NvZGUgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0FVVEhfQlNTRVM7IGkrKykgeworCQkJaWYgKCF3ZGV2LT5hdXRoX2Jzc2VzW2ldKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG1lbWNtcCh3ZGV2LT5hdXRoX2Jzc2VzW2ldLT5wdWIuYnNzaWQsIG1nbXQtPmJzc2lkLAorCQkJCSAgIEVUSF9BTEVOKSA9PSAwKSB7CisJCQkJYnNzID0gd2Rldi0+YXV0aF9ic3Nlc1tpXTsKKwkJCQl3ZGV2LT5hdXRoX2Jzc2VzW2ldID0gTlVMTDsKKwkJCQkvKiBhZGRpdGlvbmFsIHJlZmVyZW5jZSB0byBkcm9wIGhvbGQgKi8KKwkJCQljZmc4MDIxMV9yZWZfYnNzKGJzcyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlXQVJOX09OKCFic3MpOworCX0KKworCWlmICghd2Rldi0+Y29ubiAmJiB3ZGV2LT5zbWVfc3RhdGUgPT0gQ0ZHODAyMTFfU01FX0lETEUpIHsKKwkJLyoKKwkJICogVGhpcyBpcyBmb3IgdGhlIHVzZXJzcGFjZSBTTUUsIHRoZSBDT05ORUNUSU5HCisJCSAqIHN0YXRlIHdpbGwgYmUgY2hhbmdlZCB0byBDT05ORUNURUQgYnkKKwkJICogX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdCgpIGJlbG93LgorCQkgKi8KKwkJd2Rldi0+c21lX3N0YXRlID0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RJTkc7CisJfQorCisJLyogdGhpcyBjb25zdW1lcyBvbmUgYnNzIHJlZmVyZW5jZSAodW5sZXNzIGJzcyBpcyBOVUxMKSAqLworCV9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoZGV2LCBtZ210LT5ic3NpZCwgTlVMTCwgMCwgaWUsIGxlbiAtIGllb2ZmcywKKwkJCQkgIHN0YXR1c19jb2RlLAorCQkJCSAgc3RhdHVzX2NvZGUgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUywKKwkJCQkgIGJzcyA/ICZic3MtPnB1YiA6IE5VTEwpOworCS8qIGRyb3AgaG9sZCBub3csIGFuZCBhbHNvIHJlZmVyZW5jZSBhY3F1aXJlZCBhYm92ZSAqLworCWlmIChic3MpIHsKKwkJY2ZnODAyMTFfdW5ob2xkX2Jzcyhic3MpOworCQljZmc4MDIxMV9wdXRfYnNzKCZic3MtPnB1Yik7CisJfQorCisgb3V0OgorCXdkZXZfdW5sb2NrKHdkZXYpOwogfQogRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zZW5kX3J4X2Fzc29jKTsKIAotdm9pZCBjZmc4MDIxMV9zZW5kX2RlYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQorc3RhdGljIHZvaWQgX19jZmc4MDIxMV9zZW5kX2RlYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCiB7Ci0Jc3RydWN0IHdpcGh5ICp3aXBoeSA9IGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHk7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gd2Rldi0+d2lwaHk7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKLQlubDgwMjExX3NlbmRfZGVhdXRoKHJkZXYsIGRldiwgYnVmLCBsZW4pOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilidWY7CisJY29uc3QgdTggKmJzc2lkID0gbWdtdC0+YnNzaWQ7CisJaW50IGk7CisJYm9vbCBkb25lID0gZmFsc2U7CisKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJbmw4MDIxMV9zZW5kX2RlYXV0aChyZGV2LCBkZXYsIGJ1ZiwgbGVuLCBHRlBfS0VSTkVMKTsKKworCWlmICh3ZGV2LT5jdXJyZW50X2JzcyAmJgorCSAgICBtZW1jbXAod2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CisJCWRvbmUgPSB0cnVlOworCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmN1cnJlbnRfYnNzKTsKKwkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+Y3VycmVudF9ic3MtPnB1Yik7CisJCXdkZXYtPmN1cnJlbnRfYnNzID0gTlVMTDsKKwl9IGVsc2UgZm9yIChpID0gMDsgaSA8IE1BWF9BVVRIX0JTU0VTOyBpKyspIHsKKwkJaWYgKHdkZXYtPmF1dGhfYnNzZXNbaV0gJiYKKwkJICAgIG1lbWNtcCh3ZGV2LT5hdXRoX2Jzc2VzW2ldLT5wdWIuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgPT0gMCkgeworCQkJY2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LT5hdXRoX2Jzc2VzW2ldKTsKKwkJCWNmZzgwMjExX3B1dF9ic3MoJndkZXYtPmF1dGhfYnNzZXNbaV0tPnB1Yik7CisJCQl3ZGV2LT5hdXRoX2Jzc2VzW2ldID0gTlVMTDsKKwkJCWRvbmUgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0gJiYKKwkJICAgIG1lbWNtcCh3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldLT5wdWIuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgPT0gMCkgeworCQkJY2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldKTsKKwkJCWNmZzgwMjExX3B1dF9ic3MoJndkZXYtPmF1dGh0cnlfYnNzZXNbaV0tPnB1Yik7CisJCQl3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldID0gTlVMTDsKKwkJCWRvbmUgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlXQVJOX09OKCFkb25lKTsKKworCWlmICh3ZGV2LT5zbWVfc3RhdGUgPT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RFRCkgeworCQl1MTYgcmVhc29uX2NvZGU7CisJCWJvb2wgZnJvbV9hcDsKKworCQlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGVhdXRoLnJlYXNvbl9jb2RlKTsKKworCQlmcm9tX2FwID0gbWVtY21wKG1nbXQtPnNhLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgIT0gMDsKKwkJX19jZmc4MDIxMV9kaXNjb25uZWN0ZWQoZGV2LCBOVUxMLCAwLCByZWFzb25fY29kZSwgZnJvbV9hcCk7CisJfSBlbHNlIGlmICh3ZGV2LT5zbWVfc3RhdGUgPT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RJTkcpIHsKKwkJX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChkZXYsIG1nbXQtPmJzc2lkLCBOVUxMLCAwLCBOVUxMLCAwLAorCQkJCQkgIFdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkUsCisJCQkJCSAgZmFsc2UsIE5VTEwpOworCX0KK30KKworCit2b2lkIGNmZzgwMjExX3NlbmRfZGVhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sCisJCQkgIHZvaWQgKmNvb2tpZSkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCisJQlVHX09OKGNvb2tpZSAmJiB3ZGV2ICE9IGNvb2tpZSk7CisKKwlpZiAoY29va2llKSB7CisJCS8qIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2sgKi8KKwkJX19jZmc4MDIxMV9zZW5kX2RlYXV0aChkZXYsIGJ1ZiwgbGVuKTsKKwl9IGVsc2UgeworCQl3ZGV2X2xvY2sod2Rldik7CisJCV9fY2ZnODAyMTFfc2VuZF9kZWF1dGgoZGV2LCBidWYsIGxlbik7CisJCXdkZXZfdW5sb2NrKHdkZXYpOworCX0KIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfc2VuZF9kZWF1dGgpOwogCi12b2lkIGNmZzgwMjExX3NlbmRfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikKK3N0YXRpYyB2b2lkIF9fY2ZnODAyMTFfc2VuZF9kaXNhc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3ZGV2LT53aXBoeTsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOwotCW5sODAyMTFfc2VuZF9kaXNhc3NvYyhyZGV2LCBkZXYsIGJ1ZiwgbGVuKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopYnVmOworCWNvbnN0IHU4ICpic3NpZCA9IG1nbXQtPmJzc2lkOworCWludCBpOworCXUxNiByZWFzb25fY29kZTsKKwlib29sIGZyb21fYXA7CisJYm9vbCBkb25lID0gZmFsc2U7CisKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJbmw4MDIxMV9zZW5kX2Rpc2Fzc29jKHJkZXYsIGRldiwgYnVmLCBsZW4sIEdGUF9LRVJORUwpOworCisJaWYgKHdkZXYtPnNtZV9zdGF0ZSAhPSBDRkc4MDIxMV9TTUVfQ09OTkVDVEVEKQorCQlyZXR1cm47CisKKwlpZiAod2Rldi0+Y3VycmVudF9ic3MgJiYKKwkgICAgbWVtY21wKHdkZXYtPmN1cnJlbnRfYnNzLT5wdWIuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgPT0gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0FVVEhfQlNTRVM7IGkrKykgeworCQkJaWYgKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0gfHwgd2Rldi0+YXV0aF9ic3Nlc1tpXSkKKwkJCQljb250aW51ZTsKKwkJCXdkZXYtPmF1dGhfYnNzZXNbaV0gPSB3ZGV2LT5jdXJyZW50X2JzczsKKwkJCXdkZXYtPmN1cnJlbnRfYnNzID0gTlVMTDsKKwkJCWRvbmUgPSB0cnVlOworCQkJY2ZnODAyMTFfc21lX2Rpc2Fzc29jKGRldiwgaSk7CisJCQlicmVhazsKKwkJfQorCQlXQVJOX09OKCFkb25lKTsKKwl9IGVsc2UKKwkJV0FSTl9PTigxKTsKKworCisJcmVhc29uX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmRpc2Fzc29jLnJlYXNvbl9jb2RlKTsKKworCWZyb21fYXAgPSBtZW1jbXAobWdtdC0+c2EsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSAhPSAwOworCV9fY2ZnODAyMTFfZGlzY29ubmVjdGVkKGRldiwgTlVMTCwgMCwgcmVhc29uX2NvZGUsIGZyb21fYXApOworfQorCit2b2lkIGNmZzgwMjExX3NlbmRfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCSAgICB2b2lkICpjb29raWUpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKworCUJVR19PTihjb29raWUgJiYgd2RldiAhPSBjb29raWUpOworCisJaWYgKGNvb2tpZSkgeworCQkvKiBjYWxsZWQgd2l0aGluIGNhbGxiYWNrICovCisJCV9fY2ZnODAyMTFfc2VuZF9kaXNhc3NvYyhkZXYsIGJ1ZiwgbGVuKTsKKwl9IGVsc2UgeworCQl3ZGV2X2xvY2sod2Rldik7CisJCV9fY2ZnODAyMTFfc2VuZF9kaXNhc3NvYyhkZXYsIGJ1ZiwgbGVuKTsKKwkJd2Rldl91bmxvY2sod2Rldik7CisJfQogfQogRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zZW5kX2Rpc2Fzc29jKTsKIAotc3RhdGljIHZvaWQgY2ZnODAyMTFfd2V4dF9kaXNjb25uZWN0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLSNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCi0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBjZmc4MDIxMV9zZW5kX2F1dGhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcikKIHsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3ZGV2LT53aXBoeTsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOwotCW5sODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQocmRldiwgZGV2LCBhZGRyKTsKLQljZmc4MDIxMV93ZXh0X2Rpc2Nvbm5lY3RlZChkZXYpOworCWludCBpOworCWJvb2wgZG9uZSA9IGZhbHNlOworCisJd2Rldl9sb2NrKHdkZXYpOworCisJbmw4MDIxMV9zZW5kX2F1dGhfdGltZW91dChyZGV2LCBkZXYsIGFkZHIsIEdGUF9LRVJORUwpOworCWlmICh3ZGV2LT5zbWVfc3RhdGUgPT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RJTkcpCisJCV9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoZGV2LCBhZGRyLCBOVUxMLCAwLCBOVUxMLCAwLAorCQkJCQkgIFdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkUsCisJCQkJCSAgZmFsc2UsIE5VTEwpOworCisJZm9yIChpID0gMDsgYWRkciAmJiBpIDwgTUFYX0FVVEhfQlNTRVM7IGkrKykgeworCQlpZiAod2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSAmJgorCQkgICAgbWVtY21wKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0tPnB1Yi5ic3NpZCwKKwkJCSAgIGFkZHIsIEVUSF9BTEVOKSA9PSAwKSB7CisJCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0pOworCQkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+YXV0aHRyeV9ic3Nlc1tpXS0+cHViKTsKKwkJCXdkZXYtPmF1dGh0cnlfYnNzZXNbaV0gPSBOVUxMOworCQkJZG9uZSA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCVdBUk5fT04oIWRvbmUpOworCisJd2Rldl91bmxvY2sod2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NlbmRfYXV0aF90aW1lb3V0KTsKIAogdm9pZCBjZmc4MDIxMV9zZW5kX2Fzc29jX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIpCiB7Ci0Jc3RydWN0IHdpcGh5ICp3aXBoeSA9IGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHk7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gd2Rldi0+d2lwaHk7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKLQlubDgwMjExX3NlbmRfYXNzb2NfdGltZW91dChyZGV2LCBkZXYsIGFkZHIpOwotCWNmZzgwMjExX3dleHRfZGlzY29ubmVjdGVkKGRldik7CisJaW50IGk7CisJYm9vbCBkb25lID0gZmFsc2U7CisKKwl3ZGV2X2xvY2sod2Rldik7CisKKwlubDgwMjExX3NlbmRfYXNzb2NfdGltZW91dChyZGV2LCBkZXYsIGFkZHIsIEdGUF9LRVJORUwpOworCWlmICh3ZGV2LT5zbWVfc3RhdGUgPT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RJTkcpCisJCV9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoZGV2LCBhZGRyLCBOVUxMLCAwLCBOVUxMLCAwLAorCQkJCQkgIFdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkUsCisJCQkJCSAgZmFsc2UsIE5VTEwpOworCisJZm9yIChpID0gMDsgYWRkciAmJiBpIDwgTUFYX0FVVEhfQlNTRVM7IGkrKykgeworCQlpZiAod2Rldi0+YXV0aF9ic3Nlc1tpXSAmJgorCQkgICAgbWVtY21wKHdkZXYtPmF1dGhfYnNzZXNbaV0tPnB1Yi5ic3NpZCwKKwkJCSAgIGFkZHIsIEVUSF9BTEVOKSA9PSAwKSB7CisJCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmF1dGhfYnNzZXNbaV0pOworCQkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+YXV0aF9ic3Nlc1tpXS0+cHViKTsKKwkJCXdkZXYtPmF1dGhfYnNzZXNbaV0gPSBOVUxMOworCQkJZG9uZSA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCVdBUk5fT04oIWRvbmUpOworCisJd2Rldl91bmxvY2sod2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NlbmRfYXNzb2NfdGltZW91dCk7CiAKIHZvaWQgY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwKIAkJCQkgIGVudW0gbmw4MDIxMV9rZXlfdHlwZSBrZXlfdHlwZSwgaW50IGtleV9pZCwKLQkJCQkgIGNvbnN0IHU4ICp0c2MpCisJCQkJICBjb25zdCB1OCAqdHNjLCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHdpcGh5ICp3aXBoeSA9IGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHk7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKLQlubDgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUocmRldiwgZGV2LCBhZGRyLCBrZXlfdHlwZSwga2V5X2lkLCB0c2MpOworI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJY2hhciAqYnVmID0ga21hbGxvYygxMjgsIGdmcCk7CisKKwlpZiAoYnVmKSB7CisJCXNwcmludGYoYnVmLCAiTUxNRS1NSUNIQUVMTUlDRkFJTFVSRS5pbmRpY2F0aW9uKCIKKwkJCSJrZXlpZD0lZCAlc2Nhc3QgYWRkcj0lcE0pIiwga2V5X2lkLAorCQkJa2V5X3R5cGUgPT0gTkw4MDIxMV9LRVlUWVBFX0dST1VQID8gImJyb2FkIiA6ICJ1bmkiLAorCQkJYWRkcik7CisJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwkJd3JxdS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVkNVU1RPTSwgJndycXUsIGJ1Zik7CisJCWtmcmVlKGJ1Zik7CisJfQorI2VuZGlmCisKKwlubDgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUocmRldiwgZGV2LCBhZGRyLCBrZXlfdHlwZSwga2V5X2lkLCB0c2MsIGdmcCk7CiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUpOworCisvKiBzb21lIE1MTUUgaGFuZGxpbmcgZm9yIHVzZXJzcGFjZSBTTUUgKi8KK2ludCBfX2NmZzgwMjExX21sbWVfYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkgZW51bSBubDgwMjExX2F1dGhfdHlwZSBhdXRoX3R5cGUsCisJCQkgY29uc3QgdTggKmJzc2lkLAorCQkJIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZF9sZW4sCisJCQkgY29uc3QgdTggKmllLCBpbnQgaWVfbGVuLAorCQkJIGNvbnN0IHU4ICprZXksIGludCBrZXlfbGVuLCBpbnQga2V5X2lkeCkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9hdXRoX3JlcXVlc3QgcmVxOworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKwlpbnQgaSwgZXJyLCBzbG90ID0gLTEsIG5mcmVlID0gMDsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlpZiAoYXV0aF90eXBlID09IE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWSkKKwkJaWYgKCFrZXkgfHwgIWtleV9sZW4gfHwga2V5X2lkeCA8IDAgfHwga2V5X2lkeCA+IDQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3ZGV2LT5jdXJyZW50X2JzcyAmJgorCSAgICBtZW1jbXAoYnNzaWQsIHdkZXYtPmN1cnJlbnRfYnNzLT5wdWIuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKQorCQlyZXR1cm4gLUVBTFJFQURZOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9BVVRIX0JTU0VTOyBpKyspIHsKKwkJaWYgKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0gJiYKKwkJICAgIG1lbWNtcChic3NpZCwgd2Rldi0+YXV0aHRyeV9ic3Nlc1tpXS0+cHViLmJzc2lkLAorCQkJCQkJRVRIX0FMRU4pID09IDApCisJCQlyZXR1cm4gLUVBTFJFQURZOworCQlpZiAod2Rldi0+YXV0aF9ic3Nlc1tpXSAmJgorCQkgICAgbWVtY21wKGJzc2lkLCB3ZGV2LT5hdXRoX2Jzc2VzW2ldLT5wdWIuYnNzaWQsCisJCQkJCQlFVEhfQUxFTikgPT0gMCkKKwkJCXJldHVybiAtRUFMUkVBRFk7CisJfQorCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKworCXJlcS5pZSA9IGllOworCXJlcS5pZV9sZW4gPSBpZV9sZW47CisJcmVxLmF1dGhfdHlwZSA9IGF1dGhfdHlwZTsKKwlyZXEuYnNzID0gY2ZnODAyMTFfZ2V0X2JzcygmcmRldi0+d2lwaHksIGNoYW4sIGJzc2lkLCBzc2lkLCBzc2lkX2xlbiwKKwkJCQkgICBXTEFOX0NBUEFCSUxJVFlfRVNTLCBXTEFOX0NBUEFCSUxJVFlfRVNTKTsKKwlyZXEua2V5ID0ga2V5OworCXJlcS5rZXlfbGVuID0ga2V5X2xlbjsKKwlyZXEua2V5X2lkeCA9IGtleV9pZHg7CisJaWYgKCFyZXEuYnNzKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWJzcyA9IGJzc19mcm9tX3B1YihyZXEuYnNzKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQVVUSF9CU1NFUzsgaSsrKSB7CisJCWlmICghd2Rldi0+YXV0aF9ic3Nlc1tpXSAmJiAhd2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSkgeworCQkJc2xvdCA9IGk7CisJCQluZnJlZSsrOworCQl9CisJfQorCisJLyogd2UgbmVlZCBvbmUgZnJlZSBzbG90IGZvciBkaXNhc3NvYyBhbmQgb25lIGZvciB0aGlzIGF1dGggKi8KKwlpZiAobmZyZWUgPCAyKSB7CisJCWVyciA9IC1FTk9TUEM7CisJCWdvdG8gb3V0OworCX0KKworCXdkZXYtPmF1dGh0cnlfYnNzZXNbc2xvdF0gPSBic3M7CisJY2ZnODAyMTFfaG9sZF9ic3MoYnNzKTsKKworCWVyciA9IHJkZXYtPm9wcy0+YXV0aCgmcmRldi0+d2lwaHksIGRldiwgJnJlcSk7CisJaWYgKGVycikgeworCQl3ZGV2LT5hdXRodHJ5X2Jzc2VzW3Nsb3RdID0gTlVMTDsKKwkJY2ZnODAyMTFfdW5ob2xkX2Jzcyhic3MpOworCX0KKworIG91dDoKKwlpZiAoZXJyKQorCQljZmc4MDIxMV9wdXRfYnNzKHJlcS5ic3MpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBjZmc4MDIxMV9tbG1lX2F1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkgICAgICAgZW51bSBubDgwMjExX2F1dGhfdHlwZSBhdXRoX3R5cGUsIGNvbnN0IHU4ICpic3NpZCwKKwkJICAgICAgIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZF9sZW4sCisJCSAgICAgICBjb25zdCB1OCAqaWUsIGludCBpZV9sZW4sCisJCSAgICAgICBjb25zdCB1OCAqa2V5LCBpbnQga2V5X2xlbiwgaW50IGtleV9pZHgpCit7CisJaW50IGVycjsKKworCXdkZXZfbG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOworCWVyciA9IF9fY2ZnODAyMTFfbWxtZV9hdXRoKHJkZXYsIGRldiwgY2hhbiwgYXV0aF90eXBlLCBic3NpZCwKKwkJCQkgICBzc2lkLCBzc2lkX2xlbiwgaWUsIGllX2xlbiwKKwkJCQkgICBrZXksIGtleV9sZW4sIGtleV9pZHgpOworCXdkZXZfdW5sb2NrKGRldi0+aWVlZTgwMjExX3B0cik7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgX19jZmc4MDIxMV9tbG1lX2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJICBjb25zdCB1OCAqYnNzaWQsIGNvbnN0IHU4ICpwcmV2X2Jzc2lkLAorCQkJICBjb25zdCB1OCAqc3NpZCwgaW50IHNzaWRfbGVuLAorCQkJICBjb25zdCB1OCAqaWUsIGludCBpZV9sZW4sIGJvb2wgdXNlX21mcCwKKwkJCSAgc3RydWN0IGNmZzgwMjExX2NyeXB0b19zZXR0aW5ncyAqY3J5cHQpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCByZXE7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCWludCBpLCBlcnIsIHNsb3QgPSAtMTsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworCisJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKQorCQlyZXR1cm4gLUVBTFJFQURZOworCisJcmVxLmllID0gaWU7CisJcmVxLmllX2xlbiA9IGllX2xlbjsKKwltZW1jcHkoJnJlcS5jcnlwdG8sIGNyeXB0LCBzaXplb2YocmVxLmNyeXB0bykpOworCXJlcS51c2VfbWZwID0gdXNlX21mcDsKKwlyZXEucHJldl9ic3NpZCA9IHByZXZfYnNzaWQ7CisJcmVxLmJzcyA9IGNmZzgwMjExX2dldF9ic3MoJnJkZXYtPndpcGh5LCBjaGFuLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4sCisJCQkJICAgV0xBTl9DQVBBQklMSVRZX0VTUywgV0xBTl9DQVBBQklMSVRZX0VTUyk7CisJaWYgKCFyZXEuYnNzKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWJzcyA9IGJzc19mcm9tX3B1YihyZXEuYnNzKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQVVUSF9CU1NFUzsgaSsrKSB7CisJCWlmIChic3MgPT0gd2Rldi0+YXV0aF9ic3Nlc1tpXSkgeworCQkJc2xvdCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChzbG90IDwgMCkgeworCQllcnIgPSAtRU5PVENPTk47CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IHJkZXYtPm9wcy0+YXNzb2MoJnJkZXYtPndpcGh5LCBkZXYsICZyZXEpOworIG91dDoKKwkvKiBzdGlsbCBhIHJlZmVyZW5jZSBpbiB3ZGV2LT5hdXRoX2Jzc2VzW3Nsb3RdICovCisJY2ZnODAyMTFfcHV0X2JzcyhyZXEuYnNzKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgY2ZnODAyMTFfbWxtZV9hc3NvYyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJY29uc3QgdTggKmJzc2lkLCBjb25zdCB1OCAqcHJldl9ic3NpZCwKKwkJCWNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZF9sZW4sCisJCQljb25zdCB1OCAqaWUsIGludCBpZV9sZW4sIGJvb2wgdXNlX21mcCwKKwkJCXN0cnVjdCBjZmc4MDIxMV9jcnlwdG9fc2V0dGluZ3MgKmNyeXB0KQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJaW50IGVycjsKKworCXdkZXZfbG9jayh3ZGV2KTsKKwllcnIgPSBfX2NmZzgwMjExX21sbWVfYXNzb2MocmRldiwgZGV2LCBjaGFuLCBic3NpZCwgcHJldl9ic3NpZCwKKwkJCQkgICAgc3NpZCwgc3NpZF9sZW4sIGllLCBpZV9sZW4sIHVzZV9tZnAsIGNyeXB0KTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBfX2NmZzgwMjExX21sbWVfZGVhdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKKwkJCSAgIGNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwgdTE2IHJlYXNvbikKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCByZXE7CisJaW50IGk7CisKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwlyZXEucmVhc29uX2NvZGUgPSByZWFzb247CisJcmVxLmllID0gaWU7CisJcmVxLmllX2xlbiA9IGllX2xlbjsKKwlpZiAod2Rldi0+Y3VycmVudF9ic3MgJiYKKwkgICAgbWVtY21wKHdkZXYtPmN1cnJlbnRfYnNzLT5wdWIuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgPT0gMCkgeworCQlyZXEuYnNzID0gJndkZXYtPmN1cnJlbnRfYnNzLT5wdWI7CisJfSBlbHNlIGZvciAoaSA9IDA7IGkgPCBNQVhfQVVUSF9CU1NFUzsgaSsrKSB7CisJCWlmICh3ZGV2LT5hdXRoX2Jzc2VzW2ldICYmCisJCSAgICBtZW1jbXAoYnNzaWQsIHdkZXYtPmF1dGhfYnNzZXNbaV0tPnB1Yi5ic3NpZCwgRVRIX0FMRU4pID09IDApIHsKKwkJCXJlcS5ic3MgPSAmd2Rldi0+YXV0aF9ic3Nlc1tpXS0+cHViOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0gJiYKKwkJICAgIG1lbWNtcChic3NpZCwgd2Rldi0+YXV0aHRyeV9ic3Nlc1tpXS0+cHViLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkgeworCQkJcmVxLmJzcyA9ICZ3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldLT5wdWI7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcmVxLmJzcykKKwkJcmV0dXJuIC1FTk9UQ09OTjsKKworCXJldHVybiByZGV2LT5vcHMtPmRlYXV0aCgmcmRldi0+d2lwaHksIGRldiwgJnJlcSwgd2Rldik7Cit9CisKK2ludCBjZmc4MDIxMV9tbG1lX2RlYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAorCQkJIGNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwgdTE2IHJlYXNvbikKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCWludCBlcnI7CisKKwl3ZGV2X2xvY2sod2Rldik7CisJZXJyID0gX19jZmc4MDIxMV9tbG1lX2RlYXV0aChyZGV2LCBkZXYsIGJzc2lkLCBpZSwgaWVfbGVuLCByZWFzb24pOworCXdkZXZfdW5sb2NrKHdkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2NmZzgwMjExX21sbWVfZGlzYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCQkJICAgIGNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwgdTE2IHJlYXNvbikKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9kaXNhc3NvY19yZXF1ZXN0IHJlcTsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlpZiAod2Rldi0+c21lX3N0YXRlICE9IENGRzgwMjExX1NNRV9DT05ORUNURUQpCisJCXJldHVybiAtRU5PVENPTk47CisKKwlpZiAoV0FSTl9PTighd2Rldi0+Y3VycmVudF9ic3MpKQorCQlyZXR1cm4gLUVOT1RDT05OOworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwlyZXEucmVhc29uX2NvZGUgPSByZWFzb247CisJcmVxLmllID0gaWU7CisJcmVxLmllX2xlbiA9IGllX2xlbjsKKwlpZiAobWVtY21wKHdkZXYtPmN1cnJlbnRfYnNzLT5wdWIuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgPT0gMCkKKwkJcmVxLmJzcyA9ICZ3ZGV2LT5jdXJyZW50X2Jzcy0+cHViOworCWVsc2UKKwkJcmV0dXJuIC1FTk9UQ09OTjsKKworCXJldHVybiByZGV2LT5vcHMtPmRpc2Fzc29jKCZyZGV2LT53aXBoeSwgZGV2LCAmcmVxLCB3ZGV2KTsKK30KKworaW50IGNmZzgwMjExX21sbWVfZGlzYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAorCQkJICAgY29uc3QgdTggKmllLCBpbnQgaWVfbGVuLCB1MTYgcmVhc29uKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJaW50IGVycjsKKworCXdkZXZfbG9jayh3ZGV2KTsKKwllcnIgPSBfX2NmZzgwMjExX21sbWVfZGlzYXNzb2MocmRldiwgZGV2LCBic3NpZCwgaWUsIGllX2xlbiwgcmVhc29uKTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgY2ZnODAyMTFfbWxtZV9kb3duKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgcmVxOworCWludCBpOworCisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKKworCWlmICghcmRldi0+b3BzLT5kZWF1dGgpCisJCXJldHVybjsKKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisJcmVxLnJlYXNvbl9jb2RlID0gV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkc7CisJcmVxLmllID0gTlVMTDsKKwlyZXEuaWVfbGVuID0gMDsKKworCWlmICh3ZGV2LT5jdXJyZW50X2JzcykgeworCQlyZXEuYnNzID0gJndkZXYtPmN1cnJlbnRfYnNzLT5wdWI7CisJCXJkZXYtPm9wcy0+ZGVhdXRoKCZyZGV2LT53aXBoeSwgZGV2LCAmcmVxLCB3ZGV2KTsKKwkJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKSB7CisJCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmN1cnJlbnRfYnNzKTsKKwkJCWNmZzgwMjExX3B1dF9ic3MoJndkZXYtPmN1cnJlbnRfYnNzLT5wdWIpOworCQkJd2Rldi0+Y3VycmVudF9ic3MgPSBOVUxMOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9BVVRIX0JTU0VTOyBpKyspIHsKKwkJaWYgKHdkZXYtPmF1dGhfYnNzZXNbaV0pIHsKKwkJCXJlcS5ic3MgPSAmd2Rldi0+YXV0aF9ic3Nlc1tpXS0+cHViOworCQkJcmRldi0+b3BzLT5kZWF1dGgoJnJkZXYtPndpcGh5LCBkZXYsICZyZXEsIHdkZXYpOworCQkJaWYgKHdkZXYtPmF1dGhfYnNzZXNbaV0pIHsKKwkJCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmF1dGhfYnNzZXNbaV0pOworCQkJCWNmZzgwMjExX3B1dF9ic3MoJndkZXYtPmF1dGhfYnNzZXNbaV0tPnB1Yik7CisJCQkJd2Rldi0+YXV0aF9ic3Nlc1tpXSA9IE5VTEw7CisJCQl9CisJCX0KKwkJaWYgKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0pIHsKKwkJCXJlcS5ic3MgPSAmd2Rldi0+YXV0aHRyeV9ic3Nlc1tpXS0+cHViOworCQkJcmRldi0+b3BzLT5kZWF1dGgoJnJkZXYtPndpcGh5LCBkZXYsICZyZXEsIHdkZXYpOworCQkJaWYgKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0pIHsKKwkJCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0pOworCQkJCWNmZzgwMjExX3B1dF9ic3MoJndkZXYtPmF1dGh0cnlfYnNzZXNbaV0tPnB1Yik7CisJCQkJd2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSA9IE5VTEw7CisJCQl9CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCA2MzQ0OTZiLi5lZGRhYjA5IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTE0LDggKzE0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAibmw4MDIxMS5oIgogI2luY2x1ZGUgInJlZy5oIgpAQCAtMjcsMjcgKzI5LDI5IEBACiAJLmhkcnNpemUgPSAwLAkJLyogbm8gcHJpdmF0ZSBoZWFkZXIgKi8KIAkudmVyc2lvbiA9IDEsCQkvKiBubyBwYXJ0aWN1bGFyIG1lYW5pbmcgbm93ICovCiAJLm1heGF0dHIgPSBOTDgwMjExX0FUVFJfTUFYLAorCS5uZXRuc29rID0gdHJ1ZSwKIH07CiAKLS8qIGludGVybmFsIGhlbHBlcjogZ2V0IGRydiBhbmQgZGV2ICovCi1zdGF0aWMgaW50IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsCi0JCQkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqKmRydiwKKy8qIGludGVybmFsIGhlbHBlcjogZ2V0IHJkZXYgYW5kIGRldiAqLworc3RhdGljIGludCBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCisJCQkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqKnJkZXYsCiAJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICoqZGV2KQogeworCXN0cnVjdCBubGF0dHIgKiphdHRycyA9IGluZm8tPmF0dHJzOwogCWludCBpZmluZGV4OwogCiAJaWYgKCFhdHRyc1tOTDgwMjExX0FUVFJfSUZJTkRFWF0pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWZpbmRleCA9IG5sYV9nZXRfdTMyKGF0dHJzW05MODAyMTFfQVRUUl9JRklOREVYXSk7Ci0JKmRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmluZGV4KTsKKwkqZGV2ID0gZGV2X2dldF9ieV9pbmRleChnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTsKIAlpZiAoISpkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCi0JKmRydiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGlmaW5kZXgpOwotCWlmIChJU19FUlIoKmRydikpIHsKKwkqcmRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGdlbmxfaW5mb19uZXQoaW5mbyksIGlmaW5kZXgpOworCWlmIChJU19FUlIoKnJkZXYpKSB7CiAJCWRldl9wdXQoKmRldik7Ci0JCXJldHVybiBQVFJfRVJSKCpkcnYpOworCQlyZXR1cm4gUFRSX0VSUigqcmRldik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03MSw3ICs3NSw5IEBACiAJW05MODAyMTFfQVRUUl9JRk5BTUVdID0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HLCAubGVuID0gSUZOQU1TSVotMSB9LAogCiAJW05MODAyMTFfQVRUUl9NQUNdID0geyAudHlwZSA9IE5MQV9CSU5BUlksIC5sZW4gPSBFVEhfQUxFTiB9LAorCVtOTDgwMjExX0FUVFJfUFJFVl9CU1NJRF0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwgLmxlbiA9IEVUSF9BTEVOIH0sCiAKKwlbTkw4MDIxMV9BVFRSX0tFWV0gPSB7IC50eXBlID0gTkxBX05FU1RFRCwgfSwKIAlbTkw4MDIxMV9BVFRSX0tFWV9EQVRBXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAogCQkJCSAgICAubGVuID0gV0xBTl9NQVhfS0VZX0xFTiB9LAogCVtOTDgwMjExX0FUVFJfS0VZX0lEWF0gPSB7IC50eXBlID0gTkxBX1U4IH0sCkBAIC0xMjgsNiArMTM0LDIxIEBACiAJCS5sZW4gPSBzaXplb2Yoc3RydWN0IG5sODAyMTFfc3RhX2ZsYWdfdXBkYXRlKSwKIAl9LAogCVtOTDgwMjExX0FUVFJfQ09OVFJPTF9QT1JUXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAorCVtOTDgwMjExX0FUVFJfUFJJVkFDWV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKKwlbTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURV9HUk9VUF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtOTDgwMjExX0FUVFJfV1BBX1ZFUlNJT05TXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW05MODAyMTFfQVRUUl9QSURdID0geyAudHlwZSA9IE5MQV9VMzIgfSwKK307CisKKy8qIHBvbGljeSBmb3IgdGhlIGF0dHJpYnV0ZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeQorbmw4MDIxMV9rZXlfcG9saWN5W05MODAyMTFfS0VZX01BWCArIDFdIF9fcmVhZF9tb3N0bHkgPSB7CisJW05MODAyMTFfS0VZX0RBVEFdID0geyAudHlwZSA9IE5MQV9CSU5BUlksIC5sZW4gPSBXTEFOX01BWF9LRVlfTEVOIH0sCisJW05MODAyMTFfS0VZX0lEWF0gPSB7IC50eXBlID0gTkxBX1U4IH0sCisJW05MODAyMTFfS0VZX0NJUEhFUl0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtOTDgwMjExX0tFWV9TRVFdID0geyAudHlwZSA9IE5MQV9CSU5BUlksIC5sZW4gPSA4IH0sCisJW05MODAyMTFfS0VZX0RFRkFVTFRdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCisJW05MODAyMTFfS0VZX0RFRkFVTFRfTUdNVF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIH07CiAKIC8qIElFIHZhbGlkYXRpb24gKi8KQEAgLTE5NCw2ICsyMTUsMTc3IEBACiAKIC8qIG5ldGxpbmsgY29tbWFuZCBpbXBsZW1lbnRhdGlvbnMgKi8KIAorc3RydWN0IGtleV9wYXJzZSB7CisJc3RydWN0IGtleV9wYXJhbXMgcDsKKwlpbnQgaWR4OworCWJvb2wgZGVmLCBkZWZtZ210OworfTsKKworc3RhdGljIGludCBubDgwMjExX3BhcnNlX2tleV9uZXcoc3RydWN0IG5sYXR0ciAqa2V5LCBzdHJ1Y3Qga2V5X3BhcnNlICprKQoreworCXN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfS0VZX01BWCArIDFdOworCWludCBlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBOTDgwMjExX0tFWV9NQVgsIGtleSwKKwkJCQkgICBubDgwMjExX2tleV9wb2xpY3kpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlrLT5kZWYgPSAhIXRiW05MODAyMTFfS0VZX0RFRkFVTFRdOworCWstPmRlZm1nbXQgPSAhIXRiW05MODAyMTFfS0VZX0RFRkFVTFRfTUdNVF07CisKKwlpZiAodGJbTkw4MDIxMV9LRVlfSURYXSkKKwkJay0+aWR4ID0gbmxhX2dldF91OCh0YltOTDgwMjExX0tFWV9JRFhdKTsKKworCWlmICh0YltOTDgwMjExX0tFWV9EQVRBXSkgeworCQlrLT5wLmtleSA9IG5sYV9kYXRhKHRiW05MODAyMTFfS0VZX0RBVEFdKTsKKwkJay0+cC5rZXlfbGVuID0gbmxhX2xlbih0YltOTDgwMjExX0tFWV9EQVRBXSk7CisJfQorCisJaWYgKHRiW05MODAyMTFfS0VZX1NFUV0pIHsKKwkJay0+cC5zZXEgPSBubGFfZGF0YSh0YltOTDgwMjExX0tFWV9TRVFdKTsKKwkJay0+cC5zZXFfbGVuID0gbmxhX2xlbih0YltOTDgwMjExX0tFWV9TRVFdKTsKKwl9CisKKwlpZiAodGJbTkw4MDIxMV9LRVlfQ0lQSEVSXSkKKwkJay0+cC5jaXBoZXIgPSBubGFfZ2V0X3UzMih0YltOTDgwMjExX0tFWV9DSVBIRVJdKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfcGFyc2Vfa2V5X29sZChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3Qga2V5X3BhcnNlICprKQoreworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RBVEFdKSB7CisJCWstPnAua2V5ID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9EQVRBXSk7CisJCWstPnAua2V5X2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9EQVRBXSk7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfU0VRXSkgeworCQlrLT5wLnNlcSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfU0VRXSk7CisJCWstPnAuc2VxX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9TRVFdKTsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKQorCQlrLT5pZHggPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSk7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9DSVBIRVJdKQorCQlrLT5wLmNpcGhlciA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfQ0lQSEVSXSk7CisKKwlrLT5kZWYgPSAhIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF07CisJay0+ZGVmbWdtdCA9ICEhaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUX01HTVRdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9rZXkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGtleV9wYXJzZSAqaykKK3sKKwlpbnQgZXJyOworCisJbWVtc2V0KGssIDAsIHNpemVvZigqaykpOworCWstPmlkeCA9IC0xOworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVldKQorCQllcnIgPSBubDgwMjExX3BhcnNlX2tleV9uZXcoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV0sIGspOworCWVsc2UKKwkJZXJyID0gbmw4MDIxMV9wYXJzZV9rZXlfb2xkKGluZm8sIGspOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChrLT5kZWYgJiYgay0+ZGVmbWdtdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoay0+aWR4ICE9IC0xKSB7CisJCWlmIChrLT5kZWZtZ210KSB7CisJCQlpZiAoay0+aWR4IDwgNCB8fCBrLT5pZHggPiA1KQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgaWYgKGstPmRlZikgeworCQkJaWYgKGstPmlkeCA8IDAgfHwgay0+aWR4ID4gMykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCWlmIChrLT5pZHggPCAwIHx8IGstPmlkeCA+IDUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqCitubDgwMjExX3BhcnNlX2Nvbm5rZXlzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJICAgICAgIHN0cnVjdCBubGF0dHIgKmtleXMpCit7CisJc3RydWN0IGtleV9wYXJzZSBwYXJzZTsKKwlzdHJ1Y3QgbmxhdHRyICprZXk7CisJc3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICpyZXN1bHQ7CisJaW50IHJlbSwgZXJyLCBkZWYgPSAwOworCisJcmVzdWx0ID0ga3phbGxvYyhzaXplb2YoKnJlc3VsdCksIEdGUF9LRVJORUwpOworCWlmICghcmVzdWx0KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXJlc3VsdC0+ZGVmID0gLTE7CisJcmVzdWx0LT5kZWZtZ210ID0gLTE7CisKKwlubGFfZm9yX2VhY2hfbmVzdGVkKGtleSwga2V5cywgcmVtKSB7CisJCW1lbXNldCgmcGFyc2UsIDAsIHNpemVvZihwYXJzZSkpOworCQlwYXJzZS5pZHggPSAtMTsKKworCQllcnIgPSBubDgwMjExX3BhcnNlX2tleV9uZXcoa2V5LCAmcGFyc2UpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjsKKwkJZXJyID0gLUVJTlZBTDsKKwkJaWYgKCFwYXJzZS5wLmtleSkKKwkJCWdvdG8gZXJyb3I7CisJCWlmIChwYXJzZS5pZHggPCAwIHx8IHBhcnNlLmlkeCA+IDQpCisJCQlnb3RvIGVycm9yOworCQlpZiAocGFyc2UuZGVmKSB7CisJCQlpZiAoZGVmKQorCQkJCWdvdG8gZXJyb3I7CisJCQlkZWYgPSAxOworCQkJcmVzdWx0LT5kZWYgPSBwYXJzZS5pZHg7CisJCX0gZWxzZSBpZiAocGFyc2UuZGVmbWdtdCkKKwkJCWdvdG8gZXJyb3I7CisJCWVyciA9IGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhyZGV2LCAmcGFyc2UucCwKKwkJCQkJCSAgICAgcGFyc2UuaWR4LCBOVUxMKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyb3I7CisJCXJlc3VsdC0+cGFyYW1zW3BhcnNlLmlkeF0uY2lwaGVyID0gcGFyc2UucC5jaXBoZXI7CisJCXJlc3VsdC0+cGFyYW1zW3BhcnNlLmlkeF0ua2V5X2xlbiA9IHBhcnNlLnAua2V5X2xlbjsKKwkJcmVzdWx0LT5wYXJhbXNbcGFyc2UuaWR4XS5rZXkgPSByZXN1bHQtPmRhdGFbcGFyc2UuaWR4XTsKKwkJbWVtY3B5KHJlc3VsdC0+ZGF0YVtwYXJzZS5pZHhdLCBwYXJzZS5wLmtleSwgcGFyc2UucC5rZXlfbGVuKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworIGVycm9yOgorCWtmcmVlKHJlc3VsdCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RhdGljIGludCBubDgwMjExX2tleV9hbGxvd2VkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCit7CisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKKworCWlmICghbmV0aWZfcnVubmluZyh3ZGV2LT5uZXRkZXYpKQorCQlyZXR1cm4gLUVORVRET1dOOworCisJc3dpdGNoICh3ZGV2LT5pZnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjoKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJaWYgKCF3ZGV2LT5jdXJyZW50X2JzcykKKwkJCXJldHVybiAtRU5PTElOSzsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlpZiAod2Rldi0+c21lX3N0YXRlICE9IENGRzgwMjExX1NNRV9DT05ORUNURUQpCisJCQlyZXR1cm4gLUVOT0xJTks7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG5sODAyMTFfc2VuZF93aXBoeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZmxhZ3MsCiAJCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldikKIHsKQEAgLTIxNiw2ICs0MDgsOSBAQAogCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCBkZXYtPndpcGh5X2lkeCk7CiAJTkxBX1BVVF9TVFJJTkcobXNnLCBOTDgwMjExX0FUVFJfV0lQSFlfTkFNRSwgd2lwaHlfbmFtZSgmZGV2LT53aXBoeSkpOwogCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfR0VORVJBVElPTiwKKwkJICAgIGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uKTsKKwogCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfU0hPUlQsCiAJCSAgIGRldi0+d2lwaHkucmV0cnlfc2hvcnQpOwogCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfTE9ORywKQEAgLTM0NSw4ICs1NDAsMjMgQEAKIAlDTUQoZGVhdXRoLCBERUFVVEhFTlRJQ0FURSk7CiAJQ01EKGRpc2Fzc29jLCBESVNBU1NPQ0lBVEUpOwogCUNNRChqb2luX2lic3MsIEpPSU5fSUJTUyk7CisJaWYgKGRldi0+d2lwaHkubmV0bnNvaykgeworCQlpKys7CisJCU5MQV9QVVRfVTMyKG1zZywgaSwgTkw4MDIxMV9DTURfU0VUX1dJUEhZX05FVE5TKTsKKwl9CiAKICN1bmRlZiBDTUQKKworCWlmIChkZXYtPm9wcy0+Y29ubmVjdCB8fCBkZXYtPm9wcy0+YXV0aCkgeworCQlpKys7CisJCU5MQV9QVVRfVTMyKG1zZywgaSwgTkw4MDIxMV9DTURfQ09OTkVDVCk7CisJfQorCisJaWYgKGRldi0+b3BzLT5kaXNjb25uZWN0IHx8IGRldi0+b3BzLT5kZWF1dGgpIHsKKwkJaSsrOworCQlOTEFfUFVUX1UzMihtc2csIGksIE5MODAyMTFfQ01EX0RJU0NPTk5FQ1QpOworCX0KKwogCW5sYV9uZXN0X2VuZChtc2csIG5sX2NtZHMpOwogCiAJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKQEAgLTM2Myw3ICs1NzMsOSBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OwogCiAJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkgeworCQlpZiAoIW5ldF9lcSh3aXBoeV9uZXQoJmRldi0+d2lwaHkpLCBzb2NrX25ldChza2ItPnNrKSkpCisJCQljb250aW51ZTsKIAkJaWYgKCsraWR4IDw9IHN0YXJ0KQogCQkJY29udGludWU7CiAJCWlmIChubDgwMjExX3NlbmRfd2lwaHkoc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKQEAgLTM5NiwxNCArNjA4LDE0IEBACiAJaWYgKG5sODAyMTFfc2VuZF93aXBoeShtc2csIGluZm8tPnNuZF9waWQsIGluZm8tPnNuZF9zZXEsIDAsIGRldikgPCAwKQogCQlnb3RvIG91dF9mcmVlOwogCi0JY2ZnODAyMTFfcHV0X2RldihkZXYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KGRldik7CiAKLQlyZXR1cm4gZ2VubG1zZ191bmljYXN0KG1zZywgaW5mby0+c25kX3BpZCk7CisJcmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKIAogIG91dF9mcmVlOgogCW5sbXNnX2ZyZWUobXNnKTsKICBvdXRfZXJyOgotCWNmZzgwMjExX3B1dF9kZXYoZGV2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihkZXYpOwogCXJldHVybiAtRU5PQlVGUzsKIH0KIApAQCAtNDQ1LDcgKzY1Nyw3IEBACiAKIAltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKLQlyZGV2ID0gX19jZmc4MDIxMV9kcnZfZnJvbV9pbmZvKGluZm8pOworCXJkZXYgPSBfX2NmZzgwMjExX3JkZXZfZnJvbV9pbmZvKGluZm8pOwogCWlmIChJU19FUlIocmRldikpIHsKIAkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJCXJlc3VsdCA9IFBUUl9FUlIocmRldik7CkBAIC00OTIsMTUgKzcwNCw4IEBACiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7CiAJCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOwotCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfY2FwOwogCQl1MzIgZnJlcTsKIAotCQlpZiAoIXJkZXYtPm9wcy0+c2V0X2NoYW5uZWwpIHsKLQkJCXJlc3VsdCA9IC1FT1BOT1RTVVBQOwotCQkJZ290byBiYWRfcmVzOwotCQl9Ci0KIAkJcmVzdWx0ID0gLUVJTlZBTDsKIAogCQlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRV0pIHsKQEAgLTUxNCwzOCArNzE5LDEwIEBACiAJCX0KIAogCQlmcmVxID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKTsKLQkJY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCgmcmRldi0+d2lwaHksIGZyZXEpOwogCi0JCS8qIFByaW1hcnkgY2hhbm5lbCBub3QgYWxsb3dlZCAqLwotCQlpZiAoIWNoYW4gfHwgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKLQkJCWdvdG8gYmFkX3JlczsKLQotCQlpZiAoY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgJiYKLQkJICAgIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBNSU5VUykpCi0JCQlnb3RvIGJhZF9yZXM7Ci0JCWVsc2UgaWYgKGNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMgJiYKLQkJCSAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19IVDQwUExVUykpCi0JCQlnb3RvIGJhZF9yZXM7Ci0KLQkJLyoKLQkJICogQXQgdGhpcyBwb2ludCB3ZSBrbm93IGlmIHRoYXQgaWYgSFQ0MCB3YXMgcmVxdWVzdGVkCi0JCSAqIHdlIGFyZSBhbGxvd2VkIHRvIHVzZSBpdCBhbmQgdGhlIGV4dGVuc2lvbiBjaGFubmVsCi0JCSAqIGV4aXN0cy4KLQkJICovCi0KLQkJaHRfY2FwID0gJnJkZXYtPndpcGh5LmJhbmRzW2NoYW4tPmJhbmRdLT5odF9jYXA7Ci0KLQkJLyogbm8gSFQgY2FwYWJpbGl0aWVzIG9yIGludG9sZXJhbnQgKi8KLQkJaWYgKGNoYW5uZWxfdHlwZSAhPSBOTDgwMjExX0NIQU5fTk9fSFQpIHsKLQkJCWlmICghaHRfY2FwLT5odF9zdXBwb3J0ZWQpCi0JCQkJZ290byBiYWRfcmVzOwotCQkJaWYgKCEoaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkgfHwKLQkJCSAgICAoaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQXzQwTUhaX0lOVE9MRVJBTlQpKQotCQkJCWdvdG8gYmFkX3JlczsKLQkJfQotCi0JCXJlc3VsdCA9IHJkZXYtPm9wcy0+c2V0X2NoYW5uZWwoJnJkZXYtPndpcGh5LCBjaGFuLAotCQkJCQkJY2hhbm5lbF90eXBlKTsKKwkJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCQlyZXN1bHQgPSByZGV2X3NldF9mcmVxKHJkZXYsIE5VTEwsIGZyZXEsIGNoYW5uZWxfdHlwZSk7CisJCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOwogCQlpZiAocmVzdWx0KQogCQkJZ290byBiYWRfcmVzOwogCX0KQEAgLTY1MSw2ICs4MjgsMTEgQEAKIAlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgcmRldi0+d2lwaHlfaWR4KTsKIAlOTEFfUFVUX1NUUklORyhtc2csIE5MODAyMTFfQVRUUl9JRk5BTUUsIGRldi0+bmFtZSk7CiAJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZUWVBFLCBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSk7CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9HRU5FUkFUSU9OLAorCQkgICAgcmRldi0+ZGV2bGlzdF9nZW5lcmF0aW9uIF4KKwkJCShjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbiA8PCAyKSk7CisKIAlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOwogCiAgbmxhX3B1dF9mYWlsdXJlOgpAQCAtNjY0LDMyICs4NDYsMzQgQEAKIAlpbnQgaWZfaWR4ID0gMDsKIAlpbnQgd3Bfc3RhcnQgPSBjYi0+YXJnc1swXTsKIAlpbnQgaWZfc3RhcnQgPSBjYi0+YXJnc1sxXTsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKIAogCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmY2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KSB7CisJCWlmICghbmV0X2VxKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBzb2NrX25ldChza2ItPnNrKSkpCisJCQljb250aW51ZTsKIAkJaWYgKHdwX2lkeCA8IHdwX3N0YXJ0KSB7CiAJCQl3cF9pZHgrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmX2lkeCA9IDA7CiAKLQkJbXV0ZXhfbG9jaygmZGV2LT5kZXZsaXN0X210eCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgJmRldi0+bmV0ZGV2X2xpc3QsIGxpc3QpIHsKKwkJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZyZGV2LT5uZXRkZXZfbGlzdCwgbGlzdCkgewogCQkJaWYgKGlmX2lkeCA8IGlmX3N0YXJ0KSB7CiAJCQkJaWZfaWR4Kys7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAobmw4MDIxMV9zZW5kX2lmYWNlKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCiAJCQkJCSAgICAgICBjYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLAotCQkJCQkgICAgICAgZGV2LCB3ZGV2LT5uZXRkZXYpIDwgMCkgewotCQkJCW11dGV4X3VubG9jaygmZGV2LT5kZXZsaXN0X210eCk7CisJCQkJCSAgICAgICByZGV2LCB3ZGV2LT5uZXRkZXYpIDwgMCkgeworCQkJCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJaWZfaWR4Kys7CiAJCX0KLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmxpc3RfbXR4KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CiAKIAkJd3BfaWR4Kys7CiAJfQpAQCAtNzA5LDcgKzg5Myw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlpbnQgZXJyOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZGV2LCAmbmV0ZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZkZXYsICZuZXRkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTcyMiwxNSArOTA2LDE1IEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAKIAlkZXZfcHV0KG5ldGRldik7Ci0JY2ZnODAyMTFfcHV0X2RldihkZXYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KGRldik7CiAKLQlyZXR1cm4gZ2VubG1zZ191bmljYXN0KG1zZywgaW5mby0+c25kX3BpZCk7CisJcmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKIAogIG91dF9mcmVlOgogCW5sbXNnX2ZyZWUobXNnKTsKICBvdXRfZXJyOgogCWRldl9wdXQobmV0ZGV2KTsKLQljZmc4MDIxMV9wdXRfZGV2KGRldik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYoZGV2KTsKIAlyZXR1cm4gLUVOT0JVRlM7CiB9CiAKQEAgLTc2NSw5ICs5NDksOSBAQAogCiBzdGF0aWMgaW50IG5sODAyMTFfc2V0X2ludGVyZmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlzdHJ1Y3QgdmlmX3BhcmFtcyBwYXJhbXM7Ci0JaW50IGVyciwgaWZpbmRleDsKKwlpbnQgZXJyOwogCWVudW0gbmw4MDIxMV9pZnR5cGUgb3R5cGUsIG50eXBlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdTMyIF9mbGFncywgKmZsYWdzID0gTlVMTDsKQEAgLTc3NywxMyArOTYxLDExIEBACiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byB1bmxvY2tfcnRubDsKIAotCWlmaW5kZXggPSBkZXYtPmlmaW5kZXg7CiAJb3R5cGUgPSBudHlwZSA9IGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlOwotCWRldl9wdXQoZGV2KTsKIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUZUWVBFXSkgewogCQludHlwZSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRlRZUEVdKTsKQEAgLTc5NSwxMiArOTc3LDYgQEAKIAkJfQogCX0KIAotCWlmICghZHJ2LT5vcHMtPmNoYW5nZV92aXJ0dWFsX2ludGYgfHwKLQkgICAgIShkcnYtPndpcGh5LmludGVyZmFjZV9tb2RlcyAmICgxIDw8IG50eXBlKSkpIHsKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUVTSF9JRF0pIHsKIAkJaWYgKG50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKIAkJCWVyciA9IC1FSU5WQUw7CkBAIC04MjYsMjEgKzEwMDIsMTMgQEAKIAl9CiAKIAlpZiAoY2hhbmdlKQotCQllcnIgPSBkcnYtPm9wcy0+Y2hhbmdlX3ZpcnR1YWxfaW50ZigmZHJ2LT53aXBoeSwgaWZpbmRleCwKLQkJCQkJCSAgICBudHlwZSwgZmxhZ3MsICZwYXJhbXMpOworCQllcnIgPSBjZmc4MDIxMV9jaGFuZ2VfaWZhY2UocmRldiwgZGV2LCBudHlwZSwgZmxhZ3MsICZwYXJhbXMpOwogCWVsc2UKIAkJZXJyID0gMDsKIAotCWRldiA9IF9fZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpOwotCVdBUk5fT04oIWRldiB8fCAoIWVyciAmJiBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBudHlwZSkpOwotCi0JaWYgKGRldiAmJiAhZXJyICYmIChudHlwZSAhPSBvdHlwZSkpIHsKLQkJaWYgKG90eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJY2ZnODAyMTFfY2xlYXJfaWJzcyhkZXYsIGZhbHNlKTsKLQl9Ci0KICB1bmxvY2s6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWRldl9wdXQoZGV2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKICB1bmxvY2tfcnRubDoKIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CkBAIC04NDgsNyArMTAxNiw3IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfaW50ZXJmYWNlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCB2aWZfcGFyYW1zIHBhcmFtczsKIAlpbnQgZXJyOwogCWVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOwpAQCAtODY3LDE0ICsxMDM1LDE0IEBACiAKIAlydG5sX2xvY2soKTsKIAotCWRydiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pbmZvKGluZm8pOwotCWlmIChJU19FUlIoZHJ2KSkgewotCQllcnIgPSBQVFJfRVJSKGRydik7CisJcmRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pbmZvKGluZm8pOworCWlmIChJU19FUlIocmRldikpIHsKKwkJZXJyID0gUFRSX0VSUihyZGV2KTsKIAkJZ290byB1bmxvY2tfcnRubDsKIAl9CiAKLQlpZiAoIWRydi0+b3BzLT5hZGRfdmlydHVhbF9pbnRmIHx8Ci0JICAgICEoZHJ2LT53aXBoeS5pbnRlcmZhY2VfbW9kZXMgJiAoMSA8PCB0eXBlKSkpIHsKKwlpZiAoIXJkZXYtPm9wcy0+YWRkX3ZpcnR1YWxfaW50ZiB8fAorCSAgICAhKHJkZXYtPndpcGh5LmludGVyZmFjZV9tb2RlcyAmICgxIDw8IHR5cGUpKSkgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byB1bmxvY2s7CiAJfQpAQCAtODg4LDEyICsxMDU2LDEyIEBACiAJZXJyID0gcGFyc2VfbW9uaXRvcl9mbGFncyh0eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IgPwogCQkJCSAgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01OVFJfRkxBR1NdIDogTlVMTCwKIAkJCQkgICZmbGFncyk7Ci0JZXJyID0gZHJ2LT5vcHMtPmFkZF92aXJ0dWFsX2ludGYoJmRydi0+d2lwaHksCisJZXJyID0gcmRldi0+b3BzLT5hZGRfdmlydHVhbF9pbnRmKCZyZGV2LT53aXBoeSwKIAkJbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lGTkFNRV0pLAogCQl0eXBlLCBlcnIgPyBOVUxMIDogJmZsYWdzLCAmcGFyYW1zKTsKIAogIHVubG9jazoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAgdW5sb2NrX3J0bmw6CiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwpAQCAtOTAxLDI3ICsxMDY5LDI2IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfaW50ZXJmYWNlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7Ci0JaW50IGlmaW5kZXgsIGVycjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gdW5sb2NrX3J0bmw7Ci0JaWZpbmRleCA9IGRldi0+aWZpbmRleDsKLQlkZXZfcHV0KGRldik7CiAKLQlpZiAoIWRydi0+b3BzLT5kZWxfdmlydHVhbF9pbnRmKSB7CisJaWYgKCFyZGV2LT5vcHMtPmRlbF92aXJ0dWFsX2ludGYpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IGRydi0+b3BzLT5kZWxfdmlydHVhbF9pbnRmKCZkcnYtPndpcGh5LCBpZmluZGV4KTsKKwllcnIgPSByZGV2LT5vcHMtPmRlbF92aXJ0dWFsX2ludGYoJnJkZXYtPndpcGh5LCBkZXYpOwogCiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKKwlkZXZfcHV0KGRldik7CiAgdW5sb2NrX3J0bmw6CiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwpAQCAtOTMwLDEwICsxMDk3LDEyIEBACiBzdHJ1Y3QgZ2V0X2tleV9jb29raWUgewogCXN0cnVjdCBza19idWZmICptc2c7CiAJaW50IGVycm9yOworCWludCBpZHg7CiB9OwogCiBzdGF0aWMgdm9pZCBnZXRfa2V5X2NhbGxiYWNrKHZvaWQgKmMsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCiB7CisJc3RydWN0IG5sYXR0ciAqa2V5OwogCXN0cnVjdCBnZXRfa2V5X2Nvb2tpZSAqY29va2llID0gYzsKIAogCWlmIChwYXJhbXMtPmtleSkKQEAgLTk0OCw2ICsxMTE3LDI2IEBACiAJCU5MQV9QVVRfVTMyKGNvb2tpZS0+bXNnLCBOTDgwMjExX0FUVFJfS0VZX0NJUEhFUiwKIAkJCSAgICBwYXJhbXMtPmNpcGhlcik7CiAKKwlrZXkgPSBubGFfbmVzdF9zdGFydChjb29raWUtPm1zZywgTkw4MDIxMV9BVFRSX0tFWSk7CisJaWYgKCFrZXkpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJaWYgKHBhcmFtcy0+a2V5KQorCQlOTEFfUFVUKGNvb2tpZS0+bXNnLCBOTDgwMjExX0tFWV9EQVRBLAorCQkJcGFyYW1zLT5rZXlfbGVuLCBwYXJhbXMtPmtleSk7CisKKwlpZiAocGFyYW1zLT5zZXEpCisJCU5MQV9QVVQoY29va2llLT5tc2csIE5MODAyMTFfS0VZX1NFUSwKKwkJCXBhcmFtcy0+c2VxX2xlbiwgcGFyYW1zLT5zZXEpOworCisJaWYgKHBhcmFtcy0+Y2lwaGVyKQorCQlOTEFfUFVUX1UzMihjb29raWUtPm1zZywgTkw4MDIxMV9LRVlfQ0lQSEVSLAorCQkJICAgIHBhcmFtcy0+Y2lwaGVyKTsKKworCU5MQV9QVVRfVTgoY29va2llLT5tc2csIE5MODAyMTFfQVRUUl9LRVlfSURYLCBjb29raWUtPmlkeCk7CisKKwlubGFfbmVzdF9lbmQoY29va2llLT5tc2csIGtleSk7CisKIAlyZXR1cm47CiAgbmxhX3B1dF9mYWlsdXJlOgogCWNvb2tpZS0+ZXJyb3IgPSAxOwpAQCAtOTU1LDcgKzExNDQsNyBAQAogCiBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdTgga2V5X2lkeCA9IDA7CkBAIC05NzcsMTEgKzExNjYsMTEgQEAKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIHVubG9ja19ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+Z2V0X2tleSkgeworCWlmICghcmRldi0+b3BzLT5nZXRfa2V5KSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMDAxLDEzICsxMTkwLDE0IEBACiAJfQogCiAJY29va2llLm1zZyA9IG1zZzsKKwljb29raWUuaWR4ID0ga2V5X2lkeDsKIAogCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIGRldi0+aWZpbmRleCk7CiAJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9LRVlfSURYLCBrZXlfaWR4KTsKIAlpZiAobWFjX2FkZHIpCiAJCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfTUFDLCBFVEhfQUxFTiwgbWFjX2FkZHIpOwogCi0JZXJyID0gZHJ2LT5vcHMtPmdldF9rZXkoJmRydi0+d2lwaHksIGRldiwga2V5X2lkeCwgbWFjX2FkZHIsCisJZXJyID0gcmRldi0+b3BzLT5nZXRfa2V5KCZyZGV2LT53aXBoeSwgZGV2LCBrZXlfaWR4LCBtYWNfYWRkciwKIAkJCQkmY29va2llLCBnZXRfa2V5X2NhbGxiYWNrKTsKIAogCWlmIChlcnIpCkBAIC0xMDE3LDcgKzEyMDcsNyBAQAogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKLQllcnIgPSBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKKwllcnIgPSBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiAJZ290byBvdXQ7CiAKICBubGFfcHV0X2ZhaWx1cmU6CkBAIC0xMDI1LDcgKzEyMTUsNyBAQAogIGZyZWVfbXNnOgogCW5sbXNnX2ZyZWUobXNnKTsKICBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKICB1bmxvY2tfcnRubDoKIAlydG5sX3VubG9jaygpOwpAQCAtMTAzNSw1NyArMTIyNSw1NyBAQAogCiBzdGF0aWMgaW50IG5sODAyMTFfc2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlzdHJ1Y3Qga2V5X3BhcnNlIGtleTsKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JdTgga2V5X2lkeDsKIAlpbnQgKCpmdW5jKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkgICAgdTgga2V5X2luZGV4KTsKIAotCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKQorCWVyciA9IG5sODAyMTFfcGFyc2Vfa2V5KGluZm8sICZrZXkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoa2V5LmlkeCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Ja2V5X2lkeCA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKTsKLQotCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfTUdNVF0pIHsKLQkJaWYgKGtleV9pZHggPCA0IHx8IGtleV9pZHggPiA1KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlmIChrZXlfaWR4ID4gMykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBjdXJyZW50bHkgb25seSBzdXBwb3J0IHNldHRpbmcgZGVmYXVsdCBrZXkgKi8KLQlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF0gJiYKLQkgICAgIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01UXSkKKwkvKiBvbmx5IHN1cHBvcnQgc2V0dGluZyBkZWZhdWx0IGtleSAqLworCWlmICgha2V5LmRlZiAmJiAha2V5LmRlZm1nbXQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gdW5sb2NrX3J0bmw7CiAKLQlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUXSkKLQkJZnVuYyA9IGRydi0+b3BzLT5zZXRfZGVmYXVsdF9rZXk7CisJaWYgKGtleS5kZWYpCisJCWZ1bmMgPSByZGV2LT5vcHMtPnNldF9kZWZhdWx0X2tleTsKIAllbHNlCi0JCWZ1bmMgPSBkcnYtPm9wcy0+c2V0X2RlZmF1bHRfbWdtdF9rZXk7CisJCWZ1bmMgPSByZGV2LT5vcHMtPnNldF9kZWZhdWx0X21nbXRfa2V5OwogCiAJaWYgKCFmdW5jKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBmdW5jKCZkcnYtPndpcGh5LCBkZXYsIGtleV9pZHgpOworCXdkZXZfbG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOworCWVyciA9IG5sODAyMTFfa2V5X2FsbG93ZWQoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlpZiAoIWVycikKKwkJZXJyID0gZnVuYygmcmRldi0+d2lwaHksIGRldiwga2V5LmlkeCk7CisKICNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCiAJaWYgKCFlcnIpIHsKLQkJaWYgKGZ1bmMgPT0gZHJ2LT5vcHMtPnNldF9kZWZhdWx0X2tleSkKLQkJCWRldi0+aWVlZTgwMjExX3B0ci0+d2V4dC5kZWZhdWx0X2tleSA9IGtleV9pZHg7CisJCWlmIChmdW5jID09IHJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5KQorCQkJZGV2LT5pZWVlODAyMTFfcHRyLT53ZXh0LmRlZmF1bHRfa2V5ID0ga2V5LmlkeDsKIAkJZWxzZQotCQkJZGV2LT5pZWVlODAyMTFfcHRyLT53ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXlfaWR4OworCQkJZGV2LT5pZWVlODAyMTFfcHRyLT53ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBrZXkuaWR4OwogCX0KICNlbmRpZgorCXdkZXZfdW5sb2NrKGRldi0+aWVlZTgwMjExX3B0cik7CiAKICBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKIAogIHVubG9ja19ydG5sOgpAQCAtMTA5Niw2MiArMTI4Niw0NyBAQAogCiBzdGF0aWMgaW50IG5sODAyMTFfbmV3X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OwotCWludCBlcnIsIGk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3Qga2V5X3BhcmFtcyBwYXJhbXM7Ci0JdTgga2V5X2lkeCA9IDA7CisJc3RydWN0IGtleV9wYXJzZSBrZXk7CiAJdTggKm1hY19hZGRyID0gTlVMTDsKIAotCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7CisJZXJyID0gbmw4MDIxMV9wYXJzZV9rZXkoaW5mbywgJmtleSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9DSVBIRVJdKQorCWlmICgha2V5LnAua2V5KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RBVEFdKSB7Ci0JCXBhcmFtcy5rZXkgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RBVEFdKTsKLQkJcGFyYW1zLmtleV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREFUQV0pOwotCX0KLQotCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX1NFUV0pIHsKLQkJcGFyYW1zLnNlcSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfU0VRXSk7Ci0JCXBhcmFtcy5zZXFfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX1NFUV0pOwotCX0KLQotCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pCi0JCWtleV9pZHggPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSk7Ci0KLQlwYXJhbXMuY2lwaGVyID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9DSVBIRVJdKTsKLQogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkKIAkJbWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CiAKLQlpZiAoY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKCZwYXJhbXMsIGtleV9pZHgsIG1hY19hZGRyKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byB1bmxvY2tfcnRubDsKIAotCWZvciAoaSA9IDA7IGkgPCBkcnYtPndpcGh5Lm5fY2lwaGVyX3N1aXRlczsgaSsrKQotCQlpZiAocGFyYW1zLmNpcGhlciA9PSBkcnYtPndpcGh5LmNpcGhlcl9zdWl0ZXNbaV0pCi0JCQlicmVhazsKLQlpZiAoaSA9PSBkcnYtPndpcGh5Lm5fY2lwaGVyX3N1aXRlcykgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoIWRydi0+b3BzLT5hZGRfa2V5KSB7CisJaWYgKCFyZGV2LT5vcHMtPmFkZF9rZXkpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IGRydi0+b3BzLT5hZGRfa2V5KCZkcnYtPndpcGh5LCBkZXYsIGtleV9pZHgsIG1hY19hZGRyLCAmcGFyYW1zKTsKKwlpZiAoY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHJkZXYsICZrZXkucCwga2V5LmlkeCwgbWFjX2FkZHIpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXdkZXZfbG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOworCWVyciA9IG5sODAyMTFfa2V5X2FsbG93ZWQoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlpZiAoIWVycikKKwkJZXJyID0gcmRldi0+b3BzLT5hZGRfa2V5KCZyZGV2LT53aXBoeSwgZGV2LCBrZXkuaWR4LAorCQkJCQkgbWFjX2FkZHIsICZrZXkucCk7CisJd2Rldl91bmxvY2soZGV2LT5pZWVlODAyMTFfcHRyKTsKIAogIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogIHVubG9ja19ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0xMTYxLDQ1ICsxMzM2LDQ3IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl1OCBrZXlfaWR4ID0gMDsKIAl1OCAqbWFjX2FkZHIgPSBOVUxMOworCXN0cnVjdCBrZXlfcGFyc2Uga2V5OwogCi0JaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSkKLQkJa2V5X2lkeCA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKTsKLQotCWlmIChrZXlfaWR4ID4gNSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJZXJyID0gbmw4MDIxMV9wYXJzZV9rZXkoaW5mbywgJmtleSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkKIAkJbWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byB1bmxvY2tfcnRubDsKIAotCWlmICghZHJ2LT5vcHMtPmRlbF9rZXkpIHsKKwlpZiAoIXJkZXYtPm9wcy0+ZGVsX2tleSkgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gZHJ2LT5vcHMtPmRlbF9rZXkoJmRydi0+d2lwaHksIGRldiwga2V5X2lkeCwgbWFjX2FkZHIpOworCXdkZXZfbG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOworCWVyciA9IG5sODAyMTFfa2V5X2FsbG93ZWQoZGV2LT5pZWVlODAyMTFfcHRyKTsKKwlpZiAoIWVycikKKwkJZXJyID0gcmRldi0+b3BzLT5kZWxfa2V5KCZyZGV2LT53aXBoeSwgZGV2LCBrZXkuaWR4LCBtYWNfYWRkcik7CiAKICNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCiAJaWYgKCFlcnIpIHsKLQkJaWYgKGtleV9pZHggPT0gZGV2LT5pZWVlODAyMTFfcHRyLT53ZXh0LmRlZmF1bHRfa2V5KQorCQlpZiAoa2V5LmlkeCA9PSBkZXYtPmllZWU4MDIxMV9wdHItPndleHQuZGVmYXVsdF9rZXkpCiAJCQlkZXYtPmllZWU4MDIxMV9wdHItPndleHQuZGVmYXVsdF9rZXkgPSAtMTsKLQkJZWxzZSBpZiAoa2V5X2lkeCA9PSBkZXYtPmllZWU4MDIxMV9wdHItPndleHQuZGVmYXVsdF9tZ210X2tleSkKKwkJZWxzZSBpZiAoa2V5LmlkeCA9PSBkZXYtPmllZWU4MDIxMV9wdHItPndleHQuZGVmYXVsdF9tZ210X2tleSkKIAkJCWRldi0+aWVlZTgwMjExX3B0ci0+d2V4dC5kZWZhdWx0X21nbXRfa2V5ID0gLTE7CiAJfQogI2VuZGlmCisJd2Rldl91bmxvY2soZGV2LT5pZWVlODAyMTFfcHRyKTsKIAogIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogCiAgdW5sb2NrX3J0bmw6CkBAIC0xMjEyLDcgKzEzODksNyBAQAogewogICAgICAgICBpbnQgKCpjYWxsKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IGJlYWNvbl9wYXJhbWV0ZXJzICppbmZvKTsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBiZWFjb25fcGFyYW1ldGVycyBwYXJhbXM7CkBAIC0xMjIzLDcgKzE0MDAsNyBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gdW5sb2NrX3J0bmw7CiAKQEAgLTEyNDIsMTAgKzE0MTksMTAgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJY2FsbCA9IGRydi0+b3BzLT5hZGRfYmVhY29uOworCQljYWxsID0gcmRldi0+b3BzLT5hZGRfYmVhY29uOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfQ01EX1NFVF9CRUFDT046Ci0JCWNhbGwgPSBkcnYtPm9wcy0+c2V0X2JlYWNvbjsKKwkJY2FsbCA9IHJkZXYtPm9wcy0+c2V0X2JlYWNvbjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsKQEAgLTEyOTEsMTAgKzE0NjgsMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gY2FsbCgmZHJ2LT53aXBoeSwgZGV2LCAmcGFyYW1zKTsKKwllcnIgPSBjYWxsKCZyZGV2LT53aXBoeSwgZGV2LCAmcGFyYW1zKTsKIAogIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogIHVubG9ja19ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0xMzA0LDE3ICsxNDgxLDE3IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfYmVhY29uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIHVubG9ja19ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+ZGVsX2JlYWNvbikgeworCWlmICghcmRldi0+b3BzLT5kZWxfYmVhY29uKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMzIzLDEwICsxNTAwLDEwIEBACiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9Ci0JZXJyID0gZHJ2LT5vcHMtPmRlbF9iZWFjb24oJmRydi0+d2lwaHksIGRldik7CisJZXJyID0gcmRldi0+b3BzLT5kZWxfYmVhY29uKCZyZGV2LT53aXBoeSwgZGV2KTsKIAogIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogIHVubG9ja19ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0xNDMzLDYgKzE2MTAsOCBAQAogCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIGRldi0+aWZpbmRleCk7CiAJTkxBX1BVVChtc2csIE5MODAyMTFfQVRUUl9NQUMsIEVUSF9BTEVOLCBtYWNfYWRkcik7CiAKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9HRU5FUkFUSU9OLCBzaW5mby0+Z2VuZXJhdGlvbik7CisKIAlzaW5mb2F0dHIgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9TVEFfSU5GTyk7CiAJaWYgKCFzaW5mb2F0dHIpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwpAQCAtMTUyMCwxMyArMTY5OSwxMyBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQluZXRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmlkeCk7CisJbmV0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrYi0+c2spLCBpZmlkeCk7CiAJaWYgKCFuZXRkZXYpIHsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcnRubDsKIAl9CiAKLQlkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChpZmlkeCk7CisJZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoc29ja19uZXQoc2tiLT5zayksIGlmaWR4KTsKIAlpZiAoSVNfRVJSKGRldikpIHsKIAkJZXJyID0gUFRSX0VSUihkZXYpOwogCQlnb3RvIG91dF9ydG5sOwpAQCAtMTU2MCw3ICsxNzM5LDcgQEAKIAljYi0+YXJnc1sxXSA9IHN0YV9pZHg7CiAJZXJyID0gc2tiLT5sZW47CiAgb3V0X2VycjoKLQljZmc4MDIxMV9wdXRfZGV2KGRldik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYoZGV2KTsKICBvdXRfcnRubDoKIAlydG5sX3VubG9jaygpOwogCkBAIC0xNTY5LDcgKzE3NDgsNyBAQAogCiBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzdGF0aW9uX2luZm8gc2luZm87CkBAIC0xNTg1LDE2ICsxNzY0LDE2IEBACiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcnRubDsKIAotCWlmICghZHJ2LT5vcHMtPmdldF9zdGF0aW9uKSB7CisJaWYgKCFyZGV2LT5vcHMtPmdldF9zdGF0aW9uKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBkcnYtPm9wcy0+Z2V0X3N0YXRpb24oJmRydi0+d2lwaHksIGRldiwgbWFjX2FkZHIsICZzaW5mbyk7CisJZXJyID0gcmRldi0+b3BzLT5nZXRfc3RhdGlvbigmcmRldi0+d2lwaHksIGRldiwgbWFjX2FkZHIsICZzaW5mbyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTE2MDYsMTMgKzE3ODUsMTMgQEAKIAkJCQkgZGV2LCBtYWNfYWRkciwgJnNpbmZvKSA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CiAKLQllcnIgPSBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKKwllcnIgPSBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiAJZ290byBvdXQ7CiAKICBvdXRfZnJlZToKIAlubG1zZ19mcmVlKG1zZyk7CiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAgb3V0X3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTE2MjMsMTQgKzE4MDIsMTYgQEAKIC8qCiAgKiBHZXQgdmxhbiBpbnRlcmZhY2UgbWFraW5nIHN1cmUgaXQgaXMgb24gdGhlIHJpZ2h0IHdpcGh5LgogICovCi1zdGF0aWMgaW50IGdldF92bGFuKHN0cnVjdCBubGF0dHIgKnZsYW5hdHRyLAorc3RhdGljIGludCBnZXRfdmxhbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAogCQkgICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKip2bGFuKQogeworCXN0cnVjdCBubGF0dHIgKnZsYW5hdHRyID0gaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9WTEFOXTsKIAkqdmxhbiA9IE5VTEw7CiAKIAlpZiAodmxhbmF0dHIpIHsKLQkJKnZsYW4gPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgbmxhX2dldF91MzIodmxhbmF0dHIpKTsKKwkJKnZsYW4gPSBkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoaW5mbyksCisJCQkJCSBubGFfZ2V0X3UzMih2bGFuYXR0cikpOwogCQlpZiAoISp2bGFuKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWlmICghKCp2bGFuKS0+aWVlZTgwMjExX3B0cikKQEAgLTE2NDMsNyArMTgyNCw3IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7CkBAIC0xNjg1LDExICsxODY2LDExIEBACiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcnRubDsKIAotCWVyciA9IGdldF92bGFuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfVkxBTl0sIGRydiwgJnBhcmFtcy52bGFuKTsKKwllcnIgPSBnZXRfdmxhbihpbmZvLCByZGV2LCAmcGFyYW1zLnZsYW4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xNzM4LDE3ICsxOTE5LDE3IEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQlpZiAoIWRydi0+b3BzLT5jaGFuZ2Vfc3RhdGlvbikgeworCWlmICghcmRldi0+b3BzLT5jaGFuZ2Vfc3RhdGlvbikgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gZHJ2LT5vcHMtPmNoYW5nZV9zdGF0aW9uKCZkcnYtPndpcGh5LCBkZXYsIG1hY19hZGRyLCAmcGFyYW1zKTsKKwllcnIgPSByZGV2LT5vcHMtPmNoYW5nZV9zdGF0aW9uKCZyZGV2LT53aXBoeSwgZGV2LCBtYWNfYWRkciwgJnBhcmFtcyk7CiAKICBvdXQ6CiAJaWYgKHBhcmFtcy52bGFuKQogCQlkZXZfcHV0KHBhcmFtcy52bGFuKTsKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogIG91dF9ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0xNzU4LDcgKzE5MzksNyBAQAogCiBzdGF0aWMgaW50IG5sODAyMTFfbmV3X3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgcGFyYW1zOwpAQCAtMTc5OCwxMSArMTk3OSwxMSBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3J0bmw7CiAKLQllcnIgPSBnZXRfdmxhbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX1ZMQU5dLCBkcnYsICZwYXJhbXMudmxhbik7CisJZXJyID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgJnBhcmFtcy52bGFuKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIApAQCAtMTgzOCw3ICsyMDE5LDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCWlmICghZHJ2LT5vcHMtPmFkZF9zdGF0aW9uKSB7CisJaWYgKCFyZGV2LT5vcHMtPmFkZF9zdGF0aW9uKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xODQ4LDEyICsyMDI5LDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IGRydi0+b3BzLT5hZGRfc3RhdGlvbigmZHJ2LT53aXBoeSwgZGV2LCBtYWNfYWRkciwgJnBhcmFtcyk7CisJZXJyID0gcmRldi0+b3BzLT5hZGRfc3RhdGlvbigmcmRldi0+d2lwaHksIGRldiwgbWFjX2FkZHIsICZwYXJhbXMpOwogCiAgb3V0OgogCWlmIChwYXJhbXMudmxhbikKIAkJZGV2X3B1dChwYXJhbXMudmxhbik7Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKICBvdXRfcnRubDoKIAlydG5sX3VubG9jaygpOwpAQCAtMTg2Myw3ICsyMDQ0LDcgQEAKIAogc3RhdGljIGludCBubDgwMjExX2RlbF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1OCAqbWFjX2FkZHIgPSBOVUxMOwpAQCAtMTg3Myw3ICsyMDU0LDcgQEAKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9ydG5sOwogCkBAIC0xODg0LDE1ICsyMDY1LDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICghZHJ2LT5vcHMtPmRlbF9zdGF0aW9uKSB7CisJaWYgKCFyZGV2LT5vcHMtPmRlbF9zdGF0aW9uKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBkcnYtPm9wcy0+ZGVsX3N0YXRpb24oJmRydi0+d2lwaHksIGRldiwgbWFjX2FkZHIpOworCWVyciA9IHJkZXYtPm9wcy0+ZGVsX3N0YXRpb24oJnJkZXYtPndpcGh5LCBkZXYsIG1hY19hZGRyKTsKIAogIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogIG91dF9ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0xOTE2LDYgKzIwOTcsOCBAQAogCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfTUFDLCBFVEhfQUxFTiwgZHN0KTsKIAlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX01QQVRIX05FWFRfSE9QLCBFVEhfQUxFTiwgbmV4dF9ob3ApOwogCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfR0VORVJBVElPTiwgcGluZm8tPmdlbmVyYXRpb24pOworCiAJcGluZm9hdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfTVBBVEhfSU5GTyk7CiAJaWYgKCFwaW5mb2F0dHIpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwpAQCAtMTk3OSwxMyArMjE2MiwxMyBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQluZXRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmlkeCk7CisJbmV0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrYi0+c2spLCBpZmlkeCk7CiAJaWYgKCFuZXRkZXYpIHsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcnRubDsKIAl9CiAKLQlkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChpZmlkeCk7CisJZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoc29ja19uZXQoc2tiLT5zayksIGlmaWR4KTsKIAlpZiAoSVNfRVJSKGRldikpIHsKIAkJZXJyID0gUFRSX0VSUihkZXYpOwogCQlnb3RvIG91dF9ydG5sOwpAQCAtMTk5OCw3ICsyMTgxLDcgQEAKIAogCWlmIChuZXRkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZXJyOwogCX0KIAogCXdoaWxlICgxKSB7CkBAIC0yMDIzLDcgKzIyMDYsNyBAQAogCWNiLT5hcmdzWzFdID0gcGF0aF9pZHg7CiAJZXJyID0gc2tiLT5sZW47CiAgb3V0X2VycjoKLQljZmc4MDIxMV9wdXRfZGV2KGRldik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYoZGV2KTsKICBvdXRfcnRubDoKIAlydG5sX3VubG9jaygpOwogCkBAIC0yMDMyLDcgKzIyMTUsNyBAQAogCiBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X21wYXRoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbXBhdGhfaW5mbyBwaW5mbzsKQEAgLTIwNDksMTEgKzIyMzIsMTEgQEAKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+Z2V0X21wYXRoKSB7CisJaWYgKCFyZGV2LT5vcHMtPmdldF9tcGF0aCkgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjA2Myw3ICsyMjQ2LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gZHJ2LT5vcHMtPmdldF9tcGF0aCgmZHJ2LT53aXBoeSwgZGV2LCBkc3QsIG5leHRfaG9wLCAmcGluZm8pOworCWVyciA9IHJkZXYtPm9wcy0+Z2V0X21wYXRoKCZyZGV2LT53aXBoeSwgZGV2LCBkc3QsIG5leHRfaG9wLCAmcGluZm8pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0yMDc1LDEzICsyMjU4LDEzIEBACiAJCQkJIGRldiwgZHN0LCBuZXh0X2hvcCwgJnBpbmZvKSA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CiAKLQllcnIgPSBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKKwllcnIgPSBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiAJZ290byBvdXQ7CiAKICBvdXRfZnJlZToKIAlubG1zZ19mcmVlKG1zZyk7CiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAgb3V0X3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTIwOTEsNyArMjI3NCw3IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfbXBhdGgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXU4ICpkc3QgPSBOVUxMOwpAQCAtMjEwOCwxMSArMjI5MSwxMSBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3J0bmw7CiAKLQlpZiAoIWRydi0+b3BzLT5jaGFuZ2VfbXBhdGgpIHsKKwlpZiAoIXJkZXYtPm9wcy0+Y2hhbmdlX21wYXRoKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMTI3LDEwICsyMzEwLDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IGRydi0+b3BzLT5jaGFuZ2VfbXBhdGgoJmRydi0+d2lwaHksIGRldiwgZHN0LCBuZXh0X2hvcCk7CisJZXJyID0gcmRldi0+b3BzLT5jaGFuZ2VfbXBhdGgoJnJkZXYtPndpcGh5LCBkZXYsIGRzdCwgbmV4dF9ob3ApOwogCiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAgb3V0X3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTIxMzksNyArMjMyMiw3IEBACiB9CiBzdGF0aWMgaW50IG5sODAyMTFfbmV3X21wYXRoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1OCAqZHN0ID0gTlVMTDsKQEAgLTIxNTYsMTEgKzIzMzksMTEgQEAKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+YWRkX21wYXRoKSB7CisJaWYgKCFyZGV2LT5vcHMtPmFkZF9tcGF0aCkgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjE3NSwxMCArMjM1OCwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBkcnYtPm9wcy0+YWRkX21wYXRoKCZkcnYtPndpcGh5LCBkZXYsIGRzdCwgbmV4dF9ob3ApOworCWVyciA9IHJkZXYtPm9wcy0+YWRkX21wYXRoKCZyZGV2LT53aXBoeSwgZGV2LCBkc3QsIG5leHRfaG9wKTsKIAogIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogIG91dF9ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0yMTg4LDcgKzIzNzEsNyBAQAogCiBzdGF0aWMgaW50IG5sODAyMTFfZGVsX21wYXRoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1OCAqZHN0ID0gTlVMTDsKQEAgLTIxOTgsMTkgKzIzODEsMTkgQEAKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+ZGVsX21wYXRoKSB7CisJaWYgKCFyZGV2LT5vcHMtPmRlbF9tcGF0aCkgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gZHJ2LT5vcHMtPmRlbF9tcGF0aCgmZHJ2LT53aXBoeSwgZGV2LCBkc3QpOworCWVyciA9IHJkZXYtPm9wcy0+ZGVsX21wYXRoKCZyZGV2LT53aXBoeSwgZGV2LCBkc3QpOwogCiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAgb3V0X3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTIyMjAsNyArMjQwMyw3IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfYnNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgYnNzX3BhcmFtZXRlcnMgcGFyYW1zOwpAQCAtMjI0OSwxMSArMjQzMiwxMSBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3J0bmw7CiAKLQlpZiAoIWRydi0+b3BzLT5jaGFuZ2VfYnNzKSB7CisJaWYgKCFyZGV2LT5vcHMtPmNoYW5nZV9ic3MpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTIyNjMsMTAgKzI0NDYsMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gZHJ2LT5vcHMtPmNoYW5nZV9ic3MoJmRydi0+d2lwaHksIGRldiwgJnBhcmFtcyk7CisJZXJyID0gcmRldi0+b3BzLT5jaGFuZ2VfYnNzKCZyZGV2LT53aXBoeSwgZGV2LCAmcGFyYW1zKTsKIAogIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogIG91dF9ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0yMzU3LDcgKzI1NDAsNyBAQAogc3RhdGljIGludCBubDgwMjExX2dldF9tZXNoX3BhcmFtcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCBtZXNoX2NvbmZpZyBjdXJfcGFyYW1zOwogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTIzNjgsMTcgKzI1NTEsMTcgQEAKIAlydG5sX2xvY2soKTsKIAogCS8qIExvb2sgdXAgb3VyIGRldmljZSAqLwotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcnRubDsKIAotCWlmICghZHJ2LT5vcHMtPmdldF9tZXNoX3BhcmFtcykgeworCWlmICghcmRldi0+b3BzLT5nZXRfbWVzaF9wYXJhbXMpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAogCS8qIEdldCB0aGUgbWVzaCBwYXJhbXMgKi8KLQllcnIgPSBkcnYtPm9wcy0+Z2V0X21lc2hfcGFyYW1zKCZkcnYtPndpcGh5LCBkZXYsICZjdXJfcGFyYW1zKTsKKwllcnIgPSByZGV2LT5vcHMtPmdldF9tZXNoX3BhcmFtcygmcmRldi0+d2lwaHksIGRldiwgJmN1cl9wYXJhbXMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0yNDI0LDcgKzI2MDcsNyBAQAogCQkJY3VyX3BhcmFtcy5kb3QxMU1lc2hIV01QbmV0RGlhbWV0ZXJUcmF2ZXJzYWxUaW1lKTsKIAlubGFfbmVzdF9lbmQobXNnLCBwaW5mb2F0dHIpOwogCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKLQllcnIgPSBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKKwllcnIgPSBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiAJZ290byBvdXQ7CiAKICBubGFfcHV0X2ZhaWx1cmU6CkBAIC0yNDMyLDcgKzI2MTUsNyBAQAogCWVyciA9IC1FTVNHU0laRTsKICBvdXQ6CiAJLyogQ2xlYW51cCAqLwotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAgb3V0X3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTI0NzAsNyArMjY1Myw3IEBACiB7CiAJaW50IGVycjsKIAl1MzIgbWFzazsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbWVzaF9jb25maWcgY2ZnOwogCXN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfTUVTSENPTkZfQVRUUl9NQVggKyAxXTsKQEAgLTI0ODUsMTEgKzI2NjgsMTEgQEAKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+c2V0X21lc2hfcGFyYW1zKSB7CisJaWYgKCFyZGV2LT5vcHMtPnNldF9tZXNoX3BhcmFtcykgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjUzNCwxMSArMjcxNywxMSBAQAogCQkJbmxhX2dldF91MTYpOwogCiAJLyogQXBwbHkgY2hhbmdlcyAqLwotCWVyciA9IGRydi0+b3BzLT5zZXRfbWVzaF9wYXJhbXMoJmRydi0+d2lwaHksIGRldiwgJmNmZywgbWFzayk7CisJZXJyID0gcmRldi0+b3BzLT5zZXRfbWVzaF9wYXJhbXMoJnJkZXYtPndpcGh5LCBkZXYsICZjZmcsIG1hc2spOwogCiAgb3V0OgogCS8qIGNsZWFudXAgKi8KLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogIG91dF9ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0yNjEyLDcgKzI3OTUsNyBAQAogCW5sYV9uZXN0X2VuZChtc2csIG5sX3JlZ19ydWxlcyk7CiAKIAlnZW5sbXNnX2VuZChtc2csIGhkcik7Ci0JZXJyID0gZ2VubG1zZ191bmljYXN0KG1zZywgaW5mby0+c25kX3BpZCk7CisJZXJyID0gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOwogCWdvdG8gb3V0OwogCiBubGFfcHV0X2ZhaWx1cmU6CkBAIC0yNjk4LDE2ICsyODgxLDQxIEBACiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyBpbnQgdmFsaWRhdGVfc2Nhbl9mcmVxcyhzdHJ1Y3QgbmxhdHRyICpmcmVxcykKK3sKKwlzdHJ1Y3QgbmxhdHRyICphdHRyMSwgKmF0dHIyOworCWludCBuX2NoYW5uZWxzID0gMCwgdG1wMSwgdG1wMjsKKworCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0cjEsIGZyZXFzLCB0bXAxKSB7CisJCW5fY2hhbm5lbHMrKzsKKwkJLyoKKwkJICogU29tZSBoYXJkd2FyZSBoYXMgYSBsaW1pdGVkIGNoYW5uZWwgbGlzdCBmb3IKKwkJICogc2Nhbm5pbmcsIGFuZCBpdCBpcyBwcmV0dHkgbXVjaCBub25zZW5zaWNhbAorCQkgKiB0byBzY2FuIGZvciBhIGNoYW5uZWwgdHdpY2UsIHNvIGRpc2FsbG93IHRoYXQKKwkJICogYW5kIGRvbid0IHJlcXVpcmUgZHJpdmVycyB0byBjaGVjayB0aGF0IHRoZQorCQkgKiBjaGFubmVsIGxpc3QgdGhleSBnZXQgaXNuJ3QgbG9uZ2VyIHRoYW4gd2hhdAorCQkgKiB0aGV5IGNhbiBzY2FuLCBhcyBsb25nIGFzIHRoZXkgY2FuIHNjYW4gYWxsCisJCSAqIHRoZSBjaGFubmVscyB0aGV5IHJlZ2lzdGVyZWQgYXQgb25jZS4KKwkJICovCisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0cjIsIGZyZXFzLCB0bXAyKQorCQkJaWYgKGF0dHIxICE9IGF0dHIyICYmCisJCQkgICAgbmxhX2dldF91MzIoYXR0cjEpID09IG5sYV9nZXRfdTMyKGF0dHIyKSkKKwkJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gbl9jaGFubmVsczsKK30KKwogc3RhdGljIGludCBubDgwMjExX3RyaWdnZXJfc2NhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3Q7CiAJc3RydWN0IGNmZzgwMjExX3NzaWQgKnNzaWQ7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwogCXN0cnVjdCBubGF0dHIgKmF0dHI7CiAJc3RydWN0IHdpcGh5ICp3aXBoeTsKLQlpbnQgZXJyLCB0bXAsIG5fc3NpZHMgPSAwLCBuX2NoYW5uZWxzID0gMCwgaTsKKwlpbnQgZXJyLCB0bXAsIG5fc3NpZHMgPSAwLCBuX2NoYW5uZWxzLCBpOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAlzaXplX3QgaWVfbGVuOwogCkBAIC0yNzE2LDEzICsyOTI0LDEzIEBACiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcnRubDsKIAotCXdpcGh5ID0gJmRydi0+d2lwaHk7CisJd2lwaHkgPSAmcmRldi0+d2lwaHk7CiAKLQlpZiAoIWRydi0+b3BzLT5zY2FuKSB7CisJaWYgKCFyZGV2LT5vcHMtPnNjYW4pIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTI3MzIsMTkgKzI5NDAsMjEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGRydi0+c2Nhbl9yZXEpIHsKKwlpZiAocmRldi0+c2Nhbl9yZXEpIHsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdKSB7Ci0JCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdLCB0bXApCi0JCQluX2NoYW5uZWxzKys7CisJCW5fY2hhbm5lbHMgPSB2YWxpZGF0ZV9zY2FuX2ZyZXFzKAorCQkJCWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSk7CiAJCWlmICghbl9jaGFubmVscykgewogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfSBlbHNlIHsKKwkJbl9jaGFubmVscyA9IDA7CisKIAkJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykKIAkJCWlmICh3aXBoeS0+YmFuZHNbYmFuZF0pCiAJCQkJbl9jaGFubmVscyArPSB3aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7CkBAIC0yNzc4LDEwICsyOTg4LDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmVxdWVzdC0+Y2hhbm5lbHMgPSAodm9pZCAqKSgoY2hhciAqKXJlcXVlc3QgKyBzaXplb2YoKnJlcXVlc3QpKTsKIAlyZXF1ZXN0LT5uX2NoYW5uZWxzID0gbl9jaGFubmVsczsKIAlpZiAobl9zc2lkcykKLQkJcmVxdWVzdC0+c3NpZHMgPSAodm9pZCAqKShyZXF1ZXN0LT5jaGFubmVscyArIG5fY2hhbm5lbHMpOworCQlyZXF1ZXN0LT5zc2lkcyA9ICh2b2lkICopJnJlcXVlc3QtPmNoYW5uZWxzW25fY2hhbm5lbHNdOwogCXJlcXVlc3QtPm5fc3NpZHMgPSBuX3NzaWRzOwogCWlmIChpZV9sZW4pIHsKIAkJaWYgKHJlcXVlc3QtPnNzaWRzKQpAQCAtMjgzNiwxOSArMzA0NSwyNCBAQAogCQkgICAgICAgcmVxdWVzdC0+aWVfbGVuKTsKIAl9CiAKLQlyZXF1ZXN0LT5pZmlkeCA9IGRldi0+aWZpbmRleDsKLQlyZXF1ZXN0LT53aXBoeSA9ICZkcnYtPndpcGh5OworCXJlcXVlc3QtPmRldiA9IGRldjsKKwlyZXF1ZXN0LT53aXBoeSA9ICZyZGV2LT53aXBoeTsKIAotCWRydi0+c2Nhbl9yZXEgPSByZXF1ZXN0OwotCWVyciA9IGRydi0+b3BzLT5zY2FuKCZkcnYtPndpcGh5LCBkZXYsIHJlcXVlc3QpOworCXJkZXYtPnNjYW5fcmVxID0gcmVxdWVzdDsKKwllcnIgPSByZGV2LT5vcHMtPnNjYW4oJnJkZXYtPndpcGh5LCBkZXYsIHJlcXVlc3QpOworCisJaWYgKCFlcnIpIHsKKwkJbmw4MDIxMV9zZW5kX3NjYW5fc3RhcnQocmRldiwgZGV2KTsKKwkJZGV2X2hvbGQoZGV2KTsKKwl9CiAKICBvdXRfZnJlZToKIAlpZiAoZXJyKSB7Ci0JCWRydi0+c2Nhbl9yZXEgPSBOVUxMOworCQlyZGV2LT5zY2FuX3JlcSA9IE5VTEw7CiAJCWtmcmVlKHJlcXVlc3QpOwogCX0KICBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKICBvdXRfcnRubDoKIAlydG5sX3VubG9jaygpOwpAQCAtMjg1OCwyMCArMzA3MiwyMyBAQAogCiBzdGF0aWMgaW50IG5sODAyMTFfc2VuZF9ic3Moc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGZsYWdzLAogCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKLQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9ic3MgKnJlcykKKwkJCSAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAorCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmludGJzcykKIHsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpyZXMgPSAmaW50YnNzLT5wdWI7CiAJdm9pZCAqaGRyOwogCXN0cnVjdCBubGF0dHIgKmJzczsKKwlpbnQgaTsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CiAKIAloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIHBpZCwgc2VxLCBmbGFncywKIAkJCSAgICAgTkw4MDIxMV9DTURfTkVXX1NDQU5fUkVTVUxUUyk7CiAJaWYgKCFoZHIpCiAJCXJldHVybiAtMTsKIAotCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1NDQU5fR0VORVJBVElPTiwKLQkJICAgIHJkZXYtPmJzc19nZW5lcmF0aW9uKTsKLQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBkZXYtPmlmaW5kZXgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0dFTkVSQVRJT04sIHJkZXYtPmJzc19nZW5lcmF0aW9uKTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCB3ZGV2LT5uZXRkZXYtPmlmaW5kZXgpOwogCiAJYnNzID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfQlNTKTsKIAlpZiAoIWJzcykKQEAgLTI5MDAsNiArMzExNywyOCBAQAogCQlicmVhazsKIAl9CiAKKwlzd2l0Y2ggKHdkZXYtPmlmdHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJaWYgKGludGJzcyA9PSB3ZGV2LT5jdXJyZW50X2JzcykKKwkJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9CU1NfU1RBVFVTLAorCQkJCSAgICBOTDgwMjExX0JTU19TVEFUVVNfQVNTT0NJQVRFRCk7CisJCWVsc2UgZm9yIChpID0gMDsgaSA8IE1BWF9BVVRIX0JTU0VTOyBpKyspIHsKKwkJCWlmIChpbnRic3MgIT0gd2Rldi0+YXV0aF9ic3Nlc1tpXSkKKwkJCQljb250aW51ZTsKKwkJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9CU1NfU1RBVFVTLAorCQkJCSAgICBOTDgwMjExX0JTU19TVEFUVVNfQVVUSEVOVElDQVRFRCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlpZiAoaW50YnNzID09IHdkZXYtPmN1cnJlbnRfYnNzKQorCQkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0JTU19TVEFUVVMsCisJCQkJICAgIE5MODAyMTFfQlNTX1NUQVRVU19JQlNTX0pPSU5FRCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwogCW5sYV9uZXN0X2VuZChtc2csIGJzcyk7CiAKIAlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOwpAQCAtMjkxMiw5ICszMTUxLDEwIEBACiBzdGF0aWMgaW50IG5sODAyMTFfZHVtcF9zY2FuKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnNjYW47CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKIAlpbnQgaWZpZHggPSBjYi0+YXJnc1swXTsKIAlpbnQgc3RhcnQgPSBjYi0+YXJnc1sxXSwgaWR4ID0gMDsKIAlpbnQgZXJyOwpAQCAtMjkzNSw1OCArMzE3NSw4MyBAQAogCQljYi0+YXJnc1swXSA9IGlmaWR4OwogCX0KIAotCW5ldGRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmlkeCk7Ci0JaWYgKCFuZXRkZXYpCisJZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChza2ItPnNrKSwgaWZpZHgpOworCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGlmaWR4KTsKLQlpZiAoSVNfRVJSKGRldikpIHsKLQkJZXJyID0gUFRSX0VSUihkZXYpOworCXJkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChzb2NrX25ldChza2ItPnNrKSwgaWZpZHgpOworCWlmIChJU19FUlIocmRldikpIHsKKwkJZXJyID0gUFRSX0VSUihyZGV2KTsKIAkJZ290byBvdXRfcHV0X25ldGRldjsKIAl9CiAKLQlzcGluX2xvY2tfYmgoJmRldi0+YnNzX2xvY2spOwotCWNmZzgwMjExX2Jzc19leHBpcmUoZGV2KTsKKwl3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzY2FuLCAmZGV2LT5ic3NfbGlzdCwgbGlzdCkgeworCXdkZXZfbG9jayh3ZGV2KTsKKwlzcGluX2xvY2tfYmgoJnJkZXYtPmJzc19sb2NrKTsKKwljZmc4MDIxMV9ic3NfZXhwaXJlKHJkZXYpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzY2FuLCAmcmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKIAkJaWYgKCsraWR4IDw9IHN0YXJ0KQogCQkJY29udGludWU7CiAJCWlmIChubDgwMjExX3NlbmRfYnNzKHNrYiwKIAkJCQlORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQljYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLAotCQkJCWRldiwgbmV0ZGV2LCAmc2Nhbi0+cHViKSA8IDApIHsKKwkJCQlyZGV2LCB3ZGV2LCBzY2FuKSA8IDApIHsKIAkJCWlkeC0tOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKICBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZyZGV2LT5ic3NfbG9jayk7CisJd2Rldl91bmxvY2sod2Rldik7CiAKIAljYi0+YXJnc1sxXSA9IGlkeDsKIAllcnIgPSBza2ItPmxlbjsKLQljZmc4MDIxMV9wdXRfZGV2KGRldik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAgb3V0X3B1dF9uZXRkZXY6Ci0JZGV2X3B1dChuZXRkZXYpOworCWRldl9wdXQoZGV2KTsKIAogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBib29sIG5sODAyMTFfdmFsaWRfYXV0aF90eXBlKGVudW0gbmw4MDIxMV9hdXRoX3R5cGUgYXV0aF90eXBlKQogewotCXJldHVybiBhdXRoX3R5cGUgPT0gTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTSB8fAotCQlhdXRoX3R5cGUgPT0gTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZIHx8Ci0JCWF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX0ZUIHx8Ci0JCWF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX05FVFdPUktfRUFQOworCXJldHVybiBhdXRoX3R5cGUgPD0gTkw4MDIxMV9BVVRIVFlQRV9NQVg7CiB9CiAKK3N0YXRpYyBib29sIG5sODAyMTFfdmFsaWRfd3BhX3ZlcnNpb25zKHUzMiB3cGFfdmVyc2lvbnMpCit7CisJcmV0dXJuICEod3BhX3ZlcnNpb25zICYgfihOTDgwMjExX1dQQV9WRVJTSU9OXzEgfAorCQkJCSAgTkw4MDIxMV9XUEFfVkVSU0lPTl8yKSk7Cit9CisKK3N0YXRpYyBib29sIG5sODAyMTFfdmFsaWRfYWttX3N1aXRlKHUzMiBha20pCit7CisJcmV0dXJuIGFrbSA9PSBXTEFOX0FLTV9TVUlURV84MDIxWCB8fAorCQlha20gPT0gV0xBTl9BS01fU1VJVEVfUFNLOworfQorCitzdGF0aWMgYm9vbCBubDgwMjExX3ZhbGlkX2NpcGhlcl9zdWl0ZSh1MzIgY2lwaGVyKQoreworCXJldHVybiBjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHwKKwkJY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCB8fAorCQljaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCB8fAorCQljaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCB8fAorCQljaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM7Cit9CisKKwogc3RhdGljIGludCBubDgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBjZmc4MDIxMV9hdXRoX3JlcXVlc3QgcmVxOwotCXN0cnVjdCB3aXBoeSAqd2lwaHk7Ci0JaW50IGVycjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJY29uc3QgdTggKmJzc2lkLCAqc3NpZCwgKmllID0gTlVMTDsKKwlpbnQgZXJyLCBzc2lkX2xlbiwgaWVfbGVuID0gMDsKKwllbnVtIG5sODAyMTFfYXV0aF90eXBlIGF1dGhfdHlwZTsKKwlzdHJ1Y3Qga2V5X3BhcnNlIGtleTsKIAogCWlmICghaXNfdmFsaWRfaWVfYXR0cihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yOTk3LDEzICszMjYyLDM4IEBACiAJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQVVUSF9UWVBFXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSBubDgwMjExX3BhcnNlX2tleShpbmZvLCAma2V5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGtleS5pZHggPj0gMCkgeworCQlpZiAoIWtleS5wLmtleSB8fCAha2V5LnAua2V5X2xlbikKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoKGtleS5wLmNpcGhlciAhPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fAorCQkgICAgIGtleS5wLmtleV9sZW4gIT0gV0xBTl9LRVlfTEVOX1dFUDQwKSAmJgorCQkgICAgKGtleS5wLmNpcGhlciAhPSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQgfHwKKwkJICAgICBrZXkucC5rZXlfbGVuICE9IFdMQU5fS0VZX0xFTl9XRVAxMDQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChrZXkuaWR4ID4gNCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCWtleS5wLmtleV9sZW4gPSAwOworCQlrZXkucC5rZXkgPSBOVUxMOworCX0KKwogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIHVubG9ja19ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+YXV0aCkgeworCWlmICghcmRldi0+b3BzLT5hdXRoKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zMDE4LDY5ICszMzA4LDEzMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl3aXBoeSA9ICZkcnYtPndpcGh5OwotCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7Ci0KLQlyZXEucGVlcl9hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwotCi0JaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkgewotCQlyZXEuY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCgKLQkJCXdpcGh5LAotCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSk7Ci0JCWlmICghcmVxLmNoYW4pIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pIHsKLQkJcmVxLnNzaWQgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pOwotCQlyZXEuc3NpZF9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSk7Ci0JfQotCi0JaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHsKLQkJcmVxLmllID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7Ci0JCXJlcS5pZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOwotCX0KLQotCXJlcS5hdXRoX3R5cGUgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQVVUSF9UWVBFXSk7Ci0JaWYgKCFubDgwMjExX3ZhbGlkX2F1dGhfdHlwZShyZXEuYXV0aF90eXBlKSkgeworCWJzc2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOworCWNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwoJnJkZXYtPndpcGh5LAorCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pKTsKKwlpZiAoIWNoYW4gfHwgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IGRydi0+b3BzLT5hdXRoKCZkcnYtPndpcGh5LCBkZXYsICZyZXEpOworCXNzaWQgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pOworCXNzaWRfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pOworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHsKKwkJaWUgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwkJaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwl9CisKKwlhdXRoX3R5cGUgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQVVUSF9UWVBFXSk7CisJaWYgKCFubDgwMjExX3ZhbGlkX2F1dGhfdHlwZShhdXRoX3R5cGUpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGNmZzgwMjExX21sbWVfYXV0aChyZGV2LCBkZXYsIGNoYW4sIGF1dGhfdHlwZSwgYnNzaWQsCisJCQkJIHNzaWQsIHNzaWRfbGVuLCBpZSwgaWVfbGVuLAorCQkJCSBrZXkucC5rZXksIGtleS5wLmtleV9sZW4sIGtleS5pZHgpOwogCiBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKIHVubG9ja19ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBubDgwMjExX2NyeXB0b19zZXR0aW5ncyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBjZmc4MDIxMV9jcnlwdG9fc2V0dGluZ3MgKnNldHRpbmdzLAorCQkJCSAgIGludCBjaXBoZXJfbGltaXQpCit7CisJbWVtc2V0KHNldHRpbmdzLCAwLCBzaXplb2YoKnNldHRpbmdzKSk7CisKKwlzZXR0aW5ncy0+Y29udHJvbF9wb3J0ID0gaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVF07CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURVNfUEFJUldJU0VdKSB7CisJCXZvaWQgKmRhdGE7CisJCWludCBsZW4sIGk7CisKKwkJZGF0YSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVTX1BBSVJXSVNFXSk7CisJCWxlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURVNfUEFJUldJU0VdKTsKKwkJc2V0dGluZ3MtPm5fY2lwaGVyc19wYWlyd2lzZSA9IGxlbiAvIHNpemVvZih1MzIpOworCisJCWlmIChsZW4gJSBzaXplb2YodTMyKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChzZXR0aW5ncy0+bl9jaXBoZXJzX3BhaXJ3aXNlID4gY2lwaGVyX2xpbWl0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWVtY3B5KHNldHRpbmdzLT5jaXBoZXJzX3BhaXJ3aXNlLCBkYXRhLCBsZW4pOworCisJCWZvciAoaSA9IDA7IGkgPCBzZXR0aW5ncy0+bl9jaXBoZXJzX3BhaXJ3aXNlOyBpKyspCisJCQlpZiAoIW5sODAyMTFfdmFsaWRfY2lwaGVyX3N1aXRlKAorCQkJCQlzZXR0aW5ncy0+Y2lwaGVyc19wYWlyd2lzZVtpXSkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9DSVBIRVJfU1VJVEVfR1JPVVBdKSB7CisJCXNldHRpbmdzLT5jaXBoZXJfZ3JvdXAgPQorCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURV9HUk9VUF0pOworCQlpZiAoIW5sODAyMTFfdmFsaWRfY2lwaGVyX3N1aXRlKHNldHRpbmdzLT5jaXBoZXJfZ3JvdXApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XUEFfVkVSU0lPTlNdKSB7CisJCXNldHRpbmdzLT53cGFfdmVyc2lvbnMgPQorCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dQQV9WRVJTSU9OU10pOworCQlpZiAoIW5sODAyMTFfdmFsaWRfd3BhX3ZlcnNpb25zKHNldHRpbmdzLT53cGFfdmVyc2lvbnMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9BS01fU1VJVEVTXSkgeworCQl2b2lkICpkYXRhOworCQlpbnQgbGVuLCBpOworCisJCWRhdGEgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQUtNX1NVSVRFU10pOworCQlsZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9BS01fU1VJVEVTXSk7CisJCXNldHRpbmdzLT5uX2FrbV9zdWl0ZXMgPSBsZW4gLyBzaXplb2YodTMyKTsKKworCQlpZiAobGVuICUgc2l6ZW9mKHUzMikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltZW1jcHkoc2V0dGluZ3MtPmFrbV9zdWl0ZXMsIGRhdGEsIGxlbik7CisKKwkJZm9yIChpID0gMDsgaSA8IHNldHRpbmdzLT5uX2NpcGhlcnNfcGFpcndpc2U7IGkrKykKKwkJCWlmICghbmw4MDIxMV92YWxpZF9ha21fc3VpdGUoc2V0dGluZ3MtPmFrbV9zdWl0ZXNbaV0pKQorCQkJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG5sODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGNmZzgwMjExX2Fzc29jX3JlcXVlc3QgcmVxOwotCXN0cnVjdCB3aXBoeSAqd2lwaHk7Ci0JaW50IGVycjsKKwlzdHJ1Y3QgY2ZnODAyMTFfY3J5cHRvX3NldHRpbmdzIGNyeXB0bzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sICpmaXhlZGNoYW47CisJY29uc3QgdTggKmJzc2lkLCAqc3NpZCwgKmllID0gTlVMTCwgKnByZXZfYnNzaWQgPSBOVUxMOworCWludCBlcnIsIHNzaWRfbGVuLCBpZV9sZW4gPSAwOworCWJvb2wgdXNlX21mcCA9IGZhbHNlOwogCiAJaWYgKCFpc192YWxpZF9pZV9hdHRyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHwKLQkgICAgIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSkKKwkgICAgIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSB8fAorCSAgICAhaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIHVubG9ja19ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+YXNzb2MpIHsKKwlpZiAoIXJkZXYtPm9wcy0+YXNzb2MpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTMwOTUsNDYgKzM0NDYsNTQgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jd2lwaHkgPSAmZHJ2LT53aXBoeTsKLQltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworCWJzc2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCi0JcmVxLnBlZXJfYWRkciA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKLQotCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pIHsKLQkJcmVxLmNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwoCi0JCQl3aXBoeSwKLQkJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkpOwotCQlpZiAoIXJlcS5jaGFuKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KKwljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKCZyZGV2LT53aXBoeSwKKwkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSk7CisJaWYgKCFjaGFuIHx8IChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAKLQlyZXEuc3NpZCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSk7Ci0JcmVxLnNzaWRfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pOworCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwlmaXhlZGNoYW4gPSByZGV2X2ZpeGVkX2NoYW5uZWwocmRldiwgTlVMTCk7CisJaWYgKGZpeGVkY2hhbiAmJiBjaGFuICE9IGZpeGVkY2hhbikgeworCQllcnIgPSAtRUJVU1k7CisJCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCQlnb3RvIG91dDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisKKwlzc2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKTsKKwlzc2lkX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKTsKIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7Ci0JCXJlcS5pZSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOwotCQlyZXEuaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwkJaWUgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwkJaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKIAl9CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1VTRV9NRlBdKSB7Ci0JCWVudW0gbmw4MDIxMV9tZnAgdXNlX21mcCA9CisJCWVudW0gbmw4MDIxMV9tZnAgbWZwID0KIAkJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9VU0VfTUZQXSk7Ci0JCWlmICh1c2VfbWZwID09IE5MODAyMTFfTUZQX1JFUVVJUkVEKQotCQkJcmVxLnVzZV9tZnAgPSB0cnVlOwotCQllbHNlIGlmICh1c2VfbWZwICE9IE5MODAyMTFfTUZQX05PKSB7CisJCWlmIChtZnAgPT0gTkw4MDIxMV9NRlBfUkVRVUlSRUQpCisJCQl1c2VfbWZwID0gdHJ1ZTsKKwkJZWxzZSBpZiAobWZwICE9IE5MODAyMTFfTUZQX05PKSB7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKLQlyZXEuY29udHJvbF9wb3J0ID0gaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVF07CisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9QUkVWX0JTU0lEXSkKKwkJcHJldl9ic3NpZCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9QUkVWX0JTU0lEXSk7CiAKLQllcnIgPSBkcnYtPm9wcy0+YXNzb2MoJmRydi0+d2lwaHksIGRldiwgJnJlcSk7CisJZXJyID0gbmw4MDIxMV9jcnlwdG9fc2V0dGluZ3MoaW5mbywgJmNyeXB0bywgMSk7CisJaWYgKCFlcnIpCisJCWVyciA9IGNmZzgwMjExX21sbWVfYXNzb2MocmRldiwgZGV2LCBjaGFuLCBic3NpZCwgcHJldl9ic3NpZCwKKwkJCQkJICBzc2lkLCBzc2lkX2xlbiwgaWUsIGllX2xlbiwgdXNlX21mcCwKKwkJCQkJICAmY3J5cHRvKTsKIAogb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiB1bmxvY2tfcnRubDoKIAlydG5sX3VubG9jaygpOwpAQCAtMzE0MywxMSArMzUwMiwxMSBAQAogCiBzdGF0aWMgaW50IG5sODAyMTFfZGVhdXRoZW50aWNhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgcmVxOwotCXN0cnVjdCB3aXBoeSAqd2lwaHk7Ci0JaW50IGVycjsKKwljb25zdCB1OCAqaWUgPSBOVUxMLCAqYnNzaWQ7CisJaW50IGVyciwgaWVfbGVuID0gMDsKKwl1MTYgcmVhc29uX2NvZGU7CiAKIAlpZiAoIWlzX3ZhbGlkX2llX2F0dHIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzE2MCwxMSArMzUxOSwxMSBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gdW5sb2NrX3J0bmw7CiAKLQlpZiAoIWRydi0+b3BzLT5kZWF1dGgpIHsKKwlpZiAoIXJkZXYtPm9wcy0+ZGVhdXRoKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zMTc5LDI3ICszNTM4LDI0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXdpcGh5ID0gJmRydi0+d2lwaHk7Ci0JbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwlic3NpZCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAotCXJlcS5wZWVyX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7Ci0KLQlyZXEucmVhc29uX2NvZGUgPSBubGFfZ2V0X3UxNihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUkVBU09OX0NPREVdKTsKLQlpZiAocmVxLnJlYXNvbl9jb2RlID09IDApIHsKKwlyZWFzb25fY29kZSA9IG5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUFTT05fQ09ERV0pOworCWlmIChyZWFzb25fY29kZSA9PSAwKSB7CiAJCS8qIFJlYXNvbiBDb2RlIDAgaXMgcmVzZXJ2ZWQgKi8KIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHsKLQkJcmVxLmllID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7Ci0JCXJlcS5pZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQlpZSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQlpZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOwogCX0KIAotCWVyciA9IGRydi0+b3BzLT5kZWF1dGgoJmRydi0+d2lwaHksIGRldiwgJnJlcSk7CisJZXJyID0gY2ZnODAyMTFfbWxtZV9kZWF1dGgocmRldiwgZGV2LCBic3NpZCwgaWUsIGllX2xlbiwgcmVhc29uX2NvZGUpOwogCiBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKIHVubG9ja19ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0zMjA4LDExICszNTY0LDExIEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9kaXNhc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgY2ZnODAyMTFfZGlzYXNzb2NfcmVxdWVzdCByZXE7Ci0Jc3RydWN0IHdpcGh5ICp3aXBoeTsKLQlpbnQgZXJyOworCWNvbnN0IHU4ICppZSA9IE5VTEwsICpic3NpZDsKKwlpbnQgZXJyLCBpZV9sZW4gPSAwOworCXUxNiByZWFzb25fY29kZTsKIAogCWlmICghaXNfdmFsaWRfaWVfYXR0cihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMjI1LDExICszNTgxLDExIEBACiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byB1bmxvY2tfcnRubDsKIAotCWlmICghZHJ2LT5vcHMtPmRpc2Fzc29jKSB7CisJaWYgKCFyZGV2LT5vcHMtPmRpc2Fzc29jKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zMjQ0LDI3ICszNjAwLDI0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXdpcGh5ID0gJmRydi0+d2lwaHk7Ci0JbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwlic3NpZCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAotCXJlcS5wZWVyX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7Ci0KLQlyZXEucmVhc29uX2NvZGUgPSBubGFfZ2V0X3UxNihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUkVBU09OX0NPREVdKTsKLQlpZiAocmVxLnJlYXNvbl9jb2RlID09IDApIHsKKwlyZWFzb25fY29kZSA9IG5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUFTT05fQ09ERV0pOworCWlmIChyZWFzb25fY29kZSA9PSAwKSB7CiAJCS8qIFJlYXNvbiBDb2RlIDAgaXMgcmVzZXJ2ZWQgKi8KIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHsKLQkJcmVxLmllID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7Ci0JCXJlcS5pZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQlpZSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQlpZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOwogCX0KIAotCWVyciA9IGRydi0+b3BzLT5kaXNhc3NvYygmZHJ2LT53aXBoeSwgZGV2LCAmcmVxKTsKKwllcnIgPSBjZmc4MDIxMV9tbG1lX2Rpc2Fzc29jKHJkZXYsIGRldiwgYnNzaWQsIGllLCBpZV9sZW4sIHJlYXNvbl9jb2RlKTsKIAogb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiB1bmxvY2tfcnRubDoKIAlydG5sX3VubG9jaygpOwpAQCAtMzI3MywxMCArMzYyNiwxMSBAQAogCiBzdGF0aWMgaW50IG5sODAyMTFfam9pbl9pYnNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGNmZzgwMjExX2lic3NfcGFyYW1zIGlic3M7CiAJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKmNvbm5rZXlzID0gTlVMTDsKIAlpbnQgZXJyOwogCiAJbWVtc2V0KCZpYnNzLCAwLCBzaXplb2YoaWJzcykpOwpAQCAtMzMwMCwxMSArMzY1NCwxMSBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gdW5sb2NrX3J0bmw7CiAKLQlpZiAoIWRydi0+b3BzLT5qb2luX2lic3MpIHsKKwlpZiAoIXJkZXYtPm9wcy0+am9pbl9pYnNzKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zMzE5LDcgKzM2NzMsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl3aXBoeSA9ICZkcnYtPndpcGh5OworCXdpcGh5ID0gJnJkZXYtPndpcGh5OwogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKQogCQlpYnNzLmJzc2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwpAQCAtMzM0MSwzMCArMzY5NSw0MyBAQAogCX0KIAogCWlic3MuY2hhbm5lbF9maXhlZCA9ICEhaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0ZSRVFfRklYRURdOworCWlic3MucHJpdmFjeSA9ICEhaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1BSSVZBQ1ldOwogCi0JZXJyID0gY2ZnODAyMTFfam9pbl9pYnNzKGRydiwgZGV2LCAmaWJzcyk7CisJaWYgKGlic3MucHJpdmFjeSAmJiBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZU10pIHsKKwkJY29ubmtleXMgPSBubDgwMjExX3BhcnNlX2Nvbm5rZXlzKHJkZXYsCisJCQkJCWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlTXSk7CisJCWlmIChJU19FUlIoY29ubmtleXMpKSB7CisJCQllcnIgPSBQVFJfRVJSKGNvbm5rZXlzKTsKKwkJCWNvbm5rZXlzID0gTlVMTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJZXJyID0gY2ZnODAyMTFfam9pbl9pYnNzKHJkZXYsIGRldiwgJmlic3MsIGNvbm5rZXlzKTsKIAogb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiB1bmxvY2tfcnRubDoKKwlpZiAoZXJyKQorCQlrZnJlZShjb25ua2V5cyk7CiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IG5sODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBlcnI7CiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byB1bmxvY2tfcnRubDsKIAotCWlmICghZHJ2LT5vcHMtPmxlYXZlX2lic3MpIHsKKwlpZiAoIXJkZXYtPm9wcy0+bGVhdmVfaWJzcykgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMzM3OSwxNiArMzc0NiwzMTMgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gY2ZnODAyMTFfbGVhdmVfaWJzcyhkcnYsIGRldiwgZmFsc2UpOworCWVyciA9IGNmZzgwMjExX2xlYXZlX2lic3MocmRldiwgZGV2LCBmYWxzZSk7CiAKIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogdW5sb2NrX3J0bmw6CiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQogCisjaWZkZWYgQ09ORklHX05MODAyMTFfVEVTVE1PREUKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgbmw4MDIxMV90ZXN0bW9kZV9tY2dycCA9IHsKKwkubmFtZSA9ICJ0ZXN0bW9kZSIsCit9OworCitzdGF0aWMgaW50IG5sODAyMTFfdGVzdG1vZGVfZG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJaW50IGVycjsKKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1RFU1REQVRBXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlydG5sX2xvY2soKTsKKworCXJkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faW5mbyhpbmZvKTsKKwlpZiAoSVNfRVJSKHJkZXYpKSB7CisJCWVyciA9IFBUUl9FUlIocmRldik7CisJCWdvdG8gdW5sb2NrX3J0bmw7CisJfQorCisJZXJyID0gLUVPUE5PVFNVUFA7CisJaWYgKHJkZXYtPm9wcy0+dGVzdG1vZGVfY21kKSB7CisJCXJkZXYtPnRlc3Rtb2RlX2luZm8gPSBpbmZvOworCQllcnIgPSByZGV2LT5vcHMtPnRlc3Rtb2RlX2NtZCgmcmRldi0+d2lwaHksCisJCQkJbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1RFU1REQVRBXSksCisJCQkJbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfVEVTVERBVEFdKSk7CisJCXJkZXYtPnRlc3Rtb2RlX2luZm8gPSBOVUxMOworCX0KKworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCisgdW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorX19jZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19za2Ioc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgICAgaW50IGFwcHJveGxlbiwgdTMyIHBpZCwgdTMyIHNlcSwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJdm9pZCAqaGRyOworCXN0cnVjdCBubGF0dHIgKmRhdGE7CisKKwlza2IgPSBubG1zZ19uZXcoYXBwcm94bGVuICsgMTAwLCBnZnApOworCWlmICghc2tiKQorCQlyZXR1cm4gTlVMTDsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KHNrYiwgcGlkLCBzZXEsIDAsIE5MODAyMTFfQ01EX1RFU1RNT0RFKTsKKwlpZiAoIWhkcikgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJTkxBX1BVVF9VMzIoc2tiLCBOTDgwMjExX0FUVFJfV0lQSFksIHJkZXYtPndpcGh5X2lkeCk7CisJZGF0YSA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgTkw4MDIxMV9BVFRSX1RFU1REQVRBKTsKKworCSgodm9pZCAqKilza2ItPmNiKVswXSA9IHJkZXY7CisJKCh2b2lkICoqKXNrYi0+Y2IpWzFdID0gaGRyOworCSgodm9pZCAqKilza2ItPmNiKVsyXSA9IGRhdGE7CisKKwlyZXR1cm4gc2tiOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWtmcmVlX3NrYihza2IpOworCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3Qgc2tfYnVmZiAqY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfcmVwbHlfc2tiKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCQkgIGludCBhcHByb3hsZW4pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKworCWlmIChXQVJOX09OKCFyZGV2LT50ZXN0bW9kZV9pbmZvKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gX19jZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19za2IocmRldiwgYXBwcm94bGVuLAorCQkJCXJkZXYtPnRlc3Rtb2RlX2luZm8tPnNuZF9waWQsCisJCQkJcmRldi0+dGVzdG1vZGVfaW5mby0+c25kX3NlcSwKKwkJCQlHRlBfS0VSTkVMKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfcmVwbHlfc2tiKTsKKworaW50IGNmZzgwMjExX3Rlc3Rtb2RlX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gKCh2b2lkICoqKXNrYi0+Y2IpWzBdOworCXZvaWQgKmhkciA9ICgodm9pZCAqKilza2ItPmNiKVsxXTsKKwlzdHJ1Y3QgbmxhdHRyICpkYXRhID0gKCh2b2lkICoqKXNrYi0+Y2IpWzJdOworCisJaWYgKFdBUk5fT04oIXJkZXYtPnRlc3Rtb2RlX2luZm8pKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlubGFfbmVzdF9lbmQoc2tiLCBkYXRhKTsKKwlnZW5sbXNnX2VuZChza2IsIGhkcik7CisJcmV0dXJuIGdlbmxtc2dfcmVwbHkoc2tiLCByZGV2LT50ZXN0bW9kZV9pbmZvKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfdGVzdG1vZGVfcmVwbHkpOworCitzdHJ1Y3Qgc2tfYnVmZiAqY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfZXZlbnRfc2tiKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCQkgIGludCBhcHByb3hsZW4sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCisJcmV0dXJuIF9fY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2Nfc2tiKHJkZXYsIGFwcHJveGxlbiwgMCwgMCwgZ2ZwKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfZXZlbnRfc2tiKTsKKwordm9pZCBjZmc4MDIxMV90ZXN0bW9kZV9ldmVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnApCit7CisJdm9pZCAqaGRyID0gKCh2b2lkICoqKXNrYi0+Y2IpWzFdOworCXN0cnVjdCBubGF0dHIgKmRhdGEgPSAoKHZvaWQgKiopc2tiLT5jYilbMl07CisKKwlubGFfbmVzdF9lbmQoc2tiLCBkYXRhKTsKKwlnZW5sbXNnX2VuZChza2IsIGhkcik7CisJZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBubDgwMjExX3Rlc3Rtb2RlX21jZ3JwLmlkLCBnZnApOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV90ZXN0bW9kZV9ldmVudCk7CisjZW5kaWYKKworc3RhdGljIGludCBubDgwMjExX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgY29ubmVjdDsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqY29ubmtleXMgPSBOVUxMOworCWludCBlcnI7CisKKwltZW1zZXQoJmNvbm5lY3QsIDAsIHNpemVvZihjb25uZWN0KSk7CisKKwlpZiAoIWlzX3ZhbGlkX2llX2F0dHIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0gfHwKKwkgICAgIW5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0FVVEhfVFlQRV0pIHsKKwkJY29ubmVjdC5hdXRoX3R5cGUgPQorCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0FVVEhfVFlQRV0pOworCQlpZiAoIW5sODAyMTFfdmFsaWRfYXV0aF90eXBlKGNvbm5lY3QuYXV0aF90eXBlKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZQorCQljb25uZWN0LmF1dGhfdHlwZSA9IE5MODAyMTFfQVVUSFRZUEVfQVVUT01BVElDOworCisJY29ubmVjdC5wcml2YWN5ID0gaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1BSSVZBQ1ldOworCisJZXJyID0gbmw4MDIxMV9jcnlwdG9fc2V0dGluZ3MoaW5mbywgJmNvbm5lY3QuY3J5cHRvLAorCQkJCSAgICAgIE5MODAyMTFfTUFYX05SX0NJUEhFUl9TVUlURVMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcnRubF9sb2NrKCk7CisKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9ja19ydG5sOworCisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCisJd2lwaHkgPSAmcmRldi0+d2lwaHk7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pCisJCWNvbm5lY3QuYnNzaWQgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CisJY29ubmVjdC5zc2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKTsKKwljb25uZWN0LnNzaWRfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pOworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHsKKwkJY29ubmVjdC5pZSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQljb25uZWN0LmllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkgeworCQljb25uZWN0LmNoYW5uZWwgPQorCQkJaWVlZTgwMjExX2dldF9jaGFubmVsKHdpcGh5LAorCQkJICAgIG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkpOworCQlpZiAoIWNvbm5lY3QuY2hhbm5lbCB8fAorCQkgICAgY29ubmVjdC5jaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoY29ubmVjdC5wcml2YWN5ICYmIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlTXSkgeworCQljb25ua2V5cyA9IG5sODAyMTFfcGFyc2VfY29ubmtleXMocmRldiwKKwkJCQkJaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWVNdKTsKKwkJaWYgKElTX0VSUihjb25ua2V5cykpIHsKKwkJCWVyciA9IFBUUl9FUlIoY29ubmtleXMpOworCQkJY29ubmtleXMgPSBOVUxMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwllcnIgPSBjZmc4MDIxMV9jb25uZWN0KHJkZXYsIGRldiwgJmNvbm5lY3QsIGNvbm5rZXlzKTsKKworb3V0OgorCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCWRldl9wdXQoZGV2KTsKK3VubG9ja19ydG5sOgorCWlmIChlcnIpCisJCWtmcmVlKGNvbm5rZXlzKTsKKwlydG5sX3VubG9jaygpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9kaXNjb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IGVycjsKKwl1MTYgcmVhc29uOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUkVBU09OX0NPREVdKQorCQlyZWFzb24gPSBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORzsKKwllbHNlCisJCXJlYXNvbiA9IG5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUFTT05fQ09ERV0pOworCisJaWYgKHJlYXNvbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJ0bmxfbG9jaygpOworCisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CisJaWYgKGVycikKKwkJZ290byB1bmxvY2tfcnRubDsKKworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGNmZzgwMjExX2Rpc2Nvbm5lY3QocmRldiwgZGV2LCByZWFzb24sIHRydWUpOworCitvdXQ6CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisJZGV2X3B1dChkZXYpOwordW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfd2lwaHlfbmV0bnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IG5ldCAqbmV0OworCWludCBlcnI7CisJdTMyIHBpZDsKKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1BJRF0pCisJCXJldHVybiAtRUlOVkFMOworCisJcGlkID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1BJRF0pOworCisJcnRubF9sb2NrKCk7CisKKwlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8oaW5mbyk7CisJaWYgKElTX0VSUihyZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKHJkZXYpOworCQlnb3RvIG91dDsKKwl9CisKKwluZXQgPSBnZXRfbmV0X25zX2J5X3BpZChwaWQpOworCWlmIChJU19FUlIobmV0KSkgeworCQllcnIgPSBQVFJfRVJSKG5ldCk7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IDA7CisKKwkvKiBjaGVjayBpZiBhbnl0aGluZyB0byBkbyAqLworCWlmIChuZXRfZXEod2lwaHlfbmV0KCZyZGV2LT53aXBoeSksIG5ldCkpCisJCWdvdG8gb3V0X3B1dF9uZXQ7CisKKwllcnIgPSBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMocmRldiwgbmV0KTsKKyBvdXRfcHV0X25ldDoKKwlwdXRfbmV0KG5ldCk7Cisgb3V0OgorCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIHN0cnVjdCBnZW5sX29wcyBubDgwMjExX29wc1tdID0gewogCXsKIAkJLmNtZCA9IE5MODAyMTFfQ01EX0dFVF9XSVBIWSwKQEAgLTM2MDIsNiArNDI2NiwzMiBAQAogCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCiAJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKIAl9LAorI2lmZGVmIENPTkZJR19OTDgwMjExX1RFU1RNT0RFCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfVEVTVE1PREUsCisJCS5kb2l0ID0gbmw4MDIxMV90ZXN0bW9kZV9kbywKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKKyNlbmRpZgorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0NPTk5FQ1QsCisJCS5kb2l0ID0gbmw4MDIxMV9jb25uZWN0LAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0RJU0NPTk5FQ1QsCisJCS5kb2l0ID0gbmw4MDIxMV9kaXNjb25uZWN0LAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX1NFVF9XSVBIWV9ORVROUywKKwkJLmRvaXQgPSBubDgwMjExX3dpcGh5X25ldG5zLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAogfTsKIHN0YXRpYyBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgbmw4MDIxMV9tbG1lX21jZ3JwID0gewogCS5uYW1lID0gIm1sbWUiLApAQCAtMzYzMyw3ICs0MzIzLDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9jb25maWdfbWNncnAuaWQsIEdGUF9LRVJORUwpOworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9jb25maWdfbWNncnAuaWQsIEdGUF9LRVJORUwpOwogfQogCiBzdGF0aWMgaW50IG5sODAyMTFfYWRkX3NjYW5fcmVxKHN0cnVjdCBza19idWZmICptc2csCkBAIC0zNjQzLDYgKzQzMzQsOCBAQAogCXN0cnVjdCBubGF0dHIgKm5lc3Q7CiAJaW50IGk7CiAKKwlBU1NFUlRfUkRFVl9MT0NLKHJkZXYpOworCiAJaWYgKFdBUk5fT04oIXJlcSkpCiAJCXJldHVybiAwOwogCkBAIC0zNjY4LDExICs0MzYxLDExIEBACiAJcmV0dXJuIC1FTk9CVUZTOwogfQogCi1zdGF0aWMgaW50IG5sODAyMTFfc2VuZF9zY2FuX2RvbmVtc2coc3RydWN0IHNrX2J1ZmYgKm1zZywKLQkJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKLQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJICAgICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZmxhZ3MsCi0JCQkJICAgICB1MzIgY21kKQorc3RhdGljIGludCBubDgwMjExX3NlbmRfc2Nhbl9tc2coc3RydWN0IHNrX2J1ZmYgKm1zZywKKwkJCQkgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZmxhZ3MsCisJCQkJIHUzMiBjbWQpCiB7CiAJdm9pZCAqaGRyOwogCkBAIC0zNjkzLDYgKzQzODYsMjUgQEAKIAlyZXR1cm4gLUVNU0dTSVpFOwogfQogCit2b2lkIG5sODAyMTFfc2VuZF9zY2FuX3N0YXJ0KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuOworCisJaWYgKG5sODAyMTFfc2VuZF9zY2FuX21zZyhtc2csIHJkZXYsIG5ldGRldiwgMCwgMCwgMCwKKwkJCQkgIE5MODAyMTFfQ01EX1RSSUdHRVJfU0NBTikgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9zY2FuX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKK30KKwogdm9pZCBubDgwMjExX3NlbmRfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewpAQCAtMzcwMiwxMyArNDQxNCwxNCBAQAogCWlmICghbXNnKQogCQlyZXR1cm47CiAKLQlpZiAobmw4MDIxMV9zZW5kX3NjYW5fZG9uZW1zZyhtc2csIHJkZXYsIG5ldGRldiwgMCwgMCwgMCwKLQkJCQkgICAgICBOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTKSA8IDApIHsKKwlpZiAobmw4MDIxMV9zZW5kX3NjYW5fbXNnKG1zZywgcmRldiwgbmV0ZGV2LCAwLCAwLCAwLAorCQkJCSAgTkw4MDIxMV9DTURfTkVXX1NDQU5fUkVTVUxUUykgPCAwKSB7CiAJCW5sbXNnX2ZyZWUobXNnKTsKIAkJcmV0dXJuOwogCX0KIAotCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9zY2FuX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKKwlnZW5sbXNnX211bHRpY2FzdF9uZXRucyh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAorCQkJCW5sODAyMTFfc2Nhbl9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7CiB9CiAKIHZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCkBAIC0zNzIwLDEzICs0NDMzLDE0IEBACiAJaWYgKCFtc2cpCiAJCXJldHVybjsKIAotCWlmIChubDgwMjExX3NlbmRfc2Nhbl9kb25lbXNnKG1zZywgcmRldiwgbmV0ZGV2LCAwLCAwLCAwLAotCQkJCSAgICAgIE5MODAyMTFfQ01EX1NDQU5fQUJPUlRFRCkgPCAwKSB7CisJaWYgKG5sODAyMTFfc2VuZF9zY2FuX21zZyhtc2csIHJkZXYsIG5ldGRldiwgMCwgMCwgMCwKKwkJCQkgIE5MODAyMTFfQ01EX1NDQU5fQUJPUlRFRCkgPCAwKSB7CiAJCW5sbXNnX2ZyZWUobXNnKTsKIAkJcmV0dXJuOwogCX0KIAotCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9zY2FuX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKKwlnZW5sbXNnX211bHRpY2FzdF9uZXRucyh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAorCQkJCW5sODAyMTFfc2Nhbl9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7CiB9CiAKIC8qCkBAIC0zNzc1LDcgKzQ0ODksMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9yZWd1bGF0b3J5X21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJZ2VubG1zZ19tdWx0aWNhc3RfYWxsbnMobXNnLCAwLCBubDgwMjExX3JlZ3VsYXRvcnlfbWNncnAuaWQsCisJCQkJR0ZQX0FUT01JQyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm47CiAKQEAgLTM3ODcsMTIgKzQ1MDQsMTIgQEAKIHN0YXRpYyB2b2lkIG5sODAyMTFfc2VuZF9tbG1lX2V2ZW50KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwKLQkJCQkgICAgZW51bSBubDgwMjExX2NvbW1hbmRzIGNtZCkKKwkJCQkgICAgZW51bSBubDgwMjExX2NvbW1hbmRzIGNtZCwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBza19idWZmICptc2c7CiAJdm9pZCAqaGRyOwogCi0JbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0FUT01JQyk7CisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgZ2ZwKTsKIAlpZiAoIW1zZykKIAkJcmV0dXJuOwogCkBAIC0zODExLDcgKzQ1MjgsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX21sbWVfbWNncnAuaWQsIEdGUF9BVE9NSUMpOworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBnZnApOwogCXJldHVybjsKIAogIG5sYV9wdXRfZmFpbHVyZToKQEAgLTM4MjAsNDIgKzQ1MzgsNDUgQEAKIH0KIAogdm9pZCBubDgwMjExX3NlbmRfcnhfYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCi0JCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCisJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpidWYsCisJCQkgIHNpemVfdCBsZW4sIGdmcF90IGdmcCkKIHsKIAlubDgwMjExX3NlbmRfbWxtZV9ldmVudChyZGV2LCBuZXRkZXYsIGJ1ZiwgbGVuLAotCQkJCU5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSk7CisJCQkJTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFLCBnZnApOwogfQogCiB2b2lkIG5sODAyMTFfc2VuZF9yeF9hc3NvYyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYnVmLAotCQkJICAgc2l6ZV90IGxlbikKKwkJCSAgIHNpemVfdCBsZW4sIGdmcF90IGdmcCkKIHsKLQlubDgwMjExX3NlbmRfbWxtZV9ldmVudChyZGV2LCBuZXRkZXYsIGJ1ZiwgbGVuLCBOTDgwMjExX0NNRF9BU1NPQ0lBVEUpOworCW5sODAyMTFfc2VuZF9tbG1lX2V2ZW50KHJkZXYsIG5ldGRldiwgYnVmLCBsZW4sCisJCQkJTkw4MDIxMV9DTURfQVNTT0NJQVRFLCBnZnApOwogfQogCiB2b2lkIG5sODAyMTFfc2VuZF9kZWF1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCisJCQkgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmJ1ZiwKKwkJCSBzaXplX3QgbGVuLCBnZnBfdCBnZnApCiB7CiAJbmw4MDIxMV9zZW5kX21sbWVfZXZlbnQocmRldiwgbmV0ZGV2LCBidWYsIGxlbiwKLQkJCQlOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURSk7CisJCQkJTkw4MDIxMV9DTURfREVBVVRIRU5USUNBVEUsIGdmcCk7CiB9CiAKIHZvaWQgbmw4MDIxMV9zZW5kX2Rpc2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpidWYsCi0JCQkgICBzaXplX3QgbGVuKQorCQkJICAgc2l6ZV90IGxlbiwgZ2ZwX3QgZ2ZwKQogewogCW5sODAyMTFfc2VuZF9tbG1lX2V2ZW50KHJkZXYsIG5ldGRldiwgYnVmLCBsZW4sCi0JCQkJTkw4MDIxMV9DTURfRElTQVNTT0NJQVRFKTsKKwkJCQlOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUsIGdmcCk7CiB9CiAKIHN0YXRpYyB2b2lkIG5sODAyMTFfc2VuZF9tbG1lX3RpbWVvdXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjbWQsCi0JCQkJICAgICAgY29uc3QgdTggKmFkZHIpCisJCQkJICAgICAgY29uc3QgdTggKmFkZHIsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOwogCXZvaWQgKmhkcjsKIAotCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9BVE9NSUMpOworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIGdmcCk7CiAJaWYgKCFtc2cpCiAJCXJldHVybjsKIApAQCAtMzg3NSw3ICs0NTk2LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBHRlBfQVRPTUlDKTsKKwlnZW5sbXNnX211bHRpY2FzdF9uZXRucyh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAorCQkJCW5sODAyMTFfbWxtZV9tY2dycC5pZCwgZ2ZwKTsKIAlyZXR1cm47CiAKICBubGFfcHV0X2ZhaWx1cmU6CkBAIC0zODg0LDE2ICs0NjA2LDE0NSBAQAogfQogCiB2b2lkIG5sODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICphZGRyKQorCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICphZGRyLAorCQkJICAgICAgIGdmcF90IGdmcCkKIHsKIAlubDgwMjExX3NlbmRfbWxtZV90aW1lb3V0KHJkZXYsIG5ldGRldiwgTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFLAotCQkJCSAgYWRkcik7CisJCQkJICBhZGRyLCBnZnApOwogfQogCiB2b2lkIG5sODAyMTFfc2VuZF9hc3NvY190aW1lb3V0KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKLQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYWRkcikKKwkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYWRkciwKKwkJCQlnZnBfdCBnZnApCiB7Ci0Jbmw4MDIxMV9zZW5kX21sbWVfdGltZW91dChyZGV2LCBuZXRkZXYsIE5MODAyMTFfQ01EX0FTU09DSUFURSwgYWRkcik7CisJbmw4MDIxMV9zZW5kX21sbWVfdGltZW91dChyZGV2LCBuZXRkZXYsIE5MODAyMTFfQ01EX0FTU09DSUFURSwKKwkJCQkgIGFkZHIsIGdmcCk7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX2Nvbm5lY3RfcmVzdWx0KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmJzc2lkLAorCQkJCSBjb25zdCB1OCAqcmVxX2llLCBzaXplX3QgcmVxX2llX2xlbiwKKwkJCQkgY29uc3QgdTggKnJlc3BfaWUsIHNpemVfdCByZXNwX2llX2xlbiwKKwkJCQkgdTE2IHN0YXR1cywgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBza19idWZmICptc2c7CisJdm9pZCAqaGRyOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBnZnApOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIE5MODAyMTFfQ01EX0NPTk5FQ1QpOworCWlmICghaGRyKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZGV2LT53aXBoeV9pZHgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIG5ldGRldi0+aWZpbmRleCk7CisJaWYgKGJzc2lkKQorCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX01BQywgRVRIX0FMRU4sIGJzc2lkKTsKKwlOTEFfUFVUX1UxNihtc2csIE5MODAyMTFfQVRUUl9TVEFUVVNfQ09ERSwgc3RhdHVzKTsKKwlpZiAocmVxX2llKQorCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX1JFUV9JRSwgcmVxX2llX2xlbiwgcmVxX2llKTsKKwlpZiAocmVzcF9pZSkKKwkJTkxBX1BVVChtc2csIE5MODAyMTFfQVRUUl9SRVNQX0lFLCByZXNwX2llX2xlbiwgcmVzcF9pZSk7CisKKwlpZiAoZ2VubG1zZ19lbmQobXNnLCBoZHIpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdF9uZXRucyh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAorCQkJCW5sODAyMTFfbWxtZV9tY2dycC5pZCwgZ2ZwKTsKKwlyZXR1cm47CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCW5sbXNnX2ZyZWUobXNnKTsKKworfQorCit2b2lkIG5sODAyMTFfc2VuZF9yb2FtZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpic3NpZCwKKwkJCSBjb25zdCB1OCAqcmVxX2llLCBzaXplX3QgcmVxX2llX2xlbiwKKwkJCSBjb25zdCB1OCAqcmVzcF9pZSwgc2l6ZV90IHJlc3BfaWVfbGVuLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIGdmcCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgMCwgMCwgMCwgTkw4MDIxMV9DTURfUk9BTSk7CisJaWYgKCFoZHIpIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJkZXYtPndpcGh5X2lkeCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgbmV0ZGV2LT5pZmluZGV4KTsKKwlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX01BQywgRVRIX0FMRU4sIGJzc2lkKTsKKwlpZiAocmVxX2llKQorCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX1JFUV9JRSwgcmVxX2llX2xlbiwgcmVxX2llKTsKKwlpZiAocmVzcF9pZSkKKwkJTkxBX1BVVChtc2csIE5MODAyMTFfQVRUUl9SRVNQX0lFLCByZXNwX2llX2xlbiwgcmVzcF9pZSk7CisKKwlpZiAoZ2VubG1zZ19lbmQobXNnLCBoZHIpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdF9uZXRucyh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAorCQkJCW5sODAyMTFfbWxtZV9tY2dycC5pZCwgZ2ZwKTsKKwlyZXR1cm47CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCW5sbXNnX2ZyZWUobXNnKTsKKworfQorCit2b2lkIG5sODAyMTFfc2VuZF9kaXNjb25uZWN0ZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiByZWFzb24sCisJCQkgICAgICAgY29uc3QgdTggKmllLCBzaXplX3QgaWVfbGVuLCBib29sIGZyb21fYXApCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIE5MODAyMTFfQ01EX0RJU0NPTk5FQ1QpOworCWlmICghaGRyKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZGV2LT53aXBoeV9pZHgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIG5ldGRldi0+aWZpbmRleCk7CisJaWYgKGZyb21fYXAgJiYgcmVhc29uKQorCQlOTEFfUFVUX1UxNihtc2csIE5MODAyMTFfQVRUUl9SRUFTT05fQ09ERSwgcmVhc29uKTsKKwlpZiAoZnJvbV9hcCkKKwkJTkxBX1BVVF9GTEFHKG1zZywgTkw4MDIxMV9BVFRSX0RJU0NPTk5FQ1RFRF9CWV9BUCk7CisJaWYgKGllKQorCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX0lFLCBpZV9sZW4sIGllKTsKKworCWlmIChnZW5sbXNnX2VuZChtc2csIGhkcikgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCW5sbXNnX2ZyZWUobXNnKTsKKwogfQogCiB2b2lkIG5sODAyMTFfc2VuZF9pYnNzX2Jzc2lkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKQEAgLTM5MjIsNyArNDc3Myw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfbWxtZV9tY2dycC5pZCwgZ2ZwKTsKKwlnZW5sbXNnX211bHRpY2FzdF9uZXRucyh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAorCQkJCW5sODAyMTFfbWxtZV9tY2dycC5pZCwgZ2ZwKTsKIAlyZXR1cm47CiAKICBubGFfcHV0X2ZhaWx1cmU6CkBAIC0zOTMzLDEyICs0Nzg1LDEyIEBACiB2b2lkIG5sODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICphZGRyLAogCQkJCSBlbnVtIG5sODAyMTFfa2V5X3R5cGUga2V5X3R5cGUsIGludCBrZXlfaWQsCi0JCQkJIGNvbnN0IHU4ICp0c2MpCisJCQkJIGNvbnN0IHU4ICp0c2MsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOwogCXZvaWQgKmhkcjsKIAotCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9BVE9NSUMpOworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIGdmcCk7CiAJaWYgKCFtc2cpCiAJCXJldHVybjsKIApAQCAtMzk2Miw3ICs0ODE0LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBHRlBfQVRPTUlDKTsKKwlnZW5sbXNnX211bHRpY2FzdF9uZXRucyh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAorCQkJCW5sODAyMTFfbWxtZV9tY2dycC5pZCwgZ2ZwKTsKIAlyZXR1cm47CiAKICBubGFfcHV0X2ZhaWx1cmU6CkBAIC00MDE1LDcgKzQ4NjgsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9yZWd1bGF0b3J5X21jZ3JwLmlkLCBHRlBfQVRPTUlDKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJZ2VubG1zZ19tdWx0aWNhc3RfYWxsbnMobXNnLCAwLCBubDgwMjExX3JlZ3VsYXRvcnlfbWNncnAuaWQsCisJCQkJR0ZQX0FUT01JQyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm47CiAKQEAgLTQwNTEsNiArNDkwNywxMiBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dDsKIAorI2lmZGVmIENPTkZJR19OTDgwMjExX1RFU1RNT0RFCisJZXJyID0gZ2VubF9yZWdpc3Rlcl9tY19ncm91cCgmbmw4MDIxMV9mYW0sICZubDgwMjExX3Rlc3Rtb2RlX21jZ3JwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ7CisjZW5kaWYKKwogCXJldHVybiAwOwogIGVycl9vdXQ6CiAJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmbmw4MDIxMV9mYW0pOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaCBiL25ldC93aXJlbGVzcy9ubDgwMjExLmgKaW5kZXggNWMxMmFkMS4uNDRjYzJhNyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaAorKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCkBAIC0zLDM5ICszLDU0IEBACiAKICNpbmNsdWRlICJjb3JlLmgiCiAKLWV4dGVybiBpbnQgbmw4MDIxMV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgbmw4MDIxMV9leGl0KHZvaWQpOwotZXh0ZXJuIHZvaWQgbmw4MDIxMV9ub3RpZnlfZGV2X3JlbmFtZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCi0JCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Ci1leHRlcm4gdm9pZCBubDgwMjExX3NlbmRfc2Nhbl9hYm9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKLQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKLWV4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpOwotZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3J4X2F1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJCSBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKLWV4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9yeF9hc3NvYyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCi0JCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJCSAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbik7Ci1leHRlcm4gdm9pZCBubDgwMjExX3NlbmRfZGVhdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKK2ludCBubDgwMjExX2luaXQodm9pZCk7Cit2b2lkIG5sODAyMTFfZXhpdCh2b2lkKTsKK3ZvaWQgbmw4MDIxMV9ub3RpZnlfZGV2X3JlbmFtZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpOwordm9pZCBubDgwMjExX3NlbmRfc2Nhbl9zdGFydChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwordm9pZCBubDgwMjExX3NlbmRfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3ZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Cit2b2lkIG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpOwordm9pZCBubDgwMjExX3NlbmRfcnhfYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIGdmcF90IGdmcCk7Cit2b2lkIG5sODAyMTFfc2VuZF9yeF9hc3NvYyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgbmw4MDIxMV9zZW5kX2RlYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCBnZnBfdCBnZnApOwordm9pZCBubDgwMjExX3NlbmRfZGlzYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIGdmcF90IGdmcCk7Cit2b2lkIG5sODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgICAgY29uc3QgdTggKmFkZHIsIGdmcF90IGdmcCk7Cit2b2lkIG5sODAyMTFfc2VuZF9hc3NvY190aW1lb3V0KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJCWNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOwotZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX2Rpc2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKLQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKLWV4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJICAgICAgY29uc3QgdTggKmFkZHIpOwotZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX2Fzc29jX3RpbWVvdXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJCSAgICAgICBjb25zdCB1OCAqYWRkcik7Ci1leHRlcm4gdm9pZAorCQkJCWNvbnN0IHU4ICphZGRyLCBnZnBfdCBnZnApOwordm9pZCBubDgwMjExX3NlbmRfY29ubmVjdF9yZXN1bHQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCQkJIGNvbnN0IHU4ICpyZXFfaWUsIHNpemVfdCByZXFfaWVfbGVuLAorCQkJCSBjb25zdCB1OCAqcmVzcF9pZSwgc2l6ZV90IHJlc3BfaWVfbGVuLAorCQkJCSB1MTYgc3RhdHVzLCBnZnBfdCBnZnApOwordm9pZCBubDgwMjExX3NlbmRfcm9hbWVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCQkgY29uc3QgdTggKnJlcV9pZSwgc2l6ZV90IHJlcV9pZV9sZW4sCisJCQkgY29uc3QgdTggKnJlc3BfaWUsIHNpemVfdCByZXNwX2llX2xlbiwgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgbmw4MDIxMV9zZW5kX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHJlYXNvbiwKKwkJCSAgICAgICBjb25zdCB1OCAqaWUsIHNpemVfdCBpZV9sZW4sIGJvb2wgZnJvbV9hcCk7CisKK3ZvaWQKIG5sODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmFkZHIsCiAJCQkgICAgZW51bSBubDgwMjExX2tleV90eXBlIGtleV90eXBlLAotCQkJICAgIGludCBrZXlfaWQsIGNvbnN0IHU4ICp0c2MpOworCQkJICAgIGludCBrZXlfaWQsIGNvbnN0IHU4ICp0c2MsIGdmcF90IGdmcCk7CiAKLWV4dGVybiB2b2lkCit2b2lkCiBubDgwMjExX3NlbmRfYmVhY29uX2hpbnRfZXZlbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxfYmVmb3JlLAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbF9hZnRlcik7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmMKaW5kZXggNzVhNDA2ZC4uZjI1NmRmZiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5jCisrKyBiL25ldC93aXJlbGVzcy9yZWcuYwpAQCAtNjIsNiArNjIsMTYgQEAKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjb3VudHJ5X2llX3JlZ2RvbWFpbjsKIAorLyoKKyAqIFByb3RlY3RzIHN0YXRpYyByZWcuYyBjb21wb25lbnRzOgorICogICAgIC0gY2ZnODAyMTFfd29ybGRfcmVnZG9tCisgKiAgICAgLSBjZmc4MDIxMV9yZWdkb20KKyAqICAgICAtIGNvdW50cnlfaWVfcmVnZG9tYWluCisgKiAgICAgLSBsYXN0X3JlcXVlc3QKKyAqLworREVGSU5FX01VVEVYKHJlZ19tdXRleCk7CisjZGVmaW5lIGFzc2VydF9yZWdfbG9jaygpIFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmcmVnX211dGV4KSkKKwogLyogVXNlZCB0byBxdWV1ZSB1cCByZWd1bGF0b3J5IGhpbnRzICovCiBzdGF0aWMgTElTVF9IRUFEKHJlZ19yZXF1ZXN0c19saXN0KTsKIHN0YXRpYyBzcGlubG9ja190IHJlZ19yZXF1ZXN0c19sb2NrOwpAQCAtMTEzLDExICsxMjMsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjZmc4MDIxMV93b3JsZF9yZWdkb20gPQogCSZ3b3JsZF9yZWdkb207CiAKLSNpZmRlZiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkKLXN0YXRpYyBjaGFyICppZWVlODAyMTFfcmVnZG9tID0gIlVTIjsKLSNlbHNlCiBzdGF0aWMgY2hhciAqaWVlZTgwMjExX3JlZ2RvbSA9ICIwMCI7Ci0jZW5kaWYKIAogbW9kdWxlX3BhcmFtKGllZWU4MDIxMV9yZWdkb20sIGNoYXJwLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaWVlZTgwMjExX3JlZ2RvbSwgIklFRUUgODAyLjExIHJlZ3VsYXRvcnkgZG9tYWluIGNvZGUiKTsKQEAgLTEwMTIsNyArMTAxOCw2IEBACiAJCQltYXBfcmVnZG9tX2ZsYWdzKHJlZ19ydWxlLT5mbGFncykgfCBid19mbGFnczsKIAkJY2hhbi0+bWF4X2FudGVubmFfZ2FpbiA9IGNoYW4tPm9yaWdfbWFnID0KIAkJCShpbnQpIE1CSV9UT19EQkkocG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2Fpbik7Ci0JCWNoYW4tPm1heF9iYW5kd2lkdGggPSBLSFpfVE9fTUhaKGRlc2lyZWRfYndfa2h6KTsKIAkJY2hhbi0+bWF4X3Bvd2VyID0gY2hhbi0+b3JpZ19tcHdyID0KIAkJCShpbnQpIE1CTV9UT19EQk0ocG93ZXJfcnVsZS0+bWF4X2VpcnApOwogCQlyZXR1cm47CkBAIC0xMDIxLDcgKzEwMjYsNiBAQAogCWNoYW4tPmZsYWdzID0gZmxhZ3MgfCBid19mbGFncyB8IG1hcF9yZWdkb21fZmxhZ3MocmVnX3J1bGUtPmZsYWdzKTsKIAljaGFuLT5tYXhfYW50ZW5uYV9nYWluID0gbWluKGNoYW4tPm9yaWdfbWFnLAogCQkoaW50KSBNQklfVE9fREJJKHBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4pKTsKLQljaGFuLT5tYXhfYmFuZHdpZHRoID0gS0haX1RPX01IWihkZXNpcmVkX2J3X2toeik7CiAJaWYgKGNoYW4tPm9yaWdfbXB3cikKIAkJY2hhbi0+bWF4X3Bvd2VyID0gbWluKGNoYW4tPm9yaWdfbXB3ciwKIAkJCShpbnQpIE1CTV9UT19EQk0ocG93ZXJfcnVsZS0+bWF4X2VpcnApKTsKQEAgLTEwNjEsMTAgKzEwNjUsMTAgQEAKIAogc3RhdGljIHZvaWQgdXBkYXRlX2FsbF93aXBoeV9yZWd1bGF0b3J5KGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KQotCQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSgmZHJ2LT53aXBoeSwgaW5pdGlhdG9yKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpCisJCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KCZyZGV2LT53aXBoeSwgaW5pdGlhdG9yKTsKIH0KIAogc3RhdGljIHZvaWQgaGFuZGxlX3JlZ19iZWFjb24oc3RydWN0IHdpcGh5ICp3aXBoeSwKQEAgLTEyOTgsNyArMTMwMiw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwogCi0JYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwlhc3NlcnRfcmVnX2xvY2soKTsKIAogCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOwogCUJVR19PTihjaGFuX2lkeCA+PSBzYmFuZC0+bl9jaGFubmVscyk7CkBAIC0xMzIzLDcgKzEzMjcsNiBAQAogCiAJY2hhbi0+ZmxhZ3MgfD0gbWFwX3JlZ2RvbV9mbGFncyhyZWdfcnVsZS0+ZmxhZ3MpIHwgYndfZmxhZ3M7CiAJY2hhbi0+bWF4X2FudGVubmFfZ2FpbiA9IChpbnQpIE1CSV9UT19EQkkocG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2Fpbik7Ci0JY2hhbi0+bWF4X2JhbmR3aWR0aCA9IEtIWl9UT19NSFooZGVzaXJlZF9id19raHopOwogCWNoYW4tPm1heF9wb3dlciA9IChpbnQpIE1CTV9UT19EQk0ocG93ZXJfcnVsZS0+bWF4X2VpcnApOwogfQogCkBAIC0xMzQ3LDE0ICsxMzUwLDE0IEBACiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCXVuc2lnbmVkIGludCBiYW5kc19zZXQgPSAwOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCW11dGV4X2xvY2soJnJlZ19tdXRleCk7CiAJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgewogCQlpZiAoIXdpcGh5LT5iYW5kc1tiYW5kXSkKIAkJCWNvbnRpbnVlOwogCQloYW5kbGVfYmFuZF9jdXN0b20od2lwaHksIGJhbmQsIHJlZ2QpOwogCQliYW5kc19zZXQrKzsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdfbXV0ZXgpOwogCiAJLyoKIAkgKiBubyBwb2ludCBpbiBjYWxsaW5nIHRoaXMgaWYgaXQgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0CkBAIC0xNDIxLDcgKzE0MjQsNyBAQAogCQkJaWYgKGxhc3Rfd2lwaHkgIT0gd2lwaHkpIHsKIAkJCQkvKgogCQkJCSAqIFR3byBjYXJkcyB3aXRoIHR3byBBUHMgY2xhaW1pbmcgZGlmZmVyZW50Ci0JCQkJICogZGlmZmVyZW50IENvdW50cnkgSUUgYWxwaGEycy4gV2UgY291bGQKKwkJCQkgKiBDb3VudHJ5IElFIGFscGhhMnMuIFdlIGNvdWxkCiAJCQkJICogaW50ZXJzZWN0IHRoZW0sIGJ1dCB0aGF0IHNlZW1zIHVubGlrZWx5CiAJCQkJICogdG8gYmUgY29ycmVjdC4gUmVqZWN0IHNlY29uZCBvbmUgZm9yIG5vdy4KIAkJCQkgKi8KQEAgLTE1MDAsNyArMTUwMyw3IEBACiAgKiBSZXR1cm5zIHplcm8gaWYgYWxsIHdlbnQgZmluZSwgJS1FQUxSRUFEWSBpZiBhIHJlZ3VsYXRvcnkgZG9tYWluIGhhZAogICogYWxyZWFkeSBiZWVuIHNldCBvciBvdGhlciBzdGFuZGFyZCBlcnJvciBjb2Rlcy4KICAqCi0gKiBDYWxsZXIgbXVzdCBob2xkICZjZmc4MDIxMV9tdXRleAorICogQ2FsbGVyIG11c3QgaG9sZCAmY2ZnODAyMTFfbXV0ZXggYW5kICZyZWdfbXV0ZXgKICAqLwogc3RhdGljIGludCBfX3JlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJICAgICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpwZW5kaW5nX3JlcXVlc3QpCkBAIC0xNTc1LDYgKzE1NzgsNyBAQAogCUJVR19PTighcmVnX3JlcXVlc3QtPmFscGhhMik7CiAKIAltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnX211dGV4KTsKIAogCWlmICh3aXBoeV9pZHhfdmFsaWQocmVnX3JlcXVlc3QtPndpcGh5X2lkeCkpCiAJCXdpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KHJlZ19yZXF1ZXN0LT53aXBoeV9pZHgpOwpAQCAtMTU5MCw2ICsxNTk0LDcgQEAKIAlpZiAociA9PSAtRUFMUkVBRFkgJiYgd2lwaHkgJiYgd2lwaHktPnN0cmljdF9yZWd1bGF0b3J5KQogCQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgcmVnX3JlcXVlc3QtPmluaXRpYXRvcik7CiBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZyZWdfbXV0ZXgpOwogCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogfQogCkBAIC0xNjE1LDkgKzE2MjAsMTMgQEAKIC8qIFByb2Nlc3NlcyBiZWFjb24gaGludHMgLS0gdGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIGNvdW50cnkgSUVzICovCiBzdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19wZW5kaW5nX2JlYWNvbl9oaW50cyh2b2lkKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlzdHJ1Y3QgcmVnX2JlYWNvbiAqcGVuZGluZ19iZWFjb24sICp0bXA7CiAKKwkvKgorCSAqIE5vIG5lZWQgdG8gaG9sZCB0aGUgcmVnX211dGV4IGhlcmUgYXMgd2UganVzdCB0b3VjaCB3aXBoeXMKKwkgKiBhbmQgZG8gbm90IHJlYWQgb3IgYWNjZXNzIHJlZ3VsYXRvcnkgdmFyaWFibGVzLgorCSAqLwogCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAogCS8qIFRoaXMgZ29lcyB0aHJvdWdoIHRoZSBfcGVuZGluZ18gYmVhY29uIGxpc3QgKi8KQEAgLTE2MzQsOCArMTY0Myw4IEBACiAJCWxpc3RfZGVsX2luaXQoJnBlbmRpbmdfYmVhY29uLT5saXN0KTsKIAogCQkvKiBBcHBsaWVzIHRoZSBiZWFjb24gaGludCB0byBjdXJyZW50IHdpcGh5cyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KQotCQkJd2lwaHlfdXBkYXRlX25ld19iZWFjb24oJmRydi0+d2lwaHksIHBlbmRpbmdfYmVhY29uKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmY2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KQorCQkJd2lwaHlfdXBkYXRlX25ld19iZWFjb24oJnJkZXYtPndpcGh5LCBwZW5kaW5nX2JlYWNvbik7CiAKIAkJLyogUmVtZW1iZXJzIHRoZSBiZWFjb24gaGludCBmb3IgbmV3IHdpcGh5cyBvciByZWcgY2hhbmdlcyAqLwogCQlsaXN0X2FkZF90YWlsKCZwZW5kaW5nX2JlYWNvbi0+bGlzdCwgJnJlZ19iZWFjb25fbGlzdCk7CkBAIC0xNzM5LDEyICsxNzQ4LDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MKHJlZ3VsYXRvcnlfaGludCk7CiAKKy8qIENhbGxlciBtdXN0IGhvbGQgcmVnX211dGV4ICovCiBzdGF0aWMgYm9vbCByZWdfc2FtZV9jb3VudHJ5X2llX2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCXUzMiBjb3VudHJ5X2llX2NoZWNrc3VtKQogewogCXN0cnVjdCB3aXBoeSAqcmVxdWVzdF93aXBoeTsKIAotCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisJYXNzZXJ0X3JlZ19sb2NrKCk7CiAKIAlpZiAodW5saWtlbHkobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0KIAkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpKQpAQCAtMTc2Nyw2ICsxNzc3LDEwIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCisvKgorICogV2UgaG9sZCB3ZGV2X2xvY2soKSBoZXJlIHNvIHdlIGNhbm5vdCBob2xkIGNmZzgwMjExX211dGV4KCkgYW5kCisgKiB0aGVyZWZvcmUgY2Fubm90IGl0ZXJhdGUgb3ZlciB0aGUgcmRldiBsaXN0IGhlcmUuCisgKi8KIHZvaWQgcmVndWxhdG9yeV9oaW50XzExZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJdTggKmNvdW50cnlfaWUsCiAJCQl1OCBjb3VudHJ5X2llX2xlbikKQEAgLTE3NzcsMTIgKzE3OTEsMTAgQEAKIAllbnVtIGVudmlyb25tZW50X2NhcCBlbnYgPSBFTlZJUk9OX0FOWTsKIAlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCW11dGV4X2xvY2soJnJlZ19tdXRleCk7CiAKLQlpZiAodW5saWtlbHkoIWxhc3RfcmVxdWVzdCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7Ci0JCXJldHVybjsKLQl9CisJaWYgKHVubGlrZWx5KCFsYXN0X3JlcXVlc3QpKQorCQlnb3RvIG91dDsKIAogCS8qIElFIGxlbiBtdXN0IGJlIGV2ZW5seSBkaXZpc2libGUgYnkgMiAqLwogCWlmIChjb3VudHJ5X2llX2xlbiAmIDB4MDEpCkBAIC0xODA4LDU0ICsxODIwLDE0IEBACiAJCWVudiA9IEVOVklST05fT1VURE9PUjsKIAogCS8qCi0JICogV2Ugd2lsbCBydW4gdGhpcyBmb3IgKmV2ZXJ5KiBiZWFjb24gcHJvY2Vzc2VkIGZvciB0aGUgQlNTSUQsIHNvCi0JICogd2Ugb3B0aW1pemUgYW4gZWFybHkgY2hlY2sgdG8gZXhpdCBvdXQgZWFybHkgaWYgd2UgZG9uJ3QgaGF2ZSB0bwotCSAqIGRvIGFueXRoaW5nCisJICogV2Ugd2lsbCBydW4gdGhpcyBvbmx5IHVwb24gYSBzdWNjZXNzZnVsIGNvbm5lY3Rpb24gb24gY2ZnODAyMTEuCisJICogV2UgbGVhdmUgY29uZmxpY3QgcmVzb2x1dGlvbiB0byB0aGUgd29ya3F1ZXVlLCB3aGVyZSBjYW4gaG9sZAorCSAqIGNmZzgwMjExX211dGV4LgogCSAqLwogCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KIAkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUgJiYKLQkgICAgd2lwaHlfaWR4X3ZhbGlkKGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KSkpIHsKLQkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnZfbGFzdF9pZTsKLQotCQlkcnZfbGFzdF9pZSA9Ci0JCQljZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKLQotCQkvKgotCQkgKiBMZXRzIGtlZXAgdGhpcyBzaW1wbGUgLS0gd2UgdHJ1c3QgdGhlIGZpcnN0IEFQCi0JCSAqIGFmdGVyIHdlIGludGVyc2VjdCB3aXRoIENSREEKLQkJICovCi0JCWlmIChsaWtlbHkoJmRydl9sYXN0X2llLT53aXBoeSA9PSB3aXBoeSkpIHsKLQkJCS8qCi0JCQkgKiBJZ25vcmUgSUVzIGNvbWluZyBpbiBvbiB0aGlzIHdpcGh5IHdpdGgKLQkJCSAqIHRoZSBzYW1lIGFscGhhMiBhbmQgZW52aXJvbm1lbnQgY2FwCi0JCQkgKi8KLQkJCWlmIChsaWtlbHkoYWxwaGEyX2VxdWFsKGRydl9sYXN0X2llLT5jb3VudHJ5X2llX2FscGhhMiwKLQkJCQkgIGFscGhhMikgJiYKLQkJCQkgIGVudiA9PSBkcnZfbGFzdF9pZS0+ZW52KSkgewotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJLyoKLQkJCSAqIHRoZSB3aXBoeSBtb3ZlZCBvbiB0byBhbm90aGVyIEJTU0lEIG9yIHRoZSBBUAotCQkJICogd2FzIHJlY29uZmlndXJlZC4gWFhYOiBXZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUKLQkJCSAqIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc3VzcGVuZHMgYW5kIGdvZXMgdG8gZ29lcwotCQkJICogdG8gYW5vdGhlciBjb3VudHJ5LCBhbmQgdGhlbiBnZXRzIElFcyBmcm9tIGFuCi0JCQkgKiBBUCB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncwotCQkJICovCi0JCQlnb3RvIG91dDsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBJZ25vcmUgSUVzIGNvbWluZyBpbiBvbiB0d28gc2VwYXJhdGUgd2lwaHlzIHdpdGgKLQkJCSAqIHRoZSBzYW1lIGFscGhhMiBhbmQgZW52aXJvbm1lbnQgY2FwCi0JCQkgKi8KLQkJCWlmIChsaWtlbHkoYWxwaGEyX2VxdWFsKGRydl9sYXN0X2llLT5jb3VudHJ5X2llX2FscGhhMiwKLQkJCQkgIGFscGhhMikgJiYKLQkJCQkgIGVudiA9PSBkcnZfbGFzdF9pZS0+ZW52KSkgewotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJLyogV2UgY291bGQgcG90ZW50aWFsbHkgaW50ZXJzZWN0IHRob3VnaCAqLwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9CisJICAgIHdpcGh5X2lkeF92YWxpZChsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCkpKQorCQlnb3RvIG91dDsKIAogCXJkID0gY291bnRyeV9pZV8yX3JkKGNvdW50cnlfaWUsIGNvdW50cnlfaWVfbGVuLCAmY2hlY2tzdW0pOwogCWlmICghcmQpCkBAIC0xODkwLDcgKzE4NjIsNyBAQAogCXJlcXVlc3QtPmNvdW50cnlfaWVfY2hlY2tzdW0gPSBjaGVja3N1bTsKIAlyZXF1ZXN0LT5jb3VudHJ5X2llX2VudiA9IGVudjsKIAotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnX211dGV4KTsKIAogCXF1ZXVlX3JlZ3VsYXRvcnlfcmVxdWVzdChyZXF1ZXN0KTsKIApAQCAtMTg5OSw5ICsxODcxLDggQEAKIGZyZWVfcmRfb3V0OgogCWtmcmVlKHJkKTsKIG91dDoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ19tdXRleCk7CiB9Ci1FWFBPUlRfU1lNQk9MKHJlZ3VsYXRvcnlfaGludF8xMWQpOwogCiBzdGF0aWMgYm9vbCBmcmVxX2lzX2NoYW5fMTJfMTNfMTQodTE2IGZyZXEpCiB7CkBAIC0xOTk2LDE0ICsxOTY3LDE0IEBACiAKIAkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09CiAJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgewotCQkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7Ci0JCQlkcnYgPSBjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KAorCQkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCQkJcmRldiA9IGNmZzgwMjExX3JkZXZfYnlfd2lwaHlfaWR4KAogCQkJCWxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKLQkJCWlmIChkcnYpIHsKKwkJCWlmIChyZGV2KSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IEN1cnJlbnQgcmVndWxhdG9yeSAiCiAJCQkJCSJkb21haW4gdXBkYXRlZCBieSBBUCB0bzogJWMlY1xuIiwKLQkJCQkJZHJ2LT5jb3VudHJ5X2llX2FscGhhMlswXSwKLQkJCQkJZHJ2LT5jb3VudHJ5X2llX2FscGhhMlsxXSk7CisJCQkJCXJkZXYtPmNvdW50cnlfaWVfYWxwaGEyWzBdLAorCQkJCQlyZGV2LT5jb3VudHJ5X2llX2FscGhhMlsxXSk7CiAJCQl9IGVsc2UKIAkJCQlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogQ3VycmVudCByZWd1bGF0b3J5ICIKIAkJCQkJImRvbWFpbiBpbnRlcnNlY3RlZDogXG4iKTsKQEAgLTIwNjQsNyArMjAzNSw3IEBACiBzdGF0aWMgaW50IF9fc2V0X3JlZ2RvbShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpCiB7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmludGVyc2VjdGVkX3JkID0gTlVMTDsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydiA9IE5VTEw7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gTlVMTDsKIAlzdHJ1Y3Qgd2lwaHkgKnJlcXVlc3Rfd2lwaHk7CiAJLyogU29tZSBiYXNpYyBzYW5pdHkgY2hlY2tzIGZpcnN0ICovCiAKQEAgLTIyMDMsMTEgKzIxNzQsMTEgQEAKIAlpZiAoIWludGVyc2VjdGVkX3JkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRydiA9IHdpcGh5X3RvX2RldihyZXF1ZXN0X3dpcGh5KTsKKwlyZGV2ID0gd2lwaHlfdG9fZGV2KHJlcXVlc3Rfd2lwaHkpOwogCi0JZHJ2LT5jb3VudHJ5X2llX2FscGhhMlswXSA9IHJkLT5hbHBoYTJbMF07Ci0JZHJ2LT5jb3VudHJ5X2llX2FscGhhMlsxXSA9IHJkLT5hbHBoYTJbMV07Ci0JZHJ2LT5lbnYgPSBsYXN0X3JlcXVlc3QtPmNvdW50cnlfaWVfZW52OworCXJkZXYtPmNvdW50cnlfaWVfYWxwaGEyWzBdID0gcmQtPmFscGhhMlswXTsKKwlyZGV2LT5jb3VudHJ5X2llX2FscGhhMlsxXSA9IHJkLT5hbHBoYTJbMV07CisJcmRldi0+ZW52ID0gbGFzdF9yZXF1ZXN0LT5jb3VudHJ5X2llX2VudjsKIAogCUJVR19PTihpbnRlcnNlY3RlZF9yZCA9PSByZCk7CiAKQEAgLTIyMzIsMTAgKzIyMDMsMTMgQEAKIAogCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CiAKKwltdXRleF9sb2NrKCZyZWdfbXV0ZXgpOworCiAJLyogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB1cGRhdGUgdGhlIHdpcGh5cywgdGhpcyBpcyBkb25lIGJlbG93ICovCiAJciA9IF9fc2V0X3JlZ2RvbShyZCk7CiAJaWYgKHIpIHsKIAkJa2ZyZWUocmQpOworCQltdXRleF91bmxvY2soJnJlZ19tdXRleCk7CiAJCXJldHVybiByOwogCX0KIApAQCAtMjI1MCw2ICsyMjI0LDggQEAKIAogCW5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KGxhc3RfcmVxdWVzdCk7CiAKKwltdXRleF91bmxvY2soJnJlZ19tdXRleCk7CisKIAlyZXR1cm4gcjsKIH0KIApAQCAtMjI2MCwxNiArMjIzNiwyMCBAQAogCiAJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKIAorCW11dGV4X2xvY2soJnJlZ19tdXRleCk7CisKIAlrZnJlZSh3aXBoeS0+cmVnZCk7CiAKIAlpZiAobGFzdF9yZXF1ZXN0KQogCQlyZXF1ZXN0X3dpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKIAogCWlmICghcmVxdWVzdF93aXBoeSB8fCByZXF1ZXN0X3dpcGh5ICE9IHdpcGh5KQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJbGFzdF9yZXF1ZXN0LT53aXBoeV9pZHggPSBXSVBIWV9JRFhfU1RBTEU7CiAJbGFzdF9yZXF1ZXN0LT5jb3VudHJ5X2llX2VudiA9IEVOVklST05fQU5ZOworb3V0OgorCW11dGV4X3VubG9jaygmcmVnX211dGV4KTsKIH0KIAogaW50IHJlZ3VsYXRvcnlfaW5pdCh2b2lkKQpAQCAtMjI4OCwyMiArMjI2OCwxMiBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IFVzaW5nIHN0YXRpYyByZWd1bGF0b3J5IGRvbWFpbiBpbmZvXG4iKTsKIAlwcmludF9yZWdkb21haW5faW5mbyhjZmc4MDIxMV9yZWdkb21haW4pOwotCS8qCi0JICogVGhlIG9sZCBjb2RlIHN0aWxsIHJlcXVlc3RzIGZvciBhIG5ldyByZWdkb21haW4gYW5kIGlmCi0JICogeW91IGhhdmUgQ1JEQSB5b3UgZ2V0IGl0IHVwZGF0ZWQsIG90aGVyd2lzZSB5b3UgZ2V0Ci0JICogc3R1Y2sgd2l0aCB0aGUgc3RhdGljIHZhbHVlcy4gU2luY2UgIkVVIiBpcyBub3QgYSB2YWxpZAotCSAqIElTTyAvIElFQyAzMTY2IGFscGhhMiBjb2RlIHdlIGNhbid0IGV4cGVjdCB1c2VycGFjZSB0bwotCSAqIGdpdmUgdXMgYSByZWd1bGF0b3J5IGRvbWFpbiBmb3IgaXQuIFdlIG5lZWQgbGFzdF9yZXF1ZXN0Ci0JICogaW5paXRhbGl6ZWQgdGhvdWdoIHNvIGxldHMganVzdCBzZW5kIGEgcmVxdWVzdCB3aGljaCB3ZQotCSAqIGtub3cgd2lsbCBiZSBpZ25vcmVkLi4uIHRoaXMgY3JhcCB3aWxsIGJlIHJlbW92ZWQgb25jZQotCSAqIE9MRF9SRUcgZGllcy4KLQkgKi8KLQllcnIgPSByZWd1bGF0b3J5X2hpbnRfY29yZShpZWVlODAyMTFfcmVnZG9tKTsKICNlbHNlCiAJY2ZnODAyMTFfcmVnZG9tYWluID0gY2ZnODAyMTFfd29ybGRfcmVnZG9tOwogCi0JZXJyID0gcmVndWxhdG9yeV9oaW50X2NvcmUoaWVlZTgwMjExX3JlZ2RvbSk7CiAjZW5kaWYKKwkvKiBXZSBhbHdheXMgdHJ5IHRvIGdldCBhbiB1cGRhdGUgZm9yIHRoZSBzdGF0aWMgcmVnZG9tYWluICovCisJZXJyID0gcmVndWxhdG9yeV9oaW50X2NvcmUoY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIpOwogCWlmIChlcnIpIHsKIAkJaWYgKGVyciA9PSAtRU5PTUVNKQogCQkJcmV0dXJuIGVycjsKQEAgLTIzMjIsNiArMjI5MiwxMyBAQAogI2VuZGlmCiAJfQogCisJLyoKKwkgKiBGaW5hbGx5LCBpZiB0aGUgdXNlciBzZXQgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgdHJlYXQgaXQKKwkgKiBhcyBhIHVzZXIgaGludC4KKwkgKi8KKwlpZiAoIWlzX3dvcmxkX3JlZ2RvbShpZWVlODAyMTFfcmVnZG9tKSkKKwkJcmVndWxhdG9yeV9oaW50X3VzZXIoaWVlZTgwMjExX3JlZ2RvbSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMzMyw2ICsyMzEwLDcgQEAKIAljYW5jZWxfd29ya19zeW5jKCZyZWdfd29yayk7CiAKIAltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnX211dGV4KTsKIAogCXJlc2V0X3JlZ2RvbWFpbnMoKTsKIApAQCAtMjM3MSw1ICsyMzQ5LDYgQEAKIAl9CiAJc3Bpbl91bmxvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKIAorCW11dGV4X3VubG9jaygmcmVnX211dGV4KTsKIAltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIH0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuaCBiL25ldC93aXJlbGVzcy9yZWcuaAppbmRleCA0ZTE2N2E4Li4zMzYyYzdjIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmgKKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5oCkBAIC0zNyw0ICszNywxOSBAQAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmJlYWNvbl9jaGFuLAogCQkJCQlnZnBfdCBnZnApOwogCisvKioKKyAqIHJlZ3VsYXRvcnlfaGludF8xMWQgLSBoaW50cyBhIGNvdW50cnkgSUUgYXMgYSByZWd1bGF0b3J5IGRvbWFpbgorICogQHdpcGh5OiB0aGUgd2lyZWxlc3MgZGV2aWNlIGdpdmluZyB0aGUgaGludCAodXNlZCBvbmx5IGZvciByZXBvcnRpbmcKKyAqCWNvbmZsaWN0cykKKyAqIEBjb3VudHJ5X2llOiBwb2ludGVyIHRvIHRoZSBjb3VudHJ5IElFCisgKiBAY291bnRyeV9pZV9sZW46IGxlbmd0aCBvZiB0aGUgY291bnRyeSBJRQorICoKKyAqIFdlIHdpbGwgaW50ZXJzZWN0IHRoZSByZCB3aXRoIHRoZSB3aGF0IENSREEgdGVsbHMgdXMgc2hvdWxkIGFwcGx5CisgKiBmb3IgdGhlIGFscGhhMiB0aGlzIGNvdW50cnkgSUUgYmVsb25ncyB0bywgdGhpcyBwcmV2ZW50cyBBUHMgZnJvbQorICogc2VuZGluZyB1cyBpbmNvcnJlY3Qgb3Igb3V0ZGF0ZWQgaW5mb3JtYXRpb24gYWdhaW5zdCBhIGNvdW50cnkuCisgKi8KK3ZvaWQgcmVndWxhdG9yeV9oaW50XzExZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJIHU4ICpjb3VudHJ5X2llLAorCQkJIHU4IGNvdW50cnlfaWVfbGVuKTsKKwogI2VuZGlmICAvKiBfX05FVF9XSVJFTEVTU19SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3NjYW4uYyBiL25ldC93aXJlbGVzcy9zY2FuLmMKaW5kZXggN2U1OTVjZS4uNGMyMTBjMiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3NjYW4uYworKysgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCkBAIC0xNCwyOSArMTQsNDEgQEAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJubDgwMjExLmgiCisjaW5jbHVkZSAid2V4dC1jb21wYXQuaCIKIAotI2RlZmluZSBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFCSgxMCAqIEhaKQorI2RlZmluZSBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFCSgxNSAqIEhaKQogCi12b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LCBib29sIGFib3J0ZWQpCit2b2lkIF9fX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsIGJvb2wgbGVhaykKIHsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKICNlbmRpZgogCi0JZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIHJlcXVlc3QtPmlmaWR4KTsKLQlpZiAoIWRldikKLQkJZ290byBvdXQ7CisJQVNTRVJUX1JERVZfTE9DSyhyZGV2KTsKIAotCVdBUk5fT04ocmVxdWVzdCAhPSB3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLT5zY2FuX3JlcSk7CisJcmVxdWVzdCA9IHJkZXYtPnNjYW5fcmVxOwogCi0JaWYgKGFib3J0ZWQpCi0JCW5sODAyMTFfc2VuZF9zY2FuX2Fib3J0ZWQod2lwaHlfdG9fZGV2KHJlcXVlc3QtPndpcGh5KSwgZGV2KTsKKwlpZiAoIXJlcXVlc3QpCisJCXJldHVybjsKKworCWRldiA9IHJlcXVlc3QtPmRldjsKKworCS8qCisJICogVGhpcyBtdXN0IGJlIGJlZm9yZSBzZW5kaW5nIHRoZSBvdGhlciBldmVudHMhCisJICogT3RoZXJ3aXNlLCB3cGFfc3VwcGxpY2FudCBnZXRzIGNvbXBsZXRlbHkgY29uZnVzZWQgd2l0aAorCSAqIHdleHQgZXZlbnRzLgorCSAqLworCWNmZzgwMjExX3NtZV9zY2FuX2RvbmUoZGV2KTsKKworCWlmIChyZXF1ZXN0LT5hYm9ydGVkKQorCQlubDgwMjExX3NlbmRfc2Nhbl9hYm9ydGVkKHJkZXYsIGRldik7CiAJZWxzZQotCQlubDgwMjExX3NlbmRfc2Nhbl9kb25lKHdpcGh5X3RvX2RldihyZXF1ZXN0LT53aXBoeSksIGRldik7CisJCW5sODAyMTFfc2VuZF9zY2FuX2RvbmUocmRldiwgZGV2KTsKIAogI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKLQlpZiAoIWFib3J0ZWQpIHsKKwlpZiAoIXJlcXVlc3QtPmFib3J0ZWQpIHsKIAkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwogCiAJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOwpAQCAtNDUsOSArNTcsMzggQEAKIAogCWRldl9wdXQoZGV2KTsKIAotIG91dDoKLQl3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLT5zY2FuX3JlcSA9IE5VTEw7Ci0Ja2ZyZWUocmVxdWVzdCk7CisJcmRldi0+c2Nhbl9yZXEgPSBOVUxMOworCisJLyoKKwkgKiBPSy4gSWYgdGhpcyBpcyBpbnZva2VkIHdpdGggImxlYWsiIHRoZW4gd2UgY2FuJ3QKKwkgKiBmcmVlIHRoaXMgLi4uIGJ1dCB3ZSd2ZSBjbGVhbmVkIGl0IHVwIGFueXdheS4gVGhlCisJICogZHJpdmVyIGZhaWxlZCB0byBjYWxsIHRoZSBzY2FuX2RvbmUgY2FsbGJhY2ssIHNvCisJICogYWxsIGJldHMgYXJlIG9mZiwgaXQgbWlnaHQgc3RpbGwgYmUgdHJ5aW5nIHRvIHVzZQorCSAqIHRoZSBzY2FuIHJlcXVlc3Qgb3Igbm90IC4uLiBpZiBpdCBhY2Nlc3NlcyB0aGUgZGV2CisJICogaW4gdGhlcmUgKGl0IHNob3VsZG4ndCBhbnl3YXkpIHRoZW4gaXQgbWF5IGNyYXNoLgorCSAqLworCWlmICghbGVhaykKKwkJa2ZyZWUocmVxdWVzdCk7Cit9CisKK3ZvaWQgX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3aykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisKKwlyZGV2ID0gY29udGFpbmVyX29mKHdrLCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UsCisJCQkgICAgc2Nhbl9kb25lX3drKTsKKworCWNmZzgwMjExX2xvY2tfcmRldihyZGV2KTsKKwlfX19jZmc4MDIxMV9zY2FuX2RvbmUocmRldiwgZmFsc2UpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworfQorCit2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LCBib29sIGFib3J0ZWQpCit7CisJV0FSTl9PTihyZXF1ZXN0ICE9IHdpcGh5X3RvX2RldihyZXF1ZXN0LT53aXBoeSktPnNjYW5fcmVxKTsKKworCXJlcXVlc3QtPmFib3J0ZWQgPSBhYm9ydGVkOworCXNjaGVkdWxlX3dvcmsoJndpcGh5X3RvX2RldihyZXF1ZXN0LT53aXBoeSktPnNjYW5fZG9uZV93ayk7CiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NjYW5fZG9uZSk7CiAKQEAgLTYyLDYgKzEwMyw4IEBACiAJaWYgKGJzcy0+aWVzX2FsbG9jYXRlZCkKIAkJa2ZyZWUoYnNzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMpOwogCisJQlVHX09OKGF0b21pY19yZWFkKCZic3MtPmhvbGQpKTsKKwogCWtmcmVlKGJzcyk7CiB9CiAKQEAgLTg0LDggKzEyNyw5IEBACiAJYm9vbCBleHBpcmVkID0gZmFsc2U7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnNzLCB0bXAsICZkZXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCWlmIChic3MtPmhvbGQgfHwKLQkJICAgICF0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+dHMgKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKKwkJaWYgKGF0b21pY19yZWFkKCZic3MtPmhvbGQpKQorCQkJY29udGludWU7CisJCWlmICghdGltZV9hZnRlcihqaWZmaWVzLCBic3MtPnRzICsgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSkpCiAJCQljb250aW51ZTsKIAkJbGlzdF9kZWwoJmJzcy0+bGlzdCk7CiAJCXJiX2VyYXNlKCZic3MtPnJibiwgJmRldi0+YnNzX3RyZWUpOwpAQCAtOTcsNyArMTQxLDcgQEAKIAkJZGV2LT5ic3NfZ2VuZXJhdGlvbisrOwogfQogCi1zdGF0aWMgdTggKmZpbmRfaWUodTggbnVtLCB1OCAqaWVzLCBzaXplX3QgbGVuKQorc3RhdGljIHU4ICpmaW5kX2llKHU4IG51bSwgdTggKmllcywgaW50IGxlbikKIHsKIAl3aGlsZSAobGVuID4gMiAmJiBpZXNbMF0gIT0gbnVtKSB7CiAJCWxlbiAtPSBpZXNbMV0gKyAyOwpAQCAtNTM5LDYgKzU4Myw3IEBACiAJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKIAogCWxpc3RfZGVsKCZic3MtPmxpc3QpOworCWRldi0+YnNzX2dlbmVyYXRpb24rKzsKIAlyYl9lcmFzZSgmYnNzLT5yYm4sICZkZXYtPmJzc190cmVlKTsKIAogCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKQEAgLTU0NywzMCArNTkyLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfdW5saW5rX2Jzcyk7CiAKLXZvaWQgY2ZnODAyMTFfaG9sZF9ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqcHViKQotewotCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKLQotCWlmICghcHViKQotCQlyZXR1cm47Ci0KLQlic3MgPSBjb250YWluZXJfb2YocHViLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpOwotCWJzcy0+aG9sZCA9IHRydWU7Ci19Ci1FWFBPUlRfU1lNQk9MKGNmZzgwMjExX2hvbGRfYnNzKTsKLQotdm9pZCBjZmc4MDIxMV91bmhvbGRfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKnB1YikKLXsKLQlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7Ci0KLQlpZiAoIXB1YikKLQkJcmV0dXJuOwotCi0JYnNzID0gY29udGFpbmVyX29mKHB1Yiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcHViKTsKLQlic3MtPmhvbGQgPSBmYWxzZTsKLX0KLUVYUE9SVF9TWU1CT0woY2ZnODAyMTFfdW5ob2xkX2Jzcyk7Ci0KICNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCiBpbnQgY2ZnODAyMTFfd2V4dF9zaXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCkBAIC01ODYsNyArNjA3LDEwIEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAtRU5FVERPV047CiAKLQlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoZGV2LT5pZmluZGV4KTsKKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBpd19zY2FuX3JlcSkpCisJCXdyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7CisKKwlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoZGV2X25ldChkZXYpLCBkZXYtPmlmaW5kZXgpOwogCiAJaWYgKElTX0VSUihyZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIocmRldik7CkBAIC01OTgsOSArNjIyLDE0IEBACiAKIAl3aXBoeSA9ICZyZGV2LT53aXBoeTsKIAotCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspCi0JCWlmICh3aXBoeS0+YmFuZHNbYmFuZF0pCi0JCQluX2NoYW5uZWxzICs9IHdpcGh5LT5iYW5kc1tiYW5kXS0+bl9jaGFubmVsczsKKwkvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGNoYW5uZWxzLCBuZWVkZWQgdG8gYWxsb2NhdGUgY3JlcSAqLworCWlmICh3cmVxICYmIHdyZXEtPm51bV9jaGFubmVscykKKwkJbl9jaGFubmVscyA9IHdyZXEtPm51bV9jaGFubmVsczsKKwllbHNlIHsKKwkJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykKKwkJCWlmICh3aXBoeS0+YmFuZHNbYmFuZF0pCisJCQkJbl9jaGFubmVscyArPSB3aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7CisJfQogCiAJY3JlcSA9IGt6YWxsb2Moc2l6ZW9mKCpjcmVxKSArIHNpemVvZihzdHJ1Y3QgY2ZnODAyMTFfc3NpZCkgKwogCQkgICAgICAgbl9jaGFubmVscyAqIHNpemVvZih2b2lkICopLApAQCAtNjExLDI4ICs2NDAsNDcgQEAKIAl9CiAKIAljcmVxLT53aXBoeSA9IHdpcGh5OwotCWNyZXEtPmlmaWR4ID0gZGV2LT5pZmluZGV4OwotCWNyZXEtPnNzaWRzID0gKHZvaWQgKikoY3JlcSArIDEpOwotCWNyZXEtPmNoYW5uZWxzID0gKHZvaWQgKikoY3JlcS0+c3NpZHMgKyAxKTsKKwljcmVxLT5kZXYgPSBkZXY7CisJLyogU1NJRHMgY29tZSBhZnRlciBjaGFubmVscyAqLworCWNyZXEtPnNzaWRzID0gKHZvaWQgKikmY3JlcS0+Y2hhbm5lbHNbbl9jaGFubmVsc107CiAJY3JlcS0+bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CiAJY3JlcS0+bl9zc2lkcyA9IDE7CiAKLQkvKiBhbGwgY2hhbm5lbHMgKi8KKwkvKiB0cmFuc2xhdGUgIlNjYW4gb24gZnJlcXVlbmNpZXMiIHJlcXVlc3QgKi8KIAlpID0gMDsKIAlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CiAJCWludCBqOwogCQlpZiAoIXdpcGh5LT5iYW5kc1tiYW5kXSkKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGogPSAwOyBqIDwgd2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOyBqKyspIHsKKworCQkJLyogSWYgd2UgaGF2ZSBhIHdpcmVsZXNzIHJlcXVlc3Qgc3RydWN0dXJlIGFuZCB0aGUKKwkJCSAqIHdpcmVsZXNzIHJlcXVlc3Qgc3BlY2lmaWVzIGZyZXF1ZW5jaWVzLCB0aGVuIHNlYXJjaAorCQkJICogZm9yIHRoZSBtYXRjaGluZyBoYXJkd2FyZSBjaGFubmVsLgorCQkJICovCisJCQlpZiAod3JlcSAmJiB3cmVxLT5udW1fY2hhbm5lbHMpIHsKKwkJCQlpbnQgazsKKwkJCQlpbnQgd2lwaHlfZnJlcSA9IHdpcGh5LT5iYW5kc1tiYW5kXS0+Y2hhbm5lbHNbal0uY2VudGVyX2ZyZXE7CisJCQkJZm9yIChrID0gMDsgayA8IHdyZXEtPm51bV9jaGFubmVsczsgaysrKSB7CisJCQkJCWludCB3ZXh0X2ZyZXEgPSB3cmVxLT5jaGFubmVsX2xpc3Rba10ubSAvIDEwMDAwMDsKKwkJCQkJaWYgKHdleHRfZnJlcSA9PSB3aXBoeV9mcmVxKQorCQkJCQkJZ290byB3ZXh0X2ZyZXFfZm91bmQ7CisJCQkJfQorCQkJCWdvdG8gd2V4dF9mcmVxX25vdF9mb3VuZDsKKwkJCX0KKworCQl3ZXh0X2ZyZXFfZm91bmQ6CiAJCQljcmVxLT5jaGFubmVsc1tpXSA9ICZ3aXBoeS0+YmFuZHNbYmFuZF0tPmNoYW5uZWxzW2pdOwogCQkJaSsrOworCQl3ZXh0X2ZyZXFfbm90X2ZvdW5kOiA7CiAJCX0KIAl9CiAKLQkvKiB0cmFuc2xhdGUgc2NhbiByZXF1ZXN0ICovCi0JaWYgKHdycXUtPmRhdGEubGVuZ3RoID09IHNpemVvZihzdHJ1Y3QgaXdfc2Nhbl9yZXEpKSB7Ci0JCXdyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7CisJLyogU2V0IHJlYWwgbnVtYmVyIG9mIGNoYW5uZWxzIHNwZWNpZmllZCBpbiBjcmVxLT5jaGFubmVsc1tdICovCisJY3JlcS0+bl9jaGFubmVscyA9IGk7CiAKKwkvKiB0cmFuc2xhdGUgIlNjYW4gZm9yIFNTSUQiIHJlcXVlc3QgKi8KKwlpZiAod3JlcSkgewogCQlpZiAod3JxdS0+ZGF0YS5mbGFncyAmIElXX1NDQU5fVEhJU19FU1NJRCkgewogCQkJaWYgKHdyZXEtPmVzc2lkX2xlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCiAJCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC02NDgsOSArNjk2LDEyIEBACiAJaWYgKGVycikgewogCQlyZGV2LT5zY2FuX3JlcSA9IE5VTEw7CiAJCWtmcmVlKGNyZXEpOworCX0gZWxzZSB7CisJCW5sODAyMTFfc2VuZF9zY2FuX3N0YXJ0KHJkZXYsIGRldik7CisJCWRldl9ob2xkKGRldik7CiAJfQogIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KHJkZXYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X3Npd3NjYW4pOwpAQCAtOTQxLDcgKzk5Miw3IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAtRU5FVERPV047CiAKLQlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoZGV2LT5pZmluZGV4KTsKKwlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoZGV2X25ldChkZXYpLCBkZXYtPmlmaW5kZXgpOwogCiAJaWYgKElTX0VSUihyZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIocmRldik7CkBAIC05NTksNyArMTAxMCw3IEBACiAJfQogCiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYocmRldik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJcmV0dXJuIHJlczsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfZ2l3c2Nhbik7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc21lLmMgYi9uZXQvd2lyZWxlc3Mvc21lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzMDc4OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC93aXJlbGVzcy9zbWUuYwpAQCAtMCwwICsxLDkzMyBAQAorLyoKKyAqIFNNRSBjb2RlIGZvciBjZmc4MDIxMSdzIGNvbm5lY3QgZW11bGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAyMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgICBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisjaW5jbHVkZSA8bmV0L3J0bmV0bGluay5oPgorI2luY2x1ZGUgIm5sODAyMTEuaCIKKyNpbmNsdWRlICJyZWcuaCIKKworc3RydWN0IGNmZzgwMjExX2Nvbm4geworCXN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyBwYXJhbXM7CisJLyogdGhlc2UgYXJlIHN1Yi1zdGF0ZXMgb2YgdGhlIF9DT05ORUNUSU5HIHNtZV9zdGF0ZSAqLworCWVudW0geworCQlDRkc4MDIxMV9DT05OX0lETEUsCisJCUNGRzgwMjExX0NPTk5fU0NBTk5JTkcsCisJCUNGRzgwMjExX0NPTk5fU0NBTl9BR0FJTiwKKwkJQ0ZHODAyMTFfQ09OTl9BVVRIRU5USUNBVEVfTkVYVCwKKwkJQ0ZHODAyMTFfQ09OTl9BVVRIRU5USUNBVElORywKKwkJQ0ZHODAyMTFfQ09OTl9BU1NPQ0lBVEVfTkVYVCwKKwkJQ0ZHODAyMTFfQ09OTl9BU1NPQ0lBVElORywKKwl9IHN0YXRlOworCXU4IGJzc2lkW0VUSF9BTEVOXSwgcHJldl9ic3NpZFtFVEhfQUxFTl07CisJdTggKmllOworCXNpemVfdCBpZV9sZW47CisJYm9vbCBhdXRvX2F1dGgsIHByZXZfYnNzaWRfdmFsaWQ7Cit9OworCisKK3N0YXRpYyBpbnQgY2ZnODAyMTFfY29ubl9zY2FuKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0OworCWludCBuX2NoYW5uZWxzLCBlcnI7CisKKwlBU1NFUlRfUlROTCgpOworCUFTU0VSVF9SREVWX0xPQ0socmRldik7CisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKKworCWlmIChyZGV2LT5zY2FuX3JlcSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICh3ZGV2LT5jb25uLT5wYXJhbXMuY2hhbm5lbCkgeworCQluX2NoYW5uZWxzID0gMTsKKwl9IGVsc2UgeworCQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJCW5fY2hhbm5lbHMgPSAwOworCisJCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJCWlmICghd2Rldi0+d2lwaHktPmJhbmRzW2JhbmRdKQorCQkJCWNvbnRpbnVlOworCQkJbl9jaGFubmVscyArPSB3ZGV2LT53aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7CisJCX0KKwl9CisJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSArIHNpemVvZihyZXF1ZXN0LT5zc2lkc1swXSkgKworCQkJICBzaXplb2YocmVxdWVzdC0+Y2hhbm5lbHNbMF0pICogbl9jaGFubmVscywKKwkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICh3ZGV2LT5jb25uLT5wYXJhbXMuY2hhbm5lbCkKKwkJcmVxdWVzdC0+Y2hhbm5lbHNbMF0gPSB3ZGV2LT5jb25uLT5wYXJhbXMuY2hhbm5lbDsKKwllbHNlIHsKKwkJaW50IGkgPSAwLCBqOworCQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisKKwkJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQkJaWYgKCF3ZGV2LT53aXBoeS0+YmFuZHNbYmFuZF0pCisJCQkJY29udGludWU7CisJCQlmb3IgKGogPSAwOyBqIDwgd2Rldi0+d2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOworCQkJICAgICBpKyssIGorKykKKwkJCQlyZXF1ZXN0LT5jaGFubmVsc1tpXSA9CisJCQkJCSZ3ZGV2LT53aXBoeS0+YmFuZHNbYmFuZF0tPmNoYW5uZWxzW2pdOworCQl9CisJfQorCXJlcXVlc3QtPm5fY2hhbm5lbHMgPSBuX2NoYW5uZWxzOworCXJlcXVlc3QtPnNzaWRzID0gKHZvaWQgKikmcmVxdWVzdC0+Y2hhbm5lbHNbbl9jaGFubmVsc107CisJcmVxdWVzdC0+bl9zc2lkcyA9IDE7CisKKwltZW1jcHkocmVxdWVzdC0+c3NpZHNbMF0uc3NpZCwgd2Rldi0+Y29ubi0+cGFyYW1zLnNzaWQsCisJCXdkZXYtPmNvbm4tPnBhcmFtcy5zc2lkX2xlbik7CisJcmVxdWVzdC0+c3NpZHNbMF0uc3NpZF9sZW4gPSB3ZGV2LT5jb25uLT5wYXJhbXMuc3NpZF9sZW47CisKKwlyZXF1ZXN0LT5kZXYgPSB3ZGV2LT5uZXRkZXY7CisJcmVxdWVzdC0+d2lwaHkgPSAmcmRldi0+d2lwaHk7CisKKwlyZGV2LT5zY2FuX3JlcSA9IHJlcXVlc3Q7CisKKwllcnIgPSByZGV2LT5vcHMtPnNjYW4od2Rldi0+d2lwaHksIHdkZXYtPm5ldGRldiwgcmVxdWVzdCk7CisJaWYgKCFlcnIpIHsKKwkJd2Rldi0+Y29ubi0+c3RhdGUgPSBDRkc4MDIxMV9DT05OX1NDQU5OSU5HOworCQlubDgwMjExX3NlbmRfc2Nhbl9zdGFydChyZGV2LCB3ZGV2LT5uZXRkZXYpOworCQlkZXZfaG9sZCh3ZGV2LT5uZXRkZXYpOworCX0gZWxzZSB7CisJCXJkZXYtPnNjYW5fcmVxID0gTlVMTDsKKwkJa2ZyZWUocmVxdWVzdCk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY2ZnODAyMTFfY29ubl9kb193b3JrKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnBhcmFtczsKKwljb25zdCB1OCAqcHJldl9ic3NpZCA9IE5VTEw7CisJaW50IGVycjsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlpZiAoIXdkZXYtPmNvbm4pCisJCXJldHVybiAwOworCisJcGFyYW1zID0gJndkZXYtPmNvbm4tPnBhcmFtczsKKworCXN3aXRjaCAod2Rldi0+Y29ubi0+c3RhdGUpIHsKKwljYXNlIENGRzgwMjExX0NPTk5fU0NBTl9BR0FJTjoKKwkJcmV0dXJuIGNmZzgwMjExX2Nvbm5fc2Nhbih3ZGV2KTsKKwljYXNlIENGRzgwMjExX0NPTk5fQVVUSEVOVElDQVRFX05FWFQ6CisJCUJVR19PTighcmRldi0+b3BzLT5hdXRoKTsKKwkJd2Rldi0+Y29ubi0+c3RhdGUgPSBDRkc4MDIxMV9DT05OX0FVVEhFTlRJQ0FUSU5HOworCQlyZXR1cm4gX19jZmc4MDIxMV9tbG1lX2F1dGgocmRldiwgd2Rldi0+bmV0ZGV2LAorCQkJCQkgICAgcGFyYW1zLT5jaGFubmVsLCBwYXJhbXMtPmF1dGhfdHlwZSwKKwkJCQkJICAgIHBhcmFtcy0+YnNzaWQsCisJCQkJCSAgICBwYXJhbXMtPnNzaWQsIHBhcmFtcy0+c3NpZF9sZW4sCisJCQkJCSAgICBOVUxMLCAwLAorCQkJCQkgICAgcGFyYW1zLT5rZXksIHBhcmFtcy0+a2V5X2xlbiwKKwkJCQkJICAgIHBhcmFtcy0+a2V5X2lkeCk7CisJY2FzZSBDRkc4MDIxMV9DT05OX0FTU09DSUFURV9ORVhUOgorCQlCVUdfT04oIXJkZXYtPm9wcy0+YXNzb2MpOworCQl3ZGV2LT5jb25uLT5zdGF0ZSA9IENGRzgwMjExX0NPTk5fQVNTT0NJQVRJTkc7CisJCWlmICh3ZGV2LT5jb25uLT5wcmV2X2Jzc2lkX3ZhbGlkKQorCQkJcHJldl9ic3NpZCA9IHdkZXYtPmNvbm4tPnByZXZfYnNzaWQ7CisJCWVyciA9IF9fY2ZnODAyMTFfbWxtZV9hc3NvYyhyZGV2LCB3ZGV2LT5uZXRkZXYsCisJCQkJCSAgICBwYXJhbXMtPmNoYW5uZWwsIHBhcmFtcy0+YnNzaWQsCisJCQkJCSAgICBwcmV2X2Jzc2lkLAorCQkJCQkgICAgcGFyYW1zLT5zc2lkLCBwYXJhbXMtPnNzaWRfbGVuLAorCQkJCQkgICAgcGFyYW1zLT5pZSwgcGFyYW1zLT5pZV9sZW4sCisJCQkJCSAgICBmYWxzZSwgJnBhcmFtcy0+Y3J5cHRvKTsKKwkJaWYgKGVycikKKwkJCV9fY2ZnODAyMTFfbWxtZV9kZWF1dGgocmRldiwgd2Rldi0+bmV0ZGV2LCBwYXJhbXMtPmJzc2lkLAorCQkJCQkgICAgICAgTlVMTCwgMCwKKwkJCQkJICAgICAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKKwkJcmV0dXJuIGVycjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3ZvaWQgY2ZnODAyMTFfY29ubl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlLCBjb25uX3dvcmspOworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisKKwlydG5sX2xvY2soKTsKKwljZmc4MDIxMV9sb2NrX3JkZXYocmRldik7CisJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmcmRldi0+bmV0ZGV2X2xpc3QsIGxpc3QpIHsKKwkJd2Rldl9sb2NrKHdkZXYpOworCQlpZiAoIW5ldGlmX3J1bm5pbmcod2Rldi0+bmV0ZGV2KSkgeworCQkJd2Rldl91bmxvY2sod2Rldik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAod2Rldi0+c21lX3N0YXRlICE9IENGRzgwMjExX1NNRV9DT05ORUNUSU5HKSB7CisJCQl3ZGV2X3VubG9jayh3ZGV2KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjZmc4MDIxMV9jb25uX2RvX3dvcmsod2RldikpCisJCQlfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KAorCQkJCQl3ZGV2LT5uZXRkZXYsCisJCQkJCXdkZXYtPmNvbm4tPnBhcmFtcy5ic3NpZCwKKwkJCQkJTlVMTCwgMCwgTlVMTCwgMCwKKwkJCQkJV0xBTl9TVEFUVVNfVU5TUEVDSUZJRURfRkFJTFVSRSwKKwkJCQkJZmFsc2UsIE5VTEwpOworCQl3ZGV2X3VubG9jayh3ZGV2KTsKKwl9CisKKwltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKKwlydG5sX3VubG9jaygpOworfQorCitzdGF0aWMgYm9vbCBjZmc4MDIxMV9nZXRfY29ubl9ic3Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzczsKKwl1MTYgY2FwYSA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7CisKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJaWYgKHdkZXYtPmNvbm4tPnBhcmFtcy5wcml2YWN5KQorCQljYXBhIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOworCisJYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LT53aXBoeSwgTlVMTCwgd2Rldi0+Y29ubi0+cGFyYW1zLmJzc2lkLAorCQkJICAgICAgIHdkZXYtPmNvbm4tPnBhcmFtcy5zc2lkLAorCQkJICAgICAgIHdkZXYtPmNvbm4tPnBhcmFtcy5zc2lkX2xlbiwKKwkJCSAgICAgICBXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1ksCisJCQkgICAgICAgY2FwYSk7CisJaWYgKCFic3MpCisJCXJldHVybiBmYWxzZTsKKworCW1lbWNweSh3ZGV2LT5jb25uLT5ic3NpZCwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOworCXdkZXYtPmNvbm4tPnBhcmFtcy5ic3NpZCA9IHdkZXYtPmNvbm4tPmJzc2lkOworCXdkZXYtPmNvbm4tPnBhcmFtcy5jaGFubmVsID0gYnNzLT5jaGFubmVsOworCXdkZXYtPmNvbm4tPnN0YXRlID0gQ0ZHODAyMTFfQ09OTl9BVVRIRU5USUNBVEVfTkVYVDsKKwlzY2hlZHVsZV93b3JrKCZyZGV2LT5jb25uX3dvcmspOworCisJY2ZnODAyMTFfcHV0X2Jzcyhic3MpOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBfX2NmZzgwMjExX3NtZV9zY2FuX2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJaWYgKHdkZXYtPnNtZV9zdGF0ZSAhPSBDRkc4MDIxMV9TTUVfQ09OTkVDVElORykKKwkJcmV0dXJuOworCisJaWYgKCF3ZGV2LT5jb25uKQorCQlyZXR1cm47CisKKwlpZiAod2Rldi0+Y29ubi0+c3RhdGUgIT0gQ0ZHODAyMTFfQ09OTl9TQ0FOTklORyAmJgorCSAgICB3ZGV2LT5jb25uLT5zdGF0ZSAhPSBDRkc4MDIxMV9DT05OX1NDQU5fQUdBSU4pCisJCXJldHVybjsKKworCWlmICghY2ZnODAyMTFfZ2V0X2Nvbm5fYnNzKHdkZXYpKSB7CisJCS8qIG5vdCBmb3VuZCAqLworCQlpZiAod2Rldi0+Y29ubi0+c3RhdGUgPT0gQ0ZHODAyMTFfQ09OTl9TQ0FOX0FHQUlOKQorCQkJc2NoZWR1bGVfd29yaygmcmRldi0+Y29ubl93b3JrKTsKKwkJZWxzZQorCQkJX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdCgKKwkJCQkJd2Rldi0+bmV0ZGV2LAorCQkJCQl3ZGV2LT5jb25uLT5wYXJhbXMuYnNzaWQsCisJCQkJCU5VTEwsIDAsIE5VTEwsIDAsCisJCQkJCVdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkUsCisJCQkJCWZhbHNlLCBOVUxMKTsKKwl9Cit9CisKK3ZvaWQgY2ZnODAyMTFfc21lX3NjYW5fZG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisKKwltdXRleF9sb2NrKCZ3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpLT5kZXZsaXN0X210eCk7CisJd2Rldl9sb2NrKHdkZXYpOworCV9fY2ZnODAyMTFfc21lX3NjYW5fZG9uZShkZXYpOworCXdkZXZfdW5sb2NrKHdkZXYpOworCW11dGV4X3VubG9jaygmd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KS0+ZGV2bGlzdF9tdHgpOworfQorCit2b2lkIGNmZzgwMjExX3NtZV9yeF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gd2Rldi0+d2lwaHk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopYnVmOworCXUxNiBzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSk7CisKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJLyogc2hvdWxkIG9ubHkgUlggYXV0aCBmcmFtZXMgd2hlbiBjb25uZWN0aW5nICovCisJaWYgKHdkZXYtPnNtZV9zdGF0ZSAhPSBDRkc4MDIxMV9TTUVfQ09OTkVDVElORykKKwkJcmV0dXJuOworCisJaWYgKFdBUk5fT04oIXdkZXYtPmNvbm4pKQorCQlyZXR1cm47CisKKwlpZiAoc3RhdHVzX2NvZGUgPT0gV0xBTl9TVEFUVVNfTk9UX1NVUFBPUlRFRF9BVVRIX0FMRyAmJgorCSAgICB3ZGV2LT5jb25uLT5hdXRvX2F1dGggJiYKKwkgICAgd2Rldi0+Y29ubi0+cGFyYW1zLmF1dGhfdHlwZSAhPSBOTDgwMjExX0FVVEhUWVBFX05FVFdPUktfRUFQKSB7CisJCS8qIHNlbGVjdCBhdXRvbWF0aWNhbGx5IGJldHdlZW4gb25seSBvcGVuLCBzaGFyZWQsIGxlYXAgKi8KKwkJc3dpdGNoICh3ZGV2LT5jb25uLT5wYXJhbXMuYXV0aF90eXBlKSB7CisJCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTToKKwkJCWlmICh3ZGV2LT5jb25uZWN0X2tleXMpCisJCQkJd2Rldi0+Y29ubi0+cGFyYW1zLmF1dGhfdHlwZSA9CisJCQkJCU5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWTsKKwkJCWVsc2UKKwkJCQl3ZGV2LT5jb25uLT5wYXJhbXMuYXV0aF90eXBlID0KKwkJCQkJTkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUDsKKwkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWToKKwkJCXdkZXYtPmNvbm4tPnBhcmFtcy5hdXRoX3R5cGUgPQorCQkJCU5MODAyMTFfQVVUSFRZUEVfTkVUV09SS19FQVA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIGh1aD8gKi8KKwkJCXdkZXYtPmNvbm4tPnBhcmFtcy5hdXRoX3R5cGUgPQorCQkJCU5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU07CisJCQlicmVhazsKKwkJfQorCQl3ZGV2LT5jb25uLT5zdGF0ZSA9IENGRzgwMjExX0NPTk5fQVVUSEVOVElDQVRFX05FWFQ7CisJCXNjaGVkdWxlX3dvcmsoJnJkZXYtPmNvbm5fd29yayk7CisJfSBlbHNlIGlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CisJCV9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoZGV2LCBtZ210LT5ic3NpZCwgTlVMTCwgMCwgTlVMTCwgMCwKKwkJCQkJICBzdGF0dXNfY29kZSwgZmFsc2UsIE5VTEwpOworCX0gZWxzZSBpZiAod2Rldi0+c21lX3N0YXRlID09IENGRzgwMjExX1NNRV9DT05ORUNUSU5HICYmCisJCSB3ZGV2LT5jb25uLT5zdGF0ZSA9PSBDRkc4MDIxMV9DT05OX0FVVEhFTlRJQ0FUSU5HKSB7CisJCXdkZXYtPmNvbm4tPnN0YXRlID0gQ0ZHODAyMTFfQ09OTl9BU1NPQ0lBVEVfTkVYVDsKKwkJc2NoZWR1bGVfd29yaygmcmRldi0+Y29ubl93b3JrKTsKKwl9Cit9CisKK2Jvb2wgY2ZnODAyMTFfc21lX2ZhaWxlZF9yZWFzc29jKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCit7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHdkZXYtPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisKKwlpZiAoV0FSTl9PTighd2Rldi0+Y29ubikpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghd2Rldi0+Y29ubi0+cHJldl9ic3NpZF92YWxpZCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBTb21lIHN0dXBpZCBBUHMgZG9uJ3QgYWNjZXB0IHJlYXNzb2MsIHNvIHdlCisJICogbmVlZCB0byBmYWxsIGJhY2sgdG8gdHJ5aW5nIHJlZ3VsYXIgYXNzb2MuCisJICovCisJd2Rldi0+Y29ubi0+cHJldl9ic3NpZF92YWxpZCA9IGZhbHNlOworCXdkZXYtPmNvbm4tPnN0YXRlID0gQ0ZHODAyMTFfQ09OTl9BU1NPQ0lBVEVfTkVYVDsKKwlzY2hlZHVsZV93b3JrKCZyZGV2LT5jb25uX3dvcmspOworCisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCQkgICAgICAgY29uc3QgdTggKnJlcV9pZSwgc2l6ZV90IHJlcV9pZV9sZW4sCisJCQkgICAgICAgY29uc3QgdTggKnJlc3BfaWUsIHNpemVfdCByZXNwX2llX2xlbiwKKwkJCSAgICAgICB1MTYgc3RhdHVzLCBib29sIHdleHRldiwKKwkJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwl1OCAqY291bnRyeV9pZTsKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworI2VuZGlmCisKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJaWYgKFdBUk5fT04od2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQorCQlyZXR1cm47CisKKwlpZiAod2Rldi0+c21lX3N0YXRlICE9IENGRzgwMjExX1NNRV9DT05ORUNUSU5HKQorCQlyZXR1cm47CisKKwlubDgwMjExX3NlbmRfY29ubmVjdF9yZXN1bHQod2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KSwgZGV2LAorCQkJCSAgICBic3NpZCwgcmVxX2llLCByZXFfaWVfbGVuLAorCQkJCSAgICByZXNwX2llLCByZXNwX2llX2xlbiwKKwkJCQkgICAgc3RhdHVzLCBHRlBfS0VSTkVMKTsKKworI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKKwlpZiAod2V4dGV2KSB7CisJCWlmIChyZXFfaWUgJiYgc3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwkJCXdycXUuZGF0YS5sZW5ndGggPSByZXFfaWVfbGVuOworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZBU1NPQ1JFUUlFLCAmd3JxdSwgcmVxX2llKTsKKwkJfQorCisJCWlmIChyZXNwX2llICYmIHN0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CisJCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJCQl3cnF1LmRhdGEubGVuZ3RoID0gcmVzcF9pZV9sZW47CisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVkFTU09DUkVTUElFLCAmd3JxdSwgcmVzcF9pZSk7CisJCX0KKworCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJCWlmIChic3NpZCAmJiBzdGF0dXMgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBic3NpZCwgRVRIX0FMRU4pOworCQkJbWVtY3B5KHdkZXYtPndleHQucHJldl9ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwkJCXdkZXYtPndleHQucHJldl9ic3NpZF92YWxpZCA9IHRydWU7CisJCX0KKwkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCX0KKyNlbmRpZgorCisJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKSB7CisJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0+Y3VycmVudF9ic3MpOworCQljZmc4MDIxMV9wdXRfYnNzKCZ3ZGV2LT5jdXJyZW50X2Jzcy0+cHViKTsKKwkJd2Rldi0+Y3VycmVudF9ic3MgPSBOVUxMOworCX0KKworCWlmICh3ZGV2LT5jb25uKQorCQl3ZGV2LT5jb25uLT5zdGF0ZSA9IENGRzgwMjExX0NPTk5fSURMRTsKKworCWlmIChzdGF0dXMgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQl3ZGV2LT5zbWVfc3RhdGUgPSBDRkc4MDIxMV9TTUVfSURMRTsKKwkJaWYgKHdkZXYtPmNvbm4pCisJCQlrZnJlZSh3ZGV2LT5jb25uLT5pZSk7CisJCWtmcmVlKHdkZXYtPmNvbm4pOworCQl3ZGV2LT5jb25uID0gTlVMTDsKKwkJa2ZyZWUod2Rldi0+Y29ubmVjdF9rZXlzKTsKKwkJd2Rldi0+Y29ubmVjdF9rZXlzID0gTlVMTDsKKwkJd2Rldi0+c3NpZF9sZW4gPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKCFic3MpCisJCWJzcyA9IGNmZzgwMjExX2dldF9ic3Mod2Rldi0+d2lwaHksIE5VTEwsIGJzc2lkLAorCQkJCSAgICAgICB3ZGV2LT5zc2lkLCB3ZGV2LT5zc2lkX2xlbiwKKwkJCQkgICAgICAgV0xBTl9DQVBBQklMSVRZX0VTUywKKwkJCQkgICAgICAgV0xBTl9DQVBBQklMSVRZX0VTUyk7CisKKwlpZiAoV0FSTl9PTighYnNzKSkKKwkJcmV0dXJuOworCisJY2ZnODAyMTFfaG9sZF9ic3MoYnNzX2Zyb21fcHViKGJzcykpOworCXdkZXYtPmN1cnJlbnRfYnNzID0gYnNzX2Zyb21fcHViKGJzcyk7CisKKwl3ZGV2LT5zbWVfc3RhdGUgPSBDRkc4MDIxMV9TTUVfQ09OTkVDVEVEOworCWNmZzgwMjExX3VwbG9hZF9jb25uZWN0X2tleXMod2Rldik7CisKKwljb3VudHJ5X2llID0gKHU4ICopIGllZWU4MDIxMV9ic3NfZ2V0X2llKGJzcywgV0xBTl9FSURfQ09VTlRSWSk7CisKKwlpZiAoIWNvdW50cnlfaWUpCisJCXJldHVybjsKKworCS8qCisJICogaWVlZTgwMjExX2Jzc19nZXRfaWUoKSBlbnN1cmVzIHdlIGNhbiBhY2Nlc3M6CisJICogLSBjb3VudHJ5X2llICsgMiwgdGhlIHN0YXJ0IG9mIHRoZSBjb3VudHJ5IGllIGRhdGEsIGFuZAorCSAqIC0gYW5kIGNvdW50cnlfaWVbMV0gd2hpY2ggaXMgdGhlIElFIGxlbmd0aAorCSAqLworCXJlZ3VsYXRvcnlfaGludF8xMWQod2Rldi0+d2lwaHksCisJCQkgICAgY291bnRyeV9pZSArIDIsCisJCQkgICAgY291bnRyeV9pZVsxXSk7Cit9CisKK3ZvaWQgY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAorCQkJICAgICBjb25zdCB1OCAqcmVxX2llLCBzaXplX3QgcmVxX2llX2xlbiwKKwkJCSAgICAgY29uc3QgdTggKnJlc3BfaWUsIHNpemVfdCByZXNwX2llX2xlbiwKKwkJCSAgICAgdTE2IHN0YXR1cywgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfZXZlbnQgKmV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDRkc4MDIxMV9ERVZfV0FSTl9PTih3ZGV2LT5zbWVfc3RhdGUgIT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RJTkcpOworCisJZXYgPSBremFsbG9jKHNpemVvZigqZXYpICsgcmVxX2llX2xlbiArIHJlc3BfaWVfbGVuLCBnZnApOworCWlmICghZXYpCisJCXJldHVybjsKKworCWV2LT50eXBlID0gRVZFTlRfQ09OTkVDVF9SRVNVTFQ7CisJaWYgKGJzc2lkKQorCQltZW1jcHkoZXYtPmNyLmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCWV2LT5jci5yZXFfaWUgPSAoKHU4ICopZXYpICsgc2l6ZW9mKCpldik7CisJZXYtPmNyLnJlcV9pZV9sZW4gPSByZXFfaWVfbGVuOworCW1lbWNweSgodm9pZCAqKWV2LT5jci5yZXFfaWUsIHJlcV9pZSwgcmVxX2llX2xlbik7CisJZXYtPmNyLnJlc3BfaWUgPSAoKHU4ICopZXYpICsgc2l6ZW9mKCpldikgKyByZXFfaWVfbGVuOworCWV2LT5jci5yZXNwX2llX2xlbiA9IHJlc3BfaWVfbGVuOworCW1lbWNweSgodm9pZCAqKWV2LT5jci5yZXNwX2llLCByZXNwX2llLCByZXNwX2llX2xlbik7CisJZXYtPmNyLnN0YXR1cyA9IHN0YXR1czsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmZXYtPmxpc3QsICZ3ZGV2LT5ldmVudF9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJc2NoZWR1bGVfd29yaygmcmRldi0+ZXZlbnRfd29yayk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KTsKKwordm9pZCBfX2NmZzgwMjExX3JvYW1lZChzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCSAgICAgICBjb25zdCB1OCAqcmVxX2llLCBzaXplX3QgcmVxX2llX2xlbiwKKwkJICAgICAgIGNvbnN0IHU4ICpyZXNwX2llLCBzaXplX3QgcmVzcF9pZV9sZW4pCit7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzOworI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisjZW5kaWYKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlpZiAoV0FSTl9PTih3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybjsKKworCWlmICh3ZGV2LT5zbWVfc3RhdGUgIT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RFRCkKKwkJcmV0dXJuOworCisJLyogaW50ZXJuYWwgZXJyb3IgLS0gaG93IGRpZCB3ZSBnZXQgdG8gQ09OTkVDVEVEIHcvbyBCU1M/ICovCisJaWYgKFdBUk5fT04oIXdkZXYtPmN1cnJlbnRfYnNzKSkgeworCQlyZXR1cm47CisJfQorCisJY2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LT5jdXJyZW50X2Jzcyk7CisJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+Y3VycmVudF9ic3MtPnB1Yik7CisJd2Rldi0+Y3VycmVudF9ic3MgPSBOVUxMOworCisJYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LT53aXBoeSwgTlVMTCwgYnNzaWQsCisJCQkgICAgICAgd2Rldi0+c3NpZCwgd2Rldi0+c3NpZF9sZW4sCisJCQkgICAgICAgV0xBTl9DQVBBQklMSVRZX0VTUywgV0xBTl9DQVBBQklMSVRZX0VTUyk7CisKKwlpZiAoV0FSTl9PTighYnNzKSkKKwkJcmV0dXJuOworCisJY2ZnODAyMTFfaG9sZF9ic3MoYnNzX2Zyb21fcHViKGJzcykpOworCXdkZXYtPmN1cnJlbnRfYnNzID0gYnNzX2Zyb21fcHViKGJzcyk7CisKKwlubDgwMjExX3NlbmRfcm9hbWVkKHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSksIHdkZXYtPm5ldGRldiwgYnNzaWQsCisJCQkgICAgcmVxX2llLCByZXFfaWVfbGVuLCByZXNwX2llLCByZXNwX2llX2xlbiwKKwkJCSAgICBHRlBfS0VSTkVMKTsKKworI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKKwlpZiAocmVxX2llKSB7CisJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwkJd3JxdS5kYXRhLmxlbmd0aCA9IHJlcV9pZV9sZW47CisJCXdpcmVsZXNzX3NlbmRfZXZlbnQod2Rldi0+bmV0ZGV2LCBJV0VWQVNTT0NSRVFJRSwKKwkJCQkgICAgJndycXUsIHJlcV9pZSk7CisJfQorCisJaWYgKHJlc3BfaWUpIHsKKwkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCQl3cnF1LmRhdGEubGVuZ3RoID0gcmVzcF9pZV9sZW47CisJCXdpcmVsZXNzX3NlbmRfZXZlbnQod2Rldi0+bmV0ZGV2LCBJV0VWQVNTT0NSRVNQSUUsCisJCQkJICAgICZ3cnF1LCByZXNwX2llKTsKKwl9CisKKwltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KHdkZXYtPndleHQucHJldl9ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwl3ZGV2LT53ZXh0LnByZXZfYnNzaWRfdmFsaWQgPSB0cnVlOworCXdpcmVsZXNzX3NlbmRfZXZlbnQod2Rldi0+bmV0ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKyNlbmRpZgorfQorCit2b2lkIGNmZzgwMjExX3JvYW1lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCSAgICAgY29uc3QgdTggKnJlcV9pZSwgc2l6ZV90IHJlcV9pZV9sZW4sCisJCSAgICAgY29uc3QgdTggKnJlc3BfaWUsIHNpemVfdCByZXNwX2llX2xlbiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfZXZlbnQgKmV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDRkc4MDIxMV9ERVZfV0FSTl9PTih3ZGV2LT5zbWVfc3RhdGUgIT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RFRCk7CisKKwlldiA9IGt6YWxsb2Moc2l6ZW9mKCpldikgKyByZXFfaWVfbGVuICsgcmVzcF9pZV9sZW4sIGdmcCk7CisJaWYgKCFldikKKwkJcmV0dXJuOworCisJZXYtPnR5cGUgPSBFVkVOVF9ST0FNRUQ7CisJbWVtY3B5KGV2LT5ybS5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwlldi0+cm0ucmVxX2llID0gKCh1OCAqKWV2KSArIHNpemVvZigqZXYpOworCWV2LT5ybS5yZXFfaWVfbGVuID0gcmVxX2llX2xlbjsKKwltZW1jcHkoKHZvaWQgKilldi0+cm0ucmVxX2llLCByZXFfaWUsIHJlcV9pZV9sZW4pOworCWV2LT5ybS5yZXNwX2llID0gKCh1OCAqKWV2KSArIHNpemVvZigqZXYpICsgcmVxX2llX2xlbjsKKwlldi0+cm0ucmVzcF9pZV9sZW4gPSByZXNwX2llX2xlbjsKKwltZW1jcHkoKHZvaWQgKilldi0+cm0ucmVzcF9pZSwgcmVzcF9pZSwgcmVzcF9pZV9sZW4pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZldi0+bGlzdCwgJndkZXYtPmV2ZW50X2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlzY2hlZHVsZV93b3JrKCZyZGV2LT5ldmVudF93b3JrKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfcm9hbWVkKTsKKwordm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsCisJCQkgICAgIHNpemVfdCBpZV9sZW4sIHUxNiByZWFzb24sIGJvb2wgZnJvbV9hcCkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisJaW50IGk7CisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAorCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKyNlbmRpZgorCisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKKworCWlmIChXQVJOX09OKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKKwkJcmV0dXJuOworCisJaWYgKHdkZXYtPnNtZV9zdGF0ZSAhPSBDRkc4MDIxMV9TTUVfQ09OTkVDVEVEKQorCQlyZXR1cm47CisKKwlpZiAod2Rldi0+Y3VycmVudF9ic3MpIHsKKwkJY2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LT5jdXJyZW50X2Jzcyk7CisJCWNmZzgwMjExX3B1dF9ic3MoJndkZXYtPmN1cnJlbnRfYnNzLT5wdWIpOworCX0KKworCXdkZXYtPmN1cnJlbnRfYnNzID0gTlVMTDsKKwl3ZGV2LT5zbWVfc3RhdGUgPSBDRkc4MDIxMV9TTUVfSURMRTsKKwl3ZGV2LT5zc2lkX2xlbiA9IDA7CisKKwlpZiAod2Rldi0+Y29ubikgeworCQljb25zdCB1OCAqYnNzaWQ7CisJCWludCByZXQ7CisKKwkJa2ZyZWUod2Rldi0+Y29ubi0+aWUpOworCQl3ZGV2LT5jb25uLT5pZSA9IE5VTEw7CisJCWtmcmVlKHdkZXYtPmNvbm4pOworCQl3ZGV2LT5jb25uID0gTlVMTDsKKworCQkvKgorCQkgKiBJZiB0aGlzIGRpc2Nvbm5lY3Qgd2FzIGR1ZSB0byBhIGRpc2Fzc29jLCB3ZQorCQkgKiB3ZSBtaWdodCBzdGlsbCBoYXZlIGFuIGF1dGggQlNTIGFyb3VuZC4gRm9yCisJCSAqIHRoZSB1c2Vyc3BhY2UgU01FIHRoYXQncyBjdXJyZW50bHkgZXhwZWN0ZWQsCisJCSAqIGJ1dCBmb3IgdGhlIGtlcm5lbCBTTUUgKG5sODAyMTEgQ09OTkVDVCBvcgorCQkgKiB3aXJlbGVzcyBleHRlbnNpb25zKSB3ZSB3YW50IHRvIGNsZWFyIHVwIGFsbAorCQkgKiBzdGF0ZS4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBNQVhfQVVUSF9CU1NFUzsgaSsrKSB7CisJCQlpZiAoIXdkZXYtPmF1dGhfYnNzZXNbaV0pCisJCQkJY29udGludWU7CisJCQlic3NpZCA9IHdkZXYtPmF1dGhfYnNzZXNbaV0tPnB1Yi5ic3NpZDsKKwkJCXJldCA9IF9fY2ZnODAyMTFfbWxtZV9kZWF1dGgocmRldiwgZGV2LCBic3NpZCwgTlVMTCwgMCwKKwkJCQkJCVdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKKwkJCVdBUk4ocmV0LCAiZGVhdXRoIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCX0KKwl9CisKKwlubDgwMjExX3NlbmRfZGlzY29ubmVjdGVkKHJkZXYsIGRldiwgcmVhc29uLCBpZSwgaWVfbGVuLCBmcm9tX2FwKTsKKworCS8qCisJICogRGVsZXRlIGFsbCB0aGUga2V5cyAuLi4gcGFpcndpc2Uga2V5cyBjYW4ndCByZWFsbHkKKwkgKiBleGlzdCBhbnkgbW9yZSBhbnl3YXksIGJ1dCBkZWZhdWx0IGtleXMgbWlnaHQuCisJICovCisJaWYgKHJkZXYtPm9wcy0+ZGVsX2tleSkKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCXJkZXYtPm9wcy0+ZGVsX2tleSh3ZGV2LT53aXBoeSwgZGV2LCBpLCBOVUxMKTsKKworI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKKwltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisjZW5kaWYKK30KKwordm9pZCBjZmc4MDIxMV9kaXNjb25uZWN0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHJlYXNvbiwKKwkJCSAgIHU4ICppZSwgc2l6ZV90IGllX2xlbiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfZXZlbnQgKmV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDRkc4MDIxMV9ERVZfV0FSTl9PTih3ZGV2LT5zbWVfc3RhdGUgIT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RFRCk7CisKKwlldiA9IGt6YWxsb2Moc2l6ZW9mKCpldikgKyBpZV9sZW4sIGdmcCk7CisJaWYgKCFldikKKwkJcmV0dXJuOworCisJZXYtPnR5cGUgPSBFVkVOVF9ESVNDT05ORUNURUQ7CisJZXYtPmRjLmllID0gKCh1OCAqKWV2KSArIHNpemVvZigqZXYpOworCWV2LT5kYy5pZV9sZW4gPSBpZV9sZW47CisJbWVtY3B5KCh2b2lkICopZXYtPmRjLmllLCBpZSwgaWVfbGVuKTsKKwlldi0+ZGMucmVhc29uID0gcmVhc29uOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZldi0+bGlzdCwgJndkZXYtPmV2ZW50X2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlzY2hlZHVsZV93b3JrKCZyZGV2LT5ldmVudF93b3JrKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfZGlzY29ubmVjdGVkKTsKKworaW50IF9fY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpjb25uZWN0LAorCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICpjb25ua2V5cywKKwkJICAgICAgIGNvbnN0IHU4ICpwcmV2X2Jzc2lkKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCWludCBlcnI7CisKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJaWYgKHdkZXYtPnNtZV9zdGF0ZSAhPSBDRkc4MDIxMV9TTUVfSURMRSkKKwkJcmV0dXJuIC1FQUxSRUFEWTsKKworCWNoYW4gPSByZGV2X2ZpeGVkX2NoYW5uZWwocmRldiwgd2Rldik7CisJaWYgKGNoYW4gJiYgY2hhbiAhPSBjb25uZWN0LT5jaGFubmVsKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKFdBUk5fT04od2Rldi0+Y29ubmVjdF9rZXlzKSkgeworCQlrZnJlZSh3ZGV2LT5jb25uZWN0X2tleXMpOworCQl3ZGV2LT5jb25uZWN0X2tleXMgPSBOVUxMOworCX0KKworCWlmIChjb25ua2V5cyAmJiBjb25ua2V5cy0+ZGVmID49IDApIHsKKwkJaW50IGlkeDsKKwkJdTMyIGNpcGhlcjsKKworCQlpZHggPSBjb25ua2V5cy0+ZGVmOworCQljaXBoZXIgPSBjb25ua2V5cy0+cGFyYW1zW2lkeF0uY2lwaGVyOworCQkvKiBJZiBnaXZlbiBhIFdFUCBrZXkgd2UgbWF5IG5lZWQgaXQgZm9yIHNoYXJlZCBrZXkgYXV0aCAqLworCQlpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8CisJCSAgICBjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KSB7CisJCQljb25uZWN0LT5rZXlfaWR4ID0gaWR4OworCQkJY29ubmVjdC0+a2V5ID0gY29ubmtleXMtPnBhcmFtc1tpZHhdLmtleTsKKwkJCWNvbm5lY3QtPmtleV9sZW4gPSBjb25ua2V5cy0+cGFyYW1zW2lkeF0ua2V5X2xlbjsKKworCQkJLyoKKwkJCSAqIElmIGNpcGhlcnMgYXJlIG5vdCBzZXQgKGUuZy4gd2hlbiBnb2luZyB0aHJvdWdoCisJCQkgKiBpd2NvbmZpZyksIHdlIGhhdmUgdG8gc2V0IHRoZW0gYXBwcm9wcmlhdGVseSBoZXJlLgorCQkJICovCisJCQlpZiAoY29ubmVjdC0+Y3J5cHRvLmNpcGhlcl9ncm91cCA9PSAwKQorCQkJCWNvbm5lY3QtPmNyeXB0by5jaXBoZXJfZ3JvdXAgPSBjaXBoZXI7CisKKwkJCWlmIChjb25uZWN0LT5jcnlwdG8ubl9jaXBoZXJzX3BhaXJ3aXNlID09IDApIHsKKwkJCQljb25uZWN0LT5jcnlwdG8ubl9jaXBoZXJzX3BhaXJ3aXNlID0gMTsKKwkJCQljb25uZWN0LT5jcnlwdG8uY2lwaGVyc19wYWlyd2lzZVswXSA9IGNpcGhlcjsKKwkJCX0KKwkJfQorCX0KKworCWlmICghcmRldi0+b3BzLT5jb25uZWN0KSB7CisJCWlmICghcmRldi0+b3BzLT5hdXRoIHx8ICFyZGV2LT5vcHMtPmFzc29jKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJCWlmIChXQVJOX09OKHdkZXYtPmNvbm4pKQorCQkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKworCQl3ZGV2LT5jb25uID0ga3phbGxvYyhzaXplb2YoKndkZXYtPmNvbm4pLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF3ZGV2LT5jb25uKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyoKKwkJICogQ29weSBhbGwgcGFyYW1ldGVycywgYW5kIHRyZWF0IGV4cGxpY2l0bHkgSUVzLCBCU1NJRCwgU1NJRC4KKwkJICovCisJCW1lbWNweSgmd2Rldi0+Y29ubi0+cGFyYW1zLCBjb25uZWN0LCBzaXplb2YoKmNvbm5lY3QpKTsKKwkJaWYgKGNvbm5lY3QtPmJzc2lkKSB7CisJCQl3ZGV2LT5jb25uLT5wYXJhbXMuYnNzaWQgPSB3ZGV2LT5jb25uLT5ic3NpZDsKKwkJCW1lbWNweSh3ZGV2LT5jb25uLT5ic3NpZCwgY29ubmVjdC0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJfQorCisJCWlmIChjb25uZWN0LT5pZSkgeworCQkJd2Rldi0+Y29ubi0+aWUgPSBrbWVtZHVwKGNvbm5lY3QtPmllLCBjb25uZWN0LT5pZV9sZW4sCisJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCXdkZXYtPmNvbm4tPnBhcmFtcy5pZSA9IHdkZXYtPmNvbm4tPmllOworCQkJaWYgKCF3ZGV2LT5jb25uLT5pZSkgeworCQkJCWtmcmVlKHdkZXYtPmNvbm4pOworCQkJCXdkZXYtPmNvbm4gPSBOVUxMOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQl9CisKKwkJaWYgKGNvbm5lY3QtPmF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX0FVVE9NQVRJQykgeworCQkJd2Rldi0+Y29ubi0+YXV0b19hdXRoID0gdHJ1ZTsKKwkJCS8qIHN0YXJ0IHdpdGggb3BlbiBzeXN0ZW0gLi4uIHNob3VsZCBtb3N0bHkgd29yayAqLworCQkJd2Rldi0+Y29ubi0+cGFyYW1zLmF1dGhfdHlwZSA9CisJCQkJTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTTsKKwkJfSBlbHNlIHsKKwkJCXdkZXYtPmNvbm4tPmF1dG9fYXV0aCA9IGZhbHNlOworCQl9CisKKwkJbWVtY3B5KHdkZXYtPnNzaWQsIGNvbm5lY3QtPnNzaWQsIGNvbm5lY3QtPnNzaWRfbGVuKTsKKwkJd2Rldi0+c3NpZF9sZW4gPSBjb25uZWN0LT5zc2lkX2xlbjsKKwkJd2Rldi0+Y29ubi0+cGFyYW1zLnNzaWQgPSB3ZGV2LT5zc2lkOworCQl3ZGV2LT5jb25uLT5wYXJhbXMuc3NpZF9sZW4gPSBjb25uZWN0LT5zc2lkX2xlbjsKKworCQkvKiBkb24ndCBjYXJlIGFib3V0IHJlc3VsdCAtLSBidXQgZmlsbCBic3NpZCAmIGNoYW5uZWwgKi8KKwkJaWYgKCF3ZGV2LT5jb25uLT5wYXJhbXMuYnNzaWQgfHwgIXdkZXYtPmNvbm4tPnBhcmFtcy5jaGFubmVsKQorCQkJY2ZnODAyMTFfZ2V0X2Nvbm5fYnNzKHdkZXYpOworCisJCXdkZXYtPnNtZV9zdGF0ZSA9IENGRzgwMjExX1NNRV9DT05ORUNUSU5HOworCQl3ZGV2LT5jb25uZWN0X2tleXMgPSBjb25ua2V5czsKKworCQlpZiAocHJldl9ic3NpZCkgeworCQkJbWVtY3B5KHdkZXYtPmNvbm4tPnByZXZfYnNzaWQsIHByZXZfYnNzaWQsIEVUSF9BTEVOKTsKKwkJCXdkZXYtPmNvbm4tPnByZXZfYnNzaWRfdmFsaWQgPSB0cnVlOworCQl9CisKKwkJLyogd2UncmUgZ29vZCBpZiB3ZSBoYXZlIGJvdGggQlNTSUQgYW5kIGNoYW5uZWwgKi8KKwkJaWYgKHdkZXYtPmNvbm4tPnBhcmFtcy5ic3NpZCAmJiB3ZGV2LT5jb25uLT5wYXJhbXMuY2hhbm5lbCkgeworCQkJd2Rldi0+Y29ubi0+c3RhdGUgPSBDRkc4MDIxMV9DT05OX0FVVEhFTlRJQ0FURV9ORVhUOworCQkJZXJyID0gY2ZnODAyMTFfY29ubl9kb193b3JrKHdkZXYpOworCQl9IGVsc2UgeworCQkJLyogb3RoZXJ3aXNlIHdlJ2xsIG5lZWQgdG8gc2NhbiBmb3IgdGhlIEFQIGZpcnN0ICovCisJCQllcnIgPSBjZmc4MDIxMV9jb25uX3NjYW4od2Rldik7CisJCQkvKgorCQkJICogSWYgd2UgY2FuJ3Qgc2NhbiByaWdodCBub3csIHRoZW4gd2UgbmVlZCB0byBzY2FuIGFnYWluCisJCQkgKiBhZnRlciB0aGUgY3VycmVudCBzY2FuIGZpbmlzaGVkLCBzaW5jZSB0aGUgcGFyYW1ldGVycworCQkJICogY2hhbmdlZCAodW5sZXNzIHdlIGZpbmQgYSBnb29kIEFQIGFueXdheSkuCisJCQkgKi8KKwkJCWlmIChlcnIgPT0gLUVCVVNZKSB7CisJCQkJZXJyID0gMDsKKwkJCQl3ZGV2LT5jb25uLT5zdGF0ZSA9IENGRzgwMjExX0NPTk5fU0NBTl9BR0FJTjsKKwkJCX0KKwkJfQorCQlpZiAoZXJyKSB7CisJCQlrZnJlZSh3ZGV2LT5jb25uLT5pZSk7CisJCQlrZnJlZSh3ZGV2LT5jb25uKTsKKwkJCXdkZXYtPmNvbm4gPSBOVUxMOworCQkJd2Rldi0+c21lX3N0YXRlID0gQ0ZHODAyMTFfU01FX0lETEU7CisJCQl3ZGV2LT5jb25uZWN0X2tleXMgPSBOVUxMOworCQkJd2Rldi0+c3NpZF9sZW4gPSAwOworCQl9CisKKwkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQl3ZGV2LT5zbWVfc3RhdGUgPSBDRkc4MDIxMV9TTUVfQ09OTkVDVElORzsKKwkJd2Rldi0+Y29ubmVjdF9rZXlzID0gY29ubmtleXM7CisJCWVyciA9IHJkZXYtPm9wcy0+Y29ubmVjdCgmcmRldi0+d2lwaHksIGRldiwgY29ubmVjdCk7CisJCWlmIChlcnIpIHsKKwkJCXdkZXYtPmNvbm5lY3Rfa2V5cyA9IE5VTEw7CisJCQl3ZGV2LT5zbWVfc3RhdGUgPSBDRkc4MDIxMV9TTUVfSURMRTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQltZW1jcHkod2Rldi0+c3NpZCwgY29ubmVjdC0+c3NpZCwgY29ubmVjdC0+c3NpZF9sZW4pOworCQl3ZGV2LT5zc2lkX2xlbiA9IGNvbm5lY3QtPnNzaWRfbGVuOworCisJCXJldHVybiAwOworCX0KK30KKworaW50IGNmZzgwMjExX2Nvbm5lY3Qoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpjb25uZWN0LAorCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqY29ubmtleXMpCit7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwl3ZGV2X2xvY2soZGV2LT5pZWVlODAyMTFfcHRyKTsKKwllcnIgPSBfX2NmZzgwMjExX2Nvbm5lY3QocmRldiwgZGV2LCBjb25uZWN0LCBjb25ua2V5cywgTlVMTCk7CisJd2Rldl91bmxvY2soZGV2LT5pZWVlODAyMTFfcHRyKTsKKwltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3Qoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcmVhc29uLCBib29sIHdleHRldikKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCWludCBlcnI7CisKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJaWYgKHdkZXYtPnNtZV9zdGF0ZSA9PSBDRkc4MDIxMV9TTUVfSURMRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZnJlZSh3ZGV2LT5jb25uZWN0X2tleXMpOworCXdkZXYtPmNvbm5lY3Rfa2V5cyA9IE5VTEw7CisKKwlpZiAoIXJkZXYtPm9wcy0+ZGlzY29ubmVjdCkgeworCQlpZiAoIXJkZXYtPm9wcy0+ZGVhdXRoKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJCS8qIHdhcyBpdCBjb25uZWN0ZWQgYnkgdXNlcnNwYWNlIFNNRT8gKi8KKwkJaWYgKCF3ZGV2LT5jb25uKSB7CisJCQljZmc4MDIxMV9tbG1lX2Rvd24ocmRldiwgZGV2KTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKHdkZXYtPnNtZV9zdGF0ZSA9PSBDRkc4MDIxMV9TTUVfQ09OTkVDVElORyAmJgorCQkgICAgKHdkZXYtPmNvbm4tPnN0YXRlID09IENGRzgwMjExX0NPTk5fU0NBTk5JTkcgfHwKKwkJICAgICB3ZGV2LT5jb25uLT5zdGF0ZSA9PSBDRkc4MDIxMV9DT05OX1NDQU5fQUdBSU4pKSB7CisJCQl3ZGV2LT5zbWVfc3RhdGUgPSBDRkc4MDIxMV9TTUVfSURMRTsKKwkJCWtmcmVlKHdkZXYtPmNvbm4tPmllKTsKKwkJCWtmcmVlKHdkZXYtPmNvbm4pOworCQkJd2Rldi0+Y29ubiA9IE5VTEw7CisJCQl3ZGV2LT5zc2lkX2xlbiA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIHdkZXYtPmNvbm4tPnBhcmFtcy5ic3NpZCBtdXN0IGJlIHNldCBpZiA+IFNDQU5OSU5HICovCisJCWVyciA9IF9fY2ZnODAyMTFfbWxtZV9kZWF1dGgocmRldiwgZGV2LAorCQkJCQkgICAgIHdkZXYtPmNvbm4tPnBhcmFtcy5ic3NpZCwKKwkJCQkJICAgICBOVUxMLCAwLCByZWFzb24pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQllcnIgPSByZGV2LT5vcHMtPmRpc2Nvbm5lY3QoJnJkZXYtPndpcGh5LCBkZXYsIHJlYXNvbik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmICh3ZGV2LT5zbWVfc3RhdGUgPT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RFRCkKKwkJX19jZmc4MDIxMV9kaXNjb25uZWN0ZWQoZGV2LCBOVUxMLCAwLCAwLCBmYWxzZSk7CisJZWxzZSBpZiAod2Rldi0+c21lX3N0YXRlID09IENGRzgwMjExX1NNRV9DT05ORUNUSU5HKQorCQlfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KGRldiwgTlVMTCwgTlVMTCwgMCwgTlVMTCwgMCwKKwkJCQkJICBXTEFOX1NUQVRVU19VTlNQRUNJRklFRF9GQUlMVVJFLAorCQkJCQkgIHdleHRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNmZzgwMjExX2Rpc2Nvbm5lY3Qoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXUxNiByZWFzb24sIGJvb2wgd2V4dGV2KQoreworCWludCBlcnI7CisKKwl3ZGV2X2xvY2soZGV2LT5pZWVlODAyMTFfcHRyKTsKKwllcnIgPSBfX2NmZzgwMjExX2Rpc2Nvbm5lY3QocmRldiwgZGV2LCByZWFzb24sIHdleHRldik7CisJd2Rldl91bmxvY2soZGV2LT5pZWVlODAyMTFfcHRyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgY2ZnODAyMTFfc21lX2Rpc2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpZHgpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlpZiAoIXdkZXYtPmNvbm4pCisJCXJldHVybjsKKworCWlmICh3ZGV2LT5jb25uLT5zdGF0ZSA9PSBDRkc4MDIxMV9DT05OX0lETEUpCisJCXJldHVybjsKKworCS8qCisJICogT2ssIHNvIHRoZSBhc3NvY2lhdGlvbiB3YXMgbWFkZSBieSB0aGlzIFNNRSAtLSB3ZSBkb24ndAorCSAqIHdhbnQgaXQgYW55IG1vcmUgc28gZGVhdXRoZW50aWNhdGUgdG9vLgorCSAqLworCisJaWYgKCF3ZGV2LT5hdXRoX2Jzc2VzW2lkeF0pCisJCXJldHVybjsKKworCW1lbWNweShic3NpZCwgd2Rldi0+YXV0aF9ic3Nlc1tpZHhdLT5wdWIuYnNzaWQsIEVUSF9BTEVOKTsKKwlpZiAoX19jZmc4MDIxMV9tbG1lX2RlYXV0aChyZGV2LCBkZXYsIGJzc2lkLAorCQkJCSAgIE5VTEwsIDAsIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKSkgeworCQkvKiB3aGF0ZXZlciAtLSBhc3N1bWUgZ29uZSBhbnl3YXkgKi8KKwkJY2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LT5hdXRoX2Jzc2VzW2lkeF0pOworCQljZmc4MDIxMV9wdXRfYnNzKCZ3ZGV2LT5hdXRoX2Jzc2VzW2lkeF0tPnB1Yik7CisJCXdkZXYtPmF1dGhfYnNzZXNbaWR4XSA9IE5VTEw7CisJfQorfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3V0aWwuYyBiL25ldC93aXJlbGVzcy91dGlsLmMKaW5kZXggMjU1NTA2OS4uM2ZjMmRmOCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3V0aWwuYworKysgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCkBAIC0xNDEsOSArMTQxLDEyIEBACiAJCQlzZXRfbWFuZGF0b3J5X2ZsYWdzX2JhbmQod2lwaHktPmJhbmRzW2JhbmRdLCBiYW5kKTsKIH0KIAotaW50IGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCwKK2ludCBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMsIGludCBrZXlfaWR4LAogCQkJCSAgIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKKwlpbnQgaTsKKwogCWlmIChrZXlfaWR4ID4gNSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE5Nyw2ICsyMDAsMTIgQEAKIAkJfQogCX0KIAorCWZvciAoaSA9IDA7IGkgPCByZGV2LT53aXBoeS5uX2NpcGhlcl9zdWl0ZXM7IGkrKykKKwkJaWYgKHBhcmFtcy0+Y2lwaGVyID09IHJkZXYtPndpcGh5LmNpcGhlcl9zdWl0ZXNbaV0pCisJCQlicmVhazsKKwlpZiAoaSA9PSByZGV2LT53aXBoeS5uX2NpcGhlcl9zdWl0ZXMpCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2NSwxMSArMjc0LDExIEBACiAJc3dpdGNoIChhZSkgewogCWNhc2UgMDoKIAkJcmV0dXJuIDY7Ci0JY2FzZSAxOgorCWNhc2UgTUVTSF9GTEFHU19BRV9BNDoKIAkJcmV0dXJuIDEyOwotCWNhc2UgMjoKKwljYXNlIE1FU0hfRkxBR1NfQUVfQTVfQTY6CiAJCXJldHVybiAxODsKLQljYXNlIDM6CisJY2FzZSAoTUVTSF9GTEFHU19BRV9BNCB8IE1FU0hfRkxBR1NfQUVfQTVfQTYpOgogCQlyZXR1cm4gMjQ7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDY7CkBAIC0zMjQsMTAgKzMzMywxOCBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTKToKLQkJaWYgKGlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8CisJCWlmICgoaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkJICAgIGlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8fAogCQkgICAgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGRzdCkgJiYKIAkJICAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHNyYywgYWRkcikpKQogCQkJcmV0dXJuIC0xOworCQlpZiAoaWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKKwkJCXN0cnVjdCBpZWVlODAyMTFzX2hkciAqbWVzaGRyID0KKwkJCQkoc3RydWN0IGllZWU4MDIxMXNfaGRyICopIChza2ItPmRhdGEgKyBoZHJsZW4pOworCQkJaGRybGVuICs9IGllZWU4MDIxMV9nZXRfbWVzaF9oZHJsZW4obWVzaGRyKTsKKwkJCWlmIChtZXNoZHItPmZsYWdzICYgTUVTSF9GTEFHU19BRV9BNCkKKwkJCQltZW1jcHkoc3JjLCBtZXNoZHItPmVhZGRyMSwgRVRIX0FMRU4pOworCQl9CiAJCWJyZWFrOwogCWNhc2UgY3B1X3RvX2xlMTYoMCk6CiAJCWlmIChpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCkBAIC01MDIsMyArNTE5LDE2NiBAQAogCXJldHVybiBkc2NwID4+IDU7CiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQpOworCitjb25zdCB1OCAqaWVlZTgwMjExX2Jzc19nZXRfaWUoc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLCB1OCBpZSkKK3sKKwl1OCAqZW5kLCAqcG9zOworCisJcG9zID0gYnNzLT5pbmZvcm1hdGlvbl9lbGVtZW50czsKKwlpZiAocG9zID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWVuZCA9IHBvcyArIGJzcy0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOworCisJd2hpbGUgKHBvcyArIDEgPCBlbmQpIHsKKwkJaWYgKHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpCisJCQlicmVhazsKKwkJaWYgKHBvc1swXSA9PSBpZSkKKwkJCXJldHVybiBwb3M7CisJCXBvcyArPSAyICsgcG9zWzFdOworCX0KKworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYnNzX2dldF9pZSk7CisKK3ZvaWQgY2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtPm5ldGRldjsKKwlpbnQgaTsKKworCWlmICghd2Rldi0+Y29ubmVjdF9rZXlzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWlmICghd2Rldi0+Y29ubmVjdF9rZXlzLT5wYXJhbXNbaV0uY2lwaGVyKQorCQkJY29udGludWU7CisJCWlmIChyZGV2LT5vcHMtPmFkZF9rZXkod2Rldi0+d2lwaHksIGRldiwgaSwgTlVMTCwKKwkJCQkJJndkZXYtPmNvbm5lY3Rfa2V5cy0+cGFyYW1zW2ldKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHNldCBrZXkgJWRcbiIsCisJCQkJZGV2LT5uYW1lLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh3ZGV2LT5jb25uZWN0X2tleXMtPmRlZiA9PSBpKQorCQkJaWYgKHJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5KHdkZXYtPndpcGh5LCBkZXYsIGkpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHNldCBkZWZrZXkgJWRcbiIsCisJCQkJCWRldi0+bmFtZSwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCWlmICh3ZGV2LT5jb25uZWN0X2tleXMtPmRlZm1nbXQgPT0gaSkKKwkJCWlmIChyZGV2LT5vcHMtPnNldF9kZWZhdWx0X21nbXRfa2V5KHdkZXYtPndpcGh5LCBkZXYsIGkpKQorCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBzZXQgbWd0ZGVmICVkXG4iLAorCQkJCQlkZXYtPm5hbWUsIGkpOworCX0KKworCWtmcmVlKHdkZXYtPmNvbm5lY3Rfa2V5cyk7CisJd2Rldi0+Y29ubmVjdF9rZXlzID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQoreworCXN0cnVjdCBjZmc4MDIxMV9ldmVudCAqZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljb25zdCB1OCAqYnNzaWQgPSBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJndkZXYtPmV2ZW50X2xpc3QpKSB7CisJCWV2ID0gbGlzdF9maXJzdF9lbnRyeSgmd2Rldi0+ZXZlbnRfbGlzdCwKKwkJCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfZXZlbnQsIGxpc3QpOworCQlsaXN0X2RlbCgmZXYtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisKKwkJd2Rldl9sb2NrKHdkZXYpOworCQlzd2l0Y2ggKGV2LT50eXBlKSB7CisJCWNhc2UgRVZFTlRfQ09OTkVDVF9SRVNVTFQ6CisJCQlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihldi0+Y3IuYnNzaWQpKQorCQkJCWJzc2lkID0gZXYtPmNyLmJzc2lkOworCQkJX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdCgKKwkJCQl3ZGV2LT5uZXRkZXYsIGJzc2lkLAorCQkJCWV2LT5jci5yZXFfaWUsIGV2LT5jci5yZXFfaWVfbGVuLAorCQkJCWV2LT5jci5yZXNwX2llLCBldi0+Y3IucmVzcF9pZV9sZW4sCisJCQkJZXYtPmNyLnN0YXR1cywKKwkJCQlldi0+Y3Iuc3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MsCisJCQkJTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSBFVkVOVF9ST0FNRUQ6CisJCQlfX2NmZzgwMjExX3JvYW1lZCh3ZGV2LCBldi0+cm0uYnNzaWQsCisJCQkJCSAgZXYtPnJtLnJlcV9pZSwgZXYtPnJtLnJlcV9pZV9sZW4sCisJCQkJCSAgZXYtPnJtLnJlc3BfaWUsIGV2LT5ybS5yZXNwX2llX2xlbik7CisJCQlicmVhazsKKwkJY2FzZSBFVkVOVF9ESVNDT05ORUNURUQ6CisJCQlfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZCh3ZGV2LT5uZXRkZXYsCisJCQkJCQlldi0+ZGMuaWUsIGV2LT5kYy5pZV9sZW4sCisJCQkJCQlldi0+ZGMucmVhc29uLCB0cnVlKTsKKwkJCWJyZWFrOworCQljYXNlIEVWRU5UX0lCU1NfSk9JTkVEOgorCQkJX19jZmc4MDIxMV9pYnNzX2pvaW5lZCh3ZGV2LT5uZXRkZXYsIGV2LT5pai5ic3NpZCk7CisJCQlicmVhazsKKwkJfQorCQl3ZGV2X3VubG9jayh3ZGV2KTsKKworCQlrZnJlZShldik7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJndkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2Rldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIGNmZzgwMjExX3Byb2Nlc3NfcmRldl9ldmVudHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisKKwlBU1NFUlRfUlROTCgpOworCUFTU0VSVF9SREVWX0xPQ0socmRldik7CisKKwltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZyZGV2LT5uZXRkZXZfbGlzdCwgbGlzdCkKKwkJY2ZnODAyMTFfcHJvY2Vzc193ZGV2X2V2ZW50cyh3ZGV2KTsKKworCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworfQorCitpbnQgY2ZnODAyMTFfY2hhbmdlX2lmYWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSBubDgwMjExX2lmdHlwZSBudHlwZSwKKwkJCSAgdTMyICpmbGFncywgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKK3sKKwlpbnQgZXJyOworCWVudW0gbmw4MDIxMV9pZnR5cGUgb3R5cGUgPSBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZTsKKworCUFTU0VSVF9SREVWX0xPQ0socmRldik7CisKKwkvKiBkb24ndCBzdXBwb3J0IGNoYW5naW5nIFZMQU5zLCB5b3UganVzdCByZS1jcmVhdGUgdGhlbSAqLworCWlmIChvdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoIXJkZXYtPm9wcy0+Y2hhbmdlX3ZpcnR1YWxfaW50ZiB8fAorCSAgICAhKHJkZXYtPndpcGh5LmludGVyZmFjZV9tb2RlcyAmICgxIDw8IG50eXBlKSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChudHlwZSAhPSBvdHlwZSkgeworCQlzd2l0Y2ggKG90eXBlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCQljZmc4MDIxMV9sZWF2ZV9pYnNzKHJkZXYsIGRldiwgZmFsc2UpOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCWNmZzgwMjExX2Rpc2Nvbm5lY3QocmRldiwgZGV2LAorCQkJCQkgICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcsIHRydWUpOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJCS8qIG1lc2ggc2hvdWxkIGJlIGhhbmRsZWQ/ICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJY2ZnODAyMTFfcHJvY2Vzc19yZGV2X2V2ZW50cyhyZGV2KTsKKwl9CisKKwllcnIgPSByZGV2LT5vcHMtPmNoYW5nZV92aXJ0dWFsX2ludGYoJnJkZXYtPndpcGh5LCBkZXYsCisJCQkJCSAgICAgbnR5cGUsIGZsYWdzLCBwYXJhbXMpOworCisJV0FSTl9PTighZXJyICYmIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IG50eXBlKTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCmluZGV4IGQwMzBjNTMuLjQyOWRkMDYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCisrKyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgorI2luY2x1ZGUgIndleHQtY29tcGF0LmgiCiAjaW5jbHVkZSAiY29yZS5oIgogCiBpbnQgY2ZnODAyMTFfd2V4dF9naXduYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC02OSwxOCArNzAsOCBAQAogCWVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZTsKIAlpbnQgcmV0OwogCi0JaWYgKCF3ZGV2KQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKIAotCWlmICghcmRldi0+b3BzLT5jaGFuZ2VfdmlydHVhbF9pbnRmKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQkvKiBkb24ndCBzdXBwb3J0IGNoYW5naW5nIFZMQU5zLCB5b3UganVzdCByZS1jcmVhdGUgdGhlbSAqLwotCWlmICh3ZGV2LT5pZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJc3dpdGNoICgqbW9kZSkgewogCWNhc2UgSVdfTU9ERV9JTkZSQToKIAkJdHlwZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CkBAIC0xMDMsOSArOTQsOSBAQAogCiAJbWVtc2V0KCZ2aWZwYXJhbXMsIDAsIHNpemVvZih2aWZwYXJhbXMpKTsKIAotCXJldCA9IHJkZXYtPm9wcy0+Y2hhbmdlX3ZpcnR1YWxfaW50Zih3ZGV2LT53aXBoeSwgZGV2LT5pZmluZGV4LCB0eXBlLAotCQkJCQkgICAgIE5VTEwsICZ2aWZwYXJhbXMpOwotCVdBUk5fT04oIXJldCAmJiB3ZGV2LT5pZnR5cGUgIT0gdHlwZSk7CisJY2ZnODAyMTFfbG9ja19yZGV2KHJkZXYpOworCXJldCA9IGNmZzgwMjExX2NoYW5nZV9pZmFjZShyZGV2LCBkZXYsIHR5cGUsIE5VTEwsICZ2aWZwYXJhbXMpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE1NCw3ICsxNDUsNyBAQAogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CiAJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwotCWludCBjID0gMDsKKwlpbnQgaSwgYyA9IDA7CiAKIAlpZiAoIXdkZXYpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTE3Myw5ICsxNjQsNiBAQAogCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKIAlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OwogCi0JcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OwotCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7Ci0JcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CiAJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSA0OwogCiAJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CkBAIC0yMDQsMTEgKzE5MiwzMSBAQAogCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IHJhbmdlLT5tYXhfcXVhbC5ub2lzZSAvIDI7CiAJcmFuZ2UtPmF2Z19xdWFsLnVwZGF0ZWQgPSByYW5nZS0+bWF4X3F1YWwudXBkYXRlZDsKIAotCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8IElXX0VOQ19DQVBBX1dQQTIgfAotCQkJICBJV19FTkNfQ0FQQV9DSVBIRVJfVEtJUCB8IElXX0VOQ19DQVBBX0NJUEhFUl9DQ01QOworCWZvciAoaSA9IDA7IGkgPCB3ZGV2LT53aXBoeS0+bl9jaXBoZXJfc3VpdGVzOyBpKyspIHsKKwkJc3dpdGNoICh3ZGV2LT53aXBoeS0+Y2lwaGVyX3N1aXRlc1tpXSkgeworCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CisJCQlyYW5nZS0+ZW5jX2NhcGEgfD0gKElXX0VOQ19DQVBBX0NJUEhFUl9US0lQIHwKKwkJCQkJICAgIElXX0VOQ19DQVBBX1dQQSk7CisJCQlicmVhazsKKworCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJCQlyYW5nZS0+ZW5jX2NhcGEgfD0gKElXX0VOQ19DQVBBX0NJUEhFUl9DQ01QIHwKKwkJCQkJICAgIElXX0VOQ19DQVBBX1dQQTIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKKwkJCXJhbmdlLT5lbmNvZGluZ19zaXplW3JhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMrK10gPQorCQkJCVdMQU5fS0VZX0xFTl9XRVA0MDsKKwkJCWJyZWFrOworCisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgorCQkJcmFuZ2UtPmVuY29kaW5nX3NpemVbcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcysrXSA9CisJCQkJV0xBTl9LRVlfTEVOX1dFUDEwNDsKKwkJCWJyZWFrOworCQl9CisJfQogCiAJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQgKyspIHsKLQkJaW50IGk7CiAJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCiAJCXNiYW5kID0gd2Rldi0+d2lwaHktPmJhbmRzW2JhbmRdOwpAQCAtMjM2LDk3ICsyNDQsNDAgQEAKIAlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV0FQKTsKIAlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1NDQU4pOwogCi0JcmFuZ2UtPnNjYW5fY2FwYSB8PSBJV19TQ0FOX0NBUEFfRVNTSUQ7CisJaWYgKHdkZXYtPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA+IDApCisJCXJhbmdlLT5zY2FuX2NhcGEgfD0gSVdfU0NBTl9DQVBBX0VTU0lEOwogCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X2dpd3JhbmdlKTsKIAotaW50IGNmZzgwMjExX3dleHRfc2l3bWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7Ci0Jc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7Ci0JdW5pb24gewotCQlzdHJ1Y3QgY2ZnODAyMTFfZGlzYXNzb2NfcmVxdWVzdCBkaXNhc3NvYzsKLQkJc3RydWN0IGNmZzgwMjExX2RlYXV0aF9yZXF1ZXN0IGRlYXV0aDsKLQl9IGNtZDsKLQotCWlmICghd2RldikKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7Ci0KLQlpZiAod2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKG1sbWUtPmFkZHIuc2FfZmFtaWx5ICE9IEFSUEhSRF9FVEhFUikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwotCi0Jc3dpdGNoIChtbG1lLT5jbWQpIHsKLQljYXNlIElXX01MTUVfREVBVVRIOgotCQlpZiAoIXJkZXYtPm9wcy0+ZGVhdXRoKQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQljbWQuZGVhdXRoLnBlZXJfYWRkciA9IG1sbWUtPmFkZHIuc2FfZGF0YTsKLQkJY21kLmRlYXV0aC5yZWFzb25fY29kZSA9IG1sbWUtPnJlYXNvbl9jb2RlOwotCQlyZXR1cm4gcmRldi0+b3BzLT5kZWF1dGgod2Rldi0+d2lwaHksIGRldiwgJmNtZC5kZWF1dGgpOwotCWNhc2UgSVdfTUxNRV9ESVNBU1NPQzoKLQkJaWYgKCFyZGV2LT5vcHMtPmRpc2Fzc29jKQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQljbWQuZGlzYXNzb2MucGVlcl9hZGRyID0gbWxtZS0+YWRkci5zYV9kYXRhOwotCQljbWQuZGlzYXNzb2MucmVhc29uX2NvZGUgPSBtbG1lLT5yZWFzb25fY29kZTsKLQkJcmV0dXJuIHJkZXYtPm9wcy0+ZGlzYXNzb2Mod2Rldi0+d2lwaHksIGRldiwgJmNtZC5kaXNhc3NvYyk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfc2l3bWxtZSk7Ci0KIAogLyoqCiAgKiBjZmc4MDIxMV93ZXh0X2ZyZXEgLSBnZXQgd2V4dCBmcmVxdWVuY3kgZm9yIG5vbi0iYXV0byIKICAqIEB3aXBoeTogdGhlIHdpcGh5CiAgKiBAZnJlcTogdGhlIHdleHQgZnJlcSBlbmNvZGluZwogICoKLSAqIFJldHVybnMgYSBjaGFubmVsLCAlTlVMTCBmb3IgYXV0bywgb3IgYW4gRVJSX1BUUiBmb3IgZXJyb3JzIQorICogUmV0dXJucyBhIGZyZXF1ZW5jeSwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLCBvciAwIGZvciBhdXRvLgogICovCi1zdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNmZzgwMjExX3dleHRfZnJlcShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAotCQkJCQkgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxKQoraW50IGNmZzgwMjExX3dleHRfZnJlcShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47Ci0JaW50IGY7Ci0KIAkvKgotCSAqIFBhcnNlIGZyZXF1ZW5jeSAtIHJldHVybiBOVUxMIGZvciBhdXRvIGFuZAorCSAqIFBhcnNlIGZyZXF1ZW5jeSAtIHJldHVybiAwIGZvciBhdXRvIGFuZAogCSAqIC1FSU5WQUwgZm9yIGltcG9zc2libGUgdGhpbmdzLgogCSAqLwogCWlmIChmcmVxLT5lID09IDApIHsKIAkJaWYgKGZyZXEtPm0gPCAwKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWYgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZnJlcS0+bSk7CisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShmcmVxLT5tKTsKIAl9IGVsc2UgewogCQlpbnQgaSwgZGl2ID0gMTAwMDAwMDsKIAkJZm9yIChpID0gMDsgaSA8IGZyZXEtPmU7IGkrKykKIAkJCWRpdiAvPSAxMDsKIAkJaWYgKGRpdiA8PSAwKQotCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JCWYgPSBmcmVxLT5tIC8gZGl2OworCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBmcmVxLT5tIC8gZGl2OwogCX0KLQotCS8qCi0JICogTG9vayB1cCBjaGFubmVsIHN0cnVjdCBhbmQgcmV0dXJuIC1FSU5WQUwgd2hlbgotCSAqIGl0IGNhbm5vdCBiZSBmb3VuZC4KLQkgKi8KLQljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHdpcGh5LCBmKTsKLQlpZiAoIWNoYW4pCi0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCXJldHVybiBjaGFuOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9mcmVxKTsKIAogaW50IGNmZzgwMjExX3dleHRfc2l3cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKQEAgLTQ3OSwxNSArNDMwLDMyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X2dpd3JldHJ5KTsKIAotc3RhdGljIGludCBjZmc4MDIxMV9zZXRfZW5jcnlwdGlvbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCi0JCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsCi0JCQkJICAgYm9vbCByZW1vdmUsIGJvb2wgdHhfa2V5LCBpbnQgaWR4LAotCQkJCSAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCitzdGF0aWMgaW50IF9fY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsCisJCQkJICAgICBib29sIHJlbW92ZSwgYm9vbCB0eF9rZXksIGludCBpZHgsCisJCQkJICAgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBpOworCisJaWYgKCF3ZGV2LT53ZXh0LmtleXMpIHsKKwkJd2Rldi0+d2V4dC5rZXlzID0ga3phbGxvYyhzaXplb2YoKndkZXYtPndleHQua2V5cyksCisJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIXdkZXYtPndleHQua2V5cykKKwkJCXJldHVybiAtRU5PTUVNOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJd2Rldi0+d2V4dC5rZXlzLT5wYXJhbXNbaV0ua2V5ID0KKwkJCQl3ZGV2LT53ZXh0LmtleXMtPmRhdGFbaV07CisJfQorCisJaWYgKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgorCSAgICB3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKHBhcmFtcy0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDKSB7CisJCWlmICghd2Rldi0+Y3VycmVudF9ic3MpCisJCQlyZXR1cm4gLUVOT0xJTks7CisKIAkJaWYgKCFyZGV2LT5vcHMtPnNldF9kZWZhdWx0X21nbXRfa2V5KQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC00OTcsOCArNDY1LDE0IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHJlbW92ZSkgewotCQllcnIgPSByZGV2LT5vcHMtPmRlbF9rZXkoJnJkZXYtPndpcGh5LCBkZXYsIGlkeCwgYWRkcik7CisJCWVyciA9IDA7CisJCWlmICh3ZGV2LT5jdXJyZW50X2JzcykKKwkJCWVyciA9IHJkZXYtPm9wcy0+ZGVsX2tleSgmcmRldi0+d2lwaHksIGRldiwgaWR4LCBhZGRyKTsKIAkJaWYgKCFlcnIpIHsKKwkJCWlmICghYWRkcikgeworCQkJCXdkZXYtPndleHQua2V5cy0+cGFyYW1zW2lkeF0ua2V5X2xlbiA9IDA7CisJCQkJd2Rldi0+d2V4dC5rZXlzLT5wYXJhbXNbaWR4XS5jaXBoZXIgPSAwOworCQkJfQogCQkJaWYgKGlkeCA9PSB3ZGV2LT53ZXh0LmRlZmF1bHRfa2V5KQogCQkJCXdkZXYtPndleHQuZGVmYXVsdF9rZXkgPSAtMTsKIAkJCWVsc2UgaWYgKGlkeCA9PSB3ZGV2LT53ZXh0LmRlZmF1bHRfbWdtdF9rZXkpCkBAIC01MTIsMzYgKzQ4Niw2NSBAQAogCQkJcmV0dXJuIDA7CiAKIAkJcmV0dXJuIGVycjsKLQl9IGVsc2UgewotCQlpZiAoYWRkcikKLQkJCXR4X2tleSA9IGZhbHNlOworCX0KIAotCQlpZiAoY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHBhcmFtcywgaWR4LCBhZGRyKSkKLQkJCXJldHVybiAtRUlOVkFMOworCWlmIChhZGRyKQorCQl0eF9rZXkgPSBmYWxzZTsKIAorCWlmIChjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3MocmRldiwgcGFyYW1zLCBpZHgsIGFkZHIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IDA7CisJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKQogCQllcnIgPSByZGV2LT5vcHMtPmFkZF9rZXkoJnJkZXYtPndpcGh5LCBkZXYsIGlkeCwgYWRkciwgcGFyYW1zKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCQlpZiAodHhfa2V5IHx8ICghYWRkciAmJiB3ZGV2LT53ZXh0LmRlZmF1bHRfa2V5ID09IC0xKSkgeworCWlmICghYWRkcikgeworCQl3ZGV2LT53ZXh0LmtleXMtPnBhcmFtc1tpZHhdID0gKnBhcmFtczsKKwkJbWVtY3B5KHdkZXYtPndleHQua2V5cy0+ZGF0YVtpZHhdLAorCQkJcGFyYW1zLT5rZXksIHBhcmFtcy0+a2V5X2xlbik7CisJCXdkZXYtPndleHQua2V5cy0+cGFyYW1zW2lkeF0ua2V5ID0KKwkJCXdkZXYtPndleHQua2V5cy0+ZGF0YVtpZHhdOworCX0KKworCWlmICgocGFyYW1zLT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHwKKwkgICAgIHBhcmFtcy0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkgJiYKKwkgICAgKHR4X2tleSB8fCAoIWFkZHIgJiYgd2Rldi0+d2V4dC5kZWZhdWx0X2tleSA9PSAtMSkpKSB7CisJCWlmICh3ZGV2LT5jdXJyZW50X2JzcykKIAkJCWVyciA9IHJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5KCZyZGV2LT53aXBoeSwKIAkJCQkJCQkgZGV2LCBpZHgpOwotCQkJaWYgKCFlcnIpCi0JCQkJd2Rldi0+d2V4dC5kZWZhdWx0X2tleSA9IGlkeDsKLQkJCXJldHVybiBlcnI7Ci0JCX0KKwkJaWYgKCFlcnIpCisJCQl3ZGV2LT53ZXh0LmRlZmF1bHRfa2V5ID0gaWR4OworCQlyZXR1cm4gZXJyOworCX0KIAotCQlpZiAocGFyYW1zLT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMgJiYKLQkJICAgICh0eF9rZXkgfHwgKCFhZGRyICYmIHdkZXYtPndleHQuZGVmYXVsdF9tZ210X2tleSA9PSAtMSkpKSB7CisJaWYgKHBhcmFtcy0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDICYmCisJICAgICh0eF9rZXkgfHwgKCFhZGRyICYmIHdkZXYtPndleHQuZGVmYXVsdF9tZ210X2tleSA9PSAtMSkpKSB7CisJCWlmICh3ZGV2LT5jdXJyZW50X2JzcykKIAkJCWVyciA9IHJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfbWdtdF9rZXkoJnJkZXYtPndpcGh5LAogCQkJCQkJCSAgICAgIGRldiwgaWR4KTsKLQkJCWlmICghZXJyKQotCQkJCXdkZXYtPndleHQuZGVmYXVsdF9tZ210X2tleSA9IGlkeDsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQlyZXR1cm4gMDsKKwkJaWYgKCFlcnIpCisJCQl3ZGV2LT53ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSBpZHg7CisJCXJldHVybiBlcnI7CiAJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLAorCQkJCSAgIGJvb2wgcmVtb3ZlLCBib29sIHR4X2tleSwgaW50IGlkeCwKKwkJCQkgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQoreworCWludCBlcnI7CisKKwl3ZGV2X2xvY2soZGV2LT5pZWVlODAyMTFfcHRyKTsKKwllcnIgPSBfX2NmZzgwMjExX3NldF9lbmNyeXB0aW9uKHJkZXYsIGRldiwgYWRkciwgcmVtb3ZlLAorCQkJCQl0eF9rZXksIGlkeCwgcGFyYW1zKTsKKwl3ZGV2X3VubG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOworCisJcmV0dXJuIGVycjsKIH0KIAogaW50IGNmZzgwMjExX3dleHRfc2l3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC01NTQsNiArNTU3LDEwIEBACiAJYm9vbCByZW1vdmUgPSBmYWxzZTsKIAlzdHJ1Y3Qga2V5X3BhcmFtcyBwYXJhbXM7CiAKKwlpZiAod2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgd2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAkvKiBubyB1c2UgLS0gb25seSBNRlAgKHNldF9kZWZhdWx0X21nbXRfa2V5KSBpcyBvcHRpb25hbCAqLwogCWlmICghcmRldi0+b3BzLT5kZWxfa2V5IHx8CiAJICAgICFyZGV2LT5vcHMtPmFkZF9rZXkgfHwKQEAgLTU3NCw5ICs1ODEsMTQgQEAKIAkJcmVtb3ZlID0gdHJ1ZTsKIAllbHNlIGlmIChlcnEtPmxlbmd0aCA9PSAwKSB7CiAJCS8qIE5vIGtleSBkYXRhIC0ganVzdCBzZXQgdGhlIGRlZmF1bHQgVFgga2V5IGluZGV4ICovCi0JCWVyciA9IHJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5KCZyZGV2LT53aXBoeSwgZGV2LCBpZHgpOworCQllcnIgPSAwOworCQl3ZGV2X2xvY2sod2Rldik7CisJCWlmICh3ZGV2LT5jdXJyZW50X2JzcykKKwkJCWVyciA9IHJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5KCZyZGV2LT53aXBoeSwKKwkJCQkJCQkgZGV2LCBpZHgpOwogCQlpZiAoIWVycikKIAkJCXdkZXYtPndleHQuZGVmYXVsdF9rZXkgPSBpZHg7CisJCXdkZXZfdW5sb2NrKHdkZXYpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNjA5LDYgKzYyMSwxMCBAQAogCXN0cnVjdCBrZXlfcGFyYW1zIHBhcmFtczsKIAl1MzIgY2lwaGVyOwogCisJaWYgKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgIHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJLyogbm8gdXNlIC0tIG9ubHkgTUZQIChzZXRfZGVmYXVsdF9tZ210X2tleSkgaXMgb3B0aW9uYWwgKi8KIAlpZiAoIXJkZXYtPm9wcy0+ZGVsX2tleSB8fAogCSAgICAhcmRldi0+b3BzLT5hZGRfa2V5IHx8CkBAIC02ODIsMzcgKzY5OCwxNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9zaXdlbmNvZGVleHQpOwogCi1zdHJ1Y3QgZ2l3ZW5jb2RlX2Nvb2tpZSB7Ci0Jc2l6ZV90IGJ1ZmxlbjsKLQljaGFyICprZXlidWY7Ci19OwotCi1zdGF0aWMgdm9pZCBnaXdlbmNvZGVfZ2V0X2tleV9jYih2b2lkICpjb29raWUsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IGdpd2VuY29kZV9jb29raWUgKmRhdGEgPSBjb29raWU7Ci0KLQlpZiAoIXBhcmFtcy0+a2V5KSB7Ci0JCWRhdGEtPmJ1ZmxlbiA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQlkYXRhLT5idWZsZW4gPSBtaW5fdChzaXplX3QsIGRhdGEtPmJ1ZmxlbiwgcGFyYW1zLT5rZXlfbGVuKTsKLQltZW1jcHkoZGF0YS0+a2V5YnVmLCBwYXJhbXMtPmtleSwgZGF0YS0+YnVmbGVuKTsKLX0KLQogaW50IGNmZzgwMjExX3dleHRfZ2l3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5YnVmKQogewogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKLQlpbnQgaWR4LCBlcnI7Ci0Jc3RydWN0IGdpd2VuY29kZV9jb29raWUgZGF0YSA9IHsKLQkJLmtleWJ1ZiA9IGtleWJ1ZiwKLQkJLmJ1ZmxlbiA9IGVycS0+bGVuZ3RoLAotCX07CisJaW50IGlkeDsKIAotCWlmICghcmRldi0+b3BzLT5nZXRfa2V5KQorCWlmICh3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICB3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlkeCA9IGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CkBAIC03MjcsMjQgKzcyMSw3MCBAQAogCiAJZXJxLT5mbGFncyA9IGlkeCArIDE7CiAKLQllcnIgPSByZGV2LT5vcHMtPmdldF9rZXkoJnJkZXYtPndpcGh5LCBkZXYsIGlkeCwgTlVMTCwgJmRhdGEsCi0JCQkJIGdpd2VuY29kZV9nZXRfa2V5X2NiKTsKLQlpZiAoIWVycikgewotCQllcnEtPmxlbmd0aCA9IGRhdGEuYnVmbGVuOwotCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoZXJyID09IC1FTk9FTlQpIHsKKwlpZiAoIXdkZXYtPndleHQua2V5cyB8fCAhd2Rldi0+d2V4dC5rZXlzLT5wYXJhbXNbaWR4XS5jaXBoZXIpIHsKIAkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRElTQUJMRUQ7CiAJCWVycS0+bGVuZ3RoID0gMDsKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIGVycjsKKwllcnEtPmxlbmd0aCA9IG1pbl90KHNpemVfdCwgZXJxLT5sZW5ndGgsCisJCQkgICAgd2Rldi0+d2V4dC5rZXlzLT5wYXJhbXNbaWR4XS5rZXlfbGVuKTsKKwltZW1jcHkoa2V5YnVmLCB3ZGV2LT53ZXh0LmtleXMtPnBhcmFtc1tpZHhdLmtleSwgZXJxLT5sZW5ndGgpOworCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfZ2l3ZW5jb2RlKTsKIAoraW50IGNmZzgwMjExX3dleHRfc2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfZnJlcSAqd2V4dGZyZXEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlpbnQgZnJlcSwgZXJyOworCisJc3dpdGNoICh3ZGV2LT5pZnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXJldHVybiBjZmc4MDIxMV9tZ2Rfd2V4dF9zaXdmcmVxKGRldiwgaW5mbywgd2V4dGZyZXEsIGV4dHJhKTsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlyZXR1cm4gY2ZnODAyMTFfaWJzc193ZXh0X3Npd2ZyZXEoZGV2LCBpbmZvLCB3ZXh0ZnJlcSwgZXh0cmEpOworCWRlZmF1bHQ6CisJCWZyZXEgPSBjZmc4MDIxMV93ZXh0X2ZyZXEod2Rldi0+d2lwaHksIHdleHRmcmVxKTsKKwkJaWYgKGZyZXEgPCAwKQorCQkJcmV0dXJuIGZyZXE7CisJCWlmIChmcmVxID09IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCQllcnIgPSByZGV2X3NldF9mcmVxKHJkZXYsIE5VTEwsIGZyZXEsIE5MODAyMTFfQ0hBTl9OT19IVCk7CisJCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCQlyZXR1cm4gZXJyOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfc2l3ZnJlcSk7CisKK2ludCBjZmc4MDIxMV93ZXh0X2dpd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKworCXN3aXRjaCAod2Rldi0+aWZ0eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlyZXR1cm4gY2ZnODAyMTFfbWdkX3dleHRfZ2l3ZnJlcShkZXYsIGluZm8sIGZyZXEsIGV4dHJhKTsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlyZXR1cm4gY2ZnODAyMTFfaWJzc193ZXh0X2dpd2ZyZXEoZGV2LCBpbmZvLCBmcmVxLCBleHRyYSk7CisJZGVmYXVsdDoKKwkJaWYgKCFyZGV2LT5jaGFubmVsKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWZyZXEtPm0gPSByZGV2LT5jaGFubmVsLT5jZW50ZXJfZnJlcTsKKwkJZnJlcS0+ZSA9IDY7CisJCXJldHVybiAwOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfZ2l3ZnJlcSk7CisKIGludCBjZmc4MDIxMV93ZXh0X3Npd3R4cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwgY2hhciAqZXh0cmEpCkBAIC04MjcsMyArODY3LDU0NyBAQAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9naXd0eHBvd2VyKTsKKworc3RhdGljIGludCBjZmc4MDIxMV9zZXRfYXV0aF9hbGcoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKKwkJCQkgczMyIGF1dGhfYWxnKQoreworCWludCBucl9hbGcgPSAwOworCisJaWYgKCFhdXRoX2FsZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXV0aF9hbGcgJiB+KElXX0FVVEhfQUxHX09QRU5fU1lTVEVNIHwKKwkJCSBJV19BVVRIX0FMR19TSEFSRURfS0VZIHwKKwkJCSBJV19BVVRIX0FMR19MRUFQKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXV0aF9hbGcgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkgeworCQlucl9hbGcrKzsKKwkJd2Rldi0+d2V4dC5jb25uZWN0LmF1dGhfdHlwZSA9IE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU07CisJfQorCisJaWYgKGF1dGhfYWxnICYgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSkgeworCQlucl9hbGcrKzsKKwkJd2Rldi0+d2V4dC5jb25uZWN0LmF1dGhfdHlwZSA9IE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWTsKKwl9CisKKwlpZiAoYXV0aF9hbGcgJiBJV19BVVRIX0FMR19MRUFQKSB7CisJCW5yX2FsZysrOworCQl3ZGV2LT53ZXh0LmNvbm5lY3QuYXV0aF90eXBlID0gTkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUDsKKwl9CisKKwlpZiAobnJfYWxnID4gMSkKKwkJd2Rldi0+d2V4dC5jb25uZWN0LmF1dGhfdHlwZSA9IE5MODAyMTFfQVVUSFRZUEVfQVVUT01BVElDOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X3dwYV92ZXJzaW9uKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHUzMiB3cGFfdmVyc2lvbnMpCit7CisJd2Rldi0+d2V4dC5jb25uZWN0LmNyeXB0by53cGFfdmVyc2lvbnMgPSAwOworCisJaWYgKHdwYV92ZXJzaW9ucyAmIH4oSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEgfAorCQkJICAgICBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQTJ8CisJCSAgICAgICAgICAgICBJV19BVVRIX1dQQV9WRVJTSU9OX0RJU0FCTEVEKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKHdwYV92ZXJzaW9ucyAmIElXX0FVVEhfV1BBX1ZFUlNJT05fRElTQUJMRUQpICYmCisJICAgICh3cGFfdmVyc2lvbnMgJiAoSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEF8CisJCQkgICAgIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMikpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3cGFfdmVyc2lvbnMgJiBJV19BVVRIX1dQQV9WRVJTSU9OX0RJU0FCTEVEKQorCQl3ZGV2LT53ZXh0LmNvbm5lY3QuY3J5cHRvLndwYV92ZXJzaW9ucyAmPQorCQkJfihOTDgwMjExX1dQQV9WRVJTSU9OXzF8Tkw4MDIxMV9XUEFfVkVSU0lPTl8yKTsKKworCWlmICh3cGFfdmVyc2lvbnMgJiBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQSkKKwkJd2Rldi0+d2V4dC5jb25uZWN0LmNyeXB0by53cGFfdmVyc2lvbnMgfD0KKwkJCU5MODAyMTFfV1BBX1ZFUlNJT05fMTsKKworCWlmICh3cGFfdmVyc2lvbnMgJiBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQTIpCisJCXdkZXYtPndleHQuY29ubmVjdC5jcnlwdG8ud3BhX3ZlcnNpb25zIHw9CisJCQlOTDgwMjExX1dQQV9WRVJTSU9OXzI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZmc4MDIxMV9zZXRfY2lwaGVyX2dyb3VwKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHUzMiBjaXBoZXIpCit7CisJd2Rldi0+d2V4dC5jb25uZWN0LmNyeXB0by5jaXBoZXJfZ3JvdXAgPSAwOworCisJaWYgKGNpcGhlciAmIElXX0FVVEhfQ0lQSEVSX1dFUDQwKQorCQl3ZGV2LT53ZXh0LmNvbm5lY3QuY3J5cHRvLmNpcGhlcl9ncm91cCA9CisJCQlXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDsKKwllbHNlIGlmIChjaXBoZXIgJiBJV19BVVRIX0NJUEhFUl9XRVAxMDQpCisJCXdkZXYtPndleHQuY29ubmVjdC5jcnlwdG8uY2lwaGVyX2dyb3VwID0KKwkJCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDsKKwllbHNlIGlmIChjaXBoZXIgJiBJV19BVVRIX0NJUEhFUl9US0lQKQorCQl3ZGV2LT53ZXh0LmNvbm5lY3QuY3J5cHRvLmNpcGhlcl9ncm91cCA9CisJCQlXTEFOX0NJUEhFUl9TVUlURV9US0lQOworCWVsc2UgaWYgKGNpcGhlciAmIElXX0FVVEhfQ0lQSEVSX0NDTVApCisJCXdkZXYtPndleHQuY29ubmVjdC5jcnlwdG8uY2lwaGVyX2dyb3VwID0KKwkJCVdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA7CisJZWxzZSBpZiAoY2lwaGVyICYgSVdfQVVUSF9DSVBIRVJfQUVTX0NNQUMpCisJCXdkZXYtPndleHQuY29ubmVjdC5jcnlwdG8uY2lwaGVyX2dyb3VwID0KKwkJCVdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZmc4MDIxMV9zZXRfY2lwaGVyX3BhaXJ3aXNlKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHUzMiBjaXBoZXIpCit7CisJaW50IG5yX2NpcGhlcnMgPSAwOworCXUzMiAqY2lwaGVyc19wYWlyd2lzZSA9IHdkZXYtPndleHQuY29ubmVjdC5jcnlwdG8uY2lwaGVyc19wYWlyd2lzZTsKKworCWlmIChjaXBoZXIgJiBJV19BVVRIX0NJUEhFUl9XRVA0MCkgeworCQljaXBoZXJzX3BhaXJ3aXNlW25yX2NpcGhlcnNdID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA7CisJCW5yX2NpcGhlcnMrKzsKKwl9CisKKwlpZiAoY2lwaGVyICYgSVdfQVVUSF9DSVBIRVJfV0VQMTA0KSB7CisJCWNpcGhlcnNfcGFpcndpc2VbbnJfY2lwaGVyc10gPSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CisJCW5yX2NpcGhlcnMrKzsKKwl9CisKKwlpZiAoY2lwaGVyICYgSVdfQVVUSF9DSVBIRVJfVEtJUCkgeworCQljaXBoZXJzX3BhaXJ3aXNlW25yX2NpcGhlcnNdID0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDsKKwkJbnJfY2lwaGVycysrOworCX0KKworCWlmIChjaXBoZXIgJiBJV19BVVRIX0NJUEhFUl9DQ01QKSB7CisJCWNpcGhlcnNfcGFpcndpc2VbbnJfY2lwaGVyc10gPSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOworCQlucl9jaXBoZXJzKys7CisJfQorCisJaWYgKGNpcGhlciAmIElXX0FVVEhfQ0lQSEVSX0FFU19DTUFDKSB7CisJCWNpcGhlcnNfcGFpcndpc2VbbnJfY2lwaGVyc10gPSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzsKKwkJbnJfY2lwaGVycysrOworCX0KKworCUJVSUxEX0JVR19PTihOTDgwMjExX01BWF9OUl9DSVBIRVJfU1VJVEVTIDwgNSk7CisKKwl3ZGV2LT53ZXh0LmNvbm5lY3QuY3J5cHRvLm5fY2lwaGVyc19wYWlyd2lzZSA9IG5yX2NpcGhlcnM7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGNmZzgwMjExX3NldF9rZXlfbWd0KHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHUzMiBrZXlfbWd0KQoreworCWludCBucl9ha21fc3VpdGVzID0gMDsKKworCWlmIChrZXlfbWd0ICYgfihJV19BVVRIX0tFWV9NR01UXzgwMl8xWCB8CisJCQlJV19BVVRIX0tFWV9NR01UX1BTSykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGtleV9tZ3QgJiBJV19BVVRIX0tFWV9NR01UXzgwMl8xWCkgeworCQl3ZGV2LT53ZXh0LmNvbm5lY3QuY3J5cHRvLmFrbV9zdWl0ZXNbbnJfYWttX3N1aXRlc10gPQorCQkJV0xBTl9BS01fU1VJVEVfODAyMVg7CisJCW5yX2FrbV9zdWl0ZXMrKzsKKwl9CisKKwlpZiAoa2V5X21ndCAmIElXX0FVVEhfS0VZX01HTVRfUFNLKSB7CisJCXdkZXYtPndleHQuY29ubmVjdC5jcnlwdG8uYWttX3N1aXRlc1tucl9ha21fc3VpdGVzXSA9CisJCQlXTEFOX0FLTV9TVUlURV9QU0s7CisJCW5yX2FrbV9zdWl0ZXMrKzsKKwl9CisKKwl3ZGV2LT53ZXh0LmNvbm5lY3QuY3J5cHRvLm5fYWttX3N1aXRlcyA9IG5yX2FrbV9zdWl0ZXM7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNmZzgwMjExX3dleHRfc2l3YXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisKKwlpZiAod2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisJY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKKwkJd2Rldi0+d2V4dC5jb25uZWN0LnByaXZhY3kgPSBkYXRhLT52YWx1ZTsKKwkJcmV0dXJuIDA7CisJY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgorCQlyZXR1cm4gY2ZnODAyMTFfc2V0X3dwYV92ZXJzaW9uKHdkZXYsIGRhdGEtPnZhbHVlKTsKKwljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgorCQlyZXR1cm4gY2ZnODAyMTFfc2V0X2NpcGhlcl9ncm91cCh3ZGV2LCBkYXRhLT52YWx1ZSk7CisJY2FzZSBJV19BVVRIX0tFWV9NR01UOgorCQlyZXR1cm4gY2ZnODAyMTFfc2V0X2tleV9tZ3Qod2RldiwgZGF0YS0+dmFsdWUpOworCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CisJCXJldHVybiBjZmc4MDIxMV9zZXRfY2lwaGVyX3BhaXJ3aXNlKHdkZXYsIGRhdGEtPnZhbHVlKTsKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCXJldHVybiBjZmc4MDIxMV9zZXRfYXV0aF9hbGcod2RldiwgZGF0YS0+dmFsdWUpOworCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKKwljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6CisJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6CisJY2FzZSBJV19BVVRIX01GUDoKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfc2l3YXV0aCk7CisKK2ludCBjZmc4MDIxMV93ZXh0X2dpd2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IGl3X3BhcmFtICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwkvKiBYWFg6IHdoYXQgZG8gd2UgbmVlZD8gKi8KKworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfZ2l3YXV0aCk7CisKK2ludCBjZmc4MDIxMV93ZXh0X3Npd3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgc3RydWN0IGl3X3BhcmFtICp3cnEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlib29sIHBzID0gd2Rldi0+d2V4dC5wczsKKwlpbnQgdGltZW91dCA9IHdkZXYtPndleHQucHNfdGltZW91dDsKKwlpbnQgZXJyOworCisJaWYgKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghcmRldi0+b3BzLT5zZXRfcG93ZXJfbWdtdCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKHdycS0+ZGlzYWJsZWQpIHsKKwkJcHMgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKHdycS0+ZmxhZ3MgJiBJV19QT1dFUl9NT0RFKSB7CisJCWNhc2UgSVdfUE9XRVJfT046ICAgICAgIC8qIElmIG5vdCBzcGVjaWZpZWQgKi8KKwkJY2FzZSBJV19QT1dFUl9NT0RFOiAgICAgLyogSWYgc2V0IGFsbCBtYXNrICovCisJCWNhc2UgSVdfUE9XRVJfQUxMX1I6ICAgIC8qIElmIGV4cGxpY2l0ZWx5IHN0YXRlIGFsbCAqLworCQkJcHMgPSB0cnVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6ICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSB3ZSBpZ25vcmUgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHdycS0+ZmxhZ3MgJiB+KElXX1BPV0VSX01PREUgfCBJV19QT1dFUl9USU1FT1VUKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICh3cnEtPmZsYWdzICYgSVdfUE9XRVJfVElNRU9VVCkKKwkJCXRpbWVvdXQgPSB3cnEtPnZhbHVlIC8gMTAwMDsKKwl9CisKKwllcnIgPSByZGV2LT5vcHMtPnNldF9wb3dlcl9tZ210KHdkZXYtPndpcGh5LCBkZXYsIHBzLCB0aW1lb3V0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJd2Rldi0+d2V4dC5wcyA9IHBzOworCXdkZXYtPndleHQucHNfdGltZW91dCA9IHRpbWVvdXQ7CisKKwlyZXR1cm4gMDsKKworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9zaXdwb3dlcik7CisKK2ludCBjZmc4MDIxMV93ZXh0X2dpd3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgc3RydWN0IGl3X3BhcmFtICp3cnEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisKKwl3cnEtPmRpc2FibGVkID0gIXdkZXYtPndleHQucHM7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfZ2l3cG93ZXIpOworCitzdGF0aWMgaW50IGNmZzgwMjExX3dkc193ZXh0X3Npd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlpbnQgZXJyOworCisJaWYgKFdBUk5fT04od2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1dEUykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFkZHItPnNhX2ZhbWlseSAhPSBBUlBIUkRfRVRIRVIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICghcmRldi0+b3BzLT5zZXRfd2RzX3BlZXIpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWVyciA9IHJkZXYtPm9wcy0+c2V0X3dkc19wZWVyKHdkZXYtPndpcGh5LCBkZXYsICh1OCAqKSAmYWRkci0+c2FfZGF0YSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW1lbWNweSgmd2Rldi0+d2V4dC5ic3NpZCwgKHU4ICopICZhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZmc4MDIxMV93ZHNfd2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgc3RydWN0IHNvY2thZGRyICphZGRyLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCisJaWYgKFdBUk5fT04od2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1dEUykpCisJCXJldHVybiAtRUlOVkFMOworCisJYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCW1lbWNweSgmYWRkci0+c2FfZGF0YSwgd2Rldi0+d2V4dC5ic3NpZCwgRVRIX0FMRU4pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjZmc4MDIxMV93ZXh0X3Npd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IGl3X3BhcmFtICpyYXRlLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisJc3RydWN0IGNmZzgwMjExX2JpdHJhdGVfbWFzayBtYXNrOworCisJaWYgKCFyZGV2LT5vcHMtPnNldF9iaXRyYXRlX21hc2spCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCW1hc2suZml4ZWQgPSAwOworCW1hc2subWF4cmF0ZSA9IDA7CisKKwlpZiAocmF0ZS0+dmFsdWUgPCAwKSB7CisJCS8qIG5vdGhpbmcgKi8KKwl9IGVsc2UgaWYgKHJhdGUtPmZpeGVkKSB7CisJCW1hc2suZml4ZWQgPSByYXRlLT52YWx1ZSAvIDEwMDA7IC8qIGticHMgKi8KKwl9IGVsc2UgeworCQltYXNrLm1heHJhdGUgPSByYXRlLT52YWx1ZSAvIDEwMDA7IC8qIGticHMgKi8KKwl9CisKKwlyZXR1cm4gcmRldi0+b3BzLT5zZXRfYml0cmF0ZV9tYXNrKHdkZXYtPndpcGh5LCBkZXYsIE5VTEwsICZtYXNrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfc2l3cmF0ZSk7CisKK2ludCBjZmc4MDIxMV93ZXh0X2dpd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IGl3X3BhcmFtICpyYXRlLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisJLyogd2UgYXJlIHVuZGVyIFJUTkwgLSBnbG9iYWxseSBsb2NrZWQgLSBzbyBjYW4gdXNlIGEgc3RhdGljIHN0cnVjdCAqLworCXN0YXRpYyBzdHJ1Y3Qgc3RhdGlvbl9pbmZvIHNpbmZvOworCXU4IGFkZHJbRVRIX0FMRU5dOworCWludCBlcnI7CisKKwlpZiAod2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICghcmRldi0+b3BzLT5nZXRfc3RhdGlvbikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZXJyID0gMDsKKwl3ZGV2X2xvY2sod2Rldik7CisJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKQorCQltZW1jcHkoYWRkciwgd2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5ic3NpZCwgRVRIX0FMRU4pOworCWVsc2UKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJd2Rldl91bmxvY2sod2Rldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHJkZXYtPm9wcy0+Z2V0X3N0YXRpb24oJnJkZXYtPndpcGh5LCBkZXYsIGFkZHIsICZzaW5mbyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICghKHNpbmZvLmZpbGxlZCAmIFNUQVRJT05fSU5GT19UWF9CSVRSQVRFKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmF0ZS0+dmFsdWUgPSAwOworCisJaWYgKCEoc2luZm8udHhyYXRlLmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTX01DUykpCisJCXJhdGUtPnZhbHVlID0gMTAwMDAwICogc2luZm8udHhyYXRlLmxlZ2FjeTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9naXdyYXRlKTsKKworLyogR2V0IHdpcmVsZXNzIHN0YXRpc3RpY3MuICBDYWxsZWQgYnkgL3Byb2MvbmV0L3dpcmVsZXNzIGFuZCBieSBTSU9DR0lXU1RBVFMgKi8KK3N0cnVjdCBpd19zdGF0aXN0aWNzICpjZmc4MDIxMV93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwkvKiB3ZSBhcmUgdW5kZXIgUlROTCAtIGdsb2JhbGx5IGxvY2tlZCAtIHNvIGNhbiB1c2Ugc3RhdGljIHN0cnVjdHMgKi8KKwlzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3Mgd3N0YXRzOworCXN0YXRpYyBzdHJ1Y3Qgc3RhdGlvbl9pbmZvIHNpbmZvOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghcmRldi0+b3BzLT5nZXRfc3RhdGlvbikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBHcmFiIEJTU0lEIG9mIGN1cnJlbnQgQlNTLCBpZiBhbnkgKi8KKwl3ZGV2X2xvY2sod2Rldik7CisJaWYgKCF3ZGV2LT5jdXJyZW50X2JzcykgeworCQl3ZGV2X3VubG9jayh3ZGV2KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW1lbWNweShic3NpZCwgd2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5ic3NpZCwgRVRIX0FMRU4pOworCXdkZXZfdW5sb2NrKHdkZXYpOworCisJaWYgKHJkZXYtPm9wcy0+Z2V0X3N0YXRpb24oJnJkZXYtPndpcGh5LCBkZXYsIGJzc2lkLCAmc2luZm8pKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldCgmd3N0YXRzLCAwLCBzaXplb2Yod3N0YXRzKSk7CisKKwlzd2l0Y2ggKHJkZXYtPndpcGh5LnNpZ25hbF90eXBlKSB7CisJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06CisJCWlmIChzaW5mby5maWxsZWQgJiBTVEFUSU9OX0lORk9fU0lHTkFMKSB7CisJCQlpbnQgc2lnID0gc2luZm8uc2lnbmFsOworCQkJd3N0YXRzLnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX1VQREFURUQ7CisJCQl3c3RhdHMucXVhbC51cGRhdGVkIHw9IElXX1FVQUxfUVVBTF9VUERBVEVEOworCQkJd3N0YXRzLnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0RCTTsKKwkJCXdzdGF0cy5xdWFsLmxldmVsID0gc2lnOworCQkJaWYgKHNpZyA8IC0xMTApCisJCQkJc2lnID0gLTExMDsKKwkJCWVsc2UgaWYgKHNpZyA+IC00MCkKKwkJCQlzaWcgPSAtNDA7CisJCQl3c3RhdHMucXVhbC5xdWFsID0gc2lnICsgMTEwOworCQkJYnJlYWs7CisJCX0KKwljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQzoKKwkJaWYgKHNpbmZvLmZpbGxlZCAmIFNUQVRJT05fSU5GT19TSUdOQUwpIHsKKwkJCXdzdGF0cy5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOworCQkJd3N0YXRzLnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfVVBEQVRFRDsKKwkJCXdzdGF0cy5xdWFsLmxldmVsID0gc2luZm8uc2lnbmFsOworCQkJd3N0YXRzLnF1YWwucXVhbCA9IHNpbmZvLnNpZ25hbDsKKwkJCWJyZWFrOworCQl9CisJZGVmYXVsdDoKKwkJd3N0YXRzLnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7CisJCXdzdGF0cy5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX0lOVkFMSUQ7CisJfQorCisJd3N0YXRzLnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CisKKwlyZXR1cm4gJndzdGF0czsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dpcmVsZXNzX3N0YXRzKTsKKworaW50IGNmZzgwMjExX3dleHRfc2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisKKwlzd2l0Y2ggKHdkZXYtPmlmdHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfc2l3YXAoZGV2LCBpbmZvLCBhcF9hZGRyLCBleHRyYSk7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlyZXR1cm4gY2ZnODAyMTFfbWdkX3dleHRfc2l3YXAoZGV2LCBpbmZvLCBhcF9hZGRyLCBleHRyYSk7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6CisJCXJldHVybiBjZmc4MDIxMV93ZHNfd2V4dF9zaXdhcChkZXYsIGluZm8sIGFwX2FkZHIsIGV4dHJhKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9zaXdhcCk7CisKK2ludCBjZmc4MDIxMV93ZXh0X2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJc3RydWN0IHNvY2thZGRyICphcF9hZGRyLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCisJc3dpdGNoICh3ZGV2LT5pZnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlyZXR1cm4gY2ZnODAyMTFfaWJzc193ZXh0X2dpd2FwKGRldiwgaW5mbywgYXBfYWRkciwgZXh0cmEpOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJcmV0dXJuIGNmZzgwMjExX21nZF93ZXh0X2dpd2FwKGRldiwgaW5mbywgYXBfYWRkciwgZXh0cmEpOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfV0RTOgorCQlyZXR1cm4gY2ZnODAyMTFfd2RzX3dleHRfZ2l3YXAoZGV2LCBpbmZvLCBhcF9hZGRyLCBleHRyYSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfZ2l3YXApOworCitpbnQgY2ZnODAyMTFfd2V4dF9zaXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCisJc3dpdGNoICh3ZGV2LT5pZnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlyZXR1cm4gY2ZnODAyMTFfaWJzc193ZXh0X3Npd2Vzc2lkKGRldiwgaW5mbywgZGF0YSwgc3NpZCk7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlyZXR1cm4gY2ZnODAyMTFfbWdkX3dleHRfc2l3ZXNzaWQoZGV2LCBpbmZvLCBkYXRhLCBzc2lkKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9zaXdlc3NpZCk7CisKK2ludCBjZmc4MDIxMV93ZXh0X2dpd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpzc2lkKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisKKwlzd2l0Y2ggKHdkZXYtPmlmdHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfZ2l3ZXNzaWQoZGV2LCBpbmZvLCBkYXRhLCBzc2lkKTsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXJldHVybiBjZmc4MDIxMV9tZ2Rfd2V4dF9naXdlc3NpZChkZXYsIGluZm8sIGRhdGEsIHNzaWQpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X2dpd2Vzc2lkKTsKKworc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgY2ZnODAyMTFfaGFuZGxlcnNbXSA9IHsKKwlbSVdfSU9DVExfSURYKFNJT0NHSVdOQU1FKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXduYW1lLAorCVtJV19JT0NUTF9JRFgoU0lPQ1NJV0ZSRVEpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd2ZyZXEsCisJW0lXX0lPQ1RMX0lEWChTSU9DR0lXRlJFUSldCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3ZnJlcSwKKwlbSVdfSU9DVExfSURYKFNJT0NTSVdNT0RFKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdtb2RlLAorCVtJV19JT0NUTF9JRFgoU0lPQ0dJV01PREUpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd21vZGUsCisJW0lXX0lPQ1RMX0lEWChTSU9DR0lXUkFOR0UpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3JhbmdlLAorCVtJV19JT0NUTF9JRFgoU0lPQ1NJV0FQKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdhcCwKKwlbSVdfSU9DVExfSURYKFNJT0NHSVdBUCldCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3YXAsCisJW0lXX0lPQ1RMX0lEWChTSU9DU0lXTUxNRSldCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3bWxtZSwKKwlbSVdfSU9DVExfSURYKFNJT0NTSVdTQ0FOKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdzY2FuLAorCVtJV19JT0NUTF9JRFgoU0lPQ0dJV1NDQU4pXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3NjYW4sCisJW0lXX0lPQ1RMX0lEWChTSU9DU0lXRVNTSUQpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd2Vzc2lkLAorCVtJV19JT0NUTF9JRFgoU0lPQ0dJV0VTU0lEKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdlc3NpZCwKKwlbSVdfSU9DVExfSURYKFNJT0NTSVdSQVRFKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdyYXRlLAorCVtJV19JT0NUTF9JRFgoU0lPQ0dJV1JBVEUpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3JhdGUsCisJW0lXX0lPQ1RMX0lEWChTSU9DU0lXUlRTKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdydHMsCisJW0lXX0lPQ1RMX0lEWChTSU9DR0lXUlRTKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdydHMsCisJW0lXX0lPQ1RMX0lEWChTSU9DU0lXRlJBRyldCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3ZnJhZywKKwlbSVdfSU9DVExfSURYKFNJT0NHSVdGUkFHKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdmcmFnLAorCVtJV19JT0NUTF9JRFgoU0lPQ1NJV1RYUE9XKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXd0eHBvd2VyLAorCVtJV19JT0NUTF9JRFgoU0lPQ0dJV1RYUE9XKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXd0eHBvd2VyLAorCVtJV19JT0NUTF9JRFgoU0lPQ1NJV1JFVFJZKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdyZXRyeSwKKwlbSVdfSU9DVExfSURYKFNJT0NHSVdSRVRSWSldCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3cmV0cnksCisJW0lXX0lPQ1RMX0lEWChTSU9DU0lXRU5DT0RFKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdlbmNvZGUsCisJW0lXX0lPQ1RMX0lEWChTSU9DR0lXRU5DT0RFKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdlbmNvZGUsCisJW0lXX0lPQ1RMX0lEWChTSU9DU0lXUE9XRVIpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd3Bvd2VyLAorCVtJV19JT0NUTF9JRFgoU0lPQ0dJV1BPV0VSKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdwb3dlciwKKwlbSVdfSU9DVExfSURYKFNJT0NTSVdHRU5JRSldCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3Z2VuaWUsCisJW0lXX0lPQ1RMX0lEWChTSU9DU0lXQVVUSCldCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3YXV0aCwKKwlbSVdfSU9DVExfSURYKFNJT0NHSVdBVVRIKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdhdXRoLAorCVtJV19JT0NUTF9JRFgoU0lPQ1NJV0VOQ09ERUVYVCldPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdlbmNvZGVleHQsCit9OworCitjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgY2ZnODAyMTFfd2V4dF9oYW5kbGVyID0geworCS5udW1fc3RhbmRhcmQJCT0gQVJSQVlfU0laRShjZmc4MDIxMV9oYW5kbGVycyksCisJLnN0YW5kYXJkCQk9IGNmZzgwMjExX2hhbmRsZXJzLAorCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBjZmc4MDIxMV93aXJlbGVzc19zdGF0cywKK307CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuaCBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYjNkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIF9fV0VYVF9DT01QQVQKKyNkZWZpbmUgX19XRVhUX0NPTVBBVAorCisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorCitpbnQgY2ZnODAyMTFfaWJzc193ZXh0X3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfaWJzc193ZXh0X2dpd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfaWJzc193ZXh0X3Npd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpOworaW50IGNmZzgwMjExX2lic3Nfd2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV9pYnNzX3dleHRfc2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCk7CitpbnQgY2ZnODAyMTFfaWJzc193ZXh0X2dpd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKnNzaWQpOworCitpbnQgY2ZnODAyMTFfbWdkX3dleHRfc2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfbWdkX3dleHRfZ2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfbWdkX3dleHRfc2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpOworaW50IGNmZzgwMjExX21nZF93ZXh0X2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV9tZ2Rfd2V4dF9zaXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpzc2lkKTsKK2ludCBjZmc4MDIxMV9tZ2Rfd2V4dF9naXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpzc2lkKTsKKworaW50IGNmZzgwMjExX3dleHRfZnJlcShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSk7CisKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBjZmc4MDIxMV93ZXh0X2hhbmRsZXI7CisjZW5kaWYgLyogX19XRVhUX0NPTVBBVCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtc21lLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTZjZDllCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3dpcmVsZXNzL3dleHQtc21lLmMKQEAgLTAsMCArMSw0MDQgQEAKKy8qCisgKiBjZmc4MDIxMSB3ZXh0IGNvbXBhdCBmb3IgbWFuYWdlZCBtb2RlLgorICoKKyAqIENvcHlyaWdodCAyMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgICBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlICJ3ZXh0LWNvbXBhdC5oIgorI2luY2x1ZGUgIm5sODAyMTEuaCIKKworaW50IGNmZzgwMjExX21nZF93ZXh0X2Nvbm5lY3Qoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKmNrID0gTlVMTDsKKwljb25zdCB1OCAqcHJldl9ic3NpZCA9IE5VTEw7CisJaW50IGVyciwgaTsKKworCUFTU0VSVF9SREVWX0xPQ0socmRldik7CisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKKworCWlmICghbmV0aWZfcnVubmluZyh3ZGV2LT5uZXRkZXYpKQorCQlyZXR1cm4gMDsKKworCXdkZXYtPndleHQuY29ubmVjdC5pZSA9IHdkZXYtPndleHQuaWU7CisJd2Rldi0+d2V4dC5jb25uZWN0LmllX2xlbiA9IHdkZXYtPndleHQuaWVfbGVuOworCXdkZXYtPndleHQuY29ubmVjdC5wcml2YWN5ID0gd2Rldi0+d2V4dC5kZWZhdWx0X2tleSAhPSAtMTsKKworCWlmICh3ZGV2LT53ZXh0LmtleXMpIHsKKwkJd2Rldi0+d2V4dC5rZXlzLT5kZWYgPSB3ZGV2LT53ZXh0LmRlZmF1bHRfa2V5OworCQl3ZGV2LT53ZXh0LmtleXMtPmRlZm1nbXQgPSB3ZGV2LT53ZXh0LmRlZmF1bHRfbWdtdF9rZXk7CisJfQorCisJaWYgKCF3ZGV2LT53ZXh0LmNvbm5lY3Quc3NpZF9sZW4pCisJCXJldHVybiAwOworCisJaWYgKHdkZXYtPndleHQua2V5cykgeworCQljayA9IGttZW1kdXAod2Rldi0+d2V4dC5rZXlzLCBzaXplb2YoKmNrKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY2spCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCWNrLT5wYXJhbXNbaV0ua2V5ID0gY2stPmRhdGFbaV07CisJfQorCisJaWYgKHdkZXYtPndleHQucHJldl9ic3NpZF92YWxpZCkKKwkJcHJldl9ic3NpZCA9IHdkZXYtPndleHQucHJldl9ic3NpZDsKKworCWVyciA9IF9fY2ZnODAyMTFfY29ubmVjdChyZGV2LCB3ZGV2LT5uZXRkZXYsCisJCQkJICZ3ZGV2LT53ZXh0LmNvbm5lY3QsIGNrLCBwcmV2X2Jzc2lkKTsKKwlpZiAoZXJyKQorCQlrZnJlZShjayk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgY2ZnODAyMTFfbWdkX3dleHRfc2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIHN0cnVjdCBpd19mcmVxICp3ZXh0ZnJlcSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9IE5VTEw7CisJaW50IGVyciwgZnJlcTsKKworCS8qIGNhbGwgb25seSBmb3Igc3RhdGlvbiEgKi8KKwlpZiAoV0FSTl9PTih3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybiAtRUlOVkFMOworCisJZnJlcSA9IGNmZzgwMjExX3dleHRfZnJlcSh3ZGV2LT53aXBoeSwgd2V4dGZyZXEpOworCWlmIChmcmVxIDwgMCkKKwkJcmV0dXJuIGZyZXE7CisKKwlpZiAoZnJlcSkgeworCQljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHdkZXYtPndpcGh5LCBmcmVxKTsKKwkJaWYgKCFjaGFuKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2ZnODAyMTFfbG9ja19yZGV2KHJkZXYpOworCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwl3ZGV2X2xvY2sod2Rldik7CisKKwlpZiAod2Rldi0+c21lX3N0YXRlICE9IENGRzgwMjExX1NNRV9JRExFKSB7CisJCWJvb2wgZXZlbnQgPSB0cnVlOworCisJCWlmICh3ZGV2LT53ZXh0LmNvbm5lY3QuY2hhbm5lbCA9PSBjaGFuKSB7CisJCQllcnIgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBpZiBTU0lEIHNldCwgd2UnbGwgdHJ5IHJpZ2h0IGFnYWluLCBhdm9pZCBldmVudCAqLworCQlpZiAod2Rldi0+d2V4dC5jb25uZWN0LnNzaWRfbGVuKQorCQkJZXZlbnQgPSBmYWxzZTsKKwkJZXJyID0gX19jZmc4MDIxMV9kaXNjb25uZWN0KHJkZXYsIGRldiwKKwkJCQkJICAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HLCBldmVudCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CisKKworCXdkZXYtPndleHQuY29ubmVjdC5jaGFubmVsID0gY2hhbjsKKworCS8qIFNTSUQgaXMgbm90IHNldCwgd2UganVzdCB3YW50IHRvIHN3aXRjaCBjaGFubmVsICovCisJaWYgKGNoYW4gJiYgIXdkZXYtPndleHQuY29ubmVjdC5zc2lkX2xlbikgeworCQllcnIgPSByZGV2X3NldF9mcmVxKHJkZXYsIHdkZXYsIGZyZXEsIE5MODAyMTFfQ0hBTl9OT19IVCk7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGNmZzgwMjExX21nZF93ZXh0X2Nvbm5lY3QocmRldiwgd2Rldik7Cisgb3V0OgorCXdkZXZfdW5sb2NrKHdkZXYpOworCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBjZmc4MDIxMV9tZ2Rfd2V4dF9naXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gTlVMTDsKKworCS8qIGNhbGwgb25seSBmb3Igc3RhdGlvbiEgKi8KKwlpZiAoV0FSTl9PTih3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybiAtRUlOVkFMOworCisJd2Rldl9sb2NrKHdkZXYpOworCWlmICh3ZGV2LT5jdXJyZW50X2JzcykKKwkJY2hhbiA9IHdkZXYtPmN1cnJlbnRfYnNzLT5wdWIuY2hhbm5lbDsKKwllbHNlIGlmICh3ZGV2LT53ZXh0LmNvbm5lY3QuY2hhbm5lbCkKKwkJY2hhbiA9IHdkZXYtPndleHQuY29ubmVjdC5jaGFubmVsOworCXdkZXZfdW5sb2NrKHdkZXYpOworCisJaWYgKGNoYW4pIHsKKwkJZnJlcS0+bSA9IGNoYW4tPmNlbnRlcl9mcmVxOworCQlmcmVxLT5lID0gNjsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogbm8gY2hhbm5lbCBpZiBub3Qgam9pbmluZyAqLworCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgY2ZnODAyMTFfbWdkX3dleHRfc2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisJc2l6ZV90IGxlbiA9IGRhdGEtPmxlbmd0aDsKKwlpbnQgZXJyOworCisJLyogY2FsbCBvbmx5IGZvciBzdGF0aW9uISAqLworCWlmIChXQVJOX09OKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWRhdGEtPmZsYWdzKQorCQlsZW4gPSAwOworCisJLyogaXdjb25maWcgdXNlcyBudWwgdGVybWluYXRpb24gaW4gU1NJRC4uICovCisJaWYgKGxlbiA+IDAgJiYgc3NpZFtsZW4gLSAxXSA9PSAnXDAnKQorCQlsZW4tLTsKKworCWNmZzgwMjExX2xvY2tfcmRldihyZGV2KTsKKwltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJd2Rldl9sb2NrKHdkZXYpOworCisJZXJyID0gMDsKKworCWlmICh3ZGV2LT5zbWVfc3RhdGUgIT0gQ0ZHODAyMTFfU01FX0lETEUpIHsKKwkJYm9vbCBldmVudCA9IHRydWU7CisKKwkJaWYgKHdkZXYtPndleHQuY29ubmVjdC5zc2lkICYmIGxlbiAmJgorCQkgICAgbGVuID09IHdkZXYtPndleHQuY29ubmVjdC5zc2lkX2xlbiAmJgorCQkgICAgbWVtY21wKHdkZXYtPndleHQuY29ubmVjdC5zc2lkLCBzc2lkLCBsZW4pID09IDApCisJCQlnb3RvIG91dDsKKworCQkvKiBpZiBTU0lEIHNldCBub3csIHdlJ2xsIHRyeSB0byBjb25uZWN0LCBhdm9pZCBldmVudCAqLworCQlpZiAobGVuKQorCQkJZXZlbnQgPSBmYWxzZTsKKwkJZXJyID0gX19jZmc4MDIxMV9kaXNjb25uZWN0KHJkZXYsIGRldiwKKwkJCQkJICAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HLCBldmVudCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CisKKwl3ZGV2LT53ZXh0LnByZXZfYnNzaWRfdmFsaWQgPSBmYWxzZTsKKwl3ZGV2LT53ZXh0LmNvbm5lY3Quc3NpZCA9IHdkZXYtPndleHQuc3NpZDsKKwltZW1jcHkod2Rldi0+d2V4dC5zc2lkLCBzc2lkLCBsZW4pOworCXdkZXYtPndleHQuY29ubmVjdC5zc2lkX2xlbiA9IGxlbjsKKworCXdkZXYtPndleHQuY29ubmVjdC5jcnlwdG8uY29udHJvbF9wb3J0ID0gZmFsc2U7CisKKwllcnIgPSBjZmc4MDIxMV9tZ2Rfd2V4dF9jb25uZWN0KHJkZXYsIHdkZXYpOworIG91dDoKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKwltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgY2ZnODAyMTFfbWdkX3dleHRfZ2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCisJLyogY2FsbCBvbmx5IGZvciBzdGF0aW9uISAqLworCWlmIChXQVJOX09OKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhLT5mbGFncyA9IDA7CisKKwl3ZGV2X2xvY2sod2Rldik7CisJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKSB7CisJCWNvbnN0IHU4ICppZSA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKCZ3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLAorCQkJCQkJICAgIFdMQU5fRUlEX1NTSUQpOworCQlpZiAoaWUpIHsKKwkJCWRhdGEtPmZsYWdzID0gMTsKKwkJCWRhdGEtPmxlbmd0aCA9IGllWzFdOworCQkJbWVtY3B5KHNzaWQsIGllICsgMiwgZGF0YS0+bGVuZ3RoKTsKKwkJfQorCX0gZWxzZSBpZiAod2Rldi0+d2V4dC5jb25uZWN0LnNzaWQgJiYgd2Rldi0+d2V4dC5jb25uZWN0LnNzaWRfbGVuKSB7CisJCWRhdGEtPmZsYWdzID0gMTsKKwkJZGF0YS0+bGVuZ3RoID0gd2Rldi0+d2V4dC5jb25uZWN0LnNzaWRfbGVuOworCQltZW1jcHkoc3NpZCwgd2Rldi0+d2V4dC5jb25uZWN0LnNzaWQsIGRhdGEtPmxlbmd0aCk7CisJfSBlbHNlCisJCWRhdGEtPmZsYWdzID0gMDsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKworCXJldHVybiAwOworfQorCitpbnQgY2ZnODAyMTFfbWdkX3dleHRfc2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCXU4ICpic3NpZCA9IGFwX2FkZHItPnNhX2RhdGE7CisJaW50IGVycjsKKworCS8qIGNhbGwgb25seSBmb3Igc3RhdGlvbiEgKi8KKwlpZiAoV0FSTl9PTih3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFwX2FkZHItPnNhX2ZhbWlseSAhPSBBUlBIUkRfRVRIRVIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogYXV0b21hdGljIG1vZGUgKi8KKwlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGJzc2lkKSB8fCBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihic3NpZCkpCisJCWJzc2lkID0gTlVMTDsKKworCWNmZzgwMjExX2xvY2tfcmRldihyZGV2KTsKKwltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJd2Rldl9sb2NrKHdkZXYpOworCisJaWYgKHdkZXYtPnNtZV9zdGF0ZSAhPSBDRkc4MDIxMV9TTUVfSURMRSkgeworCQllcnIgPSAwOworCQkvKiBib3RoIGF1dG9tYXRpYyAqLworCQlpZiAoIWJzc2lkICYmICF3ZGV2LT53ZXh0LmNvbm5lY3QuYnNzaWQpCisJCQlnb3RvIG91dDsKKworCQkvKiBmaXhlZCBhbHJlYWR5IC0gYW5kIG5vIGNoYW5nZSAqLworCQlpZiAod2Rldi0+d2V4dC5jb25uZWN0LmJzc2lkICYmIGJzc2lkICYmCisJCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWQsIHdkZXYtPndleHQuY29ubmVjdC5ic3NpZCkgPT0gMCkKKwkJCWdvdG8gb3V0OworCisJCWVyciA9IF9fY2ZnODAyMTFfZGlzY29ubmVjdChyZGV2LCBkZXYsCisJCQkJCSAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORywgZmFsc2UpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKGJzc2lkKSB7CisJCW1lbWNweSh3ZGV2LT53ZXh0LmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCQl3ZGV2LT53ZXh0LmNvbm5lY3QuYnNzaWQgPSB3ZGV2LT53ZXh0LmJzc2lkOworCX0gZWxzZQorCQl3ZGV2LT53ZXh0LmNvbm5lY3QuYnNzaWQgPSBOVUxMOworCisJZXJyID0gY2ZnODAyMTFfbWdkX3dleHRfY29ubmVjdChyZGV2LCB3ZGV2KTsKKyBvdXQ6CisJd2Rldl91bmxvY2sod2Rldik7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisJcmV0dXJuIGVycjsKK30KKworaW50IGNmZzgwMjExX21nZF93ZXh0X2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisKKwkvKiBjYWxsIG9ubHkgZm9yIHN0YXRpb24hICovCisJaWYgKFdBUk5fT04od2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKworCXdkZXZfbG9jayh3ZGV2KTsKKwlpZiAod2Rldi0+Y3VycmVudF9ic3MpCisJCW1lbWNweShhcF9hZGRyLT5zYV9kYXRhLCB3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmJzc2lkLCBFVEhfQUxFTik7CisJZWxzZSBpZiAod2Rldi0+d2V4dC5jb25uZWN0LmJzc2lkKQorCQltZW1jcHkoYXBfYWRkci0+c2FfZGF0YSwgd2Rldi0+d2V4dC5jb25uZWN0LmJzc2lkLCBFVEhfQUxFTik7CisJZWxzZQorCQltZW1zZXQoYXBfYWRkci0+c2FfZGF0YSwgMCwgRVRIX0FMRU4pOworCXdkZXZfdW5sb2NrKHdkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjZmc4MDIxMV93ZXh0X3Npd2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisJdTggKmllID0gZXh0cmE7CisJaW50IGllX2xlbiA9IGRhdGEtPmxlbmd0aCwgZXJyOworCisJaWYgKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoIWllX2xlbikKKwkJaWUgPSBOVUxMOworCisJd2Rldl9sb2NrKHdkZXYpOworCisJLyogbm8gY2hhbmdlICovCisJZXJyID0gMDsKKwlpZiAod2Rldi0+d2V4dC5pZV9sZW4gPT0gaWVfbGVuICYmCisJICAgIG1lbWNtcCh3ZGV2LT53ZXh0LmllLCBpZSwgaWVfbGVuKSA9PSAwKQorCQlnb3RvIG91dDsKKworCWlmIChpZV9sZW4pIHsKKwkJaWUgPSBrbWVtZHVwKGV4dHJhLCBpZV9sZW4sIEdGUF9LRVJORUwpOworCQlpZiAoIWllKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwl9IGVsc2UKKwkJaWUgPSBOVUxMOworCisJa2ZyZWUod2Rldi0+d2V4dC5pZSk7CisJd2Rldi0+d2V4dC5pZSA9IGllOworCXdkZXYtPndleHQuaWVfbGVuID0gaWVfbGVuOworCisJaWYgKHdkZXYtPnNtZV9zdGF0ZSAhPSBDRkc4MDIxMV9TTUVfSURMRSkgeworCQllcnIgPSBfX2NmZzgwMjExX2Rpc2Nvbm5lY3QocmRldiwgZGV2LAorCQkJCQkgICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcsIGZhbHNlKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKworCS8qIHVzZXJzcGFjZSBiZXR0ZXIgbm90IHRoaW5rIHdlJ2xsIHJlY29ubmVjdCAqLworCWVyciA9IDA7Cisgb3V0OgorCXdkZXZfdW5sb2NrKHdkZXYpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X3Npd2dlbmllKTsKKworaW50IGNmZzgwMjExX3dleHRfc2l3bWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJaW50IGVycjsKKworCWlmICghd2RldikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisKKwlpZiAod2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG1sbWUtPmFkZHIuc2FfZmFtaWx5ICE9IEFSUEhSRF9FVEhFUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3ZGV2X2xvY2sod2Rldik7CisJc3dpdGNoIChtbG1lLT5jbWQpIHsKKwljYXNlIElXX01MTUVfREVBVVRIOgorCWNhc2UgSVdfTUxNRV9ESVNBU1NPQzoKKwkJZXJyID0gX19jZmc4MDIxMV9kaXNjb25uZWN0KHJkZXYsIGRldiwgbWxtZS0+cmVhc29uX2NvZGUsCisJCQkJCSAgICB0cnVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCX0KKwl3ZGV2X3VubG9jayh3ZGV2KTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X3Npd21sbWUpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQuYyBiL25ldC93aXJlbGVzcy93ZXh0LmMKaW5kZXggMjUyYzIwMS4uNWI0YTBjZSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQuYworKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC5jCkBAIC00MTcsNiArNDE3LDIxIEBACiAJSVdfRVZfUVVBTF9MRU4sCQkJLyogSVdfSEVBREVSX1RZUEVfUVVBTCAqLwogfTsKIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBjb25zdCBpbnQgY29tcGF0X2V2ZW50X3R5cGVfc2l6ZVtdID0geworCUlXX0VWX0NPTVBBVF9MQ1BfTEVOLAkJLyogSVdfSEVBREVSX1RZUEVfTlVMTCAqLworCTAsCisJSVdfRVZfQ09NUEFUX0NIQVJfTEVOLAkJLyogSVdfSEVBREVSX1RZUEVfQ0hBUiAqLworCTAsCisJSVdfRVZfQ09NUEFUX1VJTlRfTEVOLAkJLyogSVdfSEVBREVSX1RZUEVfVUlOVCAqLworCUlXX0VWX0NPTVBBVF9GUkVRX0xFTiwJCS8qIElXX0hFQURFUl9UWVBFX0ZSRVEgKi8KKwlJV19FVl9DT01QQVRfQUREUl9MRU4sCQkvKiBJV19IRUFERVJfVFlQRV9BRERSICovCisJMCwKKwlJV19FVl9DT01QQVRfUE9JTlRfTEVOLAkJLyogV2l0aG91dCB2YXJpYWJsZSBwYXlsb2FkICovCisJSVdfRVZfQ09NUEFUX1BBUkFNX0xFTiwJCS8qIElXX0hFQURFUl9UWVBFX1BBUkFNICovCisJSVdfRVZfQ09NUEFUX1FVQUxfTEVOLAkJLyogSVdfSEVBREVSX1RZUEVfUVVBTCAqLworfTsKKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqIENPTU1PTiBTVUJST1VUSU5FUyAqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgpAQCAtNjEwLDYgKzYyNSwxMSBAQAogewogCS8qIEdldCBzdGF0cyBmcm9tIHRoZSBkcml2ZXIgKi8KIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqc3RhdHMgPSBnZXRfd2lyZWxlc3Nfc3RhdHMoZGV2KTsKKwlzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgbnVsbHN0YXRzID0ge307CisKKwkvKiBzaG93IGRldmljZSBpZiBpdCdzIHdpcmVsZXNzIHJlZ2FyZGxlc3Mgb2YgY3VycmVudCBzdGF0cyAqLworCWlmICghc3RhdHMgJiYgZGV2LT53aXJlbGVzc19oYW5kbGVycykKKwkJc3RhdHMgPSAmbnVsbHN0YXRzOwogCiAJaWYgKHN0YXRzKSB7CiAJCXNlcV9wcmludGYoc2VxLCAiJTZzOiAlMDR4ICAlM2QlYyAgJTNkJWMgICUzZCVjICAlNmQgJTZkICU2ZCAiCkBAIC02MjgsNyArNjQ4LDkgQEAKIAkJCSAgIHN0YXRzLT5kaXNjYXJkLm53aWQsIHN0YXRzLT5kaXNjYXJkLmNvZGUsCiAJCQkgICBzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCwgc3RhdHMtPmRpc2NhcmQucmV0cmllcywKIAkJCSAgIHN0YXRzLT5kaXNjYXJkLm1pc2MsIHN0YXRzLT5taXNzLmJlYWNvbik7Ci0JCXN0YXRzLT5xdWFsLnVwZGF0ZWQgJj0gfklXX1FVQUxfQUxMX1VQREFURUQ7CisKKwkJaWYgKHN0YXRzICE9ICZudWxsc3RhdHMpCisJCQlzdGF0cy0+cXVhbC51cGRhdGVkICY9IH5JV19RVUFMX0FMTF9VUERBVEVEOwogCX0KIH0KIApAQCAtMTI1MCw2NSArMTI3Miw1NyBAQAogfQogI2VuZGlmCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqIEVWRU5UIFBST0NFU1NJTkcgKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBQcm9jZXNzIGV2ZW50cyBnZW5lcmF0ZWQgYnkgdGhlIHdpcmVsZXNzIGxheWVyIG9yIHRoZSBkcml2ZXIuCi0gKiBNb3N0IG9mdGVuLCB0aGUgZXZlbnQgd2lsbCBiZSBwcm9wYWdhdGVkIHRocm91Z2ggcnRuZXRsaW5rCi0gKi8KK3N0YXRpYyBpbnQgX19uZXRfaW5pdCB3ZXh0X3Blcm5ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlza2JfcXVldWVfaGVhZF9pbml0KCZuZXQtPndleHRfbmxldmVudHMpOworCXJldHVybiAwOworfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKgotICogTG9ja2luZy4uLgotICogLS0tLS0tLS0tLQotICoKLSAqIFRoYW5rcyB0byBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+IGZvciBmaXhpbmcKLSAqIHRoZSBsb2NraW5nIGlzc3VlIGluIGhlcmUgYW5kIGltcGxlbWVudGluZyB0aGlzIGNvZGUgIQotICoKLSAqIFRoZSBpc3N1ZSA6IHdpcmVsZXNzX3NlbmRfZXZlbnQoKSBpcyBvZnRlbiBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsCi0gKiB3aGlsZSB0aGUgTmV0bGluayBsYXllciBjYW4gbmV2ZXIgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LgotICogVGhlIGZ1bGx5IGZvcm1lZCBSdE5ldGxpbmsgZXZlbnRzIGFyZSBxdWV1ZWQsIGFuZCB0aGVuIGEgdGFza2xldCBpcyBydW4KLSAqIHRvIGZlZWQgdGhvc2UgdG8gTmV0bGluay4KLSAqIFRoZSBza2JfcXVldWUgaXMgaW50ZXJydXB0IHNhZmUsIGFuZCBpdHMgbG9jayBpcyBub3QgaGVsZCB3aGlsZSBjYWxsaW5nCi0gKiBOZXRsaW5rLCBzbyB0aGVyZSBpcyBubyBwb3NzaWJpbGl0eSBvZiBkZWFsb2NrLgotICogSmVhbiBJSQotICovCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHdleHRfcGVybmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworCXNrYl9xdWV1ZV9wdXJnZSgmbmV0LT53ZXh0X25sZXZlbnRzKTsKK30KIAotc3RhdGljIHN0cnVjdCBza19idWZmX2hlYWQgd2lyZWxlc3NfbmxldmVudF9xdWV1ZTsKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgd2V4dF9wZXJuZXRfb3BzID0geworCS5pbml0ID0gd2V4dF9wZXJuZXRfaW5pdCwKKwkuZXhpdCA9IHdleHRfcGVybmV0X2V4aXQsCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCB3aXJlbGVzc19ubGV2ZW50X2luaXQodm9pZCkKIHsKLQlza2JfcXVldWVfaGVhZF9pbml0KCZ3aXJlbGVzc19ubGV2ZW50X3F1ZXVlKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmd2V4dF9wZXJuZXRfb3BzKTsKIH0KIAogc3Vic3lzX2luaXRjYWxsKHdpcmVsZXNzX25sZXZlbnRfaW5pdCk7CiAKLXN0YXRpYyB2b2lkIHdpcmVsZXNzX25sZXZlbnRfcHJvY2Vzcyh1bnNpZ25lZCBsb25nIGRhdGEpCisvKiBQcm9jZXNzIGV2ZW50cyBnZW5lcmF0ZWQgYnkgdGhlIHdpcmVsZXNzIGxheWVyIG9yIHRoZSBkcml2ZXIuICovCitzdGF0aWMgdm9pZCB3aXJlbGVzc19ubGV2ZW50X3Byb2Nlc3Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG5ldCAqbmV0OwogCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2lyZWxlc3NfbmxldmVudF9xdWV1ZSkpKQotCQlydG5sX25vdGlmeShza2IsICZpbml0X25ldCwgMCwgUlROTEdSUF9MSU5LLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlydG5sX2xvY2soKTsKKworCWZvcl9lYWNoX25ldChuZXQpIHsKKwkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmbmV0LT53ZXh0X25sZXZlbnRzKSkpCisJCQlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9MSU5LLCBOVUxMLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKwl9CisKKwlydG5sX3VubG9jaygpOwogfQogCi1zdGF0aWMgREVDTEFSRV9UQVNLTEVUKHdpcmVsZXNzX25sZXZlbnRfdGFza2xldCwgd2lyZWxlc3NfbmxldmVudF9wcm9jZXNzLCAwKTsKK3N0YXRpYyBERUNMQVJFX1dPUksod2lyZWxlc3NfbmxldmVudF93b3JrLCB3aXJlbGVzc19ubGV2ZW50X3Byb2Nlc3MpOwogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKgotICogRmlsbCBhIHJ0bmV0bGluayBtZXNzYWdlIHdpdGggb3VyIGV2ZW50IGRhdGEuCi0gKiBOb3RlIHRoYXQgd2UgcHJvcGFnZSBvbmx5IHRoZSBzcGVjaWZpZWQgZXZlbnQgYW5kIGRvbid0IGR1bXAgdGhlCi0gKiBjdXJyZW50IHdpcmVsZXNzIGNvbmZpZy4gRHVtcGluZyB0aGUgd2lyZWxlc3MgY29uZmlnIGlzIGZhciB0b28KLSAqIGV4cGVuc2l2ZSAoZm9yIGVhY2ggcGFyYW1ldGVyLCB0aGUgZHJpdmVyIG5lZWQgdG8gcXVlcnkgdGhlIGhhcmR3YXJlKS4KLSAqLwotc3RhdGljIGludCBydG5ldGxpbmtfZmlsbF9pd2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgaW50IHR5cGUsIGNoYXIgKmV2ZW50LCBpbnQgZXZlbnRfbGVuKQorc3RhdGljIHN0cnVjdCBubG1zZ2hkciAqcnRuZXRsaW5rX2lmaW5mb19wcmVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlmaW5mb21zZyAqcjsKIAlzdHJ1Y3Qgbmxtc2doZHIgICpubGg7CiAKLQlubGggPSBubG1zZ19wdXQoc2tiLCAwLCAwLCB0eXBlLCBzaXplb2YoKnIpLCAwKTsKLQlpZiAobmxoID09IE5VTEwpCi0JCXJldHVybiAtRU1TR1NJWkU7CisJbmxoID0gbmxtc2dfcHV0KHNrYiwgMCwgMCwgUlRNX05FV0xJTkssIHNpemVvZigqciksIDApOworCWlmICghbmxoKQorCQlyZXR1cm4gTlVMTDsKIAogCXIgPSBubG1zZ19kYXRhKG5saCk7CiAJci0+aWZpX2ZhbWlseSA9IEFGX1VOU1BFQzsKQEAgLTEzMTksNDggKzEzMzMsMTQgQEAKIAlyLT5pZmlfY2hhbmdlID0gMDsJLyogV2lyZWxlc3MgY2hhbmdlcyBkb24ndCBhZmZlY3QgdGhvc2UgZmxhZ3MgKi8KIAogCU5MQV9QVVRfU1RSSU5HKHNrYiwgSUZMQV9JRk5BTUUsIGRldi0+bmFtZSk7Ci0JLyogQWRkIHRoZSB3aXJlbGVzcyBldmVudHMgaW4gdGhlIG5ldGxpbmsgcGFja2V0ICovCi0JTkxBX1BVVChza2IsIElGTEFfV0lSRUxFU1MsIGV2ZW50X2xlbiwgZXZlbnQpOwogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7Ci0KLW5sYV9wdXRfZmFpbHVyZToKKwlyZXR1cm4gbmxoOworIG5sYV9wdXRfZmFpbHVyZToKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwotCXJldHVybiAtRU1TR1NJWkU7CisJcmV0dXJuIE5VTEw7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCi0gKiBDcmVhdGUgYW5kIGJyb2FkY2FzdCBhbmQgc2VuZCBpdCBvbiB0aGUgc3RhbmRhcmQgcnRuZXRsaW5rIHNvY2tldAotICogVGhpcyBpcyBhIHB1cmUgY2xvbmUgcnRtc2dfaWZpbmZvKCkgaW4gbmV0L2NvcmUvcnRuZXRsaW5rLmMKLSAqIEFuZHJ6ZWogS3J6eXN6dG9mb3dpY3ogbWFuZGF0ZWQgdGhhdCBJIHVzZWQgYSBJRkxBX1hYWCBmaWVsZAotICogd2l0aGluIGEgUlRNX05FV0xJTksgZXZlbnQuCi0gKi8KLXN0YXRpYyB2b2lkIHJ0bXNnX2l3aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICpldmVudCwgaW50IGV2ZW50X2xlbikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBlcnI7CiAKLQlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCi0JCXJldHVybjsKLQotCXNrYiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9BVE9NSUMpOwotCWlmICghc2tiKQotCQlyZXR1cm47Ci0KLQllcnIgPSBydG5ldGxpbmtfZmlsbF9pd2luZm8oc2tiLCBkZXYsIFJUTV9ORVdMSU5LLCBldmVudCwgZXZlbnRfbGVuKTsKLQlpZiAoZXJyIDwgMCkgewotCQlXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpOwotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuOwotCX0KLQotCU5FVExJTktfQ0Ioc2tiKS5kc3RfZ3JvdXAgPSBSVE5MR1JQX0xJTks7Ci0Jc2tiX3F1ZXVlX3RhaWwoJndpcmVsZXNzX25sZXZlbnRfcXVldWUsIHNrYik7Ci0JdGFza2xldF9zY2hlZHVsZSgmd2lyZWxlc3NfbmxldmVudF90YXNrbGV0KTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyoKICAqIE1haW4gZXZlbnQgZGlzcGF0Y2hlci4gQ2FsbGVkIGZyb20gb3RoZXIgcGFydHMgYW5kIGRyaXZlcnMuCiAgKiBTZW5kIHRoZSBldmVudCBvbiB0aGUgYXBwcm9wcmlhdGUgY2hhbm5lbHMuCkBAIC0xMzY5LDcgKzEzNDksNyBAQAogdm9pZCB3aXJlbGVzc19zZW5kX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2LAogCQkJIHVuc2lnbmVkIGludAkJY21kLAogCQkJIHVuaW9uIGl3cmVxX2RhdGEgKgl3cnF1LAotCQkJIGNoYXIgKgkJCWV4dHJhKQorCQkJIGNvbnN0IGNoYXIgKgkJZXh0cmEpCiB7CiAJY29uc3Qgc3RydWN0IGl3X2lvY3RsX2Rlc2NyaXB0aW9uICoJZGVzY3IgPSBOVUxMOwogCWludCBleHRyYV9sZW4gPSAwOwpAQCAtMTM3OSw2ICsxMzU5LDI1IEBACiAJaW50IHdycXVfb2ZmID0gMDsJCQkvKiBPZmZzZXQgaW4gd3JxdSAqLwogCS8qIERvbid0ICJvcHRpbWlzZSIgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSwgaXQgd2lsbCBjcmFzaCAqLwogCXVuc2lnbmVkCWNtZF9pbmRleDsJCS8qICpNVVNUKiBiZSB1bnNpZ25lZCAqLworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG5sbXNnaGRyICpubGg7CisJc3RydWN0IG5sYXR0ciAqbmxhOworI2lmZGVmIENPTkZJR19DT01QQVQKKwlzdHJ1Y3QgX19jb21wYXRfaXdfZXZlbnQgKmNvbXBhdF9ldmVudDsKKwlzdHJ1Y3QgY29tcGF0X2l3X3BvaW50IGNvbXBhdF93cnF1OworCXN0cnVjdCBza19idWZmICpjb21wc2tiOworI2VuZGlmCisKKwkvKgorCSAqIE5vdGhpbmcgaW4gdGhlIGtlcm5lbCBzZW5kcyBzY2FuIGV2ZW50cyB3aXRoIGRhdGEsIGJlIHNhZmUuCisJICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBjYW5ub3QgZml4IHVwIHNjYW4gZXZlbnQgZGF0YQorCSAqIGZvciBjb21wYXQsIGR1ZSB0byBiZWluZyBjb250YWluZWQgaW4gJ2V4dHJhJywgYnV0IG5vcm1hbGx5CisJICogYXBwbGljYXRpb25zIGFyZSByZXF1aXJlZCB0byByZXRyaWV2ZSB0aGUgc2NhbiBkYXRhIGFueXdheQorCSAqIGFuZCBubyBkYXRhIGlzIGluY2x1ZGVkIGluIHRoZSBldmVudCwgdGhpcyBjb2RpZmllcyB0aGF0CisJICogcHJhY3RpY2UuCisJICovCisJaWYgKFdBUk5fT04oY21kID09IFNJT0NHSVdTQ0FOICYmIGV4dHJhKSkKKwkJZXh0cmEgPSBOVUxMOwogCiAJLyogR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgRXZlbnQgKi8KIAlpZiAoY21kIDw9IFNJT0NJV0xBU1QpIHsKQEAgLTE0MjYsMjUgKzE0MjUsMTA3IEBACiAJaGRyX2xlbiA9IGV2ZW50X3R5cGVfc2l6ZVtkZXNjci0+aGVhZGVyX3R5cGVdOwogCWV2ZW50X2xlbiA9IGhkcl9sZW4gKyBleHRyYV9sZW47CiAKLQkvKiBDcmVhdGUgdGVtcG9yYXJ5IGJ1ZmZlciB0byBob2xkIHRoZSBldmVudCAqLwotCWV2ZW50ID0ga21hbGxvYyhldmVudF9sZW4sIEdGUF9BVE9NSUMpOwotCWlmIChldmVudCA9PSBOVUxMKQorCS8qCisJICogVGhlIHByb2JsZW0gZm9yIDY0LzMyIGJpdC4KKwkgKgorCSAqIE9uIDY0LWJpdCwgYSByZWd1bGFyIGV2ZW50IGlzIGxhaWQgb3V0IGFzIGZvbGxvd3M6CisJICogICAgICB8ICAwICB8ICAxICB8ICAyICB8ICAzICB8ICA0ICB8ICA1ICB8ICA2ICB8ICA3ICB8CisJICogICAgICB8IGV2ZW50LmxlbiB8IGV2ZW50LmNtZCB8ICAgICBwIGEgZCBkIGkgbiBnICAgICB8CisJICogICAgICB8IHdycXUgZGF0YSAuLi4gKHdpdGggdGhlIGNvcnJlY3Qgc2l6ZSkgICAgICAgICB8CisJICoKKwkgKiBUaGlzIHBhZGRpbmcgZXhpc3RzIGJlY2F1c2Ugd2UgbWFuaXB1bGF0ZSBldmVudC0+dSwKKwkgKiBhbmQgJ2V2ZW50JyBpcyBub3QgcGFja2VkLgorCSAqCisJICogQW4gaXdfcG9pbnQgZXZlbnQgaXMgbGFpZCBvdXQgbGlrZSB0aGlzIGluc3RlYWQ6CisJICogICAgICB8ICAwICB8ICAxICB8ICAyICB8ICAzICB8ICA0ICB8ICA1ICB8ICA2ICB8ICA3ICB8CisJICogICAgICB8IGV2ZW50LmxlbiB8IGV2ZW50LmNtZCB8ICAgICBwIGEgZCBkIGkgbiBnICAgICB8CisJICogICAgICB8IGl3cG50LmxlbiB8IGl3cG50LmZsZyB8ICAgICBwIGEgZCBkIGkgbiBnICAgICB8CisJICogICAgICB8IGV4dHJhIGRhdGEgIC4uLgorCSAqCisJICogVGhlIHNlY29uZCBwYWRkaW5nIGV4aXN0cyBiZWNhdXNlIHN0cnVjdCBpd19wb2ludCBpcyBleHRlbmRlZCwKKwkgKiBidXQgdGhpcyBkZXBlbmRzIG9uIHRoZSBwbGF0Zm9ybS4uLgorCSAqCisJICogT24gMzItYml0LCBhbGwgdGhlIHBhZGRpbmcgc2hvdWxkbid0IGJlIHRoZXJlLgorCSAqLworCisJc2tiID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCiAJCXJldHVybjsKIAotCS8qIEZpbGwgZXZlbnQgKi8KKwkvKiBTZW5kIHZpYSB0aGUgUnROZXRsaW5rIGV2ZW50IGNoYW5uZWwgKi8KKwlubGggPSBydG5ldGxpbmtfaWZpbmZvX3ByZXAoZGV2LCBza2IpOworCWlmIChXQVJOX09OKCFubGgpKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm47CisJfQorCisJLyogQWRkIHRoZSB3aXJlbGVzcyBldmVudHMgaW4gdGhlIG5ldGxpbmsgcGFja2V0ICovCisJbmxhID0gbmxhX3Jlc2VydmUoc2tiLCBJRkxBX1dJUkVMRVNTLCBldmVudF9sZW4pOworCWlmICghbmxhKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm47CisJfQorCWV2ZW50ID0gbmxhX2RhdGEobmxhKTsKKworCS8qIEZpbGwgZXZlbnQgLSBmaXJzdCBjbGVhciB0byBhdm9pZCBkYXRhIGxlYWtpbmcgKi8KKwltZW1zZXQoZXZlbnQsIDAsIGhkcl9sZW4pOwogCWV2ZW50LT5sZW4gPSBldmVudF9sZW47CiAJZXZlbnQtPmNtZCA9IGNtZDsKIAltZW1jcHkoJmV2ZW50LT51LCAoKGNoYXIgKikgd3JxdSkgKyB3cnF1X29mZiwgaGRyX2xlbiAtIElXX0VWX0xDUF9MRU4pOwotCWlmIChleHRyYSkKKwlpZiAoZXh0cmFfbGVuKQogCQltZW1jcHkoKChjaGFyICopIGV2ZW50KSArIGhkcl9sZW4sIGV4dHJhLCBleHRyYV9sZW4pOwogCisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJaGRyX2xlbiA9IGNvbXBhdF9ldmVudF90eXBlX3NpemVbZGVzY3ItPmhlYWRlcl90eXBlXTsKKwlldmVudF9sZW4gPSBoZHJfbGVuICsgZXh0cmFfbGVuOworCisJY29tcHNrYiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9BVE9NSUMpOworCWlmICghY29tcHNrYikgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuOworCX0KKwogCS8qIFNlbmQgdmlhIHRoZSBSdE5ldGxpbmsgZXZlbnQgY2hhbm5lbCAqLwotCXJ0bXNnX2l3aW5mbyhkZXYsIChjaGFyICopIGV2ZW50LCBldmVudF9sZW4pOworCW5saCA9IHJ0bmV0bGlua19pZmluZm9fcHJlcChkZXYsIGNvbXBza2IpOworCWlmIChXQVJOX09OKCFubGgpKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlrZnJlZV9za2IoY29tcHNrYik7CisJCXJldHVybjsKKwl9CiAKLQkvKiBDbGVhbnVwICovCi0Ja2ZyZWUoZXZlbnQpOworCS8qIEFkZCB0aGUgd2lyZWxlc3MgZXZlbnRzIGluIHRoZSBuZXRsaW5rIHBhY2tldCAqLworCW5sYSA9IG5sYV9yZXNlcnZlKGNvbXBza2IsIElGTEFfV0lSRUxFU1MsIGV2ZW50X2xlbik7CisJaWYgKCFubGEpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCWtmcmVlX3NrYihjb21wc2tiKTsKKwkJcmV0dXJuOworCX0KKwljb21wYXRfZXZlbnQgPSBubGFfZGF0YShubGEpOwogCi0JcmV0dXJuOwkJLyogQWx3YXlzIHN1Y2Nlc3MsIEkgZ3Vlc3MgOy0pICovCisJY29tcGF0X2V2ZW50LT5sZW4gPSBldmVudF9sZW47CisJY29tcGF0X2V2ZW50LT5jbWQgPSBjbWQ7CisJaWYgKGRlc2NyLT5oZWFkZXJfdHlwZSA9PSBJV19IRUFERVJfVFlQRV9QT0lOVCkgeworCQljb21wYXRfd3JxdS5sZW5ndGggPSB3cnF1LT5kYXRhLmxlbmd0aDsKKwkJY29tcGF0X3dycXUuZmxhZ3MgPSB3cnF1LT5kYXRhLmZsYWdzOworCQltZW1jcHkoJmNvbXBhdF9ldmVudC0+cG9pbnRlciwKKwkJCSgoY2hhciAqKSAmY29tcGF0X3dycXUpICsgSVdfRVZfQ09NUEFUX1BPSU5UX09GRiwKKwkJCWhkcl9sZW4gLSBJV19FVl9DT01QQVRfTENQX0xFTik7CisJCWlmIChleHRyYV9sZW4pCisJCQltZW1jcHkoKChjaGFyICopIGNvbXBhdF9ldmVudCkgKyBoZHJfbGVuLAorCQkJCWV4dHJhLCBleHRyYV9sZW4pOworCX0gZWxzZSB7CisJCS8qIGV4dHJhX2xlbiBtdXN0IGJlIHplcm8sIHNvIG5vIGlmIChleHRyYSkgbmVlZGVkICovCisJCW1lbWNweSgmY29tcGF0X2V2ZW50LT5wb2ludGVyLCB3cnF1LAorCQkJaGRyX2xlbiAtIElXX0VWX0NPTVBBVF9MQ1BfTEVOKTsKKwl9CisKKwlubG1zZ19lbmQoY29tcHNrYiwgbmxoKTsKKworCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0ID0gY29tcHNrYjsKKyNlbmRpZgorCXNrYl9xdWV1ZV90YWlsKCZkZXZfbmV0KGRldiktPndleHRfbmxldmVudHMsIHNrYik7CisJc2NoZWR1bGVfd29yaygmd2lyZWxlc3NfbmxldmVudF93b3JrKTsKIH0KIEVYUE9SVF9TWU1CT0wod2lyZWxlc3Nfc2VuZF9ldmVudCk7CiAKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcHJvYy5jIGIvbmV0L3hmcm0veGZybV9wcm9jLmMKaW5kZXggYTJhZGI1MS4uZmVmOGRiNSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9wcm9jLmMKKysrIGIvbmV0L3hmcm0veGZybV9wcm9jLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW5fbmV0KGlub2RlLCBmaWxlLCB4ZnJtX3N0YXRpc3RpY3Nfc2VxX3Nob3cpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4ZnJtX3N0YXRpc3RpY3Nfc2VxX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4ZnJtX3N0YXRpc3RpY3Nfc2VxX2ZvcHMgPSB7CiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAogCS5vcGVuCSA9IHhmcm1fc3RhdGlzdGljc19zZXFfb3BlbiwKIAkucmVhZAkgPSBzZXFfcmVhZCwKZGlmZiAtLWdpdCBhL3NhbXBsZXMva3Byb2Jlcy9rcmV0cHJvYmVfZXhhbXBsZS5jIGIvc2FtcGxlcy9rcHJvYmVzL2tyZXRwcm9iZV9leGFtcGxlLmMKaW5kZXggNGU3NjRiMy4uMTA0MWI2NyAxMDA2NDQKLS0tIGEvc2FtcGxlcy9rcHJvYmVzL2tyZXRwcm9iZV9leGFtcGxlLmMKKysrIGIvc2FtcGxlcy9rcHJvYmVzL2tyZXRwcm9iZV9leGFtcGxlLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiBzdGF0aWMgY2hhciBmdW5jX25hbWVbTkFNRV9NQVhdID0gImRvX2ZvcmsiOwogbW9kdWxlX3BhcmFtX3N0cmluZyhmdW5jLCBmdW5jX25hbWUsIE5BTUVfTUFYLCBTX0lSVUdPKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyBiL3NjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZwppbmRleCA3Mjk5N2MzLi5kZTIzM2ZmIDEwMDc1NQotLS0gYS9zY3JpcHRzL2V4dHJhY3QtaWtjb25maWcKKysrIGIvc2NyaXB0cy9leHRyYWN0LWlrY29uZmlnCkBAIC0xNyw2ICsxNywxMCBAQAogCXJldHVybgogICAgIGZpCiAgICAgZW5kPWAkYmlub2Zmc2V0ICRmaWxlICRJS0NGR19FRCAyPi9kZXYvbnVsbGAKKyAgICBbICIkPyIgIT0gIjAiIF0gJiYgZW5kPSItMSIKKyAgICBpZiBbICIkZW5kIiAtZXEgIi0xIiBdOyB0aGVuCisJcmV0dXJuCisgICAgZmkKIAogICAgIHN0YXJ0PWBleHByICRzdGFydCArIDhgCiAgICAgc2l6ZT1gZXhwciAkZW5kIC0gJHN0YXJ0YApAQCAtNTUsNiArNTksOCBAQAogR1pIRFIxPSIweDFmIDB4OGIgMHgwOCAweDAwIgogR1pIRFIyPSIweDFmIDB4OGIgMHgwOCAweDA4IgogCitFTEZIRFI9IjB4N2YgMHg0NSAweDRjIDB4NDYiCisKICMgdm1saW51eC5nejogQ2hlY2sgZm9yIGEgY29tcHJlc3NlZCBpbWFnZXMKIG9mZj1gJGJpbm9mZnNldCAiJGltYWdlIiAkR1pIRFIxIDI+L2Rldi9udWxsYAogWyAiJD8iICE9ICIwIiBdICYmIG9mZj0iLTEiCkBAIC02OSw2ICs3NSwxNCBAQAogCShkZCBpYnM9IiRvZmYiIHNraXA9MSBjb3VudD0wICYmIGRkIGJzPTUxMmspIDwiJGltYWdlIiAyPi9kZXYvbnVsbCB8IFwKIAkJemNhdCA+IiRUTVBGSUxFIgogCWR1bXBfY29uZmlnICIkVE1QRklMRSIKKworIyBjaGVjayBpZiB0aGlzIGlzIHNpbXBseSBhbiBFTEYgZmlsZQorZWxzZQorCW9mZj1gJGJpbm9mZnNldCAiJGltYWdlIiAkRUxGSERSIDI+L2Rldi9udWxsYAorCVsgIiQ/IiAhPSAiMCIgXSAmJiBvZmY9Ii0xIgorCWlmIFsgIiRvZmYiIC1lcSAiMCIgXTsgdGhlbgorCQlkdW1wX2NvbmZpZyAiJGltYWdlIgorCWZpCiBmaQogCiBlY2hvICJFUlJPUjogVW5hYmxlIHRvIGV4dHJhY3Qga2VybmVsIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlIGIvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCmluZGV4IDVkZGY4YmUuLjZkNjljN2MgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQorKysgYi9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKQEAgLTIsNyArMiw4IEBACiAjIEtlcm5lbCBjb25maWd1cmF0aW9uIHRhcmdldHMKICMgVGhlc2UgdGFyZ2V0cyBhcmUgdXNlZCBmcm9tIHRvcC1sZXZlbCBtYWtlZmlsZQogCi1QSE9OWSArPSBvbGRjb25maWcgeGNvbmZpZyBnY29uZmlnIG1lbnVjb25maWcgY29uZmlnIHNpbGVudG9sZGNvbmZpZyB1cGRhdGUtcG8tY29uZmlnCitQSE9OWSArPSBvbGRjb25maWcgeGNvbmZpZyBnY29uZmlnIG1lbnVjb25maWcgY29uZmlnIHNpbGVudG9sZGNvbmZpZyB1cGRhdGUtcG8tY29uZmlnIFwKKwlsb2NhbG1vZGNvbmZpZyBsb2NhbHllc2NvbmZpZwogCiBpZmRlZiBLQlVJTERfS0NPTkZJRwogS2NvbmZpZyA6PSAkKEtCVUlMRF9LQ09ORklHKQpAQCAtMjgsNiArMjksMzUgQEAKIHNpbGVudG9sZGNvbmZpZzogJChvYmopL2NvbmYKIAkkPCAtcyAkKEtjb25maWcpCiAKK2xvY2FsbW9kY29uZmlnOiAkKG9iaikvc3RyZWFtbGluZV9jb25maWcucGwgJChvYmopL2NvbmYKKwkkKFEpcGVybCAkPCAkKEtjb25maWcpID4gLnRtcC5jb25maWcKKwkkKFEpaWYgWyAtZiAuY29uZmlnIF07IHRoZW4gCQkJCVwKKwkJCWNtcCAtcyAudG1wLmNvbmZpZyAuY29uZmlnIHx8CQlcCisJCQkobXYgLWYgLmNvbmZpZyAuY29uZmlnLm9sZC4xOwkJXAorCQkJIG12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQlcCisJCQkgJChvYmopL2NvbmYgLXMgJChLY29uZmlnKTsJCVwKKwkJCSBtdiAtZiAuY29uZmlnLm9sZC4xIC5jb25maWcub2xkKQlcCisJZWxzZQkJCQkJCQlcCisJCQltdiAtZiAudG1wLmNvbmZpZyAuY29uZmlnOwkJXAorCQkJJChvYmopL2NvbmYgLXMgJChLY29uZmlnKTsJCVwKKwlmaQorCSQoUSlybSAtZiAudG1wLmNvbmZpZworCitsb2NhbHllc2NvbmZpZzogJChvYmopL3N0cmVhbWxpbmVfY29uZmlnLnBsICQob2JqKS9jb25mCisJJChRKXBlcmwgJDwgJChLY29uZmlnKSA+IC50bXAuY29uZmlnCisJJChRKXNlZCAtaSBzLz1tLz15LyAudG1wLmNvbmZpZworCSQoUSlpZiBbIC1mIC5jb25maWcgXTsgdGhlbiAJCQkJXAorCQkJY21wIC1zIC50bXAuY29uZmlnIC5jb25maWcgfHwJCVwKKwkJCShtdiAtZiAuY29uZmlnIC5jb25maWcub2xkLjE7CQlcCisJCQkgbXYgLWYgLnRtcC5jb25maWcgLmNvbmZpZzsJCVwKKwkJCSAkKG9iaikvY29uZiAtcyAkKEtjb25maWcpOwkJXAorCQkJIG12IC1mIC5jb25maWcub2xkLjEgLmNvbmZpZy5vbGQpCVwKKwllbHNlCQkJCQkJCVwKKwkJCW12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQlcCisJCQkkKG9iaikvY29uZiAtcyAkKEtjb25maWcpOwkJXAorCWZpCisJJChRKXJtIC1mIC50bXAuY29uZmlnCisKICMgQ3JlYXRlIG5ldyBsaW51eC5wb3QgZmlsZQogIyBBZGp1c3QgY2hhcnNldCB0byBVVEYtOCBpbiAucG8gZmlsZSB0byBhY2NlcHQgVVRGLTggaW4gS2NvbmZpZyBmaWxlcwogIyBUaGUgc3ltbGluayBpcyB1c2VkIHRvIHJlcGFpciBhIGRlZmljaWVuY3kgaW4gYXJjaC91bQpAQCAtODMsNiArMTEzLDggQEAKIAlAZWNobyAgJyAgeGNvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIFFUIGJhc2VkIGZyb250LWVuZCcKIAlAZWNobyAgJyAgZ2NvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIEdUSyBiYXNlZCBmcm9udC1lbmQnCiAJQGVjaG8gICcgIG9sZGNvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIHByb3ZpZGVkIC5jb25maWcgYXMgYmFzZScKKwlAZWNobyAgJyAgbG9jYWxtb2Rjb25maWcgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIGRpc2FibGluZyBtb2R1bGVzIG5vdCBsb2FkZWQnCisJQGVjaG8gICcgIGxvY2FseWVzY29uZmlnICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyBjb252ZXJ0aW5nIGxvY2FsIG1vZHMgdG8gY29yZScKIAlAZWNobyAgJyAgc2lsZW50b2xkY29uZmlnIC0gU2FtZSBhcyBvbGRjb25maWcsIGJ1dCBxdWlldGx5LCBhZGRpdGlvbmFsbHkgdXBkYXRlIGRlcHMnCiAJQGVjaG8gICcgIHJhbmRjb25maWcJICAtIE5ldyBjb25maWcgd2l0aCByYW5kb20gYW5zd2VyIHRvIGFsbCBvcHRpb25zJwogCUBlY2hvICAnICBkZWZjb25maWcJICAtIE5ldyBjb25maWcgd2l0aCBkZWZhdWx0IGFuc3dlciB0byBhbGwgb3B0aW9ucycKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbCBiL3NjcmlwdHMva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTk4NGRiCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsCkBAIC0wLDAgKzEsMzY2IEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMKKyMgQ29weXdyaXRlIDIwMDUtMjAwOSAtIFN0ZXZlbiBSb3N0ZWR0CisjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMgorIworIyAgSXQncyBzaW1wbGUgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgd29ya3MuCisjICBJZiBub3QsIHRoZW4geW91IGNhbiBhc2sgbWUgYXQgc3RyaXBjb25maWdAZ29vZG1pcy5vcmcKKyMKKyMgV2hhdCBpdCBkb2VzPworIworIyAgIElmIHlvdSBoYXZlIGluc3RhbGxlZCBhIExpbnV4IGtlcm5lbCBmcm9tIGEgZGlzdHJpYnV0aW9uCisjICAgdGhhdCB0dXJucyBvbiB3YXkgdG9vIG1hbnkgbW9kdWxlcyB0aGFuIHlvdSBuZWVkLCBhbmQKKyMgICB5b3Ugb25seSB3YW50IHRoZSBtb2R1bGVzIHlvdSB1c2UsIHRoZW4gdGhpcyBwcm9ncmFtCisjICAgaXMgcGVyZmVjdCBmb3IgeW91LgorIworIyAgIEl0IGdpdmVzIHlvdSB0aGUgYWJpbGl0eSB0byB0dXJuIG9mZiBhbGwgdGhlIG1vZHVsZXMgdGhhdCBhcmUKKyMgICBub3QgbG9hZGVkIG9uIHlvdXIgc3lzdGVtLgorIworIyBIb3d0bzoKKyMKKyMgIDEuIEJvb3QgdXAgdGhlIGtlcm5lbCB0aGF0IHlvdSB3YW50IHRvIHN0cmVhbSBsaW5lIHRoZSBjb25maWcgb24uCisjICAyLiBDaGFuZ2UgZGlyZWN0b3J5IHRvIHRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgc291cmNlIG9mIHRoZQorIyAgICAgICBrZXJuZWwgdGhhdCB5b3UganVzdCBib290ZWQuCisjICAzLiBDb3B5IHRoZSBjb25maWd1cmF0b24gZmlsZSB0byB0aGlzIGRpcmVjdG9yeSBhcyAuY29uZmlnCisjICA0LiBIYXZlIGFsbCB5b3VyIGRldmljZXMgdGhhdCB5b3UgbmVlZCBtb2R1bGVzIGZvciBjb25uZWN0ZWQgYW5kCisjICAgICAgb3BlcmF0aW9uYWwgKG1ha2Ugc3VyZSB0aGF0IHRoZWlyIGNvcnJlc3BvbmRpbmcgbW9kdWxlcyBhcmUgbG9hZGVkKQorIyAgNS4gUnVuIHRoaXMgc2NyaXB0IHJlZGlyZWN0aW5nIHRoZSBvdXRwdXQgdG8gc29tZSBvdGhlciBmaWxlCisjICAgICAgIGxpa2UgY29uZmlnX3N0cmlwLgorIyAgNi4gQmFjayB1cCB5b3VyIG9sZCBjb25maWcgKGlmIHlvdSB3YW50IHRvbykuCisjICA3LiBjb3B5IHRoZSBjb25maWdfc3RyaXAgZmlsZSB0byAuY29uZmlnCisjICA4LiBSdW4gIm1ha2Ugb2xkY29uZmlnIgorIworIyAgTm93IHlvdXIga2VybmVsIGlzIHJlYWR5IHRvIGJlIGJ1aWx0IHdpdGggb25seSB0aGUgbW9kdWxlcyB0aGF0CisjICBhcmUgbG9hZGVkLgorIworIyBIZXJlJ3Mgd2hhdCBJIGRpZCB3aXRoIG15IERlYmlhbiBkaXN0cmlidXRpb24uCisjCisjICAgIGNkIC91c3Ivc3JjL2xpbnV4LTIuNi4xMAorIyAgICBjcCAvYm9vdC9jb25maWctMi42LjEwLTEtNjg2LXNtcCAuY29uZmlnCisjICAgIH4vYmluL3N0cmVhbWxpbmVfY29uZmlnID4gY29uZmlnX3N0cmlwCisjICAgIG12IC5jb25maWcgY29uZmlnX3NhdgorIyAgICBtdiBjb25maWdfc3RyaXAgLmNvbmZpZworIyAgICBtYWtlIG9sZGNvbmZpZworIworbXkgJGNvbmZpZyA9ICIuY29uZmlnIjsKK215ICRsaW51eHBhdGggPSAiLiI7CisKK215ICR1bmFtZSA9IGB1bmFtZSAtcmA7CitjaG9tcCAkdW5hbWU7CisKK215IEBzZWFyY2hjb25maWdzID0gKAorCXsKKwkgICAgImZpbGUiID0+ICIuY29uZmlnIiwKKwkgICAgImV4ZWMiID0+ICJjYXQiLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gIi9wcm9jL2NvbmZpZy5neiIsCisJICAgICJleGVjIiA9PiAiemNhdCIsCisJfSwKKwl7CisJICAgICJmaWxlIiA9PiAiL2Jvb3QvY29uZmlnLSR1bmFtZSIsCisJICAgICJleGVjIiA9PiAiY2F0IiwKKwl9LAorCXsKKwkgICAgImZpbGUiID0+ICIvYm9vdC92bWxpbnV6LSR1bmFtZSIsCisJICAgICJleGVjIiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gInZtbGludXgiLAorCSAgICAiZXhlYyIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJICAgICJ0ZXN0IiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwl9LAorCXsKKwkgICAgImZpbGUiID0+ICIvbGliL21vZHVsZXMvJHVuYW1lL2tlcm5lbC9rZXJuZWwvY29uZmlncy5rbyIsCisJICAgICJleGVjIiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gImtlcm5lbC9jb25maWdzLmtvIiwKKwkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCSAgICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJfSwKKwl7CisJICAgICJmaWxlIiA9PiAia2VybmVsL2NvbmZpZ3MubyIsCisJICAgICJleGVjIiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCX0sCispOworCitzdWIgZmluZF9jb25maWcgeworICAgIGZvcmVhY2ggbXkgJGNvbmYgKEBzZWFyY2hjb25maWdzKSB7CisJbXkgJGZpbGUgPSAkY29uZi0+eyJmaWxlIn07CisKKwluZXh0IGlmICggISAtZiAiJGZpbGUiKTsKKworCWlmIChkZWZpbmVkKCRjb25mLT57InRlc3QifSkpIHsKKwkgICAgYCRjb25mLT57InRlc3QifSAkY29uZi0+eyJmaWxlIn0gMj4vZGV2L251bGxgOworCSAgICBuZXh0IGlmICgkPyk7CisJfQorCisJbXkgJGV4ZWMgPSAkY29uZi0+eyJleGVjIn07CisKKwlwcmludCBTVERFUlIgInVzaW5nIGNvbmZpZzogJyRmaWxlJ1xuIjsKKworCW9wZW4oQ0lOLCAiJGV4ZWMgJGZpbGUgfCIpIHx8IGRpZSAiRmFpbGVkIHRvIHJ1biAkZXhlYyAkZmlsZSI7CisJcmV0dXJuOworICAgIH0KKyAgICBkaWUgIk5vIGNvbmZpZyBmaWxlIGZvdW5kIjsKK30KKworZmluZF9jb25maWc7CisKK215IEBtYWtlZmlsZXMgPSBgZmluZCAkbGludXhwYXRoIC1uYW1lIE1ha2VmaWxlYDsKK215ICVkZXBlbmRzOworbXkgJXNlbGVjdHM7CitteSAlcHJvbXB0czsKK215ICVvYmplY3RzOworbXkgJHZhcjsKK215ICRjb250ID0gMDsKKworIyBHZXQgdGhlIHRvcCBsZXZlbCBLY29uZmlnIGZpbGUgKHBhc3NlZCBpbikKK215ICRrY29uZmlnID0gJEFSR1ZbMF07CisKKyMgcHJldmVudCByZWN1cnNpb24KK215ICVyZWFkX2tjb25maWdzOworCitzdWIgcmVhZF9rY29uZmlnIHsKKyAgICBteSAoJGtjb25maWcpID0gQF87CisKKyAgICBteSAkc3RhdGUgPSAiTk9ORSI7CisgICAgbXkgJGNvbmZpZzsKKyAgICBteSBAa2NvbmZpZ3M7CisKKyAgICBvcGVuKEtJTiwgJGtjb25maWcpIHx8IGRpZSAiQ2FuJ3Qgb3BlbiAka2NvbmZpZyI7CisgICAgd2hpbGUgKDxLSU4+KSB7CisJY2hvbXA7CisKKwkjIGNvbGxlY3QgYW55IEtjb25maWcgc291cmNlcworCWlmICgvXnNvdXJjZVxzKiIoLiopIi8pIHsKKwkgICAgJGtjb25maWdzWyQja2NvbmZpZ3MrMV0gPSAkMTsKKwl9CisKKwkjIGNvbmZpZ3MgZm91bmQKKwlpZiAoL15ccypjb25maWdccysoXFMrKVxzKiQvKSB7CisJICAgICRzdGF0ZSA9ICJORVciOworCSAgICAkY29uZmlnID0gJDE7CisKKwkjIGNvbGxlY3QgdGhlIGRlcGVuZHMgZm9yIHRoZSBjb25maWcKKwl9IGVsc2lmICgkc3RhdGUgZXEgIk5FVyIgJiYgL15ccypkZXBlbmRzXHMrb25ccysoLiopJC8pIHsKKwkgICAgJHN0YXRlID0gIkRFUCI7CisJICAgICRkZXBlbmRzeyRjb25maWd9ID0gJDE7CisJfSBlbHNpZiAoJHN0YXRlIGVxICJERVAiICYmIC9eXHMqZGVwZW5kc1xzK29uXHMrKC4qKSQvKSB7CisJICAgICRkZXBlbmRzeyRjb25maWd9IC49ICIgIiAuICQxOworCisJIyBHZXQgdGhlIGNvbmZpZ3MgdGhhdCBzZWxlY3QgdGhpcyBjb25maWcKKwl9IGVsc2lmICgkc3RhdGUgbmUgIk5PTkUiICYmIC9eXHMqc2VsZWN0XHMrKFxTKykvKSB7CisJICAgIGlmIChkZWZpbmVkKCRzZWxlY3RzeyQxfSkpIHsKKwkJJHNlbGVjdHN7JDF9IC49ICIgIiAuICRjb25maWc7CisJICAgIH0gZWxzZSB7CisJCSRzZWxlY3RzeyQxfSA9ICRjb25maWc7CisJICAgIH0KKworCSMgY29uZmlncyB3aXRob3V0IHByb21wdHMgbXVzdCBiZSBzZWxlY3RlZAorCX0gZWxzaWYgKCRzdGF0ZSBuZSAiTk9ORSIgJiYgL15ccyp0cmlzdGF0ZVxzXFMvKSB7CisJICAgICMgbm90ZSBpZiB0aGUgY29uZmlnIGhhcyBhIHByb21wdAorCSAgICAkcHJvbXB0eyRjb25maWd9ID0gMTsKKworCSMgc3RvcCBvbiAiaGVscCIKKwl9IGVsc2lmICgvXlxzKmhlbHBccyokLykgeworCSAgICAkc3RhdGUgPSAiTk9ORSI7CisJfQorICAgIH0KKyAgICBjbG9zZShLSU4pOworCisgICAgIyByZWFkIGluIGFueSBjb25maWdzIHRoYXQgd2VyZSBmb3VuZC4KKyAgICBmb3JlYWNoICRrY29uZmlnIChAa2NvbmZpZ3MpIHsKKwlpZiAoIWRlZmluZWQoJHJlYWRfa2NvbmZpZ3N7JGtjb25maWd9KSkgeworCSAgICAkcmVhZF9rY29uZmlnc3ska2NvbmZpZ30gPSAxOworCSAgICByZWFkX2tjb25maWcoJGtjb25maWcpOworCX0KKyAgICB9Cit9CisKK2lmICgka2NvbmZpZykgeworICAgIHJlYWRfa2NvbmZpZygka2NvbmZpZyk7Cit9CisKKyMgUmVhZCBhbGwgTWFrZWZpbGVzIHRvIG1hcCB0aGUgY29uZmlncyB0byB0aGUgb2JqZWN0cworZm9yZWFjaCBteSAkbWFrZWZpbGUgKEBtYWtlZmlsZXMpIHsKKyAgICBjaG9tcCAkbWFrZWZpbGU7CisKKyAgICBvcGVuKE1JTiwkbWFrZWZpbGUpIHx8IGRpZSAiQ2FuJ3Qgb3BlbiAkbWFrZWZpbGUiOworICAgIHdoaWxlICg8TUlOPikgeworCW15ICRvYmpzOworCisJIyBpcyB0aGlzIGEgbGluZSBhZnRlciBhIGxpbmUgd2l0aCBhIGJhY2tzbGFzaD8KKwlpZiAoJGNvbnQgJiYgLyhcUy4qKSQvKSB7CisJICAgICRvYmpzID0gJDE7CisJfQorCSRjb250ID0gMDsKKworCSMgY29sbGVjdCBvYmplY3RzIGFmdGVyIG9iai0kKENPTkZJR19GT09fQkFSKQorCWlmICgvb2JqLVwkXCgoQ09ORklHX1teXCldKilcKVxzKlsrOl0/PVxzKiguKikvKSB7CisJICAgICR2YXIgPSAkMTsKKwkgICAgJG9ianMgPSAkMjsKKwl9CisJaWYgKGRlZmluZWQoJG9ianMpKSB7CisJICAgICMgdGVzdCBpZiB0aGUgbGluZSBlbmRzIHdpdGggYSBiYWNrc2xhc2gKKwkgICAgaWYgKCRvYmpzID1+IG0sKC4qKVxcJCwpIHsKKwkJJG9ianMgPSAkMTsKKwkJJGNvbnQgPSAxOworCSAgICB9CisKKwkgICAgZm9yZWFjaCBteSAkb2JqIChzcGxpdCAvXHMrLywkb2JqcykgeworCQkkb2JqID1+IHMvLS9fL2c7CisJCWlmICgkb2JqID1+IC8oLiopXC5vJC8pIHsKKwkJICAgICMgT2JqZWN0cyBtYXkgYmVzIGVuYWJsZWQgYnkgbW9yZSB0aGFuIG9uZSBjb25maWcuCisJCSAgICAjIFN0b3JlIGNvbmZpZ3MgaW4gYW4gYXJyYXkuCisJCSAgICBteSBAYXJyOworCisJCSAgICBpZiAoZGVmaW5lZCgkb2JqZWN0c3skMX0pKSB7CisJCQlAYXJyID0gQHskb2JqZWN0c3skMX19OworCQkgICAgfQorCisJCSAgICAkYXJyWyQjYXJyKzFdID0gJHZhcjsKKworCQkgICAgIyBUaGUgb2JqZWN0cyBoYXZlIGEgaGFzaCBtYXBwaW5nIHRvIGEgcmVmZXJlbmNlCisJCSAgICAjIG9mIGFuIGFycmF5IG9mIGNvbmZpZ3MuCisJCSAgICAkb2JqZWN0c3skMX0gPSBcQGFycjsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICBjbG9zZShNSU4pOworfQorCitteSAlbW9kdWxlczsKKworIyBzZWUgd2hhdCBtb2R1bGVzIGFyZSBsb2FkZWQgb24gdGhpcyBzeXN0ZW0KK29wZW4oTElOLCIvc2Jpbi9sc21vZHwiKSB8fCBkaWUgIkNhbnQgbHNtb2QiOword2hpbGUgKDxMSU4+KSB7CisJbmV4dCBpZiAoL15Nb2R1bGUvKTsgICMgU2tpcCB0aGUgZmlyc3QgbGluZS4KKwlpZiAoL14oXFMrKS8pIHsKKwkJJG1vZHVsZXN7JDF9ID0gMTsKKwl9Cit9CitjbG9zZSAoTElOKTsKKworIyBhZGQgdG8gdGhlIGNvbmZpZ3MgaGFzaCBhbGwgY29uZmlncyB0aGF0IGFyZSBuZWVkZWQgdG8gZW5hYmxlCisjIGEgbG9hZGVkIG1vZHVsZS4KK215ICVjb25maWdzOworZm9yZWFjaCBteSAkbW9kdWxlIChrZXlzKCVtb2R1bGVzKSkgeworICAgIGlmIChkZWZpbmVkKCRvYmplY3RzeyRtb2R1bGV9KSkgeworCUBhcnIgPSBAeyRvYmplY3RzeyRtb2R1bGV9fTsKKwlmb3JlYWNoIG15ICRjb25mIChAYXJyKSB7CisJICAgICRjb25maWdzeyRjb25mfSA9ICRtb2R1bGU7CisJfQorICAgIH0gZWxzZSB7CisJIyBNb3N0IGxpa2VseSwgc29tZW9uZSBoYXMgYSBjdXN0b20gKGJpbmFyeT8pIG1vZHVsZSBsb2FkZWQuCisJcHJpbnQgU1RERVJSICIkbW9kdWxlIGNvbmZpZyBub3QgZm91bmQhIVxuIjsKKyAgICB9Cit9CisKK215ICR2YWxpZCA9ICJBLVphLXpfMC05IjsKK215ICRyZXBlYXQgPSAxOworCisjCisjIE5vdGUsIHdlIGRvIG5vdCBjYXJlIGFib3V0IG9wZXJhbmRzIChsaWtlOiAmJiwgfHwsICEpIHdlIHdhbnQgdG8gYWRkIGFueQorIyBjb25maWcgdGhhdCBpcyBpbiB0aGUgZGVwZW5kIGxpc3Qgb2YgYW5vdGhlciBjb25maWcuIFRoaXMgc2NyaXB0IGRvZXMKKyMgbm90IGVuYWJsZSBjb25maWdzIHRoYXQgYXJlIG5vdCBhbHJlYWR5IGVuYWJsZWQuIElmIHdlIGNvbWUgYWNyb3NzIGEKKyMgY29uZmlnIEEgdGhhdCBkZXBlbmRzIG9uICFCLCB3ZSBjYW4gc3RpbGwgYWRkIEIgdG8gdGhlIGxpc3Qgb2YgZGVwZW5kcworIyB0byBrZWVwIG9uLiBJZiBBIHdhcyBvbiBpbiB0aGUgb3JpZ2luYWwgY29uZmlnLCBCIHdvdWxkIG5vdCBoYXZlIGJlZW4KKyMgYW5kIEIgd291bGQgbm90IGJlIHR1cm5lZCBvbiBieSB0aGlzIHNjcmlwdC4KKyMKK3N1YiBwYXJzZV9jb25maWdfZGVwX3NlbGVjdAoreworICAgIG15ICgkcCkgPSBAXzsKKworICAgIHdoaWxlICgkcCA9fiAvWyR2YWxpZF0vKSB7CisKKwlpZiAoJHAgPX4gL15bXiR2YWxpZF0qKFskdmFsaWRdKykvKSB7CisJICAgIG15ICRjb25mID0gIkNPTkZJR18iIC4gJDE7CisKKwkgICAgJHAgPX4gcy9eW14kdmFsaWRdKlskdmFsaWRdKy8vOworCisJICAgIGlmICghZGVmaW5lZCgkY29uZmlnc3skY29uZn0pKSB7CisJCSMgV2UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGlzIGNvbmZpZyBoYXMgaXRzCisJCSMgZGVwZW5kZW5jaWVzIG1ldC4KKwkJJHJlcGVhdCA9IDE7ICMgZG8gYWdhaW4KKwkJJGNvbmZpZ3N7JGNvbmZ9ID0gMTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGRpZSAidGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIjsKKwl9CisgICAgfQorfQorCit3aGlsZSAoJHJlcGVhdCkgeworICAgICRyZXBlYXQgPSAwOworCisgICAgZm9yZWFjaCBteSAkY29uZmlnIChrZXlzICVjb25maWdzKSB7CisJJGNvbmZpZyA9fiBzL15DT05GSUdfLy87CisKKwlpZiAoZGVmaW5lZCgkZGVwZW5kc3skY29uZmlnfSkpIHsKKwkgICAgIyBUaGlzIGNvbmZpZyBoYXMgZGVwZW5kZW5jaWVzLiBNYWtlIHN1cmUgdGhleSBhcmUgYWxzbyBpbmNsdWRlZAorCSAgICBwYXJzZV9jb25maWdfZGVwX3NlbGVjdCAkZGVwZW5kc3skY29uZmlnfTsKKwl9CisKKwlpZiAoZGVmaW5lZCgkcHJvbXB0eyRjb25maWd9KSB8fCAhZGVmaW5lZCgkc2VsZWN0c3skY29uZmlnfSkpIHsKKwkgICAgbmV4dDsKKwl9CisKKwkjIGNvbmZpZyBoYXMgbm8gcHJvbXB0IGFuZCBtdXN0IGJlIHNlbGVjdGVkLgorCXBhcnNlX2NvbmZpZ19kZXBfc2VsZWN0ICRzZWxlY3RzeyRjb25maWd9OworICAgIH0KK30KKworbXkgJXNldGNvbmZpZ3M7CisKKyMgRmluYWxseSwgcmVhZCB0aGUgLmNvbmZpZyBmaWxlIGFuZCB0dXJuIG9mZiBhbnkgbW9kdWxlIGVuYWJsZWQgdGhhdAorIyB3ZSBjb3VsZCBub3QgZmluZCBhIHJlYXNvbiB0byBrZWVwIGVuYWJsZWQuCit3aGlsZSg8Q0lOPikgeworCisgICAgaWYgKC9DT05GSUdfSUtDT05GSUcvKSB7CisJaWYgKC8jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0LykgeworCSAgICAjIGVuYWJsZSBJS0NPTkZJRyBhdCBsZWFzdCBhcyBhIG1vZHVsZQorCSAgICBwcmludCAiQ09ORklHX0lLQ09ORklHPW1cbiI7CisJICAgICMgZG9uJ3QgYXNrIGFib3V0IFBST0MKKwkgICAgcHJpbnQgIiMgQ09ORklHX0lLQ09ORklHX1BST0MgaXMgbm90IHNldFxuIjsKKwl9IGVsc2UgeworCSAgICBwcmludDsKKwl9CisJbmV4dDsKKyAgICB9CisKKyAgICBpZiAoL14oQ09ORklHLiopPShtfHkpLykgeworCWlmIChkZWZpbmVkKCRjb25maWdzeyQxfSkpIHsKKwkgICAgJHNldGNvbmZpZ3N7JDF9ID0gJDI7CisJfSBlbHNpZiAoJDIgZXEgIm0iKSB7CisJICAgIHByaW50ICIjICQxIGlzIG5vdCBzZXRcbiI7CisJICAgIG5leHQ7CisJfQorICAgIH0KKyAgICBwcmludDsKK30KK2Nsb3NlKENJTik7CisKKyMgSW50ZWdyaXR5IGNoZWNrLCBtYWtlIHN1cmUgYWxsIG1vZHVsZXMgdGhhdCB3ZSB3YW50IGVuYWJsZWQgZG8KKyMgaW5kZWVkIGhhdmUgdGhlaXIgY29uZmlncyBzZXQuCitsb29wOgorZm9yZWFjaCBteSAkbW9kdWxlIChrZXlzKCVtb2R1bGVzKSkgeworICAgIGlmIChkZWZpbmVkKCRvYmplY3RzeyRtb2R1bGV9KSkgeworCW15IEBhcnIgPSBAeyRvYmplY3RzeyRtb2R1bGV9fTsKKwlmb3JlYWNoIG15ICRjb25mIChAYXJyKSB7CisJICAgIGlmIChkZWZpbmVkKCRzZXRjb25maWdzeyRjb25mfSkpIHsKKwkJbmV4dCBsb29wOworCSAgICB9CisJfQorCXByaW50IFNUREVSUiAibW9kdWxlICRtb2R1bGUgZGlkIG5vdCBoYXZlIGNvbmZpZ3MiOworCWZvcmVhY2ggbXkgJGNvbmYgKEBhcnIpIHsKKwkgICAgcHJpbnQgU1RERVJSICIgIiAsICRjb25mOworCX0KKwlwcmludCBTVERFUlIgIlxuIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZHVsZS1jb21tb24ubGRzIGIvc2NyaXB0cy9tb2R1bGUtY29tbW9uLmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2ExZjlhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9tb2R1bGUtY29tbW9uLmxkcwpAQCAtMCwwICsxLDggQEAKKy8qCisgKiBDb21tb24gbW9kdWxlIGxpbmtlciBzY3JpcHQsIGFsd2F5cyB1c2VkIHdoZW4gbGlua2luZyBhIG1vZHVsZS4KKyAqIEFyY2hzIGFyZSBmcmVlIHRvIHN1cHBseSB0aGVpciBvd24gbGlua2VyIHNjcmlwdHMuICBsZCB3aWxsCisgKiBjb21iaW5lIHRoZW0gYXV0b21hdGljYWxseS4KKyAqLworU0VDVElPTlMgeworCS9ESVNDQVJELyA6IHsgKiguZGlzY2FyZCkgfQorfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWNvcmRtY291bnQucGwgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAppbmRleCA5MTFiYTdmLi4wOTBkMzAwIDEwMDc1NQotLS0gYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAorKysgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbApAQCAtNTcsNyArNTcsNiBAQAogIyAgICAgICAgY2FsbCBtY291bnQgIChvZmZzZXQ6IDB4NSkKICMgICAgICAgIFsuLi5dCiAjICAgICAgICByZXQKLSMgIC5nbG9ibCBteV9mdW5jCiAjICBvdGhlcl9mdW5jOgogIyAgICAgICAgWy4uLl0KICMgICAgICAgIGNhbGwgbWNvdW50IChvZmZzZXQ6IDB4MWIpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9LY29uZmlnIGIvc2VjdXJpdHkvS2NvbmZpZwppbmRleCA0Yzg2NTM0Li5mYjM2M2NkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9LY29uZmlnCisrKyBiL3NlY3VyaXR5L0tjb25maWcKQEAgLTExMyw2ICsxMTMsMzYgQEAKIAogCSAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi4KIAorY29uZmlnIElOVEVMX1RYVAorCWJvb2wgIkVuYWJsZSBJbnRlbChSKSBUcnVzdGVkIEV4ZWN1dGlvbiBUZWNobm9sb2d5IChJbnRlbChSKSBUWFQpIgorCWRlcGVuZHMgb24gSEFWRV9JTlRFTF9UWFQKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGJvb3RpbmcgdGhlIGtlcm5lbCB3aXRoIHRoZQorCSAgVHJ1c3RlZCBCb290ICh0Ym9vdCkgbW9kdWxlLiBUaGlzIHdpbGwgdXRpbGl6ZQorCSAgSW50ZWwoUikgVHJ1c3RlZCBFeGVjdXRpb24gVGVjaG5vbG9neSB0byBwZXJmb3JtIGEgbWVhc3VyZWQgbGF1bmNoCisJICBvZiB0aGUga2VybmVsLiBJZiB0aGUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgSW50ZWwoUikgVFhULCB0aGlzCisJICB3aWxsIGhhdmUgbm8gZWZmZWN0LgorCisJICBJbnRlbCBUWFQgd2lsbCBwcm92aWRlIGhpZ2hlciBhc3N1cmFuY2Ugb2Ygc3lzdGVtIGNvbmZpZ3VyYXRpb24gYW5kCisJICBpbml0aWFsIHN0YXRlIGFzIHdlbGwgYXMgZGF0YSByZXNldCBwcm90ZWN0aW9uLiAgVGhpcyBpcyB1c2VkIHRvCisJICBjcmVhdGUgYSByb2J1c3QgaW5pdGlhbCBrZXJuZWwgbWVhc3VyZW1lbnQgYW5kIHZlcmlmaWNhdGlvbiwgd2hpY2gKKwkgIGhlbHBzIHRvIGVuc3VyZSB0aGF0IGtlcm5lbCBzZWN1cml0eSBtZWNoYW5pc21zIGFyZSBmdW5jdGlvbmluZworCSAgY29ycmVjdGx5LiBUaGlzIGxldmVsIG9mIHByb3RlY3Rpb24gcmVxdWlyZXMgYSByb290IG9mIHRydXN0IG91dHNpZGUKKwkgIG9mIHRoZSBrZXJuZWwgaXRzZWxmLgorCisJICBJbnRlbCBUWFQgYWxzbyBoZWxwcyBzb2x2ZSByZWFsIGVuZCB1c2VyIGNvbmNlcm5zIGFib3V0IGhhdmluZworCSAgY29uZmlkZW5jZSB0aGF0IHRoZWlyIGhhcmR3YXJlIGlzIHJ1bm5pbmcgdGhlIFZNTSBvciBrZXJuZWwgdGhhdAorCSAgaXQgd2FzIGNvbmZpZ3VyZWQgd2l0aCwgZXNwZWNpYWxseSBzaW5jZSB0aGV5IG1heSBiZSByZXNwb25zaWJsZSBmb3IKKwkgIHByb3ZpZGluZyBzdWNoIGFzc3VyYW5jZXMgdG8gVk1zIGFuZCBzZXJ2aWNlcyBydW5uaW5nIG9uIGl0LgorCisJICBTZWUgPGh0dHA6Ly93d3cuaW50ZWwuY29tL3RlY2hub2xvZ3kvc2VjdXJpdHkvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorCSAgYWJvdXQgSW50ZWwoUikgVFhULgorCSAgU2VlIDxodHRwOi8vdGJvb3Quc291cmNlZm9yZ2UubmV0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0Ym9vdC4KKwkgIFNlZSBEb2N1bWVudGF0aW9uL2ludGVsX3R4dC50eHQgZm9yIGEgZGVzY3JpcHRpb24gb2YgaG93IHRvIGVuYWJsZQorCSAgSW50ZWwgVFhUIHN1cHBvcnQgaW4gYSBrZXJuZWwgYm9vdC4KKworCSAgSWYgeW91IGFyZSB1bnN1cmUgYXMgdG8gd2hldGhlciB0aGlzIGlzIHJlcXVpcmVkLCBhbnN3ZXIgTi4KKwogY29uZmlnIExTTV9NTUFQX01JTl9BRERSCiAJaW50ICJMb3cgYWRkcmVzcyBzcGFjZSBmb3IgTFNNIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb24iCiAJZGVwZW5kcyBvbiBTRUNVUklUWSAmJiBTRUNVUklUWV9TRUxJTlVYCmRpZmYgLS1naXQgYS9zZWN1cml0eS9NYWtlZmlsZSBiL3NlY3VyaXR5L01ha2VmaWxlCmluZGV4IGI1NmU3ZjkuLjk1ZWNjMDYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L01ha2VmaWxlCisrKyBiL3NlY3VyaXR5L01ha2VmaWxlCkBAIC0xNiw5ICsxNiw3IEBACiAjIE11c3QgcHJlY2VkZSBjYXBhYmlsaXR5Lm8gaW4gb3JkZXIgdG8gc3RhY2sgcHJvcGVybHkuCiBvYmotJChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWCkJCSs9IHNlbGludXgvYnVpbHQtaW4ubwogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NNQUNLKQkJKz0gc21hY2svYnVpbHQtaW4ubwotaWZlcSAoJChDT05GSUdfQVVESVQpLHkpCi1vYmotJChDT05GSUdfU0VDVVJJVFlfU01BQ0spCQkrPSBsc21fYXVkaXQubwotZW5kaWYKK29iai0kKENPTkZJR19BVURJVCkJCQkrPSBsc21fYXVkaXQubwogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTykJCSs9IHRvbW95by9idWlsdC1pbi5vCiBvYmotJChDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcpCQkrPSByb290X3BsdWcubwogb2JqLSQoQ09ORklHX0NHUk9VUF9ERVZJQ0UpCQkrPSBkZXZpY2VfY2dyb3VwLm8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2NhcGFiaWxpdHkuYyBiL3NlY3VyaXR5L2NhcGFiaWxpdHkuYwppbmRleCA4OGY3NTJlLi5mY2UwN2E3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9jYXBhYmlsaXR5LmMKKysrIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCkBAIC0zNzMsNiArMzczLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY2FwX2NyZWRfYWxsb2NfYmxhbmsoc3RydWN0IGNyZWQgKmNyZWQsIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgY2FwX2NyZWRfZnJlZShzdHJ1Y3QgY3JlZCAqY3JlZCkKIHsKIH0KQEAgLTM4Niw2ICszOTEsMTAgQEAKIHsKIH0KIAorc3RhdGljIHZvaWQgY2FwX2NyZWRfdHJhbnNmZXIoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCkKK3sKK30KKwogc3RhdGljIGludCBjYXBfa2VybmVsX2FjdF9hcyhzdHJ1Y3QgY3JlZCAqbmV3LCB1MzIgc2VjaWQpCiB7CiAJcmV0dXJuIDA7CkBAIC0zOTYsNiArNDA1LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY2FwX2tlcm5lbF9tb2R1bGVfcmVxdWVzdCh2b2lkKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGNhcF90YXNrX3NldHVpZCh1aWRfdCBpZDAsIHVpZF90IGlkMSwgdWlkX3QgaWQyLCBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIDA7CkBAIC03MDEsMTAgKzcxNSwyNiBAQAogewogfQogCisKKwogc3RhdGljIHZvaWQgY2FwX3JlcV9jbGFzc2lmeV9mbG93KGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAkJCQkgIHN0cnVjdCBmbG93aSAqZmwpCiB7CiB9CisKK3N0YXRpYyBpbnQgY2FwX3R1bl9kZXZfY3JlYXRlKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNhcF90dW5fZGV2X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrICpzaykKK3sKK30KKworc3RhdGljIGludCBjYXBfdHVuX2Rldl9hdHRhY2goc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiAwOworfQogI2VuZGlmCS8qIENPTkZJR19TRUNVUklUWV9ORVRXT1JLICovCiAKICNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNCkBAIC03OTIsNiArODIyLDIwIEBACiB7CiB9CiAKK3N0YXRpYyBpbnQgY2FwX2lub2RlX25vdGlmeXNlY2N0eChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpjdHgsIHUzMiBjdHhsZW4pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FwX2lub2RlX3NldHNlY2N0eChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHZvaWQgKmN0eCwgdTMyIGN0eGxlbikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYXBfaW5vZGVfZ2V0c2VjY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKipjdHgsIHUzMiAqY3R4bGVuKQoreworCXJldHVybiAwOworfQogI2lmZGVmIENPTkZJR19LRVlTCiBzdGF0aWMgaW50IGNhcF9rZXlfYWxsb2Moc3RydWN0IGtleSAqa2V5LCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKIAkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQpAQCAtODE1LDYgKzg1OSwxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNhcF9rZXlfc2Vzc2lvbl90b19wYXJlbnQoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqcGFyZW50X2NyZWQsCisJCQkJICAgICBzdHJ1Y3Qga2V5ICprZXkpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfS0VZUyAqLwogCiAjaWZkZWYgQ09ORklHX0FVRElUCkBAIC04NTQsNyArOTA1LDcgQEAKIAogdm9pZCBzZWN1cml0eV9maXh1cF9vcHMoc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgKm9wcykKIHsKLQlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBwdHJhY2VfbWF5X2FjY2Vzcyk7CisJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgcHRyYWNlX2FjY2Vzc19jaGVjayk7CiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgcHRyYWNlX3RyYWNlbWUpOwogCXNldF90b19jYXBfaWZfbnVsbChvcHMsIGNhcGdldCk7CiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgY2Fwc2V0KTsKQEAgLTk0MCwxMSArOTkxLDE0IEBACiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgZmlsZV9yZWNlaXZlKTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBkZW50cnlfb3Blbik7CiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgdGFza19jcmVhdGUpOworCXNldF90b19jYXBfaWZfbnVsbChvcHMsIGNyZWRfYWxsb2NfYmxhbmspOwogCXNldF90b19jYXBfaWZfbnVsbChvcHMsIGNyZWRfZnJlZSk7CiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgY3JlZF9wcmVwYXJlKTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBjcmVkX2NvbW1pdCk7CisJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgY3JlZF90cmFuc2Zlcik7CiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywga2VybmVsX2FjdF9hcyk7CiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywga2VybmVsX2NyZWF0ZV9maWxlc19hcyk7CisJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywga2VybmVsX21vZHVsZV9yZXF1ZXN0KTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCB0YXNrX3NldHVpZCk7CiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgdGFza19maXhfc2V0dWlkKTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCB0YXNrX3NldGdpZCk7CkBAIC05OTIsNiArMTA0Niw5IEBACiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgc2VjaWRfdG9fc2VjY3R4KTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBzZWNjdHhfdG9fc2VjaWQpOwogCXNldF90b19jYXBfaWZfbnVsbChvcHMsIHJlbGVhc2Vfc2VjY3R4KTsKKwlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBpbm9kZV9ub3RpZnlzZWNjdHgpOworCXNldF90b19jYXBfaWZfbnVsbChvcHMsIGlub2RlX3NldHNlY2N0eCk7CisJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgaW5vZGVfZ2V0c2VjY3R4KTsKICNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSwogCXNldF90b19jYXBfaWZfbnVsbChvcHMsIHVuaXhfc3RyZWFtX2Nvbm5lY3QpOwogCXNldF90b19jYXBfaWZfbnVsbChvcHMsIHVuaXhfbWF5X3NlbmQpOwpAQCAtMTAyMCw2ICsxMDc3LDkgQEAKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBpbmV0X2Nza19jbG9uZSk7CiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgaW5ldF9jb25uX2VzdGFibGlzaGVkKTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCByZXFfY2xhc3NpZnlfZmxvdyk7CisJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgdHVuX2Rldl9jcmVhdGUpOworCXNldF90b19jYXBfaWZfbnVsbChvcHMsIHR1bl9kZXZfcG9zdF9jcmVhdGUpOworCXNldF90b19jYXBfaWZfbnVsbChvcHMsIHR1bl9kZXZfYXR0YWNoKTsKICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyAqLwogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0KIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCB4ZnJtX3BvbGljeV9hbGxvY19zZWN1cml0eSk7CkBAIC0xMDM4LDYgKzEwOTgsNyBAQAogCXNldF90b19jYXBfaWZfbnVsbChvcHMsIGtleV9mcmVlKTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBrZXlfcGVybWlzc2lvbik7CiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywga2V5X2dldHNlY3VyaXR5KTsKKwlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBrZXlfc2Vzc2lvbl90b19wYXJlbnQpOwogI2VuZGlmCS8qIENPTkZJR19LRVlTICovCiAjaWZkZWYgQ09ORklHX0FVRElUCiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgYXVkaXRfcnVsZV9pbml0KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2NvbW1vbmNhcC5jIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKaW5kZXggZTMwOTdjMC4uZmUzMDc1MSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvY29tbW9uY2FwLmMKKysrIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogfQogCiAvKioKLSAqIGNhcF9wdHJhY2VfbWF5X2FjY2VzcyAtIERldGVybWluZSB3aGV0aGVyIHRoZSBjdXJyZW50IHByb2Nlc3MgbWF5IGFjY2VzcworICogY2FwX3B0cmFjZV9hY2Nlc3NfY2hlY2sgLSBEZXRlcm1pbmUgd2hldGhlciB0aGUgY3VycmVudCBwcm9jZXNzIG1heSBhY2Nlc3MKICAqCQkJICAgYW5vdGhlcgogICogQGNoaWxkOiBUaGUgcHJvY2VzcyB0byBiZSBhY2Nlc3NlZAogICogQG1vZGU6IFRoZSBtb2RlIG9mIGF0dGFjaG1lbnQuCkBAIC0xMDksNyArMTA5LDcgQEAKICAqIERldGVybWluZSB3aGV0aGVyIGEgcHJvY2VzcyBtYXkgYWNjZXNzIGFub3RoZXIsIHJldHVybmluZyAwIGlmIHBlcm1pc3Npb24KICAqIGdyYW50ZWQsIC12ZSBpZiBkZW5pZWQuCiAgKi8KLWludCBjYXBfcHRyYWNlX21heV9hY2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpCitpbnQgY2FwX3B0cmFjZV9hY2Nlc3NfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpCiB7CiAJaW50IHJldCA9IDA7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvTWFrZWZpbGUgYi9zZWN1cml0eS9rZXlzL01ha2VmaWxlCmluZGV4IDc0N2E0NjQuLjc0ZDU0NDcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvTWFrZWZpbGUKKysrIGIvc2VjdXJpdHkva2V5cy9NYWtlZmlsZQpAQCAtMyw2ICszLDcgQEAKICMKIAogb2JqLXkgOj0gXAorCWdjLm8gXAogCWtleS5vIFwKIAlrZXlyaW5nLm8gXAogCWtleWN0bC5vIFwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvY29tcGF0LmMgYi9zZWN1cml0eS9rZXlzL2NvbXBhdC5jCmluZGV4IGM3NjZjNjguLjc5MmMwYTYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvY29tcGF0LmMKKysrIGIvc2VjdXJpdHkva2V5cy9jb21wYXQuYwpAQCAtODIsNiArODIsOSBAQAogCWNhc2UgS0VZQ1RMX0dFVF9TRUNVUklUWToKIAkJcmV0dXJuIGtleWN0bF9nZXRfc2VjdXJpdHkoYXJnMiwgY29tcGF0X3B0cihhcmczKSwgYXJnNCk7CiAKKwljYXNlIEtFWUNUTF9TRVNTSU9OX1RPX1BBUkVOVDoKKwkJcmV0dXJuIGtleWN0bF9zZXNzaW9uX3RvX3BhcmVudCgpOworCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvZ2MuYyBiL3NlY3VyaXR5L2tleXMvZ2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODVmYzYyCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkva2V5cy9nYy5jCkBAIC0wLDAgKzEsMjE4IEBACisvKiBLZXkgZ2FyYmFnZSBjb2xsZWN0b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGtleXMva2V5cmluZy10eXBlLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyoKKyAqIERlbGF5IGJldHdlZW4ga2V5IHJldm9jYXRpb24vZXhwaXJ5IGluIHNlY29uZHMKKyAqLwordW5zaWduZWQga2V5X2djX2RlbGF5ID0gNSAqIDYwOworCisvKgorICogUmVhcGVyCisgKi8KK3N0YXRpYyB2b2lkIGtleV9nY190aW1lcl9mdW5jKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIHZvaWQga2V5X2dhcmJhZ2VfY29sbGVjdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK3N0YXRpYyBERUZJTkVfVElNRVIoa2V5X2djX3RpbWVyLCBrZXlfZ2NfdGltZXJfZnVuYywgMCwgMCk7CitzdGF0aWMgREVDTEFSRV9XT1JLKGtleV9nY193b3JrLCBrZXlfZ2FyYmFnZV9jb2xsZWN0b3IpOworc3RhdGljIGtleV9zZXJpYWxfdCBrZXlfZ2NfY3Vyc29yOyAvKiB0aGUgbGFzdCBrZXkgdGhlIGdjIGNvbnNpZGVyZWQgKi8KK3N0YXRpYyBib29sIGtleV9nY19hZ2FpbjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGtleV9nY19leGVjdXRpbmc7CitzdGF0aWMgdGltZV90IGtleV9nY19uZXh0X3J1biA9IExPTkdfTUFYOworc3RhdGljIHRpbWVfdCBrZXlfZ2NfbmV3X3RpbWVyOworCisvKgorICogU2NoZWR1bGUgYSBnYXJiYWdlIGNvbGxlY3Rpb24gcnVuCisgKiAtIHByZWNpc2lvbiBpc24ndCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50CisgKi8KK3ZvaWQga2V5X3NjaGVkdWxlX2djKHRpbWVfdCBnY19hdCkKK3sKKwl1bnNpZ25lZCBsb25nIGV4cGlyZXM7CisJdGltZV90IG5vdyA9IGN1cnJlbnRfa2VybmVsX3RpbWUoKS50dl9zZWM7CisKKwlrZW50ZXIoIiVsZCIsIGdjX2F0IC0gbm93KTsKKworCWlmIChnY19hdCA8PSBub3cpIHsKKwkJc2NoZWR1bGVfd29yaygma2V5X2djX3dvcmspOworCX0gZWxzZSBpZiAoZ2NfYXQgPCBrZXlfZ2NfbmV4dF9ydW4pIHsKKwkJZXhwaXJlcyA9IGppZmZpZXMgKyAoZ2NfYXQgLSBub3cpICogSFo7CisJCW1vZF90aW1lcigma2V5X2djX3RpbWVyLCBleHBpcmVzKTsKKwl9Cit9CisKKy8qCisgKiBUaGUgZ2FyYmFnZSBjb2xsZWN0b3IgdGltZXIga2lja2VkIG9mZgorICovCitzdGF0aWMgdm9pZCBrZXlfZ2NfdGltZXJfZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJa2VudGVyKCIiKTsKKwlrZXlfZ2NfbmV4dF9ydW4gPSBMT05HX01BWDsKKwlzY2hlZHVsZV93b3JrKCZrZXlfZ2Nfd29yayk7Cit9CisKKy8qCisgKiBHYXJiYWdlIGNvbGxlY3QgcG9pbnRlcnMgZnJvbSBhIGtleXJpbmcKKyAqIC0gcmV0dXJuIHRydWUgaWYgd2UgYWx0ZXJlZCB0aGUga2V5cmluZworICovCitzdGF0aWMgYm9vbCBrZXlfZ2Nfa2V5cmluZyhzdHJ1Y3Qga2V5ICprZXlyaW5nLCB0aW1lX3QgbGltaXQpCisJX19yZWxlYXNlcyhrZXlfc2VyaWFsX2xvY2spCit7CisJc3RydWN0IGtleXJpbmdfbGlzdCAqa2xpc3Q7CisJc3RydWN0IGtleSAqa2V5OworCWludCBsb29wOworCisJa2VudGVyKCIleCIsIGtleV9zZXJpYWwoa2V5cmluZykpOworCisJaWYgKHRlc3RfYml0KEtFWV9GTEFHX1JFVk9LRUQsICZrZXlyaW5nLT5mbGFncykpCisJCWdvdG8gZG9udF9nYzsKKworCS8qIHNjYW4gdGhlIGtleXJpbmcgbG9va2luZyBmb3IgZGVhZCBrZXlzICovCisJa2xpc3QgPSByY3VfZGVyZWZlcmVuY2Uoa2V5cmluZy0+cGF5bG9hZC5zdWJzY3JpcHRpb25zKTsKKwlpZiAoIWtsaXN0KQorCQlnb3RvIGRvbnRfZ2M7CisKKwlmb3IgKGxvb3AgPSBrbGlzdC0+bmtleXMgLSAxOyBsb29wID49IDA7IGxvb3AtLSkgeworCQlrZXkgPSBrbGlzdC0+a2V5c1tsb29wXTsKKwkJaWYgKHRlc3RfYml0KEtFWV9GTEFHX0RFQUQsICZrZXktPmZsYWdzKSB8fAorCQkgICAgKGtleS0+ZXhwaXJ5ID4gMCAmJiBrZXktPmV4cGlyeSA8PSBsaW1pdCkpCisJCQlnb3RvIGRvX2djOworCX0KKworZG9udF9nYzoKKwlrbGVhdmUoIiA9IGZhbHNlIik7CisJcmV0dXJuIGZhbHNlOworCitkb19nYzoKKwlrZXlfZ2NfY3Vyc29yID0ga2V5cmluZy0+c2VyaWFsOworCWtleV9nZXQoa2V5cmluZyk7CisJc3Bpbl91bmxvY2soJmtleV9zZXJpYWxfbG9jayk7CisJa2V5cmluZ19nYyhrZXlyaW5nLCBsaW1pdCk7CisJa2V5X3B1dChrZXlyaW5nKTsKKwlrbGVhdmUoIiA9IHRydWUiKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEdhcmJhZ2UgY29sbGVjdG9yIGZvciBrZXlzCisgKiAtIHRoaXMgaW52b2x2ZXMgc2Nhbm5pbmcgdGhlIGtleXJpbmdzIGZvciBkZWFkLCBleHBpcmVkIGFuZCByZXZva2VkIGtleXMKKyAqICAgdGhhdCBoYXZlIG92ZXJzdGF5ZWQgdGhlaXIgd2VsY29tZQorICovCitzdGF0aWMgdm9pZCBrZXlfZ2FyYmFnZV9jb2xsZWN0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByYl9ub2RlICpyYjsKKwlrZXlfc2VyaWFsX3QgY3Vyc29yOworCXN0cnVjdCBrZXkgKmtleSwgKnhrZXk7CisJdGltZV90IG5ld190aW1lciA9IExPTkdfTUFYLCBsaW1pdCwgbm93OworCisJbm93ID0gY3VycmVudF9rZXJuZWxfdGltZSgpLnR2X3NlYzsKKwlrZW50ZXIoIlsleCwlbGRdIiwga2V5X2djX2N1cnNvciwga2V5X2djX25ld190aW1lciAtIG5vdyk7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAma2V5X2djX2V4ZWN1dGluZykpIHsKKwkJa2V5X3NjaGVkdWxlX2djKGN1cnJlbnRfa2VybmVsX3RpbWUoKS50dl9zZWMgKyAxKTsKKwkJa2xlYXZlKCIgW2J1c3k7IGRlZmVycmluZ10iKTsKKwkJcmV0dXJuOworCX0KKworCWxpbWl0ID0gbm93OworCWlmIChsaW1pdCA+IGtleV9nY19kZWxheSkKKwkJbGltaXQgLT0ga2V5X2djX2RlbGF5OworCWVsc2UKKwkJbGltaXQgPSBrZXlfZ2NfZGVsYXk7CisKKwlzcGluX2xvY2soJmtleV9zZXJpYWxfbG9jayk7CisKKwlpZiAodW5saWtlbHkoUkJfRU1QVFlfUk9PVCgma2V5X3NlcmlhbF90cmVlKSkpIHsKKwkJc3Bpbl91bmxvY2soJmtleV9zZXJpYWxfbG9jayk7CisJCWNsZWFyX2JpdCgwLCAma2V5X2djX2V4ZWN1dGluZyk7CisJCXJldHVybjsKKwl9CisKKwljdXJzb3IgPSBrZXlfZ2NfY3Vyc29yOworCWlmIChjdXJzb3IgPCAwKQorCQljdXJzb3IgPSAwOworCWlmIChjdXJzb3IgPiAwKQorCQluZXdfdGltZXIgPSBrZXlfZ2NfbmV3X3RpbWVyOworCWVsc2UKKwkJa2V5X2djX2FnYWluID0gZmFsc2U7CisKKwkvKiBmaW5kIHRoZSBmaXJzdCBrZXkgYWJvdmUgdGhlIGN1cnNvciAqLworCWtleSA9IE5VTEw7CisJcmIgPSBrZXlfc2VyaWFsX3RyZWUucmJfbm9kZTsKKwl3aGlsZSAocmIpIHsKKwkJeGtleSA9IHJiX2VudHJ5KHJiLCBzdHJ1Y3Qga2V5LCBzZXJpYWxfbm9kZSk7CisJCWlmIChjdXJzb3IgPCB4a2V5LT5zZXJpYWwpIHsKKwkJCWtleSA9IHhrZXk7CisJCQlyYiA9IHJiLT5yYl9sZWZ0OworCQl9IGVsc2UgaWYgKGN1cnNvciA+IHhrZXktPnNlcmlhbCkgeworCQkJcmIgPSByYi0+cmJfcmlnaHQ7CisJCX0gZWxzZSB7CisJCQlyYiA9IHJiX25leHQocmIpOworCQkJaWYgKCFyYikKKwkJCQlnb3RvIHJlYWNoZWRfdGhlX2VuZDsKKwkJCWtleSA9IHJiX2VudHJ5KHJiLCBzdHJ1Y3Qga2V5LCBzZXJpYWxfbm9kZSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICgha2V5KQorCQlnb3RvIHJlYWNoZWRfdGhlX2VuZDsKKworCS8qIHRyYXdsIHRocm91Z2ggdGhlIGtleXMgbG9va2luZyBmb3Iga2V5cmluZ3MgKi8KKwlmb3IgKDs7KSB7CisJCWlmIChrZXktPmV4cGlyeSA+IG5vdyAmJiBrZXktPmV4cGlyeSA8IG5ld190aW1lcikgeworCQkJa2RlYnVnKCJ3aWxsIGV4cGlyZSAleCBpbiAlbGQiLAorCQkJICAgICAgIGtleV9zZXJpYWwoa2V5KSwga2V5LT5leHBpcnkgLSBub3cpOworCQkJbmV3X3RpbWVyID0ga2V5LT5leHBpcnk7CisJCX0KKworCQlpZiAoa2V5LT50eXBlID09ICZrZXlfdHlwZV9rZXlyaW5nICYmCisJCSAgICBrZXlfZ2Nfa2V5cmluZyhrZXksIGxpbWl0KSkKKwkJCS8qIHRoZSBnYyBoYWQgdG8gcmVsZWFzZSBvdXIgbG9jayBzbyB0aGF0IHRoZSBrZXlyaW5nCisJCQkgKiBjb3VsZCBiZSBtb2RpZmllZCwgc28gd2UgaGF2ZSB0byBnZXQgaXQgYWdhaW4gKi8KKwkJCWdvdG8gZ2NfcmVsZWFzZWRfb3VyX2xvY2s7CisKKwkJcmIgPSByYl9uZXh0KCZrZXktPnNlcmlhbF9ub2RlKTsKKwkJaWYgKCFyYikKKwkJCWdvdG8gcmVhY2hlZF90aGVfZW5kOworCQlrZXkgPSByYl9lbnRyeShyYiwgc3RydWN0IGtleSwgc2VyaWFsX25vZGUpOworCX0KKworZ2NfcmVsZWFzZWRfb3VyX2xvY2s6CisJa2RlYnVnKCJnY19yZWxlYXNlZF9vdXJfbG9jayIpOworCWtleV9nY19uZXdfdGltZXIgPSBuZXdfdGltZXI7CisJa2V5X2djX2FnYWluID0gdHJ1ZTsKKwljbGVhcl9iaXQoMCwgJmtleV9nY19leGVjdXRpbmcpOworCXNjaGVkdWxlX3dvcmsoJmtleV9nY193b3JrKTsKKwlrbGVhdmUoIiBbY29udGludWVdIik7CisJcmV0dXJuOworCisJLyogd2hlbiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBydW4sIHdlIHNldCB0aGUgdGltZXIgZm9yIHRoZSBuZXh0IG9uZSAqLworcmVhY2hlZF90aGVfZW5kOgorCWtkZWJ1ZygicmVhY2hlZF90aGVfZW5kIik7CisJc3Bpbl91bmxvY2soJmtleV9zZXJpYWxfbG9jayk7CisJa2V5X2djX25ld190aW1lciA9IG5ld190aW1lcjsKKwlrZXlfZ2NfY3Vyc29yID0gMDsKKwljbGVhcl9iaXQoMCwgJmtleV9nY19leGVjdXRpbmcpOworCisJaWYgKGtleV9nY19hZ2FpbikgeworCQkvKiB0aGVyZSBtYXkgaGF2ZSBiZWVuIGEga2V5IHRoYXQgZXhwaXJlZCB3aGlsc3Qgd2Ugd2VyZQorCQkgKiBzY2FubmluZywgc28gaWYgd2UgZGlzY2FyZGVkIGFueSBsaW5rcyB3ZSBzaG91bGQgZG8gYW5vdGhlcgorCQkgKiBzY2FuICovCisJCW5ld190aW1lciA9IG5vdyArIDE7CisJCWtleV9zY2hlZHVsZV9nYyhuZXdfdGltZXIpOworCX0gZWxzZSBpZiAobmV3X3RpbWVyIDwgTE9OR19NQVgpIHsKKwkJbmV3X3RpbWVyICs9IGtleV9nY19kZWxheTsKKwkJa2V5X3NjaGVkdWxlX2djKG5ld190aW1lcik7CisJfQorCWtsZWF2ZSgiIFtlbmRdIik7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2ludGVybmFsLmggYi9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKaW5kZXggOWZiNjc5Yy4uMjRiYTAzMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCisrKyBiL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaApAQCAtMTI0LDExICsxMjQsMTggQEAKIAkJCQkJc3RydWN0IGtleSAqZGVzdF9rZXlyaW5nLAogCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzKTsKIAotZXh0ZXJuIGtleV9yZWZfdCBsb29rdXBfdXNlcl9rZXkoa2V5X3NlcmlhbF90IGlkLCBpbnQgY3JlYXRlLCBpbnQgcGFydGlhbCwKK2V4dGVybiBrZXlfcmVmX3QgbG9va3VwX3VzZXJfa2V5KGtleV9zZXJpYWxfdCBpZCwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJCQkga2V5X3Blcm1fdCBwZXJtKTsKKyNkZWZpbmUgS0VZX0xPT0tVUF9DUkVBVEUJMHgwMQorI2RlZmluZSBLRVlfTE9PS1VQX1BBUlRJQUwJMHgwMgorI2RlZmluZSBLRVlfTE9PS1VQX0ZPUl9VTkxJTksJMHgwNAogCiBleHRlcm4gbG9uZyBqb2luX3Nlc3Npb25fa2V5cmluZyhjb25zdCBjaGFyICpuYW1lKTsKIAorZXh0ZXJuIHVuc2lnbmVkIGtleV9nY19kZWxheTsKK2V4dGVybiB2b2lkIGtleXJpbmdfZ2Moc3RydWN0IGtleSAqa2V5cmluZywgdGltZV90IGxpbWl0KTsKK2V4dGVybiB2b2lkIGtleV9zY2hlZHVsZV9nYyh0aW1lX3QgZXhwaXJ5X2F0KTsKKwogLyoKICAqIGNoZWNrIHRvIHNlZSB3aGV0aGVyIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byB1c2UgYSBrZXkgaW4gdGhlIGRlc2lyZWQgd2F5CiAgKi8KQEAgLTE5NCw2ICsyMDEsNyBAQAogZXh0ZXJuIGxvbmcga2V5Y3RsX2Fzc3VtZV9hdXRob3JpdHkoa2V5X3NlcmlhbF90KTsKIGV4dGVybiBsb25nIGtleWN0bF9nZXRfc2VjdXJpdHkoa2V5X3NlcmlhbF90IGtleWlkLCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkJCXNpemVfdCBidWZsZW4pOworZXh0ZXJuIGxvbmcga2V5Y3RsX3Nlc3Npb25fdG9fcGFyZW50KHZvaWQpOwogCiAvKgogICogZGVidWdnaW5nIGtleSB2YWxpZGF0aW9uCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleS5jIGIvc2VjdXJpdHkva2V5cy9rZXkuYwppbmRleCA0YTEyOTdkLi5lNTBkMjY0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleS5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5LmMKQEAgLTUwMCw2ICs1MDAsNyBAQAogCQlzZXRfYml0KEtFWV9GTEFHX0lOU1RBTlRJQVRFRCwgJmtleS0+ZmxhZ3MpOwogCQlub3cgPSBjdXJyZW50X2tlcm5lbF90aW1lKCk7CiAJCWtleS0+ZXhwaXJ5ID0gbm93LnR2X3NlYyArIHRpbWVvdXQ7CisJCWtleV9zY2hlZHVsZV9nYyhrZXktPmV4cGlyeSArIGtleV9nY19kZWxheSk7CiAKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLRVlfRkxBR19VU0VSX0NPTlNUUlVDVCwgJmtleS0+ZmxhZ3MpKQogCQkJYXdha2VuID0gMTsKQEAgLTY0MiwxMCArNjQzLDggQEAKIAlnb3RvIGVycm9yOwogCiAgZm91bmQ6Ci0JLyogcHJldGVuZCBpdCBkb2Vzbid0IGV4aXN0IGlmIGl0J3MgZGVhZCAqLwotCWlmIChhdG9taWNfcmVhZCgma2V5LT51c2FnZSkgPT0gMCB8fAotCSAgICB0ZXN0X2JpdChLRVlfRkxBR19ERUFELCAma2V5LT5mbGFncykgfHwKLQkgICAga2V5LT50eXBlID09ICZrZXlfdHlwZV9kZWFkKQorCS8qIHByZXRlbmQgaXQgZG9lc24ndCBleGlzdCBpZiBpdCBpcyBhd2FpdGluZyBkZWxldGlvbiAqLworCWlmIChhdG9taWNfcmVhZCgma2V5LT51c2FnZSkgPT0gMCkKIAkJZ290byBub3RfZm91bmQ7CiAKIAkvKiB0aGlzIHJhY2VzIHdpdGgga2V5X3B1dCgpLCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlciBzaW5jZSBrZXlfcHV0KCkKQEAgLTg5MCw2ICs4ODksOSBAQAogICovCiB2b2lkIGtleV9yZXZva2Uoc3RydWN0IGtleSAqa2V5KQogeworCXN0cnVjdCB0aW1lc3BlYyBub3c7CisJdGltZV90IHRpbWU7CisKIAlrZXlfY2hlY2soa2V5KTsKIAogCS8qIG1ha2Ugc3VyZSBubyBvbmUncyB0cnlpbmcgdG8gY2hhbmdlIG9yIHVzZSB0aGUga2V5IHdoZW4gd2UgbWFyayBpdApAQCAtOTAyLDYgKzkwNCwxNCBAQAogCSAgICBrZXktPnR5cGUtPnJldm9rZSkKIAkJa2V5LT50eXBlLT5yZXZva2Uoa2V5KTsKIAorCS8qIHNldCB0aGUgZGVhdGggdGltZSB0byBubyBtb3JlIHRoYW4gdGhlIGV4cGlyeSB0aW1lICovCisJbm93ID0gY3VycmVudF9rZXJuZWxfdGltZSgpOworCXRpbWUgPSBub3cudHZfc2VjOworCWlmIChrZXktPnJldm9rZWRfYXQgPT0gMCB8fCBrZXktPnJldm9rZWRfYXQgPiB0aW1lKSB7CisJCWtleS0+cmV2b2tlZF9hdCA9IHRpbWU7CisJCWtleV9zY2hlZHVsZV9nYyhrZXktPnJldm9rZWRfYXQgKyBrZXlfZ2NfZGVsYXkpOworCX0KKwogCXVwX3dyaXRlKCZrZXktPnNlbSk7CiAKIH0gLyogZW5kIGtleV9yZXZva2UoKSAqLwpAQCAtOTU4LDggKzk2OCwxMCBAQAogCWZvciAoX24gPSByYl9maXJzdCgma2V5X3NlcmlhbF90cmVlKTsgX247IF9uID0gcmJfbmV4dChfbikpIHsKIAkJa2V5ID0gcmJfZW50cnkoX24sIHN0cnVjdCBrZXksIHNlcmlhbF9ub2RlKTsKIAotCQlpZiAoa2V5LT50eXBlID09IGt0eXBlKQorCQlpZiAoa2V5LT50eXBlID09IGt0eXBlKSB7CiAJCQlrZXktPnR5cGUgPSAma2V5X3R5cGVfZGVhZDsKKwkJCXNldF9iaXQoS0VZX0ZMQUdfREVBRCwgJmtleS0+ZmxhZ3MpOworCQl9CiAJfQogCiAJc3Bpbl91bmxvY2soJmtleV9zZXJpYWxfbG9jayk7CkBAIC05ODQsNiArOTk2LDggQEAKIAlzcGluX3VubG9jaygma2V5X3NlcmlhbF9sb2NrKTsKIAl1cF93cml0ZSgma2V5X3R5cGVzX3NlbSk7CiAKKwlrZXlfc2NoZWR1bGVfZ2MoMCk7CisKIH0gLyogZW5kIHVucmVnaXN0ZXJfa2V5X3R5cGUoKSAqLwogCiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfa2V5X3R5cGUpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKaW5kZXggN2YwOWZiOC4uMmZiMjhlZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYworKysgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAl9CiAKIAkvKiBmaW5kIHRoZSB0YXJnZXQga2V5cmluZyAod2hpY2ggbXVzdCBiZSB3cml0YWJsZSkgKi8KLQlrZXlyaW5nX3JlZiA9IGxvb2t1cF91c2VyX2tleShyaW5naWQsIDEsIDAsIEtFWV9XUklURSk7CisJa2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkocmluZ2lkLCBLRVlfTE9PS1VQX0NSRUFURSwgS0VZX1dSSVRFKTsKIAlpZiAoSVNfRVJSKGtleXJpbmdfcmVmKSkgewogCQlyZXQgPSBQVFJfRVJSKGtleXJpbmdfcmVmKTsKIAkJZ290byBlcnJvcjM7CkBAIC0xODUsNyArMTg1LDggQEAKIAkvKiBnZXQgdGhlIGRlc3RpbmF0aW9uIGtleXJpbmcgaWYgc3BlY2lmaWVkICovCiAJZGVzdF9yZWYgPSBOVUxMOwogCWlmIChkZXN0cmluZ2lkKSB7Ci0JCWRlc3RfcmVmID0gbG9va3VwX3VzZXJfa2V5KGRlc3RyaW5naWQsIDEsIDAsIEtFWV9XUklURSk7CisJCWRlc3RfcmVmID0gbG9va3VwX3VzZXJfa2V5KGRlc3RyaW5naWQsIEtFWV9MT09LVVBfQ1JFQVRFLAorCQkJCQkgICBLRVlfV1JJVEUpOwogCQlpZiAoSVNfRVJSKGRlc3RfcmVmKSkgewogCQkJcmV0ID0gUFRSX0VSUihkZXN0X3JlZik7CiAJCQlnb3RvIGVycm9yMzsKQEAgLTIzMyw5ICsyMzQsMTEgQEAKIGxvbmcga2V5Y3RsX2dldF9rZXlyaW5nX0lEKGtleV9zZXJpYWxfdCBpZCwgaW50IGNyZWF0ZSkKIHsKIAlrZXlfcmVmX3Qga2V5X3JlZjsKKwl1bnNpZ25lZCBsb25nIGxmbGFnczsKIAlsb25nIHJldDsKIAotCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoaWQsIGNyZWF0ZSwgMCwgS0VZX1NFQVJDSCk7CisJbGZsYWdzID0gY3JlYXRlID8gS0VZX0xPT0tVUF9DUkVBVEUgOiAwOworCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoaWQsIGxmbGFncywgS0VZX1NFQVJDSCk7CiAJaWYgKElTX0VSUihrZXlfcmVmKSkgewogCQlyZXQgPSBQVFJfRVJSKGtleV9yZWYpOwogCQlnb3RvIGVycm9yOwpAQCAtMzA5LDcgKzMxMiw3IEBACiAJfQogCiAJLyogZmluZCB0aGUgdGFyZ2V0IGtleSAod2hpY2ggbXVzdCBiZSB3cml0YWJsZSkgKi8KLQlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGlkLCAwLCAwLCBLRVlfV1JJVEUpOworCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoaWQsIDAsIEtFWV9XUklURSk7CiAJaWYgKElTX0VSUihrZXlfcmVmKSkgewogCQlyZXQgPSBQVFJfRVJSKGtleV9yZWYpOwogCQlnb3RvIGVycm9yMjsKQEAgLTMzNywxMCArMzQwLDE2IEBACiAJa2V5X3JlZl90IGtleV9yZWY7CiAJbG9uZyByZXQ7CiAKLQlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGlkLCAwLCAwLCBLRVlfV1JJVEUpOworCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoaWQsIDAsIEtFWV9XUklURSk7CiAJaWYgKElTX0VSUihrZXlfcmVmKSkgewogCQlyZXQgPSBQVFJfRVJSKGtleV9yZWYpOwotCQlnb3RvIGVycm9yOworCQlpZiAocmV0ICE9IC1FQUNDRVMpCisJCQlnb3RvIGVycm9yOworCQlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGlkLCAwLCBLRVlfU0VUQVRUUik7CisJCWlmIChJU19FUlIoa2V5X3JlZikpIHsKKwkJCXJldCA9IFBUUl9FUlIoa2V5X3JlZik7CisJCQlnb3RvIGVycm9yOworCQl9CiAJfQogCiAJa2V5X3Jldm9rZShrZXlfcmVmX3RvX3B0cihrZXlfcmVmKSk7CkBAIC0zNjMsNyArMzcyLDcgQEAKIAlrZXlfcmVmX3Qga2V5cmluZ19yZWY7CiAJbG9uZyByZXQ7CiAKLQlrZXlyaW5nX3JlZiA9IGxvb2t1cF91c2VyX2tleShyaW5naWQsIDEsIDAsIEtFWV9XUklURSk7CisJa2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkocmluZ2lkLCBLRVlfTE9PS1VQX0NSRUFURSwgS0VZX1dSSVRFKTsKIAlpZiAoSVNfRVJSKGtleXJpbmdfcmVmKSkgewogCQlyZXQgPSBQVFJfRVJSKGtleXJpbmdfcmVmKTsKIAkJZ290byBlcnJvcjsKQEAgLTM4OSwxMyArMzk4LDEzIEBACiAJa2V5X3JlZl90IGtleXJpbmdfcmVmLCBrZXlfcmVmOwogCWxvbmcgcmV0OwogCi0Ja2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkocmluZ2lkLCAxLCAwLCBLRVlfV1JJVEUpOworCWtleXJpbmdfcmVmID0gbG9va3VwX3VzZXJfa2V5KHJpbmdpZCwgS0VZX0xPT0tVUF9DUkVBVEUsIEtFWV9XUklURSk7CiAJaWYgKElTX0VSUihrZXlyaW5nX3JlZikpIHsKIAkJcmV0ID0gUFRSX0VSUihrZXlyaW5nX3JlZik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0Ja2V5X3JlZiA9IGxvb2t1cF91c2VyX2tleShpZCwgMSwgMCwgS0VZX0xJTkspOworCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoaWQsIEtFWV9MT09LVVBfQ1JFQVRFLCBLRVlfTElOSyk7CiAJaWYgKElTX0VSUihrZXlfcmVmKSkgewogCQlyZXQgPSBQVFJfRVJSKGtleV9yZWYpOwogCQlnb3RvIGVycm9yMjsKQEAgLTQyMywxMyArNDMyLDEzIEBACiAJa2V5X3JlZl90IGtleXJpbmdfcmVmLCBrZXlfcmVmOwogCWxvbmcgcmV0OwogCi0Ja2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkocmluZ2lkLCAwLCAwLCBLRVlfV1JJVEUpOworCWtleXJpbmdfcmVmID0gbG9va3VwX3VzZXJfa2V5KHJpbmdpZCwgMCwgS0VZX1dSSVRFKTsKIAlpZiAoSVNfRVJSKGtleXJpbmdfcmVmKSkgewogCQlyZXQgPSBQVFJfRVJSKGtleXJpbmdfcmVmKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGlkLCAwLCAwLCAwKTsKKwlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGlkLCBLRVlfTE9PS1VQX0ZPUl9VTkxJTkssIDApOwogCWlmIChJU19FUlIoa2V5X3JlZikpIHsKIAkJcmV0ID0gUFRSX0VSUihrZXlfcmVmKTsKIAkJZ290byBlcnJvcjI7CkBAIC00NjUsNyArNDc0LDcgQEAKIAljaGFyICp0bXBidWY7CiAJbG9uZyByZXQ7CiAKLQlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGtleWlkLCAwLCAxLCBLRVlfVklFVyk7CisJa2V5X3JlZiA9IGxvb2t1cF91c2VyX2tleShrZXlpZCwgS0VZX0xPT0tVUF9QQVJUSUFMLCBLRVlfVklFVyk7CiAJaWYgKElTX0VSUihrZXlfcmVmKSkgewogCQkvKiB2aWV3aW5nIGEga2V5IHVuZGVyIGNvbnN0cnVjdGlvbiBpcyBwZXJtaXR0ZWQgaWYgd2UgaGF2ZSB0aGUKIAkJICogYXV0aG9yaXNhdGlvbiB0b2tlbiBoYW5keSAqLwpAQCAtNDc0LDcgKzQ4Myw4IEBACiAJCQlpZiAoIUlTX0VSUihpbnN0a2V5KSkgewogCQkJCWtleV9wdXQoaW5zdGtleSk7CiAJCQkJa2V5X3JlZiA9IGxvb2t1cF91c2VyX2tleShrZXlpZCwKLQkJCQkJCQkgIDAsIDEsIDApOworCQkJCQkJCSAgS0VZX0xPT0tVUF9QQVJUSUFMLAorCQkJCQkJCSAgMCk7CiAJCQkJaWYgKCFJU19FUlIoa2V5X3JlZikpCiAJCQkJCWdvdG8gb2theTsKIAkJCX0KQEAgLTU1OCw3ICs1NjgsNyBAQAogCX0KIAogCS8qIGdldCB0aGUga2V5cmluZyBhdCB3aGljaCB0byBiZWdpbiB0aGUgc2VhcmNoICovCi0Ja2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkocmluZ2lkLCAwLCAwLCBLRVlfU0VBUkNIKTsKKwlrZXlyaW5nX3JlZiA9IGxvb2t1cF91c2VyX2tleShyaW5naWQsIDAsIEtFWV9TRUFSQ0gpOwogCWlmIChJU19FUlIoa2V5cmluZ19yZWYpKSB7CiAJCXJldCA9IFBUUl9FUlIoa2V5cmluZ19yZWYpOwogCQlnb3RvIGVycm9yMjsKQEAgLTU2Nyw3ICs1NzcsOCBAQAogCS8qIGdldCB0aGUgZGVzdGluYXRpb24ga2V5cmluZyBpZiBzcGVjaWZpZWQgKi8KIAlkZXN0X3JlZiA9IE5VTEw7CiAJaWYgKGRlc3RyaW5naWQpIHsKLQkJZGVzdF9yZWYgPSBsb29rdXBfdXNlcl9rZXkoZGVzdHJpbmdpZCwgMSwgMCwgS0VZX1dSSVRFKTsKKwkJZGVzdF9yZWYgPSBsb29rdXBfdXNlcl9rZXkoZGVzdHJpbmdpZCwgS0VZX0xPT0tVUF9DUkVBVEUsCisJCQkJCSAgIEtFWV9XUklURSk7CiAJCWlmIChJU19FUlIoZGVzdF9yZWYpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKGRlc3RfcmVmKTsKIAkJCWdvdG8gZXJyb3IzOwpAQCAtNjM3LDcgKzY0OCw3IEBACiAJbG9uZyByZXQ7CiAKIAkvKiBmaW5kIHRoZSBrZXkgZmlyc3QgKi8KLQlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGtleWlkLCAwLCAwLCAwKTsKKwlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGtleWlkLCAwLCAwKTsKIAlpZiAoSVNfRVJSKGtleV9yZWYpKSB7CiAJCXJldCA9IC1FTk9LRVk7CiAJCWdvdG8gZXJyb3I7CkBAIC03MDAsNyArNzExLDggQEAKIAlpZiAodWlkID09ICh1aWRfdCkgLTEgJiYgZ2lkID09IChnaWRfdCkgLTEpCiAJCWdvdG8gZXJyb3I7CiAKLQlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGlkLCAxLCAxLCBLRVlfU0VUQVRUUik7CisJa2V5X3JlZiA9IGxvb2t1cF91c2VyX2tleShpZCwgS0VZX0xPT0tVUF9DUkVBVEUgfCBLRVlfTE9PS1VQX1BBUlRJQUwsCisJCQkJICBLRVlfU0VUQVRUUik7CiAJaWYgKElTX0VSUihrZXlfcmVmKSkgewogCQlyZXQgPSBQVFJfRVJSKGtleV9yZWYpOwogCQlnb3RvIGVycm9yOwpAQCAtODA1LDcgKzgxNyw4IEBACiAJaWYgKHBlcm0gJiB+KEtFWV9QT1NfQUxMIHwgS0VZX1VTUl9BTEwgfCBLRVlfR1JQX0FMTCB8IEtFWV9PVEhfQUxMKSkKIAkJZ290byBlcnJvcjsKIAotCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoaWQsIDEsIDEsIEtFWV9TRVRBVFRSKTsKKwlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGlkLCBLRVlfTE9PS1VQX0NSRUFURSB8IEtFWV9MT09LVVBfUEFSVElBTCwKKwkJCQkgIEtFWV9TRVRBVFRSKTsKIAlpZiAoSVNfRVJSKGtleV9yZWYpKSB7CiAJCXJldCA9IFBUUl9FUlIoa2V5X3JlZik7CiAJCWdvdG8gZXJyb3I7CkBAIC04NDcsNyArODYwLDcgQEAKIAogCS8qIGlmIGEgc3BlY2lmaWMga2V5cmluZyBpcyBub21pbmF0ZWQgYnkgSUQsIHRoZW4gdXNlIHRoYXQgKi8KIAlpZiAocmluZ2lkID4gMCkgewotCQlka3JlZiA9IGxvb2t1cF91c2VyX2tleShyaW5naWQsIDEsIDAsIEtFWV9XUklURSk7CisJCWRrcmVmID0gbG9va3VwX3VzZXJfa2V5KHJpbmdpZCwgS0VZX0xPT0tVUF9DUkVBVEUsIEtFWV9XUklURSk7CiAJCWlmIChJU19FUlIoZGtyZWYpKQogCQkJcmV0dXJuIFBUUl9FUlIoZGtyZWYpOwogCQkqX2Rlc3Rfa2V5cmluZyA9IGtleV9yZWZfdG9fcHRyKGRrcmVmKTsKQEAgLTEwODMsNyArMTA5Niw4IEBACiAJdGltZV90IGV4cGlyeTsKIAlsb25nIHJldDsKIAotCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoaWQsIDEsIDEsIEtFWV9TRVRBVFRSKTsKKwlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGlkLCBLRVlfTE9PS1VQX0NSRUFURSB8IEtFWV9MT09LVVBfUEFSVElBTCwKKwkJCQkgIEtFWV9TRVRBVFRSKTsKIAlpZiAoSVNfRVJSKGtleV9yZWYpKSB7CiAJCXJldCA9IFBUUl9FUlIoa2V5X3JlZik7CiAJCWdvdG8gZXJyb3I7CkBAIC0xMTAxLDYgKzExMTUsNyBAQAogCX0KIAogCWtleS0+ZXhwaXJ5ID0gZXhwaXJ5OworCWtleV9zY2hlZHVsZV9nYyhrZXktPmV4cGlyeSArIGtleV9nY19kZWxheSk7CiAKIAl1cF93cml0ZSgma2V5LT5zZW0pOwogCWtleV9wdXQoa2V5KTsKQEAgLTExNzAsNyArMTE4NSw3IEBACiAJY2hhciAqY29udGV4dDsKIAlsb25nIHJldDsKIAotCWtleV9yZWYgPSBsb29rdXBfdXNlcl9rZXkoa2V5aWQsIDAsIDEsIEtFWV9WSUVXKTsKKwlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGtleWlkLCBLRVlfTE9PS1VQX1BBUlRJQUwsIEtFWV9WSUVXKTsKIAlpZiAoSVNfRVJSKGtleV9yZWYpKSB7CiAJCWlmIChQVFJfRVJSKGtleV9yZWYpICE9IC1FQUNDRVMpCiAJCQlyZXR1cm4gUFRSX0VSUihrZXlfcmVmKTsKQEAgLTExODIsNyArMTE5Nyw3IEBACiAJCQlyZXR1cm4gUFRSX0VSUihrZXlfcmVmKTsKIAkJa2V5X3B1dChpbnN0a2V5KTsKIAotCQlrZXlfcmVmID0gbG9va3VwX3VzZXJfa2V5KGtleWlkLCAwLCAxLCAwKTsKKwkJa2V5X3JlZiA9IGxvb2t1cF91c2VyX2tleShrZXlpZCwgS0VZX0xPT0tVUF9QQVJUSUFMLCAwKTsKIAkJaWYgKElTX0VSUihrZXlfcmVmKSkKIAkJCXJldHVybiBQVFJfRVJSKGtleV9yZWYpOwogCX0KQEAgLTEyMTMsNiArMTIyOCwxMDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogYXR0ZW1wdCB0byBpbnN0YWxsIHRoZSBjYWxsaW5nIHByb2Nlc3MncyBzZXNzaW9uIGtleXJpbmcgb24gdGhlIHByb2Nlc3MncworICogcGFyZW50IHByb2Nlc3MKKyAqIC0gdGhlIGtleXJpbmcgbXVzdCBleGlzdCBhbmQgbXVzdCBncmFudCB1cyBMSU5LIHBlcm1pc3Npb24KKyAqIC0gaW1wbGVtZW50cyBrZXljdGwoS0VZQ1RMX1NFU1NJT05fVE9fUEFSRU5UKQorICovCitsb25nIGtleWN0bF9zZXNzaW9uX3RvX3BhcmVudCh2b2lkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWUsICpwYXJlbnQ7CisJY29uc3Qgc3RydWN0IGNyZWQgKm15Y3JlZCwgKnBjcmVkOworCXN0cnVjdCBjcmVkICpjcmVkLCAqb2xkY3JlZDsKKwlrZXlfcmVmX3Qga2V5cmluZ19yOworCWludCByZXQ7CisKKwlrZXlyaW5nX3IgPSBsb29rdXBfdXNlcl9rZXkoS0VZX1NQRUNfU0VTU0lPTl9LRVlSSU5HLCAwLCBLRVlfTElOSyk7CisJaWYgKElTX0VSUihrZXlyaW5nX3IpKQorCQlyZXR1cm4gUFRSX0VSUihrZXlyaW5nX3IpOworCisJLyogb3VyIHBhcmVudCBpcyBnb2luZyB0byBuZWVkIGEgbmV3IGNyZWQgc3RydWN0LCBhIG5ldyB0Z2NyZWQgc3RydWN0CisJICogYW5kIG5ldyBzZWN1cml0eSBkYXRhLCBzbyB3ZSBhbGxvY2F0ZSB0aGVtIGhlcmUgdG8gcHJldmVudCBFTk9NRU0gaW4KKwkgKiBvdXIgcGFyZW50ICovCisJcmV0ID0gLUVOT01FTTsKKwljcmVkID0gY3JlZF9hbGxvY19ibGFuaygpOworCWlmICghY3JlZCkKKwkJZ290byBlcnJvcl9rZXlyaW5nOworCisJY3JlZC0+dGdjcmVkLT5zZXNzaW9uX2tleXJpbmcgPSBrZXlfcmVmX3RvX3B0cihrZXlyaW5nX3IpOworCWtleXJpbmdfciA9IE5VTEw7CisKKwltZSA9IGN1cnJlbnQ7CisJd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworCisJcGFyZW50ID0gbWUtPnJlYWxfcGFyZW50OworCXJldCA9IC1FUEVSTTsKKworCS8qIHRoZSBwYXJlbnQgbXVzdG4ndCBiZSBpbml0IGFuZCBtdXN0bid0IGJlIGEga2VybmVsIHRocmVhZCAqLworCWlmIChwYXJlbnQtPnBpZCA8PSAxIHx8ICFwYXJlbnQtPm1tKQorCQlnb3RvIG5vdF9wZXJtaXR0ZWQ7CisKKwkvKiB0aGUgcGFyZW50IG11c3QgYmUgc2luZ2xlIHRocmVhZGVkICovCisJaWYgKGF0b21pY19yZWFkKCZwYXJlbnQtPnNpZ25hbC0+Y291bnQpICE9IDEpCisJCWdvdG8gbm90X3Blcm1pdHRlZDsKKworCS8qIHRoZSBwYXJlbnQgYW5kIHRoZSBjaGlsZCBtdXN0IGhhdmUgZGlmZmVyZW50IHNlc3Npb24ga2V5cmluZ3Mgb3IKKwkgKiB0aGVyZSdzIG5vIHBvaW50ICovCisJbXljcmVkID0gY3VycmVudF9jcmVkKCk7CisJcGNyZWQgPSBfX3Rhc2tfY3JlZChwYXJlbnQpOworCWlmIChteWNyZWQgPT0gcGNyZWQgfHwKKwkgICAgbXljcmVkLT50Z2NyZWQtPnNlc3Npb25fa2V5cmluZyA9PSBwY3JlZC0+dGdjcmVkLT5zZXNzaW9uX2tleXJpbmcpCisJCWdvdG8gYWxyZWFkeV9zYW1lOworCisJLyogdGhlIHBhcmVudCBtdXN0IGhhdmUgdGhlIHNhbWUgZWZmZWN0aXZlIG93bmVyc2hpcCBhbmQgbXVzdG4ndCBiZQorCSAqIFNVSUQvU0dJRCAqLworCWlmIChwY3JlZC0+IHVpZAkhPSBteWNyZWQtPmV1aWQJfHwKKwkgICAgcGNyZWQtPmV1aWQJIT0gbXljcmVkLT5ldWlkCXx8CisJICAgIHBjcmVkLT5zdWlkCSE9IG15Y3JlZC0+ZXVpZAl8fAorCSAgICBwY3JlZC0+IGdpZAkhPSBteWNyZWQtPmVnaWQJfHwKKwkgICAgcGNyZWQtPmVnaWQJIT0gbXljcmVkLT5lZ2lkCXx8CisJICAgIHBjcmVkLT5zZ2lkCSE9IG15Y3JlZC0+ZWdpZCkKKwkJZ290byBub3RfcGVybWl0dGVkOworCisJLyogdGhlIGtleXJpbmdzIG11c3QgaGF2ZSB0aGUgc2FtZSBVSUQgKi8KKwlpZiAocGNyZWQgLT50Z2NyZWQtPnNlc3Npb25fa2V5cmluZy0+dWlkICE9IG15Y3JlZC0+ZXVpZCB8fAorCSAgICBteWNyZWQtPnRnY3JlZC0+c2Vzc2lvbl9rZXlyaW5nLT51aWQgIT0gbXljcmVkLT5ldWlkKQorCQlnb3RvIG5vdF9wZXJtaXR0ZWQ7CisKKwkvKiB0aGUgTFNNIG11c3QgcGVybWl0IHRoZSByZXBsYWNlbWVudCBvZiB0aGUgcGFyZW50J3Mga2V5cmluZyB3aXRoIHRoZQorCSAqIGtleXJpbmcgZnJvbSB0aGlzIHByb2Nlc3MgKi8KKwlyZXQgPSBzZWN1cml0eV9rZXlfc2Vzc2lvbl90b19wYXJlbnQobXljcmVkLCBwY3JlZCwKKwkJCQkJICAgICBrZXlfcmVmX3RvX3B0cihrZXlyaW5nX3IpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBub3RfcGVybWl0dGVkOworCisJLyogaWYgdGhlcmUncyBhbiBhbHJlYWR5IHBlbmRpbmcga2V5cmluZyByZXBsYWNlbWVudCwgdGhlbiB3ZSByZXBsYWNlCisJICogdGhhdCAqLworCW9sZGNyZWQgPSBwYXJlbnQtPnJlcGxhY2VtZW50X3Nlc3Npb25fa2V5cmluZzsKKworCS8qIHRoZSByZXBsYWNlbWVudCBzZXNzaW9uIGtleXJpbmcgaXMgYXBwbGllZCBqdXN0IHByaW9yIHRvIHVzZXJzcGFjZQorCSAqIHJlc3RhcnRpbmcgKi8KKwlwYXJlbnQtPnJlcGxhY2VtZW50X3Nlc3Npb25fa2V5cmluZyA9IGNyZWQ7CisJY3JlZCA9IE5VTEw7CisJc2V0X3RpX3RocmVhZF9mbGFnKHRhc2tfdGhyZWFkX2luZm8ocGFyZW50KSwgVElGX05PVElGWV9SRVNVTUUpOworCisJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CisJaWYgKG9sZGNyZWQpCisJCXB1dF9jcmVkKG9sZGNyZWQpOworCXJldHVybiAwOworCithbHJlYWR5X3NhbWU6CisJcmV0ID0gMDsKK25vdF9wZXJtaXR0ZWQ6CisJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CisJcHV0X2NyZWQoY3JlZCk7CisJcmV0dXJuIHJldDsKKworZXJyb3Jfa2V5cmluZzoKKwlrZXlfcmVmX3B1dChrZXlyaW5nX3IpOworCXJldHVybiByZXQ7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiB0aGUga2V5IGNvbnRyb2wgc3lzdGVtIGNhbGwKQEAgLTEyOTgsNiArMTQxMyw5IEBACiAJCQkJCSAgIChjaGFyIF9fdXNlciAqKSBhcmczLAogCQkJCQkgICAoc2l6ZV90KSBhcmc0KTsKIAorCWNhc2UgS0VZQ1RMX1NFU1NJT05fVE9fUEFSRU5UOgorCQlyZXR1cm4ga2V5Y3RsX3Nlc3Npb25fdG9fcGFyZW50KCk7CisKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwppbmRleCAzZGJhODFjLi44ZWMwMjc0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYworKysgYi9zZWN1cml0eS9rZXlzL2tleXJpbmcuYwpAQCAtMTAwMCwzICsxMDAwLDEwMiBAQAogCX0KIAogfSAvKiBlbmQga2V5cmluZ19yZXZva2UoKSAqLworCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBrZXkgaXMgZGVhZAorICovCitzdGF0aWMgYm9vbCBrZXlfaXNfZGVhZChzdHJ1Y3Qga2V5ICprZXksIHRpbWVfdCBsaW1pdCkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoS0VZX0ZMQUdfREVBRCwgJmtleS0+ZmxhZ3MpIHx8CisJCShrZXktPmV4cGlyeSA+IDAgJiYga2V5LT5leHBpcnkgPD0gbGltaXQpOworfQorCisvKgorICogQ29sbGVjdCBnYXJiYWdlIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEga2V5cmluZworICovCit2b2lkIGtleXJpbmdfZ2Moc3RydWN0IGtleSAqa2V5cmluZywgdGltZV90IGxpbWl0KQoreworCXN0cnVjdCBrZXlyaW5nX2xpc3QgKmtsaXN0LCAqbmV3OworCXN0cnVjdCBrZXkgKmtleTsKKwlpbnQgbG9vcCwga2VlcCwgbWF4OworCisJa2VudGVyKCJ7JXgsJXN9Iiwga2V5X3NlcmlhbChrZXlyaW5nKSwga2V5cmluZy0+ZGVzY3JpcHRpb24pOworCisJZG93bl93cml0ZSgma2V5cmluZy0+c2VtKTsKKworCWtsaXN0ID0ga2V5cmluZy0+cGF5bG9hZC5zdWJzY3JpcHRpb25zOworCWlmICgha2xpc3QpCisJCWdvdG8gbm9fa2xpc3Q7CisKKwkvKiB3b3JrIG91dCBob3cgbWFueSBzdWJzY3JpcHRpb25zIHdlJ3JlIGtlZXBpbmcgKi8KKwlrZWVwID0gMDsKKwlmb3IgKGxvb3AgPSBrbGlzdC0+bmtleXMgLSAxOyBsb29wID49IDA7IGxvb3AtLSkKKwkJaWYgKCFrZXlfaXNfZGVhZChrbGlzdC0+a2V5c1tsb29wXSwgbGltaXQpKQorCQkJa2VlcCsrOworCisJaWYgKGtlZXAgPT0ga2xpc3QtPm5rZXlzKQorCQlnb3RvIGp1c3RfcmV0dXJuOworCisJLyogYWxsb2NhdGUgYSBuZXcga2V5cmluZyBwYXlsb2FkICovCisJbWF4ID0gcm91bmR1cChrZWVwLCA0KTsKKwluZXcgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5cmluZ19saXN0KSArIG1heCAqIHNpemVvZihzdHJ1Y3Qga2V5ICopLAorCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ldykKKwkJZ290byBub21lbTsKKwluZXctPm1heGtleXMgPSBtYXg7CisJbmV3LT5ua2V5cyA9IDA7CisJbmV3LT5kZWxrZXkgPSAwOworCisJLyogaW5zdGFsbCB0aGUgbGl2ZSBrZXlzCisJICogLSBtdXN0IHRha2UgY2FyZSBhcyBleHBpcmVkIGtleXMgbWF5IGJlIHVwZGF0ZWQgYmFjayB0byBsaWZlCisJICovCisJa2VlcCA9IDA7CisJZm9yIChsb29wID0ga2xpc3QtPm5rZXlzIC0gMTsgbG9vcCA+PSAwOyBsb29wLS0pIHsKKwkJa2V5ID0ga2xpc3QtPmtleXNbbG9vcF07CisJCWlmICgha2V5X2lzX2RlYWQoa2V5LCBsaW1pdCkpIHsKKwkJCWlmIChrZWVwID49IG1heCkKKwkJCQlnb3RvIGRpc2NhcmRfbmV3OworCQkJbmV3LT5rZXlzW2tlZXArK10gPSBrZXlfZ2V0KGtleSk7CisJCX0KKwl9CisJbmV3LT5ua2V5cyA9IGtlZXA7CisKKwkvKiBhZGp1c3QgdGhlIHF1b3RhICovCisJa2V5X3BheWxvYWRfcmVzZXJ2ZShrZXlyaW5nLAorCQkJICAgIHNpemVvZihzdHJ1Y3Qga2V5cmluZ19saXN0KSArCisJCQkgICAgS0VZUVVPVEFfTElOS19CWVRFUyAqIGtlZXApOworCisJaWYgKGtlZXAgPT0gMCkgeworCQlyY3VfYXNzaWduX3BvaW50ZXIoa2V5cmluZy0+cGF5bG9hZC5zdWJzY3JpcHRpb25zLCBOVUxMKTsKKwkJa2ZyZWUobmV3KTsKKwl9IGVsc2UgeworCQlyY3VfYXNzaWduX3BvaW50ZXIoa2V5cmluZy0+cGF5bG9hZC5zdWJzY3JpcHRpb25zLCBuZXcpOworCX0KKworCXVwX3dyaXRlKCZrZXlyaW5nLT5zZW0pOworCisJY2FsbF9yY3UoJmtsaXN0LT5yY3UsIGtleXJpbmdfY2xlYXJfcmN1X2Rpc3Bvc2FsKTsKKwlrbGVhdmUoIiBbeWVzXSIpOworCXJldHVybjsKKworZGlzY2FyZF9uZXc6CisJbmV3LT5ua2V5cyA9IGtlZXA7CisJa2V5cmluZ19jbGVhcl9yY3VfZGlzcG9zYWwoJm5ldy0+cmN1KTsKKwl1cF93cml0ZSgma2V5cmluZy0+c2VtKTsKKwlrbGVhdmUoIiBbZGlzY2FyZF0iKTsKKwlyZXR1cm47CisKK2p1c3RfcmV0dXJuOgorCXVwX3dyaXRlKCZrZXlyaW5nLT5zZW0pOworCWtsZWF2ZSgiIFtubyBkZWFkXSIpOworCXJldHVybjsKKworbm9fa2xpc3Q6CisJdXBfd3JpdGUoJmtleXJpbmctPnNlbSk7CisJa2xlYXZlKCIgW25vX2tsaXN0XSIpOworCXJldHVybjsKKworbm9tZW06CisJdXBfd3JpdGUoJmtleXJpbmctPnNlbSk7CisJa2xlYXZlKCIgW29vbV0iKTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcHJvYy5jIGIvc2VjdXJpdHkva2V5cy9wcm9jLmMKaW5kZXggNzY5ZjliZC4uOWQwMTAyMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9wcm9jLmMKKysrIGIvc2VjdXJpdHkva2V5cy9wcm9jLmMKQEAgLTkxLDU5ICs5MSw5NCBAQAogICovCiAjaWZkZWYgQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTCiAKLXN0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqX19rZXlfc2VyaWFsX25leHQoc3RydWN0IHJiX25vZGUgKm4pCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKmtleV9zZXJpYWxfbmV4dChzdHJ1Y3QgcmJfbm9kZSAqbikKIHsKKwlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMgPSBjdXJyZW50X3VzZXJfbnMoKTsKKworCW4gPSByYl9uZXh0KG4pOwogCXdoaWxlIChuKSB7CiAJCXN0cnVjdCBrZXkgKmtleSA9IHJiX2VudHJ5KG4sIHN0cnVjdCBrZXksIHNlcmlhbF9ub2RlKTsKLQkJaWYgKGtleS0+dXNlci0+dXNlcl9ucyA9PSBjdXJyZW50X3VzZXJfbnMoKSkKKwkJaWYgKGtleS0+dXNlci0+dXNlcl9ucyA9PSB1c2VyX25zKQogCQkJYnJlYWs7CiAJCW4gPSByYl9uZXh0KG4pOwogCX0KIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIHN0cnVjdCByYl9ub2RlICprZXlfc2VyaWFsX25leHQoc3RydWN0IHJiX25vZGUgKm4pCi17Ci0JcmV0dXJuIF9fa2V5X3NlcmlhbF9uZXh0KHJiX25leHQobikpOwotfQotCi1zdGF0aWMgc3RydWN0IHJiX25vZGUgKmtleV9zZXJpYWxfZmlyc3Qoc3RydWN0IHJiX3Jvb3QgKnIpCi17Ci0Jc3RydWN0IHJiX25vZGUgKm4gPSByYl9maXJzdChyKTsKLQlyZXR1cm4gX19rZXlfc2VyaWFsX25leHQobik7Ci19Ci0KIHN0YXRpYyBpbnQgcHJvY19rZXlzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZwcm9jX2tleXNfb3BzKTsKK30KIAorc3RhdGljIHN0cnVjdCBrZXkgKmZpbmRfZ2Vfa2V5KGtleV9zZXJpYWxfdCBpZCkKK3sKKwlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMgPSBjdXJyZW50X3VzZXJfbnMoKTsKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IGtleV9zZXJpYWxfdHJlZS5yYl9ub2RlOworCXN0cnVjdCBrZXkgKm1pbmtleSA9IE5VTEw7CisKKwl3aGlsZSAobikgeworCQlzdHJ1Y3Qga2V5ICprZXkgPSByYl9lbnRyeShuLCBzdHJ1Y3Qga2V5LCBzZXJpYWxfbm9kZSk7CisJCWlmIChpZCA8IGtleS0+c2VyaWFsKSB7CisJCQlpZiAoIW1pbmtleSB8fCBtaW5rZXktPnNlcmlhbCA+IGtleS0+c2VyaWFsKQorCQkJCW1pbmtleSA9IGtleTsKKwkJCW4gPSBuLT5yYl9sZWZ0OworCQl9IGVsc2UgaWYgKGlkID4ga2V5LT5zZXJpYWwpIHsKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwkJfSBlbHNlIHsKKwkJCW1pbmtleSA9IGtleTsKKwkJCWJyZWFrOworCQl9CisJCWtleSA9IE5VTEw7CisJfQorCisJaWYgKCFtaW5rZXkpCisJCXJldHVybiBOVUxMOworCisJZm9yICg7OykgeworCQlpZiAobWlua2V5LT51c2VyLT51c2VyX25zID09IHVzZXJfbnMpCisJCQlyZXR1cm4gbWlua2V5OworCQluID0gcmJfbmV4dCgmbWlua2V5LT5zZXJpYWxfbm9kZSk7CisJCWlmICghbikKKwkJCXJldHVybiBOVUxMOworCQltaW5rZXkgPSByYl9lbnRyeShuLCBzdHJ1Y3Qga2V5LCBzZXJpYWxfbm9kZSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCAqcHJvY19rZXlzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcCwgbG9mZl90ICpfcG9zKQorCV9fYWNxdWlyZXMoa2V5X3NlcmlhbF9sb2NrKQogewotCXN0cnVjdCByYl9ub2RlICpfcDsKLQlsb2ZmX3QgcG9zID0gKl9wb3M7CisJa2V5X3NlcmlhbF90IHBvcyA9ICpfcG9zOworCXN0cnVjdCBrZXkgKmtleTsKIAogCXNwaW5fbG9jaygma2V5X3NlcmlhbF9sb2NrKTsKIAotCV9wID0ga2V5X3NlcmlhbF9maXJzdCgma2V5X3NlcmlhbF90cmVlKTsKLQl3aGlsZSAocG9zID4gMCAmJiBfcCkgewotCQlwb3MtLTsKLQkJX3AgPSBrZXlfc2VyaWFsX25leHQoX3ApOwotCX0KKwlpZiAoKl9wb3MgPiBJTlRfTUFYKQorCQlyZXR1cm4gTlVMTDsKKwlrZXkgPSBmaW5kX2dlX2tleShwb3MpOworCWlmICgha2V5KQorCQlyZXR1cm4gTlVMTDsKKwkqX3BvcyA9IGtleS0+c2VyaWFsOworCXJldHVybiAma2V5LT5zZXJpYWxfbm9kZTsKK30KIAotCXJldHVybiBfcDsKLQorc3RhdGljIGlubGluZSBrZXlfc2VyaWFsX3Qga2V5X25vZGVfc2VyaWFsKHN0cnVjdCByYl9ub2RlICpuKQoreworCXN0cnVjdCBrZXkgKmtleSA9IHJiX2VudHJ5KG4sIHN0cnVjdCBrZXksIHNlcmlhbF9ub2RlKTsKKwlyZXR1cm4ga2V5LT5zZXJpYWw7CiB9CiAKIHN0YXRpYyB2b2lkICpwcm9jX2tleXNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYsIGxvZmZfdCAqX3BvcykKIHsKLQkoKl9wb3MpKys7Ci0JcmV0dXJuIGtleV9zZXJpYWxfbmV4dCgoc3RydWN0IHJiX25vZGUgKikgdik7CisJc3RydWN0IHJiX25vZGUgKm47CiAKKwluID0ga2V5X3NlcmlhbF9uZXh0KHYpOworCWlmIChuKQorCQkqX3BvcyA9IGtleV9ub2RlX3NlcmlhbChuKTsKKwlyZXR1cm4gbjsKIH0KIAogc3RhdGljIHZvaWQgcHJvY19rZXlzX3N0b3Aoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoa2V5X3NlcmlhbF9sb2NrKQogewogCXNwaW5fdW5sb2NrKCZrZXlfc2VyaWFsX2xvY2spOwogfQpAQCAtMTc0LDExICsyMDksOSBAQAogCS8qIGNvbWUgdXAgd2l0aCBhIHN1aXRhYmxlIHRpbWVvdXQgdmFsdWUgKi8KIAlpZiAoa2V5LT5leHBpcnkgPT0gMCkgewogCQltZW1jcHkoeGJ1ZiwgInBlcm0iLCA1KTsKLQl9Ci0JZWxzZSBpZiAobm93LnR2X3NlYyA+PSBrZXktPmV4cGlyeSkgeworCX0gZWxzZSBpZiAobm93LnR2X3NlYyA+PSBrZXktPmV4cGlyeSkgewogCQltZW1jcHkoeGJ1ZiwgImV4cGQiLCA1KTsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJdGltbyA9IGtleS0+ZXhwaXJ5IC0gbm93LnR2X3NlYzsKIAogCQlpZiAodGltbyA8IDYwKQpAQCAtMjE4LDkgKzI1MSw3IEBACiAJc2VxX3B1dGMobSwgJ1xuJyk7CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKLQogCXJldHVybiAwOwotCiB9CiAKICNlbmRpZiAvKiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVMgKi8KQEAgLTI0Niw2ICsyNzcsNyBAQAogCXN0cnVjdCByYl9ub2RlICpuID0gcmJfZmlyc3Qocik7CiAJcmV0dXJuIF9fa2V5X3VzZXJfbmV4dChuKTsKIH0KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKICAqIGltcGxlbWVudCAiL3Byb2Mva2V5LXVzZXJzIiB0byBwcm92aWRlcyBhIGxpc3Qgb2YgdGhlIGtleSB1c2VycwpAQCAtMjUzLDEwICsyODUsMTAgQEAKIHN0YXRpYyBpbnQgcHJvY19rZXlfdXNlcnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnByb2Nfa2V5X3VzZXJzX29wcyk7Ci0KIH0KIAogc3RhdGljIHZvaWQgKnByb2Nfa2V5X3VzZXJzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcCwgbG9mZl90ICpfcG9zKQorCV9fYWNxdWlyZXMoa2V5X3VzZXJfbG9jaykKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqX3A7CiAJbG9mZl90IHBvcyA9ICpfcG9zOwpAQCAtMjcwLDE3ICszMDIsMTYgQEAKIAl9CiAKIAlyZXR1cm4gX3A7Ci0KIH0KIAogc3RhdGljIHZvaWQgKnByb2Nfa2V5X3VzZXJzX25leHQoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2LCBsb2ZmX3QgKl9wb3MpCiB7CiAJKCpfcG9zKSsrOwogCXJldHVybiBrZXlfdXNlcl9uZXh0KChzdHJ1Y3QgcmJfbm9kZSAqKSB2KTsKLQogfQogCiBzdGF0aWMgdm9pZCBwcm9jX2tleV91c2Vyc19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKGtleV91c2VyX2xvY2spCiB7CiAJc3Bpbl91bmxvY2soJmtleV91c2VyX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYyBiL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKaW5kZXggMjc2ZDI3OC4uNWMyM2FmYiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9wcm9jZXNzX2tleXMuYworKysgYi9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNlcl9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCkBAIC00ODcsNyArNDg4LDcgQEAKICAqIC0gZG9uJ3QgY3JlYXRlIHNwZWNpYWwga2V5cmluZ3MgdW5sZXNzIHNvIHJlcXVlc3RlZAogICogLSBwYXJ0aWFsbHkgY29uc3RydWN0ZWQga2V5cyBhcmVuJ3QgZm91bmQgdW5sZXNzIHJlcXVlc3RlZAogICovCi1rZXlfcmVmX3QgbG9va3VwX3VzZXJfa2V5KGtleV9zZXJpYWxfdCBpZCwgaW50IGNyZWF0ZSwgaW50IHBhcnRpYWwsCitrZXlfcmVmX3QgbG9va3VwX3VzZXJfa2V5KGtleV9zZXJpYWxfdCBpZCwgdW5zaWduZWQgbG9uZyBsZmxhZ3MsCiAJCQkgIGtleV9wZXJtX3QgcGVybSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9rZXlfYXV0aCAqcmthOwpAQCAtNTAzLDcgKzUwNCw3IEBACiAJc3dpdGNoIChpZCkgewogCWNhc2UgS0VZX1NQRUNfVEhSRUFEX0tFWVJJTkc6CiAJCWlmICghY3JlZC0+dGhyZWFkX2tleXJpbmcpIHsKLQkJCWlmICghY3JlYXRlKQorCQkJaWYgKCEobGZsYWdzICYgS0VZX0xPT0tVUF9DUkVBVEUpKQogCQkJCWdvdG8gZXJyb3I7CiAKIAkJCXJldCA9IGluc3RhbGxfdGhyZWFkX2tleXJpbmcoKTsKQEAgLTUyMSw3ICs1MjIsNyBAQAogCiAJY2FzZSBLRVlfU1BFQ19QUk9DRVNTX0tFWVJJTkc6CiAJCWlmICghY3JlZC0+dGdjcmVkLT5wcm9jZXNzX2tleXJpbmcpIHsKLQkJCWlmICghY3JlYXRlKQorCQkJaWYgKCEobGZsYWdzICYgS0VZX0xPT0tVUF9DUkVBVEUpKQogCQkJCWdvdG8gZXJyb3I7CiAKIAkJCXJldCA9IGluc3RhbGxfcHJvY2Vzc19rZXlyaW5nKCk7CkBAIC02NDIsNyArNjQzLDE0IEBACiAJCWJyZWFrOwogCX0KIAotCWlmICghcGFydGlhbCkgeworCS8qIHVubGluayBkb2VzIG5vdCB1c2UgdGhlIG5vbWluYXRlZCBrZXkgaW4gYW55IHdheSwgc28gY2FuIHNraXAgYWxsCisJICogdGhlIHBlcm1pc3Npb24gY2hlY2tzIGFzIGl0IGlzIG9ubHkgY29uY2VybmVkIHdpdGggdGhlIGtleXJpbmcgKi8KKwlpZiAobGZsYWdzICYgS0VZX0xPT0tVUF9GT1JfVU5MSU5LKSB7CisJCXJldCA9IDA7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKCEobGZsYWdzICYgS0VZX0xPT0tVUF9QQVJUSUFMKSkgewogCQlyZXQgPSB3YWl0X2Zvcl9rZXlfY29uc3RydWN0aW9uKGtleSwgdHJ1ZSk7CiAJCXN3aXRjaCAocmV0KSB7CiAJCWNhc2UgLUVSRVNUQVJUU1lTOgpAQCAtNjYwLDcgKzY2OCw4IEBACiAJfQogCiAJcmV0ID0gLUVJTzsKLQlpZiAoIXBhcnRpYWwgJiYgIXRlc3RfYml0KEtFWV9GTEFHX0lOU1RBTlRJQVRFRCwgJmtleS0+ZmxhZ3MpKQorCWlmICghKGxmbGFncyAmIEtFWV9MT09LVVBfUEFSVElBTCkgJiYKKwkgICAgIXRlc3RfYml0KEtFWV9GTEFHX0lOU1RBTlRJQVRFRCwgJmtleS0+ZmxhZ3MpKQogCQlnb3RvIGludmFsaWRfa2V5OwogCiAJLyogY2hlY2sgdGhlIHBlcm1pc3Npb25zICovCkBAIC03MDIsNyArNzExLDcgQEAKIAkvKiBvbmx5IHBlcm1pdCB0aGlzIGlmIHRoZXJlJ3MgYSBzaW5nbGUgdGhyZWFkIGluIHRoZSB0aHJlYWQgZ3JvdXAgLQogCSAqIHRoaXMgYXZvaWRzIHVzIGhhdmluZyB0byBhZGp1c3QgdGhlIGNyZWRzIG9uIGFsbCB0aHJlYWRzIGFuZCByaXNraW5nCiAJICogRU5PTUVNICovCi0JaWYgKCFpc19zaW5nbGVfdGhyZWFkZWQoY3VycmVudCkpCisJaWYgKCFjdXJyZW50X2lzX3NpbmdsZV90aHJlYWRlZCgpKQogCQlyZXR1cm4gLUVNTElOSzsKIAogCW5ldyA9IHByZXBhcmVfY3JlZHMoKTsKQEAgLTc2MCwzICs3NjksNTEgQEAKIAlhYm9ydF9jcmVkcyhuZXcpOwogCXJldHVybiByZXQ7CiB9CisKKy8qCisgKiBSZXBsYWNlIGEgcHJvY2VzcydzIHNlc3Npb24ga2V5cmluZyB3aGVuIHRoYXQgcHJvY2VzcyByZXN1bWVzIHVzZXJzcGFjZSBvbgorICogYmVoYWxmIG9mIG9uZSBvZiBpdHMgY2hpbGRyZW4KKyAqLwordm9pZCBrZXlfcmVwbGFjZV9zZXNzaW9uX2tleXJpbmcodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgY3JlZCAqb2xkOworCXN0cnVjdCBjcmVkICpuZXc7CisKKwlpZiAoIWN1cnJlbnQtPnJlcGxhY2VtZW50X3Nlc3Npb25fa2V5cmluZykKKwkJcmV0dXJuOworCisJd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworCW5ldyA9IGN1cnJlbnQtPnJlcGxhY2VtZW50X3Nlc3Npb25fa2V5cmluZzsKKwljdXJyZW50LT5yZXBsYWNlbWVudF9zZXNzaW9uX2tleXJpbmcgPSBOVUxMOworCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworCisJaWYgKCFuZXcpCisJCXJldHVybjsKKworCW9sZCA9IGN1cnJlbnRfY3JlZCgpOworCW5ldy0+ICB1aWQJPSBvbGQtPiAgdWlkOworCW5ldy0+IGV1aWQJPSBvbGQtPiBldWlkOworCW5ldy0+IHN1aWQJPSBvbGQtPiBzdWlkOworCW5ldy0+ZnN1aWQJPSBvbGQtPmZzdWlkOworCW5ldy0+ICBnaWQJPSBvbGQtPiAgZ2lkOworCW5ldy0+IGVnaWQJPSBvbGQtPiBlZ2lkOworCW5ldy0+IHNnaWQJPSBvbGQtPiBzZ2lkOworCW5ldy0+ZnNnaWQJPSBvbGQtPmZzZ2lkOworCW5ldy0+dXNlcgk9IGdldF91aWQob2xkLT51c2VyKTsKKwluZXctPmdyb3VwX2luZm8JPSBnZXRfZ3JvdXBfaW5mbyhvbGQtPmdyb3VwX2luZm8pOworCisJbmV3LT5zZWN1cmViaXRzCT0gb2xkLT5zZWN1cmViaXRzOworCW5ldy0+Y2FwX2luaGVyaXRhYmxlCT0gb2xkLT5jYXBfaW5oZXJpdGFibGU7CisJbmV3LT5jYXBfcGVybWl0dGVkCT0gb2xkLT5jYXBfcGVybWl0dGVkOworCW5ldy0+Y2FwX2VmZmVjdGl2ZQk9IG9sZC0+Y2FwX2VmZmVjdGl2ZTsKKwluZXctPmNhcF9ic2V0CQk9IG9sZC0+Y2FwX2JzZXQ7CisKKwluZXctPmppdF9rZXlyaW5nCT0gb2xkLT5qaXRfa2V5cmluZzsKKwluZXctPnRocmVhZF9rZXlyaW5nCT0ga2V5X2dldChvbGQtPnRocmVhZF9rZXlyaW5nKTsKKwluZXctPnRnY3JlZC0+dGdpZAk9IG9sZC0+dGdjcmVkLT50Z2lkOworCW5ldy0+dGdjcmVkLT5wcm9jZXNzX2tleXJpbmcgPSBrZXlfZ2V0KG9sZC0+dGdjcmVkLT5wcm9jZXNzX2tleXJpbmcpOworCisJc2VjdXJpdHlfdHJhbnNmZXJfY3JlZHMobmV3LCBvbGQpOworCisJY29tbWl0X2NyZWRzKG5ldyk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3N5c2N0bC5jIGIvc2VjdXJpdHkva2V5cy9zeXNjdGwuYwppbmRleCBiNjExZDQ5Li41ZTA1ZGMwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3N5c2N0bC5jCisrKyBiL3NlY3VyaXR5L2tleXMvc3lzY3RsLmMKQEAgLTEzLDYgKzEzLDggQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCitzdGF0aWMgY29uc3QgaW50IHplcm8sIG9uZSA9IDEsIG1heCA9IElOVF9NQVg7CisKIGN0bF90YWJsZSBrZXlfc3lzY3Rsc1tdID0gewogCXsKIAkJLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsCkBAIC0yMCw3ICsyMiw5IEBACiAJCS5kYXRhID0gJmtleV9xdW90YV9tYXhrZXlzLAogCQkubWF4bGVuID0gc2l6ZW9mKHVuc2lnbmVkKSwKIAkJLm1vZGUgPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyID0gJnByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIgPSAmcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEgPSAodm9pZCAqKSAmb25lLAorCQkuZXh0cmEyID0gKHZvaWQgKikgJm1heCwKIAl9LAogCXsKIAkJLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsCkBAIC0yOCw3ICszMiw5IEBACiAJCS5kYXRhID0gJmtleV9xdW90YV9tYXhieXRlcywKIAkJLm1heGxlbiA9IHNpemVvZih1bnNpZ25lZCksCiAJCS5tb2RlID0gMDY0NCwKLQkJLnByb2NfaGFuZGxlciA9ICZwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyID0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuZXh0cmExID0gKHZvaWQgKikgJm9uZSwKKwkJLmV4dHJhMiA9ICh2b2lkICopICZtYXgsCiAJfSwKIAl7CiAJCS5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELApAQCAtMzYsNyArNDIsOSBAQAogCQkuZGF0YSA9ICZrZXlfcXVvdGFfcm9vdF9tYXhrZXlzLAogCQkubWF4bGVuID0gc2l6ZW9mKHVuc2lnbmVkKSwKIAkJLm1vZGUgPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyID0gJnByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIgPSAmcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEgPSAodm9pZCAqKSAmb25lLAorCQkuZXh0cmEyID0gKHZvaWQgKikgJm1heCwKIAl9LAogCXsKIAkJLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsCkBAIC00NCw3ICs1MiwxOSBAQAogCQkuZGF0YSA9ICZrZXlfcXVvdGFfcm9vdF9tYXhieXRlcywKIAkJLm1heGxlbiA9IHNpemVvZih1bnNpZ25lZCksCiAJCS5tb2RlID0gMDY0NCwKLQkJLnByb2NfaGFuZGxlciA9ICZwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyID0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuZXh0cmExID0gKHZvaWQgKikgJm9uZSwKKwkJLmV4dHJhMiA9ICh2b2lkICopICZtYXgsCisJfSwKKwl7CisJCS5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgPSAiZ2NfZGVsYXkiLAorCQkuZGF0YSA9ICZrZXlfZ2NfZGVsYXksCisJCS5tYXhsZW4gPSBzaXplb2YodW5zaWduZWQpLAorCQkubW9kZSA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgPSAmcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEgPSAodm9pZCAqKSAmemVybywKKwkJLmV4dHJhMiA9ICh2b2lkICopICZtYXgsCiAJfSwKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2xzbV9hdWRpdC5jIGIvc2VjdXJpdHkvbHNtX2F1ZGl0LmMKaW5kZXggOTRiODY4NC4uNTAwYWFkMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvbHNtX2F1ZGl0LmMKKysrIGIvc2VjdXJpdHkvbHNtX2F1ZGl0LmMKQEAgLTIyMCw2ICsyMjAsOCBAQAogCX0KIAogCXN3aXRjaCAoYS0+dHlwZSkgeworCWNhc2UgTFNNX0FVRElUX05PX0FVRElUOgorCQlyZXR1cm47CiAJY2FzZSBMU01fQVVESVRfREFUQV9JUEM6CiAJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIga2V5PSVkICIsIGEtPnUuaXBjX2lkKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCBkYzc2NzRmLi5jNGM2NzMyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTEyNCw5ICsxMjQsOSBAQAogCiAvKiBTZWN1cml0eSBvcGVyYXRpb25zICovCiAKLWludCBzZWN1cml0eV9wdHJhY2VfbWF5X2FjY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBpbnQgbW9kZSkKK2ludCBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBtb2RlKQogewotCXJldHVybiBzZWN1cml0eV9vcHMtPnB0cmFjZV9tYXlfYWNjZXNzKGNoaWxkLCBtb2RlKTsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5wdHJhY2VfYWNjZXNzX2NoZWNrKGNoaWxkLCBtb2RlKTsKIH0KIAogaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQpAQCAtNjg0LDYgKzY4NCwxMSBAQAogCXJldHVybiBzZWN1cml0eV9vcHMtPnRhc2tfY3JlYXRlKGNsb25lX2ZsYWdzKTsKIH0KIAoraW50IHNlY3VyaXR5X2NyZWRfYWxsb2NfYmxhbmsoc3RydWN0IGNyZWQgKmNyZWQsIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5jcmVkX2FsbG9jX2JsYW5rKGNyZWQsIGdmcCk7Cit9CisKIHZvaWQgc2VjdXJpdHlfY3JlZF9mcmVlKHN0cnVjdCBjcmVkICpjcmVkKQogewogCXNlY3VyaXR5X29wcy0+Y3JlZF9mcmVlKGNyZWQpOwpAQCAtNjk5LDYgKzcwNCwxMSBAQAogCXNlY3VyaXR5X29wcy0+Y3JlZF9jb21taXQobmV3LCBvbGQpOwogfQogCit2b2lkIHNlY3VyaXR5X3RyYW5zZmVyX2NyZWRzKHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQpCit7CisJc2VjdXJpdHlfb3BzLT5jcmVkX3RyYW5zZmVyKG5ldywgb2xkKTsKK30KKwogaW50IHNlY3VyaXR5X2tlcm5lbF9hY3RfYXMoc3RydWN0IGNyZWQgKm5ldywgdTMyIHNlY2lkKQogewogCXJldHVybiBzZWN1cml0eV9vcHMtPmtlcm5lbF9hY3RfYXMobmV3LCBzZWNpZCk7CkBAIC03MDksNiArNzE5LDExIEBACiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+a2VybmVsX2NyZWF0ZV9maWxlc19hcyhuZXcsIGlub2RlKTsKIH0KIAoraW50IHNlY3VyaXR5X2tlcm5lbF9tb2R1bGVfcmVxdWVzdCh2b2lkKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPmtlcm5lbF9tb2R1bGVfcmVxdWVzdCgpOworfQorCiBpbnQgc2VjdXJpdHlfdGFza19zZXR1aWQodWlkX3QgaWQwLCB1aWRfdCBpZDEsIHVpZF90IGlkMiwgaW50IGZsYWdzKQogewogCXJldHVybiBzZWN1cml0eV9vcHMtPnRhc2tfc2V0dWlkKGlkMCwgaWQxLCBpZDIsIGZsYWdzKTsKQEAgLTk1OSw2ICs5NzQsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0woc2VjdXJpdHlfcmVsZWFzZV9zZWNjdHgpOwogCitpbnQgc2VjdXJpdHlfaW5vZGVfbm90aWZ5c2VjY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmN0eCwgdTMyIGN0eGxlbikKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9ub3RpZnlzZWNjdHgoaW5vZGUsIGN0eCwgY3R4bGVuKTsKK30KK0VYUE9SVF9TWU1CT0woc2VjdXJpdHlfaW5vZGVfbm90aWZ5c2VjY3R4KTsKKworaW50IHNlY3VyaXR5X2lub2RlX3NldHNlY2N0eChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHZvaWQgKmN0eCwgdTMyIGN0eGxlbikKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9zZXRzZWNjdHgoZGVudHJ5LCBjdHgsIGN0eGxlbik7Cit9CitFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X2lub2RlX3NldHNlY2N0eCk7CisKK2ludCBzZWN1cml0eV9pbm9kZV9nZXRzZWNjdHgoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqKmN0eCwgdTMyICpjdHhsZW4pCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfZ2V0c2VjY3R4KGlub2RlLCBjdHgsIGN0eGxlbik7Cit9CitFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X2lub2RlX2dldHNlY2N0eCk7CisKICNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSwogCiBpbnQgc2VjdXJpdHlfdW5peF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpvdGhlciwKQEAgLTExMTIsNiArMTE0NSwyNCBAQAogCXNlY3VyaXR5X29wcy0+aW5ldF9jb25uX2VzdGFibGlzaGVkKHNrLCBza2IpOwogfQogCitpbnQgc2VjdXJpdHlfdHVuX2Rldl9jcmVhdGUodm9pZCkKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT50dW5fZGV2X2NyZWF0ZSgpOworfQorRVhQT1JUX1NZTUJPTChzZWN1cml0eV90dW5fZGV2X2NyZWF0ZSk7CisKK3ZvaWQgc2VjdXJpdHlfdHVuX2Rldl9wb3N0X2NyZWF0ZShzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+dHVuX2Rldl9wb3N0X2NyZWF0ZShzayk7Cit9CitFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X3R1bl9kZXZfcG9zdF9jcmVhdGUpOworCitpbnQgc2VjdXJpdHlfdHVuX2Rldl9hdHRhY2goc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnR1bl9kZXZfYXR0YWNoKHNrKTsKK30KK0VYUE9SVF9TWU1CT0woc2VjdXJpdHlfdHVuX2Rldl9hdHRhY2gpOworCiAjZW5kaWYJLyogQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgKi8KIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0KQEAgLTEyMTgsNiArMTI2OSwxMyBAQAogCXJldHVybiBzZWN1cml0eV9vcHMtPmtleV9nZXRzZWN1cml0eShrZXksIF9idWZmZXIpOwogfQogCitpbnQgc2VjdXJpdHlfa2V5X3Nlc3Npb25fdG9fcGFyZW50KGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBjcmVkICpwYXJlbnRfY3JlZCwKKwkJCQkgICBzdHJ1Y3Qga2V5ICprZXkpCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+a2V5X3Nlc3Npb25fdG9fcGFyZW50KGNyZWQsIHBhcmVudF9jcmVkLCBrZXkpOworfQorCiAjZW5kaWYJLyogQ09ORklHX0tFWVMgKi8KIAogI2lmZGVmIENPTkZJR19BVURJVApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKaW5kZXggYjJhYjYwOC4uMWVkMGYwNzYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9hdmMuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAgKiBAdGNsYXNzOiB0YXJnZXQgc2VjdXJpdHkgY2xhc3MKICAqIEBhdjogYWNjZXNzIHZlY3RvcgogICovCi12b2lkIGF2Y19kdW1wX2F2KHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCB1MTYgdGNsYXNzLCB1MzIgYXYpCitzdGF0aWMgdm9pZCBhdmNfZHVtcF9hdihzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwgdTE2IHRjbGFzcywgdTMyIGF2KQogewogCWNvbnN0IGNoYXIgKipjb21tb25fcHRzID0gTlVMTDsKIAl1MzIgY29tbW9uX2Jhc2UgPSAwOwpAQCAtNDkyLDIzICs0OTIsMzUgQEAKIAlyZXR1cm4gbm9kZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF2Y19wcmludF9pcHY2X2FkZHIoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsCi0JCQkJICAgICAgIHN0cnVjdCBpbjZfYWRkciAqYWRkciwgX19iZTE2IHBvcnQsCi0JCQkJICAgICAgIGNoYXIgKm5hbWUxLCBjaGFyICpuYW1lMikKKy8qKgorICogYXZjX2F1ZGl0X3ByZV9jYWxsYmFjayAtIFNFTGludXggc3BlY2lmaWMgaW5mb3JtYXRpb24KKyAqIHdpbGwgYmUgY2FsbGVkIGJ5IGdlbmVyaWMgYXVkaXQgY29kZQorICogQGFiOiB0aGUgYXVkaXQgYnVmZmVyCisgKiBAYTogYXVkaXRfZGF0YQorICovCitzdGF0aWMgdm9pZCBhdmNfYXVkaXRfcHJlX2NhbGxiYWNrKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCB2b2lkICphKQogewotCWlmICghaXB2Nl9hZGRyX2FueShhZGRyKSkKLQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiAlcz0lcEk2IiwgbmFtZTEsIGFkZHIpOwotCWlmIChwb3J0KQotCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiICVzPSVkIiwgbmFtZTIsIG50b2hzKHBvcnQpKTsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkID0gYTsKKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiYXZjOiAgJXMgIiwKKwkJCSBhZC0+c2VsaW51eF9hdWRpdF9kYXRhLmRlbmllZCA/ICJkZW5pZWQiIDogImdyYW50ZWQiKTsKKwlhdmNfZHVtcF9hdihhYiwgYWQtPnNlbGludXhfYXVkaXRfZGF0YS50Y2xhc3MsCisJCQlhZC0+c2VsaW51eF9hdWRpdF9kYXRhLmF1ZGl0ZWQpOworCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgZm9yICIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXZjX3ByaW50X2lwdjRfYWRkcihzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwgX19iZTMyIGFkZHIsCi0JCQkJICAgICAgIF9fYmUxNiBwb3J0LCBjaGFyICpuYW1lMSwgY2hhciAqbmFtZTIpCisvKioKKyAqIGF2Y19hdWRpdF9wb3N0X2NhbGxiYWNrIC0gU0VMaW51eCBzcGVjaWZpYyBpbmZvcm1hdGlvbgorICogd2lsbCBiZSBjYWxsZWQgYnkgZ2VuZXJpYyBhdWRpdCBjb2RlCisgKiBAYWI6IHRoZSBhdWRpdCBidWZmZXIKKyAqIEBhOiBhdWRpdF9kYXRhCisgKi8KK3N0YXRpYyB2b2lkIGF2Y19hdWRpdF9wb3N0X2NhbGxiYWNrKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCB2b2lkICphKQogewotCWlmIChhZGRyKQotCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiICVzPSVwSTQiLCBuYW1lMSwgJmFkZHIpOwotCWlmIChwb3J0KQotCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiICVzPSVkIiwgbmFtZTIsIG50b2hzKHBvcnQpKTsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkID0gYTsKKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiICIpOworCWF2Y19kdW1wX3F1ZXJ5KGFiLCBhZC0+c2VsaW51eF9hdWRpdF9kYXRhLnNzaWQsCisJCQkgICBhZC0+c2VsaW51eF9hdWRpdF9kYXRhLnRzaWQsCisJCQkgICBhZC0+c2VsaW51eF9hdWRpdF9kYXRhLnRjbGFzcyk7CiB9CiAKIC8qKgpAQCAtNTMyLDEzICs1NDQsMTAgQEAKICAqLwogdm9pZCBhdmNfYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLAogCSAgICAgICB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAotCSAgICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCwgaW50IHJlc3VsdCwgc3RydWN0IGF2Y19hdWRpdF9kYXRhICphKQorCSAgICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCwgaW50IHJlc3VsdCwgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphKQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgc3RhY2tfZGF0YTsKIAl1MzIgZGVuaWVkLCBhdWRpdGVkOwotCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOwotCiAJZGVuaWVkID0gcmVxdWVzdGVkICYgfmF2ZC0+YWxsb3dlZDsKIAlpZiAoZGVuaWVkKSB7CiAJCWF1ZGl0ZWQgPSBkZW5pZWQ7CkBAIC01NTEsMTQ0ICs1NjAsMjAgQEAKIAkJaWYgKCEoYXVkaXRlZCAmIGF2ZC0+YXVkaXRhbGxvdykpCiAJCQlyZXR1cm47CiAJfQotCi0JYWIgPSBhdWRpdF9sb2dfc3RhcnQoY3VycmVudC0+YXVkaXRfY29udGV4dCwgR0ZQX0FUT01JQywgQVVESVRfQVZDKTsKLQlpZiAoIWFiKQotCQlyZXR1cm47CQkvKiBhdWRpdF9wYW5pYyBoYXMgYmVlbiBjYWxsZWQgKi8KLQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiYXZjOiAgJXMgIiwgZGVuaWVkID8gImRlbmllZCIgOiAiZ3JhbnRlZCIpOwotCWF2Y19kdW1wX2F2KGFiLCB0Y2xhc3MsIGF1ZGl0ZWQpOwotCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgZm9yICIpOwotCWlmIChhICYmIGEtPnRzaykKLQkJdHNrID0gYS0+dHNrOwotCWlmICh0c2sgJiYgdHNrLT5waWQpIHsKLQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBwaWQ9JWQgY29tbT0iLCB0c2stPnBpZCk7Ci0JCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIHRzay0+Y29tbSk7CisJaWYgKCFhKSB7CisJCWEgPSAmc3RhY2tfZGF0YTsKKwkJbWVtc2V0KGEsIDAsIHNpemVvZigqYSkpOworCQlhLT50eXBlID0gTFNNX0FVRElUX05PX0FVRElUOwogCX0KLQlpZiAoYSkgewotCQlzd2l0Y2ggKGEtPnR5cGUpIHsKLQkJY2FzZSBBVkNfQVVESVRfREFUQV9JUEM6Ci0JCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGtleT0lZCIsIGEtPnUuaXBjX2lkKTsKLQkJCWJyZWFrOwotCQljYXNlIEFWQ19BVURJVF9EQVRBX0NBUDoKLQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgY2FwYWJpbGl0eT0lZCIsIGEtPnUuY2FwKTsKLQkJCWJyZWFrOwotCQljYXNlIEFWQ19BVURJVF9EQVRBX0ZTOgotCQkJaWYgKGEtPnUuZnMucGF0aC5kZW50cnkpIHsKLQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBhLT51LmZzLnBhdGguZGVudHJ5OwotCQkJCWlmIChhLT51LmZzLnBhdGgubW50KSB7Ci0JCQkJCWF1ZGl0X2xvZ19kX3BhdGgoYWIsICJwYXRoPSIsCi0JCQkJCQkJICZhLT51LmZzLnBhdGgpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgbmFtZT0iKTsKLQkJCQkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgZGVudHJ5LT5kX25hbWUubmFtZSk7Ci0JCQkJfQotCQkJCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCQkJfSBlbHNlIGlmIChhLT51LmZzLmlub2RlKSB7Ci0JCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCQkJCWlub2RlID0gYS0+dS5mcy5pbm9kZTsKLQkJCQlkZW50cnkgPSBkX2ZpbmRfYWxpYXMoaW5vZGUpOwotCQkJCWlmIChkZW50cnkpIHsKLQkJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBuYW1lPSIpOwotCQkJCQlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKLQkJCQkJZHB1dChkZW50cnkpOwotCQkJCX0KLQkJCX0KLQkJCWlmIChpbm9kZSkKLQkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGRldj0lcyBpbm89JWx1IiwKLQkJCQkJCSBpbm9kZS0+aV9zYi0+c19pZCwKLQkJCQkJCSBpbm9kZS0+aV9pbm8pOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVZDX0FVRElUX0RBVEFfTkVUOgotCQkJaWYgKGEtPnUubmV0LnNrKSB7Ci0JCQkJc3RydWN0IHNvY2sgKnNrID0gYS0+dS5uZXQuc2s7Ci0JCQkJc3RydWN0IHVuaXhfc29jayAqdTsKLQkJCQlpbnQgbGVuID0gMDsKLQkJCQljaGFyICpwID0gTlVMTDsKLQotCQkJCXN3aXRjaCAoc2stPnNrX2ZhbWlseSkgewotCQkJCWNhc2UgQUZfSU5FVDogewotCQkJCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0KLQkJCQkJYXZjX3ByaW50X2lwdjRfYWRkcihhYiwgaW5ldC0+cmN2X3NhZGRyLAotCQkJCQkJCSAgICBpbmV0LT5zcG9ydCwKLQkJCQkJCQkgICAgImxhZGRyIiwgImxwb3J0Iik7Ci0JCQkJCWF2Y19wcmludF9pcHY0X2FkZHIoYWIsIGluZXQtPmRhZGRyLAotCQkJCQkJCSAgICBpbmV0LT5kcG9ydCwKLQkJCQkJCQkgICAgImZhZGRyIiwgImZwb3J0Iik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQljYXNlIEFGX0lORVQ2OiB7Ci0JCQkJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKLQkJCQkJc3RydWN0IGlwdjZfcGluZm8gKmluZXQ2ID0gaW5ldDZfc2soc2spOwotCi0JCQkJCWF2Y19wcmludF9pcHY2X2FkZHIoYWIsICZpbmV0Ni0+cmN2X3NhZGRyLAotCQkJCQkJCSAgICBpbmV0LT5zcG9ydCwKLQkJCQkJCQkgICAgImxhZGRyIiwgImxwb3J0Iik7Ci0JCQkJCWF2Y19wcmludF9pcHY2X2FkZHIoYWIsICZpbmV0Ni0+ZGFkZHIsCi0JCQkJCQkJICAgIGluZXQtPmRwb3J0LAotCQkJCQkJCSAgICAiZmFkZHIiLCAiZnBvcnQiKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWNhc2UgQUZfVU5JWDoKLQkJCQkJdSA9IHVuaXhfc2soc2spOwotCQkJCQlpZiAodS0+ZGVudHJ5KSB7Ci0JCQkJCQlzdHJ1Y3QgcGF0aCBwYXRoID0gewotCQkJCQkJCS5kZW50cnkgPSB1LT5kZW50cnksCi0JCQkJCQkJLm1udCA9IHUtPm1udAotCQkJCQkJfTsKLQkJCQkJCWF1ZGl0X2xvZ19kX3BhdGgoYWIsICJwYXRoPSIsCi0JCQkJCQkJCSAmcGF0aCk7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQlpZiAoIXUtPmFkZHIpCi0JCQkJCQlicmVhazsKLQkJCQkJbGVuID0gdS0+YWRkci0+bGVuLXNpemVvZihzaG9ydCk7Ci0JCQkJCXAgPSAmdS0+YWRkci0+bmFtZS0+c3VuX3BhdGhbMF07Ci0JCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgcGF0aD0iKTsKLQkJCQkJaWYgKCpwKQotCQkJCQkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgcCk7Ci0JCQkJCWVsc2UKLQkJCQkJCWF1ZGl0X2xvZ19uX2hleChhYiwgcCwgbGVuKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlzd2l0Y2ggKGEtPnUubmV0LmZhbWlseSkgewotCQkJY2FzZSBBRl9JTkVUOgotCQkJCWF2Y19wcmludF9pcHY0X2FkZHIoYWIsIGEtPnUubmV0LnY0aW5mby5zYWRkciwKLQkJCQkJCSAgICBhLT51Lm5ldC5zcG9ydCwKLQkJCQkJCSAgICAic2FkZHIiLCAic3JjIik7Ci0JCQkJYXZjX3ByaW50X2lwdjRfYWRkcihhYiwgYS0+dS5uZXQudjRpbmZvLmRhZGRyLAotCQkJCQkJICAgIGEtPnUubmV0LmRwb3J0LAotCQkJCQkJICAgICJkYWRkciIsICJkZXN0Iik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFGX0lORVQ2OgotCQkJCWF2Y19wcmludF9pcHY2X2FkZHIoYWIsICZhLT51Lm5ldC52NmluZm8uc2FkZHIsCi0JCQkJCQkgICAgYS0+dS5uZXQuc3BvcnQsCi0JCQkJCQkgICAgInNhZGRyIiwgInNyYyIpOwotCQkJCWF2Y19wcmludF9pcHY2X2FkZHIoYWIsICZhLT51Lm5ldC52NmluZm8uZGFkZHIsCi0JCQkJCQkgICAgYS0+dS5uZXQuZHBvcnQsCi0JCQkJCQkgICAgImRhZGRyIiwgImRlc3QiKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChhLT51Lm5ldC5uZXRpZiA+IDApIHsKLQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCi0JCQkJLyogTk9URTogd2UgYWx3YXlzIHVzZSBpbml0J3MgbmFtZXNwYWNlICovCi0JCQkJZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsCi0JCQkJCQkgICAgICAgYS0+dS5uZXQubmV0aWYpOwotCQkJCWlmIChkZXYpIHsKLQkJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBuZXRpZj0lcyIsCi0JCQkJCQkJIGRldi0+bmFtZSk7Ci0JCQkJCWRldl9wdXQoZGV2KTsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCX0KLQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiICIpOwotCWF2Y19kdW1wX3F1ZXJ5KGFiLCBzc2lkLCB0c2lkLCB0Y2xhc3MpOwotCWF1ZGl0X2xvZ19lbmQoYWIpOworCWEtPnNlbGludXhfYXVkaXRfZGF0YS50Y2xhc3MgPSB0Y2xhc3M7CisJYS0+c2VsaW51eF9hdWRpdF9kYXRhLnJlcXVlc3RlZCA9IHJlcXVlc3RlZDsKKwlhLT5zZWxpbnV4X2F1ZGl0X2RhdGEuc3NpZCA9IHNzaWQ7CisJYS0+c2VsaW51eF9hdWRpdF9kYXRhLnRzaWQgPSB0c2lkOworCWEtPnNlbGludXhfYXVkaXRfZGF0YS5hdWRpdGVkID0gYXVkaXRlZDsKKwlhLT5zZWxpbnV4X2F1ZGl0X2RhdGEuZGVuaWVkID0gZGVuaWVkOworCWEtPmxzbV9wcmVfYXVkaXQgPSBhdmNfYXVkaXRfcHJlX2NhbGxiYWNrOworCWEtPmxzbV9wb3N0X2F1ZGl0ID0gYXZjX2F1ZGl0X3Bvc3RfY2FsbGJhY2s7CisJY29tbW9uX2xzbV9hdWRpdChhKTsKIH0KIAogLyoqCkBAIC04MjQsMTggKzcwOSwxNiBAQAogfQogCiAvKioKLSAqIGF2Y19zc19yZXNldCAtIEZsdXNoIHRoZSBjYWNoZSBhbmQgcmV2YWxpZGF0ZSBtaWdyYXRlZCBwZXJtaXNzaW9ucy4KLSAqIEBzZXFubzogcG9saWN5IHNlcXVlbmNlIG51bWJlcgorICogYXZjX2ZsdXNoIC0gRmx1c2ggdGhlIGNhY2hlCiAgKi8KLWludCBhdmNfc3NfcmVzZXQodTMyIHNlcW5vKQorc3RhdGljIHZvaWQgYXZjX2ZsdXNoKHZvaWQpCiB7Ci0Jc3RydWN0IGF2Y19jYWxsYmFja19ub2RlICpjOwotCWludCBpLCByYyA9IDAsIHRtcHJjOwotCXVuc2lnbmVkIGxvbmcgZmxhZzsKLQlzdHJ1Y3QgYXZjX25vZGUgKm5vZGU7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CisJc3RydWN0IGF2Y19ub2RlICpub2RlOwogCXNwaW5sb2NrX3QgKmxvY2s7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFWQ19DQUNIRV9TTE9UUzsgaSsrKSB7CiAJCWhlYWQgPSAmYXZjX2NhY2hlLnNsb3RzW2ldOwpAQCAtODUyLDYgKzczNSwxOCBAQAogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFnKTsKIAl9Cit9CisKKy8qKgorICogYXZjX3NzX3Jlc2V0IC0gRmx1c2ggdGhlIGNhY2hlIGFuZCByZXZhbGlkYXRlIG1pZ3JhdGVkIHBlcm1pc3Npb25zLgorICogQHNlcW5vOiBwb2xpY3kgc2VxdWVuY2UgbnVtYmVyCisgKi8KK2ludCBhdmNfc3NfcmVzZXQodTMyIHNlcW5vKQoreworCXN0cnVjdCBhdmNfY2FsbGJhY2tfbm9kZSAqYzsKKwlpbnQgcmMgPSAwLCB0bXByYzsKKworCWF2Y19mbHVzaCgpOwogCiAJZm9yIChjID0gYXZjX2NhbGxiYWNrczsgYzsgYyA9IGMtPm5leHQpIHsKIAkJaWYgKGMtPmV2ZW50cyAmIEFWQ19DQUxMQkFDS19SRVNFVCkgewpAQCAtOTU2LDcgKzg1MSw3IEBACiAgKiBhbm90aGVyIC1lcnJubyB1cG9uIG90aGVyIGVycm9ycy4KICAqLwogaW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsCi0JCSB1MzIgcmVxdWVzdGVkLCBzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmF1ZGl0ZGF0YSkKKwkJIHUzMiByZXF1ZXN0ZWQsIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYXVkaXRkYXRhKQogewogCXN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7CiAJaW50IHJjOwpAQCAtOTcwLDMgKzg2NSwxMSBAQAogewogCXJldHVybiBhdmNfY2FjaGUubGF0ZXN0X25vdGlmOwogfQorCit2b2lkIGF2Y19kaXNhYmxlKHZvaWQpCit7CisJYXZjX2ZsdXNoKCk7CisJc3luY2hyb25pemVfcmN1KCk7CisJaWYgKGF2Y19ub2RlX2NhY2hlcCkKKwkJa21lbV9jYWNoZV9kZXN0cm95KGF2Y19ub2RlX2NhY2hlcCk7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2V4cG9ydHMuYyBiL3NlY3VyaXR5L3NlbGludXgvZXhwb3J0cy5jCmluZGV4IGM3M2FlYWEuLmMwYTQ1NGEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvZXhwb3J0cy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvZXhwb3J0cy5jCkBAIC02MywzICs2Myw5IEBACiAJYXRvbWljX2RlYygmc2VsaW51eF9zZWNtYXJrX3JlZmNvdW50KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlbGludXhfc2VjbWFya19yZWZjb3VudF9kZWMpOworCitib29sIHNlbGludXhfaXNfZW5hYmxlZCh2b2lkKQoreworCXJldHVybiBzZWxpbnV4X2VuYWJsZWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzZWxpbnV4X2lzX2VuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDhkOGI2OWMuLjQxN2Y3YzkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTEzLDggKzEzLDggQEAKICAqCQkJCQkgICBFcmljIFBhcmlzIDxlcGFyaXNAcmVkaGF0LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLgogICoJCQkgICAgPGRnb2VkZGVsQHRydXN0ZWRjcy5jb20+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCi0gKgkJUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKglQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSGl0YWNoaSBTb2Z0d2FyZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4KICAqCQkgICAgICAgWXVpY2hpIE5ha2FtdXJhIDx5bmFrYW1AaGl0YWNoaXNvZnQuanA+CiAgKgpAQCAtNDQ4LDYgKzQ0OCwxMCBAQAogCSAgICBzYnNlYy0+YmVoYXZpb3IgPiBBUlJBWV9TSVpFKGxhYmVsaW5nX2JlaGF2aW9ycykpCiAJCXNic2VjLT5mbGFncyAmPSB+U0VfU0JMQUJFTFNVUFA7CiAKKwkvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBzeXNmcy4gSXMgZ2VuZnMgYnV0IGFsc28gaGFzIHNldHhhdHRyIGhhbmRsZXIqLworCWlmIChzdHJuY21wKHNiLT5zX3R5cGUtPm5hbWUsICJzeXNmcyIsIHNpemVvZigic3lzZnMiKSkgPT0gMCkKKwkJc2JzZWMtPmZsYWdzIHw9IFNFX1NCTEFCRUxTVVBQOworCiAJLyogSW5pdGlhbGl6ZSB0aGUgcm9vdCBpbm9kZS4gKi8KIAlyYyA9IGlub2RlX2RvaW5pdF93aXRoX2RlbnRyeShyb290X2lub2RlLCByb290KTsKIApAQCAtMTQ3OSwxNCArMTQ4MywxNCBAQAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLAogCQkJICAgICAgIGludCBjYXAsIGludCBhdWRpdCkKIHsKLQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwogCXN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7CiAJdTE2IHNjbGFzczsKIAl1MzIgc2lkID0gY3JlZF9zaWQoY3JlZCk7CiAJdTMyIGF2ID0gQ0FQX1RPX01BU0soY2FwKTsKIAlpbnQgcmM7CiAKLQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgQ0FQKTsKKwlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgQ0FQKTsKIAlhZC50c2sgPSB0c2s7CiAJYWQudS5jYXAgPSBjYXA7CiAKQEAgLTE1MjUsMTIgKzE1MjksMTQgQEAKIHN0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCiAJCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgIHUzMiBwZXJtcywKLQkJCSAgc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZHApCisJCQkgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwKQogewogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7Ci0Jc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKIAl1MzIgc2lkOwogCisJdmFsaWRhdGVfY3JlZHMoY3JlZCk7CisKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKQogCQlyZXR1cm4gMDsKIApAQCAtMTUzOSw3ICsxNTQ1LDcgQEAKIAogCWlmICghYWRwKSB7CiAJCWFkcCA9ICZhZDsKLQkJQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKKwkJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKIAkJYWQudS5mcy5pbm9kZSA9IGlub2RlOwogCX0KIApAQCAtMTU1NSw5ICsxNTYxLDkgQEAKIAkJCQkgIHUzMiBhdikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAKLQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgRlMpOworCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBGUyk7CiAJYWQudS5mcy5wYXRoLm1udCA9IG1udDsKIAlhZC51LmZzLnBhdGguZGVudHJ5ID0gZGVudHJ5OwogCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgYXYsICZhZCk7CkBAIC0xNTc3LDExICsxNTgzLDExIEBACiB7CiAJc3RydWN0IGZpbGVfc2VjdXJpdHlfc3RydWN0ICpmc2VjID0gZmlsZS0+Zl9zZWN1cml0eTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwogCXUzMiBzaWQgPSBjcmVkX3NpZChjcmVkKTsKIAlpbnQgcmM7CiAKLQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgRlMpOworCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBGUyk7CiAJYWQudS5mcy5wYXRoID0gZmlsZS0+Zl9wYXRoOwogCiAJaWYgKHNpZCAhPSBmc2VjLT5zaWQpIHsKQEAgLTE2MTIsNyArMTYxOCw3IEBACiAJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqZHNlYzsKIAlzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3QgKnNic2VjOwogCXUzMiBzaWQsIG5ld3NpZDsKLQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwogCWludCByYzsKIAogCWRzZWMgPSBkaXItPmlfc2VjdXJpdHk7CkBAIC0xNjIxLDcgKzE2MjcsNyBAQAogCXNpZCA9IHRzZWMtPnNpZDsKIAluZXdzaWQgPSB0c2VjLT5jcmVhdGVfc2lkOwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKKwlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgRlMpOwogCWFkLnUuZnMucGF0aC5kZW50cnkgPSBkZW50cnk7CiAKIAlyYyA9IGF2Y19oYXNfcGVybShzaWQsIGRzZWMtPnNpZCwgU0VDQ0xBU1NfRElSLApAQCAtMTY2NSw3ICsxNjcxLDcgQEAKIAogewogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmRzZWMsICppc2VjOwotCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJdTMyIHNpZCA9IGN1cnJlbnRfc2lkKCk7CiAJdTMyIGF2OwogCWludCByYzsKQEAgLTE2NzMsNyArMTY3OSw3IEBACiAJZHNlYyA9IGRpci0+aV9zZWN1cml0eTsKIAlpc2VjID0gZGVudHJ5LT5kX2lub2RlLT5pX3NlY3VyaXR5OwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKKwlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgRlMpOwogCWFkLnUuZnMucGF0aC5kZW50cnkgPSBkZW50cnk7CiAKIAlhdiA9IERJUl9fU0VBUkNIOwpAQCAtMTcwOCw3ICsxNzE0LDcgQEAKIAkJCSAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICpvbGRfZHNlYywgKm5ld19kc2VjLCAqb2xkX2lzZWMsICpuZXdfaXNlYzsKLQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwogCXUzMiBzaWQgPSBjdXJyZW50X3NpZCgpOwogCXUzMiBhdjsKIAlpbnQgb2xkX2lzX2RpciwgbmV3X2lzX2RpcjsKQEAgLTE3MTksNyArMTcyNSw3IEBACiAJb2xkX2lzX2RpciA9IFNfSVNESVIob2xkX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKTsKIAluZXdfZHNlYyA9IG5ld19kaXItPmlfc2VjdXJpdHk7CiAKLQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgRlMpOworCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBGUyk7CiAKIAlhZC51LmZzLnBhdGguZGVudHJ5ID0gb2xkX2RlbnRyeTsKIAlyYyA9IGF2Y19oYXNfcGVybShzaWQsIG9sZF9kc2VjLT5zaWQsIFNFQ0NMQVNTX0RJUiwKQEAgLTE3NjEsNyArMTc2Nyw3IEBACiBzdGF0aWMgaW50IHN1cGVyYmxvY2tfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCiAJCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCSAgICAgICB1MzIgcGVybXMsCi0JCQkgICAgICAgc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCkKKwkJCSAgICAgICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkKQogewogCXN0cnVjdCBzdXBlcmJsb2NrX3NlY3VyaXR5X3N0cnVjdCAqc2JzZWM7CiAJdTMyIHNpZCA9IGNyZWRfc2lkKGNyZWQpOwpAQCAtMTg1NSwxMiArMTg2MSwxMiBAQAogCiAvKiBIb29rIGZ1bmN0aW9ucyBiZWdpbiBoZXJlLiAqLwogCi1zdGF0aWMgaW50IHNlbGludXhfcHRyYWNlX21heV9hY2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKK3N0YXRpYyBpbnQgc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgbW9kZSkKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IGNhcF9wdHJhY2VfbWF5X2FjY2VzcyhjaGlsZCwgbW9kZSk7CisJcmMgPSBjYXBfcHRyYWNlX2FjY2Vzc19jaGVjayhjaGlsZCwgbW9kZSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTIxMDEsNyArMjEwNyw3IEBACiAJY29uc3Qgc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICpvbGRfdHNlYzsKIAlzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKm5ld190c2VjOwogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7Ci0Jc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gYnBybS0+ZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmM7CiAKQEAgLTIxMzksNyArMjE0NSw3IEBACiAJCQlyZXR1cm4gcmM7CiAJfQogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKKwlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgRlMpOwogCWFkLnUuZnMucGF0aCA9IGJwcm0tPmZpbGUtPmZfcGF0aDsKIAogCWlmIChicHJtLT5maWxlLT5mX3BhdGgubW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9TVUlEKQpAQCAtMjIzMiw3ICsyMjM4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF91bmF1dGhvcml6ZWRfZmlsZXMoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCiAJCQkJCSAgICBzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcykKIHsKLQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwogCXN0cnVjdCBmaWxlICpmaWxlLCAqZGV2bnVsbCA9IE5VTEw7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlzdHJ1Y3QgZmR0YWJsZSAqZmR0OwpAQCAtMjI2Niw3ICsyMjcyLDcgQEAKIAogCS8qIFJldmFsaWRhdGUgYWNjZXNzIHRvIGluaGVyaXRlZCBvcGVuIGZpbGVzLiAqLwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKKwlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgRlMpOwogCiAJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKIAlmb3IgKDs7KSB7CkBAIC0yNTE1LDcgKzI1MjEsNyBAQAogc3RhdGljIGludCBzZWxpbnV4X3NiX2tlcm5fbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGZsYWdzLCB2b2lkICpkYXRhKQogewogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7Ci0Jc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKIAlpbnQgcmM7CiAKIAlyYyA9IHN1cGVyYmxvY2tfZG9pbml0KHNiLCBkYXRhKTsKQEAgLTI1MjYsNyArMjUzMiw3IEBACiAJaWYgKGZsYWdzICYgTVNfS0VSTk1PVU5UKQogCQlyZXR1cm4gMDsKIAotCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBGUyk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKIAlhZC51LmZzLnBhdGguZGVudHJ5ID0gc2ItPnNfcm9vdDsKIAlyZXR1cm4gc3VwZXJibG9ja19oYXNfcGVybShjcmVkLCBzYiwgRklMRVNZU1RFTV9fTU9VTlQsICZhZCk7CiB9CkBAIC0yNTM0LDkgKzI1NDAsOSBAQAogc3RhdGljIGludCBzZWxpbnV4X3NiX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKKwlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgRlMpOwogCWFkLnUuZnMucGF0aC5kZW50cnkgPSBkZW50cnktPmRfc2ItPnNfcm9vdDsKIAlyZXR1cm4gc3VwZXJibG9ja19oYXNfcGVybShjcmVkLCBkZW50cnktPmRfc2IsIEZJTEVTWVNURU1fX0dFVEFUVFIsICZhZCk7CiB9CkBAIC0yNzExLDEyICsyNzE3LDE4IEBACiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKKwl1bnNpZ25lZCBpbnQgaWFfdmFsaWQgPSBpYXR0ci0+aWFfdmFsaWQ7CiAKLQlpZiAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9GT1JDRSkKLQkJcmV0dXJuIDA7CisJLyogQVRUUl9GT1JDRSBpcyBqdXN0IHVzZWQgZm9yIEFUVFJfS0lMTF9TW1VHXUlELiAqLworCWlmIChpYV92YWxpZCAmIEFUVFJfRk9SQ0UpIHsKKwkJaWFfdmFsaWQgJj0gfihBVFRSX0tJTExfU1VJRCB8IEFUVFJfS0lMTF9TR0lEIHwgQVRUUl9NT0RFIHwKKwkJCSAgICAgIEFUVFJfRk9SQ0UpOworCQlpZiAoIWlhX3ZhbGlkKQorCQkJcmV0dXJuIDA7CisJfQogCi0JaWYgKGlhdHRyLT5pYV92YWxpZCAmIChBVFRSX01PREUgfCBBVFRSX1VJRCB8IEFUVFJfR0lEIHwKLQkJCSAgICAgICBBVFRSX0FUSU1FX1NFVCB8IEFUVFJfTVRJTUVfU0VUKSkKKwlpZiAoaWFfdmFsaWQgJiAoQVRUUl9NT0RFIHwgQVRUUl9VSUQgfCBBVFRSX0dJRCB8CisJCQlBVFRSX0FUSU1FX1NFVCB8IEFUVFJfTVRJTUVfU0VUIHwgQVRUUl9USU1FU19TRVQpKQogCQlyZXR1cm4gZGVudHJ5X2hhc19wZXJtKGNyZWQsIE5VTEwsIGRlbnRyeSwgRklMRV9fU0VUQVRUUik7CiAKIAlyZXR1cm4gZGVudHJ5X2hhc19wZXJtKGNyZWQsIE5VTEwsIGRlbnRyeSwgRklMRV9fV1JJVEUpOwpAQCAtMjc1Niw3ICsyNzY4LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKIAlzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3QgKnNic2VjOwotCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJdTMyIG5ld3NpZCwgc2lkID0gY3VycmVudF9zaWQoKTsKIAlpbnQgcmMgPSAwOwogCkBAIC0yNzcwLDcgKzI3ODIsNyBAQAogCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBGUyk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKIAlhZC51LmZzLnBhdGguZGVudHJ5ID0gZGVudHJ5OwogCiAJcmMgPSBhdmNfaGFzX3Blcm0oc2lkLCBpc2VjLT5zaWQsIGlzZWMtPnNjbGFzcywKQEAgLTI5MTUsNiArMjkyNyw3IEBACiAJCXJldHVybiByYzsKIAogCWlzZWMtPnNpZCA9IG5ld3NpZDsKKwlpc2VjLT5pbml0aWFsaXplZCA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5MzksMTEgKzI5NTIsNiBAQAogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKLQlpZiAoIW1hc2spIHsKLQkJLyogTm8gcGVybWlzc2lvbiB0byBjaGVjay4gIEV4aXN0ZW5jZSB0ZXN0LiAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KIAkvKiBmaWxlX21hc2tfdG9fYXYgd29uJ3QgYWRkIEZJTEVfX1dSSVRFIGlmIE1BWV9BUFBFTkQgaXMgc2V0ICovCiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpICYmIChtYXNrICYgTUFZX1dSSVRFKSkKIAkJbWFzayB8PSBNQVlfQVBQRU5EOwpAQCAtMjk1NCwxMCArMjk2MiwyMCBAQAogCiBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9wZXJtaXNzaW9uKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbWFzaykKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmZzZWMgPSBmaWxlLT5mX3NlY3VyaXR5OworCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKKwl1MzIgc2lkID0gY3VycmVudF9zaWQoKTsKKwogCWlmICghbWFzaykKIAkJLyogTm8gcGVybWlzc2lvbiB0byBjaGVjay4gIEV4aXN0ZW5jZSB0ZXN0LiAqLwogCQlyZXR1cm4gMDsKIAorCWlmIChzaWQgPT0gZnNlYy0+c2lkICYmIGZzZWMtPmlzaWQgPT0gaXNlYy0+c2lkICYmCisJICAgIGZzZWMtPnBzZXFubyA9PSBhdmNfcG9saWN5X3NlcW5vKCkpCisJCS8qIE5vIGNoYW5nZSBzaW5jZSBkZW50cnlfb3BlbiBjaGVjay4gKi8KKwkJcmV0dXJuIDA7CisKIAlyZXR1cm4gc2VsaW51eF9yZXZhbGlkYXRlX2ZpbGVfcGVybWlzc2lvbihmaWxlLCBtYXNrKTsKIH0KIApAQCAtMzIyMCwxMiArMzIzOCwyOSBAQAogfQogCiAvKgorICogYWxsb2NhdGUgdGhlIFNFTGludXggcGFydCBvZiBibGFuayBjcmVkZW50aWFscworICovCitzdGF0aWMgaW50IHNlbGludXhfY3JlZF9hbGxvY19ibGFuayhzdHJ1Y3QgY3JlZCAqY3JlZCwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYzsKKworCXRzZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QpLCBnZnApOworCWlmICghdHNlYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljcmVkLT5zZWN1cml0eSA9IHRzZWM7CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBkZXRhY2ggYW5kIGZyZWUgdGhlIExTTSBwYXJ0IG9mIGEgc2V0IG9mIGNyZWRlbnRpYWxzCiAgKi8KIHN0YXRpYyB2b2lkIHNlbGludXhfY3JlZF9mcmVlKHN0cnVjdCBjcmVkICpjcmVkKQogewogCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGNyZWQtPnNlY3VyaXR5OwotCWNyZWQtPnNlY3VyaXR5ID0gTlVMTDsKKworCUJVR19PTigodW5zaWduZWQgbG9uZykgY3JlZC0+c2VjdXJpdHkgPCBQQUdFX1NJWkUpOworCWNyZWQtPnNlY3VyaXR5ID0gKHZvaWQgKikgMHg3VUw7CiAJa2ZyZWUodHNlYyk7CiB9CiAKQEAgLTMyNDksNiArMzI4NCwxNyBAQAogfQogCiAvKgorICogdHJhbnNmZXIgdGhlIFNFTGludXggZGF0YSB0byBhIGJsYW5rIHNldCBvZiBjcmVkcworICovCitzdGF0aWMgdm9pZCBzZWxpbnV4X2NyZWRfdHJhbnNmZXIoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCkKK3sKKwljb25zdCBzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKm9sZF90c2VjID0gb2xkLT5zZWN1cml0eTsKKwlzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMgPSBuZXctPnNlY3VyaXR5OworCisJKnRzZWMgPSAqb2xkX3RzZWM7Cit9CisKKy8qCiAgKiBzZXQgdGhlIHNlY3VyaXR5IGRhdGEgZm9yIGEga2VybmVsIHNlcnZpY2UKICAqIC0gYWxsIHRoZSBjcmVhdGlvbiBjb250ZXh0cyBhcmUgc2V0IHRvIHVubGFiZWxsZWQKICAqLwpAQCAtMzI5Miw2ICszMzM4LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2VsaW51eF9rZXJuZWxfbW9kdWxlX3JlcXVlc3Qodm9pZCkKK3sKKwlyZXR1cm4gdGFza19oYXNfc3lzdGVtKGN1cnJlbnQsIFNZU1RFTV9fTU9EVUxFX1JFUVVFU1QpOworfQorCiBzdGF0aWMgaW50IHNlbGludXhfdGFza19zZXRwZ2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgcGlkX3QgcGdpZCkKIHsKIAlyZXR1cm4gY3VycmVudF9oYXNfcGVybShwLCBQUk9DRVNTX19TRVRQR0lEKTsKQEAgLTM0MDksNyArMzQ2MCw3IEBACiAKIC8qIFJldHVybnMgZXJyb3Igb25seSBpZiB1bmFibGUgdG8gcGFyc2UgYWRkcmVzc2VzICovCiBzdGF0aWMgaW50IHNlbGludXhfcGFyc2Vfc2tiX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQsIHU4ICpwcm90bykKKwkJCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWQsIHU4ICpwcm90bykKIHsKIAlpbnQgb2Zmc2V0LCBpaGxlbiwgcmV0ID0gLUVJTlZBTDsKIAlzdHJ1Y3QgaXBoZHIgX2lwaCwgKmloOwpAQCAtMzQ5MCw3ICszNTQxLDcgQEAKIAogLyogUmV0dXJucyBlcnJvciBvbmx5IGlmIHVuYWJsZSB0byBwYXJzZSBhZGRyZXNzZXMgKi8KIHN0YXRpYyBpbnQgc2VsaW51eF9wYXJzZV9za2JfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCwgdTggKnByb3RvKQorCQkJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZCwgdTggKnByb3RvKQogewogCXU4IG5leHRoZHI7CiAJaW50IHJldCA9IC1FSU5WQUwsIG9mZnNldDsKQEAgLTM1NjEsNyArMzYxMiw3IEBACiAKICNlbmRpZiAvKiBJUFY2ICovCiAKLXN0YXRpYyBpbnQgc2VsaW51eF9wYXJzZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCwKK3N0YXRpYyBpbnQgc2VsaW51eF9wYXJzZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZCwKIAkJCSAgICAgY2hhciAqKl9hZGRycCwgaW50IHNyYywgdTggKnByb3RvKQogewogCWNoYXIgKmFkZHJwOwpAQCAtMzY0Myw3ICszNjk0LDcgQEAKIAkJCSAgIHUzMiBwZXJtcykKIHsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwotCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJdTMyIHNpZDsKIAlpbnQgZXJyID0gMDsKIApAQCAtMzY1Myw3ICszNzA0LDcgQEAKIAkJZ290byBvdXQ7CiAJc2lkID0gdGFza19zaWQodGFzayk7CiAKLQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKKwlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKIAlhZC51Lm5ldC5zayA9IHNvY2stPnNrOwogCWVyciA9IGF2Y19oYXNfcGVybShzaWQsIGlzZWMtPnNpZCwgaXNlYy0+c2NsYXNzLCBwZXJtcywgJmFkKTsKIApAQCAtMzc0MCw3ICszNzkxLDcgQEAKIAlpZiAoZmFtaWx5ID09IFBGX0lORVQgfHwgZmFtaWx5ID09IFBGX0lORVQ2KSB7CiAJCWNoYXIgKmFkZHJwOwogCQlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwotCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKIAkJc3RydWN0IHNvY2thZGRyX2luICphZGRyNCA9IE5VTEw7CiAJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2ID0gTlVMTDsKIAkJdW5zaWduZWQgc2hvcnQgc251bTsKQEAgLTM3NjksNyArMzgyMCw3IEBACiAJCQkJCQkgICAgICBzbnVtLCAmc2lkKTsKIAkJCQlpZiAoZXJyKQogCQkJCQlnb3RvIG91dDsKLQkJCQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKKwkJCQlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKIAkJCQlhZC51Lm5ldC5zcG9ydCA9IGh0b25zKHNudW0pOwogCQkJCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKIAkJCQllcnIgPSBhdmNfaGFzX3Blcm0oaXNlYy0+c2lkLCBzaWQsCkBAIC0zODAyLDcgKzM4NTMsNyBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAKLQkJQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CisJCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwogCQlhZC51Lm5ldC5zcG9ydCA9IGh0b25zKHNudW0pOwogCQlhZC51Lm5ldC5mYW1pbHkgPSBmYW1pbHk7CiAKQEAgLTM4MzYsNyArMzg4Nyw3IEBACiAJaXNlYyA9IFNPQ0tfSU5PREUoc29jayktPmlfc2VjdXJpdHk7CiAJaWYgKGlzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19UQ1BfU09DS0VUIHx8CiAJICAgIGlzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19EQ0NQX1NPQ0tFVCkgewotCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKIAkJc3RydWN0IHNvY2thZGRyX2luICphZGRyNCA9IE5VTEw7CiAJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2ID0gTlVMTDsKIAkJdW5zaWduZWQgc2hvcnQgc251bTsKQEAgLTM4NjEsNyArMzkxMiw3IEBACiAJCXBlcm0gPSAoaXNlYy0+c2NsYXNzID09IFNFQ0NMQVNTX1RDUF9TT0NLRVQpID8KIAkJICAgICAgIFRDUF9TT0NLRVRfX05BTUVfQ09OTkVDVCA6IERDQ1BfU09DS0VUX19OQU1FX0NPTk5FQ1Q7CiAKLQkJQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CisJCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwogCQlhZC51Lm5ldC5kcG9ydCA9IGh0b25zKHNudW0pOwogCQlhZC51Lm5ldC5mYW1pbHkgPSBzay0+c2tfZmFtaWx5OwogCQllcnIgPSBhdmNfaGFzX3Blcm0oaXNlYy0+c2lkLCBzaWQsIGlzZWMtPnNjbGFzcywgcGVybSwgJmFkKTsKQEAgLTM5NTEsMTMgKzQwMDIsMTMgQEAKIAlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjOwogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7CiAJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqb3RoZXJfaXNlYzsKLQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwogCWludCBlcnI7CiAKIAlpc2VjID0gU09DS19JTk9ERShzb2NrKS0+aV9zZWN1cml0eTsKIAlvdGhlcl9pc2VjID0gU09DS19JTk9ERShvdGhlciktPmlfc2VjdXJpdHk7CiAKLQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKKwlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKIAlhZC51Lm5ldC5zayA9IG90aGVyLT5zazsKIAogCWVyciA9IGF2Y19oYXNfcGVybShpc2VjLT5zaWQsIG90aGVyX2lzZWMtPnNpZCwKQEAgLTM5ODMsMTMgKzQwMzQsMTMgQEAKIHsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKm90aGVyX2lzZWM7Ci0Jc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKIAlpbnQgZXJyOwogCiAJaXNlYyA9IFNPQ0tfSU5PREUoc29jayktPmlfc2VjdXJpdHk7CiAJb3RoZXJfaXNlYyA9IFNPQ0tfSU5PREUob3RoZXIpLT5pX3NlY3VyaXR5OwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CiAJYWQudS5uZXQuc2sgPSBvdGhlci0+c2s7CiAKIAllcnIgPSBhdmNfaGFzX3Blcm0oaXNlYy0+c2lkLCBvdGhlcl9pc2VjLT5zaWQsCkBAIC00MDAyLDcgKzQwNTMsNyBAQAogCiBzdGF0aWMgaW50IHNlbGludXhfaW5ldF9zeXNfcmN2X3NrYihpbnQgaWZpbmRleCwgY2hhciAqYWRkcnAsIHUxNiBmYW1pbHksCiAJCQkJICAgIHUzMiBwZWVyX3NpZCwKLQkJCQkgICAgc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCkKKwkJCQkgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZCkKIHsKIAlpbnQgZXJyOwogCXUzMiBpZl9zaWQ7CkBAIC00MDMwLDEwICs0MDgxLDEwIEBACiAJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7CiAJdTMyIHBlZXJfc2lkOwogCXUzMiBza19zaWQgPSBza3NlYy0+c2lkOwotCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJY2hhciAqYWRkcnA7CiAKLQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKKwlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKIAlhZC51Lm5ldC5uZXRpZiA9IHNrYi0+aWlmOwogCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKIAllcnIgPSBzZWxpbnV4X3BhcnNlX3NrYihza2IsICZhZCwgJmFkZHJwLCAxLCBOVUxMKTsKQEAgLTQwNzEsNyArNDEyMiw3IEBACiAJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7CiAJdTE2IGZhbWlseSA9IHNrLT5za19mYW1pbHk7CiAJdTMyIHNrX3NpZCA9IHNrc2VjLT5zaWQ7Ci0Jc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKIAljaGFyICphZGRycDsKIAl1OCBzZWNtYXJrX2FjdGl2ZTsKIAl1OCBwZWVybGJsX2FjdGl2ZTsKQEAgLTQwOTUsNyArNDE0Niw3IEBACiAJaWYgKCFzZWNtYXJrX2FjdGl2ZSAmJiAhcGVlcmxibF9hY3RpdmUpCiAJCXJldHVybiAwOwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CiAJYWQudS5uZXQubmV0aWYgPSBza2ItPmlpZjsKIAlhZC51Lm5ldC5mYW1pbHkgPSBmYW1pbHk7CiAJZXJyID0gc2VsaW51eF9wYXJzZV9za2Ioc2tiLCAmYWQsICZhZGRycCwgMSwgTlVMTCk7CkBAIC00MzA5LDYgKzQzNjAsNTkgQEAKIAlmbC0+c2VjaWQgPSByZXEtPnNlY2lkOwogfQogCitzdGF0aWMgaW50IHNlbGludXhfdHVuX2Rldl9jcmVhdGUodm9pZCkKK3sKKwl1MzIgc2lkID0gY3VycmVudF9zaWQoKTsKKworCS8qIHdlIGFyZW4ndCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSAic29ja2NyZWF0ZSIgU0lEIHNpbmNlIHRoZSBzb2NrZXQKKwkgKiB0aGF0IGlzIGJlaW5nIGNyZWF0ZWQgaGVyZSBpcyBub3QgYSBzb2NrZXQgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLAorCSAqIGluc3RlYWQgaXQgaXMgYSBwcml2YXRlIHNvY2ssIGFjY2Vzc2libGUgb25seSB0byB0aGUga2VybmVsLCBhbmQKKwkgKiByZXByZXNlbnRpbmcgYSB3aWRlIHJhbmdlIG9mIG5ldHdvcmsgdHJhZmZpYyBzcGFubmluZyBtdWx0aXBsZQorCSAqIGNvbm5lY3Rpb25zIHVubGlrZSB0cmFkaXRpb25hbCBzb2NrZXRzIC0gY2hlY2sgdGhlIFRVTiBkcml2ZXIgdG8KKwkgKiBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aHkgdGhpcyBzb2NrZXQgaXMgc3BlY2lhbCAqLworCisJcmV0dXJuIGF2Y19oYXNfcGVybShzaWQsIHNpZCwgU0VDQ0xBU1NfVFVOX1NPQ0tFVCwgVFVOX1NPQ0tFVF9fQ1JFQVRFLAorCQkJICAgIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBzZWxpbnV4X3R1bl9kZXZfcG9zdF9jcmVhdGUoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OworCisJLyogd2UgZG9uJ3QgY3VycmVudGx5IHBlcmZvcm0gYW55IE5ldExhYmVsIGJhc2VkIGxhYmVsaW5nIGhlcmUgYW5kIGl0CisJICogaXNuJ3QgY2xlYXIgdGhhdCB3ZSB3b3VsZCB3YW50IHRvIGRvIHNvIGFueXdheTsgd2hpbGUgd2UgY291bGQgYXBwbHkKKwkgKiBsYWJlbGluZyB3aXRob3V0IHRoZSBzdXBwb3J0IG9mIHRoZSBUVU4gdXNlciB0aGUgcmVzdWx0aW5nIGxhYmVsZWQKKwkgKiB0cmFmZmljIGZyb20gdGhlIG90aGVyIGVuZCBvZiB0aGUgY29ubmVjdGlvbiB3b3VsZCBhbG1vc3QgY2VydGFpbmx5CisJICogY2F1c2UgY29uZnVzaW9uIHRvIHRoZSBUVU4gdXNlciB0aGF0IGhhZCBubyBpZGVhIG5ldHdvcmsgbGFiZWxpbmcKKwkgKiBwcm90b2NvbHMgd2VyZSBiZWluZyB1c2VkICovCisKKwkvKiBzZWUgdGhlIGNvbW1lbnRzIGluIHNlbGludXhfdHVuX2Rldl9jcmVhdGUoKSBhYm91dCB3aHkgd2UgZG9uJ3QgdXNlCisJICogdGhlIHNvY2tjcmVhdGUgU0lEIGhlcmUgKi8KKworCXNrc2VjLT5zaWQgPSBjdXJyZW50X3NpZCgpOworCXNrc2VjLT5zY2xhc3MgPSBTRUNDTEFTU19UVU5fU09DS0VUOworfQorCitzdGF0aWMgaW50IHNlbGludXhfdHVuX2Rldl9hdHRhY2goc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OworCXUzMiBzaWQgPSBjdXJyZW50X3NpZCgpOworCWludCBlcnI7CisKKwllcnIgPSBhdmNfaGFzX3Blcm0oc2lkLCBza3NlYy0+c2lkLCBTRUNDTEFTU19UVU5fU09DS0VULAorCQkJICAgVFVOX1NPQ0tFVF9fUkVMQUJFTEZST00sIE5VTEwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZXJyID0gYXZjX2hhc19wZXJtKHNpZCwgc2lkLCBTRUNDTEFTU19UVU5fU09DS0VULAorCQkJICAgVFVOX1NPQ0tFVF9fUkVMQUJFTFRPLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2tzZWMtPnNpZCA9IHNpZDsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNlbGludXhfbmxtc2dfcGVybShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IGVyciA9IDA7CkBAIC00MzUzLDcgKzQ0NTcsNyBAQAogCWludCBlcnI7CiAJY2hhciAqYWRkcnA7CiAJdTMyIHBlZXJfc2lkOwotCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJdTggc2VjbWFya19hY3RpdmU7CiAJdTggbmV0bGJsX2FjdGl2ZTsKIAl1OCBwZWVybGJsX2FjdGl2ZTsKQEAgLTQzNzAsNyArNDQ3NCw3IEBACiAJaWYgKHNlbGludXhfc2tiX3BlZXJsYmxfc2lkKHNrYiwgZmFtaWx5LCAmcGVlcl9zaWQpICE9IDApCiAJCXJldHVybiBORl9EUk9QOwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CiAJYWQudS5uZXQubmV0aWYgPSBpZmluZGV4OwogCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKIAlpZiAoc2VsaW51eF9wYXJzZV9za2Ioc2tiLCAmYWQsICZhZGRycCwgMSwgTlVMTCkgIT0gMCkKQEAgLTQ0NTgsNyArNDU2Miw3IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKIAlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYzsKLQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwogCWNoYXIgKmFkZHJwOwogCXU4IHByb3RvOwogCkBAIC00NDY2LDcgKzQ1NzAsNyBAQAogCQlyZXR1cm4gTkZfQUNDRVBUOwogCXNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CiAJYWQudS5uZXQubmV0aWYgPSBpZmluZGV4OwogCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKIAlpZiAoc2VsaW51eF9wYXJzZV9za2Ioc2tiLCAmYWQsICZhZGRycCwgMCwgJnByb3RvKSkKQEAgLTQ0OTAsNyArNDU5NCw3IEBACiAJdTMyIHNlY21hcmtfcGVybTsKIAl1MzIgcGVlcl9zaWQ7CiAJc3RydWN0IHNvY2sgKnNrOwotCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJY2hhciAqYWRkcnA7CiAJdTggc2VjbWFya19hY3RpdmU7CiAJdTggcGVlcmxibF9hY3RpdmU7CkBAIC00NTQ5LDcgKzQ2NTMsNyBAQAogCQlzZWNtYXJrX3Blcm0gPSBQQUNLRVRfX1NFTkQ7CiAJfQogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CiAJYWQudS5uZXQubmV0aWYgPSBpZmluZGV4OwogCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKIAlpZiAoc2VsaW51eF9wYXJzZV9za2Ioc2tiLCAmYWQsICZhZGRycCwgMCwgTlVMTCkpCkBAIC00NjE5LDEzICs0NzIzLDEzIEBACiBzdGF0aWMgaW50IHNlbGludXhfbmV0bGlua19yZWN2KHN0cnVjdCBza19idWZmICpza2IsIGludCBjYXBhYmlsaXR5KQogewogCWludCBlcnI7Ci0Jc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKIAogCWVyciA9IGNhcF9uZXRsaW5rX3JlY3Yoc2tiLCBjYXBhYmlsaXR5KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIENBUCk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIENBUCk7CiAJYWQudS5jYXAgPSBjYXBhYmlsaXR5OwogCiAJcmV0dXJuIGF2Y19oYXNfcGVybShORVRMSU5LX0NCKHNrYikuc2lkLCBORVRMSU5LX0NCKHNrYikuc2lkLApAQCAtNDY4NCwxMiArNDc4OCwxMiBAQAogCQkJdTMyIHBlcm1zKQogewogCXN0cnVjdCBpcGNfc2VjdXJpdHlfc3RydWN0ICppc2VjOwotCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJdTMyIHNpZCA9IGN1cnJlbnRfc2lkKCk7CiAKIAlpc2VjID0gaXBjX3Blcm1zLT5zZWN1cml0eTsKIAotCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBJUEMpOworCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBJUEMpOwogCWFkLnUuaXBjX2lkID0gaXBjX3Blcm1zLT5rZXk7CiAKIAlyZXR1cm4gYXZjX2hhc19wZXJtKHNpZCwgaXNlYy0+c2lkLCBpc2VjLT5zY2xhc3MsIHBlcm1zLCAmYWQpOwpAQCAtNDcwOSw3ICs0ODEzLDcgQEAKIHN0YXRpYyBpbnQgc2VsaW51eF9tc2dfcXVldWVfYWxsb2Nfc2VjdXJpdHkoc3RydWN0IG1zZ19xdWV1ZSAqbXNxKQogewogCXN0cnVjdCBpcGNfc2VjdXJpdHlfc3RydWN0ICppc2VjOwotCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJdTMyIHNpZCA9IGN1cnJlbnRfc2lkKCk7CiAJaW50IHJjOwogCkBAIC00NzE5LDcgKzQ4MjMsNyBAQAogCiAJaXNlYyA9IG1zcS0+cV9wZXJtLnNlY3VyaXR5OwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CiAJYWQudS5pcGNfaWQgPSBtc3EtPnFfcGVybS5rZXk7CiAKIAlyYyA9IGF2Y19oYXNfcGVybShzaWQsIGlzZWMtPnNpZCwgU0VDQ0xBU1NfTVNHUSwKQEAgLTQ3MzksMTIgKzQ4NDMsMTIgQEAKIHN0YXRpYyBpbnQgc2VsaW51eF9tc2dfcXVldWVfYXNzb2NpYXRlKHN0cnVjdCBtc2dfcXVldWUgKm1zcSwgaW50IG1zcWZsZykKIHsKIAlzdHJ1Y3QgaXBjX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKLQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwogCXUzMiBzaWQgPSBjdXJyZW50X3NpZCgpOwogCiAJaXNlYyA9IG1zcS0+cV9wZXJtLnNlY3VyaXR5OwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CiAJYWQudS5pcGNfaWQgPSBtc3EtPnFfcGVybS5rZXk7CiAKIAlyZXR1cm4gYXZjX2hhc19wZXJtKHNpZCwgaXNlYy0+c2lkLCBTRUNDTEFTU19NU0dRLApAQCAtNDc4Myw3ICs0ODg3LDcgQEAKIHsKIAlzdHJ1Y3QgaXBjX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKIAlzdHJ1Y3QgbXNnX3NlY3VyaXR5X3N0cnVjdCAqbXNlYzsKLQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwogCXUzMiBzaWQgPSBjdXJyZW50X3NpZCgpOwogCWludCByYzsKIApAQCAtNDgwNCw3ICs0OTA4LDcgQEAKIAkJCXJldHVybiByYzsKIAl9CiAKLQlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgSVBDKTsKKwlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgSVBDKTsKIAlhZC51LmlwY19pZCA9IG1zcS0+cV9wZXJtLmtleTsKIAogCS8qIENhbiB0aGlzIHByb2Nlc3Mgd3JpdGUgdG8gdGhlIHF1ZXVlPyAqLwpAQCAtNDgyOCwxNCArNDkzMiwxNCBAQAogewogCXN0cnVjdCBpcGNfc2VjdXJpdHlfc3RydWN0ICppc2VjOwogCXN0cnVjdCBtc2dfc2VjdXJpdHlfc3RydWN0ICptc2VjOwotCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKKwlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJdTMyIHNpZCA9IHRhc2tfc2lkKHRhcmdldCk7CiAJaW50IHJjOwogCiAJaXNlYyA9IG1zcS0+cV9wZXJtLnNlY3VyaXR5OwogCW1zZWMgPSBtc2ctPnNlY3VyaXR5OwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CiAJYWQudS5pcGNfaWQgPSBtc3EtPnFfcGVybS5rZXk7CiAKIAlyYyA9IGF2Y19oYXNfcGVybShzaWQsIGlzZWMtPnNpZCwKQEAgLTQ4NTAsNyArNDk1NCw3IEBACiBzdGF0aWMgaW50IHNlbGludXhfc2htX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBzaG1pZF9rZXJuZWwgKnNocCkKIHsKIAlzdHJ1Y3QgaXBjX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKLQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwogCXUzMiBzaWQgPSBjdXJyZW50X3NpZCgpOwogCWludCByYzsKIApAQCAtNDg2MCw3ICs0OTY0LDcgQEAKIAogCWlzZWMgPSBzaHAtPnNobV9wZXJtLnNlY3VyaXR5OwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CiAJYWQudS5pcGNfaWQgPSBzaHAtPnNobV9wZXJtLmtleTsKIAogCXJjID0gYXZjX2hhc19wZXJtKHNpZCwgaXNlYy0+c2lkLCBTRUNDTEFTU19TSE0sCkBAIC00ODgwLDEyICs0OTg0LDEyIEBACiBzdGF0aWMgaW50IHNlbGludXhfc2htX2Fzc29jaWF0ZShzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHAsIGludCBzaG1mbGcpCiB7CiAJc3RydWN0IGlwY19zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7Ci0Jc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKIAl1MzIgc2lkID0gY3VycmVudF9zaWQoKTsKIAogCWlzZWMgPSBzaHAtPnNobV9wZXJtLnNlY3VyaXR5OwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CiAJYWQudS5pcGNfaWQgPSBzaHAtPnNobV9wZXJtLmtleTsKIAogCXJldHVybiBhdmNfaGFzX3Blcm0oc2lkLCBpc2VjLT5zaWQsIFNFQ0NMQVNTX1NITSwKQEAgLTQ5NDIsNyArNTA0Niw3IEBACiBzdGF0aWMgaW50IHNlbGludXhfc2VtX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBzZW1fYXJyYXkgKnNtYSkKIHsKIAlzdHJ1Y3QgaXBjX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKLQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwogCXUzMiBzaWQgPSBjdXJyZW50X3NpZCgpOwogCWludCByYzsKIApAQCAtNDk1Miw3ICs1MDU2LDcgQEAKIAogCWlzZWMgPSBzbWEtPnNlbV9wZXJtLnNlY3VyaXR5OwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CiAJYWQudS5pcGNfaWQgPSBzbWEtPnNlbV9wZXJtLmtleTsKIAogCXJjID0gYXZjX2hhc19wZXJtKHNpZCwgaXNlYy0+c2lkLCBTRUNDTEFTU19TRU0sCkBAIC00OTcyLDEyICs1MDc2LDEyIEBACiBzdGF0aWMgaW50IHNlbGludXhfc2VtX2Fzc29jaWF0ZShzdHJ1Y3Qgc2VtX2FycmF5ICpzbWEsIGludCBzZW1mbGcpCiB7CiAJc3RydWN0IGlwY19zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7Ci0Jc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKIAl1MzIgc2lkID0gY3VycmVudF9zaWQoKTsKIAogCWlzZWMgPSBzbWEtPnNlbV9wZXJtLnNlY3VyaXR5OwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIElQQyk7CiAJYWQudS5pcGNfaWQgPSBzbWEtPnNlbV9wZXJtLmtleTsKIAogCXJldHVybiBhdmNfaGFzX3Blcm0oc2lkLCBpc2VjLT5zaWQsIFNFQ0NMQVNTX1NFTSwKQEAgLTUxOTUsNyArNTI5OSw3IEBACiAKIAkJLyogT25seSBhbGxvdyBzaW5nbGUgdGhyZWFkZWQgcHJvY2Vzc2VzIHRvIGNoYW5nZSBjb250ZXh0ICovCiAJCWVycm9yID0gLUVQRVJNOwotCQlpZiAoIWlzX3NpbmdsZV90aHJlYWRlZChwKSkgeworCQlpZiAoIWN1cnJlbnRfaXNfc2luZ2xlX3RocmVhZGVkKCkpIHsKIAkJCWVycm9yID0gc2VjdXJpdHlfYm91bmRlZF90cmFuc2l0aW9uKHRzZWMtPnNpZCwgc2lkKTsKIAkJCWlmIChlcnJvcikKIAkJCQlnb3RvIGFib3J0X2NoYW5nZTsKQEAgLTUyNTIsNiArNTM1NiwzMiBAQAogCWtmcmVlKHNlY2RhdGEpOwogfQogCisvKgorICoJY2FsbGVkIHdpdGggaW5vZGUtPmlfbXV0ZXggbG9ja2VkCisgKi8KK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ub3RpZnlzZWNjdHgoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqY3R4LCB1MzIgY3R4bGVuKQoreworCXJldHVybiBzZWxpbnV4X2lub2RlX3NldHNlY3VyaXR5KGlub2RlLCBYQVRUUl9TRUxJTlVYX1NVRkZJWCwgY3R4LCBjdHhsZW4sIDApOworfQorCisvKgorICoJY2FsbGVkIHdpdGggaW5vZGUtPmlfbXV0ZXggbG9ja2VkCisgKi8KK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zZXRzZWNjdHgoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB2b2lkICpjdHgsIHUzMiBjdHhsZW4pCit7CisJcmV0dXJuIF9fdmZzX3NldHhhdHRyX25vcGVybShkZW50cnksIFhBVFRSX05BTUVfU0VMSU5VWCwgY3R4LCBjdHhsZW4sIDApOworfQorCitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfZ2V0c2VjY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKipjdHgsIHUzMiAqY3R4bGVuKQoreworCWludCBsZW4gPSAwOworCWxlbiA9IHNlbGludXhfaW5vZGVfZ2V0c2VjdXJpdHkoaW5vZGUsIFhBVFRSX1NFTElOVVhfU1VGRklYLAorCQkJCQkJY3R4LCB0cnVlKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIGxlbjsKKwkqY3R4bGVuID0gbGVuOworCXJldHVybiAwOworfQogI2lmZGVmIENPTkZJR19LRVlTCiAKIHN0YXRpYyBpbnQgc2VsaW51eF9rZXlfYWxsb2Moc3RydWN0IGtleSAqaywgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCkBAIC01MzIzLDcgKzU0NTMsNyBAQAogc3RhdGljIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIHNlbGludXhfb3BzID0gewogCS5uYW1lID0JCQkJInNlbGludXgiLAogCi0JLnB0cmFjZV9tYXlfYWNjZXNzID0JCXNlbGludXhfcHRyYWNlX21heV9hY2Nlc3MsCisJLnB0cmFjZV9hY2Nlc3NfY2hlY2sgPQkJc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrLAogCS5wdHJhY2VfdHJhY2VtZSA9CQlzZWxpbnV4X3B0cmFjZV90cmFjZW1lLAogCS5jYXBnZXQgPQkJCXNlbGludXhfY2FwZ2V0LAogCS5jYXBzZXQgPQkJCXNlbGludXhfY2Fwc2V0LApAQCAtNTM5NiwxMCArNTUyNiwxMyBAQAogCS5kZW50cnlfb3BlbiA9CQkJc2VsaW51eF9kZW50cnlfb3BlbiwKIAogCS50YXNrX2NyZWF0ZSA9CQkJc2VsaW51eF90YXNrX2NyZWF0ZSwKKwkuY3JlZF9hbGxvY19ibGFuayA9CQlzZWxpbnV4X2NyZWRfYWxsb2NfYmxhbmssCiAJLmNyZWRfZnJlZSA9CQkJc2VsaW51eF9jcmVkX2ZyZWUsCiAJLmNyZWRfcHJlcGFyZSA9CQkJc2VsaW51eF9jcmVkX3ByZXBhcmUsCisJLmNyZWRfdHJhbnNmZXIgPQkJc2VsaW51eF9jcmVkX3RyYW5zZmVyLAogCS5rZXJuZWxfYWN0X2FzID0JCXNlbGludXhfa2VybmVsX2FjdF9hcywKIAkua2VybmVsX2NyZWF0ZV9maWxlc19hcyA9CXNlbGludXhfa2VybmVsX2NyZWF0ZV9maWxlc19hcywKKwkua2VybmVsX21vZHVsZV9yZXF1ZXN0ID0Jc2VsaW51eF9rZXJuZWxfbW9kdWxlX3JlcXVlc3QsCiAJLnRhc2tfc2V0cGdpZCA9CQkJc2VsaW51eF90YXNrX3NldHBnaWQsCiAJLnRhc2tfZ2V0cGdpZCA9CQkJc2VsaW51eF90YXNrX2dldHBnaWQsCiAJLnRhc2tfZ2V0c2lkID0JCQlzZWxpbnV4X3Rhc2tfZ2V0c2lkLApAQCAtNTQ0OCw2ICs1NTgxLDkgQEAKIAkuc2VjaWRfdG9fc2VjY3R4ID0JCXNlbGludXhfc2VjaWRfdG9fc2VjY3R4LAogCS5zZWNjdHhfdG9fc2VjaWQgPQkJc2VsaW51eF9zZWNjdHhfdG9fc2VjaWQsCiAJLnJlbGVhc2Vfc2VjY3R4ID0JCXNlbGludXhfcmVsZWFzZV9zZWNjdHgsCisJLmlub2RlX25vdGlmeXNlY2N0eCA9CQlzZWxpbnV4X2lub2RlX25vdGlmeXNlY2N0eCwKKwkuaW5vZGVfc2V0c2VjY3R4ID0JCXNlbGludXhfaW5vZGVfc2V0c2VjY3R4LAorCS5pbm9kZV9nZXRzZWNjdHggPQkJc2VsaW51eF9pbm9kZV9nZXRzZWNjdHgsCiAKIAkudW5peF9zdHJlYW1fY29ubmVjdCA9CQlzZWxpbnV4X3NvY2tldF91bml4X3N0cmVhbV9jb25uZWN0LAogCS51bml4X21heV9zZW5kID0JCXNlbGludXhfc29ja2V0X3VuaXhfbWF5X3NlbmQsCkBAIC01NDc3LDYgKzU2MTMsOSBAQAogCS5pbmV0X2Nza19jbG9uZSA9CQlzZWxpbnV4X2luZXRfY3NrX2Nsb25lLAogCS5pbmV0X2Nvbm5fZXN0YWJsaXNoZWQgPQlzZWxpbnV4X2luZXRfY29ubl9lc3RhYmxpc2hlZCwKIAkucmVxX2NsYXNzaWZ5X2Zsb3cgPQkJc2VsaW51eF9yZXFfY2xhc3NpZnlfZmxvdywKKwkudHVuX2Rldl9jcmVhdGUgPQkJc2VsaW51eF90dW5fZGV2X2NyZWF0ZSwKKwkudHVuX2Rldl9wb3N0X2NyZWF0ZSA9IAkJc2VsaW51eF90dW5fZGV2X3Bvc3RfY3JlYXRlLAorCS50dW5fZGV2X2F0dGFjaCA9CQlzZWxpbnV4X3R1bl9kZXZfYXR0YWNoLAogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTQogCS54ZnJtX3BvbGljeV9hbGxvY19zZWN1cml0eSA9CXNlbGludXhfeGZybV9wb2xpY3lfYWxsb2MsCkBAIC01NjkxLDYgKzU4MzAsOSBAQAogCXNlbGludXhfZGlzYWJsZWQgPSAxOwogCXNlbGludXhfZW5hYmxlZCA9IDA7CiAKKwkvKiBUcnkgdG8gZGVzdHJveSB0aGUgYXZjIG5vZGUgY2FjaGUgKi8KKwlhdmNfZGlzYWJsZSgpOworCiAJLyogUmVzZXQgc2VjdXJpdHlfb3BzIHRvIHRoZSBzZWNvbmRhcnkgbW9kdWxlLCBkdW1teSBvciBjYXBhYmlsaXR5LiAqLwogCXNlY3VyaXR5X29wcyA9IHNlY29uZGFyeV9vcHM7CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9pbmhlcml0LmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfaW5oZXJpdC5oCmluZGV4IDgzNzdhNGIuLmFiZWRjZDcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9pbmhlcml0LmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X2luaGVyaXQuaApAQCAtMTUsNiArMTUsNyBAQAogICAgU18oU0VDQ0xBU1NfS0VZX1NPQ0tFVCwgc29ja2V0LCAweDAwNDAwMDAwVUwpCiAgICBTXyhTRUNDTEFTU19VTklYX1NUUkVBTV9TT0NLRVQsIHNvY2tldCwgMHgwMDQwMDAwMFVMKQogICAgU18oU0VDQ0xBU1NfVU5JWF9ER1JBTV9TT0NLRVQsIHNvY2tldCwgMHgwMDQwMDAwMFVMKQorICAgU18oU0VDQ0xBU1NfVFVOX1NPQ0tFVCwgc29ja2V0LCAweDAwNDAwMDAwVUwpCiAgICBTXyhTRUNDTEFTU19JUEMsIGlwYywgMHgwMDAwMDIwMFVMKQogICAgU18oU0VDQ0xBU1NfU0VNLCBpcGMsIDB4MDAwMDAyMDBVTCkKICAgIFNfKFNFQ0NMQVNTX01TR1EsIGlwYywgMHgwMDAwMDIwMFVMKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaAppbmRleCAzMWRmMWQ3Li4yYjY4M2FkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybV90b19zdHJpbmcuaApAQCAtMTA3LDYgKzEwNyw3IEBACiAgICBTXyhTRUNDTEFTU19TWVNURU0sIFNZU1RFTV9fU1lTTE9HX1JFQUQsICJzeXNsb2dfcmVhZCIpCiAgICBTXyhTRUNDTEFTU19TWVNURU0sIFNZU1RFTV9fU1lTTE9HX01PRCwgInN5c2xvZ19tb2QiKQogICAgU18oU0VDQ0xBU1NfU1lTVEVNLCBTWVNURU1fX1NZU0xPR19DT05TT0xFLCAic3lzbG9nX2NvbnNvbGUiKQorICAgU18oU0VDQ0xBU1NfU1lTVEVNLCBTWVNURU1fX01PRFVMRV9SRVFVRVNULCAibW9kdWxlX3JlcXVlc3QiKQogICAgU18oU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQQUJJTElUWV9fQ0hPV04sICJjaG93biIpCiAgICBTXyhTRUNDTEFTU19DQVBBQklMSVRZLCBDQVBBQklMSVRZX19EQUNfT1ZFUlJJREUsICJkYWNfb3ZlcnJpZGUiKQogICAgU18oU0VDQ0xBU1NfQ0FQQUJJTElUWSwgQ0FQQUJJTElUWV9fREFDX1JFQURfU0VBUkNILCAiZGFjX3JlYWRfc2VhcmNoIikKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtaXNzaW9ucy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKaW5kZXggZDY0NTE5Mi4uMDU0NmQ2MSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmgKQEAgLTQyMyw2ICs0MjMsMjggQEAKICNkZWZpbmUgVU5JWF9ER1JBTV9TT0NLRVRfX1JFQ1ZfTVNHICAgICAgICAgICAgICAgMHgwMDA4MDAwMFVMCiAjZGVmaW5lIFVOSVhfREdSQU1fU09DS0VUX19TRU5EX01TRyAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVTAogI2RlZmluZSBVTklYX0RHUkFNX1NPQ0tFVF9fTkFNRV9CSU5EICAgICAgICAgICAgICAweDAwMjAwMDAwVUwKKyNkZWZpbmUgVFVOX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCisjZGVmaW5lIFRVTl9TT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAorI2RlZmluZSBUVU5fU09DS0VUX19XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKKyNkZWZpbmUgVFVOX1NPQ0tFVF9fQ1JFQVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCisjZGVmaW5lIFRVTl9TT0NLRVRfX0dFVEFUVFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAorI2RlZmluZSBUVU5fU09DS0VUX19TRVRBVFRSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKKyNkZWZpbmUgVFVOX1NPQ0tFVF9fTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCisjZGVmaW5lIFRVTl9TT0NLRVRfX1JFTEFCRUxGUk9NICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVTAorI2RlZmluZSBUVU5fU09DS0VUX19SRUxBQkVMVE8gICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKKyNkZWZpbmUgVFVOX1NPQ0tFVF9fQVBQRU5EICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFVMCisjZGVmaW5lIFRVTl9TT0NLRVRfX0JJTkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVTAorI2RlZmluZSBUVU5fU09DS0VUX19DT05ORUNUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwVUwKKyNkZWZpbmUgVFVOX1NPQ0tFVF9fTElTVEVOICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFVMCisjZGVmaW5lIFRVTl9TT0NLRVRfX0FDQ0VQVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVTAorI2RlZmluZSBUVU5fU09DS0VUX19HRVRPUFQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKKyNkZWZpbmUgVFVOX1NPQ0tFVF9fU0VUT1BUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFVMCisjZGVmaW5lIFRVTl9TT0NLRVRfX1NIVVRET1dOICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAorI2RlZmluZSBUVU5fU09DS0VUX19SRUNWRlJPTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVUwKKyNkZWZpbmUgVFVOX1NPQ0tFVF9fU0VORFRPICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFVMCisjZGVmaW5lIFRVTl9TT0NLRVRfX1JFQ1ZfTVNHICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVTAorI2RlZmluZSBUVU5fU09DS0VUX19TRU5EX01TRyAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwVUwKKyNkZWZpbmUgVFVOX1NPQ0tFVF9fTkFNRV9CSU5EICAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMFVMCiAjZGVmaW5lIFBST0NFU1NfX0ZPUksgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAogI2RlZmluZSBQUk9DRVNTX19UUkFOU0lUSU9OICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKICNkZWZpbmUgUFJPQ0VTU19fU0lHQ0hMRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCkBAIC01MDgsNiArNTMwLDcgQEAKICNkZWZpbmUgU1lTVEVNX19TWVNMT0dfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCiAjZGVmaW5lIFNZU1RFTV9fU1lTTE9HX01PRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTAogI2RlZmluZSBTWVNURU1fX1NZU0xPR19DT05TT0xFICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4VUwKKyNkZWZpbmUgU1lTVEVNX19NT0RVTEVfUkVRVUVTVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCiAjZGVmaW5lIENBUEFCSUxJVFlfX0NIT1dOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAogI2RlZmluZSBDQVBBQklMSVRZX19EQUNfT1ZFUlJJREUgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKICNkZWZpbmUgQ0FQQUJJTElUWV9fREFDX1JFQURfU0VBUkNIICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgKaW5kZXggZDEyZmYxYS4uZTk0ZTgyZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaApAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisjaW5jbHVkZSA8bGludXgvbHNtX2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAjaW5jbHVkZSA8bGludXgvcGF0aC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTM2LDQ4ICszNyw2IEBACiBzdHJ1Y3Qgc29jazsKIHN0cnVjdCBza19idWZmOwogCi0vKiBBdXhpbGlhcnkgZGF0YSB0byB1c2UgaW4gZ2VuZXJhdGluZyB0aGUgYXVkaXQgcmVjb3JkLiAqLwotc3RydWN0IGF2Y19hdWRpdF9kYXRhIHsKLQljaGFyICAgIHR5cGU7Ci0jZGVmaW5lIEFWQ19BVURJVF9EQVRBX0ZTICAgMQotI2RlZmluZSBBVkNfQVVESVRfREFUQV9ORVQgIDIKLSNkZWZpbmUgQVZDX0FVRElUX0RBVEFfQ0FQICAzCi0jZGVmaW5lIEFWQ19BVURJVF9EQVRBX0lQQyAgNAotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwotCXVuaW9uIAl7Ci0JCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgcGF0aCBwYXRoOwotCQkJc3RydWN0IGlub2RlICppbm9kZTsKLQkJfSBmczsKLQkJc3RydWN0IHsKLQkJCWludCBuZXRpZjsKLQkJCXN0cnVjdCBzb2NrICpzazsKLQkJCXUxNiBmYW1pbHk7Ci0JCQlfX2JlMTYgZHBvcnQ7Ci0JCQlfX2JlMTYgc3BvcnQ7Ci0JCQl1bmlvbiB7Ci0JCQkJc3RydWN0IHsKLQkJCQkJX19iZTMyIGRhZGRyOwotCQkJCQlfX2JlMzIgc2FkZHI7Ci0JCQkJfSB2NDsKLQkJCQlzdHJ1Y3QgewotCQkJCQlzdHJ1Y3QgaW42X2FkZHIgZGFkZHI7Ci0JCQkJCXN0cnVjdCBpbjZfYWRkciBzYWRkcjsKLQkJCQl9IHY2OwotCQkJfSBmYW07Ci0JCX0gbmV0OwotCQlpbnQgY2FwOwotCQlpbnQgaXBjX2lkOwotCX0gdTsKLX07Ci0KLSNkZWZpbmUgdjRpbmZvIGZhbS52NAotI2RlZmluZSB2NmluZm8gZmFtLnY2Ci0KLS8qIEluaXRpYWxpemUgYW4gQVZDIGF1ZGl0IGRhdGEgc3RydWN0dXJlLiAqLwotI2RlZmluZSBBVkNfQVVESVRfREFUQV9JTklUKF9kLF90KSBcCi0JeyBtZW1zZXQoKF9kKSwgMCwgc2l6ZW9mKHN0cnVjdCBhdmNfYXVkaXRfZGF0YSkpOyAoX2QpLT50eXBlID0gQVZDX0FVRElUX0RBVEFfIyNfdDsgfQotCiAvKgogICogQVZDIHN0YXRpc3RpY3MKICAqLwpAQCAtOTgsNyArNTcsOSBAQAogCiB2b2lkIGF2Y19hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsCiAJICAgICAgIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsCi0JICAgICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkLCBpbnQgcmVzdWx0LCBzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmF1ZGl0ZGF0YSk7CisJICAgICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkLAorCSAgICAgICBpbnQgcmVzdWx0LAorCSAgICAgICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmEpOwogCiAjZGVmaW5lIEFWQ19TVFJJQ1QgMSAvKiBJZ25vcmUgcGVybWlzc2l2ZSBtb2RlLiAqLwogaW50IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwKQEAgLTEwOCw3ICs2OSw3IEBACiAKIGludCBhdmNfaGFzX3Blcm0odTMyIHNzaWQsIHUzMiB0c2lkLAogCQkgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwKLQkJIHN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYXVkaXRkYXRhKTsKKwkJIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYXVkaXRkYXRhKTsKIAogdTMyIGF2Y19wb2xpY3lfc2Vxbm8odm9pZCk7CiAKQEAgLTEyNywxMyArODgsMTMgQEAKIAkJICAgICB1MzIgZXZlbnRzLCB1MzIgc3NpZCwgdTMyIHRzaWQsCiAJCSAgICAgdTE2IHRjbGFzcywgdTMyIHBlcm1zKTsKIAotLyogU2hvd3MgcGVybWlzc2lvbiBpbiBodW1hbiByZWFkYWJsZSBmb3JtICovCi12b2lkIGF2Y19kdW1wX2F2KHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCB1MTYgdGNsYXNzLCB1MzIgYXYpOwotCiAvKiBFeHBvcnRlZCB0byBzZWxpbnV4ZnMgKi8KIGludCBhdmNfZ2V0X2hhc2hfc3RhdHMoY2hhciAqcGFnZSk7CiBleHRlcm4gdW5zaWduZWQgaW50IGF2Y19jYWNoZV90aHJlc2hvbGQ7CiAKKy8qIEF0dGVtcHQgdG8gZnJlZSBhdmMgbm9kZSBjYWNoZSAqLwordm9pZCBhdmNfZGlzYWJsZSh2b2lkKTsKKwogI2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUUwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBhdmNfY2FjaGVfc3RhdHMsIGF2Y19jYWNoZV9zdGF0cyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9jbGFzc190b19zdHJpbmcuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9jbGFzc190b19zdHJpbmcuaAppbmRleCAyMWVjNzg2Li43YWI5Mjk5IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvY2xhc3NfdG9fc3RyaW5nLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2NsYXNzX3RvX3N0cmluZy5oCkBAIC03NywzICs3Nyw0IEBACiAgICAgU18oTlVMTCkKICAgICBTXyhOVUxMKQogICAgIFNfKCJrZXJuZWxfc2VydmljZSIpCisgICAgU18oInR1bl9zb2NrZXQiKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2ZsYXNrLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvZmxhc2suaAppbmRleCA4ODJmMjdkLi5mMjQ4NTAwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvZmxhc2suaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvZmxhc2suaApAQCAtNTMsNiArNTMsNyBAQAogI2RlZmluZSBTRUNDTEFTU19QRUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjgKICNkZWZpbmUgU0VDQ0xBU1NfQ0FQQUJJTElUWTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY5CiAjZGVmaW5lIFNFQ0NMQVNTX0tFUk5FTF9TRVJWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICA3NAorI2RlZmluZSBTRUNDTEFTU19UVU5fU09DS0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzUKIAogLyoKICAqIFNlY3VyaXR5IGlkZW50aWZpZXIgaW5kaWNlcyBmb3IgaW5pdGlhbCBlbnRpdGllcwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaAppbmRleCBiNGI1YjliLi44ZDczODQyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaApAQCAtNTksNyArNTksNyBAQAogaW50IHNlbGludXhfbmV0bGJsX3NvY2tfcmN2X3NrYihzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYywKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXUxNiBmYW1pbHksCi0JCQkJc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCk7CisJCQkJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZCk7CiBpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywKIAkJCQkgICAgIGludCBsZXZlbCwKIAkJCQkgICAgIGludCBvcHRuYW1lKTsKQEAgLTEyOSw3ICsxMjksNyBAQAogc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9uZXRsYmxfc29ja19yY3Zfc2tiKHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjLAogCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgICB1MTYgZmFtaWx5LAotCQkJCQkgICAgICBzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkKQorCQkJCQkgICAgICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3hmcm0uaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS94ZnJtLmgKaW5kZXggMjg5ZTI0Yi4uMTMxMjhmOSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3hmcm0uaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUveGZybS5oCkBAIC00MSw5ICs0MSw5IEBACiB9CiAKIGludCBzZWxpbnV4X3hmcm1fc29ja19yY3Zfc2tiKHUzMiBzaWQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkKTsKKwkJCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWQpOwogaW50IHNlbGludXhfeGZybV9wb3N0cm91dGVfbGFzdCh1MzIgaXNlY19zaWQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkLCB1OCBwcm90byk7CisJCQlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkLCB1OCBwcm90byk7CiBpbnQgc2VsaW51eF94ZnJtX2RlY29kZV9zZXNzaW9uKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqc2lkLCBpbnQgY2thbGwpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF94ZnJtX25vdGlmeV9wb2xpY3lsb2FkKHZvaWQpCkBAIC01NywxMyArNTcsMTMgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF94ZnJtX3NvY2tfcmN2X3NrYih1MzIgaXNlY19zaWQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkKQorCQkJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZCkKIHsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF94ZnJtX3Bvc3Ryb3V0ZV9sYXN0KHUzMiBpc2VjX3NpZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQsIHU4IHByb3RvKQorCQkJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZCwgdTggcHJvdG8pCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMgYi9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMKaW5kZXggMmU5ODQ0MS4uZTY4ODIzNyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9uZXRsYWJlbC5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYwpAQCAtMzQyLDcgKzM0Miw3IEBACiBpbnQgc2VsaW51eF9uZXRsYmxfc29ja19yY3Zfc2tiKHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjLAogCQkJCXN0cnVjdCBza19idWZmICpza2IsCiAJCQkJdTE2IGZhbWlseSwKLQkJCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkKQorCQkJCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWQpCiB7CiAJaW50IHJjOwogCXUzMiBubGJsX3NpZDsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwppbmRleCA1MDBlNmY3Li5mZjE3ODIwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCkBAIC0yMiw2ICsyMiwxMSBAQAogICoKICAqICBBZGRlZCB2YWxpZGF0aW9uIG9mIGtlcm5lbCBjbGFzc2VzIGFuZCBwZXJtaXNzaW9ucwogICoKKyAqIFVwZGF0ZWQ6IEthaUdhaSBLb2hlaSA8a2FpZ2FpQGFrLmpwLm5lYy5jb20+CisgKgorICogIEFkZGVkIHN1cHBvcnQgZm9yIGJvdW5kcyBkb21haW4gYW5kIGF1ZGl0IG1lc3NhZ2VkIG9uIG1hc2tlZCBwZXJtaXNzaW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBORUMgQ29ycG9yYXRpb24KICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgogICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgVHJ1c3RlZCBDb21wdXRlciBTb2x1dGlvbnMsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDQsIDIwMDYgVHJlc3lzIFRlY2hub2xvZ3ksIExMQwpAQCAtMjc5LDYgKzI4NCw5NSBAQAogfQogCiAvKgorICogc2VjdXJpdHlfZHVtcF9tYXNrZWRfYXYgLSBkdW1wcyBtYXNrZWQgcGVybWlzc2lvbnMgZHVyaW5nCisgKiBzZWN1cml0eV9jb21wdXRlX2F2IGR1ZSB0byBSQkFDLCBNTFMvQ29uc3RyYWludCBhbmQgVHlwZSBib3VuZHMuCisgKi8KK3N0YXRpYyBpbnQgZHVtcF9tYXNrZWRfYXZfaGVscGVyKHZvaWQgKmssIHZvaWQgKmQsIHZvaWQgKmFyZ3MpCit7CisJc3RydWN0IHBlcm1fZGF0dW0gKnBkYXR1bSA9IGQ7CisJY2hhciAqKnBlcm1pc3Npb25fbmFtZXMgPSBhcmdzOworCisJQlVHX09OKHBkYXR1bS0+dmFsdWUgPCAxIHx8IHBkYXR1bS0+dmFsdWUgPiAzMik7CisKKwlwZXJtaXNzaW9uX25hbWVzW3BkYXR1bS0+dmFsdWUgLSAxXSA9IChjaGFyICopazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZWN1cml0eV9kdW1wX21hc2tlZF9hdihzdHJ1Y3QgY29udGV4dCAqc2NvbnRleHQsCisJCQkJICAgIHN0cnVjdCBjb250ZXh0ICp0Y29udGV4dCwKKwkJCQkgICAgdTE2IHRjbGFzcywKKwkJCQkgICAgdTMyIHBlcm1pc3Npb25zLAorCQkJCSAgICBjb25zdCBjaGFyICpyZWFzb24pCit7CisJc3RydWN0IGNvbW1vbl9kYXR1bSAqY29tbW9uX2RhdDsKKwlzdHJ1Y3QgY2xhc3NfZGF0dW0gKnRjbGFzc19kYXQ7CisJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWI7CisJY2hhciAqdGNsYXNzX25hbWU7CisJY2hhciAqc2NvbnRleHRfbmFtZSA9IE5VTEw7CisJY2hhciAqdGNvbnRleHRfbmFtZSA9IE5VTEw7CisJY2hhciAqcGVybWlzc2lvbl9uYW1lc1szMl07CisJaW50IGluZGV4LCBsZW5ndGg7CisJYm9vbCBuZWVkX2NvbW1hID0gZmFsc2U7CisKKwlpZiAoIXBlcm1pc3Npb25zKQorCQlyZXR1cm47CisKKwl0Y2xhc3NfbmFtZSA9IHBvbGljeWRiLnBfY2xhc3NfdmFsX3RvX25hbWVbdGNsYXNzIC0gMV07CisJdGNsYXNzX2RhdCA9IHBvbGljeWRiLmNsYXNzX3ZhbF90b19zdHJ1Y3RbdGNsYXNzIC0gMV07CisJY29tbW9uX2RhdCA9IHRjbGFzc19kYXQtPmNvbWRhdHVtOworCisJLyogaW5pdCBwZXJtaXNzaW9uX25hbWVzICovCisJaWYgKGNvbW1vbl9kYXQgJiYKKwkgICAgaGFzaHRhYl9tYXAoY29tbW9uX2RhdC0+cGVybWlzc2lvbnMudGFibGUsCisJCQlkdW1wX21hc2tlZF9hdl9oZWxwZXIsIHBlcm1pc3Npb25fbmFtZXMpIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoaGFzaHRhYl9tYXAodGNsYXNzX2RhdC0+cGVybWlzc2lvbnMudGFibGUsCisJCQlkdW1wX21hc2tlZF9hdl9oZWxwZXIsIHBlcm1pc3Npb25fbmFtZXMpIDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBnZXQgc2NvbnRleHQvdGNvbnRleHQgaW4gdGV4dCBmb3JtICovCisJaWYgKGNvbnRleHRfc3RydWN0X3RvX3N0cmluZyhzY29udGV4dCwKKwkJCQkgICAgICZzY29udGV4dF9uYW1lLCAmbGVuZ3RoKSA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKGNvbnRleHRfc3RydWN0X3RvX3N0cmluZyh0Y29udGV4dCwKKwkJCQkgICAgICZ0Y29udGV4dF9uYW1lLCAmbGVuZ3RoKSA8IDApCisJCWdvdG8gb3V0OworCisJLyogYXVkaXQgYSBtZXNzYWdlICovCisJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY3VycmVudC0+YXVkaXRfY29udGV4dCwKKwkJCSAgICAgR0ZQX0FUT01JQywgQVVESVRfU0VMSU5VWF9FUlIpOworCWlmICghYWIpCisJCWdvdG8gb3V0OworCisJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIm9wPXNlY3VyaXR5X2NvbXB1dGVfYXYgcmVhc29uPSVzICIKKwkJCSAic2NvbnRleHQ9JXMgdGNvbnRleHQ9JXMgdGNsYXNzPSVzIHBlcm1zPSIsCisJCQkgcmVhc29uLCBzY29udGV4dF9uYW1lLCB0Y29udGV4dF9uYW1lLCB0Y2xhc3NfbmFtZSk7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAzMjsgaW5kZXgrKykgeworCQl1MzIgbWFzayA9ICgxIDw8IGluZGV4KTsKKworCQlpZiAoKG1hc2sgJiBwZXJtaXNzaW9ucykgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIlcyVzIiwKKwkJCQkgbmVlZF9jb21tYSA/ICIsIiA6ICIiLAorCQkJCSBwZXJtaXNzaW9uX25hbWVzW2luZGV4XQorCQkJCSA/IHBlcm1pc3Npb25fbmFtZXNbaW5kZXhdIDogIj8/Pz8iKTsKKwkJbmVlZF9jb21tYSA9IHRydWU7CisJfQorCWF1ZGl0X2xvZ19lbmQoYWIpOworb3V0OgorCS8qIHJlbGVhc2Ugc2NvbnRleHQvdGNvbnRleHQgKi8KKwlrZnJlZSh0Y29udGV4dF9uYW1lKTsKKwlrZnJlZShzY29udGV4dF9uYW1lKTsKKworCXJldHVybjsKK30KKworLyoKICAqIHNlY3VyaXR5X2JvdW5kYXJ5X3Blcm1pc3Npb24gLSBkcm9wcyB2aW9sYXRlZCBwZXJtaXNzaW9ucwogICogb24gYm91bmRhcnkgY29uc3RyYWludC4KICAqLwpAQCAtMzQ3LDI4ICs0NDEsMTIgQEAKIAl9CiAKIAlpZiAobWFza2VkKSB7Ci0JCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOwotCQljaGFyICpzdHlwZV9uYW1lCi0JCQk9IHBvbGljeWRiLnBfdHlwZV92YWxfdG9fbmFtZVtzb3VyY2UtPnZhbHVlIC0gMV07Ci0JCWNoYXIgKnR0eXBlX25hbWUKLQkJCT0gcG9saWN5ZGIucF90eXBlX3ZhbF90b19uYW1lW3RhcmdldC0+dmFsdWUgLSAxXTsKLQkJY2hhciAqdGNsYXNzX25hbWUKLQkJCT0gcG9saWN5ZGIucF9jbGFzc192YWxfdG9fbmFtZVt0Y2xhc3MgLSAxXTsKLQogCQkvKiBtYXNrIHZpb2xhdGVkIHBlcm1pc3Npb25zICovCiAJCWF2ZC0+YWxsb3dlZCAmPSB+bWFza2VkOwogCi0JCS8qIG5vdGljZSB0byB1c2Vyc3BhY2UgdmlhIGF1ZGl0IG1lc3NhZ2UgKi8KLQkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY3VycmVudC0+YXVkaXRfY29udGV4dCwKLQkJCQkgICAgIEdGUF9BVE9NSUMsIEFVRElUX1NFTElOVVhfRVJSKTsKLQkJaWYgKCFhYikKLQkJCXJldHVybjsKLQotCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiYXYgYm91bmRhcnkgdmlvbGF0aW9uOiAiCi0JCQkJICJzb3VyY2U9JXMgdGFyZ2V0PSVzIHRjbGFzcz0lcyIsCi0JCQkJIHN0eXBlX25hbWUsIHR0eXBlX25hbWUsIHRjbGFzc19uYW1lKTsKLQkJYXZjX2R1bXBfYXYoYWIsIHRjbGFzcywgbWFza2VkKTsKLQkJYXVkaXRfbG9nX2VuZChhYik7CisJCS8qIGF1ZGl0IG1hc2tlZCBwZXJtaXNzaW9ucyAqLworCQlzZWN1cml0eV9kdW1wX21hc2tlZF9hdihzY29udGV4dCwgdGNvbnRleHQsCisJCQkJCXRjbGFzcywgbWFza2VkLCAiYm91bmRzIik7CiAJfQogfQogCkBAIC00ODAsNyArNTU4LDcgQEAKIAkJaWYgKChjb25zdHJhaW50LT5wZXJtaXNzaW9ucyAmIChhdmQtPmFsbG93ZWQpKSAmJgogCQkgICAgIWNvbnN0cmFpbnRfZXhwcl9ldmFsKHNjb250ZXh0LCB0Y29udGV4dCwgTlVMTCwKIAkJCQkJICBjb25zdHJhaW50LT5leHByKSkgewotCQkJYXZkLT5hbGxvd2VkID0gKGF2ZC0+YWxsb3dlZCkgJiB+KGNvbnN0cmFpbnQtPnBlcm1pc3Npb25zKTsKKwkJCWF2ZC0+YWxsb3dlZCAmPSB+KGNvbnN0cmFpbnQtPnBlcm1pc3Npb25zKTsKIAkJfQogCQljb25zdHJhaW50ID0gY29uc3RyYWludC0+bmV4dDsKIAl9CkBAIC00OTksOCArNTc3LDggQEAKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoIXJhKQotCQkJYXZkLT5hbGxvd2VkID0gKGF2ZC0+YWxsb3dlZCkgJiB+KFBST0NFU1NfX1RSQU5TSVRJT04gfAotCQkJCQkJCVBST0NFU1NfX0RZTlRSQU5TSVRJT04pOworCQkJYXZkLT5hbGxvd2VkICY9IH4oUFJPQ0VTU19fVFJBTlNJVElPTiB8CisJCQkJCSAgUFJPQ0VTU19fRFlOVFJBTlNJVElPTik7CiAJfQogCiAJLyoKQEAgLTY4Nyw2ICs3NjUsMjYgQEAKIAkJfQogCQlpbmRleCA9IHR5cGUtPmJvdW5kczsKIAl9CisKKwlpZiAocmMpIHsKKwkJY2hhciAqb2xkX25hbWUgPSBOVUxMOworCQljaGFyICpuZXdfbmFtZSA9IE5VTEw7CisJCWludCBsZW5ndGg7CisKKwkJaWYgKCFjb250ZXh0X3N0cnVjdF90b19zdHJpbmcob2xkX2NvbnRleHQsCisJCQkJCSAgICAgICZvbGRfbmFtZSwgJmxlbmd0aCkgJiYKKwkJICAgICFjb250ZXh0X3N0cnVjdF90b19zdHJpbmcobmV3X2NvbnRleHQsCisJCQkJCSAgICAgICZuZXdfbmFtZSwgJmxlbmd0aCkpIHsKKwkJCWF1ZGl0X2xvZyhjdXJyZW50LT5hdWRpdF9jb250ZXh0LAorCQkJCSAgR0ZQX0FUT01JQywgQVVESVRfU0VMSU5VWF9FUlIsCisJCQkJICAib3A9c2VjdXJpdHlfYm91bmRlZF90cmFuc2l0aW9uICIKKwkJCQkgICJyZXN1bHQ9ZGVuaWVkICIKKwkJCQkgICJvbGRjb250ZXh0PSVzIG5ld2NvbnRleHQ9JXMiLAorCQkJCSAgb2xkX25hbWUsIG5ld19uYW1lKTsKKwkJfQorCQlrZnJlZShuZXdfbmFtZSk7CisJCWtmcmVlKG9sZF9uYW1lKTsKKwl9CiBvdXQ6CiAJcmVhZF91bmxvY2soJnBvbGljeV9yd2xvY2spOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3hmcm0uYyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCmluZGV4IDcyYjE4NDUuLmYzY2I5ZWQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgveGZybS5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCkBAIC00MDEsNyArNDAxLDcgQEAKICAqIGdvbmUgdGhydSB0aGUgSVBTZWMgcHJvY2Vzcy4KICAqLwogaW50IHNlbGludXhfeGZybV9zb2NrX3Jjdl9za2IodTMyIGlzZWNfc2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQpCisJCQkJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZCkKIHsKIAlpbnQgaSwgcmMgPSAwOwogCXN0cnVjdCBzZWNfcGF0aCAqc3A7CkBAIC00NDIsNyArNDQyLDcgQEAKICAqIGNoZWNrZWQgaW4gdGhlIHNlbGludXhfeGZybV9zdGF0ZV9wb2xfZmxvd19tYXRjaCBob29rIGFib3ZlLgogICovCiBpbnQgc2VsaW51eF94ZnJtX3Bvc3Ryb3V0ZV9sYXN0KHUzMiBpc2VjX3NpZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCwgdTggcHJvdG8pCisJCQkJCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWQsIHU4IHByb3RvKQogewogCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKIAlpbnQgcmMgPSAwOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2suaCBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrLmgKaW5kZXggMjQzYmVjMS4uYzZlOWFjYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2suaAorKysgYi9zZWN1cml0eS9zbWFjay9zbWFjay5oCkBAIC0yNzUsNyArMjc1LDcgQEAKIHsKIAltZW1zZXQoYSwgMCwgc2l6ZW9mKCphKSk7CiAJYS0+YS50eXBlID0gdHlwZTsKLQlhLT5hLmZ1bmN0aW9uID0gZnVuYzsKKwlhLT5hLnNtYWNrX2F1ZGl0X2RhdGEuZnVuY3Rpb24gPSBmdW5jOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc21rX2FkX3NldGZpZWxkX3VfdHNrKHN0cnVjdCBzbWtfYXVkaXRfaW5mbyAqYSwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfYWNjZXNzLmMKaW5kZXggNTEzZGMxYS4uMGY5YWM4MSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfYWNjZXNzLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfYWNjZXNzLmMKQEAgLTI0MCw4ICsyNDAsOSBAQAogc3RhdGljIHZvaWQgc21hY2tfbG9nX2NhbGxiYWNrKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCB2b2lkICphKQogewogCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWQgPSBhOwotCXN0cnVjdCBzbWFja19hdWRpdF9kYXRhICpzYWQgPSAmYWQtPmxzbV9wcml2LnNtYWNrX2F1ZGl0X2RhdGE7Ci0JYXVkaXRfbG9nX2Zvcm1hdChhYiwgImxzbT1TTUFDSyBmbj0lcyBhY3Rpb249JXMiLCBhZC0+ZnVuY3Rpb24sCisJc3RydWN0IHNtYWNrX2F1ZGl0X2RhdGEgKnNhZCA9ICZhZC0+c21hY2tfYXVkaXRfZGF0YTsKKwlhdWRpdF9sb2dfZm9ybWF0KGFiLCAibHNtPVNNQUNLIGZuPSVzIGFjdGlvbj0lcyIsCisJCQkgYWQtPnNtYWNrX2F1ZGl0X2RhdGEuZnVuY3Rpb24sCiAJCQkgc2FkLT5yZXN1bHQgPyAiZGVuaWVkIiA6ICJncmFudGVkIik7CiAJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBzdWJqZWN0PSIpOwogCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIHNhZC0+c3ViamVjdCk7CkBAIC0yNzQsMTEgKzI3NSwxMSBAQAogCWlmIChyZXN1bHQgPT0gMCAmJiAobG9nX3BvbGljeSAmIFNNQUNLX0FVRElUX0FDQ0VQVCkgPT0gMCkKIAkJcmV0dXJuOwogCi0JaWYgKGEtPmZ1bmN0aW9uID09IE5VTEwpCi0JCWEtPmZ1bmN0aW9uID0gInVua25vd24iOworCWlmIChhLT5zbWFja19hdWRpdF9kYXRhLmZ1bmN0aW9uID09IE5VTEwpCisJCWEtPnNtYWNrX2F1ZGl0X2RhdGEuZnVuY3Rpb24gPSAidW5rbm93biI7CiAKIAkvKiBlbmQgcHJlcGFyaW5nIHRoZSBhdWRpdCBkYXRhICovCi0Jc2FkID0gJmEtPmxzbV9wcml2LnNtYWNrX2F1ZGl0X2RhdGE7CisJc2FkID0gJmEtPnNtYWNrX2F1ZGl0X2RhdGE7CiAJc21hY2tfc3RyX2Zyb21fcGVybShyZXF1ZXN0X2J1ZmZlciwgcmVxdWVzdCk7CiAJc2FkLT5zdWJqZWN0ID0gc3ViamVjdF9sYWJlbDsKIAlzYWQtPm9iamVjdCAgPSBvYmplY3RfbGFiZWw7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IDAwMjMxODIuLmFjYWU3ZWY0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtOTEsNyArOTEsNyBAQAogICovCiAKIC8qKgotICogc21hY2tfcHRyYWNlX21heV9hY2Nlc3MgLSBTbWFjayBhcHByb3ZhbCBvbiBQVFJBQ0VfQVRUQUNICisgKiBzbWFja19wdHJhY2VfYWNjZXNzX2NoZWNrIC0gU21hY2sgYXBwcm92YWwgb24gUFRSQUNFX0FUVEFDSAogICogQGN0cDogY2hpbGQgdGFzayBwb2ludGVyCiAgKiBAbW9kZTogcHRyYWNlIGF0dGFjaG1lbnQgbW9kZQogICoKQEAgLTk5LDEzICs5OSwxMyBAQAogICoKICAqIERvIHRoZSBjYXBhYmlsaXR5IGNoZWNrcywgYW5kIHJlcXVpcmUgcmVhZCBhbmQgd3JpdGUuCiAgKi8KLXN0YXRpYyBpbnQgc21hY2tfcHRyYWNlX21heV9hY2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpjdHAsIHVuc2lnbmVkIGludCBtb2RlKQorc3RhdGljIGludCBzbWFja19wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3RwLCB1bnNpZ25lZCBpbnQgbW9kZSkKIHsKIAlpbnQgcmM7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwogCWNoYXIgKnNwLCAqdHNwOwogCi0JcmMgPSBjYXBfcHRyYWNlX21heV9hY2Nlc3MoY3RwLCBtb2RlKTsKKwlyYyA9IGNhcF9wdHJhY2VfYWNjZXNzX2NoZWNrKGN0cCwgbW9kZSk7CiAJaWYgKHJjICE9IDApCiAJCXJldHVybiByYzsKIApAQCAtMTA4MCw2ICsxMDgwLDIyIEBACiAgKi8KIAogLyoqCisgKiBzbWFja19jcmVkX2FsbG9jX2JsYW5rIC0gImFsbG9jYXRlIiBibGFuayB0YXNrLWxldmVsIHNlY3VyaXR5IGNyZWRlbnRpYWxzCisgKiBAbmV3OiB0aGUgbmV3IGNyZWRlbnRpYWxzCisgKiBAZ2ZwOiB0aGUgYXRvbWljaXR5IG9mIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMKKyAqCisgKiBQcmVwYXJlIGEgYmxhbmsgc2V0IG9mIGNyZWRlbnRpYWxzIGZvciBtb2RpZmljYXRpb24uICBUaGlzIG11c3QgYWxsb2NhdGUgYWxsCisgKiB0aGUgbWVtb3J5IHRoZSBMU00gbW9kdWxlIG1pZ2h0IHJlcXVpcmUgc3VjaCB0aGF0IGNyZWRfdHJhbnNmZXIoKSBjYW4KKyAqIGNvbXBsZXRlIHdpdGhvdXQgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgc21hY2tfY3JlZF9hbGxvY19ibGFuayhzdHJ1Y3QgY3JlZCAqY3JlZCwgZ2ZwX3QgZ2ZwKQoreworCWNyZWQtPnNlY3VyaXR5ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworCisvKioKICAqIHNtYWNrX2NyZWRfZnJlZSAtICJmcmVlIiB0YXNrLWxldmVsIHNlY3VyaXR5IGNyZWRlbnRpYWxzCiAgKiBAY3JlZDogdGhlIGNyZWRlbnRpYWxzIGluIHF1ZXN0aW9uCiAgKgpAQCAtMTExNyw2ICsxMTMzLDE4IEBACiB9CiAKIC8qKgorICogc21hY2tfY3JlZF90cmFuc2ZlciAtIFRyYW5zZmVyIHRoZSBvbGQgY3JlZGVudGlhbHMgdG8gdGhlIG5ldyBjcmVkZW50aWFscworICogQG5ldzogdGhlIG5ldyBjcmVkZW50aWFscworICogQG9sZDogdGhlIG9yaWdpbmFsIGNyZWRlbnRpYWxzCisgKgorICogRmlsbCBpbiBhIHNldCBvZiBibGFuayBjcmVkZW50aWFscyBmcm9tIGFub3RoZXIgc2V0IG9mIGNyZWRlbnRpYWxzLgorICovCitzdGF0aWMgdm9pZCBzbWFja19jcmVkX3RyYW5zZmVyKHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQpCit7CisJbmV3LT5zZWN1cml0eSA9IG9sZC0+c2VjdXJpdHk7Cit9CisKKy8qKgogICogc21hY2tfa2VybmVsX2FjdF9hcyAtIFNldCB0aGUgc3ViamVjdGl2ZSBjb250ZXh0IGluIGEgc2V0IG9mIGNyZWRlbnRpYWxzCiAgKiBAbmV3OiBwb2ludHMgdG8gdGhlIHNldCBvZiBjcmVkZW50aWFscyB0byBiZSBtb2RpZmllZC4KICAqIEBzZWNpZDogc3BlY2lmaWVzIHRoZSBzZWN1cml0eSBJRCB0byBiZSBzZXQKQEAgLTE2MzgsNiArMTY2Niw3IEBACiAKIAlpZiAoc3RyY21wKG5hbWUsIFhBVFRSX1NNQUNLX1NVRkZJWCkgPT0gMCkgewogCQluc3AtPnNta19pbm9kZSA9IHNwOworCQluc3AtPnNta19mbGFncyB8PSBTTUtfSU5PREVfSU5TVEFOVDsKIAkJcmV0dXJuIDA7CiAJfQogCS8qCkBAIC0yNDY0LDcgKzI0OTMsNyBAQAogCS8qCiAJICogUGVyZmVjdGx5IHJlYXNvbmFibGUgZm9yIHRoaXMgdG8gYmUgTlVMTAogCSAqLwotCWlmIChzaXAgPT0gTlVMTCB8fCBzaXAtPnNpbl9mYW1pbHkgIT0gUEZfSU5FVCkKKwlpZiAoc2lwID09IE5VTEwgfHwgc2lwLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIHNtYWNrX25ldGxhYmVsX3NlbmQoc29jay0+c2ssIHNpcCk7CkBAIC0zMDI5LDEwICszMDU4LDMxIEBACiB7CiB9CiAKK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbm90aWZ5c2VjY3R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmN0eCwgdTMyIGN0eGxlbikKK3sKKwlyZXR1cm4gc21hY2tfaW5vZGVfc2V0c2VjdXJpdHkoaW5vZGUsIFhBVFRSX1NNQUNLX1NVRkZJWCwgY3R4LCBjdHhsZW4sIDApOworfQorCitzdGF0aWMgaW50IHNtYWNrX2lub2RlX3NldHNlY2N0eChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHZvaWQgKmN0eCwgdTMyIGN0eGxlbikKK3sKKwlyZXR1cm4gX192ZnNfc2V0eGF0dHJfbm9wZXJtKGRlbnRyeSwgWEFUVFJfTkFNRV9TTUFDSywgY3R4LCBjdHhsZW4sIDApOworfQorCitzdGF0aWMgaW50IHNtYWNrX2lub2RlX2dldHNlY2N0eChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICoqY3R4LCB1MzIgKmN0eGxlbikKK3sKKwlpbnQgbGVuID0gMDsKKwlsZW4gPSBzbWFja19pbm9kZV9nZXRzZWN1cml0eShpbm9kZSwgWEFUVFJfU01BQ0tfU1VGRklYLCBjdHgsIHRydWUpOworCisJaWYgKGxlbiA8IDApCisJCXJldHVybiBsZW47CisJKmN0eGxlbiA9IGxlbjsKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgc21hY2tfb3BzID0gewogCS5uYW1lID0JCQkJInNtYWNrIiwKIAotCS5wdHJhY2VfbWF5X2FjY2VzcyA9CQlzbWFja19wdHJhY2VfbWF5X2FjY2VzcywKKwkucHRyYWNlX2FjY2Vzc19jaGVjayA9CQlzbWFja19wdHJhY2VfYWNjZXNzX2NoZWNrLAogCS5wdHJhY2VfdHJhY2VtZSA9CQlzbWFja19wdHJhY2VfdHJhY2VtZSwKIAkuc3lzbG9nID0gCQkJc21hY2tfc3lzbG9nLAogCkBAIC0zMDczLDkgKzMxMjMsMTEgQEAKIAkuZmlsZV9zZW5kX3NpZ2lvdGFzayA9IAkJc21hY2tfZmlsZV9zZW5kX3NpZ2lvdGFzaywKIAkuZmlsZV9yZWNlaXZlID0gCQlzbWFja19maWxlX3JlY2VpdmUsCiAKKwkuY3JlZF9hbGxvY19ibGFuayA9CQlzbWFja19jcmVkX2FsbG9jX2JsYW5rLAogCS5jcmVkX2ZyZWUgPQkJCXNtYWNrX2NyZWRfZnJlZSwKIAkuY3JlZF9wcmVwYXJlID0JCQlzbWFja19jcmVkX3ByZXBhcmUsCiAJLmNyZWRfY29tbWl0ID0JCQlzbWFja19jcmVkX2NvbW1pdCwKKwkuY3JlZF90cmFuc2ZlciA9CQlzbWFja19jcmVkX3RyYW5zZmVyLAogCS5rZXJuZWxfYWN0X2FzID0JCXNtYWNrX2tlcm5lbF9hY3RfYXMsCiAJLmtlcm5lbF9jcmVhdGVfZmlsZXNfYXMgPQlzbWFja19rZXJuZWxfY3JlYXRlX2ZpbGVzX2FzLAogCS50YXNrX3NldHBnaWQgPSAJCXNtYWNrX3Rhc2tfc2V0cGdpZCwKQEAgLTMxNTUsNiArMzIwNyw5IEBACiAJLnNlY2lkX3RvX3NlY2N0eCA9IAkJc21hY2tfc2VjaWRfdG9fc2VjY3R4LAogCS5zZWNjdHhfdG9fc2VjaWQgPSAJCXNtYWNrX3NlY2N0eF90b19zZWNpZCwKIAkucmVsZWFzZV9zZWNjdHggPSAJCXNtYWNrX3JlbGVhc2Vfc2VjY3R4LAorCS5pbm9kZV9ub3RpZnlzZWNjdHggPQkJc21hY2tfaW5vZGVfbm90aWZ5c2VjY3R4LAorCS5pbm9kZV9zZXRzZWNjdHggPQkJc21hY2tfaW5vZGVfc2V0c2VjY3R4LAorCS5pbm9kZV9nZXRzZWNjdHggPQkJc21hY2tfaW5vZGVfZ2V0c2VjY3R4LAogfTsKIAogCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmMgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKaW5kZXggZmRkMWY0YjguLjNjOGJkOGUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9jb21tb24uYworKysgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKQEAgLTEyODUsNiArMTI4NSwzNiBAQAogfQogCiAvKioKKyAqIHRvbW95b19kZWxldGVfZG9tYWluIC0gRGVsZXRlIGEgZG9tYWluLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IHRvbW95b19kZWxldGVfZG9tYWluKGNoYXIgKmRvbWFpbm5hbWUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIG5hbWU7CisKKwluYW1lLm5hbWUgPSBkb21haW5uYW1lOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmbmFtZSk7CisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCS8qIElzIHRoZXJlIGFuIGFjdGl2ZSBkb21haW4/ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJLyogTmV2ZXIgZGVsZXRlIHRvbW95b19rZXJuZWxfZG9tYWluICovCisJCWlmIChkb21haW4gPT0gJnRvbW95b19rZXJuZWxfZG9tYWluKQorCQkJY29udGludWU7CisJCWlmIChkb21haW4tPmlzX2RlbGV0ZWQgfHwKKwkJICAgIHRvbW95b19wYXRoY21wKGRvbWFpbi0+ZG9tYWlubmFtZSwgJm5hbWUpKQorCQkJY29udGludWU7CisJCWRvbWFpbi0+aXNfZGVsZXRlZCA9IHRydWU7CisJCWJyZWFrOworCX0KKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCXJldHVybiAwOworfQorCisvKioKICAqIHRvbW95b193cml0ZV9kb21haW5fcG9saWN5IC0gV3JpdGUgZG9tYWluIHBvbGljeS4KICAqCiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oIGIvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oCmluZGV4IDZkNmJhMDkuLjMxZGY1NDEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9jb21tb24uaAorKysgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmgKQEAgLTMzOSw4ICszMzksNiBAQAogY29uc3QgY2hhciAqdG9tb3lvX2dldF9tc2coY29uc3QgYm9vbCBpc19lbmZvcmNlKTsKIC8qIENvbnZlcnQgc2luZ2xlIHBhdGggb3BlcmF0aW9uIHRvIG9wZXJhdGlvbiBuYW1lLiAqLwogY29uc3QgY2hhciAqdG9tb3lvX3NwMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKTsKLS8qIERlbGV0ZSBhIGRvbWFpbi4gKi8KLWludCB0b21veW9fZGVsZXRlX2RvbWFpbihjaGFyICpkYXRhKTsKIC8qIENyZWF0ZSAiYWxpYXMiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCiBpbnQgdG9tb3lvX3dyaXRlX2FsaWFzX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CiAvKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jIGIvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jCmluZGV4IDFkOGIxNjkuLmZjZjUyYWMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9kb21haW4uYworKysgYi9zZWN1cml0eS90b21veW8vZG9tYWluLmMKQEAgLTcxNywzOCArNzE3LDYgQEAKIAlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9hbGlhc19lbnRyeShkYXRhLCBjcCwgaXNfZGVsZXRlKTsKIH0KIAotLyogRG9tYWluIGNyZWF0ZS9kZWxldGUgaGFuZGxlci4gKi8KLQotLyoqCi0gKiB0b21veW9fZGVsZXRlX2RvbWFpbiAtIERlbGV0ZSBhIGRvbWFpbi4KLSAqCi0gKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgotICoKLSAqIFJldHVybnMgMC4KLSAqLwotaW50IHRvbW95b19kZWxldGVfZG9tYWluKGNoYXIgKmRvbWFpbm5hbWUpCi17Ci0Jc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOwotCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIG5hbWU7Ci0KLQluYW1lLm5hbWUgPSBkb21haW5uYW1lOwotCXRvbW95b19maWxsX3BhdGhfaW5mbygmbmFtZSk7Ci0JZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOwotCS8qIElzIHRoZXJlIGFuIGFjdGl2ZSBkb21haW4/ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKLQkJLyogTmV2ZXIgZGVsZXRlIHRvbW95b19rZXJuZWxfZG9tYWluICovCi0JCWlmIChkb21haW4gPT0gJnRvbW95b19rZXJuZWxfZG9tYWluKQotCQkJY29udGludWU7Ci0JCWlmIChkb21haW4tPmlzX2RlbGV0ZWQgfHwKLQkJICAgIHRvbW95b19wYXRoY21wKGRvbWFpbi0+ZG9tYWlubmFtZSwgJm5hbWUpKQotCQkJY29udGludWU7Ci0JCWRvbWFpbi0+aXNfZGVsZXRlZCA9IHRydWU7Ci0JCWJyZWFrOwotCX0KLQl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOwotCXJldHVybiAwOwotfQotCiAvKioKICAqIHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluIC0gQ3JlYXRlIGEgZG9tYWluLgogICoKQEAgLTgxOCwxMyArNzg2LDExIEBACiAvKioKICAqIHRvbW95b19maW5kX25leHRfZG9tYWluIC0gRmluZCBhIGRvbWFpbi4KICAqCi0gKiBAYnBybTogICAgICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBsaW51eF9iaW5wcm0iLgotICogQG5leHRfZG9tYWluOiAgICBQb2ludGVyIHRvIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGJwcm06IFBvaW50ZXIgdG8gInN0cnVjdCBsaW51eF9iaW5wcm0iLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCiAgKi8KLWludCB0b21veW9fZmluZF9uZXh0X2RvbWFpbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAotCQkJICAgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKipuZXh0X2RvbWFpbikKK2ludCB0b21veW9fZmluZF9uZXh0X2RvbWFpbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogewogCS8qCiAJICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIHNpemUgb2YgYnVmZmVyIHJldHVybmVkIGJ5CkBAIC05NDYsOSArOTEyLDExIEBACiAJCXRvbW95b19zZXRfZG9tYWluX2ZsYWcob2xkX2RvbWFpbiwgZmFsc2UsCiAJCQkJICAgICAgIFRPTU9ZT19ET01BSU5fRkxBR1NfVFJBTlNJVElPTl9GQUlMRUQpOwogIG91dDoKKwlpZiAoIWRvbWFpbikKKwkJZG9tYWluID0gb2xkX2RvbWFpbjsKKwlicHJtLT5jcmVkLT5zZWN1cml0eSA9IGRvbWFpbjsKIAl0b21veW9fZnJlZShyZWFsX3Byb2dyYW1fbmFtZSk7CiAJdG9tb3lvX2ZyZWUoc3ltbGlua19wcm9ncmFtX25hbWUpOwotCSpuZXh0X2RvbWFpbiA9IGRvbWFpbiA/IGRvbWFpbiA6IG9sZF9kb21haW47CiAJdG9tb3lvX2ZyZWUodG1wKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jIGIvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jCmluZGV4IDMxOTRkMDkuLjk1NDhhMDkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by90b21veW8uYworKysgYi9zZWN1cml0eS90b21veW8vdG9tb3lvLmMKQEAgLTE0LDYgKzE0LDEyIEBACiAjaW5jbHVkZSAidG9tb3lvLmgiCiAjaW5jbHVkZSAicmVhbHBhdGguaCIKIAorc3RhdGljIGludCB0b21veW9fY3JlZF9hbGxvY19ibGFuayhzdHJ1Y3QgY3JlZCAqbmV3LCBnZnBfdCBnZnApCit7CisJbmV3LT5zZWN1cml0eSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdG9tb3lvX2NyZWRfcHJlcGFyZShzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLAogCQkJICAgICAgIGdmcF90IGdmcCkKIHsKQEAgLTI1LDYgKzMxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHRvbW95b19jcmVkX3RyYW5zZmVyKHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQpCit7CisJLyoKKwkgKiBTaW5jZSAic3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIiBpcyBhIHNoYXJhYmxlIHBvaW50ZXIsCisJICogd2UgZG9uJ3QgbmVlZCB0byBkdXBsaWNhdGUuCisJICovCisJbmV3LT5zZWN1cml0eSA9IG9sZC0+c2VjdXJpdHk7Cit9CisKIHN0YXRpYyBpbnQgdG9tb3lvX2Jwcm1fc2V0X2NyZWRzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7CiAJaW50IHJjOwpAQCAtNjEsMTQgKzc2LDggQEAKIAkgKiBFeGVjdXRlIHBlcm1pc3Npb24gaXMgY2hlY2tlZCBhZ2FpbnN0IHBhdGhuYW1lIHBhc3NlZCB0byBkb19leGVjdmUoKQogCSAqIHVzaW5nIGN1cnJlbnQgZG9tYWluLgogCSAqLwotCWlmICghZG9tYWluKSB7Ci0JCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKm5leHRfZG9tYWluID0gTlVMTDsKLQkJaW50IHJldHZhbCA9IHRvbW95b19maW5kX25leHRfZG9tYWluKGJwcm0sICZuZXh0X2RvbWFpbik7Ci0KLQkJaWYgKCFyZXR2YWwpCi0JCQlicHJtLT5jcmVkLT5zZWN1cml0eSA9IG5leHRfZG9tYWluOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIHRvbW95b19maW5kX25leHRfZG9tYWluKGJwcm0pOwogCS8qCiAJICogUmVhZCBwZXJtaXNzaW9uIGlzIGNoZWNrZWQgYWdhaW5zdCBpbnRlcnByZXRlcnMgdXNpbmcgbmV4dCBkb21haW4uCiAJICogJzEnIGlzIHRoZSByZXN1bHQgb2Ygb3Blbl90b19uYW1laV9mbGFncyhPX1JET05MWSkuCkBAIC0yNjgsNyArMjc3LDkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIHRvbW95b19zZWN1cml0eV9vcHMgPSB7CiAJLm5hbWUgICAgICAgICAgICAgICAgPSAidG9tb3lvIiwKKwkuY3JlZF9hbGxvY19ibGFuayAgICA9IHRvbW95b19jcmVkX2FsbG9jX2JsYW5rLAogCS5jcmVkX3ByZXBhcmUgICAgICAgID0gdG9tb3lvX2NyZWRfcHJlcGFyZSwKKwkuY3JlZF90cmFuc2ZlcgkgICAgID0gdG9tb3lvX2NyZWRfdHJhbnNmZXIsCiAJLmJwcm1fc2V0X2NyZWRzICAgICAgPSB0b21veW9fYnBybV9zZXRfY3JlZHMsCiAJLmJwcm1fY2hlY2tfc2VjdXJpdHkgPSB0b21veW9fYnBybV9jaGVja19zZWN1cml0eSwKICNpZmRlZiBDT05GSUdfU1lTQ1RMCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vdG9tb3lvLmggYi9zZWN1cml0eS90b21veW8vdG9tb3lvLmgKaW5kZXggMGZkNTg4YS4uY2Q2YmEwYiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5oCisrKyBiL3NlY3VyaXR5L3RvbW95by90b21veW8uaApAQCAtMzEsOCArMzEsNyBAQAogCQkJICAgIHN0cnVjdCBwYXRoICpwYXRoMik7CiBpbnQgdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxwKTsKLWludCB0b21veW9fZmluZF9uZXh0X2RvbWFpbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAotCQkJICAgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKipuZXh0X2RvbWFpbik7CitpbnQgdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7CiAKIC8qIEluZGV4IG51bWJlcnMgZm9yIEFjY2VzcyBDb250cm9scy4gKi8KIApkaWZmIC0tZ2l0IGEvc291bmQvS2NvbmZpZyBiL3NvdW5kL0tjb25maWcKaW5kZXggMWVjZWI4NS4uNDM5ZTE1YyAxMDA2NDQKLS0tIGEvc291bmQvS2NvbmZpZworKysgYi9zb3VuZC9LY29uZmlnCkBAIC0zMiw2ICszMiwzNCBAQAogCWJvb2wKIAlkZWZhdWx0IG4KIAorY29uZmlnIFNPVU5EX09TU19DT1JFX1BSRUNMQUlNCisJYm9vbCAiUHJlY2xhaW0gT1NTIGRldmljZSBudW1iZXJzIgorCWRlcGVuZHMgb24gU09VTkRfT1NTX0NPUkUKKwlkZWZhdWx0IHkKKwloZWxwCisJICBXaXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBjbGFpbSBhbGwgT1NTIGRldmljZQorCSAgbnVtYmVycyBpZiBhbnkgT1NTIHN1cHBvcnQgKG5hdGl2ZSBvciBlbXVsYXRpb24pIGlzIGVuYWJsZWQKKwkgIHdoZXRoZXIgdGhlIHJlc3BlY3RpdmUgbW9kdWxlIGlzIGxvYWRlZCBvciBub3QgYW5kIHRyeSB0byBsb2FkIHRoZQorCSAgYXBwcm9wcmlhdGUgbW9kdWxlIHVzaW5nIHNvdW5kLXNsb3Qvc2VydmljZS0qIGFuZCBjaGFyLW1ham9yLSoKKwkgIG1vZHVsZSBhbGlhc2VzIHdoZW4gb25lIG9mIHRoZSBkZXZpY2UgbnVtYmVycyBpcyBvcGVuZWQuICBXaXRoCisJICB0aGlzIG9wdGlvbiBkaXNhYmxlZCwga2VybmVsIHdpbGwgb25seSBjbGFpbSBhY3R1YWxseSBpbi11c2UKKwkgIGRldmljZSBudW1iZXJzIGFuZCBvcGVuaW5nIGEgbWlzc2luZyBkZXZpY2Ugd2lsbCBnZW5lcmF0ZSBvbmx5IHRoZQorCSAgc3RhbmRhcmQgY2hhci1tYWpvci0qIGFsaWFzZXMuCisKKwkgIFRoZSBvbmx5IHZpc2libGUgZGlmZmVyZW5jZSBpcyB1c2Ugb2YgYWRkaXRpb25hbCBtb2R1bGUgYWxpYXNlcworCSAgYW5kIHdoZXRoZXIgT1NTIHNvdW5kIGRldmljZXMgYXBwZWFyIG11bHRpcGxlIHRpbWVzIGluCisJICAvcHJvYy9kZXZpY2VzLiAgc291bmQtc2xvdC9zZXJ2aWNlLSogbW9kdWxlIGFsaWFzZXMgYXJlIHNjaGVkdWxlZAorCSAgdG8gYmUgcmVtb3ZlZCAoaWUuIFBSRUNMQUlNIHdvbid0IGJlIGF2YWlsYWJsZSkgYW5kIHRoaXMgb3B0aW9uIGlzCisJICB0byBtYWtlIHRoZSB0cmFuc2l0aW9uIGVhc2llci4gIFRoaXMgb3B0aW9uIGNhbiBiZSBvdmVycmlkZGVuCisJICBkdXJpbmcgYm9vdCB1c2luZyB0aGUga2VybmVsIHBhcmFtZXRlciBzb3VuZGNvcmUucHJlY2xhaW1fb3NzLgorCisJICBEaXNhYmxpbmcgdGhpcyBhbGxvd3MgYWx0ZXJuYXRpdmUgT1NTIGltcGxlbWVudGF0aW9ucy4KKworCSAgUGxlYXNlIHJlYWQgRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGZvcgorCSAgZGV0YWlscy4KKworCSAgSWYgdW51c3JlLCBzYXkgWS4KKwogc291cmNlICJzb3VuZC9vc3MvZG1hc291bmQvS2NvbmZpZyIKIAogaWYgIU02OEsKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKaW5kZXggYzU3MGViZC4uNGUzNGQxOSAxMDA2NDQKLS0tIGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKKysrIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMKQEAgLTE3MCw2ICsxNzAsMTMgQEAKIAlzdHJ1Y3Qgc25kX2FjOTdfYnVzICphYzk3X2J1czsKIAlzdHJ1Y3Qgc25kX2FjOTdfdGVtcGxhdGUgYWM5N190ZW1wbGF0ZTsKIAlpbnQgcmV0OworCXB4YTJ4eF9hdWRpb19vcHNfdCAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKGRldi0+aWQgPj0gMCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIlBYQTJ4eCBoYXMgb25seSBvbmUgQUM5NyBwb3J0LlxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfZGV2OworCX0KIAogCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSwKIAkJCSAgICAgIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CkBAIC0yMDAsNiArMjA3LDggQEAKIAlzbnByaW50ZihjYXJkLT5sb25nbmFtZSwgc2l6ZW9mKGNhcmQtPmxvbmduYW1lKSwKIAkJICIlcyAoJXMpIiwgZGV2LT5kZXYuZHJpdmVyLT5uYW1lLCBjYXJkLT5taXhlcm5hbWUpOwogCisJaWYgKHBkYXRhICYmIHBkYXRhLT5jb2RlY19wZGF0YVswXSkKKwkJc25kX2FjOTdfZGV2X2FkZF9wZGF0YShhYzk3X2J1cy0+Y29kZWNbMF0sIHBkYXRhLT5jb2RlY19wZGF0YVswXSk7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2LT5kZXYpOwogCXJldCA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOwogCWlmIChyZXQgPT0gMCkgewpAQCAtMjEyLDYgKzIyMSw3IEBACiBlcnI6CiAJaWYgKGNhcmQpCiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CitlcnJfZGV2OgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtcGNtLWxpYi5jIGIvc291bmQvYXJtL3B4YTJ4eC1wY20tbGliLmMKaW5kZXggNjIwNWYzNy4uNzQzYWM2YSAxMDA2NDQKLS0tIGEvc291bmQvYXJtL3B4YTJ4eC1wY20tbGliLmMKKysrIGIvc291bmQvYXJtL3B4YTJ4eC1wY20tbGliLmMKQEAgLTEzNiw2ICsxMzYsOSBAQAogewogCXN0cnVjdCBweGEyeHhfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKKwlpZiAoIXBydGQgfHwgIXBydGQtPnBhcmFtcykKKwkJcmV0dXJuIDA7CisKIAlEQ1NSKHBydGQtPmRtYV9jaCkgJj0gfkRDU1JfUlVOOwogCURDU1IocHJ0ZC0+ZG1hX2NoKSA9IDA7CiAJRENNRChwcnRkLT5kbWFfY2gpID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvS2NvbmZpZyBiL3NvdW5kL2NvcmUvS2NvbmZpZwppbmRleCA2MDYxZmI1Li5jMTU2ODJhIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL0tjb25maWcKKysrIGIvc291bmQvY29yZS9LY29uZmlnCkBAIC0yMDYsNCArMjA2LDggQEAKIGNvbmZpZyBTTkRfVk1BU1RFUgogCWJvb2wKIAorY29uZmlnIFNORF9ETUFfU0dCVUYKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBYODYKKwogc291cmNlICJzb3VuZC9jb3JlL3NlcS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9NYWtlZmlsZSBiL3NvdW5kL2NvcmUvTWFrZWZpbGUKaW5kZXggNDIyOTA1Mi4uMzUwYTA4ZCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9NYWtlZmlsZQorKysgYi9zb3VuZC9jb3JlL01ha2VmaWxlCkBAIC0xMyw3ICsxMyw3IEBACiAJCXBjbV9tZW1vcnkubwogCiBzbmQtcGFnZS1hbGxvYy15IDo9IG1lbWFsbG9jLm8KLXNuZC1wYWdlLWFsbG9jLSQoQ09ORklHX0hBU19ETUEpICs9IHNnYnVmLm8KK3NuZC1wYWdlLWFsbG9jLSQoQ09ORklHX1NORF9ETUFfU0dCVUYpICs9IHNnYnVmLm8KIAogc25kLXJhd21pZGktb2JqcyAgOj0gcmF3bWlkaS5vCiBzbmQtdGltZXItb2JqcyAgICA6PSB0aW1lci5vCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2NvbnRyb2wuYyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCmluZGV4IDE3YjhkNDcuLmE4YjdmYWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvY29udHJvbC5jCisrKyBiL3NvdW5kL2NvcmUvY29udHJvbC5jCkBAIC00MTQsNyArNDE0LDcgQEAKIEVYUE9SVF9TWU1CT0woc25kX2N0bF9yZW1vdmVfaWQpOwogCiAvKioKLSAqIHNuZF9jdGxfcmVtb3ZlX3VubG9ja2VkX2lkIC0gcmVtb3ZlIHRoZSB1bmxvY2tlZCBjb250cm9sIG9mIHRoZSBnaXZlbiBpZCBhbmQgcmVsZWFzZSBpdAorICogc25kX2N0bF9yZW1vdmVfdXNlcl9jdGwgLSByZW1vdmUgYW5kIHJlbGVhc2UgdGhlIHVubG9ja2VkIHVzZXIgY29udHJvbAogICogQGZpbGU6IGFjdGl2ZSBjb250cm9sIGhhbmRsZQogICogQGlkOiB0aGUgY29udHJvbCBpZCB0byByZW1vdmUKICAqCkBAIC00MjMsOCArNDIzLDggQEAKICAqIAogICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IHNuZF9jdGxfcmVtb3ZlX3VubG9ja2VkX2lkKHN0cnVjdCBzbmRfY3RsX2ZpbGUgKiBmaWxlLAotCQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQgKmlkKQorc3RhdGljIGludCBzbmRfY3RsX3JlbW92ZV91c2VyX2N0bChzdHJ1Y3Qgc25kX2N0bF9maWxlICogZmlsZSwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBmaWxlLT5jYXJkOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CkBAIC00MzMsMTUgKzQzMywyMyBAQAogCWRvd25fd3JpdGUoJmNhcmQtPmNvbnRyb2xzX3J3c2VtKTsKIAlrY3RsID0gc25kX2N0bF9maW5kX2lkKGNhcmQsIGlkKTsKIAlpZiAoa2N0bCA9PSBOVUxMKSB7Ci0JCXVwX3dyaXRlKCZjYXJkLT5jb250cm9sc19yd3NlbSk7Ci0JCXJldHVybiAtRU5PRU5UOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAoIShrY3RsLT52ZFswXS5hY2Nlc3MgJiBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVVNFUikpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKIAl9CiAJZm9yIChpZHggPSAwOyBpZHggPCBrY3RsLT5jb3VudDsgaWR4KyspCiAJCWlmIChrY3RsLT52ZFtpZHhdLm93bmVyICE9IE5VTEwgJiYga2N0bC0+dmRbaWR4XS5vd25lciAhPSBmaWxlKSB7Ci0JCQl1cF93cml0ZSgmY2FyZC0+Y29udHJvbHNfcndzZW0pOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyb3I7CiAJCX0KIAlyZXQgPSBzbmRfY3RsX3JlbW92ZShjYXJkLCBrY3RsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKwljYXJkLT51c2VyX2N0bF9jb3VudC0tOworZXJyb3I6CiAJdXBfd3JpdGUoJmNhcmQtPmNvbnRyb2xzX3J3c2VtKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtOTUxLDcgKzk1OSw3IEBACiAJCiAJaWYgKGNhcmQtPnVzZXJfY3RsX2NvdW50ID49IE1BWF9VU0VSX0NPTlRST0xTKQogCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoaW5mby0+Y291bnQgPiAxMDI0KQorCWlmIChpbmZvLT5jb3VudCA8IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCWFjY2VzcyA9IGluZm8tPmFjY2VzcyA9PSAwID8gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSA6CiAJCShpbmZvLT5hY2Nlc3MgJiAoU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURXwKQEAgLTEwNTIsMTggKzEwNjAsMTAgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkIF9fdXNlciAqX2lkKQogewogCXN0cnVjdCBzbmRfY3RsX2VsZW1faWQgaWQ7Ci0JaW50IGVycjsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmaWQsIF9pZCwgc2l6ZW9mKGlkKSkpCiAJCXJldHVybiAtRUZBVUxUOwotCWVyciA9IHNuZF9jdGxfcmVtb3ZlX3VubG9ja2VkX2lkKGZpbGUsICZpZCk7Ci0JaWYgKCEgZXJyKSB7Ci0JCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGZpbGUtPmNhcmQ7Ci0JCWRvd25fd3JpdGUoJmNhcmQtPmNvbnRyb2xzX3J3c2VtKTsKLQkJY2FyZC0+dXNlcl9jdGxfY291bnQtLTsKLQkJdXBfd3JpdGUoJmNhcmQtPmNvbnRyb2xzX3J3c2VtKTsKLQl9Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gc25kX2N0bF9yZW1vdmVfdXNlcl9jdGwoZmlsZSwgJmlkKTsKIH0KIAogc3RhdGljIGludCBzbmRfY3RsX3N1YnNjcmliZV9ldmVudHMoc3RydWN0IHNuZF9jdGxfZmlsZSAqZmlsZSwgaW50IF9fdXNlciAqcHRyKQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbmZvLmMgYi9zb3VuZC9jb3JlL2luZm8uYwppbmRleCAzNWRmNjE0Li5kNzQ5YTBkIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luZm8uYworKysgYi9zb3VuZC9jb3JlL2luZm8uYwpAQCAtODgsMTIgKzg4LDEwIEBACiAJY2hhciAqbmJ1ZjsKIAogCW5zaXplID0gUEFHRV9BTElHTihuc2l6ZSk7Ci0JbmJ1ZiA9IGttYWxsb2MobnNpemUsIEdGUF9LRVJORUwpOworCW5idWYgPSBrcmVhbGxvYyhidWZmZXItPmJ1ZmZlciwgbnNpemUsIEdGUF9LRVJORUwpOwogCWlmICghIG5idWYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtY3B5KG5idWYsIGJ1ZmZlci0+YnVmZmVyLCBidWZmZXItPmxlbik7Ci0Ja2ZyZWUoYnVmZmVyLT5idWZmZXIpOwogCWJ1ZmZlci0+YnVmZmVyID0gbmJ1ZjsKIAlidWZmZXItPmxlbiA9IG5zaXplOwogCXJldHVybiAwOwpAQCAtMTA4LDcgKzEwNiw3IEBACiAgKgogICogUmV0dXJucyB0aGUgc2l6ZSBvZiBvdXRwdXQgc3RyaW5nLgogICovCi1pbnQgc25kX2lwcmludGYoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLCBjaGFyICpmbXQsLi4uKQoraW50IHNuZF9pcHJpbnRmKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlciwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwogCWludCBsZW4sIHJlczsKQEAgLTcyNyw3ICs3MjUsNyBAQAogICogUmV0dXJucyB0aGUgdXBkYXRlZCBwb2ludGVyIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcgc28gdGhhdAogICogaXQgY2FuIGJlIHVzZWQgZm9yIHRoZSBuZXh0IGNhbGwuCiAgKi8KLWNoYXIgKnNuZF9pbmZvX2dldF9zdHIoY2hhciAqZGVzdCwgY2hhciAqc3JjLCBpbnQgbGVuKQorY29uc3QgY2hhciAqc25kX2luZm9fZ2V0X3N0cihjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIGludCBsZW4pCiB7CiAJaW50IGM7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5pdC5jIGIvc291bmQvY29yZS9pbml0LmMKaW5kZXggZDVkNDBkNy4uZWM0YTUwYyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9pbml0LmMKKysrIGIvc291bmQvY29yZS9pbml0LmMKQEAgLTMxLDYgKzMxLDE0IEBACiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KIAorLyogbW9uaXRvciBmaWxlcyBmb3IgZ3JhY2VmdWwgc2h1dGRvd24gKGhvdHBsdWcpICovCitzdHJ1Y3Qgc25kX21vbml0b3JfZmlsZSB7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZGlzY29ubmVjdGVkX2Zfb3A7CisJc3RydWN0IGxpc3RfaGVhZCBzaHV0ZG93bl9saXN0OwkvKiBzdGlsbCBuZWVkIHRvIHNodXRkb3duICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvKiBsaW5rIG9mIG1vbml0b3IgZmlsZXMgKi8KK307CisKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2h1dGRvd25fbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKHNodXRkb3duX2ZpbGVzKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9tZW1hbGxvYy5jIGIvc291bmQvY29yZS9tZW1hbGxvYy5jCmluZGV4IDFiMzUzNGQuLjllOTI0NDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvbWVtYWxsb2MuYworKysgYi9zb3VuZC9jb3JlL21lbWFsbG9jLmMKQEAgLTE5OSw2ICsxOTksOCBAQAogCWNhc2UgU05EUlZfRE1BX1RZUEVfREVWOgogCQlkbWFiLT5hcmVhID0gc25kX21hbGxvY19kZXZfcGFnZXMoZGV2aWNlLCBzaXplLCAmZG1hYi0+YWRkcik7CiAJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NORF9ETUFfU0dCVUYKIAljYXNlIFNORFJWX0RNQV9UWVBFX0RFVl9TRzoKIAkJc25kX21hbGxvY19zZ2J1Zl9wYWdlcyhkZXZpY2UsIHNpemUsIGRtYWIsIE5VTEwpOwogCQlicmVhazsKQEAgLTI2OSw2ICsyNzEsOCBAQAogCWNhc2UgU05EUlZfRE1BX1RZUEVfREVWOgogCQlzbmRfZnJlZV9kZXZfcGFnZXMoZG1hYi0+ZGV2LmRldiwgZG1hYi0+Ynl0ZXMsIGRtYWItPmFyZWEsIGRtYWItPmFkZHIpOwogCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TTkRfRE1BX1NHQlVGCiAJY2FzZSBTTkRSVl9ETUFfVFlQRV9ERVZfU0c6CiAJCXNuZF9mcmVlX3NnYnVmX3BhZ2VzKGRtYWIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvbWlzYy5jIGIvc291bmQvY29yZS9taXNjLmMKaW5kZXggYTk3MTBlMC4uMjNhMDMyYyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9taXNjLmMKKysrIGIvc291bmQvY29yZS9taXNjLmMKQEAgLTI0LDYgKzI0LDIwIEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogCisjaWZkZWYgQ09ORklHX1NORF9ERUJVRworCisjaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCisjZGVmaW5lIERFRkFVTFRfREVCVUdfTEVWRUwJMgorI2Vsc2UKKyNkZWZpbmUgREVGQVVMVF9ERUJVR19MRVZFTAkxCisjZW5kaWYKKworc3RhdGljIGludCBkZWJ1ZyA9IERFRkFVTFRfREVCVUdfTEVWRUw7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAgPSBkaXNhYmxlKSIpOworCisjZW5kaWYgLyogQ09ORklHX1NORF9ERUJVRyAqLworCiB2b2lkIHJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyZXMpCiB7CiAJaWYgKHJlcykgewpAQCAtMzUsNDYgKzQ5LDUzIEBACiBFWFBPUlRfU1lNQk9MKHJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UpOwogCiAjaWZkZWYgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USwotdm9pZCBzbmRfdmVyYm9zZV9wcmludGsoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorLyogc3RyaXAgdGhlIGxlYWRpbmcgcGF0aCBpZiB0aGUgZ2l2ZW4gcGF0aCBpcyBhYnNvbHV0ZSAqLworc3RhdGljIGNvbnN0IGNoYXIgKnNhbml0eV9maWxlX25hbWUoY29uc3QgY2hhciAqcGF0aCkKIHsKLQl2YV9saXN0IGFyZ3M7Ci0JCi0JaWYgKGZvcm1hdFswXSA9PSAnPCcgJiYgZm9ybWF0WzFdID49ICcwJyAmJiBmb3JtYXRbMV0gPD0gJzcnICYmIGZvcm1hdFsyXSA9PSAnPicpIHsKLQkJY2hhciB0bXBbXSA9ICI8MD4iOwotCQl0bXBbMV0gPSBmb3JtYXRbMV07Ci0JCXByaW50aygiJXNBTFNBICVzOiVkOiAiLCB0bXAsIGZpbGUsIGxpbmUpOwotCQlmb3JtYXQgKz0gMzsKLQl9IGVsc2UgewotCQlwcmludGsoIkFMU0EgJXM6JWQ6ICIsIGZpbGUsIGxpbmUpOwotCX0KLQl2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotCXZwcmludGsoZm9ybWF0LCBhcmdzKTsKLQl2YV9lbmQoYXJncyk7CisJaWYgKCpwYXRoID09ICcvJykKKwkJcmV0dXJuIHN0cnJjaHIocGF0aCwgJy8nKSArIDE7CisJZWxzZQorCQlyZXR1cm4gcGF0aDsKIH0KIAotRVhQT1JUX1NZTUJPTChzbmRfdmVyYm9zZV9wcmludGspOworLyogcHJpbnQgZmlsZSBhbmQgbGluZSB3aXRoIGEgY2VydGFpbiBwcmludGsgcHJlZml4ICovCitzdGF0aWMgaW50IHByaW50X3NuZF9wZngodW5zaWduZWQgaW50IGxldmVsLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGluZSwKKwkJCSBjb25zdCBjaGFyICpmb3JtYXQpCit7CisJY29uc3QgY2hhciAqZmlsZSA9IHNhbml0eV9maWxlX25hbWUocGF0aCk7CisJY2hhciB0bXBbXSA9ICI8MD4iOworCWNvbnN0IGNoYXIgKnBmeCA9IGxldmVsID8gS0VSTl9ERUJVRyA6IEtFUk5fREVGQVVMVDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChmb3JtYXRbMF0gPT0gJzwnICYmIGZvcm1hdFsyXSA9PSAnPicpIHsKKwkJdG1wWzFdID0gZm9ybWF0WzFdOworCQlwZnggPSB0bXA7CisJCXJldCA9IDE7CisJfQorCXByaW50aygiJXNBTFNBICVzOiVkOiAiLCBwZngsIGZpbGUsIGxpbmUpOworCXJldHVybiByZXQ7Cit9CisjZWxzZQorI2RlZmluZSBwcmludF9zbmRfcGZ4KGxldmVsLCBwYXRoLCBsaW5lLCBmb3JtYXQpCTAKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX0RFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEspCi12b2lkIHNuZF92ZXJib3NlX3ByaW50ZChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0RFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEspCit2b2lkIF9fc25kX3ByaW50ayh1bnNpZ25lZCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsaW5lLAorCQkgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKIAkKLQlpZiAoZm9ybWF0WzBdID09ICc8JyAmJiBmb3JtYXRbMV0gPj0gJzAnICYmIGZvcm1hdFsxXSA8PSAnNycgJiYgZm9ybWF0WzJdID09ICc+JykgewotCQljaGFyIHRtcFtdID0gIjwwPiI7Ci0JCXRtcFsxXSA9IGZvcm1hdFsxXTsKLQkJcHJpbnRrKCIlc0FMU0EgJXM6JWQ6ICIsIHRtcCwgZmlsZSwgbGluZSk7Ci0JCWZvcm1hdCArPSAzOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJBTFNBICVzOiVkOiAiLCBmaWxlLCBsaW5lKTsKLQl9CisjaWZkZWYgQ09ORklHX1NORF9ERUJVRwkKKwlpZiAoZGVidWcgPCBsZXZlbCkKKwkJcmV0dXJuOworI2VuZGlmCiAJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKwlpZiAocHJpbnRfc25kX3BmeChsZXZlbCwgcGF0aCwgbGluZSwgZm9ybWF0KSkKKwkJZm9ybWF0ICs9IDM7IC8qIHNraXAgdGhlIHByaW50ayBsZXZlbC1wcmVmaXggKi8KIAl2cHJpbnRrKGZvcm1hdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwotCiB9Ci0KLUVYUE9SVF9TWU1CT0woc25kX3ZlcmJvc2VfcHJpbnRkKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9fc25kX3ByaW50ayk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQ0kKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL21peGVyX29zcy5jIGIvc291bmQvY29yZS9vc3MvbWl4ZXJfb3NzLmMKaW5kZXggNWRjZDhhNS4uNzcyNDIzOCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvbWl4ZXJfb3NzLmMKKysrIGIvc291bmQvY29yZS9vc3MvbWl4ZXJfb3NzLmMKQEAgLTExNTQsNyArMTE1NCw4IEBACiAJCQkJICAgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCiB7CiAJc3RydWN0IHNuZF9taXhlcl9vc3MgKm1peGVyID0gZW50cnktPnByaXZhdGVfZGF0YTsKLQljaGFyIGxpbmVbMTI4XSwgc3RyWzMyXSwgaWR4c3RyWzE2XSwgKmNwdHI7CisJY2hhciBsaW5lWzEyOF0sIHN0clszMl0sIGlkeHN0clsxNl07CisJY29uc3QgY2hhciAqY3B0cjsKIAlpbnQgY2gsIGlkeDsKIAlzdHJ1Y3Qgc25kX21peGVyX29zc19hc3NpZ25fdGFibGUgKnRibDsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwppbmRleCBkYmU0MDZiLi5kOWM5NjM1IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKKysrIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCkBAIC0xMDQzLDEwICsxMDQzLDE1IEBACiAJcnVudGltZS0+b3NzLmNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CiAJcnVudGltZS0+b3NzLnJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwogCi0JcnVudGltZS0+b3NzLnBhcmFtcyA9IDA7Ci0JcnVudGltZS0+b3NzLnByZXBhcmUgPSAxOwogCXZmcmVlKHJ1bnRpbWUtPm9zcy5idWZmZXIpOwogCXJ1bnRpbWUtPm9zcy5idWZmZXIgPSB2bWFsbG9jKHJ1bnRpbWUtPm9zcy5wZXJpb2RfYnl0ZXMpOworCWlmICghcnVudGltZS0+b3NzLmJ1ZmZlcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWx1cmU7CisJfQorCisJcnVudGltZS0+b3NzLnBhcmFtcyA9IDA7CisJcnVudGltZS0+b3NzLnByZXBhcmUgPSAxOwogCXJ1bnRpbWUtPm9zcy5idWZmZXJfdXNlZCA9IDA7CiAJaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKQogCQlzbmRfcGNtX2Zvcm1hdF9zZXRfc2lsZW5jZShydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmRtYV9hcmVhLCBieXRlc190b19zYW1wbGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPmRtYV9ieXRlcykpOwpAQCAtMjgzNiw3ICsyODQxLDggQEAKIAkJCQkgICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCiB7CiAJc3RydWN0IHNuZF9wY21fc3RyICpwc3RyID0gZW50cnktPnByaXZhdGVfZGF0YTsKLQljaGFyIGxpbmVbMTI4XSwgc3RyWzMyXSwgdGFza19uYW1lWzMyXSwgKnB0cjsKKwljaGFyIGxpbmVbMTI4XSwgc3RyWzMyXSwgdGFza19uYW1lWzMyXTsKKwljb25zdCBjaGFyICpwdHI7CiAJaW50IGlkeDE7CiAJc3RydWN0IHNuZF9wY21fb3NzX3NldHVwICpzZXR1cCwgKnNldHVwMSwgdGVtcGxhdGU7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtLmMgYi9zb3VuZC9jb3JlL3BjbS5jCmluZGV4IDE0NTkzMWEuLjBjMTQ0MDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtLmMKKysrIGIvc291bmQvY29yZS9wY20uYwpAQCAtMTYyLDE4ICsxNjIsNyBAQAogCXJldHVybiAtRU5PSU9DVExDTUQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTCi0KLSNkZWZpbmUgU1RBVEUodikgW1NORFJWX1BDTV9TVEFURV8jI3ZdID0gI3YKLSNkZWZpbmUgU1RSRUFNKHYpIFtTTkRSVl9QQ01fU1RSRUFNXyMjdl0gPSAjdgotI2RlZmluZSBSRUFEWSh2KSBbU05EUlZfUENNX1JFQURZXyMjdl0gPSAjdgotI2RlZmluZSBYUlVOKHYpIFtTTkRSVl9QQ01fWFJVTl8jI3ZdID0gI3YKLSNkZWZpbmUgU0lMRU5DRSh2KSBbU05EUlZfUENNX1NJTEVOQ0VfIyN2XSA9ICN2Ci0jZGVmaW5lIFRTVEFNUCh2KSBbU05EUlZfUENNX1RTVEFNUF8jI3ZdID0gI3YKLSNkZWZpbmUgQUNDRVNTKHYpIFtTTkRSVl9QQ01fQUNDRVNTXyMjdl0gPSAjdgotI2RlZmluZSBTVEFSVCh2KSBbU05EUlZfUENNX1NUQVJUXyMjdl0gPSAjdgogI2RlZmluZSBGT1JNQVQodikgW1NORFJWX1BDTV9GT1JNQVRfIyN2XSA9ICN2Ci0jZGVmaW5lIFNVQkZPUk1BVCh2KSBbU05EUlZfUENNX1NVQkZPUk1BVF8jI3ZdID0gI3YgCiAKIHN0YXRpYyBjaGFyICpzbmRfcGNtX2Zvcm1hdF9uYW1lc1tdID0gewogCUZPUk1BVChTOCksCkBAIC0yMTYsMTAgKzIwNSwyMyBAQAogCUZPUk1BVChVMThfM0JFKSwKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICpzbmRfcGNtX2Zvcm1hdF9uYW1lKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KQorY29uc3QgY2hhciAqc25kX3BjbV9mb3JtYXRfbmFtZShzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCkKIHsKIAlyZXR1cm4gc25kX3BjbV9mb3JtYXRfbmFtZXNbZm9ybWF0XTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9wY21fZm9ybWF0X25hbWUpOworCisjaWZkZWYgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUworCisjZGVmaW5lIFNUQVRFKHYpIFtTTkRSVl9QQ01fU1RBVEVfIyN2XSA9ICN2CisjZGVmaW5lIFNUUkVBTSh2KSBbU05EUlZfUENNX1NUUkVBTV8jI3ZdID0gI3YKKyNkZWZpbmUgUkVBRFkodikgW1NORFJWX1BDTV9SRUFEWV8jI3ZdID0gI3YKKyNkZWZpbmUgWFJVTih2KSBbU05EUlZfUENNX1hSVU5fIyN2XSA9ICN2CisjZGVmaW5lIFNJTEVOQ0UodikgW1NORFJWX1BDTV9TSUxFTkNFXyMjdl0gPSAjdgorI2RlZmluZSBUU1RBTVAodikgW1NORFJWX1BDTV9UU1RBTVBfIyN2XSA9ICN2CisjZGVmaW5lIEFDQ0VTUyh2KSBbU05EUlZfUENNX0FDQ0VTU18jI3ZdID0gI3YKKyNkZWZpbmUgU1RBUlQodikgW1NORFJWX1BDTV9TVEFSVF8jI3ZdID0gI3YKKyNkZWZpbmUgU1VCRk9STUFUKHYpIFtTTkRSVl9QQ01fU1VCRk9STUFUXyMjdl0gPSAjdiAKIAogc3RhdGljIGNoYXIgKnNuZF9wY21fc3RyZWFtX25hbWVzW10gPSB7CiAJU1RSRUFNKFBMQVlCQUNLKSwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jIGIvc291bmQvY29yZS9wY21fbGliLmMKaW5kZXggOWRiNjBkOC4uMzBmNDEwOCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbGliLmMKKysrIGIvc291bmQvY29yZS9wY21fbGliLmMKQEAgLTE5NywxMiArMTk3LDE2IEBACiAJCWF2YWlsID0gc25kX3BjbV9jYXB0dXJlX2F2YWlsKHJ1bnRpbWUpOwogCWlmIChhdmFpbCA+IHJ1bnRpbWUtPmF2YWlsX21heCkKIAkJcnVudGltZS0+YXZhaWxfbWF4ID0gYXZhaWw7Ci0JaWYgKGF2YWlsID49IHJ1bnRpbWUtPnN0b3BfdGhyZXNob2xkKSB7Ci0JCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX0RSQUlOSU5HKQorCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9EUkFJTklORykgeworCQlpZiAoYXZhaWwgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKIAkJCXNuZF9wY21fZHJhaW5fZG9uZShzdWJzdHJlYW0pOwotCQllbHNlCisJCQlyZXR1cm4gLUVQSVBFOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGF2YWlsID49IHJ1bnRpbWUtPnN0b3BfdGhyZXNob2xkKSB7CiAJCQl4cnVuKHN1YnN0cmVhbSk7Ci0JCXJldHVybiAtRVBJUEU7CisJCQlyZXR1cm4gLUVQSVBFOworCQl9CiAJfQogCWlmIChhdmFpbCA+PSBydW50aW1lLT5jb250cm9sLT5hdmFpbF9taW4pCiAJCXdha2VfdXAoJnJ1bnRpbWUtPnNsZWVwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jIGIvc291bmQvY29yZS9wY21fbWVtb3J5LmMKaW5kZXggYTZkNDI4MC4uY2FhNzc5NiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbWVtb3J5LmMKKysrIGIvc291bmQvY29yZS9wY21fbWVtb3J5LmMKQEAgLTMwNCw2ICszMDQsNyBAQAogCiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwpOwogCisjaWZkZWYgQ09ORklHX1NORF9ETUFfU0dCVUYKIC8qKgogICogc25kX3BjbV9zZ2J1Zl9vcHNfcGFnZSAtIGdldCB0aGUgcGFnZSBzdHJ1Y3QgYXQgdGhlIGdpdmVuIG9mZnNldAogICogQHN1YnN0cmVhbTogdGhlIHBjbSBzdWJzdHJlYW0gaW5zdGFuY2UKQEAgLTM0OSw2ICszNTAsNyBAQAogCXJldHVybiBzaXplOwogfQogRVhQT1JUX1NZTUJPTChzbmRfcGNtX3NnYnVmX2dldF9jaHVua19zaXplKTsKKyNlbmRpZiAvKiBDT05GSUdfU05EX0RNQV9TR0JVRiAqLwogCiAvKioKICAqIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyAtIGFsbG9jYXRlIHRoZSBETUEgYnVmZmVyCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCmluZGV4IGFjMjE1MGUuLjU5ZTVmYmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCkBAIC0xMzQzLDggKzEzNDMsNiBAQAogCiBzdGF0aWMgaW50IHNuZF9wY21fcHJlX2RyYWluX2luaXQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBzdGF0ZSkKIHsKLQlpZiAoc3Vic3RyZWFtLT5mX2ZsYWdzICYgT19OT05CTE9DSykKLQkJcmV0dXJuIC1FQUdBSU47CiAJc3Vic3RyZWFtLT5ydW50aW1lLT50cmlnZ2VyX21hc3RlciA9IHN1YnN0cmVhbTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzOTIsNyArMTM5MCw2IEBACiBzdHJ1Y3QgZHJhaW5fcmVjIHsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAl3YWl0X3F1ZXVlX3Qgd2FpdDsKLQlzbmRfcGNtX3VmcmFtZXNfdCBzdG9wX3RocmVzaG9sZDsKIH07CiAKIHN0YXRpYyBpbnQgc25kX3BjbV9kcm9wKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKQEAgLTE0MDQsMTMgKzE0MDEsMTUgQEAKICAqIEFmdGVyIHRoaXMgY2FsbCwgYWxsIHN0cmVhbXMgYXJlIHN1cHBvc2VkIHRvIGJlIGVpdGhlciBTRVRVUCBvciBEUkFJTklORwogICogKGNhcHR1cmUgb25seSkgc3RhdGUuCiAgKi8KLXN0YXRpYyBpbnQgc25kX3BjbV9kcmFpbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgc25kX3BjbV9kcmFpbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7CiAJaW50IHJlc3VsdCA9IDA7CiAJaW50IGksIG51bV9kcmVjczsKKwlpbnQgbm9uYmxvY2sgPSAwOwogCXN0cnVjdCBkcmFpbl9yZWMgKmRyZWMsIGRyZWNfdG1wLCAqZDsKIAogCWNhcmQgPSBzdWJzdHJlYW0tPnBjbS0+Y2FyZDsKQEAgLTE0MjgsNiArMTQyNywxNSBAQAogCQl9CiAJfQogCisJaWYgKGZpbGUpIHsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJbm9uYmxvY2sgPSAxOworCX0gZWxzZSBpZiAoc3Vic3RyZWFtLT5mX2ZsYWdzICYgT19OT05CTE9DSykKKwkJbm9uYmxvY2sgPSAxOworCisJaWYgKG5vbmJsb2NrKQorCQlnb3RvIGxvY2s7IC8qIG5vIG5lZWQgdG8gYWxsb2NhdGUgd2FpdHF1ZXVlcyAqLworCiAJLyogYWxsb2NhdGUgdGVtcG9yYXJ5IHJlY29yZCBmb3IgZHJhaW4gc3luYyAqLwogCWRvd25fcmVhZCgmc25kX3BjbV9saW5rX3J3c2VtKTsKIAlpZiAoc25kX3BjbV9zdHJlYW1fbGlua2VkKHN1YnN0cmVhbSkpIHsKQEAgLTE0NDksMTYgKzE0NTcsMTEgQEAKIAkJCWQtPnN1YnN0cmVhbSA9IHM7CiAJCQlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmZC0+d2FpdCwgY3VycmVudCk7CiAJCQlhZGRfd2FpdF9xdWV1ZSgmcnVudGltZS0+c2xlZXAsICZkLT53YWl0KTsKLQkJCS8qIHN0b3BfdGhyZXNob2xkIGZpeHVwIHRvIGF2b2lkIGVuZGxlc3MgbG9vcCB3aGVuCi0JCQkgKiBzdG9wX3RocmVzaG9sZCA+IGJ1ZmZlcl9zaXplCi0JCQkgKi8KLQkJCWQtPnN0b3BfdGhyZXNob2xkID0gcnVudGltZS0+c3RvcF90aHJlc2hvbGQ7Ci0JCQlpZiAocnVudGltZS0+c3RvcF90aHJlc2hvbGQgPiBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJCQlydW50aW1lLT5zdG9wX3RocmVzaG9sZCA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwogCQl9CiAJfQogCXVwX3JlYWQoJnNuZF9wY21fbGlua19yd3NlbSk7CiAKKyBsb2NrOgogCXNuZF9wY21fc3RyZWFtX2xvY2tfaXJxKHN1YnN0cmVhbSk7CiAJLyogcmVzdW1lIHBhdXNlICovCiAJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfUEFVU0VEKQpAQCAtMTQ2Niw5ICsxNDY5LDEyIEBACiAKIAkvKiBwcmUtc3RhcnQvc3RvcCAtIGFsbCBydW5uaW5nIHN0cmVhbXMgYXJlIGNoYW5nZWQgdG8gRFJBSU5JTkcgc3RhdGUgKi8KIAlyZXN1bHQgPSBzbmRfcGNtX2FjdGlvbigmc25kX3BjbV9hY3Rpb25fZHJhaW5faW5pdCwgc3Vic3RyZWFtLCAwKTsKLQlpZiAocmVzdWx0IDwgMCkgewotCQlzbmRfcGNtX3N0cmVhbV91bmxvY2tfaXJxKHN1YnN0cmVhbSk7Ci0JCWdvdG8gX2Vycm9yOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIHVubG9jazsKKwkvKiBpbiBub24tYmxvY2tpbmcsIHdlIGRvbid0IHdhaXQgaW4gaW9jdGwgYnV0IGxldCBjYWxsZXIgcG9sbCAqLworCWlmIChub25ibG9jaykgeworCQlyZXN1bHQgPSAtRUFHQUlOOworCQlnb3RvIHVubG9jazsKIAl9CiAKIAlmb3IgKDs7KSB7CkBAIC0xNTA0LDE4ICsxNTEwLDE4IEBACiAJCX0KIAl9CiAKKyB1bmxvY2s6CiAJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShzdWJzdHJlYW0pOwogCi0gX2Vycm9yOgotCWZvciAoaSA9IDA7IGkgPCBudW1fZHJlY3M7IGkrKykgewotCQlkID0gJmRyZWNbaV07Ci0JCXJ1bnRpbWUgPSBkLT5zdWJzdHJlYW0tPnJ1bnRpbWU7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZydW50aW1lLT5zbGVlcCwgJmQtPndhaXQpOwotCQlydW50aW1lLT5zdG9wX3RocmVzaG9sZCA9IGQtPnN0b3BfdGhyZXNob2xkOworCWlmICghbm9uYmxvY2spIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9kcmVjczsgaSsrKSB7CisJCQlkID0gJmRyZWNbaV07CisJCQlydW50aW1lID0gZC0+c3Vic3RyZWFtLT5ydW50aW1lOworCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnNsZWVwLCAmZC0+d2FpdCk7CisJCX0KKwkJaWYgKGRyZWMgIT0gJmRyZWNfdG1wKQorCQkJa2ZyZWUoZHJlYyk7CiAJfQotCi0JaWYgKGRyZWMgIT0gJmRyZWNfdG1wKQotCQlrZnJlZShkcmVjKTsKIAlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOwogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTIyMDgsNiArMjIxNCw5IEBACiAJY2FzZSBTTkRSVl9QQ01fU1RBVEVfWFJVTjoKIAkJcmV0ID0gLUVQSVBFOwogCQlnb3RvIF9fZW5kOworCWNhc2UgU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRDoKKwkJcmV0ID0gLUVTVFJQSVBFOworCQlnb3RvIF9fZW5kOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FQkFERkQ7CiAJCWdvdG8gX19lbmQ7CkBAIC0yMjUzLDYgKzIyNjIsOSBAQAogCWNhc2UgU05EUlZfUENNX1NUQVRFX1hSVU46CiAJCXJldCA9IC1FUElQRTsKIAkJZ290byBfX2VuZDsKKwljYXNlIFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQ6CisJCXJldCA9IC1FU1RSUElQRTsKKwkJZ290byBfX2VuZDsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUJBREZEOwogCQlnb3RvIF9fZW5kOwpAQCAtMjI5OSw2ICsyMzExLDkgQEAKIAljYXNlIFNORFJWX1BDTV9TVEFURV9YUlVOOgogCQlyZXQgPSAtRVBJUEU7CiAJCWdvdG8gX19lbmQ7CisJY2FzZSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEOgorCQlyZXQgPSAtRVNUUlBJUEU7CisJCWdvdG8gX19lbmQ7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVCQURGRDsKIAkJZ290byBfX2VuZDsKQEAgLTIzNDUsNiArMjM2MCw5IEBACiAJY2FzZSBTTkRSVl9QQ01fU1RBVEVfWFJVTjoKIAkJcmV0ID0gLUVQSVBFOwogCQlnb3RvIF9fZW5kOworCWNhc2UgU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRDoKKwkJcmV0ID0gLUVTVFJQSVBFOworCQlnb3RvIF9fZW5kOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FQkFERkQ7CiAJCWdvdG8gX19lbmQ7CkBAIC0yNTQ0LDcgKzI1NjIsNyBAQAogCQlyZXR1cm4gc25kX3BjbV9od19wYXJhbXNfb2xkX3VzZXIoc3Vic3RyZWFtLCBhcmcpOwogI2VuZGlmCiAJY2FzZSBTTkRSVl9QQ01fSU9DVExfRFJBSU46Ci0JCXJldHVybiBzbmRfcGNtX2RyYWluKHN1YnN0cmVhbSk7CisJCXJldHVybiBzbmRfcGNtX2RyYWluKHN1YnN0cmVhbSwgZmlsZSk7CiAJY2FzZSBTTkRSVl9QQ01fSU9DVExfRFJPUDoKIAkJcmV0dXJuIHNuZF9wY21fZHJvcChzdWJzdHJlYW0pOwogCWNhc2UgU05EUlZfUENNX0lPQ1RMX1BBVVNFOgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9yYXdtaWRpLmMgYi9zb3VuZC9jb3JlL3Jhd21pZGkuYwppbmRleCA0NzMyNDdjLi5jMGFkYzE0IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3Jhd21pZGkuYworKysgYi9zb3VuZC9jb3JlL3Jhd21pZGkuYwpAQCAtMjc0LDcgKzI3NCw3IEBACiAJCXJldHVybiBlcnI7CiAJc3Vic3RyZWFtLT5vcGVuZWQgPSAxOwogCWlmIChzdWJzdHJlYW0tPnVzZV9jb3VudCsrID09IDApCi0JCXN1YnN0cmVhbS0+YWN0aXZlX3NlbnNpbmcgPSAxOworCQlzdWJzdHJlYW0tPmFjdGl2ZV9zZW5zaW5nID0gMDsKIAlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpCiAJCXN1YnN0cmVhbS0+YXBwZW5kID0gMTsKIAlybWlkaS0+c3RyZWFtc1tzdWJzdHJlYW0tPnN0cmVhbV0uc3Vic3RyZWFtX29wZW5lZCsrOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfbWlkaS5jIGIvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfbWlkaS5jCmluZGV4IDBhNzExZDIuLjlkZmIyZjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX21pZGkuYworKysgYi9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19taWRpLmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICovCiAKKyNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogI2luY2x1ZGUgInNlcV9vc3NfbWlkaS5oIgogI2luY2x1ZGUgInNlcV9vc3NfcmVhZHEuaCIKICNpbmNsdWRlICJzZXFfb3NzX3RpbWVyLmgiCkBAIC00NzYsMTkgKzQ3NywyMCBAQAogCQlldi5zb3VyY2UucG9ydCA9IGRwLT5wb3J0OwogCQlpZiAoZHAtPnNlcV9tb2RlID09IFNORFJWX1NFUV9PU1NfTU9ERV9TWU5USCkgewogCQkJZXYudHlwZSA9IFNORFJWX1NFUV9FVkVOVF9TRU5TSU5HOwotCQkJc25kX3NlcV9vc3NfZGlzcGF0Y2goZHAsICZldiwgMCwgMCk7IC8qIGFjdGl2ZSBzZW5zaW5nICovCisJCQlzbmRfc2VxX29zc19kaXNwYXRjaChkcCwgJmV2LCAwLCAwKTsKIAkJfQogCQlmb3IgKGMgPSAwOyBjIDwgMTY7IGMrKykgewogCQkJZXYudHlwZSA9IFNORFJWX1NFUV9FVkVOVF9DT05UUk9MTEVSOwogCQkJZXYuZGF0YS5jb250cm9sLmNoYW5uZWwgPSBjOwotCQkJZXYuZGF0YS5jb250cm9sLnBhcmFtID0gMTIzOwotCQkJc25kX3NlcV9vc3NfZGlzcGF0Y2goZHAsICZldiwgMCwgMCk7IC8qIGFsbCBub3RlcyBvZmYgKi8KKwkJCWV2LmRhdGEuY29udHJvbC5wYXJhbSA9IE1JRElfQ1RMX0FMTF9OT1RFU19PRkY7CisJCQlzbmRfc2VxX29zc19kaXNwYXRjaChkcCwgJmV2LCAwLCAwKTsKIAkJCWlmIChkcC0+c2VxX21vZGUgPT0gU05EUlZfU0VRX09TU19NT0RFX01VU0lDKSB7Ci0JCQkJZXYuZGF0YS5jb250cm9sLnBhcmFtID0gMTIxOwotCQkJCXNuZF9zZXFfb3NzX2Rpc3BhdGNoKGRwLCAmZXYsIDAsIDApOyAvKiByZXNldCBhbGwgY29udHJvbGxlcnMgKi8KKwkJCQlldi5kYXRhLmNvbnRyb2wucGFyYW0gPQorCQkJCQlNSURJX0NUTF9SRVNFVF9DT05UUk9MTEVSUzsKKwkJCQlzbmRfc2VxX29zc19kaXNwYXRjaChkcCwgJmV2LCAwLCAwKTsKIAkJCQlldi50eXBlID0gU05EUlZfU0VRX0VWRU5UX1BJVENIQkVORDsKIAkJCQlldi5kYXRhLmNvbnRyb2wudmFsdWUgPSAwOwotCQkJCXNuZF9zZXFfb3NzX2Rpc3BhdGNoKGRwLCAmZXYsIDAsIDApOyAvKiBiZW5kZXIgb2ZmICovCisJCQkJc25kX3NlcV9vc3NfZGlzcGF0Y2goZHAsICZldiwgMCwgMCk7CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jIGIvc291bmQvY29yZS9zZXEvc2VxX21pZGkuYwppbmRleCA0ZDI2MTQ2Li5lYmFmMWI1IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9taWRpLmMKQEAgLTEyMCw3ICsxMjAsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWlmICgodG1wID0gcnVudGltZS0+YXZhaWwpIDwgY291bnQpIHsKLQkJc25kX3ByaW50ZCgid2FybmluZywgb3V0cHV0IGV2ZW50IHdhcyBsb3N0IChjb3VudCA9ICVpLCBhdmFpbGFibGUgPSAlaSlcbiIsIGNvdW50LCB0bXApOworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiTUlESSBvdXRwdXQgYnVmZmVyIG92ZXJydW5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJaWYgKHNuZF9yYXdtaWRpX2tlcm5lbF93cml0ZShzdWJzdHJlYW0sIGJ1ZiwgY291bnQpIDwgY291bnQpCkBAIC0yMzYsNiArMjM3LDcgQEAKIAltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOwogCXBhcmFtcy5hdmFpbF9taW4gPSAxOwogCXBhcmFtcy5idWZmZXJfc2l6ZSA9IG91dHB1dF9idWZmZXJfc2l6ZTsKKwlwYXJhbXMubm9fYWN0aXZlX3NlbnNpbmcgPSAxOwogCWlmICgoZXJyID0gc25kX3Jhd21pZGlfb3V0cHV0X3BhcmFtcyhtc3ludGgtPm91dHB1dF9yZmlsZS5vdXRwdXQsICZwYXJhbXMpKSA8IDApIHsKIAkJc25kX3Jhd21pZGlfa2VybmVsX3JlbGVhc2UoJm1zeW50aC0+b3V0cHV0X3JmaWxlKTsKIAkJcmV0dXJuIGVycjsKQEAgLTI0OCwxMiArMjUwLDkgQEAKIHN0YXRpYyBpbnQgbWlkaXN5bnRoX3VudXNlKHZvaWQgKnByaXZhdGVfZGF0YSwgc3RydWN0IHNuZF9zZXFfcG9ydF9zdWJzY3JpYmUgKmluZm8pCiB7CiAJc3RydWN0IHNlcV9taWRpc3ludGggKm1zeW50aCA9IHByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBjaGFyIGJ1ZiA9IDB4ZmY7IC8qIE1JREkgcmVzZXQgKi8KIAogCWlmIChzbmRfQlVHX09OKCFtc3ludGgtPm91dHB1dF9yZmlsZS5vdXRwdXQpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkvKiBzZW5kaW5nIHNpbmdsZSBNSURJIHJlc2V0IG1lc3NhZ2UgdG8gc2h1dCB0aGUgZGV2aWNlIHVwICovCi0Jc25kX3Jhd21pZGlfa2VybmVsX3dyaXRlKG1zeW50aC0+b3V0cHV0X3JmaWxlLm91dHB1dCwgJmJ1ZiwgMSk7CiAJc25kX3Jhd21pZGlfZHJhaW5fb3V0cHV0KG1zeW50aC0+b3V0cHV0X3JmaWxlLm91dHB1dCk7CiAJcmV0dXJuIHNuZF9yYXdtaWRpX2tlcm5lbF9yZWxlYXNlKCZtc3ludGgtPm91dHB1dF9yZmlsZSk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3ZtYXN0ZXIuYyBiL3NvdW5kL2NvcmUvdm1hc3Rlci5jCmluZGV4IDI1NzYyNGIuLjNiOWI1NTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvdm1hc3Rlci5jCisrKyBiL3NvdW5kL2NvcmUvdm1hc3Rlci5jCkBAIC0zNTMsNyArMzUzLDggQEAKICAqCiAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgQHRsdiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBUTFYgaW5mb3JtYXRpb24KICAqIGZvciBkQiBzY2FsZSBvZiB0aGUgbWFzdGVyIGNvbnRyb2wuICBJdCBzaG91bGQgYmUgYSBzaW5nbGUgZWxlbWVudAotICogd2l0aCAjU05EUlZfQ1RMX1RMVlRfREJfU0NBTEUgdHlwZSwgYW5kIHNob3VsZCBiZSB0aGUgbWF4IDBkQi4KKyAqIHdpdGggI1NORFJWX0NUTF9UTFZUX0RCX1NDQUxFLCAjU05EUlZfQ1RMX1RMVl9EQl9NSU5NQVggb3IKKyAqICNTTkRSVl9DVExfVExWVF9EQl9NSU5NQVhfTVVURSB0eXBlLCBhbmQgc2hvdWxkIGJlIHRoZSBtYXggMGRCLgogICovCiBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIoY2hhciAqbmFtZSwKIAkJCQkJCSBjb25zdCB1bnNpZ25lZCBpbnQgKnRsdikKQEAgLTM4NCw3ICszODUsMTAgQEAKIAlrY3RsLT5wcml2YXRlX2ZyZWUgPSBtYXN0ZXJfZnJlZTsKIAogCS8qIGFkZGl0aW9uYWwgKGNvbnN0YW50KSBUTFYgcmVhZCAqLwotCWlmICh0bHYgJiYgdGx2WzBdID09IFNORFJWX0NUTF9UTFZUX0RCX1NDQUxFKSB7CisJaWYgKHRsdiAmJgorCSAgICAodGx2WzBdID09IFNORFJWX0NUTF9UTFZUX0RCX1NDQUxFIHx8CisJICAgICB0bHZbMF0gPT0gU05EUlZfQ1RMX1RMVlRfREJfTUlOTUFYIHx8CisJICAgICB0bHZbMF0gPT0gU05EUlZfQ1RMX1RMVlRfREJfTUlOTUFYX01VVEUpKSB7CiAJCWtjdGwtPnZkWzBdLmFjY2VzcyB8PSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQ7CiAJCW1lbWNweShtYXN0ZXItPnRsdiwgdGx2LCBzaXplb2YobWFzdGVyLT50bHYpKTsKIAkJa2N0bC0+dGx2LnAgPSBtYXN0ZXItPnRsdjsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwppbmRleCA1NDIzOWQyLi42YmEwNjZjIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMKKysrIGIvc291bmQvZHJpdmVycy9kdW1teS5jCkBAIC0yNSwxMiArMjUsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3Jhd21pZGkuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCiBNT0RVTEVfQVVUSE9SKCJKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PiIpOwpAQCAtMzksNyArNDIsNyBAQAogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7QUxTQSxEdW1teSBzb3VuZGNhcmR9fSIpOwogCiAjZGVmaW5lIE1BWF9QQ01fREVWSUNFUwkJNAotI2RlZmluZSBNQVhfUENNX1NVQlNUUkVBTVMJMTYKKyNkZWZpbmUgTUFYX1BDTV9TVUJTVFJFQU1TCTEyOAogI2RlZmluZSBNQVhfTUlESV9ERVZJQ0VTCTIKIAogI2lmIDAgLyogZW11MTBrMSBlbXVsYXRpb24gKi8KQEAgLTE0OCw2ICsxNTEsMTAgQEAKIHN0YXRpYyBpbnQgcGNtX2RldnNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAxfTsKIHN0YXRpYyBpbnQgcGNtX3N1YnN0cmVhbXNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSA4fTsKIC8vc3RhdGljIGludCBtaWRpX2RldnNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAyfTsKKyNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCitzdGF0aWMgaW50IGhydGltZXIgPSAxOworI2VuZGlmCitzdGF0aWMgaW50IGZha2VfYnVmZmVyID0gMTsKIAogbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBkdW1teSBzb3VuZGNhcmQuIik7CkBAIC0xNjEsNiArMTY4LDEyIEBACiBNT0RVTEVfUEFSTV9ERVNDKHBjbV9zdWJzdHJlYW1zLCAiUENNIHN1YnN0cmVhbXMgIyAoMS0xNikgZm9yIGR1bW15IGRyaXZlci4iKTsKIC8vbW9kdWxlX3BhcmFtX2FycmF5KG1pZGlfZGV2cywgaW50LCBOVUxMLCAwNDQ0KTsKIC8vTU9EVUxFX1BBUk1fREVTQyhtaWRpX2RldnMsICJNSURJIGRldmljZXMgIyAoMC0yKSBmb3IgZHVtbXkgZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtKGZha2VfYnVmZmVyLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZmFrZV9idWZmZXIsICJGYWtlIGJ1ZmZlciBhbGxvY2F0aW9ucy4iKTsKKyNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCittb2R1bGVfcGFyYW0oaHJ0aW1lciwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGhydGltZXIsICJVc2UgaHJ0aW1lciBhcyB0aGUgdGltZXIgc291cmNlLiIpOworI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW1NORFJWX0NBUkRTXTsKIApAQCAtMTcxLDExOSArMTg0LDMyNCBAQAogI2RlZmluZSBNSVhFUl9BRERSX0NECQk0CiAjZGVmaW5lIE1JWEVSX0FERFJfTEFTVAkJNAogCitzdHJ1Y3QgZHVtbXlfdGltZXJfb3BzIHsKKwlpbnQgKCpjcmVhdGUpKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKTsKKwl2b2lkICgqZnJlZSkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICopOworCWludCAoKnByZXBhcmUpKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKTsKKwlpbnQgKCpzdGFydCkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICopOworCWludCAoKnN0b3ApKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKTsKKwlzbmRfcGNtX3VmcmFtZXNfdCAoKnBvaW50ZXIpKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKTsKK307CisKIHN0cnVjdCBzbmRfZHVtbXkgewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCXNwaW5sb2NrX3QgbWl4ZXJfbG9jazsKIAlpbnQgbWl4ZXJfdm9sdW1lW01JWEVSX0FERFJfTEFTVCsxXVsyXTsKIAlpbnQgY2FwdHVyZV9zb3VyY2VbTUlYRVJfQUREUl9MQVNUKzFdWzJdOworCWNvbnN0IHN0cnVjdCBkdW1teV90aW1lcl9vcHMgKnRpbWVyX29wczsKIH07CiAKLXN0cnVjdCBzbmRfZHVtbXlfcGNtIHsKLQlzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teTsKKy8qCisgKiBzeXN0ZW0gdGltZXIgaW50ZXJmYWNlCisgKi8KKworc3RydWN0IGR1bW15X3N5c3RpbWVyX3BjbSB7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwotCXVuc2lnbmVkIGludCBwY21fYnVmZmVyX3NpemU7Ci0JdW5zaWduZWQgaW50IHBjbV9wZXJpb2Rfc2l6ZTsKLQl1bnNpZ25lZCBpbnQgcGNtX2JwczsJCS8qIGJ5dGVzIHBlciBzZWNvbmQgKi8KLQl1bnNpZ25lZCBpbnQgcGNtX2h6OwkJLyogSFogKi8KLQl1bnNpZ25lZCBpbnQgcGNtX2lycV9wb3M7CS8qIElSUSBwb3NpdGlvbiAqLwotCXVuc2lnbmVkIGludCBwY21fYnVmX3BvczsJLyogcG9zaXRpb24gaW4gYnVmZmVyICovCisJdW5zaWduZWQgbG9uZyBiYXNlX3RpbWU7CisJdW5zaWduZWQgaW50IGZyYWNfcG9zOwkvKiBmcmFjdGlvbmFsIHNhbXBsZSBwb3NpdGlvbiAoYmFzZWQgSFopICovCisJdW5zaWduZWQgaW50IGZyYWNfcGVyaW9kX3Jlc3Q7CisJdW5zaWduZWQgaW50IGZyYWNfYnVmZmVyX3NpemU7CS8qIGJ1ZmZlcl9zaXplICogSFogKi8KKwl1bnNpZ25lZCBpbnQgZnJhY19wZXJpb2Rfc2l6ZTsJLyogcGVyaW9kX3NpemUgKiBIWiAqLworCXVuc2lnbmVkIGludCByYXRlOworCWludCBlbGFwc2VkOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogfTsKIAotCi1zdGF0aWMgaW5saW5lIHZvaWQgc25kX2NhcmRfZHVtbXlfcGNtX3RpbWVyX3N0YXJ0KHN0cnVjdCBzbmRfZHVtbXlfcGNtICpkcGNtKQorc3RhdGljIHZvaWQgZHVtbXlfc3lzdGltZXJfcmVhcm0oc3RydWN0IGR1bW15X3N5c3RpbWVyX3BjbSAqZHBjbSkKIHsKLQlkcGNtLT50aW1lci5leHBpcmVzID0gMSArIGppZmZpZXM7CisJZHBjbS0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKworCQkoZHBjbS0+ZnJhY19wZXJpb2RfcmVzdCArIGRwY20tPnJhdGUgLSAxKSAvIGRwY20tPnJhdGU7CiAJYWRkX3RpbWVyKCZkcGNtLT50aW1lcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbmRfY2FyZF9kdW1teV9wY21fdGltZXJfc3RvcChzdHJ1Y3Qgc25kX2R1bW15X3BjbSAqZHBjbSkKK3N0YXRpYyB2b2lkIGR1bW15X3N5c3RpbWVyX3VwZGF0ZShzdHJ1Y3QgZHVtbXlfc3lzdGltZXJfcGNtICpkcGNtKQogewotCWRlbF90aW1lcigmZHBjbS0+dGltZXIpOworCXVuc2lnbmVkIGxvbmcgZGVsdGE7CisKKwlkZWx0YSA9IGppZmZpZXMgLSBkcGNtLT5iYXNlX3RpbWU7CisJaWYgKCFkZWx0YSkKKwkJcmV0dXJuOworCWRwY20tPmJhc2VfdGltZSArPSBkZWx0YTsKKwlkZWx0YSAqPSBkcGNtLT5yYXRlOworCWRwY20tPmZyYWNfcG9zICs9IGRlbHRhOworCXdoaWxlIChkcGNtLT5mcmFjX3BvcyA+PSBkcGNtLT5mcmFjX2J1ZmZlcl9zaXplKQorCQlkcGNtLT5mcmFjX3BvcyAtPSBkcGNtLT5mcmFjX2J1ZmZlcl9zaXplOworCXdoaWxlIChkcGNtLT5mcmFjX3BlcmlvZF9yZXN0IDw9IGRlbHRhKSB7CisJCWRwY20tPmVsYXBzZWQrKzsKKwkJZHBjbS0+ZnJhY19wZXJpb2RfcmVzdCArPSBkcGNtLT5mcmFjX3BlcmlvZF9zaXplOworCX0KKwlkcGNtLT5mcmFjX3BlcmlvZF9yZXN0IC09IGRlbHRhOwogfQogCi1zdGF0aWMgaW50IHNuZF9jYXJkX2R1bW15X3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQorc3RhdGljIGludCBkdW1teV9zeXN0aW1lcl9zdGFydChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBzbmRfZHVtbXlfcGNtICpkcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCWludCBlcnIgPSAwOwotCisJc3RydWN0IGR1bW15X3N5c3RpbWVyX3BjbSAqZHBjbSA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCXNwaW5fbG9jaygmZHBjbS0+bG9jayk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgotCQlzbmRfY2FyZF9kdW1teV9wY21fdGltZXJfc3RhcnQoZHBjbSk7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6Ci0JCXNuZF9jYXJkX2R1bW15X3BjbV90aW1lcl9zdG9wKGRwY20pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9CisJZHBjbS0+YmFzZV90aW1lID0gamlmZmllczsKKwlkdW1teV9zeXN0aW1lcl9yZWFybShkcGNtKTsKIAlzcGluX3VubG9jaygmZHBjbS0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2NhcmRfZHVtbXlfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzdGF0aWMgaW50IGR1bW15X3N5c3RpbWVyX3N0b3Aoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGR1bW15X3N5c3RpbWVyX3BjbSAqZHBjbSA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXNwaW5fbG9jaygmZHBjbS0+bG9jayk7CisJZGVsX3RpbWVyKCZkcGNtLT50aW1lcik7CisJc3Bpbl91bmxvY2soJmRwY20tPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR1bW15X3N5c3RpbWVyX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3Qgc25kX2R1bW15X3BjbSAqZHBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQlpbnQgYnBzOworCXN0cnVjdCBkdW1teV9zeXN0aW1lcl9wY20gKmRwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKLQlicHMgPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChydW50aW1lLT5mb3JtYXQpICogcnVudGltZS0+cmF0ZSAqCi0JCXJ1bnRpbWUtPmNoYW5uZWxzIC8gODsKLQotCWlmIChicHMgPD0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkcGNtLT5wY21fYnBzID0gYnBzOwotCWRwY20tPnBjbV9oeiA9IEhaOwotCWRwY20tPnBjbV9idWZmZXJfc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwotCWRwY20tPnBjbV9wZXJpb2Rfc2l6ZSA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwotCWRwY20tPnBjbV9pcnFfcG9zID0gMDsKLQlkcGNtLT5wY21fYnVmX3BvcyA9IDA7Ci0KLQlzbmRfcGNtX2Zvcm1hdF9zZXRfc2lsZW5jZShydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmRtYV9hcmVhLAotCQkJYnl0ZXNfdG9fc2FtcGxlcyhydW50aW1lLCBydW50aW1lLT5kbWFfYnl0ZXMpKTsKKwlkcGNtLT5mcmFjX3BvcyA9IDA7CisJZHBjbS0+cmF0ZSA9IHJ1bnRpbWUtPnJhdGU7CisJZHBjbS0+ZnJhY19idWZmZXJfc2l6ZSA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogSFo7CisJZHBjbS0+ZnJhY19wZXJpb2Rfc2l6ZSA9IHJ1bnRpbWUtPnBlcmlvZF9zaXplICogSFo7CisJZHBjbS0+ZnJhY19wZXJpb2RfcmVzdCA9IGRwY20tPmZyYWNfcGVyaW9kX3NpemU7CisJZHBjbS0+ZWxhcHNlZCA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc25kX2NhcmRfZHVtbXlfcGNtX3RpbWVyX2Z1bmN0aW9uKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIGR1bW15X3N5c3RpbWVyX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3Qgc25kX2R1bW15X3BjbSAqZHBjbSA9IChzdHJ1Y3Qgc25kX2R1bW15X3BjbSAqKWRhdGE7CisJc3RydWN0IGR1bW15X3N5c3RpbWVyX3BjbSAqZHBjbSA9IChzdHJ1Y3QgZHVtbXlfc3lzdGltZXJfcGNtICopZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlbGFwc2VkID0gMDsKIAkKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHBjbS0+bG9jaywgZmxhZ3MpOwotCWRwY20tPnRpbWVyLmV4cGlyZXMgPSAxICsgamlmZmllczsKLQlhZGRfdGltZXIoJmRwY20tPnRpbWVyKTsKLQlkcGNtLT5wY21faXJxX3BvcyArPSBkcGNtLT5wY21fYnBzOwotCWRwY20tPnBjbV9idWZfcG9zICs9IGRwY20tPnBjbV9icHM7Ci0JZHBjbS0+cGNtX2J1Zl9wb3MgJT0gZHBjbS0+cGNtX2J1ZmZlcl9zaXplICogZHBjbS0+cGNtX2h6OwotCWlmIChkcGNtLT5wY21faXJxX3BvcyA+PSBkcGNtLT5wY21fcGVyaW9kX3NpemUgKiBkcGNtLT5wY21faHopIHsKLQkJZHBjbS0+cGNtX2lycV9wb3MgJT0gZHBjbS0+cGNtX3BlcmlvZF9zaXplICogZHBjbS0+cGNtX2h6OwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcGNtLT5sb2NrLCBmbGFncyk7CisJZHVtbXlfc3lzdGltZXJfdXBkYXRlKGRwY20pOworCWR1bW15X3N5c3RpbWVyX3JlYXJtKGRwY20pOworCWVsYXBzZWQgPSBkcGNtLT5lbGFwc2VkOworCWRwY20tPmVsYXBzZWQgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRwY20tPmxvY2ssIGZsYWdzKTsKKwlpZiAoZWxhcHNlZCkKIAkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChkcGNtLT5zdWJzdHJlYW0pOwotCX0gZWxzZQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcGNtLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfY2FyZF9kdW1teV9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorZHVtbXlfc3lzdGltZXJfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZHVtbXlfc3lzdGltZXJfcGNtICpkcGNtID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc25kX3BjbV91ZnJhbWVzX3QgcG9zOworCisJc3Bpbl9sb2NrKCZkcGNtLT5sb2NrKTsKKwlkdW1teV9zeXN0aW1lcl91cGRhdGUoZHBjbSk7CisJcG9zID0gZHBjbS0+ZnJhY19wb3MgLyBIWjsKKwlzcGluX3VubG9jaygmZHBjbS0+bG9jayk7CisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIGludCBkdW1teV9zeXN0aW1lcl9jcmVhdGUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGR1bW15X3N5c3RpbWVyX3BjbSAqZHBjbTsKKworCWRwY20gPSBremFsbG9jKHNpemVvZigqZHBjbSksIEdGUF9LRVJORUwpOworCWlmICghZHBjbSkKKwkJcmV0dXJuIC1FTk9NRU07CisJc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEgPSBkcGNtOworCWluaXRfdGltZXIoJmRwY20tPnRpbWVyKTsKKwlkcGNtLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRwY207CisJZHBjbS0+dGltZXIuZnVuY3Rpb24gPSBkdW1teV9zeXN0aW1lcl9jYWxsYmFjazsKKwlzcGluX2xvY2tfaW5pdCgmZHBjbS0+bG9jayk7CisJZHBjbS0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkdW1teV9zeXN0aW1lcl9mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCWtmcmVlKHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBkdW1teV90aW1lcl9vcHMgZHVtbXlfc3lzdGltZXJfb3BzID0geworCS5jcmVhdGUgPQlkdW1teV9zeXN0aW1lcl9jcmVhdGUsCisJLmZyZWUgPQkJZHVtbXlfc3lzdGltZXJfZnJlZSwKKwkucHJlcGFyZSA9CWR1bW15X3N5c3RpbWVyX3ByZXBhcmUsCisJLnN0YXJ0ID0JZHVtbXlfc3lzdGltZXJfc3RhcnQsCisJLnN0b3AgPQkJZHVtbXlfc3lzdGltZXJfc3RvcCwKKwkucG9pbnRlciA9CWR1bW15X3N5c3RpbWVyX3BvaW50ZXIsCit9OworCisjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUworLyoKKyAqIGhydGltZXIgaW50ZXJmYWNlCisgKi8KKworc3RydWN0IGR1bW15X2hydGltZXJfcGNtIHsKKwlrdGltZV90IGJhc2VfdGltZTsKKwlrdGltZV90IHBlcmlvZF90aW1lOworCWF0b21pY190IHJ1bm5pbmc7CisJc3RydWN0IGhydGltZXIgdGltZXI7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07Cit9OworCitzdGF0aWMgdm9pZCBkdW1teV9ocnRpbWVyX3BjbV9lbGFwc2VkKHVuc2lnbmVkIGxvbmcgcHJpdikKK3sKKwlzdHJ1Y3QgZHVtbXlfaHJ0aW1lcl9wY20gKmRwY20gPSAoc3RydWN0IGR1bW15X2hydGltZXJfcGNtICopcHJpdjsKKwlpZiAoYXRvbWljX3JlYWQoJmRwY20tPnJ1bm5pbmcpKQorCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGRwY20tPnN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBkdW1teV9ocnRpbWVyX2NhbGxiYWNrKHN0cnVjdCBocnRpbWVyICp0aW1lcikKK3sKKwlzdHJ1Y3QgZHVtbXlfaHJ0aW1lcl9wY20gKmRwY207CisKKwlkcGNtID0gY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgZHVtbXlfaHJ0aW1lcl9wY20sIHRpbWVyKTsKKwlpZiAoIWF0b21pY19yZWFkKCZkcGNtLT5ydW5uaW5nKSkKKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworCXRhc2tsZXRfc2NoZWR1bGUoJmRwY20tPnRhc2tsZXQpOworCWhydGltZXJfZm9yd2FyZF9ub3codGltZXIsIGRwY20tPnBlcmlvZF90aW1lKTsKKwlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOworfQorCitzdGF0aWMgaW50IGR1bW15X2hydGltZXJfc3RhcnQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGR1bW15X2hydGltZXJfcGNtICpkcGNtID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlkcGNtLT5iYXNlX3RpbWUgPSBocnRpbWVyX2NiX2dldF90aW1lKCZkcGNtLT50aW1lcik7CisJaHJ0aW1lcl9zdGFydCgmZHBjbS0+dGltZXIsIGRwY20tPnBlcmlvZF90aW1lLCBIUlRJTUVSX01PREVfUkVMKTsKKwlhdG9taWNfc2V0KCZkcGNtLT5ydW5uaW5nLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdW1teV9ocnRpbWVyX3N0b3Aoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGR1bW15X2hydGltZXJfcGNtICpkcGNtID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlhdG9taWNfc2V0KCZkcGNtLT5ydW5uaW5nLCAwKTsKKwlocnRpbWVyX2NhbmNlbCgmZHBjbS0+dGltZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHVtbXlfaHJ0aW1lcl9zeW5jKHN0cnVjdCBkdW1teV9ocnRpbWVyX3BjbSAqZHBjbSkKK3sKKwl0YXNrbGV0X2tpbGwoJmRwY20tPnRhc2tsZXQpOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK2R1bW15X2hydGltZXJfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBzbmRfZHVtbXlfcGNtICpkcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkdW1teV9ocnRpbWVyX3BjbSAqZHBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwl1NjQgZGVsdGE7CisJdTMyIHBvczsKIAotCXJldHVybiBieXRlc190b19mcmFtZXMocnVudGltZSwgZHBjbS0+cGNtX2J1Zl9wb3MgLyBkcGNtLT5wY21faHopOworCWRlbHRhID0ga3RpbWVfdXNfZGVsdGEoaHJ0aW1lcl9jYl9nZXRfdGltZSgmZHBjbS0+dGltZXIpLAorCQkJICAgICAgIGRwY20tPmJhc2VfdGltZSk7CisJZGVsdGEgPSBkaXZfdTY0KGRlbHRhICogcnVudGltZS0+cmF0ZSArIDk5OTk5OSwgMTAwMDAwMCk7CisJZGl2X3U2NF9yZW0oZGVsdGEsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCAmcG9zKTsKKwlyZXR1cm4gcG9zOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX2NhcmRfZHVtbXlfcGxheWJhY2sgPQorc3RhdGljIGludCBkdW1teV9ocnRpbWVyX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7Ci0JLmluZm8gPQkJCShTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAotCQkJCSBTTkRSVl9QQ01fSU5GT19SRVNVTUUgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBkdW1teV9ocnRpbWVyX3BjbSAqZHBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgcGVyaW9kLCByYXRlOworCWxvbmcgc2VjOworCXVuc2lnbmVkIGxvbmcgbnNlY3M7CisKKwlkdW1teV9ocnRpbWVyX3N5bmMoZHBjbSk7CisJcGVyaW9kID0gcnVudGltZS0+cGVyaW9kX3NpemU7CisJcmF0ZSA9IHJ1bnRpbWUtPnJhdGU7CisJc2VjID0gcGVyaW9kIC8gcmF0ZTsKKwlwZXJpb2QgJT0gcmF0ZTsKKwluc2VjcyA9IGRpdl91NjQoKHU2NClwZXJpb2QgKiAxMDAwMDAwMDAwVUwgKyByYXRlIC0gMSwgcmF0ZSk7CisJZHBjbS0+cGVyaW9kX3RpbWUgPSBrdGltZV9zZXQoc2VjLCBuc2Vjcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdW1teV9ocnRpbWVyX2NyZWF0ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZHVtbXlfaHJ0aW1lcl9wY20gKmRwY207CisKKwlkcGNtID0ga3phbGxvYyhzaXplb2YoKmRwY20pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRwY20pCisJCXJldHVybiAtRU5PTUVNOworCXN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhID0gZHBjbTsKKwlocnRpbWVyX2luaXQoJmRwY20tPnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOworCWRwY20tPnRpbWVyLmZ1bmN0aW9uID0gZHVtbXlfaHJ0aW1lcl9jYWxsYmFjazsKKwlkcGNtLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJYXRvbWljX3NldCgmZHBjbS0+cnVubmluZywgMCk7CisJdGFza2xldF9pbml0KCZkcGNtLT50YXNrbGV0LCBkdW1teV9ocnRpbWVyX3BjbV9lbGFwc2VkLAorCQkgICAgICh1bnNpZ25lZCBsb25nKWRwY20pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkdW1teV9ocnRpbWVyX2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGR1bW15X2hydGltZXJfcGNtICpkcGNtID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJZHVtbXlfaHJ0aW1lcl9zeW5jKGRwY20pOworCWtmcmVlKGRwY20pOworfQorCitzdGF0aWMgc3RydWN0IGR1bW15X3RpbWVyX29wcyBkdW1teV9ocnRpbWVyX29wcyA9IHsKKwkuY3JlYXRlID0JZHVtbXlfaHJ0aW1lcl9jcmVhdGUsCisJLmZyZWUgPQkJZHVtbXlfaHJ0aW1lcl9mcmVlLAorCS5wcmVwYXJlID0JZHVtbXlfaHJ0aW1lcl9wcmVwYXJlLAorCS5zdGFydCA9CWR1bW15X2hydGltZXJfc3RhcnQsCisJLnN0b3AgPQkJZHVtbXlfaHJ0aW1lcl9zdG9wLAorCS5wb2ludGVyID0JZHVtbXlfaHJ0aW1lcl9wb2ludGVyLAorfTsKKworI2VuZGlmIC8qIENPTkZJR19ISUdIX1JFU19USU1FUlMgKi8KKworLyoKKyAqIFBDTSBpbnRlcmZhY2UKKyAqLworCitzdGF0aWMgaW50IGR1bW15X3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfZHVtbXkgKmR1bW15ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCQlyZXR1cm4gZHVtbXktPnRpbWVyX29wcy0+c3RhcnQoc3Vic3RyZWFtKTsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQlyZXR1cm4gZHVtbXktPnRpbWVyX29wcy0+c3RvcChzdWJzdHJlYW0pOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBkdW1teV9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXJldHVybiBkdW1teS0+dGltZXJfb3BzLT5wcmVwYXJlKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBkdW1teV9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXJldHVybiBkdW1teS0+dGltZXJfb3BzLT5wb2ludGVyKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBkdW1teV9wY21faGFyZHdhcmUgPSB7CisJLmluZm8gPQkJCShTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQkgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCSBTTkRSVl9QQ01fSU5GT19SRVNVTUUgfAorCQkJCSBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKIAkuZm9ybWF0cyA9CQlVU0VfRk9STUFUUywKIAkucmF0ZXMgPQkJVVNFX1JBVEUsCiAJLnJhdGVfbWluID0JCVVTRV9SQVRFX01JTiwKQEAgLTI5OCwxNDEgKzUxNiwxNTIgQEAKIAkuZmlmb19zaXplID0JCTAsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX2NhcmRfZHVtbXlfY2FwdHVyZSA9CitzdGF0aWMgaW50IGR1bW15X3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCiB7Ci0JLmluZm8gPQkJCShTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAotCQkJCSBTTkRSVl9QQ01fSU5GT19SRVNVTUUgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKLQkuZm9ybWF0cyA9CQlVU0VfRk9STUFUUywKLQkucmF0ZXMgPQkJVVNFX1JBVEUsCi0JLnJhdGVfbWluID0JCVVTRV9SQVRFX01JTiwKLQkucmF0ZV9tYXggPQkJVVNFX1JBVEVfTUFYLAotCS5jaGFubmVsc19taW4gPQkJVVNFX0NIQU5ORUxTX01JTiwKLQkuY2hhbm5lbHNfbWF4ID0JCVVTRV9DSEFOTkVMU19NQVgsCi0JLmJ1ZmZlcl9ieXRlc19tYXggPQlNQVhfQlVGRkVSX1NJWkUsCi0JLnBlcmlvZF9ieXRlc19taW4gPQk2NCwKLQkucGVyaW9kX2J5dGVzX21heCA9CU1BWF9QRVJJT0RfU0laRSwKLQkucGVyaW9kc19taW4gPQkJVVNFX1BFUklPRFNfTUlOLAotCS5wZXJpb2RzX21heCA9CQlVU0VfUEVSSU9EU19NQVgsCi0JLmZpZm9fc2l6ZSA9CQkwLAotfTsKLQotc3RhdGljIHZvaWQgc25kX2NhcmRfZHVtbXlfcnVudGltZV9mcmVlKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCi17Ci0Ja2ZyZWUocnVudGltZS0+cHJpdmF0ZV9kYXRhKTsKKwlpZiAoZmFrZV9idWZmZXIpIHsKKwkJLyogcnVudGltZS0+ZG1hX2J5dGVzIGhhcyB0byBiZSBzZXQgbWFudWFsbHkgdG8gYWxsb3cgbW1hcCAqLworCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9ieXRlcyA9IHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwogfQogCi1zdGF0aWMgaW50IHNuZF9jYXJkX2R1bW15X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCitzdGF0aWMgaW50IGR1bW15X3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwotfQotCi1zdGF0aWMgaW50IHNuZF9jYXJkX2R1bW15X2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17CisJaWYgKGZha2VfYnVmZmVyKQorCQlyZXR1cm4gMDsKIAlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9kdW1teV9wY20gKm5ld19wY21fc3RyZWFtKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIGludCBkdW1teV9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKLQlzdHJ1Y3Qgc25kX2R1bW15X3BjbSAqZHBjbTsKLQotCWRwY20gPSBremFsbG9jKHNpemVvZigqZHBjbSksIEdGUF9LRVJORUwpOwotCWlmICghIGRwY20pCi0JCXJldHVybiBkcGNtOwotCWluaXRfdGltZXIoJmRwY20tPnRpbWVyKTsKLQlkcGNtLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRwY207Ci0JZHBjbS0+dGltZXIuZnVuY3Rpb24gPSBzbmRfY2FyZF9kdW1teV9wY21fdGltZXJfZnVuY3Rpb247Ci0Jc3Bpbl9sb2NrX2luaXQoJmRwY20tPmxvY2spOwotCWRwY20tPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKLQlyZXR1cm4gZHBjbTsKLX0KLQotc3RhdGljIGludCBzbmRfY2FyZF9kdW1teV9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoteworCXN0cnVjdCBzbmRfZHVtbXkgKmR1bW15ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IHNuZF9kdW1teV9wY20gKmRwY207CiAJaW50IGVycjsKIAotCWlmICgoZHBjbSA9IG5ld19wY21fc3RyZWFtKHN1YnN0cmVhbSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGRwY207Ci0JLyogbWFrZXMgdGhlIGluZnJhc3RydWN0dXJlIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIGRwY20gKi8KLQlydW50aW1lLT5wcml2YXRlX2ZyZWUgPSBzbmRfY2FyZF9kdW1teV9ydW50aW1lX2ZyZWU7Ci0JcnVudGltZS0+aHcgPSBzbmRfY2FyZF9kdW1teV9wbGF5YmFjazsKKwlkdW1teS0+dGltZXJfb3BzID0gJmR1bW15X3N5c3RpbWVyX29wczsKKyNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCisJaWYgKGhydGltZXIpCisJCWR1bW15LT50aW1lcl9vcHMgPSAmZHVtbXlfaHJ0aW1lcl9vcHM7CisjZW5kaWYKKworCWVyciA9IGR1bW15LT50aW1lcl9vcHMtPmNyZWF0ZShzdWJzdHJlYW0pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcnVudGltZS0+aHcgPSBkdW1teV9wY21faGFyZHdhcmU7CiAJaWYgKHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UgJiAxKSB7CiAJCXJ1bnRpbWUtPmh3LmluZm8gJj0gflNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEOwogCQlydW50aW1lLT5ody5pbmZvIHw9IFNORFJWX1BDTV9JTkZPX05PTklOVEVSTEVBVkVEOwogCX0KIAlpZiAoc3Vic3RyZWFtLT5wY20tPmRldmljZSAmIDIpCi0JCXJ1bnRpbWUtPmh3LmluZm8gJj0gfihTTkRSVl9QQ01fSU5GT19NTUFQfFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpOwotCWVyciA9IGFkZF9wbGF5YmFja19jb25zdHJhaW50cyhydW50aW1lKTsKLQlpZiAoZXJyIDwgMCkKKwkJcnVudGltZS0+aHcuaW5mbyAmPSB+KFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCSAgICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWVyciA9IGFkZF9wbGF5YmFja19jb25zdHJhaW50cyhzdWJzdHJlYW0tPnJ1bnRpbWUpOworCWVsc2UKKwkJZXJyID0gYWRkX2NhcHR1cmVfY29uc3RyYWludHMoc3Vic3RyZWFtLT5ydW50aW1lKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkdW1teS0+dGltZXJfb3BzLT5mcmVlKHN1YnN0cmVhbSk7CiAJCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfY2FyZF9kdW1teV9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3Qgc25kX2R1bW15X3BjbSAqZHBjbTsKLQlpbnQgZXJyOwotCi0JaWYgKChkcGNtID0gbmV3X3BjbV9zdHJlYW0oc3Vic3RyZWFtKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gZHBjbTsKLQkvKiBtYWtlcyB0aGUgaW5mcmFzdHJ1Y3R1cmUgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgZHBjbSAqLwotCXJ1bnRpbWUtPnByaXZhdGVfZnJlZSA9IHNuZF9jYXJkX2R1bW15X3J1bnRpbWVfZnJlZTsKLQlydW50aW1lLT5odyA9IHNuZF9jYXJkX2R1bW15X2NhcHR1cmU7Ci0JaWYgKHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UgPT0gMSkgewotCQlydW50aW1lLT5ody5pbmZvICY9IH5TTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRDsKLQkJcnVudGltZS0+aHcuaW5mbyB8PSBTTkRSVl9QQ01fSU5GT19OT05JTlRFUkxFQVZFRDsKIAl9Ci0JaWYgKHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UgJiAyKQotCQlydW50aW1lLT5ody5pbmZvICY9IH4oU05EUlZfUENNX0lORk9fTU1BUHxTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKTsKLQllcnIgPSBhZGRfY2FwdHVyZV9jb25zdHJhaW50cyhydW50aW1lKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9jYXJkX2R1bW15X3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIGludCBkdW1teV9wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CisJc3RydWN0IHNuZF9kdW1teSAqZHVtbXkgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJZHVtbXktPnRpbWVyX29wcy0+ZnJlZShzdWJzdHJlYW0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9jYXJkX2R1bW15X2NhcHR1cmVfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisvKgorICogZHVtbXkgYnVmZmVyIGhhbmRsaW5nCisgKi8KKworc3RhdGljIHZvaWQgKmR1bW15X3BhZ2VbMl07CisKK3N0YXRpYyB2b2lkIGZyZWVfZmFrZV9idWZmZXIodm9pZCkKIHsKKwlpZiAoZmFrZV9idWZmZXIpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCQlpZiAoZHVtbXlfcGFnZVtpXSkgeworCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkdW1teV9wYWdlW2ldKTsKKwkJCQlkdW1teV9wYWdlW2ldID0gTlVMTDsKKwkJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfZmFrZV9idWZmZXIodm9pZCkKK3sKKwlpbnQgaTsKKworCWlmICghZmFrZV9idWZmZXIpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJZHVtbXlfcGFnZVtpXSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoIWR1bW15X3BhZ2VbaV0pIHsKKwkJCWZyZWVfZmFrZV9idWZmZXIoKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9jYXJkX2R1bW15X3BsYXliYWNrX29wcyA9IHsKLQkub3BlbiA9CQkJc25kX2NhcmRfZHVtbXlfcGxheWJhY2tfb3BlbiwKLQkuY2xvc2UgPQkJc25kX2NhcmRfZHVtbXlfcGxheWJhY2tfY2xvc2UsCi0JLmlvY3RsID0JCXNuZF9wY21fbGliX2lvY3RsLAotCS5od19wYXJhbXMgPQkJc25kX2NhcmRfZHVtbXlfaHdfcGFyYW1zLAotCS5od19mcmVlID0JCXNuZF9jYXJkX2R1bW15X2h3X2ZyZWUsCi0JLnByZXBhcmUgPQkJc25kX2NhcmRfZHVtbXlfcGNtX3ByZXBhcmUsCi0JLnRyaWdnZXIgPQkJc25kX2NhcmRfZHVtbXlfcGNtX3RyaWdnZXIsCi0JLnBvaW50ZXIgPQkJc25kX2NhcmRfZHVtbXlfcGNtX3BvaW50ZXIsCitzdGF0aWMgaW50IGR1bW15X3BjbV9jb3B5KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICBpbnQgY2hhbm5lbCwgc25kX3BjbV91ZnJhbWVzX3QgcG9zLAorCQkJICB2b2lkIF9fdXNlciAqZHN0LCBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCkKK3sKKwlyZXR1cm4gMDsgLyogZG8gbm90aGluZyAqLworfQorCitzdGF0aWMgaW50IGR1bW15X3BjbV9zaWxlbmNlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICBpbnQgY2hhbm5lbCwgc25kX3BjbV91ZnJhbWVzX3QgcG9zLAorCQkJICAgICBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCkKK3sKKwlyZXR1cm4gMDsgLyogZG8gbm90aGluZyAqLworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKmR1bW15X3BjbV9wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiB2aXJ0X3RvX3BhZ2UoZHVtbXlfcGFnZVtzdWJzdHJlYW0tPnN0cmVhbV0pOyAvKiB0aGUgc2FtZSBwYWdlICovCit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgZHVtbXlfcGNtX29wcyA9IHsKKwkub3BlbiA9CQlkdW1teV9wY21fb3BlbiwKKwkuY2xvc2UgPQlkdW1teV9wY21fY2xvc2UsCisJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9CWR1bW15X3BjbV9od19wYXJhbXMsCisJLmh3X2ZyZWUgPQlkdW1teV9wY21faHdfZnJlZSwKKwkucHJlcGFyZSA9CWR1bW15X3BjbV9wcmVwYXJlLAorCS50cmlnZ2VyID0JZHVtbXlfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIgPQlkdW1teV9wY21fcG9pbnRlciwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2NhcmRfZHVtbXlfY2FwdHVyZV9vcHMgPSB7Ci0JLm9wZW4gPQkJCXNuZF9jYXJkX2R1bW15X2NhcHR1cmVfb3BlbiwKLQkuY2xvc2UgPQkJc25kX2NhcmRfZHVtbXlfY2FwdHVyZV9jbG9zZSwKLQkuaW9jdGwgPQkJc25kX3BjbV9saWJfaW9jdGwsCi0JLmh3X3BhcmFtcyA9CQlzbmRfY2FyZF9kdW1teV9od19wYXJhbXMsCi0JLmh3X2ZyZWUgPQkJc25kX2NhcmRfZHVtbXlfaHdfZnJlZSwKLQkucHJlcGFyZSA9CQlzbmRfY2FyZF9kdW1teV9wY21fcHJlcGFyZSwKLQkudHJpZ2dlciA9CQlzbmRfY2FyZF9kdW1teV9wY21fdHJpZ2dlciwKLQkucG9pbnRlciA9CQlzbmRfY2FyZF9kdW1teV9wY21fcG9pbnRlciwKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgZHVtbXlfcGNtX29wc19ub19idWYgPSB7CisJLm9wZW4gPQkJZHVtbXlfcGNtX29wZW4sCisJLmNsb3NlID0JZHVtbXlfcGNtX2Nsb3NlLAorCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPQlkdW1teV9wY21faHdfcGFyYW1zLAorCS5od19mcmVlID0JZHVtbXlfcGNtX2h3X2ZyZWUsCisJLnByZXBhcmUgPQlkdW1teV9wY21fcHJlcGFyZSwKKwkudHJpZ2dlciA9CWR1bW15X3BjbV90cmlnZ2VyLAorCS5wb2ludGVyID0JZHVtbXlfcGNtX3BvaW50ZXIsCisJLmNvcHkgPQkJZHVtbXlfcGNtX2NvcHksCisJLnNpbGVuY2UgPQlkdW1teV9wY21fc2lsZW5jZSwKKwkucGFnZSA9CQlkdW1teV9wY21fcGFnZSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2R1bW15X3BjbShzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSwgaW50IGRldmljZSwKIAkJCQkJaW50IHN1YnN0cmVhbXMpCiB7CiAJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlzdHJ1Y3Qgc25kX3BjbV9vcHMgKm9wczsKIAlpbnQgZXJyOwogCiAJZXJyID0gc25kX3BjbV9uZXcoZHVtbXktPmNhcmQsICJEdW1teSBQQ00iLCBkZXZpY2UsCkBAIC00NDAsMTcgKzY2OSwyOCBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCWR1bW15LT5wY20gPSBwY207Ci0Jc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnNuZF9jYXJkX2R1bW15X3BsYXliYWNrX29wcyk7Ci0Jc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX2NhcmRfZHVtbXlfY2FwdHVyZV9vcHMpOworCWlmIChmYWtlX2J1ZmZlcikKKwkJb3BzID0gJmR1bW15X3BjbV9vcHNfbm9fYnVmOworCWVsc2UKKwkJb3BzID0gJmR1bW15X3BjbV9vcHM7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgb3BzKTsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsIG9wcyk7CiAJcGNtLT5wcml2YXRlX2RhdGEgPSBkdW1teTsKIAlwY20tPmluZm9fZmxhZ3MgPSAwOwogCXN0cmNweShwY20tPm5hbWUsICJEdW1teSBQQ00iKTsKLQlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfQ09OVElOVU9VUywKLQkJCQkJICAgICAgc25kX2RtYV9jb250aW51b3VzX2RhdGEoR0ZQX0tFUk5FTCksCi0JCQkJCSAgICAgIDAsIDY0KjEwMjQpOworCWlmICghZmFrZV9idWZmZXIpIHsKKwkJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sCisJCQlTTkRSVl9ETUFfVFlQRV9DT05USU5VT1VTLAorCQkJc25kX2RtYV9jb250aW51b3VzX2RhdGEoR0ZQX0tFUk5FTCksCisJCQkwLCA2NCoxMDI0KTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBtaXhlciBpbnRlcmZhY2UKKyAqLworCiAjZGVmaW5lIERVTU1ZX1ZPTFVNRSh4bmFtZSwgeGluZGV4LCBhZGRyKSBcCiB7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCiAgIC5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFELCBcCkBAIC01ODEsNiArODIxLDEzMSBAQAogCXJldHVybiAwOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0RFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQorLyoKKyAqIHByb2MgaW50ZXJmYWNlCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X2Zvcm1hdHMoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFNORFJWX1BDTV9GT1JNQVRfTEFTVDsgaSsrKSB7CisJCWlmIChkdW1teV9wY21faGFyZHdhcmUuZm9ybWF0cyAmICgxVUxMIDw8IGkpKQorCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICVzIiwgc25kX3BjbV9mb3JtYXRfbmFtZShpKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmludF9yYXRlcyhzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCit7CisJc3RhdGljIGludCByYXRlc1tdID0geworCQk1NTEyLCA4MDAwLCAxMTAyNSwgMTYwMDAsIDIyMDUwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwLAorCQk2NDAwMCwgODgyMDAsIDk2MDAwLCAxNzY0MDAsIDE5MjAwMCwKKwl9OworCWludCBpOworCisJaWYgKGR1bW15X3BjbV9oYXJkd2FyZS5yYXRlcyAmIFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMpCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiBjb250aW51b3VzIik7CisJaWYgKGR1bW15X3BjbV9oYXJkd2FyZS5yYXRlcyAmIFNORFJWX1BDTV9SQVRFX0tOT1QpCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiBrbm90Iik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZXMpOyBpKyspCisJCWlmIChkdW1teV9wY21faGFyZHdhcmUucmF0ZXMgJiAoMSA8PCBpKSkKKwkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAlZCIsIHJhdGVzW2ldKTsKK30KKworI2RlZmluZSBnZXRfZHVtbXlfaW50X3B0cihvZnMpIFwKKwkodW5zaWduZWQgaW50ICopKChjaGFyICopJmR1bW15X3BjbV9oYXJkd2FyZSArIChvZnMpKQorI2RlZmluZSBnZXRfZHVtbXlfbGxfcHRyKG9mcykgXAorCSh1bnNpZ25lZCBsb25nIGxvbmcgKikoKGNoYXIgKikmZHVtbXlfcGNtX2hhcmR3YXJlICsgKG9mcykpCisKK3N0cnVjdCBkdW1teV9od19maWVsZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpmb3JtYXQ7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKK307CisjZGVmaW5lIEZJRUxEX0VOVFJZKGl0ZW0sIGZtdCkgewkJICAgXAorCS5uYW1lID0gI2l0ZW0sCQkJCSAgIFwKKwkuZm9ybWF0ID0gZm10LAkJCQkgICBcCisJLm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlLCBpdGVtKSwgXAorCS5zaXplID0gc2l6ZW9mKGR1bW15X3BjbV9oYXJkd2FyZS5pdGVtKSB9CisKK3N0YXRpYyBzdHJ1Y3QgZHVtbXlfaHdfZmllbGQgZmllbGRzW10gPSB7CisJRklFTERfRU5UUlkoZm9ybWF0cywgIiUjbGx4IiksCisJRklFTERfRU5UUlkocmF0ZXMsICIlI3giKSwKKwlGSUVMRF9FTlRSWShyYXRlX21pbiwgIiVkIiksCisJRklFTERfRU5UUlkocmF0ZV9tYXgsICIlZCIpLAorCUZJRUxEX0VOVFJZKGNoYW5uZWxzX21pbiwgIiVkIiksCisJRklFTERfRU5UUlkoY2hhbm5lbHNfbWF4LCAiJWQiKSwKKwlGSUVMRF9FTlRSWShidWZmZXJfYnl0ZXNfbWF4LCAiJWxkIiksCisJRklFTERfRU5UUlkocGVyaW9kX2J5dGVzX21pbiwgIiVsZCIpLAorCUZJRUxEX0VOVFJZKHBlcmlvZF9ieXRlc19tYXgsICIlbGQiKSwKKwlGSUVMRF9FTlRSWShwZXJpb2RzX21pbiwgIiVkIiksCisJRklFTERfRU5UUlkocGVyaW9kc19tYXgsICIlZCIpLAorfTsKKworc3RhdGljIHZvaWQgZHVtbXlfcHJvY19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCisJCQkgICAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmllbGRzKTsgaSsrKSB7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVzICIsIGZpZWxkc1tpXS5uYW1lKTsKKwkJaWYgKGZpZWxkc1tpXS5zaXplID09IHNpemVvZihpbnQpKQorCQkJc25kX2lwcmludGYoYnVmZmVyLCBmaWVsZHNbaV0uZm9ybWF0LAorCQkJCSAgICAqZ2V0X2R1bW15X2ludF9wdHIoZmllbGRzW2ldLm9mZnNldCkpOworCQllbHNlCisJCQlzbmRfaXByaW50ZihidWZmZXIsIGZpZWxkc1tpXS5mb3JtYXQsCisJCQkJICAgICpnZXRfZHVtbXlfbGxfcHRyKGZpZWxkc1tpXS5vZmZzZXQpKTsKKwkJaWYgKCFzdHJjbXAoZmllbGRzW2ldLm5hbWUsICJmb3JtYXRzIikpCisJCQlwcmludF9mb3JtYXRzKGJ1ZmZlcik7CisJCWVsc2UgaWYgKCFzdHJjbXAoZmllbGRzW2ldLm5hbWUsICJyYXRlcyIpKQorCQkJcHJpbnRfcmF0ZXMoYnVmZmVyKTsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR1bW15X3Byb2Nfd3JpdGUoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKwkJCSAgICAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCWNoYXIgbGluZVs2NF07CisKKwl3aGlsZSAoIXNuZF9pbmZvX2dldF9saW5lKGJ1ZmZlciwgbGluZSwgc2l6ZW9mKGxpbmUpKSkgeworCQljaGFyIGl0ZW1bMjBdOworCQljb25zdCBjaGFyICpwdHI7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJCWludCBpOworCisJCXB0ciA9IHNuZF9pbmZvX2dldF9zdHIoaXRlbSwgbGluZSwgc2l6ZW9mKGl0ZW0pKTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmllbGRzKTsgaSsrKSB7CisJCQlpZiAoIXN0cmNtcChpdGVtLCBmaWVsZHNbaV0ubmFtZSkpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPj0gQVJSQVlfU0laRShmaWVsZHMpKQorCQkJY29udGludWU7CisJCXNuZF9pbmZvX2dldF9zdHIoaXRlbSwgcHRyLCBzaXplb2YoaXRlbSkpOworCQlpZiAoc3RyaWN0X3N0cnRvdWxsKGl0ZW0sIDAsICZ2YWwpKQorCQkJY29udGludWU7CisJCWlmIChmaWVsZHNbaV0uc2l6ZSA9PSBzaXplb2YoaW50KSkKKwkJCSpnZXRfZHVtbXlfaW50X3B0cihmaWVsZHNbaV0ub2Zmc2V0KSA9IHZhbDsKKwkJZWxzZQorCQkJKmdldF9kdW1teV9sbF9wdHIoZmllbGRzW2ldLm9mZnNldCkgPSB2YWw7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZHVtbXlfcHJvY19pbml0KHN0cnVjdCBzbmRfZHVtbXkgKmNoaXApCit7CisJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeTsKKworCWlmICghc25kX2NhcmRfcHJvY19uZXcoY2hpcC0+Y2FyZCwgImR1bW15X3BjbSIsICZlbnRyeSkpIHsKKwkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCBkdW1teV9wcm9jX3JlYWQpOworCQllbnRyeS0+Yy50ZXh0LndyaXRlID0gZHVtbXlfcHJvY193cml0ZTsKKwkJZW50cnktPm1vZGUgfD0gU19JV1VTUjsKKwl9Cit9CisjZWxzZQorI2RlZmluZSBkdW1teV9wcm9jX2luaXQoeCkKKyNlbmRpZiAvKiBDT05GSUdfU05EX0RFQlVHICYmIENPTkZJR19QUk9DX0ZTICovCisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9kdW1teV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwpAQCAtNjEwLDYgKzk3NSw4IEBACiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkR1bW15Iik7CiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIkR1bW15ICVpIiwgZGV2ICsgMSk7CiAKKwlkdW1teV9wcm9jX2luaXQoZHVtbXkpOworCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2cHRyLT5kZXYpOwogCiAJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CkBAIC02NzAsNiArMTAzNyw3IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2aWNlcyk7ICsraSkKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlc1tpXSk7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9kdW1teV9kcml2ZXIpOworCWZyZWVfZmFrZV9idWZmZXIoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX2R1bW15X2luaXQodm9pZCkKQEAgLTY4MCw2ICsxMDQ4LDEyIEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKKwllcnIgPSBhbGxvY19mYWtlX2J1ZmZlcigpOworCWlmIChlcnIgPCAwKSB7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmRfZHVtbXlfZHJpdmVyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAljYXJkcyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NtaTgzMzAuYyBiL3NvdW5kL2lzYS9jbWk4MzMwLmMKaW5kZXggM2VlMDI2OS4uMDJmNzlkMiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NtaTgzMzAuYworKysgYi9zb3VuZC9pc2EvY21pODMzMC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBEcml2ZXIgZm9yIEMtTWVkaWEncyBDTUk4MzMwIHNvdW5kY2FyZHMuCisgKiAgRHJpdmVyIGZvciBDLU1lZGlhJ3MgQ01JODMzMCBhbmQgQ01JODMyOSBzb3VuZGNhcmRzLgogICogIENvcHlyaWdodCAoYykgYnkgR2VvcmdlIFRhbHVzYW4gPGdzdGFsdXNhbkB1d2F0ZXJsb28uY2E+CiAgKiAgICBodHRwOi8vd3d3LnVuZGVyZ3JhZC5tYXRoLnV3YXRlcmxvby5jYS9+Z3N0YWx1c2EKICAqCkBAIC0zNSw3ICszNSw3IEBACiAgKgogICogIFRoaXMgY2FyZCBoYXMgdHdvIG1peGVycyBhbmQgdHdvIFBDTSBkZXZpY2VzLiAgSSd2ZSBjaGVlc2VkIGl0IHN1Y2gKICAqICB0aGF0IHJlY29yZGluZyBhbmQgcGxheWJhY2sgY2FuIGJlIGRvbmUgdGhyb3VnaCB0aGUgc2FtZSBkZXZpY2UuCi0gKiAgVGhlIGRyaXZlciAibWFnaWNhbGx5IiByb3V0ZXMgdGhlIGNhcHR1cmluZyB0byB0aGUgQ01JODMzMCBjb2RlYywKKyAqICBUaGUgZHJpdmVyICJtYWdpY2FsbHkiIHJvdXRlcyB0aGUgY2FwdHVyaW5nIHRvIHRoZSBBRDE4NDggY29kZWMsCiAgKiAgYW5kIHBsYXliYWNrIHRvIHRoZSBTQjE2IGNvZGVjLiAgVGhpcyBhbGxvd3MgZm9yIGZ1bGwtZHVwbGV4IG1vZGUKICAqICB0byBzb21lIGV4dGVudC4KICAqICBUaGUgdXRpbGl0aWVzIGluIGFsc2EtdXRpbHMgYXJlIGF3YXJlIG9mIGJvdGggZGV2aWNlcywgc28gcGFzc2luZwpAQCAtNjQsNyArNjQsNyBAQAogLyoKICAqLwogTU9EVUxFX0FVVEhPUigiR2VvcmdlIFRhbHVzYW4gPGdzdGFsdXNhbkB1d2F0ZXJsb28uY2E+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkMtTWVkaWEgQ01JODMzMCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDLU1lZGlhIENNSTgzMzAvQ01JODMyOSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7Qy1NZWRpYSxDTUk4MzMwLGlzYXBucDp7Q01JMDAwMSxAQEAwMDAxLEBYQDAwMDF9fX0iKTsKIApAQCAtODYsMzggKzg2LDM4IEBACiBzdGF0aWMgaW50IG1wdWlycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsKIAogbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBDTUk4MzMwIHNvdW5kY2FyZC4iKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgQ01JODMzMC9DTUk4MzI5IHNvdW5kY2FyZC4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyAgZm9yIENNSTgzMzAgc291bmRjYXJkLiIpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyAgZm9yIENNSTgzMzAvQ01JODMyOSBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIENNSTgzMzAgc291bmRjYXJkLiIpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgQ01JODMzMC9DTUk4MzI5IHNvdW5kY2FyZC4iKTsKICNpZmRlZiBDT05GSUdfUE5QCiBtb2R1bGVfcGFyYW1fYXJyYXkoaXNhcG5wLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaXNhcG5wLCAiUG5QIGRldGVjdGlvbiBmb3Igc3BlY2lmaWVkIHNvdW5kY2FyZC4iKTsKICNlbmRpZgogCiBtb2R1bGVfcGFyYW1fYXJyYXkoc2Jwb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Moc2Jwb3J0LCAiUG9ydCAjIGZvciBDTUk4MzMwIFNCIGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0Moc2Jwb3J0LCAiUG9ydCAjIGZvciBDTUk4MzMwL0NNSTgzMjkgU0IgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHNiaXJxLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhzYmlycSwgIklSUSAjIGZvciBDTUk4MzMwIFNCIGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0Moc2JpcnEsICJJUlEgIyBmb3IgQ01JODMzMC9DTUk4MzI5IFNCIGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShzYmRtYTgsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHNiZG1hOCwgIkRNQTggZm9yIENNSTgzMzAgU0IgZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhzYmRtYTgsICJETUE4IGZvciBDTUk4MzMwL0NNSTgzMjkgU0IgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHNiZG1hMTYsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHNiZG1hMTYsICJETUExNiBmb3IgQ01JODMzMCBTQiBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKHNiZG1hMTYsICJETUExNiBmb3IgQ01JODMzMC9DTUk4MzI5IFNCIGRyaXZlci4iKTsKIAogbW9kdWxlX3BhcmFtX2FycmF5KHdzc3BvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyh3c3Nwb3J0LCAiUG9ydCAjIGZvciBDTUk4MzMwIFdTUyBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKHdzc3BvcnQsICJQb3J0ICMgZm9yIENNSTgzMzAvQ01JODMyOSBXU1MgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHdzc2lycSwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Mod3NzaXJxLCAiSVJRICMgZm9yIENNSTgzMzAgV1NTIGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0Mod3NzaXJxLCAiSVJRICMgZm9yIENNSTgzMzAvQ01JODMyOSBXU1MgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHdzc2RtYSwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Mod3NzZG1hLCAiRE1BIGZvciBDTUk4MzMwIFdTUyBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKHdzc2RtYSwgIkRNQSBmb3IgQ01JODMzMC9DTUk4MzI5IFdTUyBkcml2ZXIuIik7CiAKIG1vZHVsZV9wYXJhbV9hcnJheShmbXBvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhmbXBvcnQsICJGTSBwb3J0ICMgZm9yIENNSTgzMzAgZHJpdmVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhmbXBvcnQsICJGTSBwb3J0ICMgZm9yIENNSTgzMzAvQ01JODMyOSBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkobXB1cG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1wdXBvcnQsICJNUFUtNDAxIHBvcnQgIyBmb3IgQ01JODMzMCBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKG1wdXBvcnQsICJNUFUtNDAxIHBvcnQgIyBmb3IgQ01JODMzMC9DTUk4MzI5IGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShtcHVpcnEsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1wdWlycSwgIklSUSAjIGZvciBDTUk4MzMwIE1QVS00MDEgcG9ydC4iKTsKK01PRFVMRV9QQVJNX0RFU0MobXB1aXJxLCAiSVJRICMgZm9yIENNSTgzMzAvQ01JODMyOSBNUFUtNDAxIHBvcnQuIik7CiAjaWZkZWYgQ09ORklHX1BOUAogc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKIHN0YXRpYyBpbnQgcG5wX3JlZ2lzdGVyZWQ7CkBAIC0xNTYsNiArMTU2LDExIEBACiAKIHR5cGVkZWYgaW50ICgqc25kX3BjbV9vcGVuX2NhbGxiYWNrX3QpKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKTsKIAorZW51bSBjYXJkX3R5cGUgeworCUNNSTgzMzAsCisJQ01JODMyOQorfTsKKwogc3RydWN0IHNuZF9jbWk4MzMwIHsKICNpZmRlZiBDT05GSUdfUE5QCiAJc3RydWN0IHBucF9kZXYgKmNhcDsKQEAgLTE3MiwxMSArMTc3LDE0IEBACiAJCXNuZF9wY21fb3Blbl9jYWxsYmFja190IG9wZW47CiAJCXZvaWQgKnByaXZhdGVfZGF0YTsgLyogc2Igb3Igd3NzICovCiAJfSBzdHJlYW1zWzJdOworCisJZW51bSBjYXJkX3R5cGUgdHlwZTsKIH07CiAKICNpZmRlZiBDT05GSUdfUE5QCiAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHNuZF9jbWk4MzMwX3BucGlkc1tdID0geworCXsgLmlkID0gIkNNSTAwMDEiLCAuZGV2cyA9IHsgeyAiQFhAMDAwMSIgfSwgeyAiQEBAMDAwMSIgfSwgeyAiQEhAMDAwMSIgfSwgeyAiQUBAMDAwMSIgfSB9IH0sCiAJeyAuaWQgPSAiQ01JMDAwMSIsIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9LCB7ICJASEAwMDAxIiB9IH0gfSwKIAl7IC5pZCA9ICIiIH0KIH07CkBAIC0zMDQsNyArMzEyLDcgQEAKIAl1bnNpZ25lZCBpbnQgaWR4OwogCWludCBlcnI7CiAKLQlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiQ01JODMzMC9DM0QiKTsKKwlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAoYWNhcmQtPnR5cGUgPT0gQ01JODMyOSkgPyAiQ01JODMyOSIgOiAiQ01JODMzMC9DM0QiKTsKIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfY21pODMzMF9jb250cm9scyk7IGlkeCsrKSB7CiAJCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsCkBAIC0zMjksNiArMzM3LDkgQEAKIAlzdHJ1Y3QgcG5wX2RldiAqcGRldjsKIAlpbnQgZXJyOwogCisJLyogQ01JODMyOSBoYXMgYSBkZXZpY2Ugd2l0aCBJRCBBQEAwMDAxLCBDTUk4MzMwIGRvZXMgbm90ICovCisJYWNhcmQtPnR5cGUgPSAoaWQtPmRldnNbM10uaWRbMF0pID8gQ01JODMyOSA6IENNSTgzMzA7CisKIAlhY2FyZC0+Y2FwID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UoY2FyZCwgaWQtPmRldnNbMF0uaWQsIE5VTEwpOwogCWlmIChhY2FyZC0+Y2FwID09IE5VTEwpCiAJCXJldHVybiAtRUJVU1k7CkBAIC0zNDUsMzggKzM1Niw0NSBAQAogCiAJZXJyID0gcG5wX2FjdGl2YXRlX2RldihwZGV2KTsKIAlpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDTUk4MzMwL0MzRCBQblAgY29uZmlndXJlIGZhaWx1cmVcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJBRDE4NDggUG5QIGNvbmZpZ3VyZSBmYWlsdXJlXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJd3NzcG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMCk7CiAJd3NzZG1hW2Rldl0gPSBwbnBfZG1hKHBkZXYsIDApOwogCXdzc2lycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKLQlmbXBvcnRbZGV2XSA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDEpOworCWlmIChwbnBfcG9ydF9zdGFydChwZGV2LCAxKSkKKwkJZm1wb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAxKTsKIAogCS8qIGFsbG9jYXRlIFNCMTYgcmVzb3VyY2VzICovCiAJcGRldiA9IGFjYXJkLT5wbGF5OwogCiAJZXJyID0gcG5wX2FjdGl2YXRlX2RldihwZGV2KTsKIAlpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDTUk4MzMwL0MzRCAoU0IxNikgUG5QIGNvbmZpZ3VyZSBmYWlsdXJlXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiU0IxNiBQblAgY29uZmlndXJlIGZhaWx1cmVcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlzYnBvcnRbZGV2XSA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDApOwogCXNiZG1hOFtkZXZdID0gcG5wX2RtYShwZGV2LCAwKTsKIAlzYmRtYTE2W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDEpOwogCXNiaXJxW2Rldl0gPSBwbnBfaXJxKHBkZXYsIDApOworCS8qIE9uIENNSTgyMzksIHRoZSBPUEwzIHBvcnQgbWlnaHQgYmUgcHJlc2VudCBpbiBTQjE2IFBuUCByZXNvdXJjZXMgKi8KKwlpZiAoZm1wb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7CisJCWlmIChwbnBfcG9ydF9zdGFydChwZGV2LCAxKSkKKwkJCWZtcG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMSk7CisJCWVsc2UKKwkJCWZtcG9ydFtkZXZdID0gMHgzODg7CS8qIE9yIGhhcmR3aXJlZCAqLworCX0KIAogCS8qIGFsbG9jYXRlIE1QVS00MDEgcmVzb3VyY2VzICovCiAJcGRldiA9IGFjYXJkLT5tcHU7CiAKIAllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KHBkZXYpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIKLQkJCSAgICJDTUk4MzMwL0MzRCAoTVBVLTQwMSkgUG5QIGNvbmZpZ3VyZSBmYWlsdXJlXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoZXJyIDwgMCkKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiTVBVLTQwMSBQblAgY29uZmlndXJlIGZhaWx1cmU6IHdpbGwgYmUgZGlzYWJsZWRcbiIpOworCWVsc2UgeworCQltcHVwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKKwkJbXB1aXJxW2Rldl0gPSBwbnBfaXJxKHBkZXYsIDApOwogCX0KLQltcHVwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQltcHVpcnFbZGV2XSA9IHBucF9pcnEocGRldiwgMCk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKQEAgLTQzMCw5ICs0NDgsOSBAQAogCQlzbmRfY21pODMzMF9jYXB0dXJlX29wZW4KIAl9OwogCi0JaWYgKChlcnIgPSBzbmRfcGNtX25ldyhjYXJkLCAiQ01JODMzMCIsIDAsIDEsIDEsICZwY20pKSA8IDApCisJaWYgKChlcnIgPSBzbmRfcGNtX25ldyhjYXJkLCAoY2hpcC0+dHlwZSA9PSBDTUk4MzI5KSA/ICJDTUk4MzI5IiA6ICJDTUk4MzMwIiwgMCwgMSwgMSwgJnBjbSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlzdHJjcHkocGNtLT5uYW1lLCAiQ01JODMzMCIpOworCXN0cmNweShwY20tPm5hbWUsIChjaGlwLT50eXBlID09IENNSTgzMjkpID8gIkNNSTgzMjkiIDogIkNNSTgzMzAiKTsKIAlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CiAJCiAJLyogU0IxNiAqLwpAQCAtNTI3LDExICs1NDUsMTEgQEAKIAkJCSAgICAgd3NzZG1hW2Rldl0sIC0xLAogCQkJICAgICBXU1NfSFdfREVURUNULCAwLCAmYWNhcmQtPndzcyk7CiAJaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIihDTUk4MzMwKSBkZXZpY2UgYnVzeT8/XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIkFEMTg0OCBkZXZpY2UgYnVzeT8/XG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKGFjYXJkLT53c3MtPmhhcmR3YXJlICE9IFdTU19IV19DTUk4MzMwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICIoQ01JODMzMCkgbm90IGZvdW5kIGR1cmluZyBwcm9iZVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJBRDE4NDggbm90IGZvdW5kIGR1cmluZyBwcm9iZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNTQxLDExICs1NTksMTEgQEAKIAkJCQkgICAgc2JkbWE4W2Rldl0sCiAJCQkJICAgIHNiZG1hMTZbZGV2XSwKIAkJCQkgICAgU0JfSFdfQVVUTywgJmFjYXJkLT5zYikpIDwgMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiKFNCMTYpIGRldmljZSBidXN5Pz9cbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiU0IxNiBkZXZpY2UgYnVzeT8/XG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKGFjYXJkLT5zYi0+aGFyZHdhcmUgIT0gU0JfSFdfMTYpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIihTQjE2KSBub3QgZm91bmQgZHVyaW5nIHByb2JlXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIlNCMTYgbm90IGZvdW5kIGR1cmluZyBwcm9iZVxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC01ODUsOCArNjAzLDggQEAKIAkJCQltcHVwb3J0W2Rldl0pOwogCX0KIAotCXN0cmNweShjYXJkLT5kcml2ZXIsICJDTUk4MzMwL0MzRCIpOwotCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJDLU1lZGlhIENNSTgzMzAvQzNEIik7CisJc3RyY3B5KGNhcmQtPmRyaXZlciwgKGFjYXJkLT50eXBlID09IENNSTgzMjkpID8gIkNNSTgzMjkiIDogIkNNSTgzMzAvQzNEIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgKGFjYXJkLT50eXBlID09IENNSTgzMjkpID8gIkMtTWVkaWEgQ01JODMyOSIgOiAiQy1NZWRpYSBDTUk4MzMwL0MzRCIpOwogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVkLCBkbWEgJWQiLAogCQljYXJkLT5zaG9ydG5hbWUsCiAJCWFjYXJkLT53c3MtPnBvcnQsCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvbWlkaWJ1Zi5jIGIvc291bmQvb3NzL21pZGlidWYuYwppbmRleCBhNDBiZTBjLi43ODJiM2I4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvbWlkaWJ1Zi5jCisrKyBiL3NvdW5kL29zcy9taWRpYnVmLmMKQEAgLTEyNywxNSArMTI3LDE2IEBACiAJCWZvciAoZGV2ID0gMDsgZGV2IDwgbnVtX21pZGlzOyBkZXYrKykKIAkJCWlmIChtaWRpX2RldnNbZGV2XSAhPSBOVUxMICYmIG1pZGlfb3V0X2J1ZltkZXZdICE9IE5VTEwpCiAJCQl7Ci0JCQkJaW50IG9rID0gMTsKLQotCQkJCXdoaWxlIChEQVRBX0FWQUlMKG1pZGlfb3V0X2J1ZltkZXZdKSAmJiBvaykKKwkJCQl3aGlsZSAoREFUQV9BVkFJTChtaWRpX291dF9idWZbZGV2XSkpCiAJCQkJeworCQkJCQlpbnQgb2s7CiAJCQkJCWludCBjID0gbWlkaV9vdXRfYnVmW2Rldl0tPnF1ZXVlW21pZGlfb3V0X2J1ZltkZXZdLT5oZWFkXTsKIAogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrLGZsYWdzKTsvKiBHaXZlIHNvbWUgdGltZSB0byBvdGhlcnMgKi8KIAkJCQkJb2sgPSBtaWRpX2RldnNbZGV2XS0+b3V0cHV0YyhkZXYsIGMpOwogCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jaywgZmxhZ3MpOworCQkJCQlpZiAoIW9rKQorCQkJCQkJYnJlYWs7CiAJCQkJCW1pZGlfb3V0X2J1ZltkZXZdLT5oZWFkID0gKG1pZGlfb3V0X2J1ZltkZXZdLT5oZWFkICsgMSkgJSBNQVhfUVVFVUVfU0laRTsKIAkJCQkJbWlkaV9vdXRfYnVmW2Rldl0tPmxlbi0tOwogCQkJCX0KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy92d3NuZC5jIGIvc291bmQvb3NzL3Z3c25kLmMKaW5kZXggMTg3ZjcyNy4uNjcxMzExMCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3Z3c25kLmMKKysrIGIvc291bmQvb3NzL3Z3c25kLmMKQEAgLTYyOCw3ICs2MjgsNyBAQAogCUFTU0VSVCghKGJ1ZmZlcl9wYWRkciAmIDB4RkYpKTsKIAljaGFuLT5iYXNldmFsID0gKGJ1ZmZlcl9wYWRkciA+PiA4KSB8IDEgPDwgKDM3IC0gOCk7CiAKLQljaGFuLT5jZmd2YWwgPSAoIUxJX0NDRkdfTE9DSyB8CisJY2hhbi0+Y2ZndmFsID0gKChjaGFuLT5jZmd2YWwgJiB+TElfQ0NGR19MT0NLKSB8CiAJCQlTSElGVF9GSUVMRChkZXNjLT5hZDE4NDNfc2xvdCwgTElfQ0NGR19TTE9UKSB8CiAJCQlkZXNjLT5kaXJlY3Rpb24gfAogCQkJbW9kZSB8CkBAIC02MzgsOSArNjM4LDkgQEAKIAl0bWFzayA9IDEzIC0gZnJhZ3NoaWZ0OwkJLyogU2VlIExpdGhpdW0gRE1BIE5vdGVzIGFib3ZlLiAqLwogCUFTU0VSVChzaXplID49IDIgJiYgc2l6ZSA8PSA3KTsKIAlBU1NFUlQodG1hc2sgPj0gMSAmJiB0bWFzayA8PSA3KTsKLQljaGFuLT5jdGx2YWwgPSAoIUxJX0NDVExfUkVTRVQgfAorCWNoYW4tPmN0bHZhbCA9ICgoY2hhbi0+Y3RsdmFsICYgfkxJX0NDVExfUkVTRVQpIHwKIAkJCVNISUZUX0ZJRUxEKHNpemUsIExJX0NDVExfU0laRSkgfAotCQkJIUxJX0NDVExfRE1BX0VOQUJMRSB8CisJCQkoY2hhbi0+Y3RsdmFsICYgfkxJX0NDVExfRE1BX0VOQUJMRSkgfAogCQkJU0hJRlRfRklFTEQodG1hc2ssIExJX0NDVExfVE1BU0spIHwKIAkJCVNISUZUX0ZJRUxEKDAsIExJX0NDVExfVFBUUikpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IDc0OGY2YjcuLmZiNWVlM2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC0xMzUsMTEgKzEzNSwxMSBAQAogCiAKIGNvbmZpZyBTTkRfQVpUMzMyOAotCXRyaXN0YXRlICJBenRlY2ggQVpGMzMyOCAvIFBDSTE2OCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCXRyaXN0YXRlICJBenRlY2ggQVpGMzMyOCAvIFBDSTE2OCIKIAlzZWxlY3QgU05EX09QTDNfTElCCiAJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAogCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9SQVdNSURJCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEF6dGVjaCBBWkYzMzI4IChQQ0kxNjgpCiAJICBzb3VuZGNhcmRzLgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCmluZGV4IDc2ZDc2YzAuLmI0NThkMjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYworKysgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKQEAgLTQ3OCw0NSArNDc4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPREVDX1JFU0VUCi0KLXN0YXRpYyBpbnQgc25kX2FsaV9yZXNldF9jb2RlYyhzdHJ1Y3Qgc25kX2FsaSAqY29kZWMpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7Ci0JdW5zaWduZWQgY2hhciBiVmFsOwotCXVuc2lnbmVkIGludCAgIGR3VmFsOwotCXVuc2lnbmVkIHNob3J0IHdDb3VudCwgd1JlZzsKLQotCXBjaV9kZXYgPSBjb2RlYy0+cGNpX20xNTMzOwotCQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2lfZGV2LCAweDdjLCAmZHdWYWwpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpX2RldiwgMHg3YywgZHdWYWwgfCAweDA4MDAwMDAwKTsKLQl1ZGVsYXkoNTAwMCk7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9kZXYsIDB4N2MsICZkd1ZhbCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfZGV2LCAweDdjLCBkd1ZhbCAmIDB4ZjdmZmZmZmYpOwotCXVkZWxheSg1MDAwKTsKLQotCWJWYWwgPSBpbmIoQUxJX1JFRyhjb2RlYyxBTElfU0NUUkwpKTsKLQliVmFsIHw9IDB4MDI7Ci0Jb3V0YihBTElfUkVHKGNvZGVjLEFMSV9TQ1RSTCksYlZhbCk7Ci0JdWRlbGF5KDUwMDApOwotCWJWYWwgPSBpbmIoQUxJX1JFRyhjb2RlYyxBTElfU0NUUkwpKTsKLQliVmFsICY9IDB4ZmQ7Ci0Jb3V0YihBTElfUkVHKGNvZGVjLEFMSV9TQ1RSTCksYlZhbCk7Ci0JdWRlbGF5KDE1MDAwKTsKLQotCXdDb3VudCA9IDIwMDsKLQl3aGlsZSAod0NvdW50LS0pIHsKLQkJd1JlZyA9IHNuZF9hbGlfY29kZWNfcmVhZChjb2RlYy0+YWM5NywgQUM5N19QT1dFUkRPV04pOwotCQlpZiAoKHdSZWcgJiAweDAwMGYpID09IDB4MDAwZikKLQkJCXJldHVybiAwOwotCQl1ZGVsYXkoNTAwMCk7Ci0JfQotCXJldHVybiAtMTsKLX0KLQotI2VuZGlmCi0KIC8qCiAgKiAgQUxJIDU0NTEgQ29udHJvbGxlcgogICovCkBAIC01NjEsMjIgKzUyMiw2IEBACiAJb3V0bChnYywgQUxJX1JFRyhjb2RlYywgQUxJX0dDX0NJUikpOwogfQogCi0jaWYgMCAvKiBub3QgdXNlZCAqLwotc3RhdGljIHZvaWQgc25kX2FsaV9lbmFibGVfdm9pY2VfaXJxKHN0cnVjdCBzbmRfYWxpICpjb2RlYywKLQkJCQkgICAgIHVuc2lnbmVkIGludCBjaGFubmVsKQotewotCXVuc2lnbmVkIGludCBtYXNrOwotCXN0cnVjdCBzbmRfYWxpX2NoYW5uZWxfY29udHJvbCAqcGNocmVncyA9ICYoY29kZWMtPmNocmVncyk7Ci0KLQlzbmRfYWxpX3ByaW50aygiZW5hYmxlX3ZvaWNlX2lycSBjaGFubmVsPSVkXG4iLGNoYW5uZWwpOwotCQotCW1hc2sgPSAxIDw8IChjaGFubmVsICYgMHgxZik7Ci0JcGNocmVncy0+ZGF0YS5haW50ZW4gID0gaW5sKEFMSV9SRUcoY29kZWMsIHBjaHJlZ3MtPnJlZ3MuYWludGVuKSk7Ci0JcGNocmVncy0+ZGF0YS5haW50ZW4gfD0gbWFzazsKLQlvdXRsKHBjaHJlZ3MtPmRhdGEuYWludGVuLCBBTElfUkVHKGNvZGVjLCBwY2hyZWdzLT5yZWdzLmFpbnRlbikpOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIHNuZF9hbGlfZGlzYWJsZV92b2ljZV9pcnEoc3RydWN0IHNuZF9hbGkgKmNvZGVjLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsKQogewpAQCAtNjc3LDE2ICs2MjIsNiBAQAogCX0KIH0KIAotI2lmIDAgLyogbm90IHVzZWQgKi8KLXN0YXRpYyB2b2lkIHNuZF9hbGlfc3RhcnRfdm9pY2Uoc3RydWN0IHNuZF9hbGkgKmNvZGVjLCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKLXsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IDEgPDwgKGNoYW5uZWwgJiAweDFmKTsKLQkKLQlzbmRfYWxpX3ByaW50aygic3RhcnRfdm9pY2U6IGNoYW5uZWw9JWRcbiIsY2hhbm5lbCk7Ci0Jb3V0bChtYXNrLCBBTElfUkVHKGNvZGVjLGNvZGVjLT5jaHJlZ3MucmVncy5zdGFydCkpOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIHNuZF9hbGlfc3RvcF92b2ljZShzdHJ1Y3Qgc25kX2FsaSAqY29kZWMsIHVuc2lnbmVkIGludCBjaGFubmVsKQogewogCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCAoY2hhbm5lbCAmIDB4MWYpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguYyBiL3NvdW5kL3BjaS9henQzMzI4LmMKaW5kZXggZjI5MGJjNS4uODQ1MWEwMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F6dDMzMjguYworKysgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBhenQzMzI4LmMgLSBkcml2ZXIgZm9yIEF6dGVjaCBBWkYzMzI4IGJhc2VkIHNvdW5kY2FyZHMgKGUuZy4gUENJMTY4KS4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUgLSAyMDA4IGJ5IEFuZHJlYXMgTW9ociA8YW5kaSBBVCBsaXNhcy5kZT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUgLSAyMDA5IGJ5IEFuZHJlYXMgTW9ociA8YW5kaSBBVCBsaXNhcy5kZT4KICAqCiAgKiAgRnJhbWV3b3JrIGJvcnJvd2VkIGZyb20gQmFydCBIYXJ0Z2VycydzIGFsczQwMDAuYy4KICAqICBEcml2ZXIgZGV2ZWxvcGVkIG9uIFBDSTE2OCBBUChXKSB2ZXJzaW9uIChQQ0kgcmV2LiAxMCwgc3Vic3lzdGVtIElEIDE4MDEpLApAQCAtMTAsNiArMTAsMTMgQEAKICAqICBQQ0kxNjggQS9BUCwgc3ViIElEIDgwMDAKICAqICBQbGVhc2UgZ2l2ZSBtZSBmZWVkYmFjayBpbiBjYXNlIHlvdSB0cnkgbXkgZHJpdmVyIHdpdGggb25lIG9mIHRoZXNlISEKICAqCisgKiAgS2V5d29yZHM6IFdpbmRvd3MgWFAgVmlzdGEgMTY4bnQ0LTEyNS56aXAgMTY4d2luOTUtMTI1LnppcCBQQ0kgMTY4IGRvd25sb2FkCisgKiAgKFhQL1Zpc3RhIGRvIG5vdCBzdXBwb3J0IHRoaXMgY2FyZCBhdCBhbGwgYnV0IGV2ZXJ5IExpbnV4IGRpc3RyaWJ1dGlvbgorICogICBoYXMgdmVyeSBnb29kIHN1cHBvcnQgb3V0IG9mIHRoZSBib3g7CisgKiAgIGp1c3QgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJpZ2h0IHBlb3BsZSBoaXQgdGhpcyBhbmQgZ2V0IHRvIGtub3cgdGhhdCwKKyAqICAgZGVzcGl0ZSB0aGUgaGlnaCBsZXZlbCBvZiBJbnRlcm5ldCBpZ25vcmFuY2UgLSBhcyB1c3VhbCA6LVAgLQorICogICBhYm91dCB2ZXJ5IGdvb2Qgc3VwcG9ydCBmb3IgdGhpcyBjYXJkIC0gb24gTGludXghKQorICoKICAqIEdQTCBMSUNFTlNFCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNzEsMTAgKzc4LDExIEBACiAgKiAgLSBidWlsdC1pbiBHZW5lcmFsIERpcmVjdFggdGltZXIgaGF2aW5nIGEgMjAgYml0cyBjb3VudGVyCiAgKiAgICB3aXRoIDF1cyByZXNvbHV0aW9uIChzZWUgYmVsb3chKQogICogIC0gSTJTIHNlcmlhbCBvdXRwdXQgcG9ydCBmb3IgZXh0ZXJuYWwgREFDCisgKiAgICBbRklYTUU6IDMuM1Ygb3IgNVYgbGV2ZWw/IG1heGltdW0gcmF0ZSBpcyA2Ni4ya0h6IHJpZ2h0P10KICAqICAtIHN1cHBvcnRzIDMzTUh6IFBDSSBzcGVjIDIuMSwgUENJIHBvd2VyIG1hbmFnZW1lbnQgMS4wLCBjb21wbGlhbnQgd2l0aCBBQ1BJCiAgKiAgLSBzdXBwb3J0cyBoYXJkd2FyZSB2b2x1bWUgY29udHJvbAogICogIC0gc2luZ2xlIGNoaXAgbG93IGNvc3Qgc29sdXRpb24gKDEyOCBwaW4gUUZQKQotICogIC0gc3VwcG9ydHMgcHJvZ3JhbW1hYmxlIFN1Yi12ZW5kb3IgYW5kIFN1Yi1zeXN0ZW0gSUQKKyAqICAtIHN1cHBvcnRzIHByb2dyYW1tYWJsZSBTdWItdmVuZG9yIGFuZCBTdWItc3lzdGVtIElEIFsyNEMwMiBTRUVQUk9NIGNoaXBdCiAgKiAgICByZXF1aXJlZCBmb3IgTWljcm9zb2Z0J3MgbG9nbyBjb21wbGlhbmNlIChGSVhNRTogd2hlcmU/KQogICogICAgQXQgbGVhc3QgdGhlIFRyaWRlbnQgNEQgV2F2ZSBEWCBoYXMgb25lIGJpdCBzb21ld2hlcmUKICAqICAgIHRvIGVuYWJsZSB3cml0ZXMgdG8gUENJIHN1YnN5c3RlbSBWSUQgcmVnaXN0ZXJzLCB0aGF0IHNob3VsZCBiZSBpdC4KQEAgLTgyLDYgKzkwLDcgQEAKICAqICAgIHNvbWUgY3VzdG9tIGRhdGEgc3RhcnRpbmcgYXQgMHg4MC4gV2hhdCBraW5kIG9mIGNvbmZpZyBzZXR0aW5ncwogICogICAgYXJlIGxvY2F0ZWQgaW4gb3VyIGV4dGVuZGVkIFBDSSBzcGFjZSBhbnl3YXk/PwogICogIC0gUENJMTY4IEFQKFcpIGNhcmQ6IHBvd2VyIGFtcGxpZmllciB3aXRoIDQgV2F0dHMvY2hhbm5lbCBhdCA0IE9obXMKKyAqICAgIFtUREExNTE3UCBjaGlwXQogICoKICAqICBOb3RlIHRoYXQgdGhpcyBkcml2ZXIgbm93IGlzIGFjdHVhbGx5ICpiZXR0ZXIqIHRoYW4gdGhlIFdpbmRvd3MgZHJpdmVyLAogICogIHNpbmNlIGl0IGFkZGl0aW9uYWxseSBzdXBwb3J0cyB0aGUgY2FyZCdzIDFNSHogRGlyZWN0WCB0aW1lciAtIGp1c3QgdHJ5CkBAIC0xNDYsMTAgKzE1NSwxNSBAQAogICogICAgdG8gcmVhZCB0aGUgRGlnaXRhbCBFbmhhbmNlZCBHYW1lIFBvcnQuIE5vdCBzdXJlIHdoZXRoZXIgaXQgaXMgZml4YWJsZS4KICAqCiAgKiBUT0RPCisgKiAgLSB1c2UgUENJX1ZERVZJQ0UKKyAqICAtIHZlcmlmeSBkcml2ZXIgc3RhdHVzIG9uIHg4Nl82NAorICogIC0gdGVzdCBtdWx0aS1jYXJkIGRyaXZlciBvcGVyYXRpb24KKyAqICAtIChhYil1c2UgMU1IeiBEaXJlY3RYIHRpbWVyIGFzIGtlcm5lbCBjbG9ja3NvdXJjZQogICogIC0gdGVzdCBNUFU0MDEgTUlESSBwbGF5YmFjayBldGMuCiAgKiAgLSBhZGQgbW9yZSBwb3dlciBtaWNyby1tYW5hZ2VtZW50IChkaXNhYmxlIHZhcmlvdXMgdW5pdHMgb2YgdGhlIGNhcmQKLSAqICAgIGFzIGxvbmcgYXMgdGhleSdyZSB1bnVzZWQpLiBIb3dldmVyIHRoaXMgcmVxdWlyZXMgbW9yZSBJL08gcG9ydHMgd2hpY2ggSQotICogICAgaGF2ZW4ndCBmaWd1cmVkIG91dCB5ZXQgYW5kIHdoaWNoIHRodXMgbWlnaHQgbm90IGV2ZW4gZXhpc3QuLi4KKyAqICAgIGFzIGxvbmcgYXMgdGhleSdyZSB1bnVzZWQsIHRvIGltcHJvdmUgYXVkaW8gcXVhbGl0eSBhbmQgc2F2ZSBwb3dlcikuCisgKiAgICBIb3dldmVyIHRoaXMgcmVxdWlyZXMgbW9yZSBJL08gcG9ydHMgd2hpY2ggSSBoYXZlbid0IGZpZ3VyZWQgb3V0IHlldAorICogICAgYW5kIHdoaWNoIHRodXMgbWlnaHQgbm90IGV2ZW4gZXhpc3QuLi4KICAqICAgIFRoZSBzdGFuZGFyZCBzdXNwZW5kL3Jlc3VtZSBmdW5jdGlvbmFsaXR5IGNvdWxkIHByb2JhYmx5IG1ha2UgdXNlIG9mCiAgKiAgICBzb21lIGltcHJvdmVtZW50LCB0b28uLi4KICAqICAtIGZpZ3VyZSBvdXQgd2hhdCBhbGwgdW5rbm93biBwb3J0IGJpdHMgYXJlIHJlc3BvbnNpYmxlIGZvcgpAQCAtMTg1LDI1ICsxOTksNDYgQEAKICNkZWZpbmUgU1VQUE9SVF9HQU1FUE9SVCAxCiAjZW5kaWYKIAorLyogPT09IERlYnVnIHNldHRpbmdzID09PQorICBGdXJ0aGVyIGRpYWdub3N0aWMgZnVuY3Rpb25hbGl0eSB0aGFuIHRoZSBzZXR0aW5ncyBiZWxvdworICBkb2VzIG5vdCBuZWVkIHRvIGJlIHByb3ZpZGVkLCBzaW5jZSBvbmUgY2FuIGVhc2lseSB3cml0ZSBhIGJhc2ggc2NyaXB0CisgIHRvIGR1bXAgdGhlIGNhcmQncyBJL08gcG9ydHMgKHRob3NlIGxpc3RlZCBpbiBsc3BjaSAtdiAtdik6CisgIGZ1bmN0aW9uIGR1bXAoKQorICB7CisgICAgbG9jYWwgZGVzY3I9JDE7IGxvY2FsIGFkZHI9JDI7IGxvY2FsIGNvdW50PSQzCisKKyAgICBlY2hvICIke2Rlc2NyfTogJHtjb3VudH0gQCAke2FkZHJ9OiIKKyAgICBkZCBpZj0vZGV2L3BvcnQgc2tpcD0kWyR7YWRkcn1dIGNvdW50PSR7Y291bnR9IGJzPTEgMj4vZGV2L251bGx8IGhleGR1bXAgLUMKKyAgfQorICBhbmQgdGhlbiB1c2Ugc29tZXRoaW5nIGxpa2UKKyAgImR1bXAgam95MjAwIDB4MjAwIDgiLCAiZHVtcCBtcHUzODggMHgzODggNCIsICJkdW1wIGpveSAweGI0MDAgOCIsCisgICJkdW1wIGNvZGVjMDAgMHhhODAwIDMyIiwgImR1bXAgbWl4ZXIgMHhiODAwIDY0IiwgImR1bXAgc3ludGggMHhiYzAwIDgiLAorICBwb3NzaWJseSB3aXRoaW4gYSAid2hpbGUgdHJ1ZTsgZG8gLi4uIHNsZWVwIDE7IGRvbmUiIGxvb3AuCisgIFR3ZWFraW5nIHBvcnRzIGNvdWxkIGJlIGRvbmUgdXNpbmcKKyAgVkFMU1RSSU5HPSJgcHJpbnRmICIlMDJ4IiAkdmFsdWVgIgorICBwcmludGYgIlx4IiIkVkFMU1RSSU5HInxkZCBvZj0vZGV2L3BvcnQgc2Vlaz0kWyR7YWRkcn1dIGJzPTEgMj4vZGV2L251bGwKKyovCisKICNkZWZpbmUgREVCVUdfTUlTQwkwCiAjZGVmaW5lIERFQlVHX0NBTExTCTAKICNkZWZpbmUgREVCVUdfTUlYRVIJMAotI2RlZmluZSBERUJVR19QTEFZX1JFQwkwCisjZGVmaW5lIERFQlVHX0NPREVDCTAKICNkZWZpbmUgREVCVUdfSU8JMAogI2RlZmluZSBERUJVR19USU1FUgkwCiAjZGVmaW5lIERFQlVHX0dBTUUJMAorI2RlZmluZSBERUJVR19QTQkwCiAjZGVmaW5lIE1JWEVSX1RFU1RJTkcJMAogCiAjaWYgREVCVUdfTUlTQwotI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdtaXNjKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSIGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdtaXNjKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0LCAjI2FyZ3MpCiAjZWxzZQogI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdtaXNjKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCiAjaWYgREVCVUdfQ0FMTFMKICNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnY2FsbHMoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoZm9ybWF0LCAjI2FyZ3MpCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpIHByaW50ayhLRVJOX0VSUiAiLS0+ICVzXG4iLCBfX2Z1bmNfXykKLSNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnY2FsbGxlYXZlKCkgcHJpbnRrKEtFUk5fRVJSICI8LS0gJXNcbiIsIF9fZnVuY19fKQorI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdjYWxsZW50ZXIoKSBwcmludGsoS0VSTl9ERUJVRyAiLS0+ICVzXG4iLCBfX2Z1bmNfXykKKyNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnY2FsbGxlYXZlKCkgcHJpbnRrKEtFUk5fREVCVUcgIjwtLSAlc1xuIiwgX19mdW5jX18pCiAjZWxzZQogI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdjYWxscyhmb3JtYXQsIGFyZ3MuLi4pCiAjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpCkBAIC0yMTYsMTAgKzI1MSwxMCBAQAogI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdtaXhlcihmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAotI2lmIERFQlVHX1BMQVlfUkVDCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BsYXkoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKKyNpZiBERUJVR19DT0RFQworI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdjb2RlYyhmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgc25kX2F6ZjMzMjhfZGJncGxheShmb3JtYXQsIGFyZ3MuLi4pCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ2NvZGVjKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCiAjaWYgREVCVUdfTUlTQwpAQCAtMjM0LDYgKzI2OSwxMiBAQAogI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdnYW1lKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCisjaWYgREVCVUdfUE0KKyNkZWZpbmUgc25kX2F6ZjMzMjhfZGJncG0oZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKKyNlbHNlCisjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3BtKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLwogbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBBWkYzMzI4IHNvdW5kY2FyZC4iKTsKQEAgLTI1MCwyMiArMjkxLDIzIEBACiBtb2R1bGVfcGFyYW0oc2VxdGltZXJfc2NhbGluZywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Moc2VxdGltZXJfc2NhbGluZywgIlNldCAxMDI0MDAwSHogc2VxdWVuY2VyIHRpbWVyIHNjYWxlIGZhY3RvciAobG9ja3VwIGRhbmdlciEpLiBEZWZhdWx0IDEyOC4iKTsKIAotc3RydWN0IHNuZF9hemYzMzI4X2F1ZGlvX3N0cmVhbSB7CitzdHJ1Y3Qgc25kX2F6ZjMzMjhfY29kZWNfZGF0YSB7CisJdW5zaWduZWQgbG9uZyBpb19iYXNlOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotCWludCBlbmFibGVkOwotCWludCBydW5uaW5nOwotCXVuc2lnbmVkIGxvbmcgcG9ydGJhc2U7CisJYm9vbCBydW5uaW5nOworCWNvbnN0IGNoYXIgKm5hbWU7CiB9OwogCi1lbnVtIHNuZF9hemYzMzI4X3N0cmVhbV9pbmRleCB7Ci0gIEFaRl9QTEFZQkFDSyA9IDAsCi0gIEFaRl9DQVBUVVJFID0gMSwKK2VudW0gc25kX2F6ZjMzMjhfY29kZWNfdHlwZSB7CisgIEFaRl9DT0RFQ19QTEFZQkFDSyA9IDAsCisgIEFaRl9DT0RFQ19DQVBUVVJFID0gMSwKKyAgQVpGX0NPREVDX0kyU19PVVQgPSAyLAogfTsKIAogc3RydWN0IHNuZF9hemYzMzI4IHsKIAkvKiBvZnRlbi11c2VkIGZpZWxkcyB0b3dhcmRzIGJlZ2lubmluZywgdGhlbiBncm91cGVkICovCiAKLQl1bnNpZ25lZCBsb25nIGNvZGVjX2lvOyAvKiB1c3VhbGx5IDB4YjAwMCwgc2l6ZSAxMjggKi8KKwl1bnNpZ25lZCBsb25nIGN0cmxfaW87IC8qIHVzdWFsbHkgMHhiMDAwLCBzaXplIDEyOCAqLwogCXVuc2lnbmVkIGxvbmcgZ2FtZV9pbzsgIC8qIHVzdWFsbHkgMHhiNDAwLCBzaXplIDggKi8KIAl1bnNpZ25lZCBsb25nIG1wdV9pbzsgICAvKiB1c3VhbGx5IDB4YjgwMCwgc2l6ZSA0ICovCiAJdW5zaWduZWQgbG9uZyBvcGwzX2lvOyAvKiB1c3VhbGx5IDB4YmMwMCwgc2l6ZSA4ICovCkBAIC0yNzUsMTUgKzMxNywxNyBAQAogCiAJc3RydWN0IHNuZF90aW1lciAqdGltZXI7CiAKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwotCXN0cnVjdCBzbmRfYXpmMzMyOF9hdWRpb19zdHJlYW0gYXVkaW9fc3RyZWFtWzJdOworCXN0cnVjdCBzbmRfcGNtICpwY21bM107CisKKwkvKiBwbGF5YmFjaywgcmVjb3JkaW5nIGFuZCBJMlMgb3V0IGNvZGVjcyAqLworCXN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhIGNvZGVjc1szXTsKIAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwogCiAjaWZkZWYgU1VQUE9SVF9HQU1FUE9SVAogCXN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQ7Ci0JaW50IGF4ZXNbNF07CisJdTE2IGF4ZXNbNF07CiAjZW5kaWYKIAogCXN0cnVjdCBwY2lfZGV2ICpwY2k7CkBAIC0yOTMsMTYgKzMzNywxNiBAQAogCSAqIElmIHdlIG5lZWQgdG8gYWRkIG1vcmUgcmVnaXN0ZXJzIGhlcmUsIHRoZW4gd2UgbWlnaHQgdHJ5IHRvIGZvbGQgdGhpcwogCSAqIGludG8gc29tZSB0cmFuc3BhcmVudCBjb21iaW5lZCBzaGFkb3cgcmVnaXN0ZXIgaGFuZGxpbmcgd2l0aAogCSAqIENPTkZJR19QTSByZWdpc3RlciBzdG9yYWdlIGJlbG93LCBidXQgdGhhdCdzIHNsaWdodGx5IGRpZmZpY3VsdC4gKi8KLQl1MTYgc2hhZG93X3JlZ19jb2RlY182QUg7CisJdTE2IHNoYWRvd19yZWdfY3RybF82QUg7CiAKICNpZmRlZiBDT05GSUdfUE0KIAkvKiByZWdpc3RlciB2YWx1ZSBjb250YWluZXJzIGZvciBwb3dlciBtYW5hZ2VtZW50Ci0JICogTm90ZTogbm90IGFsd2F5cyBmdWxsIEkvTyByYW5nZSBwcmVzZXJ2ZWQgKGp1c3QgbGlrZSBXaW4gZHJpdmVyISkgKi8KLQl1MTYgc2F2ZWRfcmVnc19jb2RlY1tBWkZfSU9fU0laRV9DT0RFQ19QTSAvIDJdOwotCXUxNiBzYXZlZF9yZWdzX2dhbWUgW0FaRl9JT19TSVpFX0dBTUVfUE0gLyAyXTsKLQl1MTYgc2F2ZWRfcmVnc19tcHUgIFtBWkZfSU9fU0laRV9NUFVfUE0gLyAyXTsKLQl1MTYgc2F2ZWRfcmVnc19vcGwzIFtBWkZfSU9fU0laRV9PUEwzX1BNIC8gMl07Ci0JdTE2IHNhdmVkX3JlZ3NfbWl4ZXJbQVpGX0lPX1NJWkVfTUlYRVJfUE0gLyAyXTsKKwkgKiBOb3RlOiBub3QgYWx3YXlzIGZ1bGwgSS9PIHJhbmdlIHByZXNlcnZlZCAoc2ltaWxhciB0byBXaW4gZHJpdmVyISkgKi8KKwl1MzIgc2F2ZWRfcmVnc19jdHJsW0FaRl9BTElHTihBWkZfSU9fU0laRV9DVFJMX1BNKSAvIDRdOworCXUzMiBzYXZlZF9yZWdzX2dhbWVbQVpGX0FMSUdOKEFaRl9JT19TSVpFX0dBTUVfUE0pIC8gNF07CisJdTMyIHNhdmVkX3JlZ3NfbXB1W0FaRl9BTElHTihBWkZfSU9fU0laRV9NUFVfUE0pIC8gNF07CisJdTMyIHNhdmVkX3JlZ3Nfb3BsM1tBWkZfQUxJR04oQVpGX0lPX1NJWkVfT1BMM19QTSkgLyA0XTsKKwl1MzIgc2F2ZWRfcmVnc19taXhlcltBWkZfQUxJR04oQVpGX0lPX1NJWkVfTUlYRVJfUE0pIC8gNF07CiAjZW5kaWYKIH07CiAKQEAgLTMxNiw3ICszNjAsNyBAQAogCiAKIHN0YXRpYyBpbnQKLXNuZF9hemYzMzI4X2lvX3JlZ19zZXRiKHVuc2lnbmVkIHJlZywgdTggbWFzaywgaW50IGRvX3NldCkKK3NuZF9hemYzMzI4X2lvX3JlZ19zZXRiKHVuc2lnbmVkIHJlZywgdTggbWFzaywgYm9vbCBkb19zZXQpCiB7CiAJdTggcHJldiA9IGluYihyZWcpLCBuZXc7CiAKQEAgLTMzMSwzOSArMzc1LDcyIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotc25kX2F6ZjMzMjhfY29kZWNfb3V0Yihjb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsIHVuc2lnbmVkIHJlZywgdTggdmFsdWUpCitzbmRfYXpmMzMyOF9jb2RlY19vdXRiKGNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhICpjb2RlYywKKwkJICAgICAgIHVuc2lnbmVkIHJlZywKKwkJICAgICAgIHU4IHZhbHVlCispCiB7Ci0Jb3V0Yih2YWx1ZSwgY2hpcC0+Y29kZWNfaW8gKyByZWcpOworCW91dGIodmFsdWUsIGNvZGVjLT5pb19iYXNlICsgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSB1OAotc25kX2F6ZjMzMjhfY29kZWNfaW5iKGNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCwgdW5zaWduZWQgcmVnKQorc25kX2F6ZjMzMjhfY29kZWNfaW5iKGNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhICpjb2RlYywgdW5zaWduZWQgcmVnKQogewotCXJldHVybiBpbmIoY2hpcC0+Y29kZWNfaW8gKyByZWcpOworCXJldHVybiBpbmIoY29kZWMtPmlvX2Jhc2UgKyByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXNuZF9hemYzMzI4X2NvZGVjX291dHcoY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLCB1bnNpZ25lZCByZWcsIHUxNiB2YWx1ZSkKK3NuZF9hemYzMzI4X2NvZGVjX291dHcoY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4X2NvZGVjX2RhdGEgKmNvZGVjLAorCQkgICAgICAgdW5zaWduZWQgcmVnLAorCQkgICAgICAgdTE2IHZhbHVlCispCiB7Ci0Jb3V0dyh2YWx1ZSwgY2hpcC0+Y29kZWNfaW8gKyByZWcpOworCW91dHcodmFsdWUsIGNvZGVjLT5pb19iYXNlICsgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSB1MTYKLXNuZF9hemYzMzI4X2NvZGVjX2ludyhjb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsIHVuc2lnbmVkIHJlZykKK3NuZF9hemYzMzI4X2NvZGVjX2ludyhjb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjhfY29kZWNfZGF0YSAqY29kZWMsIHVuc2lnbmVkIHJlZykKIHsKLQlyZXR1cm4gaW53KGNoaXAtPmNvZGVjX2lvICsgcmVnKTsKKwlyZXR1cm4gaW53KGNvZGVjLT5pb19iYXNlICsgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1zbmRfYXpmMzMyOF9jb2RlY19vdXRsKGNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCwgdW5zaWduZWQgcmVnLCB1MzIgdmFsdWUpCitzbmRfYXpmMzMyOF9jb2RlY19vdXRsKGNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhICpjb2RlYywKKwkJICAgICAgIHVuc2lnbmVkIHJlZywKKwkJICAgICAgIHUzMiB2YWx1ZQorKQogewotCW91dGwodmFsdWUsIGNoaXAtPmNvZGVjX2lvICsgcmVnKTsKKwlvdXRsKHZhbHVlLCBjb2RlYy0+aW9fYmFzZSArIHJlZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyCi1zbmRfYXpmMzMyOF9jb2RlY19pbmwoY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLCB1bnNpZ25lZCByZWcpCitzbmRfYXpmMzMyOF9jb2RlY19pbmwoY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4X2NvZGVjX2RhdGEgKmNvZGVjLCB1bnNpZ25lZCByZWcpCiB7Ci0JcmV0dXJuIGlubChjaGlwLT5jb2RlY19pbyArIHJlZyk7CisJcmV0dXJuIGlubChjb2RlYy0+aW9fYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc25kX2F6ZjMzMjhfY3RybF9vdXRiKGNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCwgdW5zaWduZWQgcmVnLCB1OCB2YWx1ZSkKK3sKKwlvdXRiKHZhbHVlLCBjaGlwLT5jdHJsX2lvICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1OAorc25kX2F6ZjMzMjhfY3RybF9pbmIoY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLCB1bnNpZ25lZCByZWcpCit7CisJcmV0dXJuIGluYihjaGlwLT5jdHJsX2lvICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzbmRfYXpmMzMyOF9jdHJsX291dHcoY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLCB1bnNpZ25lZCByZWcsIHUxNiB2YWx1ZSkKK3sKKwlvdXR3KHZhbHVlLCBjaGlwLT5jdHJsX2lvICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzbmRfYXpmMzMyOF9jdHJsX291dGwoY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLCB1bnNpZ25lZCByZWcsIHUzMiB2YWx1ZSkKK3sKKwlvdXRsKHZhbHVlLCBjaGlwLT5jdHJsX2lvICsgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC00MDQsMTMgKzQ4MSwxMyBAQAogCiAjZGVmaW5lIEFaRl9NVVRFX0JJVCAweDgwCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBib29sCiBzbmRfYXpmMzMyOF9taXhlcl9zZXRfbXV0ZShjb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsCi0JCQkgICB1bnNpZ25lZCByZWcsIGludCBkb19tdXRlCisJCQkgICB1bnNpZ25lZCByZWcsIGJvb2wgZG9fbXV0ZQogKQogewogCXVuc2lnbmVkIGxvbmcgcG9ydGJhc2UgPSBjaGlwLT5taXhlcl9pbyArIHJlZyArIDE7Ci0JaW50IHVwZGF0ZWQ7CisJYm9vbCB1cGRhdGVkOwogCiAJLyogdGhlIG11dGUgYml0IGlzIG9uIHRoZSAqc2Vjb25kKiAoaS5lLiByaWdodCkgcmVnaXN0ZXIgb2YgYQogCSAqIGxlZnQvcmlnaHQgY2hhbm5lbCBzZXR0aW5nICovCkBAIC01NjksNyArNjQ2LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IGF6ZjMzMjhfbWl4ZXJfcmVnIHJlZzsKLQl1bnNpZ25lZCBpbnQgb3JlZywgdmFsOworCXUxNiBvcmVnLCB2YWw7CiAKIAlzbmRfYXpmMzMyOF9kYmdjYWxsZW50ZXIoKTsKIAlzbmRfYXpmMzMyOF9taXhlcl9yZWdfZGVjb2RlKCZyZWcsIGtjb250cm9sLT5wcml2YXRlX3ZhbHVlKTsKQEAgLTYwMCw3ICs2NzcsNyBAQAogewogCXN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgYXpmMzMyOF9taXhlcl9yZWcgcmVnOwotCXVuc2lnbmVkIGludCBvcmVnLCBucmVnLCB2YWw7CisJdTE2IG9yZWcsIG5yZWcsIHZhbDsKIAogCXNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpOwogCXNuZF9hemYzMzI4X21peGVyX3JlZ19kZWNvZGUoJnJlZywga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUpOwpAQCAtNzA5LDcgKzc4Niw3IEBACiB7CiAgICAgICAgIHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgYXpmMzMyOF9taXhlcl9yZWcgcmVnOwotCXVuc2lnbmVkIGludCBvcmVnLCBucmVnLCB2YWw7CisJdTE2IG9yZWcsIG5yZWcsIHZhbDsKIAogCXNuZF9hemYzMzI4X21peGVyX3JlZ19kZWNvZGUoJnJlZywga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUpOwogCW9yZWcgPSBzbmRfYXpmMzMyOF9taXhlcl9pbncoY2hpcCwgcmVnLnJlZyk7CkBAIC04NjcsMTQgKzk0NCwxNSBAQAogCiBzdGF0aWMgdm9pZAogc25kX2F6ZjMzMjhfY29kZWNfc2V0Zm10KHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCwKLQkJCSAgICAgICB1bnNpZ25lZCByZWcsCisJCQkgICAgICAgZW51bSBzbmRfYXpmMzMyOF9jb2RlY190eXBlIGNvZGVjX3R5cGUsCiAJCQkgICAgICAgZW51bSBhemZfZnJlcV90IGJpdHJhdGUsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGZvcm1hdF93aWR0aCwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbHMKICkKIHsKLQl1MTYgdmFsID0gMHhmZjAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4X2NvZGVjX2RhdGEgKmNvZGVjID0gJmNoaXAtPmNvZGVjc1tjb2RlY190eXBlXTsKKwl1MTYgdmFsID0gMHhmZjAwOwogCiAJc25kX2F6ZjMzMjhfZGJnY2FsbGVudGVyKCk7CiAJc3dpdGNoIChiaXRyYXRlKSB7CkBAIC05MTcsNyArOTk1LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAogCS8qIHNldCBiaXRyYXRlL2Zvcm1hdCAqLwotCXNuZF9hemYzMzI4X2NvZGVjX291dHcoY2hpcCwgcmVnLCB2YWwpOworCXNuZF9hemYzMzI4X2NvZGVjX291dHcoY29kZWMsIElEWF9JT19DT0RFQ19TT1VOREZPUk1BVCwgdmFsKTsKIAogCS8qIGNoYW5naW5nIHRoZSBiaXRyYXRlL2Zvcm1hdCBzZXR0aW5ncyBzd2l0Y2hlcyBvZmYgdGhlCiAJICogYXVkaW8gb3V0cHV0IHdpdGggYW4gYW5ub3lpbmcgY2xpY2sgaW4gY2FzZSBvZiA4LzE2Yml0IGZvcm1hdCBjaGFuZ2UKQEAgLTkyNiwxMSArMTAwNCwxMSBAQAogCSAqIChGSVhNRTogeWVzLCBpdCB3b3JrcywgYnV0IHdoYXQgZXhhY3RseSBhbSBJIGRvaW5nIGhlcmU/PyA6KQogCSAqIEZJWE1FOiBkb2VzIHRoaXMgaGF2ZSBzb21lIHNpZGUgZWZmZWN0cyBmb3IgZnVsbC1kdXBsZXgKIAkgKiBvciBvdGhlciBkcmFtYXRpYyBzaWRlIGVmZmVjdHM/ICovCi0JaWYgKHJlZyA9PSBJRFhfSU9fUExBWV9TT1VOREZPUk1BVCkgLyogb25seSBkbyBpdCBmb3IgcGxheWJhY2sgKi8KLQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjaGlwLCBJRFhfSU9fUExBWV9GTEFHUywKLQkJCXNuZF9hemYzMzI4X2NvZGVjX2ludyhjaGlwLCBJRFhfSU9fUExBWV9GTEFHUykgfAotCQkJRE1BX1BMQVlfU09NRVRISU5HMSB8Ci0JCQlETUFfUExBWV9TT01FVEhJTkcyIHwKKwlpZiAoY29kZWNfdHlwZSA9PSBBWkZfQ09ERUNfUExBWUJBQ0spIC8qIG9ubHkgZG8gaXQgZm9yIHBsYXliYWNrICovCisJCXNuZF9hemYzMzI4X2NvZGVjX291dHcoY29kZWMsIElEWF9JT19DT0RFQ19ETUFfRkxBR1MsCisJCQlzbmRfYXpmMzMyOF9jb2RlY19pbncoY29kZWMsIElEWF9JT19DT0RFQ19ETUFfRkxBR1MpIHwKKwkJCURNQV9SVU5fU09NRVRISU5HMSB8CisJCQlETUFfUlVOX1NPTUVUSElORzIgfAogCQkJU09NRVRISU5HX0FMTU9TVF9BTFdBWVNfU0VUIHwKIAkJCURNQV9FUElMT0dVRV9TT01FVEhJTkcgfAogCQkJRE1BX1NPTUVUSElOR19FTFNFCkBAIC05NDIsMTEyICsxMDIwLDEzNCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQKIHNuZF9hemYzMzI4X2NvZGVjX3NldGZtdF9sb3dwb3dlcihzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsCi0JCQkgICAgdW5zaWduZWQgcmVnCisJCQkgICAgZW51bSBzbmRfYXpmMzMyOF9jb2RlY190eXBlIGNvZGVjX3R5cGUKICkKIHsKIAkvKiBjaG9vc2UgbG93ZXN0IGZyZXF1ZW5jeSBmb3IgbG93IHBvd2VyIGNvbnN1bXB0aW9uLgogCSAqIFdoaWxlIHRoaXMgd2lsbCBjYXVzZSBsb3VkZXIgbm9pc2UgZHVlIHRvIHJhdGhlciBjb2Fyc2UgZnJlcXVlbmN5LAogCSAqIGl0IHNob3VsZCBuZXZlciBtYXR0ZXIgc2luY2Ugb3V0cHV0IHNob3VsZCBhbHdheXMKIAkgKiBnZXQgZGlzYWJsZWQgcHJvcGVybHkgd2hlbiBpZGxlIGFueXdheS4gKi8KLQlzbmRfYXpmMzMyOF9jb2RlY19zZXRmbXQoY2hpcCwgcmVnLCBBWkZfRlJFUV80MDAwLCA4LCAxKTsKKwlzbmRfYXpmMzMyOF9jb2RlY19zZXRmbXQoY2hpcCwgY29kZWNfdHlwZSwgQVpGX0ZSRVFfNDAwMCwgOCwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1zbmRfYXpmMzMyOF9jb2RlY19yZWdfNkFIX3VwZGF0ZShzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsCitzbmRfYXpmMzMyOF9jdHJsX3JlZ182QUhfdXBkYXRlKHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCwKIAkJCQkJdW5zaWduZWQgYml0bWFzaywKLQkJCQkJaW50IGVuYWJsZQorCQkJCQlib29sIGVuYWJsZQogKQogewotCWlmIChlbmFibGUpCi0JCWNoaXAtPnNoYWRvd19yZWdfY29kZWNfNkFIICY9IH5iaXRtYXNrOworCWJvb2wgZG9fbWFzayA9ICFlbmFibGU7CisJaWYgKGRvX21hc2spCisJCWNoaXAtPnNoYWRvd19yZWdfY3RybF82QUggfD0gYml0bWFzazsKIAllbHNlCi0JCWNoaXAtPnNoYWRvd19yZWdfY29kZWNfNkFIIHw9IGJpdG1hc2s7Ci0Jc25kX2F6ZjMzMjhfZGJncGxheSgiNkFIX3VwZGF0ZSBtYXNrIDB4JTA0eCBlbmFibGUgJWQ6IHZhbCAweCUwNHhcbiIsCi0JCQliaXRtYXNrLCBlbmFibGUsIGNoaXAtPnNoYWRvd19yZWdfY29kZWNfNkFIKTsKLQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNoaXAsIElEWF9JT182QUgsIGNoaXAtPnNoYWRvd19yZWdfY29kZWNfNkFIKTsKKwkJY2hpcC0+c2hhZG93X3JlZ19jdHJsXzZBSCAmPSB+Yml0bWFzazsKKwlzbmRfYXpmMzMyOF9kYmdjb2RlYygiNkFIX3VwZGF0ZSBtYXNrIDB4JTA0eCBkb19tYXNrICVkOiB2YWwgMHglMDR4XG4iLAorCQkJYml0bWFzaywgZG9fbWFzaywgY2hpcC0+c2hhZG93X3JlZ19jdHJsXzZBSCk7CisJc25kX2F6ZjMzMjhfY3RybF9vdXR3KGNoaXAsIElEWF9JT182QUgsIGNoaXAtPnNoYWRvd19yZWdfY3RybF82QUgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXNuZF9hemYzMzI4X2NvZGVjX2VuYWJsZShzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsIGludCBlbmFibGUpCitzbmRfYXpmMzMyOF9jdHJsX2VuYWJsZV9jb2RlY3Moc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLCBib29sIGVuYWJsZSkKIHsKLQlzbmRfYXpmMzMyOF9kYmdwbGF5KCJjb2RlY19lbmFibGUgJWRcbiIsIGVuYWJsZSk7CisJc25kX2F6ZjMzMjhfZGJnY29kZWMoImNvZGVjX2VuYWJsZSAlZFxuIiwgZW5hYmxlKTsKIAkvKiBubyBpZGVhIHdoYXQgZXhhY3RseSBpcyBiZWluZyBkb25lIGhlcmUsIGJ1dCBJIHN0cm9uZ2x5IGFzc3VtZSBpdCdzCiAJICogUE0gcmVsYXRlZCAqLwotCXNuZF9hemYzMzI4X2NvZGVjX3JlZ182QUhfdXBkYXRlKAorCXNuZF9hemYzMzI4X2N0cmxfcmVnXzZBSF91cGRhdGUoCiAJCWNoaXAsIElPXzZBX1BBVVNFX1BMQVlCQUNLX0JJVDgsIGVuYWJsZQogCSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1zbmRfYXpmMzMyOF9jb2RlY19hY3Rpdml0eShzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsCi0JCQkJZW51bSBzbmRfYXpmMzMyOF9zdHJlYW1faW5kZXggc3RyZWFtX3R5cGUsCi0JCQkJaW50IGVuYWJsZQorc25kX2F6ZjMzMjhfY3RybF9jb2RlY19hY3Rpdml0eShzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsCisJCQkJZW51bSBzbmRfYXpmMzMyOF9jb2RlY190eXBlIGNvZGVjX3R5cGUsCisJCQkJYm9vbCBlbmFibGUKICkKIHsKLQlpbnQgbmVlZF9jaGFuZ2UgPSAoY2hpcC0+YXVkaW9fc3RyZWFtW3N0cmVhbV90eXBlXS5ydW5uaW5nICE9IGVuYWJsZSk7CisJc3RydWN0IHNuZF9hemYzMzI4X2NvZGVjX2RhdGEgKmNvZGVjID0gJmNoaXAtPmNvZGVjc1tjb2RlY190eXBlXTsKKwlib29sIG5lZWRfY2hhbmdlID0gKGNvZGVjLT5ydW5uaW5nICE9IGVuYWJsZSk7CiAKLQlzbmRfYXpmMzMyOF9kYmdwbGF5KAotCQkiY29kZWNfYWN0aXZpdHk6IHR5cGUgJWQsIGVuYWJsZSAlZCwgbmVlZF9jaGFuZ2UgJWRcbiIsCi0JCQkJc3RyZWFtX3R5cGUsIGVuYWJsZSwgbmVlZF9jaGFuZ2UKKwlzbmRfYXpmMzMyOF9kYmdjb2RlYygKKwkJImNvZGVjX2FjdGl2aXR5OiAlcyBjb2RlYywgZW5hYmxlICVkLCBuZWVkX2NoYW5nZSAlZFxuIiwKKwkJCQljb2RlYy0+bmFtZSwgZW5hYmxlLCBuZWVkX2NoYW5nZQogCSk7CiAJaWYgKG5lZWRfY2hhbmdlKSB7Ci0JCWVudW0gc25kX2F6ZjMzMjhfc3RyZWFtX2luZGV4IG90aGVyID0KLQkJCShzdHJlYW1fdHlwZSA9PSBBWkZfUExBWUJBQ0spID8KLQkJCQlBWkZfQ0FQVFVSRSA6IEFaRl9QTEFZQkFDSzsKLQkJLyogc21hbGwgY2hlY2sgdG8gcHJldmVudCBzaHV0dGluZyBkb3duIHRoZSBvdGhlciBwYXJ0eQotCQkgKiBpbiBjYXNlIGl0J3MgYWN0aXZlICovCi0JCWlmICgoZW5hYmxlKSB8fCAhKGNoaXAtPmF1ZGlvX3N0cmVhbVtvdGhlcl0ucnVubmluZykpCi0JCQlzbmRfYXpmMzMyOF9jb2RlY19lbmFibGUoY2hpcCwgZW5hYmxlKTsKKwkJc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJCQllbnVtIHNuZF9hemYzMzI4X2NvZGVjX3R5cGUgb3RoZXIxOworCQkJZW51bSBzbmRfYXpmMzMyOF9jb2RlY190eXBlIG90aGVyMjsKKwkJfSBwZWVyX2NvZGVjc1szXSA9CisJCQl7IHsgQVpGX0NPREVDX0NBUFRVUkUsIEFaRl9DT0RFQ19JMlNfT1VUIH0sCisJCQkgIHsgQVpGX0NPREVDX1BMQVlCQUNLLCBBWkZfQ09ERUNfSTJTX09VVCB9LAorCQkJICB7IEFaRl9DT0RFQ19QTEFZQkFDSywgQVpGX0NPREVDX0NBUFRVUkUgfSB9OworCQlib29sIGNhbGxfZnVuY3Rpb247CisKKwkJaWYgKGVuYWJsZSkKKwkJCS8qIGlmIGVuYWJsZSBjb2RlYywgY2FsbCBlbmFibGVfY29kZWNzIGZ1bmMKKwkJCSAgIHRvIGVuYWJsZSBjb2RlYyBzdXBwbHkuLi4gKi8KKwkJCWNhbGxfZnVuY3Rpb24gPSAxOworCQllbHNlIHsKKwkJCS8qIC4uLm90aGVyd2lzZSBjYWxsIGVuYWJsZV9jb2RlY3MgZnVuYworCQkJICAgKHdoaWNoIGdsb2JhbGx5IHNodXRzIGRvd24gb3BlcmF0aW9uIG9mIGNvZGVjcykKKwkJCSAgIG9ubHkgaW4gY2FzZSB0aGUgb3RoZXIgY29kZWNzIGFyZSBjdXJyZW50bHkKKwkJCSAgIG5vdCBhY3RpdmUgZWl0aGVyISAqLworCQkJY2FsbF9mdW5jdGlvbiA9CisJCQkJKCghY2hpcC0+Y29kZWNzW3BlZXJfY29kZWNzW2NvZGVjX3R5cGVdLm90aGVyMV0KKwkJCQkJLnJ1bm5pbmcpCisJCQkgICAgICYmICAoIWNoaXAtPmNvZGVjc1twZWVyX2NvZGVjc1tjb2RlY190eXBlXS5vdGhlcjJdCisJCQkJCS5ydW5uaW5nKSk7CisJCSB9CisJCSBpZiAoY2FsbF9mdW5jdGlvbikKKwkJCXNuZF9hemYzMzI4X2N0cmxfZW5hYmxlX2NvZGVjcyhjaGlwLCBlbmFibGUpOwogCiAJCS8qIC4uLmFuZCBhZGp1c3QgY2xvY2ssIHRvbwogCQkgKiAocmVkdWNlIG5vaXNlIGFuZCBwb3dlciBjb25zdW1wdGlvbikgKi8KIAkJaWYgKCFlbmFibGUpCiAJCQlzbmRfYXpmMzMyOF9jb2RlY19zZXRmbXRfbG93cG93ZXIoCiAJCQkJY2hpcCwKLQkJCQljaGlwLT5hdWRpb19zdHJlYW1bc3RyZWFtX3R5cGVdLnBvcnRiYXNlCi0JCQkJCSsgSURYX0lPX1BMQVlfU09VTkRGT1JNQVQKKwkJCQljb2RlY190eXBlCiAJCQkpOworCQljb2RlYy0+cnVubmluZyA9IGVuYWJsZTsKIAl9Ci0JY2hpcC0+YXVkaW9fc3RyZWFtW3N0cmVhbV90eXBlXS5ydW5uaW5nID0gZW5hYmxlOwogfQogCiBzdGF0aWMgdm9pZAotc25kX2F6ZjMzMjhfc2V0ZG1hYShzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsCi0JCQkJbG9uZyB1bnNpZ25lZCBpbnQgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJCQllbnVtIHNuZF9hemYzMzI4X3N0cmVhbV9pbmRleCBzdHJlYW1fdHlwZQorc25kX2F6ZjMzMjhfY29kZWNfc2V0ZG1hYShzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsCisJCQkJZW51bSBzbmRfYXpmMzMyOF9jb2RlY190eXBlIGNvZGVjX3R5cGUsCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCXVuc2lnbmVkIGludCBjb3VudCwKKwkJCQl1bnNpZ25lZCBpbnQgc2l6ZQogKQogeworCWNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOF9jb2RlY19kYXRhICpjb2RlYyA9ICZjaGlwLT5jb2RlY3NbY29kZWNfdHlwZV07CiAJc25kX2F6ZjMzMjhfZGJnY2FsbGVudGVyKCk7Ci0JaWYgKCFjaGlwLT5hdWRpb19zdHJlYW1bc3RyZWFtX3R5cGVdLnJ1bm5pbmcpIHsKLQkJLyogQVpGMzMyOCB1c2VzIGEgdHdvIGJ1ZmZlciBwb2ludGVyIERNQSBwbGF5YmFjayBhcHByb2FjaCAqLworCWlmICghY29kZWMtPnJ1bm5pbmcpIHsKKwkJLyogQVpGMzMyOCB1c2VzIGEgdHdvIGJ1ZmZlciBwb2ludGVyIERNQSB0cmFuc2ZlciBhcHByb2FjaCAqLwogCi0JCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHBvcnRiYXNlLCBhZGRyX2FyZWEyOworCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBhZGRyX2FyZWEyOwogCiAJCS8qIHdpZHRoIDMyYml0IChwcmV2ZW50IG92ZXJmbG93KTogKi8KLQkJdW5zaWduZWQgbG9uZyBjb3VudF9hcmVhcywgY291bnRfdG1wOworCQl1MzIgY291bnRfYXJlYXMsIGxlbmd0aHM7CiAKLQkJcG9ydGJhc2UgPSBjaGlwLT5hdWRpb19zdHJlYW1bc3RyZWFtX3R5cGVdLnBvcnRiYXNlOwogCQljb3VudF9hcmVhcyA9IHNpemUvMjsKIAkJYWRkcl9hcmVhMiA9IGFkZHIrY291bnRfYXJlYXM7CiAJCWNvdW50X2FyZWFzLS07IC8qIG1heC4gaW5kZXggKi8KLQkJc25kX2F6ZjMzMjhfZGJncGxheSgic2V0IERNQTogYnVmMSAlMDhseFslbHVdLCBidWYyICUwOGx4WyVsdV1cbiIsIGFkZHIsIGNvdW50X2FyZWFzLCBhZGRyX2FyZWEyLCBjb3VudF9hcmVhcyk7CisJCXNuZF9hemYzMzI4X2RiZ2NvZGVjKCJzZXRkbWE6IGJ1ZmZlcnMgJTA4bHhbJXVdIC8gJTA4bHhbJXVdXG4iLAorCQkJCWFkZHIsIGNvdW50X2FyZWFzLCBhZGRyX2FyZWEyLCBjb3VudF9hcmVhcyk7CiAKIAkJLyogYnVpbGQgY29tYmluZWQgSS9PIGJ1ZmZlciBsZW5ndGggd29yZCAqLwotCQljb3VudF90bXAgPSBjb3VudF9hcmVhczsKLQkJY291bnRfYXJlYXMgfD0gKGNvdW50X3RtcCA8PCAxNik7CisJCWxlbmd0aHMgPSAoY291bnRfYXJlYXMgPDwgMTYpIHwgKGNvdW50X2FyZWFzKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0JCW91dGwoYWRkciwgcG9ydGJhc2UgKyBJRFhfSU9fUExBWV9ETUFfU1RBUlRfMSk7Ci0JCW91dGwoYWRkcl9hcmVhMiwgcG9ydGJhc2UgKyBJRFhfSU9fUExBWV9ETUFfU1RBUlRfMik7Ci0JCW91dGwoY291bnRfYXJlYXMsIHBvcnRiYXNlICsgSURYX0lPX1BMQVlfRE1BX0xFTl8xKTsKKwkJc25kX2F6ZjMzMjhfY29kZWNfb3V0bChjb2RlYywgSURYX0lPX0NPREVDX0RNQV9TVEFSVF8xLCBhZGRyKTsKKwkJc25kX2F6ZjMzMjhfY29kZWNfb3V0bChjb2RlYywgSURYX0lPX0NPREVDX0RNQV9TVEFSVF8yLAorCQkJCQkJCQlhZGRyX2FyZWEyKTsKKwkJc25kX2F6ZjMzMjhfY29kZWNfb3V0bChjb2RlYywgSURYX0lPX0NPREVDX0RNQV9MRU5HVEhTLAorCQkJCQkJCQlsZW5ndGhzKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAl9CiAJc25kX2F6ZjMzMjhfZGJnY2FsbGxlYXZlKCk7CiB9CiAKIHN0YXRpYyBpbnQKLXNuZF9hemYzMzI4X3BsYXliYWNrX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzbmRfYXpmMzMyOF9jb2RlY19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogI2lmIDAKIAlzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CkBAIC0xMDU4LDE1NyArMTE1OCwxNjEgQEAKIAogCXNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpOwogI2lmIDAKLQlzbmRfYXpmMzMyOF9jb2RlY19zZXRmbXQoY2hpcCwgSURYX0lPX1BMQVlfU09VTkRGT1JNQVQsCisJc25kX2F6ZjMzMjhfY29kZWNfc2V0Zm10KGNoaXAsIEFaRl9DT0RFQ18uLi4sCiAJCXJ1bnRpbWUtPnJhdGUsCiAJCXNuZF9wY21fZm9ybWF0X3dpZHRoKHJ1bnRpbWUtPmZvcm1hdCksCiAJCXJ1bnRpbWUtPmNoYW5uZWxzKTsKLQlzbmRfYXpmMzMyOF9zZXRkbWFhKGNoaXAsIHJ1bnRpbWUtPmRtYV9hZGRyLCBjb3VudCwgc2l6ZSwgQVpGX1BMQVlCQUNLKTsKKwlzbmRfYXpmMzMyOF9jb2RlY19zZXRkbWFhKGNoaXAsIEFaRl9DT0RFQ18uLi4sCisJCQkJCXJ1bnRpbWUtPmRtYV9hZGRyLCBjb3VudCwgc2l6ZSk7CiAjZW5kaWYKIAlzbmRfYXpmMzMyOF9kYmdjYWxsbGVhdmUoKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotc25kX2F6ZjMzMjhfY2FwdHVyZV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotI2lmIDAKLQlzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLSAgICAgICAgdW5zaWduZWQgaW50IHNpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKLQl1bnNpZ25lZCBpbnQgY291bnQgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKLSNlbmRpZgotCi0Jc25kX2F6ZjMzMjhfZGJnY2FsbGVudGVyKCk7Ci0jaWYgMAotCXNuZF9hemYzMzI4X2NvZGVjX3NldGZtdChjaGlwLCBJRFhfSU9fUkVDX1NPVU5ERk9STUFULAotCQlydW50aW1lLT5yYXRlLAotCQlzbmRfcGNtX2Zvcm1hdF93aWR0aChydW50aW1lLT5mb3JtYXQpLAotCQlydW50aW1lLT5jaGFubmVscyk7Ci0Jc25kX2F6ZjMzMjhfc2V0ZG1hYShjaGlwLCBydW50aW1lLT5kbWFfYWRkciwgY291bnQsIHNpemUsIEFaRl9DQVBUVVJFKTsKLSNlbmRpZgotCXNuZF9hemYzMzI4X2RiZ2NhbGxsZWF2ZSgpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1zbmRfYXpmMzMyOF9wbGF5YmFja190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQorc25kX2F6ZjMzMjhfY29kZWNfdHJpZ2dlcihlbnVtIHNuZF9hemYzMzI4X2NvZGVjX3R5cGUgY29kZWNfdHlwZSwKKwkJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQogewogCXN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwljb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjhfY29kZWNfZGF0YSAqY29kZWMgPSAmY2hpcC0+Y29kZWNzW2NvZGVjX3R5cGVdOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaW50IHJlc3VsdCA9IDA7Ci0JdW5zaWduZWQgaW50IHN0YXR1czE7Ci0JaW50IHByZXZpb3VzbHlfbXV0ZWQ7CisJdTE2IGZsYWdzMTsKKwlib29sIHByZXZpb3VzbHlfbXV0ZWQgPSAwOworCWJvb2wgaXNfcGxheWJhY2tfY29kZWMgPSAoQVpGX0NPREVDX1BMQVlCQUNLID09IGNvZGVjX3R5cGUpOwogCi0Jc25kX2F6ZjMzMjhfZGJnY2FsbHMoInNuZF9hemYzMzI4X3BsYXliYWNrX3RyaWdnZXIgY21kICVkXG4iLCBjbWQpOworCXNuZF9hemYzMzI4X2RiZ2NhbGxzKCJzbmRfYXpmMzMyOF9jb2RlY190cmlnZ2VyIGNtZCAlZFxuIiwgY21kKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLQkJc25kX2F6ZjMzMjhfZGJncGxheSgiU1RBUlQgUExBWUJBQ0tcbiIpOworCQlzbmRfYXpmMzMyOF9kYmdjb2RlYygiU1RBUlQgJXNcbiIsIGNvZGVjLT5uYW1lKTsKIAotCQkvKiBtdXRlIFdhdmVPdXQgKGF2b2lkIGNsaWNraW5nIGR1cmluZyBzZXR1cCkgKi8KLQkJcHJldmlvdXNseV9tdXRlZCA9Ci0JCQlzbmRfYXpmMzMyOF9taXhlcl9zZXRfbXV0ZShjaGlwLCBJRFhfTUlYRVJfV0FWRU9VVCwgMSk7CisJCWlmIChpc19wbGF5YmFja19jb2RlYykgeworCQkJLyogbXV0ZSBXYXZlT3V0IChhdm9pZCBjbGlja2luZyBkdXJpbmcgc2V0dXApICovCisJCQlwcmV2aW91c2x5X211dGVkID0KKwkJCQlzbmRfYXpmMzMyOF9taXhlcl9zZXRfbXV0ZSgKKwkJCQkJCWNoaXAsIElEWF9NSVhFUl9XQVZFT1VULCAxCisJCQkJKTsKKwkJfQogCi0JCXNuZF9hemYzMzI4X2NvZGVjX3NldGZtdChjaGlwLCBJRFhfSU9fUExBWV9TT1VOREZPUk1BVCwKKwkJc25kX2F6ZjMzMjhfY29kZWNfc2V0Zm10KGNoaXAsIGNvZGVjX3R5cGUsCiAJCQlydW50aW1lLT5yYXRlLAogCQkJc25kX3BjbV9mb3JtYXRfd2lkdGgocnVudGltZS0+Zm9ybWF0KSwKIAkJCXJ1bnRpbWUtPmNoYW5uZWxzKTsKIAogCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAkJLyogZmlyc3QsIHJlbWVtYmVyIGN1cnJlbnQgdmFsdWU6ICovCi0JCXN0YXR1czEgPSBzbmRfYXpmMzMyOF9jb2RlY19pbncoY2hpcCwgSURYX0lPX1BMQVlfRkxBR1MpOworCQlmbGFnczEgPSBzbmRfYXpmMzMyOF9jb2RlY19pbncoY29kZWMsIElEWF9JT19DT0RFQ19ETUFfRkxBR1MpOwogCi0JCS8qIHN0b3AgcGxheWJhY2sgKi8KLQkJc3RhdHVzMSAmPSB+RE1BX1JFU1VNRTsKLQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjaGlwLCBJRFhfSU9fUExBWV9GTEFHUywgc3RhdHVzMSk7CisJCS8qIHN0b3AgdHJhbnNmZXIgKi8KKwkJZmxhZ3MxICY9IH5ETUFfUkVTVU1FOworCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX0ZMQUdTLCBmbGFnczEpOwogCiAJCS8qIEZJWE1FOiBjbGVhciBpbnRlcnJ1cHRzIG9yIHdoYXQ/Pz8gKi8KLQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjaGlwLCBJRFhfSU9fUExBWV9JUlFUWVBFLCAweGZmZmYpOworCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNvZGVjLCBJRFhfSU9fQ09ERUNfSVJRVFlQRSwgMHhmZmZmKTsKIAkJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAotCQlzbmRfYXpmMzMyOF9zZXRkbWFhKGNoaXAsIHJ1bnRpbWUtPmRtYV9hZGRyLAorCQlzbmRfYXpmMzMyOF9jb2RlY19zZXRkbWFhKGNoaXAsIGNvZGVjX3R5cGUsIHJ1bnRpbWUtPmRtYV9hZGRyLAogCQkJc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSksCi0JCQlzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKSwKLQkJCUFaRl9QTEFZQkFDSyk7CisJCQlzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKQorCQkpOwogCiAJCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOwogI2lmZGVmIFdJTjlYCiAJCS8qIEZJWE1FOiBlbmFibGUgcGxheWJhY2svcmVjb3JkaW5nPz8/ICovCi0JCXN0YXR1czEgfD0gRE1BX1BMQVlfU09NRVRISU5HMSB8IERNQV9QTEFZX1NPTUVUSElORzI7Ci0JCXNuZF9hemYzMzI4X2NvZGVjX291dHcoY2hpcCwgSURYX0lPX1BMQVlfRkxBR1MsIHN0YXR1czEpOworCQlmbGFnczEgfD0gRE1BX1JVTl9TT01FVEhJTkcxIHwgRE1BX1JVTl9TT01FVEhJTkcyOworCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX0ZMQUdTLCBmbGFnczEpOwogCi0JCS8qIHN0YXJ0IHBsYXliYWNrIGFnYWluICovCisJCS8qIHN0YXJ0IHRyYW5zZmVyIGFnYWluICovCiAJCS8qIEZJWE1FOiB3aGF0IGlzIHRoaXMgdmFsdWUgKDB4MDAxMCk/Pz8gKi8KLQkJc3RhdHVzMSB8PSBETUFfUkVTVU1FIHwgRE1BX0VQSUxPR1VFX1NPTUVUSElORzsKLQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjaGlwLCBJRFhfSU9fUExBWV9GTEFHUywgc3RhdHVzMSk7CisJCWZsYWdzMSB8PSBETUFfUkVTVU1FIHwgRE1BX0VQSUxPR1VFX1NPTUVUSElORzsKKwkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjb2RlYywgSURYX0lPX0NPREVDX0RNQV9GTEFHUywgZmxhZ3MxKTsKICNlbHNlIC8qIE5UNCAqLwotCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNoaXAsIElEWF9JT19QTEFZX0ZMQUdTLAorCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX0ZMQUdTLAogCQkJMHgwMDAwKTsKLQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjaGlwLCBJRFhfSU9fUExBWV9GTEFHUywKLQkJCURNQV9QTEFZX1NPTUVUSElORzEpOwotCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNoaXAsIElEWF9JT19QTEFZX0ZMQUdTLAotCQkJRE1BX1BMQVlfU09NRVRISU5HMSB8Ci0JCQlETUFfUExBWV9TT01FVEhJTkcyKTsKLQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjaGlwLCBJRFhfSU9fUExBWV9GTEFHUywKKwkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjb2RlYywgSURYX0lPX0NPREVDX0RNQV9GTEFHUywKKwkJCURNQV9SVU5fU09NRVRISU5HMSk7CisJCXNuZF9hemYzMzI4X2NvZGVjX291dHcoY29kZWMsIElEWF9JT19DT0RFQ19ETUFfRkxBR1MsCisJCQlETUFfUlVOX1NPTUVUSElORzEgfAorCQkJRE1BX1JVTl9TT01FVEhJTkcyKTsKKwkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjb2RlYywgSURYX0lPX0NPREVDX0RNQV9GTEFHUywKIAkJCURNQV9SRVNVTUUgfAogCQkJU09NRVRISU5HX0FMTU9TVF9BTFdBWVNfU0VUIHwKIAkJCURNQV9FUElMT0dVRV9TT01FVEhJTkcgfAogCQkJRE1BX1NPTUVUSElOR19FTFNFKTsKICNlbmRpZgogCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwotCQlzbmRfYXpmMzMyOF9jb2RlY19hY3Rpdml0eShjaGlwLCBBWkZfUExBWUJBQ0ssIDEpOworCQlzbmRfYXpmMzMyOF9jdHJsX2NvZGVjX2FjdGl2aXR5KGNoaXAsIGNvZGVjX3R5cGUsIDEpOwogCi0JCS8qIG5vdyB1bm11dGUgV2F2ZU91dCAqLwotCQlpZiAoIXByZXZpb3VzbHlfbXV0ZWQpCi0JCQlzbmRfYXpmMzMyOF9taXhlcl9zZXRfbXV0ZShjaGlwLCBJRFhfTUlYRVJfV0FWRU9VVCwgMCk7CisJCWlmIChpc19wbGF5YmFja19jb2RlYykgeworCQkJLyogbm93IHVubXV0ZSBXYXZlT3V0ICovCisJCQlpZiAoIXByZXZpb3VzbHlfbXV0ZWQpCisJCQkJc25kX2F6ZjMzMjhfbWl4ZXJfc2V0X211dGUoCisJCQkJCQljaGlwLCBJRFhfTUlYRVJfV0FWRU9VVCwgMAorCQkJCSk7CisJCX0KIAotCQlzbmRfYXpmMzMyOF9kYmdwbGF5KCJTVEFSVEVEIFBMQVlCQUNLXG4iKTsKKwkJc25kX2F6ZjMzMjhfZGJnY29kZWMoIlNUQVJURUQgJXNcbiIsIGNvZGVjLT5uYW1lKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Ci0JCXNuZF9hemYzMzI4X2RiZ3BsYXkoIlJFU1VNRSBQTEFZQkFDS1xuIik7Ci0JCS8qIHJlc3VtZSBwbGF5YmFjayBpZiB3ZSB3ZXJlIGFjdGl2ZSAqLworCQlzbmRfYXpmMzMyOF9kYmdjb2RlYygiUkVTVU1FICVzXG4iLCBjb2RlYy0+bmFtZSk7CisJCS8qIHJlc3VtZSBjb2RlYyBpZiB3ZSB3ZXJlIGFjdGl2ZSAqLwogCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKLQkJaWYgKGNoaXAtPmF1ZGlvX3N0cmVhbVtBWkZfUExBWUJBQ0tdLnJ1bm5pbmcpCi0JCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNoaXAsIElEWF9JT19QTEFZX0ZMQUdTLAotCQkJCXNuZF9hemYzMzI4X2NvZGVjX2ludyhjaGlwLCBJRFhfSU9fUExBWV9GTEFHUykgfCBETUFfUkVTVU1FKTsKKwkJaWYgKGNvZGVjLT5ydW5uaW5nKQorCQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjb2RlYywgSURYX0lPX0NPREVDX0RNQV9GTEFHUywKKwkJCQlzbmRfYXpmMzMyOF9jb2RlY19pbncoCisJCQkJCWNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX0ZMQUdTCisJCQkJKSB8IERNQV9SRVNVTUUKKwkJCSk7CiAJCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQkJc25kX2F6ZjMzMjhfZGJncGxheSgiU1RPUCBQTEFZQkFDS1xuIik7CisJCXNuZF9hemYzMzI4X2RiZ2NvZGVjKCJTVE9QICVzXG4iLCBjb2RlYy0+bmFtZSk7CiAKLQkJLyogbXV0ZSBXYXZlT3V0IChhdm9pZCBjbGlja2luZyBkdXJpbmcgc2V0dXApICovCi0JCXByZXZpb3VzbHlfbXV0ZWQgPQotCQkJc25kX2F6ZjMzMjhfbWl4ZXJfc2V0X211dGUoY2hpcCwgSURYX01JWEVSX1dBVkVPVVQsIDEpOworCQlpZiAoaXNfcGxheWJhY2tfY29kZWMpIHsKKwkJCS8qIG11dGUgV2F2ZU91dCAoYXZvaWQgY2xpY2tpbmcgZHVyaW5nIHNldHVwKSAqLworCQkJcHJldmlvdXNseV9tdXRlZCA9CisJCQkJc25kX2F6ZjMzMjhfbWl4ZXJfc2V0X211dGUoCisJCQkJCQljaGlwLCBJRFhfTUlYRVJfV0FWRU9VVCwgMQorCQkJCSk7CisJCX0KIAogCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAkJLyogZmlyc3QsIHJlbWVtYmVyIGN1cnJlbnQgdmFsdWU6ICovCi0JCXN0YXR1czEgPSBzbmRfYXpmMzMyOF9jb2RlY19pbncoY2hpcCwgSURYX0lPX1BMQVlfRkxBR1MpOworCQlmbGFnczEgPSBzbmRfYXpmMzMyOF9jb2RlY19pbncoY29kZWMsIElEWF9JT19DT0RFQ19ETUFfRkxBR1MpOwogCi0JCS8qIHN0b3AgcGxheWJhY2sgKi8KLQkJc3RhdHVzMSAmPSB+RE1BX1JFU1VNRTsKLQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjaGlwLCBJRFhfSU9fUExBWV9GTEFHUywgc3RhdHVzMSk7CisJCS8qIHN0b3AgdHJhbnNmZXIgKi8KKwkJZmxhZ3MxICY9IH5ETUFfUkVTVU1FOworCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX0ZMQUdTLCBmbGFnczEpOwogCiAJCS8qIGhtbSwgaXMgdGhpcyByZWFsbHkgcmVxdWlyZWQ/IHdlJ3JlIHJlc2V0dGluZyB0aGUgc2FtZSBiaXQKIAkJICogaW1tZWRpYXRlbHkgdGhlcmVhZnRlci4uLiAqLwotCQlzdGF0dXMxIHw9IERNQV9QTEFZX1NPTUVUSElORzE7Ci0JCXNuZF9hemYzMzI4X2NvZGVjX291dHcoY2hpcCwgSURYX0lPX1BMQVlfRkxBR1MsIHN0YXR1czEpOworCQlmbGFnczEgfD0gRE1BX1JVTl9TT01FVEhJTkcxOworCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX0ZMQUdTLCBmbGFnczEpOwogCi0JCXN0YXR1czEgJj0gfkRNQV9QTEFZX1NPTUVUSElORzE7Ci0JCXNuZF9hemYzMzI4X2NvZGVjX291dHcoY2hpcCwgSURYX0lPX1BMQVlfRkxBR1MsIHN0YXR1czEpOworCQlmbGFnczEgJj0gfkRNQV9SVU5fU09NRVRISU5HMTsKKwkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjb2RlYywgSURYX0lPX0NPREVDX0RNQV9GTEFHUywgZmxhZ3MxKTsKIAkJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKLQkJc25kX2F6ZjMzMjhfY29kZWNfYWN0aXZpdHkoY2hpcCwgQVpGX1BMQVlCQUNLLCAwKTsKKwkJc25kX2F6ZjMzMjhfY3RybF9jb2RlY19hY3Rpdml0eShjaGlwLCBjb2RlY190eXBlLCAwKTsKIAotCQkvKiBub3cgdW5tdXRlIFdhdmVPdXQgKi8KLQkJaWYgKCFwcmV2aW91c2x5X211dGVkKQotCQkJc25kX2F6ZjMzMjhfbWl4ZXJfc2V0X211dGUoY2hpcCwgSURYX01JWEVSX1dBVkVPVVQsIDApOworCQlpZiAoaXNfcGxheWJhY2tfY29kZWMpIHsKKwkJCS8qIG5vdyB1bm11dGUgV2F2ZU91dCAqLworCQkJaWYgKCFwcmV2aW91c2x5X211dGVkKQorCQkJCXNuZF9hemYzMzI4X21peGVyX3NldF9tdXRlKAorCQkJCQkJY2hpcCwgSURYX01JWEVSX1dBVkVPVVQsIDAKKwkJCQkpOworCQl9CiAKLQkJc25kX2F6ZjMzMjhfZGJncGxheSgiU1RPUFBFRCBQTEFZQkFDS1xuIik7CisJCXNuZF9hemYzMzI4X2RiZ2NvZGVjKCJTVE9QUEVEICVzXG4iLCBjb2RlYy0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKLQkJc25kX2F6ZjMzMjhfZGJncGxheSgiU1VTUEVORCBQTEFZQkFDS1xuIik7Ci0JCS8qIG1ha2Ugc3VyZSBwbGF5YmFjayBpcyBzdG9wcGVkICovCi0JCXNuZF9hemYzMzI4X2NvZGVjX291dHcoY2hpcCwgSURYX0lPX1BMQVlfRkxBR1MsCi0JCQlzbmRfYXpmMzMyOF9jb2RlY19pbncoY2hpcCwgSURYX0lPX1BMQVlfRkxBR1MpICYgfkRNQV9SRVNVTUUpOworCQlzbmRfYXpmMzMyOF9kYmdjb2RlYygiU1VTUEVORCAlc1xuIiwgY29kZWMtPm5hbWUpOworCQkvKiBtYWtlIHN1cmUgY29kZWMgaXMgc3RvcHBlZCAqLworCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX0ZMQUdTLAorCQkJc25kX2F6ZjMzMjhfY29kZWNfaW53KAorCQkJCWNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX0ZMQUdTCisJCQkpICYgfkRNQV9SRVNVTUUKKwkJKTsKIAkJYnJlYWs7CiAgICAgICAgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiRklYTUU6IFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0ggTklZIVxuIik7CkBAIC0xMjE3LDcgKzEzMjEsNyBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJGSVhNRTogU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRSBOSVkhXG4iKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJGSVhNRTogdW5rbm93biB0cmlnZ2VyIG1vZGUhXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiRklYTUU6IHVua25vd24gdHJpZ2dlciBtb2RlIVxuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMjI1LDE3MiArMTMyOSw3NCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLS8qIHRoaXMgaXMganVzdCBhbmFsb2dvdXMgdG8gcGxheWJhY2s7IEknbSBub3QgcXVpdGUgc3VyZSB3aGV0aGVyIHJlY29yZGluZwotICogc2hvdWxkIGFjdHVhbGx5IGJlIHRyaWdnZXJlZCBsaWtlIHRoYXQgKi8KIHN0YXRpYyBpbnQKLXNuZF9hemYzMzI4X2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3NuZF9hemYzMzI4X2NvZGVjX3BsYXliYWNrX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCiB7Ci0Jc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0JaW50IHJlc3VsdCA9IDA7Ci0JdW5zaWduZWQgaW50IHN0YXR1czE7CisJcmV0dXJuIHNuZF9hemYzMzI4X2NvZGVjX3RyaWdnZXIoQVpGX0NPREVDX1BMQVlCQUNLLCBzdWJzdHJlYW0sIGNtZCk7Cit9CiAKLQlzbmRfYXpmMzMyOF9kYmdjYWxscygic25kX2F6ZjMzMjhfY2FwdHVyZV90cmlnZ2VyIGNtZCAlZFxuIiwgY21kKTsKK3N0YXRpYyBpbnQKK3NuZF9hemYzMzI4X2NvZGVjX2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlyZXR1cm4gc25kX2F6ZjMzMjhfY29kZWNfdHJpZ2dlcihBWkZfQ09ERUNfQ0FQVFVSRSwgc3Vic3RyZWFtLCBjbWQpOworfQogCi0gICAgICAgIHN3aXRjaCAoY21kKSB7Ci0gICAgICAgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0KLQkJc25kX2F6ZjMzMjhfZGJncGxheSgiU1RBUlQgQ0FQVFVSRVxuIik7Ci0KLQkJc25kX2F6ZjMzMjhfY29kZWNfc2V0Zm10KGNoaXAsIElEWF9JT19SRUNfU09VTkRGT1JNQVQsCi0JCQlydW50aW1lLT5yYXRlLAotCQkJc25kX3BjbV9mb3JtYXRfd2lkdGgocnVudGltZS0+Zm9ybWF0KSwKLQkJCXJ1bnRpbWUtPmNoYW5uZWxzKTsKLQotCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKLQkJLyogZmlyc3QsIHJlbWVtYmVyIGN1cnJlbnQgdmFsdWU6ICovCi0JCXN0YXR1czEgPSBzbmRfYXpmMzMyOF9jb2RlY19pbncoY2hpcCwgSURYX0lPX1JFQ19GTEFHUyk7Ci0KLQkJLyogc3RvcCByZWNvcmRpbmcgKi8KLQkJc3RhdHVzMSAmPSB+RE1BX1JFU1VNRTsKLQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjaGlwLCBJRFhfSU9fUkVDX0ZMQUdTLCBzdGF0dXMxKTsKLQotCQkvKiBGSVhNRTogY2xlYXIgaW50ZXJydXB0cyBvciB3aGF0Pz8/ICovCi0JCXNuZF9hemYzMzI4X2NvZGVjX291dHcoY2hpcCwgSURYX0lPX1JFQ19JUlFUWVBFLCAweGZmZmYpOwotCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwotCi0JCXNuZF9hemYzMzI4X3NldGRtYWEoY2hpcCwgcnVudGltZS0+ZG1hX2FkZHIsCi0JCQlzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSwKLQkJCXNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pLAotCQkJQVpGX0NBUFRVUkUpOwotCi0JCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOwotI2lmZGVmIFdJTjlYCi0JCS8qIEZJWE1FOiBlbmFibGUgcGxheWJhY2svcmVjb3JkaW5nPz8/ICovCi0JCXN0YXR1czEgfD0gRE1BX1BMQVlfU09NRVRISU5HMSB8IERNQV9QTEFZX1NPTUVUSElORzI7Ci0JCXNuZF9hemYzMzI4X2NvZGVjX291dHcoY2hpcCwgSURYX0lPX1JFQ19GTEFHUywgc3RhdHVzMSk7Ci0KLQkJLyogc3RhcnQgY2FwdHVyZSBhZ2FpbiAqLwotCQkvKiBGSVhNRTogd2hhdCBpcyB0aGlzIHZhbHVlICgweDAwMTApPz8/ICovCi0JCXN0YXR1czEgfD0gRE1BX1JFU1VNRSB8IERNQV9FUElMT0dVRV9TT01FVEhJTkc7Ci0JCXNuZF9hemYzMzI4X2NvZGVjX291dHcoY2hpcCwgSURYX0lPX1JFQ19GTEFHUywgc3RhdHVzMSk7Ci0jZWxzZQotCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNoaXAsIElEWF9JT19SRUNfRkxBR1MsCi0JCQkweDAwMDApOwotCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNoaXAsIElEWF9JT19SRUNfRkxBR1MsCi0JCQlETUFfUExBWV9TT01FVEhJTkcxKTsKLQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjaGlwLCBJRFhfSU9fUkVDX0ZMQUdTLAotCQkJRE1BX1BMQVlfU09NRVRISU5HMSB8Ci0JCQlETUFfUExBWV9TT01FVEhJTkcyKTsKLQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjaGlwLCBJRFhfSU9fUkVDX0ZMQUdTLAotCQkJRE1BX1JFU1VNRSB8Ci0JCQlTT01FVEhJTkdfQUxNT1NUX0FMV0FZU19TRVQgfAotCQkJRE1BX0VQSUxPR1VFX1NPTUVUSElORyB8Ci0JCQlETUFfU09NRVRISU5HX0VMU0UpOwotI2VuZGlmCi0JCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7Ci0JCXNuZF9hemYzMzI4X2NvZGVjX2FjdGl2aXR5KGNoaXAsIEFaRl9DQVBUVVJFLCAxKTsKLQotCQlzbmRfYXpmMzMyOF9kYmdwbGF5KCJTVEFSVEVEIENBUFRVUkVcbiIpOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKLQkJc25kX2F6ZjMzMjhfZGJncGxheSgiUkVTVU1FIENBUFRVUkVcbiIpOwotCQkvKiByZXN1bWUgcmVjb3JkaW5nIGlmIHdlIHdlcmUgYWN0aXZlICovCi0JCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOwotCQlpZiAoY2hpcC0+YXVkaW9fc3RyZWFtW0FaRl9DQVBUVVJFXS5ydW5uaW5nKQotCQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjaGlwLCBJRFhfSU9fUkVDX0ZMQUdTLAotCQkJCXNuZF9hemYzMzI4X2NvZGVjX2ludyhjaGlwLCBJRFhfSU9fUkVDX0ZMQUdTKSB8IERNQV9SRVNVTUUpOwotCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwotCQlicmVhazsKLSAgICAgICAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotCQlzbmRfYXpmMzMyOF9kYmdwbGF5KCJTVE9QIENBUFRVUkVcbiIpOwotCi0JCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOwotCQkvKiBmaXJzdCwgcmVtZW1iZXIgY3VycmVudCB2YWx1ZTogKi8KLQkJc3RhdHVzMSA9IHNuZF9hemYzMzI4X2NvZGVjX2ludyhjaGlwLCBJRFhfSU9fUkVDX0ZMQUdTKTsKLQotCQkvKiBzdG9wIHJlY29yZGluZyAqLwotCQlzdGF0dXMxICY9IH5ETUFfUkVTVU1FOwotCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNoaXAsIElEWF9JT19SRUNfRkxBR1MsIHN0YXR1czEpOwotCi0JCXN0YXR1czEgfD0gRE1BX1BMQVlfU09NRVRISU5HMTsKLQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjaGlwLCBJRFhfSU9fUkVDX0ZMQUdTLCBzdGF0dXMxKTsKLQotCQlzdGF0dXMxICY9IH5ETUFfUExBWV9TT01FVEhJTkcxOwotCQlzbmRfYXpmMzMyOF9jb2RlY19vdXR3KGNoaXAsIElEWF9JT19SRUNfRkxBR1MsIHN0YXR1czEpOwotCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwotCQlzbmRfYXpmMzMyOF9jb2RlY19hY3Rpdml0eShjaGlwLCBBWkZfQ0FQVFVSRSwgMCk7Ci0KLQkJc25kX2F6ZjMzMjhfZGJncGxheSgiU1RPUFBFRCBDQVBUVVJFXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgotCQlzbmRfYXpmMzMyOF9kYmdwbGF5KCJTVVNQRU5EIENBUFRVUkVcbiIpOwotCQkvKiBtYWtlIHN1cmUgcmVjb3JkaW5nIGlzIHN0b3BwZWQgKi8KLQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0dyhjaGlwLCBJRFhfSU9fUkVDX0ZMQUdTLAotCQkJc25kX2F6ZjMzMjhfY29kZWNfaW53KGNoaXAsIElEWF9JT19SRUNfRkxBR1MpICYgfkRNQV9SRVNVTUUpOwotCQlicmVhazsKLSAgICAgICAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJGSVhNRTogU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSCBOSVkhXG4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJGSVhNRTogU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRSBOSVkhXG4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJGSVhNRTogdW5rbm93biB0cmlnZ2VyIG1vZGUhXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzbmRfYXpmMzMyOF9kYmdjYWxsbGVhdmUoKTsKLQlyZXR1cm4gcmVzdWx0Oworc3RhdGljIGludAorc25kX2F6ZjMzMjhfY29kZWNfaTJzX291dF90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXJldHVybiBzbmRfYXpmMzMyOF9jb2RlY190cmlnZ2VyKEFaRl9DT0RFQ19JMlNfT1VULCBzdWJzdHJlYW0sIGNtZCk7CiB9CiAKIHN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAotc25kX2F6ZjMzMjhfcGxheWJhY2tfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3NuZF9hemYzMzI4X2NvZGVjX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgIGVudW0gc25kX2F6ZjMzMjhfY29kZWNfdHlwZSBjb2RlY190eXBlCispCiB7Ci0Jc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWNvbnN0IHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwljb25zdCBzdHJ1Y3Qgc25kX2F6ZjMzMjhfY29kZWNfZGF0YSAqY29kZWMgPSAmY2hpcC0+Y29kZWNzW2NvZGVjX3R5cGVdOwogCXVuc2lnbmVkIGxvbmcgYnVmcHRyLCByZXN1bHQ7CiAJc25kX3BjbV91ZnJhbWVzX3QgZnJtcmVzOwogCiAjaWZkZWYgUVVFUllfSEFSRFdBUkUKLQlidWZwdHIgPSBzbmRfYXpmMzMyOF9jb2RlY19pbmwoY2hpcCwgSURYX0lPX1BMQVlfRE1BX1NUQVJUXzEpOworCWJ1ZnB0ciA9IHNuZF9hemYzMzI4X2NvZGVjX2lubChjb2RlYywgSURYX0lPX0NPREVDX0RNQV9TVEFSVF8xKTsKICNlbHNlCiAJYnVmcHRyID0gc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkcjsKICNlbmRpZgotCXJlc3VsdCA9IHNuZF9hemYzMzI4X2NvZGVjX2lubChjaGlwLCBJRFhfSU9fUExBWV9ETUFfQ1VSUlBPUyk7CisJcmVzdWx0ID0gc25kX2F6ZjMzMjhfY29kZWNfaW5sKGNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX0NVUlJQT1MpOwogCiAJLyogY2FsY3VsYXRlIG9mZnNldCAqLwogCXJlc3VsdCAtPSBidWZwdHI7CiAJZnJtcmVzID0gYnl0ZXNfdG9fZnJhbWVzKCBzdWJzdHJlYW0tPnJ1bnRpbWUsIHJlc3VsdCk7Ci0Jc25kX2F6ZjMzMjhfZGJncGxheSgiUExBWSBAIDB4JThseCwgZnJhbWVzICU4bGRcbiIsIHJlc3VsdCwgZnJtcmVzKTsKKwlzbmRfYXpmMzMyOF9kYmdjb2RlYygiJXMgQCAweCU4bHgsIGZyYW1lcyAlOGxkXG4iLAorCQkJCWNvZGVjLT5uYW1lLCByZXN1bHQsIGZybXJlcyk7CiAJcmV0dXJuIGZybXJlczsKIH0KIAogc3RhdGljIHNuZF9wY21fdWZyYW1lc190Ci1zbmRfYXpmMzMyOF9jYXB0dXJlX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzbmRfYXpmMzMyOF9jb2RlY19wbGF5YmFja19wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCXN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQl1bnNpZ25lZCBsb25nIGJ1ZnB0ciwgcmVzdWx0OwotCXNuZF9wY21fdWZyYW1lc190IGZybXJlczsKKwlyZXR1cm4gc25kX2F6ZjMzMjhfY29kZWNfcG9pbnRlcihzdWJzdHJlYW0sIEFaRl9DT0RFQ19QTEFZQkFDSyk7Cit9CiAKLSNpZmRlZiBRVUVSWV9IQVJEV0FSRQotCWJ1ZnB0ciA9IHNuZF9hemYzMzI4X2NvZGVjX2lubChjaGlwLCBJRFhfSU9fUkVDX0RNQV9TVEFSVF8xKTsKLSNlbHNlCi0JYnVmcHRyID0gc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkcjsKLSNlbmRpZgotCXJlc3VsdCA9IHNuZF9hemYzMzI4X2NvZGVjX2lubChjaGlwLCBJRFhfSU9fUkVDX0RNQV9DVVJSUE9TKTsKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX2F6ZjMzMjhfY29kZWNfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiBzbmRfYXpmMzMyOF9jb2RlY19wb2ludGVyKHN1YnN0cmVhbSwgQVpGX0NPREVDX0NBUFRVUkUpOworfQogCi0JLyogY2FsY3VsYXRlIG9mZnNldCAqLwotCXJlc3VsdCAtPSBidWZwdHI7Ci0JZnJtcmVzID0gYnl0ZXNfdG9fZnJhbWVzKCBzdWJzdHJlYW0tPnJ1bnRpbWUsIHJlc3VsdCk7Ci0Jc25kX2F6ZjMzMjhfZGJncGxheSgiUkVDICBAIDB4JThseCwgZnJhbWVzICU4bGRcbiIsIHJlc3VsdCwgZnJtcmVzKTsKLQlyZXR1cm4gZnJtcmVzOworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CitzbmRfYXpmMzMyOF9jb2RlY19pMnNfb3V0X3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIHNuZF9hemYzMzI4X2NvZGVjX3BvaW50ZXIoc3Vic3RyZWFtLCBBWkZfQ09ERUNfSTJTX09VVCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpZmRlZiBTVVBQT1JUX0dBTUVQT1JUCiBzdGF0aWMgaW5saW5lIHZvaWQKLXNuZF9hemYzMzI4X2dhbWVwb3J0X2lycV9lbmFibGUoc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLCBpbnQgZW5hYmxlKQorc25kX2F6ZjMzMjhfZ2FtZXBvcnRfaXJxX2VuYWJsZShzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsCisJCQkJYm9vbCBlbmFibGUKKykKIHsKIAlzbmRfYXpmMzMyOF9pb19yZWdfc2V0YigKIAkJY2hpcC0+Z2FtZV9pbytJRFhfR0FNRV9IV0NPTkZJRywKQEAgLTE0MDAsNyArMTQwNiw5IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotc25kX2F6ZjMzMjhfZ2FtZXBvcnRfbGVnYWN5X2FkZHJlc3NfZW5hYmxlKHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCwgaW50IGVuYWJsZSkKK3NuZF9hemYzMzI4X2dhbWVwb3J0X2xlZ2FjeV9hZGRyZXNzX2VuYWJsZShzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAsCisJCQkJCSAgIGJvb2wgZW5hYmxlCispCiB7CiAJc25kX2F6ZjMzMjhfaW9fcmVnX3NldGIoCiAJCWNoaXAtPmdhbWVfaW8rSURYX0dBTUVfSFdDT05GSUcsCkBAIC0xNDA5LDEwICsxNDE3LDI3IEBACiAJKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1zbmRfYXpmMzMyOF9nYW1lcG9ydF9heGlzX2NpcmN1aXRfZW5hYmxlKHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCwgaW50IGVuYWJsZSkKK3N0YXRpYyB2b2lkCitzbmRfYXpmMzMyOF9nYW1lcG9ydF9zZXRfY291bnRlcl9mcmVxdWVuY3koc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgZnJlcV9jZmcKKykKIHsKLQlzbmRfYXpmMzMyOF9jb2RlY19yZWdfNkFIX3VwZGF0ZSgKKwlzbmRfYXpmMzMyOF9pb19yZWdfc2V0YigKKwkJY2hpcC0+Z2FtZV9pbytJRFhfR0FNRV9IV0NPTkZJRywKKwkJMHgwMiwKKwkJKGZyZXFfY2ZnICYgMSkgIT0gMAorCSk7CisJc25kX2F6ZjMzMjhfaW9fcmVnX3NldGIoCisJCWNoaXAtPmdhbWVfaW8rSURYX0dBTUVfSFdDT05GSUcsCisJCTB4MDQsCisJCShmcmVxX2NmZyAmIDIpICE9IDAKKwkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NuZF9hemYzMzI4X2dhbWVwb3J0X2F4aXNfY2lyY3VpdF9lbmFibGUoc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLCBib29sIGVuYWJsZSkKK3sKKwlzbmRfYXpmMzMyOF9jdHJsX3JlZ182QUhfdXBkYXRlKAogCQljaGlwLCBJT182QV9TT01FVEhJTkcyX0dBTUVQT1JULCBlbmFibGUKIAkpOwogfQpAQCAtMTQ0Nyw2ICsxNDcyLDggQEAKIAkJYnJlYWs7CiAJfQogCisJc25kX2F6ZjMzMjhfZ2FtZXBvcnRfc2V0X2NvdW50ZXJfZnJlcXVlbmN5KGNoaXAsCisJCQkJR0FNRV9IV0NGR19BRENfQ09VTlRFUl9GUkVRX1NURCk7CiAJc25kX2F6ZjMzMjhfZ2FtZXBvcnRfYXhpc19jaXJjdWl0X2VuYWJsZShjaGlwLCAocmVzID09IDApKTsKIAogCXJldHVybiByZXM7CkBAIC0xNDU4LDYgKzE0ODUsOCBAQAogCXN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCA9IGdhbWVwb3J0X2dldF9wb3J0X2RhdGEoZ2FtZXBvcnQpOwogCiAJc25kX2F6ZjMzMjhfZGJnZ2FtZSgiZ2FtZXBvcnRfY2xvc2VcbiIpOworCXNuZF9hemYzMzI4X2dhbWVwb3J0X3NldF9jb3VudGVyX2ZyZXF1ZW5jeShjaGlwLAorCQkJCUdBTUVfSFdDRkdfQURDX0NPVU5URVJfRlJFUV8xXzIwMCk7CiAJc25kX2F6ZjMzMjhfZ2FtZXBvcnRfYXhpc19jaXJjdWl0X2VuYWJsZShjaGlwLCAwKTsKIH0KIApAQCAtMTQ5MSw3ICsxNTIwLDcgQEAKIAogCXZhbCA9IHNuZF9hemYzMzI4X2dhbWVfaW5iKGNoaXAsIElEWF9HQU1FX0FYRVNfQ09ORklHKTsKIAlpZiAodmFsICYgR0FNRV9BWEVTX1NBTVBMSU5HX1JFQURZKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hpcC0+YXhlcyk7ICsraSkgewogCQkJLyogY29uZmlndXJlIHRoZSBheGlzIHRvIHJlYWQgKi8KIAkJCXZhbCA9IChpIDw8IDQpIHwgMHgwZjsKIAkJCXNuZF9hemYzMzI4X2dhbWVfb3V0YihjaGlwLCBJRFhfR0FNRV9BWEVTX0NPTkZJRywgdmFsKTsKQEAgLTE1MTQsNyArMTU0Myw3IEBACiAJc25kX2F6ZjMzMjhfZ2FtZV9vdXR3KGNoaXAsIElEWF9HQU1FX0FYSVNfVkFMVUUsIDB4ZmZmZik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGlwLT5heGVzKTsgaSsrKSB7CiAJCWF4ZXNbaV0gPSBjaGlwLT5heGVzW2ldOwogCQlpZiAoYXhlc1tpXSA9PSAweGZmZmYpCiAJCQlheGVzW2ldID0gLTE7CkBAIC0xNTUyLDYgKzE1ODEsOCBAQAogCS8qIERJU0FCTEUgbGVnYWN5IGFkZHJlc3M6IHdlIGRvbid0IG5lZWQgaXQhICovCiAJc25kX2F6ZjMzMjhfZ2FtZXBvcnRfbGVnYWN5X2FkZHJlc3NfZW5hYmxlKGNoaXAsIDApOwogCisJc25kX2F6ZjMzMjhfZ2FtZXBvcnRfc2V0X2NvdW50ZXJfZnJlcXVlbmN5KGNoaXAsCisJCQkJR0FNRV9IV0NGR19BRENfQ09VTlRFUl9GUkVRXzFfMjAwKTsKIAlzbmRfYXpmMzMyOF9nYW1lcG9ydF9heGlzX2NpcmN1aXRfZW5hYmxlKGNoaXAsIDApOwogCiAJZ2FtZXBvcnRfcmVnaXN0ZXJfcG9ydChjaGlwLT5nYW1lcG9ydCk7CkBAIC0xNTg1LDQwICsxNjE2LDc3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHNuZF9hemYzMzI4X2lycV9sb2dfdW5rbm93bl90eXBlKHU4IHdoaWNoKQogewotCXNuZF9hemYzMzI4X2RiZ3BsYXkoCisJc25kX2F6ZjMzMjhfZGJnY29kZWMoCiAJImF6dDMzMjg6IHVua25vd24gSVJRIHR5cGUgKCV4KSBvY2N1cnJlZCwgcGxlYXNlIHJlcG9ydCFcbiIsCiAJCXdoaWNoCiAJKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitzbmRfYXpmMzMyOF9jb2RlY19pbnRlcnJ1cHQoc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLCB1OCBzdGF0dXMpCit7CisJdTggd2hpY2g7CisJZW51bSBzbmRfYXpmMzMyOF9jb2RlY190eXBlIGNvZGVjX3R5cGU7CisJY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4X2NvZGVjX2RhdGEgKmNvZGVjOworCisJZm9yIChjb2RlY190eXBlID0gQVpGX0NPREVDX1BMQVlCQUNLOworCQkgY29kZWNfdHlwZSA8PSBBWkZfQ09ERUNfSTJTX09VVDsKKwkJCSArK2NvZGVjX3R5cGUpIHsKKworCQkvKiBza2lwIGNvZGVjIGlmIHRoZXJlJ3Mgbm8gaW50ZXJydXB0IGZvciBpdCAqLworCQlpZiAoIShzdGF0dXMgJiAoMSA8PCBjb2RlY190eXBlKSkpCisJCQljb250aW51ZTsKKworCQljb2RlYyA9ICZjaGlwLT5jb2RlY3NbY29kZWNfdHlwZV07CisKKwkJc3Bpbl9sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisJCXdoaWNoID0gc25kX2F6ZjMzMjhfY29kZWNfaW5iKGNvZGVjLCBJRFhfSU9fQ09ERUNfSVJRVFlQRSk7CisJCS8qIGFjayBhbGwgSVJRIHR5cGVzIGltbWVkaWF0ZWx5ICovCisJCXNuZF9hemYzMzI4X2NvZGVjX291dGIoY29kZWMsIElEWF9JT19DT0RFQ19JUlFUWVBFLCB3aGljaCk7CisJCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisKKwkJaWYgKChjaGlwLT5wY21bY29kZWNfdHlwZV0pICYmIChjb2RlYy0+c3Vic3RyZWFtKSkgeworCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjb2RlYy0+c3Vic3RyZWFtKTsKKwkJCXNuZF9hemYzMzI4X2RiZ2NvZGVjKCIlcyBwZXJpb2QgZG9uZSAoIyV4KSwgQCAleFxuIiwKKwkJCQljb2RlYy0+bmFtZSwKKwkJCQl3aGljaCwKKwkJCQlzbmRfYXpmMzMyOF9jb2RlY19pbmwoCisJCQkJCWNvZGVjLCBJRFhfSU9fQ09ERUNfRE1BX0NVUlJQT1MKKwkJCQkpCisJCQkpOworCQl9IGVsc2UKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF6dDMzMjg6IGlycSBoYW5kbGVyIHByb2JsZW0hXG4iKTsKKwkJaWYgKHdoaWNoICYgSVJRX1NPTUVUSElORykKKwkJCXNuZF9hemYzMzI4X2lycV9sb2dfdW5rbm93bl90eXBlKHdoaWNoKTsKKwl9Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdAogc25kX2F6ZjMzMjhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAgPSBkZXZfaWQ7Ci0JdTggc3RhdHVzLCB3aGljaDsKLSNpZiBERUJVR19QTEFZX1JFQworCXU4IHN0YXR1czsKKyNpZiBERUJVR19DT0RFQwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIGlycV9jb3VudDsKICNlbmRpZgogCi0Jc3RhdHVzID0gc25kX2F6ZjMzMjhfY29kZWNfaW5iKGNoaXAsIElEWF9JT19JUlFTVEFUVVMpOworCXN0YXR1cyA9IHNuZF9hemYzMzI4X2N0cmxfaW5iKGNoaXAsIElEWF9JT19JUlFTVEFUVVMpOwogCiAgICAgICAgIC8qIGZhc3QgcGF0aCBvdXQsIHRvIGVhc2UgaW50ZXJydXB0IHNoYXJpbmcgKi8KIAlpZiAoIShzdGF0dXMgJgotCQkoSVJRX1BMQVlCQUNLfElSUV9SRUNPUkRJTkd8SVJRX0dBTUVQT1JUfElSUV9NUFU0MDF8SVJRX1RJTUVSKQorCQkoSVJRX1BMQVlCQUNLfElSUV9SRUNPUkRJTkd8SVJRX0kyU19PVVQKKwkJfElSUV9HQU1FUE9SVHxJUlFfTVBVNDAxfElSUV9USU1FUikKIAkpKQogCQlyZXR1cm4gSVJRX05PTkU7IC8qIG11c3QgYmUgaW50ZXJydXB0IGZvciBhbm90aGVyIGRldmljZSAqLwogCi0Jc25kX2F6ZjMzMjhfZGJncGxheSgKLQkJImlycV9jb3VudCAlbGQhIElEWF9JT19QTEFZX0ZMQUdTICUwNHgsICIKLQkJIklEWF9JT19QTEFZX0lSUVRZUEUgJTA0eCwgSURYX0lPX0lSUVNUQVRVUyAlMDR4XG4iLAorCXNuZF9hemYzMzI4X2RiZ2NvZGVjKAorCQkiaXJxX2NvdW50ICVsZCEgSURYX0lPX0lSUVNUQVRVUyAlMDR4XG4iLAogCQkJaXJxX2NvdW50KysgLyogZGVidWctb25seSAqLywKLQkJCXNuZF9hemYzMzI4X2NvZGVjX2ludyhjaGlwLCBJRFhfSU9fUExBWV9GTEFHUyksCi0JCQlzbmRfYXpmMzMyOF9jb2RlY19pbncoY2hpcCwgSURYX0lPX1BMQVlfSVJRVFlQRSksCiAJCQlzdGF0dXMKIAkpOwogCiAJaWYgKHN0YXR1cyAmIElSUV9USU1FUikgewotCQkvKiBzbmRfYXpmMzMyOF9kYmdwbGF5KCJ0aW1lciAlbGRcbiIsCisJCS8qIHNuZF9hemYzMzI4X2RiZ2NvZGVjKCJ0aW1lciAlbGRcbiIsCiAJCQlzbmRfYXpmMzMyOF9jb2RlY19pbmwoY2hpcCwgSURYX0lPX1RJTUVSX1ZBTFVFKQogCQkJCSYgVElNRVJfVkFMVUVfTUFTSwogCQkpOyAqLwpAQCAtMTYyNiw3MSArMTY5NCwzNiBAQAogCQkJc25kX3RpbWVyX2ludGVycnVwdChjaGlwLT50aW1lciwgY2hpcC0+dGltZXItPnN0aWNrcyk7CiAJCS8qIEFDSyB0aW1lciAqLwogICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOwotCQlzbmRfYXpmMzMyOF9jb2RlY19vdXRiKGNoaXAsIElEWF9JT19USU1FUl9WQUxVRSArIDMsIDB4MDcpOworCQlzbmRfYXpmMzMyOF9jdHJsX291dGIoY2hpcCwgSURYX0lPX1RJTUVSX1ZBTFVFICsgMywgMHgwNyk7CiAJCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7Ci0JCXNuZF9hemYzMzI4X2RiZ3BsYXkoImF6dDMzMjg6IHRpbWVyIElSUVxuIik7CisJCXNuZF9hemYzMzI4X2RiZ2NvZGVjKCJhenQzMzI4OiB0aW1lciBJUlFcbiIpOwogCX0KLQlpZiAoc3RhdHVzICYgSVJRX1BMQVlCQUNLKSB7Ci0JCXNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOwotCQl3aGljaCA9IHNuZF9hemYzMzI4X2NvZGVjX2luYihjaGlwLCBJRFhfSU9fUExBWV9JUlFUWVBFKTsKLQkJLyogYWNrIGFsbCBJUlEgdHlwZXMgaW1tZWRpYXRlbHkgKi8KLQkJc25kX2F6ZjMzMjhfY29kZWNfb3V0YihjaGlwLCBJRFhfSU9fUExBWV9JUlFUWVBFLCB3aGljaCk7Ci0gICAgICAgICAgICAgICAJc3Bpbl91bmxvY2soJmNoaXAtPnJlZ19sb2NrKTsKIAotCQlpZiAoY2hpcC0+cGNtICYmIGNoaXAtPmF1ZGlvX3N0cmVhbVtBWkZfUExBWUJBQ0tdLnN1YnN0cmVhbSkgewotCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZCgKLQkJCQljaGlwLT5hdWRpb19zdHJlYW1bQVpGX1BMQVlCQUNLXS5zdWJzdHJlYW0KLQkJCSk7Ci0JCQlzbmRfYXpmMzMyOF9kYmdwbGF5KCJQTEFZIHBlcmlvZCBkb25lICgjJXgpLCBAICV4XG4iLAotCQkJCXdoaWNoLAotCQkJCXNuZF9hemYzMzI4X2NvZGVjX2lubCgKLQkJCQkJY2hpcCwgSURYX0lPX1BMQVlfRE1BX0NVUlJQT1MKLQkJCQkpCi0JCQkpOwotCQl9IGVsc2UKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF6dDMzMjg6IGlycSBoYW5kbGVyIHByb2JsZW0hXG4iKTsKLQkJaWYgKHdoaWNoICYgSVJRX1BMQVlfU09NRVRISU5HKQotCQkJc25kX2F6ZjMzMjhfaXJxX2xvZ191bmtub3duX3R5cGUod2hpY2gpOwotCX0KLQlpZiAoc3RhdHVzICYgSVJRX1JFQ09SRElORykgewotICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmY2hpcC0+cmVnX2xvY2spOwotCQl3aGljaCA9IHNuZF9hemYzMzI4X2NvZGVjX2luYihjaGlwLCBJRFhfSU9fUkVDX0lSUVRZUEUpOwotCQkvKiBhY2sgYWxsIElSUSB0eXBlcyBpbW1lZGlhdGVseSAqLwotCQlzbmRfYXpmMzMyOF9jb2RlY19vdXRiKGNoaXAsIElEWF9JT19SRUNfSVJRVFlQRSwgd2hpY2gpOwotCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOworCWlmIChzdGF0dXMgJiAoSVJRX1BMQVlCQUNLfElSUV9SRUNPUkRJTkd8SVJRX0kyU19PVVQpKQorCQlzbmRfYXpmMzMyOF9jb2RlY19pbnRlcnJ1cHQoY2hpcCwgc3RhdHVzKTsKIAotCQlpZiAoY2hpcC0+cGNtICYmIGNoaXAtPmF1ZGlvX3N0cmVhbVtBWkZfQ0FQVFVSRV0uc3Vic3RyZWFtKSB7Ci0JCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKAotCQkJCWNoaXAtPmF1ZGlvX3N0cmVhbVtBWkZfQ0FQVFVSRV0uc3Vic3RyZWFtCi0JCQkpOwotCQkJc25kX2F6ZjMzMjhfZGJncGxheSgiUkVDICBwZXJpb2QgZG9uZSAoIyV4KSwgQCAleFxuIiwKLQkJCQl3aGljaCwKLQkJCQlzbmRfYXpmMzMyOF9jb2RlY19pbmwoCi0JCQkJCWNoaXAsIElEWF9JT19SRUNfRE1BX0NVUlJQT1MKLQkJCQkpCi0JCQkpOwotCQl9IGVsc2UKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF6dDMzMjg6IGlycSBoYW5kbGVyIHByb2JsZW0hXG4iKTsKLQkJaWYgKHdoaWNoICYgSVJRX1JFQ19TT01FVEhJTkcpCi0JCQlzbmRfYXpmMzMyOF9pcnFfbG9nX3Vua25vd25fdHlwZSh3aGljaCk7Ci0JfQogCWlmIChzdGF0dXMgJiBJUlFfR0FNRVBPUlQpCiAJCXNuZF9hemYzMzI4X2dhbWVwb3J0X2ludGVycnVwdChjaGlwKTsKKwogCS8qIE1QVTQwMSBoYXMgbGVzcyBjcml0aWNhbCBJUlEgcmVxdWlyZW1lbnRzCiAJICogdGhhbiB0aW1lciBhbmQgcGxheWJhY2svcmVjb3JkaW5nLCByaWdodD8gKi8KIAlpZiAoc3RhdHVzICYgSVJRX01QVTQwMSkgewogCQlzbmRfbXB1NDAxX3VhcnRfaW50ZXJydXB0KGlycSwgY2hpcC0+cm1pZGktPnByaXZhdGVfZGF0YSk7CiAKIAkJLyogaG1tLCBkbyB3ZSBoYXZlIHRvIGFjayB0aGUgSVJRIGhlcmUgc29tZWhvdz8KLQkJICogSWYgc28sIHRoZW4gSSBkb24ndCBrbm93IGhvdy4uLiAqLwotCQlzbmRfYXpmMzMyOF9kYmdwbGF5KCJhenQzMzI4OiBNUFU0MDEgSVJRXG4iKTsKKwkJICogSWYgc28sIHRoZW4gSSBkb24ndCBrbm93IGhvdyB5ZXQuLi4gKi8KKwkJc25kX2F6ZjMzMjhfZGJnY29kZWMoImF6dDMzMjg6IE1QVTQwMSBJUlFcbiIpOwogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9hemYzMzI4X3BsYXliYWNrID0KKy8qIGFzIGxvbmcgYXMgd2UgdGhpbmsgd2UgaGF2ZSBpZGVudGljYWwgc25kX3BjbV9oYXJkd2FyZSBwYXJhbWV0ZXJzCisgICBmb3IgcGxheWJhY2ssIGNhcHR1cmUgYW5kIGkycyBvdXQsIHdlIGNhbiB1c2UgdGhlIHNhbWUgcGh5c2ljYWwgc3RydWN0CisgICBzaW5jZSB0aGUgc3RydWN0IGlzIHNpbXBseSBiZWluZyBjb3BpZWQgaW50byBhIG1lbWJlci4KKyovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX2F6ZjMzMjhfaGFyZHdhcmUgPQogewogCS8qIEZJWE1FISEgQ29ycmVjdD8gKi8KIAkuaW5mbyA9CQkJU05EUlZfUENNX0lORk9fTU1BUCB8CkBAIC0xNzE4LDMxICsxNzUxLDYgQEAKIAkuZmlmb19zaXplID0JCTAsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX2F6ZjMzMjhfY2FwdHVyZSA9Ci17Ci0JLyogRklYTUUgKi8KLQkuaW5mbyA9CQkJU05EUlZfUENNX0lORk9fTU1BUCB8Ci0JCQkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAotCQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQsCi0JLmZvcm1hdHMgPQkJU05EUlZfUENNX0ZNVEJJVF9TOCB8Ci0JCQkJU05EUlZfUENNX0ZNVEJJVF9VOCB8Ci0JCQkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAotCQkJCVNORFJWX1BDTV9GTVRCSVRfVTE2X0xFLAotCS5yYXRlcyA9CQlTTkRSVl9QQ01fUkFURV81NTEyIHwKLQkJCQlTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwIHwKLQkJCQlTTkRSVl9QQ01fUkFURV9LTk9ULAotCS5yYXRlX21pbiA9CQlBWkZfRlJFUV80MDAwLAotCS5yYXRlX21heCA9CQlBWkZfRlJFUV82NjIwMCwKLQkuY2hhbm5lbHNfbWluID0JCTEsCi0JLmNoYW5uZWxzX21heCA9CQkyLAotCS5idWZmZXJfYnl0ZXNfbWF4ID0JNjU1MzYsCi0JLnBlcmlvZF9ieXRlc19taW4gPQk2NCwKLQkucGVyaW9kX2J5dGVzX21heCA9CTY1NTM2LAotCS5wZXJpb2RzX21pbiA9CQkxLAotCS5wZXJpb2RzX21heCA9CQkxMDI0LAotCS5maWZvX3NpemUgPQkJMCwKLX07Ci0KIAogc3RhdGljIHVuc2lnbmVkIGludCBzbmRfYXpmMzMyOF9maXhlZF9yYXRlc1tdID0gewogCUFaRl9GUkVRXzQwMDAsCkBAIC0xNzcwLDE0ICsxNzc4LDE5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQKLXNuZF9hemYzMzI4X3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzbmRfYXpmMzMyOF9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJICAgICBlbnVtIHNuZF9hemYzMzI4X2NvZGVjX3R5cGUgY29kZWNfdHlwZQorKQogewogCXN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCiAJc25kX2F6ZjMzMjhfZGJnY2FsbGVudGVyKCk7Ci0JY2hpcC0+YXVkaW9fc3RyZWFtW0FaRl9QTEFZQkFDS10uc3Vic3RyZWFtID0gc3Vic3RyZWFtOwotCXJ1bnRpbWUtPmh3ID0gc25kX2F6ZjMzMjhfcGxheWJhY2s7CisJY2hpcC0+Y29kZWNzW2NvZGVjX3R5cGVdLnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKworCS8qIHNhbWUgcGFyYW1ldGVycyBmb3IgYWxsIG91ciBjb2RlY3MgLSBhdCBsZWFzdCB3ZSB0aGluayBzby4uLiAqLworCXJ1bnRpbWUtPmh3ID0gc25kX2F6ZjMzMjhfaGFyZHdhcmU7CisKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKIAkJCQkgICAmc25kX2F6ZjMzMjhfaHdfY29uc3RyYWludHNfcmF0ZXMpOwogCXNuZF9hemYzMzI4X2RiZ2NhbGxsZWF2ZSgpOwpAQCAtMTc4NSwxNiArMTc5OCwzMiBAQAogfQogCiBzdGF0aWMgaW50CitzbmRfYXpmMzMyOF9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiBzbmRfYXpmMzMyOF9wY21fb3BlbihzdWJzdHJlYW0sIEFaRl9DT0RFQ19QTEFZQkFDSyk7Cit9CisKK3N0YXRpYyBpbnQKIHNuZF9hemYzMzI4X2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKKwlyZXR1cm4gc25kX2F6ZjMzMjhfcGNtX29wZW4oc3Vic3RyZWFtLCBBWkZfQ09ERUNfQ0FQVFVSRSk7Cit9CisKK3N0YXRpYyBpbnQKK3NuZF9hemYzMzI4X2kyc19vdXRfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gc25kX2F6ZjMzMjhfcGNtX29wZW4oc3Vic3RyZWFtLCBBWkZfQ09ERUNfSTJTX09VVCk7Cit9CisKK3N0YXRpYyBpbnQKK3NuZF9hemYzMzI4X3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJICAgICAgZW51bSBzbmRfYXpmMzMyOF9jb2RlY190eXBlIGNvZGVjX3R5cGUKKykKK3sKIAlzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAogCXNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpOwotCWNoaXAtPmF1ZGlvX3N0cmVhbVtBWkZfQ0FQVFVSRV0uc3Vic3RyZWFtID0gc3Vic3RyZWFtOwotCXJ1bnRpbWUtPmh3ID0gc25kX2F6ZjMzMjhfY2FwdHVyZTsKLQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKLQkJCQkgICAmc25kX2F6ZjMzMjhfaHdfY29uc3RyYWludHNfcmF0ZXMpOworCWNoaXAtPmNvZGVjc1tjb2RlY190eXBlXS5zdWJzdHJlYW0gPSBOVUxMOwogCXNuZF9hemYzMzI4X2RiZ2NhbGxsZWF2ZSgpOwogCXJldHVybiAwOwogfQpAQCAtMTgwMiwyMyArMTgzMSwxOSBAQAogc3RhdGljIGludAogc25kX2F6ZjMzMjhfcGxheWJhY2tfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7Ci0Jc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCi0Jc25kX2F6ZjMzMjhfZGJnY2FsbGVudGVyKCk7Ci0JY2hpcC0+YXVkaW9fc3RyZWFtW0FaRl9QTEFZQkFDS10uc3Vic3RyZWFtID0gTlVMTDsKLQlzbmRfYXpmMzMyOF9kYmdjYWxsbGVhdmUoKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX2F6ZjMzMjhfcGNtX2Nsb3NlKHN1YnN0cmVhbSwgQVpGX0NPREVDX1BMQVlCQUNLKTsKIH0KIAogc3RhdGljIGludAogc25kX2F6ZjMzMjhfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKLQlzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJcmV0dXJuIHNuZF9hemYzMzI4X3BjbV9jbG9zZShzdWJzdHJlYW0sIEFaRl9DT0RFQ19DQVBUVVJFKTsKK30KIAotCXNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpOwotCWNoaXAtPmF1ZGlvX3N0cmVhbVtBWkZfQ0FQVFVSRV0uc3Vic3RyZWFtID0gTlVMTDsKLQlzbmRfYXpmMzMyOF9kYmdjYWxsbGVhdmUoKTsKLQlyZXR1cm4gMDsKK3N0YXRpYyBpbnQKK3NuZF9hemYzMzI4X2kyc19vdXRfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIHNuZF9hemYzMzI4X3BjbV9jbG9zZShzdWJzdHJlYW0sIEFaRl9DT0RFQ19JMlNfT1VUKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE4MjksOSArMTg1NCw5IEBACiAJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCiAJLmh3X3BhcmFtcyA9CXNuZF9hemYzMzI4X2h3X3BhcmFtcywKIAkuaHdfZnJlZSA9CXNuZF9hemYzMzI4X2h3X2ZyZWUsCi0JLnByZXBhcmUgPQlzbmRfYXpmMzMyOF9wbGF5YmFja19wcmVwYXJlLAotCS50cmlnZ2VyID0Jc25kX2F6ZjMzMjhfcGxheWJhY2tfdHJpZ2dlciwKLQkucG9pbnRlciA9CXNuZF9hemYzMzI4X3BsYXliYWNrX3BvaW50ZXIKKwkucHJlcGFyZSA9CXNuZF9hemYzMzI4X2NvZGVjX3ByZXBhcmUsCisJLnRyaWdnZXIgPQlzbmRfYXpmMzMyOF9jb2RlY19wbGF5YmFja190cmlnZ2VyLAorCS5wb2ludGVyID0Jc25kX2F6ZjMzMjhfY29kZWNfcGxheWJhY2tfcG9pbnRlcgogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfYXpmMzMyOF9jYXB0dXJlX29wcyA9IHsKQEAgLTE4NDAsMzAgKzE4NjUsNjcgQEAKIAkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKIAkuaHdfcGFyYW1zID0Jc25kX2F6ZjMzMjhfaHdfcGFyYW1zLAogCS5od19mcmVlID0Jc25kX2F6ZjMzMjhfaHdfZnJlZSwKLQkucHJlcGFyZSA9CXNuZF9hemYzMzI4X2NhcHR1cmVfcHJlcGFyZSwKLQkudHJpZ2dlciA9CXNuZF9hemYzMzI4X2NhcHR1cmVfdHJpZ2dlciwKLQkucG9pbnRlciA9CXNuZF9hemYzMzI4X2NhcHR1cmVfcG9pbnRlcgorCS5wcmVwYXJlID0Jc25kX2F6ZjMzMjhfY29kZWNfcHJlcGFyZSwKKwkudHJpZ2dlciA9CXNuZF9hemYzMzI4X2NvZGVjX2NhcHR1cmVfdHJpZ2dlciwKKwkucG9pbnRlciA9CXNuZF9hemYzMzI4X2NvZGVjX2NhcHR1cmVfcG9pbnRlcgorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfYXpmMzMyOF9pMnNfb3V0X29wcyA9IHsKKwkub3BlbiA9CQlzbmRfYXpmMzMyOF9pMnNfb3V0X29wZW4sCisJLmNsb3NlID0Jc25kX2F6ZjMzMjhfaTJzX291dF9jbG9zZSwKKwkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0Jc25kX2F6ZjMzMjhfaHdfcGFyYW1zLAorCS5od19mcmVlID0Jc25kX2F6ZjMzMjhfaHdfZnJlZSwKKwkucHJlcGFyZSA9CXNuZF9hemYzMzI4X2NvZGVjX3ByZXBhcmUsCisJLnRyaWdnZXIgPQlzbmRfYXpmMzMyOF9jb2RlY19pMnNfb3V0X3RyaWdnZXIsCisJLnBvaW50ZXIgPQlzbmRfYXpmMzMyOF9jb2RlY19pMnNfb3V0X3BvaW50ZXIKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0Ci1zbmRfYXpmMzMyOF9wY20oc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwLCBpbnQgZGV2aWNlKQorc25kX2F6ZjMzMjhfcGNtKHN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCkKIHsKK2VudW0geyBBWkZfUENNREVWX1NURCwgQVpGX1BDTURFVl9JMlNfT1VULCBOVU1fQVpGX1BDTURFVlMgfTsgLyogcGNtIGRldmljZXMgKi8KKwogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycjsKIAogCXNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpOwotCWlmICgoZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIkFaRjMzMjggRFNQIiwgZGV2aWNlLCAxLCAxLCAmcGNtKSkgPCAwKQorCisJZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIkFaRjMzMjggRFNQIiwgQVpGX1BDTURFVl9TVEQsCisJCQkJCQkJCTEsIDEsICZwY20pOworCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssICZzbmRfYXpmMzMyOF9wbGF5YmFja19vcHMpOwotCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF9hemYzMzI4X2NhcHR1cmVfb3BzKTsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAorCQkJCQkJJnNuZF9hemYzMzI4X3BsYXliYWNrX29wcyk7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAorCQkJCQkJJnNuZF9hemYzMzI4X2NhcHR1cmVfb3BzKTsKIAogCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAlwY20tPmluZm9fZmxhZ3MgPSAwOwogCXN0cmNweShwY20tPm5hbWUsIGNoaXAtPmNhcmQtPnNob3J0bmFtZSk7Ci0JY2hpcC0+cGNtID0gcGNtOworCS8qIHNhbWUgcGNtIG9iamVjdCBmb3IgcGxheWJhY2svY2FwdHVyZSAoc2VlIHNuZF9wY21fbmV3KCkgYWJvdmUpICovCisJY2hpcC0+cGNtW0FaRl9DT0RFQ19QTEFZQkFDS10gPSBwY207CisJY2hpcC0+cGNtW0FaRl9DT0RFQ19DQVBUVVJFXSA9IHBjbTsKIAogCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCi0JCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwgNjQqMTAyNCwgNjQqMTAyNCk7CisJCQkJCQlzbmRfZG1hX3BjaV9kYXRhKGNoaXAtPnBjaSksCisJCQkJCQkJNjQqMTAyNCwgNjQqMTAyNCk7CisKKwllcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCAiQVpGMzMyOCBJMlMgT1VUIiwgQVpGX1BDTURFVl9JMlNfT1VULAorCQkJCQkJCQkxLCAwLCAmcGNtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAorCQkJCQkJJnNuZF9hemYzMzI4X2kyc19vdXRfb3BzKTsKKworCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlwY20tPmluZm9fZmxhZ3MgPSAwOworCXN0cmNweShwY20tPm5hbWUsIGNoaXAtPmNhcmQtPnNob3J0bmFtZSk7CisJY2hpcC0+cGNtW0FaRl9DT0RFQ19JMlNfT1VUXSA9IHBjbTsKKworCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisJCQkJCQlzbmRfZG1hX3BjaV9kYXRhKGNoaXAtPnBjaSksCisJCQkJCQkJNjQqMTAyNCwgNjQqMTAyNCk7CiAKIAlzbmRfYXpmMzMyOF9kYmdjYWxsbGVhdmUoKTsKIAlyZXR1cm4gMDsKQEAgLTE5MDIsNyArMTk2NCw3IEBACiAJc25kX2F6ZjMzMjhfZGJndGltZXIoInNldHRpbmcgdGltZXIgY291bnRkb3duIHZhbHVlICVkLCBhZGQgQ09VTlRET1dOfElSUVxuIiwgZGVsYXkpOwogCWRlbGF5IHw9IFRJTUVSX0NPVU5URE9XTl9FTkFCTEUgfCBUSU1FUl9JUlFfRU5BQkxFOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCXNuZF9hemYzMzI4X2NvZGVjX291dGwoY2hpcCwgSURYX0lPX1RJTUVSX1ZBTFVFLCBkZWxheSk7CisJc25kX2F6ZjMzMjhfY3RybF9vdXRsKGNoaXAsIElEWF9JT19USU1FUl9WQUxVRSwgZGVsYXkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJc25kX2F6ZjMzMjhfZGJnY2FsbGxlYXZlKCk7CiAJcmV0dXJuIDA7CkBAIC0xOTE5LDcgKzE5ODEsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCS8qIGRpc2FibGUgdGltZXIgY291bnRkb3duIGFuZCBpbnRlcnJ1cHQgKi8KIAkvKiBGSVhNRTogc2hvdWxkIHdlIHdyaXRlIFRJTUVSX0lSUV9BQ0sgaGVyZT8gKi8KLQlzbmRfYXpmMzMyOF9jb2RlY19vdXRiKGNoaXAsIElEWF9JT19USU1FUl9WQUxVRSArIDMsIDApOworCXNuZF9hemYzMzI4X2N0cmxfb3V0YihjaGlwLCBJRFhfSU9fVElNRVJfVkFMVUUgKyAzLCAwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF9hemYzMzI4X2RiZ2NhbGxsZWF2ZSgpOwogCXJldHVybiAwOwpAQCAtMjAzNSw3ICsyMDk3LDcgQEAKIAogCW91dGIodmFsLCByZWcpOwogCi0JcHJpbnRrKEtFUk5fRVJSICJyZWcgJTA0eCBiaXQgJWQ6ICUwMnggJTAyeCAlMDJ4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJyZWcgJTA0eCBiaXQgJWQ6ICUwMnggJTAyeCAlMDJ4XG4iLAogCQkJCXJlZywgYml0LCB2YWwsIHZhbG9mZiwgdmFsb24KIAkpOwogfQpAQCAtMjA0OCw5ICsyMTEwLDkgQEAKIAl1MTYgdG1wOwogCiAJc25kX2F6ZjMzMjhfZGJnbWlzYygKLQkJImNvZGVjX2lvIDB4JWx4LCBnYW1lX2lvIDB4JWx4LCBtcHVfaW8gMHglbHgsICIKKwkJImN0cmxfaW8gMHglbHgsIGdhbWVfaW8gMHglbHgsIG1wdV9pbyAweCVseCwgIgogCQkib3BsM19pbyAweCVseCwgbWl4ZXJfaW8gMHglbHgsIGlycSAlZFxuIiwKLQkJY2hpcC0+Y29kZWNfaW8sIGNoaXAtPmdhbWVfaW8sIGNoaXAtPm1wdV9pbywKKwkJY2hpcC0+Y3RybF9pbywgY2hpcC0+Z2FtZV9pbywgY2hpcC0+bXB1X2lvLAogCQljaGlwLT5vcGwzX2lvLCBjaGlwLT5taXhlcl9pbywgY2hpcC0+aXJxCiAJKTsKIApAQCAtMjA4Myw5ICsyMTQ1LDkgQEAKIAkJCQlpbmIoMHgzOGMgKyB0bXApCiAJCSk7CiAKLQlmb3IgKHRtcCA9IDA7IHRtcCA8IEFaRl9JT19TSVpFX0NPREVDOyB0bXAgKz0gMikKLQkJc25kX2F6ZjMzMjhfZGJnbWlzYygiY29kZWMgMHglMDJ4OiAweCUwNHhcbiIsCi0JCQl0bXAsIHNuZF9hemYzMzI4X2NvZGVjX2ludyhjaGlwLCB0bXApCisJZm9yICh0bXAgPSAwOyB0bXAgPCBBWkZfSU9fU0laRV9DVFJMOyB0bXAgKz0gMikKKwkJc25kX2F6ZjMzMjhfZGJnbWlzYygiY3RybCAweCUwMng6IDB4JTA0eFxuIiwKKwkJCXRtcCwgc25kX2F6ZjMzMjhfY3RybF9pbncoY2hpcCwgdG1wKQogCQkpOwogCiAJZm9yICh0bXAgPSAwOyB0bXAgPCBBWkZfSU9fU0laRV9NSVhFUjsgdG1wICs9IDIpCkBAIC0yMTA2LDcgKzIxNjgsOCBAQAogCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0gewogCQkuZGV2X2ZyZWUgPSAgICAgc25kX2F6ZjMzMjhfZGV2X2ZyZWUsCiAJfTsKLQl1MTYgdG1wOworCXU4IGRtYV9pbml0OworCWVudW0gc25kX2F6ZjMzMjhfY29kZWNfdHlwZSBjb2RlY190eXBlOwogCiAJKnJjaGlwID0gTlVMTDsKIApAQCAtMjEzOCwxNCArMjIwMSwyMSBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9lcnI7CiAKLQljaGlwLT5jb2RlY19pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOworCWNoaXAtPmN0cmxfaW8gID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CiAJY2hpcC0+Z2FtZV9pbyAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAxKTsKIAljaGlwLT5tcHVfaW8gICA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDIpOwotCWNoaXAtPm9wbDNfaW8gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAzKTsKKwljaGlwLT5vcGwzX2lvICA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDMpOwogCWNoaXAtPm1peGVyX2lvID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgNCk7CiAKLQljaGlwLT5hdWRpb19zdHJlYW1bQVpGX1BMQVlCQUNLXS5wb3J0YmFzZSA9IGNoaXAtPmNvZGVjX2lvICsgMHgwMDsKLQljaGlwLT5hdWRpb19zdHJlYW1bQVpGX0NBUFRVUkVdLnBvcnRiYXNlICAgPSBjaGlwLT5jb2RlY19pbyArIDB4MjA7CisJY2hpcC0+Y29kZWNzW0FaRl9DT0RFQ19QTEFZQkFDS10uaW9fYmFzZSA9CisJCQkJY2hpcC0+Y3RybF9pbyArIEFaRl9JT19PRkZTX0NPREVDX1BMQVlCQUNLOworCWNoaXAtPmNvZGVjc1tBWkZfQ09ERUNfUExBWUJBQ0tdLm5hbWUgPSAiUExBWUJBQ0siOworCWNoaXAtPmNvZGVjc1tBWkZfQ09ERUNfQ0FQVFVSRV0uaW9fYmFzZSA9CisJCQkJY2hpcC0+Y3RybF9pbyArIEFaRl9JT19PRkZTX0NPREVDX0NBUFRVUkU7CisJY2hpcC0+Y29kZWNzW0FaRl9DT0RFQ19DQVBUVVJFXS5uYW1lID0gIkNBUFRVUkUiOworCWNoaXAtPmNvZGVjc1tBWkZfQ09ERUNfSTJTX09VVF0uaW9fYmFzZSA9CisJCQkJY2hpcC0+Y3RybF9pbyArIEFaRl9JT19PRkZTX0NPREVDX0kyU19PVVQ7CisJY2hpcC0+Y29kZWNzW0FaRl9DT0RFQ19JMlNfT1VUXS5uYW1lID0gIkkyU19PVVQiOwogCiAJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfYXpmMzMyOF9pbnRlcnJ1cHQsCiAJCQlJUlFGX1NIQVJFRCwgY2FyZC0+c2hvcnRuYW1lLCBjaGlwKSkgewpAQCAtMjE2OCwyMCArMjIzOCwyNSBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9lcnI7CiAKLQkvKiBzaHV0ZG93biBjb2RlY3MgdG8gc2F2ZSBwb3dlciAqLwotCQkvKiBoYXZlIHNuZF9hemYzMzI4X2NvZGVjX2FjdGl2aXR5KCkgYWN0IHByb3Blcmx5ICovCi0JY2hpcC0+YXVkaW9fc3RyZWFtW0FaRl9QTEFZQkFDS10ucnVubmluZyA9IDE7Ci0Jc25kX2F6ZjMzMjhfY29kZWNfYWN0aXZpdHkoY2hpcCwgQVpGX1BMQVlCQUNLLCAwKTsKKwkvKiBzdGFuZGFyZCBjb2RlYyBpbml0IHN0dWZmICovCisJCS8qIGRlZmF1bHQgRE1BIGluaXQgdmFsdWUgKi8KKwlkbWFfaW5pdCA9IERNQV9SVU5fU09NRVRISU5HMnxETUFfRVBJTE9HVUVfU09NRVRISU5HfERNQV9TT01FVEhJTkdfRUxTRTsKIAotCS8qIHN0YW5kYXJkIGNoaXAgaW5pdCBzdHVmZiAqLwotCQkvKiBkZWZhdWx0IElSUSBpbml0IHZhbHVlICovCi0JdG1wID0gRE1BX1BMQVlfU09NRVRISU5HMnxETUFfRVBJTE9HVUVfU09NRVRISU5HfERNQV9TT01FVEhJTkdfRUxTRTsKKwlmb3IgKGNvZGVjX3R5cGUgPSBBWkZfQ09ERUNfUExBWUJBQ0s7CisJCWNvZGVjX3R5cGUgPD0gQVpGX0NPREVDX0kyU19PVVQ7ICsrY29kZWNfdHlwZSkgeworCQlzdHJ1Y3Qgc25kX2F6ZjMzMjhfY29kZWNfZGF0YSAqY29kZWMgPQorCQkJICZjaGlwLT5jb2RlY3NbY29kZWNfdHlwZV07CiAKLQlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7Ci0Jc25kX2F6ZjMzMjhfY29kZWNfb3V0YihjaGlwLCBJRFhfSU9fUExBWV9GTEFHUywgdG1wKTsKLQlzbmRfYXpmMzMyOF9jb2RlY19vdXRiKGNoaXAsIElEWF9JT19SRUNfRkxBR1MsIHRtcCk7Ci0Jc25kX2F6ZjMzMjhfY29kZWNfb3V0YihjaGlwLCBJRFhfSU9fU09NRVRISU5HX0ZMQUdTLCB0bXApOwotCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOworCQkvKiBzaHV0ZG93biBjb2RlY3MgdG8gc2F2ZSBwb3dlciAqLworCQkJLyogaGF2ZSAuLi5jdHJsX2NvZGVjX2FjdGl2aXR5KCkgYWN0IHByb3Blcmx5ICovCisJCWNvZGVjLT5ydW5uaW5nID0gMTsKKwkJc25kX2F6ZjMzMjhfY3RybF9jb2RlY19hY3Rpdml0eShjaGlwLCBjb2RlY190eXBlLCAwKTsKKworCQlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CisJCXNuZF9hemYzMzI4X2NvZGVjX291dGIoY29kZWMsIElEWF9JT19DT0RFQ19ETUFfRkxBR1MsCisJCQkJCQkgZG1hX2luaXQpOworCQlzcGluX3VubG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKKwl9CiAKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CiAKQEAgLTIyMjksOCArMjMwNCwxMSBAQAogCiAJY2FyZC0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAorCS8qIGNob3NlIHRvIHVzZSBNUFU0MDFfSFdfQVpUMjMyMCBJRCBpbnN0ZWFkIG9mIE1QVTQwMV9IV19NUFU0MDEsCisJICAgc2luY2Ugb3VyIGhhcmR3YXJlIG91Z2h0IHRvIGJlIHNpbWlsYXIsIHRodXMgdXNlIHNhbWUgSUQuICovCiAJZXJyID0gc25kX21wdTQwMV91YXJ0X25ldygKLQkJY2FyZCwgMCwgTVBVNDAxX0hXX01QVTQwMSwgY2hpcC0+bXB1X2lvLCBNUFU0MDFfSU5GT19JTlRFR1JBVEVELAorCQljYXJkLCAwLAorCQlNUFU0MDFfSFdfQVpUMjMyMCwgY2hpcC0+bXB1X2lvLCBNUFU0MDFfSU5GT19JTlRFR1JBVEVELAogCQlwY2ktPmlycSwgMCwgJmNoaXAtPnJtaWRpCiAJKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtMjI0NCw3ICsyMzIyLDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXRfZXJyOwogCi0JZXJyID0gc25kX2F6ZjMzMjhfcGNtKGNoaXAsIDApOworCWVyciA9IHNuZF9hemYzMzI4X3BjbShjaGlwKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXRfZXJyOwogCkBAIC0yMjY2LDE0ICsyMzQ0LDE0IEBACiAJb3BsMy0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVpIiwKLQkJY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5jb2RlY19pbywgY2hpcC0+aXJxKTsKKwkJY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5jdHJsX2lvLCBjaGlwLT5pcnEpOwogCiAJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X2VycjsKIAogI2lmZGVmIE1PRFVMRQotCXByaW50aygKKwlwcmludGsoS0VSTl9JTkZPCiAiYXp0MzMyODogU291bmQgZHJpdmVyIGZvciBBenRlY2ggQVpGMzMyOC1iYXNlZCBzb3VuZGNhcmRzIHN1Y2ggYXMgUENJMTY4LlxuIgogImF6dDMzMjg6IEhhcmR3YXJlIHdhcyBjb21wbGV0ZWx5IHVuZG9jdW1lbnRlZCwgdW5mb3J0dW5hdGVseS5cbiIKICJhenQzMzI4OiBGZWVsIGZyZWUgdG8gY29udGFjdCBhbmRpIEFUIGxpc2FzLmRlIGZvciBidWcgcmVwb3J0cyBldGMuIVxuIgpAQCAtMjMwOCwzNiArMjM4Niw1MiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW5saW5lIHZvaWQKK3NuZF9hemYzMzI4X3N1c3BlbmRfcmVncyh1bnNpZ25lZCBsb25nIGlvX2FkZHIsIHVuc2lnbmVkIGNvdW50LCB1MzIgKnNhdmVkX3JlZ3MpCit7CisJdW5zaWduZWQgcmVnOworCisJZm9yIChyZWcgPSAwOyByZWcgPCBjb3VudDsgKytyZWcpIHsKKwkJKnNhdmVkX3JlZ3MgPSBpbmwoaW9fYWRkcik7CisJCXNuZF9hemYzMzI4X2RiZ3BtKCJzdXNwZW5kOiBpbyAweCUwNGx4OiAweCUwOHhcbiIsCisJCQlpb19hZGRyLCAqc2F2ZWRfcmVncyk7CisJCSsrc2F2ZWRfcmVnczsKKwkJaW9fYWRkciArPSBzaXplb2YoKnNhdmVkX3JlZ3MpOworCX0KK30KKwogc3RhdGljIGludAogc25kX2F6ZjMzMjhfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBjaSk7CiAJc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIHJlZzsKKwl1MTYgKnNhdmVkX3JlZ3NfY3RybF91MTY7CiAKIAlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7CiAKLQlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbSk7CisJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY21bQVpGX0NPREVDX1BMQVlCQUNLXSk7CisJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY21bQVpGX0NPREVDX0kyU19PVVRdKTsKIAotCWZvciAocmVnID0gMDsgcmVnIDwgQVpGX0lPX1NJWkVfTUlYRVJfUE0gLyAyOyArK3JlZykKLQkJY2hpcC0+c2F2ZWRfcmVnc19taXhlcltyZWddID0gaW53KGNoaXAtPm1peGVyX2lvICsgcmVnICogMik7CisJc25kX2F6ZjMzMjhfc3VzcGVuZF9yZWdzKGNoaXAtPm1peGVyX2lvLAorCQlBUlJBWV9TSVpFKGNoaXAtPnNhdmVkX3JlZ3NfbWl4ZXIpLCBjaGlwLT5zYXZlZF9yZWdzX21peGVyKTsKIAogCS8qIG1ha2Ugc3VyZSB0byBkaXNhYmxlIG1hc3RlciB2b2x1bWUgZXRjLiB0byBwcmV2ZW50IGxvb3Bpbmcgc291bmQgKi8KIAlzbmRfYXpmMzMyOF9taXhlcl9zZXRfbXV0ZShjaGlwLCBJRFhfTUlYRVJfUExBWV9NQVNURVIsIDEpOwogCXNuZF9hemYzMzI4X21peGVyX3NldF9tdXRlKGNoaXAsIElEWF9NSVhFUl9XQVZFT1VULCAxKTsKIAotCWZvciAocmVnID0gMDsgcmVnIDwgQVpGX0lPX1NJWkVfQ09ERUNfUE0gLyAyOyArK3JlZykKLQkJY2hpcC0+c2F2ZWRfcmVnc19jb2RlY1tyZWddID0gaW53KGNoaXAtPmNvZGVjX2lvICsgcmVnICogMik7CisJc25kX2F6ZjMzMjhfc3VzcGVuZF9yZWdzKGNoaXAtPmN0cmxfaW8sCisJCUFSUkFZX1NJWkUoY2hpcC0+c2F2ZWRfcmVnc19jdHJsKSwgY2hpcC0+c2F2ZWRfcmVnc19jdHJsKTsKIAogCS8qIG1hbnVhbGx5IHN0b3JlIHRoZSBvbmUgY3VycmVudGx5IHJlbGV2YW50IHdyaXRlLW9ubHkgcmVnLCB0b28gKi8KLQljaGlwLT5zYXZlZF9yZWdzX2NvZGVjW0lEWF9JT182QUggLyAyXSA9IGNoaXAtPnNoYWRvd19yZWdfY29kZWNfNkFIOworCXNhdmVkX3JlZ3NfY3RybF91MTYgPSAodTE2ICopY2hpcC0+c2F2ZWRfcmVnc19jdHJsOworCXNhdmVkX3JlZ3NfY3RybF91MTZbSURYX0lPXzZBSCAvIDJdID0gY2hpcC0+c2hhZG93X3JlZ19jdHJsXzZBSDsKIAotCWZvciAocmVnID0gMDsgcmVnIDwgQVpGX0lPX1NJWkVfR0FNRV9QTSAvIDI7ICsrcmVnKQotCQljaGlwLT5zYXZlZF9yZWdzX2dhbWVbcmVnXSA9IGludyhjaGlwLT5nYW1lX2lvICsgcmVnICogMik7Ci0JZm9yIChyZWcgPSAwOyByZWcgPCBBWkZfSU9fU0laRV9NUFVfUE0gLyAyOyArK3JlZykKLQkJY2hpcC0+c2F2ZWRfcmVnc19tcHVbcmVnXSA9IGludyhjaGlwLT5tcHVfaW8gKyByZWcgKiAyKTsKLQlmb3IgKHJlZyA9IDA7IHJlZyA8IEFaRl9JT19TSVpFX09QTDNfUE0gLyAyOyArK3JlZykKLQkJY2hpcC0+c2F2ZWRfcmVnc19vcGwzW3JlZ10gPSBpbncoY2hpcC0+b3BsM19pbyArIHJlZyAqIDIpOworCXNuZF9hemYzMzI4X3N1c3BlbmRfcmVncyhjaGlwLT5nYW1lX2lvLAorCQlBUlJBWV9TSVpFKGNoaXAtPnNhdmVkX3JlZ3NfZ2FtZSksIGNoaXAtPnNhdmVkX3JlZ3NfZ2FtZSk7CisJc25kX2F6ZjMzMjhfc3VzcGVuZF9yZWdzKGNoaXAtPm1wdV9pbywKKwkJQVJSQVlfU0laRShjaGlwLT5zYXZlZF9yZWdzX21wdSksIGNoaXAtPnNhdmVkX3JlZ3NfbXB1KTsKKwlzbmRfYXpmMzMyOF9zdXNwZW5kX3JlZ3MoY2hpcC0+b3BsM19pbywKKwkJQVJSQVlfU0laRShjaGlwLT5zYXZlZF9yZWdzX29wbDMpLCBjaGlwLT5zYXZlZF9yZWdzX29wbDMpOwogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJcGNpX3NhdmVfc3RhdGUocGNpKTsKQEAgLTIzNDUsMTIgKzI0MzksMjggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitzbmRfYXpmMzMyOF9yZXN1bWVfcmVncyhjb25zdCB1MzIgKnNhdmVkX3JlZ3MsCisJCQl1bnNpZ25lZCBsb25nIGlvX2FkZHIsCisJCQl1bnNpZ25lZCBjb3VudAorKQoreworCXVuc2lnbmVkIHJlZzsKKworCWZvciAocmVnID0gMDsgcmVnIDwgY291bnQ7ICsrcmVnKSB7CisJCW91dGwoKnNhdmVkX3JlZ3MsIGlvX2FkZHIpOworCQlzbmRfYXpmMzMyOF9kYmdwbSgicmVzdW1lOiBpbyAweCUwNGx4OiAweCUwOHggLS0+IDB4JTA4eFxuIiwKKwkJCWlvX2FkZHIsICpzYXZlZF9yZWdzLCBpbmwoaW9fYWRkcikpOworCQkrK3NhdmVkX3JlZ3M7CisJCWlvX2FkZHIgKz0gc2l6ZW9mKCpzYXZlZF9yZWdzKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQKIHNuZF9hemYzMzI4X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOwotCXN0cnVjdCBzbmRfYXpmMzMyOCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCByZWc7CisJY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKQEAgLTIzNjIsMTYgKzI0NzIsMjQgQEAKIAl9CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAotCWZvciAocmVnID0gMDsgcmVnIDwgQVpGX0lPX1NJWkVfR0FNRV9QTSAvIDI7ICsrcmVnKQotCQlvdXR3KGNoaXAtPnNhdmVkX3JlZ3NfZ2FtZVtyZWddLCBjaGlwLT5nYW1lX2lvICsgcmVnICogMik7Ci0JZm9yIChyZWcgPSAwOyByZWcgPCBBWkZfSU9fU0laRV9NUFVfUE0gLyAyOyArK3JlZykKLQkJb3V0dyhjaGlwLT5zYXZlZF9yZWdzX21wdVtyZWddLCBjaGlwLT5tcHVfaW8gKyByZWcgKiAyKTsKLQlmb3IgKHJlZyA9IDA7IHJlZyA8IEFaRl9JT19TSVpFX09QTDNfUE0gLyAyOyArK3JlZykKLQkJb3V0dyhjaGlwLT5zYXZlZF9yZWdzX29wbDNbcmVnXSwgY2hpcC0+b3BsM19pbyArIHJlZyAqIDIpOwotCWZvciAocmVnID0gMDsgcmVnIDwgQVpGX0lPX1NJWkVfTUlYRVJfUE0gLyAyOyArK3JlZykKLQkJb3V0dyhjaGlwLT5zYXZlZF9yZWdzX21peGVyW3JlZ10sIGNoaXAtPm1peGVyX2lvICsgcmVnICogMik7Ci0JZm9yIChyZWcgPSAwOyByZWcgPCBBWkZfSU9fU0laRV9DT0RFQ19QTSAvIDI7ICsrcmVnKQotCQlvdXR3KGNoaXAtPnNhdmVkX3JlZ3NfY29kZWNbcmVnXSwgY2hpcC0+Y29kZWNfaW8gKyByZWcgKiAyKTsKKwlzbmRfYXpmMzMyOF9yZXN1bWVfcmVncyhjaGlwLT5zYXZlZF9yZWdzX2dhbWUsIGNoaXAtPmdhbWVfaW8sCisJCQkJCUFSUkFZX1NJWkUoY2hpcC0+c2F2ZWRfcmVnc19nYW1lKSk7CisJc25kX2F6ZjMzMjhfcmVzdW1lX3JlZ3MoY2hpcC0+c2F2ZWRfcmVnc19tcHUsIGNoaXAtPm1wdV9pbywKKwkJCQkJQVJSQVlfU0laRShjaGlwLT5zYXZlZF9yZWdzX21wdSkpOworCXNuZF9hemYzMzI4X3Jlc3VtZV9yZWdzKGNoaXAtPnNhdmVkX3JlZ3Nfb3BsMywgY2hpcC0+b3BsM19pbywKKwkJCQkJQVJSQVlfU0laRShjaGlwLT5zYXZlZF9yZWdzX29wbDMpKTsKKworCXNuZF9hemYzMzI4X3Jlc3VtZV9yZWdzKGNoaXAtPnNhdmVkX3JlZ3NfbWl4ZXIsIGNoaXAtPm1peGVyX2lvLAorCQkJCQlBUlJBWV9TSVpFKGNoaXAtPnNhdmVkX3JlZ3NfbWl4ZXIpKTsKKworCS8qIHVuZm9ydHVuYXRlbHkgd2l0aCAzMmJpdCB0cmFuc2ZlcnMsIElEWF9NSVhFUl9QTEFZX01BU1RFUiAoMHgwMikKKwkgICBhbmQgSURYX01JWEVSX1JFU0VUIChvZmZzZXQgMHgwMCkgZ2V0IHRvdWNoZWQgYXQgdGhlIHNhbWUgdGltZSwKKwkgICByZXN1bHRpbmcgaW4gYSBtaXhlciByZXNldCBjb25kaXRpb24gcGVyc2lzdGluZyB1bnRpbCBfYWZ0ZXJfCisJICAgbWFzdGVyIHZvbCB3YXMgcmVzdG9yZWQuIFRodXMgbWFzdGVyIHZvbCBuZWVkcyBhbiBleHRyYSByZXN0b3JlLiAqLworCW91dHcoKCh1MTYgKiljaGlwLT5zYXZlZF9yZWdzX21peGVyKVsxXSwgY2hpcC0+bWl4ZXJfaW8gKyAyKTsKKworCXNuZF9hemYzMzI4X3Jlc3VtZV9yZWdzKGNoaXAtPnNhdmVkX3JlZ3NfY3RybCwgY2hpcC0+Y3RybF9pbywKKwkJCQkJQVJSQVlfU0laRShjaGlwLT5zYXZlZF9yZWdzX2N0cmwpKTsKIAogCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmggYi9zb3VuZC9wY2kvYXp0MzMyOC5oCmluZGV4IDk3NGUwNTEuLjZmNDZiOTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmgKKysrIGIvc291bmQvcGNpL2F6dDMzMjguaApAQCAtNiw1MCArNiw1OSBAQAogCiAvKioqIG1haW4gSS9PIGFyZWEgcG9ydCBpbmRpY2VzICoqKi8KIC8qIChvbmx5IDB4NzAgb2YgMHg4MCBieXRlcyBzYXZlZC9yZXN0b3JlZCBieSBXaW5kb3dzIGRyaXZlcikgKi8KLSNkZWZpbmUgQVpGX0lPX1NJWkVfQ09ERUMJMHg4MAotI2RlZmluZSBBWkZfSU9fU0laRV9DT0RFQ19QTQkweDcwCisjZGVmaW5lIEFaRl9JT19TSVpFX0NUUkwJMHg4MAorI2RlZmluZSBBWkZfSU9fU0laRV9DVFJMX1BNCTB4NzAKIAotLyogdGhlIGRyaXZlciBpbml0aWFsaXNhdGlvbiBzdWdnZXN0cyBhIGxheW91dCBvZiA0IG1haW4gYXJlYXM6Ci0gKiBmcm9tIDB4MDAgKHBsYXliYWNrKSwgZnJvbSAweDIwIChyZWNvcmRpbmcpIGFuZCBmcm9tIDB4NDAgKG1heWJlIE1QVTQwMT8/KS4KKy8qIHRoZSBkcml2ZXIgaW5pdGlhbGlzYXRpb24gc3VnZ2VzdHMgYSBsYXlvdXQgb2YgNCBhcmVhcworICogd2l0aGluIHRoZSBtYWluIGNhcmQgY29udHJvbCBJL086CisgKiBmcm9tIDB4MDAgKHBsYXliYWNrIGNvZGVjKSwgZnJvbSAweDIwIChyZWNvcmRpbmcgY29kZWMpCisgKiBhbmQgZnJvbSAweDQwIChtb3N0IGNlcnRhaW5seSBJMlMgb3V0IGNvZGVjKS4KICAqIEFuZCBhbm90aGVyIGFyZWEgZnJvbSAweDYwIHRvIDB4NmYgKERpcmVjdFggdGltZXIsIElSUSBtYW5hZ2VtZW50LAogICogcG93ZXIgbWFuYWdlbWVudCBldGMuPz8/KS4gKi8KIAotLyoqIHBsYXliYWNrIGFyZWEgKiovCi0jZGVmaW5lIElEWF9JT19QTEFZX0ZMQUdTICAgICAgIDB4MDAgLyogUFU6MHgwMDAwICovCisjZGVmaW5lIEFaRl9JT19PRkZTX0NPREVDX1BMQVlCQUNLCTB4MDAKKyNkZWZpbmUgQVpGX0lPX09GRlNfQ09ERUNfQ0FQVFVSRQkweDIwCisjZGVmaW5lIEFaRl9JT19PRkZTX0NPREVDX0kyU19PVVQJMHg0MAorCisjZGVmaW5lIElEWF9JT19DT0RFQ19ETUFfRkxBR1MgICAgICAgMHgwMCAvKiBQVToweDAwMDAgKi8KICAgICAgLyogYWJsZSB0byByZWFjdGl2YXRlIG91dHB1dCBhZnRlciBvdXRwdXQgbXV0aW5nIGR1ZSB0byA4LzE2Yml0CiAgICAgICAqIG91dHB1dCBjaGFuZ2UsIGp1c3QgbGlrZSAweDAwMDIuCiAgICAgICAqIDB4MDAwMSBpcyB0aGUgb25seSBiaXQgdGhhdCdzIGFibGUgdG8gc3RhcnQgdGhlIERNQSBjb3VudGVyICovCi0gICNkZWZpbmUgRE1BX1JFU1VNRQkJCTB4MDAwMSAvKiBwYXVzZWQgaWYgY2xlYXJlZCA/ICovCisgICNkZWZpbmUgRE1BX1JFU1VNRQkJCTB4MDAwMSAvKiBwYXVzZWQgaWYgY2xlYXJlZD8gKi8KICAgICAgLyogMHgwMDAyICp0ZW1wb3JhcmlseSogc2V0IGR1cmluZyBETUEgc3RvcHBpbmcuIGhtbQogICAgICAgKiBib3RoIDB4MDAwMiBhbmQgMHgwMDA0IHNldCBpbiBwbGF5YmFjayBzZXR1cC4gKi8KICAgICAgLyogYWJsZSB0byByZWFjdGl2YXRlIG91dHB1dCBhZnRlciBvdXRwdXQgbXV0aW5nIGR1ZSB0byA4LzE2Yml0CiAgICAgICAqIG91dHB1dCBjaGFuZ2UsIGp1c3QgbGlrZSAweDAwMDEuICovCi0gICNkZWZpbmUgRE1BX1BMQVlfU09NRVRISU5HMQkJMHgwMDAyIC8qIFwgYWx0ZXJuYXRlZCAodG9nZ2xlZCkgKi8KKyAgI2RlZmluZSBETUFfUlVOX1NPTUVUSElORzEJCTB4MDAwMiAvKiBcIGFsdGVybmF0ZWQgKHRvZ2dsZWQpICovCiAgICAgIC8qIDB4MDAwNDogTk9UIGFibGUgdG8gcmVhY3RpdmF0ZSBvdXRwdXQgKi8KLSAgI2RlZmluZSBETUFfUExBWV9TT01FVEhJTkcyCQkweDAwMDQgLyogLyBiaXRzICovCisgICNkZWZpbmUgRE1BX1JVTl9TT01FVEhJTkcyCQkweDAwMDQgLyogLyBiaXRzICovCiAgICNkZWZpbmUgU09NRVRISU5HX0FMTU9TVF9BTFdBWVNfU0VUCTB4MDAwOCAvKiA/Pz87IGNhbiBiZSBtb2RpZmllZCAqLwogICAjZGVmaW5lIERNQV9FUElMT0dVRV9TT01FVEhJTkcJMHgwMDEwCiAgICNkZWZpbmUgRE1BX1NPTUVUSElOR19FTFNFCQkweDAwMjAgLyogPz8/ICovCi0gICNkZWZpbmUgU09NRVRISU5HX1VOTU9ESUZJQUJMRQkweGZmYzAgLyogdW51c2VkID8gbm90IG1vZGlmaWFibGUgKi8KLSNkZWZpbmUgSURYX0lPX1BMQVlfSVJRVFlQRSAgICAgMHgwMiAvKiBQVToweDAwMDEgKi8KKyAgI2RlZmluZSBTT01FVEhJTkdfVU5NT0RJRklBQkxFCTB4ZmZjMCAvKiB1bnVzZWQ/IG5vdCBtb2RpZmlhYmxlICovCisjZGVmaW5lIElEWF9JT19DT0RFQ19JUlFUWVBFICAgICAweDAyIC8qIFBVOjB4MDAwMSAqLwogICAvKiB3cml0ZSBiYWNrIHRvIGZsYWdzIGluIGNhc2UgZmxhZ3MgYXJlIHNldCwgaW4gb3JkZXIgdG8gQUNLIElSUSBpbiBoYW5kbGVyCiAgICAqIChiaXQgMSBvZiBwb3J0IDB4NjQgaW5kaWNhdGVzIGludGVycnVwdCBmb3Igb25lIG9mIHRoZXNlIHRocmVlIHR5cGVzKQogICAgKiBzb21ldGltZXMgaW4gdGhpcyBjYXNlIGl0IGp1c3Qgd3JpdGVzIDB4ZmZmZiB0byBnbG9iYWxseSBBQ0sgYWxsIElSUXMKICAgICogc2V0dGluZ3Mgd3JpdHRlbiBhcmUgbm90IHJlZmxlY3RlZCB3aGVuIHJlYWRpbmcgYmFjaywgdGhvdWdoLgotICAgKiBzZWVtcyB0byBiZSBJUlEsIHRvbyAoZnJlcXVlbnRseSB1c2VkOiBwb3J0IHw9IDB4MDcgISksIGJ1dCB3aG8ga25vd3MgPyAqLwotICAjZGVmaW5lIElSUV9QTEFZX1NPTUVUSElORwkJMHgwMDAxIC8qIHNvbWV0aGluZyAmIEFDSyAqLwotICAjZGVmaW5lIElSUV9GSU5JU0hFRF9QTEFZQlVGXzEJMHgwMDAyIC8qIDFzdCBkbWFidWYgZmluaXNoZWQgJiBBQ0sgKi8KLSAgI2RlZmluZSBJUlFfRklOSVNIRURfUExBWUJVRl8yCTB4MDAwNCAvKiAybmQgZG1hYnVmIGZpbmlzaGVkICYgQUNLICovCisgICAqIHNlZW1zIHRvIGJlIElSUSwgdG9vIChmcmVxdWVudGx5IHVzZWQ6IHBvcnQgfD0gMHgwNyAhKSwgYnV0IHdobyBrbm93cz8gKi8KKyAgI2RlZmluZSBJUlFfU09NRVRISU5HCQkJMHgwMDAxIC8qIHNvbWV0aGluZyAmIEFDSyAqLworICAjZGVmaW5lIElSUV9GSU5JU0hFRF9ETUFCVUZfMQkJMHgwMDAyIC8qIDFzdCBkbWFidWYgZmluaXNoZWQgJiBBQ0sgKi8KKyAgI2RlZmluZSBJUlFfRklOSVNIRURfRE1BQlVGXzIJCTB4MDAwNCAvKiAybmQgZG1hYnVmIGZpbmlzaGVkICYgQUNLICovCiAgICNkZWZpbmUgSVJRTUFTS19TT01FX1NUQVRVU18xCQkweDAwMDggLyogXCByZWxhdGVkIGJpdHMgKi8KICAgI2RlZmluZSBJUlFNQVNLX1NPTUVfU1RBVFVTXzIJCTB4MDAxMCAvKiAvIChjaGVja2VkIHRvZ2V0aGVyIGluIGxvb3ApICovCi0gICNkZWZpbmUgSVJRTUFTS19VTk1PRElGSUFCTEUJCTB4ZmZlMCAvKiB1bnVzZWQgPyBub3QgbW9kaWZpYWJsZSAqLwotI2RlZmluZSBJRFhfSU9fUExBWV9ETUFfU1RBUlRfMSAweDA0IC8qIHN0YXJ0IGFkZHJlc3Mgb2YgMXN0IERNQSBwbGF5IGFyZWEsIFBVOjB4MDAwMDAwMDAgKi8KLSNkZWZpbmUgSURYX0lPX1BMQVlfRE1BX1NUQVJUXzIgMHgwOCAvKiBzdGFydCBhZGRyZXNzIG9mIDJuZCBETUEgcGxheSBhcmVhLCBQVToweDAwMDAwMDAwICovCi0jZGVmaW5lIElEWF9JT19QTEFZX0RNQV9MRU5fMSAgIDB4MGMgLyogbGVuZ3RoIG9mIDFzdCBETUEgcGxheSBhcmVhLCBQVToweDAwMDAgKi8KLSNkZWZpbmUgSURYX0lPX1BMQVlfRE1BX0xFTl8yICAgMHgwZSAvKiBsZW5ndGggb2YgMm5kIERNQSBwbGF5IGFyZWEsIFBVOjB4MDAwMCAqLwotI2RlZmluZSBJRFhfSU9fUExBWV9ETUFfQ1VSUlBPUyAweDEwIC8qIGN1cnJlbnQgRE1BIHBvc2l0aW9uLCBQVToweDAwMDAwMDAwICovCi0jZGVmaW5lIElEWF9JT19QTEFZX0RNQV9DVVJST0ZTCTB4MTQgLyogb2Zmc2V0IHdpdGhpbiBjdXJyZW50IERNQSBwbGF5IGFyZWEsIFBVOjB4MDAwMCAqLwotI2RlZmluZSBJRFhfSU9fUExBWV9TT1VOREZPUk1BVCAweDE2IC8qIFBVOjB4MDAxMCAqLworICAjZGVmaW5lIElSUU1BU0tfVU5NT0RJRklBQkxFCQkweGZmZTAgLyogdW51c2VkPyBub3QgbW9kaWZpYWJsZSAqLworICAvKiBzdGFydCBhZGRyZXNzIG9mIDFzdCBETUEgdHJhbnNmZXIgYXJlYSwgUFU6MHgwMDAwMDAwMCAqLworI2RlZmluZSBJRFhfSU9fQ09ERUNfRE1BX1NUQVJUXzEgMHgwNAorICAvKiBzdGFydCBhZGRyZXNzIG9mIDJuZCBETUEgdHJhbnNmZXIgYXJlYSwgUFU6MHgwMDAwMDAwMCAqLworI2RlZmluZSBJRFhfSU9fQ09ERUNfRE1BX1NUQVJUXzIgMHgwOAorICAvKiBib3RoIGxlbmd0aHMgb2YgRE1BIHRyYW5zZmVyIGFyZWFzLCBQVToweDAwMDAwMDAwCisgICAgIGxlbmd0aDE6IG9mZnNldCAweDBjLCBsZW5ndGgyOiBvZmZzZXQgMHgwZSAqLworI2RlZmluZSBJRFhfSU9fQ09ERUNfRE1BX0xFTkdUSFMgMHgwYworI2RlZmluZSBJRFhfSU9fQ09ERUNfRE1BX0NVUlJQT1MgMHgxMCAvKiBjdXJyZW50IERNQSBwb3NpdGlvbiwgUFU6MHgwMDAwMDAwMCAqLworICAvKiBvZmZzZXQgd2l0aGluIGN1cnJlbnQgRE1BIHRyYW5zZmVyIGFyZWEsIFBVOjB4MDAwMCAqLworI2RlZmluZSBJRFhfSU9fQ09ERUNfRE1BX0NVUlJPRlMgMHgxNAorI2RlZmluZSBJRFhfSU9fQ09ERUNfU09VTkRGT1JNQVQgMHgxNiAvKiBQVToweDAwMTAgKi8KICAgLyogYWxsIHVuc3BlY2lmaWVkIGJpdHMgY2FuJ3QgYmUgbW9kaWZpZWQgKi8KICAgI2RlZmluZSBTT1VOREZPUk1BVF9GUkVRVUVOQ1lfTUFTSwkweDAwMGYKICAgI2RlZmluZSBTT1VOREZPUk1BVF9YVEFMMQkJMHgwMApAQCAtNzYsNiArODUsNyBAQAogICAjZGVmaW5lIFNPVU5ERk9STUFUX0ZMQUdfMTZCSVQJMHgwMDEwCiAgICNkZWZpbmUgU09VTkRGT1JNQVRfRkxBR18yQ0hBTk5FTFMJMHgwMDIwCiAKKwogLyogZGVmaW5lIGZyZXF1ZW5jeSBoZWxwZXJzLCBmb3IgbWF4aW11bSB2YWx1ZSBzYWZldHkgKi8KIGVudW0gYXpmX2ZyZXFfdCB7CiAjZGVmaW5lIEFaRl9GUkVRKHJhdGUpIEFaRl9GUkVRXyMjcmF0ZSA9IHJhdGUKQEAgLTk2LDI5ICsxMDYsNiBAQAogI3VuZGVmIEFaRl9GUkVRCiB9OwogCi0vKiogcmVjb3JkaW5nIGFyZWEgKHNlZSBhbHNvOiBwbGF5YmFjayBiaXQgZmxhZyBkZWZpbml0aW9ucykgKiovCi0jZGVmaW5lIElEWF9JT19SRUNfRkxBR1MJMHgyMCAvKiA/PywgUFU6MHgwMDAwICovCi0jZGVmaW5lIElEWF9JT19SRUNfSVJRVFlQRQkweDIyIC8qID8/LCBQVToweDAwMDAgKi8KLSAgI2RlZmluZSBJUlFfUkVDX1NPTUVUSElORwkJMHgwMDAxIC8qIHNvbWV0aGluZyAmIEFDSyAqLwotICAjZGVmaW5lIElSUV9GSU5JU0hFRF9SRUNCVUZfMQkJMHgwMDAyIC8qIDFzdCBkbWFidWYgZmluaXNoZWQgJiBBQ0sgKi8KLSAgI2RlZmluZSBJUlFfRklOSVNIRURfUkVDQlVGXzIJCTB4MDAwNCAvKiAybmQgZG1hYnVmIGZpbmlzaGVkICYgQUNLICovCi0gIC8qIGhtbSwgbWF5YmUgdGhlc2UgYXJlIGp1c3QgdGhlIGNvcnJlc3BvbmRpbmcgKnJlY29yZGluZyogZmxhZ3MgPwotICAgKiBidXQgT1RPSCB0aGV5IGFyZSBtb3N0IGxpa2VseSBhdCBwb3J0IDB4MjIgaW5zdGVhZCAqLwotICAjZGVmaW5lIElSUU1BU0tfU09NRV9TVEFUVVNfMQkJMHgwMDA4IC8qIFwgcmVsYXRlZCBiaXRzICovCi0gICNkZWZpbmUgSVJRTUFTS19TT01FX1NUQVRVU18yCQkweDAwMTAgLyogLyAoY2hlY2tlZCB0b2dldGhlciBpbiBsb29wKSAqLwotI2RlZmluZSBJRFhfSU9fUkVDX0RNQV9TVEFSVF8xICAweDI0IC8qIFBVOjB4MDAwMDAwMDAgKi8KLSNkZWZpbmUgSURYX0lPX1JFQ19ETUFfU1RBUlRfMiAgMHgyOCAvKiBQVToweDAwMDAwMDAwICovCi0jZGVmaW5lIElEWF9JT19SRUNfRE1BX0xFTl8xICAgIDB4MmMgLyogUFU6MHgwMDAwICovCi0jZGVmaW5lIElEWF9JT19SRUNfRE1BX0xFTl8yICAgIDB4MmUgLyogUFU6MHgwMDAwICovCi0jZGVmaW5lIElEWF9JT19SRUNfRE1BX0NVUlJQT1MgIDB4MzAgLyogUFU6MHgwMDAwMDAwMCAqLwotI2RlZmluZSBJRFhfSU9fUkVDX0RNQV9DVVJST0ZTICAweDM0IC8qIFBVOjB4MDAwMDAwMDAgKi8KLSNkZWZpbmUgSURYX0lPX1JFQ19TT1VOREZPUk1BVCAgMHgzNiAvKiBQVToweDAwMDAgKi8KLQotLyoqIGhtbSwgd2hhdCBpcyB0aGlzIEkvTyBhcmVhIGZvcj8gTVBVNDAxPz8gb3IgZXh0ZXJuYWwgREFDIHZpYSBJMlM/PyAoYWZ0ZXIgcGxheWJhY2ssIHJlY29yZGluZywgPz8/LCB0aW1lcikgKiovCi0jZGVmaW5lIElEWF9JT19TT01FVEhJTkdfRkxBR1MJMHg0MCAvKiBnZXRzIHNldCB0byAweDM0IGp1c3QgbGlrZSBwb3J0IDB4MCBhbmQgMHgyMCBvbiBjYXJkIGluaXQsIFBVOjB4MDAwMCAqLwotLyogZ2VuZXJhbCAqLwotI2RlZmluZSBJRFhfSU9fNDJICQkweDQyIC8qIFBVOjB4MDAwMSAqLwotCiAvKiogRGlyZWN0WCB0aW1lciwgbWFpbiBpbnRlcnJ1cHQgYXJlYSAoRklYTUU6IGFuZCBzb21ldGhpbmcgZWxzZT8pICoqLyAKICNkZWZpbmUgSURYX0lPX1RJTUVSX1ZBTFVFCTB4NjAgLyogZm91bmQgdGhpcyB0aW1lciBhcmVhIGJ5IHB1cmUgbHVjayA6LSkgKi8KICAgLyogdGltZXIgY291bnRkb3duIHZhbHVlOyB0cmlnZ2VycyBJUlEgd2hlbiB0aW1lciBpcyBmaW5pc2hlZCAqLwpAQCAtMTMzLDE3ICsxMjAsMTkgQEAKICNkZWZpbmUgSURYX0lPX0lSUVNUQVRVUyAgICAgICAgMHg2NAogICAvKiBzb21lIElSUSBiaXQgaW4gaGVyZSBtaWdodCBhbHNvIGJlIHVzZWQgdG8gc2lnbmFsIGEgcG93ZXItbWFuYWdlbWVudCB0aW1lcgogICAgKiB0aW1lb3V0LCB0byByZXF1ZXN0IHNodXRkb3duIG9mIHRoZSBjaGlwIChlLmcuIEFEMTgxNUpTIGhhcyBzdWNoIGEgdGhpbmcpLgotICAgKiBTb21lIE9QTDMgaGFyZHdhcmUgKGUuZy4gaW4gTE00NTYwKSBoYXMgc29tZSBzcGVjaWFsIHRpbWVyIGhhcmR3YXJlIHdoaWNoCi0gICAqIGNhbiB0cmlnZ2VyIGFuIE9QTDMgdGltZXIgSVJRLCBzbyBtYXliZSB0aGVyZSdzIHN1Y2ggYSB0aGluZyBhcyB3ZWxsLi4uICovCisgICAqIE9QTDMgaGFyZHdhcmUgY29udGFpbnMgc2V2ZXJhbCB0aW1lcnMgd2hpY2ggY29uZnVzaW5nbHkgaW4gbW9zdCBjYXNlcworICAgKiBhcmUgTk9UIHJvdXRlZCB0byBhbiBJUlEsIGJ1dCBzb21lIGRlc2lnbnMgKGUuZy4gTE00NTYwKSBETyBzdXBwb3J0IHRoYXQsCisgICAqIHNvIEkgd291bGRuJ3QgYmUgc3VycHJpc2VkIGF0IGFsbCB0byBkaXNjb3ZlciB0aGF0IEFaRjMzMjgKKyAgICogc3VwcG9ydHMgdGhhdCB0aGluZyBhcyB3ZWxsLi4uICovCiAKICAgI2RlZmluZSBJUlFfUExBWUJBQ0sJMHgwMDAxCiAgICNkZWZpbmUgSVJRX1JFQ09SRElORwkweDAwMDIKLSAgI2RlZmluZSBJUlFfVU5LTk9XTjEJMHgwMDA0IC8qIG1vc3QgcHJvYmFibHkgSTJTIHBvcnQgKi8KKyAgI2RlZmluZSBJUlFfSTJTX09VVAkweDAwMDQgLyogdGhpcyBJUyBJMlMsIHJpZ2h0IT8gKHVudGVzdGVkKSAqLwogICAjZGVmaW5lIElSUV9HQU1FUE9SVAkweDAwMDggLyogSW50ZXJydXB0IG9mIERpZ2l0YWwobHkpIEVuaGFuY2VkIEdhbWUgUG9ydCAqLwogICAjZGVmaW5lIElSUV9NUFU0MDEJMHgwMDEwCiAgICNkZWZpbmUgSVJRX1RJTUVSCTB4MDAyMCAvKiBEaXJlY3RYIHRpbWVyICovCi0gICNkZWZpbmUgSVJRX1VOS05PV04yCTB4MDA0MCAvKiBwcm9iYWJseSB1bnVzZWQsIG9yIHBvc3NpYmx5IEkyUyBwb3J0PyAqLwotICAjZGVmaW5lIElSUV9VTktOT1dOMwkweDAwODAgLyogcHJvYmFibHkgdW51c2VkLCBvciBwb3NzaWJseSBJMlMgcG9ydD8gKi8KKyAgI2RlZmluZSBJUlFfVU5LTk9XTjIJMHgwMDQwIC8qIHByb2JhYmx5IHVudXNlZCwgb3IgcG9zc2libHkgT1BMMyB0aW1lcj8gKi8KKyAgI2RlZmluZSBJUlFfVU5LTk9XTjMJMHgwMDgwIC8qIHByb2JhYmx5IHVudXNlZCwgb3IgcG9zc2libHkgT1BMMyB0aW1lcj8gKi8KICNkZWZpbmUgSURYX0lPXzY2SAkJMHg2NiAgICAvKiB3cml0aW5nIDB4ZmZmZiByZXR1cm5zIDB4MDAwMCAqLwogICAvKiB0aGlzIGlzIHNldCB0byBlLmcuIDB4M2ZmIG9yIDB4MzAwLCBhbmQgd3JpdGFibGU7CiAgICAqIG1heWJlIHNvbWUgYnVmZmVyIGxpbWl0LCBidXQgSSBjb3VsZG4ndCBmaW5kIG91dCBtb3JlLCBQVToweDAwZmY6ICovCkBAIC0yMDYsNyArMTk1LDcgQEAKIC8qKiogR2FtZXBvcnQgYXJlYSBwb3J0IGluZGljZXMgKioqLwogLyogKG9ubHkgMHgwNiBvZiAweDA4IGJ5dGVzIHNhdmVkL3Jlc3RvcmVkIGJ5IFdpbmRvd3MgZHJpdmVyKSAqLyAKICNkZWZpbmUgQVpGX0lPX1NJWkVfR0FNRQkJMHgwOAotI2RlZmluZSBBWkZfSU9fU0laRV9HQU1FX1BNCTB4MDYKKyNkZWZpbmUgQVpGX0lPX1NJWkVfR0FNRV9QTQkJMHgwNgogCiBlbnVtIHsKIAlBWkZfR0FNRV9MRUdBQ1lfSU9fUE9SVCA9IDB4MjAwCkBAIC0yNzIsNiArMjYxLDEyIEBACiAgICAqIDExIC0tPiAxLzIwMDogKi8KICAgI2RlZmluZSBHQU1FX0hXQ0ZHX0FEQ19DT1VOVEVSX0ZSRVFfTUFTSwkweDA2CiAKKyAgLyogRklYTUU6IHRoZXNlIHZhbHVlcyBtaWdodCBiZSByZXZlcnNlZC4uLiAqLworICAjZGVmaW5lIEdBTUVfSFdDRkdfQURDX0NPVU5URVJfRlJFUV9TVEQJMAorICAjZGVmaW5lIEdBTUVfSFdDRkdfQURDX0NPVU5URVJfRlJFUV8xXzIJMQorICAjZGVmaW5lIEdBTUVfSFdDRkdfQURDX0NPVU5URVJfRlJFUV8xXzIwCTIKKyAgI2RlZmluZSBHQU1FX0hXQ0ZHX0FEQ19DT1VOVEVSX0ZSRVFfMV8yMDAJMworCiAgIC8qIGVuYWJsZSBnYW1lcG9ydCBsZWdhY3kgSS9PIGFkZHJlc3MgKDB4MjAwKQogICAgKiBJIHdhcyB1bmFibGUgdG8gbG9jYXRlIGFueSBjb25maWd1cmFiaWxpdHkgZm9yIGEgZGlmZmVyZW50IGFkZHJlc3M6ICovCiAgICNkZWZpbmUgR0FNRV9IV0NGR19MRUdBQ1lfQUREUkVTU19FTkFCTEUJMHgwOApAQCAtMjgxLDYgKzI3Niw3IEBACiAjZGVmaW5lIEFaRl9JT19TSVpFX01QVV9QTQkweDA0CiAKIC8qKiogT1BMMyBzeW50aCAqKiovCisvKiAob25seSAweDA2IG9mIDB4MDggYnl0ZXMgc2F2ZWQvcmVzdG9yZWQgYnkgV2luZG93cyBkcml2ZXIpICovCiAjZGVmaW5lIEFaRl9JT19TSVpFX09QTDMJMHgwOAogI2RlZmluZSBBWkZfSU9fU0laRV9PUEwzX1BNCTB4MDYKIC8qIGhtbSwgZ2l2ZW4gdGhhdCBhIHN0YW5kYXJkIE9QTDMgaGFzIDQgcmVnaXN0ZXJzIG9ubHksCkBAIC0zNDAsNCArMzM2LDcgQEAKICNkZWZpbmUgU0VUX0NIQU5fTEVGVAkxCiAjZGVmaW5lIFNFVF9DSEFOX1JJR0hUCTIKIAorLyogaGVscGVyIG1hY3JvIHRvIGFsaWduIEkvTyBwb3J0IHJhbmdlcyB0byAzMmJpdCBJL08gd2lkdGggKi8KKyNkZWZpbmUgQVpGX0FMSUdOKHgpICgoKHgpICsgMykgJiAofjMpKQorCiAjZW5kaWYgLyogX19TT1VORF9BWlQzMzI4X0ggICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuaCBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5oCmluZGV4IDRlYjU1YWEuLmI1MTg5NDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5oCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5oCkBAIC0zNSw3ICszNSw3IEBACiAKIAogI2lmZGVmIENPTkZJR19TTkRfQ1M0NlhYX05FV19EU1AKLSNkZWZpbmUgQ1M0NlhYX01JTl9QRVJJT0RfU0laRSAxCisjZGVmaW5lIENTNDZYWF9NSU5fUEVSSU9EX1NJWkUgNjQKICNkZWZpbmUgQ1M0NlhYX01BWF9QRVJJT0RfU0laRSAxMDI0KjEwMjQKICNlbHNlCiAjZGVmaW5lIENTNDZYWF9NSU5fUEVSSU9EX1NJWkUgMjA0OApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2N0eGZpL2N0MjBrMnJlZy5oIGIvc291bmQvcGNpL2N0eGZpL2N0MjBrMnJlZy5oCmluZGV4IDJkMDc5ODYuLmUwMzk0ZTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdDIwazJyZWcuaAorKysgYi9zb3VuZC9wY2kvY3R4ZmkvY3QyMGsycmVnLmgKQEAgLTExLDkgKzExLDEyIEBACiAKIAogLyogVGltZXIgUmVnaXN0ZXJzICovCi0jZGVmaW5lIFRJTUVSX1RJTVIgICAgICAgICAgMHgxQjcwMDQKLSNkZWZpbmUgSU5URVJSVVBUX0dJUCAgICAgICAweDFCNzAxMAotI2RlZmluZSBJTlRFUlJVUFRfR0lFICAgICAgIDB4MUI3MDE0CisjZGVmaW5lIFdDCQkweDFiNzAwMAorI2RlZmluZSBUSU1SCQkweDFiNzAwNAorIyBkZWZpbmUJVElNUl9JRQkJKDE8PDE1KQorIyBkZWZpbmUJVElNUl9JUAkJKDE8PDE0KQorI2RlZmluZSBHSVAJCTB4MWI3MDEwCisjZGVmaW5lIEdJRQkJMHgxYjcwMTQKIAogLyogSTJDIFJlZ2lzdGVycyAqLwogI2RlZmluZSBJMkNfSUZfQUREUkVTUyAgIDB4MUI5MDAwCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RhbWl4ZXIuYyBiL3NvdW5kL3BjaS9jdHhmaS9jdGFtaXhlci5jCmluZGV4IGE3ZjRhNjcuLmZlZTM1Y2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdGFtaXhlci5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGFtaXhlci5jCkBAIC02Myw3ICs2Myw3IEBACiAJaHcgPSBhbWl4ZXItPnJzYy5odzsKIAlody0+YW1peGVyX3NldF9tb2RlKGFtaXhlci0+cnNjLmN0cmxfYmxrLCBBTUlYRVJfWV9JTU1FRElBVEUpOwogCWFtaXhlci0+aW5wdXQgPSByc2M7Ci0JaWYgKE5VTEwgPT0gcnNjKQorCWlmICghcnNjKQogCQlody0+YW1peGVyX3NldF94KGFtaXhlci0+cnNjLmN0cmxfYmxrLCBCTEFOS19TTE9UKTsKIAllbHNlCiAJCWh3LT5hbWl4ZXJfc2V0X3goYW1peGVyLT5yc2MuY3RybF9ibGssCkBAIC05OSw3ICs5OSw3IEBACiAKIAlodyA9IGFtaXhlci0+cnNjLmh3OwogCWFtaXhlci0+c3VtID0gc3VtOwotCWlmIChOVUxMID09IHN1bSkgeworCWlmICghc3VtKSB7CiAJCWh3LT5hbWl4ZXJfc2V0X3NlKGFtaXhlci0+cnNjLmN0cmxfYmxrLCAwKTsKIAl9IGVsc2UgewogCQlody0+YW1peGVyX3NldF9zZShhbWl4ZXItPnJzYy5jdHJsX2JsaywgMSk7CkBAIC0xMjQsMjAgKzEyNCwyMCBAQAogCiAJLyogUHJvZ3JhbSBtYXN0ZXIgYW5kIGNvbmp1Z2F0ZSByZXNvdXJjZXMgKi8KIAlhbWl4ZXItPnJzYy5vcHMtPm1hc3RlcigmYW1peGVyLT5yc2MpOwotCWlmIChOVUxMICE9IGlucHV0KQorCWlmIChpbnB1dCkKIAkJaW5wdXQtPm9wcy0+bWFzdGVyKGlucHV0KTsKIAotCWlmIChOVUxMICE9IHN1bSkKKwlpZiAoc3VtKQogCQlzdW0tPnJzYy5vcHMtPm1hc3Rlcigmc3VtLT5yc2MpOwogCiAJZm9yIChpID0gMDsgaSA8IGFtaXhlci0+cnNjLm1zcjsgaSsrKSB7CiAJCWh3LT5hbWl4ZXJfc2V0X2RpcnR5X2FsbChhbWl4ZXItPnJzYy5jdHJsX2Jsayk7Ci0JCWlmIChOVUxMICE9IGlucHV0KSB7CisJCWlmIChpbnB1dCkgewogCQkJaHctPmFtaXhlcl9zZXRfeChhbWl4ZXItPnJzYy5jdHJsX2JsaywKIAkJCQkJCWlucHV0LT5vcHMtPm91dHB1dF9zbG90KGlucHV0KSk7CiAJCQlpbnB1dC0+b3BzLT5uZXh0X2NvbmooaW5wdXQpOwogCQl9Ci0JCWlmIChOVUxMICE9IHN1bSkgeworCQlpZiAoc3VtKSB7CiAJCQlody0+YW1peGVyX3NldF9zYWRyKGFtaXhlci0+cnNjLmN0cmxfYmxrLAogCQkJCQkJc3VtLT5yc2Mub3BzLT5pbmRleCgmc3VtLT5yc2MpKTsKIAkJCXN1bS0+cnNjLm9wcy0+bmV4dF9jb25qKCZzdW0tPnJzYyk7CkBAIC0xNDcsMTAgKzE0NywxMCBAQAogCQlhbWl4ZXItPnJzYy5vcHMtPm5leHRfY29uaigmYW1peGVyLT5yc2MpOwogCX0KIAlhbWl4ZXItPnJzYy5vcHMtPm1hc3RlcigmYW1peGVyLT5yc2MpOwotCWlmIChOVUxMICE9IGlucHV0KQorCWlmIChpbnB1dCkKIAkJaW5wdXQtPm9wcy0+bWFzdGVyKGlucHV0KTsKIAotCWlmIChOVUxMICE9IHN1bSkKKwlpZiAoc3VtKQogCQlzdW0tPnJzYy5vcHMtPm1hc3Rlcigmc3VtLT5yc2MpOwogCiAJcmV0dXJuIDA7CkBAIC0zMDMsNyArMzAzLDcgQEAKIAogCSpyYW1peGVyX21nciA9IE5VTEw7CiAJYW1peGVyX21nciA9IGt6YWxsb2Moc2l6ZW9mKCphbWl4ZXJfbWdyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gYW1peGVyX21ncikKKwlpZiAoIWFtaXhlcl9tZ3IpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZXJyID0gcnNjX21ncl9pbml0KCZhbWl4ZXJfbWdyLT5tZ3IsIEFNSVhFUiwgQU1JWEVSX1JFU09VUkNFX05VTSwgaHcpOwpAQCAtNDU2LDcgKzQ1Niw3IEBACiAKIAkqcnN1bV9tZ3IgPSBOVUxMOwogCXN1bV9tZ3IgPSBremFsbG9jKHNpemVvZigqc3VtX21nciksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IHN1bV9tZ3IpCisJaWYgKCFzdW1fbWdyKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWVyciA9IHJzY19tZ3JfaW5pdCgmc3VtX21nci0+bWdyLCBTVU0sIFNVTV9SRVNPVVJDRV9OVU0sIGh3KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jIGIvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMKaW5kZXggYTQ5Yzc2Ni4uYjFiM2E2NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMKKysrIGIvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CiAJc3RydWN0IGN0X3ZtICp2bTsKIAotCWlmIChOVUxMID09IGFwY20tPnN1YnN0cmVhbSkKKwlpZiAoIWFwY20tPnN1YnN0cmVhbSkKIAkJcmV0dXJuIDA7CiAKIAlydW50aW1lID0gYXBjbS0+c3Vic3RyZWFtLT5ydW50aW1lOwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAKIAlhcGNtLT52bV9ibG9jayA9IHZtLT5tYXAodm0sIGFwY20tPnN1YnN0cmVhbSwgcnVudGltZS0+ZG1hX2J5dGVzKTsKIAotCWlmIChOVUxMID09IGFwY20tPnZtX2Jsb2NrKQorCWlmICghYXBjbS0+dm1fYmxvY2spCiAJCXJldHVybiAtRU5PRU5UOwogCiAJcmV0dXJuIDA7CkBAIC0xNTQsNyArMTU0LDcgQEAKIHsKIAlzdHJ1Y3QgY3Rfdm0gKnZtOwogCi0JaWYgKE5VTEwgPT0gYXBjbS0+dm1fYmxvY2spCisJaWYgKCFhcGNtLT52bV9ibG9jaykKIAkJcmV0dXJuOwogCiAJdm0gPSBhdGMtPnZtOwpAQCAtMjMxLDE2ICsyMzEsMTYgQEAKIAogc3RhdGljIGludCBzZWxlY3Rfcm9tKHVuc2lnbmVkIGludCBwaXRjaCkKIHsKLQlpZiAoKHBpdGNoID4gMHgwMDQyOGY1YykgJiYgKHBpdGNoIDwgMHgwMWI4NTFlYykpIHsKKwlpZiAocGl0Y2ggPiAweDAwNDI4ZjVjICYmIHBpdGNoIDwgMHgwMWI4NTFlYykgewogCQkvKiAwLjI2IDw9IHBpdGNoIDw9IDEuNzIgKi8KIAkJcmV0dXJuIDE7Ci0JfSBlbHNlIGlmICgoMHgwMWQ2NjY2NiA9PSBwaXRjaCkgfHwgKDB4MDFkNjY2NjcgPT0gcGl0Y2gpKSB7CisJfSBlbHNlIGlmIChwaXRjaCA9PSAweDAxZDY2NjY2IHx8IHBpdGNoID09IDB4MDFkNjY2NjcpIHsKIAkJLyogcGl0Y2ggPT0gMS44Mzc1ICovCiAJCXJldHVybiAyOwotCX0gZWxzZSBpZiAoMHgwMjAwMDAwMCA9PSBwaXRjaCkgeworCX0gZWxzZSBpZiAocGl0Y2ggPT0gMHgwMjAwMDAwMCkgewogCQkvKiBwaXRjaCA9PSAyICovCiAJCXJldHVybiAzOwotCX0gZWxzZSBpZiAoKHBpdGNoID49IDB4MCkgJiYgKHBpdGNoIDw9IDB4MDgwMDAwMDApKSB7CisJfSBlbHNlIGlmIChwaXRjaCA+PSAweDAgJiYgcGl0Y2ggPD0gMHgwODAwMDAwMCkgewogCQkvKiAwIDw9IHBpdGNoIDw9IDggKi8KIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKQEAgLTI4Myw3ICsyODMsNyBAQAogCS8qIEdldCBBTUlYRVIgcmVzb3VyY2UgKi8KIAluX2FtaXhlciA9IChuX2FtaXhlciA8IDIpID8gMiA6IG5fYW1peGVyOwogCWFwY20tPmFtaXhlcnMgPSBremFsbG9jKHNpemVvZih2b2lkICopKm5fYW1peGVyLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBhcGNtLT5hbWl4ZXJzKSB7CisJaWYgKCFhcGNtLT5hbWl4ZXJzKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3IxOwogCX0KQEAgLTMxMSw3ICszMTEsNyBAQAogCQkJCQlJTklUX1ZPTCwgYXRjLT5wY21baStkZXZpY2UqMl0pOwogCQltdXRleF91bmxvY2soJmF0Yy0+YXRjX211dGV4KTsKIAkJc3JjID0gc3JjLT5vcHMtPm5leHRfaW50ZXJsZWF2ZShzcmMpOwotCQlpZiAoTlVMTCA9PSBzcmMpCisJCWlmICghc3JjKQogCQkJc3JjID0gYXBjbS0+c3JjOwogCX0KIApAQCAtMzM0LDcgKzMzNCw3IEBACiAJc3RydWN0IHNyY2ltcCAqc3JjaW1wOwogCWludCBpOwogCi0JaWYgKE5VTEwgIT0gYXBjbS0+c3JjaW1wcykgeworCWlmIChhcGNtLT5zcmNpbXBzKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhcGNtLT5uX3NyY2ltcDsgaSsrKSB7CiAJCQlzcmNpbXAgPSBhcGNtLT5zcmNpbXBzW2ldOwogCQkJc3JjaW1wLT5vcHMtPnVubWFwKHNyY2ltcCk7CkBAIC0zNDUsNyArMzQ1LDcgQEAKIAkJYXBjbS0+c3JjaW1wcyA9IE5VTEw7CiAJfQogCi0JaWYgKE5VTEwgIT0gYXBjbS0+c3JjY3MpIHsKKwlpZiAoYXBjbS0+c3JjY3MpIHsKIAkJZm9yIChpID0gMDsgaSA8IGFwY20tPm5fc3JjYzsgaSsrKSB7CiAJCQlzcmNfbWdyLT5wdXRfc3JjKHNyY19tZ3IsIGFwY20tPnNyY2NzW2ldKTsKIAkJCWFwY20tPnNyY2NzW2ldID0gTlVMTDsKQEAgLTM1NCw3ICszNTQsNyBAQAogCQlhcGNtLT5zcmNjcyA9IE5VTEw7CiAJfQogCi0JaWYgKE5VTEwgIT0gYXBjbS0+YW1peGVycykgeworCWlmIChhcGNtLT5hbWl4ZXJzKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhcGNtLT5uX2FtaXhlcjsgaSsrKSB7CiAJCQlhbWl4ZXJfbWdyLT5wdXRfYW1peGVyKGFtaXhlcl9tZ3IsIGFwY20tPmFtaXhlcnNbaV0pOwogCQkJYXBjbS0+YW1peGVyc1tpXSA9IE5VTEw7CkBAIC0zNjMsMTcgKzM2MywxNyBAQAogCQlhcGNtLT5hbWl4ZXJzID0gTlVMTDsKIAl9CiAKLQlpZiAoTlVMTCAhPSBhcGNtLT5tb25vKSB7CisJaWYgKGFwY20tPm1vbm8pIHsKIAkJc3VtX21nci0+cHV0X3N1bShzdW1fbWdyLCBhcGNtLT5tb25vKTsKIAkJYXBjbS0+bW9ubyA9IE5VTEw7CiAJfQogCi0JaWYgKE5VTEwgIT0gYXBjbS0+c3JjKSB7CisJaWYgKGFwY20tPnNyYykgewogCQlzcmNfbWdyLT5wdXRfc3JjKHNyY19tZ3IsIGFwY20tPnNyYyk7CiAJCWFwY20tPnNyYyA9IE5VTEw7CiAJfQogCi0JaWYgKE5VTEwgIT0gYXBjbS0+dm1fYmxvY2spIHsKKwlpZiAoYXBjbS0+dm1fYmxvY2spIHsKIAkJLyogVW5kbyBkZXZpY2UgdmlydHVhbCBtZW0gbWFwICovCiAJCWN0X3VubWFwX2F1ZGlvX2J1ZmZlcihhdGMsIGFwY20pOwogCQlhcGNtLT52bV9ibG9jayA9IE5VTEw7CkBAIC00MTksNyArNDE5LDcgQEAKIAlzcmMtPm9wcy0+c2V0X3N0YXRlKHNyYywgU1JDX1NUQVRFX09GRik7CiAJc3JjLT5vcHMtPmNvbW1pdF93cml0ZShzcmMpOwogCi0JaWYgKE5VTEwgIT0gYXBjbS0+c3JjY3MpIHsKKwlpZiAoYXBjbS0+c3JjY3MpIHsKIAkJZm9yIChpID0gMDsgaSA8IGFwY20tPm5fc3JjYzsgaSsrKSB7CiAJCQlzcmMgPSBhcGNtLT5zcmNjc1tpXTsKIAkJCXNyYy0+b3BzLT5zZXRfYm0oc3JjLCAwKTsKQEAgLTU0NCwxOCArNTQ0LDE4IEBACiAKIAlpZiAobl9zcmNjKSB7CiAJCWFwY20tPnNyY2NzID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSpuX3NyY2MsIEdGUF9LRVJORUwpOwotCQlpZiAoTlVMTCA9PSBhcGNtLT5zcmNjcykKKwkJaWYgKCFhcGNtLT5zcmNjcykKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KIAlpZiAobl9hbWl4ZXIpIHsKIAkJYXBjbS0+YW1peGVycyA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikqbl9hbWl4ZXIsIEdGUF9LRVJORUwpOwotCQlpZiAoTlVMTCA9PSBhcGNtLT5hbWl4ZXJzKSB7CisJCWlmICghYXBjbS0+YW1peGVycykgewogCQkJZXJyID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyb3IxOwogCQl9CiAJfQogCWFwY20tPnNyY2ltcHMgPSBremFsbG9jKHNpemVvZih2b2lkICopKm5fc3JjaW1wLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBhcGNtLT5zcmNpbXBzKSB7CisJaWYgKCFhcGNtLT5zcmNpbXBzKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3IxOwogCX0KQEAgLTgxOCw3ICs4MTgsNyBAQAogCS8qIEdldCBBTUlYRVIgcmVzb3VyY2UgKi8KIAluX2FtaXhlciA9IChuX2FtaXhlciA8IDIpID8gMiA6IG5fYW1peGVyOwogCWFwY20tPmFtaXhlcnMgPSBremFsbG9jKHNpemVvZih2b2lkICopKm5fYW1peGVyLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBhcGNtLT5hbWl4ZXJzKSB7CisJaWYgKCFhcGNtLT5hbWl4ZXJzKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3IxOwogCX0KQEAgLTkxOSw3ICs5MTksNyBAQAogCQlhbWl4ZXIgPSBhcGNtLT5hbWl4ZXJzW2ldOwogCQlhbWl4ZXItPm9wcy0+c2V0dXAoYW1peGVyLCAmc3JjLT5yc2MsIElOSVRfVk9MLCBOVUxMKTsKIAkJc3JjID0gc3JjLT5vcHMtPm5leHRfaW50ZXJsZWF2ZShzcmMpOwotCQlpZiAoTlVMTCA9PSBzcmMpCisJCWlmICghc3JjKQogCQkJc3JjID0gYXBjbS0+c3JjOwogCX0KIAkvKiBDb25uZWN0IHRvIFNQRElGT08gKi8KQEAgLTExMjEsNyArMTEyMSw3IEBACiAJc3RydWN0IGN0X21peGVyICptaXhlciA9IE5VTEw7CiAKIAkvKiBkaXNjb25uZWN0IGludGVybmFsIG1peGVyIG9iamVjdHMgKi8KLQlpZiAoTlVMTCAhPSBhdGMtPm1peGVyKSB7CisJaWYgKGF0Yy0+bWl4ZXIpIHsKIAkJbWl4ZXIgPSBhdGMtPm1peGVyOwogCQltaXhlci0+c2V0X2lucHV0X2xlZnQobWl4ZXIsIE1JWF9MSU5FX0lOLCBOVUxMKTsKIAkJbWl4ZXItPnNldF9pbnB1dF9yaWdodChtaXhlciwgTUlYX0xJTkVfSU4sIE5VTEwpOwpAQCAtMTEzMSw3ICsxMTMxLDcgQEAKIAkJbWl4ZXItPnNldF9pbnB1dF9yaWdodChtaXhlciwgTUlYX1NQRElGX0lOLCBOVUxMKTsKIAl9CiAKLQlpZiAoTlVMTCAhPSBhdGMtPmRhaW9zKSB7CisJaWYgKGF0Yy0+ZGFpb3MpIHsKIAkJZGFpb19tZ3IgPSAoc3RydWN0IGRhaW9fbWdyICopYXRjLT5yc2NfbWdyc1tEQUlPXTsKIAkJZm9yIChpID0gMDsgaSA8IGF0Yy0+bl9kYWlvOyBpKyspIHsKIAkJCWRhaW8gPSBhdGMtPmRhaW9zW2ldOwpAQCAtMTE0OSw3ICsxMTQ5LDcgQEAKIAkJYXRjLT5kYWlvcyA9IE5VTEw7CiAJfQogCi0JaWYgKE5VTEwgIT0gYXRjLT5wY20pIHsKKwlpZiAoYXRjLT5wY20pIHsKIAkJc3VtX21nciA9IGF0Yy0+cnNjX21ncnNbU1VNXTsKIAkJZm9yIChpID0gMDsgaSA8IGF0Yy0+bl9wY207IGkrKykKIAkJCXN1bV9tZ3ItPnB1dF9zdW0oc3VtX21nciwgYXRjLT5wY21baV0pOwpAQCAtMTE1OCw3ICsxMTU4LDcgQEAKIAkJYXRjLT5wY20gPSBOVUxMOwogCX0KIAotCWlmIChOVUxMICE9IGF0Yy0+c3JjcykgeworCWlmIChhdGMtPnNyY3MpIHsKIAkJc3JjX21nciA9IGF0Yy0+cnNjX21ncnNbU1JDXTsKIAkJZm9yIChpID0gMDsgaSA8IGF0Yy0+bl9zcmM7IGkrKykKIAkJCXNyY19tZ3ItPnB1dF9zcmMoc3JjX21nciwgYXRjLT5zcmNzW2ldKTsKQEAgLTExNjcsNyArMTE2Nyw3IEBACiAJCWF0Yy0+c3JjcyA9IE5VTEw7CiAJfQogCi0JaWYgKE5VTEwgIT0gYXRjLT5zcmNpbXBzKSB7CisJaWYgKGF0Yy0+c3JjaW1wcykgewogCQlzcmNpbXBfbWdyID0gYXRjLT5yc2NfbWdyc1tTUkNJTVBdOwogCQlmb3IgKGkgPSAwOyBpIDwgYXRjLT5uX3NyY2ltcDsgaSsrKSB7CiAJCQlzcmNpbXAgPSBhdGMtPnNyY2ltcHNbaV07CkBAIC0xMTg1LDcgKzExODUsNyBAQAogewogCWludCBpID0gMDsKIAotCWlmIChOVUxMID09IGF0YykKKwlpZiAoIWF0YykKIAkJcmV0dXJuIDA7CiAKIAlpZiAoYXRjLT50aW1lcikgewpAQCAtMTE5NiwyMSArMTE5NiwyMCBAQAogCWF0Y19yZWxlYXNlX3Jlc291cmNlcyhhdGMpOwogCiAJLyogRGVzdHJveSBpbnRlcm5hbCBtaXhlciBvYmplY3RzICovCi0JaWYgKE5VTEwgIT0gYXRjLT5taXhlcikKKwlpZiAoYXRjLT5taXhlcikKIAkJY3RfbWl4ZXJfZGVzdHJveShhdGMtPm1peGVyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fUlNDVFlQOyBpKyspIHsKLQkJaWYgKChOVUxMICE9IHJzY19tZ3JfZnVuY3NbaV0uZGVzdHJveSkgJiYKLQkJICAgIChOVUxMICE9IGF0Yy0+cnNjX21ncnNbaV0pKQorCQlpZiAocnNjX21ncl9mdW5jc1tpXS5kZXN0cm95ICYmIGF0Yy0+cnNjX21ncnNbaV0pCiAJCQlyc2NfbWdyX2Z1bmNzW2ldLmRlc3Ryb3koYXRjLT5yc2NfbWdyc1tpXSk7CiAKIAl9CiAKLQlpZiAoTlVMTCAhPSBhdGMtPmh3KQorCWlmIChhdGMtPmh3KQogCQlkZXN0cm95X2h3X29iaigoc3RydWN0IGh3ICopYXRjLT5odyk7CiAKIAkvKiBEZXN0cm95IGRldmljZSB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VyIG9iamVjdCAqLwotCWlmIChOVUxMICE9IGF0Yy0+dm0pIHsKKwlpZiAoYXRjLT52bSkgewogCQljdF92bV9kZXN0cm95KGF0Yy0+dm0pOwogCQlhdGMtPnZtID0gTlVMTDsKIAl9CkBAIC0xMjc1LDcgKzEyNzQsNyBAQAogCWFsc2FfZGV2X2Z1bmNzW01JWEVSXS5wdWJsaWNfbmFtZSA9IGF0Yy0+Y2hpcF9uYW1lOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9DVEFMU0FERVZTOyBpKyspIHsKLQkJaWYgKE5VTEwgPT0gYWxzYV9kZXZfZnVuY3NbaV0uY3JlYXRlKQorCQlpZiAoIWFsc2FfZGV2X2Z1bmNzW2ldLmNyZWF0ZSkKIAkJCWNvbnRpbnVlOwogCiAJCWVyciA9IGFsc2FfZGV2X2Z1bmNzW2ldLmNyZWF0ZShhdGMsIGksCkBAIC0xMzEyLDcgKzEzMTEsNyBAQAogCQlyZXR1cm4gZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9SU0NUWVA7IGkrKykgewotCQlpZiAoTlVMTCA9PSByc2NfbWdyX2Z1bmNzW2ldLmNyZWF0ZSkKKwkJaWYgKCFyc2NfbWdyX2Z1bmNzW2ldLmNyZWF0ZSkKIAkJCWNvbnRpbnVlOwogCiAJCWVyciA9IHJzY19tZ3JfZnVuY3NbaV0uY3JlYXRlKGF0Yy0+aHcsICZhdGMtPnJzY19tZ3JzW2ldKTsKQEAgLTEzMzksMTkgKzEzMzgsMTkgQEAKIAlpbnQgZXJyLCBpOwogCiAJYXRjLT5kYWlvcyA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikqKERBSU9OVU0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBhdGMtPmRhaW9zKQorCWlmICghYXRjLT5kYWlvcykKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlhdGMtPnNyY3MgPSBremFsbG9jKHNpemVvZih2b2lkICopKigyKjIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBhdGMtPnNyY3MpCisJaWYgKCFhdGMtPnNyY3MpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJYXRjLT5zcmNpbXBzID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSooMioyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gYXRjLT5zcmNpbXBzKQorCWlmICghYXRjLT5zcmNpbXBzKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWF0Yy0+cGNtID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSooMio0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gYXRjLT5wY20pCisJaWYgKCFhdGMtPnBjbSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkYWlvX21nciA9IChzdHJ1Y3QgZGFpb19tZ3IgKilhdGMtPnJzY19tZ3JzW0RBSU9dOwpAQCAtMTY0OCw3ICsxNjQ3LDcgQEAKIAkqcmF0YyA9IE5VTEw7CiAKIAlhdGMgPSBremFsbG9jKHNpemVvZigqYXRjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gYXRjKQorCWlmICghYXRjKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIFNldCBvcGVyYXRpb25zICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RkYWlvLmMgYi9zb3VuZC9wY2kvY3R4ZmkvY3RkYWlvLmMKaW5kZXggZGViNmNmYS4uYWY1NmViOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2N0eGZpL2N0ZGFpby5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGRhaW8uYwpAQCAtMTczLDcgKzE3Myw3IEBACiAJaW50IGk7CiAKIAllbnRyeSA9IGt6YWxsb2MoKHNpemVvZigqZW50cnkpICogZGFpby0+cnNjbC5tc3IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBlbnRyeSkKKwlpZiAoIWVudHJ5KQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIFByb2dyYW0gbWFzdGVyIGFuZCBjb25qdWdhdGUgcmVzb3VyY2VzICovCkBAIC0yMDEsNyArMjAxLDcgQEAKIAlpbnQgaTsKIAogCWVudHJ5ID0ga3phbGxvYygoc2l6ZW9mKCplbnRyeSkgKiBkYWlvLT5yc2NyLm1zciksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGVudHJ5KQorCWlmICghZW50cnkpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogUHJvZ3JhbSBtYXN0ZXIgYW5kIGNvbmp1Z2F0ZSByZXNvdXJjZXMgKi8KQEAgLTIyOCw3ICsyMjgsNyBAQAogCXN0cnVjdCBkYWlvICpkYWlvID0gJmRhby0+ZGFpbzsKIAlpbnQgaTsKIAotCWlmIChOVUxMID09IGRhby0+aW1hcHBlcnNbMF0pCisJaWYgKCFkYW8tPmltYXBwZXJzWzBdKQogCQlyZXR1cm4gMDsKIAogCWVudHJ5ID0gZGFvLT5pbWFwcGVyc1swXTsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCXN0cnVjdCBkYWlvICpkYWlvID0gJmRhby0+ZGFpbzsKIAlpbnQgaTsKIAotCWlmIChOVUxMID09IGRhby0+aW1hcHBlcnNbZGFpby0+cnNjbC5tc3JdKQorCWlmICghZGFvLT5pbWFwcGVyc1tkYWlvLT5yc2NsLm1zcl0pCiAJCXJldHVybiAwOwogCiAJZW50cnkgPSBkYW8tPmltYXBwZXJzW2RhaW8tPnJzY2wubXNyXTsKQEAgLTQwOCw3ICs0MDgsNyBAQAogCQlyZXR1cm4gZXJyOwogCiAJZGFvLT5pbWFwcGVycyA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikqZGVzYy0+bXNyKjIsIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGRhby0+aW1hcHBlcnMpIHsKKwlpZiAoIWRhby0+aW1hcHBlcnMpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjE7CiAJfQpAQCAtNDQyLDExICs0NDIsMTEgQEAKIAogc3RhdGljIGludCBkYW9fcnNjX3VuaW5pdChzdHJ1Y3QgZGFvICpkYW8pCiB7Ci0JaWYgKE5VTEwgIT0gZGFvLT5pbWFwcGVycykgewotCQlpZiAoTlVMTCAhPSBkYW8tPmltYXBwZXJzWzBdKQorCWlmIChkYW8tPmltYXBwZXJzKSB7CisJCWlmIChkYW8tPmltYXBwZXJzWzBdKQogCQkJZGFvX2NsZWFyX2xlZnRfaW5wdXQoZGFvKTsKIAotCQlpZiAoTlVMTCAhPSBkYW8tPmltYXBwZXJzW2Rhby0+ZGFpby5yc2NsLm1zcl0pCisJCWlmIChkYW8tPmltYXBwZXJzW2Rhby0+ZGFpby5yc2NsLm1zcl0pCiAJCQlkYW9fY2xlYXJfcmlnaHRfaW5wdXQoZGFvKTsKIAogCQlrZnJlZShkYW8tPmltYXBwZXJzKTsKQEAgLTU1NSw3ICs1NTUsNyBAQAogCS8qIEFsbG9jYXRlIG1lbSBmb3IgZGFpbyByZXNvdXJjZSAqLwogCWlmIChkZXNjLT50eXBlIDw9IERBSU9fT1VUX01BWCkgewogCQlkYW8gPSBremFsbG9jKHNpemVvZigqZGFvKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChOVUxMID09IGRhbykgeworCQlpZiAoIWRhbykgewogCQkJZXJyID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KQEAgLTU2Niw3ICs1NjYsNyBAQAogCQkqcmRhaW8gPSAmZGFvLT5kYWlvOwogCX0gZWxzZSB7CiAJCWRhaSA9IGt6YWxsb2Moc2l6ZW9mKCpkYWkpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKE5VTEwgPT0gZGFpKSB7CisJCWlmICghZGFpKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtNTgzLDkgKzU4Myw5IEBACiAJcmV0dXJuIDA7CiAKIGVycm9yOgotCWlmIChOVUxMICE9IGRhbykKKwlpZiAoZGFvKQogCQlrZnJlZShkYW8pOwotCWVsc2UgaWYgKE5VTEwgIT0gZGFpKQorCWVsc2UgaWYgKGRhaSkKIAkJa2ZyZWUoZGFpKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtZ3ItPm1ncl9sb2NrLCBmbGFncyk7CkBAIC02NjMsNyArNjYzLDcgQEAKIAlpbnQgZXJyOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1nci0+aW1hcF9sb2NrLCBmbGFncyk7Ci0JaWYgKCgwID09IGVudHJ5LT5hZGRyKSAmJiAobWdyLT5pbml0X2ltYXBfYWRkZWQpKSB7CisJaWYgKCFlbnRyeS0+YWRkciAmJiBtZ3ItPmluaXRfaW1hcF9hZGRlZCkgewogCQlpbnB1dF9tYXBwZXJfZGVsZXRlKCZtZ3ItPmltYXBwZXJzLCBtZ3ItPmluaXRfaW1hcCwKIAkJCQkJCQlkYWlvX21hcF9vcCwgbWdyKTsKIAkJbWdyLT5pbml0X2ltYXBfYWRkZWQgPSAwOwpAQCAtNzA3LDcgKzcwNyw3IEBACiAKIAkqcmRhaW9fbWdyID0gTlVMTDsKIAlkYWlvX21nciA9IGt6YWxsb2Moc2l6ZW9mKCpkYWlvX21nciksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGRhaW9fbWdyKQorCWlmICghZGFpb19tZ3IpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZXJyID0gcnNjX21ncl9pbml0KCZkYWlvX21nci0+bWdyLCBEQUlPLCBEQUlPX1JFU09VUkNFX05VTSwgaHcpOwpAQCAtNzE4LDcgKzcxOCw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmRhaW9fbWdyLT5pbWFwX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZkYWlvX21nci0+aW1hcHBlcnMpOwogCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZW50cnkpIHsKKwlpZiAoIWVudHJ5KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3IyOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS9jdGh3MjBrMS5jIGIvc291bmQvcGNpL2N0eGZpL2N0aHcyMGsxLmMKaW5kZXggYWQzZTFkMS4uMGNmNDAwZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2N0eGZpL2N0aHcyMGsxLmMKKysrIGIvc291bmQvcGNpL2N0eGZpL2N0aHcyMGsxLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCiAJKnJibGsgPSBOVUxMOwogCWJsayA9IGt6YWxsb2Moc2l6ZW9mKCpibGspLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBibGspCisJaWYgKCFibGspCiAJCXJldHVybiAtRU5PTUVNOwogCiAJKnJibGsgPSBibGs7CkBAIC00OTQsNyArNDk0LDcgQEAKIAogCSpyYmxrID0gTlVMTDsKIAlibGsgPSBremFsbG9jKHNpemVvZigqYmxrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gYmxrKQorCWlmICghYmxrKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCSpyYmxrID0gYmxrOwpAQCAtNTE1LDcgKzUxNSw3IEBACiAKIAkqcmJsayA9IE5VTEw7CiAJYmxrID0ga3phbGxvYyhzaXplb2YoKmJsayksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGJsaykKKwlpZiAoIWJsaykKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkqcmJsayA9IGJsazsKQEAgLTcwMiw3ICs3MDIsNyBAQAogCiAJKnJibGsgPSBOVUxMOwogCWJsayA9IGt6YWxsb2Moc2l6ZW9mKCpibGspLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBibGspCisJaWYgKCFibGspCiAJCXJldHVybiAtRU5PTUVNOwogCiAJKnJibGsgPSBibGs7CkBAIC03MjMsNyArNzIzLDcgQEAKIAogCSpyYmxrID0gTlVMTDsKIAkvKmJsayA9IGt6YWxsb2Moc2l6ZW9mKCpibGspLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBibGspCisJaWYgKCFibGspCiAJCXJldHVybiAtRU5PTUVNOwogCiAJKnJibGsgPSBibGs7Ki8KQEAgLTkwOSw3ICs5MDksNyBAQAogCiAJKnJibGsgPSBOVUxMOwogCWJsayA9IGt6YWxsb2Moc2l6ZW9mKCpibGspLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBibGspCisJaWYgKCFibGspCiAJCXJldHVybiAtRU5PTUVNOwogCiAJKnJibGsgPSBibGs7CkBAIC05NTgsNyArOTU4LDcgQEAKIAogCSpyYmxrID0gTlVMTDsKIAlibGsgPSBremFsbG9jKHNpemVvZigqYmxrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gYmxrKQorCWlmICghYmxrKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCSpyYmxrID0gYmxrOwpAQCAtMTE1Miw3ICsxMTUyLDcgQEAKIAogCSpyYmxrID0gTlVMTDsKIAlibGsgPSBremFsbG9jKHNpemVvZigqYmxrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gYmxrKQorCWlmICghYmxrKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWJsay0+aTJzY3RsID0gaHdfcmVhZF8yMGt4KGh3LCBJMlNDVEwpOwpAQCAtMTgwOCw3ICsxODA4LDcgQEAKIAkvKiBCeSBkZWZhdWx0LCBIZW5kcml4IGNhcmQgVUFBIEJhcjAgc2hvdWxkIGJlIHVzaW5nIG1lbW9yeS4uLiAqLwogCWlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKIAltZW1fYmFzZSA9IGlvcmVtYXAoaW9fYmFzZSwgcGNpX3Jlc291cmNlX2xlbihwY2ksIDApKTsKLQlpZiAoTlVMTCA9PSBtZW1fYmFzZSkKKwlpZiAoIW1lbV9iYXNlKQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCS8qIFJlYWQgY3VycmVudCBtb2RlIGZyb20gTW9kZSBDaGFuZ2UgUmVnaXN0ZXIgKi8KQEAgLTE5NzcsNyArMTk3Nyw3IEBACiAKIAlody0+aXJxCT0gLTE7CiAKLQlpZiAoTlVMTCAhPSAoKHZvaWQgKilody0+bWVtX2Jhc2UpKQorCWlmIChody0+bWVtX2Jhc2UpCiAJCWlvdW5tYXAoKHZvaWQgKilody0+bWVtX2Jhc2UpOwogCiAJaHctPm1lbV9iYXNlID0gKHVuc2lnbmVkIGxvbmcpTlVMTDsKQEAgLTIyNzQsNyArMjI3NCw3IEBACiAKIAkqcmh3ID0gTlVMTDsKIAlodzIwazEgPSBremFsbG9jKHNpemVvZigqaHcyMGsxKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gaHcyMGsxKQorCWlmICghaHcyMGsxKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9ja19pbml0KCZodzIwazEtPnJlZ18yMGsxX2xvY2spOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2N0eGZpL2N0aHcyMGsyLmMgYi9zb3VuZC9wY2kvY3R4ZmkvY3RodzIwazIuYwppbmRleCBkZWM0NmQwLi5iNmIxMWJmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkvY3RodzIwazIuYworKysgYi9zb3VuZC9wY2kvY3R4ZmkvY3RodzIwazIuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAKIAkqcmJsayA9IE5VTEw7CiAJYmxrID0ga3phbGxvYyhzaXplb2YoKmJsayksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGJsaykKKwlpZiAoIWJsaykKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkqcmJsayA9IGJsazsKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCiAJKnJibGsgPSBOVUxMOwogCWJsayA9IGt6YWxsb2Moc2l6ZW9mKCpibGspLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBibGspCisJaWYgKCFibGspCiAJCXJldHVybiAtRU5PTUVNOwogCiAJKnJibGsgPSBibGs7CkBAIC01MTMsNyArNTEzLDcgQEAKIAogCSpyYmxrID0gTlVMTDsKIAlibGsgPSBremFsbG9jKHNpemVvZigqYmxrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gYmxrKQorCWlmICghYmxrKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCSpyYmxrID0gYmxrOwpAQCAtNzAyLDcgKzcwMiw3IEBACiAKIAkqcmJsayA9IE5VTEw7CiAJYmxrID0ga3phbGxvYyhzaXplb2YoKmJsayksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGJsaykKKwlpZiAoIWJsaykKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkqcmJsayA9IGJsazsKQEAgLTg5MSw3ICs4OTEsNyBAQAogCiAJKnJibGsgPSBOVUxMOwogCWJsayA9IGt6YWxsb2Moc2l6ZW9mKCpibGspLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBibGspCisJaWYgKCFibGspCiAJCXJldHVybiAtRU5PTUVNOwogCiAJKnJibGsgPSBibGs7CkBAIC05NDEsNyArOTQxLDcgQEAKIAogCSpyYmxrID0gTlVMTDsKIAlibGsgPSBremFsbG9jKHNpemVvZigqYmxrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gYmxrKQorCWlmICghYmxrKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCSpyYmxrID0gYmxrOwpAQCAtMTA5Miw3ICsxMDkyLDcgQEAKIAogCSpyYmxrID0gTlVMTDsKIAlibGsgPSBremFsbG9jKHNpemVvZigqYmxrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gYmxrKQorCWlmICghYmxrKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKQEAgLTExMTIsNiArMTExMiwyNiBAQAogCXJldHVybiAwOwogfQogCisvKiBUaW1lciBpbnRlcnJ1cHQgKi8KK3N0YXRpYyBpbnQgc2V0X3RpbWVyX2lycShzdHJ1Y3QgaHcgKmh3LCBpbnQgZW5hYmxlKQoreworCWh3X3dyaXRlXzIwa3goaHcsIEdJRSwgZW5hYmxlID8gSVRfSU5UIDogMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3RpbWVyX3RpY2soc3RydWN0IGh3ICpodywgdW5zaWduZWQgaW50IHRpY2tzKQoreworCWlmICh0aWNrcykKKwkJdGlja3MgfD0gVElNUl9JRSB8IFRJTVJfSVA7CisJaHdfd3JpdGVfMjBreChodywgVElNUiwgdGlja3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF93YyhzdHJ1Y3QgaHcgKmh3KQoreworCXJldHVybiBod19yZWFkXzIwa3goaHcsIFdDKTsKK30KKwogLyogQ2FyZCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBibG9jayAqLwogc3RydWN0IGRhY19jb25mIHsKIAl1bnNpZ25lZCBpbnQgbXNyOyAvKiBtYXN0ZXIgc2FtcGxlIHJhdGUgaW4gcnNycyAqLwpAQCAtMTg0MSw2ICsxODYxLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCBjdF8yMGsyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGh3ICpodyA9IGRldl9pZDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJc3RhdHVzID0gaHdfcmVhZF8yMGt4KGh3LCBHSVApOworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAoaHctPmlycV9jYWxsYmFjaykKKwkJaHctPmlycV9jYWxsYmFjayhody0+aXJxX2NhbGxiYWNrX2RhdGEsIHN0YXR1cyk7CisKKwlod193cml0ZV8yMGt4KGh3LCBHSVAsIHN0YXR1cyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCiBzdGF0aWMgaW50IGh3X2NhcmRfc3RhcnQoc3RydWN0IGh3ICpodykKIHsKIAlpbnQgZXJyID0gMDsKQEAgLTE4NjgsNyArMTkwNCw3IEBACiAJCWh3LT5pb19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGh3LT5wY2ksIDIpOwogCQlody0+bWVtX2Jhc2UgPSAodW5zaWduZWQgbG9uZylpb3JlbWFwKGh3LT5pb19iYXNlLAogCQkJCQlwY2lfcmVzb3VyY2VfbGVuKGh3LT5wY2ksIDIpKTsKLQkJaWYgKE5VTEwgPT0gKHZvaWQgKilody0+bWVtX2Jhc2UpIHsKKwkJaWYgKCFody0+bWVtX2Jhc2UpIHsKIAkJCWVyciA9IC1FTk9FTlQ7CiAJCQlnb3RvIGVycm9yMjsKIAkJfQpAQCAtMTg3OSwxMiArMTkxNSwxNSBAQAogCXNldF9maWVsZCgmZ2N0bCwgR0NUTF9VQUEsIDApOwogCWh3X3dyaXRlXzIwa3goaHcsIEdMT0JBTF9DTlRMX0dDVEwsIGdjdGwpOwogCi0JLyppZiAoKGVyciA9IHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBjdF9hdGNfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKLQkJCQlhdGMtPmNoaXBfZGV0YWlscy0+bm1fY2FyZCwgaHcpKSkgewotCQlnb3RvIGVycm9yMzsKKwlpZiAoaHctPmlycSA8IDApIHsKKwkJZXJyID0gcmVxdWVzdF9pcnEocGNpLT5pcnEsIGN0XzIwazJfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCQkgICJjdHhmaSIsIGh3KTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiWEZpOiBDYW5ub3QgZ2V0IGlycSAlZFxuIiwgcGNpLT5pcnEpOworCQkJZ290byBlcnJvcjI7CisJCX0KKwkJaHctPmlycSA9IHBjaS0+aXJxOwogCX0KLQlody0+aXJxID0gcGNpLT5pcnE7Ci0JKi8KIAogCXBjaV9zZXRfbWFzdGVyKHBjaSk7CiAKQEAgLTE5MjMsNyArMTk2Miw3IEBACiAKIAlody0+aXJxCT0gLTE7CiAKLQlpZiAoTlVMTCAhPSAoKHZvaWQgKilody0+bWVtX2Jhc2UpKQorCWlmIChody0+bWVtX2Jhc2UpCiAJCWlvdW5tYXAoKHZvaWQgKilody0+bWVtX2Jhc2UpOwogCiAJaHctPm1lbV9iYXNlID0gKHVuc2lnbmVkIGxvbmcpTlVMTDsKQEAgLTE5NzIsNyArMjAxMSw3IEBACiAJaHdfd3JpdGVfMjBreChodywgR0xPQkFMX0NOVExfR0NUTCwgZ2N0bCk7CiAKIAkvKiBSZXNldCBhbGwgZ2xvYmFsIHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCWh3X3dyaXRlXzIwa3goaHcsIElOVEVSUlVQVF9HSUUsIDApOworCWh3X3dyaXRlXzIwa3goaHcsIEdJRSwgMCk7CiAJLyogUmVzZXQgYWxsIFNSQyBwZW5kaW5nIGludGVycnVwdHMgKi8KIAlod193cml0ZV8yMGt4KGh3LCBTUkNfSVAsIDApOwogCkBAIC0yMTQ5LDYgKzIxODgsMTAgQEAKIAkuZGFpb19tZ3Jfc2V0X2ltYXBueHQgPSBkYWlvX21ncl9zZXRfaW1hcG54dCwKIAkuZGFpb19tZ3Jfc2V0X2ltYXBhZGRyID0gZGFpb19tZ3Jfc2V0X2ltYXBhZGRyLAogCS5kYWlvX21ncl9jb21taXRfd3JpdGUgPSBkYWlvX21ncl9jb21taXRfd3JpdGUsCisKKwkuc2V0X3RpbWVyX2lycSA9IHNldF90aW1lcl9pcnEsCisJLnNldF90aW1lcl90aWNrID0gc2V0X3RpbWVyX3RpY2ssCisJLmdldF93YyA9IGdldF93YywKIH07CiAKIGludCBfX2RldmluaXQgY3JlYXRlXzIwazJfaHdfb2JqKHN0cnVjdCBodyAqKnJodykKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS9jdG1peGVyLmMgYi9zb3VuZC9wY2kvY3R4ZmkvY3RtaXhlci5jCmluZGV4IGYyNmQ3Y2QuLjE1YzFlNzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdG1peGVyLmMKKysrIGIvc291bmQvcGNpL2N0eGZpL2N0bWl4ZXIuYwpAQCAtNjU0LDcgKzY1NCw3IEBACiAJaW50IGVycjsKIAogCWtjdGwgPSBzbmRfY3RsX25ldzEobmV3LCBtaXhlci0+YXRjKTsKLQlpZiAoTlVMTCA9PSBrY3RsKQorCWlmICgha2N0bCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNID09IGtjdGwtPmlkLmlmYWNlKQpAQCAtODM3LDE3ICs4MzcsMTcgQEAKIAkqcm1peGVyID0gTlVMTDsKIAkvKiBBbGxvY2F0ZSBtZW0gZm9yIG1peGVyIG9iaiAqLwogCW1peGVyID0ga3phbGxvYyhzaXplb2YoKm1peGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gbWl4ZXIpCisJaWYgKCFtaXhlcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAltaXhlci0+YW1peGVycyA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikqKE5VTV9DVF9BTUlYRVJTKkNITl9OVU0pLAogCQkJCSBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBtaXhlci0+YW1peGVycykgeworCWlmICghbWl4ZXItPmFtaXhlcnMpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjE7CiAJfQogCW1peGVyLT5zdW1zID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSooTlVNX0NUX1NVTVMqQ0hOX05VTSksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IG1peGVyLT5zdW1zKSB7CisJaWYgKCFtaXhlci0+c3VtcykgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yMjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RwY20uYyBiL3NvdW5kL3BjaS9jdHhmaS9jdHBjbS5jCmluZGV4IDYwZWEyMzEuLmQwZGMyMjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdHBjbS5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdHBjbS5jCkBAIC05Nyw3ICs5Nyw3IEBACiB7CiAJc3RydWN0IGN0X2F0Y19wY20gKmFwY20gPSBhdGNfcGNtOwogCi0JaWYgKE5VTEwgPT0gYXBjbS0+c3Vic3RyZWFtKQorCWlmICghYXBjbS0+c3Vic3RyZWFtKQogCQlyZXR1cm47CiAKIAlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGFwY20tPnN1YnN0cmVhbSk7CkBAIC0xMjMsNyArMTIzLDcgQEAKIAlpbnQgZXJyOwogCiAJYXBjbSA9IGt6YWxsb2Moc2l6ZW9mKCphcGNtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gYXBjbSkKKwlpZiAoIWFwY20pCiAJCXJldHVybiAtRU5PTUVNOwogCiAJYXBjbS0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwpAQCAtMjcxLDcgKzI3MSw3IEBACiAJaW50IGVycjsKIAogCWFwY20gPSBremFsbG9jKHNpemVvZigqYXBjbSksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGFwY20pCisJaWYgKCFhcGNtKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWFwY20tPnN0YXJ0ZWQgPSAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2N0eGZpL2N0cmVzb3VyY2UuYyBiL3NvdW5kL3BjaS9jdHhmaS9jdHJlc291cmNlLmMKaW5kZXggODg5YzQ5NS4uN2RmYWY2NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2N0eGZpL2N0cmVzb3VyY2UuYworKysgYi9zb3VuZC9wY2kvY3R4ZmkvY3RyZXNvdXJjZS5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlyc2MtPm1zciA9IG1zcjsKIAlyc2MtPmh3ID0gaHc7CiAJcnNjLT5vcHMgPSAmcnNjX2dlbmVyaWNfb3BzOwotCWlmIChOVUxMID09IGh3KSB7CisJaWYgKCFodykgewogCQlyc2MtPmN0cmxfYmxrID0gTlVMTDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjE2LDcgKzIxNiw3IEBACiAJbWdyLT50eXBlID0gTlVNX1JTQ1RZUDsKIAogCW1nci0+cnNjcyA9IGt6YWxsb2MoKChhbW91bnQgKyA4IC0gMSkgLyA4KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gbWdyLT5yc2NzKQorCWlmICghbWdyLT5yc2NzKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2N0eGZpL2N0c3JjLmMgYi9zb3VuZC9wY2kvY3R4ZmkvY3RzcmMuYwppbmRleCBkZjQzYTVjLi5jNzQ5ZmE3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkvY3RzcmMuYworKysgYi9zb3VuZC9wY2kvY3R4ZmkvY3RzcmMuYwpAQCAtNDQxLDcgKzQ0MSw3IEBACiAJZWxzZQogCQlzcmMgPSBremFsbG9jKHNpemVvZigqc3JjKSwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAoTlVMTCA9PSBzcmMpIHsKKwlpZiAoIXNyYykgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yMTsKIAl9CkBAIC01NTAsNyArNTUwLDcgQEAKIAogCSpyc3JjX21nciA9IE5VTEw7CiAJc3JjX21nciA9IGt6YWxsb2Moc2l6ZW9mKCpzcmNfbWdyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gc3JjX21ncikKKwlpZiAoIXNyY19tZ3IpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZXJyID0gcnNjX21ncl9pbml0KCZzcmNfbWdyLT5tZ3IsIFNSQywgU1JDX1JFU09VUkNFX05VTSwgaHcpOwpAQCAtNjc5LDcgKzY3OSw3IEBACiAJLyogUmVzZXJ2ZSBtZW1vcnkgZm9yIGltYXBwZXIgbm9kZXMgKi8KIAlzcmNpbXAtPmltYXBwZXJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGltYXBwZXIpKmRlc2MtPm1zciwKIAkJCQkgICBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBzcmNpbXAtPmltYXBwZXJzKSB7CisJaWYgKCFzcmNpbXAtPmltYXBwZXJzKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3IxOwogCX0KQEAgLTgzMyw3ICs4MzMsNyBAQAogCiAJKnJzcmNpbXBfbWdyID0gTlVMTDsKIAlzcmNpbXBfbWdyID0ga3phbGxvYyhzaXplb2YoKnNyY2ltcF9tZ3IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBzcmNpbXBfbWdyKQorCWlmICghc3JjaW1wX21ncikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAllcnIgPSByc2NfbWdyX2luaXQoJnNyY2ltcF9tZ3ItPm1nciwgU1JDSU1QLCBTUkNJTVBfUkVTT1VSQ0VfTlVNLCBodyk7CkBAIC04NDQsNyArODQ0LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmc3JjaW1wX21nci0+aW1hcF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmc3JjaW1wX21nci0+aW1hcHBlcnMpOwogCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZW50cnkpIHsKKwlpZiAoIWVudHJ5KSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3IyOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS9jdHZtZW0uYyBiL3NvdW5kL3BjaS9jdHhmaS9jdHZtZW0uYwppbmRleCA2NzY2NWE3Li42Yjc4NzUyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkvY3R2bWVtLmMKKysrIGIvc291bmQvcGNpL2N0eGZpL2N0dm1lbS5jCkBAIC02MCw3ICs2MCw3IEBACiAJfQogCiAJYmxvY2sgPSBremFsbG9jKHNpemVvZigqYmxvY2spLCBHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBibG9jaykKKwlpZiAoIWJsb2NrKQogCQlnb3RvIG91dDsKIAogCWJsb2NrLT5hZGRyID0gZW50cnktPmFkZHI7CkBAIC0xODEsNyArMTgxLDcgQEAKIAkqcnZtID0gTlVMTDsKIAogCXZtID0ga3phbGxvYyhzaXplb2YoKnZtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gdm0pCisJaWYgKCF2bSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAltdXRleF9pbml0KCZ2bS0+bG9jayk7CkBAIC0xODksNyArMTg5LDcgQEAKIAkvKiBBbGxvY2F0ZSBwYWdlIHRhYmxlIHBhZ2VzICovCiAJZm9yIChpID0gMDsgaSA8IENUX1BUUF9OVU07IGkrKykgewogCQl2bS0+cHRwW2ldID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCQlpZiAoTlVMTCA9PSB2bS0+cHRwW2ldKQorCQlpZiAoIXZtLT5wdHBbaV0pCiAJCQlicmVhazsKIAl9CiAJaWYgKCFpKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL0tjb25maWcgYi9zb3VuZC9wY2kvaGRhL0tjb25maWcKaW5kZXggMDQ0MzhmMS4uNTU1NDVlMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9oZGEvS2NvbmZpZwpAQCAtNDYsNiArNDYsMjAgQEAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBqYWNrIHBsdWdnaW5nIG5vdGlmaWNhdGlvbiB2aWEKIAkgIGlucHV0IGxheWVyLgogCitjb25maWcgU05EX0hEQV9QQVRDSF9MT0FERVIKKwlib29sICJTdXBwb3J0IGluaXRpYWxpemF0aW9uIHBhdGNoIGxvYWRpbmcgZm9yIEhELWF1ZGlvIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBTTkRfSERBX0hXREVQCisJc2VsZWN0IFNORF9IREFfUkVDT05GSUcKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGFsbG93IHRoZSBIRC1hdWRpbyBkcml2ZXIgdG8gbG9hZCBhIHBzZXVkbworCSAgZmlybXdhcmUgZmlsZSAoInBhdGNoIikgZm9yIG92ZXJyaWRpbmcgdGhlIEJJT1Mgc2V0dXAgYXQKKwkgIHN0YXJ0IHVwLiAgVGhlICJwYXRjaCIgZmlsZSBjYW4gYmUgc3BlY2lmaWVkIHZpYSBwYXRjaCBtb2R1bGUKKwkgIG9wdGlvbiwgc3VjaCBhcyBwYXRjaD1oZGEtaW5pdC4KKworCSAgVGhpcyBvcHRpb24gdHVybnMgb24gaHdkZXAgYW5kIHJlY29uZmlnIGZlYXR1cmVzIGF1dG9tYXRpY2FsbHkuCisKIGNvbmZpZyBTTkRfSERBX0NPREVDX1JFQUxURUsKIAlib29sICJCdWlsZCBSZWFsdGVrIEhELWF1ZGlvIGNvZGVjIHN1cHBvcnQiCiAJZGVmYXVsdCB5CkBAIC0xMzQsNiArMTQ4LDE5IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gU05EX0hEQV9DT0RFQ19JTlRFTEhETUkKIAorY29uZmlnIFNORF9IREFfQ09ERUNfQ0lSUlVTCisJYm9vbCAiQnVpbGQgQ2lycnVzIExvZ2ljIGNvZGVjIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTTkRfSERBX0lOVEVMCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIENpcnJ1cyBMb2dpYyBjb2RlYyBzdXBwb3J0IGluCisJICBzbmQtaGRhLWludGVsIGRyaXZlciwgc3VjaCBhcyBDUzQyMDYuCisKKwkgIFdoZW4gdGhlIEhELWF1ZGlvIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSwgdGhlIGNvZGVjCisJICBzdXBwb3J0IGNvZGUgaXMgYWxzbyBidWlsdCBhcyBhbm90aGVyIG1vZHVsZSwKKwkgIHNuZC1oZGEtY29kZWMtY2lycnVzLgorCSAgVGhpcyBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBsb2FkZWQgYXQgcHJvYmluZy4KKwogY29uZmlnIFNORF9IREFfQ09ERUNfQ09ORVhBTlQKIAlib29sICJCdWlsZCBDb25leGFudCBIRC1hdWRpbyBjb2RlYyBzdXBwb3J0IgogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9NYWtlZmlsZSBiL3NvdW5kL3BjaS9oZGEvTWFrZWZpbGUKaW5kZXggZTMwODFkNC4uMzE1YTFjNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9NYWtlZmlsZQorKysgYi9zb3VuZC9wY2kvaGRhL01ha2VmaWxlCkBAIC0xMyw2ICsxMyw3IEBACiBzbmQtaGRhLWNvZGVjLWlkdC1vYmpzIDo9CXBhdGNoX3NpZ21hdGVsLm8KIHNuZC1oZGEtY29kZWMtc2kzMDU0LW9ianMgOj0JcGF0Y2hfc2kzMDU0Lm8KIHNuZC1oZGEtY29kZWMtYXRpaGRtaS1vYmpzIDo9CXBhdGNoX2F0aWhkbWkubworc25kLWhkYS1jb2RlYy1jaXJydXMtb2JqcyA6PQlwYXRjaF9jaXJydXMubwogc25kLWhkYS1jb2RlYy1jYTAxMTAtb2JqcyA6PQlwYXRjaF9jYTAxMTAubwogc25kLWhkYS1jb2RlYy1jb25leGFudC1vYmpzIDo9CXBhdGNoX2NvbmV4YW50Lm8KIHNuZC1oZGEtY29kZWMtdmlhLW9ianMgOj0JcGF0Y2hfdmlhLm8KQEAgLTQxLDYgKzQyLDkgQEAKIGlmZGVmIENPTkZJR19TTkRfSERBX0NPREVDX0FUSUhETUkKIG9iai0kKENPTkZJR19TTkRfSERBX0lOVEVMKSArPSBzbmQtaGRhLWNvZGVjLWF0aWhkbWkubwogZW5kaWYKK2lmZGVmIENPTkZJR19TTkRfSERBX0NPREVDX0NJUlJVUworb2JqLSQoQ09ORklHX1NORF9IREFfSU5URUwpICs9IHNuZC1oZGEtY29kZWMtY2lycnVzLm8KK2VuZGlmCiBpZmRlZiBDT05GSUdfU05EX0hEQV9DT0RFQ19DQTAxMTAKIG9iai0kKENPTkZJR19TTkRfSERBX0lOVEVMKSArPSBzbmQtaGRhLWNvZGVjLWNhMDExMC5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jIGIvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jCmluZGV4IGIwMjc1YTAuLjNmNTFhOTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSAiaGRhX2JlZXAuaCIKKyNpbmNsdWRlICJoZGFfbG9jYWwuaCIKIAogZW51bSB7CiAJRElHQkVFUF9IWl9TVEVQID0gNDY4NzUsCS8qIDQ2Ljg3NSBIeiAqLwpAQCAtMTE4LDYgKzExOSw5IEBACiAJc3RydWN0IGhkYV9iZWVwICpiZWVwOwogCWludCBlcnI7CiAKKwlpZiAoIXNuZF9oZGFfZ2V0X2Jvb2xfaGludChjb2RlYywgImJlZXAiKSkKKwkJcmV0dXJuIDA7IC8qIGRpc2FibGVkIGV4cGxpY2l0bHkgKi8KKwogCWJlZXAgPSBremFsbG9jKHNpemVvZigqYmVlcCksIEdGUF9LRVJORUwpOwogCWlmIChiZWVwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggYzdkZjAxYi4uYWY5ODlmNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC00NCw2ICs0NCw3IEBACiAvKiBjb2RlYyB2ZW5kb3IgbGFiZWxzICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZW5kb3JfaWQgaGRhX3ZlbmRvcl9pZHNbXSA9IHsKIAl7IDB4MTAwMiwgIkFUSSIgfSwKKwl7IDB4MTAxMywgIkNpcnJ1cyBMb2dpYyIgfSwKIAl7IDB4MTA1NywgIk1vdG9yb2xhIiB9LAogCXsgMHgxMDk1LCAiU2lsaWNvbiBJbWFnZSIgfSwKIAl7IDB4MTBkZSwgIk52aWRpYSIgfSwKQEAgLTE1MCw3ICsxNTEsMTQgQEAKIHsKIAl1MzIgdmFsOwogCi0JdmFsID0gKHUzMikoY29kZWMtPmFkZHIgJiAweDBmKSA8PCAyODsKKwlpZiAoKGNvZGVjLT5hZGRyICYgfjB4ZikgfHwgKGRpcmVjdCAmIH4xKSB8fCAobmlkICYgfjB4N2YpIHx8CisJICAgICh2ZXJiICYgfjB4ZmZmKSB8fCAocGFybSAmIH4weGZmZmYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGRhLWNvZGVjOiBvdXQgb2YgcmFuZ2UgY21kICV4OiV4OiV4OiV4OiV4XG4iLAorCQkgICAgICAgY29kZWMtPmFkZHIsIGRpcmVjdCwgbmlkLCB2ZXJiLCBwYXJtKTsKKwkJcmV0dXJuIH4wOworCX0KKworCXZhbCA9ICh1MzIpY29kZWMtPmFkZHIgPDwgMjg7CiAJdmFsIHw9ICh1MzIpZGlyZWN0IDw8IDI3OwogCXZhbCB8PSAodTMyKW5pZCA8PCAyMDsKIAl2YWwgfD0gdmVyYiA8PCA4OwpAQCAtMTY3LDYgKzE3NSw5IEBACiAJc3RydWN0IGhkYV9idXMgKmJ1cyA9IGNvZGVjLT5idXM7CiAJaW50IGVycjsKIAorCWlmIChjbWQgPT0gfjApCisJCXJldHVybiAtMTsKKwogCWlmIChyZXMpCiAJCSpyZXMgPSAtMTsKICBhZ2FpbjoKQEAgLTI5MSwxMSArMzAyLDIwIEBACiAJdW5zaWduZWQgaW50IHBhcm07CiAJaW50IGksIGNvbm5fbGVuLCBjb25uczsKIAl1bnNpZ25lZCBpbnQgc2hpZnQsIG51bV9lbGVtcywgbWFzazsKKwl1bnNpZ25lZCBpbnQgd2NhcHM7CiAJaGRhX25pZF90IHByZXZfbmlkOwogCiAJaWYgKHNuZF9CVUdfT04oIWNvbm5fbGlzdCB8fCBtYXhfY29ubnMgPD0gMCkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CisJaWYgKCEod2NhcHMgJiBBQ19XQ0FQX0NPTk5fTElTVCkgJiYKKwkgICAgZ2V0X3djYXBzX3R5cGUod2NhcHMpICE9IEFDX1dJRF9WT0xfS05CKSB7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJoZGFfY29kZWM6ICIKKwkJCSAgICJjb25uZWN0aW9uIGxpc3Qgbm90IGF2YWlsYWJsZSBmb3IgMHgleFxuIiwgbmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJcGFybSA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfQ09OTkxJU1RfTEVOKTsKIAlpZiAocGFybSAmIEFDX0NMSVNUX0xPTkcpIHsKIAkJLyogbG9uZyBmb3JtICovCkBAIC0zMTYsNiArMzM2LDggQEAKIAkJLyogc2luZ2xlIGNvbm5lY3Rpb24gKi8KIAkJcGFybSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAogCQkJCQkgIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfTElTVCwgMCk7CisJCWlmIChwYXJtID09IC0xICYmIGNvZGVjLT5idXMtPnJpcmJfZXJyb3IpCisJCQlyZXR1cm4gLUVJTzsKIAkJY29ubl9saXN0WzBdID0gcGFybSAmIG1hc2s7CiAJCXJldHVybiAxOwogCX0KQEAgLTMyNyw5ICszNDksMTIgQEAKIAkJaW50IHJhbmdlX3ZhbDsKIAkJaGRhX25pZF90IHZhbCwgbjsKIAotCQlpZiAoaSAlIG51bV9lbGVtcyA9PSAwKQorCQlpZiAoaSAlIG51bV9lbGVtcyA9PSAwKSB7CiAJCQlwYXJtID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCiAJCQkJCQkgIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfTElTVCwgaSk7CisJCQlpZiAocGFybSA9PSAtMSAmJiBjb2RlYy0+YnVzLT5yaXJiX2Vycm9yKQorCQkJCXJldHVybiAtRUlPOworCQl9CiAJCXJhbmdlX3ZhbCA9ICEhKHBhcm0gJiAoMSA8PCAoc2hpZnQtMSkpKTsgLyogcmFuZ2VzICovCiAJCXZhbCA9IHBhcm0gJiBtYXNrOwogCQlpZiAodmFsID09IDApIHsKQEAgLTcyNyw4ICs3NTIsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX25vZGVzOyBpKyssIG5pZCsrKSB7CiAJCXN0cnVjdCBoZGFfcGluY2ZnICpwaW47CiAJCXVuc2lnbmVkIGludCB3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKLQkJdW5zaWduZWQgaW50IHdpZF90eXBlID0gKHdjYXBzICYgQUNfV0NBUF9UWVBFKSA+PgotCQkJCUFDX1dDQVBfVFlQRV9TSElGVDsKKwkJdW5zaWduZWQgaW50IHdpZF90eXBlID0gZ2V0X3djYXBzX3R5cGUod2NhcHMpOwogCQlpZiAod2lkX3R5cGUgIT0gQUNfV0lEX1BJTikKIAkJCWNvbnRpbnVlOwogCQlwaW4gPSBzbmRfYXJyYXlfbmV3KCZjb2RlYy0+aW5pdF9waW5zKTsKQEAgLTg5MSw3ICs5MTUsNyBAQAogICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KICAqLwogaW50IC8qX19kZXZpbml0Ki8gc25kX2hkYV9jb2RlY19uZXcoc3RydWN0IGhkYV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGNvZGVjX2FkZHIsCi0JCQkJICAgIGludCBkb19pbml0LCBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQorCQkJCSAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjOwogCWNoYXIgY29tcG9uZW50WzMxXTsKQEAgLTk4NCwxMSArMTAwOCw2IEBACiAJCQkgICAgY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnLAogCQkJICAgIEFDX1BXUlNUX0QwKTsKIAotCWlmIChkb19pbml0KSB7Ci0JCWVyciA9IHNuZF9oZGFfY29kZWNfY29uZmlndXJlKGNvZGVjKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycm9yOwotCX0KIAlzbmRfaGRhX2NvZGVjX3Byb2NfbmV3KGNvZGVjKTsKIAogCXNuZF9oZGFfY3JlYXRlX2h3ZGVwKGNvZGVjKTsKQEAgLTEwNDIsNiArMTA2MSw3IEBACiAJCWVyciA9IGluaXRfdW5zb2xfcXVldWUoY29kZWMtPmJ1cyk7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY29kZWNfY29uZmlndXJlKTsKIAogLyoqCiAgKiBzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbSAtIHNldCB1cCB0aGUgY29kZWMgZm9yIHN0cmVhbWluZwpAQCAtMjM1NiwxNiArMjM3NiwyMCBAQAogCWhkYV9uaWRfdCBuaWQ7CiAJaW50IGk7CiAKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBmZywgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCisJLyogdGhpcyBkZWxheSBzZWVtcyBuZWNlc3NhcnkgdG8gYXZvaWQgY2xpY2sgbm9pc2UgYXQgcG93ZXItZG93biAqLworCWlmIChwb3dlcl9zdGF0ZSA9PSBBQ19QV1JTVF9EMykKKwkJbXNsZWVwKDEwMCk7CisJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBmZywgMCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsCiAJCQkgICAgcG93ZXJfc3RhdGUpOwotCW1zbGVlcCgxMCk7IC8qIHBhcnRpYWwgd29ya2Fyb3VuZCBmb3IgImF6eF9nZXRfcmVzcG9uc2UgdGltZW91dCIgKi8KKwkvKiBwYXJ0aWFsIHdvcmthcm91bmQgZm9yICJhenhfZ2V0X3Jlc3BvbnNlIHRpbWVvdXQiICovCisJaWYgKHBvd2VyX3N0YXRlID09IEFDX1BXUlNUX0QwKQorCQltc2xlZXAoMTApOwogCiAJbmlkID0gY29kZWMtPnN0YXJ0X25pZDsKIAlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPm51bV9ub2RlczsgaSsrLCBuaWQrKykgewogCQl1bnNpZ25lZCBpbnQgd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CiAJCWlmICh3Y2FwcyAmIEFDX1dDQVBfUE9XRVIpIHsKLQkJCXVuc2lnbmVkIGludCB3aWRfdHlwZSA9ICh3Y2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4KLQkJCQlBQ19XQ0FQX1RZUEVfU0hJRlQ7CisJCQl1bnNpZ25lZCBpbnQgd2lkX3R5cGUgPSBnZXRfd2NhcHNfdHlwZSh3Y2Fwcyk7CiAJCQlpZiAocG93ZXJfc3RhdGUgPT0gQUNfUFdSU1RfRDMgJiYKIAkJCSAgICB3aWRfdHlwZSA9PSBBQ19XSURfUElOKSB7CiAJCQkJdW5zaWduZWQgaW50IHBpbmNhcDsKQEAgLTI1NzMsNyArMjU5Nyw3IEBACiAJY2FzZSAyMDoKIAljYXNlIDI0OgogCWNhc2UgMzI6Ci0JCWlmIChtYXhicHMgPj0gMzIpCisJCWlmIChtYXhicHMgPj0gMzIgfHwgZm9ybWF0ID09IFNORFJWX1BDTV9GT1JNQVRfRkxPQVRfTEUpCiAJCQl2YWwgfD0gMHg0MDsKIAkJZWxzZSBpZiAobWF4YnBzID49IDI0KQogCQkJdmFsIHw9IDB4MzA7CkBAIC0yNzAwLDExICsyNzI0LDEyIEBACiAJCQkJCWJwcyA9IDIwOwogCQkJfQogCQl9Ci0JCWVsc2UgaWYgKHN0cmVhbXMgPT0gQUNfU1VQRk1UX0ZMT0FUMzIpIHsKLQkJCS8qIHNob3VsZCBiZSBleGNsdXNpdmUgKi8KKwkJaWYgKHN0cmVhbXMgJiBBQ19TVVBGTVRfRkxPQVQzMikgewogCQkJZm9ybWF0cyB8PSBTTkRSVl9QQ01fRk1UQklUX0ZMT0FUX0xFOwotCQkJYnBzID0gMzI7Ci0JCX0gZWxzZSBpZiAoc3RyZWFtcyA9PSBBQ19TVVBGTVRfQUMzKSB7CisJCQlpZiAoIWJwcykKKwkJCQlicHMgPSAzMjsKKwkJfQorCQlpZiAoc3RyZWFtcyA9PSBBQ19TVVBGTVRfQUMzKSB7CiAJCQkvKiBzaG91bGQgYmUgZXhjbHVzaXZlICovCiAJCQkvKiB0ZW1wb3JhcnkgaGFjazogd2UgaGF2ZSBzdGlsbCBubyBwcm9wZXIgc3VwcG9ydAogCQkJICogZm9yIHRoZSBkaXJlY3QgQUMzIHN0cmVhbS4uLgpAQCAtMzEwMiw3ICszMTI3LDcgQEAKIAl0YmwgPSBxOwogCiAJaWYgKHRibC0+dmFsdWUgPj0gMCAmJiB0YmwtPnZhbHVlIDwgbnVtX2NvbmZpZ3MpIHsKLSNpZmRlZiBDT05GSUdfU05EX0RFQlVHX0RFVEVDVAorI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQogCQljaGFyIHRtcFsxMF07CiAJCWNvbnN0IGNoYXIgKm1vZGVsID0gTlVMTDsKIAkJaWYgKG1vZGVscykKQEAgLTM2NTUsOCArMzY4MCw3IEBACiAJZW5kX25pZCA9IGNvZGVjLT5zdGFydF9uaWQgKyBjb2RlYy0+bnVtX25vZGVzOwogCWZvciAobmlkID0gY29kZWMtPnN0YXJ0X25pZDsgbmlkIDwgZW5kX25pZDsgbmlkKyspIHsKIAkJdW5zaWduZWQgaW50IHdpZF9jYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOwotCQl1bnNpZ25lZCBpbnQgd2lkX3R5cGUgPQotCQkJKHdpZF9jYXBzICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7CisJCXVuc2lnbmVkIGludCB3aWRfdHlwZSA9IGdldF93Y2Fwc190eXBlKHdpZF9jYXBzKTsKIAkJdW5zaWduZWQgaW50IGRlZl9jb25mOwogCQlzaG9ydCBhc3NvYywgbG9jOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAppbmRleCAxYjc1ZjI4Li45OTU1MmZiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKQEAgLTgzMCw3ICs4MzAsOCBAQAogaW50IHNuZF9oZGFfYnVzX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGNvbnN0IHN0cnVjdCBoZGFfYnVzX3RlbXBsYXRlICp0ZW1wLAogCQkgICAgc3RydWN0IGhkYV9idXMgKipidXNwKTsKIGludCBzbmRfaGRhX2NvZGVjX25ldyhzdHJ1Y3QgaGRhX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgY29kZWNfYWRkciwKLQkJICAgICAgaW50IGRvX2luaXQsIHN0cnVjdCBoZGFfY29kZWMgKipjb2RlY3ApOworCQkgICAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKTsKK2ludCBzbmRfaGRhX2NvZGVjX2NvbmZpZ3VyZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKIC8qCiAgKiBsb3cgbGV2ZWwgZnVuY3Rpb25zCkBAIC05MzgsNiArOTM5LDEzIEBACiAjZGVmaW5lIHNuZF9oZGFfY29kZWNfbmVlZHNfcmVzdW1lKGNvZGVjKSAxCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TTkRfSERBX1BBVENIX0xPQURFUgorLyoKKyAqIHBhdGNoIGZpcm13YXJlCisgKi8KK2ludCBzbmRfaGRhX2xvYWRfcGF0Y2goc3RydWN0IGhkYV9idXMgKmJ1cywgY29uc3QgY2hhciAqcGF0Y2gpOworI2VuZGlmCisKIC8qCiAgKiBDb2RlYyBtb2R1bGFyaXphdGlvbgogICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKaW5kZXggMWQ1Nzk3YS4uYjM2ZjZjNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYwpAQCAtMTIxLDExICsxMjEsMTcgQEAKIAlpZiAobm9kZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlub2RlLT5uaWQgPSBuaWQ7Ci0JbmNvbm5zID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubl9saXN0LAotCQkJCQkgSERBX01BWF9DT05ORUNUSU9OUyk7Ci0JaWYgKG5jb25ucyA8IDApIHsKLQkJa2ZyZWUobm9kZSk7Ci0JCXJldHVybiBuY29ubnM7CisJbm9kZS0+d2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CisJbm9kZS0+dHlwZSA9IGdldF93Y2Fwc190eXBlKG5vZGUtPndpZF9jYXBzKTsKKwlpZiAobm9kZS0+d2lkX2NhcHMgJiBBQ19XQ0FQX0NPTk5fTElTVCkgeworCQluY29ubnMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBjb25uX2xpc3QsCisJCQkJCQkgSERBX01BWF9DT05ORUNUSU9OUyk7CisJCWlmIChuY29ubnMgPCAwKSB7CisJCQlrZnJlZShub2RlKTsKKwkJCXJldHVybiBuY29ubnM7CisJCX0KKwl9IGVsc2UgeworCQluY29ubnMgPSAwOwogCX0KIAlpZiAobmNvbm5zIDw9IEFSUkFZX1NJWkUobm9kZS0+c2xpc3QpKQogCQlub2RlLT5jb25uX2xpc3QgPSBub2RlLT5zbGlzdDsKQEAgLTE0MCw4ICsxNDYsNiBAQAogCX0KIAltZW1jcHkobm9kZS0+Y29ubl9saXN0LCBjb25uX2xpc3QsIG5jb25ucyAqIHNpemVvZihoZGFfbmlkX3QpKTsKIAlub2RlLT5uY29ubnMgPSBuY29ubnM7Ci0Jbm9kZS0+d2lkX2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7Ci0Jbm9kZS0+dHlwZSA9IChub2RlLT53aWRfY2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOwogCiAJaWYgKG5vZGUtPnR5cGUgPT0gQUNfV0lEX1BJTikgewogCQlub2RlLT5waW5fY2FwcyA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIG5vZGUtPm5pZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYwppbmRleCA2ODEyZmJlLi5jYzI0ZTY3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCiAjaW5jbHVkZSAiaGRhX2xvY2FsLmgiCkBAIC0zMTIsMTIgKzMxMyw4IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHNzaXplX3QgaW5pdF92ZXJic19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgaW50IHBhcnNlX2luaXRfdmVyYnMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaGRhX3ZlcmIgKnY7CiAJaW50IG5pZCwgdmVyYiwgcGFyYW07CiAKQEAgLTMzMSw2ICszMjgsMTggQEAKIAl2LT5uaWQgPSBuaWQ7CiAJdi0+dmVyYiA9IHZlcmI7CiAJdi0+cGFyYW0gPSBwYXJhbTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgaW5pdF92ZXJic19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJaW50IGVyciA9IHBhcnNlX2luaXRfdmVyYnMoY29kZWMsIGJ1Zik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zNzYsMTkgKzM4NSwxNSBAQAogCiAjZGVmaW5lIE1BWF9ISU5UUwkxMDI0CiAKLXN0YXRpYyBzc2l6ZV90IGhpbnRzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgaW50IHBhcnNlX2hpbnRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CiAJY2hhciAqa2V5LCAqdmFsOwogCXN0cnVjdCBoZGFfaGludCAqaGludDsKIAogCXdoaWxlIChpc3NwYWNlKCpidWYpKQogCQlidWYrKzsKIAlpZiAoISpidWYgfHwgKmJ1ZiA9PSAnIycgfHwgKmJ1ZiA9PSAnXG4nKQotCQlyZXR1cm4gY291bnQ7CisJCXJldHVybiAwOwogCWlmICgqYnVmID09ICc9JykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJa2V5ID0ga3N0cm5kdXBfbm9lb2woYnVmLCAxMDI0KTsKQEAgLTQxMSw3ICs0MTYsNyBAQAogCQlrZnJlZShoaW50LT5rZXkpOwogCQloaW50LT5rZXkgPSBrZXk7CiAJCWhpbnQtPnZhbCA9IHZhbDsKLQkJcmV0dXJuIGNvdW50OworCQlyZXR1cm4gMDsKIAl9CiAJLyogYWxsb2NhdGUgYSBuZXcgaGludCBlbnRyeSAqLwogCWlmIChjb2RlYy0+aGludHMudXNlZCA+PSBNQVhfSElOVFMpCkBAIC00MjQsNiArNDI5LDE4IEBACiAJfQogCWhpbnQtPmtleSA9IGtleTsKIAloaW50LT52YWwgPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhpbnRzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJaW50IGVyciA9IHBhcnNlX2hpbnRzKGNvZGVjLCBidWYpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNDY5LDIwICs0ODYsMjQgQEAKIAogI2RlZmluZSBNQVhfUElOX0NPTkZJR1MJCTMyCiAKK3N0YXRpYyBpbnQgcGFyc2VfdXNlcl9waW5fY29uZmlncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqYnVmKQoreworCWludCBuaWQsIGNmZzsKKworCWlmIChzc2NhbmYoYnVmLCAiJWkgJWkiLCAmbmlkLCAmY2ZnKSAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5pZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHNuZF9oZGFfYWRkX3BpbmNmZyhjb2RlYywgJmNvZGVjLT51c2VyX3BpbnMsIG5pZCwgY2ZnKTsKK30KKwogc3RhdGljIHNzaXplX3QgdXNlcl9waW5fY29uZmlnc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7Ci0JaW50IG5pZCwgY2ZnOwotCWludCBlcnI7Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiVpICVpIiwgJm5pZCwgJmNmZykgIT0gMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFuaWQpCi0JCXJldHVybiAtRUlOVkFMOwotCWVyciA9IHNuZF9oZGFfYWRkX3BpbmNmZyhjb2RlYywgJmNvZGVjLT51c2VyX3BpbnMsIG5pZCwgY2ZnKTsKKwlpbnQgZXJyID0gcGFyc2VfdXNlcl9waW5fY29uZmlncyhjb2RlYywgYnVmKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gY291bnQ7CkBAIC01NTMsMyArNTc0LDE4MCBAQAogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9nZXRfYm9vbF9oaW50KTsKIAogI2VuZGlmIC8qIENPTkZJR19TTkRfSERBX1JFQ09ORklHICovCisKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QQVRDSF9MT0FERVIKKworLyogcGFyc2VyIG1vZGUgKi8KK2VudW0geworCUxJTkVfTU9ERV9OT05FLAorCUxJTkVfTU9ERV9DT0RFQywKKwlMSU5FX01PREVfTU9ERUwsCisJTElORV9NT0RFX1BJTkNGRywKKwlMSU5FX01PREVfVkVSQiwKKwlMSU5FX01PREVfSElOVCwKKwlOVU1fTElORV9NT0RFUywKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHN0cm1hdGNoKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJcmV0dXJuIHN0cm5pY21wKGEsIGIsIHN0cmxlbihiKSkgPT0gMDsKK30KKworLyogcGFyc2UgdGhlIGNvbnRlbnRzIGFmdGVyIHRoZSBsaW5lICJbY29kZWNdIgorICogYWNjZXB0IG9ubHkgdGhlIGxpbmUgd2l0aCB0aHJlZSBudW1iZXJzLCBhbmQgYXNzaWduIHRoZSBjdXJyZW50IGNvZGVjCisgKi8KK3N0YXRpYyB2b2lkIHBhcnNlX2NvZGVjX21vZGUoY2hhciAqYnVmLCBzdHJ1Y3QgaGRhX2J1cyAqYnVzLAorCQkJICAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQoreworCXVuc2lnbmVkIGludCB2ZW5kb3JpZCwgc3ViaWQsIGNhZGRyOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjOworCisJKmNvZGVjcCA9IE5VTEw7CisJaWYgKHNzY2FuZihidWYsICIlaSAlaSAlaSIsICZ2ZW5kb3JpZCwgJnN1YmlkLCAmY2FkZHIpID09IDMpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjb2RlYywgJmJ1cy0+Y29kZWNfbGlzdCwgbGlzdCkgeworCQkJaWYgKGNvZGVjLT5hZGRyID09IGNhZGRyKSB7CisJCQkJKmNvZGVjcCA9IGNvZGVjOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCisvKiBwYXJzZSB0aGUgY29udGVudHMgYWZ0ZXIgdGhlIG90aGVyIGNvbW1hbmQgdGFncywgW3BpbmNmZ10sIFt2ZXJiXSwKKyAqIFtoaW50XSBhbmQgW21vZGVsXQorICoganVzdCBwYXNzIHRvIHRoZSBzeXNmcyBoZWxwZXIgKG9ubHkgd2hlbiBhbnkgY29kZWMgd2FzIHNwZWNpZmllZCkKKyAqLworc3RhdGljIHZvaWQgcGFyc2VfcGluY2ZnX21vZGUoY2hhciAqYnVmLCBzdHJ1Y3QgaGRhX2J1cyAqYnVzLAorCQkJICAgICAgc3RydWN0IGhkYV9jb2RlYyAqKmNvZGVjcCkKK3sKKwlpZiAoISpjb2RlY3ApCisJCXJldHVybjsKKwlwYXJzZV91c2VyX3Bpbl9jb25maWdzKCpjb2RlY3AsIGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3ZlcmJfbW9kZShjaGFyICpidWYsIHN0cnVjdCBoZGFfYnVzICpidXMsCisJCQkgICAgc3RydWN0IGhkYV9jb2RlYyAqKmNvZGVjcCkKK3sKKwlpZiAoISpjb2RlY3ApCisJCXJldHVybjsKKwlwYXJzZV9pbml0X3ZlcmJzKCpjb2RlY3AsIGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2hpbnRfbW9kZShjaGFyICpidWYsIHN0cnVjdCBoZGFfYnVzICpidXMsCisJCQkgICAgc3RydWN0IGhkYV9jb2RlYyAqKmNvZGVjcCkKK3sKKwlpZiAoISpjb2RlY3ApCisJCXJldHVybjsKKwlwYXJzZV9oaW50cygqY29kZWNwLCBidWYpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9tb2RlbF9tb2RlKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywKKwkJCSAgICAgc3RydWN0IGhkYV9jb2RlYyAqKmNvZGVjcCkKK3sKKwlpZiAoISpjb2RlY3ApCisJCXJldHVybjsKKwlrZnJlZSgoKmNvZGVjcCktPm1vZGVsbmFtZSk7CisJKCpjb2RlY3ApLT5tb2RlbG5hbWUgPSBrc3RyZHVwKGJ1ZiwgR0ZQX0tFUk5FTCk7Cit9CisKK3N0cnVjdCBoZGFfcGF0Y2hfaXRlbSB7CisJY29uc3QgY2hhciAqdGFnOworCXZvaWQgKCpwYXJzZXIpKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywgc3RydWN0IGhkYV9jb2RlYyAqKnJldGMpOworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfcGF0Y2hfaXRlbSBwYXRjaF9pdGVtc1tOVU1fTElORV9NT0RFU10gPSB7CisJW0xJTkVfTU9ERV9DT0RFQ10gPSB7ICJbY29kZWNdIiwgcGFyc2VfY29kZWNfbW9kZSB9LAorCVtMSU5FX01PREVfTU9ERUxdID0geyAiW21vZGVsXSIsIHBhcnNlX21vZGVsX21vZGUgfSwKKwlbTElORV9NT0RFX1ZFUkJdID0geyAiW3ZlcmJdIiwgcGFyc2VfdmVyYl9tb2RlIH0sCisJW0xJTkVfTU9ERV9QSU5DRkddID0geyAiW3BpbmNmZ10iLCBwYXJzZV9waW5jZmdfbW9kZSB9LAorCVtMSU5FX01PREVfSElOVF0gPSB7ICJbaGludF0iLCBwYXJzZV9oaW50X21vZGUgfSwKK307CisKKy8qIGNoZWNrIHRoZSBsaW5lIHN0YXJ0aW5nIHdpdGggJ1snIC0tIGNoYW5nZSB0aGUgcGFyc2VyIG1vZGUgYWNjb2RpbmdseSAqLworc3RhdGljIGludCBwYXJzZV9saW5lX21vZGUoY2hhciAqYnVmLCBzdHJ1Y3QgaGRhX2J1cyAqYnVzKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBhdGNoX2l0ZW1zKTsgaSsrKSB7CisJCWlmICghcGF0Y2hfaXRlbXNbaV0udGFnKQorCQkJY29udGludWU7CisJCWlmIChzdHJtYXRjaChidWYsIHBhdGNoX2l0ZW1zW2ldLnRhZykpCisJCQlyZXR1cm4gaTsKKwl9CisJcmV0dXJuIExJTkVfTU9ERV9OT05FOworfQorCisvKiBjb3B5IG9uZSBsaW5lIGZyb20gdGhlIGJ1ZmZlciBpbiBmdywgYW5kIHVwZGF0ZSB0aGUgZmllbGRzIGluIGZ3CisgKiByZXR1cm4gemVybyBpZiBpdCByZWFjaGVzIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgb3Igbm9uLXplcm8KKyAqIGlmIHN1Y2Nlc3NmdWxseSBjb3BpZWQgYSBsaW5lCisgKgorICogdGhlIHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIHRoZSBsaW5lIGFyZSBzdHJpcHBlZAorICovCitzdGF0aWMgaW50IGdldF9saW5lX2Zyb21fZncoY2hhciAqYnVmLCBpbnQgc2l6ZSwgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlpbnQgbGVuOworCWNvbnN0IGNoYXIgKnAgPSBmdy0+ZGF0YTsKKwl3aGlsZSAoaXNzcGFjZSgqcCkgJiYgZnctPnNpemUpIHsKKwkJcCsrOworCQlmdy0+c2l6ZS0tOworCX0KKwlpZiAoIWZ3LT5zaXplKQorCQlyZXR1cm4gMDsKKwlpZiAoc2l6ZSA8IGZ3LT5zaXplKQorCQlzaXplID0gZnctPnNpemU7CisKKwlmb3IgKGxlbiA9IDA7IGxlbiA8IGZ3LT5zaXplOyBsZW4rKykgeworCQlpZiAoISpwKQorCQkJYnJlYWs7CisJCWlmICgqcCA9PSAnXG4nKSB7CisJCQlwKys7CisJCQlsZW4rKzsKKwkJCWJyZWFrOworCQl9CisJCWlmIChsZW4gPCBzaXplKQorCQkJKmJ1ZisrID0gKnArKzsKKwl9CisJKmJ1ZiA9IDA7CisJZnctPnNpemUgLT0gbGVuOworCWZ3LT5kYXRhID0gcDsKKwlyZW1vdmVfdHJhaWxfc3BhY2VzKGJ1Zik7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBsb2FkIGEgInBhdGNoIiBmaXJtd2FyZSBmaWxlIGFuZCBwYXJzZSBpdAorICovCitpbnQgc25kX2hkYV9sb2FkX3BhdGNoKHN0cnVjdCBoZGFfYnVzICpidXMsIGNvbnN0IGNoYXIgKnBhdGNoKQoreworCWludCBlcnI7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlzdHJ1Y3QgZmlybXdhcmUgdG1wOworCWNoYXIgYnVmWzEyOF07CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWM7CisJaW50IGxpbmVfbW9kZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBidXMtPmNhcmQtPmRldjsKKworCWlmIChzbmRfQlVHX09OKCFkZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgcGF0Y2gsIGRldik7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZGEtY29kZWM6IENhbm5vdCBsb2FkIHRoZSBwYXRjaCAnJXMnXG4iLAorCQkgICAgICAgcGF0Y2gpOworCQlyZXR1cm4gZXJyOworCX0KKworCXRtcCA9ICpmdzsKKwlsaW5lX21vZGUgPSBMSU5FX01PREVfTk9ORTsKKwljb2RlYyA9IE5VTEw7CisJd2hpbGUgKGdldF9saW5lX2Zyb21fZncoYnVmLCBzaXplb2YoYnVmKSAtIDEsICZ0bXApKSB7CisJCWlmICghKmJ1ZiB8fCAqYnVmID09ICcjJyB8fCAqYnVmID09ICdcbicpCisJCQljb250aW51ZTsKKwkJaWYgKCpidWYgPT0gJ1snKQorCQkJbGluZV9tb2RlID0gcGFyc2VfbGluZV9tb2RlKGJ1ZiwgYnVzKTsKKwkJZWxzZSBpZiAocGF0Y2hfaXRlbXNbbGluZV9tb2RlXS5wYXJzZXIpCisJCQlwYXRjaF9pdGVtc1tsaW5lX21vZGVdLnBhcnNlcihidWYsIGJ1cywgJmNvZGVjKTsKKwl9CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2xvYWRfcGF0Y2gpOworI2VuZGlmIC8qIENPTkZJR19TTkRfSERBX1BBVENIX0xPQURFUiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggMTc1ZjA3YS4uMjBhNjZmOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC02MSw2ICs2MSw5IEBACiBzdGF0aWMgaW50IHByb2JlX29ubHlbU05EUlZfQ0FSRFNdOwogc3RhdGljIGludCBzaW5nbGVfY21kOwogc3RhdGljIGludCBlbmFibGVfbXNpOworI2lmZGVmIENPTkZJR19TTkRfSERBX1BBVENIX0xPQURFUgorc3RhdGljIGNoYXIgKnBhdGNoW1NORFJWX0NBUkRTXTsKKyNlbmRpZgogCiBtb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIEludGVsIEhEIGF1ZGlvIGludGVyZmFjZS4iKTsKQEAgLTg0LDYgKzg3LDEwIEBACiAJCSAiKGZvciBkZWJ1Z2dpbmcgb25seSkuIik7CiBtb2R1bGVfcGFyYW0oZW5hYmxlX21zaSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX21zaSwgIkVuYWJsZSBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdCAoTVNJKSIpOworI2lmZGVmIENPTkZJR19TTkRfSERBX1BBVENIX0xPQURFUgorbW9kdWxlX3BhcmFtX2FycmF5KHBhdGNoLCBjaGFycCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHBhdGNoLCAiUGF0Y2ggZmlsZSBmb3IgSW50ZWwgSEQgYXVkaW8gaW50ZXJmYWNlLiIpOworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiBzdGF0aWMgaW50IHBvd2VyX3NhdmUgPSBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFX0RFRkFVTFQ7CkBAIC0xMzMxLDggKzEzMzgsNyBAQAogCVtBWlhfRFJJVkVSX1RFUkFdID0gMSwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGF6eF9jb2RlY19jcmVhdGUoc3RydWN0IGF6eCAqY2hpcCwgY29uc3QgY2hhciAqbW9kZWwsCi0JCQkJICAgICAgaW50IG5vX2luaXQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhenhfY29kZWNfY3JlYXRlKHN0cnVjdCBhenggKmNoaXAsIGNvbnN0IGNoYXIgKm1vZGVsKQogewogCXN0cnVjdCBoZGFfYnVzX3RlbXBsYXRlIGJ1c190ZW1wOwogCWludCBjLCBjb2RlY3MsIGVycjsKQEAgLTEzOTEsNyArMTM5Nyw3IEBACiAJZm9yIChjID0gMDsgYyA8IG1heF9zbG90czsgYysrKSB7CiAJCWlmICgoY2hpcC0+Y29kZWNfbWFzayAmICgxIDw8IGMpKSAmIGNoaXAtPmNvZGVjX3Byb2JlX21hc2spIHsKIAkJCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjOwotCQkJZXJyID0gc25kX2hkYV9jb2RlY19uZXcoY2hpcC0+YnVzLCBjLCAhbm9faW5pdCwgJmNvZGVjKTsKKwkJCWVyciA9IHNuZF9oZGFfY29kZWNfbmV3KGNoaXAtPmJ1cywgYywgJmNvZGVjKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCWNvbnRpbnVlOwogCQkJY29kZWNzKys7CkBAIC0xNDAxLDcgKzE0MDcsMTYgQEAKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBTRlggIm5vIGNvZGVjcyBpbml0aWFsaXplZFxuIik7CiAJCXJldHVybiAtRU5YSU87CiAJfQorCXJldHVybiAwOworfQogCisvKiBjb25maWd1cmUgZWFjaCBjb2RlYyBpbnN0YW5jZSAqLworc3RhdGljIGludCBfX2RldmluaXQgYXp4X2NvZGVjX2NvbmZpZ3VyZShzdHJ1Y3QgYXp4ICpjaGlwKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29kZWMsICZjaGlwLT5idXMtPmNvZGVjX2xpc3QsIGxpc3QpIHsKKwkJc25kX2hkYV9jb2RlY19jb25maWd1cmUoY29kZWMpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI4NCw2ICsyMjk5LDMwIEBACiAJfQogfQogCisvKgorICogd2hpdGUtbGlzdCBmb3IgZW5hYmxlX21zaQorICovCitzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgbXNpX3doaXRlX2xpc3RbXSBfX2RldmluaXRkYXRhID0geworCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDM2MDcsICJIUCBDb21wYSBDUTQwIiwgMSksCisJe30KK307CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBjaGVja19tc2koc3RydWN0IGF6eCAqY2hpcCkKK3sKKwljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcTsKKworCWNoaXAtPm1zaSA9IGVuYWJsZV9tc2k7CisJaWYgKGNoaXAtPm1zaSkKKwkJcmV0dXJuOworCXEgPSBzbmRfcGNpX3F1aXJrX2xvb2t1cChjaGlwLT5wY2ksIG1zaV93aGl0ZV9saXN0KTsKKwlpZiAocSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiaGRhX2ludGVsOiBtc2kgZm9yIGRldmljZSAlMDR4OiUwNHggc2V0IHRvICVkXG4iLAorCQkgICAgICAgcS0+c3VidmVuZG9yLCBxLT5zdWJkZXZpY2UsIHEtPnZhbHVlKTsKKwkJY2hpcC0+bXNpID0gcS0+dmFsdWU7CisJfQorfQorCiAKIC8qCiAgKiBjb25zdHJ1Y3RvcgpAQCAtMjMxOCw3ICsyMzU3LDcgQEAKIAljaGlwLT5wY2kgPSBwY2k7CiAJY2hpcC0+aXJxID0gLTE7CiAJY2hpcC0+ZHJpdmVyX3R5cGUgPSBkcml2ZXJfdHlwZTsKLQljaGlwLT5tc2kgPSBlbmFibGVfbXNpOworCWNoZWNrX21zaShjaGlwKTsKIAljaGlwLT5kZXZfaW5kZXggPSBkZXY7CiAJSU5JVF9XT1JLKCZjaGlwLT5pcnFfcGVuZGluZ193b3JrLCBhenhfaXJxX3BlbmRpbmdfd29yayk7CiAKQEAgLTI1MjYsMTUgKzI1NjUsMzIgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiBzZXQgdGhpcyBoZXJlIHNpbmNlIGl0J3MgcmVmZXJyZWQgaW4gc25kX2hkYV9sb2FkX3BhdGNoKCkgKi8KKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CisKIAllcnIgPSBhenhfY3JlYXRlKGNhcmQsIHBjaSwgZGV2LCBwY2lfaWQtPmRyaXZlcl9kYXRhLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CiAJY2FyZC0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAogCS8qIGNyZWF0ZSBjb2RlYyBpbnN0YW5jZXMgKi8KLQllcnIgPSBhenhfY29kZWNfY3JlYXRlKGNoaXAsIG1vZGVsW2Rldl0sIHByb2JlX29ubHlbZGV2XSk7CisJZXJyID0gYXp4X2NvZGVjX2NyZWF0ZShjaGlwLCBtb2RlbFtkZXZdKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QQVRDSF9MT0FERVIKKwlpZiAocGF0Y2hbZGV2XSkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFNGWCAiQXBwbHlpbmcgcGF0Y2ggZmlybXdhcmUgJyVzJ1xuIiwKKwkJCSAgIHBhdGNoW2Rldl0pOworCQllcnIgPSBzbmRfaGRhX2xvYWRfcGF0Y2goY2hpcC0+YnVzLCBwYXRjaFtkZXZdKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dF9mcmVlOworCX0KKyNlbmRpZgorCWlmICghcHJvYmVfb25seVtkZXZdKSB7CisJCWVyciA9IGF6eF9jb2RlY19jb25maWd1cmUoY2hpcCk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXRfZnJlZTsKKwl9CiAKIAkvKiBjcmVhdGUgUENNIHN0cmVhbXMgKi8KIAllcnIgPSBzbmRfaGRhX2J1aWxkX3BjbXMoY2hpcC0+YnVzKTsKQEAgLTI1NDYsOCArMjYwMiw2IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CiAKLQlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7Ci0KIAllcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKQEAgLTI2NDksMTEgKzI3MDMsMTUgQEAKIAkvKiB0aGlzIGVudHJ5IHNlZW1zIHN0aWxsIHZhbGlkIC0tIGkuZS4gd2l0aG91dCBlbXUyMGt4IGNoaXAgKi8KIAl7IFBDSV9ERVZJQ0UoMHgxMTAyLCAweDAwMDkpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX0dFTkVSSUMgfSwKICNlbmRpZgotCS8qIEFNRCBHZW5lcmljLCBQQ0kgY2xhc3MgY29kZSBhbmQgVmVuZG9yIElEIGZvciBIRCBBdWRpbyAqLworCS8qIEFNRC9BVEkgR2VuZXJpYywgUENJIGNsYXNzIGNvZGUgYW5kIFZlbmRvciBJRCBmb3IgSEQgQXVkaW8gKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9BTllfSUQpLAogCSAgLmNsYXNzID0gUENJX0NMQVNTX01VTFRJTUVESUFfSERfQVVESU8gPDwgOCwKIAkgIC5jbGFzc19tYXNrID0gMHhmZmZmZmYsCiAJICAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX0dFTkVSSUMgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9BTllfSUQpLAorCSAgLmNsYXNzID0gUENJX0NMQVNTX01VTFRJTUVESUFfSERfQVVESU8gPDwgOCwKKwkgIC5jbGFzc19tYXNrID0gMHhmZmZmZmYsCisJICAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX0dFTkVSSUMgfSwKIAl7IDAsIH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXp4X2lkcyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oIGIvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaAppbmRleCA4MzM0OTAxLi41ZjFkY2M1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKQEAgLTk5LDcgKzk5LDYgQEAKIGludCBzbmRfaGRhX2FkZF92bWFzdGVyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjaGFyICpuYW1lLAogCQkJdW5zaWduZWQgaW50ICp0bHYsIGNvbnN0IGNoYXIgKipzbGF2ZXMpOwogaW50IHNuZF9oZGFfY29kZWNfcmVzZXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwotaW50IHNuZF9oZGFfY29kZWNfY29uZmlndXJlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAogLyogYW1wIHZhbHVlIGJpdHMgKi8KICNkZWZpbmUgSERBX0FNUF9NVVRFCTB4ODAKQEAgLTQwOCw2ICs0MDcsMTkgQEAKIAlyZXR1cm4gY29kZWMtPndjYXBzW25pZCAtIGNvZGVjLT5zdGFydF9uaWRdOwogfQogCisvKiBnZXQgdGhlIHdpZGdldCB0eXBlIGZyb20gd2lkZ2V0IGNhcGFiaWxpdHkgYml0cyAqLworI2RlZmluZSBnZXRfd2NhcHNfdHlwZSh3Y2FwcykgKCgod2NhcHMpICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF93Y2Fwc19jaGFubmVscyh1MzIgd2NhcHMpCit7CisJdW5zaWduZWQgaW50IGNoYW5zOworCisJY2hhbnMgPSAod2NhcHMgJiBBQ19XQ0FQX0NIQU5fQ05UX0VYVCkgPj4gMTM7CisJY2hhbnMgPSAoKGNoYW5zIDw8IDEpIHwgMSkgKyAxOworCisJcmV0dXJuIGNoYW5zOworfQorCiB1MzIgcXVlcnlfYW1wX2NhcHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsIGludCBkaXJlY3Rpb24pOwogaW50IHNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsIGludCBkaXIsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgY2Fwcyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKaW5kZXggNDE4YzVkMS4uOTVmMjRlNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYwpAQCAtNTA4LDE3ICs1MDgsMTQgQEAKIAkJdW5zaWduZWQgaW50IHdpZF9jYXBzID0KIAkJCXNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLAogCQkJCQkgICBBQ19QQVJfQVVESU9fV0lER0VUX0NBUCk7Ci0JCXVuc2lnbmVkIGludCB3aWRfdHlwZSA9Ci0JCQkod2lkX2NhcHMgJiBBQ19XQ0FQX1RZUEUpID4+IEFDX1dDQVBfVFlQRV9TSElGVDsKKwkJdW5zaWduZWQgaW50IHdpZF90eXBlID0gZ2V0X3djYXBzX3R5cGUod2lkX2NhcHMpOwogCQloZGFfbmlkX3QgY29ubltIREFfTUFYX0NPTk5FQ1RJT05TXTsKIAkJaW50IGNvbm5fbGVuID0gMDsKIAogCQlzbmRfaXByaW50ZihidWZmZXIsICJOb2RlIDB4JTAyeCBbJXNdIHdjYXBzIDB4JXg6IiwgbmlkLAogCQkJICAgIGdldF93aWRfdHlwZV9uYW1lKHdpZF90eXBlKSwgd2lkX2NhcHMpOwogCQlpZiAod2lkX2NhcHMgJiBBQ19XQ0FQX1NURVJFTykgewotCQkJdW5zaWduZWQgaW50IGNoYW5zOwotCQkJY2hhbnMgPSAod2lkX2NhcHMgJiBBQ19XQ0FQX0NIQU5fQ05UX0VYVCkgPj4gMTM7Ci0JCQljaGFucyA9ICgoY2hhbnMgPDwgMSkgfCAxKSArIDE7CisJCQl1bnNpZ25lZCBpbnQgY2hhbnMgPSBnZXRfd2NhcHNfY2hhbm5lbHMod2lkX2NhcHMpOwogCQkJaWYgKGNoYW5zID09IDIpCiAJCQkJc25kX2lwcmludGYoYnVmZmVyLCAiIFN0ZXJlbyIpOwogCQkJZWxzZQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggNDAzNTg4Yy4uMjE1ZTcyYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC0yOTgyLDcgKzI5ODIsOCBAQAogCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBBRDE5ODhfTU9ERUxfTEFTVCwKIAkJCQkJCSAgYWQxOTg4X21vZGVscywgYWQxOTg4X2NmZ190YmwpOwogCWlmIChib2FyZF9jb25maWcgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgQUQxOTg4LCB0cnlpbmcgYXV0by1wcm9iZSBmcm9tIEJJT1MuLi5cbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6ICVzOiBCSU9TIGF1dG8tcHJvYmluZy5cbiIsCisJCSAgICAgICBjb2RlYy0+Y2hpcF9uYW1lKTsKIAkJYm9hcmRfY29uZmlnID0gQUQxOTg4X0FVVE87CiAJfQogCkBAIC0zNzAyLDE5ICszNzAzLDI5IEBACiAgKiBQb3J0IEY6IEludGVybmFsIHNwZWFrZXJzCiAgKi8KIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTg4NGFfbGFwdG9wX2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSA0LAotCS5pdGVtcyA9IHsKLQkJeyAiTWljIiwgMHgwIH0sCQkvKiBwb3J0LUIgKi8KLQkJeyAiSW50ZXJuYWwgTWljIiwgMHgxIH0sIC8qIHBvcnQtQyAqLwotCQl7ICJEb2NrIE1pYyIsIDB4NCB9LAkvKiBwb3J0LUUgKi8KLQkJeyAiTWl4IiwgMHgzIH0sCi0JfSwKLX07CitzdGF0aWMgaW50IGFkMTg4NGFfbW9iaWxlX21hc3Rlcl9zd19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWludCByZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfcHV0KGtjb250cm9sLCB1Y29udHJvbCk7CisJaW50IG11dGUgPSAoIXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYmCisJCSAgICAhdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0pOworCS8qIHRvZ2dsZSBHUElPMSBhY2NvcmRpbmcgdG8gdGhlIG11dGUgc3RhdGUgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDAxLCAwLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsCisJCQkgICAgbXV0ZSA/IDB4MDIgOiAweDApOworCXJldHVybiByZXQ7Cit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE4ODRhX2xhcHRvcF9taXhlcnNbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCisJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAorCQkucHV0ID0gYWQxODg0YV9tb2JpbGVfbWFzdGVyX3N3X3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MjEsIDMsIDAsIEhEQV9PVVRQVVQpLAorCX0sCiAJSERBX0NPREVDX01VVEUoIkRvY2sgUGxheWJhY2sgU3dpdGNoIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLApAQCAtMzcyOSwzNiArMzc0MCw5IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgQm9vc3QiLCAweDI1LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDEsIDB4MGQsIDB4MCwgSERBX09VVFBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLyogVGhlIG11bHRpcGxlICJDYXB0dXJlIFNvdXJjZSIgY29udHJvbHMgY29uZnVzZSBhbHNhbWl4ZXIKLQkJICogU28gY2FsbCBzb21ld2hhdCBkaWZmZXJlbnQuLgotCQkgKi8KLQkJLyogLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLCAqLwotCQkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLAotCQkuY291bnQgPSAyLAotCQkuaW5mbyA9IGFkMTk4eF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gYWQxOTh4X211eF9lbnVtX2dldCwKLQkJLnB1dCA9IGFkMTk4eF9tdXhfZW51bV9wdXQsCi0JfSwKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgaW50IGFkMTg4NGFfbW9iaWxlX21hc3Rlcl9zd19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlpbnQgcmV0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX3B1dChrY29udHJvbCwgdWNvbnRyb2wpOwotCWludCBtdXRlID0gKCF1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmJgotCQkgICAgIXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdKTsKLQkvKiB0b2dnbGUgR1BJTzEgYWNjb3JkaW5nIHRvIHRoZSBtdXRlIHN0YXRlICovCi0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgwMSwgMCwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLAotCQkJICAgIG11dGUgPyAweDAyIDogMHgwKTsKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxODg0YV9tb2JpbGVfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJLypIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksKi8KQEAgLTM4MjgsNiArMzgxMiw2MyBAQAogCXJldHVybiAwOwogfQogCisvKiBtdXRlIGludGVybmFsIHNwZWFrZXIgaWYgSFAgb3IgZG9ja2luZyBIUCBpcyBwbHVnZ2VkICovCitzdGF0aWMgdm9pZCBhZDE4ODRhX2xhcHRvcF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKworCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTEsIDAsIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCk7CisJcHJlc2VudCAmPSBBQ19QSU5TRU5TRV9QUkVTRU5DRTsKKwlpZiAoIXByZXNlbnQpIHsKKwkJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxMiwgMCwKKwkJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApOworCQlwcmVzZW50ICY9IEFDX1BJTlNFTlNFX1BSRVNFTkNFOworCX0KKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTYsIEhEQV9PVVRQVVQsIDAsCisJCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTYsIDAsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLAorCQkJICAgIHByZXNlbnQgPyAweDAwIDogMHgwMik7Cit9CisKKy8qIHN3aXRjaCB0byBleHRlcm5hbCBtaWMgaWYgcGx1Z2dlZCAqLworc3RhdGljIHZvaWQgYWQxODg0YV9sYXB0b3BfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCisJaWYgKHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxNCwgMCwgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmCisJICAgIEFDX1BJTlNFTlNFX1BSRVNFTkNFKQorCQlpZHggPSAwOworCWVsc2UgaWYgKHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYywgMCwgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmCisJCSBBQ19QSU5TRU5TRV9QUkVTRU5DRSkKKwkJaWR4ID0gNDsKKwllbHNlCisJCWlkeCA9IDE7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgwYywgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGlkeCk7Cit9CisKKy8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KK3N0YXRpYyB2b2lkIGFkMTg4NGFfbGFwdG9wX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVzKQoreworCXN3aXRjaCAocmVzID4+IDI2KSB7CisJY2FzZSBBRDE4ODRBX0hQX0VWRU5UOgorCQlhZDE4ODRhX2xhcHRvcF9hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCWNhc2UgQUQxODg0QV9NSUNfRVZFTlQ6CisJCWFkMTg4NGFfbGFwdG9wX2F1dG9taWMoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKKy8qIGluaXRpYWxpemUgamFjay1zZW5zaW5nLCB0b28gKi8KK3N0YXRpYyBpbnQgYWQxODg0YV9sYXB0b3BfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlhZDE5OHhfaW5pdChjb2RlYyk7CisJYWQxODg0YV9sYXB0b3BfYXV0b211dGUoY29kZWMpOworCWFkMTg4NGFfbGFwdG9wX2F1dG9taWMoY29kZWMpOworCXJldHVybiAwOworfQorCiAvKiBhZGRpdGlvbmFsIHZlcmJzIGZvciBsYXB0b3AgbW9kZWwgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxODg0YV9sYXB0b3BfdmVyYnNbXSA9IHsKIAkvKiBQb3J0LUEgKEhQKSBwaW4gLSBhbHdheXMgdW5tdXRlZCAqLwpAQCAtMzg0NCwxMSArMzg4NSwxOSBAQAogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAogCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweDcwMDJ9LCAvKiByYWlzZSBtaWMgYXMgZGVmYXVsdCAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweDcwMDJ9LCAvKiByYWlzZSBtaWMgYXMgZGVmYXVsdCAqLworCS8qIFBvcnQtRCAoZG9ja2luZyBsaW5lLW91dCkgcGluIC0gZGVmYXVsdCB1bm11dGVkICovCisJezB4MTIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKIAkvKiBhbmFsb2cgbWl4ICovCiAJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKIAkvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgcGluLXNlbnNlICovCiAJezB4MTEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBRDE4ODRBX0hQX0VWRU5UfSwKKwl7MHgxMiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFEMTg4NEFfSFBfRVZFTlR9LAogCXsweDE0LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUQxODg0QV9NSUNfRVZFTlR9LAorCXsweDFjLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUQxODg0QV9NSUNfRVZFTlR9LAorCS8qIGFsbG93IHRvIHRvdWNoIEdQSU8xIChmb3IgbXV0ZSBjb250cm9sKSAqLworCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX01BU0ssIDB4MDJ9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RJUkVDVElPTiwgMHgwMn0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgMHgwMn0sIC8qIGZpcnN0IG11dGVkICovCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNDAwOCw2ICs0MDU3LDcgQEAKIAlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmZjAsIDB4MzBkMCwgIkhQIGxhcHRvcCIsIEFEMTg4NEFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmZjAsIDB4MzBlMCwgIkhQIGxhcHRvcCIsIEFEMTg4NEFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MzYwMCwgIkhQIGxhcHRvcCIsIEFEMTg4NEFfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmZjAsIDB4NzAxMCwgIkhQIGxhcHRvcCIsIEFEMTg4NEFfTU9CSUxFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMGFjLCAiVGhpbmtwYWQgWDMwMCIsIEFEMTg4NEFfVEhJTktQQUQpLAogCXt9CiB9OwpAQCAtNDA1Nyw5ICs0MTA3LDggQEAKIAkJc3BlYy0+bWl4ZXJzWzBdID0gYWQxODg0YV9sYXB0b3BfbWl4ZXJzOwogCQlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzKytdID0gYWQxODg0YV9sYXB0b3BfdmVyYnM7CiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKLQkJc3BlYy0+aW5wdXRfbXV4ID0gJmFkMTg4NGFfbGFwdG9wX2NhcHR1cmVfc291cmNlOwotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gYWQxODg0YV9ocF91bnNvbF9ldmVudDsKLQkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gYWQxODg0YV9ocF9pbml0OworCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gYWQxODg0YV9sYXB0b3BfdW5zb2xfZXZlbnQ7CisJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGFkMTg4NGFfbGFwdG9wX2luaXQ7CiAJCS8qIHNldCB0aGUgdXBwZXItbGltaXQgZm9yIG1peGVyIGFtcCB0byAwZEIgZm9yIGF2b2lkaW5nIHRoZQogCQkgKiBwb3NzaWJsZSBkYW1hZ2UgYnkgb3ZlcmxvYWRpbmcKIAkJICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2F0aWhkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYXRpaGRtaS5jCmluZGV4IDIzM2U0NzcuLmZiNjg0ZjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYXRpaGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYXRpaGRtaS5jCkBAIC0xNDEsOCArMTQxLDcgQEAKIAkvKiBGSVhNRTogd2UgbXVzdCBjaGVjayBFTEQgYW5kIGNoYW5nZSB0aGUgUENNIHBhcmFtZXRlcnMgZHluYW1pY2FsbHkKIAkgKi8KIAljaGFucyA9IGdldF93Y2Fwcyhjb2RlYywgQ1ZUX05JRCk7Ci0JY2hhbnMgPSAoY2hhbnMgJiBBQ19XQ0FQX0NIQU5fQ05UX0VYVCkgPj4gMTM7Ci0JY2hhbnMgPSAoKGNoYW5zIDw8IDEpIHwgMSkgKyAxOworCWNoYW5zID0gZ2V0X3djYXBzX2NoYW5uZWxzKGNoYW5zKTsKIAlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uY2hhbm5lbHNfbWF4ID0gY2hhbnM7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2EwMTEwLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NhMDExMC5jCmluZGV4IDAxOWNhN2MuLmQwODM1M2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2EwMTEwLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jYTAxMTAuYwpAQCAtNDU5LDggKzQ1OSw3IEBACiAJbmlkID0gY29kZWMtPnN0YXJ0X25pZDsKIAlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPm51bV9ub2RlczsgaSsrLCBuaWQrKykgewogCQl1bnNpZ25lZCBpbnQgd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7Ci0JCXVuc2lnbmVkIGludCB0eXBlID0gKHdjYXBzICYgQUNfV0NBUF9UWVBFKSA+PgotCQkJQUNfV0NBUF9UWVBFX1NISUZUOworCQl1bnNpZ25lZCBpbnQgdHlwZSA9IGdldF93Y2Fwc190eXBlKHdjYXBzKTsKIAkJaWYgKHR5cGUgIT0gQUNfV0lEX0FVRF9JTikKIAkJCWNvbnRpbnVlOwogCQlpZiAoc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgJnBpbiwgMSkgIT0gMSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYTMwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCkBAIC0wLDAgKzEsMTE5NCBAQAorLyoKKyAqIEhEIGF1ZGlvIGludGVyZmFjZSBwYXRjaCBmb3IgQ2lycnVzIExvZ2ljIENTNDIweCBjaGlwCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGRyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlICJoZGFfY29kZWMuaCIKKyNpbmNsdWRlICJoZGFfbG9jYWwuaCIKKworLyoKKyAqLworCitzdHJ1Y3QgY3Nfc3BlYyB7CisJaW50IGJvYXJkX2NvbmZpZzsKKwlzdHJ1Y3QgYXV0b19waW5fY2ZnIGF1dG9jZmc7CisJc3RydWN0IGhkYV9tdWx0aV9vdXQgbXVsdGlvdXQ7CisJc3RydWN0IHNuZF9rY29udHJvbCAqdm1hc3Rlcl9zdzsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICp2bWFzdGVyX3ZvbDsKKworCWhkYV9uaWRfdCBkYWNfbmlkW0FVVE9fQ0ZHX01BWF9PVVRTXTsKKwloZGFfbmlkX3Qgc2xhdmVfZGlnX291dHNbMl07CisKKwl1bnNpZ25lZCBpbnQgaW5wdXRfaWR4W0FVVE9fUElOX0xBU1RdOworCXVuc2lnbmVkIGludCBjYXBzcmNfaWR4W0FVVE9fUElOX0xBU1RdOworCWhkYV9uaWRfdCBhZGNfbmlkW0FVVE9fUElOX0xBU1RdOworCXVuc2lnbmVkIGludCBhZGNfaWR4W0FVVE9fUElOX0xBU1RdOworCXVuc2lnbmVkIGludCBudW1faW5wdXRzOworCXVuc2lnbmVkIGludCBjdXJfaW5wdXQ7CisJdW5zaWduZWQgaW50IGF1dG9taWNfaWR4OworCWhkYV9uaWRfdCBjdXJfYWRjOworCXVuc2lnbmVkIGludCBjdXJfYWRjX3N0cmVhbV90YWc7CisJdW5zaWduZWQgaW50IGN1cl9hZGNfZm9ybWF0OworCWhkYV9uaWRfdCBkaWdfaW47CisKKwlzdHJ1Y3QgaGRhX2JpbmRfY3RscyAqY2FwdHVyZV9iaW5kWzJdOworCisJdW5zaWduZWQgaW50IGdwaW9fbWFzazsKKwl1bnNpZ25lZCBpbnQgZ3Bpb19kaXI7CisJdW5zaWduZWQgaW50IGdwaW9fZGF0YTsKKworCXN0cnVjdCBoZGFfcGNtIHBjbV9yZWNbMl07CS8qIFBDTSBpbmZvcm1hdGlvbiAqLworCisJdW5zaWduZWQgaW50IGhwX2RldGVjdDoxOworCXVuc2lnbmVkIGludCBtaWNfZGV0ZWN0OjE7Cit9OworCisvKiBhdmFpbGFibGUgbW9kZWxzICovCitlbnVtIHsKKwlDUzQyMFhfTUJQNTUsCisJQ1M0MjBYX0FVVE8sCisJQ1M0MjBYX01PREVMUworfTsKKworLyogVmVuZG9yLXNwZWNpZmljIHByb2Nlc3Npbmcgd2lkZ2V0ICovCisjZGVmaW5lIENTNDIwWF9WRU5ET1JfTklECTB4MTEKKyNkZWZpbmUgQ1NfRElHX09VVDFfUElOX05JRAkweDEwCisjZGVmaW5lIENTX0RJR19PVVQyX1BJTl9OSUQJMHgxNQorI2RlZmluZSBDU19ETUlDMV9QSU5fTklECTB4MTIKKyNkZWZpbmUgQ1NfRE1JQzJfUElOX05JRAkweDBlCisKKy8qIGNvZWYgaW5kaWNlcyAqLworI2RlZmluZSBJRFhfU1BESUZfU1RBVAkJMHgwMDAwCisjZGVmaW5lIElEWF9TUERJRl9DVEwJCTB4MDAwMQorI2RlZmluZSBJRFhfQURDX0NGRwkJMHgwMDAyCisvKiBTWkMgYml0bWFzaywgNCBtb2RlcyBiZWxvdzoKKyAqIDAgPSBpbW1lZGlhdGUsCisgKiAxID0gZGlnaXRhbCBpbW1lZGlhdGUsIGFuYWxvZyB6ZXJvLWNyb3NzCisgKiAyID0gZGlndGFpbCAmIGFuYWxvZyBzb2Z0LXJhbXAKKyAqIDMgPSBkaWdpdGFsIHNvZnQtcmFtcCwgYW5hbG9nIHplcm8tY3Jvc3MKKyAqLworI2RlZmluZSAgIENTX0NPRUZfQURDX1NaQ19NQVNLCQkoMyA8PCAwKQorI2RlZmluZSAgIENTX0NPRUZfQURDX01JQ19TWkNfTU9ERQkoMyA8PCAwKSAvKiBTWkMgc2V0dXAgZm9yIG1pYyAqLworI2RlZmluZSAgIENTX0NPRUZfQURDX0xJX1NaQ19NT0RFCSgzIDw8IDApIC8qIFNaQyBzZXR1cCBmb3IgbGluZS1pbiAqLworLyogUEdBIG1vZGU6IDAgPSBkaWZmZXJlbnRpYWwsIDEgPSBzaWdubGUtZW5kZWQgKi8KKyNkZWZpbmUgICBDU19DT0VGX0FEQ19NSUNfUEdBX01PREUJKDEgPDwgNSkgLyogUEdBIHNldHVwIGZvciBtaWMgKi8KKyNkZWZpbmUgICBDU19DT0VGX0FEQ19MSV9QR0FfTU9ERQkoMSA8PCA2KSAvKiBQR0Egc2V0dXAgZm9yIGxpbmUtaW4gKi8KKyNkZWZpbmUgSURYX0RBQ19DRkcJCTB4MDAwMworLyogU1pDIGJpdG1hc2ssIDQgbW9kZXMgYmVsb3c6CisgKiAwID0gSW1tZWRpYXRlCisgKiAxID0gemVyby1jcm9zcworICogMiA9IHNvZnQtcmFtcAorICogMyA9IHNvZnQtcmFtcCBvbiB6ZXJvLWNyb3NzCisgKi8KKyNkZWZpbmUgICBDU19DT0VGX0RBQ19IUF9TWkNfTU9ERQkoMyA8PCAwKSAvKiBuaWQgMHgwMiAqLworI2RlZmluZSAgIENTX0NPRUZfREFDX0xPX1NaQ19NT0RFCSgzIDw8IDIpIC8qIG5pZCAweDAzICovCisjZGVmaW5lICAgQ1NfQ09FRl9EQUNfU1BLX1NaQ19NT0RFCSgzIDw8IDQpIC8qIG5pZCAweDA0ICovCisKKyNkZWZpbmUgSURYX0JFRVBfQ0ZHCQkweDAwMDQKKy8qIDB4MDAwOCAtIHRlc3QgcmVnIGtleSAqLworLyogMHgwMDA5IC0gMHgwMDE0IC0+IDEyIHRlc3QgcmVncyAqLworLyogMHgwMDE1IC0gdmlzaWJpbGl0eSByZWcgKi8KKworCitzdGF0aWMgaW5saW5lIGludCBjc192ZW5kb3JfY29lZl9nZXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCBpZHgpCit7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgQ1M0MjBYX1ZFTkRPUl9OSUQsIDAsCisJCQkgICAgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgaWR4KTsKKwlyZXR1cm4gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBDUzQyMFhfVkVORE9SX05JRCwgMCwKKwkJCQkgIEFDX1ZFUkJfR0VUX1BST0NfQ09FRiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjc192ZW5kb3JfY29lZl9zZXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCBpZHgsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGNvZWYpCit7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgQ1M0MjBYX1ZFTkRPUl9OSUQsIDAsCisJCQkgICAgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgaWR4KTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBDUzQyMFhfVkVORE9SX05JRCwgMCwKKwkJCSAgICBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIGNvZWYpOworfQorCisKKyNkZWZpbmUgSFBfRVZFTlQJMQorI2RlZmluZSBNSUNfRVZFTlQJMgorCisvKgorICogUENNIGNhbGxiYWNrcworICovCitzdGF0aWMgaW50IGNzX3BsYXliYWNrX3BjbV9vcGVuKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCisJCQkJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGNzX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfYW5hbG9nX29wZW4oY29kZWMsICZzcGVjLT5tdWx0aW91dCwgc3Vic3RyZWFtLAorCQkJCQkgICAgIGhpbmZvKTsKK30KKworc3RhdGljIGludCBjc19wbGF5YmFja19wY21fcHJlcGFyZShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAorCQkJCSAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgIHVuc2lnbmVkIGludCBzdHJlYW1fdGFnLAorCQkJCSAgIHVuc2lnbmVkIGludCBmb3JtYXQsCisJCQkJICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGNzX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfYW5hbG9nX3ByZXBhcmUoY29kZWMsICZzcGVjLT5tdWx0aW91dCwKKwkJCQkJCXN0cmVhbV90YWcsIGZvcm1hdCwgc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBjc19wbGF5YmFja19wY21fY2xlYW51cChzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAorCQkJCSAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBjc19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2FuYWxvZ19jbGVhbnVwKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQpOworfQorCisvKgorICogRGlnaXRhbCBvdXQKKyAqLworc3RhdGljIGludCBjc19kaWdfcGxheWJhY2tfcGNtX29wZW4oc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKKwkJCQkgICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBjc19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19vcGVuKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQpOworfQorCitzdGF0aWMgaW50IGNzX2RpZ19wbGF5YmFja19wY21fY2xvc2Uoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKKwkJCQkgICAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGNzX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfZGlnX2Nsb3NlKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQpOworfQorCitzdGF0aWMgaW50IGNzX2RpZ19wbGF5YmFja19wY21fcHJlcGFyZShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAorCQkJCSAgICAgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHN0cmVhbV90YWcsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBmb3JtYXQsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBjc19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19wcmVwYXJlKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQsIHN0cmVhbV90YWcsCisJCQkJCSAgICAgZm9ybWF0LCBzdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGNzX2RpZ19wbGF5YmFja19wY21fY2xlYW51cChzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAorCQkJCSAgICAgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGNzX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfZGlnX2NsZWFudXAoY29kZWMsICZzcGVjLT5tdWx0aW91dCk7Cit9CisKKy8qCisgKiBBbmFsb2cgY2FwdHVyZQorICovCitzdGF0aWMgaW50IGNzX2NhcHR1cmVfcGNtX3ByZXBhcmUoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKKwkJCQkgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgdW5zaWduZWQgaW50IHN0cmVhbV90YWcsCisJCQkJICB1bnNpZ25lZCBpbnQgZm9ybWF0LAorCQkJCSAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGNzX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzcGVjLT5jdXJfYWRjID0gc3BlYy0+YWRjX25pZFtzcGVjLT5jdXJfaW5wdXRdOworCXNwZWMtPmN1cl9hZGNfc3RyZWFtX3RhZyA9IHN0cmVhbV90YWc7CisJc3BlYy0+Y3VyX2FkY19mb3JtYXQgPSBmb3JtYXQ7CisJc25kX2hkYV9jb2RlY19zZXR1cF9zdHJlYW0oY29kZWMsIHNwZWMtPmN1cl9hZGMsIHN0cmVhbV90YWcsIDAsIGZvcm1hdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3NfY2FwdHVyZV9wY21fY2xlYW51cChzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAorCQkJCSAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgY3Nfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNuZF9oZGFfY29kZWNfY2xlYW51cF9zdHJlYW0oY29kZWMsIHNwZWMtPmN1cl9hZGMpOworCXNwZWMtPmN1cl9hZGMgPSAwOworCXJldHVybiAwOworfQorCisvKgorICovCitzdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGNzX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CisJLnN1YnN0cmVhbXMgPSAxLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5vcHMgPSB7CisJCS5vcGVuID0gY3NfcGxheWJhY2tfcGNtX29wZW4sCisJCS5wcmVwYXJlID0gY3NfcGxheWJhY2tfcGNtX3ByZXBhcmUsCisJCS5jbGVhbnVwID0gY3NfcGxheWJhY2tfcGNtX2NsZWFudXAKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjc19wY21fYW5hbG9nX2NhcHR1cmUgPSB7CisJLnN1YnN0cmVhbXMgPSAxLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5vcHMgPSB7CisJCS5wcmVwYXJlID0gY3NfY2FwdHVyZV9wY21fcHJlcGFyZSwKKwkJLmNsZWFudXAgPSBjc19jYXB0dXJlX3BjbV9jbGVhbnVwCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gY3NfcGNtX2RpZ2l0YWxfcGxheWJhY2sgPSB7CisJLnN1YnN0cmVhbXMgPSAxLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5vcHMgPSB7CisJCS5vcGVuID0gY3NfZGlnX3BsYXliYWNrX3BjbV9vcGVuLAorCQkuY2xvc2UgPSBjc19kaWdfcGxheWJhY2tfcGNtX2Nsb3NlLAorCQkucHJlcGFyZSA9IGNzX2RpZ19wbGF5YmFja19wY21fcHJlcGFyZSwKKwkJLmNsZWFudXAgPSBjc19kaWdfcGxheWJhY2tfcGNtX2NsZWFudXAKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBjc19wY21fZGlnaXRhbF9jYXB0dXJlID0geworCS5zdWJzdHJlYW1zID0gMSwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKK307CisKK3N0YXRpYyBpbnQgY3NfYnVpbGRfcGNtcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY3Nfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZGFfcGNtICppbmZvID0gc3BlYy0+cGNtX3JlYzsKKworCWNvZGVjLT5wY21faW5mbyA9IGluZm87CisJY29kZWMtPm51bV9wY21zID0gMDsKKworCWluZm8tPm5hbWUgPSAiQ2lycnVzIEFuYWxvZyI7CisJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdID0gY3NfcGNtX2FuYWxvZ19wbGF5YmFjazsKKwlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10ubmlkID0gc3BlYy0+ZGFjX25pZFswXTsKKwlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uY2hhbm5lbHNfbWF4ID0KKwkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzOworCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdID0gY3NfcGNtX2FuYWxvZ19jYXB0dXJlOworCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLm5pZCA9CisJCXNwZWMtPmFkY19uaWRbc3BlYy0+Y3VyX2lucHV0XTsKKwljb2RlYy0+bnVtX3BjbXMrKzsKKworCWlmICghc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgJiYgIXNwZWMtPmRpZ19pbikKKwkJcmV0dXJuIDA7CisKKwlpbmZvKys7CisJaW5mby0+bmFtZSA9ICJDaXJydXMgRGlnaXRhbCI7CisJaW5mby0+cGNtX3R5cGUgPSBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfdHlwZVswXTsKKwlpZiAoIWluZm8tPnBjbV90eXBlKQorCQlpbmZvLT5wY21fdHlwZSA9IEhEQV9QQ01fVFlQRV9TUERJRjsKKwlpZiAoc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpIHsKKwkJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdID0KKwkJCWNzX3BjbV9kaWdpdGFsX3BsYXliYWNrOworCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10ubmlkID0KKwkJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkOworCX0KKwlpZiAoc3BlYy0+ZGlnX2luKSB7CisJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdID0KKwkJCWNzX3BjbV9kaWdpdGFsX2NhcHR1cmU7CisJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLm5pZCA9IHNwZWMtPmRpZ19pbjsKKwl9CisJY29kZWMtPm51bV9wY21zKys7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHBhcnNlIGNvZGVjIHRvcG9sb2d5CisgKi8KKworc3RhdGljIGhkYV9uaWRfdCBnZXRfZGFjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluKQoreworCWhkYV9uaWRfdCBkYWM7CisJaWYgKCFwaW4pCisJCXJldHVybiAwOworCWlmIChzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgcGluLCAmZGFjLCAxKSAhPSAxKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZGFjOworfQorCitzdGF0aWMgaW50IGlzX2V4dF9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCBpZHgpCit7CisJc3RydWN0IGNzX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKKwloZGFfbmlkX3QgcGluID0gY2ZnLT5pbnB1dF9waW5zW2lkeF07CisJdW5zaWduZWQgaW50IHZhbCA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIHBpbik7CisJaWYgKCEodmFsICYgQUNfUElOQ0FQX1BSRVNfREVURUNUKSkKKwkJcmV0dXJuIDA7CisJdmFsID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBwaW4pOworCXJldHVybiAoZ2V0X2RlZmNmZ19jb25uZWN0KHZhbCkgPT0gQUNfSkFDS19QT1JUX0NPTVBMRVgpOworfQorCitzdGF0aWMgaGRhX25pZF90IGdldF9hZGMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4sCisJCQkgdW5zaWduZWQgaW50ICppZHhwKQoreworCWludCBpOworCWhkYV9uaWRfdCBuaWQ7CisKKwluaWQgPSBjb2RlYy0+c3RhcnRfbmlkOworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX25vZGVzOyBpKyssIG5pZCsrKSB7CisJCWhkYV9uaWRfdCBwaW5zWzJdOworCQl1bnNpZ25lZCBpbnQgdHlwZTsKKwkJaW50IGosIG51bXM7CisJCXR5cGUgPSAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9UWVBFKQorCQkJPj4gQUNfV0NBUF9UWVBFX1NISUZUOworCQlpZiAodHlwZSAhPSBBQ19XSURfQVVEX0lOKQorCQkJY29udGludWU7CisJCW51bXMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBwaW5zLAorCQkJCQkgICAgICAgQVJSQVlfU0laRShwaW5zKSk7CisJCWlmIChudW1zIDw9IDApCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IG51bXM7IGorKykgeworCQkJaWYgKHBpbnNbal0gPT0gcGluKSB7CisJCQkJKmlkeHAgPSBqOworCQkJCXJldHVybiBuaWQ7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfYWN0aXZlX3BpbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCXZhbCA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKKwlyZXR1cm4gKGdldF9kZWZjZmdfY29ubmVjdCh2YWwpICE9IEFDX0pBQ0tfUE9SVF9OT05FKTsKK30KKworc3RhdGljIGludCBwYXJzZV9vdXRwdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNzX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKKwlpbnQgaSwgZXh0cmFfbmlkczsKKwloZGFfbmlkX3QgZGFjOworCisJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKKwkJZGFjID0gZ2V0X2RhYyhjb2RlYywgY2ZnLT5saW5lX291dF9waW5zW2ldKTsKKwkJaWYgKCFkYWMpCisJCQlicmVhazsKKwkJc3BlYy0+ZGFjX25pZFtpXSA9IGRhYzsKKwl9CisJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBpOworCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+ZGFjX25pZDsKKwlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBpICogMjsKKworCS8qIGFkZCBIUCBhbmQgc3BlYWtlcnMgKi8KKwlleHRyYV9uaWRzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5ocF9vdXRzOyBpKyspIHsKKwkJZGFjID0gZ2V0X2RhYyhjb2RlYywgY2ZnLT5ocF9waW5zW2ldKTsKKwkJaWYgKCFkYWMpCisJCQlicmVhazsKKwkJaWYgKCFpKQorCQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gZGFjOworCQllbHNlCisJCQlzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkW2V4dHJhX25pZHMrK10gPSBkYWM7CisJfQorCWZvciAoaSA9IDA7IGkgPCBjZmctPnNwZWFrZXJfb3V0czsgaSsrKSB7CisJCWRhYyA9IGdldF9kYWMoY29kZWMsIGNmZy0+c3BlYWtlcl9waW5zW2ldKTsKKwkJaWYgKCFkYWMpCisJCQlicmVhazsKKwkJc3BlYy0+bXVsdGlvdXQuZXh0cmFfb3V0X25pZFtleHRyYV9uaWRzKytdID0gZGFjOworCX0KKworCWlmIChjZmctPmxpbmVfb3V0X3R5cGUgPT0gQVVUT19QSU5fU1BFQUtFUl9PVVQpIHsKKwkJY2ZnLT5zcGVha2VyX291dHMgPSBjZmctPmxpbmVfb3V0czsKKwkJbWVtY3B5KGNmZy0+c3BlYWtlcl9waW5zLCBjZmctPmxpbmVfb3V0X3BpbnMsCisJCSAgICAgICBzaXplb2YoY2ZnLT5zcGVha2VyX3BpbnMpKTsKKwkJY2ZnLT5saW5lX291dHMgPSAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2lucHV0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjc19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CisJCWhkYV9uaWRfdCBwaW4gPSBjZmctPmlucHV0X3BpbnNbaV07CisJCWlmICghcGluKQorCQkJY29udGludWU7CisJCXNwZWMtPmlucHV0X2lkeFtzcGVjLT5udW1faW5wdXRzXSA9IGk7CisJCXNwZWMtPmNhcHNyY19pZHhbaV0gPSBzcGVjLT5udW1faW5wdXRzKys7CisJCXNwZWMtPmN1cl9pbnB1dCA9IGk7CisJCXNwZWMtPmFkY19uaWRbaV0gPSBnZXRfYWRjKGNvZGVjLCBwaW4sICZzcGVjLT5hZGNfaWR4W2ldKTsKKwl9CisJaWYgKCFzcGVjLT5udW1faW5wdXRzKQorCQlyZXR1cm4gMDsKKworCS8qIGNoZWNrIHdoZXRoZXIgdGhlIGF1dG9tYXRpYyBtaWMgc3dpdGNoIGlzIGF2YWlsYWJsZSAqLworCWlmIChzcGVjLT5udW1faW5wdXRzID09IDIgJiYKKwkgICAgc3BlYy0+YWRjX25pZFtBVVRPX1BJTl9NSUNdICYmIHNwZWMtPmFkY19uaWRbQVVUT19QSU5fRlJPTlRfTUlDXSkgeworCQlpZiAoaXNfZXh0X21pYyhjb2RlYywgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0ZST05UX01JQ10pKSB7CisJCQlpZiAoIWlzX2V4dF9taWMoY29kZWMsIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdKSkgeworCQkJCXNwZWMtPm1pY19kZXRlY3QgPSAxOworCQkJCXNwZWMtPmF1dG9taWNfaWR4ID0gQVVUT19QSU5fRlJPTlRfTUlDOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGlzX2V4dF9taWMoY29kZWMsIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdKSkgeworCQkJCXNwZWMtPm1pY19kZXRlY3QgPSAxOworCQkJCXNwZWMtPmF1dG9taWNfaWR4ID0gQVVUT19QSU5fTUlDOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgcGFyc2VfZGlnaXRhbF9vdXRwdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNzX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKKwloZGFfbmlkX3QgbmlkOworCisJaWYgKCFjZmctPmRpZ19vdXRzKQorCQlyZXR1cm4gMDsKKwlpZiAoc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIGNmZy0+ZGlnX291dF9waW5zWzBdLCAmbmlkLCAxKSA8IDEpCisJCXJldHVybiAwOworCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gbmlkOworCXNwZWMtPm11bHRpb3V0LnNoYXJlX3NwZGlmID0gMTsKKwlpZiAoY2ZnLT5kaWdfb3V0cyA+IDEgJiYKKwkgICAgc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIGNmZy0+ZGlnX291dF9waW5zWzFdLCAmbmlkLCAxKSA+IDApIHsKKwkJc3BlYy0+c2xhdmVfZGlnX291dHNbMF0gPSBuaWQ7CisJCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHNwZWMtPnNsYXZlX2RpZ19vdXRzOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9kaWdpdGFsX2lucHV0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjc19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7CisJaW50IGlkeDsKKworCWlmIChjZmctPmRpZ19pbl9waW4pCisJCXNwZWMtPmRpZ19pbiA9IGdldF9hZGMoY29kZWMsIGNmZy0+ZGlnX2luX3BpbiwgJmlkeCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjcmVhdGUgbWl4ZXIgY29udHJvbHMKKyAqLworCitzdGF0aWMgY29uc3QgY2hhciAqZGlyX3NmeFsyXSA9IHsgIlBsYXliYWNrIiwgIkNhcHR1cmUiIH07CisKK3N0YXRpYyBpbnQgYWRkX211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpbmRleCwKKwkJICAgIHVuc2lnbmVkIGludCBwdmFsLCBpbnQgZGlyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICoqa2N0bHApCit7CisJY2hhciB0bXBbNDRdOworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGtuZXcgPQorCQlIREFfQ09ERUNfTVVURV9JRFgodG1wLCBpbmRleCwgMCwgMCwgSERBX09VVFBVVCk7CisJa25ldy5wcml2YXRlX3ZhbHVlID0gcHZhbDsKKwlzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiJXMgJXMgU3dpdGNoIiwgbmFtZSwgZGlyX3NmeFtkaXJdKTsKKwkqa2N0bHAgPSBzbmRfY3RsX25ldzEoJmtuZXcsIGNvZGVjKTsKKwlyZXR1cm4gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCAqa2N0bHApOworfQorCitzdGF0aWMgaW50IGFkZF92b2x1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgIGludCBpbmRleCwgdW5zaWduZWQgaW50IHB2YWwsIGludCBkaXIsCisJCSAgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKiprY3RscCkKK3sKKwljaGFyIHRtcFszMl07CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcga25ldyA9CisJCUhEQV9DT0RFQ19WT0xVTUVfSURYKHRtcCwgaW5kZXgsIDAsIDAsIEhEQV9PVVRQVVQpOworCWtuZXcucHJpdmF0ZV92YWx1ZSA9IHB2YWw7CisJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVzICVzIFZvbHVtZSIsIG5hbWUsIGRpcl9zZnhbZGlyXSk7CisJKmtjdGxwID0gc25kX2N0bF9uZXcxKCZrbmV3LCBjb2RlYyk7CisJcmV0dXJuIHNuZF9oZGFfY3RsX2FkZChjb2RlYywgKmtjdGxwKTsKK30KKworc3RhdGljIHZvaWQgZml4X3ZvbHVtZV9jYXBzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgZGFjKQoreworCXVuc2lnbmVkIGludCBjYXBzOworCisJLyogc2V0IHRoZSB1cHBlci1saW1pdCBmb3IgbWl4ZXIgYW1wIHRvIDBkQiAqLworCWNhcHMgPSBxdWVyeV9hbXBfY2Fwcyhjb2RlYywgZGFjLCBIREFfT1VUUFVUKTsKKwljYXBzICY9IH4oMHg3ZiA8PCBBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUKTsKKwljYXBzIHw9ICgoY2FwcyA+PiBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKSAmIDB4N2YpCisJCTw8IEFDX0FNUENBUF9OVU1fU1RFUFNfU0hJRlQ7CisJc25kX2hkYV9vdmVycmlkZV9hbXBfY2Fwcyhjb2RlYywgZGFjLCBIREFfT1VUUFVULCBjYXBzKTsKK30KKworc3RhdGljIGludCBhZGRfdm1hc3RlcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IGRhYykKK3sKKwlzdHJ1Y3QgY3Nfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVuc2lnbmVkIGludCB0bHZbNF07CisJaW50IGVycjsKKworCXNwZWMtPnZtYXN0ZXJfc3cgPQorCQlzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCBOVUxMKTsKKwllcnIgPSBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIHNwZWMtPnZtYXN0ZXJfc3cpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc25kX2hkYV9zZXRfdm1hc3Rlcl90bHYoY29kZWMsIGRhYywgSERBX09VVFBVVCwgdGx2KTsKKwlzcGVjLT52bWFzdGVyX3ZvbCA9CisJCXNuZF9jdGxfbWFrZV92aXJ0dWFsX21hc3RlcigiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIHRsdik7CisJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCBzcGVjLT52bWFzdGVyX3ZvbCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX291dHB1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IGRhYywgaW50IGlkeCwKKwkJICAgICAgaW50IG51bV9jdGxzLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgY3Nfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGVyciwgaW5kZXg7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwlzdGF0aWMgY2hhciAqc3BlYWtlcnNbXSA9IHsKKwkJIkZyb250IFNwZWFrZXIiLCAiU3Vycm91bmQgU3BlYWtlciIsICJCYXNzIFNwZWFrZXIiCisJfTsKKwlzdGF0aWMgY2hhciAqbGluZV9vdXRzW10gPSB7CisJCSJGcm9udCBMaW5lLU91dCIsICJTdXJyb3VuZCBMaW5lLU91dCIsICJCYXNzIExpbmUtT3V0IgorCX07CisKKwlmaXhfdm9sdW1lX2NhcHMoY29kZWMsIGRhYyk7CisJaWYgKCFzcGVjLT52bWFzdGVyX3N3KSB7CisJCWVyciA9IGFkZF92bWFzdGVyKGNvZGVjLCBkYWMpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJaW5kZXggPSAwOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQVVUT19QSU5fSFBfT1VUOgorCQluYW1lID0gIkhlYWRwaG9uZSI7CisJCWluZGV4ID0gaWR4OworCQlicmVhazsKKwljYXNlIEFVVE9fUElOX1NQRUFLRVJfT1VUOgorCQlpZiAobnVtX2N0bHMgPiAxKQorCQkJbmFtZSA9IHNwZWFrZXJzW2lkeF07CisJCWVsc2UKKwkJCW5hbWUgPSAiU3BlYWtlciI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChudW1fY3RscyA+IDEpCisJCQluYW1lID0gbGluZV9vdXRzW2lkeF07CisJCWVsc2UKKwkJCW5hbWUgPSAiTGluZS1PdXQiOworCQlicmVhazsKKwl9CisKKwllcnIgPSBhZGRfbXV0ZShjb2RlYywgbmFtZSwgaW5kZXgsCisJCSAgICAgICBIREFfQ09NUE9TRV9BTVBfVkFMKGRhYywgMywgMCwgSERBX09VVFBVVCksIDAsICZrY3RsKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzbmRfY3RsX2FkZF9zbGF2ZShzcGVjLT52bWFzdGVyX3N3LCBrY3RsKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGFkZF92b2x1bWUoY29kZWMsIG5hbWUsIGluZGV4LAorCQkJIEhEQV9DT01QT1NFX0FNUF9WQUwoZGFjLCAzLCAwLCBIREFfT1VUUFVUKSwgMCwgJmtjdGwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNuZF9jdGxfYWRkX3NsYXZlKHNwZWMtPnZtYXN0ZXJfdm9sLCBrY3RsKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQkJCisKK3N0YXRpYyBpbnQgYnVpbGRfb3V0cHV0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjc19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7CisJaW50IGksIGVycjsKKworCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7CisJCWVyciA9IGFkZF9vdXRwdXQoY29kZWMsIGdldF9kYWMoY29kZWMsIGNmZy0+bGluZV9vdXRfcGluc1tpXSksCisJCQkJIGksIGNmZy0+bGluZV9vdXRzLCBjZmctPmxpbmVfb3V0X3R5cGUpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykgeworCQllcnIgPSBhZGRfb3V0cHV0KGNvZGVjLCBnZXRfZGFjKGNvZGVjLCBjZmctPmhwX3BpbnNbaV0pLAorCQkJCSBpLCBjZmctPmhwX291dHMsIEFVVE9fUElOX0hQX09VVCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisJZm9yIChpID0gMDsgaSA8IGNmZy0+c3BlYWtlcl9vdXRzOyBpKyspIHsKKwkJZXJyID0gYWRkX291dHB1dChjb2RlYywgZ2V0X2RhYyhjb2RlYywgY2ZnLT5zcGVha2VyX3BpbnNbaV0pLAorCQkJCSBpLCBjZmctPnNwZWFrZXJfb3V0cywgQVVUT19QSU5fU1BFQUtFUl9PVVQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCisvKgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjc19jYXB0dXJlX2N0bHNbXSA9IHsKKwlIREFfQklORF9TVygiQ2FwdHVyZSBTd2l0Y2giLCAwKSwKKwlIREFfQklORF9WT0woIkNhcHR1cmUgVm9sdW1lIiwgMCksCit9OworCitzdGF0aWMgaW50IGNoYW5nZV9jdXJfaW5wdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCBpZHgsCisJCQkgICAgaW50IGZvcmNlKQoreworCXN0cnVjdCBjc19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJCisJaWYgKHNwZWMtPmN1cl9pbnB1dCA9PSBpZHggJiYgIWZvcmNlKQorCQlyZXR1cm4gMDsKKwlpZiAoc3BlYy0+Y3VyX2FkYyAmJiBzcGVjLT5jdXJfYWRjICE9IHNwZWMtPmFkY19uaWRbaWR4XSkgeworCQkvKiBzdHJlYW0gaXMgcnVubmluZywgbGV0J3Mgc3dhcCB0aGUgY3VycmVudCBBREMgKi8KKwkJc25kX2hkYV9jb2RlY19jbGVhbnVwX3N0cmVhbShjb2RlYywgc3BlYy0+Y3VyX2FkYyk7CisJCXNwZWMtPmN1cl9hZGMgPSBzcGVjLT5hZGNfbmlkW2lkeF07CisJCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBzcGVjLT5jdXJfYWRjLAorCQkJCQkgICBzcGVjLT5jdXJfYWRjX3N0cmVhbV90YWcsIDAsCisJCQkJCSAgIHNwZWMtPmN1cl9hZGNfZm9ybWF0KTsKKwl9CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgc3BlYy0+Y3VyX2FkYywgMCwKKwkJCSAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKKwkJCSAgICBzcGVjLT5hZGNfaWR4W2lkeF0pOworCXNwZWMtPmN1cl9pbnB1dCA9IGlkeDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjc19jYXB0dXJlX3NvdXJjZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgY3Nfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVuc2lnbmVkIGludCBpZHg7CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gc3BlYy0+bnVtX2lucHV0czsKKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+PSBzcGVjLT5udW1faW5wdXRzKQorCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gc3BlYy0+bnVtX2lucHV0cyAtIDE7CisJaWR4ID0gc3BlYy0+aW5wdXRfaWR4W3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dOworCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBhdXRvX3Bpbl9jZmdfbGFiZWxzW2lkeF0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNzX2NhcHR1cmVfc291cmNlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGNzX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gc3BlYy0+Y2Fwc3JjX2lkeFtzcGVjLT5jdXJfaW5wdXRdOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNzX2NhcHR1cmVfc291cmNlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IGNzX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1bnNpZ25lZCBpbnQgaWR4ID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKworCWlmIChpZHggPj0gc3BlYy0+bnVtX2lucHV0cykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWR4ID0gc3BlYy0+aW5wdXRfaWR4W2lkeF07CisJcmV0dXJuIGNoYW5nZV9jdXJfaW5wdXQoY29kZWMsIGlkeCwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjc19jYXB0dXJlX3NvdXJjZSA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisJLmluZm8gPSBjc19jYXB0dXJlX3NvdXJjZV9pbmZvLAorCS5nZXQgPSBjc19jYXB0dXJlX3NvdXJjZV9nZXQsCisJLnB1dCA9IGNzX2NhcHR1cmVfc291cmNlX3B1dCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyAqbWFrZV9iaW5kX2NhcHR1cmUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgICBzdHJ1Y3QgaGRhX2N0bF9vcHMgKm9wcykKK3sKKwlzdHJ1Y3QgY3Nfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZGFfYmluZF9jdGxzICpiaW5kOworCWludCBpLCBuOworCisJYmluZCA9IGt6YWxsb2Moc2l6ZW9mKCpiaW5kKSArIHNpemVvZihsb25nKSAqIChzcGVjLT5udW1faW5wdXRzICsgMSksCisJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWJpbmQpCisJCXJldHVybiBOVUxMOworCWJpbmQtPm9wcyA9IG9wczsKKwluID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CisJCWlmICghc3BlYy0+YWRjX25pZFtpXSkKKwkJCWNvbnRpbnVlOworCQliaW5kLT52YWx1ZXNbbisrXSA9CisJCQlIREFfQ09NUE9TRV9BTVBfVkFMKHNwZWMtPmFkY19uaWRbaV0sIDMsCisJCQkJCSAgICBzcGVjLT5hZGNfaWR4W2ldLCBIREFfSU5QVVQpOworCX0KKwlyZXR1cm4gYmluZDsKK30KKworc3RhdGljIGludCBidWlsZF9pbnB1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY3Nfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpLCBlcnI7CisKKwlpZiAoIXNwZWMtPm51bV9pbnB1dHMpCisJCXJldHVybiAwOworCisJLyogbWFrZSBiaW5kLWNhcHR1cmUgKi8KKwlzcGVjLT5jYXB0dXJlX2JpbmRbMF0gPSBtYWtlX2JpbmRfY2FwdHVyZShjb2RlYywgJnNuZF9oZGFfYmluZF9zdyk7CisJc3BlYy0+Y2FwdHVyZV9iaW5kWzFdID0gbWFrZV9iaW5kX2NhcHR1cmUoY29kZWMsICZzbmRfaGRhX2JpbmRfdm9sKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisJCWlmICghc3BlYy0+Y2FwdHVyZV9iaW5kW2ldKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWtjdGwgPSBzbmRfY3RsX25ldzEoJmNzX2NhcHR1cmVfY3Rsc1tpXSwgY29kZWMpOworCQlpZiAoIWtjdGwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IChsb25nKXNwZWMtPmNhcHR1cmVfYmluZFtpXTsKKwkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCBrY3RsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwkKKwlpZiAoc3BlYy0+bnVtX2lucHV0cyA+IDEgJiYgIXNwZWMtPm1pY19kZXRlY3QpIHsKKwkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLAorCQkJCSAgICAgIHNuZF9jdGxfbmV3MSgmY3NfY2FwdHVyZV9zb3VyY2UsIGNvZGVjKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqLworCitzdGF0aWMgaW50IGJ1aWxkX2RpZ2l0YWxfb3V0cHV0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjc19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGVycjsKKworCWlmICghc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpCisJCXJldHVybiAwOworCisJZXJyID0gc25kX2hkYV9jcmVhdGVfc3BkaWZfb3V0X2N0bHMoY29kZWMsIHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzbmRfaGRhX2NyZWF0ZV9zcGRpZl9zaGFyZV9zdyhjb2RlYywgJnNwZWMtPm11bHRpb3V0KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidWlsZF9kaWdpdGFsX2lucHV0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjc19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaWYgKHNwZWMtPmRpZ19pbikKKwkJcmV0dXJuIHNuZF9oZGFfY3JlYXRlX3NwZGlmX2luX2N0bHMoY29kZWMsIHNwZWMtPmRpZ19pbik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBhdXRvLW11dGUgYW5kIGF1dG8tbWljIHN3aXRjaGluZworICovCisKK3N0YXRpYyB2b2lkIGNzX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjc19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7CisJdW5zaWduZWQgaW50IGNhcHMsIHByZXNlbnQsIGhwX3ByZXNlbnQ7CisJaGRhX25pZF90IG5pZDsKKwlpbnQgaTsKKworCWhwX3ByZXNlbnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykgeworCQluaWQgPSBjZmctPmhwX3BpbnNbaV07CisJCWNhcHMgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOworCQlpZiAoIShjYXBzICYgQUNfUElOQ0FQX1BSRVNfREVURUNUKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY2FwcyAmIEFDX1BJTkNBUF9UUklHX1JFUSkKKwkJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAorCQkJCQkgICBBQ19WRVJCX1NFVF9QSU5fU0VOU0UsIDApOworCQlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKTsKKwkJaHBfcHJlc2VudCB8PSAocHJlc2VudCAmIEFDX1BJTlNFTlNFX1BSRVNFTkNFKSAhPSAwOworCQlpZiAoaHBfcHJlc2VudCkKKwkJCWJyZWFrOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5zcGVha2VyX291dHM7IGkrKykgeworCQluaWQgPSBjZmctPnNwZWFrZXJfcGluc1tpXTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJICAgIGhwX3ByZXNlbnQgPyAwIDogUElOX09VVCk7CisJfQorCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPT0gQ1M0MjBYX01CUDU1KSB7CisJCXVuc2lnbmVkIGludCBncGlvID0gaHBfcHJlc2VudCA/IDB4MDIgOiAweDA4OworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDAxLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIGdwaW8pOworCX0KK30KKworc3RhdGljIHZvaWQgY3NfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY3Nfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZyA9ICZzcGVjLT5hdXRvY2ZnOworCWhkYV9uaWRfdCBuaWQ7CisJdW5zaWduZWQgaW50IGNhcHMsIHByZXNlbnQ7CisJCisJbmlkID0gY2ZnLT5pbnB1dF9waW5zW3NwZWMtPmF1dG9taWNfaWR4XTsKKwljYXBzID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKKwlpZiAoY2FwcyAmIEFDX1BJTkNBUF9UUklHX1JFUSkKKwkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9TRU5TRSwgMCk7CisJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAorCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKTsKKwlpZiAocHJlc2VudCAmIEFDX1BJTlNFTlNFX1BSRVNFTkNFKQorCQljaGFuZ2VfY3VyX2lucHV0KGNvZGVjLCBzcGVjLT5hdXRvbWljX2lkeCwgMCk7CisJZWxzZSB7CisJCXVuc2lnbmVkIGludCBpbWljID0gKHNwZWMtPmF1dG9taWNfaWR4ID09IEFVVE9fUElOX01JQykgPworCQkJQVVUT19QSU5fRlJPTlRfTUlDIDogQVVUT19QSU5fTUlDOworCQljaGFuZ2VfY3VyX2lucHV0KGNvZGVjLCBpbWljLCAwKTsKKwl9Cit9CisKKy8qCisgKi8KKworc3RhdGljIHZvaWQgaW5pdF9vdXRwdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNzX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKKwlpbnQgaTsKKworCS8qIG11dGUgZmlyc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bXVsdGlvdXQubnVtX2RhY3M7IGkrKykKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0sIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSk7CisJaWYgKHNwZWMtPm11bHRpb3V0LmhwX25pZCkKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgc3BlYy0+bXVsdGlvdXQuaHBfbmlkLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwZWMtPm11bHRpb3V0LmV4dHJhX291dF9uaWQpOyBpKyspIHsKKwkJaWYgKCFzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkW2ldKQorCQkJYnJlYWs7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHNwZWMtPm11bHRpb3V0LmV4dHJhX291dF9uaWRbaV0sIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSk7CisJfQorCisJLyogc2V0IGFwcHJvcHJpYXRlIHBpbiBjb250cm9scyAqLworCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBjZmctPmxpbmVfb3V0X3BpbnNbaV0sIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCk7CisJZm9yIChpID0gMDsgaSA8IGNmZy0+aHBfb3V0czsgaSsrKSB7CisJCWhkYV9uaWRfdCBuaWQgPSBjZmctPmhwX3BpbnNbaV07CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFApOworCQlpZiAoIWNmZy0+c3BlYWtlcl9vdXRzKQorCQkJY29udGludWU7CisJCWlmIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX1VOU09MX0NBUCkgeworCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCQkgICAgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAorCQkJCQkgICAgQUNfVVNSU1BfRU4gfCBIUF9FVkVOVCk7CisJCQlzcGVjLT5ocF9kZXRlY3QgPSAxOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBjZmctPnNwZWFrZXJfb3V0czsgaSsrKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBjZmctPnNwZWFrZXJfcGluc1tpXSwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUKTsKKwlpZiAoc3BlYy0+aHBfZGV0ZWN0KQorCQljc19hdXRvbXV0ZShjb2RlYyk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfaW5wdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNzX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKKwl1bnNpZ25lZCBpbnQgY29lZjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGN0bDsKKwkJaGRhX25pZF90IHBpbiA9IGNmZy0+aW5wdXRfcGluc1tpXTsKKwkJaWYgKCFwaW4gfHwgIXNwZWMtPmFkY19uaWRbaV0pCisJCQljb250aW51ZTsKKwkJLyogc2V0IGFwcHJvcHJpYXRlIHBpbiBjb250cm9sIGFuZCBtdXRlIGZpcnN0ICovCisJCWN0bCA9IFBJTl9JTjsKKwkJaWYgKGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDKSB7CisJCQl1bnNpZ25lZCBpbnQgY2FwcyA9IHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIHBpbik7CisJCQljYXBzID4+PSBBQ19QSU5DQVBfVlJFRl9TSElGVDsKKwkJCWlmIChjYXBzICYgQUNfUElOQ0FQX1ZSRUZfODApCisJCQkJY3RsID0gUElOX1ZSRUY4MDsKKwkJfQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW4sIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgY3RsKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgc3BlYy0+YWRjX25pZFtpXSwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCQkgICAgQU1QX0lOX01VVEUoc3BlYy0+YWRjX2lkeFtpXSkpOworCQlpZiAoc3BlYy0+bWljX2RldGVjdCAmJiBzcGVjLT5hdXRvbWljX2lkeCA9PSBpKQorCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluLCAwLAorCQkJCQkgICAgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAorCQkJCQkgICAgQUNfVVNSU1BfRU4gfCBNSUNfRVZFTlQpOworCX0KKwljaGFuZ2VfY3VyX2lucHV0KGNvZGVjLCBzcGVjLT5jdXJfaW5wdXQsIDEpOworCWlmIChzcGVjLT5taWNfZGV0ZWN0KQorCQljc19hdXRvbWljKGNvZGVjKTsKKworCWNvZWYgPSAweDAwMGE7IC8qIEFEQzEvMiAtIERpZ2l0YWwgYW5kIEFuYWxvZyBTb2Z0IFJhbXAgKi8KKwlpZiAoaXNfYWN0aXZlX3Bpbihjb2RlYywgQ1NfRE1JQzJfUElOX05JRCkpCisJCWNvZWYgfD0gMHgwNTAwOyAvKiBETUlDMiBlbmFibGUgMiBjaGFubmVscywgZGlzYWJsZSBHUElPMSAqLworCWlmIChpc19hY3RpdmVfcGluKGNvZGVjLCBDU19ETUlDMV9QSU5fTklEKSkKKwkJY29lZiB8PSAweDE4MDA7IC8qIERNSUMxIGVuYWJsZSAyIGNoYW5uZWxzLCBkaXNhYmxlIEdQSU8wIAorCQkJCSAqIE5vIGVmZmVjdCBpZiBTUERJRl9PVVQyIGlzIHNsZWN0ZWQgaW4gCisJCQkJICogSURYX1NQRElGX0NUTC4KKwkJCQkgICovCisJY3NfdmVuZG9yX2NvZWZfc2V0KGNvZGVjLCBJRFhfQURDX0NGRywgY29lZik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3NfY29lZl9pbml0X3ZlcmJzW10gPSB7CisJezB4MTEsIEFDX1ZFUkJfU0VUX1BST0NfU1RBVEUsIDF9LAorCXsweDExLCBBQ19WRVJCX1NFVF9DT0VGX0lOREVYLCBJRFhfREFDX0NGR30sCisJezB4MTEsIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwKKwkgKDB4MDAyYSAvKiBEQUMxLzIvMyBTWkNNb2RlIFNvZnQgUmFtcCAqLworCSAgfCAweDAwNDAgLyogTXV0ZSBEQUNzIG9uIEZJRk8gZXJyb3IgKi8KKwkgIHwgMHgxMDAwIC8qIEVuYWJsZSBEQUNzIEhpZ2ggUGFzcyBGaWx0ZXIgKi8KKwkgIHwgMHgwNDAwIC8qIERpc2FibGUgQ29lZmZpY2llbnQgQXV0byBpbmNyZW1lbnQgKi8KKwkgICl9LAorCS8qIEJlZXAgKi8KKwl7MHgxMSwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgSURYX0RBQ19DRkd9LAorCXsweDExLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4MDAwN30sIC8qIEVuYWJsZSBCZWVwIHRocnUgREFDMS8yLzMgKi8KKworCXt9IC8qIHRlcm1pbmF0b3IgKi8KK307CisKKy8qIFNQRElGIHNldHVwICovCitzdGF0aWMgdm9pZCBpbml0X2RpZ2l0YWwoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IGNvZWY7CisKKwljb2VmID0gMHgwMDAyOyAvKiBTUkNfTVVURSBzb2Z0LW11dGUgb24gU1BESUYgKGlmIG5vIGxvY2spICovCisJY29lZiB8PSAweDAwMDg7IC8qIFJlcGxhY2Ugd2l0aCBtdXRlIG9uIGVycm9yICovCisJaWYgKGlzX2FjdGl2ZV9waW4oY29kZWMsIENTX0RJR19PVVQyX1BJTl9OSUQpKQorCQljb2VmIHw9IDB4NDAwMDsgLyogUlggdG8gVFgxIG9yIFRYMiBMb29wdGhydSAvIFNQRElGMgorCQkJCSAqIFNQRElGX09VVDIgaXMgc2hhcmVkIHdpdGggR1BJTzEgYW5kCisJCQkJICogRE1JQ19TREEyLgorCQkJCSAqLworCWNzX3ZlbmRvcl9jb2VmX3NldChjb2RlYywgSURYX1NQRElGX0NUTCwgY29lZik7Cit9CisKK3N0YXRpYyBpbnQgY3NfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY3Nfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgY3NfY29lZl9pbml0X3ZlcmJzKTsKKworCWlmIChzcGVjLT5ncGlvX21hc2spIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgwMSwgMCwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLAorCQkJCSAgICBzcGVjLT5ncGlvX21hc2spOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDAxLCAwLCBBQ19WRVJCX1NFVF9HUElPX0RJUkVDVElPTiwKKwkJCQkgICAgc3BlYy0+Z3Bpb19kaXIpOworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDAxLCAwLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsCisJCQkJICAgIHNwZWMtPmdwaW9fZGF0YSk7CisJfQorCisJaW5pdF9vdXRwdXQoY29kZWMpOworCWluaXRfaW5wdXQoY29kZWMpOworCWluaXRfZGlnaXRhbChjb2RlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3NfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJaW50IGVycjsKKworCWVyciA9IGJ1aWxkX291dHB1dChjb2RlYyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gYnVpbGRfaW5wdXQoY29kZWMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IGJ1aWxkX2RpZ2l0YWxfb3V0cHV0KGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBidWlsZF9kaWdpdGFsX2lucHV0KGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gY3NfaW5pdChjb2RlYyk7Cit9CisKK3N0YXRpYyB2b2lkIGNzX2ZyZWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNzX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlrZnJlZShzcGVjLT5jYXB0dXJlX2JpbmRbMF0pOworCWtmcmVlKHNwZWMtPmNhcHR1cmVfYmluZFsxXSk7CisJa2ZyZWUoY29kZWMtPnNwZWMpOworfQorCitzdGF0aWMgdm9pZCBjc191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKK3sKKwlzd2l0Y2ggKChyZXMgPj4gMjYpICYgMHg3ZikgeworCWNhc2UgSFBfRVZFTlQ6CisJCWNzX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJY2FzZSBNSUNfRVZFTlQ6CisJCWNzX2F1dG9taWMoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBjc19wYXRjaF9vcHMgPSB7CisJLmJ1aWxkX2NvbnRyb2xzID0gY3NfYnVpbGRfY29udHJvbHMsCisJLmJ1aWxkX3BjbXMgPSBjc19idWlsZF9wY21zLAorCS5pbml0ID0gY3NfaW5pdCwKKwkuZnJlZSA9IGNzX2ZyZWUsCisJLnVuc29sX2V2ZW50ID0gY3NfdW5zb2xfZXZlbnQsCit9OworCitzdGF0aWMgaW50IGNzX3BhcnNlX2F1dG9fY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjc19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLCBOVUxMKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHBhcnNlX291dHB1dChjb2RlYyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gcGFyc2VfaW5wdXQoY29kZWMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHBhcnNlX2RpZ2l0YWxfb3V0cHV0KGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBwYXJzZV9kaWdpdGFsX2lucHV0KGNvZGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNzNDIweF9tb2RlbHNbQ1M0MjBYX01PREVMU10gPSB7CisJW0NTNDIwWF9NQlA1NV0gPSAibWJwNTUiLAorCVtDUzQyMFhfQVVUT10gPSAiYXV0byIsCit9OworCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjczQyMHhfY2ZnX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMGRlLCAweGNiNzksICJNYWNCb29rUHJvIDUsNSIsIENTNDIwWF9NQlA1NSksCisJe30gLyogdGVybWluYXRvciAqLworfTsKKworc3RydWN0IGNzX3BpbmNmZyB7CisJaGRhX25pZF90IG5pZDsKKwl1MzIgdmFsOworfTsKKworc3RhdGljIHN0cnVjdCBjc19waW5jZmcgbWJwNTVfcGluY2Znc1tdID0geworCXsgMHgwOSwgMHgwMTJiNDAzMCB9LAorCXsgMHgwYSwgMHg5MDEwMDEyMSB9LAorCXsgMHgwYiwgMHg5MDEwMDEyMCB9LAorCXsgMHgwYywgMHg0MDAwMDBmMCB9LAorCXsgMHgwZCwgMHg5MGEwMDExMCB9LAorCXsgMHgwZSwgMHg0MDAwMDBmMCB9LAorCXsgMHgwZiwgMHg0MDAwMDBmMCB9LAorCXsgMHgxMCwgMHgwMTRiZTA0MCB9LAorCXsgMHgxMiwgMHg0MDAwMDBmMCB9LAorCXsgMHgxNSwgMHg0MDAwMDBmMCB9LAorCXt9IC8qIHRlcm1pbmF0b3IgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgY3NfcGluY2ZnICpjc19waW5jZmdzW0NTNDIwWF9NT0RFTFNdID0geworCVtDUzQyMFhfTUJQNTVdID0gbWJwNTVfcGluY2ZncywKK307CisKK3N0YXRpYyB2b2lkIGZpeF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBtb2RlbCkKK3sKKwljb25zdCBzdHJ1Y3QgY3NfcGluY2ZnICpjZmcgPSBjc19waW5jZmdzW21vZGVsXTsKKwlpZiAoIWNmZykKKwkJcmV0dXJuOworCWZvciAoOyBjZmctPm5pZDsgY2ZnKyspCisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgY2ZnLT5uaWQsIGNmZy0+dmFsKTsKK30KKworCitzdGF0aWMgaW50IHBhdGNoX2NzNDIweChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY3Nfc3BlYyAqc3BlYzsKKwlpbnQgZXJyOworCisJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzcGVjKQorCQlyZXR1cm4gLUVOT01FTTsKKwljb2RlYy0+c3BlYyA9IHNwZWM7CisKKwlzcGVjLT5ib2FyZF9jb25maWcgPQorCQlzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgQ1M0MjBYX01PREVMUywKKwkJCQkJICAgY3M0MjB4X21vZGVscywgY3M0MjB4X2NmZ190YmwpOworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPj0gMCkKKwkJZml4X3BpbmNmZyhjb2RlYywgc3BlYy0+Ym9hcmRfY29uZmlnKTsKKworCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7CisJY2FzZSBDUzQyMFhfTUJQNTU6CisJCS8qIEdQSU8xID0gaGVhZHBob25lcyAqLworCQkvKiBHUElPMyA9IHNwZWFrZXJzICovCisJCXNwZWMtPmdwaW9fbWFzayA9IDB4MGE7CisJCXNwZWMtPmdwaW9fZGlyID0gMHgwYTsKKwkJYnJlYWs7CisJfQorCisJZXJyID0gY3NfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCisJY29kZWMtPnBhdGNoX29wcyA9IGNzX3BhdGNoX29wczsKKworCXJldHVybiAwOworCisgZXJyb3I6CisJa2ZyZWUoY29kZWMtPnNwZWMpOworCWNvZGVjLT5zcGVjID0gTlVMTDsKKwlyZXR1cm4gZXJyOworfQorCisKKy8qCisgKiBwYXRjaCBlbnRyaWVzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX3ByZXNldCBzbmRfaGRhX3ByZXNldF9jaXJydXNbXSA9IHsKKwl7IC5pZCA9IDB4MTAxMzQyMDYsIC5uYW1lID0gIkNTNDIwNiIsIC5wYXRjaCA9IHBhdGNoX2NzNDIweCB9LAorCXsgLmlkID0gMHgxMDEzNDIwNywgLm5hbWUgPSAiQ1M0MjA3IiwgLnBhdGNoID0gcGF0Y2hfY3M0MjB4IH0sCisJe30gLyogdGVybWluYXRvciAqLworfTsKKworTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwMTM0MjA2Iik7CitNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTAxMzQyMDciKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDaXJydXMgTG9naWMgSEQtYXVkaW8gY29kZWMiKTsKKworc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0X2xpc3QgY2lycnVzX2xpc3QgPSB7CisJLnByZXNldCA9IHNuZF9oZGFfcHJlc2V0X2NpcnJ1cywKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBhdGNoX2NpcnJ1c19pbml0KHZvaWQpCit7CisJcmV0dXJuIHNuZF9oZGFfYWRkX2NvZGVjX3ByZXNldCgmY2lycnVzX2xpc3QpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGF0Y2hfY2lycnVzX2V4aXQodm9pZCkKK3sKKwlzbmRfaGRhX2RlbGV0ZV9jb2RlY19wcmVzZXQoJmNpcnJ1c19saXN0KTsKK30KKworbW9kdWxlX2luaXQocGF0Y2hfY2lycnVzX2luaXQpCittb2R1bGVfZXhpdChwYXRjaF9jaXJydXNfZXhpdCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCmluZGV4IGM5MjEyNjQuLjc4MGUxYTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYwpAQCAtNjM1LDcgKzYzNSw4IEBACiAJCQkJCQkJY21pOTg4MF9tb2RlbHMsCiAJCQkJCQkJY21pOTg4MF9jZmdfdGJsKTsKIAlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgewotCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgQ01JOTg4MFxuIik7CisJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiAlczogQklPUyBhdXRvLXByb2JpbmcuXG4iLAorCQkJICAgIGNvZGVjLT5jaGlwX25hbWUpOwogCQlzcGVjLT5ib2FyZF9jb25maWcgPSBDTUlfQVVUTzsgLyogdHJ5IGV2ZXJ5dGhpbmcgKi8KIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwppbmRleCBhYzg2OGM1Li45ZDg5OWVkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC0xMDgsNiArMTA4LDggQEAKIAlzdHJ1Y3QgaGRhX2lucHV0X211eCBwcml2YXRlX2ltdXg7CiAJaGRhX25pZF90IHByaXZhdGVfZGFjX25pZHNbQVVUT19DRkdfTUFYX09VVFNdOwogCisJdW5zaWduZWQgaW50IGRlbGxfYXV0b211dGU7CisJdW5zaWduZWQgaW50IHBvcnRfZF9tb2RlOwogfTsKIAogc3RhdGljIGludCBjb25leGFudF9wbGF5YmFja19wY21fb3BlbihzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLApAQCAtMTkwOCw2ICsxOTEwLDQ4MCBAQAogCXJldHVybiAwOwogfQogCisvKiBDb25leGFudCA1MDY2IHNwZWNpZmljICovCisKK3N0YXRpYyBoZGFfbmlkX3QgY3h0NTA2Nl9kYWNfbmlkc1sxXSA9IHsgMHgxMCB9Oworc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2FkY19uaWRzWzNdID0geyAweDE0LCAweDE1LCAweDE2IH07CitzdGF0aWMgaGRhX25pZF90IGN4dDUwNjZfY2Fwc3JjX25pZHNbMV0gPSB7IDB4MTcgfTsKKyNkZWZpbmUgQ1hUNTA2Nl9TUERJRl9PVVQJMHgyMQorCitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgY3h0NTA2Nl9tb2Rlc1sxXSA9IHsKKwl7IDIsIE5VTEwgfSwKK307CisKK3N0YXRpYyB2b2lkIGN4dDUwNjZfdXBkYXRlX3NwZWFrZXIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1bnNpZ25lZCBpbnQgcGluY3RsOworCisJc25kX3ByaW50ZGQoIkNYVDUwNjY6IHVwZGF0ZSBzcGVha2VyLCBocF9wcmVzZW50PSVkXG4iLAorCQlzcGVjLT5ocF9wcmVzZW50KTsKKworCS8qIFBvcnQgQSAoSFApICovCisJcGluY3RsID0gKChzcGVjLT5ocF9wcmVzZW50ICYgMSkgJiYgc3BlYy0+Y3VyX2VhcGQpID8gUElOX0hQIDogMDsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE5LCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQlwaW5jdGwpOworCisJLyogUG9ydCBEIChIUC9MTykgKi8KKwlwaW5jdGwgPSAoKHNwZWMtPmhwX3ByZXNlbnQgJiAyKSAmJiBzcGVjLT5jdXJfZWFwZCkKKwkJPyBzcGVjLT5wb3J0X2RfbW9kZSA6IDA7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxYywgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJcGluY3RsKTsKKworCS8qIENMQVNTX0QgQU1QICovCisJcGluY3RsID0gKCFzcGVjLT5ocF9wcmVzZW50ICYmIHNwZWMtPmN1cl9lYXBkKSA/IFBJTl9PVVQgOiAwOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWYsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKKwkJCXBpbmN0bCk7CisKKwlpZiAoc3BlYy0+ZGVsbF9hdXRvbXV0ZSkgeworCQkvKiBERUxMIEFJTyBQb3J0IFJ1bGU6IFBvcnRBID4gUG9ydEQgPiBJbnRTcGsgKi8KKwkJcGluY3RsID0gKCEoc3BlYy0+aHBfcHJlc2VudCAmIDEpICYmIHNwZWMtPmN1cl9lYXBkKQorCQkJPyBQSU5fT1VUIDogMDsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxYywgMCwKKwkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgcGluY3RsKTsKKwl9Cit9CisKKy8qIHR1cm4gb24vb2ZmIEVBUEQgKCsgbXV0ZSBIUCkgYXMgYSBtYXN0ZXIgc3dpdGNoICovCitzdGF0aWMgaW50IGN4dDUwNjZfaHBfbWFzdGVyX3N3X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisKKwlpZiAoIWN4dF9lYXBkX3B1dChrY29udHJvbCwgdWNvbnRyb2wpKQorCQlyZXR1cm4gMDsKKworCWN4dDUwNjZfdXBkYXRlX3NwZWFrZXIoY29kZWMpOworCXJldHVybiAxOworfQorCisvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KK3N0YXRpYyB2b2lkIGN4dDUwNjZfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfcHJlc2VudFtdID0geworCQkvKiBlbmFibGUgZXh0ZXJuYWwgbWljLCBwb3J0IEIgKi8KKwkJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisKKwkJLyogc3dpdGNoIHRvIGV4dGVybmFsIG1pYyBpbnB1dCAqLworCQl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LAorCisJCS8qIGRpc2FibGUgaW50ZXJuYWwgbWljLCBwb3J0IEMgKi8KKwkJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJCXt9CisJfTsKKwlzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGV4dF9taWNfYWJzZW50W10gPSB7CisJCS8qIGVuYWJsZSBpbnRlcm5hbCBtaWMsIHBvcnQgQyAqLworCQl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKworCQkvKiBzd2l0Y2ggdG8gaW50ZXJuYWwgbWljIGlucHV0ICovCisJCXsweDE3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMX0sCisKKwkJLyogZGlzYWJsZSBleHRlcm5hbCBtaWMsIHBvcnQgQiAqLworCQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwkJe30KKwl9OworCXVuc2lnbmVkIGludCBwcmVzZW50OworCisJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYSwgMCwKKwkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOworCWlmIChwcmVzZW50KSB7CisJCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBleHRlcm5hbCBtaWNyb3Bob25lIGRldGVjdGVkXG4iKTsKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgZXh0X21pY19wcmVzZW50KTsKKwl9IGVsc2UgeworCQlzbmRfcHJpbnRkZCgiQ1hUNTA2NjogZXh0ZXJuYWwgbWljcm9waG9uZSBhYnNlbnRcbiIpOworCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBleHRfbWljX2Fic2VudCk7CisJfQorfQorCisvKiBtdXRlIGludGVybmFsIHNwZWFrZXIgaWYgSFAgaXMgcGx1Z2dlZCAqLworc3RhdGljIHZvaWQgY3h0NTA2Nl9ocF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVuc2lnbmVkIGludCBwb3J0QSwgcG9ydEQ7CisKKwkvKiBQb3J0IEEgKi8KKwlwb3J0QSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxOSwgMCwgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKQorCQkmIEFDX1BJTlNFTlNFX1BSRVNFTkNFOworCisJLyogUG9ydCBEICovCisJcG9ydEQgPSAoc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFjLCAwLCBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApCisJCSYgQUNfUElOU0VOU0VfUFJFU0VOQ0UpIDw8IDE7CisKKwlzcGVjLT5ocF9wcmVzZW50ID0gISEocG9ydEEgfCBwb3J0RCk7CisJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGhwIGF1dG9tdXRlIHBvcnRBPSV4IHBvcnREPSV4IHByZXNlbnQ9JWRcbiIsCisJCXBvcnRBLCBwb3J0RCwgc3BlYy0+aHBfcHJlc2VudCk7CisJY3h0NTA2Nl91cGRhdGVfc3BlYWtlcihjb2RlYyk7Cit9CisKKy8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBqYWNrIHNlbnNpbmcgKi8KK3N0YXRpYyB2b2lkIGN4dDUwNjZfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCit7CisJc25kX3ByaW50ZGQoIkNYVDUwNjY6IHVuc29sIGV2ZW50ICV4ICgleClcbiIsIHJlcywgcmVzID4+IDI2KTsKKwlzd2l0Y2ggKHJlcyA+PiAyNikgeworCWNhc2UgQ09ORVhBTlRfSFBfRVZFTlQ6CisJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKKwkJY3h0NTA2Nl9hdXRvbWljKGNvZGVjKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA2Nl9hbmFsb2dfbWljX2Jvb3N0ID0geworCS5udW1faXRlbXMgPSA1LAorCS5pdGVtcyA9IHsKKwkJeyAiMGRCIiwgIDAgfSwKKwkJeyAiMTBkQiIsIDEgfSwKKwkJeyAiMjBkQiIsIDIgfSwKKwkJeyAiMzBkQiIsIDMgfSwKKwkJeyAiNDBkQiIsIDQgfSwKKwl9LAorfTsKKworc3RhdGljIGludCBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXJldHVybiBzbmRfaGRhX2lucHV0X211eF9pbmZvKCZjeHQ1MDY2X2FuYWxvZ19taWNfYm9vc3QsIHVpbmZvKTsKK30KKworc3RhdGljIGludCBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IHZhbDsKKworCXZhbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxNywgMCwKKwkJQUNfVkVSQl9HRVRfQU1QX0dBSU5fTVVURSwgQUNfQU1QX0dFVF9PVVRQVVQpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHZhbCAmIEFDX0FNUF9HQUlOOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZjeHQ1MDY2X2FuYWxvZ19taWNfYm9vc3Q7CisJdW5zaWduZWQgaW50IGlkeDsKKworCWlmICghaW11eC0+bnVtX2l0ZW1zKQorCQlyZXR1cm4gMDsKKwlpZHggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCWlmIChpZHggPj0gaW11eC0+bnVtX2l0ZW1zKQorCQlpZHggPSBpbXV4LT5udW1faXRlbXMgLSAxOworCisJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNywgMCwKKwkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJQUNfQU1QX1NFVF9SSUdIVCB8IEFDX0FNUF9TRVRfTEVGVCB8IEFDX0FNUF9TRVRfT1VUUFVUIHwKKwkJCWltdXgtPml0ZW1zW2lkeF0uaW5kZXgpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDY2X2NhcHR1cmVfc291cmNlID0geworCS5udW1faXRlbXMgPSA0LAorCS5pdGVtcyA9IHsKKwkJeyAiTWljIEIiLCAwIH0sCisJCXsgIk1pYyBDIiwgMSB9LAorCQl7ICJNaWMgRSIsIDIgfSwKKwkJeyAiTWljIEYiLCAzIH0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBjeHQ1MDY2X2JpbmRfY2FwdHVyZV92b2xfb3RoZXJzID0geworCS5vcHMgPSAmc25kX2hkYV9iaW5kX3ZvbCwKKwkudmFsdWVzID0geworCQlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTQsIDMsIDAsIEhEQV9JTlBVVCksCisJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMiwgSERBX0lOUFVUKSwKKwkJMAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9iaW5kX2N0bHMgY3h0NTA2Nl9iaW5kX2NhcHR1cmVfc3dfb3RoZXJzID0geworCS5vcHMgPSAmc25kX2hkYV9iaW5kX3N3LAorCS52YWx1ZXMgPSB7CisJCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMCwgSERBX0lOUFVUKSwKKwkJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE0LCAzLCAyLCBIREFfSU5QVVQpLAorCQkwCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDY2X21peGVyX21hc3RlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGNbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAorCQkJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwKKwkJCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0ssCisJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2luZm8sCisJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfZ2V0LAorCQkucHV0ID0gc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX3B1dCwKKwkJLnRsdiA9IHsgLmMgPSBzbmRfaGRhX21peGVyX2FtcF90bHYgfSwKKwkJLyogb2Zmc2V0IGJ5IDI4IHZvbHVtZSBzdGVwcyB0byBsaW1pdCBtaW5pbXVtIGdhaW4gdG8gLTQ2ZEIgKi8KKwkJLnByaXZhdGVfdmFsdWUgPQorCQkJSERBX0NPTVBPU0VfQU1QX1ZBTF9PRlMoMHgxMCwgMywgMCwgSERBX09VVFBVVCwgMjgpLAorCX0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDY2X21peGVyc1tdID0geworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuaW5mbyA9IGN4dF9lYXBkX2luZm8sCisJCS5nZXQgPSBjeHRfZWFwZF9nZXQsCisJCS5wdXQgPSBjeHQ1MDY2X2hwX21hc3Rlcl9zd19wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gMHgxZCwKKwl9LAorCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQW5hbG9nIE1pYyBCb29zdCBDYXB0dXJlIEVudW0iLAorCQkuaW5mbyA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX2luZm8sCisJCS5nZXQgPSBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9wdXQsCisJfSwKKworCUhEQV9CSU5EX1ZPTCgiQ2FwdHVyZSBWb2x1bWUiLCAmY3h0NTA2Nl9iaW5kX2NhcHR1cmVfdm9sX290aGVycyksCisJSERBX0JJTkRfU1coIkNhcHR1cmUgU3dpdGNoIiwgJmN4dDUwNjZfYmluZF9jYXB0dXJlX3N3X290aGVycyksCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA2Nl9pbml0X3ZlcmJzW10gPSB7CisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sIC8qIFBvcnQgQiAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LCAvKiBQb3J0IEMgKi8KKwl7MHgxZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAvKiBQb3J0IEYgKi8KKwl7MHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAvKiBQb3J0IEUgKi8KKworCS8qIFNwZWFrZXJzICAqLworCXsweDFmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDFmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIERBQzEgKi8KKworCS8qIEhQLCBBbXAgICovCisJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBEQUMxICovCisKKwl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDFjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIERBQzEgKi8KKworCS8qIERBQzEgKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCisJLyogTm9kZSAxNCBjb25uZWN0aW9uczogMHgxNyAweDE4IDB4MjMgMHgyNCAweDI3ICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDUwfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpIHwgMHg1MH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAorCisJLyogbm8gZGlnaXRhbCBtaWNyb3Bob25lIHN1cHBvcnQgeWV0ICovCisJezB4MjMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisKKwkvKiBBdWRpbyBpbnB1dCBzZWxlY3RvciAqLworCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB8IDB4M30sCisKKwkvKiBTUERJRiByb3V0ZTogUENNICovCisJezB4MjAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKKworCXsweDIwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCisJLyogRUFQRCAqLworCXsweDFkLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLworCisJLyogbm90IGhhbmRsaW5nIHRoZXNlIHlldCAqLworCXsweDE5LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIDB9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIDB9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIDB9LAorCXsweDFjLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIDB9LAorCXsweDFkLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIDB9LAorCXsweDFlLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIDB9LAorCXsweDIwLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIDB9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIDB9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA2Nl9pbml0X3ZlcmJzX29scGNbXSA9IHsKKwkvKiBQb3J0IEE6IGhlYWRwaG9uZXMgKi8KKwl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIERBQzEgKi8KKworCS8qIFBvcnQgQjogZXh0ZXJuYWwgbWljcm9waG9uZSAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCisJLyogUG9ydCBDOiBpbnRlcm5hbCBtaWNyb3Bob25lICovCisJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisKKwkvKiBQb3J0IEQ6IHVudXNlZCAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCisJLyogUG9ydCBFOiB1bnVzZWQsIGJ1dCBoYXMgcHJpbWFyeSBFQVBEICovCisJezB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MWQsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDJ9LCAvKiBkZWZhdWx0IG9uICovCisKKwkvKiBQb3J0IEY6IHVudXNlZCAqLworCXsweDFlLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCisJLyogUG9ydCBHOiBpbnRlcm5hbCBzcGVha2VycyAqLworCXsweDFmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDFmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIERBQzEgKi8KKworCS8qIERBQzEgKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCisJLyogREFDMjogdW51c2VkICovCisJezB4MTEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4NTB9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKKworCS8qIERpc2FibGUgZGlnaXRhbCBtaWNyb3Bob25lIHBvcnQgKi8KKwl7MHgyMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKworCS8qIEF1ZGlvIGlucHV0IHNlbGVjdG9ycyAqLworCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB8IDB4M30sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAorCisJLyogRGlzYWJsZSBTUERJRiAqLworCXsweDIwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCisJLyogZW5hYmxlIHVuc29saWNpdGVkIGV2ZW50cyBmb3IgUG9ydCBBIGFuZCBCICovCisJezB4MTksIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9IUF9FVkVOVH0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9NSUNfRVZFTlR9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA2Nl9pbml0X3ZlcmJzX3BvcnRkX2xvW10gPSB7CisJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyogaW5pdGlhbGl6ZSBqYWNrLXNlbnNpbmcsIHRvbyAqLworc3RhdGljIGludCBjeHQ1MDY2X2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGluaXRcbiIpOworCWNvbmV4YW50X2luaXQoY29kZWMpOworCWlmIChjb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KSB7CisJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOworCQljeHQ1MDY2X2F1dG9taWMoY29kZWMpOworCX0KKwlyZXR1cm4gMDsKK30KKworZW51bSB7CisJQ1hUNTA2Nl9MQVBUT1AsCQkJLyogTGFwdG9wcyB3LyBFQVBEIHN1cHBvcnQgKi8KKwlDWFQ1MDY2X0RFTExfTEFQVE9QLAkvKiBEZWxsIExhcHRvcCAqLworCUNYVDUwNjZfT0xQQ19YT18xXzUsCS8qIE9MUEMgWE8gMS41ICovCisJQ1hUNTA2Nl9NT0RFTFMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjeHQ1MDY2X21vZGVsc1tDWFQ1MDY2X01PREVMU10gPSB7CisJW0NYVDUwNjZfTEFQVE9QXQkJPSAibGFwdG9wIiwKKwlbQ1hUNTA2Nl9ERUxMX0xBUFRPUF0JPSAiZGVsbC1sYXB0b3AiLAorCVtDWFQ1MDY2X09MUENfWE9fMV81XQk9ICJvbHBjLXhvLTFfNSIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA2Nl9jZmdfdGJsW10gPSB7CisJU05EX1BDSV9RVUlSSygweDE0ZjEsIDB4MDEwMSwgIkNvbmV4YW50IFJlZmVyZW5jZSBib2FyZCIsCisJCSAgICAgIENYVDUwNjZfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMmY1LCAiRGVsbCIsCisJCSAgICAgIENYVDUwNjZfREVMTF9MQVBUT1ApLAorCXt9Cit9OworCitzdGF0aWMgaW50IHBhdGNoX2N4dDUwNjYoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWM7CisJaW50IGJvYXJkX2NvbmZpZzsKKworCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCWlmICghc3BlYykKKwkJcmV0dXJuIC1FTk9NRU07CisJY29kZWMtPnNwZWMgPSBzcGVjOworCisJY29kZWMtPnBhdGNoX29wcyA9IGNvbmV4YW50X3BhdGNoX29wczsKKwljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDY2X2luaXQ7CisKKwlzcGVjLT5kZWxsX2F1dG9tdXRlID0gMDsKKwlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOworCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShjeHQ1MDY2X2RhY19uaWRzKTsKKwlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGN4dDUwNjZfZGFjX25pZHM7CisJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBDWFQ1MDY2X1NQRElGX09VVDsKKwlzcGVjLT5udW1fYWRjX25pZHMgPSAxOworCXNwZWMtPmFkY19uaWRzID0gY3h0NTA2Nl9hZGNfbmlkczsKKwlzcGVjLT5jYXBzcmNfbmlkcyA9IGN4dDUwNjZfY2Fwc3JjX25pZHM7CisJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNjZfY2FwdHVyZV9zb3VyY2U7CisKKwlzcGVjLT5wb3J0X2RfbW9kZSA9IFBJTl9IUDsKKworCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMTsKKwlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA2Nl9pbml0X3ZlcmJzOworCXNwZWMtPm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGN4dDUwNjZfbW9kZXMpOworCXNwZWMtPmNoYW5uZWxfbW9kZSA9IGN4dDUwNjZfbW9kZXM7CisJc3BlYy0+Y3VyX2FkYyA9IDA7CisJc3BlYy0+Y3VyX2FkY19pZHggPSAwOworCisJYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIENYVDUwNjZfTU9ERUxTLAorCQkJCQkJICBjeHQ1MDY2X21vZGVscywgY3h0NTA2Nl9jZmdfdGJsKTsKKwlzd2l0Y2ggKGJvYXJkX2NvbmZpZykgeworCWRlZmF1bHQ6CisJY2FzZSBDWFQ1MDY2X0xBUFRPUDoKKwkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3RlcjsKKwkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKKwkJYnJlYWs7CisJY2FzZSBDWFQ1MDY2X0RFTExfTEFQVE9QOgorCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyOworCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJzOworCisJCXNwZWMtPnBvcnRfZF9tb2RlID0gUElOX09VVDsKKwkJc3BlYy0+aW5pdF92ZXJic1tzcGVjLT5udW1faW5pdF92ZXJic10gPSBjeHQ1MDY2X2luaXRfdmVyYnNfcG9ydGRfbG87CisJCXNwZWMtPm51bV9pbml0X3ZlcmJzKys7CisJCXNwZWMtPmRlbGxfYXV0b211dGUgPSAxOworCQlicmVhazsKKwljYXNlIENYVDUwNjZfT0xQQ19YT18xXzU6CisJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X3Vuc29sX2V2ZW50OworCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA2Nl9pbml0X3ZlcmJzX29scGM7CisJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9tYXN0ZXJfb2xwYzsKKwkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKKwkJc3BlYy0+cG9ydF9kX21vZGUgPSAwOworCisJCS8qIG5vIFMvUERJRiBvdXQgKi8KKwkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAwOworCisJCS8qIGlucHV0IHNvdXJjZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkICovCisJCXNwZWMtPmlucHV0X211eCA9IE5VTEw7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQogCiAvKgogICovCkBAIC0xOTE5LDEyICsyMzk1LDE1IEBACiAJICAucGF0Y2ggPSBwYXRjaF9jeHQ1MDQ3IH0sCiAJeyAuaWQgPSAweDE0ZjE1MDUxLCAubmFtZSA9ICJDWDIwNTYxIChIZXJtb3NhKSIsCiAJICAucGF0Y2ggPSBwYXRjaF9jeHQ1MDUxIH0sCisJeyAuaWQgPSAweDE0ZjE1MDY2LCAubmFtZSA9ICJDWDIwNTgyIChQZWJibGUpIiwKKwkgIC5wYXRjaCA9IHBhdGNoX2N4dDUwNjYgfSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTRmMTUwNDUiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxNGYxNTA0NyIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjE0ZjE1MDUxIik7CitNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTRmMTUwNjYiKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJDb25leGFudCBIRC1hdWRpbyBjb2RlYyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9pbnRlbGhkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaW50ZWxoZG1pLmMKaW5kZXggZmNjNzdmZS4uMDFhMThlZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9pbnRlbGhkbWkuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2ludGVsaGRtaS5jCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCiAjaW5jbHVkZSAiaGRhX2xvY2FsLmgiCiAKLSNkZWZpbmUgQ1ZUX05JRAkJMHgwMgkvKiBhdWRpbyBjb252ZXJ0ZXIgKi8KLSNkZWZpbmUgUElOX05JRAkJMHgwMwkvKiBIRE1JIG91dHB1dCBwaW4gKi8KK3N0YXRpYyBoZGFfbmlkX3QgY3Z0X25pZDsJLyogYXVkaW8gY29udmVydGVyICovCitzdGF0aWMgaGRhX25pZF90IHBpbl9uaWQ7CS8qIEhETUkgb3V0cHV0IHBpbiAqLwogCiAjZGVmaW5lIElOVEVMX0hETUlfRVZFTlRfVEFHCQkweDA4CiAKQEAgLTQ0LDMwICs0NCw2IEBACiAJc3RydWN0IGhkbWlfZWxkIHNpbmtfZWxkOwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBwaW5vdXRfZW5hYmxlX3ZlcmJbXSA9IHsKLQl7UElOX05JRCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKLQl7fSAvKiB0ZXJtaW5hdG9yICovCi19OwotCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHVuc29saWNpdGVkX3Jlc3BvbnNlX3ZlcmJbXSA9IHsKLQl7UElOX05JRCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8Ci0JCQkJCQkgIElOVEVMX0hETUlfRVZFTlRfVEFHfSwKLQl7fQotfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBkZWZfY2hhbl9tYXBbXSA9IHsKLQl7Q1ZUX05JRCwgQUNfVkVSQl9TRVRfSERNSV9DSEFOX1NMT1QsIDB4MDB9LAotCXtDVlRfTklELCBBQ19WRVJCX1NFVF9IRE1JX0NIQU5fU0xPVCwgMHgxMX0sCi0Je0NWVF9OSUQsIEFDX1ZFUkJfU0VUX0hETUlfQ0hBTl9TTE9ULCAweDIyfSwKLQl7Q1ZUX05JRCwgQUNfVkVSQl9TRVRfSERNSV9DSEFOX1NMT1QsIDB4MzN9LAotCXtDVlRfTklELCBBQ19WRVJCX1NFVF9IRE1JX0NIQU5fU0xPVCwgMHg0NH0sCi0Je0NWVF9OSUQsIEFDX1ZFUkJfU0VUX0hETUlfQ0hBTl9TTE9ULCAweDU1fSwKLQl7Q1ZUX05JRCwgQUNfVkVSQl9TRVRfSERNSV9DSEFOX1NMT1QsIDB4NjZ9LAotCXtDVlRfTklELCBBQ19WRVJCX1NFVF9IRE1JX0NIQU5fU0xPVCwgMHg3N30sCi0Je30KLX07Ci0KLQogc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lIHsKIAl1OCB0eXBlOyAvKiAweDg0ICovCiAJdTggdmVyOyAgLyogMHgwMSAqLwpAQCAtMjQ0LDExICsyMjAsMTIgQEAKIHN0YXRpYyB2b2lkIGhkbWlfZW5hYmxlX291dHB1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAkvKiBVbm11dGUgKi8KLQlpZiAoZ2V0X3djYXBzKGNvZGVjLCBQSU5fTklEKSAmIEFDX1dDQVBfT1VUX0FNUCkKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgUElOX05JRCwgMCwKKwlpZiAoZ2V0X3djYXBzKGNvZGVjLCBwaW5fbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKIAkJCQlBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSk7CiAJLyogRW5hYmxlIHBpbiBvdXQgKi8KLQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBwaW5vdXRfZW5hYmxlX3ZlcmIpOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCisJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUKTsKIH0KIAogLyoKQEAgLTI1Niw4ICsyMzMsOCBAQAogICovCiBzdGF0aWMgdm9pZCBoZG1pX3N0YXJ0X2luZm9mcmFtZV90cmFucyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQloZG1pX3NldF9kaXBfaW5kZXgoY29kZWMsIFBJTl9OSUQsIDB4MCwgMHgwKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBQSU5fTklELCAwLCBBQ19WRVJCX1NFVF9IRE1JX0RJUF9YTUlULAorCWhkbWlfc2V0X2RpcF9pbmRleChjb2RlYywgcGluX25pZCwgMHgwLCAweDApOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsIEFDX1ZFUkJfU0VUX0hETUlfRElQX1hNSVQsCiAJCQkJCQlBQ19ESVBYTUlUX0JFU1QpOwogfQogCkBAIC0yNjYsMjAgKzI0MywyMCBAQAogICovCiBzdGF0aWMgdm9pZCBoZG1pX3N0b3BfaW5mb2ZyYW1lX3RyYW5zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCWhkbWlfc2V0X2RpcF9pbmRleChjb2RlYywgUElOX05JRCwgMHgwLCAweDApOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIFBJTl9OSUQsIDAsIEFDX1ZFUkJfU0VUX0hETUlfRElQX1hNSVQsCisJaGRtaV9zZXRfZGlwX2luZGV4KGNvZGVjLCBwaW5fbmlkLCAweDAsIDB4MCk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwgQUNfVkVSQl9TRVRfSERNSV9ESVBfWE1JVCwKIAkJCQkJCUFDX0RJUFhNSVRfRElTQUJMRSk7CiB9CiAKIHN0YXRpYyBpbnQgaGRtaV9nZXRfY2hhbm5lbF9jb3VudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlyZXR1cm4gMSArIHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgQ1ZUX05JRCwgMCwKKwlyZXR1cm4gMSArIHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgY3Z0X25pZCwgMCwKIAkJCQkJQUNfVkVSQl9HRVRfQ1ZUX0NIQU5fQ09VTlQsIDApOwogfQogCiBzdGF0aWMgdm9pZCBoZG1pX3NldF9jaGFubmVsX2NvdW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgY2hzKQogewotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIENWVF9OSUQsIDAsCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgY3Z0X25pZCwgMCwKIAkJCQkJQUNfVkVSQl9TRVRfQ1ZUX0NIQU5fQ09VTlQsIGNocyAtIDEpOwogCiAJaWYgKGNocyAhPSBoZG1pX2dldF9jaGFubmVsX2NvdW50KGNvZGVjKSkKQEAgLTI5NCw3ICsyNzEsNyBAQAogCWludCBzbG90OwogCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlzbG90ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBDVlRfTklELCAwLAorCQlzbG90ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBjdnRfbmlkLCAwLAogCQkJCQkJQUNfVkVSQl9HRVRfSERNSV9DSEFOX1NMT1QsIGkpOwogCQlwcmludGsoS0VSTl9ERUJVRyAiSERNSTogQVNQIGNoYW5uZWwgJWQgPT4gc2xvdCAlZFxuIiwKIAkJCQkJCXNsb3QgPj4gNCwgc2xvdCAmIDB4Nyk7CkBAIC0zMDcsNyArMjg0LDcgQEAKIAlzdHJ1Y3QgaW50ZWxfaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGhkbWlfZWxkICplbGQgPSAmc3BlYy0+c2lua19lbGQ7CiAKLQlpZiAoIXNuZF9oZG1pX2dldF9lbGQoZWxkLCBjb2RlYywgUElOX05JRCkpCisJaWYgKCFzbmRfaGRtaV9nZXRfZWxkKGVsZCwgY29kZWMsIHBpbl9uaWQpKQogCQlzbmRfaGRtaV9zaG93X2VsZChlbGQpOwogfQogCkBAIC0zMjIsMTEgKzI5OSwxMSBAQAogCWludCBpOwogCWludCBzaXplOwogCi0Jc2l6ZSA9IHNuZF9oZG1pX2dldF9lbGRfc2l6ZShjb2RlYywgUElOX05JRCk7CisJc2l6ZSA9IHNuZF9oZG1pX2dldF9lbGRfc2l6ZShjb2RlYywgcGluX25pZCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIkhETUk6IEVMRCBidWYgc2l6ZSBpcyAlZFxuIiwgc2l6ZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCXNpemUgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIFBJTl9OSUQsIDAsCisJCXNpemUgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsCiAJCQkJCQlBQ19WRVJCX0dFVF9IRE1JX0RJUF9TSVpFLCBpKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkhETUk6IERJUCBHUFslZF0gYnVmIHNpemUgaXMgJWRcbiIsIGksIHNpemUpOwogCX0KQEAgLTM0MCwxNSArMzE3LDE1IEBACiAJaW50IHNpemU7CiAJaW50IHBpLCBiaTsKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCXNpemUgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIFBJTl9OSUQsIDAsCisJCXNpemUgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsCiAJCQkJCQlBQ19WRVJCX0dFVF9IRE1JX0RJUF9TSVpFLCBpKTsKIAkJaWYgKHNpemUgPT0gMCkKIAkJCWNvbnRpbnVlOwogCi0JCWhkbWlfc2V0X2RpcF9pbmRleChjb2RlYywgUElOX05JRCwgaSwgMHgwKTsKKwkJaGRtaV9zZXRfZGlwX2luZGV4KGNvZGVjLCBwaW5fbmlkLCBpLCAweDApOwogCQlmb3IgKGogPSAxOyBqIDwgMTAwMDsgaisrKSB7Ci0JCQloZG1pX3dyaXRlX2RpcF9ieXRlKGNvZGVjLCBQSU5fTklELCAweDApOwotCQkJaGRtaV9nZXRfZGlwX2luZGV4KGNvZGVjLCBQSU5fTklELCAmcGksICZiaSk7CisJCQloZG1pX3dyaXRlX2RpcF9ieXRlKGNvZGVjLCBwaW5fbmlkLCAweDApOworCQkJaGRtaV9nZXRfZGlwX2luZGV4KGNvZGVjLCBwaW5fbmlkLCAmcGksICZiaSk7CiAJCQlpZiAocGkgIT0gaSkKIAkJCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiZGlwIGluZGV4ICVkOiAlZCAhPSAlZFxuIiwKIAkJCQkJCWJpLCBwaSwgaSk7CkBAIC0zNzYsOSArMzUzLDkgQEAKIAkJc3VtICs9IHBhcmFtc1tpXTsKIAlhaS0+Y2hlY2tzdW0gPSAtIHN1bTsKIAotCWhkbWlfc2V0X2RpcF9pbmRleChjb2RlYywgUElOX05JRCwgMHgwLCAweDApOworCWhkbWlfc2V0X2RpcF9pbmRleChjb2RlYywgcGluX25pZCwgMHgwLCAweDApOwogCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoYWkpOyBpKyspCi0JCWhkbWlfd3JpdGVfZGlwX2J5dGUoY29kZWMsIFBJTl9OSUQsIHBhcmFtc1tpXSk7CisJCWhkbWlfd3JpdGVfZGlwX2J5dGUoY29kZWMsIHBpbl9uaWQsIHBhcmFtc1tpXSk7CiB9CiAKIC8qCkBAIC00NjUsNiArNDQyLDggQEAKIHN0YXRpYyB2b2lkIGhkbWlfc2V0dXBfY2hhbm5lbF9tYXBwaW5nKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQlzdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgKmFpKQogeworCWludCBpOworCiAJaWYgKCFhaS0+Q0EpCiAJCXJldHVybjsKIApAQCAtNDczLDcgKzQ1MiwxMSBAQAogCSAqIEFMU0Egc2VxdWVuY2UgaXMgZnJvbnQvc3Vyci9jbGZlL3NpZGU/CiAJICovCiAKLQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBkZWZfY2hhbl9tYXApOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGN2dF9uaWQsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX0hETUlfQ0hBTl9TTE9ULAorCQkJCSAgICAoaSA8PCA0KSB8IGkpOworCiAJaGRtaV9kZWJ1Z19jaGFubmVsX21hcHBpbmcoY29kZWMpOwogfQogCkBAIC01OTcsNyArNTgwLDYgQEAKIAkuc3Vic3RyZWFtcyA9IDEsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDgsCi0JLm5pZCA9IENWVF9OSUQsIC8qIE5JRCB0byBxdWVyeSBmb3JtYXRzIGFuZCByYXRlcyBhbmQgc2V0dXAgc3RyZWFtcyAqLwogCS5vcHMgPSB7CiAJCS5vcGVuICAgID0gaW50ZWxfaGRtaV9wbGF5YmFja19wY21fb3BlbiwKIAkJLmNsb3NlICAgPSBpbnRlbF9oZG1pX3BsYXliYWNrX3BjbV9jbG9zZSwKQEAgLTYxMyw2ICs1OTUsOSBAQAogCWNvZGVjLT5udW1fcGNtcyA9IDE7CiAJY29kZWMtPnBjbV9pbmZvID0gaW5mbzsKIAorCS8qIE5JRCB0byBxdWVyeSBmb3JtYXRzIGFuZCByYXRlcyBhbmQgc2V0dXAgc3RyZWFtcyAqLworCWludGVsX2hkbWlfcGNtX3BsYXliYWNrLm5pZCA9IGN2dF9uaWQ7CisKIAlpbmZvLT5uYW1lID0gIklOVEVMIEhETUkiOwogCWluZm8tPnBjbV90eXBlID0gSERBX1BDTV9UWVBFX0hETUk7CiAJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdID0gaW50ZWxfaGRtaV9wY21fcGxheWJhY2s7CkBAIC02MzYsOCArNjIxLDkgQEAKIHsKIAloZG1pX2VuYWJsZV9vdXRwdXQoY29kZWMpOwogCi0Jc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgdW5zb2xpY2l0ZWRfcmVzcG9uc2VfdmVyYik7Ci0KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAorCQkJICAgIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKKwkJCSAgICBBQ19VU1JTUF9FTiB8IElOVEVMX0hETUlfRVZFTlRfVEFHKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjU3LDcgKzY0Myw3IEBACiAJLnVuc29sX2V2ZW50CQk9IGludGVsX2hkbWlfdW5zb2xfZXZlbnQsCiB9OwogCi1zdGF0aWMgaW50IHBhdGNoX2ludGVsX2hkbWkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgaW50IGRvX3BhdGNoX2ludGVsX2hkbWkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGludGVsX2hkbWlfc3BlYyAqc3BlYzsKIApAQCAtNjY3LDcgKzY1Myw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDA7CSAgLyogbm8gYW5hbG9nICovCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gODsKLQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IENWVF9OSUQ7CisJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBjdnRfbmlkOwogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCWNvZGVjLT5wYXRjaF9vcHMgPSBpbnRlbF9oZG1pX3BhdGNoX29wczsKQEAgLTY3OSwxMiArNjY1LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcGF0Y2hfaW50ZWxfaGRtaShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwljdnRfbmlkID0gMHgwMjsKKwlwaW5fbmlkID0gMHgwMzsKKwlyZXR1cm4gZG9fcGF0Y2hfaW50ZWxfaGRtaShjb2RlYyk7Cit9CisKK3N0YXRpYyBpbnQgcGF0Y2hfaW50ZWxfaGRtaV9pYmV4cGVhayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwljdnRfbmlkID0gMHgwMjsKKwlwaW5fbmlkID0gMHgwNDsKKwlyZXR1cm4gZG9fcGF0Y2hfaW50ZWxfaGRtaShjb2RlYyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX3ByZXNldCBzbmRfaGRhX3ByZXNldF9pbnRlbGhkbWlbXSA9IHsKIAl7IC5pZCA9IDB4ODA4NjI5ZmIsIC5uYW1lID0gIkc0NSBERVZDTCIsICAucGF0Y2ggPSBwYXRjaF9pbnRlbF9oZG1pIH0sCiAJeyAuaWQgPSAweDgwODYyODAxLCAubmFtZSA9ICJHNDUgREVWQkxDIiwgLnBhdGNoID0gcGF0Y2hfaW50ZWxfaGRtaSB9LAogCXsgLmlkID0gMHg4MDg2MjgwMiwgLm5hbWUgPSAiRzQ1IERFVkNURyIsIC5wYXRjaCA9IHBhdGNoX2ludGVsX2hkbWkgfSwKIAl7IC5pZCA9IDB4ODA4NjI4MDMsIC5uYW1lID0gIkc0NSBERVZFTEsiLCAucGF0Y2ggPSBwYXRjaF9pbnRlbF9oZG1pIH0sCiAJeyAuaWQgPSAweDgwODYyODA0LCAubmFtZSA9ICJHNDUgREVWSUJYIiwgLnBhdGNoID0gcGF0Y2hfaW50ZWxfaGRtaSB9LAorCXsgLmlkID0gMHg4MDg2MDA1NCwgLm5hbWUgPSAiUTU3IERFVklCWCIsIC5wYXRjaCA9IHBhdGNoX2ludGVsX2hkbWlfaWJleHBlYWsgfSwKIAl7IC5pZCA9IDB4MTA5NTEzOTIsIC5uYW1lID0gIlNpSTEzOTIgSERNSSIsICAgICAucGF0Y2ggPSBwYXRjaF9pbnRlbF9oZG1pIH0sCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKQEAgLTY5NCw2ICs2OTUsNyBAQAogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjgwODYyODAyIik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6ODA4NjI4MDMiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDo4MDg2MjgwNCIpOworTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjgwODYwMDU0Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTA5NTEzOTIiKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKaW5kZXggZjU3OTJlMi4uYzg0MzVjOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCkBAIC0zNzcsNiArMzc3LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X252aGRtaVtdID0gewogCXsgLmlkID0gMHgxMGRlMDAwMiwgLm5hbWUgPSAiTUNQNzggSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKKwl7IC5pZCA9IDB4MTBkZTAwMDMsIC5uYW1lID0gIk1DUDc4IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoIH0sCiAJeyAuaWQgPSAweDEwZGUwMDA2LCAubmFtZSA9ICJNQ1A3OCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAogCXsgLmlkID0gMHgxMGRlMDAwNywgLm5hbWUgPSAiTUNQN0EgSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKIAl7IC5pZCA9IDB4MTBkZTAwNjcsIC5uYW1lID0gIk1DUDY3IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfMmNoIH0sCkBAIC0zODUsNiArMzg2LDcgQEAKIH07CiAKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAwMiIpOworTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDAzIik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMDYiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAwNyIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDY3Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IDMwZWViMzAuLjdlZDQ3ZjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0yMDgsMTIgKzIwOCw2IEBACiAJQUxDODg1X01CUDMsCiAJQUxDODg1X01CNSwKIAlBTEM4ODVfSU1BQzI0LAotCUFMQzg4Ml9BVVRPLAotCUFMQzg4Ml9NT0RFTF9MQVNULAotfTsKLQotLyogQUxDODgzIG1vZGVscyAqLwotZW51bSB7CiAJQUxDODgzXzNTVF8yY2hfRElHLAogCUFMQzg4M18zU1RfNmNoX0RJRywKIAlBTEM4ODNfM1NUXzZjaCwKQEAgLTIyNiw2ICsyMjAsNyBAQAogCUFMQzg4OF9BQ0VSX0FTUElSRV80OTMwRywKIAlBTEM4ODhfQUNFUl9BU1BJUkVfNjUzMEcsCiAJQUxDODg4X0FDRVJfQVNQSVJFXzg5MzBHLAorCUFMQzg4OF9BQ0VSX0FTUElSRV83NzMwRywKIAlBTEM4ODNfTUVESU9OLAogCUFMQzg4M19NRURJT05fTUQyLAogCUFMQzg4M19MQVBUT1BfRUFQRCwKQEAgLTIzNywxNyArMjMyLDIwIEBACiAJQUxDODg4XzNTVF9IUCwKIAlBTEM4ODhfNlNUX0RFTEwsCiAJQUxDODgzX01JVEFDLAorCUFMQzg4M19DTEVWT19NNTQwUiwKIAlBTEM4ODNfQ0xFVk9fTTcyMCwKIAlBTEM4ODNfRlVKSVRTVV9QSTI1MTUsCiAJQUxDODg4X0ZVSklUU1VfWEEzNTMwLAogCUFMQzg4M18zU1RfNmNoX0lOVEVMLAorCUFMQzg4OUFfSU5URUwsCisJQUxDODg5X0lOVEVMLAogCUFMQzg4OF9BU1VTX005MFYsCiAJQUxDODg4X0FTVVNfRUVFMTYwMSwKIAlBTEM4ODlBX01CMzEsCiAJQUxDMTIwMF9BU1VTX1A1USwKIAlBTEM4ODNfU09OWV9WQUlPX1RULAotCUFMQzg4M19BVVRPLAotCUFMQzg4M19NT0RFTF9MQVNULAorCUFMQzg4Ml9BVVRPLAorCUFMQzg4Ml9NT0RFTF9MQVNULAogfTsKIAogLyogZm9yIEdQSU8gUG9sbCAqLwpAQCAtMjYyLDYgKzI2MCwxNCBAQAogCUFMQ19JTklUX0dQSU8zLAogfTsKIAorc3RydWN0IGFsY19taWNfcm91dGUgeworCWhkYV9uaWRfdCBwaW47CisJdW5zaWduZWQgY2hhciBtdXhfaWR4OworCXVuc2lnbmVkIGNoYXIgYW1peF9pZHg7Cit9OworCisjZGVmaW5lIE1VWF9JRFhfVU5ERUYJKCh1bnNpZ25lZCBjaGFyKS0xKQorCiBzdHJ1Y3QgYWxjX3NwZWMgewogCS8qIGNvZGVjIHBhcmFtZXRlcml6YXRpb24gKi8KIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqbWl4ZXJzWzVdOwkvKiBtaXhlciBhcnJheXMgKi8KQEAgLTMwNCw2ICszMTAsOCBAQAogCXVuc2lnbmVkIGludCBudW1fbXV4X2RlZnM7CiAJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmlucHV0X211eDsKIAl1bnNpZ25lZCBpbnQgY3VyX211eFszXTsKKwlzdHJ1Y3QgYWxjX21pY19yb3V0ZSBleHRfbWljOworCXN0cnVjdCBhbGNfbWljX3JvdXRlIGludF9taWM7CiAKIAkvKiBjaGFubmVsIG1vZGVsICovCiAJY29uc3Qgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgKmNoYW5uZWxfbW9kZTsKQEAgLTMyMCw2ICszMjgsOCBAQAogCXN0cnVjdCBzbmRfYXJyYXkga2N0bHM7CiAJc3RydWN0IGhkYV9pbnB1dF9tdXggcHJpdmF0ZV9pbXV4WzNdOwogCWhkYV9uaWRfdCBwcml2YXRlX2RhY19uaWRzW0FVVE9fQ0ZHX01BWF9PVVRTXTsKKwloZGFfbmlkX3QgcHJpdmF0ZV9hZGNfbmlkc1tBVVRPX0NGR19NQVhfT1VUU107CisJaGRhX25pZF90IHByaXZhdGVfY2Fwc3JjX25pZHNbQVVUT19DRkdfTUFYX09VVFNdOwogCiAJLyogaG9va3MgKi8KIAl2b2lkICgqaW5pdF9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CkBAIC0zMjksNiArMzM5LDcgQEAKIAl1bnNpZ25lZCBpbnQgc2Vuc2VfdXBkYXRlZDogMTsKIAl1bnNpZ25lZCBpbnQgamFja19wcmVzZW50OiAxOwogCXVuc2lnbmVkIGludCBtYXN0ZXJfc3c6IDE7CisJdW5zaWduZWQgaW50IGF1dG9fbWljOjE7CiAKIAkvKiBvdGhlciBmbGFncyAqLwogCXVuc2lnbmVkIGludCBub19hbmFsb2cgOjE7IC8qIGRpZ2l0YWwgSS9PIG9ubHkgKi8KQEAgLTM3MCw2ICszODEsNyBAQAogCXVuc2lnbmVkIGludCBudW1fbXV4X2RlZnM7CiAJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmlucHV0X211eDsKIAl2b2lkICgqdW5zb2xfZXZlbnQpKHN0cnVjdCBoZGFfY29kZWMgKiwgdW5zaWduZWQgaW50KTsKKwl2b2lkICgqc2V0dXApKHN0cnVjdCBoZGFfY29kZWMgKik7CiAJdm9pZCAoKmluaXRfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqKTsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJc3RydWN0IGhkYV9hbXBfbGlzdCAqbG9vcGJhY2tzOwpAQCAtNDE3LDcgKzQyOSw3IEBACiAJbXV4X2lkeCA9IGFkY19pZHggPj0gc3BlYy0+bnVtX211eF9kZWZzID8gMCA6IGFkY19pZHg7CiAJaW11eCA9ICZzcGVjLT5pbnB1dF9tdXhbbXV4X2lkeF07CiAKLQl0eXBlID0gKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOworCXR5cGUgPSBnZXRfd2NhcHNfdHlwZShnZXRfd2NhcHMoY29kZWMsIG5pZCkpOwogCWlmICh0eXBlID09IEFDX1dJRF9BVURfTUlYKSB7CiAJCS8qIE1hdHJpeC1taXhlciBzdHlsZSAoZS5nLiBBTEM4ODIpICovCiAJCXVuc2lnbmVkIGludCAqY3VyX3ZhbCA9ICZzcGVjLT5jdXJfbXV4W2FkY19pZHhdOwpAQCAtODQyLDkgKzg1NCwxMCBAQAogLyoKICAqIHNldCB1cCBmcm9tIHRoZSBwcmVzZXQgdGFibGUKICAqLwotc3RhdGljIHZvaWQgc2V0dXBfcHJlc2V0KHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKK3N0YXRpYyB2b2lkIHNldHVwX3ByZXNldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCSBjb25zdCBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgKnByZXNldCkKIHsKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZXNldC0+bWl4ZXJzKSAmJiBwcmVzZXQtPm1peGVyc1tpXTsgaSsrKQpAQCAtODg2LDYgKzg5OSw5IEBACiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBwcmVzZXQtPmxvb3BiYWNrczsKICNlbmRpZgorCisJaWYgKHByZXNldC0+c2V0dXApCisJCXByZXNldC0+c2V0dXAoY29kZWMpOwogfQogCiAvKiBFbmFibGUgR1BJTyBtYXNrIGFuZCBzZXQgb3V0cHV0ICovCkBAIC05NjUsMzAgKzk4MSw2NCBAQAogCX0KIH0KIAotI2lmIDAgLyogaXQncyBicm9rZW4gaW4gc29tZSBjYXNlcyAtLSB0ZW1wb3JhcmlseSBkaXNhYmxlZCAqLworc3RhdGljIGludCBnZXRfY29ubmVjdGlvbl9pbmRleChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG11eCwKKwkJCQloZGFfbmlkX3QgbmlkKQoreworCWhkYV9uaWRfdCBjb25uW0hEQV9NQVhfTlVNX0lOUFVUU107CisJaW50IGksIG51bXM7CisKKwludW1zID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG11eCwgY29ubiwgQVJSQVlfU0laRShjb25uKSk7CisJZm9yIChpID0gMDsgaSA8IG51bXM7IGkrKykKKwkJaWYgKGNvbm5baV0gPT0gbmlkKQorCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0xOworfQorCiBzdGF0aWMgdm9pZCBhbGNfbWljX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXVuc2lnbmVkIGludCBwcmVzZW50OwotCXVuc2lnbmVkIGludCBtaWNfbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW0FVVE9fUElOX01JQ107Ci0JdW5zaWduZWQgaW50IGZtaWNfbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW0FVVE9fUElOX0ZST05UX01JQ107Ci0JdW5zaWduZWQgaW50IG1peF9uaWQgPSBzcGVjLT5jYXBzcmNfbmlkc1swXTsKLQl1bnNpZ25lZCBpbnQgY2Fwc3JjX2lkeF9taWMsIGNhcHNyY19pZHhfZm1pYzsKKwlzdHJ1Y3QgYWxjX21pY19yb3V0ZSAqZGVhZCwgKmFsaXZlOworCXVuc2lnbmVkIGludCBwcmVzZW50LCB0eXBlOworCWhkYV9uaWRfdCBjYXBfbmlkOwogCi0JY2Fwc3JjX2lkeF9taWMgPSBtaWNfbmlkIC0gMHgxODsKLQljYXBzcmNfaWR4X2ZtaWMgPSBmbWljX25pZCAtIDB4MTg7Ci0JcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbWljX25pZCwgMCwKLQkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG1peF9uaWQsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JCSAgICAweDcwMDAgfCAoY2Fwc3JjX2lkeF9taWMgPDwgOCkgfCAocHJlc2VudCA/IDAgOiAweDgwKSk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbWl4X25pZCwgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkJICAgIDB4NzAwMCB8IChjYXBzcmNfaWR4X2ZtaWMgPDwgOCkgfCAocHJlc2VudCA/IDB4ODAgOiAwKSk7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDBiLCBIREFfSU5QVVQsIGNhcHNyY19pZHhfZm1pYywKLQkJCSBIREFfQU1QX01VVEUsIHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwKTsKKwlpZiAoIXNwZWMtPmF1dG9fbWljKQorCQlyZXR1cm47CisJaWYgKCFzcGVjLT5pbnRfbWljLnBpbiB8fCAhc3BlYy0+ZXh0X21pYy5waW4pCisJCXJldHVybjsKKwlpZiAoc25kX0JVR19PTighc3BlYy0+YWRjX25pZHMpKQorCQlyZXR1cm47CisKKwljYXBfbmlkID0gc3BlYy0+Y2Fwc3JjX25pZHMgPyBzcGVjLT5jYXBzcmNfbmlkc1swXSA6IHNwZWMtPmFkY19uaWRzWzBdOworCisJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgc3BlYy0+ZXh0X21pYy5waW4sIDAsCisJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApOworCXByZXNlbnQgJj0gQUNfUElOU0VOU0VfUFJFU0VOQ0U7CisJaWYgKHByZXNlbnQpIHsKKwkJYWxpdmUgPSAmc3BlYy0+ZXh0X21pYzsKKwkJZGVhZCA9ICZzcGVjLT5pbnRfbWljOworCX0gZWxzZSB7CisJCWFsaXZlID0gJnNwZWMtPmludF9taWM7CisJCWRlYWQgPSAmc3BlYy0+ZXh0X21pYzsKKwl9CisKKwl0eXBlID0gZ2V0X3djYXBzX3R5cGUoZ2V0X3djYXBzKGNvZGVjLCBjYXBfbmlkKSk7CisJaWYgKHR5cGUgPT0gQUNfV0lEX0FVRF9NSVgpIHsKKwkJLyogTWF0cml4LW1peGVyIHN0eWxlIChlLmcuIEFMQzg4MikgKi8KKwkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCBjYXBfbmlkLCBIREFfSU5QVVQsCisJCQkJCSBhbGl2ZS0+bXV4X2lkeCwKKwkJCQkJIEhEQV9BTVBfTVVURSwgMCk7CisJCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgY2FwX25pZCwgSERBX0lOUFVULAorCQkJCQkgZGVhZC0+bXV4X2lkeCwKKwkJCQkJIEhEQV9BTVBfTVVURSwgSERBX0FNUF9NVVRFKTsKKwl9IGVsc2UgeworCQkvKiBNVVggc3R5bGUgKGUuZy4gQUxDODgwKSAqLworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBjYXBfbmlkLCAwLAorCQkJCQkgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAorCQkJCQkgIGFsaXZlLT5tdXhfaWR4KTsKKwl9CisKKwkvKiBGSVhNRTogYW5hbG9nIG1peGVyICovCiB9Ci0jZWxzZQotI2RlZmluZSBhbGNfbWljX2F1dG9tdXRlKGNvZGVjKSBkbyB7fSB3aGlsZSgwKSAvKiBOT1AgKi8KLSNlbmRpZiAvKiBkaXNhYmxlZCAqLwogCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCiBzdGF0aWMgdm9pZCBhbGNfc2t1X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQpAQCAtMTAzMSw2ICsxMDgxLDE2IEBACiAJCQkJICAgIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgMHgzMDMwKTsKIH0KIAorc3RhdGljIHZvaWQgYWxjODg5X2NvZWZfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyMCwgMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgNyk7CisJdG1wID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDIwLCAwLCBBQ19WRVJCX0dFVF9QUk9DX0NPRUYsIDApOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjAsIDAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDcpOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjAsIDAsIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgdG1wfDB4MjAxMCk7Cit9CisKIHN0YXRpYyB2b2lkIGFsY19hdXRvX2luaXRfYW1wKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgdHlwZSkKIHsKIAl1bnNpZ25lZCBpbnQgdG1wOwpAQCAtMTA4OCwxNSArMTE0OCw3IEBACiAJCWNhc2UgMHgxMGVjMDg4NToKIAkJY2FzZSAweDEwZWMwODg3OgogCQljYXNlIDB4MTBlYzA4ODk6Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIwLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgNyk7Ci0JCQl0bXAgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MjAsIDAsCi0JCQkJCQkgQUNfVkVSQl9HRVRfUFJPQ19DT0VGLCAwKTsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjAsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9DT0VGX0lOREVYLCA3KTsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjAsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsCi0JCQkJCSAgICB0bXAgfCAweDIwMTApOworCQkJYWxjODg5X2NvZWZfaW5pdChjb2RlYyk7CiAJCQlicmVhazsKIAkJY2FzZSAweDEwZWMwODg4OgogCQkJYWxjODg4X2NvZWZfaW5pdChjb2RlYyk7CkBAIC0xMTQyLDYgKzExOTQsNTUgQEAKIAlzcGVjLT51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQ7CiB9CiAKK3N0YXRpYyB2b2lkIGFsY19pbml0X2F1dG9fbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZyA9ICZzcGVjLT5hdXRvY2ZnOworCWhkYV9uaWRfdCBmaXhlZCwgZXh0OworCWludCBpOworCisJLyogdGhlcmUgbXVzdCBiZSBvbmx5IHR3byBtaWMgaW5wdXRzIGV4Y2x1c2l2ZWx5ICovCisJZm9yIChpID0gQVVUT19QSU5fTElORTsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykKKwkJaWYgKGNmZy0+aW5wdXRfcGluc1tpXSkKKwkJCXJldHVybjsKKworCWZpeGVkID0gZXh0ID0gMDsKKwlmb3IgKGkgPSBBVVRPX1BJTl9NSUM7IGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDOyBpKyspIHsKKwkJaGRhX25pZF90IG5pZCA9IGNmZy0+aW5wdXRfcGluc1tpXTsKKwkJdW5zaWduZWQgaW50IGRlZmNmZzsKKwkJaWYgKCFuaWQpCisJCQlyZXR1cm47CisJCWRlZmNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKKwkJc3dpdGNoIChnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmY2ZnKSkgeworCQljYXNlIEFDX0pBQ0tfUE9SVF9GSVhFRDoKKwkJCWlmIChmaXhlZCkKKwkJCQlyZXR1cm47IC8qIGFscmVhZHkgb2NjdXBpZWQgKi8KKwkJCWZpeGVkID0gbmlkOworCQkJYnJlYWs7CisJCWNhc2UgQUNfSkFDS19QT1JUX0NPTVBMRVg6CisJCQlpZiAoZXh0KQorCQkJCXJldHVybjsgLyogYWxyZWFkeSBvY2N1cGllZCAqLworCQkJZXh0ID0gbmlkOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm47IC8qIGludmFsaWQgZW50cnkgKi8KKwkJfQorCX0KKwlpZiAoIShnZXRfd2NhcHMoY29kZWMsIGV4dCkgJiBBQ19XQ0FQX1VOU09MX0NBUCkpCisJCXJldHVybjsgLyogbm8gdW5zb2wgc3VwcG9ydCAqLworCXNuZF9wcmludGRkKCJyZWFsdGVrOiBFbmFibGUgYXV0by1taWMgc3dpdGNoIG9uIE5JRCAweCV4LzB4JXhcbiIsCisJCSAgICBleHQsIGZpeGVkKTsKKwlzcGVjLT5leHRfbWljLnBpbiA9IGV4dDsKKwlzcGVjLT5pbnRfbWljLnBpbiA9IGZpeGVkOworCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IE1VWF9JRFhfVU5ERUY7IC8qIHNldCBsYXRlciAqLworCXNwZWMtPmludF9taWMubXV4X2lkeCA9IE1VWF9JRFhfVU5ERUY7IC8qIHNldCBsYXRlciAqLworCXNwZWMtPmF1dG9fbWljID0gMTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBzcGVjLT5leHRfbWljLnBpbiwgMCwKKwkJCQkgIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKKwkJCQkgIEFDX1VTUlNQX0VOIHwgQUxDODgwX01JQ19FVkVOVCk7CisJc3BlYy0+dW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50OworfQorCiAvKiBjaGVjayBzdWJzeXN0ZW0gSUQgYW5kIHNldCB1cCBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb247CiAgKiByZXR1cm4gMSBpZiBpbml0aWFsaXplZCwgMCBpZiBpbnZhbGlkIFNTSUQKICAqLwpAQCAtMTI0Myw2ICsxMzQ0LDcgQEAKIAl9CiAKIAlhbGNfaW5pdF9hdXRvX2hwKGNvZGVjKTsKKwlhbGNfaW5pdF9hdXRvX21pYyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEyNTUsNiArMTM1Nyw3IEBACiAJCQkgICAiRW5hYmxlIGRlZmF1bHQgc2V0dXAgZm9yIGF1dG8gbW9kZSBhcyBmYWxsYmFja1xuIik7CiAJCXNwZWMtPmluaXRfYW1wID0gQUxDX0lOSVRfREVGQVVMVDsKIAkJYWxjX2luaXRfYXV0b19ocChjb2RlYyk7CisJCWFsY19pbml0X2F1dG9fbWljKGNvZGVjKTsKIAl9CiB9CiAKQEAgLTE0MzYsNyArMTUzOSwyNSBAQAogCQlhbGNfYXV0b211dGVfYW1wKGNvZGVjKTsKIH0KIAotc3RhdGljIHZvaWQgYWxjODg4X2Z1aml0c3VfeGEzNTMwX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzg4OV9hdXRvbXV0ZV9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKworCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTU7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzFdID0gMHgxNjsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1syXSA9IDB4MTc7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbM10gPSAweDE5OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzRdID0gMHgxYTsKK30KKworc3RhdGljIHZvaWQgYWxjODg5X2ludGVsX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlhbGM4ODlfY29lZl9pbml0KGNvZGVjKTsKKwlhbGNfYXV0b211dGVfYW1wKGNvZGVjKTsKK30KKworc3RhdGljIHZvaWQgYWxjODg4X2Z1aml0c3VfeGEzNTMwX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCkBAIC0xNDQ0LDcgKzE1NjUsNiBAQAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1sxXSA9IDB4MWI7IC8qIGhwICovCiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OyAvKiBzcGVha2VyICovCiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDE1OyAvKiBiYXNzICovCi0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CiB9CiAKIC8qCkBAIC0xNjQzLDE2ICsxNzYzLDE1IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHZvaWQgYWxjODg4X2FjZXJfYXNwaXJlXzQ5MzBnX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzg4OF9hY2VyX2FzcGlyZV80OTMwZ19zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTU7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OwotCWFsY19hdXRvbXV0ZV9hbXAoY29kZWMpOwogfQogCi1zdGF0aWMgdm9pZCBhbGM4ODhfYWNlcl9hc3BpcmVfNjUzMGdfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODg4X2FjZXJfYXNwaXJlXzY1MzBnX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCkBAIC0xNjYwLDEwICsxNzc5LDkgQEAKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDE2OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzJdID0gMHgxNzsKLQlhbGNfYXV0b211dGVfYW1wKGNvZGVjKTsKIH0KIAotc3RhdGljIHZvaWQgYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzg4OV9hY2VyX2FzcGlyZV84OTMwZ19zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIApAQCAtMTY3MSw3ICsxNzg5LDYgQEAKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDE2OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzJdID0gMHgxYjsKLQlhbGNfYXV0b211dGVfYW1wKGNvZGVjKTsKIH0KIAogLyoKQEAgLTI2NTEsMTMgKzI3NjgsMTcgQEAKIAlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGIsIEhEQV9JTlBVVCwgMSwgSERBX0FNUF9NVVRFLCBiaXRzKTsKIH0KIAotc3RhdGljIHZvaWQgYWxjODgwX3VuaXdpbGxfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODgwX3VuaXdpbGxfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKIAlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE0OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTY7Cit9CisKK3N0YXRpYyB2b2lkIGFsYzg4MF91bml3aWxsX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKIAlhbGNfYXV0b211dGVfYW1wKGNvZGVjKTsKIAlhbGM4ODBfdW5pd2lsbF9taWNfYXV0b211dGUoY29kZWMpOwogfQpAQCAtMjY3OCwxMyArMjc5OSwxMiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYWxjODgwX3VuaXdpbGxfcDUzX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzg4MF91bml3aWxsX3A1M19zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE1OwotCWFsY19hdXRvbXV0ZV9hbXAoY29kZWMpOwogfQogCiBzdGF0aWMgdm9pZCBhbGM4ODBfdW5pd2lsbF9wNTNfZGN2b2xfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0yOTQ3LDEzICszMDY3LDEyIEBACiB9OwogCiAvKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCi1zdGF0aWMgdm9pZCBhbGM4ODBfbGdfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODgwX2xnX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxYjsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTc7Ci0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CiB9CiAKIC8qCkBAIC0zMDMyLDEzICszMTUxLDEyIEBACiB9OwogCiAvKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCi1zdGF0aWMgdm9pZCBhbGM4ODBfbGdfbHdfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODgwX2xnX2x3X3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxYjsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7Ci0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfbWVkaW9uX3JpbV9taXhlcltdID0gewpAQCAtMzEwNCwxMyArMzIyMiwxMiBAQAogCQlhbGM4ODBfbWVkaW9uX3JpbV9hdXRvbXV0ZShjb2RlYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzg4MF9tZWRpb25fcmltX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzg4MF9tZWRpb25fcmltX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MWI7Ci0JYWxjODgwX21lZGlvbl9yaW1fYXV0b211dGUoY29kZWMpOwogfQogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQpAQCAtMzk3Nyw3ICs0MDk0LDggQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4MF8yX2phY2tfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgwX2YxNzM0X2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGM4ODBfdW5pd2lsbF9wNTNfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODBfdW5pd2lsbF9wNTNfaW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGM4ODBfdW5pd2lsbF9wNTNfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4MF9BU1VTXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgwX2FzdXNfbWl4ZXIgfSwKQEAgLTQwNTQsNiArNDE3Miw3IEBACiAJCS5uZWVkX2RhY19maXggPSAxLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4MF9jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjODgwX3VuaXdpbGxfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzg4MF91bml3aWxsX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjODgwX3VuaXdpbGxfaW5pdF9ob29rLAogCX0sCiAJW0FMQzg4MF9VTklXSUxMX1A1M10gPSB7CkBAIC00MDY2LDcgKzQxODUsOCBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgwX3RocmVlc3RhY2tfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgwX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGM4ODBfdW5pd2lsbF9wNTNfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODBfdW5pd2lsbF9wNTNfaW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGM4ODBfdW5pd2lsbF9wNTNfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4MF9GVUpJVFNVXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgwX2Z1aml0c3VfbWl4ZXIgfSwKQEAgLTQwODAsNyArNDIwMCw4IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODBfMl9qYWNrX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4MF9jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjODgwX3VuaXdpbGxfcDUzX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjODgwX3VuaXdpbGxfcDUzX2luaXRfaG9vaywKKwkJLnNldHVwID0gYWxjODgwX3VuaXdpbGxfcDUzX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKIAl9LAogCVtBTEM4ODBfQ0xFVk9dID0gewogCQkubWl4ZXJzID0geyBhbGM4ODBfdGhyZWVfc3RhY2tfbWl4ZXIgfSwKQEAgLTQxMDYsNyArNDIyNyw4IEBACiAJCS5uZWVkX2RhY19maXggPSAxLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4MF9sZ19jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzg4MF9sZ19pbml0X2hvb2ssCisJCS5zZXR1cCA9IGFsYzg4MF9sZ19zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCQkubG9vcGJhY2tzID0gYWxjODgwX2xnX2xvb3BiYWNrcywKICNlbmRpZgpAQCAtNDEyMiw3ICs0MjQ0LDggQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4MF9sZ19sd19tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODBfbGdfbHdfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODBfbGdfbHdfaW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGM4ODBfbGdfbHdfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4MF9NRURJT05fUklNXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgwX21lZGlvbl9yaW1fbWl4ZXIgfSwKQEAgLTQxMzYsNyArNDI1OSw4IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODBfMl9qYWNrX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4MF9tZWRpb25fcmltX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGM4ODBfbWVkaW9uX3JpbV91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzg4MF9tZWRpb25fcmltX2luaXRfaG9vaywKKwkJLnNldHVwID0gYWxjODgwX21lZGlvbl9yaW1fc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGM4ODBfbWVkaW9uX3JpbV9hdXRvbXV0ZSwKIAl9LAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlbQUxDODgwX1RFU1RdID0gewpAQCAtNDE4OSw4ICs0MzEzLDYgQEAKICNkZWZpbmUgYWxjODgwX2ZpeGVkX3Bpbl9pZHgobmlkKQkoKG5pZCkgLSAweDE0KQogI2RlZmluZSBhbGM4ODBfaXNfbXVsdGlfcGluKG5pZCkJKChuaWQpID49IDB4MTgpCiAjZGVmaW5lIGFsYzg4MF9tdWx0aV9waW5faWR4KG5pZCkJKChuaWQpIC0gMHgxOCkKLSNkZWZpbmUgYWxjODgwX2lzX2lucHV0X3BpbihuaWQpCSgobmlkKSA+PSAweDE4KQotI2RlZmluZSBhbGM4ODBfaW5wdXRfcGluX2lkeChuaWQpCSgobmlkKSAtIDB4MTgpCiAjZGVmaW5lIGFsYzg4MF9pZHhfdG9fZGFjKG5pZCkJCSgobmlkKSArIDB4MDIpCiAjZGVmaW5lIGFsYzg4MF9kYWNfdG9faWR4KG5pZCkJCSgobmlkKSAtIDB4MDIpCiAjZGVmaW5lIGFsYzg4MF9pZHhfdG9fbWl4ZXIobmlkKQkoKG5pZCkgKyAweDBjKQpAQCAtNDI3OCwxMyArNDQwMCwxOSBAQAogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfSBlbHNlIHsKLQkJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIGNobmFtZVtpXSk7CisJCQljb25zdCBjaGFyICpwZng7CisJCQlpZiAoY2ZnLT5saW5lX291dHMgPT0gMSAmJgorCQkJICAgIGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9TUEVBS0VSX09VVCkKKwkJCQlwZnggPSAiU3BlYWtlciI7CisJCQllbHNlCisJCQkJcGZ4ID0gY2huYW1lW2ldOworCQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgcGZ4KTsKIAkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKIAkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwKIAkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgY2huYW1lW2ldKTsKKwkJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7CiAJCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX0JJTkRfTVVURSwgbmFtZSwKIAkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMiwKIAkJCQkJCQkgICAgICBIREFfSU5QVVQpKTsKQEAgLTQzNTgsMzEgKzQ0ODYsNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogY3JlYXRlIHBsYXliYWNrL2NhcHR1cmUgY29udHJvbHMgZm9yIGlucHV0IHBpbnMgKi8KLXN0YXRpYyBpbnQgYWxjODgwX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKLQkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKK3N0YXRpYyBpbnQgYWxjX2lzX2lucHV0X3BpbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKIHsKKwl1bnNpZ25lZCBpbnQgcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKKwlyZXR1cm4gKHBpbmNhcCAmIEFDX1BJTkNBUF9JTikgIT0gMDsKK30KKworLyogY3JlYXRlIHBsYXliYWNrL2NhcHR1cmUgY29udHJvbHMgZm9yIGlucHV0IHBpbnMgKi8KK3N0YXRpYyBpbnQgYWxjX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnLAorCQkJCSAgICAgIGhkYV9uaWRfdCBtaXhlciwKKwkJCQkgICAgICBoZGFfbmlkX3QgY2FwMSwgaGRhX25pZF90IGNhcDIpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCWludCBpLCBlcnIsIGlkeDsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKLQkJaWYgKGFsYzg4MF9pc19pbnB1dF9waW4oY2ZnLT5pbnB1dF9waW5zW2ldKSkgewotCQkJaWR4ID0gYWxjODgwX2lucHV0X3Bpbl9pZHgoY2ZnLT5pbnB1dF9waW5zW2ldKTsKLQkJCWVyciA9IG5ld19hbmFsb2dfaW5wdXQoc3BlYywgY2ZnLT5pbnB1dF9waW5zW2ldLAotCQkJCQkgICAgICAgYXV0b19waW5fY2ZnX2xhYmVsc1tpXSwKLQkJCQkJICAgICAgIGlkeCwgMHgwYik7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOworCQloZGFfbmlkX3QgcGluOworCisJCXBpbiA9IGNmZy0+aW5wdXRfcGluc1tpXTsKKwkJaWYgKCFhbGNfaXNfaW5wdXRfcGluKGNvZGVjLCBwaW4pKQorCQkJY29udGludWU7CisKKwkJaWYgKG1peGVyKSB7CisJCQlpZHggPSBnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywgbWl4ZXIsIHBpbik7CisJCQlpZiAoaWR4ID49IDApIHsKKwkJCQllcnIgPSBuZXdfYW5hbG9nX2lucHV0KHNwZWMsIHBpbiwKKwkJCQkJCSAgICAgICBhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldLAorCQkJCQkJICAgICAgIGlkeCwgbWl4ZXIpOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisKKwkJaWYgKCFjYXAxKQorCQkJY29udGludWU7CisJCWlkeCA9IGdldF9jb25uZWN0aW9uX2luZGV4KGNvZGVjLCBjYXAxLCBwaW4pOworCQlpZiAoaWR4IDwgMCAmJiBjYXAyKQorCQkJaWR4ID0gZ2V0X2Nvbm5lY3Rpb25faW5kZXgoY29kZWMsIGNhcDIsIHBpbik7CisJCWlmIChpZHggPj0gMCkgewogCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9CiAJCQkJYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKLQkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPQotCQkJCWFsYzg4MF9pbnB1dF9waW5faWR4KGNmZy0+aW5wdXRfcGluc1tpXSk7CisJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0gaWR4OwogCQkJaW11eC0+bnVtX2l0ZW1zKys7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYWxjODgwX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCit7CisJcmV0dXJuIGFsY19hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKGNvZGVjLCBjZmcsIDB4MGIsIDB4MDgsIDB4MDkpOworfQorCiBzdGF0aWMgdm9pZCBhbGNfc2V0X3Bpbl9vdXRwdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHBpbl90eXBlKQogewpAQCAtNDQ0OCw3ICs0NjA2LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKLQkJaWYgKGFsYzg4MF9pc19pbnB1dF9waW4obmlkKSkgeworCQlpZiAoYWxjX2lzX2lucHV0X3Bpbihjb2RlYywgbmlkKSkgewogCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CiAJCQlpZiAobmlkICE9IEFMQzg4MF9QSU5fQ0RfTklEICYmCiAJCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCkBAIC00NDkxLDcgKzQ2NDksNyBAQAogCQkJCQkgICAiSGVhZHBob25lIik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gYWxjODgwX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwllcnIgPSBhbGM4ODBfYXV0b19jcmVhdGVfaW5wdXRfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC00NTA1LDEyICs0NjYzLDYgQEAKIAkJCQkJICAgICAgJmRpZ19uaWQsIDEpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoZGlnX25pZCA+IDB4N2YpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiYWxjODgwX2F1dG86IGludmFsaWQgZGlnX25pZCAiCi0JCQkJImNvbm5lY3Rpb24gMHgleCBmb3IgTklEIDB4JXhcbiIsIGRpZ19uaWQsCi0JCQkJc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbnNbaV0pOwotCQkJY29udGludWU7Ci0JCX0KIAkJaWYgKCFpKQogCQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBkaWdfbmlkOwogCQllbHNlIHsKQEAgLTQ1NDcsOCArNDY5OSw0MiBAQAogCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfY2FwdHVyZV9taXhlcihzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMpCisvKiBjaGVjayB0aGUgQURDL01VWCBjb250YWlucyBhbGwgaW5wdXQgcGluczsgc29tZSBBREMvTVVYIGNvbnRhaW5zIG9ubHkKKyAqIG9uZSBvZiB0d28gZGlnaXRhbCBtaWMgcGlucywgZS5nLiBvbiBBTEMyNzIKKyAqLworc3RhdGljIHZvaWQgZml4dXBfYXV0b21pY19hZGMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBpKyspIHsKKwkJaGRhX25pZF90IGNhcCA9IHNwZWMtPmNhcHNyY19uaWRzID8KKwkJCXNwZWMtPmNhcHNyY19uaWRzW2ldIDogc3BlYy0+YWRjX25pZHNbaV07CisJCWludCBpaWR4LCBlaWR4OworCisJCWlpZHggPSBnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywgY2FwLCBzcGVjLT5pbnRfbWljLnBpbik7CisJCWlmIChpaWR4IDwgMCkKKwkJCWNvbnRpbnVlOworCQllaWR4ID0gZ2V0X2Nvbm5lY3Rpb25faW5kZXgoY29kZWMsIGNhcCwgc3BlYy0+ZXh0X21pYy5waW4pOworCQlpZiAoZWlkeCA8IDApCisJCQljb250aW51ZTsKKwkJc3BlYy0+aW50X21pYy5tdXhfaWR4ID0gaWlkeDsKKwkJc3BlYy0+ZXh0X21pYy5tdXhfaWR4ID0gZWlkeDsKKwkJaWYgKHNwZWMtPmNhcHNyY19uaWRzKQorCQkJc3BlYy0+Y2Fwc3JjX25pZHMgKz0gaTsKKwkJc3BlYy0+YWRjX25pZHMgKz0gaTsKKwkJc3BlYy0+bnVtX2FkY19uaWRzID0gMTsKKwkJcmV0dXJuOworCX0KKwlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiAlczogIgorCQkgICAiTm8gQURDL01VWCBjb250YWluaW5nIGJvdGggMHgleCBhbmQgMHgleCBwaW5zXG4iLAorCQkgICBjb2RlYy0+Y2hpcF9uYW1lLCBzcGVjLT5pbnRfbWljLnBpbiwgc3BlYy0+ZXh0X21pYy5waW4pOworCXNwZWMtPmF1dG9fbWljID0gMDsgLyogZGlzYWJsZSBhdXRvLW1pYyB0byBiZSBzdXJlICovCit9CisKK3N0YXRpYyB2b2lkIHNldF9jYXB0dXJlX21peGVyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY2Fwc1syXVszXSA9IHsKIAkJeyBhbGNfY2FwdHVyZV9taXhlcl9ub3NyYzEsCiAJCSAgYWxjX2NhcHR1cmVfbWl4ZXJfbm9zcmMyLApAQCAtNDU1OSw3ICs0NzQ1LDEwIEBACiAJfTsKIAlpZiAoc3BlYy0+bnVtX2FkY19uaWRzID4gMCAmJiBzcGVjLT5udW1fYWRjX25pZHMgPD0gMykgewogCQlpbnQgbXV4OwotCQlpZiAoc3BlYy0+aW5wdXRfbXV4ICYmIHNwZWMtPmlucHV0X211eC0+bnVtX2l0ZW1zID4gMSkKKwkJaWYgKHNwZWMtPmF1dG9fbWljKSB7CisJCQltdXggPSAwOworCQkJZml4dXBfYXV0b21pY19hZGMoY29kZWMpOworCQl9IGVsc2UgaWYgKHNwZWMtPmlucHV0X211eCAmJiBzcGVjLT5pbnB1dF9tdXgtPm51bV9pdGVtcyA+IDEpCiAJCQltdXggPSAxOwogCQllbHNlCiAJCQltdXggPSAwOwpAQCAtNDU5MCw4ICs0Nzc5LDggQEAKIAkJCQkJCSAgYWxjODgwX21vZGVscywKIAkJCQkJCSAgYWxjODgwX2NmZ190YmwpOwogCWlmIChib2FyZF9jb25maWcgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgJXMsICIKLQkJICAgICAgICJ0cnlpbmcgYXV0by1wcm9iZSBmcm9tIEJJT1MuLi5cbiIsIGNvZGVjLT5jaGlwX25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6ICVzOiBCSU9TIGF1dG8tcHJvYmluZy5cbiIsCisJCSAgICAgICBjb2RlYy0+Y2hpcF9uYW1lKTsKIAkJYm9hcmRfY29uZmlnID0gQUxDODgwX0FVVE87CiAJfQogCkBAIC00NjE2LDcgKzQ4MDUsNyBAQAogCX0KIAogCWlmIChib2FyZF9jb25maWcgIT0gQUxDODgwX0FVVE8pCi0JCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODgwX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CisJCXNldHVwX3ByZXNldChjb2RlYywgJmFsYzg4MF9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCiAJc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGM4ODBfcGNtX2FuYWxvZ19wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjODgwX3BjbV9hbmFsb2dfY2FwdHVyZTsKQEAgLTQ2MjksNyArNDgxOCw3IEBACiAJCS8qIGNoZWNrIHdoZXRoZXIgTklEIDB4MDcgaXMgdmFsaWQgKi8KIAkJdW5zaWduZWQgaW50IHdjYXAgPSBnZXRfd2NhcHMoY29kZWMsIGFsYzg4MF9hZGNfbmlkc1swXSk7CiAJCS8qIGdldCB0eXBlICovCi0JCXdjYXAgPSAod2NhcCAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOworCQl3Y2FwID0gZ2V0X3djYXBzX3R5cGUod2NhcCk7CiAJCWlmICh3Y2FwICE9IEFDX1dJRF9BVURfSU4pIHsKIAkJCXNwZWMtPmFkY19uaWRzID0gYWxjODgwX2FkY19uaWRzX2FsdDsKIAkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgwX2FkY19uaWRzX2FsdCk7CkBAIC00NjM4LDcgKzQ4MjcsNyBAQAogCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODBfYWRjX25pZHMpOwogCQl9CiAJfQotCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9jYXB0dXJlX21peGVyKGNvZGVjKTsKIAlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwYzsKQEAgLTU4MzAsNyArNjAxOSwxNCBAQAogCiAJbmlkID0gY2ZnLT5saW5lX291dF9waW5zWzBdOwogCWlmIChuaWQpIHsKLQkJZXJyID0gYWxjMjYwX2FkZF9wbGF5YmFja19jb250cm9scyhzcGVjLCBuaWQsICJGcm9udCIsICZ2b2xzKTsKKwkJY29uc3QgY2hhciAqcGZ4OworCQlpZiAoIWNmZy0+c3BlYWtlcl9waW5zWzBdICYmICFjZmctPmhwX3BpbnNbMF0pCisJCQlwZnggPSAiTWFzdGVyIjsKKwkJZWxzZSBpZiAoY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKQorCQkJcGZ4ID0gIlNwZWFrZXIiOworCQllbHNlCisJCQlwZnggPSAiRnJvbnQiOworCQllcnIgPSBhbGMyNjBfYWRkX3BsYXliYWNrX2NvbnRyb2xzKHNwZWMsIG5pZCwgcGZ4LCAmdm9scyk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC01ODUzLDM5ICs2MDQ5LDEwIEBACiB9CiAKIC8qIGNyZWF0ZSBwbGF5YmFjay9jYXB0dXJlIGNvbnRyb2xzIGZvciBpbnB1dCBwaW5zICovCi1zdGF0aWMgaW50IGFsYzI2MF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCitzdGF0aWMgaW50IGFsYzI2MF9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKLQlpbnQgaSwgZXJyLCBpZHg7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7Ci0JCWlmIChjZmctPmlucHV0X3BpbnNbaV0gPj0gMHgxMikgewotCQkJaWR4ID0gY2ZnLT5pbnB1dF9waW5zW2ldIC0gMHgxMjsKLQkJCWVyciA9IG5ld19hbmFsb2dfaW5wdXQoc3BlYywgY2ZnLT5pbnB1dF9waW5zW2ldLAotCQkJCQkgICAgICAgYXV0b19waW5fY2ZnX2xhYmVsc1tpXSwgaWR4LAotCQkJCQkgICAgICAgMHgwNyk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOwotCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9Ci0JCQkJYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKLQkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSBpZHg7Ci0JCQlpbXV4LT5udW1faXRlbXMrKzsKLQkJfQotCQlpZiAoY2ZnLT5pbnB1dF9waW5zW2ldID49IDB4MGYgJiYgY2ZnLT5pbnB1dF9waW5zW2ldIDw9IDB4MTApewotCQkJaWR4ID0gY2ZnLT5pbnB1dF9waW5zW2ldIC0gMHgwOTsKLQkJCWVyciA9IG5ld19hbmFsb2dfaW5wdXQoc3BlYywgY2ZnLT5pbnB1dF9waW5zW2ldLAotCQkJCQkgICAgICAgYXV0b19waW5fY2ZnX2xhYmVsc1tpXSwgaWR4LAotCQkJCQkgICAgICAgMHgwNyk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOwotCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9Ci0JCQkJYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKLQkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSBpZHg7Ci0JCQlpbXV4LT5udW1faXRlbXMrKzsKLQkJfQotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gYWxjX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsIGNmZywgMHgwNywgMHgwNCwgMHgwNSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzI2MF9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKQEAgLTU5OTksNyArNjE2Niw3IEBACiAJCXJldHVybiBlcnI7CiAJaWYgKCFzcGVjLT5rY3Rscy5saXN0KQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBCSU9TIHBpbiBjb25maWcgKi8KLQllcnIgPSBhbGMyNjBfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOworCWVyciA9IGFsYzI2MF9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTYyMzQsOCArNjQwMSw3IEBACiAJCQkJCQkgIGFsYzI2MF9tb2RlbHMsCiAJCQkJCQkgIGFsYzI2MF9jZmdfdGJsKTsKIAlpZiAoYm9hcmRfY29uZmlnIDwgMCkgewotCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciAlcywgIgotCQkJICAgInRyeWluZyBhdXRvLXByb2JlIGZyb20gQklPUy4uLlxuIiwKKwkJc25kX3ByaW50ZChLRVJOX0lORk8gImhkYV9jb2RlYzogJXM6IEJJT1MgYXV0by1wcm9iaW5nLlxuIiwKIAkJCSAgIGNvZGVjLT5jaGlwX25hbWUpOwogCQlib2FyZF9jb25maWcgPSBBTEMyNjBfQVVUTzsKIAl9CkBAIC02MjYxLDcgKzY0MjcsNyBAQAogCX0KIAogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjYwX0FVVE8pCi0JCXNldHVwX3ByZXNldChzcGVjLCAmYWxjMjYwX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CisJCXNldHVwX3ByZXNldChjb2RlYywgJmFsYzI2MF9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCiAJc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGMyNjBfcGNtX2FuYWxvZ19wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjMjYwX3BjbV9hbmFsb2dfY2FwdHVyZTsKQEAgLTYyNzIsNyArNjQzOCw3IEBACiAJaWYgKCFzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKIAkJLyogY2hlY2sgd2hldGhlciBOSUQgMHgwNCBpcyB2YWxpZCAqLwogCQl1bnNpZ25lZCBpbnQgd2NhcCA9IGdldF93Y2Fwcyhjb2RlYywgMHgwNCk7Ci0JCXdjYXAgPSAod2NhcCAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOworCQl3Y2FwID0gZ2V0X3djYXBzX3R5cGUod2NhcCk7CiAJCS8qIGdldCB0eXBlICovCiAJCWlmICh3Y2FwICE9IEFDX1dJRF9BVURfSU4gfHwgc3BlYy0+aW5wdXRfbXV4LT5udW1faXRlbXMgPT0gMSkgewogCQkJc3BlYy0+YWRjX25pZHMgPSBhbGMyNjBfYWRjX25pZHNfYWx0OwpAQCAtNjI4Miw3ICs2NDQ4LDcgQEAKIAkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2FkY19uaWRzKTsKIAkJfQogCX0KLQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfY2FwdHVyZV9taXhlcihjb2RlYyk7CiAJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDg7CkBAIC02MzAxLDcgKzY0NjcsNyBAQAogCiAKIC8qCi0gKiBBTEM4ODIgc3VwcG9ydAorICogQUxDODgyLzg4My84ODUvODg4Lzg4OSBzdXBwb3J0CiAgKgogICogQUxDODgyIGlzIGFsbW9zdCBpZGVudGljYWwgd2l0aCBBTEM4ODAgYnV0IGhhcyBjbGVhbmVyIGFuZCBtb3JlIGZsZXhpYmxlCiAgKiBjb25maWd1cmF0aW9uLiAgRWFjaCBwaW4gd2lkZ2V0IGNhbiBjaG9vc2UgYW55IGlucHV0IERBQ3MgYW5kIGEgbWl4ZXIuCkBAIC02MzEzLDIyICs2NDc5LDM1IEBACiAgKi8KICNkZWZpbmUgQUxDODgyX0RJR09VVF9OSUQJMHgwNgogI2RlZmluZSBBTEM4ODJfRElHSU5fTklECTB4MGEKKyNkZWZpbmUgQUxDODgzX0RJR09VVF9OSUQJQUxDODgyX0RJR09VVF9OSUQKKyNkZWZpbmUgQUxDODgzX0RJR0lOX05JRAlBTEM4ODJfRElHSU5fTklECisjZGVmaW5lIEFMQzEyMDBfRElHT1VUX05JRAkweDEwCisKIAogc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4Ml9jaF9tb2Rlc1sxXSA9IHsKIAl7IDgsIE5VTEwgfQogfTsKIAorLyogREFDcyAqLwogc3RhdGljIGhkYV9uaWRfdCBhbGM4ODJfZGFjX25pZHNbNF0gPSB7CiAJLyogZnJvbnQsIHJlYXIsIGNsZmUsIHJlYXJfc3VyciAqLwogCTB4MDIsIDB4MDMsIDB4MDQsIDB4MDUKIH07CisjZGVmaW5lIGFsYzg4M19kYWNfbmlkcwkJYWxjODgyX2RhY19uaWRzCiAKLS8qIGlkZW50aWNhbCB3aXRoIEFMQzg4MCAqLworLyogQURDcyAqLwogI2RlZmluZSBhbGM4ODJfYWRjX25pZHMJCWFsYzg4MF9hZGNfbmlkcwogI2RlZmluZSBhbGM4ODJfYWRjX25pZHNfYWx0CWFsYzg4MF9hZGNfbmlkc19hbHQKKyNkZWZpbmUgYWxjODgzX2FkY19uaWRzCQlhbGM4ODJfYWRjX25pZHNfYWx0CitzdGF0aWMgaGRhX25pZF90IGFsYzg4M19hZGNfbmlkc19hbHRbMV0gPSB7IDB4MDggfTsKK3N0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2FkY19uaWRzX3JldlsyXSA9IHsgMHgwOSwgMHgwOCB9OworI2RlZmluZSBhbGM4ODlfYWRjX25pZHMJCWFsYzg4MF9hZGNfbmlkcwogCiBzdGF0aWMgaGRhX25pZF90IGFsYzg4Ml9jYXBzcmNfbmlkc1szXSA9IHsgMHgyNCwgMHgyMywgMHgyMiB9Owogc3RhdGljIGhkYV9uaWRfdCBhbGM4ODJfY2Fwc3JjX25pZHNfYWx0WzJdID0geyAweDIzLCAweDIyIH07CisjZGVmaW5lIGFsYzg4M19jYXBzcmNfbmlkcwlhbGM4ODJfY2Fwc3JjX25pZHNfYWx0CitzdGF0aWMgaGRhX25pZF90IGFsYzg4M19jYXBzcmNfbmlkc19yZXZbMl0gPSB7IDB4MjIsIDB4MjMgfTsKKyNkZWZpbmUgYWxjODg5X2NhcHNyY19uaWRzCWFsYzg4Ml9jYXBzcmNfbmlkcwogCiAvKiBpbnB1dCBNVVggKi8KIC8qIEZJWE1FOiBzaG91bGQgYmUgYSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCkBAIC02MzQzLDYgKzY1MjIsMTcgQEAKIAl9LAogfTsKIAorI2RlZmluZSBhbGM4ODNfY2FwdHVyZV9zb3VyY2UJYWxjODgyX2NhcHR1cmVfc291cmNlCisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODlfY2FwdHVyZV9zb3VyY2UgPSB7CisJLm51bV9pdGVtcyA9IDMsCisJLml0ZW1zID0geworCQl7ICJGcm9udCBNaWMiLCAweDAgfSwKKwkJeyAiTWljIiwgMHgzIH0sCisJCXsgIkxpbmUiLCAweDIgfSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IG1iNV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMywKIAkuaXRlbXMgPSB7CkBAIC02MzUyLDYgKzY1NDIsNzcgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4M18zc3RhY2tfNmNoX2ludGVsID0geworCS5udW1faXRlbXMgPSA0LAorCS5pdGVtcyA9IHsKKwkJeyAiTWljIiwgMHgxIH0sCisJCXsgIkZyb250IE1pYyIsIDB4MCB9LAorCQl7ICJMaW5lIiwgMHgyIH0sCisJCXsgIkNEIiwgMHg0IH0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODNfbGVub3ZvXzEwMWVfY2FwdHVyZV9zb3VyY2UgPSB7CisJLm51bV9pdGVtcyA9IDIsCisJLml0ZW1zID0geworCQl7ICJNaWMiLCAweDEgfSwKKwkJeyAiTGluZSIsIDB4MiB9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgzX2xlbm92b19uYjA3NjNfY2FwdHVyZV9zb3VyY2UgPSB7CisJLm51bV9pdGVtcyA9IDQsCisJLml0ZW1zID0geworCQl7ICJNaWMiLCAweDAgfSwKKwkJeyAiaU1pYyIsIDB4MSB9LAorCQl7ICJMaW5lIiwgMHgyIH0sCisJCXsgIkNEIiwgMHg0IH0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODNfZnVqaXRzdV9waTI1MTVfY2FwdHVyZV9zb3VyY2UgPSB7CisJLm51bV9pdGVtcyA9IDIsCisJLml0ZW1zID0geworCQl7ICJNaWMiLCAweDAgfSwKKwkJeyAiSW50IE1pYyIsIDB4MSB9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgzX2xlbm92b19za3lfY2FwdHVyZV9zb3VyY2UgPSB7CisJLm51bV9pdGVtcyA9IDMsCisJLml0ZW1zID0geworCQl7ICJNaWMiLCAweDAgfSwKKwkJeyAiRnJvbnQgTWljIiwgMHgxIH0sCisJCXsgIkxpbmUiLCAweDQgfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4M19hc3VzX2VlZTE2MDFfY2FwdHVyZV9zb3VyY2UgPSB7CisJLm51bV9pdGVtcyA9IDIsCisJLml0ZW1zID0geworCQl7ICJNaWMiLCAweDAgfSwKKwkJeyAiTGluZSIsIDB4MiB9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODg5QV9tYjMxX2NhcHR1cmVfc291cmNlID0geworCS5udW1faXRlbXMgPSAyLAorCS5pdGVtcyA9IHsKKwkJeyAiTWljIiwgMHgwIH0sCisJCS8qIEZyb250IE1pYyAoMHgwMSkgdW51c2VkICovCisJCXsgIkxpbmUiLCAweDIgfSwKKwkJLyogTGluZSAyICgweDAzKSB1bnVzZWQgKi8KKwkJLyogQ0QgKDB4MDQpIHVuc3VzZWQ/ICovCisJfSwKK307CisKKy8qCisgKiAyY2ggbW9kZQorICovCitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgzXzNTVF8yY2hfbW9kZXNbMV0gPSB7CisJeyAyLCBOVUxMIH0KK307CisKIC8qCiAgKiAyY2ggbW9kZQogICovCkBAIC02MzY0LDYgKzY2MjUsMTggQEAKIH07CiAKIC8qCisgKiA0Y2ggbW9kZQorICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml8zU1RfY2g0X2luaXRbXSA9IHsKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMSB9LAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qCiAgKiA2Y2ggbW9kZQogICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml8zU1RfY2g2X2luaXRbXSA9IHsKQEAgLTYzNzYsMTEgKzY2NDksNjAgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgyXzNTVF82Y2hfbW9kZXNbMl0gPSB7CitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgyXzNTVF82Y2hfbW9kZXNbM10gPSB7CiAJeyAyLCBhbGM4ODJfM1NUX2NoMl9pbml0IH0sCisJeyA0LCBhbGM4ODJfM1NUX2NoNF9pbml0IH0sCiAJeyA2LCBhbGM4ODJfM1NUX2NoNl9pbml0IH0sCiB9OwogCisjZGVmaW5lIGFsYzg4M18zU1RfNmNoX21vZGVzCWFsYzg4Ml8zU1RfNmNoX21vZGVzCisKKy8qCisgKiAyY2ggbW9kZQorICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M18zU1RfY2gyX2NsZXZvX2luaXRbXSA9IHsKKwl7IDB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qCisgKiA0Y2ggbW9kZQorICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M18zU1RfY2g0X2NsZXZvX2luaXRbXSA9IHsKKwl7IDB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyoKKyAqIDZjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzXzNTVF9jaDZfY2xldm9faW5pdFtdID0geworCXsgMHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMiB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDEgfSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgzXzNTVF82Y2hfY2xldm9fbW9kZXNbM10gPSB7CisJeyAyLCBhbGM4ODNfM1NUX2NoMl9jbGV2b19pbml0IH0sCisJeyA0LCBhbGM4ODNfM1NUX2NoNF9jbGV2b19pbml0IH0sCisJeyA2LCBhbGM4ODNfM1NUX2NoNl9jbGV2b19pbml0IH0sCit9OworCisKIC8qCiAgKiA2Y2ggbW9kZQogICovCkBAIC02NDY4LDYgKzY3OTAsMTg5IEBACiAJeyA2LCBhbGM4ODVfbWI1X2NoNl9pbml0IH0sCiB9OwogCisKKy8qCisgKiAyY2ggbW9kZQorICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M180U1RfY2gyX2luaXRbXSA9IHsKKwl7IDB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyoKKyAqIDRjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzXzRTVF9jaDRfaW5pdFtdID0geworCXsgMHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyoKKyAqIDZjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzXzRTVF9jaDZfaW5pdFtdID0geworCXsgMHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDIgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyoKKyAqIDhjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzXzRTVF9jaDhfaW5pdFtdID0geworCXsgMHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDMgfSwKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMSB9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODNfNFNUXzhjaF9tb2Rlc1s0XSA9IHsKKwl7IDIsIGFsYzg4M180U1RfY2gyX2luaXQgfSwKKwl7IDQsIGFsYzg4M180U1RfY2g0X2luaXQgfSwKKwl7IDYsIGFsYzg4M180U1RfY2g2X2luaXQgfSwKKwl7IDgsIGFsYzg4M180U1RfY2g4X2luaXQgfSwKK307CisKKworLyoKKyAqIDJjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzXzNTVF9jaDJfaW50ZWxfaW5pdFtdID0geworCXsgMHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCisJeyAweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKKwl7IH0gLyogZW5kICovCit9OworCisvKgorICogNGNoIG1vZGUKKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfM1NUX2NoNF9pbnRlbF9pbml0W10gPSB7CisJeyAweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKKwl7IDB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDEgfSwKKwl7IH0gLyogZW5kICovCit9OworCisvKgorICogNmNoIG1vZGUKKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfM1NUX2NoNl9pbnRlbF9pbml0W10gPSB7CisJeyAweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCisJeyAweDE5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMiB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDEgfSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgzXzNTVF82Y2hfaW50ZWxfbW9kZXNbM10gPSB7CisJeyAyLCBhbGM4ODNfM1NUX2NoMl9pbnRlbF9pbml0IH0sCisJeyA0LCBhbGM4ODNfM1NUX2NoNF9pbnRlbF9pbml0IH0sCisJeyA2LCBhbGM4ODNfM1NUX2NoNl9pbnRlbF9pbml0IH0sCit9OworCisvKgorICogMmNoIG1vZGUKKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODlfY2gyX2ludGVsX2luaXRbXSA9IHsKKwl7IDB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwIH0sCisJeyAweDE5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMCB9LAorCXsgMHgxNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDAgfSwKKwl7IDB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTiB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyoKKyAqIDZjaCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg5X2NoNl9pbnRlbF9pbml0W10gPSB7CisJeyAweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMCB9LAorCXsgMHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDEgfSwKKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyIH0sCisJeyAweDE3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMyB9LAorCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qCisgKiA4Y2ggbW9kZQorICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OV9jaDhfaW50ZWxfaW5pdFtdID0geworCXsgMHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDAgfSwKKwl7IDB4MTksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCisJeyAweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMiB9LAorCXsgMHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDMgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAzIH0sCisJeyAweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4OV84Y2hfaW50ZWxfbW9kZXNbM10gPSB7CisJeyAyLCBhbGM4ODlfY2gyX2ludGVsX2luaXQgfSwKKwl7IDYsIGFsYzg4OV9jaDZfaW50ZWxfaW5pdCB9LAorCXsgOCwgYWxjODg5X2NoOF9pbnRlbF9pbml0IH0sCit9OworCisvKgorICogNmNoIG1vZGUKKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfc2l4c3RhY2tfY2g2X2luaXRbXSA9IHsKKwl7IDB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwMCB9LAorCXsgMHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qCisgKiA4Y2ggbW9kZQorICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19zaXhzdGFja19jaDhfaW5pdFtdID0geworCXsgMHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyAweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAorCXsgMHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4M19zaXhzdGFja19tb2Rlc1syXSA9IHsKKwl7IDYsIGFsYzg4M19zaXhzdGFja19jaDZfaW5pdCB9LAorCXsgOCwgYWxjODgzX3NpeHN0YWNrX2NoOF9pbml0IH0sCit9OworCisKIC8qIFBpbiBhc3NpZ25tZW50OiBGcm9udD0weDE0LCBSZWFyPTB4MTUsIENMRkU9MHgxNiwgU2lkZT0weDE3CiAgKiAgICAgICAgICAgICAgICAgTWljPTB4MTgsIEZyb250IE1pYz0weDE5LCBMaW5lLUluPTB4MWEsIEhQPTB4MWIKICAqLwpAQCAtNjYwNCw3ICs3MTA5LDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml9pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml9iYXNlX2luaXRfdmVyYnNbXSA9IHsKIAkvKiBGcm9udCBtaXhlcjogdW5tdXRlIGlucHV0L291dHB1dCBhbXAgbGVmdCBhbmQgcmlnaHQgKHZvbHVtZSA9IDApICovCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKQEAgLTY2MjIsNiArNzEyNywxMyBAQAogCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKIAorCS8qIG11dGUgYW5hbG9nIGlucHV0IGxvb3BiYWNrcyAqLworCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAorCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKKwogCS8qIEZyb250IFBpbjogb3V0cHV0IDAgKDB4MGMpICovCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCiAJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKQEAgLTY2NTYsMTEgKzcxNjgsNiBAQAogCiAJLyogRklYTUU6IHVzZSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCiAJLyogTWl4ZXIgZWxlbWVudHM6IDB4MTgsIDE5LCAxYSwgMWIsIDFjLCAxZCwgMTQsIDE1LCAxNiwgMTcsIDBiICovCi0JLyogSW5wdXQgbWl4ZXIxOiB1bm11dGUgTWljLCBGLU1pYywgTGluZSwgQ0QgaW5wdXRzICovCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAogCS8qIElucHV0IG1peGVyMiAqLwogCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LApAQCAtNjY3MSw5ICs3MTc4LDYgQEAKIAl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAogCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCiAJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKLQkvKiBBREMxOiBtdXRlIGFtcCBsZWZ0IGFuZCByaWdodCAqLwotCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MDcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAkvKiBBREMyOiBtdXRlIGFtcCBsZWZ0IGFuZCByaWdodCAqLwogCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MDgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKQEAgLTY2ODQsNiArNzE4OCwxOCBAQAogCXsgfQogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfYWRjMV9pbml0X3ZlcmJzW10gPSB7CisJLyogSW5wdXQgbWl4ZXIxOiB1bm11dGUgTWljLCBGLU1pYywgTGluZSwgQ0QgaW5wdXRzICovCisJezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCisJezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKKwl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAorCS8qIEFEQzE6IG11dGUgYW1wIGxlZnQgYW5kIHJpZ2h0ICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsgfQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfZWFwZF92ZXJic1tdID0gewogCS8qIGNoYW5nZSB0byBFQVBEIG1vZGUgKi8KIAl7MHgyMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMHgwN30sCkBAIC02NjkxLDYgKzcyMDcsMTEwIEBACiAJeyB9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OV9lYXBkX3ZlcmJzW10gPSB7CisJezB4MTQsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAyfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDJ9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGNfaHAxNV91bnNvbF92ZXJic1tdID0geworCXsweDE1LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9pbml0X3ZlcmJzW10gPSB7CisJLyogRnJvbnQgbWl4ZXI6IHVubXV0ZSBpbnB1dC9vdXRwdXQgYW1wIGxlZnQgYW5kIHJpZ2h0ICh2b2x1bWUgPSAwKSAqLworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwkvKiBSZWFyIG1peGVyICovCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCS8qIENMRkUgbWl4ZXIgKi8KKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJLyogU2lkZSBtaXhlciAqLworCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKworCS8qIG11dGUgYW5hbG9nIGlucHV0IGxvb3BiYWNrcyAqLworCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCisJLyogRnJvbnQgSFAgUGluOiBvdXRwdXQgMCAoMHgwYykgKi8KKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBGcm9udCBQaW46IG91dHB1dCAwICgweDBjKSAqLworCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBSZWFyIFBpbjogb3V0cHV0IDEgKDB4MGQpICovCisJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAorCS8qIENMRkUgUGluOiBvdXRwdXQgMiAoMHgwZSkgKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMn0sCisJLyogU2lkZSBQaW46IG91dHB1dCAzICgweDBmKSAqLworCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAzfSwKKwkvKiBNaWMgKHJlYXIpIHBpbjogaW5wdXQgdnJlZiBhdCA4MCUgKi8KKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwkvKiBGcm9udCBNaWMgcGluOiBpbnB1dCB2cmVmIGF0IDgwJSAqLworCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCS8qIExpbmUgSW4gcGluOiBpbnB1dCAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisKKwkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgLCAweDFhLCAweDFiICovCisJLyogSW5wdXQgbWl4ZXIxICovCisJezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMyl9LAorCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKKwkvKiBJbnB1dCBtaXhlcjIgKi8KKwl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKKwl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCS8qIElucHV0IG1peGVyMyAqLworCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCisJLyogQURDMjogbXV0ZSBhbXAgbGVmdCBhbmQgcmlnaHQgKi8KKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCS8qIEFEQzM6IG11dGUgYW1wIGxlZnQgYW5kIHJpZ2h0ICovCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKworCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODVfaW5pdF9pbnB1dF92ZXJic1tdID0geworCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCisJezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMyl9LAorCXsgfQorfTsKKworCisvKiBVbm11dGUgU2VsZWN0b3IgMjRoIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gZnJvbnQgbWljICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OV9pbml0X2lucHV0X3ZlcmJzW10gPSB7CisJezB4MjQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsgfQorfTsKKworCisjZGVmaW5lIGFsYzg4M19pbml0X3ZlcmJzCWFsYzg4Ml9iYXNlX2luaXRfdmVyYnMKKwogLyogTWFjIFBybyB0ZXN0ICovCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgyX21hY3Byb19taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC02ODk4LDIzICs3NTE4LDIxIEBACiB9OwogCiAvKiBUb2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCi1zdGF0aWMgdm9pZCBhbGM4ODVfaW1hYzI0X2F1dG9tdXRlX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzg4NV9pbWFjMjRfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKIAlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE0OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxODsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1sxXSA9IDB4MWE7Ci0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzg4NV9tYnAzX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzg4NV9tYnAzX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7Ci0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CiB9CiAKIApAQCAtNjk0MiwxMyArNzU2MCwxMiBAQAogCQkJCSAgc3BlYy0+amFja19wcmVzZW50ID8gMSA6IDMpOwogfQogCi1zdGF0aWMgdm9pZCBhbGM4ODJfdGFyZ2FfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODgyX3RhcmdhX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MWI7Ci0JYWxjODgyX3RhcmdhX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAogc3RhdGljIHZvaWQgYWxjODgyX3RhcmdhX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQpAQCAtNzAzNiwxOCArNzY1MywxNiBAQAogc3RhdGljIHZvaWQgYWxjODg1X2ltYWMyNF9pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJYWxjODg1X21hY3Byb19pbml0X2hvb2soY29kZWMpOwotCWFsYzg4NV9pbWFjMjRfYXV0b211dGVfaW5pdF9ob29rKGNvZGVjKTsKKwlhbGNfYXV0b211dGVfYW1wKGNvZGVjKTsKIH0KIAogLyoKICAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKICAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODJfYXV0b19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19hdXRvX2luaXRfdmVyYnNbXSA9IHsKIAkvKgogCSAqIFVubXV0ZSBBREMwLTIgYW5kIHNldCB0aGUgZGVmYXVsdCBpbnB1dCB0byBtaWMtaW4KIAkgKi8KLQl7MHgwNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAotCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgwOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAogCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7MHgwOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LApAQCAtNzA4OCwxMSArNzcwMyw2IEBACiAKIAkvKiBGSVhNRTogdXNlIG1hdHJpeC10eXBlIGlucHV0IHNvdXJjZSBzZWxlY3Rpb24gKi8KIAkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgMTksIDFhLCAxYiwgMWMsIDFkLCAxNCwgMTUsIDE2LCAxNywgMGIgKi8KLQkvKiBJbnB1dCBtaXhlcjE6IHVubXV0ZSBNaWMsIEYtTWljLCBMaW5lLCBDRCBpbnB1dHMgKi8KLQl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzAwMCB8ICgweDAwIDw8IDgpKX0sCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwODAgfCAoMHgwMyA8PCA4KSl9LAotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDgwIHwgKDB4MDIgPDwgOCkpfSwKLQl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzA4MCB8ICgweDA0IDw8IDgpKX0sCiAJLyogSW5wdXQgbWl4ZXIyICovCiAJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMDAgfCAoMHgwMCA8PCA4KSl9LAogCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDgwIHwgKDB4MDMgPDwgOCkpfSwKQEAgLTcxMDcsODIxICs3NzE3LDYgQEAKIAl7IH0KIH07CiAKLSNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi0jZGVmaW5lIGFsYzg4Ml9sb29wYmFja3MJYWxjODgwX2xvb3BiYWNrcwotI2VuZGlmCi0KLS8qIHBjbSBjb25maWd1cmF0aW9uOiBpZGVudGljYWwgd2l0aCBBTEM4ODAgKi8KLSNkZWZpbmUgYWxjODgyX3BjbV9hbmFsb2dfcGxheWJhY2sJYWxjODgwX3BjbV9hbmFsb2dfcGxheWJhY2sKLSNkZWZpbmUgYWxjODgyX3BjbV9hbmFsb2dfY2FwdHVyZQlhbGM4ODBfcGNtX2FuYWxvZ19jYXB0dXJlCi0jZGVmaW5lIGFsYzg4Ml9wY21fZGlnaXRhbF9wbGF5YmFjawlhbGM4ODBfcGNtX2RpZ2l0YWxfcGxheWJhY2sKLSNkZWZpbmUgYWxjODgyX3BjbV9kaWdpdGFsX2NhcHR1cmUJYWxjODgwX3BjbV9kaWdpdGFsX2NhcHR1cmUKLQotLyoKLSAqIGNvbmZpZ3VyYXRpb24gYW5kIHByZXNldAotICovCi1zdGF0aWMgY29uc3QgY2hhciAqYWxjODgyX21vZGVsc1tBTEM4ODJfTU9ERUxfTEFTVF0gPSB7Ci0JW0FMQzg4Ml8zU1RfRElHXQk9ICIzc3RhY2stZGlnIiwKLQlbQUxDODgyXzZTVF9ESUddCT0gIjZzdGFjay1kaWciLAotCVtBTEM4ODJfQVJJTUFdCQk9ICJhcmltYSIsCi0JW0FMQzg4Ml9XMkpDXQkJPSAidzJqYyIsCi0JW0FMQzg4Ml9UQVJHQV0JCT0gInRhcmdhIiwKLQlbQUxDODgyX0FTVVNfQTdKXQk9ICJhc3VzLWE3aiIsCi0JW0FMQzg4Ml9BU1VTX0E3TV0JPSAiYXN1cy1hN20iLAotCVtBTEM4ODVfTUFDUFJPXQkJPSAibWFjcHJvIiwKLQlbQUxDODg1X01CNV0JCT0gIm1iNSIsCi0JW0FMQzg4NV9NQlAzXQkJPSAibWJwMyIsCi0JW0FMQzg4NV9JTUFDMjRdCQk9ICJpbWFjMjQiLAotCVtBTEM4ODJfQVVUT10JCT0gImF1dG8iLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzg4Ml9jZmdfdGJsW10gPSB7Ci0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4NjY2OCwgIkVDUyIsIEFMQzg4Ml82U1RfRElHKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgwNjBkLCAiQXN1cyBBN0oiLCBBTEM4ODJfQVNVU19BN0opLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyNDMsICJBc3VzIEE3SiIsIEFMQzg4Ml9BU1VTX0E3SiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNjMiwgIkFzdXMgQTdNIiwgQUxDODgyX0FTVVNfQTdNKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTcxLCAiQXN1cyBXMkpDIiwgQUxDODgyX1cySkMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxN2YsICJBc3VzIFA1TEQyIiwgQUxDODgyXzZTVF9ESUcpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxZDgsICJBc3VzIFA1V0QiLCBBTEM4ODJfNlNUX0RJRyksCi0JU05EX1BDSV9RVUlSSygweDEwNWIsIDB4NjY2OCwgIkZveGNvbm4iLCBBTEM4ODJfNlNUX0RJRyksCi0JU05EX1BDSV9RVUlSSygweDE0NTgsIDB4YTAwMiwgIkdpZ2FieXRlIFAzNSBEUzNSIiwgQUxDODgyXzZTVF9ESUcpLAotCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDI4ZmIsICJUYXJnYSBUOCIsIEFMQzg4Ml9UQVJHQSksIC8qIE1TSS0xMDQ5IFQ4ICAqLwotCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDY2NjgsICJNU0kiLCBBTEM4ODJfNlNUX0RJRyksCi0JU05EX1BDSV9RVUlSSygweDE2MWYsIDB4MjA1NCwgIkFyaW1hIFc4MjAiLCBBTEM4ODJfQVJJTUEpLAotCXt9Ci19OwotCi1zdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzg4Ml9wcmVzZXRzW10gPSB7Ci0JW0FMQzg4Ml8zU1RfRElHXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODgyX2Jhc2VfbWl4ZXIgfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4Ml9pbml0X3ZlcmJzIH0sCi0JCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKLQkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAotCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKLQkJLmRpZ19pbl9uaWQgPSBBTEM4ODJfRElHSU5fTklELAotCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgyX2NoX21vZGVzKSwKLQkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4Ml9jaF9tb2RlcywKLQkJLm5lZWRfZGFjX2ZpeCA9IDEsCi0JCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAotCX0sCi0JW0FMQzg4Ml82U1RfRElHXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODgyX2Jhc2VfbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4Ml9pbml0X3ZlcmJzIH0sCi0JCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKLQkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAotCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKLQkJLmRpZ19pbl9uaWQgPSBBTEM4ODJfRElHSU5fTklELAotCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgyX3NpeHN0YWNrX21vZGVzKSwKLQkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4Ml9zaXhzdGFja19tb2RlcywKLQkJLmlucHV0X211eCA9ICZhbGM4ODJfY2FwdHVyZV9zb3VyY2UsCi0JfSwKLQlbQUxDODgyX0FSSU1BXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODgyX2Jhc2VfbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4Ml9pbml0X3ZlcmJzLCBhbGM4ODJfZWFwZF92ZXJicyB9LAotCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4Ml9kYWNfbmlkcyksCi0JCS5kYWNfbmlkcyA9IGFsYzg4Ml9kYWNfbmlkcywKLQkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4Ml9zaXhzdGFja19tb2RlcyksCi0JCS5jaGFubmVsX21vZGUgPSBhbGM4ODJfc2l4c3RhY2tfbW9kZXMsCi0JCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAotCX0sCi0JW0FMQzg4Ml9XMkpDXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODgyX3cyamNfbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4Ml9pbml0X3ZlcmJzLCBhbGM4ODJfZWFwZF92ZXJicywKLQkJCQlhbGM4ODBfZ3BpbzFfaW5pdF92ZXJicyB9LAotCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4Ml9kYWNfbmlkcyksCi0JCS5kYWNfbmlkcyA9IGFsYzg4Ml9kYWNfbmlkcywKLQkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4MF90aHJlZXN0YWNrX21vZGVzKSwKLQkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4MF90aHJlZXN0YWNrX21vZGVzLAotCQkubmVlZF9kYWNfZml4ID0gMSwKLQkJLmlucHV0X211eCA9ICZhbGM4ODJfY2FwdHVyZV9zb3VyY2UsCi0JCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAotCX0sCi0JW0FMQzg4NV9NQlAzXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODg1X21icDNfbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKLQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4NV9tYnAzX2luaXRfdmVyYnMsCi0JCQkJYWxjODgwX2dwaW8xX2luaXRfdmVyYnMgfSwKLQkJLm51bV9kYWNzID0gMiwKLQkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAotCQkuaHBfbmlkID0gMHgwNCwKLQkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4NV9tYnBfNGNoX21vZGVzLAotCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODg1X21icF80Y2hfbW9kZXMpLAotCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKLQkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCi0JCS5kaWdfaW5fbmlkID0gQUxDODgyX0RJR0lOX05JRCwKLQkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzg4NV9tYnAzX2luaXRfaG9vaywKLQl9LAotCVtBTEM4ODVfTUI1XSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODg1X21iNV9taXhlciwgYWxjODgyX2NobW9kZV9taXhlciB9LAotCQkuaW5pdF92ZXJicyA9IHsgYWxjODg1X21iNV9pbml0X3ZlcmJzLAotCQkJCWFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzIH0sCi0JCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKLQkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAotCQkuY2hhbm5lbF9tb2RlID0gYWxjODg1X21iNV82Y2hfbW9kZXMsCi0JCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODVfbWI1XzZjaF9tb2RlcyksCi0JCS5pbnB1dF9tdXggPSAmbWI1X2NhcHR1cmVfc291cmNlLAotCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKLQkJLmRpZ19pbl9uaWQgPSBBTEM4ODJfRElHSU5fTklELAotCX0sCi0JW0FMQzg4NV9NQUNQUk9dID0gewotCQkubWl4ZXJzID0geyBhbGM4ODJfbWFjcHJvX21peGVyIH0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGM4ODJfbWFjcHJvX2luaXRfdmVyYnMgfSwKLQkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODJfZGFjX25pZHMpLAotCQkuZGFjX25pZHMgPSBhbGM4ODJfZGFjX25pZHMsCi0JCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAotCQkuZGlnX2luX25pZCA9IEFMQzg4Ml9ESUdJTl9OSUQsCi0JCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODJfY2hfbW9kZXMpLAotCQkuY2hhbm5lbF9tb2RlID0gYWxjODgyX2NoX21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKLQkJLmluaXRfaG9vayA9IGFsYzg4NV9tYWNwcm9faW5pdF9ob29rLAotCX0sCi0JW0FMQzg4NV9JTUFDMjRdID0gewotCQkubWl4ZXJzID0geyBhbGM4ODVfaW1hYzI0X21peGVyIH0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGM4ODVfaW1hYzI0X2luaXRfdmVyYnMgfSwKLQkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODJfZGFjX25pZHMpLAotCQkuZGFjX25pZHMgPSBhbGM4ODJfZGFjX25pZHMsCi0JCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAotCQkuZGlnX2luX25pZCA9IEFMQzg4Ml9ESUdJTl9OSUQsCi0JCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODJfY2hfbW9kZXMpLAotCQkuY2hhbm5lbF9tb2RlID0gYWxjODgyX2NoX21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKLQkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzg4NV9pbWFjMjRfaW5pdF9ob29rLAotCX0sCi0JW0FMQzg4Ml9UQVJHQV0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4Ml90YXJnYV9taXhlciwgYWxjODgyX2NobW9kZV9taXhlciB9LAotCQkuaW5pdF92ZXJicyA9IHsgYWxjODgyX2luaXRfdmVyYnMsIGFsYzg4MF9ncGlvM19pbml0X3ZlcmJzLAotCQkJCWFsYzg4Ml90YXJnYV92ZXJic30sCi0JCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKLQkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAotCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKLQkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgyX2FkY19uaWRzKSwKLQkJLmFkY19uaWRzID0gYWxjODgyX2FkY19uaWRzLAotCQkuY2Fwc3JjX25pZHMgPSBhbGM4ODJfY2Fwc3JjX25pZHMsCi0JCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODJfM1NUXzZjaF9tb2RlcyksCi0JCS5jaGFubmVsX21vZGUgPSBhbGM4ODJfM1NUXzZjaF9tb2RlcywKLQkJLm5lZWRfZGFjX2ZpeCA9IDEsCi0JCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGM4ODJfdGFyZ2FfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODJfdGFyZ2FfaW5pdF9ob29rLAotCX0sCi0JW0FMQzg4Ml9BU1VTX0E3Sl0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4Ml9hc3VzX2E3al9taXhlciwgYWxjODgyX2NobW9kZV9taXhlciB9LAotCQkuaW5pdF92ZXJicyA9IHsgYWxjODgyX2luaXRfdmVyYnMsIGFsYzg4Ml9hc3VzX2E3al92ZXJic30sCi0JCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKLQkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAotCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKLQkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgyX2FkY19uaWRzKSwKLQkJLmFkY19uaWRzID0gYWxjODgyX2FkY19uaWRzLAotCQkuY2Fwc3JjX25pZHMgPSBhbGM4ODJfY2Fwc3JjX25pZHMsCi0JCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODJfM1NUXzZjaF9tb2RlcyksCi0JCS5jaGFubmVsX21vZGUgPSBhbGM4ODJfM1NUXzZjaF9tb2RlcywKLQkJLm5lZWRfZGFjX2ZpeCA9IDEsCi0JCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAotCX0sCi0JW0FMQzg4Ml9BU1VTX0E3TV0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4Ml9hc3VzX2E3bV9taXhlciwgYWxjODgyX2NobW9kZV9taXhlciB9LAotCQkuaW5pdF92ZXJicyA9IHsgYWxjODgyX2luaXRfdmVyYnMsIGFsYzg4Ml9lYXBkX3ZlcmJzLAotCQkJCWFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzLAotCQkJCWFsYzg4Ml9hc3VzX2E3bV92ZXJicyB9LAotCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4Ml9kYWNfbmlkcyksCi0JCS5kYWNfbmlkcyA9IGFsYzg4Ml9kYWNfbmlkcywKLQkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCi0JCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODBfdGhyZWVzdGFja19tb2RlcyksCi0JCS5jaGFubmVsX21vZGUgPSBhbGM4ODBfdGhyZWVzdGFja19tb2RlcywKLQkJLm5lZWRfZGFjX2ZpeCA9IDEsCi0JCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAotCX0sCi19OwotCi0KLS8qCi0gKiBQaW4gY29uZmlnIGZpeGVzCi0gKi8KLWVudW0gewotCVBJTkZJWF9BQklUX0FXOURfTUFYCi19OwotCi1zdGF0aWMgc3RydWN0IGFsY19waW5jZmcgYWxjODgyX2FiaXRfYXc5ZF9waW5maXhbXSA9IHsKLQl7IDB4MTUsIDB4MDEwODAxMDQgfSwgLyogc2lkZSAqLwotCXsgMHgxNiwgMHgwMTAxMTAxMiB9LCAvKiByZWFyICovCi0JeyAweDE3LCAweDAxMDE2MDExIH0sIC8qIGNsZmUgKi8KLQl7IH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZyAqYWxjODgyX3Bpbl9maXhlc1tdID0gewotCVtQSU5GSVhfQUJJVF9BVzlEX01BWF0gPSBhbGM4ODJfYWJpdF9hdzlkX3BpbmZpeCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4ODJfcGluZml4X3RibFtdID0gewotCVNORF9QQ0lfUVVJUksoMHgxNDdiLCAweDEwN2EsICJBYml0IEFXOUQtTUFYIiwgUElORklYX0FCSVRfQVc5RF9NQVgpLAotCXt9Ci19OwotCi0vKgotICogQklPUyBhdXRvIGNvbmZpZ3VyYXRpb24KLSAqLwotc3RhdGljIHZvaWQgYWxjODgyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCQkgICAgICBoZGFfbmlkX3QgbmlkLCBpbnQgcGluX3R5cGUsCi0JCQkJCSAgICAgIGludCBkYWNfaWR4KQotewotCS8qIHNldCBhcyBvdXRwdXQgKi8KLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgaWR4OwotCi0JYWxjX3NldF9waW5fb3V0cHV0KGNvZGVjLCBuaWQsIHBpbl90eXBlKTsKLQlpZiAoc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbZGFjX2lkeF0gPT0gMHgyNSkKLQkJaWR4ID0gNDsKLQllbHNlCi0JCWlkeCA9IHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2RhY19pZHhdIC0gMjsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBpZHgpOwotCi19Ci0KLXN0YXRpYyB2b2lkIGFsYzg4Ml9hdXRvX2luaXRfbXVsdGlfb3V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8PSBIREFfU0lERTsgaSsrKSB7Ci0JCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbaV07Ci0JCWludCBwaW5fdHlwZSA9IGdldF9waW5fdHlwZShzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3R5cGUpOwotCQlpZiAobmlkKQotCQkJYWxjODgyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIHBpbl90eXBlLAotCQkJCQkJCSAgaSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhbGM4ODJfYXV0b19pbml0X2hwX291dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgcGluOwotCi0JcGluID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwotCWlmIChwaW4pIC8qIGNvbm5lY3QgdG8gZnJvbnQgKi8KLQkJLyogdXNlIGRhYyAwICovCi0JCWFsYzg4Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fSFAsIDApOwotCXBpbiA9IHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdOwotCWlmIChwaW4pCi0JCWFsYzg4Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fT1VULCAwKTsKLX0KLQotI2RlZmluZSBhbGM4ODJfaXNfaW5wdXRfcGluKG5pZCkJYWxjODgwX2lzX2lucHV0X3BpbihuaWQpCi0jZGVmaW5lIEFMQzg4Ml9QSU5fQ0RfTklECQlBTEM4ODBfUElOX0NEX05JRAotCi1zdGF0aWMgdm9pZCBhbGM4ODJfYXV0b19pbml0X2FuYWxvZ19pbnB1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKLQkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKLQkJaWYgKCFuaWQpCi0JCQljb250aW51ZTsKLQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgQVVUT19QSU5fRlJPTlRfTUlDIC8qaSovKTsKLQkJaWYgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JCQkJCSAgICBBTVBfT1VUX01VVEUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYWxjODgyX2F1dG9faW5pdF9pbnB1dF9zcmMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGM7Ci0KLQlmb3IgKGMgPSAwOyBjIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBjKyspIHsKLQkJaGRhX25pZF90IGNvbm5fbGlzdFtIREFfTUFYX05VTV9JTlBVVFNdOwotCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+Y2Fwc3JjX25pZHNbY107Ci0JCXVuc2lnbmVkIGludCBtdXhfaWR4OwotCQljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eDsKLQkJaW50IGNvbm5zLCBtdXRlLCBpZHgsIGl0ZW07Ci0KLQkJY29ubnMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBjb25uX2xpc3QsCi0JCQkJCQlBUlJBWV9TSVpFKGNvbm5fbGlzdCkpOwotCQlpZiAoY29ubnMgPCAwKQotCQkJY29udGludWU7Ci0JCW11eF9pZHggPSBjID49IHNwZWMtPm51bV9tdXhfZGVmcyA/IDAgOiBjOwotCQlpbXV4ID0gJnNwZWMtPmlucHV0X211eFttdXhfaWR4XTsKLQkJZm9yIChpZHggPSAwOyBpZHggPCBjb25uczsgaWR4KyspIHsKLQkJCS8qIGlmIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gaXMgdGhlIHNlbGVjdGVkIG9uZSwKLQkJCSAqIHVubXV0ZSBpdCBhcyBkZWZhdWx0IC0gb3RoZXJ3aXNlIG11dGUgaXQKLQkJCSAqLwotCQkJbXV0ZSA9IEFNUF9JTl9NVVRFKGlkeCk7Ci0JCQlmb3IgKGl0ZW0gPSAwOyBpdGVtIDwgaW11eC0+bnVtX2l0ZW1zOyBpdGVtKyspIHsKLQkJCQlpZiAoaW11eC0+aXRlbXNbaXRlbV0uaW5kZXggPT0gaWR4KSB7Ci0JCQkJCWlmIChzcGVjLT5jdXJfbXV4W2NdID09IGl0ZW0pCi0JCQkJCQltdXRlID0gQU1QX0lOX1VOTVVURShpZHgpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQkvKiBjaGVjayBpZiB3ZSBoYXZlIGEgc2VsZWN0b3Igb3IgbWl4ZXIKLQkJCSAqIHdlIGNvdWxkIGNoZWNrIGZvciB0aGUgd2lkZ2V0IHR5cGUgaW5zdGVhZCwgYnV0Ci0JCQkgKiBqdXN0IGNoZWNrIGZvciBBbXAtSW4gcHJlc2VuY2UgKGluIGNhc2Ugb2YgbWl4ZXIKLQkJCSAqIHdpdGhvdXQgYW1wLWluIHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZywgdGhpcwotCQkJICogZnVuY3Rpb24gc2hvdWxkbid0IGJlIHVzZWQgb3IgY2Fwc3JjIG5pZCBpcyB3cm9uZykKLQkJCSAqLwotCQkJaWYgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfSU5fQU1QKQotCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAotCQkJCQkJICAgIG11dGUpOwotCQkJZWxzZSBpZiAobXV0ZSAhPSBBTVBfSU5fTVVURShpZHgpKQotCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJCSAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKLQkJCQkJCSAgICBpZHgpOwotCQl9Ci0JfQotfQotCi0vKiBhZGQgbWljIGJvb3N0cyBpZiBuZWVkZWQgKi8KLXN0YXRpYyBpbnQgYWxjX2F1dG9fYWRkX21pY19ib29zdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgZXJyOwotCWhkYV9uaWRfdCBuaWQ7Ci0KLQluaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXTsKLQlpZiAobmlkICYmIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX0lOX0FNUCkpIHsKLQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLAotCQkJCSAgIk1pYyBCb29zdCIsCi0JCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwgSERBX0lOUFVUKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW0FVVE9fUElOX0ZST05UX01JQ107Ci0JaWYgKG5pZCAmJiAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9JTl9BTVApKSB7Ci0JCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKLQkJCQkgICJGcm9udCBNaWMgQm9vc3QiLAotCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsIEhEQV9JTlBVVCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiBhbG1vc3QgaWRlbnRpY2FsIHdpdGggQUxDODgwIHBhcnNlci4uLiAqLwotc3RhdGljIGludCBhbGM4ODJfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGVyciA9IGFsYzg4MF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7Ci0KLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllbHNlIGlmICghZXJyKQotCQlyZXR1cm4gMDsgLyogbm8gY29uZmlnIGZvdW5kICovCi0KLQllcnIgPSBhbGNfYXV0b19hZGRfbWljX2Jvb3N0KGNvZGVjKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCS8qIGhhY2sgLSBvdmVycmlkZSB0aGUgaW5pdCB2ZXJicyAqLwotCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBhbGM4ODJfYXV0b19pbml0X3ZlcmJzOwotCi0JcmV0dXJuIDE7IC8qIGNvbmZpZyBmb3VuZCAqLwotfQotCi0vKiBhZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIGZvciBhdXRvLWNvbmZpZ3VyYXRpb24gbW9kZWwgKi8KLXN0YXRpYyB2b2lkIGFsYzg4Ml9hdXRvX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JYWxjODgyX2F1dG9faW5pdF9tdWx0aV9vdXQoY29kZWMpOwotCWFsYzg4Ml9hdXRvX2luaXRfaHBfb3V0KGNvZGVjKTsKLQlhbGM4ODJfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7Ci0JYWxjODgyX2F1dG9faW5pdF9pbnB1dF9zcmMoY29kZWMpOwotCWlmIChzcGVjLT51bnNvbF9ldmVudCkKLQkJYWxjX2luaXRob29rKGNvZGVjKTsKLX0KLQotc3RhdGljIGludCBwYXRjaF9hbGM4ODMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOyAvKiBjYWxsZWQgaW4gcGF0Y2hfYWxjODgyKCkgKi8KLQotc3RhdGljIGludCBwYXRjaF9hbGM4ODIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjOwotCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKLQotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwotCWlmIChzcGVjID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCi0JYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIEFMQzg4Ml9NT0RFTF9MQVNULAotCQkJCQkJICBhbGM4ODJfbW9kZWxzLAotCQkJCQkJICBhbGM4ODJfY2ZnX3RibCk7Ci0KLQlpZiAoYm9hcmRfY29uZmlnIDwgMCB8fCBib2FyZF9jb25maWcgPj0gQUxDODgyX01PREVMX0xBU1QpIHsKLQkJLyogUGljayB1cCBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcGx5IFBDSSBTU0lEICovCi0JCXN3aXRjaCAoY29kZWMtPnN1YnN5c3RlbV9pZCkgewotCQljYXNlIDB4MTA2YjBjMDA6IC8qIE1hYyBQcm8gKi8KLQkJCWJvYXJkX2NvbmZpZyA9IEFMQzg4NV9NQUNQUk87Ci0JCQlicmVhazsKLQkJY2FzZSAweDEwNmIxMDAwOiAvKiBpTWFjIDI0ICovCi0JCWNhc2UgMHgxMDZiMjgwMDogLyogQXBwbGVUViAqLwotCQljYXNlIDB4MTA2YjNlMDA6IC8qIGlNYWMgMjQgQWx1bWluaXVtICovCi0JCQlib2FyZF9jb25maWcgPSBBTEM4ODVfSU1BQzI0OwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgxMDZiMDBhMDogLyogTWFjQm9va1BybzMsMSAtIEFub3RoZXIgcmV2aXNpb24gKi8KLQkJY2FzZSAweDEwNmIwMGExOiAvKiBNYWNib29rIChtaWdodCBiZSB3cm9uZyAtIFBDSSBTU0lEPykgKi8KLQkJY2FzZSAweDEwNmIwMGE0OiAvKiBNYWNib29rUHJvNCwxICovCi0JCWNhc2UgMHgxMDZiMmMwMDogLyogTWFjYm9vayBQcm8gcmV2MyAqLwotCQkvKiBNYWNib29rIDMuMSAoMHgxMDZiMzYwMCkgaXMgaGFuZGxlZCBieSBwYXRjaF9hbGM4ODMoKSAqLwotCQljYXNlIDB4MTA2YjM4MDA6IC8qIE1hY2Jvb2tQcm80LDEgLSBsYXR0ZXIgcmV2aXNpb24gKi8KLQkJCWJvYXJkX2NvbmZpZyA9IEFMQzg4NV9NQlAzOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgxMDZiM2YwMDogLyogTWFjYm9vayA1LDEgKi8KLQkJY2FzZSAweDEwNmI0MDAwOiAvKiBNYWNib29rIFBybyA1LDEgLSBGSVhNRTogSFAgamFjayBzZW5zZQotCQkJCSAgKiAgIHNlZW1zIG5vdCB3b3JraW5nLCBzbyBhcHBhcmVudGx5Ci0JCQkJICAqICAgbm8gcGVyZmVjdCBzb2x1dGlvbiB5ZXQKLQkJCQkgICovCi0JCQlib2FyZF9jb25maWcgPSBBTEM4ODVfTUI1OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBBTEM4ODlBIGlzIGhhbmRsZWQgYmV0dGVyIGFzIEFMQzg4OC1jb21wYXRpYmxlICovCi0JCQlpZiAoY29kZWMtPnJldmlzaW9uX2lkID09IDB4MTAwMTAxIHx8Ci0JCQkgICAgY29kZWMtPnJldmlzaW9uX2lkID09IDB4MTAwMTAzKSB7Ci0JCQkJYWxjX2ZyZWUoY29kZWMpOwotCQkJCXJldHVybiBwYXRjaF9hbGM4ODMoY29kZWMpOwotCQkJfQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciAlcywgIgotCQkJICAgICAgICJ0cnlpbmcgYXV0by1wcm9iZSBmcm9tIEJJT1MuLi5cbiIsCi0JCQkgICAgICAgY29kZWMtPmNoaXBfbmFtZSk7Ci0JCQlib2FyZF9jb25maWcgPSBBTEM4ODJfQVVUTzsKLQkJfQotCX0KLQotCWFsY19maXhfcGluY2ZnKGNvZGVjLCBhbGM4ODJfcGluZml4X3RibCwgYWxjODgyX3Bpbl9maXhlcyk7Ci0KLQlpZiAoYm9hcmRfY29uZmlnID09IEFMQzg4Ml9BVVRPKSB7Ci0JCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwotCQllcnIgPSBhbGM4ODJfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJYWxjX2ZyZWUoY29kZWMpOwotCQkJcmV0dXJuIGVycjsKLQkJfSBlbHNlIGlmICghZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgImhkYV9jb2RlYzogQ2Fubm90IHNldCB1cCBjb25maWd1cmF0aW9uICIKLQkJCSAgICAgICAiZnJvbSBCSU9TLiAgVXNpbmcgYmFzZSBtb2RlLi4uXG4iKTsKLQkJCWJvYXJkX2NvbmZpZyA9IEFMQzg4Ml8zU1RfRElHOwotCQl9Ci0JfQotCi0JZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJYWxjX2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWlmIChib2FyZF9jb25maWcgIT0gQUxDODgyX0FVVE8pCi0JCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODgyX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7Ci0KLQlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJmFsYzg4Ml9wY21fYW5hbG9nX3BsYXliYWNrOwotCXNwZWMtPnN0cmVhbV9hbmFsb2dfY2FwdHVyZSA9ICZhbGM4ODJfcGNtX2FuYWxvZ19jYXB0dXJlOwotCS8qIEZJWE1FOiBzZXR1cCBEQUM1ICovCi0JLypzcGVjLT5zdHJlYW1fYW5hbG9nX2FsdF9wbGF5YmFjayA9ICZhbGM4ODBfcGNtX2FuYWxvZ19hbHRfcGxheWJhY2s7Ki8KLQlzcGVjLT5zdHJlYW1fYW5hbG9nX2FsdF9jYXB0dXJlID0gJmFsYzg4MF9wY21fYW5hbG9nX2FsdF9jYXB0dXJlOwotCi0Jc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjODgyX3BjbV9kaWdpdGFsX3BsYXliYWNrOwotCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjODgyX3BjbV9kaWdpdGFsX2NhcHR1cmU7Ci0KLQlpZiAoIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgewotCQkvKiBjaGVjayB3aGV0aGVyIE5JRCAweDA3IGlzIHZhbGlkICovCi0JCXVuc2lnbmVkIGludCB3Y2FwID0gZ2V0X3djYXBzKGNvZGVjLCAweDA3KTsKLQkJLyogZ2V0IHR5cGUgKi8KLQkJd2NhcCA9ICh3Y2FwICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7Ci0JCWlmICh3Y2FwICE9IEFDX1dJRF9BVURfSU4pIHsKLQkJCXNwZWMtPmFkY19uaWRzID0gYWxjODgyX2FkY19uaWRzX2FsdDsKLQkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgyX2FkY19uaWRzX2FsdCk7Ci0JCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg4Ml9jYXBzcmNfbmlkc19hbHQ7Ci0JCX0gZWxzZSB7Ci0JCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4Ml9hZGNfbmlkczsKLQkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgyX2FkY19uaWRzKTsKLQkJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjODgyX2NhcHNyY19uaWRzOwotCQl9Ci0JfQotCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOwotCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOwotCi0Jc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDBjOwotCi0JY29kZWMtPnBhdGNoX29wcyA9IGFsY19wYXRjaF9vcHM7Ci0JaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4ODJfQVVUTykKLQkJc3BlYy0+aW5pdF9ob29rID0gYWxjODgyX2F1dG9faW5pdDsKLSNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi0JaWYgKCFzcGVjLT5sb29wYmFjay5hbXBsaXN0KQotCQlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gYWxjODgyX2xvb3BiYWNrczsKLSNlbmRpZgotCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gcHJpbnRfcmVhbHRla19jb2VmOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBBTEM4ODMgc3VwcG9ydAotICoKLSAqIEFMQzg4MyBpcyBhbG1vc3QgaWRlbnRpY2FsIHdpdGggQUxDODgwIGJ1dCBoYXMgY2xlYW5lciBhbmQgbW9yZSBmbGV4aWJsZQotICogY29uZmlndXJhdGlvbi4gIEVhY2ggcGluIHdpZGdldCBjYW4gY2hvb3NlIGFueSBpbnB1dCBEQUNzIGFuZCBhIG1peGVyLgotICogRWFjaCBBREMgaXMgY29ubmVjdGVkIGZyb20gYSBtaXhlciBvZiBhbGwgaW5wdXRzLiAgVGhpcyBtYWtlcyBwb3NzaWJsZQotICogNi1jaGFubmVsIGluZGVwZW5kZW50IGNhcHR1cmVzLgotICoKLSAqIEluIGFkZGl0aW9uLCBhbiBpbmRlcGVuZGVudCBEQUMgZm9yIHRoZSBtdWx0aS1wbGF5YmFjayAobm90IHVzZWQgaW4gdGhpcwotICogZHJpdmVyIHlldCkuCi0gKi8KLSNkZWZpbmUgQUxDODgzX0RJR09VVF9OSUQJMHgwNgotI2RlZmluZSBBTEM4ODNfRElHSU5fTklECTB4MGEKLQotI2RlZmluZSBBTEMxMjAwX0RJR09VVF9OSUQJMHgxMAotCi1zdGF0aWMgaGRhX25pZF90IGFsYzg4M19kYWNfbmlkc1s0XSA9IHsKLQkvKiBmcm9udCwgcmVhciwgY2xmZSwgcmVhcl9zdXJyICovCi0JMHgwMiwgMHgwMywgMHgwNCwgMHgwNQotfTsKLQotc3RhdGljIGhkYV9uaWRfdCBhbGM4ODNfYWRjX25pZHNbMl0gPSB7Ci0JLyogQURDMS0yICovCi0JMHgwOCwgMHgwOSwKLX07Ci0KLXN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2FkY19uaWRzX2FsdFsxXSA9IHsKLQkvKiBBREMxICovCi0JMHgwOCwKLX07Ci0KLXN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2FkY19uaWRzX3JldlsyXSA9IHsKLQkvKiBBREMyLTEgKi8KLQkweDA5LCAweDA4Ci19OwotCi0jZGVmaW5lIGFsYzg4OV9hZGNfbmlkcwkJYWxjODgwX2FkY19uaWRzCi0KLXN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2NhcHNyY19uaWRzWzJdID0geyAweDIzLCAweDIyIH07Ci0KLXN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX2NhcHNyY19uaWRzX3JldlsyXSA9IHsgMHgyMiwgMHgyMyB9OwotCi0jZGVmaW5lIGFsYzg4OV9jYXBzcmNfbmlkcwlhbGM4ODJfY2Fwc3JjX25pZHMKLQotLyogaW5wdXQgTVVYICovCi0vKiBGSVhNRTogc2hvdWxkIGJlIGEgbWF0cml4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLwotCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgzX2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSA0LAotCS5pdGVtcyA9IHsKLQkJeyAiTWljIiwgMHgwIH0sCi0JCXsgIkZyb250IE1pYyIsIDB4MSB9LAotCQl7ICJMaW5lIiwgMHgyIH0sCi0JCXsgIkNEIiwgMHg0IH0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODNfM3N0YWNrXzZjaF9pbnRlbCA9IHsKLQkubnVtX2l0ZW1zID0gNCwKLQkuaXRlbXMgPSB7Ci0JCXsgIk1pYyIsIDB4MSB9LAotCQl7ICJGcm9udCBNaWMiLCAweDAgfSwKLQkJeyAiTGluZSIsIDB4MiB9LAotCQl7ICJDRCIsIDB4NCB9LAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgzX2xlbm92b18xMDFlX2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAyLAotCS5pdGVtcyA9IHsKLQkJeyAiTWljIiwgMHgxIH0sCi0JCXsgIkxpbmUiLCAweDIgfSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4M19sZW5vdm9fbmIwNzYzX2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSA0LAotCS5pdGVtcyA9IHsKLQkJeyAiTWljIiwgMHgwIH0sCi0JCXsgImlNaWMiLCAweDEgfSwKLQkJeyAiTGluZSIsIDB4MiB9LAotCQl7ICJDRCIsIDB4NCB9LAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgzX2Z1aml0c3VfcGkyNTE1X2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAyLAotCS5pdGVtcyA9IHsKLQkJeyAiTWljIiwgMHgwIH0sCi0JCXsgIkludCBNaWMiLCAweDEgfSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4M19sZW5vdm9fc2t5X2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAzLAotCS5pdGVtcyA9IHsKLQkJeyAiTWljIiwgMHgwIH0sCi0JCXsgIkZyb250IE1pYyIsIDB4MSB9LAotCQl7ICJMaW5lIiwgMHg0IH0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM4ODNfYXN1c19lZWUxNjAxX2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAyLAotCS5pdGVtcyA9IHsKLQkJeyAiTWljIiwgMHgwIH0sCi0JCXsgIkxpbmUiLCAweDIgfSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4OUFfbWIzMV9jYXB0dXJlX3NvdXJjZSA9IHsKLQkubnVtX2l0ZW1zID0gMiwKLQkuaXRlbXMgPSB7Ci0JCXsgIk1pYyIsIDB4MCB9LAotCQkvKiBGcm9udCBNaWMgKDB4MDEpIHVudXNlZCAqLwotCQl7ICJMaW5lIiwgMHgyIH0sCi0JCS8qIExpbmUgMiAoMHgwMykgdW51c2VkICovCi0JCS8qIENEICgweDA0KSB1bnN1c2VkPyAqLwotCX0sCi19OwotCi0vKgotICogMmNoIG1vZGUKLSAqLwotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4M18zU1RfMmNoX21vZGVzWzFdID0gewotCXsgMiwgTlVMTCB9Ci19OwotCi0vKgotICogMmNoIG1vZGUKLSAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfM1NUX2NoMl9pbml0W10gPSB7Ci0JeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKLQl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAotCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwKLQl7IDB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KLS8qCi0gKiA0Y2ggbW9kZQotICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M18zU1RfY2g0X2luaXRbXSA9IHsKLQl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAotCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCi0JeyAweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKLQl7IDB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCi0JeyAweDFhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMSB9LAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KLS8qCi0gKiA2Y2ggbW9kZQotICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M18zU1RfY2g2X2luaXRbXSA9IHsKLQl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAotCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKLQl7IDB4MTgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyIH0sCi0JeyAweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKLQl7IDB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCi0JeyAweDFhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMSB9LAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODNfM1NUXzZjaF9tb2Rlc1szXSA9IHsKLQl7IDIsIGFsYzg4M18zU1RfY2gyX2luaXQgfSwKLQl7IDQsIGFsYzg4M18zU1RfY2g0X2luaXQgfSwKLQl7IDYsIGFsYzg4M18zU1RfY2g2X2luaXQgfSwKLX07Ci0KLQotLyoKLSAqIDJjaCBtb2RlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzXzRTVF9jaDJfaW5pdFtdID0gewotCXsgMHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCi0JeyAweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAotCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sCi0JeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKLQl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sCi0JeyAweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEUgfSwKLQl7IH0gLyogZW5kICovCi19OwotCi0vKgotICogNGNoIG1vZGUKLSAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfNFNUX2NoNF9pbml0W10gPSB7Ci0JeyAweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKLQl7IDB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCi0JeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKLQl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAotCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCi0JeyAweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAotCXsgMHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDEgfSwKLQl7IH0gLyogZW5kICovCi19OwotCi0vKgotICogNmNoIG1vZGUKLSAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfNFNUX2NoNl9pbml0W10gPSB7Ci0JeyAweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKLQl7IDB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCi0JeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKLQl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCi0JeyAweDE4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMiB9LAotCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCi0JeyAweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAotCXsgMHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDEgfSwKLQl7IH0gLyogZW5kICovCi19OwotCi0vKgotICogOGNoIG1vZGUKLSAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfNFNUX2NoOF9pbml0W10gPSB7Ci0JeyAweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKLQl7IDB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCi0JeyAweDE3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMyB9LAotCXsgMHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCi0JeyAweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB9LAotCXsgMHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDIgfSwKLQl7IDB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAotCXsgMHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKLQl7IDB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxIH0sCi0JeyB9IC8qIGVuZCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4M180U1RfOGNoX21vZGVzWzRdID0gewotCXsgMiwgYWxjODgzXzRTVF9jaDJfaW5pdCB9LAotCXsgNCwgYWxjODgzXzRTVF9jaDRfaW5pdCB9LAotCXsgNiwgYWxjODgzXzRTVF9jaDZfaW5pdCB9LAotCXsgOCwgYWxjODgzXzRTVF9jaDhfaW5pdCB9LAotfTsKLQotCi0vKgotICogMmNoIG1vZGUKLSAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfM1NUX2NoMl9pbnRlbF9pbml0W10gPSB7Ci0JeyAweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKLQl7IDB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAotCXsgMHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwKLQl7IDB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KLS8qCi0gKiA0Y2ggbW9kZQotICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M18zU1RfY2g0X2ludGVsX2luaXRbXSA9IHsKLQl7IDB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAotCXsgMHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCi0JeyAweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKLQl7IDB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCi0JeyAweDFhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMSB9LAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KLS8qCi0gKiA2Y2ggbW9kZQotICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M18zU1RfY2g2X2ludGVsX2luaXRbXSA9IHsKLQl7IDB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAotCXsgMHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKLQl7IDB4MTksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyIH0sCi0JeyAweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKLQl7IDB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCi0JeyAweDFhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMSB9LAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODNfM1NUXzZjaF9pbnRlbF9tb2Rlc1szXSA9IHsKLQl7IDIsIGFsYzg4M18zU1RfY2gyX2ludGVsX2luaXQgfSwKLQl7IDQsIGFsYzg4M18zU1RfY2g0X2ludGVsX2luaXQgfSwKLQl7IDYsIGFsYzg4M18zU1RfY2g2X2ludGVsX2luaXQgfSwKLX07Ci0KLS8qCi0gKiA2Y2ggbW9kZQotICovCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19zaXhzdGFja19jaDZfaW5pdFtdID0gewotCXsgMHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDAwIH0sCi0JeyAweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKLQl7IDB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAotCXsgMHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCi0JeyB9IC8qIGVuZCAqLwotfTsKLQotLyoKLSAqIDhjaCBtb2RlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzX3NpeHN0YWNrX2NoOF9pbml0W10gPSB7Ci0JeyAweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKLQl7IDB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAotCXsgMHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIH0sCi0JeyAweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKLQl7IH0gLyogZW5kICovCi19OwotCi1zdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWxjODgzX3NpeHN0YWNrX21vZGVzWzJdID0gewotCXsgNiwgYWxjODgzX3NpeHN0YWNrX2NoNl9pbml0IH0sCi0JeyA4LCBhbGM4ODNfc2l4c3RhY2tfY2g4X2luaXQgfSwKLX07Ci0KIC8qIDJjaCBtb2RlIChTcGVha2VyOmZyb250LCBTdWJ3b29mZXI6Q0xGRSwgTGluZTppbnB1dCwgSGVhZHBob25lczpmcm9udCkgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg5QV9tYjMxX2NoMl9pbml0W10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwgICAgICAgICAgICAgLyogSFAgYXMgZnJvbnQgKi8KQEAgLTc5NzIsMzQgKzc3NjcsNyBAQAogCXsgfQogfTsKIAotLyogUGluIGFzc2lnbm1lbnQ6IEZyb250PTB4MTQsIFJlYXI9MHgxNSwgQ0xGRT0weDE2LCBTaWRlPTB4MTcKLSAqICAgICAgICAgICAgICAgICBNaWM9MHgxOCwgRnJvbnQgTWljPTB4MTksIExpbmUtSW49MHgxYSwgSFA9MHgxYgotICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODNfYmFzZV9taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9CSU5EX01VVEUoIlN1cnJvdW5kIFBsYXliYWNrIFN3aXRjaCIsIDB4MGQsIDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRV9NT05PKCJDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkxGRSBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAyLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9CSU5EX01VVEVfTU9OTygiQ2VudGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDEsIDIsIEhEQV9JTlBVVCksCi0JSERBX0JJTkRfTVVURV9NT05PKCJMRkUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMiwgMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJTaWRlIFBsYXliYWNrIFZvbHVtZSIsIDB4MGYsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0JJTkRfTVVURSgiU2lkZSBQbGF5YmFjayBTd2l0Y2giLCAweDBmLCAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JeyB9IC8qIGVuZCAqLwotfTsKKyNkZWZpbmUgYWxjODgzX2Jhc2VfbWl4ZXIJYWxjODgyX2Jhc2VfbWl4ZXIKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4M19taXRhY19taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC04MTEwLDYgKzc4NzgsMzAgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1XzhjaF9pbnRlbF9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIlN1cnJvdW5kIFBsYXliYWNrIFN3aXRjaCIsIDB4MGQsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMSwgMHgwLAorCQkJICAgICAgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJMRkUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFX01PTk8oIkNlbnRlciBQbGF5YmFjayBTd2l0Y2giLCAweDBlLCAxLCAyLCBIREFfSU5QVVQpLAorCUhEQV9CSU5EX01VVEVfTU9OTygiTEZFIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDIsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZiwgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MywgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDFiLCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgzLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgzX2ZpdmVzdGFja19taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKQEAgLTgzNTAsOTMgKzgxNDIsMTQgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4M19pbml0X3ZlcmJzW10gPSB7Ci0JLyogQURDMTogbXV0ZSBhbXAgbGVmdCBhbmQgcmlnaHQgKi8KLQl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MDgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKLQkvKiBBREMyOiBtdXRlIGFtcCBsZWZ0IGFuZCByaWdodCAqLwotCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKLQkvKiBGcm9udCBtaXhlcjogdW5tdXRlIGlucHV0L291dHB1dCBhbXAgbGVmdCBhbmQgcmlnaHQgKHZvbHVtZSA9IDApICovCi0JezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCS8qIFJlYXIgbWl4ZXIgKi8KLQl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKLQl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCi0JLyogQ0xGRSBtaXhlciAqLwotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQkvKiBTaWRlIG1peGVyICovCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCi0JLyogbXV0ZSBhbmFsb2cgaW5wdXQgbG9vcGJhY2tzICovCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAotCi0JLyogRnJvbnQgUGluOiBvdXRwdXQgMCAoMHgwYykgKi8KLQl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKLQl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAotCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCi0JLyogUmVhciBQaW46IG91dHB1dCAxICgweDBkKSAqLwotCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAotCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKLQkvKiBDTEZFIFBpbjogb3V0cHV0IDIgKDB4MGUpICovCi0JezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCi0JezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKLQl7MHgxNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAotCS8qIFNpZGUgUGluOiBvdXRwdXQgMyAoMHgwZikgKi8KLQl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKLQl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAotCXsweDE3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwM30sCi0JLyogTWljIChyZWFyKSBwaW46IGlucHV0IHZyZWYgYXQgODAlICovCi0JezB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCi0JezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JLyogRnJvbnQgTWljIHBpbjogaW5wdXQgdnJlZiBhdCA4MCUgKi8KLQl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKLQl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLQkvKiBMaW5lIEluIHBpbjogaW5wdXQgKi8KLQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAotCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCS8qIExpbmUtMiBJbjogSGVhZHBob25lIG91dHB1dCAob3V0cHV0IDAgLSAweDBjKSAqLwotCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCi0JezB4MWIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKLQl7MHgxYiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAotCS8qIENEIHBpbiB3aWRnZXQgZm9yIGlucHV0ICovCi0JezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKLQotCS8qIEZJWE1FOiB1c2UgbWF0cml4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLwotCS8qIE1peGVyIGVsZW1lbnRzOiAweDE4LCAxOSwgMWEsIDFiLCAxYywgMWQsIDE0LCAxNSwgMTYsIDE3LCAwYiAqLwotCS8qIElucHV0IG1peGVyMiAqLwotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKLQkvKiBJbnB1dCBtaXhlcjMgKi8KLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCi0JeyB9Ci19OwotCiAvKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCi1zdGF0aWMgdm9pZCBhbGM4ODNfbWl0YWNfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODgzX21pdGFjX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDE3OwotCWFsY19hdXRvbXV0ZV9hbXAoY29kZWMpOwogfQogCiAvKiBhdXRvLXRvZ2dsZSBmcm9udCBtaWMgKi8KQEAgLTg0NjgsNiArODE4MSwyMiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzX2NsZXZvX201NDByX3ZlcmJzW10gPSB7CisJLyogSFAgKi8KKwl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJLyogSW50IHNwZWFrZXIgKi8KKwkvKnsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sKi8KKworCS8qIGVuYWJsZSB1bnNvbGljaXRlZCBldmVudCAqLworCS8qCisJezB4MTUsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LAorCXsweDE4LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9NSUNfRVZFTlQgfCBBQ19VU1JTUF9FTn0sCisJKi8KKworCXsgfSAvKiBlbmQgKi8KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzX2NsZXZvX203MjBfdmVyYnNbXSA9IHsKIAkvKiBIUCAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCkBAIC04NTkxLDcgKzgzMjAsNyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyB2b2lkIGFsYzg4OF8zc3RfaHBfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODg4XzNzdF9ocF9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIApAQCAtODU5OSw3ICs4MzI4LDYgQEAKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDE2OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzJdID0gMHgxODsKLQlhbGNfYXV0b211dGVfYW1wKGNvZGVjKTsKIH0KIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwX3ZlcmJzW10gPSB7CkBAIC04Njk2LDEzICs4NDI0LDEyIEBACiB9OwogCiAvKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCi1zdGF0aWMgdm9pZCBhbGM4ODNfbWVkaW9uX21kMl9pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGM4ODNfbWVkaW9uX21kMl9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE1OwotCWFsY19hdXRvbXV0ZV9hbXAoY29kZWMpOwogfQogCiAvKiB0b2dnbGUgc3BlYWtlci1vdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBocC1qYWNrIHN0YXRlICovCkBAIC04NzE5LDEyICs4NDQ2LDE2IEBACiAJCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOwogfQogCi1zdGF0aWMgdm9pZCBhbGM4ODNfY2xldm9fbTcyMF9pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGM4ODNfY2xldm9fbTcyMF9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTU7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OworfQorCitzdGF0aWMgdm9pZCBhbGM4ODNfY2xldm9fbTcyMF9pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CiAJYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CiAJYWxjODgzX2NsZXZvX203MjBfbWljX2F1dG9tdXRlKGNvZGVjKTsKIH0KQEAgLTg3NDMsMjIgKzg0NzQsMjAgQEAKIH0KIAogLyogdG9nZ2xlIHNwZWFrZXItb3V0cHV0IGFjY29yZGluZyB0byB0aGUgaHAtamFjayBzdGF0ZSAqLwotc3RhdGljIHZvaWQgYWxjODgzXzJjaF9mdWppdHN1X3BpMjUxNV9pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGM4ODNfMmNoX2Z1aml0c3VfcGkyNTE1X3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTU7Ci0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzg4M19oYWllcl93NjZfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODgzX2hhaWVyX3c2Nl9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MWI7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OwotCWFsY19hdXRvbXV0ZV9hbXAoY29kZWMpOwogfQogCiBzdGF0aWMgdm9pZCBhbGM4ODNfbGVub3ZvXzEwMWVfaXNwZWFrZXJfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC04Nzk3LDE0ICs4NTI2LDEzIEBACiB9CiAKIC8qIHRvZ2dsZSBzcGVha2VyLW91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGhwLWphY2sgc3RhdGUgKi8KLXN0YXRpYyB2b2lkIGFsYzg4M19hY2VyX2FzcGlyZV9pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGM4ODNfYWNlcl9hc3BpcmVfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKIAlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE0OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1sxXSA9IDB4MTY7Ci0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgzX2FjZXJfZWFwZF92ZXJic1tdID0gewpAQCAtODgyNSw3ICs4NTUzLDE0IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgdm9pZCBhbGM4ODhfNnN0X2RlbGxfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfYWNlcl9hc3BpcmVfNzczMEdfdmVyYnNbXSA9IHsKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMn0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyB2b2lkIGFsYzg4OF82c3RfZGVsbF9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIApAQCAtODgzNCwxMCArODU2OSw5IEBACiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDE1OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzJdID0gMHgxNjsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1szXSA9IDB4MTc7Ci0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzg4OF9sZW5vdm9fc2t5X2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzg4OF9sZW5vdm9fc2t5X3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCkBAIC04ODQ3LDgyICs4NTgxLDE3IEBACiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMl0gPSAweDE2OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzNdID0gMHgxNzsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1s0XSA9IDB4MWE7Ci0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzg4M192YWlvdHRfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODgzX3ZhaW90dF9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTU7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzFdID0gMHgxNzsKLQlhbGNfYXV0b211dGVfYW1wKGNvZGVjKTsKIH0KIAotLyoKLSAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKLSAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODNfYXV0b19pbml0X3ZlcmJzW10gPSB7Ci0JLyoKLQkgKiBVbm11dGUgQURDMC0yIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCi0JICovCi0JezB4MDgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKLQl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0KLQkvKiBNdXRlIGlucHV0IGFtcHMgKENELCBMaW5lIEluLCBNaWMgMSAmIE1pYyAyKSBvZiB0aGUgYW5hbG9nLWxvb3BiYWNrCi0JICogbWl4ZXIgd2lkZ2V0Ci0JICogTm90ZTogUEFTRCBtb3RoZXJib2FyZHMgdXNlcyB0aGUgTGluZSBJbiAyIGFzIHRoZSBpbnB1dCBmb3IKLQkgKiBmcm9udCBwYW5lbCBtaWMgKG1pYyAyKQotCSAqLwotCS8qIEFtcCBJbmRpY2VzOiBNaWMxID0gMCwgTWljMiA9IDEsIExpbmUxID0gMiwgTGluZTIgPSAzLCBDRCA9IDQgKi8KLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCi0KLQkvKgotCSAqIFNldCB1cCBvdXRwdXQgbWl4ZXJzICgweDBjIC0gMHgwZikKLQkgKi8KLQkvKiBzZXQgdm9sPTAgdG8gb3V0cHV0IG1peGVycyAqLwotCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCS8qIHNldCB1cCBpbnB1dCBhbXBzIGZvciBhbmFsb2cgbG9vcGJhY2sgKi8KLQkvKiBBbXAgSW5kaWNlczogREFDID0gMCwgbWl4ZXIgPSAxICovCi0JezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgyNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MjYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCi0JLyogRklYTUU6IHVzZSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCi0JLyogTWl4ZXIgZWxlbWVudHM6IDB4MTgsIDE5LCAxYSwgMWIsIDFjLCAxZCwgMTQsIDE1LCAxNiwgMTcsIDBiICovCi0JLyogSW5wdXQgbWl4ZXIxICovCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCi0JLyogezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMyl9LCAqLwotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDQpfSwKLQkvKiBJbnB1dCBtaXhlcjIgKi8KLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpfSwKLQkvKiB7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgzKX0sICovCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoNCl9LAotCi0JeyB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF9hc3VzX205MHZfdmVyYnNbXSA9IHsKIAl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCkBAIC04OTMzLDE5ICs4NjAyLDcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCi1zdGF0aWMgdm9pZCBhbGM4ODNfbmJfbWljX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXVuc2lnbmVkIGludCBwcmVzZW50OwotCi0JcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxOCwgMCwKLQkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjMsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JCQkgICAgMHg3MDAwIHwgKDB4MDAgPDwgOCkgfCAocHJlc2VudCA/IDAgOiAweDgwKSk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyMywgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkJCSAgICAweDcwMDAgfCAoMHgwMSA8PCA4KSB8IChwcmVzZW50ID8gMHg4MCA6IDApKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjODgzX005MFZfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODgzX21vZGUyX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCkBAIC04OTUzLDI2ICs4NjEwLDExIEBACiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzFdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1syXSA9IDB4MTY7Ci0JYWxjX2F1dG9tdXRlX3Bpbihjb2RlYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFsYzg4M19tb2RlMl91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkJICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjODgzX25iX21pY19hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWFsY19za3VfdW5zb2xfZXZlbnQoY29kZWMsIHJlcyk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYWxjODgzX21vZGUyX2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWFsYzg4M19NOTBWX2luaXRfaG9vayhjb2RlYyk7Ci0JYWxjODgzX25iX21pY19hdXRvbXV0ZShjb2RlYyk7CisJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OworCXNwZWMtPmludF9taWMucGluID0gMHgxOTsKKwlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOworCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDE7CisJc3BlYy0+YXV0b19taWMgPSAxOwogfQogCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF9hc3VzX2VlZTE2MDFfdmVyYnNbXSA9IHsKQEAgLTkwMzMsMjUgKzg2NzUsNDQgQEAKIAkJYWxjODg5QV9tYjMxX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAorCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQotI2RlZmluZSBhbGM4ODNfbG9vcGJhY2tzCWFsYzg4MF9sb29wYmFja3MKKyNkZWZpbmUgYWxjODgyX2xvb3BiYWNrcwlhbGM4ODBfbG9vcGJhY2tzCiAjZW5kaWYKIAogLyogcGNtIGNvbmZpZ3VyYXRpb246IGlkZW50aWNhbCB3aXRoIEFMQzg4MCAqLwotI2RlZmluZSBhbGM4ODNfcGNtX2FuYWxvZ19wbGF5YmFjawlhbGM4ODBfcGNtX2FuYWxvZ19wbGF5YmFjawotI2RlZmluZSBhbGM4ODNfcGNtX2FuYWxvZ19jYXB0dXJlCWFsYzg4MF9wY21fYW5hbG9nX2NhcHR1cmUKLSNkZWZpbmUgYWxjODgzX3BjbV9hbmFsb2dfYWx0X2NhcHR1cmUJYWxjODgwX3BjbV9hbmFsb2dfYWx0X2NhcHR1cmUKLSNkZWZpbmUgYWxjODgzX3BjbV9kaWdpdGFsX3BsYXliYWNrCWFsYzg4MF9wY21fZGlnaXRhbF9wbGF5YmFjawotI2RlZmluZSBhbGM4ODNfcGNtX2RpZ2l0YWxfY2FwdHVyZQlhbGM4ODBfcGNtX2RpZ2l0YWxfY2FwdHVyZQorI2RlZmluZSBhbGM4ODJfcGNtX2FuYWxvZ19wbGF5YmFjawlhbGM4ODBfcGNtX2FuYWxvZ19wbGF5YmFjaworI2RlZmluZSBhbGM4ODJfcGNtX2FuYWxvZ19jYXB0dXJlCWFsYzg4MF9wY21fYW5hbG9nX2NhcHR1cmUKKyNkZWZpbmUgYWxjODgyX3BjbV9kaWdpdGFsX3BsYXliYWNrCWFsYzg4MF9wY21fZGlnaXRhbF9wbGF5YmFjaworI2RlZmluZSBhbGM4ODJfcGNtX2RpZ2l0YWxfY2FwdHVyZQlhbGM4ODBfcGNtX2RpZ2l0YWxfY2FwdHVyZQorCitzdGF0aWMgaGRhX25pZF90IGFsYzg4M19zbGF2ZV9kaWdfb3V0c1tdID0geworCUFMQzEyMDBfRElHT1VUX05JRCwgMCwKK307CisKK3N0YXRpYyBoZGFfbmlkX3QgYWxjMTIwMF9zbGF2ZV9kaWdfb3V0c1tdID0geworCUFMQzg4M19ESUdPVVRfTklELCAwLAorfTsKIAogLyoKICAqIGNvbmZpZ3VyYXRpb24gYW5kIHByZXNldAogICovCi1zdGF0aWMgY29uc3QgY2hhciAqYWxjODgzX21vZGVsc1tBTEM4ODNfTU9ERUxfTEFTVF0gPSB7Ci0JW0FMQzg4M18zU1RfMmNoX0RJR10JPSAiM3N0YWNrLWRpZyIsCitzdGF0aWMgY29uc3QgY2hhciAqYWxjODgyX21vZGVsc1tBTEM4ODJfTU9ERUxfTEFTVF0gPSB7CisJW0FMQzg4Ml8zU1RfRElHXQk9ICIzc3RhY2stZGlnIiwKKwlbQUxDODgyXzZTVF9ESUddCT0gIjZzdGFjay1kaWciLAorCVtBTEM4ODJfQVJJTUFdCQk9ICJhcmltYSIsCisJW0FMQzg4Ml9XMkpDXQkJPSAidzJqYyIsCisJW0FMQzg4Ml9UQVJHQV0JCT0gInRhcmdhIiwKKwlbQUxDODgyX0FTVVNfQTdKXQk9ICJhc3VzLWE3aiIsCisJW0FMQzg4Ml9BU1VTX0E3TV0JPSAiYXN1cy1hN20iLAorCVtBTEM4ODVfTUFDUFJPXQkJPSAibWFjcHJvIiwKKwlbQUxDODg1X01CNV0JCT0gIm1iNSIsCisJW0FMQzg4NV9NQlAzXQkJPSAibWJwMyIsCisJW0FMQzg4NV9JTUFDMjRdCQk9ICJpbWFjMjQiLAorCVtBTEM4ODNfM1NUXzJjaF9ESUddCT0gIjNzdGFjay0yY2gtZGlnIiwKIAlbQUxDODgzXzNTVF82Y2hfRElHXQk9ICIzc3RhY2stNmNoLWRpZyIsCiAJW0FMQzg4M18zU1RfNmNoXQk9ICIzc3RhY2stNmNoIiwKLQlbQUxDODgzXzZTVF9ESUddCT0gIjZzdGFjay1kaWciLAorCVtBTEM4ODNfNlNUX0RJR10JPSAiYWxjODgzLTZzdGFjay1kaWciLAogCVtBTEM4ODNfVEFSR0FfRElHXQk9ICJ0YXJnYS1kaWciLAogCVtBTEM4ODNfVEFSR0FfMmNoX0RJR10JPSAidGFyZ2EtMmNoLWRpZyIsCiAJW0FMQzg4M19UQVJHQV84Y2hfRElHXQk9ICJ0YXJnYS04Y2gtZGlnIiwKQEAgLTkwNjAsNiArODcyMSw3IEBACiAJW0FMQzg4OF9BQ0VSX0FTUElSRV80OTMwR10JPSAiYWNlci1hc3BpcmUtNDkzMGciLAogCVtBTEM4ODhfQUNFUl9BU1BJUkVfNjUzMEddCT0gImFjZXItYXNwaXJlLTY1MzBnIiwKIAlbQUxDODg4X0FDRVJfQVNQSVJFXzg5MzBHXQk9ICJhY2VyLWFzcGlyZS04OTMwZyIsCisJW0FMQzg4OF9BQ0VSX0FTUElSRV83NzMwR10JPSAiYWNlci1hc3BpcmUtNzczMGciLAogCVtBTEM4ODNfTUVESU9OXQkJPSAibWVkaW9uIiwKIAlbQUxDODgzX01FRElPTl9NRDJdCT0gIm1lZGlvbi1tZDIiLAogCVtBTEM4ODNfTEFQVE9QX0VBUERdCT0gImxhcHRvcC1lYXBkIiwKQEAgLTkwNzEsMTggKzg3MzMsMjIgQEAKIAlbQUxDODg4XzNTVF9IUF0JCT0gIjNzdGFjay1ocCIsCiAJW0FMQzg4OF82U1RfREVMTF0JPSAiNnN0YWNrLWRlbGwiLAogCVtBTEM4ODNfTUlUQUNdCQk9ICJtaXRhYyIsCisJW0FMQzg4M19DTEVWT19NNTQwUl0JPSAiY2xldm8tbTU0MHIiLAogCVtBTEM4ODNfQ0xFVk9fTTcyMF0JPSAiY2xldm8tbTcyMCIsCiAJW0FMQzg4M19GVUpJVFNVX1BJMjUxNV0gPSAiZnVqaXRzdS1waTI1MTUiLAogCVtBTEM4ODhfRlVKSVRTVV9YQTM1MzBdID0gImZ1aml0c3UteGEzNTMwIiwKIAlbQUxDODgzXzNTVF82Y2hfSU5URUxdCT0gIjNzdGFjay02Y2gtaW50ZWwiLAorCVtBTEM4ODlBX0lOVEVMXQkJPSAiaW50ZWwtYWxjODg5YSIsCisJW0FMQzg4OV9JTlRFTF0JCT0gImludGVsLXg1OCIsCiAJW0FMQzEyMDBfQVNVU19QNVFdCT0gImFzdXMtcDVxIiwKIAlbQUxDODg5QV9NQjMxXQkJPSAibWIzMSIsCiAJW0FMQzg4M19TT05ZX1ZBSU9fVFRdCT0gInNvbnktdmFpby10dCIsCi0JW0FMQzg4M19BVVRPXQkJPSAiYXV0byIsCisJW0FMQzg4Ml9BVVRPXQkJPSAiYXV0byIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODgzX2NmZ190YmxbXSA9IHsKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHg2NjY4LCAiRUNTIiwgQUxDODgzXzNTVF82Y2hfRElHKSwKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4ODJfY2ZnX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDY2NjgsICJFQ1MiLCBBTEM4ODJfNlNUX0RJRyksCisKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDZjLCAiQWNlciBBc3BpcmUgOTgxMCIsIEFMQzg4M19BQ0VSX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA5MCwgIkFjZXIgQXNwaXJlIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTBhLCAiQWNlciBGZXJyYXJpIDUwMDAiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLApAQCAtOTA5Nyw0MCArODc2Myw1NiBAQAogCQlBTEM4ODhfQUNFUl9BU1BJUkVfODkzMEcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNDYsICJBY2VyIEFzcGlyZSA2OTM1RyIsCiAJCUFMQzg4OF9BQ0VSX0FTUElSRV84OTMwRyksCi0JU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1NywgIkFjZXIgWDMyMDAiLCBBTEM4ODNfQVVUTyksCi0JU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1OCwgIkFjZXIgQVgxNzAwLVUzNzAwQSIsIEFMQzg4M19BVVRPKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTU3LCAiQWNlciBYMzIwMCIsIEFMQzg4Ml9BVVRPKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTU4LCAiQWNlciBBWDE3MDAtVTM3MDBBIiwgQUxDODgyX0FVVE8pLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNWUsICJBY2VyIEFzcGlyZSA2OTMwRyIsCiAJCUFMQzg4OF9BQ0VSX0FTUElSRV82NTMwRyksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE2NiwgIkFjZXIgQXNwaXJlIDY1MzBHIiwKIAkJQUxDODg4X0FDRVJfQVNQSVJFXzY1MzBHKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTQyLCAiQWNlciBBc3BpcmUgNzczMEciLAorCQlBTEM4ODhfQUNFUl9BU1BJUkVfNzczMEcpLAogCS8qIGRlZmF1bHQgQWNlciAtLSBkaXNhYmxlZCBhcyBpdCBjYXVzZXMgbW9yZSBwcm9ibGVtcy4KIAkgKiAgICBtb2RlbD1hdXRvIHNob3VsZCB3b3JrIGZpbmUgbm93CiAJICovCiAJLyogU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDI1LCAiQWNlciBsYXB0b3AiLCBBTEM4ODNfQUNFUiksICovCisKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMjBkLCAiRGVsbCBJbnNwaXJvbiA1MzAiLCBBTEM4ODhfNlNUX0RFTEwpLAorCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmEzZCwgIkhQIFBhdmlsbGlvbiIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTRmLCAiSFAgU2FtYmEiLCBBTEM4ODhfM1NUX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTYwLCAiSFAgTHVja25vdyIsIEFMQzg4OF8zU1RfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNjEsICJIUCBOZXR0bGUiLCBBTEM4ODNfNlNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE2NiwgIkhQIEFjYWNpYSIsIEFMQzg4OF8zU1RfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNzIsICJIUCBFZHVjLmFyIiwgQUxDODg4XzNTVF9IUCksCisKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgwNjBkLCAiQXN1cyBBN0oiLCBBTEM4ODJfQVNVU19BN0opLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyNDMsICJBc3VzIEE3SiIsIEFMQzg4Ml9BU1VTX0E3SiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNjMiwgIkFzdXMgQTdNIiwgQUxDODgyX0FTVVNfQTdNKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODczLCAiQXN1cyBNOTBWIiwgQUxDODg4X0FTVVNfTTkwViksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk3MSwgIkFzdXMgVzJKQyIsIEFMQzg4Ml9XMkpDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MTdmLCAiQXN1cyBQNUxEMiIsIEFMQzg4Ml82U1RfRElHKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWQ4LCAiQXN1cyBQNVdEIiwgQUxDODgyXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyNDksICJBc3VzIE0yQS1WTSBIRE1JIiwgQUxDODgzXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4Mjg0LCAiQXN1cyBaMzdFIiwgQUxDODgzXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyZmUsICJBc3VzIFA1US1FTSBIRE1JIiwgQUxDMTIwMF9BU1VTX1A1USksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODM1ZiwgIkFzdXMgRWVlIDE2MDEiLCBBTEM4ODhfQVNVU19FRUUxNjAxKSwKKworCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwNDcsICJTb255IFZhaW8gVFQiLCBBTEM4ODNfU09OWV9WQUlPX1RUKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHgwY2U4LCAiRm94Y29ubiBQMzVBWC1TIiwgQUxDODgzXzZTVF9ESUcpLAotCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDY2NjgsICJGb3hjb25uIiwgQUxDODgzXzZTVF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDY2NjgsICJGb3hjb25uIiwgQUxDODgyXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDcxLCAweDgyMjcsICJNaXRhYyA4MjgwMUgiLCBBTEM4ODNfTUlUQUMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDcxLCAweDgyNTMsICJNaXRhYyA4MjUyZCIsIEFMQzg4M19NSVRBQyksCiAJU05EX1BDSV9RVUlSSygweDEwNzEsIDB4ODI1OCwgIkV2ZXNoYW0gVm95YWVnZXIiLCBBTEM4ODNfTEFQVE9QX0VBUEQpLAogCVNORF9QQ0lfUVVJUksoMHgxMGYxLCAweDIzNTAsICJUWUFOLVMyMzUwIiwgQUxDODg4XzZTVF9ERUxMKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA4ZSwgMHg1MzRkLCBOVUxMLCBBTEM4ODNfM1NUXzZjaCksCi0JU05EX1BDSV9RVUlSSygweDE0NTgsIDB4YTAwMiwgIk1TSSIsIEFMQzg4M182U1RfRElHKSwKKwlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgUDM1IERTM1IiLCBBTEM4ODJfNlNUX0RJRyksCisKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgwMzQ5LCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDA0MGQsICJNU0kiLCBBTEM4ODNfVEFSR0FfMmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MDU3OSwgIk1TSSIsIEFMQzg4M19UQVJHQV8yY2hfRElHKSwKKwlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgyOGZiLCAiVGFyZ2EgVDgiLCBBTEM4ODJfVEFSR0EpLCAvKiBNU0ktMTA0OSBUOCAgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgyZmIzLCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDY2NjgsICJNU0kiLCBBTEM4ODJfNlNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MzcyOSwgIk1TSSBTNDIwIiwgQUxDODgzX1RBUkdBX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4Mzc4MywgIk5FQyBTOTcwIiwgQUxDODgzX1RBUkdBX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4M2I3ZiwgIk1TSSIsIEFMQzg4M19UQVJHQV8yY2hfRElHKSwKQEAgLTkxMzksNiArODgyMSw3IEBACiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4M2ZjMywgIk1TSSIsIEFMQzg4M19UQVJHQV9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDNmY2MsICJNU0kiLCBBTEM4ODNfVEFSR0FfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgzZmRmLCAiTVNJIiwgQUxDODgzX1RBUkdBX0RJRyksCisJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4NDJjZCwgIk1TSSIsIEFMQzg4M19UQVJHQV9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDQzMTQsICJNU0kiLCBBTEM4ODNfVEFSR0FfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHg0MzE5LCAiTVNJIiwgQUxDODgzX1RBUkdBX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4NDMyNCwgIk1TSSIsIEFMQzg4M19UQVJHQV9ESUcpLApAQCAtOTE1MiwxMSArODgzNSwxNSBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDczMjcsICJNU0kiLCBBTEM4ODNfNlNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4NzM1MCwgIk1TSSIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHhhNDIyLCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweGFhMDgsICJNU0kiLCBBTEM4ODNfVEFSR0FfMmNoX0RJRyksCisKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxMDgzLCAiQWJpdCBJUDM1LVBSTyIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTU1OCwgMHgwNzIxLCAiQ2xldm8gbGFwdG9wIE03MjBSIiwgQUxDODgzX0NMRVZPX003MjApLAogCVNORF9QQ0lfUVVJUksoMHgxNTU4LCAweDA3MjIsICJDbGV2byBsYXB0b3AgTTcyMFNSIiwgQUxDODgzX0NMRVZPX003MjApLAorCVNORF9QQ0lfUVVJUksoMHgxNTU4LCAweDU0MDksICJDbGV2byBsYXB0b3AgTTU0MFIiLCBBTEM4ODNfQ0xFVk9fTTU0MFIpLAogCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTU1OCwgIkNsZXZvIGxhcHRvcCIsIEFMQzg4M19MQVBUT1BfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDE1ZDksIDB4ODc4MCwgIlN1cGVybWljcm8gUERTQkEiLCBBTEM4ODNfM1NUXzZjaCksCisJLyogU05EX1BDSV9RVUlSSygweDE2MWYsIDB4MjA1NCwgIkFyaW1hIFc4MjAiLCBBTEM4ODJfQVJJTUEpLCAqLwogCVNORF9QQ0lfUVVJUksoMHgxNjFmLCAweDIwNTQsICJNZWRpb24gbGFwdG9wIiwgQUxDODgzX01FRElPTiksCiAJU05EX1BDSV9RVUlSS19NQVNLKDB4MTczNCwgMHhmZmYwLCAweDExMDAsICJGU0MgQU1JTE8gWGkvUGkyNXh4IiwKIAkJICAgICAgQUxDODgzX0ZVSklUU1VfUEkyNTE1KSwKQEAgLTkxNzEsMjQgKzg4NTgsMTg2IEBACiAJU05EX1BDSV9RVUlSSygweDE3YzAsIDB4NDA4NSwgIk1FRElPTiBNRDk2NjMwIiwgQUxDODg4X0xFTk9WT19NUzcxOTVfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdmMiwgMHg1MDAwLCAiQWxiYXRyb24gS0k2OTAtQU0yIiwgQUxDODgzXzZTVF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxOTkxLCAweDU2MjUsICJIYWllciBXNjYiLCBBTEM4ODNfSEFJRVJfVzY2KSwKKwogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweDAwMDEsICJERzMzQlVDIiwgQUxDODgzXzNTVF82Y2hfSU5URUwpLAogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweDAwMDIsICJERzMzRkJDIiwgQUxDODgzXzNTVF82Y2hfSU5URUwpLAogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweDI1MDMsICI4MjgwMUgiLCBBTEM4ODNfTUlUQUMpLAotCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweDAwMjIsICJEWDU4U08iLCBBTEM4ODNfM1NUXzZjaF9JTlRFTCksCisJU05EX1BDSV9RVUlSSygweDgwODYsIDB4MDAyMiwgIkRYNThTTyIsIEFMQzg4OV9JTlRFTCksCisJU05EX1BDSV9RVUlSSygweDgwODYsIDB4MDAyMSwgIkludGVsIEliZXhQZWFrIiwgQUxDODg5QV9JTlRFTCksCisJU05EX1BDSV9RVUlSSygweDgwODYsIDB4M2I1NiwgIkludGVsIEliZXhQZWFrIiwgQUxDODg5QV9JTlRFTCksCiAJU05EX1BDSV9RVUlSSygweDgwODYsIDB4ZDYwMSwgIkQxMDJHR0MiLCBBTEM4ODNfM1NUXzZjaCksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTA0NywgIlNvbnkgVmFpbyBUVCIsIEFMQzg4M19TT05ZX1ZBSU9fVFQpLAorCiAJe30KIH07CiAKLXN0YXRpYyBoZGFfbmlkX3QgYWxjODgzX3NsYXZlX2RpZ19vdXRzW10gPSB7Ci0JQUxDMTIwMF9ESUdPVVRfTklELCAwLAorLyogY29kZWMgU1NJRCB0YWJsZSBmb3IgSW50ZWwgTWFjICovCitzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODgyX3NzaWRfY2ZnX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDAwYTAsICJNYWNCb29rUHJvIDMsMSIsIEFMQzg4NV9NQlAzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgwMGExLCAiTWFjYm9vayIsIEFMQzg4NV9NQlAzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgwMGE0LCAiTWFjYm9va1BybyA0LDEiLCBBTEM4ODVfTUJQMyksCisJU05EX1BDSV9RVUlSSygweDEwNmIsIDB4MGMwMCwgIk1hYyBQcm8iLCBBTEM4ODVfTUFDUFJPKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgxMDAwLCAiaU1hYyAyNCIsIEFMQzg4NV9JTUFDMjQpLAorCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDI4MDAsICJBcHBsZVRWIiwgQUxDODg1X0lNQUMyNCksCisJU05EX1BDSV9RVUlSSygweDEwNmIsIDB4MmMwMCwgIk1hY2Jvb2tQcm8gcmV2MyIsIEFMQzg4NV9NQlAzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgzNjAwLCAiTWFjYm9vayAzLDEiLCBBTEM4ODlBX01CMzEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDM4MDAsICJNYWNib29rUHJvIDQsMSIsIEFMQzg4NV9NQlAzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgzZTAwLCAiaU1hYyAyNCBBbHVtaW51bSIsIEFMQzg4NV9JTUFDMjQpLAorCVNORF9QQ0lfUVVJUksoMHgxMDZiLCAweDNmMDAsICJNYWNib29rIDUsMSIsIEFMQzg4NV9NQjUpLAorCS8qIEZJWE1FOiBIUCBqYWNrIHNlbnNlIHNlZW1zIG5vdCB3b3JraW5nIGZvciBNQlAgNSwxLCBzbyBhcHBhcmVudGx5CisJICogbm8gcGVyZmVjdCBzb2x1dGlvbiB5ZXQKKwkgKi8KKwlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0MDAwLCAiTWFjYm9va1BybyA1LDEiLCBBTEM4ODVfTUI1KSwKKwl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IGFsYzEyMDBfc2xhdmVfZGlnX291dHNbXSA9IHsKLQlBTEM4ODNfRElHT1VUX05JRCwgMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgYWxjODgzX3ByZXNldHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgYWxjODgyX3ByZXNldHNbXSA9IHsKKwlbQUxDODgyXzNTVF9ESUddID0geworCQkubWl4ZXJzID0geyBhbGM4ODJfYmFzZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgyX2Jhc2VfaW5pdF92ZXJicywKKwkJCQlhbGM4ODJfYWRjMV9pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAorCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKKwkJLmRpZ19pbl9uaWQgPSBBTEM4ODJfRElHSU5fTklELAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgyX2NoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4Ml9jaF9tb2RlcywKKwkJLm5lZWRfZGFjX2ZpeCA9IDEsCisJCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAorCX0sCisJW0FMQzg4Ml82U1RfRElHXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjODgyX2Jhc2VfbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzg4Ml9iYXNlX2luaXRfdmVyYnMsCisJCQkJYWxjODgyX2FkYzFfaW5pdF92ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4Ml9kYWNfbmlkcyksCisJCS5kYWNfbmlkcyA9IGFsYzg4Ml9kYWNfbmlkcywKKwkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCisJCS5kaWdfaW5fbmlkID0gQUxDODgyX0RJR0lOX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4Ml9zaXhzdGFja19tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGM4ODJfc2l4c3RhY2tfbW9kZXMsCisJCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAorCX0sCisJW0FMQzg4Ml9BUklNQV0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzg4Ml9iYXNlX21peGVyLCBhbGM4ODJfY2htb2RlX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODJfYmFzZV9pbml0X3ZlcmJzLCBhbGM4ODJfYWRjMV9pbml0X3ZlcmJzLAorCQkJCWFsYzg4Ml9lYXBkX3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgyX3NpeHN0YWNrX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4Ml9zaXhzdGFja19tb2RlcywKKwkJLmlucHV0X211eCA9ICZhbGM4ODJfY2FwdHVyZV9zb3VyY2UsCisJfSwKKwlbQUxDODgyX1cySkNdID0geworCQkubWl4ZXJzID0geyBhbGM4ODJfdzJqY19taXhlciwgYWxjODgyX2NobW9kZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgyX2Jhc2VfaW5pdF92ZXJicywgYWxjODgyX2FkYzFfaW5pdF92ZXJicywKKwkJCQlhbGM4ODJfZWFwZF92ZXJicywgYWxjODgwX2dwaW8xX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODJfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM4ODJfZGFjX25pZHMsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODBfdGhyZWVzdGFja19tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGM4ODBfdGhyZWVzdGFja19tb2RlcywKKwkJLm5lZWRfZGFjX2ZpeCA9IDEsCisJCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAorCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKKwl9LAorCVtBTEM4ODVfTUJQM10gPSB7CisJCS5taXhlcnMgPSB7IGFsYzg4NV9tYnAzX21peGVyLCBhbGM4ODJfY2htb2RlX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODVfbWJwM19pbml0X3ZlcmJzLAorCQkJCWFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IDIsCisJCS5kYWNfbmlkcyA9IGFsYzg4Ml9kYWNfbmlkcywKKwkJLmhwX25pZCA9IDB4MDQsCisJCS5jaGFubmVsX21vZGUgPSBhbGM4ODVfbWJwXzRjaF9tb2RlcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4NV9tYnBfNGNoX21vZGVzKSwKKwkJLmlucHV0X211eCA9ICZhbGM4ODJfY2FwdHVyZV9zb3VyY2UsCisJCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAorCQkuZGlnX2luX25pZCA9IEFMQzg4Ml9ESUdJTl9OSUQsCisJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzg4NV9tYnAzX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKwl9LAorCVtBTEM4ODVfTUI1XSA9IHsKKwkJLm1peGVycyA9IHsgYWxjODg1X21iNV9taXhlciwgYWxjODgyX2NobW9kZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODg1X21iNV9pbml0X3ZlcmJzLAorCQkJCWFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjODg1X21iNV82Y2hfbW9kZXMsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODVfbWI1XzZjaF9tb2RlcyksCisJCS5pbnB1dF9tdXggPSAmbWI1X2NhcHR1cmVfc291cmNlLAorCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKKwkJLmRpZ19pbl9uaWQgPSBBTEM4ODJfRElHSU5fTklELAorCX0sCisJW0FMQzg4NV9NQUNQUk9dID0geworCQkubWl4ZXJzID0geyBhbGM4ODJfbWFjcHJvX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODJfbWFjcHJvX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODJfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM4ODJfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAorCQkuZGlnX2luX25pZCA9IEFMQzg4Ml9ESUdJTl9OSUQsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODJfY2hfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjODgyX2NoX21vZGVzLAorCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKKwkJLmluaXRfaG9vayA9IGFsYzg4NV9tYWNwcm9faW5pdF9ob29rLAorCX0sCisJW0FMQzg4NV9JTUFDMjRdID0geworCQkubWl4ZXJzID0geyBhbGM4ODVfaW1hYzI0X21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODVfaW1hYzI0X2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODJfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM4ODJfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAorCQkuZGlnX2luX25pZCA9IEFMQzg4Ml9ESUdJTl9OSUQsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODJfY2hfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjODgyX2NoX21vZGVzLAorCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjODg1X2ltYWMyNF9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsYzg4NV9pbWFjMjRfaW5pdF9ob29rLAorCX0sCisJW0FMQzg4Ml9UQVJHQV0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzg4Ml90YXJnYV9taXhlciwgYWxjODgyX2NobW9kZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgyX2Jhc2VfaW5pdF92ZXJicywgYWxjODgyX2FkYzFfaW5pdF92ZXJicywKKwkJCQlhbGM4ODBfZ3BpbzNfaW5pdF92ZXJicywgYWxjODgyX3RhcmdhX3ZlcmJzfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODJfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM4ODJfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODJfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGM4ODJfYWRjX25pZHMsCisJCS5jYXBzcmNfbmlkcyA9IGFsYzg4Ml9jYXBzcmNfbmlkcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4Ml8zU1RfNmNoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4Ml8zU1RfNmNoX21vZGVzLAorCQkubmVlZF9kYWNfZml4ID0gMSwKKwkJLmlucHV0X211eCA9ICZhbGM4ODJfY2FwdHVyZV9zb3VyY2UsCisJCS51bnNvbF9ldmVudCA9IGFsYzg4Ml90YXJnYV91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjODgyX3RhcmdhX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjODgyX3RhcmdhX2F1dG9tdXRlLAorCX0sCisJW0FMQzg4Ml9BU1VTX0E3Sl0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzg4Ml9hc3VzX2E3al9taXhlciwgYWxjODgyX2NobW9kZV9taXhlciB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjODgyX2Jhc2VfaW5pdF92ZXJicywgYWxjODgyX2FkYzFfaW5pdF92ZXJicywKKwkJCQlhbGM4ODJfYXN1c19hN2pfdmVyYnN9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4Ml9kYWNfbmlkcyksCisJCS5kYWNfbmlkcyA9IGFsYzg4Ml9kYWNfbmlkcywKKwkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4Ml9hZGNfbmlkcyksCisJCS5hZGNfbmlkcyA9IGFsYzg4Ml9hZGNfbmlkcywKKwkJLmNhcHNyY19uaWRzID0gYWxjODgyX2NhcHNyY19uaWRzLAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgyXzNTVF82Y2hfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjODgyXzNTVF82Y2hfbW9kZXMsCisJCS5uZWVkX2RhY19maXggPSAxLAorCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKKwl9LAorCVtBTEM4ODJfQVNVU19BN01dID0geworCQkubWl4ZXJzID0geyBhbGM4ODJfYXN1c19hN21fbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzg4Ml9iYXNlX2luaXRfdmVyYnMsIGFsYzg4Ml9hZGMxX2luaXRfdmVyYnMsCisJCQkJYWxjODgyX2VhcGRfdmVyYnMsIGFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzLAorCQkJCWFsYzg4Ml9hc3VzX2E3bV92ZXJicyB9LAorCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzg4Ml9kYWNfbmlkcyksCisJCS5kYWNfbmlkcyA9IGFsYzg4Ml9kYWNfbmlkcywKKwkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODBfdGhyZWVzdGFja19tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGM4ODBfdGhyZWVzdGFja19tb2RlcywKKwkJLm5lZWRfZGFjX2ZpeCA9IDEsCisJCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAorCX0sCiAJW0FMQzg4M18zU1RfMmNoX0RJR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M18zU1RfMmNoX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGM4ODNfaW5pdF92ZXJicyB9LApAQCAtOTIzNSw2ICs5MDg0LDQ2IEBACiAJCS5uZWVkX2RhY19maXggPSAxLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4M18zc3RhY2tfNmNoX2ludGVsLAogCX0sCisJW0FMQzg4OUFfSU5URUxdID0geworCQkubWl4ZXJzID0geyBhbGM4ODVfOGNoX2ludGVsX21peGVyLCBhbGM4ODNfY2htb2RlX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODVfaW5pdF92ZXJicywgYWxjODg1X2luaXRfaW5wdXRfdmVyYnMsCisJCQkJYWxjX2hwMTVfdW5zb2xfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODNfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4OV9hZGNfbmlkcyksCisJCS5hZGNfbmlkcyA9IGFsYzg4OV9hZGNfbmlkcywKKwkJLmRpZ19vdXRfbmlkID0gQUxDODgzX0RJR09VVF9OSUQsCisJCS5kaWdfaW5fbmlkID0gQUxDODgzX0RJR0lOX05JRCwKKwkJLnNsYXZlX2RpZ19vdXRzID0gYWxjODgzX3NsYXZlX2RpZ19vdXRzLAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODg5XzhjaF9pbnRlbF9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGM4ODlfOGNoX2ludGVsX21vZGVzLAorCQkuY2Fwc3JjX25pZHMgPSBhbGM4ODlfY2Fwc3JjX25pZHMsCisJCS5pbnB1dF9tdXggPSAmYWxjODg5X2NhcHR1cmVfc291cmNlLAorCQkuc2V0dXAgPSBhbGM4ODlfYXV0b211dGVfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkubmVlZF9kYWNfZml4ID0gMSwKKwl9LAorCVtBTEM4ODlfSU5URUxdID0geworCQkubWl4ZXJzID0geyBhbGM4ODVfOGNoX2ludGVsX21peGVyLCBhbGM4ODNfY2htb2RlX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODVfaW5pdF92ZXJicywgYWxjODg5X2luaXRfaW5wdXRfdmVyYnMsCisJCQkJYWxjODg5X2VhcGRfdmVyYnMsIGFsY19ocDE1X3Vuc29sX3ZlcmJzfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODNfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM4ODNfZGFjX25pZHMsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4OV9hZGNfbmlkcyksCisJCS5hZGNfbmlkcyA9IGFsYzg4OV9hZGNfbmlkcywKKwkJLmRpZ19vdXRfbmlkID0gQUxDODgzX0RJR09VVF9OSUQsCisJCS5kaWdfaW5fbmlkID0gQUxDODgzX0RJR0lOX05JRCwKKwkJLnNsYXZlX2RpZ19vdXRzID0gYWxjODgzX3NsYXZlX2RpZ19vdXRzLAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODg5XzhjaF9pbnRlbF9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGM4ODlfOGNoX2ludGVsX21vZGVzLAorCQkuY2Fwc3JjX25pZHMgPSBhbGM4ODlfY2Fwc3JjX25pZHMsCisJCS5pbnB1dF9tdXggPSAmYWxjODg5X2NhcHR1cmVfc291cmNlLAorCQkuc2V0dXAgPSBhbGM4ODlfYXV0b211dGVfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGM4ODlfaW50ZWxfaW5pdF9ob29rLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkubmVlZF9kYWNfZml4ID0gMSwKKwl9LAogCVtBTEM4ODNfNlNUX0RJR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M19iYXNlX21peGVyLCBhbGM4ODNfY2htb2RlX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGM4ODNfaW5pdF92ZXJicyB9LApAQCAtOTI1OCw3ICs5MTQ3LDggQEAKIAkJLm5lZWRfZGFjX2ZpeCA9IDEsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGM4ODNfdGFyZ2FfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODNfdGFyZ2FfaW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGM4ODJfdGFyZ2Ffc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGM4ODJfdGFyZ2FfYXV0b211dGUsCiAJfSwKIAlbQUxDODgzX1RBUkdBXzJjaF9ESUddID0gewogCQkubWl4ZXJzID0geyBhbGM4ODNfdGFyZ2FfMmNoX21peGVyfSwKQEAgLTkyNzMsNyArOTE2Myw4IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsYzg4M190YXJnYV91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzg4M190YXJnYV9pbml0X2hvb2ssCisJCS5zZXR1cCA9IGFsYzg4Ml90YXJnYV9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsYzg4Ml90YXJnYV9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODNfVEFSR0FfOGNoX0RJR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M19iYXNlX21peGVyLCBhbGM4ODNfY2htb2RlX21peGVyIH0sCkBAIC05MjkxLDcgKzkxODIsOCBAQAogCQkubmVlZF9kYWNfZml4ID0gMSwKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsYzg4M190YXJnYV91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzg4M190YXJnYV9pbml0X2hvb2ssCisJCS5zZXR1cCA9IGFsYzg4Ml90YXJnYV9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsYzg4Ml90YXJnYV9hdXRvbXV0ZSwKIAl9LAogCVtBTEM4ODNfQUNFUl0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M19iYXNlX21peGVyIH0sCkBAIC05MzE3LDcgKzkyMDksOCBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzXzNTVF8yY2hfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjODgzX2FjZXJfYXNwaXJlX2luaXRfaG9vaywKKwkJLnNldHVwID0gYWxjODgzX2FjZXJfYXNwaXJlX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKIAl9LAogCVtBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEddID0gewogCQkubWl4ZXJzID0geyBhbGM4ODhfYmFzZV9taXhlciwKQEAgLTkzMzcsNyArOTIzMCw4IEBACiAJCQlBUlJBWV9TSVpFKGFsYzg4OF8yX2NhcHR1cmVfc291cmNlcyksCiAJCS5pbnB1dF9tdXggPSBhbGM4ODhfMl9jYXB0dXJlX3NvdXJjZXMsCiAJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODhfYWNlcl9hc3BpcmVfNDkzMGdfaW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGM4ODhfYWNlcl9hc3BpcmVfNDkzMGdfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4OF9BQ0VSX0FTUElSRV82NTMwR10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4OF9hY2VyX2FzcGlyZV82NTMwX21peGVyIH0sCkBAIC05MzU1LDcgKzkyNDksOCBAQAogCQkJQVJSQVlfU0laRShhbGM4ODhfMl9jYXB0dXJlX3NvdXJjZXMpLAogCQkuaW5wdXRfbXV4ID0gYWxjODg4X2FjZXJfYXNwaXJlXzY1MzBfc291cmNlcywKIAkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzg4OF9hY2VyX2FzcGlyZV82NTMwZ19pbml0X2hvb2ssCisJCS5zZXR1cCA9IGFsYzg4OF9hY2VyX2FzcGlyZV82NTMwZ19zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCiAJfSwKIAlbQUxDODg4X0FDRVJfQVNQSVJFXzg5MzBHXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODg4X2Jhc2VfbWl4ZXIsCkBAIC05Mzc2LDcgKzkyNzEsMjggQEAKIAkJCUFSUkFZX1NJWkUoYWxjODg5X2NhcHR1cmVfc291cmNlcyksCiAJCS5pbnB1dF9tdXggPSBhbGM4ODlfY2FwdHVyZV9zb3VyY2VzLAogCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX2luaXRfaG9vaywKKwkJLnNldHVwID0gYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKwl9LAorCVtBTEM4ODhfQUNFUl9BU1BJUkVfNzczMEddID0geworCQkubWl4ZXJzID0geyBhbGM4ODNfM1NUXzZjaF9taXhlciwKKwkJCQlhbGM4ODNfY2htb2RlX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODNfaW5pdF92ZXJicywgYWxjODgwX2dwaW8xX2luaXRfdmVyYnMsCisJCQkJYWxjODg4X2FjZXJfYXNwaXJlXzc3MzBHX3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgzX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4ODNfYWRjX25pZHNfcmV2KSwKKwkJLmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzX3JldiwKKwkJLmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzX3JldiwKKwkJLmRpZ19vdXRfbmlkID0gQUxDODgzX0RJR09VVF9OSUQsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfM1NUXzZjaF9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzZjaF9tb2RlcywKKwkJLm5lZWRfZGFjX2ZpeCA9IDEsCisJCS5jb25zdF9jaGFubmVsX2NvdW50ID0gNiwKKwkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCisJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzg4OF9hY2VyX2FzcGlyZV82NTMwZ19zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCiAJfSwKIAlbQUxDODgzX01FRElPTl0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M19maXZlc3RhY2tfbWl4ZXIsCkBAIC05NDAxLDcgKzkzMTcsOCBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzXzNTVF8yY2hfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjODgzX21lZGlvbl9tZDJfaW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGM4ODNfbWVkaW9uX21kMl9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCiAJfSwKIAlbQUxDODgzX0xBUFRPUF9FQVBEXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgzX2Jhc2VfbWl4ZXIgfSwKQEAgLTk0MTIsNiArOTMyOSwyMSBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzXzNTVF8yY2hfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAogCX0sCisJW0FMQzg4M19DTEVWT19NNTQwUl0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzg4M18zU1RfNmNoX21peGVyLCBhbGM4ODNfY2htb2RlX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODNfaW5pdF92ZXJicywgYWxjODgzX2NsZXZvX201NDByX3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgzX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODgzX2RhY19uaWRzLAorCQkuZGlnX291dF9uaWQgPSBBTEM4ODNfRElHT1VUX05JRCwKKwkJLmRpZ19pbl9uaWQgPSBBTEM4ODNfRElHSU5fTklELAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgzXzNTVF82Y2hfY2xldm9fbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzXzNTVF82Y2hfY2xldm9fbW9kZXMsCisJCS5uZWVkX2RhY19maXggPSAxLAorCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKKwkJLyogVGhpcyBtYWNoaW5lIGhhcyB0aGUgaGFyZHdhcmUgSFAgYXV0by1tdXRpbmcsIHRodXMKKwkJICogd2UgbmVlZCBubyBzb2Z0d2FyZSBtdXRlIHZpYSB1bnNvbCBldmVudAorCQkgKi8KKwl9LAogCVtBTEM4ODNfQ0xFVk9fTTcyMF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M19jbGV2b19tNzIwX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGM4ODNfaW5pdF92ZXJicywgYWxjODgzX2NsZXZvX203MjBfdmVyYnMgfSwKQEAgLTk0MjIsNiArOTM1NCw3IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsYzg4M19jbGV2b19tNzIwX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM4ODNfY2xldm9fbTcyMF9zZXR1cCwKIAkJLmluaXRfaG9vayA9IGFsYzg4M19jbGV2b19tNzIwX2luaXRfaG9vaywKIAl9LAogCVtBTEM4ODNfTEVOT1ZPXzEwMUVfMmNoXSA9IHsKQEAgLTk0NDcsNyArOTM4MCw4IEBACiAJCS5uZWVkX2RhY19maXggPSAxLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19sZW5vdm9fbmIwNzYzX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjODgzX21lZGlvbl9tZDJfaW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGM4ODNfbWVkaW9uX21kMl9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCiAJfSwKIAlbQUxDODg4X0xFTk9WT19NUzcxOTVfRElHXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgzXzNTVF82Y2hfbWl4ZXIsIGFsYzg4M19jaG1vZGVfbWl4ZXIgfSwKQEAgLTk0NzIsNyArOTQwNiw4IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODNfaGFpZXJfdzY2X2luaXRfaG9vaywKKwkJLnNldHVwID0gYWxjODgzX2hhaWVyX3c2Nl9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCiAJfSwKIAlbQUxDODg4XzNTVF9IUF0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M18zU1RfNmNoX21peGVyLCBhbGM4ODNfY2htb2RlX21peGVyIH0sCkBAIC05NDg0LDcgKzk0MTksOCBAQAogCQkubmVlZF9kYWNfZml4ID0gMSwKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODhfM3N0X2hwX2luaXRfaG9vaywKKwkJLnNldHVwID0gYWxjODg4XzNzdF9ocF9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCiAJfSwKIAlbQUxDODg4XzZTVF9ERUxMXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgzX2Jhc2VfbWl4ZXIsIGFsYzg4M19jaG1vZGVfbWl4ZXIgfSwKQEAgLTk0OTcsNyArOTQzMyw4IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfc2l4c3RhY2tfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODgzX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjODg4XzZzdF9kZWxsX2luaXRfaG9vaywKKwkJLnNldHVwID0gYWxjODg4XzZzdF9kZWxsX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKIAl9LAogCVtBTEM4ODNfTUlUQUNdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODNfbWl0YWNfbWl4ZXIgfSwKQEAgLTk1MDgsNyArOTQ0NSw4IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODNfbWl0YWNfaW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGM4ODNfbWl0YWNfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4M19GVUpJVFNVX1BJMjUxNV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M18yY2hfZnVqaXRzdV9waTI1MTVfbWl4ZXIgfSwKQEAgLTk1MjEsNyArOTQ1OSw4IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODNfM1NUXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODNfZnVqaXRzdV9waTI1MTVfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODNfMmNoX2Z1aml0c3VfcGkyNTE1X2luaXRfaG9vaywKKwkJLnNldHVwID0gYWxjODgzXzJjaF9mdWppdHN1X3BpMjUxNV9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCiAJfSwKIAlbQUxDODg4X0ZVSklUU1VfWEEzNTMwXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODg4X2Jhc2VfbWl4ZXIsIGFsYzg4M19jaG1vZGVfbWl4ZXIgfSwKQEAgLTk1MzksNyArOTQ3OCw4IEBACiAJCQlBUlJBWV9TSVpFKGFsYzg4OF8yX2NhcHR1cmVfc291cmNlcyksCiAJCS5pbnB1dF9tdXggPSBhbGM4ODhfMl9jYXB0dXJlX3NvdXJjZXMsCiAJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODhfZnVqaXRzdV94YTM1MzBfaW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGM4ODhfZnVqaXRzdV94YTM1MzBfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4OF9MRU5PVk9fU0tZXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODg4X2xlbm92b19za3lfbWl4ZXIsIGFsYzg4M19jaG1vZGVfbWl4ZXIgfSwKQEAgLTk1NTIsNyArOTQ5Miw4IEBACiAJCS5uZWVkX2RhY19maXggPSAxLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19sZW5vdm9fc2t5X2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjODg4X2xlbm92b19za3lfaW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGM4ODhfbGVub3ZvX3NreV9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19hdXRvbXV0ZV9hbXAsCiAJfSwKIAlbQUxDODg4X0FTVVNfTTkwVl0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M18zU1RfNmNoX21peGVyLCBhbGM4ODNfY2htb2RlX21peGVyIH0sCkBAIC05NTY1LDggKzk1MDYsOSBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzXzNTVF82Y2hfbW9kZXMsCiAJCS5uZWVkX2RhY19maXggPSAxLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19mdWppdHN1X3BpMjUxNV9jYXB0dXJlX3NvdXJjZSwKLQkJLnVuc29sX2V2ZW50ID0gYWxjODgzX21vZGUyX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjODgzX21vZGUyX2luaXRob29rLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM4ODNfbW9kZTJfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDODg4X0FTVVNfRUVFMTYwMV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4M19hc3VzX2VlZTE2MDFfbWl4ZXIgfSwKQEAgLTk2MTksMTUgKzk1NjEsNDUgQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4M18zU1RfMmNoX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzg4M192YWlvdHRfaW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGM4ODNfdmFpb3R0X3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKIAl9LAogfTsKIAogCiAvKgorICogUGluIGNvbmZpZyBmaXhlcworICovCitlbnVtIHsKKwlQSU5GSVhfQUJJVF9BVzlEX01BWAorfTsKKworc3RhdGljIHN0cnVjdCBhbGNfcGluY2ZnIGFsYzg4Ml9hYml0X2F3OWRfcGluZml4W10gPSB7CisJeyAweDE1LCAweDAxMDgwMTA0IH0sIC8qIHNpZGUgKi8KKwl7IDB4MTYsIDB4MDEwMTEwMTIgfSwgLyogcmVhciAqLworCXsgMHgxNywgMHgwMTAxNjAxMSB9LCAvKiBjbGZlICovCisJeyB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFsY19waW5jZmcgKmFsYzg4Ml9waW5fZml4ZXNbXSA9IHsKKwlbUElORklYX0FCSVRfQVc5RF9NQVhdID0gYWxjODgyX2FiaXRfYXc5ZF9waW5maXgsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODgyX3BpbmZpeF90YmxbXSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxMDdhLCAiQWJpdCBBVzlELU1BWCIsIFBJTkZJWF9BQklUX0FXOURfTUFYKSwKKwl7fQorfTsKKworLyoKICAqIEJJT1MgYXV0byBjb25maWd1cmF0aW9uCiAgKi8KLXN0YXRpYyB2b2lkIGFsYzg4M19hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKK3N0YXRpYyBpbnQgYWxjODgyX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCit7CisJcmV0dXJuIGFsY19hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKGNvZGVjLCBjZmcsIDB4MGIsIDB4MjMsIDB4MjIpOworfQorCitzdGF0aWMgdm9pZCBhbGM4ODJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCSAgICAgIGhkYV9uaWRfdCBuaWQsIGludCBwaW5fdHlwZSwKIAkJCQkJICAgICAgaW50IGRhY19pZHgpCiB7CkBAIC05NjQ0LDcgKzk2MTYsNyBAQAogCiB9CiAKLXN0YXRpYyB2b2lkIGFsYzg4M19hdXRvX2luaXRfbXVsdGlfb3V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODgyX2F1dG9faW5pdF9tdWx0aV9vdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaW50IGk7CkBAIC05NjUzLDEyICs5NjI1LDEyIEBACiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbaV07CiAJCWludCBwaW5fdHlwZSA9IGdldF9waW5fdHlwZShzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3R5cGUpOwogCQlpZiAobmlkKQotCQkJYWxjODgzX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIHBpbl90eXBlLAorCQkJYWxjODgyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIHBpbl90eXBlLAogCQkJCQkJCSAgaSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhbGM4ODNfYXV0b19pbml0X2hwX291dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzg4Ml9hdXRvX2luaXRfaHBfb3V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWhkYV9uaWRfdCBwaW47CkBAIC05NjY2LDkxICs5NjM4LDE5MSBAQAogCXBpbiA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKIAlpZiAocGluKSAvKiBjb25uZWN0IHRvIGZyb250ICovCiAJCS8qIHVzZSBkYWMgMCAqLwotCQlhbGM4ODNfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX0hQLCAwKTsKKwkJYWxjODgyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9IUCwgMCk7CiAJcGluID0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF07CiAJaWYgKHBpbikKLQkJYWxjODgzX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9PVVQsIDApOworCQlhbGM4ODJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwgMCk7CiB9CiAKLSNkZWZpbmUgYWxjODgzX2lzX2lucHV0X3BpbihuaWQpCWFsYzg4MF9pc19pbnB1dF9waW4obmlkKQotI2RlZmluZSBBTEM4ODNfUElOX0NEX05JRAkJQUxDODgwX1BJTl9DRF9OSUQKLQotc3RhdGljIHZvaWQgYWxjODgzX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGM4ODJfYXV0b19pbml0X2FuYWxvZ19pbnB1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKLQkJaWYgKGFsYzg4M19pc19pbnB1dF9waW4obmlkKSkgewotCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7Ci0JCQlpZiAobmlkICE9IEFMQzg4M19QSU5fQ0RfTklEICYmCi0JCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCisJCWlmICghbmlkKQorCQkJY29udGludWU7CisJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIGkpOworCQlpZiAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKQorCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCQkJICAgIEFNUF9PVVRfTVVURSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhbGM4ODJfYXV0b19pbml0X2lucHV0X3NyYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgYzsKKworCWZvciAoYyA9IDA7IGMgPCBzcGVjLT5udW1fYWRjX25pZHM7IGMrKykgeworCQloZGFfbmlkX3QgY29ubl9saXN0W0hEQV9NQVhfTlVNX0lOUFVUU107CisJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5jYXBzcmNfbmlkc1tjXTsKKwkJdW5zaWduZWQgaW50IG11eF9pZHg7CisJCWNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4OworCQlpbnQgY29ubnMsIG11dGUsIGlkeCwgaXRlbTsKKworCQljb25ucyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsIGNvbm5fbGlzdCwKKwkJCQkJCUFSUkFZX1NJWkUoY29ubl9saXN0KSk7CisJCWlmIChjb25ucyA8IDApCisJCQljb250aW51ZTsKKwkJbXV4X2lkeCA9IGMgPj0gc3BlYy0+bnVtX211eF9kZWZzID8gMCA6IGM7CisJCWltdXggPSAmc3BlYy0+aW5wdXRfbXV4W211eF9pZHhdOworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGNvbm5zOyBpZHgrKykgeworCQkJLyogaWYgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBpcyB0aGUgc2VsZWN0ZWQgb25lLAorCQkJICogdW5tdXRlIGl0IGFzIGRlZmF1bHQgLSBvdGhlcndpc2UgbXV0ZSBpdAorCQkJICovCisJCQltdXRlID0gQU1QX0lOX01VVEUoaWR4KTsKKwkJCWZvciAoaXRlbSA9IDA7IGl0ZW0gPCBpbXV4LT5udW1faXRlbXM7IGl0ZW0rKykgeworCQkJCWlmIChpbXV4LT5pdGVtc1tpdGVtXS5pbmRleCA9PSBpZHgpIHsKKwkJCQkJaWYgKHNwZWMtPmN1cl9tdXhbY10gPT0gaXRlbSkKKwkJCQkJCW11dGUgPSBBTVBfSU5fVU5NVVRFKGlkeCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCS8qIGNoZWNrIGlmIHdlIGhhdmUgYSBzZWxlY3RvciBvciBtaXhlcgorCQkJICogd2UgY291bGQgY2hlY2sgZm9yIHRoZSB3aWRnZXQgdHlwZSBpbnN0ZWFkLCBidXQKKwkJCSAqIGp1c3QgY2hlY2sgZm9yIEFtcC1JbiBwcmVzZW5jZSAoaW4gY2FzZSBvZiBtaXhlcgorCQkJICogd2l0aG91dCBhbXAtaW4gdGhlcmUgaXMgc29tZXRoaW5nIHdyb25nLCB0aGlzCisJCQkgKiBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgdXNlZCBvciBjYXBzcmMgbmlkIGlzIHdyb25nKQorCQkJICovCisJCQlpZiAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9JTl9BTVApCiAJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKKwkJCQkJCSAgICBtdXRlKTsKKwkJCWVsc2UgaWYgKG11dGUgIT0gQU1QX0lOX01VVEUoaWR4KSkKKwkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCisJCQkJCQkgICAgaWR4KTsKIAkJfQogCX0KIH0KIAotI2RlZmluZSBhbGM4ODNfYXV0b19pbml0X2lucHV0X3NyYwlhbGM4ODJfYXV0b19pbml0X2lucHV0X3NyYwotCi0vKiBhbG1vc3QgaWRlbnRpY2FsIHdpdGggQUxDODgwIHBhcnNlci4uLiAqLwotc3RhdGljIGludCBhbGM4ODNfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCisvKiBhZGQgbWljIGJvb3N0cyBpZiBuZWVkZWQgKi8KK3N0YXRpYyBpbnQgYWxjX2F1dG9fYWRkX21pY19ib29zdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgZXJyID0gYWxjODgwX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKLQlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKLQlpbnQgaTsKKwlpbnQgZXJyOworCWhkYV9uaWRfdCBuaWQ7CiAKKwluaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXTsKKwlpZiAobmlkICYmIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX0lOX0FNUCkpIHsKKwkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLAorCQkJCSAgIk1pYyBCb29zdCIsCisJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwgSERBX0lOUFVUKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisJbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW0FVVE9fUElOX0ZST05UX01JQ107CisJaWYgKG5pZCAmJiAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9JTl9BTVApKSB7CisJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwKKwkJCQkgICJGcm9udCBNaWMgQm9vc3QiLAorCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsIEhEQV9JTlBVVCkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCisvKiBhbG1vc3QgaWRlbnRpY2FsIHdpdGggQUxDODgwIHBhcnNlci4uLiAqLworc3RhdGljIGludCBhbGM4ODJfcGFyc2VfYXV0b19jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RhdGljIGhkYV9uaWRfdCBhbGM4ODJfaWdub3JlW10gPSB7IDB4MWQsIDAgfTsKKwlpbnQgaSwgZXJyOworCisJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCisJCQkJCSAgIGFsYzg4Ml9pZ25vcmUpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVsc2UgaWYgKCFlcnIpCi0JCXJldHVybiAwOyAvKiBubyBjb25maWcgZm91bmQgKi8KKwlpZiAoIXNwZWMtPmF1dG9jZmcubGluZV9vdXRzKQorCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBCSU9TIHBpbiBjb25maWcgKi8KKworCWVyciA9IGFsYzg4MF9hdXRvX2ZpbGxfZGFjX25pZHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IGFsYzg4MF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gYWxjODgwX2F1dG9fY3JlYXRlX2V4dHJhX291dChzcGVjLAorCQkJCQkgICBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSwKKwkJCQkJICAgIlNwZWFrZXIiKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBhbGM4ODBfYXV0b19jcmVhdGVfZXh0cmFfb3V0KHNwZWMsIHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSwKKwkJCQkJICAgIkhlYWRwaG9uZSIpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IGFsYzg4Ml9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CisKKwkvKiBjaGVjayBtdWx0aXBsZSBTUERJRi1vdXQgKGZvciByZWNlbnQgY29kZWNzKSAqLworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzOyBpKyspIHsKKwkJaGRhX25pZF90IGRpZ19uaWQ7CisJCWVyciA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLAorCQkJCQkgICAgICBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluc1tpXSwKKwkJCQkJICAgICAgJmRpZ19uaWQsIDEpOworCQlpZiAoZXJyIDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWkpCisJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IGRpZ19uaWQ7CisJCWVsc2UgeworCQkJc3BlYy0+bXVsdGlvdXQuc2xhdmVfZGlnX291dHMgPSBzcGVjLT5zbGF2ZV9kaWdfb3V0czsKKwkJCXNwZWMtPnNsYXZlX2RpZ19vdXRzW2kgLSAxXSA9IGRpZ19uaWQ7CisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHNwZWMtPnNsYXZlX2RpZ19vdXRzKSAtIDEpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKKwkJc3BlYy0+ZGlnX2luX25pZCA9IEFMQzg4MF9ESUdJTl9OSUQ7CisKKwlpZiAoc3BlYy0+a2N0bHMubGlzdCkKKwkJYWRkX21peGVyKHNwZWMsIHNwZWMtPmtjdGxzLmxpc3QpOworCisJYWRkX3ZlcmIoc3BlYywgYWxjODgzX2F1dG9faW5pdF92ZXJicyk7CisJLyogaWYgQURDIDB4MDcgaXMgYXZhaWxhYmxlLCBpbml0aWFsaXplIGl0LCB0b28gKi8KKwlpZiAoZ2V0X3djYXBzX3R5cGUoZ2V0X3djYXBzKGNvZGVjLCAweDA3KSkgPT0gQUNfV0lEX0FVRF9JTikKKwkJYWRkX3ZlcmIoc3BlYywgYWxjODgyX2FkYzFfaW5pdF92ZXJicyk7CisKKwlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CisKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCk7CiAKIAllcnIgPSBhbGNfYXV0b19hZGRfbWljX2Jvb3N0KGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCS8qIGhhY2sgLSBvdmVycmlkZSB0aGUgaW5pdCB2ZXJicyAqLwotCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBhbGM4ODNfYXV0b19pbml0X3ZlcmJzOwotCi0JLyogc2V0dXAgaW5wdXRfbXV4IGZvciBBTEM4ODkgKi8KLQlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwODg5KSB7Ci0JCS8qIGRpZ2l0YWwtbWljIGlucHV0IHBpbiBpcyBleGNsdWRlZCBpbiBhbGM4ODBfYXV0b19jcmVhdGUuLigpCi0JCSAqIGJlY2F1c2UgaXQncyB1bmRlciAweDE4Ci0JCSAqLwotCQlpZiAoY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX01JQ10gPT0gMHgxMiB8fAotCQkgICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0ZST05UX01JQ10gPT0gMHgxMikgewotCQkJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwotCQkJZm9yIChpID0gMTsgaSA8IDM7IGkrKykKLQkJCQltZW1jcHkoJnNwZWMtPnByaXZhdGVfaW11eFtpXSwKLQkJCQkgICAgICAgJnNwZWMtPnByaXZhdGVfaW11eFswXSwKLQkJCQkgICAgICAgc2l6ZW9mKHNwZWMtPnByaXZhdGVfaW11eFswXSkpOwotCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9ICJJbnQgRE1pYyI7Ci0JCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0gMHgwYjsKLQkJCWltdXgtPm51bV9pdGVtcysrOwotCQkJc3BlYy0+bnVtX211eF9kZWZzID0gMzsKLQkJCXNwZWMtPmlucHV0X211eCA9IHNwZWMtPnByaXZhdGVfaW11eDsKLQkJfQotCX0KLQogCXJldHVybiAxOyAvKiBjb25maWcgZm91bmQgKi8KIH0KIAogLyogYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBmb3IgYXV0by1jb25maWd1cmF0aW9uIG1vZGVsICovCi1zdGF0aWMgdm9pZCBhbGM4ODNfYXV0b19pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODgyX2F1dG9faW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlhbGM4ODNfYXV0b19pbml0X211bHRpX291dChjb2RlYyk7Ci0JYWxjODgzX2F1dG9faW5pdF9ocF9vdXQoY29kZWMpOwotCWFsYzg4M19hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKLQlhbGM4ODNfYXV0b19pbml0X2lucHV0X3NyYyhjb2RlYyk7CisJYWxjODgyX2F1dG9faW5pdF9tdWx0aV9vdXQoY29kZWMpOworCWFsYzg4Ml9hdXRvX2luaXRfaHBfb3V0KGNvZGVjKTsKKwlhbGM4ODJfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CisJYWxjODgyX2F1dG9faW5pdF9pbnB1dF9zcmMoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKIAkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAotc3RhdGljIGludCBwYXRjaF9hbGM4ODMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgaW50IHBhdGNoX2FsYzg4MihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWM7CiAJaW50IGVyciwgYm9hcmRfY29uZmlnOwpAQCAtOTc2MSwyOCArOTgzMywzNSBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCi0JYWxjX2ZpeF9wbGxfaW5pdChjb2RlYywgMHgyMCwgMHgwYSwgMTApOwotCi0JYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIEFMQzg4M19NT0RFTF9MQVNULAotCQkJCQkJICBhbGM4ODNfbW9kZWxzLAotCQkJCQkJICBhbGM4ODNfY2ZnX3RibCk7Ci0JaWYgKGJvYXJkX2NvbmZpZyA8IDAgfHwgYm9hcmRfY29uZmlnID49IEFMQzg4M19NT0RFTF9MQVNUKSB7Ci0JCS8qIFBpY2sgdXAgc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBseSBQQ0kgU1NJRCAqLwotCQlzd2l0Y2ggKGNvZGVjLT5zdWJzeXN0ZW1faWQpIHsKLQkJY2FzZSAweDEwNmIzNjAwOiAvKiBNYWNib29rIDMuMSAqLwotCQkJYm9hcmRfY29uZmlnID0gQUxDODg5QV9NQjMxOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgJXMsIHRyeWluZyAiCi0JCQkJImF1dG8tcHJvYmUgZnJvbSBCSU9TLi4uXG4iLCBjb2RlYy0+Y2hpcF9uYW1lKTsKLQkJCWJvYXJkX2NvbmZpZyA9IEFMQzg4M19BVVRPOwotCQl9CisJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CisJY2FzZSAweDEwZWMwODgyOgorCWNhc2UgMHgxMGVjMDg4NToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogQUxDODgzIGFuZCB2YXJpYW50cyAqLworCQlhbGNfZml4X3BsbF9pbml0KGNvZGVjLCAweDIwLCAweDBhLCAxMCk7CisJCWJyZWFrOwogCX0KIAotCWlmIChib2FyZF9jb25maWcgPT0gQUxDODgzX0FVVE8pIHsKKwlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgQUxDODgyX01PREVMX0xBU1QsCisJCQkJCQkgIGFsYzg4Ml9tb2RlbHMsCisJCQkJCQkgIGFsYzg4Ml9jZmdfdGJsKTsKKworCWlmIChib2FyZF9jb25maWcgPCAwIHx8IGJvYXJkX2NvbmZpZyA+PSBBTEM4ODJfTU9ERUxfTEFTVCkKKwkJYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb2RlY19zaWRfY29uZmlnKGNvZGVjLAorCQkJQUxDODgyX01PREVMX0xBU1QsIGFsYzg4Ml9tb2RlbHMsIGFsYzg4Ml9zc2lkX2NmZ190YmwpOworCisJaWYgKGJvYXJkX2NvbmZpZyA8IDAgfHwgYm9hcmRfY29uZmlnID49IEFMQzg4Ml9NT0RFTF9MQVNUKSB7CisJCXByaW50ayhLRVJOX0lORk8gImhkYV9jb2RlYzogJXM6IEJJT1MgYXV0by1wcm9iaW5nLlxuIiwKKwkJICAgICAgIGNvZGVjLT5jaGlwX25hbWUpOworCQlib2FyZF9jb25maWcgPSBBTEM4ODJfQVVUTzsKKwl9CisKKwlhbGNfZml4X3BpbmNmZyhjb2RlYywgYWxjODgyX3BpbmZpeF90YmwsIGFsYzg4Ml9waW5fZml4ZXMpOworCisJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4ODJfQVVUTykgewogCQkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KLQkJZXJyID0gYWxjODgzX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKKwkJZXJyID0gYWxjODgyX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCWFsY19mcmVlKGNvZGVjKTsKIAkJCXJldHVybiBlcnI7CkBAIC05NzkwLDcgKzk4NjksNyBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJICAgICAgICJoZGFfY29kZWM6IENhbm5vdCBzZXQgdXAgY29uZmlndXJhdGlvbiAiCiAJCQkgICAgICAgImZyb20gQklPUy4gIFVzaW5nIGJhc2UgbW9kZS4uLlxuIik7Ci0JCQlib2FyZF9jb25maWcgPSBBTEM4ODNfM1NUXzJjaF9ESUc7CisJCQlib2FyZF9jb25maWcgPSBBTEM4ODJfM1NUX0RJRzsKIAkJfQogCX0KIApAQCAtOTgwMCw2MyArOTg3OSw2MSBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmIChib2FyZF9jb25maWcgIT0gQUxDODgzX0FVVE8pCi0JCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODgzX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CisJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM4ODJfQVVUTykKKwkJc2V0dXBfcHJlc2V0KGNvZGVjLCAmYWxjODgyX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKLQlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKLQljYXNlIDB4MTBlYzA4ODg6Ci0JCWlmICghc3BlYy0+bnVtX2FkY19uaWRzKSB7Ci0JCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkcyk7Ci0JCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkczsKLQkJfQotCQlpZiAoIXNwZWMtPmNhcHNyY19uaWRzKQotCQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHM7CisJc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGM4ODJfcGNtX2FuYWxvZ19wbGF5YmFjazsKKwlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjODgyX3BjbV9hbmFsb2dfY2FwdHVyZTsKKwkvKiBGSVhNRTogc2V0dXAgREFDNSAqLworCS8qc3BlYy0+c3RyZWFtX2FuYWxvZ19hbHRfcGxheWJhY2sgPSAmYWxjODgwX3BjbV9hbmFsb2dfYWx0X3BsYXliYWNrOyovCisJc3BlYy0+c3RyZWFtX2FuYWxvZ19hbHRfY2FwdHVyZSA9ICZhbGM4ODBfcGNtX2FuYWxvZ19hbHRfY2FwdHVyZTsKKworCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzg4Ml9wY21fZGlnaXRhbF9wbGF5YmFjazsKKwlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzg4Ml9wY21fZGlnaXRhbF9jYXB0dXJlOworCisJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDg4OCkKIAkJc3BlYy0+aW5pdF9hbXAgPSBBTENfSU5JVF9ERUZBVUxUOyAvKiBhbHdheXMgaW5pdGlhbGl6ZSAqLwotCQlicmVhazsKLQljYXNlIDB4MTBlYzA4ODk6Ci0JCWlmICghc3BlYy0+bnVtX2FkY19uaWRzKSB7Ci0JCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4OV9hZGNfbmlkcyk7Ci0JCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4OV9hZGNfbmlkczsKKworCWlmICghc3BlYy0+YWRjX25pZHMgJiYgc3BlYy0+aW5wdXRfbXV4KSB7CisJCWludCBpOworCQlzcGVjLT5udW1fYWRjX25pZHMgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbGM4ODJfYWRjX25pZHMpOyBpKyspIHsKKwkJCWhkYV9uaWRfdCBjYXA7CisJCQloZGFfbmlkX3QgbmlkID0gYWxjODgyX2FkY19uaWRzW2ldOworCQkJdW5zaWduZWQgaW50IHdjYXAgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CisJCQkvKiBnZXQgdHlwZSAqLworCQkJd2NhcCA9IGdldF93Y2Fwc190eXBlKHdjYXApOworCQkJaWYgKHdjYXAgIT0gQUNfV0lEX0FVRF9JTikKKwkJCQljb250aW51ZTsKKwkJCXNwZWMtPnByaXZhdGVfYWRjX25pZHNbc3BlYy0+bnVtX2FkY19uaWRzXSA9IG5pZDsKKwkJCWVyciA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsICZjYXAsIDEpOworCQkJaWYgKGVyciA8IDApCisJCQkJY29udGludWU7CisJCQlzcGVjLT5wcml2YXRlX2NhcHNyY19uaWRzW3NwZWMtPm51bV9hZGNfbmlkc10gPSBjYXA7CisJCQlzcGVjLT5udW1fYWRjX25pZHMrKzsKIAkJfQotCQlpZiAoIXNwZWMtPmNhcHNyY19uaWRzKQotCQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4ODlfY2Fwc3JjX25pZHM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWlmICghc3BlYy0+bnVtX2FkY19uaWRzKSB7Ci0JCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkcyk7Ci0JCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkczsKLQkJfQotCQlpZiAoIXNwZWMtPmNhcHNyY19uaWRzKQotCQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHM7Ci0JCWJyZWFrOworCQlzcGVjLT5hZGNfbmlkcyA9IHNwZWMtPnByaXZhdGVfYWRjX25pZHM7CisJCXNwZWMtPmNhcHNyY19uaWRzID0gc3BlYy0+cHJpdmF0ZV9jYXBzcmNfbmlkczsKIAl9CiAKLQlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJmFsYzg4M19wY21fYW5hbG9nX3BsYXliYWNrOwotCXNwZWMtPnN0cmVhbV9hbmFsb2dfY2FwdHVyZSA9ICZhbGM4ODNfcGNtX2FuYWxvZ19jYXB0dXJlOwotCXNwZWMtPnN0cmVhbV9hbmFsb2dfYWx0X2NhcHR1cmUgPSAmYWxjODgzX3BjbV9hbmFsb2dfYWx0X2NhcHR1cmU7Ci0KLQlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGM4ODNfcGNtX2RpZ2l0YWxfcGxheWJhY2s7Ci0Jc3BlYy0+c3RyZWFtX2RpZ2l0YWxfY2FwdHVyZSA9ICZhbGM4ODNfcGNtX2RpZ2l0YWxfY2FwdHVyZTsKLQotCWlmICghc3BlYy0+Y2FwX21peGVyKQotCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfY2FwdHVyZV9taXhlcihjb2RlYyk7CiAJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MGM7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWxjX3BhdGNoX29wczsKLQlpZiAoYm9hcmRfY29uZmlnID09IEFMQzg4M19BVVRPKQotCQlzcGVjLT5pbml0X2hvb2sgPSBhbGM4ODNfYXV0b19pbml0OwotCisJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4ODJfQVVUTykKKwkJc3BlYy0+aW5pdF9ob29rID0gYWxjODgyX2F1dG9faW5pdDsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJaWYgKCFzcGVjLT5sb29wYmFjay5hbXBsaXN0KQotCQlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gYWxjODgzX2xvb3BiYWNrczsKKwkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzg4Ml9sb29wYmFja3M7CiAjZW5kaWYKIAljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKIAogCXJldHVybiAwOwogfQogCisKIC8qCiAgKiBBTEMyNjIgc3VwcG9ydAogICovCkBAIC0xMDAzMiwxMyArMTAxMDksMTIgQEAKIH07CiAKIC8qIG11dGUvdW5tdXRlIGludGVybmFsIHNwZWFrZXIgYWNjb3JkaW5nIHRvIHRoZSBocCBqYWNrIGFuZCBtdXRlIHN0YXRlICovCi1zdGF0aWMgdm9pZCBhbGMyNjJfaHBfdDU3MzVfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjMjYyX2hwX3Q1NzM1X3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MGM7IC8qIEhBQ0s6IG5vdCBhY3R1YWxseSBhIHBpbiAqLwotCWFsY19hdXRvbXV0ZV9hbXAoY29kZWMpOwogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX2hwX3Q1NzM1X21peGVyW10gPSB7CkBAIC0xMDE5NSwyMiArMTAyNzEsMjAgQEAKIAlhbGMyNjJfaGlwcG9fYXV0b211dGUoY29kZWMpOwogfQogCi1zdGF0aWMgdm9pZCBhbGMyNjJfaGlwcG9faW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjMjYyX2hpcHBvX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7Ci0JYWxjMjYyX2hpcHBvX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAotc3RhdGljIHZvaWQgYWxjMjYyX2hpcHBvMV9pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGMyNjJfaGlwcG8xX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxYjsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7Ci0JYWxjMjYyX2hpcHBvX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAogCkBAIC0xMDI2NywxMyArMTAzNDEsMTIgQEAKIH07CiAKIC8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KLXN0YXRpYyB2b2lkIGFsYzI2Ml90eWFuX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzI2Ml90eWFuX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxYjsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTU7Ci0JYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CiB9CiAKIApAQCAtMTAzNjUsMTIgKzEwNDM4LDYgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX2hpcHBvX3Vuc29sX3ZlcmJzW10gPSB7Ci0JezB4MTUsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlR9LAotCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCi0Je30KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX2hpcHBvMV91bnNvbF92ZXJic1tdID0gewogCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4YzB9LAogCXsweDFiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCkBAIC0xMDM5MSwxNCArMTA0NTgsNiBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYyX2RtaWNfY2FwdHVyZV9zb3VyY2UgPSB7Ci0JLm51bV9pdGVtcyA9IDIsCi0JLml0ZW1zID0gewotCQl7ICJJbnQgRE1pYyIsIDB4OSB9LAotCQl7ICJNaWMiLCAweDAgfSwKLQl9LAotfTsKLQogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2Ml90b3NoaWJhX3MwNl9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTA0MjAsMzUgKzEwNDc5LDE3IEBACiAJe30KIH07CiAKLXN0YXRpYyB2b2lkIGFsYzI2Ml9kbWljX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXVuc2lnbmVkIGludCBwcmVzZW50OwotCi0JcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxOCwgMCwKLQkJCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyMiwgMCwKLQkJCQlBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgcHJlc2VudCA/IDB4MCA6IDB4MDkpOwotfQotCi0KLS8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KLXN0YXRpYyB2b2lkIGFsYzI2Ml90b3NoaWJhX3MwNl91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlpZiAoKHJlcyA+PiAyNikgPT0gQUxDODgwX01JQ19FVkVOVCkKLQkJYWxjMjYyX2RtaWNfYXV0b211dGUoY29kZWMpOwotCWVsc2UKLQkJYWxjX3NrdV91bnNvbF9ldmVudChjb2RlYywgcmVzKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjMjYyX3Rvc2hpYmFfczA2X2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzI2Ml90b3NoaWJhX3MwNl9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAogCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTU7CiAJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OwotCWFsY19hdXRvbXV0ZV9waW4oY29kZWMpOwotCWFsYzI2Ml9kbWljX2F1dG9tdXRlKGNvZGVjKTsKKwlzcGVjLT5leHRfbWljLnBpbiA9IDB4MTg7CisJc3BlYy0+ZXh0X21pYy5tdXhfaWR4ID0gMDsKKwlzcGVjLT5pbnRfbWljLnBpbiA9IDB4MTI7CisJc3BlYy0+aW50X21pYy5tdXhfaWR4ID0gOTsKKwlzcGVjLT5hdXRvX21pYyA9IDE7CiB9CiAKIC8qCkBAIC0xMDg2NiwxMDQgKzEwOTA3LDExMSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKKy8qIFdlIHVzZSB0d28gbWl4ZXJzIGRlcGVuZGluZyBvbiB0aGUgb3V0cHV0IHBpbjsgMHgxNiBpcyBhIG1vbm8gb3V0cHV0CisgKiBhbmQgdGh1cyBpdCdzIGJvdW5kIHdpdGggYSBkaWZmZXJlbnQgbWl4ZXIuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgd2hpY2ggbWl4ZXIgYW1wIHNob3VsZCBiZSB1c2VkLgorICovCitzdGF0aWMgaW50IGFsYzI2Ml9jaGVja192b2xiaXQoaGRhX25pZF90IG5pZCkKK3sKKwlpZiAoIW5pZCkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAobmlkID09IDB4MTYpCisJCXJldHVybiAyOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYWxjMjYyX2FkZF9vdXRfdm9sX2N0bChzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkJICBjb25zdCBjaGFyICpwZngsIGludCAqdmJpdHMpCit7CisJY2hhciBuYW1lWzMyXTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgdmJpdDsKKworCXZiaXQgPSBhbGMyNjJfY2hlY2tfdm9sYml0KG5pZCk7CisJaWYgKCF2Yml0KQorCQlyZXR1cm4gMDsKKwlpZiAoKnZiaXRzICYgdmJpdCkgLyogYSB2b2x1bWUgY29udHJvbCBmb3IgdGhpcyBtaXhlciBhbHJlYWR5IHRoZXJlICovCisJCXJldHVybiAwOworCSp2Yml0cyB8PSB2Yml0OworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7CisJaWYgKHZiaXQgPT0gMikKKwkJdmFsID0gSERBX0NPTVBPU0VfQU1QX1ZBTCgweDBlLCAyLCAwLCBIREFfT1VUUFVUKTsKKwllbHNlCisJCXZhbCA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgwYywgMywgMCwgSERBX09VVFBVVCk7CisJcmV0dXJuIGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwgdmFsKTsKK30KKworc3RhdGljIGludCBhbGMyNjJfYWRkX291dF9zd19jdGwoc3RydWN0IGFsY19zcGVjICpzcGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJCSBjb25zdCBjaGFyICpwZngpCit7CisJY2hhciBuYW1lWzMyXTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmICghbmlkKQorCQlyZXR1cm4gMDsKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyBQbGF5YmFjayBTd2l0Y2giLCBwZngpOworCWlmIChuaWQgPT0gMHgxNikKKwkJdmFsID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDIsIDAsIEhEQV9PVVRQVVQpOworCWVsc2UKKwkJdmFsID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsIEhEQV9PVVRQVVQpOworCXJldHVybiBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLCB2YWwpOworfQorCiAvKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLwogc3RhdGljIGludCBhbGMyNjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAogCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQloZGFfbmlkX3QgbmlkOworCWNvbnN0IGNoYXIgKnBmeDsKKwlpbnQgdmJpdHM7CiAJaW50IGVycjsKIAogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gMTsJLyogb25seSB1c2Ugb25lIGRhYyAqLwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+cHJpdmF0ZV9kYWNfbmlkczsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSA9IDI7CiAKLQluaWQgPSBjZmctPmxpbmVfb3V0X3BpbnNbMF07Ci0JaWYgKG5pZCkgewotCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsCi0JCQkJICAiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwKLQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwoMHgwYywgMywgMCwgSERBX09VVFBVVCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsCi0JCQkJICAiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLCBIREFfT1VUUFVUKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQluaWQgPSBjZmctPnNwZWFrZXJfcGluc1swXTsKLQlpZiAobmlkKSB7Ci0JCWlmIChuaWQgPT0gMHgxNikgewotCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLAotCQkJCQkgICJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCi0JCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTCgweDBlLCAyLCAwLAotCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAotCQkJCQkgICJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCi0JCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDIsIDAsCi0JCQkJCQkJICAgICAgSERBX09VVFBVVCkpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKLQkJfSBlbHNlIHsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsCi0JCQkJCSAgIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwKLQkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCW5pZCA9IGNmZy0+aHBfcGluc1swXTsKLQlpZiAobmlkKSB7Ci0JCS8qIHNwZWMtPm11bHRpb3V0LmhwX25pZCA9IDI7ICovCi0JCWlmIChuaWQgPT0gMHgxNikgewotCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLAotCQkJCQkgICJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MGUsIDIsIDAsCi0JCQkJCQkJICAgICAgSERBX09VVFBVVCkpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsCi0JCQkJCSAgIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLAotCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAyLCAwLAotCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7Ci0JCX0gZWxzZSB7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAotCQkJCQkgICJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwKLQkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFsYzI2Ml9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCi0JCQkJCQljb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGFsYzg4MF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzcGVjLCBjZmcpOworCWlmICghY2ZnLT5zcGVha2VyX3BpbnNbMF0gJiYgIWNmZy0+aHBfcGluc1swXSkKKwkJcGZ4ID0gIk1hc3RlciI7CisJZWxzZSBpZiAoY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKQorCQlwZnggPSAiU3BlYWtlciI7CisJZWxzZQorCQlwZnggPSAiRnJvbnQiOworCWVyciA9IGFsYzI2Ml9hZGRfb3V0X3N3X2N0bChzcGVjLCBjZmctPmxpbmVfb3V0X3BpbnNbMF0sIHBmeCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JLyogZGlnaXRhbC1taWMgaW5wdXQgcGluIGlzIGV4Y2x1ZGVkIGluIGFsYzg4MF9hdXRvX2NyZWF0ZS4uKCkKLQkgKiBiZWNhdXNlIGl0J3MgdW5kZXIgMHgxOAotCSAqLwotCWlmIChjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSA9PSAweDEyIHx8Ci0JICAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9GUk9OVF9NSUNdID09IDB4MTIpIHsKLQkJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwotCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0gIkludCBNaWMiOwotCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0gMHgwOTsKLQkJaW11eC0+bnVtX2l0ZW1zKys7Ci0JfQorCWVyciA9IGFsYzI2Ml9hZGRfb3V0X3N3X2N0bChzcGVjLCBjZmctPnNwZWFrZXJfcGluc1swXSwgIlNwZWFrZXIiKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBhbGMyNjJfYWRkX291dF9zd19jdGwoc3BlYywgY2ZnLT5ocF9waW5zWzBdLCAiSGVhZHBob25lIik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwl2Yml0cyA9IGFsYzI2Ml9jaGVja192b2xiaXQoY2ZnLT5saW5lX291dF9waW5zWzBdKSB8CisJCWFsYzI2Ml9jaGVja192b2xiaXQoY2ZnLT5zcGVha2VyX3BpbnNbMF0pIHwKKwkJYWxjMjYyX2NoZWNrX3ZvbGJpdChjZmctPmhwX3BpbnNbMF0pOworCWlmICh2Yml0cyA9PSAxIHx8IHZiaXRzID09IDIpCisJCXBmeCA9ICJNYXN0ZXIiOyAvKiBvbmx5IG9uZSBtaXhlciBpcyB1c2VkICovCisJZWxzZSBpZiAoY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKQorCQlwZnggPSAiU3BlYWtlciI7CisJZWxzZQorCQlwZnggPSAiRnJvbnQiOworCXZiaXRzID0gMDsKKwllcnIgPSBhbGMyNjJfYWRkX291dF92b2xfY3RsKHNwZWMsIGNmZy0+bGluZV9vdXRfcGluc1swXSwgcGZ4LCAmdmJpdHMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IGFsYzI2Ml9hZGRfb3V0X3ZvbF9jdGwoc3BlYywgY2ZnLT5zcGVha2VyX3BpbnNbMF0sICJTcGVha2VyIiwKKwkJCQkgICAgICZ2Yml0cyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gYWxjMjYyX2FkZF9vdXRfdm9sX2N0bChzcGVjLCBjZmctPmhwX3BpbnNbMF0sICJIZWFkcGhvbmUiLAorCQkJCSAgICAgJnZiaXRzKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBhbGMyNjJfYXV0b19jcmVhdGVfaW5wdXRfY3RscyBcCisJYWxjODgwX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMKIAogLyoKICAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKQEAgLTExMjgxLDcgKzExMzI5LDcgQEAKIAllcnIgPSBhbGMyNjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVyciA9IGFsYzI2Ml9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJZXJyID0gYWxjMjYyX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMTE0MTIsNyArMTE0NjAsNyBAQAogCX0sCiAJW0FMQzI2Ml9ISVBQT10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2Ml9oaXBwb19taXhlciB9LAotCQkuaW5pdF92ZXJicyA9IHsgYWxjMjYyX2luaXRfdmVyYnMsIGFsYzI2Ml9oaXBwb191bnNvbF92ZXJic30sCisJCS5pbml0X3ZlcmJzID0geyBhbGMyNjJfaW5pdF92ZXJicywgYWxjX2hwMTVfdW5zb2xfdmVyYnN9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2Ml9kYWNfbmlkcyksCiAJCS5kYWNfbmlkcyA9IGFsYzI2Ml9kYWNfbmlkcywKIAkJLmhwX25pZCA9IDB4MDMsCkBAIC0xMTQyMSw3ICsxMTQ2OSw4IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjJfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjMjYyX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfaGlwcG9fdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGMyNjJfaGlwcG9faW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGMyNjJfaGlwcG9fc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGMyNjJfaGlwcG9fYXV0b211dGUsCiAJfSwKIAlbQUxDMjYyX0hJUFBPXzFdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjJfaGlwcG8xX21peGVyIH0sCkBAIC0xMTQzNCw3ICsxMTQ4Myw4IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjJfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjMjYyX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfaGlwcG9fdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGMyNjJfaGlwcG8xX2luaXRfaG9vaywKKwkJLnNldHVwID0gYWxjMjYyX2hpcHBvMV9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsYzI2Ml9oaXBwb19hdXRvbXV0ZSwKIAl9LAogCVtBTEMyNjJfRlVKSVRTVV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2Ml9mdWppdHN1X21peGVyIH0sCkBAIC0xMTQ5Nyw3ICsxMTU0Nyw4IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjJfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjMjYyX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjMjYyX2hwX3Q1NzM1X2luaXRfaG9vaywKKwkJLnNldHVwID0gYWxjMjYyX2hwX3Q1NzM1X3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKIAl9LAogCVtBTEMyNjJfSFBfUlA1NzAwXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYyX2hwX3JwNTcwMF9taXhlciB9LApAQCAtMTE1MjgsMTEgKzExNTc5LDEzIEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjJfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjMjYyX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfaGlwcG9fdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGMyNjJfaGlwcG9faW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGMyNjJfaGlwcG9fc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGMyNjJfaGlwcG9fYXV0b211dGUsCiAJfSwKIAlbQUxDMjYyX0JFTlFfVDMxXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYyX2JlbnFfdDMxX21peGVyIH0sCi0JCS5pbml0X3ZlcmJzID0geyBhbGMyNjJfaW5pdF92ZXJicywgYWxjMjYyX2JlbnFfdDMxX0VBUERfdmVyYnMsIGFsYzI2Ml9oaXBwb191bnNvbF92ZXJicyB9LAorCQkuaW5pdF92ZXJicyA9IHsgYWxjMjYyX2luaXRfdmVyYnMsIGFsYzI2Ml9iZW5xX3QzMV9FQVBEX3ZlcmJzLAorCQkJCWFsY19ocDE1X3Vuc29sX3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjYyX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjMjYyX2RhY19uaWRzLAogCQkuaHBfbmlkID0gMHgwMywKQEAgLTExNTQwLDcgKzExNTkzLDggQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2Ml9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjJfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsYzI2Ml9oaXBwb191bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzI2Ml9oaXBwb19pbml0X2hvb2ssCisJCS5zZXR1cCA9IGFsYzI2Ml9oaXBwb19zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsYzI2Ml9oaXBwb19hdXRvbXV0ZSwKIAl9LAogCVtBTEMyNjJfVUxUUkFdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjJfdWx0cmFfbWl4ZXIgfSwKQEAgLTExNTkyLDkgKzExNjQ2LDkgQEAKIAkJLmRpZ19vdXRfbmlkID0gQUxDMjYyX0RJR09VVF9OSUQsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjJfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYyX21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzI2Ml9kbWljX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfdG9zaGliYV9zMDZfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGMyNjJfdG9zaGliYV9zMDZfaW5pdF9ob29rLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGMyNjJfdG9zaGliYV9zMDZfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjYyX1RPU0hJQkFfUlgxXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYyX3Rvc2hpYmFfcngxX21peGVyIH0sCkBAIC0xMTYwNiw3ICsxMTY2MCw4IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjJfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjMjYyX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGMyNjJfaGlwcG9fdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGMyNjJfaGlwcG9faW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGMyNjJfaGlwcG9fc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGMyNjJfaGlwcG9fYXV0b211dGUsCiAJfSwKIAlbQUxDMjYyX1RZQU5dID0gewogCQkubWl4ZXJzID0geyBhbGMyNjJfdHlhbl9taXhlciB9LApAQCAtMTE2MTksNyArMTE2NzQsOCBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYyX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzI2Ml9jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzI2Ml90eWFuX2luaXRfaG9vaywKKwkJLnNldHVwID0gYWxjMjYyX3R5YW5fc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiB9OwogCkBAIC0xMTY1NCw4ICsxMTcxMCw4IEBACiAJCQkJCQkgIGFsYzI2Ml9jZmdfdGJsKTsKIAogCWlmIChib2FyZF9jb25maWcgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgJXMsICIKLQkJICAgICAgICJ0cnlpbmcgYXV0by1wcm9iZSBmcm9tIEJJT1MuLi5cbiIsIGNvZGVjLT5jaGlwX25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6ICVzOiBCSU9TIGF1dG8tcHJvYmluZy5cbiIsCisJCSAgICAgICBjb2RlYy0+Y2hpcF9uYW1lKTsKIAkJYm9hcmRfY29uZmlnID0gQUxDMjYyX0FVVE87CiAJfQogCkBAIC0xMTY4Miw3ICsxMTczOCw3IEBACiAJfQogCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEMyNjJfQVVUTykKLQkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGMyNjJfcHJlc2V0c1tib2FyZF9jb25maWddKTsKKwkJc2V0dXBfcHJlc2V0KGNvZGVjLCAmYWxjMjYyX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CiAKIAlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJmFsYzI2Ml9wY21fYW5hbG9nX3BsYXliYWNrOwogCXNwZWMtPnN0cmVhbV9hbmFsb2dfY2FwdHVyZSA9ICZhbGMyNjJfcGNtX2FuYWxvZ19jYXB0dXJlOwpAQCAtMTE3MDgsNyArMTE3NjQsNyBAQAogCQkJdW5zaWduZWQgaW50IHdjYXAgPSBnZXRfd2NhcHMoY29kZWMsIDB4MDcpOwogCiAJCQkvKiBnZXQgdHlwZSAqLwotCQkJd2NhcCA9ICh3Y2FwICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7CisJCQl3Y2FwID0gZ2V0X3djYXBzX3R5cGUod2NhcCk7CiAJCQlpZiAod2NhcCAhPSBBQ19XSURfQVVEX0lOKSB7CiAJCQkJc3BlYy0+YWRjX25pZHMgPSBhbGMyNjJfYWRjX25pZHNfYWx0OwogCQkJCXNwZWMtPm51bV9hZGNfbmlkcyA9CkBAIC0xMTcyMyw3ICsxMTc3OSw3IEBACiAJCX0KIAl9CiAJaWYgKCFzcGVjLT5jYXBfbWl4ZXIgJiYgIXNwZWMtPm5vX2FuYWxvZykKLQkJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJCXNldF9jYXB0dXJlX21peGVyKGNvZGVjKTsKIAlpZiAoIXNwZWMtPm5vX2FuYWxvZykKIAkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKQEAgLTExODE1LDE0ICsxMTg3MSw2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2OF9hY2VyX2xjX2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAyLAotCS5pdGVtcyA9IHsKLQkJeyAiaS1NaWMiLCAweDYgfSwKLQkJeyAiRS1NaWMiLCAweDAgfSwKLQl9LAotfTsKLQogLyogQWNlciBzcGVjaWZpYyAqLwogLyogYmluZCB2b2x1bWVzIG9mIGJvdGggTklEIDB4MDIgYW5kIDB4MDMgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX2JpbmRfY3RscyBhbGMyNjhfYWNlcl9iaW5kX21hc3Rlcl92b2wgPSB7CkBAIC0xMTk0MSw3ICsxMTk4OSw4IEBACiAKIC8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KICNkZWZpbmUgYWxjMjY4X3Rvc2hpYmFfdW5zb2xfZXZlbnQJYWxjMjYyX2hpcHBvX3Vuc29sX2V2ZW50Ci0jZGVmaW5lIGFsYzI2OF90b3NoaWJhX2luaXRfaG9vawlhbGMyNjJfaGlwcG9faW5pdF9ob29rCisjZGVmaW5lIGFsYzI2OF90b3NoaWJhX3NldHVwCQlhbGMyNjJfaGlwcG9fc2V0dXAKKyNkZWZpbmUgYWxjMjY4X3Rvc2hpYmFfYXV0b211dGUJCWFsYzI2Ml9oaXBwb19hdXRvbXV0ZQogCiBzdGF0aWMgdm9pZCBhbGMyNjhfYWNlcl91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IHJlcykKQEAgLTExOTcxLDMwICsxMjAyMCwzMyBAQAogCQkJCUFNUF9JTl9NVVRFKDApLCBiaXRzKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBhbGMyNjhfYWNlcl9taWNfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JdW5zaWduZWQgaW50IHByZXNlbnQ7Ci0KLQlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE4LCAwLAotCQkJCUFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjMsIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAotCQkJICAgIHByZXNlbnQgPyAweDAgOiAweDYpOwotfQotCiBzdGF0aWMgdm9pZCBhbGMyNjhfYWNlcl9sY191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkgICAgdW5zaWduZWQgaW50IHJlcykKIHsKLQlpZiAoKHJlcyA+PiAyNikgPT0gQUxDODgwX0hQX0VWRU5UKQorCXN3aXRjaCAocmVzID4+IDI2KSB7CisJY2FzZSBBTEM4ODBfSFBfRVZFTlQ6CiAJCWFsYzI2OF9hc3BpcmVfb25lX3NwZWFrZXJfYXV0b211dGUoY29kZWMpOwotCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfTUlDX0VWRU5UKQotCQlhbGMyNjhfYWNlcl9taWNfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwljYXNlIEFMQzg4MF9NSUNfRVZFTlQ6CisJCWFsY19taWNfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFsYzI2OF9hY2VyX2xjX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKKwlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOworCXNwZWMtPmludF9taWMucGluID0gMHgxMjsKKwlzcGVjLT5pbnRfbWljLm11eF9pZHggPSA2OworCXNwZWMtPmF1dG9fbWljID0gMTsKIH0KIAogc3RhdGljIHZvaWQgYWxjMjY4X2FjZXJfbGNfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCWFsYzI2OF9hc3BpcmVfb25lX3NwZWFrZXJfYXV0b211dGUoY29kZWMpOwotCWFsYzI2OF9hY2VyX21pY19hdXRvbXV0ZShjb2RlYyk7CisJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjhfZGVsbF9taXhlcltdID0gewpAQCAtMTIwMTIsMTcgKzEyMDY0LDIyIEBACiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAogCXsweDE1LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9IUF9FVkVOVCB8IEFDX1VTUlNQX0VOfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBTEM4ODBfTUlDX0VWRU5UIHwgQUNfVVNSU1BfRU59LAogCXsgfQogfTsKIAogLyogbXV0ZS91bm11dGUgaW50ZXJuYWwgc3BlYWtlciBhY2NvcmRpbmcgdG8gdGhlIGhwIGphY2sgYW5kIG11dGUgc3RhdGUgKi8KLXN0YXRpYyB2b2lkIGFsYzI2OF9kZWxsX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzI2OF9kZWxsX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7Ci0JYWxjX2F1dG9tdXRlX3Bpbihjb2RlYyk7CisJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OworCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CisJc3BlYy0+aW50X21pYy5waW4gPSAweDE5OworCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDE7CisJc3BlYy0+YXV0b19taWMgPSAxOwogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY3X3F1YW50YV9pbDFfbWl4ZXJbXSA9IHsKQEAgLTEyMDQzLDM4ICsxMjEwMCwxNiBAQAogCXsgfQogfTsKIAotc3RhdGljIHZvaWQgYWxjMjY3X3F1YW50YV9pbDFfbWljX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXVuc2lnbmVkIGludCBwcmVzZW50OwotCi0JcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxOCwgMCwKLQkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjMsIDAsCi0JCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCi0JCQkgICAgcHJlc2VudCA/IDB4MDAgOiAweDAxKTsKLX0KLQotc3RhdGljIHZvaWQgYWxjMjY3X3F1YW50YV9pbDFfaW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjMjY3X3F1YW50YV9pbDFfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0KIAlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE1OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKLQlhbGNfYXV0b211dGVfcGluKGNvZGVjKTsKLQlhbGMyNjdfcXVhbnRhX2lsMV9taWNfYXV0b211dGUoY29kZWMpOwotfQotCi1zdGF0aWMgdm9pZCBhbGMyNjdfcXVhbnRhX2lsMV91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkJICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjMjY3X3F1YW50YV9pbDFfbWljX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYWxjX3NrdV91bnNvbF9ldmVudChjb2RlYywgcmVzKTsKLQkJYnJlYWs7Ci0JfQorCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKKwlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOworCXNwZWMtPmludF9taWMucGluID0gMHgxOTsKKwlzcGVjLT5pbnRfbWljLm11eF9pZHggPSAxOworCXNwZWMtPmF1dG9fbWljID0gMTsKIH0KIAogLyoKQEAgLTEyMTU0LDIxICsxMjE4OSwxNiBAQAogCXsgfQogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OF9jYXB0dXJlX25vc3JjX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDIzLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MjMsIDB4MCwgSERBX09VVFBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OF9jYXB0dXJlX2FsdF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgyMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDIzLCAweDAsIEhEQV9PVVRQVVQpLAotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS8qIFRoZSBtdWx0aXBsZSAiQ2FwdHVyZSBTb3VyY2UiIGNvbnRyb2xzIGNvbmZ1c2UgYWxzYW1peGVyCi0JCSAqIFNvIGNhbGwgc29tZXdoYXQgZGlmZmVyZW50Li4KLQkJICovCi0JCS8qIC5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwgKi8KLQkJLm5hbWUgPSAiSW5wdXQgU291cmNlIiwKLQkJLmNvdW50ID0gMSwKLQkJLmluZm8gPSBhbGNfbXV4X2VudW1faW5mbywKLQkJLmdldCA9IGFsY19tdXhfZW51bV9nZXQsCi0JCS5wdXQgPSBhbGNfbXV4X2VudW1fcHV0LAotCX0sCisJX0RFRklORV9DQVBTUkMoMSksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTIxNzcsMTggKzEyMjA3LDcgQEAKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDIzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDEsIDB4MjQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDEsIDB4MjQsIDB4MCwgSERBX09VVFBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLyogVGhlIG11bHRpcGxlICJDYXB0dXJlIFNvdXJjZSIgY29udHJvbHMgY29uZnVzZSBhbHNhbWl4ZXIKLQkJICogU28gY2FsbCBzb21ld2hhdCBkaWZmZXJlbnQuLgotCQkgKi8KLQkJLyogLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLCAqLwotCQkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLAotCQkuY291bnQgPSAyLAotCQkuaW5mbyA9IGFsY19tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gYWxjX211eF9lbnVtX2dldCwKLQkJLnB1dCA9IGFsY19tdXhfZW51bV9wdXQsCi0JfSwKKwlfREVGSU5FX0NBUFNSQygyKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xMjI3NSwyNiArMTIyOTQsMzggQEAKIAkJCQkgICAgY29uc3QgY2hhciAqY3RsbmFtZSwgaW50IGlkeCkKIHsKIAljaGFyIG5hbWVbMzJdOworCWhkYV9uaWRfdCBkYWM7CiAJaW50IGVycjsKIAogCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIGN0bG5hbWUpOwotCWlmIChuaWQgPT0gMHgxNCkgeworCXN3aXRjaCAobmlkKSB7CisJY2FzZSAweDE0OgorCWNhc2UgMHgxNjoKKwkJZGFjID0gMHgwMjsKKwkJYnJlYWs7CisJY2FzZSAweDE1OgorCQlkYWMgPSAweDAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJaWYgKHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdICE9IGRhYyAmJgorCSAgICBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1sxXSAhPSBkYWMpIHsKIAkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBuYW1lLAotCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTCgweDAyLCAzLCBpZHgsCisJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKGRhYywgMywgaWR4LAogCQkJCQkJICAgICAgSERBX09VVFBVVCkpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JfSBlbHNlIGlmIChuaWQgPT0gMHgxNSkgewotCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsIG5hbWUsCi0JCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MDMsIDMsIGlkeCwKLQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0gZWxzZQotCQlyZXR1cm4gLTE7CisJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW3NwZWMtPm11bHRpb3V0Lm51bV9kYWNzKytdID0gZGFjOworCX0KKwogCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIGN0bG5hbWUpOwotCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCisJaWYgKG5pZCAhPSAweDE2KQorCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAogCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgaWR4LCBIREFfT1VUUFVUKSk7CisJZWxzZSAvKiBtb25vICovCisJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCisJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAyLCBpZHgsIEhEQV9PVVRQVVQpKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKQEAgLTEyMzA3LDE0ICsxMjMzOCwxOSBAQAogCWhkYV9uaWRfdCBuaWQ7CiAJaW50IGVycjsKIAotCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gMjsJLyogb25seSB1c2Ugb25lIGRhYyAqLwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+cHJpdmF0ZV9kYWNfbmlkczsKLQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSA9IDI7Ci0Jc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMV0gPSAzOwogCiAJbmlkID0gY2ZnLT5saW5lX291dF9waW5zWzBdOwotCWlmIChuaWQpCi0JCWFsYzI2OF9uZXdfYW5hbG9nX291dHB1dChzcGVjLCBuaWQsICJGcm9udCIsIDApOworCWlmIChuaWQpIHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJaWYgKGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9TUEVBS0VSX09VVCkKKwkJCW5hbWUgPSAiU3BlYWtlciI7CisJCWVsc2UKKwkJCW5hbWUgPSAiRnJvbnQiOworCQllcnIgPSBhbGMyNjhfbmV3X2FuYWxvZ19vdXRwdXQoc3BlYywgbmlkLCBuYW1lLCAwKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KIAogCW5pZCA9IGNmZy0+c3BlYWtlcl9waW5zWzBdOwogCWlmIChuaWQgPT0gMHgxZCkgewpAQCAtMTIzMjMsMTYgKzEyMzU5LDIzIEBACiAJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwgSERBX0lOUFVUKSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQllcnIgPSBhbGMyNjhfbmV3X2FuYWxvZ19vdXRwdXQoc3BlYywgbmlkLCAiU3BlYWtlciIsIDApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAJfQogCW5pZCA9IGNmZy0+aHBfcGluc1swXTsKLQlpZiAobmlkKQotCQlhbGMyNjhfbmV3X2FuYWxvZ19vdXRwdXQoc3BlYywgbmlkLCAiSGVhZHBob25lIiwgMCk7CisJaWYgKG5pZCkgeworCQllcnIgPSBhbGMyNjhfbmV3X2FuYWxvZ19vdXRwdXQoc3BlYywgbmlkLCAiSGVhZHBob25lIiwgMCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CiAKIAluaWQgPSBjZmctPmxpbmVfb3V0X3BpbnNbMV0gfCBjZmctPmxpbmVfb3V0X3BpbnNbMl07CiAJaWYgKG5pZCA9PSAweDE2KSB7CiAJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsCiAJCQkJICAiTW9ubyBQbGF5YmFjayBTd2l0Y2giLAotCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDIsIDAsIEhEQV9JTlBVVCkpOworCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDIsIDAsIEhEQV9PVVRQVVQpKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTEyMzQwLDM4ICsxMjM4Myw0NiBAQAogfQogCiAvKiBjcmVhdGUgcGxheWJhY2svY2FwdHVyZSBjb250cm9scyBmb3IgaW5wdXQgcGlucyAqLwotc3RhdGljIGludCBhbGMyNjhfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAorc3RhdGljIGludCBhbGMyNjhfYXV0b19jcmVhdGVfaW5wdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07Ci0JaW50IGksIGlkeDE7CisJcmV0dXJuIGFsY19hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKGNvZGVjLCBjZmcsIDAsIDB4MjMsIDB4MjQpOworfQogCi0JZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewotCQlzd2l0Y2goY2ZnLT5pbnB1dF9waW5zW2ldKSB7Ci0JCWNhc2UgMHgxODoKLQkJCWlkeDEgPSAwOwkvKiBNaWMgMSAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgxOToKLQkJCWlkeDEgPSAxOwkvKiBNaWMgMiAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgxYToKLQkJCWlkeDEgPSAyOwkvKiBMaW5lIEluICovCi0JCQlicmVhazsKLQkJY2FzZSAweDFjOgotCQkJaWR4MSA9IDM7CS8qIENEICovCi0JCQlicmVhazsKLQkJY2FzZSAweDEyOgotCQljYXNlIDB4MTM6Ci0JCQlpZHgxID0gNjsJLyogZGlnaXRhbCBtaWNzICovCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10ubGFiZWwgPSBhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldOwotCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0gaWR4MTsKLQkJaW11eC0+bnVtX2l0ZW1zKys7CitzdGF0aWMgdm9pZCBhbGMyNjhfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgIGhkYV9uaWRfdCBuaWQsIGludCBwaW5fdHlwZSkKK3sKKwlpbnQgaWR4OworCisJYWxjX3NldF9waW5fb3V0cHV0KGNvZGVjLCBuaWQsIHBpbl90eXBlKTsKKwlpZiAobmlkID09IDB4MTQgfHwgbmlkID09IDB4MTYpCisJCWlkeCA9IDA7CisJZWxzZQorCQlpZHggPSAxOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGlkeCk7Cit9CisKK3N0YXRpYyB2b2lkIGFsYzI2OF9hdXRvX2luaXRfbXVsdGlfb3V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbMF07CisJaWYgKG5pZCkgeworCQlpbnQgcGluX3R5cGUgPSBnZXRfcGluX3R5cGUoc3BlYy0+YXV0b2NmZy5saW5lX291dF90eXBlKTsKKwkJYWxjMjY4X2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIHBpbl90eXBlKTsKIAl9Ci0JcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFsYzI2OF9hdXRvX2luaXRfaHBfb3V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWhkYV9uaWRfdCBwaW47CisKKwlwaW4gPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07CisJaWYgKHBpbikKKwkJYWxjMjY4X2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9IUCk7CisJcGluID0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF07CisJaWYgKHBpbikKKwkJYWxjMjY4X2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9PVVQpOwogfQogCiBzdGF0aWMgdm9pZCBhbGMyNjhfYXV0b19pbml0X21vbm9fc3BlYWtlcl9vdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0xMjM4Miw5ICsxMjQzMywxMCBAQAogCWhkYV9uaWRfdCBsaW5lX25pZCA9IHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1swXTsKIAl1bnNpZ25lZCBpbnQJZGFjX3ZvbDEsIGRhY192b2wyOwogCi0JaWYgKHNwZWFrZXJfbmlkKSB7CisJaWYgKGxpbmVfbmlkID09IDB4MWQgfHwgc3BlYWtlcl9uaWQgPT0gMHgxZCkgewogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBzcGVha2VyX25pZCwgMCwKIAkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUKTsKKwkJLyogbXV0ZSBtaXhlciBpbnB1dHMgZnJvbSAweDFkICovCiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MGYsIDAsCiAJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJICAgIEFNUF9JTl9VTk1VVEUoMSkpOwpAQCAtMTIzOTIsNiArMTI0NDQsNyBAQAogCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCQkJCSAgICBBTVBfSU5fVU5NVVRFKDEpKTsKIAl9IGVsc2UgeworCQkvKiB1bm11dGUgbWl4ZXIgaW5wdXRzIGZyb20gMHgxZCAqLwogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDBmLCAwLAogCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKSk7CiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTAsIDAsCkBAIC0xMjQ0OCw3ICsxMjUwMSw3IEBACiAJZXJyID0gYWxjMjY4X2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQllcnIgPSBhbGMyNjhfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOworCWVyciA9IGFsYzI2OF9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTEyNDY3LDcgKzEyNTIwLDcgQEAKIAkJYWRkX21peGVyKHNwZWMsIGFsYzI2OF9iZWVwX21peGVyKTsKIAogCWFkZF92ZXJiKHNwZWMsIGFsYzI2OF92b2x1bWVfaW5pdF92ZXJicyk7Ci0Jc3BlYy0+bnVtX211eF9kZWZzID0gMTsKKwlzcGVjLT5udW1fbXV4X2RlZnMgPSAyOwogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAllcnIgPSBhbGNfYXV0b19hZGRfbWljX2Jvb3N0KGNvZGVjKTsKQEAgLTEyNDc5LDggKzEyNTMyLDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotI2RlZmluZSBhbGMyNjhfYXV0b19pbml0X211bHRpX291dAlhbGM4ODJfYXV0b19pbml0X211bHRpX291dAotI2RlZmluZSBhbGMyNjhfYXV0b19pbml0X2hwX291dAkJYWxjODgyX2F1dG9faW5pdF9ocF9vdXQKICNkZWZpbmUgYWxjMjY4X2F1dG9faW5pdF9hbmFsb2dfaW5wdXQJYWxjODgyX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQKIAogLyogaW5pdCBjYWxsYmFjayBmb3IgYXV0by1jb25maWd1cmF0aW9uIG1vZGVsIC0tIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgaW5pdCAqLwpAQCAtMTI1MjMsOCArMTI1NzQsMTEgQEAKIAkJCQkJCUFMQzI2OF9BQ0VSX0FTUElSRV9PTkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyNTMsICJEZWxsIE9FTSIsIEFMQzI2OF9ERUxMKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMmIwLCAiRGVsbCBJbnNwaXJvbiBNaW5pOSIsIEFMQzI2OF9ERUxMKSwKKwkvKiBhbG1vc3QgY29tcGF0aWJsZSB3aXRoIHRvc2hpYmEgYnV0IHdpdGggb3B0aW9uYWwgZGlnaXRhbCBvdXRzOworCSAqIGF1dG8tcHJvYmluZyBzZWVtcyB3b3JraW5nIGZpbmUKKwkgKi8KIAlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MzAwMCwgIkhQIFRYMjV4eCBzZXJpZXMiLAotCQkJICAgQUxDMjY4X1RPU0hJQkEpLAorCQkJICAgQUxDMjY4X0FVVE8pLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyMDUsICJBU1VTIFc3SiIsIEFMQzI2OF8zU1QpLAogCVNORF9QQ0lfUVVJUksoMHgxMTcwLCAweDAwNDAsICJaRVBUTyIsIEFMQzI2OF9aRVBUTyksCiAJU05EX1BDSV9RVUlSSygweDE0YzAsIDB4MDAyNSwgIkNPTVBBTCBJRkw5MC9KRkwtOTIiLCBBTEMyNjhfVE9TSElCQSksCkBAIC0xMjU0NSw3ICsxMjU5OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgYWxjMjY4X3ByZXNldHNbXSA9IHsKIAlbQUxDMjY3X1FVQU5UQV9JTDFdID0gewotCQkubWl4ZXJzID0geyBhbGMyNjdfcXVhbnRhX2lsMV9taXhlciwgYWxjMjY4X2JlZXBfbWl4ZXIgfSwKKwkJLm1peGVycyA9IHsgYWxjMjY3X3F1YW50YV9pbDFfbWl4ZXIsIGFsYzI2OF9iZWVwX21peGVyLAorCQkJICAgIGFsYzI2OF9jYXB0dXJlX25vc3JjX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzLCBhbGMyNjhfZWFwZF92ZXJicywKIAkJCQlhbGMyNjdfcXVhbnRhX2lsMV92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OF9kYWNfbmlkcyksCkBAIC0xMjU1NSw5ICsxMjYxMCw5IEBACiAJCS5ocF9uaWQgPSAweDAzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY4X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OF9tb2RlcywKLQkJLmlucHV0X211eCA9ICZhbGMyNjhfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2N19xdWFudGFfaWwxX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjMjY3X3F1YW50YV9pbDFfaW5pdF9ob29rLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfc2t1X3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGMyNjdfcXVhbnRhX2lsMV9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEMyNjhfM1NUXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjY4X2Jhc2VfbWl4ZXIsIGFsYzI2OF9jYXB0dXJlX2FsdF9taXhlciwKQEAgLTEyNTg5LDEwICsxMjY0NCwxMSBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjY4X21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzI2OF9jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjMjY4X3Rvc2hpYmFfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGMyNjhfdG9zaGliYV9pbml0X2hvb2ssCisJCS5zZXR1cCA9IGFsYzI2OF90b3NoaWJhX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY4X3Rvc2hpYmFfYXV0b211dGUsCiAJfSwKIAlbQUxDMjY4X0FDRVJdID0gewotCQkubWl4ZXJzID0geyBhbGMyNjhfYWNlcl9taXhlciwgYWxjMjY4X2NhcHR1cmVfYWx0X21peGVyLAorCQkubWl4ZXJzID0geyBhbGMyNjhfYWNlcl9taXhlciwgYWxjMjY4X2NhcHR1cmVfbm9zcmNfbWl4ZXIsCiAJCQkgICAgYWxjMjY4X2JlZXBfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OF9iYXNlX2luaXRfdmVyYnMsIGFsYzI2OF9lYXBkX3ZlcmJzLAogCQkJCWFsYzI2OF9hY2VyX3ZlcmJzIH0sCkBAIC0xMjYyOCw3ICsxMjY4NCw3IEBACiAJW0FMQzI2OF9BQ0VSX0FTUElSRV9PTkVdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjhfYWNlcl9hc3BpcmVfb25lX21peGVyLAogCQkJICAgIGFsYzI2OF9iZWVwX21peGVyLAotCQkJICAgIGFsYzI2OF9jYXB0dXJlX2FsdF9taXhlciB9LAorCQkJICAgIGFsYzI2OF9jYXB0dXJlX25vc3JjX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzLCBhbGMyNjhfZWFwZF92ZXJicywKIAkJCQlhbGMyNjhfYWNlcl9hc3BpcmVfb25lX3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY4X2RhY19uaWRzKSwKQEAgLTEyNjM5LDIyICsxMjY5NSwyNiBAQAogCQkuaHBfbmlkID0gMHgwMywKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2OF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjhfbW9kZXMsCi0JCS5pbnB1dF9tdXggPSAmYWxjMjY4X2FjZXJfbGNfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsYzI2OF9hY2VyX2xjX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGMyNjhfYWNlcl9sY19zZXR1cCwKIAkJLmluaXRfaG9vayA9IGFsYzI2OF9hY2VyX2xjX2luaXRfaG9vaywKIAl9LAogCVtBTEMyNjhfREVMTF0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2OF9kZWxsX21peGVyLCBhbGMyNjhfYmVlcF9taXhlciB9LAorCQkubWl4ZXJzID0geyBhbGMyNjhfZGVsbF9taXhlciwgYWxjMjY4X2JlZXBfbWl4ZXIsCisJCQkgICAgYWxjMjY4X2NhcHR1cmVfbm9zcmNfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OF9iYXNlX2luaXRfdmVyYnMsIGFsYzI2OF9lYXBkX3ZlcmJzLAogCQkJCWFsYzI2OF9kZWxsX3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY4X2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjMjY4X2RhY19uaWRzLAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjhfYWRjX25pZHNfYWx0KSwKKwkJLmFkY19uaWRzID0gYWxjMjY4X2FkY19uaWRzX2FsdCwKKwkJLmNhcHNyY19uaWRzID0gYWxjMjY4X2NhcHNyY19uaWRzLAogCQkuaHBfbmlkID0gMHgwMiwKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2OF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGMyNjhfbW9kZXMsCiAJCS51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGMyNjhfZGVsbF9pbml0X2hvb2ssCi0JCS5pbnB1dF9tdXggPSAmYWxjMjY4X2NhcHR1cmVfc291cmNlLAorCQkuc2V0dXAgPSBhbGMyNjhfZGVsbF9zZXR1cCwKKwkJLmluaXRfaG9vayA9IGFsY19pbml0aG9vaywKIAl9LAogCVtBTEMyNjhfWkVQVE9dID0gewogCQkubWl4ZXJzID0geyBhbGMyNjhfYmFzZV9taXhlciwgYWxjMjY4X2NhcHR1cmVfYWx0X21peGVyLApAQCAtMTI2NzEsOCArMTI3MzEsOCBAQAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY4X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjhfY2FwdHVyZV9zb3VyY2UsCi0JCS51bnNvbF9ldmVudCA9IGFsYzI2OF90b3NoaWJhX3Vuc29sX2V2ZW50LAotCQkuaW5pdF9ob29rID0gYWxjMjY4X3Rvc2hpYmFfaW5pdF9ob29rCisJCS5zZXR1cCA9IGFsYzI2OF90b3NoaWJhX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY4X3Rvc2hpYmFfYXV0b211dGUsCiAJfSwKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJW0FMQzI2OF9URVNUXSA9IHsKQEAgLTEyNzE0LDggKzEyNzc0LDggQEAKIAkJCUFMQzg4Ml9NT0RFTF9MQVNULCBhbGMyNjhfbW9kZWxzLCBhbGMyNjhfc3NpZF9jZmdfdGJsKTsKIAogCWlmIChib2FyZF9jb25maWcgPCAwIHx8IGJvYXJkX2NvbmZpZyA+PSBBTEMyNjhfTU9ERUxfTEFTVCkgewotCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yICVzLCAiCi0JCSAgICAgICAidHJ5aW5nIGF1dG8tcHJvYmUgZnJvbSBCSU9TLi4uXG4iLCBjb2RlYy0+Y2hpcF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiAlczogQklPUyBhdXRvLXByb2JpbmcuXG4iLAorCQkgICAgICAgY29kZWMtPmNoaXBfbmFtZSk7CiAJCWJvYXJkX2NvbmZpZyA9IEFMQzI2OF9BVVRPOwogCX0KIApAQCAtMTI3MzQsNyArMTI3OTQsNyBAQAogCX0KIAogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjY4X0FVVE8pCi0JCXNldHVwX3ByZXNldChzcGVjLCAmYWxjMjY4X3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CisJCXNldHVwX3ByZXNldChjb2RlYywgJmFsYzI2OF9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCiAJc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGMyNjhfcGNtX2FuYWxvZ19wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjMjY4X3BjbV9hbmFsb2dfY2FwdHVyZTsKQEAgLTEyNzcxLDExICsxMjgzMSwxNSBAQAogCQlpbnQgaTsKIAogCQkvKiBnZXQgdHlwZSAqLwotCQl3Y2FwID0gKHdjYXAgJiBBQ19XQ0FQX1RZUEUpID4+IEFDX1dDQVBfVFlQRV9TSElGVDsKLQkJaWYgKHdjYXAgIT0gQUNfV0lEX0FVRF9JTiB8fCBzcGVjLT5pbnB1dF9tdXgtPm51bV9pdGVtcyA9PSAxKSB7CisJCXdjYXAgPSBnZXRfd2NhcHNfdHlwZSh3Y2FwKTsKKwkJaWYgKHNwZWMtPmF1dG9fbWljIHx8CisJCSAgICB3Y2FwICE9IEFDX1dJRF9BVURfSU4gfHwgc3BlYy0+aW5wdXRfbXV4LT5udW1faXRlbXMgPT0gMSkgewogCQkJc3BlYy0+YWRjX25pZHMgPSBhbGMyNjhfYWRjX25pZHNfYWx0OwogCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjhfYWRjX25pZHNfYWx0KTsKLQkJCWFkZF9taXhlcihzcGVjLCBhbGMyNjhfY2FwdHVyZV9hbHRfbWl4ZXIpOworCQkJaWYgKHNwZWMtPmF1dG9fbWljIHx8IHNwZWMtPmlucHV0X211eC0+bnVtX2l0ZW1zID09IDEpCisJCQkJYWRkX21peGVyKHNwZWMsIGFsYzI2OF9jYXB0dXJlX25vc3JjX21peGVyKTsKKwkJCWVsc2UKKwkJCQlhZGRfbWl4ZXIoc3BlYywgYWxjMjY4X2NhcHR1cmVfYWx0X21peGVyKTsKIAkJfSBlbHNlIHsKIAkJCXNwZWMtPmFkY19uaWRzID0gYWxjMjY4X2FkY19uaWRzOwogCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjhfYWRjX25pZHMpOwpAQCAtMTI3ODYsNiArMTI4NTAsOCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBpKyspCiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBhbGMyNjhfY2Fwc3JjX25pZHNbaV0sCiAJCQkJMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCisJCQkJaSA8IHNwZWMtPm51bV9tdXhfZGVmcyA/CisJCQkJc3BlYy0+aW5wdXRfbXV4W2ldLml0ZW1zWzBdLmluZGV4IDoKIAkJCQlzcGVjLT5pbnB1dF9tdXgtPml0ZW1zWzBdLmluZGV4KTsKIAl9CiAKQEAgLTEyODIwLDIyICsxMjg4Niw2IEBACiAgKiAgICAgICBub3QgYSBtdXghCiAgKi8KIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2OV9lZWVwY19kbWljX2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAyLAotCS5pdGVtcyA9IHsKLQkJeyAiaS1NaWMiLCAweDUgfSwKLQkJeyAiZS1NaWMiLCAweDAgfSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2OV9lZWVwY19hbWljX2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAyLAotCS5pdGVtcyA9IHsKLQkJeyAiaS1NaWMiLCAweDEgfSwKLQkJeyAiZS1NaWMiLCAweDAgfSwKLQl9LAotfTsKLQogI2RlZmluZSBhbGMyNjlfbW9kZXMJCWFsYzI2MF9tb2RlcwogI2RlZmluZSBhbGMyNjlfY2FwdHVyZV9zb3VyY2UJYWxjODgwX2xnX2x3X2NhcHR1cmVfc291cmNlCiAKQEAgLTEyOTk3LDE2ICsxMzA0Nyw2IEBACiAJCQlBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4NDgwKTsKIH0KIAotc3RhdGljIHZvaWQgYWxjMjY5X3F1YW50YV9mbDFfbWljX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXVuc2lnbmVkIGludCBwcmVzZW50OwotCi0JcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxOCwgMCwKLQkJCQlBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIzLCAwLAotCQkJICAgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBwcmVzZW50ID8gMHgwIDogMHgxKTsKLX0KLQogc3RhdGljIHZvaWQgYWxjMjY5X2xpZmVib29rX21pY19hdXRvc3dpdGNoKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXVuc2lnbmVkIGludCBwcmVzZW50X2xhcHRvcDsKQEAgLTEzMDMzLDEwICsxMzA3MywxNCBAQAogc3RhdGljIHZvaWQgYWxjMjY5X3F1YW50YV9mbDFfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJICAgIHVuc2lnbmVkIGludCByZXMpCiB7Ci0JaWYgKChyZXMgPj4gMjYpID09IEFMQzg4MF9IUF9FVkVOVCkKKwlzd2l0Y2ggKHJlcyA+PiAyNikgeworCWNhc2UgQUxDODgwX0hQX0VWRU5UOgogCQlhbGMyNjlfcXVhbnRhX2ZsMV9zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQlpZiAoKHJlcyA+PiAyNikgPT0gQUxDODgwX01JQ19FVkVOVCkKLQkJYWxjMjY5X3F1YW50YV9mbDFfbWljX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJY2FzZSBBTEM4ODBfTUlDX0VWRU5UOgorCQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhbGMyNjlfbGlmZWJvb2tfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCkBAIC0xMzA0OCwxMCArMTMwOTIsMjAgQEAKIAkJYWxjMjY5X2xpZmVib29rX21pY19hdXRvc3dpdGNoKGNvZGVjKTsKIH0KIAorc3RhdGljIHZvaWQgYWxjMjY5X3F1YW50YV9mbDFfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OworCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CisJc3BlYy0+aW50X21pYy5waW4gPSAweDE5OworCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDE7CisJc3BlYy0+YXV0b19taWMgPSAxOworfQorCiBzdGF0aWMgdm9pZCBhbGMyNjlfcXVhbnRhX2ZsMV9pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJYWxjMjY5X3F1YW50YV9mbDFfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JYWxjMjY5X3F1YW50YV9mbDFfbWljX2F1dG9tdXRlKGNvZGVjKTsKKwlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAogc3RhdGljIHZvaWQgYWxjMjY5X2xpZmVib29rX2luaXRfaG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTEzMDk2LDYwICsxMzE1MCw0NCBAQAogCQkJCUFNUF9JTl9NVVRFKDApLCBiaXRzKTsKIH0KIAotc3RhdGljIHZvaWQgYWxjMjY5X2VlZXBjX2RtaWNfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JdW5zaWduZWQgaW50IHByZXNlbnQ7Ci0KLQlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE4LCAwLAotCQkJCUFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjMsIDAsCi0JCQkJQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsICAocHJlc2VudCA/IDAgOiA1KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFsYzI2OV9lZWVwY19hbWljX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXVuc2lnbmVkIGludCBwcmVzZW50OwotCi0JcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxOCwgMCwKLQkJCQlBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDI0LCAwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAotCQkJCTB4NzAwMCB8ICgweDAwIDw8IDgpIHwgKHByZXNlbnQgPyAwIDogMHg4MCkpOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjQsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JCQkJMHg3MDAwIHwgKDB4MDEgPDwgOCkgfCAocHJlc2VudCA/IDB4ODAgOiAwKSk7Ci19Ci0KIC8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KLXN0YXRpYyB2b2lkIGFsYzI2OV9lZWVwY19kbWljX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorc3RhdGljIHZvaWQgYWxjMjY5X2VlZXBjX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHJlcykKIHsKLQlpZiAoKHJlcyA+PiAyNikgPT0gQUxDODgwX0hQX0VWRU5UKQorCXN3aXRjaCAocmVzID4+IDI2KSB7CisJY2FzZSBBTEM4ODBfSFBfRVZFTlQ6CiAJCWFsYzI2OV9zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQotCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfTUlDX0VWRU5UKQotCQlhbGMyNjlfZWVlcGNfZG1pY19hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKKwkJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCX0KIH0KIAotc3RhdGljIHZvaWQgYWxjMjY5X2VlZXBjX2RtaWNfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGMyNjlfZWVlcGNfZG1pY19zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzcGVjLT5leHRfbWljLnBpbiA9IDB4MTg7CisJc3BlYy0+ZXh0X21pYy5tdXhfaWR4ID0gMDsKKwlzcGVjLT5pbnRfbWljLnBpbiA9IDB4MTI7CisJc3BlYy0+aW50X21pYy5tdXhfaWR4ID0gNTsKKwlzcGVjLT5hdXRvX21pYyA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGFsYzI2OV9lZWVwY19hbWljX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKKwlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOworCXNwZWMtPmludF9taWMucGluID0gMHgxOTsKKwlzcGVjLT5pbnRfbWljLm11eF9pZHggPSAxOworCXNwZWMtPmF1dG9fbWljID0gMTsKK30KKworc3RhdGljIHZvaWQgYWxjMjY5X2VlZXBjX2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCWFsYzI2OV9zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQlhbGMyNjlfZWVlcGNfZG1pY19hdXRvbXV0ZShjb2RlYyk7Ci19Ci0KLS8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KLXN0YXRpYyB2b2lkIGFsYzI2OV9lZWVwY19hbWljX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlpZiAoKHJlcyA+PiAyNikgPT0gQUxDODgwX0hQX0VWRU5UKQotCQlhbGMyNjlfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0KLQlpZiAoKHJlcyA+PiAyNikgPT0gQUxDODgwX01JQ19FVkVOVCkKLQkJYWxjMjY5X2VlZXBjX2FtaWNfYXV0b211dGUoY29kZWMpOwotfQotCi1zdGF0aWMgdm9pZCBhbGMyNjlfZWVlcGNfYW1pY19pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlhbGMyNjlfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JYWxjMjY5X2VlZXBjX2FtaWNfYXV0b211dGUoY29kZWMpOworCWFsY19taWNfYXV0b211dGUoY29kZWMpOwogfQogCiAvKgpAQCAtMTMyMjIsODkgKzEzMjYwLDEwIEBACiAJeyB9CiB9OwogCi0vKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLwotc3RhdGljIGludCBhbGMyNjlfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAotCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKLXsKLQloZGFfbmlkX3QgbmlkOwotCWludCBlcnI7Ci0KLQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDE7CS8qIG9ubHkgdXNlIG9uZSBkYWMgKi8KLQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPnByaXZhdGVfZGFjX25pZHM7Ci0Jc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF0gPSAyOwotCi0JbmlkID0gY2ZnLT5saW5lX291dF9waW5zWzBdOwotCWlmIChuaWQpIHsKLQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLAotCQkJCSAgIkZyb250IFBsYXliYWNrIFZvbHVtZSIsCi0JCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MDIsIDMsIDAsIEhEQV9PVVRQVVQpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAotCQkJCSAgIkZyb250IFBsYXliYWNrIFN3aXRjaCIsCi0JCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwgSERBX09VVFBVVCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JbmlkID0gY2ZnLT5zcGVha2VyX3BpbnNbMF07Ci0JaWYgKG5pZCkgewotCQlpZiAoIWNmZy0+bGluZV9vdXRfcGluc1swXSkgewotCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLAotCQkJCQkgICJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCi0JCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTCgweDAyLCAzLCAwLAotCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KLQkJaWYgKG5pZCA9PSAweDE2KSB7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAotCQkJCQkgICJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCi0JCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDIsIDAsCi0JCQkJCQkJICAgICAgSERBX09VVFBVVCkpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKLQkJfSBlbHNlIHsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsCi0JCQkJCSAgIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwKLQkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCW5pZCA9IGNmZy0+aHBfcGluc1swXTsKLQlpZiAobmlkKSB7Ci0JCS8qIHNwZWMtPm11bHRpb3V0LmhwX25pZCA9IDI7ICovCi0JCWlmICghY2ZnLT5saW5lX291dF9waW5zWzBdICYmICFjZmctPnNwZWFrZXJfcGluc1swXSkgewotCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLAotCQkJCQkgICJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MDIsIDMsIDAsCi0JCQkJCQkJICAgICAgSERBX09VVFBVVCkpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKLQkJfQotCQlpZiAobmlkID09IDB4MTYpIHsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsCi0JCQkJCSAgIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLAotCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAyLCAwLAotCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7Ci0JCX0gZWxzZSB7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAotCQkJCQkgICJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwKLQkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIGFsYzI2OV9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyBcCi0JYWxjMjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzCisjZGVmaW5lIGFsYzI2OV9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyBcCisJYWxjMjY4X2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzCisjZGVmaW5lIGFsYzI2OV9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzIFwKKwlhbGMyNjhfYXV0b19jcmVhdGVfaW5wdXRfY3RscwogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogI2RlZmluZSBhbGMyNjlfbG9vcGJhY2tzCWFsYzg4MF9sb29wYmFja3MKQEAgLTEzMzU0LDcgKzEzMzEzLDcgQEAKIAllcnIgPSBhbGMyNjlfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVyciA9IGFsYzI2OV9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJZXJyID0gYWxjMjY5X2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMTMzNzksMTUgKzEzMzM4LDE1IEBACiAJCXJldHVybiBlcnI7CiAKIAlpZiAoIXNwZWMtPmNhcF9taXhlciAmJiAhc3BlYy0+bm9fYW5hbG9nKQotCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwkJc2V0X2NhcHR1cmVfbWl4ZXIoY29kZWMpOwogCiAJYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQpOwogCiAJcmV0dXJuIDE7CiB9CiAKLSNkZWZpbmUgYWxjMjY5X2F1dG9faW5pdF9tdWx0aV9vdXQJYWxjODgyX2F1dG9faW5pdF9tdWx0aV9vdXQKLSNkZWZpbmUgYWxjMjY5X2F1dG9faW5pdF9ocF9vdXQJCWFsYzg4Ml9hdXRvX2luaXRfaHBfb3V0CisjZGVmaW5lIGFsYzI2OV9hdXRvX2luaXRfbXVsdGlfb3V0CWFsYzI2OF9hdXRvX2luaXRfbXVsdGlfb3V0CisjZGVmaW5lIGFsYzI2OV9hdXRvX2luaXRfaHBfb3V0CQlhbGMyNjhfYXV0b19pbml0X2hwX291dAogI2RlZmluZSBhbGMyNjlfYXV0b19pbml0X2FuYWxvZ19pbnB1dAlhbGM4ODJfYXV0b19pbml0X2FuYWxvZ19pbnB1dAogCiAKQEAgLTEzNDU1LDYgKzEzNDE0LDcgQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OV9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGMyNjlfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsYzI2OV9xdWFudGFfZmwxX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGMyNjlfcXVhbnRhX2ZsMV9zZXR1cCwKIAkJLmluaXRfaG9vayA9IGFsYzI2OV9xdWFudGFfZmwxX2luaXRfaG9vaywKIAl9LAogCVtBTEMyNjlfQVNVU19FRUVQQ19QNzAzXSA9IHsKQEAgLTEzNDY3LDkgKzEzNDI3LDkgQEAKIAkJLmhwX25pZCA9IDB4MDMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjlfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjY5X21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzI2OV9lZWVwY19hbWljX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfZWVlcGNfYW1pY191bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19hbWljX2luaXRob29rLAorCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfZWVlcGNfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzI2OV9lZWVwY19hbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2VlZXBjX2luaXRob29rLAogCX0sCiAJW0FMQzI2OV9BU1VTX0VFRVBDX1A5MDFdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjlfZWVlcGNfbWl4ZXIgfSwKQEAgLTEzNDgxLDkgKzEzNDQxLDkgQEAKIAkJLmhwX25pZCA9IDB4MDMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjlfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjY5X21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzI2OV9lZWVwY19kbWljX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfZWVlcGNfZG1pY191bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19kbWljX2luaXRob29rLAorCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfZWVlcGNfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzI2OV9lZWVwY19kbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2VlZXBjX2luaXRob29rLAogCX0sCiAJW0FMQzI2OV9GVUpJVFNVXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjY5X2Z1aml0c3VfbWl4ZXIgfSwKQEAgLTEzNDk1LDkgKzEzNDU1LDkgQEAKIAkJLmhwX25pZCA9IDB4MDMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjlfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjY5X21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzI2OV9lZWVwY19kbWljX2NhcHR1cmVfc291cmNlLAotCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfZWVlcGNfZG1pY191bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19kbWljX2luaXRob29rLAorCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfZWVlcGNfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzI2OV9lZWVwY19kbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2VlZXBjX2luaXRob29rLAogCX0sCiAJW0FMQzI2OV9MSUZFQk9PS10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2OV9saWZlYm9va19taXhlciB9LApAQCAtMTM1MzIsOCArMTM0OTIsOCBAQAogCQkJCQkJICBhbGMyNjlfY2ZnX3RibCk7CiAKIAlpZiAoYm9hcmRfY29uZmlnIDwgMCkgewotCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yICVzLCAiCi0JCSAgICAgICAidHJ5aW5nIGF1dG8tcHJvYmUgZnJvbSBCSU9TLi4uXG4iLCBjb2RlYy0+Y2hpcF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiAlczogQklPUyBhdXRvLXByb2JpbmcuXG4iLAorCQkgICAgICAgY29kZWMtPmNoaXBfbmFtZSk7CiAJCWJvYXJkX2NvbmZpZyA9IEFMQzI2OV9BVVRPOwogCX0KIApAQCAtMTM1NTgsNyArMTM1MTgsNyBAQAogCX0KIAogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjY5X0FVVE8pCi0JCXNldHVwX3ByZXNldChzcGVjLCAmYWxjMjY5X3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CisJCXNldHVwX3ByZXNldChjb2RlYywgJmFsYzI2OV9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCiAJaWYgKGNvZGVjLT5zdWJzeXN0ZW1faWQgPT0gMHgxN2FhM2JmOCkgewogCQkvKiBEdWUgdG8gYSBoYXJkd2FyZSBwcm9ibGVtIG9uIExlbm92byBJZGVhZHBhZCwgd2UgbmVlZCB0bwpAQCAtMTM1NzcsNyArMTM1MzcsNyBAQAogCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjY5X2FkY19uaWRzKTsKIAlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzI2OV9jYXBzcmNfbmlkczsKIAlpZiAoIXNwZWMtPmNhcF9taXhlcikKLQkJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJCXNldF9jYXB0dXJlX21peGVyKGNvZGVjKTsKIAlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwMjsKQEAgLTE0MTI3LDIzICsxNDA4NywyMyBAQAogCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDBjfSwKIAotCXsweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0JezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAogCiAJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpfSwKLQl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgzKX0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAogCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MWIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQl7MHgxYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCi0JezB4MWIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMyl9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKIAogCXsweDA4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCS8qIHNldCBNaWMgMSAqLwogCkBAIC0xNDIxNSw2NCArMTQxNzUsOTYgQEAKIAl9LAogfTsKIAorc3RhdGljIGhkYV9uaWRfdCBhbGM4NjFfbG9va19mb3JfZGFjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWhkYV9uaWRfdCBtaXgsIHNyY3NbNV07CisJaW50IGksIGosIG51bTsKKworCWlmIChzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgcGluLCAmbWl4LCAxKSAhPSAxKQorCQlyZXR1cm4gMDsKKwludW0gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbWl4LCBzcmNzLCBBUlJBWV9TSVpFKHNyY3MpKTsKKwlpZiAobnVtIDwgMCkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCB0eXBlOworCQl0eXBlID0gZ2V0X3djYXBzX3R5cGUoZ2V0X3djYXBzKGNvZGVjLCBzcmNzW2ldKSk7CisJCWlmICh0eXBlICE9IEFDX1dJRF9BVURfT1VUKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7IGogPCBzcGVjLT5tdWx0aW91dC5udW1fZGFjczsgaisrKQorCQkJaWYgKHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2pdID09IHNyY3NbaV0pCisJCQkJYnJlYWs7CisJCWlmIChqID49IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzKQorCQkJcmV0dXJuIHNyY3NbaV07CisJfQorCXJldHVybiAwOworfQorCiAvKiBmaWxsIGluIHRoZSBkYWNfbmlkcyB0YWJsZSBmcm9tIHRoZSBwYXJzZWQgcGluIGNvbmZpZ3VyYXRpb24gKi8KLXN0YXRpYyBpbnQgYWxjODYxX2F1dG9fZmlsbF9kYWNfbmlkcyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCitzdGF0aWMgaW50IGFsYzg2MV9hdXRvX2ZpbGxfZGFjX25pZHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaW50IGk7Ci0JaGRhX25pZF90IG5pZDsKKwloZGFfbmlkX3QgbmlkLCBkYWM7CiAKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPnByaXZhdGVfZGFjX25pZHM7CiAJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKIAkJbmlkID0gY2ZnLT5saW5lX291dF9waW5zW2ldOwotCQlpZiAobmlkKSB7Ci0JCQlpZiAoaSA+PSBBUlJBWV9TSVpFKGFsYzg2MV9kYWNfbmlkcykpCi0JCQkJY29udGludWU7Ci0JCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSA9IGFsYzg2MV9kYWNfbmlkc1tpXTsKLQkJfQorCQlkYWMgPSBhbGM4NjFfbG9va19mb3JfZGFjKGNvZGVjLCBuaWQpOworCQlpZiAoIWRhYykKKwkJCWNvbnRpbnVlOworCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tzcGVjLT5tdWx0aW91dC5udW1fZGFjcysrXSA9IGRhYzsKIAl9Ci0Jc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBjZmctPmxpbmVfb3V0czsKIAlyZXR1cm4gMDsKIH0KIAotLyogYWRkIHBsYXliYWNrIGNvbnRyb2xzIGZyb20gdGhlIHBhcnNlZCBEQUMgdGFibGUgKi8KLXN0YXRpYyBpbnQgYWxjODYxX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKLQkJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCitzdGF0aWMgaW50IGFsYzg2MV9jcmVhdGVfb3V0X3N3KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwZngsCisJCQkJaGRhX25pZF90IG5pZCwgdW5zaWduZWQgaW50IGNocykKIHsKIAljaGFyIG5hbWVbMzJdOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7CisJcmV0dXJuIGFkZF9jb250cm9sKGNvZGVjLT5zcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAorCQkJICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIGNocywgMCwgSERBX09VVFBVVCkpOworfQorCisvKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLworc3RhdGljIGludCBhbGM4NjFfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0YXRpYyBjb25zdCBjaGFyICpjaG5hbWVbNF0gPSB7CiAJCSJGcm9udCIsICJTdXJyb3VuZCIsIE5VTEwgLypDTEZFKi8sICJTaWRlIgogCX07CiAJaGRhX25pZF90IG5pZDsKLQlpbnQgaSwgaWR4LCBlcnI7CisJaW50IGksIGVycjsKKworCWlmIChjZmctPmxpbmVfb3V0cyA9PSAxKSB7CisJCWNvbnN0IGNoYXIgKnBmeCA9IE5VTEw7CisJCWlmICghY2ZnLT5ocF9vdXRzKQorCQkJcGZ4ID0gIk1hc3RlciI7CisJCWVsc2UgaWYgKGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9TUEVBS0VSX09VVCkKKwkJCXBmeCA9ICJTcGVha2VyIjsKKwkJaWYgKHBmeCkgeworCQkJbmlkID0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF07CisJCQlyZXR1cm4gYWxjODYxX2NyZWF0ZV9vdXRfc3coY29kZWMsIHBmeCwgbmlkLCAzKTsKKwkJfQorCX0KIAogCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7CiAJCW5pZCA9IHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldOwogCQlpZiAoIW5pZCkKIAkJCWNvbnRpbnVlOwotCQlpZiAobmlkID09IDB4MDUpIHsKKwkJaWYgKGkgPT0gMikgewogCQkJLyogQ2VudGVyL0xGRSAqLwotCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9CSU5EX01VVEUsCi0JCQkJCSAgIkNlbnRlciBQbGF5YmFjayBTd2l0Y2giLAotCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAxLCAwLAotCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKKwkJCWVyciA9IGFsYzg2MV9jcmVhdGVfb3V0X3N3KGNvZGVjLCAiQ2VudGVyIiwgbmlkLCAxKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX0JJTkRfTVVURSwKLQkJCQkJICAiTEZFIFBsYXliYWNrIFN3aXRjaCIsCi0JCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDIsIDAsCi0JCQkJCQkJICAgICAgSERBX09VVFBVVCkpOworCQkJZXJyID0gYWxjODYxX2NyZWF0ZV9vdXRfc3coY29kZWMsICJMRkUiLCBuaWQsIDIpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfSBlbHNlIHsKLQkJCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShhbGM4NjFfZGFjX25pZHMpIC0gMTsKLQkJCSAgICAgaWR4KyspCi0JCQkJaWYgKG5pZCA9PSBhbGM4NjFfZGFjX25pZHNbaWR4XSkKLQkJCQkJYnJlYWs7Ci0JCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBjaG5hbWVbaWR4XSk7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX0JJTkRfTVVURSwgbmFtZSwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwKLQkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQllcnIgPSBhbGM4NjFfY3JlYXRlX291dF9zdyhjb2RlYywgY2huYW1lW2ldLCBuaWQsIDMpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMTQyODAsOCArMTQyNzIsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFsYzg2MV9hdXRvX2NyZWF0ZV9ocF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgaGRhX25pZF90IHBpbikKK3N0YXRpYyBpbnQgYWxjODYxX2F1dG9fY3JlYXRlX2hwX2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4pCiB7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaW50IGVycjsKIAloZGFfbmlkX3QgbmlkOwogCkBAIC0xNDI4OSw3MCArMTQyODIsNDkgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoKHBpbiA+PSAweDBiICYmIHBpbiA8PSAweDEwKSB8fCBwaW4gPT0gMHgxZiB8fCBwaW4gPT0gMHgyMCkgewotCQluaWQgPSAweDAzOwotCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAotCQkJCSAgIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLAotCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsIEhEQV9PVVRQVVQpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBuaWQ7CisJCW5pZCA9IGFsYzg2MV9sb29rX2Zvcl9kYWMoY29kZWMsIHBpbik7CisJCWlmIChuaWQpIHsKKwkJCWVyciA9IGFsYzg2MV9jcmVhdGVfb3V0X3N3KGNvZGVjLCAiSGVhZHBob25lIiwgbmlkLCAzKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBuaWQ7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiAKIC8qIGNyZWF0ZSBwbGF5YmFjay9jYXB0dXJlIGNvbnRyb2xzIGZvciBpbnB1dCBwaW5zICovCi1zdGF0aWMgaW50IGFsYzg2MV9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsCitzdGF0aWMgaW50IGFsYzg2MV9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKLQlpbnQgaSwgZXJyLCBpZHgsIGlkeDE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7Ci0JCXN3aXRjaCAoY2ZnLT5pbnB1dF9waW5zW2ldKSB7Ci0JCWNhc2UgMHgwYzoKLQkJCWlkeDEgPSAxOwotCQkJaWR4ID0gMjsJLyogTGluZSBJbiAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwZjoKLQkJCWlkeDEgPSAyOwotCQkJaWR4ID0gMjsJLyogTGluZSBJbiAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwZDoKLQkJCWlkeDEgPSAwOwotCQkJaWR4ID0gMTsJLyogTWljIEluICovCi0JCQlicmVhazsKLQkJY2FzZSAweDEwOgotCQkJaWR4MSA9IDM7Ci0JCQlpZHggPSAxOwkvKiBNaWMgSW4gKi8KLQkJCWJyZWFrOwotCQljYXNlIDB4MTE6Ci0JCQlpZHgxID0gNDsKLQkJCWlkeCA9IDA7CS8qIENEICovCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJZXJyID0gbmV3X2FuYWxvZ19pbnB1dChzcGVjLCBjZmctPmlucHV0X3BpbnNbaV0sCi0JCQkJICAgICAgIGF1dG9fcGluX2NmZ19sYWJlbHNbaV0sIGlkeCwgMHgxNSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQotCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0gYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKLQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5pbmRleCA9IGlkeDE7Ci0JCWltdXgtPm51bV9pdGVtcysrOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gYWxjX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsIGNmZywgMHgxNSwgMHgwOCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzg2MV9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJICAgICAgaGRhX25pZF90IG5pZCwKLQkJCQkJICAgICAgaW50IHBpbl90eXBlLCBpbnQgZGFjX2lkeCkKKwkJCQkJICAgICAgaW50IHBpbl90eXBlLCBoZGFfbmlkX3QgZGFjKQogeworCWhkYV9uaWRfdCBtaXgsIHNyY3NbNV07CisJaW50IGksIG51bTsKKwogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAogCQkJICAgIHBpbl90eXBlKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBkYWNfaWR4LCAwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGRhYywgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCSAgICBBTVBfT1VUX1VOTVVURSk7CisJaWYgKHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsICZtaXgsIDEpICE9IDEpCisJCXJldHVybjsKKwludW0gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbWl4LCBzcmNzLCBBUlJBWV9TSVpFKHNyY3MpKTsKKwlpZiAobnVtIDwgMCkKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQl1bnNpZ25lZCBpbnQgbXV0ZTsKKwkJaWYgKHNyY3NbaV0gPT0gZGFjIHx8IHNyY3NbaV0gPT0gMHgxNSkKKwkJCW11dGUgPSBBTVBfSU5fVU5NVVRFKGkpOworCQllbHNlCisJCQltdXRlID0gQU1QX0lOX01VVEUoaSk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG1peCwgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCQkgICAgbXV0ZSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhbGM4NjFfYXV0b19pbml0X211bHRpX291dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTE0Mzc1LDEyICsxNDM0NywxMyBAQAogCWhkYV9uaWRfdCBwaW47CiAKIAlwaW4gPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07Ci0JaWYgKHBpbikgLyogY29ubmVjdCB0byBmcm9udCAqLworCWlmIChwaW4pCiAJCWFsYzg2MV9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fSFAsCi0JCQkJCQkgIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdKTsKKwkJCQkJCSAgc3BlYy0+bXVsdGlvdXQuaHBfbmlkKTsKIAlwaW4gPSBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXTsKIAlpZiAocGluKQotCQlhbGM4NjFfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwgMCk7CisJCWFsYzg2MV9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fT1VULAorCQkJCQkJICBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzg2MV9hdXRvX2luaXRfYW5hbG9nX2lucHV0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMTQ0MTIsMTYgKzE0Mzg1LDE2IEBACiAJaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgQklPUyBwaW4gY29uZmlnICovCiAKLQllcnIgPSBhbGM4NjFfYXV0b19maWxsX2RhY19uaWRzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwllcnIgPSBhbGM4NjFfYXV0b19maWxsX2RhY19uaWRzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gYWxjODYxX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwllcnIgPSBhbGM4NjFfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQllcnIgPSBhbGM4NjFfYXV0b19jcmVhdGVfaHBfY3RscyhzcGVjLCBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0pOworCWVyciA9IGFsYzg2MV9hdXRvX2NyZWF0ZV9ocF9jdGxzKGNvZGVjLCBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0pOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVyciA9IGFsYzg2MV9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJZXJyID0gYWxjODYxX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMTQ0NDAsNyArMTQ0MTMsNyBAQAogCiAJc3BlYy0+YWRjX25pZHMgPSBhbGM4NjFfYWRjX25pZHM7CiAJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4NjFfYWRjX25pZHMpOwotCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9jYXB0dXJlX21peGVyKGNvZGVjKTsKIAogCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDBlLCAweDBmLCAweDBiKTsKIApAQCAtMTQ2MzMsOCArMTQ2MDYsOCBAQAogCQkJCQkJICBhbGM4NjFfY2ZnX3RibCk7CiAKIAlpZiAoYm9hcmRfY29uZmlnIDwgMCkgewotCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yICVzLCAiCi0JCSAgICAgICAidHJ5aW5nIGF1dG8tcHJvYmUgZnJvbSBCSU9TLi4uXG4iLCBjb2RlYy0+Y2hpcF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiAlczogQklPUyBhdXRvLXByb2JpbmcuXG4iLAorCQkgICAgICAgY29kZWMtPmNoaXBfbmFtZSk7CiAJCWJvYXJkX2NvbmZpZyA9IEFMQzg2MV9BVVRPOwogCX0KIApAQCAtMTQ2NTksNyArMTQ2MzIsNyBAQAogCX0KIAogCWlmIChib2FyZF9jb25maWcgIT0gQUxDODYxX0FVVE8pCi0JCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODYxX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CisJCXNldHVwX3ByZXNldChjb2RlYywgJmFsYzg2MV9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCiAJc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGM4NjFfcGNtX2FuYWxvZ19wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjODYxX3BjbV9hbmFsb2dfY2FwdHVyZTsKQEAgLTE1MDYyLDEyICsxNTAzNSwxNSBAQAogCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwogfQogCi1zdGF0aWMgdm9pZCBhbGM4NjF2ZF9sZW5vdm9faW5pdF9ob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjODYxdmRfbGVub3ZvX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxYjsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7Cit9CisKK3N0YXRpYyB2b2lkIGFsYzg2MXZkX2xlbm92b19pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CiAJYWxjX2F1dG9tdXRlX2FtcChjb2RlYyk7CiAJYWxjODYxdmRfbGVub3ZvX21pY19hdXRvbXV0ZShjb2RlYyk7CiB9CkBAIC0xNTEzMSwxMyArMTUxMDcsMTIgQEAKIH07CiAKIC8qIHRvZ2dsZSBzcGVha2VyLW91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGhwLWphY2sgc3RhdGUgKi8KLXN0YXRpYyB2b2lkIGFsYzg2MXZkX2RhbGxhc19pbml0X2hvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGM4NjF2ZF9kYWxsYXNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKIAlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE1OwogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKLQlhbGNfYXV0b211dGVfYW1wKGNvZGVjKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKQEAgLTE1MjUxLDYgKzE1MjI2LDcgQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg2MXZkXzNzdGFja18yY2hfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODYxdmRfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsYzg2MXZkX2xlbm92b191bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjODYxdmRfbGVub3ZvX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjODYxdmRfbGVub3ZvX2luaXRfaG9vaywKIAl9LAogCVtBTEM4NjFWRF9EQUxMQVNdID0gewpAQCAtMTUyNjIsNyArMTUyMzgsOCBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODYxdmRfM3N0YWNrXzJjaF9tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4NjF2ZF9kYWxsYXNfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4NjF2ZF9kYWxsYXNfaW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGM4NjF2ZF9kYWxsYXNfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg2MVZEX0hQXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODYxdmRfaHBfbWl4ZXIgfSwKQEAgLTE1Mjc0LDcgKzE1MjUxLDggQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg2MXZkXzNzdGFja18yY2hfbW9kZXMsCiAJCS5pbnB1dF9tdXggPSAmYWxjODYxdmRfaHBfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4NjF2ZF9kYWxsYXNfaW5pdF9ob29rLAorCQkuc2V0dXAgPSBhbGM4NjF2ZF9kYWxsYXNfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzY2MFZEX0FTVVNfVjFTXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODYxdmRfbGVub3ZvX21peGVyIH0sCkBAIC0xNTI4OSw2ICsxNTI2Nyw3IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4NjF2ZF8zc3RhY2tfMmNoX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg2MXZkX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGM4NjF2ZF9sZW5vdm9fdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzg2MXZkX2xlbm92b19zZXR1cCwKIAkJLmluaXRfaG9vayA9IGFsYzg2MXZkX2xlbm92b19pbml0X2hvb2ssCiAJfSwKIH07CkBAIC0xNTI5Niw2ICsxNTI3NSwxMyBAQAogLyoKICAqIEJJT1MgYXV0byBjb25maWd1cmF0aW9uCiAgKi8KK3N0YXRpYyBpbnQgYWxjODYxdmRfYXV0b19jcmVhdGVfaW5wdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKK3sKKwlyZXR1cm4gYWxjX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsIGNmZywgMHgxNSwgMHgwOSwgMCk7Cit9CisKKwogc3RhdGljIHZvaWQgYWxjODYxdmRfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJaGRhX25pZF90IG5pZCwgaW50IHBpbl90eXBlLCBpbnQgZGFjX2lkeCkKIHsKQEAgLTE1MzMwLDcgKzE1MzE2LDYgQEAKIAkJYWxjODYxdmRfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwgMCk7CiB9CiAKLSNkZWZpbmUgYWxjODYxdmRfaXNfaW5wdXRfcGluKG5pZCkJYWxjODgwX2lzX2lucHV0X3BpbihuaWQpCiAjZGVmaW5lIEFMQzg2MVZEX1BJTl9DRF9OSUQJCUFMQzg4MF9QSU5fQ0RfTklECiAKIHN0YXRpYyB2b2lkIGFsYzg2MXZkX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0xNTM0MCw3ICsxNTMyNSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07Ci0JCWlmIChhbGM4NjF2ZF9pc19pbnB1dF9waW4obmlkKSkgeworCQlpZiAoYWxjX2lzX2lucHV0X3Bpbihjb2RlYywgbmlkKSkgewogCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CiAJCQlpZiAobmlkICE9IEFMQzg2MVZEX1BJTl9DRF9OSUQgJiYKIAkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKQEAgLTE1NDA0LDEzICsxNTM4OSwyNSBAQAogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJfSBlbHNlIHsKLQkJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIGNobmFtZVtpXSk7CisJCQljb25zdCBjaGFyICpwZng7CisJCQlpZiAoY2ZnLT5saW5lX291dHMgPT0gMSAmJgorCQkJICAgIGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9TUEVBS0VSX09VVCkgeworCQkJCWlmICghY2ZnLT5ocF9waW5zKQorCQkJCQlwZnggPSAiU3BlYWtlciI7CisJCQkJZWxzZQorCQkJCQlwZnggPSAiUENNIjsKKwkJCX0gZWxzZQorCQkJCXBmeCA9IGNobmFtZVtpXTsKKwkJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7CiAJCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsIG5hbWUsCiAJCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWRfdiwgMywgMCwKIAkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgY2huYW1lW2ldKTsKKwkJCWlmIChjZmctPmxpbmVfb3V0cyA9PSAxICYmCisJCQkgICAgY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKQorCQkJCXBmeCA9ICJTcGVha2VyIjsKKwkJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7CiAJCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX0JJTkRfTVVURSwgbmFtZSwKIAkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZF9zLCAzLCAyLAogCQkJCQkJCSAgICAgIEhEQV9JTlBVVCkpOwpAQCAtMTU1MDMsNyArMTU1MDAsNyBAQAogCQkJCQkgICAgICJIZWFkcGhvbmUiKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQllcnIgPSBhbGM4ODBfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOworCWVyciA9IGFsYzg2MXZkX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMTU1NTcsOCArMTU1NTQsOCBAQAogCQkJCQkJICBhbGM4NjF2ZF9jZmdfdGJsKTsKIAogCWlmIChib2FyZF9jb25maWcgPCAwIHx8IGJvYXJkX2NvbmZpZyA+PSBBTEM4NjFWRF9NT0RFTF9MQVNUKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgJXMsICIKLQkJICAgICAgICJ0cnlpbmcgYXV0by1wcm9iZSBmcm9tIEJJT1MuLi5cbiIsIGNvZGVjLT5jaGlwX25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6ICVzOiBCSU9TIGF1dG8tcHJvYmluZy5cbiIsCisJCSAgICAgICBjb2RlYy0+Y2hpcF9uYW1lKTsKIAkJYm9hcmRfY29uZmlnID0gQUxDODYxVkRfQVVUTzsKIAl9CiAKQEAgLTE1NTgzLDcgKzE1NTgwLDcgQEAKIAl9CiAKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg2MVZEX0FVVE8pCi0JCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODYxdmRfcHJlc2V0c1tib2FyZF9jb25maWddKTsKKwkJc2V0dXBfcHJlc2V0KGNvZGVjLCAmYWxjODYxdmRfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIAogCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjApIHsKIAkJLyogYWx3YXlzIHR1cm4gb24gRUFQRCAqLwpAQCAtMTU2MDMsNyArMTU2MDAsNyBAQAogCWlmICghc3BlYy0+Y2Fwc3JjX25pZHMpCiAJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjODYxdmRfY2Fwc3JjX25pZHM7CiAKLQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfY2FwdHVyZV9taXhlcihjb2RlYyk7CiAJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDI7CkBAIC0xNTY0NCw5ICsxNTY0MSw5IEBACiAJMHgwMiwgMHgwMwogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBhbGM2NjJfYWRjX25pZHNbMV0gPSB7CitzdGF0aWMgaGRhX25pZF90IGFsYzY2Ml9hZGNfbmlkc1syXSA9IHsKIAkvKiBBREMxLTIgKi8KLQkweDA5LAorCTB4MDksIDB4MDgKIH07CiAKIHN0YXRpYyBoZGFfbmlkX3QgYWxjMjcyX2FkY19uaWRzWzFdID0gewpAQCAtMTU2NTQsNyArMTU2NTEsNyBAQAogCTB4MDgsCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IGFsYzY2Ml9jYXBzcmNfbmlkc1sxXSA9IHsgMHgyMiB9Oworc3RhdGljIGhkYV9uaWRfdCBhbGM2NjJfY2Fwc3JjX25pZHNbMl0gPSB7IDB4MjIsIDB4MjMgfTsKIHN0YXRpYyBoZGFfbmlkX3QgYWxjMjcyX2NhcHNyY19uaWRzWzFdID0geyAweDIzIH07CiAKIApAQCAtMTU2NzgsMTQgKzE1Njc1LDYgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzY2Ml9lZWVwY19jYXB0dXJlX3NvdXJjZSA9IHsKLQkubnVtX2l0ZW1zID0gMiwKLQkuaXRlbXMgPSB7Ci0JCXsgImktTWljIiwgMHgxIH0sCi0JCXsgImUtTWljIiwgMHgwIH0sCi0JfSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGM2NjNfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDMsCiAJLml0ZW1zID0gewpAQCAtMTU2OTUsMjMgKzE1Njg0LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzY2M19tNTF2YV9jYXB0dXJlX3NvdXJjZSA9IHsKLQkubnVtX2l0ZW1zID0gMiwKLQkuaXRlbXMgPSB7Ci0JCXsgIkV4dC1NaWMiLCAweDAgfSwKLQkJeyAiRC1NaWMiLCAweDkgfSwKLQl9LAotfTsKLQotI2lmIDEgLyogc2V0IHRvIDAgZm9yIHRlc3Rpbmcgb3RoZXIgaW5wdXQgc291cmNlcyBiZWxvdyAqLwotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI3Ml9uYzEwX2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAyLAotCS5pdGVtcyA9IHsKLQkJeyAiQXV0b3NlbGVjdCBNaWMiLCAweDAgfSwKLQkJeyAiSW50ZXJuYWwgTWljIiwgMHgxIH0sCi0JfSwKLX07Ci0jZWxzZQorI2lmIDAgLyogc2V0IHRvIDEgZm9yIHRlc3Rpbmcgb3RoZXIgaW5wdXQgc291cmNlcyBiZWxvdyAqLwogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI3Ml9uYzEwX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSAxNiwKIAkuaXRlbXMgPSB7CkBAIC0xNjM4MCw0NyArMTYzNTMsNDQgQEAKIAkJYWxjNjYyX2xlbm92b18xMDFlX2lzcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAotc3RhdGljIHZvaWQgYWxjNjYyX2VlZXBjX21pY19hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQl1bnNpZ25lZCBpbnQgcHJlc2VudDsKLQotCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTgsIDAsCi0JCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIyLCAwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAotCQkJICAgIDB4NzAwMCB8ICgweDAwIDw8IDgpIHwgKHByZXNlbnQgPyAwIDogMHg4MCkpOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjMsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JCQkgICAgMHg3MDAwIHwgKDB4MDAgPDwgOCkgfCAocHJlc2VudCA/IDAgOiAweDgwKSk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyMiwgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkJCSAgICAweDcwMDAgfCAoMHgwMSA8PCA4KSB8IChwcmVzZW50ID8gMHg4MCA6IDApKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIzLCAwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAotCQkJICAgIDB4NzAwMCB8ICgweDAxIDw8IDgpIHwgKHByZXNlbnQgPyAweDgwIDogMCkpOwotfQotCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCiBzdGF0aWMgdm9pZCBhbGM2NjJfZWVlcGNfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgcmVzKQogewogCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfTUlDX0VWRU5UKQotCQlhbGM2NjJfZWVlcGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKKwkJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CiAJZWxzZQogCQlhbGMyNjJfaGlwcG9fdW5zb2xfZXZlbnQoY29kZWMsIHJlcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzY2Ml9lZWVwY19pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzY2Ml9lZWVwY19zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlhbGMyNjJfaGlwcG8xX2luaXRfaG9vayhjb2RlYyk7Ci0JYWxjNjYyX2VlZXBjX21pY19hdXRvbXV0ZShjb2RlYyk7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlhbGMyNjJfaGlwcG8xX3NldHVwKGNvZGVjKTsKKwlzcGVjLT5leHRfbWljLnBpbiA9IDB4MTg7CisJc3BlYy0+ZXh0X21pYy5tdXhfaWR4ID0gMDsKKwlzcGVjLT5pbnRfbWljLnBpbiA9IDB4MTk7CisJc3BlYy0+aW50X21pYy5tdXhfaWR4ID0gMTsKKwlzcGVjLT5hdXRvX21pYyA9IDE7CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzY2Ml9lZWVwY19lcDIwX2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjNjYyX2VlZXBjX2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWFsYzI2Ml9oaXBwb19hdXRvbXV0ZShjb2RlYyk7CisJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7Cit9CisKK3N0YXRpYyB2b2lkIGFsYzY2Ml9lZWVwY19lcDIwX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MWI7Ci0JYWxjMjYyX2hpcHBvX21hc3Rlcl91cGRhdGUoY29kZWMpOwogfQogCisjZGVmaW5lIGFsYzY2Ml9lZWVwY19lcDIwX2luaXRob29rCWFsYzI2Ml9oaXBwb19tYXN0ZXJfdXBkYXRlCisKIHN0YXRpYyB2b2lkIGFsYzY2M19tNTF2YV9zcGVha2VyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXVuc2lnbmVkIGludCBwcmVzZW50OwpAQCAtMTY1MzEsMjMgKzE2NTAxLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzY2M19tNTF2YV9taWNfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JdW5zaWduZWQgaW50IHByZXNlbnQ7Ci0KLQlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE4LCAwLAotCQkJQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKQotCQkJJiBBQ19QSU5TRU5TRV9QUkVTRU5DRTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDIyLCAwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAotCQkJMHg3MDAwIHwgKDB4MDAgPDwgOCkgfCAocHJlc2VudCA/IDAgOiAweDgwKSk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgyMywgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkJCTB4NzAwMCB8ICgweDAwIDw8IDgpIHwgKHByZXNlbnQgPyAwIDogMHg4MCkpOwotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4MjIsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCi0JCQkweDcwMDAgfCAoMHgwOSA8PCA4KSB8IChwcmVzZW50ID8gMHg4MCA6IDApKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDIzLCAwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAotCQkJMHg3MDAwIHwgKDB4MDkgPDwgOCkgfCAocHJlc2VudCA/IDB4ODAgOiAwKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGFsYzY2M19tNTF2YV91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJICAgdW5zaWduZWQgaW50IHJlcykKIHsKQEAgLTE2NTU2LDM2ICsxNjUwOSwzMiBAQAogCQlhbGM2NjNfbTUxdmFfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CiAJCWJyZWFrOwogCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjNjYzX201MXZhX21pY19hdXRvbXV0ZShjb2RlYyk7CisJCWFsY19taWNfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGFsYzY2M19tNTF2YV9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzcGVjLT5leHRfbWljLnBpbiA9IDB4MTg7CisJc3BlYy0+ZXh0X21pYy5tdXhfaWR4ID0gMDsKKwlzcGVjLT5pbnRfbWljLnBpbiA9IDB4MTI7CisJc3BlYy0+aW50X21pYy5tdXhfaWR4ID0gMTsKKwlzcGVjLT5hdXRvX21pYyA9IDE7Cit9CisKIHN0YXRpYyB2b2lkIGFsYzY2M19tNTF2YV9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlhbGM2NjNfbTUxdmFfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JYWxjNjYzX201MXZhX21pY19hdXRvbXV0ZShjb2RlYyk7CisJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CiB9CiAKIC8qICoqKioqKioqKioqKioqKioqIE1vZGUxICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIGFsYzY2M19tb2RlMV91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkJICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgQUxDODgwX0hQX0VWRU5UOgotCQlhbGM2NjNfbTUxdmFfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjNjYyX2VlZXBjX21pY19hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCX0KLX0KKyNkZWZpbmUgYWxjNjYzX21vZGUxX3Vuc29sX2V2ZW50CWFsYzY2M19tNTF2YV91bnNvbF9ldmVudAorI2RlZmluZSBhbGM2NjNfbW9kZTFfc2V0dXAJCWFsYzY2M19tNTF2YV9zZXR1cAorI2RlZmluZSBhbGM2NjNfbW9kZTFfaW5pdGhvb2sJCWFsYzY2M19tNTF2YV9pbml0aG9vawogCi1zdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTFfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JYWxjNjYzX201MXZhX3NwZWFrZXJfYXV0b211dGUoY29kZWMpOwotCWFsYzY2Ml9lZWVwY19taWNfYXV0b211dGUoY29kZWMpOwotfQogLyogKioqKioqKioqKioqKioqKiogTW9kZTIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgYWxjNjYyX21vZGUyX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkgICB1bnNpZ25lZCBpbnQgcmVzKQpAQCAtMTY1OTUsMTUgKzE2NTQ0LDE3IEBACiAJCWFsYzY2Ml9mNXpfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CiAJCWJyZWFrOwogCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjNjYyX2VlZXBjX21pY19hdXRvbXV0ZShjb2RlYyk7CisJCWFsY19taWNfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAl9CiB9CiAKKyNkZWZpbmUgYWxjNjYyX21vZGUyX3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorCiBzdGF0aWMgdm9pZCBhbGM2NjJfbW9kZTJfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJYWxjNjYyX2Y1el9zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQlhbGM2NjJfZWVlcGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKKwlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKIH0KIC8qICoqKioqKioqKioqKioqKioqIE1vZGUzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIGFsYzY2M19tb2RlM191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKQEAgLTE2NjE0LDE1ICsxNjU2NSwxNyBAQAogCQlhbGM2NjNfdHdvX2hwX20xX3NwZWFrZXJfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAljYXNlIEFMQzg4MF9NSUNfRVZFTlQ6Ci0JCWFsYzY2Ml9lZWVwY19taWNfYXV0b211dGUoY29kZWMpOworCQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKIAkJYnJlYWs7CiAJfQogfQogCisjZGVmaW5lIGFsYzY2M19tb2RlM19zZXR1cAlhbGM2NjNfbTUxdmFfc2V0dXAKKwogc3RhdGljIHZvaWQgYWxjNjYzX21vZGUzX2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCWFsYzY2M190d29faHBfbTFfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7Ci0JYWxjNjYyX2VlZXBjX21pY19hdXRvbXV0ZShjb2RlYyk7CisJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CiB9CiAvKiAqKioqKioqKioqKioqKioqKiBNb2RlNCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTRfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCkBAIC0xNjYzMywxNSArMTY1ODYsMTcgQEAKIAkJYWxjNjYzXzIxamRfdHdvX3NwZWFrZXJfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAljYXNlIEFMQzg4MF9NSUNfRVZFTlQ6Ci0JCWFsYzY2Ml9lZWVwY19taWNfYXV0b211dGUoY29kZWMpOworCQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKIAkJYnJlYWs7CiAJfQogfQogCisjZGVmaW5lIGFsYzY2M19tb2RlNF9zZXR1cAlhbGM2NjNfbTUxdmFfc2V0dXAKKwogc3RhdGljIHZvaWQgYWxjNjYzX21vZGU0X2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCWFsYzY2M18yMWpkX3R3b19zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQlhbGM2NjJfZWVlcGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKKwlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKIH0KIC8qICoqKioqKioqKioqKioqKioqIE1vZGU1ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIGFsYzY2M19tb2RlNV91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKQEAgLTE2NjUyLDE1ICsxNjYwNywxNyBAQAogCQlhbGM2NjNfMTVqZF90d29fc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CiAJCWJyZWFrOwogCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjNjYyX2VlZXBjX21pY19hdXRvbXV0ZShjb2RlYyk7CisJCWFsY19taWNfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAl9CiB9CiAKKyNkZWZpbmUgYWxjNjYzX21vZGU1X3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorCiBzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTVfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJYWxjNjYzXzE1amRfdHdvX3NwZWFrZXJfYXV0b211dGUoY29kZWMpOwotCWFsYzY2Ml9lZWVwY19taWNfYXV0b211dGUoY29kZWMpOworCWFsY19taWNfYXV0b211dGUoY29kZWMpOwogfQogLyogKioqKioqKioqKioqKioqKiogTW9kZTYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgYWxjNjYzX21vZGU2X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLApAQCAtMTY2NzEsMTUgKzE2NjI4LDE3IEBACiAJCWFsYzY2M190d29faHBfbTJfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CiAJCWJyZWFrOwogCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjNjYyX2VlZXBjX21pY19hdXRvbXV0ZShjb2RlYyk7CisJCWFsY19taWNfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAl9CiB9CiAKKyNkZWZpbmUgYWxjNjYzX21vZGU2X3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorCiBzdGF0aWMgdm9pZCBhbGM2NjNfbW9kZTZfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJYWxjNjYzX3R3b19ocF9tMl9zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQlhbGM2NjJfZWVlcGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKKwlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAogc3RhdGljIHZvaWQgYWxjNjYzX2c3MXZfaHBfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0xNjcyMSwxNiArMTY2ODAsMTggQEAKIAkJYWxjNjYzX2c3MXZfZnJvbnRfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAljYXNlIEFMQzg4MF9NSUNfRVZFTlQ6Ci0JCWFsYzY2Ml9lZWVwY19taWNfYXV0b211dGUoY29kZWMpOworCQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKIAkJYnJlYWs7CiAJfQogfQogCisjZGVmaW5lIGFsYzY2M19nNzF2X3NldHVwCWFsYzY2M19tNTF2YV9zZXR1cAorCiBzdGF0aWMgdm9pZCBhbGM2NjNfZzcxdl9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlhbGM2NjNfZzcxdl9mcm9udF9hdXRvbXV0ZShjb2RlYyk7CiAJYWxjNjYzX2c3MXZfaHBfYXV0b211dGUoY29kZWMpOwotCWFsYzY2Ml9lZWVwY19taWNfYXV0b211dGUoY29kZWMpOworCWFsY19taWNfYXV0b211dGUoY29kZWMpOwogfQogCiBzdGF0aWMgdm9pZCBhbGM2NjNfZzUwdl91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKQEAgLTE2NzQxLDE1ICsxNjcwMiwxNyBAQAogCQlhbGM2NjNfbTUxdmFfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CiAJCWJyZWFrOwogCWNhc2UgQUxDODgwX01JQ19FVkVOVDoKLQkJYWxjNjYyX2VlZXBjX21pY19hdXRvbXV0ZShjb2RlYyk7CisJCWFsY19taWNfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAl9CiB9CiAKKyNkZWZpbmUgYWxjNjYzX2c1MHZfc2V0dXAJYWxjNjYzX201MXZhX3NldHVwCisKIHN0YXRpYyB2b2lkIGFsYzY2M19nNTB2X2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCWFsYzY2M19tNTF2YV9zcGVha2VyX2F1dG9tdXRlKGNvZGVjKTsKLQlhbGM2NjJfZWVlcGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKKwlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzY2Ml9lY3NfbWl4ZXJbXSA9IHsKQEAgLTE2OTUzLDggKzE2OTE2LDggQEAKIAkJLmRhY19uaWRzID0gYWxjNjYyX2RhY19uaWRzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjNjYyXzNTVF8yY2hfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjNjYyXzNTVF8yY2hfbW9kZXMsCi0JCS5pbnB1dF9tdXggPSAmYWxjNjYyX2VlZXBjX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGM2NjJfZWVlcGNfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzY2Ml9lZWVwY19zZXR1cCwKIAkJLmluaXRfaG9vayA9IGFsYzY2Ml9lZWVwY19pbml0aG9vaywKIAl9LAogCVtBTEM2NjJfQVNVU19FRUVQQ19FUDIwXSA9IHsKQEAgLTE2OTY4LDYgKzE2OTMxLDcgQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfNmNoX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzY2Ml9sZW5vdm9fMTAxZV9jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjNjYyX2VlZXBjX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM2NjJfZWVlcGNfZXAyMF9zZXR1cCwKIAkJLmluaXRfaG9vayA9IGFsYzY2Ml9lZWVwY19lcDIwX2luaXRob29rLAogCX0sCiAJW0FMQzY2Ml9FQ1NdID0gewpAQCAtMTY5NzgsOCArMTY5NDIsOCBAQAogCQkuZGFjX25pZHMgPSBhbGM2NjJfZGFjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKLQkJLmlucHV0X211eCA9ICZhbGM2NjJfZWVlcGNfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsYzY2Ml9lZWVwY191bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjNjYyX2VlZXBjX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjNjYyX2VlZXBjX2luaXRob29rLAogCX0sCiAJW0FMQzY2M19BU1VTX001MVZBXSA9IHsKQEAgLTE2OTkwLDggKzE2OTU0LDggQEAKIAkJLmRpZ19vdXRfbmlkID0gQUxDNjYyX0RJR09VVF9OSUQsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKLQkJLmlucHV0X211eCA9ICZhbGM2NjNfbTUxdmFfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsYzY2M19tNTF2YV91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjNjYzX201MXZhX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjNjYzX201MXZhX2luaXRob29rLAogCX0sCiAJW0FMQzY2M19BU1VTX0c3MVZdID0gewpAQCAtMTcwMDIsOCArMTY5NjYsOCBAQAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzY2Ml9lZWVwY19jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX2c3MXZfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzY2M19nNzF2X3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjNjYzX2c3MXZfaW5pdGhvb2ssCiAJfSwKIAlbQUxDNjYzX0FTVVNfSDEzXSA9IHsKQEAgLTE3MDEzLDcgKzE2OTc3LDYgQEAKIAkJLmRhY19uaWRzID0gYWxjNjYyX2RhY19uaWRzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjNjYyXzNTVF8yY2hfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjNjYyXzNTVF8yY2hfbW9kZXMsCi0JCS5pbnB1dF9tdXggPSAmYWxjNjYzX201MXZhX2NhcHR1cmVfc291cmNlLAogCQkudW5zb2xfZXZlbnQgPSBhbGM2NjNfbTUxdmFfdW5zb2xfZXZlbnQsCiAJCS5pbml0X2hvb2sgPSBhbGM2NjNfbTUxdmFfaW5pdGhvb2ssCiAJfSwKQEAgLTE3MDI3LDYgKzE2OTkwLDcgQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfNmNoX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzY2M19jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX2c1MHZfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzY2M19nNTB2X3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjNjYzX2c1MHZfaW5pdGhvb2ssCiAJfSwKIAlbQUxDNjYzX0FTVVNfTU9ERTFdID0gewpAQCAtMTcwNDAsOCArMTcwMDQsOCBAQAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzY2Ml9lZWVwY19jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX21vZGUxX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM2NjNfbW9kZTFfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGM2NjNfbW9kZTFfaW5pdGhvb2ssCiAJfSwKIAlbQUxDNjYyX0FTVVNfTU9ERTJdID0gewpAQCAtMTcwNTQsOCArMTcwMTgsOCBAQAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzY2Ml9lZWVwY19jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjNjYyX21vZGUyX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM2NjJfbW9kZTJfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGM2NjJfbW9kZTJfaW5pdGhvb2ssCiAJfSwKIAlbQUxDNjYzX0FTVVNfTU9ERTNdID0gewpAQCAtMTcwNjksOCArMTcwMzMsOCBAQAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzY2Ml9lZWVwY19jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX21vZGUzX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM2NjNfbW9kZTNfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGM2NjNfbW9kZTNfaW5pdGhvb2ssCiAJfSwKIAlbQUxDNjYzX0FTVVNfTU9ERTRdID0gewpAQCAtMTcwODQsOCArMTcwNDgsOCBAQAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzY2Ml9lZWVwY19jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX21vZGU0X3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM2NjNfbW9kZTRfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGM2NjNfbW9kZTRfaW5pdGhvb2ssCiAJfSwKIAlbQUxDNjYzX0FTVVNfTU9ERTVdID0gewpAQCAtMTcwOTksOCArMTcwNjMsOCBAQAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzY2Ml9lZWVwY19jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX21vZGU1X3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM2NjNfbW9kZTVfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGM2NjNfbW9kZTVfaW5pdGhvb2ssCiAJfSwKIAlbQUxDNjYzX0FTVVNfTU9ERTZdID0gewpAQCAtMTcxMTQsOCArMTcwNzgsOCBAQAogCQkuZGlnX291dF9uaWQgPSBBTEM2NjJfRElHT1VUX05JRCwKIAkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY2Ml8zU1RfMmNoX21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzY2Ml8zU1RfMmNoX21vZGVzLAotCQkuaW5wdXRfbXV4ID0gJmFsYzY2Ml9lZWVwY19jYXB0dXJlX3NvdXJjZSwKIAkJLnVuc29sX2V2ZW50ID0gYWxjNjYzX21vZGU2X3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM2NjNfbW9kZTZfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGM2NjNfbW9kZTZfaW5pdGhvb2ssCiAJfSwKIAlbQUxDMjcyX0RFTExdID0gewpAQCAtMTcxMjksOCArMTcwOTMsOCBAQAogCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNzJfYWRjX25pZHMpLAogCQkuY2Fwc3JjX25pZHMgPSBhbGMyNzJfY2Fwc3JjX25pZHMsCiAJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKLQkJLmlucHV0X211eCA9ICZhbGM2NjNfbTUxdmFfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsYzY2M19tNTF2YV91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjNjYzX201MXZhX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjNjYzX201MXZhX2luaXRob29rLAogCX0sCiAJW0FMQzI3Ml9ERUxMX1pNMV0gPSB7CkBAIC0xNzE0MSwxMSArMTcxMDUsMTEgQEAKIAkJLmRhY19uaWRzID0gYWxjNjYyX2RhY19uaWRzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjNjYyXzNTVF8yY2hfbW9kZXMpLAogCQkuYWRjX25pZHMgPSBhbGM2NjJfYWRjX25pZHMsCi0JCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzY2Ml9hZGNfbmlkcyksCisJCS5udW1fYWRjX25pZHMgPSAxLAogCQkuY2Fwc3JjX25pZHMgPSBhbGM2NjJfY2Fwc3JjX25pZHMsCiAJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKLQkJLmlucHV0X211eCA9ICZhbGM2NjNfbTUxdmFfY2FwdHVyZV9zb3VyY2UsCiAJCS51bnNvbF9ldmVudCA9IGFsYzY2M19tNTF2YV91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjNjYzX201MXZhX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjNjYzX201MXZhX2luaXRob29rLAogCX0sCiAJW0FMQzI3Ml9TQU1TVU5HX05DMTBdID0gewpAQCAtMTcxNTYsOCArMTcxMjAsOSBAQAogCQkuZGFjX25pZHMgPSBhbGMyNzJfZGFjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM2NjJfM1NUXzJjaF9tb2RlcyksCiAJCS5jaGFubmVsX21vZGUgPSBhbGM2NjJfM1NUXzJjaF9tb2RlcywKLQkJLmlucHV0X211eCA9ICZhbGMyNzJfbmMxMF9jYXB0dXJlX3NvdXJjZSwKKwkJLyouaW5wdXRfbXV4ID0gJmFsYzI3Ml9uYzEwX2NhcHR1cmVfc291cmNlLCovCiAJCS51bnNvbF9ldmVudCA9IGFsYzY2M19tb2RlNF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjNjYzX21vZGU0X3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjNjYzX21vZGU0X2luaXRob29rLAogCX0sCiB9OwpAQCAtMTcyMDksMTMgKzE3MTc0LDI1IEBACiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgewotCQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgY2huYW1lW2ldKTsKKwkJCWNvbnN0IGNoYXIgKnBmeDsKKwkJCWlmIChjZmctPmxpbmVfb3V0cyA9PSAxICYmCisJCQkgICAgY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKSB7CisJCQkJaWYgKCFjZmctPmhwX3BpbnMpCisJCQkJCXBmeCA9ICJTcGVha2VyIjsKKwkJCQllbHNlCisJCQkJCXBmeCA9ICJQQ00iOworCQkJfSBlbHNlCisJCQkJcGZ4ID0gY2huYW1lW2ldOworCQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgcGZ4KTsKIAkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKIAkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwKIAkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgY2huYW1lW2ldKTsKKwkJCWlmIChjZmctPmxpbmVfb3V0cyA9PSAxICYmCisJCQkgICAgY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKQorCQkJCXBmeCA9ICJTcGVha2VyIjsKKwkJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7CiAJCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAogCQkJCUhEQV9DT01QT1NFX0FNUF9WQUwoYWxjODgwX2lkeF90b19taXhlcihpKSwKIAkJCQkJCSAgICAzLCAwLCBIREFfSU5QVVQpKTsKQEAgLTE3Mjc3LDYyICsxNzI1NCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIHNyYyB3aWRnZXQgZnJvbSB0aGUgY29ubmVjdGlvbiBsaXN0IG9mIHRoZSBuaWQuCi0gKiByZXR1cm4gLTEgaWYgbm90IGZvdW5kCi0gKi8KLXN0YXRpYyBpbnQgYWxjNjYyX2lucHV0X3Bpbl9pZHgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCi0JCQkJaGRhX25pZF90IHNyYykKLXsKLQloZGFfbmlkX3QgY29ubl9saXN0W0hEQV9NQVhfQ09OTkVDVElPTlNdOwotCWludCBpLCBjb25uczsKLQotCWNvbm5zID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubl9saXN0LAotCQkJCQlBUlJBWV9TSVpFKGNvbm5fbGlzdCkpOwotCWlmIChjb25ucyA8IDApCi0JCXJldHVybiAtMTsKLQlmb3IgKGkgPSAwOyBpIDwgY29ubnM7IGkrKykKLQkJaWYgKGNvbm5fbGlzdFtpXSA9PSBzcmMpCi0JCQlyZXR1cm4gaTsKLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgYWxjNjYyX2lzX2lucHV0X3BpbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKLXsKLQl1bnNpZ25lZCBpbnQgcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKLQlyZXR1cm4gKHBpbmNhcCAmIEFDX1BJTkNBUF9JTikgIT0gMDsKLX0KLQogLyogY3JlYXRlIHBsYXliYWNrL2NhcHR1cmUgY29udHJvbHMgZm9yIGlucHV0IHBpbnMgKi8KLXN0YXRpYyBpbnQgYWxjNjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQotewotCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKLQlpbnQgaSwgZXJyLCBpZHg7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7Ci0JCWlmIChhbGM2NjJfaXNfaW5wdXRfcGluKGNvZGVjLCBjZmctPmlucHV0X3BpbnNbaV0pKSB7Ci0JCQlpZHggPSBhbGM2NjJfaW5wdXRfcGluX2lkeChjb2RlYywgMHgwYiwKLQkJCQkJCSAgIGNmZy0+aW5wdXRfcGluc1tpXSk7Ci0JCQlpZiAoaWR4ID49IDApIHsKLQkJCQllcnIgPSBuZXdfYW5hbG9nX2lucHV0KHNwZWMsIGNmZy0+aW5wdXRfcGluc1tpXSwKLQkJCQkJCSAgICAgICBhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldLAotCQkJCQkJICAgICAgIGlkeCwgMHgwYik7Ci0JCQkJaWYgKGVyciA8IDApCi0JCQkJCXJldHVybiBlcnI7Ci0JCQl9Ci0JCQlpZHggPSBhbGM2NjJfaW5wdXRfcGluX2lkeChjb2RlYywgMHgyMiwKLQkJCQkJCSAgIGNmZy0+aW5wdXRfcGluc1tpXSk7Ci0JCQlpZiAoaWR4ID49IDApIHsKLQkJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0KLQkJCQkJYXV0b19waW5fY2ZnX2xhYmVsc1tpXTsKLQkJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0gaWR4OwotCQkJCWltdXgtPm51bV9pdGVtcysrOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiAwOwotfQorI2RlZmluZSBhbGM2NjJfYXV0b19jcmVhdGVfaW5wdXRfY3RscyBcCisJYWxjODgwX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMKIAogc3RhdGljIHZvaWQgYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkgICAgICBoZGFfbmlkX3QgbmlkLCBpbnQgcGluX3R5cGUsCkBAIC0xNzM4Niw3ICsxNzMxMCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07Ci0JCWlmIChhbGM2NjJfaXNfaW5wdXRfcGluKGNvZGVjLCBuaWQpKSB7CisJCWlmIChhbGNfaXNfaW5wdXRfcGluKGNvZGVjLCBuaWQpKSB7CiAJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKIAkJCWlmIChuaWQgIT0gQUxDNjYyX1BJTl9DRF9OSUQgJiYKIAkJCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKSkKQEAgLTE3NDI3LDcgKzE3MzUxLDcgQEAKIAkJCQkJICAgIkhlYWRwaG9uZSIpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOworCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTE3NDg0LDggKzE3NDA4LDggQEAKIAkJCQkJCSAgYWxjNjYyX21vZGVscywKIAkJCSAgCSAgICAgICAgICAgICAgICAgIGFsYzY2Ml9jZmdfdGJsKTsKIAlpZiAoYm9hcmRfY29uZmlnIDwgMCkgewotCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yICVzLCAiCi0JCSAgICAgICAidHJ5aW5nIGF1dG8tcHJvYmUgZnJvbSBCSU9TLi4uXG4iLCBjb2RlYy0+Y2hpcF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiAlczogQklPUyBhdXRvLXByb2JpbmcuXG4iLAorCQkgICAgICAgY29kZWMtPmNoaXBfbmFtZSk7CiAJCWJvYXJkX2NvbmZpZyA9IEFMQzY2Ml9BVVRPOwogCX0KIApAQCAtMTc1MTAsNyArMTc0MzQsNyBAQAogCX0KIAogCWlmIChib2FyZF9jb25maWcgIT0gQUxDNjYyX0FVVE8pCi0JCXNldHVwX3ByZXNldChzcGVjLCAmYWxjNjYyX3ByZXNldHNbYm9hcmRfY29uZmlnXSk7CisJCXNldHVwX3ByZXNldChjb2RlYywgJmFsYzY2Ml9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCiAJc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGM2NjJfcGNtX2FuYWxvZ19wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjNjYyX3BjbV9hbmFsb2dfY2FwdHVyZTsKQEAgLTE3NTI2LDcgKzE3NDUwLDcgQEAKIAkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM2NjJfY2Fwc3JjX25pZHM7CiAKIAlpZiAoIXNwZWMtPmNhcF9taXhlcikKLQkJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJCXNldF9jYXB0dXJlX21peGVyKGNvZGVjKTsKIAlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjYyKQogCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNSwgSERBX0lOUFVUKTsKIAllbHNlCkBAIC0xNzU2MiwyMyArMTc0ODYsMjMgQEAKIAl7IC5pZCA9IDB4MTBlYzA4NjEsIC5uYW1lID0gIkFMQzg2MSIsIC5wYXRjaCA9IHBhdGNoX2FsYzg2MSB9LAogCXsgLmlkID0gMHgxMGVjMDg2MiwgLm5hbWUgPSAiQUxDODYxLVZEIiwgLnBhdGNoID0gcGF0Y2hfYWxjODYxdmQgfSwKIAl7IC5pZCA9IDB4MTBlYzA2NjIsIC5yZXYgPSAweDEwMDAwMiwgLm5hbWUgPSAiQUxDNjYyIHJldjIiLAotCSAgLnBhdGNoID0gcGF0Y2hfYWxjODgzIH0sCisJICAucGF0Y2ggPSBwYXRjaF9hbGM4ODIgfSwKIAl7IC5pZCA9IDB4MTBlYzA2NjIsIC5yZXYgPSAweDEwMDEwMSwgLm5hbWUgPSAiQUxDNjYyIHJldjEiLAogCSAgLnBhdGNoID0gcGF0Y2hfYWxjNjYyIH0sCiAJeyAuaWQgPSAweDEwZWMwNjYzLCAubmFtZSA9ICJBTEM2NjMiLCAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKIAl7IC5pZCA9IDB4MTBlYzA4ODAsIC5uYW1lID0gIkFMQzg4MCIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MCB9LAogCXsgLmlkID0gMHgxMGVjMDg4MiwgLm5hbWUgPSAiQUxDODgyIiwgLnBhdGNoID0gcGF0Y2hfYWxjODgyIH0sCi0JeyAuaWQgPSAweDEwZWMwODgzLCAubmFtZSA9ICJBTEM4ODMiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODMgfSwKKwl7IC5pZCA9IDB4MTBlYzA4ODMsIC5uYW1lID0gIkFMQzg4MyIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MiB9LAogCXsgLmlkID0gMHgxMGVjMDg4NSwgLnJldiA9IDB4MTAwMTAxLCAubmFtZSA9ICJBTEM4ODlBIiwKLQkgIC5wYXRjaCA9IHBhdGNoX2FsYzg4MiB9LCAvKiBzaG91bGQgYmUgcGF0Y2hfYWxjODgzKCkgaW4gZnV0dXJlICovCisJICAucGF0Y2ggPSBwYXRjaF9hbGM4ODIgfSwKIAl7IC5pZCA9IDB4MTBlYzA4ODUsIC5yZXYgPSAweDEwMDEwMywgLm5hbWUgPSAiQUxDODg5QSIsCi0JICAucGF0Y2ggPSBwYXRjaF9hbGM4ODIgfSwgLyogc2hvdWxkIGJlIHBhdGNoX2FsYzg4MygpIGluIGZ1dHVyZSAqLworCSAgLnBhdGNoID0gcGF0Y2hfYWxjODgyIH0sCiAJeyAuaWQgPSAweDEwZWMwODg1LCAubmFtZSA9ICJBTEM4ODUiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODIgfSwKLQl7IC5pZCA9IDB4MTBlYzA4ODcsIC5uYW1lID0gIkFMQzg4NyIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MyB9LAorCXsgLmlkID0gMHgxMGVjMDg4NywgLm5hbWUgPSAiQUxDODg3IiwgLnBhdGNoID0gcGF0Y2hfYWxjODgyIH0sCiAJeyAuaWQgPSAweDEwZWMwODg4LCAucmV2ID0gMHgxMDAxMDEsIC5uYW1lID0gIkFMQzEyMDAiLAotCSAgLnBhdGNoID0gcGF0Y2hfYWxjODgzIH0sCi0JeyAuaWQgPSAweDEwZWMwODg4LCAubmFtZSA9ICJBTEM4ODgiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODMgfSwKLQl7IC5pZCA9IDB4MTBlYzA4ODksIC5uYW1lID0gIkFMQzg4OSIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MyB9LAorCSAgLnBhdGNoID0gcGF0Y2hfYWxjODgyIH0sCisJeyAuaWQgPSAweDEwZWMwODg4LCAubmFtZSA9ICJBTEM4ODgiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODIgfSwKKwl7IC5pZCA9IDB4MTBlYzA4ODksIC5uYW1lID0gIkFMQzg4OSIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MiB9LAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCA2OTkwY2ZjLi5lMzFlNTNkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC00MCw2ICs0MCw4IEBACiAJU1RBQ19JTlNFUlRfRVZFTlQsCiAJU1RBQ19QV1JfRVZFTlQsCiAJU1RBQ19IUF9FVkVOVCwKKwlTVEFDX0xPX0VWRU5ULAorCVNUQUNfTUlDX0VWRU5ULAogfTsKIAogZW51bSB7CkBAIC04MSw2ICs4Myw3IEBACiAJU1RBQ19ERUxMX002X0RNSUMsCiAJU1RBQ19ERUxMX002X0JPVEgsCiAJU1RBQ19ERUxMX0VRLAorCVNUQUNfQUxJRU5XQVJFX00xN1gsCiAJU1RBQ185MkhENzNYWF9NT0RFTFMKIH07CiAKQEAgLTE3Nyw2ICsxODAsMTIgQEAKIAlzdHJ1Y3Qgc25kX2phY2sgKmphY2s7CiB9OwogCitzdHJ1Y3Qgc2lnbWF0ZWxfbWljX3JvdXRlIHsKKwloZGFfbmlkX3QgcGluOworCXVuc2lnbmVkIGNoYXIgbXV4X2lkeDsKKwl1bnNpZ25lZCBjaGFyIGRtdXhfaWR4OworfTsKKwogc3RydWN0IHNpZ21hdGVsX3NwZWMgewogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXhlcnNbNF07CiAJdW5zaWduZWQgaW50IG51bV9taXhlcnM7CkBAIC0xODgsNiArMTk3LDcgQEAKIAl1bnNpZ25lZCBpbnQgaHBfZGV0ZWN0OiAxOwogCXVuc2lnbmVkIGludCBzcGRpZl9tdXRlOiAxOwogCXVuc2lnbmVkIGludCBjaGVja192b2x1bWVfb2Zmc2V0OjE7CisJdW5zaWduZWQgaW50IGF1dG9fbWljOjE7CiAKIAkvKiBncGlvIGxpbmVzICovCiAJdW5zaWduZWQgaW50IGVhcGRfbWFzazsKQEAgLTIxOSw3ICsyMjksNiBAQAogCiAJLyogcGxheWJhY2sgKi8KIAlzdHJ1Y3QgaGRhX2lucHV0X211eCAqbW9ub19tdXg7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmFtcF9tdXg7CiAJdW5zaWduZWQgaW50IGN1cl9tbXV4OwogCXN0cnVjdCBoZGFfbXVsdGlfb3V0IG11bHRpb3V0OwogCWhkYV9uaWRfdCBkYWNfbmlkc1s1XTsKQEAgLTIzOSw2ICsyNDgsMTUgQEAKIAl1bnNpZ25lZCBpbnQgbnVtX2RtdXhlczsKIAloZGFfbmlkX3QgKnNtdXhfbmlkczsKIAl1bnNpZ25lZCBpbnQgbnVtX3NtdXhlczsKKwl1bnNpZ25lZCBpbnQgbnVtX2FuYWxvZ19tdXhlczsKKworCXVuc2lnbmVkIGxvbmcgKmNhcHZvbHM7IC8qIGFtcC12b2x1bWUgYXR0cjogSERBX0NPTVBPU0VfQU1QX1ZBTCgpICovCisJdW5zaWduZWQgbG9uZyAqY2Fwc3dzOyAvKiBhbXAtbXV0ZSBhdHRyOiBIREFfQ09NUE9TRV9BTVBfVkFMKCkgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2NhcHM7IC8qIG51bWJlciBvZiBjYXB0dXJlIHZvbHVtZS9zd2l0Y2ggZWxlbWVudHMgKi8KKworCXN0cnVjdCBzaWdtYXRlbF9taWNfcm91dGUgZXh0X21pYzsKKwlzdHJ1Y3Qgc2lnbWF0ZWxfbWljX3JvdXRlIGludF9taWM7CisKIAljb25zdCBjaGFyICoqc3BkaWZfbGFiZWxzOwogCiAJaGRhX25pZF90IGRpZ19pbl9uaWQ7CkBAIC0yNjMsNyArMjgxLDYgQEAKIAl1bnNpZ25lZCBpbnQgY3VyX3NtdXhbMl07CiAJdW5zaWduZWQgaW50IGN1cl9hbXV4OwogCWhkYV9uaWRfdCAqYW1wX25pZHM7Ci0JdW5zaWduZWQgaW50IG51bV9hbXBzOwogCXVuc2lnbmVkIGludCBwb3dlcmRvd25fYWRjczsKIAogCS8qIGkvbyBzd2l0Y2hlcyAqLwpAQCAtMjgyLDcgKzI5OSw2IEBACiAJc3RydWN0IGhkYV9pbnB1dF9tdXggcHJpdmF0ZV9kaW11eDsKIAlzdHJ1Y3QgaGRhX2lucHV0X211eCBwcml2YXRlX2ltdXg7CiAJc3RydWN0IGhkYV9pbnB1dF9tdXggcHJpdmF0ZV9zbXV4OwotCXN0cnVjdCBoZGFfaW5wdXRfbXV4IHByaXZhdGVfYW1wX211eDsKIAlzdHJ1Y3QgaGRhX2lucHV0X211eCBwcml2YXRlX21vbm9fbXV4OwogfTsKIApAQCAtMzExLDExICszMjcsNiBAQAogCTB4MWEsIDB4MWIKIH07CiAKLSNkZWZpbmUgREVMTF9NNl9BTVAgMgotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDczeHhfYW1wX25pZHNbM10gPSB7Ci0JMHgwYiwgMHgwYywgMHgwZQotfTsKLQogI2RlZmluZSBTVEFDOTJIRDczWFhfTlVNX0RNSUNTCTIKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3M3h4X2RtaWNfbmlkc1tTVEFDOTJIRDczWFhfTlVNX0RNSUNTICsgMV0gPSB7CiAJMHgxMywgMHgxNCwgMApAQCAtMzIzLDggKzMzNCw4IEBACiAKICNkZWZpbmUgU1RBQzkySEQ3M19EQUNfQ09VTlQgNQogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkNzN4eF9tdXhfbmlkc1s0XSA9IHsKLQkweDI4LCAweDI5LCAweDJhLCAweDJiLAorc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDczeHhfbXV4X25pZHNbMl0gPSB7CisJMHgyMCwgMHgyMSwKIH07CiAKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3M3h4X2RtdXhfbmlkc1syXSA9IHsKQEAgLTMzNSwxNCArMzQ2LDE2IEBACiAJMHgyMiwgMHgyMywKIH07CiAKLSNkZWZpbmUgU1RBQzkySEQ4M1hYWF9OVU1fRE1JQ1MJMgotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDgzeHh4X2RtaWNfbmlkc1tTVEFDOTJIRDgzWFhYX05VTV9ETUlDUyArIDFdID0gewotCTB4MTEsIDB4MTIsIDAKKyNkZWZpbmUgU1RBQzkySEQ3M1hYX05VTV9DQVBTCTIKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0YWM5MmhkNzN4eF9jYXB2b2xzW10gPSB7CisJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDIwLCAzLCAwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MjEsIDMsIDAsIEhEQV9PVVRQVVQpLAogfTsKKyNkZWZpbmUgc3RhYzkyaGQ3M3h4X2NhcHN3cwlzdGFjOTJoZDczeHhfY2Fwdm9scwogCiAjZGVmaW5lIFNUQUM5MkhEODNfREFDX0NPVU5UIDMKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDgzeHh4X2RtdXhfbmlkc1syXSA9IHsKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4M3h4eF9tdXhfbmlkc1syXSA9IHsKIAkweDE3LCAweDE4LAogfTsKIApAQCAtMzYyLDkgKzM3NSwxMiBAQAogCTB4MDMsIDB4MGMsIDB4MjAsIDB4NDAsCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODN4eHhfYW1wX25pZHNbMV0gPSB7Ci0JMHhjLAorI2RlZmluZSBTVEFDOTJIRDgzWFhYX05VTV9DQVBTCTIKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0YWM5MmhkODN4eHhfY2Fwdm9sc1tdID0geworCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNywgMywgMCwgSERBX09VVFBVVCksCisJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE4LCAzLCAwLCBIREFfT1VUUFVUKSwKIH07CisjZGVmaW5lIHN0YWM5MmhkODN4eHhfY2Fwc3dzCXN0YWM5MmhkODN4eHhfY2Fwdm9scwogCiBzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfcHdyX25pZHNbM10gPSB7CiAJMHgwYSwgMHgwZCwgMHgwZgpAQCAtMzk1LDYgKzQxMSwxMyBAQAogCTB4MjIsIDAKIH07CiAKKyNkZWZpbmUgU1RBQzkySEQ3MUJYWF9OVU1fQ0FQUwkJMgorc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhYzkyaGQ3MWJ4eF9jYXB2b2xzW10gPSB7CisJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDFjLCAzLCAwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWQsIDMsIDAsIEhEQV9PVVRQVVQpLAorfTsKKyNkZWZpbmUgc3RhYzkyaGQ3MWJ4eF9jYXBzd3MJc3RhYzkyaGQ3MWJ4eF9jYXB2b2xzCisKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyNXhfYWRjX25pZHNbMV0gPSB7CiAgICAgICAgIDB4MDMsCiB9OwpAQCAtNDE2LDYgKzQzOSwxMyBAQAogCTB4MTQsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFjOTI1eF9jYXB2b2xzW10gPSB7CisJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDA5LCAzLCAwLCBIREFfT1VUUFVUKSwKK307CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFjOTI1eF9jYXBzd3NbXSA9IHsKKwlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTQsIDMsIDAsIEhEQV9PVVRQVVQpLAorfTsKKwogc3RhdGljIGhkYV9uaWRfdCBzdGFjOTIyeF9hZGNfbmlkc1syXSA9IHsKICAgICAgICAgMHgwNiwgMHgwNywKIH07CkBAIC00MjQsNiArNDU0LDEzIEBACiAgICAgICAgIDB4MTIsIDB4MTMsCiB9OwogCisjZGVmaW5lIFNUQUM5MjJYX05VTV9DQVBTCTIKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0YWM5MjJ4X2NhcHZvbHNbXSA9IHsKKwlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MTcsIDMsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE4LCAzLCAwLCBIREFfSU5QVVQpLAorfTsKKyNkZWZpbmUgc3RhYzkyMnhfY2Fwc3dzCQlzdGFjOTIyeF9jYXB2b2xzCisKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyN3hfc2xhdmVfZGlnX291dHNbMl0gPSB7CiAJMHgxZiwgMCwKIH07CkBAIC00NTMsNiArNDkwLDE4IEBACiAJMHgxMywgMHgxNCwgMAogfTsKIAorI2RlZmluZSBTVEFDOTI3WF9OVU1fQ0FQUwkzCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFjOTI3eF9jYXB2b2xzW10gPSB7CisJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDE4LCAzLCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxOSwgMywgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWEsIDMsIDAsIEhEQV9JTlBVVCksCit9Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhYzkyN3hfY2Fwc3dzW10gPSB7CisJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDFiLCAzLCAwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWMsIDMsIDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxZCwgMywgMCwgSERBX09VVFBVVCksCit9OworCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyN3hfc3BkaWZfbGFiZWxzWzVdID0gewogCSJEaWdpdGFsIFBsYXliYWNrIiwgIkFEQVQiLCAiQW5hbG9nIE11eCAxIiwKIAkiQW5hbG9nIE11eCAyIiwgIkFuYWxvZyBNdXggMyIKQEAgLTQ3OSw2ICs1MjgsMTYgQEAKICAgICAgICAgMHgxNywgMHgxOCwgMAogfTsKIAorI2RlZmluZSBTVEFDOTIwNV9OVU1fQ0FQUwkyCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFjOTIwNV9jYXB2b2xzW10gPSB7CisJSERBX0NPTVBPU0VfQU1QX1ZBTCgweDFiLCAzLCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxYywgMywgMCwgSERBX0lOUFVUKSwKK307CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFjOTIwNV9jYXBzd3NbXSA9IHsKKwlIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWQsIDMsIDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxZSwgMywgMCwgSERBX09VVFBVVCksCit9OworCiBzdGF0aWMgaGRhX25pZF90IHN0YWM5MjAwX3Bpbl9uaWRzWzhdID0gewogCTB4MDgsIDB4MDksIDB4MGQsIDB4MGUsIAogCTB4MGYsIDB4MTAsIDB4MTEsIDB4MTIsCkBAIC01MjksMzQgKzU4OCw2IEBACiAJMHgyMSwgMHgyMiwKIH07CiAKLSNkZWZpbmUgc3RhYzkyeHhfYW1wX3ZvbHVtZV9pbmZvIHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9pbmZvCi0KLXN0YXRpYyBpbnQgc3RhYzkyeHhfYW1wX3ZvbHVtZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IG5pZCA9IHNwZWMtPmFtcF9uaWRzW3NwZWMtPmN1cl9hbXV4XTsKLQotCWtjb250cm9sLT5wcml2YXRlX3ZhbHVlIF49IGdldF9hbXBfbmlkKGtjb250cm9sKTsKLQlrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSB8PSBuaWQ7Ci0KLQlyZXR1cm4gc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldChrY29udHJvbCwgdWNvbnRyb2wpOwotfQotCi1zdGF0aWMgaW50IHN0YWM5Mnh4X2FtcF92b2x1bWVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hbXBfbmlkc1tzcGVjLT5jdXJfYW11eF07Ci0KLQlrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSBePSBnZXRfYW1wX25pZChrY29udHJvbCk7Ci0Ja2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgfD0gbmlkOwotCi0JcmV0dXJuIHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9wdXQoa2NvbnRyb2wsIHVjb250cm9sKTsKLX0KLQogc3RhdGljIGludCBzdGFjOTJ4eF9kbXV4X2VudW1faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewpAQCAtNjkzLDkgKzcyNCwzNSBAQAogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IGFkY19pZHggPSBzbmRfY3RsX2dldF9pb2ZmaWR4KGtjb250cm9sLCAmdWNvbnRyb2wtPmlkKTsKKwljb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9IHNwZWMtPmlucHV0X211eDsKKwl1bnNpZ25lZCBpbnQgaWR4LCBwcmV2X2lkeDsKIAotCXJldHVybiBzbmRfaGRhX2lucHV0X211eF9wdXQoY29kZWMsIHNwZWMtPmlucHV0X211eCwgdWNvbnRyb2wsCi0JCQkJICAgICBzcGVjLT5tdXhfbmlkc1thZGNfaWR4XSwgJnNwZWMtPmN1cl9tdXhbYWRjX2lkeF0pOworCWlkeCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CisJaWYgKGlkeCA+PSBpbXV4LT5udW1faXRlbXMpCisJCWlkeCA9IGltdXgtPm51bV9pdGVtcyAtIDE7CisJcHJldl9pZHggPSBzcGVjLT5jdXJfbXV4W2FkY19pZHhdOworCWlmIChwcmV2X2lkeCA9PSBpZHgpCisJCXJldHVybiAwOworCWlmIChpZHggPCBzcGVjLT5udW1fYW5hbG9nX211eGVzKSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIHNwZWMtPm11eF9uaWRzW2FkY19pZHhdLCAwLAorCQkJCQkgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAorCQkJCQkgIGltdXgtPml0ZW1zW2lkeF0uaW5kZXgpOworCQlpZiAocHJldl9pZHggPj0gc3BlYy0+bnVtX2FuYWxvZ19tdXhlcykgeworCQkJaW11eCA9IHNwZWMtPmRpbnB1dF9tdXg7CisJCQkvKiAwID0gYW5hbG9nICovCisJCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLAorCQkJCQkJICBzcGVjLT5kbXV4X25pZHNbYWRjX2lkeF0sIDAsCisJCQkJCQkgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAorCQkJCQkJICBpbXV4LT5pdGVtc1swXS5pbmRleCk7CisJCX0KKwl9IGVsc2UgeworCQlpbXV4ID0gc3BlYy0+ZGlucHV0X211eDsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgc3BlYy0+ZG11eF9uaWRzW2FkY19pZHhdLCAwLAorCQkJCQkgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAorCQkJCQkgIGltdXgtPml0ZW1zW2lkeCAtIDFdLmluZGV4KTsKKwl9CisJc3BlYy0+Y3VyX211eFthZGNfaWR4XSA9IGlkeDsKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCBzdGFjOTJ4eF9tb25vX211eF9lbnVtX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCkBAIC03MjYsNDEgKzc4Myw2IEBACiAJCQkJICAgICBzcGVjLT5tb25vX25pZCwgJnNwZWMtPmN1cl9tbXV4KTsKIH0KIAotc3RhdGljIGludCBzdGFjOTJ4eF9hbXBfbXV4X2VudW1faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotewotCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JcmV0dXJuIHNuZF9oZGFfaW5wdXRfbXV4X2luZm8oc3BlYy0+YW1wX211eCwgdWluZm8pOwotfQotCi1zdGF0aWMgaW50IHN0YWM5Mnh4X2FtcF9tdXhfZW51bV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0Jc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQotCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBzcGVjLT5jdXJfYW11eDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdGFjOTJ4eF9hbXBfbXV4X2VudW1fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc3RydWN0IHNuZF9rY29udHJvbCAqY3RsID0KLQkJc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIkFtcCBDYXB0dXJlIFZvbHVtZSIpOwotCWlmICghY3RsKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNuZF9jdGxfbm90aWZ5KGNvZGVjLT5idXMtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFIHwKLQkJU05EUlZfQ1RMX0VWRU5UX01BU0tfSU5GTywgJmN0bC0+aWQpOwotCi0JcmV0dXJuIHNuZF9oZGFfaW5wdXRfbXV4X3B1dChjb2RlYywgc3BlYy0+YW1wX211eCwgdWNvbnRyb2wsCi0JCQkJICAgICAwLCAmc3BlYy0+Y3VyX2FtdXgpOwotfQotCiAjZGVmaW5lIHN0YWM5Mnh4X2Fsb29wYmFja19pbmZvIHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8KIAogc3RhdGljIGludCBzdGFjOTJ4eF9hbG9vcGJhY2tfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtODI4LDg0ICs4NTAsMTYgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDczeHhfNmNoX2NvcmVfaW5pdFtdID0gewotCS8qIHNldCBtYXN0ZXIgdm9sdW1lIGFuZCBkaXJlY3QgY29udHJvbCAqLwotCXsgMHgxZiwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCi0JLyogc2V0dXAgYWRjcyB0byBwb2ludCB0byBtaXhlciAqLwotCXsgMHgyMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MGJ9LAotCXsgMHgyMSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MGJ9LAotCXsgMHgwZiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKLQl7IDB4MTAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCi0JeyAweDExLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAotCS8qIHNldHVwIGltcG9ydCBtdXhzICovCi0JeyAweDI4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCi0JeyAweDI5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCi0JeyAweDJhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCi0JeyAweDJiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCi0Je30KLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgZGVsbF9lcV9jb3JlX2luaXRbXSA9IHsKIAkvKiBzZXQgbWFzdGVyIHZvbHVtZSB0byBtYXggdmFsdWUgd2l0aG91dCBkaXN0b3J0aW9uCiAJICogYW5kIGRpcmVjdCBjb250cm9sICovCiAJeyAweDFmLCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGVjfSwKLQkvKiBzZXR1cCBhZGNzIHRvIHBvaW50IHRvIG1peGVyICovCi0JeyAweDIwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwYn0sCi0JeyAweDIxLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwYn0sCi0JLyogc2V0dXAgaW1wb3J0IG11eHMgKi8KLQl7IDB4MjgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKLQl7IDB4MjksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKLQl7IDB4MmEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKLQl7IDB4MmIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBkZWxsX202X2NvcmVfaW5pdFtdID0gewotCXsgMHgxZiwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCi0JLyogc2V0dXAgYWRjcyB0byBwb2ludCB0byBtaXhlciAqLwotCXsgMHgyMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MGJ9LAotCXsgMHgyMSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MGJ9LAotCS8qIHNldHVwIGltcG9ydCBtdXhzICovCi0JeyAweDI4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCi0JeyAweDI5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCi0JeyAweDJhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCi0JeyAweDJiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCi0Je30KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ3M3h4XzhjaF9jb3JlX2luaXRbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ3M3h4X2NvcmVfaW5pdFtdID0gewogCS8qIHNldCBtYXN0ZXIgdm9sdW1lIGFuZCBkaXJlY3QgY29udHJvbCAqLwogCXsgMHgxZiwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCi0JLyogc2V0dXAgYWRjcyB0byBwb2ludCB0byBtaXhlciAqLwotCXsgMHgyMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MGJ9LAotCXsgMHgyMSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MGJ9LAotCXsgMHgwZiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKLQl7IDB4MTAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCi0JeyAweDExLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAotCS8qIHNldHVwIGltcG9ydCBtdXhzICovCi0JeyAweDI4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCi0JeyAweDI5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCi0JeyAweDJhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCi0JeyAweDJiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwM30sCi0Je30KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ3M3h4XzEwY2hfY29yZV9pbml0W10gPSB7Ci0JLyogc2V0IG1hc3RlciB2b2x1bWUgYW5kIGRpcmVjdCBjb250cm9sICovCi0JeyAweDFmLCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKLQkvKiBkYWMzIGlzIGNvbm5lY3RlZCB0byBpbXBvcnQzIG11eCAqLwotCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDdmfSwKLQkvKiBzZXR1cCBhZGNzIHRvIHBvaW50IHRvIG1peGVyICovCi0JeyAweDIwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwYn0sCi0JeyAweDIxLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwYn0sCi0JeyAweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAotCXsgMHgxMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKLQl7IDB4MTEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCi0JLyogc2V0dXAgaW1wb3J0IG11eHMgKi8KLQl7IDB4MjgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKLQl7IDB4MjksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKLQl7IDB4MmEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKLQl7IDB4MmIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAzfSwKIAl7fQogfTsKIApAQCAtOTI1LDE5ICs4NzksNiBAQAogCXt9CiB9OwogCi0jZGVmaW5lIEhEX0RJU0FCTEVfUE9SVEYgMQotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDcxYnh4X2FuYWxvZ19jb3JlX2luaXRbXSA9IHsKLQkvKiBzdGFydCBvZiBjb25maWcgIzEgKi8KLQotCS8qIGNvbm5lY3QgcG9ydCAwZiB0byBhdWRpbyBtaXhlciAqLwotCXsgMHgwZiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4Mn0sCi0JLyogc3RhcnQgb2YgY29uZmlnICMyICovCi0KLQkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8KLQl7IDB4MjgsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4ZmZ9LAotCXt9Ci19OwotCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkNzFieHhfdW5tdXRlX2NvcmVfaW5pdFtdID0gewogCS8qIHVubXV0ZSByaWdodCBhbmQgbGVmdCBjaGFubmVscyBmb3Igbm9kZXMgMHgwZiwgMHhhLCAweDBkICovCiAJeyAweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKQEAgLTk5NiwzMSArOTM3LDYgQEAKIAkJLnB1dCA9IHN0YWM5Mnh4X21vbm9fbXV4X2VudW1fcHV0LCBcCiAJfQogCi0jZGVmaW5lIFNUQUNfQU1QX01VWCBcCi0JeyBcCi0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCi0JCS5uYW1lID0gIkFtcCBTZWxlY3RvciBDYXB0dXJlIFN3aXRjaCIsIFwKLQkJLmNvdW50ID0gMSwgXAotCQkuaW5mbyA9IHN0YWM5Mnh4X2FtcF9tdXhfZW51bV9pbmZvLCBcCi0JCS5nZXQgPSBzdGFjOTJ4eF9hbXBfbXV4X2VudW1fZ2V0LCBcCi0JCS5wdXQgPSBzdGFjOTJ4eF9hbXBfbXV4X2VudW1fcHV0LCBcCi0JfQotCi0jZGVmaW5lIFNUQUNfQU1QX1ZPTCh4bmFtZSwgbmlkLCBjaHMsIGlkeCwgZGlyKSBcCi0JeyBcCi0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCi0JCS5uYW1lID0geG5hbWUsIFwKLQkJLmluZGV4ID0gMCwgXAotCQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8IFwKLQkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCB8IFwKLQkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0ssIFwKLQkJLmluZm8gPSBzdGFjOTJ4eF9hbXBfdm9sdW1lX2luZm8sIFwKLQkJLmdldCA9IHN0YWM5Mnh4X2FtcF92b2x1bWVfZ2V0LCBcCi0JCS5wdXQgPSBzdGFjOTJ4eF9hbXBfdm9sdW1lX3B1dCwgXAotCQkudGx2ID0geyAuYyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3RsdiB9LCBcCi0JCS5wcml2YXRlX3ZhbHVlID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIGNocywgaWR4LCBkaXIpIFwKLQl9Ci0KICNkZWZpbmUgU1RBQ19BTkFMT0dfTE9PUEJBQ0sodmVyYl9yZWFkLCB2ZXJiX3dyaXRlLCBjbnQpIFwKIAl7IFwKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKQEAgLTEwNTEsMzQgKzk2Nyw2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotI2RlZmluZSBERUxMX002X01JWEVSIDYKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfNmNoX21peGVyW10gPSB7Ci0JLyogc3RhcnQgb2YgY29uZmlnICMxICovCi0JSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIE1peGVyIENhcHR1cmUgVm9sdW1lIiwgMHgxZCwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIE1peGVyIENhcHR1cmUgU3dpdGNoIiwgMHgxZCwgMCwgSERBX0lOUFVUKSwKLQotCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgSW4gTWl4ZXIgQ2FwdHVyZSBWb2x1bWUiLCAweDFkLCAweDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkxpbmUgSW4gTWl4ZXIgQ2FwdHVyZSBTd2l0Y2giLCAweDFkLCAweDIsIEhEQV9JTlBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FKCJDRCBNaXhlciBDYXB0dXJlIFZvbHVtZSIsIDB4MWQsIDB4NCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQ0QgTWl4ZXIgQ2FwdHVyZSBTd2l0Y2giLCAweDFkLCAweDQsIEhEQV9JTlBVVCksCi0KLQkvKiBzdGFydCBvZiBjb25maWcgIzIgKi8KLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgTWl4ZXIgQ2FwdHVyZSBWb2x1bWUiLCAweDFkLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIk1pYyBNaXhlciBDYXB0dXJlIFN3aXRjaCIsIDB4MWQsIDB4MSwgSERBX0lOUFVUKSwKLQotCUhEQV9DT0RFQ19WT0xVTUUoIkRBQyBNaXhlciBDYXB0dXJlIFZvbHVtZSIsIDB4MWQsIDB4MywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiREFDIE1peGVyIENhcHR1cmUgU3dpdGNoIiwgMHgxZCwgMHgzLCBIREFfSU5QVVQpLAotCi0JSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDEsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MSwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKLQotCXsgfSAvKiBlbmQgKi8KLX07Ci0KIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfNmNoX2xvb3BiYWNrW10gPSB7CiAJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCAzKSwKIAl7fQpAQCAtMTA5NCwxMzQgKzk4MiwxNCBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzhjaF9taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAotCi0JSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgxLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDEsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgTWl4ZXIgQ2FwdHVyZSBWb2x1bWUiLCAweDFkLCAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgTWl4ZXIgQ2FwdHVyZSBTd2l0Y2giLCAweDFkLCAwLCBIREFfSU5QVVQpLAotCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIE1peGVyIENhcHR1cmUgVm9sdW1lIiwgMHgxZCwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgTWl4ZXIgQ2FwdHVyZSBTd2l0Y2giLCAweDFkLCAweDEsIEhEQV9JTlBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEluIE1peGVyIENhcHR1cmUgVm9sdW1lIiwgMHgxZCwgMHgyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJMaW5lIEluIE1peGVyIENhcHR1cmUgU3dpdGNoIiwgMHgxZCwgMHgyLCBIREFfSU5QVVQpLAotCi0JSERBX0NPREVDX1ZPTFVNRSgiREFDIE1peGVyIENhcHR1cmUgVm9sdW1lIiwgMHgxZCwgMHgzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJEQUMgTWl4ZXIgQ2FwdHVyZSBTd2l0Y2giLCAweDFkLCAweDMsIEhEQV9JTlBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FKCJDRCBNaXhlciBDYXB0dXJlIFZvbHVtZSIsIDB4MWQsIDB4NCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQ0QgTWl4ZXIgQ2FwdHVyZSBTd2l0Y2giLCAweDFkLCAweDQsIEhEQV9JTlBVVCksCi0JeyB9IC8qIGVuZCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF8xMGNoX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDEsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MSwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKLQotCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBNaXhlciBDYXB0dXJlIFZvbHVtZSIsIDB4MWQsIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBNaXhlciBDYXB0dXJlIFN3aXRjaCIsIDB4MWQsIDAsIEhEQV9JTlBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgTWl4ZXIgQ2FwdHVyZSBWb2x1bWUiLCAweDFkLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIk1pYyBNaXhlciBDYXB0dXJlIFN3aXRjaCIsIDB4MWQsIDB4MSwgSERBX0lOUFVUKSwKLQotCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgSW4gTWl4ZXIgQ2FwdHVyZSBWb2x1bWUiLCAweDFkLCAweDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkxpbmUgSW4gTWl4ZXIgQ2FwdHVyZSBTd2l0Y2giLCAweDFkLCAweDIsIEhEQV9JTlBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FKCJEQUMgTWl4ZXIgQ2FwdHVyZSBWb2x1bWUiLCAweDFkLCAweDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkRBQyBNaXhlciBDYXB0dXJlIFN3aXRjaCIsIDB4MWQsIDB4MywgSERBX0lOUFVUKSwKLQotCUhEQV9DT0RFQ19WT0xVTUUoIkNEIE1peGVyIENhcHR1cmUgVm9sdW1lIiwgMHgxZCwgMHg0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDRCBNaXhlciBDYXB0dXJlIFN3aXRjaCIsIDB4MWQsIDB4NCwgSERBX0lOUFVUKSwKLQl7IH0gLyogZW5kICovCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDgzeHh4X21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDE3LCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MTcsIDB4MCwgSERBX09VVFBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDEsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MSwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKLQotCUhEQV9DT0RFQ19WT0xVTUUoIkRBQzAgQ2FwdHVyZSBWb2x1bWUiLCAweDFiLCAweDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkRBQzAgQ2FwdHVyZSBTd2l0Y2giLCAweDFiLCAweDMsIEhEQV9JTlBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FKCJEQUMxIENhcHR1cmUgVm9sdW1lIiwgMHgxYiwgMHg0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJEQUMxIENhcHR1cmUgU3dpdGNoIiwgMHgxYiwgMHg0LCBIREFfSU5QVVQpLAotCi0JSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgQ2FwdHVyZSBTd2l0Y2giLCAweDFiLCAweDAsIEhEQV9JTlBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEluIENhcHR1cmUgVm9sdW1lIiwgMHgxYiwgMHgyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJMaW5lIEluIENhcHR1cmUgU3dpdGNoIiwgMHgxYiwgMHgyLCBIREFfSU5QVVQpLAotCi0JLyoKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIk1pYyBDYXB0dXJlIFN3aXRjaCIsIDB4MWIgMHgxLCBIREFfSU5QVVQpLAotCSovCi0JeyB9IC8qIGVuZCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzFieHhfYW5hbG9nX21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDEsIDB4MWQsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MSwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKLQkvKiBhbmFsb2cgcGMtYmVlcCByZXBsYWNlZCB3aXRoIGRpZ2l0YWwgYmVlcCBzdXBwb3J0ICovCi0JLyoKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFZvbHVtZSIsIDB4MTcsIDB4MiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBTd2l0Y2giLCAweDE3LCAweDIsIEhEQV9JTlBVVCksCi0JKi8KLQotCUhEQV9DT0RFQ19NVVRFKCJJbXBvcnQwIE11eCBDYXB0dXJlIFN3aXRjaCIsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbXBvcnQwIE11eCBDYXB0dXJlIFZvbHVtZSIsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKLQotCUhEQV9DT0RFQ19NVVRFKCJJbXBvcnQxIE11eCBDYXB0dXJlIFN3aXRjaCIsIDB4MTcsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJJbXBvcnQxIE11eCBDYXB0dXJlIFZvbHVtZSIsIDB4MTcsIDB4MSwgSERBX0lOUFVUKSwKLQotCUhEQV9DT0RFQ19NVVRFKCJEQUMwIENhcHR1cmUgU3dpdGNoIiwgMHgxNywgMHgzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkRBQzAgQ2FwdHVyZSBWb2x1bWUiLCAweDE3LCAweDMsIEhEQV9JTlBVVCksCi0KLQlIREFfQ09ERUNfTVVURSgiREFDMSBDYXB0dXJlIFN3aXRjaCIsIDB4MTcsIDB4NCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJEQUMxIENhcHR1cmUgVm9sdW1lIiwgMHgxNywgMHg0LCBIREFfSU5QVVQpLAotCXsgfSAvKiBlbmQgKi8KLX07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDcxYnh4X2xvb3BiYWNrW10gPSB7CiAJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0EwLCAyKQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzFieHhfbWl4ZXJbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKLQotCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MSwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgxLCAweDFkLCAweDAsIEhEQV9PVVRQVVQpLAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTI1eF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGUsIDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxNCwgMCwgSERBX09VVFBVVCksCi0JeyB9IC8qIGVuZCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjA1X21peGVyW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDFiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKLQotCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MSwgMHgxYywgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDEsIDB4MWUsIDB4MCwgSERBX09VVFBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTIzMCwyOSArOTk4LDYgQEAKIAl7fQogfTsKIAotLyogVGhpcyBuZWVkcyB0byBiZSBnZW5lcmF0ZWQgZHluYW1pY2FsbHkgYmFzZWQgb24gc2VxdWVuY2UgKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTIyeF9taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKLQotCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MSwgMHgxOCwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDEsIDB4MTgsIDB4MCwgSERBX0lOUFVUKSwKLQl7IH0gLyogZW5kICovCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTI3eF9taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxOCwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MWIsIDB4MCwgSERBX09VVFBVVCksCi0KLQlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDEsIDB4MTksIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgxLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAotCi0JSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgyLCAweDFBLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MiwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKLQl7IH0gLyogZW5kICovCi19OwotCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyN3hfbG9vcGJhY2tbXSA9IHsKIAlTVEFDX0FOQUxPR19MT09QQkFDSygweEZFQiwgMHg3RUIsIDEpLAogCXt9CkBAIC0xMzEwLDE2ICsxMDU1LDE5IEBACiAJaW50IGVycjsKIAlpbnQgaTsKIAotCWVyciA9IHNuZF9oZGFfYWRkX25ld19jdGxzKGNvZGVjLCBzcGVjLT5taXhlcik7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJaWYgKHNwZWMtPm1peGVyKSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX25ld19jdGxzKGNvZGVjLCBzcGVjLT5taXhlcik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX21peGVyczsgaSsrKSB7CiAJCWVyciA9IHNuZF9oZGFfYWRkX25ld19jdGxzKGNvZGVjLCBzcGVjLT5taXhlcnNbaV0pOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQotCWlmIChzcGVjLT5udW1fZG11eGVzID4gMCkgeworCWlmICghc3BlYy0+YXV0b19taWMgJiYgc3BlYy0+bnVtX2RtdXhlcyA+IDAgJiYKKwkgICAgc25kX2hkYV9nZXRfYm9vbF9oaW50KGNvZGVjLCAic2VwYXJhdGVfZG11eCIpID09IDEpIHsKIAkJc3RhY19kbXV4X21peGVyLmNvdW50ID0gc3BlYy0+bnVtX2RtdXhlczsKIAkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLAogCQkJCSAgc25kX2N0bF9uZXcxKCZzdGFjX2RtdXhfbWl4ZXIsIGNvZGVjKSk7CkBAIC0xNzY2LDEyICsxNTE0LDIwIEBACiAJMHg0ZjAwMDBmMCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWxpZW53YXJlX20xN3hfcGluX2NvbmZpZ3NbMTNdID0geworCTB4MDMyMTEwMWYsIDB4MDMyMTEwMWYsIDB4MDNhMTEwMjAsIDB4MDMwMTQwMjAsCisJMHg5MDE3MDExMCwgMHg0ZjAwMDBmMCwgMHg0ZjAwMDBmMCwgMHg0ZjAwMDBmMCwKKwkweDRmMDAwMGYwLCAweDkwYTYwMTYwLCAweDRmMDAwMGYwLCAweDRmMDAwMGYwLAorCTB4OTA0NjAxYjAsCit9OworCiBzdGF0aWMgdW5zaWduZWQgaW50ICpzdGFjOTJoZDczeHhfYnJkX3RibFtTVEFDXzkySEQ3M1hYX01PREVMU10gPSB7CiAJW1NUQUNfOTJIRDczWFhfUkVGXQk9IHJlZjkyaGQ3M3h4X3Bpbl9jb25maWdzLAogCVtTVEFDX0RFTExfTTZfQU1JQ10JPSBkZWxsX202X3Bpbl9jb25maWdzLAogCVtTVEFDX0RFTExfTTZfRE1JQ10JPSBkZWxsX202X3Bpbl9jb25maWdzLAogCVtTVEFDX0RFTExfTTZfQk9USF0JPSBkZWxsX202X3Bpbl9jb25maWdzLAogCVtTVEFDX0RFTExfRVFdCT0gZGVsbF9tNl9waW5fY29uZmlncywKKwlbU1RBQ19BTElFTldBUkVfTTE3WF0JPSBhbGllbndhcmVfbTE3eF9waW5fY29uZmlncywKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTJoZDczeHhfbW9kZWxzW1NUQUNfOTJIRDczWFhfTU9ERUxTXSA9IHsKQEAgLTE3ODMsNiArMTUzOSw3IEBACiAJW1NUQUNfREVMTF9NNl9ETUlDXSA9ICJkZWxsLW02LWRtaWMiLAogCVtTVEFDX0RFTExfTTZfQk9USF0gPSAiZGVsbC1tNiIsCiAJW1NUQUNfREVMTF9FUV0gPSAiZGVsbC1lcSIsCisJW1NUQUNfQUxJRU5XQVJFX00xN1hdID0gImFsaWVud2FyZSIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgc3RhYzkyaGQ3M3h4X2NmZ190YmxbXSA9IHsKQEAgLTE4MjAsNiArMTU3NywxMiBAQAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTJoZDczeHhfY29kZWNfaWRfY2ZnX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyYTEsCisJCSAgICAgICJBbGllbndhcmUgTTE3eCIsIFNUQUNfQUxJRU5XQVJFX00xN1gpLAorCXt9IC8qIHRlcm1pbmF0b3IgKi8KK307CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTJoZDgzeHh4X3Bpbl9jb25maWdzWzEwXSA9IHsKIAkweDAyMjE0MDMwLCAweDAyMjExMDEwLCAweDAyYTE5MDIwLCAweDAyMTcwMTMwLAogCTB4MDEwMTQwNTAsIDB4MDE4MTkwNDAsIDB4MDEwMTQwMjAsIDB4OTBhMzAxNGUsCkBAIC0xOTI3LDYgKzE2OTAsOCBAQAogCQkgICAgICAiSFAgbWluaSAxMDAwIiwgU1RBQ19IUF9NNCksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MWIsCiAJCSAgICAgICJIUCBIRFgiLCBTVEFDX0hQX0hEWCksICAvKiBIRFgxNiAqLworCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0hQLCAweGZmZjAsIDB4NzAxMCwKKwkJICAgICAgIkhQIiwgU1RBQ19IUF9EVjUpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyMzMsCiAJCQkJInVua25vd24gRGVsbCIsIFNUQUNfREVMTF9NNF8xKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjM0LApAQCAtMjY0Miw4ICsyNDA3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc3RhY19pc3N1ZV91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKLQkJCQkgICB1bnNpZ25lZCBjaGFyIHR5cGUpOworc3RhdGljIHZvaWQgc3RhY19pc3N1ZV91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCk7CiAKIHN0YXRpYyBpbnQgc3RhYzkyeHhfaHBfc3dpdGNoX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQpAQCAtMjY1Nyw3ICsyNDIxLDcgQEAKIAkvKiBjaGVjayB0byBiZSBzdXJlIHRoYXQgdGhlIHBvcnRzIGFyZSB1cHRvIGRhdGUgd2l0aAogCSAqIHN3aXRjaCBjaGFuZ2VzCiAJICovCi0Jc3RhY19pc3N1ZV91bnNvbF9ldmVudChjb2RlYywgbmlkLCBTVEFDX0hQX0VWRU5UKTsKKwlzdGFjX2lzc3VlX3Vuc29sX2V2ZW50KGNvZGVjLCBuaWQpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0yNzkwLDcgKzI1NTQsNyBAQAogCSAqIGFwcHJvcHJpYXRlbHkgYWNjb3JkaW5nIHRvIHRoZSBwaW4gZGlyZWN0aW9uCiAJICovCiAJaWYgKHNwZWMtPmhwX2RldGVjdCkKLQkJc3RhY19pc3N1ZV91bnNvbF9ldmVudChjb2RlYywgbmlkLCBTVEFDX0hQX0VWRU5UKTsKKwkJc3RhY19pc3N1ZV91bnNvbF9ldmVudChjb2RlYywgbmlkKTsKIAogICAgICAgICByZXR1cm4gMTsKIH0KQEAgLTI4NTksOCArMjYyMyw2IEBACiAJU1RBQ19DVExfV0lER0VUX1ZPTCwKIAlTVEFDX0NUTF9XSURHRVRfTVVURSwKIAlTVEFDX0NUTF9XSURHRVRfTU9OT19NVVgsCi0JU1RBQ19DVExfV0lER0VUX0FNUF9NVVgsCi0JU1RBQ19DVExfV0lER0VUX0FNUF9WT0wsCiAJU1RBQ19DVExfV0lER0VUX0hQX1NXSVRDSCwKIAlTVEFDX0NUTF9XSURHRVRfSU9fU1dJVENILAogCVNUQUNfQ1RMX1dJREdFVF9DTEZFX1NXSVRDSCwKQEAgLTI4NzEsOCArMjYzMyw2IEBACiAJSERBX0NPREVDX1ZPTFVNRShOVUxMLCAwLCAwLCAwKSwKIAlIREFfQ09ERUNfTVVURShOVUxMLCAwLCAwLCAwKSwKIAlTVEFDX01PTk9fTVVYLAotCVNUQUNfQU1QX01VWCwKLQlTVEFDX0FNUF9WT0woTlVMTCwgMCwgMCwgMCwgMCksCiAJU1RBQ19DT0RFQ19IUF9TV0lUQ0goTlVMTCksCiAJU1RBQ19DT0RFQ19JT19TV0lUQ0goTlVMTCwgMCksCiAJU1RBQ19DT0RFQ19DTEZFX1NXSVRDSChOVUxMLCAwKSwKQEAgLTI5NzMsNiArMjczMyw4IEBACiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CiAJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OwogCisJaWYgKHNwZWMtPmF1dG9fbWljKQorCQlyZXR1cm4gMDsgLyogbm8gbmVlZCBmb3IgaW5wdXQgc291cmNlICovCiAJaWYgKCFzcGVjLT5udW1fYWRjcyB8fCBpbXV4LT5udW1faXRlbXMgPD0gMSkKIAkJcmV0dXJuIDA7IC8qIG5vIG5lZWQgZm9yIGlucHV0IHNvdXJjZSBjb250cm9sICovCiAJa25ldyA9IHN0YWNfY29udHJvbF9uZXcoc3BlYywgJnN0YWNfaW5wdXRfc3JjX3RlbXAsCkBAIC0zMDY2LDcgKzI4MjgsNyBAQAogCQkJCQkgICBIREFfTUFYX0NPTk5FQ1RJT05TKTsKIAlmb3IgKGogPSAwOyBqIDwgY29ubl9sZW47IGorKykgewogCQl3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgY29ubltqXSk7Ci0JCXd0eXBlID0gKHdjYXBzICYgQUNfV0NBUF9UWVBFKSA+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7CisJCXd0eXBlID0gZ2V0X3djYXBzX3R5cGUod2NhcHMpOwogCQkvKiB3ZSBjaGVjayBvbmx5IGFuYWxvZyBvdXRwdXRzICovCiAJCWlmICh3dHlwZSAhPSBBQ19XSURfQVVEX09VVCB8fCAod2NhcHMgJiBBQ19XQ0FQX0RJR0lUQUwpKQogCQkJY29udGludWU7CkBAIC0zMzI1LDYgKzMwODcsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzdGFjOTJ4eF9hZGRfY2Fwdm9sX2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGxvbmcgdm9sLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHN3LCBpbnQgaWR4KQoreworCWludCBlcnI7CisJZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2xfaWR4KGNvZGVjLT5zcGVjLCBTVEFDX0NUTF9XSURHRVRfVk9MLCBpZHgsCisJCQkJICAgICAgICJDYXB0dXJlIFZvbHVtZSIsIHZvbCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2xfaWR4KGNvZGVjLT5zcGVjLCBTVEFDX0NUTF9XSURHRVRfTVVURSwgaWR4LAorCQkJCSAgICAgICAiQ2FwdHVyZSBTd2l0Y2giLCBzdyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmV0dXJuIDA7Cit9CisKIC8qIGFkZCBwbGF5YmFjayBjb250cm9scyBmcm9tIHRoZSBwYXJzZWQgREFDIHRhYmxlICovCiBzdGF0aWMgaW50IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQpAQCAtMzM5OCw3ICszMTc1LDcgQEAKIAkJCQlzcGVjLT5tb25vX25pZCwKIAkJCQljb25fbHN0LAogCQkJCUhEQV9NQVhfTlVNX0lOUFVUUyk7Ci0JaWYgKCFudW1fY29ucyB8fCBudW1fY29ucyA+IEFSUkFZX1NJWkUoc3RhYzkyeHhfbW9ub19sYWJlbHMpKQorCWlmIChudW1fY29ucyA8PSAwIHx8IG51bV9jb25zID4gQVJSQVlfU0laRShzdGFjOTJ4eF9tb25vX2xhYmVscykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9jb25zOyBpKyspIHsKQEAgLTM0MTIsMzcgKzMxODksNiBAQAogCQkJCSJNb25vIE11eCIsIHNwZWMtPm1vbm9fbmlkKTsKIH0KIAotLyogbGFiZWxzIGZvciBhbXAgbXV4IG91dHB1dHMgKi8KLXN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTJ4eF9hbXBfbGFiZWxzWzNdID0gewotCSJGcm9udCBNaWNyb3Bob25lIiwgIk1pY3JvcGhvbmUiLCAiTGluZSBJbiIsCi19OwotCi0vKiBjcmVhdGUgYW1wIG91dCBjb250cm9scyBtdXggb24gY2FwYWJsZSBjb2RlY3MgKi8KLXN0YXRpYyBpbnQgc3RhYzkyeHhfYXV0b19jcmVhdGVfYW1wX291dHB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggKmFtcF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9hbXBfbXV4OwotCWludCBpLCBlcnI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2FtcHM7IGkrKykgewotCQlhbXBfbXV4LT5pdGVtc1thbXBfbXV4LT5udW1faXRlbXNdLmxhYmVsID0KLQkJCQkJc3RhYzkyeHhfYW1wX2xhYmVsc1tpXTsKLQkJYW1wX211eC0+aXRlbXNbYW1wX211eC0+bnVtX2l0ZW1zXS5pbmRleCA9IGk7Ci0JCWFtcF9tdXgtPm51bV9pdGVtcysrOwotCX0KLQotCWlmIChzcGVjLT5udW1fYW1wcyA+IDEpIHsKLQkJZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2woc3BlYywgU1RBQ19DVExfV0lER0VUX0FNUF9NVVgsCi0JCQkiQW1wIFNlbGVjdG9yIENhcHR1cmUgU3dpdGNoIiwgMCk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIHN0YWM5Mnh4X2FkZF9jb250cm9sKHNwZWMsIFNUQUNfQ1RMX1dJREdFVF9BTVBfVk9MLAotCQkiQW1wIENhcHR1cmUgVm9sdW1lIiwKLQkJSERBX0NPTVBPU0VfQU1QX1ZBTChzcGVjLT5hbXBfbmlkc1swXSwgMywgMCwgSERBX0lOUFVUKSk7Ci19Ci0KLQogLyogY3JlYXRlIFBDIGJlZXAgdm9sdW1lIGNvbnRyb2xzICovCiBzdGF0aWMgaW50IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX2JlZXBfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJCWhkYV9uaWRfdCBuaWQpCkBAIC0zNTExLDE5ICszMjU3LDMzIEBACiBzdGF0aWMgaW50IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX211eF9pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IHdjYXBzLCBuaWQsIGksIGVyciA9IDA7CisJaW50IGksIGosIGVyciA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX211eGVzOyBpKyspIHsKKwkJaGRhX25pZF90IG5pZDsKKwkJdW5zaWduZWQgaW50IHdjYXBzOworCQl1bnNpZ25lZCBsb25nIHZhbDsKKwogCQluaWQgPSBzcGVjLT5tdXhfbmlkc1tpXTsKIAkJd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCk7CisJCWlmICghKHdjYXBzICYgQUNfV0NBUF9PVVRfQU1QKSkKKwkJCWNvbnRpbnVlOwogCi0JCWlmICh3Y2FwcyAmIEFDX1dDQVBfT1VUX0FNUCkgewotCQkJZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2xfaWR4KHNwZWMsCi0JCQkJU1RBQ19DVExfV0lER0VUX1ZPTCwgaSwgIk11eCBDYXB0dXJlIFZvbHVtZSIsCi0JCQkJSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsIEhEQV9PVVRQVVQpKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7CisJCS8qIGNoZWNrIHdoZXRoZXIgYWxyZWFkeSB0aGUgc2FtZSBjb250cm9sIHdhcyBjcmVhdGVkIGFzCisJCSAqIG5vcm1hbCBDYXB0dXJlIFZvbHVtZS4KKwkJICovCisJCXZhbCA9IEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLCBIREFfT1VUUFVUKTsKKwkJZm9yIChqID0gMDsgaiA8IHNwZWMtPm51bV9jYXBzOyBqKyspIHsKKwkJCWlmIChzcGVjLT5jYXB2b2xzW2pdID09IHZhbCkKKwkJCQlicmVhazsKIAkJfQorCQlpZiAoaiA8IHNwZWMtPm51bV9jYXBzKQorCQkJY29udGludWU7CisKKwkJZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2xfaWR4KHNwZWMsIFNUQUNfQ1RMX1dJREdFVF9WT0wsIGksCisJCQkJCSAgICAgICAiTXV4IENhcHR1cmUgVm9sdW1lIiwgdmFsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCX0KIAlyZXR1cm4gMDsKIH07CkBAIC0zNTQ0LDcgKzMzMDQsNyBAQAogCQkJCXNwZWMtPnNtdXhfbmlkc1swXSwKIAkJCQljb25fbHN0LAogCQkJCUhEQV9NQVhfTlVNX0lOUFVUUyk7Ci0JaWYgKCFudW1fY29ucykKKwlpZiAobnVtX2NvbnMgPD0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIWxhYmVscykKQEAgLTM1NjUsMTAxICszMzI1LDIzMSBAQAogCSJEaWdpdGFsIE1pYyAzIiwgIkRpZ2l0YWwgTWljIDQiCiB9OwogCitzdGF0aWMgaW50IGdldF9jb25uZWN0aW9uX2luZGV4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbXV4LAorCQkJCWhkYV9uaWRfdCBuaWQpCit7CisJaGRhX25pZF90IGNvbm5bSERBX01BWF9OVU1fSU5QVVRTXTsKKwlpbnQgaSwgbnVtczsKKworCW51bXMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbXV4LCBjb25uLCBBUlJBWV9TSVpFKGNvbm4pKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtczsgaSsrKQorCQlpZiAoY29ubltpXSA9PSBuaWQpCisJCQlyZXR1cm4gaTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qIGNyZWF0ZSBhIHZvbHVtZSBhc3NpZ25lZCB0byB0aGUgZ2l2ZW4gcGluIChvbmx5IGlmIHN1cHBvcnRlZCkgKi8KKy8qIHJldHVybiAxIGlmIHRoZSB2b2x1bWUgY29udHJvbCBpcyBjcmVhdGVkICovCitzdGF0aWMgaW50IGNyZWF0ZV9lbGVtX2NhcHR1cmVfdm9sKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJCSAgIGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGludCBjYXBzLCBudW1zOworCWNoYXIgbmFtZVszMl07CisJaW50IGVycjsKKworCWlmIChkaXJlY3Rpb24gPT0gSERBX09VVFBVVCkKKwkJY2FwcyA9IEFDX1dDQVBfT1VUX0FNUDsKKwllbHNlCisJCWNhcHMgPSBBQ19XQ0FQX0lOX0FNUDsKKwlpZiAoIShnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBjYXBzKSkKKwkJcmV0dXJuIDA7CisJY2FwcyA9IHF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCBuaWQsIGRpcmVjdGlvbik7CisJbnVtcyA9IChjYXBzICYgQUNfQU1QQ0FQX05VTV9TVEVQUykgPj4gQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVDsKKwlpZiAoIW51bXMpCisJCXJldHVybiAwOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzIENhcHR1cmUgVm9sdW1lIiwgbGFiZWwpOworCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sKGNvZGVjLT5zcGVjLCBTVEFDX0NUTF9XSURHRVRfVk9MLCBuYW1lLAorCQkJCSAgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwgZGlyZWN0aW9uKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmV0dXJuIDE7Cit9CisKIC8qIGNyZWF0ZSBwbGF5YmFjay9jYXB0dXJlIGNvbnRyb2xzIGZvciBpbnB1dCBwaW5zIG9uIGRtaWMgY2FwYWJsZSBjb2RlY3MgKi8KIHN0YXRpYyBpbnQgc3RhYzkyeHhfYXV0b19jcmVhdGVfZG1pY19pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OwogCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICpkaW11eCA9ICZzcGVjLT5wcml2YXRlX2RpbXV4OwotCWhkYV9uaWRfdCBjb25fbHN0W0hEQV9NQVhfTlVNX0lOUFVUU107Ci0JaW50IGVyciwgaSwgajsKLQljaGFyIG5hbWVbMzJdOworCWludCBlcnIsIGksIGFjdGl2ZV9taWNzOworCXVuc2lnbmVkIGludCBkZWZfY29uZjsKIAogCWRpbXV4LT5pdGVtc1tkaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9IHN0YWM5Mnh4X2RtaWNfbGFiZWxzWzBdOwogCWRpbXV4LT5pdGVtc1tkaW11eC0+bnVtX2l0ZW1zXS5pbmRleCA9IDA7CiAJZGltdXgtPm51bV9pdGVtcysrOwogCisJYWN0aXZlX21pY3MgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fZG1pY3M7IGkrKykgeworCQkvKiBjaGVjayB0aGUgdmFsaWRpdHk6IHNvbWV0aW1lcyBpdCdzIGEgZGVhZCB2ZW5kb3Itc3BlYyBub2RlICovCisJCWlmIChnZXRfd2NhcHNfdHlwZShnZXRfd2NhcHMoY29kZWMsIHNwZWMtPmRtaWNfbmlkc1tpXSkpCisJCSAgICAhPSBBQ19XSURfUElOKQorCQkJY29udGludWU7CisJCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBzcGVjLT5kbWljX25pZHNbaV0pOworCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGRlZl9jb25mKSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJCWFjdGl2ZV9taWNzKys7CisJfQorCiAJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9kbWljczsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQ7CiAJCWludCBpbmRleDsKLQkJaW50IG51bV9jb25zOwotCQl1bnNpZ25lZCBpbnQgd2NhcHM7Ci0JCXVuc2lnbmVkIGludCBkZWZfY29uZjsKKwkJY29uc3QgY2hhciAqbGFiZWw7CiAKLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIHNwZWMtPmRtaWNfbmlkc1tpXSk7CisJCW5pZCA9IHNwZWMtPmRtaWNfbmlkc1tpXTsKKwkJaWYgKGdldF93Y2Fwc190eXBlKGdldF93Y2Fwcyhjb2RlYywgbmlkKSkgIT0gQUNfV0lEX1BJTikKKwkJCWNvbnRpbnVlOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZikgPT0gQUNfSkFDS19QT1JUX05PTkUpCiAJCQljb250aW51ZTsKIAotCQluaWQgPSBzcGVjLT5kbWljX25pZHNbaV07Ci0JCW51bV9jb25zID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsCi0JCQkJc3BlYy0+ZG11eF9uaWRzWzBdLAotCQkJCWNvbl9sc3QsCi0JCQkJSERBX01BWF9OVU1fSU5QVVRTKTsKLQkJZm9yIChqID0gMDsgaiA8IG51bV9jb25zOyBqKyspCi0JCQlpZiAoY29uX2xzdFtqXSA9PSBuaWQpIHsKLQkJCQlpbmRleCA9IGo7Ci0JCQkJZ290byBmb3VuZDsKLQkJCX0KLQkJY29udGludWU7Ci1mb3VuZDoKLQkJd2NhcHMgPSBnZXRfd2NhcHMoY29kZWMsIG5pZCkgJgotCQkJKEFDX1dDQVBfT1VUX0FNUCB8IEFDX1dDQVBfSU5fQU1QKTsKKwkJaW5kZXggPSBnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywgc3BlYy0+ZG11eF9uaWRzWzBdLCBuaWQpOworCQlpZiAoaW5kZXggPCAwKQorCQkJY29udGludWU7CiAKLQkJaWYgKHdjYXBzKSB7Ci0JCQlzcHJpbnRmKG5hbWUsICIlcyBDYXB0dXJlIFZvbHVtZSIsCi0JCQkJc3RhYzkyeHhfZG1pY19sYWJlbHNbZGltdXgtPm51bV9pdGVtc10pOworCQlpZiAoYWN0aXZlX21pY3MgPT0gMSkKKwkJCWxhYmVsID0gIkRpZ2l0YWwgTWljIjsKKwkJZWxzZQorCQkJbGFiZWwgPSBzdGFjOTJ4eF9kbWljX2xhYmVsc1tkaW11eC0+bnVtX2l0ZW1zXTsKIAotCQkJZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2woc3BlYywKLQkJCQlTVEFDX0NUTF9XSURHRVRfVk9MLAotCQkJCW5hbWUsCi0JCQkJSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsCi0JCQkJKHdjYXBzICYgQUNfV0NBUF9PVVRfQU1QKSA/Ci0JCQkJSERBX09VVFBVVCA6IEhEQV9JTlBVVCkpOworCQllcnIgPSBjcmVhdGVfZWxlbV9jYXB0dXJlX3ZvbChjb2RlYywgbmlkLCBsYWJlbCwgSERBX0lOUFVUKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQlpZiAoIWVycikgeworCQkJZXJyID0gY3JlYXRlX2VsZW1fY2FwdHVyZV92b2woY29kZWMsIG5pZCwgbGFiZWwsCisJCQkJCQkgICAgICBIREFfT1VUUFVUKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCX0KIAotCQlkaW11eC0+aXRlbXNbZGltdXgtPm51bV9pdGVtc10ubGFiZWwgPQotCQkJc3RhYzkyeHhfZG1pY19sYWJlbHNbZGltdXgtPm51bV9pdGVtc107CisJCWRpbXV4LT5pdGVtc1tkaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9IGxhYmVsOwogCQlkaW11eC0+aXRlbXNbZGltdXgtPm51bV9pdGVtc10uaW5kZXggPSBpbmRleDsKIAkJZGltdXgtPm51bV9pdGVtcysrOworCQlpZiAoc25kX2hkYV9nZXRfYm9vbF9oaW50KGNvZGVjLCAic2VwYXJhdGVfZG11eCIpICE9IDEpIHsKKwkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10ubGFiZWwgPSBsYWJlbDsKKwkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSBpbmRleDsKKwkJCWltdXgtPm51bV9pdGVtcysrOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY2hlY2tfbWljX3BpbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCSBoZGFfbmlkX3QgKmZpeGVkLCBoZGFfbmlkX3QgKmV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgY2ZnOworCisJaWYgKCFuaWQpCisJCXJldHVybiAwOworCWNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKKwlzd2l0Y2ggKGdldF9kZWZjZmdfY29ubmVjdChjZmcpKSB7CisJY2FzZSBBQ19KQUNLX1BPUlRfRklYRUQ6CisJCWlmICgqZml4ZWQpCisJCQlyZXR1cm4gMTsgLyogYWxyZWFkeSBvY2N1cGllZCAqLworCQkqZml4ZWQgPSBuaWQ7CisJCWJyZWFrOworCWNhc2UgQUNfSkFDS19QT1JUX0NPTVBMRVg6CisJCWlmICgqZXh0KQorCQkJcmV0dXJuIDE7IC8qIGFscmVhZHkgb2NjdXBpZWQgKi8KKwkJKmV4dCA9IG5pZDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9taWNfcm91dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkgc3RydWN0IHNpZ21hdGVsX21pY19yb3V0ZSAqbWljLAorCQkJIGhkYV9uaWRfdCBwaW4pCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKKwlpbnQgaTsKKworCW1pYy0+cGluID0gcGluOworCWZvciAoaSA9IEFVVE9fUElOX01JQzsgaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUM7IGkrKykKKwkJaWYgKHBpbiA9PSBjZmctPmlucHV0X3BpbnNbaV0pCisJCQlicmVhazsKKwlpZiAoaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMpIHsKKwkJLyogYW5hbG9nIHBpbiAqLworCQltaWMtPmRtdXhfaWR4ID0gMDsKKwkJaSA9IGdldF9jb25uZWN0aW9uX2luZGV4KGNvZGVjLCBzcGVjLT5tdXhfbmlkc1swXSwgcGluKTsKKwkJaWYgKGkgPCAwKQorCQkJcmV0dXJuIC0xOworCQltaWMtPm11eF9pZHggPSBpOworCX0gIGVsc2UgaWYgKHNwZWMtPmRtdXhfbmlkcykgeworCQkvKiBkaWdpdGFsIHBpbiAqLworCQltaWMtPm11eF9pZHggPSAwOworCQlpID0gZ2V0X2Nvbm5lY3Rpb25faW5kZXgoY29kZWMsIHNwZWMtPmRtdXhfbmlkc1swXSwgcGluKTsKKwkJaWYgKGkgPCAwKQorCQkJcmV0dXJuIC0xOworCQltaWMtPmRtdXhfaWR4ID0gaTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHJldHVybiBub24temVybyBpZiB0aGUgZGV2aWNlIGlzIGZvciBhdXRvbWF0aWMgbWljIHN3aXRjaCAqLworc3RhdGljIGludCBzdGFjX2NoZWNrX2F1dG9fbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7CisJaGRhX25pZF90IGZpeGVkLCBleHQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSBBVVRPX1BJTl9MSU5FOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CisJCWlmIChjZmctPmlucHV0X3BpbnNbaV0pCisJCQlyZXR1cm4gMDsgLyogbXVzdCBiZSBleGNsdXNpdmVseSBtaWNzICovCisJfQorCWZpeGVkID0gZXh0ID0gMDsKKwlmb3IgKGkgPSBBVVRPX1BJTl9NSUM7IGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDOyBpKyspCisJCWlmIChjaGVja19taWNfcGluKGNvZGVjLCBjZmctPmlucHV0X3BpbnNbaV0sICZmaXhlZCwgJmV4dCkpCisJCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2RtaWNzOyBpKyspCisJCWlmIChjaGVja19taWNfcGluKGNvZGVjLCBzcGVjLT5kbWljX25pZHNbaV0sICZmaXhlZCwgJmV4dCkpCisJCQlyZXR1cm4gMDsKKwlpZiAoIWZpeGVkIHx8ICFleHQpCisJCXJldHVybiAwOworCWlmICghKGdldF93Y2Fwcyhjb2RlYywgZXh0KSAmIEFDX1dDQVBfVU5TT0xfQ0FQKSkKKwkJcmV0dXJuIDA7IC8qIG5vIHVuc29sIHN1cHBvcnQgKi8KKwlpZiAoc2V0X21pY19yb3V0ZShjb2RlYywgJnNwZWMtPmV4dF9taWMsIGV4dCkgfHwKKwkgICAgc2V0X21pY19yb3V0ZShjb2RlYywgJnNwZWMtPmludF9taWMsIGZpeGVkKSkKKwkJcmV0dXJuIDA7IC8qIHNvbWV0aGluZyBpcyB3cm9uZyAqLworCXJldHVybiAxOworfQorCiAvKiBjcmVhdGUgcGxheWJhY2svY2FwdHVyZSBjb250cm9scyBmb3IgaW5wdXQgcGlucyAqLwogc3RhdGljIGludCBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OwotCWhkYV9uaWRfdCBjb25fbHN0W0hEQV9NQVhfTlVNX0lOUFVUU107Ci0JaW50IGksIGosIGs7CisJaW50IGksIGo7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7Ci0JCWludCBpbmRleDsKKwkJaGRhX25pZF90IG5pZCA9IGNmZy0+aW5wdXRfcGluc1tpXTsKKwkJaW50IGluZGV4LCBlcnI7CiAKLQkJaWYgKCFjZmctPmlucHV0X3BpbnNbaV0pCisJCWlmICghbmlkKQogCQkJY29udGludWU7CiAJCWluZGV4ID0gLTE7CiAJCWZvciAoaiA9IDA7IGogPCBzcGVjLT5udW1fbXV4ZXM7IGorKykgewotCQkJaW50IG51bV9jb25zOwotCQkJbnVtX2NvbnMgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywKLQkJCQkJCQkgICBzcGVjLT5tdXhfbmlkc1tqXSwKLQkJCQkJCQkgICBjb25fbHN0LAotCQkJCQkJCSAgIEhEQV9NQVhfTlVNX0lOUFVUUyk7Ci0JCQlmb3IgKGsgPSAwOyBrIDwgbnVtX2NvbnM7IGsrKykKLQkJCQlpZiAoY29uX2xzdFtrXSA9PSBjZmctPmlucHV0X3BpbnNbaV0pIHsKLQkJCQkJaW5kZXggPSBrOwotCQkJCQlnb3RvIGZvdW5kOwotCQkJCX0KKwkJCWluZGV4ID0gZ2V0X2Nvbm5lY3Rpb25faW5kZXgoY29kZWMsIHNwZWMtPm11eF9uaWRzW2pdLAorCQkJCQkJICAgICBuaWQpOworCQkJaWYgKGluZGV4ID49IDApCisJCQkJYnJlYWs7CiAJCX0KLQkJY29udGludWU7Ci0JZm91bmQ6CisJCWlmIChpbmRleCA8IDApCisJCQljb250aW51ZTsKKworCQllcnIgPSBjcmVhdGVfZWxlbV9jYXB0dXJlX3ZvbChjb2RlYywgbmlkLAorCQkJCQkgICAgICBhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldLAorCQkJCQkgICAgICBIREFfSU5QVVQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisKIAkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9IGF1dG9fcGluX2NmZ19sYWJlbHNbaV07CiAJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10uaW5kZXggPSBpbmRleDsKIAkJaW11eC0+bnVtX2l0ZW1zKys7CiAJfQorCXNwZWMtPm51bV9hbmFsb2dfbXV4ZXMgPSBpbXV4LT5udW1faXRlbXM7CiAKIAlpZiAoaW11eC0+bnVtX2l0ZW1zKSB7CiAJCS8qCkBAIC0zNzExLDcgKzM2MDEsNyBAQAogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaW50IGhwX3N3YXAgPSAwOwotCWludCBlcnI7CisJaW50IGksIGVycjsKIAogCWlmICgoZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywKIAkJCQkJCSZzcGVjLT5hdXRvY2ZnLApAQCAtMzc1MSwxMSArMzY0MSwxMCBAQAogCQlpZiAoc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsCiAJCQkJc3BlYy0+YXV0b2NmZy5tb25vX291dF9waW4sIGNvbm5fbGlzdCwgMSkgJiYKIAkJCQlzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgY29ubl9saXN0WzBdLAotCQkJCWNvbm5fbGlzdCwgMSkpIHsKKwkJCQljb25uX2xpc3QsIDEpID4gMCkgewogCiAJCQkJaW50IHdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBjb25uX2xpc3RbMF0pOwotCQkJCWludCB3aWRfdHlwZSA9ICh3Y2FwcyAmIEFDX1dDQVBfVFlQRSkKLQkJCQkJPj4gQUNfV0NBUF9UWVBFX1NISUZUOworCQkJCWludCB3aWRfdHlwZSA9IGdldF93Y2Fwc190eXBlKHdjYXBzKTsKIAkJCQkvKiBMUiBzd2FwIGNoZWNrLCBzb21lIHN0YWM5MjV4IGhhdmUgYSBtdXggdGhhdAogIAkJCQkgKiBjaGFuZ2VzIHRoZSBEQUNzIG91dHB1dCBwYXRoIGluc3RlYWQgb2YgdGhlCiAgCQkJCSAqIG1vbm8tbXV4IHBhdGguCkBAIC0zODQ2LDYgKzM3MzUsMjEgQEAKIAkJc3BlYy0+YXV0b2NmZy5saW5lX291dHMgPSAwOwogCX0KIAorCWlmIChzdGFjX2NoZWNrX2F1dG9fbWljKGNvZGVjKSkgeworCQlzcGVjLT5hdXRvX21pYyA9IDE7CisJCS8qIG9ubHkgb25lIGNhcHR1cmUgZm9yIGF1dG8tbWljICovCisJCXNwZWMtPm51bV9hZGNzID0gMTsKKwkJc3BlYy0+bnVtX2NhcHMgPSAxOworCQlzcGVjLT5udW1fbXV4ZXMgPSAxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fY2FwczsgaSsrKSB7CisJCWVyciA9IHN0YWM5Mnh4X2FkZF9jYXB2b2xfY3Rscyhjb2RlYywgc3BlYy0+Y2Fwdm9sc1tpXSwKKwkJCQkJICAgICAgIHNwZWMtPmNhcHN3c1tpXSwgaSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAllcnIgPSBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMzg1NSwxMSArMzc1OSw2IEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9Ci0JaWYgKHNwZWMtPm51bV9hbXBzID4gMCkgewotCQllcnIgPSBzdGFjOTJ4eF9hdXRvX2NyZWF0ZV9hbXBfb3V0cHV0X2N0bHMoY29kZWMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQogCWlmIChzcGVjLT5udW1fZG1pY3MgPiAwICYmICFzcGVjLT5kaW5wdXRfbXV4KQogCQlpZiAoKGVyciA9IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX2RtaWNfaW5wdXRfY3Rscyhjb2RlYywKIAkJCQkJCSZzcGVjLT5hdXRvY2ZnKSkgPCAwKQpAQCAtMzg5Niw3ICszNzk1LDYgQEAKIAkJc3BlYy0+ZGlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2RpbXV4OwogCXNwZWMtPnNpbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9zbXV4OwogCXNwZWMtPm1vbm9fbXV4ID0gJnNwZWMtPnByaXZhdGVfbW9ub19tdXg7Ci0Jc3BlYy0+YW1wX211eCA9ICZzcGVjLT5wcml2YXRlX2FtcF9tdXg7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQxMDgsMTQgKzQwMDYsMTQgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzaWdtYXRlbF9ldmVudCAqc3RhY19nZXRfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJCSAgICAgaGRhX25pZF90IG5pZCwgdW5zaWduZWQgY2hhciB0eXBlKQorCQkJCQkgICAgIGhkYV9uaWRfdCBuaWQpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfZXZlbnQgKmV2ZW50ID0gc3BlYy0+ZXZlbnRzLmxpc3Q7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+ZXZlbnRzLnVzZWQ7IGkrKywgZXZlbnQrKykgewotCQlpZiAoZXZlbnQtPm5pZCA9PSBuaWQgJiYgZXZlbnQtPnR5cGUgPT0gdHlwZSkKKwkJaWYgKGV2ZW50LT5uaWQgPT0gbmlkKQogCQkJcmV0dXJuIGV2ZW50OwogCX0KIAlyZXR1cm4gTlVMTDsKQEAgLTQxMzUsMjQgKzQwMzMsMzIgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX3Bpbl9kZXRlY3Qoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgdHlwZSkKKy8qIGNoZWNrIGlmIGdpdmVuIG5pZCBpcyBhIHZhbGlkIHBpbiBhbmQgbm8gb3RoZXIgZXZlbnRzIGFyZSBhc3NpZ25lZAorICogdG8gaXQuICBJZiBPSywgYXNzaWduIHRoZSBldmVudCwgc2V0IHRoZSB1bnNvbCBmbGFnLCBhbmQgcmV0dXJucyAxLgorICogT3RoZXJ3aXNlLCByZXR1cm5zIHplcm8uCisgKi8KK3N0YXRpYyBpbnQgZW5hYmxlX3Bpbl9kZXRlY3Qoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkgICAgIHVuc2lnbmVkIGludCB0eXBlKQogewogCXN0cnVjdCBzaWdtYXRlbF9ldmVudCAqZXZlbnQ7CiAJaW50IHRhZzsKIAogCWlmICghKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfVU5TT0xfQ0FQKSkKLQkJcmV0dXJuOwotCWV2ZW50ID0gc3RhY19nZXRfZXZlbnQoY29kZWMsIG5pZCwgdHlwZSk7Ci0JaWYgKGV2ZW50KQorCQlyZXR1cm4gMDsKKwlldmVudCA9IHN0YWNfZ2V0X2V2ZW50KGNvZGVjLCBuaWQpOworCWlmIChldmVudCkgeworCQlpZiAoZXZlbnQtPnR5cGUgIT0gdHlwZSkKKwkJCXJldHVybiAwOwogCQl0YWcgPSBldmVudC0+dGFnOwotCWVsc2UKKwl9IGVsc2UgewogCQl0YWcgPSBzdGFjX2FkZF9ldmVudChjb2RlYy0+c3BlYywgbmlkLCB0eXBlLCAwKTsKLQlpZiAodGFnIDwgMCkKLQkJcmV0dXJuOworCQlpZiAodGFnIDwgMCkKKwkJCXJldHVybiAwOworCX0KIAlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCiAJCQkJICBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCiAJCQkJICBBQ19VU1JTUF9FTiB8IHRhZyk7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgaXNfbmlkX2hwX3BpbihzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcsIGhkYV9uaWRfdCBuaWQpCkBAIC00MjQ1LDIwICs0MTUxLDM2IEBACiAJCQloZGFfbmlkX3QgbmlkID0gY2ZnLT5ocF9waW5zW2ldOwogCQkJZW5hYmxlX3Bpbl9kZXRlY3QoY29kZWMsIG5pZCwgU1RBQ19IUF9FVkVOVCk7CiAJCX0KKwkJaWYgKGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9MSU5FX09VVCAmJgorCQkgICAgY2ZnLT5zcGVha2VyX291dHMgPiAwKSB7CisJCQkvKiBlbmFibGUgcGluLWRldGVjdCBmb3IgbGluZS1vdXRzIGFzIHdlbGwgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7CisJCQkJaGRhX25pZF90IG5pZCA9IGNmZy0+bGluZV9vdXRfcGluc1tpXTsKKwkJCQllbmFibGVfcGluX2RldGVjdChjb2RlYywgbmlkLCBTVEFDX0xPX0VWRU5UKTsKKwkJCX0KKwkJfQorCiAJCS8qIGZvcmNlIHRvIGVuYWJsZSB0aGUgZmlyc3QgbGluZS1vdXQ7IHRoZSBvdGhlcnMgYXJlIHNldCB1cAogCQkgKiBpbiB1bnNvbF9ldmVudAogCQkgKi8KIAkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbMF0sCiAJCQkJQUNfUElOQ1RMX09VVF9FTik7CiAJCS8qIGZha2UgZXZlbnQgdG8gc2V0IHVwIHBpbnMgKi8KLQkJc3RhY19pc3N1ZV91bnNvbF9ldmVudChjb2RlYywgc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdLAotCQkJCSAgICAgICBTVEFDX0hQX0VWRU5UKTsKKwkJc3RhY19pc3N1ZV91bnNvbF9ldmVudChjb2RlYywgc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdKTsKIAl9IGVsc2UgewogCQlzdGFjOTJ4eF9hdXRvX2luaXRfbXVsdGlfb3V0KGNvZGVjKTsKIAkJc3RhYzkyeHhfYXV0b19pbml0X2hwX291dChjb2RlYyk7CiAJCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykKIAkJCXN0YWNfdG9nZ2xlX3Bvd2VyX21hcChjb2RlYywgY2ZnLT5ocF9waW5zW2ldLCAxKTsKIAl9CisJaWYgKHNwZWMtPmF1dG9fbWljKSB7CisJCS8qIGluaXRpYWxpemUgY29ubmVjdGlvbiB0byBhbmFsb2cgaW5wdXQgKi8KKwkJaWYgKHNwZWMtPmRtdXhfbmlkcykKKwkJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIHNwZWMtPmRtdXhfbmlkc1swXSwgMCwKKwkJCQkJICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMCk7CisJCWlmIChlbmFibGVfcGluX2RldGVjdChjb2RlYywgc3BlYy0+ZXh0X21pYy5waW4sIFNUQUNfTUlDX0VWRU5UKSkKKwkJCXN0YWNfaXNzdWVfdW5zb2xfZXZlbnQoY29kZWMsIHNwZWMtPmV4dF9taWMucGluKTsKKwl9CiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gY2ZnLT5pbnB1dF9waW5zW2ldOwogCQlpZiAobmlkKSB7CkBAIC00Mjg1LDEwICs0MjA3LDkgQEAKIAkJCX0KIAkJCWNvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGNvbmYpICE9IEFDX0pBQ0tfUE9SVF9GSVhFRCkgewotCQkJCWVuYWJsZV9waW5fZGV0ZWN0KGNvZGVjLCBuaWQsCi0JCQkJCQkgIFNUQUNfSU5TRVJUX0VWRU5UKTsKLQkJCQlzdGFjX2lzc3VlX3Vuc29sX2V2ZW50KGNvZGVjLCBuaWQsCi0JCQkJCQkgICAgICAgU1RBQ19JTlNFUlRfRVZFTlQpOworCQkJCWlmIChlbmFibGVfcGluX2RldGVjdChjb2RlYywgbmlkLAorCQkJCQkJICAgICAgU1RBQ19JTlNFUlRfRVZFTlQpKQorCQkJCQlzdGFjX2lzc3VlX3Vuc29sX2V2ZW50KGNvZGVjLCBuaWQpOwogCQkJfQogCQl9CiAJfQpAQCAtNDMzMywxMCArNDI1NCw4IEBACiAJCQkJc3RhY190b2dnbGVfcG93ZXJfbWFwKGNvZGVjLCBuaWQsIDEpOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCFzdGFjX2dldF9ldmVudChjb2RlYywgbmlkLCBTVEFDX0lOU0VSVF9FVkVOVCkpIHsKLQkJCWVuYWJsZV9waW5fZGV0ZWN0KGNvZGVjLCBuaWQsIFNUQUNfUFdSX0VWRU5UKTsKLQkJCXN0YWNfaXNzdWVfdW5zb2xfZXZlbnQoY29kZWMsIG5pZCwgU1RBQ19QV1JfRVZFTlQpOwotCQl9CisJCWlmIChlbmFibGVfcGluX2RldGVjdChjb2RlYywgbmlkLCBTVEFDX1BXUl9FVkVOVCkpCisJCQlzdGFjX2lzc3VlX3Vuc29sX2V2ZW50KGNvZGVjLCBuaWQpOwogCX0KIAlpZiAoc3BlYy0+ZGFjX2xpc3QpCiAJCXN0YWM5Mnh4X3Bvd2VyX2Rvd24oY29kZWMpOwpAQCAtNDQ0MCw2ICs0MzU5LDQ4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHN0YWM5Mnh4X2xpbmVfb3V0X2RldGVjdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgIGludCBwcmVzZW5jZSkKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZyA9ICZzcGVjLT5hdXRvY2ZnOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKKwkJaWYgKHByZXNlbmNlKQorCQkJYnJlYWs7CisJCXByZXNlbmNlID0gZ2V0X3Bpbl9wcmVzZW5jZShjb2RlYywgY2ZnLT5saW5lX291dF9waW5zW2ldKTsKKwkJaWYgKHByZXNlbmNlKSB7CisJCQl1bnNpZ25lZCBpbnQgcGluY3RsOworCQkJcGluY3RsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLAorCQkJCQkJICAgIGNmZy0+bGluZV9vdXRfcGluc1tpXSwgMCwKKwkJCQkJICAgIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7CisJCQlpZiAocGluY3RsICYgQUNfUElOQ1RMX0lOX0VOKQorCQkJCXByZXNlbmNlID0gMDsgLyogbWljLSBvciBsaW5lLWlucHV0ICovCisJCX0KKwl9CisKKwlpZiAocHJlc2VuY2UpIHsKKwkJLyogZGlzYWJsZSBzcGVha2VycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5zcGVha2VyX291dHM7IGkrKykKKwkJCXN0YWM5Mnh4X3Jlc2V0X3BpbmN0bChjb2RlYywgY2ZnLT5zcGVha2VyX3BpbnNbaV0sCisJCQkJCQlBQ19QSU5DVExfT1VUX0VOKTsKKwkJaWYgKHNwZWMtPmVhcGRfbWFzayAmJiBzcGVjLT5lYXBkX3N3aXRjaCkKKwkJCXN0YWNfZ3Bpb19zZXQoY29kZWMsIHNwZWMtPmdwaW9fbWFzaywKKwkJCQlzcGVjLT5ncGlvX2Rpciwgc3BlYy0+Z3Bpb19kYXRhICYKKwkJCQl+c3BlYy0+ZWFwZF9tYXNrKTsKKwl9IGVsc2UgeworCQkvKiBlbmFibGUgc3BlYWtlcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IGNmZy0+c3BlYWtlcl9vdXRzOyBpKyspCisJCQlzdGFjOTJ4eF9zZXRfcGluY3RsKGNvZGVjLCBjZmctPnNwZWFrZXJfcGluc1tpXSwKKwkJCQkJCUFDX1BJTkNUTF9PVVRfRU4pOworCQlpZiAoc3BlYy0+ZWFwZF9tYXNrICYmIHNwZWMtPmVhcGRfc3dpdGNoKQorCQkJc3RhY19ncGlvX3NldChjb2RlYywgc3BlYy0+Z3Bpb19tYXNrLAorCQkJCXNwZWMtPmdwaW9fZGlyLCBzcGVjLT5ncGlvX2RhdGEgfAorCQkJCXNwZWMtPmVhcGRfbWFzayk7CisJfQorfSAKKwogLyogcmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBocC1waW4gb2YgdGhlIGdpdmVuIGFycmF5IGluZGV4IGlzbid0CiAgKiBhIGphY2stZGV0ZWN0aW9uIHRhcmdldAogICovCkBAIC00NDkyLDEzICs0NDUzLDYgQEAKIAkJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspCiAJCQlzdGFjOTJ4eF9yZXNldF9waW5jdGwoY29kZWMsIGNmZy0+bGluZV9vdXRfcGluc1tpXSwKIAkJCQkJCUFDX1BJTkNUTF9PVVRfRU4pOwotCQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5zcGVha2VyX291dHM7IGkrKykKLQkJCXN0YWM5Mnh4X3Jlc2V0X3BpbmN0bChjb2RlYywgY2ZnLT5zcGVha2VyX3BpbnNbaV0sCi0JCQkJCQlBQ19QSU5DVExfT1VUX0VOKTsKLQkJaWYgKHNwZWMtPmVhcGRfbWFzayAmJiBzcGVjLT5lYXBkX3N3aXRjaCkKLQkJCXN0YWNfZ3Bpb19zZXQoY29kZWMsIHNwZWMtPmdwaW9fbWFzaywKLQkJCQlzcGVjLT5ncGlvX2Rpciwgc3BlYy0+Z3Bpb19kYXRhICYKLQkJCQl+c3BlYy0+ZWFwZF9tYXNrKTsKIAl9IGVsc2UgewogCQkvKiBlbmFibGUgbGluZW91dHMgKi8KIAkJaWYgKHNwZWMtPmhwX3N3aXRjaCkKQEAgLTQ1MDcsMTQgKzQ0NjEsOCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5saW5lX291dHM7IGkrKykKIAkJCXN0YWM5Mnh4X3NldF9waW5jdGwoY29kZWMsIGNmZy0+bGluZV9vdXRfcGluc1tpXSwKIAkJCQkJCUFDX1BJTkNUTF9PVVRfRU4pOwotCQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5zcGVha2VyX291dHM7IGkrKykKLQkJCXN0YWM5Mnh4X3NldF9waW5jdGwoY29kZWMsIGNmZy0+c3BlYWtlcl9waW5zW2ldLAotCQkJCQkJQUNfUElOQ1RMX09VVF9FTik7Ci0JCWlmIChzcGVjLT5lYXBkX21hc2sgJiYgc3BlYy0+ZWFwZF9zd2l0Y2gpCi0JCQlzdGFjX2dwaW9fc2V0KGNvZGVjLCBzcGVjLT5ncGlvX21hc2ssCi0JCQkJc3BlYy0+Z3Bpb19kaXIsIHNwZWMtPmdwaW9fZGF0YSB8Ci0JCQkJc3BlYy0+ZWFwZF9tYXNrKTsKIAl9CisJc3RhYzkyeHhfbGluZV9vdXRfZGV0ZWN0KGNvZGVjLCBwcmVzZW5jZSk7CiAJLyogdG9nZ2xlIGhwIG91dHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5ocF9vdXRzOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IHZhbCA9IEFDX1BJTkNUTF9PVVRfRU4gfCBBQ19QSU5DVExfSFBfRU47CkBAIC00NTk5LDEwICs0NTQ3LDI4IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzdGFjX2lzc3VlX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAotCQkJCSAgIHVuc2lnbmVkIGNoYXIgdHlwZSkKK3N0YXRpYyB2b2lkIHN0YWM5Mnh4X21pY19kZXRlY3Qoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IHNpZ21hdGVsX2V2ZW50ICpldmVudCA9IHN0YWNfZ2V0X2V2ZW50KGNvZGVjLCBuaWQsIHR5cGUpOworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IHNpZ21hdGVsX21pY19yb3V0ZSAqbWljOworCisJaWYgKGdldF9waW5fcHJlc2VuY2UoY29kZWMsIHNwZWMtPmV4dF9taWMucGluKSkKKwkJbWljID0gJnNwZWMtPmV4dF9taWM7CisJZWxzZQorCQltaWMgPSAmc3BlYy0+aW50X21pYzsKKwlpZiAobWljLT5kbXV4X2lkeCkKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgc3BlYy0+ZG11eF9uaWRzWzBdLCAwLAorCQkJCQkgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAorCQkJCQkgIG1pYy0+ZG11eF9pZHgpOworCWVsc2UKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgc3BlYy0+bXV4X25pZHNbMF0sIDAsCisJCQkJCSAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCisJCQkJCSAgbWljLT5tdXhfaWR4KTsKK30KKworc3RhdGljIHZvaWQgc3RhY19pc3N1ZV91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfZXZlbnQgKmV2ZW50ID0gc3RhY19nZXRfZXZlbnQoY29kZWMsIG5pZCk7CiAJaWYgKCFldmVudCkKIAkJcmV0dXJuOwogCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQoY29kZWMsICh1bnNpZ25lZClldmVudC0+dGFnIDw8IDI2KTsKQEAgLTQ2MjEsOCArNDU4NywxOCBAQAogCiAJc3dpdGNoIChldmVudC0+dHlwZSkgewogCWNhc2UgU1RBQ19IUF9FVkVOVDoKKwljYXNlIFNUQUNfTE9fRVZFTlQ6CiAJCXN0YWM5Mnh4X2hwX2RldGVjdChjb2RlYyk7Ci0JCS8qIGZhbGx0aHJ1ICovCisJCWJyZWFrOworCWNhc2UgU1RBQ19NSUNfRVZFTlQ6CisJCXN0YWM5Mnh4X21pY19kZXRlY3QoY29kZWMpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisJY2FzZSBTVEFDX0hQX0VWRU5UOgorCWNhc2UgU1RBQ19MT19FVkVOVDoKKwljYXNlIFNUQUNfTUlDX0VWRU5UOgogCWNhc2UgU1RBQ19JTlNFUlRfRVZFTlQ6CiAJY2FzZSBTVEFDX1BXUl9FVkVOVDoKIAkJaWYgKHNwZWMtPm51bV9wd3JzID4gMCkKQEAgLTQ3MTMsOCArNDY4OSw3IEBACiAJc25kX2hkYV9jb2RlY19yZXN1bWVfY2FjaGUoY29kZWMpOwogCS8qIGZha2UgZXZlbnQgdG8gc2V0IHVwIHBpbnMgYWdhaW4gdG8gb3ZlcnJpZGUgY2FjaGVkIHZhbHVlcyAqLwogCWlmIChzcGVjLT5ocF9kZXRlY3QpCi0JCXN0YWNfaXNzdWVfdW5zb2xfZXZlbnQoY29kZWMsIHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSwKLQkJCQkgICAgICAgU1RBQ19IUF9FVkVOVCk7CisJCXN0YWNfaXNzdWVfdW5zb2xfZXZlbnQoY29kZWMsIHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3NTQsNiArNDcyOSwxOSBAQAogc3RhdGljIGludCBzdGFjOTJ4eF9zdXNwZW5kKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaTsKKwloZGFfbmlkX3QgbmlkOworCisJLyogcmVzZXQgZWFjaCBwaW4gYmVmb3JlIHBvd2VyaW5nIGRvd24gREFDL0FEQyB0byBhdm9pZCBjbGljayBub2lzZSAqLworCW5pZCA9IGNvZGVjLT5zdGFydF9uaWQ7CisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5udW1fbm9kZXM7IGkrKywgbmlkKyspIHsKKwkJdW5zaWduZWQgaW50IHdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOworCQl1bnNpZ25lZCBpbnQgd2lkX3R5cGUgPSBnZXRfd2NhcHNfdHlwZSh3Y2Fwcyk7CisJCWlmICh3aWRfdHlwZSA9PSBBQ19XSURfUElOKQorCQkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKKwl9CisKIAlpZiAoc3BlYy0+ZWFwZF9tYXNrKQogCQlzdGFjX2dwaW9fc2V0KGNvZGVjLCBzcGVjLT5ncGlvX21hc2ssCiAJCQkJc3BlYy0+Z3Bpb19kaXIsIHNwZWMtPmdwaW9fZGF0YSAmCkBAIC00NzkwLDcgKzQ3NzgsOCBAQAogCQkJCQkJCXN0YWM5MjAwX21vZGVscywKIAkJCQkJCQlzdGFjOTIwMF9jZmdfdGJsKTsKIAlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKLQkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5MjAwLCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6ICVzOiBCSU9TIGF1dG8tcHJvYmluZy5cbiIsCisJCQkgICAgY29kZWMtPmNoaXBfbmFtZSk7CiAJZWxzZQogCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJCSBzdGFjOTIwMF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwpAQCAtNDg2Miw4ICs0ODUxLDggQEAKIAkJCQkJCQlzdGFjOTI1eF9jZmdfdGJsKTsKICBhZ2FpbjoKIAlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKLQkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5MjV4LCIKLQkJCQkgICAgICAidXNpbmcgQklPUyBkZWZhdWx0c1xuIik7CisJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiAlczogQklPUyBhdXRvLXByb2JpbmcuXG4iLAorCQkJICAgIGNvZGVjLT5jaGlwX25hbWUpOwogCWVsc2UKIAkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCQkgc3RhYzkyNXhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKQEAgLTQ4OTMsNiArNDg4Miw5IEBACiAKIAlzcGVjLT5pbml0ID0gc3RhYzkyNXhfY29yZV9pbml0OwogCXNwZWMtPm1peGVyID0gc3RhYzkyNXhfbWl4ZXI7CisJc3BlYy0+bnVtX2NhcHMgPSAxOworCXNwZWMtPmNhcHZvbHMgPSBzdGFjOTI1eF9jYXB2b2xzOworCXNwZWMtPmNhcHN3cyA9IHN0YWM5MjV4X2NhcHN3czsKIAogCWVyciA9IHN0YWM5Mnh4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjLCAweDgsIDB4Nyk7CiAJaWYgKCFlcnIpIHsKQEAgLTQ5MTQsMTYgKzQ5MDYsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggc3RhYzkyaGQ3M3h4X2RtdXggPSB7Ci0JLm51bV9pdGVtcyA9IDQsCi0JLml0ZW1zID0gewotCQl7ICJBbmFsb2cgSW5wdXRzIiwgMHgwYiB9LAotCQl7ICJEaWdpdGFsIE1pYyAxIiwgMHgwOSB9LAotCQl7ICJEaWdpdGFsIE1pYyAyIiwgMHgwYSB9LAotCQl7ICJDRCIsIDB4MDggfSwKLQl9Ci19OwotCiBzdGF0aWMgaW50IHBhdGNoX3N0YWM5MmhkNzN4eChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYzsKQEAgLTQ5NDMsMTAgKzQ5MjUsMTYgQEAKIAkJCQkJCQlTVEFDXzkySEQ3M1hYX01PREVMUywKIAkJCQkJCQlzdGFjOTJoZDczeHhfbW9kZWxzLAogCQkJCQkJCXN0YWM5MmhkNzN4eF9jZmdfdGJsKTsKKwkvKiBjaGVjayBjb2RlYyBzdWJzeXN0ZW0gaWQgaWYgbm90IGZvdW5kICovCisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCisJCXNwZWMtPmJvYXJkX2NvbmZpZyA9CisJCQlzbmRfaGRhX2NoZWNrX2JvYXJkX2NvZGVjX3NpZF9jb25maWcoY29kZWMsCisJCQkJU1RBQ185MkhENzNYWF9NT0RFTFMsIHN0YWM5MmhkNzN4eF9tb2RlbHMsCisJCQkJc3RhYzkyaGQ3M3h4X2NvZGVjX2lkX2NmZ190YmwpOwogYWdhaW46CiAJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCi0JCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciIKLQkJCSIgU1RBQzkySEQ3M1hYLCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6ICVzOiBCSU9TIGF1dG8tcHJvYmluZy5cbiIsCisJCQkgICAgY29kZWMtPmNoaXBfbmFtZSk7CiAJZWxzZQogCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyaGQ3M3h4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7CkBAIC00OTU5LDIwICs0OTQ3LDE1IEBACiAJCSAgICAgICAibnVtYmVyIG9mIGNoYW5uZWxzIGRlZmF1bHRpbmcgdG8gREFDIGNvdW50XG4iKTsKIAkJbnVtX2RhY3MgPSBTVEFDOTJIRDczX0RBQ19DT1VOVDsKIAl9CisJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzN4eF9jb3JlX2luaXQ7CiAJc3dpdGNoIChudW1fZGFjcykgewogCWNhc2UgMHgzOiAvKiA2IENoYW5uZWwgKi8KLQkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDczeHhfNmNoX21peGVyOwotCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3M3h4XzZjaF9jb3JlX2luaXQ7CiAJCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTJoZDczeHhfNmNoX2xvb3BiYWNrOwogCQlicmVhazsKIAljYXNlIDB4NDogLyogOCBDaGFubmVsICovCi0JCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3M3h4XzhjaF9taXhlcjsKLQkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzN4eF84Y2hfY29yZV9pbml0OwogCQlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyaGQ3M3h4XzhjaF9sb29wYmFjazsKIAkJYnJlYWs7CiAJY2FzZSAweDU6IC8qIDEwIENoYW5uZWwgKi8KLQkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDczeHhfMTBjaF9taXhlcjsKLQkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzN4eF8xMGNoX2NvcmVfaW5pdDsKIAkJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MmhkNzN4eF8xMGNoX2xvb3BiYWNrOwogCQlicmVhazsKIAl9CkBAIC00OTg3LDE0ICs0OTcwLDE0IEBACiAJc3BlYy0+ZG1pY19uaWRzID0gc3RhYzkyaGQ3M3h4X2RtaWNfbmlkczsKIAlzcGVjLT5kbXV4X25pZHMgPSBzdGFjOTJoZDczeHhfZG11eF9uaWRzOwogCXNwZWMtPnNtdXhfbmlkcyA9IHN0YWM5MmhkNzN4eF9zbXV4X25pZHM7Ci0Jc3BlYy0+YW1wX25pZHMgPSBzdGFjOTJoZDczeHhfYW1wX25pZHM7Ci0Jc3BlYy0+bnVtX2FtcHMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzN4eF9hbXBfbmlkcyk7CiAKIAlzcGVjLT5udW1fbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzN4eF9tdXhfbmlkcyk7CiAJc3BlYy0+bnVtX2FkY3MgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzN4eF9hZGNfbmlkcyk7CiAJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3M3h4X2RtdXhfbmlkcyk7Ci0JbWVtY3B5KCZzcGVjLT5wcml2YXRlX2RpbXV4LCAmc3RhYzkyaGQ3M3h4X2RtdXgsCi0JCQlzaXplb2Yoc3RhYzkyaGQ3M3h4X2RtdXgpKTsKKworCXNwZWMtPm51bV9jYXBzID0gU1RBQzkySEQ3M1hYX05VTV9DQVBTOworCXNwZWMtPmNhcHZvbHMgPSBzdGFjOTJoZDczeHhfY2Fwdm9sczsKKwlzcGVjLT5jYXBzd3MgPSBzdGFjOTJoZDczeHhfY2Fwc3dzOwogCiAJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKIAljYXNlIFNUQUNfREVMTF9FUToKQEAgLTUwMDQsNDMgKzQ5ODcsNDAgQEAKIAljYXNlIFNUQUNfREVMTF9NNl9ETUlDOgogCWNhc2UgU1RBQ19ERUxMX002X0JPVEg6CiAJCXNwZWMtPm51bV9zbXV4ZXMgPSAwOwotCQlzcGVjLT5taXhlciA9ICZzdGFjOTJoZDczeHhfNmNoX21peGVyW0RFTExfTTZfTUlYRVJdOwotCQlzcGVjLT5hbXBfbmlkcyA9ICZzdGFjOTJoZDczeHhfYW1wX25pZHNbREVMTF9NNl9BTVBdOwogCQlzcGVjLT5lYXBkX3N3aXRjaCA9IDA7Ci0JCXNwZWMtPm51bV9hbXBzID0gMTsKIAotCQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnICE9IFNUQUNfREVMTF9FUSkKLQkJCXNwZWMtPmluaXQgPSBkZWxsX202X2NvcmVfaW5pdDsKIAkJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKIAkJY2FzZSBTVEFDX0RFTExfTTZfQU1JQzogLyogQW5hbG9nIE1pY3MgKi8KIAkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwYiwgMHg5MEE3MDE3MCk7CiAJCQlzcGVjLT5udW1fZG1pY3MgPSAwOwotCQkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgU1RBQ19ERUxMX002X0RNSUM6IC8qIERpZ2l0YWwgTWljcyAqLwogCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDEzLCAweDkwQTYwMTYwKTsKIAkJCXNwZWMtPm51bV9kbWljcyA9IDE7Ci0JCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyA9IDI7CiAJCQlicmVhazsKIAkJY2FzZSBTVEFDX0RFTExfTTZfQk9USDogLyogQm90aCAqLwogCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBiLCAweDkwQTcwMTcwKTsKIAkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgxMywgMHg5MEE2MDE2MCk7CiAJCQlzcGVjLT5udW1fZG1pY3MgPSAxOwotCQkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgPSAyOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBTVEFDX0FMSUVOV0FSRV9NMTdYOgorCQlzcGVjLT5udW1fZG1pY3MgPSBTVEFDOTJIRDczWFhfTlVNX0RNSUNTOworCQlzcGVjLT5udW1fc211eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDczeHhfc211eF9uaWRzKTsKKwkJc3BlYy0+ZWFwZF9zd2l0Y2ggPSAwOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlzcGVjLT5udW1fZG1pY3MgPSBTVEFDOTJIRDczWFhfTlVNX0RNSUNTOwogCQlzcGVjLT5udW1fc211eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDczeHhfc211eF9uaWRzKTsKIAkJc3BlYy0+ZWFwZF9zd2l0Y2ggPSAxOworCQlicmVhazsKIAl9CiAJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA+IFNUQUNfOTJIRDczWFhfUkVGKSB7CiAJCS8qIEdQSU8wIEhpZ2ggPSBFbmFibGUgRUFQRCAqLwogCQlzcGVjLT5lYXBkX21hc2sgPSBzcGVjLT5ncGlvX21hc2sgPSBzcGVjLT5ncGlvX2RpciA9IDB4MTsKIAkJc3BlYy0+Z3Bpb19kYXRhID0gMHgwMTsKIAl9Ci0Jc3BlYy0+ZGlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2RpbXV4OwogCiAJc3BlYy0+bnVtX3B3cnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzN4eF9wd3Jfbmlkcyk7CiAJc3BlYy0+cHdyX25pZHMgPSBzdGFjOTJoZDczeHhfcHdyX25pZHM7CkBAIC01MDcyLDE1ICs1MDUyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IHN0YWM5MmhkODN4eHhfZG11eCA9IHsKLQkubnVtX2l0ZW1zID0gMywKLQkuaXRlbXMgPSB7Ci0JCXsgIkFuYWxvZyBJbnB1dHMiLCAweDAzIH0sCi0JCXsgIkRpZ2l0YWwgTWljIDEiLCAweDA0IH0sCi0JCXsgIkRpZ2l0YWwgTWljIDIiLCAweDA1IH0sCi0JfQotfTsKLQogc3RhdGljIGludCBwYXRjaF9zdGFjOTJoZDgzeHh4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjOwpAQCAtNTA5NywzMiArNTA2OCwzMCBAQAogCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5MmhkODN4eHhfc2xhdmVfZGlnX291dHM7CiAJc3BlYy0+bW9ub19uaWQgPSAweDE5OwogCXNwZWMtPmRpZ2JlZXBfbmlkID0gMHgyMTsKLQlzcGVjLT5kbWljX25pZHMgPSBzdGFjOTJoZDgzeHh4X2RtaWNfbmlkczsKLQlzcGVjLT5kbXV4X25pZHMgPSBzdGFjOTJoZDgzeHh4X2RtdXhfbmlkczsKKwlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5MmhkODN4eHhfbXV4X25pZHM7CisJc3BlYy0+bnVtX211eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDgzeHh4X211eF9uaWRzKTsKIAlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5MmhkODN4eHhfYWRjX25pZHM7CisJc3BlYy0+bnVtX2FkY3MgPSBBUlJBWV9TSVpFKHN0YWM5MmhkODN4eHhfYWRjX25pZHMpOwogCXNwZWMtPnB3cl9uaWRzID0gc3RhYzkyaGQ4M3h4eF9wd3JfbmlkczsKLQlzcGVjLT5hbXBfbmlkcyA9IHN0YWM5MmhkODN4eHhfYW1wX25pZHM7CiAJc3BlYy0+cHdyX21hcHBpbmcgPSBzdGFjOTJoZDgzeHh4X3B3cl9tYXBwaW5nOwogCXNwZWMtPm51bV9wd3JzID0gQVJSQVlfU0laRShzdGFjOTJoZDgzeHh4X3B3cl9uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCiAJc3BlYy0+aW5pdCA9IHN0YWM5MmhkODN4eHhfY29yZV9pbml0OwotCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ4M3h4eF9taXhlcjsKIAlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4M3h4eF9waW5fbmlkcyk7Ci0Jc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4M3h4eF9kbXV4X25pZHMpOwotCXNwZWMtPm51bV9hZGNzID0gQVJSQVlfU0laRShzdGFjOTJoZDgzeHh4X2FkY19uaWRzKTsKLQlzcGVjLT5udW1fYW1wcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4M3h4eF9hbXBfbmlkcyk7Ci0Jc3BlYy0+bnVtX2RtaWNzID0gU1RBQzkySEQ4M1hYWF9OVU1fRE1JQ1M7Ci0Jc3BlYy0+ZGlucHV0X211eCA9ICZzdGFjOTJoZDgzeHh4X2RtdXg7CiAJc3BlYy0+cGluX25pZHMgPSBzdGFjOTJoZDgzeHh4X3Bpbl9uaWRzOworCXNwZWMtPm51bV9jYXBzID0gU1RBQzkySEQ4M1hYWF9OVU1fQ0FQUzsKKwlzcGVjLT5jYXB2b2xzID0gc3RhYzkyaGQ4M3h4eF9jYXB2b2xzOworCXNwZWMtPmNhcHN3cyA9IHN0YWM5MmhkODN4eHhfY2Fwc3dzOworCiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsCiAJCQkJCQkJU1RBQ185MkhEODNYWFhfTU9ERUxTLAogCQkJCQkJCXN0YWM5MmhkODN4eHhfbW9kZWxzLAogCQkJCQkJCXN0YWM5MmhkODN4eHhfY2ZnX3RibCk7CiBhZ2FpbjoKIAlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKLQkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIgotCQkJIiBTVEFDOTJIRDgzWFhYLCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6ICVzOiBCSU9TIGF1dG8tcHJvYmluZy5cbiIsCisJCQkgICAgY29kZWMtPmNoaXBfbmFtZSk7CiAJZWxzZQogCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyaGQ4M3h4eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwpAQCAtNTE2NCw2ICs1MTMzLDggQEAKIAogCW51bV9kYWNzID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwKIAkJCQljb25uLCBTVEFDOTJIRDgzX0RBQ19DT1VOVCArIDEpIC0gMTsKKwlpZiAobnVtX2RhY3MgPCAwKQorCQludW1fZGFjcyA9IFNUQUM5MkhEODNfREFDX0NPVU5UOwogCiAJLyogc2V0IHBvcnQgWCB0byBzZWxlY3QgdGhlIGxhc3QgREFDCiAJICovCkBAIC01MTc3LDI1ICs1MTQ4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IHN0YWM5MmhkNzFieHhfZG11eF9ub21peGVyID0gewotCS5udW1faXRlbXMgPSAzLAotCS5pdGVtcyA9IHsKLQkJeyAiQW5hbG9nIElucHV0cyIsIDB4MDAgfSwKLQkJeyAiRGlnaXRhbCBNaWMgMSIsIDB4MDIgfSwKLQkJeyAiRGlnaXRhbCBNaWMgMiIsIDB4MDMgfSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlciA9IHsKLQkubnVtX2l0ZW1zID0gNCwKLQkuaXRlbXMgPSB7Ci0JCXsgIkFuYWxvZyBJbnB1dHMiLCAweDAwIH0sCi0JCXsgIk1peGVyIiwgMHgwMSB9LAotCQl7ICJEaWdpdGFsIE1pYyAxIiwgMHgwMiB9LAotCQl7ICJEaWdpdGFsIE1pYyAyIiwgMHgwMyB9LAotCX0KLX07Ci0KIC8qIGdldCB0aGUgcGluIGNvbm5lY3Rpb24gKGZpeGVkLCBub25lLCBldGMpICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgaWR4KQogewpAQCAtNTI1Niw3ICs1MjA4LDYgQEAKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYzsKIAlzdHJ1Y3QgaGRhX3ZlcmIgKnVubXV0ZV9pbml0ID0gc3RhYzkyaGQ3MWJ4eF91bm11dGVfY29yZV9pbml0OwogCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGludCBuZG1pY19uaWRzID0gMDsKIAogCXNwZWMgID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtNTI4NSw4ICs1MjM2LDggQEAKIAkJCQkJCQlzdGFjOTJoZDcxYnh4X2NmZ190YmwpOwogYWdhaW46CiAJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCi0JCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciIKLQkJCSIgU1RBQzkySEQ3MUJYWCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7CisJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiAlczogQklPUyBhdXRvLXByb2JpbmcuXG4iLAorCQkJICAgIGNvZGVjLT5jaGlwX25hbWUpOwogCWVsc2UKIAkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCXN0YWM5MmhkNzFieHhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKQEAgLTUzMDEsNiArNTI1MiwxMCBAQAogCXNwZWMtPmRtaWNfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG1pY19uaWRzOwogCXNwZWMtPmRtdXhfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG11eF9uaWRzOwogCisJc3BlYy0+bnVtX2NhcHMgPSBTVEFDOTJIRDcxQlhYX05VTV9DQVBTOworCXNwZWMtPmNhcHZvbHMgPSBzdGFjOTJoZDcxYnh4X2NhcHZvbHM7CisJc3BlYy0+Y2Fwc3dzID0gc3RhYzkyaGQ3MWJ4eF9jYXBzd3M7CisKIAlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKIAljYXNlIDB4MTExZDc2YjY6IC8qIDQgUG9ydCB3aXRob3V0IEFuYWxvZyBNaXhlciAqLwogCWNhc2UgMHgxMTFkNzZiNzoKQEAgLTUzMDgsMjQgKzUyNjMsMTMgQEAKIAkJLyogZmFsbHRocnUgKi8KIAljYXNlIDB4MTExZDc2YjQ6IC8qIDYgUG9ydCB3aXRob3V0IEFuYWxvZyBNaXhlciAqLwogCWNhc2UgMHgxMTFkNzZiNToKLQkJbWVtY3B5KCZzcGVjLT5wcml2YXRlX2RpbXV4LCAmc3RhYzkyaGQ3MWJ4eF9kbXV4X25vbWl4ZXIsCi0JCSAgICAgICBzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4X25vbWl4ZXIpKTsKLQkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDcxYnh4X21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3MWJ4eF9jb3JlX2luaXQ7CiAJCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5MmhkNzFieHhfc2xhdmVfZGlnX291dHM7CiAJCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5MmhkNzFieHhfY29ubmVjdGVkX3BvcnRzKGNvZGVjLAogCQkJCQlzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcywKIAkJCQkJU1RBQzkySEQ3MUJYWF9OVU1fRE1JQ1MpOwotCQlpZiAoc3BlYy0+bnVtX2RtaWNzKSB7Ci0JCQlzcGVjLT5udW1fZG11eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtdXhfbmlkcyk7Ci0JCQlzcGVjLT5kaW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfZGltdXg7Ci0JCQluZG1pY19uaWRzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAxOwotCQl9CiAJCWJyZWFrOwogCWNhc2UgMHgxMTFkNzYwODogLyogNSBQb3J0IHdpdGggQW5hbG9nIE1peGVyICovCi0JCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9kaW11eCwgJnN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIsCi0JCSAgICAgICBzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlcikpOwotCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcy0tOwogCQlzd2l0Y2ggKHNwZWMtPmJvYXJkX2NvbmZpZykgewogCQljYXNlIFNUQUNfSFBfTTQ6CiAJCQkvKiBFbmFibGUgVlJFRiBwb3dlciBzYXZpbmcgb24gR1BJTzEgZGV0ZWN0ICovCkBAIC01MzQ3LDExICs1MjkxLDggQEAKIAogCQkvKiBubyBvdXRwdXQgYW1wcyAqLwogCQlzcGVjLT5udW1fcHdycyA9IDA7Ci0JCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfbWl4ZXI7Ci0JCXNwZWMtPmRpbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9kaW11eDsKLQogCQkvKiBkaXNhYmxlIFZTVyAqLwotCQlzcGVjLT5pbml0ID0gJnN0YWM5MmhkNzFieHhfYW5hbG9nX2NvcmVfaW5pdFtIRF9ESVNBQkxFX1BPUlRGXTsKKwkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzFieHhfY29yZV9pbml0OwogCQl1bm11dGVfaW5pdCsrOwogCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGYsIDB4NDBmMDAwZjApOwogCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MTksIDB4NDBmMDAwZjMpOwpAQCAtNTM1OSw4ICs1MzAwLDYgQEAKIAkJc3BlYy0+bnVtX2RtaWNzID0gc3RhYzkyaGQ3MWJ4eF9jb25uZWN0ZWRfcG9ydHMoY29kZWMsCiAJCQkJCXN0YWM5MmhkNzFieHhfZG1pY19uaWRzLAogCQkJCQlTVEFDOTJIRDcxQlhYX05VTV9ETUlDUyAtIDEpOwotCQlzcGVjLT5udW1fZG11eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtdXhfbmlkcyk7Ci0JCW5kbWljX25pZHMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG1pY19uaWRzKSAtIDI7CiAJCWJyZWFrOwogCWNhc2UgMHgxMTFkNzYwMzogLyogNiBQb3J0IHdpdGggQW5hbG9nIE1peGVyICovCiAJCWlmICgoY29kZWMtPnJldmlzaW9uX2lkICYgMHhmKSA9PSAxKQpAQCAtNTM3MCwxNyArNTMwOSwxMiBAQAogCQlzcGVjLT5udW1fcHdycyA9IDA7CiAJCS8qIGZhbGx0aHJ1ICovCiAJZGVmYXVsdDoKLQkJbWVtY3B5KCZzcGVjLT5wcml2YXRlX2RpbXV4LCAmc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlciwKLQkJICAgICAgIHNpemVvZihzdGFjOTJoZDcxYnh4X2RtdXhfYW1peGVyKSk7Ci0JCXNwZWMtPmRpbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9kaW11eDsKLQkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDcxYnh4X2FuYWxvZ19taXhlcjsKLQkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzFieHhfYW5hbG9nX2NvcmVfaW5pdDsKKwkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzFieHhfY29yZV9pbml0OwogCQljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzdGFjOTJoZDcxYnh4X3NsYXZlX2RpZ19vdXRzOwogCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKIAkJCQkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMsCiAJCQkJCVNUQUM5MkhENzFCWFhfTlVNX0RNSUNTKTsKLQkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOwotCQluZG1pY19uaWRzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAxOworCQlicmVhazsKIAl9CiAKIAlpZiAoZ2V0X3djYXBzKGNvZGVjLCAweGEpICYgQUNfV0NBUF9JTl9BTVApCkBAIC01NDA4LDYgKzUzNDIsNyBAQAogCiAJc3BlYy0+bnVtX211eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X211eF9uaWRzKTsKIAlzcGVjLT5udW1fYWRjcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9hZGNfbmlkcyk7CisJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOwogCXNwZWMtPm51bV9zbXV4ZXMgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9zbXV4ZXMoY29kZWMsIDB4MWUpOwogCiAJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKQEAgLTU0NjIsOCArNTM5Nyw2IEBACiAjZW5kaWYJCiAKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwotCWlmIChzcGVjLT5kaW5wdXRfbXV4KQotCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyArPSBzcGVjLT5udW1fZG1pY3MgLSBuZG1pY19uaWRzOwogCiAJZXJyID0gc3RhYzkyeHhfcGFyc2VfYXV0b19jb25maWcoY29kZWMsIDB4MjEsIDApOwogCWlmICghZXJyKSB7CkBAIC01NTQxLDggKzU0NzQsOCBAQAogCiAgYWdhaW46CiAJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCi0JCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTIyeCwgIgotCQkJInVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOworCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogJXM6IEJJT1MgYXV0by1wcm9iaW5nLlxuIiwKKwkJCSAgICBjb2RlYy0+Y2hpcF9uYW1lKTsKIAllbHNlCiAJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQlzdGFjOTIyeF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwpAQCAtNTU1NSw3ICs1NDg4LDEwIEBACiAJc3BlYy0+bnVtX3B3cnMgPSAwOwogCiAJc3BlYy0+aW5pdCA9IHN0YWM5MjJ4X2NvcmVfaW5pdDsKLQlzcGVjLT5taXhlciA9IHN0YWM5MjJ4X21peGVyOworCisJc3BlYy0+bnVtX2NhcHMgPSBTVEFDOTIyWF9OVU1fQ0FQUzsKKwlzcGVjLT5jYXB2b2xzID0gc3RhYzkyMnhfY2Fwdm9sczsKKwlzcGVjLT5jYXBzd3MgPSBzdGFjOTIyeF9jYXBzd3M7CiAKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCQpAQCAtNTYwNCw4ICs1NTQwLDggQEAKIAkJCQkJCQlzdGFjOTI3eF9jZmdfdGJsKTsKICBhZ2FpbjoKIAlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKLQkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIgotCQkJICAgICJTVEFDOTI3eCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7CisJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiAlczogQklPUyBhdXRvLXByb2JpbmcuXG4iLAorCQkJICAgIGNvZGVjLT5jaGlwX25hbWUpOwogCWVsc2UKIAkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCXN0YWM5Mjd4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7CkBAIC01NjMwLDcgKzU1NjYsNiBAQAogCQlzcGVjLT5udW1fZG1pY3MgPSAwOwogCiAJCXNwZWMtPmluaXQgPSBkOTY1X2NvcmVfaW5pdDsKLQkJc3BlYy0+bWl4ZXIgPSBzdGFjOTI3eF9taXhlcjsKIAkJYnJlYWs7CiAJY2FzZSBTVEFDX0RFTExfQklPUzoKIAkJc3dpdGNoIChjb2RlYy0+c3Vic3lzdGVtX2lkKSB7CkBAIC01NjYyLDcgKzU1OTcsNiBAQAogCQlzcGVjLT5udW1fZG1pY3MgPSBTVEFDOTI3WF9OVU1fRE1JQ1M7CiAKIAkJc3BlYy0+aW5pdCA9IGQ5NjVfY29yZV9pbml0OwotCQlzcGVjLT5taXhlciA9IHN0YWM5Mjd4X21peGVyOwogCQlzcGVjLT5kbXV4X25pZHMgPSBzdGFjOTI3eF9kbXV4X25pZHM7CiAJCXNwZWMtPm51bV9kbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5Mjd4X2RtdXhfbmlkcyk7CiAJCWJyZWFrOwpAQCAtNTY3NSw5ICs1NjA5LDEyIEBACiAJCXNwZWMtPm51bV9kbWljcyA9IDA7CiAKIAkJc3BlYy0+aW5pdCA9IHN0YWM5Mjd4X2NvcmVfaW5pdDsKLQkJc3BlYy0+bWl4ZXIgPSBzdGFjOTI3eF9taXhlcjsKIAl9CiAKKwlzcGVjLT5udW1fY2FwcyA9IFNUQUM5MjdYX05VTV9DQVBTOworCXNwZWMtPmNhcHZvbHMgPSBzdGFjOTI3eF9jYXB2b2xzOworCXNwZWMtPmNhcHN3cyA9IHN0YWM5Mjd4X2NhcHN3czsKKwogCXNwZWMtPm51bV9wd3JzID0gMDsKIAlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyN3hfbG9vcGJhY2s7CiAJc3BlYy0+YWxvb3BiYWNrX21hc2sgPSAweDQwOwpAQCAtNTczOSw3ICs1Njc2LDggQEAKIAkJCQkJCQlzdGFjOTIwNV9jZmdfdGJsKTsKICBhZ2FpbjoKIAlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKLQkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIFNUQUM5MjA1LCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6ICVzOiBCSU9TIGF1dG8tcHJvYmluZy5cbiIsCisJCQkgICAgY29kZWMtPmNoaXBfbmFtZSk7CiAJZWxzZQogCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJCSBzdGFjOTIwNV9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwpAQCAtNTc1OCw5ICs1Njk2LDEyIEBACiAJc3BlYy0+bnVtX3B3cnMgPSAwOwogCiAJc3BlYy0+aW5pdCA9IHN0YWM5MjA1X2NvcmVfaW5pdDsKLQlzcGVjLT5taXhlciA9IHN0YWM5MjA1X21peGVyOwogCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTIwNV9sb29wYmFjazsKIAorCXNwZWMtPm51bV9jYXBzID0gU1RBQzkyMDVfTlVNX0NBUFM7CisJc3BlYy0+Y2Fwdm9scyA9IHN0YWM5MjA1X2NhcHZvbHM7CisJc3BlYy0+Y2Fwc3dzID0gc3RhYzkyMDVfY2Fwc3dzOworCiAJc3BlYy0+YWxvb3BiYWNrX21hc2sgPSAweDQwOwogCXNwZWMtPmFsb29wYmFja19zaGlmdCA9IDA7CiAJLyogVHVybiBvbi9vZmYgRUFQRCBwZXIgSFAgcGx1Z2dpbmcgKi8KQEAgLTU4MzUsMTIgKzU3NzYsNiBAQAogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzk4NzJfbWl4ZXJbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDksIDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOSwgMCwgSERBX0lOUFVUKSwKLQl7IH0gLyogZW5kICovCi19OwotCiBzdGF0aWMgaGRhX25pZF90IHN0YWM5ODcyX3Bpbl9uaWRzW10gPSB7CiAJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKIAkweDExLCAweDEzLCAweDE0LApAQCAtNTg1NCw2ICs1Nzg5LDExIEBACiAJMHgxNQogfTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhYzk4NzJfY2Fwdm9sc1tdID0geworCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgwOSwgMywgMCwgSERBX0lOUFVUKSwKK307CisjZGVmaW5lIHN0YWM5ODcyX2NhcHN3cwkJc3RhYzk4NzJfY2Fwdm9scworCiBzdGF0aWMgdW5zaWduZWQgaW50IHN0YWM5ODcyX3ZhaW9fcGluX2NvbmZpZ3NbOV0gPSB7CiAJMHgwMzIxMTAyMCwgMHg0MTExMTFmMCwgMHg0MTExMTFmMCwgMHgwM2ExNTAzMCwKIAkweDQxMTExMWYwLCAweDkwMTcwMTEwLCAweDQxMTExMWYwLCAweDQxMTExMWYwLApAQCAtNTg5MSw4ICs1ODMxLDggQEAKIAkJCQkJCQlzdGFjOTg3Ml9tb2RlbHMsCiAJCQkJCQkJc3RhYzk4NzJfY2ZnX3RibCk7CiAJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCi0JCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTg3MiwgIgotCQkJICAgICJ1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6ICVzOiBCSU9TIGF1dG8tcHJvYmluZy5cbiIsCisJCQkgICAgY29kZWMtPmNoaXBfbmFtZSk7CiAJZWxzZQogCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJCSBzdGFjOTg3Ml9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwpAQCAtNTkwMiw4ICs1ODQyLDEwIEBACiAJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTg3Ml9hZGNfbmlkczsKIAlzcGVjLT5udW1fbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5ODcyX211eF9uaWRzKTsKIAlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5ODcyX211eF9uaWRzOwotCXNwZWMtPm1peGVyID0gc3RhYzk4NzJfbWl4ZXI7CiAJc3BlYy0+aW5pdCA9IHN0YWM5ODcyX2NvcmVfaW5pdDsKKwlzcGVjLT5udW1fY2FwcyA9IDE7CisJc3BlYy0+Y2Fwdm9scyA9IHN0YWM5ODcyX2NhcHZvbHM7CisJc3BlYy0+Y2Fwc3dzID0gc3RhYzk4NzJfY2Fwc3dzOwogCiAJZXJyID0gc3RhYzkyeHhfcGFyc2VfYXV0b19jb25maWcoY29kZWMsIDB4MTAsIDB4MTIpOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwppbmRleCBlOGYxMGIxLi5lZTg5ZGI5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKQEAgLTEzMzksOCArMTMzOSw3IEBACiAJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9hZGNfbmlkczsgaSsrKSB7CiAJCW5pZCA9IHNwZWMtPmFkY19uaWRzW2ldOwogCQl3aGlsZSAobmlkKSB7Ci0JCQl0eXBlID0gKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfVFlQRSkKLQkJCQk+PiBBQ19XQ0FQX1RZUEVfU0hJRlQ7CisJCQl0eXBlID0gZ2V0X3djYXBzX3R5cGUoZ2V0X3djYXBzKGNvZGVjLCBuaWQpKTsKIAkJCWlmICh0eXBlID09IEFDX1dJRF9QSU4pCiAJCQkJYnJlYWs7CiAJCQluID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubiwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuaCBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuaAppbmRleCBhZGM5MDllLi45ZGEyZGFlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmgKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oCkBAIC0zNzksNiArMzc5LDE1IEBACiAJdW5zaWduZWQgY2hhciAoKnNldF9tY2xrKShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgdW5zaWduZWQgaW50IHJhdGUpOwogCXZvaWQgKCpzZXRfc3BkaWZfY2xvY2spKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKTsKIAorI2lmZGVmIENPTkZJR19QTQorCWludCAoKnBtX3N1c3BlbmQpKHN0cnVjdCBzbmRfaWNlMTcxMiAqKTsKKwlpbnQgKCpwbV9yZXN1bWUpKHN0cnVjdCBzbmRfaWNlMTcxMiAqKTsKKwlpbnQgcG1fc3VzcGVuZF9lbmFibGVkOjE7CisJaW50IHBtX3NhdmVkX2lzX3NwZGlmX21hc3RlcjoxOworCXVuc2lnbmVkIGludCBwbV9zYXZlZF9zcGRpZl9jdHJsOworCXVuc2lnbmVkIGNoYXIgcG1fc2F2ZWRfc3BkaWZfY2ZnOworCXVuc2lnbmVkIGludCBwbV9zYXZlZF9yb3V0ZTsKKyNlbmRpZgogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKaW5kZXggY2M4NGE4My4uYWY2ZTAwMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwpAQCAtNTYwLDYgKzU2MCw3IEBACiAKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CiAJCXNwaW5fbG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCW9sZCA9IGluYihJQ0VNVDE3MjQoaWNlLCBETUFfQ09OVFJPTCkpOwogCQlpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKQpAQCAtNTcwLDYgKzU3MSwxMCBAQAogCQlzcGluX3VubG9jaygmaWNlLT5yZWdfbG9jayk7CiAJCWJyZWFrOwogCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJCS8qIGFwcHMgd2lsbCBoYXZlIHRvIHJlc3RhcnQgc3RyZWFtICovCisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjI2Miw3ICsyMjY3LDcgQEAKIAogCiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbmRfdnQxNzI0X2NoaXBfcmVzZXQoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCitzdGF0aWMgdm9pZCBzbmRfdnQxNzI0X2NoaXBfcmVzZXQoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCiB7CiAJb3V0YihWVDE3MjRfUkVTRVQgLCBJQ0VSRUcxNzI0KGljZSwgQ09OVFJPTCkpOwogCWluYihJQ0VSRUcxNzI0KGljZSwgQ09OVFJPTCkpOyAvKiBwY2kgcG9zdGluZyBmbHVzaCAqLwpAQCAtMjI3Miw3ICsyMjc3LDcgQEAKIAltc2xlZXAoMTApOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfdnQxNzI0X2NoaXBfaW5pdChzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKK3N0YXRpYyBpbnQgc25kX3Z0MTcyNF9jaGlwX2luaXQoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCiB7CiAJb3V0YihpY2UtPmVlcHJvbS5kYXRhW0lDRV9FRVAyX1NZU0NPTkZdLCBJQ0VSRUcxNzI0KGljZSwgU1lTX0NGRykpOwogCW91dGIoaWNlLT5lZXByb20uZGF0YVtJQ0VfRUVQMl9BQ0xJTktdLCBJQ0VSRUcxNzI0KGljZSwgQUM5N19DRkcpKTsKQEAgLTIyODcsNiArMjI5MiwxNCBAQAogCiAJb3V0YigwLCBJQ0VSRUcxNzI0KGljZSwgUE9XRVJET1dOKSk7CiAKKwkvKiBNUFVfUlggYW5kIFRYIGlycSBtYXNrcyBhcmUgY2xlYXJlZCBsYXRlciBkeW5hbWljYWxseSAqLworCW91dGIoVlQxNzI0X0lSUV9NUFVfUlggfCBWVDE3MjRfSVJRX01QVV9UWCAsIElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSk7CisKKwkvKiBkb24ndCBoYW5kbGUgRklGTyBvdmVycnVuL3VuZGVycnVucyAoanVzdCB5ZXQpLAorCSAqIHNpbmNlIHRoZXkgY2F1c2UgbWFjaGluZSBsb2NrdXBzCisJICovCisJb3V0YihWVDE3MjRfTVVMVElfRklGT19FUlIsIElDRU1UMTcyNChpY2UsIERNQV9JTlRfTUFTSykpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0MzEsNiArMjQ0NCw4IEBACiAJc25kX3Z0MTcyNF9wcm9jX2luaXQoaWNlKTsKIAlzeW5jaHJvbml6ZV9pcnEocGNpLT5pcnEpOwogCisJY2FyZC0+cHJpdmF0ZV9kYXRhID0gaWNlOworCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksICJJQ0UxNzI0Iik7CiAJaWYgKGVyciA8IDApIHsKIAkJa2ZyZWUoaWNlKTsKQEAgLTI0NTksMTQgKzI0NzQsNiBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQkvKiBNUFVfUlggYW5kIFRYIGlycSBtYXNrcyBhcmUgY2xlYXJlZCBsYXRlciBkeW5hbWljYWxseSAqLwotCW91dGIoVlQxNzI0X0lSUV9NUFVfUlggfCBWVDE3MjRfSVJRX01QVV9UWCAsIElDRVJFRzE3MjQoaWNlLCBJUlFNQVNLKSk7Ci0KLQkvKiBkb24ndCBoYW5kbGUgRklGTyBvdmVycnVuL3VuZGVycnVucyAoanVzdCB5ZXQpLAotCSAqIHNpbmNlIHRoZXkgY2F1c2UgbWFjaGluZSBsb2NrdXBzCi0JICovCi0Jb3V0YihWVDE3MjRfTVVMVElfRklGT19FUlIsIElDRU1UMTcyNChpY2UsIERNQV9JTlRfTUFTSykpOwotCiAJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBpY2UsICZvcHMpOwogCWlmIChlcnIgPCAwKSB7CiAJCXNuZF92dDE3MjRfZnJlZShpY2UpOwpAQCAtMjY1MCwxMSArMjY1Nyw5NiBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHNuZF92dDE3MjRfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBjaSk7CisJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIWljZS0+cG1fc3VzcGVuZF9lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKKworCXNuZF9wY21fc3VzcGVuZF9hbGwoaWNlLT5wY20pOworCXNuZF9wY21fc3VzcGVuZF9hbGwoaWNlLT5wY21fcHJvKTsKKwlzbmRfcGNtX3N1c3BlbmRfYWxsKGljZS0+cGNtX2RzKTsKKwlzbmRfYWM5N19zdXNwZW5kKGljZS0+YWM5Nyk7CisKKwlzcGluX2xvY2tfaXJxKCZpY2UtPnJlZ19sb2NrKTsKKwlpY2UtPnBtX3NhdmVkX2lzX3NwZGlmX21hc3RlciA9IGljZS0+aXNfc3BkaWZfbWFzdGVyKGljZSk7CisJaWNlLT5wbV9zYXZlZF9zcGRpZl9jdHJsID0gaW53KElDRU1UMTcyNChpY2UsIFNQRElGX0NUUkwpKTsKKwlpY2UtPnBtX3NhdmVkX3NwZGlmX2NmZyA9IGluYihJQ0VSRUcxNzI0KGljZSwgU1BESUZfQ0ZHKSk7CisJaWNlLT5wbV9zYXZlZF9yb3V0ZSA9IGlubChJQ0VNVDE3MjQoaWNlLCBST1VURV9QTEFZQkFDSykpOworCXNwaW5fdW5sb2NrX2lycSgmaWNlLT5yZWdfbG9jayk7CisKKwlpZiAoaWNlLT5wbV9zdXNwZW5kKQorCQlpY2UtPnBtX3N1c3BlbmQoaWNlKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCXBjaV9zYXZlX3N0YXRlKHBjaSk7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIHBjaV9jaG9vc2Vfc3RhdGUocGNpLCBzdGF0ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF92dDE3MjRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2kpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBjaSk7CisJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIWljZS0+cG1fc3VzcGVuZF9lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKKwkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGNpKTsKKworCXNuZF92dDE3MjRfY2hpcF9yZXNldChpY2UpOworCisJaWYgKHNuZF92dDE3MjRfY2hpcF9pbml0KGljZSkgPCAwKSB7CisJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChpY2UtPnBtX3Jlc3VtZSkKKwkJaWNlLT5wbV9yZXN1bWUoaWNlKTsKKworCWlmIChpY2UtPnBtX3NhdmVkX2lzX3NwZGlmX21hc3RlcikgeworCQkvKiBzd2l0Y2hpbmcgdG8gZXh0ZXJuYWwgY2xvY2sgdmlhIFNQRElGICovCisJCWljZS0+c2V0X3NwZGlmX2Nsb2NrKGljZSk7CisJfSBlbHNlIHsKKwkJLyogaW50ZXJuYWwgb24tY2FyZCBjbG9jayAqLworCQlzbmRfdnQxNzI0X3NldF9wcm9fcmF0ZShpY2UsIGljZS0+cHJvX3JhdGVfZGVmYXVsdCwgMSk7CisJfQorCisJdXBkYXRlX3NwZGlmX2JpdHMoaWNlLCBpY2UtPnBtX3NhdmVkX3NwZGlmX2N0cmwpOworCisJb3V0YihpY2UtPnBtX3NhdmVkX3NwZGlmX2NmZywgSUNFUkVHMTcyNChpY2UsIFNQRElGX0NGRykpOworCW91dGwoaWNlLT5wbV9zYXZlZF9yb3V0ZSwgSUNFTVQxNzI0KGljZSwgUk9VVEVfUExBWUJBQ0spKTsKKworCWlmIChpY2UtPmFjOTcpCisJCXNuZF9hYzk3X3Jlc3VtZShpY2UtPmFjOTcpOworCisJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDApOworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiSUNFMTcyNCIsCiAJLmlkX3RhYmxlID0gc25kX3Z0MTcyNF9pZHMsCiAJLnByb2JlID0gc25kX3Z0MTcyNF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3Z0MTcyNF9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gc25kX3Z0MTcyNF9zdXNwZW5kLAorCS5yZXN1bWUgPSBzbmRfdnQxNzI0X3Jlc3VtZSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX2ljZTE3MjRfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneV9oaWZpLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5X2hpZmkuYwppbmRleCAwNDNhOTM4Li5jNzU1MTVmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5X2hpZmkuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5X2hpZmkuYwpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAKIC8qCiAgKiBpbml0aWFsaXplIHRoZSBjaGlwCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHByb2RpZ3lfaGQyX2luaXQoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCitzdGF0aWMgdm9pZCBhazQzOTZfaW5pdChzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKIHsKIAlzdGF0aWMgdW5zaWduZWQgc2hvcnQgYWs0Mzk2X2luaXRzW10gPSB7CiAJCUFLNDM5Nl9DVFJMMSwJICAgMHg4NywgICAvKiBJMlMgTm9ybWFsIE1vZGUsIDI0IGJpdCAqLwpAQCAtMTA4Nyw5ICsxMDg3LDM3IEBACiAJCUFLNDM5Nl9SQ0hfQVRULAkgMHgwMCwKIAl9OwogCi0Jc3RydWN0IHByb2RpZ3lfaGlmaV9zcGVjICpzcGVjOwogCXVuc2lnbmVkIGludCBpOwogCisJLyogaW5pdGlhbGl6ZSBhazQzOTYgY29kZWMgKi8KKwkvKiByZXNldCBjb2RlYyAqLworCWFrNDM5Nl93cml0ZShpY2UsIEFLNDM5Nl9DVFJMMSwgMHg4Nik7CisJbXNsZWVwKDEwMCk7CisJYWs0Mzk2X3dyaXRlKGljZSwgQUs0Mzk2X0NUUkwxLCAweDg3KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFrNDM5Nl9pbml0cyk7IGkgKz0gMikKKwkJYWs0Mzk2X3dyaXRlKGljZSwgYWs0Mzk2X2luaXRzW2ldLCBhazQzOTZfaW5pdHNbaSsxXSk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgX19kZXZpbml0IHByb2RpZ3lfaGQyX3Jlc3VtZShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKK3sKKwkvKiBpbml0aWFsaXplIGFrNDM5NiBjb2RlYyBhbmQgcmVzdG9yZSBwcmV2aW91cyBtaXhlciB2b2x1bWVzICovCisJc3RydWN0IHByb2RpZ3lfaGlmaV9zcGVjICpzcGVjID0gaWNlLT5zcGVjOworCWludCBpOworCW11dGV4X2xvY2soJmljZS0+Z3Bpb19tdXRleCk7CisJYWs0Mzk2X2luaXQoaWNlKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlhazQzOTZfd3JpdGUoaWNlLCBBSzQzOTZfTENIX0FUVCArIGksIHNwZWMtPnZvbFtpXSAmIDB4ZmYpOworCW11dGV4X3VubG9jaygmaWNlLT5ncGlvX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwcm9kaWd5X2hkMl9pbml0KHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQoreworCXN0cnVjdCBwcm9kaWd5X2hpZmlfc3BlYyAqc3BlYzsKKwogCWljZS0+dnQxNzIwID0gMDsKIAlpY2UtPnZ0MTcyNCA9IDE7CiAKQEAgLTExMTIsMTQgKzExNDAsMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWNlLT5zcGVjID0gc3BlYzsKIAotCS8qIGluaXRpYWxpemUgYWs0Mzk2IGNvZGVjICovCi0JLyogcmVzZXQgY29kZWMgKi8KLQlhazQzOTZfd3JpdGUoaWNlLCBBSzQzOTZfQ1RSTDEsIDB4ODYpOwotCW1zbGVlcCgxMDApOwotCWFrNDM5Nl93cml0ZShpY2UsIEFLNDM5Nl9DVFJMMSwgMHg4Nyk7Ci0JCQkKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhazQzOTZfaW5pdHMpOyBpICs9IDIpCi0JCWFrNDM5Nl93cml0ZShpY2UsIGFrNDM5Nl9pbml0c1tpXSwgYWs0Mzk2X2luaXRzW2krMV0pOworI2lmZGVmIENPTkZJR19QTQorCWljZS0+cG1fcmVzdW1lID0gJnByb2RpZ3lfaGQyX3Jlc3VtZTsKKwlpY2UtPnBtX3N1c3BlbmRfZW5hYmxlZCA9IDE7CisjZW5kaWYKKworCWFrNDM5Nl9pbml0KGljZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9pby5jCmluZGV4IGMxZWI5MjMuLjA5YjJiMmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5faW8uYwpAQCAtMjE1LDE3ICsyMTUsOCBAQAogCiB2b2lkIG94eWdlbl93cml0ZV9pMmMoc3RydWN0IG94eWdlbiAqY2hpcCwgdTggZGV2aWNlLCB1OCBtYXAsIHU4IGRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCiAJLyogc2hvdWxkIG5vdCBuZWVkIG1vcmUgdGhhbiBhYm91dCAzMDAgdXMgKi8KLQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMSk7Ci0JZG8gewotCQlpZiAoIShveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl8yV0lSRV9CVVNfU1RBVFVTKQotCQkgICAgICAmIE9YWUdFTl8yV0lSRV9CVVNZKSkKLQkJCWJyZWFrOwotCQl1ZGVsYXkoMSk7Ci0JCWNvbmRfcmVzY2hlZCgpOwotCX0gd2hpbGUgKHRpbWVfYWZ0ZXJfZXEodGltZW91dCwgamlmZmllcykpOworCW1zbGVlcCgxKTsKIAogCW94eWdlbl93cml0ZTgoY2hpcCwgT1hZR0VOXzJXSVJFX01BUCwgbWFwKTsKIAlveHlnZW5fd3JpdGU4KGNoaXAsIE9YWUdFTl8yV0lSRV9EQVRBLCBkYXRhKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwppbmRleCAzZGE1YzAyLi43YmI4MjdjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCkBAIC0zMjk0LDE1ICszMjk0LDMzIEBACiAJY2hhciAqY2xvY2tfc291cmNlOwogCWludCB4OwogCi0JaWYgKGhkc3BfY2hlY2tfZm9yX2lvYm94IChoZHNwKSkgewotCQlzbmRfaXByaW50ZihidWZmZXIsICJObyBJL08gYm94IGNvbm5lY3RlZC5cblBsZWFzZSBjb25uZWN0IG9uZSBhbmQgdXBsb2FkIGZpcm13YXJlLlxuIik7CisJc3RhdHVzID0gaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzUmVnaXN0ZXIpOworCXN0YXR1czIgPSBoZHNwX3JlYWQoaGRzcCwgSERTUF9zdGF0dXMyUmVnaXN0ZXIpOworCisJc25kX2lwcmludGYoYnVmZmVyLCAiJXMgKENhcmQgIyVkKVxuIiwgaGRzcC0+Y2FyZF9uYW1lLAorCQkgICAgaGRzcC0+Y2FyZC0+bnVtYmVyICsgMSk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiQnVmZmVyczogY2FwdHVyZSAlcCBwbGF5YmFjayAlcFxuIiwKKwkJICAgIGhkc3AtPmNhcHR1cmVfYnVmZmVyLCBoZHNwLT5wbGF5YmFja19idWZmZXIpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklSUTogJWQgUmVnaXN0ZXJzIGJ1czogMHglbHggVk06IDB4JWx4XG4iLAorCQkgICAgaGRzcC0+aXJxLCBoZHNwLT5wb3J0LCAodW5zaWduZWQgbG9uZyloZHNwLT5pb2Jhc2UpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkNvbnRyb2wgcmVnaXN0ZXI6IDB4JXhcbiIsIGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkNvbnRyb2wyIHJlZ2lzdGVyOiAweCV4XG4iLAorCQkgICAgaGRzcC0+Y29udHJvbDJfcmVnaXN0ZXIpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlN0YXR1cyByZWdpc3RlcjogMHgleFxuIiwgc3RhdHVzKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJTdGF0dXMyIHJlZ2lzdGVyOiAweCV4XG4iLCBzdGF0dXMyKTsKKworCWlmIChoZHNwX2NoZWNrX2Zvcl9pb2JveChoZHNwKSkgeworCQlzbmRfaXByaW50ZihidWZmZXIsICJObyBJL08gYm94IGNvbm5lY3RlZC5cbiIKKwkJCSAgICAiUGxlYXNlIGNvbm5lY3Qgb25lIGFuZCB1cGxvYWQgZmlybXdhcmUuXG4iKTsKIAkJcmV0dXJuOwotICAgICAgICB9CisJfQogCiAJaWYgKGhkc3BfY2hlY2tfZm9yX2Zpcm13YXJlKGhkc3AsIDApKSB7CiAJCWlmIChoZHNwLT5zdGF0ZSAmIEhEU1BfRmlybXdhcmVDYWNoZWQpIHsKIAkJCWlmIChzbmRfaGRzcF9sb2FkX2Zpcm13YXJlX2Zyb21fY2FjaGUoaGRzcCkgIT0gMCkgewotCQkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkZpcm13YXJlIGxvYWRpbmcgZnJvbSBjYWNoZSBmYWlsZWQsIHBsZWFzZSB1cGxvYWQgbWFudWFsbHkuXG4iKTsKKwkJCQlzbmRfaXByaW50ZihidWZmZXIsICJGaXJtd2FyZSBsb2FkaW5nIGZyb20gIgorCQkJCQkgICAgImNhY2hlIGZhaWxlZCwgIgorCQkJCQkgICAgInBsZWFzZSB1cGxvYWQgbWFudWFsbHkuXG4iKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0gZWxzZSB7CkBAIC0zMzE5LDE4ICszMzM3LDYgQEAKIAkJfQogCX0KIAotCXN0YXR1cyA9IGhkc3BfcmVhZChoZHNwLCBIRFNQX3N0YXR1c1JlZ2lzdGVyKTsKLQlzdGF0dXMyID0gaGRzcF9yZWFkKGhkc3AsIEhEU1Bfc3RhdHVzMlJlZ2lzdGVyKTsKLQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVzIChDYXJkICMlZClcbiIsIGhkc3AtPmNhcmRfbmFtZSwgaGRzcC0+Y2FyZC0+bnVtYmVyICsgMSk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQnVmZmVyczogY2FwdHVyZSAlcCBwbGF5YmFjayAlcFxuIiwKLQkJICAgIGhkc3AtPmNhcHR1cmVfYnVmZmVyLCBoZHNwLT5wbGF5YmFja19idWZmZXIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklSUTogJWQgUmVnaXN0ZXJzIGJ1czogMHglbHggVk06IDB4JWx4XG4iLAotCQkgICAgaGRzcC0+aXJxLCBoZHNwLT5wb3J0LCAodW5zaWduZWQgbG9uZyloZHNwLT5pb2Jhc2UpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkNvbnRyb2wgcmVnaXN0ZXI6IDB4JXhcbiIsIGhkc3AtPmNvbnRyb2xfcmVnaXN0ZXIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkNvbnRyb2wyIHJlZ2lzdGVyOiAweCV4XG4iLCBoZHNwLT5jb250cm9sMl9yZWdpc3Rlcik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiU3RhdHVzIHJlZ2lzdGVyOiAweCV4XG4iLCBzdGF0dXMpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlN0YXR1czIgcmVnaXN0ZXI6IDB4JXhcbiIsIHN0YXR1czIpOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkZJRk8gc3RhdHVzOiAlZFxuIiwgaGRzcF9yZWFkKGhkc3AsIEhEU1BfZmlmb1N0YXR1cykgJiAweGZmKTsKIAlzbmRfaXByaW50ZihidWZmZXIsICJNSURJMSBPdXRwdXQgc3RhdHVzOiAweCV4XG4iLCBoZHNwX3JlYWQoaGRzcCwgSERTUF9taWRpU3RhdHVzT3V0MCkpOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1JREkxIElucHV0IHN0YXR1czogMHgleFxuIiwgaGRzcF9yZWFkKGhkc3AsIEhEU1BfbWlkaVN0YXR1c0luMCkpOwpAQCAtMzM1MSw3ICszMzU3LDYgQEAKIAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAKLQogCXN3aXRjaCAoaGRzcF9jbG9ja19zb3VyY2UoaGRzcCkpIHsKIAljYXNlIEhEU1BfQ0xPQ0tfU09VUkNFX0FVVE9TWU5DOgogCQljbG9ja19zb3VyY2UgPSAiQXV0b1N5bmMiOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCmluZGV4IDJmMDkyNTIuLjU1MTgzNzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYworKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKQEAgLTgzNCw3ICs4MzQsNyBAQAogCXN0YXR1cyA9IHNuZF95bWZwY2lfcmVhZHcoY2hpcCwgWURTWEdSX0lOVEZMQUcpOwogCWlmIChzdGF0dXMgJiAxKSB7CiAJCWlmIChjaGlwLT50aW1lcikKLQkJCXNuZF90aW1lcl9pbnRlcnJ1cHQoY2hpcC0+dGltZXIsIGNoaXAtPnRpbWVyLT5zdGlja3MpOworCQkJc25kX3RpbWVyX2ludGVycnVwdChjaGlwLT50aW1lciwgY2hpcC0+dGltZXJfdGlja3MpOwogCX0KIAlzbmRfeW1mcGNpX3dyaXRldyhjaGlwLCBZRFNYR1JfSU5URkxBRywgc3RhdHVzKTsKIApAQCAtMTg4NSw4ICsxODg1LDE4IEBACiAJdW5zaWduZWQgaW50IGNvdW50OwogCiAJY2hpcCA9IHNuZF90aW1lcl9jaGlwKHRpbWVyKTsKLQljb3VudCA9ICh0aW1lci0+c3RpY2tzIDw8IDEpIC0gMTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKKwlpZiAodGltZXItPnN0aWNrcyA+IDEpIHsKKwkJY2hpcC0+dGltZXJfdGlja3MgPSB0aW1lci0+c3RpY2tzOworCQljb3VudCA9IHRpbWVyLT5zdGlja3MgLSAxOworCX0gZWxzZSB7CisJCS8qCisJCSAqIERpdmlzb3IgMSBpcyBub3QgYWxsb3dlZDsgZmFrZSBpdCBieSB1c2luZyBkaXZpc29yIDIgYW5kCisJCSAqIGNvdW50aW5nIHR3byB0aWNrcyBmb3IgZWFjaCBpbnRlcnJ1cHQuCisJCSAqLworCQljaGlwLT50aW1lcl90aWNrcyA9IDI7CisJCWNvdW50ID0gMiAtIDE7CisJfQogCXNuZF95bWZwY2lfd3JpdGV3KGNoaXAsIFlEU1hHUl9USU1FUkNPVU5ULCBjb3VudCk7CiAJc25kX3ltZnBjaV93cml0ZWIoY2hpcCwgWURTWEdSX1RJTUVSQ1RSTCwgMHgwMyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKQEAgLTE5MDksMTQgKzE5MTksMTQgQEAKIAkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKm51bSwgdW5zaWduZWQgbG9uZyAqZGVuKQogewogCSpudW0gPSAxOwotCSpkZW4gPSA0ODAwMDsKKwkqZGVuID0gOTYwMDA7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3RpbWVyX2hhcmR3YXJlIHNuZF95bWZwY2lfdGltZXJfaHcgPSB7CiAJLmZsYWdzID0gU05EUlZfVElNRVJfSFdfQVVUTywKLQkucmVzb2x1dGlvbiA9IDIwODMzLCAvKiAxL2ZzID0gMjAuODMzMy4uLnVzICovCi0JLnRpY2tzID0gMHg4MDAwLAorCS5yZXNvbHV0aW9uID0gMTA0MTcsIC8qIDEgLyA5NiBrSHogPSAxMC40MTY2Ni4uLnVzICovCisJLnRpY2tzID0gMHgxMDAwMCwKIAkuc3RhcnQgPSBzbmRfeW1mcGNpX3RpbWVyX3N0YXJ0LAogCS5zdG9wID0gc25kX3ltZnBjaV90aW1lcl9zdG9wLAogCS5wcmVjaXNlX3Jlc29sdXRpb24gPSBzbmRfeW1mcGNpX3RpbWVyX3ByZWNpc2VfcmVzb2x1dGlvbiwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9LY29uZmlnIGIvc291bmQvc29jL0tjb25maWcKaW5kZXggZDNlNzg2YS4uYjE3NDliYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL0tjb25maWcKKysrIGIvc291bmQvc29jL0tjb25maWcKQEAgLTI5LDYgKzI5LDcgQEAKIHNvdXJjZSAic291bmQvc29jL2JsYWNrZmluL0tjb25maWciCiBzb3VyY2UgInNvdW5kL3NvYy9kYXZpbmNpL0tjb25maWciCiBzb3VyY2UgInNvdW5kL3NvYy9mc2wvS2NvbmZpZyIKK3NvdXJjZSAic291bmQvc29jL2lteC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2Mvb21hcC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2MvcHhhL0tjb25maWciCiBzb3VyY2UgInNvdW5kL3NvYy9zM2MyNHh4L0tjb25maWciCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvTWFrZWZpbGUgYi9zb3VuZC9zb2MvTWFrZWZpbGUKaW5kZXggNmYxZTI4ZC4uMGM1ZWFjMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLXNuZC1zb2MtY29yZS1vYmpzIDo9IHNvYy1jb3JlLm8gc29jLWRhcG0ubyBzb2MtamFjay5vCitzbmQtc29jLWNvcmUtb2JqcyA6PSBzb2MtY29yZS5vIHNvYy1kYXBtLm8gc29jLWphY2subyBzb2MtY2FjaGUubwogCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gc25kLXNvYy1jb3JlLm8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBjb2RlY3MvCkBAIC03LDYgKzcsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGJsYWNrZmluLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGRhdmluY2kvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gZnNsLworb2JqLSQoQ09ORklHX1NORF9TT0MpICAgKz0gaW14Lwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IG9tYXAvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gcHhhLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IHMzYzI0eHgvCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYyBiL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jCmluZGV4IDE3M2EyMzkuLjg4NWJhMDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jCkBAIC01NiwxMzMgKzU2LDMyIEBACiAKICNkZWZpbmUgTUNMS19SQVRFIDEyMDAwMDAwCiAKKy8qCisgKiBBcyBzaGlwcGVkIHRoZSBib2FyZCBkb2VzIG5vdCBoYXZlIGlucHV0cy4gIEhvd2V2ZXIsIGl0IGlzIHJlbGF0aXZlbHkKKyAqIHN0cmFpZ2h0Zm9yd2FyZCB0byBtb2RpZnkgdGhlIGJvYXJkIHRvIGhvb2sgdGhlbSB1cCBzbyBzdXBwb3J0IGlzIGxlZnQKKyAqIGluIHRoZSBkcml2ZXIuCisgKi8KKyN1bmRlZiBFTkFCTEVfTUlDX0lOUFVUCisKIHN0YXRpYyBzdHJ1Y3QgY2xrICptY2xrOwogCi1zdGF0aWMgaW50IGF0OTFzYW05ZzIwZWtfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODczMV9TWVNDTEssCi0JCU1DTEtfUkFURSwgU05EX1NPQ19DTE9DS19JTik7Ci0JaWYgKHJldCA8IDApIHsKLQkJY2xrX2Rpc2FibGUobWNsayk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0OTFzYW05ZzIwZWtfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQotCWRldl9kYmcocnRkLT5zb2NkZXYtPmRldiwgInNodXRkb3duIik7Ci19Ci0KIHN0YXRpYyBpbnQgYXQ5MXNhbTlnMjBla19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQlzdHJ1Y3QgYXRtZWxfc3NjX2luZm8gKnNzY19wID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzc2NfZGV2aWNlICpzc2MgPSBzc2NfcC0+c3NjOwogCWludCByZXQ7CiAKLQl1bnNpZ25lZCBpbnQgcmF0ZTsKLQlpbnQgY21yX2RpdiwgcGVyaW9kOwotCi0JaWYgKHNzYyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImF0OTFzYW05ZzIwZWtfaHdfcGFyYW1zOiBzc2MgaXMgTlVMTCFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKLQkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKKwkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8KIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8Ci0JCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIFRoZSBTU0MgY2xvY2sgZGl2aWRlcnMgZGVwZW5kIG9uIHRoZSBzYW1wbGUgcmF0ZS4gIFRoZSBDTVIuRElWCi0JICogZmllbGQgZGl2aWRlcyB0aGUgc3lzdGVtIG1hc3RlciBjbG9jayBNQ0sgdG8gZHJpdmUgdGhlIFNTQyBUSwotCSAqIHNpZ25hbCB3aGljaCBwcm92aWRlcyB0aGUgY29kZWMgQkNMSy4gIFRoZSBUQ01SLlBFUklPRCBhbmQKLQkgKiBSQ01SLlBFUklPRCBmaWVsZHMgZnVydGhlciBkaXZpZGUgdGhlIEJDTEsgc2lnbmFsIHRvIGRyaXZlCi0JICogdGhlIFNTQyBURiBhbmQgUkYgc2lnbmFscyB3aGljaCBwcm92aWRlIHRoZSBjb2RlYyBEQUNMUkMgYW5kCi0JICogQURDTFJDIGNsb2Nrcy4KLQkgKgotCSAqIFRoZSBkaXZpZGVycyB3ZXJlIGRldGVybWluZWQgdGhyb3VnaCB0cmlhbCBhbmQgZXJyb3IsIHdoZXJlIGEKLQkgKiBDTVIuRElWIHZhbHVlIGlzIGNob3NlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdGluZyBCQ0xLIHZhbHVlIGlzCi0JICogZGl2aXNpYmxlLCBvciBhbG1vc3QgZGl2aXNpYmxlLCBieSAoMiAqIHNhbXBsZSByYXRlKSwgYW5kIHRoZW4KLQkgKiB0aGUgVENNUi5QRVJJT0Qgb3IgUkNNUi5QRVJJT0QgaXMgQkNMSyAvICgyICogc2FtcGxlIHJhdGUpIC0gMS4KLQkgKi8KLQlyYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKLQotCXN3aXRjaCAocmF0ZSkgewotCWNhc2UgODAwMDoKLQkJY21yX2RpdiA9IDU1OwkvKiBCQ0xLID0gMTMzTUh6LygyKjU1KSA9IDEuMjA5TUh6ICovCi0JCXBlcmlvZCA9IDc0OwkvKiBMUkMgPSBCQ0xLLygyKig3NCsxKSkgfj0gODA2MCw2SHogKi8KLQkJYnJlYWs7Ci0JY2FzZSAxMTAyNToKLQkJY21yX2RpdiA9IDY3OwkvKiBCQ0xLID0gMTMzTUh6LygyKjYwKSA9IDEuMTA4TUh6ICovCi0JCXBlcmlvZCA9IDQ1OwkvKiBMUkMgPSBCQ0xLLygyKig0OSsxKSkgPSAxMTA4MywzSHogKi8KLQkJYnJlYWs7Ci0JY2FzZSAxNjAwMDoKLQkJY21yX2RpdiA9IDYzOwkvKiBCQ0xLID0gMTMzTUh6LygyKjYzKSA9IDEuMDU1TUh6ICovCi0JCXBlcmlvZCA9IDMyOwkvKiBMUkMgPSBCQ0xLLygyKigzMisxKSkgPSAxNTk5MywySHogKi8KLQkJYnJlYWs7Ci0JY2FzZSAyMjA1MDoKLQkJY21yX2RpdiA9IDUyOwkvKiBCQ0xLID0gMTMzTUh6LygyKjUyKSA9IDEuMjc4TUh6ICovCi0JCXBlcmlvZCA9IDI4OwkvKiBMUkMgPSBCQ0xLLygyKigyOCsxKSkgPSAyMjA0OUh6ICovCi0JCWJyZWFrOwotCWNhc2UgMzIwMDA6Ci0JCWNtcl9kaXYgPSA2NjsJLyogQkNMSyA9IDEzM01Iei8oMio2NikgPSAxLjAwN01IeiAqLwotCQlwZXJpb2QgPSAxNTsJLyogTFJDID0gQkNMSy8oMiooMTUrMSkpID0gMzE0ODYsNzQySHogKi8KLQkJYnJlYWs7Ci0JY2FzZSA0NDEwMDoKLQkJY21yX2RpdiA9IDI5OwkvKiBCQ0xLID0gMTMzTUh6LygyKjI5KSA9IDIuMjkzTUh6ICovCi0JCXBlcmlvZCA9IDI1OwkvKiBMUkMgPSBCQ0xLLygyKigyNSsxKSkgPSA0NDA5OEh6ICovCi0JCWJyZWFrOwotCWNhc2UgNDgwMDA6Ci0JCWNtcl9kaXYgPSAzMzsJLyogQkNMSyA9IDEzM01Iei8oMiozMykgPSAyLjAxNU1IeiAqLwotCQlwZXJpb2QgPSAyMDsJLyogTFJDID0gQkNMSy8oMiooMjArMSkpID0gNDc5NzksNzlIeiAqLwotCQlicmVhazsKLQljYXNlIDg4MjAwOgotCQljbXJfZGl2ID0gMjk7CS8qIEJDTEsgPSAxMzNNSHovKDIqMjkpID0gMi4yOTNNSHogKi8KLQkJcGVyaW9kID0gMTI7CS8qIExSQyA9IEJDTEsvKDIqKDEyKzEpKSA9IDg4MTk2SHogKi8KLQkJYnJlYWs7Ci0JY2FzZSA5NjAwMDoKLQkJY21yX2RpdiA9IDIzOwkvKiBCQ0xLID0gMTMzTUh6LygyKjIzKSA9IDIuODkxTUh6ICovCi0JCXBlcmlvZCA9IDE0OwkvKiBMUkMgPSBCQ0xLLygyKigxNCsxKSkgPSA5NjM3Nkh6ICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInVuc3VwcG9ydGVkIHJhdGUgJWQiCi0JCQkJIiBvbiBhdDkxc2FtOWcyMGVrIGJvYXJkXG4iLCByYXRlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogc2V0IHRoZSBNQ0sgZGl2aWRlciBmb3IgQkNMSyAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY3B1X2RhaSwgQVRNRUxfU1NDX0NNUl9ESVYsIGNtcl9kaXYpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJLyogc2V0IHRoZSBCQ0xLIGRpdmlkZXIgZm9yIERBQ0xSQyAqLwotCQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksCi0JCQkJCQlBVE1FTF9TU0NfVENNUl9QRVJJT0QsIHBlcmlvZCk7Ci0JfSBlbHNlIHsKLQkJLyogc2V0IHRoZSBCQ0xLIGRpdmlkZXIgZm9yIEFEQ0xSQyAqLwotCQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksCi0JCQkJCQlBVE1FTF9TU0NfUkNNUl9QRVJJT0QsIHBlcmlvZCk7Ci0JfQorCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xOTAsOSArODksNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGF0OTFzYW05ZzIwZWtfb3BzID0gewotCS5zdGFydHVwID0gYXQ5MXNhbTlnMjBla19zdGFydHVwLAogCS5od19wYXJhbXMgPSBhdDkxc2FtOWcyMGVrX2h3X3BhcmFtcywKLQkuc2h1dGRvd24gPSBhdDkxc2FtOWcyMGVrX3NodXRkb3duLAogfTsKIAogc3RhdGljIGludCBhdDkxc2FtOWcyMGVrX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCkBAIC0yNDEsMTAgKzEzOCwyMCBAQAogICovCiBzdGF0aWMgaW50IGF0OTFzYW05ZzIwZWtfd204NzMxX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogeworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gJmNvZGVjLT5kYWlbMF07CisJaW50IHJldDsKKwogCXByaW50ayhLRVJOX0RFQlVHCiAJCQkiYXQ5MXNhbTlnMjBla193bTg3MzEgIgogCQkJIjogYXQ5MXNhbTlnMjBla193bTg3MzFfaW5pdCgpIGNhbGxlZFxuIik7CiAKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004NzMxX1NZU0NMSywKKwkJTUNMS19SQVRFLCBTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXQgV004NzMxIFNZU0NMSzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCiAJLyogQWRkIHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBhdDkxc2FtOWcyMGVrX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUoYXQ5MXNhbTlnMjBla19kYXBtX3dpZGdldHMpKTsKQEAgLTI1NSw4ICsxNjIsMTMgQEAKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUkxJTkVJTiIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMTElORUlOIik7CiAKLQkvKiBhbHdheXMgY29ubmVjdGVkICovCisjaWZkZWYgRU5BQkxFX01JQ19JTlBVVAogCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSW50IE1pYyIpOworI2Vsc2UKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSW50IE1pYyIpOworI2VuZGlmCisKKwkvKiBhbHdheXMgY29ubmVjdGVkICovCiAJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFeHQgU3BrIik7CiAKIAlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CkBAIC0yODEsMzggKzE5Myw2IEBACiAJLnNldF9iaWFzX2xldmVsID0gYXQ5MXNhbTlnMjBla19zZXRfYmlhc19sZXZlbCwKIH07CiAKLS8qCi0gKiBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBib2RnZSB0byBhdm9pZCBjcm9zcy10cmVlIG1lcmdlIGlzc3Vlcy4KLSAqIE5ldyBkcml2ZXJzIHNob3VsZCByZWdpc3RlciB0aGUgd204NzMxIEkyQyBkZXZpY2UgaW4gdGhlIG1hY2hpbmUKLSAqIHNldHVwIGNvZGUgKHVuZGVyIGFyY2gvYXJtIGZvciBBUk0gc3lzdGVtcykuCi0gKi8KLXN0YXRpYyBpbnQgd204NzMxX2kyY19yZWdpc3Rlcih2b2lkKQotewotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCi0JbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7Ci0JaW5mby5hZGRyID0gMHgxYjsKLQlzdHJsY3B5KGluZm8udHlwZSwgIndtODczMSIsIEkyQ19OQU1FX1NJWkUpOwotCi0JYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcigwKTsKLQlpZiAoIWFkYXB0ZXIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBnZXQgaTJjIGFkYXB0ZXIgMFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKLQlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7Ci0JaWYgKCFjbGllbnQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhZGQgaTJjIGRldmljZSBhdCAweCV4XG4iLAotCQkJKHVuc2lnbmVkIGludClpbmZvLmFkZHIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBhdDkxc2FtOWcyMGVrX3NuZF9kZXZkYXRhID0gewogCS5jYXJkID0gJnNuZF9zb2NfYXQ5MXNhbTlnMjBlaywKIAkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd204NzMxLApAQCAtMzY3LDEwICsyNDcsNiBAQAogCX0KIAlzc2NfcC0+c3NjID0gc3NjOwogCi0JcmV0ID0gd204NzMxX2kyY19yZWdpc3RlcigpOwotCWlmIChyZXQgIT0gMCkKLQkJZ290byBlcnJfc3NjOwotCiAJYXQ5MXNhbTlnMjBla19zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CiAJaWYgKCFhdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBQbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvcHNjLWFjOTcuYyBiL3NvdW5kL3NvYy9hdTF4L3BzYy1hYzk3LmMKaW5kZXggNDc5ZDdiZC4uYTUyMWFhOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvcHNjLWFjOTcuYworKysgYi9zb3VuZC9zb2MvYXUxeC9wc2MtYWM5Ny5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIEF1MTJ4MC9BdTE1NTAgUFNDIEFMU0EgQVNvQyBhdWRpbyBzdXBwb3J0LgogICoKLSAqIChjKSAyMDA3LTIwMDggTVNDIFZlcnRyaWVic2dlcy5tLmIuSC4sCi0gKglNYW51ZWwgTGF1c3MgPG1hbm9Acm9hcmluZWxrLmhvbWVsaW51eC5uZXQ+CisgKiAoYykgMjAwNy0yMDA5IE1TQyBWZXJ0cmllYnNnZXMubS5iLkguLAorICoJTWFudWVsIExhdXNzIDxtYW51ZWwubGF1c3NAZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMjksNiArMzAsOSBAQAogCiAjaW5jbHVkZSAicHNjLmgiCiAKKy8qIGhvdyBvZnRlbiB0byByZXRyeSBmYWlsZWQgY29kZWMgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzICovCisjZGVmaW5lIEFDOTdfUldfUkVUUklFUwk1CisKICNkZWZpbmUgQUM5N19ESVIJXAogCShTTkRfU09DX0RBSURJUl9QTEFZQkFDSyB8IFNORF9TT0NfREFJRElSX0NBUFRVUkUpCiAKQEAgLTQ1LDYgKzQ5LDkgQEAKICNkZWZpbmUgQUM5N1BDUl9DTFJGSUZPKHN0eXBlKQlcCiAJKChzdHlwZSkgPT0gUENNX1RYID8gUFNDX0FDOTdQQ1JfVEMgOiBQU0NfQUM5N1BDUl9SQykKIAorI2RlZmluZSBBQzk3U1RBVF9CVVNZKHN0eXBlKQlcCisJKChzdHlwZSkgPT0gUENNX1RYID8gUFNDX0FDOTdTVEFUX1RCIDogUFNDX0FDOTdTVEFUX1JCKQorCiAvKiBpbnN0YW5jZSBkYXRhLiBUaGVyZSBjYW4gYmUgb25seSBvbmUsIE1hY0xlb2QhISEhICovCiBzdGF0aWMgc3RydWN0IGF1MXhwc2NfYXVkaW9fZGF0YSAqYXUxeHBzY19hYzk3X3dvcmtkYXRhOwogCkBAIC01NCwyNCArNjEsMzMgQEAKIHsKIAkvKiBGSVhNRSAqLwogCXN0cnVjdCBhdTF4cHNjX2F1ZGlvX2RhdGEgKnBzY2RhdGEgPSBhdTF4cHNjX2FjOTdfd29ya2RhdGE7Ci0JdW5zaWduZWQgc2hvcnQgZGF0YSwgdG1vOwotCi0JYXVfd3JpdGVsKFBTQ19BQzk3Q0RDX1JEIHwgUFNDX0FDOTdDRENfSU5EWChyZWcpLCBBQzk3X0NEQyhwc2NkYXRhKSk7Ci0JYXVfc3luYygpOwotCi0JdG1vID0gMTAwMDsKLQl3aGlsZSAoKCEoYXVfcmVhZGwoQUM5N19FVk5UKHBzY2RhdGEpKSAmIFBTQ19BQzk3RVZOVF9DRCkpICYmIC0tdG1vKQotCQl1ZGVsYXkoMik7Ci0KLQlpZiAoIXRtbykKLQkJZGF0YSA9IDB4ZmZmZjsKLQllbHNlCi0JCWRhdGEgPSBhdV9yZWFkbChBQzk3X0NEQyhwc2NkYXRhKSkgJiAweGZmZmY7CisJdW5zaWduZWQgc2hvcnQgZGF0YSwgcmV0cnksIHRtbzsKIAogCWF1X3dyaXRlbChQU0NfQUM5N0VWTlRfQ0QsIEFDOTdfRVZOVChwc2NkYXRhKSk7CiAJYXVfc3luYygpOwogCi0JcmV0dXJuIGRhdGE7CisJcmV0cnkgPSBBQzk3X1JXX1JFVFJJRVM7CisJZG8geworCQltdXRleF9sb2NrKCZwc2NkYXRhLT5sb2NrKTsKKworCQlhdV93cml0ZWwoUFNDX0FDOTdDRENfUkQgfCBQU0NfQUM5N0NEQ19JTkRYKHJlZyksCisJCQkgIEFDOTdfQ0RDKHBzY2RhdGEpKTsKKwkJYXVfc3luYygpOworCisJCXRtbyA9IDIwMDA7CisJCXdoaWxlICgoIShhdV9yZWFkbChBQzk3X0VWTlQocHNjZGF0YSkpICYgUFNDX0FDOTdFVk5UX0NEKSkKKwkJCSYmIC0tdG1vKQorCQkJdWRlbGF5KDIpOworCisJCWRhdGEgPSBhdV9yZWFkbChBQzk3X0NEQyhwc2NkYXRhKSkgJiAweGZmZmY7CisKKwkJYXVfd3JpdGVsKFBTQ19BQzk3RVZOVF9DRCwgQUM5N19FVk5UKHBzY2RhdGEpKTsKKwkJYXVfc3luYygpOworCisJCW11dGV4X3VubG9jaygmcHNjZGF0YS0+bG9jayk7CisJfSB3aGlsZSAoLS1yZXRyeSAmJiAhdG1vKTsKKworCXJldHVybiByZXRyeSA/IGRhdGEgOiAweGZmZmY7CiB9CiAKIC8qIEFDOTcgY29udHJvbGxlciB3cml0ZXMgdG8gY29kZWMgcmVnaXN0ZXIgKi8KQEAgLTgwLDE2ICs5NiwyOSBAQAogewogCS8qIEZJWE1FICovCiAJc3RydWN0IGF1MXhwc2NfYXVkaW9fZGF0YSAqcHNjZGF0YSA9IGF1MXhwc2NfYWM5N193b3JrZGF0YTsKLQl1bnNpZ25lZCBpbnQgdG1vOwotCi0JYXVfd3JpdGVsKFBTQ19BQzk3Q0RDX0lORFgocmVnKSB8ICh2YWwgJiAweGZmZmYpLCBBQzk3X0NEQyhwc2NkYXRhKSk7Ci0JYXVfc3luYygpOwotCXRtbyA9IDEwMDA7Ci0Jd2hpbGUgKCghKGF1X3JlYWRsKEFDOTdfRVZOVChwc2NkYXRhKSkgJiBQU0NfQUM5N0VWTlRfQ0QpKSAmJiAtLXRtbykKLQkJYXVfc3luYygpOworCXVuc2lnbmVkIGludCB0bW8sIHJldHJ5OwogCiAJYXVfd3JpdGVsKFBTQ19BQzk3RVZOVF9DRCwgQUM5N19FVk5UKHBzY2RhdGEpKTsKIAlhdV9zeW5jKCk7CisKKwlyZXRyeSA9IEFDOTdfUldfUkVUUklFUzsKKwlkbyB7CisJCW11dGV4X2xvY2soJnBzY2RhdGEtPmxvY2spOworCisJCWF1X3dyaXRlbChQU0NfQUM5N0NEQ19JTkRYKHJlZykgfCAodmFsICYgMHhmZmZmKSwKKwkJCSAgQUM5N19DREMocHNjZGF0YSkpOworCQlhdV9zeW5jKCk7CisKKwkJdG1vID0gMjAwMDsKKwkJd2hpbGUgKCghKGF1X3JlYWRsKEFDOTdfRVZOVChwc2NkYXRhKSkgJiBQU0NfQUM5N0VWTlRfQ0QpKQorCQkgICAgICAgJiYgLS10bW8pCisJCQl1ZGVsYXkoMik7CisKKwkJYXVfd3JpdGVsKFBTQ19BQzk3RVZOVF9DRCwgQUM5N19FVk5UKHBzY2RhdGEpKTsKKwkJYXVfc3luYygpOworCisJCW11dGV4X3VubG9jaygmcHNjZGF0YS0+bG9jayk7CisJfSB3aGlsZSAoLS1yZXRyeSAmJiAhdG1vKTsKIH0KIAogLyogQUM5NyBjb250cm9sbGVyIGFzc2VydHMgYSB3YXJtIHJlc2V0ICovCkBAIC0xMjksOSArMTU4LDkgQEAKIAlhdV9zeW5jKCk7CiAKIAkvKiB3YWl0IGZvciBQU0MgdG8gaW5kaWNhdGUgaXQncyByZWFkeSAqLwotCWkgPSAxMDAwMDA7CisJaSA9IDEwMDA7CiAJd2hpbGUgKCEoKGF1X3JlYWRsKEFDOTdfU1RBVChwc2NkYXRhKSkgJiBQU0NfQUM5N1NUQVRfU1IpKSAmJiAoLS1pKSkKLQkJYXVfc3luYygpOworCQltc2xlZXAoMSk7CiAKIAlpZiAoaSA9PSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXUxeHBzYy1hYzk3OiBQU0Mgbm90IHJlYWR5IVxuIik7CkBAIC0xNDMsOSArMTcyLDkgQEAKIAlhdV9zeW5jKCk7CiAKIAkvKiB3YWl0IGZvciBBQzk3IGNvcmUgdG8gYmVjb21lIHJlYWR5ICovCi0JaSA9IDEwMDAwMDsKKwlpID0gMTAwMDsKIAl3aGlsZSAoISgoYXVfcmVhZGwoQUM5N19TVEFUKHBzY2RhdGEpKSAmIFBTQ19BQzk3U1RBVF9EUikpICYmICgtLWkpKQotCQlhdV9zeW5jKCk7CisJCW1zbGVlcCgxKTsKIAlpZiAoaSA9PSAwKQogCQlwcmludGsoS0VSTl9FUlIgImF1MXhwc2MtYWM5NzogQUM5NyBjdHJsIG5vdCByZWFkeVxuIik7CiB9CkBAIC0xNjUsMTIgKzE5NCwxMiBAQAogewogCS8qIEZJWE1FICovCiAJc3RydWN0IGF1MXhwc2NfYXVkaW9fZGF0YSAqcHNjZGF0YSA9IGF1MXhwc2NfYWM5N193b3JrZGF0YTsKLQl1bnNpZ25lZCBsb25nIHIsIHN0YXQ7CisJdW5zaWduZWQgbG9uZyByLCBybywgc3RhdDsKIAlpbnQgY2hhbnMsIHN0eXBlID0gU1VCU1RSRUFNX1RZUEUoc3Vic3RyZWFtKTsKIAogCWNoYW5zID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CiAKLQlyID0gYXVfcmVhZGwoQUM5N19DRkcocHNjZGF0YSkpOworCXIgPSBybyA9IGF1X3JlYWRsKEFDOTdfQ0ZHKHBzY2RhdGEpKTsKIAlzdGF0ID0gYXVfcmVhZGwoQUM5N19TVEFUKHBzY2RhdGEpKTsKIAogCS8qIGFscmVhZHkgYWN0aXZlPyAqLwpAQCAtMTgwLDkgKzIwOSw2IEBACiAJCSAgICAocHNjZGF0YS0+cmF0ZSAhPSBwYXJhbXNfcmF0ZShwYXJhbXMpKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZSB7Ci0JCS8qIGRpc2FibGUgQUM5NyBkZXZpY2UgY29udHJvbGxlciBmaXJzdCAqLwotCQlhdV93cml0ZWwociAmIH5QU0NfQUM5N0NGR19ERV9FTkFCTEUsIEFDOTdfQ0ZHKHBzY2RhdGEpKTsKLQkJYXVfc3luYygpOwogCiAJCS8qIHNldCBzYW1wbGUgYml0ZGVwdGg6IFJFR1syNDoyMV09KEJJVFMtMikvMiAqLwogCQlyICY9IH5QU0NfQUM5N0NGR19MRU5fTUFTSzsKQEAgLTE5OSwxNCArMjI1LDQwIEBACiAJCQlyIHw9IFBTQ19BQzk3Q0ZHX1JYU0xPVF9FTkEoNCk7CiAJCX0KIAotCQkvKiBmaW5hbGx5IGVuYWJsZSB0aGUgQUM5NyBjb250cm9sbGVyIGFnYWluICovCisJCS8qIGRvIHdlIG5lZWQgdG8gcG9rZSB0aGUgaGFyZHdhcmU/ICovCisJCWlmICghKHIgXiBybykpCisJCQlnb3RvIG91dDsKKworCQkvKiBhYzk3IGVuZ2luZSBpcyBhYm91dCB0byBiZSBkaXNhYmxlZCAqLworCQltdXRleF9sb2NrKCZwc2NkYXRhLT5sb2NrKTsKKworCQkvKiBkaXNhYmxlIEFDOTcgZGV2aWNlIGNvbnRyb2xsZXIgZmlyc3QuLi4gKi8KKwkJYXVfd3JpdGVsKHIgJiB+UFNDX0FDOTdDRkdfREVfRU5BQkxFLCBBQzk3X0NGRyhwc2NkYXRhKSk7CisJCWF1X3N5bmMoKTsKKworCQkvKiAuLi53YWl0IGZvciBpdC4uLiAqLworCQl3aGlsZSAoYXVfcmVhZGwoQUM5N19TVEFUKHBzY2RhdGEpKSAmIFBTQ19BQzk3U1RBVF9EUikKKwkJCWFzbSB2b2xhdGlsZSAoIm5vcCIpOworCisJCS8qIC4uLndyaXRlIGNvbmZpZy4uLiAqLworCQlhdV93cml0ZWwociwgQUM5N19DRkcocHNjZGF0YSkpOworCQlhdV9zeW5jKCk7CisKKwkJLyogLi4uZW5hYmxlIHRoZSBBQzk3IGNvbnRyb2xsZXIgYWdhaW4uLi4gKi8KIAkJYXVfd3JpdGVsKHIgfCBQU0NfQUM5N0NGR19ERV9FTkFCTEUsIEFDOTdfQ0ZHKHBzY2RhdGEpKTsKIAkJYXVfc3luYygpOwogCisJCS8qIC4uLmFuZCB3YWl0IGZvciByZWFkeSBiaXQgKi8KKwkJd2hpbGUgKCEoYXVfcmVhZGwoQUM5N19TVEFUKHBzY2RhdGEpKSAmIFBTQ19BQzk3U1RBVF9EUikpCisJCQlhc20gdm9sYXRpbGUgKCJub3AiKTsKKworCQltdXRleF91bmxvY2soJnBzY2RhdGEtPmxvY2spOworCiAJCXBzY2RhdGEtPmNmZyA9IHI7CiAJCXBzY2RhdGEtPnJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwogCX0KIAorb3V0OgogCXJldHVybiAwOwogfQogCkBAIC0yMjIsNiArMjc0LDggQEAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJCWF1X3dyaXRlbChBQzk3UENSX0NMUkZJRk8oc3R5cGUpLCBBQzk3X1BDUihwc2NkYXRhKSk7CisJCWF1X3N5bmMoKTsKIAkJYXVfd3JpdGVsKEFDOTdQQ1JfU1RBUlQoc3R5cGUpLCBBQzk3X1BDUihwc2NkYXRhKSk7CiAJCWF1X3N5bmMoKTsKIAkJYnJlYWs7CkBAIC0yMjksNiArMjgzLDEzIEBACiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgogCQlhdV93cml0ZWwoQUM5N1BDUl9TVE9QKHN0eXBlKSwgQUM5N19QQ1IocHNjZGF0YSkpOwogCQlhdV9zeW5jKCk7CisKKwkJd2hpbGUgKGF1X3JlYWRsKEFDOTdfU1RBVChwc2NkYXRhKSkgJiBBQzk3U1RBVF9CVVNZKHN0eXBlKSkKKwkJCWFzbSB2b2xhdGlsZSAoIm5vcCIpOworCisJCWF1X3dyaXRlbChBQzk3UENSX0NMUkZJRk8oc3R5cGUpLCBBQzk3X1BDUihwc2NkYXRhKSk7CisJCWF1X3N5bmMoKTsKKwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMjUxLDYgKzMxMiw4IEBACiAJaWYgKCFhdTF4cHNjX2FjOTdfd29ya2RhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCisJbXV0ZXhfaW5pdCgmYXUxeHBzY19hYzk3X3dvcmtkYXRhLT5sb2NrKTsKKwogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcikgewogCQlyZXQgPSAtRU5PREVWOwpAQCAtMjY5LDkgKzMzMiw5IEBACiAJCWdvdG8gb3V0MTsKIAogCS8qIGNvbmZpZ3VyYXRpb246IG1heCBkbWEgdHJpZ2dlciB0aHJlc2hvbGQsIGVuYWJsZSBhYzk3ICovCi0JIGF1MXhwc2NfYWM5N193b3JrZGF0YS0+Y2ZnID0gUFNDX0FDOTdDRkdfUlRfRklGTzggfAotCQkJCSAgICAgIFBTQ19BQzk3Q0ZHX1RUX0ZJRk84IHwKLQkJCQkgICAgICBQU0NfQUM5N0NGR19ERV9FTkFCTEU7CisJYXUxeHBzY19hYzk3X3dvcmtkYXRhLT5jZmcgPSBQU0NfQUM5N0NGR19SVF9GSUZPOCB8CisJCQkJICAgICBQU0NfQUM5N0NGR19UVF9GSUZPOCB8CisJCQkJICAgICBQU0NfQUM5N0NGR19ERV9FTkFCTEU7CiAKIAkvKiBwcmVzZXJ2ZSBQU0MgY2xvY2sgc291cmNlIHNldCB1cCBieSBwbGF0Zm9ybSAoZGV2LnBsYXRmb3JtX2RhdGEKIAkgKiBpcyBhbHJlYWR5IG9jY3VwaWVkIGJ5IHNvYyBsYXllcikKQEAgLTM4Niw0ICs0NDksNCBAQAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkF1MTJ4MC9BdTE1NTAgUFNDIEFDOTcgQUxTQSBBU29DIGF1ZGlvIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiTWFudWVsIExhdXNzIDxtYW5vQHJvYXJpbmVsay5ob21lbGludXgubmV0PiIpOworTU9EVUxFX0FVVEhPUigiTWFudWVsIExhdXNzIDxtYW51ZWwubGF1c3NAZ21haWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvcHNjLmggYi9zb3VuZC9zb2MvYXUxeC9wc2MuaAppbmRleCA4ZmRiMWEwNC4uM2Y0NzRlOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvcHNjLmgKKysrIGIvc291bmQvc29jL2F1MXgvcHNjLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogCXVuc2lnbmVkIGxvbmcgcG1bMl07CiAJc3RydWN0IHJlc291cmNlICppb2FyZWE7CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCiAjZGVmaW5lIFBDTV9UWAkwCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vS2NvbmZpZyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnCmluZGV4IDgxMTU5NmYuLmFjOTI3ZmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnCkBAIC03LDYgKzcsMTUgQEAKIAkgIG1vZGUgKHN1cHBvcnRzIHNpbmdsZSBzdGVyZW8gSW4vT3V0KS4KIAkgIFlvdSB3aWxsIGFsc28gbmVlZCB0byBzZWxlY3QgdGhlIGF1ZGlvIGludGVyZmFjZXMgdG8gc3VwcG9ydCBiZWxvdy4KIAorY29uZmlnIFNORF9CRjVYWF9URE0KKwl0cmlzdGF0ZSAiU29DIEkyUyhURE0gbW9kZSkgQXVkaW8gZm9yIHRoZSBBREkgQkY1eHggY2hpcCIKKwlkZXBlbmRzIG9uIChCTEFDS0ZJTiAmJiBTTkRfU09DKQorCWhlbHAKKwkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0bworCSAgdGhlIEJsYWNrZmluIFNQT1JUIChzeW5jaHJvbm91cyBzZXJpYWwgcG9ydHMpIGludGVyZmFjZSBpbiBURE0KKwkgIG1vZGUuCisJICBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gc2VsZWN0IHRoZSBhdWRpbyBpbnRlcmZhY2VzIHRvIHN1cHBvcnQgYmVsb3cuCisKIGNvbmZpZyBTTkRfQkY1WFhfU09DX1NTTTI2MDIKIAl0cmlzdGF0ZSAiU29DIFNTTTI2MDIgQXVkaW8gc3VwcG9ydCBmb3IgQkY1MnggZXpraXQiCiAJZGVwZW5kcyBvbiBTTkRfQkY1WFhfSTJTCkBAIC02OSwxMiArNzgsMjQgQEAKIAl0cmlzdGF0ZQogCXNlbGVjdCBTTkRfQkY1WFhfU09DX1NQT1JUCiAKK2NvbmZpZyBTTkRfQkY1WFhfU09DX1RETQorCXRyaXN0YXRlCisJc2VsZWN0IFNORF9CRjVYWF9TT0NfU1BPUlQKKwogY29uZmlnIFNORF9CRjVYWF9TT0NfQUM5NwogCXRyaXN0YXRlCiAJc2VsZWN0IEFDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX0JGNVhYX1NPQ19TUE9SVAogCitjb25maWcgU05EX0JGNVhYX1NPQ19BRDE4MzYKKwl0cmlzdGF0ZSAiU29DIEFEMTgzNiBBdWRpbyBzdXBwb3J0IGZvciBCRjV4eCIKKwlkZXBlbmRzIG9uIFNORF9CRjVYWF9URE0KKwlzZWxlY3QgU05EX0JGNVhYX1NPQ19URE0KKwlzZWxlY3QgU05EX1NPQ19BRDE4MzYKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIEJGNXh4IFNUQU1QL0VaS0lULgorCiBjb25maWcgU05EX0JGNVhYX1NPQ19BRDE5ODAKIAl0cmlzdGF0ZSAiU29DIEFEMTk4MC8xIEF1ZGlvIHN1cHBvcnQgZm9yIEJGNXh4IgogCWRlcGVuZHMgb24gU05EX0JGNVhYX0FDOTcKQEAgLTgzLDkgKzEwNCwxNyBAQAogCWhlbHAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gQkY1eHggU1RBTVAvRVpLSVQuCiAKK2NvbmZpZyBTTkRfQkY1WFhfU09DX0FEMTkzOAorICAgICAgICB0cmlzdGF0ZSAiU29DIEFEMTkzOCBBdWRpbyBzdXBwb3J0IGZvciBCbGFja2ZpbiIKKyAgICAgICAgZGVwZW5kcyBvbiBTTkRfQkY1WFhfVERNCisgICAgICAgIHNlbGVjdCBTTkRfQkY1WFhfU09DX1RETQorICAgICAgICBzZWxlY3QgU05EX1NPQ19BRDE5MzgKKyAgICAgICAgaGVscAorICAgICAgICAgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBBRDE5MzggY29kZWMgb24gQmxhY2tmaW4uCisKIGNvbmZpZyBTTkRfQkY1WFhfU1BPUlRfTlVNCiAJaW50ICJTZXQgYSBTUE9SVCBmb3IgU291bmQgY2hpcCIKLQlkZXBlbmRzIG9uIChTTkRfQkY1WFhfSTJTIHx8IFNORF9CRjVYWF9BQzk3KQorCWRlcGVuZHMgb24gKFNORF9CRjVYWF9JMlMgfHwgU05EX0JGNVhYX0FDOTcgfHwgU05EX0JGNVhYX1RETSkKIAlyYW5nZSAwIDMgaWYgQkY1NHgKIAlyYW5nZSAwIDEgaWYgIUJGNTR4CiAJZGVmYXVsdCAwCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vTWFrZWZpbGUgYi9zb3VuZC9zb2MvYmxhY2tmaW4vTWFrZWZpbGUKaW5kZXggOTdiYjM3YS4uODdlMzA0MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9NYWtlZmlsZQpAQCAtMSwyMSArMSwyOSBAQAogIyBCbGFja2ZpbiBQbGF0Zm9ybSBTdXBwb3J0CiBzbmQtYmY1eHgtYWM5Ny1vYmpzIDo9IGJmNXh4LWFjOTctcGNtLm8KIHNuZC1iZjV4eC1pMnMtb2JqcyA6PSBiZjV4eC1pMnMtcGNtLm8KK3NuZC1iZjV4eC10ZG0tb2JqcyA6PSBiZjV4eC10ZG0tcGNtLm8KIHNuZC1zb2MtYmY1eHgtc3BvcnQtb2JqcyA6PSBiZjV4eC1zcG9ydC5vCiBzbmQtc29jLWJmNXh4LWFjOTctb2JqcyA6PSBiZjV4eC1hYzk3Lm8KIHNuZC1zb2MtYmY1eHgtaTJzLW9ianMgOj0gYmY1eHgtaTJzLm8KK3NuZC1zb2MtYmY1eHgtdGRtLW9ianMgOj0gYmY1eHgtdGRtLm8KIAogb2JqLSQoQ09ORklHX1NORF9CRjVYWF9BQzk3KSArPSBzbmQtYmY1eHgtYWM5Ny5vCiBvYmotJChDT05GSUdfU05EX0JGNVhYX0kyUykgKz0gc25kLWJmNXh4LWkycy5vCitvYmotJChDT05GSUdfU05EX0JGNVhYX1RETSkgKz0gc25kLWJmNXh4LXRkbS5vCiBvYmotJChDT05GSUdfU05EX0JGNVhYX1NPQ19TUE9SVCkgKz0gc25kLXNvYy1iZjV4eC1zcG9ydC5vCiBvYmotJChDT05GSUdfU05EX0JGNVhYX1NPQ19BQzk3KSArPSBzbmQtc29jLWJmNXh4LWFjOTcubwogb2JqLSQoQ09ORklHX1NORF9CRjVYWF9TT0NfSTJTKSArPSBzbmQtc29jLWJmNXh4LWkycy5vCitvYmotJChDT05GSUdfU05EX0JGNVhYX1NPQ19URE0pICs9IHNuZC1zb2MtYmY1eHgtdGRtLm8KIAogIyBCbGFja2ZpbiBNYWNoaW5lIFN1cHBvcnQKK3NuZC1hZDE4MzYtb2JqcyA6PSBiZjV4eC1hZDE4MzYubwogc25kLWFkMTk4MC1vYmpzIDo9IGJmNXh4LWFkMTk4MC5vCiBzbmQtc3NtMjYwMi1vYmpzIDo9IGJmNXh4LXNzbTI2MDIubwogc25kLWFkNzMzMTEtb2JqcyA6PSBiZjV4eC1hZDczMzExLm8KK3NuZC1hZDE5Mzgtb2JqcyA6PSBiZjV4eC1hZDE5MzgubwogCitvYmotJChDT05GSUdfU05EX0JGNVhYX1NPQ19BRDE4MzYpICs9IHNuZC1hZDE4MzYubwogb2JqLSQoQ09ORklHX1NORF9CRjVYWF9TT0NfQUQxOTgwKSArPSBzbmQtYWQxOTgwLm8KIG9iai0kKENPTkZJR19TTkRfQkY1WFhfU09DX1NTTTI2MDIpICs9IHNuZC1zc20yNjAyLm8KIG9iai0kKENPTkZJR19TTkRfQkY1WFhfU09DX0FENzMzMTEpICs9IHNuZC1hZDczMzExLm8KK29iai0kKENPTkZJR19TTkRfQkY1WFhfU09DX0FEMTkzOCkgKz0gc25kLWFkMTkzOC5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYwppbmRleCBiMWVkNDIzLi4yNzU4YjkwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMKQEAgLTI3NywyOCArMjc3LDI0IEBACiAJaWYgKCFkYWktPmFjdGl2ZSkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBzcG9ydF9zZXRfbXVsdGljaGFubmVsKHNwb3J0X2hhbmRsZSwgMTYsIDB4MUYsIDEpOworCXJldCA9IHNwb3J0X3NldF9tdWx0aWNoYW5uZWwoc3BvcnQsIDE2LCAweDFGLCAxKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiU1BPUlQgaXMgYnVzeSFcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXJldCA9IHNwb3J0X2NvbmZpZ19yeChzcG9ydF9oYW5kbGUsIElSRlMsIDB4RiwgMCwgKDE2KjE2LTEpKTsKKwlyZXQgPSBzcG9ydF9jb25maWdfcngoc3BvcnQsIElSRlMsIDB4RiwgMCwgKDE2KjE2LTEpKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiU1BPUlQgaXMgYnVzeSFcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXJldCA9IHNwb3J0X2NvbmZpZ190eChzcG9ydF9oYW5kbGUsIElURlMsIDB4RiwgMCwgKDE2KjE2LTEpKTsKKwlyZXQgPSBzcG9ydF9jb25maWdfdHgoc3BvcnQsIElURlMsIDB4RiwgMCwgKDE2KjE2LTEpKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiU1BPUlQgaXMgYnVzeSFcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWlmIChkYWktPmNhcHR1cmUuYWN0aXZlKQotCQlzcG9ydF9yeF9zdGFydChzcG9ydCk7Ci0JaWYgKGRhaS0+cGxheWJhY2suYWN0aXZlKQotCQlzcG9ydF90eF9zdGFydChzcG9ydCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE4MzYuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE4MzYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDM2MWUzCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTgzNi5jCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogRmlsZTogICAgICAgICBzb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxODM2LmMKKyAqIEF1dGhvcjogICAgICAgQmFycnkgU29uZyA8QmFycnkuU29uZ0BhbmFsb2cuY29tPgorICoKKyAqIENyZWF0ZWQ6ICAgICAgQXVnIDQgMjAwOQorICogRGVzY3JpcHRpb246ICBCb2FyZCBkcml2ZXIgZm9yIGFkMTgzNiBzb3VuZCBjaGlwCisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisKKyNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy9hZDE4MzYuaCIKKyNpbmNsdWRlICJiZjV4eC1zcG9ydC5oIgorCisjaW5jbHVkZSAiYmY1eHgtdGRtLXBjbS5oIgorI2luY2x1ZGUgImJmNXh4LXRkbS5oIgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBiZjV4eF9hZDE4MzY7CisKK3N0YXRpYyBpbnQgYmY1eHhfYWQxODM2X3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCisJY3B1X2RhaS0+cHJpdmF0ZV9kYXRhID0gc3BvcnRfaGFuZGxlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJmNXh4X2FkMTgzNl9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKwlpbnQgcmV0ID0gMDsKKwkvKiBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9EU1BfQSB8CisJCVNORF9TT0NfREFJRk1UX0lCX0lGIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfRFNQX0EgfAorCQlTTkRfU09DX0RBSUZNVF9JQl9JRiB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgYmY1eHhfYWQxODM2X29wcyA9IHsKKwkuc3RhcnR1cCA9IGJmNXh4X2FkMTgzNl9zdGFydHVwLAorCS5od19wYXJhbXMgPSBiZjV4eF9hZDE4MzZfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGJmNXh4X2FkMTgzNl9kYWkgPSB7CisJLm5hbWUgPSAiYWQxODM2IiwKKwkuc3RyZWFtX25hbWUgPSAiQUQxODM2IiwKKwkuY3B1X2RhaSA9ICZiZjV4eF90ZG1fZGFpLAorCS5jb2RlY19kYWkgPSAmYWQxODM2X2RhaSwKKwkub3BzID0gJmJmNXh4X2FkMTgzNl9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBiZjV4eF9hZDE4MzYgPSB7CisJLm5hbWUgPSAiYmY1eHhfYWQxODM2IiwKKwkucGxhdGZvcm0gPSAmYmY1eHhfdGRtX3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsgPSAmYmY1eHhfYWQxODM2X2RhaSwKKwkubnVtX2xpbmtzID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgYmY1eHhfYWQxODM2X3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJmJmNXh4X2FkMTgzNiwKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfYWQxODM2LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmJmeHhfYWQxODM2X3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IGJmNXh4X2FkMTgzNl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWJmeHhfYWQxODM2X3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWJmeHhfYWQxODM2X3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoYmZ4eF9hZDE4MzZfc25kX2RldmljZSwgJmJmNXh4X2FkMTgzNl9zbmRfZGV2ZGF0YSk7CisJYmY1eHhfYWQxODM2X3NuZF9kZXZkYXRhLmRldiA9ICZiZnh4X2FkMTgzNl9zbmRfZGV2aWNlLT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChiZnh4X2FkMTgzNl9zbmRfZGV2aWNlKTsKKworCWlmIChyZXQpCisJCXBsYXRmb3JtX2RldmljZV9wdXQoYmZ4eF9hZDE4MzZfc25kX2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYmY1eHhfYWQxODM2X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihiZnh4X2FkMTgzNl9zbmRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoYmY1eHhfYWQxODM2X2luaXQpOworbW9kdWxlX2V4aXQoYmY1eHhfYWQxODM2X2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIkJhcnJ5IFNvbmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgQUQxODM2IGJvYXJkIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxOTM4LmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxOTM4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgyNjllOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE5MzguYwpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIEZpbGU6ICAgICAgICAgc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTkzOC5jCisgKiBBdXRob3I6ICAgICAgIEJhcnJ5IFNvbmcgPEJhcnJ5LlNvbmdAYW5hbG9nLmNvbT4KKyAqCisgKiBDcmVhdGVkOiAgICAgIFRodXIgSnVuZSA0IDIwMDkKKyAqIERlc2NyaXB0aW9uOiAgQm9hcmQgZHJpdmVyIGZvciBhZDE5Mzggc291bmQgY2hpcAorICoKKyAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKKyAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKworI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vcG9ydG11eC5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL2FkMTkzOC5oIgorI2luY2x1ZGUgImJmNXh4LXNwb3J0LmgiCisKKyNpbmNsdWRlICJiZjV4eC10ZG0tcGNtLmgiCisjaW5jbHVkZSAiYmY1eHgtdGRtLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGJmNXh4X2FkMTkzODsKKworc3RhdGljIGludCBiZjV4eF9hZDE5Mzhfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisKKwljcHVfZGFpLT5wcml2YXRlX2RhdGEgPSBzcG9ydF9oYW5kbGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmY1eHhfYWQxOTM4X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOworCWludCByZXQgPSAwOworCS8qIHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0RTUF9BIHwKKwkJU05EX1NPQ19EQUlGTVRfSUJfSUYgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9EU1BfQSB8CisJCVNORF9TT0NfREFJRk1UX0lCX0lGIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBzZXQgY29kZWMgREFJIHNsb3RzLCA4IGNoYW5uZWxzLCBhbGwgY2hhbm5lbHMgYXJlIGVuYWJsZWQgKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfdGRtX3Nsb3QoY29kZWNfZGFpLCAweEZGLCA4KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGJmNXh4X2FkMTkzOF9vcHMgPSB7CisJLnN0YXJ0dXAgPSBiZjV4eF9hZDE5Mzhfc3RhcnR1cCwKKwkuaHdfcGFyYW1zID0gYmY1eHhfYWQxOTM4X2h3X3BhcmFtcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBiZjV4eF9hZDE5MzhfZGFpID0geworCS5uYW1lID0gImFkMTkzOCIsCisJLnN0cmVhbV9uYW1lID0gIkFEMTkzOCIsCisJLmNwdV9kYWkgPSAmYmY1eHhfdGRtX2RhaSwKKwkuY29kZWNfZGFpID0gJmFkMTkzOF9kYWksCisJLm9wcyA9ICZiZjV4eF9hZDE5Mzhfb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgYmY1eHhfYWQxOTM4ID0geworCS5uYW1lID0gImJmNXh4X2FkMTkzOCIsCisJLnBsYXRmb3JtID0gJmJmNXh4X3RkbV9zb2NfcGxhdGZvcm0sCisJLmRhaV9saW5rID0gJmJmNXh4X2FkMTkzOF9kYWksCisJLm51bV9saW5rcyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGJmNXh4X2FkMTkzOF9zbmRfZGV2ZGF0YSA9IHsKKwkuY2FyZCA9ICZiZjV4eF9hZDE5MzgsCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X2FkMTkzOCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpiZnh4X2FkMTkzOF9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBiZjV4eF9hZDE5MzhfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwliZnh4X2FkMTkzOF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFiZnh4X2FkMTkzOF9zbmRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGJmeHhfYWQxOTM4X3NuZF9kZXZpY2UsICZiZjV4eF9hZDE5Mzhfc25kX2RldmRhdGEpOworCWJmNXh4X2FkMTkzOF9zbmRfZGV2ZGF0YS5kZXYgPSAmYmZ4eF9hZDE5Mzhfc25kX2RldmljZS0+ZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYmZ4eF9hZDE5Mzhfc25kX2RldmljZSk7CisKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGJmeHhfYWQxOTM4X3NuZF9kZXZpY2UpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGJmNXh4X2FkMTkzOF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYmZ4eF9hZDE5Mzhfc25kX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGJmNXh4X2FkMTkzOF9pbml0KTsKK21vZHVsZV9leGl0KGJmNXh4X2FkMTkzOF9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJCYXJyeSBTb25nIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIEFEMTkzOCBib2FyZCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMKaW5kZXggZWRmYmRjMC4uOTgyNWI3MSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQ3MzMxMS5jCkBAIC0yMDMsMjMgKzIwMywyMyBAQAogCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl9hZDczMzExLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmJmNTJ4X2FkNzMzMTFfc25kX2RldmljZTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpiZjV4eF9hZDczMzExX3NuZF9kZXZpY2U7CiAKIHN0YXRpYyBpbnQgX19pbml0IGJmNXh4X2FkNzMzMTFfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKIAlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKLQliZjUyeF9hZDczMzExX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKLQlpZiAoIWJmNTJ4X2FkNzMzMTFfc25kX2RldmljZSkKKwliZjV4eF9hZDczMzExX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWJmNXh4X2FkNzMzMTFfc25kX2RldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShiZjUyeF9hZDczMzExX3NuZF9kZXZpY2UsICZiZjV4eF9hZDczMzExX3NuZF9kZXZkYXRhKTsKLQliZjV4eF9hZDczMzExX3NuZF9kZXZkYXRhLmRldiA9ICZiZjUyeF9hZDczMzExX3NuZF9kZXZpY2UtPmRldjsKLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGJmNTJ4X2FkNzMzMTFfc25kX2RldmljZSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoYmY1eHhfYWQ3MzMxMV9zbmRfZGV2aWNlLCAmYmY1eHhfYWQ3MzMxMV9zbmRfZGV2ZGF0YSk7CisJYmY1eHhfYWQ3MzMxMV9zbmRfZGV2ZGF0YS5kZXYgPSAmYmY1eHhfYWQ3MzMxMV9zbmRfZGV2aWNlLT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChiZjV4eF9hZDczMzExX3NuZF9kZXZpY2UpOwogCiAJaWYgKHJldCkKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChiZjUyeF9hZDczMzExX3NuZF9kZXZpY2UpOworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGJmNXh4X2FkNzMzMTFfc25kX2RldmljZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjI3LDcgKzIyNyw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgYmY1eHhfYWQ3MzMxMV9leGl0KHZvaWQpCiB7CiAJcHJfZGVidWcoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYmY1MnhfYWQ3MzMxMV9zbmRfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihiZjV4eF9hZDczMzExX3NuZF9kZXZpY2UpOwogfQogCiBtb2R1bGVfaW5pdChiZjV4eF9hZDczMzExX2luaXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCmluZGV4IGFmMDY5MDQuLjg3NmFiYWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKQEAgLTI1OSwyMiArMjU5LDE4IEBACiAJaWYgKCFkYWktPmFjdGl2ZSkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBzcG9ydF9jb25maWdfcngoc3BvcnRfaGFuZGxlLCBSRlNSIHwgUkNLRkUsIFJTRlNFfDB4MWYsIDAsIDApOworCXJldCA9IHNwb3J0X2NvbmZpZ19yeChzcG9ydCwgUkZTUiB8IFJDS0ZFLCBSU0ZTRXwweDFmLCAwLCAwKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigiU1BPUlQgaXMgYnVzeSFcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXJldCA9IHNwb3J0X2NvbmZpZ190eChzcG9ydF9oYW5kbGUsIFRGU1IgfCBUQ0tGRSwgVFNGU0V8MHgxZiwgMCwgMCk7CisJcmV0ID0gc3BvcnRfY29uZmlnX3R4KHNwb3J0LCBURlNSIHwgVENLRkUsIFRTRlNFfDB4MWYsIDAsIDApOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJTUE9SVCBpcyBidXN5IVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JaWYgKGRhaS0+Y2FwdHVyZS5hY3RpdmUpCi0JCXNwb3J0X3J4X3N0YXJ0KHNwb3J0KTsKLQlpZiAoZGFpLT5wbGF5YmFjay5hY3RpdmUpCi0JCXNwb3J0X3R4X3N0YXJ0KHNwb3J0KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNzbTI2MDIuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zc20yNjAyLmMKaW5kZXggYmMwY2RkZS4uM2EwMGZhNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNzbTI2MDIuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3NtMjYwMi5jCkBAIC0xNDgsMjQgKzE0OCwyNCBAQAogCS5jb2RlY19kYXRhID0gJmJmNXh4X3NzbTI2MDJfc2V0dXAsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYmY1Mnhfc3NtMjYwMl9zbmRfZGV2aWNlOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmJmNXh4X3NzbTI2MDJfc25kX2RldmljZTsKIAogc3RhdGljIGludCBfX2luaXQgYmY1eHhfc3NtMjYwMl9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAogCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOwotCWJmNTJ4X3NzbTI2MDJfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwotCWlmICghYmY1Mnhfc3NtMjYwMl9zbmRfZGV2aWNlKQorCWJmNXh4X3NzbTI2MDJfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghYmY1eHhfc3NtMjYwMl9zbmRfZGV2aWNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGJmNTJ4X3NzbTI2MDJfc25kX2RldmljZSwKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShiZjV4eF9zc20yNjAyX3NuZF9kZXZpY2UsCiAJCQkJJmJmNXh4X3NzbTI2MDJfc25kX2RldmRhdGEpOwotCWJmNXh4X3NzbTI2MDJfc25kX2RldmRhdGEuZGV2ID0gJmJmNTJ4X3NzbTI2MDJfc25kX2RldmljZS0+ZGV2OwotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYmY1Mnhfc3NtMjYwMl9zbmRfZGV2aWNlKTsKKwliZjV4eF9zc20yNjAyX3NuZF9kZXZkYXRhLmRldiA9ICZiZjV4eF9zc20yNjAyX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGJmNXh4X3NzbTI2MDJfc25kX2RldmljZSk7CiAKIAlpZiAocmV0KQotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGJmNTJ4X3NzbTI2MDJfc25kX2RldmljZSk7CisJCXBsYXRmb3JtX2RldmljZV9wdXQoYmY1eHhfc3NtMjYwMl9zbmRfZGV2aWNlKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNzMsNyArMTczLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBiZjV4eF9zc20yNjAyX2V4aXQodm9pZCkKIHsKIAlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihiZjUyeF9zc20yNjAyX3NuZF9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGJmNXh4X3NzbTI2MDJfc25kX2RldmljZSk7CiB9CiAKIG1vZHVsZV9pbml0KGJmNXh4X3NzbTI2MDJfaW5pdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLXBjbS5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS1wY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2I1ZTgyCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS1wY20uYwpAQCAtMCwwICsxLDMzMCBAQAorLyoKKyAqIEZpbGU6ICAgICAgICAgc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS1wY20uYworICogQXV0aG9yOiAgICAgICBCYXJyeSBTb25nIDxCYXJyeS5Tb25nQGFuYWxvZy5jb20+CisgKgorICogQ3JlYXRlZDogICAgICBUdWUgSnVuZSAwNiAyMDA5CisgKiBEZXNjcmlwdGlvbjogIERNQSBkcml2ZXIgZm9yIHRkbSBjb2RlYworICoKKyAqIE1vZGlmaWVkOgorICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQorICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxhc20vZG1hLmg+CisKKyNpbmNsdWRlICJiZjV4eC10ZG0tcGNtLmgiCisjaW5jbHVkZSAiYmY1eHgtdGRtLmgiCisjaW5jbHVkZSAiYmY1eHgtc3BvcnQuaCIKKworI2RlZmluZSBQQ01fQlVGRkVSX01BWCAgMHgxMDAwMAorI2RlZmluZSBGUkFHTUVOVF9TSVpFX01JTiAgKDQqMTAyNCkKKyNkZWZpbmUgRlJBR01FTlRTX01JTiAgMgorI2RlZmluZSBGUkFHTUVOVFNfTUFYICAzMgorCitzdGF0aWMgdm9pZCBiZjV4eF9kbWFfaXJxKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwY20gPSBkYXRhOworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQocGNtKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGJmNXh4X3BjbV9oYXJkd2FyZSA9IHsKKwkuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8IFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fUkVTVU1FKSwKKwkuZm9ybWF0cyA9ICAgICAgICAgIFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAorCS5yYXRlcyA9ICAgICAgICAgICAgU05EUlZfUENNX1JBVEVfNDgwMDAsCisJLmNoYW5uZWxzX21pbiA9ICAgICAyLAorCS5jaGFubmVsc19tYXggPSAgICAgOCwKKwkuYnVmZmVyX2J5dGVzX21heCA9IFBDTV9CVUZGRVJfTUFYLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gRlJBR01FTlRfU0laRV9NSU4sCisJLnBlcmlvZF9ieXRlc19tYXggPSBQQ01fQlVGRkVSX01BWC8yLAorCS5wZXJpb2RzX21pbiA9ICAgICAgRlJBR01FTlRTX01JTiwKKwkucGVyaW9kc19tYXggPSAgICAgIEZSQUdNRU5UU19NQVgsCit9OworCitzdGF0aWMgaW50IGJmNXh4X3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc2l6ZV90IHNpemUgPSBiZjV4eF9wY21faGFyZHdhcmUuYnVmZmVyX2J5dGVzX21heDsKKwlzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBzaXplICogNCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZjV4eF9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZjV4eF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0ID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCWludCBmcmFnc2l6ZV9ieXRlcyA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisKKwlmcmFnc2l6ZV9ieXRlcyAvPSBydW50aW1lLT5jaGFubmVsczsKKwkvKiBpbmZsYXRlIHRoZSBmcmFnc2l6ZSB0byBtYXRjaCB0aGUgZG1hIHdpZHRoIG9mIFNQT1JUICovCisJZnJhZ3NpemVfYnl0ZXMgKj0gODsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCXNwb3J0X3NldF90eF9jYWxsYmFjayhzcG9ydCwgYmY1eHhfZG1hX2lycSwgc3Vic3RyZWFtKTsKKwkJc3BvcnRfY29uZmlnX3R4X2RtYShzcG9ydCwgcnVudGltZS0+ZG1hX2FyZWEsCisJCQlydW50aW1lLT5wZXJpb2RzLCBmcmFnc2l6ZV9ieXRlcyk7CisJfSBlbHNlIHsKKwkJc3BvcnRfc2V0X3J4X2NhbGxiYWNrKHNwb3J0LCBiZjV4eF9kbWFfaXJxLCBzdWJzdHJlYW0pOworCQlzcG9ydF9jb25maWdfcnhfZG1hKHNwb3J0LCBydW50aW1lLT5kbWFfYXJlYSwKKwkJCXJ1bnRpbWUtPnBlcmlvZHMsIGZyYWdzaXplX2J5dGVzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZjV4eF9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0ID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXNwb3J0X3R4X3N0YXJ0KHNwb3J0KTsKKwkJZWxzZQorCQkJc3BvcnRfcnhfc3RhcnQoc3BvcnQpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCQlzcG9ydF90eF9zdG9wKHNwb3J0KTsKKwkJZWxzZQorCQkJc3BvcnRfcnhfc3RvcChzcG9ydCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IGJmNXh4X3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IGRpZmY7CisJc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJZGlmZiA9IHNwb3J0X2N1cnJfb2Zmc2V0X3R4KHNwb3J0KTsKKwkJZnJhbWVzID0gZGlmZiAvICg4KjQpOyAvKiAzMiBieXRlcyBwZXIgZnJhbWUgKi8KKwl9IGVsc2UgeworCQlkaWZmID0gc3BvcnRfY3Vycl9vZmZzZXRfcngoc3BvcnQpOworCQlmcmFtZXMgPSBkaWZmIC8gKDgqNCk7CisJfQorCXJldHVybiBmcmFtZXM7Cit9CisKK3N0YXRpYyBpbnQgYmY1eHhfcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpbnQgcmV0ID0gMDsKKworCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmYmY1eHhfcGNtX2hhcmR3YXJlKTsKKworCXJldCA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsCisJCVNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoc3BvcnRfaGFuZGxlICE9IE5VTEwpCisJCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IHNwb3J0X2hhbmRsZTsKKwllbHNlIHsKKwkJcHJfZXJyKCJzcG9ydF9oYW5kbGUgaXMgTlVMTFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYmY1eHhfcGNtX2NvcHkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjaGFubmVsLAorCXNuZF9wY21fdWZyYW1lc190IHBvcywgdm9pZCAqYnVmLCBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgKnNyYzsKKwl1bnNpZ25lZCBpbnQgKmRzdDsKKwlpbnQgaTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCXNyYyA9IGJ1ZjsKKwkJZHN0ID0gKHVuc2lnbmVkIGludCAqKXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWE7CisKKwkJZHN0ICs9IHBvcyAqIDg7CisJCXdoaWxlIChjb3VudC0tKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgc3Vic3RyZWFtLT5ydW50aW1lLT5jaGFubmVsczsgaSsrKQorCQkJCSooZHN0ICsgaSkgPSAqc3JjKys7CisJCQlkc3QgKz0gODsKKwkJfQorCX0gZWxzZSB7CisJCXNyYyA9ICh1bnNpZ25lZCBpbnQgKilzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhOworCQlkc3QgPSBidWY7CisKKwkJc3JjICs9IHBvcyAqIDg7CisJCXdoaWxlIChjb3VudC0tKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgc3Vic3RyZWFtLT5ydW50aW1lLT5jaGFubmVsczsgaSsrKQorCQkJCSpkc3QrKyA9ICooc3JjK2kpOworCQkJc3JjICs9IDg7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZjV4eF9wY21fc2lsZW5jZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlpbnQgY2hhbm5lbCwgc25kX3BjbV91ZnJhbWVzX3QgcG9zLCBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBjaGFyICpidWYgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhOworCWJ1ZiArPSBwb3MgKiA4ICogNDsKKwltZW1zZXQoYnVmLCAnXDAnLCBjb3VudCAqIDggKiA0KTsKKworCXJldHVybiAwOworfQorCisKK3N0cnVjdCBzbmRfcGNtX29wcyBiZjV4eF9wY21fdGRtX29wcyA9IHsKKwkub3BlbiAgICAgICAgICAgPSBiZjV4eF9wY21fb3BlbiwKKwkuaW9jdGwgICAgICAgICAgPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zICAgICAgPSBiZjV4eF9wY21faHdfcGFyYW1zLAorCS5od19mcmVlICAgICAgICA9IGJmNXh4X3BjbV9od19mcmVlLAorCS5wcmVwYXJlICAgICAgICA9IGJmNXh4X3BjbV9wcmVwYXJlLAorCS50cmlnZ2VyICAgICAgICA9IGJmNXh4X3BjbV90cmlnZ2VyLAorCS5wb2ludGVyICAgICAgICA9IGJmNXh4X3BjbV9wb2ludGVyLAorCS5jb3B5ICAgICAgICAgICA9IGJmNXh4X3BjbV9jb3B5LAorCS5zaWxlbmNlICAgICAgICA9IGJmNXh4X3BjbV9zaWxlbmNlLAorfTsKKworc3RhdGljIGludCBiZjV4eF9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwlzaXplX3Qgc2l6ZSA9IGJmNXh4X3BjbV9oYXJkd2FyZS5idWZmZXJfYnl0ZXNfbWF4OworCisJYnVmLT5kZXYudHlwZSA9IFNORFJWX0RNQV9UWVBFX0RFVjsKKwlidWYtPmRldi5kZXYgPSBwY20tPmNhcmQtPmRldjsKKwlidWYtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJYnVmLT5hcmVhID0gZG1hX2FsbG9jX2NvaGVyZW50KHBjbS0+Y2FyZC0+ZGV2LCBzaXplICogNCwKKwkJJmJ1Zi0+YWRkciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYtPmFyZWEpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZG1hIG1lbW9yeSBcCisJCQlQbGVhc2UgaW5jcmVhc2UgdW5jYWNoZWQgRE1BIG1lbW9yeSByZWdpb25cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJYnVmLT5ieXRlcyA9IHNpemU7CisKKwlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXNwb3J0X2hhbmRsZS0+dHhfYnVmID0gYnVmLT5hcmVhOworCWVsc2UKKwkJc3BvcnRfaGFuZGxlLT5yeF9idWYgPSBidWYtPmFyZWE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmY1eHhfcGNtX2ZyZWVfZG1hX2J1ZmZlcnMoc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZjsKKwlpbnQgc3RyZWFtOworCisJZm9yIChzdHJlYW0gPSAwOyBzdHJlYW0gPCAyOyBzdHJlYW0rKykgeworCQlzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07CisJCWlmICghc3Vic3RyZWFtKQorCQkJY29udGludWU7CisKKwkJYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwkJaWYgKCFidWYtPmFyZWEpCisJCQljb250aW51ZTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgYnVmLT5ieXRlcywgYnVmLT5hcmVhLCAwKTsKKwkJYnVmLT5hcmVhID0gTlVMTDsKKwl9CisJaWYgKHNwb3J0X2hhbmRsZSkKKwkJc3BvcnRfZG9uZShzcG9ydF9oYW5kbGUpOworfQorCitzdGF0aWMgdTY0IGJmNXh4X3BjbV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIGludCBiZjV4eF9wY21fdGRtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCXN0cnVjdCBzbmRfcGNtICpwY20pCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWNhcmQtPmRldi0+ZG1hX21hc2spCisJCWNhcmQtPmRldi0+ZG1hX21hc2sgPSAmYmY1eHhfcGNtX2RtYW1hc2s7CisJaWYgKCFjYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrKQorCQljYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworCWlmIChkYWktPnBsYXliYWNrLmNoYW5uZWxzX21pbikgeworCQlyZXQgPSBiZjV4eF9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCisJCQlTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCWlmIChkYWktPmNhcHR1cmUuY2hhbm5lbHNfbWluKSB7CisJCXJldCA9IGJmNXh4X3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHBjbSwKKwkJCVNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gYmY1eHhfdGRtX3NvY19wbGF0Zm9ybSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiYmY1eHgtYXVkaW8iLAorCS5wY21fb3BzICAgICAgICA9ICZiZjV4eF9wY21fdGRtX29wcywKKwkucGNtX25ldyAgICAgICAgPSBiZjV4eF9wY21fdGRtX25ldywKKwkucGNtX2ZyZWUgICAgICAgPSBiZjV4eF9wY21fZnJlZV9kbWFfYnVmZmVycywKK307CitFWFBPUlRfU1lNQk9MX0dQTChiZjV4eF90ZG1fc29jX3BsYXRmb3JtKTsKKworc3RhdGljIGludCBfX2luaXQgYmZpbl9wY21fdGRtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9wbGF0Zm9ybSgmYmY1eHhfdGRtX3NvY19wbGF0Zm9ybSk7Cit9Cittb2R1bGVfaW5pdChiZmluX3BjbV90ZG1faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiZmluX3BjbV90ZG1fZXhpdCh2b2lkKQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmYmY1eHhfdGRtX3NvY19wbGF0Zm9ybSk7Cit9Cittb2R1bGVfZXhpdChiZmluX3BjbV90ZG1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkJhcnJ5IFNvbmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQURJIEJsYWNrZmluIFRETSBQQ00gRE1BIG1vZHVsZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS1wY20uaCBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0tcGNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjNTA0NwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0tcGNtLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIHNvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0tcGNtLmggLS0gQUxTQSBQQ00gaW50ZXJmYWNlIGZvciB0aGUgQmxhY2tmaW4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBBbmFsb2cgRGV2aWNlIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0JGNVhYX1RETV9QQ01fSAorI2RlZmluZSBfQkY1WFhfVERNX1BDTV9ICisKK3N0cnVjdCBiZjV4eF9wY21fZG1hX3BhcmFtcyB7CisJY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgICAgICAvKiBzdHJlYW0gaWRlbnRpZmllciAqLworfTsKKworLyogcGxhdGZvcm0gZGF0YSAqLworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtIGJmNXh4X3RkbV9zb2NfcGxhdGZvcm07CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOTZiYWQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLmMKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIHNvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0uYworICogQXV0aG9yOiAgICAgICBCYXJyeSBTb25nIDxCYXJyeS5Tb25nQGFuYWxvZy5jb20+CisgKgorICogQ3JlYXRlZDogICAgICBUaHVycyBKdW5lIDA0IDIwMDkKKyAqIERlc2NyaXB0aW9uOiAgQmxhY2tmaW4gSTJTKFRETSkgQ1BVIERBSSBkcml2ZXIKKyAqICAgICAgICAgICAgICBFdmVuIHRob3VnaCBURE0gbW9kZSBjYW4gYmUgYXMgcGFydCBvZiBJMlMgREFJLCBidXQgdGhlcmUKKyAqICAgICAgICAgICAgICBhcmUgc28gbXVjaCBkaWZmZXJlbmNlIGluIGNvbmZpZ3VyYXRpb24gYW5kIGRhdGEgZmxvdywKKyAqICAgICAgICAgICAgICBpdCdzIHZlcnkgdWdseSB0byBpbnRlZ3JhdGUgSTJTIGFuZCBURE0gaW50byBhIG1vZHVsZQorICoKKyAqIE1vZGlmaWVkOgorICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQorICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcG9ydG11eC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSAiYmY1eHgtc3BvcnQuaCIKKyNpbmNsdWRlICJiZjV4eC10ZG0uaCIKKworc3RydWN0IGJmNXh4X3RkbV9wb3J0IHsKKwl1MTYgdGNyMTsKKwl1MTYgcmNyMTsKKwl1MTYgdGNyMjsKKwl1MTYgcmNyMjsKKwlpbnQgY29uZmlndXJlZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmY1eHhfdGRtX3BvcnQgYmY1eHhfdGRtOworc3RhdGljIGludCBzcG9ydF9udW0gPSBDT05GSUdfU05EX0JGNVhYX1NQT1JUX05VTTsKKworc3RhdGljIHN0cnVjdCBzcG9ydF9wYXJhbSBzcG9ydF9wYXJhbXNbMl0gPSB7CisJeworCQkuZG1hX3J4X2NoYW4gICAgPSBDSF9TUE9SVDBfUlgsCisJCS5kbWFfdHhfY2hhbiAgICA9IENIX1NQT1JUMF9UWCwKKwkJLmVycl9pcnEgICAgICAgID0gSVJRX1NQT1JUMF9FUlJPUiwKKwkJLnJlZ3MgICAgICAgICAgID0gKHN0cnVjdCBzcG9ydF9yZWdpc3RlciAqKVNQT1JUMF9UQ1IxLAorCX0sCisJeworCQkuZG1hX3J4X2NoYW4gICAgPSBDSF9TUE9SVDFfUlgsCisJCS5kbWFfdHhfY2hhbiAgICA9IENIX1NQT1JUMV9UWCwKKwkJLmVycl9pcnEgICAgICAgID0gSVJRX1NQT1JUMV9FUlJPUiwKKwkJLnJlZ3MgICAgICAgICAgID0gKHN0cnVjdCBzcG9ydF9yZWdpc3RlciAqKVNQT1JUMV9UQ1IxLAorCX0KK307CisKKy8qCisgKiBTZXR0aW5nIHRoZSBURlMgcGluIHNlbGVjdG9yIGZvciBTUE9SVCAwIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHNlbGVjdGVkCisgKiBwb3J0IGlkIEYgb3IgRy4gSWYgdGhlIHBvcnQgaXMgRiB0aGVuIG5vIGNvbmZsaWN0IHNob3VsZCBleGlzdCBmb3IgdGhlCisgKiBURlMuIFdoZW4gUG9ydCBHIGlzIHNlbGVjdGVkIGFuZCBFTUFDIHRoZW4gdGhlcmUgaXMgYSBjb25mbGljdCBiZXR3ZWVuCisgKiB0aGUgUEhZIGludGVycnVwdCBsaW5lIGFuZCBURlMuICBDdXJyZW50IHNldHRpbmdzIHByZXZlbnQgdGhlIGNvbmZsaWN0CisgKiBieSBpZ25vcmluZyB0aGUgVEZTIHBpbiB3aGVuIFBvcnQgRyBpcyBzZWxlY3RlZC4gVGhpcyBhbGxvd3MgYm90aAorICogc3NtMjYwMiB1c2luZyBQb3J0IEcgYW5kIEVNQUMgY29uY3VycmVudGx5LgorICovCisjaWZkZWYgQ09ORklHX0JGNTI3X1NQT1JUMF9QT1JURgorI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTIChQX1NQT1JUMF9URlMpCisjZWxzZQorI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTICgwKQorI2VuZGlmCisKK3N0YXRpYyB1MTYgc3BvcnRfcmVxW11bN10gPSB7IHtQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywKKwlQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIExPQ0FMX1NQT1JUMF9URlMsIDB9LAorCSAgIHtQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFBfU1BPUlQxX1JGUywgUF9TUE9SVDFfRFJQUkksCisJCSAgIFBfU1BPUlQxX1JTQ0xLLCBQX1NQT1JUMV9URlMsIDB9IH07CisKK3N0YXRpYyBpbnQgYmY1eHhfdGRtX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwl1bnNpZ25lZCBpbnQgZm10KQoreworCWludCByZXQgPSAwOworCisJLyogaW50ZXJmYWNlIGZvcm1hdDpzdXBwb3J0IFRETSxzbGF2ZSBtb2RlICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVua25vd24gREFJIGZvcm1hdCB0eXBlXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZNOgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmtub3duIERBSSBtYXN0ZXIgdHlwZVxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJmNXh4X3RkbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJaW50IHJldCA9IDA7CisKKwliZjV4eF90ZG0udGNyMiAmPSB+MHgxZjsKKwliZjV4eF90ZG0ucmNyMiAmPSB+MHgxZjsKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisJCWJmNXh4X3RkbS50Y3IyIHw9IDMxOworCQliZjV4eF90ZG0ucmNyMiB8PSAzMTsKKwkJc3BvcnRfaGFuZGxlLT53ZHNpemUgPSA0OworCQlicmVhazsKKwkJLyogYXQgcHJlc2VudCwgd2Ugb25seSBzdXBwb3J0IDMyYml0IHRyYW5zZmVyICovCisJZGVmYXVsdDoKKwkJcHJfZXJyKCJub3Qgc3VwcG9ydGVkIFBDTSBmb3JtYXQgeWV0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCWlmICghYmY1eHhfdGRtLmNvbmZpZ3VyZWQpIHsKKwkJLyoKKwkJICogVFggYW5kIFJYIGFyZSBub3QgaW5kZXBlbmRlbnQsdGhleSBhcmUgZW5hYmxlZCBhdCB0aGUKKwkJICogc2FtZSB0aW1lLCBldmVuIGlmIG9ubHkgb25lIHNpZGUgaXMgcnVubmluZy4gU28sIHdlCisJCSAqIG5lZWQgdG8gY29uZmlndXJlIGJvdGggb2YgdGhlbSBhdCB0aGUgdGltZSB3aGVuIHRoZSBmaXJzdAorCQkgKiBzdHJlYW0gaXMgb3BlbmVkLgorCQkgKgorCQkgKiBDUFUgREFJOnNsYXZlIG1vZGUuCisJCSAqLworCQlyZXQgPSBzcG9ydF9jb25maWdfcngoc3BvcnRfaGFuZGxlLCBiZjV4eF90ZG0ucmNyMSwKKwkJCWJmNXh4X3RkbS5yY3IyLCAwLCAwKTsKKwkJaWYgKHJldCkgeworCQkJcHJfZXJyKCJTUE9SVCBpcyBidXN5IVxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisKKwkJcmV0ID0gc3BvcnRfY29uZmlnX3R4KHNwb3J0X2hhbmRsZSwgYmY1eHhfdGRtLnRjcjEsCisJCQliZjV4eF90ZG0udGNyMiwgMCwgMCk7CisJCWlmIChyZXQpIHsKKwkJCXByX2VycigiU1BPUlQgaXMgYnVzeSFcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCisJCWJmNXh4X3RkbS5jb25maWd1cmVkID0gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmY1eHhfdGRtX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCS8qIE5vIGFjdGl2ZSBzdHJlYW0sIFNQT1JUIGlzIGFsbG93ZWQgdG8gYmUgY29uZmlndXJlZCBhZ2Fpbi4gKi8KKwlpZiAoIWRhaS0+YWN0aXZlKQorCQliZjV4eF90ZG0uY29uZmlndXJlZCA9IDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYmY1eHhfdGRtX3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQgPQorCQkoc3RydWN0IHNwb3J0X2RldmljZSAqKWRhaS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFkYWktPmFjdGl2ZSkKKwkJcmV0dXJuIDA7CisJaWYgKGRhaS0+Y2FwdHVyZS5hY3RpdmUpCisJCXNwb3J0X3J4X3N0b3Aoc3BvcnQpOworCWlmIChkYWktPnBsYXliYWNrLmFjdGl2ZSkKKwkJc3BvcnRfdHhfc3RvcChzcG9ydCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmY1eHhfdGRtX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0ID0KKwkJKHN0cnVjdCBzcG9ydF9kZXZpY2UgKilkYWktPnByaXZhdGVfZGF0YTsKKworCWlmICghZGFpLT5hY3RpdmUpCisJCXJldHVybiAwOworCisJcmV0ID0gc3BvcnRfc2V0X211bHRpY2hhbm5lbChzcG9ydCwgOCwgMHhGRiwgMSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIlNQT1JUIGlzIGJ1c3khXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCX0KKworCXJldCA9IHNwb3J0X2NvbmZpZ19yeChzcG9ydCwgSVJGUywgMHgxRiwgMCwgMCk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIlNQT1JUIGlzIGJ1c3khXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCX0KKworCXJldCA9IHNwb3J0X2NvbmZpZ190eChzcG9ydCwgSVRGUywgMHgxRiwgMCwgMCk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIlNQT1JUIGlzIGJ1c3khXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCX0KKworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBiZjV4eF90ZG1fc3VzcGVuZCAgICAgIE5VTEwKKyNkZWZpbmUgYmY1eHhfdGRtX3Jlc3VtZSAgICAgICBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYmY1eHhfdGRtX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcyAgICAgID0gYmY1eHhfdGRtX2h3X3BhcmFtcywKKwkuc2V0X2ZtdCAgICAgICAgPSBiZjV4eF90ZG1fc2V0X2RhaV9mbXQsCisJLnNodXRkb3duICAgICAgID0gYmY1eHhfdGRtX3NodXRkb3duLAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIGJmNXh4X3RkbV9kYWkgPSB7CisJLm5hbWUgPSAiYmY1eHgtdGRtIiwKKwkuaWQgPSAwLAorCS5zdXNwZW5kID0gYmY1eHhfdGRtX3N1c3BlbmQsCisJLnJlc3VtZSA9IGJmNXh4X3RkbV9yZXN1bWUsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDgsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLH0sCisJLmNhcHR1cmUgPSB7CisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gOCwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsfSwKKwkub3BzID0gJmJmNXh4X3RkbV9kYWlfb3BzLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGJmNXh4X3RkbV9kYWkpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBiZmluX3RkbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwOworCisJaWYgKHBlcmlwaGVyYWxfcmVxdWVzdF9saXN0KCZzcG9ydF9yZXFbc3BvcnRfbnVtXVswXSwgInNvYy1hdWRpbyIpKSB7CisJCXByX2VycigiUmVxdWVzdGluZyBQZXJpcGhlcmFscyBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiByZXF1ZXN0IERNQSBmb3IgU1BPUlQgKi8KKwlzcG9ydF9oYW5kbGUgPSBzcG9ydF9pbml0KCZzcG9ydF9wYXJhbXNbc3BvcnRfbnVtXSwgNCwgXAorCQk4ICogc2l6ZW9mKHUzMiksIE5VTEwpOworCWlmICghc3BvcnRfaGFuZGxlKSB7CisJCXBlcmlwaGVyYWxfZnJlZV9saXN0KCZzcG9ydF9yZXFbc3BvcnRfbnVtXVswXSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFNQT1JUIHdvcmtzIGluIFRETSBtb2RlICovCisJcmV0ID0gc3BvcnRfc2V0X211bHRpY2hhbm5lbChzcG9ydF9oYW5kbGUsIDgsIDB4RkYsIDEpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJTUE9SVCBpcyBidXN5IVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBzcG9ydF9jb25maWdfZXJyOworCX0KKworCXJldCA9IHNwb3J0X2NvbmZpZ19yeChzcG9ydF9oYW5kbGUsIElSRlMsIDB4MUYsIDAsIDApOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJTUE9SVCBpcyBidXN5IVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBzcG9ydF9jb25maWdfZXJyOworCX0KKworCXJldCA9IHNwb3J0X2NvbmZpZ190eChzcG9ydF9oYW5kbGUsIElURlMsIDB4MUYsIDAsIDApOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJTUE9SVCBpcyBidXN5IVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBzcG9ydF9jb25maWdfZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZiZjV4eF90ZG1fZGFpKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCWdvdG8gc3BvcnRfY29uZmlnX2VycjsKKwl9CisJcmV0dXJuIDA7CisKK3Nwb3J0X2NvbmZpZ19lcnI6CisJcGVyaXBoZXJhbF9mcmVlX2xpc3QoJnNwb3J0X3JlcVtzcG9ydF9udW1dWzBdKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBiZmluX3RkbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlwZXJpcGhlcmFsX2ZyZWVfbGlzdCgmc3BvcnRfcmVxW3Nwb3J0X251bV1bMF0pOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmJmNXh4X3RkbV9kYWkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJmaW5fdGRtX2RyaXZlciA9IHsKKwkucHJvYmUgID0gYmZpbl90ZG1fcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGJmaW5fdGRtX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgICA9ICJiZmluLXRkbSIsCisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYmZpbl90ZG1faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmJmaW5fdGRtX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChiZmluX3RkbV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGJmaW5fdGRtX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYmZpbl90ZG1fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGJmaW5fdGRtX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIkJhcnJ5IFNvbmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiVERNIGRyaXZlciBmb3IgQURJIEJsYWNrZmluIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0uaCBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MThlYzNkCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBzb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0JGNVhYX1RETV9ICisjZGVmaW5lIF9CRjVYWF9URE1fSAorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIGJmNXh4X3RkbV9kYWk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCmluZGV4IGJiYzk3ZmQuLjBlZGNhOTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKQEAgLTEyLDExICsxMiwxNSBAQAogCXRyaXN0YXRlICJCdWlsZCBhbGwgQVNvQyBDT0RFQyBkcml2ZXJzIgogCXNlbGVjdCBTTkRfU09DX0wzCiAJc2VsZWN0IFNORF9TT0NfQUM5N19DT0RFQyBpZiBTTkRfU09DX0FDOTdfQlVTCisJc2VsZWN0IFNORF9TT0NfQUQxODM2IGlmIFNQSV9NQVNURVIKKwlzZWxlY3QgU05EX1NPQ19BRDE5MzggaWYgU1BJX01BU1RFUgogCXNlbGVjdCBTTkRfU09DX0FEMTk4MCBpZiBTTkRfU09DX0FDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfQUQ3MzMxMSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19BSzQxMDQgaWYgU1BJX01BU1RFUgogCXNlbGVjdCBTTkRfU09DX0FLNDUzNSBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19BSzQ2NDIgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfQ1M0MjcwIGlmIEkyQworCXNlbGVjdCBTTkRfU09DX01BWDk4NzcgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfUENNMzAwOAogCXNlbGVjdCBTTkRfU09DX1NQRElGCiAJc2VsZWN0IFNORF9TT0NfU1NNMjYwMiBpZiBJMkMKQEAgLTMwLDE4ICszNCwyMyBAQAogCXNlbGVjdCBTTkRfU09DX1dNODM1MCBpZiBNRkRfV004MzUwCiAJc2VsZWN0IFNORF9TT0NfV004NDAwIGlmIE1GRF9XTTg0MDAKIAlzZWxlY3QgU05EX1NPQ19XTTg1MTAgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQorCXNlbGVjdCBTTkRfU09DX1dNODUyMyBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg1ODAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004NzI4IGlmIFNORF9TT0NfSTJDX0FORF9TUEkKIAlzZWxlY3QgU05EX1NPQ19XTTg3MzEgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODc1MCBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCiAJc2VsZWN0IFNORF9TT0NfV004NzUzIGlmIFNORF9TT0NfSTJDX0FORF9TUEkKKwlzZWxlY3QgU05EX1NPQ19XTTg3NzYgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODkwMCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5MDMgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTQwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk2MCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTg5NjEgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTcxIGlmIEkyQworCXNlbGVjdCBTTkRfU09DX1dNODk3NCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5ODggaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODk5MCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTg5OTMgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV005MDgxIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNOTcwNSBpZiBTTkRfU09DX0FDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfV005NzEyIGlmIFNORF9TT0NfQUM5N19CVVMKQEAgLTU3LDExICs2NiwyMSBAQAogCiAgICAgICAgICAgSWYgdW5zdXJlIHNlbGVjdCAiTiIuCiAKK2NvbmZpZyBTTkRfU09DX1dNX0hVQlMKKwl0cmlzdGF0ZQorCWRlZmF1bHQgeSBpZiBTTkRfU09DX1dNODk5Mz15CisJZGVmYXVsdCBtIGlmIFNORF9TT0NfV004OTkzPW0KIAogY29uZmlnIFNORF9TT0NfQUM5N19DT0RFQwogCXRyaXN0YXRlCiAJc2VsZWN0IFNORF9BQzk3X0NPREVDCiAKK2NvbmZpZyBTTkRfU09DX0FEMTgzNgorCXRyaXN0YXRlCisKK2NvbmZpZyBTTkRfU09DX0FEMTkzOAorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX0FEMTk4MAogCXRyaXN0YXRlCiAKQEAgLTc0LDYgKzkzLDkgQEAKIGNvbmZpZyBTTkRfU09DX0FLNDUzNQogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX0FLNDY0MgorCXRyaXN0YXRlCisKICMgQ2lycnVzIExvZ2ljIENTNDI3MCBDb2RlYwogY29uZmlnIFNORF9TT0NfQ1M0MjcwCiAJdHJpc3RhdGUKQEAgLTg2LDYgKzEwOCw5IEBACiAJYm9vbAogCWRlcGVuZHMgb24gU05EX1NPQ19DUzQyNzAKIAorY29uZmlnIFNORF9TT0NfQ1gyMDQ0MgorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX0wzCiAgICAgICAgdHJpc3RhdGUKIApAQCAtMTI5LDYgKzE1NCw5IEBACiBjb25maWcgU05EX1NPQ19XTTg1MTAKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg1MjMKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTg1ODAKIAl0cmlzdGF0ZQogCkBAIC0xNDQsNiArMTcyLDkgQEAKIGNvbmZpZyBTTkRfU09DX1dNODc1MwogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNODc3NgorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNODkwMAogCXRyaXN0YXRlCiAKQEAgLTE1NiwxNSArMTg3LDI0IEBACiBjb25maWcgU05EX1NPQ19XTTg5NjAKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg5NjEKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTg5NzEKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg5NzQKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTg5ODgKIAl0cmlzdGF0ZQogCiBjb25maWcgU05EX1NPQ19XTTg5OTAKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg5OTMKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTkwODEKIAl0cmlzdGF0ZQogCkBAIC0xNzYsMyArMjE2LDcgQEAKIAogY29uZmlnIFNORF9TT0NfV005NzEzCiAJdHJpc3RhdGUKKworIyBBbXAKK2NvbmZpZyBTTkRfU09DX01BWDk4NzcKKwl0cmlzdGF0ZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKaW5kZXggOGI3NTMwNS4uZmI0YWYyOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCkBAIC0xLDkgKzEsMTMgQEAKIHNuZC1zb2MtYWM5Ny1vYmpzIDo9IGFjOTcubworc25kLXNvYy1hZDE4MzYtb2JqcyA6PSBhZDE4MzYubworc25kLXNvYy1hZDE5Mzgtb2JqcyA6PSBhZDE5Mzgubwogc25kLXNvYy1hZDE5ODAtb2JqcyA6PSBhZDE5ODAubwogc25kLXNvYy1hZDczMzExLW9ianMgOj0gYWQ3MzMxMS5vCiBzbmQtc29jLWFrNDEwNC1vYmpzIDo9IGFrNDEwNC5vCiBzbmQtc29jLWFrNDUzNS1vYmpzIDo9IGFrNDUzNS5vCitzbmQtc29jLWFrNDY0Mi1vYmpzIDo9IGFrNDY0Mi5vCiBzbmQtc29jLWNzNDI3MC1vYmpzIDo9IGNzNDI3MC5vCitzbmQtc29jLWN4MjA0NDItb2JqcyA6PSBjeDIwNDQyLm8KIHNuZC1zb2MtbDMtb2JqcyA6PSBsMy5vCiBzbmQtc29jLXBjbTMwMDgtb2JqcyA6PSBwY20zMDA4Lm8KIHNuZC1zb2Mtc3BkaWYtb2JqcyA6PSBzcGRpZl90cmFuc2NpZXZlci5vCkBAIC0xOCwyOSArMjIsNDIgQEAKIHNuZC1zb2Mtd204MzUwLW9ianMgOj0gd204MzUwLm8KIHNuZC1zb2Mtd204NDAwLW9ianMgOj0gd204NDAwLm8KIHNuZC1zb2Mtd204NTEwLW9ianMgOj0gd204NTEwLm8KK3NuZC1zb2Mtd204NTIzLW9ianMgOj0gd204NTIzLm8KIHNuZC1zb2Mtd204NTgwLW9ianMgOj0gd204NTgwLm8KIHNuZC1zb2Mtd204NzI4LW9ianMgOj0gd204NzI4Lm8KIHNuZC1zb2Mtd204NzMxLW9ianMgOj0gd204NzMxLm8KIHNuZC1zb2Mtd204NzUwLW9ianMgOj0gd204NzUwLm8KIHNuZC1zb2Mtd204NzUzLW9ianMgOj0gd204NzUzLm8KK3NuZC1zb2Mtd204Nzc2LW9ianMgOj0gd204Nzc2Lm8KIHNuZC1zb2Mtd204OTAwLW9ianMgOj0gd204OTAwLm8KIHNuZC1zb2Mtd204OTAzLW9ianMgOj0gd204OTAzLm8KIHNuZC1zb2Mtd204OTQwLW9ianMgOj0gd204OTQwLm8KIHNuZC1zb2Mtd204OTYwLW9ianMgOj0gd204OTYwLm8KK3NuZC1zb2Mtd204OTYxLW9ianMgOj0gd204OTYxLm8KIHNuZC1zb2Mtd204OTcxLW9ianMgOj0gd204OTcxLm8KK3NuZC1zb2Mtd204OTc0LW9ianMgOj0gd204OTc0Lm8KIHNuZC1zb2Mtd204OTg4LW9ianMgOj0gd204OTg4Lm8KIHNuZC1zb2Mtd204OTkwLW9ianMgOj0gd204OTkwLm8KK3NuZC1zb2Mtd204OTkzLW9ianMgOj0gd204OTkzLm8KIHNuZC1zb2Mtd205MDgxLW9ianMgOj0gd205MDgxLm8KIHNuZC1zb2Mtd205NzA1LW9ianMgOj0gd205NzA1Lm8KIHNuZC1zb2Mtd205NzEyLW9ianMgOj0gd205NzEyLm8KIHNuZC1zb2Mtd205NzEzLW9ianMgOj0gd205NzEzLm8KK3NuZC1zb2Mtd20taHVicy1vYmpzIDo9IHdtX2h1YnMubworCisjIEFtcAorc25kLXNvYy1tYXg5ODc3LW9ianMgOj0gbWF4OTg3Ny5vCiAKIG9iai0kKENPTkZJR19TTkRfU09DX0FDOTdfQ09ERUMpCSs9IHNuZC1zb2MtYWM5Ny5vCitvYmotJChDT05GSUdfU05EX1NPQ19BRDE4MzYpCSs9IHNuZC1zb2MtYWQxODM2Lm8KK29iai0kKENPTkZJR19TTkRfU09DX0FEMTkzOCkJKz0gc25kLXNvYy1hZDE5Mzgubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQUQxOTgwKQkrPSBzbmQtc29jLWFkMTk4MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BRDczMzExKSArPSBzbmQtc29jLWFkNzMzMTEubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQUs0MTA0KQkrPSBzbmQtc29jLWFrNDEwNC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BSzQ1MzUpCSs9IHNuZC1zb2MtYWs0NTM1Lm8KK29iai0kKENPTkZJR19TTkRfU09DX0FLNDY0MikJKz0gc25kLXNvYy1hazQ2NDIubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQ1M0MjcwKQkrPSBzbmQtc29jLWNzNDI3MC5vCitvYmotJChDT05GSUdfU05EX1NPQ19DWDIwNDQyKQkrPSBzbmQtc29jLWN4MjA0NDIubwogb2JqLSQoQ09ORklHX1NORF9TT0NfTDMpCSs9IHNuZC1zb2MtbDMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfUENNMzAwOCkJKz0gc25kLXNvYy1wY20zMDA4Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1NQRElGKQkrPSBzbmQtc29jLXNwZGlmLm8KQEAgLTU1LDE5ICs3MiwyOCBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfV004MzUwKQkrPSBzbmQtc29jLXdtODM1MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg0MDApCSs9IHNuZC1zb2Mtd204NDAwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODUxMCkJKz0gc25kLXNvYy13bTg1MTAubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004NTIzKQkrPSBzbmQtc29jLXdtODUyMy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg1ODApCSs9IHNuZC1zb2Mtd204NTgwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODcyOCkJKz0gc25kLXNvYy13bTg3Mjgubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004NzMxKQkrPSBzbmQtc29jLXdtODczMS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg3NTApCSs9IHNuZC1zb2Mtd204NzUwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODc1MykJKz0gc25kLXNvYy13bTg3NTMubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004Nzc2KQkrPSBzbmQtc29jLXdtODc3Ni5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5MDApCSs9IHNuZC1zb2Mtd204OTAwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODkwMykJKz0gc25kLXNvYy13bTg5MDMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTcxKQkrPSBzbmQtc29jLXdtODk3MS5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NzQpCSs9IHNuZC1zb2Mtd204OTc0Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk0MCkJKz0gc25kLXNvYy13bTg5NDAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTYwKQkrPSBzbmQtc29jLXdtODk2MC5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NjEpCSs9IHNuZC1zb2Mtd204OTYxLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk4OCkJKz0gc25kLXNvYy13bTg5ODgubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTkwKQkrPSBzbmQtc29jLXdtODk5MC5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg5OTMpCSs9IHNuZC1zb2Mtd204OTkzLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNOTA4MSkJKz0gc25kLXNvYy13bTkwODEubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV005NzA1KQkrPSBzbmQtc29jLXdtOTcwNS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTk3MTIpCSs9IHNuZC1zb2Mtd205NzEyLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNOTcxMykJKz0gc25kLXNvYy13bTk3MTMubworb2JqLSQoQ09ORklHX1NORF9TT0NfV01fSFVCUykJKz0gc25kLXNvYy13bS1odWJzLm8KKworIyBBbXAKK29iai0kKENPTkZJR19TTkRfU09DX01BWDk4NzcpCSs9IHNuZC1zb2MtbWF4OTg3Ny5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjEyYmI5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYwpAQCAtMCwwICsxLDQ0NiBAQAorLyoKKyAqIEZpbGU6ICAgICAgICAgc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYworICogQXV0aG9yOiAgICAgICBCYXJyeSBTb25nIDxCYXJyeS5Tb25nQGFuYWxvZy5jb20+CisgKgorICogQ3JlYXRlZDogICAgICBBdWcgMDQgMjAwOQorICogRGVzY3JpcHRpb246ICBEcml2ZXIgZm9yIEFEMTgzNiBzb3VuZCBjaGlwCisgKgorICogTW9kaWZpZWQ6CisgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSAiYWQxODM2LmgiCisKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IGFkMTgzNl9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW0FEMTgzNl9OVU1fUkVHU107Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKmFkMTgzNl9jb2RlYzsKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X2FkMTgzNjsKK3N0YXRpYyBpbnQgYWQxODM2X3JlZ2lzdGVyKHN0cnVjdCBhZDE4MzZfcHJpdiAqYWQxODM2KTsKK3N0YXRpYyB2b2lkIGFkMTgzNl91bnJlZ2lzdGVyKHN0cnVjdCBhZDE4MzZfcHJpdiAqYWQxODM2KTsKKworLyoKKyAqIEFEMTgzNiB2b2x1bWUvbXV0ZS9kZS1lbXBoYXNpcyBldGMuIGNvbnRyb2xzCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICphZDE4MzZfZGVlbXBbXSA9IHsiTm9uZSIsICI0NC4xa0h6IiwgIjMya0h6IiwgIjQ4a0h6In07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWQxODM2X2RlZW1wX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShBRDE4MzZfREFDX0NUUkwxLCA4LCA0LCBhZDE4MzZfZGVlbXApOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxODM2X3NuZF9jb250cm9sc1tdID0geworCS8qIERBQyB2b2x1bWUgY29udHJvbCAqLworCVNPQ19ET1VCTEVfUigiREFDMSBWb2x1bWUiLCBBRDE4MzZfREFDX0wxX1ZPTCwKKwkJCUFEMTgzNl9EQUNfUjFfVk9MLCAwLCAweDNGRiwgMCksCisJU09DX0RPVUJMRV9SKCJEQUMyIFZvbHVtZSIsIEFEMTgzNl9EQUNfTDJfVk9MLAorCQkJQUQxODM2X0RBQ19SMl9WT0wsIDAsIDB4M0ZGLCAwKSwKKwlTT0NfRE9VQkxFX1IoIkRBQzMgVm9sdW1lIiwgQUQxODM2X0RBQ19MM19WT0wsCisJCQlBRDE4MzZfREFDX1IzX1ZPTCwgMCwgMHgzRkYsIDApLAorCisJLyogQURDIHN3aXRjaCBjb250cm9sICovCisJU09DX0RPVUJMRSgiQURDMSBTd2l0Y2giLCBBRDE4MzZfQURDX0NUUkwyLCBBRDE4MzZfQURDTDFfTVVURSwKKwkJQUQxODM2X0FEQ1IxX01VVEUsIDEsIDEpLAorCVNPQ19ET1VCTEUoIkFEQzIgU3dpdGNoIiwgQUQxODM2X0FEQ19DVFJMMiwgQUQxODM2X0FEQ0wyX01VVEUsCisJCUFEMTgzNl9BRENSMl9NVVRFLCAxLCAxKSwKKworCS8qIERBQyBzd2l0Y2ggY29udHJvbCAqLworCVNPQ19ET1VCTEUoIkRBQzEgU3dpdGNoIiwgQUQxODM2X0RBQ19DVFJMMiwgQUQxODM2X0RBQ0wxX01VVEUsCisJCUFEMTgzNl9EQUNSMV9NVVRFLCAxLCAxKSwKKwlTT0NfRE9VQkxFKCJEQUMyIFN3aXRjaCIsIEFEMTgzNl9EQUNfQ1RSTDIsIEFEMTgzNl9EQUNMMl9NVVRFLAorCQlBRDE4MzZfREFDUjJfTVVURSwgMSwgMSksCisJU09DX0RPVUJMRSgiREFDMyBTd2l0Y2giLCBBRDE4MzZfREFDX0NUUkwyLCBBRDE4MzZfREFDTDNfTVVURSwKKwkJQUQxODM2X0RBQ1IzX01VVEUsIDEsIDEpLAorCisJLyogQURDIGhpZ2gtcGFzcyBmaWx0ZXIgKi8KKwlTT0NfU0lOR0xFKCJBREMgSGlnaCBQYXNzIEZpbHRlciBTd2l0Y2giLCBBRDE4MzZfQURDX0NUUkwxLAorCQkJQUQxODM2X0FEQ19ISUdIUEFTU19GSUxURVIsIDEsIDApLAorCisJLyogREFDIGRlLWVtcGhhc2lzICovCisJU09DX0VOVU0oIlBsYXliYWNrIERlZW1waGFzaXMiLCBhZDE4MzZfZGVlbXBfZW51bSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgYWQxODM2X2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9EQUMoIkRBQyIsICJQbGF5YmFjayIsIEFEMTgzNl9EQUNfQ1RSTDEsCisJCQkJQUQxODM2X0RBQ19QT1dFUkRPV04sIDEpLAorCVNORF9TT0NfREFQTV9BREMoIkFEQyIsICJDYXB0dXJlIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJBRENfUFdSIiwgQUQxODM2X0FEQ19DVFJMMSwKKwkJCQlBRDE4MzZfQURDX1BPV0VSRE9XTiwgMSwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiREFDMU9VVCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkRBQzJPVVQiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJEQUMzT1VUIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJBREMxSU4iKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkFEQzJJTiIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fcGF0aHNbXSA9IHsKKwl7ICJEQUMiLCBOVUxMLCAiQURDX1BXUiIgfSwKKwl7ICJBREMiLCBOVUxMLCAiQURDX1BXUiIgfSwKKwl7ICJEQUMxT1VUIiwgIkRBQzEgU3dpdGNoIiwgIkRBQyIgfSwKKwl7ICJEQUMyT1VUIiwgIkRBQzIgU3dpdGNoIiwgIkRBQyIgfSwKKwl7ICJEQUMzT1VUIiwgIkRBQzMgU3dpdGNoIiwgIkRBQyIgfSwKKwl7ICJBREMiLCAiQURDMSBTd2l0Y2giLCAiQURDMUlOIiB9LAorCXsgIkFEQyIsICJBREMyIFN3aXRjaCIsICJBREMySU4iIH0sCit9OworCisvKgorICogREFJIG9wcyBlbnRyaWVzCisgKi8KKworc3RhdGljIGludCBhZDE4MzZfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCXVuc2lnbmVkIGludCBmbXQpCit7CisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCS8qIGF0IHByZXNlbnQsIHdlIHN1cHBvcnQgYWRjIGF1eCBtb2RlIHRvIGludGVyZmFjZSB3aXRoCisJICogYmxhY2tmaW4gc3BvcnQgdGRtIG1vZGUKKwkgKi8KKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCS8qIEFMQ0xLLEFCQ0xLIGFyZSBib3RoIG91dHB1dCwgQUQxODM2IGNhbiBvbmx5IGJlIG1hc3RlciAqLworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWQxODM2X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCWludCB3b3JkX2xlbiA9IDA7CisKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJLyogYml0IHNpemUgKi8KKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXdvcmRfbGVuID0gMzsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCXdvcmRfbGVuID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQl3b3JkX2xlbiA9IDA7CisJCWJyZWFrOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFEMTgzNl9EQUNfQ1RSTDEsCisJCUFEMTgzNl9EQUNfV09SRF9MRU5fTUFTSywgd29yZF9sZW4pOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgQUQxODM2X0FEQ19DVFJMMiwKKwkJQUQxODM2X0FEQ19XT1JEX0xFTl9NQVNLLCB3b3JkX2xlbik7CisKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogaW50ZXJmYWNlIHRvIHJlYWQvd3JpdGUgYWQxODM2IHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgQUQxODM2X1NQSV9SRUdfU0hGVCAxMgorI2RlZmluZSBBRDE4MzZfU1BJX1JFQUQgICAgICgxIDw8IDExKQorI2RlZmluZSBBRDE4MzZfU1BJX1ZBTF9NU0sgIDB4M0ZGCisKKy8qCisgKiB3cml0ZSB0byB0aGUgYWQxODM2IHJlZ2lzdGVyIHNwYWNlCisgKi8KKworc3RhdGljIGludCBhZDE4MzZfd3JpdGVfcmVnKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwkJdW5zaWduZWQgaW50IHZhbHVlKQoreworCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh2YWx1ZSAhPSByZWdfY2FjaGVbcmVnXSkgeworCQl1bnNpZ25lZCBzaG9ydCBidWY7CisJCXN0cnVjdCBzcGlfdHJhbnNmZXIgdCA9IHsKKwkJCS50eF9idWYgPSAmYnVmLAorCQkJLmxlbiA9IDIsCisJCX07CisJCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCisJCWJ1ZiA9IChyZWcgPDwgQUQxODM2X1NQSV9SRUdfU0hGVCkgfAorCQkJKHZhbHVlICYgQUQxODM2X1NQSV9WQUxfTVNLKTsKKwkJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CisJCXJldCA9IHNwaV9zeW5jKGNvZGVjLT5jb250cm9sX2RhdGEsICZtKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmVnX2NhY2hlW3JlZ10gPSB2YWx1ZTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogcmVhZCBmcm9tIHRoZSBhZDE4MzYgcmVnaXN0ZXIgc3BhY2UgY2FjaGUKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBhZDE4MzZfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCQkgIHVuc2lnbmVkIGludCByZWcpCit7CisJdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCisJaWYgKHJlZyA+PSBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHJlZ19jYWNoZVtyZWddOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZDE4MzZfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCBhZDE4MzZfcHJpdiAqYWQxODM2OworCisJYWQxODM2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkMTgzNl9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFkMTgzNiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJmFkMTgzNi0+Y29kZWM7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKKwljb2RlYy0+ZGV2ID0gJnNwaS0+ZGV2OworCisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgYWQxODM2KTsKKworCXJldHVybiBhZDE4MzZfcmVnaXN0ZXIoYWQxODM2KTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWQxODM2X3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgYWQxODM2X3ByaXYgKmFkMTgzNiA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJYWQxODM2X3VucmVnaXN0ZXIoYWQxODM2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGFkMTgzNl9zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImFkMTgzNi1zcGkiLAorCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gYWQxODM2X3NwaV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGFkMTgzNl9zcGlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGFkMTgzNl9kYWlfb3BzID0geworCS5od19wYXJhbXMgPSBhZDE4MzZfaHdfcGFyYW1zLAorCS5zZXRfZm10ID0gYWQxODM2X3NldF9kYWlfZm10LAorfTsKKworLyogY29kZWMgREFJIGluc3RhbmNlICovCitzdHJ1Y3Qgc25kX3NvY19kYWkgYWQxODM2X2RhaSA9IHsKKwkubmFtZSA9ICJBRDE4MzYiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSA2LAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSA0LAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFLAorCX0sCisJLm9wcyA9ICZhZDE4MzZfZGFpX29wcywKK307CitFWFBPUlRfU1lNQk9MX0dQTChhZDE4MzZfZGFpKTsKKworc3RhdGljIGludCBhZDE4MzZfcmVnaXN0ZXIoc3RydWN0IGFkMTgzNl9wcml2ICphZDE4MzYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmYWQxODM2LT5jb2RlYzsKKworCWlmIChhZDE4MzZfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBhZDE4MzYgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisJY29kZWMtPnByaXZhdGVfZGF0YSA9IGFkMTgzNjsKKwljb2RlYy0+cmVnX2NhY2hlID0gYWQxODM2LT5yZWdfY2FjaGU7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQUQxODM2X05VTV9SRUdTOworCWNvZGVjLT5uYW1lID0gIkFEMTgzNiI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmRhaSA9ICZhZDE4MzZfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+d3JpdGUgPSBhZDE4MzZfd3JpdGVfcmVnOworCWNvZGVjLT5yZWFkID0gYWQxODM2X3JlYWRfcmVnX2NhY2hlOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJYWQxODM2X2RhaS5kZXYgPSBjb2RlYy0+ZGV2OworCWFkMTgzNl9jb2RlYyA9IGNvZGVjOworCisJLyogZGVmYXVsdCBzZXR0aW5nIGZvciBhZDE4MzYgKi8KKwkvKiBkZS1lbXBoYXNpczogNDhrSHosIHBvd2VyLW9uIGRhYyAqLworCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19DVFJMMSwgMHgzMDApOworCS8qIHVubXV0ZSBkYWMgY2hhbm5lbHMgKi8KKwljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfQ1RSTDIsIDB4MCk7CisJLyogaGlnaC1wYXNzIGZpbHRlciBlbmFibGUsIHBvd2VyLW9uIGFkYyAqLworCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0FEQ19DVFJMMSwgMHgxMDApOworCS8qIHVubXV0ZSBhZGMgY2hhbm5sZXMsIGFkYyBhdXggbW9kZSAqLworCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0FEQ19DVFJMMiwgMHgxODApOworCS8qIGxlZnQvcmlnaHQgZGlmZjpQR0EvTVVYICovCisJY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwzLCAweDNBKTsKKwkvKiB2b2x1bWUgKi8KKwljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfTDFfVk9MLCAweDNGRik7CisJY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfREFDX1IxX1ZPTCwgMHgzRkYpOworCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19MMl9WT0wsIDB4M0ZGKTsKKwljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfUjJfVk9MLCAweDNGRik7CisJY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0wzX1ZPTCwgMHgzRkYpOworCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19SM19WT0wsIDB4M0ZGKTsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOworCQlrZnJlZShhZDE4MzYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZhZDE4MzZfZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJCWtmcmVlKGFkMTgzNik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkMTgzNl91bnJlZ2lzdGVyKHN0cnVjdCBhZDE4MzZfcHJpdiAqYWQxODM2KQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmFkMTgzNl9kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmYWQxODM2LT5jb2RlYyk7CisJa2ZyZWUoYWQxODM2KTsKKwlhZDE4MzZfY29kZWMgPSBOVUxMOworfQorCitzdGF0aWMgaW50IGFkMTgzNl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAwOworCisJaWYgKGFkMTgzNl9jb2RlYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIGRldmljZSBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBhZDE4MzZfY29kZWM7CisJY29kZWMgPSBhZDE4MzZfY29kZWM7CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXM6ICVkXG4iLCByZXQpOworCQlnb3RvIHBjbV9lcnI7CisJfQorCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFkMTgzNl9zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUoYWQxODM2X3NuZF9jb250cm9scykpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGFkMTgzNl9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKGFkMTgzNl9kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fcGF0aHMsIEFSUkFZX1NJWkUoYXVkaW9fcGF0aHMpKTsKKwlzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoY29kZWMpOworCisJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZDogJWRcbiIsIHJldCk7CisJCWdvdG8gY2FyZF9lcnI7CisJfQorCisJcmV0dXJuIHJldDsKKworY2FyZF9lcnI6CisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworcGNtX2VycjoKKwlyZXR1cm4gcmV0OworfQorCisvKiBwb3dlciBkb3duIGNoaXAgKi8KK3N0YXRpYyBpbnQgYWQxODM2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfYWQxODM2ID0geworCS5wcm9iZSA9IAlhZDE4MzZfcHJvYmUsCisJLnJlbW92ZSA9IAlhZDE4MzZfcmVtb3ZlLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfYWQxODM2KTsKKworc3RhdGljIGludCBfX2luaXQgYWQxODM2X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmYWQxODM2X3NwaV9kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBhZDE4MzYgU1BJIGRyaXZlcjogJWRcbiIsCisJCQkJcmV0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQoYWQxODM2X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYWQxODM2X2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFkMTgzNl9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGFkMTgzNl9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIGFkMTgzNiBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkJhcnJ5IFNvbmcgPDIxY25iYW9AZ21haWwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuaCBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2MGVlNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIEZpbGU6ICAgICAgICAgc291bmQvc29jL2NvZGVjcy9hZDE4MzYuaAorICogQmFzZWQgb246CisgKiBBdXRob3I6ICAgICAgIEJhcnJ5IFNvbmcgPEJhcnJ5LlNvbmdAYW5hbG9nLmNvbT4KKyAqCisgKiBDcmVhdGVkOiAgICAgIEF1ZyAwNCwgMjAwOQorICogRGVzY3JpcHRpb246ICBkZWZpbml0aW9ucyBmb3IgQUQxODM2IHJlZ2lzdGVycworICoKKyAqIE1vZGlmaWVkOgorICoKKyAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fQUQxODM2X0hfXworI2RlZmluZSBfX0FEMTgzNl9IX18KKworI2RlZmluZSBBRDE4MzZfREFDX0NUUkwxICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRDE4MzZfREFDX1BPV0VSRE9XTiAgICAgICAgICAgMgorI2RlZmluZSBBRDE4MzZfREFDX1NFUkZNVF9NQVNLCSAgICAgICAweEUwCisjZGVmaW5lIEFEMTgzNl9EQUNfU0VSRk1UX1BDSzI1NiAgICAgICAoMHg0IDw8IDUpCisjZGVmaW5lIEFEMTgzNl9EQUNfU0VSRk1UX1BDSzEyOCAgICAgICAoMHg1IDw8IDUpCisjZGVmaW5lIEFEMTgzNl9EQUNfV09SRF9MRU5fTUFTSyAgICAgICAweDE4CisKKyNkZWZpbmUgQUQxODM2X0RBQ19DVFJMMiAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQUQxODM2X0RBQ0wxX01VVEUgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQUQxODM2X0RBQ1IxX01VVEUgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQUQxODM2X0RBQ0wyX01VVEUgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQUQxODM2X0RBQ1IyX01VVEUgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQUQxODM2X0RBQ0wzX01VVEUgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQUQxODM2X0RBQ1IzX01VVEUgICAgICAgICAgICAgIDUKKworI2RlZmluZSBBRDE4MzZfREFDX0wxX1ZPTCAgICAgICAgICAgICAgMgorI2RlZmluZSBBRDE4MzZfREFDX1IxX1ZPTCAgICAgICAgICAgICAgMworI2RlZmluZSBBRDE4MzZfREFDX0wyX1ZPTCAgICAgICAgICAgICAgNAorI2RlZmluZSBBRDE4MzZfREFDX1IyX1ZPTCAgICAgICAgICAgICAgNQorI2RlZmluZSBBRDE4MzZfREFDX0wzX1ZPTCAgICAgICAgICAgICAgNgorI2RlZmluZSBBRDE4MzZfREFDX1IzX1ZPTCAgICAgICAgICAgICAgNworCisjZGVmaW5lIEFEMTgzNl9BRENfQ1RSTDEgICAgICAgICAgICAgICAxMgorI2RlZmluZSBBRDE4MzZfQURDX1BPV0VSRE9XTiAgICAgICAgICAgNworI2RlZmluZSBBRDE4MzZfQURDX0hJR0hQQVNTX0ZJTFRFUiAgICAgOAorCisjZGVmaW5lIEFEMTgzNl9BRENfQ1RSTDIgICAgICAgICAgICAgICAxMworI2RlZmluZSBBRDE4MzZfQURDTDFfTVVURSAJCTAKKyNkZWZpbmUgQUQxODM2X0FEQ1IxX01VVEUgCQkxCisjZGVmaW5lIEFEMTgzNl9BRENMMl9NVVRFIAkJMgorI2RlZmluZSBBRDE4MzZfQURDUjJfTVVURSAJCTMKKyNkZWZpbmUgQUQxODM2X0FEQ19XT1JEX0xFTl9NQVNLICAgICAgIDB4MzAKKyNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfTUFTSwkgICAgICAgKDcgPDwgNikKKyNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfUENLMjU2ICAgICAgICgweDQgPDwgNikKKyNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfUENLMTI4ICAgICAgICgweDUgPDwgNikKKworI2RlZmluZSBBRDE4MzZfQURDX0NUUkwzICAgICAgICAgICAgICAgMTQKKworI2RlZmluZSBBRDE4MzZfTlVNX1JFR1MgICAgICAgICAgICAgICAgMTYKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBhZDE4MzZfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X2FkMTgzNjsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE5MzguYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTM4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYyYjI3NwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTM4LmMKQEAgLTAsMCArMSw2ODIgQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIHNvdW5kL3NvYy9jb2RlY3MvYWQxOTM4LmMKKyAqIEF1dGhvcjogICAgICAgQmFycnkgU29uZyA8QmFycnkuU29uZ0BhbmFsb2cuY29tPgorICoKKyAqIENyZWF0ZWQ6ICAgICAgSnVuZSAwNCAyMDA5CisgKiBEZXNjcmlwdGlvbjogIERyaXZlciBmb3IgQUQxOTM4IHNvdW5kIGNoaXAKKyAqCisgKiBNb2RpZmllZDoKKyAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKKyAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgImFkMTkzOC5oIgorCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCBhZDE5MzhfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTggcmVnX2NhY2hlW0FEMTkzOF9OVU1fUkVHU107Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKmFkMTkzOF9jb2RlYzsKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X2FkMTkzODsKK3N0YXRpYyBpbnQgYWQxOTM4X3JlZ2lzdGVyKHN0cnVjdCBhZDE5MzhfcHJpdiAqYWQxOTM4KTsKK3N0YXRpYyB2b2lkIGFkMTkzOF91bnJlZ2lzdGVyKHN0cnVjdCBhZDE5MzhfcHJpdiAqYWQxOTM4KTsKKworLyoKKyAqIEFEMTkzOCB2b2x1bWUvbXV0ZS9kZS1lbXBoYXNpcyBldGMuIGNvbnRyb2xzCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICphZDE5MzhfZGVlbXBbXSA9IHsiTm9uZSIsICI0OGtIeiIsICI0NC4xa0h6IiwgIjMya0h6In07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWQxOTM4X2RlZW1wX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShBRDE5MzhfREFDX0NUUkwyLCAxLCA0LCBhZDE5MzhfZGVlbXApOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTM4X3NuZF9jb250cm9sc1tdID0geworCS8qIERBQyB2b2x1bWUgY29udHJvbCAqLworCVNPQ19ET1VCTEVfUigiREFDMSAgVm9sdW1lIiwgQUQxOTM4X0RBQ19MMV9WT0wsCisJCQlBRDE5MzhfREFDX1IxX1ZPTCwgMCwgMHhGRiwgMSksCisJU09DX0RPVUJMRV9SKCJEQUMyICBWb2x1bWUiLCBBRDE5MzhfREFDX0wyX1ZPTCwKKwkJCUFEMTkzOF9EQUNfUjJfVk9MLCAwLCAweEZGLCAxKSwKKwlTT0NfRE9VQkxFX1IoIkRBQzMgIFZvbHVtZSIsIEFEMTkzOF9EQUNfTDNfVk9MLAorCQkJQUQxOTM4X0RBQ19SM19WT0wsIDAsIDB4RkYsIDEpLAorCVNPQ19ET1VCTEVfUigiREFDNCAgVm9sdW1lIiwgQUQxOTM4X0RBQ19MNF9WT0wsCisJCQlBRDE5MzhfREFDX1I0X1ZPTCwgMCwgMHhGRiwgMSksCisKKwkvKiBBREMgc3dpdGNoIGNvbnRyb2wgKi8KKwlTT0NfRE9VQkxFKCJBREMxIFN3aXRjaCIsIEFEMTkzOF9BRENfQ1RSTDAsIEFEMTkzOF9BRENMMV9NVVRFLAorCQlBRDE5MzhfQURDUjFfTVVURSwgMSwgMSksCisJU09DX0RPVUJMRSgiQURDMiBTd2l0Y2giLCBBRDE5MzhfQURDX0NUUkwwLCBBRDE5MzhfQURDTDJfTVVURSwKKwkJQUQxOTM4X0FEQ1IyX01VVEUsIDEsIDEpLAorCisJLyogREFDIHN3aXRjaCBjb250cm9sICovCisJU09DX0RPVUJMRSgiREFDMSBTd2l0Y2giLCBBRDE5MzhfREFDX0NITkxfTVVURSwgQUQxOTM4X0RBQ0wxX01VVEUsCisJCUFEMTkzOF9EQUNSMV9NVVRFLCAxLCAxKSwKKwlTT0NfRE9VQkxFKCJEQUMyIFN3aXRjaCIsIEFEMTkzOF9EQUNfQ0hOTF9NVVRFLCBBRDE5MzhfREFDTDJfTVVURSwKKwkJQUQxOTM4X0RBQ1IyX01VVEUsIDEsIDEpLAorCVNPQ19ET1VCTEUoIkRBQzMgU3dpdGNoIiwgQUQxOTM4X0RBQ19DSE5MX01VVEUsIEFEMTkzOF9EQUNMM19NVVRFLAorCQlBRDE5MzhfREFDUjNfTVVURSwgMSwgMSksCisJU09DX0RPVUJMRSgiREFDNCBTd2l0Y2giLCBBRDE5MzhfREFDX0NITkxfTVVURSwgQUQxOTM4X0RBQ0w0X01VVEUsCisJCUFEMTkzOF9EQUNSNF9NVVRFLCAxLCAxKSwKKworCS8qIEFEQyBoaWdoLXBhc3MgZmlsdGVyICovCisJU09DX1NJTkdMRSgiQURDIEhpZ2ggUGFzcyBGaWx0ZXIgU3dpdGNoIiwgQUQxOTM4X0FEQ19DVFJMMCwKKwkJCUFEMTkzOF9BRENfSElHSFBBU1NfRklMVEVSLCAxLCAwKSwKKworCS8qIERBQyBkZS1lbXBoYXNpcyAqLworCVNPQ19FTlVNKCJQbGF5YmFjayBEZWVtcGhhc2lzIiwgYWQxOTM4X2RlZW1wX2VudW0pLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGFkMTkzOF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fREFDKCJEQUMiLCAiUGxheWJhY2siLCBBRDE5MzhfREFDX0NUUkwwLCAwLCAxKSwKKwlTTkRfU09DX0RBUE1fQURDKCJBREMiLCAiQ2FwdHVyZSIsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiQURDX1BXUiIsIEFEMTkzOF9BRENfQ1RSTDAsIDAsIDEsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkRBQzFPVVQiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJEQUMyT1VUIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiREFDM09VVCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkRBQzRPVVQiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkFEQzFJTiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQURDMklOIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19wYXRoc1tdID0geworCXsgIkRBQyIsIE5VTEwsICJBRENfUFdSIiB9LAorCXsgIkFEQyIsIE5VTEwsICJBRENfUFdSIiB9LAorCXsgIkRBQzFPVVQiLCAiREFDMSBTd2l0Y2giLCAiREFDIiB9LAorCXsgIkRBQzJPVVQiLCAiREFDMiBTd2l0Y2giLCAiREFDIiB9LAorCXsgIkRBQzNPVVQiLCAiREFDMyBTd2l0Y2giLCAiREFDIiB9LAorCXsgIkRBQzRPVVQiLCAiREFDNCBTd2l0Y2giLCAiREFDIiB9LAorCXsgIkFEQyIsICJBREMxIFN3aXRjaCIsICJBREMxSU4iIH0sCisJeyAiQURDIiwgIkFEQzIgU3dpdGNoIiwgIkFEQzJJTiIgfSwKK307CisKKy8qCisgKiBEQUkgb3BzIGVudHJpZXMKKyAqLworCitzdGF0aWMgaW50IGFkMTkzOF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCWludCByZWc7CisKKwlyZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMik7CisJcmVnID0gKG11dGUgPiAwKSA/IHJlZyB8IEFEMTkzOF9EQUNfTUFTVEVSX01VVEUgOiByZWcgJgorCQkofkFEMTkzOF9EQUNfTUFTVEVSX01VVEUpOworCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMiwgcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBhZDE5MzhfcGxsX3Bvd2VyY3RybChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBjbWQpCit7CisJaW50IHJlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBRDE5MzhfUExMX0NMS19DVFJMMCk7CisJcmVnID0gKGNtZCA+IDApID8gcmVnICYgKH5BRDE5MzhfUExMX1BPV0VSRE9XTikgOiByZWcgfAorCQlBRDE5MzhfUExMX1BPV0VSRE9XTjsKKwljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9QTExfQ0xLX0NUUkwwLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWQxOTM4X3NldF90ZG1fc2xvdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IHR4X21hc2ssCisJCQkgICAgICAgdW5zaWduZWQgaW50IG1hc2ssIGludCBzbG90cywgaW50IHdpZHRoKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJaW50IGRhY19yZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMSk7CisJaW50IGFkY19yZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0FEQ19DVFJMMik7CisKKwlkYWNfcmVnICY9IH5BRDE5MzhfREFDX0NIQU5fTUFTSzsKKwlhZGNfcmVnICY9IH5BRDE5MzhfQURDX0NIQU5fTUFTSzsKKworCXN3aXRjaCAoc2xvdHMpIHsKKwljYXNlIDI6CisJCWRhY19yZWcgfD0gQUQxOTM4X0RBQ18yX0NIQU5ORUxTIDw8IEFEMTkzOF9EQUNfQ0hBTl9TSEZUOworCQlhZGNfcmVnIHw9IEFEMTkzOF9BRENfMl9DSEFOTkVMUyA8PCBBRDE5MzhfQURDX0NIQU5fU0hGVDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlkYWNfcmVnIHw9IEFEMTkzOF9EQUNfNF9DSEFOTkVMUyA8PCBBRDE5MzhfREFDX0NIQU5fU0hGVDsKKwkJYWRjX3JlZyB8PSBBRDE5MzhfQURDXzRfQ0hBTk5FTFMgPDwgQUQxOTM4X0FEQ19DSEFOX1NIRlQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJZGFjX3JlZyB8PSBBRDE5MzhfREFDXzhfQ0hBTk5FTFMgPDwgQUQxOTM4X0RBQ19DSEFOX1NIRlQ7CisJCWFkY19yZWcgfD0gQUQxOTM4X0FEQ184X0NIQU5ORUxTIDw8IEFEMTkzOF9BRENfQ0hBTl9TSEZUOworCQlicmVhazsKKwljYXNlIDE2OgorCQlkYWNfcmVnIHw9IEFEMTkzOF9EQUNfMTZfQ0hBTk5FTFMgPDwgQUQxOTM4X0RBQ19DSEFOX1NIRlQ7CisJCWFkY19yZWcgfD0gQUQxOTM4X0FEQ18xNl9DSEFOTkVMUyA8PCBBRDE5MzhfQURDX0NIQU5fU0hGVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwxLCBkYWNfcmVnKTsKKwljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDIsIGFkY19yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWQxOTM4X3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQl1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJaW50IGFkY19yZWcsIGRhY19yZWc7CisKKwlhZGNfcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDIpOworCWRhY19yZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMSk7CisKKwkvKiBBdCBwcmVzZW50LCB0aGUgZHJpdmVyIG9ubHkgc3VwcG9ydCBBVVggQURDIG1vZGUoU05EX1NPQ19EQUlGTVRfSTJTCisJICogd2l0aCBURE0pIGFuZCBBREMmREFDIFRETSBtb2RlKFNORF9TT0NfREFJRk1UX0RTUF9BKQorCSAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJYWRjX3JlZyAmPSB+QUQxOTM4X0FEQ19TRVJGTVRfTUFTSzsKKwkJYWRjX3JlZyB8PSBBRDE5MzhfQURDX1NFUkZNVF9URE07CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWFkY19yZWcgJj0gfkFEMTkzOF9BRENfU0VSRk1UX01BU0s7CisJCWFkY19yZWcgfD0gQUQxOTM4X0FEQ19TRVJGTVRfQVVYOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjogLyogbm9ybWFsIGJpdCBjbG9jayArIGZyYW1lICovCisJCWFkY19yZWcgJj0gfkFEMTkzOF9BRENfTEVGVF9ISUdIOworCQlhZGNfcmVnICY9IH5BRDE5MzhfQURDX0JDTEtfSU5WOworCQlkYWNfcmVnICY9IH5BRDE5MzhfREFDX0xFRlRfSElHSDsKKwkJZGFjX3JlZyAmPSB+QUQxOTM4X0RBQ19CQ0xLX0lOVjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjogLyogbm9ybWFsIGJjbGsgKyBpbnZlcnQgZnJtICovCisJCWFkY19yZWcgfD0gQUQxOTM4X0FEQ19MRUZUX0hJR0g7CisJCWFkY19yZWcgJj0gfkFEMTkzOF9BRENfQkNMS19JTlY7CisJCWRhY19yZWcgfD0gQUQxOTM4X0RBQ19MRUZUX0hJR0g7CisJCWRhY19yZWcgJj0gfkFEMTkzOF9EQUNfQkNMS19JTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6IC8qIGludmVydCBiY2xrICsgbm9ybWFsIGZybSAqLworCQlhZGNfcmVnICY9IH5BRDE5MzhfQURDX0xFRlRfSElHSDsKKwkJYWRjX3JlZyB8PSBBRDE5MzhfQURDX0JDTEtfSU5WOworCQlkYWNfcmVnICY9IH5BRDE5MzhfREFDX0xFRlRfSElHSDsKKwkJZGFjX3JlZyB8PSBBRDE5MzhfREFDX0JDTEtfSU5WOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6IC8qIGludmVydCBiY2xrICsgZnJtICovCisJCWFkY19yZWcgfD0gQUQxOTM4X0FEQ19MRUZUX0hJR0g7CisJCWFkY19yZWcgfD0gQUQxOTM4X0FEQ19CQ0xLX0lOVjsKKwkJZGFjX3JlZyB8PSBBRDE5MzhfREFDX0xFRlRfSElHSDsKKwkJZGFjX3JlZyB8PSBBRDE5MzhfREFDX0JDTEtfSU5WOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOiAvKiBjb2RlYyBjbGsgJiBmcm0gbWFzdGVyICovCisJCWFkY19yZWcgfD0gQUQxOTM4X0FEQ19MQ1JfTUFTVEVSOworCQlhZGNfcmVnIHw9IEFEMTkzOF9BRENfQkNMS19NQVNURVI7CisJCWRhY19yZWcgfD0gQUQxOTM4X0RBQ19MQ1JfTUFTVEVSOworCQlkYWNfcmVnIHw9IEFEMTkzOF9EQUNfQkNMS19NQVNURVI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGTTogLyogY29kZWMgY2xrIHNsYXZlICYgZnJtIG1hc3RlciAqLworCQlhZGNfcmVnIHw9IEFEMTkzOF9BRENfTENSX01BU1RFUjsKKwkJYWRjX3JlZyAmPSB+QUQxOTM4X0FEQ19CQ0xLX01BU1RFUjsKKwkJZGFjX3JlZyB8PSBBRDE5MzhfREFDX0xDUl9NQVNURVI7CisJCWRhY19yZWcgJj0gfkFEMTkzOF9EQUNfQkNMS19NQVNURVI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzogLyogY29kZWMgY2xrIG1hc3RlciAmIGZyYW1lIHNsYXZlICovCisJCWFkY19yZWcgJj0gfkFEMTkzOF9BRENfTENSX01BU1RFUjsKKwkJYWRjX3JlZyB8PSBBRDE5MzhfQURDX0JDTEtfTUFTVEVSOworCQlkYWNfcmVnICY9IH5BRDE5MzhfREFDX0xDUl9NQVNURVI7CisJCWRhY19yZWcgfD0gQUQxOTM4X0RBQ19CQ0xLX01BU1RFUjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOiAvKiBjb2RlYyBjbGsgJiBmcm0gc2xhdmUgKi8KKwkJYWRjX3JlZyAmPSB+QUQxOTM4X0FEQ19MQ1JfTUFTVEVSOworCQlhZGNfcmVnICY9IH5BRDE5MzhfQURDX0JDTEtfTUFTVEVSOworCQlkYWNfcmVnICY9IH5BRDE5MzhfREFDX0xDUl9NQVNURVI7CisJCWRhY19yZWcgJj0gfkFEMTkzOF9EQUNfQkNMS19NQVNURVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMiwgYWRjX3JlZyk7CisJY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwxLCBkYWNfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkMTkzOF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlpbnQgd29yZF9sZW4gPSAwLCByZWcgPSAwOworCisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCS8qIGJpdCBzaXplICovCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQl3b3JkX2xlbiA9IDM7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQl3b3JkX2xlbiA9IDE7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJd29yZF9sZW4gPSAwOworCQlicmVhazsKKwl9CisKKwlyZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMik7CisJcmVnID0gKHJlZyAmICh+QUQxOTM4X0RBQ19XT1JEX0xFTl9NQVNLKSkgfCB3b3JkX2xlbjsKKwljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDIsIHJlZyk7CisKKwlyZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0FEQ19DVFJMMSk7CisJcmVnID0gKHJlZyAmICh+QUQxOTM4X0FEQ19XT1JEX0xFTl9NQVNLKSkgfCB3b3JkX2xlbjsKKwljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDEsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZDE5Mzhfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWFkMTkzOF9wbGxfcG93ZXJjdHJsKGNvZGVjLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCWFkMTkzOF9wbGxfcG93ZXJjdHJsKGNvZGVjLCAwKTsKKwkJYnJlYWs7CisJfQorCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpbnRlcmZhY2UgdG8gcmVhZC93cml0ZSBhZDE5MzggcmVnaXN0ZXIKKyAqLworCisjZGVmaW5lIEFEMTkzOF9TUElfQUREUiAgICAweDQKKyNkZWZpbmUgQUQxOTM4X1NQSV9SRUFEICAgIDB4MQorI2RlZmluZSBBRDE5MzhfU1BJX0JVRkxFTiAgMworCisvKgorICogd3JpdGUgdG8gdGhlIGFkMTkzOCByZWdpc3RlciBzcGFjZQorICovCisKK3N0YXRpYyBpbnQgYWQxOTM4X3dyaXRlX3JlZyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1OCAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh2YWx1ZSAhPSByZWdfY2FjaGVbcmVnXSkgeworCQl1aW50OF90IGJ1ZltBRDE5MzhfU1BJX0JVRkxFTl07CisJCXN0cnVjdCBzcGlfdHJhbnNmZXIgdCA9IHsKKwkJCS50eF9idWYgPSBidWYsCisJCQkubGVuID0gQUQxOTM4X1NQSV9CVUZMRU4sCisJCX07CisJCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCisJCWJ1ZlswXSA9IEFEMTkzOF9TUElfQUREUiA8PCAxOworCQlidWZbMV0gPSByZWc7CisJCWJ1ZlsyXSA9IHZhbHVlOworCQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKwkJcmV0ID0gc3BpX3N5bmMoY29kZWMtPmNvbnRyb2xfZGF0YSwgJm0pOworCQlpZiAocmV0ID09IDApCisJCQlyZWdfY2FjaGVbcmVnXSA9IHZhbHVlOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiByZWFkIGZyb20gdGhlIGFkMTkzOCByZWdpc3RlciBzcGFjZSBjYWNoZQorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWQxOTM4X3JlYWRfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkJICB1bnNpZ25lZCBpbnQgcmVnKQoreworCXU4ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCisJaWYgKHJlZyA+PSBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHJlZ19jYWNoZVtyZWddOworfQorCisvKgorICogcmVhZCBmcm9tIHRoZSBhZDE5MzggcmVnaXN0ZXIgc3BhY2UKKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGFkMTkzOF9yZWFkX3JlZyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJCQl1bnNpZ25lZCBpbnQgcmVnKQoreworCWNoYXIgd19idWZbQUQxOTM4X1NQSV9CVUZMRU5dOworCWNoYXIgcl9idWZbQUQxOTM4X1NQSV9CVUZMRU5dOworCWludCByZXQ7CisKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQgPSB7CisJCS50eF9idWYgPSB3X2J1ZiwKKwkJLnJ4X2J1ZiA9IHJfYnVmLAorCQkubGVuID0gQUQxOTM4X1NQSV9CVUZMRU4sCisJfTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKworCXdfYnVmWzBdID0gKEFEMTkzOF9TUElfQUREUiA8PCAxKSB8IEFEMTkzOF9TUElfUkVBRDsKKwl3X2J1ZlsxXSA9IHJlZzsKKwl3X2J1ZlsyXSA9IDA7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOworCXJldCA9IHNwaV9zeW5jKGNvZGVjLT5jb250cm9sX2RhdGEsICZtKTsKKwlpZiAocmV0ID09IDApCisJCXJldHVybglyX2J1ZlsyXTsKKwllbHNlCisJCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGFkMTkzOF9maWxsX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgaTsKKwl1OCAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+cmVnX2NhY2hlX3NpemU7IGkrKykgeworCQlpbnQgcmV0ID0gYWQxOTM4X3JlYWRfcmVnKGNvZGVjLCBpKTsKKwkJaWYgKHJldCA9PSAtRUlPKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwgIkFEMTkzOCBTUEkgcmVhZCBmYWlsdXJlXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJcmVnX2NhY2hlW2ldID0gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZDE5Mzhfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCBhZDE5MzhfcHJpdiAqYWQxOTM4OworCisJYWQxOTM4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkMTkzOF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFkMTkzOCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJmFkMTkzOC0+Y29kZWM7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKKwljb2RlYy0+ZGV2ID0gJnNwaS0+ZGV2OworCisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgYWQxOTM4KTsKKworCXJldHVybiBhZDE5MzhfcmVnaXN0ZXIoYWQxOTM4KTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWQxOTM4X3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgYWQxOTM4X3ByaXYgKmFkMTkzOCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJYWQxOTM4X3VucmVnaXN0ZXIoYWQxOTM4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGFkMTkzOF9zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImFkMTkzOCIsCisJCS5idXMJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBhZDE5Mzhfc3BpX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYWQxOTM4X3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYWQxOTM4X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcyA9IGFkMTkzOF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZSA9IGFkMTkzOF9tdXRlLAorCS5zZXRfdGRtX3Nsb3QgPSBhZDE5Mzhfc2V0X3RkbV9zbG90LAorCS5zZXRfZm10ID0gYWQxOTM4X3NldF9kYWlfZm10LAorfTsKKworLyogY29kZWMgREFJIGluc3RhbmNlICovCitzdHJ1Y3Qgc25kX3NvY19kYWkgYWQxOTM4X2RhaSA9IHsKKwkubmFtZSA9ICJBRDE5MzgiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSA4LAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSA0LAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFLAorCX0sCisJLm9wcyA9ICZhZDE5MzhfZGFpX29wcywKK307CitFWFBPUlRfU1lNQk9MX0dQTChhZDE5MzhfZGFpKTsKKworc3RhdGljIGludCBhZDE5MzhfcmVnaXN0ZXIoc3RydWN0IGFkMTkzOF9wcml2ICphZDE5MzgpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmYWQxOTM4LT5jb2RlYzsKKworCWlmIChhZDE5MzhfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBhZDE5MzggaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisJY29kZWMtPnByaXZhdGVfZGF0YSA9IGFkMTkzODsKKwljb2RlYy0+cmVnX2NhY2hlID0gYWQxOTM4LT5yZWdfY2FjaGU7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQUQxOTM4X05VTV9SRUdTOworCWNvZGVjLT5uYW1lID0gIkFEMTkzOCI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmRhaSA9ICZhZDE5MzhfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+d3JpdGUgPSBhZDE5Mzhfd3JpdGVfcmVnOworCWNvZGVjLT5yZWFkID0gYWQxOTM4X3JlYWRfcmVnX2NhY2hlOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJYWQxOTM4X2RhaS5kZXYgPSBjb2RlYy0+ZGV2OworCWFkMTkzOF9jb2RlYyA9IGNvZGVjOworCisJLyogZGVmYXVsdCBzZXR0aW5nIGZvciBhZDE5MzggKi8KKworCS8qIHVubXV0ZSBkYWMgY2hhbm5lbHMgKi8KKwljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ0hOTF9NVVRFLCAweDApOworCS8qIGRlLWVtcGhhc2lzOiA0OGtIeiwgcG93ZWRvd24gZGFjICovCisJY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwyLCAweDFBKTsKKwkvKiBwb3dlcmRvd24gZGFjLCBkYWMgaW4gdGRtIG1vZGUgKi8KKwljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDAsIDB4NDEpOworCS8qIGhpZ2gtcGFzcyBmaWx0ZXIgZW5hYmxlICovCisJY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwwLCAweDMpOworCS8qIHNhdGEgZGVsYXk9MSwgYWRjIGF1eCBtb2RlICovCisJY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwxLCAweDQzKTsKKwkvKiBwbGwgaW5wdXQ6IG1jbGtpL3hpICovCisJY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfUExMX0NMS19DVFJMMCwgMHg5RCk7CisJY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfUExMX0NMS19DVFJMMSwgMHgwNCk7CisKKwlhZDE5MzhfZmlsbF9jYWNoZShjb2RlYyk7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJa2ZyZWUoYWQxOTM4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmYWQxOTM4X2RhaSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworCQlrZnJlZShhZDE5MzgpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZDE5MzhfdW5yZWdpc3RlcihzdHJ1Y3QgYWQxOTM4X3ByaXYgKmFkMTkzOCkKK3sKKwlhZDE5Mzhfc2V0X2JpYXNfbGV2ZWwoJmFkMTkzOC0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmFkMTkzOF9kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmYWQxOTM4LT5jb2RlYyk7CisJa2ZyZWUoYWQxOTM4KTsKKwlhZDE5MzhfY29kZWMgPSBOVUxMOworfQorCitzdGF0aWMgaW50IGFkMTkzOF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAwOworCisJaWYgKGFkMTkzOF9jb2RlYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIGRldmljZSBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBhZDE5MzhfY29kZWM7CisJY29kZWMgPSBhZDE5MzhfY29kZWM7CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXM6ICVkXG4iLCByZXQpOworCQlnb3RvIHBjbV9lcnI7CisJfQorCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFkMTkzOF9zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUoYWQxOTM4X3NuZF9jb250cm9scykpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGFkMTkzOF9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKGFkMTkzOF9kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fcGF0aHMsIEFSUkFZX1NJWkUoYXVkaW9fcGF0aHMpKTsKKwlzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoY29kZWMpOworCisJYWQxOTM4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjYXJkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBjYXJkX2VycjsKKwl9CisKKwlyZXR1cm4gcmV0OworCitjYXJkX2VycjoKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CitwY21fZXJyOgorCXJldHVybiByZXQ7Cit9CisKKy8qIHBvd2VyIGRvd24gY2hpcCAqLworc3RhdGljIGludCBhZDE5MzhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFkMTkzOF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwlhZDE5Mzhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkMTkzOF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwlpZiAoY29kZWMtPnN1c3BlbmRfYmlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT04pCisJCWFkMTkzOF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09OKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYWQxOTM4X3N1c3BlbmQgTlVMTAorI2RlZmluZSBhZDE5MzhfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9hZDE5MzggPSB7CisJLnByb2JlID0gCWFkMTkzOF9wcm9iZSwKKwkucmVtb3ZlID0gCWFkMTkzOF9yZW1vdmUsCisJLnN1c3BlbmQgPSAgICAgIGFkMTkzOF9zdXNwZW5kLAorCS5yZXN1bWUgPSAgICAgICBhZDE5MzhfcmVzdW1lLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfYWQxOTM4KTsKKworc3RhdGljIGludCBfX2luaXQgYWQxOTM4X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmYWQxOTM4X3NwaV9kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBhZDE5MzggU1BJIGRyaXZlcjogJWRcbiIsCisJCQkJcmV0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQoYWQxOTM4X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYWQxOTM4X2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmFkMTkzOF9zcGlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGFkMTkzOF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIGFkMTkzOCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkJhcnJ5IFNvbmcgIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkMTkzOC5oIGIvc291bmQvc29jL2NvZGVjcy9hZDE5MzguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTNjNDhjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE5MzguaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIEZpbGU6ICAgICAgICAgc291bmQvc29jL2NvZGVjcy9hZDE4MzYuaAorICogQmFzZWQgb246CisgKiBBdXRob3I6ICAgICAgIEJhcnJ5IFNvbmcgPEJhcnJ5LlNvbmdAYW5hbG9nLmNvbT4KKyAqCisgKiBDcmVhdGVkOiAgICAgIE1heSAyNSwgMjAwOQorICogRGVzY3JpcHRpb246ICBkZWZpbml0aW9ucyBmb3IgQUQxOTM4IHJlZ2lzdGVycworICoKKyAqIE1vZGlmaWVkOgorICoKKyAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKKyAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgX19BRDE5MzhfSF9fCisjZGVmaW5lIF9fQUQxOTM4X0hfXworCisjZGVmaW5lIEFEMTkzOF9QTExfQ0xLX0NUUkwwICAgIDAKKyNkZWZpbmUgQUQxOTM4X1BMTF9QT1dFUkRPV04gICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQUQxOTM4X1BMTF9DTEtfQ1RSTDEgICAgMQorI2RlZmluZSBBRDE5MzhfREFDX0NUUkwwICAgICAgICAyCisjZGVmaW5lIEFEMTkzOF9EQUNfUE9XRVJET1dOICAgICAgICAgICAweDAxCisjZGVmaW5lIEFEMTkzOF9EQUNfU0VSRk1UX01BU0sJCTB4QzAKKyNkZWZpbmUgQUQxOTM4X0RBQ19TRVJGTVRfU1RFUkVPCSgwIDw8IDYpCisjZGVmaW5lIEFEMTkzOF9EQUNfU0VSRk1UX1RETQkJKDEgPDwgNikKKyNkZWZpbmUgQUQxOTM4X0RBQ19DVFJMMSAgICAgICAgMworI2RlZmluZSBBRDE5MzhfREFDXzJfQ0hBTk5FTFMgICAwCisjZGVmaW5lIEFEMTkzOF9EQUNfNF9DSEFOTkVMUyAgIDEKKyNkZWZpbmUgQUQxOTM4X0RBQ184X0NIQU5ORUxTICAgMgorI2RlZmluZSBBRDE5MzhfREFDXzE2X0NIQU5ORUxTICAzCisjZGVmaW5lIEFEMTkzOF9EQUNfQ0hBTl9TSEZUICAgIDEKKyNkZWZpbmUgQUQxOTM4X0RBQ19DSEFOX01BU0sgICAgKDMgPDwgQUQxOTM4X0RBQ19DSEFOX1NIRlQpCisjZGVmaW5lIEFEMTkzOF9EQUNfTENSX01BU1RFUiAgICgxIDw8IDQpCisjZGVmaW5lIEFEMTkzOF9EQUNfQkNMS19NQVNURVIgICgxIDw8IDUpCisjZGVmaW5lIEFEMTkzOF9EQUNfTEVGVF9ISUdIICAgICgxIDw8IDMpCisjZGVmaW5lIEFEMTkzOF9EQUNfQkNMS19JTlYgICAgICgxIDw8IDcpCisjZGVmaW5lIEFEMTkzOF9EQUNfQ1RSTDIgICAgICAgIDQKKyNkZWZpbmUgQUQxOTM4X0RBQ19XT1JEX0xFTl9NQVNLCTB4QworI2RlZmluZSBBRDE5MzhfREFDX01BU1RFUl9NVVRFICAxCisjZGVmaW5lIEFEMTkzOF9EQUNfQ0hOTF9NVVRFICAgIDUKKyNkZWZpbmUgQUQxOTM4X0RBQ0wxX01VVEUgICAgICAgMAorI2RlZmluZSBBRDE5MzhfREFDUjFfTVVURSAgICAgICAxCisjZGVmaW5lIEFEMTkzOF9EQUNMMl9NVVRFICAgICAgIDIKKyNkZWZpbmUgQUQxOTM4X0RBQ1IyX01VVEUgICAgICAgMworI2RlZmluZSBBRDE5MzhfREFDTDNfTVVURSAgICAgICA0CisjZGVmaW5lIEFEMTkzOF9EQUNSM19NVVRFICAgICAgIDUKKyNkZWZpbmUgQUQxOTM4X0RBQ0w0X01VVEUgICAgICAgNgorI2RlZmluZSBBRDE5MzhfREFDUjRfTVVURSAgICAgICA3CisjZGVmaW5lIEFEMTkzOF9EQUNfTDFfVk9MICAgICAgIDYKKyNkZWZpbmUgQUQxOTM4X0RBQ19SMV9WT0wgICAgICAgNworI2RlZmluZSBBRDE5MzhfREFDX0wyX1ZPTCAgICAgICA4CisjZGVmaW5lIEFEMTkzOF9EQUNfUjJfVk9MICAgICAgIDkKKyNkZWZpbmUgQUQxOTM4X0RBQ19MM19WT0wgICAgICAgMTAKKyNkZWZpbmUgQUQxOTM4X0RBQ19SM19WT0wgICAgICAgMTEKKyNkZWZpbmUgQUQxOTM4X0RBQ19MNF9WT0wgICAgICAgMTIKKyNkZWZpbmUgQUQxOTM4X0RBQ19SNF9WT0wgICAgICAgMTMKKyNkZWZpbmUgQUQxOTM4X0FEQ19DVFJMMCAgICAgICAgMTQKKyNkZWZpbmUgQUQxOTM4X0FEQ19QT1dFUkRPV04gICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQUQxOTM4X0FEQ19ISUdIUEFTU19GSUxURVIJMQorI2RlZmluZSBBRDE5MzhfQURDTDFfTVVURSAJCTIKKyNkZWZpbmUgQUQxOTM4X0FEQ1IxX01VVEUgCQkzCisjZGVmaW5lIEFEMTkzOF9BRENMMl9NVVRFIAkJNAorI2RlZmluZSBBRDE5MzhfQURDUjJfTVVURSAJCTUKKyNkZWZpbmUgQUQxOTM4X0FEQ19DVFJMMSAgICAgICAgMTUKKyNkZWZpbmUgQUQxOTM4X0FEQ19TRVJGTVRfTUFTSwkJMHg2MAorI2RlZmluZSBBRDE5MzhfQURDX1NFUkZNVF9TVEVSRU8JKDAgPDwgNSkKKyNkZWZpbmUgQUQxOTM4X0FEQ19TRVJGTVRfVERNCQkoMSA8PCAyKQorI2RlZmluZSBBRDE5MzhfQURDX1NFUkZNVF9BVVgJCSgyIDw8IDUpCisjZGVmaW5lIEFEMTkzOF9BRENfV09SRF9MRU5fTUFTSwkweDMKKyNkZWZpbmUgQUQxOTM4X0FEQ19DVFJMMiAgICAgICAgMTYKKyNkZWZpbmUgQUQxOTM4X0FEQ18yX0NIQU5ORUxTICAgMAorI2RlZmluZSBBRDE5MzhfQURDXzRfQ0hBTk5FTFMgICAxCisjZGVmaW5lIEFEMTkzOF9BRENfOF9DSEFOTkVMUyAgIDIKKyNkZWZpbmUgQUQxOTM4X0FEQ18xNl9DSEFOTkVMUyAgMworI2RlZmluZSBBRDE5MzhfQURDX0NIQU5fU0hGVCAgICA0CisjZGVmaW5lIEFEMTkzOF9BRENfQ0hBTl9NQVNLICAgICgzIDw8IEFEMTkzOF9BRENfQ0hBTl9TSEZUKQorI2RlZmluZSBBRDE5MzhfQURDX0xDUl9NQVNURVIgICAoMSA8PCAzKQorI2RlZmluZSBBRDE5MzhfQURDX0JDTEtfTUFTVEVSICAoMSA8PCA2KQorI2RlZmluZSBBRDE5MzhfQURDX0xFRlRfSElHSCAgICAoMSA8PCAyKQorI2RlZmluZSBBRDE5MzhfQURDX0JDTEtfSU5WICAgICAoMSA8PCAxKQorCisjZGVmaW5lIEFEMTkzOF9OVU1fUkVHUyAgICAgICAgICAxNworCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIGFkMTkzOF9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfYWQxOTM4OworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jIGIvc291bmQvc29jL2NvZGVjcy9hazQ1MzUuYwppbmRleCBkZDMzODAyLi4wYWJlYzBkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMKQEAgLTU5LDIxICs1OSw2IEBACiAJcmV0dXJuIGNhY2hlW3JlZ107CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFrNDUzNV9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQl1bnNpZ25lZCBpbnQgcmVnKQotewotCXU4IGRhdGE7Ci0JZGF0YSA9IHJlZzsKLQotCWlmIChjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgJmRhdGEsIDEpICE9IDEpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKGNvZGVjLT5od19yZWFkKGNvZGVjLT5jb250cm9sX2RhdGEsICZkYXRhLCAxKSAhPSAxKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiBkYXRhOwotfTsKLQogLyoKICAqIHdyaXRlIGFrNDUzNSByZWdpc3RlciBjYWNoZQogICovCkBAIC02MzUsNyArNjIwLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCiAJaWYgKHNldHVwLT5pMmNfYWRkcmVzcykgewogCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7Ci0JCWNvZGVjLT5od19yZWFkID0gKGh3X3JlYWRfdClpMmNfbWFzdGVyX3JlY3Y7CiAJCXJldCA9IGFrNDUzNV9hZGRfaTJjX2RldmljZShwZGV2LCBzZXR1cCk7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FrNDY0Mi5jIGIvc291bmQvc29jL2NvZGVjcy9hazQ2NDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDU3YzdiCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQ2NDIuYwpAQCAtMCwwICsxLDUwMiBAQAorLyoKKyAqIGFrNDY0Mi5jICAtLSAgQUs0NjQyL0FLNDY0MyBBTFNBIFNvYyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBCYXNlZCBvbiB3bTg3MzEuYyBieSBSaWNoYXJkIFB1cmRpZQorICogQmFzZWQgb24gYWs0NTM1LmMgYnkgUmljaGFyZCBQdXJkaWUKKyAqIEJhc2VkIG9uIHdtODc1My5jIGJ5IExpYW0gR2lyZHdvb2QKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qICoqIENBVVRJT04gKioKKyAqCisgKiBUaGlzIGlzIHZlcnkgc2ltcGxlIGRyaXZlci4KKyAqIEl0IGNhbiB1c2UgaGVhZHBob25lIG91dHB1dCAvIHN0ZXJlbyBpbnB1dCBvbmx5CisgKgorICogQUs0NjQyIGlzIG5vdCB0ZXN0ZWQuCisgKiBBSzQ2NDMgaXMgdGVzdGVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKworI2luY2x1ZGUgImFrNDY0Mi5oIgorCisjZGVmaW5lIEFLNDY0Ml9WRVJTSU9OICIwLjAuMSIKKworI2RlZmluZSBQV19NR01UMQkweDAwCisjZGVmaW5lIFBXX01HTVQyCTB4MDEKKyNkZWZpbmUgU0dfU0wxCQkweDAyCisjZGVmaW5lIFNHX1NMMgkJMHgwMworI2RlZmluZSBNRF9DVEwxCQkweDA0CisjZGVmaW5lIE1EX0NUTDIJCTB4MDUKKyNkZWZpbmUgVElNRVIJCTB4MDYKKyNkZWZpbmUgQUxDX0NUTDEJMHgwNworI2RlZmluZSBBTENfQ1RMMgkweDA4CisjZGVmaW5lIExfSVZDCQkweDA5CisjZGVmaW5lIExfRFZDCQkweDBhCisjZGVmaW5lIEFMQ19DVEwzCTB4MGIKKyNkZWZpbmUgUl9JVkMJCTB4MGMKKyNkZWZpbmUgUl9EVkMJCTB4MGQKKyNkZWZpbmUgTURfQ1RMMwkJMHgwZQorI2RlZmluZSBNRF9DVEw0CQkweDBmCisjZGVmaW5lIFBXX01HTVQzCTB4MTAKKyNkZWZpbmUgREZfUwkJMHgxMQorI2RlZmluZSBGSUwzXzAJCTB4MTIKKyNkZWZpbmUgRklMM18xCQkweDEzCisjZGVmaW5lIEZJTDNfMgkJMHgxNAorI2RlZmluZSBGSUwzXzMJCTB4MTUKKyNkZWZpbmUgRVFfMAkJMHgxNgorI2RlZmluZSBFUV8xCQkweDE3CisjZGVmaW5lIEVRXzIJCTB4MTgKKyNkZWZpbmUgRVFfMwkJMHgxOQorI2RlZmluZSBFUV80CQkweDFhCisjZGVmaW5lIEVRXzUJCTB4MWIKKyNkZWZpbmUgRklMMV8wCQkweDFjCisjZGVmaW5lIEZJTDFfMQkJMHgxZAorI2RlZmluZSBGSUwxXzIJCTB4MWUKKyNkZWZpbmUgRklMMV8zCQkweDFmCisjZGVmaW5lIFBXX01HTVQ0CTB4MjAKKyNkZWZpbmUgTURfQ1RMNQkJMHgyMQorI2RlZmluZSBMT19NUwkJMHgyMgorI2RlZmluZSBIUF9NUwkJMHgyMworI2RlZmluZSBTUEtfTVMJCTB4MjQKKworI2RlZmluZSBBSzQ2NDJfQ0FDSEVSRUdOVU0gCTB4MjUKKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfYWs0NjQyOworCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCBhazQ2NDJfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdW5zaWduZWQgaW50IHN5c2NsazsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqYWs0NjQyX2NvZGVjOworCisvKgorICogYWs0NjQyIHJlZ2lzdGVyIGNhY2hlCisgKi8KK3N0YXRpYyBjb25zdCB1MTYgYWs0NjQyX3JlZ1tBSzQ2NDJfQ0FDSEVSRUdOVU1dID0geworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDEsIDB4MDAwMCwKKwkweDAwMDIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMGUxLCAweDAwZTEsIDB4MDAxOCwgMHgwMDAwLAorCTB4MDBlMSwgMHgwMDE4LCAweDAwMTEsIDB4MDAwOCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwKK307CisKKy8qCisgKiByZWFkIGFrNDY0MiByZWdpc3RlciBjYWNoZQorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhazQ2NDJfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCXVuc2lnbmVkIGludCByZWcpCit7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJaWYgKHJlZyA+PSBBSzQ2NDJfQ0FDSEVSRUdOVU0pCisJCXJldHVybiAtMTsKKwlyZXR1cm4gY2FjaGVbcmVnXTsKK30KKworLyoKKyAqIHdyaXRlIGFrNDY0MiByZWdpc3RlciBjYWNoZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWs0NjQyX3dyaXRlX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJdTE2IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCWlmIChyZWcgPj0gQUs0NjQyX0NBQ0hFUkVHTlVNKQorCQlyZXR1cm47CisKKwljYWNoZVtyZWddID0gdmFsdWU7Cit9CisKKy8qCisgKiB3cml0ZSB0byB0aGUgQUs0NjQyIHJlZ2lzdGVyIHNwYWNlCisgKi8KK3N0YXRpYyBpbnQgYWs0NjQyX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdTggZGF0YVsyXTsKKworCS8qIGRhdGEgaXMKKwkgKiAgIEQxNS4uRDggQUs0NjQyIHJlZ2lzdGVyIG9mZnNldAorCSAqICAgRDcuLi5EMCByZWdpc3RlciBkYXRhCisJICovCisJZGF0YVswXSA9IHJlZyAmIDB4ZmY7CisJZGF0YVsxXSA9IHZhbHVlICYgMHhmZjsKKworCWlmIChjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMikgPT0gMikgeworCQlhazQ2NDJfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCByZWcsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGFrNDY0Ml9zeW5jKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpbnQgaSwgciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQUs0NjQyX0NBQ0hFUkVHTlVNOyBpKyspCisJCXIgfD0gYWs0NjQyX3dyaXRlKGNvZGVjLCBpLCBjYWNoZVtpXSk7CisKKwlyZXR1cm4gcjsKK307CisKK3N0YXRpYyBpbnQgYWs0NjQyX2RhaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJaW50IGlzX3BsYXkgPSBzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisKKwlpZiAoaXNfcGxheSkgeworCQkvKgorCQkgKiBzdGFydCBoZWFkcGhvbmUgb3V0cHV0CisJCSAqCisJCSAqIFBMTCwgTWFzdGVyIE1vZGUKKwkJICogQXVkaW8gSS9GIEZvcm1hdCA6TVNCIGp1c3RpZmllZCAoQURDICYgREFDKQorCQkgKiBTYW1wbGluZyBGcmVxdWVuY3k6IDQ0LjFrSHoKKwkJICogRGlnaXRhbCBWb2x1bWU6IOKIkjhkQgorCQkgKiBCYXNzIEJvb3N0IExldmVsIDogTWlkZGxlCisJCSAqCisJCSAqIFRoaXMgb3BlcmF0aW9uIGNhbWUgZnJvbSBleGFtcGxlIGNvZGUgb2YKKwkJICogIkFTQUhJIEtBU0VJIEFLNDY0MiIgKGphcGFuZXNlKSBtYW51YWwgcDk3LgorCQkgKgorCQkgKiBFeGFtcGxlIGNvZGUgdXNlIDB4MzksIDB4NzkgdmFsdWUgZm9yIDB4MDEgYWRkcmVzcywKKwkJICogQnV0IHdlIG5lZWQgTUNLTyAoMHgwMikgYml0IG5vdworCQkgKi8KKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDA1LCAweDI3KTsKKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDBmLCAweDA5KTsKKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDBlLCAweDE5KTsKKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDA5LCAweDkxKTsKKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDBjLCAweDkxKTsKKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDBhLCAweDI4KTsKKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDBkLCAweDI4KTsKKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDAwLCAweDY0KTsKKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDAxLCAweDNiKTsgLyogKyBNQ0tPIGJpdCAqLworCQlhazQ2NDJfd3JpdGUoY29kZWMsIDB4MDEsIDB4N2IpOyAvKiArIE1DS08gYml0ICovCisJfSBlbHNlIHsKKwkJLyoKKwkJICogc3RhcnQgc3RlcmVvIGlucHV0CisJCSAqCisJCSAqIFBMTCBNYXN0ZXIgTW9kZQorCQkgKiBBdWRpbyBJL0YgRm9ybWF0Ok1TQiBqdXN0aWZpZWQgKEFEQyAmIERBQykKKwkJICogU2FtcGxpbmcgRnJlcXVlbmN5OjQ0LjFrSHoKKwkJICogUHJlIE1JQyBBTVA6KzIwZEIKKwkJICogTUlDIFBvd2VyIE9uCisJCSAqIEFMQyBzZXR0aW5nOlJlZmVyIHRvIFRhYmxlIDM1CisJCSAqIEFMQyBiaXQ94oCcMeKAnQorCQkgKgorCQkgKiBUaGlzIG9wZXJhdGlvbiBjYW1lIGZyb20gZXhhbXBsZSBjb2RlIG9mCisJCSAqICJBU0FISSBLQVNFSSBBSzQ2NDIiIChqYXBhbmVzZSkgbWFudWFsIHA5NC4KKwkJICovCisJCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwNSwgMHgyNyk7CisJCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwMiwgMHgwNSk7CisJCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwNiwgMHgzYyk7CisJCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwOCwgMHhlMSk7CisJCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwYiwgMHgwMCk7CisJCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwNywgMHgyMSk7CisJCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwMCwgMHg0MSk7CisJCWFrNDY0Ml93cml0ZShjb2RlYywgMHgxMCwgMHgwMSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFrNDY0Ml9kYWlfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJaW50IGlzX3BsYXkgPSBzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisKKwlpZiAoaXNfcGxheSkgeworCQkvKiBzdG9wIGhlYWRwaG9uZSBvdXRwdXQgKi8KKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDAxLCAweDNiKTsKKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDAxLCAweDBiKTsKKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDAwLCAweDQwKTsKKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDBlLCAweDExKTsKKwkJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDBmLCAweDA4KTsKKwl9IGVsc2UgeworCQkvKiBzdG9wIHN0ZXJlbyBpbnB1dCAqLworCQlhazQ2NDJfd3JpdGUoY29kZWMsIDB4MDAsIDB4NDApOworCQlhazQ2NDJfd3JpdGUoY29kZWMsIDB4MTAsIDB4MDApOworCQlhazQ2NDJfd3JpdGUoY29kZWMsIDB4MDcsIDB4MDEpOworCX0KK30KKworc3RhdGljIGludCBhazQ2NDJfZGFpX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgYWs0NjQyX3ByaXYgKmFrNDY0MiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlhazQ2NDItPnN5c2NsayA9IGZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGFrNDY0Ml9kYWlfb3BzID0geworCS5zdGFydHVwCT0gYWs0NjQyX2RhaV9zdGFydHVwLAorCS5zaHV0ZG93bgk9IGFrNDY0Ml9kYWlfc2h1dGRvd24sCisJLnNldF9zeXNjbGsJPSBhazQ2NDJfZGFpX3NldF9zeXNjbGssCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgYWs0NjQyX2RhaSA9IHsKKwkubmFtZSA9ICJBSzQ2NDIiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIH0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIH0sCisJLm9wcyA9ICZhazQ2NDJfZGFpX29wcywKK307CitFWFBPUlRfU1lNQk9MX0dQTChhazQ2NDJfZGFpKTsKKworc3RhdGljIGludCBhazQ2NDJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJYWs0NjQyX3N5bmMoY29kZWMpOworCXJldHVybiAwOworfQorCisvKgorICogaW5pdGlhbGlzZSB0aGUgQUs0NjQyIGRyaXZlcgorICogcmVnaXN0ZXIgdGhlIG1peGVyIGFuZCBkc3AgaW50ZXJmYWNlcyB3aXRoIHRoZSBrZXJuZWwKKyAqLworc3RhdGljIGludCBhazQ2NDJfaW5pdChzdHJ1Y3QgYWs0NjQyX3ByaXYgKmFrNDY0MikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmYWs0NjQyLT5jb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChhazQ2NDJfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBhazQ2NDIgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhCT0gYWs0NjQyOworCWNvZGVjLT5uYW1lCQk9ICJBSzQ2NDIiOworCWNvZGVjLT5vd25lcgkJPSBUSElTX01PRFVMRTsKKwljb2RlYy0+cmVhZAkJPSBhazQ2NDJfcmVhZF9yZWdfY2FjaGU7CisJY29kZWMtPndyaXRlCQk9IGFrNDY0Ml93cml0ZTsKKwljb2RlYy0+ZGFpCQk9ICZhazQ2NDJfZGFpOworCWNvZGVjLT5udW1fZGFpCQk9IDE7CisJY29kZWMtPmh3X3dyaXRlCQk9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUJPSBBUlJBWV9TSVpFKGFrNDY0Ml9yZWcpOworCWNvZGVjLT5yZWdfY2FjaGUJPSBrbWVtZHVwKGFrNDY0Ml9yZWcsCisJCQkJCSAgc2l6ZW9mKGFrNDY0Ml9yZWcpLCBHRlBfS0VSTkVMKTsKKworCWlmICghY29kZWMtPnJlZ19jYWNoZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhazQ2NDJfZGFpLmRldiA9IGNvZGVjLT5kZXY7CisJYWs0NjQyX2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gcmVnX2NhY2hlX2VycjsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmYWs0NjQyX2RhaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwkJZ290byByZWdfY2FjaGVfZXJyOworCX0KKworCS8qCisJICogY2xvY2sgc2V0dGluZworCSAqCisJICogQXVkaW8gSS9GIEZvcm1hdDogTVNCIGp1c3RpZmllZCAoQURDICYgREFDKQorCSAqIEJJQ0sgZnJlcXVlbmN5IGF0IE1hc3RlciBNb2RlOiA2NGZzCisJICogSW5wdXQgTWFzdGVyIENsb2NrIFNlbGVjdCBhdCBQTEwgTW9kZTogMTEuMjg5Nk1IegorCSAqIE1DS086IEVuYWJsZQorCSAqIFNhbXBsaW5nIEZyZXF1ZW5jeTogNDQuMWtIegorCSAqCisJICogVGhpcyBvcGVyYXRpb24gY2FtZSBmcm9tIGV4YW1wbGUgY29kZSBvZgorCSAqICJBU0FISSBLQVNFSSBBSzQ2NDIiIChqYXBhbmVzZSkgbWFudWFsIHA4OS4KKwkgKgorCSAqIHBsZWFzZSBmaXgtbWUKKwkgKi8KKwlhazQ2NDJfd3JpdGUoY29kZWMsIDB4MDEsIDB4MDgpOworCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwNCwgMHg0YSk7CisJYWs0NjQyX3dyaXRlKGNvZGVjLCAweDA1LCAweDI3KTsKKwlhazQ2NDJfd3JpdGUoY29kZWMsIDB4MDAsIDB4NDApOworCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwMSwgMHgwYik7CisKKwlyZXR1cm4gcmV0OworCityZWdfY2FjaGVfZXJyOgorCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOworCWNvZGVjLT5yZWdfY2FjaGUgPSBOVUxMOworCisJcmV0dXJuIHJldDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKK3N0YXRpYyBpbnQgYWs0NjQyX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYWs0NjQyX3ByaXYgKmFrNDY0MjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldDsKKworCWFrNDY0MiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhazQ2NDJfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghYWs0NjQyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJmFrNDY0Mi0+Y29kZWM7CisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGFrNDY0Mik7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKworCXJldCA9IGFrNDY0Ml9pbml0KGFrNDY0Mik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGluaXRpYWxpc2UgQUs0NjQyXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWs0NjQyX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgYWs0NjQyX3ByaXYgKmFrNDY0MiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmYWs0NjQyX2RhaSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZhazQ2NDItPmNvZGVjKTsKKwlrZnJlZShhazQ2NDItPmNvZGVjLnJlZ19jYWNoZSk7CisJa2ZyZWUoYWs0NjQyKTsKKwlhazQ2NDJfY29kZWMgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhazQ2NDJfaTJjX2lkW10gPSB7CisJeyAiYWs0NjQyIiwgMCB9LAorCXsgImFrNDY0MyIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWs0NjQyX2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhazQ2NDJfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJBSzQ2NDIgSTJDIENvZGVjIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gYWs0NjQyX2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IGFrNDY0Ml9pMmNfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGFrNDY0Ml9pMmNfaWQsCit9OworCisjZW5kaWYKKworc3RhdGljIGludCBhazQ2NDJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlpZiAoIWFrNDY0Ml9jb2RlYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb2RlYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gYWs0NjQyX2NvZGVjOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhazQ2NDI6IGZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCWdvdG8gcGNtX2VycjsKKwl9CisKKwlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYWs0NjQyOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWdvdG8gY2FyZF9lcnI7CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkFLNDY0MiBBdWRpbyBDb2RlYyAlcyIsIEFLNDY0Ml9WRVJTSU9OKTsKKwlyZXR1cm4gcmV0OworCitjYXJkX2VycjoKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CitwY21fZXJyOgorCXJldHVybiByZXQ7CisKK30KKworLyogcG93ZXIgZG93biBjaGlwICovCitzdGF0aWMgaW50IGFrNDY0Ml9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X2FrNDY0MiA9IHsKKwkucHJvYmUgPQlhazQ2NDJfcHJvYmUsCisJLnJlbW92ZSA9CWFrNDY0Ml9yZW1vdmUsCisJLnJlc3VtZSA9CWFrNDY0Ml9yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl9hazQ2NDIpOworCitzdGF0aWMgaW50IF9faW5pdCBhazQ2NDJfbW9kaW5pdCh2b2lkKQoreworCWludCByZXQ7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCXJldCA9IGkyY19hZGRfZHJpdmVyKCZhazQ2NDJfaTJjX2RyaXZlcik7CisjZW5kaWYKKwlyZXR1cm4gcmV0OworCit9Cittb2R1bGVfaW5pdChhazQ2NDJfbW9kaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhazQ2NDJfZXhpdCh2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmYWs0NjQyX2kyY19kcml2ZXIpOworI2VuZGlmCisKK30KK21vZHVsZV9leGl0KGFrNDY0Ml9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2MgQUs0NjQyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQ2NDIuaCBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ3NjgzMwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIGFrNDY0Mi5oICAtLSAgQUs0NjQyIFNvYyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBhazQ1MzUuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfQUs0NjQyX0gKKyNkZWZpbmUgX0FLNDY0Ml9ICisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgYWs0NjQyX2RhaTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9hazQ2NDI7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMKaW5kZXggYTMyYjgyMi4uY2ExZTI0YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jCkBAIC04MDYsMTUgKzgwNiwzMCBAQAogewogCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJmNzNDI3MC0+Y29kZWM7Ci0JaW50IHJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX1BXUkNUTCkgfCBDUzQyNzBfUFdSQ1RMX1BETl9BTEw7CiAKLQlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX1BXUkNUTCwgcmVnKTsKKwlyZXR1cm4gc25kX3NvY19zdXNwZW5kX2RldmljZShjb2RlYy0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBjczQyNzBfaTJjX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJmNzNDI3MC0+Y29kZWM7CisKKwlyZXR1cm4gc25kX3NvY19yZXN1bWVfZGV2aWNlKGNvZGVjLT5kZXYpOworfQorCitzdGF0aWMgaW50IGNzNDI3MF9zb2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjczQyNzBfY29kZWM7CisJaW50IHJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0MjcwX1BXUkNUTCkgfCBDUzQyNzBfUFdSQ1RMX1BETl9BTEw7CisKKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgQ1M0MjcwX1BXUkNUTCwgcmVnKTsKK30KKworc3RhdGljIGludCBjczQyNzBfc29jX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNzNDI3MF9jb2RlYzsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJaW50IHJlZzsKIAogCS8qIEluIGNhc2UgdGhlIGRldmljZSB3YXMgcHV0IHRvIGhhcmQgcmVzZXQgZHVyaW5nIHNsZWVwLCB3ZSBuZWVkIHRvCkBAIC04MjUsNyArODQwLDcgQEAKIAlmb3IgKHJlZyA9IENTNDI3MF9GSVJTVFJFRzsgcmVnIDw9IENTNDI3MF9MQVNUUkVHOyByZWcrKykgewogCQl1OCB2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIHJlZyk7CiAKLQkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbCkpIHsKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoaTJjX2NsaWVudCwgcmVnLCB2YWwpKSB7CiAJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJpMmMgd3JpdGUgZmFpbGVkXG4iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CkBAIC04NDAsNiArODU1LDggQEAKICNlbHNlCiAjZGVmaW5lIGNzNDI3MF9pMmNfc3VzcGVuZAlOVUxMCiAjZGVmaW5lIGNzNDI3MF9pMmNfcmVzdW1lCU5VTEwKKyNkZWZpbmUgY3M0MjcwX3NvY19zdXNwZW5kCU5VTEwKKyNkZWZpbmUgY3M0MjcwX3NvY19yZXN1bWUJTlVMTAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAvKgpAQCAtODY4LDcgKzg4NSw5IEBACiAgKi8KIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2aWNlX2NzNDI3MCA9IHsKIAkucHJvYmUgPSAJY3M0MjcwX3Byb2JlLAotCS5yZW1vdmUgPSAJY3M0MjcwX3JlbW92ZQorCS5yZW1vdmUgPSAJY3M0MjcwX3JlbW92ZSwKKwkuc3VzcGVuZCA9CWNzNDI3MF9zb2Nfc3VzcGVuZCwKKwkucmVzdW1lID0JY3M0MjcwX3NvY19yZXN1bWUsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2RldmljZV9jczQyNzApOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3gyMDQ0Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZWFjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYwpAQCAtMCwwICsxLDUwMSBAQAorLyoKKyAqIGN4MjA0NDIuYyAgLS0gIENYMjA0NDIgQUxTQSBTb2MgQXVkaW8gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgSmFudXN6IEtyenlzenRvZmlrIDxqa3J6eXN6dEB0aXMuaWNuZXQucGw+CisgKgorICogSW5pdGlhbGx5IGJhc2VkIG9uIHNvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmMKKyAqIENvcHlyaWdodCAyMDA4LCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgImN4MjA0NDIuaCIKKworCitzdHJ1Y3QgY3gyMDQ0Ml9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1OCByZWdfY2FjaGVbMV07Cit9OworCisjZGVmaW5lIENYMjA0NDJfUE0JCTB4MAorCisjZGVmaW5lIENYMjA0NDJfVEVMSU4JCTAKKyNkZWZpbmUgQ1gyMDQ0Ml9URUxPVVQJCTEKKyNkZWZpbmUgQ1gyMDQ0Ml9NSUMJCTIKKyNkZWZpbmUgQ1gyMDQ0Ml9TUEtPVVQJCTMKKyNkZWZpbmUgQ1gyMDQ0Ml9BR0MJCTQKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGN4MjA0NDJfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX09VVFBVVCgiVEVMT1VUIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiU1BLT1VUIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiQUdDT1VUIiksCisKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlNQS09VVCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fUEdBKCJURUxPVVQgQW1wIiwgQ1gyMDQ0Ml9QTSwgQ1gyMDQ0Ml9URUxPVVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlNQS09VVCBBbXAiLCBDWDIwNDQyX1BNLCBDWDIwNDQyX1NQS09VVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiU1BLT1VUIEFHQyIsIENYMjA0NDJfUE0sIENYMjA0NDJfQUdDLCAwLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9EQUMoIkRBQyIsICJQbGF5YmFjayIsIFNORF9TT0NfTk9QTSwgMCwgMCksCisJU05EX1NPQ19EQVBNX0FEQygiQURDIiwgIkNhcHR1cmUiLCBTTkRfU09DX05PUE0sIDAsIDApLAorCisJU05EX1NPQ19EQVBNX01JWEVSKCJJbnB1dCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fTUlDQklBUygiVEVMSU4gQmlhcyIsIENYMjA0NDJfUE0sIENYMjA0NDJfVEVMSU4sIDApLAorCVNORF9TT0NfREFQTV9NSUNCSUFTKCJNSUMgQmlhcyIsIENYMjA0NDJfUE0sIENYMjA0NDJfTUlDLCAwKSwKKworCVNORF9TT0NfREFQTV9QR0EoIk1JQyBBR0MiLCBDWDIwNDQyX1BNLCBDWDIwNDQyX0FHQywgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlRFTElOIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJNSUMiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkFHQ0lOIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBjeDIwNDQyX2F1ZGlvX21hcFtdID0geworCXsiVEVMT1VUIiwgTlVMTCwgIlRFTE9VVCBBbXAifSwKKworCXsiU1BLT1VUIiwgTlVMTCwgIlNQS09VVCBNaXhlciJ9LAorCXsiU1BLT1VUIE1peGVyIiwgTlVMTCwgIlNQS09VVCBBbXAifSwKKworCXsiVEVMT1VUIEFtcCIsIE5VTEwsICJEQUMifSwKKwl7IlNQS09VVCBBbXAiLCBOVUxMLCAiREFDIn0sCisKKwl7IlNQS09VVCBNaXhlciIsIE5VTEwsICJTUEtPVVQgQUdDIn0sCisJeyJTUEtPVVQgQUdDIiwgTlVMTCwgIkFHQ0lOIn0sCisKKwl7IkFHQ09VVCIsIE5VTEwsICJNSUMgQUdDIn0sCisJeyJNSUMgQUdDIiwgTlVMTCwgIk1JQyJ9LAorCisJeyJNSUMgQmlhcyIsIE5VTEwsICJNSUMifSwKKwl7IklucHV0IE1peGVyIiwgTlVMTCwgIk1JQyBCaWFzIn0sCisKKwl7IlRFTElOIEJpYXMiLCBOVUxMLCAiVEVMSU4ifSwKKwl7IklucHV0IE1peGVyIiwgTlVMTCwgIlRFTElOIEJpYXMifSwKKworCXsiQURDIiwgTlVMTCwgIklucHV0IE1peGVyIn0sCit9OworCitzdGF0aWMgaW50IGN4MjA0NDJfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGN4MjA0NDJfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRShjeDIwNDQyX2RhcG1fd2lkZ2V0cykpOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGN4MjA0NDJfYXVkaW9fbWFwLAorCQkJCUFSUkFZX1NJWkUoY3gyMDQ0Ml9hdWRpb19tYXApKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhjb2RlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3gyMDQ0Ml9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJCQkJdW5zaWduZWQgaW50IHJlZykKK3sKKwl1OCAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKworCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiByZWdfY2FjaGVbcmVnXTsKK30KKworZW51bSB2MjUzX3ZscyB7CisJVjI1M19WTFNfTk9ORSA9IDAsCisJVjI1M19WTFNfVCwKKwlWMjUzX1ZMU19MLAorCVYyNTNfVkxTX0xULAorCVYyNTNfVkxTX1MsCisJVjI1M19WTFNfU1QsCisJVjI1M19WTFNfTSwKKwlWMjUzX1ZMU19NU1QsCisJVjI1M19WTFNfUzEsCisJVjI1M19WTFNfUzFULAorCVYyNTNfVkxTX01TMVQsCisJVjI1M19WTFNfTTEsCisJVjI1M19WTFNfTTFTVCwKKwlWMjUzX1ZMU19NMVMxVCwKKwlWMjUzX1ZMU19ILAorCVYyNTNfVkxTX0hULAorCVYyNTNfVkxTX01TLAorCVYyNTNfVkxTX01TMSwKKwlWMjUzX1ZMU19NMVMsCisJVjI1M19WTFNfTTFTMSwKKwlWMjUzX1ZMU19URVNULAorfTsKKworc3RhdGljIGludCBjeDIwNDQyX3BtX3RvX3YyNTNfdmxzKHU4IHZhbHVlKQoreworCXN3aXRjaCAodmFsdWUgJiB+KDEgPDwgQ1gyMDQ0Ml9BR0MpKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gVjI1M19WTFNfVDsKKwljYXNlICgxIDw8IENYMjA0NDJfU1BLT1VUKToKKwljYXNlICgxIDw8IENYMjA0NDJfTUlDKToKKwljYXNlICgxIDw8IENYMjA0NDJfU1BLT1VUKSB8ICgxIDw8IENYMjA0NDJfTUlDKToKKwkJcmV0dXJuIFYyNTNfVkxTX00xUzE7CisJY2FzZSAoMSA8PCBDWDIwNDQyX1RFTE9VVCk6CisJY2FzZSAoMSA8PCBDWDIwNDQyX1RFTElOKToKKwljYXNlICgxIDw8IENYMjA0NDJfVEVMT1VUKSB8ICgxIDw8IENYMjA0NDJfVEVMSU4pOgorCQlyZXR1cm4gVjI1M19WTFNfTDsKKwljYXNlICgxIDw8IENYMjA0NDJfVEVMT1VUKSB8ICgxIDw8IENYMjA0NDJfTUlDKToKKwkJcmV0dXJuIFYyNTNfVkxTX05PTkU7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorc3RhdGljIGludCBjeDIwNDQyX3BtX3RvX3YyNTNfdnNwKHU4IHZhbHVlKQoreworCXN3aXRjaCAodmFsdWUgJiB+KDEgPDwgQ1gyMDQ0Ml9BR0MpKSB7CisJY2FzZSAoMSA8PCBDWDIwNDQyX1NQS09VVCk6CisJY2FzZSAoMSA8PCBDWDIwNDQyX01JQyk6CisJY2FzZSAoMSA8PCBDWDIwNDQyX1NQS09VVCkgfCAoMSA8PCBDWDIwNDQyX01JQyk6CisJCXJldHVybiAoYm9vbCkodmFsdWUgJiAoMSA8PCBDWDIwNDQyX0FHQykpOworCX0KKwlyZXR1cm4gKHZhbHVlICYgKDEgPDwgQ1gyMDQ0Ml9BR0MpKSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IGN4MjA0NDJfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJCQkJCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1OCAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpbnQgdmxzLCB2c3AsIG9sZCwgbGVuOworCWNoYXIgYnVmWzE4XTsKKworCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGh3X3dyaXRlIGFuZCBjb250cm9sX2RhdGEgcG9pbnRlcnMgcmVxdWlyZWQgZm9yIHRhbGtpbmcgdG8gdGhlIG1vZGVtCisJICogYXJlIGV4cGVjdGVkIHRvIGJlIHNldCBieSB0aGUgbGluZSBkaXNjaXBsaW5lIGluaXRpYWxpemF0aW9uIGNvZGUgKi8KKwlpZiAoIWNvZGVjLT5od193cml0ZSB8fCAhY29kZWMtPmNvbnRyb2xfZGF0YSkKKwkJcmV0dXJuIC1FSU87CisKKwlvbGQgPSByZWdfY2FjaGVbcmVnXTsKKwlyZWdfY2FjaGVbcmVnXSA9IHZhbHVlOworCisJdmxzID0gY3gyMDQ0Ml9wbV90b192MjUzX3Zscyh2YWx1ZSk7CisJaWYgKHZscyA8IDApCisJCXJldHVybiB2bHM7CisKKwl2c3AgPSBjeDIwNDQyX3BtX3RvX3YyNTNfdnNwKHZhbHVlKTsKKwlpZiAodnNwIDwgMCkKKwkJcmV0dXJuIHZzcDsKKworCWlmICgodmxzID09IFYyNTNfVkxTX1QpIHx8CisJCQkodmxzID09IGN4MjA0NDJfcG1fdG9fdjI1M192bHMob2xkKSkpIHsKKwkJaWYgKHZzcCA9PSBjeDIwNDQyX3BtX3RvX3YyNTNfdnNwKG9sZCkpCisJCQlyZXR1cm4gMDsKKwkJbGVuID0gc25wcmludGYoYnVmLCBBUlJBWV9TSVpFKGJ1ZiksICJhdCt2c3A9JWRcciIsIHZzcCk7CisJfSBlbHNlIGlmICh2c3AgPT0gY3gyMDQ0Ml9wbV90b192MjUzX3ZzcChvbGQpKQorCQlsZW4gPSBzbnByaW50ZihidWYsIEFSUkFZX1NJWkUoYnVmKSwgImF0K3Zscz0lZFxyIiwgdmxzKTsKKwllbHNlCisJCWxlbiA9IHNucHJpbnRmKGJ1ZiwgQVJSQVlfU0laRShidWYpLAorCQkJCQkiYXQrdmxzPSVkOyt2c3A9JWRcciIsIHZscywgdnNwKTsKKworCWlmICh1bmxpa2VseShsZW4gPiAoQVJSQVlfU0laRShidWYpIC0gMSkpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiAlc1xuIiwgX19mdW5jX18sIGJ1Zik7CisJaWYgKGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBidWYsIGxlbikgIT0gbGVuKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisKKy8qIE1vdmVkIHVwIGhlcmUgYXMgbGluZSBkaXNjaXBsaW5lIHJlZmVycmVzIGl0IGR1cmluZyBpbml0aWFsaXphdGlvbiAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICpjeDIwNDQyX2NvZGVjOworCisKKy8qCisgKiBMaW5lIGRpc2NwbGluZSByZWxhdGVkIGNvZGUKKyAqCisgKiBBbnkgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBiZWxvdyBjYW4gYmUgdXNlZCBpbiB0d28gd2F5czoKKyAqIDEpIHJlZ2lzdGVyZCBieSBhIG1hY2hpbmUgZHJpdmVyIGFzIG9uZSBvZiBsaW5lIGRpc2NpcGxpbmUgb3BlcmF0aW9ucywKKyAqIDIpIGNhbGxlZCBmcm9tIGEgbWFjaGluZSdzIHByb3ZpZGVkIGxpbmUgZGlzY2lwbGluZSBjYWxsYmFjayBmdW5jdGlvbgorICogICAgaW4gY2FzZSB3aGVuIGV4dHJhIG1hY2hpbmUgc3BlY2lmaWMgY29kZSBtdXN0IGJlIHJ1biBhcyB3ZWxsLgorICovCisKKy8qIE1vZGVtIGluaXQ6IGVjaG8gb2ZmLCBkaWdpdGFsIHNwZWFrZXIgb2ZmLCBxdWlldCBvZmYsIHZvaWNlIG1vZGUgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp2MjUzX2luaXQgPSAiYXRlMG0wcTArZmNsYXNzPThcciI7CisKKy8qIExpbmUgZGlzY2lwbGluZSAub3BlbigpICovCitzdGF0aWMgaW50IHYyNTNfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGN4MjA0NDJfY29kZWM7CisJaW50IHJldCwgbGVuID0gc3RybGVuKHYyNTNfaW5pdCk7CisKKwkvKiBEb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCB3cml0ZSBjYWxsYmFjayAqLworCWlmICghdHR5LT5vcHMtPndyaXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFBhc3MgdGhlIGNvZGVjIHN0cnVjdHVyZSBhZGRyZXNzIGZvciB1c2UgYnkgb3RoZXIgbGRpc2MgY2FsbGJhY2tzICovCisJdHR5LT5kaXNjX2RhdGEgPSBjb2RlYzsKKworCWlmICh0dHktPm9wcy0+d3JpdGUodHR5LCB2MjUzX2luaXQsIGxlbikgIT0gbGVuKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyOworCX0KKwkvKiBBY3R1YWwgc2V0dXAgd2lsbCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhlIG1vZGVtIHJlc3BvbmRzLiAqLworCXJldHVybiAwOworZXJyOgorCXR0eS0+ZGlzY19kYXRhID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCisvKiBMaW5lIGRpc2NpcGxpbmUgLmNsb3NlKCkgKi8KK3N0YXRpYyB2b2lkIHYyNTNfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB0dHktPmRpc2NfZGF0YTsKKworCXR0eS0+ZGlzY19kYXRhID0gTlVMTDsKKworCWlmICghY29kZWMpCisJCXJldHVybjsKKworCS8qIFByZXZlbnQgdGhlIGNvZGVjIGRyaXZlciBmcm9tIGZ1cnRoZXIgYWNjZXNzaW5nIHRoZSBtb2RlbSAqLworCWNvZGVjLT5od193cml0ZSA9IE5VTEw7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IE5VTEw7CisJY29kZWMtPnBvcF90aW1lID0gMDsKK30KKworLyogTGluZSBkaXNjaXBsaW5lIC5oYW5ndXAoKSAqLworc3RhdGljIGludCB2MjUzX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXYyNTNfY2xvc2UodHR5KTsKKwlyZXR1cm4gMDsKK30KKworLyogTGluZSBkaXNjaXBsaW5lIC5yZWNlaXZlX2J1ZigpICovCitzdGF0aWMgdm9pZCB2MjUzX3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB0dHktPmRpc2NfZGF0YTsKKworCWlmICghY29kZWMpCisJCXJldHVybjsKKworCWlmICghY29kZWMtPmNvbnRyb2xfZGF0YSkgeworCQkvKiBGaXJzdCBtb2RlbSByZXNwb25zZSwgY29tcGxldGUgc2V0dXAgcHJvY2VkdXJlICovCisKKwkJLyogU2V0IHVwIGNvZGVjIGRyaXZlciBhY2Nlc3MgdG8gbW9kZW0gY29udHJvbHMgKi8KKwkJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHR0eTsKKwkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpdHR5LT5vcHMtPndyaXRlOworCQljb2RlYy0+cG9wX3RpbWUgPSAxOworCX0KK30KKworLyogTGluZSBkaXNjaXBsaW5lIC53cml0ZV93YWtldXAoKSAqLworc3RhdGljIHZvaWQgdjI1M193YWtldXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKK30KKworc3RydWN0IHR0eV9sZGlzY19vcHMgdjI1M19vcHMgPSB7CisJLm1hZ2ljID0gVFRZX0xESVNDX01BR0lDLAorCS5uYW1lID0gImN4MjA0NDIiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gdjI1M19vcGVuLAorCS5jbG9zZSA9IHYyNTNfY2xvc2UsCisJLmhhbmd1cCA9IHYyNTNfaGFuZ3VwLAorCS5yZWNlaXZlX2J1ZiA9IHYyNTNfcmVjZWl2ZSwKKwkud3JpdGVfd2FrZXVwID0gdjI1M193YWtldXAsCit9OworRVhQT1JUX1NZTUJPTF9HUEwodjI1M19vcHMpOworCisKKy8qCisgKiBDb2RlYyBEQUkKKyAqLworCitzdHJ1Y3Qgc25kX3NvY19kYWkgY3gyMDQ0Ml9kYWkgPSB7CisJLm5hbWUgPSAiQ1gyMDQ0MiIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDEsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDEsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJfSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChjeDIwNDQyX2RhaSk7CisKK3N0YXRpYyBpbnQgY3gyMDQ0Ml9jb2RlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQ7CisKKwlpZiAoIWN4MjA0NDJfY29kZWMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY3gyMDQ0MiBub3QgeWV0IGRpc2NvdmVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJY29kZWMgPSBjeDIwNDQyX2NvZGVjOworCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKKwkJZ290byBwY21fZXJyOworCX0KKworCWN4MjA0NDJfYWRkX3dpZGdldHMoY29kZWMpOworCisJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWdvdG8gY2FyZF9lcnI7CisJfQorCisJcmV0dXJuIHJldDsKKworY2FyZF9lcnI6CisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworcGNtX2VycjoKKwlyZXR1cm4gcmV0OworfQorCisvKiBwb3dlciBkb3duIGNoaXAgKi8KK3N0YXRpYyBpbnQgY3gyMDQ0Ml9jb2RlY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBjeDIwNDQyX2NvZGVjX2RldiA9IHsKKwkucHJvYmUgPSAJY3gyMDQ0Ml9jb2RlY19wcm9iZSwKKwkucmVtb3ZlID0gCWN4MjA0NDJfY29kZWNfcmVtb3ZlLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGN4MjA0NDJfY29kZWNfZGV2KTsKKworc3RhdGljIGludCBjeDIwNDQyX3JlZ2lzdGVyKHN0cnVjdCBjeDIwNDQyX3ByaXYgKmN4MjA0NDIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJmN4MjA0NDItPmNvZGVjOworCWludCByZXQ7CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPm5hbWUgPSAiQ1gyMDQ0MiI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPnByaXZhdGVfZGF0YSA9IGN4MjA0NDI7CisKKwljb2RlYy0+ZGFpID0gJmN4MjA0NDJfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKworCWNvZGVjLT5yZWdfY2FjaGUgPSAmY3gyMDQ0Mi0+cmVnX2NhY2hlOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUoY3gyMDQ0Mi0+cmVnX2NhY2hlKTsKKwljb2RlYy0+cmVhZCA9IGN4MjA0NDJfcmVhZF9yZWdfY2FjaGU7CisJY29kZWMtPndyaXRlID0gY3gyMDQ0Ml93cml0ZTsKKworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKKworCWN4MjA0NDJfZGFpLmRldiA9IGNvZGVjLT5kZXY7CisKKwljeDIwNDQyX2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmN4MjA0NDJfZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvZGVjOworCX0KKworCXJldHVybiAwOworCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwljeDIwNDQyX2NvZGVjID0gTlVMTDsKKwlrZnJlZShjeDIwNDQyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjeDIwNDQyX3VucmVnaXN0ZXIoc3RydWN0IGN4MjA0NDJfcHJpdiAqY3gyMDQ0MikKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZjeDIwNDQyX2RhaSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZjeDIwNDQyLT5jb2RlYyk7CisKKwljeDIwNDQyX2NvZGVjID0gTlVMTDsKKwlrZnJlZShjeDIwNDQyKTsKK30KKworc3RhdGljIGludCBjeDIwNDQyX3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGN4MjA0NDJfcHJpdiAqY3gyMDQ0MjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisKKwljeDIwNDQyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGN4MjA0NDJfcHJpdiksIEdGUF9LRVJORUwpOworCWlmIChjeDIwNDQyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY29kZWMgPSAmY3gyMDQ0Mi0+Y29kZWM7CisKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gTlVMTDsKKwljb2RlYy0+aHdfd3JpdGUgPSBOVUxMOworCWNvZGVjLT5wb3BfdGltZSA9IDA7CisKKwljb2RlYy0+ZGV2ID0gJnBkZXYtPmRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjeDIwNDQyKTsKKworCXJldHVybiBjeDIwNDQyX3JlZ2lzdGVyKGN4MjA0NDIpOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBjeDIwNDQyX3BsYXRmb3JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjeDIwNDQyX3ByaXYgKmN4MjA0NDIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWN4MjA0NDJfdW5yZWdpc3RlcihjeDIwNDQyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY3gyMDQ0Ml9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiY3gyMDQ0MiIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQl9LAorCS5wcm9iZSA9IGN4MjA0NDJfcGxhdGZvcm1fcHJvYmUsCisJLnJlbW92ZSA9IF9fZXhpdF9wKGN4MjA0NDJfcGxhdGZvcm1fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGN4MjA0NDJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmN4MjA0NDJfcGxhdGZvcm1fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGN4MjA0NDJfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjeDIwNDQyX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY3gyMDQ0Ml9wbGF0Zm9ybV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoY3gyMDQ0Ml9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIENYMjA0NDItMTEgdm9pY2UgbW9kZW0gY29kZWMgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJKYW51c3ogS3J6eXN6dG9maWsiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06Y3gyMDQ0MiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmggYi9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODhhNWViCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9jeDIwNDQyLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIGN4MjA0NDIuaCAgLS0gIGF1ZGlvIGRyaXZlciBmb3IgQ1gyMDQ0MgorICoKKyAqIENvcHlyaWdodCAyMDA5IEphbnVzeiBLcnp5c3p0b2ZpayA8amtyenlzenRAdGlzLmljbmV0LnBsPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9DWDIwNDQyX0NPREVDX0gKKyNkZWZpbmUgX0NYMjA0NDJfQ09ERUNfSAorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIGN4MjA0NDJfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBjeDIwNDQyX2NvZGVjX2RldjsKK2V4dGVybiBzdHJ1Y3QgdHR5X2xkaXNjX29wcyB2MjUzX29wczsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL21heDk4NzcuYyBiL3NvdW5kL3NvYy9jb2RlY3MvbWF4OTg3Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllN2U5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL21heDk4NzcuYwpAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqIG1heDk4NzcuYyAgLS0gIGFtcCBkcml2ZXIgZm9yIG1heDk4NzcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorCisjaW5jbHVkZSAibWF4OTg3Ny5oIgorCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKmkyYzsKKworc3RhdGljIHU4IG1heDk4NzdfcmVnc1s1XSA9IHsgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSB9OworCitzdGF0aWMgdm9pZCBtYXg5ODc3X3dyaXRlX3JlZ3Modm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1OCBkYXRhWzZdOworCisJZGF0YVswXSA9IE1BWDk4NzdfSU5QVVRfTU9ERTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtYXg5ODc3X3JlZ3MpOyBpKyspCisJCWRhdGFbaSArIDFdID0gbWF4OTg3N19yZWdzW2ldOworCisJaWYgKGkyY19tYXN0ZXJfc2VuZChpMmMsIGRhdGEsIDYpICE9IDYpCisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiaTJjIHdyaXRlIGZhaWxlZFxuIik7Cit9CisKK3N0YXRpYyBpbnQgbWF4OTg3N19nZXRfcmVnKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0KKwkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXVuc2lnbmVkIGludCByZWcgPSBtYy0+cmVnOworCXVuc2lnbmVkIGludCBzaGlmdCA9IG1jLT5zaGlmdDsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IG1jLT5tYXg7CisJdW5zaWduZWQgaW50IGludmVydCA9IG1jLT5pbnZlcnQ7CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IChtYXg5ODc3X3JlZ3NbcmVnXSA+PiBzaGlmdCkgJiBtYXNrOworCisJaWYgKGludmVydCkKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPQorCQkJbWFzayAtIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4OTg3N19zZXRfcmVnKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0KKwkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXVuc2lnbmVkIGludCByZWcgPSBtYy0+cmVnOworCXVuc2lnbmVkIGludCBzaGlmdCA9IG1jLT5zaGlmdDsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IG1jLT5tYXg7CisJdW5zaWduZWQgaW50IGludmVydCA9IG1jLT5pbnZlcnQ7CisJdW5zaWduZWQgaW50IHZhbCA9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIG1hc2spOworCisJaWYgKGludmVydCkKKwkJdmFsID0gbWFzayAtIHZhbDsKKworCWlmICgoKG1heDk4NzdfcmVnc1tyZWddID4+IHNoaWZ0KSAmIG1hc2spID09IHZhbCkKKwkJcmV0dXJuIDA7CisKKwltYXg5ODc3X3JlZ3NbcmVnXSAmPSB+KG1hc2sgPDwgc2hpZnQpOworCW1heDk4NzdfcmVnc1tyZWddIHw9IHZhbCA8PCBzaGlmdDsKKwltYXg5ODc3X3dyaXRlX3JlZ3MoKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1heDk4NzdfZ2V0XzJyZWcoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJdW5zaWduZWQgaW50IHJlZyA9IG1jLT5yZWc7CisJdW5zaWduZWQgaW50IHJlZzIgPSBtYy0+cnJlZzsKKwl1bnNpZ25lZCBpbnQgc2hpZnQgPSBtYy0+c2hpZnQ7CisJdW5zaWduZWQgaW50IG1hc2sgPSBtYy0+bWF4OworCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAobWF4OTg3N19yZWdzW3JlZ10gPj4gc2hpZnQpICYgbWFzazsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IChtYXg5ODc3X3JlZ3NbcmVnMl0gPj4gc2hpZnQpICYgbWFzazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heDk4Nzdfc2V0XzJyZWcoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJdW5zaWduZWQgaW50IHJlZyA9IG1jLT5yZWc7CisJdW5zaWduZWQgaW50IHJlZzIgPSBtYy0+cnJlZzsKKwl1bnNpZ25lZCBpbnQgc2hpZnQgPSBtYy0+c2hpZnQ7CisJdW5zaWduZWQgaW50IG1hc2sgPSBtYy0+bWF4OworCXVuc2lnbmVkIGludCB2YWwgPSAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiBtYXNrKTsKKwl1bnNpZ25lZCBpbnQgdmFsMiA9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAmIG1hc2spOworCXVuc2lnbmVkIGludCBjaGFuZ2UgPSAxOworCisJaWYgKCgobWF4OTg3N19yZWdzW3JlZ10gPj4gc2hpZnQpICYgbWFzaykgPT0gdmFsKQorCQljaGFuZ2UgPSAwOworCisJaWYgKCgobWF4OTg3N19yZWdzW3JlZzJdID4+IHNoaWZ0KSAmIG1hc2spID09IHZhbDIpCisJCWNoYW5nZSA9IDA7CisKKwlpZiAoY2hhbmdlKSB7CisJCW1heDk4NzdfcmVnc1tyZWddICY9IH4obWFzayA8PCBzaGlmdCk7CisJCW1heDk4NzdfcmVnc1tyZWddIHw9IHZhbCA8PCBzaGlmdDsKKwkJbWF4OTg3N19yZWdzW3JlZzJdICY9IH4obWFzayA8PCBzaGlmdCk7CisJCW1heDk4NzdfcmVnc1tyZWcyXSB8PSB2YWwyIDw8IHNoaWZ0OworCQltYXg5ODc3X3dyaXRlX3JlZ3MoKTsKKwl9CisKKwlyZXR1cm4gY2hhbmdlOworfQorCitzdGF0aWMgaW50IG1heDk4NzdfZ2V0X291dF9tb2RlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwl1OCB2YWx1ZSA9IG1heDk4NzdfcmVnc1tNQVg5ODc3X09VVFBVVF9NT0RFXSAmIE1BWDk4NzdfT1VUTU9ERV9NQVNLOworCisJaWYgKHZhbHVlKQorCQl2YWx1ZSAtPSAxOworCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB2YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg5ODc3X3NldF9vdXRfbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJdTggdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCXZhbHVlICs9IDE7CisKKwlpZiAoKG1heDk4NzdfcmVnc1tNQVg5ODc3X09VVFBVVF9NT0RFXSAmIE1BWDk4NzdfT1VUTU9ERV9NQVNLKSA9PSB2YWx1ZSkKKwkJcmV0dXJuIDA7CisKKwltYXg5ODc3X3JlZ3NbTUFYOTg3N19PVVRQVVRfTU9ERV0gJj0gfk1BWDk4NzdfT1VUTU9ERV9NQVNLOworCW1heDk4NzdfcmVnc1tNQVg5ODc3X09VVFBVVF9NT0RFXSB8PSB2YWx1ZTsKKwltYXg5ODc3X3dyaXRlX3JlZ3MoKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtYXg5ODc3X2dldF9vc2NfbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJdTggdmFsdWUgPSAobWF4OTg3N19yZWdzW01BWDk4NzdfT1VUUFVUX01PREVdICYgTUFYOTg3N19PU0NfTUFTSyk7CisKKwl2YWx1ZSA9IHZhbHVlID4+IE1BWDk4NzdfT1NDX09GRlNFVDsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4OTg3N19zZXRfb3NjX21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXU4IHZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwl2YWx1ZSA9IHZhbHVlIDw8IE1BWDk4NzdfT1NDX09GRlNFVDsKKwlpZiAoKG1heDk4NzdfcmVnc1tNQVg5ODc3X09VVFBVVF9NT0RFXSAmIE1BWDk4NzdfT1NDX01BU0spID09IHZhbHVlKQorCQlyZXR1cm4gMDsKKworCW1heDk4NzdfcmVnc1tNQVg5ODc3X09VVFBVVF9NT0RFXSAmPSB+TUFYOTg3N19PU0NfTUFTSzsKKwltYXg5ODc3X3JlZ3NbTUFYOTg3N19PVVRQVVRfTU9ERV0gfD0gdmFsdWU7CisJbWF4OTg3N193cml0ZV9yZWdzKCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWF4OTg3N19wZ2Fpbl90bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCgyKSwKKwkwLCAxLCBUTFZfREJfU0NBTEVfSVRFTSgwLCA5MDAsIDApLAorCTIsIDIsIFRMVl9EQl9TQ0FMRV9JVEVNKDIwMDAsIDAsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtYXg5ODc3X291dHB1dF90bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCg0KSwKKwkwLCA3LCBUTFZfREJfU0NBTEVfSVRFTSgtNzkwMCwgNDAwLCAxKSwKKwk4LCAxNSwgVExWX0RCX1NDQUxFX0lURU0oLTQ3MDAsIDMwMCwgMCksCisJMTYsIDIzLCBUTFZfREJfU0NBTEVfSVRFTSgtMjMwMCwgMjAwLCAwKSwKKwkyNCwgMzEsIFRMVl9EQl9TQ0FMRV9JVEVNKC03MDAsIDEwMCwgMCksCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqbWF4OTg3N19vdXRfbW9kZVtdID0geworCSJJTkEgLT4gU1BLIiwKKwkiSU5BIC0+IEhQIiwKKwkiSU5BIC0+IFNQSyBhbmQgSFAiLAorCSJJTkIgLT4gU1BLIiwKKwkiSU5CIC0+IEhQIiwKKwkiSU5CIC0+IFNQSyBhbmQgSFAiLAorCSJJTkEgKyBJTkIgLT4gU1BLIiwKKwkiSU5BICsgSU5CIC0+IEhQIiwKKwkiSU5BICsgSU5CIC0+IFNQSyBhbmQgSFAiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm1heDk4Nzdfb3NjX21vZGVbXSA9IHsKKwkiMTE3NktIeiIsCisJIjExMDBLSHoiLAorCSI3MDBLSHoiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBtYXg5ODc3X2VudW1bXSA9IHsKKwlTT0NfRU5VTV9TSU5HTEVfRVhUKEFSUkFZX1NJWkUobWF4OTg3N19vdXRfbW9kZSksIG1heDk4Nzdfb3V0X21vZGUpLAorCVNPQ19FTlVNX1NJTkdMRV9FWFQoQVJSQVlfU0laRShtYXg5ODc3X29zY19tb2RlKSwgbWF4OTg3N19vc2NfbW9kZSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbWF4OTg3N19jb250cm9sc1tdID0geworCVNPQ19TSU5HTEVfRVhUX1RMVigiTUFYOTg3NyBQR0FJTkEgUGxheWJhY2sgVm9sdW1lIiwKKwkJCU1BWDk4NzdfSU5QVVRfTU9ERSwgMCwgMiwgMCwKKwkJCW1heDk4NzdfZ2V0X3JlZywgbWF4OTg3N19zZXRfcmVnLCBtYXg5ODc3X3BnYWluX3RsdiksCisJU09DX1NJTkdMRV9FWFRfVExWKCJNQVg5ODc3IFBHQUlOQiBQbGF5YmFjayBWb2x1bWUiLAorCQkJTUFYOTg3N19JTlBVVF9NT0RFLCAyLCAyLCAwLAorCQkJbWF4OTg3N19nZXRfcmVnLCBtYXg5ODc3X3NldF9yZWcsIG1heDk4NzdfcGdhaW5fdGx2KSwKKwlTT0NfU0lOR0xFX0VYVF9UTFYoIk1BWDk4NzcgQW1wIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJCU1BWDk4NzdfU1BLX1ZPTFVNRSwgMCwgMzEsIDAsCisJCQltYXg5ODc3X2dldF9yZWcsIG1heDk4Nzdfc2V0X3JlZywgbWF4OTg3N19vdXRwdXRfdGx2KSwKKwlTT0NfRE9VQkxFX1JfRVhUX1RMVigiTUFYOTg3NyBBbXAgSFAgUGxheWJhY2sgVm9sdW1lIiwKKwkJCU1BWDk4NzdfSFBMX1ZPTFVNRSwgTUFYOTg3N19IUFJfVk9MVU1FLCAwLCAzMSwgMCwKKwkJCW1heDk4NzdfZ2V0XzJyZWcsIG1heDk4Nzdfc2V0XzJyZWcsIG1heDk4Nzdfb3V0cHV0X3RsdiksCisJU09DX1NJTkdMRV9FWFQoIk1BWDk4NzcgSU5CIFN0ZXJlbyBTd2l0Y2giLAorCQkJTUFYOTg3N19JTlBVVF9NT0RFLCA0LCAxLCAxLAorCQkJbWF4OTg3N19nZXRfcmVnLCBtYXg5ODc3X3NldF9yZWcpLAorCVNPQ19TSU5HTEVfRVhUKCJNQVg5ODc3IElOQSBTdGVyZW8gU3dpdGNoIiwKKwkJCU1BWDk4NzdfSU5QVVRfTU9ERSwgNSwgMSwgMSwKKwkJCW1heDk4NzdfZ2V0X3JlZywgbWF4OTg3N19zZXRfcmVnKSwKKwlTT0NfU0lOR0xFX0VYVCgiTUFYOTg3NyBaZXJvLWNyb3NzaW5nIGRldGVjdGlvbiBTd2l0Y2giLAorCQkJTUFYOTg3N19JTlBVVF9NT0RFLCA2LCAxLCAwLAorCQkJbWF4OTg3N19nZXRfcmVnLCBtYXg5ODc3X3NldF9yZWcpLAorCVNPQ19TSU5HTEVfRVhUKCJNQVg5ODc3IEJ5cGFzcyBNb2RlIFN3aXRjaCIsCisJCQlNQVg5ODc3X09VVFBVVF9NT0RFLCA2LCAxLCAwLAorCQkJbWF4OTg3N19nZXRfcmVnLCBtYXg5ODc3X3NldF9yZWcpLAorCVNPQ19TSU5HTEVfRVhUKCJNQVg5ODc3IFNodXRkb3duIE1vZGUgU3dpdGNoIiwKKwkJCU1BWDk4NzdfT1VUUFVUX01PREUsIDcsIDEsIDEsCisJCQltYXg5ODc3X2dldF9yZWcsIG1heDk4Nzdfc2V0X3JlZyksCisJU09DX0VOVU1fRVhUKCJNQVg5ODc3IE91dHB1dCBNb2RlIiwgbWF4OTg3N19lbnVtWzBdLAorCQkJbWF4OTg3N19nZXRfb3V0X21vZGUsIG1heDk4Nzdfc2V0X291dF9tb2RlKSwKKwlTT0NfRU5VTV9FWFQoIk1BWDk4NzcgT3NjaWxsYXRvciBNb2RlIiwgbWF4OTg3N19lbnVtWzFdLAorCQkJbWF4OTg3N19nZXRfb3NjX21vZGUsIG1heDk4Nzdfc2V0X29zY19tb2RlKSwKK307CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gQVNvQyBtYWNoaW5lIGRyaXZlciAqLworaW50IG1heDk4NzdfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlyZXR1cm4gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIG1heDk4NzdfY29udHJvbHMsCisJCQlBUlJBWV9TSVpFKG1heDk4NzdfY29udHJvbHMpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1heDk4NzdfYWRkX2NvbnRyb2xzKTsKKworc3RhdGljIGludCBfX2RldmluaXQgbWF4OTg3N19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWkyYyA9IGNsaWVudDsKKworCW1heDk4Nzdfd3JpdGVfcmVncygpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IG1heDk4NzdfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWkyYyA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG1heDk4NzdfaTJjX2lkW10gPSB7CisJeyAibWF4OTg3NyIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4OTg3N19pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWF4OTg3N19pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1heDk4NzciLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IG1heDk4NzdfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtYXg5ODc3X2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IG1heDk4NzdfaTJjX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWF4OTg3N19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZtYXg5ODc3X2kyY19kcml2ZXIpOworfQorbW9kdWxlX2luaXQobWF4OTg3N19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1heDk4NzdfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZtYXg5ODc3X2kyY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobWF4OTg3N19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIE1BWDk4NzcgYW1wIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9tYXg5ODc3LmggYi9zb3VuZC9zb2MvY29kZWNzL21heDk4NzcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGE3MjI5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9tYXg5ODc3LmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIG1heDk4NzcuaCAgLS0gIGFtcCBkcml2ZXIgZm9yIG1heDk4NzcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9NQVg5ODc3X0gKKyNkZWZpbmUgX01BWDk4NzdfSAorCisjZGVmaW5lIE1BWDk4NzdfSU5QVVRfTU9ERQkJMHgwMAorI2RlZmluZSBNQVg5ODc3X1NQS19WT0xVTUUJCTB4MDEKKyNkZWZpbmUgTUFYOTg3N19IUExfVk9MVU1FCQkweDAyCisjZGVmaW5lIE1BWDk4NzdfSFBSX1ZPTFVNRQkJMHgwMworI2RlZmluZSBNQVg5ODc3X09VVFBVVF9NT0RFCQkweDA0CisKKy8qIE1BWDk4NzdfSU5QVVRfTU9ERSAqLworI2RlZmluZSBNQVg5ODc3X0lOQgkJCSgxIDw8IDQpCisjZGVmaW5lIE1BWDk4NzdfSU5BCQkJKDEgPDwgNSkKKyNkZWZpbmUgTUFYOTg3N19aQ0QJCQkoMSA8PCA2KQorCisvKiBNQVg5ODc3X09VVFBVVF9NT0RFICovCisjZGVmaW5lIE1BWDk4NzdfT1VUTU9ERV9NQVNLCQkoMTUgPDwgMCkKKyNkZWZpbmUgTUFYOTg3N19PU0NfTUFTSwkJKDMgPDwgNCkKKyNkZWZpbmUgTUFYOTg3N19PU0NfT0ZGU0VUCQk0CisjZGVmaW5lIE1BWDk4NzdfQllQQVNTCQkJKDEgPDwgNikKKyNkZWZpbmUgTUFYOTg3N19TSEROCQkJKDEgPDwgNykKKworZXh0ZXJuIGludCBtYXg5ODc3X2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvc3BkaWZfdHJhbnNjaWV2ZXIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3BkaWZfdHJhbnNjaWV2ZXIuYwppbmRleCAyMThiMzNhLi5hNjMxOTExIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NwZGlmX3RyYW5zY2lldmVyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9zcGRpZl90cmFuc2NpZXZlci5jCkBAIC0yMSw2ICsyMSw4IEBACiAKICNpbmNsdWRlICJzcGRpZl90cmFuc2NpZXZlci5oIgogCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKICNkZWZpbmUgU1RVQl9SQVRFUwlTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCiAjZGVmaW5lIFNUVUJfRk9STUFUUwlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQogCkBAIC0zNCw2ICszNiw3IEBACiAJCS5mb3JtYXRzCT0gU1RVQl9GT1JNQVRTLAogCX0sCiB9OworRVhQT1JUX1NZTUJPTF9HUEwoZGl0X3N0dWJfZGFpKTsKIAogc3RhdGljIGludCBzcGRpZl9kaXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvc3RhYzk3NjYuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3RhYzk3NjYuYwppbmRleCA4YWQ0YjdiLi5iZWZjNjQ4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3N0YWM5NzY2LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9zdGFjOTc2Ni5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAkJc3RhYzk3NjZfYWM5N193cml0ZShjb2RlYywgQUM5N19JTlRfUEFHSU5HLCAxKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmIChyZWcgLyAyID4gQVJSQVlfU0laRShzdGFjOTc2Nl9yZWcpKQorCWlmIChyZWcgLyAyID49IEFSUkFZX1NJWkUoc3RhYzk3NjZfcmVnKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlzb2NfYWM5N19vcHMud3JpdGUoY29kZWMtPmFjOTcsIHJlZywgdmFsKTsKQEAgLTE2OCw3ICsxNjgsNyBAQAogCQlzdGFjOTc2Nl9hYzk3X3dyaXRlKGNvZGVjLCBBQzk3X0lOVF9QQUdJTkcsIDEpOwogCQlyZXR1cm4gdmFsOwogCX0KLQlpZiAocmVnIC8gMiA+IEFSUkFZX1NJWkUoc3RhYzk3NjZfcmVnKSkKKwlpZiAocmVnIC8gMiA+PSBBUlJBWV9TSVpFKHN0YWM5NzY2X3JlZykpCiAJCXJldHVybiAtRUlPOwogCiAJaWYgKHJlZyA9PSBBQzk3X1JFU0VUIHx8IHJlZyA9PSBBQzk3X0dQSU9fU1RBVFVTIHx8CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKaW5kZXggY2IwZDFiZi4uMzM5NWNmOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYwpAQCAtNTMsNiArNTMsNyBAQAogCiAvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KIHN0cnVjdCBhaWMzeF9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKIAl1bnNpZ25lZCBpbnQgc3lzY2xrOwogCWludCBtYXN0ZXI7CiB9OwpAQCAtMTQ1LDggKzE0Niw4IEBACiAJCSAgICAgIHU4ICp2YWx1ZSkKIHsKIAkqdmFsdWUgPSByZWcgJiAweGZmOwotCWlmIChjb2RlYy0+aHdfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLCB2YWx1ZSwgMSkgIT0gMSkKLQkJcmV0dXJuIC1FSU87CisKKwl2YWx1ZVswXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjb2RlYy0+Y29udHJvbF9kYXRhLCB2YWx1ZVswXSk7CiAKIAlhaWMzeF93cml0ZV9yZWdfY2FjaGUoY29kZWMsIHJlZywgKnZhbHVlKTsKIAlyZXR1cm4gMDsKQEAgLTExNTYsMTEgKzExNTcsMTMgQEAKICAqIGluaXRpYWxpc2UgdGhlIEFJQzNYIGRyaXZlcgogICogcmVnaXN0ZXIgdGhlIG1peGVyIGFuZCBkc3AgaW50ZXJmYWNlcyB3aXRoIHRoZSBrZXJuZWwKICAqLwotc3RhdGljIGludCBhaWMzeF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQorc3RhdGljIGludCBhaWMzeF9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwotCXN0cnVjdCBhaWMzeF9zZXR1cF9kYXRhICpzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKLQlpbnQgcmVnLCByZXQgPSAwOworCWludCByZWc7CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwogCiAJY29kZWMtPm5hbWUgPSAidGx2MzIwYWljM3giOwogCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwpAQCAtMTE3NywxMyArMTE4MCw2IEBACiAJYWljM3hfd3JpdGUoY29kZWMsIEFJQzNYX1BBR0VfU0VMRUNULCBQQUdFMF9TRUxFQ1QpOwogCWFpYzN4X3dyaXRlKGNvZGVjLCBBSUMzWF9SRVNFVCwgU09GVF9SRVNFVCk7CiAKLQkvKiByZWdpc3RlciBwY21zICovCi0JcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImFpYzN4OiBmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOwotCQlnb3RvIHBjbV9lcnI7Ci0JfQotCiAJLyogREFDIGRlZmF1bHQgdm9sdW1lIGFuZCBtdXRlICovCiAJYWljM3hfd3JpdGUoY29kZWMsIExEQUNfVk9MLCBERUZBVUxUX1ZPTCB8IE1VVEVfT04pOwogCWFpYzN4X3dyaXRlKGNvZGVjLCBSREFDX1ZPTCwgREVGQVVMVF9WT0wgfCBNVVRFX09OKTsKQEAgLTEyNTAsMzAgKzEyNDYsNTEgQEAKIAkvKiBvZmYsIHdpdGggcG93ZXIgb24gKi8KIAlhaWMzeF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCi0JLyogc2V0dXAgR1BJTyBmdW5jdGlvbnMgKi8KLQlhaWMzeF93cml0ZShjb2RlYywgQUlDM1hfR1BJTzFfUkVHLCAoc2V0dXAtPmdwaW9fZnVuY1swXSAmIDB4ZikgPDwgNCk7Ci0JYWljM3hfd3JpdGUoY29kZWMsIEFJQzNYX0dQSU8yX1JFRywgKHNldHVwLT5ncGlvX2Z1bmNbMV0gJiAweGYpIDw8IDQpOwotCi0Jc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFpYzN4X3NuZF9jb250cm9scywKLQkJCQlBUlJBWV9TSVpFKGFpYzN4X3NuZF9jb250cm9scykpOwotCWFpYzN4X2FkZF93aWRnZXRzKGNvZGVjKTsKLQlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYWljM3g6IGZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKLQkJZ290byBjYXJkX2VycjsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotCi1jYXJkX2VycjoKLQlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwotCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7Ci1wY21fZXJyOgotCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKmFpYzN4X3NvY2RldjsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqYWljM3hfY29kZWM7CisKK3N0YXRpYyBpbnQgYWljM3hfcmVnaXN0ZXIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCByZXQ7CisKKwlyZXQgPSBhaWMzeF9pbml0KGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGlzZSBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWFpYzN4X2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlY1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmFpYzN4X2RhaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgZGFpXG4iKTsKKwkJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhaWMzeF91bnJlZ2lzdGVyKHN0cnVjdCBhaWMzeF9wcml2ICphaWMzeCkKK3sKKwlhaWMzeF9zZXRfYmlhc19sZXZlbCgmYWljM3gtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmFpYzN4X2RhaSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZhaWMzeC0+Y29kZWMpOworCisJa2ZyZWUoYWljM3gpOworCWFpYzN4X2NvZGVjID0gTlVMTDsKKworCXJldHVybiAwOworfQogCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQogLyoKQEAgLTEyODgsMjggKzEzMDUsMzYgQEAKIHN0YXRpYyBpbnQgYWljM3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCiAJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBhaWMzeF9zb2NkZXY7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKLQlpbnQgcmV0OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3QgYWljM3hfcHJpdiAqYWljM3g7CiAKLQlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CisJYWljM3ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWljM3hfcHJpdiksIEdGUF9LRVJORUwpOworCWlmIChhaWMzeCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwcml2YXRlIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljb2RlYyA9ICZhaWMzeC0+Y29kZWM7CisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gYWljM3g7CiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKwljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCkgaTJjX21hc3Rlcl9zZW5kOwogCi0JcmV0ID0gYWljM3hfaW5pdChzb2NkZXYpOwotCWlmIChyZXQgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgImFpYzN4OiBmYWlsZWQgdG8gaW5pdGlhbGlzZSBBSUMzWFxuIik7Ci0JcmV0dXJuIHJldDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBhaWMzeCk7CisKKwlyZXR1cm4gYWljM3hfcmVnaXN0ZXIoY29kZWMpOwogfQogCiBzdGF0aWMgaW50IGFpYzN4X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKLQlyZXR1cm4gMDsKKwlzdHJ1Y3QgYWljM3hfcHJpdiAqYWljM3ggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXJldHVybiBhaWMzeF91bnJlZ2lzdGVyKGFpYzN4KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFpYzN4X2kyY19pZFtdID0gewogCXsgInRsdjMyMGFpYzN4IiwgMCB9LAorCXsgInRsdjMyMGFpYzMzIiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhaWMzeF9pMmNfaWQpOwpAQCAtMTMyMCw1NiArMTM0NSwyOCBAQAogCQkubmFtZSA9ICJhaWMzeCBJMkMgQ29kZWMiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAotCS5wcm9iZSA9IGFpYzN4X2kyY19wcm9iZSwKKwkucHJvYmUJPSBhaWMzeF9pMmNfcHJvYmUsCiAJLnJlbW92ZSA9IGFpYzN4X2kyY19yZW1vdmUsCiAJLmlkX3RhYmxlID0gYWljM3hfaTJjX2lkLAogfTsKIAotc3RhdGljIGludCBhaWMzeF9pMmNfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqdmFsdWUsIGludCBsZW4pCitzdGF0aWMgaW5saW5lIHZvaWQgYWljM3hfaTJjX2luaXQodm9pZCkKIHsKLQl2YWx1ZVswXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHZhbHVlWzBdKTsKLQlyZXR1cm4gKGxlbiA9PSAxKTsKLX0KLQotc3RhdGljIGludCBhaWMzeF9hZGRfaTJjX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCSBjb25zdCBzdHJ1Y3QgYWljM3hfc2V0dXBfZGF0YSAqc2V0dXApCi17Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJaW50IHJldDsKIAogCXJldCA9IGkyY19hZGRfZHJpdmVyKCZhaWMzeF9pMmNfZHJpdmVyKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGkyYyBkcml2ZXJcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOwotCWluZm8uYWRkciA9IHNldHVwLT5pMmNfYWRkcmVzczsKLQlzdHJsY3B5KGluZm8udHlwZSwgInRsdjMyMGFpYzN4IiwgSTJDX05BTUVfU0laRSk7Ci0KLQlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKHNldHVwLT5pMmNfYnVzKTsKLQlpZiAoIWFkYXB0ZXIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyICVkXG4iLAotCQkJc2V0dXAtPmkyY19idXMpOwotCQlnb3RvIGVycl9kcml2ZXI7Ci0JfQotCi0JY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOwotCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKLQlpZiAoIWNsaWVudCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhZGQgaTJjIGRldmljZSBhdCAweCV4XG4iLAotCQkJKHVuc2lnbmVkIGludClpbmZvLmFkZHIpOwotCQlnb3RvIGVycl9kcml2ZXI7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9kcml2ZXI6Ci0JaTJjX2RlbF9kcml2ZXIoJmFpYzN4X2kyY19kcml2ZXIpOwotCXJldHVybiAtRU5PREVWOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIHJlZ3NpdGVyaW5nIGkyYyBkcml2ZXIsICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIHJldCk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhaWMzeF9pMmNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZhaWMzeF9pMmNfZHJpdmVyKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYWljM3hfaTJjX2luaXQodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgYWljM3hfaTJjX2V4aXQodm9pZCkgeyB9CiAjZW5kaWYKIAogc3RhdGljIGludCBhaWMzeF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMTM3Nyw0MyArMTM3NCw1MSBAQAogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGFpYzN4X3NldHVwX2RhdGEgKnNldHVwOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKLQlzdHJ1Y3QgYWljM3hfcHJpdiAqYWljM3g7CiAJaW50IHJldCA9IDA7CiAKLQlwcmludGsoS0VSTl9JTkZPICJBSUMzWCBBdWRpbyBDb2RlYyAlc1xuIiwgQUlDM1hfVkVSU0lPTik7Ci0KLQlzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKLQljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvZGVjID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYWljM3ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWljM3hfcHJpdiksIEdGUF9LRVJORUwpOwotCWlmIChhaWMzeCA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNvZGVjKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJY29kZWMgPSBhaWMzeF9jb2RlYzsKKwlpZiAoIWNvZGVjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY29kZWMtPnByaXZhdGVfZGF0YSA9IGFpYzN4OwogCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKLQltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCXNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOwogCi0JYWljM3hfc29jZGV2ID0gc29jZGV2OwotI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKLQlpZiAoc2V0dXAtPmkyY19hZGRyZXNzKSB7Ci0JCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KSBpMmNfbWFzdGVyX3NlbmQ7Ci0JCWNvZGVjLT5od19yZWFkID0gKGh3X3JlYWRfdCkgYWljM3hfaTJjX3JlYWQ7Ci0JCXJldCA9IGFpYzN4X2FkZF9pMmNfZGV2aWNlKHBkZXYsIHNldHVwKTsKKwlpZiAoc2V0dXApIHsKKwkJLyogc2V0dXAgR1BJTyBmdW5jdGlvbnMgKi8KKwkJYWljM3hfd3JpdGUoY29kZWMsIEFJQzNYX0dQSU8xX1JFRywKKwkJCSAgICAoc2V0dXAtPmdwaW9fZnVuY1swXSAmIDB4ZikgPDwgNCk7CisJCWFpYzN4X3dyaXRlKGNvZGVjLCBBSUMzWF9HUElPMl9SRUcsCisJCQkgICAgKHNldHVwLT5ncGlvX2Z1bmNbMV0gJiAweGYpIDw8IDQpOwogCX0KLSNlbHNlCi0JLyogQWRkIG90aGVyIGludGVyZmFjZXMgaGVyZSAqLwotI2VuZGlmCiAKLQlpZiAocmV0ICE9IDApIHsKLQkJa2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7Ci0JCWtmcmVlKGNvZGVjKTsKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImFpYzN4OiBmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOworCQlnb3RvIHBjbV9lcnI7CiAJfQorCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFpYzN4X3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRShhaWMzeF9zbmRfY29udHJvbHMpKTsKKworCWFpYzN4X2FkZF93aWRnZXRzKGNvZGVjKTsKKworCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhaWMzeDogZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlnb3RvIGNhcmRfZXJyOworCX0KKworCXJldHVybiByZXQ7CisKK2NhcmRfZXJyOgorCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworcGNtX2VycjoKKwlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDI4LDEyICsxNDMzLDggQEAKIAogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0JaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNvZGVjLT5jb250cm9sX2RhdGEpOwotCWkyY19kZWxfZHJpdmVyKCZhaWMzeF9pMmNfZHJpdmVyKTsKLSNlbmRpZgotCWtmcmVlKGNvZGVjLT5wcml2YXRlX2RhdGEpOwotCWtmcmVlKGNvZGVjKTsKKworCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDQ4LDEzICsxNDQ5LDE1IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFpYzN4X21vZGluaXQodm9pZCkKIHsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmFpYzN4X2RhaSk7CisJYWljM3hfaTJjX2luaXQoKTsKKworCXJldHVybiAwOwogfQogbW9kdWxlX2luaXQoYWljM3hfbW9kaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhaWMzeF9leGl0KHZvaWQpCiB7Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmYWljM3hfZGFpKTsKKwlhaWMzeF9pMmNfZXhpdCgpOwogfQogbW9kdWxlX2V4aXQoYWljM3hfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guaCBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guaAppbmRleCBhYzgyN2U1Li45YWYxYzg4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmgKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5oCkBAIC0yODIsOCArMjgyLDYgQEAKIGludCBhaWMzeF9idXR0b25fcHJlc3NlZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOwogCiBzdHJ1Y3QgYWljM3hfc2V0dXBfZGF0YSB7Ci0JaW50IGkyY19idXM7Ci0JdW5zaWduZWQgc2hvcnQgaTJjX2FkZHJlc3M7CiAJdW5zaWduZWQgaW50IGdwaW9fZnVuY1syXTsKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKaW5kZXggNGRiYjg1My4uNGRmN2M2YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKQEAgLTIyNSw1NSArMjI1LDExIEBACiAJCXJldHVybjsKIAogCWlmIChtdXRlKSB7Ci0JCS8qIEJ5cGFzcyB0aGUgcmVnX2NhY2hlIGFuZCBtdXRlIHRoZSB2b2x1bWVzCi0JCSAqIEhlYWRzZXQgbXV0ZSBpcyBkb25lIGluIGl0J3Mgb3duIGV2ZW50IGhhbmRsZXIKLQkJICogVGhpbmdzIHRvIG11dGU6ICBFYXJwaWVjZSwgUHJlRHJpdkwvUiwgQ2Fya2l0TC9SCi0JCSAqLwotCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfRUFSX0NUTCk7Ci0JCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAotCQkJCQlyZWdfdmFsICYgKH5UV0w0MDMwX0VBUl9HQUlOKSwKLQkJCQkJVFdMNDAzMF9SRUdfRUFSX0NUTCk7Ci0KLQkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRURMX0NUTCk7Ci0JCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAotCQkJCQlyZWdfdmFsICYgKH5UV0w0MDMwX1BSRURMX0dBSU4pLAotCQkJCQlUV0w0MDMwX1JFR19QUkVETF9DVEwpOwotCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFRFJfQ1RMKTsKLQkJdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsCi0JCQkJCXJlZ192YWwgJiAoflRXTDQwMzBfUFJFRFJfR0FJTiksCi0JCQkJCVRXTDQwMzBfUkVHX1BSRURMX0NUTCk7Ci0KLQkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRUNLTF9DVEwpOwotCQl0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9BVURJT19WT0lDRSwKLQkJCQkJcmVnX3ZhbCAmICh+VFdMNDAzMF9QUkVDS0xfR0FJTiksCi0JCQkJCVRXTDQwMzBfUkVHX1BSRUNLTF9DVEwpOwotCQlyZWdfdmFsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFQ0tSX0NUTCk7Ci0JCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAotCQkJCQlyZWdfdmFsICYgKH5UV0w0MDMwX1BSRUNLUl9HQUlOKSwKLQkJCQkJVFdMNDAzMF9SRUdfUFJFQ0tSX0NUTCk7Ci0KIAkJLyogRGlzYWJsZSBQTEwgKi8KIAkJcmVnX3ZhbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0FQTExfQ1RMKTsKIAkJcmVnX3ZhbCAmPSB+VFdMNDAzMF9BUExMX0VOOwogCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19BUExMX0NUTCwgcmVnX3ZhbCk7CiAJfSBlbHNlIHsKLQkJLyogUmVzdG9yZSB0aGUgdm9sdW1lcwotCQkgKiBIZWFkc2V0IG11dGUgaXMgZG9uZSBpbiBpdCdzIG93biBldmVudCBoYW5kbGVyCi0JCSAqIFRoaW5ncyB0byByZXN0b3JlOiAgRWFycGllY2UsIFByZURyaXZML1IsIENhcmtpdEwvUgotCQkgKi8KLQkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfRUFSX0NUTCwKLQkJCXR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0VBUl9DVEwpKTsKLQotCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVETF9DVEwsCi0JCQl0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19QUkVETF9DVEwpKTsKLQkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFRFJfQ1RMLAotCQkJdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFRFJfQ1RMKSk7Ci0KLQkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFQ0tMX0NUTCwKLQkJCXR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRUNLTF9DVEwpKTsKLQkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfUFJFQ0tSX0NUTCwKLQkJCXR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX1BSRUNLUl9DVEwpKTsKLQogCQkvKiBFbmFibGUgUExMICovCiAJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19BUExMX0NUTCk7CiAJCXJlZ192YWwgfD0gVFdMNDAzMF9BUExMX0VOOwpAQCAtNDQzLDE2ICszOTksMjAgQEAKIAogLyogTGVmdCBhbmFsb2cgbWljcm9waG9uZSBzZWxlY3Rpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX2RhcG1fYW5hbG9nbG1pY19jb250cm9sc1tdID0gewotCVNPQ19EQVBNX1NJTkdMRSgiTWFpbiBtaWMiLCBUV0w0MDMwX1JFR19BTkFNSUNMLCAwLCAxLCAwKSwKLQlTT0NfREFQTV9TSU5HTEUoIkhlYWRzZXQgbWljIiwgVFdMNDAzMF9SRUdfQU5BTUlDTCwgMSwgMSwgMCksCi0JU09DX0RBUE1fU0lOR0xFKCJBVVhMIiwgVFdMNDAzMF9SRUdfQU5BTUlDTCwgMiwgMSwgMCksCi0JU09DX0RBUE1fU0lOR0xFKCJDYXJraXQgbWljIiwgVFdMNDAzMF9SRUdfQU5BTUlDTCwgMywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNYWluIE1pYyBDYXB0dXJlIFN3aXRjaCIsCisJCQlUV0w0MDMwX1JFR19BTkFNSUNMLCAwLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkhlYWRzZXQgTWljIENhcHR1cmUgU3dpdGNoIiwKKwkJCVRXTDQwMzBfUkVHX0FOQU1JQ0wsIDEsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQVVYTCBDYXB0dXJlIFN3aXRjaCIsCisJCQlUV0w0MDMwX1JFR19BTkFNSUNMLCAyLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkNhcmtpdCBNaWMgQ2FwdHVyZSBTd2l0Y2giLAorCQkJVFdMNDAzMF9SRUdfQU5BTUlDTCwgMywgMSwgMCksCiB9OwogCiAvKiBSaWdodCBhbmFsb2cgbWljcm9waG9uZSBzZWxlY3Rpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0d2w0MDMwX2RhcG1fYW5hbG9ncm1pY19jb250cm9sc1tdID0gewotCVNPQ19EQVBNX1NJTkdMRSgiU3ViIG1pYyIsIFRXTDQwMzBfUkVHX0FOQU1JQ1IsIDAsIDEsIDApLAotCVNPQ19EQVBNX1NJTkdMRSgiQVVYUiIsIFRXTDQwMzBfUkVHX0FOQU1JQ1IsIDIsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiU3ViIE1pYyBDYXB0dXJlIFN3aXRjaCIsIFRXTDQwMzBfUkVHX0FOQU1JQ1IsIDAsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQVVYUiBDYXB0dXJlIFN3aXRjaCIsIFRXTDQwMzBfUkVHX0FOQU1JQ1IsIDIsIDEsIDApLAogfTsKIAogLyogVFgxIEwvUiBBbmFsb2cvRGlnaXRhbCBtaWNyb3Bob25lIHNlbGVjdGlvbiAqLwpAQCAtNTYwLDYgKzUyMCw0MSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogT3V0cHV0IFBHQSBidWlsZGVyOgorICogSGFuZGxlIHRoZSBtdXRpbmcgYW5kIHVubXV0aW5nIG9mIHRoZSBnaXZlbiBvdXRwdXQgKHR1cm5pbmcgb2ZmIHRoZQorICogYW1wbGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3V0cHV0IHBpbikKKyAqIE9uIG11dGUgYnlwYXNzIHRoZSByZWdfY2FjaGUgYW5kIG11dGUgdGhlIHZvbHVtZQorICogT24gdW5tdXRlOiByZXN0b3JlIHRoZSByZWdpc3RlciBjb250ZW50CisgKiBPdXRwdXRzIGhhbmRsZWQgaW4gdGhpcyB3YXk6ICBFYXJwaWVjZSwgUHJlRHJpdkwvUiwgQ2Fya2l0TC9SCisgKi8KKyNkZWZpbmUgVFdMNDAzMF9PVVRQVVRfUEdBKHBpbl9uYW1lLCByZWcsIG1hc2spCQkJCVwKK3N0YXRpYyBpbnQgcGluX25hbWUjI3BnYV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywJCVwKKwkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkJCVwKK3sJCQkJCQkJCQlcCisJdTggcmVnX3ZhbDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXN3aXRjaCAoZXZlbnQpIHsJCQkJCQlcCisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CQkJCQlcCisJCXR3bDQwMzBfd3JpdGUody0+Y29kZWMsIHJlZywJCQkJXAorCQkJdHdsNDAzMF9yZWFkX3JlZ19jYWNoZSh3LT5jb2RlYywgcmVnKSk7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CQkJCQlcCisJCXJlZ192YWwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKHctPmNvZGVjLCByZWcpOwlcCisJCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLAlcCisJCQkJCXJlZ192YWwgJiAofm1hc2spLAkJXAorCQkJCQlyZWcpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorCXJldHVybiAwOwkJCQkJCQlcCit9CisKK1RXTDQwMzBfT1VUUFVUX1BHQShlYXJwaWVjZSwgVFdMNDAzMF9SRUdfRUFSX0NUTCwgVFdMNDAzMF9FQVJfR0FJTik7CitUV0w0MDMwX09VVFBVVF9QR0EocHJlZHJpdmVsLCBUV0w0MDMwX1JFR19QUkVETF9DVEwsIFRXTDQwMzBfUFJFRExfR0FJTik7CitUV0w0MDMwX09VVFBVVF9QR0EocHJlZHJpdmVyLCBUV0w0MDMwX1JFR19QUkVEUl9DVEwsIFRXTDQwMzBfUFJFRFJfR0FJTik7CitUV0w0MDMwX09VVFBVVF9QR0EoY2Fya2l0bCwgVFdMNDAzMF9SRUdfUFJFQ0tMX0NUTCwgVFdMNDAzMF9QUkVDS0xfR0FJTik7CitUV0w0MDMwX09VVFBVVF9QR0EoY2Fya2l0ciwgVFdMNDAzMF9SRUdfUFJFQ0tSX0NUTCwgVFdMNDAzMF9QUkVDS1JfR0FJTik7CisKIHN0YXRpYyB2b2lkIGhhbmRzZnJlZV9yYW1wKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHJlZywgaW50IHJhbXApCiB7CiAJdW5zaWduZWQgY2hhciBoc19jdGw7CkBAIC02MjAsNiArNjE1LDkgQEAKIAogc3RhdGljIHZvaWQgaGVhZHNldF9yYW1wKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHJhbXApCiB7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBjb2RlYy0+c29jZGV2OworCXN0cnVjdCB0d2w0MDMwX3NldHVwX2RhdGEgKnNldHVwID0gc29jZGV2LT5jb2RlY19kYXRhOworCiAJdW5zaWduZWQgY2hhciBoc19nYWluLCBoc19wb3A7CiAJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJLyogQmFzZSB2YWx1ZXMgZm9yIHJhbXAgZGVsYXkgY2FsY3VsYXRpb246IDJeMTkgLSAyXjI2ICovCkBAIC02MjksNiArNjI3LDE3IEBACiAJaHNfZ2FpbiA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX0dBSU5fU0VUKTsKIAloc19wb3AgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCk7CiAKKwkvKiBFbmFibGUgZXh0ZXJuYWwgbXV0ZSBjb250cm9sLCB0aGlzIGRyYW1hdGljYWxseSByZWR1Y2VzCisJICogdGhlIHBvcC1ub2lzZSAqLworCWlmIChzZXR1cCAmJiBzZXR1cC0+aHNfZXh0bXV0ZSkgeworCQlpZiAoc2V0dXAtPnNldF9oc19leHRtdXRlKSB7CisJCQlzZXR1cC0+c2V0X2hzX2V4dG11dGUoMSk7CisJCX0gZWxzZSB7CisJCQloc19wb3AgfD0gVFdMNDAzMF9FWFRNVVRFOworCQkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIGhzX3BvcCk7CisJCX0KKwl9CisKIAlpZiAocmFtcCkgewogCQkvKiBIZWFkc2V0IHJhbXAtdXAgYWNjb3JkaW5nIHRvIHRoZSBUUk0gKi8KIAkJaHNfcG9wIHw9IFRXTDQwMzBfVk1JRF9FTjsKQEAgLTYzNiw2ICs2NDUsOSBAQAogCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19HQUlOX1NFVCwgaHNfZ2Fpbik7CiAJCWhzX3BvcCB8PSBUV0w0MDMwX1JBTVBfRU47CiAJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VULCBoc19wb3ApOworCQkvKiBXYWl0IHJhbXAgZGVsYXkgdGltZSArIDEsIHNvIHRoZSBWTUlEIGNhbiBzZXR0bGUgKi8KKwkJbWRlbGF5KChyYW1wX2Jhc2VbKGhzX3BvcCAmIFRXTDQwMzBfUkFNUF9ERUxBWSkgPj4gMl0gLworCQkJdHdsNDAzMC0+c3lzY2xrKSArIDEpOwogCX0gZWxzZSB7CiAJCS8qIEhlYWRzZXQgcmFtcC1kb3duIF9ub3RfIGFjY29yZGluZyB0bwogCQkgKiB0aGUgVFJNLCBidXQgaW4gYSB3YXkgdGhhdCBpdCBpcyB3b3JraW5nICovCkBAIC02NTIsNiArNjY0LDE2IEBACiAJCWhzX3BvcCAmPSB+VFdMNDAzMF9WTUlEX0VOOwogCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgaHNfcG9wKTsKIAl9CisKKwkvKiBEaXNhYmxlIGV4dGVybmFsIG11dGUgKi8KKwlpZiAoc2V0dXAgJiYgc2V0dXAtPmhzX2V4dG11dGUpIHsKKwkJaWYgKHNldHVwLT5zZXRfaHNfZXh0bXV0ZSkgeworCQkJc2V0dXAtPnNldF9oc19leHRtdXRlKDApOworCQl9IGVsc2UgeworCQkJaHNfcG9wICY9IH5UV0w0MDMwX0VYVE1VVEU7CisJCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgaHNfcG9wKTsKKwkJfQorCX0KIH0KIAogc3RhdGljIGludCBoZWFkc2V0bHBnYV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKQEAgLTcxMiw3ICs3MzQsMTkgQEAKIAogCXJlZyA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUody0+Y29kZWMsIG0tPnJlZyk7CiAKLQlpZiAobS0+cmVnIDw9IFRXTDQwMzBfUkVHX0FSWFIyX0FQR0FfQ1RMKSB7CisJLyoKKwkgKiBieXBhc3Nfc3RhdGVbMDozXSAtIGFuYWxvZyBIaUZpIGJ5cGFzcworCSAqIGJ5cGFzc19zdGF0ZVs0XSAgIC0gYW5hbG9nIHZvaWNlIGJ5cGFzcworCSAqIGJ5cGFzc19zdGF0ZVs1XSAgIC0gZGlnaXRhbCB2b2ljZSBieXBhc3MKKwkgKiBieXBhc3Nfc3RhdGVbNjo3XSAtIGRpZ2l0YWwgSGlGaSBieXBhc3MKKwkgKi8KKwlpZiAobS0+cmVnID09IFRXTDQwMzBfUkVHX1ZTVFBHQSkgeworCQkvKiBWb2ljZSBkaWdpdGFsIGJ5cGFzcyAqLworCQlpZiAocmVnKQorCQkJdHdsNDAzMC0+YnlwYXNzX3N0YXRlIHw9ICgxIDw8IDUpOworCQllbHNlCisJCQl0d2w0MDMwLT5ieXBhc3Nfc3RhdGUgJj0gfigxIDw8IDUpOworCX0gZWxzZSBpZiAobS0+cmVnIDw9IFRXTDQwMzBfUkVHX0FSWFIyX0FQR0FfQ1RMKSB7CiAJCS8qIEFuYWxvZyBieXBhc3MgKi8KIAkJaWYgKHJlZyAmICgxIDw8IG0tPnNoaWZ0KSkKIAkJCXR3bDQwMzAtPmJ5cGFzc19zdGF0ZSB8PQpAQCAtNzI2LDEyICs3NjAsNiBAQAogCQkJdHdsNDAzMC0+YnlwYXNzX3N0YXRlIHw9ICgxIDw8IDQpOwogCQllbHNlCiAJCQl0d2w0MDMwLT5ieXBhc3Nfc3RhdGUgJj0gfigxIDw8IDQpOwotCX0gZWxzZSBpZiAobS0+cmVnID09IFRXTDQwMzBfUkVHX1ZTVFBHQSkgewotCQkvKiBWb2ljZSBkaWdpdGFsIGJ5cGFzcyAqLwotCQlpZiAocmVnKQotCQkJdHdsNDAzMC0+YnlwYXNzX3N0YXRlIHw9ICgxIDw8IDUpOwotCQllbHNlCi0JCQl0d2w0MDMwLT5ieXBhc3Nfc3RhdGUgJj0gfigxIDw8IDUpOwogCX0gZWxzZSB7CiAJCS8qIERpZ2l0YWwgYnlwYXNzICovCiAJCWlmIChyZWcgJiAoMHg3IDw8IG0tPnNoaWZ0KSkKQEAgLTkyNCw3ICs5NTIsNyBAQAogCQkJQVJSQVlfU0laRSh0d2w0MDMwX29wX21vZGVzX3RleHRzKSwKIAkJCXR3bDQwMzBfb3BfbW9kZXNfdGV4dHMpOwogCi1pbnQgc25kX3NvY19wdXRfdHdsNDAzMF9vcG1vZGVfZW51bV9kb3VibGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCitzdGF0aWMgaW50IHNuZF9zb2NfcHV0X3R3bDQwMzBfb3Btb2RlX2VudW1fZG91YmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKQEAgLTEwMDUsNiArMTAzMywxNiBAQAogICovCiBzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUoaW5wdXRfZ2Fpbl90bHYsIDAsIDYwMCwgMCk7CiAKKy8qIEFWQURDIGNsb2NrIHByaW9yaXR5ICovCitzdGF0aWMgY29uc3QgY2hhciAqdHdsNDAzMF9hdmFkY19jbGtfcHJpb3JpdHlfdGV4dHNbXSA9IHsKKwkiVm9pY2UgaGlnaCBwcmlvcml0eSIsICJIaUZpIGhpZ2ggcHJpb3JpdHkiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHR3bDQwMzBfYXZhZGNfY2xrX3ByaW9yaXR5X2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShUV0w0MDMwX1JFR19BVkFEQ19DVEwsIDIsCisJCQlBUlJBWV9TSVpFKHR3bDQwMzBfYXZhZGNfY2xrX3ByaW9yaXR5X3RleHRzKSwKKwkJCXR3bDQwMzBfYXZhZGNfY2xrX3ByaW9yaXR5X3RleHRzKTsKKwogc3RhdGljIGNvbnN0IGNoYXIgKnR3bDQwMzBfcmFtcGRlbGF5X3RleHRzW10gPSB7CiAJIjI3LzIwLzE0IG1zIiwgIjU1LzQwLzI3IG1zIiwgIjEwOS84MS81NSBtcyIsICIyMTgvMTYxLzEwOSBtcyIsCiAJIjQzNy8zMjMvMjE4IG1zIiwgIjg3NC82NDUvNDM3IG1zIiwgIjE3NDgvMTI5MS84NzQgbXMiLApAQCAtMTEwNiw2ICsxMTQ0LDggQEAKIAlTT0NfRE9VQkxFX1RMVigiQW5hbG9nIENhcHR1cmUgVm9sdW1lIiwgVFdMNDAzMF9SRUdfQU5BTUlDX0dBSU4sCiAJCTAsIDMsIDUsIDAsIGlucHV0X2dhaW5fdGx2KSwKIAorCVNPQ19FTlVNKCJBVkFEQyBDbG9jayBQcmlvcml0eSIsIHR3bDQwMzBfYXZhZGNfY2xrX3ByaW9yaXR5X2VudW0pLAorCiAJU09DX0VOVU0oIkhTIHJhbXAgZGVsYXkiLCB0d2w0MDMwX3JhbXBkZWxheV9lbnVtKSwKIAogCVNPQ19FTlVNKCJWaWJyYSBILWJyaWRnZSBtb2RlIiwgdHdsNDAzMF92aWJyYWRpcm1vZGVfZW51bSksCkBAIC0xMjA4LDEzICsxMjQ4LDIyIEBACiAJU05EX1NPQ19EQVBNX01JWEVSKCJFYXJwaWVjZSBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJCSZ0d2w0MDMwX2RhcG1fZWFycGllY2VfY29udHJvbHNbMF0sCiAJCQlBUlJBWV9TSVpFKHR3bDQwMzBfZGFwbV9lYXJwaWVjZV9jb250cm9scykpLAorCVNORF9TT0NfREFQTV9QR0FfRSgiRWFycGllY2UgUEdBIiwgU05EX1NPQ19OT1BNLAorCQkJMCwgMCwgTlVMTCwgMCwgZWFycGllY2VwZ2FfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTVV8U05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKIAkvKiBQcmVEcml2TC9SICovCiAJU05EX1NPQ19EQVBNX01JWEVSKCJQcmVkcml2ZUwgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCiAJCQkmdHdsNDAzMF9kYXBtX3ByZWRyaXZlbF9jb250cm9sc1swXSwKIAkJCUFSUkFZX1NJWkUodHdsNDAzMF9kYXBtX3ByZWRyaXZlbF9jb250cm9scykpLAorCVNORF9TT0NfREFQTV9QR0FfRSgiUHJlZHJpdmVMIFBHQSIsIFNORF9TT0NfTk9QTSwKKwkJCTAsIDAsIE5VTEwsIDAsIHByZWRyaXZlbHBnYV9ldmVudCwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNVXxTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAogCVNORF9TT0NfREFQTV9NSVhFUigiUHJlZHJpdmVSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAogCQkJJnR3bDQwMzBfZGFwbV9wcmVkcml2ZXJfY29udHJvbHNbMF0sCiAJCQlBUlJBWV9TSVpFKHR3bDQwMzBfZGFwbV9wcmVkcml2ZXJfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIlByZWRyaXZlUiBQR0EiLCBTTkRfU09DX05PUE0sCisJCQkwLCAwLCBOVUxMLCAwLCBwcmVkcml2ZXJwZ2FfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTVV8U05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKIAkvKiBIZWFkc2V0TC9SICovCiAJU05EX1NPQ19EQVBNX01JWEVSKCJIZWFkc2V0TCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJCSZ0d2w0MDMwX2RhcG1faHNvbF9jb250cm9sc1swXSwKQEAgLTEyMzIsMjIgKzEyODEsMjggQEAKIAlTTkRfU09DX0RBUE1fTUlYRVIoIkNhcmtpdEwgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCiAJCQkmdHdsNDAzMF9kYXBtX2NhcmtpdGxfY29udHJvbHNbMF0sCiAJCQlBUlJBWV9TSVpFKHR3bDQwMzBfZGFwbV9jYXJraXRsX2NvbnRyb2xzKSksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJDYXJraXRMIFBHQSIsIFNORF9TT0NfTk9QTSwKKwkJCTAsIDAsIE5VTEwsIDAsIGNhcmtpdGxwZ2FfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTVV8U05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKIAlTTkRfU09DX0RBUE1fTUlYRVIoIkNhcmtpdFIgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCiAJCQkmdHdsNDAzMF9kYXBtX2NhcmtpdHJfY29udHJvbHNbMF0sCiAJCQlBUlJBWV9TSVpFKHR3bDQwMzBfZGFwbV9jYXJraXRyX2NvbnRyb2xzKSksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJDYXJraXRSIFBHQSIsIFNORF9TT0NfTk9QTSwKKwkJCTAsIDAsIE5VTEwsIDAsIGNhcmtpdHJwZ2FfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTVV8U05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKIAogCS8qIE91dHB1dCBNVVggY29udHJvbHMgKi8KIAkvKiBIYW5kc2ZyZWVML1IgKi8KIAlTTkRfU09DX0RBUE1fTVVYKCJIYW5kc2ZyZWVMIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJJnR3bDQwMzBfZGFwbV9oYW5kc2ZyZWVsX2NvbnRyb2wpLAotCVNORF9TT0NfREFQTV9TV0lUQ0goIkhhbmRzZnJlZUwgU3dpdGNoIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCVNORF9TT0NfREFQTV9TV0lUQ0goIkhhbmRzZnJlZUwiLCBTTkRfU09DX05PUE0sIDAsIDAsCiAJCQkmdHdsNDAzMF9kYXBtX2hhbmRzZnJlZWxtdXRlX2NvbnRyb2wpLAogCVNORF9TT0NfREFQTV9QR0FfRSgiSGFuZHNmcmVlTCBQR0EiLCBTTkRfU09DX05PUE0sCiAJCQkwLCAwLCBOVUxMLCAwLCBoYW5kc2ZyZWVscGdhX2V2ZW50LAogCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1VfFNORF9TT0NfREFQTV9QT1NUX1BNRCksCiAJU05EX1NPQ19EQVBNX01VWCgiSGFuZHNmcmVlUiBNdXgiLCBTTkRfU09DX05PUE0sIDUsIDAsCiAJCSZ0d2w0MDMwX2RhcG1faGFuZHNmcmVlcl9jb250cm9sKSwKLQlTTkRfU09DX0RBUE1fU1dJVENIKCJIYW5kc2ZyZWVSIFN3aXRjaCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwlTTkRfU09DX0RBUE1fU1dJVENIKCJIYW5kc2ZyZWVSIiwgU05EX1NPQ19OT1BNLCAwLCAwLAogCQkJJnR3bDQwMzBfZGFwbV9oYW5kc2ZyZWVybXV0ZV9jb250cm9sKSwKIAlTTkRfU09DX0RBUE1fUEdBX0UoIkhhbmRzZnJlZVIgUEdBIiwgU05EX1NPQ19OT1BNLAogCQkJMCwgMCwgTlVMTCwgMCwgaGFuZHNmcmVlcnBnYV9ldmVudCwKQEAgLTEyODIsMTEgKzEzMzcsMTEgQEAKIAkJU05EX1NPQ19EQVBNX1BPU1RfUkVHKSwKIAogCS8qIEFuYWxvZyBpbnB1dCBtaXhlcnMgZm9yIHRoZSBjYXB0dXJlIGFtcGxpZmllcnMgKi8KLQlTTkRfU09DX0RBUE1fTUlYRVIoIkFuYWxvZyBMZWZ0IENhcHR1cmUgUm91dGUiLAorCVNORF9TT0NfREFQTV9NSVhFUigiQW5hbG9nIExlZnQiLAogCQlUV0w0MDMwX1JFR19BTkFNSUNMLCA0LCAwLAogCQkmdHdsNDAzMF9kYXBtX2FuYWxvZ2xtaWNfY29udHJvbHNbMF0sCiAJCUFSUkFZX1NJWkUodHdsNDAzMF9kYXBtX2FuYWxvZ2xtaWNfY29udHJvbHMpKSwKLQlTTkRfU09DX0RBUE1fTUlYRVIoIkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIiwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkFuYWxvZyBSaWdodCIsCiAJCVRXTDQwMzBfUkVHX0FOQU1JQ1IsIDQsIDAsCiAJCSZ0d2w0MDMwX2RhcG1fYW5hbG9ncm1pY19jb250cm9sc1swXSwKIAkJQVJSQVlfU0laRSh0d2w0MDMwX2RhcG1fYW5hbG9ncm1pY19jb250cm9scykpLApAQCAtMTMyNiwxNiArMTM4MSwxOSBAQAogCXsiRWFycGllY2UgTWl4ZXIiLCAiQXVkaW9MMSIsICJBbmFsb2cgTDEgUGxheWJhY2sgTWl4ZXIifSwKIAl7IkVhcnBpZWNlIE1peGVyIiwgIkF1ZGlvTDIiLCAiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIn0sCiAJeyJFYXJwaWVjZSBNaXhlciIsICJBdWRpb1IxIiwgIkFuYWxvZyBSMSBQbGF5YmFjayBNaXhlciJ9LAorCXsiRWFycGllY2UgUEdBIiwgTlVMTCwgIkVhcnBpZWNlIE1peGVyIn0sCiAJLyogUHJlRHJpdkwgKi8KIAl7IlByZWRyaXZlTCBNaXhlciIsICJWb2ljZSIsICJBbmFsb2cgVm9pY2UgUGxheWJhY2sgTWl4ZXIifSwKIAl7IlByZWRyaXZlTCBNaXhlciIsICJBdWRpb0wxIiwgIkFuYWxvZyBMMSBQbGF5YmFjayBNaXhlciJ9LAogCXsiUHJlZHJpdmVMIE1peGVyIiwgIkF1ZGlvTDIiLCAiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIn0sCiAJeyJQcmVkcml2ZUwgTWl4ZXIiLCAiQXVkaW9SMiIsICJBbmFsb2cgUjIgUGxheWJhY2sgTWl4ZXIifSwKKwl7IlByZWRyaXZlTCBQR0EiLCBOVUxMLCAiUHJlZHJpdmVMIE1peGVyIn0sCiAJLyogUHJlRHJpdlIgKi8KIAl7IlByZWRyaXZlUiBNaXhlciIsICJWb2ljZSIsICJBbmFsb2cgVm9pY2UgUGxheWJhY2sgTWl4ZXIifSwKIAl7IlByZWRyaXZlUiBNaXhlciIsICJBdWRpb1IxIiwgIkFuYWxvZyBSMSBQbGF5YmFjayBNaXhlciJ9LAogCXsiUHJlZHJpdmVSIE1peGVyIiwgIkF1ZGlvUjIiLCAiQW5hbG9nIFIyIFBsYXliYWNrIE1peGVyIn0sCiAJeyJQcmVkcml2ZVIgTWl4ZXIiLCAiQXVkaW9MMiIsICJBbmFsb2cgTDIgUGxheWJhY2sgTWl4ZXIifSwKKwl7IlByZWRyaXZlUiBQR0EiLCBOVUxMLCAiUHJlZHJpdmVSIE1peGVyIn0sCiAJLyogSGVhZHNldEwgKi8KIAl7IkhlYWRzZXRMIE1peGVyIiwgIlZvaWNlIiwgIkFuYWxvZyBWb2ljZSBQbGF5YmFjayBNaXhlciJ9LAogCXsiSGVhZHNldEwgTWl4ZXIiLCAiQXVkaW9MMSIsICJBbmFsb2cgTDEgUGxheWJhY2sgTWl4ZXIifSwKQEAgLTEzNTAsMjQgKzE0MDgsMjYgQEAKIAl7IkNhcmtpdEwgTWl4ZXIiLCAiVm9pY2UiLCAiQW5hbG9nIFZvaWNlIFBsYXliYWNrIE1peGVyIn0sCiAJeyJDYXJraXRMIE1peGVyIiwgIkF1ZGlvTDEiLCAiQW5hbG9nIEwxIFBsYXliYWNrIE1peGVyIn0sCiAJeyJDYXJraXRMIE1peGVyIiwgIkF1ZGlvTDIiLCAiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIn0sCisJeyJDYXJraXRMIFBHQSIsIE5VTEwsICJDYXJraXRMIE1peGVyIn0sCiAJLyogQ2Fya2l0UiAqLwogCXsiQ2Fya2l0UiBNaXhlciIsICJWb2ljZSIsICJBbmFsb2cgVm9pY2UgUGxheWJhY2sgTWl4ZXIifSwKIAl7IkNhcmtpdFIgTWl4ZXIiLCAiQXVkaW9SMSIsICJBbmFsb2cgUjEgUGxheWJhY2sgTWl4ZXIifSwKIAl7IkNhcmtpdFIgTWl4ZXIiLCAiQXVkaW9SMiIsICJBbmFsb2cgUjIgUGxheWJhY2sgTWl4ZXIifSwKKwl7IkNhcmtpdFIgUEdBIiwgTlVMTCwgIkNhcmtpdFIgTWl4ZXIifSwKIAkvKiBIYW5kc2ZyZWVMICovCiAJeyJIYW5kc2ZyZWVMIE11eCIsICJWb2ljZSIsICJBbmFsb2cgVm9pY2UgUGxheWJhY2sgTWl4ZXIifSwKIAl7IkhhbmRzZnJlZUwgTXV4IiwgIkF1ZGlvTDEiLCAiQW5hbG9nIEwxIFBsYXliYWNrIE1peGVyIn0sCiAJeyJIYW5kc2ZyZWVMIE11eCIsICJBdWRpb0wyIiwgIkFuYWxvZyBMMiBQbGF5YmFjayBNaXhlciJ9LAogCXsiSGFuZHNmcmVlTCBNdXgiLCAiQXVkaW9SMiIsICJBbmFsb2cgUjIgUGxheWJhY2sgTWl4ZXIifSwKLQl7IkhhbmRzZnJlZUwgU3dpdGNoIiwgIlN3aXRjaCIsICJIYW5kc2ZyZWVMIE11eCJ9LAotCXsiSGFuZHNmcmVlTCBQR0EiLCBOVUxMLCAiSGFuZHNmcmVlTCBTd2l0Y2gifSwKKwl7IkhhbmRzZnJlZUwiLCAiU3dpdGNoIiwgIkhhbmRzZnJlZUwgTXV4In0sCisJeyJIYW5kc2ZyZWVMIFBHQSIsIE5VTEwsICJIYW5kc2ZyZWVMIn0sCiAJLyogSGFuZHNmcmVlUiAqLwogCXsiSGFuZHNmcmVlUiBNdXgiLCAiVm9pY2UiLCAiQW5hbG9nIFZvaWNlIFBsYXliYWNrIE1peGVyIn0sCiAJeyJIYW5kc2ZyZWVSIE11eCIsICJBdWRpb1IxIiwgIkFuYWxvZyBSMSBQbGF5YmFjayBNaXhlciJ9LAogCXsiSGFuZHNmcmVlUiBNdXgiLCAiQXVkaW9SMiIsICJBbmFsb2cgUjIgUGxheWJhY2sgTWl4ZXIifSwKIAl7IkhhbmRzZnJlZVIgTXV4IiwgIkF1ZGlvTDIiLCAiQW5hbG9nIEwyIFBsYXliYWNrIE1peGVyIn0sCi0JeyJIYW5kc2ZyZWVSIFN3aXRjaCIsICJTd2l0Y2giLCAiSGFuZHNmcmVlUiBNdXgifSwKLQl7IkhhbmRzZnJlZVIgUEdBIiwgTlVMTCwgIkhhbmRzZnJlZVIgU3dpdGNoIn0sCisJeyJIYW5kc2ZyZWVSIiwgIlN3aXRjaCIsICJIYW5kc2ZyZWVSIE11eCJ9LAorCXsiSGFuZHNmcmVlUiBQR0EiLCBOVUxMLCAiSGFuZHNmcmVlUiJ9LAogCS8qIFZpYnJhICovCiAJeyJWaWJyYSBNdXgiLCAiQXVkaW9MMSIsICJEQUMgTGVmdDEifSwKIAl7IlZpYnJhIE11eCIsICJBdWRpb1IxIiwgIkRBQyBSaWdodDEifSwKQEAgLTEzNzcsMjkgKzE0MzcsMjkgQEAKIAkvKiBvdXRwdXRzICovCiAJeyJPVVRMIiwgTlVMTCwgIkFuYWxvZyBMMiBQbGF5YmFjayBNaXhlciJ9LAogCXsiT1VUUiIsIE5VTEwsICJBbmFsb2cgUjIgUGxheWJhY2sgTWl4ZXIifSwKLQl7IkVBUlBJRUNFIiwgTlVMTCwgIkVhcnBpZWNlIE1peGVyIn0sCi0JeyJQUkVEUklWRUwiLCBOVUxMLCAiUHJlZHJpdmVMIE1peGVyIn0sCi0JeyJQUkVEUklWRVIiLCBOVUxMLCAiUHJlZHJpdmVSIE1peGVyIn0sCisJeyJFQVJQSUVDRSIsIE5VTEwsICJFYXJwaWVjZSBQR0EifSwKKwl7IlBSRURSSVZFTCIsIE5VTEwsICJQcmVkcml2ZUwgUEdBIn0sCisJeyJQUkVEUklWRVIiLCBOVUxMLCAiUHJlZHJpdmVSIFBHQSJ9LAogCXsiSFNPTCIsIE5VTEwsICJIZWFkc2V0TCBQR0EifSwKIAl7IkhTT1IiLCBOVUxMLCAiSGVhZHNldFIgUEdBIn0sCi0JeyJDQVJLSVRMIiwgTlVMTCwgIkNhcmtpdEwgTWl4ZXIifSwKLQl7IkNBUktJVFIiLCBOVUxMLCAiQ2Fya2l0UiBNaXhlciJ9LAorCXsiQ0FSS0lUTCIsIE5VTEwsICJDYXJraXRMIFBHQSJ9LAorCXsiQ0FSS0lUUiIsIE5VTEwsICJDYXJraXRSIFBHQSJ9LAogCXsiSEZMIiwgTlVMTCwgIkhhbmRzZnJlZUwgUEdBIn0sCiAJeyJIRlIiLCBOVUxMLCAiSGFuZHNmcmVlUiBQR0EifSwKIAl7IlZpYnJhIFJvdXRlIiwgIkF1ZGlvIiwgIlZpYnJhIE11eCJ9LAogCXsiVklCUkEiLCBOVUxMLCAiVmlicmEgUm91dGUifSwKIAogCS8qIENhcHR1cmUgcGF0aCAqLwotCXsiQW5hbG9nIExlZnQgQ2FwdHVyZSBSb3V0ZSIsICJNYWluIG1pYyIsICJNQUlOTUlDIn0sCi0JeyJBbmFsb2cgTGVmdCBDYXB0dXJlIFJvdXRlIiwgIkhlYWRzZXQgbWljIiwgIkhTTUlDIn0sCi0JeyJBbmFsb2cgTGVmdCBDYXB0dXJlIFJvdXRlIiwgIkFVWEwiLCAiQVVYTCJ9LAotCXsiQW5hbG9nIExlZnQgQ2FwdHVyZSBSb3V0ZSIsICJDYXJraXQgbWljIiwgIkNBUktJVE1JQyJ9LAorCXsiQW5hbG9nIExlZnQiLCAiTWFpbiBNaWMgQ2FwdHVyZSBTd2l0Y2giLCAiTUFJTk1JQyJ9LAorCXsiQW5hbG9nIExlZnQiLCAiSGVhZHNldCBNaWMgQ2FwdHVyZSBTd2l0Y2giLCAiSFNNSUMifSwKKwl7IkFuYWxvZyBMZWZ0IiwgIkFVWEwgQ2FwdHVyZSBTd2l0Y2giLCAiQVVYTCJ9LAorCXsiQW5hbG9nIExlZnQiLCAiQ2Fya2l0IE1pYyBDYXB0dXJlIFN3aXRjaCIsICJDQVJLSVRNSUMifSwKIAotCXsiQW5hbG9nIFJpZ2h0IENhcHR1cmUgUm91dGUiLCAiU3ViIG1pYyIsICJTVUJNSUMifSwKLQl7IkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIiwgIkFVWFIiLCAiQVVYUiJ9LAorCXsiQW5hbG9nIFJpZ2h0IiwgIlN1YiBNaWMgQ2FwdHVyZSBTd2l0Y2giLCAiU1VCTUlDIn0sCisJeyJBbmFsb2cgUmlnaHQiLCAiQVVYUiBDYXB0dXJlIFN3aXRjaCIsICJBVVhSIn0sCiAKLQl7IkFEQyBQaHlzaWNhbCBMZWZ0IiwgTlVMTCwgIkFuYWxvZyBMZWZ0IENhcHR1cmUgUm91dGUifSwKLQl7IkFEQyBQaHlzaWNhbCBSaWdodCIsIE5VTEwsICJBbmFsb2cgUmlnaHQgQ2FwdHVyZSBSb3V0ZSJ9LAorCXsiQURDIFBoeXNpY2FsIExlZnQiLCBOVUxMLCAiQW5hbG9nIExlZnQifSwKKwl7IkFEQyBQaHlzaWNhbCBSaWdodCIsIE5VTEwsICJBbmFsb2cgUmlnaHQifSwKIAogCXsiRGlnaW1pYzAgRW5hYmxlIiwgTlVMTCwgIkRJR0lNSUMwIn0sCiAJeyJEaWdpbWljMSBFbmFibGUiLCBOVUxMLCAiRElHSU1JQzEifSwKQEAgLTE0MjMsMTEgKzE0ODMsMTEgQEAKIAl7IkFEQyBWaXJ0dWFsIFJpZ2h0MiIsIE5VTEwsICJUWDIgQ2FwdHVyZSBSb3V0ZSJ9LAogCiAJLyogQW5hbG9nIGJ5cGFzcyByb3V0ZXMgKi8KLQl7IlJpZ2h0MSBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIn0sCi0JeyJMZWZ0MSBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBMZWZ0IENhcHR1cmUgUm91dGUifSwKLQl7IlJpZ2h0MiBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBSaWdodCBDYXB0dXJlIFJvdXRlIn0sCi0JeyJMZWZ0MiBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBMZWZ0IENhcHR1cmUgUm91dGUifSwKLQl7IlZvaWNlIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIExlZnQgQ2FwdHVyZSBSb3V0ZSJ9LAorCXsiUmlnaHQxIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIFJpZ2h0In0sCisJeyJMZWZ0MSBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBMZWZ0In0sCisJeyJSaWdodDIgQW5hbG9nIExvb3BiYWNrIiwgIlN3aXRjaCIsICJBbmFsb2cgUmlnaHQifSwKKwl7IkxlZnQyIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIExlZnQifSwKKwl7IlZvaWNlIEFuYWxvZyBMb29wYmFjayIsICJTd2l0Y2giLCAiQW5hbG9nIExlZnQifSwKIAogCXsiQW5hbG9nIFIxIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIlJpZ2h0MSBBbmFsb2cgTG9vcGJhY2sifSwKIAl7IkFuYWxvZyBMMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJMZWZ0MSBBbmFsb2cgTG9vcGJhY2sifSwKQEAgLTE2MDksOCArMTY2OSw2IEBACiAKIAkgLyogSWYgdGhlIHN1YnN0cmVhbSBoYXMgNCBjaGFubmVsLCBkbyB0aGUgbmVjZXNzYXJ5IHNldHVwICovCiAJaWYgKHBhcmFtc19jaGFubmVscyhwYXJhbXMpID09IDQpIHsKLQkJdTggZm9ybWF0LCBtb2RlOwotCiAJCWZvcm1hdCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0FVRElPX0lGKTsKIAkJbW9kZSA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUpOwogCkBAIC0xODA2LDYgKzE4NjQsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0d2w0MDMwX3NldF90cmlzdGF0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IHRyaXN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdTggcmVnID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQVVESU9fSUYpOworCisJaWYgKHRyaXN0YXRlKQorCQlyZWcgfD0gVFdMNDAzMF9BSUZfVFJJX0VOOworCWVsc2UKKwkJcmVnICY9IH5UV0w0MDMwX0FJRl9UUklfRU47CisKKwlyZXR1cm4gdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQVVESU9fSUYsIHJlZyk7Cit9CisKIC8qIEluIGNhc2Ugb2Ygdm9pY2UgbW9kZSwgdGhlIFJYMSBMKFZSWCkgZm9yIGRvd25saW5rIGFuZCB0aGUgVFgyIEwvUgogICogKFZUWEwsIFZUWFIpIGZvciB1cGxpbmsgaGFzIHRvIGJlIGVuYWJsZWQvZGlzYWJsZWQuICovCiBzdGF0aWMgdm9pZCB0d2w0MDMwX3ZvaWNlX2VuYWJsZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBkaXJlY3Rpb24sCkBAIC0xOTQ4LDcgKzIwMTksNyBAQAogCiAJLyogc2V0IG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZNOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKIAkJZm9ybWF0ICY9IH4oVFdMNDAzMF9WSUZfU0xBVkVfRU4pOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CkBAIC0xOTgwLDYgKzIwNTEsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0d2w0MDMwX3ZvaWNlX3NldF90cmlzdGF0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IHRyaXN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdTggcmVnID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfVk9JQ0VfSUYpOworCisJaWYgKHRyaXN0YXRlKQorCQlyZWcgfD0gVFdMNDAzMF9WSUZfVFJJX0VOOworCWVsc2UKKwkJcmVnICY9IH5UV0w0MDMwX1ZJRl9UUklfRU47CisKKwlyZXR1cm4gdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfVk9JQ0VfSUYsIHJlZyk7Cit9CisKICNkZWZpbmUgVFdMNDAzMF9SQVRFUwkgKFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDApCiAjZGVmaW5lIFRXTDQwMzBfRk9STUFUUwkgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEUpCiAKQEAgLTE5ODksNiArMjA3Myw3IEBACiAJLmh3X3BhcmFtcwk9IHR3bDQwMzBfaHdfcGFyYW1zLAogCS5zZXRfc3lzY2xrCT0gdHdsNDAzMF9zZXRfZGFpX3N5c2NsaywKIAkuc2V0X2ZtdAk9IHR3bDQwMzBfc2V0X2RhaV9mbXQsCisJLnNldF90cmlzdGF0ZQk9IHR3bDQwMzBfc2V0X3RyaXN0YXRlLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgdHdsNDAzMF9kYWlfdm9pY2Vfb3BzID0gewpAQCAtMTk5Nyw2ICsyMDgyLDcgQEAKIAkuaHdfcGFyYW1zCT0gdHdsNDAzMF92b2ljZV9od19wYXJhbXMsCiAJLnNldF9zeXNjbGsJPSB0d2w0MDMwX3ZvaWNlX3NldF9kYWlfc3lzY2xrLAogCS5zZXRfZm10CT0gdHdsNDAzMF92b2ljZV9zZXRfZGFpX2ZtdCwKKwkuc2V0X3RyaXN0YXRlCT0gdHdsNDAzMF92b2ljZV9zZXRfdHJpc3RhdGUsCiB9OwogCiBzdHJ1Y3Qgc25kX3NvY19kYWkgdHdsNDAzMF9kYWlbXSA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5oIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmgKaW5kZXggZmU1ZjM5NS4uMmI0YmZhMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmgKQEAgLTI3NCw2ICsyNzQsOCBAQAogc3RydWN0IHR3bDQwMzBfc2V0dXBfZGF0YSB7CiAJdW5zaWduZWQgaW50IHJhbXBfZGVsYXlfdmFsdWU7CiAJdW5zaWduZWQgaW50IHN5c2NsazsKKwl1bnNpZ25lZCBpbnQgaHNfZXh0bXV0ZToxOworCXZvaWQgKCpzZXRfaHNfZXh0bXV0ZSkoaW50IG11dGUpOwogfTsKIAogI2VuZGlmCS8qIEVuZCBvZiBfX1RXTDQwMzBfQVVESU9fSF9fICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguYyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCmluZGV4IDI2OWIxMDguLmMzM2I5MmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAllbHNlCiAJCW11dGVfcmVnICY9IH4oMTw8Mik7CiAKLQl1ZGExMzR4X3dyaXRlKGNvZGVjLCBVREExMzRYX0RBVEEwMTAsIG11dGVfcmVnICYgfigxPDwyKSk7CisJdWRhMTM0eF93cml0ZShjb2RlYywgVURBMTM0WF9EQVRBMDEwLCBtdXRlX3JlZyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM4MC5jIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMKaW5kZXggNWIyMTU5NC4uOTJlYzAzNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMKQEAgLTUsOSArNSw3IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3IFBoaWxpcHAgWmFiZWwgPHBoaWxpcHAuemFiZWxAZ21haWwuY29tPgotICogSW1wcm92ZWQgc3VwcG9ydCBmb3IgREFQTSBhbmQgYXVkaW8gcm91dGluZy9taXhpbmcgY2FwYWJpbGl0aWVzLAotICogYWRkZWQgVExWIHN1cHBvcnQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBQaGlsaXBwIFphYmVsIDxwaGlsaXBwLnphYmVsQGdtYWlsLmNvbT4KICAqCiAgKiBNb2RpZmllZCBieSBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZEBvcGVuZWRoYW5kLmNvbT4gdG8gZml0IGludG8gU29DCiAgKiBjb2RlYyBtb2RlbC4KQEAgLTE5LDI2ICsxNywzMiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisjaW5jbHVkZSA8c291bmQvdWRhMTM4MC5oPgogCiAjaW5jbHVkZSAidWRhMTM4MC5oIgogCi1zdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IHVkYTEzODBfd29yazsKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqdWRhMTM4MF9jb2RlYzsKIAorLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3QgdWRhMTM4MF9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW1VEQTEzODBfQ0FDSEVSRUdOVU1dOworCXVuc2lnbmVkIGludCBkYWNfY2xrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworfTsKKwogLyoKICAqIHVkYTEzODAgcmVnaXN0ZXIgY2FjaGUKICAqLwpAQCAtNDczLDYgKzQ3Nyw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3QgdWRhMTM4MF9wcml2ICp1ZGExMzgwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAlpbnQgbWl4ZXIgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX01JWEVSKTsKIAogCXN3aXRjaCAoY21kKSB7CkBAIC00ODAsMTMgKzQ4NSwxMyBAQAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKIAkJdWRhMTM4MF93cml0ZV9yZWdfY2FjaGUoY29kZWMsIFVEQTEzODBfTUlYRVIsCiAJCQkJCW1peGVyICYgflIxNF9TSUxFTkNFKTsKLQkJc2NoZWR1bGVfd29yaygmdWRhMTM4MF93b3JrKTsKKwkJc2NoZWR1bGVfd29yaygmdWRhMTM4MC0+d29yayk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CiAJCXVkYTEzODBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCBVREExMzgwX01JWEVSLAogCQkJCQltaXhlciB8IFIxNF9TSUxFTkNFKTsKLQkJc2NoZWR1bGVfd29yaygmdWRhMTM4MF93b3JrKTsKKwkJc2NoZWR1bGVfd29yaygmdWRhMTM4MC0+d29yayk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY3MCw0NCArNjc1LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBpbml0aWFsaXNlIHRoZSBVREExMzgwIGRyaXZlcgotICogcmVnaXN0ZXIgbWl4ZXIgYW5kIGRzcCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbAotICovCi1zdGF0aWMgaW50IHVkYTEzODBfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiwgaW50IGRhY19jbGspCitzdGF0aWMgaW50IHVkYTEzODBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCB1ZGExMzgwX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCWludCByZXQgPSAwOwogCi0JY29kZWMtPm5hbWUgPSAiVURBMTM4MCI7Ci0JY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29kZWMtPnJlYWQgPSB1ZGExMzgwX3JlYWRfcmVnX2NhY2hlOwotCWNvZGVjLT53cml0ZSA9IHVkYTEzODBfd3JpdGU7Ci0JY29kZWMtPnNldF9iaWFzX2xldmVsID0gdWRhMTM4MF9zZXRfYmlhc19sZXZlbDsKLQljb2RlYy0+ZGFpID0gdWRhMTM4MF9kYWk7Ci0JY29kZWMtPm51bV9kYWkgPSBBUlJBWV9TSVpFKHVkYTEzODBfZGFpKTsKLQljb2RlYy0+cmVnX2NhY2hlID0ga21lbWR1cCh1ZGExMzgwX3JlZywgc2l6ZW9mKHVkYTEzODBfcmVnKSwKLQkJCQkgICBHRlBfS0VSTkVMKTsKLQlpZiAoY29kZWMtPnJlZ19jYWNoZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHVkYTEzODBfcmVnKTsKLQljb2RlYy0+cmVnX2NhY2hlX3N0ZXAgPSAxOwotCXVkYTEzODBfcmVzZXQoY29kZWMpOworCWlmICh1ZGExMzgwX2NvZGVjID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCi0JdWRhMTM4MF9jb2RlYyA9IGNvZGVjOwotCUlOSVRfV09SSygmdWRhMTM4MF93b3JrLCB1ZGExMzgwX2ZsdXNoX3dvcmspOworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB1ZGExMzgwX2NvZGVjOworCWNvZGVjID0gdWRhMTM4MF9jb2RlYzsKKwlwZGF0YSA9IGNvZGVjLT5kZXYtPnBsYXRmb3JtX2RhdGE7CiAKIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcl9lcnIoInVkYTEzODA6IGZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtczogJWRcbiIsIHJldCk7CiAJCWdvdG8gcGNtX2VycjsKIAl9CiAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KIAl1ZGExMzgwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAJLyogc2V0IGNsb2NrIGlucHV0ICovCi0Jc3dpdGNoIChkYWNfY2xrKSB7CisJc3dpdGNoIChwZGF0YS0+ZGFjX2NsaykgewogCWNhc2UgVURBMTM4MF9EQUNfQ0xLX1NZU0NMSzoKIAkJdWRhMTM4MF93cml0ZShjb2RlYywgVURBMTM4MF9DTEssIDApOwogCQlicmVhazsKQEAgLTcxNiwxMyArNzEwLDEyIEBACiAJCWJyZWFrOwogCX0KIAotCS8qIHVkYTEzODAgaW5pdCAqLwogCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB1ZGExMzgwX3NuZF9jb250cm9scywKIAkJCQlBUlJBWV9TSVpFKHVkYTEzODBfc25kX2NvbnRyb2xzKSk7CiAJdWRhMTM4MF9hZGRfd2lkZ2V0cyhjb2RlYyk7CiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcl9lcnIoInVkYTEzODA6IGZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIGNhcmRfZXJyOwogCX0KIApAQCAtNzMyLDM2ICs3MjUsMTY0IEBACiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwogcGNtX2VycjoKLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlICp1ZGExMzgwX3NvY2RldjsKKy8qIHBvd2VyIGRvd24gY2hpcCAqLworc3RhdGljIGludCB1ZGExMzgwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQorCQl1ZGExMzgwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl91ZGExMzgwID0geworCS5wcm9iZSA9IAl1ZGExMzgwX3Byb2JlLAorCS5yZW1vdmUgPSAJdWRhMTM4MF9yZW1vdmUsCisJLnN1c3BlbmQgPSAJdWRhMTM4MF9zdXNwZW5kLAorCS5yZXN1bWUgPQl1ZGExMzgwX3Jlc3VtZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3VkYTEzODApOworCitzdGF0aWMgaW50IHVkYTEzODBfcmVnaXN0ZXIoc3RydWN0IHVkYTEzODBfcHJpdiAqdWRhMTM4MCkKK3sKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ1ZGExMzgwLT5jb2RlYzsKKwlzdHJ1Y3QgdWRhMTM4MF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNvZGVjLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAodWRhMTM4MF9jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFVEQTEzODAgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghcGRhdGEgfHwgIXBkYXRhLT5ncGlvX3Bvd2VyIHx8ICFwZGF0YS0+Z3Bpb19yZXNldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9fcG93ZXIsICJ1ZGExMzgwIHBvd2VyIik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfb3V0OworCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb19yZXNldCwgInVkYTEzODAgcmVzZXQiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9ncGlvOworCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX3Bvd2VyLCAxKTsKKworCS8qIHdlIG1heSBuZWVkIHRvIGhhdmUgdGhlIGNsb2NrIHJ1bm5pbmcgaGVyZSAtIHBINSAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Z3Bpb19yZXNldCwgMSk7CisJdWRlbGF5KDUpOworCWdwaW9fc2V0X3ZhbHVlKHBkYXRhLT5ncGlvX3Jlc2V0LCAwKTsKKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gdWRhMTM4MDsKKwljb2RlYy0+bmFtZSA9ICJVREExMzgwIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+cmVhZCA9IHVkYTEzODBfcmVhZF9yZWdfY2FjaGU7CisJY29kZWMtPndyaXRlID0gdWRhMTM4MF93cml0ZTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gdWRhMTM4MF9zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gdWRhMTM4MF9kYWk7CisJY29kZWMtPm51bV9kYWkgPSBBUlJBWV9TSVpFKHVkYTEzODBfZGFpKTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHVkYTEzODBfcmVnKTsKKwljb2RlYy0+cmVnX2NhY2hlID0gJnVkYTEzODAtPnJlZ19jYWNoZTsKKwljb2RlYy0+cmVnX2NhY2hlX3N0ZXAgPSAxOworCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHVkYTEzODBfcmVnLCBzaXplb2YodWRhMTM4MF9yZWcpKTsKKworCXJldCA9IHVkYTEzODBfcmVzZXQoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBpc3N1ZSByZXNldFxuIik7CisJCWdvdG8gZXJyX3Jlc2V0OworCX0KKworCUlOSVRfV09SSygmdWRhMTM4MC0+d29yaywgdWRhMTM4MF9mbHVzaF93b3JrKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHVkYTEzODBfZGFpKTsgaSsrKQorCQl1ZGExMzgwX2RhaVtpXS5kZXYgPSBjb2RlYy0+ZGV2OworCisJdWRhMTM4MF9jb2RlYyA9IGNvZGVjOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3Jlc2V0OworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyh1ZGExMzgwX2RhaSwgQVJSQVlfU0laRSh1ZGExMzgwX2RhaSkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2RhaTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2RhaToKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworZXJyX3Jlc2V0OgorCWdwaW9fc2V0X3ZhbHVlKHBkYXRhLT5ncGlvX3Bvd2VyLCAwKTsKKwlncGlvX2ZyZWUocGRhdGEtPmdwaW9fcmVzZXQpOworZXJyX2dwaW86CisJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX3Bvd2VyKTsKK2Vycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdWRhMTM4MF91bnJlZ2lzdGVyKHN0cnVjdCB1ZGExMzgwX3ByaXYgKnVkYTEzODApCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJnVkYTEzODAtPmNvZGVjOworCXN0cnVjdCB1ZGExMzgwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY29kZWMtPmRldi0+cGxhdGZvcm1fZGF0YTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHVkYTEzODBfZGFpLCBBUlJBWV9TSVpFKHVkYTEzODBfZGFpKSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ1ZGExMzgwLT5jb2RlYyk7CisKKwlncGlvX3NldF92YWx1ZShwZGF0YS0+Z3Bpb19wb3dlciwgMCk7CisJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX3Jlc2V0KTsKKwlncGlvX2ZyZWUocGRhdGEtPmdwaW9fcG93ZXIpOworCisJa2ZyZWUodWRhMTM4MCk7CisJdWRhMTM4MF9jb2RlYyA9IE5VTEw7Cit9CiAKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0KLXN0YXRpYyBpbnQgdWRhMTM4MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKLQkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorc3RhdGljIF9fZGV2aW5pdCBpbnQgdWRhMTM4MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB1ZGExMzgwX3NvY2RldjsKLQlzdHJ1Y3QgdWRhMTM4MF9zZXR1cF9kYXRhICpzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXN0cnVjdCB1ZGExMzgwX3ByaXYgKnVkYTEzODA7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCWludCByZXQ7CiAKLQlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CisJdWRhMTM4MCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1ZGExMzgwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAodWRhMTM4MCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJnVkYTEzODAtPmNvZGVjOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHVkYTEzODApOwogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CiAKLQlyZXQgPSB1ZGExMzgwX2luaXQoc29jZGV2LCBzZXR1cC0+ZGFjX2Nsayk7Ci0JaWYgKHJldCA8IDApCi0JCXByX2VycigidWRhMTM4MDogZmFpbGVkIHRvIGluaXRpYWxpc2UgVURBMTM4MFxuIik7CisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCXJldCA9IHVkYTEzODBfcmVnaXN0ZXIodWRhMTM4MCk7CisJaWYgKHJldCAhPSAwKQorCQlrZnJlZSh1ZGExMzgwKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdWRhMTM4MF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB1ZGExMzgwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKKwlzdHJ1Y3QgdWRhMTM4MF9wcml2ICp1ZGExMzgwID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisJdWRhMTM4MF91bnJlZ2lzdGVyKHVkYTEzODApOwogCXJldHVybiAwOwogfQogCkBAIC03NzcsMTIwICs4OTgsMjggQEAKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgPSAgICB1ZGExMzgwX2kyY19wcm9iZSwKLQkucmVtb3ZlID0gICB1ZGExMzgwX2kyY19yZW1vdmUsCisJLnJlbW92ZSA9ICAgX19kZXZleGl0X3AodWRhMTM4MF9pMmNfcmVtb3ZlKSwKIAkuaWRfdGFibGUgPSB1ZGExMzgwX2kyY19pZCwKIH07Ci0KLXN0YXRpYyBpbnQgdWRhMTM4MF9hZGRfaTJjX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCSAgY29uc3Qgc3RydWN0IHVkYTEzODBfc2V0dXBfZGF0YSAqc2V0dXApCi17Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JaW50IHJldDsKLQotCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ1ZGExMzgwX2kyY19kcml2ZXIpOwotCWlmIChyZXQgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhZGQgaTJjIGRyaXZlclxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7Ci0JaW5mby5hZGRyID0gc2V0dXAtPmkyY19hZGRyZXNzOwotCXN0cmxjcHkoaW5mby50eXBlLCAidWRhMTM4MCIsIEkyQ19OQU1FX1NJWkUpOwotCi0JYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcihzZXR1cC0+aTJjX2J1cyk7Ci0JaWYgKCFhZGFwdGVyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBpMmMgYWRhcHRlciAlZFxuIiwKLQkJCXNldHVwLT5pMmNfYnVzKTsKLQkJZ290byBlcnJfZHJpdmVyOwotCX0KLQotCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKLQlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7Ci0JaWYgKCFjbGllbnQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGkyYyBkZXZpY2UgYXQgMHgleFxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpaW5mby5hZGRyKTsKLQkJZ290byBlcnJfZHJpdmVyOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfZHJpdmVyOgotCWkyY19kZWxfZHJpdmVyKCZ1ZGExMzgwX2kyY19kcml2ZXIpOwotCXJldHVybiAtRU5PREVWOwotfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgdWRhMTM4MF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHVkYTEzODBfc2V0dXBfZGF0YSAqc2V0dXA7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCWludCByZXQ7Ci0KLQlzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKLQljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNvZGVjID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwotCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7Ci0KLQl1ZGExMzgwX3NvY2RldiA9IHNvY2RldjsKLQlyZXQgPSAtRU5PREVWOwotCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQotCWlmIChzZXR1cC0+aTJjX2FkZHJlc3MpIHsKLQkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwotCQlyZXQgPSB1ZGExMzgwX2FkZF9pMmNfZGV2aWNlKHBkZXYsIHNldHVwKTsKLQl9Ci0jZW5kaWYKLQotCWlmIChyZXQgIT0gMCkKLQkJa2ZyZWUoY29kZWMpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIHBvd2VyIGRvd24gY2hpcCAqLwotc3RhdGljIGludCB1ZGExMzgwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKLQotCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKQotCQl1ZGExMzgwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKLQotCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7Ci0Jc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKLSNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCi0JaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNvZGVjLT5jb250cm9sX2RhdGEpOwotCWkyY19kZWxfZHJpdmVyKCZ1ZGExMzgwX2kyY19kcml2ZXIpOwotI2VuZGlmCi0Ja2ZyZWUoY29kZWMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3VkYTEzODAgPSB7Ci0JLnByb2JlID0gCXVkYTEzODBfcHJvYmUsCi0JLnJlbW92ZSA9IAl1ZGExMzgwX3JlbW92ZSwKLQkuc3VzcGVuZCA9IAl1ZGExMzgwX3N1c3BlbmQsCi0JLnJlc3VtZSA9CXVkYTEzODBfcmVzdW1lLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfdWRhMTM4MCk7Ci0KIHN0YXRpYyBpbnQgX19pbml0IHVkYTEzODBfbW9kaW5pdCh2b2lkKQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaXModWRhMTM4MF9kYWksIEFSUkFZX1NJWkUodWRhMTM4MF9kYWkpKTsKKwlpbnQgcmV0OworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmdWRhMTM4MF9pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApCisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIFVEQTEzODAgSTJDIGRyaXZlcjogJWRcbiIsIHJldCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KHVkYTEzODBfbW9kaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1ZGExMzgwX2V4aXQodm9pZCkKIHsKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcyh1ZGExMzgwX2RhaSwgQVJSQVlfU0laRSh1ZGExMzgwX2RhaSkpOworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmdWRhMTM4MF9pMmNfZHJpdmVyKTsKKyNlbmRpZgogfQogbW9kdWxlX2V4aXQodWRhMTM4MF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmggYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuaAppbmRleCBjNTVjMTdhLi45Y2VmYThhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuaApAQCAtNzIsMTQgKzcyLDYgQEAKICNkZWZpbmUgUjIyX1NLSVBfRENGSUwJMHgwMDAyCiAjZGVmaW5lIFIyM19BR0NfRU4JMHgwMDAxCiAKLXN0cnVjdCB1ZGExMzgwX3NldHVwX2RhdGEgewotCWludCAgICAgICAgICAgIGkyY19idXM7Ci0JdW5zaWduZWQgc2hvcnQgaTJjX2FkZHJlc3M7Ci0JaW50ICAgICAgICAgICAgZGFjX2NsazsKLSNkZWZpbmUgVURBMTM4MF9EQUNfQ0xLX1NZU0NMSyAwCi0jZGVmaW5lIFVEQTEzODBfREFDX0NMS19XU1BMTCAgMQotfTsKLQogI2RlZmluZSBVREExMzgwX0RBSV9EVVBMRVgJMCAvKiBwbGF5YmFjayBhbmQgY2FwdHVyZSBvbiBzaW5nbGUgREFJICovCiAjZGVmaW5lIFVEQTEzODBfREFJX1BMQVlCQUNLCTEgLyogcGxheWJhY2sgREFJICovCiAjZGVmaW5lIFVEQTEzODBfREFJX0NBUFRVUkUJMiAvKiBjYXB0dXJlIERBSSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKaW5kZXggZTczNDhkMy4uM2ZmMDM3MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCkBAIC02Myw2ICs2Myw4IEBACiAJc3RydWN0IHdtODM1MF9qYWNrX2RhdGEgaHBsOwogCXN0cnVjdCB3bTgzNTBfamFja19kYXRhIGhwcjsKIAlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tBUlJBWV9TSVpFKHN1cHBseV9uYW1lcyldOworCWludCBmbGxfZnJlcV9vdXQ7CisJaW50IGZsbF9mcmVxX2luOwogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCB3bTgzNTBfY29kZWNfY2FjaGVfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCkBAIC00MDYsNyArNDA4LDYgQEAKIHN0YXRpYyBjb25zdCBjaGFyICp3bTgzNTBfcG9sW10gPSB7ICJOb3JtYWwiLCAiSW52IFIiLCAiSW52IEwiLCAiSW52IEwgJiBSIiB9Owogc3RhdGljIGNvbnN0IGNoYXIgKndtODM1MF9kYWNtdXRlbVtdID0geyAiTm9ybWFsIiwgIlNvZnQiIH07CiBzdGF0aWMgY29uc3QgY2hhciAqd204MzUwX2RhY211dGVzW10gPSB7ICJGYXN0IiwgIlNsb3ciIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqd204MzUwX2RhY2ZpbHRlcltdID0geyAiTm9ybWFsIiwgIlNsb3BpbmciIH07CiBzdGF0aWMgY29uc3QgY2hhciAqd204MzUwX2FkY2ZpbHRlcltdID0geyAiTm9uZSIsICJIaWdoIFBhc3MiIH07CiBzdGF0aWMgY29uc3QgY2hhciAqd204MzUwX2FkY2hwW10gPSB7ICI0NC4xa0h6IiwgIjhrSHoiLCAiMTZrSHoiLCAiMzJrSHoiIH07CiBzdGF0aWMgY29uc3QgY2hhciAqd204MzUwX2xyW10gPSB7ICJMZWZ0IiwgIlJpZ2h0IiB9OwpAQCAtNDE2LDcgKzQxNyw2IEBACiAJU09DX0VOVU1fU0lOR0xFKFdNODM1MF9EQUNfQ09OVFJPTCwgMCwgNCwgd204MzUwX3BvbCksCiAJU09DX0VOVU1fU0lOR0xFKFdNODM1MF9EQUNfTVVURV9WT0xVTUUsIDE0LCAyLCB3bTgzNTBfZGFjbXV0ZW0pLAogCVNPQ19FTlVNX1NJTkdMRShXTTgzNTBfREFDX01VVEVfVk9MVU1FLCAxMywgMiwgd204MzUwX2RhY211dGVzKSwKLQlTT0NfRU5VTV9TSU5HTEUoV004MzUwX0RBQ19NVVRFX1ZPTFVNRSwgMTIsIDIsIHdtODM1MF9kYWNmaWx0ZXIpLAogCVNPQ19FTlVNX1NJTkdMRShXTTgzNTBfQURDX0NPTlRST0wsIDE1LCAyLCB3bTgzNTBfYWRjZmlsdGVyKSwKIAlTT0NfRU5VTV9TSU5HTEUoV004MzUwX0FEQ19DT05UUk9MLCA4LCA0LCB3bTgzNTBfYWRjaHApLAogCVNPQ19FTlVNX1NJTkdMRShXTTgzNTBfQURDX0NPTlRST0wsIDAsIDQsIHdtODM1MF9wb2wpLApAQCAtNDQ0LDEwICs0NDQsOSBAQAogCQkJCTAsIDI1NSwgMCwgZGFjX3BjbV90bHYpLAogCVNPQ19FTlVNKCJQbGF5YmFjayBQQ00gTXV0ZSBGdW5jdGlvbiIsIHdtODM1MF9lbnVtWzJdKSwKIAlTT0NfRU5VTSgiUGxheWJhY2sgUENNIE11dGUgU3BlZWQiLCB3bTgzNTBfZW51bVszXSksCi0JU09DX0VOVU0oIlBsYXliYWNrIFBDTSBGaWx0ZXIiLCB3bTgzNTBfZW51bVs0XSksCi0JU09DX0VOVU0oIkNhcHR1cmUgUENNIEZpbHRlciIsIHdtODM1MF9lbnVtWzVdKSwKLQlTT0NfRU5VTSgiQ2FwdHVyZSBQQ00gSFAgRmlsdGVyIiwgd204MzUwX2VudW1bNl0pLAotCVNPQ19FTlVNKCJDYXB0dXJlIEFEQyBJbnZlcnNpb24iLCB3bTgzNTBfZW51bVs3XSksCisJU09DX0VOVU0oIkNhcHR1cmUgUENNIEZpbHRlciIsIHdtODM1MF9lbnVtWzRdKSwKKwlTT0NfRU5VTSgiQ2FwdHVyZSBQQ00gSFAgRmlsdGVyIiwgd204MzUwX2VudW1bNV0pLAorCVNPQ19FTlVNKCJDYXB0dXJlIEFEQyBJbnZlcnNpb24iLCB3bTgzNTBfZW51bVs2XSksCiAJU09DX1dNODM1MF9ET1VCTEVfUl9UTFYoIkNhcHR1cmUgUENNIFZvbHVtZSIsCiAJCQkJV004MzUwX0FEQ19ESUdJVEFMX1ZPTFVNRV9MLAogCQkJCVdNODM1MF9BRENfRElHSVRBTF9WT0xVTUVfUiwKQEAgLTYxMyw3ICs2MTIsNyBAQAogCiAvKiBPdXQ0IENhcHR1cmUgTXV4ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204MzUwX291dDRfY2FwdHVyZV9jb250cm9scyA9Ci1TT0NfREFQTV9FTlVNKCJSb3V0ZSIsIHdtODM1MF9lbnVtWzhdKTsKK1NPQ19EQVBNX0VOVU0oIlJvdXRlIiwgd204MzUwX2VudW1bN10pOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204MzUwX2RhcG1fd2lkZ2V0c1tdID0gewogCkBAIC05OTMsNiArOTkyLDcgQEAKIAkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGNvZGVjLT5jb250cm9sX2RhdGE7CiAJdTE2IGlmYWNlID0gd204MzUwX2NvZGVjX3JlYWQoY29kZWMsIFdNODM1MF9BSV9GT1JNQVRJTkcpICYKIAkgICAgfldNODM1MF9BSUZfV0xfTUFTSzsKIApAQCAtMTAxMiw2ICsxMDEyLDE5IEBACiAJfQogCiAJd204MzUwX2NvZGVjX3dyaXRlKGNvZGVjLCBXTTgzNTBfQUlfRk9STUFUSU5HLCBpZmFjZSk7CisKKwkvKiBUaGUgc2xvcGluZyBzdG9wYmFuZCBmaWx0ZXIgaXMgcmVjb21tZW5kZWQgZm9yIHVzZSB3aXRoCisJICogbG93ZXIgc2FtcGxlIHJhdGVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCisJICovCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJaWYgKHBhcmFtc19yYXRlKHBhcmFtcykgPCAyNDAwMCkKKwkJCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9EQUNfTVVURV9WT0xVTUUsCisJCQkJCVdNODM1MF9EQUNfU0JfRklMVCk7CisJCWVsc2UKKwkJCXdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0RBQ19NVVRFX1ZPTFVNRSwKKwkJCQkJICBXTTgzNTBfREFDX1NCX0ZJTFQpOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0xMDkzLDEwICsxMTA2LDE0IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKIAlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBjb2RlYy0+Y29udHJvbF9kYXRhOworCXN0cnVjdCB3bTgzNTBfZGF0YSAqcHJpdiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IF9mbGxfZGl2IGZsbF9kaXY7CiAJaW50IHJldCA9IDA7CiAJdTE2IGZsbF8xLCBmbGxfNDsKIAorCWlmIChmcmVxX2luID09IHByaXYtPmZsbF9mcmVxX2luICYmIGZyZXFfb3V0ID09IHByaXYtPmZsbF9mcmVxX291dCkKKwkJcmV0dXJuIDA7CisKIAkvKiBwb3dlciBkb3duIEZMTCAtIHdlIG5lZWQgdG8gZG8gdGhpcyBmb3IgcmVjb25maWd1cmF0aW9uICovCiAJd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfUE9XRVJfTUdNVF80LAogCQkJICBXTTgzNTBfRkxMX0VOQSB8IFdNODM1MF9GTExfT1NDX0VOQSk7CkBAIC0xMTMxLDYgKzExNDgsOSBAQAogCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9QT1dFUl9NR01UXzQsIFdNODM1MF9GTExfT1NDX0VOQSk7CiAJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX1BPV0VSX01HTVRfNCwgV004MzUwX0ZMTF9FTkEpOwogCisJcHJpdi0+ZmxsX2ZyZXFfb3V0ID0gZnJlcV9vdXQ7CisJcHJpdi0+ZmxsX2ZyZXFfaW4gPSBmcmVxX2luOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NjAsNiArMTY4MCwyMSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODM1MF9jb2RlY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtKQoreworCXJldHVybiBzbmRfc29jX3N1c3BlbmRfZGV2aWNlKCZwZGV2LT5kZXYpOworfQorCitzdGF0aWMgaW50IHdtODM1MF9jb2RlY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gc25kX3NvY19yZXN1bWVfZGV2aWNlKCZwZGV2LT5kZXYpOworfQorI2Vsc2UKKyNkZWZpbmUgd204MzUwX2NvZGVjX3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTgzNTBfY29kZWNfcmVzdW1lIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTgzNTBfY29kZWNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCSAgIC5uYW1lID0gIndtODM1MC1jb2RlYyIsCkBAIC0xNjY3LDYgKzE3MDIsOCBAQAogCQkgICB9LAogCS5wcm9iZSA9IHdtODM1MF9jb2RlY19wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aod204MzUwX2NvZGVjX3JlbW92ZSksCisJLnN1c3BlbmQgPSB3bTgzNTBfY29kZWNfc3VzcGVuZCwKKwkucmVzdW1lID0gd204MzUwX2NvZGVjX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBfX2luaXQgaW50IHdtODM1MF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg0MDAuYwppbmRleCA1MDJlZWZhLi5iOWVmNGQ5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmMKQEAgLTEwMjIsMTAgKzEwMjIsMTUgQEAKIAlpZiAoZnJlcV9pbiA9PSB3bTg0MDAtPmZsbF9pbiAmJiBmcmVxX291dCA9PSB3bTg0MDAtPmZsbF9vdXQpCiAJCXJldHVybiAwOwogCi0JaWYgKGZyZXFfb3V0ICE9IDApIHsKKwlpZiAoZnJlcV9vdXQpIHsKIAkJcmV0ID0gZmxsX2ZhY3RvcnMod204NDAwLCAmZmFjdG9ycywgZnJlcV9pbiwgZnJlcV9vdXQpOwogCQlpZiAocmV0ICE9IDApCiAJCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCS8qIEJvZGdlIEdDQyA0LjQuMCB1bmluaXRpYWxpc2VkIHZhcmlhYmxlIHdhcm5pbmcgLSBpdAorCQkgKiBkb2Vzbid0IHNlZW0gY2FwYWJsZSBvZiB3b3JraW5nIG91dCB0aGF0IHdlIGV4aXQgaWYKKwkJICogZnJlcV9vdXQgaXMgMCBiZWZvcmUgYW55IG9mIHRoZSB1c2VzLiAqLworCQltZW1zZXQoJmZhY3RvcnMsIDAsIHNpemVvZihmYWN0b3JzKSk7CiAJfQogCiAJd204NDAwLT5mbGxfb3V0ID0gZnJlcV9vdXQ7CkBAIC0xMDQwLDcgKzEwNDUsNyBAQAogCXJlZyAmPSB+V004NDAwX0ZMTF9PU0NfRU5BOwogCXdtODQwMF93cml0ZShjb2RlYywgV004NDAwX0ZMTF9DT05UUk9MXzEsIHJlZyk7CiAKLQlpZiAoZnJlcV9vdXQgPT0gMCkKKwlpZiAoIWZyZXFfb3V0KQogCQlyZXR1cm4gMDsKIAogCXJlZyAmPSB+KFdNODQwMF9GTExfUkVGX0ZSRVEgfCBXTTg0MDBfRkxMX0ZSQVRJT19NQVNLKTsKQEAgLTE1NTMsNiArMTU1OCwyMSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODQwMF9wZGV2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlyZXR1cm4gc25kX3NvY19zdXNwZW5kX2RldmljZSgmcGRldi0+ZGV2KTsKK30KKworc3RhdGljIGludCB3bTg0MDBfcGRldl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gc25kX3NvY19yZXN1bWVfZGV2aWNlKCZwZGV2LT5kZXYpOworfQorI2Vsc2UKKyNkZWZpbmUgd204NDAwX3BkZXZfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODQwMF9wZGV2X3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd204NDAwX2NvZGVjX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJ3bTg0MDAtY29kZWMiLApAQCAtMTU2MCw2ICsxNTgwLDggQEAKIAl9LAogCS5wcm9iZSA9IHdtODQwMF9jb2RlY19wcm9iZSwKIAkucmVtb3ZlCT0gX19leGl0X3Aod204NDAwX2NvZGVjX3JlbW92ZSksCisJLnN1c3BlbmQgPSB3bTg0MDBfcGRldl9zdXNwZW5kLAorCS5yZXN1bWUgPSB3bTg0MDBfcGRldl9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB3bTg0MDBfY29kZWNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMKaW5kZXggYzhiOGRiYS4uMDYwZDVkMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jCkBAIC01OCw1NSArNTgsNyBAQAogI2RlZmluZSBXTTg1MTBfUE9XRVIxX0JJQVNFTiAgMHgwOAogI2RlZmluZSBXTTg1MTBfUE9XRVIxX0JVRklPRU4gMHgxMAogCi0vKgotICogcmVhZCB3bTg1MTAgcmVnaXN0ZXIgY2FjaGUKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgd204NTEwX3JlYWRfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQl1bnNpZ25lZCBpbnQgcmVnKQotewotCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCWlmIChyZWcgPT0gV004NTEwX1JFU0VUKQotCQlyZXR1cm4gMDsKLQlpZiAocmVnID49IFdNODUxMF9DQUNIRVJFR05VTSkKLQkJcmV0dXJuIC0xOwotCXJldHVybiBjYWNoZVtyZWddOwotfQotCi0vKgotICogd3JpdGUgd204NTEwIHJlZ2lzdGVyIGNhY2hlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB3bTg1MTBfd3JpdGVfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQl1MTYgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JaWYgKHJlZyA+PSBXTTg1MTBfQ0FDSEVSRUdOVU0pCi0JCXJldHVybjsKLQljYWNoZVtyZWddID0gdmFsdWU7Ci19Ci0KLS8qCi0gKiB3cml0ZSB0byB0aGUgV004NTEwIHJlZ2lzdGVyIHNwYWNlCi0gKi8KLXN0YXRpYyBpbnQgd204NTEwX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKLQl1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTggZGF0YVsyXTsKLQotCS8qIGRhdGEgaXMKLQkgKiAgIEQxNS4uRDkgV004NTEwIHJlZ2lzdGVyIG9mZnNldAotCSAqICAgRDguLi5EMCByZWdpc3RlciBkYXRhCi0JICovCi0JZGF0YVswXSA9IChyZWcgPDwgMSkgfCAoKHZhbHVlID4+IDgpICYgMHgwMDAxKTsKLQlkYXRhWzFdID0gdmFsdWUgJiAweDAwZmY7Ci0KLQl3bTg1MTBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCByZWcsIHZhbHVlKTsKLQlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpID09IDIpCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIC1FSU87Ci19Ci0KLSNkZWZpbmUgd204NTEwX3Jlc2V0KGMpCXdtODUxMF93cml0ZShjLCBXTTg1MTBfUkVTRVQsIDApCisjZGVmaW5lIHdtODUxMF9yZXNldChjKQlzbmRfc29jX3dyaXRlKGMsIFdNODUxMF9SRVNFVCwgMCkKIAogc3RhdGljIGNvbnN0IGNoYXIgKndtODUxMF9jb21wYW5kaW5nW10gPSB7ICJPZmYiLCAiTkMiLCAidS1sYXciLCAiQS1sYXciIH07CiBzdGF0aWMgY29uc3QgY2hhciAqd204NTEwX2RlZW1wW10gPSB7ICJOb25lIiwgIjMya0h6IiwgIjQ0LjFrSHoiLCAiNDhrSHoiIH07CkBAIC0zMjcsMjcgKzI3OSwyNyBAQAogCiAJaWYgKGZyZXFfaW4gPT0gMCB8fCBmcmVxX291dCA9PSAwKSB7CiAJCS8qIENsb2NrIENPREVDIGRpcmVjdGx5IGZyb20gTUNMSyAqLwotCQlyZWcgPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9DTE9DSyk7Ci0JCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX0NMT0NLLCByZWcgJiAweDBmZik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTEwX0NMT0NLKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NTEwX0NMT0NLLCByZWcgJiAweDBmZik7CiAKIAkJLyogVHVybiBvZmYgUExMICovCi0JCXJlZyA9IHdtODUxMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NTEwX1BPV0VSMSk7Ci0JCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BPV0VSMSwgcmVnICYgMHgxZGYpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODUxMF9QT1dFUjEpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1MTBfUE9XRVIxLCByZWcgJiAweDFkZik7CiAJCXJldHVybiAwOwogCX0KIAogCXBsbF9mYWN0b3JzKGZyZXFfb3V0KjQsIGZyZXFfaW4pOwogCi0Jd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUExMTiwgKHBsbF9kaXYucHJlX2RpdiA8PCA0KSB8IHBsbF9kaXYubik7Ci0Jd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUExMSzEsIHBsbF9kaXYuayA+PiAxOCk7Ci0Jd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUExMSzIsIChwbGxfZGl2LmsgPj4gOSkgJiAweDFmZik7Ci0Jd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUExMSzMsIHBsbF9kaXYuayAmIDB4MWZmKTsKLQlyZWcgPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9QT1dFUjEpOwotCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BPV0VSMSwgcmVnIHwgMHgwMjApOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODUxMF9QTExOLCAocGxsX2Rpdi5wcmVfZGl2IDw8IDQpIHwgcGxsX2Rpdi5uKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1MTBfUExMSzEsIHBsbF9kaXYuayA+PiAxOCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004NTEwX1BMTEsyLCAocGxsX2Rpdi5rID4+IDkpICYgMHgxZmYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODUxMF9QTExLMywgcGxsX2Rpdi5rICYgMHgxZmYpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTEwX1BPV0VSMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004NTEwX1BPV0VSMSwgcmVnIHwgMHgwMjApOwogCiAJLyogUnVuIENPREVDIGZyb20gUExMIGluc3RlYWQgb2YgTUNMSyAqLwotCXJlZyA9IHdtODUxMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NTEwX0NMT0NLKTsKLQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9DTE9DSywgcmVnIHwgMHgxMDApOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTEwX0NMT0NLKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1MTBfQ0xPQ0ssIHJlZyB8IDB4MTAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzYzLDI0ICszMTUsMjQgQEAKIAogCXN3aXRjaCAoZGl2X2lkKSB7CiAJY2FzZSBXTTg1MTBfT1BDTEtESVY6Ci0JCXJlZyA9IHdtODUxMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NTEwX0dQSU8pICYgMHgxY2Y7Ci0JCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX0dQSU8sIHJlZyB8IGRpdik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTEwX0dQSU8pICYgMHgxY2Y7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODUxMF9HUElPLCByZWcgfCBkaXYpOwogCQlicmVhazsKIAljYXNlIFdNODUxMF9NQ0xLRElWOgotCQlyZWcgPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9DTE9DSykgJiAweDExZjsKLQkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfQ0xPQ0ssIHJlZyB8IGRpdik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTEwX0NMT0NLKSAmIDB4MTFmOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1MTBfQ0xPQ0ssIHJlZyB8IGRpdik7CiAJCWJyZWFrOwogCWNhc2UgV004NTEwX0FEQ0NMSzoKLQkJcmVnID0gd204NTEwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg1MTBfQURDKSAmIDB4MWY3OwotCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9BREMsIHJlZyB8IGRpdik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTEwX0FEQykgJiAweDFmNzsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NTEwX0FEQywgcmVnIHwgZGl2KTsKIAkJYnJlYWs7CiAJY2FzZSBXTTg1MTBfREFDQ0xLOgotCQlyZWcgPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9EQUMpICYgMHgxZjc7Ci0JCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX0RBQywgcmVnIHwgZGl2KTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg1MTBfREFDKSAmIDB4MWY3OworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1MTBfREFDLCByZWcgfCBkaXYpOwogCQlicmVhazsKIAljYXNlIFdNODUxMF9CQ0xLRElWOgotCQlyZWcgPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9DTE9DSykgJiAweDFlMzsKLQkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfQ0xPQ0ssIHJlZyB8IGRpdik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTEwX0NMT0NLKSAmIDB4MWUzOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1MTBfQ0xPQ0ssIHJlZyB8IGRpdik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzk0LDcgKzM0Niw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKIAl1MTYgaWZhY2UgPSAwOwotCXUxNiBjbGsgPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9DTE9DSykgJiAweDFmZTsKKwl1MTYgY2xrID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg1MTBfQ0xPQ0spICYgMHgxZmU7CiAKIAkvKiBzZXQgbWFzdGVyL3NsYXZlIGF1ZGlvIGludGVyZmFjZSAqLwogCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKQEAgLTQ0MSw4ICszOTMsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9JRkFDRSwgaWZhY2UpOwotCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX0NMT0NLLCBjbGspOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODUxMF9JRkFDRSwgaWZhY2UpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODUxMF9DTE9DSywgY2xrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDUzLDggKzQwNSw4IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKLQl1MTYgaWZhY2UgPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9JRkFDRSkgJiAweDE5ZjsKLQl1MTYgYWRuID0gd204NTEwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg1MTBfQUREKSAmIDB4MWYxOworCXUxNiBpZmFjZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTEwX0lGQUNFKSAmIDB4MTlmOworCXUxNiBhZG4gPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODUxMF9BREQpICYgMHgxZjE7CiAKIAkvKiBiaXQgc2l6ZSAqLwogCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CkBAIC00OTMsMjAgKzQ0NSwyMCBAQAogCQlicmVhazsKIAl9CiAKLQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9JRkFDRSwgaWZhY2UpOwotCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX0FERCwgYWRuKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1MTBfSUZBQ0UsIGlmYWNlKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1MTBfQURELCBhZG4pOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHdtODUxMF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwotCXUxNiBtdXRlX3JlZyA9IHdtODUxMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NTEwX0RBQykgJiAweGZmYmY7CisJdTE2IG11dGVfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg1MTBfREFDKSAmIDB4ZmZiZjsKIAogCWlmIChtdXRlKQotCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9EQUMsIG11dGVfcmVnIHwgMHg0MCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODUxMF9EQUMsIG11dGVfcmVnIHwgMHg0MCk7CiAJZWxzZQotCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9EQUMsIG11dGVfcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NTEwX0RBQywgbXV0ZV9yZWcpOwogCXJldHVybiAwOwogfQogCkBAIC01MTQsMTMgKzQ2NiwxMyBAQAogc3RhdGljIGludCB3bTg1MTBfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewotCXUxNiBwb3dlcjEgPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9QT1dFUjEpICYgfjB4MzsKKwl1MTYgcG93ZXIxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg1MTBfUE9XRVIxKSAmIH4weDM7CiAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046CiAJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKIAkJcG93ZXIxIHw9IDB4MTsgIC8qIFZNSUQgNTBrICovCi0JCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BPV0VSMSwgcG93ZXIxKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NTEwX1BPV0VSMSwgcG93ZXIxKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgpAQCAtNTI4LDE4ICs0ODAsMTggQEAKIAogCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgewogCQkJLyogSW5pdGlhbCBjYXAgY2hhcmdlIGF0IFZNSUQgNWsgKi8KLQkJCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BPV0VSMSwgcG93ZXIxIHwgMHgzKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODUxMF9QT1dFUjEsIHBvd2VyMSB8IDB4Myk7CiAJCQltZGVsYXkoMTAwKTsKIAkJfQogCiAJCXBvd2VyMSB8PSAweDI7ICAvKiBWTUlEIDUwMGsgKi8KLQkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUE9XRVIxLCBwb3dlcjEpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1MTBfUE9XRVIxLCBwb3dlcjEpOwogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUE9XRVIxLCAwKTsKLQkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUE9XRVIyLCAwKTsKLQkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUE9XRVIzLCAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NTEwX1BPV0VSMSwgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODUxMF9QT1dFUjIsIDApOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1MTBfUE9XRVIzLCAwKTsKIAkJYnJlYWs7CiAJfQogCkBAIC01NzcsNiArNTI5LDcgQEAKIAkJLnJhdGVzID0gV004NTEwX1JBVEVTLAogCQkuZm9ybWF0cyA9IFdNODUxMF9GT1JNQVRTLH0sCiAJLm9wcyA9ICZ3bTg1MTBfZGFpX29wcywKKwkuc3ltbWV0cmljX3JhdGVzID0gMSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh3bTg1MTBfZGFpKTsKIApAQCAtNjEyLDE1ICs1NjUsMTQgQEAKICAqIGluaXRpYWxpc2UgdGhlIFdNODUxMCBkcml2ZXIKICAqIHJlZ2lzdGVyIHRoZSBtaXhlciBhbmQgZHNwIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsCiAgKi8KLXN0YXRpYyBpbnQgd204NTEwX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCitzdGF0aWMgaW50IHdtODUxMF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2LAorCQkgICAgICAgZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJldCA9IDA7CiAKIAljb2RlYy0+bmFtZSA9ICJXTTg1MTAiOwogCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWNvZGVjLT5yZWFkID0gd204NTEwX3JlYWRfcmVnX2NhY2hlOwotCWNvZGVjLT53cml0ZSA9IHdtODUxMF93cml0ZTsKIAljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg1MTBfc2V0X2JpYXNfbGV2ZWw7CiAJY29kZWMtPmRhaSA9ICZ3bTg1MTBfZGFpOwogCWNvZGVjLT5udW1fZGFpID0gMTsKQEAgLTYzMCwxMyArNTgyLDIwIEBACiAJaWYgKGNvZGVjLT5yZWdfY2FjaGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgNywgOSwgY29udHJvbCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ3bTg1MTA6IGZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwKKwkJICAgICAgIHJldCk7CisJCWdvdG8gZXJyOworCX0KKwogCXdtODUxMF9yZXNldChjb2RlYyk7CiAKIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIndtODUxMDogZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKLQkJZ290byBwY21fZXJyOworCQlnb3RvIGVycjsKIAl9CiAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KQEAgLTY1NSw3ICs2MTQsNyBAQAogY2FyZF9lcnI6CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwotcGNtX2VycjoKK2VycjoKIAlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNjc4LDcgKzYzNyw3IEBACiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CiAKLQlyZXQgPSB3bTg1MTBfaW5pdChzb2NkZXYpOworCXJldCA9IHdtODUxMF9pbml0KHNvY2RldiwgU05EX1NPQ19JMkMpOwogCWlmIChyZXQgPCAwKQogCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXNlIFdNODUxMFxuIik7CiAKQEAgLTc1OCw3ICs3MTcsNyBAQAogCiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKIAotCXJldCA9IHdtODUxMF9pbml0KHNvY2Rldik7CisJcmV0ID0gd204NTEwX2luaXQoc29jZGV2LCBTTkRfU09DX1NQSSk7CiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpc2UgV004NTEwXG4iKTsKIApAQCAtNzc5LDMwICs3MzgsNiBAQAogCS5wcm9iZQkJPSB3bTg1MTBfc3BpX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204NTEwX3NwaV9yZW1vdmUpLAogfTsKLQotc3RhdGljIGludCB3bTg1MTBfc3BpX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCi17Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB0OwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCXU4IG1zZ1syXTsKLQotCWlmIChsZW4gPD0gMCkKLQkJcmV0dXJuIDA7Ci0KLQltc2dbMF0gPSBkYXRhWzBdOwotCW1zZ1sxXSA9IGRhdGFbMV07Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOwotCi0JdC50eF9idWYgPSAmbXNnWzBdOwotCXQubGVuID0gbGVuOwotCi0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKLQlzcGlfc3luYyhzcGksICZtKTsKLQotCXJldHVybiBsZW47Ci19CiAjZW5kaWYgLyogQ09ORklHX1NQSV9NQVNURVIgKi8KIAogc3RhdGljIGludCB3bTg1MTBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTgyNywxMyArNzYyLDExIEBACiAJd204NTEwX3NvY2RldiA9IHNvY2RldjsKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCiAJaWYgKHNldHVwLT5pMmNfYWRkcmVzcykgewotCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CiAJCXJldCA9IHdtODUxMF9hZGRfaTJjX2RldmljZShwZGV2LCBzZXR1cCk7CiAJfQogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKIAlpZiAoc2V0dXAtPnNwaSkgewotCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCl3bTg1MTBfc3BpX3dyaXRlOwogCQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ3bTg1MTBfc3BpX2RyaXZlcik7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIHNwaSBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTIzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUyMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ODcwYTQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUyMy5jCkBAIC0wLDAgKzEsNjk5IEBACisvKgorICogd204NTIzLmMgIC0tICBXTTg1MjMgQUxTQSBTb0MgQXVkaW8gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHBsYworICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorCisjaW5jbHVkZSAid204NTIzLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204NTIzX2NvZGVjOworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NTIzOworCisjZGVmaW5lIFdNODUyM19OVU1fU1VQUExJRVMgMgorc3RhdGljIGNvbnN0IGNoYXIgKndtODUyM19zdXBwbHlfbmFtZXNbV004NTIzX05VTV9TVVBQTElFU10gPSB7CisJIkFWREQiLAorCSJMSU5FVkREIiwKK307CisKKyNkZWZpbmUgV004NTIzX05VTV9SQVRFUyA3CisKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHdtODUyM19wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW1dNODUyM19SRUdJU1RFUl9DT1VOVF07CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbV004NTIzX05VTV9TVVBQTElFU107CisJdW5zaWduZWQgaW50IHN5c2NsazsKKwl1bnNpZ25lZCBpbnQgcmF0ZV9jb25zdHJhaW50X2xpc3RbV004NTIzX05VTV9SQVRFU107CisJc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IHJhdGVfY29uc3RyYWludDsKK307CisKK3N0YXRpYyBjb25zdCB1MTYgd204NTIzX3JlZ1tXTTg1MjNfUkVHSVNURVJfQ09VTlRdID0geworCTB4ODUyMywgICAgIC8qIFIwIC0gREVWSUNFX0lEICovCisJMHgwMDAxLCAgICAgLyogUjEgLSBSRVZJU0lPTiAqLworCTB4MDAwMCwgICAgIC8qIFIyIC0gUFNDVFJMMSAqLworCTB4MTgxMiwgICAgIC8qIFIzIC0gQUlGX0NUUkwxICovCisJMHgwMDAwLCAgICAgLyogUjQgLSBBSUZfQ1RSTDIgKi8KKwkweDAwMDEsICAgICAvKiBSNSAtIERBQ19DVFJMMyAqLworCTB4MDE5MCwgICAgIC8qIFI2IC0gREFDX0dBSU5MICovCisJMHgwMTkwLCAgICAgLyogUjcgLSBEQUNfR0FJTlIgKi8KKwkweDAwMDAsICAgICAvKiBSOCAtIFpFUk9fREVURUNUICovCit9OworCitzdGF0aWMgaW50IHdtODUyM192b2xhdGlsZV9yZWdpc3Rlcih1bnNpZ25lZCBpbnQgcmVnKQoreworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBXTTg1MjNfREVWSUNFX0lEOgorCWNhc2UgV004NTIzX1JFVklTSU9OOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgd204NTIzX3Jlc2V0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgV004NTIzX0RFVklDRV9JRCwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYWNfdGx2LCAtMTAwMDAsIDI1LCAwKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKndtODUyM196ZF9jb3VudF90ZXh0W10gPSB7CisJIjEwMjQiLAorCSIyMDQ4IiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204NTIzX3pjX2NvdW50ID0KKwlTT0NfRU5VTV9TSU5HTEUoV004NTIzX1pFUk9fREVURUNULCAwLCAyLCB3bTg1MjNfemRfY291bnRfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg1MjNfc25kX2NvbnRyb2xzW10gPSB7CitTT0NfRE9VQkxFX1JfVExWKCJQbGF5YmFjayBWb2x1bWUiLCBXTTg1MjNfREFDX0dBSU5MLCBXTTg1MjNfREFDX0dBSU5SLAorCQkgMCwgNDQ4LCAwLCBkYWNfdGx2KSwKK1NPQ19TSU5HTEUoIlpDIFN3aXRjaCIsIFdNODUyM19EQUNfQ1RSTDMsIDQsIDEsIDApLAorU09DX1NJTkdMRSgiUGxheWJhY2sgRGVlbXBoYXNpcyBTd2l0Y2giLCBXTTg1MjNfQUlGX0NUUkwxLCA4LCAxLCAwKSwKK1NPQ19ET1VCTEUoIlBsYXliYWNrIFN3aXRjaCIsIFdNODUyM19EQUNfQ1RSTDMsIDIsIDMsIDEsIDEpLAorU09DX1NJTkdMRSgiVm9sdW1lIFJhbXAgVXAgU3dpdGNoIiwgV004NTIzX0RBQ19DVFJMMywgMSwgMSwgMCksCitTT0NfU0lOR0xFKCJWb2x1bWUgUmFtcCBEb3duIFN3aXRjaCIsIFdNODUyM19EQUNfQ1RSTDMsIDAsIDEsIDApLAorU09DX0VOVU0oIlplcm8gRGV0ZWN0IENvdW50Iiwgd204NTIzX3pjX2NvdW50KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg1MjNfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fREFDKCJEQUMiLCAiUGxheWJhY2siLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTElORVZPVVRMIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMSU5FVk9VVFIiKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uW10gPSB7CisJeyAiTElORVZPVVRMIiwgTlVMTCwgIkRBQyIgfSwKKwl7ICJMSU5FVk9VVFIiLCBOVUxMLCAiREFDIiB9LAorfTsKKworc3RhdGljIGludCB3bTg1MjNfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODUyM19kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODUyM19kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOworCisJc25kX3NvY19kYXBtX25ld193aWRnZXRzKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB7CisJaW50IHZhbHVlOworCWludCByYXRpbzsKK30gbHJjbGtfcmF0aW9zW1dNODUyM19OVU1fUkFURVNdID0geworCXsgMSwgMTI4IH0sCisJeyAyLCAxOTIgfSwKKwl7IDMsIDI1NiB9LAorCXsgNCwgMzg0IH0sCisJeyA1LCA1MTIgfSwKKwl7IDYsIDc2OCB9LAorCXsgNywgMTE1MiB9LAorfTsKKworc3RhdGljIGludCB3bTg1MjNfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204NTIzX3ByaXYgKndtODUyMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwkvKiBUaGUgc2V0IG9mIHNhbXBsZSByYXRlcyB0aGF0IGNhbiBiZSBzdXBwb3J0ZWQgZGVwZW5kcyBvbiB0aGUKKwkgKiBNQ0xLIHN1cHBsaWVkIHRvIHRoZSBDT0RFQyAtIGVuZm9yY2UgdGhpcy4KKwkgKi8KKwlpZiAoIXdtODUyMy0+c3lzY2xrKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCSJObyBNQ0xLIGNvbmZpZ3VyZWQsIGNhbGwgc2V0X3N5c2NsaygpIG9uIGluaXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKKwlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQkJICAgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCisJCQkJICAgJndtODUyMy0+cmF0ZV9jb25zdHJhaW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODUyM19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3Qgd204NTIzX3ByaXYgKndtODUyMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGk7CisJdTE2IGFpZmN0cmwxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg1MjNfQUlGX0NUUkwxKTsKKwl1MTYgYWlmY3RybDIgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODUyM19BSUZfQ1RSTDIpOworCisJLyogRmluZCBhIHN1cHBvcnRlZCBMUkNMSyByYXRpbyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxyY2xrX3JhdGlvcyk7IGkrKykgeworCQlpZiAod204NTIzLT5zeXNjbGsgLyBwYXJhbXNfcmF0ZShwYXJhbXMpID09CisJCSAgICBscmNsa19yYXRpb3NbaV0ucmF0aW8pCisJCQlicmVhazsKKwl9CisKKwkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLCBzaG91bGQgYmUgaGFuZGxlZCBieSBjb25zdHJhaW50cyAqLworCWlmIChpID09IEFSUkFZX1NJWkUobHJjbGtfcmF0aW9zKSkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJNQ0xLL2ZzIHJhdGlvICVkIHVuc3VwcG9ydGVkXG4iLAorCQkJd204NTIzLT5zeXNjbGsgLyBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYWlmY3RybDIgJj0gfldNODUyM19TUl9NQVNLOworCWFpZmN0cmwyIHw9IGxyY2xrX3JhdGlvc1tpXS52YWx1ZTsKKworCWFpZmN0cmwxICY9IH5XTTg1MjNfV0xfTUFTSzsKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQlhaWZjdHJsMSB8PSAweDg7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWFpZmN0cmwxIHw9IDB4MTA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisJCWFpZmN0cmwxIHw9IDB4MTg7CisJCWJyZWFrOworCX0KKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODUyM19BSUZfQ1RSTDEsIGFpZmN0cmwxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1MjNfQUlGX0NUUkwyLCBhaWZjdHJsMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg1MjNfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCWludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IHdtODUyM19wcml2ICp3bTg1MjMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCB2YWw7CisJaW50IGk7CisKKwl3bTg1MjMtPnN5c2NsayA9IGZyZXE7CisKKwl3bTg1MjMtPnJhdGVfY29uc3RyYWludC5jb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobHJjbGtfcmF0aW9zKTsgaSsrKSB7CisJCXZhbCA9IGZyZXEgLyBscmNsa19yYXRpb3NbaV0ucmF0aW87CisJCS8qIENoZWNrIHRoYXQgaXQncyBhIHN0YW5kYXJkIHJhdGUgc2luY2UgY29yZSBjYW4ndAorCQkgKiBjb3BlIHdpdGggb3RoZXJzIGFuZCBoYXZpbmcgdGhlIG9kZCByYXRlcyBjb25mdXNlcworCQkgKiBjb25zdHJhaW50IG1hdGNoaW5nLgorCQkgKi8KKwkJc3dpdGNoICh2YWwpIHsKKwkJY2FzZSA4MDAwOgorCQljYXNlIDExMDI1OgorCQljYXNlIDE2MDAwOgorCQljYXNlIDIyMDUwOgorCQljYXNlIDMyMDAwOgorCQljYXNlIDQ0MTAwOgorCQljYXNlIDQ4MDAwOgorCQljYXNlIDY0MDAwOgorCQljYXNlIDg4MjAwOgorCQljYXNlIDk2MDAwOgorCQljYXNlIDE3NjQwMDoKKwkJY2FzZSAxOTIwMDA6CisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJTdXBwb3J0ZWQgc2FtcGxlIHJhdGU6ICVkSHpcbiIsCisJCQkJdmFsKTsKKwkJCXdtODUyMy0+cmF0ZV9jb25zdHJhaW50X2xpc3RbaV0gPSB2YWw7CisJCQl3bTg1MjMtPnJhdGVfY29uc3RyYWludC5jb3VudCsrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJTa2lwcGluZyBzYW1wbGUgcmF0ZTogJWRIelxuIiwKKwkJCQl2YWwpOworCQl9CisJfQorCisJLyogTmVlZCBhdCBsZWFzdCBvbmUgc3VwcG9ydGVkIHJhdGUuLi4gKi8KKwlpZiAod204NTIzLT5yYXRlX2NvbnN0cmFpbnQuY291bnQgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHdtODUyM19zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXUxNiBhaWZjdHJsMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTIzX0FJRl9DVFJMMSk7CisKKwlhaWZjdHJsMSAmPSB+KFdNODUyM19CQ0xLX0lOVl9NQVNLIHwgV004NTIzX0xSQ0xLX0lOVl9NQVNLIHwKKwkJICAgICAgV004NTIzX0ZNVF9NQVNLIHwgV004NTIzX0FJRl9NU1RSX01BU0spOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJYWlmY3RybDEgfD0gV004NTIzX0FJRl9NU1RSOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJYWlmY3RybDEgfD0gMHgwMDAyOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlhaWZjdHJsMSB8PSAweDAwMDE7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWFpZmN0cmwxIHw9IDB4MDAwMzsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJYWlmY3RybDEgfD0gMHgwMDIzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJYWlmY3RybDEgfD0gV004NTIzX0JDTEtfSU5WIHwgV004NTIzX0xSQ0xLX0lOVjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJYWlmY3RybDEgfD0gV004NTIzX0JDTEtfSU5WOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQlhaWZjdHJsMSB8PSBXTTg1MjNfTFJDTEtfSU5WOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1MjNfQUlGX0NUUkwxLCBhaWZjdHJsMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg1MjNfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzdHJ1Y3Qgd204NTIzX3ByaXYgKndtODUyMyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCwgaTsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQkvKiBGdWxsIHBvd2VyIG9uICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODUyM19QU0NUUkwxLAorCQkJCSAgICBXTTg1MjNfU1lTX0VOQV9NQVNLLCAzKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204NTIzLT5zdXBwbGllcyksCisJCQkJCQkgICAgd204NTIzLT5zdXBwbGllcyk7CisJCQlpZiAocmV0ICE9IDApIHsKKwkJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkJCSJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwKKwkJCQkJcmV0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQkvKiBJbml0aWFsIHBvd2VyIHVwICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg1MjNfUFNDVFJMMSwKKwkJCQkJICAgIFdNODUyM19TWVNfRU5BX01BU0ssIDEpOworCisJCQkvKiBTeW5jIGJhY2sgZGVmYXVsdC9jYWNoZWQgdmFsdWVzICovCisJCQlmb3IgKGkgPSBXTTg1MjNfQUlGX0NUUkwxOworCQkJICAgICBpIDwgV004NTIzX01BWF9SRUdJU1RFUjsgaSsrKQorCQkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGksIHdtODUyMy0+cmVnX2NhY2hlW2ldKTsKKworCisJCQltc2xlZXAoMTAwKTsKKwkJfQorCisJCS8qIFBvd2VyIHVwIHRvIG11dGUgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NTIzX1BTQ1RSTDEsCisJCQkJICAgIFdNODUyM19TWVNfRU5BX01BU0ssIDIpOworCisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQkvKiBUaGUgY2hpcCBydW5zIHRocm91Z2ggdGhlIHBvd2VyIGRvd24gc2VxdWVuY2UgZm9yIHVzLiAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg1MjNfUFNDVFJMMSwKKwkJCQkgICAgV004NTIzX1NZU19FTkFfTUFTSywgMCk7CisJCW1zbGVlcCgxMDApOworCisJCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg1MjMtPnN1cHBsaWVzKSwKKwkJCQkgICAgICAgd204NTIzLT5zdXBwbGllcyk7CisJCWJyZWFrOworCX0KKwljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODUyM19SQVRFUyBTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMAorCisjZGVmaW5lIFdNODUyM19GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204NTIzX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSB3bTg1MjNfc3RhcnR1cCwKKwkuaHdfcGFyYW1zCT0gd204NTIzX2h3X3BhcmFtcywKKwkuc2V0X3N5c2Nsawk9IHdtODUyM19zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IHdtODUyM19zZXRfZGFpX2ZtdCwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSB3bTg1MjNfZGFpID0geworCS5uYW1lID0gIldNODUyMyIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMiwgIC8qIE1vbm8gbW9kZXMgbm90IHlldCBzdXBwb3J0ZWQgKi8KKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFdNODUyM19SQVRFUywKKwkJLmZvcm1hdHMgPSBXTTg1MjNfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmd204NTIzX2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwod204NTIzX2RhaSk7CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204NTIzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODUyM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NTIzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODUyM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB3bTg1MjNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODUyM19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgd204NTIzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CisKKwlpZiAod204NTIzX2NvZGVjID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODUyM19jb2RlYzsKKwljb2RlYyA9IHdtODUyM19jb2RlYzsKKworCS8qIHJlZ2lzdGVyIHBjbXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtczogJWRcbiIsIHJldCk7CisJCWdvdG8gcGNtX2VycjsKKwl9CisKKwlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NTIzX3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRSh3bTg1MjNfc25kX2NvbnRyb2xzKSk7CisJd204NTIzX2FkZF93aWRnZXRzKGNvZGVjKTsKKwlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjYXJkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBjYXJkX2VycjsKKwl9CisKKwlyZXR1cm4gcmV0OworCitjYXJkX2VycjoKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CitwY21fZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204NTIzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NTIzID0geworCS5wcm9iZSA9IAl3bTg1MjNfcHJvYmUsCisJLnJlbW92ZSA9IAl3bTg1MjNfcmVtb3ZlLAorCS5zdXNwZW5kID0gCXdtODUyM19zdXNwZW5kLAorCS5yZXN1bWUgPQl3bTg1MjNfcmVzdW1lLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204NTIzKTsKKworc3RhdGljIGludCB3bTg1MjNfcmVnaXN0ZXIoc3RydWN0IHdtODUyM19wcml2ICp3bTg1MjMsCisJCQkgICBlbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2wpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204NTIzLT5jb2RlYzsKKwlpbnQgaTsKKworCWlmICh3bTg1MjNfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBXTTg1MjMgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204NTIzOworCWNvZGVjLT5uYW1lID0gIldNODUyMyI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODUyM19zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gJndtODUyM19kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IFdNODUyM19SRUdJU1RFUl9DT1VOVDsKKwljb2RlYy0+cmVnX2NhY2hlID0gJndtODUyMy0+cmVnX2NhY2hlOworCWNvZGVjLT52b2xhdGlsZV9yZWdpc3RlciA9IHdtODUyM192b2xhdGlsZV9yZWdpc3RlcjsKKworCXdtODUyMy0+cmF0ZV9jb25zdHJhaW50Lmxpc3QgPSAmd204NTIzLT5yYXRlX2NvbnN0cmFpbnRfbGlzdFswXTsKKwl3bTg1MjMtPnJhdGVfY29uc3RyYWludC5jb3VudCA9CisJCUFSUkFZX1NJWkUod204NTIzLT5yYXRlX2NvbnN0cmFpbnRfbGlzdCk7CisKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204NTIzX3JlZywgc2l6ZW9mKHdtODUyM19yZWcpKTsKKworCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCAxNiwgY29udHJvbCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NTIzLT5zdXBwbGllcyk7IGkrKykKKwkJd204NTIzLT5zdXBwbGllc1tpXS5zdXBwbHkgPSB3bTg1MjNfc3VwcGx5X25hbWVzW2ldOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KGNvZGVjLT5kZXYsIEFSUkFZX1NJWkUod204NTIzLT5zdXBwbGllcyksCisJCQkJIHdtODUyMy0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODUyMy0+c3VwcGxpZXMpLAorCQkJCSAgICB3bTg1MjMtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2dldDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODUyM19ERVZJQ0VfSUQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIElEIHJlZ2lzdGVyXG4iKTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKwlpZiAocmV0ICE9IHdtODUyM19yZWdbV004NTIzX0RFVklDRV9JRF0pIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRGV2aWNlIGlzIG5vdCBhIFdNODUyMywgSUQgaXMgJXhcbiIsIHJldCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODUyM19SRVZJU0lPTik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgcmV2aXNpb24gcmVnaXN0ZXJcbiIpOworCQlnb3RvIGVycl9lbmFibGU7CisJfQorCWRldl9pbmZvKGNvZGVjLT5kZXYsICJyZXZpc2lvbiAlY1xuIiwKKwkJIChyZXQgJiBXTTg1MjNfQ0hJUF9SRVZfTUFTSykgKyAnQScpOworCisJcmV0ID0gd204NTIzX3Jlc2V0KGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOworCQlnb3RvIGVycl9lbmFibGU7CisJfQorCisJd204NTIzX2RhaS5kZXYgPSBjb2RlYy0+ZGV2OworCisJLyogQ2hhbmdlIHNvbWUgZGVmYXVsdCBzZXR0aW5ncyAtIGxhdGNoIFZVIGFuZCBlbmFibGUgWkMgKi8KKwl3bTg1MjMtPnJlZ19jYWNoZVtXTTg1MjNfREFDX0dBSU5SXSB8PSBXTTg1MjNfREFDUl9WVTsKKwl3bTg1MjMtPnJlZ19jYWNoZVtXTTg1MjNfREFDX0NUUkwzXSB8PSBXTTg1MjNfWkM7CisKKwl3bTg1MjNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCS8qIEJpYXMgbGV2ZWwgY29uZmlndXJhdGlvbiB3aWxsIGhhdmUgZG9uZSBhbiBleHRyYSBlbmFibGUgKi8KKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204NTIzLT5zdXBwbGllcyksIHdtODUyMy0+c3VwcGxpZXMpOworCisJd204NTIzX2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204NTIzX2RhaSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworCitlcnJfZW5hYmxlOgorCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg1MjMtPnN1cHBsaWVzKSwgd204NTIzLT5zdXBwbGllcyk7CitlcnJfZ2V0OgorCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRSh3bTg1MjMtPnN1cHBsaWVzKSwgd204NTIzLT5zdXBwbGllcyk7CitlcnI6CisJa2ZyZWUod204NTIzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bTg1MjNfdW5yZWdpc3RlcihzdHJ1Y3Qgd204NTIzX3ByaXYgKndtODUyMykKK3sKKwl3bTg1MjNfc2V0X2JpYXNfbGV2ZWwoJndtODUyMy0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRSh3bTg1MjMtPnN1cHBsaWVzKSwgd204NTIzLT5zdXBwbGllcyk7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmd204NTIzX2RhaSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ3bTg1MjMtPmNvZGVjKTsKKwlrZnJlZSh3bTg1MjMpOworCXdtODUyM19jb2RlYyA9IE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg1MjNfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3bTg1MjNfcHJpdiAqd204NTIzOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCXdtODUyMyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg1MjNfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg1MjMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg1MjMtPmNvZGVjOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODUyMyk7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKworCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlyZXR1cm4gd204NTIzX3JlZ2lzdGVyKHdtODUyMywgU05EX1NPQ19JMkMpOworfQorCitzdGF0aWMgX19kZXZleGl0IGludCB3bTg1MjNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3bTg1MjNfcHJpdiAqd204NTIzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJd204NTIzX3VucmVnaXN0ZXIod204NTIzKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB3bTg1MjNfaTJjX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmkyYywgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlyZXR1cm4gc25kX3NvY19zdXNwZW5kX2RldmljZSgmaTJjLT5kZXYpOworfQorCitzdGF0aWMgaW50IHdtODUyM19pMmNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJcmV0dXJuIHNuZF9zb2NfcmVzdW1lX2RldmljZSgmaTJjLT5kZXYpOworfQorI2Vsc2UKKyNkZWZpbmUgd204NTIzX2kyY19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204NTIzX2kyY19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg1MjNfaTJjX2lkW10gPSB7CisJeyAid204NTIzIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg1MjNfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODUyM19pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIldNODUyMyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gICAgd204NTIzX2kyY19wcm9iZSwKKwkucmVtb3ZlID0gICBfX2RldmV4aXRfcCh3bTg1MjNfaTJjX3JlbW92ZSksCisJLnN1c3BlbmQgPSAgd204NTIzX2kyY19zdXNwZW5kLAorCS5yZXN1bWUgPSAgIHdtODUyM19pMmNfcmVzdW1lLAorCS5pZF90YWJsZSA9IHdtODUyM19pMmNfaWQsCit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHdtODUyM19tb2Rpbml0KHZvaWQpCit7CisJaW50IHJldDsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODUyM19pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgV004NTIzIEkyQyBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHdtODUyM19tb2Rpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODUyM19leGl0KHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfZHJpdmVyKCZ3bTg1MjNfaTJjX2RyaXZlcik7CisjZW5kaWYKK30KK21vZHVsZV9leGl0KHdtODUyM19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNODUyMyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1MjMuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTIzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhOWNlMwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTIzLmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiB3bTg1MjMuaCAgLS0gIFdNODQyMyBBU29DIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcywgcGxjCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBCYXNlZCBvbiB3bTg3NTMuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfV004NTIzX0gKKyNkZWZpbmUgX1dNODUyM19ICisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgV004NTIzX0RFVklDRV9JRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgV004NTIzX1JFVklTSU9OICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgV004NTIzX1BTQ1RSTDEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgV004NTIzX0FJRl9DVFJMMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgV004NTIzX0FJRl9DVFJMMiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgV004NTIzX0RBQ19DVFJMMyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgV004NTIzX0RBQ19HQUlOTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgV004NTIzX0RBQ19HQUlOUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgV004NTIzX1pFUk9fREVURUNUICAgICAgICAgICAgICAgICAgICAgIDB4MDgKKworI2RlZmluZSBXTTg1MjNfUkVHSVNURVJfQ09VTlQgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBXTTg1MjNfTUFYX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgMHgwOAorCisvKgorICogRmllbGQgRGVmaW5pdGlvbnMuCisgKi8KKworLyoKKyAqIFIwICgweDAwKSAtIERFVklDRV9JRAorICovCisjZGVmaW5lIFdNODUyM19DSElQX0lEX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIENISVBfSUQgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004NTIzX0NISVBfSURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQ0hJUF9JRCAtIFsxNTowXSAqLworI2RlZmluZSBXTTg1MjNfQ0hJUF9JRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBDSElQX0lEIC0gWzE1OjBdICovCisKKy8qCisgKiBSMSAoMHgwMSkgLSBSRVZJU0lPTgorICovCisjZGVmaW5lIFdNODUyM19DSElQX1JFVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIENISVBfUkVWIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NTIzX0NISVBfUkVWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQ0hJUF9SRVYgLSBbMjowXSAqLworI2RlZmluZSBXTTg1MjNfQ0hJUF9SRVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBDSElQX1JFViAtIFsyOjBdICovCisKKy8qCisgKiBSMiAoMHgwMikgLSBQU0NUUkwxCisgKi8KKyNkZWZpbmUgV004NTIzX1NZU19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogU1lTX0VOQSAtIFsxOjBdICovCisjZGVmaW5lIFdNODUyM19TWVNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNZU19FTkEgLSBbMTowXSAqLworI2RlZmluZSBXTTg1MjNfU1lTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBTWVNfRU5BIC0gWzE6MF0gKi8KKworLyoKKyAqIFIzICgweDAzKSAtIEFJRl9DVFJMMQorICovCisjZGVmaW5lIFdNODUyM19URE1fTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAweDE4MDAgIC8qIFRETV9NT0RFIC0gWzEyOjExXSAqLworI2RlZmluZSBXTTg1MjNfVERNX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDExICAvKiBURE1fTU9ERSAtIFsxMjoxMV0gKi8KKyNkZWZpbmUgV004NTIzX1RETV9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogVERNX01PREUgLSBbMTI6MTFdICovCisjZGVmaW5lIFdNODUyM19URE1fU0xPVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDA2MDAgIC8qIFRETV9TTE9UIC0gWzEwOjldICovCisjZGVmaW5lIFdNODUyM19URE1fU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIFRETV9TTE9UIC0gWzEwOjldICovCisjZGVmaW5lIFdNODUyM19URE1fU0xPVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFRETV9TTE9UIC0gWzEwOjldICovCisjZGVmaW5lIFdNODUyM19ERUVNUEggICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERFRU1QSCAgKi8KKyNkZWZpbmUgV004NTIzX0RFRU1QSF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREVFTVBIICAqLworI2RlZmluZSBXTTg1MjNfREVFTVBIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBERUVNUEggICovCisjZGVmaW5lIFdNODUyM19ERUVNUEhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERFRU1QSCAgKi8KKyNkZWZpbmUgV004NTIzX0FJRl9NU1RSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGX01TVFIgICovCisjZGVmaW5lIFdNODUyM19BSUZfTVNUUl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRl9NU1RSICAqLworI2RlZmluZSBXTTg1MjNfQUlGX01TVFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBBSUZfTVNUUiAgKi8KKyNkZWZpbmUgV004NTIzX0FJRl9NU1RSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX01TVFIgICovCisjZGVmaW5lIFdNODUyM19MUkNMS19JTlYgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExSQ0xLX0lOViAgKi8KKyNkZWZpbmUgV004NTIzX0xSQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTFJDTEtfSU5WICAqLworI2RlZmluZSBXTTg1MjNfTFJDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMUkNMS19JTlYgICovCisjZGVmaW5lIFdNODUyM19MUkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExSQ0xLX0lOViAgKi8KKyNkZWZpbmUgV004NTIzX0JDTEtfSU5WICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQkNMS19JTlYgICovCisjZGVmaW5lIFdNODUyM19CQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEJDTEtfSU5WICAqLworI2RlZmluZSBXTTg1MjNfQkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBCQ0xLX0lOViAgKi8KKyNkZWZpbmUgV004NTIzX0JDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMS19JTlYgICovCisjZGVmaW5lIFdNODUyM19XTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTggIC8qIFdMIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004NTIzX1dMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogV0wgLSBbNDozXSAqLworI2RlZmluZSBXTTg1MjNfV0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBXTCAtIFs0OjNdICovCisjZGVmaW5lIFdNODUyM19GTVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIEZNVCAtIFsyOjBdICovCisjZGVmaW5lIFdNODUyM19GTVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZNVCAtIFsyOjBdICovCisjZGVmaW5lIFdNODUyM19GTVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEZNVCAtIFsyOjBdICovCisKKy8qCisgKiBSNCAoMHgwNCkgLSBBSUZfQ1RSTDIKKyAqLworI2RlZmluZSBXTTg1MjNfREFDX09QX01VWF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMEMwICAvKiBEQUNfT1BfTVVYIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004NTIzX0RBQ19PUF9NVVhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNiAgLyogREFDX09QX01VWCAtIFs3OjZdICovCisjZGVmaW5lIFdNODUyM19EQUNfT1BfTVVYX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQ19PUF9NVVggLSBbNzo2XSAqLworI2RlZmluZSBXTTg1MjNfQkNMS0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDM4ICAvKiBCQ0xLRElWIC0gWzU6M10gKi8KKyNkZWZpbmUgV004NTIzX0JDTEtESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogQkNMS0RJViAtIFs1OjNdICovCisjZGVmaW5lIFdNODUyM19CQ0xLRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEJDTEtESVYgLSBbNTozXSAqLworI2RlZmluZSBXTTg1MjNfU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBTUiAtIFsyOjBdICovCisjZGVmaW5lIFdNODUyM19TUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNSIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NTIzX1NSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogU1IgLSBbMjowXSAqLworCisvKgorICogUjUgKDB4MDUpIC0gREFDX0NUUkwzCisgKi8KKyNkZWZpbmUgV004NTIzX1pDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogWkMgICovCisjZGVmaW5lIFdNODUyM19aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFpDICAqLworI2RlZmluZSBXTTg1MjNfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBaQyAgKi8KKyNkZWZpbmUgV004NTIzX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogWkMgICovCisjZGVmaW5lIFdNODUyM19EQUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ1IgICovCisjZGVmaW5lIFdNODUyM19EQUNSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ1IgICovCisjZGVmaW5lIFdNODUyM19EQUNSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQ1IgICovCisjZGVmaW5lIFdNODUyM19EQUNSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ1IgICovCisjZGVmaW5lIFdNODUyM19EQUNMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQ0wgICovCisjZGVmaW5lIFdNODUyM19EQUNMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQ0wgICovCisjZGVmaW5lIFdNODUyM19EQUNMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQ0wgICovCisjZGVmaW5lIFdNODUyM19EQUNMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0wgICovCisjZGVmaW5lIFdNODUyM19WT0xfVVBfUkFNUCAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFZPTF9VUF9SQU1QICAqLworI2RlZmluZSBXTTg1MjNfVk9MX1VQX1JBTVBfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBWT0xfVVBfUkFNUCAgKi8KKyNkZWZpbmUgV004NTIzX1ZPTF9VUF9SQU1QX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogVk9MX1VQX1JBTVAgICovCisjZGVmaW5lIFdNODUyM19WT0xfVVBfUkFNUF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZPTF9VUF9SQU1QICAqLworI2RlZmluZSBXTTg1MjNfVk9MX0RPV05fUkFNUCAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWT0xfRE9XTl9SQU1QICAqLworI2RlZmluZSBXTTg1MjNfVk9MX0RPV05fUkFNUF9NQVNLICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWT0xfRE9XTl9SQU1QICAqLworI2RlZmluZSBXTTg1MjNfVk9MX0RPV05fUkFNUF9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBWT0xfRE9XTl9SQU1QICAqLworI2RlZmluZSBXTTg1MjNfVk9MX0RPV05fUkFNUF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBWT0xfRE9XTl9SQU1QICAqLworCisvKgorICogUjYgKDB4MDYpIC0gREFDX0dBSU5MCisgKi8KKyNkZWZpbmUgV004NTIzX0RBQ0xfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDTF9WVSAgKi8KKyNkZWZpbmUgV004NTIzX0RBQ0xfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDTF9WVSAgKi8KKyNkZWZpbmUgV004NTIzX0RBQ0xfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogREFDTF9WVSAgKi8KKyNkZWZpbmUgV004NTIzX0RBQ0xfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTF9WVSAgKi8KKyNkZWZpbmUgV004NTIzX0RBQ0xfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDFGRiAgLyogREFDTF9WT0wgLSBbODowXSAqLworI2RlZmluZSBXTTg1MjNfREFDTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUNMX1ZPTCAtIFs4OjBdICovCisjZGVmaW5lIFdNODUyM19EQUNMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERBQ0xfVk9MIC0gWzg6MF0gKi8KKworLyoKKyAqIFI3ICgweDA3KSAtIERBQ19HQUlOUgorICovCisjZGVmaW5lIFdNODUyM19EQUNSX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQ1JfVlUgICovCisjZGVmaW5lIFdNODUyM19EQUNSX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQ1JfVlUgICovCisjZGVmaW5lIFdNODUyM19EQUNSX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERBQ1JfVlUgICovCisjZGVmaW5lIFdNODUyM19EQUNSX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ1JfVlUgICovCisjZGVmaW5lIFdNODUyM19EQUNSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAxRkYgIC8qIERBQ1JfVk9MIC0gWzg6MF0gKi8KKyNkZWZpbmUgV004NTIzX0RBQ1JfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDUl9WT0wgLSBbODowXSAqLworI2RlZmluZSBXTTg1MjNfREFDUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBEQUNSX1ZPTCAtIFs4OjBdICovCisKKy8qCisgKiBSOCAoMHgwOCkgLSBaRVJPX0RFVEVDVAorICovCisjZGVmaW5lIFdNODUyM19aRF9DT1VOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIFpEX0NPVU5UIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004NTIzX1pEX0NPVU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogWkRfQ09VTlQgLSBbMTowXSAqLworI2RlZmluZSBXTTg1MjNfWkRfQ09VTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBaRF9DT1VOVCAtIFsxOjBdICovCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NTIzX2RhaTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg1MjM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMKaW5kZXggODZjNGIyNGQuLjZiZGVkOGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYwpAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgpAQCAtMTg3LDgyICsxODksMjIgQEAKIAl1bnNpZ25lZCBpbnQgb3V0OwogfTsKIAorI2RlZmluZSBXTTg1ODBfTlVNX1NVUFBMSUVTIDMKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg1ODBfc3VwcGx5X25hbWVzW1dNODU4MF9OVU1fU1VQUExJRVNdID0geworCSJBVkREIiwKKwkiRFZERCIsCisJIlBWREQiLAorfTsKKwogLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCiBzdHJ1Y3Qgd204NTgwX3ByaXYgewogCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1dNODU4MF9OVU1fU1VQUExJRVNdOwogCXUxNiByZWdfY2FjaGVbV004NTgwX01BWF9SRUdJU1RFUiArIDFdOwogCXN0cnVjdCBwbGxfc3RhdGUgYTsKIAlzdHJ1Y3QgcGxsX3N0YXRlIGI7CiB9OwogCi0KLS8qCi0gKiByZWFkIHdtODU4MCByZWdpc3RlciBjYWNoZQotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB3bTg1ODBfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCXVuc2lnbmVkIGludCByZWcpCi17Ci0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JQlVHX09OKHJlZyA+PSBBUlJBWV9TSVpFKHdtODU4MF9yZWcpKTsKLQlyZXR1cm4gY2FjaGVbcmVnXTsKLX0KLQotLyoKLSAqIHdyaXRlIHdtODU4MCByZWdpc3RlciBjYWNoZQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgd204NTgwX3dyaXRlX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQotewotCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCi0JY2FjaGVbcmVnXSA9IHZhbHVlOwotfQotCi0vKgotICogd3JpdGUgdG8gdGhlIFdNODU4MCByZWdpc3RlciBzcGFjZQotICovCi1zdGF0aWMgaW50IHdtODU4MF93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCi0JdW5zaWduZWQgaW50IHZhbHVlKQotewotCXU4IGRhdGFbMl07Ci0KLQlCVUdfT04ocmVnID49IEFSUkFZX1NJWkUod204NTgwX3JlZykpOwotCi0JLyogUmVnaXN0ZXJzIGFyZSA5IGJpdHMgd2lkZSAqLwotCXZhbHVlICY9IDB4MWZmOwotCi0Jc3dpdGNoIChyZWcpIHsKLQljYXNlIFdNODU4MF9SRVNFVDoKLQkJLyogVW5jYWNoZWQgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWYgKHZhbHVlID09IHdtODU4MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgcmVnKSkKLQkJCXJldHVybiAwOwotCX0KLQotCS8qIGRhdGEgaXMKLQkgKiAgIEQxNS4uRDkgV004NTgwIHJlZ2lzdGVyIG9mZnNldAotCSAqICAgRDguLi5EMCByZWdpc3RlciBkYXRhCi0JICovCi0JZGF0YVswXSA9IChyZWcgPDwgMSkgfCAoKHZhbHVlID4+IDgpICYgMHgwMDAxKTsKLQlkYXRhWzFdID0gdmFsdWUgJiAweDAwZmY7Ci0KLQl3bTg1ODBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCByZWcsIHZhbHVlKTsKLQlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpID09IDIpCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIC1FSU87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdtODU4MF9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZykKLXsKLQlzd2l0Y2ggKHJlZykgewotCWRlZmF1bHQ6Ci0JCXJldHVybiB3bTg1ODBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIHJlZyk7Ci0JfQotfQotCiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGFjX3RsdiwgLTEyNzUwLCA1MCwgMSk7CiAKIHN0YXRpYyBpbnQgd204NTgwX291dF92dShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKQEAgLTI3MSwyNSArMjEzLDIyIEBACiAJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CiAJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCXVuc2lnbmVkIGludCByZWcgPSBtYy0+cmVnOwogCXVuc2lnbmVkIGludCByZWcyID0gbWMtPnJyZWc7CiAJaW50IHJldDsKLQl1MTYgdmFsOwogCiAJLyogQ2xlYXIgdGhlIHJlZ2lzdGVyIGNhY2hlIHNvIHdlIHdyaXRlIHdpdGhvdXQgVlUgc2V0ICovCi0Jd204NTgwX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgcmVnLCAwKTsKLQl3bTg1ODBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCByZWcyLCAwKTsKKwlyZWdfY2FjaGVbcmVnXSA9IDA7CisJcmVnX2NhY2hlW3JlZzJdID0gMDsKIAogCXJldCA9IHNuZF9zb2NfcHV0X3ZvbHN3XzJyKGtjb250cm9sLCB1Y29udHJvbCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKIAkvKiBOb3cgd3JpdGUgYWdhaW4gd2l0aCB0aGUgdm9sdW1lIHVwZGF0ZSBiaXQgc2V0ICovCi0JdmFsID0gd204NTgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCByZWcpOwotCXdtODU4MF93cml0ZShjb2RlYywgcmVnLCB2YWwgfCAweDAxMDApOwotCi0JdmFsID0gd204NTgwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCByZWcyKTsKLQl3bTg1ODBfd3JpdGUoY29kZWMsIHJlZzIsIHZhbCB8IDB4MDEwMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLCAweDEwMCwgMHgxMDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZzIsIDB4MTAwLCAweDEwMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUxMiwyNyArNDUxLDI3IEBACiAJLyogQWx3YXlzIGRpc2FibGUgdGhlIFBMTCAtIGl0IGlzIG5vdCBzYWZlIHRvIGxlYXZlIGl0IHJ1bm5pbmcKIAkgKiB3aGlsZSByZXByb2dyYW1taW5nIGl0LgogCSAqLwotCXJlZyA9IHdtODU4MF9yZWFkKGNvZGVjLCBXTTg1ODBfUFdSRE4yKTsKLQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9QV1JETjIsIHJlZyB8IHB3cl9tYXNrKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODU4MF9QV1JETjIpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODU4MF9QV1JETjIsIHJlZyB8IHB3cl9tYXNrKTsKIAogCWlmICghZnJlcV9pbiB8fCAhZnJlcV9vdXQpCiAJCXJldHVybiAwOwogCi0Jd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfUExMQTEgKyBvZmZzZXQsIHBsbF9kaXYuayAmIDB4MWZmKTsKLQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9QTExBMiArIG9mZnNldCwgKHBsbF9kaXYuayA+PiA5KSAmIDB4ZmYpOwotCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1BMTEEzICsgb2Zmc2V0LAorCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODU4MF9QTExBMSArIG9mZnNldCwgcGxsX2Rpdi5rICYgMHgxZmYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODU4MF9QTExBMiArIG9mZnNldCwgKHBsbF9kaXYuayA+PiA5KSAmIDB4MWZmKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1ODBfUExMQTMgKyBvZmZzZXQsCiAJCSAgICAgKHBsbF9kaXYuayA+PiAxOCAmIDB4ZikgfCAocGxsX2Rpdi5uIDw8IDQpKTsKIAotCXJlZyA9IHdtODU4MF9yZWFkKGNvZGVjLCBXTTg1ODBfUExMQTQgKyBvZmZzZXQpOwotCXJlZyAmPSB+MHgzZjsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODU4MF9QTExBNCArIG9mZnNldCk7CisJcmVnICY9IH4weDFiOwogCXJlZyB8PSBwbGxfZGl2LnByZXNjYWxlIHwgcGxsX2Rpdi5wb3N0c2NhbGUgPDwgMSB8CiAJCXBsbF9kaXYuZnJlcW1vZGUgPDwgMzsKIAotCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1BMTEE0ICsgb2Zmc2V0LCByZWcpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODU4MF9QTExBNCArIG9mZnNldCwgcmVnKTsKIAogCS8qIEFsbCBkb25lLCB0dXJuIGl0IG9uICovCi0JcmVnID0gd204NTgwX3JlYWQoY29kZWMsIFdNODU4MF9QV1JETjIpOwotCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1BXUkROMiwgcmVnICYgfnB3cl9tYXNrKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODU4MF9QV1JETjIpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODU4MF9QV1JETjIsIHJlZyAmIH5wd3JfbWFzayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU0Nyw3ICs0ODYsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7Ci0JdTE2IHBhaWZiID0gd204NTgwX3JlYWQoY29kZWMsIFdNODU4MF9QQUlGMyArIGRhaS0+aWQpOworCXUxNiBwYWlmYiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTgwX1BBSUYzICsgZGFpLT5pZCk7CiAKIAlwYWlmYiAmPSB+V004NTgwX0FJRl9MRU5HVEhfTUFTSzsKIAkvKiBiaXQgc2l6ZSAqLwpAQCAtNTY3LDcgKzUwNiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1BBSUYzICsgZGFpLT5pZCwgcGFpZmIpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODU4MF9QQUlGMyArIGRhaS0+aWQsIHBhaWZiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTc5LDggKzUxOCw4IEBACiAJdW5zaWduZWQgaW50IGFpZmI7CiAJaW50IGNhbl9pbnZlcnRfbHJjbGs7CiAKLQlhaWZhID0gd204NTgwX3JlYWQoY29kZWMsIFdNODU4MF9QQUlGMSArIGNvZGVjX2RhaS0+aWQpOwotCWFpZmIgPSB3bTg1ODBfcmVhZChjb2RlYywgV004NTgwX1BBSUYzICsgY29kZWNfZGFpLT5pZCk7CisJYWlmYSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTgwX1BBSUYxICsgY29kZWNfZGFpLT5pZCk7CisJYWlmYiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTgwX1BBSUYzICsgY29kZWNfZGFpLT5pZCk7CiAKIAlhaWZiICY9IH4oV004NTgwX0FJRl9GTVRfTUFTSyB8IFdNODU4MF9BSUZfTFJQIHwgV004NTgwX0FJRl9CQ1ApOwogCkBAIC02NDYsOCArNTg1LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfUEFJRjEgKyBjb2RlY19kYWktPmlkLCBhaWZhKTsKLQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9QQUlGMyArIGNvZGVjX2RhaS0+aWQsIGFpZmIpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODU4MF9QQUlGMSArIGNvZGVjX2RhaS0+aWQsIGFpZmEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODU4MF9QQUlGMyArIGNvZGVjX2RhaS0+aWQsIGFpZmIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NjAsNyArNTk5LDcgQEAKIAogCXN3aXRjaCAoZGl2X2lkKSB7CiAJY2FzZSBXTTg1ODBfTUNMSzoKLQkJcmVnID0gd204NTgwX3JlYWQoY29kZWMsIFdNODU4MF9QTExCNCk7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTgwX1BMTEI0KTsKIAkJcmVnICY9IH5XTTg1ODBfUExMQjRfTUNMS09VVFNSQ19NQVNLOwogCiAJCXN3aXRjaCAoZGl2KSB7CkBAIC02ODIsMTEgKzYyMSwxMSBAQAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfUExMQjQsIHJlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODU4MF9QTExCNCwgcmVnKTsKIAkJYnJlYWs7CiAKIAljYXNlIFdNODU4MF9EQUNfQ0xLU0VMOgotCQlyZWcgPSB3bTg1ODBfcmVhZChjb2RlYywgV004NTgwX0NMS1NFTCk7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTgwX0NMS1NFTCk7CiAJCXJlZyAmPSB+V004NTgwX0NMS1NFTF9EQUNfQ0xLU0VMX01BU0s7CiAKIAkJc3dpdGNoIChkaXYpIHsKQEAgLTcwNCwxMSArNjQzLDExIEBACiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9DTEtTRUwsIHJlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODU4MF9DTEtTRUwsIHJlZyk7CiAJCWJyZWFrOwogCiAJY2FzZSBXTTg1ODBfQ0xLT1VUU1JDOgotCQlyZWcgPSB3bTg1ODBfcmVhZChjb2RlYywgV004NTgwX1BMTEI0KTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg1ODBfUExMQjQpOwogCQlyZWcgJj0gfldNODU4MF9QTExCNF9DTEtPVVRTUkNfTUFTSzsKIAogCQlzd2l0Y2ggKGRpdikgewpAQCAtNzMwLDcgKzY2OSw3IEBACiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9QTExCNCwgcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NTgwX1BMTEI0LCByZWcpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC03NDUsMTQgKzY4NCwxNCBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CiAJdW5zaWduZWQgaW50IHJlZzsKIAotCXJlZyA9IHdtODU4MF9yZWFkKGNvZGVjLCBXTTg1ODBfREFDX0NPTlRST0w1KTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODU4MF9EQUNfQ09OVFJPTDUpOwogCiAJaWYgKG11dGUpCiAJCXJlZyB8PSBXTTg1ODBfREFDX0NPTlRST0w1X01VVEVBTEw7CiAJZWxzZQogCQlyZWcgJj0gfldNODU4MF9EQUNfQ09OVFJPTDVfTVVURUFMTDsKIAotCXdtODU4MF93cml0ZShjb2RlYywgV004NTgwX0RBQ19DT05UUk9MNSwgcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1ODBfREFDX0NPTlRST0w1LCByZWcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NjksMjAgKzcwOCwyMCBAQAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CiAJCQkvKiBQb3dlciB1cCBhbmQgZ2V0IGluZGl2aWR1YWwgY29udHJvbCBvZiB0aGUgREFDcyAqLwotCQkJcmVnID0gd204NTgwX3JlYWQoY29kZWMsIFdNODU4MF9QV1JETjEpOworCQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg1ODBfUFdSRE4xKTsKIAkJCXJlZyAmPSB+KFdNODU4MF9QV1JETjFfUFdETiB8IFdNODU4MF9QV1JETjFfQUxMREFDUEQpOwotCQkJd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfUFdSRE4xLCByZWcpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004NTgwX1BXUkROMSwgcmVnKTsKIAogCQkJLyogTWFrZSBWTUlEIGhpZ2ggaW1wZWRlbmNlICovCi0JCQlyZWcgPSB3bTg1ODBfcmVhZChjb2RlYywgIFdNODU4MF9BRENfQ09OVFJPTDEpOworCQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCAgV004NTgwX0FEQ19DT05UUk9MMSk7CiAJCQlyZWcgJj0gfjB4MTAwOwotCQkJd204NTgwX3dyaXRlKGNvZGVjLCBXTTg1ODBfQURDX0NPTlRST0wxLCByZWcpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004NTgwX0FEQ19DT05UUk9MMSwgcmVnKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJcmVnID0gd204NTgwX3JlYWQoY29kZWMsIFdNODU4MF9QV1JETjEpOwotCQl3bTg1ODBfd3JpdGUoY29kZWMsIFdNODU4MF9QV1JETjEsIHJlZyB8IFdNODU4MF9QV1JETjFfUFdETik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NTgwX1BXUkROMSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODU4MF9QV1JETjEsIHJlZyB8IFdNODU4MF9QV1JETjFfUFdETik7CiAJCWJyZWFrOwogCX0KIAljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOwpAQCAtODkzLDcgKzgzMiw4IEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg1ODApOwogCi1zdGF0aWMgaW50IHdtODU4MF9yZWdpc3RlcihzdHJ1Y3Qgd204NTgwX3ByaXYgKndtODU4MCkKK3N0YXRpYyBpbnQgd204NTgwX3JlZ2lzdGVyKHN0cnVjdCB3bTg1ODBfcHJpdiAqd204NTgwLAorCQkJICAgZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sKQogewogCWludCByZXQsIGk7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODU4MC0+Y29kZWM7CkBAIC05MTEsOCArODUxLDYgQEAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204NTgwOwogCWNvZGVjLT5uYW1lID0gIldNODU4MCI7CiAJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29kZWMtPnJlYWQgPSB3bTg1ODBfcmVhZF9yZWdfY2FjaGU7Ci0JY29kZWMtPndyaXRlID0gd204NTgwX3dyaXRlOwogCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKIAljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg1ODBfc2V0X2JpYXNfbGV2ZWw7CiAJY29kZWMtPmRhaSA9IHdtODU4MF9kYWk7CkBAIC05MjIsMTEgKzg2MCwzNCBAQAogCiAJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODU4MF9yZWcsIHNpemVvZih3bTg1ODBfcmVnKSk7CiAKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgNywgOSwgY29udHJvbCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg1ODAtPnN1cHBsaWVzKTsgaSsrKQorCQl3bTg1ODAtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHdtODU4MF9zdXBwbHlfbmFtZXNbaV07CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQoY29kZWMtPmRldiwgQVJSQVlfU0laRSh3bTg1ODAtPnN1cHBsaWVzKSwKKwkJCQkgd204NTgwLT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204NTgwLT5zdXBwbGllcyksCisJCQkJICAgIHdtODU4MC0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcmVndWxhdG9yX2dldDsKKwl9CisKIAkvKiBHZXQgdGhlIGNvZGVjIGludG8gYSBrbm93biBzdGF0ZSAqLwotCXJldCA9IHdtODU4MF93cml0ZShjb2RlYywgV004NTgwX1JFU0VULCAwKTsKKwlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg1ODBfUkVTRVQsIDApOwogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVzZXQgY29kZWM6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfcmVndWxhdG9yX2VuYWJsZTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg1ODBfZGFpKTsgaSsrKQpAQCAtOTM5LDcgKzkwMCw3IEBACiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZXJyOworCQlnb3RvIGVycl9yZWd1bGF0b3JfZW5hYmxlOwogCX0KIAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyh3bTg1ODBfZGFpLCBBUlJBWV9TSVpFKHdtODU4MF9kYWkpKTsKQEAgLTk1Miw2ICs5MTMsMTAgQEAKIAogZXJyX2NvZGVjOgogCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CitlcnJfcmVndWxhdG9yX2VuYWJsZToKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204NTgwLT5zdXBwbGllcyksIHdtODU4MC0+c3VwcGxpZXMpOworZXJyX3JlZ3VsYXRvcl9nZXQ6CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODU4MC0+c3VwcGxpZXMpLCB3bTg1ODAtPnN1cHBsaWVzKTsKIGVycjoKIAlrZnJlZSh3bTg1ODApOwogCXJldHVybiByZXQ7CkBAIC05NjIsNiArOTI3LDggQEAKIAl3bTg1ODBfc2V0X2JpYXNfbGV2ZWwoJndtODU4MC0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHdtODU4MF9kYWksIEFSUkFZX1NJWkUod204NTgwX2RhaSkpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204NTgwLT5jb2RlYyk7CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODU4MC0+c3VwcGxpZXMpLCB3bTg1ODAtPnN1cHBsaWVzKTsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204NTgwLT5zdXBwbGllcyksIHdtODU4MC0+c3VwcGxpZXMpOwogCWtmcmVlKHdtODU4MCk7CiAJd204NTgwX2NvZGVjID0gTlVMTDsKIH0KQEAgLTk3OCwxNCArOTQ1LDEzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJY29kZWMgPSAmd204NTgwLT5jb2RlYzsKLQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg1ODApOwogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CiAKIAljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OwogCi0JcmV0dXJuIHdtODU4MF9yZWdpc3Rlcih3bTg1ODApOworCXJldHVybiB3bTg1ODBfcmVnaXN0ZXIod204NTgwLCBTTkRfU09DX0kyQyk7CiB9CiAKIHN0YXRpYyBpbnQgd204NTgwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKQEAgLTk5NSw2ICs5NjEsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB3bTg1ODBfaTJjX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlyZXR1cm4gc25kX3NvY19zdXNwZW5kX2RldmljZSgmY2xpZW50LT5kZXYpOworfQorCitzdGF0aWMgaW50IHdtODU4MF9pMmNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJcmV0dXJuIHNuZF9zb2NfcmVzdW1lX2RldmljZSgmY2xpZW50LT5kZXYpOworfQorI2Vsc2UKKyNkZWZpbmUgd204NTgwX2kyY19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204NTgwX2kyY19yZXN1bWUgTlVMTAorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg1ODBfaTJjX2lkW10gPSB7CiAJeyAid204NTgwIiwgMCB9LAogCXsgfQpAQCAtMTAwOCw2ICs5ODksOCBAQAogCX0sCiAJLnByb2JlID0gICAgd204NTgwX2kyY19wcm9iZSwKIAkucmVtb3ZlID0gICB3bTg1ODBfaTJjX3JlbW92ZSwKKwkuc3VzcGVuZCA9ICB3bTg1ODBfaTJjX3N1c3BlbmQsCisJLnJlc3VtZSA9ICAgd204NTgwX2kyY19yZXN1bWUsCiAJLmlkX3RhYmxlID0gd204NTgwX2kyY19pZCwKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODcyOC5jCmluZGV4IGU3ZmYyMTIuLjE2ZTk2OWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MjguYwpAQCAtNDMsNDUgKzQzLDYgQEAKIAkweDEwMCwKIH07CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdtODcyOF9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdW5zaWduZWQgaW50IHJlZykKLXsKLQl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlCVUdfT04ocmVnID49IEFSUkFZX1NJWkUod204NzI4X3JlZ19kZWZhdWx0cykpOwotCXJldHVybiBjYWNoZVtyZWddOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd204NzI4X3dyaXRlX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdTE2IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQotewotCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCUJVR19PTihyZWcgPj0gQVJSQVlfU0laRSh3bTg3MjhfcmVnX2RlZmF1bHRzKSk7Ci0JY2FjaGVbcmVnXSA9IHZhbHVlOwotfQotCi0vKgotICogd3JpdGUgdG8gdGhlIFdNODcyOCByZWdpc3RlciBzcGFjZQotICovCi1zdGF0aWMgaW50IHdtODcyOF93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCi0JdW5zaWduZWQgaW50IHZhbHVlKQotewotCXU4IGRhdGFbMl07Ci0KLQkvKiBkYXRhIGlzCi0JICogICBEMTUuLkQ5IFdNODcyOCByZWdpc3RlciBvZmZzZXQKLQkgKiAgIEQ4Li4uRDAgcmVnaXN0ZXIgZGF0YQotCSAqLwotCWRhdGFbMF0gPSAocmVnIDw8IDEpIHwgKCh2YWx1ZSA+PiA4KSAmIDB4MDAwMSk7Ci0JZGF0YVsxXSA9IHZhbHVlICYgMHgwMGZmOwotCi0Jd204NzI4X3dyaXRlX3JlZ19jYWNoZShjb2RlYywgcmVnLCB2YWx1ZSk7Ci0KLQlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpID09IDIpCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIC1FSU87Ci19Ci0KIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRSh3bTg3MjhfdGx2LCAtMTI3NTAsIDUwLCAxKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODcyOF9zbmRfY29udHJvbHNbXSA9IHsKQEAgLTEyMSwxMiArODIsMTIgQEAKIHN0YXRpYyBpbnQgd204NzI4X211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7Ci0JdTE2IG11dGVfcmVnID0gd204NzI4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MjhfREFDQ1RMKTsKKwl1MTYgbXV0ZV9yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODcyOF9EQUNDVEwpOwogCiAJaWYgKG11dGUpCi0JCXdtODcyOF93cml0ZShjb2RlYywgV004NzI4X0RBQ0NUTCwgbXV0ZV9yZWcgfCAxKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NzI4X0RBQ0NUTCwgbXV0ZV9yZWcgfCAxKTsKIAllbHNlCi0JCXdtODcyOF93cml0ZShjb2RlYywgV004NzI4X0RBQ0NUTCwgbXV0ZV9yZWcgJiB+MSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODcyOF9EQUNDVEwsIG11dGVfcmVnICYgfjEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzgsNyArOTksNyBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7Ci0JdTE2IGRhYyA9IHdtODcyOF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzI4X0RBQ0NUTCk7CisJdTE2IGRhYyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NzI4X0RBQ0NUTCk7CiAKIAlkYWMgJj0gfjB4MTg7CiAKQEAgLTE1NSw3ICsxMTYsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl3bTg3Mjhfd3JpdGUoY29kZWMsIFdNODcyOF9EQUNDVEwsIGRhYyk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004NzI4X0RBQ0NUTCwgZGFjKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTY0LDcgKzEyNSw3IEBACiAJCXVuc2lnbmVkIGludCBmbXQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKLQl1MTYgaWZhY2UgPSB3bTg3MjhfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODcyOF9JRkNUTCk7CisJdTE2IGlmYWNlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3MjhfSUZDVEwpOwogCiAJLyogQ3VycmVudGx5IG9ubHkgSTJTIGlzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLCB0aG91Z2ggdGhlCiAJICogaGFyZHdhcmUgaXMgbW9yZSBmbGV4aWJsZS4KQEAgLTIwNCw3ICsxNjUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl3bTg3Mjhfd3JpdGUoY29kZWMsIFdNODcyOF9JRkNUTCwgaWZhY2UpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODcyOF9JRkNUTCwgaWZhY2UpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjAsMTkgKzE4MSwxOSBAQAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CiAJCQkvKiBQb3dlciBldmVyeXRoaW5nIHVwLi4uICovCi0JCQlyZWcgPSB3bTg3MjhfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODcyOF9EQUNDVEwpOwotCQkJd204NzI4X3dyaXRlKGNvZGVjLCBXTTg3MjhfREFDQ1RMLCByZWcgJiB+MHg0KTsKKwkJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NzI4X0RBQ0NUTCk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3MjhfREFDQ1RMLCByZWcgJiB+MHg0KTsKIAogCQkJLyogLi50aGVuIHN5bmMgaW4gdGhlIHJlZ2lzdGVyIGNhY2hlLiAqLwogCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzI4X3JlZ19kZWZhdWx0cyk7IGkrKykKLQkJCQl3bTg3Mjhfd3JpdGUoY29kZWMsIGksCi0JCQkJCSAgICAgd204NzI4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBpKSk7CisJCQkJc25kX3NvY193cml0ZShjb2RlYywgaSwKKwkJCQkJICAgICBzbmRfc29jX3JlYWQoY29kZWMsIGkpKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJcmVnID0gd204NzI4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MjhfREFDQ1RMKTsKLQkJd204NzI4X3dyaXRlKGNvZGVjLCBXTTg3MjhfREFDQ1RMLCByZWcgfCAweDQpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODcyOF9EQUNDVEwpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3MjhfREFDQ1RMLCByZWcgfCAweDQpOwogCQlicmVhazsKIAl9CiAJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKQEAgLTI4NywxNSArMjQ4LDE0IEBACiAgKiBpbml0aWFsaXNlIHRoZSBXTTg3MjggZHJpdmVyCiAgKiByZWdpc3RlciB0aGUgbWl4ZXIgYW5kIGRzcCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbAogICovCi1zdGF0aWMgaW50IHdtODcyOF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQorc3RhdGljIGludCB3bTg3MjhfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiwKKwkJICAgICAgIGVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCWludCByZXQgPSAwOwogCiAJY29kZWMtPm5hbWUgPSAiV004NzI4IjsKIAljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+cmVhZCA9IHdtODcyOF9yZWFkX3JlZ19jYWNoZTsKLQljb2RlYy0+d3JpdGUgPSB3bTg3Mjhfd3JpdGU7CiAJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204NzI4X3NldF9iaWFzX2xldmVsOwogCWNvZGVjLT5kYWkgPSAmd204NzI4X2RhaTsKIAljb2RlYy0+bnVtX2RhaSA9IDE7CkBAIC0zMDcsMTEgKzI2NywxOCBAQAogCWlmIChjb2RlYy0+cmVnX2NhY2hlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDcsIDksIGNvbnRyb2wpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAid204NzI4OiBmYWlsZWQgdG8gY29uZmlndXJlIGNhY2hlIEkvTzogJWRcbiIsCisJCSAgICAgICByZXQpOworCQlnb3RvIGVycjsKKwl9CisKIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIndtODcyODogZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKLQkJZ290byBwY21fZXJyOworCQlnb3RvIGVycjsKIAl9CiAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KQEAgLTMzMSw3ICsyOTgsNyBAQAogY2FyZF9lcnI6CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwotcGNtX2VycjoKK2VycjoKIAlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzU3LDcgKzMyNCw3IEBACiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgY29kZWMpOwogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CiAKLQlyZXQgPSB3bTg3MjhfaW5pdChzb2NkZXYpOworCXJldCA9IHdtODcyOF9pbml0KHNvY2RldiwgU05EX1NPQ19JMkMpOwogCWlmIChyZXQgPCAwKQogCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXNlIFdNODcyOFxuIik7CiAKQEAgLTQzNyw3ICs0MDQsNyBAQAogCiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKIAotCXJldCA9IHdtODcyOF9pbml0KHNvY2Rldik7CisJcmV0ID0gd204NzI4X2luaXQoc29jZGV2LCBTTkRfU09DX1NQSSk7CiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpc2UgV004NzI4XG4iKTsKIApAQCAtNDU4LDMwICs0MjUsNiBAQAogCS5wcm9iZQkJPSB3bTg3Mjhfc3BpX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204NzI4X3NwaV9yZW1vdmUpLAogfTsKLQotc3RhdGljIGludCB3bTg3Mjhfc3BpX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCi17Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB0OwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCXU4IG1zZ1syXTsKLQotCWlmIChsZW4gPD0gMCkKLQkJcmV0dXJuIDA7Ci0KLQltc2dbMF0gPSBkYXRhWzBdOwotCW1zZ1sxXSA9IGRhdGFbMV07Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOwotCi0JdC50eF9idWYgPSAmbXNnWzBdOwotCXQubGVuID0gbGVuOwotCi0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKLQlzcGlfc3luYyhzcGksICZtKTsKLQotCXJldHVybiBsZW47Ci19CiAjZW5kaWYgLyogQ09ORklHX1NQSV9NQVNURVIgKi8KIAogc3RhdGljIGludCB3bTg3MjhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTUwNiwxMyArNDQ5LDExIEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCiAJaWYgKHNldHVwLT5pMmNfYWRkcmVzcykgewotCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CiAJCXJldCA9IHdtODcyOF9hZGRfaTJjX2RldmljZShwZGV2LCBzZXR1cCk7CiAJfQogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKIAlpZiAoc2V0dXAtPnNwaSkgewotCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCl3bTg3Mjhfc3BpX3dyaXRlOwogCQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ3bTg3Mjhfc3BpX2RyaXZlcik7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIHNwaSBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCmluZGV4IDdhMjA1ODcuLmQzZmQ0ZjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogCiAjaW5jbHVkZSAid204NzMxLmgiCiAKQEAgLTM5LDkgKzQwLDYgQEAKIAl1bnNpZ25lZCBpbnQgc3lzY2xrOwogfTsKIAotI2lmZGVmIENPTkZJR19TUElfTUFTVEVSCi1zdGF0aWMgaW50IHdtODczMV9zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbik7Ci0jZW5kaWYKIAogLyoKICAqIHdtODczMSByZWdpc3RlciBjYWNoZQpAQCAtNTAsNjAgKzQ4LDEyIEBACiAgKiBUaGVyZSBpcyBubyBwb2ludCBpbiBjYWNoaW5nIHRoZSByZXNldCByZWdpc3RlcgogICovCiBzdGF0aWMgY29uc3QgdTE2IHdtODczMV9yZWdbV004NzMxX0NBQ0hFUkVHTlVNXSA9IHsKLSAgICAweDAwOTcsIDB4MDA5NywgMHgwMDc5LCAweDAwNzksCi0gICAgMHgwMDBhLCAweDAwMDgsIDB4MDA5ZiwgMHgwMDBhLAotICAgIDB4MDAwMCwgMHgwMDAwCisJMHgwMDk3LCAweDAwOTcsIDB4MDA3OSwgMHgwMDc5LAorCTB4MDAwYSwgMHgwMDA4LCAweDAwOWYsIDB4MDAwYSwKKwkweDAwMDAsIDB4MDAwMAogfTsKIAotLyoKLSAqIHJlYWQgd204NzMxIHJlZ2lzdGVyIGNhY2hlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdtODczMV9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdW5zaWduZWQgaW50IHJlZykKLXsKLQl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlpZiAocmVnID09IFdNODczMV9SRVNFVCkKLQkJcmV0dXJuIDA7Ci0JaWYgKHJlZyA+PSBXTTg3MzFfQ0FDSEVSRUdOVU0pCi0JCXJldHVybiAtMTsKLQlyZXR1cm4gY2FjaGVbcmVnXTsKLX0KLQotLyoKLSAqIHdyaXRlIHdtODczMSByZWdpc3RlciBjYWNoZQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgd204NzMxX3dyaXRlX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdTE2IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQotewotCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCWlmIChyZWcgPj0gV004NzMxX0NBQ0hFUkVHTlVNKQotCQlyZXR1cm47Ci0JY2FjaGVbcmVnXSA9IHZhbHVlOwotfQotCi0vKgotICogd3JpdGUgdG8gdGhlIFdNODczMSByZWdpc3RlciBzcGFjZQotICovCi1zdGF0aWMgaW50IHdtODczMV93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCi0JdW5zaWduZWQgaW50IHZhbHVlKQotewotCXU4IGRhdGFbMl07Ci0KLQkvKiBkYXRhIGlzCi0JICogICBEMTUuLkQ5IFdNODczMSByZWdpc3RlciBvZmZzZXQKLQkgKiAgIEQ4Li4uRDAgcmVnaXN0ZXIgZGF0YQotCSAqLwotCWRhdGFbMF0gPSAocmVnIDw8IDEpIHwgKCh2YWx1ZSA+PiA4KSAmIDB4MDAwMSk7Ci0JZGF0YVsxXSA9IHZhbHVlICYgMHgwMGZmOwotCi0Jd204NzMxX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgcmVnLCB2YWx1ZSk7Ci0JaWYgKGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKSA9PSAyKQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiAtRUlPOwotfQotCi0jZGVmaW5lIHdtODczMV9yZXNldChjKQl3bTg3MzFfd3JpdGUoYywgV004NzMxX1JFU0VULCAwKQorI2RlZmluZSB3bTg3MzFfcmVzZXQoYykJc25kX3NvY193cml0ZShjLCBXTTg3MzFfUkVTRVQsIDApCiAKIHN0YXRpYyBjb25zdCBjaGFyICp3bTg3MzFfaW5wdXRfc2VsZWN0W10gPSB7IkxpbmUgSW4iLCAiTWljIn07CiBzdGF0aWMgY29uc3QgY2hhciAqd204NzMxX2RlZW1waFtdID0geyJOb25lIiwgIjMyS2h6IiwgIjQ0LjFLaHoiLCAiNDhLaHoifTsKQEAgLTExMywyMCArNjMsMjYgQEAKIAlTT0NfRU5VTV9TSU5HTEUoV004NzMxX0FQRElHSSwgMSwgNCwgd204NzMxX2RlZW1waCksCiB9OwogCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoaW5fdGx2LCAtMzQ1MCwgMTUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShzaWRldG9uZV90bHYsIC0xNTAwLCAzMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG91dF90bHYsIC0xMjEwMCwgMTAwLCAxKTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODczMV9zbmRfY29udHJvbHNbXSA9IHsKIAotU09DX0RPVUJMRV9SKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgV004NzMxX0xPVVQxViwgV004NzMxX1JPVVQxViwKLQkwLCAxMjcsIDApLAorU09DX0RPVUJMRV9SX1RMVigiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIFdNODczMV9MT1VUMVYsIFdNODczMV9ST1VUMVYsCisJCSAwLCAxMjcsIDAsIG91dF90bHYpLAogU09DX0RPVUJMRV9SKCJNYXN0ZXIgUGxheWJhY2sgWkMgU3dpdGNoIiwgV004NzMxX0xPVVQxViwgV004NzMxX1JPVVQxViwKIAk3LCAxLCAwKSwKIAotU09DX0RPVUJMRV9SKCJDYXB0dXJlIFZvbHVtZSIsIFdNODczMV9MSU5WT0wsIFdNODczMV9SSU5WT0wsIDAsIDMxLCAwKSwKK1NPQ19ET1VCTEVfUl9UTFYoIkNhcHR1cmUgVm9sdW1lIiwgV004NzMxX0xJTlZPTCwgV004NzMxX1JJTlZPTCwgMCwgMzEsIDAsCisJCSBpbl90bHYpLAogU09DX0RPVUJMRV9SKCJMaW5lIENhcHR1cmUgU3dpdGNoIiwgV004NzMxX0xJTlZPTCwgV004NzMxX1JJTlZPTCwgNywgMSwgMSksCiAKIFNPQ19TSU5HTEUoIk1pYyBCb29zdCAoKzIwZEIpIiwgV004NzMxX0FQQU5BLCAwLCAxLCAwKSwKLVNPQ19TSU5HTEUoIkNhcHR1cmUgTWljIFN3aXRjaCIsIFdNODczMV9BUEFOQSwgMSwgMSwgMSksCitTT0NfU0lOR0xFKCJNaWMgQ2FwdHVyZSBTd2l0Y2giLCBXTTg3MzFfQVBBTkEsIDEsIDEsIDEpLAogCi1TT0NfU0lOR0xFKCJTaWRldG9uZSBQbGF5YmFjayBWb2x1bWUiLCBXTTg3MzFfQVBBTkEsIDYsIDMsIDEpLAorU09DX1NJTkdMRV9UTFYoIlNpZGV0b25lIFBsYXliYWNrIFZvbHVtZSIsIFdNODczMV9BUEFOQSwgNiwgMywgMSwKKwkgICAgICAgc2lkZXRvbmVfdGx2KSwKIAogU09DX1NJTkdMRSgiQURDIEhpZ2ggUGFzcyBGaWx0ZXIgU3dpdGNoIiwgV004NzMxX0FQRElHSSwgMCwgMSwgMSksCiBTT0NfU0lOR0xFKCJTdG9yZSBEQyBPZmZzZXQgU3dpdGNoIiwgV004NzMxX0FQRElHSSwgNCwgMSwgMCksCkBAIC0yNjAsMTIgKzIxNiwxMiBAQAogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7Ci0JdTE2IGlmYWNlID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfSUZBQ0UpICYgMHhmZmYzOworCXUxNiBpZmFjZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NzMxX0lGQUNFKSAmIDB4ZmZmMzsKIAlpbnQgaSA9IGdldF9jb2VmZih3bTg3MzEtPnN5c2NsaywgcGFyYW1zX3JhdGUocGFyYW1zKSk7CiAJdTE2IHNyYXRlID0gKGNvZWZmX2RpdltpXS5zciA8PCAyKSB8CiAJCShjb2VmZl9kaXZbaV0uYm9zciA8PCAxKSB8IGNvZWZmX2RpdltpXS51c2I7CiAKLQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9TUkFURSwgc3JhdGUpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODczMV9TUkFURSwgc3JhdGUpOwogCiAJLyogYml0IHNpemUgKi8KIAlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewpAQCAtMjc5LDcgKzIzNSw3IEBACiAJCWJyZWFrOwogCX0KIAotCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0lGQUNFLCBpZmFjZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004NzMxX0lGQUNFLCBpZmFjZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5MSw3ICsyNDcsNyBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBzZXQgYWN0aXZlICovCi0Jd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfQUNUSVZFLCAweDAwMDEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODczMV9BQ1RJVkUsIDB4MDAwMSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMwNiwxOSArMjYyLDE5IEBACiAJLyogZGVhY3RpdmF0ZSAqLwogCWlmICghY29kZWMtPmFjdGl2ZSkgewogCQl1ZGVsYXkoNTApOwotCQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9BQ1RJVkUsIDB4MCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODczMV9BQ1RJVkUsIDB4MCk7CiAJfQogfQogCiBzdGF0aWMgaW50IHdtODczMV9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwotCXUxNiBtdXRlX3JlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX0FQRElHSSkgJiAweGZmZjc7CisJdTE2IG11dGVfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3MzFfQVBESUdJKSAmIDB4ZmZmNzsKIAogCWlmIChtdXRlKQotCQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9BUERJR0ksIG11dGVfcmVnIHwgMHg4KTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NzMxX0FQRElHSSwgbXV0ZV9yZWcgfCAweDgpOwogCWVsc2UKLQkJd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfQVBESUdJLCBtdXRlX3JlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODczMV9BUERJR0ksIG11dGVfcmVnKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzk2LDcgKzM1Miw3IEBACiAJfQogCiAJLyogc2V0IGlmYWNlICovCi0Jd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfSUZBQ0UsIGlmYWNlKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3MzFfSUZBQ0UsIGlmYWNlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDEyLDEyICszNjgsMTIgQEAKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKIAkJLyogQ2xlYXIgUFdST0ZGLCBnYXRlIENMS09VVCwgZXZlcnl0aGluZyBlbHNlIGFzLWlzICovCi0JCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX1BXUikgJiAweGZmN2Y7Ci0JCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX1BXUiwgcmVnIHwgMHgwMDQwKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3MzFfUFdSKSAmIDB4ZmY3ZjsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NzMxX1BXUiwgcmVnIHwgMHgwMDQwKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgotCQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9BQ1RJVkUsIDB4MCk7Ci0JCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX1BXUiwgMHhmZmZmKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NzMxX0FDVElWRSwgMHgwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NzMxX1BXUiwgMHhmZmZmKTsKIAkJYnJlYWs7CiAJfQogCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CkBAIC00NTcsMTUgKzQxMywxNyBAQAogCQkucmF0ZXMgPSBXTTg3MzFfUkFURVMsCiAJCS5mb3JtYXRzID0gV004NzMxX0ZPUk1BVFMsfSwKIAkub3BzID0gJndtODczMV9kYWlfb3BzLAorCS5zeW1tZXRyaWNfcmF0ZXMgPSAxLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHdtODczMV9kYWkpOwogCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHdtODczMV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKLQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9BQ1RJVkUsIDB4MCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004NzMxX0FDVElWRSwgMHgwKTsKIAl3bTg3MzFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXJldHVybiAwOwogfQpAQCAtNDg4LDYgKzQ0NiwxMCBAQAogCXdtODczMV9zZXRfYmlhc19sZXZlbChjb2RlYywgY29kZWMtPnN1c3BlbmRfYmlhc19sZXZlbCk7CiAJcmV0dXJuIDA7CiB9CisjZWxzZQorI2RlZmluZSB3bTg3MzFfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODczMV9yZXN1bWUgTlVMTAorI2VuZGlmCiAKIHN0YXRpYyBpbnQgd204NzMxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CkBAIC01NDcsMTUgKzUwOSwxNiBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204NzMxKTsKIAotc3RhdGljIGludCB3bTg3MzFfcmVnaXN0ZXIoc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzEpCitzdGF0aWMgaW50IHdtODczMV9yZWdpc3RlcihzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMSwKKwkJCSAgIGVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbCkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg3MzEtPmNvZGVjOwotCXUxNiByZWc7CiAKIAlpZiAod204NzMxX2NvZGVjKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkFub3RoZXIgV004NzMxIGlzIHJlZ2lzdGVyZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CiAJfQogCiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKQEAgLTU2NSw4ICs1MjgsNiBAQAogCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg3MzE7CiAJY29kZWMtPm5hbWUgPSAiV004NzMxIjsKIAljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+cmVhZCA9IHdtODczMV9yZWFkX3JlZ19jYWNoZTsKLQljb2RlYy0+d3JpdGUgPSB3bTg3MzFfd3JpdGU7CiAJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOwogCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODczMV9zZXRfYmlhc19sZXZlbDsKIAljb2RlYy0+ZGFpID0gJndtODczMV9kYWk7CkBAIC01NzYsMTAgKzUzNywxNiBAQAogCiAJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODczMV9yZWcsIHNpemVvZih3bTg3MzFfcmVnKSk7CiAKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgNywgOSwgY29udHJvbCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKIAlyZXQgPSB3bTg3MzFfcmVzZXQoY29kZWMpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBpc3N1ZSByZXNldFxuIik7Ci0JCXJldHVybiByZXQ7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBpc3N1ZSByZXNldDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOwogCX0KIAogCXdtODczMV9kYWkuZGV2ID0gY29kZWMtPmRldjsKQEAgLTU4NywzNSArNTU0LDM2IEBACiAJd204NzMxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKIAkvKiBMYXRjaCB0aGUgdXBkYXRlIGJpdHMgKi8KLQlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9MT1VUMVYpOwotCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0xPVVQxViwgcmVnICYgfjB4MDEwMCk7Ci0JcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfUk9VVDFWKTsKLQl3bTg3MzFfd3JpdGUoY29kZWMsIFdNODczMV9ST1VUMVYsIHJlZyAmIH4weDAxMDApOwotCXJlZyA9IHdtODczMV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzMxX0xJTlZPTCk7Ci0Jd204NzMxX3dyaXRlKGNvZGVjLCBXTTg3MzFfTElOVk9MLCByZWcgJiB+MHgwMTAwKTsKLQlyZWcgPSB3bTg3MzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODczMV9SSU5WT0wpOwotCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX1JJTlZPTCwgcmVnICYgfjB4MDEwMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzMxX0xPVVQxViwgMHgxMDAsIDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODczMV9ST1VUMVYsIDB4MTAwLCAwKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3MzFfTElOVk9MLCAweDEwMCwgMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004NzMxX1JJTlZPTCwgMHgxMDAsIDApOwogCiAJLyogRGlzYWJsZSBieXBhc3MgcGF0aCBieSBkZWZhdWx0ICovCi0JcmVnID0gd204NzMxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3MzFfQVBBTkEpOwotCXdtODczMV93cml0ZShjb2RlYywgV004NzMxX0FQQU5BLCByZWcgJiB+MHg0KTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3MzFfQVBBTkEsIDB4NCwgMCk7CiAKIAl3bTg3MzFfY29kZWMgPSBjb2RlYzsKIAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOwogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycjsKIAl9CiAKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204NzMxX2RhaSk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOwogCQlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycl9jb2RlYzsKIAl9CiAKIAlyZXR1cm4gMDsKKworZXJyX2NvZGVjOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CitlcnI6CisJa2ZyZWUod204NzMxKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCB3bTg3MzFfdW5yZWdpc3RlcihzdHJ1Y3Qgd204NzMxX3ByaXYgKndtODczMSkKQEAgLTYyOCwzMCArNTk2LDYgQEAKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi1zdGF0aWMgaW50IHdtODczMV9zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0JdTggbXNnWzJdOwotCi0JaWYgKGxlbiA8PSAwKQotCQlyZXR1cm4gMDsKLQotCW1zZ1swXSA9IGRhdGFbMF07Ci0JbXNnWzFdID0gZGF0YVsxXTsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCW1lbXNldCgmdCwgMCwgKHNpemVvZiB0KSk7Ci0KLQl0LnR4X2J1ZiA9ICZtc2dbMF07Ci0JdC5sZW4gPSBsZW47Ci0KLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwotCXNwaV9zeW5jKHNwaSwgJm0pOwotCi0JcmV0dXJuIGxlbjsKLX0KLQogc3RhdGljIGludCBfX2RldmluaXQgd204NzMxX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKQEAgLTY2MywxMiArNjA3LDExIEBACiAKIAljb2RlYyA9ICZ3bTg3MzEtPmNvZGVjOwogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7Ci0JY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3Qpd204NzMxX3NwaV93cml0ZTsKIAljb2RlYy0+ZGV2ID0gJnNwaS0+ZGV2OwogCiAJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgd204NzMxKTsKIAotCXJldHVybiB3bTg3MzFfcmVnaXN0ZXIod204NzMxKTsKKwlyZXR1cm4gd204NzMxX3JlZ2lzdGVyKHdtODczMSwgU05EX1NPQ19TUEkpOwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg3MzFfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQpAQCAtNjgwLDYgKzYyMywyMSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODczMV9zcGlfc3VzcGVuZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXJldHVybiBzbmRfc29jX3N1c3BlbmRfZGV2aWNlKCZzcGktPmRldik7Cit9CisKK3N0YXRpYyBpbnQgd204NzMxX3NwaV9yZXN1bWUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlyZXR1cm4gc25kX3NvY19yZXN1bWVfZGV2aWNlKCZzcGktPmRldik7Cit9CisjZWxzZQorI2RlZmluZSB3bTg3MzFfc3BpX3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTg3MzFfc3BpX3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdtODczMV9zcGlfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gIndtODczMSIsCkBAIC02ODcsNiArNjQ1LDggQEAKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUJCT0gd204NzMxX3NwaV9wcm9iZSwKKwkuc3VzcGVuZAk9IHdtODczMV9zcGlfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHdtODczMV9zcGlfcmVzdW1lLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204NzMxX3NwaV9yZW1vdmUpLAogfTsKICNlbmRpZiAvKiBDT05GSUdfU1BJX01BU1RFUiAqLwpAQCAtNzAzLDE0ICs2NjMsMTMgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAljb2RlYyA9ICZ3bTg3MzEtPmNvZGVjOwotCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODczMSk7CiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKIAogCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CiAKLQlyZXR1cm4gd204NzMxX3JlZ2lzdGVyKHdtODczMSk7CisJcmV0dXJuIHdtODczMV9yZWdpc3Rlcih3bTg3MzEsIFNORF9TT0NfSTJDKTsKIH0KIAogc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204NzMxX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKQEAgLTcyMCw2ICs2NzksMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB3bTg3MzFfaTJjX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmkyYywgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlyZXR1cm4gc25kX3NvY19zdXNwZW5kX2RldmljZSgmaTJjLT5kZXYpOworfQorCitzdGF0aWMgaW50IHdtODczMV9pMmNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJcmV0dXJuIHNuZF9zb2NfcmVzdW1lX2RldmljZSgmaTJjLT5kZXYpOworfQorI2Vsc2UKKyNkZWZpbmUgd204NzMxX2kyY19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204NzMxX2kyY19yZXN1bWUgTlVMTAorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg3MzFfaTJjX2lkW10gPSB7CiAJeyAid204NzMxIiwgMCB9LAogCXsgfQpAQCAtNzMzLDYgKzcwNyw4IEBACiAJfSwKIAkucHJvYmUgPSAgICB3bTg3MzFfaTJjX3Byb2JlLAogCS5yZW1vdmUgPSAgIF9fZGV2ZXhpdF9wKHdtODczMV9pMmNfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9ICB3bTg3MzFfaTJjX3N1c3BlbmQsCisJLnJlc3VtZSA9ICAgd204NzMxX2kyY19yZXN1bWUsCiAJLmlkX3RhYmxlID0gd204NzMxX2kyY19pZCwKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jCmluZGV4IGI2NDUwOWIuLjRiYTFlN2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYwpAQCAtNTUsNTAgKzU1LDcgQEAKIAkweDAwNzksIDB4MDA3OSwgMHgwMDc5LCAgICAgICAgICAvKiA0MCAqLwogfTsKIAotLyoKLSAqIHJlYWQgd204NzUwIHJlZ2lzdGVyIGNhY2hlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdtODc1MF9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdW5zaWduZWQgaW50IHJlZykKLXsKLQl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlpZiAocmVnID4gV004NzUwX0NBQ0hFX1JFR05VTSkKLQkJcmV0dXJuIC0xOwotCXJldHVybiBjYWNoZVtyZWddOwotfQotCi0vKgotICogd3JpdGUgd204NzUwIHJlZ2lzdGVyIGNhY2hlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB3bTg3NTBfd3JpdGVfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQl1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JaWYgKHJlZyA+IFdNODc1MF9DQUNIRV9SRUdOVU0pCi0JCXJldHVybjsKLQljYWNoZVtyZWddID0gdmFsdWU7Ci19Ci0KLXN0YXRpYyBpbnQgd204NzUwX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKLQl1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTggZGF0YVsyXTsKLQotCS8qIGRhdGEgaXMKLQkgKiAgIEQxNS4uRDkgV004NzUzIHJlZ2lzdGVyIG9mZnNldAotCSAqICAgRDguLi5EMCByZWdpc3RlciBkYXRhCi0JICovCi0JZGF0YVswXSA9IChyZWcgPDwgMSkgfCAoKHZhbHVlID4+IDgpICYgMHgwMDAxKTsKLQlkYXRhWzFdID0gdmFsdWUgJiAweDAwZmY7Ci0KLQl3bTg3NTBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCByZWcsIHZhbHVlKTsKLQlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpID09IDIpCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIC1FSU87Ci19Ci0KLSNkZWZpbmUgd204NzUwX3Jlc2V0KGMpCXdtODc1MF93cml0ZShjLCBXTTg3NTBfUkVTRVQsIDApCisjZGVmaW5lIHdtODc1MF9yZXNldChjKQlzbmRfc29jX3dyaXRlKGMsIFdNODc1MF9SRVNFVCwgMCkKIAogLyoKICAqIFdNODc1MCBDb250cm9scwpAQCAtNTk0LDcgKzU1MSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXdtODc1MF93cml0ZShjb2RlYywgV004NzUwX0lGQUNFLCBpZmFjZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004NzUwX0lGQUNFLCBpZmFjZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYwNiw4ICs1NjMsOCBAQAogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204NzUwX3ByaXYgKndtODc1MCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7Ci0JdTE2IGlmYWNlID0gd204NzUwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTBfSUZBQ0UpICYgMHgxZjM7Ci0JdTE2IHNyYXRlID0gd204NzUwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTBfU1JBVEUpICYgMHgxYzA7CisJdTE2IGlmYWNlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3NTBfSUZBQ0UpICYgMHgxZjM7CisJdTE2IHNyYXRlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3NTBfU1JBVEUpICYgMHgxYzA7CiAJaW50IGNvZWZmID0gZ2V0X2NvZWZmKHdtODc1MC0+c3lzY2xrLCBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKIAogCS8qIGJpdCBzaXplICovCkBAIC02MjYsOSArNTgzLDkgQEAKIAl9CiAKIAkvKiBzZXQgaWZhY2UgJiBzcmF0ZSAqLwotCXdtODc1MF93cml0ZShjb2RlYywgV004NzUwX0lGQUNFLCBpZmFjZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004NzUwX0lGQUNFLCBpZmFjZSk7CiAJaWYgKGNvZWZmID49IDApCi0JCXdtODc1MF93cml0ZShjb2RlYywgV004NzUwX1NSQVRFLCBzcmF0ZSB8CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODc1MF9TUkFURSwgc3JhdGUgfAogCQkJKGNvZWZmX2Rpdltjb2VmZl0uc3IgPDwgMSkgfCBjb2VmZl9kaXZbY29lZmZdLnVzYik7CiAKIAlyZXR1cm4gMDsKQEAgLTYzNywzNSArNTk0LDM1IEBACiBzdGF0aWMgaW50IHdtODc1MF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwotCXUxNiBtdXRlX3JlZyA9IHdtODc1MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUwX0FEQ0RBQykgJiAweGZmZjc7CisJdTE2IG11dGVfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3NTBfQURDREFDKSAmIDB4ZmZmNzsKIAogCWlmIChtdXRlKQotCQl3bTg3NTBfd3JpdGUoY29kZWMsIFdNODc1MF9BRENEQUMsIG11dGVfcmVnIHwgMHg4KTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NzUwX0FEQ0RBQywgbXV0ZV9yZWcgfCAweDgpOwogCWVsc2UKLQkJd204NzUwX3dyaXRlKGNvZGVjLCBXTTg3NTBfQURDREFDLCBtdXRlX3JlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODc1MF9BRENEQUMsIG11dGVfcmVnKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB3bTg3NTBfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKLQl1MTYgcHdyX3JlZyA9IHdtODc1MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUwX1BXUjEpICYgMHhmZTNlOworCXUxNiBwd3JfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3NTBfUFdSMSkgJiAweGZlM2U7CiAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046CiAJCS8qIHNldCB2bWlkIHRvIDUwayBhbmQgdW5tdXRlIGRhYyAqLwotCQl3bTg3NTBfd3JpdGUoY29kZWMsIFdNODc1MF9QV1IxLCBwd3JfcmVnIHwgMHgwMGMwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NzUwX1BXUjEsIHB3cl9yZWcgfCAweDAwYzApOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgogCQkvKiBzZXQgdm1pZCB0byA1ayBmb3IgcXVpY2sgcG93ZXIgdXAgKi8KLQkJd204NzUwX3dyaXRlKGNvZGVjLCBXTTg3NTBfUFdSMSwgcHdyX3JlZyB8IDB4MDFjMSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODc1MF9QV1IxLCBwd3JfcmVnIHwgMHgwMWMxKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKIAkJLyogbXV0ZSBkYWMgYW5kIHNldCB2bWlkIHRvIDUwMGssIGVuYWJsZSBWUkVGICovCi0JCXdtODc1MF93cml0ZShjb2RlYywgV004NzUwX1BXUjEsIHB3cl9yZWcgfCAweDAxNDEpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3NTBfUFdSMSwgcHdyX3JlZyB8IDB4MDE0MSk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJd204NzUwX3dyaXRlKGNvZGVjLCBXTTg3NTBfUFdSMSwgMHgwMDAxKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004NzUwX1BXUjEsIDB4MDAwMSk7CiAJCWJyZWFrOwogCX0KIAljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOwpAQCAtNzU0LDE1ICs3MTEsMTQgQEAKICAqIGluaXRpYWxpc2UgdGhlIFdNODc1MCBkcml2ZXIKICAqIHJlZ2lzdGVyIHRoZSBtaXhlciBhbmQgZHNwIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsCiAgKi8KLXN0YXRpYyBpbnQgd204NzUwX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpCitzdGF0aWMgaW50IHdtODc1MF9pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2LAorCQkgICAgICAgZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJaW50IHJlZywgcmV0ID0gMDsKIAogCWNvZGVjLT5uYW1lID0gIldNODc1MCI7CiAJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29kZWMtPnJlYWQgPSB3bTg3NTBfcmVhZF9yZWdfY2FjaGU7Ci0JY29kZWMtPndyaXRlID0gd204NzUwX3dyaXRlOwogCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODc1MF9zZXRfYmlhc19sZXZlbDsKIAljb2RlYy0+ZGFpID0gJndtODc1MF9kYWk7CiAJY29kZWMtPm51bV9kYWkgPSAxOwpAQCAtNzcxLDEzICs3MjcsMjMgQEAKIAlpZiAoY29kZWMtPnJlZ19jYWNoZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXdtODc1MF9yZXNldChjb2RlYyk7CisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDcsIDksIGNvbnRyb2wpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAid204NzUwOiBmYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHdtODc1MF9yZXNldChjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ3bTg3NTA6IGZhaWxlZCB0byByZXNldDogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KIAogCS8qIHJlZ2lzdGVyIHBjbXMgKi8KIAlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAid204NzUwOiBmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOwotCQlnb3RvIHBjbV9lcnI7CisJCWdvdG8gZXJyOwogCX0KIAogCS8qIGNoYXJnZSBvdXRwdXQgY2FwcyAqLwpAQCAtNzg2LDIyICs3NTIsMjIgQEAKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNvZGVjLT5kZWxheWVkX3dvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwogCiAJLyogc2V0IHRoZSB1cGRhdGUgYml0cyAqLwotCXJlZyA9IHdtODc1MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004NzUwX0xEQUMpOwotCXdtODc1MF93cml0ZShjb2RlYywgV004NzUwX0xEQUMsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204NzUwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg3NTBfUkRBQyk7Ci0Jd204NzUwX3dyaXRlKGNvZGVjLCBXTTg3NTBfUkRBQywgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1MF9MT1VUMVYpOwotCXdtODc1MF93cml0ZShjb2RlYywgV004NzUwX0xPVVQxViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1MF9ST1VUMVYpOwotCXdtODc1MF93cml0ZShjb2RlYywgV004NzUwX1JPVVQxViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1MF9MT1VUMlYpOwotCXdtODc1MF93cml0ZShjb2RlYywgV004NzUwX0xPVVQyViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1MF9ST1VUMlYpOwotCXdtODc1MF93cml0ZShjb2RlYywgV004NzUwX1JPVVQyViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1MF9MSU5WT0wpOwotCXdtODc1MF93cml0ZShjb2RlYywgV004NzUwX0xJTlZPTCwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg3NTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODc1MF9SSU5WT0wpOwotCXdtODc1MF93cml0ZShjb2RlYywgV004NzUwX1JJTlZPTCwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODc1MF9MREFDKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3NTBfTERBQywgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODc1MF9SREFDKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3NTBfUkRBQywgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODc1MF9MT1VUMVYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODc1MF9MT1VUMVYsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3NTBfUk9VVDFWKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3NTBfUk9VVDFWLCByZWcgfCAweDAxMDApOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NzUwX0xPVVQyVik7CisJc25kX3NvY193cml0ZShjb2RlYywgV004NzUwX0xPVVQyViwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODc1MF9ST1VUMlYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODc1MF9ST1VUMlYsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg3NTBfTElOVk9MKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3NTBfTElOVk9MLCByZWcgfCAweDAxMDApOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NzUwX1JJTlZPTCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004NzUwX1JJTlZPTCwgcmVnIHwgMHgwMTAwKTsKIAogCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3NTBfc25kX2NvbnRyb2xzLAogCQkJCUFSUkFZX1NJWkUod204NzUwX3NuZF9jb250cm9scykpOwpAQCAtODE2LDcgKzc4Miw3IEBACiBjYXJkX2VycjoKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7Ci1wY21fZXJyOgorZXJyOgogCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwogCXJldHVybiByZXQ7CiB9CkBAIC04NDQsNyArODEwLDcgQEAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKIAotCXJldCA9IHdtODc1MF9pbml0KHNvY2Rldik7CisJcmV0ID0gd204NzUwX2luaXQoc29jZGV2LCBTTkRfU09DX0kyQyk7CiAJaWYgKHJldCA8IDApCiAJCXByX2VycigiZmFpbGVkIHRvIGluaXRpYWxpc2UgV004NzUwXG4iKTsKIApAQCAtOTI0LDcgKzg5MCw3IEBACiAKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOwogCi0JcmV0ID0gd204NzUwX2luaXQoc29jZGV2KTsKKwlyZXQgPSB3bTg3NTBfaW5pdChzb2NkZXYsIFNORF9TT0NfU1BJKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGlzZSBXTTg3NTBcbiIpOwogCkBAIC05NDUsMzAgKzkxMSw2IEBACiAJLnByb2JlCQk9IHdtODc1MF9zcGlfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bTg3NTBfc3BpX3JlbW92ZSksCiB9OwotCi1zdGF0aWMgaW50IHdtODc1MF9zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0JdTggbXNnWzJdOwotCi0JaWYgKGxlbiA8PSAwKQotCQlyZXR1cm4gMDsKLQotCW1zZ1swXSA9IGRhdGFbMF07Ci0JbXNnWzFdID0gZGF0YVsxXTsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCW1lbXNldCgmdCwgMCwgKHNpemVvZiB0KSk7Ci0KLQl0LnR4X2J1ZiA9ICZtc2dbMF07Ci0JdC5sZW4gPSBsZW47Ci0KLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwotCXNwaV9zeW5jKHNwaSwgJm0pOwotCi0JcmV0dXJuIGxlbjsKLX0KICNlbmRpZgogCiBzdGF0aWMgaW50IHdtODc1MF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMTAwMiwxMyArOTQ0LDExIEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCiAJaWYgKHNldHVwLT5pMmNfYWRkcmVzcykgewotCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CiAJCXJldCA9IHdtODc1MF9hZGRfaTJjX2RldmljZShwZGV2LCBzZXR1cCk7CiAJfQogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKIAlpZiAoc2V0dXAtPnNwaSkgewotCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCl3bTg3NTBfc3BpX3dyaXRlOwogCQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ3bTg3NTBfc3BpX2RyaXZlcik7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIHNwaSBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCmluZGV4IDQ5YzRiMjguLmQ4MGQ0MTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwpAQCAtMTc2Niw2ICsxNzY2LDIxIEBACiAgICAgICAgIHJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODc1M19pMmNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXJldHVybiBzbmRfc29jX3N1c3BlbmRfZGV2aWNlKCZjbGllbnQtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgd204NzUzX2kyY19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gc25kX3NvY19yZXN1bWVfZGV2aWNlKCZjbGllbnQtPmRldik7Cit9CisjZWxzZQorI2RlZmluZSB3bTg3NTNfaTJjX3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTg3NTNfaTJjX3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODc1M19pMmNfaWRbXSA9IHsKIAl7ICJ3bTg3NTMiLCAwIH0sCiAJeyB9CkBAIC0xNzc5LDYgKzE3OTQsOCBAQAogCX0sCiAJLnByb2JlID0gICAgd204NzUzX2kyY19wcm9iZSwKIAkucmVtb3ZlID0gICB3bTg3NTNfaTJjX3JlbW92ZSwKKwkuc3VzcGVuZCA9ICB3bTg3NTNfaTJjX3N1c3BlbmQsCisJLnJlc3VtZSA9ICAgd204NzUzX2kyY19yZXN1bWUsCiAJLmlkX3RhYmxlID0gd204NzUzX2kyY19pZCwKIH07CiAjZW5kaWYKQEAgLTE4MzQsNiArMTg1MSwyMiBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODc1M19zcGlfc3VzcGVuZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXJldHVybiBzbmRfc29jX3N1c3BlbmRfZGV2aWNlKCZzcGktPmRldik7Cit9CisKK3N0YXRpYyBpbnQgd204NzUzX3NwaV9yZXN1bWUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlyZXR1cm4gc25kX3NvY19yZXN1bWVfZGV2aWNlKCZzcGktPmRldik7Cit9CisKKyNlbHNlCisjZGVmaW5lIHdtODc1M19zcGlfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODc1M19zcGlfcmVzdW1lIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgd204NzUzX3NwaV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSAid204NzUzIiwKQEAgLTE4NDIsNiArMTg3NSw4IEBACiAJfSwKIAkucHJvYmUJCT0gd204NzUzX3NwaV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdtODc1M19zcGlfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IHdtODc1M19zcGlfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHdtODc1M19zcGlfcmVzdW1lLAogfTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc3Ni5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NzYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTgyOWFhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NzYuYwpAQCAtMCwwICsxLDc0NCBAQAorLyoKKyAqIHdtODc3Ni5jICAtLSAgV004Nzc2IEFMU0EgU29DIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVE9ETzogSW5wdXQgQUxDL2xpbWl0ZXIgc3VwcG9ydAorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlICJ3bTg3NzYuaCIKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjICp3bTg3NzZfY29kZWM7CitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg3NzY7CisKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHdtODc3Nl9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW1dNODc3Nl9DQUNIRVJFR05VTV07CisJaW50IHN5c2Nsa1syXTsKK307CisKKyNpZmRlZiBDT05GSUdfU1BJX01BU1RFUgorc3RhdGljIGludCB3bTg3NzZfc3BpX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pOworI2VuZGlmCisKK3N0YXRpYyBjb25zdCB1MTYgd204Nzc2X3JlZ1tXTTg3NzZfQ0FDSEVSRUdOVU1dID0geworCTB4NzksIDB4NzksIDB4NzksIDB4ZmYsIDB4ZmYsICAvKiA0ICovCisJMHhmZiwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgIC8qIDkgKi8KKwkweDIyLCAweDIyLCAweDIyLCAweDA4LCAweGNmLCAgLyogMTQgKi8KKwkweGNmLCAweDdiLCAweDAwLCAweDMyLCAweDAwLCAgLyogMTkgKi8KKwkweGE2LCAweDAxLCAweDAxCit9OworCitzdGF0aWMgaW50IHdtODc3Nl9yZXNldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODc3Nl9SRVNFVCwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShocF90bHYsIC0xMjEwMCwgMTAwLCAxKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYWNfdGx2LCAtMTI3NTAsIDUwLCAxKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShhZGNfdGx2LCAtMTAzNTAsIDUwLCAxKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODc3Nl9zbmRfY29udHJvbHNbXSA9IHsKK1NPQ19ET1VCTEVfUl9UTFYoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCBXTTg3NzZfSFBMVk9MLCBXTTg3NzZfSFBSVk9MLAorCQkgMCwgMTI3LCAwLCBocF90bHYpLAorU09DX0RPVUJMRV9SX1RMVigiRGlnaXRhbCBQbGF5YmFjayBWb2x1bWUiLCBXTTg3NzZfREFDTFZPTCwgV004Nzc2X0RBQ1JWT0wsCisJCSAwLCAyNTUsIDAsIGRhY190bHYpLAorU09DX1NJTkdMRSgiRGlnaXRhbCBQbGF5YmFjayBaQyBTd2l0Y2giLCBXTTg3NzZfREFDQ1RSTDEsIDAsIDEsIDApLAorCitTT0NfU0lOR0xFKCJEZWVtcGhhc2lzIFN3aXRjaCIsIFdNODc3Nl9EQUNDVFJMMiwgMCwgMSwgMCksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkNhcHR1cmUgVm9sdW1lIiwgV004Nzc2X0FEQ0xWT0wsIFdNODc3Nl9BRENSVk9MLAorCQkgMCwgMjU1LCAwLCBhZGNfdGx2KSwKK1NPQ19ET1VCTEUoIkNhcHR1cmUgU3dpdGNoIiwgV004Nzc2X0FEQ01VWCwgNywgNiwgMSwgMSksCitTT0NfRE9VQkxFX1IoIkNhcHR1cmUgWkMgU3dpdGNoIiwgV004Nzc2X0FEQ0xWT0wsIFdNODc3Nl9BRENSVk9MLCA4LCAxLCAwKSwKK1NPQ19TSU5HTEUoIkNhcHR1cmUgSFBGIFN3aXRjaCIsIFdNODc3Nl9BRENJRkNUUkwsIDgsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGlubWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkFJTjEgU3dpdGNoIiwgV004Nzc2X0FEQ01VWCwgMCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkFJTjIgU3dpdGNoIiwgV004Nzc2X0FEQ01VWCwgMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkFJTjMgU3dpdGNoIiwgV004Nzc2X0FEQ01VWCwgMiwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkFJTjQgU3dpdGNoIiwgV004Nzc2X0FEQ01VWCwgMywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkFJTjUgU3dpdGNoIiwgV004Nzc2X0FEQ01VWCwgNCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgb3V0bWl4X2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkRBQyBTd2l0Y2giLCBXTTg3NzZfT1VUTVVYLCAwLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQVVYIFN3aXRjaCIsIFdNODc3Nl9PVVRNVVgsIDEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJCeXBhc3MgU3dpdGNoIiwgV004Nzc2X09VVE1VWCwgMiwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204Nzc2X2RhcG1fd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX0lOUFVUKCJBVVgiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiQVVYIiksCisKK1NORF9TT0NfREFQTV9JTlBVVCgiQUlOMSIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJBSU4yIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkFJTjMiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiQUlONCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJBSU41IiksCisKK1NORF9TT0NfREFQTV9NSVhFUigiSW5wdXQgTWl4ZXIiLCBXTTg3NzZfUFdSRE9XTiwgNiwgMSwKKwkJICAgaW5taXhfY29udHJvbHMsIEFSUkFZX1NJWkUoaW5taXhfY29udHJvbHMpKSwKKworU05EX1NPQ19EQVBNX0FEQygiQURDIiwgIkNhcHR1cmUiLCBXTTg3NzZfUFdSRE9XTiwgMSwgMSksCitTTkRfU09DX0RBUE1fREFDKCJEQUMiLCAiUGxheWJhY2siLCBXTTg3NzZfUFdSRE9XTiwgMiwgMSksCisKK1NORF9TT0NfREFQTV9NSVhFUigiT3V0cHV0IE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBvdXRtaXhfY29udHJvbHMsIEFSUkFZX1NJWkUob3V0bWl4X2NvbnRyb2xzKSksCisKK1NORF9TT0NfREFQTV9QR0EoIkhlYWRwaG9uZSBQR0EiLCBXTTg3NzZfUFdSRE9XTiwgMywgMSwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9PVVRQVVQoIlZPVVQiKSwKKworU05EX1NPQ19EQVBNX09VVFBVVCgiSFBPVVRMIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9VVFIiKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHJvdXRlc1tdID0geworCXsgIklucHV0IE1peGVyIiwgIkFJTjEgU3dpdGNoIiwgIkFJTjEiIH0sCisJeyAiSW5wdXQgTWl4ZXIiLCAiQUlOMiBTd2l0Y2giLCAiQUlOMiIgfSwKKwl7ICJJbnB1dCBNaXhlciIsICJBSU4zIFN3aXRjaCIsICJBSU4zIiB9LAorCXsgIklucHV0IE1peGVyIiwgIkFJTjQgU3dpdGNoIiwgIkFJTjQiIH0sCisJeyAiSW5wdXQgTWl4ZXIiLCAiQUlONSBTd2l0Y2giLCAiQUlONSIgfSwKKworCXsgIkFEQyIsIE5VTEwsICJJbnB1dCBNaXhlciIgfSwKKworCXsgIk91dHB1dCBNaXhlciIsICJEQUMgU3dpdGNoIiwgIkRBQyIgfSwKKwl7ICJPdXRwdXQgTWl4ZXIiLCAiQVVYIFN3aXRjaCIsICJBVVgiIH0sCisJeyAiT3V0cHV0IE1peGVyIiwgIkJ5cGFzcyBTd2l0Y2giLCAiSW5wdXQgTWl4ZXIiIH0sCisKKwl7ICJWT1VUIiwgTlVMTCwgIk91dHB1dCBNaXhlciIgfSwKKworCXsgIkhlYWRwaG9uZSBQR0EiLCBOVUxMLCAiT3V0cHV0IE1peGVyIiB9LAorCisJeyAiSFBPVVRMIiwgTlVMTCwgIkhlYWRwaG9uZSBQR0EiIH0sCisJeyAiSFBPVVRSIiwgTlVMTCwgIkhlYWRwaG9uZSBQR0EiIH0sCit9OworCitzdGF0aWMgaW50IHdtODc3Nl9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJaW50IHJlZywgaWZhY2UsIG1hc3RlcjsKKworCXN3aXRjaCAoZGFpLT5pZCkgeworCWNhc2UgV004Nzc2X0RBSV9EQUM6CisJCXJlZyA9IFdNODc3Nl9EQUNJRkNUUkw7CisJCW1hc3RlciA9IDB4ODA7CisJCWJyZWFrOworCWNhc2UgV004Nzc2X0RBSV9BREM6CisJCXJlZyA9IFdNODc3Nl9BRENJRkNUUkw7CisJCW1hc3RlciA9IDB4MTAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZmFjZSA9IDA7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCW1hc3RlciA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJaWZhY2UgfD0gMHgwMDAyOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlpZmFjZSB8PSAweDAwMDE7CisJCWJyZWFrOworCQkvKiBGSVhNRTogQ0hFQ0sgQS9CICovCisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJaWZhY2UgfD0gMHgwMDAzOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlpZmFjZSB8PSAweDAwMDc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgorCQlpZmFjZSB8PSAweDAwYzsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJaWZhY2UgfD0gMHgwMDg7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCWlmYWNlIHw9IDB4MDA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGaW5hbGx5LCB3cml0ZSBvdXQgdGhlIHZhbHVlcyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywgMHhmLCBpZmFjZSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004Nzc2X01TVFJDVFJMLCAweDE4MCwgbWFzdGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jbGtfcmF0aW9zW10gPSB7CisJMTI4LAorCTE5MiwKKwkyNTYsCisJMzg0LAorCTUxMiwKKwk3NjgsCit9OworCitzdGF0aWMgaW50IHdtODc3Nl9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204Nzc2X3ByaXYgKndtODc3NiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGlmYWNlX3JlZywgaWZhY2U7CisJaW50IHJhdGlvX3NoaWZ0LCBtYXN0ZXI7CisJaW50IGk7CisKKwlpZmFjZSA9IDA7CisKKwlzd2l0Y2ggKGRhaS0+aWQpIHsKKwljYXNlIFdNODc3Nl9EQUlfREFDOgorCQlpZmFjZV9yZWcgPSBXTTg3NzZfREFDSUZDVFJMOworCQltYXN0ZXIgPSAweDgwOworCQlyYXRpb19zaGlmdCA9IDQ7CisJCWJyZWFrOworCWNhc2UgV004Nzc2X0RBSV9BREM6CisJCWlmYWNlX3JlZyA9IFdNODc3Nl9BRENJRkNUUkw7CisJCW1hc3RlciA9IDB4MTAwOworCQlyYXRpb19zaGlmdCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCisJLyogU2V0IHdvcmQgbGVuZ3RoICovCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJaWZhY2UgfD0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJaWZhY2UgfD0gMHgyMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJaWZhY2UgfD0gMHgzMDsKKwkJYnJlYWs7CisJfQorCisJLyogT25seSBuZWVkIHRvIHNldCBNQ0xLL0xSQ0xLIHJhdGlvIGlmIHdlJ3JlIG1hc3RlciAqLworCWlmIChzbmRfc29jX3JlYWQoY29kZWMsIFdNODc3Nl9NU1RSQ1RSTCkgJiBtYXN0ZXIpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWNsa19yYXRpb3MpOyBpKyspIHsKKwkJCWlmICh3bTg3NzYtPnN5c2Nsa1tkYWktPmlkXSAvIHBhcmFtc19yYXRlKHBhcmFtcykKKwkJCSAgICA9PSBtY2xrX3JhdGlvc1tpXSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChpID09IEFSUkFZX1NJWkUobWNsa19yYXRpb3MpKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkJIlVuYWJsZSB0byBjb25maWd1cmUgTUNMSyByYXRpbyAlZC8lZFxuIiwKKwkJCQl3bTg3NzYtPnN5c2Nsa1tkYWktPmlkXSwgcGFyYW1zX3JhdGUocGFyYW1zKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWRldl9kYmcoY29kZWMtPmRldiwgIk1DTEsgaXMgJWRmc1xuIiwgbWNsa19yYXRpb3NbaV0pOworCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODc3Nl9NU1RSQ1RSTCwKKwkJCQkgICAgMHg3IDw8IHJhdGlvX3NoaWZ0LCBpIDw8IHJhdGlvX3NoaWZ0KTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJEQUkgaW4gc2xhdmUgbW9kZVxuIik7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgaWZhY2VfcmVnLCAweDMwLCBpZmFjZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg3NzZfREFDTVVURSwgISFtdXRlKTsKK30KKworc3RhdGljIGludCB3bTg3NzZfc2V0X3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJCSAgICAgaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204Nzc2X3ByaXYgKndtODc3NiA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlCVUdfT04oZGFpLT5pZCA+PSBBUlJBWV9TSVpFKHdtODc3Ni0+c3lzY2xrKSk7CisKKwl3bTg3NzYtPnN5c2Nsa1tkYWktPmlkXSA9IGZyZXE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQkvKiBEaXNhYmxlIHRoZSBnbG9iYWwgcG93ZXJkb3duOyBEQVBNIGRvZXMgdGhlIHJlc3QgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODc3Nl9QV1JET1dOLCAxLCAwKTsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004Nzc2X1BXUkRPV04sIDEsIDEpOworCQlicmVhazsKKwl9CisKKwljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODc3Nl9SQVRFUyAoU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8XAorCQkgICAgICBTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzg4MjAwIHxcCisJCSAgICAgIFNORFJWX1BDTV9SQVRFXzk2MDAwKQorCisKKyNkZWZpbmUgV004Nzc2X0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHxcCisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg3NzZfZGFjX29wcyA9IHsKKwkuZGlnaXRhbF9tdXRlCT0gd204Nzc2X211dGUsCisJLmh3X3BhcmFtcyAgICAgID0gd204Nzc2X2h3X3BhcmFtcywKKwkuc2V0X2ZtdCAgICAgICAgPSB3bTg3NzZfc2V0X2ZtdCwKKwkuc2V0X3N5c2NsayAgICAgPSB3bTg3NzZfc2V0X3N5c2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc3Nl9hZGNfb3BzID0geworCS5od19wYXJhbXMgICAgICA9IHdtODc3Nl9od19wYXJhbXMsCisJLnNldF9mbXQgICAgICAgID0gd204Nzc2X3NldF9mbXQsCisJLnNldF9zeXNjbGsgICAgID0gd204Nzc2X3NldF9zeXNjbGssCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgd204Nzc2X2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAiV004Nzc2IFBsYXliYWNrIiwKKwkJLmlkID0gV004Nzc2X0RBSV9EQUMsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV004Nzc2X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBXTTg3NzZfRk9STUFUUywKKwkJfSwKKwkJLm9wcyA9ICZ3bTg3NzZfZGFjX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiV004Nzc2IENhcHR1cmUiLAorCQkuaWQgPSBXTTg3NzZfREFJX0FEQywKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV004Nzc2X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBXTTg3NzZfRk9STUFUUywKKwkJfSwKKwkJLm9wcyA9ICZ3bTg3NzZfYWRjX29wcywKKwl9LAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHdtODc3Nl9kYWkpOworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODc3Nl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwl3bTg3NzZfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlpbnQgaTsKKwl1OCBkYXRhWzJdOworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCisJLyogU3luYyByZWdfY2FjaGUgd2l0aCB0aGUgaGFyZHdhcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NzZfcmVnKTsgaSsrKSB7CisJCWRhdGFbMF0gPSAoaSA8PCAxKSB8ICgoY2FjaGVbaV0gPj4gOCkgJiAweDAwMDEpOworCQlkYXRhWzFdID0gY2FjaGVbaV0gJiAweDAwZmY7CisJCWNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKTsKKwl9CisKKwl3bTg3NzZfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgd204Nzc2X3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTg3NzZfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IHdtODc3Nl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAwOworCisJaWYgKHdtODc3Nl9jb2RlYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIGRldmljZSBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg3NzZfY29kZWM7CisJY29kZWMgPSB3bTg3NzZfY29kZWM7CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXM6ICVkXG4iLCByZXQpOworCQlnb3RvIHBjbV9lcnI7CisJfQorCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODc3Nl9zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUod204Nzc2X3NuZF9jb250cm9scykpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODc3Nl9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODc3Nl9kYXBtX3dpZGdldHMpKTsKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgcm91dGVzLCBBUlJBWV9TSVpFKHJvdXRlcykpOworCisJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZDogJWRcbiIsIHJldCk7CisJCWdvdG8gY2FyZF9lcnI7CisJfQorCisJcmV0dXJuIHJldDsKKworY2FyZF9lcnI6CisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworcGNtX2VycjoKKwlyZXR1cm4gcmV0OworfQorCisvKiBwb3dlciBkb3duIGNoaXAgKi8KK3N0YXRpYyBpbnQgd204Nzc2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204Nzc2ID0geworCS5wcm9iZSA9IAl3bTg3NzZfcHJvYmUsCisJLnJlbW92ZSA9IAl3bTg3NzZfcmVtb3ZlLAorCS5zdXNwZW5kID0gCXdtODc3Nl9zdXNwZW5kLAorCS5yZXN1bWUgPQl3bTg3NzZfcmVzdW1lLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204Nzc2KTsKKworc3RhdGljIGludCB3bTg3NzZfcmVnaXN0ZXIoc3RydWN0IHdtODc3Nl9wcml2ICp3bTg3NzYsCisJCQkgICBlbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2wpCit7CisJaW50IHJldCwgaTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204Nzc2LT5jb2RlYzsKKworCWlmICh3bTg3NzZfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBXTTg3NzYgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204Nzc2OworCWNvZGVjLT5uYW1lID0gIldNODc3NiI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODc3Nl9zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gd204Nzc2X2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IEFSUkFZX1NJWkUod204Nzc2X2RhaSk7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gV004Nzc2X0NBQ0hFUkVHTlVNOworCWNvZGVjLT5yZWdfY2FjaGUgPSAmd204Nzc2LT5yZWdfY2FjaGU7CisKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204Nzc2X3JlZywgc2l6ZW9mKHdtODc3Nl9yZWcpKTsKKworCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA3LCA5LCBjb250cm9sKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc3Nl9kYWkpOyBpKyspCisJCXdtODc3Nl9kYWlbaV0uZGV2ID0gY29kZWMtPmRldjsKKworCXJldCA9IHdtODc3Nl9yZXNldChjb2RlYyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGlzc3VlIHJlc2V0OiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJd204Nzc2X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwkvKiBMYXRjaCB0aGUgdXBkYXRlIGJpdHM7IHJpZ2h0IGNoYW5uZWwgb25seSBzaW5jZSB3ZSBhbHdheXMKKwkgKiB1cGRhdGUgYm90aC4gKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg3NzZfSFBSVk9MLCAweDEwMCwgMHgxMDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODc3Nl9EQUNSVk9MLCAweDEwMCwgMHgxMDApOworCisJd204Nzc2X2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHdtODc3Nl9kYWksIEFSUkFZX1NJWkUod204Nzc2X2RhaSkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvZGVjOworCX0KKworCXJldHVybiAwOworCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwlrZnJlZSh3bTg3NzYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdtODc3Nl91bnJlZ2lzdGVyKHN0cnVjdCB3bTg3NzZfcHJpdiAqd204Nzc2KQoreworCXdtODc3Nl9zZXRfYmlhc19sZXZlbCgmd204Nzc2LT5jb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMod204Nzc2X2RhaSwgQVJSQVlfU0laRSh3bTg3NzZfZGFpKSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ3bTg3NzYtPmNvZGVjKTsKKwlrZnJlZSh3bTg3NzYpOworCXdtODc3Nl9jb2RlYyA9IE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorc3RhdGljIGludCB3bTg3NzZfc3BpX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXU4IG1zZ1syXTsKKworCWlmIChsZW4gPD0gMCkKKwkJcmV0dXJuIDA7CisKKwltc2dbMF0gPSBkYXRhWzBdOworCW1zZ1sxXSA9IGRhdGFbMV07CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOworCisJdC50eF9idWYgPSAmbXNnWzBdOworCXQubGVuID0gbGVuOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKwlzcGlfc3luYyhzcGksICZtKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdtODc3Nl9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHdtODc3Nl9wcml2ICp3bTg3NzY7CisKKwl3bTg3NzYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204Nzc2X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204Nzc2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY29kZWMgPSAmd204Nzc2LT5jb2RlYzsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KXdtODc3Nl9zcGlfd3JpdGU7CisJY29kZWMtPmRldiA9ICZzcGktPmRldjsKKworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHdtODc3Nik7CisKKwlyZXR1cm4gd204Nzc2X3JlZ2lzdGVyKHdtODc3NiwgU05EX1NPQ19TUEkpOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg3NzZfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCB3bTg3NzZfcHJpdiAqd204Nzc2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwl3bTg3NzZfdW5yZWdpc3Rlcih3bTg3NzYpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204Nzc2X3NwaV9zdXNwZW5kKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJcmV0dXJuIHNuZF9zb2Nfc3VzcGVuZF9kZXZpY2UoJnNwaS0+ZGV2KTsKK30KKworc3RhdGljIGludCB3bTg3NzZfc3BpX3Jlc3VtZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXJldHVybiBzbmRfc29jX3Jlc3VtZV9kZXZpY2UoJnNwaS0+ZGV2KTsKK30KKyNlbHNlCisjZGVmaW5lIHdtODc3Nl9zcGlfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODc3Nl9zcGlfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgd204Nzc2X3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAid204Nzc2IiwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHdtODc3Nl9zcGlfcHJvYmUsCisJLnN1c3BlbmQJPSB3bTg3NzZfc3BpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB3bTg3NzZfc3BpX3Jlc3VtZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdtODc3Nl9zcGlfcmVtb3ZlKSwKK307CisjZW5kaWYgLyogQ09ORklHX1NQSV9NQVNURVIgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODc3Nl9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHdtODc3Nl9wcml2ICp3bTg3NzY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJd204Nzc2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODc3Nl9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODc3NiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJndtODc3Ni0+Y29kZWM7CisJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204Nzc2KTsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworCisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCXJldHVybiB3bTg3NzZfcmVnaXN0ZXIod204Nzc2LCBTTkRfU09DX0kyQyk7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtODc3Nl9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdtODc3Nl9wcml2ICp3bTg3NzYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl3bTg3NzZfdW5yZWdpc3Rlcih3bTg3NzYpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODc3Nl9pMmNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXJldHVybiBzbmRfc29jX3N1c3BlbmRfZGV2aWNlKCZpMmMtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2kyY19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3sKKwlyZXR1cm4gc25kX3NvY19yZXN1bWVfZGV2aWNlKCZpMmMtPmRldik7Cit9CisjZWxzZQorI2RlZmluZSB3bTg3NzZfaTJjX3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTg3NzZfaTJjX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODc3Nl9pMmNfaWRbXSA9IHsKKwl7ICJ3bTg3NzYiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODc3Nl9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204Nzc2X2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAid204Nzc2IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSAgICB3bTg3NzZfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSAgIF9fZGV2ZXhpdF9wKHdtODc3Nl9pMmNfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9ICB3bTg3NzZfaTJjX3N1c3BlbmQsCisJLnJlc3VtZSA9ICAgd204Nzc2X2kyY19yZXN1bWUsCisJLmlkX3RhYmxlID0gd204Nzc2X2kyY19pZCwKK307CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgd204Nzc2X21vZGluaXQodm9pZCkKK3sKKwlpbnQgcmV0OworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204Nzc2X2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBXTTg3NzYgSTJDIGRyaXZlcjogJWRcbiIsCisJCSAgICAgICByZXQpOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd204Nzc2X3NwaV9kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBXTTg3NzYgU1BJIGRyaXZlcjogJWRcbiIsCisJCSAgICAgICByZXQpOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorbW9kdWxlX2luaXQod204Nzc2X21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204Nzc2X2V4aXQodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJndtODc3Nl9pMmNfZHJpdmVyKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bTg3NzZfc3BpX2RyaXZlcik7CisjZW5kaWYKK30KK21vZHVsZV9leGl0KHdtODc3Nl9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNODc3NiBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NzYuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204Nzc2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwNmQyNQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204Nzc2LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIHdtODc3Ni5oICAtLSAgV004Nzc2IEFTb0MgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHBsYworICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9XTTg3NzZfSAorI2RlZmluZSBfV004Nzc2X0gKKworLyogUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgV004Nzc2X0hQTFZPTCAgICAweDAwCisjZGVmaW5lIFdNODc3Nl9IUFJWT0wgICAgMHgwMQorI2RlZmluZSBXTTg3NzZfSFBNQVNURVIgIDB4MDIKKyNkZWZpbmUgV004Nzc2X0RBQ0xWT0wgICAweDAzCisjZGVmaW5lIFdNODc3Nl9EQUNSVk9MICAgMHgwNAorI2RlZmluZSBXTTg3NzZfREFDTUFTVEVSIDB4MDUKKyNkZWZpbmUgV004Nzc2X1BIQVNFU1dBUCAweDA2CisjZGVmaW5lIFdNODc3Nl9EQUNDVFJMMSAgMHgwNworI2RlZmluZSBXTTg3NzZfREFDTVVURSAgIDB4MDgKKyNkZWZpbmUgV004Nzc2X0RBQ0NUUkwyICAweDA5CisjZGVmaW5lIFdNODc3Nl9EQUNJRkNUUkwgMHgwYQorI2RlZmluZSBXTTg3NzZfQURDSUZDVFJMIDB4MGIKKyNkZWZpbmUgV004Nzc2X01TVFJDVFJMICAweDBjCisjZGVmaW5lIFdNODc3Nl9QV1JET1dOICAgMHgwZAorI2RlZmluZSBXTTg3NzZfQURDTFZPTCAgIDB4MGUKKyNkZWZpbmUgV004Nzc2X0FEQ1JWT0wgICAweDBmCisjZGVmaW5lIFdNODc3Nl9BTENDVFJMMSAgMHgxMAorI2RlZmluZSBXTTg3NzZfQUxDQ1RSTDIgIDB4MTEKKyNkZWZpbmUgV004Nzc2X0FMQ0NUUkwzICAweDEyCisjZGVmaW5lIFdNODc3Nl9OT0lTRUdBVEUgMHgxMworI2RlZmluZSBXTTg3NzZfTElNSVRFUiAgIDB4MTQKKyNkZWZpbmUgV004Nzc2X0FEQ01VWCAgICAweDE1CisjZGVmaW5lIFdNODc3Nl9PVVRNVVggICAgMHgxNgorI2RlZmluZSBXTTg3NzZfUkVTRVQgICAgIDB4MTcKKworI2RlZmluZSBXTTg3NzZfQ0FDSEVSRUdOVU0gMHgxNworCisjZGVmaW5lIFdNODc3Nl9EQUlfREFDIDAKKyNkZWZpbmUgV004Nzc2X0RBSV9BREMgMQorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODc3Nl9kYWlbXTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg3NzY7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMKaW5kZXggM2M3ODk0NS4uNWU5Yzg1NSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jCkBAIC0xMTYsNiArMTE2LDcgQEAKICNkZWZpbmUgV004OTAwX1JFR19DTE9DS0lORzJfREFDX0NMS0RJViAweDFjCiAKICNkZWZpbmUgV004OTAwX1JFR19EQUNDVFJMX01VVEUgICAgICAgICAgMHgwMDQKKyNkZWZpbmUgV004OTAwX1JFR19EQUNDVFJMX0RBQ19TQl9GSUxUICAgMHgxMDAKICNkZWZpbmUgV004OTAwX1JFR19EQUNDVFJMX0FJRl9MUkNMS1JBVEUgMHg0MDAKIAogI2RlZmluZSBXTTg5MDBfUkVHX0FVRElPM19BRENMUkNfRElSICAgIDB4MDgwMApAQCAtMTgyLDExMSArMTgzLDIwIEBACiAJLyogUmVtYWluaW5nIHJlZ2lzdGVycyBhbGwgemVybyAqLwogfTsKIAotLyoKLSAqIHJlYWQgd204OTAwIHJlZ2lzdGVyIGNhY2hlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdtODkwMF9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdW5zaWduZWQgaW50IHJlZykKLXsKLQl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQotCUJVR19PTihyZWcgPj0gV004OTAwX01BWFJFRyk7Ci0KLQlpZiAocmVnID09IFdNODkwMF9SRUdfSUQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIGNhY2hlW3JlZ107Ci19Ci0KLS8qCi0gKiB3cml0ZSB3bTg5MDAgcmVnaXN0ZXIgY2FjaGUKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHdtODkwMF93cml0ZV9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCXUxNiByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQotCUJVR19PTihyZWcgPj0gV004OTAwX01BWFJFRyk7Ci0KLQljYWNoZVtyZWddID0gdmFsdWU7Ci19Ci0KLS8qCi0gKiB3cml0ZSB0byB0aGUgV004OTAwIHJlZ2lzdGVyIHNwYWNlCi0gKi8KLXN0YXRpYyBpbnQgd204OTAwX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKLQkJCXVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQl1OCBkYXRhWzNdOwotCi0JaWYgKHZhbHVlID09IHdtODkwMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgcmVnKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBkYXRhIGlzCi0JICogICBEMTUuLkQ5IFdNODkwMCByZWdpc3RlciBvZmZzZXQKLQkgKiAgIEQ4Li4uRDAgcmVnaXN0ZXIgZGF0YQotCSAqLwotCWRhdGFbMF0gPSByZWc7Ci0JZGF0YVsxXSA9IHZhbHVlID4+IDg7Ci0JZGF0YVsyXSA9IHZhbHVlICYgMHgwMGZmOwotCi0Jd204OTAwX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgcmVnLCB2YWx1ZSk7Ci0JaWYgKGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAzKSA9PSAzKQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiAtRUlPOwotfQotCi0vKgotICogUmVhZCBmcm9tIHRoZSB3bTg5MDAuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgd204OTAwX2NoaXBfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHU4IHJlZykKLXsKLQlzdHJ1Y3QgaTJjX21zZyB4ZmVyWzJdOwotCXUxNiBkYXRhOwotCWludCByZXQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvZGVjLT5jb250cm9sX2RhdGE7Ci0KLQlCVUdfT04ocmVnICE9IFdNODkwMF9SRUdfSUQgJiYgcmVnICE9IFdNODkwMF9SRUdfUE9XRVIxKTsKLQotCS8qIFdyaXRlIHJlZ2lzdGVyICovCi0JeGZlclswXS5hZGRyID0gY2xpZW50LT5hZGRyOwotCXhmZXJbMF0uZmxhZ3MgPSAwOwotCXhmZXJbMF0ubGVuID0gMTsKLQl4ZmVyWzBdLmJ1ZiA9ICZyZWc7Ci0KLQkvKiBSZWFkIGRhdGEgKi8KLQl4ZmVyWzFdLmFkZHIgPSBjbGllbnQtPmFkZHI7Ci0JeGZlclsxXS5mbGFncyA9IEkyQ19NX1JEOwotCXhmZXJbMV0ubGVuID0gMjsKLQl4ZmVyWzFdLmJ1ZiA9ICh1OCAqKSZkYXRhOwotCi0JcmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgeGZlciwgMik7Ci0JaWYgKHJldCAhPSAyKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgImkyY190cmFuc2ZlciByZXR1cm5lZCAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIChkYXRhID4+IDgpIHwgKChkYXRhICYgMHhmZikgPDwgOCk7Ci19Ci0KLS8qCi0gKiBSZWFkIGZyb20gdGhlIFdNODkwMCByZWdpc3RlciBzcGFjZS4gIE1vc3QgcmVnaXN0ZXJzIGNhbid0IGJlIHJlYWQKLSAqIGFuZCBhcmUgdGhlcmVmb3JlIHN1cHBsaWVkIGZyb20gY2FjaGUuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgd204OTAwX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGludCB3bTg5MDBfdm9sYXRpbGVfcmVnaXN0ZXIodW5zaWduZWQgaW50IHJlZykKIHsKIAlzd2l0Y2ggKHJlZykgewogCWNhc2UgV004OTAwX1JFR19JRDoKLQkJcmV0dXJuIHdtODkwMF9jaGlwX3JlYWQoY29kZWMsIHJlZyk7CisJY2FzZSBXTTg5MDBfUkVHX1BPV0VSMToKKwkJcmV0dXJuIDE7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIHdtODkwMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgcmVnKTsKKwkJcmV0dXJuIDA7CiAJfQogfQogCiBzdGF0aWMgdm9pZCB3bTg5MDBfcmVzZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19SRVNFVCwgMCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19SRVNFVCwgMCk7CiAKIAltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204OTAwX3JlZ19kZWZhdWx0cywKIAkgICAgICAgc2l6ZW9mKGNvZGVjLT5yZWdfY2FjaGUpKTsKQEAgLTI5NiwxNCArMjA2LDE0IEBACiAJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOwotCXUxNiBocGN0bDEgPSB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19IUENUTDEpOworCXUxNiBocGN0bDEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfSFBDVEwxKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgogCQkvKiBDbGFtcCBoZWFkcGhvbmUgb3V0cHV0cyAqLwogCQlocGN0bDEgPSBXTTg5MDBfUkVHX0hQQ1RMMV9IUF9DTEFNUF9JUCB8CiAJCQlXTTg5MDBfUkVHX0hQQ1RMMV9IUF9DTEFNUF9PUDsKLQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0hQQ1RMMSwgaHBjdGwxKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19IUENUTDEsIGhwY3RsMSk7CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CkBAIC0zMTIsNDEgKzIyMiw0MSBAQAogCQlocGN0bDEgfD0gV004OTAwX1JFR19IUENUTDFfSFBfU0hPUlQgfAogCQkJV004OTAwX1JFR19IUENUTDFfSFBfU0hPUlQyIHwKIAkJCVdNODkwMF9SRUdfSFBDVEwxX0hQX0lQU1RBR0VfRU5BOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfSFBDVEwxLCBocGN0bDEpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0hQQ1RMMSwgaHBjdGwxKTsKIAogCQltc2xlZXAoNDAwKTsKIAogCQkvKiBFbmFibGUgdGhlIG91dHB1dCBzdGFnZSAqLwogCQlocGN0bDEgJj0gfldNODkwMF9SRUdfSFBDVEwxX0hQX0NMQU1QX09QOwogCQlocGN0bDEgfD0gV004OTAwX1JFR19IUENUTDFfSFBfT1BTVEFHRV9FTkE7Ci0JCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19IUENUTDEsIGhwY3RsMSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfSFBDVEwxLCBocGN0bDEpOwogCiAJCS8qIFJlbW92ZSB0aGUgc2hvcnRzICovCiAJCWhwY3RsMSAmPSB+V004OTAwX1JFR19IUENUTDFfSFBfU0hPUlQyOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfSFBDVEwxLCBocGN0bDEpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0hQQ1RMMSwgaHBjdGwxKTsKIAkJaHBjdGwxICY9IH5XTTg5MDBfUkVHX0hQQ1RMMV9IUF9TSE9SVDsKLQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0hQQ1RMMSwgaHBjdGwxKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19IUENUTDEsIGhwY3RsMSk7CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKIAkJLyogU2hvcnQgdGhlIG91dHB1dCAqLwogCQlocGN0bDEgfD0gV004OTAwX1JFR19IUENUTDFfSFBfU0hPUlQ7Ci0JCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19IUENUTDEsIGhwY3RsMSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfSFBDVEwxLCBocGN0bDEpOwogCiAJCS8qIERpc2FibGUgdGhlIG91dHB1dCBzdGFnZSAqLwogCQlocGN0bDEgJj0gfldNODkwMF9SRUdfSFBDVEwxX0hQX09QU1RBR0VfRU5BOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfSFBDVEwxLCBocGN0bDEpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0hQQ1RMMSwgaHBjdGwxKTsKIAogCQkvKiBDbGFtcCB0aGUgb3V0cHV0cyBhbmQgcG93ZXIgZG93biBpbnB1dCAqLwogCQlocGN0bDEgfD0gV004OTAwX1JFR19IUENUTDFfSFBfQ0xBTVBfSVAgfAogCQkJV004OTAwX1JFR19IUENUTDFfSFBfQ0xBTVBfT1A7CiAJCWhwY3RsMSAmPSB+V004OTAwX1JFR19IUENUTDFfSFBfSVBTVEFHRV9FTkE7Ci0JCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19IUENUTDEsIGhwY3RsMSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfSFBDVEwxLCBocGN0bDEpOwogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgogCQkvKiBEaXNhYmxlIGV2ZXJ5dGhpbmcgKi8KLQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0hQQ1RMMSwgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfSFBDVEwxLCAwKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNDM5LDcgKzM0OSw2IEBACiBTT0NfRU5VTSgiREFDIE11dGUgUmF0ZSIsIGRhY19tdXRlX3JhdGUpLAogU09DX1NJTkdMRSgiREFDIE1vbm8gU3dpdGNoIiwgV004OTAwX1JFR19EQUNDVFJMLCA5LCAxLCAwKSwKIFNPQ19FTlVNKCJEQUMgRGVlbXBoYXNpcyIsIGRhY19kZWVtcGhhc2lzKSwKLVNPQ19TSU5HTEUoIkRBQyBTbG9waW5nIFN0b3BiYW5kIEZpbHRlciBTd2l0Y2giLCBXTTg5MDBfUkVHX0RBQ0NUUkwsIDgsIDEsIDApLAogU09DX1NJTkdMRSgiREFDIFNpZ21hLURlbHRhIE1vZHVsYXRvciBDbG9jayBTd2l0Y2giLCBXTTg5MDBfUkVHX0RBQ0NUUkwsCiAJICAgMTIsIDEsIDApLAogCkBAIC03MjMsNyArNjMyLDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXUxNiByZWc7CiAKLQlyZWcgPSB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19BVURJTzEpICYgfjB4NjA7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0FVRElPMSkgJiB+MHg2MDsKIAogCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKQEAgLTc0MSw3ICs2NTAsMTggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0FVRElPMSwgcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0FVRElPMSwgcmVnKTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAwX1JFR19EQUNDVFJMKTsKKworCQlpZiAocGFyYW1zX3JhdGUocGFyYW1zKSA8PSAyNDAwMCkKKwkJCXJlZyB8PSBXTTg5MDBfUkVHX0RBQ0NUUkxfREFDX1NCX0ZJTFQ7CisJCWVsc2UKKwkJCXJlZyAmPSB+V004OTAwX1JFR19EQUNDVFJMX0RBQ19TQl9GSUxUOworCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfREFDQ1RSTCwgcmVnKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTgzNCwxOCArNzU0LDE4IEBACiAJCXJldHVybiAwOwogCiAJLyogVGhlIGRpZ2l0YWwgc2lkZSBzaG91bGQgYmUgZGlzYWJsZWQgZHVyaW5nIGFueSBjaGFuZ2UuICovCi0JcmVnID0gd204OTAwX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIxKTsKLQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIxLAorCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAwX1JFR19QT1dFUjEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIxLAogCQkgICAgIHJlZyAmICh+V004OTAwX1JFR19QT1dFUjFfRkxMX0VOQSkpOwogCiAJLyogRGlzYWJsZSB0aGUgRkxMPyAqLwogCWlmICghZnJlcV9pbiB8fCAhZnJlcV9vdXQpIHsKLQkJcmVnID0gd204OTAwX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfQ0xPQ0tJTkcxKTsKLQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0NMT0NLSU5HMSwKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0NMT0NLSU5HMSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfQ0xPQ0tJTkcxLAogCQkJICAgICByZWcgJiAofldNODkwMF9SRUdfQ0xPQ0tJTkcxX01DTEtfU1JDKSk7CiAKLQkJcmVnID0gd204OTAwX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfRkxMQ1RMMSk7Ci0JCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19GTExDVEwxLAorCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfRkxMQ1RMMSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfRkxMQ1RMMSwKIAkJCSAgICAgcmVnICYgKH5XTTg5MDBfUkVHX0ZMTENUTDFfT1NDX0VOQSkpOwogCiAJCXdtODkwMC0+ZmxsX2luID0gZnJlcV9pbjsKQEAgLTg2MiwzMyArNzgyLDMzIEBACiAKIAkvKiBUaGUgb3NjbGlsYXRvciAqTVVTVCogYmUgZW5hYmxlZCBiZWZvcmUgd2UgZW5hYmxlIHRoZQogCSAqIGRpZ2l0YWwgY2lyY3VpdC4gKi8KLQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfRkxMQ1RMMSwKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0ZMTENUTDEsCiAJCSAgICAgZmxsX2Rpdi5mbGxfcmF0aW8gfCBXTTg5MDBfUkVHX0ZMTENUTDFfT1NDX0VOQSk7CiAKLQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfRkxMQ1RMNCwgZmxsX2Rpdi5uID4+IDUpOwotCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19GTExDVEw1LAorCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfRkxMQ1RMNCwgZmxsX2Rpdi5uID4+IDUpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfRkxMQ1RMNSwKIAkJICAgICAoZmxsX2Rpdi5mbGxjbGtfZGl2IDw8IDYpIHwgKGZsbF9kaXYubiAmIDB4MWYpKTsKIAogCWlmIChmbGxfZGl2LmspIHsKLQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0ZMTENUTDIsCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfRkxMQ1RMMiwKIAkJCSAgICAgKGZsbF9kaXYuayA+PiA4KSB8IDB4MTAwKTsKLQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0ZMTENUTDMsIGZsbF9kaXYuayAmIDB4ZmYpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0ZMTENUTDMsIGZsbF9kaXYuayAmIDB4ZmYpOwogCX0gZWxzZQotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfRkxMQ1RMMiwgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfRkxMQ1RMMiwgMCk7CiAKIAlpZiAoZmxsX2Rpdi5mbGxfc2xvd19sb2NrX3JlZikKLQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0ZMTENUTDYsCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfRkxMQ1RMNiwKIAkJCSAgICAgV004OTAwX1JFR19GTExDVEw2X0ZMTF9TTE9XX0xPQ0tfUkVGKTsKIAllbHNlCi0JCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19GTExDVEw2LCAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19GTExDVEw2LCAwKTsKIAotCXJlZyA9IHdtODkwMF9yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX1BPV0VSMSk7Ci0Jd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1BPV0VSMSwKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1BPV0VSMSwKIAkJICAgICByZWcgfCBXTTg5MDBfUkVHX1BPV0VSMV9GTExfRU5BKTsKIAogcmVlbmFibGU6Ci0JcmVnID0gd204OTAwX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfQ0xPQ0tJTkcxKTsKLQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfQ0xPQ0tJTkcxLAorCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAwX1JFR19DTE9DS0lORzEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfQ0xPQ0tJTkcxLAogCQkgICAgIHJlZyB8IFdNODkwMF9SRUdfQ0xPQ0tJTkcxX01DTEtfU1JDKTsKIAogCXJldHVybiAwOwpAQCAtOTA4LDM4ICs4MjgsMzggQEAKIAogCXN3aXRjaCAoZGl2X2lkKSB7CiAJY2FzZSBXTTg5MDBfQkNMS19ESVY6Ci0JCXJlZyA9IHdtODkwMF9yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0NMT0NLSU5HMSk7Ci0JCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19DTE9DS0lORzEsCisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAwX1JFR19DTE9DS0lORzEpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0NMT0NLSU5HMSwKIAkJCSAgICAgZGl2IHwgKHJlZyAmIFdNODkwMF9SRUdfQ0xPQ0tJTkcxX0JDTEtfTUFTSykpOwogCQlicmVhazsKIAljYXNlIFdNODkwMF9PUENMS19ESVY6Ci0JCXJlZyA9IHdtODkwMF9yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0NMT0NLSU5HMSk7Ci0JCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19DTE9DS0lORzEsCisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAwX1JFR19DTE9DS0lORzEpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0NMT0NLSU5HMSwKIAkJCSAgICAgZGl2IHwgKHJlZyAmIFdNODkwMF9SRUdfQ0xPQ0tJTkcxX09QQ0xLX01BU0spKTsKIAkJYnJlYWs7CiAJY2FzZSBXTTg5MDBfREFDX0xSQ0xLOgotCQlyZWcgPSB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19BVURJTzQpOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfQVVESU80LAorCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfQVVESU80KTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19BVURJTzQsCiAJCQkgICAgIGRpdiB8IChyZWcgJiBXTTg5MDBfTFJDX01BU0spKTsKIAkJYnJlYWs7CiAJY2FzZSBXTTg5MDBfQURDX0xSQ0xLOgotCQlyZWcgPSB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19BVURJTzMpOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfQVVESU8zLAorCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfQVVESU8zKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19BVURJTzMsCiAJCQkgICAgIGRpdiB8IChyZWcgJiBXTTg5MDBfTFJDX01BU0spKTsKIAkJYnJlYWs7CiAJY2FzZSBXTTg5MDBfREFDX0NMS0RJVjoKLQkJcmVnID0gd204OTAwX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfQ0xPQ0tJTkcyKTsKLQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0NMT0NLSU5HMiwKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0NMT0NLSU5HMik7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfQ0xPQ0tJTkcyLAogCQkJICAgICBkaXYgfCAocmVnICYgV004OTAwX1JFR19DTE9DS0lORzJfREFDX0NMS0RJVikpOwogCQlicmVhazsKIAljYXNlIFdNODkwMF9BRENfQ0xLRElWOgotCQlyZWcgPSB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19DTE9DS0lORzIpOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfQ0xPQ0tJTkcyLAorCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfQ0xPQ0tJTkcyKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19DTE9DS0lORzIsCiAJCQkgICAgIGRpdiB8IChyZWcgJiBXTTg5MDBfUkVHX0NMT0NLSU5HMl9BRENfQ0xLRElWKSk7CiAJCWJyZWFrOwogCWNhc2UgV004OTAwX0xSQ0xLX01PREU6Ci0JCXJlZyA9IHdtODkwMF9yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0RBQ0NUUkwpOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfREFDQ1RSTCwKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0RBQ0NUUkwpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0RBQ0NUUkwsCiAJCQkgICAgIGRpdiB8IChyZWcgJiBXTTg5MDBfUkVHX0RBQ0NUUkxfQUlGX0xSQ0xLUkFURSkpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtOTU2LDEwICs4NzYsMTAgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwogCXVuc2lnbmVkIGludCBjbG9ja2luZzEsIGFpZjEsIGFpZjMsIGFpZjQ7CiAKLQljbG9ja2luZzEgPSB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19DTE9DS0lORzEpOwotCWFpZjEgPSB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19BVURJTzEpOwotCWFpZjMgPSB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19BVURJTzMpOwotCWFpZjQgPSB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19BVURJTzQpOworCWNsb2NraW5nMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAwX1JFR19DTE9DS0lORzEpOworCWFpZjEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfQVVESU8xKTsKKwlhaWYzID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0FVRElPMyk7CisJYWlmNCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAwX1JFR19BVURJTzQpOwogCiAJLyogc2V0IG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CkBAIC0xMDU1LDEwICs5NzUsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0NMT0NLSU5HMSwgY2xvY2tpbmcxKTsKLQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfQVVESU8xLCBhaWYxKTsKLQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfQVVESU8zLCBhaWYzKTsKLQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfQVVESU80LCBhaWY0KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0NMT0NLSU5HMSwgY2xvY2tpbmcxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0FVRElPMSwgYWlmMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19BVURJTzMsIGFpZjMpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfQVVESU80LCBhaWY0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA2OCwxNCArOTg4LDE0IEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKIAl1MTYgcmVnOwogCi0JcmVnID0gd204OTAwX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfREFDQ1RSTCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0RBQ0NUUkwpOwogCiAJaWYgKG11dGUpCiAJCXJlZyB8PSBXTTg5MDBfUkVHX0RBQ0NUUkxfTVVURTsKIAllbHNlCiAJCXJlZyAmPSB+V004OTAwX1JFR19EQUNDVFJMX01VVEU7CiAKLQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfREFDQ1RSTCwgcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0RBQ0NUUkwsIHJlZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMjQsMTEgKzEwNDQsMTEgQEAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046CiAJCS8qIEVuYWJsZSB0aGVybWFsIHNodXRkb3duICovCi0JCXJlZyA9IHdtODkwMF9yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0dQSU8pOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfR1BJTywKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0dQSU8pOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0dQSU8sCiAJCQkgICAgIHJlZyB8IFdNODkwMF9SRUdfR1BJT19URU1QX0VOQSk7Ci0JCXJlZyA9IHdtODkwMF9yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0FERENUTCk7Ci0JCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19BRERDVEwsCisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAwX1JFR19BRERDVEwpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0FERENUTCwKIAkJCSAgICAgcmVnIHwgV004OTAwX1JFR19BRERDVExfVEVNUF9TRCk7CiAJCWJyZWFrOwogCkBAIC0xMTM5LDY5ICsxMDU5LDY5IEBACiAJCS8qIENoYXJnZSBjYXBhY2l0b3JzIGlmIGluaXRpYWwgcG93ZXIgdXAgKi8KIAkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKIAkJCS8qIFNUQVJUVVBfQklBU19FTkEgb24gKi8KLQkJCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19QT1dFUjEsCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1BPV0VSMSwKIAkJCQkgICAgIFdNODkwMF9SRUdfUE9XRVIxX1NUQVJUVVBfQklBU19FTkEpOwogCiAJCQkvKiBTdGFydHVwIGJpYXMgbW9kZSAqLwotCQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0FERENUTCwKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfQUREQ1RMLAogCQkJCSAgICAgV004OTAwX1JFR19BRERDVExfQklBU19TUkMgfAogCQkJCSAgICAgV004OTAwX1JFR19BRERDVExfVk1JRF9TT0ZUU1QpOwogCiAJCQkvKiBWTUlEIDJ4NTBrICovCi0JCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIxLAorCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19QT1dFUjEsCiAJCQkJICAgICBXTTg5MDBfUkVHX1BPV0VSMV9TVEFSVFVQX0JJQVNfRU5BIHwgMHgxKTsKIAogCQkJLyogQWxsb3cgY2FwYWNpdG9ycyB0byBjaGFyZ2UgKi8KIAkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDQwMCkpOwogCiAJCQkvKiBFbmFibGUgYmlhcyAqLwotCQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1BPV0VSMSwKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIxLAogCQkJCSAgICAgV004OTAwX1JFR19QT1dFUjFfU1RBUlRVUF9CSUFTX0VOQSB8CiAJCQkJICAgICBXTTg5MDBfUkVHX1BPV0VSMV9CSUFTX0VOQSB8IDB4MSk7CiAKLQkJCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19BRERDVEwsIDApOworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19BRERDVEwsIDApOwogCi0JCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIxLAorCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19QT1dFUjEsCiAJCQkJICAgICBXTTg5MDBfUkVHX1BPV0VSMV9CSUFTX0VOQSB8IDB4MSk7CiAJCX0KIAotCQlyZWcgPSB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19QT1dFUjEpOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIxLAorCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIxKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19QT1dFUjEsCiAJCQkgICAgIChyZWcgJiBXTTg5MDBfUkVHX1BPV0VSMV9GTExfRU5BKSB8CiAJCQkgICAgIFdNODkwMF9SRUdfUE9XRVIxX0JJQVNfRU5BIHwgMHgxKTsKLQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1BPV0VSMiwKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19QT1dFUjIsCiAJCQkgICAgIFdNODkwMF9SRUdfUE9XRVIyX1NZU0NMS19FTkEpOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIzLCAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19QT1dFUjMsIDApOwogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKIAkJLyogU3RhcnR1cCBiaWFzIGVuYWJsZSAqLwotCQlyZWcgPSB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19QT1dFUjEpOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIxLAorCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIxKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19QT1dFUjEsCiAJCQkgICAgIHJlZyAmIFdNODkwMF9SRUdfUE9XRVIxX1NUQVJUVVBfQklBU19FTkEpOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfQUREQ1RMLAorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0FERENUTCwKIAkJCSAgICAgV004OTAwX1JFR19BRERDVExfQklBU19TUkMgfAogCQkJICAgICBXTTg5MDBfUkVHX0FERENUTF9WTUlEX1NPRlRTVCk7CiAKIAkJLyogRGlzY2hhcmdlIGNhcHMgKi8KLQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1BPV0VSMSwKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19QT1dFUjEsCiAJCQkgICAgIFdNODkwMF9SRUdfUE9XRVIxX1NUQVJUVVBfQklBU19FTkEpOwogCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyg1MDApKTsKIAogCQkvKiBSZW1vdmUgY2xhbXAgKi8KLQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0hQQ1RMMSwgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfSFBDVEwxLCAwKTsKIAogCQkvKiBQb3dlciBkb3duICovCi0JCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19BRERDVEwsIDApOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIxLCAwKTsKLQkJd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1BPV0VSMiwgMCk7Ci0JCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19QT1dFUjMsIDApOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0FERENUTCwgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIxLCAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19QT1dFUjIsIDApOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1BPV0VSMywgMCk7CiAKIAkJLyogTmVlZCB0byBsZXQgdGhpbmdzIHNldHRsZSBiZWZvcmUgc3RvcHBpbmcgdGhlIGNsb2NrCiAJCSAqIHRvIGVuc3VyZSB0aGF0IHJlc3RhcnQgd29ya3MsIHNlZSAiU3RvcHBpbmcgdGhlCiAJCSAqIG1hc3RlciBjbG9jayIgaW4gdGhlIGRhdGFzaGVldC4gKi8KIAkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMSkpOwotCQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfUE9XRVIyLAorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1BPV0VSMiwKIAkJCSAgICAgV004OTAwX1JFR19QT1dFUjJfU1lTQ0xLX0VOQSk7CiAJCWJyZWFrOwogCX0KQEAgLTEyNjQsNyArMTE4NCw3IEBACiAKIAlpZiAoY2FjaGUpIHsKIAkJZm9yIChpID0gMDsgaSA8IFdNODkwMF9NQVhSRUc7IGkrKykKLQkJCXdtODkwMF93cml0ZShjb2RlYywgaSwgY2FjaGVbaV0pOworCQkJc25kX3NvY193cml0ZShjb2RlYywgaSwgY2FjaGVbaV0pOwogCQlrZnJlZShjYWNoZSk7CiAJfSBlbHNlCiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSByZWdpc3RlciBjYWNoZVxuIik7CkBAIC0xMjk3LDE2ICsxMjE3LDIwIEBACiAKIAljb2RlYy0+bmFtZSA9ICJXTTg5MDAiOwogCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWNvZGVjLT5yZWFkID0gd204OTAwX3JlYWQ7Ci0JY29kZWMtPndyaXRlID0gd204OTAwX3dyaXRlOwogCWNvZGVjLT5kYWkgPSAmd204OTAwX2RhaTsKIAljb2RlYy0+bnVtX2RhaSA9IDE7Ci0JY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CiAJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204OTAwX3NldF9iaWFzX2xldmVsOworCWNvZGVjLT52b2xhdGlsZV9yZWdpc3RlciA9IHdtODkwMF92b2xhdGlsZV9yZWdpc3RlcjsKIAljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OwogCi0JcmVnID0gd204OTAwX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfSUQpOworCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCAxNiwgU05EX1NPQ19JMkMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0lEKTsKIAlpZiAocmVnICE9IDB4ODkwMCkgewogCQlkZXZfZXJyKCZpMmMtPmRldiwgIkRldmljZSBpcyBub3QgYSBXTTg5MDAgLSBJRCAleFxuIiwgcmVnKTsKIAkJcmV0ID0gLUVOT0RFVjsKQEAgLTEzMTQsNyArMTIzOCw3IEBACiAJfQogCiAJLyogUmVhZCBiYWNrIGZyb20gdGhlIGNoaXAgKi8KLQlyZWcgPSB3bTg5MDBfY2hpcF9yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX1BPV0VSMSk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX1BPV0VSMSk7CiAJcmVnID0gKHJlZyA+PiAxMikgJiAweGY7CiAJZGV2X2luZm8oJmkyYy0+ZGV2LCAiV004OTAwIHJldmlzaW9uICVkXG4iLCByZWcpOwogCkBAIC0xMzI0LDI5ICsxMjQ4LDI5IEBACiAJd204OTAwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKIAkvKiBMYXRjaCB0aGUgdm9sdW1lIHVwZGF0ZSBiaXRzICovCi0Jd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0xJTlZPTCwKLQkJICAgICB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19MSU5WT0wpIHwgMHgxMDApOwotCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19SSU5WT0wsCi0JCSAgICAgd204OTAwX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfUklOVk9MKSB8IDB4MTAwKTsKLQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfTE9VVDFDVEwsCi0JCSAgICAgd204OTAwX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfTE9VVDFDVEwpIHwgMHgxMDApOwotCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19ST1VUMUNUTCwKLQkJICAgICB3bTg5MDBfcmVhZChjb2RlYywgV004OTAwX1JFR19ST1VUMUNUTCkgfCAweDEwMCk7Ci0Jd204OTAwX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0xPVVQyQ1RMLAotCQkgICAgIHdtODkwMF9yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0xPVVQyQ1RMKSB8IDB4MTAwKTsKLQl3bTg5MDBfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfUk9VVDJDVEwsCi0JCSAgICAgd204OTAwX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfUk9VVDJDVEwpIHwgMHgxMDApOwotCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19MREFDX0RWLAotCQkgICAgIHdtODkwMF9yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0xEQUNfRFYpIHwgMHgxMDApOwotCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19SREFDX0RWLAotCQkgICAgIHdtODkwMF9yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX1JEQUNfRFYpIHwgMHgxMDApOwotCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19MQURDX0RWLAotCQkgICAgIHdtODkwMF9yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0xBRENfRFYpIHwgMHgxMDApOwotCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19SQURDX0RWLAotCQkgICAgIHdtODkwMF9yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX1JBRENfRFYpIHwgMHgxMDApOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfTElOVk9MLAorCQkgICAgICBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfTElOVk9MKSB8IDB4MTAwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1JJTlZPTCwKKwkJICAgICAgc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX1JJTlZPTCkgfCAweDEwMCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19MT1VUMUNUTCwKKwkJICAgICAgc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0xPVVQxQ1RMKSB8IDB4MTAwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1JPVVQxQ1RMLAorCQkgICAgICBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwMF9SRUdfUk9VVDFDVEwpIHwgMHgxMDApOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwMF9SRUdfTE9VVDJDVEwsCisJCSAgICAgIHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAwX1JFR19MT1VUMkNUTCkgfCAweDEwMCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTAwX1JFR19ST1VUMkNUTCwKKwkJICAgICAgc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX1JPVVQyQ1RMKSB8IDB4MTAwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0xEQUNfRFYsCisJCSAgICAgIHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAwX1JFR19MREFDX0RWKSB8IDB4MTAwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1JEQUNfRFYsCisJCSAgICAgIHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAwX1JFR19SREFDX0RWKSB8IDB4MTAwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX0xBRENfRFYsCisJCSAgICAgIHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAwX1JFR19MQURDX0RWKSB8IDB4MTAwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX1JBRENfRFYsCisJCSAgICAgIHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAwX1JFR19SQURDX0RWKSB8IDB4MTAwKTsKIAogCS8qIFNldCB0aGUgREFDIGFuZCBtaXhlciBvdXRwdXQgYmlhcyAqLwotCXdtODkwMF93cml0ZShjb2RlYywgV004OTAwX1JFR19PVVRCSUFTQ1RMLCAweDgxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDBfUkVHX09VVEJJQVNDVEwsIDB4ODEpOwogCiAJd204OTAwX2RhaS5kZXYgPSAmaTJjLT5kZXY7CiAKQEAgLTEzODgsNiArMTMxMiwyMSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODkwMF9pMmNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXJldHVybiBzbmRfc29jX3N1c3BlbmRfZGV2aWNlKCZjbGllbnQtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgd204OTAwX2kyY19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gc25kX3NvY19yZXN1bWVfZGV2aWNlKCZjbGllbnQtPmRldik7Cit9CisjZWxzZQorI2RlZmluZSB3bTg5MDBfaTJjX3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTg5MDBfaTJjX3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODkwMF9pMmNfaWRbXSA9IHsKIAl7ICJ3bTg5MDAiLCAwIH0sCiAJeyB9CkBAIC0xNDAxLDYgKzEzNDAsOCBAQAogCX0sCiAJLnByb2JlID0gd204OTAwX2kyY19wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aod204OTAwX2kyY19yZW1vdmUpLAorCS5zdXNwZW5kID0gd204OTAwX2kyY19zdXNwZW5kLAorCS5yZXN1bWUgPSB3bTg5MDBfaTJjX3Jlc3VtZSwKIAkuaWRfdGFibGUgPSB3bTg5MDBfaTJjX2lkLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKaW5kZXggZThkMmUzZS4uZmUxMzA3YiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCkBAIC0yMjUsOTQgKzIyNSwxOCBAQAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc2xhdmVfc3Vic3RyZWFtOwogfTsKIAotCi1zdGF0aWMgdW5zaWduZWQgaW50IHdtODkwM19yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJCQkgdW5zaWduZWQgaW50IHJlZykKLXsKLQl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQotCUJVR19PTihyZWcgPj0gQVJSQVlfU0laRSh3bTg5MDNfcmVnX2RlZmF1bHRzKSk7Ci0KLQlyZXR1cm4gY2FjaGVbcmVnXTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB3bTg5MDNfaHdfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHU4IHJlZykKLXsKLQlzdHJ1Y3QgaTJjX21zZyB4ZmVyWzJdOwotCXUxNiBkYXRhOwotCWludCByZXQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNvZGVjLT5jb250cm9sX2RhdGE7Ci0KLQkvKiBXcml0ZSByZWdpc3RlciAqLwotCXhmZXJbMF0uYWRkciA9IGNsaWVudC0+YWRkcjsKLQl4ZmVyWzBdLmZsYWdzID0gMDsKLQl4ZmVyWzBdLmxlbiA9IDE7Ci0JeGZlclswXS5idWYgPSAmcmVnOwotCi0JLyogUmVhZCBkYXRhICovCi0JeGZlclsxXS5hZGRyID0gY2xpZW50LT5hZGRyOwotCXhmZXJbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKLQl4ZmVyWzFdLmxlbiA9IDI7Ci0JeGZlclsxXS5idWYgPSAodTggKikmZGF0YTsKLQotCXJldCA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIHhmZXIsIDIpOwotCWlmIChyZXQgIT0gMikgewotCQlwcl9lcnIoImkyY190cmFuc2ZlciByZXR1cm5lZCAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIChkYXRhID4+IDgpIHwgKChkYXRhICYgMHhmZikgPDwgOCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgd204OTAzX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQkJCXVuc2lnbmVkIGludCByZWcpCitzdGF0aWMgaW50IHdtODkwM192b2xhdGlsZV9yZWdpc3Rlcih1bnNpZ25lZCBpbnQgcmVnKQogewogCXN3aXRjaCAocmVnKSB7CiAJY2FzZSBXTTg5MDNfU1dfUkVTRVRfQU5EX0lEOgogCWNhc2UgV004OTAzX1JFVklTSU9OX05VTUJFUjoKIAljYXNlIFdNODkwM19JTlRFUlJVUFRfU1RBVFVTXzE6CiAJY2FzZSBXTTg5MDNfV1JJVEVfU0VRVUVOQ0VSXzQ6Ci0JCXJldHVybiB3bTg5MDNfaHdfcmVhZChjb2RlYywgcmVnKTsKKwkJcmV0dXJuIDE7CiAKIAlkZWZhdWx0OgotCQlyZXR1cm4gd204OTAzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCByZWcpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgd204OTAzX3dyaXRlX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJICAgdTE2IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQotewotCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCi0JQlVHX09OKHJlZyA+PSBBUlJBWV9TSVpFKHdtODkwM19yZWdfZGVmYXVsdHMpKTsKLQotCXN3aXRjaCAocmVnKSB7Ci0JY2FzZSBXTTg5MDNfU1dfUkVTRVRfQU5EX0lEOgotCWNhc2UgV004OTAzX1JFVklTSU9OX05VTUJFUjoKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQljYWNoZVtyZWddID0gdmFsdWU7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludCB3bTg5MDNfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAotCQkJdW5zaWduZWQgaW50IHZhbHVlKQotewotCXU4IGRhdGFbM107Ci0KLQl3bTg5MDNfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCByZWcsIHZhbHVlKTsKLQotCS8qIERhdGEgZm9ybWF0IGlzIDEgYnl0ZSBvZiBhZGRyZXNzIGZvbGxvd2VkIGJ5IDIgYnl0ZXMgb2YgZGF0YSAqLwotCWRhdGFbMF0gPSByZWc7Ci0JZGF0YVsxXSA9ICh2YWx1ZSA+PiA4KSAmIDB4ZmY7Ci0JZGF0YVsyXSA9IHZhbHVlICYgMHhmZjsKLQotCWlmIChjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMykgPT0gMikKIAkJcmV0dXJuIDA7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTzsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgd204OTAzX3J1bl9zZXF1ZW5jZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCBzdGFydCkKQEAgLTMyMywxMyArMjQ3LDEzIEBACiAJQlVHX09OKHN0YXJ0ID4gNDgpOwogCiAJLyogRW5hYmxlIHRoZSBzZXF1ZW5jZXIgKi8KLQlyZWdbMF0gPSB3bTg5MDNfcmVhZChjb2RlYywgV004OTAzX1dSSVRFX1NFUVVFTkNFUl8wKTsKKwlyZWdbMF0gPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19XUklURV9TRVFVRU5DRVJfMCk7CiAJcmVnWzBdIHw9IFdNODkwM19XU0VRX0VOQTsKLQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19XUklURV9TRVFVRU5DRVJfMCwgcmVnWzBdKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfV1JJVEVfU0VRVUVOQ0VSXzAsIHJlZ1swXSk7CiAKIAlkZXZfZGJnKCZpMmMtPmRldiwgIlN0YXJ0aW5nIHNlcXVlbmNlIGF0ICVkXG4iLCBzdGFydCk7CiAKLQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19XUklURV9TRVFVRU5DRVJfMywKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfV1JJVEVfU0VRVUVOQ0VSXzMsCiAJCSAgICAgc3RhcnQgfCBXTTg5MDNfV1NFUV9TVEFSVCk7CiAKIAkvKiBXYWl0IGZvciBpdCB0byBjb21wbGV0ZS4gIElmIHdlIGhhdmUgdGhlIGludGVycnVwdCB3aXJlZCB1cCB0aGVuCkBAIC0zMzksMTMgKzI2MywxMyBAQAogCWRvIHsKIAkJbXNsZWVwKDEwKTsKIAotCQlyZWdbNF0gPSB3bTg5MDNfcmVhZChjb2RlYywgV004OTAzX1dSSVRFX1NFUVVFTkNFUl80KTsKKwkJcmVnWzRdID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDNfV1JJVEVfU0VRVUVOQ0VSXzQpOwogCX0gd2hpbGUgKHJlZ1s0XSAmIFdNODkwM19XU0VRX0JVU1kpOwogCiAJZGV2X2RiZygmaTJjLT5kZXYsICJTZXF1ZW5jZSBjb21wbGV0ZVxuIik7CiAKIAkvKiBEaXNhYmxlIHRoZSBzZXF1ZW5jZXIgYWdhaW4gKi8KLQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19XUklURV9TRVFVRU5DRVJfMCwKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfV1JJVEVfU0VRVUVOQ0VSXzAsCiAJCSAgICAgcmVnWzBdICYgfldNODkwM19XU0VRX0VOQSk7CiAKIAlyZXR1cm4gMDsKQEAgLTM1NywxMiArMjgxLDEyIEBACiAKIAkvKiBUaGVyZSByZWFsbHkgb3VnaHQgdG8gYmUgc29tZXRoaW5nIGJldHRlciB3ZSBjYW4gZG8gaGVyZSA6LyAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODkwM19yZWdfZGVmYXVsdHMpOyBpKyspCi0JCWNhY2hlW2ldID0gd204OTAzX2h3X3JlYWQoY29kZWMsIGkpOworCQljYWNoZVtpXSA9IGNvZGVjLT5od19yZWFkKGNvZGVjLCBpKTsKIH0KIAogc3RhdGljIHZvaWQgd204OTAzX3Jlc2V0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19TV19SRVNFVF9BTkRfSUQsIDApOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19TV19SRVNFVF9BTkRfSUQsIDApOwogCW1lbWNweShjb2RlYy0+cmVnX2NhY2hlLCB3bTg5MDNfcmVnX2RlZmF1bHRzLAogCSAgICAgICBzaXplb2Yod204OTAzX3JlZ19kZWZhdWx0cykpOwogfQpAQCAtNDIzLDUyICszNDcsNTIgQEAKIAl9CiAKIAlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkgewotCQl2YWwgPSB3bTg5MDNfcmVhZChjb2RlYywgcmVnKTsKKwkJdmFsID0gc25kX3NvY19yZWFkKGNvZGVjLCByZWcpOwogCiAJCS8qIFNob3J0IHRoZSBvdXRwdXQgKi8KIAkJdmFsICY9IH4oV004OTAzX09VVFBVVF9TSE9SVCA8PCBzaGlmdCk7Ci0JCXdtODkwM193cml0ZShjb2RlYywgcmVnLCB2YWwpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCByZWcsIHZhbCk7CiAJfQogCiAJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSB7Ci0JCXZhbCA9IHdtODkwM19yZWFkKGNvZGVjLCByZWcpOworCQl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIHJlZyk7CiAKIAkJdmFsIHw9IChXTTg5MDNfT1VUUFVUX0lOIDw8IHNoaWZ0KTsKLQkJd204OTAzX3dyaXRlKGNvZGVjLCByZWcsIHZhbCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgdmFsKTsKIAogCQl2YWwgfD0gKFdNODkwM19PVVRQVVRfSU5UIDw8IHNoaWZ0KTsKLQkJd204OTAzX3dyaXRlKGNvZGVjLCByZWcsIHZhbCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgdmFsKTsKIAogCQkvKiBUdXJuIG9uIHRoZSBvdXRwdXQgRU5BX09VVFAgKi8KIAkJdmFsIHw9IChXTTg5MDNfT1VUUFVUX09VVCA8PCBzaGlmdCk7Ci0JCXdtODkwM193cml0ZShjb2RlYywgcmVnLCB2YWwpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCByZWcsIHZhbCk7CiAKIAkJLyogRW5hYmxlIHRoZSBEQyBzZXJ2byAqLwotCQlkY3NfcmVnID0gd204OTAzX3JlYWQoY29kZWMsIFdNODkwM19EQ19TRVJWT18wKTsKKwkJZGNzX3JlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX0RDX1NFUlZPXzApOwogCQlkY3NfcmVnIHw9IGRjc19iaXQ7Ci0JCXdtODkwM193cml0ZShjb2RlYywgV004OTAzX0RDX1NFUlZPXzAsIGRjc19yZWcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfRENfU0VSVk9fMCwgZGNzX3JlZyk7CiAKIAkJLyogUmVtb3ZlIHRoZSBzaG9ydCAqLwogCQl2YWwgfD0gKFdNODkwM19PVVRQVVRfU0hPUlQgPDwgc2hpZnQpOwotCQl3bTg5MDNfd3JpdGUoY29kZWMsIHJlZywgdmFsKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgcmVnLCB2YWwpOwogCX0KIAogCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QUkVfUE1EKSB7Ci0JCXZhbCA9IHdtODkwM19yZWFkKGNvZGVjLCByZWcpOworCQl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIHJlZyk7CiAKIAkJLyogU2hvcnQgdGhlIG91dHB1dCAqLwogCQl2YWwgJj0gfihXTTg5MDNfT1VUUFVUX1NIT1JUIDw8IHNoaWZ0KTsKLQkJd204OTAzX3dyaXRlKGNvZGVjLCByZWcsIHZhbCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgdmFsKTsKIAogCQkvKiBEaXNhYmxlIHRoZSBEQyBzZXJ2byAqLwotCQlkY3NfcmVnID0gd204OTAzX3JlYWQoY29kZWMsIFdNODkwM19EQ19TRVJWT18wKTsKKwkJZGNzX3JlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX0RDX1NFUlZPXzApOwogCQlkY3NfcmVnICY9IH5kY3NfYml0OwotCQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19EQ19TRVJWT18wLCBkY3NfcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX0RDX1NFUlZPXzAsIGRjc19yZWcpOwogCiAJCS8qIFRoZW4gZGlzYWJsZSB0aGUgaW50ZXJtZWRpYXRlIGFuZCBvdXRwdXQgc3RhZ2VzICovCiAJCXZhbCAmPSB+KChXTTg5MDNfT1VUUFVUX09VVCB8IFdNODkwM19PVVRQVVRfSU5UIHwKIAkJCSAgV004OTAzX09VVFBVVF9JTikgPDwgc2hpZnQpOwotCQl3bTg5MDNfd3JpdGUoY29kZWMsIHJlZywgdmFsKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgcmVnLCB2YWwpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDkyLDEzICs0MTYsMTMgQEAKIAl1MTYgcmVnOwogCWludCByZXQ7CiAKLQlyZWcgPSB3bTg5MDNfcmVhZChjb2RlYywgV004OTAzX0NMQVNTX1dfMCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDNfQ0xBU1NfV18wKTsKIAogCS8qIFR1cm4gaXQgb2ZmIGlmIHdlJ3JlIGFib3V0IHRvIGVuYWJsZSBieXBhc3MgKi8KIAlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pIHsKIAkJaWYgKHdtODkwMy0+Y2xhc3Nfd191c2VycyA9PSAwKSB7CiAJCQlkZXZfZGJnKCZpMmMtPmRldiwgIkRpc2FibGluZyBDbGFzcyBXXG4iKTsKLQkJCXdtODkwM193cml0ZShjb2RlYywgV004OTAzX0NMQVNTX1dfMCwgcmVnICYKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19DTEFTU19XXzAsIHJlZyAmCiAJCQkJICAgICB+KFdNODkwM19DUF9EWU5fRlJFUSB8IFdNODkwM19DUF9EWU5fVikpOwogCQl9CiAJCXdtODkwMy0+Y2xhc3Nfd191c2VycysrOwpAQCAtNTExLDcgKzQzNSw3IEBACiAJaWYgKCF1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkgewogCQlpZiAod204OTAzLT5jbGFzc193X3VzZXJzID09IDEpIHsKIAkJCWRldl9kYmcoJmkyYy0+ZGV2LCAiRW5hYmxpbmcgQ2xhc3MgV1xuIik7Ci0JCQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19DTEFTU19XXzAsIHJlZyB8CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfQ0xBU1NfV18wLCByZWcgfAogCQkJCSAgICAgV004OTAzX0NQX0RZTl9GUkVRIHwgV004OTAzX0NQX0RZTl9WKTsKIAkJfQogCQl3bTg5MDMtPmNsYXNzX3dfdXNlcnMtLTsKQEAgLTcxNSw4ICs2MzksNiBAQAogU09DX0VOVU0oIkRBQyBNdXRlIE1vZGUiLCBtdXRlX21vZGUpLAogU09DX1NJTkdMRSgiREFDIE1vbm8gU3dpdGNoIiwgV004OTAzX0RBQ19ESUdJVEFMXzEsIDEyLCAxLCAwKSwKIFNPQ19FTlVNKCJEQUMgRGUtZW1waGFzaXMiLCBkYWNfZGVlbXBoYXNpcyksCi1TT0NfU0lOR0xFKCJEQUMgU2xvcGluZyBTdG9wYmFuZCBGaWx0ZXIgU3dpdGNoIiwKLQkgICBXTTg5MDNfREFDX0RJR0lUQUxfMSwgMTEsIDEsIDApLAogU09DX0VOVU0oIkRBQyBDb21wYW5kaW5nIE1vZGUiLCBkYWNfY29tcGFuZGluZyksCiBTT0NfU0lOR0xFKCJEQUMgQ29tcGFuZGluZyBTd2l0Y2giLCBXTTg5MDNfQVVESU9fSU5URVJGQUNFXzAsIDEsIDEsIDApLAogCkBAIC0xMDExLDU1ICs5MzMsNTUgQEAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046CiAJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKLQkJcmVnID0gd204OTAzX3JlYWQoY29kZWMsIFdNODkwM19WTUlEX0NPTlRST0xfMCk7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX1ZNSURfQ09OVFJPTF8wKTsKIAkJcmVnICY9IH4oV004OTAzX1ZNSURfUkVTX01BU0spOwogCQlyZWcgfD0gV004OTAzX1ZNSURfUkVTXzUwSzsKLQkJd204OTAzX3dyaXRlKGNvZGVjLCBXTTg5MDNfVk1JRF9DT05UUk9MXzAsIHJlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19WTUlEX0NPTlRST0xfMCwgcmVnKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgogCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgewotCQkJd204OTAzX3dyaXRlKGNvZGVjLCBXTTg5MDNfQ0xPQ0tfUkFURVNfMiwKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19DTE9DS19SQVRFU18yLAogCQkJCSAgICAgV004OTAzX0NMS19TWVNfRU5BKTsKIAogCQkJLyogQ2hhbmdlIERDIHNlcnZvIGRpdGhlciBsZXZlbCBpbiBzdGFydHVwIHNlcXVlbmNlICovCi0JCQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19XUklURV9TRVFVRU5DRVJfMCwgMHgxMSk7Ci0JCQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19XUklURV9TRVFVRU5DRVJfMSwgMHgxMjU3KTsKLQkJCXdtODkwM193cml0ZShjb2RlYywgV004OTAzX1dSSVRFX1NFUVVFTkNFUl8yLCAweDIpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX1dSSVRFX1NFUVVFTkNFUl8wLCAweDExKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19XUklURV9TRVFVRU5DRVJfMSwgMHgxMjU3KTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19XUklURV9TRVFVRU5DRVJfMiwgMHgyKTsKIAogCQkJd204OTAzX3J1bl9zZXF1ZW5jZShjb2RlYywgMCk7CiAJCQl3bTg5MDNfc3luY19yZWdfY2FjaGUoY29kZWMsIGNvZGVjLT5yZWdfY2FjaGUpOwogCiAJCQkvKiBFbmFibGUgbG93IGltcGVkZW5jZSBjaGFyZ2UgcHVtcCBvdXRwdXQgKi8KLQkJCXJlZyA9IHdtODkwM19yZWFkKGNvZGVjLAorCQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLAogCQkJCQkgIFdNODkwM19DT05UUk9MX0lOVEVSRkFDRV9URVNUXzEpOwotCQkJd204OTAzX3dyaXRlKGNvZGVjLCBXTTg5MDNfQ09OVFJPTF9JTlRFUkZBQ0VfVEVTVF8xLAorCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX0NPTlRST0xfSU5URVJGQUNFX1RFU1RfMSwKIAkJCQkgICAgIHJlZyB8IFdNODkwM19URVNUX0tFWSk7Ci0JCQlyZWcyID0gd204OTAzX3JlYWQoY29kZWMsIFdNODkwM19DSEFSR0VfUFVNUF9URVNUXzEpOwotCQkJd204OTAzX3dyaXRlKGNvZGVjLCBXTTg5MDNfQ0hBUkdFX1BVTVBfVEVTVF8xLAorCQkJcmVnMiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX0NIQVJHRV9QVU1QX1RFU1RfMSk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfQ0hBUkdFX1BVTVBfVEVTVF8xLAogCQkJCSAgICAgcmVnMiB8IFdNODkwM19DUF9TV19LRUxWSU5fTU9ERV9NQVNLKTsKLQkJCXdtODkwM193cml0ZShjb2RlYywgV004OTAzX0NPTlRST0xfSU5URVJGQUNFX1RFU1RfMSwKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19DT05UUk9MX0lOVEVSRkFDRV9URVNUXzEsCiAJCQkJICAgICByZWcpOwogCiAJCQkvKiBCeSBkZWZhdWx0IG5vIGJ5cGFzcyBwYXRocyBhcmUgZW5hYmxlZCBzbwogCQkJICogZW5hYmxlIENsYXNzIFcgc3VwcG9ydC4KIAkJCSAqLwogCQkJZGV2X2RiZygmaTJjLT5kZXYsICJFbmFibGluZyBDbGFzcyBXXG4iKTsKLQkJCXdtODkwM193cml0ZShjb2RlYywgV004OTAzX0NMQVNTX1dfMCwgcmVnIHwKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19DTEFTU19XXzAsIHJlZyB8CiAJCQkJICAgICBXTTg5MDNfQ1BfRFlOX0ZSRVEgfCBXTTg5MDNfQ1BfRFlOX1YpOwogCQl9CiAKLQkJcmVnID0gd204OTAzX3JlYWQoY29kZWMsIFdNODkwM19WTUlEX0NPTlRST0xfMCk7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX1ZNSURfQ09OVFJPTF8wKTsKIAkJcmVnICY9IH4oV004OTAzX1ZNSURfUkVTX01BU0spOwogCQlyZWcgfD0gV004OTAzX1ZNSURfUkVTXzI1MEs7Ci0JCXdtODkwM193cml0ZShjb2RlYywgV004OTAzX1ZNSURfQ09OVFJPTF8wLCByZWcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfVk1JRF9DT05UUk9MXzAsIHJlZyk7CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgogCQl3bTg5MDNfcnVuX3NlcXVlbmNlKGNvZGVjLCAzMik7Ci0JCXJlZyA9IHdtODkwM19yZWFkKGNvZGVjLCBXTTg5MDNfQ0xPQ0tfUkFURVNfMik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX0NMT0NLX1JBVEVTXzIpOwogCQlyZWcgJj0gfldNODkwM19DTEtfU1lTX0VOQTsKLQkJd204OTAzX3dyaXRlKGNvZGVjLCBXTTg5MDNfQ0xPQ0tfUkFURVNfMiwgcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX0NMT0NLX1JBVEVTXzIsIHJlZyk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTA4Myw3ICsxMDA1LDcgQEAKIAkJCSAgICAgIHVuc2lnbmVkIGludCBmbXQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKLQl1MTYgYWlmMSA9IHdtODkwM19yZWFkKGNvZGVjLCBXTTg5MDNfQVVESU9fSU5URVJGQUNFXzEpOworCXUxNiBhaWYxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDNfQVVESU9fSU5URVJGQUNFXzEpOwogCiAJYWlmMSAmPSB+KFdNODkwM19MUkNMS19ESVIgfCBXTTg5MDNfQkNMS19ESVIgfCBXTTg5MDNfQUlGX0ZNVF9NQVNLIHwKIAkJICBXTTg5MDNfQUlGX0xSQ0xLX0lOViB8IFdNODkwM19BSUZfQkNMS19JTlYpOwpAQCAtMTE2MSw3ICsxMDgzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jd204OTAzX3dyaXRlKGNvZGVjLCBXTTg5MDNfQVVESU9fSU5URVJGQUNFXzEsIGFpZjEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19BVURJT19JTlRFUkZBQ0VfMSwgYWlmMSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNzEsMTQgKzEwOTMsMTQgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwogCXUxNiByZWc7CiAKLQlyZWcgPSB3bTg5MDNfcmVhZChjb2RlYywgV004OTAzX0RBQ19ESUdJVEFMXzEpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX0RBQ19ESUdJVEFMXzEpOwogCiAJaWYgKG11dGUpCiAJCXJlZyB8PSBXTTg5MDNfREFDX01VVEU7CiAJZWxzZQogCQlyZWcgJj0gfldNODkwM19EQUNfTVVURTsKIAotCXdtODkwM193cml0ZShjb2RlYywgV004OTAzX0RBQ19ESUdJVEFMXzEsIHJlZyk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX0RBQ19ESUdJVEFMXzEsIHJlZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNjgsMTcgKzEyOTAsMjQgQEAKIAlpbnQgY3VyX3ZhbDsKIAlpbnQgY2xrX3N5czsKIAotCXUxNiBhaWYxID0gd204OTAzX3JlYWQoY29kZWMsIFdNODkwM19BVURJT19JTlRFUkZBQ0VfMSk7Ci0JdTE2IGFpZjIgPSB3bTg5MDNfcmVhZChjb2RlYywgV004OTAzX0FVRElPX0lOVEVSRkFDRV8yKTsKLQl1MTYgYWlmMyA9IHdtODkwM19yZWFkKGNvZGVjLCBXTTg5MDNfQVVESU9fSU5URVJGQUNFXzMpOwotCXUxNiBjbG9jazAgPSB3bTg5MDNfcmVhZChjb2RlYywgV004OTAzX0NMT0NLX1JBVEVTXzApOwotCXUxNiBjbG9jazEgPSB3bTg5MDNfcmVhZChjb2RlYywgV004OTAzX0NMT0NLX1JBVEVTXzEpOworCXUxNiBhaWYxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDNfQVVESU9fSU5URVJGQUNFXzEpOworCXUxNiBhaWYyID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDNfQVVESU9fSU5URVJGQUNFXzIpOworCXUxNiBhaWYzID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDNfQVVESU9fSU5URVJGQUNFXzMpOworCXUxNiBjbG9jazAgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19DTE9DS19SQVRFU18wKTsKKwl1MTYgY2xvY2sxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDNfQ0xPQ0tfUkFURVNfMSk7CisJdTE2IGRhY19kaWdpdGFsMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX0RBQ19ESUdJVEFMXzEpOwogCiAJaWYgKHN1YnN0cmVhbSA9PSB3bTg5MDMtPnNsYXZlX3N1YnN0cmVhbSkgewogCQlkZXZfZGJnKCZpMmMtPmRldiwgIklnbm9yaW5nIGh3X3BhcmFtcyBmb3Igc2xhdmUgc3Vic3RyZWFtXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCisJLyogRW5hYmxlIHNsb3Bpbmcgc3RvcGJhbmQgZmlsdGVyIGZvciBsb3cgc2FtcGxlIHJhdGVzICovCisJaWYgKGZzIDw9IDI0MDAwKQorCQlkYWNfZGlnaXRhbDEgfD0gV004OTAzX0RBQ19TQl9GSUxUOworCWVsc2UKKwkJZGFjX2RpZ2l0YWwxICY9IH5XTTg5MDNfREFDX1NCX0ZJTFQ7CisKIAkvKiBDb25maWd1cmUgc2FtcGxlIHJhdGUgbG9naWMgZm9yIERTUCAtIGNob29zZSBuZWFyZXN0IHJhdGUgKi8KIAlkc3BfY29uZmlnID0gMDsKIAliZXN0X3ZhbCA9IGFicyhzYW1wbGVfcmF0ZXNbZHNwX2NvbmZpZ10ucmF0ZSAtIGZzKTsKQEAgLTE0OTgsMTEgKzE0MjcsMTIgQEAKIAlhaWYyIHw9IGJjbGtfZGl2c1tiY2xrX2Rpdl0uZGl2OwogCWFpZjMgfD0gYmNsayAvIGZzOwogCi0Jd204OTAzX3dyaXRlKGNvZGVjLCBXTTg5MDNfQ0xPQ0tfUkFURVNfMCwgY2xvY2swKTsKLQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19DTE9DS19SQVRFU18xLCBjbG9jazEpOwotCXdtODkwM193cml0ZShjb2RlYywgV004OTAzX0FVRElPX0lOVEVSRkFDRV8xLCBhaWYxKTsKLQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19BVURJT19JTlRFUkZBQ0VfMiwgYWlmMik7Ci0Jd204OTAzX3dyaXRlKGNvZGVjLCBXTTg5MDNfQVVESU9fSU5URVJGQUNFXzMsIGFpZjMpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19DTE9DS19SQVRFU18wLCBjbG9jazApOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19DTE9DS19SQVRFU18xLCBjbG9jazEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19BVURJT19JTlRFUkZBQ0VfMSwgYWlmMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX0FVRElPX0lOVEVSRkFDRV8yLCBhaWYyKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfQVVESU9fSU5URVJGQUNFXzMsIGFpZjMpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19EQUNfRElHSVRBTF8xLCBkYWNfZGlnaXRhbDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTg3LDcgKzE1MTcsNyBAQAogCWlmICh0bXBfY2FjaGUpIHsKIAkJZm9yIChpID0gMjsgaSA8IEFSUkFZX1NJWkUod204OTAzX3JlZ19kZWZhdWx0cyk7IGkrKykKIAkJCWlmICh0bXBfY2FjaGVbaV0gIT0gcmVnX2NhY2hlW2ldKQotCQkJCXdtODkwM193cml0ZShjb2RlYywgaSwgdG1wX2NhY2hlW2ldKTsKKwkJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBpLCB0bXBfY2FjaGVbaV0pOwogCX0gZWxzZSB7CiAJCWRldl9lcnIoJmkyYy0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHRlbXBvcmFyeSBjYWNoZVxuIik7CiAJfQpAQCAtMTYxOCw5ICsxNTQ4LDYgQEAKIAljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OwogCWNvZGVjLT5uYW1lID0gIldNODkwMyI7CiAJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29kZWMtPnJlYWQgPSB3bTg5MDNfcmVhZDsKLQljb2RlYy0+d3JpdGUgPSB3bTg5MDNfd3JpdGU7Ci0JY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwogCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKIAljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg5MDNfc2V0X2JpYXNfbGV2ZWw7CiAJY29kZWMtPmRhaSA9ICZ3bTg5MDNfZGFpOwpAQCAtMTYyOCwxOCArMTU1NSwyNSBAQAogCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod204OTAzLT5yZWdfY2FjaGUpOwogCWNvZGVjLT5yZWdfY2FjaGUgPSAmd204OTAzLT5yZWdfY2FjaGVbMF07CiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODkwMzsKKwljb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIgPSB3bTg5MDNfdm9sYXRpbGVfcmVnaXN0ZXI7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKIAotCXZhbCA9IHdtODkwM19od19yZWFkKGNvZGVjLCBXTTg5MDNfU1dfUkVTRVRfQU5EX0lEKTsKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgOCwgMTYsIFNORF9TT0NfSTJDKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX1NXX1JFU0VUX0FORF9JRCk7CiAJaWYgKHZhbCAhPSB3bTg5MDNfcmVnX2RlZmF1bHRzW1dNODkwM19TV19SRVNFVF9BTkRfSURdKSB7CiAJCWRldl9lcnIoJmkyYy0+ZGV2LAogCQkJIkRldmljZSB3aXRoIElEIHJlZ2lzdGVyICV4IGlzIG5vdCBhIFdNODkwM1xuIiwgdmFsKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JdmFsID0gd204OTAzX3JlYWQoY29kZWMsIFdNODkwM19SRVZJU0lPTl9OVU1CRVIpOworCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTAzX1JFVklTSU9OX05VTUJFUik7CiAJZGV2X2luZm8oJmkyYy0+ZGV2LCAiV004OTAzIHJldmlzaW9uICVkXG4iLAogCQkgdmFsICYgV004OTAzX0NISVBfUkVWX01BU0spOwogCkBAIC0xNjQ5LDM1ICsxNTgzLDM1IEBACiAJd204OTAzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKIAkvKiBMYXRjaCB2b2x1bWUgdXBkYXRlIGJpdHMgKi8KLQl2YWwgPSB3bTg5MDNfcmVhZChjb2RlYywgV004OTAzX0FEQ19ESUdJVEFMX1ZPTFVNRV9MRUZUKTsKKwl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19BRENfRElHSVRBTF9WT0xVTUVfTEVGVCk7CiAJdmFsIHw9IFdNODkwM19BRENWVTsKLQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19BRENfRElHSVRBTF9WT0xVTUVfTEVGVCwgdmFsKTsKLQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19BRENfRElHSVRBTF9WT0xVTUVfUklHSFQsIHZhbCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX0FEQ19ESUdJVEFMX1ZPTFVNRV9MRUZULCB2YWwpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19BRENfRElHSVRBTF9WT0xVTUVfUklHSFQsIHZhbCk7CiAKLQl2YWwgPSB3bTg5MDNfcmVhZChjb2RlYywgV004OTAzX0RBQ19ESUdJVEFMX1ZPTFVNRV9MRUZUKTsKKwl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19EQUNfRElHSVRBTF9WT0xVTUVfTEVGVCk7CiAJdmFsIHw9IFdNODkwM19EQUNWVTsKLQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19EQUNfRElHSVRBTF9WT0xVTUVfTEVGVCwgdmFsKTsKLQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19EQUNfRElHSVRBTF9WT0xVTUVfUklHSFQsIHZhbCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX0RBQ19ESUdJVEFMX1ZPTFVNRV9MRUZULCB2YWwpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19EQUNfRElHSVRBTF9WT0xVTUVfUklHSFQsIHZhbCk7CiAKLQl2YWwgPSB3bTg5MDNfcmVhZChjb2RlYywgV004OTAzX0FOQUxPR1VFX09VVDFfTEVGVCk7CisJdmFsID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDNfQU5BTE9HVUVfT1VUMV9MRUZUKTsKIAl2YWwgfD0gV004OTAzX0hQT1VUVlU7Ci0Jd204OTAzX3dyaXRlKGNvZGVjLCBXTTg5MDNfQU5BTE9HVUVfT1VUMV9MRUZULCB2YWwpOwotCXdtODkwM193cml0ZShjb2RlYywgV004OTAzX0FOQUxPR1VFX09VVDFfUklHSFQsIHZhbCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX0FOQUxPR1VFX09VVDFfTEVGVCwgdmFsKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5MDNfQU5BTE9HVUVfT1VUMV9SSUdIVCwgdmFsKTsKIAotCXZhbCA9IHdtODkwM19yZWFkKGNvZGVjLCBXTTg5MDNfQU5BTE9HVUVfT1VUMl9MRUZUKTsKKwl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19BTkFMT0dVRV9PVVQyX0xFRlQpOwogCXZhbCB8PSBXTTg5MDNfTElORU9VVFZVOwotCXdtODkwM193cml0ZShjb2RlYywgV004OTAzX0FOQUxPR1VFX09VVDJfTEVGVCwgdmFsKTsKLQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19BTkFMT0dVRV9PVVQyX1JJR0hULCB2YWwpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19BTkFMT0dVRV9PVVQyX0xFRlQsIHZhbCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX0FOQUxPR1VFX09VVDJfUklHSFQsIHZhbCk7CiAKLQl2YWwgPSB3bTg5MDNfcmVhZChjb2RlYywgV004OTAzX0FOQUxPR1VFX09VVDNfTEVGVCk7CisJdmFsID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDNfQU5BTE9HVUVfT1VUM19MRUZUKTsKIAl2YWwgfD0gV004OTAzX1NQS1ZVOwotCXdtODkwM193cml0ZShjb2RlYywgV004OTAzX0FOQUxPR1VFX09VVDNfTEVGVCwgdmFsKTsKLQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19BTkFMT0dVRV9PVVQzX1JJR0hULCB2YWwpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19BTkFMT0dVRV9PVVQzX0xFRlQsIHZhbCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTAzX0FOQUxPR1VFX09VVDNfUklHSFQsIHZhbCk7CiAKIAkvKiBFbmFibGUgREFDIHNvZnQgbXV0ZSBieSBkZWZhdWx0ICovCi0JdmFsID0gd204OTAzX3JlYWQoY29kZWMsIFdNODkwM19EQUNfRElHSVRBTF8xKTsKKwl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwM19EQUNfRElHSVRBTF8xKTsKIAl2YWwgfD0gV004OTAzX0RBQ19NVVRFTU9ERTsKLQl3bTg5MDNfd3JpdGUoY29kZWMsIFdNODkwM19EQUNfRElHSVRBTF8xLCB2YWwpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwM19EQUNfRElHSVRBTF8xLCB2YWwpOwogCiAJd204OTAzX2RhaS5kZXYgPSAmaTJjLT5kZXY7CiAJd204OTAzX2NvZGVjID0gY29kZWM7CkBAIC0xNzIxLDYgKzE2NTUsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB3bTg5MDNfaTJjX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlyZXR1cm4gc25kX3NvY19zdXNwZW5kX2RldmljZSgmY2xpZW50LT5kZXYpOworfQorCitzdGF0aWMgaW50IHdtODkwM19pMmNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJcmV0dXJuIHNuZF9zb2NfcmVzdW1lX2RldmljZSgmY2xpZW50LT5kZXYpOworfQorI2Vsc2UKKyNkZWZpbmUgd204OTAzX2kyY19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204OTAzX2kyY19yZXN1bWUgTlVMTAorI2VuZGlmCisKIC8qIGkyYyBjb2RlYyBjb250cm9sIGxheWVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204OTAzX2kyY19pZFtdID0gewogICAgICAgIHsgIndtODkwMyIsIDAgfSwKQEAgLTE3MzUsNiArMTY4NCw4IEBACiAJfSwKIAkucHJvYmUgICAgPSB3bTg5MDNfaTJjX3Byb2JlLAogCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKHdtODkwM19pMmNfcmVtb3ZlKSwKKwkuc3VzcGVuZCAgPSB3bTg5MDNfaTJjX3N1c3BlbmQsCisJLnJlc3VtZSAgID0gd204OTAzX2kyY19yZXN1bWUsCiAJLmlkX3RhYmxlID0gd204OTAzX2kyY19pZCwKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk0MC5jCmluZGV4IGI4ZTE3ZDYuLmRhOTdhYWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NDAuYwpAQCAtMTA2LDUwICsxMDYsNiBAQAogCTB4MDAwMCwgLyogTW9ubyBNaXhlciBDb250cm9sICovCiB9OwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB3bTg5NDBfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQkJCQkJIHVuc2lnbmVkIGludCByZWcpCi17Ci0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0KLQlpZiAocmVnID49IEFSUkFZX1NJWkUod204OTQwX3JlZ19kZWZhdWx0cykpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiBjYWNoZVtyZWddOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB3bTg5NDBfd3JpdGVfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJCQkJICB1MTYgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0KLQlpZiAocmVnID49IEFSUkFZX1NJWkUod204OTQwX3JlZ19kZWZhdWx0cykpCi0JCXJldHVybiAtMTsKLQotCWNhY2hlW3JlZ10gPSB2YWx1ZTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdtODk0MF93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCi0JCQl1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JaW50IHJldDsKLQl1OCBkYXRhWzNdID0geyByZWcsCi0JCSAgICAgICAodmFsdWUgJiAweGZmMDApID4+IDgsCi0JCSAgICAgICAodmFsdWUgJiAweDAwZmYpCi0JfTsKLQotCXdtODk0MF93cml0ZV9yZWdfY2FjaGUoY29kZWMsIHJlZywgdmFsdWUpOwotCi0JcmV0ID0gY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDMpOwotCi0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JZWxzZSBpZiAocmV0ICE9IDMpCi0JCXJldHVybiAtRUlPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciAqd204OTQwX2NvbXBhbmRpbmdbXSA9IHsgIk9mZiIsICJOQyIsICJ1LWxhdyIsICJBLWxhdyIgfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204OTQwX2FkY19jb21wYW5kaW5nX2VudW0KID0gU09DX0VOVU1fU0lOR0xFKFdNODk0MF9DT01QQU5ESU5HQ1RMLCAxLCA0LCB3bTg5NDBfY29tcGFuZGluZyk7CkBAIC0zNDgsMTQgKzMwNCwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNkZWZpbmUgd204OTQwX3Jlc2V0KGMpIHdtODk0MF93cml0ZShjLCBXTTg5NDBfU09GVFJFU0VULCAwKTsKKyNkZWZpbmUgd204OTQwX3Jlc2V0KGMpIHNuZF9zb2Nfd3JpdGUoYywgV004OTQwX1NPRlRSRVNFVCwgMCk7CiAKIHN0YXRpYyBpbnQgd204OTQwX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAogCQkJICAgICAgdW5zaWduZWQgaW50IGZtdCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwotCXUxNiBpZmFjZSA9IHdtODk0MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTQwX0lGQUNFKSAmIDB4RkU2NzsKLQl1MTYgY2xrID0gd204OTQwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NDBfQ0xPQ0spICYgMHgxZmU7CisJdTE2IGlmYWNlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NDBfSUZBQ0UpICYgMHhGRTY3OworCXUxNiBjbGsgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk0MF9DTE9DSykgJiAweDFmZTsKIAogCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CkBAIC0zNjYsNyArMzIyLDcgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0Jd204OTQwX3dyaXRlKGNvZGVjLCBXTTg5NDBfQ0xPQ0ssIGNsayk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTQwX0NMT0NLLCBjbGspOwogCiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgpAQCAtMzk5LDcgKzM1NSw3IEBACiAJCWJyZWFrOwogCX0KIAotCXdtODk0MF93cml0ZShjb2RlYywgV004OTQwX0lGQUNFLCBpZmFjZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTQwX0lGQUNFLCBpZmFjZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQxMSw5ICszNjcsOSBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7Ci0JdTE2IGlmYWNlID0gd204OTQwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NDBfSUZBQ0UpICYgMHhGRDlGOwotCXUxNiBhZGRjbnRybCA9IHdtODk0MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTQwX0FERENOVFJMKSAmIDB4RkZGMTsKLQl1MTYgY29tcGFuZGluZyA9ICB3bTg5NDBfcmVhZF9yZWdfY2FjaGUoY29kZWMsCisJdTE2IGlmYWNlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NDBfSUZBQ0UpICYgMHhGRDlGOworCXUxNiBhZGRjbnRybCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTQwX0FERENOVFJMKSAmIDB4RkZGMTsKKwl1MTYgY29tcGFuZGluZyA9ICBzbmRfc29jX3JlYWQoY29kZWMsCiAJCQkJCQlXTTg5NDBfQ09NUEFORElOR0NUTCkgJiAweEZGREY7CiAJaW50IHJldDsKIApAQCAtNDQyLDcgKzM5OCw3IEBACiAJY2FzZSBTTkRSVl9QQ01fUkFURV80ODAwMDoKIAkJYnJlYWs7CiAJfQotCXJldCA9IHdtODk0MF93cml0ZShjb2RlYywgV004OTQwX0FERENOVFJMLCBhZGRjbnRybCk7CisJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTQwX0FERENOVFJMLCBhZGRjbnRybCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9yZXQ7CiAKQEAgLTQ2MiwxMCArNDE4LDEwIEBACiAJCWlmYWNlIHw9ICgzIDw8IDUpOwogCQlicmVhazsKIAl9Ci0JcmV0ID0gd204OTQwX3dyaXRlKGNvZGVjLCBXTTg5NDBfQ09NUEFORElOR0NUTCwgY29tcGFuZGluZyk7CisJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTQwX0NPTVBBTkRJTkdDVEwsIGNvbXBhbmRpbmcpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfcmV0OwotCXJldCA9IHdtODk0MF93cml0ZShjb2RlYywgV004OTQwX0lGQUNFLCBpZmFjZSk7CisJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTQwX0lGQUNFLCBpZmFjZSk7CiAKIGVycm9yX3JldDoKIAlyZXR1cm4gcmV0OwpAQCAtNDc0LDE5ICs0MzAsMTkgQEAKIHN0YXRpYyBpbnQgd204OTQwX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7Ci0JdTE2IG11dGVfcmVnID0gd204OTQwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NDBfREFDKSAmIDB4ZmZiZjsKKwl1MTYgbXV0ZV9yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk0MF9EQUMpICYgMHhmZmJmOwogCiAJaWYgKG11dGUpCiAJCW11dGVfcmVnIHw9IDB4NDA7CiAKLQlyZXR1cm4gd204OTQwX3dyaXRlKGNvZGVjLCBXTTg5NDBfREFDLCBtdXRlX3JlZyk7CisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk0MF9EQUMsIG11dGVfcmVnKTsKIH0KIAogc3RhdGljIGludCB3bTg5NDBfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKIAl1MTYgdmFsOwotCXUxNiBwd3JfcmVnID0gd204OTQwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NDBfUE9XRVIxKSAmIDB4MUYwOworCXUxNiBwd3JfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NDBfUE9XRVIxKSAmIDB4MUYwOwogCWludCByZXQgPSAwOwogCiAJc3dpdGNoIChsZXZlbCkgewpAQCAtNDk0LDI2ICs0NTAsMjYgQEAKIAkJLyogZW5zdXJlIGJ1ZmlvZW4gYW5kIGJpYXNlbiAqLwogCQlwd3JfcmVnIHw9ICgxIDw8IDIpIHwgKDEgPDwgMyk7CiAJCS8qIEVuYWJsZSB0aGVybWFsIHNodXRkb3duICovCi0JCXZhbCA9IHdtODk0MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTQwX09VVFBVVENUTCk7Ci0JCXJldCA9IHdtODk0MF93cml0ZShjb2RlYywgV004OTQwX09VVFBVVENUTCwgdmFsIHwgMHgyKTsKKwkJdmFsID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NDBfT1VUUFVUQ1RMKTsKKwkJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTQwX09VVFBVVENUTCwgdmFsIHwgMHgyKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCQkvKiBzZXQgdm1pZCB0byA3NWsgKi8KLQkJcmV0ID0gd204OTQwX3dyaXRlKGNvZGVjLCBXTTg5NDBfUE9XRVIxLCBwd3JfcmVnIHwgMHgxKTsKKwkJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTQwX1BPV0VSMSwgcHdyX3JlZyB8IDB4MSk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJCS8qIGVuc3VyZSBidWZpb2VuIGFuZCBiaWFzZW4gKi8KIAkJcHdyX3JlZyB8PSAoMSA8PCAyKSB8ICgxIDw8IDMpOwotCQlyZXQgPSB3bTg5NDBfd3JpdGUoY29kZWMsIFdNODk0MF9QT1dFUjEsIHB3cl9yZWcgfCAweDEpOworCQlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NDBfUE9XRVIxLCBwd3JfcmVnIHwgMHgxKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKIAkJLyogZW5zdXJlIGJ1ZmlvZW4gYW5kIGJpYXNlbiAqLwogCQlwd3JfcmVnIHw9ICgxIDw8IDIpIHwgKDEgPDwgMyk7CiAJCS8qIHNldCB2bWlkIHRvIDMwMGsgZm9yIHN0YW5kYnkgKi8KLQkJcmV0ID0gd204OTQwX3dyaXRlKGNvZGVjLCBXTTg5NDBfUE9XRVIxLCBwd3JfcmVnIHwgMHgyKTsKKwkJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTQwX1BPV0VSMSwgcHdyX3JlZyB8IDB4Mik7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJcmV0ID0gd204OTQwX3dyaXRlKGNvZGVjLCBXTTg5NDBfUE9XRVIxLCBwd3JfcmVnKTsKKwkJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTQwX1BPV0VSMSwgcHdyX3JlZyk7CiAJCWJyZWFrOwogCX0KIApAQCAtNTg3LDM2ICs1NDMsMzYgQEAKIAl1MTYgcmVnOwogCiAJLyogVHVybiBvZmYgUExMICovCi0JcmVnID0gd204OTQwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NDBfUE9XRVIxKTsKLQl3bTg5NDBfd3JpdGUoY29kZWMsIFdNODk0MF9QT1dFUjEsIHJlZyAmIDB4MWRmKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk0MF9QT1dFUjEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk0MF9QT1dFUjEsIHJlZyAmIDB4MWRmKTsKIAogCWlmIChmcmVxX2luID09IDAgfHwgZnJlcV9vdXQgPT0gMCkgewogCQkvKiBDbG9jayBDT0RFQyBkaXJlY3RseSBmcm9tIE1DTEsgKi8KLQkJcmVnID0gd204OTQwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NDBfQ0xPQ0spOwotCQl3bTg5NDBfd3JpdGUoY29kZWMsIFdNODk0MF9DTE9DSywgcmVnICYgMHgwZmYpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk0MF9DTE9DSyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk0MF9DTE9DSywgcmVnICYgMHgwZmYpOwogCQkvKiBQbGwgcG93ZXIgZG93biAqLwotCQl3bTg5NDBfd3JpdGUoY29kZWMsIFdNODk0MF9QTExOLCAoMSA8PCA3KSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk0MF9QTExOLCAoMSA8PCA3KSk7CiAJCXJldHVybiAwOwogCX0KIAogCS8qIFBsbCBpcyBmb2xsb3dlZCBieSBhIGZyZXF1ZW5jeSBkaXZpZGUgYnkgNCAqLwogCXBsbF9mYWN0b3JzKGZyZXFfb3V0KjQsIGZyZXFfaW4pOwogCWlmIChwbGxfZGl2LmspCi0JCXdtODk0MF93cml0ZShjb2RlYywgV004OTQwX1BMTE4sCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk0MF9QTExOLAogCQkJICAgICAocGxsX2Rpdi5wcmVfc2NhbGUgPDwgNCkgfCBwbGxfZGl2Lm4gfCAoMSA8PCA2KSk7CiAJZWxzZSAvKiBObyBmYWN0aW9uYWwgY29tcG9uZW50ICovCi0JCXdtODk0MF93cml0ZShjb2RlYywgV004OTQwX1BMTE4sCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk0MF9QTExOLAogCQkJICAgICAocGxsX2Rpdi5wcmVfc2NhbGUgPDwgNCkgfCBwbGxfZGl2Lm4pOwotCXdtODk0MF93cml0ZShjb2RlYywgV004OTQwX1BMTEsxLCBwbGxfZGl2LmsgPj4gMTgpOwotCXdtODk0MF93cml0ZShjb2RlYywgV004OTQwX1BMTEsyLCAocGxsX2Rpdi5rID4+IDkpICYgMHgxZmYpOwotCXdtODk0MF93cml0ZShjb2RlYywgV004OTQwX1BMTEszLCBwbGxfZGl2LmsgJiAweDFmZik7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTQwX1BMTEsxLCBwbGxfZGl2LmsgPj4gMTgpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk0MF9QTExLMiwgKHBsbF9kaXYuayA+PiA5KSAmIDB4MWZmKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NDBfUExMSzMsIHBsbF9kaXYuayAmIDB4MWZmKTsKIAkvKiBFbmFibGUgdGhlIFBMTCAqLwotCXJlZyA9IHdtODk0MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTQwX1BPV0VSMSk7Ci0Jd204OTQwX3dyaXRlKGNvZGVjLCBXTTg5NDBfUE9XRVIxLCByZWcgfCAweDAyMCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NDBfUE9XRVIxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NDBfUE9XRVIxLCByZWcgfCAweDAyMCk7CiAKIAkvKiBSdW4gQ09ERUMgZnJvbSBQTEwgaW5zdGVhZCBvZiBNQ0xLICovCi0JcmVnID0gd204OTQwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NDBfQ0xPQ0spOwotCXdtODk0MF93cml0ZShjb2RlYywgV004OTQwX0NMT0NLLCByZWcgfCAweDEwMCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NDBfQ0xPQ0spOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk0MF9DTE9DSywgcmVnIHwgMHgxMDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NDgsMTYgKzYwNCwxNiBAQAogCiAJc3dpdGNoIChkaXZfaWQpIHsKIAljYXNlIFdNODk0MF9CQ0xLRElWOgotCQlyZWcgPSB3bTg5NDBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk0MF9DTE9DSykgJiAweEZGRUYzOwotCQlyZXQgPSB3bTg5NDBfd3JpdGUoY29kZWMsIFdNODk0MF9DTE9DSywgcmVnIHwgKGRpdiA8PCAyKSk7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTQwX0NMT0NLKSAmIDB4RkZFRjM7CisJCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk0MF9DTE9DSywgcmVnIHwgKGRpdiA8PCAyKSk7CiAJCWJyZWFrOwogCWNhc2UgV004OTQwX01DTEtESVY6Ci0JCXJlZyA9IHdtODk0MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTQwX0NMT0NLKSAmIDB4RkYxRjsKLQkJcmV0ID0gd204OTQwX3dyaXRlKGNvZGVjLCBXTTg5NDBfQ0xPQ0ssIHJlZyB8IChkaXYgPDwgNSkpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk0MF9DTE9DSykgJiAweEZGMUY7CisJCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk0MF9DTE9DSywgcmVnIHwgKGRpdiA8PCA1KSk7CiAJCWJyZWFrOwogCWNhc2UgV004OTQwX09QQ0xLRElWOgotCQlyZWcgPSB3bTg5NDBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk0MF9BRERDTlRSTCkgJiAweEZGQ0Y7Ci0JCXJldCA9IHdtODk0MF93cml0ZShjb2RlYywgV004OTQwX0FERENOVFJMLCByZWcgfCAoZGl2IDw8IDQpKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NDBfQUREQ05UUkwpICYgMHhGRkNGOworCQlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NDBfQUREQ05UUkwsIHJlZyB8IChkaXYgPDwgNCkpOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTgwOCw3ICs3NjQsOCBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204OTQwKTsKIAotc3RhdGljIGludCB3bTg5NDBfcmVnaXN0ZXIoc3RydWN0IHdtODk0MF9wcml2ICp3bTg5NDApCitzdGF0aWMgaW50IHdtODk0MF9yZWdpc3RlcihzdHJ1Y3Qgd204OTQwX3ByaXYgKndtODk0MCwKKwkJCSAgIGVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbCkKIHsKIAlzdHJ1Y3Qgd204OTQwX3NldHVwX2RhdGEgKnBkYXRhID0gd204OTQwLT5jb2RlYy5kZXYtPnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODk0MC0+Y29kZWM7CkBAIC04MjUsOCArNzgyLDYgQEAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204OTQwOwogCWNvZGVjLT5uYW1lID0gIldNODk0MCI7CiAJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29kZWMtPnJlYWQgPSB3bTg5NDBfcmVhZF9yZWdfY2FjaGU7Ci0JY29kZWMtPndyaXRlID0gd204OTQwX3dyaXRlOwogCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKIAljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg5NDBfc2V0X2JpYXNfbGV2ZWw7CiAJY29kZWMtPmRhaSA9ICZ3bTg5NDBfZGFpOwpAQCAtODM0LDYgKzc4OSwxMiBAQAogCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod204OTQwX3JlZ19kZWZhdWx0cyk7CiAJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg5NDAtPnJlZ19jYWNoZTsKIAorCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCAxNiwgY29udHJvbCk7CisJaWYgKHJldCA9PSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204OTQwX3JlZ19kZWZhdWx0cywKIAkgICAgICAgc2l6ZW9mKHdtODk0MF9yZWdfZGVmYXVsdHMpKTsKIApAQCAtODQ3LDE1ICs4MDgsMTUgQEAKIAogCXdtODk0MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCi0JcmV0ID0gd204OTQwX3dyaXRlKGNvZGVjLCBXTTg5NDBfUE9XRVIxLCAweDE4MCk7CisJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTQwX1BPV0VSMSwgMHgxODApOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJaWYgKCFwZGF0YSkKIAkJZGV2X3dhcm4oY29kZWMtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOwogCWVsc2UgewotCQlyZWcgPSB3bTg5NDBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk0MF9PVVRQVVRDVEwpOwotCQlyZXQgPSB3bTg5NDBfd3JpdGUoY29kZWMsIFdNODk0MF9PVVRQVVRDVEwsIHJlZyB8IHBkYXRhLT52cm9pKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NDBfT1VUUFVUQ1RMKTsKKwkJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTQwX09VVFBVVENUTCwgcmVnIHwgcGRhdGEtPnZyb2kpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtOTA0LDcgKzg2NSw3IEBACiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKIAljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OwogCi0JcmV0dXJuIHdtODk0MF9yZWdpc3Rlcih3bTg5NDApOworCXJldHVybiB3bTg5NDBfcmVnaXN0ZXIod204OTQwLCBTTkRfU09DX0kyQyk7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHdtODk0MF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCkBAIC05MTYsNiArODc3LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204OTQwX2kyY19zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJcmV0dXJuIHNuZF9zb2Nfc3VzcGVuZF9kZXZpY2UoJmNsaWVudC0+ZGV2KTsKK30KKworc3RhdGljIGludCB3bTg5NDBfaTJjX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXJldHVybiBzbmRfc29jX3Jlc3VtZV9kZXZpY2UoJmNsaWVudC0+ZGV2KTsKK30KKyNlbHNlCisjZGVmaW5lIHdtODk0MF9pMmNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODk0MF9pMmNfcmVzdW1lIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204OTQwX2kyY19pZFtdID0gewogCXsgIndtODk0MCIsIDAgfSwKIAl7IH0KQEAgLTkyOSw2ICs5MDUsOCBAQAogCX0sCiAJLnByb2JlID0gd204OTQwX2kyY19wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aod204OTQwX2kyY19yZW1vdmUpLAorCS5zdXNwZW5kID0gd204OTQwX2kyY19zdXNwZW5kLAorCS5yZXN1bWUgPSB3bTg5NDBfaTJjX3Jlc3VtZSwKIAkuaWRfdGFibGUgPSB3bTg5NDBfaTJjX2lkLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NjAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYwLmMKaW5kZXggZTIyNGQ4YS4uZjU5NzAzYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NjAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MC5jCkBAIC02OSw2MSArNjksNyBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOwogfTsKIAotLyoKLSAqIHJlYWQgd204OTYwIHJlZ2lzdGVyIGNhY2hlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdtODk2MF9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdW5zaWduZWQgaW50IHJlZykKLXsKLQl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlpZiAocmVnID09IFdNODk2MF9SRVNFVCkKLQkJcmV0dXJuIDA7Ci0JaWYgKHJlZyA+PSBXTTg5NjBfQ0FDSEVSRUdOVU0pCi0JCXJldHVybiAtMTsKLQlyZXR1cm4gY2FjaGVbcmVnXTsKLX0KLQotLyoKLSAqIHdyaXRlIHdtODk2MCByZWdpc3RlciBjYWNoZQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgd204OTYwX3dyaXRlX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdTE2IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQotewotCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCWlmIChyZWcgPj0gV004OTYwX0NBQ0hFUkVHTlVNKQotCQlyZXR1cm47Ci0JY2FjaGVbcmVnXSA9IHZhbHVlOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB3bTg5NjBfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdW5zaWduZWQgaW50IHJlZykKLXsKLQlyZXR1cm4gd204OTYwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCByZWcpOwotfQotCi0vKgotICogd3JpdGUgdG8gdGhlIFdNODk2MCByZWdpc3RlciBzcGFjZQotICovCi1zdGF0aWMgaW50IHdtODk2MF93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCi0JdW5zaWduZWQgaW50IHZhbHVlKQotewotCXU4IGRhdGFbMl07Ci0KLQkvKiBkYXRhIGlzCi0JICogICBEMTUuLkQ5IFdNODk2MCByZWdpc3RlciBvZmZzZXQKLQkgKiAgIEQ4Li4uRDAgcmVnaXN0ZXIgZGF0YQotCSAqLwotCWRhdGFbMF0gPSAocmVnIDw8IDEpIHwgKCh2YWx1ZSA+PiA4KSAmIDB4MDAwMSk7Ci0JZGF0YVsxXSA9IHZhbHVlICYgMHgwMGZmOwotCi0Jd204OTYwX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgcmVnLCB2YWx1ZSk7Ci0JaWYgKGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKSA9PSAyKQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiAtRUlPOwotfQotCi0jZGVmaW5lIHdtODk2MF9yZXNldChjKQl3bTg5NjBfd3JpdGUoYywgV004OTYwX1JFU0VULCAwKQorI2RlZmluZSB3bTg5NjBfcmVzZXQoYykJc25kX3NvY193cml0ZShjLCBXTTg5NjBfUkVTRVQsIDApCiAKIC8qIGVudW1lcmF0ZWQgY29udHJvbHMgKi8KIHN0YXRpYyBjb25zdCBjaGFyICp3bTg5NjBfZGVlbXBoW10gPSB7Ik5vbmUiLCAiMzJLaHoiLCAiNDQuMUtoeiIsICI0OEtoeiJ9OwpAQCAtNDIwLDcgKzM2Niw3IEBACiAJfQogCiAJLyogc2V0IGlmYWNlICovCi0Jd204OTYwX3dyaXRlKGNvZGVjLCBXTTg5NjBfSUZBQ0UxLCBpZmFjZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTYwX0lGQUNFMSwgaWZhY2UpOwogCXJldHVybiAwOwogfQogCkBAIC00MzEsNyArMzc3LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwotCXUxNiBpZmFjZSA9IHdtODk2MF9yZWFkKGNvZGVjLCBXTTg5NjBfSUZBQ0UxKSAmIDB4ZmZmMzsKKwl1MTYgaWZhY2UgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MF9JRkFDRTEpICYgMHhmZmYzOwogCiAJLyogYml0IHNpemUgKi8KIAlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewpAQCAtNDQ2LDE5ICszOTIsMTkgQEAKIAl9CiAKIAkvKiBzZXQgaWZhY2UgKi8KLQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9JRkFDRTEsIGlmYWNlKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfSUZBQ0UxLCBpZmFjZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgd204OTYwX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7Ci0JdTE2IG11dGVfcmVnID0gd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9EQUNDVEwxKSAmIDB4ZmZmNzsKKwl1MTYgbXV0ZV9yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MF9EQUNDVEwxKSAmIDB4ZmZmNzsKIAogCWlmIChtdXRlKQotCQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9EQUNDVEwxLCBtdXRlX3JlZyB8IDB4OCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9EQUNDVEwxLCBtdXRlX3JlZyB8IDB4OCk7CiAJZWxzZQotCQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9EQUNDVEwxLCBtdXRlX3JlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9EQUNDVEwxLCBtdXRlX3JlZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3NCwxNiArNDIwLDE2IEBACiAKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgogCQkvKiBTZXQgVk1JRCB0byAyeDUwayAqLwotCQlyZWcgPSB3bTg5NjBfcmVhZChjb2RlYywgV004OTYwX1BPV0VSMSk7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYwX1BPV0VSMSk7CiAJCXJlZyAmPSB+MHgxODA7CiAJCXJlZyB8PSAweDgwOwotCQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9QT1dFUjEsIHJlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9QT1dFUjEsIHJlZyk7CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKIAkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKIAkJCS8qIEVuYWJsZSBhbnRpLXBvcCBmZWF0dXJlcyAqLwotCQkJd204OTYwX3dyaXRlKGNvZGVjLCBXTTg5NjBfQVBPUDEsCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfQVBPUDEsCiAJCQkJICAgICBXTTg5NjBfUE9CQ1RSTCB8IFdNODk2MF9TT0ZUX1NUIHwKIAkJCQkgICAgIFdNODk2MF9CVUZEQ09QRU4gfCBXTTg5NjBfQlVGSU9FTik7CiAKQEAgLTQ5MSw0MyArNDM3LDQzIEBACiAJCQlyZWcgPSBXTTg5NjBfRElTT1A7CiAJCQlpZiAocGRhdGEpCiAJCQkJcmVnIHw9IHBkYXRhLT5kcmVzIDw8IDQ7Ci0JCQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9BUE9QMiwgcmVnKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9BUE9QMiwgcmVnKTsKIAogCQkJbXNsZWVwKDQwMCk7CiAKLQkJCXdtODk2MF93cml0ZShjb2RlYywgV004OTYwX0FQT1AyLCAwKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9BUE9QMiwgMCk7CiAKIAkJCS8qIEVuYWJsZSAmIHJhbXAgVk1JRCBhdCAyeDUwayAqLwotCQkJcmVnID0gd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9QT1dFUjEpOworCQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjBfUE9XRVIxKTsKIAkJCXJlZyB8PSAweDgwOwotCQkJd204OTYwX3dyaXRlKGNvZGVjLCBXTTg5NjBfUE9XRVIxLCByZWcpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYwX1BPV0VSMSwgcmVnKTsKIAkJCW1zbGVlcCgxMDApOwogCiAJCQkvKiBFbmFibGUgVlJFRiAqLwotCQkJd204OTYwX3dyaXRlKGNvZGVjLCBXTTg5NjBfUE9XRVIxLCByZWcgfCBXTTg5NjBfVlJFRik7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfUE9XRVIxLCByZWcgfCBXTTg5NjBfVlJFRik7CiAKIAkJCS8qIERpc2FibGUgYW50aS1wb3AgZmVhdHVyZXMgKi8KLQkJCXdtODk2MF93cml0ZShjb2RlYywgV004OTYwX0FQT1AxLCBXTTg5NjBfQlVGSU9FTik7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfQVBPUDEsIFdNODk2MF9CVUZJT0VOKTsKIAkJfQogCiAJCS8qIFNldCBWTUlEIHRvIDJ4MjUwayAqLwotCQlyZWcgPSB3bTg5NjBfcmVhZChjb2RlYywgV004OTYwX1BPV0VSMSk7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYwX1BPV0VSMSk7CiAJCXJlZyAmPSB+MHgxODA7CiAJCXJlZyB8PSAweDEwMDsKLQkJd204OTYwX3dyaXRlKGNvZGVjLCBXTTg5NjBfUE9XRVIxLCByZWcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfUE9XRVIxLCByZWcpOwogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKIAkJLyogRW5hYmxlIGFudGktcG9wIGZlYXR1cmVzICovCi0JCXdtODk2MF93cml0ZShjb2RlYywgV004OTYwX0FQT1AxLAorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfQVBPUDEsCiAJCQkgICAgIFdNODk2MF9QT0JDVFJMIHwgV004OTYwX1NPRlRfU1QgfAogCQkJICAgICBXTTg5NjBfQlVGRENPUEVOIHwgV004OTYwX0JVRklPRU4pOwogCiAJCS8qIERpc2FibGUgVk1JRCBhbmQgVlJFRiwgbGV0IHRoZW0gZGlzY2hhcmdlICovCi0JCXdtODk2MF93cml0ZShjb2RlYywgV004OTYwX1BPV0VSMSwgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9QT1dFUjEsIDApOwogCQltc2xlZXAoNjAwKTsKIAotCQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9BUE9QMSwgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9BUE9QMSwgMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtNjEwLDMzICs1NTYsMzMgQEAKIAogCS8qIERpc2FibGUgdGhlIFBMTDogZXZlbiBpZiB3ZSBhcmUgY2hhbmdpbmcgdGhlIGZyZXF1ZW5jeSB0aGUKIAkgKiBQTEwgbmVlZHMgdG8gYmUgZGlzYWJsZWQgd2hpbGUgd2UgZG8gc28uICovCi0Jd204OTYwX3dyaXRlKGNvZGVjLCBXTTg5NjBfQ0xPQ0sxLAotCQkgICAgIHdtODk2MF9yZWFkKGNvZGVjLCBXTTg5NjBfQ0xPQ0sxKSAmIH4xKTsKLQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9QT1dFUjIsCi0JCSAgICAgd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9QT1dFUjIpICYgfjEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9DTE9DSzEsCisJCSAgICAgc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjBfQ0xPQ0sxKSAmIH4xKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfUE9XRVIyLAorCQkgICAgIHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYwX1BPV0VSMikgJiB+MSk7CiAKIAlpZiAoIWZyZXFfaW4gfHwgIWZyZXFfb3V0KQogCQlyZXR1cm4gMDsKIAotCXJlZyA9IHdtODk2MF9yZWFkKGNvZGVjLCBXTTg5NjBfUExMMSkgJiB+MHgzZjsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MF9QTEwxKSAmIH4weDNmOwogCXJlZyB8PSBwbGxfZGl2LnByZV9kaXYgPDwgNDsKIAlyZWcgfD0gcGxsX2Rpdi5uOwogCiAJaWYgKHBsbF9kaXYuaykgewogCQlyZWcgfD0gMHgyMDsKIAotCQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9QTEwyLCAocGxsX2Rpdi5rID4+IDE4KSAmIDB4M2YpOwotCQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9QTEwzLCAocGxsX2Rpdi5rID4+IDkpICYgMHgxZmYpOwotCQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9QTEw0LCBwbGxfZGl2LmsgJiAweDFmZik7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9QTEwyLCAocGxsX2Rpdi5rID4+IDE4KSAmIDB4M2YpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfUExMMywgKHBsbF9kaXYuayA+PiA5KSAmIDB4MWZmKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYwX1BMTDQsIHBsbF9kaXYuayAmIDB4MWZmKTsKIAl9Ci0Jd204OTYwX3dyaXRlKGNvZGVjLCBXTTg5NjBfUExMMSwgcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfUExMMSwgcmVnKTsKIAogCS8qIFR1cm4gaXQgb24gKi8KLQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9QT1dFUjIsCi0JCSAgICAgd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9QT1dFUjIpIHwgMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTYwX1BPV0VSMiwKKwkJICAgICBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MF9QT1dFUjIpIHwgMSk7CiAJbXNsZWVwKDI1MCk7Ci0Jd204OTYwX3dyaXRlKGNvZGVjLCBXTTg5NjBfQ0xPQ0sxLAotCQkgICAgIHdtODk2MF9yZWFkKGNvZGVjLCBXTTg5NjBfQ0xPQ0sxKSB8IDEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9DTE9DSzEsCisJCSAgICAgc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjBfQ0xPQ0sxKSB8IDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NDksMjggKzU5NSwyOCBAQAogCiAJc3dpdGNoIChkaXZfaWQpIHsKIAljYXNlIFdNODk2MF9TWVNDTEtTRUw6Ci0JCXJlZyA9IHdtODk2MF9yZWFkKGNvZGVjLCBXTTg5NjBfQ0xPQ0sxKSAmIDB4MWZlOwotCQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9DTE9DSzEsIHJlZyB8IGRpdik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYwX0NMT0NLMSkgJiAweDFmZTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYwX0NMT0NLMSwgcmVnIHwgZGl2KTsKIAkJYnJlYWs7CiAJY2FzZSBXTTg5NjBfU1lTQ0xLRElWOgotCQlyZWcgPSB3bTg5NjBfcmVhZChjb2RlYywgV004OTYwX0NMT0NLMSkgJiAweDFmOTsKLQkJd204OTYwX3dyaXRlKGNvZGVjLCBXTTg5NjBfQ0xPQ0sxLCByZWcgfCBkaXYpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MF9DTE9DSzEpICYgMHgxZjk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9DTE9DSzEsIHJlZyB8IGRpdik7CiAJCWJyZWFrOwogCWNhc2UgV004OTYwX0RBQ0RJVjoKLQkJcmVnID0gd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9DTE9DSzEpICYgMHgxYzc7Ci0JCXdtODk2MF93cml0ZShjb2RlYywgV004OTYwX0NMT0NLMSwgcmVnIHwgZGl2KTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjBfQ0xPQ0sxKSAmIDB4MWM3OworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfQ0xPQ0sxLCByZWcgfCBkaXYpOwogCQlicmVhazsKIAljYXNlIFdNODk2MF9PUENMS0RJVjoKLQkJcmVnID0gd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9QTEwxKSAmIDB4MDNmOwotCQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9QTEwxLCByZWcgfCBkaXYpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MF9QTEwxKSAmIDB4MDNmOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfUExMMSwgcmVnIHwgZGl2KTsKIAkJYnJlYWs7CiAJY2FzZSBXTTg5NjBfRENMS0RJVjoKLQkJcmVnID0gd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9DTE9DSzIpICYgMHgwM2Y7Ci0JCXdtODk2MF93cml0ZShjb2RlYywgV004OTYwX0NMT0NLMiwgcmVnIHwgZGl2KTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjBfQ0xPQ0syKSAmIDB4MDNmOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfQ0xPQ0syLCByZWcgfCBkaXYpOwogCQlicmVhazsKIAljYXNlIFdNODk2MF9UT0NMS1NFTDoKLQkJcmVnID0gd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9BRERDVEwxKSAmIDB4MWZkOwotCQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9BRERDVEwxLCByZWcgfCBkaXYpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MF9BRERDVEwxKSAmIDB4MWZkOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfQUREQ1RMMSwgcmVnIHwgZGl2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04MDEsNyArNzQ3LDggQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODk2MCk7CiAKLXN0YXRpYyBpbnQgd204OTYwX3JlZ2lzdGVyKHN0cnVjdCB3bTg5NjBfcHJpdiAqd204OTYwKQorc3RhdGljIGludCB3bTg5NjBfcmVnaXN0ZXIoc3RydWN0IHdtODk2MF9wcml2ICp3bTg5NjAsCisJCQkgICBlbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2wpCiB7CiAJc3RydWN0IHdtODk2MF9kYXRhICpwZGF0YSA9IHdtODk2MC0+Y29kZWMuZGV2LT5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5NjAtPmNvZGVjOwpAQCAtODEwLDcgKzc1Nyw4IEBACiAKIAlpZiAod204OTYwX2NvZGVjKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkFub3RoZXIgV004OTYwIGlzIHJlZ2lzdGVyZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CiAJfQogCiAJaWYgKCFwZGF0YSkgewpAQCAtODI5LDggKzc3Nyw2IEBACiAJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODk2MDsKIAljb2RlYy0+bmFtZSA9ICJXTTg5NjAiOwogCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWNvZGVjLT5yZWFkID0gd204OTYwX3JlYWRfcmVnX2NhY2hlOwotCWNvZGVjLT53cml0ZSA9IHdtODk2MF93cml0ZTsKIAljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CiAJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204OTYwX3NldF9iaWFzX2xldmVsOwogCWNvZGVjLT5kYWkgPSAmd204OTYwX2RhaTsKQEAgLTg0MCwxMCArNzg2LDE2IEBACiAKIAltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204OTYwX3JlZywgc2l6ZW9mKHdtODk2MF9yZWcpKTsKIAorCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA3LCA5LCBjb250cm9sKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKwogCXJldCA9IHdtODk2MF9yZXNldChjb2RlYyk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGlzc3VlIHJlc2V0XG4iKTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnI7CiAJfQogCiAJd204OTYwX2RhaS5kZXYgPSBjb2RlYy0+ZGV2OwpAQCAtODUxLDQzICs4MDMsNDggQEAKIAl3bTg5NjBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAogCS8qIExhdGNoIHRoZSB1cGRhdGUgYml0cyAqLwotCXJlZyA9IHdtODk2MF9yZWFkKGNvZGVjLCBXTTg5NjBfTElOVk9MKTsKLQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9MSU5WT0wsIHJlZyB8IDB4MTAwKTsKLQlyZWcgPSB3bTg5NjBfcmVhZChjb2RlYywgV004OTYwX1JJTlZPTCk7Ci0Jd204OTYwX3dyaXRlKGNvZGVjLCBXTTg5NjBfUklOVk9MLCByZWcgfCAweDEwMCk7Ci0JcmVnID0gd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9MQURDKTsKLQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9MQURDLCByZWcgfCAweDEwMCk7Ci0JcmVnID0gd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9SQURDKTsKLQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9SQURDLCByZWcgfCAweDEwMCk7Ci0JcmVnID0gd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9MREFDKTsKLQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9MREFDLCByZWcgfCAweDEwMCk7Ci0JcmVnID0gd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9SREFDKTsKLQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9SREFDLCByZWcgfCAweDEwMCk7Ci0JcmVnID0gd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9MT1VUMSk7Ci0Jd204OTYwX3dyaXRlKGNvZGVjLCBXTTg5NjBfTE9VVDEsIHJlZyB8IDB4MTAwKTsKLQlyZWcgPSB3bTg5NjBfcmVhZChjb2RlYywgV004OTYwX1JPVVQxKTsKLQl3bTg5NjBfd3JpdGUoY29kZWMsIFdNODk2MF9ST1VUMSwgcmVnIHwgMHgxMDApOwotCXJlZyA9IHdtODk2MF9yZWFkKGNvZGVjLCBXTTg5NjBfTE9VVDIpOwotCXdtODk2MF93cml0ZShjb2RlYywgV004OTYwX0xPVVQyLCByZWcgfCAweDEwMCk7Ci0JcmVnID0gd204OTYwX3JlYWQoY29kZWMsIFdNODk2MF9ST1VUMik7Ci0Jd204OTYwX3dyaXRlKGNvZGVjLCBXTTg5NjBfUk9VVDIsIHJlZyB8IDB4MTAwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MF9MSU5WT0wpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9MSU5WT0wsIHJlZyB8IDB4MTAwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MF9SSU5WT0wpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9SSU5WT0wsIHJlZyB8IDB4MTAwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MF9MQURDKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfTEFEQywgcmVnIHwgMHgxMDApOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYwX1JBREMpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9SQURDLCByZWcgfCAweDEwMCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjBfTERBQyk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTYwX0xEQUMsIHJlZyB8IDB4MTAwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MF9SREFDKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfUkRBQywgcmVnIHwgMHgxMDApOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYwX0xPVVQxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfTE9VVDEsIHJlZyB8IDB4MTAwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MF9ST1VUMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTYwX1JPVVQxLCByZWcgfCAweDEwMCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjBfTE9VVDIpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9MT1VUMiwgcmVnIHwgMHgxMDApOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYwX1JPVVQyKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjBfUk9VVDIsIHJlZyB8IDB4MTAwKTsKIAogCXdtODk2MF9jb2RlYyA9IGNvZGVjOwogCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyOwogCX0KIAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg5NjBfZGFpKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7Ci0JCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX2NvZGVjOwogCX0KIAogCXJldHVybiAwOworCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwlrZnJlZSh3bTg5NjApOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHdtODk2MF91bnJlZ2lzdGVyKHN0cnVjdCB3bTg5NjBfcHJpdiAqd204OTYwKQpAQCAtOTEwLDE0ICs4NjcsMTMgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAljb2RlYyA9ICZ3bTg5NjAtPmNvZGVjOwotCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODk2MCk7CiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKIAogCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CiAKLQlyZXR1cm4gd204OTYwX3JlZ2lzdGVyKHdtODk2MCk7CisJcmV0dXJuIHdtODk2MF9yZWdpc3Rlcih3bTg5NjAsIFNORF9TT0NfSTJDKTsKIH0KIAogc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTYwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKQEAgLTkyNyw2ICs4ODMsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB3bTg5NjBfaTJjX3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlyZXR1cm4gc25kX3NvY19zdXNwZW5kX2RldmljZSgmY2xpZW50LT5kZXYpOworfQorCitzdGF0aWMgaW50IHdtODk2MF9pMmNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJcmV0dXJuIHNuZF9zb2NfcmVzdW1lX2RldmljZSgmY2xpZW50LT5kZXYpOworfQorI2Vsc2UKKyNkZWZpbmUgd204OTYwX2kyY19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204OTYwX2kyY19yZXN1bWUgTlVMTAorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg5NjBfaTJjX2lkW10gPSB7CiAJeyAid204OTYwIiwgMCB9LAogCXsgfQpAQCAtOTQwLDYgKzkxMSw4IEBACiAJfSwKIAkucHJvYmUgPSAgICB3bTg5NjBfaTJjX3Byb2JlLAogCS5yZW1vdmUgPSAgIF9fZGV2ZXhpdF9wKHdtODk2MF9pMmNfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9ICB3bTg5NjBfaTJjX3N1c3BlbmQsCisJLnJlc3VtZSA9ICAgd204OTYwX2kyY19yZXN1bWUsCiAJLmlkX3RhYmxlID0gd204OTYwX2kyY19pZCwKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMzAzMjAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MS5jCkBAIC0wLDAgKzEsMTI2NSBAQAorLyoKKyAqIHdtODk2MS5jICAtLSAgV004OTYxIEFMU0EgU29DIEF1ZGlvIGRyaXZlcgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93bgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ3VycmVudGx5IHVuaW1wbGVtZW50ZWQgZmVhdHVyZXM6CisgKiAgLSBBTEMKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisKKyNpbmNsdWRlICJ3bTg5NjEuaCIKKworI2RlZmluZSBXTTg5NjFfTUFYX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgMHhGQworCitzdGF0aWMgdTE2IHdtODk2MV9yZWdfZGVmYXVsdHNbXSA9IHsKKwkweDAwOUYsICAgICAvKiBSMCAgIC0gTGVmdCBJbnB1dCB2b2x1bWUgKi8KKwkweDAwOUYsICAgICAvKiBSMSAgIC0gUmlnaHQgSW5wdXQgdm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjIgICAtIExPVVQxIHZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFIzICAgLSBST1VUMSB2b2x1bWUgKi8KKwkweDAwMjAsICAgICAvKiBSNCAgIC0gQ2xvY2tpbmcxICovCisJMHgwMDA4LCAgICAgLyogUjUgICAtIEFEQyAmIERBQyBDb250cm9sIDEgKi8KKwkweDAwMDAsICAgICAvKiBSNiAgIC0gQURDICYgREFDIENvbnRyb2wgMiAqLworCTB4MDAwQSwgICAgIC8qIFI3ICAgLSBBdWRpbyBJbnRlcmZhY2UgMCAqLworCTB4MDFGNCwgICAgIC8qIFI4ICAgLSBDbG9ja2luZzIgKi8KKwkweDAwMDAsICAgICAvKiBSOSAgIC0gQXVkaW8gSW50ZXJmYWNlIDEgKi8KKwkweDAwRkYsICAgICAvKiBSMTAgIC0gTGVmdCBEQUMgdm9sdW1lICovCisJMHgwMEZGLCAgICAgLyogUjExICAtIFJpZ2h0IERBQyB2b2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSMTIgKi8KKwkweDAwMDAsICAgICAvKiBSMTMgKi8KKwkweDAwNDAsICAgICAvKiBSMTQgIC0gQXVkaW8gSW50ZXJmYWNlIDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTUgIC0gU29mdHdhcmUgUmVzZXQgKi8KKwkweDAwMDAsICAgICAvKiBSMTYgKi8KKwkweDAwN0IsICAgICAvKiBSMTcgIC0gQUxDMSAqLworCTB4MDAwMCwgICAgIC8qIFIxOCAgLSBBTEMyICovCisJMHgwMDMyLCAgICAgLyogUjE5ICAtIEFMQzMgKi8KKwkweDAwMDAsICAgICAvKiBSMjAgIC0gTm9pc2UgR2F0ZSAqLworCTB4MDBDMCwgICAgIC8qIFIyMSAgLSBMZWZ0IEFEQyB2b2x1bWUgKi8KKwkweDAwQzAsICAgICAvKiBSMjIgIC0gUmlnaHQgQURDIHZvbHVtZSAqLworCTB4MDEyMCwgICAgIC8qIFIyMyAgLSBBZGRpdGlvbmFsIGNvbnRyb2woMSkgKi8KKwkweDAwMDAsICAgICAvKiBSMjQgIC0gQWRkaXRpb25hbCBjb250cm9sKDIpICovCisJMHgwMDAwLCAgICAgLyogUjI1ICAtIFB3ciBNZ210ICgxKSAqLworCTB4MDAwMCwgICAgIC8qIFIyNiAgLSBQd3IgTWdtdCAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSMjcgIC0gQWRkaXRpb25hbCBDb250cm9sICgzKSAqLworCTB4MDAwMCwgICAgIC8qIFIyOCAgLSBBbnRpLXBvcCAqLworCTB4MDAwMCwgICAgIC8qIFIyOSAqLworCTB4MDA1RiwgICAgIC8qIFIzMCAgLSBDbG9ja2luZyAzICovCisJMHgwMDAwLCAgICAgLyogUjMxICovCisJMHgwMDAwLCAgICAgLyogUjMyICAtIEFEQ0wgc2lnbmFsIHBhdGggKi8KKwkweDAwMDAsICAgICAvKiBSMzMgIC0gQURDUiBzaWduYWwgcGF0aCAqLworCTB4MDAwMCwgICAgIC8qIFIzNCAqLworCTB4MDAwMCwgICAgIC8qIFIzNSAqLworCTB4MDAwMCwgICAgIC8qIFIzNiAqLworCTB4MDAwMCwgICAgIC8qIFIzNyAqLworCTB4MDAwMCwgICAgIC8qIFIzOCAqLworCTB4MDAwMCwgICAgIC8qIFIzOSAqLworCTB4MDAwMCwgICAgIC8qIFI0MCAgLSBMT1VUMiB2b2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSNDEgIC0gUk9VVDIgdm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjQyICovCisJMHgwMDAwLCAgICAgLyogUjQzICovCisJMHgwMDAwLCAgICAgLyogUjQ0ICovCisJMHgwMDAwLCAgICAgLyogUjQ1ICovCisJMHgwMDAwLCAgICAgLyogUjQ2ICovCisJMHgwMDAwLCAgICAgLyogUjQ3ICAtIFB3ciBNZ210ICgzKSAqLworCTB4MDAyMywgICAgIC8qIFI0OCAgLSBBZGRpdGlvbmFsIENvbnRyb2wgKDQpICovCisJMHgwMDAwLCAgICAgLyogUjQ5ICAtIENsYXNzIEQgQ29udHJvbCAxICovCisJMHgwMDAwLCAgICAgLyogUjUwICovCisJMHgwMDAzLCAgICAgLyogUjUxICAtIENsYXNzIEQgQ29udHJvbCAyICovCisJMHgwMDAwLCAgICAgLyogUjUyICovCisJMHgwMDAwLCAgICAgLyogUjUzICovCisJMHgwMDAwLCAgICAgLyogUjU0ICovCisJMHgwMDAwLCAgICAgLyogUjU1ICovCisJMHgwMTA2LCAgICAgLyogUjU2ICAtIENsb2NraW5nIDQgKi8KKwkweDAwMDAsICAgICAvKiBSNTcgIC0gRFNQIFNpZGV0b25lIDAgKi8KKwkweDAwMDAsICAgICAvKiBSNTggIC0gRFNQIFNpZGV0b25lIDEgKi8KKwkweDAwMDAsICAgICAvKiBSNTkgKi8KKwkweDAwMDAsICAgICAvKiBSNjAgIC0gREMgU2Vydm8gMCAqLworCTB4MDAwMCwgICAgIC8qIFI2MSAgLSBEQyBTZXJ2byAxICovCisJMHgwMDAwLCAgICAgLyogUjYyICovCisJMHgwMTVFLCAgICAgLyogUjYzICAtIERDIFNlcnZvIDMgKi8KKwkweDAwMTAsICAgICAvKiBSNjQgKi8KKwkweDAwMTAsICAgICAvKiBSNjUgIC0gREMgU2Vydm8gNSAqLworCTB4MDAwMCwgICAgIC8qIFI2NiAqLworCTB4MDAwMSwgICAgIC8qIFI2NyAqLworCTB4MDAwMywgICAgIC8qIFI2OCAgLSBBbmFsb2d1ZSBQR0EgQmlhcyAqLworCTB4MDAwMCwgICAgIC8qIFI2OSAgLSBBbmFsb2d1ZSBIUCAwICovCisJMHgwMDYwLCAgICAgLyogUjcwICovCisJMHgwMUZCLCAgICAgLyogUjcxICAtIEFuYWxvZ3VlIEhQIDIgKi8KKwkweDAwMDAsICAgICAvKiBSNzIgIC0gQ2hhcmdlIFB1bXAgMSAqLworCTB4MDA2NSwgICAgIC8qIFI3MyAqLworCTB4MDA1RiwgICAgIC8qIFI3NCAqLworCTB4MDA1OSwgICAgIC8qIFI3NSAqLworCTB4MDA2QiwgICAgIC8qIFI3NiAqLworCTB4MDAzOCwgICAgIC8qIFI3NyAqLworCTB4MDAwQywgICAgIC8qIFI3OCAqLworCTB4MDAwQSwgICAgIC8qIFI3OSAqLworCTB4MDA2QiwgICAgIC8qIFI4MCAqLworCTB4MDAwMCwgICAgIC8qIFI4MSAqLworCTB4MDAwMCwgICAgIC8qIFI4MiAgLSBDaGFyZ2UgUHVtcCBCICovCisJMHgwMDg3LCAgICAgLyogUjgzICovCisJMHgwMDAwLCAgICAgLyogUjg0ICovCisJMHgwMDVDLCAgICAgLyogUjg1ICovCisJMHgwMDAwLCAgICAgLyogUjg2ICovCisJMHgwMDAwLCAgICAgLyogUjg3ICAtIFdyaXRlIFNlcXVlbmNlciAxICovCisJMHgwMDAwLCAgICAgLyogUjg4ICAtIFdyaXRlIFNlcXVlbmNlciAyICovCisJMHgwMDAwLCAgICAgLyogUjg5ICAtIFdyaXRlIFNlcXVlbmNlciAzICovCisJMHgwMDAwLCAgICAgLyogUjkwICAtIFdyaXRlIFNlcXVlbmNlciA0ICovCisJMHgwMDAwLCAgICAgLyogUjkxICAtIFdyaXRlIFNlcXVlbmNlciA1ICovCisJMHgwMDAwLCAgICAgLyogUjkyICAtIFdyaXRlIFNlcXVlbmNlciA2ICovCisJMHgwMDAwLCAgICAgLyogUjkzICAtIFdyaXRlIFNlcXVlbmNlciA3ICovCisJMHgwMDAwLCAgICAgLyogUjk0ICovCisJMHgwMDAwLCAgICAgLyogUjk1ICovCisJMHgwMDAwLCAgICAgLyogUjk2ICovCisJMHgwMDAwLCAgICAgLyogUjk3ICovCisJMHgwMDAwLCAgICAgLyogUjk4ICovCisJMHgwMDAwLCAgICAgLyogUjk5ICovCisJMHgwMDAwLCAgICAgLyogUjEwMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTAyICovCisJMHgwMDAwLCAgICAgLyogUjEwMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMDQgKi8KKwkweDAwMDAsICAgICAvKiBSMTA1ICovCisJMHgwMDAwLCAgICAgLyogUjEwNiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDcgKi8KKwkweDAwMDAsICAgICAvKiBSMTA4ICovCisJMHgwMDAwLCAgICAgLyogUjEwOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTExICovCisJMHgwMDAwLCAgICAgLyogUjExMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMTMgKi8KKwkweDAwMDAsICAgICAvKiBSMTE0ICovCisJMHgwMDAwLCAgICAgLyogUjExNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTYgKi8KKwkweDAwMDAsICAgICAvKiBSMTE3ICovCisJMHgwMDAwLCAgICAgLyogUjExOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTkgKi8KKwkweDAwMDAsICAgICAvKiBSMTIwICovCisJMHgwMDAwLCAgICAgLyogUjEyMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjIgKi8KKwkweDAwMDAsICAgICAvKiBSMTIzICovCisJMHgwMDAwLCAgICAgLyogUjEyNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjUgKi8KKwkweDAwMDAsICAgICAvKiBSMTI2ICovCisJMHgwMDAwLCAgICAgLyogUjEyNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMjggKi8KKwkweDAwMDAsICAgICAvKiBSMTI5ICovCisJMHgwMDAwLCAgICAgLyogUjEzMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzEgKi8KKwkweDAwMDAsICAgICAvKiBSMTMyICovCisJMHgwMDAwLCAgICAgLyogUjEzMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMzQgKi8KKwkweDAwMDAsICAgICAvKiBSMTM1ICovCisJMHgwMDAwLCAgICAgLyogUjEzNiAqLworCTB4MDAwMCwgICAgIC8qIFIxMzcgKi8KKwkweDAwMDAsICAgICAvKiBSMTM4ICovCisJMHgwMDAwLCAgICAgLyogUjEzOSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDAgKi8KKwkweDAwMDAsICAgICAvKiBSMTQxICovCisJMHgwMDAwLCAgICAgLyogUjE0MiAqLworCTB4MDAwMCwgICAgIC8qIFIxNDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ0ICovCisJMHgwMDAwLCAgICAgLyogUjE0NSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDYgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ3ICovCisJMHgwMDAwLCAgICAgLyogUjE0OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDkgKi8KKwkweDAwMDAsICAgICAvKiBSMTUwICovCisJMHgwMDAwLCAgICAgLyogUjE1MSAqLworCTB4MDAwMCwgICAgIC8qIFIxNTIgKi8KKwkweDAwMDAsICAgICAvKiBSMTUzICovCisJMHgwMDAwLCAgICAgLyogUjE1NCAqLworCTB4MDAwMCwgICAgIC8qIFIxNTUgKi8KKwkweDAwMDAsICAgICAvKiBSMTU2ICovCisJMHgwMDAwLCAgICAgLyogUjE1NyAqLworCTB4MDAwMCwgICAgIC8qIFIxNTggKi8KKwkweDAwMDAsICAgICAvKiBSMTU5ICovCisJMHgwMDAwLCAgICAgLyogUjE2MCAqLworCTB4MDAwMCwgICAgIC8qIFIxNjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTYyICovCisJMHgwMDAwLCAgICAgLyogUjE2MyAqLworCTB4MDAwMCwgICAgIC8qIFIxNjQgKi8KKwkweDAwMDAsICAgICAvKiBSMTY1ICovCisJMHgwMDAwLCAgICAgLyogUjE2NiAqLworCTB4MDAwMCwgICAgIC8qIFIxNjcgKi8KKwkweDAwMDAsICAgICAvKiBSMTY4ICovCisJMHgwMDAwLCAgICAgLyogUjE2OSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzAgKi8KKwkweDAwMDAsICAgICAvKiBSMTcxICovCisJMHgwMDAwLCAgICAgLyogUjE3MiAqLworCTB4MDAwMCwgICAgIC8qIFIxNzMgKi8KKwkweDAwMDAsICAgICAvKiBSMTc0ICovCisJMHgwMDAwLCAgICAgLyogUjE3NSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzYgKi8KKwkweDAwMDAsICAgICAvKiBSMTc3ICovCisJMHgwMDAwLCAgICAgLyogUjE3OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNzkgKi8KKwkweDAwMDAsICAgICAvKiBSMTgwICovCisJMHgwMDAwLCAgICAgLyogUjE4MSAqLworCTB4MDAwMCwgICAgIC8qIFIxODIgKi8KKwkweDAwMDAsICAgICAvKiBSMTgzICovCisJMHgwMDAwLCAgICAgLyogUjE4NCAqLworCTB4MDAwMCwgICAgIC8qIFIxODUgKi8KKwkweDAwMDAsICAgICAvKiBSMTg2ICovCisJMHgwMDAwLCAgICAgLyogUjE4NyAqLworCTB4MDAwMCwgICAgIC8qIFIxODggKi8KKwkweDAwMDAsICAgICAvKiBSMTg5ICovCisJMHgwMDAwLCAgICAgLyogUjE5MCAqLworCTB4MDAwMCwgICAgIC8qIFIxOTEgKi8KKwkweDAwMDAsICAgICAvKiBSMTkyICovCisJMHgwMDAwLCAgICAgLyogUjE5MyAqLworCTB4MDAwMCwgICAgIC8qIFIxOTQgKi8KKwkweDAwMDAsICAgICAvKiBSMTk1ICovCisJMHgwMDMwLCAgICAgLyogUjE5NiAqLworCTB4MDAwNiwgICAgIC8qIFIxOTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTk4ICovCisJMHgwMDYwLCAgICAgLyogUjE5OSAqLworCTB4MDAwMCwgICAgIC8qIFIyMDAgKi8KKwkweDAwM0YsICAgICAvKiBSMjAxICovCisJMHgwMDAwLCAgICAgLyogUjIwMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMDMgKi8KKwkweDAwMDAsICAgICAvKiBSMjA0ICovCisJMHgwMDAxLCAgICAgLyogUjIwNSAqLworCTB4MDAwMCwgICAgIC8qIFIyMDYgKi8KKwkweDAxODEsICAgICAvKiBSMjA3ICovCisJMHgwMDA1LCAgICAgLyogUjIwOCAqLworCTB4MDAwOCwgICAgIC8qIFIyMDkgKi8KKwkweDAwMDgsICAgICAvKiBSMjEwICovCisJMHgwMDAwLCAgICAgLyogUjIxMSAqLworCTB4MDEzQiwgICAgIC8qIFIyMTIgKi8KKwkweDAwMDAsICAgICAvKiBSMjEzICovCisJMHgwMDAwLCAgICAgLyogUjIxNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTUgKi8KKwkweDAwMDAsICAgICAvKiBSMjE2ICovCisJMHgwMDcwLCAgICAgLyogUjIxNyAqLworCTB4MDAwMCwgICAgIC8qIFIyMTggKi8KKwkweDAwMDAsICAgICAvKiBSMjE5ICovCisJMHgwMDAwLCAgICAgLyogUjIyMCAqLworCTB4MDAwMCwgICAgIC8qIFIyMjEgKi8KKwkweDAwMDAsICAgICAvKiBSMjIyICovCisJMHgwMDAzLCAgICAgLyogUjIyMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMjQgKi8KKwkweDAwMDAsICAgICAvKiBSMjI1ICovCisJMHgwMDAxLCAgICAgLyogUjIyNiAqLworCTB4MDAwOCwgICAgIC8qIFIyMjcgKi8KKwkweDAwMDAsICAgICAvKiBSMjI4ICovCisJMHgwMDAwLCAgICAgLyogUjIyOSAqLworCTB4MDAwMCwgICAgIC8qIFIyMzAgKi8KKwkweDAwMDAsICAgICAvKiBSMjMxICovCisJMHgwMDA0LCAgICAgLyogUjIzMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMzMgKi8KKwkweDAwMDAsICAgICAvKiBSMjM0ICovCisJMHgwMDAwLCAgICAgLyogUjIzNSAqLworCTB4MDAwMCwgICAgIC8qIFIyMzYgKi8KKwkweDAwMDAsICAgICAvKiBSMjM3ICovCisJMHgwMDgwLCAgICAgLyogUjIzOCAqLworCTB4MDAwMCwgICAgIC8qIFIyMzkgKi8KKwkweDAwMDAsICAgICAvKiBSMjQwICovCisJMHgwMDAwLCAgICAgLyogUjI0MSAqLworCTB4MDAwMCwgICAgIC8qIFIyNDIgKi8KKwkweDAwMDAsICAgICAvKiBSMjQzICovCisJMHgwMDAwLCAgICAgLyogUjI0NCAqLworCTB4MDA1MiwgICAgIC8qIFIyNDUgKi8KKwkweDAxMTAsICAgICAvKiBSMjQ2ICovCisJMHgwMDQwLCAgICAgLyogUjI0NyAqLworCTB4MDAwMCwgICAgIC8qIFIyNDggKi8KKwkweDAwMzAsICAgICAvKiBSMjQ5ICovCisJMHgwMDAwLCAgICAgLyogUjI1MCAqLworCTB4MDAwMCwgICAgIC8qIFIyNTEgKi8KKwkweDAwMDEsICAgICAvKiBSMjUyIC0gR2VuZXJhbCB0ZXN0IDEgKi8KK307CisKK3N0cnVjdCB3bTg5NjFfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJaW50IHN5c2NsazsKKwl1MTYgcmVnX2NhY2hlW1dNODk2MV9NQVhfUkVHSVNURVJdOworfTsKKworc3RhdGljIGludCB3bTg5NjFfdm9sYXRpbGVfcmVnaXN0ZXIodW5zaWduZWQgaW50IHJlZykKK3sKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgV004OTYxX1NPRlRXQVJFX1JFU0VUOgorCWNhc2UgV004OTYxX1dSSVRFX1NFUVVFTkNFUl83OgorCWNhc2UgV004OTYxX0RDX1NFUlZPXzE6CisJCXJldHVybiAxOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHdtODk2MV9yZXNldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MV9TT0ZUV0FSRV9SRVNFVCwgMCk7Cit9CisKKy8qCisgKiBUaGUgaGVhZHBob25lIG91dHB1dCBzdXBwb3J0cyBzcGVjaWFsIGFudGktcG9wIHNlcXVlbmNlcyBnaXZpbmcKKyAqIHNpbGVudCBwb3dlciB1cCBhbmQgcG93ZXIgZG93bi4KKyAqLworc3RhdGljIGludCB3bTg5NjFfaHBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXUxNiBocF9yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MV9BTkFMT0dVRV9IUF8wKTsKKwl1MTYgY3BfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjFfQ0hBUkdFX1BVTVBfMSk7CisJdTE2IHB3cl9yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MV9QV1JfTUdNVF8yKTsKKwl1MTYgZGNzX3JlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYxX0RDX1NFUlZPXzEpOworCWludCB0aW1lb3V0ID0gNTAwOworCisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSB7CisJCS8qIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IGlzIHNob3J0ZWQgKi8KKwkJaHBfcmVnICY9IH4oV004OTYxX0hQUl9STVZfU0hPUlQgfCBXTTg5NjFfSFBMX1JNVl9TSE9SVCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MV9BTkFMT0dVRV9IUF8wLCBocF9yZWcpOworCisJCS8qIEVuYWJsZSB0aGUgY2hhcmdlIHB1bXAgKi8KKwkJY3BfcmVnIHw9IFdNODk2MV9DUF9FTkE7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MV9DSEFSR0VfUFVNUF8xLCBjcF9yZWcpOworCQltZGVsYXkoNSk7CisKKwkJLyogRW5hYmxlIHRoZSBQR0EgKi8KKwkJcHdyX3JlZyB8PSBXTTg5NjFfTE9VVDFfUEdBIHwgV004OTYxX1JPVVQxX1BHQTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX1BXUl9NR01UXzIsIHB3cl9yZWcpOworCisJCS8qIEVuYWJsZSB0aGUgYW1wbGlmaWVyICovCisJCWhwX3JlZyB8PSBXTTg5NjFfSFBSX0VOQSB8IFdNODk2MV9IUExfRU5BOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjFfQU5BTE9HVUVfSFBfMCwgaHBfcmVnKTsKKworCQkvKiBTZWNvbmQgc3RhZ2UgZW5hYmxlICovCisJCWhwX3JlZyB8PSBXTTg5NjFfSFBSX0VOQV9ETFkgfCBXTTg5NjFfSFBMX0VOQV9ETFk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MV9BTkFMT0dVRV9IUF8wLCBocF9yZWcpOworCisJCS8qIEVuYWJsZSB0aGUgREMgc2Vydm8gJiB0cmlnZ2VyIHN0YXJ0dXAgKi8KKwkJZGNzX3JlZyB8PQorCQkJV004OTYxX0RDU19FTkFfQ0hBTl9IUFIgfCBXTTg5NjFfRENTX1RSSUdfU1RBUlRVUF9IUFIgfAorCQkJV004OTYxX0RDU19FTkFfQ0hBTl9IUEwgfCBXTTg5NjFfRENTX1RSSUdfU1RBUlRVUF9IUEw7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkVuYWJsaW5nIERDIHNlcnZvXG4iKTsKKworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjFfRENfU0VSVk9fMSwgZGNzX3JlZyk7CisJCWRvIHsKKwkJCW1zbGVlcCgxKTsKKwkJCWRjc19yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MV9EQ19TRVJWT18xKTsKKwkJfSB3aGlsZSAoLS10aW1lb3V0ICYmCisJCQkgZGNzX3JlZyAmIChXTTg5NjFfRENTX1RSSUdfU1RBUlRVUF9IUFIgfAorCQkJCVdNODk2MV9EQ1NfVFJJR19TVEFSVFVQX0hQTCkpOworCQlpZiAoZGNzX3JlZyAmIChXTTg5NjFfRENTX1RSSUdfU1RBUlRVUF9IUFIgfAorCQkJICAgICAgIFdNODk2MV9EQ1NfVFJJR19TVEFSVFVQX0hQTCkpCisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJEQyBzZXJ2byB0aW1lZCBvdXRcbiIpOworCQllbHNlCisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJEQyBzZXJ2byBzdGFydHVwIGNvbXBsZXRlXG4iKTsKKworCQkvKiBFbmFibGUgdGhlIG91dHB1dCBzdGFnZSAqLworCQlocF9yZWcgfD0gV004OTYxX0hQUl9FTkFfT1VUUCB8IFdNODk2MV9IUExfRU5BX09VVFA7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MV9BTkFMT0dVRV9IUF8wLCBocF9yZWcpOworCisJCS8qIFJlbW92ZSB0aGUgc2hvcnQgb24gdGhlIG91dHB1dCBzdGFnZSAqLworCQlocF9yZWcgfD0gV004OTYxX0hQUl9STVZfU0hPUlQgfCBXTTg5NjFfSFBMX1JNVl9TSE9SVDsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX0FOQUxPR1VFX0hQXzAsIGhwX3JlZyk7CisJfQorCisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTUQpIHsKKwkJLyogU2hvcnQgdGhlIG91dHB1dCAqLworCQlocF9yZWcgJj0gfihXTTg5NjFfSFBSX1JNVl9TSE9SVCB8IFdNODk2MV9IUExfUk1WX1NIT1JUKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX0FOQUxPR1VFX0hQXzAsIGhwX3JlZyk7CisKKwkJLyogRGlzYWJsZSB0aGUgb3V0cHV0IHN0YWdlICovCisJCWhwX3JlZyAmPSB+KFdNODk2MV9IUFJfRU5BX09VVFAgfCBXTTg5NjFfSFBMX0VOQV9PVVRQKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX0FOQUxPR1VFX0hQXzAsIGhwX3JlZyk7CisKKwkJLyogRGlzYWJsZSBEQyBvZmZzZXQgY2FuY2VsbGF0aW9uICovCisJCWRjc19yZWcgJj0gfihXTTg5NjFfRENTX0VOQV9DSEFOX0hQUiB8CisJCQkgICAgIFdNODk2MV9EQ1NfRU5BX0NIQU5fSFBMKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX0RDX1NFUlZPXzEsIGRjc19yZWcpOworCisJCS8qIEZpbmlzaCB1cCAqLworCQlocF9yZWcgJj0gfihXTTg5NjFfSFBSX0VOQV9ETFkgfCBXTTg5NjFfSFBSX0VOQSB8CisJCQkgICAgV004OTYxX0hQTF9FTkFfRExZIHwgV004OTYxX0hQTF9FTkEpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjFfQU5BTE9HVUVfSFBfMCwgaHBfcmVnKTsKKworCQkvKiBEaXNhYmxlIHRoZSBQR0EgKi8KKwkJcHdyX3JlZyAmPSB+KFdNODk2MV9MT1VUMV9QR0EgfCBXTTg5NjFfUk9VVDFfUEdBKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX1BXUl9NR01UXzIsIHB3cl9yZWcpOworCisJCS8qIERpc2FibGUgdGhlIGNoYXJnZSBwdW1wICovCisJCWRldl9kYmcoY29kZWMtPmRldiwgIkRpc2FibGluZyBjaGFyZ2UgcHVtcFxuIik7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MV9DSEFSR0VfUFVNUF8xLAorCQkJICAgICBjcF9yZWcgJiB+V004OTYxX0NQX0VOQSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTYxX3Nwa19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXUxNiBwd3JfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjFfUFdSX01HTVRfMik7CisJdTE2IHNwa19yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MV9DTEFTU19EX0NPTlRST0xfMSk7CisKKwlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTVUpIHsKKwkJLyogRW5hYmxlIHRoZSBQR0EgKi8KKwkJcHdyX3JlZyB8PSBXTTg5NjFfU1BLTF9QR0EgfCBXTTg5NjFfU1BLUl9QR0E7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MV9QV1JfTUdNVF8yLCBwd3JfcmVnKTsKKworCQkvKiBFbmFibGUgdGhlIGFtcGxpZmllciAqLworCQlzcGtfcmVnIHw9IFdNODk2MV9TUEtMX0VOQSB8IFdNODk2MV9TUEtSX0VOQTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX0NMQVNTX0RfQ09OVFJPTF8xLCBzcGtfcmVnKTsKKwl9CisKKwlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNRCkgeworCQkvKiBFbmFibGUgdGhlIGFtcGxpZmllciAqLworCQlzcGtfcmVnICY9IH4oV004OTYxX1NQS0xfRU5BIHwgV004OTYxX1NQS1JfRU5BKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX0NMQVNTX0RfQ09OVFJPTF8xLCBzcGtfcmVnKTsKKworCQkvKiBFbmFibGUgdGhlIFBHQSAqLworCQlwd3JfcmVnICY9IH4oV004OTYxX1NQS0xfUEdBIHwgV004OTYxX1NQS1JfUEdBKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX1BXUl9NR01UXzIsIHB3cl9yZWcpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYWRjX2hwZl90ZXh0W10gPSB7CisJIkhpLWZpIiwgIlZvaWNlIDEiLCAiVm9pY2UgMiIsICJWb2ljZSAzIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWRjX2hwZiA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk2MV9BRENfREFDX0NPTlRST0xfMiwgNywgNCwgYWRjX2hwZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRhY19kZWVtcGhfdGV4dFtdID0geworCSJOb25lIiwgIjMya0h6IiwgIjQ0LjFrSHoiLCAiNDhrSHoiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkYWNfZGVlbXBoID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTYxX0FEQ19EQUNfQ09OVFJPTF8xLCAxLCA0LCBkYWNfZGVlbXBoX3RleHQpOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUob3V0X3RsdiwgLTEyMTAwLCAxMDAsIDEpOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGhwX3NlY190bHYsIC03MDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYWRjX3RsdiwgLTcyMDAsIDc1LCAxKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShzaWRldG9uZV90bHYsIC0zNjAwLCAzMDAsIDApOworc3RhdGljIHVuc2lnbmVkIGludCBib29zdF90bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCg0KSwKKwkwLCAwLCBUTFZfREJfU0NBTEVfSVRFTSgwLCAgMCwgMCksCisJMSwgMSwgVExWX0RCX1NDQUxFX0lURU0oMTMsIDAsIDApLAorCTIsIDIsIFRMVl9EQl9TQ0FMRV9JVEVNKDIwLCAwLCAwKSwKKwkzLCAzLCBUTFZfREJfU0NBTEVfSVRFTSgyOSwgMCwgMCksCit9Oworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHBnYV90bHYsIC0yMzI1LCA3NSwgMCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NjFfc25kX2NvbnRyb2xzW10gPSB7CitTT0NfRE9VQkxFX1JfVExWKCJIZWFkcGhvbmUgVm9sdW1lIiwgV004OTYxX0xPVVQxX1ZPTFVNRSwgV004OTYxX1JPVVQxX1ZPTFVNRSwKKwkJIDAsIDEyNywgMCwgb3V0X3RsdiksCitTT0NfRE9VQkxFX1RMVigiSGVhZHBob25lIFNlY29uZGFyeSBWb2x1bWUiLCBXTTg5NjFfQU5BTE9HVUVfSFBfMiwKKwkgICAgICAgNiwgMywgNywgMCwgaHBfc2VjX3RsdiksCitTT0NfRE9VQkxFX1IoIkhlYWRwaG9uZSBaQyBTd2l0Y2giLCBXTTg5NjFfTE9VVDFfVk9MVU1FLCBXTTg5NjFfUk9VVDFfVk9MVU1FLAorCSAgICAgNywgMSwgMCksCisKK1NPQ19ET1VCTEVfUl9UTFYoIlNwZWFrZXIgVm9sdW1lIiwgV004OTYxX0xPVVQyX1ZPTFVNRSwgV004OTYxX1JPVVQyX1ZPTFVNRSwKKwkJIDAsIDEyNywgMCwgb3V0X3RsdiksCitTT0NfRE9VQkxFX1IoIlNwZWFrZXIgWkMgU3dpdGNoIiwgV004OTYxX0xPVVQyX1ZPTFVNRSwgV004OTYxX1JPVVQyX1ZPTFVNRSwKKwkgICA3LCAxLCAwKSwKK1NPQ19TSU5HTEUoIlNwZWFrZXIgQUMgR2FpbiIsIFdNODk2MV9DTEFTU19EX0NPTlRST0xfMiwgMCwgNywgMCksCisKK1NPQ19TSU5HTEUoIkRBQyB4MTI4IE9TUiBTd2l0Y2giLCBXTTg5NjFfQURDX0RBQ19DT05UUk9MXzIsIDAsIDEsIDApLAorU09DX0VOVU0oIkRBQyBEZWVtcGhhc2lzIiwgZGFjX2RlZW1waCksCitTT0NfU0lOR0xFKCJEQUMgU29mdCBNdXRlIFN3aXRjaCIsIFdNODk2MV9BRENfREFDX0NPTlRST0xfMiwgMywgMSwgMCksCisKK1NPQ19ET1VCTEVfUl9UTFYoIlNpZGV0b25lIFZvbHVtZSIsIFdNODk2MV9EU1BfU0lERVRPTkVfMCwKKwkJIFdNODk2MV9EU1BfU0lERVRPTkVfMSwgNCwgMTIsIDAsIHNpZGV0b25lX3RsdiksCisKK1NPQ19TSU5HTEUoIkFEQyBIaWdoIFBhc3MgRmlsdGVyIFN3aXRjaCIsIFdNODk2MV9BRENfREFDX0NPTlRST0xfMSwgMCwgMSwgMCksCitTT0NfRU5VTSgiQURDIEhpZ2ggUGFzcyBGaWx0ZXIgTW9kZSIsIGFkY19ocGYpLAorCitTT0NfRE9VQkxFX1JfVExWKCJDYXB0dXJlIFZvbHVtZSIsCisJCSBXTTg5NjFfTEVGVF9BRENfVk9MVU1FLCBXTTg5NjFfUklHSFRfQURDX1ZPTFVNRSwKKwkJIDEsIDExOSwgMCwgYWRjX3RsdiksCitTT0NfRE9VQkxFX1JfVExWKCJDYXB0dXJlIEJvb3N0IFZvbHVtZSIsCisJCSBXTTg5NjFfQURDTF9TSUdOQUxfUEFUSCwgV004OTYxX0FEQ1JfU0lHTkFMX1BBVEgsCisJCSA0LCAzLCAwLCBib29zdF90bHYpLAorU09DX0RPVUJMRV9SX1RMVigiQ2FwdHVyZSBQR0EgVm9sdW1lIiwKKwkJIFdNODk2MV9MRUZUX0lOUFVUX1ZPTFVNRSwgV004OTYxX1JJR0hUX0lOUFVUX1ZPTFVNRSwKKwkJIDAsIDYyLCAwLCBwZ2FfdGx2KSwKK1NPQ19ET1VCTEVfUigiQ2FwdHVyZSBQR0EgWkMgU3dpdGNoIiwKKwkgICAgIFdNODk2MV9MRUZUX0lOUFVUX1ZPTFVNRSwgV004OTYxX1JJR0hUX0lOUFVUX1ZPTFVNRSwKKwkgICAgIDYsIDEsIDEpLAorU09DX0RPVUJMRV9SKCJDYXB0dXJlIFBHQSBTd2l0Y2giLAorCSAgICAgV004OTYxX0xFRlRfSU5QVVRfVk9MVU1FLCBXTTg5NjFfUklHSFRfSU5QVVRfVk9MVU1FLAorCSAgICAgNywgMSwgMSksCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc2lkZXRvbmVfdGV4dFtdID0geworCSJOb25lIiwgIkxlZnQiLCAiUmlnaHQiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhY2xfc2lkZXRvbmUgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5NjFfRFNQX1NJREVUT05FXzAsIDIsIDMsIHNpZGV0b25lX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhY3Jfc2lkZXRvbmUgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5NjFfRFNQX1NJREVUT05FXzEsIDIsIDMsIHNpZGV0b25lX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGFjbF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkRBQ0wgU2lkZXRvbmUiLCBkYWNsX3NpZGV0b25lKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhY3JfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJEQUNSIFNpZGV0b25lIiwgZGFjcl9zaWRldG9uZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5NjFfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fSU5QVVQoIkxJTlBVVCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJSSU5QVVQiKSwKKworU05EX1NPQ19EQVBNX1NVUFBMWSgiQ0xLX0RTUCIsIFdNODk2MV9DTE9DS0lORzIsIDQsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IElucHV0IiwgV004OTYxX1BXUl9NR01UXzEsIDUsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgSW5wdXQiLCBXTTg5NjFfUFdSX01HTVRfMSwgNCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9BREMoIkFEQ0wiLCAiSGlGaSBDYXB0dXJlIiwgV004OTYxX1BXUl9NR01UXzEsIDMsIDApLAorU05EX1NPQ19EQVBNX0FEQygiQURDUiIsICJIaUZpIENhcHR1cmUiLCBXTTg5NjFfUFdSX01HTVRfMSwgMiwgMCksCisKK1NORF9TT0NfREFQTV9NSUNCSUFTKCJNSUNCSUFTIiwgV004OTYxX1BXUl9NR01UXzEsIDEsIDApLAorCitTTkRfU09DX0RBUE1fTVVYKCJEQUNMIFNpZGV0b25lIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmZGFjbF9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiREFDUiBTaWRldG9uZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmRhY3JfbXV4KSwKKworU05EX1NPQ19EQVBNX0RBQygiREFDTCIsICJIaUZpIFBsYXliYWNrIiwgV004OTYxX1BXUl9NR01UXzIsIDgsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDUiIsICJIaUZpIFBsYXliYWNrIiwgV004OTYxX1BXUl9NR01UXzIsIDcsIDApLAorCisvKiBIYW5kbGUgYXMgYSBtb25vIHBhdGggZm9yIERDUyAqLworU05EX1NPQ19EQVBNX1BHQV9FKCJIZWFkcGhvbmUgT3V0cHV0IiwgU05EX1NPQ19OT1BNLAorCQkgICA0LCAwLCBOVUxMLCAwLCB3bTg5NjFfaHBfZXZlbnQsCisJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKK1NORF9TT0NfREFQTV9QR0FfRSgiU3BlYWtlciBPdXRwdXQiLCBTTkRfU09DX05PUE0sCisJCSAgIDQsIDAsIE5VTEwsIDAsIHdtODk2MV9zcGtfZXZlbnQsCisJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKKworU05EX1NPQ19EQVBNX09VVFBVVCgiSFBfTCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiSFBfUiIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiU1BLX0xOIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEtfTFAiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlNQS19STiIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiU1BLX1JQIiksCit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX3BhdGhzW10gPSB7CisJeyAiREFDTCIsIE5VTEwsICJDTEtfRFNQIiB9LAorCXsgIkRBQ0wiLCBOVUxMLCAiREFDTCBTaWRldG9uZSIgfSwKKwl7ICJEQUNSIiwgTlVMTCwgIkNMS19EU1AiIH0sCisJeyAiREFDUiIsIE5VTEwsICJEQUNSIFNpZGV0b25lIiB9LAorCisJeyAiREFDTCBTaWRldG9uZSIsICJMZWZ0IiwgIkFEQ0wiIH0sCisJeyAiREFDTCBTaWRldG9uZSIsICJSaWdodCIsICJBRENSIiB9LAorCisJeyAiREFDUiBTaWRldG9uZSIsICJMZWZ0IiwgIkFEQ0wiIH0sCisJeyAiREFDUiBTaWRldG9uZSIsICJSaWdodCIsICJBRENSIiB9LAorCisJeyAiSFBfTCIsIE5VTEwsICJIZWFkcGhvbmUgT3V0cHV0IiB9LAorCXsgIkhQX1IiLCBOVUxMLCAiSGVhZHBob25lIE91dHB1dCIgfSwKKwl7ICJIZWFkcGhvbmUgT3V0cHV0IiwgTlVMTCwgIkRBQ0wiIH0sCisJeyAiSGVhZHBob25lIE91dHB1dCIsIE5VTEwsICJEQUNSIiB9LAorCisJeyAiU1BLX0xOIiwgTlVMTCwgIlNwZWFrZXIgT3V0cHV0IiB9LAorCXsgIlNQS19MUCIsIE5VTEwsICJTcGVha2VyIE91dHB1dCIgfSwKKwl7ICJTUEtfUk4iLCBOVUxMLCAiU3BlYWtlciBPdXRwdXQiIH0sCisJeyAiU1BLX1JQIiwgTlVMTCwgIlNwZWFrZXIgT3V0cHV0IiB9LAorCisJeyAiU3BlYWtlciBPdXRwdXQiLCBOVUxMLCAiREFDTCIgfSwKKwl7ICJTcGVha2VyIE91dHB1dCIsIE5VTEwsICJEQUNSIiB9LAorCisJeyAiQURDTCIsIE5VTEwsICJMZWZ0IElucHV0IiB9LAorCXsgIkFEQ0wiLCBOVUxMLCAiQ0xLX0RTUCIgfSwKKwl7ICJBRENSIiwgTlVMTCwgIlJpZ2h0IElucHV0IiB9LAorCXsgIkFEQ1IiLCBOVUxMLCAiQ0xLX0RTUCIgfSwKKworCXsgIkxlZnQgSW5wdXQiLCBOVUxMLCAiTElOUFVUIiB9LAorCXsgIlJpZ2h0IElucHV0IiwgTlVMTCwgIlJJTlBVVCIgfSwKKworfTsKKworLyogVmFsdWVzIGZvciBDTEtfU1lTX1JBVEUgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCWludCByYXRpbzsKKwl1MTYgdmFsOworfSB3bTg5NjFfY2xrX3N5c19yYXRpb1tdID0geworCXsgIDY0LCAgMCB9LAorCXsgIDEyOCwgMSB9LAorCXsgIDE5MiwgMiB9LAorCXsgIDI1NiwgMyB9LAorCXsgIDM4NCwgNCB9LAorCXsgIDUxMiwgNSB9LAorCXsgIDc2OCwgNiB9LAorCXsgMTAyNCwgNyB9LAorCXsgMTQwOCwgOCB9LAorCXsgMTUzNiwgOSB9LAorfTsKKworLyogVmFsdWVzIGZvciBTQU1QTEVfUkFURSAqLworc3RhdGljIHN0cnVjdCB7CisJaW50IHJhdGU7CisJdTE2IHZhbDsKK30gd204OTYxX3NyYXRlW10gPSB7CisJeyA0ODAwMCwgMCB9LAorCXsgNDQxMDAsIDAgfSwKKwl7IDMyMDAwLCAxIH0sCisJeyAyMjA1MCwgMiB9LAorCXsgMjQwMDAsIDIgfSwKKwl7IDE2MDAwLCAzIH0sCisJeyAxMTI1MCwgNCB9LAorCXsgMTIwMDAsIDQgfSwKKwl7ICA4MDAwLCA1IH0sCit9OworCitzdGF0aWMgaW50IHdtODk2MV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTYxX3ByaXYgKndtODk2MSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGksIGJlc3QsIHRhcmdldCwgZnM7CisJdTE2IHJlZzsKKworCWZzID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCWlmICghd204OTYxLT5zeXNjbGspIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiTUNMSyBoYXMgbm90IGJlZW4gc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRmluZCB0aGUgY2xvc2VzdCBzYW1wbGUgcmF0ZSBmb3IgdGhlIGZpbHRlcnMgKi8KKwliZXN0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5NjFfc3JhdGUpOyBpKyspIHsKKwkJaWYgKGFicyh3bTg5NjFfc3JhdGVbaV0ucmF0ZSAtIGZzKSA8CisJCSAgICBhYnMod204OTYxX3NyYXRlW2Jlc3RdLnJhdGUgLSBmcykpCisJCQliZXN0ID0gaTsKKwl9CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjFfQURESVRJT05BTF9DT05UUk9MXzMpOworCXJlZyAmPSB+V004OTYxX1NBTVBMRV9SQVRFX01BU0s7CisJcmVnIHw9IHdtODk2MV9zcmF0ZVtiZXN0XS52YWw7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX0FERElUSU9OQUxfQ09OVFJPTF8zLCByZWcpOworCWRldl9kYmcoY29kZWMtPmRldiwgIlNlbGVjdGVkIFNSQVRFICVkSHogZm9yICVkSHpcbiIsCisJCXdtODk2MV9zcmF0ZVtiZXN0XS5yYXRlLCBmcyk7CisKKwkvKiBTZWxlY3QgYSBDTEtfU1lTL2ZzIHJhdGlvIGVxdWFsIHRvIG9yIGhpZ2hlciB0aGFuIHJlcXVpcmVkICovCisJdGFyZ2V0ID0gd204OTYxLT5zeXNjbGsgLyBmczsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLICYmIHRhcmdldCA8IDY0KSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCSJTWVNDTEsgbXVzdCBiZSBhdCBsZWFzdCA2NCpmcyBmb3IgREFDXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUgJiYgdGFyZ2V0IDwgMjU2KSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCSJTWVNDTEsgbXVzdCBiZSBhdCBsZWFzdCAyNTYqZnMgZm9yIEFEQ1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk2MV9jbGtfc3lzX3JhdGlvKTsgaSsrKSB7CisJCWlmICh3bTg5NjFfY2xrX3N5c19yYXRpb1tpXS5yYXRpbyA+PSB0YXJnZXQpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gQVJSQVlfU0laRSh3bTg5NjFfY2xrX3N5c19yYXRpbykpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiVW5hYmxlIHRvIGdlbmVyYXRlIENMS19TWVNfUkFURVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJTZWxlY3RlZCBDTEtfU1lTX1JBVEUgb2YgJWQgZm9yICVkLyVkPSVkXG4iLAorCQl3bTg5NjFfY2xrX3N5c19yYXRpb1tpXS5yYXRpbywgd204OTYxLT5zeXNjbGssIGZzLAorCQl3bTg5NjEtPnN5c2NsayAvIGZzKTsKKworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYxX0NMT0NLSU5HXzQpOworCXJlZyAmPSB+V004OTYxX0NMS19TWVNfUkFURV9NQVNLOworCXJlZyB8PSB3bTg5NjFfY2xrX3N5c19yYXRpb1tpXS52YWwgPDwgV004OTYxX0NMS19TWVNfUkFURV9TSElGVDsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjFfQ0xPQ0tJTkdfNCwgcmVnKTsKKworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYxX0FVRElPX0lOVEVSRkFDRV8wKTsKKwlyZWcgJj0gfldNODk2MV9XTF9NQVNLOworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCXJlZyB8PSAxIDw8IFdNODk2MV9XTF9TSElGVDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJcmVnIHw9IDIgPDwgV004OTYxX1dMX1NISUZUOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlyZWcgfD0gMyA8PCBXTTg5NjFfV0xfU0hJRlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjFfQVVESU9fSU5URVJGQUNFXzAsIHJlZyk7CisKKwkvKiBTbG9waW5nIHN0b3AtYmFuZCBmaWx0ZXIgaXMgcmVjb21tZW5kZWQgZm9yIDw9IDI0a0h6ICovCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjFfQURDX0RBQ19DT05UUk9MXzIpOworCWlmIChmcyA8PSAyNDAwMCkKKwkJcmVnIHw9IFdNODk2MV9EQUNTTE9QRTsKKwllbHNlCisJCXJlZyAmPSBXTTg5NjFfREFDU0xPUEU7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX0FEQ19EQUNfQ09OVFJPTF8yLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTYxX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBjbGtfaWQsCisJCQkgICAgIHVuc2lnbmVkIGludCBmcmVxLAorCQkJICAgICBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODk2MV9wcml2ICp3bTg5NjEgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXUxNiByZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MV9DTE9DS0lORzEpOworCisJaWYgKGZyZXEgPiAzMzAwMDAwMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJNQ0xLIG11c3QgYmUgPDMzTUh6XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGZyZXEgPiAxNjUwMDAwMCkgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJVc2luZyBNQ0xLLzIgZm9yICVkSHogTUNMS1xuIiwgZnJlcSk7CisJCXJlZyB8PSBXTTg5NjFfTUNMS0RJVjsKKwkJZnJlcSAvPSAyOworCX0gZWxzZSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIlVzaW5nIE1DTEsvMSBmb3IgJWRIeiBNQ0xLXG4iLCBmcmVxKTsKKwkJcmVnICY9IFdNODk2MV9NQ0xLRElWOworCX0KKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MV9DTE9DS0lORzEsIHJlZyk7CisKKwl3bTg5NjEtPnN5c2NsayA9IGZyZXE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NjFfc2V0X2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXUxNiBhaWYgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MV9BVURJT19JTlRFUkZBQ0VfMCk7CisKKwlhaWYgJj0gfihXTTg5NjFfQkNMS0lOViB8IFdNODk2MV9MUlAgfAorCQkgV004OTYxX01TIHwgV004OTYxX0ZPUk1BVF9NQVNLKTsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWFpZiB8PSBXTTg5NjFfTVM7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJYWlmIHw9IDE7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWFpZiB8PSAyOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCWFpZiB8PSBXTTg5NjFfTFJQOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWFpZiB8PSAzOworCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6CisJCWFpZiB8PSBXTTg5NjFfTFJQOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQlhaWYgfD0gV004OTYxX0JDTEtJTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCWFpZiB8PSBXTTg5NjFfQkNMS0lOViB8IFdNODk2MV9MUlA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjFfQVVESU9fSU5URVJGQUNFXzAsIGFpZik7Cit9CisKK3N0YXRpYyBpbnQgd204OTYxX3NldF90cmlzdGF0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IHRyaXN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdTE2IHJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYxX0FERElUSU9OQUxfQ09OVFJPTF8yKTsKKworCWlmICh0cmlzdGF0ZSkKKwkJcmVnIHw9IFdNODk2MV9UUklTOworCWVsc2UKKwkJcmVnICY9IH5XTTg5NjFfVFJJUzsKKworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjFfQURESVRJT05BTF9DT05UUk9MXzIsIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgd204OTYxX2RpZ2l0YWxfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwl1MTYgcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjFfQURDX0RBQ19DT05UUk9MXzEpOworCisJaWYgKG11dGUpCisJCXJlZyB8PSBXTTg5NjFfREFDTVU7CisJZWxzZQorCQlyZWcgJj0gfldNODk2MV9EQUNNVTsKKworCW1zbGVlcCgxNyk7CisKKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX0FEQ19EQUNfQ09OVFJPTF8xLCByZWcpOworfQorCitzdGF0aWMgaW50IHdtODk2MV9zZXRfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgZGl2X2lkLCBpbnQgZGl2KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdTE2IHJlZzsKKworCXN3aXRjaCAoZGl2X2lkKSB7CisJY2FzZSBXTTg5NjFfQkNMSzoKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjFfQ0xPQ0tJTkcyKTsKKwkJcmVnICY9IH5XTTg5NjFfQkNMS0RJVl9NQVNLOworCQlyZWcgfD0gZGl2OworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjFfQ0xPQ0tJTkcyLCByZWcpOworCQlicmVhazsKKworCWNhc2UgV004OTYxX0xSQ0xLOgorCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MV9BVURJT19JTlRFUkZBQ0VfMik7CisJCXJlZyAmPSB+V004OTYxX0xSQ0xLX1JBVEVfTUFTSzsKKwkJcmVnIHw9IGRpdjsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX0FVRElPX0lOVEVSRkFDRV8yLCByZWcpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk2MV9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXUxNiByZWc7CisKKwkvKiBUaGlzIGlzIGFsbCBzbGlnaHRseSB1bnVzdWFsIHNpbmNlIHdlIGhhdmUgbm8gYnlwYXNzIHBhdGhzCisJICogYW5kIHRoZSBvdXRwdXQgYW1wbGlmaWVyIHN0cnVjdHVyZSBtZWFucyB3ZSBjYW4ganVzdCBzbGFtCisJICogdGhlIGJpYXNlcyBzdHJhaWdodCB1cCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gcmFtcCB0aGVtCisJICogc2xvd2x5LgorCSAqLworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1NUQU5EQlkpIHsKKwkJCS8qIEVuYWJsZSBiaWFzIGdlbmVyYXRpb24gKi8KKwkJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYxX0FOVElfUE9QKTsKKwkJCXJlZyB8PSBXTTg5NjFfQlVGSU9FTiB8IFdNODk2MV9CVUZEQ09QRU47CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjFfQU5USV9QT1AsIHJlZyk7CisKKwkJCS8qIFZNSUQ9Mio1MGssIFZSRUYgKi8KKwkJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYxX1BXUl9NR01UXzEpOworCQkJcmVnICY9IH5XTTg5NjFfVk1JRFNFTF9NQVNLOworCQkJcmVnIHw9ICgxIDw8IFdNODk2MV9WTUlEU0VMX1NISUZUKSB8IFdNODk2MV9WUkVGOworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX1BXUl9NR01UXzEsIHJlZyk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1BSRVBBUkUpIHsKKwkJCS8qIFZSRUYgb2ZmICovCisJCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MV9QV1JfTUdNVF8xKTsKKwkJCXJlZyAmPSB+V004OTYxX1ZSRUY7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjFfUFdSX01HTVRfMSwgcmVnKTsKKworCQkJLyogQmlhcyBnZW5lcmF0aW9uIG9mZiAqLworCQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjFfQU5USV9QT1ApOworCQkJcmVnICY9IH4oV004OTYxX0JVRklPRU4gfCBXTTg5NjFfQlVGRENPUEVOKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MV9BTlRJX1BPUCwgcmVnKTsKKworCQkJLyogVk1JRCBvZmYgKi8KKwkJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYxX1BXUl9NR01UXzEpOworCQkJcmVnICY9IH5XTTg5NjFfVk1JRFNFTF9NQVNLOworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX1BXUl9NR01UXzEsIHJlZyk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCWJyZWFrOworCX0KKworCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisKKwlyZXR1cm4gMDsKK30KKworCisjZGVmaW5lIFdNODk2MV9SQVRFUyBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwCisKKyNkZWZpbmUgV004OTYxX0ZPUk1BVFMgXAorCShTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKKwlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTYxX2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcyA9IHdtODk2MV9od19wYXJhbXMsCisJLnNldF9zeXNjbGsgPSB3bTg5NjFfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdCA9IHdtODk2MV9zZXRfZm10LAorCS5kaWdpdGFsX211dGUgPSB3bTg5NjFfZGlnaXRhbF9tdXRlLAorCS5zZXRfdHJpc3RhdGUgPSB3bTg5NjFfc2V0X3RyaXN0YXRlLAorCS5zZXRfY2xrZGl2ID0gd204OTYxX3NldF9jbGtkaXYsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTYxX2RhaSA9IHsKKwkubmFtZSA9ICJXTTg5NjEiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkhpRmkgUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFdNODk2MV9SQVRFUywKKwkJLmZvcm1hdHMgPSBXTTg5NjFfRk9STUFUUyx9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiSGlGaSBDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBXTTg5NjFfUkFURVMsCisJCS5mb3JtYXRzID0gV004OTYxX0ZPUk1BVFMsfSwKKwkub3BzID0gJndtODk2MV9kYWlfb3BzLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHdtODk2MV9kYWkpOworCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204OTYxX2NvZGVjOworCitzdGF0aWMgaW50IHdtODk2MV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAwOworCisJaWYgKHdtODk2MV9jb2RlYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIGRldmljZSBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg5NjFfY29kZWM7CisJY29kZWMgPSB3bTg5NjFfY29kZWM7CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXM6ICVkXG4iLCByZXQpOworCQlnb3RvIHBjbV9lcnI7CisJfQorCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODk2MV9zbmRfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg5NjFfc25kX2NvbnRyb2xzKSk7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTYxX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204OTYxX2RhcG1fd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19wYXRocywgQVJSQVlfU0laRShhdWRpb19wYXRocykpOworCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXQgPSBzbmRfc29jX2luaXRfY2FyZChzb2NkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjYXJkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBjYXJkX2VycjsKKwl9CisKKwlyZXR1cm4gcmV0OworCitjYXJkX2VycjoKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CitwY21fZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204OTYxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB3bTg5NjFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJd204OTYxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk2MV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZTsgaSsrKSB7CisJCWlmIChpID09IFdNODk2MV9TT0ZUV0FSRV9SRVNFVCkKKwkJCWNvbnRpbnVlOworCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGksIHJlZ19jYWNoZVtpXSk7CisJfQorCisJd204OTYxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHdtODk2MV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204OTYxX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTYxID0geworCS5wcm9iZSA9IAl3bTg5NjFfcHJvYmUsCisJLnJlbW92ZSA9IAl3bTg5NjFfcmVtb3ZlLAorCS5zdXNwZW5kID0Jd204OTYxX3N1c3BlbmQsCisJLnJlc3VtZSA9CXdtODk2MV9yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg5NjEpOworCitzdGF0aWMgaW50IHdtODk2MV9yZWdpc3RlcihzdHJ1Y3Qgd204OTYxX3ByaXYgKndtODk2MSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204OTYxLT5jb2RlYzsKKwlpbnQgcmV0OworCXUxNiByZWc7CisKKwlpZiAod204OTYxX2NvZGVjKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkFub3RoZXIgV004OTYxIGlzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODk2MTsKKwljb2RlYy0+bmFtZSA9ICJXTTg5NjEiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5kYWkgPSAmd204OTYxX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTg5NjEtPnJlZ19jYWNoZSk7CisJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg5NjEtPnJlZ19jYWNoZTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204OTYxX3NldF9iaWFzX2xldmVsOworCWNvZGVjLT52b2xhdGlsZV9yZWdpc3RlciA9IHdtODk2MV92b2xhdGlsZV9yZWdpc3RlcjsKKworCW1lbWNweShjb2RlYy0+cmVnX2NhY2hlLCB3bTg5NjFfcmVnX2RlZmF1bHRzLAorCSAgICAgICBzaXplb2Yod204OTYxX3JlZ19kZWZhdWx0cykpOworCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDgsIDE2LCBTTkRfU09DX0kyQyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjFfU09GVFdBUkVfUkVTRVQpOworCWlmIChyZWcgIT0gMHgxODAxKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkRldmljZSBpcyBub3QgYSBXTTg5NjE6IElEPTB4JXhcbiIsIHJlZyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCS8qIFRoaXMgaXNuJ3Qgdm9sYXRpbGUgLSByZWFkYmFjayBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gd3JpdGUgKi8KKwlyZWcgPSBjb2RlYy0+aHdfcmVhZChjb2RlYywgV004OTYxX1JJR0hUX0lOUFVUX1ZPTFVNRSk7CisJZGV2X2luZm8oY29kZWMtPmRldiwgIldNODk2MSBmYW1pbHkgJWQgcmV2aXNpb24gJWNcbiIsCisJCSAocmVnICYgV004OTYxX0RFVklDRV9JRF9NQVNLKSA+PiBXTTg5NjFfREVWSUNFX0lEX1NISUZULAorCQkgKChyZWcgJiBXTTg5NjFfQ0hJUF9SRVZfTUFTSykgPj4gV004OTYxX0NISVBfUkVWX1NISUZUKQorCQkgKyAnQScpOworCisJcmV0ID0gd204OTYxX3Jlc2V0KGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEVuYWJsZSBjbGFzcyBXICovCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjFfQ0hBUkdFX1BVTVBfQik7CisJcmVnIHw9IFdNODk2MV9DUF9EWU5fUFdSX01BU0s7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX0NIQVJHRV9QVU1QX0IsIHJlZyk7CisKKwkvKiBMYXRjaCB2b2x1bWUgdXBkYXRlIGJpdHMgKHJpZ2h0IGNoYW5uZWwgb25seSwgd2UgYWx3YXlzCisJICogd3JpdGUgYm90aCBvdXQpIGFuZCBkZWZhdWx0IFpDIG9uLiAqLworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYxX1JPVVQxX1ZPTFVNRSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX1JPVVQxX1ZPTFVNRSwKKwkJICAgICByZWcgfCBXTTg5NjFfTE8xWkMgfCBXTTg5NjFfT1VUMVZVKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjFfTE9VVDFfVk9MVU1FLCByZWcgfCBXTTg5NjFfTE8xWkMpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYxX1JPVVQyX1ZPTFVNRSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX1JPVVQyX1ZPTFVNRSwKKwkJICAgICByZWcgfCBXTTg5NjFfU1BLUlpDIHwgV004OTYxX1NQS1ZVKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjFfTE9VVDJfVk9MVU1FLCByZWcgfCBXTTg5NjFfU1BLTFpDKTsKKworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYxX1JJR0hUX0FEQ19WT0xVTUUpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MV9SSUdIVF9BRENfVk9MVU1FLCByZWcgfCBXTTg5NjFfQURDVlUpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYxX1JJR0hUX0lOUFVUX1ZPTFVNRSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTYxX1JJR0hUX0lOUFVUX1ZPTFVNRSwgcmVnIHwgV004OTYxX0lQVlUpOworCisJLyogVXNlIHNvZnQgbXV0ZSBieSBkZWZhdWx0ICovCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjFfQURDX0RBQ19DT05UUk9MXzIpOworCXJlZyB8PSBXTTg5NjFfREFDU01NOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MV9BRENfREFDX0NPTlRST0xfMiwgcmVnKTsKKworCS8qIFVzZSBhdXRvbWF0aWMgY2xvY2tpbmcgbW9kZSBieSBkZWZhdWx0OyBmb3Igbm93IHRoaXMgaXMgYWxsCisJICogd2Ugc3VwcG9ydC4KKwkgKi8KKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MV9DTE9DS0lOR18zKTsKKwlyZWcgJj0gfldNODk2MV9NQU5VQUxfTU9ERTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjFfQ0xPQ0tJTkdfMywgcmVnKTsKKworCXdtODk2MV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJd204OTYxX2RhaS5kZXYgPSBjb2RlYy0+ZGV2OworCisJd204OTYxX2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204OTYxX2RhaSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworCitlcnI6CisJa2ZyZWUod204OTYxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bTg5NjFfdW5yZWdpc3RlcihzdHJ1Y3Qgd204OTYxX3ByaXYgKndtODk2MSkKK3sKKwl3bTg5NjFfc2V0X2JpYXNfbGV2ZWwoJndtODk2MS0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODk2MV9kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204OTYxLT5jb2RlYyk7CisJa2ZyZWUod204OTYxKTsKKwl3bTg5NjFfY29kZWMgPSBOVUxMOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg5NjFfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3bTg5NjFfcHJpdiAqd204OTYxOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCXdtODk2MSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg5NjFfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg5NjEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg5NjEtPmNvZGVjOworCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204OTYxKTsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworCisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCXJldHVybiB3bTg5NjFfcmVnaXN0ZXIod204OTYxKTsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTYxX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd204OTYxX3ByaXYgKndtODk2MSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXdtODk2MV91bnJlZ2lzdGVyKHdtODk2MSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204OTYxX2kyY19zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gc25kX3NvY19zdXNwZW5kX2RldmljZSgmY2xpZW50LT5kZXYpOworfQorCitzdGF0aWMgaW50IHdtODk2MV9pMmNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJcmV0dXJuIHNuZF9zb2NfcmVzdW1lX2RldmljZSgmY2xpZW50LT5kZXYpOworfQorI2Vsc2UKKyNkZWZpbmUgd204OTYxX2kyY19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204OTYxX2kyY19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg5NjFfaTJjX2lkW10gPSB7CisJeyAid204OTYxIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg5NjFfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODk2MV9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIndtODk2MSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gICAgd204OTYxX2kyY19wcm9iZSwKKwkucmVtb3ZlID0gICBfX2RldmV4aXRfcCh3bTg5NjFfaTJjX3JlbW92ZSksCisJLnN1c3BlbmQgPSAgd204OTYxX2kyY19zdXNwZW5kLAorCS5yZXN1bWUgPSAgIHdtODk2MV9pMmNfcmVzdW1lLAorCS5pZF90YWJsZSA9IHdtODk2MV9pMmNfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTg5NjFfbW9kaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204OTYxX2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBXTTg5NjEgSTJDIGRyaXZlcjogJWRcbiIsCisJCSAgICAgICByZXQpOworCX0KKworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdCh3bTg5NjFfbW9kaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTg5NjFfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ3bTg5NjFfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTg5NjFfZXhpdCk7CisKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNODk2MSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NjEuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxM2JmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MS5oCkBAIC0wLDAgKzEsODY2IEBACisvKgorICogd204OTYxLmggIC0tICBXTTg5NjEgU29jIEF1ZGlvIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfV004OTYxX0gKKyNkZWZpbmUgX1dNODk2MV9ICisKKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk2MTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTYxX2RhaTsKKworI2RlZmluZSBXTTg5NjFfQkNMSyAgMQorI2RlZmluZSBXTTg5NjFfTFJDTEsgMgorCisjZGVmaW5lIFdNODk2MV9CQ0xLX0RJVl8xICAgIDAKKyNkZWZpbmUgV004OTYxX0JDTEtfRElWXzFfNSAgMQorI2RlZmluZSBXTTg5NjFfQkNMS19ESVZfMiAgICAyCisjZGVmaW5lIFdNODk2MV9CQ0xLX0RJVl8zICAgIDMKKyNkZWZpbmUgV004OTYxX0JDTEtfRElWXzQgICAgNAorI2RlZmluZSBXTTg5NjFfQkNMS19ESVZfNV81ICA1CisjZGVmaW5lIFdNODk2MV9CQ0xLX0RJVl82ICAgIDYKKyNkZWZpbmUgV004OTYxX0JDTEtfRElWXzggICAgNworI2RlZmluZSBXTTg5NjFfQkNMS19ESVZfMTEgICA4CisjZGVmaW5lIFdNODk2MV9CQ0xLX0RJVl8xMiAgIDkKKyNkZWZpbmUgV004OTYxX0JDTEtfRElWXzE2ICAxMAorI2RlZmluZSBXTTg5NjFfQkNMS19ESVZfMjQgIDExCisjZGVmaW5lIFdNODk2MV9CQ0xLX0RJVl8zMiAgMTMKKworCisvKgorICogUmVnaXN0ZXIgdmFsdWVzLgorICovCisjZGVmaW5lIFdNODk2MV9MRUZUX0lOUFVUX1ZPTFVNRSAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFdNODk2MV9SSUdIVF9JTlBVVF9WT0xVTUUgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFdNODk2MV9MT1VUMV9WT0xVTUUgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIFdNODk2MV9ST1VUMV9WT0xVTUUgICAgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIFdNODk2MV9DTE9DS0lORzEgICAgICAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFdNODk2MV9BRENfREFDX0NPTlRST0xfMSAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIFdNODk2MV9BRENfREFDX0NPTlRST0xfMiAgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIFdNODk2MV9BVURJT19JTlRFUkZBQ0VfMCAgICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIFdNODk2MV9DTE9DS0lORzIgICAgICAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFdNODk2MV9BVURJT19JTlRFUkZBQ0VfMSAgICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIFdNODk2MV9MRUZUX0RBQ19WT0xVTUUgICAgICAgICAgICAgICAgICAweDBBCisjZGVmaW5lIFdNODk2MV9SSUdIVF9EQUNfVk9MVU1FICAgICAgICAgICAgICAgICAweDBCCisjZGVmaW5lIFdNODk2MV9BVURJT19JTlRFUkZBQ0VfMiAgICAgICAgICAgICAgICAweDBFCisjZGVmaW5lIFdNODk2MV9TT0ZUV0FSRV9SRVNFVCAgICAgICAgICAgICAgICAgICAweDBGCisjZGVmaW5lIFdNODk2MV9BTEMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExCisjZGVmaW5lIFdNODk2MV9BTEMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyCisjZGVmaW5lIFdNODk2MV9BTEMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEzCisjZGVmaW5lIFdNODk2MV9OT0lTRV9HQVRFICAgICAgICAgICAgICAgICAgICAgICAweDE0CisjZGVmaW5lIFdNODk2MV9MRUZUX0FEQ19WT0xVTUUgICAgICAgICAgICAgICAgICAweDE1CisjZGVmaW5lIFdNODk2MV9SSUdIVF9BRENfVk9MVU1FICAgICAgICAgICAgICAgICAweDE2CisjZGVmaW5lIFdNODk2MV9BRERJVElPTkFMX0NPTlRST0xfMSAgICAgICAgICAgICAweDE3CisjZGVmaW5lIFdNODk2MV9BRERJVElPTkFMX0NPTlRST0xfMiAgICAgICAgICAgICAweDE4CisjZGVmaW5lIFdNODk2MV9QV1JfTUdNVF8xICAgICAgICAgICAgICAgICAgICAgICAweDE5CisjZGVmaW5lIFdNODk2MV9QV1JfTUdNVF8yICAgICAgICAgICAgICAgICAgICAgICAweDFBCisjZGVmaW5lIFdNODk2MV9BRERJVElPTkFMX0NPTlRST0xfMyAgICAgICAgICAgICAweDFCCisjZGVmaW5lIFdNODk2MV9BTlRJX1BPUCAgICAgICAgICAgICAgICAgICAgICAgICAweDFDCisjZGVmaW5lIFdNODk2MV9DTE9DS0lOR18zICAgICAgICAgICAgICAgICAgICAgICAweDFFCisjZGVmaW5lIFdNODk2MV9BRENMX1NJR05BTF9QQVRIICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFdNODk2MV9BRENSX1NJR05BTF9QQVRIICAgICAgICAgICAgICAgICAweDIxCisjZGVmaW5lIFdNODk2MV9MT1VUMl9WT0xVTUUgICAgICAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIFdNODk2MV9ST1VUMl9WT0xVTUUgICAgICAgICAgICAgICAgICAgICAweDI5CisjZGVmaW5lIFdNODk2MV9QV1JfTUdNVF8zICAgICAgICAgICAgICAgICAgICAgICAweDJGCisjZGVmaW5lIFdNODk2MV9BRERJVElPTkFMX0NPTlRST0xfNCAgICAgICAgICAgICAweDMwCisjZGVmaW5lIFdNODk2MV9DTEFTU19EX0NPTlRST0xfMSAgICAgICAgICAgICAgICAweDMxCisjZGVmaW5lIFdNODk2MV9DTEFTU19EX0NPTlRST0xfMiAgICAgICAgICAgICAgICAweDMzCisjZGVmaW5lIFdNODk2MV9DTE9DS0lOR180ICAgICAgICAgICAgICAgICAgICAgICAweDM4CisjZGVmaW5lIFdNODk2MV9EU1BfU0lERVRPTkVfMCAgICAgICAgICAgICAgICAgICAweDM5CisjZGVmaW5lIFdNODk2MV9EU1BfU0lERVRPTkVfMSAgICAgICAgICAgICAgICAgICAweDNBCisjZGVmaW5lIFdNODk2MV9EQ19TRVJWT18wICAgICAgICAgICAgICAgICAgICAgICAweDNDCisjZGVmaW5lIFdNODk2MV9EQ19TRVJWT18xICAgICAgICAgICAgICAgICAgICAgICAweDNECisjZGVmaW5lIFdNODk2MV9EQ19TRVJWT18zICAgICAgICAgICAgICAgICAgICAgICAweDNGCisjZGVmaW5lIFdNODk2MV9EQ19TRVJWT181ICAgICAgICAgICAgICAgICAgICAgICAweDQxCisjZGVmaW5lIFdNODk2MV9BTkFMT0dVRV9QR0FfQklBUyAgICAgICAgICAgICAgICAweDQ0CisjZGVmaW5lIFdNODk2MV9BTkFMT0dVRV9IUF8wICAgICAgICAgICAgICAgICAgICAweDQ1CisjZGVmaW5lIFdNODk2MV9BTkFMT0dVRV9IUF8yICAgICAgICAgICAgICAgICAgICAweDQ3CisjZGVmaW5lIFdNODk2MV9DSEFSR0VfUFVNUF8xICAgICAgICAgICAgICAgICAgICAweDQ4CisjZGVmaW5lIFdNODk2MV9DSEFSR0VfUFVNUF9CICAgICAgICAgICAgICAgICAgICAweDUyCisjZGVmaW5lIFdNODk2MV9XUklURV9TRVFVRU5DRVJfMSAgICAgICAgICAgICAgICAweDU3CisjZGVmaW5lIFdNODk2MV9XUklURV9TRVFVRU5DRVJfMiAgICAgICAgICAgICAgICAweDU4CisjZGVmaW5lIFdNODk2MV9XUklURV9TRVFVRU5DRVJfMyAgICAgICAgICAgICAgICAweDU5CisjZGVmaW5lIFdNODk2MV9XUklURV9TRVFVRU5DRVJfNCAgICAgICAgICAgICAgICAweDVBCisjZGVmaW5lIFdNODk2MV9XUklURV9TRVFVRU5DRVJfNSAgICAgICAgICAgICAgICAweDVCCisjZGVmaW5lIFdNODk2MV9XUklURV9TRVFVRU5DRVJfNiAgICAgICAgICAgICAgICAweDVDCisjZGVmaW5lIFdNODk2MV9XUklURV9TRVFVRU5DRVJfNyAgICAgICAgICAgICAgICAweDVECisjZGVmaW5lIFdNODk2MV9HRU5FUkFMX1RFU1RfMSAgICAgICAgICAgICAgICAgICAweEZDCisKKworLyoKKyAqIEZpZWxkIERlZmluaXRpb25zLgorICovCisKKy8qCisgKiBSMCAoMHgwMCkgLSBMZWZ0IElucHV0IHZvbHVtZQorICovCisjZGVmaW5lIFdNODk2MV9JUFZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElQVlUgKi8KKyNkZWZpbmUgV004OTYxX0lQVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSVBWVSAqLworI2RlZmluZSBXTTg5NjFfSVBWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBJUFZVICovCisjZGVmaW5lIFdNODk2MV9JUFZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElQVlUgKi8KKyNkZWZpbmUgV004OTYxX0xJTk1VVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElOTVVURSAqLworI2RlZmluZSBXTTg5NjFfTElOTVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5NVVRFICovCisjZGVmaW5lIFdNODk2MV9MSU5NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExJTk1VVEUgKi8KKyNkZWZpbmUgV004OTYxX0xJTk1VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTElOTVVURSAqLworI2RlZmluZSBXTTg5NjFfTElaQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSVpDICovCisjZGVmaW5lIFdNODk2MV9MSVpDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJWkMgKi8KKyNkZWZpbmUgV004OTYxX0xJWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTElaQyAqLworI2RlZmluZSBXTTg5NjFfTElaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSVpDICovCisjZGVmaW5lIFdNODk2MV9MSU5WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwM0YgIC8qIExJTlZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk2MV9MSU5WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExJTlZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk2MV9MSU5WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExJTlZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSMSAoMHgwMSkgLSBSaWdodCBJbnB1dCB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NjFfREVWSUNFX0lEX01BU0sgICAgICAgICAgICAgICAgICAgMHhGMDAwICAvKiBERVZJQ0VfSUQgLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk2MV9ERVZJQ0VfSURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIERFVklDRV9JRCAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTYxX0RFVklDRV9JRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogREVWSUNFX0lEIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5NjFfQ0hJUF9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwRTAwICAvKiBDSElQX1JFViAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5NjFfQ0hJUF9SRVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBDSElQX1JFViAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5NjFfQ0hJUF9SRVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBDSElQX1JFViAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5NjFfSVBWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJUFZVICovCisjZGVmaW5lIFdNODk2MV9JUFZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElQVlUgKi8KKyNkZWZpbmUgV004OTYxX0lQVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSVBWVSAqLworI2RlZmluZSBXTTg5NjFfSVBWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJUFZVICovCisjZGVmaW5lIFdNODk2MV9SSU5NVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJTk1VVEUgKi8KKyNkZWZpbmUgV004OTYxX1JJTk1VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUklOTVVURSAqLworI2RlZmluZSBXTTg5NjFfUklOTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBSSU5NVVRFICovCisjZGVmaW5lIFdNODk2MV9SSU5NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJJTk1VVEUgKi8KKyNkZWZpbmUgV004OTYxX1JJWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogUklaQyAqLworI2RlZmluZSBXTTg5NjFfUklaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBSSVpDICovCisjZGVmaW5lIFdNODk2MV9SSVpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFJJWkMgKi8KKyNkZWZpbmUgV004OTYxX1JJWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUklaQyAqLworI2RlZmluZSBXTTg5NjFfUklOVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDNGICAvKiBSSU5WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5NjFfUklOVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBSSU5WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5NjFfUklOVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBSSU5WT0wgLSBbNTowXSAqLworCisvKgorICogUjIgKDB4MDIpIC0gTE9VVDEgdm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTYxX09VVDFWVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogT1VUMVZVICovCisjZGVmaW5lIFdNODk2MV9PVVQxVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE9VVDFWVSAqLworI2RlZmluZSBXTTg5NjFfT1VUMVZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBPVVQxVlUgKi8KKyNkZWZpbmUgV004OTYxX09VVDFWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1VUMVZVICovCisjZGVmaW5lIFdNODk2MV9MTzFaQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExPMVpDICovCisjZGVmaW5lIFdNODk2MV9MTzFaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExPMVpDICovCisjZGVmaW5lIFdNODk2MV9MTzFaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExPMVpDICovCisjZGVmaW5lIFdNODk2MV9MTzFaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPMVpDICovCisjZGVmaW5lIFdNODk2MV9MT1VUMVZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIExPVVQxVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTYxX0xPVVQxVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTE9VVDFWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NjFfTE9VVDFWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMT1VUMVZPTCAtIFs2OjBdICovCisKKy8qCisgKiBSMyAoMHgwMykgLSBST1VUMSB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NjFfT1VUMVZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBPVVQxVlUgKi8KKyNkZWZpbmUgV004OTYxX09VVDFWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogT1VUMVZVICovCisjZGVmaW5lIFdNODk2MV9PVVQxVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIE9VVDFWVSAqLworI2RlZmluZSBXTTg5NjFfT1VUMVZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBPVVQxVlUgKi8KKyNkZWZpbmUgV004OTYxX1JPMVpDICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUk8xWkMgKi8KKyNkZWZpbmUgV004OTYxX1JPMVpDX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUk8xWkMgKi8KKyNkZWZpbmUgV004OTYxX1JPMVpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUk8xWkMgKi8KKyNkZWZpbmUgV004OTYxX1JPMVpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk8xWkMgKi8KKyNkZWZpbmUgV004OTYxX1JPVVQxVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogUk9VVDFWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NjFfUk9VVDFWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBST1VUMVZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk2MV9ST1VUMVZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJPVVQxVk9MIC0gWzY6MF0gKi8KKworLyoKKyAqIFI0ICgweDA0KSAtIENsb2NraW5nMQorICovCisjZGVmaW5lIFdNODk2MV9BRENESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxQzAgIC8qIEFEQ0RJViAtIFs4OjZdICovCisjZGVmaW5lIFdNODk2MV9BRENESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEFEQ0RJViAtIFs4OjZdICovCisjZGVmaW5lIFdNODk2MV9BRENESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEFEQ0RJViAtIFs4OjZdICovCisjZGVmaW5lIFdNODk2MV9EQUNESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMzggIC8qIERBQ0RJViAtIFs1OjNdICovCisjZGVmaW5lIFdNODk2MV9EQUNESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQ0RJViAtIFs1OjNdICovCisjZGVmaW5lIFdNODk2MV9EQUNESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQ0RJViAtIFs1OjNdICovCisjZGVmaW5lIFdNODk2MV9NQ0xLRElWICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIE1DTEtESVYgKi8KKyNkZWZpbmUgV004OTYxX01DTEtESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTUNMS0RJViAqLworI2RlZmluZSBXTTg5NjFfTUNMS0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBNQ0xLRElWICovCisjZGVmaW5lIFdNODk2MV9NQ0xLRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEtESVYgKi8KKworLyoKKyAqIFI1ICgweDA1KSAtIEFEQyAmIERBQyBDb250cm9sIDEKKyAqLworI2RlZmluZSBXTTg5NjFfQURDUE9MX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDYwICAvKiBBRENQT0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5NjFfQURDUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENQT0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5NjFfQURDUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBRENQT0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5NjFfREFDTVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNNVSAqLworI2RlZmluZSBXTTg5NjFfREFDTVVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNNVSAqLworI2RlZmluZSBXTTg5NjFfREFDTVVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEQUNNVSAqLworI2RlZmluZSBXTTg5NjFfREFDTVVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNNVSAqLworI2RlZmluZSBXTTg5NjFfREVFTVBIX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDA2ICAvKiBERUVNUEggLSBbMjoxXSAqLworI2RlZmluZSBXTTg5NjFfREVFTVBIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBERUVNUEggLSBbMjoxXSAqLworI2RlZmluZSBXTTg5NjFfREVFTVBIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBERUVNUEggLSBbMjoxXSAqLworI2RlZmluZSBXTTg5NjFfQURDSFBEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENIUEQgKi8KKyNkZWZpbmUgV004OTYxX0FEQ0hQRF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDSFBEICovCisjZGVmaW5lIFdNODk2MV9BRENIUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ0hQRCAqLworI2RlZmluZSBXTTg5NjFfQURDSFBEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENIUEQgKi8KKworLyoKKyAqIFI2ICgweDA2KSAtIEFEQyAmIERBQyBDb250cm9sIDIKKyAqLworI2RlZmluZSBXTTg5NjFfQURDX0hQRl9DVVRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTgwICAvKiBBRENfSFBGX0NVVCAtIFs4OjddICovCisjZGVmaW5lIFdNODk2MV9BRENfSFBGX0NVVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEFEQ19IUEZfQ1VUIC0gWzg6N10gKi8KKyNkZWZpbmUgV004OTYxX0FEQ19IUEZfQ1VUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX0hQRl9DVVQgLSBbODo3XSAqLworI2RlZmluZSBXTTg5NjFfREFDUE9MX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDYwICAvKiBEQUNQT0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5NjFfREFDUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBEQUNQT0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5NjFfREFDUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEQUNQT0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5NjFfREFDU01NICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNTTU0gKi8KKyNkZWZpbmUgV004OTYxX0RBQ1NNTV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDU01NICovCisjZGVmaW5lIFdNODk2MV9EQUNTTU1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQ1NNTSAqLworI2RlZmluZSBXTTg5NjFfREFDU01NX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNTTU0gKi8KKyNkZWZpbmUgV004OTYxX0RBQ01SICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDTVIgKi8KKyNkZWZpbmUgV004OTYxX0RBQ01SX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDTVIgKi8KKyNkZWZpbmUgV004OTYxX0RBQ01SX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREFDTVIgKi8KKyNkZWZpbmUgV004OTYxX0RBQ01SX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTVIgKi8KKyNkZWZpbmUgV004OTYxX0RBQ1NMT1BFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDU0xPUEUgKi8KKyNkZWZpbmUgV004OTYxX0RBQ1NMT1BFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDU0xPUEUgKi8KKyNkZWZpbmUgV004OTYxX0RBQ1NMT1BFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDU0xPUEUgKi8KKyNkZWZpbmUgV004OTYxX0RBQ1NMT1BFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDU0xPUEUgKi8KKyNkZWZpbmUgV004OTYxX0RBQ19PU1IxMjggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDX09TUjEyOCAqLworI2RlZmluZSBXTTg5NjFfREFDX09TUjEyOF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNfT1NSMTI4ICovCisjZGVmaW5lIFdNODk2MV9EQUNfT1NSMTI4X1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTYxX0RBQ19PU1IxMjhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX09TUjEyOCAqLworCisvKgorICogUjcgKDB4MDcpIC0gQXVkaW8gSW50ZXJmYWNlIDAKKyAqLworI2RlZmluZSBXTTg5NjFfQUxSU1dBUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBTFJTV0FQICovCisjZGVmaW5lIFdNODk2MV9BTFJTV0FQX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFMUlNXQVAgKi8KKyNkZWZpbmUgV004OTYxX0FMUlNXQVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUxSU1dBUCAqLworI2RlZmluZSBXTTg5NjFfQUxSU1dBUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBTFJTV0FQICovCisjZGVmaW5lIFdNODk2MV9CQ0xLSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEJDTEtJTlYgKi8KKyNkZWZpbmUgV004OTYxX0JDTEtJTlZfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQkNMS0lOViAqLworI2RlZmluZSBXTTg5NjFfQkNMS0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBCQ0xLSU5WICovCisjZGVmaW5lIFdNODk2MV9CQ0xLSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEtJTlYgKi8KKyNkZWZpbmUgV004OTYxX01TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTVMgKi8KKyNkZWZpbmUgV004OTYxX01TX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTVMgKi8KKyNkZWZpbmUgV004OTYxX01TX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTVMgKi8KKyNkZWZpbmUgV004OTYxX01TX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTVMgKi8KKyNkZWZpbmUgV004OTYxX0RMUlNXQVAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRExSU1dBUCAqLworI2RlZmluZSBXTTg5NjFfRExSU1dBUF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBETFJTV0FQICovCisjZGVmaW5lIFdNODk2MV9ETFJTV0FQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIERMUlNXQVAgKi8KKyNkZWZpbmUgV004OTYxX0RMUlNXQVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRExSU1dBUCAqLworI2RlZmluZSBXTTg5NjFfTFJQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMUlAgKi8KKyNkZWZpbmUgV004OTYxX0xSUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTFJQICovCisjZGVmaW5lIFdNODk2MV9MUlBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExSUCAqLworI2RlZmluZSBXTTg5NjFfTFJQX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMUlAgKi8KKyNkZWZpbmUgV004OTYxX1dMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogV0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5NjFfV0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBXTCAtIFszOjJdICovCisjZGVmaW5lIFdNODk2MV9XTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFdMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTYxX0ZPUk1BVF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogRk9STUFUIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTYxX0ZPUk1BVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRk9STUFUIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTYxX0ZPUk1BVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRk9STUFUIC0gWzE6MF0gKi8KKworLyoKKyAqIFI4ICgweDA4KSAtIENsb2NraW5nMgorICovCisjZGVmaW5lIFdNODk2MV9EQ0xLRElWX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxQzAgIC8qIERDTEtESVYgLSBbODo2XSAqLworI2RlZmluZSBXTTg5NjFfRENMS0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBEQ0xLRElWIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTYxX0RDTEtESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogRENMS0RJViAtIFs4OjZdICovCisjZGVmaW5lIFdNODk2MV9DTEtfU1lTX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODk2MV9DTEtfU1lTX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODk2MV9DTEtfU1lTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODk2MV9DTEtfU1lTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODk2MV9DTEtfRFNQX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIENMS19EU1BfRU5BICovCisjZGVmaW5lIFdNODk2MV9DTEtfRFNQX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIENMS19EU1BfRU5BICovCisjZGVmaW5lIFdNODk2MV9DTEtfRFNQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIENMS19EU1BfRU5BICovCisjZGVmaW5lIFdNODk2MV9DTEtfRFNQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENMS19EU1BfRU5BICovCisjZGVmaW5lIFdNODk2MV9CQ0xLRElWX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEJDTEtESVYgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NjFfQkNMS0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBCQ0xLRElWIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTYxX0JDTEtESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQkNMS0RJViAtIFszOjBdICovCisKKy8qCisgKiBSOSAoMHgwOSkgLSBBdWRpbyBJbnRlcmZhY2UgMQorICovCisjZGVmaW5lIFdNODk2MV9EQUNDT01QX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMTggIC8qIERBQ0NPTVAgLSBbNDozXSAqLworI2RlZmluZSBXTTg5NjFfREFDQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEQUNDT01QIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTYxX0RBQ0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREFDQ09NUCAtIFs0OjNdICovCisjZGVmaW5lIFdNODk2MV9BRENDT01QX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDYgIC8qIEFEQ0NPTVAgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5NjFfQURDQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENDT01QIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTYxX0FEQ0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDQ09NUCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk2MV9MT09QQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExPT1BCQUNLICovCisjZGVmaW5lIFdNODk2MV9MT09QQkFDS19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExPT1BCQUNLICovCisjZGVmaW5lIFdNODk2MV9MT09QQkFDS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExPT1BCQUNLICovCisjZGVmaW5lIFdNODk2MV9MT09QQkFDS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPT1BCQUNLICovCisKKy8qCisgKiBSMTAgKDB4MEEpIC0gTGVmdCBEQUMgdm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTYxX0RBQ1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDVlUgKi8KKyNkZWZpbmUgV004OTYxX0RBQ1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDVlUgKi8KKyNkZWZpbmUgV004OTYxX0RBQ1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDVlUgKi8KKyNkZWZpbmUgV004OTYxX0RBQ1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDVlUgKi8KKyNkZWZpbmUgV004OTYxX0xEQUNWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogTERBQ1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk2MV9MREFDVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExEQUNWT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NjFfTERBQ1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMREFDVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMSAoMHgwQikgLSBSaWdodCBEQUMgdm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTYxX0RBQ1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDVlUgKi8KKyNkZWZpbmUgV004OTYxX0RBQ1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDVlUgKi8KKyNkZWZpbmUgV004OTYxX0RBQ1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDVlUgKi8KKyNkZWZpbmUgV004OTYxX0RBQ1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDVlUgKi8KKyNkZWZpbmUgV004OTYxX1JEQUNWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogUkRBQ1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk2MV9SREFDVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJEQUNWT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NjFfUkRBQ1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSREFDVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxNCAoMHgwRSkgLSBBdWRpbyBJbnRlcmZhY2UgMgorICovCisjZGVmaW5lIFdNODk2MV9MUkNMS19SQVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAxRkYgIC8qIExSQ0xLX1JBVEUgLSBbODowXSAqLworI2RlZmluZSBXTTg5NjFfTFJDTEtfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMUkNMS19SQVRFIC0gWzg6MF0gKi8KKyNkZWZpbmUgV004OTYxX0xSQ0xLX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgOSAgLyogTFJDTEtfUkFURSAtIFs4OjBdICovCisKKy8qCisgKiBSMTUgKDB4MEYpIC0gU29mdHdhcmUgUmVzZXQKKyAqLworI2RlZmluZSBXTTg5NjFfU1dfUlNUX0RFVl9JRDFfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBTV19SU1RfREVWX0lEMSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5NjFfU1dfUlNUX0RFVl9JRDFfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBTV19SU1RfREVWX0lEMSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5NjFfU1dfUlNUX0RFVl9JRDFfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBTV19SU1RfREVWX0lEMSAtIFsxNTowXSAqLworCisvKgorICogUjE3ICgweDExKSAtIEFMQzEKKyAqLworI2RlZmluZSBXTTg5NjFfQUxDU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTgwICAvKiBBTENTRUwgLSBbODo3XSAqLworI2RlZmluZSBXTTg5NjFfQUxDU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBBTENTRUwgLSBbODo3XSAqLworI2RlZmluZSBXTTg5NjFfQUxDU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBTENTRUwgLSBbODo3XSAqLworI2RlZmluZSBXTTg5NjFfTUFYR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBNQVhHQUlOIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTYxX01BWEdBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUFYR0FJTiAtIFs2OjRdICovCisjZGVmaW5lIFdNODk2MV9NQVhHQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1BWEdBSU4gLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NjFfQUxDTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBBTENMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTYxX0FMQ0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQUxDTCAtIFszOjBdICovCisjZGVmaW5lIFdNODk2MV9BTENMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFMQ0wgLSBbMzowXSAqLworCisvKgorICogUjE4ICgweDEyKSAtIEFMQzIKKyAqLworI2RlZmluZSBXTTg5NjFfQUxDWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBTENaQyAqLworI2RlZmluZSBXTTg5NjFfQUxDWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBTENaQyAqLworI2RlZmluZSBXTTg5NjFfQUxDWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBBTENaQyAqLworI2RlZmluZSBXTTg5NjFfQUxDWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBTENaQyAqLworI2RlZmluZSBXTTg5NjFfTUlOR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBNSU5HQUlOIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTYxX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlOR0FJTiAtIFs2OjRdICovCisjZGVmaW5lIFdNODk2MV9NSU5HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1JTkdBSU4gLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NjFfSExEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBITEQgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NjFfSExEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBITEQgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NjFfSExEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBITEQgLSBbMzowXSAqLworCisvKgorICogUjE5ICgweDEzKSAtIEFMQzMKKyAqLworI2RlZmluZSBXTTg5NjFfQUxDTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBTENNT0RFICovCisjZGVmaW5lIFdNODk2MV9BTENNT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFMQ01PREUgKi8KKyNkZWZpbmUgV004OTYxX0FMQ01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUxDTU9ERSAqLworI2RlZmluZSBXTTg5NjFfQUxDTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBTENNT0RFICovCisjZGVmaW5lIFdNODk2MV9EQ1lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjAgIC8qIERDWSAtIFs3OjRdICovCisjZGVmaW5lIFdNODk2MV9EQ1lfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERDWSAtIFs3OjRdICovCisjZGVmaW5lIFdNODk2MV9EQ1lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERDWSAtIFs3OjRdICovCisjZGVmaW5lIFdNODk2MV9BVEtfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEFUSyAtIFszOjBdICovCisjZGVmaW5lIFdNODk2MV9BVEtfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFUSyAtIFszOjBdICovCisjZGVmaW5lIFdNODk2MV9BVEtfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFUSyAtIFszOjBdICovCisKKy8qCisgKiBSMjAgKDB4MTQpIC0gTm9pc2UgR2F0ZQorICovCisjZGVmaW5lIFdNODk2MV9OR1RIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjggIC8qIE5HVEggLSBbNzozXSAqLworI2RlZmluZSBXTTg5NjFfTkdUSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBOR1RIIC0gWzc6M10gKi8KKyNkZWZpbmUgV004OTYxX05HVEhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTkdUSCAtIFs3OjNdICovCisjZGVmaW5lIFdNODk2MV9OR0cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE5HRyAqLworI2RlZmluZSBXTTg5NjFfTkdHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBOR0cgKi8KKyNkZWZpbmUgV004OTYxX05HR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTkdHICovCisjZGVmaW5lIFdNODk2MV9OR0dfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE5HRyAqLworI2RlZmluZSBXTTg5NjFfTkdBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBOR0FUICovCisjZGVmaW5lIFdNODk2MV9OR0FUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE5HQVQgKi8KKyNkZWZpbmUgV004OTYxX05HQVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTkdBVCAqLworI2RlZmluZSBXTTg5NjFfTkdBVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBOR0FUICovCisKKy8qCisgKiBSMjEgKDB4MTUpIC0gTGVmdCBBREMgdm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTYxX0FEQ1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDVlUgKi8KKyNkZWZpbmUgV004OTYxX0FEQ1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDVlUgKi8KKyNkZWZpbmUgV004OTYxX0FEQ1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDVlUgKi8KKyNkZWZpbmUgV004OTYxX0FEQ1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDVlUgKi8KKyNkZWZpbmUgV004OTYxX0xBRENWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogTEFEQ1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk2MV9MQURDVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExBRENWT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NjFfTEFEQ1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMQURDVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIyMiAoMHgxNikgLSBSaWdodCBBREMgdm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTYxX0FEQ1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDVlUgKi8KKyNkZWZpbmUgV004OTYxX0FEQ1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDVlUgKi8KKyNkZWZpbmUgV004OTYxX0FEQ1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDVlUgKi8KKyNkZWZpbmUgV004OTYxX0FEQ1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDVlUgKi8KKyNkZWZpbmUgV004OTYxX1JBRENWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogUkFEQ1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk2MV9SQURDVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJBRENWT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NjFfUkFEQ1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSQURDVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIyMyAoMHgxNykgLSBBZGRpdGlvbmFsIGNvbnRyb2woMSkKKyAqLworI2RlZmluZSBXTTg5NjFfVFNERU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBUU0RFTiAqLworI2RlZmluZSBXTTg5NjFfVFNERU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBUU0RFTiAqLworI2RlZmluZSBXTTg5NjFfVFNERU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBUU0RFTiAqLworI2RlZmluZSBXTTg5NjFfVFNERU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUU0RFTiAqLworI2RlZmluZSBXTTg5NjFfRE1PTk9NSVggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBETU9OT01JWCAqLworI2RlZmluZSBXTTg5NjFfRE1PTk9NSVhfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBETU9OT01JWCAqLworI2RlZmluZSBXTTg5NjFfRE1PTk9NSVhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBETU9OT01JWCAqLworI2RlZmluZSBXTTg5NjFfRE1PTk9NSVhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETU9OT01JWCAqLworI2RlZmluZSBXTTg5NjFfVE9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBUT0VOICovCisjZGVmaW5lIFdNODk2MV9UT0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRPRU4gKi8KKyNkZWZpbmUgV004OTYxX1RPRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogVE9FTiAqLworI2RlZmluZSBXTTg5NjFfVE9FTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUT0VOICovCisKKy8qCisgKiBSMjQgKDB4MTgpIC0gQWRkaXRpb25hbCBjb250cm9sKDIpCisgKi8KKyNkZWZpbmUgV004OTYxX1RSSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogVFJJUyAqLworI2RlZmluZSBXTTg5NjFfVFJJU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBUUklTICovCisjZGVmaW5lIFdNODk2MV9UUklTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFRSSVMgKi8KKyNkZWZpbmUgV004OTYxX1RSSVNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVFJJUyAqLworCisvKgorICogUjI1ICgweDE5KSAtIFB3ciBNZ210ICgxKQorICovCisjZGVmaW5lIFdNODk2MV9WTUlEU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxODAgIC8qIFZNSURTRUwgLSBbODo3XSAqLworI2RlZmluZSBXTTg5NjFfVk1JRFNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBWTUlEU0VMIC0gWzg6N10gKi8KKyNkZWZpbmUgV004OTYxX1ZNSURTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogVk1JRFNFTCAtIFs4OjddICovCisjZGVmaW5lIFdNODk2MV9WUkVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFZSRUYgKi8KKyNkZWZpbmUgV004OTYxX1ZSRUZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVlJFRiAqLworI2RlZmluZSBXTTg5NjFfVlJFRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBWUkVGICovCisjZGVmaW5lIFdNODk2MV9WUkVGX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZSRUYgKi8KKyNkZWZpbmUgV004OTYxX0FJTkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQUlOTCAqLworI2RlZmluZSBXTTg5NjFfQUlOTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBSU5MICovCisjZGVmaW5lIFdNODk2MV9BSU5MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEFJTkwgKi8KKyNkZWZpbmUgV004OTYxX0FJTkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlOTCAqLworI2RlZmluZSBXTTg5NjFfQUlOUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSU5SICovCisjZGVmaW5lIFdNODk2MV9BSU5SX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJTlIgKi8KKyNkZWZpbmUgV004OTYxX0FJTlJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlOUiAqLworI2RlZmluZSBXTTg5NjFfQUlOUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSU5SICovCisjZGVmaW5lIFdNODk2MV9BRENMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFEQ0wgKi8KKyNkZWZpbmUgV004OTYxX0FEQ0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQURDTCAqLworI2RlZmluZSBXTTg5NjFfQURDTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBBRENMICovCisjZGVmaW5lIFdNODk2MV9BRENMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0wgKi8KKyNkZWZpbmUgV004OTYxX0FEQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQURDUiAqLworI2RlZmluZSBXTTg5NjFfQURDUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBRENSICovCisjZGVmaW5lIFdNODk2MV9BRENSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ1IgKi8KKyNkZWZpbmUgV004OTYxX0FEQ1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDUiAqLworI2RlZmluZSBXTTg5NjFfTUlDQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNCICovCisjZGVmaW5lIFdNODk2MV9NSUNCX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ0IgKi8KKyNkZWZpbmUgV004OTYxX01JQ0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQiAqLworI2RlZmluZSBXTTg5NjFfTUlDQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCICovCisKKy8qCisgKiBSMjYgKDB4MUEpIC0gUHdyIE1nbXQgKDIpCisgKi8KKyNkZWZpbmUgV004OTYxX0RBQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDTCAqLworI2RlZmluZSBXTTg5NjFfREFDTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNMICovCisjZGVmaW5lIFdNODk2MV9EQUNMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQ0wgKi8KKyNkZWZpbmUgV004OTYxX0RBQ0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTCAqLworI2RlZmluZSBXTTg5NjFfREFDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQUNSICovCisjZGVmaW5lIFdNODk2MV9EQUNSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERBQ1IgKi8KKyNkZWZpbmUgV004OTYxX0RBQ1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogREFDUiAqLworI2RlZmluZSBXTTg5NjFfREFDUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNSICovCisjZGVmaW5lIFdNODk2MV9MT1VUMV9QR0EgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExPVVQxX1BHQSAqLworI2RlZmluZSBXTTg5NjFfTE9VVDFfUEdBX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMT1VUMV9QR0EgKi8KKyNkZWZpbmUgV004OTYxX0xPVVQxX1BHQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTE9VVDFfUEdBICovCisjZGVmaW5lIFdNODk2MV9MT1VUMV9QR0FfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPVVQxX1BHQSAqLworI2RlZmluZSBXTTg5NjFfUk9VVDFfUEdBICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBST1VUMV9QR0EgKi8KKyNkZWZpbmUgV004OTYxX1JPVVQxX1BHQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogUk9VVDFfUEdBICovCisjZGVmaW5lIFdNODk2MV9ST1VUMV9QR0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFJPVVQxX1BHQSAqLworI2RlZmluZSBXTTg5NjFfUk9VVDFfUEdBX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBST1VUMV9QR0EgKi8KKyNkZWZpbmUgV004OTYxX1NQS0xfUEdBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU1BLTF9QR0EgKi8KKyNkZWZpbmUgV004OTYxX1NQS0xfUEdBX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU1BLTF9QR0EgKi8KKyNkZWZpbmUgV004OTYxX1NQS0xfUEdBX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogU1BLTF9QR0EgKi8KKyNkZWZpbmUgV004OTYxX1NQS0xfUEdBX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLTF9QR0EgKi8KKyNkZWZpbmUgV004OTYxX1NQS1JfUEdBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU1BLUl9QR0EgKi8KKyNkZWZpbmUgV004OTYxX1NQS1JfUEdBX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU1BLUl9QR0EgKi8KKyNkZWZpbmUgV004OTYxX1NQS1JfUEdBX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogU1BLUl9QR0EgKi8KKyNkZWZpbmUgV004OTYxX1NQS1JfUEdBX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLUl9QR0EgKi8KKworLyoKKyAqIFIyNyAoMHgxQikgLSBBZGRpdGlvbmFsIENvbnRyb2wgKDMpCisgKi8KKyNkZWZpbmUgV004OTYxX1NBTVBMRV9SQVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogU0FNUExFX1JBVEUgLSBbMjowXSAqLworI2RlZmluZSBXTTg5NjFfU0FNUExFX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBTQU1QTEVfUkFURSAtIFsyOjBdICovCisjZGVmaW5lIFdNODk2MV9TQU1QTEVfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFNBTVBMRV9SQVRFIC0gWzI6MF0gKi8KKworLyoKKyAqIFIyOCAoMHgxQykgLSBBbnRpLXBvcAorICovCisjZGVmaW5lIFdNODk2MV9CVUZEQ09QRU4gICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEJVRkRDT1BFTiAqLworI2RlZmluZSBXTTg5NjFfQlVGRENPUEVOX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBCVUZEQ09QRU4gKi8KKyNkZWZpbmUgV004OTYxX0JVRkRDT1BFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQlVGRENPUEVOICovCisjZGVmaW5lIFdNODk2MV9CVUZEQ09QRU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJVRkRDT1BFTiAqLworI2RlZmluZSBXTTg5NjFfQlVGSU9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBCVUZJT0VOICovCisjZGVmaW5lIFdNODk2MV9CVUZJT0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEJVRklPRU4gKi8KKyNkZWZpbmUgV004OTYxX0JVRklPRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogQlVGSU9FTiAqLworI2RlZmluZSBXTTg5NjFfQlVGSU9FTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCVUZJT0VOICovCisjZGVmaW5lIFdNODk2MV9TT0ZUX1NUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFNPRlRfU1QgKi8KKyNkZWZpbmUgV004OTYxX1NPRlRfU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogU09GVF9TVCAqLworI2RlZmluZSBXTTg5NjFfU09GVF9TVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBTT0ZUX1NUICovCisjZGVmaW5lIFdNODk2MV9TT0ZUX1NUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNPRlRfU1QgKi8KKworLyoKKyAqIFIzMCAoMHgxRSkgLSBDbG9ja2luZyAzCisgKi8KKyNkZWZpbmUgV004OTYxX0NMS19UT19ESVZfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDE4MCAgLyogQ0xLX1RPX0RJViAtIFs4OjddICovCisjZGVmaW5lIFdNODk2MV9DTEtfVE9fRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIENMS19UT19ESVYgLSBbODo3XSAqLworI2RlZmluZSBXTTg5NjFfQ0xLX1RPX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBDTEtfVE9fRElWIC0gWzg6N10gKi8KKyNkZWZpbmUgV004OTYxX0NMS18yNTZLX0RJVl9NQVNLICAgICAgICAgICAgICAgIDB4MDA3RSAgLyogQ0xLXzI1NktfRElWIC0gWzY6MV0gKi8KKyNkZWZpbmUgV004OTYxX0NMS18yNTZLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgMSAgLyogQ0xLXzI1NktfRElWIC0gWzY6MV0gKi8KKyNkZWZpbmUgV004OTYxX0NMS18yNTZLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgNiAgLyogQ0xLXzI1NktfRElWIC0gWzY6MV0gKi8KKyNkZWZpbmUgV004OTYxX01BTlVBTF9NT0RFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUFOVUFMX01PREUgKi8KKyNkZWZpbmUgV004OTYxX01BTlVBTF9NT0RFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUFOVUFMX01PREUgKi8KKyNkZWZpbmUgV004OTYxX01BTlVBTF9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogTUFOVUFMX01PREUgKi8KKyNkZWZpbmUgV004OTYxX01BTlVBTF9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUFOVUFMX01PREUgKi8KKworLyoKKyAqIFIzMiAoMHgyMCkgLSBBRENMIHNpZ25hbCBwYXRoCisgKi8KKyNkZWZpbmUgV004OTYxX0xNSUNCT09TVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAzMCAgLyogTE1JQ0JPT1NUIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTYxX0xNSUNCT09TVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTE1JQ0JPT1NUIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTYxX0xNSUNCT09TVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTE1JQ0JPT1NUIC0gWzU6NF0gKi8KKworLyoKKyAqIFIzMyAoMHgyMSkgLSBBRENSIHNpZ25hbCBwYXRoCisgKi8KKyNkZWZpbmUgV004OTYxX1JNSUNCT09TVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAzMCAgLyogUk1JQ0JPT1NUIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTYxX1JNSUNCT09TVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogUk1JQ0JPT1NUIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTYxX1JNSUNCT09TVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogUk1JQ0JPT1NUIC0gWzU6NF0gKi8KKworLyoKKyAqIFI0MCAoMHgyOCkgLSBMT1VUMiB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NjFfU1BLVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBTUEtWVSAqLworI2RlZmluZSBXTTg5NjFfU1BLVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBTUEtWVSAqLworI2RlZmluZSBXTTg5NjFfU1BLVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBTUEtWVSAqLworI2RlZmluZSBXTTg5NjFfU1BLVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtWVSAqLworI2RlZmluZSBXTTg5NjFfU1BLTFpDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBTUEtMWkMgKi8KKyNkZWZpbmUgV004OTYxX1NQS0xaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogU1BLTFpDICovCisjZGVmaW5lIFdNODk2MV9TUEtMWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFNQS0xaQyAqLworI2RlZmluZSBXTTg5NjFfU1BLTFpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtMWkMgKi8KKyNkZWZpbmUgV004OTYxX1NQS0xWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogU1BLTFZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk2MV9TUEtMVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS0xWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NjFfU1BLTFZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBTUEtMVk9MIC0gWzY6MF0gKi8KKworLyoKKyAqIFI0MSAoMHgyOSkgLSBST1VUMiB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NjFfU1BLVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBTUEtWVSAqLworI2RlZmluZSBXTTg5NjFfU1BLVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBTUEtWVSAqLworI2RlZmluZSBXTTg5NjFfU1BLVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBTUEtWVSAqLworI2RlZmluZSBXTTg5NjFfU1BLVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtWVSAqLworI2RlZmluZSBXTTg5NjFfU1BLUlpDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBTUEtSWkMgKi8KKyNkZWZpbmUgV004OTYxX1NQS1JaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogU1BLUlpDICovCisjZGVmaW5lIFdNODk2MV9TUEtSWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFNQS1JaQyAqLworI2RlZmluZSBXTTg5NjFfU1BLUlpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtSWkMgKi8KKyNkZWZpbmUgV004OTYxX1NQS1JWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogU1BLUlZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk2MV9TUEtSVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS1JWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NjFfU1BLUlZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBTUEtSVk9MIC0gWzY6MF0gKi8KKworLyoKKyAqIFI0NyAoMHgyRikgLSBQd3IgTWdtdCAoMykKKyAqLworI2RlZmluZSBXTTg5NjFfVEVNUF9TSFVUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBURU1QX1NIVVQgKi8KKyNkZWZpbmUgV004OTYxX1RFTVBfU0hVVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogVEVNUF9TSFVUICovCisjZGVmaW5lIFdNODk2MV9URU1QX1NIVVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRFTVBfU0hVVCAqLworI2RlZmluZSBXTTg5NjFfVEVNUF9TSFVUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBURU1QX1NIVVQgKi8KKyNkZWZpbmUgV004OTYxX1RFTVBfV0FSTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVEVNUF9XQVJOICovCisjZGVmaW5lIFdNODk2MV9URU1QX1dBUk5fTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRFTVBfV0FSTiAqLworI2RlZmluZSBXTTg5NjFfVEVNUF9XQVJOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBURU1QX1dBUk4gKi8KKyNkZWZpbmUgV004OTYxX1RFTVBfV0FSTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVEVNUF9XQVJOICovCisKKy8qCisgKiBSNDggKDB4MzApIC0gQWRkaXRpb25hbCBDb250cm9sICg0KQorICovCisjZGVmaW5lIFdNODk2MV9UU0VOU0VOICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFRTRU5TRU4gKi8KKyNkZWZpbmUgV004OTYxX1RTRU5TRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogVFNFTlNFTiAqLworI2RlZmluZSBXTTg5NjFfVFNFTlNFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUU0VOU0VOICovCisjZGVmaW5lIFdNODk2MV9UU0VOU0VOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRTRU5TRU4gKi8KKyNkZWZpbmUgV004OTYxX01CU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUJTRUwgKi8KKyNkZWZpbmUgV004OTYxX01CU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUJTRUwgKi8KKyNkZWZpbmUgV004OTYxX01CU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTUJTRUwgKi8KKyNkZWZpbmUgV004OTYxX01CU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUJTRUwgKi8KKworLyoKKyAqIFI0OSAoMHgzMSkgLSBDbGFzcyBEIENvbnRyb2wgMQorICovCisjZGVmaW5lIFdNODk2MV9TUEtSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFNQS1JfRU5BICovCisjZGVmaW5lIFdNODk2MV9TUEtSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFNQS1JfRU5BICovCisjZGVmaW5lIFdNODk2MV9TUEtSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFNQS1JfRU5BICovCisjZGVmaW5lIFdNODk2MV9TUEtSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS1JfRU5BICovCisjZGVmaW5lIFdNODk2MV9TUEtMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFNQS0xfRU5BICovCisjZGVmaW5lIFdNODk2MV9TUEtMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFNQS0xfRU5BICovCisjZGVmaW5lIFdNODk2MV9TUEtMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFNQS0xfRU5BICovCisjZGVmaW5lIFdNODk2MV9TUEtMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS0xfRU5BICovCisKKy8qCisgKiBSNTEgKDB4MzMpIC0gQ2xhc3MgRCBDb250cm9sIDIKKyAqLworI2RlZmluZSBXTTg5NjFfQ0xBU1NEX0FDR0FJTl9NQVNLICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBDTEFTU0RfQUNHQUlOIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTYxX0NMQVNTRF9BQ0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogQ0xBU1NEX0FDR0FJTiAtIFsyOjBdICovCisjZGVmaW5lIFdNODk2MV9DTEFTU0RfQUNHQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgIDMgIC8qIENMQVNTRF9BQ0dBSU4gLSBbMjowXSAqLworCisvKgorICogUjU2ICgweDM4KSAtIENsb2NraW5nIDQKKyAqLworI2RlZmluZSBXTTg5NjFfQ0xLX0RDU19ESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMUUwICAvKiBDTEtfRENTX0RJViAtIFs4OjVdICovCisjZGVmaW5lIFdNODk2MV9DTEtfRENTX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIENMS19EQ1NfRElWIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTYxX0NMS19EQ1NfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNCAgLyogQ0xLX0RDU19ESVYgLSBbODo1XSAqLworI2RlZmluZSBXTTg5NjFfQ0xLX1NZU19SQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwMDFFICAvKiBDTEtfU1lTX1JBVEUgLSBbNDoxXSAqLworI2RlZmluZSBXTTg5NjFfQ0xLX1NZU19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAxICAvKiBDTEtfU1lTX1JBVEUgLSBbNDoxXSAqLworI2RlZmluZSBXTTg5NjFfQ0xLX1NZU19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICA0ICAvKiBDTEtfU1lTX1JBVEUgLSBbNDoxXSAqLworCisvKgorICogUjU3ICgweDM5KSAtIERTUCBTaWRldG9uZSAwCisgKi8KKyNkZWZpbmUgV004OTYxX0FEQ1JfREFDX1NWT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDBGMCAgLyogQURDUl9EQUNfU1ZPTCAtIFs3OjRdICovCisjZGVmaW5lIFdNODk2MV9BRENSX0RBQ19TVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ1JfREFDX1NWT0wgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5NjFfQURDUl9EQUNfU1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENSX0RBQ19TVk9MIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTYxX0FEQ19UT19EQUNSX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogQURDX1RPX0RBQ1IgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5NjFfQURDX1RPX0RBQ1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAyICAvKiBBRENfVE9fREFDUiAtIFszOjJdICovCisjZGVmaW5lIFdNODk2MV9BRENfVE9fREFDUl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19UT19EQUNSIC0gWzM6Ml0gKi8KKworLyoKKyAqIFI1OCAoMHgzQSkgLSBEU1AgU2lkZXRvbmUgMQorICovCisjZGVmaW5lIFdNODk2MV9BRENMX0RBQ19TVk9MX01BU0sgICAgICAgICAgICAgICAweDAwRjAgIC8qIEFEQ0xfREFDX1NWT0wgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5NjFfQURDTF9EQUNfU1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENMX0RBQ19TVk9MIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTYxX0FEQ0xfREFDX1NWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogQURDTF9EQUNfU1ZPTCAtIFs3OjRdICovCisjZGVmaW5lIFdNODk2MV9BRENfVE9fREFDTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIEFEQ19UT19EQUNMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTYxX0FEQ19UT19EQUNMX1NISUZUICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX1RPX0RBQ0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5NjFfQURDX1RPX0RBQ0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBBRENfVE9fREFDTCAtIFszOjJdICovCisKKy8qCisgKiBSNjAgKDB4M0MpIC0gREMgU2Vydm8gMAorICovCisjZGVmaW5lIFdNODk2MV9EQ1NfRU5BX0NIQU5fSU5MICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERDU19FTkFfQ0hBTl9JTkwgKi8KKyNkZWZpbmUgV004OTYxX0RDU19FTkFfQ0hBTl9JTkxfTUFTSyAgICAgICAgICAgIDB4MDA4MCAgLyogRENTX0VOQV9DSEFOX0lOTCAqLworI2RlZmluZSBXTTg5NjFfRENTX0VOQV9DSEFOX0lOTF9TSElGVCAgICAgICAgICAgICAgICA3ICAvKiBEQ1NfRU5BX0NIQU5fSU5MICovCisjZGVmaW5lIFdNODk2MV9EQ1NfRU5BX0NIQU5fSU5MX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERDU19FTkFfQ0hBTl9JTkwgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NUQVJUVVBfSU5MICAgICAgICAgICAgIDB4MDA0MCAgLyogRENTX1RSSUdfU1RBUlRVUF9JTkwgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NUQVJUVVBfSU5MX01BU0sgICAgICAgIDB4MDA0MCAgLyogRENTX1RSSUdfU1RBUlRVUF9JTkwgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NUQVJUVVBfSU5MX1NISUZUICAgICAgICAgICAgNiAgLyogRENTX1RSSUdfU1RBUlRVUF9JTkwgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NUQVJUVVBfSU5MX1dJRFRIICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU1RBUlRVUF9JTkwgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NFUklFU19JTkwgICAgICAgICAgICAgIDB4MDAxMCAgLyogRENTX1RSSUdfU0VSSUVTX0lOTCAqLworI2RlZmluZSBXTTg5NjFfRENTX1RSSUdfU0VSSUVTX0lOTF9NQVNLICAgICAgICAgMHgwMDEwICAvKiBEQ1NfVFJJR19TRVJJRVNfSU5MICovCisjZGVmaW5lIFdNODk2MV9EQ1NfVFJJR19TRVJJRVNfSU5MX1NISUZUICAgICAgICAgICAgIDQgIC8qIERDU19UUklHX1NFUklFU19JTkwgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NFUklFU19JTkxfV0lEVEggICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTX0lOTCAqLworI2RlZmluZSBXTTg5NjFfRENTX0VOQV9DSEFOX0lOUiAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfRU5BX0NIQU5fSU5SICovCisjZGVmaW5lIFdNODk2MV9EQ1NfRU5BX0NIQU5fSU5SX01BU0sgICAgICAgICAgICAweDAwMDggIC8qIERDU19FTkFfQ0hBTl9JTlIgKi8KKyNkZWZpbmUgV004OTYxX0RDU19FTkFfQ0hBTl9JTlJfU0hJRlQgICAgICAgICAgICAgICAgMyAgLyogRENTX0VOQV9DSEFOX0lOUiAqLworI2RlZmluZSBXTTg5NjFfRENTX0VOQV9DSEFOX0lOUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fSU5SICovCisjZGVmaW5lIFdNODk2MV9EQ1NfVFJJR19TVEFSVFVQX0lOUiAgICAgICAgICAgICAweDAwMDQgIC8qIERDU19UUklHX1NUQVJUVVBfSU5SICovCisjZGVmaW5lIFdNODk2MV9EQ1NfVFJJR19TVEFSVFVQX0lOUl9NQVNLICAgICAgICAweDAwMDQgIC8qIERDU19UUklHX1NUQVJUVVBfSU5SICovCisjZGVmaW5lIFdNODk2MV9EQ1NfVFJJR19TVEFSVFVQX0lOUl9TSElGVCAgICAgICAgICAgIDIgIC8qIERDU19UUklHX1NUQVJUVVBfSU5SICovCisjZGVmaW5lIFdNODk2MV9EQ1NfVFJJR19TVEFSVFVQX0lOUl9XSURUSCAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfSU5SICovCisjZGVmaW5lIFdNODk2MV9EQ1NfVFJJR19TRVJJRVNfSU5SICAgICAgICAgICAgICAweDAwMDEgIC8qIERDU19UUklHX1NFUklFU19JTlIgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NFUklFU19JTlJfTUFTSyAgICAgICAgIDB4MDAwMSAgLyogRENTX1RSSUdfU0VSSUVTX0lOUiAqLworI2RlZmluZSBXTTg5NjFfRENTX1RSSUdfU0VSSUVTX0lOUl9TSElGVCAgICAgICAgICAgICAwICAvKiBEQ1NfVFJJR19TRVJJRVNfSU5SICovCisjZGVmaW5lIFdNODk2MV9EQ1NfVFJJR19TRVJJRVNfSU5SX1dJRFRIICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU19JTlIgKi8KKworLyoKKyAqIFI2MSAoMHgzRCkgLSBEQyBTZXJ2byAxCisgKi8KKyNkZWZpbmUgV004OTYxX0RDU19FTkFfQ0hBTl9IUEwgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogRENTX0VOQV9DSEFOX0hQTCAqLworI2RlZmluZSBXTTg5NjFfRENTX0VOQV9DSEFOX0hQTF9NQVNLICAgICAgICAgICAgMHgwMDgwICAvKiBEQ1NfRU5BX0NIQU5fSFBMICovCisjZGVmaW5lIFdNODk2MV9EQ1NfRU5BX0NIQU5fSFBMX1NISUZUICAgICAgICAgICAgICAgIDcgIC8qIERDU19FTkFfQ0hBTl9IUEwgKi8KKyNkZWZpbmUgV004OTYxX0RDU19FTkFfQ0hBTl9IUExfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogRENTX0VOQV9DSEFOX0hQTCAqLworI2RlZmluZSBXTTg5NjFfRENTX1RSSUdfU1RBUlRVUF9IUEwgICAgICAgICAgICAgMHgwMDQwICAvKiBEQ1NfVFJJR19TVEFSVFVQX0hQTCAqLworI2RlZmluZSBXTTg5NjFfRENTX1RSSUdfU1RBUlRVUF9IUExfTUFTSyAgICAgICAgMHgwMDQwICAvKiBEQ1NfVFJJR19TVEFSVFVQX0hQTCAqLworI2RlZmluZSBXTTg5NjFfRENTX1RSSUdfU1RBUlRVUF9IUExfU0hJRlQgICAgICAgICAgICA2ICAvKiBEQ1NfVFJJR19TVEFSVFVQX0hQTCAqLworI2RlZmluZSBXTTg5NjFfRENTX1RSSUdfU1RBUlRVUF9IUExfV0lEVEggICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TVEFSVFVQX0hQTCAqLworI2RlZmluZSBXTTg5NjFfRENTX1RSSUdfU0VSSUVTX0hQTCAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQ1NfVFJJR19TRVJJRVNfSFBMICovCisjZGVmaW5lIFdNODk2MV9EQ1NfVFJJR19TRVJJRVNfSFBMX01BU0sgICAgICAgICAweDAwMTAgIC8qIERDU19UUklHX1NFUklFU19IUEwgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NFUklFU19IUExfU0hJRlQgICAgICAgICAgICAgNCAgLyogRENTX1RSSUdfU0VSSUVTX0hQTCAqLworI2RlZmluZSBXTTg5NjFfRENTX1RSSUdfU0VSSUVTX0hQTF9XSURUSCAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TRVJJRVNfSFBMICovCisjZGVmaW5lIFdNODk2MV9EQ1NfRU5BX0NIQU5fSFBSICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERDU19FTkFfQ0hBTl9IUFIgKi8KKyNkZWZpbmUgV004OTYxX0RDU19FTkFfQ0hBTl9IUFJfTUFTSyAgICAgICAgICAgIDB4MDAwOCAgLyogRENTX0VOQV9DSEFOX0hQUiAqLworI2RlZmluZSBXTTg5NjFfRENTX0VOQV9DSEFOX0hQUl9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBEQ1NfRU5BX0NIQU5fSFBSICovCisjZGVmaW5lIFdNODk2MV9EQ1NfRU5BX0NIQU5fSFBSX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERDU19FTkFfQ0hBTl9IUFIgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NUQVJUVVBfSFBSICAgICAgICAgICAgIDB4MDAwNCAgLyogRENTX1RSSUdfU1RBUlRVUF9IUFIgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NUQVJUVVBfSFBSX01BU0sgICAgICAgIDB4MDAwNCAgLyogRENTX1RSSUdfU1RBUlRVUF9IUFIgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NUQVJUVVBfSFBSX1NISUZUICAgICAgICAgICAgMiAgLyogRENTX1RSSUdfU1RBUlRVUF9IUFIgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NUQVJUVVBfSFBSX1dJRFRIICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU1RBUlRVUF9IUFIgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NFUklFU19IUFIgICAgICAgICAgICAgIDB4MDAwMSAgLyogRENTX1RSSUdfU0VSSUVTX0hQUiAqLworI2RlZmluZSBXTTg5NjFfRENTX1RSSUdfU0VSSUVTX0hQUl9NQVNLICAgICAgICAgMHgwMDAxICAvKiBEQ1NfVFJJR19TRVJJRVNfSFBSICovCisjZGVmaW5lIFdNODk2MV9EQ1NfVFJJR19TRVJJRVNfSFBSX1NISUZUICAgICAgICAgICAgIDAgIC8qIERDU19UUklHX1NFUklFU19IUFIgKi8KKyNkZWZpbmUgV004OTYxX0RDU19UUklHX1NFUklFU19IUFJfV0lEVEggICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTX0hQUiAqLworCisvKgorICogUjYzICgweDNGKSAtIERDIFNlcnZvIDMKKyAqLworI2RlZmluZSBXTTg5NjFfRENTX0ZJTFRfQldfU0VSSUVTX01BU0sgICAgICAgICAgMHgwMDMwICAvKiBEQ1NfRklMVF9CV19TRVJJRVMgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5NjFfRENTX0ZJTFRfQldfU0VSSUVTX1NISUZUICAgICAgICAgICAgICA0ICAvKiBEQ1NfRklMVF9CV19TRVJJRVMgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5NjFfRENTX0ZJTFRfQldfU0VSSUVTX1dJRFRIICAgICAgICAgICAgICAyICAvKiBEQ1NfRklMVF9CV19TRVJJRVMgLSBbNTo0XSAqLworCisvKgorICogUjY1ICgweDQxKSAtIERDIFNlcnZvIDUKKyAqLworI2RlZmluZSBXTTg5NjFfRENTX1NFUklFU19OT19IUF9NQVNLICAgICAgICAgICAgMHgwMDdGICAvKiBEQ1NfU0VSSUVTX05PX0hQIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTYxX0RDU19TRVJJRVNfTk9fSFBfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRENTX1NFUklFU19OT19IUCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk2MV9EQ1NfU0VSSUVTX05PX0hQX1dJRFRIICAgICAgICAgICAgICAgIDcgIC8qIERDU19TRVJJRVNfTk9fSFAgLSBbNjowXSAqLworCisvKgorICogUjY4ICgweDQ0KSAtIEFuYWxvZ3VlIFBHQSBCaWFzCisgKi8KKyNkZWZpbmUgV004OTYxX0hQX1BHQVNfQklBU19NQVNLICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogSFBfUEdBU19CSUFTIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTYxX0hQX1BHQVNfQklBU19TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBfUEdBU19CSUFTIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTYxX0hQX1BHQVNfQklBU19XSURUSCAgICAgICAgICAgICAgICAgICAgMyAgLyogSFBfUEdBU19CSUFTIC0gWzI6MF0gKi8KKworLyoKKyAqIFI2OSAoMHg0NSkgLSBBbmFsb2d1ZSBIUCAwCisgKi8KKyNkZWZpbmUgV004OTYxX0hQTF9STVZfU0hPUlQgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5NjFfSFBMX1JNVl9TSE9SVF9NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUExfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk2MV9IUExfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTYxX0hQTF9STVZfU0hPUlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5NjFfSFBMX0VOQV9PVVRQICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUExfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTYxX0hQTF9FTkFfT1VUUF9NQVNLICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODk2MV9IUExfRU5BX09VVFBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQTF9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5NjFfSFBMX0VOQV9PVVRQX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBIUExfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTYxX0hQTF9FTkFfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTYxX0hQTF9FTkFfRExZX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTYxX0hQTF9FTkFfRExZX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogSFBMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTYxX0hQTF9FTkFfRExZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTYxX0hQTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSFBMX0VOQSAqLworI2RlZmluZSBXTTg5NjFfSFBMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBIUExfRU5BICovCisjZGVmaW5lIFdNODk2MV9IUExfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEhQTF9FTkEgKi8KKyNkZWZpbmUgV004OTYxX0hQTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX0VOQSAqLworI2RlZmluZSBXTTg5NjFfSFBSX1JNVl9TSE9SVCAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBIUFJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk2MV9IUFJfUk1WX1NIT1JUX01BU0sgICAgICAgICAgICAgICAweDAwMDggIC8qIEhQUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTYxX0hQUl9STVZfU0hPUlRfU0hJRlQgICAgICAgICAgICAgICAgICAgMyAgLyogSFBSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5NjFfSFBSX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk2MV9IUFJfRU5BX09VVFAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5NjFfSFBSX0VOQV9PVVRQX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUFJfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTYxX0hQUl9FTkFfT1VUUF9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogSFBSX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODk2MV9IUFJfRU5BX09VVFBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5NjFfSFBSX0VOQV9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5NjFfSFBSX0VOQV9ETFlfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5NjFfSFBSX0VOQV9ETFlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5NjFfSFBSX0VOQV9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5NjFfSFBSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBIUFJfRU5BICovCisjZGVmaW5lIFdNODk2MV9IUFJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEhQUl9FTkEgKi8KKyNkZWZpbmUgV004OTYxX0hQUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBSX0VOQSAqLworI2RlZmluZSBXTTg5NjFfSFBSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfRU5BICovCisKKy8qCisgKiBSNzEgKDB4NDcpIC0gQW5hbG9ndWUgSFAgMgorICovCisjZGVmaW5lIFdNODk2MV9IUExfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxQzAgIC8qIEhQTF9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5NjFfSFBMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUExfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTYxX0hQTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogSFBMX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk2MV9IUFJfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMzggIC8qIEhQUl9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5NjFfSFBSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBIUFJfVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTYxX0hQUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogSFBSX1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk2MV9IUF9CSUFTX0JPT1NUX01BU0sgICAgICAgICAgICAgICAweDAwMDcgIC8qIEhQX0JJQVNfQk9PU1QgLSBbMjowXSAqLworI2RlZmluZSBXTTg5NjFfSFBfQklBU19CT09TVF9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBIUF9CSUFTX0JPT1NUIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTYxX0hQX0JJQVNfQk9PU1RfV0lEVEggICAgICAgICAgICAgICAgICAgMyAgLyogSFBfQklBU19CT09TVCAtIFsyOjBdICovCisKKy8qCisgKiBSNzIgKDB4NDgpIC0gQ2hhcmdlIFB1bXAgMQorICovCisjZGVmaW5lIFdNODk2MV9DUF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIENQX0VOQSAqLworI2RlZmluZSBXTTg5NjFfQ1BfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBDUF9FTkEgKi8KKyNkZWZpbmUgV004OTYxX0NQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQ1BfRU5BICovCisjZGVmaW5lIFdNODk2MV9DUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENQX0VOQSAqLworCisvKgorICogUjgyICgweDUyKSAtIENoYXJnZSBQdW1wIEIKKyAqLworI2RlZmluZSBXTTg5NjFfQ1BfRFlOX1BXUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBDUF9EWU5fUFdSIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTYxX0NQX0RZTl9QV1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQ1BfRFlOX1BXUiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk2MV9DUF9EWU5fUFdSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIENQX0RZTl9QV1IgLSBbMTowXSAqLworCisvKgorICogUjg3ICgweDU3KSAtIFdyaXRlIFNlcXVlbmNlciAxCisgKi8KKyNkZWZpbmUgV004OTYxX1dTRVFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogV1NFUV9FTkEgKi8KKyNkZWZpbmUgV004OTYxX1dTRVFfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogV1NFUV9FTkEgKi8KKyNkZWZpbmUgV004OTYxX1dTRVFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogV1NFUV9FTkEgKi8KKyNkZWZpbmUgV004OTYxX1dTRVFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9FTkEgKi8KKyNkZWZpbmUgV004OTYxX1dTRVFfV1JJVEVfSU5ERVhfTUFTSyAgICAgICAgICAgIDB4MDAxRiAgLyogV1NFUV9XUklURV9JTkRFWCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk2MV9XU0VRX1dSSVRFX0lOREVYX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIFdTRVFfV1JJVEVfSU5ERVggLSBbNDowXSAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9XUklURV9JTkRFWF9XSURUSCAgICAgICAgICAgICAgICA1ICAvKiBXU0VRX1dSSVRFX0lOREVYIC0gWzQ6MF0gKi8KKworLyoKKyAqIFI4OCAoMHg1OCkgLSBXcml0ZSBTZXF1ZW5jZXIgMgorICovCisjZGVmaW5lIFdNODk2MV9XU0VRX0VPUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRU9TICovCisjZGVmaW5lIFdNODk2MV9XU0VRX0VPU19NQVNLICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRU9TICovCisjZGVmaW5lIFdNODk2MV9XU0VRX0VPU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfRU9TICovCisjZGVmaW5lIFdNODk2MV9XU0VRX0VPU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRU9TICovCisjZGVmaW5lIFdNODk2MV9XU0VRX0FERFJfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIFdTRVFfQUREUiAtIFs3OjBdICovCisjZGVmaW5lIFdNODk2MV9XU0VRX0FERFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFdTRVFfQUREUiAtIFs3OjBdICovCisjZGVmaW5lIFdNODk2MV9XU0VRX0FERFJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfQUREUiAtIFs3OjBdICovCisKKy8qCisgKiBSODkgKDB4NTkpIC0gV3JpdGUgU2VxdWVuY2VyIDMKKyAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9EQVRBX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBXU0VRX0RBVEEgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9EQVRBX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBXU0VRX0RBVEEgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9EQVRBX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0RBVEEgLSBbNzowXSAqLworCisvKgorICogUjkwICgweDVBKSAtIFdyaXRlIFNlcXVlbmNlciA0CisgKi8KKyNkZWZpbmUgV004OTYxX1dTRVFfQUJPUlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9BQk9SVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODk2MV9XU0VRX0FCT1JUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTYxX1dTRVFfQUJPUlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODk2MV9XU0VRX1NUQVJUX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTYxX1dTRVFfU1RBUlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9TVEFSVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODk2MV9XU0VRX1NUQVJUX0lOREVYX01BU0sgICAgICAgICAgICAweDAwM0YgIC8qIFdTRVFfU1RBUlRfSU5ERVggLSBbNTowXSAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9TVEFSVF9JTkRFWF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBXU0VRX1NUQVJUX0lOREVYIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTYxX1dTRVFfU1RBUlRfSU5ERVhfV0lEVEggICAgICAgICAgICAgICAgNiAgLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs1OjBdICovCisKKy8qCisgKiBSOTEgKDB4NUIpIC0gV3JpdGUgU2VxdWVuY2VyIDUKKyAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9EQVRBX1dJRFRIX01BU0sgICAgICAgICAgICAgMHgwMDcwICAvKiBXU0VRX0RBVEFfV0lEVEggLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9EQVRBX1dJRFRIX1NISUZUICAgICAgICAgICAgICAgICA0ICAvKiBXU0VRX0RBVEFfV0lEVEggLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9EQVRBX1dJRFRIX1dJRFRIICAgICAgICAgICAgICAgICAzICAvKiBXU0VRX0RBVEFfV0lEVEggLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9EQVRBX1NUQVJUX01BU0sgICAgICAgICAgICAgMHgwMDBGICAvKiBXU0VRX0RBVEFfU1RBUlQgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9EQVRBX1NUQVJUX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBXU0VRX0RBVEFfU1RBUlQgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9EQVRBX1NUQVJUX1dJRFRIICAgICAgICAgICAgICAgICA0ICAvKiBXU0VRX0RBVEFfU1RBUlQgLSBbMzowXSAqLworCisvKgorICogUjkyICgweDVDKSAtIFdyaXRlIFNlcXVlbmNlciA2CisgKi8KKyNkZWZpbmUgV004OTYxX1dTRVFfREVMQVlfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogV1NFUV9ERUxBWSAtIFszOjBdICovCisjZGVmaW5lIFdNODk2MV9XU0VRX0RFTEFZX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFdTRVFfREVMQVkgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9ERUxBWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBXU0VRX0RFTEFZIC0gWzM6MF0gKi8KKworLyoKKyAqIFI5MyAoMHg1RCkgLSBXcml0ZSBTZXF1ZW5jZXIgNworICovCisjZGVmaW5lIFdNODk2MV9XU0VRX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5NjFfV1NFUV9CVVNZX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBXU0VRX0JVU1kgKi8KKyNkZWZpbmUgV004OTYxX1dTRVFfQlVTWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9CVVNZICovCisjZGVmaW5lIFdNODk2MV9XU0VRX0JVU1lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfQlVTWSAqLworCisvKgorICogUjI1MiAoMHhGQykgLSBHZW5lcmFsIHRlc3QgMQorICovCisjZGVmaW5lIFdNODk2MV9BUkFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFSQV9FTkEgKi8KKyNkZWZpbmUgV004OTYxX0FSQV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQVJBX0VOQSAqLworI2RlZmluZSBXTTg5NjFfQVJBX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBUkFfRU5BICovCisjZGVmaW5lIFdNODk2MV9BUkFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFSQV9FTkEgKi8KKyNkZWZpbmUgV004OTYxX0FVVE9fSU5DICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQVVUT19JTkMgKi8KKyNkZWZpbmUgV004OTYxX0FVVE9fSU5DX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQVVUT19JTkMgKi8KKyNkZWZpbmUgV004OTYxX0FVVE9fSU5DX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQVVUT19JTkMgKi8KKyNkZWZpbmUgV004OTYxX0FVVE9fSU5DX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQVVUT19JTkMgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3MS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzEuYwppbmRleCAwMzJkY2EyLi5kNjZlZmIwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3MS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTcxLmMKQEAgLTU5LDQ0ICs1OSw3IEBACiAJMHgwMDc5LCAweDAwNzksIDB4MDA3OSwgICAgICAgICAgLyogNDAgKi8KIH07CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdtODk3MV9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JdW5zaWduZWQgaW50IHJlZykKLXsKLQl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlpZiAocmVnIDwgV004OTcxX1JFR19DT1VOVCkKLQkJcmV0dXJuIGNhY2hlW3JlZ107Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3bTg5NzFfd3JpdGVfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQl1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JaWYgKHJlZyA8IFdNODk3MV9SRUdfQ09VTlQpCi0JCWNhY2hlW3JlZ10gPSB2YWx1ZTsKLX0KLQotc3RhdGljIGludCB3bTg5NzFfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAotCXVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQl1OCBkYXRhWzJdOwotCi0JLyogZGF0YSBpcwotCSAqICAgRDE1Li5EOSBXTTg3NTMgcmVnaXN0ZXIgb2Zmc2V0Ci0JICogICBEOC4uLkQwIHJlZ2lzdGVyIGRhdGEKLQkgKi8KLQlkYXRhWzBdID0gKHJlZyA8PCAxKSB8ICgodmFsdWUgPj4gOCkgJiAweDAwMDEpOwotCWRhdGFbMV0gPSB2YWx1ZSAmIDB4MDBmZjsKLQotCXdtODk3MV93cml0ZV9yZWdfY2FjaGUgKGNvZGVjLCByZWcsIHZhbHVlKTsKLQlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpID09IDIpCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIC1FSU87Ci19Ci0KLSNkZWZpbmUgd204OTcxX3Jlc2V0KGMpCXdtODk3MV93cml0ZShjLCBXTTg5NzFfUkVTRVQsIDApCisjZGVmaW5lIHdtODk3MV9yZXNldChjKQlzbmRfc29jX3dyaXRlKGMsIFdNODk3MV9SRVNFVCwgMCkKIAogLyogV004OTcxIENvbnRyb2xzICovCiBzdGF0aWMgY29uc3QgY2hhciAqd204OTcxX2Jhc3NbXSA9IHsgIkxpbmVhciBDb250cm9sIiwgIkFkYXB0aXZlIEJvb3N0IiB9OwpAQCAtNTIxLDcgKzQ4NCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXdtODk3MV93cml0ZShjb2RlYywgV004OTcxX0lGQUNFLCBpZmFjZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTcxX0lGQUNFLCBpZmFjZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUzMyw4ICs0OTYsOCBAQAogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTcxX3ByaXYgKndtODk3MSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7Ci0JdTE2IGlmYWNlID0gd204OTcxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NzFfSUZBQ0UpICYgMHgxZjM7Ci0JdTE2IHNyYXRlID0gd204OTcxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NzFfU1JBVEUpICYgMHgxYzA7CisJdTE2IGlmYWNlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzFfSUZBQ0UpICYgMHgxZjM7CisJdTE2IHNyYXRlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzFfU1JBVEUpICYgMHgxYzA7CiAJaW50IGNvZWZmID0gZ2V0X2NvZWZmKHdtODk3MS0+c3lzY2xrLCBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKIAogCS8qIGJpdCBzaXplICovCkBAIC01NTMsOSArNTE2LDkgQEAKIAl9CiAKIAkvKiBzZXQgaWZhY2UgJiBzcmF0ZSAqLwotCXdtODk3MV93cml0ZShjb2RlYywgV004OTcxX0lGQUNFLCBpZmFjZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTcxX0lGQUNFLCBpZmFjZSk7CiAJaWYgKGNvZWZmID49IDApCi0JCXdtODk3MV93cml0ZShjb2RlYywgV004OTcxX1NSQVRFLCBzcmF0ZSB8CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3MV9TUkFURSwgc3JhdGUgfAogCQkJKGNvZWZmX2Rpdltjb2VmZl0uc3IgPDwgMSkgfCBjb2VmZl9kaXZbY29lZmZdLnVzYik7CiAKIAlyZXR1cm4gMDsKQEAgLTU2NCwzMyArNTI3LDMzIEBACiBzdGF0aWMgaW50IHdtODk3MV9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwotCXUxNiBtdXRlX3JlZyA9IHdtODk3MV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTcxX0FEQ0RBQykgJiAweGZmZjc7CisJdTE2IG11dGVfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzFfQURDREFDKSAmIDB4ZmZmNzsKIAogCWlmIChtdXRlKQotCQl3bTg5NzFfd3JpdGUoY29kZWMsIFdNODk3MV9BRENEQUMsIG11dGVfcmVnIHwgMHg4KTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTcxX0FEQ0RBQywgbXV0ZV9yZWcgfCAweDgpOwogCWVsc2UKLQkJd204OTcxX3dyaXRlKGNvZGVjLCBXTTg5NzFfQURDREFDLCBtdXRlX3JlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3MV9BRENEQUMsIG11dGVfcmVnKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB3bTg5NzFfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewotCXUxNiBwd3JfcmVnID0gd204OTcxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NzFfUFdSMSkgJiAweGZlM2U7CisJdTE2IHB3cl9yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3MV9QV1IxKSAmIDB4ZmUzZTsKIAogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKIAkJLyogc2V0IHZtaWQgdG8gNTBrIGFuZCB1bm11dGUgZGFjICovCi0JCXdtODk3MV93cml0ZShjb2RlYywgV004OTcxX1BXUjEsIHB3cl9yZWcgfCAweDAwYzEpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzFfUFdSMSwgcHdyX3JlZyB8IDB4MDBjMSk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCS8qIG11dGUgZGFjIGFuZCBzZXQgdm1pZCB0byA1MDBrLCBlbmFibGUgVlJFRiAqLwotCQl3bTg5NzFfd3JpdGUoY29kZWMsIFdNODk3MV9QV1IxLCBwd3JfcmVnIHwgMHgwMTQwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTcxX1BXUjEsIHB3cl9yZWcgfCAweDAxNDApOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19PRkY6Ci0JCXdtODk3MV93cml0ZShjb2RlYywgV004OTcxX1BXUjEsIDB4MDAwMSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3MV9QV1IxLCAweDAwMDEpOwogCQlicmVhazsKIAl9CiAJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKQEAgLTY2Nyw4ICs2MzAsOCBAQAogCiAJLyogY2hhcmdlIHdtODk3MSBjYXBzICovCiAJaWYgKGNvZGVjLT5zdXNwZW5kX2JpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09OKSB7Ci0JCXJlZyA9IHdtODk3MV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTcxX1BXUjEpICYgMHhmZTNlOwotCQl3bTg5NzFfd3JpdGUoY29kZWMsIFdNODk3MV9QV1IxLCByZWcgfCAweDAxYzApOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3MV9QV1IxKSAmIDB4ZmUzZTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTcxX1BXUjEsIHJlZyB8IDB4MDFjMCk7CiAJCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09OOwogCQlxdWV1ZV9kZWxheWVkX3dvcmsod204OTcxX3dvcmtxLCAmY29kZWMtPmRlbGF5ZWRfd29yaywKIAkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwpAQCAtNjc3LDE1ICs2NDAsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bTg5NzFfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKK3N0YXRpYyBpbnQgd204OTcxX2luaXQoc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYsCisJCSAgICAgICBlbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2wpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlpbnQgcmVnLCByZXQgPSAwOwogCiAJY29kZWMtPm5hbWUgPSAiV004OTcxIjsKIAljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+cmVhZCA9IHdtODk3MV9yZWFkX3JlZ19jYWNoZTsKLQljb2RlYy0+d3JpdGUgPSB3bTg5NzFfd3JpdGU7CiAJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204OTcxX3NldF9iaWFzX2xldmVsOwogCWNvZGVjLT5kYWkgPSAmd204OTcxX2RhaTsKIAljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODk3MV9yZWcpOwpAQCAtNjk1LDQyICs2NTcsNDggQEAKIAlpZiAoY29kZWMtPnJlZ19jYWNoZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA3LCA5LCBjb250cm9sKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIndtODk3MTogZmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKIAl3bTg5NzFfcmVzZXQoY29kZWMpOwogCiAJLyogcmVnaXN0ZXIgcGNtcyAqLwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ3bTg5NzE6IGZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7Ci0JCWdvdG8gcGNtX2VycjsKKwkJZ290byBlcnI7CiAJfQogCiAJLyogY2hhcmdlIG91dHB1dCBjYXBzIC0gc2V0IHZtaWQgdG8gNWsgZm9yIHF1aWNrIHBvd2VyIHVwICovCi0JcmVnID0gd204OTcxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NzFfUFdSMSkgJiAweGZlM2U7Ci0Jd204OTcxX3dyaXRlKGNvZGVjLCBXTTg5NzFfUFdSMSwgcmVnIHwgMHgwMWMwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3MV9QV1IxKSAmIDB4ZmUzZTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzFfUFdSMSwgcmVnIHwgMHgwMWMwKTsKIAljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19TVEFOREJZOwogCXF1ZXVlX2RlbGF5ZWRfd29yayh3bTg5NzFfd29ya3EsICZjb2RlYy0+ZGVsYXllZF93b3JrLAogCQltc2Vjc190b19qaWZmaWVzKDEwMDApKTsKIAogCS8qIHNldCB0aGUgdXBkYXRlIGJpdHMgKi8KLQlyZWcgPSB3bTg5NzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk3MV9MREFDKTsKLQl3bTg5NzFfd3JpdGUoY29kZWMsIFdNODk3MV9MREFDLCByZWcgfCAweDAxMDApOwotCXJlZyA9IHdtODk3MV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTcxX1JEQUMpOwotCXdtODk3MV93cml0ZShjb2RlYywgV004OTcxX1JEQUMsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzFfTERBQyk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTcxX0xEQUMsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzFfUkRBQyk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTcxX1JEQUMsIHJlZyB8IDB4MDEwMCk7CiAKLQlyZWcgPSB3bTg5NzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk3MV9MT1VUMVYpOwotCXdtODk3MV93cml0ZShjb2RlYywgV004OTcxX0xPVVQxViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg5NzFfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk3MV9ST1VUMVYpOwotCXdtODk3MV93cml0ZShjb2RlYywgV004OTcxX1JPVVQxViwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3MV9MT1VUMVYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3MV9MT1VUMVYsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzFfUk9VVDFWKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzFfUk9VVDFWLCByZWcgfCAweDAxMDApOwogCi0JcmVnID0gd204OTcxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NzFfTE9VVDJWKTsKLQl3bTg5NzFfd3JpdGUoY29kZWMsIFdNODk3MV9MT1VUMlYsIHJlZyB8IDB4MDEwMCk7Ci0JcmVnID0gd204OTcxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5NzFfUk9VVDJWKTsKLQl3bTg5NzFfd3JpdGUoY29kZWMsIFdNODk3MV9ST1VUMlYsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzFfTE9VVDJWKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzFfTE9VVDJWLCByZWcgfCAweDAxMDApOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTcxX1JPVVQyVik7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTcxX1JPVVQyViwgcmVnIHwgMHgwMTAwKTsKIAotCXJlZyA9IHdtODk3MV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTcxX0xJTlZPTCk7Ci0Jd204OTcxX3dyaXRlKGNvZGVjLCBXTTg5NzFfTElOVk9MLCByZWcgfCAweDAxMDApOwotCXJlZyA9IHdtODk3MV9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTcxX1JJTlZPTCk7Ci0Jd204OTcxX3dyaXRlKGNvZGVjLCBXTTg5NzFfUklOVk9MLCByZWcgfCAweDAxMDApOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTcxX0xJTlZPTCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTcxX0xJTlZPTCwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3MV9SSU5WT0wpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3MV9SSU5WT0wsIHJlZyB8IDB4MDEwMCk7CiAKIAlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTcxX3NuZF9jb250cm9scywKIAkJCQlBUlJBWV9TSVpFKHdtODk3MV9zbmRfY29udHJvbHMpKTsKQEAgLTc0NSw3ICs3MTMsNyBAQAogY2FyZF9lcnI6CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwotcGNtX2VycjoKK2VycjoKIAlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzY3LDcgKzczNSw3IEBACiAKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOwogCi0JcmV0ID0gd204OTcxX2luaXQoc29jZGV2KTsKKwlyZXQgPSB3bTg5NzFfaW5pdChzb2NkZXYsIFNORF9TT0NfSTJDKTsKIAlpZiAocmV0IDwgMCkKIAkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGlzZSBXTTg5NzFcbiIpOwogCkBAIC04NzcsNyArODQ1LDYgQEAKIAogI2lmIGRlZmluZWQgKENPTkZJR19JMkMpIHx8IGRlZmluZWQgKENPTkZJR19JMkNfTU9EVUxFKQogCWlmIChzZXR1cC0+aTJjX2FkZHJlc3MpIHsKLQkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwogCQlyZXQgPSB3bTg5NzFfYWRkX2kyY19kZXZpY2UocGRldiwgc2V0dXApOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhhMDEzYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMKQEAgLTAsMCArMSw4MDggQEAKKy8qCisgKiB3bTg5NzQuYyAgLS0gIFdNODk3NCBBTFNBIFNvYyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxsaW51eEB3b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKworI2luY2x1ZGUgIndtODk3NC5oIgorCitzdGF0aWMgY29uc3QgdTE2IHdtODk3NF9yZWdbV004OTc0X0NBQ0hFUkVHTlVNXSA9IHsKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDUwLCAweDAwMDAsIDB4MDE0MCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDBmZiwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMTAwLCAweDAwZmYsCisJMHgwMDAwLCAweDAwMDAsIDB4MDEyYywgMHgwMDJjLAorCTB4MDAyYywgMHgwMDJjLCAweDAwMmMsIDB4MDAwMCwKKwkweDAwMzIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAzOCwgMHgwMDBiLCAweDAwMzIsIDB4MDAwMCwKKwkweDAwMDgsIDB4MDAwYywgMHgwMDkzLCAweDAwZTksCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMywgMHgwMDEwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMiwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAzOSwgMHgwMDAwLAorCTB4MDAwMCwKK307CisKKyNkZWZpbmUgV004OTc0X1BPV0VSMV9CSUFTRU4gIDB4MDgKKyNkZWZpbmUgV004OTc0X1BPV0VSMV9CVUZJT0VOIDB4MTAKKworc3RydWN0IHdtODk3NF9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW1dNODk3NF9DQUNIRVJFR05VTV07Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODk3NF9jb2RlYzsKKworI2RlZmluZSB3bTg5NzRfcmVzZXQoYykJc25kX3NvY193cml0ZShjLCBXTTg5NzRfUkVTRVQsIDApCisKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzRfY29tcGFuZGluZ1tdID0geyJPZmYiLCAiTkMiLCAidS1sYXciLCAiQS1sYXciIH07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc0X2RlZW1wW10gPSB7Ik5vbmUiLCAiMzJrSHoiLCAiNDQuMWtIeiIsICI0OGtIeiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzRfZXFtb2RlW10gPSB7IkNhcHR1cmUiLCAiUGxheWJhY2siIH07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc0X2J3W10gPSB7Ik5hcnJvdyIsICJXaWRlIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtODk3NF9lcTFbXSA9IHsiODBIeiIsICIxMDVIeiIsICIxMzVIeiIsICIxNzVIeiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzRfZXEyW10gPSB7IjIzMEh6IiwgIjMwMEh6IiwgIjM4NUh6IiwgIjUwMEh6IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtODk3NF9lcTNbXSA9IHsiNjUwSHoiLCAiODUwSHoiLCAiMS4xa0h6IiwgIjEuNGtIeiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzRfZXE0W10gPSB7IjEuOGtIeiIsICIyLjRrSHoiLCAiMy4ya0h6IiwgIjQuMWtIeiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzRfZXE1W10gPSB7IjUuM2tIeiIsICI2LjlrSHoiLCAiOWtIeiIsICIxMS43a0h6IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKndtODk3NF9hbGNbXSA9IHsiQUxDIiwgIkxpbWl0ZXIiIH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gd204OTc0X2VudW1bXSA9IHsKKwlTT0NfRU5VTV9TSU5HTEUoV004OTc0X0NPTVAsIDEsIDQsIHdtODk3NF9jb21wYW5kaW5nKSwgLyogYWRjICovCisJU09DX0VOVU1fU0lOR0xFKFdNODk3NF9DT01QLCAzLCA0LCB3bTg5NzRfY29tcGFuZGluZyksIC8qIGRhYyAqLworCVNPQ19FTlVNX1NJTkdMRShXTTg5NzRfREFDLCAgNCwgNCwgd204OTc0X2RlZW1wKSwKKwlTT0NfRU5VTV9TSU5HTEUoV004OTc0X0VRMSwgIDgsIDIsIHdtODk3NF9lcW1vZGUpLAorCisJU09DX0VOVU1fU0lOR0xFKFdNODk3NF9FUTEsICA1LCA0LCB3bTg5NzRfZXExKSwKKwlTT0NfRU5VTV9TSU5HTEUoV004OTc0X0VRMiwgIDgsIDIsIHdtODk3NF9idyksCisJU09DX0VOVU1fU0lOR0xFKFdNODk3NF9FUTIsICA1LCA0LCB3bTg5NzRfZXEyKSwKKwlTT0NfRU5VTV9TSU5HTEUoV004OTc0X0VRMywgIDgsIDIsIHdtODk3NF9idyksCisKKwlTT0NfRU5VTV9TSU5HTEUoV004OTc0X0VRMywgIDUsIDQsIHdtODk3NF9lcTMpLAorCVNPQ19FTlVNX1NJTkdMRShXTTg5NzRfRVE0LCAgOCwgMiwgd204OTc0X2J3KSwKKwlTT0NfRU5VTV9TSU5HTEUoV004OTc0X0VRNCwgIDUsIDQsIHdtODk3NF9lcTQpLAorCVNPQ19FTlVNX1NJTkdMRShXTTg5NzRfRVE1LCAgOCwgMiwgd204OTc0X2J3KSwKKworCVNPQ19FTlVNX1NJTkdMRShXTTg5NzRfRVE1LCAgNSwgNCwgd204OTc0X2VxNSksCisJU09DX0VOVU1fU0lOR0xFKFdNODk3NF9BTEMzLCAgOCwgMiwgd204OTc0X2FsYyksCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqd204OTc0X2F1eG1vZGVfdGV4dFtdID0geyAiQnVmZmVyIiwgIk1peGVyIiB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHdtODk3NF9hdXhtb2RlID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTc0X0lOUFVULCAgMywgMiwgd204OTc0X2F1eG1vZGVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkaWdpdGFsX3RsdiwgLTEyNzUwLCA1MCwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZXFfdGx2LCAtMTIwMCwgMTAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShpbnBnYV90bHYsIC0xMjAwLCA3NSwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc3BrX3RsdiwgLTU3MDAsIDEwMCwgMCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NzRfc25kX2NvbnRyb2xzW10gPSB7CisKK1NPQ19TSU5HTEUoIkRpZ2l0YWwgTG9vcGJhY2sgU3dpdGNoIiwgV004OTc0X0NPTVAsIDAsIDEsIDApLAorCitTT0NfRU5VTSgiREFDIENvbXBhbmRpbmciLCB3bTg5NzRfZW51bVsxXSksCitTT0NfRU5VTSgiQURDIENvbXBhbmRpbmciLCB3bTg5NzRfZW51bVswXSksCisKK1NPQ19FTlVNKCJQbGF5YmFjayBEZS1lbXBoYXNpcyIsIHdtODk3NF9lbnVtWzJdKSwKK1NPQ19TSU5HTEUoIkRBQyBJbnZlcnNpb24gU3dpdGNoIiwgV004OTc0X0RBQywgMCwgMSwgMCksCisKK1NPQ19TSU5HTEVfVExWKCJQQ00gVm9sdW1lIiwgV004OTc0X0RBQ1ZPTCwgMCwgMjU1LCAwLCBkaWdpdGFsX3RsdiksCisKK1NPQ19TSU5HTEUoIkhpZ2ggUGFzcyBGaWx0ZXIgU3dpdGNoIiwgV004OTc0X0FEQywgOCwgMSwgMCksCitTT0NfU0lOR0xFKCJIaWdoIFBhc3MgQ3V0IE9mZiIsIFdNODk3NF9BREMsIDQsIDcsIDApLAorU09DX1NJTkdMRSgiQURDIEludmVyc2lvbiBTd2l0Y2giLCBXTTg5NzRfQURDLCAwLCAxLCAwKSwKKworU09DX1NJTkdMRV9UTFYoIkNhcHR1cmUgVm9sdW1lIiwgV004OTc0X0FEQ1ZPTCwgIDAsIDI1NSwgMCwgZGlnaXRhbF90bHYpLAorCitTT0NfRU5VTSgiRXF1YWxpc2VyIEZ1bmN0aW9uIiwgd204OTc0X2VudW1bM10pLAorU09DX0VOVU0oIkVRMSBDdXQgT2ZmIiwgd204OTc0X2VudW1bNF0pLAorU09DX1NJTkdMRV9UTFYoIkVRMSBWb2x1bWUiLCBXTTg5NzRfRVExLCAgMCwgMjQsIDEsIGVxX3RsdiksCisKK1NPQ19FTlVNKCJFcXVhbGlzZXIgRVEyIEJhbmR3aXRoIiwgd204OTc0X2VudW1bNV0pLAorU09DX0VOVU0oIkVRMiBDdXQgT2ZmIiwgd204OTc0X2VudW1bNl0pLAorU09DX1NJTkdMRV9UTFYoIkVRMiBWb2x1bWUiLCBXTTg5NzRfRVEyLCAgMCwgMjQsIDEsIGVxX3RsdiksCisKK1NPQ19FTlVNKCJFcXVhbGlzZXIgRVEzIEJhbmR3aXRoIiwgd204OTc0X2VudW1bN10pLAorU09DX0VOVU0oIkVRMyBDdXQgT2ZmIiwgd204OTc0X2VudW1bOF0pLAorU09DX1NJTkdMRV9UTFYoIkVRMyBWb2x1bWUiLCBXTTg5NzRfRVEzLCAgMCwgMjQsIDEsIGVxX3RsdiksCisKK1NPQ19FTlVNKCJFcXVhbGlzZXIgRVE0IEJhbmR3aXRoIiwgd204OTc0X2VudW1bOV0pLAorU09DX0VOVU0oIkVRNCBDdXQgT2ZmIiwgd204OTc0X2VudW1bMTBdKSwKK1NPQ19TSU5HTEVfVExWKCJFUTQgVm9sdW1lIiwgV004OTc0X0VRNCwgIDAsIDI0LCAxLCBlcV90bHYpLAorCitTT0NfRU5VTSgiRXF1YWxpc2VyIEVRNSBCYW5kd2l0aCIsIHdtODk3NF9lbnVtWzExXSksCitTT0NfRU5VTSgiRVE1IEN1dCBPZmYiLCB3bTg5NzRfZW51bVsxMl0pLAorU09DX1NJTkdMRV9UTFYoIkVRNSBWb2x1bWUiLCBXTTg5NzRfRVE1LCAgMCwgMjQsIDEsIGVxX3RsdiksCisKK1NPQ19TSU5HTEUoIkRBQyBQbGF5YmFjayBMaW1pdGVyIFN3aXRjaCIsIFdNODk3NF9EQUNMSU0xLCAgOCwgMSwgMCksCitTT0NfU0lOR0xFKCJEQUMgUGxheWJhY2sgTGltaXRlciBEZWNheSIsIFdNODk3NF9EQUNMSU0xLCAgNCwgMTUsIDApLAorU09DX1NJTkdMRSgiREFDIFBsYXliYWNrIExpbWl0ZXIgQXR0YWNrIiwgV004OTc0X0RBQ0xJTTEsICAwLCAxNSwgMCksCisKK1NPQ19TSU5HTEUoIkRBQyBQbGF5YmFjayBMaW1pdGVyIFRocmVzaG9sZCIsIFdNODk3NF9EQUNMSU0yLCAgNCwgNywgMCksCitTT0NfU0lOR0xFKCJEQUMgUGxheWJhY2sgTGltaXRlciBCb29zdCIsIFdNODk3NF9EQUNMSU0yLCAgMCwgMTUsIDApLAorCitTT0NfU0lOR0xFKCJBTEMgRW5hYmxlIFN3aXRjaCIsIFdNODk3NF9BTEMxLCAgOCwgMSwgMCksCitTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBNYXggR2FpbiIsIFdNODk3NF9BTEMxLCAgMywgNywgMCksCitTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBNaW4gR2FpbiIsIFdNODk3NF9BTEMxLCAgMCwgNywgMCksCisKK1NPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIFpDIFN3aXRjaCIsIFdNODk3NF9BTEMyLCAgOCwgMSwgMCksCitTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBIb2xkIiwgV004OTc0X0FMQzIsICA0LCA3LCAwKSwKK1NPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIFRhcmdldCIsIFdNODk3NF9BTEMyLCAgMCwgMTUsIDApLAorCitTT0NfRU5VTSgiQUxDIENhcHR1cmUgTW9kZSIsIHdtODk3NF9lbnVtWzEzXSksCitTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBEZWNheSIsIFdNODk3NF9BTEMzLCAgNCwgMTUsIDApLAorU09DX1NJTkdMRSgiQUxDIENhcHR1cmUgQXR0YWNrIiwgV004OTc0X0FMQzMsICAwLCAxNSwgMCksCisKK1NPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIE5vaXNlIEdhdGUgU3dpdGNoIiwgV004OTc0X05HQVRFLCAgMywgMSwgMCksCitTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBOb2lzZSBHYXRlIFRocmVzaG9sZCIsIFdNODk3NF9OR0FURSwgIDAsIDcsIDApLAorCitTT0NfU0lOR0xFKCJDYXB0dXJlIFBHQSBaQyBTd2l0Y2giLCBXTTg5NzRfSU5QUEdBLCAgNywgMSwgMCksCitTT0NfU0lOR0xFX1RMVigiQ2FwdHVyZSBQR0EgVm9sdW1lIiwgV004OTc0X0lOUFBHQSwgIDAsIDYzLCAwLCBpbnBnYV90bHYpLAorCitTT0NfU0lOR0xFKCJTcGVha2VyIFBsYXliYWNrIFpDIFN3aXRjaCIsIFdNODk3NF9TUEtWT0wsICA3LCAxLCAwKSwKK1NPQ19TSU5HTEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgV004OTc0X1NQS1ZPTCwgIDYsIDEsIDEpLAorU09DX1NJTkdMRV9UTFYoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgV004OTc0X1NQS1ZPTCwgIDAsIDYzLCAwLCBzcGtfdGx2KSwKKworU09DX0VOVU0oIkF1eCBNb2RlIiwgd204OTc0X2F1eG1vZGUpLAorCitTT0NfU0lOR0xFKCJDYXB0dXJlIEJvb3N0KCsyMGRCKSIsIFdNODk3NF9BRENCT09TVCwgIDgsIDEsIDApLAorU09DX1NJTkdMRSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NzRfTU9OT01JWCwgNiwgMSwgMSksCit9OworCisvKiBTcGVha2VyIE91dHB1dCBNaXhlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk3NF9zcGVha2VyX21peGVyX2NvbnRyb2xzW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFdNODk3NF9TUEtNSVgsIDEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBdXggUGxheWJhY2sgU3dpdGNoIiwgV004OTc0X1NQS01JWCwgNSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NzRfU1BLTUlYLCAwLCAxLCAxKSwKK307CisKKy8qIE1vbm8gT3V0cHV0IE1peGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTc0X21vbm9fbWl4ZXJfY29udHJvbHNbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTGluZSBCeXBhc3MgU3dpdGNoIiwgV004OTc0X01PTk9NSVgsIDEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBdXggUGxheWJhY2sgU3dpdGNoIiwgV004OTc0X01PTk9NSVgsIDIsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgV004OTc0X01PTk9NSVgsIDAsIDEsIDApLAorfTsKKworLyogQm9vc3QgbWl4ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NzRfYm9vc3RfbWl4ZXJbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiQXV4IFN3aXRjaCIsIFdNODk3NF9JTlBQR0EsIDYsIDEsIDApLAorfTsKKworLyogSW5wdXQgUEdBICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTc0X2lucGdhW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkF1eCBTd2l0Y2giLCBXTTg5NzRfSU5QVVQsIDIsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJNaWNOIFN3aXRjaCIsIFdNODk3NF9JTlBVVCwgMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIk1pY1AgU3dpdGNoIiwgV004OTc0X0lOUFVULCAwLCAxLCAwKSwKK307CisKKy8qIEFVWCBJbnB1dCBib29zdCB2b2wgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NzRfYXV4X2Jvb3N0X2NvbnRyb2xzID0KK1NPQ19EQVBNX1NJTkdMRSgiQXV4IFZvbHVtZSIsIFdNODk3NF9BRENCT09TVCwgMCwgNywgMCk7CisKKy8qIE1pYyBJbnB1dCBib29zdCB2b2wgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NzRfbWljX2Jvb3N0X2NvbnRyb2xzID0KK1NPQ19EQVBNX1NJTkdMRSgiTWljIFZvbHVtZSIsIFdNODk3NF9BRENCT09TVCwgNCwgNywgMCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5NzRfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fTUlYRVIoIlNwZWFrZXIgTWl4ZXIiLCBXTTg5NzRfUE9XRVIzLCAyLCAwLAorCSZ3bTg5NzRfc3BlYWtlcl9taXhlcl9jb250cm9sc1swXSwKKwlBUlJBWV9TSVpFKHdtODk3NF9zcGVha2VyX21peGVyX2NvbnRyb2xzKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIk1vbm8gTWl4ZXIiLCBXTTg5NzRfUE9XRVIzLCAzLCAwLAorCSZ3bTg5NzRfbW9ub19taXhlcl9jb250cm9sc1swXSwKKwlBUlJBWV9TSVpFKHdtODk3NF9tb25vX21peGVyX2NvbnRyb2xzKSksCitTTkRfU09DX0RBUE1fREFDKCJEQUMiLCAiSGlGaSBQbGF5YmFjayIsIFdNODk3NF9QT1dFUjMsIDAsIDApLAorU05EX1NPQ19EQVBNX0FEQygiQURDIiwgIkhpRmkgQ2FwdHVyZSIsIFdNODk3NF9QT1dFUjIsIDAsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiQXV4IElucHV0IiwgV004OTc0X1BPV0VSMSwgNiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJTcGtOIE91dCIsIFdNODk3NF9QT1dFUjMsIDUsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiU3BrUCBPdXQiLCBXTTg5NzRfUE9XRVIzLCA2LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIk1vbm8gT3V0IiwgV004OTc0X1BPV0VSMywgNywgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9NSVhFUigiSW5wdXQgUEdBIiwgV004OTc0X1BPV0VSMiwgMiwgMCwgd204OTc0X2lucGdhLAorCQkgICBBUlJBWV9TSVpFKHdtODk3NF9pbnBnYSkpLAorU05EX1NPQ19EQVBNX01JWEVSKCJCb29zdCBNaXhlciIsIFdNODk3NF9QT1dFUjIsIDQsIDAsCisJCSAgIHdtODk3NF9ib29zdF9taXhlciwgQVJSQVlfU0laRSh3bTg5NzRfYm9vc3RfbWl4ZXIpKSwKKworU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1pYyBCaWFzIiwgV004OTc0X1BPV0VSMSwgNCwgMCksCisKK1NORF9TT0NfREFQTV9JTlBVVCgiTUlDTiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJNSUNQIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkFVWCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTU9OT09VVCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiU1BLT1VUUCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiU1BLT1VUTiIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJLyogTW9ubyBvdXRwdXQgbWl4ZXIgKi8KKwl7Ik1vbm8gTWl4ZXIiLCAiUENNIFBsYXliYWNrIFN3aXRjaCIsICJEQUMifSwKKwl7Ik1vbm8gTWl4ZXIiLCAiQXV4IFBsYXliYWNrIFN3aXRjaCIsICJBdXggSW5wdXQifSwKKwl7Ik1vbm8gTWl4ZXIiLCAiTGluZSBCeXBhc3MgU3dpdGNoIiwgIkJvb3N0IE1peGVyIn0sCisKKwkvKiBTcGVha2VyIG91dHB1dCBtaXhlciAqLworCXsiU3BlYWtlciBNaXhlciIsICJQQ00gUGxheWJhY2sgU3dpdGNoIiwgIkRBQyJ9LAorCXsiU3BlYWtlciBNaXhlciIsICJBdXggUGxheWJhY2sgU3dpdGNoIiwgIkF1eCBJbnB1dCJ9LAorCXsiU3BlYWtlciBNaXhlciIsICJMaW5lIEJ5cGFzcyBTd2l0Y2giLCAiQm9vc3QgTWl4ZXIifSwKKworCS8qIE91dHB1dHMgKi8KKwl7Ik1vbm8gT3V0IiwgTlVMTCwgIk1vbm8gTWl4ZXIifSwKKwl7Ik1PTk9PVVQiLCBOVUxMLCAiTW9ubyBPdXQifSwKKwl7IlNwa04gT3V0IiwgTlVMTCwgIlNwZWFrZXIgTWl4ZXIifSwKKwl7IlNwa1AgT3V0IiwgTlVMTCwgIlNwZWFrZXIgTWl4ZXIifSwKKwl7IlNQS09VVE4iLCBOVUxMLCAiU3BrTiBPdXQifSwKKwl7IlNQS09VVFAiLCBOVUxMLCAiU3BrUCBPdXQifSwKKworCS8qIEJvb3N0IE1peGVyICovCisJeyJBREMiLCBOVUxMLCAiQm9vc3QgTWl4ZXIifSwKKwl7IkJvb3N0IE1peGVyIiwgIkF1eCBTd2l0Y2giLCAiQXV4IElucHV0In0sCisJeyJCb29zdCBNaXhlciIsIE5VTEwsICJJbnB1dCBQR0EifSwKKwl7IkJvb3N0IE1peGVyIiwgTlVMTCwgIk1JQ1AifSwKKworCS8qIElucHV0IFBHQSAqLworCXsiSW5wdXQgUEdBIiwgIkF1eCBTd2l0Y2giLCAiQXV4IElucHV0In0sCisJeyJJbnB1dCBQR0EiLCAiTWljTiBTd2l0Y2giLCAiTUlDTiJ9LAorCXsiSW5wdXQgUEdBIiwgIk1pY1AgU3dpdGNoIiwgIk1JQ1AifSwKKworCS8qIElucHV0cyAqLworCXsiQXV4IElucHV0IiwgTlVMTCwgIkFVWCJ9LAorfTsKKworc3RhdGljIGludCB3bTg5NzRfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODk3NF9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODk3NF9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisKKwlzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoY29kZWMpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGxsXyB7CisJdW5zaWduZWQgaW50IHByZV9kaXY6NDsgLyogcHJlc2NhbGUgLSAxICovCisJdW5zaWduZWQgaW50IG46NDsKKwl1bnNpZ25lZCBpbnQgazsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxsXyBwbGxfZGl2OworCisvKiBUaGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSBwbGwgZGl2aWRlIG11bHRpcGxpZWQgYnkgMTAKKyAqIHRvIGFsbG93IHJvdW5kaW5nIGxhdGVyICovCisjZGVmaW5lIEZJWEVEX1BMTF9TSVpFICgoMSA8PCAyNCkgKiAxMCkKKworc3RhdGljIHZvaWQgcGxsX2ZhY3RvcnModW5zaWduZWQgaW50IHRhcmdldCwgdW5zaWduZWQgaW50IHNvdXJjZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgS3BhcnQ7CisJdW5zaWduZWQgaW50IEssIE5kaXYsIE5tb2Q7CisKKwlOZGl2ID0gdGFyZ2V0IC8gc291cmNlOworCWlmIChOZGl2IDwgNikgeworCQlzb3VyY2UgPj49IDE7CisJCXBsbF9kaXYucHJlX2RpdiA9IDE7CisJCU5kaXYgPSB0YXJnZXQgLyBzb3VyY2U7CisJfSBlbHNlCisJCXBsbF9kaXYucHJlX2RpdiA9IDA7CisKKwlpZiAoKE5kaXYgPCA2KSB8fCAoTmRpdiA+IDEyKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIldNODk3NCBOIHZhbHVlICV1IG91dHdpdGggcmVjb21tZW5kZWQgcmFuZ2UhXG4iLAorCQkJTmRpdik7CisKKwlwbGxfZGl2Lm4gPSBOZGl2OworCU5tb2QgPSB0YXJnZXQgJSBzb3VyY2U7CisJS3BhcnQgPSBGSVhFRF9QTExfU0laRSAqIChsb25nIGxvbmcpTm1vZDsKKworCWRvX2RpdihLcGFydCwgc291cmNlKTsKKworCUsgPSBLcGFydCAmIDB4RkZGRkZGRkY7CisKKwkvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIHJvdW5kICovCisJaWYgKChLICUgMTApID49IDUpCisJCUsgKz0gNTsKKworCS8qIE1vdmUgZG93biB0byBwcm9wZXIgcmFuZ2Ugbm93IHJvdW5kaW5nIGlzIGRvbmUgKi8KKwlLIC89IDEwOworCisJcGxsX2Rpdi5rID0gSzsKK30KKworc3RhdGljIGludCB3bTg5NzRfc2V0X2RhaV9wbGwoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCWludCBwbGxfaWQsIHVuc2lnbmVkIGludCBmcmVxX2luLCB1bnNpZ25lZCBpbnQgZnJlcV9vdXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwl1MTYgcmVnOworCisJaWYgKGZyZXFfaW4gPT0gMCB8fCBmcmVxX291dCA9PSAwKSB7CisJCS8qIENsb2NrIENPREVDIGRpcmVjdGx5IGZyb20gTUNMSyAqLworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9DTE9DSyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9DTE9DSywgcmVnICYgMHgwZmYpOworCisJCS8qIFR1cm4gb2ZmIFBMTCAqLworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9QT1dFUjEpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfUE9XRVIxLCByZWcgJiAweDFkZik7CisJCXJldHVybiAwOworCX0KKworCXBsbF9mYWN0b3JzKGZyZXFfb3V0KjQsIGZyZXFfaW4pOworCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc0X1BMTE4sIChwbGxfZGl2LnByZV9kaXYgPDwgNCkgfCBwbGxfZGl2Lm4pOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9QTExLMSwgcGxsX2Rpdi5rID4+IDE4KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfUExMSzIsIChwbGxfZGl2LmsgPj4gOSkgJiAweDFmZik7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc0X1BMTEszLCBwbGxfZGl2LmsgJiAweDFmZik7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzRfUE9XRVIxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfUE9XRVIxLCByZWcgfCAweDAyMCk7CisKKwkvKiBSdW4gQ09ERUMgZnJvbSBQTEwgaW5zdGVhZCBvZiBNQ0xLICovCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzRfQ0xPQ0spOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9DTE9DSywgcmVnIHwgMHgxMDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb25maWd1cmUgV004OTc0IGNsb2NrIGRpdmlkZXJzLgorICovCitzdGF0aWMgaW50IHdtODk3NF9zZXRfZGFpX2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJaW50IGRpdl9pZCwgaW50IGRpdikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXUxNiByZWc7CisKKwlzd2l0Y2ggKGRpdl9pZCkgeworCWNhc2UgV004OTc0X09QQ0xLRElWOgorCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9HUElPKSAmIDB4MWNmOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfR1BJTywgcmVnIHwgZGl2KTsKKwkJYnJlYWs7CisJY2FzZSBXTTg5NzRfTUNMS0RJVjoKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzRfQ0xPQ0spICYgMHgxMWY7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9DTE9DSywgcmVnIHwgZGl2KTsKKwkJYnJlYWs7CisJY2FzZSBXTTg5NzRfQURDQ0xLOgorCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9BREMpICYgMHgxZjc7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9BREMsIHJlZyB8IGRpdik7CisJCWJyZWFrOworCWNhc2UgV004OTc0X0RBQ0NMSzoKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzRfREFDKSAmIDB4MWY3OworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfREFDLCByZWcgfCBkaXYpOworCQlicmVhazsKKwljYXNlIFdNODk3NF9CQ0xLRElWOgorCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9DTE9DSykgJiAweDFlMzsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc0X0NMT0NLLCByZWcgfCBkaXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NzRfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCXVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwl1MTYgaWZhY2UgPSAwOworCXUxNiBjbGsgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9DTE9DSykgJiAweDFmZTsKKworCS8qIHNldCBtYXN0ZXIvc2xhdmUgYXVkaW8gaW50ZXJmYWNlICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJY2xrIHw9IDB4MDAwMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBpbnRlcmZhY2UgZm9ybWF0ICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlpZmFjZSB8PSAweDAwMTA7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWlmYWNlIHw9IDB4MDAwODsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJaWZhY2UgfD0gMHgwMDAxODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2xvY2sgaW52ZXJzaW9uICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCWlmYWNlIHw9IDB4MDE4MDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJaWZhY2UgfD0gMHgwMTAwOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQlpZmFjZSB8PSAweDAwODA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9JRkFDRSwgaWZhY2UpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9DTE9DSywgY2xrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NzRfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXUxNiBpZmFjZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc0X0lGQUNFKSAmIDB4MTlmOworCXUxNiBhZG4gPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9BREQpICYgMHgxZjE7CisKKwkvKiBiaXQgc2l6ZSAqLworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCWlmYWNlIHw9IDB4MDAyMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJaWZhY2UgfD0gMHgwMDQwOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlpZmFjZSB8PSAweDAwNjA7CisJCWJyZWFrOworCX0KKworCS8qIGZpbHRlciBjb2VmZmljaWVudCAqLworCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX1JBVEVfODAwMDoKKwkJYWRuIHw9IDB4NSA8PCAxOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9SQVRFXzExMDI1OgorCQlhZG4gfD0gMHg0IDw8IDE7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1JBVEVfMTYwMDA6CisJCWFkbiB8PSAweDMgPDwgMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fUkFURV8yMjA1MDoKKwkJYWRuIHw9IDB4MiA8PCAxOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9SQVRFXzMyMDAwOgorCQlhZG4gfD0gMHgxIDw8IDE7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1JBVEVfNDQxMDA6CisJY2FzZSBTTkRSVl9QQ01fUkFURV80ODAwMDoKKwkJYnJlYWs7CisJfQorCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc0X0lGQUNFLCBpZmFjZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc0X0FERCwgYWRuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NzRfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwl1MTYgbXV0ZV9yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9EQUMpICYgMHhmZmJmOworCisJaWYgKG11dGUpCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9EQUMsIG11dGVfcmVnIHwgMHg0MCk7CisJZWxzZQorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfREFDLCBtdXRlX3JlZyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGxpYW0gbmVlZCB0byBtYWtlIHRoaXMgbG93ZXIgcG93ZXIgd2l0aCBkYXBtICovCitzdGF0aWMgaW50IHdtODk3NF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJdTE2IHBvd2VyMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc0X1BPV0VSMSkgJiB+MHgzOworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCXBvd2VyMSB8PSAweDE7ICAvKiBWTUlEIDUwayAqLworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfUE9XRVIxLCBwb3dlcjEpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCXBvd2VyMSB8PSBXTTg5NzRfUE9XRVIxX0JJQVNFTiB8IFdNODk3NF9QT1dFUjFfQlVGSU9FTjsKKworCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJLyogSW5pdGlhbCBjYXAgY2hhcmdlIGF0IFZNSUQgNWsgKi8KKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9QT1dFUjEsIHBvd2VyMSB8IDB4Myk7CisJCQltZGVsYXkoMTAwKTsKKwkJfQorCisJCXBvd2VyMSB8PSAweDI7ICAvKiBWTUlEIDUwMGsgKi8KKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc0X1BPV0VSMSwgcG93ZXIxKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9QT1dFUjEsIDApOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfUE9XRVIyLCAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc0X1BPV0VSMywgMCk7CisJCWJyZWFrOworCX0KKworCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV004OTc0X1JBVEVTIChTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwKQorCisjZGVmaW5lIFdNODk3NF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAorCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5NzRfb3BzID0geworCS5od19wYXJhbXMgPSB3bTg5NzRfcGNtX2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlID0gd204OTc0X211dGUsCisJLnNldF9mbXQgPSB3bTg5NzRfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYgPSB3bTg5NzRfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9wbGwgPSB3bTg5NzRfc2V0X2RhaV9wbGwsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTc0X2RhaSA9IHsKKwkubmFtZSA9ICJXTTg5NzQgSGlGaSIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsICAgLyogT25seSAxIGNoYW5uZWwgb2YgZGF0YSAqLworCQkucmF0ZXMgPSBXTTg5NzRfUkFURVMsCisJCS5mb3JtYXRzID0gV004OTc0X0ZPUk1BVFMsfSwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsICAgLyogT25seSAxIGNoYW5uZWwgb2YgZGF0YSAqLworCQkucmF0ZXMgPSBXTTg5NzRfUkFURVMsCisJCS5mb3JtYXRzID0gV004OTc0X0ZPUk1BVFMsfSwKKwkub3BzID0gJndtODk3NF9vcHMsCisJLnN5bW1ldHJpY19yYXRlcyA9IDEsCit9OworRVhQT1JUX1NZTUJPTF9HUEwod204OTc0X2RhaSk7CisKK3N0YXRpYyBpbnQgd204OTc0X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODk3NF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTc0X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlpbnQgaTsKKwl1OCBkYXRhWzJdOworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCisJLyogU3luYyByZWdfY2FjaGUgd2l0aCB0aGUgaGFyZHdhcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5NzRfcmVnKTsgaSsrKSB7CisJCWRhdGFbMF0gPSAoaSA8PCAxKSB8ICgoY2FjaGVbaV0gPj4gOCkgJiAweDAwMDEpOworCQlkYXRhWzFdID0gY2FjaGVbaV0gJiAweDAwZmY7CisJCWNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKTsKKwl9CisJd204OTc0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisJd204OTc0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBjb2RlYy0+c3VzcGVuZF9iaWFzX2xldmVsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NzRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh3bTg5NzRfY29kZWMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb2RlYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204OTc0X2NvZGVjOworCWNvZGVjID0gd204OTc0X2NvZGVjOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zOiAlZFxuIiwgcmV0KTsKKwkJZ290byBwY21fZXJyOworCX0KKworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5NzRfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODk3NF9zbmRfY29udHJvbHMpKTsKKwl3bTg5NzRfYWRkX3dpZGdldHMoY29kZWMpOworCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGNhcmRfZXJyOworCX0KKworCXJldHVybiByZXQ7CisKK2NhcmRfZXJyOgorCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKK3BjbV9lcnI6CisJcmV0dXJuIHJldDsKK30KKworLyogcG93ZXIgZG93biBjaGlwICovCitzdGF0aWMgaW50IHdtODk3NF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk3NCA9IHsKKwkucHJvYmUgPSAJd204OTc0X3Byb2JlLAorCS5yZW1vdmUgPSAJd204OTc0X3JlbW92ZSwKKwkuc3VzcGVuZCA9IAl3bTg5NzRfc3VzcGVuZCwKKwkucmVzdW1lID0Jd204OTc0X3Jlc3VtZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODk3NCk7CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODk3NF9yZWdpc3RlcihzdHJ1Y3Qgd204OTc0X3ByaXYgKndtODk3NCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5NzQtPmNvZGVjOworCisJaWYgKHdtODk3NF9jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODk3NCBpcyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg5NzQ7CisJY29kZWMtPm5hbWUgPSAiV004OTc0IjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204OTc0X3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSAmd204OTc0X2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gV004OTc0X0NBQ0hFUkVHTlVNOworCWNvZGVjLT5yZWdfY2FjaGUgPSAmd204OTc0LT5yZWdfY2FjaGU7CisKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgNywgOSwgU05EX1NPQ19JMkMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODk3NF9yZWcsIHNpemVvZih3bTg5NzRfcmVnKSk7CisKKwlyZXQgPSB3bTg5NzRfcmVzZXQoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBpc3N1ZSByZXNldFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXdtODk3NF9kYWkuZGV2ID0gY29kZWMtPmRldjsKKworCXdtODk3NF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJd204OTc0X2NvZGVjID0gY29kZWM7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODk3NF9kYWkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY29kZWM7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9jb2RlYzoKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworZXJyOgorCWtmcmVlKHdtODk3NCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCB2b2lkIHdtODk3NF91bnJlZ2lzdGVyKHN0cnVjdCB3bTg5NzRfcHJpdiAqd204OTc0KQoreworCXdtODk3NF9zZXRfYmlhc19sZXZlbCgmd204OTc0LT5jb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmd204OTc0X2RhaSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ3bTg5NzQtPmNvZGVjKTsKKwlrZnJlZSh3bTg5NzQpOworCXdtODk3NF9jb2RlYyA9IE5VTEw7Cit9CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODk3NF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHdtODk3NF9wcml2ICp3bTg5NzQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJd204OTc0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODk3NF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODk3NCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJndtODk3NC0+Y29kZWM7CisJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204OTc0KTsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworCisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCXJldHVybiB3bTg5NzRfcmVnaXN0ZXIod204OTc0KTsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTc0X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd204OTc0X3ByaXYgKndtODk3NCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXdtODk3NF91bnJlZ2lzdGVyKHdtODk3NCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg5NzRfaTJjX2lkW10gPSB7CisJeyAid204OTc0IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg5NzRfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODk3NF9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIldNODk3NCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gICAgd204OTc0X2kyY19wcm9iZSwKKwkucmVtb3ZlID0gICBfX2RldmV4aXRfcCh3bTg5NzRfaTJjX3JlbW92ZSksCisJLmlkX3RhYmxlID0gd204OTc0X2kyY19pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdtODk3NF9tb2Rpbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ3bTg5NzRfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bTg5NzRfbW9kaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTg5NzRfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ3bTg5NzRfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTg5NzRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTg5NzQgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGRlOTU2Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzQuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogd204OTc0LmggIC0tICBXTTg5NzQgU29jIEF1ZGlvIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfV004OTc0X0gKKyNkZWZpbmUgX1dNODk3NF9ICisKKy8qIFdNODk3NCByZWdpc3RlciBzcGFjZSAqLworCisjZGVmaW5lIFdNODk3NF9SRVNFVAkJMHgwCisjZGVmaW5lIFdNODk3NF9QT1dFUjEJCTB4MQorI2RlZmluZSBXTTg5NzRfUE9XRVIyCQkweDIKKyNkZWZpbmUgV004OTc0X1BPV0VSMwkJMHgzCisjZGVmaW5lIFdNODk3NF9JRkFDRQkJMHg0CisjZGVmaW5lIFdNODk3NF9DT01QCQkweDUKKyNkZWZpbmUgV004OTc0X0NMT0NLCQkweDYKKyNkZWZpbmUgV004OTc0X0FERAkJMHg3CisjZGVmaW5lIFdNODk3NF9HUElPCQkweDgKKyNkZWZpbmUgV004OTc0X0RBQwkJMHhhCisjZGVmaW5lIFdNODk3NF9EQUNWT0wJCTB4YgorI2RlZmluZSBXTTg5NzRfQURDCQkweGUKKyNkZWZpbmUgV004OTc0X0FEQ1ZPTAkJMHhmCisjZGVmaW5lIFdNODk3NF9FUTEJCTB4MTIKKyNkZWZpbmUgV004OTc0X0VRMgkJMHgxMworI2RlZmluZSBXTTg5NzRfRVEzCQkweDE0CisjZGVmaW5lIFdNODk3NF9FUTQJCTB4MTUKKyNkZWZpbmUgV004OTc0X0VRNQkJMHgxNgorI2RlZmluZSBXTTg5NzRfREFDTElNMQkJMHgxOAorI2RlZmluZSBXTTg5NzRfREFDTElNMgkJMHgxOQorI2RlZmluZSBXTTg5NzRfTk9UQ0gxCQkweDFiCisjZGVmaW5lIFdNODk3NF9OT1RDSDIJCTB4MWMKKyNkZWZpbmUgV004OTc0X05PVENIMwkJMHgxZAorI2RlZmluZSBXTTg5NzRfTk9UQ0g0CQkweDFlCisjZGVmaW5lIFdNODk3NF9BTEMxCQkweDIwCisjZGVmaW5lIFdNODk3NF9BTEMyCQkweDIxCisjZGVmaW5lIFdNODk3NF9BTEMzCQkweDIyCisjZGVmaW5lIFdNODk3NF9OR0FURQkJMHgyMworI2RlZmluZSBXTTg5NzRfUExMTgkJMHgyNAorI2RlZmluZSBXTTg5NzRfUExMSzEJCTB4MjUKKyNkZWZpbmUgV004OTc0X1BMTEsyCQkweDI2CisjZGVmaW5lIFdNODk3NF9QTExLMwkJMHgyNworI2RlZmluZSBXTTg5NzRfQVRURU4JCTB4MjgKKyNkZWZpbmUgV004OTc0X0lOUFVUCQkweDJjCisjZGVmaW5lIFdNODk3NF9JTlBQR0EJCTB4MmQKKyNkZWZpbmUgV004OTc0X0FEQ0JPT1NUCQkweDJmCisjZGVmaW5lIFdNODk3NF9PVVRQVVQJCTB4MzEKKyNkZWZpbmUgV004OTc0X1NQS01JWAkJMHgzMgorI2RlZmluZSBXTTg5NzRfU1BLVk9MCQkweDM2CisjZGVmaW5lIFdNODk3NF9NT05PTUlYCQkweDM4CisKKyNkZWZpbmUgV004OTc0X0NBQ0hFUkVHTlVNIAk1NworCisvKiBDbG9jayBkaXZpZGVyIElkJ3MgKi8KKyNkZWZpbmUgV004OTc0X09QQ0xLRElWCQkwCisjZGVmaW5lIFdNODk3NF9NQ0xLRElWCQkxCisjZGVmaW5lIFdNODk3NF9BRENDTEsJCTIKKyNkZWZpbmUgV004OTc0X0RBQ0NMSwkJMworI2RlZmluZSBXTTg5NzRfQkNMS0RJVgkJNAorCisvKiBEQUMgY2xvY2sgZGl2aWRlcnMgKi8KKyNkZWZpbmUgV004OTc0X0RBQ0NMS19GMgkoMSA8PCAzKQorI2RlZmluZSBXTTg5NzRfREFDQ0xLX0Y0CSgwIDw8IDMpCisKKy8qIEFEQyBjbG9jayBkaXZpZGVycyAqLworI2RlZmluZSBXTTg5NzRfQURDQ0xLX0YyCSgxIDw8IDMpCisjZGVmaW5lIFdNODk3NF9BRENDTEtfRjQJKDAgPDwgMykKKworLyogUExMIE91dCBkaXZpZGVycyAqLworI2RlZmluZSBXTTg5NzRfT1BDTEtESVZfMQkoMCA8PCA0KQorI2RlZmluZSBXTTg5NzRfT1BDTEtESVZfMgkoMSA8PCA0KQorI2RlZmluZSBXTTg5NzRfT1BDTEtESVZfMwkoMiA8PCA0KQorI2RlZmluZSBXTTg5NzRfT1BDTEtESVZfNAkoMyA8PCA0KQorCisvKiBCQ0xLIGNsb2NrIGRpdmlkZXJzICovCisjZGVmaW5lIFdNODk3NF9CQ0xLRElWXzEJKDAgPDwgMikKKyNkZWZpbmUgV004OTc0X0JDTEtESVZfMgkoMSA8PCAyKQorI2RlZmluZSBXTTg5NzRfQkNMS0RJVl80CSgyIDw8IDIpCisjZGVmaW5lIFdNODk3NF9CQ0xLRElWXzgJKDMgPDwgMikKKyNkZWZpbmUgV004OTc0X0JDTEtESVZfMTYJKDQgPDwgMikKKyNkZWZpbmUgV004OTc0X0JDTEtESVZfMzIJKDUgPDwgMikKKworLyogTUNMSyBjbG9jayBkaXZpZGVycyAqLworI2RlZmluZSBXTTg5NzRfTUNMS0RJVl8xCSgwIDw8IDUpCisjZGVmaW5lIFdNODk3NF9NQ0xLRElWXzFfNQkoMSA8PCA1KQorI2RlZmluZSBXTTg5NzRfTUNMS0RJVl8yCSgyIDw8IDUpCisjZGVmaW5lIFdNODk3NF9NQ0xLRElWXzMJKDMgPDwgNSkKKyNkZWZpbmUgV004OTc0X01DTEtESVZfNAkoNCA8PCA1KQorI2RlZmluZSBXTTg5NzRfTUNMS0RJVl82CSg1IDw8IDUpCisjZGVmaW5lIFdNODk3NF9NQ0xLRElWXzgJKDYgPDwgNSkKKyNkZWZpbmUgV004OTc0X01DTEtESVZfMTIJKDcgPDwgNSkKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5NzRfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk3NDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk4OC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5ODguYwppbmRleCA4YzBmZGY4Li4zZjUzMGY4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk4OC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTg4LmMKQEAgLTU3LDUwICs1Nyw3IEBACiB9OwogCiAKLS8qCi0gKiByZWFkIHdtODk4OCByZWdpc3RlciBjYWNoZQotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB3bTg5ODhfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCXVuc2lnbmVkIGludCByZWcpCi17Ci0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JaWYgKHJlZyA+IFdNODk4OF9OVU1fUkVHKQotCQlyZXR1cm4gLTE7Ci0JcmV0dXJuIGNhY2hlW3JlZ107Ci19Ci0KLS8qCi0gKiB3cml0ZSB3bTg5ODggcmVnaXN0ZXIgY2FjaGUKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHdtODk4OF93cml0ZV9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCXVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlpZiAocmVnID4gV004OTg4X05VTV9SRUcpCi0JCXJldHVybjsKLQljYWNoZVtyZWddID0gdmFsdWU7Ci19Ci0KLXN0YXRpYyBpbnQgd204OTg4X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKLQl1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTggZGF0YVsyXTsKLQotCS8qIGRhdGEgaXMKLQkgKiAgIEQxNS4uRDkgV004NzUzIHJlZ2lzdGVyIG9mZnNldAotCSAqICAgRDguLi5EMCByZWdpc3RlciBkYXRhCi0JICovCi0JZGF0YVswXSA9IChyZWcgPDwgMSkgfCAoKHZhbHVlID4+IDgpICYgMHgwMDAxKTsKLQlkYXRhWzFdID0gdmFsdWUgJiAweDAwZmY7Ci0KLQl3bTg5ODhfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCByZWcsIHZhbHVlKTsKLQlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpID09IDIpCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIC1FSU87Ci19Ci0KLSNkZWZpbmUgd204OTg4X3Jlc2V0KGMpCXdtODk4OF93cml0ZShjLCBXTTg5ODhfUkVTRVQsIDApCisjZGVmaW5lIHdtODk4OF9yZXNldChjKQlzbmRfc29jX3dyaXRlKGMsIFdNODk4OF9SRVNFVCwgMCkKIAogLyoKICAqIFdNODk4OCBDb250cm9scwpAQCAtMjI2LDE1ICsxODMsMTUgQEAKIAkJCSAgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7Ci0JdTE2IGFkY3RsMiA9IHdtODk4OF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTg4X0FEQ1RMMik7CisJdTE2IGFkY3RsMiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTg4X0FEQ1RMMik7CiAKIAkvKiBVc2UgdGhlIERBQyB0byBnYXRlIExSQyBpZiBhY3RpdmUsIG90aGVyd2lzZSB1c2UgQURDICovCi0JaWYgKHdtODk4OF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTg4X1BXUjIpICYgMHgxODApCisJaWYgKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTg4X1BXUjIpICYgMHgxODApCiAJCWFkY3RsMiAmPSB+MHg0OwogCWVsc2UKIAkJYWRjdGwyIHw9IDB4NDsKIAotCXJldHVybiB3bTg5ODhfd3JpdGUoY29kZWMsIFdNODk4OF9BRENUTDIsIGFkY3RsMik7CisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk4OF9BRENUTDIsIGFkY3RsMik7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICp3bTg5ODhfbGluZV90ZXh0c1tdID0gewpAQCAtNjE5LDcgKzU3Niw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXdtODk4OF93cml0ZShjb2RlYywgV004OTg4X0lGQUNFLCBpZmFjZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTg4X0lGQUNFLCBpZmFjZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY1Myw4ICs2MTAsOCBAQAogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3Qgd204OTg4X3ByaXYgKndtODk4OCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7Ci0JdTE2IGlmYWNlID0gd204OTg4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5ODhfSUZBQ0UpICYgMHgxZjM7Ci0JdTE2IHNyYXRlID0gd204OTg4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5ODhfU1JBVEUpICYgMHgxODA7CisJdTE2IGlmYWNlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5ODhfSUZBQ0UpICYgMHgxZjM7CisJdTE2IHNyYXRlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5ODhfU1JBVEUpICYgMHgxODA7CiAJaW50IGNvZWZmOwogCiAJY29lZmYgPSBnZXRfY29lZmYod204OTg4LT5zeXNjbGssIHBhcmFtc19yYXRlKHBhcmFtcykpOwpAQCAtNjg1LDkgKzY0Miw5IEBACiAJfQogCiAJLyogc2V0IGlmYWNlICYgc3JhdGUgKi8KLQl3bTg5ODhfd3JpdGUoY29kZWMsIFdNODk4OF9JRkFDRSwgaWZhY2UpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk4OF9JRkFDRSwgaWZhY2UpOwogCWlmIChjb2VmZiA+PSAwKQotCQl3bTg5ODhfd3JpdGUoY29kZWMsIFdNODk4OF9TUkFURSwgc3JhdGUgfAorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5ODhfU1JBVEUsIHNyYXRlIHwKIAkJCShjb2VmZl9kaXZbY29lZmZdLnNyIDw8IDEpIHwgY29lZmZfZGl2W2NvZWZmXS51c2IpOwogCiAJcmV0dXJuIDA7CkBAIC02OTYsMTkgKzY1MywxOSBAQAogc3RhdGljIGludCB3bTg5ODhfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKLQl1MTYgbXV0ZV9yZWcgPSB3bTg5ODhfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk4OF9BRENEQUMpICYgMHhmZmY3OworCXUxNiBtdXRlX3JlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTg4X0FEQ0RBQykgJiAweGZmZjc7CiAKIAlpZiAobXV0ZSkKLQkJd204OTg4X3dyaXRlKGNvZGVjLCBXTTg5ODhfQURDREFDLCBtdXRlX3JlZyB8IDB4OCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk4OF9BRENEQUMsIG11dGVfcmVnIHwgMHg4KTsKIAllbHNlCi0JCXdtODk4OF93cml0ZShjb2RlYywgV004OTg4X0FEQ0RBQywgbXV0ZV9yZWcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5ODhfQURDREFDLCBtdXRlX3JlZyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgd204OTg4X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7Ci0JdTE2IHB3cl9yZWcgPSB3bTg5ODhfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk4OF9QV1IxKSAmIH4weDFjMTsKKwl1MTYgcHdyX3JlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTg4X1BXUjEpICYgfjB4MWMxOwogCiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgU05EX1NPQ19CSUFTX09OOgpAQCAtNzE2LDI0ICs2NzMsMjQgQEAKIAogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJCS8qIFZSRUYsIFZNSUQ9Mng1MGssIGRpZ2l0YWwgZW5hYmxlZCAqLwotCQl3bTg5ODhfd3JpdGUoY29kZWMsIFdNODk4OF9QV1IxLCBwd3JfcmVnIHwgMHgwMGMwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTg4X1BXUjEsIHB3cl9yZWcgfCAweDAwYzApOwogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CiAJCQkvKiBWUkVGLCBWTUlEPTJ4NWsgKi8KLQkJCXdtODk4OF93cml0ZShjb2RlYywgV004OTg4X1BXUjEsIHB3cl9yZWcgfCAweDFjMSk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5ODhfUFdSMSwgcHdyX3JlZyB8IDB4MWMxKTsKIAogCQkJLyogQ2hhcmdlIGNhcHMgKi8KIAkJCW1zbGVlcCgxMDApOwogCQl9CiAKIAkJLyogVlJFRiwgVk1JRD0yKjUwMGssIGRpZ2l0YWwgc3RvcHBlZCAqLwotCQl3bTg5ODhfd3JpdGUoY29kZWMsIFdNODk4OF9QV1IxLCBwd3JfcmVnIHwgMHgwMTQxKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTg4X1BXUjEsIHB3cl9yZWcgfCAweDAxNDEpOwogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJd204OTg4X3dyaXRlKGNvZGVjLCBXTTg5ODhfUFdSMSwgMHgwMDAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTg4X1BXUjEsIDB4MDAwMCk7CiAJCWJyZWFrOwogCX0KIAljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOwpAQCAtODY4LDcgKzgyNSw4IEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg5ODgpOwogCi1zdGF0aWMgaW50IHdtODk4OF9yZWdpc3RlcihzdHJ1Y3Qgd204OTg4X3ByaXYgKndtODk4OCkKK3N0YXRpYyBpbnQgd204OTg4X3JlZ2lzdGVyKHN0cnVjdCB3bTg5ODhfcHJpdiAqd204OTg4LAorCQkJICAgZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5ODgtPmNvZGVjOwogCWludCByZXQ7CkBAIC04ODcsOCArODQ1LDYgQEAKIAljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204OTg4OwogCWNvZGVjLT5uYW1lID0gIldNODk4OCI7CiAJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY29kZWMtPnJlYWQgPSB3bTg5ODhfcmVhZF9yZWdfY2FjaGU7Ci0JY29kZWMtPndyaXRlID0gd204OTg4X3dyaXRlOwogCWNvZGVjLT5kYWkgPSAmd204OTg4X2RhaTsKIAljb2RlYy0+bnVtX2RhaSA9IDE7CiAJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh3bTg5ODgtPnJlZ19jYWNoZSk7CkBAIC04OTksMjMgKzg1NSwyOSBAQAogCW1lbWNweShjb2RlYy0+cmVnX2NhY2hlLCB3bTg5ODhfcmVnLAogCSAgICAgICBzaXplb2Yod204OTg4X3JlZykpOwogCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDcsIDksIGNvbnRyb2wpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCiAJcmV0ID0gd204OTg4X3Jlc2V0KGNvZGVjKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycjsKIAl9CiAKIAkvKiBzZXQgdGhlIHVwZGF0ZSBiaXRzICh3ZSBhbHdheXMgdXBkYXRlIGxlZnQgdGhlbiByaWdodCkgKi8KLQlyZWcgPSB3bTg5ODhfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk4OF9SQURDKTsKLQl3bTg5ODhfd3JpdGUoY29kZWMsIFdNODk4OF9SQURDLCByZWcgfCAweDEwMCk7Ci0JcmVnID0gd204OTg4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5ODhfUkRBQyk7Ci0Jd204OTg4X3dyaXRlKGNvZGVjLCBXTTg5ODhfUkRBQywgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg5ODhfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk4OF9ST1VUMVYpOwotCXdtODk4OF93cml0ZShjb2RlYywgV004OTg4X1JPVVQxViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg5ODhfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk4OF9ST1VUMlYpOwotCXdtODk4OF93cml0ZShjb2RlYywgV004OTg4X1JPVVQyViwgcmVnIHwgMHgwMTAwKTsKLQlyZWcgPSB3bTg5ODhfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk4OF9SSU5WT0wpOwotCXdtODk4OF93cml0ZShjb2RlYywgV004OTg4X1JJTlZPTCwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk4OF9SQURDKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5ODhfUkFEQywgcmVnIHwgMHgxMDApOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTg4X1JEQUMpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk4OF9SREFDLCByZWcgfCAweDAxMDApOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTg4X1JPVVQxVik7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTg4X1JPVVQxViwgcmVnIHwgMHgwMTAwKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk4OF9ST1VUMlYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk4OF9ST1VUMlYsIHJlZyB8IDB4MDEwMCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5ODhfUklOVk9MKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5ODhfUklOVk9MLCByZWcgfCAweDAxMDApOwogCiAJd204OTg4X3NldF9iaWFzX2xldmVsKCZ3bTg5ODgtPmNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKQEAgLTkyNiwxOCArODg4LDIwIEBACiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyOwogCX0KIAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg5ODhfZGFpKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CiAJCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX2NvZGVjOwogCX0KIAogCXJldHVybiAwOwogCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIGVycjoKIAlrZnJlZSh3bTg5ODgpOwogCXJldHVybiByZXQ7CkBAIC05NjQsMTQgKzkyOCwxMyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWNvZGVjID0gJndtODk4OC0+Y29kZWM7Ci0JY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwogCiAJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204OTg4KTsKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOwogCiAJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKIAotCXJldHVybiB3bTg5ODhfcmVnaXN0ZXIod204OTg4KTsKKwlyZXR1cm4gd204OTg4X3JlZ2lzdGVyKHdtODk4OCwgU05EX1NPQ19JMkMpOwogfQogCiBzdGF0aWMgaW50IHdtODk4OF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCkBAIC05ODEsNiArOTQ0LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204OTg4X2kyY19zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJcmV0dXJuIHNuZF9zb2Nfc3VzcGVuZF9kZXZpY2UoJmNsaWVudC0+ZGV2KTsKK30KKworc3RhdGljIGludCB3bTg5ODhfaTJjX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXJldHVybiBzbmRfc29jX3Jlc3VtZV9kZXZpY2UoJmNsaWVudC0+ZGV2KTsKK30KKyNlbHNlCisjZGVmaW5lIHdtODk4OF9pMmNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODk4OF9pMmNfcmVzdW1lIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204OTg4X2kyY19pZFtdID0gewogCXsgIndtODk4OCIsIDAgfSwKIAl7IH0KQEAgLTk5NCwzNSArOTcyLDEzIEBACiAJfSwKIAkucHJvYmUgPSB3bTg5ODhfaTJjX3Byb2JlLAogCS5yZW1vdmUgPSB3bTg5ODhfaTJjX3JlbW92ZSwKKwkuc3VzcGVuZCA9IHdtODk4OF9pMmNfc3VzcGVuZCwKKwkucmVzdW1lID0gd204OTg4X2kyY19yZXN1bWUsCiAJLmlkX3RhYmxlID0gd204OTg4X2kyY19pZCwKIH07CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCi1zdGF0aWMgaW50IHdtODk4OF9zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0JdTggbXNnWzJdOwotCi0JaWYgKGxlbiA8PSAwKQotCQlyZXR1cm4gMDsKLQotCW1zZ1swXSA9IGRhdGFbMF07Ci0JbXNnWzFdID0gZGF0YVsxXTsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCW1lbXNldCgmdCwgMCwgKHNpemVvZiB0KSk7Ci0KLQl0LnR4X2J1ZiA9ICZtc2dbMF07Ci0JdC5sZW4gPSBsZW47Ci0KLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwotCXNwaV9zeW5jKHNwaSwgJm0pOwotCi0JcmV0dXJuIGxlbjsKLX0KLQogc3RhdGljIGludCBfX2RldmluaXQgd204OTg4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCB3bTg5ODhfcHJpdiAqd204OTg4OwpAQCAtMTAzMywxMyArOTg5LDEyIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJY29kZWMgPSAmd204OTg4LT5jb2RlYzsKLQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCl3bTg5ODhfc3BpX3dyaXRlOwogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CiAJY29kZWMtPmRldiA9ICZzcGktPmRldjsKIAogCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHdtODk4OCk7CiAKLQlyZXR1cm4gd204OTg4X3JlZ2lzdGVyKHdtODk4OCk7CisJcmV0dXJuIHdtODk4OF9yZWdpc3Rlcih3bTg5ODgsIFNORF9TT0NfU1BJKTsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgd204OTg4X3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKQEAgLTEwNTEsNiArMTAwNiwyMSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODk4OF9zcGlfc3VzcGVuZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXJldHVybiBzbmRfc29jX3N1c3BlbmRfZGV2aWNlKCZzcGktPmRldik7Cit9CisKK3N0YXRpYyBpbnQgd204OTg4X3NwaV9yZXN1bWUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlyZXR1cm4gc25kX3NvY19yZXN1bWVfZGV2aWNlKCZzcGktPmRldik7Cit9CisjZWxzZQorI2RlZmluZSB3bTg5ODhfc3BpX3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTg5ODhfc3BpX3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdtODk4OF9zcGlfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gIndtODk4OCIsCkBAIC0xMDU5LDYgKzEwMjksOCBAQAogCX0sCiAJLnByb2JlCQk9IHdtODk4OF9zcGlfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bTg5ODhfc3BpX3JlbW92ZSksCisJLnN1c3BlbmQJPSB3bTg5ODhfc3BpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB3bTg5ODhfc3BpX3Jlc3VtZSwKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKaW5kZXggZDAyOTgxOC4uMmQ3MDJkYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCkBAIC0xMDgsNTMgKzEwOCw3IEBACiAJMHgwMDAwLAkgICAgLyogUjYzIC0gRHJpdmVyIGludGVybmFsICovCiB9OwogCi0vKgotICogcmVhZCB3bTg5OTAgcmVnaXN0ZXIgY2FjaGUKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgd204OTkwX3JlYWRfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQl1bnNpZ25lZCBpbnQgcmVnKQotewotCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCUJVR19PTihyZWcgPj0gQVJSQVlfU0laRSh3bTg5OTBfcmVnKSk7Ci0JcmV0dXJuIGNhY2hlW3JlZ107Ci19Ci0KLS8qCi0gKiB3cml0ZSB3bTg5OTAgcmVnaXN0ZXIgY2FjaGUKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHdtODk5MF93cml0ZV9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCXVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQotCS8qIFJlc2V0IHJlZ2lzdGVyIGFuZCByZXNlcnZlZCByZWdpc3RlcnMgYXJlIHVuY2FjaGVkICovCi0JaWYgKHJlZyA9PSAwIHx8IHJlZyA+PSBBUlJBWV9TSVpFKHdtODk5MF9yZWcpKQotCQlyZXR1cm47Ci0KLQljYWNoZVtyZWddID0gdmFsdWU7Ci19Ci0KLS8qCi0gKiB3cml0ZSB0byB0aGUgd204OTkwIHJlZ2lzdGVyIHNwYWNlCi0gKi8KLXN0YXRpYyBpbnQgd204OTkwX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKLQl1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTggZGF0YVszXTsKLQotCWRhdGFbMF0gPSByZWcgJiAweEZGOwotCWRhdGFbMV0gPSAodmFsdWUgPj4gOCkgJiAweEZGOwotCWRhdGFbMl0gPSB2YWx1ZSAmIDB4RkY7Ci0KLQl3bTg5OTBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCByZWcsIHZhbHVlKTsKLQotCWlmIChjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMykgPT0gMikKLQkJcmV0dXJuIDA7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTzsKLX0KLQotI2RlZmluZSB3bTg5OTBfcmVzZXQoYykgd204OTkwX3dyaXRlKGMsIFdNODk5MF9SRVNFVCwgMCkKKyNkZWZpbmUgd204OTkwX3Jlc2V0KGMpIHNuZF9zb2Nfd3JpdGUoYywgV004OTkwX1JFU0VULCAwKQogCiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKHJlY19taXhfdGx2LCAtMTUwMCwgNjAwKTsKIApAQCAtMTg3LDggKzE0MSw4IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBub3cgaGl0IHRoZSB2b2x1bWUgdXBkYXRlIGJpdHMgKGFsd2F5cyBiaXQgOCkgKi8KLQl2YWwgPSB3bTg5OTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIHJlZyk7Ci0JcmV0dXJuIHdtODk5MF93cml0ZShjb2RlYywgcmVnLCB2YWwgfCAweDAxMDApOworCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgcmVnKTsKKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgcmVnLCB2YWwgfCAweDAxMDApOwogfQogCiAjZGVmaW5lIFNPQ19XTTg5OVhfT1VUUEdBX1NJTkdMRV9SX1RMVih4bmFtZSwgcmVnLCBzaGlmdCwgbWF4LCBpbnZlcnQsXApAQCAtNDI3LDggKzM4MSw4IEBACiB7CiAJdTE2IHJlZywgZmFrZXBvd2VyOwogCi0JcmVnID0gd204OTkwX3JlYWRfcmVnX2NhY2hlKHctPmNvZGVjLCBXTTg5OTBfUE9XRVJfTUFOQUdFTUVOVF8yKTsKLQlmYWtlcG93ZXIgPSB3bTg5OTBfcmVhZF9yZWdfY2FjaGUody0+Y29kZWMsIFdNODk5MF9JTlREUklWQklUUyk7CisJcmVnID0gc25kX3NvY19yZWFkKHctPmNvZGVjLCBXTTg5OTBfUE9XRVJfTUFOQUdFTUVOVF8yKTsKKwlmYWtlcG93ZXIgPSBzbmRfc29jX3JlYWQody0+Y29kZWMsIFdNODk5MF9JTlREUklWQklUUyk7CiAKIAlpZiAoZmFrZXBvd2VyICYgKCgxIDw8IFdNODk5MF9JTk1JWExfUFdSX0JJVCkgfAogCQkoMSA8PCBXTTg5OTBfQUlOTE1VWF9QV1JfQklUKSkpIHsKQEAgLTQ0Myw3ICszOTcsNyBAQAogCX0gZWxzZSB7CiAJCXJlZyAmPSB+V004OTkwX0FJTkxfRU5BOwogCX0KLQl3bTg5OTBfd3JpdGUody0+Y29kZWMsIFdNODk5MF9QT1dFUl9NQU5BR0VNRU5UXzIsIHJlZyk7CisJc25kX3NvY193cml0ZSh3LT5jb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMiwgcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDU3LDcgKzQxMSw3IEBACiAKIAlzd2l0Y2ggKHJlZ19zaGlmdCkgewogCWNhc2UgV004OTkwX1NQRUFLRVJfTUlYRVIgfCAoV004OTkwX0xEU1BLX0JJVCA8PCA4KSA6Ci0JCXJlZyA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZSh3LT5jb2RlYywgV004OTkwX09VVFBVVF9NSVhFUjEpOworCQlyZWcgPSBzbmRfc29jX3JlYWQody0+Y29kZWMsIFdNODk5MF9PVVRQVVRfTUlYRVIxKTsKIAkJaWYgKHJlZyAmIFdNODk5MF9MRExPKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiQ2Fubm90IHNldCBhcyBPdXRwdXQgTWl4ZXIgMSBMRExPIFNldFxuIik7CkBAIC00NjUsNyArNDE5LDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFdNODk5MF9TUEVBS0VSX01JWEVSIHwgKFdNODk5MF9SRFNQS19CSVQgPDwgOCk6Ci0JCXJlZyA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZSh3LT5jb2RlYywgV004OTkwX09VVFBVVF9NSVhFUjIpOworCQlyZWcgPSBzbmRfc29jX3JlYWQody0+Y29kZWMsIFdNODk5MF9PVVRQVVRfTUlYRVIyKTsKIAkJaWYgKHJlZyAmIFdNODk5MF9SRFJPKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiQ2Fubm90IHNldCBhcyBPdXRwdXQgTWl4ZXIgMiBSRFJPIFNldFxuIik7CkBAIC00NzMsNyArNDI3LDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFdNODk5MF9PVVRQVVRfTUlYRVIxIHwgKFdNODk5MF9MRExPX0JJVCA8PCA4KToKLQkJcmVnID0gd204OTkwX3JlYWRfcmVnX2NhY2hlKHctPmNvZGVjLCBXTTg5OTBfU1BFQUtFUl9NSVhFUik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZCh3LT5jb2RlYywgV004OTkwX1NQRUFLRVJfTUlYRVIpOwogCQlpZiAocmVnICYgV004OTkwX0xEU1BLKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiQ2Fubm90IHNldCBhcyBTcGVha2VyIE1peGVyIExEU1BLIFNldFxuIik7CkBAIC00ODEsNyArNDM1LDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFdNODk5MF9PVVRQVVRfTUlYRVIyIHwgKFdNODk5MF9SRFJPX0JJVCA8PCA4KToKLQkJcmVnID0gd204OTkwX3JlYWRfcmVnX2NhY2hlKHctPmNvZGVjLCBXTTg5OTBfU1BFQUtFUl9NSVhFUik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZCh3LT5jb2RlYywgV004OTkwX1NQRUFLRVJfTUlYRVIpOwogCQlpZiAocmVnICYgV004OTkwX1JEU1BLKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiQ2Fubm90IHNldCBhcyBTcGVha2VyIE1peGVyIFJEU1BLIFNldFxuIik7CkBAIC0xMDI5LDI0ICs5ODMsMjQgQEAKIAkJcGxsX2ZhY3RvcnMoJnBsbF9kaXYsIGZyZXFfb3V0ICogNCwgZnJlcV9pbik7CiAKIAkJLyogVHVybiBvbiBQTEwgKi8KLQkJcmVnID0gd204OTkwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5OTBfUE9XRVJfTUFOQUdFTUVOVF8yKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTBfUE9XRVJfTUFOQUdFTUVOVF8yKTsKIAkJcmVnIHw9IFdNODk5MF9QTExfRU5BOwotCQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9QT1dFUl9NQU5BR0VNRU5UXzIsIHJlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9QT1dFUl9NQU5BR0VNRU5UXzIsIHJlZyk7CiAKIAkJLyogc3lzY2xrIGNvbWVzIGZyb20gUExMICovCi0JCXJlZyA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTkwX0NMT0NLSU5HXzIpOwotCQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9DTE9DS0lOR18yLCByZWcgfCBXTTg5OTBfU1lTQ0xLX1NSQyk7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkwX0NMT0NLSU5HXzIpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfQ0xPQ0tJTkdfMiwgcmVnIHwgV004OTkwX1NZU0NMS19TUkMpOwogCiAJCS8qIHNldCB1cCBOICwgZnJhY3Rpb25hbCBtb2RlIGFuZCBwcmUtZGl2aXNvciBpZiBuZWNjZXNzYXJ5ICovCi0JCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX1BMTDEsIHBsbF9kaXYubiB8IFdNODk5MF9TRE0gfAorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfUExMMSwgcGxsX2Rpdi5uIHwgV004OTkwX1NETSB8CiAJCQkocGxsX2Rpdi5kaXYyP1dNODk5MF9QUkVTQ0FMRTowKSk7Ci0JCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX1BMTDIsICh1OCkocGxsX2Rpdi5rPj44KSk7Ci0JCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX1BMTDMsICh1OCkocGxsX2Rpdi5rICYgMHhGRikpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfUExMMiwgKHU4KShwbGxfZGl2Lms+PjgpKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX1BMTDMsICh1OCkocGxsX2Rpdi5rICYgMHhGRikpOwogCX0gZWxzZSB7CiAJCS8qIFR1cm4gb24gUExMICovCi0JCXJlZyA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMik7CiAJCXJlZyAmPSB+V004OTkwX1BMTF9FTkE7Ci0JCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMiwgcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMiwgcmVnKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDczLDggKzEwMjcsOCBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CiAJdTE2IGF1ZGlvMSwgYXVkaW8zOwogCi0JYXVkaW8xID0gd204OTkwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5OTBfQVVESU9fSU5URVJGQUNFXzEpOwotCWF1ZGlvMyA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTkwX0FVRElPX0lOVEVSRkFDRV8zKTsKKwlhdWRpbzEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5MF9BVURJT19JTlRFUkZBQ0VfMSk7CisJYXVkaW8zID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTBfQVVESU9fSU5URVJGQUNFXzMpOwogCiAJLyogc2V0IG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CkBAIC0xMTE1LDggKzEwNjksOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9BVURJT19JTlRFUkZBQ0VfMSwgYXVkaW8xKTsKLQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9BVURJT19JTlRFUkZBQ0VfMywgYXVkaW8zKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfQVVESU9fSU5URVJGQUNFXzEsIGF1ZGlvMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX0FVRElPX0lOVEVSRkFDRV8zLCBhdWRpbzMpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTI4LDI0ICsxMDgyLDI0IEBACiAKIAlzd2l0Y2ggKGRpdl9pZCkgewogCWNhc2UgV004OTkwX01DTEtfRElWOgotCQlyZWcgPSB3bTg5OTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk5MF9DTE9DS0lOR18yKSAmCisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkwX0NMT0NLSU5HXzIpICYKIAkJCX5XTTg5OTBfTUNMS19ESVZfTUFTSzsKLQkJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfQ0xPQ0tJTkdfMiwgcmVnIHwgZGl2KTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX0NMT0NLSU5HXzIsIHJlZyB8IGRpdik7CiAJCWJyZWFrOwogCWNhc2UgV004OTkwX0RBQ0NMS19ESVY6Ci0JCXJlZyA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTkwX0NMT0NLSU5HXzIpICYKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTBfQ0xPQ0tJTkdfMikgJgogCQkJfldNODk5MF9EQUNfQ0xLRElWX01BU0s7Ci0JCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX0NMT0NLSU5HXzIsIHJlZyB8IGRpdik7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9DTE9DS0lOR18yLCByZWcgfCBkaXYpOwogCQlicmVhazsKIAljYXNlIFdNODk5MF9BRENDTEtfRElWOgotCQlyZWcgPSB3bTg5OTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk5MF9DTE9DS0lOR18yKSAmCisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkwX0NMT0NLSU5HXzIpICYKIAkJCX5XTTg5OTBfQURDX0NMS0RJVl9NQVNLOwotCQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9DTE9DS0lOR18yLCByZWcgfCBkaXYpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfQ0xPQ0tJTkdfMiwgcmVnIHwgZGl2KTsKIAkJYnJlYWs7CiAJY2FzZSBXTTg5OTBfQkNMS19ESVY6Ci0JCXJlZyA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTkwX0NMT0NLSU5HXzEpICYKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTBfQ0xPQ0tJTkdfMSkgJgogCQkJfldNODk5MF9CQ0xLX0RJVl9NQVNLOwotCQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9DTE9DS0lOR18xLCByZWcgfCBkaXYpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfQ0xPQ0tJTkdfMSwgcmVnIHwgZGl2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTY0LDcgKzExMTgsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7Ci0JdTE2IGF1ZGlvMSA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTkwX0FVRElPX0lOVEVSRkFDRV8xKTsKKwl1MTYgYXVkaW8xID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTBfQVVESU9fSU5URVJGQUNFXzEpOwogCiAJYXVkaW8xICY9IH5XTTg5OTBfQUlGX1dMX01BU0s7CiAJLyogYml0IHNpemUgKi8KQEAgLTExODIsNyArMTEzNiw3IEBACiAJCWJyZWFrOwogCX0KIAotCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX0FVRElPX0lOVEVSRkFDRV8xLCBhdWRpbzEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9BVURJT19JTlRFUkZBQ0VfMSwgYXVkaW8xKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE5MSwxMiArMTE0NSwxMiBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CiAJdTE2IHZhbDsKIAotCXZhbCAgPSB3bTg5OTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk5MF9EQUNfQ1RSTCkgJiB+V004OTkwX0RBQ19NVVRFOworCXZhbCAgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5MF9EQUNfQ1RSTCkgJiB+V004OTkwX0RBQ19NVVRFOwogCiAJaWYgKG11dGUpCi0JCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX0RBQ19DVFJMLCB2YWwgfCBXTTg5OTBfREFDX01VVEUpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfREFDX0NUUkwsIHZhbCB8IFdNODk5MF9EQUNfTVVURSk7CiAJZWxzZQotCQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9EQUNfQ1RSTCwgdmFsKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX0RBQ19DVFJMLCB2YWwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjEyLDIxICsxMTY2LDIxIEBACiAKIAljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgogCQkvKiBWTUlEPTIqNTBrICovCi0JCXZhbCA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMSkgJgorCQl2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5MF9QT1dFUl9NQU5BR0VNRU5UXzEpICYKIAkJCX5XTTg5OTBfVk1JRF9NT0RFX01BU0s7Ci0JCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMSwgdmFsIHwgMHgyKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMSwgdmFsIHwgMHgyKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgogCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgewogCQkJLyogRW5hYmxlIGFsbCBvdXRwdXQgZGlzY2hhcmdlIGJpdHMgKi8KLQkJCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX0FOVElQT1AxLCBXTTg5OTBfRElTX0xMSU5FIHwKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9BTlRJUE9QMSwgV004OTkwX0RJU19MTElORSB8CiAJCQkJV004OTkwX0RJU19STElORSB8IFdNODk5MF9ESVNfT1VUMyB8CiAJCQkJV004OTkwX0RJU19PVVQ0IHwgV004OTkwX0RJU19MT1VUIHwKIAkJCQlXTTg5OTBfRElTX1JPVVQpOwogCiAJCQkvKiBFbmFibGUgUE9CQ1RSTCwgU09GVF9TVCwgVk1JRFRPRyBhbmQgQlVGRENPUEVOICovCi0JCQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9BTlRJUE9QMiwgV004OTkwX1NPRlRTVCB8CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfQU5USVBPUDIsIFdNODk5MF9TT0ZUU1QgfAogCQkJCSAgICAgV004OTkwX0JVRkRDT1BFTiB8IFdNODk5MF9QT0JDVFJMIHwKIAkJCQkgICAgIFdNODk5MF9WTUlEVE9HKTsKIApAQCAtMTIzNCw4MyArMTE4OCw4MyBAQAogCQkJbXNsZWVwKG1zZWNzX3RvX2ppZmZpZXMoMzAwKSk7CiAKIAkJCS8qIERpc2FibGUgVk1JRFRPRyAqLwotCQkJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfQU5USVBPUDIsIFdNODk5MF9TT0ZUU1QgfAorCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX0FOVElQT1AyLCBXTTg5OTBfU09GVFNUIHwKIAkJCQkgICAgIFdNODk5MF9CVUZEQ09QRU4gfCBXTTg5OTBfUE9CQ1RSTCk7CiAKIAkJCS8qIGRpc2FibGUgYWxsIG91dHB1dCBkaXNjaGFyZ2UgYml0cyAqLwotCQkJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfQU5USVBPUDEsIDApOworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX0FOVElQT1AxLCAwKTsKIAogCQkJLyogRW5hYmxlIG91dHB1dHMgKi8KLQkJCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMSwgMHgxYjAwKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MWIwMCk7CiAKIAkJCW1zbGVlcChtc2Vjc190b19qaWZmaWVzKDUwKSk7CiAKIAkJCS8qIEVuYWJsZSBWTUlEIGF0IDJ4NTBrICovCi0JCQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MWYwMik7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfUE9XRVJfTUFOQUdFTUVOVF8xLCAweDFmMDIpOwogCiAJCQltc2xlZXAobXNlY3NfdG9famlmZmllcygxMDApKTsKIAogCQkJLyogRW5hYmxlIFZSRUYgKi8KLQkJCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMSwgMHgxZjAzKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MWYwMyk7CiAKIAkJCW1zbGVlcChtc2Vjc190b19qaWZmaWVzKDYwMCkpOwogCiAJCQkvKiBFbmFibGUgQlVGSU9FTiAqLwotCQkJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfQU5USVBPUDIsIFdNODk5MF9TT0ZUU1QgfAorCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX0FOVElQT1AyLCBXTTg5OTBfU09GVFNUIHwKIAkJCQkgICAgIFdNODk5MF9CVUZEQ09QRU4gfCBXTTg5OTBfUE9CQ1RSTCB8CiAJCQkJICAgICBXTTg5OTBfQlVGSU9FTik7CiAKIAkJCS8qIERpc2FibGUgb3V0cHV0cyAqLwotCQkJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfUE9XRVJfTUFOQUdFTUVOVF8xLCAweDMpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMSwgMHgzKTsKIAogCQkJLyogZGlzYWJsZSBQT0JDVFJMLCBTT0ZUX1NUIGFuZCBCVUZEQ09QRU4gKi8KLQkJCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX0FOVElQT1AyLCBXTTg5OTBfQlVGSU9FTik7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfQU5USVBPUDIsIFdNODk5MF9CVUZJT0VOKTsKIAogCQkJLyogRW5hYmxlIHdvcmthcm91bmQgZm9yIEFEQyBjbG9ja2luZyBpc3N1ZS4gKi8KLQkJCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX0VYVF9BQ0NFU1NfRU5BLCAweDIpOwotCQkJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfRVhUX0NUTDEsIDB4YTAwMyk7Ci0JCQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9FWFRfQUNDRVNTX0VOQSwgMCk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfRVhUX0FDQ0VTU19FTkEsIDB4Mik7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfRVhUX0NUTDEsIDB4YTAwMyk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfRVhUX0FDQ0VTU19FTkEsIDApOwogCQl9CiAKIAkJLyogVk1JRD0yKjI1MGsgKi8KLQkJdmFsID0gd204OTkwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg5OTBfUE9XRVJfTUFOQUdFTUVOVF8xKSAmCisJCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMSkgJgogCQkJfldNODk5MF9WTUlEX01PREVfTUFTSzsKLQkJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwgfCAweDQpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfUE9XRVJfTUFOQUdFTUVOVF8xLCB2YWwgfCAweDQpOwogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKIAkJLyogRW5hYmxlIFBPQkNUUkwgYW5kIFNPRlRfU1QgKi8KLQkJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfQU5USVBPUDIsIFdNODk5MF9TT0ZUU1QgfAorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfQU5USVBPUDIsIFdNODk5MF9TT0ZUU1QgfAogCQkJV004OTkwX1BPQkNUUkwgfCBXTTg5OTBfQlVGSU9FTik7CiAKIAkJLyogRW5hYmxlIFBPQkNUUkwsIFNPRlRfU1QgYW5kIEJVRkRDT1BFTiAqLwotCQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9BTlRJUE9QMiwgV004OTkwX1NPRlRTVCB8CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9BTlRJUE9QMiwgV004OTkwX1NPRlRTVCB8CiAJCQlXTTg5OTBfQlVGRENPUEVOIHwgV004OTkwX1BPQkNUUkwgfAogCQkJV004OTkwX0JVRklPRU4pOwogCiAJCS8qIG11dGUgREFDICovCi0JCXZhbCA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTkwX0RBQ19DVFJMKTsKLQkJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfREFDX0NUUkwsIHZhbCB8IFdNODk5MF9EQUNfTVVURSk7CisJCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkwX0RBQ19DVFJMKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX0RBQ19DVFJMLCB2YWwgfCBXTTg5OTBfREFDX01VVEUpOwogCiAJCS8qIEVuYWJsZSBhbnkgZGlzYWJsZWQgb3V0cHV0cyAqLwotCQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MWYwMyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MWYwMyk7CiAKIAkJLyogRGlzYWJsZSBWTUlEICovCi0JCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMSwgMHgxZjAxKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMSwgMHgxZjAxKTsKIAogCQltc2xlZXAobXNlY3NfdG9famlmZmllcygzMDApKTsKIAogCQkvKiBFbmFibGUgYWxsIG91dHB1dCBkaXNjaGFyZ2UgYml0cyAqLwotCQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9BTlRJUE9QMSwgV004OTkwX0RJU19MTElORSB8CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9BTlRJUE9QMSwgV004OTkwX0RJU19MTElORSB8CiAJCQlXTTg5OTBfRElTX1JMSU5FIHwgV004OTkwX0RJU19PVVQzIHwKIAkJCVdNODk5MF9ESVNfT1VUNCB8IFdNODk5MF9ESVNfTE9VVCB8CiAJCQlXTTg5OTBfRElTX1JPVVQpOwogCiAJCS8qIERpc2FibGUgVlJFRiAqLwotCQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MCk7CiAKIAkJLyogZGlzYWJsZSBQT0JDVFJMLCBTT0ZUX1NUIGFuZCBCVUZEQ09QRU4gKi8KLQkJd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfQU5USVBPUDIsIDB4MCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9BTlRJUE9QMiwgMHgwKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNDExLDggKzEzNjUsNiBAQAogCiAJY29kZWMtPm5hbWUgPSAiV004OTkwIjsKIAljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+cmVhZCA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZTsKLQljb2RlYy0+d3JpdGUgPSB3bTg5OTBfd3JpdGU7CiAJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204OTkwX3NldF9iaWFzX2xldmVsOwogCWNvZGVjLT5kYWkgPSAmd204OTkwX2RhaTsKIAljb2RlYy0+bnVtX2RhaSA9IDI7CkBAIC0xNDIyLDYgKzEzNzQsMTIgQEAKIAlpZiAoY29kZWMtPnJlZ19jYWNoZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCAxNiwgU05EX1NPQ19JMkMpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAid204OTkwOiBmYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCWdvdG8gcGNtX2VycjsKKwl9CisKIAl3bTg5OTBfcmVzZXQoY29kZWMpOwogCiAJLyogcmVnaXN0ZXIgcGNtcyAqLwpAQCAtMTQzNSwxOCArMTM5MywxOCBAQAogCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKIAl3bTg5OTBfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAotCXJlZyA9IHdtODk5MF9yZWFkX3JlZ19jYWNoZShjb2RlYywgV004OTkwX0FVRElPX0lOVEVSRkFDRV80KTsKLQl3bTg5OTBfd3JpdGUoY29kZWMsIFdNODk5MF9BVURJT19JTlRFUkZBQ0VfNCwgcmVnIHwgV004OTkwX0FMUkNHUElPMSk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTBfQVVESU9fSU5URVJGQUNFXzQpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9BVURJT19JTlRFUkZBQ0VfNCwgcmVnIHwgV004OTkwX0FMUkNHUElPMSk7CiAKLQlyZWcgPSB3bTg5OTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk5MF9HUElPMV9HUElPMikgJgorCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkwX0dQSU8xX0dQSU8yKSAmCiAJCX5XTTg5OTBfR1BJTzFfU0VMX01BU0s7Ci0Jd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfR1BJTzFfR1BJTzIsIHJlZyB8IDEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9HUElPMV9HUElPMiwgcmVnIHwgMSk7CiAKLQlyZWcgPSB3bTg5OTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODk5MF9QT1dFUl9NQU5BR0VNRU5UXzIpOwotCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX1BPV0VSX01BTkFHRU1FTlRfMiwgcmVnIHwgV004OTkwX09QQ0xLX0VOQSk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTBfUE9XRVJfTUFOQUdFTUVOVF8yKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTBfUE9XRVJfTUFOQUdFTUVOVF8yLCByZWcgfCBXTTg5OTBfT1BDTEtfRU5BKTsKIAotCXdtODk5MF93cml0ZShjb2RlYywgV004OTkwX0xFRlRfT1VUUFVUX1ZPTFVNRSwgMHg1MCB8ICgxPDw4KSk7Ci0Jd204OTkwX3dyaXRlKGNvZGVjLCBXTTg5OTBfUklHSFRfT1VUUFVUX1ZPTFVNRSwgMHg1MCB8ICgxPDw4KSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX0xFRlRfT1VUUFVUX1ZPTFVNRSwgMHg1MCB8ICgxPDw4KSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX1JJR0hUX09VVFBVVF9WT0xVTUUsIDB4NTAgfCAoMTw8OCkpOwogCiAJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODk5MF9zbmRfY29udHJvbHMsCiAJCQkJQVJSQVlfU0laRSh3bTg5OTBfc25kX2NvbnRyb2xzKSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTk4Nzk5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYwpAQCAtMCwwICsxLDE2NzUgQEAKKy8qCisgKiB3bTg5OTMuYyAtLSBXTTg5OTMgQUxTQSBTb0MgYXVkaW8gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHBsYworICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3dtODk5My5oPgorCisjaW5jbHVkZSAid204OTkzLmgiCisjaW5jbHVkZSAid21faHVicy5oIgorCitzdGF0aWMgdTE2IHdtODk5M19yZWdfZGVmYXVsdHNbV004OTkzX1JFR0lTVEVSX0NPVU5UXSA9IHsKKwkweDg5OTMsICAgICAvKiBSMCAgIC0gU29mdHdhcmUgUmVzZXQgKi8KKwkweDAwMDAsICAgICAvKiBSMSAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkgKi8KKwkweDYwMDAsICAgICAvKiBSMiAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSMyAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMykgKi8KKwkweDQwNTAsICAgICAvKiBSNCAgIC0gQXVkaW8gSW50ZXJmYWNlICgxKSAqLworCTB4NDAwMCwgICAgIC8qIFI1ICAgLSBBdWRpbyBJbnRlcmZhY2UgKDIpICovCisJMHgwMUM4LCAgICAgLyogUjYgICAtIENsb2NraW5nIDEgKi8KKwkweDAwMDAsICAgICAvKiBSNyAgIC0gQ2xvY2tpbmcgMiAqLworCTB4MDAwMCwgICAgIC8qIFI4ICAgLSBBdWRpbyBJbnRlcmZhY2UgKDMpICovCisJMHgwMDQwLCAgICAgLyogUjkgICAtIEF1ZGlvIEludGVyZmFjZSAoNCkgKi8KKwkweDAwMDQsICAgICAvKiBSMTAgIC0gREFDIENUUkwgKi8KKwkweDAwQzAsICAgICAvKiBSMTEgIC0gTGVmdCBEQUMgRGlnaXRhbCBWb2x1bWUgKi8KKwkweDAwQzAsICAgICAvKiBSMTIgIC0gUmlnaHQgREFDIERpZ2l0YWwgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjEzICAtIERpZ2l0YWwgU2lkZSBUb25lICovCisJMHgwMzAwLCAgICAgLyogUjE0ICAtIEFEQyBDVFJMICovCisJMHgwMEMwLCAgICAgLyogUjE1ICAtIExlZnQgQURDIERpZ2l0YWwgVm9sdW1lICovCisJMHgwMEMwLCAgICAgLyogUjE2ICAtIFJpZ2h0IEFEQyBEaWdpdGFsIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFIxNyAqLworCTB4MDAwMCwgICAgIC8qIFIxOCAgLSBHUElPIENUUkwgMSAqLworCTB4MDAxMCwgICAgIC8qIFIxOSAgLSBHUElPMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMCAgLSBJUlFfREVCT1VOQ0UgKi8KKwkweDAwMDAsICAgICAvKiBSMjEgKi8KKwkweDgwMDAsICAgICAvKiBSMjIgIC0gR1BJT0NUUkwgMiAqLworCTB4MDgwMCwgICAgIC8qIFIyMyAgLSBHUElPX1BPTCAqLworCTB4MDA4QiwgICAgIC8qIFIyNCAgLSBMZWZ0IExpbmUgSW5wdXQgMSYyIFZvbHVtZSAqLworCTB4MDA4QiwgICAgIC8qIFIyNSAgLSBMZWZ0IExpbmUgSW5wdXQgMyY0IFZvbHVtZSAqLworCTB4MDA4QiwgICAgIC8qIFIyNiAgLSBSaWdodCBMaW5lIElucHV0IDEmMiBWb2x1bWUgKi8KKwkweDAwOEIsICAgICAvKiBSMjcgIC0gUmlnaHQgTGluZSBJbnB1dCAzJjQgVm9sdW1lICovCisJMHgwMDZELCAgICAgLyogUjI4ICAtIExlZnQgT3V0cHV0IFZvbHVtZSAqLworCTB4MDA2RCwgICAgIC8qIFIyOSAgLSBSaWdodCBPdXRwdXQgVm9sdW1lICovCisJMHgwMDY2LCAgICAgLyogUjMwICAtIExpbmUgT3V0cHV0cyBWb2x1bWUgKi8KKwkweDAwMjAsICAgICAvKiBSMzEgIC0gSFBPVVQyIFZvbHVtZSAqLworCTB4MDA3OSwgICAgIC8qIFIzMiAgLSBMZWZ0IE9QR0EgVm9sdW1lICovCisJMHgwMDc5LCAgICAgLyogUjMzICAtIFJpZ2h0IE9QR0EgVm9sdW1lICovCisJMHgwMDAzLCAgICAgLyogUjM0ICAtIFNQS01JWEwgQXR0ZW51YXRpb24gKi8KKwkweDAwMDMsICAgICAvKiBSMzUgIC0gU1BLTUlYUiBBdHRlbnVhdGlvbiAqLworCTB4MDAxMSwgICAgIC8qIFIzNiAgLSBTUEtPVVQgTWl4ZXJzICovCisJMHgwMTAwLCAgICAgLyogUjM3ICAtIFNQS09VVCBCb29zdCAqLworCTB4MDA3OSwgICAgIC8qIFIzOCAgLSBTcGVha2VyIFZvbHVtZSBMZWZ0ICovCisJMHgwMDc5LCAgICAgLyogUjM5ICAtIFNwZWFrZXIgVm9sdW1lIFJpZ2h0ICovCisJMHgwMDAwLCAgICAgLyogUjQwICAtIElucHV0IE1peGVyMiAqLworCTB4MDAwMCwgICAgIC8qIFI0MSAgLSBJbnB1dCBNaXhlcjMgKi8KKwkweDAwMDAsICAgICAvKiBSNDIgIC0gSW5wdXQgTWl4ZXI0ICovCisJMHgwMDAwLCAgICAgLyogUjQzICAtIElucHV0IE1peGVyNSAqLworCTB4MDAwMCwgICAgIC8qIFI0NCAgLSBJbnB1dCBNaXhlcjYgKi8KKwkweDAwMDAsICAgICAvKiBSNDUgIC0gT3V0cHV0IE1peGVyMSAqLworCTB4MDAwMCwgICAgIC8qIFI0NiAgLSBPdXRwdXQgTWl4ZXIyICovCisJMHgwMDAwLCAgICAgLyogUjQ3ICAtIE91dHB1dCBNaXhlcjMgKi8KKwkweDAwMDAsICAgICAvKiBSNDggIC0gT3V0cHV0IE1peGVyNCAqLworCTB4MDAwMCwgICAgIC8qIFI0OSAgLSBPdXRwdXQgTWl4ZXI1ICovCisJMHgwMDAwLCAgICAgLyogUjUwICAtIE91dHB1dCBNaXhlcjYgKi8KKwkweDAwMDAsICAgICAvKiBSNTEgIC0gSFBPVVQyIE1peGVyICovCisJMHgwMDAwLCAgICAgLyogUjUyICAtIExpbmUgTWl4ZXIxICovCisJMHgwMDAwLCAgICAgLyogUjUzICAtIExpbmUgTWl4ZXIyICovCisJMHgwMDAwLCAgICAgLyogUjU0ICAtIFNwZWFrZXIgTWl4ZXIgKi8KKwkweDAwMDAsICAgICAvKiBSNTUgIC0gQWRkaXRpb25hbCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjU2ICAtIEFudGlQT1AxICovCisJMHgwMDAwLCAgICAgLyogUjU3ICAtIEFudGlQT1AyICovCisJMHgwMDAwLCAgICAgLyogUjU4ICAtIE1JQ0JJQVMgKi8KKwkweDAwMDAsICAgICAvKiBSNTkgKi8KKwkweDAwMDAsICAgICAvKiBSNjAgIC0gRkxMIENvbnRyb2wgMSAqLworCTB4MDAwMCwgICAgIC8qIFI2MSAgLSBGTEwgQ29udHJvbCAyICovCisJMHgwMDAwLCAgICAgLyogUjYyICAtIEZMTCBDb250cm9sIDMgKi8KKwkweDJFRTAsICAgICAvKiBSNjMgIC0gRkxMIENvbnRyb2wgNCAqLworCTB4MDAwMiwgICAgIC8qIFI2NCAgLSBGTEwgQ29udHJvbCA1ICovCisJMHgyMjg3LCAgICAgLyogUjY1ICAtIENsb2NraW5nIDMgKi8KKwkweDAyNUYsICAgICAvKiBSNjYgIC0gQ2xvY2tpbmcgNCAqLworCTB4MDAwMCwgICAgIC8qIFI2NyAgLSBNVyBTbGF2ZSBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjY4ICovCisJMHgwMDAyLCAgICAgLyogUjY5ICAtIEJ1cyBDb250cm9sIDEgKi8KKwkweDAwMDAsICAgICAvKiBSNzAgIC0gV3JpdGUgU2VxdWVuY2VyIDAgKi8KKwkweDAwMDAsICAgICAvKiBSNzEgIC0gV3JpdGUgU2VxdWVuY2VyIDEgKi8KKwkweDAwMDAsICAgICAvKiBSNzIgIC0gV3JpdGUgU2VxdWVuY2VyIDIgKi8KKwkweDAwMDAsICAgICAvKiBSNzMgIC0gV3JpdGUgU2VxdWVuY2VyIDMgKi8KKwkweDAwMDAsICAgICAvKiBSNzQgIC0gV3JpdGUgU2VxdWVuY2VyIDQgKi8KKwkweDAwMDAsICAgICAvKiBSNzUgIC0gV3JpdGUgU2VxdWVuY2VyIDUgKi8KKwkweDFGMjUsICAgICAvKiBSNzYgIC0gQ2hhcmdlIFB1bXAgMSAqLworCTB4MDAwMCwgICAgIC8qIFI3NyAqLworCTB4MDAwMCwgICAgIC8qIFI3OCAqLworCTB4MDAwMCwgICAgIC8qIFI3OSAqLworCTB4MDAwMCwgICAgIC8qIFI4MCAqLworCTB4MDAwMCwgICAgIC8qIFI4MSAgLSBDbGFzcyBXIDAgKi8KKwkweDAwMDAsICAgICAvKiBSODIgKi8KKwkweDAwMDAsICAgICAvKiBSODMgKi8KKwkweDAwMDAsICAgICAvKiBSODQgIC0gREMgU2Vydm8gMCAqLworCTB4MDU0QSwgICAgIC8qIFI4NSAgLSBEQyBTZXJ2byAxICovCisJMHgwMDAwLCAgICAgLyogUjg2ICovCisJMHgwMDAwLCAgICAgLyogUjg3ICAtIERDIFNlcnZvIDMgKi8KKwkweDAwMDAsICAgICAvKiBSODggIC0gREMgU2Vydm8gUmVhZGJhY2sgMCAqLworCTB4MDAwMCwgICAgIC8qIFI4OSAgLSBEQyBTZXJ2byBSZWFkYmFjayAxICovCisJMHgwMDAwLCAgICAgLyogUjkwICAtIERDIFNlcnZvIFJlYWRiYWNrIDIgKi8KKwkweDAwMDAsICAgICAvKiBSOTEgKi8KKwkweDAwMDAsICAgICAvKiBSOTIgKi8KKwkweDAwMDAsICAgICAvKiBSOTMgKi8KKwkweDAwMDAsICAgICAvKiBSOTQgKi8KKwkweDAwMDAsICAgICAvKiBSOTUgKi8KKwkweDAxMDAsICAgICAvKiBSOTYgIC0gQW5hbG9ndWUgSFAgMCAqLworCTB4MDAwMCwgICAgIC8qIFI5NyAqLworCTB4MDAwMCwgICAgIC8qIFI5OCAgLSBFUTEgKi8KKwkweDAwMEMsICAgICAvKiBSOTkgIC0gRVEyICovCisJMHgwMDBDLCAgICAgLyogUjEwMCAtIEVRMyAqLworCTB4MDAwQywgICAgIC8qIFIxMDEgLSBFUTQgKi8KKwkweDAwMEMsICAgICAvKiBSMTAyIC0gRVE1ICovCisJMHgwMDBDLCAgICAgLyogUjEwMyAtIEVRNiAqLworCTB4MEZDQSwgICAgIC8qIFIxMDQgLSBFUTcgKi8KKwkweDA0MDAsICAgICAvKiBSMTA1IC0gRVE4ICovCisJMHgwMEQ4LCAgICAgLyogUjEwNiAtIEVROSAqLworCTB4MUVCNSwgICAgIC8qIFIxMDcgLSBFUTEwICovCisJMHhGMTQ1LCAgICAgLyogUjEwOCAtIEVRMTEgKi8KKwkweDBCNzUsICAgICAvKiBSMTA5IC0gRVExMiAqLworCTB4MDFDNSwgICAgIC8qIFIxMTAgLSBFUTEzICovCisJMHgxQzU4LCAgICAgLyogUjExMSAtIEVRMTQgKi8KKwkweEYzNzMsICAgICAvKiBSMTEyIC0gRVExNSAqLworCTB4MEE1NCwgICAgIC8qIFIxMTMgLSBFUTE2ICovCisJMHgwNTU4LCAgICAgLyogUjExNCAtIEVRMTcgKi8KKwkweDE2OEUsICAgICAvKiBSMTE1IC0gRVExOCAqLworCTB4RjgyOSwgICAgIC8qIFIxMTYgLSBFUTE5ICovCisJMHgwN0FELCAgICAgLyogUjExNyAtIEVRMjAgKi8KKwkweDExMDMsICAgICAvKiBSMTE4IC0gRVEyMSAqLworCTB4MDU2NCwgICAgIC8qIFIxMTkgLSBFUTIyICovCisJMHgwNTU5LCAgICAgLyogUjEyMCAtIEVRMjMgKi8KKwkweDQwMDAsICAgICAvKiBSMTIxIC0gRVEyNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjIgLSBEaWdpdGFsIFB1bGxzICovCisJMHgwRjA4LCAgICAgLyogUjEyMyAtIERSQyBDb250cm9sIDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTI0IC0gRFJDIENvbnRyb2wgMiAqLworCTB4MDA4MCwgICAgIC8qIFIxMjUgLSBEUkMgQ29udHJvbCAzICovCisJMHgwMDAwLCAgICAgLyogUjEyNiAtIERSQyBDb250cm9sIDQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCByYXRpbzsKKwlpbnQgY2xrX3N5c19yYXRlOworfSBjbGtfc3lzX3JhdGVzW10gPSB7CisJeyA2NCwgICAwIH0sCisJeyAxMjgsICAxIH0sCisJeyAxOTIsICAyIH0sCisJeyAyNTYsICAzIH0sCisJeyAzODQsICA0IH0sCisJeyA1MTIsICA1IH0sCisJeyA3NjgsICA2IH0sCisJeyAxMDI0LCA3IH0sCisJeyAxNDA4LCA4IH0sCisJeyAxNTM2LCA5IH0sCit9OworCitzdGF0aWMgc3RydWN0IHsKKwlpbnQgcmF0ZTsKKwlpbnQgc2FtcGxlX3JhdGU7Cit9IHNhbXBsZV9yYXRlc1tdID0geworCXsgODAwMCwgIDAgIH0sCisJeyAxMTAyNSwgMSAgfSwKKwl7IDEyMDAwLCAxICB9LAorCXsgMTYwMDAsIDIgIH0sCisJeyAyMjA1MCwgMyAgfSwKKwl7IDI0MDAwLCAzICB9LAorCXsgMzIwMDAsIDQgIH0sCisJeyA0NDEwMCwgNSAgfSwKKwl7IDQ4MDAwLCA1ICB9LAorfTsKKworc3RhdGljIHN0cnVjdCB7CisJaW50IGRpdjsgLyogKjEwIGR1ZSB0byAuNXMgKi8KKwlpbnQgYmNsa19kaXY7Cit9IGJjbGtfZGl2c1tdID0geworCXsgMTAsICAwICB9LAorCXsgMTUsICAxICB9LAorCXsgMjAsICAyICB9LAorCXsgMzAsICAzICB9LAorCXsgNDAsICA0ICB9LAorCXsgNTUsICA1ICB9LAorCXsgNjAsICA2ICB9LAorCXsgODAsICA3ICB9LAorCXsgMTEwLCA4ICB9LAorCXsgMTIwLCA5ICB9LAorCXsgMTYwLCAxMCB9LAorCXsgMjIwLCAxMSB9LAorCXsgMjQwLCAxMiB9LAorCXsgMzIwLCAxMyB9LAorCXsgNDQwLCAxNCB9LAorCXsgNDgwLCAxNSB9LAorfTsKKworc3RydWN0IHdtODk5M19wcml2IHsKKwl1MTYgcmVnX2NhY2hlW1dNODk5M19SRUdJU1RFUl9DT1VOVF07CisJc3RydWN0IHdtODk5M19wbGF0Zm9ybV9kYXRhIHBkYXRhOworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCWludCBtYXN0ZXI7CisJaW50IHN5c2Nsa19zb3VyY2U7CisJaW50IHRkbV9zbG90czsKKwlpbnQgdGRtX3dpZHRoOworCXVuc2lnbmVkIGludCBtY2xrX3JhdGU7CisJdW5zaWduZWQgaW50IHN5c2Nsa19yYXRlOworCXVuc2lnbmVkIGludCBmczsKKwl1bnNpZ25lZCBpbnQgYmNsazsKKwlpbnQgY2xhc3Nfd191c2VyczsKKwl1bnNpZ25lZCBpbnQgZmxsX2ZyZWY7CisJdW5zaWduZWQgaW50IGZsbF9mb3V0OworfTsKKworc3RhdGljIHVuc2lnbmVkIGludCB3bTg5OTNfcmVhZF9odyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHU4IHJlZykKK3sKKwlzdHJ1Y3QgaTJjX21zZyB4ZmVyWzJdOworCXUxNiBkYXRhOworCWludCByZXQ7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNvZGVjLT5jb250cm9sX2RhdGE7CisKKwkvKiBXcml0ZSByZWdpc3RlciAqLworCXhmZXJbMF0uYWRkciA9IGkyYy0+YWRkcjsKKwl4ZmVyWzBdLmZsYWdzID0gMDsKKwl4ZmVyWzBdLmxlbiA9IDE7CisJeGZlclswXS5idWYgPSAmcmVnOworCisJLyogUmVhZCBkYXRhICovCisJeGZlclsxXS5hZGRyID0gaTJjLT5hZGRyOworCXhmZXJbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKKwl4ZmVyWzFdLmxlbiA9IDI7CisJeGZlclsxXS5idWYgPSAodTggKikmZGF0YTsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmMtPmFkYXB0ZXIsIHhmZXIsIDIpOworCWlmIChyZXQgIT0gMikgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVhZCAweCV4OiAlZFxuIiwgcmVnLCByZXQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gKGRhdGEgPj4gOCkgfCAoKGRhdGEgJiAweGZmKSA8PCA4KTsKK30KKworc3RhdGljIGludCB3bTg5OTNfdm9sYXRpbGUodW5zaWduZWQgaW50IHJlZykKK3sKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgV004OTkzX1NPRlRXQVJFX1JFU0VUOgorCWNhc2UgV004OTkzX0RDX1NFUlZPXzA6CisJY2FzZSBXTTg5OTNfRENfU0VSVk9fUkVBREJBQ0tfMDoKKwljYXNlIFdNODk5M19EQ19TRVJWT19SRUFEQkFDS18xOgorCWNhc2UgV004OTkzX0RDX1NFUlZPX1JFQURCQUNLXzI6CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCB3bTg5OTNfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJdW5zaWduZWQgaW50IHJlZykKK3sKKwl1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwlCVUdfT04ocmVnID4gV004OTkzX01BWF9SRUdJU1RFUik7CisKKwlpZiAod204OTkzX3ZvbGF0aWxlKHJlZykpCisJCXJldHVybiB3bTg5OTNfcmVhZF9odyhjb2RlYywgcmVnKTsKKwllbHNlCisJCXJldHVybiByZWdfY2FjaGVbcmVnXTsKK30KKworc3RhdGljIGludCB3bTg5OTNfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJdW5zaWduZWQgaW50IHZhbHVlKQoreworCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwl1OCBkYXRhWzNdOworCWludCByZXQ7CisKKwlCVUdfT04ocmVnID4gV004OTkzX01BWF9SRUdJU1RFUik7CisKKwkvKiBkYXRhIGlzCisJICogICBEMTUuLkQ5IFdNODk5MyByZWdpc3RlciBvZmZzZXQKKwkgKiAgIEQ4Li4uRDAgcmVnaXN0ZXIgZGF0YQorCSAqLworCWRhdGFbMF0gPSByZWc7CisJZGF0YVsxXSA9IHZhbHVlID4+IDg7CisJZGF0YVsyXSA9IHZhbHVlICYgMHgwMGZmOworCisJaWYgKCF3bTg5OTNfdm9sYXRpbGUocmVnKSkKKwkJcmVnX2NhY2hlW3JlZ10gPSB2YWx1ZTsKKworCXJldCA9IGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAzKTsKKworCWlmIChyZXQgPT0gMykKKwkJcmV0dXJuIDA7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0cnVjdCBfZmxsX2RpdiB7CisJdTE2IGZsbF9mcmF0aW87CisJdTE2IGZsbF9vdXRkaXY7CisJdTE2IGZsbF9jbGtfcmVmX2RpdjsKKwl1MTYgbjsKKwl1MTYgazsKK307CisKKy8qIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIEZMTCBkaXZpZGUgbXVsdGlwbGllZCBieSAxMAorICogdG8gYWxsb3cgcm91bmRpbmcgbGF0ZXIgKi8KKyNkZWZpbmUgRklYRURfRkxMX1NJWkUgKCgxIDw8IDE2KSAqIDEwKQorCitzdGF0aWMgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgbWluOworCXVuc2lnbmVkIGludCBtYXg7CisJdTE2IGZsbF9mcmF0aW87CisJaW50IHJhdGlvOworfSBmbGxfZnJhdGlvc1tdID0geworCXsgICAgICAgMCwgICAgNjQwMDAsIDQsIDE2IH0sCisJeyAgIDY0MDAwLCAgIDEyODAwMCwgMywgIDggfSwKKwl7ICAxMjgwMDAsICAgMjU2MDAwLCAyLCAgNCB9LAorCXsgIDI1NjAwMCwgIDEwMDAwMDAsIDEsICAyIH0sCisJeyAxMDAwMDAwLCAxMzUwMDAwMCwgMCwgIDEgfSwKK307CisKK3N0YXRpYyBpbnQgZmxsX2ZhY3RvcnMoc3RydWN0IF9mbGxfZGl2ICpmbGxfZGl2LCB1bnNpZ25lZCBpbnQgRnJlZiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBGb3V0KQoreworCXU2NCBLcGFydDsKKwl1bnNpZ25lZCBpbnQgSywgTmRpdiwgTm1vZCwgdGFyZ2V0OworCXVuc2lnbmVkIGludCBkaXY7CisJaW50IGk7CisKKwkvKiBGcmVmIG11c3QgYmUgPD0xMy41TUh6ICovCisJZGl2ID0gMTsKKwlmbGxfZGl2LT5mbGxfY2xrX3JlZl9kaXYgPSAwOworCXdoaWxlICgoRnJlZiAvIGRpdikgPiAxMzUwMDAwMCkgeworCQlkaXYgKj0gMjsKKwkJZmxsX2Rpdi0+ZmxsX2Nsa19yZWZfZGl2Kys7CisKKwkJaWYgKGRpdiA+IDgpIHsKKwkJCXByX2VycigiQ2FuJ3Qgc2NhbGUgJWRNSHogaW5wdXQgZG93biB0byA8PTEzLjVNSHpcbiIsCisJCQkgICAgICAgRnJlZik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXByX2RlYnVnKCJGcmVmPSV1IEZvdXQ9JXVcbiIsIEZyZWYsIEZvdXQpOworCisJLyogQXBwbHkgdGhlIGRpdmlzaW9uIGZvciBvdXIgcmVtYWluaW5nIGNhbGN1bGF0aW9ucyAqLworCUZyZWYgLz0gZGl2OworCisJLyogRnZjbyBzaG91bGQgYmUgOTAtMTAwTUh6OyBkb24ndCBjaGVjayB0aGUgdXBwZXIgYm91bmQgKi8KKwlkaXYgPSAwOworCXRhcmdldCA9IEZvdXQgKiAyOworCXdoaWxlICh0YXJnZXQgPCA5MDAwMDAwMCkgeworCQlkaXYrKzsKKwkJdGFyZ2V0ICo9IDI7CisJCWlmIChkaXYgPiA3KSB7CisJCQlwcl9lcnIoIlVuYWJsZSB0byBmaW5kIEZMTF9PVVRESVYgZm9yIEZvdXQ9JXVIelxuIiwKKwkJCSAgICAgICBGb3V0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCWZsbF9kaXYtPmZsbF9vdXRkaXYgPSBkaXY7CisKKwlwcl9kZWJ1ZygiRnZjbz0lZEh6XG4iLCB0YXJnZXQpOworCisJLyogRmluZCBhbiBhcHByb3ByYWl0ZSBGTExfRlJBVElPIGFuZCBmYWN0b3IgaXQgb3V0IG9mIHRoZSB0YXJnZXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbGxfZnJhdGlvcyk7IGkrKykgeworCQlpZiAoZmxsX2ZyYXRpb3NbaV0ubWluIDw9IEZyZWYgJiYgRnJlZiA8PSBmbGxfZnJhdGlvc1tpXS5tYXgpIHsKKwkJCWZsbF9kaXYtPmZsbF9mcmF0aW8gPSBmbGxfZnJhdGlvc1tpXS5mbGxfZnJhdGlvOworCQkJdGFyZ2V0IC89IGZsbF9mcmF0aW9zW2ldLnJhdGlvOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gQVJSQVlfU0laRShmbGxfZnJhdGlvcykpIHsKKwkJcHJfZXJyKCJVbmFibGUgdG8gZmluZCBGTExfRlJBVElPIGZvciBGcmVmPSV1SHpcbiIsIEZyZWYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBOb3csIGNhbGN1bGF0ZSBOLksgKi8KKwlOZGl2ID0gdGFyZ2V0IC8gRnJlZjsKKworCWZsbF9kaXYtPm4gPSBOZGl2OworCU5tb2QgPSB0YXJnZXQgJSBGcmVmOworCXByX2RlYnVnKCJObW9kPSVkXG4iLCBObW9kKTsKKworCS8qIENhbGN1bGF0ZSBmcmFjdGlvbmFsIHBhcnQgLSBzY2FsZSB1cCBzbyB3ZSBjYW4gcm91bmQuICovCisJS3BhcnQgPSBGSVhFRF9GTExfU0laRSAqIChsb25nIGxvbmcpTm1vZDsKKworCWRvX2RpdihLcGFydCwgRnJlZik7CisKKwlLID0gS3BhcnQgJiAweEZGRkZGRkZGOworCisJaWYgKChLICUgMTApID49IDUpCisJCUsgKz0gNTsKKworCS8qIE1vdmUgZG93biB0byBwcm9wZXIgcmFuZ2Ugbm93IHJvdW5kaW5nIGlzIGRvbmUgKi8KKwlmbGxfZGl2LT5rID0gSyAvIDEwOworCisJcHJfZGVidWcoIk49JXggSz0leCBGTExfRlJBVElPPSV4IEZMTF9PVVRESVY9JXggRkxMX0NMS19SRUZfRElWPSV4XG4iLAorCQkgZmxsX2Rpdi0+biwgZmxsX2Rpdi0+aywKKwkJIGZsbF9kaXYtPmZsbF9mcmF0aW8sIGZsbF9kaXYtPmZsbF9vdXRkaXYsCisJCSBmbGxfZGl2LT5mbGxfY2xrX3JlZl9kaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTkzX3NldF9mbGwoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBmbGxfaWQsCisJCQkgIHVuc2lnbmVkIGludCBGcmVmLCB1bnNpZ25lZCBpbnQgRm91dCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCB3bTg5OTNfcHJpdiAqd204OTkzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwl1MTYgcmVnMSwgcmVnNCwgcmVnNTsKKwlzdHJ1Y3QgX2ZsbF9kaXYgZmxsX2RpdjsKKwlpbnQgcmV0OworCisJLyogQW55IGNoYW5nZT8gKi8KKwlpZiAoRnJlZiA9PSB3bTg5OTMtPmZsbF9mcmVmICYmIEZvdXQgPT0gd204OTkzLT5mbGxfZm91dCkKKwkJcmV0dXJuIDA7CisKKwkvKiBEaXNhYmxlIHRoZSBGTEwgKi8KKwlpZiAoRm91dCA9PSAwKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkZMTCBkaXNhYmxlZFxuIik7CisJCXdtODk5My0+ZmxsX2ZyZWYgPSAwOworCQl3bTg5OTMtPmZsbF9mb3V0ID0gMDsKKworCQlyZWcxID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xKTsKKwkJcmVnMSAmPSB+V004OTkzX0ZMTF9FTkE7CisJCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEsIHJlZzEpOworCisJCXJldHVybiAwOworCX0KKworCXJldCA9IGZsbF9mYWN0b3JzKCZmbGxfZGl2LCBGcmVmLCBGb3V0KTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlyZWc1ID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF81KTsKKwlyZWc1ICY9IH5XTTg5OTNfRkxMX0NMS19TUkNfTUFTSzsKKworCXN3aXRjaCAoZmxsX2lkKSB7CisJY2FzZSBXTTg5OTNfRkxMX01DTEs6CisJCWJyZWFrOworCisJY2FzZSBXTTg5OTNfRkxMX0xSQ0xLOgorCQlyZWc1IHw9IDE7CisJCWJyZWFrOworCisJY2FzZSBXTTg5OTNfRkxMX0JDTEs6CisJCXJlZzUgfD0gMjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJVbmtub3duIEZMTCBJRCAlZFxuIiwgZmxsX2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQW55IEZMTCBjb25maWd1cmF0aW9uIGNoYW5nZSByZXF1aXJlcyB0aGF0IHRoZSBGTEwgYmUKKwkgKiBkaXNhYmxlZCBmaXJzdC4gKi8KKwlyZWcxID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xKTsKKwlyZWcxICY9IH5XTTg5OTNfRkxMX0VOQTsKKwl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxKTsKKworCS8qIEFwcGx5IHRoZSBjb25maWd1cmF0aW9uICovCisJaWYgKGZsbF9kaXYuaykKKwkJcmVnMSB8PSBXTTg5OTNfRkxMX0ZSQUNfTUFTSzsKKwllbHNlCisJCXJlZzEgJj0gfldNODk5M19GTExfRlJBQ19NQVNLOworCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEsIHJlZzEpOworCisJd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMiwKKwkJICAgICAoZmxsX2Rpdi5mbGxfb3V0ZGl2IDw8IFdNODk5M19GTExfT1VURElWX1NISUZUKSB8CisJCSAgICAgKGZsbF9kaXYuZmxsX2ZyYXRpbyA8PCBXTTg5OTNfRkxMX0ZSQVRJT19TSElGVCkpOworCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzMsIGZsbF9kaXYuayk7CisKKwlyZWc0ID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF80KTsKKwlyZWc0ICY9IH5XTTg5OTNfRkxMX05fTUFTSzsKKwlyZWc0IHw9IGZsbF9kaXYubiA8PCBXTTg5OTNfRkxMX05fU0hJRlQ7CisJd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfNCwgcmVnNCk7CisKKwlyZWc1ICY9IH5XTTg5OTNfRkxMX0NMS19SRUZfRElWX01BU0s7CisJcmVnNSB8PSBmbGxfZGl2LmZsbF9jbGtfcmVmX2RpdiA8PCBXTTg5OTNfRkxMX0NMS19SRUZfRElWX1NISUZUOworCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzUsIHJlZzUpOworCisJLyogRW5hYmxlIHRoZSBGTEwgKi8KKwl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxIHwgV004OTkzX0ZMTF9FTkEpOworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRkxMIGVuYWJsZWQgYXQgJWRIei0+JWRIelxuIiwgRnJlZiwgRm91dCk7CisKKwl3bTg5OTMtPmZsbF9mcmVmID0gRnJlZjsKKwl3bTg5OTMtPmZsbF9mb3V0ID0gRm91dDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbmZpZ3VyZV9jbG9jayhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODk5M19wcml2ICp3bTg5OTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCByZWc7CisKKwkvKiBUaGlzIHNob3VsZCBiZSBkb25lIG9uIGluaXQoKSBmb3IgYnlwYXNzIHBhdGhzICovCisJc3dpdGNoICh3bTg5OTMtPnN5c2Nsa19zb3VyY2UpIHsKKwljYXNlIFdNODk5M19TWVNDTEtfTUNMSzoKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiVXNpbmcgJWRIeiBNQ0xLXG4iLCB3bTg5OTMtPm1jbGtfcmF0ZSk7CisKKwkJcmVnID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18yKTsKKwkJcmVnICY9IH4oV004OTkzX01DTEtfRElWIHwgV004OTkzX1NZU0NMS19TUkMpOworCQlpZiAod204OTkzLT5tY2xrX3JhdGUgPiAxMzUwMDAwMCkgeworCQkJcmVnIHw9IFdNODk5M19NQ0xLX0RJVjsKKwkJCXdtODk5My0+c3lzY2xrX3JhdGUgPSB3bTg5OTMtPm1jbGtfcmF0ZSAvIDI7CisJCX0gZWxzZSB7CisJCQlyZWcgJj0gfldNODk5M19NQ0xLX0RJVjsKKwkJCXdtODk5My0+c3lzY2xrX3JhdGUgPSB3bTg5OTMtPm1jbGtfcmF0ZTsKKwkJfQorCQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19DTE9DS0lOR18yLCByZWcpOworCQlicmVhazsKKworCWNhc2UgV004OTkzX1NZU0NMS19GTEw6CisJCWRldl9kYmcoY29kZWMtPmRldiwgIlVzaW5nICVkSHogRkxMIGNsb2NrXG4iLAorCQkJd204OTkzLT5mbGxfZm91dCk7CisKKwkJcmVnID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18yKTsKKwkJcmVnIHw9IFdNODk5M19TWVNDTEtfU1JDOworCQlpZiAod204OTkzLT5mbGxfZm91dCA+IDEzNTAwMDAwKSB7CisJCQlyZWcgfD0gV004OTkzX01DTEtfRElWOworCQkJd204OTkzLT5zeXNjbGtfcmF0ZSA9IHdtODk5My0+ZmxsX2ZvdXQgLyAyOworCQl9IGVsc2UgeworCQkJcmVnICY9IH5XTTg5OTNfTUNMS19ESVY7CisJCQl3bTg5OTMtPnN5c2Nsa19yYXRlID0gd204OTkzLT5mbGxfZm91dDsKKwkJfQorCQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19DTE9DS0lOR18yLCByZWcpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlN5c3RlbSBjbG9jayBub3QgY29uZmlndXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIkNMS19TWVMgaXMgJWRIelxuIiwgd204OTkzLT5zeXNjbGtfcmF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHNpZGV0b25lX3RsdiwgLTM2MDAsIDMwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZHJjX2NvbXBfdGhyZWFzaCwgLTQ1MDAsIDc1LCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkcmNfY29tcF9hbXAsIC0yMjUwLCA3NSwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZHJjX21pbl90bHYsIC0xODAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkcmNfbWF4X3RsdltdID0geworCVRMVl9EQl9SQU5HRV9IRUFEKDQpLAorCTAsIDIsIFRMVl9EQl9TQ0FMRV9JVEVNKDEyMDAsIDYwMCwgMCksCisJMywgMywgVExWX0RCX1NDQUxFX0lURU0oMzYwMCwgMCwgMCksCit9Oworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRyY19xcl90bHYsIDEyMDAsIDYwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZHJjX3N0YXJ0dXBfdGx2LCAtMTgwMCwgMzAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShlcV90bHYsIC0xMjAwLCAxMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRpZ2l0YWxfdGx2LCAtNzIwMCwgNzUsIDEpOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRhY19ib29zdF90bHYsIDAsIDYwMCwgMCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkYWNfZGVlbXBoX3RleHRbXSA9IHsKKwkiTm9uZSIsCisJIjMya0h6IiwKKwkiNDQuMWtIeiIsCisJIjQ4a0h6IiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGFjX2RlZW1waCA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5M19EQUNfQ1RSTCwgNCwgNCwgZGFjX2RlZW1waF90ZXh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFkY19ocGZfdGV4dFtdID0geworCSJIaS1GaSIsCisJIlZvaWNlIDEiLAorCSJWb2ljZSAyIiwKKwkiVm9pY2UgMyIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFkY19ocGYgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTNfQURDX0NUUkwsIDUsIDQsIGFkY19ocGZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkcmNfcGF0aF90ZXh0W10gPSB7CisJIkFEQyIsCisJIkRBQyIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZHJjX3BhdGggPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTNfRFJDX0NPTlRST0xfMSwgMTQsIDIsIGRyY19wYXRoX3RleHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqZHJjX3IwX3RleHRbXSA9IHsKKwkiMSIsCisJIjEvMiIsCisJIjEvNCIsCisJIjEvOCIsCisJIjEvMTYiLAorCSIwIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZHJjX3IwID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTkzX0RSQ19DT05UUk9MXzMsIDgsIDYsIGRyY19yMF90ZXh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRyY19yMV90ZXh0W10gPSB7CisJIjEiLAorCSIxLzIiLAorCSIxLzQiLAorCSIxLzgiLAorCSIwIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZHJjX3IxID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTkzX0RSQ19DT05UUk9MXzQsIDEzLCA1LCBkcmNfcjFfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkcmNfYXR0YWNrX3RleHRbXSA9IHsKKwkiUmVzZXJ2ZWQiLAorCSIxODF1cyIsCisJIjM2M3VzIiwKKwkiNzI2dXMiLAorCSIxLjQ1bXMiLAorCSIyLjltcyIsCisJIjUuOG1zIiwKKwkiMTEuNm1zIiwKKwkiMjMuMm1zIiwKKwkiNDYuNG1zIiwKKwkiOTIuOG1zIiwKKwkiMTg1LjZtcyIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRyY19hdHRhY2sgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTNfRFJDX0NPTlRST0xfMiwgMTIsIDEyLCBkcmNfYXR0YWNrX3RleHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqZHJjX2RlY2F5X3RleHRbXSA9IHsKKwkiMTg2bXMiLAorCSIzNzJtcyIsCisJIjc0M21zIiwKKwkiMS40OXMiLAorCSIyLjk3bXMiLAorCSI1Ljk0bXMiLAorCSIxMS44OW1zIiwKKwkiMjMuNzhtcyIsCisJIjQ3LjU2bXMiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkcmNfZGVjYXkgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTNfRFJDX0NPTlRST0xfMiwgOCwgOSwgZHJjX2RlY2F5X3RleHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqZHJjX2ZmX3RleHRbXSA9IHsKKwkiNSBzYW1wbGVzIiwKKwkiOSBzYW1wbGVzIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZHJjX2ZmID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTkzX0RSQ19DT05UUk9MXzMsIDcsIDIsIGRyY19mZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRyY19xcl9yYXRlX3RleHRbXSA9IHsKKwkiMC43MjVtcyIsCisJIjEuNDVtcyIsCisJIjUuOG1zIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZHJjX3FyX3JhdGUgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTNfRFJDX0NPTlRST0xfMywgMCwgMywgZHJjX3FyX3JhdGVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkcmNfc21vb3RoX3RleHRbXSA9IHsKKwkiTG93IiwKKwkiTWVkaXVtIiwKKwkiSGlnaCIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRyY19zbW9vdGggPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTNfRFJDX0NPTlRST0xfMSwgNCwgMywgZHJjX3Ntb290aF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5M19zbmRfY29udHJvbHNbXSA9IHsKK1NPQ19ET1VCTEVfVExWKCJEaWdpdGFsIFNpZGV0b25lIFZvbHVtZSIsIFdNODk5M19ESUdJVEFMX1NJREVfVE9ORSwKKwkgICAgICAgNSwgOSwgMTIsIDAsIHNpZGV0b25lX3RsdiksCisKK1NPQ19TSU5HTEUoIkRSQyBTd2l0Y2giLCBXTTg5OTNfRFJDX0NPTlRST0xfMSwgMTUsIDEsIDApLAorU09DX0VOVU0oIkRSQyBQYXRoIiwgZHJjX3BhdGgpLAorU09DX1NJTkdMRV9UTFYoIkRSQyBDb21wcmVzc29yIFRocmVhc2hvbGQgVm9sdW1lIiwgV004OTkzX0RSQ19DT05UUk9MXzIsCisJICAgICAgIDIsIDYwLCAxLCBkcmNfY29tcF90aHJlYXNoKSwKK1NPQ19TSU5HTEVfVExWKCJEUkMgQ29tcHJlc3NvciBBbXBsaXR1ZGUgVm9sdW1lIiwgV004OTkzX0RSQ19DT05UUk9MXzMsCisJICAgICAgIDExLCAzMCwgMSwgZHJjX2NvbXBfYW1wKSwKK1NPQ19FTlVNKCJEUkMgUjAiLCBkcmNfcjApLAorU09DX0VOVU0oIkRSQyBSMSIsIGRyY19yMSksCitTT0NfU0lOR0xFX1RMVigiRFJDIE1pbmltdW0gVm9sdW1lIiwgV004OTkzX0RSQ19DT05UUk9MXzEsIDIsIDMsIDEsCisJICAgICAgIGRyY19taW5fdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJEUkMgTWF4aW11bSBWb2x1bWUiLCBXTTg5OTNfRFJDX0NPTlRST0xfMSwgMCwgMywgMCwKKwkgICAgICAgZHJjX21heF90bHYpLAorU09DX0VOVU0oIkRSQyBBdHRhY2sgUmF0ZSIsIGRyY19hdHRhY2spLAorU09DX0VOVU0oIkRSQyBEZWNheSBSYXRlIiwgZHJjX2RlY2F5KSwKK1NPQ19FTlVNKCJEUkMgRkYgRGVsYXkiLCBkcmNfZmYpLAorU09DX1NJTkdMRSgiRFJDIEFudGktY2xpcCBTd2l0Y2giLCBXTTg5OTNfRFJDX0NPTlRST0xfMSwgOSwgMSwgMCksCitTT0NfU0lOR0xFKCJEUkMgUXVpY2sgUmVsZWFzZSBTd2l0Y2giLCBXTTg5OTNfRFJDX0NPTlRST0xfMSwgMTAsIDEsIDApLAorU09DX1NJTkdMRV9UTFYoIkRSQyBRdWljayBSZWxlYXNlIFZvbHVtZSIsIFdNODk5M19EUkNfQ09OVFJPTF8zLCAyLCAzLCAwLAorCSAgICAgICBkcmNfcXJfdGx2KSwKK1NPQ19FTlVNKCJEUkMgUXVpY2sgUmVsZWFzZSBSYXRlIiwgZHJjX3FyX3JhdGUpLAorU09DX1NJTkdMRSgiRFJDIFNtb290aGluZyBTd2l0Y2giLCBXTTg5OTNfRFJDX0NPTlRST0xfMSwgMTEsIDEsIDApLAorU09DX1NJTkdMRSgiRFJDIFNtb290aGluZyBIeXN0ZXJlc2lzIFN3aXRjaCIsIFdNODk5M19EUkNfQ09OVFJPTF8xLCA4LCAxLCAwKSwKK1NPQ19FTlVNKCJEUkMgU21vb3RoaW5nIEh5c3RlcmVzaXMgVGhyZWFzaG9sZCIsIGRyY19zbW9vdGgpLAorU09DX1NJTkdMRV9UTFYoIkRSQyBTdGFydHVwIFZvbHVtZSIsIFdNODk5M19EUkNfQ09OVFJPTF80LCA4LCAxOCwgMCwKKwkgICAgICAgZHJjX3N0YXJ0dXBfdGx2KSwKKworU09DX1NJTkdMRSgiRVEgU3dpdGNoIiwgV004OTkzX0VRMSwgMCwgMSwgMCksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkNhcHR1cmUgVm9sdW1lIiwgV004OTkzX0xFRlRfQURDX0RJR0lUQUxfVk9MVU1FLAorCQkgV004OTkzX1JJR0hUX0FEQ19ESUdJVEFMX1ZPTFVNRSwgMSwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19TSU5HTEUoIkFEQyBIaWdoIFBhc3MgRmlsdGVyIFN3aXRjaCIsIFdNODk5M19BRENfQ1RSTCwgOCwgMSwgMCksCitTT0NfRU5VTSgiQURDIEhpZ2ggUGFzcyBGaWx0ZXIgTW9kZSIsIGFkY19ocGYpLAorCitTT0NfRE9VQkxFX1JfVExWKCJQbGF5YmFjayBWb2x1bWUiLCBXTTg5OTNfTEVGVF9EQUNfRElHSVRBTF9WT0xVTUUsCisJCSBXTTg5OTNfUklHSFRfREFDX0RJR0lUQUxfVk9MVU1FLCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorU09DX1NJTkdMRV9UTFYoIlBsYXliYWNrIEJvb3N0IFZvbHVtZSIsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMiwgMTAsIDMsIDAsCisJICAgICAgIGRhY19ib29zdF90bHYpLAorU09DX0VOVU0oIkRBQyBEZWVtcGhhc2lzIiwgZGFjX2RlZW1waCksCisKK1NPQ19TSU5HTEVfVExWKCJTUEtMIERBQyBWb2x1bWUiLCBXTTg5OTNfU1BLTUlYTF9BVFRFTlVBVElPTiwKKwkgICAgICAgMiwgMSwgMSwgd21faHVic19zcGttaXhfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIlNQS1IgREFDIFZvbHVtZSIsIFdNODk5M19TUEtNSVhSX0FUVEVOVUFUSU9OLAorCSAgICAgICAyLCAxLCAxLCB3bV9odWJzX3Nwa21peF90bHYpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk5M19lcV9jb250cm9sc1tdID0geworU09DX1NJTkdMRV9UTFYoIkVRMSBWb2x1bWUiLCBXTTg5OTNfRVEyLCAwLCAyNCwgMCwgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJFUTIgVm9sdW1lIiwgV004OTkzX0VRMywgMCwgMjQsIDAsIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRVEzIFZvbHVtZSIsIFdNODk5M19FUTQsIDAsIDI0LCAwLCBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkVRNCBWb2x1bWUiLCBXTTg5OTNfRVE1LCAwLCAyNCwgMCwgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJFUTUgVm9sdW1lIiwgV004OTkzX0VRNiwgMCwgMjQsIDAsIGVxX3RsdiksCit9OworCitzdGF0aWMgaW50IGNsa19zeXNfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQlyZXR1cm4gY29uZmlndXJlX2Nsb2NrKGNvZGVjKTsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdoZW4gdXNlZCB3aXRoIERBQyBvdXRwdXRzIG9ubHkgdGhlIFdNODk5MyBjaGFyZ2UgcHVtcCBzdXBwb3J0cworICogb3BlcmF0aW9uIGluIGNsYXNzIFcgbW9kZSwgcHJvdmlkaW5nIHZlcnkgbG93IHBvd2VyIGNvbnN1bXB0aW9uCisgKiB3aGVuIHVzZWQgd2l0aCBkaWdpdGFsIHNvdXJjZXMuICBFbmFibGUgYW5kIGRpc2FibGUgdGhpcyBtb2RlCisgKiBhdXRvbWF0aWNhbGx5IGRlcGVuZGluZyBvbiB0aGUgbWl4ZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBDdXJyZW50bHkgdGhlIG9ubHkgc3VwcG9ydGVkIHBhdGhzIGFyZSB0aGUgZGlyZWN0IERBQy0+aGVhZHBob25lCisgKiBwYXRocyAod2hpY2ggcHJvdmlkZSBtaW5pbXVtIHBvd2VyIGNvbnN1bXB0aW9uIGFueXdheSkuCisgKi8KK3N0YXRpYyBpbnQgY2xhc3Nfd19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHdpZGdldC0+Y29kZWM7CisJc3RydWN0IHdtODk5M19wcml2ICp3bTg5OTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisKKwkvKiBUdXJuIGl0IG9mZiBpZiB3ZSdyZSB1c2luZyB0aGUgbWFpbiBvdXRwdXQgbWl4ZXIgKi8KKwlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPT0gMCkgeworCQlpZiAod204OTkzLT5jbGFzc193X3VzZXJzID09IDApIHsKKwkJCWRldl9kYmcoY29kZWMtPmRldiwgIkRpc2FibGluZyBDbGFzcyBXXG4iKTsKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19DTEFTU19XXzAsCisJCQkJCSAgICBXTTg5OTNfQ1BfRFlOX0ZSRVEgfAorCQkJCQkgICAgV004OTkzX0NQX0RZTl9WLAorCQkJCQkgICAgMCk7CisJCX0KKwkJd204OTkzLT5jbGFzc193X3VzZXJzKys7CisJfQorCisJLyogSW1wbGVtZW50IHRoZSBjaGFuZ2UgKi8KKwlyZXQgPSBzbmRfc29jX2RhcG1fcHV0X2VudW1fZG91YmxlKGtjb250cm9sLCB1Y29udHJvbCk7CisKKwkvKiBFbmFibGUgaXQgaWYgd2UncmUgdXNpbmcgdGhlIGRpcmVjdCBEQUMgcGF0aCAqLworCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9PSAxKSB7CisJCWlmICh3bTg5OTMtPmNsYXNzX3dfdXNlcnMgPT0gMSkgeworCQkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiRW5hYmxpbmcgQ2xhc3MgV1xuIik7CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQ0xBU1NfV18wLAorCQkJCQkgICAgV004OTkzX0NQX0RZTl9GUkVRIHwKKwkJCQkJICAgIFdNODk5M19DUF9EWU5fViwKKwkJCQkJICAgIFdNODk5M19DUF9EWU5fRlJFUSB8CisJCQkJCSAgICBXTTg5OTNfQ1BfRFlOX1YpOworCQl9CisJCXdtODk5My0+Y2xhc3Nfd191c2Vycy0tOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIkluZGlyZWN0IERBQyB1c2UgY291bnQgbm93ICVkXG4iLAorCQl3bTg5OTMtPmNsYXNzX3dfdXNlcnMpOworCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBTT0NfREFQTV9FTlVNX1coeG5hbWUsIHhlbnVtKSBcCit7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCBcCisJLmluZm8gPSBzbmRfc29jX2luZm9fZW51bV9kb3VibGUsIFwKKwkuZ2V0ID0gc25kX3NvY19kYXBtX2dldF9lbnVtX2RvdWJsZSwgXAorCS5wdXQgPSBjbGFzc193X3B1dCwgXAorCS5wcml2YXRlX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpJnhlbnVtIH0KKworc3RhdGljIGNvbnN0IGNoYXIgKmhwX211eF90ZXh0W10gPSB7CisJIk1peGVyIiwKKwkiREFDIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaHBsX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTNfT1VUUFVUX01JWEVSMSwgOCwgMiwgaHBfbXV4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaHBsX211eCA9CisJU09DX0RBUE1fRU5VTV9XKCJMZWZ0IEhlYWRwaG9uZSBNdXgiLCBocGxfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaHByX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTNfT1VUUFVUX01JWEVSMiwgOCwgMiwgaHBfbXV4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaHByX211eCA9CisJU09DX0RBUE1fRU5VTV9XKCJSaWdodCBIZWFkcGhvbmUgTXV4IiwgaHByX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGVmdF9zcGVha2VyX21peGVyW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIklucHV0IFN3aXRjaCIsIFdNODk5M19TUEVBS0VSX01JWEVSLCA3LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiSU4xTFAgU3dpdGNoIiwgV004OTkzX1NQRUFLRVJfTUlYRVIsIDUsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJPdXRwdXQgU3dpdGNoIiwgV004OTkzX1NQRUFLRVJfTUlYRVIsIDMsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJEQUMgU3dpdGNoIiwgV004OTkzX1NQRUFLRVJfTUlYRVIsIDYsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJpZ2h0X3NwZWFrZXJfbWl4ZXJbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiSW5wdXQgU3dpdGNoIiwgV004OTkzX1NQRUFLRVJfTUlYRVIsIDYsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJTjFSUCBTd2l0Y2giLCBXTTg5OTNfU1BFQUtFUl9NSVhFUiwgNCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIk91dHB1dCBTd2l0Y2giLCBXTTg5OTNfU1BFQUtFUl9NSVhFUiwgMiwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkRBQyBTd2l0Y2giLCBXTTg5OTNfU1BFQUtFUl9NSVhFUiwgMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqYWlmX3RleHRbXSA9IHsKKwkiTGVmdCIsICJSaWdodCIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmb3V0bF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTkzX0FVRElPX0lOVEVSRkFDRV8xLCAxNSwgMiwgYWlmX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmb3V0bF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRk9VVEwgTXV4IiwgYWlmb3V0bF9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWZvdXRyX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTNfQVVESU9fSU5URVJGQUNFXzEsIDE0LCAyLCBhaWZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWZvdXRyX211eCA9CisJU09DX0RBUE1fRU5VTSgiQUlGT1VUUiBNdXgiLCBhaWZvdXRyX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZmlubF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTkzX0FVRElPX0lOVEVSRkFDRV8yLCAxNSwgMiwgYWlmX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmaW5sX211eCA9CisJU09DX0RBUE1fRU5VTSgiQUlGSU5MIE11eCIsIGFpZmlubF9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWZpbnJfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5M19BVURJT19JTlRFUkZBQ0VfMiwgMTQsIDIsIGFpZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZmlucl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRklOUiBNdXgiLCBhaWZpbnJfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpzaWRldG9uZV90ZXh0W10gPSB7CisJIk5vbmUiLCAiTGVmdCIsICJSaWdodCIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc2lkZXRvbmVsX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTNfRElHSVRBTF9TSURFX1RPTkUsIDIsIDMsIHNpZGV0b25lX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc2lkZXRvbmVsX211eCA9CisJU09DX0RBUE1fRU5VTSgiTGVmdCBTaWRldG9uZSIsIHNpZGV0b25lbF9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBzaWRldG9uZXJfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5M19ESUdJVEFMX1NJREVfVE9ORSwgMCwgMywgc2lkZXRvbmVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzaWRldG9uZXJfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJSaWdodCBTaWRldG9uZSIsIHNpZGV0b25lcl9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5M19kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9TVVBQTFkoIkNMS19TWVMiLCBXTTg5OTNfQlVTX0NPTlRST0xfMSwgMSwgMCwgY2xrX3N5c19ldmVudCwKKwkJICAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIlRPQ0xLIiwgV004OTkzX0NMT0NLSU5HXzEsIDE0LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIkNMS19EU1AiLCBXTTg5OTNfQ0xPQ0tJTkdfMywgMCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9BREMoIkFEQ0wiLCBOVUxMLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8yLCAxLCAwKSwKK1NORF9TT0NfREFQTV9BREMoIkFEQ1IiLCBOVUxMLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8yLCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiQUlGT1VUTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWZvdXRsX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJBSUZPVVRSIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZm91dHJfbXV4KSwKKworU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRk9VVEwiLCAiQ2FwdHVyZSIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGT1VUUiIsICJDYXB0dXJlIiwgMSwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKworU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGSU5MIiwgIlBsYXliYWNrIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRklOUiIsICJQbGF5YmFjayIsIDEsIFNORF9TT0NfTk9QTSwgMCwgMCksCisKK1NORF9TT0NfREFQTV9NVVgoIkRBQ0wgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmaW5sX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJEQUNSIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZmlucl9tdXgpLAorCitTTkRfU09DX0RBUE1fTVVYKCJEQUNMIFNpZGV0b25lIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmc2lkZXRvbmVsX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJEQUNSIFNpZGV0b25lIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmc2lkZXRvbmVyX211eCksCisKK1NORF9TT0NfREFQTV9EQUMoIkRBQ0wiLCBOVUxMLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8zLCAxLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQ1IiLCBOVUxMLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8zLCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiTGVmdCBIZWFkcGhvbmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmaHBsX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJSaWdodCBIZWFkcGhvbmUgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmaHByX211eCksCisKK1NORF9TT0NfREFQTV9NSVhFUigiU1BLTCIsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzMsIDgsIDAsCisJCSAgIGxlZnRfc3BlYWtlcl9taXhlciwgQVJSQVlfU0laRShsZWZ0X3NwZWFrZXJfbWl4ZXIpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiU1BLUiIsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzMsIDksIDAsCisJCSAgIHJpZ2h0X3NwZWFrZXJfbWl4ZXIsIEFSUkFZX1NJWkUocmlnaHRfc3BlYWtlcl9taXhlcikpLAorCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSByb3V0ZXNbXSA9IHsKKwl7ICJBRENMIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiQURDTCIsIE5VTEwsICJDTEtfRFNQIiB9LAorCXsgIkFEQ1IiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJBRENSIiwgTlVMTCwgIkNMS19EU1AiIH0sCisKKwl7ICJBSUZPVVRMIE11eCIsICJMZWZ0IiwgIkFEQ0wiIH0sCisJeyAiQUlGT1VUTCBNdXgiLCAiUmlnaHQiLCAiQURDUiIgfSwKKwl7ICJBSUZPVVRSIE11eCIsICJMZWZ0IiwgIkFEQ0wiIH0sCisJeyAiQUlGT1VUUiBNdXgiLCAiUmlnaHQiLCAiQURDUiIgfSwKKworCXsgIkFJRk9VVEwiLCBOVUxMLCAiQUlGT1VUTCBNdXgiIH0sCisJeyAiQUlGT1VUUiIsIE5VTEwsICJBSUZPVVRSIE11eCIgfSwKKworCXsgIkRBQ0wgTXV4IiwgIkxlZnQiLCAiQUlGSU5MIiB9LAorCXsgIkRBQ0wgTXV4IiwgIlJpZ2h0IiwgIkFJRklOUiIgfSwKKwl7ICJEQUNSIE11eCIsICJMZWZ0IiwgIkFJRklOTCIgfSwKKwl7ICJEQUNSIE11eCIsICJSaWdodCIsICJBSUZJTlIiIH0sCisKKwl7ICJEQUNMIFNpZGV0b25lIiwgIkxlZnQiLCAiQURDTCIgfSwKKwl7ICJEQUNMIFNpZGV0b25lIiwgIlJpZ2h0IiwgIkFEQ1IiIH0sCisJeyAiREFDUiBTaWRldG9uZSIsICJMZWZ0IiwgIkFEQ0wiIH0sCisJeyAiREFDUiBTaWRldG9uZSIsICJSaWdodCIsICJBRENSIiB9LAorCisJeyAiREFDTCIsIE5VTEwsICJDTEtfU1lTIiB9LAorCXsgIkRBQ0wiLCBOVUxMLCAiQ0xLX0RTUCIgfSwKKwl7ICJEQUNMIiwgTlVMTCwgIkRBQ0wgTXV4IiB9LAorCXsgIkRBQ0wiLCBOVUxMLCAiREFDTCBTaWRldG9uZSIgfSwKKwl7ICJEQUNSIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiREFDUiIsIE5VTEwsICJDTEtfRFNQIiB9LAorCXsgIkRBQ1IiLCBOVUxMLCAiREFDUiBNdXgiIH0sCisJeyAiREFDUiIsIE5VTEwsICJEQUNSIFNpZGV0b25lIiB9LAorCisJeyAiTGVmdCBPdXRwdXQgTWl4ZXIiLCAiREFDIFN3aXRjaCIsICJEQUNMIiB9LAorCisJeyAiUmlnaHQgT3V0cHV0IE1peGVyIiwgIkRBQyBTd2l0Y2giLCAiREFDUiIgfSwKKworCXsgIkxlZnQgT3V0cHV0IFBHQSIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJeyAiUmlnaHQgT3V0cHV0IFBHQSIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJeyAiU1BLTCIsICJEQUMgU3dpdGNoIiwgIkRBQ0wiIH0sCisJeyAiU1BLTCIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJeyAiU1BLUiIsICJEQUMgU3dpdGNoIiwgIkRBQ1IiIH0sCisJeyAiU1BLUiIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJeyAiTGVmdCBIZWFkcGhvbmUgTXV4IiwgIkRBQyIsICJEQUNMIiB9LAorCXsgIlJpZ2h0IEhlYWRwaG9uZSBNdXgiLCAiREFDIiwgIkRBQ1IiIH0sCit9OworCitzdGF0aWMgaW50IHdtODk5M19zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXN0cnVjdCB3bTg5OTNfcHJpdiAqd204OTkzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQkvKiBWTUlEPTIqNDBrICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgIFdNODk5M19WTUlEX1NFTF9NQVNLLCAweDIpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkJCSAgICBXTTg5OTNfVFNIVVRfRU5BLCBXTTg5OTNfVFNIVVRfRU5BKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJLyogQnJpbmcgdXAgVk1JRCB3aXRoIGZhc3Qgc29mdCBzdGFydCAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0FOVElQT1AyLAorCQkJCQkgICAgV004OTkzX1NUQVJUVVBfQklBU19FTkEgfAorCQkJCQkgICAgV004OTkzX1ZNSURfQlVGX0VOQSB8CisJCQkJCSAgICBXTTg5OTNfVk1JRF9SQU1QX01BU0sgfAorCQkJCQkgICAgV004OTkzX0JJQVNfU1JDLAorCQkJCQkgICAgV004OTkzX1NUQVJUVVBfQklBU19FTkEgfAorCQkJCQkgICAgV004OTkzX1ZNSURfQlVGX0VOQSB8CisJCQkJCSAgICBXTTg5OTNfVk1JRF9SQU1QX01BU0sgfAorCQkJCQkgICAgV004OTkzX0JJQVNfU1JDKTsKKworCQkJLyogSWYgZWl0aGVyIGxpbmUgb3V0cHV0IGlzIHNpbmdsZSBlbmRlZCB3ZQorCQkJICogbmVlZCB0aGUgVk1JRCBidWZmZXIgKi8KKwkJCWlmICghd204OTkzLT5wZGF0YS5saW5lb3V0MV9kaWZmIHx8CisJCQkgICAgIXdtODk5My0+cGRhdGEubGluZW91dDJfZGlmZikKKwkJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQU5USVBPUDEsCisJCQkJCQkgV004OTkzX0xJTkVPVVRfVk1JRF9CVUZfRU5BLAorCQkJCQkJIFdNODk5M19MSU5FT1VUX1ZNSURfQlVGX0VOQSk7CisKKwkJCS8qIFZNSUQ9Mio0MGsgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJCSAgICBXTTg5OTNfVk1JRF9TRUxfTUFTSyB8CisJCQkJCSAgICBXTTg5OTNfQklBU19FTkEsCisJCQkJCSAgICBXTTg5OTNfQklBU19FTkEgfCAweDIpOworCQkJbXNsZWVwKDMyKTsKKworCQkJLyogU3dpdGNoIHRvIG5vcm1hbCBiaWFzICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQU5USVBPUDIsCisJCQkJCSAgICBXTTg5OTNfQklBU19TUkMgfAorCQkJCQkgICAgV004OTkzX1NUQVJUVVBfQklBU19FTkEsIDApOworCQl9CisKKwkJLyogVk1JRD0yKjI0MGsgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTkzX1ZNSURfU0VMX01BU0ssIDB4NCk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJCQkgICAgV004OTkzX1RTSFVUX0VOQSwgMCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQU5USVBPUDEsCisJCQkJICAgIFdNODk5M19MSU5FT1VUX1ZNSURfQlVGX0VOQSwgMCk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTkzX1ZNSURfU0VMX01BU0sgfCBXTTg5OTNfQklBU19FTkEsCisJCQkJICAgIDApOworCQlicmVhazsKKwl9CisKKwljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTkzX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCQkgICAgIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IHdtODk5M19wcml2ICp3bTg5OTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChjbGtfaWQpIHsKKwljYXNlIFdNODk5M19TWVNDTEtfTUNMSzoKKwkJd204OTkzLT5tY2xrX3JhdGUgPSBmcmVxOworCWNhc2UgV004OTkzX1NZU0NMS19GTEw6CisJCXdtODk5My0+c3lzY2xrX3NvdXJjZSA9IGNsa19pZDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTNfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODk5M19wcml2ICp3bTg5OTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBhaWYxID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMSk7CisJdW5zaWduZWQgaW50IGFpZjQgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV80KTsKKworCWFpZjEgJj0gfihXTTg5OTNfQkNMS19ESVIgfCBXTTg5OTNfQUlGX0JDTEtfSU5WIHwKKwkJICBXTTg5OTNfQUlGX0xSQ0xLX0lOViB8IFdNODk5M19BSUZfRk1UX01BU0spOworCWFpZjQgJj0gfldNODk5M19MUkNMS19ESVI7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQl3bTg5OTMtPm1hc3RlciA9IDA7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGTToKKwkJYWlmNCB8PSBXTTg5OTNfTFJDTEtfRElSOworCQl3bTg5OTMtPm1hc3RlciA9IDE7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzoKKwkJYWlmMSB8PSBXTTg5OTNfQkNMS19ESVI7CisJCXdtODk5My0+bWFzdGVyID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlhaWYxIHw9IFdNODk5M19CQ0xLX0RJUjsKKwkJYWlmNCB8PSBXTTg5OTNfTFJDTEtfRElSOworCQl3bTg5OTMtPm1hc3RlciA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlhaWYxIHw9IFdNODk5M19BSUZfTFJDTEtfSU5WOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWFpZjEgfD0gMHgxODsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWFpZjEgfD0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJYWlmMSB8PSAweDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCS8qIGZyYW1lIGludmVyc2lvbiBub3QgdmFsaWQgZm9yIERTUCBtb2RlcyAqLworCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJCWFpZjEgfD0gV004OTkzX0FJRl9CQ0xLX0lOVjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgorCQkJYWlmMSB8PSBXTTg5OTNfQUlGX0JDTEtfSU5WIHwgV004OTkzX0FJRl9MUkNMS19JTlY7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJCWFpZjEgfD0gV004OTkzX0FJRl9CQ0xLX0lOVjsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQkJYWlmMSB8PSBXTTg5OTNfQUlGX0xSQ0xLX0lOVjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzEsIGFpZjEpOworCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV80LCBhaWY0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5M19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTkzX3ByaXYgKndtODk5MyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCwgaSwgYmVzdCwgYmVzdF92YWwsIGN1cl92YWw7CisJdW5zaWduZWQgaW50IGNsb2NraW5nMSwgY2xvY2tpbmczLCBhaWYxLCBhaWY0OworCisJY2xvY2tpbmcxID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18xKTsKKwljbG9ja2luZzEgJj0gfldNODk5M19CQ0xLX0RJVl9NQVNLOworCisJY2xvY2tpbmczID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18zKTsKKwljbG9ja2luZzMgJj0gfihXTTg5OTNfQ0xLX1NZU19SQVRFX01BU0sgfCBXTTg5OTNfU0FNUExFX1JBVEVfTUFTSyk7CisKKwlhaWYxID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMSk7CisJYWlmMSAmPSB+V004OTkzX0FJRl9XTF9NQVNLOworCisJYWlmNCA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzQpOworCWFpZjQgJj0gfldNODk5M19MUkNMS19SQVRFX01BU0s7CisKKwkvKiBXaGF0IEJDTEsgZG8gd2UgbmVlZD8gKi8KKwl3bTg5OTMtPmZzID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwl3bTg5OTMtPmJjbGsgPSAyICogd204OTkzLT5mczsKKwlpZiAod204OTkzLT50ZG1fc2xvdHMpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ29uZmlndXJpbmcgZm9yICVkICVkIGJpdCBURE0gc2xvdHNcbiIsCisJCQl3bTg5OTMtPnRkbV9zbG90cywgd204OTkzLT50ZG1fd2lkdGgpOworCQl3bTg5OTMtPmJjbGsgKj0gd204OTkzLT50ZG1fd2lkdGggKiB3bTg5OTMtPnRkbV9zbG90czsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQkJd204OTkzLT5iY2xrICo9IDE2OworCQkJYnJlYWs7CisJCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQkJd204OTkzLT5iY2xrICo9IDIwOworCQkJYWlmMSB8PSAweDg7CisJCQlicmVhazsKKwkJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJCXdtODk5My0+YmNsayAqPSAyNDsKKwkJCWFpZjEgfD0gMHgxMDsKKwkJCWJyZWFrOworCQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQkJd204OTkzLT5iY2xrICo9IDMyOworCQkJYWlmMSB8PSAweDE4OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIlRhcmdldCBCQ0xLIGlzICVkSHpcbiIsIHdtODk5My0+YmNsayk7CisKKwlyZXQgPSBjb25maWd1cmVfY2xvY2soY29kZWMpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNlbGVjdCBuZWFyZXN0IENMS19TWVNfUkFURSAqLworCWJlc3QgPSAwOworCWJlc3RfdmFsID0gYWJzKCh3bTg5OTMtPnN5c2Nsa19yYXRlIC8gY2xrX3N5c19yYXRlc1swXS5yYXRpbykKKwkJICAgICAgIC0gd204OTkzLT5mcyk7CisJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUoY2xrX3N5c19yYXRlcyk7IGkrKykgeworCQljdXJfdmFsID0gYWJzKCh3bTg5OTMtPnN5c2Nsa19yYXRlIC8KKwkJCSAgICAgICBjbGtfc3lzX3JhdGVzW2ldLnJhdGlvKSAtIHdtODk5My0+ZnMpOzsKKwkJaWYgKGN1cl92YWwgPCBiZXN0X3ZhbCkgeworCQkJYmVzdCA9IGk7CisJCQliZXN0X3ZhbCA9IGN1cl92YWw7CisJCX0KKwl9CisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU2VsZWN0ZWQgQ0xLX1NZU19SQVRJTyBvZiAlZFxuIiwKKwkJY2xrX3N5c19yYXRlc1tiZXN0XS5yYXRpbyk7CisJY2xvY2tpbmczIHw9IChjbGtfc3lzX3JhdGVzW2Jlc3RdLmNsa19zeXNfcmF0ZQorCQkgICAgICA8PCBXTTg5OTNfQ0xLX1NZU19SQVRFX1NISUZUKTsKKworCS8qIFNBTVBMRV9SQVRFICovCisJYmVzdCA9IDA7CisJYmVzdF92YWwgPSBhYnMod204OTkzLT5mcyAtIHNhbXBsZV9yYXRlc1swXS5yYXRlKTsKKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShzYW1wbGVfcmF0ZXMpOyBpKyspIHsKKwkJLyogQ2xvc2VzdCBtYXRjaCAqLworCQljdXJfdmFsID0gYWJzKHdtODk5My0+ZnMgLSBzYW1wbGVfcmF0ZXNbaV0ucmF0ZSk7CisJCWlmIChjdXJfdmFsIDwgYmVzdF92YWwpIHsKKwkJCWJlc3QgPSBpOworCQkJYmVzdF92YWwgPSBjdXJfdmFsOworCQl9CisJfQorCWRldl9kYmcoY29kZWMtPmRldiwgIlNlbGVjdGVkIFNBTVBMRV9SQVRFIG9mICVkSHpcbiIsCisJCXNhbXBsZV9yYXRlc1tiZXN0XS5yYXRlKTsKKwljbG9ja2luZzMgfD0gKHNhbXBsZV9yYXRlc1tiZXN0XS5zYW1wbGVfcmF0ZQorCQkgICAgICA8PCBXTTg5OTNfU0FNUExFX1JBVEVfU0hJRlQpOworCisJLyogQkNMS19ESVYgKi8KKwliZXN0ID0gMDsKKwliZXN0X3ZhbCA9IElOVF9NQVg7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmNsa19kaXZzKTsgaSsrKSB7CisJCWN1cl92YWwgPSAoKHdtODk5My0+c3lzY2xrX3JhdGUgKiAxMCkgLyBiY2xrX2RpdnNbaV0uZGl2KQorCQkJLSB3bTg5OTMtPmJjbGs7CisJCWlmIChjdXJfdmFsIDwgMCkgLyogVGFibGUgaXMgc29ydGVkICovCisJCQlicmVhazsKKwkJaWYgKGN1cl92YWwgPCBiZXN0X3ZhbCkgeworCQkJYmVzdCA9IGk7CisJCQliZXN0X3ZhbCA9IGN1cl92YWw7CisJCX0KKwl9CisJd204OTkzLT5iY2xrID0gKHdtODk5My0+c3lzY2xrX3JhdGUgKiAxMCkgLyBiY2xrX2RpdnNbYmVzdF0uZGl2OworCWRldl9kYmcoY29kZWMtPmRldiwgIlNlbGVjdGVkIEJDTEtfRElWIG9mICVkIGZvciAlZEh6IEJDTEtcbiIsCisJCWJjbGtfZGl2c1tiZXN0XS5kaXYsIHdtODk5My0+YmNsayk7CisJY2xvY2tpbmcxIHw9IGJjbGtfZGl2c1tiZXN0XS5iY2xrX2RpdiA8PCBXTTg5OTNfQkNMS19ESVZfU0hJRlQ7CisKKwkvKiBMUkNMSyBpcyBhIHNpbXBsZSBmcmFjdGlvbiBvZiBCQ0xLICovCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTFJDTEtfUkFURSBpcyAlZFxuIiwgd204OTkzLT5iY2xrIC8gd204OTkzLT5mcyk7CisJYWlmNCB8PSB3bTg5OTMtPmJjbGsgLyB3bTg5OTMtPmZzOworCisJd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMSwgY2xvY2tpbmcxKTsKKwl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19DTE9DS0lOR18zLCBjbG9ja2luZzMpOworCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xLCBhaWYxKTsKKwl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCwgYWlmNCk7CisKKwkvKiBSZVR1bmUgTW9iaWxlPyAqLworCWlmICh3bTg5OTMtPnBkYXRhLm51bV9yZXR1bmVfY29uZmlncykgeworCQl1MTYgZXExID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19FUTEpOworCQlzdHJ1Y3Qgd204OTkzX3JldHVuZV9tb2JpbGVfc2V0dGluZyAqczsKKworCQliZXN0ID0gMDsKKwkJYmVzdF92YWwgPSBhYnMod204OTkzLT5wZGF0YS5yZXR1bmVfY29uZmlnc1swXS5yYXRlCisJCQkgICAgICAgLSB3bTg5OTMtPmZzKTsKKwkJZm9yIChpID0gMDsgaSA8IHdtODk5My0+cGRhdGEubnVtX3JldHVuZV9jb25maWdzOyBpKyspIHsKKwkJCWN1cl92YWwgPSBhYnMod204OTkzLT5wZGF0YS5yZXR1bmVfY29uZmlnc1tpXS5yYXRlCisJCQkJICAgICAgLSB3bTg5OTMtPmZzKTsKKwkJCWlmIChjdXJfdmFsIDwgYmVzdF92YWwpIHsKKwkJCQliZXN0X3ZhbCA9IGN1cl92YWw7CisJCQkJYmVzdCA9IGk7CisJCQl9CisJCX0KKwkJcyA9ICZ3bTg5OTMtPnBkYXRhLnJldHVuZV9jb25maWdzW2Jlc3RdOworCisJCWRldl9kYmcoY29kZWMtPmRldiwgIlJlVHVuZSBNb2JpbGUgJXMgdHVuZWQgZm9yICVkSHpcbiIsCisJCQlzLT5uYW1lLCBzLT5yYXRlKTsKKworCQkvKiBEaXNhYmxlIEVRIHdoaWxlIHdlIHJlY29uZmlndXJlICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19FUTEsIFdNODk5M19FUV9FTkEsIDApOworCisJCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKHMtPmNvbmZpZyk7IGkrKykKKwkJCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0VRMSArIGksIHMtPmNvbmZpZ1tpXSk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0VRMSwgV004OTkzX0VRX0VOQSwgZXExKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTNfZGlnaXRhbF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0RBQ19DVFJMKTsKKworCWlmIChtdXRlKQorCQlyZWcgfD0gV004OTkzX0RBQ19NVVRFOworCWVsc2UKKwkJcmVnICY9IH5XTTg5OTNfREFDX01VVEU7CisKKwl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19EQUNfQ1RSTCwgcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5M19zZXRfdGRtX3Nsb3Qoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCB0eF9tYXNrLAorCQkJICAgICAgIHVuc2lnbmVkIGludCByeF9tYXNrLCBpbnQgc2xvdHMsIGludCBzbG90X3dpZHRoKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODk5M19wcml2ICp3bTg5OTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBhaWYxID0gMDsKKwlpbnQgYWlmMiA9IDA7CisKKwkvKiBEb24ndCBuZWVkIHRvIHZhbGlkYXRlIGFueXRoaW5nIGlmIHdlJ3JlIHR1cm5pbmcgb2ZmIFRETSAqLworCWlmIChzbG90cyA9PSAwKSB7CisJCXdtODk5My0+dGRtX3Nsb3RzID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogTm90ZSB0aGF0IHdlIGFsbG93IGNvbmZpZ3VyYXRpb25zIHdlIGNhbid0IGhhbmRsZSBvdXJzZWx2ZXMgLSAKKwkgKiBmb3IgZXhhbXBsZSwgd2UgY2FuIGdlbmVyYXRlIGNsb2NrcyBmb3Igc2xvdHMgMiBhbmQgdXAgZXZlbiBpZgorCSAqIHdlIGNhbid0IHVzZSB0aG9zZSBzbG90cyBvdXJzZWx2ZXMuCisJICovCisJYWlmMSB8PSBXTTg5OTNfQUlGQURDX1RETTsKKwlhaWYyIHw9IFdNODk5M19BSUZEQUNfVERNOworCisJc3dpdGNoIChyeF9tYXNrKSB7CisJY2FzZSAzOgorCQlicmVhazsKKwljYXNlIDB4YzoKKwkJYWlmMSB8PSBXTTg5OTNfQUlGQURDX1RETV9DSEFOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKworCXN3aXRjaCAodHhfbWFzaykgeworCWNhc2UgMzoKKwkJYnJlYWs7CisJY2FzZSAweGM6CisJCWFpZjIgfD0gV004OTkzX0FJRkRBQ19URE1fQ0hBTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCitvdXQ6CisJd204OTkzLT50ZG1fd2lkdGggPSBzbG90X3dpZHRoOworCXdtODk5My0+dGRtX3Nsb3RzID0gc2xvdHMgLyAyOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xLAorCQkJICAgIFdNODk5M19BSUZBRENfVERNIHwgV004OTkzX0FJRkFEQ19URE1fQ0hBTiwgYWlmMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8yLAorCQkJICAgIFdNODk5M19BSUZEQUNfVERNIHwgV004OTkzX0FJRkRBQ19URE1fQ0hBTiwgYWlmMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTkzX29wcyA9IHsKKwkuc2V0X3N5c2NsayA9IHdtODk5M19zZXRfc3lzY2xrLAorCS5zZXRfZm10ID0gd204OTkzX3NldF9kYWlfZm10LAorCS5od19wYXJhbXMgPSB3bTg5OTNfaHdfcGFyYW1zLAorCS5kaWdpdGFsX211dGUgPSB3bTg5OTNfZGlnaXRhbF9tdXRlLAorCS5zZXRfcGxsID0gd204OTkzX3NldF9mbGwsCisJLnNldF90ZG1fc2xvdCA9IHdtODk5M19zZXRfdGRtX3Nsb3QsCit9OworCisjZGVmaW5lIFdNODk5M19SQVRFUyBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwCisKKyNkZWZpbmUgV004OTkzX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHxcCisJCQlTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHxcCisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworc3RydWN0IHNuZF9zb2NfZGFpIHdtODk5M19kYWkgPSB7CisJLm5hbWUgPSAiV004OTkzIiwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gV004OTkzX1JBVEVTLAorCQkuZm9ybWF0cyA9IFdNODk5M19GT1JNQVRTLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCSAuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCSAuY2hhbm5lbHNfbWluID0gMSwKKwkJIC5jaGFubmVsc19tYXggPSAyLAorCQkgLnJhdGVzID0gV004OTkzX1JBVEVTLAorCQkgLmZvcm1hdHMgPSBXTTg5OTNfRk9STUFUUywKKwkgfSwKKwkub3BzID0gJndtODk5M19vcHMsCisJLnN5bW1ldHJpY19yYXRlcyA9IDEsCit9OworRVhQT1JUX1NZTUJPTF9HUEwod204OTkzX2RhaSk7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204OTkzX2NvZGVjOworCitzdGF0aWMgaW50IHdtODk5M19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCB3bTg5OTNfcHJpdiAqd204OTkzOworCWludCByZXQgPSAwOworCisJaWYgKCF3bTg5OTNfY29kZWMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSTJDIGRldmljZSBub3QgeWV0IHByb2JlZFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg5OTNfY29kZWM7CisJY29kZWMgPSB3bTg5OTNfY29kZWM7CisJd204OTkzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODk5M19zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUod204OTkzX3NuZF9jb250cm9scykpOworCWlmICh3bTg5OTMtPnBkYXRhLm51bV9yZXR1bmVfY29uZmlncyAhPSAwKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIlVzaW5nIFJlVHVuZSBNb2JpbGVcbiIpOworCX0gZWxzZSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIk5vIFJlVHVuZSBNb2JpbGUsIHVzaW5nIG5vcm1hbCBFUVxuIik7CisJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5OTNfZXFfY29udHJvbHMsCisJCQkJICAgICBBUlJBWV9TSVpFKHdtODk5M19lcV9jb250cm9scykpOworCX0KKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODk5M19kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODk5M19kYXBtX3dpZGdldHMpKTsKKwl3bV9odWJzX2FkZF9hbmFsb2d1ZV9jb250cm9scyhjb2RlYyk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgcm91dGVzLCBBUlJBWV9TSVpFKHJvdXRlcykpOworCXdtX2h1YnNfYWRkX2FuYWxvZ3VlX3JvdXRlcyhjb2RlYywgd204OTkzLT5wZGF0YS5saW5lb3V0MV9kaWZmLAorCQkJCSAgICB3bTg5OTMtPnBkYXRhLmxpbmVvdXQyX2RpZmYpOworCisJc25kX3NvY19kYXBtX25ld193aWRnZXRzKGNvZGVjKTsKKworCXJldCA9IHNuZF9zb2NfaW5pdF9jYXJkKHNvY2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOworCQlnb3RvIGNhcmRfZXJyOworCX0KKworCXJldHVybiByZXQ7CisKK2NhcmRfZXJyOgorCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtODk5M19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk5MyA9IHsKKwkucHJvYmUgPSAJd204OTkzX3Byb2JlLAorCS5yZW1vdmUgPSAJd204OTkzX3JlbW92ZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODk5Myk7CisKK3N0YXRpYyBpbnQgd204OTkzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgd204OTkzX3ByaXYgKndtODk5MzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgcmV0OworCisJaWYgKHdtODk5M19jb2RlYykgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIkEgV004OTkzIGlzIGFscmVhZHkgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdtODk5MyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg5OTNfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg5OTMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg5OTMtPmNvZGVjOworCWlmIChpMmMtPmRldi5wbGF0Zm9ybV9kYXRhKQorCQltZW1jcHkoJndtODk5My0+cGRhdGEsIGkyYy0+ZGV2LnBsYXRmb3JtX2RhdGEsCisJCSAgICAgICBzaXplb2Yod204OTkzLT5wZGF0YSkpOworCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5uYW1lID0gIldNODk5MyI7CisJY29kZWMtPnJlYWQgPSB3bTg5OTNfcmVhZDsKKwljb2RlYy0+d3JpdGUgPSB3bTg5OTNfd3JpdGU7CisJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCWNvZGVjLT5yZWdfY2FjaGUgPSB3bTg5OTMtPnJlZ19jYWNoZTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODk5My0+cmVnX2NhY2hlKTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204OTkzX3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSAmd204OTkzX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODk5MzsKKworCW1lbWNweSh3bTg5OTMtPnJlZ19jYWNoZSwgd204OTkzX3JlZ19kZWZhdWx0cywKKwkgICAgICAgc2l6ZW9mKHdtODk5My0+cmVnX2NhY2hlKSk7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg5OTMpOworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CisJd204OTkzX2NvZGVjID0gY29kZWM7CisKKwljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OworCisJdmFsID0gd204OTkzX3JlYWRfaHcoY29kZWMsIFdNODk5M19TT0ZUV0FSRV9SRVNFVCk7CisJaWYgKHZhbCAhPSB3bTg5OTNfcmVnX2RlZmF1bHRzW1dNODk5M19TT0ZUV0FSRV9SRVNFVF0pIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiSW52YWxpZCBJRCByZWdpc3RlciB2YWx1ZSAleFxuIiwgdmFsKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfU09GVFdBUkVfUkVTRVQsIDB4ZmZmZik7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGVycjsKKworCS8qIEJ5IGRlZmF1bHQgd2UncmUgdXNpbmcgdGhlIG91dHB1dCBtaXhlcnMgKi8KKwl3bTg5OTMtPmNsYXNzX3dfdXNlcnMgPSAyOworCisJLyogTGF0Y2ggdm9sdW1lIHVwZGF0ZSBiaXRzIGFuZCBkZWZhdWx0IFpDIG9uICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1JJR0hUX0RBQ19ESUdJVEFMX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTNfREFDX1ZVLCBXTTg5OTNfREFDX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfUklHSFRfQURDX0RJR0lUQUxfVk9MVU1FLAorCQkJICAgIFdNODk5M19BRENfVlUsIFdNODk5M19BRENfVlUpOworCisJLyogTWFudWFseSBtYW5hZ2UgdGhlIEhQT1VUIHNlcXVlbmNpbmcgZm9yIGluZGVwZW5kZW50IHN0ZXJlbworCSAqIGNvbnRyb2wuICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0FOQUxPR1VFX0hQXzAsCisJCQkgICAgV004OTkzX0hQT1VUMV9BVVRPX1BVLCAwKTsKKworCS8qIFVzZSBhdXRvbWF0aWMgY2xvY2sgY29uZmlndXJhdGlvbiAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19DTE9DS0lOR180LCBXTTg5OTNfU1JfTU9ERSwgMCk7CisKKwlpZiAoIXdtODk5My0+cGRhdGEubGluZW91dDFfZGlmZikKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0xJTkVfTUlYRVIxLAorCQkJCSAgICBXTTg5OTNfTElORU9VVDFfTU9ERSwKKwkJCQkgICAgV004OTkzX0xJTkVPVVQxX01PREUpOworCWlmICghd204OTkzLT5wZGF0YS5saW5lb3V0Ml9kaWZmKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfTElORV9NSVhFUjIsCisJCQkJICAgIFdNODk5M19MSU5FT1VUMl9NT0RFLAorCQkJCSAgICBXTTg5OTNfTElORU9VVDJfTU9ERSk7CisKKwlpZiAod204OTkzLT5wZGF0YS5saW5lb3V0MWZiKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQURESVRJT05BTF9DT05UUk9MLAorCQkJCSAgICBXTTg5OTNfTElORU9VVDFfRkIsIFdNODk5M19MSU5FT1VUMV9GQik7CisKKwlpZiAod204OTkzLT5wZGF0YS5saW5lb3V0MmZiKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQURESVRJT05BTF9DT05UUk9MLAorCQkJCSAgICBXTTg5OTNfTElORU9VVDJfRkIsIFdNODk5M19MSU5FT1VUMl9GQik7CisKKwkvKiBBcHBseSB0aGUgbWljcm9waG9uZSBiaWFzL2RldGVjdGlvbiBjb25maWd1cmF0aW9uIC0gdGhlCisJICogcGxhdGZvcm0gZGF0YSBpcyBkaXJlY3RseSBhcHBsaWNhYmxlIHRvIHRoZSByZWdpc3Rlci4gKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfTUlDQklBUywKKwkJCSAgICBXTTg5OTNfSkRfU0NUSFJfTUFTSyB8IFdNODk5M19KRF9USFJfTUFTSyB8CisJCQkgICAgV004OTkzX01JQ0IxX0xWTCB8IFdNODk5M19NSUNCMl9MVkwsCisJCQkgICAgd204OTkzLT5wZGF0YS5qZF9zY3RociA8PCBXTTg5OTNfSkRfU0NUSFJfU0hJRlQgfAorCQkJICAgIHdtODk5My0+cGRhdGEuamRfdGhyIDw8IFdNODk5M19KRF9USFJfU0hJRlQgfAorCQkJICAgIHdtODk5My0+cGRhdGEubWljYmlhczFfbHZsIHwKKwkJCSAgICB3bTg5OTMtPnBkYXRhLm1pY2JpYXMxX2x2bCA8PCAxKTsKKworCXJldCA9IHdtODk5M19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBlcnI7CisKKwl3bTg5OTNfZGFpLmRldiA9IGNvZGVjLT5kZXY7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204OTkzX2RhaSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGVycl9iaWFzOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2JpYXM6CisJd204OTkzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKK2VycjoKKwl3bTg5OTNfY29kZWMgPSBOVUxMOworCWtmcmVlKHdtODk5Myk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bTg5OTNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3bTg5OTNfcHJpdiAqd204OTkzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJndtODk5My0+Y29kZWMpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODk5M19kYWkpOworCisJd204OTkzX3NldF9iaWFzX2xldmVsKCZ3bTg5OTMtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlrZnJlZSh3bTg5OTMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg5OTNfaTJjX2lkW10gPSB7CisJeyAid204OTkzIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg5OTNfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODk5M19pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIldNODk5MyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gd204OTkzX2kyY19wcm9iZSwKKwkucmVtb3ZlID0gd204OTkzX2kyY19yZW1vdmUsCisJLmlkX3RhYmxlID0gd204OTkzX2kyY19pZCwKK307CisKKworc3RhdGljIGludCBfX2luaXQgd204OTkzX21vZGluaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODk5M19pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApCisJCXByX2VycigiV004OTkzOiBVbmFibGUgdG8gcmVnaXN0ZXIgSTJDIGRyaXZlcjogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQod204OTkzX21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204OTkzX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmd204OTkzX2kyY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204OTkzX2V4aXQpOworCisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTg5OTMgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZTcxY2EKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5oCkBAIC0wLDAgKzEsMjEzMiBAQAorI2lmbmRlZiBXTTg5OTNfSAorI2RlZmluZSBXTTg5OTNfSAorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODk5M19kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTkzOworCisjZGVmaW5lIFdNODk5M19TWVNDTEtfTUNMSyAgICAgMQorI2RlZmluZSBXTTg5OTNfU1lTQ0xLX0ZMTCAgICAgIDIKKworI2RlZmluZSBXTTg5OTNfRkxMX01DTEsgIDEKKyNkZWZpbmUgV004OTkzX0ZMTF9CQ0xLICAyCisjZGVmaW5lIFdNODk5M19GTExfTFJDTEsgMworCisvKgorICogUmVnaXN0ZXIgdmFsdWVzLgorICovCisjZGVmaW5lIFdNODk5M19TT0ZUV0FSRV9SRVNFVCAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzEgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzIgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzMgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMSAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMiAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIFdNODk5M19DTE9DS0lOR18xICAgICAgICAgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIFdNODk5M19DTE9DS0lOR18yICAgICAgICAgICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMyAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCAgICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIFdNODk5M19EQUNfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAweDBBCisjZGVmaW5lIFdNODk5M19MRUZUX0RBQ19ESUdJVEFMX1ZPTFVNRSAgICAgICAgICAweDBCCisjZGVmaW5lIFdNODk5M19SSUdIVF9EQUNfRElHSVRBTF9WT0xVTUUgICAgICAgICAweDBDCisjZGVmaW5lIFdNODk5M19ESUdJVEFMX1NJREVfVE9ORSAgICAgICAgICAgICAgICAweDBECisjZGVmaW5lIFdNODk5M19BRENfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAweDBFCisjZGVmaW5lIFdNODk5M19MRUZUX0FEQ19ESUdJVEFMX1ZPTFVNRSAgICAgICAgICAweDBGCisjZGVmaW5lIFdNODk5M19SSUdIVF9BRENfRElHSVRBTF9WT0xVTUUgICAgICAgICAweDEwCisjZGVmaW5lIFdNODk5M19HUElPX0NUUkxfMSAgICAgICAgICAgICAgICAgICAgICAweDEyCisjZGVmaW5lIFdNODk5M19HUElPMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEzCisjZGVmaW5lIFdNODk5M19JUlFfREVCT1VOQ0UgICAgICAgICAgICAgICAgICAgICAweDE0CisjZGVmaW5lIFdNODk5M19HUElPQ1RSTF8yICAgICAgICAgICAgICAgICAgICAgICAweDE2CisjZGVmaW5lIFdNODk5M19HUElPX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAweDE3CisjZGVmaW5lIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSAgICAgICAweDE4CisjZGVmaW5lIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSAgICAgICAweDE5CisjZGVmaW5lIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUgICAgICAweDFBCisjZGVmaW5lIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUgICAgICAweDFCCisjZGVmaW5lIFdNODk5M19MRUZUX09VVFBVVF9WT0xVTUUgICAgICAgICAgICAgICAweDFDCisjZGVmaW5lIFdNODk5M19SSUdIVF9PVVRQVVRfVk9MVU1FICAgICAgICAgICAgICAweDFECisjZGVmaW5lIFdNODk5M19MSU5FX09VVFBVVFNfVk9MVU1FICAgICAgICAgICAgICAweDFFCisjZGVmaW5lIFdNODk5M19IUE9VVDJfVk9MVU1FICAgICAgICAgICAgICAgICAgICAweDFGCisjZGVmaW5lIFdNODk5M19MRUZUX09QR0FfVk9MVU1FICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFdNODk5M19SSUdIVF9PUEdBX1ZPTFVNRSAgICAgICAgICAgICAgICAweDIxCisjZGVmaW5lIFdNODk5M19TUEtNSVhMX0FUVEVOVUFUSU9OICAgICAgICAgICAgICAweDIyCisjZGVmaW5lIFdNODk5M19TUEtNSVhSX0FUVEVOVUFUSU9OICAgICAgICAgICAgICAweDIzCisjZGVmaW5lIFdNODk5M19TUEtPVVRfTUlYRVJTICAgICAgICAgICAgICAgICAgICAweDI0CisjZGVmaW5lIFdNODk5M19TUEtPVVRfQk9PU1QgICAgICAgICAgICAgICAgICAgICAweDI1CisjZGVmaW5lIFdNODk5M19TUEVBS0VSX1ZPTFVNRV9MRUZUICAgICAgICAgICAgICAweDI2CisjZGVmaW5lIFdNODk5M19TUEVBS0VSX1ZPTFVNRV9SSUdIVCAgICAgICAgICAgICAweDI3CisjZGVmaW5lIFdNODk5M19JTlBVVF9NSVhFUjIgICAgICAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIFdNODk5M19JTlBVVF9NSVhFUjMgICAgICAgICAgICAgICAgICAgICAweDI5CisjZGVmaW5lIFdNODk5M19JTlBVVF9NSVhFUjQgICAgICAgICAgICAgICAgICAgICAweDJBCisjZGVmaW5lIFdNODk5M19JTlBVVF9NSVhFUjUgICAgICAgICAgICAgICAgICAgICAweDJCCisjZGVmaW5lIFdNODk5M19JTlBVVF9NSVhFUjYgICAgICAgICAgICAgICAgICAgICAweDJDCisjZGVmaW5lIFdNODk5M19PVVRQVVRfTUlYRVIxICAgICAgICAgICAgICAgICAgICAweDJECisjZGVmaW5lIFdNODk5M19PVVRQVVRfTUlYRVIyICAgICAgICAgICAgICAgICAgICAweDJFCisjZGVmaW5lIFdNODk5M19PVVRQVVRfTUlYRVIzICAgICAgICAgICAgICAgICAgICAweDJGCisjZGVmaW5lIFdNODk5M19PVVRQVVRfTUlYRVI0ICAgICAgICAgICAgICAgICAgICAweDMwCisjZGVmaW5lIFdNODk5M19PVVRQVVRfTUlYRVI1ICAgICAgICAgICAgICAgICAgICAweDMxCisjZGVmaW5lIFdNODk5M19PVVRQVVRfTUlYRVI2ICAgICAgICAgICAgICAgICAgICAweDMyCisjZGVmaW5lIFdNODk5M19IUE9VVDJfTUlYRVIgICAgICAgICAgICAgICAgICAgICAweDMzCisjZGVmaW5lIFdNODk5M19MSU5FX01JWEVSMSAgICAgICAgICAgICAgICAgICAgICAweDM0CisjZGVmaW5lIFdNODk5M19MSU5FX01JWEVSMiAgICAgICAgICAgICAgICAgICAgICAweDM1CisjZGVmaW5lIFdNODk5M19TUEVBS0VSX01JWEVSICAgICAgICAgICAgICAgICAgICAweDM2CisjZGVmaW5lIFdNODk5M19BRERJVElPTkFMX0NPTlRST0wgICAgICAgICAgICAgICAweDM3CisjZGVmaW5lIFdNODk5M19BTlRJUE9QMSAgICAgICAgICAgICAgICAgICAgICAgICAweDM4CisjZGVmaW5lIFdNODk5M19BTlRJUE9QMiAgICAgICAgICAgICAgICAgICAgICAgICAweDM5CisjZGVmaW5lIFdNODk5M19NSUNCSUFTICAgICAgICAgICAgICAgICAgICAgICAgICAweDNBCisjZGVmaW5lIFdNODk5M19GTExfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgICAweDNDCisjZGVmaW5lIFdNODk5M19GTExfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgICAweDNECisjZGVmaW5lIFdNODk5M19GTExfQ09OVFJPTF8zICAgICAgICAgICAgICAgICAgICAweDNFCisjZGVmaW5lIFdNODk5M19GTExfQ09OVFJPTF80ICAgICAgICAgICAgICAgICAgICAweDNGCisjZGVmaW5lIFdNODk5M19GTExfQ09OVFJPTF81ICAgICAgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIFdNODk5M19DTE9DS0lOR18zICAgICAgICAgICAgICAgICAgICAgICAweDQxCisjZGVmaW5lIFdNODk5M19DTE9DS0lOR180ICAgICAgICAgICAgICAgICAgICAgICAweDQyCisjZGVmaW5lIFdNODk5M19NV19TTEFWRV9DT05UUk9MICAgICAgICAgICAgICAgICAweDQzCisjZGVmaW5lIFdNODk5M19CVVNfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgICAweDQ1CisjZGVmaW5lIFdNODk5M19XUklURV9TRVFVRU5DRVJfMCAgICAgICAgICAgICAgICAweDQ2CisjZGVmaW5lIFdNODk5M19XUklURV9TRVFVRU5DRVJfMSAgICAgICAgICAgICAgICAweDQ3CisjZGVmaW5lIFdNODk5M19XUklURV9TRVFVRU5DRVJfMiAgICAgICAgICAgICAgICAweDQ4CisjZGVmaW5lIFdNODk5M19XUklURV9TRVFVRU5DRVJfMyAgICAgICAgICAgICAgICAweDQ5CisjZGVmaW5lIFdNODk5M19XUklURV9TRVFVRU5DRVJfNCAgICAgICAgICAgICAgICAweDRBCisjZGVmaW5lIFdNODk5M19XUklURV9TRVFVRU5DRVJfNSAgICAgICAgICAgICAgICAweDRCCisjZGVmaW5lIFdNODk5M19DSEFSR0VfUFVNUF8xICAgICAgICAgICAgICAgICAgICAweDRDCisjZGVmaW5lIFdNODk5M19DTEFTU19XXzAgICAgICAgICAgICAgICAgICAgICAgICAweDUxCisjZGVmaW5lIFdNODk5M19EQ19TRVJWT18wICAgICAgICAgICAgICAgICAgICAgICAweDU0CisjZGVmaW5lIFdNODk5M19EQ19TRVJWT18xICAgICAgICAgICAgICAgICAgICAgICAweDU1CisjZGVmaW5lIFdNODk5M19EQ19TRVJWT18zICAgICAgICAgICAgICAgICAgICAgICAweDU3CisjZGVmaW5lIFdNODk5M19EQ19TRVJWT19SRUFEQkFDS18wICAgICAgICAgICAgICAweDU4CisjZGVmaW5lIFdNODk5M19EQ19TRVJWT19SRUFEQkFDS18xICAgICAgICAgICAgICAweDU5CisjZGVmaW5lIFdNODk5M19EQ19TRVJWT19SRUFEQkFDS18yICAgICAgICAgICAgICAweDVBCisjZGVmaW5lIFdNODk5M19BTkFMT0dVRV9IUF8wICAgICAgICAgICAgICAgICAgICAweDYwCisjZGVmaW5lIFdNODk5M19FUTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYyCisjZGVmaW5lIFdNODk5M19FUTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYzCisjZGVmaW5lIFdNODk5M19FUTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY0CisjZGVmaW5lIFdNODk5M19FUTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY1CisjZGVmaW5lIFdNODk5M19FUTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY2CisjZGVmaW5lIFdNODk5M19FUTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY3CisjZGVmaW5lIFdNODk5M19FUTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY4CisjZGVmaW5lIFdNODk5M19FUTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY5CisjZGVmaW5lIFdNODk5M19FUTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDZBCisjZGVmaW5lIFdNODk5M19FUTEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDZCCisjZGVmaW5lIFdNODk5M19FUTExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDZDCisjZGVmaW5lIFdNODk5M19FUTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDZECisjZGVmaW5lIFdNODk5M19FUTEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDZFCisjZGVmaW5lIFdNODk5M19FUTE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDZGCisjZGVmaW5lIFdNODk5M19FUTE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwCisjZGVmaW5lIFdNODk5M19FUTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcxCisjZGVmaW5lIFdNODk5M19FUTE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcyCisjZGVmaW5lIFdNODk5M19FUTE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDczCisjZGVmaW5lIFdNODk5M19FUTE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc0CisjZGVmaW5lIFdNODk5M19FUTIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc1CisjZGVmaW5lIFdNODk5M19FUTIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc2CisjZGVmaW5lIFdNODk5M19FUTIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc3CisjZGVmaW5lIFdNODk5M19FUTIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc4CisjZGVmaW5lIFdNODk5M19FUTI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDc5CisjZGVmaW5lIFdNODk5M19ESUdJVEFMX1BVTExTICAgICAgICAgICAgICAgICAgICAweDdBCisjZGVmaW5lIFdNODk5M19EUkNfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgICAweDdCCisjZGVmaW5lIFdNODk5M19EUkNfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgICAweDdDCisjZGVmaW5lIFdNODk5M19EUkNfQ09OVFJPTF8zICAgICAgICAgICAgICAgICAgICAweDdECisjZGVmaW5lIFdNODk5M19EUkNfQ09OVFJPTF80ICAgICAgICAgICAgICAgICAgICAweDdFCisKKyNkZWZpbmUgV004OTkzX1JFR0lTVEVSX0NPVU5UICAgICAgICAgICAgICAgICAgIDB4N0YKKyNkZWZpbmUgV004OTkzX01BWF9SRUdJU1RFUiAgICAgICAgICAgICAgICAgICAgIDB4N0UKKworLyoKKyAqIEZpZWxkIERlZmluaXRpb25zLgorICovCisKKy8qCisgKiBSMCAoMHgwMCkgLSBTb2Z0d2FyZSBSZXNldAorICovCisjZGVmaW5lIFdNODk5M19TV19SRVNFVF9NQVNLICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIFNXX1JFU0VUIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5M19TV19SRVNFVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNXX1JFU0VUIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5M19TV19SRVNFVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIFNXX1JFU0VUIC0gWzE1OjBdICovCisKKy8qCisgKiBSMSAoMHgwMSkgLSBQb3dlciBNYW5hZ2VtZW50ICgxKQorICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFNQS09VVFJfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFNQS09VVFJfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTMgIC8qIFNQS09VVFJfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS09VVFJfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFNQS09VVExfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFNQS09VVExfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTIgIC8qIFNQS09VVExfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS09VVExfRU5BICovCisjZGVmaW5lIFdNODk5M19IUE9VVDJfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIEhQT1VUMl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogSFBPVVQyX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQyX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDExICAvKiBIUE9VVDJfRU5BICovCisjZGVmaW5lIFdNODk5M19IUE9VVDJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMUxfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogSFBPVVQxTF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMUxfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogSFBPVVQxTF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMUxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgOSAgLyogSFBPVVQxTF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMUxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxTF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMVJfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSFBPVVQxUl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMVJfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSFBPVVQxUl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMVJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogSFBPVVQxUl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMVJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxUl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX01JQ0IyX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlDQjJfRU5BICovCisjZGVmaW5lIFdNODk5M19NSUNCMl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIE1JQ0IyX0VOQSAqLworI2RlZmluZSBXTTg5OTNfTUlDQjJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBNSUNCMl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX01JQ0IyX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjJfRU5BICovCisjZGVmaW5lIFdNODk5M19NSUNCMV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JQ0IxX0VOQSAqLworI2RlZmluZSBXTTg5OTNfTUlDQjFfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBNSUNCMV9FTkEgKi8KKyNkZWZpbmUgV004OTkzX01JQ0IxX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlDQjFfRU5BICovCisjZGVmaW5lIFdNODk5M19NSUNCMV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IxX0VOQSAqLworI2RlZmluZSBXTTg5OTNfVk1JRF9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA2ICAvKiBWTUlEX1NFTCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk5M19WTUlEX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZNSURfU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTkzX1ZNSURfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogVk1JRF9TRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5OTNfQklBU19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCSUFTX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQklBU19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCSUFTX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQklBU19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBCSUFTX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQklBU19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCSUFTX0VOQSAqLworCisvKgorICogUjIgKDB4MDIpIC0gUG93ZXIgTWFuYWdlbWVudCAoMikKKyAqLworI2RlZmluZSBXTTg5OTNfVFNIVVRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBUU0hVVF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX1RTSFVUX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogVFNIVVRfRU5BICovCisjZGVmaW5lIFdNODk5M19UU0hVVF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIFRTSFVUX0VOQSAqLworI2RlZmluZSBXTTg5OTNfVFNIVVRfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUU0hVVF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX1RTSFVUX09QRElTICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogVFNIVVRfT1BESVMgKi8KKyNkZWZpbmUgV004OTkzX1RTSFVUX09QRElTX01BU0sgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogVFNIVVRfT1BESVMgKi8KKyNkZWZpbmUgV004OTkzX1RTSFVUX09QRElTX1NISUZUICAgICAgICAgICAgICAgICAgICAxMyAgLyogVFNIVVRfT1BESVMgKi8KKyNkZWZpbmUgV004OTkzX1RTSFVUX09QRElTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogVFNIVVRfT1BESVMgKi8KKyNkZWZpbmUgV004OTkzX09QQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5M19PUENMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTNfT1BDTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDExICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTkzX09QQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhJTkxfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIE1JWElOTF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUlYSU5MX0VOQSAqLworI2RlZmluZSBXTTg5OTNfTUlYSU5MX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBNSVhJTkxfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhJTkxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWElOTF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUlYSU5SX0VOQSAqLworI2RlZmluZSBXTTg5OTNfTUlYSU5SX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBNSVhJTlJfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhJTlJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIE1JWElOUl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlYSU5SX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4yTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJMX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4yTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJMX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4yTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBJTjJMX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4yTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJMX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4xTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjFMX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4xTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjFMX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4xTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBJTjFMX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4xTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFMX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4yUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjJSX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4yUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjJSX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4yUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBJTjJSX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4yUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJSX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFSX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFSX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBJTjFSX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFSX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQURDTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQURDTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQURDTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQURDTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQURDUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQURDUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQURDUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQURDUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX0VOQSAqLworCisvKgorICogUjMgKDB4MDMpIC0gUG93ZXIgTWFuYWdlbWVudCAoMykKKyAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDFOX0VOQSAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBMSU5FT1VUMU5fRU5BICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMU5fRU5BX01BU0sgICAgICAgICAgICAgICAweDIwMDAgIC8qIExJTkVPVVQxTl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQxTl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxMyAgLyogTElORU9VVDFOX0VOQSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDFOX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMU5fRU5BICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMVBfRU5BICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIExJTkVPVVQxUF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQxUF9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MTAwMCAgLyogTElORU9VVDFQX0VOQSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDFQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDEyICAvKiBMSU5FT1VUMVBfRU5BICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMVBfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQxUF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQyTl9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogTElORU9VVDJOX0VOQSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJOX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwODAwICAvKiBMSU5FT1VUMk5fRU5BICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMk5fRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMTEgIC8qIExJTkVPVVQyTl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQyTl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDJOX0VOQSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJQX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBMSU5FT1VUMlBfRU5BICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMlBfRU5BX01BU0sgICAgICAgICAgICAgICAweDA0MDAgIC8qIExJTkVPVVQyUF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQyUF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxMCAgLyogTElORU9VVDJQX0VOQSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMlBfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtSVk9MX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFNQS1JWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtSVk9MX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFNQS1JWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtSVk9MX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIFNQS1JWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtSVk9MX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS1JWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtMVk9MX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNQS0xWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtMVk9MX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNQS0xWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtMVk9MX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIFNQS0xWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19TUEtMVk9MX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS0xWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMVk9MX0VOQSAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1JWE9VVExWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMVk9MX0VOQV9NQVNLICAgICAgICAgICAgICAweDAwODAgIC8qIE1JWE9VVExWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMVk9MX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDcgIC8qIE1JWE9VVExWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMVk9MX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWE9VVExWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSVk9MX0VOQSAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1JWE9VVFJWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSVk9MX0VOQV9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIE1JWE9VVFJWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSVk9MX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIE1JWE9VVFJWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSVk9MX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWE9VVFJWT0xfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIE1JWE9VVExfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIE1JWE9VVExfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIE1JWE9VVExfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWE9VVExfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JWE9VVFJfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JWE9VVFJfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIE1JWE9VVFJfRU5BICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWE9VVFJfRU5BICovCisjZGVmaW5lIFdNODk5M19EQUNMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ0xfRU5BICovCisjZGVmaW5lIFdNODk5M19EQUNMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ0xfRU5BICovCisjZGVmaW5lIFdNODk5M19EQUNMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfRU5BICovCisjZGVmaW5lIFdNODk5M19EQUNMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfRU5BICovCisjZGVmaW5lIFdNODk5M19EQUNSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ1JfRU5BICovCisjZGVmaW5lIFdNODk5M19EQUNSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ1JfRU5BICovCisjZGVmaW5lIFdNODk5M19EQUNSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ1JfRU5BICovCisjZGVmaW5lIFdNODk5M19EQUNSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ1JfRU5BICovCisKKy8qCisgKiBSNCAoMHgwNCkgLSBBdWRpbyBJbnRlcmZhY2UgKDEpCisgKi8KKyNkZWZpbmUgV004OTkzX0FJRkFEQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTkzX0FJRkFEQ0xfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTkzX0FJRkFEQ0xfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAxNSAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTkzX0FJRkFEQ0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTkzX0FJRkFEQ1JfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTkzX0FJRkFEQ1JfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTkzX0FJRkFEQ1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAxNCAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTkzX0FJRkFEQ1JfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTkzX0FJRkFEQ19URE0gICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGQURDX1RETSAqLworI2RlZmluZSBXTTg5OTNfQUlGQURDX1RETV9NQVNLICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUZBRENfVERNICovCisjZGVmaW5lIFdNODk5M19BSUZBRENfVERNX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEFJRkFEQ19URE0gKi8KKyNkZWZpbmUgV004OTkzX0FJRkFEQ19URE1fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGQURDX1RETSAqLworI2RlZmluZSBXTTg5OTNfQUlGQURDX1RETV9DSEFOICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUZBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTkzX0FJRkFEQ19URE1fQ0hBTl9NQVNLICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGQURDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODk5M19BSUZBRENfVERNX0NIQU5fU0hJRlQgICAgICAgICAgICAgICAgMTIgIC8qIEFJRkFEQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5OTNfQUlGQURDX1RETV9DSEFOX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUZBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTkzX0JDTEtfRElSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTkzX0JDTEtfRElSX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTkzX0JDTEtfRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogQkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTkzX0JDTEtfRElSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTkzX0FJRl9CQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODk5M19BSUZfQkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTNfQUlGX0JDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUZfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTkzX0FJRl9CQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODk5M19BSUZfTFJDTEtfSU5WICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTkzX0FJRl9MUkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTNfQUlGX0xSQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICA3ICAvKiBBSUZfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5M19BSUZfTFJDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTkzX0FJRl9XTF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MCAgLyogQUlGX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTkzX0FJRl9XTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogQUlGX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTkzX0FJRl9XTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTkzX0FJRl9GTVRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxOCAgLyogQUlGX0ZNVCAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5M19BSUZfRk1UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEFJRl9GTVQgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTNfQUlGX0ZNVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUZfRk1UIC0gWzQ6M10gKi8KKworLyoKKyAqIFI1ICgweDA1KSAtIEF1ZGlvIEludGVyZmFjZSAoMikKKyAqLworI2RlZmluZSBXTTg5OTNfQUlGREFDTF9TUkMgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUZEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5OTNfQUlGREFDTF9TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUZEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5OTNfQUlGREFDTF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBBSUZEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5OTNfQUlGREFDTF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5OTNfQUlGREFDUl9TUkMgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBSUZEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5OTNfQUlGREFDUl9TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBSUZEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5OTNfQUlGREFDUl9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBBSUZEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5OTNfQUlGREFDUl9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5OTNfQUlGREFDX1RETSAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUZEQUNfVERNICovCisjZGVmaW5lIFdNODk5M19BSUZEQUNfVERNX01BU0sgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRkRBQ19URE0gKi8KKyNkZWZpbmUgV004OTkzX0FJRkRBQ19URE1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAxMyAgLyogQUlGREFDX1RETSAqLworI2RlZmluZSBXTTg5OTNfQUlGREFDX1RETV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZEQUNfVERNICovCisjZGVmaW5lIFdNODk5M19BSUZEQUNfVERNX0NIQU4gICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5OTNfQUlGREFDX1RETV9DSEFOX01BU0sgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUZEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTkzX0FJRkRBQ19URE1fQ0hBTl9TSElGVCAgICAgICAgICAgICAgICAxMiAgLyogQUlGREFDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODk5M19BSUZEQUNfVERNX0NIQU5fV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEFJRkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5OTNfREFDX0JPT1NUX01BU0sgICAgICAgICAgICAgICAgICAgMHgwQzAwICAvKiBEQUNfQk9PU1QgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5M19EQUNfQk9PU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIERBQ19CT09TVCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTkzX0RBQ19CT09TVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREFDX0JPT1NUIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTNfREFDX0NPTVAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTNfREFDX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTNfREFDX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTNfREFDX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTNfREFDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTkzX0RBQ19DT01QTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5M19EQUNfQ09NUE1PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTNfREFDX0NPTVBNT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTkzX0FEQ19DT01QICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTkzX0FEQ19DT01QX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTkzX0FEQ19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTkzX0FEQ19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTkzX0FEQ19DT01QTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5M19BRENfQ09NUE1PREVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTNfQURDX0NPTVBNT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTkzX0FEQ19DT01QTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5M19MT09QQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExPT1BCQUNLICovCisjZGVmaW5lIFdNODk5M19MT09QQkFDS19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExPT1BCQUNLICovCisjZGVmaW5lIFdNODk5M19MT09QQkFDS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExPT1BCQUNLICovCisjZGVmaW5lIFdNODk5M19MT09QQkFDS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPT1BCQUNLICovCisKKy8qCisgKiBSNiAoMHgwNikgLSBDbG9ja2luZyAxCisgKi8KKyNkZWZpbmUgV004OTkzX1RPQ0xLX1JBVEUgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogVE9DTEtfUkFURSAqLworI2RlZmluZSBXTTg5OTNfVE9DTEtfUkFURV9NQVNLICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBUT0NMS19SQVRFICovCisjZGVmaW5lIFdNODk5M19UT0NMS19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIFRPQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004OTkzX1RPQ0xLX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogVE9DTEtfUkFURSAqLworI2RlZmluZSBXTTg5OTNfVE9DTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTkzX1RPQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogVE9DTEtfRU5BICovCisjZGVmaW5lIFdNODk5M19UT0NMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTNfVE9DTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTkzX09QQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MUUwMCAgLyogT1BDTEtfRElWIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5M19PUENMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIE9QQ0xLX0RJViAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg5OTNfT1BDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBPUENMS19ESVYgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTkzX0RDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDFDMCAgLyogRENMS19ESVYgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTNfRENMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBEQ0xLX0RJViAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5M19EQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERDTEtfRElWIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTkzX0JDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRSAgLyogQkNMS19ESVYgLSBbNDoxXSAqLworI2RlZmluZSBXTTg5OTNfQkNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLX0RJViAtIFs0OjFdICovCisjZGVmaW5lIFdNODk5M19CQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEJDTEtfRElWIC0gWzQ6MV0gKi8KKworLyoKKyAqIFI3ICgweDA3KSAtIENsb2NraW5nIDIKKyAqLworI2RlZmluZSBXTTg5OTNfTUNMS19TUkMgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBNQ0xLX1NSQyAqLworI2RlZmluZSBXTTg5OTNfTUNMS19TUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBNQ0xLX1NSQyAqLworI2RlZmluZSBXTTg5OTNfTUNMS19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBNQ0xLX1NSQyAqLworI2RlZmluZSBXTTg5OTNfTUNMS19TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLX1NSQyAqLworI2RlZmluZSBXTTg5OTNfU1lTQ0xLX1NSQyAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBTWVNDTEtfU1JDICovCisjZGVmaW5lIFdNODk5M19TWVNDTEtfU1JDX01BU0sgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFNZU0NMS19TUkMgKi8KKyNkZWZpbmUgV004OTkzX1NZU0NMS19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNCAgLyogU1lTQ0xLX1NSQyAqLworI2RlZmluZSBXTTg5OTNfU1lTQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTWVNDTEtfU1JDICovCisjZGVmaW5lIFdNODk5M19NQ0xLX0RJViAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIE1DTEtfRElWICovCisjZGVmaW5lIFdNODk5M19NQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIE1DTEtfRElWICovCisjZGVmaW5lIFdNODk5M19NQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIE1DTEtfRElWICovCisjZGVmaW5lIFdNODk5M19NQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEtfRElWICovCisjZGVmaW5lIFdNODk5M19NQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIE1DTEtfSU5WICovCisjZGVmaW5lIFdNODk5M19NQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIE1DTEtfSU5WICovCisjZGVmaW5lIFdNODk5M19NQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIE1DTEtfSU5WICovCisjZGVmaW5lIFdNODk5M19NQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEtfSU5WICovCisjZGVmaW5lIFdNODk5M19BRENfRElWX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwRTAgIC8qIEFEQ19ESVYgLSBbNzo1XSAqLworI2RlZmluZSBXTTg5OTNfQURDX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENfRElWIC0gWzc6NV0gKi8KKyNkZWZpbmUgV004OTkzX0FEQ19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogQURDX0RJViAtIFs3OjVdICovCisjZGVmaW5lIFdNODk5M19EQUNfRElWX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMUMgIC8qIERBQ19ESVYgLSBbNDoyXSAqLworI2RlZmluZSBXTTg5OTNfREFDX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEQUNfRElWIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTkzX0RBQ19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDX0RJViAtIFs0OjJdICovCisKKy8qCisgKiBSOCAoMHgwOCkgLSBBdWRpbyBJbnRlcmZhY2UgKDMpCisgKi8KKyNkZWZpbmUgV004OTkzX0FJRl9NU1RSMSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGX01TVFIxICovCisjZGVmaW5lIFdNODk5M19BSUZfTVNUUjFfTUFTSyAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRl9NU1RSMSAqLworI2RlZmluZSBXTTg5OTNfQUlGX01TVFIxX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBBSUZfTVNUUjEgKi8KKyNkZWZpbmUgV004OTkzX0FJRl9NU1RSMV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX01TVFIxICovCisKKy8qCisgKiBSOSAoMHgwOSkgLSBBdWRpbyBJbnRlcmZhY2UgKDQpCisgKi8KKyNkZWZpbmUgV004OTkzX0FJRl9UUklTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004OTkzX0FJRl9UUklTX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004OTkzX0FJRl9UUklTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004OTkzX0FJRl9UUklTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004OTkzX0xSQ0xLX0RJUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5M19MUkNMS19ESVJfTUFTSyAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIExSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTNfTFJDTEtfRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDExICAvKiBMUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTkzX0xSQ0xLX0RJUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5M19MUkNMS19SQVRFX01BU0sgICAgICAgICAgICAgICAgICAweDA3RkYgIC8qIExSQ0xLX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTkzX0xSQ0xLX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTFJDTEtfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5OTNfTFJDTEtfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDExICAvKiBMUkNMS19SQVRFIC0gWzEwOjBdICovCisKKy8qCisgKiBSMTAgKDB4MEEpIC0gREFDIENUUkwKKyAqLworI2RlZmluZSBXTTg5OTNfREFDX09TUjEyOCAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBEQUNfT1NSMTI4ICovCisjZGVmaW5lIFdNODk5M19EQUNfT1NSMTI4X01BU0sgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIERBQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTkzX0RBQ19PU1IxMjhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxMyAgLyogREFDX09TUjEyOCAqLworI2RlZmluZSBXTTg5OTNfREFDX09TUjEyOF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfT1NSMTI4ICovCisjZGVmaW5lIFdNODk5M19EQUNfTU9OTyAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQ19NT05PICovCisjZGVmaW5lIFdNODk5M19EQUNfTU9OT19NQVNLICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQ19NT05PICovCisjZGVmaW5lIFdNODk5M19EQUNfTU9OT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERBQ19NT05PICovCisjZGVmaW5lIFdNODk5M19EQUNfTU9OT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19NT05PICovCisjZGVmaW5lIFdNODk5M19EQUNfU0JfRklMVCAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ19TQl9GSUxUICovCisjZGVmaW5lIFdNODk5M19EQUNfU0JfRklMVF9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ19TQl9GSUxUICovCisjZGVmaW5lIFdNODk5M19EQUNfU0JfRklMVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQ19TQl9GSUxUICovCisjZGVmaW5lIFdNODk5M19EQUNfU0JfRklMVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19TQl9GSUxUICovCisjZGVmaW5lIFdNODk5M19EQUNfTVVURVJBVEUgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTNfREFDX01VVEVSQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTkzX0RBQ19NVVRFUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgNyAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5M19EQUNfTVVURVJBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTNfREFDX1VOTVVURV9SQU1QICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBEQUNfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTkzX0RBQ19VTk1VVEVfUkFNUF9NQVNLICAgICAgICAgICAgIDB4MDA0MCAgLyogREFDX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5M19EQUNfVU5NVVRFX1JBTVBfU0hJRlQgICAgICAgICAgICAgICAgIDYgIC8qIERBQ19VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTNfREFDX1VOTVVURV9SQU1QX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBEQUNfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTkzX0RFRU1QSF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAzMCAgLyogREVFTVBIIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTkzX0RFRU1QSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogREVFTVBIIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTkzX0RFRU1QSF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREVFTVBIIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTkzX0RBQ19NVVRFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0RBQ19NVVRFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0RBQ19NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0RBQ19NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0xfREFUSU5WICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0xfREFUSU5WX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0xfREFUSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0xfREFUSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTkzX0RBQ1JfREFUSU5WICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTkzX0RBQ1JfREFUSU5WX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTkzX0RBQ1JfREFUSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTkzX0RBQ1JfREFUSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDUl9EQVRJTlYgKi8KKworLyoKKyAqIFIxMSAoMHgwQikgLSBMZWZ0IERBQyBEaWdpdGFsIFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5M19EQUNfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5OTNfREFDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004OTkzX0RBQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODk5M19EQUNfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5OTNfREFDTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEQUNMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5M19EQUNMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTkzX0RBQ0xfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDTF9WT0wgLSBbNzowXSAqLworCisvKgorICogUjEyICgweDBDKSAtIFJpZ2h0IERBQyBEaWdpdGFsIFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5M19EQUNfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5OTNfREFDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004OTkzX0RBQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODk5M19EQUNfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5OTNfREFDUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEQUNSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5M19EQUNSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTkzX0RBQ1JfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjEzICgweDBEKSAtIERpZ2l0YWwgU2lkZSBUb25lCisgKi8KKyNkZWZpbmUgV004OTkzX0FEQ0xfREFDX1NWT0xfTUFTSyAgICAgICAgICAgICAgIDB4MUUwMCAgLyogQURDTF9EQUNfU1ZPTCAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg5OTNfQURDTF9EQUNfU1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICA5ICAvKiBBRENMX0RBQ19TVk9MIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5M19BRENMX0RBQ19TVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ0xfREFDX1NWT0wgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTkzX0FEQ1JfREFDX1NWT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDFFMCAgLyogQURDUl9EQUNfU1ZPTCAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5M19BRENSX0RBQ19TVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ1JfREFDX1NWT0wgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTNfQURDUl9EQUNfU1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENSX0RBQ19TVk9MIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTkzX0FEQ19UT19EQUNMX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogQURDX1RPX0RBQ0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5OTNfQURDX1RPX0RBQ0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAyICAvKiBBRENfVE9fREFDTCAtIFszOjJdICovCisjZGVmaW5lIFdNODk5M19BRENfVE9fREFDTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19UT19EQUNMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTkzX0FEQ19UT19EQUNSX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogQURDX1RPX0RBQ1IgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTNfQURDX1RPX0RBQ1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBBRENfVE9fREFDUiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5M19BRENfVE9fREFDUl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19UT19EQUNSIC0gWzE6MF0gKi8KKworLyoKKyAqIFIxNCAoMHgwRSkgLSBBREMgQ1RSTAorICovCisjZGVmaW5lIFdNODk5M19BRENfT1NSMTI4ICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTkzX0FEQ19PU1IxMjhfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQURDX09TUjEyOCAqLworI2RlZmluZSBXTTg5OTNfQURDX09TUjEyOF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBBRENfT1NSMTI4ICovCisjZGVmaW5lIFdNODk5M19BRENfT1NSMTI4X1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTkzX0FEQ19IUEYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDX0hQRiAqLworI2RlZmluZSBXTTg5OTNfQURDX0hQRl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBRENfSFBGICovCisjZGVmaW5lIFdNODk5M19BRENfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFEQ19IUEYgKi8KKyNkZWZpbmUgV004OTkzX0FEQ19IUEZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX0hQRiAqLworI2RlZmluZSBXTTg5OTNfQURDX0hQRl9DVVRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDYwICAvKiBBRENfSFBGX0NVVCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5M19BRENfSFBGX0NVVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ19IUEZfQ1VUIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTkzX0FEQ19IUEZfQ1VUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX0hQRl9DVVQgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5OTNfQURDTF9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0RBVElOViAqLworI2RlZmluZSBXTTg5OTNfQURDTF9EQVRJTlZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0RBVElOViAqLworI2RlZmluZSBXTTg5OTNfQURDTF9EQVRJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0RBVElOViAqLworI2RlZmluZSBXTTg5OTNfQURDTF9EQVRJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0RBVElOViAqLworI2RlZmluZSBXTTg5OTNfQURDUl9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0RBVElOViAqLworI2RlZmluZSBXTTg5OTNfQURDUl9EQVRJTlZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0RBVElOViAqLworI2RlZmluZSBXTTg5OTNfQURDUl9EQVRJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBBRENSX0RBVElOViAqLworI2RlZmluZSBXTTg5OTNfQURDUl9EQVRJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX0RBVElOViAqLworCisvKgorICogUjE1ICgweDBGKSAtIExlZnQgQURDIERpZ2l0YWwgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTkzX0FEQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODk5M19BRENfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5OTNfQURDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004OTkzX0FEQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODk5M19BRENMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFEQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTkzX0FEQ0xfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTNfQURDTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTYgKDB4MTApIC0gUmlnaHQgQURDIERpZ2l0YWwgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTkzX0FEQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODk5M19BRENfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5OTNfQURDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004OTkzX0FEQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODk5M19BRENSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFEQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTkzX0FEQ1JfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTNfQURDUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTggKDB4MTIpIC0gR1BJTyBDVFJMIDEKKyAqLworI2RlZmluZSBXTTg5OTNfSkQyX1NDX0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBKRDJfU0NfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfSkQyX1NDX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBKRDJfU0NfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfSkQyX1NDX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBKRDJfU0NfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfSkQyX1NDX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBKRDJfU0NfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfSkQyX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBKRDJfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfSkQyX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBKRDJfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfSkQyX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBKRDJfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfSkQyX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBKRDJfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBXU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODk5M19XU0VRX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIFdTRVFfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogSVJRICovCisjZGVmaW5lIFdNODk5M19JUlFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIElSUSAqLworI2RlZmluZSBXTTg5OTNfSVJRX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBJUlEgKi8KKyNkZWZpbmUgV004OTkzX0lSUV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSVJRICovCisjZGVmaW5lIFdNODk5M19URU1QT0tfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFRFTVBPS19FSU5UICovCisjZGVmaW5lIFdNODk5M19URU1QT0tfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFRFTVBPS19FSU5UICovCisjZGVmaW5lIFdNODk5M19URU1QT0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIFRFTVBPS19FSU5UICovCisjZGVmaW5lIFdNODk5M19URU1QT0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRFTVBPS19FSU5UICovCisjZGVmaW5lIFdNODk5M19KRDFfU0NfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEpEMV9TQ19FSU5UICovCisjZGVmaW5lIFdNODk5M19KRDFfU0NfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEpEMV9TQ19FSU5UICovCisjZGVmaW5lIFdNODk5M19KRDFfU0NfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEpEMV9TQ19FSU5UICovCisjZGVmaW5lIFdNODk5M19KRDFfU0NfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEpEMV9TQ19FSU5UICovCisjZGVmaW5lIFdNODk5M19KRDFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEpEMV9FSU5UICovCisjZGVmaW5lIFdNODk5M19KRDFfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEpEMV9FSU5UICovCisjZGVmaW5lIFdNODk5M19KRDFfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEpEMV9FSU5UICovCisjZGVmaW5lIFdNODk5M19KRDFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEpEMV9FSU5UICovCisjZGVmaW5lIFdNODk5M19GTExfTE9DS19FSU5UICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9MT0NLX0VJTlRfTUFTSyAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfRkxMX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICA4ICAvKiBGTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5M19GTExfTE9DS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0dQSThfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODk5M19HUEk4X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSThfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfR1BJOF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBHUEk4X0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0dQSThfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODk5M19HUEk3X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfR1BJN19FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0dQSTdfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogR1BJN19FSU5UICovCisjZGVmaW5lIFdNODk5M19HUEk3X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBHUElPMV9FSU5UICovCisjZGVmaW5lIFdNODk5M19HUElPMV9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEdQSU8xX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0dQSU8xX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1BJTzFfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMV9FSU5UICovCisKKy8qCisgKiBSMTkgKDB4MTMpIC0gR1BJTzEKKyAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMV9QVSAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMV9QVSAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBHUElPMV9QVSAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMV9QVSAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPMV9QRCAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPMV9QRCAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPMV9QRCAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMV9QRCAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUElPMV9TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUElPMV9TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPMV9TRUwgLSBbMzowXSAqLworCisvKgorICogUjIwICgweDE0KSAtIElSUV9ERUJPVU5DRQorICovCisjZGVmaW5lIFdNODk5M19KRDJfU0NfREIgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEpEMl9TQ19EQiAqLworI2RlZmluZSBXTTg5OTNfSkQyX1NDX0RCX01BU0sgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBKRDJfU0NfREIgKi8KKyNkZWZpbmUgV004OTkzX0pEMl9TQ19EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogSkQyX1NDX0RCICovCisjZGVmaW5lIFdNODk5M19KRDJfU0NfREJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEpEMl9TQ19EQiAqLworI2RlZmluZSBXTTg5OTNfSkQyX0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBKRDJfREIgKi8KKyNkZWZpbmUgV004OTkzX0pEMl9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogSkQyX0RCICovCisjZGVmaW5lIFdNODk5M19KRDJfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIEpEMl9EQiAqLworI2RlZmluZSBXTTg5OTNfSkQyX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBKRDJfREIgKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfREIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogV1NFUV9EQiAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBXU0VRX0RCICovCisjZGVmaW5lIFdNODk5M19XU0VRX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIFdTRVFfREIgKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfREJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9EQiAqLworI2RlZmluZSBXTTg5OTNfVEVNUE9LX0RCICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBURU1QT0tfREIgKi8KKyNkZWZpbmUgV004OTkzX1RFTVBPS19EQl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogVEVNUE9LX0RCICovCisjZGVmaW5lIFdNODk5M19URU1QT0tfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIFRFTVBPS19EQiAqLworI2RlZmluZSBXTTg5OTNfVEVNUE9LX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBURU1QT0tfREIgKi8KKyNkZWZpbmUgV004OTkzX0pEMV9TQ19EQiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogSkQxX1NDX0RCICovCisjZGVmaW5lIFdNODk5M19KRDFfU0NfREJfTUFTSyAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEpEMV9TQ19EQiAqLworI2RlZmluZSBXTTg5OTNfSkQxX1NDX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBKRDFfU0NfREIgKi8KKyNkZWZpbmUgV004OTkzX0pEMV9TQ19EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSkQxX1NDX0RCICovCisjZGVmaW5lIFdNODk5M19KRDFfREIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEpEMV9EQiAqLworI2RlZmluZSBXTTg5OTNfSkQxX0RCX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBKRDFfREIgKi8KKyNkZWZpbmUgV004OTkzX0pEMV9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogSkQxX0RCICovCisjZGVmaW5lIFdNODk5M19KRDFfREJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEpEMV9EQiAqLworI2RlZmluZSBXTTg5OTNfRkxMX0xPQ0tfREIgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBGTExfTE9DS19EQiAqLworI2RlZmluZSBXTTg5OTNfRkxMX0xPQ0tfREJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBGTExfTE9DS19EQiAqLworI2RlZmluZSBXTTg5OTNfRkxMX0xPQ0tfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBGTExfTE9DS19EQiAqLworI2RlZmluZSBXTTg5OTNfRkxMX0xPQ0tfREJfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfTE9DS19EQiAqLworI2RlZmluZSBXTTg5OTNfR1BJOF9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUEk4X0RCICovCisjZGVmaW5lIFdNODk5M19HUEk4X0RCX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSThfREIgKi8KKyNkZWZpbmUgV004OTkzX0dQSThfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogR1BJOF9EQiAqLworI2RlZmluZSBXTTg5OTNfR1BJOF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk4X0RCICovCisjZGVmaW5lIFdNODk5M19HUEk3X0RCICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEdQSTdfREIgKi8KKyNkZWZpbmUgV004OTkzX0dQSTdfREJfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1BJN19EQiAqLworI2RlZmluZSBXTTg5OTNfR1BJN19EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBHUEk3X0RCICovCisjZGVmaW5lIFdNODk5M19HUEk3X0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSTdfREIgKi8KKyNkZWZpbmUgV004OTkzX0dQSU8xX0RCICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogR1BJTzFfREIgKi8KKyNkZWZpbmUgV004OTkzX0dQSU8xX0RCX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogR1BJTzFfREIgKi8KKyNkZWZpbmUgV004OTkzX0dQSU8xX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1BJTzFfREIgKi8KKyNkZWZpbmUgV004OTkzX0dQSU8xX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzFfREIgKi8KKworLyoKKyAqIFIyMiAoMHgxNikgLSBHUElPQ1RSTCAyCisgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMl9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogSU1fSkQyX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMl9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogSU1fSkQyX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAxMyAgLyogSU1fSkQyX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fSkQyX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMl9TQ19FSU5UICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogSU1fSkQyX1NDX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMl9TQ19FSU5UX01BU0sgICAgICAgICAgICAgIDB4MTAwMCAgLyogSU1fSkQyX1NDX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMl9TQ19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAxMiAgLyogSU1fSkQyX1NDX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMl9TQ19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogSU1fSkQyX1NDX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX1RFTVBPS19FSU5UICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogSU1fVEVNUE9LX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX1RFTVBPS19FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDgwMCAgLyogSU1fVEVNUE9LX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX1RFTVBPS19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAxMSAgLyogSU1fVEVNUE9LX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX1RFTVBPS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogSU1fVEVNUE9LX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMV9TQ19FSU5UICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogSU1fSkQxX1NDX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMV9TQ19FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDQwMCAgLyogSU1fSkQxX1NDX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMV9TQ19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAxMCAgLyogSU1fSkQxX1NDX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMV9TQ19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogSU1fSkQxX1NDX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMV9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogSU1fSkQxX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMV9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogSU1fSkQxX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgOSAgLyogSU1fSkQxX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0pEMV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fSkQxX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0ZMTF9MT0NLX0VJTlQgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU1fRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfSU1fRkxMX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAgMHgwMTAwICAvKiBJTV9GTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5M19JTV9GTExfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgIDggIC8qIElNX0ZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0ZMTF9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU1fRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfSU1fR1BJOF9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTV9HUEk4X0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0dQSThfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU1fR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODk5M19JTV9HUEk4X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDYgIC8qIElNX0dQSThfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfSU1fR1BJOF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUEk4X0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0dQSU8xX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU1fR1BJTzFfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfSU1fR1BJTzFfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTV9HUElPMV9FSU5UICovCisjZGVmaW5lIFdNODk5M19JTV9HUElPMV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIElNX0dQSU8xX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0dQSU8xX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1BJTzFfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfR1BJOF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUEk4X0VOQSAqLworI2RlZmluZSBXTTg5OTNfR1BJOF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUEk4X0VOQSAqLworI2RlZmluZSBXTTg5OTNfR1BJOF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUEk4X0VOQSAqLworI2RlZmluZSBXTTg5OTNfR1BJOF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk4X0VOQSAqLworI2RlZmluZSBXTTg5OTNfSU1fR1BJN19FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTV9HUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX0dQSTdfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU1fR1BJN19FSU5UICovCisjZGVmaW5lIFdNODk5M19JTV9HUEk3X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIElNX0dQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfSU1fR1BJN19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX1dTRVFfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU1fV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODk5M19JTV9XU0VRX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElNX1dTRVFfRUlOVCAqLworI2RlZmluZSBXTTg5OTNfSU1fV1NFUV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9XU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTkzX0lNX1dTRVFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODk5M19HUEk3X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODk5M19HUEk3X0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODk5M19HUEk3X0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODk5M19HUEk3X0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSTdfRU5BICovCisKKy8qCisgKiBSMjMgKDB4MTcpIC0gR1BJT19QT0wKKyAqLworI2RlZmluZSBXTTg5OTNfSkQyX1NDX1BPTCAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBKRDJfU0NfUE9MICovCisjZGVmaW5lIFdNODk5M19KRDJfU0NfUE9MX01BU0sgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEpEMl9TQ19QT0wgKi8KKyNkZWZpbmUgV004OTkzX0pEMl9TQ19QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNSAgLyogSkQyX1NDX1BPTCAqLworI2RlZmluZSBXTTg5OTNfSkQyX1NDX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBKRDJfU0NfUE9MICovCisjZGVmaW5lIFdNODk5M19KRDJfUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEpEMl9QT0wgKi8KKyNkZWZpbmUgV004OTkzX0pEMl9QT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogSkQyX1BPTCAqLworI2RlZmluZSBXTTg5OTNfSkQyX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBKRDJfUE9MICovCisjZGVmaW5lIFdNODk5M19KRDJfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEpEMl9QT0wgKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfUE9MICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogV1NFUV9QT0wgKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfUE9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogV1NFUV9QT0wgKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogV1NFUV9QT0wgKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9QT0wgKi8KKyNkZWZpbmUgV004OTkzX0lSUV9QT0wgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogSVJRX1BPTCAqLworI2RlZmluZSBXTTg5OTNfSVJRX1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBJUlFfUE9MICovCisjZGVmaW5lIFdNODk5M19JUlFfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIElSUV9QT0wgKi8KKyNkZWZpbmUgV004OTkzX0lSUV9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSVJRX1BPTCAqLworI2RlZmluZSBXTTg5OTNfVEVNUE9LX1BPTCAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBURU1QT0tfUE9MICovCisjZGVmaW5lIFdNODk5M19URU1QT0tfUE9MX01BU0sgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFRFTVBPS19QT0wgKi8KKyNkZWZpbmUgV004OTkzX1RFTVBPS19QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxMSAgLyogVEVNUE9LX1BPTCAqLworI2RlZmluZSBXTTg5OTNfVEVNUE9LX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBURU1QT0tfUE9MICovCisjZGVmaW5lIFdNODk5M19KRDFfU0NfUE9MICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEpEMV9TQ19QT0wgKi8KKyNkZWZpbmUgV004OTkzX0pEMV9TQ19QT0xfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogSkQxX1NDX1BPTCAqLworI2RlZmluZSBXTTg5OTNfSkQxX1NDX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBKRDFfU0NfUE9MICovCisjZGVmaW5lIFdNODk5M19KRDFfU0NfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEpEMV9TQ19QT0wgKi8KKyNkZWZpbmUgV004OTkzX0pEMV9QT0wgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogSkQxX1BPTCAqLworI2RlZmluZSBXTTg5OTNfSkQxX1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBKRDFfUE9MICovCisjZGVmaW5lIFdNODk5M19KRDFfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEpEMV9QT0wgKi8KKyNkZWZpbmUgV004OTkzX0pEMV9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSkQxX1BPTCAqLworI2RlZmluZSBXTTg5OTNfRkxMX0xPQ0tfUE9MICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBGTExfTE9DS19QT0wgKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9MT0NLX1BPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRkxMX0xPQ0tfUE9MICovCisjZGVmaW5lIFdNODk5M19GTExfTE9DS19QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgIDggIC8qIEZMTF9MT0NLX1BPTCAqLworI2RlZmluZSBXTTg5OTNfRkxMX0xPQ0tfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfTE9DS19QT0wgKi8KKyNkZWZpbmUgV004OTkzX0dQSThfUE9MICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJOF9QT0wgKi8KKyNkZWZpbmUgV004OTkzX0dQSThfUE9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJOF9QT0wgKi8KKyNkZWZpbmUgV004OTkzX0dQSThfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogR1BJOF9QT0wgKi8KKyNkZWZpbmUgV004OTkzX0dQSThfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJOF9QT0wgKi8KKyNkZWZpbmUgV004OTkzX0dQSTdfUE9MICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJN19QT0wgKi8KKyNkZWZpbmUgV004OTkzX0dQSTdfUE9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJN19QT0wgKi8KKyNkZWZpbmUgV004OTkzX0dQSTdfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogR1BJN19QT0wgKi8KKyNkZWZpbmUgV004OTkzX0dQSTdfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJN19QT0wgKi8KKyNkZWZpbmUgV004OTkzX0dQSU8xX1BPTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogR1BJTzFfUE9MICovCisjZGVmaW5lIFdNODk5M19HUElPMV9QT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEdQSU8xX1BPTCAqLworI2RlZmluZSBXTTg5OTNfR1BJTzFfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUElPMV9QT0wgKi8KKyNkZWZpbmUgV004OTkzX0dQSU8xX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzFfUE9MICovCisKKy8qCisgKiBSMjQgKDB4MTgpIC0gTGVmdCBMaW5lIElucHV0IDEmMiBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTNfSU4xX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTkzX0lOMV9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU4xX1ZVICovCisjZGVmaW5lIFdNODk5M19JTjFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTNfSU4xX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTkzX0lOMUxfTVVURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4xTF9NVVRFICovCisjZGVmaW5lIFdNODk5M19JTjFMX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMUxfTVVURSAqLworI2RlZmluZSBXTTg5OTNfSU4xTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBJTjFMX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0lOMUxfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4xTF9NVVRFICovCisjZGVmaW5lIFdNODk5M19JTjFMX1pDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOMUxfWkMgKi8KKyNkZWZpbmUgV004OTkzX0lOMUxfWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU4xTF9aQyAqLworI2RlZmluZSBXTTg5OTNfSU4xTF9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBJTjFMX1pDICovCisjZGVmaW5lIFdNODk5M19JTjFMX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMUxfWkMgKi8KKyNkZWZpbmUgV004OTkzX0lOMUxfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogSU4xTF9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTNfSU4xTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBJTjFMX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5M19JTjFMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIElOMUxfVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIyNSAoMHgxOSkgLSBMZWZ0IExpbmUgSW5wdXQgMyY0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5M19JTjJfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMl9WVSAqLworI2RlZmluZSBXTTg5OTNfSU4yX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjJfVlUgKi8KKyNkZWZpbmUgV004OTkzX0lOMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSU4yX1ZVICovCisjZGVmaW5lIFdNODk5M19JTjJfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMl9WVSAqLworI2RlZmluZSBXTTg5OTNfSU4yTF9NVVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJMX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4yTF9NVVRFICovCisjZGVmaW5lIFdNODk5M19JTjJMX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIElOMkxfTVVURSAqLworI2RlZmluZSBXTTg5OTNfSU4yTF9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJMX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxfWkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU4yTF9aQyAqLworI2RlZmluZSBXTTg5OTNfSU4yTF9aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjJMX1pDICovCisjZGVmaW5lIFdNODk5M19JTjJMX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIElOMkxfWkMgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4yTF9aQyAqLworI2RlZmluZSBXTTg5OTNfSU4yTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBJTjJMX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5M19JTjJMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElOMkxfVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTkzX0lOMkxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogSU4yTF9WT0wgLSBbNDowXSAqLworCisvKgorICogUjI2ICgweDFBKSAtIFJpZ2h0IExpbmUgSW5wdXQgMSYyIFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5M19JTjFfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTNfSU4xX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTkzX0lOMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSU4xX1ZVICovCisjZGVmaW5lIFdNODk5M19JTjFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9NVVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjFSX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0lOMVJfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4xUl9NVVRFICovCisjZGVmaW5lIFdNODk5M19JTjFSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIElOMVJfTVVURSAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFSX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0lOMVJfWkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU4xUl9aQyAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjFSX1pDICovCisjZGVmaW5lIFdNODk5M19JTjFSX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIElOMVJfWkMgKi8KKyNkZWZpbmUgV004OTkzX0lOMVJfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4xUl9aQyAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBJTjFSX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5M19JTjFSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElOMVJfVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTkzX0lOMVJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogSU4xUl9WT0wgLSBbNDowXSAqLworCisvKgorICogUjI3ICgweDFCKSAtIFJpZ2h0IExpbmUgSW5wdXQgMyY0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5M19JTjJfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMl9WVSAqLworI2RlZmluZSBXTTg5OTNfSU4yX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjJfVlUgKi8KKyNkZWZpbmUgV004OTkzX0lOMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSU4yX1ZVICovCisjZGVmaW5lIFdNODk5M19JTjJfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMl9WVSAqLworI2RlZmluZSBXTTg5OTNfSU4yUl9NVVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJSX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0lOMlJfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4yUl9NVVRFICovCisjZGVmaW5lIFdNODk5M19JTjJSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIElOMlJfTVVURSAqLworI2RlZmluZSBXTTg5OTNfSU4yUl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJSX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0lOMlJfWkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU4yUl9aQyAqLworI2RlZmluZSBXTTg5OTNfSU4yUl9aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjJSX1pDICovCisjZGVmaW5lIFdNODk5M19JTjJSX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIElOMlJfWkMgKi8KKyNkZWZpbmUgV004OTkzX0lOMlJfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4yUl9aQyAqLworI2RlZmluZSBXTTg5OTNfSU4yUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBJTjJSX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5M19JTjJSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElOMlJfVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTkzX0lOMlJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogSU4yUl9WT0wgLSBbNDowXSAqLworCisvKgorICogUjI4ICgweDFDKSAtIExlZnQgT3V0cHV0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEhQT1VUMV9WVSAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVDFfVlUgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSFBPVVQxX1ZVICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMV9WVSAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxTF9aQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDFMX1pDICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFMX1pDX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMUxfWkMgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMUxfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogSFBPVVQxTF9aQyAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxTF9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFMX1pDICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFMX01VVEVfTiAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMUxfTVVURV9OICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFMX01VVEVfTl9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMUxfTVVURV9OICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFMX01VVEVfTl9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUMUxfTVVURV9OICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFMX01VVEVfTl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMUxfTVVURV9OICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwM0YgIC8qIEhQT1VUMUxfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMUxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBPVVQxTF9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVDFMX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSMjkgKDB4MUQpIC0gUmlnaHQgT3V0cHV0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEhQT1VUMV9WVSAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVDFfVlUgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSFBPVVQxX1ZVICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMV9WVSAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxUl9aQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDFSX1pDICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFSX1pDX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMVJfWkMgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMVJfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogSFBPVVQxUl9aQyAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxUl9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFSX1pDICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFSX01VVEVfTiAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMVJfTVVURV9OICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFSX01VVEVfTl9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMVJfTVVURV9OICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFSX01VVEVfTl9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUMVJfTVVURV9OICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFSX01VVEVfTl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfTVVURV9OICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwM0YgIC8qIEhQT1VUMVJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMVJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBPVVQxUl9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVDFSX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSMzAgKDB4MUUpIC0gTGluZSBPdXRwdXRzIFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMU5fTVVURSAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVQxTl9NVVRFICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMU5fTVVURV9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVQxTl9NVVRFICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMU5fTVVURV9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIExJTkVPVVQxTl9NVVRFICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMU5fTVVURV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQxTl9NVVRFICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMVBfTVVURSAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExJTkVPVVQxUF9NVVRFICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMVBfTVVURV9NQVNLICAgICAgICAgICAgICAweDAwMjAgIC8qIExJTkVPVVQxUF9NVVRFICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMVBfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgIDUgIC8qIExJTkVPVVQxUF9NVVRFICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMVBfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQxUF9NVVRFICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMV9WT0wgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExJTkVPVVQxX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDFfVk9MX01BU0sgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMSU5FT1VUMV9WT0wgKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQxX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgNCAgLyogTElORU9VVDFfVk9MICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMV9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQxX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJOX01VVEUgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMSU5FT1VUMk5fTVVURSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJOX01VVEVfTUFTSyAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMSU5FT1VUMk5fTVVURSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJOX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAyICAvKiBMSU5FT1VUMk5fTVVURSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJOX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMk5fTVVURSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJQX01VVEUgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBMSU5FT1VUMlBfTVVURSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJQX01VVEVfTUFTSyAgICAgICAgICAgICAgMHgwMDAyICAvKiBMSU5FT1VUMlBfTVVURSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJQX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMlBfTVVURSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJQX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMlBfTVVURSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJfVk9MICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMSU5FT1VUMl9WT0wgKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQyX1ZPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTElORU9VVDJfVk9MICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIExJTkVPVVQyX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMl9WT0wgKi8KKworLyoKKyAqIFIzMSAoMHgxRikgLSBIUE9VVDIgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMl9NVVRFICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBPVVQyX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMl9NVVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBPVVQyX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMl9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogSFBPVVQyX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyX01VVEUgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMl9WT0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSFBPVVQyX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQyX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBIUE9VVDJfVk9MICovCisjZGVmaW5lIFdNODk5M19IUE9VVDJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEhQT1VUMl9WT0wgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyX1ZPTCAqLworCisvKgorICogUjMyICgweDIwKSAtIExlZnQgT1BHQSBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUX1ZVICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBNSVhPVVRfVlUgKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVF9WVV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUlYT1VUX1ZVICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIE1JWE9VVF9WVSAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSVhPVVRfVlUgKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVExfWkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlYT1VUTF9aQyAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9aQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNSVhPVVRMX1pDICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIE1JWE9VVExfWkMgKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVExfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlYT1VUTF9aQyAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9NVVRFX04gICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNSVhPVVRMX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9NVVRFX05fTUFTSyAgICAgICAgICAgICAgMHgwMDQwICAvKiBNSVhPVVRMX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9NVVRFX05fU0hJRlQgICAgICAgICAgICAgICAgICA2ICAvKiBNSVhPVVRMX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9NVVRFX05fV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBNSVhPVVRMX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDNGICAvKiBNSVhPVVRMX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JWE9VVExfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVExfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNiAgLyogTUlYT1VUTF9WT0wgLSBbNTowXSAqLworCisvKgorICogUjMzICgweDIxKSAtIFJpZ2h0IE9QR0EgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUlYT1VUX1ZVICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE1JWE9VVF9WVSAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBNSVhPVVRfVlUgKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlYT1VUX1ZVICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSX1pDICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1JWE9VVFJfWkMgKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVFJfWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlYT1VUUl9aQyAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBNSVhPVVRSX1pDICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWE9VVFJfWkMgKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVFJfTVVURV9OICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYT1VUUl9NVVRFX04gKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVFJfTVVURV9OX01BU0sgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYT1VUUl9NVVRFX04gKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVFJfTVVURV9OX1NISUZUICAgICAgICAgICAgICAgICAgNiAgLyogTUlYT1VUUl9NVVRFX04gKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVFJfTVVURV9OX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogTUlYT1VUUl9NVVRFX04gKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVFJfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAzRiAgLyogTUlYT1VUUl9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBNSVhPVVRSX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDYgIC8qIE1JWE9VVFJfVk9MIC0gWzU6MF0gKi8KKworLyoKKyAqIFIzNCAoMHgyMikgLSBTUEtNSVhMIEF0dGVudWF0aW9uCisgKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9TUEtNSVhMX1ZPTCAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlYSU5MX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5M19NSVhJTkxfU1BLTUlYTF9WT0xfTUFTSyAgICAgICAgICAweDAwMjAgIC8qIE1JWElOTF9TUEtNSVhMX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfTUlYSU5MX1NQS01JWExfVk9MX1NISUZUICAgICAgICAgICAgICA1ICAvKiBNSVhJTkxfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9TUEtNSVhMX1ZPTF9XSURUSCAgICAgICAgICAgICAgMSAgLyogTUlYSU5MX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5M19JTjFMUF9TUEtNSVhMX1ZPTCAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElOMUxQX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5M19JTjFMUF9TUEtNSVhMX1ZPTF9NQVNLICAgICAgICAgICAweDAwMTAgIC8qIElOMUxQX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5M19JTjFMUF9TUEtNSVhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDQgIC8qIElOMUxQX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5M19JTjFMUF9TUEtNSVhMX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElOMUxQX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX1NQS01JWExfVk9MICAgICAgICAgICAgICAweDAwMDggIC8qIE1JWE9VVExfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVExfU1BLTUlYTF9WT0xfTUFTSyAgICAgICAgIDB4MDAwOCAgLyogTUlYT1VUTF9TUEtNSVhMX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9TUEtNSVhMX1ZPTF9TSElGVCAgICAgICAgICAgICAzICAvKiBNSVhPVVRMX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX1NQS01JWExfVk9MX1dJRFRIICAgICAgICAgICAgIDEgIC8qIE1JWE9VVExfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0xfU1BLTUlYTF9WT0wgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDTF9TUEtNSVhMX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfREFDTF9TUEtNSVhMX1ZPTF9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUNMX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5M19EQUNMX1NQS01JWExfVk9MX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIERBQ0xfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0xfU1BLTUlYTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogREFDTF9TUEtNSVhMX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfU1BLTUlYTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBTUEtNSVhMX1ZPTCAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5M19TUEtNSVhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS01JWExfVk9MIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTkzX1NQS01JWExfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogU1BLTUlYTF9WT0wgLSBbMTowXSAqLworCisvKgorICogUjM1ICgweDIzKSAtIFNQS01JWFIgQXR0ZW51YXRpb24KKyAqLworI2RlZmluZSBXTTg5OTNfU1BLT1VUX0NMQVNTQUJfTU9ERSAgICAgICAgICAgICAgMHgwMTAwICAvKiBTUEtPVVRfQ0xBU1NBQl9NT0RFICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRfQ0xBU1NBQl9NT0RFX01BU0sgICAgICAgICAweDAxMDAgIC8qIFNQS09VVF9DTEFTU0FCX01PREUgKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVF9DTEFTU0FCX01PREVfU0hJRlQgICAgICAgICAgICAgOCAgLyogU1BLT1VUX0NMQVNTQUJfTU9ERSAqLworI2RlZmluZSBXTTg5OTNfU1BLT1VUX0NMQVNTQUJfTU9ERV9XSURUSCAgICAgICAgICAgICAxICAvKiBTUEtPVVRfQ0xBU1NBQl9NT0RFICovCisjZGVmaW5lIFdNODk5M19NSVhJTlJfU1BLTUlYUl9WT0wgICAgICAgICAgICAgICAweDAwMjAgIC8qIE1JWElOUl9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfTUlYSU5SX1NQS01JWFJfVk9MX01BU0sgICAgICAgICAgMHgwMDIwICAvKiBNSVhJTlJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9TUEtNSVhSX1ZPTF9TSElGVCAgICAgICAgICAgICAgNSAgLyogTUlYSU5SX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5M19NSVhJTlJfU1BLTUlYUl9WT0xfV0lEVEggICAgICAgICAgICAgIDEgIC8qIE1JWElOUl9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfSU4xUlBfU1BLTUlYUl9WT0wgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFSUF9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfSU4xUlBfU1BLTUlYUl9WT0xfTUFTSyAgICAgICAgICAgMHgwMDEwICAvKiBJTjFSUF9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfSU4xUlBfU1BLTUlYUl9WT0xfU0hJRlQgICAgICAgICAgICAgICA0ICAvKiBJTjFSUF9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfSU4xUlBfU1BLTUlYUl9WT0xfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTjFSUF9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9TUEtNSVhSX1ZPTCAgICAgICAgICAgICAgMHgwMDA4ICAvKiBNSVhPVVRSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSX1NQS01JWFJfVk9MX01BU0sgICAgICAgICAweDAwMDggIC8qIE1JWE9VVFJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVFJfU1BLTUlYUl9WT0xfU0hJRlQgICAgICAgICAgICAgMyAgLyogTUlYT1VUUl9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9TUEtNSVhSX1ZPTF9XSURUSCAgICAgICAgICAgICAxICAvKiBNSVhPVVRSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5M19EQUNSX1NQS01JWFJfVk9MICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQ1JfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTkzX0RBQ1JfU1BLTUlYUl9WT0xfTUFTSyAgICAgICAgICAgIDB4MDAwNCAgLyogREFDUl9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfREFDUl9TUEtNSVhSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAyICAvKiBEQUNSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5M19EQUNSX1NQS01JWFJfVk9MX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERBQ1JfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTkzX1NQS01JWFJfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogU1BLTUlYUl9WT0wgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTNfU1BLTUlYUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBTUEtNSVhSX1ZPTCAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5M19TUEtNSVhSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFNQS01JWFJfVk9MIC0gWzE6MF0gKi8KKworLyoKKyAqIFIzNiAoMHgyNCkgLSBTUEtPVVQgTWl4ZXJzCisgKi8KKyNkZWZpbmUgV004OTkzX1ZSWF9UT19TUEtPVVRMICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogVlJYX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTkzX1ZSWF9UT19TUEtPVVRMX01BU0sgICAgICAgICAgICAgIDB4MDAyMCAgLyogVlJYX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTkzX1ZSWF9UT19TUEtPVVRMX1NISUZUICAgICAgICAgICAgICAgICAgNSAgLyogVlJYX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTkzX1ZSWF9UT19TUEtPVVRMX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogVlJYX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTkzX1NQS01JWExfVE9fU1BLT1VUTCAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU1BLTUlYTF9UT19TUEtPVVRMICovCisjZGVmaW5lIFdNODk5M19TUEtNSVhMX1RPX1NQS09VVExfTUFTSyAgICAgICAgICAweDAwMTAgIC8qIFNQS01JWExfVE9fU1BLT1VUTCAqLworI2RlZmluZSBXTTg5OTNfU1BLTUlYTF9UT19TUEtPVVRMX1NISUZUICAgICAgICAgICAgICA0ICAvKiBTUEtNSVhMX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTkzX1NQS01JWExfVE9fU1BLT1VUTF9XSURUSCAgICAgICAgICAgICAgMSAgLyogU1BLTUlYTF9UT19TUEtPVVRMICovCisjZGVmaW5lIFdNODk5M19TUEtNSVhSX1RPX1NQS09VVEwgICAgICAgICAgICAgICAweDAwMDggIC8qIFNQS01JWFJfVE9fU1BLT1VUTCAqLworI2RlZmluZSBXTTg5OTNfU1BLTUlYUl9UT19TUEtPVVRMX01BU0sgICAgICAgICAgMHgwMDA4ICAvKiBTUEtNSVhSX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTkzX1NQS01JWFJfVE9fU1BLT1VUTF9TSElGVCAgICAgICAgICAgICAgMyAgLyogU1BLTUlYUl9UT19TUEtPVVRMICovCisjZGVmaW5lIFdNODk5M19TUEtNSVhSX1RPX1NQS09VVExfV0lEVEggICAgICAgICAgICAgIDEgIC8qIFNQS01JWFJfVE9fU1BLT1VUTCAqLworI2RlZmluZSBXTTg5OTNfVlJYX1RPX1NQS09VVFIgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBWUlhfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTNfVlJYX1RPX1NQS09VVFJfTUFTSyAgICAgICAgICAgICAgMHgwMDA0ICAvKiBWUlhfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTNfVlJYX1RPX1NQS09VVFJfU0hJRlQgICAgICAgICAgICAgICAgICAyICAvKiBWUlhfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTNfVlJYX1RPX1NQS09VVFJfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBWUlhfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTNfU1BLTUlYTF9UT19TUEtPVVRSICAgICAgICAgICAgICAgMHgwMDAyICAvKiBTUEtNSVhMX1RPX1NQS09VVFIgKi8KKyNkZWZpbmUgV004OTkzX1NQS01JWExfVE9fU1BLT1VUUl9NQVNLICAgICAgICAgIDB4MDAwMiAgLyogU1BLTUlYTF9UT19TUEtPVVRSICovCisjZGVmaW5lIFdNODk5M19TUEtNSVhMX1RPX1NQS09VVFJfU0hJRlQgICAgICAgICAgICAgIDEgIC8qIFNQS01JWExfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTNfU1BLTUlYTF9UT19TUEtPVVRSX1dJRFRIICAgICAgICAgICAgICAxICAvKiBTUEtNSVhMX1RPX1NQS09VVFIgKi8KKyNkZWZpbmUgV004OTkzX1NQS01JWFJfVE9fU1BLT1VUUiAgICAgICAgICAgICAgIDB4MDAwMSAgLyogU1BLTUlYUl9UT19TUEtPVVRSICovCisjZGVmaW5lIFdNODk5M19TUEtNSVhSX1RPX1NQS09VVFJfTUFTSyAgICAgICAgICAweDAwMDEgIC8qIFNQS01JWFJfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTNfU1BLTUlYUl9UT19TUEtPVVRSX1NISUZUICAgICAgICAgICAgICAwICAvKiBTUEtNSVhSX1RPX1NQS09VVFIgKi8KKyNkZWZpbmUgV004OTkzX1NQS01JWFJfVE9fU1BLT1VUUl9XSURUSCAgICAgICAgICAgICAgMSAgLyogU1BLTUlYUl9UT19TUEtPVVRSICovCisKKy8qCisgKiBSMzcgKDB4MjUpIC0gU1BLT1VUIEJvb3N0CisgKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVExfQk9PU1RfTUFTSyAgICAgICAgICAgICAgIDB4MDAzOCAgLyogU1BLT1VUTF9CT09TVCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRMX0JPT1NUX1NISUZUICAgICAgICAgICAgICAgICAgIDMgIC8qIFNQS09VVExfQk9PU1QgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTNfU1BLT1VUTF9CT09TVF9XSURUSCAgICAgICAgICAgICAgICAgICAzICAvKiBTUEtPVVRMX0JPT1NUIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVFJfQk9PU1RfTUFTSyAgICAgICAgICAgICAgIDB4MDAwNyAgLyogU1BLT1VUUl9CT09TVCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRSX0JPT1NUX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS09VVFJfQk9PU1QgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTNfU1BLT1VUUl9CT09TVF9XSURUSCAgICAgICAgICAgICAgICAgICAzICAvKiBTUEtPVVRSX0JPT1NUIC0gWzI6MF0gKi8KKworLyoKKyAqIFIzOCAoMHgyNikgLSBTcGVha2VyIFZvbHVtZSBMZWZ0CisgKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogU1BLT1VUX1ZVICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNQS09VVF9WVSAqLworI2RlZmluZSBXTTg5OTNfU1BLT1VUX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBTUEtPVVRfVlUgKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLT1VUX1ZVICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRMX1pDICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFNQS09VVExfWkMgKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVExfWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogU1BLT1VUTF9aQyAqLworI2RlZmluZSBXTTg5OTNfU1BLT1VUTF9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBTUEtPVVRMX1pDICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRMX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS09VVExfWkMgKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVExfTVVURV9OICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogU1BLT1VUTF9NVVRFX04gKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVExfTVVURV9OX01BU0sgICAgICAgICAgICAgIDB4MDA0MCAgLyogU1BLT1VUTF9NVVRFX04gKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVExfTVVURV9OX1NISUZUICAgICAgICAgICAgICAgICAgNiAgLyogU1BLT1VUTF9NVVRFX04gKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVExfTVVURV9OX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogU1BLT1VUTF9NVVRFX04gKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVExfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAzRiAgLyogU1BLT1VUTF9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTNfU1BLT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBTUEtPVVRMX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFNQS09VVExfVk9MIC0gWzU6MF0gKi8KKworLyoKKyAqIFIzOSAoMHgyNykgLSBTcGVha2VyIFZvbHVtZSBSaWdodAorICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNQS09VVF9WVSAqLworI2RlZmluZSBXTTg5OTNfU1BLT1VUX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBTUEtPVVRfVlUgKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogU1BLT1VUX1ZVICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS09VVF9WVSAqLworI2RlZmluZSBXTTg5OTNfU1BLT1VUUl9aQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBTUEtPVVRSX1pDICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRSX1pDX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFNQS09VVFJfWkMgKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVFJfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogU1BLT1VUUl9aQyAqLworI2RlZmluZSBXTTg5OTNfU1BLT1VUUl9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtPVVRSX1pDICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRSX01VVEVfTiAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFNQS09VVFJfTVVURV9OICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRSX01VVEVfTl9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIFNQS09VVFJfTVVURV9OICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRSX01VVEVfTl9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIFNQS09VVFJfTVVURV9OICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRSX01VVEVfTl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS09VVFJfTVVURV9OICovCisjZGVmaW5lIFdNODk5M19TUEtPVVRSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwM0YgIC8qIFNQS09VVFJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTkzX1NQS09VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1BLT1VUUl9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTNfU1BLT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA2ICAvKiBTUEtPVVRSX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSNDAgKDB4MjgpIC0gSW5wdXQgTWl4ZXIyCisgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxQX1RPX0lOMkwgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4yTFBfVE9fSU4yTCAqLworI2RlZmluZSBXTTg5OTNfSU4yTFBfVE9fSU4yTF9NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJMUF9UT19JTjJMICovCisjZGVmaW5lIFdNODk5M19JTjJMUF9UT19JTjJMX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIElOMkxQX1RPX0lOMkwgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxQX1RPX0lOMkxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU4yTFBfVE9fSU4yTCAqLworI2RlZmluZSBXTTg5OTNfSU4yTE5fVE9fSU4yTCAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjJMTl9UT19JTjJMICovCisjZGVmaW5lIFdNODk5M19JTjJMTl9UT19JTjJMX01BU0sgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOMkxOX1RPX0lOMkwgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxOX1RPX0lOMkxfU0hJRlQgICAgICAgICAgICAgICAgICAgNiAgLyogSU4yTE5fVE9fSU4yTCAqLworI2RlZmluZSBXTTg5OTNfSU4yTE5fVE9fSU4yTF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJMTl9UT19JTjJMICovCisjZGVmaW5lIFdNODk5M19JTjFMUF9UT19JTjFMICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMUxQX1RPX0lOMUwgKi8KKyNkZWZpbmUgV004OTkzX0lOMUxQX1RPX0lOMUxfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4xTFBfVE9fSU4xTCAqLworI2RlZmluZSBXTTg5OTNfSU4xTFBfVE9fSU4xTF9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBJTjFMUF9UT19JTjFMICovCisjZGVmaW5lIFdNODk5M19JTjFMUF9UT19JTjFMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMUxQX1RPX0lOMUwgKi8KKyNkZWZpbmUgV004OTkzX0lOMUxOX1RPX0lOMUwgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU4xTE5fVE9fSU4xTCAqLworI2RlZmluZSBXTTg5OTNfSU4xTE5fVE9fSU4xTF9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFMTl9UT19JTjFMICovCisjZGVmaW5lIFdNODk5M19JTjFMTl9UT19JTjFMX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIElOMUxOX1RPX0lOMUwgKi8KKyNkZWZpbmUgV004OTkzX0lOMUxOX1RPX0lOMUxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU4xTE5fVE9fSU4xTCAqLworI2RlZmluZSBXTTg5OTNfSU4yUlBfVE9fSU4yUiAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTjJSUF9UT19JTjJSICovCisjZGVmaW5lIFdNODk5M19JTjJSUF9UT19JTjJSX01BU0sgICAgICAgICAgICAgICAweDAwMDggIC8qIElOMlJQX1RPX0lOMlIgKi8KKyNkZWZpbmUgV004OTkzX0lOMlJQX1RPX0lOMlJfU0hJRlQgICAgICAgICAgICAgICAgICAgMyAgLyogSU4yUlBfVE9fSU4yUiAqLworI2RlZmluZSBXTTg5OTNfSU4yUlBfVE9fSU4yUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJSUF9UT19JTjJSICovCisjZGVmaW5lIFdNODk5M19JTjJSTl9UT19JTjJSICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIElOMlJOX1RPX0lOMlIgKi8KKyNkZWZpbmUgV004OTkzX0lOMlJOX1RPX0lOMlJfTUFTSyAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU4yUk5fVE9fSU4yUiAqLworI2RlZmluZSBXTTg5OTNfSU4yUk5fVE9fSU4yUl9TSElGVCAgICAgICAgICAgICAgICAgICAyICAvKiBJTjJSTl9UT19JTjJSICovCisjZGVmaW5lIFdNODk5M19JTjJSTl9UT19JTjJSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMlJOX1RPX0lOMlIgKi8KKyNkZWZpbmUgV004OTkzX0lOMVJQX1RPX0lOMVIgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU4xUlBfVE9fSU4xUiAqLworI2RlZmluZSBXTTg5OTNfSU4xUlBfVE9fSU4xUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAyICAvKiBJTjFSUF9UT19JTjFSICovCisjZGVmaW5lIFdNODk5M19JTjFSUF9UT19JTjFSX1NISUZUICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMVJQX1RPX0lOMVIgKi8KKyNkZWZpbmUgV004OTkzX0lOMVJQX1RPX0lOMVJfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU4xUlBfVE9fSU4xUiAqLworI2RlZmluZSBXTTg5OTNfSU4xUk5fVE9fSU4xUiAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTjFSTl9UT19JTjFSICovCisjZGVmaW5lIFdNODk5M19JTjFSTl9UT19JTjFSX01BU0sgICAgICAgICAgICAgICAweDAwMDEgIC8qIElOMVJOX1RPX0lOMVIgKi8KKyNkZWZpbmUgV004OTkzX0lOMVJOX1RPX0lOMVJfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogSU4xUk5fVE9fSU4xUiAqLworI2RlZmluZSBXTTg5OTNfSU4xUk5fVE9fSU4xUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFSTl9UT19JTjFSICovCisKKy8qCisgKiBSNDEgKDB4MjkpIC0gSW5wdXQgTWl4ZXIzCisgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxfVE9fTUlYSU5MICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU4yTF9UT19NSVhJTkwgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxfVE9fTUlYSU5MX01BU0sgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU4yTF9UT19NSVhJTkwgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxfVE9fTUlYSU5MX1NISUZUICAgICAgICAgICAgICAgICAgOCAgLyogSU4yTF9UT19NSVhJTkwgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxfVE9fTUlYSU5MX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogSU4yTF9UT19NSVhJTkwgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxfTUlYSU5MX1ZPTCAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4yTF9NSVhJTkxfVk9MICovCisjZGVmaW5lIFdNODk5M19JTjJMX01JWElOTF9WT0xfTUFTSyAgICAgICAgICAgICAweDAwODAgIC8qIElOMkxfTUlYSU5MX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfSU4yTF9NSVhJTkxfVk9MX1NISUZUICAgICAgICAgICAgICAgICA3ICAvKiBJTjJMX01JWElOTF9WT0wgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxfTUlYSU5MX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogSU4yTF9NSVhJTkxfVk9MICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX01JWElOTCAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMUxfVE9fTUlYSU5MICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX01JWElOTF9NQVNLICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMUxfVE9fTUlYSU5MICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX01JWElOTF9TSElGVCAgICAgICAgICAgICAgICAgIDUgIC8qIElOMUxfVE9fTUlYSU5MICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX01JWElOTF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIElOMUxfVE9fTUlYSU5MICovCisjZGVmaW5lIFdNODk5M19JTjFMX01JWElOTF9WT0wgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElOMUxfTUlYSU5MX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfSU4xTF9NSVhJTkxfVk9MX01BU0sgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFMX01JWElOTF9WT0wgKi8KKyNkZWZpbmUgV004OTkzX0lOMUxfTUlYSU5MX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgNCAgLyogSU4xTF9NSVhJTkxfVk9MICovCisjZGVmaW5lIFdNODk5M19JTjFMX01JWElOTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElOMUxfTUlYSU5MX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9NSVhJTkxfVk9MX01BU0sgICAgICAgICAgMHgwMDA3ICAvKiBNSVhPVVRMX01JWElOTF9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9NSVhJTkxfVk9MX1NISUZUICAgICAgICAgICAgICAwICAvKiBNSVhPVVRMX01JWElOTF9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9NSVhJTkxfVk9MX1dJRFRIICAgICAgICAgICAgICAzICAvKiBNSVhPVVRMX01JWElOTF9WT0wgLSBbMjowXSAqLworCisvKgorICogUjQyICgweDJBKSAtIElucHV0IE1peGVyNAorICovCisjZGVmaW5lIFdNODk5M19JTjJSX1RPX01JWElOUiAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMlJfVE9fTUlYSU5SICovCisjZGVmaW5lIFdNODk5M19JTjJSX1RPX01JWElOUl9NQVNLICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMlJfVE9fTUlYSU5SICovCisjZGVmaW5lIFdNODk5M19JTjJSX1RPX01JWElOUl9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIElOMlJfVE9fTUlYSU5SICovCisjZGVmaW5lIFdNODk5M19JTjJSX1RPX01JWElOUl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIElOMlJfVE9fTUlYSU5SICovCisjZGVmaW5lIFdNODk5M19JTjJSX01JWElOUl9WT0wgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMlJfTUlYSU5SX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfSU4yUl9NSVhJTlJfVk9MX01BU0sgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJSX01JWElOUl9WT0wgKi8KKyNkZWZpbmUgV004OTkzX0lOMlJfTUlYSU5SX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgNyAgLyogSU4yUl9NSVhJTlJfVk9MICovCisjZGVmaW5lIFdNODk5M19JTjJSX01JWElOUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElOMlJfTUlYSU5SX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9UT19NSVhJTlIgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjFSX1RPX01JWElOUiAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9UT19NSVhJTlJfTUFTSyAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjFSX1RPX01JWElOUiAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9UT19NSVhJTlJfU0hJRlQgICAgICAgICAgICAgICAgICA1ICAvKiBJTjFSX1RPX01JWElOUiAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9UT19NSVhJTlJfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBJTjFSX1RPX01JWElOUiAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9NSVhJTlJfVk9MICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFSX01JWElOUl9WT0wgKi8KKyNkZWZpbmUgV004OTkzX0lOMVJfTUlYSU5SX1ZPTF9NQVNLICAgICAgICAgICAgIDB4MDAxMCAgLyogSU4xUl9NSVhJTlJfVk9MICovCisjZGVmaW5lIFdNODk5M19JTjFSX01JWElOUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgIDQgIC8qIElOMVJfTUlYSU5SX1ZPTCAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9NSVhJTlJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTjFSX01JWElOUl9WT0wgKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVFJfTUlYSU5SX1ZPTF9NQVNLICAgICAgICAgIDB4MDAwNyAgLyogTUlYT1VUUl9NSVhJTlJfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVFJfTUlYSU5SX1ZPTF9TSElGVCAgICAgICAgICAgICAgMCAgLyogTUlYT1VUUl9NSVhJTlJfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVFJfTUlYSU5SX1ZPTF9XSURUSCAgICAgICAgICAgICAgMyAgLyogTUlYT1VUUl9NSVhJTlJfVk9MIC0gWzI6MF0gKi8KKworLyoKKyAqIFI0MyAoMHgyQikgLSBJbnB1dCBNaXhlcjUKKyAqLworI2RlZmluZSBXTTg5OTNfSU4xTFBfTUlYSU5MX1ZPTF9NQVNLICAgICAgICAgICAgMHgwMUMwICAvKiBJTjFMUF9NSVhJTkxfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTkzX0lOMUxQX01JWElOTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgNiAgLyogSU4xTFBfTUlYSU5MX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5M19JTjFMUF9NSVhJTkxfVk9MX1dJRFRIICAgICAgICAgICAgICAgIDMgIC8qIElOMUxQX01JWElOTF9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTNfVlJYX01JWElOTF9WT0xfTUFTSyAgICAgICAgICAgICAgMHgwMDA3ICAvKiBWUlhfTUlYSU5MX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5M19WUlhfTUlYSU5MX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIFZSWF9NSVhJTkxfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkzX1ZSWF9NSVhJTkxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgMyAgLyogVlJYX01JWElOTF9WT0wgLSBbMjowXSAqLworCisvKgorICogUjQ0ICgweDJDKSAtIElucHV0IE1peGVyNgorICovCisjZGVmaW5lIFdNODk5M19JTjFSUF9NSVhJTlJfVk9MX01BU0sgICAgICAgICAgICAweDAxQzAgIC8qIElOMVJQX01JWElOUl9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTNfSU4xUlBfTUlYSU5SX1ZPTF9TSElGVCAgICAgICAgICAgICAgICA2ICAvKiBJTjFSUF9NSVhJTlJfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTkzX0lOMVJQX01JWElOUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgMyAgLyogSU4xUlBfTUlYSU5SX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5M19WUlhfTUlYSU5SX1ZPTF9NQVNLICAgICAgICAgICAgICAweDAwMDcgIC8qIFZSWF9NSVhJTlJfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkzX1ZSWF9NSVhJTlJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogVlJYX01JWElOUl9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTNfVlJYX01JWElOUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAzICAvKiBWUlhfTUlYSU5SX1ZPTCAtIFsyOjBdICovCisKKy8qCisgKiBSNDUgKDB4MkQpIC0gT3V0cHV0IE1peGVyMQorICovCisjZGVmaW5lIFdNODk5M19EQUNMX1RPX0hQT1VUMUwgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ0xfVE9fSFBPVVQxTCAqLworI2RlZmluZSBXTTg5OTNfREFDTF9UT19IUE9VVDFMX01BU0sgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNMX1RPX0hQT1VUMUwgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0xfVE9fSFBPVVQxTF9TSElGVCAgICAgICAgICAgICAgICAgOCAgLyogREFDTF9UT19IUE9VVDFMICovCisjZGVmaW5lIFdNODk5M19EQUNMX1RPX0hQT1VUMUxfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfVE9fSFBPVVQxTCAqLworI2RlZmluZSBXTTg5OTNfTUlYSU5SX1RPX01JWE9VVEwgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNSVhJTlJfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfTUlYSU5SX1RPX01JWE9VVExfTUFTSyAgICAgICAgICAgMHgwMDgwICAvKiBNSVhJTlJfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfTUlYSU5SX1RPX01JWE9VVExfU0hJRlQgICAgICAgICAgICAgICA3ICAvKiBNSVhJTlJfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfTUlYSU5SX1RPX01JWE9VVExfV0lEVEggICAgICAgICAgICAgICAxICAvKiBNSVhJTlJfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfTUlYSU5MX1RPX01JWE9VVEwgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNSVhJTkxfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfTUlYSU5MX1RPX01JWE9VVExfTUFTSyAgICAgICAgICAgMHgwMDQwICAvKiBNSVhJTkxfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfTUlYSU5MX1RPX01JWE9VVExfU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBNSVhJTkxfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfTUlYSU5MX1RPX01JWE9VVExfV0lEVEggICAgICAgICAgICAgICAxICAvKiBNSVhJTkxfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfSU4yUk5fVE9fTUlYT1VUTCAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjJSTl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5M19JTjJSTl9UT19NSVhPVVRMX01BU0sgICAgICAgICAgICAweDAwMjAgIC8qIElOMlJOX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTkzX0lOMlJOX1RPX01JWE9VVExfU0hJRlQgICAgICAgICAgICAgICAgNSAgLyogSU4yUk5fVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfSU4yUk5fVE9fTUlYT1VUTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBJTjJSTl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5M19JTjJMTl9UT19NSVhPVVRMICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElOMkxOX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxOX1RPX01JWE9VVExfTUFTSyAgICAgICAgICAgIDB4MDAxMCAgLyogSU4yTE5fVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfSU4yTE5fVE9fTUlYT1VUTF9TSElGVCAgICAgICAgICAgICAgICA0ICAvKiBJTjJMTl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5M19JTjJMTl9UT19NSVhPVVRMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElOMkxOX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTkzX0lOMVJfVE9fTUlYT1VUTCAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSU4xUl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5M19JTjFSX1RPX01JWE9VVExfTUFTSyAgICAgICAgICAgICAweDAwMDggIC8qIElOMVJfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9UT19NSVhPVVRMX1NISUZUICAgICAgICAgICAgICAgICAzICAvKiBJTjFSX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTkzX0lOMVJfVE9fTUlYT1VUTF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogSU4xUl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX01JWE9VVEwgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIElOMUxfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfSU4xTF9UT19NSVhPVVRMX01BU0sgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTjFMX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTkzX0lOMUxfVE9fTUlYT1VUTF9TSElGVCAgICAgICAgICAgICAgICAgMiAgLyogSU4xTF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX01JWE9VVExfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElOMUxfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfSU4yTFBfVE9fTUlYT1VUTCAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBJTjJMUF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5M19JTjJMUF9UT19NSVhPVVRMX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIElOMkxQX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxQX1RPX01JWE9VVExfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogSU4yTFBfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfSU4yTFBfVE9fTUlYT1VUTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBJTjJMUF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5M19EQUNMX1RPX01JWE9VVEwgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ0xfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTNfREFDTF9UT19NSVhPVVRMX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNMX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0xfVE9fTUlYT1VUTF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogREFDTF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5M19EQUNMX1RPX01JWE9VVExfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfVE9fTUlYT1VUTCAqLworCisvKgorICogUjQ2ICgweDJFKSAtIE91dHB1dCBNaXhlcjIKKyAqLworI2RlZmluZSBXTTg5OTNfREFDUl9UT19IUE9VVDFSICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNSX1RPX0hQT1VUMVIgKi8KKyNkZWZpbmUgV004OTkzX0RBQ1JfVE9fSFBPVVQxUl9NQVNLICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDUl9UT19IUE9VVDFSICovCisjZGVmaW5lIFdNODk5M19EQUNSX1RPX0hQT1VUMVJfU0hJRlQgICAgICAgICAgICAgICAgIDggIC8qIERBQ1JfVE9fSFBPVVQxUiAqLworI2RlZmluZSBXTTg5OTNfREFDUl9UT19IUE9VVDFSX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBEQUNSX1RPX0hQT1VUMVIgKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9UT19NSVhPVVRSICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlYSU5MX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9UT19NSVhPVVRSX01BU0sgICAgICAgICAgIDB4MDA4MCAgLyogTUlYSU5MX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9UT19NSVhPVVRSX1NISUZUICAgICAgICAgICAgICAgNyAgLyogTUlYSU5MX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9UT19NSVhPVVRSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogTUlYSU5MX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9UT19NSVhPVVRSICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYSU5SX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9UT19NSVhPVVRSX01BU0sgICAgICAgICAgIDB4MDA0MCAgLyogTUlYSU5SX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9UT19NSVhPVVRSX1NISUZUICAgICAgICAgICAgICAgNiAgLyogTUlYSU5SX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9UT19NSVhPVVRSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogTUlYSU5SX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxOX1RPX01JWE9VVFIgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4yTE5fVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTNfSU4yTE5fVE9fTUlYT1VUUl9NQVNLICAgICAgICAgICAgMHgwMDIwICAvKiBJTjJMTl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5M19JTjJMTl9UT19NSVhPVVRSX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIElOMkxOX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxOX1RPX01JWE9VVFJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU4yTE5fVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTNfSU4yUk5fVE9fTUlYT1VUUiAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjJSTl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5M19JTjJSTl9UT19NSVhPVVRSX01BU0sgICAgICAgICAgICAweDAwMTAgIC8qIElOMlJOX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX0lOMlJOX1RPX01JWE9VVFJfU0hJRlQgICAgICAgICAgICAgICAgNCAgLyogSU4yUk5fVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTNfSU4yUk5fVE9fTUlYT1VUUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBJTjJSTl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX01JWE9VVFIgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIElOMUxfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTNfSU4xTF9UT19NSVhPVVRSX01BU0sgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTjFMX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX0lOMUxfVE9fTUlYT1VUUl9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogSU4xTF9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX01JWE9VVFJfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElOMUxfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9UT19NSVhPVVRSICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTjFSX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX0lOMVJfVE9fTUlYT1VUUl9NQVNLICAgICAgICAgICAgIDB4MDAwNCAgLyogSU4xUl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5M19JTjFSX1RPX01JWE9VVFJfU0hJRlQgICAgICAgICAgICAgICAgIDIgIC8qIElOMVJfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9UT19NSVhPVVRSX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTjFSX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX0lOMlJQX1RPX01JWE9VVFIgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU4yUlBfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTNfSU4yUlBfVE9fTUlYT1VUUl9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBJTjJSUF9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5M19JTjJSUF9UT19NSVhPVVRSX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIElOMlJQX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX0lOMlJQX1RPX01JWE9VVFJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU4yUlBfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTNfREFDUl9UT19NSVhPVVRSICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNSX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTkzX0RBQ1JfVE9fTUlYT1VUUl9NQVNLICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDUl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5M19EQUNSX1RPX01JWE9VVFJfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIERBQ1JfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTNfREFDUl9UT19NSVhPVVRSX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBEQUNSX1RPX01JWE9VVFIgKi8KKworLyoKKyAqIFI0NyAoMHgyRikgLSBPdXRwdXQgTWl4ZXIzCisgKi8KKyNkZWZpbmUgV004OTkzX0lOMkxQX01JWE9VVExfVk9MX01BU0sgICAgICAgICAgIDB4MEUwMCAgLyogSU4yTFBfTUlYT1VUTF9WT0wgLSBbMTE6OV0gKi8KKyNkZWZpbmUgV004OTkzX0lOMkxQX01JWE9VVExfVk9MX1NISUZUICAgICAgICAgICAgICAgOSAgLyogSU4yTFBfTUlYT1VUTF9WT0wgLSBbMTE6OV0gKi8KKyNkZWZpbmUgV004OTkzX0lOMkxQX01JWE9VVExfVk9MX1dJRFRIICAgICAgICAgICAgICAgMyAgLyogSU4yTFBfTUlYT1VUTF9WT0wgLSBbMTE6OV0gKi8KKyNkZWZpbmUgV004OTkzX0lOMkxOX01JWE9VVExfVk9MX01BU0sgICAgICAgICAgIDB4MDFDMCAgLyogSU4yTE5fTUlYT1VUTF9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTNfSU4yTE5fTUlYT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBJTjJMTl9NSVhPVVRMX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5M19JTjJMTl9NSVhPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDMgIC8qIElOMkxOX01JWE9VVExfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTkzX0lOMVJfTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAgIDB4MDAzOCAgLyogSU4xUl9NSVhPVVRMX1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5M19JTjFSX01JWE9VVExfVk9MX1NISUZUICAgICAgICAgICAgICAgIDMgIC8qIElOMVJfTUlYT1VUTF9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9NSVhPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAzICAvKiBJTjFSX01JWE9VVExfVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTkzX0lOMUxfTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAgIDB4MDAwNyAgLyogSU4xTF9NSVhPVVRMX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5M19JTjFMX01JWE9VVExfVk9MX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIElOMUxfTUlYT1VUTF9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTNfSU4xTF9NSVhPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAzICAvKiBJTjFMX01JWE9VVExfVk9MIC0gWzI6MF0gKi8KKworLyoKKyAqIFI0OCAoMHgzMCkgLSBPdXRwdXQgTWl4ZXI0CisgKi8KKyNkZWZpbmUgV004OTkzX0lOMlJQX01JWE9VVFJfVk9MX01BU0sgICAgICAgICAgIDB4MEUwMCAgLyogSU4yUlBfTUlYT1VUUl9WT0wgLSBbMTE6OV0gKi8KKyNkZWZpbmUgV004OTkzX0lOMlJQX01JWE9VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAgOSAgLyogSU4yUlBfTUlYT1VUUl9WT0wgLSBbMTE6OV0gKi8KKyNkZWZpbmUgV004OTkzX0lOMlJQX01JWE9VVFJfVk9MX1dJRFRIICAgICAgICAgICAgICAgMyAgLyogSU4yUlBfTUlYT1VUUl9WT0wgLSBbMTE6OV0gKi8KKyNkZWZpbmUgV004OTkzX0lOMlJOX01JWE9VVFJfVk9MX01BU0sgICAgICAgICAgIDB4MDFDMCAgLyogSU4yUk5fTUlYT1VUUl9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTNfSU4yUk5fTUlYT1VUUl9WT0xfU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBJTjJSTl9NSVhPVVRSX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5M19JTjJSTl9NSVhPVVRSX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDMgIC8qIElOMlJOX01JWE9VVFJfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTkzX0lOMUxfTUlYT1VUUl9WT0xfTUFTSyAgICAgICAgICAgIDB4MDAzOCAgLyogSU4xTF9NSVhPVVRSX1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5M19JTjFMX01JWE9VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAgIDMgIC8qIElOMUxfTUlYT1VUUl9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTNfSU4xTF9NSVhPVVRSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAzICAvKiBJTjFMX01JWE9VVFJfVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTkzX0lOMVJfTUlYT1VUUl9WT0xfTUFTSyAgICAgICAgICAgIDB4MDAwNyAgLyogSU4xUl9NSVhPVVRSX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5M19JTjFSX01JWE9VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIElOMVJfTUlYT1VUUl9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTNfSU4xUl9NSVhPVVRSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAzICAvKiBJTjFSX01JWE9VVFJfVk9MIC0gWzI6MF0gKi8KKworLyoKKyAqIFI0OSAoMHgzMSkgLSBPdXRwdXQgTWl4ZXI1CisgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0xfTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAgIDB4MEUwMCAgLyogREFDTF9NSVhPVVRMX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTNfREFDTF9NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICA5ICAvKiBEQUNMX01JWE9VVExfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5M19EQUNMX01JWE9VVExfVk9MX1dJRFRIICAgICAgICAgICAgICAgIDMgIC8qIERBQ0xfTUlYT1VUTF9WT0wgLSBbMTE6OV0gKi8KKyNkZWZpbmUgV004OTkzX0lOMlJOX01JWE9VVExfVk9MX01BU0sgICAgICAgICAgIDB4MDFDMCAgLyogSU4yUk5fTUlYT1VUTF9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTNfSU4yUk5fTUlYT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBJTjJSTl9NSVhPVVRMX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5M19JTjJSTl9NSVhPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDMgIC8qIElOMlJOX01JWE9VVExfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9NSVhPVVRMX1ZPTF9NQVNLICAgICAgICAgIDB4MDAzOCAgLyogTUlYSU5SX01JWE9VVExfVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgMyAgLyogTUlYSU5SX01JWE9VVExfVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9NSVhPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgMyAgLyogTUlYSU5SX01JWE9VVExfVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9NSVhPVVRMX1ZPTF9NQVNLICAgICAgICAgIDB4MDAwNyAgLyogTUlYSU5MX01JWE9VVExfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgMCAgLyogTUlYSU5MX01JWE9VVExfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9NSVhPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgMyAgLyogTUlYSU5MX01JWE9VVExfVk9MIC0gWzI6MF0gKi8KKworLyoKKyAqIFI1MCAoMHgzMikgLSBPdXRwdXQgTWl4ZXI2CisgKi8KKyNkZWZpbmUgV004OTkzX0RBQ1JfTUlYT1VUUl9WT0xfTUFTSyAgICAgICAgICAgIDB4MEUwMCAgLyogREFDUl9NSVhPVVRSX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTNfREFDUl9NSVhPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICA5ICAvKiBEQUNSX01JWE9VVFJfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5M19EQUNSX01JWE9VVFJfVk9MX1dJRFRIICAgICAgICAgICAgICAgIDMgIC8qIERBQ1JfTUlYT1VUUl9WT0wgLSBbMTE6OV0gKi8KKyNkZWZpbmUgV004OTkzX0lOMkxOX01JWE9VVFJfVk9MX01BU0sgICAgICAgICAgIDB4MDFDMCAgLyogSU4yTE5fTUlYT1VUUl9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTNfSU4yTE5fTUlYT1VUUl9WT0xfU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBJTjJMTl9NSVhPVVRSX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5M19JTjJMTl9NSVhPVVRSX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDMgIC8qIElOMkxOX01JWE9VVFJfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9NSVhPVVRSX1ZPTF9NQVNLICAgICAgICAgIDB4MDAzOCAgLyogTUlYSU5MX01JWE9VVFJfVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9NSVhPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgMyAgLyogTUlYSU5MX01JWE9VVFJfVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9NSVhPVVRSX1ZPTF9XSURUSCAgICAgICAgICAgICAgMyAgLyogTUlYSU5MX01JWE9VVFJfVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9NSVhPVVRSX1ZPTF9NQVNLICAgICAgICAgIDB4MDAwNyAgLyogTUlYSU5SX01JWE9VVFJfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9NSVhPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgMCAgLyogTUlYSU5SX01JWE9VVFJfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9NSVhPVVRSX1ZPTF9XSURUSCAgICAgICAgICAgICAgMyAgLyogTUlYSU5SX01JWE9VVFJfVk9MIC0gWzI6MF0gKi8KKworLyoKKyAqIFI1MSAoMHgzMykgLSBIUE9VVDIgTWl4ZXIKKyAqLworI2RlZmluZSBXTTg5OTNfVlJYX1RPX0hQT1VUMiAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBWUlhfVE9fSFBPVVQyICovCisjZGVmaW5lIFdNODk5M19WUlhfVE9fSFBPVVQyX01BU0sgICAgICAgICAgICAgICAweDAwMjAgIC8qIFZSWF9UT19IUE9VVDIgKi8KKyNkZWZpbmUgV004OTkzX1ZSWF9UT19IUE9VVDJfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogVlJYX1RPX0hQT1VUMiAqLworI2RlZmluZSBXTTg5OTNfVlJYX1RPX0hQT1VUMl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBWUlhfVE9fSFBPVVQyICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMVk9MX1RPX0hQT1VUMiAgICAgICAgICAgICAweDAwMTAgIC8qIE1JWE9VVExWT0xfVE9fSFBPVVQyICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMVk9MX1RPX0hQT1VUMl9NQVNLICAgICAgICAweDAwMTAgIC8qIE1JWE9VVExWT0xfVE9fSFBPVVQyICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMVk9MX1RPX0hQT1VUMl9TSElGVCAgICAgICAgICAgIDQgIC8qIE1JWE9VVExWT0xfVE9fSFBPVVQyICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMVk9MX1RPX0hQT1VUMl9XSURUSCAgICAgICAgICAgIDEgIC8qIE1JWE9VVExWT0xfVE9fSFBPVVQyICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSVk9MX1RPX0hQT1VUMiAgICAgICAgICAgICAweDAwMDggIC8qIE1JWE9VVFJWT0xfVE9fSFBPVVQyICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSVk9MX1RPX0hQT1VUMl9NQVNLICAgICAgICAweDAwMDggIC8qIE1JWE9VVFJWT0xfVE9fSFBPVVQyICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSVk9MX1RPX0hQT1VUMl9TSElGVCAgICAgICAgICAgIDMgIC8qIE1JWE9VVFJWT0xfVE9fSFBPVVQyICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSVk9MX1RPX0hQT1VUMl9XSURUSCAgICAgICAgICAgIDEgIC8qIE1JWE9VVFJWT0xfVE9fSFBPVVQyICovCisKKy8qCisgKiBSNTIgKDB4MzQpIC0gTGluZSBNaXhlcjEKKyAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9UT19MSU5FT1VUMU4gICAgICAgICAgICAgMHgwMDQwICAvKiBNSVhPVVRMX1RPX0xJTkVPVVQxTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9UT19MSU5FT1VUMU5fTUFTSyAgICAgICAgMHgwMDQwICAvKiBNSVhPVVRMX1RPX0xJTkVPVVQxTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9UT19MSU5FT1VUMU5fU0hJRlQgICAgICAgICAgICA2ICAvKiBNSVhPVVRMX1RPX0xJTkVPVVQxTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9UT19MSU5FT1VUMU5fV0lEVEggICAgICAgICAgICAxICAvKiBNSVhPVVRMX1RPX0xJTkVPVVQxTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9UT19MSU5FT1VUMU4gICAgICAgICAgICAgMHgwMDIwICAvKiBNSVhPVVRSX1RPX0xJTkVPVVQxTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9UT19MSU5FT1VUMU5fTUFTSyAgICAgICAgMHgwMDIwICAvKiBNSVhPVVRSX1RPX0xJTkVPVVQxTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9UT19MSU5FT1VUMU5fU0hJRlQgICAgICAgICAgICA1ICAvKiBNSVhPVVRSX1RPX0xJTkVPVVQxTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9UT19MSU5FT1VUMU5fV0lEVEggICAgICAgICAgICAxICAvKiBNSVhPVVRSX1RPX0xJTkVPVVQxTiAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDFfTU9ERSAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMSU5FT1VUMV9NT0RFICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMV9NT0RFX01BU0sgICAgICAgICAgICAgICAweDAwMTAgIC8qIExJTkVPVVQxX01PREUgKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQxX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogTElORU9VVDFfTU9ERSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDFfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMV9NT0RFICovCisjZGVmaW5lIFdNODk5M19JTjFSX1RPX0xJTkVPVVQxUCAgICAgICAgICAgICAgICAweDAwMDQgIC8qIElOMVJfVE9fTElORU9VVDFQICovCisjZGVmaW5lIFdNODk5M19JTjFSX1RPX0xJTkVPVVQxUF9NQVNLICAgICAgICAgICAweDAwMDQgIC8qIElOMVJfVE9fTElORU9VVDFQICovCisjZGVmaW5lIFdNODk5M19JTjFSX1RPX0xJTkVPVVQxUF9TSElGVCAgICAgICAgICAgICAgIDIgIC8qIElOMVJfVE9fTElORU9VVDFQICovCisjZGVmaW5lIFdNODk5M19JTjFSX1RPX0xJTkVPVVQxUF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElOMVJfVE9fTElORU9VVDFQICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX0xJTkVPVVQxUCAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElOMUxfVE9fTElORU9VVDFQICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX0xJTkVPVVQxUF9NQVNLICAgICAgICAgICAweDAwMDIgIC8qIElOMUxfVE9fTElORU9VVDFQICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX0xJTkVPVVQxUF9TSElGVCAgICAgICAgICAgICAgIDEgIC8qIElOMUxfVE9fTElORU9VVDFQICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX0xJTkVPVVQxUF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElOMUxfVE9fTElORU9VVDFQICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX1RPX0xJTkVPVVQxUCAgICAgICAgICAgICAweDAwMDEgIC8qIE1JWE9VVExfVE9fTElORU9VVDFQICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX1RPX0xJTkVPVVQxUF9NQVNLICAgICAgICAweDAwMDEgIC8qIE1JWE9VVExfVE9fTElORU9VVDFQICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX1RPX0xJTkVPVVQxUF9TSElGVCAgICAgICAgICAgIDAgIC8qIE1JWE9VVExfVE9fTElORU9VVDFQICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX1RPX0xJTkVPVVQxUF9XSURUSCAgICAgICAgICAgIDEgIC8qIE1JWE9VVExfVE9fTElORU9VVDFQICovCisKKy8qCisgKiBSNTMgKDB4MzUpIC0gTGluZSBNaXhlcjIKKyAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9UT19MSU5FT1VUMk4gICAgICAgICAgICAgMHgwMDQwICAvKiBNSVhPVVRSX1RPX0xJTkVPVVQyTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9UT19MSU5FT1VUMk5fTUFTSyAgICAgICAgMHgwMDQwICAvKiBNSVhPVVRSX1RPX0xJTkVPVVQyTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9UT19MSU5FT1VUMk5fU0hJRlQgICAgICAgICAgICA2ICAvKiBNSVhPVVRSX1RPX0xJTkVPVVQyTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9UT19MSU5FT1VUMk5fV0lEVEggICAgICAgICAgICAxICAvKiBNSVhPVVRSX1RPX0xJTkVPVVQyTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9UT19MSU5FT1VUMk4gICAgICAgICAgICAgMHgwMDIwICAvKiBNSVhPVVRMX1RPX0xJTkVPVVQyTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9UT19MSU5FT1VUMk5fTUFTSyAgICAgICAgMHgwMDIwICAvKiBNSVhPVVRMX1RPX0xJTkVPVVQyTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9UT19MSU5FT1VUMk5fU0hJRlQgICAgICAgICAgICA1ICAvKiBNSVhPVVRMX1RPX0xJTkVPVVQyTiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9UT19MSU5FT1VUMk5fV0lEVEggICAgICAgICAgICAxICAvKiBNSVhPVVRMX1RPX0xJTkVPVVQyTiAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJfTU9ERSAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMSU5FT1VUMl9NT0RFICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMl9NT0RFX01BU0sgICAgICAgICAgICAgICAweDAwMTAgIC8qIExJTkVPVVQyX01PREUgKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQyX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogTElORU9VVDJfTU9ERSAqLworI2RlZmluZSBXTTg5OTNfTElORU9VVDJfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMl9NT0RFICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX0xJTkVPVVQyUCAgICAgICAgICAgICAgICAweDAwMDQgIC8qIElOMUxfVE9fTElORU9VVDJQICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX0xJTkVPVVQyUF9NQVNLICAgICAgICAgICAweDAwMDQgIC8qIElOMUxfVE9fTElORU9VVDJQICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX0xJTkVPVVQyUF9TSElGVCAgICAgICAgICAgICAgIDIgIC8qIElOMUxfVE9fTElORU9VVDJQICovCisjZGVmaW5lIFdNODk5M19JTjFMX1RPX0xJTkVPVVQyUF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElOMUxfVE9fTElORU9VVDJQICovCisjZGVmaW5lIFdNODk5M19JTjFSX1RPX0xJTkVPVVQyUCAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElOMVJfVE9fTElORU9VVDJQICovCisjZGVmaW5lIFdNODk5M19JTjFSX1RPX0xJTkVPVVQyUF9NQVNLICAgICAgICAgICAweDAwMDIgIC8qIElOMVJfVE9fTElORU9VVDJQICovCisjZGVmaW5lIFdNODk5M19JTjFSX1RPX0xJTkVPVVQyUF9TSElGVCAgICAgICAgICAgICAgIDEgIC8qIElOMVJfVE9fTElORU9VVDJQICovCisjZGVmaW5lIFdNODk5M19JTjFSX1RPX0xJTkVPVVQyUF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElOMVJfVE9fTElORU9VVDJQICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSX1RPX0xJTkVPVVQyUCAgICAgICAgICAgICAweDAwMDEgIC8qIE1JWE9VVFJfVE9fTElORU9VVDJQICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSX1RPX0xJTkVPVVQyUF9NQVNLICAgICAgICAweDAwMDEgIC8qIE1JWE9VVFJfVE9fTElORU9VVDJQICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSX1RPX0xJTkVPVVQyUF9TSElGVCAgICAgICAgICAgIDAgIC8qIE1JWE9VVFJfVE9fTElORU9VVDJQICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSX1RPX0xJTkVPVVQyUF9XSURUSCAgICAgICAgICAgIDEgIC8qIE1JWE9VVFJfVE9fTElORU9VVDJQICovCisKKy8qCisgKiBSNTQgKDB4MzYpIC0gU3BlYWtlciBNaXhlcgorICovCisjZGVmaW5lIFdNODk5M19TUEtBQl9SRUZfU0VMICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNQS0FCX1JFRl9TRUwgKi8KKyNkZWZpbmUgV004OTkzX1NQS0FCX1JFRl9TRUxfTUFTSyAgICAgICAgICAgICAgIDB4MDEwMCAgLyogU1BLQUJfUkVGX1NFTCAqLworI2RlZmluZSBXTTg5OTNfU1BLQUJfUkVGX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICA4ICAvKiBTUEtBQl9SRUZfU0VMICovCisjZGVmaW5lIFdNODk5M19TUEtBQl9SRUZfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS0FCX1JFRl9TRUwgKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9UT19TUEtNSVhMICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlYSU5MX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9UT19TUEtNSVhMX01BU0sgICAgICAgICAgIDB4MDA4MCAgLyogTUlYSU5MX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9UT19TUEtNSVhMX1NISUZUICAgICAgICAgICAgICAgNyAgLyogTUlYSU5MX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTkzX01JWElOTF9UT19TUEtNSVhMX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogTUlYSU5MX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9UT19TUEtNSVhSICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYSU5SX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9UT19TUEtNSVhSX01BU0sgICAgICAgICAgIDB4MDA0MCAgLyogTUlYSU5SX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9UT19TUEtNSVhSX1NISUZUICAgICAgICAgICAgICAgNiAgLyogTUlYSU5SX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTkzX01JWElOUl9UT19TUEtNSVhSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogTUlYSU5SX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTkzX0lOMUxQX1RPX1NQS01JWEwgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4xTFBfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTNfSU4xTFBfVE9fU1BLTUlYTF9NQVNLICAgICAgICAgICAgMHgwMDIwICAvKiBJTjFMUF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5M19JTjFMUF9UT19TUEtNSVhMX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIElOMUxQX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTkzX0lOMUxQX1RPX1NQS01JWExfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU4xTFBfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTNfSU4xUlBfVE9fU1BLTUlYUiAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFSUF9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5M19JTjFSUF9UT19TUEtNSVhSX01BU0sgICAgICAgICAgICAweDAwMTAgIC8qIElOMVJQX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTkzX0lOMVJQX1RPX1NQS01JWFJfU0hJRlQgICAgICAgICAgICAgICAgNCAgLyogSU4xUlBfVE9fU1BLTUlYUiAqLworI2RlZmluZSBXTTg5OTNfSU4xUlBfVE9fU1BLTUlYUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBJTjFSUF9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX1RPX1NQS01JWEwgICAgICAgICAgICAgICAweDAwMDggIC8qIE1JWE9VVExfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUTF9UT19TUEtNSVhMX01BU0sgICAgICAgICAgMHgwMDA4ICAvKiBNSVhPVVRMX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVExfVE9fU1BLTUlYTF9TSElGVCAgICAgICAgICAgICAgMyAgLyogTUlYT1VUTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRMX1RPX1NQS01JWExfV0lEVEggICAgICAgICAgICAgIDEgIC8qIE1JWE9VVExfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9UT19TUEtNSVhSICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBNSVhPVVRSX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTkzX01JWE9VVFJfVE9fU1BLTUlYUl9NQVNLICAgICAgICAgIDB4MDAwNCAgLyogTUlYT1VUUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5M19NSVhPVVRSX1RPX1NQS01JWFJfU0hJRlQgICAgICAgICAgICAgIDIgIC8qIE1JWE9VVFJfVE9fU1BLTUlYUiAqLworI2RlZmluZSBXTTg5OTNfTUlYT1VUUl9UT19TUEtNSVhSX1dJRFRIICAgICAgICAgICAgICAxICAvKiBNSVhPVVRSX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0xfVE9fU1BLTUlYTCAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5M19EQUNMX1RPX1NQS01JWExfTUFTSyAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ0xfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTNfREFDTF9UT19TUEtNSVhMX1NISUZUICAgICAgICAgICAgICAgICAxICAvKiBEQUNMX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0xfVE9fU1BLTUlYTF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogREFDTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5M19EQUNSX1RPX1NQS01JWFIgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ1JfVE9fU1BLTUlYUiAqLworI2RlZmluZSBXTTg5OTNfREFDUl9UT19TUEtNSVhSX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNSX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTkzX0RBQ1JfVE9fU1BLTUlYUl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogREFDUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5M19EQUNSX1RPX1NQS01JWFJfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIERBQ1JfVE9fU1BLTUlYUiAqLworCisvKgorICogUjU1ICgweDM3KSAtIEFkZGl0aW9uYWwgQ29udHJvbAorICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMV9GQiAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVQxX0ZCICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMV9GQl9NQVNLICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVQxX0ZCICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMV9GQl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExJTkVPVVQxX0ZCICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMV9GQl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQxX0ZCICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMl9GQiAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVQyX0ZCICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMl9GQl9NQVNLICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVQyX0ZCICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMl9GQl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExJTkVPVVQyX0ZCICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUMl9GQl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQyX0ZCICovCisjZGVmaW5lIFdNODk5M19WUk9JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFZST0kgKi8KKyNkZWZpbmUgV004OTkzX1ZST0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVlJPSSAqLworI2RlZmluZSBXTTg5OTNfVlJPSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBWUk9JICovCisjZGVmaW5lIFdNODk5M19WUk9JX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZST0kgKi8KKworLyoKKyAqIFI1NiAoMHgzOCkgLSBBbnRpUE9QMQorICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUX1ZNSURfQlVGX0VOQSAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVRfVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUX1ZNSURfQlVGX0VOQV9NQVNLICAgICAgICAweDAwODAgIC8qIExJTkVPVVRfVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUX1ZNSURfQlVGX0VOQV9TSElGVCAgICAgICAgICAgIDcgIC8qIExJTkVPVVRfVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODk5M19MSU5FT1VUX1ZNSURfQlVGX0VOQV9XSURUSCAgICAgICAgICAgIDEgIC8qIExJTkVPVVRfVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODk5M19IUE9VVDJfSU5fRU5BICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMl9JTl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMl9JTl9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVQyX0lOX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQyX0lOX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVDJfSU5fRU5BICovCisjZGVmaW5lIFdNODk5M19IUE9VVDJfSU5fRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMl9JTl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQxX0RJU0NIICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTElORU9VVDFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQxX0RJU0NIX01BU0sgICAgICAgICAgICAgIDB4MDAyMCAgLyogTElORU9VVDFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQxX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgNSAgLyogTElORU9VVDFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQxX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQyX0RJU0NIICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTElORU9VVDJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQyX0RJU0NIX01BU0sgICAgICAgICAgICAgIDB4MDAxMCAgLyogTElORU9VVDJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQyX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgNCAgLyogTElORU9VVDJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTkzX0xJTkVPVVQyX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDJfRElTQ0ggKi8KKworLyoKKyAqIFI1NyAoMHgzOSkgLSBBbnRpUE9QMgorICovCisjZGVmaW5lIFdNODk5M19WTUlEX1JBTVBfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwNjAgIC8qIFZNSURfUkFNUCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5M19WTUlEX1JBTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFZNSURfUkFNUCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5M19WTUlEX1JBTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFZNSURfUkFNUCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5M19WTUlEX0JVRl9FTkEgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFZNSURfQlVGX0VOQSAqLworI2RlZmluZSBXTTg5OTNfVk1JRF9CVUZfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBWTUlEX0JVRl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX1ZNSURfQlVGX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMyAgLyogVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODk5M19WTUlEX0JVRl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIFZNSURfQlVGX0VOQSAqLworI2RlZmluZSBXTTg5OTNfU1RBUlRVUF9CSUFTX0VOQSAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBTVEFSVFVQX0JJQVNfRU5BICovCisjZGVmaW5lIFdNODk5M19TVEFSVFVQX0JJQVNfRU5BX01BU0sgICAgICAgICAgICAweDAwMDQgIC8qIFNUQVJUVVBfQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTkzX1NUQVJUVVBfQklBU19FTkFfU0hJRlQgICAgICAgICAgICAgICAgMiAgLyogU1RBUlRVUF9CSUFTX0VOQSAqLworI2RlZmluZSBXTTg5OTNfU1RBUlRVUF9CSUFTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBTVEFSVFVQX0JJQVNfRU5BICovCisjZGVmaW5lIFdNODk5M19CSUFTX1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEJJQVNfU1JDICovCisjZGVmaW5lIFdNODk5M19CSUFTX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEJJQVNfU1JDICovCisjZGVmaW5lIFdNODk5M19CSUFTX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJJQVNfU1JDICovCisjZGVmaW5lIFdNODk5M19CSUFTX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJJQVNfU1JDICovCisjZGVmaW5lIFdNODk5M19WTUlEX0RJU0NIICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFZNSURfRElTQ0ggKi8KKyNkZWZpbmUgV004OTkzX1ZNSURfRElTQ0hfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVk1JRF9ESVNDSCAqLworI2RlZmluZSBXTTg5OTNfVk1JRF9ESVNDSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBWTUlEX0RJU0NIICovCisjZGVmaW5lIFdNODk5M19WTUlEX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZNSURfRElTQ0ggKi8KKworLyoKKyAqIFI1OCAoMHgzQSkgLSBNSUNCSUFTCisgKi8KKyNkZWZpbmUgV004OTkzX0pEX1NDVEhSX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBDMCAgLyogSkRfU0NUSFIgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTNfSkRfU0NUSFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBKRF9TQ1RIUiAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5M19KRF9TQ1RIUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEpEX1NDVEhSIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTkzX0pEX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAzMCAgLyogSkRfVEhSIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTkzX0pEX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogSkRfVEhSIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTkzX0pEX1RIUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogSkRfVEhSIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTkzX0pEX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSkRfRU5BICovCisjZGVmaW5lIFdNODk5M19KRF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEpEX0VOQSAqLworI2RlZmluZSBXTTg5OTNfSkRfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBKRF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0pEX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSkRfRU5BICovCisjZGVmaW5lIFdNODk5M19NSUNCMl9MVkwgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ0IyX0xWTCAqLworI2RlZmluZSBXTTg5OTNfTUlDQjJfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNCMl9MVkwgKi8KKyNkZWZpbmUgV004OTkzX01JQ0IyX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjJfTFZMICovCisjZGVmaW5lIFdNODk5M19NSUNCMl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IyX0xWTCAqLworI2RlZmluZSBXTTg5OTNfTUlDQjFfTFZMICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNCMV9MVkwgKi8KKyNkZWZpbmUgV004OTkzX01JQ0IxX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDQjFfTFZMICovCisjZGVmaW5lIFdNODk5M19NSUNCMV9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0IxX0xWTCAqLworI2RlZmluZSBXTTg5OTNfTUlDQjFfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMV9MVkwgKi8KKworLyoKKyAqIFI2MCAoMHgzQykgLSBGTEwgQ29udHJvbCAxCisgKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9GUkFDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0ZSQUMgKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9GUkFDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0ZSQUMgKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9GUkFDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRkxMX0ZSQUMgKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9GUkFDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0ZSQUMgKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9PU0NfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRkxMX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9PU0NfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRkxMX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9PU0NfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9PU0NfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMX0VOQSAqLworI2RlZmluZSBXTTg5OTNfRkxMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBGTExfRU5BICovCisjZGVmaW5lIFdNODk5M19GTExfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0VOQSAqLworCisvKgorICogUjYxICgweDNEKSAtIEZMTCBDb250cm9sIDIKKyAqLworI2RlZmluZSBXTTg5OTNfRkxMX09VVERJVl9NQVNLICAgICAgICAgICAgICAgICAgMHgwNzAwICAvKiBGTExfT1VURElWIC0gWzEwOjhdICovCisjZGVmaW5lIFdNODk5M19GTExfT1VURElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEZMTF9PVVRESVYgLSBbMTA6OF0gKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9PVVRESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMyAgLyogRkxMX09VVERJViAtIFsxMDo4XSAqLworI2RlZmluZSBXTTg5OTNfRkxMX0NUUkxfUkFURV9NQVNLICAgICAgICAgICAgICAgMHgwMDcwICAvKiBGTExfQ1RSTF9SQVRFIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9DVFJMX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogRkxMX0NUUkxfUkFURSAtIFs2OjRdICovCisjZGVmaW5lIFdNODk5M19GTExfQ1RSTF9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9DVFJMX1JBVEUgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5OTNfRkxMX0ZSQVRJT19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBGTExfRlJBVElPIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9GUkFUSU9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0ZSQVRJTyAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5M19GTExfRlJBVElPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9GUkFUSU8gLSBbMjowXSAqLworCisvKgorICogUjYyICgweDNFKSAtIEZMTCBDb250cm9sIDMKKyAqLworI2RlZmluZSBXTTg5OTNfRkxMX0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBGTExfSyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTNfRkxMX0tfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfSyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTNfRkxMX0tfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBGTExfSyAtIFsxNTowXSAqLworCisvKgorICogUjYzICgweDNGKSAtIEZMTCBDb250cm9sIDQKKyAqLworI2RlZmluZSBXTTg5OTNfRkxMX05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHg3RkUwICAvKiBGTExfTiAtIFsxNDo1XSAqLworI2RlZmluZSBXTTg5OTNfRkxMX05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBGTExfTiAtIFsxNDo1XSAqLworI2RlZmluZSBXTTg5OTNfRkxMX05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBGTExfTiAtIFsxNDo1XSAqLworI2RlZmluZSBXTTg5OTNfRkxMX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBGTExfR0FJTiAtIFszOjBdICovCisjZGVmaW5lIFdNODk5M19GTExfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9HQUlOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRkxMX0dBSU4gLSBbMzowXSAqLworCisvKgorICogUjY0ICgweDQwKSAtIEZMTCBDb250cm9sIDUKKyAqLworI2RlZmluZSBXTTg5OTNfRkxMX0ZSQ19OQ09fVkFMX01BU0sgICAgICAgICAgICAgMHgxRjgwICAvKiBGTExfRlJDX05DT19WQUwgLSBbMTI6N10gKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9GUkNfTkNPX1ZBTF9TSElGVCAgICAgICAgICAgICAgICAgNyAgLyogRkxMX0ZSQ19OQ09fVkFMIC0gWzEyOjddICovCisjZGVmaW5lIFdNODk5M19GTExfRlJDX05DT19WQUxfV0lEVEggICAgICAgICAgICAgICAgIDYgIC8qIEZMTF9GUkNfTkNPX1ZBTCAtIFsxMjo3XSAqLworI2RlZmluZSBXTTg5OTNfRkxMX0ZSQ19OQ08gICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBGTExfRlJDX05DTyAqLworI2RlZmluZSBXTTg5OTNfRkxMX0ZSQ19OQ09fTUFTSyAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBGTExfRlJDX05DTyAqLworI2RlZmluZSBXTTg5OTNfRkxMX0ZSQ19OQ09fU0hJRlQgICAgICAgICAgICAgICAgICAgICA2ICAvKiBGTExfRlJDX05DTyAqLworI2RlZmluZSBXTTg5OTNfRkxMX0ZSQ19OQ09fV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfRlJDX05DTyAqLworI2RlZmluZSBXTTg5OTNfRkxMX0NMS19SRUZfRElWX01BU0sgICAgICAgICAgICAgMHgwMDE4ICAvKiBGTExfQ0xLX1JFRl9ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTNfRkxMX0NMS19SRUZfRElWX1NISUZUICAgICAgICAgICAgICAgICAzICAvKiBGTExfQ0xLX1JFRl9ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTNfRkxMX0NMS19SRUZfRElWX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBGTExfQ0xLX1JFRl9ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTNfRkxMX0NMS19TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBGTExfQ0xLX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5M19GTExfQ0xLX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9DTEtfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTkzX0ZMTF9DTEtfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogRkxMX0NMS19TUkMgLSBbMTowXSAqLworCisvKgorICogUjY1ICgweDQxKSAtIENsb2NraW5nIDMKKyAqLworI2RlZmluZSBXTTg5OTNfQ0xLX0RDU19ESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgzQzAwICAvKiBDTEtfRENTX0RJViAtIFsxMzoxMF0gKi8KKyNkZWZpbmUgV004OTkzX0NMS19EQ1NfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAxMCAgLyogQ0xLX0RDU19ESVYgLSBbMTM6MTBdICovCisjZGVmaW5lIFdNODk5M19DTEtfRENTX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIENMS19EQ1NfRElWIC0gWzEzOjEwXSAqLworI2RlZmluZSBXTTg5OTNfU0FNUExFX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMzgwICAvKiBTQU1QTEVfUkFURSAtIFs5OjddICovCisjZGVmaW5lIFdNODk5M19TQU1QTEVfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFNBTVBMRV9SQVRFIC0gWzk6N10gKi8KKyNkZWZpbmUgV004OTkzX1NBTVBMRV9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMyAgLyogU0FNUExFX1JBVEUgLSBbOTo3XSAqLworI2RlZmluZSBXTTg5OTNfQ0xLX1NZU19SQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwMDFFICAvKiBDTEtfU1lTX1JBVEUgLSBbNDoxXSAqLworI2RlZmluZSBXTTg5OTNfQ0xLX1NZU19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAxICAvKiBDTEtfU1lTX1JBVEUgLSBbNDoxXSAqLworI2RlZmluZSBXTTg5OTNfQ0xLX1NZU19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICA0ICAvKiBDTEtfU1lTX1JBVEUgLSBbNDoxXSAqLworI2RlZmluZSBXTTg5OTNfQ0xLX0RTUF9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBDTEtfRFNQX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQ0xLX0RTUF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBDTEtfRFNQX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQ0xLX0RTUF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBDTEtfRFNQX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQ0xLX0RTUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBDTEtfRFNQX0VOQSAqLworCisvKgorICogUjY2ICgweDQyKSAtIENsb2NraW5nIDQKKyAqLworI2RlZmluZSBXTTg5OTNfREFDX0RJVjQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUNfRElWNCAqLworI2RlZmluZSBXTTg5OTNfREFDX0RJVjRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUNfRElWNCAqLworI2RlZmluZSBXTTg5OTNfREFDX0RJVjRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBEQUNfRElWNCAqLworI2RlZmluZSBXTTg5OTNfREFDX0RJVjRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfRElWNCAqLworI2RlZmluZSBXTTg5OTNfQ0xLXzI1NktfRElWX01BU0sgICAgICAgICAgICAgICAgMHgwMDdFICAvKiBDTEtfMjU2S19ESVYgLSBbNjoxXSAqLworI2RlZmluZSBXTTg5OTNfQ0xLXzI1NktfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAxICAvKiBDTEtfMjU2S19ESVYgLSBbNjoxXSAqLworI2RlZmluZSBXTTg5OTNfQ0xLXzI1NktfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICA2ICAvKiBDTEtfMjU2S19ESVYgLSBbNjoxXSAqLworI2RlZmluZSBXTTg5OTNfU1JfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBTUl9NT0RFICovCisjZGVmaW5lIFdNODk5M19TUl9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNSX01PREUgKi8KKyNkZWZpbmUgV004OTkzX1NSX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1JfTU9ERSAqLworI2RlZmluZSBXTTg5OTNfU1JfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUl9NT0RFICovCisKKy8qCisgKiBSNjcgKDB4NDMpIC0gTVcgU2xhdmUgQ29udHJvbAorICovCisjZGVmaW5lIFdNODk5M19NQVNLX1dSSVRFX0VOQSAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1BU0tfV1JJVEVfRU5BICovCisjZGVmaW5lIFdNODk5M19NQVNLX1dSSVRFX0VOQV9NQVNLICAgICAgICAgICAgICAweDAwMDEgIC8qIE1BU0tfV1JJVEVfRU5BICovCisjZGVmaW5lIFdNODk5M19NQVNLX1dSSVRFX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIE1BU0tfV1JJVEVfRU5BICovCisjZGVmaW5lIFdNODk5M19NQVNLX1dSSVRFX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIE1BU0tfV1JJVEVfRU5BICovCisKKy8qCisgKiBSNjkgKDB4NDUpIC0gQnVzIENvbnRyb2wgMQorICovCisjZGVmaW5lIFdNODk5M19DTEtfU1lTX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODk5M19DTEtfU1lTX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODk5M19DTEtfU1lTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODk5M19DTEtfU1lTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENMS19TWVNfRU5BICovCisKKy8qCisgKiBSNzAgKDB4NDYpIC0gV3JpdGUgU2VxdWVuY2VyIDAKKyAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9XUklURV9JTkRFWF9NQVNLICAgICAgICAgICAgMHgwMDFGICAvKiBXU0VRX1dSSVRFX0lOREVYIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfV1JJVEVfSU5ERVhfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9XUklURV9JTkRFWCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5M19XU0VRX1dSSVRFX0lOREVYX1dJRFRIICAgICAgICAgICAgICAgIDUgIC8qIFdTRVFfV1JJVEVfSU5ERVggLSBbNDowXSAqLworCisvKgorICogUjcxICgweDQ3KSAtIFdyaXRlIFNlcXVlbmNlciAxCisgKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfREFUQV9XSURUSF9NQVNLICAgICAgICAgICAgIDB4NzAwMCAgLyogV1NFUV9EQVRBX1dJRFRIIC0gWzE0OjEyXSAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9EQVRBX1dJRFRIX1NISUZUICAgICAgICAgICAgICAgIDEyICAvKiBXU0VRX0RBVEFfV0lEVEggLSBbMTQ6MTJdICovCisjZGVmaW5lIFdNODk5M19XU0VRX0RBVEFfV0lEVEhfV0lEVEggICAgICAgICAgICAgICAgIDMgIC8qIFdTRVFfREFUQV9XSURUSCAtIFsxNDoxMl0gKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfREFUQV9TVEFSVF9NQVNLICAgICAgICAgICAgIDB4MEYwMCAgLyogV1NFUV9EQVRBX1NUQVJUIC0gWzExOjhdICovCisjZGVmaW5lIFdNODk5M19XU0VRX0RBVEFfU1RBUlRfU0hJRlQgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfREFUQV9TVEFSVCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9EQVRBX1NUQVJUX1dJRFRIICAgICAgICAgICAgICAgICA0ICAvKiBXU0VRX0RBVEFfU1RBUlQgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfQUREUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogV1NFUV9BRERSIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfQUREUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9BRERSIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfQUREUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9BRERSIC0gWzc6MF0gKi8KKworLyoKKyAqIFI3MiAoMHg0OCkgLSBXcml0ZSBTZXF1ZW5jZXIgMgorICovCisjZGVmaW5lIFdNODk5M19XU0VRX0VPUyAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFdTRVFfRU9TICovCisjZGVmaW5lIFdNODk5M19XU0VRX0VPU19NQVNLICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFdTRVFfRU9TICovCisjZGVmaW5lIFdNODk5M19XU0VRX0VPU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIFdTRVFfRU9TICovCisjZGVmaW5lIFdNODk5M19XU0VRX0VPU19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRU9TICovCisjZGVmaW5lIFdNODk5M19XU0VRX0RFTEFZX01BU0sgICAgICAgICAgICAgICAgICAweDBGMDAgIC8qIFdTRVFfREVMQVkgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfREVMQVlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9ERUxBWSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9ERUxBWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBXU0VRX0RFTEFZIC0gWzExOjhdICovCisjZGVmaW5lIFdNODk5M19XU0VRX0RBVEFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIFdTRVFfREFUQSAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5M19XU0VRX0RBVEFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFdTRVFfREFUQSAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5M19XU0VRX0RBVEFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfREFUQSAtIFs3OjBdICovCisKKy8qCisgKiBSNzMgKDB4NDkpIC0gV3JpdGUgU2VxdWVuY2VyIDMKKyAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9BQk9SVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODk5M19XU0VRX0FCT1JUX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfQUJPUlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9BQk9SVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODk5M19XU0VRX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfU1RBUlRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9TVEFSVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODk5M19XU0VRX1NUQVJUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfU1RBUlRfSU5ERVhfTUFTSyAgICAgICAgICAgIDB4MDAzRiAgLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5M19XU0VRX1NUQVJUX0lOREVYX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIFdTRVFfU1RBUlRfSU5ERVggLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9TVEFSVF9JTkRFWF9XSURUSCAgICAgICAgICAgICAgICA2ICAvKiBXU0VRX1NUQVJUX0lOREVYIC0gWzU6MF0gKi8KKworLyoKKyAqIFI3NCAoMHg0QSkgLSBXcml0ZSBTZXF1ZW5jZXIgNAorICovCisjZGVmaW5lIFdNODk5M19XU0VRX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5OTNfV1NFUV9CVVNZX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBXU0VRX0JVU1kgKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfQlVTWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9CVVNZICovCisjZGVmaW5lIFdNODk5M19XU0VRX0JVU1lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfQlVTWSAqLworCisvKgorICogUjc1ICgweDRCKSAtIFdyaXRlIFNlcXVlbmNlciA1CisgKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfQ1VSUkVOVF9JTkRFWF9NQVNLICAgICAgICAgIDB4MDAzRiAgLyogV1NFUV9DVVJSRU5UX0lOREVYIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfQ1VSUkVOVF9JTkRFWF9TSElGVCAgICAgICAgICAgICAgMCAgLyogV1NFUV9DVVJSRU5UX0lOREVYIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTkzX1dTRVFfQ1VSUkVOVF9JTkRFWF9XSURUSCAgICAgICAgICAgICAgNiAgLyogV1NFUV9DVVJSRU5UX0lOREVYIC0gWzU6MF0gKi8KKworLyoKKyAqIFI3NiAoMHg0QykgLSBDaGFyZ2UgUHVtcCAxCisgKi8KKyNkZWZpbmUgV004OTkzX0NQX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ1BfRU5BICovCisjZGVmaW5lIFdNODk5M19DUF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIENQX0VOQSAqLworI2RlZmluZSBXTTg5OTNfQ1BfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBDUF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0NQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ1BfRU5BICovCisKKy8qCisgKiBSODEgKDB4NTEpIC0gQ2xhc3MgVyAwCisgKi8KKyNkZWZpbmUgV004OTkzX0NQX0RZTl9GUkVRICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQ1BfRFlOX0ZSRVEgKi8KKyNkZWZpbmUgV004OTkzX0NQX0RZTl9GUkVRX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQ1BfRFlOX0ZSRVEgKi8KKyNkZWZpbmUgV004OTkzX0NQX0RZTl9GUkVRX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ1BfRFlOX0ZSRVEgKi8KKyNkZWZpbmUgV004OTkzX0NQX0RZTl9GUkVRX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ1BfRFlOX0ZSRVEgKi8KKyNkZWZpbmUgV004OTkzX0NQX0RZTl9WICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQ1BfRFlOX1YgKi8KKyNkZWZpbmUgV004OTkzX0NQX0RZTl9WX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQ1BfRFlOX1YgKi8KKyNkZWZpbmUgV004OTkzX0NQX0RZTl9WX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQ1BfRFlOX1YgKi8KKyNkZWZpbmUgV004OTkzX0NQX0RZTl9WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ1BfRFlOX1YgKi8KKworLyoKKyAqIFI4NCAoMHg1NCkgLSBEQyBTZXJ2byAwCisgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NJTkdMRV8xICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NJTkdMRV8xX01BU0sgICAgICAgICAgIDB4MjAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NJTkdMRV8xX1NISUZUICAgICAgICAgICAgICAxMyAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NJTkdMRV8xX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NJTkdMRV8wICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NJTkdMRV8wX01BU0sgICAgICAgICAgIDB4MTAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NJTkdMRV8wX1NISUZUICAgICAgICAgICAgICAxMiAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NJTkdMRV8wX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NFUklFU18xICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NFUklFU18xX01BU0sgICAgICAgICAgIDB4MDIwMCAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NFUklFU18xX1NISUZUICAgICAgICAgICAgICAgOSAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NFUklFU18xX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NFUklFU18wICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NFUklFU18wX01BU0sgICAgICAgICAgIDB4MDEwMCAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NFUklFU18wX1NISUZUICAgICAgICAgICAgICAgOCAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NFUklFU18wX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NUQVJUVVBfMSAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCisjZGVmaW5lIFdNODk5M19EQ1NfVFJJR19TVEFSVFVQXzFfTUFTSyAgICAgICAgICAweDAwMjAgIC8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5OTNfRENTX1RSSUdfU1RBUlRVUF8xX1NISUZUICAgICAgICAgICAgICA1ICAvKiBEQ1NfVFJJR19TVEFSVFVQXzEgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NUQVJUVVBfMV9XSURUSCAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCisjZGVmaW5lIFdNODk5M19EQ1NfVFJJR19TVEFSVFVQXzAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5OTNfRENTX1RSSUdfU1RBUlRVUF8wX01BU0sgICAgICAgICAgMHgwMDEwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzAgKi8KKyNkZWZpbmUgV004OTkzX0RDU19UUklHX1NUQVJUVVBfMF9TSElGVCAgICAgICAgICAgICAgNCAgLyogRENTX1RSSUdfU1RBUlRVUF8wICovCisjZGVmaW5lIFdNODk5M19EQ1NfVFJJR19TVEFSVFVQXzBfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzEgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzFfTUFTSyAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzFfU0hJRlQgICAgICAgICAgICAgICAzICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzFfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzBfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzBfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5OTNfRENTX1RSSUdfREFDX1dSXzBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5OTNfRENTX0VOQV9DSEFOXzEgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5OTNfRENTX0VOQV9DSEFOXzFfTUFTSyAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5OTNfRENTX0VOQV9DSEFOXzFfU0hJRlQgICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5OTNfRENTX0VOQV9DSEFOXzFfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5OTNfRENTX0VOQV9DSEFOXzAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5OTNfRENTX0VOQV9DSEFOXzBfTUFTSyAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5OTNfRENTX0VOQV9DSEFOXzBfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5OTNfRENTX0VOQV9DSEFOXzBfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworCisvKgorICogUjg1ICgweDU1KSAtIERDIFNlcnZvIDEKKyAqLworI2RlZmluZSBXTTg5OTNfRENTX1NFUklFU19OT18wMV9NQVNLICAgICAgICAgICAgMHgwRkUwICAvKiBEQ1NfU0VSSUVTX05PXzAxIC0gWzExOjVdICovCisjZGVmaW5lIFdNODk5M19EQ1NfU0VSSUVTX05PXzAxX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIERDU19TRVJJRVNfTk9fMDEgLSBbMTE6NV0gKi8KKyNkZWZpbmUgV004OTkzX0RDU19TRVJJRVNfTk9fMDFfV0lEVEggICAgICAgICAgICAgICAgNyAgLyogRENTX1NFUklFU19OT18wMSAtIFsxMTo1XSAqLworI2RlZmluZSBXTTg5OTNfRENTX1RJTUVSX1BFUklPRF8wMV9NQVNLICAgICAgICAgMHgwMDBGICAvKiBEQ1NfVElNRVJfUEVSSU9EXzAxIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTkzX0RDU19USU1FUl9QRVJJT0RfMDFfU0hJRlQgICAgICAgICAgICAgMCAgLyogRENTX1RJTUVSX1BFUklPRF8wMSAtIFszOjBdICovCisjZGVmaW5lIFdNODk5M19EQ1NfVElNRVJfUEVSSU9EXzAxX1dJRFRIICAgICAgICAgICAgIDQgIC8qIERDU19USU1FUl9QRVJJT0RfMDEgLSBbMzowXSAqLworCisvKgorICogUjg3ICgweDU3KSAtIERDIFNlcnZvIDMKKyAqLworI2RlZmluZSBXTTg5OTNfRENTX0RBQ19XUl9WQUxfMV9NQVNLICAgICAgICAgICAgMHhGRjAwICAvKiBEQ1NfREFDX1dSX1ZBTF8xIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODk5M19EQ1NfREFDX1dSX1ZBTF8xX1NISUZUICAgICAgICAgICAgICAgIDggIC8qIERDU19EQUNfV1JfVkFMXzEgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTkzX0RDU19EQUNfV1JfVkFMXzFfV0lEVEggICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMSAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5OTNfRENTX0RBQ19XUl9WQUxfMF9NQVNLICAgICAgICAgICAgMHgwMEZGICAvKiBEQ1NfREFDX1dSX1ZBTF8wIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTkzX0RDU19EQUNfV1JfVkFMXzBfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRENTX0RBQ19XUl9WQUxfMCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5M19EQ1NfREFDX1dSX1ZBTF8wX1dJRFRIICAgICAgICAgICAgICAgIDggIC8qIERDU19EQUNfV1JfVkFMXzAgLSBbNzowXSAqLworCisvKgorICogUjg4ICgweDU4KSAtIERDIFNlcnZvIFJlYWRiYWNrIDAKKyAqLworI2RlZmluZSBXTTg5OTNfRENTX0RBVEFQQVRIX0JVU1kgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEQ1NfREFUQVBBVEhfQlVTWSAqLworI2RlZmluZSBXTTg5OTNfRENTX0RBVEFQQVRIX0JVU1lfTUFTSyAgICAgICAgICAgMHg0MDAwICAvKiBEQ1NfREFUQVBBVEhfQlVTWSAqLworI2RlZmluZSBXTTg5OTNfRENTX0RBVEFQQVRIX0JVU1lfU0hJRlQgICAgICAgICAgICAgIDE0ICAvKiBEQ1NfREFUQVBBVEhfQlVTWSAqLworI2RlZmluZSBXTTg5OTNfRENTX0RBVEFQQVRIX0JVU1lfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfREFUQVBBVEhfQlVTWSAqLworI2RlZmluZSBXTTg5OTNfRENTX0NIQU5ORUxfTUFTSyAgICAgICAgICAgICAgICAgMHgzMDAwICAvKiBEQ1NfQ0hBTk5FTCAtIFsxMzoxMl0gKi8KKyNkZWZpbmUgV004OTkzX0RDU19DSEFOTkVMX1NISUZUICAgICAgICAgICAgICAgICAgICAxMiAgLyogRENTX0NIQU5ORUwgLSBbMTM6MTJdICovCisjZGVmaW5lIFdNODk5M19EQ1NfQ0hBTk5FTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERDU19DSEFOTkVMIC0gWzEzOjEyXSAqLworI2RlZmluZSBXTTg5OTNfRENTX0NBTF9DT01QTEVURV9NQVNLICAgICAgICAgICAgMHgwMzAwICAvKiBEQ1NfQ0FMX0NPTVBMRVRFIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTkzX0RDU19DQUxfQ09NUExFVEVfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogRENTX0NBTF9DT01QTEVURSAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5M19EQ1NfQ0FMX0NPTVBMRVRFX1dJRFRIICAgICAgICAgICAgICAgIDIgIC8qIERDU19DQUxfQ09NUExFVEUgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTNfRENTX0RBQ19XUl9DT01QTEVURV9NQVNLICAgICAgICAgMHgwMDMwICAvKiBEQ1NfREFDX1dSX0NPTVBMRVRFIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTkzX0RDU19EQUNfV1JfQ09NUExFVEVfU0hJRlQgICAgICAgICAgICAgNCAgLyogRENTX0RBQ19XUl9DT01QTEVURSAtIFs1OjRdICovCisjZGVmaW5lIFdNODk5M19EQ1NfREFDX1dSX0NPTVBMRVRFX1dJRFRIICAgICAgICAgICAgIDIgIC8qIERDU19EQUNfV1JfQ09NUExFVEUgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5OTNfRENTX1NUQVJUVVBfQ09NUExFVEVfTUFTSyAgICAgICAgMHgwMDAzICAvKiBEQ1NfU1RBUlRVUF9DT01QTEVURSAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5M19EQ1NfU1RBUlRVUF9DT01QTEVURV9TSElGVCAgICAgICAgICAgIDAgIC8qIERDU19TVEFSVFVQX0NPTVBMRVRFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTkzX0RDU19TVEFSVFVQX0NPTVBMRVRFX1dJRFRIICAgICAgICAgICAgMiAgLyogRENTX1NUQVJUVVBfQ09NUExFVEUgLSBbMTowXSAqLworCisvKgorICogUjg5ICgweDU5KSAtIERDIFNlcnZvIFJlYWRiYWNrIDEKKyAqLworI2RlZmluZSBXTTg5OTNfRENTX0lOVEVHX0NIQU5fMV9NQVNLICAgICAgICAgICAgMHgwMEZGICAvKiBEQ1NfSU5URUdfQ0hBTl8xIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTkzX0RDU19JTlRFR19DSEFOXzFfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRENTX0lOVEVHX0NIQU5fMSAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5M19EQ1NfSU5URUdfQ0hBTl8xX1dJRFRIICAgICAgICAgICAgICAgIDggIC8qIERDU19JTlRFR19DSEFOXzEgLSBbNzowXSAqLworCisvKgorICogUjkwICgweDVBKSAtIERDIFNlcnZvIFJlYWRiYWNrIDIKKyAqLworI2RlZmluZSBXTTg5OTNfRENTX0lOVEVHX0NIQU5fMF9NQVNLICAgICAgICAgICAgMHgwMEZGICAvKiBEQ1NfSU5URUdfQ0hBTl8wIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTkzX0RDU19JTlRFR19DSEFOXzBfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogRENTX0lOVEVHX0NIQU5fMCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5M19EQ1NfSU5URUdfQ0hBTl8wX1dJRFRIICAgICAgICAgICAgICAgIDggIC8qIERDU19JTlRFR19DSEFOXzAgLSBbNzowXSAqLworCisvKgorICogUjk2ICgweDYwKSAtIEFuYWxvZ3VlIEhQIDAKKyAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxX0FVVE9fUFUgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVDFfQVVUT19QVSAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxX0FVVE9fUFVfTUFTSyAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVDFfQVVUT19QVSAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxX0FVVE9fUFVfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBIUE9VVDFfQVVUT19QVSAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxX0FVVE9fUFVfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFfQVVUT19QVSAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxTF9STVZfU0hPUlQgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDFMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxTF9STVZfU0hPUlRfTUFTSyAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDFMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxTF9STVZfU0hPUlRfU0hJRlQgICAgICAgICAgICAgICA3ICAvKiBIUE9VVDFMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxTF9STVZfU0hPUlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBIUE9VVDFMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxTF9PVVRQICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVDFMX09VVFAgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMUxfT1VUUF9NQVNLICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVQxTF9PVVRQICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFMX09VVFBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUMUxfT1VUUCAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxTF9PVVRQX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFMX09VVFAgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMUxfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBPVVQxTF9ETFkgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMUxfRExZX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBPVVQxTF9ETFkgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMUxfRExZX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogSFBPVVQxTF9ETFkgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMUxfRExZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxTF9ETFkgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMVJfUk1WX1NIT1JUICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSFBPVVQxUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMVJfUk1WX1NIT1JUX01BU0sgICAgICAgICAgIDB4MDAwOCAgLyogSFBPVVQxUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMVJfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICAgMyAgLyogSFBPVVQxUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMVJfUk1WX1NIT1JUX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMVJfT1VUUCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFBPVVQxUl9PVVRQICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFSX09VVFBfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQT1VUMVJfT1VUUCAqLworI2RlZmluZSBXTTg5OTNfSFBPVVQxUl9PVVRQX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBIUE9VVDFSX09VVFAgKi8KKyNkZWZpbmUgV004OTkzX0hQT1VUMVJfT1VUUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxUl9PVVRQICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFSX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQT1VUMVJfRExZICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFSX0RMWV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEhQT1VUMVJfRExZICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFSX0RMWV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfRExZICovCisjZGVmaW5lIFdNODk5M19IUE9VVDFSX0RMWV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfRExZICovCisKKy8qCisgKiBSOTggKDB4NjIpIC0gRVExCisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRVFfRU5BICovCisjZGVmaW5lIFdNODk5M19FUV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEVRX0VOQSAqLworI2RlZmluZSBXTTg5OTNfRVFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRVFfRU5BICovCisKKy8qCisgKiBSOTkgKDB4NjMpIC0gRVEyCisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0IxX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogRVFfQjFfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CMV9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IxX0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjFfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBFUV9CMV9HQUlOIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMDAgKDB4NjQpIC0gRVEzCisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0IyX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogRVFfQjJfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CMl9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IyX0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjJfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBFUV9CMl9HQUlOIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMDEgKDB4NjUpIC0gRVE0CisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0IzX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogRVFfQjNfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CM19HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IzX0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjNfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBFUV9CM19HQUlOIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMDIgKDB4NjYpIC0gRVE1CisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0I0X0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogRVFfQjRfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CNF9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I0X0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjRfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBFUV9CNF9HQUlOIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMDMgKDB4NjcpIC0gRVE2CisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0I1X0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogRVFfQjVfR0FJTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CNV9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I1X0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjVfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBFUV9CNV9HQUlOIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMDQgKDB4NjgpIC0gRVE3CisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0IxX0FfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjFfQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CMV9BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IxX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMDUgKDB4NjkpIC0gRVE4CisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0IxX0JfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjFfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjFfQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CMV9CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IxX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMDYgKDB4NkEpIC0gRVE5CisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0IxX1BHX01BU0sgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0IxX1BHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0IxX1BHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjFfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMDcgKDB4NkIpIC0gRVExMAorICovCisjZGVmaW5lIFdNODk5M19FUV9CMl9BX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0IyX0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjJfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjJfQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CMl9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTA4ICgweDZDKSAtIEVRMTEKKyAqLworI2RlZmluZSBXTTg5OTNfRVFfQjJfQl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CMl9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CMl9CX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IyX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0IyX0JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjJfQiAtIFsxNTowXSAqLworCisvKgorICogUjEwOSAoMHg2RCkgLSBFUTEyCisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0IyX0NfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjJfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjJfQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMl9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CMl9DX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IyX0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTAgKDB4NkUpIC0gRVExMworICovCisjZGVmaW5lIFdNODk5M19FUV9CMl9QR19NQVNLICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IyX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CMl9QR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IyX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CMl9QR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IyX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTExICgweDZGKSAtIEVRMTQKKyAqLworI2RlZmluZSBXTTg5OTNfRVFfQjNfQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CM19BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CM19BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IzX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0IzX0FfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjNfQSAtIFsxNTowXSAqLworCisvKgorICogUjExMiAoMHg3MCkgLSBFUTE1CisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0IzX0JfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjNfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjNfQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CM19CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CM19CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IzX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTMgKDB4NzEpIC0gRVExNgorICovCisjZGVmaW5lIFdNODk5M19FUV9CM19DX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IzX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0IzX0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjNfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjNfQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CM19DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE0ICgweDcyKSAtIEVRMTcKKyAqLworI2RlZmluZSBXTTg5OTNfRVFfQjNfUEdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CM19QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjNfUEdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CM19QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjNfUEdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CM19QRyAtIFsxNTowXSAqLworCisvKgorICogUjExNSAoMHg3MykgLSBFUTE4CisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0I0X0FfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjRfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjRfQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNF9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CNF9BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0I0X0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTYgKDB4NzQpIC0gRVExOQorICovCisjZGVmaW5lIFdNODk5M19FUV9CNF9CX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0I0X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0I0X0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjRfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjRfQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CNF9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE3ICgweDc1KSAtIEVRMjAKKyAqLworI2RlZmluZSBXTTg5OTNfRVFfQjRfQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CNF9DX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I0X0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0I0X0NfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjRfQyAtIFsxNTowXSAqLworCisvKgorICogUjExOCAoMHg3NikgLSBFUTIxCisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0I0X1BHX01BU0sgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0I0X1BHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0I0X1BHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjRfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTkgKDB4NzcpIC0gRVEyMgorICovCisjZGVmaW5lIFdNODk5M19FUV9CNV9BX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0I1X0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjVfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTNfRVFfQjVfQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CNV9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTIwICgweDc4KSAtIEVRMjMKKyAqLworI2RlZmluZSBXTTg5OTNfRVFfQjVfQl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CNV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5M19FUV9CNV9CX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I1X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0I1X0JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjVfQiAtIFsxNTowXSAqLworCisvKgorICogUjEyMSAoMHg3OSkgLSBFUTI0CisgKi8KKyNkZWZpbmUgV004OTkzX0VRX0I1X1BHX01BU0sgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjVfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0I1X1BHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjVfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTkzX0VRX0I1X1BHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjVfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMjIgKDB4N0EpIC0gRGlnaXRhbCBQdWxscworICovCisjZGVmaW5lIFdNODk5M19NQ0xLX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1DTEtfUFUgKi8KKyNkZWZpbmUgV004OTkzX01DTEtfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUNMS19QVSAqLworI2RlZmluZSBXTTg5OTNfTUNMS19QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBNQ0xLX1BVICovCisjZGVmaW5lIFdNODk5M19NQ0xLX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEtfUFUgKi8KKyNkZWZpbmUgV004OTkzX01DTEtfUEQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUNMS19QRCAqLworI2RlZmluZSBXTTg5OTNfTUNMS19QRF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNQ0xLX1BEICovCisjZGVmaW5lIFdNODk5M19NQ0xLX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIE1DTEtfUEQgKi8KKyNkZWZpbmUgV004OTkzX01DTEtfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMS19QRCAqLworI2RlZmluZSBXTTg5OTNfREFDREFUX1BVICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEQUNEQVRfUFUgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0RBVF9QVV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogREFDREFUX1BVICovCisjZGVmaW5lIFdNODk5M19EQUNEQVRfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIERBQ0RBVF9QVSAqLworI2RlZmluZSBXTTg5OTNfREFDREFUX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNEQVRfUFUgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0RBVF9QRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREFDREFUX1BEICovCisjZGVmaW5lIFdNODk5M19EQUNEQVRfUERfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERBQ0RBVF9QRCAqLworI2RlZmluZSBXTTg5OTNfREFDREFUX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEQUNEQVRfUEQgKi8KKyNkZWZpbmUgV004OTkzX0RBQ0RBVF9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDREFUX1BEICovCisjZGVmaW5lIFdNODk5M19MUkNMS19QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExSQ0xLX1BVICovCisjZGVmaW5lIFdNODk5M19MUkNMS19QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExSQ0xLX1BVICovCisjZGVmaW5lIFdNODk5M19MUkNMS19QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExSQ0xLX1BVICovCisjZGVmaW5lIFdNODk5M19MUkNMS19QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExSQ0xLX1BVICovCisjZGVmaW5lIFdNODk5M19MUkNMS19QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExSQ0xLX1BEICovCisjZGVmaW5lIFdNODk5M19MUkNMS19QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExSQ0xLX1BEICovCisjZGVmaW5lIFdNODk5M19MUkNMS19QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExSQ0xLX1BEICovCisjZGVmaW5lIFdNODk5M19MUkNMS19QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExSQ0xLX1BEICovCisjZGVmaW5lIFdNODk5M19CQ0xLX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTkzX0JDTEtfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQkNMS19QVSAqLworI2RlZmluZSBXTTg5OTNfQkNMS19QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLX1BVICovCisjZGVmaW5lIFdNODk5M19CQ0xLX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTkzX0JDTEtfUEQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQkNMS19QRCAqLworI2RlZmluZSBXTTg5OTNfQkNMS19QRF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCQ0xLX1BEICovCisjZGVmaW5lIFdNODk5M19CQ0xLX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEJDTEtfUEQgKi8KKyNkZWZpbmUgV004OTkzX0JDTEtfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMS19QRCAqLworCisvKgorICogUjEyMyAoMHg3QikgLSBEUkMgQ29udHJvbCAxCisgKi8KKyNkZWZpbmUgV004OTkzX0RSQ19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTNfRFJDX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBEUkNfRU5BICovCisjZGVmaW5lIFdNODk5M19EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIERSQ19FTkEgKi8KKyNkZWZpbmUgV004OTkzX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTNfRFJDX0RBQ19QQVRIICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEUkNfREFDX1BBVEggKi8KKyNkZWZpbmUgV004OTkzX0RSQ19EQUNfUEFUSF9NQVNLICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogRFJDX0RBQ19QQVRIICovCisjZGVmaW5lIFdNODk5M19EUkNfREFDX1BBVEhfU0hJRlQgICAgICAgICAgICAgICAgICAgMTQgIC8qIERSQ19EQUNfUEFUSCAqLworI2RlZmluZSBXTTg5OTNfRFJDX0RBQ19QQVRIX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEUkNfREFDX1BBVEggKi8KKyNkZWZpbmUgV004OTkzX0RSQ19TTU9PVEhfRU5BICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogRFJDX1NNT09USF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0RSQ19TTU9PVEhfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDgwMCAgLyogRFJDX1NNT09USF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0RSQ19TTU9PVEhfRU5BX1NISUZUICAgICAgICAgICAgICAgICAxMSAgLyogRFJDX1NNT09USF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0RSQ19TTU9PVEhfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX1NNT09USF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0RSQ19RUl9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogRFJDX1FSX0VOQSAqLworI2RlZmluZSBXTTg5OTNfRFJDX1FSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBEUkNfUVJfRU5BICovCisjZGVmaW5lIFdNODk5M19EUkNfUVJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIERSQ19RUl9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0RSQ19RUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX1FSX0VOQSAqLworI2RlZmluZSBXTTg5OTNfRFJDX0FOVElDTElQX0VOQSAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEUkNfQU5USUNMSVBfRU5BICovCisjZGVmaW5lIFdNODk5M19EUkNfQU5USUNMSVBfRU5BX01BU0sgICAgICAgICAgICAweDAyMDAgIC8qIERSQ19BTlRJQ0xJUF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0RSQ19BTlRJQ0xJUF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgOSAgLyogRFJDX0FOVElDTElQX0VOQSAqLworI2RlZmluZSBXTTg5OTNfRFJDX0FOVElDTElQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEUkNfQU5USUNMSVBfRU5BICovCisjZGVmaW5lIFdNODk5M19EUkNfSFlTVF9FTkEgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERSQ19IWVNUX0VOQSAqLworI2RlZmluZSBXTTg5OTNfRFJDX0hZU1RfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEUkNfSFlTVF9FTkEgKi8KKyNkZWZpbmUgV004OTkzX0RSQ19IWVNUX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgOCAgLyogRFJDX0hZU1RfRU5BICovCisjZGVmaW5lIFdNODk5M19EUkNfSFlTVF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERSQ19IWVNUX0VOQSAqLworI2RlZmluZSBXTTg5OTNfRFJDX1RIUkVTSF9IWVNUX01BU0sgICAgICAgICAgICAgMHgwMDMwICAvKiBEUkNfVEhSRVNIX0hZU1QgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5OTNfRFJDX1RIUkVTSF9IWVNUX1NISUZUICAgICAgICAgICAgICAgICA0ICAvKiBEUkNfVEhSRVNIX0hZU1QgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5OTNfRFJDX1RIUkVTSF9IWVNUX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBEUkNfVEhSRVNIX0hZU1QgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5OTNfRFJDX01JTkdBSU5fTUFTSyAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBEUkNfTUlOR0FJTiAtIFszOjJdICovCisjZGVmaW5lIFdNODk5M19EUkNfTUlOR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERSQ19NSU5HQUlOIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTkzX0RSQ19NSU5HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFJDX01JTkdBSU4gLSBbMzoyXSAqLworI2RlZmluZSBXTTg5OTNfRFJDX01BWEdBSU5fTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBEUkNfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5M19EUkNfTUFYR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTkzX0RSQ19NQVhHQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFJDX01BWEdBSU4gLSBbMTowXSAqLworCisvKgorICogUjEyNCAoMHg3QykgLSBEUkMgQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004OTkzX0RSQ19BVFRBQ0tfUkFURV9NQVNLICAgICAgICAgICAgIDB4RjAwMCAgLyogRFJDX0FUVEFDS19SQVRFIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5OTNfRFJDX0FUVEFDS19SQVRFX1NISUZUICAgICAgICAgICAgICAgIDEyICAvKiBEUkNfQVRUQUNLX1JBVEUgLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5M19EUkNfQVRUQUNLX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgIDQgIC8qIERSQ19BVFRBQ0tfUkFURSAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTkzX0RSQ19ERUNBWV9SQVRFX01BU0sgICAgICAgICAgICAgIDB4MEYwMCAgLyogRFJDX0RFQ0FZX1JBVEUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTkzX0RSQ19ERUNBWV9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgOCAgLyogRFJDX0RFQ0FZX1JBVEUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTkzX0RSQ19ERUNBWV9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgNCAgLyogRFJDX0RFQ0FZX1JBVEUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTkzX0RSQ19USFJFU0hfQ09NUF9NQVNLICAgICAgICAgICAgIDB4MDBGQyAgLyogRFJDX1RIUkVTSF9DT01QIC0gWzc6Ml0gKi8KKyNkZWZpbmUgV004OTkzX0RSQ19USFJFU0hfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgMiAgLyogRFJDX1RIUkVTSF9DT01QIC0gWzc6Ml0gKi8KKyNkZWZpbmUgV004OTkzX0RSQ19USFJFU0hfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgNiAgLyogRFJDX1RIUkVTSF9DT01QIC0gWzc6Ml0gKi8KKworLyoKKyAqIFIxMjUgKDB4N0QpIC0gRFJDIENvbnRyb2wgMworICovCisjZGVmaW5lIFdNODk5M19EUkNfQU1QX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAweEY4MDAgIC8qIERSQ19BTVBfQ09NUCAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTkzX0RSQ19BTVBfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAxMSAgLyogRFJDX0FNUF9DT01QIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTNfRFJDX0FNUF9DT01QX1dJRFRIICAgICAgICAgICAgICAgICAgICA1ICAvKiBEUkNfQU1QX0NPTVAgLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5M19EUkNfUjBfU0xPUEVfQ09NUF9NQVNLICAgICAgICAgICAweDA3MDAgIC8qIERSQ19SMF9TTE9QRV9DT01QIC0gWzEwOjhdICovCisjZGVmaW5lIFdNODk5M19EUkNfUjBfU0xPUEVfQ09NUF9TSElGVCAgICAgICAgICAgICAgIDggIC8qIERSQ19SMF9TTE9QRV9DT01QIC0gWzEwOjhdICovCisjZGVmaW5lIFdNODk5M19EUkNfUjBfU0xPUEVfQ09NUF9XSURUSCAgICAgICAgICAgICAgIDMgIC8qIERSQ19SMF9TTE9QRV9DT01QIC0gWzEwOjhdICovCisjZGVmaW5lIFdNODk5M19EUkNfRkZfREVMQVkgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERSQ19GRl9ERUxBWSAqLworI2RlZmluZSBXTTg5OTNfRFJDX0ZGX0RFTEFZX01BU0sgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEUkNfRkZfREVMQVkgKi8KKyNkZWZpbmUgV004OTkzX0RSQ19GRl9ERUxBWV9TSElGVCAgICAgICAgICAgICAgICAgICAgNyAgLyogRFJDX0ZGX0RFTEFZICovCisjZGVmaW5lIFdNODk5M19EUkNfRkZfREVMQVlfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERSQ19GRl9ERUxBWSAqLworI2RlZmluZSBXTTg5OTNfRFJDX1RIUkVTSF9RUl9NQVNLICAgICAgICAgICAgICAgMHgwMDBDICAvKiBEUkNfVEhSRVNIX1FSIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTkzX0RSQ19USFJFU0hfUVJfU0hJRlQgICAgICAgICAgICAgICAgICAgMiAgLyogRFJDX1RIUkVTSF9RUiAtIFszOjJdICovCisjZGVmaW5lIFdNODk5M19EUkNfVEhSRVNIX1FSX1dJRFRIICAgICAgICAgICAgICAgICAgIDIgIC8qIERSQ19USFJFU0hfUVIgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5OTNfRFJDX1JBVEVfUVJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBEUkNfUkFURV9RUiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5M19EUkNfUkFURV9RUl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERSQ19SQVRFX1FSIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTkzX0RSQ19SQVRFX1FSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFJDX1JBVEVfUVIgLSBbMTowXSAqLworCisvKgorICogUjEyNiAoMHg3RSkgLSBEUkMgQ29udHJvbCA0CisgKi8KKyNkZWZpbmUgV004OTkzX0RSQ19SMV9TTE9QRV9DT01QX01BU0sgICAgICAgICAgIDB4RTAwMCAgLyogRFJDX1IxX1NMT1BFX0NPTVAgLSBbMTU6MTNdICovCisjZGVmaW5lIFdNODk5M19EUkNfUjFfU0xPUEVfQ09NUF9TSElGVCAgICAgICAgICAgICAgMTMgIC8qIERSQ19SMV9TTE9QRV9DT01QIC0gWzE1OjEzXSAqLworI2RlZmluZSBXTTg5OTNfRFJDX1IxX1NMT1BFX0NPTVBfV0lEVEggICAgICAgICAgICAgICAzICAvKiBEUkNfUjFfU0xPUEVfQ09NUCAtIFsxNToxM10gKi8KKyNkZWZpbmUgV004OTkzX0RSQ19TVEFSVFVQX0dBSU5fTUFTSyAgICAgICAgICAgIDB4MUYwMCAgLyogRFJDX1NUQVJUVVBfR0FJTiAtIFsxMjo4XSAqLworI2RlZmluZSBXTTg5OTNfRFJDX1NUQVJUVVBfR0FJTl9TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBEUkNfU1RBUlRVUF9HQUlOIC0gWzEyOjhdICovCisjZGVmaW5lIFdNODk5M19EUkNfU1RBUlRVUF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgIDUgIC8qIERSQ19TVEFSVFVQX0dBSU4gLSBbMTI6OF0gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jIGIvc291bmQvc29jL2NvZGVjcy93bTkwODEuYwppbmRleCA4NmZjNTdlLi5jNjRlNTVhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMKQEAgLTE2NSw4NyArMTY1LDIzIEBACiAJaW50IG1hc3RlcjsKIAlpbnQgZmxsX2ZyZWY7CiAJaW50IGZsbF9mb3V0OworCWludCB0ZG1fd2lkdGg7CiAJc3RydWN0IHdtOTA4MV9yZXR1bmVfbW9iaWxlX2NvbmZpZyAqcmV0dW5lOwogfTsKIAotc3RhdGljIGludCB3bTkwODFfcmVnX2lzX3ZvbGF0aWxlKGludCByZWcpCitzdGF0aWMgaW50IHdtOTA4MV92b2xhdGlsZV9yZWdpc3Rlcih1bnNpZ25lZCBpbnQgcmVnKQogewogCXN3aXRjaCAocmVnKSB7CisJY2FzZSBXTTkwODFfU09GVFdBUkVfUkVTRVQ6CisJCXJldHVybiAxOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCB3bTkwODFfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQkJCQkgIHVuc2lnbmVkIGludCByZWcpCi17Ci0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JQlVHX09OKHJlZyA+IFdNOTA4MV9NQVhfUkVHSVNURVIpOwotCXJldHVybiBjYWNoZVtyZWddOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHdtOTA4MV9yZWFkX2h3KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdTggcmVnKQotewotCXN0cnVjdCBpMmNfbXNnIHhmZXJbMl07Ci0JdTE2IGRhdGE7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKLQotCUJVR19PTihyZWcgPiBXTTkwODFfTUFYX1JFR0lTVEVSKTsKLQotCS8qIFdyaXRlIHJlZ2lzdGVyICovCi0JeGZlclswXS5hZGRyID0gY2xpZW50LT5hZGRyOwotCXhmZXJbMF0uZmxhZ3MgPSAwOwotCXhmZXJbMF0ubGVuID0gMTsKLQl4ZmVyWzBdLmJ1ZiA9ICZyZWc7Ci0KLQkvKiBSZWFkIGRhdGEgKi8KLQl4ZmVyWzFdLmFkZHIgPSBjbGllbnQtPmFkZHI7Ci0JeGZlclsxXS5mbGFncyA9IEkyQ19NX1JEOwotCXhmZXJbMV0ubGVuID0gMjsKLQl4ZmVyWzFdLmJ1ZiA9ICh1OCAqKSZkYXRhOwotCi0JcmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgeGZlciwgMik7Ci0JaWYgKHJldCAhPSAyKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiaTJjX3RyYW5zZmVyKCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAoZGF0YSA+PiA4KSB8ICgoZGF0YSAmIDB4ZmYpIDw8IDgpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHdtOTA4MV9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZykKLXsKLQlpZiAod205MDgxX3JlZ19pc192b2xhdGlsZShyZWcpKQotCQlyZXR1cm4gd205MDgxX3JlYWRfaHcoY29kZWMsIHJlZyk7Ci0JZWxzZQotCQlyZXR1cm4gd205MDgxX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCByZWcpOwotfQotCi1zdGF0aWMgaW50IHdtOTA4MV93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCi0JCQl1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0JdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JdTggZGF0YVszXTsKLQotCUJVR19PTihyZWcgPiBXTTkwODFfTUFYX1JFR0lTVEVSKTsKLQotCWlmICghd205MDgxX3JlZ19pc192b2xhdGlsZShyZWcpKQotCQljYWNoZVtyZWddID0gdmFsdWU7Ci0KLQlkYXRhWzBdID0gcmVnOwotCWRhdGFbMV0gPSB2YWx1ZSA+PiA4OwotCWRhdGFbMl0gPSB2YWx1ZSAmIDB4MDBmZjsKLQotCWlmIChjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMykgPT0gMykKLQkJcmV0dXJuIDA7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTzsKLX0KLQogc3RhdGljIGludCB3bTkwODFfcmVzZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXJldHVybiB3bTkwODFfd3JpdGUoY29kZWMsIFdNOTA4MV9TT0ZUV0FSRV9SRVNFVCwgMCk7CisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9TT0ZUV0FSRV9SRVNFVCwgMCk7CiB9CiAKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkcmNfaW5fdGx2LCAtNDUwMCwgNzUsIDApOwpAQCAtMzU2LDcgKzI5Miw3IEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXVuc2lnbmVkIGludCByZWc7CiAKLQlyZWcgPSB3bTkwODFfcmVhZChjb2RlYywgV005MDgxX0FOQUxPR1VFX1NQRUFLRVJfMik7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTkwODFfQU5BTE9HVUVfU1BFQUtFUl8yKTsKIAlpZiAocmVnICYgV005MDgxX1NQS19NT0RFKQogCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IDE7CiAJZWxzZQpAQCAtMzc1LDggKzMxMSw4IEBACiAJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXVuc2lnbmVkIGludCByZWdfcHdyID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9QT1dFUl9NQU5BR0VNRU5UKTsKLQl1bnNpZ25lZCBpbnQgcmVnMiA9IHdtOTA4MV9yZWFkKGNvZGVjLCBXTTkwODFfQU5BTE9HVUVfU1BFQUtFUl8yKTsKKwl1bnNpZ25lZCBpbnQgcmVnX3B3ciA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX1BPV0VSX01BTkFHRU1FTlQpOworCXVuc2lnbmVkIGludCByZWcyID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTkwODFfQU5BTE9HVUVfU1BFQUtFUl8yKTsKIAogCS8qIEFyZSB3ZSBjaGFuZ2luZyBhbnl0aGluZz8gKi8KIAlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPT0KQEAgLTM5Nyw3ICszMzMsNyBAQAogCQlyZWcyICY9IH5XTTkwODFfU1BLX01PREU7CiAJfQogCi0Jd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfQU5BTE9HVUVfU1BFQUtFUl8yLCByZWcyKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTkwODFfQU5BTE9HVUVfU1BFQUtFUl8yLCByZWcyKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDU2LDcgKzM5Miw3IEBACiAJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKLQl1bnNpZ25lZCBpbnQgcmVnID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9QT1dFUl9NQU5BR0VNRU5UKTsKKwl1bnNpZ25lZCBpbnQgcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTkwODFfUE9XRVJfTUFOQUdFTUVOVCk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CkBAIC00NjgsNyArNDA0LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0Jd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfUE9XRVJfTUFOQUdFTUVOVCwgcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTkwODFfUE9XRVJfTUFOQUdFTUVOVCwgcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjA3LDcgKzU0Myw3IEBACiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmVnNSA9IHdtOTA4MV9yZWFkKGNvZGVjLCBXTTkwODFfRkxMX0NPTlRST0xfNSk7CisJcmVnNSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX0ZMTF9DT05UUk9MXzUpOwogCXJlZzUgJj0gfldNOTA4MV9GTExfQ0xLX1NSQ19NQVNLOwogCiAJc3dpdGNoIChmbGxfaWQpIHsKQEAgLTYyMSw0NCArNTU3LDQ0IEBACiAJfQogCiAJLyogRGlzYWJsZSBDTEtfU1lTIHdoaWxlIHdlIHJlY29uZmlndXJlICovCi0JY2xrX3N5c19yZWcgPSB3bTkwODFfcmVhZChjb2RlYywgV005MDgxX0NMT0NLX0NPTlRST0xfMyk7CisJY2xrX3N5c19yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNOTA4MV9DTE9DS19DT05UUk9MXzMpOwogCWlmIChjbGtfc3lzX3JlZyAmIFdNOTA4MV9DTEtfU1lTX0VOQSkKLQkJd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfQ0xPQ0tfQ09OVFJPTF8zLAorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTkwODFfQ0xPQ0tfQ09OVFJPTF8zLAogCQkJICAgICBjbGtfc3lzX3JlZyAmIH5XTTkwODFfQ0xLX1NZU19FTkEpOwogCiAJLyogQW55IEZMTCBjb25maWd1cmF0aW9uIGNoYW5nZSByZXF1aXJlcyB0aGF0IHRoZSBGTEwgYmUKIAkgKiBkaXNhYmxlZCBmaXJzdC4gKi8KLQlyZWcxID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9GTExfQ09OVFJPTF8xKTsKKwlyZWcxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTkwODFfRkxMX0NPTlRST0xfMSk7CiAJcmVnMSAmPSB+V005MDgxX0ZMTF9FTkE7Ci0Jd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfRkxMX0NPTlRST0xfMSwgcmVnMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX0ZMTF9DT05UUk9MXzEsIHJlZzEpOwogCiAJLyogQXBwbHkgdGhlIGNvbmZpZ3VyYXRpb24gKi8KIAlpZiAoZmxsX2Rpdi5rKQogCQlyZWcxIHw9IFdNOTA4MV9GTExfRlJBQ19NQVNLOwogCWVsc2UKIAkJcmVnMSAmPSB+V005MDgxX0ZMTF9GUkFDX01BU0s7Ci0Jd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfRkxMX0NPTlRST0xfMSwgcmVnMSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX0ZMTF9DT05UUk9MXzEsIHJlZzEpOwogCi0Jd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfRkxMX0NPTlRST0xfMiwKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTkwODFfRkxMX0NPTlRST0xfMiwKIAkJICAgICAoZmxsX2Rpdi5mbGxfb3V0ZGl2IDw8IFdNOTA4MV9GTExfT1VURElWX1NISUZUKSB8CiAJCSAgICAgKGZsbF9kaXYuZmxsX2ZyYXRpbyA8PCBXTTkwODFfRkxMX0ZSQVRJT19TSElGVCkpOwotCXdtOTA4MV93cml0ZShjb2RlYywgV005MDgxX0ZMTF9DT05UUk9MXzMsIGZsbF9kaXYuayk7CisJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX0ZMTF9DT05UUk9MXzMsIGZsbF9kaXYuayk7CiAKLQlyZWc0ID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9GTExfQ09OVFJPTF80KTsKKwlyZWc0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTkwODFfRkxMX0NPTlRST0xfNCk7CiAJcmVnNCAmPSB+V005MDgxX0ZMTF9OX01BU0s7CiAJcmVnNCB8PSBmbGxfZGl2Lm4gPDwgV005MDgxX0ZMTF9OX1NISUZUOwotCXdtOTA4MV93cml0ZShjb2RlYywgV005MDgxX0ZMTF9DT05UUk9MXzQsIHJlZzQpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9GTExfQ09OVFJPTF80LCByZWc0KTsKIAogCXJlZzUgJj0gfldNOTA4MV9GTExfQ0xLX1JFRl9ESVZfTUFTSzsKIAlyZWc1IHw9IGZsbF9kaXYuZmxsX2Nsa19yZWZfZGl2IDw8IFdNOTA4MV9GTExfQ0xLX1JFRl9ESVZfU0hJRlQ7Ci0Jd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfRkxMX0NPTlRST0xfNSwgcmVnNSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX0ZMTF9DT05UUk9MXzUsIHJlZzUpOwogCiAJLyogRW5hYmxlIHRoZSBGTEwgKi8KLQl3bTkwODFfd3JpdGUoY29kZWMsIFdNOTA4MV9GTExfQ09OVFJPTF8xLCByZWcxIHwgV005MDgxX0ZMTF9FTkEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9GTExfQ09OVFJPTF8xLCByZWcxIHwgV005MDgxX0ZMTF9FTkEpOwogCiAJLyogVGhlbiBicmluZyBDTEtfU1lTIHVwIGFnYWluIGlmIGl0IHdhcyBkaXNhYmxlZCAqLwogCWlmIChjbGtfc3lzX3JlZyAmIFdNOTA4MV9DTEtfU1lTX0VOQSkKLQkJd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfQ0xPQ0tfQ09OVFJPTF8zLCBjbGtfc3lzX3JlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9DTE9DS19DT05UUk9MXzMsIGNsa19zeXNfcmVnKTsKIAogCWRldl9kYmcoY29kZWMtPmRldiwgIkZMTCBlbmFibGVkIGF0ICVkSHotPiVkSHpcbiIsIEZyZWYsIEZvdXQpOwogCkBAIC03MDcsNiArNjQzLDEwIEBACiAJCQkJICAgIHRhcmdldCA+IDMwMDAwMDApCiAJCQkJCWJyZWFrOwogCQkJfQorCisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKGNsa19zeXNfcmF0ZXMpKQorCQkJCXJldHVybiAtRUlOVkFMOworCiAJCX0gZWxzZSBpZiAod205MDgxLT5mcykgewogCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xrX3N5c19yYXRlcyk7IGkrKykgewogCQkJCW5ld19zeXNjbGsgPSBjbGtfc3lzX3JhdGVzW2ldLnJhdGlvCkBAIC03MTQsNiArNjU0LDEwIEBACiAJCQkJaWYgKG5ld19zeXNjbGsgPiAzMDAwMDAwKQogCQkJCQlicmVhazsKIAkJCX0KKworCQkJaWYgKGkgPT0gQVJSQVlfU0laRShjbGtfc3lzX3JhdGVzKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwogCQl9IGVsc2UgewogCQkJbmV3X3N5c2NsayA9IDEyMjg4MDAwOwogCQl9CkBAIC03MzQsMTkgKzY3OCwxOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZWcgPSB3bTkwODFfcmVhZChjb2RlYywgV005MDgxX0NMT0NLX0NPTlRST0xfMSk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTkwODFfQ0xPQ0tfQ09OVFJPTF8xKTsKIAlpZiAobWNsa2RpdikKIAkJcmVnIHw9IFdNOTA4MV9NQ0xLRElWMjsKIAllbHNlCiAJCXJlZyAmPSB+V005MDgxX01DTEtESVYyOwotCXdtOTA4MV93cml0ZShjb2RlYywgV005MDgxX0NMT0NLX0NPTlRST0xfMSwgcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTkwODFfQ0xPQ0tfQ09OVFJPTF8xLCByZWcpOwogCi0JcmVnID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9DTE9DS19DT05UUk9MXzMpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX0NMT0NLX0NPTlRST0xfMyk7CiAJaWYgKGZsbCkKIAkJcmVnIHw9IFdNOTA4MV9DTEtfU1JDX1NFTDsKIAllbHNlCiAJCXJlZyAmPSB+V005MDgxX0NMS19TUkNfU0VMOwotCXdtOTA4MV93cml0ZShjb2RlYywgV005MDgxX0NMT0NLX0NPTlRST0xfMywgcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTkwODFfQ0xPQ0tfQ09OVFJPTF8zLCByZWcpOwogCiAJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ0xLX1NZUyBpcyAlZEh6XG4iLCB3bTkwODEtPnN5c2Nsa19yYXRlKTsKIApAQCAtODQ2LDc2ICs3OTAsNzYgQEAKIAogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJCS8qIFZNSUQ9Mio0MGsgKi8KLQkJcmVnID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9WTUlEX0NPTlRST0wpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNOTA4MV9WTUlEX0NPTlRST0wpOwogCQlyZWcgJj0gfldNOTA4MV9WTUlEX1NFTF9NQVNLOwogCQlyZWcgfD0gMHgyOwotCQl3bTkwODFfd3JpdGUoY29kZWMsIFdNOTA4MV9WTUlEX0NPTlRST0wsIHJlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9WTUlEX0NPTlRST0wsIHJlZyk7CiAKIAkJLyogTm9ybWFsIGJpYXMgY3VycmVudCAqLwotCQlyZWcgPSB3bTkwODFfcmVhZChjb2RlYywgV005MDgxX0JJQVNfQ09OVFJPTF8xKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTkwODFfQklBU19DT05UUk9MXzEpOwogCQlyZWcgJj0gfldNOTA4MV9TVEJZX0JJQVNfRU5BOwotCQl3bTkwODFfd3JpdGUoY29kZWMsIFdNOTA4MV9CSUFTX0NPTlRST0xfMSwgcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX0JJQVNfQ09OVFJPTF8xLCByZWcpOwogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCS8qIEluaXRpYWwgY29sZCBzdGFydCAqLwogCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgewogCQkJLyogRGlzYWJsZSBMSU5FT1VUIGRpc2NoYXJnZSAqLwotCQkJcmVnID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9BTlRJX1BPUF9DT05UUk9MKTsKKwkJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX0FOVElfUE9QX0NPTlRST0wpOwogCQkJcmVnICY9IH5XTTkwODFfTElORU9VVF9ESVNDSDsKLQkJCXdtOTA4MV93cml0ZShjb2RlYywgV005MDgxX0FOVElfUE9QX0NPTlRST0wsIHJlZyk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTkwODFfQU5USV9QT1BfQ09OVFJPTCwgcmVnKTsKIAogCQkJLyogU2VsZWN0IHN0YXJ0dXAgYmlhcyBzb3VyY2UgKi8KLQkJCXJlZyA9IHdtOTA4MV9yZWFkKGNvZGVjLCBXTTkwODFfQklBU19DT05UUk9MXzEpOworCQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTkwODFfQklBU19DT05UUk9MXzEpOwogCQkJcmVnIHw9IFdNOTA4MV9CSUFTX1NSQyB8IFdNOTA4MV9CSUFTX0VOQTsKLQkJCXdtOTA4MV93cml0ZShjb2RlYywgV005MDgxX0JJQVNfQ09OVFJPTF8xLCByZWcpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX0JJQVNfQ09OVFJPTF8xLCByZWcpOwogCiAJCQkvKiBWTUlEIDIqNGs7IFNvZnQgVk1JRCByYW1wIGVuYWJsZSAqLwotCQkJcmVnID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9WTUlEX0NPTlRST0wpOworCQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTkwODFfVk1JRF9DT05UUk9MKTsKIAkJCXJlZyB8PSBXTTkwODFfVk1JRF9SQU1QIHwgMHg2OwotCQkJd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfVk1JRF9DT05UUk9MLCByZWcpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX1ZNSURfQ09OVFJPTCwgcmVnKTsKIAogCQkJbWRlbGF5KDEwMCk7CiAKIAkJCS8qIE5vcm1hbCBiaWFzIGVuYWJsZSAmIHNvZnQgc3RhcnQgb2ZmICovCiAJCQlyZWcgfD0gV005MDgxX0JJQVNfRU5BOwogCQkJcmVnICY9IH5XTTkwODFfVk1JRF9SQU1QOwotCQkJd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfVk1JRF9DT05UUk9MLCByZWcpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX1ZNSURfQ09OVFJPTCwgcmVnKTsKIAogCQkJLyogU3RhbmRhcmQgYmlhcyBzb3VyY2UgKi8KLQkJCXJlZyA9IHdtOTA4MV9yZWFkKGNvZGVjLCBXTTkwODFfQklBU19DT05UUk9MXzEpOworCQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTkwODFfQklBU19DT05UUk9MXzEpOwogCQkJcmVnICY9IH5XTTkwODFfQklBU19TUkM7Ci0JCQl3bTkwODFfd3JpdGUoY29kZWMsIFdNOTA4MV9CSUFTX0NPTlRST0xfMSwgcmVnKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9CSUFTX0NPTlRST0xfMSwgcmVnKTsKIAkJfQogCiAJCS8qIFZNSUQgMioyNDBrICovCi0JCXJlZyA9IHdtOTA4MV9yZWFkKGNvZGVjLCBXTTkwODFfQklBU19DT05UUk9MXzEpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNOTA4MV9CSUFTX0NPTlRST0xfMSk7CiAJCXJlZyAmPSB+V005MDgxX1ZNSURfU0VMX01BU0s7CiAJCXJlZyB8PSAweDQwOwotCQl3bTkwODFfd3JpdGUoY29kZWMsIFdNOTA4MV9WTUlEX0NPTlRST0wsIHJlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9WTUlEX0NPTlRST0wsIHJlZyk7CiAKIAkJLyogU3RhbmRieSBiaWFzIGN1cnJlbnQgb24gKi8KLQkJcmVnID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9CSUFTX0NPTlRST0xfMSk7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX0JJQVNfQ09OVFJPTF8xKTsKIAkJcmVnIHw9IFdNOTA4MV9TVEJZX0JJQVNfRU5BOwotCQl3bTkwODFfd3JpdGUoY29kZWMsIFdNOTA4MV9CSUFTX0NPTlRST0xfMSwgcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX0JJQVNfQ09OVFJPTF8xLCByZWcpOwogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKIAkJLyogU3RhcnR1cCBiaWFzIHNvdXJjZSAqLwotCQlyZWcgPSB3bTkwODFfcmVhZChjb2RlYywgV005MDgxX0JJQVNfQ09OVFJPTF8xKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTkwODFfQklBU19DT05UUk9MXzEpOwogCQlyZWcgfD0gV005MDgxX0JJQVNfU1JDOwotCQl3bTkwODFfd3JpdGUoY29kZWMsIFdNOTA4MV9CSUFTX0NPTlRST0xfMSwgcmVnKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX0JJQVNfQ09OVFJPTF8xLCByZWcpOwogCiAJCS8qIERpc2FibGUgVk1JRCBhbmQgYmlhc2VzIHdpdGggc29mdCByYW1waW5nICovCi0JCXJlZyA9IHdtOTA4MV9yZWFkKGNvZGVjLCBXTTkwODFfVk1JRF9DT05UUk9MKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTkwODFfVk1JRF9DT05UUk9MKTsKIAkJcmVnICY9IH4oV005MDgxX1ZNSURfU0VMX01BU0sgfCBXTTkwODFfQklBU19FTkEpOwogCQlyZWcgfD0gV005MDgxX1ZNSURfUkFNUDsKLQkJd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfVk1JRF9DT05UUk9MLCByZWcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTkwODFfVk1JRF9DT05UUk9MLCByZWcpOwogCiAJCS8qIEFjdGl2ZWx5IGRpc2NoYXJnZSBMSU5FT1VUICovCi0JCXJlZyA9IHdtOTA4MV9yZWFkKGNvZGVjLCBXTTkwODFfQU5USV9QT1BfQ09OVFJPTCk7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX0FOVElfUE9QX0NPTlRST0wpOwogCQlyZWcgfD0gV005MDgxX0xJTkVPVVRfRElTQ0g7Ci0JCXdtOTA4MV93cml0ZShjb2RlYywgV005MDgxX0FOVElfUE9QX0NPTlRST0wsIHJlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9BTlRJX1BPUF9DT05UUk9MLCByZWcpOwogCQlicmVhazsKIAl9CiAKQEAgLTkyOSw3ICs4NzMsNyBAQAogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CiAJc3RydWN0IHdtOTA4MV9wcml2ICp3bTkwODEgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBhaWYyID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9BVURJT19JTlRFUkZBQ0VfMik7CisJdW5zaWduZWQgaW50IGFpZjIgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNOTA4MV9BVURJT19JTlRFUkZBQ0VfMik7CiAKIAlhaWYyICY9IH4oV005MDgxX0FJRl9CQ0xLX0lOViB8IFdNOTA4MV9BSUZfTFJDTEtfSU5WIHwKIAkJICBXTTkwODFfQkNMS19ESVIgfCBXTTkwODFfTFJDTEtfRElSIHwgV005MDgxX0FJRl9GTVRfTUFTSyk7CkBAIC0xMDEwLDcgKzk1NCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXdtOTA4MV93cml0ZShjb2RlYywgV005MDgxX0FVRElPX0lOVEVSRkFDRV8yLCBhaWYyKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTkwODFfQVVESU9fSU5URVJGQUNFXzIsIGFpZjIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDI0LDQ3ICs5NjgsNTEgQEAKIAlpbnQgcmV0LCBpLCBiZXN0LCBiZXN0X3ZhbCwgY3VyX3ZhbDsKIAl1bnNpZ25lZCBpbnQgY2xrX2N0cmwyLCBhaWYxLCBhaWYyLCBhaWYzLCBhaWY0OwogCi0JY2xrX2N0cmwyID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9DTE9DS19DT05UUk9MXzIpOworCWNsa19jdHJsMiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX0NMT0NLX0NPTlRST0xfMik7CiAJY2xrX2N0cmwyICY9IH4oV005MDgxX0NMS19TWVNfUkFURV9NQVNLIHwgV005MDgxX1NBTVBMRV9SQVRFX01BU0spOwogCi0JYWlmMSA9IHdtOTA4MV9yZWFkKGNvZGVjLCBXTTkwODFfQVVESU9fSU5URVJGQUNFXzEpOworCWFpZjEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNOTA4MV9BVURJT19JTlRFUkZBQ0VfMSk7CiAKLQlhaWYyID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9BVURJT19JTlRFUkZBQ0VfMik7CisJYWlmMiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX0FVRElPX0lOVEVSRkFDRV8yKTsKIAlhaWYyICY9IH5XTTkwODFfQUlGX1dMX01BU0s7CiAKLQlhaWYzID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9BVURJT19JTlRFUkZBQ0VfMyk7CisJYWlmMyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX0FVRElPX0lOVEVSRkFDRV8zKTsKIAlhaWYzICY9IH5XTTkwODFfQkNMS19ESVZfTUFTSzsKIAotCWFpZjQgPSB3bTkwODFfcmVhZChjb2RlYywgV005MDgxX0FVRElPX0lOVEVSRkFDRV80KTsKKwlhaWY0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTkwODFfQVVESU9fSU5URVJGQUNFXzQpOwogCWFpZjQgJj0gfldNOTA4MV9MUkNMS19SQVRFX01BU0s7CiAKLQkvKiBXaGF0IEJDTEsgZG8gd2UgbmVlZD8gKi8KIAl3bTkwODEtPmZzID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKLQl3bTkwODEtPmJjbGsgPSAyICogd205MDgxLT5mczsKLQlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6Ci0JCXdtOTA4MS0+YmNsayAqPSAxNjsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6Ci0JCXdtOTA4MS0+YmNsayAqPSAyMDsKLQkJYWlmMiB8PSAweDQ7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6Ci0JCXdtOTA4MS0+YmNsayAqPSAyNDsKLQkJYWlmMiB8PSAweDg7Ci0JCWJyZWFrOwotCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6Ci0JCXdtOTA4MS0+YmNsayAqPSAzMjsKLQkJYWlmMiB8PSAweGM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAotCWlmIChhaWYxICYgV005MDgxX0FJRkRBQ19URE1fTU9ERV9NQVNLKSB7CisJaWYgKHdtOTA4MS0+dGRtX3dpZHRoKSB7CisJCS8qIElmIFRETSBpcyBzZXQgdXAgdGhlbiB0aGF0IGZpeGVzIG91ciBCQ0xLLiAqLwogCQlpbnQgc2xvdHMgPSAoKGFpZjEgJiBXTTkwODFfQUlGREFDX1RETV9NT0RFX01BU0spID4+CiAJCQkgICAgIFdNOTA4MV9BSUZEQUNfVERNX01PREVfU0hJRlQpICsgMTsKLQkJd205MDgxLT5iY2xrICo9IHNsb3RzOworCisJCXdtOTA4MS0+YmNsayA9IHdtOTA4MS0+ZnMgKiB3bTkwODEtPnRkbV93aWR0aCAqIHNsb3RzOworCX0gZWxzZSB7CisJCS8qIE90aGVyd2lzZSB3b3JrIG91dCBhIEJDTEsgZnJvbSB0aGUgc2FtcGxlIHNpemUgKi8KKwkJd205MDgxLT5iY2xrID0gMiAqIHdtOTA4MS0+ZnM7CisKKwkJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwkJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJCXdtOTA4MS0+YmNsayAqPSAxNjsKKwkJCWJyZWFrOworCQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJCXdtOTA4MS0+YmNsayAqPSAyMDsKKwkJCWFpZjIgfD0gMHg0OworCQkJYnJlYWs7CisJCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCQl3bTkwODEtPmJjbGsgKj0gMjQ7CisJCQlhaWYyIHw9IDB4ODsKKwkJCWJyZWFrOworCQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQkJd205MDgxLT5iY2xrICo9IDMyOworCQkJYWlmMiB8PSAweGM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCiAJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiVGFyZ2V0IEJDTEsgaXMgJWRIelxuIiwgd205MDgxLT5iY2xrKTsKQEAgLTExNDksMjIgKzEwOTcsMjIgQEAKIAkJCXMtPm5hbWUsIHMtPnJhdGUpOwogCiAJCS8qIElmIHRoZSBFUSBpcyBlbmFibGVkIHRoZW4gZGlzYWJsZSBpdCB3aGlsZSB3ZSB3cml0ZSBvdXQgKi8KLQkJZXExID0gd205MDgxX3JlYWQoY29kZWMsIFdNOTA4MV9FUV8xKSAmIFdNOTA4MV9FUV9FTkE7CisJCWVxMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX0VRXzEpICYgV005MDgxX0VRX0VOQTsKIAkJaWYgKGVxMSAmIFdNOTA4MV9FUV9FTkEpCi0JCQl3bTkwODFfd3JpdGUoY29kZWMsIFdNOTA4MV9FUV8xLCAwKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9FUV8xLCAwKTsKIAogCQkvKiBXcml0ZSBvdXQgdGhlIG90aGVyIHZhbHVlcyAqLwogCQlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShzLT5jb25maWcpOyBpKyspCi0JCQl3bTkwODFfd3JpdGUoY29kZWMsIFdNOTA4MV9FUV8xICsgaSwgcy0+Y29uZmlnW2ldKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9FUV8xICsgaSwgcy0+Y29uZmlnW2ldKTsKIAogCQllcTEgfD0gKHMtPmNvbmZpZ1swXSAmIH5XTTkwODFfRVFfRU5BKTsKLQkJd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfRVFfMSwgZXExKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX0VRXzEsIGVxMSk7CiAJfQogCi0Jd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfQ0xPQ0tfQ09OVFJPTF8yLCBjbGtfY3RybDIpOwotCXdtOTA4MV93cml0ZShjb2RlYywgV005MDgxX0FVRElPX0lOVEVSRkFDRV8yLCBhaWYyKTsKLQl3bTkwODFfd3JpdGUoY29kZWMsIFdNOTA4MV9BVURJT19JTlRFUkZBQ0VfMywgYWlmMyk7Ci0Jd205MDgxX3dyaXRlKGNvZGVjLCBXTTkwODFfQVVESU9fSU5URVJGQUNFXzQsIGFpZjQpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9DTE9DS19DT05UUk9MXzIsIGNsa19jdHJsMik7CisJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX0FVRElPX0lOVEVSRkFDRV8yLCBhaWYyKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTkwODFfQVVESU9fSU5URVJGQUNFXzMsIGFpZjMpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9BVURJT19JTlRFUkZBQ0VfNCwgYWlmNCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNzQsMTQgKzExMjIsMTQgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwogCXVuc2lnbmVkIGludCByZWc7CiAKLQlyZWcgPSB3bTkwODFfcmVhZChjb2RlYywgV005MDgxX0RBQ19ESUdJVEFMXzIpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX0RBQ19ESUdJVEFMXzIpOwogCiAJaWYgKG11dGUpCiAJCXJlZyB8PSBXTTkwODFfREFDX01VVEU7CiAJZWxzZQogCQlyZWcgJj0gfldNOTA4MV9EQUNfTVVURTsKIAotCXdtOTA4MV93cml0ZShjb2RlYywgV005MDgxX0RBQ19ESUdJVEFMXzIsIHJlZyk7CisJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX0RBQ19ESUdJVEFMXzIsIHJlZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMDcsMTkgKzExNTUsMjUgQEAKIH0KIAogc3RhdGljIGludCB3bTkwODFfc2V0X3RkbV9zbG90KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXNrLCBpbnQgc2xvdHMpCisJdW5zaWduZWQgaW50IHR4X21hc2ssIHVuc2lnbmVkIGludCByeF9tYXNrLCBpbnQgc2xvdHMsIGludCBzbG90X3dpZHRoKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7Ci0JdW5zaWduZWQgaW50IGFpZjEgPSB3bTkwODFfcmVhZChjb2RlYywgV005MDgxX0FVRElPX0lOVEVSRkFDRV8xKTsKKwlzdHJ1Y3Qgd205MDgxX3ByaXYgKndtOTA4MSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IGFpZjEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNOTA4MV9BVURJT19JTlRFUkZBQ0VfMSk7CiAKIAlhaWYxICY9IH4oV005MDgxX0FJRkRBQ19URE1fU0xPVF9NQVNLIHwgV005MDgxX0FJRkRBQ19URE1fTU9ERV9NQVNLKTsKIAotCWlmIChzbG90cyA8IDEgfHwgc2xvdHMgPiA0KQorCWlmIChzbG90cyA8IDAgfHwgc2xvdHMgPiA0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXdtOTA4MS0+dGRtX3dpZHRoID0gc2xvdF93aWR0aDsKKworCWlmIChzbG90cyA9PSAwKQorCQlzbG90cyA9IDE7CisKIAlhaWYxIHw9IChzbG90cyAtIDEpIDw8IFdNOTA4MV9BSUZEQUNfVERNX01PREVfU0hJRlQ7CiAKLQlzd2l0Y2ggKG1hc2spIHsKKwlzd2l0Y2ggKHJ4X21hc2spIHsKIAljYXNlIDE6CiAJCWJyZWFrOwogCWNhc2UgMjoKQEAgLTEyMzUsNyArMTE4OSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXdtOTA4MV93cml0ZShjb2RlYywgV005MDgxX0FVRElPX0lOVEVSRkFDRV8xLCBhaWYxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTkwODFfQVVESU9fSU5URVJGQUNFXzEsIGFpZjEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzU3LDcgKzEzMTEsNyBAQAogCQlpZiAoaSA9PSBXTTkwODFfU09GVFdBUkVfUkVTRVQpCiAJCQljb250aW51ZTsKIAotCQl3bTkwODFfd3JpdGUoY29kZWMsIGksIHJlZ19jYWNoZVtpXSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGksIHJlZ19jYWNoZVtpXSk7CiAJfQogCiAJd205MDgxX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CkBAIC0xMzc3LDcgKzEzMzEsOCBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd205MDgxKTsKIAotc3RhdGljIGludCB3bTkwODFfcmVnaXN0ZXIoc3RydWN0IHdtOTA4MV9wcml2ICp3bTkwODEpCitzdGF0aWMgaW50IHdtOTA4MV9yZWdpc3RlcihzdHJ1Y3Qgd205MDgxX3ByaXYgKndtOTA4MSwKKwkJCSAgIGVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd205MDgxLT5jb2RlYzsKIAlpbnQgcmV0OwpAQCAtMTM5NiwxOSArMTM1MSwyNCBAQAogCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTkwODE7CiAJY29kZWMtPm5hbWUgPSAiV005MDgxIjsKIAljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQljb2RlYy0+cmVhZCA9IHdtOTA4MV9yZWFkOwotCWNvZGVjLT53cml0ZSA9IHdtOTA4MV93cml0ZTsKIAljb2RlYy0+ZGFpID0gJndtOTA4MV9kYWk7CiAJY29kZWMtPm51bV9kYWkgPSAxOwogCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUod205MDgxLT5yZWdfY2FjaGUpOwogCWNvZGVjLT5yZWdfY2FjaGUgPSAmd205MDgxLT5yZWdfY2FjaGU7CiAJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOwogCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtOTA4MV9zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIgPSB3bTkwODFfdm9sYXRpbGVfcmVnaXN0ZXI7CiAKIAltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd205MDgxX3JlZ19kZWZhdWx0cywKIAkgICAgICAgc2l6ZW9mKHdtOTA4MV9yZWdfZGVmYXVsdHMpKTsKIAotCXJlZyA9IHdtOTA4MV9yZWFkX2h3KGNvZGVjLCBXTTkwODFfU09GVFdBUkVfUkVTRVQpOworCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCAxNiwgY29udHJvbCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNOTA4MV9TT0ZUV0FSRV9SRVNFVCk7CiAJaWYgKHJlZyAhPSAweDkwODEpIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRGV2aWNlIGlzIG5vdCBhIFdNOTA4MTogSUQ9MHgleFxuIiwgcmVnKTsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTE0MjQsMTAgKzEzODQsMTAgQEAKIAl3bTkwODFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAogCS8qIEVuYWJsZSB6ZXJvIGNyb3NzIGJ5IGRlZmF1bHQgKi8KLQlyZWcgPSB3bTkwODFfcmVhZChjb2RlYywgV005MDgxX0FOQUxPR1VFX0xJTkVPVVQpOwotCXdtOTA4MV93cml0ZShjb2RlYywgV005MDgxX0FOQUxPR1VFX0xJTkVPVVQsIHJlZyB8IFdNOTA4MV9MSU5FT1VUWkMpOwotCXJlZyA9IHdtOTA4MV9yZWFkKGNvZGVjLCBXTTkwODFfQU5BTE9HVUVfU1BFQUtFUl9QR0EpOwotCXdtOTA4MV93cml0ZShjb2RlYywgV005MDgxX0FOQUxPR1VFX1NQRUFLRVJfUEdBLAorCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX0FOQUxPR1VFX0xJTkVPVVQpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNOTA4MV9BTkFMT0dVRV9MSU5FT1VULCByZWcgfCBXTTkwODFfTElORU9VVFpDKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNOTA4MV9BTkFMT0dVRV9TUEVBS0VSX1BHQSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV005MDgxX0FOQUxPR1VFX1NQRUFLRVJfUEdBLAogCQkgICAgIHJlZyB8IFdNOTA4MV9TUEtQR0FaQyk7CiAKIAl3bTkwODFfZGFpLmRldiA9IGNvZGVjLT5kZXY7CkBAIC0xNDgyLDcgKzE0NDIsNyBAQAogCiAJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKIAotCXJldHVybiB3bTkwODFfcmVnaXN0ZXIod205MDgxKTsKKwlyZXR1cm4gd205MDgxX3JlZ2lzdGVyKHdtOTA4MSwgU05EX1NPQ19JMkMpOwogfQogCiBzdGF0aWMgX19kZXZleGl0IGludCB3bTkwODFfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQpAQCAtMTQ5Miw2ICsxNDUyLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd205MDgxX2kyY19zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHBtX21lc3NhZ2VfdCBtc2cpCit7CisJcmV0dXJuIHNuZF9zb2Nfc3VzcGVuZF9kZXZpY2UoJmNsaWVudC0+ZGV2KTsKK30KKworc3RhdGljIGludCB3bTkwODFfaTJjX3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXJldHVybiBzbmRfc29jX3Jlc3VtZV9kZXZpY2UoJmNsaWVudC0+ZGV2KTsKK30KKyNlbHNlCisjZGVmaW5lIHdtOTA4MV9pMmNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtOTA4MV9pMmNfcmVzdW1lIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd205MDgxX2kyY19pZFtdID0gewogCXsgIndtOTA4MSIsIDAgfSwKIAl7IH0KQEAgLTE1MDUsNiArMTQ4MCw4IEBACiAJfSwKIAkucHJvYmUgPSAgICB3bTkwODFfaTJjX3Byb2JlLAogCS5yZW1vdmUgPSAgIF9fZGV2ZXhpdF9wKHdtOTA4MV9pMmNfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9ICB3bTkwODFfaTJjX3N1c3BlbmQsCisJLnJlc3VtZSA9ICAgd205MDgxX2kyY19yZXN1bWUsCiAJLmlkX3RhYmxlID0gd205MDgxX2kyY19pZCwKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5jCmluZGV4IGZhODhiNDYuLmU3ZDI4NDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MDUuYwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJcmV0ID0gc25kX3NvY19pbml0X2NhcmQoc29jZGV2KTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIndtOTcwNTogZmFpbGVkIHRvIHJlZ2lzdGVyIGNhcmRcbiIpOwotCQlnb3RvIHBjbV9lcnI7CisJCWdvdG8gcmVzZXRfZXJyOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTQyMDI3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKQEAgLTAsMCArMSw3NDMgQEAKKy8qCisgKiB3bV9odWJzLmMgIC0tICBXTTg5OTMvNCBjb21tb24gY29kZQorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKworI2luY2x1ZGUgIndtODk5My5oIgorI2luY2x1ZGUgIndtX2h1YnMuaCIKKworY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod21faHVic19zcGttaXhfdGx2LCAtMzAwLCAzMDAsIDApOworRVhQT1JUX1NZTUJPTF9HUEwod21faHVic19zcGttaXhfdGx2KTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGlucGdhX3RsdiwgLTE2NTAsIDE1MCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoaW5taXhfc3dfdGx2LCAwLCAzMDAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShpbm1peF90bHYsIC0xNTAwLCAzMDAsIDEpOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGVhcnBpZWNlX3RsdiwgLTYwMCwgNjAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShvdXRtaXhfdGx2LCAtMjEwMCwgMzAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShzcGttaXhvdXRfdGx2LCAtMTgwMCwgNjAwLCAxKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShvdXRwZ2FfdGx2LCAtNTcwMCwgMTAwLCAwKTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3BrYm9vc3RfdGx2W10gPSB7CisJVExWX0RCX1JBTkdFX0hFQUQoNyksCisJMCwgNiwgVExWX0RCX1NDQUxFX0lURU0oMCwgMTUwLCAwKSwKKwk3LCA3LCBUTFZfREJfU0NBTEVfSVRFTSgxMjAwLCAwLCAwKSwKK307CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUobGluZV90bHYsIC02MDAsIDYwMCwgMCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpzcGVha2VyX3JlZl90ZXh0W10gPSB7CisJIlNQS1ZERC8yIiwKKwkiVk1JRCIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHNwZWFrZXJfcmVmID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTkzX1NQRUFLRVJfTUlYRVIsIDgsIDIsIHNwZWFrZXJfcmVmX3RleHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqc3BlYWtlcl9tb2RlX3RleHRbXSA9IHsKKwkiQ2xhc3MgRCIsCisJIkNsYXNzIEFCIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc3BlYWtlcl9tb2RlID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTkzX1NQS01JWFJfQVRURU5VQVRJT04sIDgsIDIsIHNwZWFrZXJfbW9kZV90ZXh0KTsKKworc3RhdGljIHZvaWQgd2FpdF9mb3JfZGNfc2Vydm8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCByZWc7CisJaW50IGNvdW50ID0gMDsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIldhaXRpbmcgZm9yIERDIHNlcnZvLi4uXG4iKTsKKwlkbyB7CisJCWNvdW50Kys7CisJCW1zbGVlcCgxKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fUkVBREJBQ0tfMCk7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkRDIHNlcnZvIHN0YXR1czogJXhcbiIsIHJlZyk7CisJfSB3aGlsZSAoKHJlZyAmIFdNODk5M19EQ1NfQ0FMX0NPTVBMRVRFX01BU0spCisJCSAhPSBXTTg5OTNfRENTX0NBTF9DT01QTEVURV9NQVNLICYmIGNvdW50IDwgMTAwMCk7CisKKwlpZiAoKHJlZyAmIFdNODk5M19EQ1NfQ0FMX0NPTVBMRVRFX01BU0spCisJICAgICE9IFdNODk5M19EQ1NfQ0FMX0NPTVBMRVRFX01BU0spCisJCWRldl9lcnIoY29kZWMtPmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBEQyBTZXJ2b1xuIik7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIERDIHNlcnZvIGNhbGlicmF0aW9uIG9uIGdhaW4gY2hhbmdlcworICovCitzdGF0aWMgaW50IHdtODk5M19wdXRfZGNfc2Vydm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9zb2NfcHV0X3ZvbHN3XzJyKGtjb250cm9sLCB1Y29udHJvbCk7CisKKwkvKiBPbmx5IG5lZWQgdG8gZG8gdGhpcyBpZiB0aGUgb3V0cHV0cyBhcmUgYWN0aXZlICovCisJaWYgKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMSkKKwkgICAgJiAoV004OTkzX0hQT1VUMUxfRU5BIHwgV004OTkzX0hQT1VUMVJfRU5BKSkKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywKKwkJCQkgICAgV004OTkzX0RDX1NFUlZPXzAsCisJCQkJICAgIFdNODk5M19EQ1NfVFJJR19TSU5HTEVfMCB8CisJCQkJICAgIFdNODk5M19EQ1NfVFJJR19TSU5HTEVfMSwKKwkJCQkgICAgV004OTkzX0RDU19UUklHX1NJTkdMRV8wIHwKKwkJCQkgICAgV004OTkzX0RDU19UUklHX1NJTkdMRV8xKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbmFsb2d1ZV9zbmRfY29udHJvbHNbXSA9IHsKK1NPQ19TSU5HTEVfVExWKCJJTjFMIFZvbHVtZSIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgMCwgMzEsIDAsCisJICAgICAgIGlucGdhX3RsdiksCitTT0NfU0lOR0xFKCJJTjFMIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNywgMSwgMSksCitTT0NfU0lOR0xFKCJJTjFMIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNywgMSwgMCksCisKK1NPQ19TSU5HTEVfVExWKCJJTjFSIFZvbHVtZSIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsIDAsIDMxLCAwLAorCSAgICAgICBpbnBnYV90bHYpLAorU09DX1NJTkdMRSgiSU4xUiBTd2l0Y2giLCBXTTg5OTNfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FLCA3LCAxLCAxKSwKK1NPQ19TSU5HTEUoIklOMVIgWkMgU3dpdGNoIiwgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNywgMSwgMCksCisKKworU09DX1NJTkdMRV9UTFYoIklOMkwgVm9sdW1lIiwgV004OTkzX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLCAwLCAzMSwgMCwKKwkgICAgICAgaW5wZ2FfdGx2KSwKK1NPQ19TSU5HTEUoIklOMkwgU3dpdGNoIiwgV004OTkzX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLCA3LCAxLCAxKSwKK1NPQ19TSU5HTEUoIklOMkwgWkMgU3dpdGNoIiwgV004OTkzX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FLCA3LCAxLCAwKSwKKworU09DX1NJTkdMRV9UTFYoIklOMlIgVm9sdW1lIiwgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgMCwgMzEsIDAsCisJICAgICAgIGlucGdhX3RsdiksCitTT0NfU0lOR0xFKCJJTjJSIFN3aXRjaCIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsIDcsIDEsIDEpLAorU09DX1NJTkdMRSgiSU4yUiBaQyBTd2l0Y2giLCBXTTg5OTNfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FLCA3LCAxLCAwKSwKKworU09DX1NJTkdMRV9UTFYoIk1JWElOTCBJTjJMIFZvbHVtZSIsIFdNODk5M19JTlBVVF9NSVhFUjMsIDcsIDEsIDAsCisJICAgICAgIGlubWl4X3N3X3RsdiksCitTT0NfU0lOR0xFX1RMVigiTUlYSU5MIElOMUwgVm9sdW1lIiwgV004OTkzX0lOUFVUX01JWEVSMywgNCwgMSwgMCwKKwkgICAgICAgaW5taXhfc3dfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJNSVhJTkwgT3V0cHV0IFJlY29yZCBWb2x1bWUiLCBXTTg5OTNfSU5QVVRfTUlYRVIzLCAwLCA3LCAwLAorCSAgICAgICBpbm1peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIk1JWElOTCBJTjFMUCBWb2x1bWUiLCBXTTg5OTNfSU5QVVRfTUlYRVI1LCA2LCA3LCAwLCBpbm1peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIk1JWElOTCBEaXJlY3QgVm9pY2UgVm9sdW1lIiwgV004OTkzX0lOUFVUX01JWEVSNSwgMCwgNiwgMCwKKwkgICAgICAgaW5taXhfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIk1JWElOUiBJTjJSIFZvbHVtZSIsIFdNODk5M19JTlBVVF9NSVhFUjQsIDcsIDEsIDAsCisJICAgICAgIGlubWl4X3N3X3RsdiksCitTT0NfU0lOR0xFX1RMVigiTUlYSU5SIElOMVIgVm9sdW1lIiwgV004OTkzX0lOUFVUX01JWEVSNCwgNCwgMSwgMCwKKwkgICAgICAgaW5taXhfc3dfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJNSVhJTlIgT3V0cHV0IFJlY29yZCBWb2x1bWUiLCBXTTg5OTNfSU5QVVRfTUlYRVI0LCAwLCA3LCAwLAorCSAgICAgICBpbm1peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIk1JWElOUiBJTjFSUCBWb2x1bWUiLCBXTTg5OTNfSU5QVVRfTUlYRVI2LCA2LCA3LCAwLCBpbm1peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIk1JWElOUiBEaXJlY3QgVm9pY2UgVm9sdW1lIiwgV004OTkzX0lOUFVUX01JWEVSNiwgMCwgNiwgMCwKKwkgICAgICAgaW5taXhfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIkxlZnQgT3V0cHV0IE1peGVyIElOMlJOIFZvbHVtZSIsIFdNODk5M19PVVRQVVRfTUlYRVI1LCA2LCA3LCAxLAorCSAgICAgICBvdXRtaXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJMZWZ0IE91dHB1dCBNaXhlciBJTjJMTiBWb2x1bWUiLCBXTTg5OTNfT1VUUFVUX01JWEVSMywgNiwgNywgMSwKKwkgICAgICAgb3V0bWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiTGVmdCBPdXRwdXQgTWl4ZXIgSU4yTFAgVm9sdW1lIiwgV004OTkzX09VVFBVVF9NSVhFUjMsIDksIDcsIDEsCisJICAgICAgIG91dG1peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkxlZnQgT3V0cHV0IE1peGVyIElOMUwgVm9sdW1lIiwgV004OTkzX09VVFBVVF9NSVhFUjMsIDAsIDcsIDEsCisJICAgICAgIG91dG1peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkxlZnQgT3V0cHV0IE1peGVyIElOMVIgVm9sdW1lIiwgV004OTkzX09VVFBVVF9NSVhFUjMsIDMsIDcsIDEsCisJICAgICAgIG91dG1peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIkxlZnQgT3V0cHV0IE1peGVyIFJpZ2h0IElucHV0IFZvbHVtZSIsCisJICAgICAgIFdNODk5M19PVVRQVVRfTUlYRVI1LCAzLCA3LCAxLCBvdXRtaXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJMZWZ0IE91dHB1dCBNaXhlciBMZWZ0IElucHV0IFZvbHVtZSIsCisJICAgICAgIFdNODk5M19PVVRQVVRfTUlYRVI1LCAwLCA3LCAxLCBvdXRtaXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJMZWZ0IE91dHB1dCBNaXhlciBEQUMgVm9sdW1lIiwgV004OTkzX09VVFBVVF9NSVhFUjUsIDksIDcsIDEsCisJICAgICAgIG91dG1peF90bHYpLAorCitTT0NfU0lOR0xFX1RMVigiUmlnaHQgT3V0cHV0IE1peGVyIElOMkxOIFZvbHVtZSIsCisJICAgICAgIFdNODk5M19PVVRQVVRfTUlYRVI2LCA2LCA3LCAxLCBvdXRtaXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJSaWdodCBPdXRwdXQgTWl4ZXIgSU4yUk4gVm9sdW1lIiwKKwkgICAgICAgV004OTkzX09VVFBVVF9NSVhFUjQsIDYsIDcsIDEsIG91dG1peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIlJpZ2h0IE91dHB1dCBNaXhlciBJTjFMIFZvbHVtZSIsCisJICAgICAgIFdNODk5M19PVVRQVVRfTUlYRVI0LCAzLCA3LCAxLCBvdXRtaXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJSaWdodCBPdXRwdXQgTWl4ZXIgSU4xUiBWb2x1bWUiLAorCSAgICAgICBXTTg5OTNfT1VUUFVUX01JWEVSNCwgMCwgNywgMSwgb3V0bWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiUmlnaHQgT3V0cHV0IE1peGVyIElOMlJQIFZvbHVtZSIsCisJICAgICAgIFdNODk5M19PVVRQVVRfTUlYRVI0LCA5LCA3LCAxLCBvdXRtaXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJSaWdodCBPdXRwdXQgTWl4ZXIgTGVmdCBJbnB1dCBWb2x1bWUiLAorCSAgICAgICBXTTg5OTNfT1VUUFVUX01JWEVSNiwgMywgNywgMSwgb3V0bWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiUmlnaHQgT3V0cHV0IE1peGVyIFJpZ2h0IElucHV0IFZvbHVtZSIsCisJICAgICAgIFdNODk5M19PVVRQVVRfTUlYRVI2LCA2LCA3LCAxLCBvdXRtaXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJSaWdodCBPdXRwdXQgTWl4ZXIgREFDIFZvbHVtZSIsCisJICAgICAgIFdNODk5M19PVVRQVVRfTUlYRVI2LCA5LCA3LCAxLCBvdXRtaXhfdGx2KSwKKworU09DX0RPVUJMRV9SX1RMVigiT3V0cHV0IFZvbHVtZSIsIFdNODk5M19MRUZUX09QR0FfVk9MVU1FLAorCQkgV004OTkzX1JJR0hUX09QR0FfVk9MVU1FLCAwLCA2MywgMCwgb3V0cGdhX3RsdiksCitTT0NfRE9VQkxFX1IoIk91dHB1dCBTd2l0Y2giLCBXTTg5OTNfTEVGVF9PUEdBX1ZPTFVNRSwKKwkgICAgIFdNODk5M19SSUdIVF9PUEdBX1ZPTFVNRSwgNiwgMSwgMCksCitTT0NfRE9VQkxFX1IoIk91dHB1dCBaQyBTd2l0Y2giLCBXTTg5OTNfTEVGVF9PUEdBX1ZPTFVNRSwKKwkgICAgIFdNODk5M19SSUdIVF9PUEdBX1ZPTFVNRSwgNywgMSwgMCksCisKK1NPQ19TSU5HTEUoIkVhcnBpZWNlIFN3aXRjaCIsIFdNODk5M19IUE9VVDJfVk9MVU1FLCA1LCAxLCAxKSwKK1NPQ19TSU5HTEVfVExWKCJFYXJwaWVjZSBWb2x1bWUiLCBXTTg5OTNfSFBPVVQyX1ZPTFVNRSwgNCwgMSwgMSwgZWFycGllY2VfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIlNQS0wgSW5wdXQgVm9sdW1lIiwgV004OTkzX1NQS01JWExfQVRURU5VQVRJT04sCisJICAgICAgIDUsIDEsIDEsIHdtX2h1YnNfc3BrbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiU1BLTCBJTjFMUCBWb2x1bWUiLCBXTTg5OTNfU1BLTUlYTF9BVFRFTlVBVElPTiwKKwkgICAgICAgNCwgMSwgMSwgd21faHVic19zcGttaXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJTUEtMIE91dHB1dCBWb2x1bWUiLCBXTTg5OTNfU1BLTUlYTF9BVFRFTlVBVElPTiwKKwkgICAgICAgMywgMSwgMSwgd21faHVic19zcGttaXhfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIlNQS1IgSW5wdXQgVm9sdW1lIiwgV004OTkzX1NQS01JWFJfQVRURU5VQVRJT04sCisJICAgICAgIDUsIDEsIDEsIHdtX2h1YnNfc3BrbWl4X3RsdiksCitTT0NfU0lOR0xFX1RMVigiU1BLUiBJTjFSUCBWb2x1bWUiLCBXTTg5OTNfU1BLTUlYUl9BVFRFTlVBVElPTiwKKwkgICAgICAgNCwgMSwgMSwgd21faHVic19zcGttaXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJTUEtSIE91dHB1dCBWb2x1bWUiLCBXTTg5OTNfU1BLTUlYUl9BVFRFTlVBVElPTiwKKwkgICAgICAgMywgMSwgMSwgd21faHVic19zcGttaXhfdGx2KSwKKworU09DX0RPVUJMRV9SX1RMVigiU3BlYWtlciBNaXhlciBWb2x1bWUiLAorCQkgV004OTkzX1NQS01JWExfQVRURU5VQVRJT04sIFdNODk5M19TUEtNSVhSX0FUVEVOVUFUSU9OLAorCQkgMCwgMywgMSwgc3BrbWl4b3V0X3RsdiksCitTT0NfRE9VQkxFX1JfVExWKCJTcGVha2VyIFZvbHVtZSIsCisJCSBXTTg5OTNfU1BFQUtFUl9WT0xVTUVfTEVGVCwgV004OTkzX1NQRUFLRVJfVk9MVU1FX1JJR0hULAorCQkgMCwgNjMsIDAsIG91dHBnYV90bHYpLAorU09DX0RPVUJMRV9SKCJTcGVha2VyIFN3aXRjaCIsCisJICAgICBXTTg5OTNfU1BFQUtFUl9WT0xVTUVfTEVGVCwgV004OTkzX1NQRUFLRVJfVk9MVU1FX1JJR0hULAorCSAgICAgNiwgMSwgMCksCitTT0NfRE9VQkxFX1IoIlNwZWFrZXIgWkMgU3dpdGNoIiwKKwkgICAgIFdNODk5M19TUEVBS0VSX1ZPTFVNRV9MRUZULCBXTTg5OTNfU1BFQUtFUl9WT0xVTUVfUklHSFQsCisJICAgICA3LCAxLCAwKSwKK1NPQ19ET1VCTEVfVExWKCJTcGVha2VyIEJvb3N0IFZvbHVtZSIsIFdNODk5M19TUEtPVVRfQk9PU1QsIDAsIDMsIDcsIDAsCisJICAgICAgIHNwa2Jvb3N0X3RsdiksCitTT0NfRU5VTSgiU3BlYWtlciBSZWZlcmVuY2UiLCBzcGVha2VyX3JlZiksCitTT0NfRU5VTSgiU3BlYWtlciBNb2RlIiwgc3BlYWtlcl9tb2RlKSwKKworeworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9ICJIZWFkcGhvbmUgVm9sdW1lIiwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwKKwkJIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisJLnRsdi5wID0gb3V0cGdhX3RsdiwKKwkuaW5mbyA9IHNuZF9zb2NfaW5mb192b2xzd18yciwKKwkuZ2V0ID0gc25kX3NvY19nZXRfdm9sc3dfMnIsIC5wdXQgPSB3bTg5OTNfcHV0X2RjX3NlcnZvLAorCS5wcml2YXRlX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpJihzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wpIHsKKwkJLnJlZyA9IFdNODk5M19MRUZUX09VVFBVVF9WT0xVTUUsCisJCS5ycmVnID0gV004OTkzX1JJR0hUX09VVFBVVF9WT0xVTUUsCisJCS5zaGlmdCA9IDAsIC5tYXggPSA2MworCX0sCit9LAorU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgU3dpdGNoIiwgV004OTkzX0xFRlRfT1VUUFVUX1ZPTFVNRSwKKwkgICAgIFdNODk5M19SSUdIVF9PVVRQVVRfVk9MVU1FLCA2LCAxLCAwKSwKK1NPQ19ET1VCTEVfUigiSGVhZHBob25lIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX09VVFBVVF9WT0xVTUUsCisJICAgICBXTTg5OTNfUklHSFRfT1VUUFVUX1ZPTFVNRSwgNywgMSwgMCksCisKK1NPQ19TSU5HTEUoIkxJTkVPVVQxTiBTd2l0Y2giLCBXTTg5OTNfTElORV9PVVRQVVRTX1ZPTFVNRSwgNiwgMSwgMSksCitTT0NfU0lOR0xFKCJMSU5FT1VUMVAgU3dpdGNoIiwgV004OTkzX0xJTkVfT1VUUFVUU19WT0xVTUUsIDUsIDEsIDEpLAorU09DX1NJTkdMRV9UTFYoIkxJTkVPVVQxIFZvbHVtZSIsIFdNODk5M19MSU5FX09VVFBVVFNfVk9MVU1FLCA0LCAxLCAxLAorCSAgICAgICBsaW5lX3RsdiksCisKK1NPQ19TSU5HTEUoIkxJTkVPVVQyTiBTd2l0Y2giLCBXTTg5OTNfTElORV9PVVRQVVRTX1ZPTFVNRSwgMiwgMSwgMSksCitTT0NfU0lOR0xFKCJMSU5FT1VUMlAgU3dpdGNoIiwgV004OTkzX0xJTkVfT1VUUFVUU19WT0xVTUUsIDEsIDEsIDEpLAorU09DX1NJTkdMRV9UTFYoIkxJTkVPVVQyIFZvbHVtZSIsIFdNODk5M19MSU5FX09VVFBVVFNfVk9MVU1FLCAwLCAxLCAxLAorCSAgICAgICBsaW5lX3RsdiksCit9OworCitzdGF0aWMgaW50IGhwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwl1bnNpZ25lZCBpbnQgcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfQU5BTE9HVUVfSFBfMCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19DSEFSR0VfUFVNUF8xLAorCQkJCSAgICBXTTg5OTNfQ1BfRU5BLCBXTTg5OTNfQ1BfRU5BKTsKKworCQltc2xlZXAoNSk7CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTkzX0hQT1VUMUxfRU5BIHwgV004OTkzX0hQT1VUMVJfRU5BLAorCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9FTkEgfCBXTTg5OTNfSFBPVVQxUl9FTkEpOworCisJCXJlZyB8PSBXTTg5OTNfSFBPVVQxTF9ETFkgfCBXTTg5OTNfSFBPVVQxUl9ETFk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19BTkFMT0dVRV9IUF8wLCByZWcpOworCisJCS8qIFN0YXJ0IHRoZSBEQyBzZXJ2byAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfRENfU0VSVk9fMCwKKwkJCQkgICAgMHhGRkZGLAorCQkJCSAgICBXTTg5OTNfRENTX0VOQV9DSEFOXzAgfAorCQkJCSAgICBXTTg5OTNfRENTX0VOQV9DSEFOXzEgfAorCQkJCSAgICBXTTg5OTNfRENTX1RSSUdfU1RBUlRVUF8xIHwKKwkJCQkgICAgV004OTkzX0RDU19UUklHX1NUQVJUVVBfMCk7CisJCXdhaXRfZm9yX2RjX3NlcnZvKGNvZGVjKTsKKworCQlyZWcgfD0gV004OTkzX0hQT1VUMVJfT1VUUCB8IFdNODk5M19IUE9VVDFSX1JNVl9TSE9SVCB8CisJCQlXTTg5OTNfSFBPVVQxTF9PVVRQIHwgV004OTkzX0hQT1VUMUxfUk1WX1NIT1JUOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQU5BTE9HVUVfSFBfMCwgcmVnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgorCQlyZWcgJj0gfihXTTg5OTNfSFBPVVQxTF9STVZfU0hPUlQgfAorCQkJIFdNODk5M19IUE9VVDFMX0RMWSB8CisJCQkgV004OTkzX0hQT1VUMUxfT1VUUCB8CisJCQkgV004OTkzX0hQT1VUMVJfUk1WX1NIT1JUIHwKKwkJCSBXTTg5OTNfSFBPVVQxUl9ETFkgfAorCQkJIFdNODk5M19IUE9VVDFSX09VVFApOworCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19EQ19TRVJWT18wLAorCQkJCSAgICAweGZmZmYsIDApOworCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19BTkFMT0dVRV9IUF8wLCByZWcpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9FTkEgfCBXTTg5OTNfSFBPVVQxUl9FTkEsCisJCQkJICAgIDApOworCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19DSEFSR0VfUFVNUF8xLAorCQkJCSAgICBXTTg5OTNfQ1BfRU5BLCAwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWFycGllY2VfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmNvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwl1MTYgcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfQU5USVBPUDEpICYgfldNODk5M19IUE9VVDJfSU5fRU5BOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCXJlZyB8PSBXTTg5OTNfSFBPVVQyX0lOX0VOQTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0FOVElQT1AxLCByZWcpOworCQl1ZGVsYXkoNTApOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQU5USVBPUDEsIHJlZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaW4xbF9wZ2FbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiSU4xTFAgU3dpdGNoIiwgV004OTkzX0lOUFVUX01JWEVSMiwgNSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIklOMUxOIFN3aXRjaCIsIFdNODk5M19JTlBVVF9NSVhFUjIsIDQsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGluMXJfcGdhW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIklOMVJQIFN3aXRjaCIsIFdNODk5M19JTlBVVF9NSVhFUjIsIDEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJTjFSTiBTd2l0Y2giLCBXTTg5OTNfSU5QVVRfTUlYRVIyLCAwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBpbjJsX3BnYVtdID0geworU09DX0RBUE1fU0lOR0xFKCJJTjJMUCBTd2l0Y2giLCBXTTg5OTNfSU5QVVRfTUlYRVIyLCA3LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiSU4yTE4gU3dpdGNoIiwgV004OTkzX0lOUFVUX01JWEVSMiwgNiwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaW4ycl9wZ2FbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiSU4yUlAgU3dpdGNoIiwgV004OTkzX0lOUFVUX01JWEVSMiwgMywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIklOMlJOIFN3aXRjaCIsIFdNODk5M19JTlBVVF9NSVhFUjIsIDIsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG1peGlubFtdID0geworU09DX0RBUE1fU0lOR0xFKCJJTjJMIFN3aXRjaCIsIFdNODk5M19JTlBVVF9NSVhFUjMsIDgsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJTjFMIFN3aXRjaCIsIFdNODk5M19JTlBVVF9NSVhFUjMsIDUsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG1peGlucltdID0geworU09DX0RBUE1fU0lOR0xFKCJJTjJSIFN3aXRjaCIsIFdNODk5M19JTlBVVF9NSVhFUjQsIDgsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJTjFSIFN3aXRjaCIsIFdNODk5M19JTlBVVF9NSVhFUjQsIDUsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxlZnRfb3V0cHV0X21peGVyW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IElucHV0IFN3aXRjaCIsIFdNODk5M19PVVRQVVRfTUlYRVIxLCA3LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBJbnB1dCBTd2l0Y2giLCBXTTg5OTNfT1VUUFVUX01JWEVSMSwgNiwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIklOMlJOIFN3aXRjaCIsIFdNODk5M19PVVRQVVRfTUlYRVIxLCA1LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiSU4yTE4gU3dpdGNoIiwgV004OTkzX09VVFBVVF9NSVhFUjEsIDQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJTjJMUCBTd2l0Y2giLCBXTTg5OTNfT1VUUFVUX01JWEVSMSwgMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIklOMVIgU3dpdGNoIiwgV004OTkzX09VVFBVVF9NSVhFUjEsIDMsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJTjFMIFN3aXRjaCIsIFdNODk5M19PVVRQVVRfTUlYRVIxLCAyLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiREFDIFN3aXRjaCIsIFdNODk5M19PVVRQVVRfTUlYRVIxLCAwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyByaWdodF9vdXRwdXRfbWl4ZXJbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBJbnB1dCBTd2l0Y2giLCBXTTg5OTNfT1VUUFVUX01JWEVSMiwgNywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IElucHV0IFN3aXRjaCIsIFdNODk5M19PVVRQVVRfTUlYRVIyLCA2LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiSU4yTE4gU3dpdGNoIiwgV004OTkzX09VVFBVVF9NSVhFUjIsIDUsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJTjJSTiBTd2l0Y2giLCBXTTg5OTNfT1VUUFVUX01JWEVSMiwgNCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIklOMUwgU3dpdGNoIiwgV004OTkzX09VVFBVVF9NSVhFUjIsIDMsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJTjFSIFN3aXRjaCIsIFdNODk5M19PVVRQVVRfTUlYRVIyLCAyLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiSU4yUlAgU3dpdGNoIiwgV004OTkzX09VVFBVVF9NSVhFUjIsIDEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJEQUMgU3dpdGNoIiwgV004OTkzX09VVFBVVF9NSVhFUjIsIDAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGVhcnBpZWNlX21peGVyW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkRpcmVjdCBWb2ljZSBTd2l0Y2giLCBXTTg5OTNfSFBPVVQyX01JWEVSLCA1LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBPdXRwdXQgU3dpdGNoIiwgV004OTkzX0hQT1VUMl9NSVhFUiwgNCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IE91dHB1dCBTd2l0Y2giLCBXTTg5OTNfSFBPVVQyX01JWEVSLCAzLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsZWZ0X3NwZWFrZXJfYm9vc3RbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiRGlyZWN0IFZvaWNlIFN3aXRjaCIsIFdNODk5M19TUEtPVVRfTUlYRVJTLCA1LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTCBTd2l0Y2giLCBXTTg5OTNfU1BLT1VUX01JWEVSUywgNCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNQS1IgU3dpdGNoIiwgV004OTkzX1NQS09VVF9NSVhFUlMsIDMsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJpZ2h0X3NwZWFrZXJfYm9vc3RbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiRGlyZWN0IFZvaWNlIFN3aXRjaCIsIFdNODk5M19TUEtPVVRfTUlYRVJTLCAyLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiU1BLTCBTd2l0Y2giLCBXTTg5OTNfU1BLT1VUX01JWEVSUywgMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlNQS1IgU3dpdGNoIiwgV004OTkzX1NQS09VVF9NSVhFUlMsIDAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxpbmUxX21peFtdID0geworU09DX0RBUE1fU0lOR0xFKCJJTjFSIFN3aXRjaCIsIFdNODk5M19MSU5FX01JWEVSMSwgMiwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIklOMUwgU3dpdGNoIiwgV004OTkzX0xJTkVfTUlYRVIxLCAxLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiT3V0cHV0IFN3aXRjaCIsIFdNODk5M19MSU5FX01JWEVSMSwgMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGluZTFuX21peFtdID0geworU09DX0RBUE1fU0lOR0xFKCJMZWZ0IE91dHB1dCBTd2l0Y2giLCBXTTg5OTNfTElORV9NSVhFUjEsIDYsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJSaWdodCBPdXRwdXQgU3dpdGNoIiwgV004OTkzX0xJTkVfTUlYRVIxLCA1LCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsaW5lMXBfbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxlZnQgT3V0cHV0IFN3aXRjaCIsIFdNODk5M19MSU5FX01JWEVSMSwgMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGluZTJfbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIklOMlIgU3dpdGNoIiwgV004OTkzX0xJTkVfTUlYRVIyLCAyLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiSU4yTCBTd2l0Y2giLCBXTTg5OTNfTElORV9NSVhFUjIsIDEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJPdXRwdXQgU3dpdGNoIiwgV004OTkzX0xJTkVfTUlYRVIyLCAwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsaW5lMm5fbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkxlZnQgT3V0cHV0IFN3aXRjaCIsIFdNODk5M19MSU5FX01JWEVSMiwgNiwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IE91dHB1dCBTd2l0Y2giLCBXTTg5OTNfTElORV9NSVhFUjIsIDUsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxpbmUycF9taXhbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUmlnaHQgT3V0cHV0IFN3aXRjaCIsIFdNODk5M19MSU5FX01JWEVSMiwgMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgYW5hbG9ndWVfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fSU5QVVQoIklOMUxOIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOMUxQIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOMkxOIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOMkxQL1ZYUk4iKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4xUk4iKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4xUlAiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4yUk4iKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4yUlAvVlhSUCIpLAorCitTTkRfU09DX0RBUE1fTUlDQklBUygiTUlDQklBUzIiLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8xLCA1LCAwKSwKK1NORF9TT0NfREFQTV9NSUNCSUFTKCJNSUNCSUFTMSIsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzEsIDQsIDApLAorCitTTkRfU09DX0RBUE1fTUlYRVIoIklOMUwgUEdBIiwgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMiwgNiwgMCwKKwkJICAgaW4xbF9wZ2EsIEFSUkFZX1NJWkUoaW4xbF9wZ2EpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiSU4xUiBQR0EiLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8yLCA0LCAwLAorCQkgICBpbjFyX3BnYSwgQVJSQVlfU0laRShpbjFyX3BnYSkpLAorCitTTkRfU09DX0RBUE1fTUlYRVIoIklOMkwgUEdBIiwgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMiwgNywgMCwKKwkJICAgaW4ybF9wZ2EsIEFSUkFZX1NJWkUoaW4ybF9wZ2EpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiSU4yUiBQR0EiLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8yLCA1LCAwLAorCQkgICBpbjJyX3BnYSwgQVJSQVlfU0laRShpbjJyX3BnYSkpLAorCisvKiBEdW1teSB3aWRnZXRzIHRvIHJlcHJlc2VudCBkaWZmZXJlbnRpYWwgcGF0aHMgKi8KK1NORF9TT0NfREFQTV9QR0EoIkRpcmVjdCBWb2ljZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9NSVhFUigiTUlYSU5MIiwgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMiwgOSwgMCwKKwkJICAgbWl4aW5sLCBBUlJBWV9TSVpFKG1peGlubCkpLAorU05EX1NPQ19EQVBNX01JWEVSKCJNSVhJTlIiLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8yLCA4LCAwLAorCQkgICBtaXhpbnIsIEFSUkFZX1NJWkUobWl4aW5yKSksCisKK1NORF9TT0NfREFQTV9NSVhFUigiTGVmdCBPdXRwdXQgTWl4ZXIiLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8zLCA1LCAwLAorCQkgICBsZWZ0X291dHB1dF9taXhlciwgQVJSQVlfU0laRShsZWZ0X291dHB1dF9taXhlcikpLAorU05EX1NPQ19EQVBNX01JWEVSKCJSaWdodCBPdXRwdXQgTWl4ZXIiLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8zLCA0LCAwLAorCQkgICByaWdodF9vdXRwdXRfbWl4ZXIsIEFSUkFZX1NJWkUocmlnaHRfb3V0cHV0X21peGVyKSksCisKK1NORF9TT0NfREFQTV9QR0EoIkxlZnQgT3V0cHV0IFBHQSIsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzMsIDcsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgT3V0cHV0IFBHQSIsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzMsIDYsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fUEdBX0UoIkhlYWRwaG9uZSBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIE5VTEwsIDAsCisJCSAgIGhwX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisKK1NORF9TT0NfREFQTV9NSVhFUigiRWFycGllY2UgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIGVhcnBpZWNlX21peGVyLCBBUlJBWV9TSVpFKGVhcnBpZWNlX21peGVyKSksCitTTkRfU09DX0RBUE1fUEdBX0UoIkVhcnBpZWNlIERyaXZlciIsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzEsIDExLCAwLAorCQkgICBOVUxMLCAwLCBlYXJwaWVjZV9ldmVudCwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCitTTkRfU09DX0RBUE1fTUlYRVIoIlNQS0wgQm9vc3QiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIGxlZnRfc3BlYWtlcl9ib29zdCwgQVJSQVlfU0laRShsZWZ0X3NwZWFrZXJfYm9vc3QpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiU1BLUiBCb29zdCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgcmlnaHRfc3BlYWtlcl9ib29zdCwgQVJSQVlfU0laRShyaWdodF9zcGVha2VyX2Jvb3N0KSksCisKK1NORF9TT0NfREFQTV9QR0EoIlNQS0wgRHJpdmVyIiwgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMSwgMTIsIDAsCisJCSBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIlNQS1IgRHJpdmVyIiwgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMSwgMTMsIDAsCisJCSBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX01JWEVSKCJMSU5FT1VUMSBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgbGluZTFfbWl4LCBBUlJBWV9TSVpFKGxpbmUxX21peCkpLAorU05EX1NPQ19EQVBNX01JWEVSKCJMSU5FT1VUMiBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgbGluZTJfbWl4LCBBUlJBWV9TSVpFKGxpbmUyX21peCkpLAorCitTTkRfU09DX0RBUE1fTUlYRVIoIkxJTkVPVVQxTiBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgbGluZTFuX21peCwgQVJSQVlfU0laRShsaW5lMW5fbWl4KSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkxJTkVPVVQxUCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgbGluZTFwX21peCwgQVJSQVlfU0laRShsaW5lMXBfbWl4KSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkxJTkVPVVQyTiBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgbGluZTJuX21peCwgQVJSQVlfU0laRShsaW5lMm5fbWl4KSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkxJTkVPVVQyUCBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgbGluZTJwX21peCwgQVJSQVlfU0laRShsaW5lMnBfbWl4KSksCisKK1NORF9TT0NfREFQTV9QR0EoIkxJTkVPVVQxTiBEcml2ZXIiLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8zLCAxMywgMCwKKwkJIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiTElORU9VVDFQIERyaXZlciIsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzMsIDEyLCAwLAorCQkgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJMSU5FT1VUMk4gRHJpdmVyIiwgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMywgMTEsIDAsCisJCSBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkxJTkVPVVQyUCBEcml2ZXIiLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8zLCAxMCwgMCwKKwkJIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEtPVVRMUCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiU1BLT1VUTE4iKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlNQS09VVFJQIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJTUEtPVVRSTiIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiSFBPVVQxTCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiSFBPVVQxUiIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiSFBPVVQyUCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiSFBPVVQyTiIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTElORU9VVDFQIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMSU5FT1VUMU4iKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkxJTkVPVVQyUCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTElORU9VVDJOIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhbmFsb2d1ZV9yb3V0ZXNbXSA9IHsKKwl7ICJJTjFMIFBHQSIsICJJTjFMUCBTd2l0Y2giLCAiSU4xTFAiIH0sCisJeyAiSU4xTCBQR0EiLCAiSU4xTE4gU3dpdGNoIiwgIklOMUxOIiB9LAorCisJeyAiSU4xUiBQR0EiLCAiSU4xUlAgU3dpdGNoIiwgIklOMVJQIiB9LAorCXsgIklOMVIgUEdBIiwgIklOMVJOIFN3aXRjaCIsICJJTjFSTiIgfSwKKworCXsgIklOMkwgUEdBIiwgIklOMkxQIFN3aXRjaCIsICJJTjJMUC9WWFJOIiB9LAorCXsgIklOMkwgUEdBIiwgIklOMkxOIFN3aXRjaCIsICJJTjJMTiIgfSwKKworCXsgIklOMlIgUEdBIiwgIklOMlJQIFN3aXRjaCIsICJJTjJSUC9WWFJQIiB9LAorCXsgIklOMlIgUEdBIiwgIklOMlJOIFN3aXRjaCIsICJJTjJSTiIgfSwKKworCXsgIkRpcmVjdCBWb2ljZSIsIE5VTEwsICJJTjJMUC9WWFJOIiB9LAorCXsgIkRpcmVjdCBWb2ljZSIsIE5VTEwsICJJTjJSUC9WWFJQIiB9LAorCisJeyAiTUlYSU5MIiwgIklOMUwgU3dpdGNoIiwgIklOMUwgUEdBIiB9LAorCXsgIk1JWElOTCIsICJJTjJMIFN3aXRjaCIsICJJTjJMIFBHQSIgfSwKKwl7ICJNSVhJTkwiLCBOVUxMLCAiRGlyZWN0IFZvaWNlIiB9LAorCXsgIk1JWElOTCIsIE5VTEwsICJJTjFMUCIgfSwKKwl7ICJNSVhJTkwiLCBOVUxMLCAiTGVmdCBPdXRwdXQgTWl4ZXIiIH0sCisKKwl7ICJNSVhJTlIiLCAiSU4xUiBTd2l0Y2giLCAiSU4xUiBQR0EiIH0sCisJeyAiTUlYSU5SIiwgIklOMlIgU3dpdGNoIiwgIklOMlIgUEdBIiB9LAorCXsgIk1JWElOUiIsIE5VTEwsICJEaXJlY3QgVm9pY2UiIH0sCisJeyAiTUlYSU5SIiwgTlVMTCwgIklOMVJQIiB9LAorCXsgIk1JWElOUiIsIE5VTEwsICJSaWdodCBPdXRwdXQgTWl4ZXIiIH0sCisKKwl7ICJBRENMIiwgTlVMTCwgIk1JWElOTCIgfSwKKwl7ICJBRENSIiwgTlVMTCwgIk1JWElOUiIgfSwKKworCXsgIkxlZnQgT3V0cHV0IE1peGVyIiwgIkxlZnQgSW5wdXQgU3dpdGNoIiwgIk1JWElOTCIgfSwKKwl7ICJMZWZ0IE91dHB1dCBNaXhlciIsICJSaWdodCBJbnB1dCBTd2l0Y2giLCAiTUlYSU5SIiB9LAorCXsgIkxlZnQgT3V0cHV0IE1peGVyIiwgIklOMlJOIFN3aXRjaCIsICJJTjJSTiIgfSwKKwl7ICJMZWZ0IE91dHB1dCBNaXhlciIsICJJTjJMTiBTd2l0Y2giLCAiSU4yTE4iIH0sCisJeyAiTGVmdCBPdXRwdXQgTWl4ZXIiLCAiSU4yTFAgU3dpdGNoIiwgIklOMkxQL1ZYUk4iIH0sCisJeyAiTGVmdCBPdXRwdXQgTWl4ZXIiLCAiSU4xTCBTd2l0Y2giLCAiSU4xTCBQR0EiIH0sCisJeyAiTGVmdCBPdXRwdXQgTWl4ZXIiLCAiSU4xUiBTd2l0Y2giLCAiSU4xUiBQR0EiIH0sCisKKwl7ICJSaWdodCBPdXRwdXQgTWl4ZXIiLCAiTGVmdCBJbnB1dCBTd2l0Y2giLCAiTUlYSU5MIiB9LAorCXsgIlJpZ2h0IE91dHB1dCBNaXhlciIsICJSaWdodCBJbnB1dCBTd2l0Y2giLCAiTUlYSU5SIiB9LAorCXsgIlJpZ2h0IE91dHB1dCBNaXhlciIsICJJTjJMTiBTd2l0Y2giLCAiSU4yTE4iIH0sCisJeyAiUmlnaHQgT3V0cHV0IE1peGVyIiwgIklOMlJOIFN3aXRjaCIsICJJTjJSTiIgfSwKKwl7ICJSaWdodCBPdXRwdXQgTWl4ZXIiLCAiSU4yUlAgU3dpdGNoIiwgIklOMlJQL1ZYUlAiIH0sCisJeyAiUmlnaHQgT3V0cHV0IE1peGVyIiwgIklOMUwgU3dpdGNoIiwgIklOMUwgUEdBIiB9LAorCXsgIlJpZ2h0IE91dHB1dCBNaXhlciIsICJJTjFSIFN3aXRjaCIsICJJTjFSIFBHQSIgfSwKKworCXsgIkxlZnQgT3V0cHV0IFBHQSIsIE5VTEwsICJMZWZ0IE91dHB1dCBNaXhlciIgfSwKKwl7ICJMZWZ0IE91dHB1dCBQR0EiLCBOVUxMLCAiVE9DTEsiIH0sCisKKwl7ICJSaWdodCBPdXRwdXQgUEdBIiwgTlVMTCwgIlJpZ2h0IE91dHB1dCBNaXhlciIgfSwKKwl7ICJSaWdodCBPdXRwdXQgUEdBIiwgTlVMTCwgIlRPQ0xLIiB9LAorCisJeyAiRWFycGllY2UgTWl4ZXIiLCAiRGlyZWN0IFZvaWNlIFN3aXRjaCIsICJEaXJlY3QgVm9pY2UiIH0sCisJeyAiRWFycGllY2UgTWl4ZXIiLCAiTGVmdCBPdXRwdXQgU3dpdGNoIiwgIkxlZnQgT3V0cHV0IFBHQSIgfSwKKwl7ICJFYXJwaWVjZSBNaXhlciIsICJSaWdodCBPdXRwdXQgU3dpdGNoIiwgIlJpZ2h0IE91dHB1dCBQR0EiIH0sCisKKwl7ICJFYXJwaWVjZSBEcml2ZXIiLCBOVUxMLCAiRWFycGllY2UgTWl4ZXIiIH0sCisJeyAiSFBPVVQyTiIsIE5VTEwsICJFYXJwaWVjZSBEcml2ZXIiIH0sCisJeyAiSFBPVVQyUCIsIE5VTEwsICJFYXJwaWVjZSBEcml2ZXIiIH0sCisKKwl7ICJTUEtMIiwgIklucHV0IFN3aXRjaCIsICJNSVhJTkwiIH0sCisJeyAiU1BLTCIsICJJTjFMUCBTd2l0Y2giLCAiSU4xTFAiIH0sCisJeyAiU1BLTCIsICJPdXRwdXQgU3dpdGNoIiwgIkxlZnQgT3V0cHV0IE1peGVyIiB9LAorCXsgIlNQS0wiLCBOVUxMLCAiVE9DTEsiIH0sCisKKwl7ICJTUEtSIiwgIklucHV0IFN3aXRjaCIsICJNSVhJTlIiIH0sCisJeyAiU1BLUiIsICJJTjFSUCBTd2l0Y2giLCAiSU4xUlAiIH0sCisJeyAiU1BLUiIsICJPdXRwdXQgU3dpdGNoIiwgIlJpZ2h0IE91dHB1dCBNaXhlciIgfSwKKwl7ICJTUEtSIiwgTlVMTCwgIlRPQ0xLIiB9LAorCisJeyAiU1BLTCBCb29zdCIsICJEaXJlY3QgVm9pY2UgU3dpdGNoIiwgIkRpcmVjdCBWb2ljZSIgfSwKKwl7ICJTUEtMIEJvb3N0IiwgIlNQS0wgU3dpdGNoIiwgIlNQS0wiIH0sCisJeyAiU1BLTCBCb29zdCIsICJTUEtSIFN3aXRjaCIsICJTUEtSIiB9LAorCisJeyAiU1BLUiBCb29zdCIsICJEaXJlY3QgVm9pY2UgU3dpdGNoIiwgIkRpcmVjdCBWb2ljZSIgfSwKKwl7ICJTUEtSIEJvb3N0IiwgIlNQS1IgU3dpdGNoIiwgIlNQS1IiIH0sCisJeyAiU1BLUiBCb29zdCIsICJTUEtMIFN3aXRjaCIsICJTUEtMIiB9LAorCisJeyAiU1BLTCBEcml2ZXIiLCBOVUxMLCAiU1BLTCBCb29zdCIgfSwKKwl7ICJTUEtMIERyaXZlciIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJeyAiU1BLUiBEcml2ZXIiLCBOVUxMLCAiU1BLUiBCb29zdCIgfSwKKwl7ICJTUEtSIERyaXZlciIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJeyAiU1BLT1VUTFAiLCBOVUxMLCAiU1BLTCBEcml2ZXIiIH0sCisJeyAiU1BLT1VUTE4iLCBOVUxMLCAiU1BLTCBEcml2ZXIiIH0sCisJeyAiU1BLT1VUUlAiLCBOVUxMLCAiU1BLUiBEcml2ZXIiIH0sCisJeyAiU1BLT1VUUk4iLCBOVUxMLCAiU1BLUiBEcml2ZXIiIH0sCisKKwl7ICJMZWZ0IEhlYWRwaG9uZSBNdXgiLCAiTWl4ZXIiLCAiTGVmdCBPdXRwdXQgTWl4ZXIiIH0sCisJeyAiUmlnaHQgSGVhZHBob25lIE11eCIsICJNaXhlciIsICJSaWdodCBPdXRwdXQgTWl4ZXIiIH0sCisKKwl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIkxlZnQgSGVhZHBob25lIE11eCIgfSwKKwl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIlJpZ2h0IEhlYWRwaG9uZSBNdXgiIH0sCisJeyAiSGVhZHBob25lIFBHQSIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJeyAiSFBPVVQxTCIsIE5VTEwsICJIZWFkcGhvbmUgUEdBIiB9LAorCXsgIkhQT1VUMVIiLCBOVUxMLCAiSGVhZHBob25lIFBHQSIgfSwKKworCXsgIkxJTkVPVVQxTiIsIE5VTEwsICJMSU5FT1VUMU4gRHJpdmVyIiB9LAorCXsgIkxJTkVPVVQxUCIsIE5VTEwsICJMSU5FT1VUMVAgRHJpdmVyIiB9LAorCXsgIkxJTkVPVVQyTiIsIE5VTEwsICJMSU5FT1VUMk4gRHJpdmVyIiB9LAorCXsgIkxJTkVPVVQyUCIsIE5VTEwsICJMSU5FT1VUMlAgRHJpdmVyIiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgbGluZW91dDFfZGlmZl9yb3V0ZXNbXSA9IHsKKwl7ICJMSU5FT1VUMSBNaXhlciIsICJJTjFMIFN3aXRjaCIsICJJTjFMIFBHQSIgfSwKKwl7ICJMSU5FT1VUMSBNaXhlciIsICJJTjFSIFN3aXRjaCIsICJJTjFSIFBHQSIgfSwKKwl7ICJMSU5FT1VUMSBNaXhlciIsICJPdXRwdXQgU3dpdGNoIiwgIkxlZnQgT3V0cHV0IE1peGVyIiB9LAorCisJeyAiTElORU9VVDFOIERyaXZlciIsIE5VTEwsICJMSU5FT1VUMSBNaXhlciIgfSwKKwl7ICJMSU5FT1VUMVAgRHJpdmVyIiwgTlVMTCwgIkxJTkVPVVQxIE1peGVyIiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgbGluZW91dDFfc2Vfcm91dGVzW10gPSB7CisJeyAiTElORU9VVDFOIE1peGVyIiwgIkxlZnQgT3V0cHV0IFN3aXRjaCIsICJMZWZ0IE91dHB1dCBNaXhlciIgfSwKKwl7ICJMSU5FT1VUMU4gTWl4ZXIiLCAiUmlnaHQgT3V0cHV0IFN3aXRjaCIsICJMZWZ0IE91dHB1dCBNaXhlciIgfSwKKworCXsgIkxJTkVPVVQxUCBNaXhlciIsICJMZWZ0IE91dHB1dCBTd2l0Y2giLCAiTGVmdCBPdXRwdXQgTWl4ZXIiIH0sCisKKwl7ICJMSU5FT1VUMU4gRHJpdmVyIiwgTlVMTCwgIkxJTkVPVVQxTiBNaXhlciIgfSwKKwl7ICJMSU5FT1VUMVAgRHJpdmVyIiwgTlVMTCwgIkxJTkVPVVQxUCBNaXhlciIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGxpbmVvdXQyX2RpZmZfcm91dGVzW10gPSB7CisJeyAiTElORU9VVDIgTWl4ZXIiLCAiSU4yTCBTd2l0Y2giLCAiSU4yTCBQR0EiIH0sCisJeyAiTElORU9VVDIgTWl4ZXIiLCAiSU4yUiBTd2l0Y2giLCAiSU4yUiBQR0EiIH0sCisJeyAiTElORU9VVDIgTWl4ZXIiLCAiT3V0cHV0IFN3aXRjaCIsICJSaWdodCBPdXRwdXQgTWl4ZXIiIH0sCisKKwl7ICJMSU5FT1VUMk4gRHJpdmVyIiwgTlVMTCwgIkxJTkVPVVQyIE1peGVyIiB9LAorCXsgIkxJTkVPVVQyUCBEcml2ZXIiLCBOVUxMLCAiTElORU9VVDIgTWl4ZXIiIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBsaW5lb3V0Ml9zZV9yb3V0ZXNbXSA9IHsKKwl7ICJMSU5FT1VUMk4gTWl4ZXIiLCAiTGVmdCBPdXRwdXQgU3dpdGNoIiwgIkxlZnQgT3V0cHV0IE1peGVyIiB9LAorCXsgIkxJTkVPVVQyTiBNaXhlciIsICJSaWdodCBPdXRwdXQgU3dpdGNoIiwgIkxlZnQgT3V0cHV0IE1peGVyIiB9LAorCisJeyAiTElORU9VVDJQIE1peGVyIiwgIlJpZ2h0IE91dHB1dCBTd2l0Y2giLCAiUmlnaHQgT3V0cHV0IE1peGVyIiB9LAorCisJeyAiTElORU9VVDJOIERyaXZlciIsIE5VTEwsICJMSU5FT1VUMk4gTWl4ZXIiIH0sCisJeyAiTElORU9VVDJQIERyaXZlciIsIE5VTEwsICJMSU5FT1VUMlAgTWl4ZXIiIH0sCit9OworCitpbnQgd21faHVic19hZGRfYW5hbG9ndWVfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCS8qIExhdGNoIHZvbHVtZSB1cGRhdGUgYml0cyAmIGRlZmF1bHQgWkMgb24gKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfTEVGVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsCisJCQkgICAgV004OTkzX0lOMV9WVSwgV004OTkzX0lOMV9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTNfSU4xX1ZVLCBXTTg5OTNfSU4xX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfTEVGVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsCisJCQkgICAgV004OTkzX0lOMl9WVSwgV004OTkzX0lOMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwKKwkJCSAgICBXTTg5OTNfSU4yX1ZVLCBXTTg5OTNfSU4yX1ZVKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19TUEVBS0VSX1ZPTFVNRV9SSUdIVCwKKwkJCSAgICBXTTg5OTNfU1BLT1VUX1ZVLCBXTTg5OTNfU1BLT1VUX1ZVKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19MRUZUX09VVFBVVF9WT0xVTUUsCisJCQkgICAgV004OTkzX0hQT1VUMUxfWkMsIFdNODk5M19IUE9VVDFMX1pDKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfUklHSFRfT1VUUFVUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTNfSFBPVVQxX1ZVIHwgV004OTkzX0hQT1VUMVJfWkMsCisJCQkgICAgV004OTkzX0hQT1VUMV9WVSB8IFdNODk5M19IUE9VVDFSX1pDKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19MRUZUX09QR0FfVk9MVU1FLAorCQkJICAgIFdNODk5M19NSVhPVVRMX1pDLCBXTTg5OTNfTUlYT1VUTF9aQyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX1JJR0hUX09QR0FfVk9MVU1FLAorCQkJICAgIFdNODk5M19NSVhPVVRSX1pDIHwgV004OTkzX01JWE9VVF9WVSwKKwkJCSAgICBXTTg5OTNfTUlYT1VUUl9aQyB8IFdNODk5M19NSVhPVVRfVlUpOworCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGFuYWxvZ3VlX3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRShhbmFsb2d1ZV9zbmRfY29udHJvbHMpKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGFuYWxvZ3VlX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUoYW5hbG9ndWVfZGFwbV93aWRnZXRzKSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bV9odWJzX2FkZF9hbmFsb2d1ZV9jb250cm9scyk7CisKK2ludCB3bV9odWJzX2FkZF9hbmFsb2d1ZV9yb3V0ZXMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCWludCBsaW5lb3V0MV9kaWZmLCBpbnQgbGluZW91dDJfZGlmZikKK3sKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYW5hbG9ndWVfcm91dGVzLAorCQkJCUFSUkFZX1NJWkUoYW5hbG9ndWVfcm91dGVzKSk7CisKKwlpZiAobGluZW91dDFfZGlmZikKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsCisJCQkJCWxpbmVvdXQxX2RpZmZfcm91dGVzLAorCQkJCQlBUlJBWV9TSVpFKGxpbmVvdXQxX2RpZmZfcm91dGVzKSk7CisJZWxzZQorCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywKKwkJCQkJbGluZW91dDFfc2Vfcm91dGVzLAorCQkJCQlBUlJBWV9TSVpFKGxpbmVvdXQxX3NlX3JvdXRlcykpOworCisJaWYgKGxpbmVvdXQyX2RpZmYpCisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLAorCQkJCQlsaW5lb3V0Ml9kaWZmX3JvdXRlcywKKwkJCQkJQVJSQVlfU0laRShsaW5lb3V0Ml9kaWZmX3JvdXRlcykpOworCWVsc2UKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsCisJCQkJCWxpbmVvdXQyX3NlX3JvdXRlcywKKwkJCQkJQVJSQVlfU0laRShsaW5lb3V0Ml9zZV9yb3V0ZXMpKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwod21faHVic19hZGRfYW5hbG9ndWVfcm91dGVzKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTaGFyZWQgc3VwcG9ydCBmb3IgV29sZnNvbiBodWJzIHByb2R1Y3RzIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5oIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwOWNiNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiB3bV9odWJzLmggIC0tICBXTTg5OXggY29tbW9uIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9XTV9IVUJTX0gKKyNkZWZpbmUgX1dNX0hVQlNfSAorCitzdHJ1Y3Qgc25kX3NvY19jb2RlYzsKKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCB3bV9odWJzX3Nwa21peF90bHZbXTsKKworZXh0ZXJuIGludCB3bV9odWJzX2FkZF9hbmFsb2d1ZV9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqKTsKK2V4dGVybiBpbnQgd21faHVic19hZGRfYW5hbG9ndWVfcm91dGVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICosIGludCwgaW50KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9LY29uZmlnIGIvc291bmQvc29jL2RhdmluY2kvS2NvbmZpZwppbmRleCA0MTFhNzEwLi40ZGZkNGFkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL0tjb25maWcKQEAgLTksNiArOSw5IEBACiBjb25maWcgU05EX0RBVklOQ0lfU09DX0kyUwogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfREFWSU5DSV9TT0NfTUNBU1AKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX0RBVklOQ0lfU09DX0VWTQogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgRGFWaW5jaSBETTY0NDYgb3IgRE0zNTUgRVZNIgogCWRlcGVuZHMgb24gU05EX0RBVklOQ0lfU09DCkBAIC0xOSw2ICsyMiwxNiBAQAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBUSQogCSAgRGFWaW5jaSBETTY0NDYgb3IgRE0zNTUgRVZNIHBsYXRmb3Jtcy4KIAorY29uZmlnICBTTkRfRE02NDY3X1NPQ19FVk0KKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIERhVmluY2kgRE02NDY3IEVWTSIKKwlkZXBlbmRzIG9uIFNORF9EQVZJTkNJX1NPQyAmJiBNQUNIX0RBVklOQ0lfRE02NDY3X0VWTQorCXNlbGVjdCBTTkRfREFWSU5DSV9TT0NfTUNBU1AKKwlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMzWAorCXNlbGVjdCBTTkRfU09DX1NQRElGCisKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIFRJCisKIGNvbmZpZyBTTkRfREFWSU5DSV9TT0NfU0ZGU0RSCiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBTRkZTRFIiCiAJZGVwZW5kcyBvbiBTTkRfREFWSU5DSV9TT0MgJiYgTUFDSF9TRkZTRFIKQEAgLTI4LDMgKzQxLDIzIEBACiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbgogCSAgTHlydGVjaCBTRkZTRFIgYm9hcmQuCisKK2NvbmZpZyAgU05EX0RBODMwX1NPQ19FVk0KKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIERBODMwL09NQVAtTDEzNyBFVk0iCisJZGVwZW5kcyBvbiBTTkRfREFWSU5DSV9TT0MgJiYgTUFDSF9EQVZJTkNJX0RBODMwX0VWTQorCXNlbGVjdCBTTkRfREFWSU5DSV9TT0NfTUNBU1AKKwlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMzWAorCisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBUSQorCSAgREE4MzAvT01BUC1MMTM3IEVWTQorCitjb25maWcgIFNORF9EQTg1MF9TT0NfRVZNCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBEQTg1MC9PTUFQLUwxMzggRVZNIgorCWRlcGVuZHMgb24gU05EX0RBVklOQ0lfU09DICYmIE1BQ0hfREFWSU5DSV9EQTg1MF9FVk0KKwlzZWxlY3QgU05EX0RBVklOQ0lfU09DX01DQVNQCisJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDM1gKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIFRJCisJICBEQTg1MC9PTUFQLUwxMzggRVZNCisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL01ha2VmaWxlIGIvc291bmQvc29jL2RhdmluY2kvTWFrZWZpbGUKaW5kZXggY2E4YmFlMS4uYTY5MzlkNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2RhdmluY2kvTWFrZWZpbGUKQEAgLTEsMTMgKzEsMTggQEAKICMgREFWSU5DSSBQbGF0Zm9ybSBTdXBwb3J0CiBzbmQtc29jLWRhdmluY2ktb2JqcyA6PSBkYXZpbmNpLXBjbS5vCiBzbmQtc29jLWRhdmluY2ktaTJzLW9ianMgOj0gZGF2aW5jaS1pMnMubworc25kLXNvYy1kYXZpbmNpLW1jYXNwLW9ianM6PSBkYXZpbmNpLW1jYXNwLm8KIAogb2JqLSQoQ09ORklHX1NORF9EQVZJTkNJX1NPQykgKz0gc25kLXNvYy1kYXZpbmNpLm8KIG9iai0kKENPTkZJR19TTkRfREFWSU5DSV9TT0NfSTJTKSArPSBzbmQtc29jLWRhdmluY2ktaTJzLm8KK29iai0kKENPTkZJR19TTkRfREFWSU5DSV9TT0NfTUNBU1ApICs9IHNuZC1zb2MtZGF2aW5jaS1tY2FzcC5vCiAKICMgREFWSU5DSSBNYWNoaW5lIFN1cHBvcnQKIHNuZC1zb2MtZXZtLW9ianMgOj0gZGF2aW5jaS1ldm0ubwogc25kLXNvYy1zZmZzZHItb2JqcyA6PSBkYXZpbmNpLXNmZnNkci5vCiAKIG9iai0kKENPTkZJR19TTkRfREFWSU5DSV9TT0NfRVZNKSArPSBzbmQtc29jLWV2bS5vCitvYmotJChDT05GSUdfU05EX0RNNjQ2N19TT0NfRVZNKSArPSBzbmQtc29jLWV2bS5vCitvYmotJChDT05GSUdfU05EX0RBODMwX1NPQ19FVk0pICs9IHNuZC1zb2MtZXZtLm8KK29iai0kKENPTkZJR19TTkRfREE4NTBfU09DX0VWTSkgKz0gc25kLXNvYy1ldm0ubwogb2JqLSQoQ09ORklHX1NORF9EQVZJTkNJX1NPQ19TRkZTRFIpICs9IHNuZC1zb2Mtc2Zmc2RyLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jCmluZGV4IDU4ZmQxY2IuLjY3NDE0ZjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgpAQCAtMjcsOSArMjgsMTAgQEAKICNpbmNsdWRlIDxtYWNoL211eC5oPgogCiAjaW5jbHVkZSAiLi4vY29kZWNzL3RsdjMyMGFpYzN4LmgiCisjaW5jbHVkZSAiLi4vY29kZWNzL3NwZGlmX3RyYW5zY2lldmVyLmgiCiAjaW5jbHVkZSAiZGF2aW5jaS1wY20uaCIKICNpbmNsdWRlICJkYXZpbmNpLWkycy5oIgotCisjaW5jbHVkZSAiZGF2aW5jaS1tY2FzcC5oIgogCiAjZGVmaW5lIEFVRElPX0ZPUk1BVCAoU05EX1NPQ19EQUlGTVRfRFNQX0IgfCBcCiAJCVNORF9TT0NfREFJRk1UX0NCTV9DRk0gfCBTTkRfU09DX0RBSUZNVF9JQl9ORikKQEAgLTQzLDcgKzQ1LDcgQEAKIAl1bnNpZ25lZCBzeXNjbGs7CiAKIAkvKiBBU1AxIG9uIERNMzU1IEVWTSBpcyBjbG9ja2VkIGJ5IGFuIGV4dGVybmFsIG9zY2lsbGF0b3IgKi8KLQlpZiAobWFjaGluZV9pc19kYXZpbmNpX2RtMzU1X2V2bSgpKQorCWlmIChtYWNoaW5lX2lzX2RhdmluY2lfZG0zNTVfZXZtKCkgfHwgbWFjaGluZV9pc19kYXZpbmNpX2RtNjQ2N19ldm0oKSkKIAkJc3lzY2xrID0gMjcwMDAwMDA7CiAKIAkvKiBBU1AwIGluIERNNjQ0NiBFVk0gaXMgY2xvY2tlZCBieSBVNTUsIGFzIGNvbmZpZ3VyZWQgYnkKQEAgLTUzLDYgKzU1LDEwIEBACiAJZWxzZSBpZiAobWFjaGluZV9pc19kYXZpbmNpX2V2bSgpKQogCQlzeXNjbGsgPSAxMjI4ODAwMDsKIAorCWVsc2UgaWYgKG1hY2hpbmVfaXNfZGF2aW5jaV9kYTgzMF9ldm0oKSB8fAorCQkJCW1hY2hpbmVfaXNfZGF2aW5jaV9kYTg1MF9ldm0oKSkKKwkJc3lzY2xrID0gMjQ1NzYwMDA7CisKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xNDQsNiArMTUwLDMyIEBACiAJLm9wcyA9ICZldm1fb3BzLAogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGRtNjQ2N19ldm1fZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJUTFYzMjBBSUMzWCIsCisJCS5zdHJlYW1fbmFtZSA9ICJBSUMzWCIsCisJCS5jcHVfZGFpID0gJmRhdmluY2lfbWNhc3BfZGFpW0RBVklOQ0lfTUNBU1BfSTJTX0RBSV0sCisJCS5jb2RlY19kYWkgPSAmYWljM3hfZGFpLAorCQkuaW5pdCA9IGV2bV9haWMzeF9pbml0LAorCQkub3BzID0gJmV2bV9vcHMsCisJfSwKKwl7CisJCS5uYW1lID0gIk1jQVNQIiwKKwkJLnN0cmVhbV9uYW1lID0gInNwZGlmIiwKKwkJLmNwdV9kYWkgPSAmZGF2aW5jaV9tY2FzcF9kYWlbREFWSU5DSV9NQ0FTUF9ESVRfREFJXSwKKwkJLmNvZGVjX2RhaSA9ICZkaXRfc3R1Yl9kYWksCisJCS5vcHMgPSAmZXZtX29wcywKKwl9LAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBkYTh4eF9ldm1fZGFpID0geworCS5uYW1lID0gIlRMVjMyMEFJQzNYIiwKKwkuc3RyZWFtX25hbWUgPSAiQUlDM1giLAorCS5jcHVfZGFpID0gJmRhdmluY2lfbWNhc3BfZGFpW0RBVklOQ0lfTUNBU1BfSTJTX0RBSV0sCisJLmNvZGVjX2RhaSA9ICZhaWMzeF9kYWksCisJLmluaXQgPSBldm1fYWljM3hfaW5pdCwKKwkub3BzID0gJmV2bV9vcHMsCit9OworCiAvKiBkYXZpbmNpLWV2bSBhdWRpbyBtYWNoaW5lIGRyaXZlciAqLwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19jYXJkX2V2bSA9IHsKIAkubmFtZSA9ICJEYVZpbmNpIEVWTSIsCkBAIC0xNTIsNzMgKzE4NCw4MCBAQAogCS5udW1fbGlua3MgPSAxLAogfTsKIAotLyogZXZtIGF1ZGlvIHByaXZhdGUgZGF0YSAqLwotc3RhdGljIHN0cnVjdCBhaWMzeF9zZXR1cF9kYXRhIGV2bV9haWMzeF9zZXR1cCA9IHsKLQkuaTJjX2J1cyA9IDEsCi0JLmkyY19hZGRyZXNzID0gMHgxYiwKKy8qIGRhdmluY2kgZG02NDY3IGV2bSBhdWRpbyBtYWNoaW5lIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZG02NDY3X3NuZF9zb2NfY2FyZF9ldm0gPSB7CisJLm5hbWUgPSAiRGFWaW5jaSBETTY0NjcgRVZNIiwKKwkucGxhdGZvcm0gPSAmZGF2aW5jaV9zb2NfcGxhdGZvcm0sCisJLmRhaV9saW5rID0gZG02NDY3X2V2bV9kYWksCisJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUoZG02NDY3X2V2bV9kYWkpLAogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZGE4MzBfc25kX3NvY19jYXJkID0geworCS5uYW1lID0gIkRBODMwL09NQVAtTDEzNyBFVk0iLAorCS5kYWlfbGluayA9ICZkYTh4eF9ldm1fZGFpLAorCS5wbGF0Zm9ybSA9ICZkYXZpbmNpX3NvY19wbGF0Zm9ybSwKKwkubnVtX2xpbmtzID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGRhODUwX3NuZF9zb2NfY2FyZCA9IHsKKwkubmFtZSA9ICJEQTg1MC9PTUFQLUwxMzggRVZNIiwKKwkuZGFpX2xpbmsgPSAmZGE4eHhfZXZtX2RhaSwKKwkucGxhdGZvcm0gPSAmZGF2aW5jaV9zb2NfcGxhdGZvcm0sCisJLm51bV9saW5rcyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IGFpYzN4X3NldHVwX2RhdGEgYWljM3hfc2V0dXA7CisKIC8qIGV2bSBhdWRpbyBzdWJzeXN0ZW0gKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgZXZtX3NuZF9kZXZkYXRhID0gewogCS5jYXJkID0gJnNuZF9zb2NfY2FyZF9ldm0sCiAJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X2FpYzN4LAotCS5jb2RlY19kYXRhID0gJmV2bV9haWMzeF9zZXR1cCwKKwkuY29kZWNfZGF0YSA9ICZhaWMzeF9zZXR1cCwKIH07CiAKLS8qIERNNjQ0NiBFVk0gdXNlcyBBU1AwOyBsaW5lLW91dCBpcyBhIHBhaXIgb2YgUkNBIGphY2tzICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGV2bV9zbmRfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgPSBEQVZJTkNJX0FTUDBfQkFTRSwKLQkJLmVuZCA9IERBVklOQ0lfQVNQMF9CQVNFICsgU1pfOEsgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAorLyogZXZtIGF1ZGlvIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBkbTY0NjdfZXZtX3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJmRtNjQ2N19zbmRfc29jX2NhcmRfZXZtLAorCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl9haWMzeCwKKwkuY29kZWNfZGF0YSA9ICZhaWMzeF9zZXR1cCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZXZtX3NuZF9wbGF0Zm9ybV9kYXRhIGV2bV9zbmRfZGF0YSA9IHsKLQkudHhfZG1hX2NoCT0gREFWSU5DSV9ETUFfQVNQMF9UWCwKLQkucnhfZG1hX2NoCT0gREFWSU5DSV9ETUFfQVNQMF9SWCwKKy8qIGV2bSBhdWRpbyBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgZGE4MzBfZXZtX3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJmRhODMwX3NuZF9zb2NfY2FyZCwKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfYWljM3gsCisJLmNvZGVjX2RhdGEgPSAmYWljM3hfc2V0dXAsCiB9OwogCi0vKiBETTMzNSBFVk0gdXNlcyBBU1AxOyBsaW5lLW91dCBpcyBhIHN0ZXJlbyBtaW5pLWphY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG0zMzVldm1fc25kX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gREFWSU5DSV9BU1AxX0JBU0UsCi0JCS5lbmQgPSBEQVZJTkNJX0FTUDFfQkFTRSArIFNaXzhLIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZXZtX3NuZF9wbGF0Zm9ybV9kYXRhIGRtMzM1ZXZtX3NuZF9kYXRhID0gewotCS50eF9kbWFfY2gJPSBEQVZJTkNJX0RNQV9BU1AxX1RYLAotCS5yeF9kbWFfY2gJPSBEQVZJTkNJX0RNQV9BU1AxX1JYLAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBkYTg1MF9ldm1fc25kX2RldmRhdGEgPSB7CisJLmNhcmQJCT0gJmRhODUwX3NuZF9zb2NfY2FyZCwKKwkuY29kZWNfZGV2CT0gJnNvY19jb2RlY19kZXZfYWljM3gsCisJLmNvZGVjX2RhdGEJPSAmYWljM3hfc2V0dXAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZXZtX3NuZF9kZXZpY2U7CiAKIHN0YXRpYyBpbnQgX19pbml0IGV2bV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IHJlc291cmNlICpyZXNvdXJjZXM7Ci0JdW5zaWduZWQgbnVtX3Jlc291cmNlczsKLQlzdHJ1Y3QgZXZtX3NuZF9wbGF0Zm9ybV9kYXRhICpkYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqZXZtX3NuZF9kZXZfZGF0YTsKIAlpbnQgaW5kZXg7CiAJaW50IHJldDsKIAogCWlmIChtYWNoaW5lX2lzX2RhdmluY2lfZXZtKCkpIHsKLQkJZGF2aW5jaV9jZmdfcmVnKERNNjQ0WF9NQ0JTUCk7Ci0KLQkJcmVzb3VyY2VzID0gZXZtX3NuZF9yZXNvdXJjZXM7Ci0JCW51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGV2bV9zbmRfcmVzb3VyY2VzKTsKLQkJZGF0YSA9ICZldm1fc25kX2RhdGE7CisJCWV2bV9zbmRfZGV2X2RhdGEgPSAmZXZtX3NuZF9kZXZkYXRhOwogCQlpbmRleCA9IDA7CiAJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2RhdmluY2lfZG0zNTVfZXZtKCkpIHsKLQkJLyogd2UgZG9uJ3QgdXNlIEFTUDEgSVJRcywgb3Igd2UnZCBuZWVkIHRvIG11eCB0aGVtIC4uLiAqLwotCQlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfRVZUOF9BU1AxX1RYKTsKLQkJZGF2aW5jaV9jZmdfcmVnKERNMzU1X0VWVDlfQVNQMV9SWCk7Ci0KLQkJcmVzb3VyY2VzID0gZG0zMzVldm1fc25kX3Jlc291cmNlczsKLQkJbnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoZG0zMzVldm1fc25kX3Jlc291cmNlcyk7Ci0JCWRhdGEgPSAmZG0zMzVldm1fc25kX2RhdGE7CisJCWV2bV9zbmRfZGV2X2RhdGEgPSAmZXZtX3NuZF9kZXZkYXRhOwogCQlpbmRleCA9IDE7CisJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2RhdmluY2lfZG02NDY3X2V2bSgpKSB7CisJCWV2bV9zbmRfZGV2X2RhdGEgPSAmZG02NDY3X2V2bV9zbmRfZGV2ZGF0YTsKKwkJaW5kZXggPSAwOworCX0gZWxzZSBpZiAobWFjaGluZV9pc19kYXZpbmNpX2RhODMwX2V2bSgpKSB7CisJCWV2bV9zbmRfZGV2X2RhdGEgPSAmZGE4MzBfZXZtX3NuZF9kZXZkYXRhOworCQlpbmRleCA9IDE7CisJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2RhdmluY2lfZGE4NTBfZXZtKCkpIHsKKwkJZXZtX3NuZF9kZXZfZGF0YSA9ICZkYTg1MF9ldm1fc25kX2RldmRhdGE7CisJCWluZGV4ID0gMDsKIAl9IGVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTIyNiwxNyArMjY1LDggQEAKIAlpZiAoIWV2bV9zbmRfZGV2aWNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGV2bV9zbmRfZGV2aWNlLCAmZXZtX3NuZF9kZXZkYXRhKTsKLQlldm1fc25kX2RldmRhdGEuZGV2ID0gJmV2bV9zbmRfZGV2aWNlLT5kZXY7Ci0JcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKGV2bV9zbmRfZGV2aWNlLCBkYXRhLCBzaXplb2YoKmRhdGEpKTsKLQotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKGV2bV9zbmRfZGV2aWNlLCByZXNvdXJjZXMsCi0JCQludW1fcmVzb3VyY2VzKTsKLQlpZiAocmV0KSB7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQoZXZtX3NuZF9kZXZpY2UpOwotCQlyZXR1cm4gcmV0OwotCX0KLQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGV2bV9zbmRfZGV2aWNlLCBldm1fc25kX2Rldl9kYXRhKTsKKwlldm1fc25kX2Rldl9kYXRhLT5kZXYgPSAmZXZtX3NuZF9kZXZpY2UtPmRldjsKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGV2bV9zbmRfZGV2aWNlKTsKIAlpZiAocmV0KQogCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGV2bV9zbmRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jCmluZGV4IGIxZWE1MmYuLjEyYTZjNTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYwpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAorI2luY2x1ZGUgPG1hY2gvYXNwLmg+CisKICNpbmNsdWRlICJkYXZpbmNpLXBjbS5oIgogCiAKQEAgLTYzLDYgKzY1LDcgQEAKICNkZWZpbmUgREFWSU5DSV9NQ0JTUF9SQ1JfUldETEVOMSh2KQkoKHYpIDw8IDUpCiAjZGVmaW5lIERBVklOQ0lfTUNCU1BfUkNSX1JGUkxFTjEodikJKCh2KSA8PCA4KQogI2RlZmluZSBEQVZJTkNJX01DQlNQX1JDUl9SREFURExZKHYpCSgodikgPDwgMTYpCisjZGVmaW5lIERBVklOQ0lfTUNCU1BfUkNSX1JGSUcJCSgxIDw8IDE4KQogI2RlZmluZSBEQVZJTkNJX01DQlNQX1JDUl9SV0RMRU4yKHYpCSgodikgPDwgMjEpCiAKICNkZWZpbmUgREFWSU5DSV9NQ0JTUF9YQ1JfWFdETEVOMSh2KQkoKHYpIDw8IDUpCkBAIC04NSwxNCArODgsNiBAQAogI2RlZmluZSBEQVZJTkNJX01DQlNQX1BDUl9GU1JNCQkoMSA8PCAxMCkKICNkZWZpbmUgREFWSU5DSV9NQ0JTUF9QQ1JfRlNYTQkJKDEgPDwgMTEpCiAKLSNkZWZpbmUgTU9EX1JFR19CSVQodmFsLCBtYXNrLCBzZXQpIGRvIHsgXAotCWlmIChzZXQpIHsgXAotCQl2YWwgfD0gbWFzazsgXAotCX0gZWxzZSB7IFwKLQkJdmFsICY9IH5tYXNrOyBcCi0JfSBcCi19IHdoaWxlICgwKQotCiBlbnVtIHsKIAlEQVZJTkNJX01DQlNQX1dPUkRfOCA9IDAsCiAJREFWSU5DSV9NQ0JTUF9XT1JEXzEyLApAQCAtMTEyLDYgKzEwNywxMCBAQAogCiBzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgewogCXZvaWQgX19pb21lbQkJCSpiYXNlOworI2RlZmluZSBNT0RfRFNQX0EJMAorI2RlZmluZSBNT0RfRFNQX0IJMQorCWludAkJCQltb2RlOworCXUzMgkJCQlwY3I7CiAJc3RydWN0IGNsawkJCSpjbGs7CiAJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMJKmRtYV9wYXJhbXNbMl07CiB9OwpAQCAtMTI3LDk2ICsxMjYsMTAwIEBACiAJcmV0dXJuIF9fcmF3X3JlYWRsKGRldi0+YmFzZSArIHJlZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGRhdmluY2lfbWNic3Bfc3RhcnQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzdGF0aWMgdm9pZCB0b2dnbGVfY2xvY2soc3RydWN0IGRhdmluY2lfbWNic3BfZGV2ICpkZXYsIGludCBwbGF5YmFjaykKK3sKKwl1MzIgbSA9IHBsYXliYWNrID8gREFWSU5DSV9NQ0JTUF9QQ1JfQ0xLWFAgOiBEQVZJTkNJX01DQlNQX1BDUl9DTEtSUDsKKwkvKiBUaGUgY2xvY2sgbmVlZHMgdG8gdG9nZ2xlIHRvIGNvbXBsZXRlIHJlc2V0LgorCSAqIFNvLCBmYWtlIGl0IGJ5IHRvZ2dsaW5nIHRoZSBjbGsgcG9sYXJpdHkuCisJICovCisJZGF2aW5jaV9tY2JzcF93cml0ZV9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1BDUl9SRUcsIGRldi0+cGNyIF4gbSk7CisJZGF2aW5jaV9tY2JzcF93cml0ZV9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1BDUl9SRUcsIGRldi0+cGNyKTsKK30KKworc3RhdGljIHZvaWQgZGF2aW5jaV9tY2JzcF9zdGFydChzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiwKKwkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkYXZpbmNpX21jYnNwX2RldiAqZGV2ID0gcnRkLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwogCXN0cnVjdCBzbmRfc29jX3BsYXRmb3JtICpwbGF0Zm9ybSA9IHNvY2Rldi0+Y2FyZC0+cGxhdGZvcm07Ci0JdTMyIHc7Ci0JaW50IHJldDsKKwlpbnQgcGxheWJhY2sgPSAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyk7CisJdTMyIHNwY3I7CisJdTMyIG1hc2sgPSBwbGF5YmFjayA/IERBVklOQ0lfTUNCU1BfU1BDUl9YUlNUIDogREFWSU5DSV9NQ0JTUF9TUENSX1JSU1Q7CisJc3BjciA9IGRhdmluY2lfbWNic3BfcmVhZF9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1NQQ1JfUkVHKTsKKwlpZiAoc3BjciAmIG1hc2spIHsKKwkJLyogc3RhcnQgb2ZmIGRpc2FibGVkICovCisJCWRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKGRldiwgREFWSU5DSV9NQ0JTUF9TUENSX1JFRywKKwkJCQlzcGNyICYgfm1hc2spOworCQl0b2dnbGVfY2xvY2soZGV2LCBwbGF5YmFjayk7CisJfQorCWlmIChkZXYtPnBjciAmIChEQVZJTkNJX01DQlNQX1BDUl9GU1hNIHwgREFWSU5DSV9NQ0JTUF9QQ1JfRlNSTSB8CisJCQlEQVZJTkNJX01DQlNQX1BDUl9DTEtYTSB8IERBVklOQ0lfTUNCU1BfUENSX0NMS1JNKSkgeworCQkvKiBTdGFydCB0aGUgc2FtcGxlIGdlbmVyYXRvciAqLworCQlzcGNyIHw9IERBVklOQ0lfTUNCU1BfU1BDUl9HUlNUOworCQlkYXZpbmNpX21jYnNwX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1BDUl9SRUcsIHNwY3IpOworCX0KIAotCS8qIFN0YXJ0IHRoZSBzYW1wbGUgZ2VuZXJhdG9yIGFuZCBlbmFibGUgdHJhbnNtaXR0ZXIvcmVjZWl2ZXIgKi8KLQl3ID0gZGF2aW5jaV9tY2JzcF9yZWFkX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1BDUl9SRUcpOwotCU1PRF9SRUdfQklUKHcsIERBVklOQ0lfTUNCU1BfU1BDUl9HUlNULCAxKTsKLQlkYXZpbmNpX21jYnNwX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1BDUl9SRUcsIHcpOwotCi0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwlpZiAocGxheWJhY2spIHsKIAkJLyogU3RvcCB0aGUgRE1BIHRvIGF2b2lkIGRhdGEgbG9zcyAqLwogCQkvKiB3aGlsZSB0aGUgdHJhbnNtaXR0ZXIgaXMgb3V0IG9mIHJlc2V0IHRvIGhhbmRsZSBYU1lOQ0VSUiAqLwogCQlpZiAocGxhdGZvcm0tPnBjbV9vcHMtPnRyaWdnZXIpIHsKLQkJCXJldCA9IHBsYXRmb3JtLT5wY21fb3BzLT50cmlnZ2VyKHN1YnN0cmVhbSwKKwkJCWludCByZXQgPSBwbGF0Zm9ybS0+cGNtX29wcy0+dHJpZ2dlcihzdWJzdHJlYW0sCiAJCQkJU05EUlZfUENNX1RSSUdHRVJfU1RPUCk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiUGxheWJhY2sgRE1BIHN0b3AgZmFpbGVkXG4iKTsKIAkJfQogCiAJCS8qIEVuYWJsZSB0aGUgdHJhbnNtaXR0ZXIgKi8KLQkJdyA9IGRhdmluY2lfbWNic3BfcmVhZF9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1NQQ1JfUkVHKTsKLQkJTU9EX1JFR19CSVQodywgREFWSU5DSV9NQ0JTUF9TUENSX1hSU1QsIDEpOwotCQlkYXZpbmNpX21jYnNwX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1BDUl9SRUcsIHcpOworCQlzcGNyID0gZGF2aW5jaV9tY2JzcF9yZWFkX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1BDUl9SRUcpOworCQlzcGNyIHw9IERBVklOQ0lfTUNCU1BfU1BDUl9YUlNUOworCQlkYXZpbmNpX21jYnNwX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1BDUl9SRUcsIHNwY3IpOwogCiAJCS8qIHdhaXQgZm9yIGFueSB1bmV4cGVjdGVkIGZyYW1lIHN5bmMgZXJyb3IgdG8gb2NjdXIgKi8KIAkJdWRlbGF5KDEwMCk7CiAKIAkJLyogRGlzYWJsZSB0aGUgdHJhbnNtaXR0ZXIgdG8gY2xlYXIgYW55IG91dHN0YW5kaW5nIFhTWU5DRVJSICovCi0JCXcgPSBkYXZpbmNpX21jYnNwX3JlYWRfcmVnKGRldiwgREFWSU5DSV9NQ0JTUF9TUENSX1JFRyk7Ci0JCU1PRF9SRUdfQklUKHcsIERBVklOQ0lfTUNCU1BfU1BDUl9YUlNULCAwKTsKLQkJZGF2aW5jaV9tY2JzcF93cml0ZV9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1NQQ1JfUkVHLCB3KTsKKwkJc3BjciA9IGRhdmluY2lfbWNic3BfcmVhZF9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1NQQ1JfUkVHKTsKKwkJc3BjciAmPSB+REFWSU5DSV9NQ0JTUF9TUENSX1hSU1Q7CisJCWRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKGRldiwgREFWSU5DSV9NQ0JTUF9TUENSX1JFRywgc3Bjcik7CisJCXRvZ2dsZV9jbG9jayhkZXYsIHBsYXliYWNrKTsKIAogCQkvKiBSZXN0YXJ0IHRoZSBETUEgKi8KIAkJaWYgKHBsYXRmb3JtLT5wY21fb3BzLT50cmlnZ2VyKSB7Ci0JCQlyZXQgPSBwbGF0Zm9ybS0+cGNtX29wcy0+dHJpZ2dlcihzdWJzdHJlYW0sCisJCQlpbnQgcmV0ID0gcGxhdGZvcm0tPnBjbV9vcHMtPnRyaWdnZXIoc3Vic3RyZWFtLAogCQkJCVNORFJWX1BDTV9UUklHR0VSX1NUQVJUKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICJQbGF5YmFjayBETUEgc3RhcnQgZmFpbGVkXG4iKTsKIAkJfQotCQkvKiBFbmFibGUgdGhlIHRyYW5zbWl0dGVyICovCi0JCXcgPSBkYXZpbmNpX21jYnNwX3JlYWRfcmVnKGRldiwgREFWSU5DSV9NQ0JTUF9TUENSX1JFRyk7Ci0JCU1PRF9SRUdfQklUKHcsIERBVklOQ0lfTUNCU1BfU1BDUl9YUlNULCAxKTsKLQkJZGF2aW5jaV9tY2JzcF93cml0ZV9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1NQQ1JfUkVHLCB3KTsKLQotCX0gZWxzZSB7Ci0KLQkJLyogRW5hYmxlIHRoZSByZWNpZXZlciAqLwotCQl3ID0gZGF2aW5jaV9tY2JzcF9yZWFkX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1BDUl9SRUcpOwotCQlNT0RfUkVHX0JJVCh3LCBEQVZJTkNJX01DQlNQX1NQQ1JfUlJTVCwgMSk7Ci0JCWRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKGRldiwgREFWSU5DSV9NQ0JTUF9TUENSX1JFRywgdyk7CiAJfQogCisJLyogRW5hYmxlIHRyYW5zbWl0dGVyIG9yIHJlY2VpdmVyICovCisJc3BjciA9IGRhdmluY2lfbWNic3BfcmVhZF9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1NQQ1JfUkVHKTsKKwlzcGNyIHw9IG1hc2s7CiAKLQkvKiBTdGFydCBmcmFtZSBzeW5jICovCi0JdyA9IGRhdmluY2lfbWNic3BfcmVhZF9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1NQQ1JfUkVHKTsKLQlNT0RfUkVHX0JJVCh3LCBEQVZJTkNJX01DQlNQX1NQQ1JfRlJTVCwgMSk7Ci0JZGF2aW5jaV9tY2JzcF93cml0ZV9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1NQQ1JfUkVHLCB3KTsKKwlpZiAoZGV2LT5wY3IgJiAoREFWSU5DSV9NQ0JTUF9QQ1JfRlNYTSB8IERBVklOQ0lfTUNCU1BfUENSX0ZTUk0pKSB7CisJCS8qIFN0YXJ0IGZyYW1lIHN5bmMgKi8KKwkJc3BjciB8PSBEQVZJTkNJX01DQlNQX1NQQ1JfRlJTVDsKKwl9CisJZGF2aW5jaV9tY2JzcF93cml0ZV9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1NQQ1JfUkVHLCBzcGNyKTsKIH0KIAotc3RhdGljIHZvaWQgZGF2aW5jaV9tY2JzcF9zdG9wKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIHZvaWQgZGF2aW5jaV9tY2JzcF9zdG9wKHN0cnVjdCBkYXZpbmNpX21jYnNwX2RldiAqZGV2LCBpbnQgcGxheWJhY2spCiB7Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkYXZpbmNpX21jYnNwX2RldiAqZGV2ID0gcnRkLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YTsKLQl1MzIgdzsKKwl1MzIgc3BjcjsKIAogCS8qIFJlc2V0IHRyYW5zbWl0dGVyL3JlY2VpdmVyIGFuZCBzYW1wbGUgcmF0ZS9mcmFtZSBzeW5jIGdlbmVyYXRvcnMgKi8KLQl3ID0gZGF2aW5jaV9tY2JzcF9yZWFkX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1BDUl9SRUcpOwotCU1PRF9SRUdfQklUKHcsIERBVklOQ0lfTUNCU1BfU1BDUl9HUlNUIHwKLQkJICAgICAgIERBVklOQ0lfTUNCU1BfU1BDUl9GUlNULCAwKTsKLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJTU9EX1JFR19CSVQodywgREFWSU5DSV9NQ0JTUF9TUENSX1hSU1QsIDApOwotCWVsc2UKLQkJTU9EX1JFR19CSVQodywgREFWSU5DSV9NQ0JTUF9TUENSX1JSU1QsIDApOwotCWRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKGRldiwgREFWSU5DSV9NQ0JTUF9TUENSX1JFRywgdyk7CisJc3BjciA9IGRhdmluY2lfbWNic3BfcmVhZF9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1NQQ1JfUkVHKTsKKwlzcGNyICY9IH4oREFWSU5DSV9NQ0JTUF9TUENSX0dSU1QgfCBEQVZJTkNJX01DQlNQX1NQQ1JfRlJTVCk7CisJc3BjciAmPSBwbGF5YmFjayA/IH5EQVZJTkNJX01DQlNQX1NQQ1JfWFJTVCA6IH5EQVZJTkNJX01DQlNQX1NQQ1JfUlJTVDsKKwlkYXZpbmNpX21jYnNwX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1BDUl9SRUcsIHNwY3IpOworCXRvZ2dsZV9jbG9jayhkZXYsIHBsYXliYWNrKTsKIH0KIAogc3RhdGljIGludCBkYXZpbmNpX2kyc19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQorCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0Jc3RydWN0IGRhdmluY2lfbWNic3BfZGV2ICpkZXYgPSBydGQtPmRhaS0+Y3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwotCisJc3RydWN0IGRhdmluY2lfbWNic3BfZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAJY3B1X2RhaS0+ZG1hX2RhdGEgPSBkZXYtPmRtYV9wYXJhbXNbc3Vic3RyZWFtLT5zdHJlYW1dOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyOCwxMiArMjMxLDExIEBACiAJc3RydWN0IGRhdmluY2lfbWNic3BfZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IHBjcjsKIAl1bnNpZ25lZCBpbnQgc3JncjsKLQl1bnNpZ25lZCBpbnQgcmNyOwotCXVuc2lnbmVkIGludCB4Y3I7CiAJc3JnciA9IERBVklOQ0lfTUNCU1BfU1JHUl9GU0dNIHwKIAkJREFWSU5DSV9NQ0JTUF9TUkdSX0ZQRVIoREVGQVVMVF9CSVRQRVJTQU1QTEUgKiAyIC0gMSkgfAogCQlEQVZJTkNJX01DQlNQX1NSR1JfRldJRChERUZBVUxUX0JJVFBFUlNBTVBMRSAtIDEpOwogCisJLyogc2V0IG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgogCQkvKiBjcHUgaXMgbWFzdGVyICovCkBAIC0yNTgsMTEgKzI2MCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJjciA9IERBVklOQ0lfTUNCU1BfUkNSX1JGUkxFTjEoMSk7Ci0JeGNyID0gREFWSU5DSV9NQ0JTUF9YQ1JfWEZJRyB8IERBVklOQ0lfTUNCU1BfWENSX1hGUkxFTjEoMSk7CisJLyogaW50ZXJmYWNlIGZvcm1hdCAqLwogCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKLQljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgotCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKIAkJLyogRGF2aW5jaSBkb2Vzbid0IHN1cHBvcnQgVFJVRSBJMlMsIGJ1dCBzb21lIGNvZGVjcyB3aWxsIGhhdmUKIAkJICogdGhlIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzIGNvbnRpZ3VvdXMuIFRoaXMgYWxsb3dzCkBAIC0yODIsOCArMjgxLDEwIEBACiAJCSAqLwogCQlmbXQgXj0gU05EX1NPQ19EQUlGTVRfTkJfSUY7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKLQkJcmNyIHw9IERBVklOQ0lfTUNCU1BfUkNSX1JEQVRETFkoMSk7Ci0JCXhjciB8PSBEQVZJTkNJX01DQlNQX1hDUl9YREFURExZKDEpOworCQlkZXYtPm1vZGUgPSBNT0RfRFNQX0E7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCWRldi0+bW9kZSA9IE1PRF9EU1BfQjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICIlczpiYWQgZm9ybWF0XG4iLCBfX2Z1bmNfXyk7CkBAIC0zNDMsOSArMzQ0LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKGRldiwgREFWSU5DSV9NQ0JTUF9TUkdSX1JFRywgc3Jncik7CisJZGV2LT5wY3IgPSBwY3I7CiAJZGF2aW5jaV9tY2JzcF93cml0ZV9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1BDUl9SRUcsIHBjcik7Ci0JZGF2aW5jaV9tY2JzcF93cml0ZV9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1JDUl9SRUcsIHJjcik7Ci0JZGF2aW5jaV9tY2JzcF93cml0ZV9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1hDUl9SRUcsIHhjcik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1MywzMSArMzUzLDQwIEBACiAJCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAogCQkJCSBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXMgPSBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7Ci0Jc3RydWN0IGRhdmluY2lfbWNic3BfZGV2ICpkZXYgPSBydGQtPmRhaS0+Y3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0gZGFpLT5kbWFfZGF0YTsKKwlzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiA9IGRhaS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKmkgPSBOVUxMOwogCWludCBtY2JzcF93b3JkX2xlbmd0aDsKLQl1MzIgdzsKKwl1bnNpZ25lZCBpbnQgcmNyLCB4Y3IsIHNyZ3I7CisJdTMyIHNwY3I7CiAKIAkvKiBnZW5lcmFsIGxpbmUgc2V0dGluZ3MgKi8KLQl3ID0gZGF2aW5jaV9tY2JzcF9yZWFkX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1BDUl9SRUcpOworCXNwY3IgPSBkYXZpbmNpX21jYnNwX3JlYWRfcmVnKGRldiwgREFWSU5DSV9NQ0JTUF9TUENSX1JFRyk7CiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkgewotCQl3IHw9IERBVklOQ0lfTUNCU1BfU1BDUl9SSU5UTSgzKSB8IERBVklOQ0lfTUNCU1BfU1BDUl9GUkVFOwotCQlkYXZpbmNpX21jYnNwX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1BDUl9SRUcsIHcpOworCQlzcGNyIHw9IERBVklOQ0lfTUNCU1BfU1BDUl9SSU5UTSgzKSB8IERBVklOQ0lfTUNCU1BfU1BDUl9GUkVFOworCQlkYXZpbmNpX21jYnNwX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1BDUl9SRUcsIHNwY3IpOwogCX0gZWxzZSB7Ci0JCXcgfD0gREFWSU5DSV9NQ0JTUF9TUENSX1hJTlRNKDMpIHwgREFWSU5DSV9NQ0JTUF9TUENSX0ZSRUU7Ci0JCWRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKGRldiwgREFWSU5DSV9NQ0JTUF9TUENSX1JFRywgdyk7CisJCXNwY3IgfD0gREFWSU5DSV9NQ0JTUF9TUENSX1hJTlRNKDMpIHwgREFWSU5DSV9NQ0JTUF9TUENSX0ZSRUU7CisJCWRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKGRldiwgREFWSU5DSV9NQ0JTUF9TUENSX1JFRywgc3Bjcik7CiAJfQogCiAJaSA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX1NBTVBMRV9CSVRTKTsKLQl3ID0gREFWSU5DSV9NQ0JTUF9TUkdSX0ZTR007Ci0JTU9EX1JFR19CSVQodywgREFWSU5DSV9NQ0JTUF9TUkdSX0ZXSUQoc25kX2ludGVydmFsX3ZhbHVlKGkpIC0gMSksIDEpOworCXNyZ3IgPSBEQVZJTkNJX01DQlNQX1NSR1JfRlNHTTsKKwlzcmdyIHw9IERBVklOQ0lfTUNCU1BfU1JHUl9GV0lEKHNuZF9pbnRlcnZhbF92YWx1ZShpKSAtIDEpOwogCiAJaSA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0ZSQU1FX0JJVFMpOwotCU1PRF9SRUdfQklUKHcsIERBVklOQ0lfTUNCU1BfU1JHUl9GUEVSKHNuZF9pbnRlcnZhbF92YWx1ZShpKSAtIDEpLCAxKTsKLQlkYXZpbmNpX21jYnNwX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1JHUl9SRUcsIHcpOworCXNyZ3IgfD0gREFWSU5DSV9NQ0JTUF9TUkdSX0ZQRVIoc25kX2ludGVydmFsX3ZhbHVlKGkpIC0gMSk7CisJZGF2aW5jaV9tY2JzcF93cml0ZV9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1NSR1JfUkVHLCBzcmdyKTsKIAorCXJjciA9IERBVklOQ0lfTUNCU1BfUkNSX1JGSUc7CisJeGNyID0gREFWSU5DSV9NQ0JTUF9YQ1JfWEZJRzsKKwlpZiAoZGV2LT5tb2RlID09IE1PRF9EU1BfQikgeworCQlyY3IgfD0gREFWSU5DSV9NQ0JTUF9SQ1JfUkRBVERMWSgwKTsKKwkJeGNyIHw9IERBVklOQ0lfTUNCU1BfWENSX1hEQVRETFkoMCk7CisJfSBlbHNlIHsKKwkJcmNyIHw9IERBVklOQ0lfTUNCU1BfUkNSX1JEQVRETFkoMSk7CisJCXhjciB8PSBEQVZJTkNJX01DQlNQX1hDUl9YREFURExZKDEpOworCX0KIAkvKiBEZXRlcm1pbmUgeGZlciBkYXRhIHR5cGUgKi8KIAlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TODoKQEAgLTM5NywxOCArNDA2LDMxIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpIHsKLQkJdyA9IGRhdmluY2lfbWNic3BfcmVhZF9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1JDUl9SRUcpOwotCQlNT0RfUkVHX0JJVCh3LCBEQVZJTkNJX01DQlNQX1JDUl9SV0RMRU4xKG1jYnNwX3dvcmRfbGVuZ3RoKSB8Ci0JCQkgICAgICAgREFWSU5DSV9NQ0JTUF9SQ1JfUldETEVOMihtY2JzcF93b3JkX2xlbmd0aCksIDEpOwotCQlkYXZpbmNpX21jYnNwX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfUkNSX1JFRywgdyk7CisJZG1hX3BhcmFtcy0+YWNudCAgPSBkbWFfcGFyYW1zLT5kYXRhX3R5cGU7CisJcmNyIHw9IERBVklOQ0lfTUNCU1BfUkNSX1JGUkxFTjEoMSk7CisJeGNyIHw9IERBVklOQ0lfTUNCU1BfWENSX1hGUkxFTjEoMSk7CiAKLQl9IGVsc2UgewotCQl3ID0gZGF2aW5jaV9tY2JzcF9yZWFkX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfWENSX1JFRyk7Ci0JCU1PRF9SRUdfQklUKHcsIERBVklOQ0lfTUNCU1BfWENSX1hXRExFTjEobWNic3Bfd29yZF9sZW5ndGgpIHwKLQkJCSAgICAgICBEQVZJTkNJX01DQlNQX1hDUl9YV0RMRU4yKG1jYnNwX3dvcmRfbGVuZ3RoKSwgMSk7Ci0JCWRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKGRldiwgREFWSU5DSV9NQ0JTUF9YQ1JfUkVHLCB3KTsKKwlyY3IgfD0gREFWSU5DSV9NQ0JTUF9SQ1JfUldETEVOMShtY2JzcF93b3JkX2xlbmd0aCkgfAorCQlEQVZJTkNJX01DQlNQX1JDUl9SV0RMRU4yKG1jYnNwX3dvcmRfbGVuZ3RoKTsKKwl4Y3IgfD0gREFWSU5DSV9NQ0JTUF9YQ1JfWFdETEVOMShtY2JzcF93b3JkX2xlbmd0aCkgfAorCQlEQVZJTkNJX01DQlNQX1hDUl9YV0RMRU4yKG1jYnNwX3dvcmRfbGVuZ3RoKTsKIAorCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlkYXZpbmNpX21jYnNwX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfWENSX1JFRywgeGNyKTsKKwllbHNlCisJCWRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKGRldiwgREFWSU5DSV9NQ0JTUF9SQ1JfUkVHLCByY3IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhdmluY2lfaTJzX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBkYXZpbmNpX21jYnNwX2RldiAqZGV2ID0gZGFpLT5wcml2YXRlX2RhdGE7CisJaW50IHBsYXliYWNrID0gKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spOworCWRhdmluY2lfbWNic3Bfc3RvcChkZXYsIHBsYXliYWNrKTsKKwlpZiAoKGRldi0+cGNyICYgREFWSU5DSV9NQ0JTUF9QQ1JfRlNYTSkgPT0gMCkgeworCQkvKiBjb2RlYyBpcyBtYXN0ZXIgKi8KKwkJZGF2aW5jaV9tY2JzcF9zdGFydChkZXYsIHN1YnN0cmVhbSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDE2LDM1ICs0MzgsNzIgQEAKIHN0YXRpYyBpbnQgZGF2aW5jaV9pMnNfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKKwlzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiA9IGRhaS0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAwOworCWludCBwbGF5YmFjayA9IChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKKwlpZiAoKGRldi0+cGNyICYgREFWSU5DSV9NQ0JTUF9QQ1JfRlNYTSkgPT0gMCkKKwkJcmV0dXJuIDA7CS8qIHJldHVybiBpZiBjb2RlYyBpcyBtYXN0ZXIgKi8KIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6Ci0JCWRhdmluY2lfbWNic3Bfc3RhcnQoc3Vic3RyZWFtKTsKKwkJZGF2aW5jaV9tY2JzcF9zdGFydChkZXYsIHN1YnN0cmVhbSk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgotCQlkYXZpbmNpX21jYnNwX3N0b3Aoc3Vic3RyZWFtKTsKKwkJZGF2aW5jaV9tY2JzcF9zdG9wKGRldiwgcGxheWJhY2spOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwogCX0KLQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZGF2aW5jaV9pMnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCitzdGF0aWMgdm9pZCBkYXZpbmNpX2kyc19zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IGNhcmQtPmRhaV9saW5rLT5jcHVfZGFpOworCXN0cnVjdCBkYXZpbmNpX21jYnNwX2RldiAqZGV2ID0gZGFpLT5wcml2YXRlX2RhdGE7CisJaW50IHBsYXliYWNrID0gKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spOworCWRhdmluY2lfbWNic3Bfc3RvcChkZXYsIHBsYXliYWNrKTsKK30KKworI2RlZmluZSBEQVZJTkNJX0kyU19SQVRFUwlTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGRhdmluY2lfaTJzX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAgCT0gZGF2aW5jaV9pMnNfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBkYXZpbmNpX2kyc19zaHV0ZG93biwKKwkucHJlcGFyZQk9IGRhdmluY2lfaTJzX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBkYXZpbmNpX2kyc190cmlnZ2VyLAorCS5od19wYXJhbXMJPSBkYXZpbmNpX2kyc19od19wYXJhbXMsCisJLnNldF9mbXQJPSBkYXZpbmNpX2kyc19zZXRfZGFpX2ZtdCwKKworfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIGRhdmluY2lfaTJzX2RhaSA9IHsKKwkubmFtZSA9ICJkYXZpbmNpLWkycyIsCisJLmlkID0gMCwKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gREFWSU5DSV9JMlNfUkFURVMsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKKwkuY2FwdHVyZSA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBEQVZJTkNJX0kyU19SQVRFUywKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAorCS5vcHMgPSAmZGF2aW5jaV9pMnNfZGFpX29wcywKKworfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRhdmluY2lfaTJzX2RhaSk7CisKK3N0YXRpYyBpbnQgZGF2aW5jaV9pMnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGRhdmluY2lfbWNic3BfZGV2ICpkZXY7Ci0Jc3RydWN0IHJlc291cmNlICptZW0sICppb2FyZWE7Ci0Jc3RydWN0IGV2bV9zbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IHJlc291cmNlICptZW0sICppb2FyZWEsICpyZXM7CiAJaW50IHJldDsKIAogCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CkBAIC00NjYsOCArNTI1LDYgQEAKIAkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQogCi0JY3B1X2RhaS0+cHJpdmF0ZV9kYXRhID0gZGV2OwotCiAJZGV2LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIoZGV2LT5jbGspKSB7CiAJCXJldCA9IC1FTk9ERVY7CkBAIC00NzYsMTggKzUzMywzNyBAQAogCWNsa19lbmFibGUoZGV2LT5jbGspOwogCiAJZGV2LT5iYXNlID0gKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MobWVtLT5zdGFydCk7Ci0JcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9ICZkYXZpbmNpX2kyc19wY21fb3V0OwotCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS0+Y2hhbm5lbCA9IHBkYXRhLT50eF9kbWFfY2g7CiAJZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLT5kbWFfYWRkciA9CiAJICAgIChkbWFfYWRkcl90KShpb192MnAoZGV2LT5iYXNlKSArIERBVklOQ0lfTUNCU1BfRFhSX1JFRyk7CiAKIAlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSA9ICZkYXZpbmNpX2kyc19wY21faW47Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0tPmNoYW5uZWwgPSBwZGF0YS0+cnhfZG1hX2NoOwogCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLT5kbWFfYWRkciA9CiAJICAgIChkbWFfYWRkcl90KShpb192MnAoZGV2LT5iYXNlKSArIERBVklOQ0lfTUNCU1BfRFJSX1JFRyk7CiAKKwkvKiBmaXJzdCBUWCwgdGhlbiBSWCAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gRE1BIHJlc291cmNlXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisJZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLT5jaGFubmVsID0gcmVzLT5zdGFydDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMSk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gRE1BIHJlc291cmNlXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisJZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0tPmNoYW5uZWwgPSByZXMtPnN0YXJ0OworCisJZGF2aW5jaV9pMnNfZGFpLnByaXZhdGVfZGF0YSA9IGRldjsKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmZGF2aW5jaV9pMnNfZGFpKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCiAJcmV0dXJuIDA7CiAKIGVycl9mcmVlX21lbToKQEAgLTQ5OCw2MiArNTc0LDQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZGF2aW5jaV9pMnNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCitzdGF0aWMgaW50IGRhdmluY2lfaTJzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBjYXJkLT5kYWlfbGluay0+Y3B1X2RhaTsKLQlzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiA9IGRhdmluY2lfaTJzX2RhaS5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHJlc291cmNlICptZW07CiAKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZkYXZpbmNpX2kyc19kYWkpOwogCWNsa19kaXNhYmxlKGRldi0+Y2xrKTsKIAljbGtfcHV0KGRldi0+Y2xrKTsKIAlkZXYtPmNsayA9IE5VTEw7Ci0KIAlrZnJlZShkZXYpOwotCiAJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgKG1lbS0+ZW5kIC0gbWVtLT5zdGFydCkgKyAxKTsKKworCXJldHVybiAwOwogfQogCi0jZGVmaW5lIERBVklOQ0lfSTJTX1JBVEVTCVNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZGF2aW5jaV9pMnNfZGFpX29wcyA9IHsKLQkuc3RhcnR1cAk9IGRhdmluY2lfaTJzX3N0YXJ0dXAsCi0JLnRyaWdnZXIJPSBkYXZpbmNpX2kyc190cmlnZ2VyLAotCS5od19wYXJhbXMJPSBkYXZpbmNpX2kyc19od19wYXJhbXMsCi0JLnNldF9mbXQJPSBkYXZpbmNpX2kyc19zZXRfZGFpX2ZtdCwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRhdmluY2lfbWNic3BfZHJpdmVyID0geworCS5wcm9iZQkJPSBkYXZpbmNpX2kyc19wcm9iZSwKKwkucmVtb3ZlCQk9IGRhdmluY2lfaTJzX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiZGF2aW5jaS1hc3AiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAotc3RydWN0IHNuZF9zb2NfZGFpIGRhdmluY2lfaTJzX2RhaSA9IHsKLQkubmFtZSA9ICJkYXZpbmNpLWkycyIsCi0JLmlkID0gMCwKLQkucHJvYmUgPSBkYXZpbmNpX2kyc19wcm9iZSwKLQkucmVtb3ZlID0gZGF2aW5jaV9pMnNfcmVtb3ZlLAotCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDIsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBEQVZJTkNJX0kyU19SQVRFUywKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMiwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5yYXRlcyA9IERBVklOQ0lfSTJTX1JBVEVTLAotCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLm9wcyA9ICZkYXZpbmNpX2kyc19kYWlfb3BzLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKGRhdmluY2lfaTJzX2RhaSk7Ci0KIHN0YXRpYyBpbnQgX19pbml0IGRhdmluY2lfaTJzX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmRhdmluY2lfaTJzX2RhaSk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZGF2aW5jaV9tY2JzcF9kcml2ZXIpOwogfQogbW9kdWxlX2luaXQoZGF2aW5jaV9pMnNfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkYXZpbmNpX2kyc19leGl0KHZvaWQpCiB7Ci0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmZGF2aW5jaV9pMnNfZGFpKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZGF2aW5jaV9tY2JzcF9kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQoZGF2aW5jaV9pMnNfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2EyMmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCkBAIC0wLDAgKzEsOTczIEBACisvKgorICogQUxTQSBTb0MgTWNBU1AgQXVkaW8gTGF5ZXIgZm9yIFRJIERBVklOQ0kgcHJvY2Vzc29yCisgKgorICogTXVsdGktY2hhbm5lbCBBdWRpbyBTZXJpYWwgUG9ydCBEcml2ZXIKKyAqCisgKiBBdXRob3I6IE5pcm1hbCBQYW5kZXkgPG4tcGFuZGV5QHRpLmNvbT4sCisgKiAgICAgICAgIFN1cmVzaCBSYWphc2hla2FyYSA8c3VyZXNoLnJAdGkuY29tPgorICogICAgICAgICBTdGV2ZSBDaGVuIDxzY2hlbkAubXZpc3RhLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQ6ICAgKEMpIDIwMDkgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiwgPHNvdXJjZUBtdmlzdGEuY29tPgorICogQ29weXJpZ2h0OiAgIChDKSAyMDA5ICBUZXhhcyBJbnN0cnVtZW50cywgSW5kaWEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlICJkYXZpbmNpLXBjbS5oIgorI2luY2x1ZGUgImRhdmluY2ktbWNhc3AuaCIKKworLyoKKyAqIE1jQVNQIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9QSURfUkVHCQkweDAwCisjZGVmaW5lIERBVklOQ0lfTUNBU1BfUFdSRU1VTUdUX1JFRwkweDA0CisKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9QRlVOQ19SRUcJCTB4MTAKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9QRElSX1JFRwkJMHgxNAorI2RlZmluZSBEQVZJTkNJX01DQVNQX1BET1VUX1JFRwkJMHgxOAorI2RlZmluZSBEQVZJTkNJX01DQVNQX1BEU0VUX1JFRwkJMHgxYworCisjZGVmaW5lIERBVklOQ0lfTUNBU1BfUERDTFJfUkVHCQkweDIwCisKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9UTEdDX1JFRwkJMHgzMAorI2RlZmluZSBEQVZJTkNJX01DQVNQX1RMTVJfUkVHCQkweDM0CisKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9HQkxDVExfUkVHCTB4NDQKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9BTVVURV9SRUcJCTB4NDgKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9MQkNUTF9SRUcJCTB4NGMKKworI2RlZmluZSBEQVZJTkNJX01DQVNQX1RYRElUQ1RMX1JFRwkweDUwCisKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9HQkxDVExSX1JFRwkweDYwCisjZGVmaW5lIERBVklOQ0lfTUNBU1BfUlhNQVNLX1JFRwkweDY0CisjZGVmaW5lIERBVklOQ0lfTUNBU1BfUlhGTVRfUkVHCQkweDY4CisjZGVmaW5lIERBVklOQ0lfTUNBU1BfUlhGTUNUTF9SRUcJMHg2YworCisjZGVmaW5lIERBVklOQ0lfTUNBU1BfQUNMS1JDVExfUkVHCTB4NzAKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9BSENMS1JDVExfUkVHCTB4NzQKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9SWFRETV9SRUcJCTB4NzgKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9FVlRDVExSX1JFRwkweDdjCisKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9SWFNUQVRfUkVHCTB4ODAKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9SWFRETVNMT1RfUkVHCTB4ODQKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9SWENMS0NIS19SRUcJMHg4OAorI2RlZmluZSBEQVZJTkNJX01DQVNQX1JFVlRDVExfUkVHCTB4OGMKKworI2RlZmluZSBEQVZJTkNJX01DQVNQX0dCTENUTFhfUkVHCTB4YTAKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9UWE1BU0tfUkVHCTB4YTQKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9UWEZNVF9SRUcJCTB4YTgKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9UWEZNQ1RMX1JFRwkweGFjCisKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9BQ0xLWENUTF9SRUcJMHhiMAorI2RlZmluZSBEQVZJTkNJX01DQVNQX0FIQ0xLWENUTF9SRUcJMHhiNAorI2RlZmluZSBEQVZJTkNJX01DQVNQX1RYVERNX1JFRwkJMHhiOAorI2RlZmluZSBEQVZJTkNJX01DQVNQX0VWVENUTFhfUkVHCTB4YmMKKworI2RlZmluZSBEQVZJTkNJX01DQVNQX1RYU1RBVF9SRUcJMHhjMAorI2RlZmluZSBEQVZJTkNJX01DQVNQX1RYVERNU0xPVF9SRUcJMHhjNAorI2RlZmluZSBEQVZJTkNJX01DQVNQX1RYQ0xLQ0hLX1JFRwkweGM4CisjZGVmaW5lIERBVklOQ0lfTUNBU1BfWEVWVENUTF9SRUcJMHhjYworCisvKiBMZWZ0KGV2ZW4gVERNIFNsb3QpIENoYW5uZWwgU3RhdHVzIFJlZ2lzdGVyIEZpbGUgKi8KKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9ESVRDU1JBX1JFRwkweDEwMAorLyogUmlnaHQob2RkIFRETSBzbG90KSBDaGFubmVsIFN0YXR1cyBSZWdpc3RlciBGaWxlICovCisjZGVmaW5lIERBVklOQ0lfTUNBU1BfRElUQ1NSQl9SRUcJMHgxMTgKKy8qIExlZnQoZXZlbiBURE0gc2xvdCkgVXNlciBEYXRhIFJlZ2lzdGVyIEZpbGUgKi8KKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9ESVRVRFJBX1JFRwkweDEzMAorLyogUmlnaHQob2RkIFRETSBTbG90KSBVc2VyIERhdGEgUmVnaXN0ZXIgRmlsZSAqLworI2RlZmluZSBEQVZJTkNJX01DQVNQX0RJVFVEUkJfUkVHCTB4MTQ4CisKKy8qIFNlcmlhbGl6ZXIgbiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIERBVklOQ0lfTUNBU1BfWFJTUkNUTF9CQVNFX1JFRwkweDE4MAorI2RlZmluZSBEQVZJTkNJX01DQVNQX1hSU1JDVExfUkVHKG4pCShEQVZJTkNJX01DQVNQX1hSU1JDVExfQkFTRV9SRUcgKyBcCisJCQkJCQkobiA8PCAyKSkKKworLyogVHJhbnNtaXQgQnVmZmVyIGZvciBTZXJpYWxpemVyIG4gKi8KKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9UWEJVRl9SRUcJCTB4MjAwCisvKiBSZWNlaXZlIEJ1ZmZlciBmb3IgU2VyaWFsaXplciBuICovCisjZGVmaW5lIERBVklOQ0lfTUNBU1BfUlhCVUZfUkVHCQkweDI4MAorCisvKiBNY0FTUCBGSUZPIFJlZ2lzdGVycyAqLworI2RlZmluZSBEQVZJTkNJX01DQVNQX1dGSUZPQ1RMCQkoMHgxMDEwKQorI2RlZmluZSBEQVZJTkNJX01DQVNQX1dGSUZPU1RTCQkoMHgxMDE0KQorI2RlZmluZSBEQVZJTkNJX01DQVNQX1JGSUZPQ1RMCQkoMHgxMDE4KQorI2RlZmluZSBEQVZJTkNJX01DQVNQX1JGSUZPU1RTCQkoMHgxMDFDKQorCisvKgorICogREFWSU5DSV9NQ0FTUF9QV1JFTVVNR1RfUkVHIC0gUG93ZXIgRG93biBhbmQgRW11bGF0aW9uIE1hbmFnZW1lbnQKKyAqICAgICBSZWdpc3RlciBCaXRzCisgKi8KKyNkZWZpbmUgTUNBU1BfRlJFRQlCSVQoMCkKKyNkZWZpbmUgTUNBU1BfU09GVAlCSVQoMSkKKworLyoKKyAqIERBVklOQ0lfTUNBU1BfUEZVTkNfUkVHIC0gUGluIEZ1bmN0aW9uIC8gR1BJTyBFbmFibGUgUmVnaXN0ZXIgQml0cworICovCisjZGVmaW5lIEFYUihuKQkJKDE8PG4pCisjZGVmaW5lIFBGVU5DX0FNVVRFCUJJVCgyNSkKKyNkZWZpbmUgQUNMS1gJCUJJVCgyNikKKyNkZWZpbmUgQUhDTEtYCQlCSVQoMjcpCisjZGVmaW5lIEFGU1gJCUJJVCgyOCkKKyNkZWZpbmUgQUNMS1IJCUJJVCgyOSkKKyNkZWZpbmUgQUhDTEtSCQlCSVQoMzApCisjZGVmaW5lIEFGU1IJCUJJVCgzMSkKKworLyoKKyAqIERBVklOQ0lfTUNBU1BfUERJUl9SRUcgLSBQaW4gRGlyZWN0aW9uIFJlZ2lzdGVyIEJpdHMKKyAqLworI2RlZmluZSBBWFIobikJCSgxPDxuKQorI2RlZmluZSBQRElSX0FNVVRFCUJJVCgyNSkKKyNkZWZpbmUgQUNMS1gJCUJJVCgyNikKKyNkZWZpbmUgQUhDTEtYCQlCSVQoMjcpCisjZGVmaW5lIEFGU1gJCUJJVCgyOCkKKyNkZWZpbmUgQUNMS1IJCUJJVCgyOSkKKyNkZWZpbmUgQUhDTEtSCQlCSVQoMzApCisjZGVmaW5lIEFGU1IJCUJJVCgzMSkKKworLyoKKyAqIERBVklOQ0lfTUNBU1BfVFhESVRDVExfUkVHIC0gVHJhbnNtaXQgRElUIENvbnRyb2wgUmVnaXN0ZXIgQml0cworICovCisjZGVmaW5lIERJVEVOCUJJVCgwKQkvKiBUcmFuc21pdCBESVQgbW9kZSBlbmFibGUvZGlzYWJsZSAqLworI2RlZmluZSBWQQlCSVQoMikKKyNkZWZpbmUgVkIJQklUKDMpCisKKy8qCisgKiBEQVZJTkNJX01DQVNQX1RYRk1UX1JFRyAtIFRyYW5zbWl0IEJpdHN0cmVhbSBGb3JtYXQgUmVnaXN0ZXIgQml0cworICovCisjZGVmaW5lIFRYUk9UKHZhbCkJKHZhbCkKKyNkZWZpbmUgVFhTRUwJCUJJVCgzKQorI2RlZmluZSBUWFNTWih2YWwpCSh2YWw8PDQpCisjZGVmaW5lIFRYUEJJVCh2YWwpCSh2YWw8PDgpCisjZGVmaW5lIFRYUEFEKHZhbCkJKHZhbDw8MTMpCisjZGVmaW5lIFRYT1JECQlCSVQoMTUpCisjZGVmaW5lIEZTWERMWSh2YWwpCSh2YWw8PDE2KQorCisvKgorICogREFWSU5DSV9NQ0FTUF9SWEZNVF9SRUcgLSBSZWNlaXZlIEJpdHN0cmVhbSBGb3JtYXQgUmVnaXN0ZXIgQml0cworICovCisjZGVmaW5lIFJYUk9UKHZhbCkJKHZhbCkKKyNkZWZpbmUgUlhTRUwJCUJJVCgzKQorI2RlZmluZSBSWFNTWih2YWwpCSh2YWw8PDQpCisjZGVmaW5lIFJYUEJJVCh2YWwpCSh2YWw8PDgpCisjZGVmaW5lIFJYUEFEKHZhbCkJKHZhbDw8MTMpCisjZGVmaW5lIFJYT1JECQlCSVQoMTUpCisjZGVmaW5lIEZTUkRMWSh2YWwpCSh2YWw8PDE2KQorCisvKgorICogREFWSU5DSV9NQ0FTUF9UWEZNQ1RMX1JFRyAtICBUcmFuc21pdCBGcmFtZSBDb250cm9sIFJlZ2lzdGVyIEJpdHMKKyAqLworI2RlZmluZSBGU1hQT0wJCUJJVCgwKQorI2RlZmluZSBBRlNYRQkJQklUKDEpCisjZGVmaW5lIEZTWERVUgkJQklUKDQpCisjZGVmaW5lIEZTWE1PRCh2YWwpCSh2YWw8PDcpCisKKy8qCisgKiBEQVZJTkNJX01DQVNQX1JYRk1DVExfUkVHIC0gUmVjZWl2ZSBGcmFtZSBDb250cm9sIFJlZ2lzdGVyIEJpdHMKKyAqLworI2RlZmluZSBGU1JQT0wJCUJJVCgwKQorI2RlZmluZSBBRlNSRQkJQklUKDEpCisjZGVmaW5lIEZTUkRVUgkJQklUKDQpCisjZGVmaW5lIEZTUk1PRCh2YWwpCSh2YWw8PDcpCisKKy8qCisgKiBEQVZJTkNJX01DQVNQX0FDTEtYQ1RMX1JFRyAtIFRyYW5zbWl0IENsb2NrIENvbnRyb2wgUmVnaXN0ZXIgQml0cworICovCisjZGVmaW5lIEFDTEtYRElWKHZhbCkJKHZhbCkKKyNkZWZpbmUgQUNMS1hFCQlCSVQoNSkKKyNkZWZpbmUgVFhfQVNZTkMJQklUKDYpCisjZGVmaW5lIEFDTEtYUE9MCUJJVCg3KQorCisvKgorICogREFWSU5DSV9NQ0FTUF9BQ0xLUkNUTF9SRUcgUmVjZWl2ZSBDbG9jayBDb250cm9sIFJlZ2lzdGVyIEJpdHMKKyAqLworI2RlZmluZSBBQ0xLUkRJVih2YWwpCSh2YWwpCisjZGVmaW5lIEFDTEtSRQkJQklUKDUpCisjZGVmaW5lIFJYX0FTWU5DCUJJVCg2KQorI2RlZmluZSBBQ0xLUlBPTAlCSVQoNykKKworLyoKKyAqIERBVklOQ0lfTUNBU1BfQUhDTEtYQ1RMX1JFRyAtIEhpZ2ggRnJlcXVlbmN5IFRyYW5zbWl0IENsb2NrIENvbnRyb2wKKyAqICAgICBSZWdpc3RlciBCaXRzCisgKi8KKyNkZWZpbmUgQUhDTEtYRElWKHZhbCkJKHZhbCkKKyNkZWZpbmUgQUhDTEtYUE9MCUJJVCgxNCkKKyNkZWZpbmUgQUhDTEtYRQkJQklUKDE1KQorCisvKgorICogREFWSU5DSV9NQ0FTUF9BSENMS1JDVExfUkVHIC0gSGlnaCBGcmVxdWVuY3kgUmVjZWl2ZSBDbG9jayBDb250cm9sCisgKiAgICAgUmVnaXN0ZXIgQml0cworICovCisjZGVmaW5lIEFIQ0xLUkRJVih2YWwpCSh2YWwpCisjZGVmaW5lIEFIQ0xLUlBPTAlCSVQoMTQpCisjZGVmaW5lIEFIQ0xLUkUJCUJJVCgxNSkKKworLyoKKyAqIERBVklOQ0lfTUNBU1BfWFJTUkNUTF9CQVNFX1JFRyAtICBTZXJpYWxpemVyIENvbnRyb2wgUmVnaXN0ZXIgQml0cworICovCisjZGVmaW5lIE1PREUodmFsKQkodmFsKQorI2RlZmluZSBESVNNT0QJCSh2YWwpKHZhbDw8MikKKyNkZWZpbmUgVFhTVEFURQkJQklUKDQpCisjZGVmaW5lIFJYU1RBVEUJCUJJVCg1KQorCisvKgorICogREFWSU5DSV9NQ0FTUF9MQkNUTF9SRUcgLSBMb29wIEJhY2sgQ29udHJvbCBSZWdpc3RlciBCaXRzCisgKi8KKyNkZWZpbmUgTEJFTgkJQklUKDApCisjZGVmaW5lIExCT1JECQlCSVQoMSkKKyNkZWZpbmUgTEJHRU5NT0RFKHZhbCkJKHZhbDw8MikKKworLyoKKyAqIERBVklOQ0lfTUNBU1BfVFhURE1TTE9UX1JFRyAtIFRyYW5zbWl0IFRETSBTbG90IFJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBUWFRETVMobikJKDE8PG4pCisKKy8qCisgKiBEQVZJTkNJX01DQVNQX1JYVERNU0xPVF9SRUcgLSBSZWNlaXZlIFRETSBTbG90IFJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBSWFRETVMobikJKDE8PG4pCisKKy8qCisgKiBEQVZJTkNJX01DQVNQX0dCTENUTF9SRUcgLSAgR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIgQml0cworICovCisjZGVmaW5lIFJYQ0xLUlNUCUJJVCgwKQkvKiBSZWNlaXZlciBDbG9jayBEaXZpZGVyIFJlc2V0ICovCisjZGVmaW5lIFJYSENMS1JTVAlCSVQoMSkJLyogUmVjZWl2ZXIgSGlnaCBGcmVxdWVuY3kgQ2xvY2sgRGl2aWRlciAqLworI2RlZmluZSBSWFNFUkNMUglCSVQoMikJLyogUmVjZWl2ZXIgU2VyaWFsaXplciBDbGVhciAqLworI2RlZmluZSBSWFNNUlNUCQlCSVQoMykJLyogUmVjZWl2ZXIgU3RhdGUgTWFjaGluZSBSZXNldCAqLworI2RlZmluZSBSWEZTUlNUCQlCSVQoNCkJLyogRnJhbWUgU3luYyBHZW5lcmF0b3IgUmVzZXQgKi8KKyNkZWZpbmUgVFhDTEtSU1QJQklUKDgpCS8qIFRyYW5zbWl0dGVyIENsb2NrIERpdmlkZXIgUmVzZXQgKi8KKyNkZWZpbmUgVFhIQ0xLUlNUCUJJVCg5KQkvKiBUcmFuc21pdHRlciBIaWdoIEZyZXF1ZW5jeSBDbG9jayBEaXZpZGVyKi8KKyNkZWZpbmUgVFhTRVJDTFIJQklUKDEwKQkvKiBUcmFuc21pdCBTZXJpYWxpemVyIENsZWFyICovCisjZGVmaW5lIFRYU01SU1QJCUJJVCgxMSkJLyogVHJhbnNtaXR0ZXIgU3RhdGUgTWFjaGluZSBSZXNldCAqLworI2RlZmluZSBUWEZTUlNUCQlCSVQoMTIpCS8qIEZyYW1lIFN5bmMgR2VuZXJhdG9yIFJlc2V0ICovCisKKy8qCisgKiBEQVZJTkNJX01DQVNQX0FNVVRFX1JFRyAtICBNdXRlIENvbnRyb2wgUmVnaXN0ZXIgQml0cworICovCisjZGVmaW5lIE1VVEVOQSh2YWwpCSh2YWwpCisjZGVmaW5lIE1VVEVJTlBPTAlCSVQoMikKKyNkZWZpbmUgTVVURUlORU5BCUJJVCgzKQorI2RlZmluZSBNVVRFSU4JCUJJVCg0KQorI2RlZmluZSBNVVRFUgkJQklUKDUpCisjZGVmaW5lIE1VVEVYCQlCSVQoNikKKyNkZWZpbmUgTVVURUZTUgkJQklUKDcpCisjZGVmaW5lIE1VVEVGU1gJCUJJVCg4KQorI2RlZmluZSBNVVRFQkFEQ0xLUglCSVQoOSkKKyNkZWZpbmUgTVVURUJBRENMS1gJQklUKDEwKQorI2RlZmluZSBNVVRFUlhETUFFUlIJQklUKDExKQorI2RlZmluZSBNVVRFVFhETUFFUlIJQklUKDEyKQorCisvKgorICogREFWSU5DSV9NQ0FTUF9SRVZUQ1RMX1JFRyAtIFJlY2VpdmVyIERNQSBFdmVudCBDb250cm9sIFJlZ2lzdGVyIGJpdHMKKyAqLworI2RlZmluZSBSWERBVEFETUFESVMJQklUKDApCisKKy8qCisgKiBEQVZJTkNJX01DQVNQX1hFVlRDVExfUkVHIC0gVHJhbnNtaXR0ZXIgRE1BIEV2ZW50IENvbnRyb2wgUmVnaXN0ZXIgYml0cworICovCisjZGVmaW5lIFRYREFUQURNQURJUwlCSVQoMCkKKworLyoKKyAqIERBVklOQ0lfTUNBU1BfV1tSXUZJRk9DVEwgLSBXcml0ZS9SZWFkIEZJRk8gQ29udHJvbCBSZWdpc3RlciBiaXRzCisgKi8KKyNkZWZpbmUgRklGT19FTkFCTEUJQklUKDE2KQorI2RlZmluZSBOVU1FVlRfTUFTSwkoMHhGRiA8PCA4KQorI2RlZmluZSBOVU1ETUFfTUFTSwkoMHhGRikKKworI2RlZmluZSBEQVZJTkNJX01DQVNQX05VTV9TRVJJQUxJWkVSCTE2CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtY2FzcF9zZXRfYml0cyh2b2lkIF9faW9tZW0gKnJlZywgdTMyIHZhbCkKK3sKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwocmVnKSB8IHZhbCwgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1jYXNwX2Nscl9iaXRzKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgdmFsKQoreworCV9fcmF3X3dyaXRlbCgoX19yYXdfcmVhZGwocmVnKSAmIH4odmFsKSksIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtY2FzcF9tb2RfYml0cyh2b2lkIF9faW9tZW0gKnJlZywgdTMyIHZhbCwgdTMyIG1hc2spCit7CisJX19yYXdfd3JpdGVsKChfX3Jhd19yZWFkbChyZWcpICYgfm1hc2spIHwgdmFsLCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWNhc3Bfc2V0X3JlZyh2b2lkIF9faW9tZW0gKnJlZywgdTMyIHZhbCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBtY2FzcF9nZXRfcmVnKHZvaWQgX19pb21lbSAqcmVnKQoreworCXJldHVybiAodW5zaWduZWQgaW50KV9fcmF3X3JlYWRsKHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtY2FzcF9zZXRfY3RsX3JlZyh2b2lkIF9faW9tZW0gKnJlZ3MsIHUzMiB2YWwpCit7CisJaW50IGkgPSAwOworCisJbWNhc3Bfc2V0X2JpdHMocmVncywgdmFsKTsKKworCS8qIHByb2dyYW1taW5nIEdCTENUTCBuZWVkcyB0byByZWFkIGJhY2sgZnJvbSBHQkxDVEwgYW5kIHZlcmZpeSAqLworCS8qIGxvb3AgY291bnQgaXMgdG8gYXZvaWQgdGhlIGxvY2stdXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisJCWlmICgobWNhc3BfZ2V0X3JlZyhyZWdzKSAmIHZhbCkgPT0gdmFsKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gMTAwMCAmJiAoKG1jYXNwX2dldF9yZWcocmVncykgJiB2YWwpICE9IHZhbCkpCisJCXByaW50ayhLRVJOX0VSUiAiR0JMQ1RMIHdyaXRlIGVycm9yXG4iKTsKK30KKworc3RhdGljIGludCBkYXZpbmNpX21jYXNwX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCit7CisJc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CisJY3B1X2RhaS0+ZG1hX2RhdGEgPSBkZXYtPmRtYV9wYXJhbXNbc3Vic3RyZWFtLT5zdHJlYW1dOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtY2FzcF9zdGFydF9yeChzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldikKK3sKKwltY2FzcF9zZXRfY3RsX3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0dCTENUTFJfUkVHLCBSWEhDTEtSU1QpOworCW1jYXNwX3NldF9jdGxfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfR0JMQ1RMUl9SRUcsIFJYQ0xLUlNUKTsKKwltY2FzcF9zZXRfY3RsX3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0dCTENUTFJfUkVHLCBSWFNFUkNMUik7CisJbWNhc3Bfc2V0X3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1JYQlVGX1JFRywgMCk7CisKKwltY2FzcF9zZXRfY3RsX3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0dCTENUTFJfUkVHLCBSWFNNUlNUKTsKKwltY2FzcF9zZXRfY3RsX3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0dCTENUTFJfUkVHLCBSWEZTUlNUKTsKKwltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUlhCVUZfUkVHLCAwKTsKKworCW1jYXNwX3NldF9jdGxfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfR0JMQ1RMUl9SRUcsIFJYU01SU1QpOworCW1jYXNwX3NldF9jdGxfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfR0JMQ1RMUl9SRUcsIFJYRlNSU1QpOworfQorCitzdGF0aWMgdm9pZCBtY2FzcF9zdGFydF90eChzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldikKK3sKKwl1OCBvZmZzZXQgPSAwLCBpOworCXUzMiBjbnQ7CisKKwltY2FzcF9zZXRfY3RsX3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0dCTENUTFhfUkVHLCBUWEhDTEtSU1QpOworCW1jYXNwX3NldF9jdGxfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfR0JMQ1RMWF9SRUcsIFRYQ0xLUlNUKTsKKwltY2FzcF9zZXRfY3RsX3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0dCTENUTFhfUkVHLCBUWFNFUkNMUik7CisJbWNhc3Bfc2V0X3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYQlVGX1JFRywgMCk7CisKKwltY2FzcF9zZXRfY3RsX3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0dCTENUTFhfUkVHLCBUWFNNUlNUKTsKKwltY2FzcF9zZXRfY3RsX3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0dCTENUTFhfUkVHLCBUWEZTUlNUKTsKKwltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfVFhCVUZfUkVHLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fc2VyaWFsaXplcjsgaSsrKSB7CisJCWlmIChkZXYtPnNlcmlhbF9kaXJbaV0gPT0gVFhfTU9ERSkgeworCQkJb2Zmc2V0ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogd2FpdCBmb3IgVFggcmVhZHkgKi8KKwljbnQgPSAwOworCXdoaWxlICghKG1jYXNwX2dldF9yZWcoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9YUlNSQ1RMX1JFRyhvZmZzZXQpKSAmCisJCSBUWFNUQVRFKSAmJiAoY250IDwgMTAwMDAwKSkKKwkJY250Kys7CisKKwltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfVFhCVUZfUkVHLCAwKTsKK30KKworc3RhdGljIHZvaWQgZGF2aW5jaV9tY2FzcF9zdGFydChzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldiwgaW50IHN0cmVhbSkKK3sKKwlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCW1jYXNwX3N0YXJ0X3R4KGRldik7CisJZWxzZQorCQltY2FzcF9zdGFydF9yeChkZXYpOworCisJLyogZW5hYmxlIEZJRk8gKi8KKwlpZiAoZGV2LT50eG51bWV2dCkKKwkJbWNhc3Bfc2V0X2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9XRklGT0NUTCwgRklGT19FTkFCTEUpOworCisJaWYgKGRldi0+cnhudW1ldnQpCisJCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUkZJRk9DVEwsIEZJRk9fRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgbWNhc3Bfc3RvcF9yeChzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldikKK3sKKwltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfR0JMQ1RMUl9SRUcsIDApOworCW1jYXNwX3NldF9yZWcoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SWFNUQVRfUkVHLCAweEZGRkZGRkZGKTsKK30KKworc3RhdGljIHZvaWQgbWNhc3Bfc3RvcF90eChzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldikKK3sKKwltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfR0JMQ1RMWF9SRUcsIDApOworCW1jYXNwX3NldF9yZWcoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9UWFNUQVRfUkVHLCAweEZGRkZGRkZGKTsKK30KKworc3RhdGljIHZvaWQgZGF2aW5jaV9tY2FzcF9zdG9wKHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2LCBpbnQgc3RyZWFtKQoreworCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJbWNhc3Bfc3RvcF90eChkZXYpOworCWVsc2UKKwkJbWNhc3Bfc3RvcF9yeChkZXYpOworCisJLyogZGlzYWJsZSBGSUZPICovCisJaWYgKGRldi0+dHhudW1ldnQpCisJCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfV0ZJRk9DVEwsIEZJRk9fRU5BQkxFKTsKKworCWlmIChkZXYtPnJ4bnVtZXZ0KQorCQltY2FzcF9jbHJfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1JGSUZPQ1RMLCBGSUZPX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbnQgZGF2aW5jaV9tY2FzcF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCisJCQkJCSB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2ID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGRldi0+YmFzZTsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCS8qIGNvZGVjIGlzIGNsb2NrIGFuZCBmcmFtZSBzbGF2ZSAqLworCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9BQ0xLWENUTF9SRUcsIEFDTEtYRSk7CisJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1DVExfUkVHLCBBRlNYRSk7CisKKwkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1JDVExfUkVHLCBBQ0xLUkUpOworCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNQ1RMX1JFRywgQUZTUkUpOworCisJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLCAoMHg3IDw8IDI2KSk7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzoKKwkJLyogY29kZWMgaXMgY2xvY2sgbWFzdGVyIGFuZCBmcmFtZSBzbGF2ZSAqLworCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9BQ0xLWENUTF9SRUcsIEFDTEtYRSk7CisJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1DVExfUkVHLCBBRlNYRSk7CisKKwkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1JDVExfUkVHLCBBQ0xLUkUpOworCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNQ1RMX1JFRywgQUZTUkUpOworCisJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLCAoMHgyZCA8PCAyNikpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCS8qIGNvZGVjIGlzIGNsb2NrIGFuZCBmcmFtZSBtYXN0ZXIgKi8KKwkJbWNhc3BfY2xyX2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1hDVExfUkVHLCBBQ0xLWEUpOworCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9UWEZNQ1RMX1JFRywgQUZTWEUpOworCisJCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtSQ1RMX1JFRywgQUNMS1JFKTsKKwkJbWNhc3BfY2xyX2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUlhGTUNUTF9SRUcsIEFGU1JFKTsKKworCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywgKDB4M2YgPDwgMjYpKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJbWNhc3BfY2xyX2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1hDVExfUkVHLCBBQ0xLWFBPTCk7CisJCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1DVExfUkVHLCBGU1hQT0wpOworCisJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtSQ1RMX1JFRywgQUNMS1JQT0wpOworCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNQ1RMX1JFRywgRlNSUE9MKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9BQ0xLWENUTF9SRUcsIEFDTEtYUE9MKTsKKwkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfVFhGTUNUTF9SRUcsIEZTWFBPTCk7CisKKwkJbWNhc3BfY2xyX2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1JDVExfUkVHLCBBQ0xLUlBPTCk7CisJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1JYRk1DVExfUkVHLCBGU1JQT0wpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtYQ1RMX1JFRywgQUNMS1hQT0wpOworCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9UWEZNQ1RMX1JFRywgRlNYUE9MKTsKKworCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9BQ0xLUkNUTF9SRUcsIEFDTEtSUE9MKTsKKwkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUlhGTUNUTF9SRUcsIEZTUlBPTCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1hDVExfUkVHLCBBQ0xLWFBPTCk7CisJCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1DVExfUkVHLCBGU1hQT0wpOworCisJCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtSQ1RMX1JFRywgQUNMS1JQT0wpOworCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNQ1RMX1JFRywgRlNSUE9MKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXZpbmNpX2NvbmZpZ19jaGFubmVsX3NpemUoc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXYsCisJCQkJICAgICAgIGludCBjaGFubmVsX3NpemUpCit7CisJdTMyIGZtdCA9IDA7CisKKwlzd2l0Y2ggKGNoYW5uZWxfc2l6ZSkgeworCWNhc2UgREFWSU5DSV9BVURJT19XT1JEXzg6CisJCWZtdCA9IDB4MDM7CisJCWJyZWFrOworCisJY2FzZSBEQVZJTkNJX0FVRElPX1dPUkRfMTI6CisJCWZtdCA9IDB4MDU7CisJCWJyZWFrOworCisJY2FzZSBEQVZJTkNJX0FVRElPX1dPUkRfMTY6CisJCWZtdCA9IDB4MDc7CisJCWJyZWFrOworCisJY2FzZSBEQVZJTkNJX0FVRElPX1dPUkRfMjA6CisJCWZtdCA9IDB4MDk7CisJCWJyZWFrOworCisJY2FzZSBEQVZJTkNJX0FVRElPX1dPUkRfMjQ6CisJCWZtdCA9IDB4MEI7CisJCWJyZWFrOworCisJY2FzZSBEQVZJTkNJX0FVRElPX1dPUkRfMjg6CisJCWZtdCA9IDB4MEQ7CisJCWJyZWFrOworCisJY2FzZSBEQVZJTkNJX0FVRElPX1dPUkRfMzI6CisJCWZtdCA9IDB4MEY7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWNhc3BfbW9kX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNVF9SRUcsCisJCQkJCVJYU1NaKGZtdCksIFJYU1NaKDB4MEYpKTsKKwltY2FzcF9tb2RfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1UX1JFRywKKwkJCQkJVFhTU1ooZm10KSwgVFhTU1ooMHgwRikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkYXZpbmNpX2h3X2NvbW1vbl9wYXJhbShzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldiwgaW50IHN0cmVhbSkKK3sKKwlpbnQgaTsKKwl1OCB0eF9zZXIgPSAwOworCXU4IHJ4X3NlciA9IDA7CisKKwkvKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KKwltY2FzcF9zZXRfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1BXUkVNVU1HVF9SRUcsIE1DQVNQX1NPRlQpOworCisJLyogQWxsIFBJTlMgYXMgTWNBU1AgKi8KKwltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUEZVTkNfUkVHLCAweDAwMDAwMDAwKTsKKworCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfVFhTVEFUX1JFRywgMHhGRkZGRkZGRik7CisJCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfWEVWVENUTF9SRUcsCisJCQkJVFhEQVRBRE1BRElTKTsKKwl9IGVsc2UgeworCQltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUlhTVEFUX1JFRywgMHhGRkZGRkZGRik7CisJCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUkVWVENUTF9SRUcsCisJCQkJUlhEQVRBRE1BRElTKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fc2VyaWFsaXplcjsgaSsrKSB7CisJCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfWFJTUkNUTF9SRUcoaSksCisJCQkJCWRldi0+c2VyaWFsX2RpcltpXSk7CisJCWlmIChkZXYtPnNlcmlhbF9kaXJbaV0gPT0gVFhfTU9ERSkgeworCQkJbWNhc3Bfc2V0X2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywKKwkJCQkJQVhSKGkpKTsKKwkJCXR4X3NlcisrOworCQl9IGVsc2UgaWYgKGRldi0+c2VyaWFsX2RpcltpXSA9PSBSWF9NT0RFKSB7CisJCQltY2FzcF9jbHJfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLAorCQkJCQlBWFIoaSkpOworCQkJcnhfc2VyKys7CisJCX0KKwl9CisKKwlpZiAoZGV2LT50eG51bWV2dCAmJiBzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlpZiAoZGV2LT50eG51bWV2dCAqIHR4X3NlciA+IDY0KQorCQkJZGV2LT50eG51bWV2dCA9IDE7CisKKwkJbWNhc3BfbW9kX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9XRklGT0NUTCwgdHhfc2VyLAorCQkJCQkJCQlOVU1ETUFfTUFTSyk7CisJCW1jYXNwX21vZF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfV0ZJRk9DVEwsCisJCQkJKChkZXYtPnR4bnVtZXZ0ICogdHhfc2VyKSA8PCA4KSwgTlVNRVZUX01BU0spOworCQltY2FzcF9zZXRfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1dGSUZPQ1RMLCBGSUZPX0VOQUJMRSk7CisJfQorCisJaWYgKGRldi0+cnhudW1ldnQgJiYgc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkgeworCQlpZiAoZGV2LT5yeG51bWV2dCAqIHJ4X3NlciA+IDY0KQorCQkJZGV2LT5yeG51bWV2dCA9IDE7CisKKwkJbWNhc3BfbW9kX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SRklGT0NUTCwgcnhfc2VyLAorCQkJCQkJCQlOVU1ETUFfTUFTSyk7CisJCW1jYXNwX21vZF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUkZJRk9DVEwsCisJCQkJKChkZXYtPnJ4bnVtZXZ0ICogcnhfc2VyKSA8PCA4KSwgTlVNRVZUX01BU0spOworCQltY2FzcF9zZXRfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1JGSUZPQ1RMLCBGSUZPX0VOQUJMRSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkYXZpbmNpX2h3X3BhcmFtKHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2LCBpbnQgc3RyZWFtKQoreworCWludCBpLCBhY3RpdmVfc2xvdHM7CisJdTMyIG1hc2sgPSAwOworCisJYWN0aXZlX3Nsb3RzID0gKGRldi0+dGRtX3Nsb3RzID4gMzEpID8gMzIgOiBkZXYtPnRkbV9zbG90czsKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX3Nsb3RzOyBpKyspCisJCW1hc2sgfD0gKDEgPDwgaSk7CisKKwltY2FzcF9jbHJfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtYQ1RMX1JFRywgVFhfQVNZTkMpOworCisJaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCS8qIGJpdCBzdHJlYW0gaXMgTVNCIGZpcnN0ICB3aXRoIG5vIGRlbGF5ICovCisJCS8qIERTUF9CIG1vZGUgKi8KKwkJbWNhc3Bfc2V0X2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9BSENMS1hDVExfUkVHLAorCQkJCUFIQ0xLWEUpOworCQltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfVFhURE1fUkVHLCBtYXNrKTsKKwkJbWNhc3Bfc2V0X2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9UWEZNVF9SRUcsIFRYT1JEKTsKKworCQlpZiAoKGRldi0+dGRtX3Nsb3RzID49IDIpIHx8IChkZXYtPnRkbV9zbG90cyA8PSAzMikpCisJCQltY2FzcF9tb2RfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1DVExfUkVHLAorCQkJCQlGU1hNT0QoZGV2LT50ZG1fc2xvdHMpLCBGU1hNT0QoMHgxRkYpKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fRVJSICJwbGF5YmFjayB0ZG0gc2xvdCAlZCBub3Qgc3VwcG9ydGVkXG4iLAorCQkJCWRldi0+dGRtX3Nsb3RzKTsKKworCQltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfVFhNQVNLX1JFRywgMHhGRkZGRkZGRik7CisJCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfVFhGTUNUTF9SRUcsIEZTWERVUik7CisJfSBlbHNlIHsKKwkJLyogYml0IHN0cmVhbSBpcyBNU0IgZmlyc3Qgd2l0aCBubyBkZWxheSAqLworCQkvKiBEU1BfQiBtb2RlICovCisJCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUlhGTVRfUkVHLCBSWE9SRCk7CisJCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfQUhDTEtSQ1RMX1JFRywKKwkJCQlBSENMS1JFKTsKKwkJbWNhc3Bfc2V0X3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1JYVERNX1JFRywgbWFzayk7CisKKwkJaWYgKChkZXYtPnRkbV9zbG90cyA+PSAyKSB8fCAoZGV2LT50ZG1fc2xvdHMgPD0gMzIpKQorCQkJbWNhc3BfbW9kX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNQ1RMX1JFRywKKwkJCQkJRlNSTU9EKGRldi0+dGRtX3Nsb3RzKSwgRlNSTU9EKDB4MUZGKSk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0VSUiAiY2FwdHVyZSB0ZG0gc2xvdCAlZCBub3Qgc3VwcG9ydGVkXG4iLAorCQkJCWRldi0+dGRtX3Nsb3RzKTsKKworCQltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUlhNQVNLX1JFRywgMHhGRkZGRkZGRik7CisJCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUlhGTUNUTF9SRUcsIEZTUkRVUik7CisJfQorfQorCisvKiBTL1BESUYgKi8KK3N0YXRpYyB2b2lkIGRhdmluY2lfaHdfZGl0X3BhcmFtKHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2KQoreworCS8qIFNldCB0aGUgUERJUiBmb3IgU2VyaWFsaXNlciBhcyBvdXRwdXQgKi8KKwltY2FzcF9zZXRfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLCBBRlNYKTsKKworCS8qIFRYTUFTSyBmb3IgMjQgYml0cyAqLworCW1jYXNwX3NldF9yZWcoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9UWE1BU0tfUkVHLCAweDAwRkZGRkZGKTsKKworCS8qIFNldCB0aGUgVFggZm9ybWF0IDogMjQgYml0IHJpZ2h0IHJvdGF0aW9uLCAzMiBiaXQgc2xvdCwgUGFkIDAKKwkgICBhbmQgTFNCIGZpcnN0ICovCisJbWNhc3Bfc2V0X2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9UWEZNVF9SRUcsCisJCQkJCQlUWFJPVCg2KSB8IFRYU1NaKDE1KSk7CisKKwkvKiBTZXQgVFggZnJhbWUgc3luY2ggOiBESVQgTW9kZSwgMSBiaXQgd2lkdGgsIGludGVybmFsLCByaXNpbmcgZWRnZSAqLworCW1jYXNwX3NldF9yZWcoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9UWEZNQ1RMX1JFRywKKwkJCQkJCUFGU1hFIHwgRlNYTU9EKDB4MTgwKSk7CisKKwkvKiBTZXQgdGhlIFRYIHRkbSA6IGZvciBhbGwgdGhlIHNsb3RzICovCisJbWNhc3Bfc2V0X3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYVERNX1JFRywgMHhGRkZGRkZGRik7CisKKwkvKiBTZXQgdGhlIFRYIGNsb2NrIGNvbnRyb2xzIDogZGl2ID0gMSBhbmQgaW50ZXJuYWwgKi8KKwltY2FzcF9zZXRfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtYQ1RMX1JFRywKKwkJCQkJCUFDTEtYRSB8IFRYX0FTWU5DKTsKKworCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfWEVWVENUTF9SRUcsIFRYREFUQURNQURJUyk7CisKKwkvKiBPbmx5IDQ0MTAwIGFuZCA0ODAwMCBhcmUgdmFsaWQsIGJvdGggaGF2ZSB0aGUgc2FtZSBzZXR0aW5nICovCisJbWNhc3Bfc2V0X2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9BSENMS1hDVExfUkVHLCBBSENMS1hESVYoMykpOworCisJLyogRW5hYmxlIHRoZSBESVQgKi8KKwltY2FzcF9zZXRfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRElUQ1RMX1JFRywgRElURU4pOworfQorCitzdGF0aWMgaW50IGRhdmluY2lfbWNhc3BfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQkJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpKQoreworCXN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2ID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0KKwkJCQkJZGV2LT5kbWFfcGFyYW1zW3N1YnN0cmVhbS0+c3RyZWFtXTsKKwlpbnQgd29yZF9sZW5ndGg7CisJdTggbnVtZXZ0OworCisJZGF2aW5jaV9od19jb21tb25fcGFyYW0oZGV2LCBzdWJzdHJlYW0tPnN0cmVhbSk7CisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCW51bWV2dCA9IGRldi0+dHhudW1ldnQ7CisJZWxzZQorCQludW1ldnQgPSBkZXYtPnJ4bnVtZXZ0OworCisJaWYgKCFudW1ldnQpCisJCW51bWV2dCA9IDE7CisKKwlpZiAoZGV2LT5vcF9tb2RlID09IERBVklOQ0lfTUNBU1BfRElUX01PREUpCisJCWRhdmluY2lfaHdfZGl0X3BhcmFtKGRldik7CisJZWxzZQorCQlkYXZpbmNpX2h3X3BhcmFtKGRldiwgc3Vic3RyZWFtLT5zdHJlYW0pOworCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzg6CisJCWRtYV9wYXJhbXMtPmRhdGFfdHlwZSA9IDE7CisJCXdvcmRfbGVuZ3RoID0gREFWSU5DSV9BVURJT19XT1JEXzg7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJZG1hX3BhcmFtcy0+ZGF0YV90eXBlID0gMjsKKwkJd29yZF9sZW5ndGggPSBEQVZJTkNJX0FVRElPX1dPUkRfMTY7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJZG1hX3BhcmFtcy0+ZGF0YV90eXBlID0gNDsKKwkJd29yZF9sZW5ndGggPSBEQVZJTkNJX0FVRElPX1dPUkRfMzI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGF2aW5jaS1tY2FzcDogdW5zdXBwb3J0ZWQgUENNIGZvcm1hdCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGV2LT52ZXJzaW9uID09IE1DQVNQX1ZFUlNJT05fMikgeworCQlkbWFfcGFyYW1zLT5kYXRhX3R5cGUgKj0gbnVtZXZ0OworCQlkbWFfcGFyYW1zLT5hY250ID0gNCAqIG51bWV2dDsKKwl9IGVsc2UKKwkJZG1hX3BhcmFtcy0+YWNudCA9IGRtYV9wYXJhbXMtPmRhdGFfdHlwZTsKKworCWRhdmluY2lfY29uZmlnX2NoYW5uZWxfc2l6ZShkZXYsIHdvcmRfbGVuZ3RoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhdmluY2lfbWNhc3BfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgIGludCBjbWQsIHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXYgPSBydGQtPmRhaS0+Y3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJZGF2aW5jaV9tY2FzcF9zdGFydChkZXYsIHN1YnN0cmVhbS0+c3RyZWFtKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJZGF2aW5jaV9tY2FzcF9zdG9wKGRldiwgc3Vic3RyZWFtLT5zdHJlYW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZGF2aW5jaV9tY2FzcF9kYWlfb3BzID0geworCS5zdGFydHVwIAk9IGRhdmluY2lfbWNhc3Bfc3RhcnR1cCwKKwkudHJpZ2dlcgk9IGRhdmluY2lfbWNhc3BfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gZGF2aW5jaV9tY2FzcF9od19wYXJhbXMsCisJLnNldF9mbXQJPSBkYXZpbmNpX21jYXNwX3NldF9kYWlfZm10LAorCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgZGF2aW5jaV9tY2FzcF9kYWlbXSA9IHsKKwl7CisJCS5uYW1lIAkJPSAiZGF2aW5jaS1pMnMiLAorCQkuaWQgCQk9IDAsCisJCS5wbGF5YmFjawk9IHsKKwkJCS5jaGFubmVsc19taW4JPSAyLAorCQkJLmNoYW5uZWxzX21heCAJPSAyLAorCQkJLnJhdGVzIAkJPSBEQVZJTkNJX01DQVNQX1JBVEVTLAorCQkJLmZvcm1hdHMgCT0gU05EUlZfUENNX0ZNVEJJVF9TOCB8CisJCQkJCQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQkJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKKwkJfSwKKwkJLmNhcHR1cmUgCT0geworCQkJLmNoYW5uZWxzX21pbiAJPSAyLAorCQkJLmNoYW5uZWxzX21heCAJPSAyLAorCQkJLnJhdGVzIAkJPSBEQVZJTkNJX01DQVNQX1JBVEVTLAorCQkJLmZvcm1hdHMJPSBTTkRSVl9QQ01fRk1UQklUX1M4IHwKKwkJCQkJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCQkJCVNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAorCQl9LAorCQkub3BzIAkJPSAmZGF2aW5jaV9tY2FzcF9kYWlfb3BzLAorCisJfSwKKwl7CisJCS5uYW1lIAkJPSAiZGF2aW5jaS1kaXQiLAorCQkuaWQgCQk9IDEsCisJCS5wbGF5YmFjayAJPSB7CisJCQkuY2hhbm5lbHNfbWluCT0gMSwKKwkJCS5jaGFubmVsc19tYXgJPSAzODQsCisJCQkucmF0ZXMJCT0gREFWSU5DSV9NQ0FTUF9SQVRFUywKKwkJCS5mb3JtYXRzCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJCX0sCisJCS5vcHMgCQk9ICZkYXZpbmNpX21jYXNwX2RhaV9vcHMsCisJfSwKKworfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRhdmluY2lfbWNhc3BfZGFpKTsKKworc3RhdGljIGludCBkYXZpbmNpX21jYXNwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKmRtYV9kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqbWVtLCAqaW9hcmVhLCAqcmVzOworCXN0cnVjdCBzbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXY7CisJaW50IGNvdW50ID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KQorCQlyZXR1cm4JLUVOT01FTTsKKworCWRtYV9kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMpICogMiwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFkbWFfZGF0YSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWxlYXNlX2RldjsKKwl9CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghbWVtKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbSByZXNvdXJjZT9cbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9yZWxlYXNlX2RhdGE7CisJfQorCisJaW9hcmVhID0gcmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsCisJCQkobWVtLT5lbmQgLSBtZW0tPnN0YXJ0KSArIDEsIHBkZXYtPm5hbWUpOworCWlmICghaW9hcmVhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkF1ZGlvIHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3JlbGVhc2VfZGF0YTsKKwl9CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWRldi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRldi0+Y2xrKSkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwl9CisKKwljbGtfZW5hYmxlKGRldi0+Y2xrKTsKKworCWRldi0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKG1lbS0+c3RhcnQpOworCWRldi0+b3BfbW9kZSA9IHBkYXRhLT5vcF9tb2RlOworCWRldi0+dGRtX3Nsb3RzID0gcGRhdGEtPnRkbV9zbG90czsKKwlkZXYtPm51bV9zZXJpYWxpemVyID0gcGRhdGEtPm51bV9zZXJpYWxpemVyOworCWRldi0+c2VyaWFsX2RpciA9IHBkYXRhLT5zZXJpYWxfZGlyOworCWRldi0+Y29kZWNfZm10ID0gcGRhdGEtPmNvZGVjX2ZtdDsKKwlkZXYtPnZlcnNpb24gPSBwZGF0YS0+dmVyc2lvbjsKKwlkZXYtPnR4bnVtZXZ0ID0gcGRhdGEtPnR4bnVtZXZ0OworCWRldi0+cnhudW1ldnQgPSBwZGF0YS0+cnhudW1ldnQ7CisKKwlkbWFfZGF0YVtjb3VudF0ubmFtZSA9ICJJMlMgUENNIFN0ZXJlbyBvdXQiOworCWRtYV9kYXRhW2NvdW50XS5ldmVudHFfbm8gPSBwZGF0YS0+ZXZlbnRxX25vOworCWRtYV9kYXRhW2NvdW50XS5kbWFfYWRkciA9IChkbWFfYWRkcl90KSAocGRhdGEtPnR4X2RtYV9vZmZzZXQgKworCQkJCQkJCWlvX3YycChkZXYtPmJhc2UpKTsKKwlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10gPSAmZG1hX2RhdGFbY291bnRdOworCisJLyogZmlyc3QgVFgsIHRoZW4gUlggKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIERNQSByZXNvdXJjZVxuIik7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCX0KKworCWRtYV9kYXRhW2NvdW50XS5jaGFubmVsID0gcmVzLT5zdGFydDsKKwljb3VudCsrOworCWRtYV9kYXRhW2NvdW50XS5uYW1lID0gIkkyUyBQQ00gU3RlcmVvIGluIjsKKwlkbWFfZGF0YVtjb3VudF0uZXZlbnRxX25vID0gcGRhdGEtPmV2ZW50cV9ubzsKKwlkbWFfZGF0YVtjb3VudF0uZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkocGRhdGEtPnJ4X2RtYV9vZmZzZXQgKworCQkJCQkJCWlvX3YycChkZXYtPmJhc2UpKTsKKwlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSA9ICZkbWFfZGF0YVtjb3VudF07CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIERNQSByZXNvdXJjZVxuIik7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCX0KKworCWRtYV9kYXRhW2NvdW50XS5jaGFubmVsID0gcmVzLT5zdGFydDsKKwlkYXZpbmNpX21jYXNwX2RhaVtwZGF0YS0+b3BfbW9kZV0ucHJpdmF0ZV9kYXRhID0gZGV2OworCWRhdmluY2lfbWNhc3BfZGFpW3BkYXRhLT5vcF9tb2RlXS5kZXYgPSAmcGRldi0+ZGV2OworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZkYXZpbmNpX21jYXNwX2RhaVtwZGF0YS0+b3BfbW9kZV0pOworCisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwlyZXR1cm4gMDsKKworZXJyX3JlbGVhc2VfcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCAobWVtLT5lbmQgLSBtZW0tPnN0YXJ0KSArIDEpOworZXJyX3JlbGVhc2VfZGF0YToKKwlrZnJlZShkbWFfZGF0YSk7CitlcnJfcmVsZWFzZV9kZXY6CisJa2ZyZWUoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGF2aW5jaV9tY2FzcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKmRtYV9kYXRhOworCXN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2OworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmZGF2aW5jaV9tY2FzcF9kYWlbcGRhdGEtPm9wX21vZGVdKTsKKwlkZXYgPSBkYXZpbmNpX21jYXNwX2RhaVtwZGF0YS0+b3BfbW9kZV0ucHJpdmF0ZV9kYXRhOworCWNsa19kaXNhYmxlKGRldi0+Y2xrKTsKKwljbGtfcHV0KGRldi0+Y2xrKTsKKwlkZXYtPmNsayA9IE5VTEw7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCAobWVtLT5lbmQgLSBtZW0tPnN0YXJ0KSArIDEpOworCisJZG1hX2RhdGEgPSBkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS107CisJa2ZyZWUoZG1hX2RhdGEpOworCWtmcmVlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGF2aW5jaV9tY2FzcF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGRhdmluY2lfbWNhc3BfcHJvYmUsCisJLnJlbW92ZQkJPSBkYXZpbmNpX21jYXNwX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiZGF2aW5jaS1tY2FzcCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkYXZpbmNpX21jYXNwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkYXZpbmNpX21jYXNwX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChkYXZpbmNpX21jYXNwX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZGF2aW5jaV9tY2FzcF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRhdmluY2lfbWNhc3BfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGRhdmluY2lfbWNhc3BfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlN0ZXZlIENoZW4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVEkgREFWSU5DSSBNY0FTUCBTb0MgSW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuaCBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQzNTRjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBBTFNBIFNvQyBNY0FTUCBBdWRpbyBMYXllciBmb3IgVEkgREFWSU5DSSBwcm9jZXNzb3IKKyAqCisgKiBNQ0FTUCByZWxhdGVkIGRlZmluaXRpb25zCisgKgorICogQXV0aG9yOiBOaXJtYWwgUGFuZGV5IDxuLXBhbmRleUB0aS5jb20+LAorICogICAgICAgICBTdXJlc2ggUmFqYXNoZWthcmEgPHN1cmVzaC5yQHRpLmNvbT4KKyAqICAgICAgICAgU3RldmUgQ2hlbiA8c2NoZW5ALm12aXN0YS5jb20+CisgKgorICogQ29weXJpZ2h0OiAgIChDKSAyMDA5IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4sIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqIENvcHlyaWdodDogICAoQykgMjAwOSAgVGV4YXMgSW5zdHJ1bWVudHMsIEluZGlhCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIERBVklOQ0lfTUNBU1BfSAorI2RlZmluZSBEQVZJTkNJX01DQVNQX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9hc3AuaD4KKyNpbmNsdWRlICJkYXZpbmNpLXBjbS5oIgorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIGRhdmluY2lfbWNhc3BfZGFpW107CisKKyNkZWZpbmUgREFWSU5DSV9NQ0FTUF9SQVRFUwlTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCisjZGVmaW5lIERBVklOQ0lfTUNBU1BfSTJTX0RBSQkwCisjZGVmaW5lIERBVklOQ0lfTUNBU1BfRElUX0RBSQkxCisKK2VudW0geworCURBVklOQ0lfQVVESU9fV09SRF84ID0gMCwKKwlEQVZJTkNJX0FVRElPX1dPUkRfMTIsCisJREFWSU5DSV9BVURJT19XT1JEXzE2LAorCURBVklOQ0lfQVVESU9fV09SRF8yMCwKKwlEQVZJTkNJX0FVRElPX1dPUkRfMjQsCisJREFWSU5DSV9BVURJT19XT1JEXzMyLAorCURBVklOQ0lfQVVESU9fV09SRF8yOCwgIC8qIFRoaXMgaXMgb25seSB2YWxpZCBmb3IgTWNBU1AgKi8KK307CisKK3N0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCBzYW1wbGVfcmF0ZTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXNbMl07CisJdW5zaWduZWQgaW50IGNvZGVjX2ZtdDsKKworCS8qIE1jQVNQIHNwZWNpZmljIGRhdGEgKi8KKwlpbnQJdGRtX3Nsb3RzOworCXU4CW9wX21vZGU7CisJdTgJbnVtX3NlcmlhbGl6ZXI7CisJdTgJKnNlcmlhbF9kaXI7CisJdTgJdmVyc2lvbjsKKworCS8qIE1jQVNQIEZJRk8gcmVsYXRlZCAqLworCXU4CXR4bnVtZXZ0OworCXU4CXJ4bnVtZXZ0OworfTsKKworI2VuZGlmCS8qIERBVklOQ0lfTUNBU1BfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKaW5kZXggYTA1OTk2NS4uMDkxZGFjYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCkBAIC02Nyw2ICs2Nyw3IEBACiAJZG1hX2FkZHJfdCBzcmMsIGRzdDsKIAl1bnNpZ25lZCBzaG9ydCBzcmNfYmlkeCwgZHN0X2JpZHg7CiAJdW5zaWduZWQgaW50IGRhdGFfdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCBhY250OwogCXVuc2lnbmVkIGludCBjb3VudDsKIAogCXBlcmlvZF9zaXplID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CkBAIC05MSwxMSArOTIsMTIgQEAKIAkJZHN0X2JpZHggPSBkYXRhX3R5cGU7CiAJfQogCisJYWNudCA9IHBydGQtPnBhcmFtcy0+YWNudDsKIAllZG1hX3NldF9zcmMobGNoLCBzcmMsIElOQ1IsIFc4QklUKTsKIAllZG1hX3NldF9kZXN0KGxjaCwgZHN0LCBJTkNSLCBXOEJJVCk7CiAJZWRtYV9zZXRfc3JjX2luZGV4KGxjaCwgc3JjX2JpZHgsIDApOwogCWVkbWFfc2V0X2Rlc3RfaW5kZXgobGNoLCBkc3RfYmlkeCwgMCk7Ci0JZWRtYV9zZXRfdHJhbnNmZXJfcGFyYW1zKGxjaCwgZGF0YV90eXBlLCBjb3VudCwgMSwgMCwgQVNZTkMpOworCWVkbWFfc2V0X3RyYW5zZmVyX3BhcmFtcyhsY2gsIGFjbnQsIGNvdW50LCAxLCAwLCBBU1lOQyk7CiAKIAlwcnRkLT5wZXJpb2QrKzsKIAlpZiAodW5saWtlbHkocHJ0ZC0+cGVyaW9kID49IHJ1bnRpbWUtPnBlcmlvZHMpKQpAQCAtMjA2LDYgKzIwOCw3IEBACiAJLyogQ29weSBzZWxmLWxpbmtlZCBwYXJhbWV0ZXIgUkFNIGVudHJ5IGludG8gbWFzdGVyIGNoYW5uZWwgKi8KIAllZG1hX3JlYWRfc2xvdChwcnRkLT5zbGF2ZV9sY2gsICZ0ZW1wKTsKIAllZG1hX3dyaXRlX3Nsb3QocHJ0ZC0+bWFzdGVyX2xjaCwgJnRlbXApOworCWRhdmluY2lfcGNtX2VucXVldWVfZG1hKHN1YnN0cmVhbSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI0Myw2ICsyNDYsMTEgQEAKIAlpbnQgcmV0ID0gMDsKIAogCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmZGF2aW5jaV9wY21faGFyZHdhcmUpOworCS8qIGVuc3VyZSB0aGF0IGJ1ZmZlciBzaXplIGlzIGEgbXVsdGlwbGUgb2YgcGVyaW9kIHNpemUgKi8KKwlyZXQgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLAorCQkJCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJcHJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXZpbmNpX3J1bnRpbWVfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmIChwcnRkID09IE5VTEwpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5oIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uaAppbmRleCA2MmNiNGViLi42M2Q5NjI1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5oCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmgKQEAgLTEyLDE3ICsxMiwyMCBAQAogI2lmbmRlZiBfREFWSU5DSV9QQ01fSAogI2RlZmluZSBfREFWSU5DSV9QQ01fSAogCisjaW5jbHVkZSA8bWFjaC9lZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9hc3AuaD4KKworCiBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyB7Ci0JY2hhciAqbmFtZTsJCS8qIHN0cmVhbSBpZGVudGlmaWVyICovCi0JaW50IGNoYW5uZWw7CQkvKiBzeW5jIGRtYSBjaGFubmVsIElEICovCi0JZG1hX2FkZHJfdCBkbWFfYWRkcjsJLyogZGV2aWNlIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSAqLwotCXVuc2lnbmVkIGludCBkYXRhX3R5cGU7CS8qIHhmZXIgZGF0YSB0eXBlICovCisJY2hhciAqbmFtZTsJCQkvKiBzdHJlYW0gaWRlbnRpZmllciAqLworCWludCBjaGFubmVsOwkJCS8qIHN5bmMgZG1hIGNoYW5uZWwgSUQgKi8KKwl1bnNpZ25lZCBzaG9ydCBhY250OworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CQkvKiBkZXZpY2UgcGh5c2ljYWwgYWRkcmVzcyBmb3IgRE1BICovCisJZW51bSBkbWFfZXZlbnRfcSBldmVudHFfbm87CS8qIGV2ZW50IHF1ZXVlIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgZGF0YV90eXBlOwkvKiB4ZmVyIGRhdGEgdHlwZSAqLworCXVuc2lnbmVkIGNoYXIgY29udmVydF9tb25vX3N0ZXJlbzsKIH07CiAKLXN0cnVjdCBldm1fc25kX3BsYXRmb3JtX2RhdGEgewotCWludCB0eF9kbWFfY2g7Ci0JaW50IHJ4X2RtYV9jaDsKLX07CiAKIGV4dGVybiBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBkYXZpbmNpX3NvY19wbGF0Zm9ybTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9tcGM1MjAwX2RtYS5jIGIvc291bmQvc29jL2ZzbC9tcGM1MjAwX2RtYS5jCmluZGV4IGYwYTJkNDAuLjlmZjYyZTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9kbWEuYworKysgYi9zb3VuZC9zb2MvZnNsL21wYzUyMDBfZG1hLmMKQEAgLTY5LDYgKzY5LDIzIEBACiAKIHN0YXRpYyB2b2lkIHBzY19kbWFfYmNvbV9lbnF1ZXVlX3R4KHN0cnVjdCBwc2NfZG1hX3N0cmVhbSAqcykKIHsKKwlpZiAocy0+YXBwbF9wdHIgPiBzLT5ydW50aW1lLT5jb250cm9sLT5hcHBsX3B0cikgeworCQkvKgorCQkgKiBJbiB0aGlzIGNhc2Ugcy0+cnVudGltZS0+Y29udHJvbC0+YXBwbF9wdHIgaGFzIHdyYXBwZWQgYXJvdW5kLgorCQkgKiBQbGF5IHRoZSBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGJvdW5kYXJ5LCB0aGVuIHdyYXAgb3VyIG93bgorCQkgKiBhcHBsX3B0ciBiYWNrIGFyb3VuZC4KKwkJICovCisJCXdoaWxlIChzLT5hcHBsX3B0ciA8IHMtPnJ1bnRpbWUtPmJvdW5kYXJ5KSB7CisJCQlpZiAoYmNvbV9xdWV1ZV9mdWxsKHMtPmJjb21fdGFzaykpCisJCQkJcmV0dXJuOworCisJCQlzLT5hcHBsX3B0ciArPSBzLT5wZXJpb2Rfc2l6ZTsKKworCQkJcHNjX2RtYV9iY29tX2VucXVldWVfbmV4dF9idWZmZXIocyk7CisJCX0KKwkJcy0+YXBwbF9wdHIgLT0gcy0+cnVudGltZS0+Ym91bmRhcnk7CisJfQorCiAJd2hpbGUgKHMtPmFwcGxfcHRyIDwgcy0+cnVudGltZS0+Y29udHJvbC0+YXBwbF9wdHIpIHsKIAogCQlpZiAoYmNvbV9xdWV1ZV9mdWxsKHMtPmJjb21fdGFzaykpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL21wYzUyMDBfcHNjX2FjOTcuYyBiL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfYWM5Ny5jCmluZGV4IDdlYjU0OTkuLmM0YWUzZTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfYWM5Ny5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgpAQCAtMTEyLDcgKzExMyw3IEBACiAJb3V0XzgoJnJlZ3MtPm9wMSwgTVBDNTJ4eF9QU0NfT1BfUkVTKTsKIAl1ZGVsYXkoMTApOwogCW91dF84KCZyZWdzLT5vcDAsIE1QQzUyeHhfUFNDX09QX1JFUyk7Ci0JdWRlbGF5KDUwKTsKKwltc2xlZXAoMSk7CiAJcHNjX2FjOTdfd2FybV9yZXNldChhYzk3KTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9LY29uZmlnIGIvc291bmQvc29jL2lteC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MDA1NjJlCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2lteC9LY29uZmlnCkBAIC0wLDAgKzEsMjEgQEAKK2NvbmZpZyBTTkRfTVgxX01YMl9TT0MKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIGZvciBGcmVlY2FsZSBpLk1YMXggaS5NWDJ4IENQVXMiCisJZGVwZW5kcyBvbiBBUkNIX01YMiB8fCBBUkNIX01YMQorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvCisJICB0aGUgTVgxIG9yIE1YMiBTU0kgaW50ZXJmYWNlLgorCitjb25maWcgU05EX01YQ19TT0NfU1NJCisJdHJpc3RhdGUKKworY29uZmlnIFNORF9TT0NfTVgyN1ZJU19XTTg5NzQKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIE1YMjcgLSBXTTg5NzQgVmlzc3RyaW1fc20xMCBib2FyZCIKKwlkZXBlbmRzIG9uIFNORF9NWDFfTVgyX1NPQyAmJiBNQUNIX01YMjcgJiYgTUFDSF9JTVgyN19WSVNTVFJJTV9NMTAKKwlzZWxlY3QgU05EX01YQ19TT0NfU1NJCisJc2VsZWN0IFNORF9TT0NfV004OTc0CisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBWaXNzdHJpbSBTTTEwCisJICBib2FyZCB3aXRoIFdNODk3NC4KKworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L01ha2VmaWxlIGIvc291bmQvc29jL2lteC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmZmZDJjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2lteC9NYWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACisjIGkuTVggUGxhdGZvcm0gU3VwcG9ydAorc25kLXNvYy1teDFfbXgyLW9ianMgOj0gbXgxX214Mi1wY20ubworc25kLXNvYy1teGMtc3NpLW9ianMgOj0gbXhjLXNzaS5vCisKK29iai0kKENPTkZJR19TTkRfTVgxX01YMl9TT0MpICs9IHNuZC1zb2MtbXgxX214Mi5vCitvYmotJChDT05GSUdfU05EX01YQ19TT0NfU1NJKSArPSBzbmQtc29jLW14Yy1zc2kubworCisjIGkuTVggTWFjaGluZSBTdXBwb3J0CitzbmQtc29jLW14Mjd2aXMtd204OTc0LW9ianMgOj0gbXgyN3Zpc193bTg5NzQubworb2JqLSQoQ09ORklHX1NORF9TT0NfTVgyN1ZJU19XTTg5NzQpICs9IHNuZC1zb2MtbXgyN3Zpcy13bTg5NzQubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5jIGIvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4Mzg2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW14L214MV9teDItcGNtLmMKQEAgLTAsMCArMSw0ODggQEAKKy8qCisgKiBteDFfbXgyLXBjbS5jIC0tIEFMU0EgU29DIGludGVyZmFjZSBmb3IgRnJlZXNjYWxlIGkuTVgxeCwgaS5NWDJ4IENQVXMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBWaXN0YSBTaWxpY29uIFMuTC4KKyAqIEF1dGhvcjogSmF2aWVyIE1hcnRpbgorICogICAgICAgICBqYXZpZXIubWFydGluQHZpc3RhLXNpbGljb24uY29tCisgKgorICogQmFzZWQgb24gbXhjLXBjbS5jIGJ5IExpYW0gR2lyZHdvb2QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLW14MS1teDIuaD4KKworI2luY2x1ZGUgIm14MV9teDItcGNtLmgiCisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIG14MV9teDJfcGNtX2hhcmR3YXJlID0geworCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCSAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKwkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkuYnVmZmVyX2J5dGVzX21heAk9IDMyICogMTAyNCwKKwkucGVyaW9kX2J5dGVzX21pbgk9IDY0LAorCS5wZXJpb2RfYnl0ZXNfbWF4CT0gOCAqIDEwMjQsCisJLnBlcmlvZHNfbWluCQk9IDIsCisJLnBlcmlvZHNfbWF4CQk9IDI1NSwKKwkuZmlmb19zaXplCQk9IDAsCit9OworCitzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgeworCWludCBkbWFfY2g7CisJaW50IGFjdGl2ZTsKKwl1bnNpZ25lZCBpbnQgcGVyaW9kOworCXVuc2lnbmVkIGludCBwZXJpb2RzOworCWludCB0eF9zcGluOworCXNwaW5sb2NrX3QgZG1hX2xvY2s7CisJc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXM7Cit9OworCisKKy8qKgorICAqIFRoaXMgZnVuY3Rpb24gc3RvcHMgdGhlIGN1cnJlbnQgZG1hIHRyYW5zZmVyIGZvciBwbGF5YmFjaworICAqIGFuZCBjbGVhcnMgdGhlIGRtYSBwb2ludGVycy4KKyAgKgorICAqIEBwYXJhbQlzdWJzdHJlYW0JcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIG9mIHRoZSBjdXJyZW50IHN0cmVhbS4KKyAgKgorICAqLworc3RhdGljIGludCBhdWRpb19zdG9wX2RtYShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBydGQtPmRtYV9sb2NrLCBmbGFncyk7CisKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKKworCXBydGQtPmFjdGl2ZSA9IDA7CisJcHJ0ZC0+cGVyaW9kID0gMDsKKwlwcnRkLT5wZXJpb2RzID0gMDsKKworCS8qIHRoaXMgc3RvcHMgdGhlIGRtYSBjaGFubmVsIGFuZCBjbGVhcnMgdGhlIGJ1ZmZlciBwdHJzICovCisKKwlpbXhfZG1hX2Rpc2FibGUocHJ0ZC0+ZG1hX2NoKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBydGQtPmRtYV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBuZXcgYXVkaW8gYmxvY2sgbmVlZHMgdG8gYmUKKyAgKiB0cmFuc2ZlcnJlZCB0byB0aGUgY29kZWMuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyB0aGUgYWRkcmVzcyBhbmQgdGhlIHNpemUKKyAgKiBvZiB0aGUgbmV3IGJsb2NrIGFuZCBzdGFydCBhIG5ldyBETUEgdHJhbnNmZXIuCisgICoKKyAgKiBAcGFyYW0Jc3Vic3RyZWFtCXBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgY3VycmVudCBzdHJlYW0uCisgICoKKyAgKi8KK3N0YXRpYyBpbnQgZG1hX25ld19wZXJpb2Qoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9ICBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBkbWFfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCWludCByZXQgPSAwOworCWRtYV9hZGRyX3QgbWVtX2FkZHI7CisJdW5zaWduZWQgaW50IGRldl9hZGRyOworCisJaWYgKHBydGQtPmFjdGl2ZSkgeworCQlkbWFfc2l6ZSA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCW9mZnNldCA9IGRtYV9zaXplICogcHJ0ZC0+cGVyaW9kOworCisJCXByX2RlYnVnKCIlczogcGVyaW9kICglZCkgb3V0IG9mICglZClcbiIsIF9fZnVuY19fLAorCQkJcHJ0ZC0+cGVyaW9kLAorCQkJcnVudGltZS0+cGVyaW9kcyk7CisJCXByX2RlYnVnKCJwZXJpb2Rfc2l6ZSAlZCBmcmFtZXNcbiBvZmZzZXQgJWQgYnl0ZXNcbiIsCisJCQkodW5zaWduZWQgaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLAorCQkJb2Zmc2V0KTsKKwkJcHJfZGVidWcoImRtYV9zaXplICVkIGJ5dGVzXG4iLCBkbWFfc2l6ZSk7CisKKwkJc25kX0JVR19PTihkbWFfc2l6ZSA+IG14MV9teDJfcGNtX2hhcmR3YXJlLnBlcmlvZF9ieXRlc19tYXgpOworCisJCW1lbV9hZGRyID0gKGRtYV9hZGRyX3QpKHJ1bnRpbWUtPmRtYV9hZGRyICsgb2Zmc2V0KTsKKwkJZGV2X2FkZHIgPSBwcnRkLT5kbWFfcGFyYW1zLT5wZXJfYWRkcmVzczsKKwkJcHJfZGVidWcoIiVzOiBtZW1fYWRkciBpcyAleFxuIGRldl9hZGRyIGlzICV4XG4iLAorCQkJCSBfX2Z1bmNfXywgbWVtX2FkZHIsIGRldl9hZGRyKTsKKworCQlyZXQgPSBpbXhfZG1hX3NldHVwX3NpbmdsZShwcnRkLT5kbWFfY2gsIG1lbV9hZGRyLAorCQkJCQlkbWFfc2l6ZSwgZGV2X2FkZHIsCisJCQkJCXBydGQtPmRtYV9wYXJhbXMtPnRyYW5zZmVyX3R5cGUpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciAlZCBjb25maWd1cmluZyBETUFcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWlteF9kbWFfZW5hYmxlKHBydGQtPmRtYV9jaCk7CisKKwkJcHJfZGVidWcoIiVzOiB0cmFuc2ZlciBlbmFibGVkXG5tZW1fYWRkciA9ICV4XG4iLAorCQkJX19mdW5jX18sICh1bnNpZ25lZCBpbnQpIG1lbV9hZGRyKTsKKwkJcHJfZGVidWcoImRldl9hZGRyID0gJXhcbmRtYV9zaXplID0gJWRcbiIsCisJCQkodW5zaWduZWQgaW50KSBkZXZfYWRkciwgZG1hX3NpemUpOworCisJCXBydGQtPnR4X3NwaW4gPSAxOyAvKiBGR0EgbGl0dGxlIHRyaWNrIHRvIHJldHJpZXZlIERNQSBwb3MgKi8KKwkJcHJ0ZC0+cGVyaW9kKys7CisJCXBydGQtPnBlcmlvZCAlPSBydW50aW1lLT5wZXJpb2RzOworICAgIH0KKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgorICAqIFRoaXMgaXMgYSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGNhbGxlZAorICAqIHdoZW4gYSBUWCB0cmFuc2ZlciBmaW5pc2hlcy4gVGhlIGNhbGwgb2NjdXJzCisgICogaW4gaW50ZXJydXB0IGNvbnRleHQuCisgICoKKyAgKiBAcGFyYW0JZGF0CXBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgY3VycmVudCBzdHJlYW0uCisgICoKKyAgKi8KK3N0YXRpYyB2b2lkIGF1ZGlvX2RtYV9pcnEoaW50IGNoYW5uZWwsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKwlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQ7CisJdW5zaWduZWQgaW50IGRtYV9zaXplOworCXVuc2lnbmVkIGludCBwcmV2aW91c19wZXJpb2Q7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKworCXN1YnN0cmVhbSA9IGRhdGE7CisJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXByZXZpb3VzX3BlcmlvZCAgPSBwcnRkLT5wZXJpb2RzOworCWRtYV9zaXplID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwlvZmZzZXQgPSBkbWFfc2l6ZSAqIHByZXZpb3VzX3BlcmlvZDsKKworCXBydGQtPnR4X3NwaW4gPSAwOworCXBydGQtPnBlcmlvZHMrKzsKKwlwcnRkLT5wZXJpb2RzICU9IHJ1bnRpbWUtPnBlcmlvZHM7CisKKwlwcl9kZWJ1ZygiJXM6IGlycSBwZXIgJWQgb2Zmc2V0ICV4XG4iLCBfX2Z1bmNfXywgcHJ0ZC0+cGVyaW9kcywgb2Zmc2V0KTsKKworCS8qCisJICAqIElmIHdlIGFyZSBnZXR0aW5nIGEgY2FsbGJhY2sgZm9yIGFuIGFjdGl2ZSBzdHJlYW0gdGhlbiB3ZSBpbmZvcm0KKwkgICogdGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2UndmUgZmluaXNoZWQgYSBwZXJpb2QKKwkgICovCisJaWYgKHBydGQtPmFjdGl2ZSkKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCisJLyoKKwkgICogVHJpZyBuZXh0IERNQSB0cmFuc2ZlcgorCSAgKi8KKwlkbWFfbmV3X3BlcmlvZChzdWJzdHJlYW0pOworfQorCisvKioKKyAgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIGhhcmR3YXJlIHRvIGFsbG93IGF1ZGlvCisgICogcGxheWJhY2sgb3BlcmF0aW9ucy4gSXQgaXMgY2FsbGVkIGJ5IEFMU0EgZnJhbWV3b3JrLgorICAqCisgICogQHBhcmFtCXN1YnN0cmVhbQlwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJlbnQgc3RyZWFtLgorICAqCisgICogQHJldHVybiAgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCisgICovCitzdGF0aWMgaW50CitzbmRfbXgxX214Ml9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSAgc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCXBydGQtPnBlcmlvZCA9IDA7CisJcHJ0ZC0+cGVyaW9kcyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDFfbXgyX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpbnQgcmV0OworCisJcmV0ID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBmYWlsZWQgdG8gbWFsbG9jIHBjbSBwYWdlcyBcbiIsCisJCV9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXByX2RlYnVnKCIlczogc25kX2lteDFfbXgyX2F1ZGlvX2h3X3BhcmFtcyBydW50aW1lLT5kbWFfYWRkciAweCgleClcbiIsCisJCV9fZnVuY19fLCAodW5zaWduZWQgaW50KXJ1bnRpbWUtPmRtYV9hZGRyKTsKKwlwcl9kZWJ1ZygiJXM6IHNuZF9pbXgxX214Ml9hdWRpb19od19wYXJhbXMgcnVudGltZS0+ZG1hX2FyZWEgMHgoJXgpXG4iLAorCQlfX2Z1bmNfXywgKHVuc2lnbmVkIGludClydW50aW1lLT5kbWFfYXJlYSk7CisJcHJfZGVidWcoIiVzOiBzbmRfaW14MV9teDJfYXVkaW9faHdfcGFyYW1zIHJ1bnRpbWUtPmRtYV9ieXRlcyAweCgleClcbiIsCisJCV9fZnVuY19fLCAodW5zaWduZWQgaW50KXJ1bnRpbWUtPmRtYV9ieXRlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG14MV9teDJfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlpbXhfZG1hX2ZyZWUocHJ0ZC0+ZG1hX2NoKTsKKworCXNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14MV9teDJfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCXBydGQtPnR4X3NwaW4gPSAwOworCQkvKiByZXF1ZXN0ZWQgc3RyZWFtIHN0YXJ0dXAgKi8KKwkJcHJ0ZC0+YWN0aXZlID0gMTsKKwkJcHJfZGVidWcoIiVzOiBzdGFydGluZyBkbWFfbmV3X3BlcmlvZFxuIiwgX19mdW5jX18pOworCQlyZXQgPSBkbWFfbmV3X3BlcmlvZChzdWJzdHJlYW0pOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCS8qIHJlcXVlc3RlZCBzdHJlYW0gc2h1dGRvd24gKi8KKwkJcHJfZGVidWcoIiVzOiBzdG9wcGluZyBkbWEgdHJhbnNmZXJcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gYXVkaW9fc3RvcF9kbWEoc3Vic3RyZWFtKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CitteDFfbXgyX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwOworCisJLyogdHhfc3BpbiB2YWx1ZSBpcyB1c2VkIGhlcmUgdG8gY2hlY2sgaWYgYSB0cmFuc2ZlciBpcyBhY3RpdmUgKi8KKwlpZiAocHJ0ZC0+dHhfc3BpbikgeworCQlvZmZzZXQgPSAocnVudGltZS0+cGVyaW9kX3NpemUgKiAocHJ0ZC0+cGVyaW9kcykpICsKKwkJCQkJCShydW50aW1lLT5wZXJpb2Rfc2l6ZSA+PiAxKTsKKwkJaWYgKG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJCW9mZnNldCA9IHJ1bnRpbWUtPnBlcmlvZF9zaXplID4+IDE7CisJfSBlbHNlIHsKKwkJb2Zmc2V0ID0gKHJ1bnRpbWUtPnBlcmlvZF9zaXplICogKHBydGQtPnBlcmlvZHMpKTsKKwkJaWYgKG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJCW9mZnNldCA9IDA7CisJfQorCXByX2RlYnVnKCIlczogcG9pbnRlciBvZmZzZXQgJXhcbiIsIF9fZnVuY19fLCBvZmZzZXQpOworCisJcmV0dXJuIG9mZnNldDsKK30KKworc3RhdGljIGludCBteDFfbXgyX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyAqZG1hX2RhdGEgPSBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7CisJaW50IHJldDsKKworCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmbXgxX214Ml9wY21faGFyZHdhcmUpOworCisJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwKKwkJCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcHJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSksIEdGUF9LRVJORUwpOworCWlmIChwcnRkID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gcHJ0ZDsKKworCWlmICghZG1hX2RhdGEpCisJCXJldHVybiAtRU5PREVWOworCisJcHJ0ZC0+ZG1hX3BhcmFtcyA9IGRtYV9kYXRhOworCisJcHJfZGVidWcoIiVzOiBSZXF1ZXN0aW5nIGRtYSBjaGFubmVsICglcylcbiIsIF9fZnVuY19fLAorCQkJCQkJcHJ0ZC0+ZG1hX3BhcmFtcy0+bmFtZSk7CisJcHJ0ZC0+ZG1hX2NoID0gaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8ocHJ0ZC0+ZG1hX3BhcmFtcy0+bmFtZSwKKwkJCQkJCURNQV9QUklPX0hJR0gpOworCWlmIChwcnRkLT5kbWFfY2ggPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgJWQgcmVxdWVzdGluZyBkbWEgY2hhbm5lbFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaW14X2RtYV9jb25maWdfYnVyc3RsZW4ocHJ0ZC0+ZG1hX2NoLAorCQkJCXBydGQtPmRtYV9wYXJhbXMtPndhdGVybWFya19sZXZlbCk7CisKKwlyZXQgPSBpbXhfZG1hX2NvbmZpZ19jaGFubmVsKHBydGQtPmRtYV9jaCwKKwkJCXBydGQtPmRtYV9wYXJhbXMtPnBlcl9jb25maWcsCisJCQlwcnRkLT5kbWFfcGFyYW1zLT5tZW1fY29uZmlnLAorCQkJcHJ0ZC0+ZG1hX3BhcmFtcy0+ZXZlbnRfaWQsIDApOworCisJaWYgKHJldCkgeworCQlwcl9kZWJ1ZyhLRVJOX0VSUiAiRXJyb3IgJWQgY29uZmlndXJpbmcgZG1hIGNoYW5uZWwgJWRcbiIsCisJCQlyZXQsIHBydGQtPmRtYV9jaCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcHJfZGVidWcoIiVzOiBTZXR0aW5nIHR4IGRtYSBjYWxsYmFjayBmdW5jdGlvblxuIiwgX19mdW5jX18pOworCXJldCA9IGlteF9kbWFfc2V0dXBfaGFuZGxlcnMocHJ0ZC0+ZG1hX2NoLAorCQkJCWF1ZGlvX2RtYV9pcnEsIE5VTEwsCisJCQkJKHZvaWQgKilzdWJzdHJlYW0pOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgJWQgc2V0dGluZyBkbWEgY2FsbGJhY2sgZnVuY3Rpb25cbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworCisgb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXgxX214Ml9wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlrZnJlZShwcnRkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14MV9teDJfcGNtX21tYXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlyZXR1cm4gZG1hX21tYXBfd3JpdGVjb21iaW5lKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsIHZtYSwKKwkJCQkgICAgIHJ1bnRpbWUtPmRtYV9hcmVhLAorCQkJCSAgICAgcnVudGltZS0+ZG1hX2FkZHIsCisJCQkJICAgICBydW50aW1lLT5kbWFfYnl0ZXMpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIG14MV9teDJfcGNtX29wcyA9IHsKKwkub3BlbgkJPSBteDFfbXgyX3BjbV9vcGVuLAorCS5jbG9zZQkJPSBteDFfbXgyX3BjbV9jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IG14MV9teDJfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IG14MV9teDJfcGNtX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBzbmRfbXgxX214Ml9wcmVwYXJlLAorCS50cmlnZ2VyCT0gbXgxX214Ml9wY21fdHJpZ2dlciwKKwkucG9pbnRlcgk9IG14MV9teDJfcGNtX3BvaW50ZXIsCisJLm1tYXAJCT0gbXgxX214Ml9wY21fbW1hcCwKK307CisKK3N0YXRpYyB1NjQgbXgxX214Ml9wY21fZG1hbWFzayA9IDB4ZmZmZmZmZmY7CisKK3N0YXRpYyBpbnQgbXgxX214Ml9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwlzaXplX3Qgc2l6ZSA9IG14MV9teDJfcGNtX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXg7CisJYnVmLT5kZXYudHlwZSA9IFNORFJWX0RNQV9UWVBFX0RFVjsKKwlidWYtPmRldi5kZXYgPSBwY20tPmNhcmQtPmRldjsKKwlidWYtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisKKwkvKiBSZXNlcnZlIHVuY2FjaGVkLWJ1ZmZlcmVkIG1lbW9yeSBhcmVhIGZvciBETUEgKi8KKwlidWYtPmFyZWEgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKHBjbS0+Y2FyZC0+ZGV2LCBzaXplLAorCQkJCQkgICAmYnVmLT5hZGRyLCBHRlBfS0VSTkVMKTsKKworCXByX2RlYnVnKCIlczogcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcjogYXJlYT0lcCwgYWRkcj0lcCwgc2l6ZT0lZFxuIiwKKwkJX19mdW5jX18sICh2b2lkICopIGJ1Zi0+YXJlYSwgKHZvaWQgKikgYnVmLT5hZGRyLCBzaXplKTsKKworCWlmICghYnVmLT5hcmVhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJ1Zi0+Ynl0ZXMgPSBzaXplOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBteDFfbXgyX3BjbV9mcmVlX2RtYV9idWZmZXJzKHN0cnVjdCBzbmRfcGNtICpwY20pCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWY7CisJaW50IHN0cmVhbTsKKworCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgMjsgc3RyZWFtKyspIHsKKwkJc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOworCQlpZiAoIXN1YnN0cmVhbSkKKwkJCWNvbnRpbnVlOworCisJCWJ1ZiA9ICZzdWJzdHJlYW0tPmRtYV9idWZmZXI7CisJCWlmICghYnVmLT5hcmVhKQorCQkJY29udGludWU7CisKKwkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKHBjbS0+Y2FyZC0+ZGV2LCBidWYtPmJ5dGVzLAorCQkJCSAgICAgIGJ1Zi0+YXJlYSwgYnVmLT5hZGRyKTsKKwkJYnVmLT5hcmVhID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXgxX214Ml9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICghY2FyZC0+ZGV2LT5kbWFfbWFzaykKKwkJY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZteDFfbXgyX3BjbV9kbWFtYXNrOworCWlmICghY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzaykKKwkJY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmY7CisKKwlpZiAoZGFpLT5wbGF5YmFjay5jaGFubmVsc19taW4pIHsKKwkJcmV0ID0gbXgxX214Ml9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCisJCQlTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKKwkJcHJfZGVidWcoIiVzOiBwcmVhbGxvY2F0ZSBwbGF5YmFjayBidWZmZXJcbiIsIF9fZnVuY19fKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCWlmIChkYWktPmNhcHR1cmUuY2hhbm5lbHNfbWluKSB7CisJCXJldCA9IG14MV9teDJfcGNtX3ByZWFsbG9jYXRlX2RtYV9idWZmZXIocGNtLAorCQkJU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKTsKKwkJcHJfZGVidWcoIiVzOiBwcmVhbGxvY2F0ZSBjYXB0dXJlIGJ1ZmZlclxuIiwgX19mdW5jX18pOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorIG91dDoKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBteDFfbXgyX3NvY19wbGF0Zm9ybSA9IHsKKwkubmFtZQkJPSAibXgxX214Mi1hdWRpbyIsCisJLnBjbV9vcHMgCT0gJm14MV9teDJfcGNtX29wcywKKwkucGNtX25ldwk9IG14MV9teDJfcGNtX25ldywKKwkucGNtX2ZyZWUJPSBteDFfbXgyX3BjbV9mcmVlX2RtYV9idWZmZXJzLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKG14MV9teDJfc29jX3BsYXRmb3JtKTsKKworc3RhdGljIGludCBfX2luaXQgbXgxX214Ml9zb2NfcGxhdGZvcm1faW5pdCh2b2lkKQoreworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZteDFfbXgyX3NvY19wbGF0Zm9ybSk7Cit9Cittb2R1bGVfaW5pdChteDFfbXgyX3NvY19wbGF0Zm9ybV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG14MV9teDJfc29jX3BsYXRmb3JtX2V4aXQodm9pZCkKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJm14MV9teDJfc29jX3BsYXRmb3JtKTsKK30KK21vZHVsZV9leGl0KG14MV9teDJfc29jX3BsYXRmb3JtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKYXZpZXIgTWFydGluLCBqYXZpZXIubWFydGluQHZpc3RhLXNpbGljb24uY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBpLk1YMngsIGkuTVgxeCBQQ00gRE1BIG1vZHVsZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5oIGIvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTI4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW14L214MV9teDItcGNtLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIG14MV9teDItcGNtLmggOi0gQVNvQyBwbGF0Zm9ybSBoZWFkZXIgZm9yIEZyZWVzY2FsZSBpLk1YMXgsIGkuTVgyeAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfTVgxX01YMl9QQ01fSAorI2RlZmluZSBfTVgxX01YMl9QQ01fSAorCisvKiBETUEgaW5mb3JtYXRpb24gZm9yIG14MV9teDIgcGxhdGZvcm1zICovCitzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyB7CisJY2hhciAqbmFtZTsJCQkvKiBzdHJlYW0gaWRlbnRpZmllciAqLworCXVuc2lnbmVkIGludCB0cmFuc2Zlcl90eXBlOwkvKiBSRUFEIG9yIFdSSVRFIERNQSB0cmFuc2ZlciAqLworCWRtYV9hZGRyX3QgcGVyX2FkZHJlc3M7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIFNTSSBmaWZvICovCisJaW50IGV2ZW50X2lkOwkJCS8qIGZpeGVkIERNQSBudW1iZXIgZm9yIFNTSSBmaWZvICovCisJaW50IHdhdGVybWFya19sZXZlbDsJCS8qIFNTSSBmaWZvIHdhdGVybWFyayBsZXZlbCAqLworCWludCBwZXJfY29uZmlnOwkJCS8qIERNQSBDb25maWcgZmxhZ3MgZm9yIHBlcmlwaGVyYWwgKi8KKwlpbnQgbWVtX2NvbmZpZzsJCQkvKiBETUEgQ29uZmlnIGZsYWdzIGZvciBSQU0gKi8KKyB9OworCisvKiBwbGF0Zm9ybSBkYXRhICovCitleHRlcm4gc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gbXgxX214Ml9zb2NfcGxhdGZvcm07CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teDI3dmlzX3dtODk3NC5jIGIvc291bmQvc29jL2lteC9teDI3dmlzX3dtODk3NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZGNiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW14L214Mjd2aXNfd204OTc0LmMKQEAgLTAsMCArMSwzMTcgQEAKKy8qCisgKiBteDI3dmlzX3dtODk3NC5jICAtLSAgU29DIGF1ZGlvIGZvciBteDI3dmlzCisgKgorICogQ29weXJpZ2h0IDIwMDkgVmlzdGEgU2lsaWNvbiBTLkwuCisgKiBBdXRob3I6IEphdmllciBNYXJ0aW4KKyAqICAgICAgICAgamF2aWVyLm1hcnRpbkB2aXN0YS1zaWxpY29uLmNvbQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtODk3NC5oIgorI2luY2x1ZGUgIm14MV9teDItcGNtLmgiCisjaW5jbHVkZSAibXhjLXNzaS5oIgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KKworI2RlZmluZSBJR05PUkVEX0FSRyAwCisKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgbXgyN3ZpczsKKworLyoqCisgICogVGhpcyBmdW5jdGlvbiBjb25uZWN0cyBTU0kxIChIUENSMSkgYXMgc2xhdmUgdG8KKyAgKiBTU0kxIGV4dGVybmFsIHNpZ25hbHMgKFBQQ1IxKQorICAqIEFzIHNsYXZlLCBIUENSMSBtdXN0IHNldCBURlNESVIgYW5kIFRDTEtESVIgYXMgaW5wdXRzIGZyb20KKyAgKiBwb3J0IDQKKyAgKi8KK3ZvaWQgYXVkbXV4X2Nvbm5lY3RfMV80KHZvaWQpCit7CisJcHJfZGVidWcoIkFVRE1VWDogbm9ybWFsIG9wZXJhdGlvbiBtb2RlXG4iKTsKKwkvKiBSZXNldCBIUENSMSBhbmQgUFBDUjEgKi8KKworCURBTV9IUENSMSA9IDB4MDAwMDAwMDA7CisJREFNX1BQQ1IxID0gMHgwMDAwMDAwMDsKKworCS8qIHNldCB0byBzeW5jaHJvbm91cyAqLworCURBTV9IUENSMSB8PSBBVURNVVhfSFBDUl9TWU47CisJREFNX1BQQ1IxIHw9IEFVRE1VWF9QUENSX1NZTjsKKworCisJLyogc2V0IFJ4IHNvdXJjZXMgMSA8LS0+IDQgKi8KKwlEQU1fSFBDUjEgfD0gQVVETVVYX0hQQ1JfUlhEU0VMKDMpOyAvKiBwb3J0IDQgKi8KKwlEQU1fUFBDUjEgfD0gQVVETVVYX1BQQ1JfUlhEU0VMKDApOyAvKiBwb3J0IDEgKi8KKworCS8qIHNldCBUeCBmcmFtZSBhbmQgQ2xvY2sgZGlyZWN0aW9uIGFuZCBzb3VyY2UgIDQgLS0+IDEgb3V0cHV0ICovCisJREFNX0hQQ1IxIHw9IEFVRE1VWF9IUENSX1RGU0RJUiB8IEFVRE1VWF9IUENSX1RDTEtESVI7CisJREFNX0hQQ1IxIHw9IEFVRE1VWF9IUENSX1RGQ1NFTCgzKTsgLyogVHhEUyBhbmQgVHhDY2xrIGZyb20gcG9ydCA0ICovCisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgbXgyN3Zpc19oaWZpX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCXVuc2lnbmVkIGludCBwbGxfb3V0ID0gMCwgYmNsayA9IDAsIGZtdCA9IDAsIG1jbGsgPSAwOworCWludCByZXQgPSAwOworCisJLyoKKwkgKiBUaGUgV004OTc0IGlzIGJldHRlciBhdCBnZW5lcmF0aW5nIGFjY3VyYXRlIGF1ZGlvIGNsb2NrcyB0aGFuIHRoZQorCSAqIE1YMjcgU1NJIGNvbnRyb2xsZXIsIHNvIHdlIHdpbGwgdXNlIGl0IGFzIG1hc3RlciB3aGVuIHdlIGNhbi4KKwkgKi8KKwlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKKwljYXNlIDgwMDA6CisJCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07CisJCW1jbGsgPSBXTTg5NzRfTUNMS0RJVl8xMjsKKwkJcGxsX291dCA9IDI0NTc2MDAwOworCQlicmVhazsKKwljYXNlIDE2MDAwOgorCQlmbXQgPSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOworCQlwbGxfb3V0ID0gMTIyODgwMDA7CisJCWJyZWFrOworCWNhc2UgNDgwMDA6CisJCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07CisJCWJjbGsgPSBXTTg5NzRfQkNMS0RJVl80OworCQlwbGxfb3V0ID0gMTIyODgwMDA7CisJCWJyZWFrOworCWNhc2UgOTYwMDA6CisJCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07CisJCWJjbGsgPSBXTTg5NzRfQkNMS0RJVl8yOworCQlwbGxfb3V0ID0gMTIyODgwMDA7CisJCWJyZWFrOworCWNhc2UgMTEwMjU6CisJCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07CisJCWJjbGsgPSBXTTg5NzRfQkNMS0RJVl8xNjsKKwkJcGxsX291dCA9IDExMjg5NjAwOworCQlicmVhazsKKwljYXNlIDIyMDUwOgorCQlmbXQgPSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOworCQliY2xrID0gV004OTc0X0JDTEtESVZfODsKKwkJcGxsX291dCA9IDExMjg5NjAwOworCQlicmVhazsKKwljYXNlIDQ0MTAwOgorCQlmbXQgPSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOworCQliY2xrID0gV004OTc0X0JDTEtESVZfNDsKKwkJbWNsayA9IFdNODk3NF9NQ0xLRElWXzI7CisJCXBsbF9vdXQgPSAxMTI4OTYwMDsKKwkJYnJlYWs7CisJY2FzZSA4ODIwMDoKKwkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKKwkJYmNsayA9IFdNODk3NF9CQ0xLRElWXzI7CisJCXBsbF9vdXQgPSAxMTI4OTYwMDsKKwkJYnJlYWs7CisJfQorCisJLyogc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gY29kZWNfZGFpLT5vcHMtPnNldF9mbXQoY29kZWNfZGFpLAorCQlTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9JRiB8CisJCVNORF9TT0NfREFJRk1UX1NZTkMgfCBmbXQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgZnJvbSBjb2RlYyBEQUkgY29uZmlndXJhdGlvblxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IGNwdV9kYWktPm9wcy0+c2V0X2ZtdChjcHVfZGFpLAorCQlTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCVNORF9TT0NfREFJRk1UX1NZTkMgfCBmbXQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgZnJvbSBjcHUgREFJIGNvbmZpZ3VyYXRpb25cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFB1dCBEQyBmaWVsZCBvZiBTVENDUiB0byAxIChub3QgemVybykgKi8KKwlyZXQgPSBjcHVfZGFpLT5vcHMtPnNldF90ZG1fc2xvdChjcHVfZGFpLCAwLCAyKTsKKworCS8qIHNldCB0aGUgU1NJIHN5c3RlbSBjbG9jayBhcyBpbnB1dCAqLworCXJldCA9IGNwdV9kYWktPm9wcy0+c2V0X3N5c2NsayhjcHVfZGFpLCBJTVhfU1NQX1NZU19DTEssIDAsCisJCVNORF9TT0NfQ0xPQ0tfSU4pOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd2hlbiBzZXR0aW5nIHN5c3RlbSBTU0kgY2xrXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBzZXQgY29kZWMgQkNMSyBkaXZpc2lvbiBmb3Igc2FtcGxlIHJhdGUgKi8KKwlyZXQgPSBjb2RlY19kYWktPm9wcy0+c2V0X2Nsa2Rpdihjb2RlY19kYWksIFdNODk3NF9CQ0xLRElWLCBiY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHdoZW4gc2V0dGluZyBCQ0xLIGRpdmlzaW9uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKworCS8qIGNvZGVjIFBMTCBpbnB1dCBpcyAyNSBNSHogKi8KKwlyZXQgPSBjb2RlY19kYWktPm9wcy0+c2V0X3BsbChjb2RlY19kYWksIElHTk9SRURfQVJHLAorCQkJCQkyNTAwMDAwMCwgcGxsX291dCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3aGVuIHNldHRpbmcgUExMIGlucHV0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKnNldCBjb2RlYyBNQ0xLIGRpdmlzaW9uIGZvciBzYW1wbGUgcmF0ZSAqLworCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV004OTc0X01DTEtESVYsIG1jbGspOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd2hlbiBzZXR0aW5nIE1DTEsgZGl2aXNpb25cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14Mjd2aXNfaGlmaV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CisKKwkvKiBkaXNhYmxlIHRoZSBQTEwgKi8KKwlyZXR1cm4gY29kZWNfZGFpLT5vcHMtPnNldF9wbGwoY29kZWNfZGFpLCBJR05PUkVEX0FSRywgMCwgMCk7Cit9CisKKy8qCisgKiBteDI3dmlzIFdNODk3NCBIaUZpIERBSSBvcHNlcmF0aW9ucy4KKyAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBteDI3dmlzX2hpZmlfb3BzID0geworCS5od19wYXJhbXMgPSBteDI3dmlzX2hpZmlfaHdfcGFyYW1zLAorCS5od19mcmVlID0gbXgyN3Zpc19oaWZpX2h3X2ZyZWUsCit9OworCisKK3N0YXRpYyBpbnQgbXgyN3Zpc19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDI3dmlzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14Mjd2aXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IGdldF9zc2lfY2xrKDAsICZwZGV2LT5kZXYpOworCisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FudCBnZXQgc3NpIGNsb2NrXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDI3dmlzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXB1dF9zc2lfY2xrKDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgbXgyN3Zpc19kYWlbXSA9IHsKK3sgLyogSGlmaSBQbGF5YmFjayovCisJLm5hbWUgPSAiV004OTc0IiwKKwkuc3RyZWFtX25hbWUgPSAiV004OTc0IEhpRmkiLAorCS5jcHVfZGFpID0gJmlteF9zc2lfcGNtX2RhaVswXSwKKwkuY29kZWNfZGFpID0gJndtODk3NF9kYWksCisJLm9wcyA9ICZteDI3dmlzX2hpZmlfb3BzLAorfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIG14Mjd2aXMgPSB7CisJLm5hbWUgPSAibXgyN3ZpcyIsCisJLnBsYXRmb3JtID0gJm14MV9teDJfc29jX3BsYXRmb3JtLAorCS5wcm9iZSA9IG14Mjd2aXNfcHJvYmUsCisJLnJlbW92ZSA9IG14Mjd2aXNfcmVtb3ZlLAorCS5zdXNwZW5kX3ByZSA9IG14Mjd2aXNfc3VzcGVuZCwKKwkucmVzdW1lX3Bvc3QgPSBteDI3dmlzX3Jlc3VtZSwKKwkuZGFpX2xpbmsgPSBteDI3dmlzX2RhaSwKKwkubnVtX2xpbmtzID0gQVJSQVlfU0laRShteDI3dmlzX2RhaSksCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIG14Mjd2aXNfc25kX2RldmRhdGEgPSB7CisJLmNhcmQgPSAmbXgyN3ZpcywKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfd204OTc0LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm14Mjd2aXNfc25kX2RldmljZTsKKworLyogVGVtcG9yYWwgZGVmaW5pdGlvbiBvZiBib2FyZCBzcGVjaWZpYyBiZWhhdmlvdXIgKi8KK3ZvaWQgZ3Bpb19zc2lfYWN0aXZlKGludCBzc2lfbnVtKQoreworCWludCByZXQgPSAwOworCisJdW5zaWduZWQgaW50IHNzaTFfcGluc1tdID0geworCQlQQzIwX1BGX1NTSTFfRlMsCisJCVBDMjFfUEZfU1NJMV9SWEQsCisJCVBDMjJfUEZfU1NJMV9UWEQsCisJCVBDMjNfUEZfU1NJMV9DTEssCisJfTsKKwl1bnNpZ25lZCBpbnQgc3NpMl9waW5zW10gPSB7CisJCVBDMjRfUEZfU1NJMl9GUywKKwkJUEMyNV9QRl9TU0kyX1JYRCwKKwkJUEMyNl9QRl9TU0kyX1RYRCwKKwkJUEMyN19QRl9TU0kyX0NMSywKKwl9OworCWlmIChzc2lfbnVtID09IDApCisJCXJldCA9IG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMoc3NpMV9waW5zLAorCQkJCUFSUkFZX1NJWkUoc3NpMV9waW5zKSwgIlVTQiBPVEciKTsKKwllbHNlCisJCXJldCA9IG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMoc3NpMl9waW5zLAorCQkJCUFSUkFZX1NJWkUoc3NpMl9waW5zKSwgIlVTQiBPVEciKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlcXVlc3Rpbmcgc3NpICV4IHBpbnNcbiIsIHNzaV9udW0pOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IG14Mjd2aXNfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlteDI3dmlzX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIW14Mjd2aXNfc25kX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShteDI3dmlzX3NuZF9kZXZpY2UsICZteDI3dmlzX3NuZF9kZXZkYXRhKTsKKwlteDI3dmlzX3NuZF9kZXZkYXRhLmRldiA9ICZteDI3dmlzX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG14Mjd2aXNfc25kX2RldmljZSk7CisKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogUGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChteDI3dmlzX3NuZF9kZXZpY2UpOworCX0KKworCS8qIFdNODk3NCB1c2VzIFNTSTEgKEhQQ1IxKSB2aWEgQVVETVVYIHBvcnQgNCBmb3IgYXVkaW8gKFBQQ1IxKSAqLworCWdwaW9fc3NpX2FjdGl2ZSgwKTsKKwlhdWRtdXhfY29ubmVjdF8xXzQoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBteDI3dmlzX2V4aXQodm9pZCkKK3sKKwkvKiBXZSBzaG91bGQgY2FsbCBzb21lICJzc2lfZ3Bpb19pbmFjdGl2ZSgpIiBwcm9wZXJseSAqLworfQorCittb2R1bGVfaW5pdChteDI3dmlzX2luaXQpOworbW9kdWxlX2V4aXQobXgyN3Zpc19leGl0KTsKKworCitNT0RVTEVfQVVUSE9SKCJKYXZpZXIgTWFydGluLCBqYXZpZXIubWFydGluQHZpc3RhLXNpbGljb24uY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIFdNODk3NCBteDI3dmlzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuYyBiL3NvdW5kL3NvYy9pbXgvbXhjLXNzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MDZmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuYwpAQCAtMCwwICsxLDg2OCBAQAorLyoKKyAqIG14Yy1zc2kuYyAgLS0gIFNTSSBkcml2ZXIgZm9yIEZyZWVzY2FsZSBJTVgKKyAqCisgKiBDb3B5cmlnaHQgMjAwNiBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCisgKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKgorICogIEJhc2VkIG9uIG14Yy1hbHNhLW1jMTM3ODMgKEMpIDIwMDYgRnJlZXNjYWxlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRPRE86CisgKiAgIE5lZWQgdG8gcmV3b3JrIFNTSSByZWdpc3RlciBkZWZzIHdoZW4gbmV3IGRlZnMgZ28gaW50byBtYWlubGluZS4KKyAqICAgQWRkIHN1cHBvcnQgZm9yIFRETSBhbmQgRklGTyAxLgorICogICBBZGQgc3VwcG9ydCBmb3IgaS5teDN4IERNQSBpbnRlcmZhY2UuCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLW14MS1teDIuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSAibXhjLXNzaS5oIgorI2luY2x1ZGUgIm14MV9teDItcGNtLmgiCisKKyNkZWZpbmUgU1NJMV9QT1JUCTAKKyNkZWZpbmUgU1NJMl9QT1JUCTEKKworc3RhdGljIGludCBzc2lfYWN0aXZlWzJdID0gezAsIDB9OworCisvKiBETUEgaW5mb3JtYXRpb24gZm9yIG14MV9teDIgcGxhdGZvcm1zICovCitzdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTFfcGNtX3N0ZXJlb19vdXQwID0geworCS5uYW1lCQkJPSAiU1NJMSBQQ00gU3RlcmVvIG91dCAwIiwKKwkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1dSSVRFLAorCS5wZXJfYWRkcmVzcyA9IFNTSTFfQkFTRV9BRERSICsgU1RYMCwKKwkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTFfVFgwLAorCS53YXRlcm1hcmtfbGV2ZWwgPSBUWEZJRk9fV0FURVJNQVJLLAorCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCisJLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAorfTsKKworc3RhdGljIHN0cnVjdCBteDFfbXgyX3BjbV9kbWFfcGFyYW1zIGlteF9zc2kxX3BjbV9zdGVyZW9fb3V0MSA9IHsKKwkubmFtZQkJCT0gIlNTSTEgUENNIFN0ZXJlbyBvdXQgMSIsCisJLnRyYW5zZmVyX3R5cGUgPSBETUFfTU9ERV9XUklURSwKKwkucGVyX2FkZHJlc3MgPSBTU0kxX0JBU0VfQUREUiArIFNUWDEsCisJLmV2ZW50X2lkID0gRE1BX1JFUV9TU0kxX1RYMSwKKwkud2F0ZXJtYXJrX2xldmVsID0gVFhGSUZPX1dBVEVSTUFSSywKKwkucGVyX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAorCS5tZW1fY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMV9wY21fc3RlcmVvX2luMCA9IHsKKwkubmFtZQkJCT0gIlNTSTEgUENNIFN0ZXJlbyBpbiAwIiwKKwkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1JFQUQsCisJLnBlcl9hZGRyZXNzID0gU1NJMV9CQVNFX0FERFIgKyBTUlgwLAorCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMV9SWDAsCisJLndhdGVybWFya19sZXZlbCA9IFJYRklGT19XQVRFUk1BUkssCisJLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKKwkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCit9OworCitzdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTFfcGNtX3N0ZXJlb19pbjEgPSB7CisJLm5hbWUJCQk9ICJTU0kxIFBDTSBTdGVyZW8gaW4gMSIsCisJLnRyYW5zZmVyX3R5cGUgPSBETUFfTU9ERV9SRUFELAorCS5wZXJfYWRkcmVzcyA9IFNTSTFfQkFTRV9BRERSICsgU1JYMSwKKwkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTFfUlgxLAorCS53YXRlcm1hcmtfbGV2ZWwgPSBSWEZJRk9fV0FURVJNQVJLLAorCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCisJLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAorfTsKKworc3RhdGljIHN0cnVjdCBteDFfbXgyX3BjbV9kbWFfcGFyYW1zIGlteF9zc2kyX3BjbV9zdGVyZW9fb3V0MCA9IHsKKwkubmFtZQkJCT0gIlNTSTIgUENNIFN0ZXJlbyBvdXQgMCIsCisJLnRyYW5zZmVyX3R5cGUgPSBETUFfTU9ERV9XUklURSwKKwkucGVyX2FkZHJlc3MgPSBTU0kyX0JBU0VfQUREUiArIFNUWDAsCisJLmV2ZW50X2lkID0gRE1BX1JFUV9TU0kyX1RYMCwKKwkud2F0ZXJtYXJrX2xldmVsID0gVFhGSUZPX1dBVEVSTUFSSywKKwkucGVyX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAorCS5tZW1fY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMl9wY21fc3RlcmVvX291dDEgPSB7CisJLm5hbWUJCQk9ICJTU0kyIFBDTSBTdGVyZW8gb3V0IDEiLAorCS50cmFuc2Zlcl90eXBlID0gRE1BX01PREVfV1JJVEUsCisJLnBlcl9hZGRyZXNzID0gU1NJMl9CQVNFX0FERFIgKyBTVFgxLAorCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMl9UWDEsCisJLndhdGVybWFya19sZXZlbCA9IFRYRklGT19XQVRFUk1BUkssCisJLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKKwkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCit9OworCitzdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTJfcGNtX3N0ZXJlb19pbjAgPSB7CisJLm5hbWUJCQk9ICJTU0kyIFBDTSBTdGVyZW8gaW4gMCIsCisJLnRyYW5zZmVyX3R5cGUgPSBETUFfTU9ERV9SRUFELAorCS5wZXJfYWRkcmVzcyA9IFNTSTJfQkFTRV9BRERSICsgU1JYMCwKKwkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTJfUlgwLAorCS53YXRlcm1hcmtfbGV2ZWwgPSBSWEZJRk9fV0FURVJNQVJLLAorCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCisJLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAorfTsKKworc3RhdGljIHN0cnVjdCBteDFfbXgyX3BjbV9kbWFfcGFyYW1zIGlteF9zc2kyX3BjbV9zdGVyZW9faW4xID0geworCS5uYW1lCQkJPSAiU1NJMiBQQ00gU3RlcmVvIGluIDEiLAorCS50cmFuc2Zlcl90eXBlID0gRE1BX01PREVfUkVBRCwKKwkucGVyX2FkZHJlc3MgPSBTU0kyX0JBU0VfQUREUiArIFNSWDEsCisJLmV2ZW50X2lkID0gRE1BX1JFUV9TU0kyX1JYMSwKKwkud2F0ZXJtYXJrX2xldmVsID0gUlhGSUZPX1dBVEVSTUFSSywKKwkucGVyX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAorCS5tZW1fY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpzc2lfY2xrMCwgKnNzaV9jbGsxOworCitpbnQgZ2V0X3NzaV9jbGsoaW50IHNzaSwgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN3aXRjaCAoc3NpKSB7CisJY2FzZSAwOgorCQlzc2lfY2xrMCA9IGNsa19nZXQoZGV2LCAic3NpMSIpOworCQlpZiAoSVNfRVJSKHNzaV9jbGswKSkKKwkJCXJldHVybiBQVFJfRVJSKHNzaV9jbGswKTsKKwkJcmV0dXJuIDA7CisJY2FzZSAxOgorCQlzc2lfY2xrMSA9IGNsa19nZXQoZGV2LCAic3NpMiIpOworCQlpZiAoSVNfRVJSKHNzaV9jbGsxKSkKKwkJCXJldHVybiBQVFJfRVJSKHNzaV9jbGsxKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorRVhQT1JUX1NZTUJPTChnZXRfc3NpX2Nsayk7CisKK3ZvaWQgcHV0X3NzaV9jbGsoaW50IHNzaSkKK3sKKwlzd2l0Y2ggKHNzaSkgeworCWNhc2UgMDoKKwkJY2xrX3B1dChzc2lfY2xrMCk7CisJCXNzaV9jbGswID0gTlVMTDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQljbGtfcHV0KHNzaV9jbGsxKTsKKwkJc3NpX2NsazEgPSBOVUxMOworCQlicmVhazsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHB1dF9zc2lfY2xrKTsKKworLyoKKyAqIFNTSSBzeXN0ZW0gY2xvY2sgY29uZmlndXJhdGlvbi4KKyAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHBvcnQgaXMgaW5hY3RpdmUgKGkuZS4gU1NJRU4gPSAwKS4KKyAqLworc3RhdGljIGludCBpbXhfc3NpX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwlpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwl1MzIgc2NyOworCisJaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKKwkJc2NyID0gU1NJMV9TQ1I7CisJCXByX2RlYnVnKCIlczogU0NSIGZvciBTU0kxIGlzICV4XG4iLCBfX2Z1bmNfXywgc2NyKTsKKwl9IGVsc2UgeworCQlzY3IgPSBTU0kyX1NDUjsKKwkJcHJfZGVidWcoIiVzOiBTQ1IgZm9yIFNTSTIgaXMgJXhcbiIsIF9fZnVuY19fLCBzY3IpOworCX0KKworCWlmIChzY3IgJiBTU0lfU0NSX1NTSUVOKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgc3NpIGFscmVhZHkgZW5hYmxlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoY2xrX2lkKSB7CisJY2FzZSBJTVhfU1NQX1NZU19DTEs6CisJCWlmIChkaXIgPT0gU05EX1NPQ19DTE9DS19PVVQpIHsKKwkJCXNjciB8PSBTU0lfU0NSX1NZU19DTEtfRU47CisJCQlwcl9kZWJ1ZygiJXM6IGNsayBvZiBpcyBvdXRwdXRcbiIsIF9fZnVuY19fKTsKKwkJfSBlbHNlIHsKKwkJCXNjciAmPSB+U1NJX1NDUl9TWVNfQ0xLX0VOOworCQkJcHJfZGVidWcoIiVzOiBjbGsgb2YgaXMgaW5wdXRcbiIsIF9fZnVuY19fKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgeworCQlwcl9kZWJ1ZygiJXM6IHdyaXRlYmFjayBvZiBTU0kxX1NDUlxuIiwgX19mdW5jX18pOworCQlTU0kxX1NDUiA9IHNjcjsKKwl9IGVsc2UgeworCQlwcl9kZWJ1ZygiJXM6IHdyaXRlYmFjayBvZiBTU0kyX1NDUlxuIiwgX19mdW5jX18pOworCQlTU0kyX1NDUiA9IHNjcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNTSSBDbG9jayBkaXZpZGVycworICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgorICovCitzdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV9jbGtkaXYoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAorCWludCBkaXZfaWQsIGludCBkaXYpCit7CisJdTMyIHN0Y2NyLCBzcmNjcjsKKworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOworCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7CisJCWlmIChTU0kxX1NDUiAmIFNTSV9TQ1JfU1NJRU4pCisJCQlyZXR1cm4gMDsKKwkJc3JjY3IgPSBTU0kxX1NUQ0NSOworCQlzdGNjciA9IFNTSTFfU1RDQ1I7CisJfSBlbHNlIHsKKwkJaWYgKFNTSTJfU0NSICYgU1NJX1NDUl9TU0lFTikKKwkJCXJldHVybiAwOworCQlzcmNjciA9IFNTSTJfU1RDQ1I7CisJCXN0Y2NyID0gU1NJMl9TVENDUjsKKwl9CisKKwlzd2l0Y2ggKGRpdl9pZCkgeworCWNhc2UgSU1YX1NTSV9UWF9ESVZfMjoKKwkJc3RjY3IgJj0gflNTSV9TVENDUl9ESVYyOworCQlzdGNjciB8PSBkaXY7CisJCWJyZWFrOworCWNhc2UgSU1YX1NTSV9UWF9ESVZfUFNSOgorCQlzdGNjciAmPSB+U1NJX1NUQ0NSX1BTUjsKKwkJc3RjY3IgfD0gZGl2OworCQlicmVhazsKKwljYXNlIElNWF9TU0lfVFhfRElWX1BNOgorCQlzdGNjciAmPSB+MHhmZjsKKwkJc3RjY3IgfD0gU1NJX1NUQ0NSX1BNKGRpdik7CisJCWJyZWFrOworCWNhc2UgSU1YX1NTSV9SWF9ESVZfMjoKKwkJc3RjY3IgJj0gflNTSV9TVENDUl9ESVYyOworCQlzdGNjciB8PSBkaXY7CisJCWJyZWFrOworCWNhc2UgSU1YX1NTSV9SWF9ESVZfUFNSOgorCQlzdGNjciAmPSB+U1NJX1NUQ0NSX1BTUjsKKwkJc3RjY3IgfD0gZGl2OworCQlicmVhazsKKwljYXNlIElNWF9TU0lfUlhfRElWX1BNOgorCQlzdGNjciAmPSB+MHhmZjsKKwkJc3RjY3IgfD0gU1NJX1NUQ0NSX1BNKGRpdik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7CisJCVNTSTFfU1RDQ1IgPSBzdGNjcjsKKwkJU1NJMV9TUkNDUiA9IHNyY2NyOworCX0gZWxzZSB7CisJCVNTSTJfU1RDQ1IgPSBzdGNjcjsKKwkJU1NJMl9TUkNDUiA9IHNyY2NyOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNTSSBOZXR3b3JrIE1vZGUgb3IgVERNIHNsb3RzIGNvbmZpZ3VyYXRpb24uCisgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCkuCisgKi8KK3N0YXRpYyBpbnQgaW14X3NzaV9zZXRfZGFpX3RkbV9zbG90KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwl1bnNpZ25lZCBpbnQgbWFzaywgaW50IHNsb3RzKQoreworCXUzMiBzdG1zaywgc3Jtc2ssIHN0Y2NyOworCisJaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKKwkJaWYgKFNTSTFfU0NSICYgU1NJX1NDUl9TU0lFTikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCXN0Y2NyID0gU1NJMV9TVENDUjsKKwl9IGVsc2UgeworCQlpZiAoU1NJMl9TQ1IgJiBTU0lfU0NSX1NTSUVOKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nIHNzaSBhbHJlYWR5IGVuYWJsZWRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc3RjY3IgPSBTU0kyX1NUQ0NSOworCX0KKworCXN0bXNrID0gc3Jtc2sgPSBtYXNrOworCXN0Y2NyICY9IH5TU0lfU1RDQ1JfRENfTUFTSzsKKwlzdGNjciB8PSBTU0lfU1RDQ1JfREMoc2xvdHMgLSAxKTsKKworCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7CisJCVNTSTFfU1RNU0sgPSBzdG1zazsKKwkJU1NJMV9TUk1TSyA9IHNybXNrOworCQlTU0kxX1NSQ0NSID0gU1NJMV9TVENDUiA9IHN0Y2NyOworCX0gZWxzZSB7CisJCVNTSTJfU1RNU0sgPSBzdG1zazsKKwkJU1NJMl9TUk1TSyA9IHNybXNrOworCQlTU0kyX1NSQ0NSID0gU1NJMl9TVENDUiA9IHN0Y2NyOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogU1NJIERBSSBmb3JtYXQgY29uZmlndXJhdGlvbi4KKyAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHBvcnQgaXMgaW5hY3RpdmUgKGkuZS4gU1NJRU4gPSAwKS4KKyAqIE5vdGU6IFdlIGRvbid0IHVzZSB0aGUgSTJTIG1vZGVzIGJ1dCBpbnN0ZWFkIG1hbnVhbGx5IGNvbmZpZ3VyZSB0aGUKKyAqIFNTSSBmb3IgSTJTLgorICovCitzdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAorCQl1bnNpZ25lZCBpbnQgZm10KQoreworCXUzMiBzdGNyID0gMCwgc3JjciA9IDAsIHNjcjsKKworCS8qCisJICogVGhpcyBpcyBkb25lIHRvIGF2b2lkIHRoaXMgZnVuY3Rpb24gdG8gbW9kaWZ5CisJICogcHJldmlvdXMgc2V0IHZhbHVlcyBpbiBzdGNyCisJICovCisJc3RjciA9IFNTSTFfU1RDUjsKKworCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKQorCQlzY3IgPSBTU0kxX1NDUiAmIH4oU1NJX1NDUl9TWU4gfCBTU0lfU0NSX05FVCk7CisJZWxzZQorCQlzY3IgPSBTU0kyX1NDUiAmIH4oU1NJX1NDUl9TWU4gfCBTU0lfU0NSX05FVCk7CisKKwlpZiAoc2NyICYgU1NJX1NDUl9TU0lFTikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nIHNzaSBhbHJlYWR5IGVuYWJsZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBEQUkgbW9kZSAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJLyogZGF0YSBvbiByaXNpbmcgZWRnZSBvZiBiY2xrLCBmcmFtZSBsb3cgMWNsayBiZWZvcmUgZGF0YSAqLworCQlzdGNyIHw9IFNTSV9TVENSX1RGU0kgfCBTU0lfU1RDUl9URUZTIHwgU1NJX1NUQ1JfVFhCSVQwOworCQlzcmNyIHw9IFNTSV9TUkNSX1JGU0kgfCBTU0lfU1JDUl9SRUZTIHwgU1NJX1NSQ1JfUlhCSVQwOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJLyogZGF0YSBvbiByaXNpbmcgZWRnZSBvZiBiY2xrLCBmcmFtZSBoaWdoIHdpdGggZGF0YSAqLworCQlzdGNyIHw9IFNTSV9TVENSX1RYQklUMDsKKwkJc3JjciB8PSBTU0lfU1JDUl9SWEJJVDA7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0I6CisJCS8qIGRhdGEgb24gcmlzaW5nIGVkZ2Ugb2YgYmNsaywgZnJhbWUgaGlnaCB3aXRoIGRhdGEgKi8KKwkJc3RjciB8PSBTU0lfU1RDUl9URlNMOworCQlzcmNyIHw9IFNTSV9TUkNSX1JGU0w7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCS8qIGRhdGEgb24gcmlzaW5nIGVkZ2Ugb2YgYmNsaywgZnJhbWUgaGlnaCAxY2xrIGJlZm9yZSBkYXRhICovCisJCXN0Y3IgfD0gU1NJX1NUQ1JfVEZTTCB8IFNTSV9TVENSX1RFRlM7CisJCXNyY3IgfD0gU1NJX1NSQ1JfUkZTTCB8IFNTSV9TUkNSX1JFRlM7CisJCWJyZWFrOworCX0KKworCS8qIERBSSBjbG9jayBpbnZlcnNpb24gKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJc3RjciB8PSBTU0lfU1RDUl9URlNJOworCQlzdGNyICY9IH5TU0lfU1RDUl9UU0NLUDsKKwkJc3JjciB8PSBTU0lfU1JDUl9SRlNJOworCQlzcmNyICY9IH5TU0lfU1JDUl9SU0NLUDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJc3RjciAmPSB+KFNTSV9TVENSX1RTQ0tQIHwgU1NJX1NUQ1JfVEZTSSk7CisJCXNyY3IgJj0gfihTU0lfU1JDUl9SU0NLUCB8IFNTSV9TUkNSX1JGU0kpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQlzdGNyIHw9IFNTSV9TVENSX1RGU0kgfCBTU0lfU1RDUl9UU0NLUDsKKwkJc3JjciB8PSBTU0lfU1JDUl9SRlNJIHwgU1NJX1NSQ1JfUlNDS1A7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCXN0Y3IgJj0gflNTSV9TVENSX1RGU0k7CisJCXN0Y3IgfD0gU1NJX1NUQ1JfVFNDS1A7CisJCXNyY3IgJj0gflNTSV9TUkNSX1JGU0k7CisJCXNyY3IgfD0gU1NJX1NSQ1JfUlNDS1A7CisJCWJyZWFrOworCX0KKworCS8qIERBSSBjbG9jayBtYXN0ZXIgbWFza3MgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlzdGNyIHw9IFNTSV9TVENSX1RGRElSIHwgU1NJX1NUQ1JfVFhESVI7CisJCXNyY3IgfD0gU1NJX1NSQ1JfUkZESVIgfCBTU0lfU1JDUl9SWERJUjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOgorCQlzdGNyIHw9IFNTSV9TVENSX1RGRElSOworCQlzcmNyIHw9IFNTSV9TUkNSX1JGRElSOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRk06CisJCXN0Y3IgfD0gU1NJX1NUQ1JfVFhESVI7CisJCXNyY3IgfD0gU1NJX1NSQ1JfUlhESVI7CisJCWJyZWFrOworCX0KKworCS8qIHN5bmMgKi8KKwlpZiAoIShmbXQgJiBTTkRfU09DX0RBSUZNVF9BU1lOQykpCisJCXNjciB8PSBTU0lfU0NSX1NZTjsKKworCS8qIHRkbSAtIG9ubHkgZm9yIHN0ZXJlbyBhdG0gKi8KKwlpZiAoZm10ICYgU05EX1NPQ19EQUlGTVRfVERNKQorCQlzY3IgfD0gU1NJX1NDUl9ORVQ7CisKKwlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgeworCQlTU0kxX1NUQ1IgPSBzdGNyOworCQlTU0kxX1NSQ1IgPSBzcmNyOworCQlTU0kxX1NDUiA9IHNjcjsKKwl9IGVsc2UgeworCQlTU0kyX1NUQ1IgPSBzdGNyOworCQlTU0kyX1NSQ1IgPSBzcmNyOworCQlTU0kyX1NDUiA9IHNjcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbXhfc3NpX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQkvKiBzZXQgdXAgVFggRE1BIHBhcmFtcyAqLworCQlzd2l0Y2ggKGNwdV9kYWktPmlkKSB7CisJCWNhc2UgSU1YX0RBSV9TU0kwOgorCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTFfcGNtX3N0ZXJlb19vdXQwOworCQkJYnJlYWs7CisJCWNhc2UgSU1YX0RBSV9TU0kxOgorCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTFfcGNtX3N0ZXJlb19vdXQxOworCQkJYnJlYWs7CisJCWNhc2UgSU1YX0RBSV9TU0kyOgorCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTJfcGNtX3N0ZXJlb19vdXQwOworCQkJYnJlYWs7CisJCWNhc2UgSU1YX0RBSV9TU0kzOgorCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTJfcGNtX3N0ZXJlb19vdXQxOworCQl9CisJCXByX2RlYnVnKCIlczogKHBsYXliYWNrKVxuIiwgX19mdW5jX18pOworCX0gZWxzZSB7CisJCS8qIHNldCB1cCBSWCBETUEgcGFyYW1zICovCisJCXN3aXRjaCAoY3B1X2RhaS0+aWQpIHsKKwkJY2FzZSBJTVhfREFJX1NTSTA6CisJCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZpbXhfc3NpMV9wY21fc3RlcmVvX2luMDsKKwkJCWJyZWFrOworCQljYXNlIElNWF9EQUlfU1NJMToKKwkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kxX3BjbV9zdGVyZW9faW4xOworCQkJYnJlYWs7CisJCWNhc2UgSU1YX0RBSV9TU0kyOgorCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTJfcGNtX3N0ZXJlb19pbjA7CisJCQlicmVhazsKKwkJY2FzZSBJTVhfREFJX1NTSTM6CisJCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZpbXhfc3NpMl9wY21fc3RlcmVvX2luMTsKKwkJfQorCQlwcl9kZWJ1ZygiJXM6IChjYXB0dXJlKVxuIiwgX19mdW5jX18pOworCX0KKworCS8qCisJICogd2UgY2FudCByZWFsbHkgY2hhbmdlIGFueSBTU0kgdmFsdWVzIGFmdGVyIFNTSSBpcyBlbmFibGVkCisJICogbmVlZCB0byBmaXggaW4gc29mdHdhcmUgZm9yIG1heCBmbGV4aWJpbGl0eSAtIGxyZworCSAqLworCWlmIChjcHVfZGFpLT5hY3RpdmUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogcmVzZXQgdGhlIFNTSSBwb3J0IC0gU2VjdCA0NS40LjQgKi8KKwlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgeworCisJCWlmICghc3NpX2NsazApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoc3NpX2FjdGl2ZVtTU0kxX1BPUlRdKyspIHsKKwkJCXByX2RlYnVnKCIlczogZXhpdCBiZWZvcmUgcmVzZXRcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogU1NJMSBSZXNldCAqLworCQlTU0kxX1NDUiA9IDA7CisKKwkJU1NJMV9TRkNTUiA9IFNTSV9TRkNTUl9SRldNMShSWEZJRk9fV0FURVJNQVJLKSB8CisJCQlTU0lfU0ZDU1JfUkZXTTAoUlhGSUZPX1dBVEVSTUFSSykgfAorCQkJU1NJX1NGQ1NSX1RGV00xKFRYRklGT19XQVRFUk1BUkspIHwKKwkJCVNTSV9TRkNTUl9URldNMChUWEZJRk9fV0FURVJNQVJLKTsKKwl9IGVsc2UgeworCisJCWlmICghc3NpX2NsazEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoc3NpX2FjdGl2ZVtTU0kyX1BPUlRdKyspIHsKKwkJCXByX2RlYnVnKCIlczogZXhpdCBiZWZvcmUgcmVzZXRcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogU1NJMiBSZXNldCAqLworCQlTU0kyX1NDUiA9IDA7CisKKwkJU1NJMl9TRkNTUiA9IFNTSV9TRkNTUl9SRldNMShSWEZJRk9fV0FURVJNQVJLKSB8CisJCQlTU0lfU0ZDU1JfUkZXTTAoUlhGSUZPX1dBVEVSTUFSSykgfAorCQkJU1NJX1NGQ1NSX1RGV00xKFRYRklGT19XQVRFUk1BUkspIHwKKwkJCVNTSV9TRkNTUl9URldNMChUWEZJRk9fV0FURVJNQVJLKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGlteF9zc2lfaHdfdHhfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwl1MzIgc3RjY3IsIHN0Y3IsIHNpZXI7CisKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7CisJCXN0Y2NyID0gU1NJMV9TVENDUiAmIH5TU0lfU1RDQ1JfV0xfTUFTSzsKKwkJc3RjciA9IFNTSTFfU1RDUjsKKwkJc2llciA9IFNTSTFfU0lFUjsKKwl9IGVsc2UgeworCQlzdGNjciA9IFNTSTJfU1RDQ1IgJiB+U1NJX1NUQ0NSX1dMX01BU0s7CisJCXN0Y3IgPSBTU0kyX1NUQ1I7CisJCXNpZXIgPSBTU0kyX1NJRVI7CisJfQorCisJLyogREFJIGRhdGEgKHdvcmQpIHNpemUgKi8KKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXN0Y2NyIHw9IFNTSV9TVENDUl9XTCgxNik7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQlzdGNjciB8PSBTU0lfU1RDQ1JfV0woMjApOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlzdGNjciB8PSBTU0lfU1RDQ1JfV0woMjQpOworCQlicmVhazsKKwl9CisKKwkvKiBlbmFibGUgaW50ZXJydXB0cyAqLworCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKQorCQlzdGNyIHw9IFNTSV9TVENSX1RGRU4wOworCWVsc2UKKwkJc3RjciB8PSBTU0lfU1RDUl9URkVOMTsKKwlzaWVyIHw9IFNTSV9TSUVSX1RETUFFOworCisJaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKKwkJU1NJMV9TVENSID0gc3RjcjsKKwkJU1NJMV9TVENDUiA9IHN0Y2NyOworCQlTU0kxX1NJRVIgPSBzaWVyOworCX0gZWxzZSB7CisJCVNTSTJfU1RDUiA9IHN0Y3I7CisJCVNTSTJfU1RDQ1IgPSBzdGNjcjsKKwkJU1NJMl9TSUVSID0gc2llcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGlteF9zc2lfaHdfcnhfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwl1MzIgc3JjY3IsIHNyY3IsIHNpZXI7CisKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7CisJCXNyY2NyID0gU1NJMV9TUkNDUiAmIH5TU0lfU1JDQ1JfV0xfTUFTSzsKKwkJc3JjciA9IFNTSTFfU1JDUjsKKwkJc2llciA9IFNTSTFfU0lFUjsKKwl9IGVsc2UgeworCQlzcmNjciA9IFNTSTJfU1JDQ1IgJiB+U1NJX1NSQ0NSX1dMX01BU0s7CisJCXNyY3IgPSBTU0kyX1NSQ1I7CisJCXNpZXIgPSBTU0kyX1NJRVI7CisJfQorCisJLyogREFJIGRhdGEgKHdvcmQpIHNpemUgKi8KKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXNyY2NyIHw9IFNTSV9TUkNDUl9XTCgxNik7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQlzcmNjciB8PSBTU0lfU1JDQ1JfV0woMjApOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlzcmNjciB8PSBTU0lfU1JDQ1JfV0woMjQpOworCQlicmVhazsKKwl9CisKKwkvKiBlbmFibGUgaW50ZXJydXB0cyAqLworCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKQorCQlzcmNyIHw9IFNTSV9TUkNSX1JGRU4wOworCWVsc2UKKwkJc3JjciB8PSBTU0lfU1JDUl9SRkVOMTsKKwlzaWVyIHw9IFNTSV9TSUVSX1JETUFFOworCisJaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKKwkJU1NJMV9TUkNSID0gc3JjcjsKKwkJU1NJMV9TUkNDUiA9IHNyY2NyOworCQlTU0kxX1NJRVIgPSBzaWVyOworCX0gZWxzZSB7CisJCVNTSTJfU1JDUiA9IHNyY3I7CisJCVNTSTJfU1JDQ1IgPSBzcmNjcjsKKwkJU1NJMl9TSUVSID0gc2llcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHBvcnQgaXMgaW5hY3RpdmUgKGkuZS4gU1NJRU4gPSAwKSwKKyAqIGFsdGhvdWdoIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgYnkgdXBwZXIgbGF5ZXJzLgorICovCitpbnQgaW14X3NzaV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCisJaW50IHJldDsKKworCS8qIGNhbnQgY2hhbmdlIGFueSBwYXJhbWV0ZXJzIHdoZW4gU1NJIGlzIHJ1bm5pbmcgKi8KKwlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgeworCQlpZiAoU1NJMV9TQ1IgJiBTU0lfU0NSX1NTSUVOKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nIHNzaSBhbHJlYWR5IGVuYWJsZWRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoU1NJMl9TQ1IgJiBTU0lfU0NSX1NTSUVOKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nIHNzaSBhbHJlYWR5IGVuYWJsZWRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKgorCSAqIENvbmZpZ3VyZSBib3RoIHR4IGFuZCByeCBwYXJhbXMgd2l0aCB0aGUgc2FtZSBzZXR0aW5ncy4gVGhpcyBpcworCSAqIHJlYWxseSBhIGhhcndhcmUgcmVzdHJpY3Rpb24gYmVjYXVzZSBTU0kgbXVzdCBiZSBkaXNhYmxlZCB1bnRpbAorCSAqIHdlIGNhbiBjaGFuZ2UgdGhvc2UgdmFsdWVzLiBJZiB0aGVyZSBpcyBhbiBhY3RpdmUgYXVkaW8gc3RyZWFtIGluCisJICogb25lIGRpcmVjdGlvbiwgZW5hYmxpbmcgdGhlIG90aGVyIGRpcmVjdGlvbiB3aXRoIGRpZmZlcmVudAorCSAqIHNldHRpbmdzIHdvdWxkIG1lYW4gZGlzdHVyYmluZyB0aGUgcnVubmluZyBvbmUuCisJICovCisJcmV0ID0gaW14X3NzaV9od190eF9wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiBpbXhfc3NpX2h3X3J4X3BhcmFtcyhzdWJzdHJlYW0sIHBhcmFtcyk7Cit9CisKK2ludCBpbXhfc3NpX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJaW50IHJldDsKKworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOworCisJLyogRW5hYmxlIGNsa3MgaGVyZSB0byBmb2xsb3cgU1NJIHJlY29tbWVuZGVkIGluaXQgc2VxdWVuY2UgKi8KKwlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgeworCQlyZXQgPSBjbGtfZW5hYmxlKHNzaV9jbGswKTsKKwkJaWYgKHJldCA8IDApCisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBlbmFibGUgc3NpX2NsazBcbiIpOworCX0gZWxzZSB7CisJCXJldCA9IGNsa19lbmFibGUoc3NpX2NsazEpOworCQlpZiAocmV0IDwgMCkKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGVuYWJsZSBzc2lfY2xrMVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW14X3NzaV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAorCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCXUzMiBzY3I7CisKKwlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikKKwkJc2NyID0gU1NJMV9TQ1I7CisJZWxzZQorCQlzY3IgPSBTU0kyX1NDUjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQkJc2NyIHw9IFNTSV9TQ1JfVEUgfCBTU0lfU0NSX1NTSUVOOworCQllbHNlCisJCQlzY3IgfD0gU1NJX1NDUl9SRSB8IFNTSV9TQ1JfU1NJRU47CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXNjciAmPSB+U1NJX1NDUl9URTsKKwkJZWxzZQorCQkJc2NyICY9IH5TU0lfU0NSX1JFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikKKwkJU1NJMV9TQ1IgPSBzY3I7CisJZWxzZQorCQlTU0kyX1NDUiA9IHNjcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbXhfc3NpX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCisJLyogc2h1dGRvd24gU1NJIGlmIG5laXRoZXIgVHggb3IgUnggaXMgYWN0aXZlICovCisJaWYgKCFjcHVfZGFpLT5hY3RpdmUpIHsKKworCQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8CisJCQljcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKKworCQkJaWYgKC0tc3NpX2FjdGl2ZVtTU0kxX1BPUlRdID4gMSkKKwkJCQlyZXR1cm47CisKKwkJCVNTSTFfU0NSID0gMDsKKwkJCWNsa19kaXNhYmxlKHNzaV9jbGswKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgtLXNzaV9hY3RpdmVbU1NJMl9QT1JUXSkKKwkJCQlyZXR1cm47CisJCQlTU0kyX1NDUiA9IDA7CisJCQljbGtfZGlzYWJsZShzc2lfY2xrMSk7CisJCX0KKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaW14X3NzaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbXhfc3NpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBpbXhfc3NpX3N1c3BlbmQJTlVMTAorI2RlZmluZSBpbXhfc3NpX3Jlc3VtZQlOVUxMCisjZW5kaWYKKworI2RlZmluZSBJTVhfU1NJX1JBVEVTIFwKKwkoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzExMDI1IHwgXAorCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBcCisJU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKKwlTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgXAorCVNORFJWX1BDTV9SQVRFXzk2MDAwKQorCisjZGVmaW5lIElNWF9TU0lfQklUUyBcCisJKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHwgXAorCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBpbXhfc3NpX3BjbV9kYWlfb3BzID0geworCS5zdGFydHVwID0gaW14X3NzaV9zdGFydHVwLAorCS5zaHV0ZG93biA9IGlteF9zc2lfc2h1dGRvd24sCisJLnRyaWdnZXIgPSBpbXhfc3NpX3RyaWdnZXIsCisJLnByZXBhcmUgPSBpbXhfc3NpX3ByZXBhcmUsCisJLmh3X3BhcmFtcyA9IGlteF9zc2lfaHdfcGFyYW1zLAorCS5zZXRfc3lzY2xrID0gaW14X3NzaV9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2Nsa2RpdiA9IGlteF9zc2lfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9mbXQgPSBpbXhfc3NpX3NldF9kYWlfZm10LAorCS5zZXRfdGRtX3Nsb3QgPSBpbXhfc3NpX3NldF9kYWlfdGRtX3Nsb3QsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgaW14X3NzaV9wY21fZGFpW10gPSB7Cit7CisJLm5hbWUgPSAiaW14LWkycy0xLTAiLAorCS5pZCA9IElNWF9EQUlfU1NJMCwKKwkuc3VzcGVuZCA9IGlteF9zc2lfc3VzcGVuZCwKKwkucmVzdW1lID0gaW14X3NzaV9yZXN1bWUsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAorCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCisJLmNhcHR1cmUgPSB7CisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLmZvcm1hdHMgPSBJTVhfU1NJX0JJVFMsCisJCS5yYXRlcyA9IElNWF9TU0lfUkFURVMsfSwKKwkub3BzID0gJmlteF9zc2lfcGNtX2RhaV9vcHMsCit9LAoreworCS5uYW1lID0gImlteC1pMnMtMi0wIiwKKwkuaWQgPSBJTVhfREFJX1NTSTEsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAorCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCisJLmNhcHR1cmUgPSB7CisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLmZvcm1hdHMgPSBJTVhfU1NJX0JJVFMsCisJCS5yYXRlcyA9IElNWF9TU0lfUkFURVMsfSwKKwkub3BzID0gJmlteF9zc2lfcGNtX2RhaV9vcHMsCit9LAoreworCS5uYW1lID0gImlteC1pMnMtMS0xIiwKKwkuaWQgPSBJTVhfREFJX1NTSTIsCisJLnN1c3BlbmQgPSBpbXhfc3NpX3N1c3BlbmQsCisJLnJlc3VtZSA9IGlteF9zc2lfcmVzdW1lLAorCS5wbGF5YmFjayA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKKwkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAorCS5jYXB0dXJlID0geworCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAorCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCisJLm9wcyA9ICZpbXhfc3NpX3BjbV9kYWlfb3BzLAorfSwKK3sKKwkubmFtZSA9ICJpbXgtaTJzLTItMSIsCisJLmlkID0gSU1YX0RBSV9TU0kzLAorCS5wbGF5YmFjayA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKKwkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAorCS5jYXB0dXJlID0geworCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAorCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCisJLm9wcyA9ICZpbXhfc3NpX3BjbV9kYWlfb3BzLAorfSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpbXhfc3NpX3BjbV9kYWkpOworCitzdGF0aWMgaW50IF9faW5pdCBpbXhfc3NpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWlzKGlteF9zc2lfcGNtX2RhaSwKKwkJCQlBUlJBWV9TSVpFKGlteF9zc2lfcGNtX2RhaSkpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaW14X3NzaV9leGl0KHZvaWQpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoaW14X3NzaV9wY21fZGFpLAorCQkJCUFSUkFZX1NJWkUoaW14X3NzaV9wY21fZGFpKSk7Cit9CisKK21vZHVsZV9pbml0KGlteF9zc2lfaW5pdCk7Cittb2R1bGVfZXhpdChpbXhfc3NpX2V4aXQpOworTU9EVUxFX0FVVEhPUigiTGlhbSBHaXJkd29vZCwgbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oImkuTVggQVNvQyBJMlMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuaCBiL3NvdW5kL3NvYy9pbXgvbXhjLXNzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYmJkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuaApAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfSU1YX1NTSV9ICisjZGVmaW5lIF9JTVhfU1NJX0gKKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworLyogU1NJIHJlZ3MgZGVmaW5pdGlvbiAtIE1PVkUgdG8gL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC8gd2hlbiBzdGFibGUgKi8KKyNkZWZpbmUgU1NJMV9JT19CQVNFX0FERFIJSU9fQUREUkVTUyhTU0kxX0JBU0VfQUREUikKKyNkZWZpbmUgU1NJMl9JT19CQVNFX0FERFIJSU9fQUREUkVTUyhTU0kyX0JBU0VfQUREUikKKworI2RlZmluZSBTVFgwICAgMHgwMAorI2RlZmluZSBTVFgxICAgMHgwNAorI2RlZmluZSBTUlgwICAgMHgwOAorI2RlZmluZSBTUlgxICAgMHgwYworI2RlZmluZSBTQ1IgICAgMHgxMAorI2RlZmluZSBTSVNSICAgMHgxNAorI2RlZmluZSBTSUVSICAgMHgxOAorI2RlZmluZSBTVENSICAgMHgxYworI2RlZmluZSBTUkNSICAgMHgyMAorI2RlZmluZSBTVENDUiAgMHgyNAorI2RlZmluZSBTUkNDUiAgMHgyOAorI2RlZmluZSBTRkNTUiAgMHgyYworI2RlZmluZSBTVFIgICAgMHgzMAorI2RlZmluZSBTT1IgICAgMHgzNAorI2RlZmluZSBTQUNOVCAgMHgzOAorI2RlZmluZSBTQUNBREQgMHgzYworI2RlZmluZSBTQUNEQVQgMHg0MAorI2RlZmluZSBTQVRBRyAgMHg0NAorI2RlZmluZSBTVE1TSyAgMHg0OAorI2RlZmluZSBTUk1TSyAgMHg0YworCisjZGVmaW5lIFNTSTFfU1RYMAkoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU1RYMCkpKQorI2RlZmluZSBTU0kxX1NUWDEgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU1RYMSkpKQorI2RlZmluZSBTU0kxX1NSWDAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU1JYMCkpKQorI2RlZmluZSBTU0kxX1NSWDEgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU1JYMSkpKQorI2RlZmluZSBTU0kxX1NDUiAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU0NSKSkpCisjZGVmaW5lIFNTSTFfU0lTUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTSVNSKSkpCisjZGVmaW5lIFNTSTFfU0lFUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTSUVSKSkpCisjZGVmaW5lIFNTSTFfU1RDUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTVENSKSkpCisjZGVmaW5lIFNTSTFfU1JDUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTUkNSKSkpCisjZGVmaW5lIFNTSTFfU1RDQ1IgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTVENDUikpKQorI2RlZmluZSBTU0kxX1NSQ0NSICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU1JDQ1IpKSkKKyNkZWZpbmUgU1NJMV9TRkNTUiAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNGQ1NSKSkpCisjZGVmaW5lIFNTSTFfU1RSICAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTVFIpKSkKKyNkZWZpbmUgU1NJMV9TT1IgICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNPUikpKQorI2RlZmluZSBTU0kxX1NBQ05UICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU0FDTlQpKSkKKyNkZWZpbmUgU1NJMV9TQUNBREQgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNBQ0FERCkpKQorI2RlZmluZSBTU0kxX1NBQ0RBVCAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU0FDREFUKSkpCisjZGVmaW5lIFNTSTFfU0FUQUcgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTQVRBRykpKQorI2RlZmluZSBTU0kxX1NUTVNLICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU1RNU0spKSkKKyNkZWZpbmUgU1NJMV9TUk1TSyAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNSTVNLKSkpCisKKworI2RlZmluZSBTU0kyX1NUWDAJKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNUWDApKSkKKyNkZWZpbmUgU1NJMl9TVFgxICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNUWDEpKSkKKyNkZWZpbmUgU1NJMl9TUlgwICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNSWDApKSkKKyNkZWZpbmUgU1NJMl9TUlgxICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNSWDEpKSkKKyNkZWZpbmUgU1NJMl9TQ1IgICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNDUikpKQorI2RlZmluZSBTU0kyX1NJU1IgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0lTUikpKQorI2RlZmluZSBTU0kyX1NJRVIgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0lFUikpKQorI2RlZmluZSBTU0kyX1NUQ1IgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1RDUikpKQorI2RlZmluZSBTU0kyX1NSQ1IgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1JDUikpKQorI2RlZmluZSBTU0kyX1NUQ0NSICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1RDQ1IpKSkKKyNkZWZpbmUgU1NJMl9TUkNDUiAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNSQ0NSKSkpCisjZGVmaW5lIFNTSTJfU0ZDU1IgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTRkNTUikpKQorI2RlZmluZSBTU0kyX1NUUiAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1RSKSkpCisjZGVmaW5lIFNTSTJfU09SICAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTT1IpKSkKKyNkZWZpbmUgU1NJMl9TQUNOVCAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNBQ05UKSkpCisjZGVmaW5lIFNTSTJfU0FDQUREICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTQUNBREQpKSkKKyNkZWZpbmUgU1NJMl9TQUNEQVQgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNBQ0RBVCkpKQorI2RlZmluZSBTU0kyX1NBVEFHICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0FUQUcpKSkKKyNkZWZpbmUgU1NJMl9TVE1TSyAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNUTVNLKSkpCisjZGVmaW5lIFNTSTJfU1JNU0sgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTUk1TSykpKQorCisjZGVmaW5lIFNTSV9TQ1JfQ0xLX0lTVCAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgU1NJX1NDUl9UQ0hfRU4gICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBTU0lfU0NSX1NZU19DTEtfRU4gICAgICgxIDw8IDcpCisjZGVmaW5lIFNTSV9TQ1JfSTJTX01PREVfTk9STSAgKDAgPDwgNSkKKyNkZWZpbmUgU1NJX1NDUl9JMlNfTU9ERV9NU1RSICAoMSA8PCA1KQorI2RlZmluZSBTU0lfU0NSX0kyU19NT0RFX1NMQVZFICgyIDw8IDUpCisjZGVmaW5lIFNTSV9TQ1JfU1lOICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgU1NJX1NDUl9ORVQgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBTU0lfU0NSX1JFICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIFNTSV9TQ1JfVEUgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgU1NJX1NDUl9TU0lFTiAgICAgICAgICAoMSA8PCAwKQorCisjZGVmaW5lIFNTSV9TSVNSX0NNREFVICAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIFNTSV9TSVNSX0NNRERVICAgICAgICAgKDEgPDwgMTcpCisjZGVmaW5lIFNTSV9TSVNSX1JYVCAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIFNTSV9TSVNSX1JEUjEgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIFNTSV9TSVNSX1JEUjAgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIFNTSV9TSVNSX1RERTEgICAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIFNTSV9TSVNSX1RERTAgICAgICAgICAgKDEgPDwgMTIpCisjZGVmaW5lIFNTSV9TSVNSX1JPRTEgICAgICAgICAgKDEgPDwgMTEpCisjZGVmaW5lIFNTSV9TSVNSX1JPRTAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIFNTSV9TSVNSX1RVRTEgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgU1NJX1NJU1JfVFVFMCAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBTU0lfU0lTUl9URlMgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIFNTSV9TSVNSX1JGUyAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgU1NJX1NJU1JfVExTICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBTU0lfU0lTUl9STFMgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIFNTSV9TSVNSX1JGRjEgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgU1NJX1NJU1JfUkZGMCAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBTU0lfU0lTUl9URkUxICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIFNTSV9TSVNSX1RGRTAgICAgICAgICAgKDEgPDwgMCkKKworI2RlZmluZSBTU0lfU0lFUl9SRE1BRSAgICAgICAgICgxIDw8IDIyKQorI2RlZmluZSBTU0lfU0lFUl9SSUUgICAgICAgICAgICgxIDw8IDIxKQorI2RlZmluZSBTU0lfU0lFUl9URE1BRSAgICAgICAgICgxIDw8IDIwKQorI2RlZmluZSBTU0lfU0lFUl9USUUgICAgICAgICAgICgxIDw8IDE5KQorI2RlZmluZSBTU0lfU0lFUl9DTURBVV9FTiAgICAgICgxIDw8IDE4KQorI2RlZmluZSBTU0lfU0lFUl9DTUREVV9FTiAgICAgICgxIDw8IDE3KQorI2RlZmluZSBTU0lfU0lFUl9SWFRfRU4gICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBTU0lfU0lFUl9SRFIxX0VOICAgICAgICgxIDw8IDE1KQorI2RlZmluZSBTU0lfU0lFUl9SRFIwX0VOICAgICAgICgxIDw8IDE0KQorI2RlZmluZSBTU0lfU0lFUl9UREUxX0VOICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBTU0lfU0lFUl9UREUwX0VOICAgICAgICgxIDw8IDEyKQorI2RlZmluZSBTU0lfU0lFUl9ST0UxX0VOICAgICAgICgxIDw8IDExKQorI2RlZmluZSBTU0lfU0lFUl9ST0UwX0VOICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBTU0lfU0lFUl9UVUUxX0VOICAgICAgICgxIDw8IDkpCisjZGVmaW5lIFNTSV9TSUVSX1RVRTBfRU4gICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgU1NJX1NJRVJfVEZTX0VOICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBTU0lfU0lFUl9SRlNfRU4gICAgICAgICgxIDw8IDYpCisjZGVmaW5lIFNTSV9TSUVSX1RMU19FTiAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgU1NJX1NJRVJfUkxTX0VOICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBTU0lfU0lFUl9SRkYxX0VOICAgICAgICgxIDw8IDMpCisjZGVmaW5lIFNTSV9TSUVSX1JGRjBfRU4gICAgICAgKDEgPDwgMikKKyNkZWZpbmUgU1NJX1NJRVJfVEZFMV9FTiAgICAgICAoMSA8PCAxKQorI2RlZmluZSBTU0lfU0lFUl9URkUwX0VOICAgICAgICgxIDw8IDApCisKKyNkZWZpbmUgU1NJX1NUQ1JfVFhCSVQwICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBTU0lfU1RDUl9URkVOMSAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIFNTSV9TVENSX1RGRU4wICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgU1NJX1NUQ1JfVEZESVIgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBTU0lfU1RDUl9UWERJUiAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIFNTSV9TVENSX1RTSEZEICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgU1NJX1NUQ1JfVFNDS1AgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBTU0lfU1RDUl9URlNJICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIFNTSV9TVENSX1RGU0wgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgU1NJX1NUQ1JfVEVGUyAgICAgICAgICAoMSA8PCAwKQorCisjZGVmaW5lIFNTSV9TUkNSX1JYQklUMCAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgU1NJX1NSQ1JfUkZFTjEgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBTU0lfU1JDUl9SRkVOMCAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIFNTSV9TUkNSX1JGRElSICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgU1NJX1NSQ1JfUlhESVIgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBTU0lfU1JDUl9SU0hGRCAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIFNTSV9TUkNSX1JTQ0tQICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgU1NJX1NSQ1JfUkZTSSAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBTU0lfU1JDUl9SRlNMICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIFNTSV9TUkNSX1JFRlMgICAgICAgICAgKDEgPDwgMCkKKworI2RlZmluZSBTU0lfU1RDQ1JfRElWMiAgICAgICAgICgxIDw8IDE4KQorI2RlZmluZSBTU0lfU1RDQ1JfUFNSICAgICAgICAgICgxIDw8IDE1KQorI2RlZmluZSBTU0lfU1RDQ1JfV0woeCkgICAgICAgICgoKCh4KSAtIDIpID4+IDEpIDw8IDEzKQorI2RlZmluZSBTU0lfU1RDQ1JfREMoeCkgICAgICAgICgoKHgpICYgMHgxZikgPDwgOCkKKyNkZWZpbmUgU1NJX1NUQ0NSX1BNKHgpICAgICAgICAoKCh4KSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIFNTSV9TVENDUl9XTF9NQVNLICAgICAgICAoMHhmIDw8IDEzKQorI2RlZmluZSBTU0lfU1RDQ1JfRENfTUFTSyAgICAgICAgKDB4MWYgPDwgOCkKKyNkZWZpbmUgU1NJX1NUQ0NSX1BNX01BU0sgICAgICAgICgweGZmIDw8IDApCisKKyNkZWZpbmUgU1NJX1NSQ0NSX0RJVjIgICAgICAgICAoMSA8PCAxOCkKKyNkZWZpbmUgU1NJX1NSQ0NSX1BTUiAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgU1NJX1NSQ0NSX1dMKHgpICAgICAgICAoKCgoeCkgLSAyKSA+PiAxKSA8PCAxMykKKyNkZWZpbmUgU1NJX1NSQ0NSX0RDKHgpICAgICAgICAoKCh4KSAmIDB4MWYpIDw8IDgpCisjZGVmaW5lIFNTSV9TUkNDUl9QTSh4KSAgICAgICAgKCgoeCkgJiAweGZmKSA8PCAwKQorI2RlZmluZSBTU0lfU1JDQ1JfV0xfTUFTSyAgICAgICAgKDB4ZiA8PCAxMykKKyNkZWZpbmUgU1NJX1NSQ0NSX0RDX01BU0sgICAgICAgICgweDFmIDw8IDgpCisjZGVmaW5lIFNTSV9TUkNDUl9QTV9NQVNLICAgICAgICAoMHhmZiA8PCAwKQorCisKKyNkZWZpbmUgU1NJX1NGQ1NSX1JGQ05UMSh4KSAgICgoKHgpICYgMHhmKSA8PCAyOCkKKyNkZWZpbmUgU1NJX1NGQ1NSX1RGQ05UMSh4KSAgICgoKHgpICYgMHhmKSA8PCAyNCkKKyNkZWZpbmUgU1NJX1NGQ1NSX1JGV00xKHgpICAgICgoKHgpICYgMHhmKSA8PCAyMCkKKyNkZWZpbmUgU1NJX1NGQ1NSX1RGV00xKHgpICAgICgoKHgpICYgMHhmKSA8PCAxNikKKyNkZWZpbmUgU1NJX1NGQ1NSX1JGQ05UMCh4KSAgICgoKHgpICYgMHhmKSA8PCAxMikKKyNkZWZpbmUgU1NJX1NGQ1NSX1RGQ05UMCh4KSAgICgoKHgpICYgMHhmKSA8PCAgOCkKKyNkZWZpbmUgU1NJX1NGQ1NSX1JGV00wKHgpICAgICgoKHgpICYgMHhmKSA8PCAgNCkKKyNkZWZpbmUgU1NJX1NGQ1NSX1RGV00wKHgpICAgICgoKHgpICYgMHhmKSA8PCAgMCkKKworI2RlZmluZSBTU0lfU1RSX1RFU1QgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIFNTSV9TVFJfUkNLMlRDSyAgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgU1NJX1NUUl9SRlMyVEZTICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBTU0lfU1RSX1JYU1RBVEUoeCkgICAgKCgoeCkgJiAweGYpIDw8IDgpCisjZGVmaW5lIFNTSV9TVFJfVFhEMlJYRCAgICAgICAoMSA8PCAgNykKKyNkZWZpbmUgU1NJX1NUUl9UQ0syUkNLICAgICAgICgxIDw8ICA2KQorI2RlZmluZSBTU0lfU1RSX1RGUzJSRlMgICAgICAgKDEgPDwgIDUpCisjZGVmaW5lIFNTSV9TVFJfVFhTVEFURSh4KSAgICAoKCh4KSAmIDB4ZikgPDwgMCkKKworI2RlZmluZSBTU0lfU09SX0NMS09GRiAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgU1NJX1NPUl9SWF9DTFIgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIFNTSV9TT1JfVFhfQ0xSICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBTU0lfU09SX0lOSVQgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgU1NJX1NPUl9XQUlUKHgpICAgICAgICgoKHgpICYgMHgzKSA8PCAxKQorI2RlZmluZSBTU0lfU09SX1NZTlJTVCAgICAgICAgKDEgPDwgMCkKKworI2RlZmluZSBTU0lfU0FDTlRfRlJESVYoeCkgICAgKCgoeCkgJiAweDNmKSA8PCA1KQorI2RlZmluZSBTU0lfU0FDTlRfV1IgICAgICAgICAgKHggPDwgNCkKKyNkZWZpbmUgU1NJX1NBQ05UX1JEICAgICAgICAgICh4IDw8IDMpCisjZGVmaW5lIFNTSV9TQUNOVF9USUYgICAgICAgICAoeCA8PCAyKQorI2RlZmluZSBTU0lfU0FDTlRfRlYgICAgICAgICAgKHggPDwgMSkKKyNkZWZpbmUgU1NJX1NBQ05UX0FDOTdFTiAgICAgICh4IDw8IDApCisKKy8qIFdhdGVybWFya3MgZm9yIEZJRk8ncyAqLworI2RlZmluZSBUWEZJRk9fV0FURVJNQVJLCQkJCTB4NAorI2RlZmluZSBSWEZJRk9fV0FURVJNQVJLCQkJCTB4NAorCisvKiBpLk1YIERBSSBTU1AgSUQncyAqLworI2RlZmluZSBJTVhfREFJX1NTSTAJCQkwIC8qIFNTSTEgRklGTyAwICovCisjZGVmaW5lIElNWF9EQUlfU1NJMQkJCTEgLyogU1NJMSBGSUZPIDEgKi8KKyNkZWZpbmUgSU1YX0RBSV9TU0kyCQkJMiAvKiBTU0kyIEZJRk8gMCAqLworI2RlZmluZSBJTVhfREFJX1NTSTMJCQkzIC8qIFNTSTIgRklGTyAxICovCisKKy8qIFNTSSBjbG9jayBzb3VyY2VzICovCisjZGVmaW5lIElNWF9TU1BfU1lTX0NMSwkJMAorCisvKiBTU0kgYXVkaW8gZGl2aWRlcnMgKi8KKyNkZWZpbmUgSU1YX1NTSV9UWF9ESVZfMgkJCTAKKyNkZWZpbmUgSU1YX1NTSV9UWF9ESVZfUFNSCQkJMQorI2RlZmluZSBJTVhfU1NJX1RYX0RJVl9QTQkJCTIKKyNkZWZpbmUgSU1YX1NTSV9SWF9ESVZfMgkJCTMKKyNkZWZpbmUgSU1YX1NTSV9SWF9ESVZfUFNSCQkJNAorI2RlZmluZSBJTVhfU1NJX1JYX0RJVl9QTQkJCTUKKworCisvKiBTU0kgRGl2IDIgKi8KKyNkZWZpbmUgSU1YX1NTSV9ESVZfMl9PRkYJCSh+U1NJX1NUQ0NSX0RJVjIpCisjZGVmaW5lIElNWF9TU0lfRElWXzJfT04JCVNTSV9TVENDUl9ESVYyCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgaW14X3NzaV9wY21fZGFpWzRdOworZXh0ZXJuIGludCBnZXRfc3NpX2NsayhpbnQgc3NpLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcHV0X3NzaV9jbGsoaW50IHNzaSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCmluZGV4IGI3NzEyMzguLjJkZWU5ODMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKKysrIGIvc291bmQvc29jL29tYXAvS2NvbmZpZwpAQCAtMTUsNiArMTUsMTQgQEAKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIE5va2lhIE44MTAuCiAKK2NvbmZpZyBTTkRfT01BUF9TT0NfQU1TX0RFTFRBCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBBbXN0cmFkIEUzIChEZWx0YSkgdmlkZW9waG9uZSIKKwlkZXBlbmRzIG9uIFNORF9PTUFQX1NPQyAmJiBNQUNIX0FNU19ERUxUQQorCXNlbGVjdCBTTkRfT01BUF9TT0NfTUNCU1AKKwlzZWxlY3QgU05EX1NPQ19DWDIwNDQyCisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBBbXN0cmFkIERlbHRhLgorCiBjb25maWcgU05EX09NQVBfU09DX09TSzU5MTIKIAl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIG9tYXAgb3NrNTkxMiIKIAlkZXBlbmRzIG9uIFNORF9PTUFQX1NPQyAmJiBNQUNIX09NQVBfT1NLICYmIEkyQwpAQCAtNzIsNCArODAsMTEgQEAKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZSBCZWFnbGVib2FyZC4KIAorY29uZmlnIFNORF9PTUFQX1NPQ19aT09NMgorCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgWm9vbTIiCisJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUgJiYgU05EX09NQVBfU09DICYmIE1BQ0hfT01BUF9aT09NMgorCXNlbGVjdCBTTkRfT01BUF9TT0NfTUNCU1AKKwlzZWxlY3QgU05EX1NPQ19UV0w0MDMwCisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvYyBhdWRpbyBvbiBab29tMiBib2FyZC4KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvTWFrZWZpbGUgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQppbmRleCBhMzdmNDk4Li4wMmQ2OTQ3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAKIAogIyBPTUFQIE1hY2hpbmUgU3VwcG9ydAogc25kLXNvYy1uODEwLW9ianMgOj0gbjgxMC5vCitzbmQtc29jLWFtcy1kZWx0YS1vYmpzIDo9IGFtcy1kZWx0YS5vCiBzbmQtc29jLW9zazU5MTItb2JqcyA6PSBvc2s1OTEyLm8KIHNuZC1zb2Mtb3Zlcm8tb2JqcyA6PSBvdmVyby5vCiBzbmQtc29jLW9tYXAyZXZtLW9ianMgOj0gb21hcDJldm0ubwpAQCAtMTQsOCArMTUsMTAgQEAKIHNuZC1zb2Mtc2RwMzQzMC1vYmpzIDo9IHNkcDM0MzAubwogc25kLXNvYy1vbWFwM3BhbmRvcmEtb2JqcyA6PSBvbWFwM3BhbmRvcmEubwogc25kLXNvYy1vbWFwM2JlYWdsZS1vYmpzIDo9IG9tYXAzYmVhZ2xlLm8KK3NuZC1zb2Mtem9vbTItb2JqcyA6PSB6b29tMi5vCiAKIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfTjgxMCkgKz0gc25kLXNvYy1uODEwLm8KK29iai0kKENPTkZJR19TTkRfT01BUF9TT0NfQU1TX0RFTFRBKSArPSBzbmQtc29jLWFtcy1kZWx0YS5vCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX09TSzU5MTIpICs9IHNuZC1zb2Mtb3NrNTkxMi5vCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX09WRVJPKSArPSBzbmQtc29jLW92ZXJvLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVAyRVZNKSArPSBzbmQtc29jLW9tYXAyZXZtLm8KQEAgLTIzLDMgKzI2LDQgQEAKIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfU0RQMzQzMCkgKz0gc25kLXNvYy1zZHAzNDMwLm8KIG9iai0kKENPTkZJR19TTkRfT01BUF9TT0NfT01BUDNfUEFORE9SQSkgKz0gc25kLXNvYy1vbWFwM3BhbmRvcmEubwogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM19CRUFHTEUpICs9IHNuZC1zb2Mtb21hcDNiZWFnbGUubworb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19aT09NMikgKz0gc25kLXNvYy16b29tMi5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYyBiL3NvdW5kL3NvYy9vbWFwL2Ftcy1kZWx0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNTE2NmEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYwpAQCAtMCwwICsxLDY0NiBAQAorLyoKKyAqIGFtcy1kZWx0YS5jICAtLSAgU29DIGF1ZGlvIGZvciBBbXN0cmFkIEUzIChEZWx0YSkgdmlkZW9waG9uZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW51c3ogS3J6eXN6dG9maWsgPGprcnp5c3p0QHRpcy5pY25ldC5wbD4KKyAqCisgKiBJbml0aWFsbHkgYmFzZWQgb24gc291bmQvc29jL29tYXAvb3NrNTkxMi54CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWlzdHJhbCBTb2x1dGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKworI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPG1hY2gvYm9hcmQtYW1zLWRlbHRhLmg+CisjaW5jbHVkZSA8bWFjaC9tY2JzcC5oPgorCisjaW5jbHVkZSAib21hcC1tY2JzcC5oIgorI2luY2x1ZGUgIm9tYXAtcGNtLmgiCisjaW5jbHVkZSAiLi4vY29kZWNzL2N4MjA0NDIuaCIKKworCisvKiBCb2FyZCBzcGVjaWZpYyBEQVBNIHdpZGdldHMgKi8KKyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBhbXNfZGVsdGFfZGFwbV93aWRnZXRzW10gPSB7CisJLyogSGFuZHNldCAqLworCVNORF9TT0NfREFQTV9NSUMoIk1vdXRocGllY2UiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fSFAoIkVhcnBpZWNlIiwgTlVMTCksCisJLyogSGFuZHNmcmVlL1NwZWFrZXJwaG9uZSAqLworCVNORF9TT0NfREFQTV9NSUMoIk1pY3JvcGhvbmUiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgTlVMTCksCit9OworCisvKiBIb3cgdGhleSBhcmUgY29ubmVjdGVkIHRvIGNvZGVjIHBpbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGFtc19kZWx0YV9hdWRpb19tYXBbXSA9IHsKKwl7IlRFTElOIiwgTlVMTCwgIk1vdXRocGllY2UifSwKKwl7IkVhcnBpZWNlIiwgTlVMTCwgIlRFTE9VVCJ9LAorCisJeyJNSUMiLCBOVUxMLCAiTWljcm9waG9uZSJ9LAorCXsiU3BlYWtlciIsIE5VTEwsICJTUEtPVVQifSwKK307CisKKy8qCisgKiBDb250cm9scywgZnVuY3Rpb25hbCBhZnRlciB0aGUgbW9kZW0gbGluZSBkaXNjaXBsaW5lIGlzIGFjdGl2YXRlZC4KKyAqLworCisvKiBWaXJ0dWFsIHN3aXRjaDogYXVkaW8gaW5wdXQvb3V0cHV0IGNvbnN0ZWxsYXRpb25zICovCitzdGF0aWMgY29uc3QgY2hhciAqYW1zX2RlbHRhX2F1ZGlvX21vZGVbXSA9CisJeyJNaXhlZCIsICJIYW5kc2V0IiwgIkhhbmRzZnJlZSIsICJTcGVha2VycGhvbmUifTsKKworLyogU2VsZWN0aW9uIDwtPiBwaW4gdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgQU1TX0RFTFRBX01PVVRIUElFQ0UJMAorI2RlZmluZSBBTVNfREVMVEFfRUFSUElFQ0UJMQorI2RlZmluZSBBTVNfREVMVEFfTUlDUk9QSE9ORQkyCisjZGVmaW5lIEFNU19ERUxUQV9TUEVBS0VSCTMKKyNkZWZpbmUgQU1TX0RFTFRBX0FHQwkJNAorCisjZGVmaW5lIEFNU19ERUxUQV9NSVhFRAkJKCgxIDw8IEFNU19ERUxUQV9FQVJQSUVDRSkgfCBcCisJCQkJCQkoMSA8PCBBTVNfREVMVEFfTUlDUk9QSE9ORSkpCisjZGVmaW5lIEFNU19ERUxUQV9IQU5EU0VUCSgoMSA8PCBBTVNfREVMVEFfTU9VVEhQSUVDRSkgfCBcCisJCQkJCQkoMSA8PCBBTVNfREVMVEFfRUFSUElFQ0UpKQorI2RlZmluZSBBTVNfREVMVEFfSEFORFNGUkVFCSgoMSA8PCBBTVNfREVMVEFfTUlDUk9QSE9ORSkgfCBcCisJCQkJCQkoMSA8PCBBTVNfREVMVEFfU1BFQUtFUikpCisjZGVmaW5lIEFNU19ERUxUQV9TUEVBS0VSUEhPTkUJKEFNU19ERUxUQV9IQU5EU0ZSRUUgfCAoMSA8PCBBTVNfREVMVEFfQUdDKSkKKwordW5zaWduZWQgc2hvcnQgYW1zX2RlbHRhX2F1ZGlvX21vZGVfcGluc1tdID0geworCUFNU19ERUxUQV9NSVhFRCwKKwlBTVNfREVMVEFfSEFORFNFVCwKKwlBTVNfREVMVEFfSEFORFNGUkVFLAorCUFNU19ERUxUQV9TUEVBS0VSUEhPTkUsCit9OworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYW1zX2RlbHRhX2F1ZGlvX2FnYzsKKworc3RhdGljIGludCBhbXNfZGVsdGFfc2V0X2F1ZGlvX21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNvY19lbnVtICpjb250cm9sID0gKHN0cnVjdCBzb2NfZW51bSAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXVuc2lnbmVkIHNob3J0IHBpbnM7CisJaW50IHBpbiwgY2hhbmdlZCA9IDA7CisKKwkvKiBSZWZ1c2UgYW55IG1vZGUgY2hhbmdlcyBpZiB3ZSBhcmUgbm90IGFibGUgdG8gY29udHJvbCB0aGUgY29kZWMuICovCisJaWYgKCFjb2RlYy0+Y29udHJvbF9kYXRhKQorCQlyZXR1cm4gLUVVTkFUQ0g7CisKKwlpZiAodWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA+PSBjb250cm9sLT5tYXgpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmY29kZWMtPm11dGV4KTsKKworCS8qIFRyYW5zbGF0ZSBzZWxlY3Rpb24gdG8gYml0bWFwICovCisJcGlucyA9IGFtc19kZWx0YV9hdWRpb19tb2RlX3BpbnNbdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXV07CisKKwkvKiBTZXR1cCBwaW5zIGFmdGVyIGNvcnJlc3BvbmRpbmcgYml0cyBpZiBjaGFuZ2VkICovCisJcGluID0gISEocGlucyAmICgxIDw8IEFNU19ERUxUQV9NT1VUSFBJRUNFKSk7CisJaWYgKHBpbiAhPSBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoY29kZWMsICJNb3V0aHBpZWNlIikpIHsKKwkJY2hhbmdlZCA9IDE7CisJCWlmIChwaW4pCisJCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIk1vdXRocGllY2UiKTsKKwkJZWxzZQorCQkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTW91dGhwaWVjZSIpOworCX0KKwlwaW4gPSAhIShwaW5zICYgKDEgPDwgQU1TX0RFTFRBX0VBUlBJRUNFKSk7CisJaWYgKHBpbiAhPSBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoY29kZWMsICJFYXJwaWVjZSIpKSB7CisJCWNoYW5nZWQgPSAxOworCQlpZiAocGluKQorCQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFYXJwaWVjZSIpOworCQllbHNlCisJCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJFYXJwaWVjZSIpOworCX0KKwlwaW4gPSAhIShwaW5zICYgKDEgPDwgQU1TX0RFTFRBX01JQ1JPUEhPTkUpKTsKKwlpZiAocGluICE9IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhjb2RlYywgIk1pY3JvcGhvbmUiKSkgeworCQljaGFuZ2VkID0gMTsKKwkJaWYgKHBpbikKKwkJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTWljcm9waG9uZSIpOworCQllbHNlCisJCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJNaWNyb3Bob25lIik7CisJfQorCXBpbiA9ICEhKHBpbnMgJiAoMSA8PCBBTVNfREVMVEFfU1BFQUtFUikpOworCWlmIChwaW4gIT0gc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKGNvZGVjLCAiU3BlYWtlciIpKSB7CisJCWNoYW5nZWQgPSAxOworCQlpZiAocGluKQorCQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJTcGVha2VyIik7CisJCWVsc2UKKwkJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIlNwZWFrZXIiKTsKKwl9CisJcGluID0gISEocGlucyAmICgxIDw8IEFNU19ERUxUQV9BR0MpKTsKKwlpZiAocGluICE9IGFtc19kZWx0YV9hdWRpb19hZ2MpIHsKKwkJYW1zX2RlbHRhX2F1ZGlvX2FnYyA9IHBpbjsKKwkJY2hhbmdlZCA9IDE7CisJCWlmIChwaW4pCisJCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkFHQ0lOIik7CisJCWVsc2UKKwkJCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkFHQ0lOIik7CisJfQorCWlmIChjaGFuZ2VkKQorCQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7CisKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludCBhbXNfZGVsdGFfZ2V0X2F1ZGlvX21vZGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdW5zaWduZWQgc2hvcnQgcGlucywgbW9kZTsKKworCXBpbnMgPSAoKHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhjb2RlYywgIk1vdXRocGllY2UiKSA8PAorCQkJCQkJCUFNU19ERUxUQV9NT1VUSFBJRUNFKSB8CisJCQkoc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKGNvZGVjLCAiRWFycGllY2UiKSA8PAorCQkJCQkJCUFNU19ERUxUQV9FQVJQSUVDRSkpOworCWlmIChwaW5zKQorCQlwaW5zIHw9IChzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoY29kZWMsICJNaWNyb3Bob25lIikgPDwKKwkJCQkJCQlBTVNfREVMVEFfTUlDUk9QSE9ORSk7CisJZWxzZQorCQlwaW5zID0gKChzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMoY29kZWMsICJNaWNyb3Bob25lIikgPDwKKwkJCQkJCQlBTVNfREVMVEFfTUlDUk9QSE9ORSkgfAorCQkJKHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhjb2RlYywgIlNwZWFrZXIiKSA8PAorCQkJCQkJCUFNU19ERUxUQV9TUEVBS0VSKSB8CisJCQkoYW1zX2RlbHRhX2F1ZGlvX2FnYyA8PCBBTVNfREVMVEFfQUdDKSk7CisKKwlmb3IgKG1vZGUgPSAwOyBtb2RlIDwgQVJSQVlfU0laRShhbXNfZGVsdGFfYXVkaW9fbW9kZSk7IG1vZGUrKykKKwkJaWYgKHBpbnMgPT0gYW1zX2RlbHRhX2F1ZGlvX21vZGVfcGluc1ttb2RlXSkKKwkJCWJyZWFrOworCisJaWYgKG1vZGUgPj0gQVJSQVlfU0laRShhbXNfZGVsdGFfYXVkaW9fbW9kZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IG1vZGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhbXNfZGVsdGFfYXVkaW9fZW51bVtdID0geworCVNPQ19FTlVNX1NJTkdMRV9FWFQoQVJSQVlfU0laRShhbXNfZGVsdGFfYXVkaW9fbW9kZSksCisJCQkJCQlhbXNfZGVsdGFfYXVkaW9fbW9kZSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYW1zX2RlbHRhX2F1ZGlvX2NvbnRyb2xzW10gPSB7CisJU09DX0VOVU1fRVhUKCJBdWRpbyBNb2RlIiwgYW1zX2RlbHRhX2F1ZGlvX2VudW1bMF0sCisJCQlhbXNfZGVsdGFfZ2V0X2F1ZGlvX21vZGUsIGFtc19kZWx0YV9zZXRfYXVkaW9fbW9kZSksCit9OworCisvKiBIb29rIHN3aXRjaCAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2sgYW1zX2RlbHRhX2hvb2tfc3dpdGNoOworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyBhbXNfZGVsdGFfaG9va19zd2l0Y2hfZ3Bpb3NbXSA9IHsKKwl7CisJCS5ncGlvID0gNCwKKwkJLm5hbWUgPSAiaG9va19zd2l0Y2giLAorCQkucmVwb3J0ID0gU05EX0pBQ0tfSEVBRFNFVCwKKwkJLmludmVydCA9IDEsCisJCS5kZWJvdW5jZV90aW1lID0gMTUwLAorCX0KK307CisKKy8qIEFmdGVyIHdlIGFyZSBhYmxlIHRvIGNvbnRyb2wgdGhlIGNvZGVjIG92ZXIgdGhlIG1vZGVtLAorICogdGhlIGhvb2sgc3dpdGNoIGNhbiBiZSB1c2VkIGZvciBkeW5hbWljIERBUE0gcmVjb25maWd1cmF0aW9uLiAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfcGluIGFtc19kZWx0YV9ob29rX3N3aXRjaF9waW5zW10gPSB7CisJLyogSGFuZHNldCAqLworCXsKKwkJLnBpbiA9ICJNb3V0aHBpZWNlIiwKKwkJLm1hc2sgPSBTTkRfSkFDS19NSUNST1BIT05FLAorCX0sCisJeworCQkucGluID0gIkVhcnBpZWNlIiwKKwkJLm1hc2sgPSBTTkRfSkFDS19IRUFEUEhPTkUsCisJfSwKKwkvKiBIYW5kc2ZyZWUgKi8KKwl7CisJCS5waW4gPSAiTWljcm9waG9uZSIsCisJCS5tYXNrID0gU05EX0pBQ0tfTUlDUk9QSE9ORSwKKwkJLmludmVydCA9IDEsCisJfSwKKwl7CisJCS5waW4gPSAiU3BlYWtlciIsCisJCS5tYXNrID0gU05EX0pBQ0tfSEVBRFBIT05FLAorCQkuaW52ZXJ0ID0gMSwKKwl9LAorfTsKKworCisvKgorICogTW9kZW0gbGluZSBkaXNjaXBsaW5lLCByZXF1aXJlZCBmb3IgbWFraW5nIGFib3ZlIGNvbnRyb2xzIGZ1bmN0aW9uYWwuCisgKiBBY3RpdmF0ZWQgZnJvbSB1c2Vyc3BhY2Ugd2l0aCBsZGF0dGFjaCwgcG9zc2libHkgaW52b2tlZCBmcm9tIHVkZXYgcnVsZS4KKyAqLworCisvKiBUbyBhY3R1YWxseSBhcHBseSBhbnkgbW9kZW0gY29udHJvbGxlZCBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gdGhlIGNvZGVjLAorICogd2UgbXVzdCBjb25uZWN0IGNvZGVjIERBSSBwaW5zIHRvIHRoZSBtb2RlbSBmb3IgYSBtb21lbnQuICBCZSBjYXJlZnVsbCBub3QKKyAqIHRvIGludGVyZmVyZSB3aXRoIG91ciBkaWdpdGFsIG11dGUgZnVuY3Rpb24gdGhhdCBzaGFyZXMgdGhlIHNhbWUgaGFyZHdhcmUuICovCitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgY3g4MTgwMV90aW1lcjsKK3N0YXRpYyBib29sIGN4ODE4MDFfY21kX3BlbmRpbmc7CitzdGF0aWMgYm9vbCBhbXNfZGVsdGFfbXV0ZWQ7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFtc19kZWx0YV9sb2NrKTsKKworc3RhdGljIHZvaWQgY3g4MTgwMV90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlpbnQgbXV0ZWQ7CisKKwlzcGluX2xvY2soJmFtc19kZWx0YV9sb2NrKTsKKwljeDgxODAxX2NtZF9wZW5kaW5nID0gMDsKKwltdXRlZCA9IGFtc19kZWx0YV9tdXRlZDsKKwlzcGluX3VubG9jaygmYW1zX2RlbHRhX2xvY2spOworCisJLyogUmVjb25uZWN0IHRoZSBjb2RlYyBEQUkgYmFjayBmcm9tIHRoZSBtb2RlbSB0byB0aGUgQ1BVIERBSQorCSAqIG9ubHkgaWYgZGlnaXRhbCBtdXRlIHN0aWxsIG9mZiAqLworCWlmICghbXV0ZWQpCisJCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoQU1TX0RFTFRBX0xBVENIMl9NT0RFTV9DT0RFQywgMCk7Cit9CisKKy8qIExpbmUgZGlzY2lwbGluZSAub3BlbigpICovCitzdGF0aWMgaW50IGN4ODE4MDFfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXJldHVybiB2MjUzX29wcy5vcGVuKHR0eSk7Cit9CisKKy8qIExpbmUgZGlzY2lwbGluZSAuY2xvc2UoKSAqLworc3RhdGljIHZvaWQgY3g4MTgwMV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHR0eS0+ZGlzY19kYXRhOworCisJZGVsX3RpbWVyX3N5bmMoJmN4ODE4MDFfdGltZXIpOworCisJdjI1M19vcHMuY2xvc2UodHR5KTsKKworCS8qIFByZXZlbnQgdGhlIGhvb2sgc3dpdGNoIGZyb20gZnVydGhlciBjaGFuZ2luZyB0aGUgREFQTSBwaW5zICovCisJSU5JVF9MSVNUX0hFQUQoJmFtc19kZWx0YV9ob29rX3N3aXRjaC5waW5zKTsKKworCS8qIFJldmVydCBiYWNrIHRvIGRlZmF1bHQgYXVkaW8gaW5wdXQvb3V0cHV0IGNvbnN0ZWxsYXRpb24gKi8KKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJNb3V0aHBpZWNlIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFYXJwaWVjZSIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTWljcm9waG9uZSIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIlNwZWFrZXIiKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJBR0NJTiIpOworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKK30KKworLyogTGluZSBkaXNjaXBsaW5lIC5oYW5ndXAoKSAqLworc3RhdGljIGludCBjeDgxODAxX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCWN4ODE4MDFfY2xvc2UodHR5KTsKKwlyZXR1cm4gMDsKK30KKworLyogTGluZSBkaXNjaXBsaW5lIC5yZWNpZXZlX2J1ZigpICovCitzdGF0aWMgdm9pZCBjeDgxODAxX3JlY2VpdmUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB0dHktPmRpc2NfZGF0YTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjOworCWludCBhcHBseSwgcmV0OworCisJaWYgKCFjb2RlYy0+Y29udHJvbF9kYXRhKSB7CisJCS8qIEZpcnN0IG1vZGVtIHJlc3BvbnNlLCBjb21wbGV0ZSBzZXR1cCBwcm9jZWR1cmUgKi8KKworCQkvKiBJbml0aWFsaXplIHRpbWVyIHVzZWQgZm9yIGNvbmZpZyBwdWxzZSBnZW5lcmF0aW9uICovCisJCXNldHVwX3RpbWVyKCZjeDgxODAxX3RpbWVyLCBjeDgxODAxX3RpbWVvdXQsIDApOworCisJCXYyNTNfb3BzLnJlY2VpdmVfYnVmKHR0eSwgY3AsIGZwLCBjb3VudCk7CisKKwkJLyogTGluayBob29rIHN3aXRjaCB0byBEQVBNIHBpbnMgKi8KKwkJcmV0ID0gc25kX3NvY19qYWNrX2FkZF9waW5zKCZhbXNfZGVsdGFfaG9va19zd2l0Y2gsCisJCQkJCUFSUkFZX1NJWkUoYW1zX2RlbHRhX2hvb2tfc3dpdGNoX3BpbnMpLAorCQkJCQlhbXNfZGVsdGFfaG9va19zd2l0Y2hfcGlucyk7CisJCWlmIChyZXQpCisJCQlkZXZfd2Fybihjb2RlYy0+c29jZGV2LT5jYXJkLT5kZXYsCisJCQkJIkZhaWxlZCB0byBsaW5rIGhvb2sgc3dpdGNoIHRvIERBUE0gcGlucywgIgorCQkJCSJ3aWxsIGNvbnRpbnVlIHdpdGggaG9vayBzd2l0Y2ggdW5saW5rZWQuXG4iKTsKKworCQlyZXR1cm47CisJfQorCisJdjI1M19vcHMucmVjZWl2ZV9idWYodHR5LCBjcCwgZnAsIGNvdW50KTsKKworCWZvciAoYyA9ICZjcFtjb3VudCAtIDFdOyBjID49IGNwOyBjLS0pIHsKKwkJaWYgKCpjICE9ICdccicpCisJCQljb250aW51ZTsKKwkJLyogQ29tcGxldGUgbW9kZW0gcmVzcG9uc2UgcmVjZWl2ZWQsIGFwcGx5IGNvbmZpZyB0byBjb2RlYyAqLworCisJCXNwaW5fbG9ja19iaCgmYW1zX2RlbHRhX2xvY2spOworCQltb2RfdGltZXIoJmN4ODE4MDFfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDE1MCkpOworCQlhcHBseSA9ICFhbXNfZGVsdGFfbXV0ZWQgJiYgIWN4ODE4MDFfY21kX3BlbmRpbmc7CisJCWN4ODE4MDFfY21kX3BlbmRpbmcgPSAxOworCQlzcGluX3VubG9ja19iaCgmYW1zX2RlbHRhX2xvY2spOworCisJCS8qIEFwcGx5IGNvbmZpZyBwdWxzZSBieSBjb25uZWN0aW5nIHRoZSBjb2RlYyB0byB0aGUgbW9kZW0KKwkJICogaWYgbm90IGFscmVhZHkgZG9uZSAqLworCQlpZiAoYXBwbHkpCisJCQlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKEFNU19ERUxUQV9MQVRDSDJfTU9ERU1fQ09ERUMsCisJCQkJCQlBTVNfREVMVEFfTEFUQ0gyX01PREVNX0NPREVDKTsKKwkJYnJlYWs7CisJfQorfQorCisvKiBMaW5lIGRpc2NpcGxpbmUgLndyaXRlX3dha2V1cCgpICovCitzdGF0aWMgdm9pZCBjeDgxODAxX3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXYyNTNfb3BzLndyaXRlX3dha2V1cCh0dHkpOworfQorCitzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgY3g4MTgwMV9vcHMgPSB7CisJLm1hZ2ljID0gVFRZX0xESVNDX01BR0lDLAorCS5uYW1lID0gImN4ODE4MDEiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gY3g4MTgwMV9vcGVuLAorCS5jbG9zZSA9IGN4ODE4MDFfY2xvc2UsCisJLmhhbmd1cCA9IGN4ODE4MDFfaGFuZ3VwLAorCS5yZWNlaXZlX2J1ZiA9IGN4ODE4MDFfcmVjZWl2ZSwKKwkud3JpdGVfd2FrZXVwID0gY3g4MTgwMV93YWtldXAsCit9OworCisKKy8qCisgKiBFdmVuIGlmIG5vdCB2ZXJ5IHVzZWZ1bGwsIHRoZSBzb3VuZCBjYXJkIGNhbiBzdGlsbCB3b3JrIHdpdGhvdXQgYW55IG9mIHRoZQorICogYWJvdmUgZnVuY3RvbmFsaXR5IGFjdGl2YXRlZC4gIFlvdSBjYW4gc3RpbGwgY29udHJvbCBpdHMgYXVkaW8gaW5wdXQvb3V0cHV0CisgKiBjb25zdGVsbGF0aW9uIGFuZCBzcGVha2VycGhvbmUgZ2FpbiBmcm9tIHVzZXJzcGFjZSBieSBpc3N1ZWluZyBBVCBjb21tYW5kcworICogb3ZlciB0aGUgbW9kZW0gcG9ydC4KKyAqLworCitzdGF0aWMgaW50IGFtc19kZWx0YV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCisJLyogU2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldHVybiBzbmRfc29jX2RhaV9zZXRfZm10KHJ0ZC0+ZGFpLT5jcHVfZGFpLAorCQkJCSAgIFNORF9TT0NfREFJRk1UX0RTUF9BIHwKKwkJCQkgICBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQkJICAgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgYW1zX2RlbHRhX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gYW1zX2RlbHRhX2h3X3BhcmFtcywKK307CisKKworLyogQm9hcmQgc3BlY2lmaWMgY29kZWMgYmlhcyBsZXZlbCBjb250cm9sICovCitzdGF0aWMgaW50IGFtc19kZWx0YV9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAorCQkJCQllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjYXJkLT5jb2RlYzsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKQorCQkJYW1zX2RlbHRhX2xhdGNoMl93cml0ZShBTVNfREVMVEFfTEFUQ0gyX01PREVNX05SRVNFVCwKKwkJCQkJCUFNU19ERUxUQV9MQVRDSDJfTU9ERU1fTlJFU0VUKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgIT0gU05EX1NPQ19CSUFTX09GRikKKwkJCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoQU1TX0RFTFRBX0xBVENIMl9NT0RFTV9OUkVTRVQsCisJCQkJCQkwKTsKKwl9CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKworCXJldHVybiAwOworfQorCisvKiBEaWdpdGFsIG11dGUgaW1wbGVtZW50ZWQgdXNpbmcgbW9kZW0vQ1BVIG11bHRpcGxleGVyLgorICogU2hhcmVzIGhhcmR3YXJlIHdpdGggY29kZWMgY29uZmlnIHB1bHNlIGdlbmVyYXRpb24gKi8KK3N0YXRpYyBib29sIGFtc19kZWx0YV9tdXRlZCA9IDE7CisKK3N0YXRpYyBpbnQgYW1zX2RlbHRhX2RpZ2l0YWxfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCit7CisJaW50IGFwcGx5OworCisJaWYgKGFtc19kZWx0YV9tdXRlZCA9PSBtdXRlKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19iaCgmYW1zX2RlbHRhX2xvY2spOworCWFtc19kZWx0YV9tdXRlZCA9IG11dGU7CisJYXBwbHkgPSAhY3g4MTgwMV9jbWRfcGVuZGluZzsKKwlzcGluX3VubG9ja19iaCgmYW1zX2RlbHRhX2xvY2spOworCisJaWYgKGFwcGx5KQorCQlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKEFNU19ERUxUQV9MQVRDSDJfTU9ERU1fQ09ERUMsCisJCQkJbXV0ZSA/IEFNU19ERUxUQV9MQVRDSDJfTU9ERU1fQ09ERUMgOiAwKTsKKwlyZXR1cm4gMDsKK30KKworLyogT3VyIGNvZGVjIERBSSBwcm9iYWJseSBkb2Vzbid0IGhhdmUgaXRzIG93biAub3BzIHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYW1zX2RlbHRhX2RhaV9vcHMgPSB7CisJLmRpZ2l0YWxfbXV0ZSA9IGFtc19kZWx0YV9kaWdpdGFsX211dGUsCit9OworCisvKiBXaWxsIGJlIHVzZWQgaWYgdGhlIGNvZGVjIGV2ZXIgaGFzIGl0cyBvd24gZGlnaXRhbF9tdXRlIGZ1bmN0aW9uICovCitzdGF0aWMgaW50IGFtc19kZWx0YV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiBhbXNfZGVsdGFfZGlnaXRhbF9tdXRlKE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZCBhbXNfZGVsdGFfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJYW1zX2RlbHRhX2RpZ2l0YWxfbXV0ZShOVUxMLCAxKTsKK30KKworCisvKgorICogQ2FyZCBpbml0aWFsaXphdGlvbgorICovCisKK3N0YXRpYyBpbnQgYW1zX2RlbHRhX2N4MjA0NDJfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBjb2RlYy0+ZGFpOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBjb2RlYy0+c29jZGV2LT5jYXJkOworCWludCByZXQ7CisJLyogQ29kZWMgaXMgcmVhZHksIG5vdyBhZGQvYWN0aXZhdGUgYm9hcmQgc3BlY2lmaWMgY29udHJvbHMgKi8KKworCS8qIFNldCB1cCBkaWdpdGFsIG11dGUgaWYgbm90IHByb3ZpZGVkIGJ5IHRoZSBjb2RlYyAqLworCWlmICghY29kZWNfZGFpLT5vcHMpIHsKKwkJY29kZWNfZGFpLT5vcHMgPSAmYW1zX2RlbHRhX2RhaV9vcHM7CisJfSBlbHNlIGlmICghY29kZWNfZGFpLT5vcHMtPmRpZ2l0YWxfbXV0ZSkgeworCQljb2RlY19kYWktPm9wcy0+ZGlnaXRhbF9tdXRlID0gYW1zX2RlbHRhX2RpZ2l0YWxfbXV0ZTsKKwl9IGVsc2UgeworCQlhbXNfZGVsdGFfb3BzLnN0YXJ0dXAgPSBhbXNfZGVsdGFfc3RhcnR1cDsKKwkJYW1zX2RlbHRhX29wcy5zaHV0ZG93biA9IGFtc19kZWx0YV9zaHV0ZG93bjsKKwl9CisKKwkvKiBTZXQgY29kZWMgYmlhcyBsZXZlbCAqLworCWFtc19kZWx0YV9zZXRfYmlhc19sZXZlbChjYXJkLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwkvKiBBZGQgaG9vayBzd2l0Y2ggLSBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBjb2RlYyBmcm9tIHVzZXJzcGFjZQorCSAqIGV2ZW4gaWYgbGluZSBkaXNjaXBsaW5lIGZhaWxzICovCisJcmV0ID0gc25kX3NvY19qYWNrX25ldyhjYXJkLCAiaG9va19zd2l0Y2giLAorCQkJCVNORF9KQUNLX0hFQURTRVQsICZhbXNfZGVsdGFfaG9va19zd2l0Y2gpOworCWlmIChyZXQpCisJCWRldl93YXJuKGNhcmQtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIHJlc291cmNlcyBmb3IgaG9vayBzd2l0Y2gsICIKKwkJCQkid2lsbCBjb250aW51ZSB3aXRob3V0IG9uZS5cbiIpOworCWVsc2UgeworCQlyZXQgPSBzbmRfc29jX2phY2tfYWRkX2dwaW9zKCZhbXNfZGVsdGFfaG9va19zd2l0Y2gsCisJCQkJCUFSUkFZX1NJWkUoYW1zX2RlbHRhX2hvb2tfc3dpdGNoX2dwaW9zKSwKKwkJCQkJYW1zX2RlbHRhX2hvb2tfc3dpdGNoX2dwaW9zKTsKKwkJaWYgKHJldCkKKwkJCWRldl93YXJuKGNhcmQtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHNldCB1cCBob29rIHN3aXRjaCBHUElPIGxpbmUsICIKKwkJCQkid2lsbCBjb250aW51ZSB3aXRoIGhvb2sgc3dpdGNoIGluYWN0aXZlLlxuIik7CisJfQorCisJLyogUmVnaXN0ZXIgb3B0aW9uYWwgbGluZSBkaXNjaXBsaW5lIGZvciBvdmVyIHRoZSBtb2RlbSBjb250cm9sICovCisJcmV0ID0gdHR5X3JlZ2lzdGVyX2xkaXNjKE5fVjI1MywgJmN4ODE4MDFfb3BzKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKGNhcmQtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIGxpbmUgZGlzY2lwbGluZSwgIgorCQkJCSJ3aWxsIGNvbnRpbnVlIHdpdGhvdXQgYW55IGNvbnRyb2xzLlxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIEFkZCBib2FyZCBzcGVjaWZpYyBEQVBNIHdpZGdldHMgYW5kIHJvdXRlcyAqLworCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGFtc19kZWx0YV9kYXBtX3dpZGdldHMsCisJCQkJCUFSUkFZX1NJWkUoYW1zX2RlbHRhX2RhcG1fd2lkZ2V0cykpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oY2FyZC0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgREFQTSBjb250cm9scywgIgorCQkJCSJ3aWxsIGNvbnRpbnVlIHdpdGhvdXQgYW55LlxuIik7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IHNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhbXNfZGVsdGFfYXVkaW9fbWFwLAorCQkJCQlBUlJBWV9TSVpFKGFtc19kZWx0YV9hdWRpb19tYXApKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKGNhcmQtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHNldCB1cCBEQVBNIHJvdXRlcywgIgorCQkJCSJ3aWxsIGNvbnRpbnVlIHdpdGggY29kZWMgZGVmYXVsdCBtYXAuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogU2V0IHVwIGluaXRpYWwgcGluIGNvbnN0ZWxsYXRpb24gKi8KKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJNb3V0aHBpZWNlIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFYXJwaWVjZSIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTWljcm9waG9uZSIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIlNwZWFrZXIiKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJBR0NJTiIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkFHQ09VVCIpOworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCS8qIEFkZCB2aXJ0dWFsIHN3aXRjaCAqLworCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhbXNfZGVsdGFfYXVkaW9fY29udHJvbHMsCisJCQkJCUFSUkFZX1NJWkUoYW1zX2RlbHRhX2F1ZGlvX2NvbnRyb2xzKSk7CisJaWYgKHJldCkKKwkJZGV2X3dhcm4oY2FyZC0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgYXVkaW8gbW9kZSBjb250cm9sLCAiCisJCQkJIndpbGwgY29udGludWUgd2l0aG91dCBpdC5cbiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIERBSSBnbHVlIC0gY29ubmVjdHMgY29kZWMgPC0tPiBDUFUgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBhbXNfZGVsdGFfZGFpX2xpbmsgPSB7CisJLm5hbWUgPSAiQ1gyMDQ0MiIsCisJLnN0cmVhbV9uYW1lID0gIkNYMjA0NDIiLAorCS5jcHVfZGFpID0gJm9tYXBfbWNic3BfZGFpWzBdLAorCS5jb2RlY19kYWkgPSAmY3gyMDQ0Ml9kYWksCisJLmluaXQgPSBhbXNfZGVsdGFfY3gyMDQ0Ml9pbml0LAorCS5vcHMgPSAmYW1zX2RlbHRhX29wcywKK307CisKKy8qIEF1ZGlvIGNhcmQgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBhbXNfZGVsdGFfYXVkaW9fY2FyZCA9IHsKKwkubmFtZSA9ICJBTVNfREVMVEEiLAorCS5wbGF0Zm9ybSA9ICZvbWFwX3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsgPSAmYW1zX2RlbHRhX2RhaV9saW5rLAorCS5udW1fbGlua3MgPSAxLAorCS5zZXRfYmlhc19sZXZlbCA9IGFtc19kZWx0YV9zZXRfYmlhc19sZXZlbCwKK307CisKKy8qIEF1ZGlvIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBhbXNfZGVsdGFfc25kX3NvY19kZXZpY2UgPSB7CisJLmNhcmQgPSAmYW1zX2RlbHRhX2F1ZGlvX2NhcmQsCisJLmNvZGVjX2RldiA9ICZjeDIwNDQyX2NvZGVjX2RldiwKK307CisKKy8qIE1vZHVsZSBpbml0L2V4aXQgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphbXNfZGVsdGFfYXVkaW9fcGxhdGZvcm1fZGV2aWNlOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmN4MjA0NDJfcGxhdGZvcm1fZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBhbXNfZGVsdGFfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCEobWFjaGluZV9pc19hbXNfZGVsdGEoKSkpCisJCXJldHVybiAtRU5PREVWOworCisJYW1zX2RlbHRhX2F1ZGlvX3BsYXRmb3JtX2RldmljZSA9CisJCQlwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWFtc19kZWx0YV9hdWRpb19wbGF0Zm9ybV9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoYW1zX2RlbHRhX2F1ZGlvX3BsYXRmb3JtX2RldmljZSwKKwkJCQkmYW1zX2RlbHRhX3NuZF9zb2NfZGV2aWNlKTsKKwlhbXNfZGVsdGFfc25kX3NvY19kZXZpY2UuZGV2ID0gJmFtc19kZWx0YV9hdWRpb19wbGF0Zm9ybV9kZXZpY2UtPmRldjsKKwkqKHVuc2lnbmVkIGludCAqKWFtc19kZWx0YV9kYWlfbGluay5jcHVfZGFpLT5wcml2YXRlX2RhdGEgPSBPTUFQX01DQlNQMTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYW1zX2RlbHRhX2F1ZGlvX3BsYXRmb3JtX2RldmljZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwkvKgorCSAqIENvZGVjIHBsYXRmb3JtIGRldmljZSBjb3VsZCBiZSByZWdpc3RlcmVkIGZyb20gZWxzZXdoZXJlIChib2FyZD8pLAorCSAqIGJ1dCBJIGRvIGl0IGhlcmUgYXMgaXQgbWFrZXMgc2Vuc2Ugb25seSBpZiB1c2VkIHdpdGggdGhlIGNhcmQuCisJICovCisJY3gyMDQ0Ml9wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJjeDIwNDQyIiwKKwkJCQkJCQkJLTEsIE5VTEwsIDApOworCXJldHVybiAwOworZXJyOgorCXBsYXRmb3JtX2RldmljZV9wdXQoYW1zX2RlbHRhX2F1ZGlvX3BsYXRmb3JtX2RldmljZSk7CisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KGFtc19kZWx0YV9tb2R1bGVfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbXNfZGVsdGFfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCWlmIChhbXNfZGVsdGFfYXVkaW9fY2FyZC5jb2RlYykgeworCQljb2RlYyA9IGFtc19kZWx0YV9hdWRpb19jYXJkLmNvZGVjOworCisJCWlmIChjb2RlYy0+Y29udHJvbF9kYXRhKSB7CisJCQl0dHkgPSBjb2RlYy0+Y29udHJvbF9kYXRhOworCisJCQl0dHlfaGFuZ3VwKHR0eSk7CisJCX0KKwl9CisKKwlpZiAodHR5X3VucmVnaXN0ZXJfbGRpc2MoTl9WMjUzKSAhPSAwKQorCQlkZXZfd2FybigmYW1zX2RlbHRhX2F1ZGlvX3BsYXRmb3JtX2RldmljZS0+ZGV2LAorCQkJImZhaWxlZCB0byB1bnJlZ2lzdGVyIFYyNTMgbGluZSBkaXNjaXBsaW5lXG4iKTsKKworCXNuZF9zb2NfamFja19mcmVlX2dwaW9zKCZhbXNfZGVsdGFfaG9va19zd2l0Y2gsCisJCQlBUlJBWV9TSVpFKGFtc19kZWx0YV9ob29rX3N3aXRjaF9ncGlvcyksCisJCQlhbXNfZGVsdGFfaG9va19zd2l0Y2hfZ3Bpb3MpOworCisJLyogS2VlcCBtb2RlbSBwb3dlciBvbiAqLworCWFtc19kZWx0YV9zZXRfYmlhc19sZXZlbCgmYW1zX2RlbHRhX2F1ZGlvX2NhcmQsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGN4MjA0NDJfcGxhdGZvcm1fZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhbXNfZGVsdGFfYXVkaW9fcGxhdGZvcm1fZGV2aWNlKTsKK30KK21vZHVsZV9leGl0KGFtc19kZWx0YV9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkphbnVzeiBLcnp5c3p0b2ZpayA8amtyenlzenRAdGlzLmljbmV0LnBsPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBkcml2ZXIgZm9yIEFtc3RyYWQgRTMgKERlbHRhKSB2aWRlb3Bob25lIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9uODEwLmMgYi9zb3VuZC9zb2Mvb21hcC9uODEwLmMKaW5kZXggYjYwYjFkZi4uMGE1MDU5MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvbjgxMC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL244MTAuYwpAQCAtMjIsNiArMjIsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0zMjIsOCArMzIzLDYgQEAKIAogLyogQXVkaW8gcHJpdmF0ZSBkYXRhICovCiBzdGF0aWMgc3RydWN0IGFpYzN4X3NldHVwX2RhdGEgbjgxMF9haWMzM19zZXR1cCA9IHsKLQkuaTJjX2J1cyA9IDIsCi0JLmkyY19hZGRyZXNzID0gMHgxOCwKIAkuZ3Bpb19mdW5jWzBdID0gQUlDM1hfR1BJTzFfRlVOQ19ESVNBQkxFRCwKIAkuZ3Bpb19mdW5jWzFdID0gQUlDM1hfR1BJTzJfRlVOQ19ESUdJVEFMX01JQ19JTlBVVCwKIH07CkBAIC0zMzcsNiArMzM2LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpuODEwX3NuZF9kZXZpY2U7CiAKKy8qIHRlbXBvcmFyeSBpMmMgZGV2aWNlIGNyZWF0aW9uIHVudGlsIHRoaXMgY2FuIGJlIG1vdmVkIGludG8gdGhlIG1hY2hpbmUKKyAqIHN1cHBvcnQgZmlsZS4KKyovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyY19kZXZpY2VbXSA9IHsKKwl7IEkyQ19CT0FSRF9JTkZPKCJ0bHYzMjBhaWMzeCIsIDB4MWIpLCB9Cit9OworCiBzdGF0aWMgaW50IF9faW5pdCBuODEwX3NvY19pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTM0NSw2ICszNTEsOCBAQAogCWlmICghKG1hY2hpbmVfaXNfbm9raWFfbjgxMCgpIHx8IG1hY2hpbmVfaXNfbm9raWFfbjgxMF93aW1heCgpKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBpMmNfZGV2aWNlLCBBUlJBWV9TSVpFKGkyY19kZXZpY2UpKTsKKwogCW44MTBfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwogCWlmICghbjgxMF9zbmRfZGV2aWNlKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwppbmRleCBhNWQ0NmE3Li4zMzQxZjQ5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCkBAIC0xMzksMjcgKzEzOSw2NyBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgb21hcDM0eHhfbWNic3BfcG9ydFtdWzJdID0ge307CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgb21hcF9tY2JzcF9zZXRfdGhyZXNob2xkKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9kYXRhICptY2JzcF9kYXRhID0gdG9fbWNic3AoY3B1X2RhaS0+cHJpdmF0ZV9kYXRhKTsKKwlpbnQgZG1hX29wX21vZGUgPSBvbWFwX21jYnNwX2dldF9kbWFfb3BfbW9kZShtY2JzcF9kYXRhLT5idXNfaWQpOworCWludCBzYW1wbGVzOworCisJLyogVE9ETzogQ3VycmVudGx5LCBNT0RFX0VMRU1FTlQgPT0gTU9ERV9GUkFNRSAqLworCWlmIChkbWFfb3BfbW9kZSA9PSBNQ0JTUF9ETUFfTU9ERV9USFJFU0hPTEQpCisJCXNhbXBsZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSA+PiAxOworCWVsc2UKKwkJc2FtcGxlcyA9IDE7CisKKwkvKiBDb25maWd1cmUgTWNCU1AgaW50ZXJuYWwgYnVmZmVyIHVzYWdlICovCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCW9tYXBfbWNic3Bfc2V0X3R4X3RocmVzaG9sZChtY2JzcF9kYXRhLT5idXNfaWQsIHNhbXBsZXMgLSAxKTsKKwllbHNlCisJCW9tYXBfbWNic3Bfc2V0X3J4X3RocmVzaG9sZChtY2JzcF9kYXRhLT5idXNfaWQsIHNhbXBsZXMgLSAxKTsKK30KKwogc3RhdGljIGludCBvbWFwX21jYnNwX2RhaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJCSAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwogCXN0cnVjdCBvbWFwX21jYnNwX2RhdGEgKm1jYnNwX2RhdGEgPSB0b19tY2JzcChjcHVfZGFpLT5wcml2YXRlX2RhdGEpOworCWludCBidXNfaWQgPSBtY2JzcF9kYXRhLT5idXNfaWQ7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoY3B1X2lzX29tYXAzNDN4KCkgJiYgbWNic3BfZGF0YS0+YnVzX2lkID09IDEpIHsKKwlpZiAoIWNwdV9kYWktPmFjdGl2ZSkKKwkJZXJyID0gb21hcF9tY2JzcF9yZXF1ZXN0KGJ1c19pZCk7CisKKwlpZiAoY3B1X2lzX29tYXAzNDN4KCkpIHsKKwkJaW50IGRtYV9vcF9tb2RlID0gb21hcF9tY2JzcF9nZXRfZG1hX29wX21vZGUoYnVzX2lkKTsKKwkJaW50IG1heF9wZXJpb2Q7CisKIAkJLyoKIAkJICogTWNCU1AyIGluIE9NQVAzIGhhcyAxMDI0ICogMzItYml0IGludGVybmFsIGF1ZGlvIGJ1ZmZlci4KIAkJICogU2V0IGNvbnN0cmFpbnQgZm9yIG1pbmltdW0gYnVmZmVyIHNpemUgdG8gdGhlIHNhbWUgdGhhbiBGSUZPCiAJCSAqIHNpemUgaW4gb3JkZXIgdG8gYXZvaWQgdW5kZXJydW5zIGluIHBsYXliYWNrIHN0YXJ0dXAgYmVjYXVzZQogCQkgKiBIVyBpcyBrZWVwaW5nIHRoZSBETUEgcmVxdWVzdCBhY3RpdmUgdW50aWwgRklGTyBpcyBmaWxsZWQuCiAJCSAqLwotCQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHN1YnN0cmVhbS0+cnVudGltZSwKLQkJCVNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMsIDQwOTYsIFVJTlRfTUFYKTsKLQl9CisJCWlmIChidXNfaWQgPT0gMSkKKwkJCXNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgoc3Vic3RyZWFtLT5ydW50aW1lLAorCQkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLAorCQkJCQk0MDk2LCBVSU5UX01BWCk7CiAKLQlpZiAoIWNwdV9kYWktPmFjdGl2ZSkKLQkJZXJyID0gb21hcF9tY2JzcF9yZXF1ZXN0KG1jYnNwX2RhdGEtPmJ1c19pZCk7CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQkJbWF4X3BlcmlvZCA9IG9tYXBfbWNic3BfZ2V0X21heF90eF90aHJlc2hvbGQoYnVzX2lkKTsKKwkJZWxzZQorCQkJbWF4X3BlcmlvZCA9IG9tYXBfbWNic3BfZ2V0X21heF9yeF90aHJlc2hvbGQoYnVzX2lkKTsKKworCQltYXhfcGVyaW9kKys7CisJCW1heF9wZXJpb2QgPDw9IDE7CisKKwkJaWYgKGRtYV9vcF9tb2RlID09IE1DQlNQX0RNQV9NT0RFX1RIUkVTSE9MRCkKKwkJCXNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgoc3Vic3RyZWFtLT5ydW50aW1lLAorCQkJCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9CWVRFUywKKwkJCQkJCTMyLCBtYXhfcGVyaW9kKTsKKwl9CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTgzLDIxICsyMjMsMjEgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CiAJc3RydWN0IG9tYXBfbWNic3BfZGF0YSAqbWNic3BfZGF0YSA9IHRvX21jYnNwKGNwdV9kYWktPnByaXZhdGVfZGF0YSk7Ci0JaW50IGVyciA9IDA7CisJaW50IGVyciA9IDAsIHBsYXkgPSAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlpZiAoIW1jYnNwX2RhdGEtPmFjdGl2ZSsrKQotCQkJb21hcF9tY2JzcF9zdGFydChtY2JzcF9kYXRhLT5idXNfaWQpOworCQltY2JzcF9kYXRhLT5hY3RpdmUrKzsKKwkJb21hcF9tY2JzcF9zdGFydChtY2JzcF9kYXRhLT5idXNfaWQsIHBsYXksICFwbGF5KTsKIAkJYnJlYWs7CiAKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJaWYgKCEtLW1jYnNwX2RhdGEtPmFjdGl2ZSkKLQkJCW9tYXBfbWNic3Bfc3RvcChtY2JzcF9kYXRhLT5idXNfaWQpOworCQlvbWFwX21jYnNwX3N0b3AobWNic3BfZGF0YS0+YnVzX2lkLCBwbGF5LCAhcGxheSk7CisJCW1jYnNwX2RhdGEtPmFjdGl2ZS0tOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRUlOVkFMOwpAQCAtMjE1LDcgKzI1NSw3IEBACiAJc3RydWN0IG9tYXBfbWNic3BfZGF0YSAqbWNic3BfZGF0YSA9IHRvX21jYnNwKGNwdV9kYWktPnByaXZhdGVfZGF0YSk7CiAJc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyAqcmVncyA9ICZtY2JzcF9kYXRhLT5yZWdzOwogCWludCBkbWEsIGJ1c19pZCA9IG1jYnNwX2RhdGEtPmJ1c19pZCwgaWQgPSBjcHVfZGFpLT5pZDsKLQlpbnQgd2xlbiwgY2hhbm5lbHMsIHdwZjsKKwlpbnQgd2xlbiwgY2hhbm5lbHMsIHdwZiwgc3luY19tb2RlID0gT01BUF9ETUFfU1lOQ19FTEVNRU5UOwogCXVuc2lnbmVkIGxvbmcgcG9ydDsKIAl1bnNpZ25lZCBpbnQgZm9ybWF0OwogCkBAIC0yMzEsNiArMjcxLDEyIEBACiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0M3goKSkgewogCQlkbWEgPSBvbWFwMjR4eF9kbWFfcmVxc1tidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAkJcG9ydCA9IG9tYXAzNHh4X21jYnNwX3BvcnRbYnVzX2lkXVtzdWJzdHJlYW0tPnN0cmVhbV07CisJCW9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbaWRdW3N1YnN0cmVhbS0+c3RyZWFtXS5zZXRfdGhyZXNob2xkID0KKwkJCQkJCW9tYXBfbWNic3Bfc2V0X3RocmVzaG9sZDsKKwkJLyogVE9ETzogQ3VycmVudGx5LCBNT0RFX0VMRU1FTlQgPT0gTU9ERV9GUkFNRSAqLworCQlpZiAob21hcF9tY2JzcF9nZXRfZG1hX29wX21vZGUoYnVzX2lkKSA9PQorCQkJCQkJTUNCU1BfRE1BX01PREVfVEhSRVNIT0xEKQorCQkJc3luY19tb2RlID0gT01BUF9ETUFfU1lOQ19GUkFNRTsKIAl9IGVsc2UgewogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0yMzgsNiArMjg0LDcgQEAKIAkJc3Vic3RyZWFtLT5zdHJlYW0gPyAiQXVkaW8gQ2FwdHVyZSIgOiAiQXVkaW8gUGxheWJhY2siOwogCW9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbaWRdW3N1YnN0cmVhbS0+c3RyZWFtXS5kbWFfcmVxID0gZG1hOwogCW9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbaWRdW3N1YnN0cmVhbS0+c3RyZWFtXS5wb3J0X2FkZHIgPSBwb3J0OworCW9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbaWRdW3N1YnN0cmVhbS0+c3RyZWFtXS5zeW5jX21vZGUgPSBzeW5jX21vZGU7CiAJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwogCiAJaWYgKG1jYnNwX2RhdGEtPmNvbmZpZ3VyZWQpIHsKQEAgLTMyMSwxMSArMzY4LDE0IEBACiAJLyogR2VuZXJpYyBNY0JTUCByZWdpc3RlciBzZXR0aW5ncyAqLwogCXJlZ3MtPnNwY3IyCXw9IFhJTlRNKDMpIHwgRlJFRTsKIAlyZWdzLT5zcGNyMQl8PSBSSU5UTSgzKTsKLQlyZWdzLT5yY3IyCXw9IFJGSUc7Ci0JcmVncy0+eGNyMgl8PSBYRklHOworCS8qIFJGSUcgYW5kIFhGSUcgYXJlIG5vdCBkZWZpbmVkIGluIDM0eHggKi8KKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKSB7CisJCXJlZ3MtPnJjcjIJfD0gUkZJRzsKKwkJcmVncy0+eGNyMgl8PSBYRklHOworCX0KIAlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJcmVncy0+eGNjciA9IERYRU5ETFkoMSkgfCBYRE1BRU47Ci0JCXJlZ3MtPnJjY3IgPSBSRlVMTF9DWUNMRSB8IFJETUFFTjsKKwkJcmVncy0+eGNjciA9IERYRU5ETFkoMSkgfCBYRE1BRU4gfCBYRElTQUJMRTsKKwkJcmVncy0+cmNjciA9IFJGVUxMX0NZQ0xFIHwgUkRNQUVOIHwgUkRJU0FCTEU7CiAJfQogCiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewpAQCAtNDYyLDYgKzUxMiw0MCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG9tYXBfbWNic3BfZGFpX3NldF9yY3ZyX3NyYyhzdHJ1Y3Qgb21hcF9tY2JzcF9kYXRhICptY2JzcF9kYXRhLAorCQkJCSAgICAgICBpbnQgY2xrX2lkKQoreworCWludCBzZWxfYml0LCBzZXQgPSAwOworCXUxNiByZWcgPSBPTUFQMl9DT05UUk9MX0RFVkNPTkYwOworCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogVE9ETzogQ2FuIHRoaXMgYmUgaW1wbGVtZW50ZWQgZm9yIE9NQVAxPyAqLworCWlmIChtY2JzcF9kYXRhLT5idXNfaWQgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgT01BUF9NQ0JTUF9DTEtSX1NSQ19DTEtYOgorCQlzZXQgPSAxOworCWNhc2UgT01BUF9NQ0JTUF9DTEtSX1NSQ19DTEtSOgorCQlzZWxfYml0ID0gMzsKKwkJYnJlYWs7CisJY2FzZSBPTUFQX01DQlNQX0ZTUl9TUkNfRlNYOgorCQlzZXQgPSAxOworCWNhc2UgT01BUF9NQ0JTUF9GU1JfU1JDX0ZTUjoKKwkJc2VsX2JpdCA9IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzZXQpCisJCW9tYXBfY3RybF93cml0ZWwob21hcF9jdHJsX3JlYWRsKHJlZykgfCAoMSA8PCBzZWxfYml0KSwgcmVnKTsKKwllbHNlCisJCW9tYXBfY3RybF93cml0ZWwob21hcF9jdHJsX3JlYWRsKHJlZykgJiB+KDEgPDwgc2VsX2JpdCksIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBvbWFwX21jYnNwX2RhaV9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCiAJCQkJCSBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwKIAkJCQkJIGludCBkaXIpCkBAIC00ODQsNiArNTY4LDEzIEBACiAJY2FzZSBPTUFQX01DQlNQX1NZU0NMS19DTEtSX0VYVDoKIAkJcmVncy0+cGNyMAl8PSBTQ0xLTUU7CiAJCWJyZWFrOworCisJY2FzZSBPTUFQX01DQlNQX0NMS1JfU1JDX0NMS1I6CisJY2FzZSBPTUFQX01DQlNQX0NMS1JfU1JDX0NMS1g6CisJY2FzZSBPTUFQX01DQlNQX0ZTUl9TUkNfRlNSOgorCWNhc2UgT01BUF9NQ0JTUF9GU1JfU1JDX0ZTWDoKKwkJZXJyID0gb21hcF9tY2JzcF9kYWlfc2V0X3JjdnJfc3JjKG1jYnNwX2RhdGEsIGNsa19pZCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5oIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5oCmluZGV4IGM4MTQ3YWEuLjY0N2QyZjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuaAorKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAJT01BUF9NQ0JTUF9TWVNDTEtfQ0xLLAkJLyogSW50ZXJuYWwgSUNMSyAqLwogCU9NQVBfTUNCU1BfU1lTQ0xLX0NMS1hfRVhULAkvKiBFeHRlcm5hbCBDTEtYIHBpbiAqLwogCU9NQVBfTUNCU1BfU1lTQ0xLX0NMS1JfRVhULAkvKiBFeHRlcm5hbCBDTEtSIHBpbiAqLworCU9NQVBfTUNCU1BfQ0xLUl9TUkNfQ0xLUiwJLyogQ0xLUiBmcm9tIENMS1IgcGluICovCisJT01BUF9NQ0JTUF9DTEtSX1NSQ19DTEtYLAkvKiBDTEtSIGZyb20gQ0xLWCBwaW4gKi8KKwlPTUFQX01DQlNQX0ZTUl9TUkNfRlNSLAkJLyogRlNSIGZyb20gRlNSIHBpbiAqLworCU9NQVBfTUNCU1BfRlNSX1NSQ19GU1gsCQkvKiBGU1IgZnJvbSBGU1ggcGluICovCiB9OwogCiAvKiBNY0JTUCBkaXZpZGVycyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKaW5kZXggODRhMTk1MC4uNTczNTk0NSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCkBAIC01OSwxNiArNTksMzEgQEAKIAlzdHJ1Y3Qgb21hcF9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmICgoY3B1X2lzX29tYXAxNTEwKCkpICYmCisJCQkoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykpIHsKIAkJLyoKLQkJICogT01BUDE1MTAgZG9lc24ndCBzdXBwb3J0IERNQSBjaGFpbmluZyBzbyBoYXZlIHRvIHJlc3RhcnQKLQkJICogdGhlIHRyYW5zZmVyIGFmdGVyIGFsbCBwZXJpb2RzIGFyZSB0cmFuc2ZlcnJlZAorCQkgKiBPTUFQMTUxMCBkb2Vzbid0IGZ1bGx5IHN1cHBvcnQgRE1BIHByb2dyZXNzIGNvdW50ZXIKKwkJICogYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBpbXBsZW1lbnRlZCB5ZXQsCisJCSAqIHNvIGhhdmUgdG8gbWFpbnRhaW4gb3VyIG93biBwbGF5YmFjayBwcm9ncmVzcyBjb3VudGVyCisJCSAqIHRoYXQgY2FuIGJlIHVzZWQgYnkgb21hcF9wY21fcG9pbnRlcigpIGluc3RlYWQuCiAJCSAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJ0ZC0+bG9jaywgZmxhZ3MpOworCQlpZiAoKHN0YXQgPT0gT01BUF9ETUFfTEFTVF9JUlEpICYmCisJCQkJKHBydGQtPnBlcmlvZF9pbmRleCA9PSBydW50aW1lLT5wZXJpb2RzIC0gMSkpIHsKKwkJCS8qIHdlIGFyZSBpbiBzeW5jLCBkbyBub3RoaW5nICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcnRkLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm47CisJCX0KIAkJaWYgKHBydGQtPnBlcmlvZF9pbmRleCA+PSAwKSB7Ci0JCQlpZiAoKytwcnRkLT5wZXJpb2RfaW5kZXggPT0gcnVudGltZS0+cGVyaW9kcykgeworCQkJaWYgKHN0YXQgJiBPTUFQX0RNQV9CTE9DS19JUlEpIHsKKwkJCQkvKiBlbmQgb2YgYnVmZmVyIHJlYWNoZWQsIGxvb3AgYmFjayAqLwogCQkJCXBydGQtPnBlcmlvZF9pbmRleCA9IDA7Ci0JCQkJb21hcF9zdGFydF9kbWEocHJ0ZC0+ZG1hX2NoKTsKKwkJCX0gZWxzZSBpZiAoc3RhdCAmIE9NQVBfRE1BX0xBU1RfSVJRKSB7CisJCQkJLyogdXBkYXRlIHRoZSBjb3VudGVyIGZvciB0aGUgbGFzdCBwZXJpb2QgKi8KKwkJCQlwcnRkLT5wZXJpb2RfaW5kZXggPSBydW50aW1lLT5wZXJpb2RzIC0gMTsKKwkJCX0gZWxzZSBpZiAoKytwcnRkLT5wZXJpb2RfaW5kZXggPj0gcnVudGltZS0+cGVyaW9kcykgeworCQkJCS8qIGVuZCBvZiBidWZmZXIgbWlzc2VkPyBsb29wIGJhY2sgKi8KKwkJCQlwcnRkLT5wZXJpb2RfaW5kZXggPSAwOwogCQkJfQogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBydGQtPmxvY2ssIGZsYWdzKTsKQEAgLTEwMCw3ICsxMTUsNyBAQAogCXBydGQtPmRtYV9kYXRhID0gZG1hX2RhdGE7CiAJZXJyID0gb21hcF9yZXF1ZXN0X2RtYShkbWFfZGF0YS0+ZG1hX3JlcSwgZG1hX2RhdGEtPm5hbWUsCiAJCQkgICAgICAgb21hcF9wY21fZG1hX2lycSwgc3Vic3RyZWFtLCAmcHJ0ZC0+ZG1hX2NoKTsKLQlpZiAoIWVyciAmJiAhY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoIWVycikgewogCQkvKgogCQkgKiBMaW5rIGNoYW5uZWwgd2l0aCBpdHNlbGYgc28gRE1BIGRvZXNuJ3QgbmVlZCBhbnkKIAkJICogcmVwcm9ncmFtbWluZyB3aGlsZSBsb29waW5nIHRoZSBidWZmZXIKQEAgLTExOSw4ICsxMzQsNyBAQAogCWlmIChwcnRkLT5kbWFfZGF0YSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCi0JCW9tYXBfZG1hX3VubGlua19sY2gocHJ0ZC0+ZG1hX2NoLCBwcnRkLT5kbWFfY2gpOworCW9tYXBfZG1hX3VubGlua19sY2gocHJ0ZC0+ZG1hX2NoLCBwcnRkLT5kbWFfY2gpOwogCW9tYXBfZnJlZV9kbWEocHJ0ZC0+ZG1hX2NoKTsKIAlwcnRkLT5kbWFfZGF0YSA9IE5VTEw7CiAKQEAgLTE0OCw3ICsxNjIsNyBAQAogCSAqLwogCWRtYV9wYXJhbXMuZGF0YV90eXBlCQkJPSBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2OwogCWRtYV9wYXJhbXMudHJpZ2dlcgkJCT0gZG1hX2RhdGEtPmRtYV9yZXE7Ci0JZG1hX3BhcmFtcy5zeW5jX21vZGUJCQk9IE9NQVBfRE1BX1NZTkNfRUxFTUVOVDsKKwlkbWFfcGFyYW1zLnN5bmNfbW9kZQkJCT0gZG1hX2RhdGEtPnN5bmNfbW9kZTsKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewogCQlkbWFfcGFyYW1zLnNyY19hbW9kZQkJPSBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQzsKIAkJZG1hX3BhcmFtcy5kc3RfYW1vZGUJCT0gT01BUF9ETUFfQU1PREVfQ09OU1RBTlQ7CkBAIC0xNzQsNyArMTg4LDE1IEBACiAJZG1hX3BhcmFtcy5mcmFtZV9jb3VudAk9IHJ1bnRpbWUtPnBlcmlvZHM7CiAJb21hcF9zZXRfZG1hX3BhcmFtcyhwcnRkLT5kbWFfY2gsICZkbWFfcGFyYW1zKTsKIAotCW9tYXBfZW5hYmxlX2RtYV9pcnEocHJ0ZC0+ZG1hX2NoLCBPTUFQX0RNQV9GUkFNRV9JUlEpOworCWlmICgoY3B1X2lzX29tYXAxNTEwKCkpICYmCisJCQkoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykpCisJCW9tYXBfZW5hYmxlX2RtYV9pcnEocHJ0ZC0+ZG1hX2NoLCBPTUFQX0RNQV9GUkFNRV9JUlEgfAorCQkJICAgICAgT01BUF9ETUFfTEFTVF9JUlEgfCBPTUFQX0RNQV9CTE9DS19JUlEpOworCWVsc2UKKwkJb21hcF9lbmFibGVfZG1hX2lycShwcnRkLT5kbWFfY2gsIE9NQVBfRE1BX0ZSQU1FX0lSUSk7CisKKwlvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUocHJ0ZC0+ZG1hX2NoLCBPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKKwlvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKHBydGQtPmRtYV9jaCwgT01BUF9ETUFfREFUQV9CVVJTVF8xNik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4Myw2ICsyMDUsNyBAQAogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IG9tYXBfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBvbWFwX3BjbV9kbWFfZGF0YSAqZG1hX2RhdGEgPSBwcnRkLT5kbWFfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCkBAIC0xOTIsNiArMjE1LDEwIEBACiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgogCQlwcnRkLT5wZXJpb2RfaW5kZXggPSAwOworCQkvKiBDb25maWd1cmUgTWNCU1AgaW50ZXJuYWwgYnVmZmVyIHVzYWdlICovCisJCWlmIChkbWFfZGF0YS0+c2V0X3RocmVzaG9sZCkKKwkJCWRtYV9kYXRhLT5zZXRfdGhyZXNob2xkKHN1YnN0cmVhbSk7CisKIAkJb21hcF9zdGFydF9kbWEocHJ0ZC0+ZG1hX2NoKTsKIAkJYnJlYWs7CiAKQEAgLTI4OCw3ICszMTUsNyBAQAogCS5tbWFwCQk9IG9tYXBfcGNtX21tYXAsCiB9OwogCi1zdGF0aWMgdTY0IG9tYXBfcGNtX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHU2NCBvbWFwX3BjbV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDY0KTsKIAogc3RhdGljIGludCBvbWFwX3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHN0cnVjdCBzbmRfcGNtICpwY20sCiAJaW50IHN0cmVhbSkKQEAgLTMzMCw3ICszNTcsNyBAQAogCX0KIH0KIAotaW50IG9tYXBfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorc3RhdGljIGludCBvbWFwX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKIAkJIHN0cnVjdCBzbmRfcGNtICpwY20pCiB7CiAJaW50IHJldCA9IDA7CkBAIC0zMzgsNyArMzY1LDcgQEAKIAlpZiAoIWNhcmQtPmRldi0+ZG1hX21hc2spCiAJCWNhcmQtPmRldi0+ZG1hX21hc2sgPSAmb21hcF9wY21fZG1hbWFzazsKIAlpZiAoIWNhcmQtPmRldi0+Y29oZXJlbnRfZG1hX21hc2spCi0JCWNhcmQtPmRldi0+Y29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworCQljYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDY0KTsKIAogCWlmIChkYWktPnBsYXliYWNrLmNoYW5uZWxzX21pbikgewogCQlyZXQgPSBvbWFwX3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHBjbSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmggYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5oCmluZGV4IDhkOWQyNjkuLjM4YTgyMWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmgKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uaApAQCAtMjksNiArMjksOCBAQAogCWNoYXIJCSpuYW1lOwkJLyogc3RyZWFtIGlkZW50aWZpZXIgKi8KIAlpbnQJCWRtYV9yZXE7CS8qIERNQSByZXF1ZXN0IGxpbmUgKi8KIAl1bnNpZ25lZCBsb25nCXBvcnRfYWRkcjsJLyogdHJhbnNtaXQvcmVjZWl2ZSByZWdpc3RlciAqLworCWludAkJc3luY19tb2RlOwkvKiBETUEgc3luYyBtb2RlICovCisJdm9pZCAoKnNldF90aHJlc2hvbGQpKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKIH07CiAKIGV4dGVybiBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBvbWFwX3NvY19wbGF0Zm9ybTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYyBiL3NvdW5kL3NvYy9vbWFwL3NkcDM0MzAuYwppbmRleCBiNzE5ZTVkLi40YTNmNjJkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9zZHAzNDMwLmMKKysrIGIvc291bmQvc29jL29tYXAvc2RwMzQzMC5jCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KQEAgLTM5LDYgKzQwLDExIEBACiAjaW5jbHVkZSAib21hcC1wY20uaCIKICNpbmNsdWRlICIuLi9jb2RlY3MvdHdsNDAzMC5oIgogCisvKiBUV0w0MDMwIFBNQlIxIFJlZ2lzdGVyICovCisjZGVmaW5lIFRXTDQwMzBfSU5UQlJfUE1CUjEJCTB4MEQKKy8qIFRXTDQwMzAgUE1CUjEgUmVnaXN0ZXIgR1BJTzYgbXV4IGJpdCAqLworI2RlZmluZSBUV0w0MDMwX0dQSU82X1BXTTBfTVVURSh2YWx1ZSkJKHZhbHVlIDw8IDIpCisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNuZF9zb2Nfc2RwMzQzMDsKIAogc3RhdGljIGludCBzZHAzNDMwX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKQEAgLTk2LDcgKzEwMiw3IEBACiAJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksCiAJCQkJU05EX1NPQ19EQUlGTVRfRFNQX0EgfAogCQkJCVNORF9TT0NfREFJRk1UX0lCX05GIHwKLQkJCQlTTkRfU09DX0RBSUZNVF9DQlNfQ0ZNKTsKKwkJCQlTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3Qgc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uXG4iKTsKIAkJcmV0dXJuIHJldDsKQEAgLTI4MCw2ICsyODYsNyBAQAogc3RhdGljIHN0cnVjdCB0d2w0MDMwX3NldHVwX2RhdGEgdHdsNDAzMF9zZXR1cCA9IHsKIAkucmFtcF9kZWxheV92YWx1ZSA9IDMsCiAJLnN5c2NsayA9IDI2MDAwLAorCS5oc19leHRtdXRlID0gMSwKIH07CiAKIC8qIEF1ZGlvIHN1YnN5c3RlbSAqLwpAQCAtMjk0LDYgKzMwMSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBzZHAzNDMwX3NvY19pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKKwl1OCBwaW5fbXV4OwogCiAJaWYgKCFtYWNoaW5lX2lzX29tYXBfMzQzMHNkcCgpKSB7CiAJCXByX2RlYnVnKCJOb3QgU0RQMzQzMCFcbiIpOwpAQCAtMzEyLDYgKzMyMCwxNCBAQAogCSoodW5zaWduZWQgaW50ICopc2RwMzQzMF9kYWlbMF0uY3B1X2RhaS0+cHJpdmF0ZV9kYXRhID0gMTsgLyogTWNCU1AyICovCiAJKih1bnNpZ25lZCBpbnQgKilzZHAzNDMwX2RhaVsxXS5jcHVfZGFpLT5wcml2YXRlX2RhdGEgPSAyOyAvKiBNY0JTUDMgKi8KIAorCS8qIFNldCBUV0w0MDMwIEdQSU82IGFzIEVYVE1VVEUgc2lnbmFsICovCisJdHdsNDAzMF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9JTlRCUiwgJnBpbl9tdXgsCisJCQkJCQlUV0w0MDMwX0lOVEJSX1BNQlIxKTsKKwlwaW5fbXV4ICY9IH5UV0w0MDMwX0dQSU82X1BXTTBfTVVURSgweDAzKTsKKwlwaW5fbXV4IHw9IFRXTDQwMzBfR1BJTzZfUFdNMF9NVVRFKDB4MDIpOworCXR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0lOVEJSLCBwaW5fbXV4LAorCQkJCQkJVFdMNDAzMF9JTlRCUl9QTUJSMSk7CisKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHNkcDM0MzBfc25kX2RldmljZSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnIxOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvem9vbTIuYyBiL3NvdW5kL3NvYy9vbWFwL3pvb20yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwYjQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9vbWFwL3pvb20yLmMKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKiB6b29tMi5jICAtLSAgU29DIGF1ZGlvIGZvciBab29tMgorICoKKyAqIEF1dGhvcjogTWlzYWVsIExvcGV6IENydXogPHgwMDUyNzI5QHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvbWNic3AuaD4KKworI2luY2x1ZGUgIm9tYXAtbWNic3AuaCIKKyNpbmNsdWRlICJvbWFwLXBjbS5oIgorI2luY2x1ZGUgIi4uL2NvZGVjcy90d2w0MDMwLmgiCisKKyNkZWZpbmUgWk9PTTJfSEVBRFNFVF9NVVhfR1BJTwkJKE9NQVBfTUFYX0dQSU9fTElORVMgKyAxNSkKKyNkZWZpbmUgWk9PTTJfSEVBRFNFVF9FWFRNVVRFX0dQSU8JMTUzCisKK3N0YXRpYyBpbnQgem9vbTJfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJaW50IHJldDsKKworCS8qIFNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLAorCQkJCSAgU05EX1NPQ19EQUlGTVRfSTJTIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3Qgc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBTZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLAorCQkJCSAgU05EX1NPQ19EQUlGTVRfSTJTIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3Qgc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvblxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogU2V0IHRoZSBjb2RlYyBzeXN0ZW0gY2xvY2sgZm9yIERBQyBhbmQgQURDICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIDAsIDI2MDAwMDAwLAorCQkJCQlTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IHNldCBjb2RlYyBzeXN0ZW0gY2xvY2tcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIHpvb20yX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gem9vbTJfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIGludCB6b29tMl9od192b2ljZV9wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlpbnQgcmV0OworCisJLyogU2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksCisJCQkJU05EX1NPQ19EQUlGTVRfRFNQX0EgfAorCQkJCVNORF9TT0NfREFJRk1UX0lCX05GIHwKKwkJCQlTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3Qgc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBTZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLAorCQkJCVNORF9TT0NfREFJRk1UX0RTUF9BIHwKKwkJCQlTTkRfU09DX0RBSUZNVF9JQl9ORiB8CisJCQkJU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBTZXQgdGhlIGNvZGVjIHN5c3RlbSBjbG9jayBmb3IgREFDIGFuZCBBREMgKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwgMjYwMDAwMDAsCisJCQkJCVNORF9TT0NfQ0xPQ0tfSU4pOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3Qgc2V0IGNvZGVjIHN5c3RlbSBjbG9ja1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgem9vbTJfdm9pY2Vfb3BzID0geworCS5od19wYXJhbXMgPSB6b29tMl9od192b2ljZV9wYXJhbXMsCit9OworCisvKiBab29tMiBtYWNoaW5lIERBUE0gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB6b29tMl90d2w0MDMwX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9NSUMoIkV4dCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJFeHQgU3BrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRzZXQgU3RlcmVvcGhvbmUiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTElORSgiQXV4IEluIiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwkvKiBFeHRlcm5hbCBNaWNzOiBNQUlOTUlDLCBTVUJNSUMgd2l0aCBiaWFzKi8KKwl7Ik1BSU5NSUMiLCBOVUxMLCAiTWljIEJpYXMgMSJ9LAorCXsiU1VCTUlDIiwgTlVMTCwgIk1pYyBCaWFzIDIifSwKKwl7Ik1pYyBCaWFzIDEiLCBOVUxMLCAiRXh0IE1pYyJ9LAorCXsiTWljIEJpYXMgMiIsIE5VTEwsICJFeHQgTWljIn0sCisKKwkvKiBFeHRlcm5hbCBTcGVha2VyczogSEZMLCBIRlIgKi8KKwl7IkV4dCBTcGsiLCBOVUxMLCAiSEZMIn0sCisJeyJFeHQgU3BrIiwgTlVMTCwgIkhGUiJ9LAorCisJLyogSGVhZHNldCBTdGVyZW9waG9uZTogIEhTT0wsIEhTT1IgKi8KKwl7IkhlYWRzZXQgU3RlcmVvcGhvbmUiLCBOVUxMLCAiSFNPTCJ9LAorCXsiSGVhZHNldCBTdGVyZW9waG9uZSIsIE5VTEwsICJIU09SIn0sCisKKwkvKiBIZWFkc2V0IE1pYzogSFNNSUMgd2l0aCBiaWFzICovCisJeyJIU01JQyIsIE5VTEwsICJIZWFkc2V0IE1pYyBCaWFzIn0sCisJeyJIZWFkc2V0IE1pYyBCaWFzIiwgTlVMTCwgIkhlYWRzZXQgTWljIn0sCisKKwkvKiBBdXggSW46IEFVWEwsIEFVWFIgKi8KKwl7IkF1eCBJbiIsIE5VTEwsICJBVVhMIn0sCisJeyJBdXggSW4iLCBOVUxMLCAiQVVYUiJ9LAorfTsKKworc3RhdGljIGludCB6b29tMl90d2w0MDMwX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCByZXQ7CisKKwkvKiBBZGQgWm9vbTIgc3BlY2lmaWMgd2lkZ2V0cyAqLworCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHpvb20yX3R3bDQwMzBfZGFwbV93aWRnZXRzLAorCQkJCUFSUkFZX1NJWkUoem9vbTJfdHdsNDAzMF9kYXBtX3dpZGdldHMpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU2V0IHVwIFpvb20yIHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwICovCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKworCS8qIFpvb20yIGNvbm5lY3RlZCBwaW5zICovCisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFeHQgTWljIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFeHQgU3BrIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHNldCBTdGVyZW9waG9uZSIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiQXV4IEluIik7CisKKwkvKiBUV0w0MDMwIG5vdCBjb25uZWN0ZWQgcGlucyAqLworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRNSUMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRElHSU1JQzAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRElHSU1JQzEiKTsKKworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVRMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVFIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRUFSUElFQ0UiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBSRURSSVZFUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVFIiKTsKKworCXJldCA9IHNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgem9vbTJfdHdsNDAzMF92b2ljZV9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBzaG9ydCByZWc7CisKKwkvKiBFbmFibGUgdm9pY2UgaW50ZXJmYWNlICovCisJcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIFRXTDQwMzBfUkVHX1ZPSUNFX0lGKTsKKwlyZWcgfD0gVFdMNDAzMF9WSUZfRElOX0VOIHwgVFdMNDAzMF9WSUZfRE9VVF9FTiB8IFRXTDQwMzBfVklGX0VOOworCWNvZGVjLT53cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfVk9JQ0VfSUYsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogRGlnaXRhbCBhdWRpbyBpbnRlcmZhY2UgZ2x1ZSAtIGNvbm5lY3RzIGNvZGVjIDwtLT4gQ1BVICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgem9vbTJfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJUV0w0MDMwIEkyUyIsCisJCS5zdHJlYW1fbmFtZSA9ICJUV0w0MDMwIEF1ZGlvIiwKKwkJLmNwdV9kYWkgPSAmb21hcF9tY2JzcF9kYWlbMF0sCisJCS5jb2RlY19kYWkgPSAmdHdsNDAzMF9kYWlbVFdMNDAzMF9EQUlfSElGSV0sCisJCS5pbml0ID0gem9vbTJfdHdsNDAzMF9pbml0LAorCQkub3BzID0gJnpvb20yX29wcywKKwl9LAorCXsKKwkJLm5hbWUgPSAiVFdMNDAzMCBQQ00iLAorCQkuc3RyZWFtX25hbWUgPSAiVFdMNDAzMCBWb2ljZSIsCisJCS5jcHVfZGFpID0gJm9tYXBfbWNic3BfZGFpWzFdLAorCQkuY29kZWNfZGFpID0gJnR3bDQwMzBfZGFpW1RXTDQwMzBfREFJX1ZPSUNFXSwKKwkJLmluaXQgPSB6b29tMl90d2w0MDMwX3ZvaWNlX2luaXQsCisJCS5vcHMgPSAmem9vbTJfdm9pY2Vfb3BzLAorCX0sCit9OworCisvKiBBdWRpbyBtYWNoaW5lIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY196b29tMiA9IHsKKwkubmFtZSA9ICJab29tMiIsCisJLnBsYXRmb3JtID0gJm9tYXBfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluayA9IHpvb20yX2RhaSwKKwkubnVtX2xpbmtzID0gQVJSQVlfU0laRSh6b29tMl9kYWkpLAorfTsKKworLyogRVhUTVVURSBjYWxsYmFjayBmdW5jdGlvbiAqLwordm9pZCB6b29tMl9zZXRfaHNfZXh0bXV0ZShpbnQgbXV0ZSkKK3sKKwlncGlvX3NldF92YWx1ZShaT09NMl9IRUFEU0VUX0VYVE1VVEVfR1BJTywgbXV0ZSk7Cit9CisKKy8qIHR3bDQwMzAgc2V0dXAgKi8KK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9zZXR1cF9kYXRhIHR3bDQwMzBfc2V0dXAgPSB7CisJLnJhbXBfZGVsYXlfdmFsdWUgPSAzLAkvKiAxNjEgbXMgKi8KKwkuc3lzY2xrID0gMjYwMDAsCisJLmhzX2V4dG11dGUgPSAxLAorCS5zZXRfaHNfZXh0bXV0ZSA9IHpvb20yX3NldF9oc19leHRtdXRlLAorfTsKKworLyogQXVkaW8gc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIHpvb20yX3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJnNuZF9zb2Nfem9vbTIsCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3R3bDQwMzAsCisJLmNvZGVjX2RhdGEgPSAmdHdsNDAzMF9zZXR1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp6b29tMl9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCB6b29tMl9zb2NfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfb21hcF96b29tMigpKSB7CisJCXByX2RlYnVnKCJOb3QgWm9vbTIhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXByaW50ayhLRVJOX0lORk8gIlpvb20yIFNvQyBpbml0XG4iKTsKKworCXpvb20yX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIXpvb20yX3NuZF9kZXZpY2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSh6b29tMl9zbmRfZGV2aWNlLCAmem9vbTJfc25kX2RldmRhdGEpOworCXpvb20yX3NuZF9kZXZkYXRhLmRldiA9ICZ6b29tMl9zbmRfZGV2aWNlLT5kZXY7CisJKih1bnNpZ25lZCBpbnQgKil6b29tMl9kYWlbMF0uY3B1X2RhaS0+cHJpdmF0ZV9kYXRhID0gMTsgLyogTWNCU1AyICovCisJKih1bnNpZ25lZCBpbnQgKil6b29tMl9kYWlbMV0uY3B1X2RhaS0+cHJpdmF0ZV9kYXRhID0gMjsgLyogTWNCU1AzICovCisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHpvb20yX3NuZF9kZXZpY2UpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMTsKKworCUJVR19PTihncGlvX3JlcXVlc3QoWk9PTTJfSEVBRFNFVF9NVVhfR1BJTywgImhzX211eCIpIDwgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFpPT00yX0hFQURTRVRfTVVYX0dQSU8sIDApOworCisJQlVHX09OKGdwaW9fcmVxdWVzdChaT09NMl9IRUFEU0VUX0VYVE1VVEVfR1BJTywgImV4dF9tdXRlIikgPCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoWk9PTTJfSEVBRFNFVF9FWFRNVVRFX0dQSU8sIDApOworCisJcmV0dXJuIDA7CisKK2VycjE6CisJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWRkIHBsYXRmb3JtIGRldmljZVxuIik7CisJcGxhdGZvcm1fZGV2aWNlX3B1dCh6b29tMl9zbmRfZGV2aWNlKTsKKworCXJldHVybiByZXQ7Cit9Cittb2R1bGVfaW5pdCh6b29tMl9zb2NfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB6b29tMl9zb2NfZXhpdCh2b2lkKQoreworCWdwaW9fZnJlZShaT09NMl9IRUFEU0VUX01VWF9HUElPKTsKKwlncGlvX2ZyZWUoWk9PTTJfSEVBRFNFVF9FWFRNVVRFX0dQSU8pOworCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoem9vbTJfc25kX2RldmljZSk7Cit9Cittb2R1bGVfZXhpdCh6b29tMl9zb2NfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1pc2FlbCBMb3BleiBDcnV6IDx4MDA1MjcyOUB0aS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIFpvb20yIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvbWFnaWNpYW4uYyBiL3NvdW5kL3NvYy9weGEvbWFnaWNpYW4uYwppbmRleCAzMjY5NTVkLi45ZjdjNjFlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL21hZ2ljaWFuLmMKKysrIGIvc291bmQvc29jL3B4YS9tYWdpY2lhbi5jCkBAIC0yMCwxMiArMjAsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC91ZGExMzgwLmg+CiAKICNpbmNsdWRlIDxtYWNoL21hZ2ljaWFuLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTE4OCw3ICsxOTAsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3RkbV9zbG90KGNwdV9kYWksIDEsIDEpOworCXJldCA9IHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChjcHVfZGFpLCAxLCAwLCAxLCB3aWR0aCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTQ0NywzNCArNDQ5LDQ3IEBACiAJLnBsYXRmb3JtID0gJnB4YTJ4eF9zb2NfcGxhdGZvcm0sCiB9OwogCi0vKiBtYWdpY2lhbiBhdWRpbyBwcml2YXRlIGRhdGEgKi8KLXN0YXRpYyBzdHJ1Y3QgdWRhMTM4MF9zZXR1cF9kYXRhIG1hZ2ljaWFuX3VkYTEzODBfc2V0dXAgPSB7Ci0JLmkyY19hZGRyZXNzID0gMHgxOCwKLQkuZGFjX2NsayA9IFVEQTEzODBfREFDX0NMS19XU1BMTCwKLX07Ci0KIC8qIG1hZ2ljaWFuIGF1ZGlvIHN1YnN5c3RlbSAqLwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBtYWdpY2lhbl9zbmRfZGV2ZGF0YSA9IHsKIAkuY2FyZCA9ICZzbmRfc29jX2NhcmRfbWFnaWNpYW4sCiAJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3VkYTEzODAsCi0JLmNvZGVjX2RhdGEgPSAmbWFnaWNpYW5fdWRhMTM4MF9zZXR1cCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptYWdpY2lhbl9zbmRfZGV2aWNlOwogCisvKgorICogRklYTUU6IG1vdmUgaW50byBtYWdpY2lhbiBib2FyZCBmaWxlIG9uY2UgbWVyZ2VkIGludG8gdGhlIHB4YSB0cmVlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdWRhMTM4MF9wbGF0Zm9ybV9kYXRhIHVkYTEzODBfaW5mbyA9IHsKKwkuZ3Bpb19wb3dlciA9IEVHUElPX01BR0lDSUFOX0NPREVDX1BPV0VSLAorCS5ncGlvX3Jlc2V0ID0gRUdQSU9fTUFHSUNJQU5fQ09ERUNfUkVTRVQsCisJLmRhY19jbGsgICAgPSBVREExMzgwX0RBQ19DTEtfV1NQTEwsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidWRhMTM4MCIsIDB4MTgpLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ1ZGExMzgwX2luZm8sCisJfSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IG1hZ2ljaWFuX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCiAJaWYgKCFtYWNoaW5lX2lzX21hZ2ljaWFuKCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KEVHUElPX01BR0lDSUFOX0NPREVDX1BPV0VSLCAiQ09ERUNfUE9XRVIiKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9yZXF1ZXN0X3Bvd2VyOwotCXJldCA9IGdwaW9fcmVxdWVzdChFR1BJT19NQUdJQ0lBTl9DT0RFQ19SRVNFVCwgIkNPREVDX1JFU0VUIik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfcmVxdWVzdF9yZXNldDsKKwlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKDApOworCWlmICghYWRhcHRlcikKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgaTJjX2JvYXJkX2luZm8pOworCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKKwlpZiAoIWNsaWVudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlyZXQgPSBncGlvX3JlcXVlc3QoRUdQSU9fTUFHSUNJQU5fU1BLX1BPV0VSLCAiU1BLX1BPV0VSIik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfcmVxdWVzdF9zcGs7CkBAIC00OTEsMTQgKzUwNiw4IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfcmVxdWVzdF9pbl9zZWwxOwogCi0JZ3Bpb19zZXRfdmFsdWUoRUdQSU9fTUFHSUNJQU5fQ09ERUNfUE9XRVIsIDEpOwogCWdwaW9fc2V0X3ZhbHVlKEVHUElPX01BR0lDSUFOX0lOX1NFTDAsIDApOwogCi0JLyogd2UgbWF5IG5lZWQgdG8gaGF2ZSB0aGUgY2xvY2sgcnVubmluZyBoZXJlIC0gcEg1ICovCi0JZ3Bpb19zZXRfdmFsdWUoRUdQSU9fTUFHSUNJQU5fQ09ERUNfUkVTRVQsIDEpOwotCXVkZWxheSg1KTsKLQlncGlvX3NldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9DT0RFQ19SRVNFVCwgMCk7Ci0KIAltYWdpY2lhbl9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CiAJaWYgKCFtYWdpY2lhbl9zbmRfZGV2aWNlKSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC01MjYsMTAgKzUzNSw2IEBACiBlcnJfcmVxdWVzdF9lcDoKIAlncGlvX2ZyZWUoRUdQSU9fTUFHSUNJQU5fU1BLX1BPV0VSKTsKIGVycl9yZXF1ZXN0X3NwazoKLQlncGlvX2ZyZWUoRUdQSU9fTUFHSUNJQU5fQ09ERUNfUkVTRVQpOwotZXJyX3JlcXVlc3RfcmVzZXQ6Ci0JZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX0NPREVDX1BPV0VSKTsKLWVycl9yZXF1ZXN0X3Bvd2VyOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU0MCwxNSArNTQ1LDEyIEBACiAJZ3Bpb19zZXRfdmFsdWUoRUdQSU9fTUFHSUNJQU5fU1BLX1BPV0VSLCAwKTsKIAlncGlvX3NldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9FUF9QT1dFUiwgMCk7CiAJZ3Bpb19zZXRfdmFsdWUoRUdQSU9fTUFHSUNJQU5fTUlDX1BPV0VSLCAwKTsKLQlncGlvX3NldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9DT0RFQ19QT1dFUiwgMCk7CiAKIAlncGlvX2ZyZWUoRUdQSU9fTUFHSUNJQU5fSU5fU0VMMSk7CiAJZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX0lOX1NFTDApOwogCWdwaW9fZnJlZShFR1BJT19NQUdJQ0lBTl9NSUNfUE9XRVIpOwogCWdwaW9fZnJlZShFR1BJT19NQUdJQ0lBTl9FUF9QT1dFUik7CiAJZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX1NQS19QT1dFUik7Ci0JZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX0NPREVDX1JFU0VUKTsKLQlncGlvX2ZyZWUoRUdQSU9fTUFHSUNJQU5fQ09ERUNfUE9XRVIpOwogfQogCiBtb2R1bGVfaW5pdChtYWdpY2lhbl9pbml0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jIGIvc291bmQvc29jL3B4YS9wYWxtMjd4LmMKaW5kZXggZTYxMDJmZC4uMWY5NmUzMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9wYWxtMjd4LmMKKysrIGIvc291bmQvc29jL3B4YS9wYWxtMjd4LmMKQEAgLTE3LDEzICsxNywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CkBAIC0zMyw5MCArMzIsMzEgQEAKICNpbmNsdWRlICJweGEyeHgtcGNtLmgiCiAjaW5jbHVkZSAicHhhMnh4LWFjOTcuaCIKIAotc3RhdGljIGludCBwYWxtMjd4X2phY2tfZnVuYyA9IDE7Ci1zdGF0aWMgaW50IHBhbG0yN3hfc3BrX2Z1bmMgPSAxOwotc3RhdGljIGludCBwYWxtMjd4X2VwX2dwaW8gPSAtMTsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrIGhzX2phY2s7CiAKLXN0YXRpYyB2b2lkIHBhbG0yN3hfZXh0X2NvbnRyb2woc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQotewotCWlmICghcGFsbTI3eF9zcGtfZnVuYykKLQkJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJTcGVha2VyIik7Ci0JZWxzZQotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJTcGVha2VyIik7Ci0KLQlpZiAoIXBhbG0yN3hfamFja19mdW5jKQotCQlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkhlYWRwaG9uZSBKYWNrIik7Ci0JZWxzZQotCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkcGhvbmUgSmFjayIpOwotCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOwotfQotCi1zdGF0aWMgaW50IHBhbG0yN3hfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNhcmQtPmNvZGVjOwotCi0JLyogY2hlY2sgdGhlIGphY2sgc3RhdHVzIGF0IHN0cmVhbSBzdGFydHVwICovCi0JcGFsbTI3eF9leHRfY29udHJvbChjb2RlYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgcGFsbTI3eF9vcHMgPSB7Ci0JLnN0YXJ0dXAgPSBwYWxtMjd4X3N0YXJ0dXAsCisvKiBIZWFkcGhvbmVzIGphY2sgZGV0ZWN0aW9uIERBUE0gcGlucyAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfcGluIGhzX2phY2tfcGluc1tdID0geworCXsKKwkJLnBpbiAgICA9ICJIZWFkcGhvbmUgSmFjayIsCisJCS5tYXNrICAgPSBTTkRfSkFDS19IRUFEUEhPTkUsCisJfSwKIH07CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBwYWxtMjd4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICp2KQotewotCXBhbG0yN3hfc3BrX2Z1bmMgPSBncGlvX2dldF92YWx1ZShwYWxtMjd4X2VwX2dwaW8pOwotCXBhbG0yN3hfamFja19mdW5jID0gIXBhbG0yN3hfc3BrX2Z1bmM7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQorLyogSGVhZHBob25lcyBqYWNrIGRldGVjdGlvbiBncGlvcyAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyBoc19qYWNrX2dwaW9zW10gPSB7CisJWzBdID0geworCQkvKiBncGlvIGlzIHNldCBvbiBwZXItcGxhdGZvcm0gYmFzaXMgKi8KKwkJLm5hbWUgICAgICAgICAgID0gImhwLWdwaW8iLAorCQkucmVwb3J0ICAgICAgICAgPSBTTkRfSkFDS19IRUFEUEhPTkUsCisJCS5kZWJvdW5jZV90aW1lCT0gMjAwLAorCX0sCit9OwogCi1zdGF0aWMgaW50IHBhbG0yN3hfZ2V0X2phY2soc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0Jc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBwYWxtMjd4X2phY2tfZnVuYzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwYWxtMjd4X3NldF9qYWNrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0KLQlpZiAocGFsbTI3eF9qYWNrX2Z1bmMgPT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCi0JCXJldHVybiAwOwotCi0JcGFsbTI3eF9qYWNrX2Z1bmMgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKLQlwYWxtMjd4X2V4dF9jb250cm9sKGNvZGVjKTsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBwYWxtMjd4X2dldF9zcGsoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0Jc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBwYWxtMjd4X3Nwa19mdW5jOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBhbG0yN3hfc2V0X3NwayhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAgc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCi0JaWYgKHBhbG0yN3hfc3BrX2Z1bmMgPT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCi0JCXJldHVybiAwOwotCi0JcGFsbTI3eF9zcGtfZnVuYyA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotCXBhbG0yN3hfZXh0X2NvbnRyb2woY29kZWMpOwotCXJldHVybiAxOwotfQotCi0vKiBQYWxtVFggbWFjaGluZSBkYXBtIHdpZGdldHMgKi8KKy8qIFBhbG0yN3ggbWFjaGluZSBkYXBtIHdpZGdldHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBwYWxtMjd4X2RhcG1fd2lkZ2V0c1tdID0gewogCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKLQlTTkRfU09DX0RBUE1fU1BLKCJTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiRXh0LiBTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiRXh0LiBNaWNyb3Bob25lIiwgTlVMTCksCiB9OwogCiAvKiBQYWxtVFggYXVkaW8gbWFwICovCkBAIC0xMjYsNDYgKzY2LDY2IEBACiAJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUE9VVFIifSwKIAogCS8qIGV4dCBzcGVha2VyIGNvbm5lY3RlZCB0byBST1VUMiwgTE9VVDIgKi8KLQl7IlNwZWFrZXIiLCBOVUxMLCAiTE9VVDIifSwKLQl7IlNwZWFrZXIiLCBOVUxMLCAiUk9VVDIifSwKKwl7IkV4dC4gU3BlYWtlciIsIE5VTEwsICJMT1VUMiJ9LAorCXsiRXh0LiBTcGVha2VyIiwgTlVMTCwgIlJPVVQyIn0sCisKKwkvKiBtaWMgY29ubmVjdGVkIHRvIE1JQzEgKi8KKwl7IkV4dC4gTWljcm9waG9uZSIsIE5VTEwsICJNSUMxIn0sCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqamFja19mdW5jdGlvbltdID0geyJIZWFkcGhvbmUiLCAiT2ZmIn07Ci1zdGF0aWMgY29uc3QgY2hhciAqc3BrX2Z1bmN0aW9uW10gPSB7Ik9uIiwgIk9mZiJ9Owotc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBwYWxtMjd4X2VudW1bXSA9IHsKLQlTT0NfRU5VTV9TSU5HTEVfRVhUKDIsIGphY2tfZnVuY3Rpb24pLAotCVNPQ19FTlVNX1NJTkdMRV9FWFQoMiwgc3BrX2Z1bmN0aW9uKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBwYWxtMjd4X2NvbnRyb2xzW10gPSB7Ci0JU09DX0VOVU1fRVhUKCJKYWNrIEZ1bmN0aW9uIiwgcGFsbTI3eF9lbnVtWzBdLCBwYWxtMjd4X2dldF9qYWNrLAotCQlwYWxtMjd4X3NldF9qYWNrKSwKLQlTT0NfRU5VTV9FWFQoIlNwZWFrZXIgRnVuY3Rpb24iLCBwYWxtMjd4X2VudW1bMV0sIHBhbG0yN3hfZ2V0X3NwaywKLQkJcGFsbTI3eF9zZXRfc3BrKSwKLX07CitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBwYWxtMjd4X2Fzb2M7CiAKIHN0YXRpYyBpbnQgcGFsbTI3eF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewogCWludCBlcnI7CiAKLQlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUMyIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PT1VUIik7Ci0KLQkvKiBhZGQgcGFsbTI3eCBzcGVjaWZpYyBjb250cm9scyAqLwotCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBwYWxtMjd4X2NvbnRyb2xzLAotCQkJCUFSUkFZX1NJWkUocGFsbTI3eF9jb250cm9scykpOwotCWlmIChlcnIgPCAwKQorCS8qIGFkZCBwYWxtMjd4IHNwZWNpZmljIHdpZGdldHMgKi8KKwllcnIgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBwYWxtMjd4X2RhcG1fd2lkZ2V0cywKKwkJCQlBUlJBWV9TSVpFKHBhbG0yN3hfZGFwbV93aWRnZXRzKSk7CisJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCS8qIGFkZCBwYWxtMjd4IHNwZWNpZmljIHdpZGdldHMgKi8KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBwYWxtMjd4X2RhcG1fd2lkZ2V0cywKLQkJCQlBUlJBWV9TSVpFKHBhbG0yN3hfZGFwbV93aWRnZXRzKSk7Ci0KIAkvKiBzZXQgdXAgcGFsbTI3eCBzcGVjaWZpYyBhdWRpbyBwYXRoIGF1ZGlvX21hcCAqLwotCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJZXJyID0gc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOwotCXJldHVybiAwOworCS8qIGNvbm5lY3RlZCBwaW5zICovCisJaWYgKG1hY2hpbmVfaXNfcGFsbWxkKCkpCisJCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTUlDMSIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSFBPVVRMIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJIUE9VVFIiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkxPVVQyIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJST1VUMiIpOworCisJLyogbm90IGNvbm5lY3RlZCBwaW5zICovCisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVDMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTU9OT09VVCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FSU5MIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVJTlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUENCRUVQIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBIT05FIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1JQzIiKTsKKworCWVyciA9IHNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogSmFjayBkZXRlY3Rpb24gQVBJIHN0dWZmICovCisJZXJyID0gc25kX3NvY19qYWNrX25ldygmcGFsbTI3eF9hc29jLCAiSGVhZHBob25lIEphY2siLAorCQkJCVNORF9KQUNLX0hFQURQSE9ORSwgJmhzX2phY2spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzbmRfc29jX2phY2tfYWRkX3BpbnMoJmhzX2phY2ssIEFSUkFZX1NJWkUoaHNfamFja19waW5zKSwKKwkJCQloc19qYWNrX3BpbnMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzbmRfc29jX2phY2tfYWRkX2dwaW9zKCZoc19qYWNrLCBBUlJBWV9TSVpFKGhzX2phY2tfZ3Bpb3MpLAorCQkJCWhzX2phY2tfZ3Bpb3MpOworCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHBhbG0yN3hfZGFpW10gPSB7CkBAIC0xNzUsMTQgKzEzNSwxMiBAQAogCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfSElGSV0sCiAJLmNvZGVjX2RhaSA9ICZ3bTk3MTJfZGFpW1dNOTcxMl9EQUlfQUM5N19ISUZJXSwKIAkuaW5pdCA9IHBhbG0yN3hfYWM5N19pbml0LAotCS5vcHMgPSAmcGFsbTI3eF9vcHMsCiB9LAogewogCS5uYW1lID0gIkFDOTcgQXV4IiwKIAkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAogCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfQVVYXSwKIAkuY29kZWNfZGFpID0gJndtOTcxMl9kYWlbV005NzEyX0RBSV9BQzk3X0FVWF0sCi0JLm9wcyA9ICZwYWxtMjd4X29wcywKIH0sCiB9OwogCkBAIC0yMDgsMjcgKzE2NiwxNyBAQAogCQltYWNoaW5lX2lzX3BhbG1sZCgpIHx8IG1hY2hpbmVfaXNfcGFsbXRlMigpKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpCi0JCXBhbG0yN3hfZXBfZ3BpbyA9ICgoc3RydWN0IHBhbG0yN3hfYXNvY19pbmZvICopCisJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwbGVhc2Ugc3VwcGx5IHBsYXRmb3JtX2RhdGFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwloc19qYWNrX2dwaW9zWzBdLmdwaW8gPSAoKHN0cnVjdCBwYWxtMjd4X2Fzb2NfaW5mbyAqKQogCQkJKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSktPmphY2tfZ3BpbzsKIAotCXJldCA9IGdwaW9fcmVxdWVzdChwYWxtMjd4X2VwX2dwaW8sICJIZWFkcGhvbmUgSmFjayIpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQocGFsbTI3eF9lcF9ncGlvKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9hbGxvYzsKLQotCWlmIChyZXF1ZXN0X2lycShncGlvX3RvX2lycShwYWxtMjd4X2VwX2dwaW8pLCBwYWxtMjd4X2ludGVycnVwdCwKLQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCSJIZWFkcGhvbmUgamFjayIsIE5VTEwpKQotCQlnb3RvIGVycl9hbGxvYzsKLQogCXBhbG0yN3hfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwotCWlmICghcGFsbTI3eF9zbmRfZGV2aWNlKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2RldjsKLQl9CisJaWYgKCFwYWxtMjd4X3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGFsbTI3eF9zbmRfZGV2aWNlLCAmcGFsbTI3eF9zbmRfZGV2ZGF0YSk7CiAJcGFsbTI3eF9zbmRfZGV2ZGF0YS5kZXYgPSAmcGFsbTI3eF9zbmRfZGV2aWNlLT5kZXY7CkBAIC0yNDEsMTggKzE4OSwxMiBAQAogCiBwdXRfZGV2aWNlOgogCXBsYXRmb3JtX2RldmljZV9wdXQocGFsbTI3eF9zbmRfZGV2aWNlKTsKLWVycl9kZXY6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEocGFsbTI3eF9lcF9ncGlvKSwgTlVMTCk7Ci1lcnJfYWxsb2M6Ci0JZ3Bpb19mcmVlKHBhbG0yN3hfZXBfZ3Bpbyk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBwYWxtMjd4X2Fzb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEocGFsbTI3eF9lcF9ncGlvKSwgTlVMTCk7Ci0JZ3Bpb19mcmVlKHBhbG0yN3hfZXBfZ3Bpbyk7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGFsbTI3eF9zbmRfZGV2aWNlKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhLXNzcC5jIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKaW5kZXggMTljNDU0MC4uNWI5ZWQ2NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMKKysrIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKQEAgLTM3NSwyMSArMzc1LDM0IEBACiAgKiBTZXQgdGhlIGFjdGl2ZSBzbG90cyBpbiBURE0vTmV0d29yayBtb2RlCiAgKi8KIHN0YXRpYyBpbnQgcHhhX3NzcF9zZXRfZGFpX3RkbV9zbG90KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKLQl1bnNpZ25lZCBpbnQgbWFzaywgaW50IHNsb3RzKQorCXVuc2lnbmVkIGludCB0eF9tYXNrLCB1bnNpZ25lZCBpbnQgcnhfbWFzaywgaW50IHNsb3RzLCBpbnQgc2xvdF93aWR0aCkKIHsKIAlzdHJ1Y3Qgc3NwX3ByaXYgKnByaXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IHByaXYtPmRldi5zc3A7CiAJdTMyIHNzY3IwOwogCi0Jc3NjcjAgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU0NSMCkgJiB+U1NDUjBfU2xvdHNQZXJGcm0oNyk7CisJc3NjcjAgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU0NSMCk7CisJc3NjcjAgJj0gfihTU0NSMF9NT0QgfCBTU0NSMF9TbG90c1BlckZybSg4KSB8IFNTQ1IwX0VEU1MgfCBTU0NSMF9EU1MpOwogCi0JLyogc2V0IG51bWJlciBvZiBhY3RpdmUgc2xvdHMgKi8KLQlzc2NyMCB8PSBTU0NSMF9TbG90c1BlckZybShzbG90cyk7CisJLyogc2V0IHNsb3Qgd2lkdGggKi8KKwlpZiAoc2xvdF93aWR0aCA+IDE2KQorCQlzc2NyMCB8PSBTU0NSMF9FRFNTIHwgU1NDUjBfRGF0YVNpemUoc2xvdF93aWR0aCAtIDE2KTsKKwllbHNlCisJCXNzY3IwIHw9IFNTQ1IwX0RhdGFTaXplKHNsb3Rfd2lkdGgpOworCisJaWYgKHNsb3RzID4gMSkgeworCQkvKiBlbmFibGUgbmV0d29yayBtb2RlICovCisJCXNzY3IwIHw9IFNTQ1IwX01PRDsKKworCQkvKiBzZXQgbnVtYmVyIG9mIGFjdGl2ZSBzbG90cyAqLworCQlzc2NyMCB8PSBTU0NSMF9TbG90c1BlckZybShzbG90cyk7CisKKwkJLyogc2V0IGFjdGl2ZSBzbG90IG1hc2sgKi8KKwkJc3NwX3dyaXRlX3JlZyhzc3AsIFNTVFNBLCB0eF9tYXNrKTsKKwkJc3NwX3dyaXRlX3JlZyhzc3AsIFNTUlNBLCByeF9tYXNrKTsKKwl9CiAJc3NwX3dyaXRlX3JlZyhzc3AsIFNTQ1IwLCBzc2NyMCk7CiAKLQkvKiBzZXQgYWN0aXZlIHNsb3QgbWFzayAqLwotCXNzcF93cml0ZV9yZWcoc3NwLCBTU1RTQSwgbWFzayk7Ci0Jc3NwX3dyaXRlX3JlZyhzc3AsIFNTUlNBLCBtYXNrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDU3LDMxICs0NzAsMjcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3NwX3dyaXRlX3JlZyhzc3AsIFNTQ1IwLCBzc2NyMCk7Ci0Jc3NwX3dyaXRlX3JlZyhzc3AsIFNTQ1IxLCBzc2NyMSk7Ci0Jc3NwX3dyaXRlX3JlZyhzc3AsIFNTUFNQLCBzc3BzcCk7CisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCXNzcHNwIHw9IFNTUFNQX1NGUk1QOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgorCQlzc3BzcCB8PSBTU1BTUF9TQ01PREUoMik7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCXNzcHNwIHw9IFNTUFNQX1NDTU9ERSgyKSB8IFNTUFNQX1NGUk1QOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CiAJCXNzY3IwIHw9IFNTQ1IwX1BTUDsKIAkJc3NjcjEgfD0gU1NDUjFfUldPVCB8IFNTQ1IxX1RSQUlMOwotCiAJCS8qIFNlZSBod19wYXJhbXMoKSAqLwotCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7Ci0JCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6Ci0JCQlzc3BzcCB8PSBTU1BTUF9TRlJNUDsKLQkJCWJyZWFrOwotCQljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgotCQkJYnJlYWs7Ci0JCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6Ci0JCQlzc3BzcCB8PSBTU1BTUF9TQ01PREUoMik7Ci0JCQlicmVhazsKLQkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKLQkJCXNzcHNwIHw9IFNTUFNQX1NDTU9ERSgyKSB8IFNTUFNQX1NGUk1QOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CkBAIC00ODksMjIgKzQ5OCw2IEBACiAJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKIAkJc3NjcjAgfD0gU1NDUjBfTU9EIHwgU1NDUjBfUFNQOwogCQlzc2NyMSB8PSBTU0NSMV9UUkFJTCB8IFNTQ1IxX1JXT1Q7Ci0KLQkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgewotCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgotCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTVA7Ci0JCQlicmVhazsKLQkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKLQkJCWJyZWFrOwotCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgotCQkJc3Nwc3AgfD0gU1NQU1BfU0NNT0RFKDIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6Ci0JCQlzc3BzcCB8PSBTU1BTUF9TQ01PREUoMikgfCBTU1BTUF9TRlJNUDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jIGIvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jCmluZGV4IGQ5Yzk0ZDcuLmU5YWU3YjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWFjOTcuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWFjOTcuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KIAogI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKICNpbmNsdWRlICJweGEyeHgtYWM5Ny5oIgpAQCAtMjQxLDkgKzI0MiwxOCBAQAogc3RhdGljIGludCBfX2RldmluaXQgcHhhMnh4X2FjOTdfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IGk7CisJcHhhMnh4X2F1ZGlvX29wc190ICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHhhX2FjOTdfZGFpKTsgaSsrKQorCWlmIChwZGV2LT5pZCA+PSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlBYQTJ4eCBoYXMgb25seSBvbmUgQUM5NyBwb3J0LlxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHhhX2FjOTdfZGFpKTsgaSsrKSB7CiAJCXB4YV9hYzk3X2RhaVtpXS5kZXYgPSAmcGRldi0+ZGV2OworCQlpZiAocGRhdGEgJiYgcGRhdGEtPmNvZGVjX3BkYXRhWzBdKQorCQkJcHhhX2FjOTdfZGFpW2ldLmFjOTdfcGRhdGEgPSBwZGF0YS0+Y29kZWNfcGRhdGFbMF07CisJfQogCiAJLyogUHVudCBtb3N0IG9mIHRoZSBpbml0IHRvIHRoZSBTb0MgcHJvYmU7IHdlIG1heSBuZWVkIHRoZSBtYWNoaW5lCiAJICogZHJpdmVyIHRvIGRvIGludGVyZXN0aW5nIHRoaW5ncyB3aXRoIHRoZSBjbG9ja2luZyB0byBnZXQgdXMgdXAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcgYi9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnCmluZGV4IGRmNDk0ZDEuLjkyMzQyOGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcKKysrIGIvc291bmQvc29jL3MzYzI0eHgvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBTTkRfUzNDMjRYWF9TT0MKIAl0cmlzdGF0ZSAiU29DIEF1ZGlvIGZvciB0aGUgU2Ftc3VuZyBTM0NYWFhYIGNoaXBzIgotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TM0M2NFhYCisJc2VsZWN0IFMzQzY0WFhfRE1BIGlmIEFSQ0hfUzNDNjRYWAogCWhlbHAKIAkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0bwogCSAgdGhlIFMzQzI0WFggQUM5NyBvciBJMlMgaW50ZXJmYWNlcy4gWW91IHdpbGwgYWxzbyBuZWVkIHRvCkBAIC0zOCw2ICszOSwxNSBAQAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBzbWRrMjQ0MAogCSAgd2l0aCB0aGUgV004NzUzLgogCitjb25maWcgU05EX1MzQzI0WFhfU09DX05FTzE5NzNfR1RBMDJfV004NzUzCisJdHJpc3RhdGUgIkF1ZGlvIHN1cHBvcnQgZm9yIHRoZSBPcGVubW9rbyBOZW8gRnJlZVJ1bm5lciAoR1RBMDIpIgorCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIE1BQ0hfTkVPMTk3M19HVEEwMgorCXNlbGVjdCBTTkRfUzNDMjRYWF9TT0NfSTJTCisJc2VsZWN0IFNORF9TT0NfV004NzUzCisJaGVscAorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYXVkaW8gc3VwcG9ydCBmb3IgdGhlIE9wZW5tb2tvIE5lbyBGcmVlUnVubmVyCisJICBzbWFydHBob25lLgorCSAgCiBjb25maWcgU05EX1MzQzI0WFhfU09DX0pJVkVfV004NzUwCiAJdHJpc3RhdGUgIlNvQyBJMlMgQXVkaW8gc3VwcG9ydCBmb3IgSml2ZSIKIAlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBNQUNIX0pJVkUKQEAgLTU3LDcgKzY3LDcgQEAKIAogY29uZmlnIFNORF9TM0MyNFhYX1NPQ19MTjI0NDBTQkNfQUxDNjUwCiAJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIExOMjQ0MFNCQyAtIEFMQzY1MCIKLQlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQworCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIEFSQ0hfUzNDMjQxMAogCXNlbGVjdCBTTkRfUzNDMjQ0M19TT0NfQUM5NwogCXNlbGVjdCBTTkRfU09DX0FDOTdfQ09ERUMKIAloZWxwCkBAIC02Niw3ICs3NiwyNiBAQAogCiBjb25maWcgU05EX1MzQzI0WFhfU09DX1MzQzI0WFhfVURBMTM0WAogCXRyaXN0YXRlICJTb0MgSTJTIEF1ZGlvIHN1cHBvcnQgVURBMTM0WCB3aXJlZCB0byBhIFMzQzI0WFgiCi0gICAgICAgCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DCisgICAgICAgCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIEFSQ0hfUzNDMjQxMAogICAgICAgIAlzZWxlY3QgU05EX1MzQzI0WFhfU09DX0kyUwogCXNlbGVjdCBTTkRfU09DX0wzCiAgICAgICAgCXNlbGVjdCBTTkRfU09DX1VEQTEzNFgKKworY29uZmlnIFNORF9TM0MyNFhYX1NPQ19TSU1URUMKKwl0cmlzdGF0ZQorCWhlbHAKKwkgIEludGVybmFsIG5vZGUgZm9yIGNvbW1vbiBTM0MyNFhYL1NpbXRlYyBzdXBwb3IKKworY29uZmlnIFNORF9TM0MyNFhYX1NPQ19TSU1URUNfVExWMzIwQUlDMjMKKwl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBUTFYzMjBBSUMyMyBvbiBTaW10ZWMgYm9hcmRzIgorCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIEFSQ0hfUzNDMjQxMAorCXNlbGVjdCBTTkRfUzNDMjRYWF9TT0NfSTJTCisJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDMjMKKwlzZWxlY3QgU05EX1MzQzI0WFhfU09DX1NJTVRFQworCitjb25maWcgU05EX1MzQzI0WFhfU09DX1NJTVRFQ19IRVJNRVMKKwl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBTaW10ZWMgSGVybWVzIGJvYXJkIgorCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIEFSQ0hfUzNDMjQxMAorCXNlbGVjdCBTTkRfUzNDMjRYWF9TT0NfSTJTCisJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDM1gKKwlzZWxlY3QgU05EX1MzQzI0WFhfU09DX1NJTVRFQwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvTWFrZWZpbGUgYi9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQppbmRleCAwN2E5M2EyLi45OWY1YTdkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQpAQCAtMTYsMTIgKzE2LDIxIEBACiAjIFMzQzI0WFggTWFjaGluZSBTdXBwb3J0CiBzbmQtc29jLWppdmUtd204NzUwLW9ianMgOj0gaml2ZV93bTg3NTAubwogc25kLXNvYy1uZW8xOTczLXdtODc1My1vYmpzIDo9IG5lbzE5NzNfd204NzUzLm8KK3NuZC1zb2MtbmVvMTk3My1ndGEwMi13bTg3NTMtb2JqcyA6PSBuZW8xOTczX2d0YTAyX3dtODc1My5vCiBzbmQtc29jLXNtZGsyNDQzLXdtOTcxMC1vYmpzIDo9IHNtZGsyNDQzX3dtOTcxMC5vCiBzbmQtc29jLWxuMjQ0MHNiYy1hbGM2NTAtb2JqcyA6PSBsbjI0NDBzYmNfYWxjNjUwLm8KIHNuZC1zb2MtczNjMjR4eC11ZGExMzR4LW9ianMgOj0gczNjMjR4eF91ZGExMzR4Lm8KK3NuZC1zb2MtczNjMjR4eC1zaW10ZWMtb2JqcyA6PSBzM2MyNHh4X3NpbXRlYy5vCitzbmQtc29jLXMzYzI0eHgtc2ltdGVjLWhlcm1lcy1vYmpzIDo9IHMzYzI0eHhfc2ltdGVjX2hlcm1lcy5vCitzbmQtc29jLXMzYzI0eHgtc2ltdGVjLXRsdjMyMGFpYzIzLW9ianMgOj0gczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMubwogCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX0pJVkVfV004NzUwKSArPSBzbmQtc29jLWppdmUtd204NzUwLm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfTkVPMTk3M19XTTg3NTMpICs9IHNuZC1zb2MtbmVvMTk3My13bTg3NTMubworb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19ORU8xOTczX0dUQTAyX1dNODc1MykgKz0gc25kLXNvYy1uZW8xOTczLWd0YTAyLXdtODc1My5vCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX1NNREsyNDQzX1dNOTcxMCkgKz0gc25kLXNvYy1zbWRrMjQ0My13bTk3MTAubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19MTjI0NDBTQkNfQUxDNjUwKSArPSBzbmQtc29jLWxuMjQ0MHNiYy1hbGM2NTAubwogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19TM0MyNFhYX1VEQTEzNFgpICs9IHNuZC1zb2MtczNjMjR4eC11ZGExMzR4Lm8KK29iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfU0lNVEVDKSArPSBzbmQtc29jLXMzYzI0eHgtc2ltdGVjLm8KK29iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfU0lNVEVDX0hFUk1FUykgKz0gc25kLXNvYy1zM2MyNHh4LXNpbXRlYy1oZXJtZXMubworb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19TSU1URUNfVExWMzIwQUlDMjMpICs9IHNuZC1zb2MtczNjMjR4eC1zaW10ZWMtdGx2MzIwYWljMjMubworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9uZW8xOTczX2d0YTAyX3dtODc1My5jIGIvc291bmQvc29jL3MzYzI0eHgvbmVvMTk3M19ndGEwMl93bTg3NTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzUyZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvbmVvMTk3M19ndGEwMl93bTg3NTMuYwpAQCAtMCwwICsxLDQ5OCBAQAorLyoKKyAqIG5lbzE5NzNfZ3RhMDJfd204NzUzLmMgIC0tICBTb0MgYXVkaW8gZm9yIE9wZW5tb2tvIEZyZWVydW5uZXIoR1RBMDIpCisgKgorICogQ29weXJpZ2h0IDIwMDcgT3Blbm1va28gSW5jCisgKiBBdXRob3I6IEdyYWVtZSBHcmVnb3J5IDxncmFlbWVAb3Blbm1va28ub3JnPgorICogQ29weXJpZ2h0IDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqIEF1dGhvcjogR3JhZW1lIEdyZWdvcnkgPGxpbnV4QHdvbGZzb25taWNyby5jb20+CisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CisKKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2d0YTAyLmg+CisjaW5jbHVkZSAiLi4vY29kZWNzL3dtODc1My5oIgorI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCisjaW5jbHVkZSAiczNjMjR4eC1pMnMuaCIKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgbmVvMTk3M19ndGEwMjsKKworc3RhdGljIGludCBuZW8xOTczX2d0YTAyX2hpZmlfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJdW5zaWduZWQgaW50IHBsbF9vdXQgPSAwLCBiY2xrID0gMDsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlpc19jbGtyYXRlOworCisJaWlzX2Nsa3JhdGUgPSBzM2MyNHh4X2kyc19nZXRfY2xvY2tyYXRlKCk7CisKKwlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKKwljYXNlIDgwMDA6CisJY2FzZSAxNjAwMDoKKwkJcGxsX291dCA9IDEyMjg4MDAwOworCQlicmVhazsKKwljYXNlIDQ4MDAwOgorCQliY2xrID0gV004NzUzX0JDTEtfRElWXzQ7CisJCXBsbF9vdXQgPSAxMjI4ODAwMDsKKwkJYnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJYmNsayA9IFdNODc1M19CQ0xLX0RJVl8yOworCQlwbGxfb3V0ID0gMTIyODgwMDA7CisJCWJyZWFrOworCWNhc2UgMTEwMjU6CisJCWJjbGsgPSBXTTg3NTNfQkNMS19ESVZfMTY7CisJCXBsbF9vdXQgPSAxMTI4OTYwMDsKKwkJYnJlYWs7CisJY2FzZSAyMjA1MDoKKwkJYmNsayA9IFdNODc1M19CQ0xLX0RJVl84OworCQlwbGxfb3V0ID0gMTEyODk2MDA7CisJCWJyZWFrOworCWNhc2UgNDQxMDA6CisJCWJjbGsgPSBXTTg3NTNfQkNMS19ESVZfNDsKKwkJcGxsX291dCA9IDExMjg5NjAwOworCQlicmVhazsKKwljYXNlIDg4MjAwOgorCQliY2xrID0gV004NzUzX0JDTEtfRElWXzI7CisJCXBsbF9vdXQgPSAxMTI4OTYwMDsKKwkJYnJlYWs7CisJfQorCisJLyogc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksCisJCVNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLAorCQlTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCVNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogc2V0IHRoZSBjb2RlYyBzeXN0ZW0gY2xvY2sgZm9yIERBQyBhbmQgQURDICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODc1M19NQ0xLLCBwbGxfb3V0LAorCQlTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNldCBNQ0xLIGRpdmlzaW9uIGZvciBzYW1wbGUgcmF0ZSAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY3B1X2RhaSwgUzNDMjRYWF9ESVZfTUNMSywKKwkJUzNDMjQxMF9JSVNNT0RfMzJGUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBzZXQgY29kZWMgQkNMSyBkaXZpc2lvbiBmb3Igc2FtcGxlIHJhdGUgKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNvZGVjX2RhaSwKKwkJCQkJV004NzUzX0JDTEtESVYsIGJjbGspOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogc2V0IHByZXNjYWxlciBkaXZpc2lvbiBmb3Igc2FtcGxlIHJhdGUgKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksIFMzQzI0WFhfRElWX1BSRVNDQUxFUiwKKwkJUzNDMjRYWF9QUkVTQ0FMRSg0LCA0KSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBjb2RlYyBQTEwgaW5wdXQgaXMgUENMSy80ICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3BsbChjb2RlY19kYWksIFdNODc1M19QTEwxLAorCQlpaXNfY2xrcmF0ZSAvIDQsIHBsbF9vdXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVvMTk3M19ndGEwMl9oaWZpX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKworCS8qIGRpc2FibGUgdGhlIFBMTCAqLworCXJldHVybiBzbmRfc29jX2RhaV9zZXRfcGxsKGNvZGVjX2RhaSwgV004NzUzX1BMTDEsIDAsIDApOworfQorCisvKgorICogTmVvMTk3MyBXTTg3NTMgSGlGaSBEQUkgb3BzZXJhdGlvbnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgbmVvMTk3M19ndGEwMl9oaWZpX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gbmVvMTk3M19ndGEwMl9oaWZpX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IG5lbzE5NzNfZ3RhMDJfaGlmaV9od19mcmVlLAorfTsKKworc3RhdGljIGludCBuZW8xOTczX2d0YTAyX3ZvaWNlX2h3X3BhcmFtcygKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOworCXVuc2lnbmVkIGludCBwY21kaXYgPSAwOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgaWlzX2Nsa3JhdGU7CisKKwlpaXNfY2xrcmF0ZSA9IHMzYzI0eHhfaTJzX2dldF9jbG9ja3JhdGUoKTsKKworCWlmIChwYXJhbXNfcmF0ZShwYXJhbXMpICE9IDgwMDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBjbWRpdiA9IFdNODc1M19QQ01fRElWXzY7IC8qIDIuMDQ4IE1IeiAqLworCisJLyogdG9kbzogZ2cgY2hlY2sgbW9kZSAoRFNQX0IpIGFnYWluc3QgQ1NSIGRhdGFzaGVldCAqLworCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9EU1BfQiB8CisJCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBzZXQgdGhlIGNvZGVjIHN5c3RlbSBjbG9jayBmb3IgREFDIGFuZCBBREMgKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004NzUzX1BDTUNMSywKKwkJMTIyODgwMDAsIFNORF9TT0NfQ0xPQ0tfSU4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogc2V0IGNvZGVjIFBDTSBkaXZpc2lvbiBmb3Igc2FtcGxlIHJhdGUgKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV004NzUzX1BDTURJViwKKwkJCQkJcGNtZGl2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGNvbmZpZ3VlIGFuZCBlbmFibGUgUExMIGZvciAxMi4yODhNSHogb3V0cHV0ICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3BsbChjb2RlY19kYWksIFdNODc1M19QTEwyLAorCQlpaXNfY2xrcmF0ZSAvIDQsIDEyMjg4MDAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5lbzE5NzNfZ3RhMDJfdm9pY2VfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOworCisJLyogZGlzYWJsZSB0aGUgUExMICovCisJcmV0dXJuIHNuZF9zb2NfZGFpX3NldF9wbGwoY29kZWNfZGFpLCBXTTg3NTNfUExMMiwgMCwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgbmVvMTk3M19ndGEwMl92b2ljZV9vcHMgPSB7CisJLmh3X3BhcmFtcyA9IG5lbzE5NzNfZ3RhMDJfdm9pY2VfaHdfcGFyYW1zLAorCS5od19mcmVlID0gbmVvMTk3M19ndGEwMl92b2ljZV9od19mcmVlLAorfTsKKworI2RlZmluZSBMTTQ4NTNfQU1QIDEKKyNkZWZpbmUgTE00ODUzX1NQSyAyCisKK3N0YXRpYyB1OCBsbTQ4NTNfc3RhdGU7CisKKy8qIFRoaXMgaGFzIG5vIGVmZmVjdCwgaXQgZXhpc3RzIG9ubHkgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoCisgKiBleGlzdGluZyBBTFNBIHN0YXRlIGZpbGVzLgorICovCitzdGF0aWMgaW50IGxtNDg1M19zZXRfc3RhdGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJaW50IHZhbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJaWYgKHZhbCkKKwkJbG00ODUzX3N0YXRlIHw9IExNNDg1M19BTVA7CisJZWxzZQorCQlsbTQ4NTNfc3RhdGUgJj0gfkxNNDg1M19BTVA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsbTQ4NTNfZ2V0X3N0YXRlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbG00ODUzX3N0YXRlICYgTE00ODUzX0FNUDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxtNDg1M19zZXRfc3BrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCWludCB2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmICh2YWwpIHsKKwkJbG00ODUzX3N0YXRlIHw9IExNNDg1M19TUEs7CisJCWdwaW9fc2V0X3ZhbHVlKEdUQTAyX0dQSU9fSFBfSU4sIDApOworCX0gZWxzZSB7CisJCWxtNDg1M19zdGF0ZSAmPSB+TE00ODUzX1NQSzsKKwkJZ3Bpb19zZXRfdmFsdWUoR1RBMDJfR1BJT19IUF9JTiwgMSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG00ODUzX2dldF9zcGsoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAobG00ODUzX3N0YXRlICYgTE00ODUzX1NQSykgPj4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxtNDg1M19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmssCisJCQlpbnQgZXZlbnQpCit7CisJZ3Bpb19zZXRfdmFsdWUoR1RBMDJfR1BJT19BTVBfU0hVVCwgU05EX1NPQ19EQVBNX0VWRU5UX09GRih2YWx1ZSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg3NTNfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX1NQSygiU3RlcmVvIE91dCIsIGxtNDg1M19ldmVudCksCisJU05EX1NPQ19EQVBNX0xJTkUoIkdTTSBMaW5lIE91dCIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9MSU5FKCJHU00gTGluZSBJbiIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIkhlYWRzZXQgTWljIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiSGFuZHNldCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJIYW5kc2V0IFNwayIsIE5VTEwpLAorfTsKKworCisvKiBleGFtcGxlIG1hY2hpbmUgYXVkaW9fbWFwbmVjdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCisJLyogQ29ubmVjdGlvbnMgdG8gdGhlIGxtNDg1MyBhbXAgKi8KKwl7IlN0ZXJlbyBPdXQiLCBOVUxMLCAiTE9VVDEifSwKKwl7IlN0ZXJlbyBPdXQiLCBOVUxMLCAiUk9VVDEifSwKKworCS8qIENvbm5lY3Rpb25zIHRvIHRoZSBHU00gTW9kdWxlICovCisJeyJHU00gTGluZSBPdXQiLCBOVUxMLCAiTU9OTzEifSwKKwl7IkdTTSBMaW5lIE91dCIsIE5VTEwsICJNT05PMiJ9LAorCXsiUlhQIiwgTlVMTCwgIkdTTSBMaW5lIEluIn0sCisJeyJSWE4iLCBOVUxMLCAiR1NNIExpbmUgSW4ifSwKKworCS8qIENvbm5lY3Rpb25zIHRvIEhlYWRzZXQgKi8KKwl7Ik1JQzEiLCBOVUxMLCAiTWljIEJpYXMifSwKKwl7Ik1pYyBCaWFzIiwgTlVMTCwgIkhlYWRzZXQgTWljIn0sCisKKwkvKiBDYWxsIE1pYyAqLworCXsiTUlDMiIsIE5VTEwsICJNaWMgQmlhcyJ9LAorCXsiTUlDMk4iLCBOVUxMLCAiTWljIEJpYXMifSwKKwl7Ik1pYyBCaWFzIiwgTlVMTCwgIkhhbmRzZXQgTWljIn0sCisKKwkvKiBDYWxsIFNwZWFrZXIgKi8KKwl7IkhhbmRzZXQgU3BrIiwgTlVMTCwgIkxPVVQyIn0sCisJeyJIYW5kc2V0IFNwayIsIE5VTEwsICJST1VUMiJ9LAorCisJLyogQ29ubmVjdCB0aGUgQUxDIHBpbnMgKi8KKwl7IkFDSU4iLCBOVUxMLCAiQUNPUCJ9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODc1M19uZW8xOTczX2d0YTAyX2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fUElOX1NXSVRDSCgiU3RlcmVvIE91dCIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkdTTSBMaW5lIE91dCIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkdTTSBMaW5lIEluIiksCisJU09DX0RBUE1fUElOX1NXSVRDSCgiSGVhZHNldCBNaWMiKSwKKwlTT0NfREFQTV9QSU5fU1dJVENIKCJIYW5kc2V0IE1pYyIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhhbmRzZXQgU3BrIiksCisKKwkvKiBUaGlzIGhhcyBubyBlZmZlY3QsIGl0IGV4aXN0cyBvbmx5IHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aAorCSAqIGV4aXN0aW5nIEFMU0Egc3RhdGUgZmlsZXMuCisJICovCisJU09DX1NJTkdMRV9FWFQoIkFtcCBTdGF0ZSBTd2l0Y2giLCA2LCAwLCAxLCAwLAorCQlsbTQ4NTNfZ2V0X3N0YXRlLAorCQlsbTQ4NTNfc2V0X3N0YXRlKSwKKwlTT0NfU0lOR0xFX0VYVCgiQW1wIFNwayBTd2l0Y2giLCA3LCAwLCAxLCAwLAorCQlsbTQ4NTNfZ2V0X3NwaywKKwkJbG00ODUzX3NldF9zcGspLAorfTsKKworLyoKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBtYWNoaW5lIGluaXRpYWxpc2F0aW9uIGZvciBhIHdtODc1MyBjb25uZWN0ZWQgdG8gYQorICogbmVvMTk3MyBHVEEwMi4KKyAqLworc3RhdGljIGludCBuZW8xOTczX2d0YTAyX3dtODc1M19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgZXJyOworCisJLyogc2V0IHVwIE5DIGNvZGVjIHBpbnMgKi8KKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUMyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQ0Iik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkUxIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkUyIik7CisKKwkvKiBBZGQgbmVvMTk3MyBndGEwMiBzcGVjaWZpYyB3aWRnZXRzICovCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NzUzX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204NzUzX2RhcG1fd2lkZ2V0cykpOworCisJLyogYWRkIG5lbzE5NzMgZ3RhMDIgc3BlY2lmaWMgY29udHJvbHMgKi8KKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzUzX25lbzE5NzNfZ3RhMDJfY29udHJvbHMsCisJCUFSUkFZX1NJWkUod204NzUzX25lbzE5NzNfZ3RhMDJfY29udHJvbHMpKTsKKworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogc2V0IHVwIG5lbzE5NzMgZ3RhMDIgc3BlY2lmaWMgYXVkaW8gcGF0aCBhdWRpb19tYXAgKi8KKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCisJLyogc2V0IGVuZHBvaW50cyB0byBkZWZhdWx0IG9mZiBtb2RlICovCisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiU3RlcmVvIE91dCIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkdTTSBMaW5lIE91dCIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkdTTSBMaW5lIEluIik7CisJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSGVhZHNldCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIYW5kc2V0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhhbmRzZXQgU3BrIik7CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEJUIENvZGVjIERBSQorICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpIGJ0X2RhaSA9IHsKKwkubmFtZSA9ICJCbHVldG9vdGgiLAorCS5pZCA9IDAsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDEsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKKwkuY2FwdHVyZSA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAxLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgbmVvMTk3M19ndGEwMl9kYWlbXSA9IHsKK3sgLyogSGlmaSBQbGF5YmFjayAtIGZvciBzaW1pbGF0aW91cyB1c2Ugd2l0aCB2b2ljZSBiZWxvdyAqLworCS5uYW1lID0gIldNODc1MyIsCisJLnN0cmVhbV9uYW1lID0gIldNODc1MyBIaUZpIiwKKwkuY3B1X2RhaSA9ICZzM2MyNHh4X2kyc19kYWksCisJLmNvZGVjX2RhaSA9ICZ3bTg3NTNfZGFpW1dNODc1M19EQUlfSElGSV0sCisJLmluaXQgPSBuZW8xOTczX2d0YTAyX3dtODc1M19pbml0LAorCS5vcHMgPSAmbmVvMTk3M19ndGEwMl9oaWZpX29wcywKK30sCit7IC8qIFZvaWNlIHZpYSBCVCAqLworCS5uYW1lID0gIkJsdWV0b290aCIsCisJLnN0cmVhbV9uYW1lID0gIlZvaWNlIiwKKwkuY3B1X2RhaSA9ICZidF9kYWksCisJLmNvZGVjX2RhaSA9ICZ3bTg3NTNfZGFpW1dNODc1M19EQUlfVk9JQ0VdLAorCS5vcHMgPSAmbmVvMTk3M19ndGEwMl92b2ljZV9vcHMsCit9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgbmVvMTk3M19ndGEwMiA9IHsKKwkubmFtZSA9ICJuZW8xOTczLWd0YTAyIiwKKwkucGxhdGZvcm0gPSAmczNjMjR4eF9zb2NfcGxhdGZvcm0sCisJLmRhaV9saW5rID0gbmVvMTk3M19ndGEwMl9kYWksCisJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUobmVvMTk3M19ndGEwMl9kYWkpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBuZW8xOTczX2d0YTAyX3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJm5lbzE5NzNfZ3RhMDIsCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODc1MywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpuZW8xOTczX2d0YTAyX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IG5lbzE5NzNfZ3RhMDJfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfbmVvMTk3M19ndGEwMigpKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJPbmx5IEdUQTAyIGlzIHN1cHBvcnRlZCBieSB0aGlzIEFTb0MgZHJpdmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogcmVnaXN0ZXIgYmx1ZXRvb3RoIERBSSBoZXJlICovCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmJ0X2RhaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW5lbzE5NzNfZ3RhMDJfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghbmVvMTk3M19ndGEwMl9zbmRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKG5lbzE5NzNfZ3RhMDJfc25kX2RldmljZSwKKwkJCSZuZW8xOTczX2d0YTAyX3NuZF9kZXZkYXRhKTsKKwluZW8xOTczX2d0YTAyX3NuZF9kZXZkYXRhLmRldiA9ICZuZW8xOTczX2d0YTAyX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG5lbzE5NzNfZ3RhMDJfc25kX2RldmljZSk7CisKKwlpZiAocmV0KSB7CisJCXBsYXRmb3JtX2RldmljZV9wdXQobmVvMTk3M19ndGEwMl9zbmRfZGV2aWNlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBJbml0aWFsaXNlIEdQSU9zIHVzZWQgYnkgYW1wICovCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdUQTAyX0dQSU9fSFBfSU4sICJHVEEwMl9IUF9JTiIpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJndGEwMl93bTg3NTM6IEZhaWxlZCB0byByZWdpc3RlciBHUElPICVkXG4iLCBHVEEwMl9HUElPX0hQX0lOKTsKKwkJZ290byBlcnJfdW5yZWdpc3Rlcl9kZXZpY2U7CisJfQorCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdUQTAyX0dQSU9fQU1QX0hQX0lOLCAxKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiZ3RhMDJfd204NzUzOiBGYWlsZWQgdG8gY29uZmlndXJlIEdQSU8gJWRcbiIsIEdUQTAyX0dQSU9fSFBfSU4pOworCQlnb3RvIGVycl9mcmVlX2dwaW9faHBfaW47CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdUQTAyX0dQSU9fQU1QX1NIVVQsICJHVEEwMl9BTVBfU0hVVCIpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJndGEwMl93bTg3NTM6IEZhaWxlZCB0byByZWdpc3RlciBHUElPICVkXG4iLCBHVEEwMl9HUElPX0FNUF9TSFVUKTsKKwkJZ290byBlcnJfZnJlZV9ncGlvX2hwX2luOworCX0KKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHVEEwMl9HUElPX0FNUF9TSFVULCAxKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiZ3RhMDJfd204NzUzOiBGYWlsZWQgdG8gY29uZmlndXJlIEdQSU8gJWRcbiIsIEdUQTAyX0dQSU9fQU1QX1NIVVQpOworCQlnb3RvIGVycl9mcmVlX2dwaW9fYW1wX3NodXQ7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2dwaW9fYW1wX3NodXQ6CisJZ3Bpb19mcmVlKEdUQTAyX0dQSU9fQU1QX1NIVVQpOworZXJyX2ZyZWVfZ3Bpb19ocF9pbjoKKwlncGlvX2ZyZWUoR1RBMDJfR1BJT19IUF9JTik7CitlcnJfdW5yZWdpc3Rlcl9kZXZpY2U6CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobmVvMTk3M19ndGEwMl9zbmRfZGV2aWNlKTsKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQobmVvMTk3M19ndGEwMl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG5lbzE5NzNfZ3RhMDJfZXhpdCh2b2lkKQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmJ0X2RhaSk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobmVvMTk3M19ndGEwMl9zbmRfZGV2aWNlKTsKKwlncGlvX2ZyZWUoR1RBMDJfR1BJT19IUF9JTik7CisJZ3Bpb19mcmVlKEdUQTAyX0dQSU9fQU1QX1NIVVQpOworfQorbW9kdWxlX2V4aXQobmVvMTk3M19ndGEwMl9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJHcmFlbWUgR3JlZ29yeSwgZ3JhZW1lQG9wZW5tb2tvLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBXTTg3NTMgTmVvMTk3MyBHVEEwMiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5jCmluZGV4IDFhMjgzMTcuLmFhN2FmMGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1pMnMtdjIuYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCiAjaW5jbHVkZSAiczNjLWkycy12Mi5oIgorI2luY2x1ZGUgInMzYzI0eHgtcGNtLmgiCiAKICN1bmRlZiBTM0NfSUlTX1YyX1NVUFBPUlRFRAogCkBAIC0zNTcsMTkgKzM1OCwxOSBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUExBVF9TM0M2NFhYCi0JaWlzbW9kICY9IH4weDYwNjsKKwlpaXNtb2QgJj0gfihTM0M2NFhYX0lJU01PRF9CTENfTUFTSyB8IFMzQzI0MTJfSUlTTU9EX0JDTEtfTUFTSyk7CiAJLyogU2FtcGxlIHNpemUgKi8KIAlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TODoKIAkJLyogOCBiaXQgc2FtcGxlLCAxNmZzIEJDTEsgKi8KLQkJaWlzbW9kIHw9IDB4MjAwNDsKKwkJaWlzbW9kIHw9IChTM0M2NFhYX0lJU01PRF9CTENfOEJJVCB8IFMzQzI0MTJfSUlTTU9EX0JDTEtfMTZGUyk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CiAJCS8qIDE2IGJpdCBzYW1wbGUsIDMyZnMgQkNMSyAqLwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgogCQkvKiAyNCBiaXQgc2FtcGxlLCA0OGZzIEJDTEsgKi8KLQkJaWlzbW9kIHw9IDB4NDAwMjsKKwkJaWlzbW9kIHw9IChTM0M2NFhYX0lJU01PRF9CTENfMjRCSVQgfCBTM0MyNDEyX0lJU01PRF9CQ0xLXzQ4RlMpOwogCQlicmVhazsKIAl9CiAjZW5kaWYKQEAgLTM4Nyw2ICszODgsOCBAQAogCWludCBjYXB0dXJlID0gKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7CiAJdW5zaWduZWQgbG9uZyBpcnFzOwogCWludCByZXQgPSAwOworCWludCBjaGFubmVsID0gKChzdHJ1Y3QgczNjMjR4eF9wY21fZG1hX3BhcmFtcyAqKQorCQkgIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSktPmNoYW5uZWw7CiAKIAlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCkBAIC00MTYsNiArNDE5LDE0IEBACiAJCQlzM2MyNDEyX3NuZF90eGN0cmwoaTJzLCAxKTsKIAogCQlsb2NhbF9pcnFfcmVzdG9yZShpcnFzKTsKKworCQkvKgorCQkgKiBMb2FkIHRoZSBuZXh0IGJ1ZmZlciB0byBETUEgdG8gbWVldCB0aGUgcmVxaXJlbWVudAorCQkgKiBvZiB0aGUgYXV0byByZWxvYWQgbWVjaGFuaXNtIG9mIFMzQzI0WFguCisJCSAqIFRoaXMgY2FsbCB3b24ndCBib3RoZXIgUzNDNjRYWC4KKwkJICovCisJCXMzYzI0MTBfZG1hX2N0cmwoY2hhbm5lbCwgUzNDMjQxMF9ETUFPUF9TVEFSVEVEKTsKKwogCQlicmVhazsKIAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0NDMtYWM5Ny5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjQ0My1hYzk3LmMKaW5kZXggM2YwM2Q1ZC4uZmMxYmViMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQ0My1hYzk3LmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjQ0My1hYzk3LmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihhYzk3X2NvbXBsZXRpb24pOwogc3RhdGljIHUzMiBjb2RlY19yZWFkeTsKLXN0YXRpYyBERUNMQVJFX01VVEVYKGFjOTdfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChhYzk3X211dGV4KTsKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IHMzYzI0NDNfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKIAl1bnNpZ25lZCBzaG9ydCByZWcpCkBAIC01Niw3ICs1Niw3IEBACiAJdTMyIGFjX2NvZGVjX2NtZDsKIAl1MzIgc3RhdCwgYWRkciwgZGF0YTsKIAotCWRvd24oJmFjOTdfbXV0ZXgpOworCW11dGV4X2xvY2soJmFjOTdfbXV0ZXgpOwogCiAJY29kZWNfcmVhZHkgPSBTM0NfQUM5N19HTEJTVEFUX0NPREVDUkVBRFk7CiAJYWNfY29kZWNfY21kID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOwpAQCAtNzksNyArNzksNyBAQAogCQlwcmludGsoS0VSTl9FUlIgInMzYzI0eHgtYWM5NzogcmVxIGFkZHIgPSAlMDJ4LCIKIAkJCQkiIHJlcCBhZGRyID0gJTAyeFxuIiwgcmVnLCBhZGRyKTsKIAotCXVwKCZhYzk3X211dGV4KTsKKwltdXRleF91bmxvY2soJmFjOTdfbXV0ZXgpOwogCiAJcmV0dXJuICh1bnNpZ25lZCBzaG9ydClkYXRhOwogfQpAQCAtOTAsNyArOTAsNyBAQAogCXUzMiBhY19nbGJjdHJsOwogCXUzMiBhY19jb2RlY19jbWQ7CiAKLQlkb3duKCZhYzk3X211dGV4KTsKKwltdXRleF9sb2NrKCZhYzk3X211dGV4KTsKIAogCWNvZGVjX3JlYWR5ID0gUzNDX0FDOTdfR0xCU1RBVF9DT0RFQ1JFQURZOwogCWFjX2NvZGVjX2NtZCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKQEAgLTEwOSw3ICsxMDksNyBAQAogCWFjX2NvZGVjX2NtZCB8PSBTM0NfQUM5N19DT0RFQ19DTURfUkVBRDsKIAl3cml0ZWwoYWNfY29kZWNfY21kLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7CiAKLQl1cCgmYWM5N19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZhYzk3X211dGV4KTsKIAogfQogCkBAIC0yOTAsNiArMjkwLDkgQEAKIAkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKIAl1MzIgYWNfZ2xiY3RybDsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IGNoYW5uZWwgPSAoKHN0cnVjdCBzM2MyNHh4X3BjbV9kbWFfcGFyYW1zICopCisJCSAgcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhKS0+Y2hhbm5lbDsKIAogCWFjX2dsYmN0cmwgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwogCXN3aXRjaCAoY21kKSB7CkBAIC0zMTIsNiArMzE1LDggQEAKIAl9CiAJd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CiAKKwlzM2MyNDEwX2RtYV9jdHJsKGNoYW5uZWwsIFMzQzI0MTBfRE1BT1BfU1RBUlRFRCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzM0LDYgKzMzOSw5IEBACiAJCQkJICAgIGludCBjbWQsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCXUzMiBhY19nbGJjdHJsOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlpbnQgY2hhbm5lbCA9ICgoc3RydWN0IHMzYzI0eHhfcGNtX2RtYV9wYXJhbXMgKikKKwkJICBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEpLT5jaGFubmVsOwogCiAJYWNfZ2xiY3RybCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CiAJc3dpdGNoIChjbWQpIHsKQEAgLTM0OSw2ICszNTcsOCBAQAogCX0KIAl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKIAorCXMzYzI0MTBfZG1hX2N0cmwoY2hhbm5lbCwgUzNDMjQxMF9ETUFPUF9TVEFSVEVEKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWFjOTcuaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtYWM5Ny5oCmluZGV4IGE5NmRjYWQuLmU5NmY5NDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtYWM5Ny5oCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtYWM5Ny5oCkBAIC0yMCwxMiArMjAsNiBAQAogI2RlZmluZSBBQ19DTURfQUREUih4KSAoeCA8PCAxNikKICNkZWZpbmUgQUNfQ01EX0RBVEEoeCkgKHggJiAweGZmZmYpCiAKLSNpZmRlZiBDT05GSUdfQ1BVX1MzQzI0NDAKLSNkZWZpbmUgSVJRX1MzQzI0NHhfQUM5NyBJUlFfUzNDMjQ0MF9BQzk3Ci0jZWxzZQotI2RlZmluZSBJUlFfUzNDMjQ0eF9BQzk3IElSUV9TM0MyNDQzX0FDOTcKLSNlbmRpZgotCiBleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHMzYzI0NDNfYWM5N19kYWlbXTsKIAogI2VuZGlmIC8qUzNDMjRYWEFDOTdfSF8qLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1pMnMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtaTJzLmMKaW5kZXggNTU2ZTM1Zi4uNDBlMmM0NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWkycy5jCkBAIC0yNzksNiArMjc5LDkgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKIAlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IGNoYW5uZWwgPSAoKHN0cnVjdCBzM2MyNHh4X3BjbV9kbWFfcGFyYW1zICopCisJCSAgcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhKS0+Y2hhbm5lbDsKIAogCXByX2RlYnVnKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTI5Niw2ICsyOTksOCBAQAogCQkJczNjMjR4eF9zbmRfcnhjdHJsKDEpOwogCQllbHNlCiAJCQlzM2MyNHh4X3NuZF90eGN0cmwoMSk7CisKKwkJczNjMjQxMF9kbWFfY3RybChjaGFubmVsLCBTM0MyNDEwX0RNQU9QX1NUQVJURUQpOwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMKaW5kZXggZWVjZmE1ZS4uNWNiYmRjOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jCkBAIC0yNTUsNyArMjU1LDYgQEAKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CiAJCXBydGQtPnN0YXRlIHw9IFNUX1JVTk5JTkc7CiAJCXMzYzI0MTBfZG1hX2N0cmwocHJ0ZC0+cGFyYW1zLT5jaGFubmVsLCBTM0MyNDEwX0RNQU9QX1NUQVJUKTsKLQkJczNjMjQxMF9kbWFfY3RybChwcnRkLT5wYXJhbXMtPmNoYW5uZWwsIFMzQzI0MTBfRE1BT1BfU1RBUlRFRCk7CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgpAQCAtMzE4LDYgKzMxNyw3IEBACiAKIAlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCisJc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwogCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmczNjMjR4eF9wY21faGFyZHdhcmUpOwogCiAJcHJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2MyNHh4X3J1bnRpbWVfZGF0YSksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2NmUwZAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjLmMKQEAgLTAsMCArMSwzOTQgQEAKKy8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisKKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLXNpbXRlYy5oPgorCisjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKKyNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgorI2luY2x1ZGUgInMzYzI0eHhfc2ltdGVjLmgiCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9hdWRpb19zaW10ZWNfcGRhdGEgKnBkYXRhOworc3RhdGljIHN0cnVjdCBjbGsgKnh0YWxfY2xrOworCitzdGF0aWMgaW50IHNwa19nYWluOworc3RhdGljIGludCBzcGtfdW5tdXRlOworCisvKioKKyAqIHNwZWFrZXJfZ2Fpbl9nZXQgLSByZWFkIHRoZSBzcGVha2VyIGdhaW4gc2V0dGluZy4KKyAqIEBrY29udHJvbDogVGhlIGNvbnRyb2wgZm9yIHRoZSBzcGVha2VyIGdhaW4uCisgKiBAdWNvbnRyb2w6IFRoZSB2YWx1ZSB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuCisgKgorICogUmVhZCB0aGUgdmFsdWUgZm9yIHRoZSBBTVAgZ2FpbiBjb250cm9sLgorICovCitzdGF0aWMgaW50IHNwZWFrZXJfZ2Fpbl9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBzcGtfZ2FpbjsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzcGVha2VyX2dhaW5fc2V0IC0gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgc3BlYWtlciBhbXAgZ2FpbgorICogQHZhbHVlOiBUaGUgdmFsdWUgdG8gd3JpdGUuCisgKi8KK3N0YXRpYyB2b2lkIHNwZWFrZXJfZ2Fpbl9zZXQoaW50IHZhbHVlKQoreworCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKHBkYXRhLT5hbXBfZ2FpblswXSwgdmFsdWUgJiAxKTsKKwlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChwZGF0YS0+YW1wX2dhaW5bMV0sIHZhbHVlID4+IDEpOworfQorCisvKioKKyAqIHNwZWFrZXJfZ2Fpbl9wdXQgLSBzZXQgdGhlIHNwZWFrZXIgZ2FpbiBzZXR0aW5nLgorICogQGtjb250cm9sOiBUaGUgY29udHJvbCBmb3IgdGhlIHNwZWFrZXIgZ2Fpbi4KKyAqIEB1Y29udHJvbDogVGhlIHZhbHVlIHRoYXQgbmVlZHMgdG8gYmUgc2V0LgorICoKKyAqIFNldCB0aGUgdmFsdWUgb2YgdGhlIHNwZWFrZXIgZ2FpbiBmcm9tIHRoZSBzcGVjaWZpZWQKKyAqIEB1Y29udHJvbCBzZXR0aW5nLgorICoKKyAqIE5vdGUsIGlmIHRoZSBzcGVha2VyIGFtcCBpcyBtdXRlZCwgdGhlbiB3ZSBkbyBub3Qgc2V0IGEgZ2FpbiB2YWx1ZQorICogYXMgYXQtbGVhc3Qgb25lIG9mIHRoZSBJQ3MgdGhhdCBpcyBmaXR0ZWQgd2lsbCB0cnkgYW5kIHBvd2VyIHVwIGV2ZW4KKyAqIGlmIHRoZSBtYWluIGNvbnRyb2wgaXMgc2V0IHRvIG9mZi4KKyAqLworc3RhdGljIGludCBzcGVha2VyX2dhaW5fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCWludCB2YWx1ZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJc3BrX2dhaW4gPSB2YWx1ZTsKKworCWlmICghc3BrX3VubXV0ZSkKKwkJc3BlYWtlcl9nYWluX3NldCh2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFtcF9nYWluX2NvbnRyb2xzW10gPSB7CisJU09DX1NJTkdMRV9FWFQoIlNwZWFrZXIgR2FpbiIsIDAsIDAsIDMsIDAsCisJCSAgICAgICBzcGVha2VyX2dhaW5fZ2V0LCBzcGVha2VyX2dhaW5fcHV0KSwKK307CisKKy8qKgorICogc3BrX3VubXV0ZV9zdGF0ZSAtIHNldCB0aGUgdW5tdXRlIHN0YXRlIG9mIHRoZSBzcGVha2VyCisgKiBAdG86IHplcm8gdG8gdW5tdXRlLCBub24temVybyB0byB1bnVubXV0ZS4KKyAqLworc3RhdGljIHZvaWQgc3BrX3VubXV0ZV9zdGF0ZShpbnQgdG8pCit7CisJcHJfZGVidWcoIiVzOiB0bz0lZFxuIiwgX19mdW5jX18sIHRvKTsKKworCXNwa191bm11dGUgPSB0bzsKKwlncGlvX3NldF92YWx1ZShwZGF0YS0+YW1wX2dwaW8sIHRvKTsKKworCS8qIGlmIHdlJ3JlIHVtdXRpbmcsIGFsc28gcmUtc2V0IHRoZSBnYWluICovCisJaWYgKHRvICYmIHBkYXRhLT5hbXBfZ2FpblswXSA+IDApCisJCXNwZWFrZXJfZ2Fpbl9zZXQoc3BrX2dhaW4pOworfQorCisvKioKKyAqIHNwZWFrZXJfdW5tdXRlX2dldCAtIHJlYWQgdGhlIHNwZWFrZXIgdW5tdXRlIHNldHRpbmcuCisgKiBAa2NvbnRyb2w6IFRoZSBjb250cm9sIGZvciB0aGUgc3BlYWtlciBnYWluLgorICogQHVjb250cm9sOiBUaGUgdmFsdWUgdGhhdCBuZWVkcyB0byBiZSB1cGRhdGVkLgorICoKKyAqIFJlYWQgdGhlIHZhbHVlIGZvciB0aGUgQU1QIGdhaW4gY29udHJvbC4KKyAqLworc3RhdGljIGludCBzcGVha2VyX3VubXV0ZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBzcGtfdW5tdXRlOworCXJldHVybiAwOworfQorCisvKioKKyAqIHNwZWFrZXJfdW5tdXRlX3B1dCAtIHNldCB0aGUgc3BlYWtlciB1bm11dGUgc2V0dGluZy4KKyAqIEBrY29udHJvbDogVGhlIGNvbnRyb2wgZm9yIHRoZSBzcGVha2VyIGdhaW4uCisgKiBAdWNvbnRyb2w6IFRoZSB2YWx1ZSB0aGF0IG5lZWRzIHRvIGJlIHNldC4KKyAqCisgKiBTZXQgdGhlIHZhbHVlIG9mIHRoZSBzcGVha2VyIGdhaW4gZnJvbSB0aGUgc3BlY2lmaWVkCisgKiBAdWNvbnRyb2wgc2V0dGluZy4KKyAqLworc3RhdGljIGludCBzcGVha2VyX3VubXV0ZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3BrX3VubXV0ZV9zdGF0ZSh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgaXMgYWRkZWQgYXMgYSBtYW51YWwgY29udHJvbCBhcyB0aGUgc3BlYWtlciBhbXBzIGNyZWF0ZSBjbGlja3MKKyAqIHdoZW4gdGhlaXIgcG93ZXIgc3RhdGUgaXMgY2hhbmdlZCwgd2hpY2ggYXJlIGZhciBtb3JlIG5vdGljZWFibGUgdGhhbgorICogYW55dGhpbmcgcHJvZHVjZWQgYnkgdGhlIENPREVDIGl0c2VsZi4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFtcF91bm11dGVfY29udHJvbHNbXSA9IHsKKwlTT0NfU0lOR0xFX0VYVCgiU3BlYWtlciBTd2l0Y2giLCAwLCAwLCAxLCAwLAorCQkgICAgICAgc3BlYWtlcl91bm11dGVfZ2V0LCBzcGVha2VyX3VubXV0ZV9wdXQpLAorfTsKKwordm9pZCBzaW10ZWNfYXVkaW9faW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaWYgKHBkYXRhLT5hbXBfZ3BpbyA+IDApIHsKKwkJcHJfZGVidWcoIiVzOiBhZGRpbmcgYW1wIHJvdXRlc1xuIiwgX19mdW5jX18pOworCisJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhbXBfdW5tdXRlX2NvbnRyb2xzLAorCQkJCSAgICAgQVJSQVlfU0laRShhbXBfdW5tdXRlX2NvbnRyb2xzKSk7CisJfQorCisJaWYgKHBkYXRhLT5hbXBfZ2FpblswXSA+IDApIHsKKwkJcHJfZGVidWcoIiVzOiBhZGRpbmcgYW1wIGNvbnRyb2xzXG4iLCBfX2Z1bmNfXyk7CisJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBhbXBfZ2Fpbl9jb250cm9scywKKwkJCQkgICAgIEFSUkFZX1NJWkUoYW1wX2dhaW5fY29udHJvbHMpKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzaW10ZWNfYXVkaW9faW5pdCk7CisKKyNkZWZpbmUgQ09ERUNfQ0xPQ0sgMTIwMDAwMDAKKworLyoqCisgKiBzaW10ZWNfaHdfcGFyYW1zIC0gdXBkYXRlIGhhcmR3YXJlIHBhcmFtZXRlcnMKKyAqIEBzdWJzdHJlYW06IFRoZSBhdWRpbyBzdWJzdHJlYW0gaW5zdGFuY2UuCisgKiBAcGFyYW1zOiBUaGUgcGFyYW1ldGVycyByZXF1ZXN0ZWQuCisgKgorICogVXBkYXRlIHRoZSBjb2RlYyBkYXRhIHJvdXRpbmcgYW5kIGNvbmZpZ3VyYXRpb24gIHNldHRpbmdzCisgKiBmcm9tIHRoZSBzdXBwbGllZCBkYXRhLgorICovCitzdGF0aWMgaW50IHNpbXRlY19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlpbnQgcmV0OworCisJLyogU2V0IHRoZSBDT0RFQyBhcyB0aGUgYnVzIGNsb2NrIG1hc3RlciwgSTJTICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIiVzOiBmYWlsZWQgc2V0IGNwdSBkYWkgZm9ybWF0XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogU2V0IHRoZSBDT0RFQyBhcyB0aGUgYnVzIGNsb2NrIG1hc3RlciAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIiVzOiBmYWlsZWQgc2V0IGNvZGVjIGRhaSBmb3JtYXRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwKKwkJCQkgICAgIENPREVDX0NMT0NLLCBTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAocmV0KSB7CisJCXByX2VyciggIiVzOiBmYWlsZWQgc2V0dGluZyBjb2RlYyBzeXNjbGtcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAocGRhdGEtPnVzZV9tcGxsaW4pIHsKKwkJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBTM0MyNFhYX0NMS1NSQ19NUExMLAorCQkJCQkgICAgIDAsIFNORF9TT0NfQ0xPQ0tfT1VUKTsKKworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gc2V0IE1QTExpbiBhcyBjbGtzcmNcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWlmIChwZGF0YS0+b3V0cHV0X2NkY2xrKSB7CisJCWludCBjZGNsa19zY2FsZTsKKworCQljZGNsa19zY2FsZSA9IGNsa19nZXRfcmF0ZSh4dGFsX2NsaykgLyBDT0RFQ19DTE9DSzsKKwkJY2RjbGtfc2NhbGUtLTsKKworCQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksIFMzQzI0WFhfRElWX1BSRVNDQUxFUiwKKwkJCQkJICAgICBjZGNsa19zY2FsZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2ltdGVjX2NhbGxfc3RhcnR1cChzdHJ1Y3QgczNjMjR4eF9hdWRpb19zaW10ZWNfcGRhdGEgKnBkKQoreworCS8qIGNhbGwgYW55IGJvYXJkIHN1cHBsaWVkIHN0YXJ0dXAgY29kZSwgdGhpcyBjdXJyZW50bHkgb25seQorCSAqIGNvdmVycyB0aGUgYmFzdC92cjEwMDAgd2hpY2ggaGF2ZSBhIENQTEQgaW4gdGhlIHdheSBvZiB0aGUKKwkgKiBMUkNMSyAqLworCWlmIChwZC0+c3RhcnR1cCkKKwkJcGQtPnN0YXJ0dXAoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIHNpbXRlY19zbmRfb3BzID0geworCS5od19wYXJhbXMJPSBzaW10ZWNfaHdfcGFyYW1zLAorfTsKKworLyoqCisgKiBhdHRhY2hfZ3Bpb19hbXAgLSBnZXQgYW5kIGNvbmZpZ3VyZSB0aGUgbmVjZXNzYXJ5IGdwaW9zCisgKiBAZGV2OiBUaGUgZGV2aWNlIHdlJ3JlIHByb2JpbmcuCisgKiBAcGQ6IFRoZSBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkIGJ5IHRoZSBib2FyZC4KKyAqCisgKiBJZiB0aGVyZSBpcyBhIEdQSU8gYmFzZWQgYW1wbGlmaWVyIGF0dGFjaGVkIHRvIHRoZSBib2FyZCwgY2xhaW0KKyAqIHRoZSBuZWNlc3NhcnkgR1BJTyBsaW5lcyBmb3IgaXQsIGFuZCBzZXQgZGVmYXVsdCB2YWx1ZXMuCisgKi8KK3N0YXRpYyBpbnQgYXR0YWNoX2dwaW9fYW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBzM2MyNHh4X2F1ZGlvX3NpbXRlY19wZGF0YSAqcGQpCit7CisJaW50IHJldDsKKworCS8qIGF0dGFjaCBncGlvIGFtcCBnYWluIChpZiBhbnkpICovCisJaWYgKHBkYXRhLT5hbXBfZ2FpblswXSA+IDApIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkLT5hbXBfZ2FpblswXSwgImdwaW8tYW1wLWdhaW4wIik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBhbXAgZ3BpbyBnYWluMFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkLT5hbXBfZ2FpblsxXSwgImdwaW8tYW1wLWdhaW4xIik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBhbXAgZ3BpbyBnYWluMVxuIik7CisJCQlncGlvX2ZyZWUocGRhdGEtPmFtcF9nYWluWzBdKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQocGQtPmFtcF9nYWluWzBdLCAwKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkLT5hbXBfZ2FpblsxXSwgMCk7CisJfQorCisJLyogbm90ZSwgY3VyZW50bHkgd2UgYXNzdW1lIEdQQTAgaXNuJ3QgdmFsaWQgYW1wICovCisJaWYgKHBkYXRhLT5hbXBfZ3BpbyA+IDApIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkLT5hbXBfZ3BpbywgImdwaW8tYW1wIik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBhbXAgZ3BpbyAlZCAoJWQpXG4iLAorCQkJCXBkLT5hbXBfZ3BpbywgcmV0KTsKKwkJCWdvdG8gZXJyX2FtcDsKKwkJfQorCisJCS8qIHNldCB0aGUgYW1wIG9mZiBhdCBzdGFydHVwICovCisJCXNwa191bm11dGVfc3RhdGUoMCk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9hbXA6CisJaWYgKHBkLT5hbXBfZ2FpblswXSA+IDApIHsKKwkJZ3Bpb19mcmVlKHBkLT5hbXBfZ2FpblswXSk7CisJCWdwaW9fZnJlZShwZC0+YW1wX2dhaW5bMV0pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRldGFjaF9ncGlvX2FtcChzdHJ1Y3QgczNjMjR4eF9hdWRpb19zaW10ZWNfcGRhdGEgKnBkKQoreworCWlmIChwZC0+YW1wX2dhaW5bMF0gPiAwKSB7CisJCWdwaW9fZnJlZShwZC0+YW1wX2dhaW5bMF0pOworCQlncGlvX2ZyZWUocGQtPmFtcF9nYWluWzFdKTsKKwl9CisKKwlpZiAocGQtPmFtcF9ncGlvID4gMCkKKwkJZ3Bpb19mcmVlKHBkLT5hbXBfZ3Bpbyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK2ludCBzaW10ZWNfYXVkaW9fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzaW10ZWNfY2FsbF9zdGFydHVwKHBkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGRldl9wbV9vcHMgc2ltdGVjX2F1ZGlvX3Btb3BzID0geworCS5yZXN1bWUJPSBzaW10ZWNfYXVkaW9fcmVzdW1lLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNpbXRlY19hdWRpb19wbW9wcyk7CisjZW5kaWYKKworaW50IF9fZGV2aW5pdCBzaW10ZWNfYXVkaW9fY29yZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSAgICAgIHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNuZF9kZXY7CisJaW50IHJldDsKKworCXNvY2Rldi0+Y2FyZC0+ZGFpX2xpbmstPm9wcyA9ICZzaW10ZWNfc25kX29wczsKKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2ltdGVjX2NhbGxfc3RhcnR1cChwZGF0YSk7CisKKwl4dGFsX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInh0YWwiKTsKKwlpZiAoSVNfRVJSKHh0YWxfY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IGNsa291dDBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAieHRhbCByYXRlIGlzICVsZFxuIiwgY2xrX2dldF9yYXRlKHh0YWxfY2xrKSk7CisKKwlyZXQgPSBhdHRhY2hfZ3Bpb19hbXAoJnBkZXYtPmRldiwgcGRhdGEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NsazsKKworCXNuZF9kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIXNuZF9kZXYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jIHNvYy1hdWRpbyBkZXZpY2VjXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZ3BpbzsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShzbmRfZGV2LCBzb2NkZXYpOworCXNvY2Rldi0+ZGV2ID0gJnNuZF9kZXYtPmRldjsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoc25kX2Rldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIHNvYy1hdWRpbyBkZXZcbiIpOworCQlnb3RvIGVycl9wZGV2OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNuZF9kZXYpOworCXJldHVybiAwOworCitlcnJfcGRldjoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHNuZF9kZXYpOworCitlcnJfZ3BpbzoKKwlkZXRhY2hfZ3Bpb19hbXAocGRhdGEpOworCitlcnJfY2xrOgorCWNsa19wdXQoeHRhbF9jbGspOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzaW10ZWNfYXVkaW9fY29yZV9wcm9iZSk7CisKK2ludCBfX2RldmV4aXQgc2ltdGVjX2F1ZGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNuZF9kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNuZF9kZXYpOworCisJZGV0YWNoX2dwaW9fYW1wKHBkYXRhKTsKKwljbGtfcHV0KHh0YWxfY2xrKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNpbXRlY19hdWRpb19yZW1vdmUpOworCitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIFNpbXRlYyBBdWRpbyBjb21tb24gc3VwcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWMuaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcxNDIwMwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjLmgKQEAgLTAsMCArMSwyMiBAQAorLyogc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWMuaAorICoKKyAqIENvcHlyaWdodCAyMDA5IFNpbXRlYyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCitleHRlcm4gdm9pZCBzaW10ZWNfYXVkaW9faW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOworCitleHRlcm4gaW50IHNpbXRlY19hdWRpb19jb3JlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJICAgc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYpOworCitleHRlcm4gaW50IHNpbXRlY19hdWRpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisKKyNpZmRlZiBDT05GSUdfUE0KK2V4dGVybiBzdHJ1Y3QgZGV2X3BtX29wcyBzaW10ZWNfYXVkaW9fcG1vcHM7CisjZGVmaW5lIHNpbXRlY19hdWRpb19wbSAmc2ltdGVjX2F1ZGlvX3Btb3BzCisjZWxzZQorI2RlZmluZSBzaW10ZWNfYXVkaW9fcG0gTlVMTAorI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHhfc2ltdGVjX2hlcm1lcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNDZiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYwpAQCAtMCwwICsxLDE1MyBAQAorLyogc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWNfaGVybWVzLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisKKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLXNpbXRlYy5oPgorCisjaW5jbHVkZSAiczNjMjR4eC1wY20uaCIKKyNpbmNsdWRlICJzM2MyNHh4LWkycy5oIgorI2luY2x1ZGUgInMzYzI0eHhfc2ltdGVjLmgiCisKKyNpbmNsdWRlICIuLi9jb2RlY3MvdGx2MzIwYWljM3guaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGRhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9MSU5FKCJHU00gT3V0IiwgTlVMTCksCisJU05EX1NPQ19EQVBNX0xJTkUoIkdTTSBJbiIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9MSU5FKCJMaW5lIEluIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX0xJTkUoIkxpbmUgT3V0IiwgTlVMTCksCisJU05EX1NPQ19EQVBNX0xJTkUoIlpWIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBiYXNlX21hcFtdID0geworCS8qIEhlYWRwaG9uZSBjb25uZWN0ZWQgdG8gSFB7TCxSfU9VVCBhbmQgSFB7TCxSfUNPTSAqLworCisJeyAiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSFBMT1VUIiB9LAorCXsgIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhQTENPTSIgfSwKKwl7ICJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIUFJPVVQiIH0sCisJeyAiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSFBSQ09NIiB9LAorCisJLyogWlYgY29ubmVjdGVkIHRvIExpbmUxICovCisKKwl7ICJMSU5FMUwiLCBOVUxMLCAiWlYiIH0sCisJeyAiTElORTFSIiwgTlVMTCwgIlpWIiB9LAorCisJLyogTGluZSBJbiBjb25uZWN0ZWQgdG8gTGluZTIgKi8KKworCXsgIkxJTkUyTCIsIE5VTEwsICJMaW5lIEluIiB9LAorCXsgIkxJTkUyUiIsIE5VTEwsICJMaW5lIEluIiB9LAorCisJLyogTWljcm9waG9uZSBjb25uZWN0ZWQgdG8gTUlDM1IgYW5kIE1JQ19CSUFTICovCisKKwl7ICJNSUMzTCIsIE5VTEwsICJNaWMgSmFjayIgfSwKKworCS8qIEdTTSBjb25uZWN0ZWQgdG8gTU9OT19MT1VUIGFuZCBNSUMzTCAoaW4pICovCisKKwl7ICJHU00gT3V0IiwgTlVMTCwgIk1PTk9fTE9VVCIgfSwKKwl7ICJNSUMzTCIsIE5VTEwsICJHU00gSW4iIH0sCisKKwkvKiBTcGVha2VyIGlzIGNvbm5lY3RlZCB0byBMSU5FT1VUe0xOLExQLFJOLFJQfSwgaG93ZXZlciB3ZSBhcmUKKwkgKiBub3QgdXNpbmcgdGhlIERBUE0gdG8gcG93ZXIgaXQgdXAgYW5kIGRvd24gYXMgdGhlcmUgaXQgbWFrZXMKKwkgKiBhIGNsaWNrIHdoZW4gcG93ZXJpbmcgdXAuICovCit9OworCisvKioKKyAqIHNpbXRlY19oZXJtZXNfaW5pdCAtIGluaXRpYWxpc2UgYW5kIGFkZCBjb250cm9scworICogQGNvZGVjOyBUaGUgY29kZWMgaW5zdGFuY2UgdG8gYXR0YWNoIHRvLgorICoKKyAqIEF0dGFjaCBvdXIgY29udHJvbHMgYW5kIGNvbmZpZ3VyZSB0aGUgbmVjZXNzYXJ5IGNvZGVjCisgKiBtYXBwaW5ncyBmb3Igb3VyIHNvdW5kIGNhcmQgaW5zdGFuY2UuCisqLworc3RhdGljIGludCBzaW10ZWNfaGVybWVzX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGRhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUoZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYmFzZV9tYXAsIEFSUkFZX1NJWkUoYmFzZV9tYXApKTsKKworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkxpbmUgSW4iKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkxpbmUgT3V0Iik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJNaWMgSmFjayIpOworCisJc2ltdGVjX2F1ZGlvX2luaXQoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGFpYzN4X3NldHVwX2RhdGEgY29kZWNfc2V0dXAgPSB7Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc2ltdGVjX2RhaV9haWMzMyA9IHsKKwkubmFtZQkJPSAidGx2MzIwYWljMzMiLAorCS5zdHJlYW1fbmFtZQk9ICJUTFYzMjBBSUMzMyIsCisJLmNwdV9kYWkJPSAmczNjMjR4eF9pMnNfZGFpLAorCS5jb2RlY19kYWkJPSAmYWljM3hfZGFpLAorCS5pbml0CQk9IHNpbXRlY19oZXJtZXNfaW5pdCwKK307CisKKy8qIHNpbXRlYyBhdWRpbyBtYWNoaW5lIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19tYWNoaW5lX3NpbXRlY19haWMzMyA9IHsKKwkubmFtZQkJPSAiU2ltdGVjLUhlcm1lcyIsCisJLnBsYXRmb3JtCT0gJnMzYzI0eHhfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluawk9ICZzaW10ZWNfZGFpX2FpYzMzLAorCS5udW1fbGlua3MJPSAxLAorfTsKKworLyogc2ltdGVjIGF1ZGlvIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBzaW10ZWNfc25kX2RldmRhdGFfYWljMzMgPSB7CisJLmNhcmQJCT0gJnNuZF9zb2NfbWFjaGluZV9zaW10ZWNfYWljMzMsCisJLmNvZGVjX2Rldgk9ICZzb2NfY29kZWNfZGV2X2FpYzN4LAorCS5jb2RlY19kYXRhCT0gJmNvZGVjX3NldHVwLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgc2ltdGVjX2F1ZGlvX2hlcm1lc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZCkKK3sKKwlkZXZfaW5mbygmcGQtPmRldiwgInByb2JpbmcuLi4uXG4iKTsKKwlyZXR1cm4gc2ltdGVjX2F1ZGlvX2NvcmVfcHJvYmUocGQsICZzaW10ZWNfc25kX2RldmRhdGFfYWljMzMpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaW10ZWNfYXVkaW9faGVybWVzX3BsYXRkcnYgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInMzYzI0eHgtc2ltdGVjLWhlcm1lcy1zbmQiLAorCQkucG0JPSBzaW10ZWNfYXVkaW9fcG0sCisJfSwKKwkucHJvYmUJPSBzaW10ZWNfYXVkaW9faGVybWVzX3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChzaW10ZWNfYXVkaW9fcmVtb3ZlKSwKK307CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjR4eC1zaW10ZWMtaGVybWVzLXNuZCIpOworCitzdGF0aWMgaW50IF9faW5pdCBzaW10ZWNfaGVybWVzX21vZGluaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzaW10ZWNfYXVkaW9faGVybWVzX3BsYXRkcnYpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2ltdGVjX2hlcm1lc19tb2RleGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNpbXRlY19hdWRpb19oZXJtZXNfcGxhdGRydik7Cit9CisKK21vZHVsZV9pbml0KHNpbXRlY19oZXJtZXNfbW9kaW5pdCk7Cittb2R1bGVfZXhpdChzaW10ZWNfaGVybWVzX21vZGV4aXQpOworCitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIFNpbXRlYyBBdWRpbyBzdXBwb3J0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTc5N2UwCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYwpAQCAtMCwwICsxLDEzNyBAQAorLyogc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYworICoKKyAqIENvcHlyaWdodCAyMDA5IFNpbXRlYyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPHBsYXQvYXVkaW8tc2ltdGVjLmg+CisKKyNpbmNsdWRlICJzM2MyNHh4LXBjbS5oIgorI2luY2x1ZGUgInMzYzI0eHgtaTJzLmgiCisjaW5jbHVkZSAiczNjMjR4eF9zaW10ZWMuaCIKKworI2luY2x1ZGUgIi4uL2NvZGVjcy90bHYzMjBhaWMyMy5oIgorCisvKiBzdXBwb3J0ZWQgbWFjaGluZXM6CisgKgorICogTWFjaGluZQlDb25uZWN0aW9ucwkJQU1QCisgKiAtLS0tLS0tCS0tLS0tLS0tLS0tCQktLS0KKyAqIEJBU1QJCU1JQywgSFBPVVQsIExPVVQsIExJTglUUEEyMDAxRDEgKEhQT1VUTCxSKSAoZ2FpbiBoYXJkd2lyZWQpCisgKiBWUjEwMDAJSFBPVVQsIExJTgkJTm9uZQorICogVlIyMDAwCUxJTiwgTE9VVCwgTUlDLCBIUAlMTTQ4NzEgKEhQT1VUTCxSKQorICogRGVQaWN0dXJlCUxJTiwgTE9VVCwgTUlDLCBIUAlMTTQ4NzEgKEhQT1VUTCxSKQorICogQW51YmlzCUxJTiwgTE9VVCwgTUlDLCBIUAlUUEEyMDAxRDEgKEhQT1VUTCxSKQorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBkYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX0xJTkUoIkxpbmUgSW4iLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTElORSgiTGluZSBPdXQiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgSmFjayIsIE5VTEwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYmFzZV9tYXBbXSA9IHsKKwl7ICJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJMSFBPVVQifSwKKwl7ICJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJSSFBPVVQifSwKKworCXsgIkxpbmUgT3V0IiwgTlVMTCwgIkxPVVQiIH0sCisJeyAiTGluZSBPdXQiLCBOVUxMLCAiUk9VVCIgfSwKKworCXsgIkxMSU5FSU4iLCBOVUxMLCAiTGluZSBJbiJ9LAorCXsgIlJMSU5FSU4iLCBOVUxMLCAiTGluZSBJbiJ9LAorCisJeyAiTUlDSU4iLCBOVUxMLCAiTWljIEphY2sifSwKK307CisKKy8qKgorICogc2ltdGVjX3RsdjMyMGFpYzIzX2luaXQgLSBpbml0aWFsaXNlIGFuZCBhZGQgY29udHJvbHMKKyAqIEBjb2RlYzsgVGhlIGNvZGVjIGluc3RhbmNlIHRvIGF0dGFjaCB0by4KKyAqCisgKiBBdHRhY2ggb3VyIGNvbnRyb2xzIGFuZCBjb25maWd1cmUgdGhlIG5lY2Vzc2FyeSBjb2RlYworICogbWFwcGluZ3MgZm9yIG91ciBzb3VuZCBjYXJkIGluc3RhbmNlLgorKi8KK3N0YXRpYyBpbnQgc2ltdGVjX3RsdjMyMGFpYzIzX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGRhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUoZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYmFzZV9tYXAsIEFSUkFZX1NJWkUoYmFzZV9tYXApKTsKKworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkxpbmUgSW4iKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkxpbmUgT3V0Iik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJNaWMgSmFjayIpOworCisJc2ltdGVjX2F1ZGlvX2luaXQoY29kZWMpOworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc2ltdGVjX2RhaV9haWMyMyA9IHsKKwkubmFtZQkJPSAidGx2MzIwYWljMjMiLAorCS5zdHJlYW1fbmFtZQk9ICJUTFYzMjBBSUMyMyIsCisJLmNwdV9kYWkJPSAmczNjMjR4eF9pMnNfZGFpLAorCS5jb2RlY19kYWkJPSAmdGx2MzIwYWljMjNfZGFpLAorCS5pbml0CQk9IHNpbXRlY190bHYzMjBhaWMyM19pbml0LAorfTsKKworLyogc2ltdGVjIGF1ZGlvIG1hY2hpbmUgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbmRfc29jX21hY2hpbmVfc2ltdGVjX2FpYzIzID0geworCS5uYW1lCQk9ICJTaW10ZWMiLAorCS5wbGF0Zm9ybQk9ICZzM2MyNHh4X3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsJPSAmc2ltdGVjX2RhaV9haWMyMywKKwkubnVtX2xpbmtzCT0gMSwKK307CisKKy8qIHNpbXRlYyBhdWRpbyBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2Ugc2ltdGVjX3NuZF9kZXZkYXRhX2FpYzIzID0geworCS5jYXJkCQk9ICZzbmRfc29jX21hY2hpbmVfc2ltdGVjX2FpYzIzLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl90bHYzMjBhaWMyMywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNpbXRlY19hdWRpb190bHYzMjBhaWMyM19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZCkKK3sKKwlyZXR1cm4gc2ltdGVjX2F1ZGlvX2NvcmVfcHJvYmUocGQsICZzaW10ZWNfc25kX2RldmRhdGFfYWljMjMpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaW10ZWNfYXVkaW9fdGx2MzIwYWljMjNfcGxhdGRydiA9IHsKKwkuZHJpdmVyCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiczNjMjR4eC1zaW10ZWMtdGx2MzIwYWljMjMiLAorCQkucG0JPSBzaW10ZWNfYXVkaW9fcG0sCisJfSwKKwkucHJvYmUJPSBzaW10ZWNfYXVkaW9fdGx2MzIwYWljMjNfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKHNpbXRlY19hdWRpb19yZW1vdmUpLAorfTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNHh4LXNpbXRlYy10bHYzMjBhaWMyMyIpOworCitzdGF0aWMgaW50IF9faW5pdCBzaW10ZWNfdGx2MzIwYWljMjNfbW9kaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNpbXRlY19hdWRpb190bHYzMjBhaWMyM19wbGF0ZHJ2KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNpbXRlY190bHYzMjBhaWMyM19tb2RleGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNpbXRlY19hdWRpb190bHYzMjBhaWMyM19wbGF0ZHJ2KTsKK30KKworbW9kdWxlX2luaXQoc2ltdGVjX3RsdjMyMGFpYzIzX21vZGluaXQpOworbW9kdWxlX2V4aXQoc2ltdGVjX3RsdjMyMGFpYzIzX21vZGV4aXQpOworCitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIFNpbXRlYyBBdWRpbyBzdXBwb3J0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczYwMDAvczYxMDUtaXBjYW0uYyBiL3NvdW5kL3NvYy9zNjAwMC9zNjEwNS1pcGNhbS5jCmluZGV4IGI1Zjk1ZjkuLmMxYjQwYWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zNjAwMC9zNjEwNS1pcGNhbS5jCisrKyBiL3NvdW5kL3NvYy9zNjAwMC9zNjEwNS1pcGNhbS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CkBAIC0xODksOCArMTkwLDYgQEAKIAogLyogczYxMDUgYXVkaW8gcHJpdmF0ZSBkYXRhICovCiBzdGF0aWMgc3RydWN0IGFpYzN4X3NldHVwX2RhdGEgczYxMDVfYWljM3hfc2V0dXAgPSB7Ci0JLmkyY19idXMgPSAwLAotCS5pMmNfYWRkcmVzcyA9IDB4MTgsCiB9OwogCiAvKiBzNjEwNSBhdWRpbyBzdWJzeXN0ZW0gKi8KQEAgLTIxMSwxMCArMjEwLDE5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzNjEwNV9zbmRfZGV2aWNlOwogCisvKiB0ZW1wb3JhcnkgaTJjIGRldmljZSBjcmVhdGlvbiB1bnRpbCB0aGlzIGNhbiBiZSBtb3ZlZCBpbnRvIHRoZSBtYWNoaW5lCisgKiBzdXBwb3J0IGZpbGUuCisqLworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfZGV2aWNlW10gPSB7CisJeyBJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljMzMiLCAweDE4KSwgfQorfTsKKwogc3RhdGljIGludCBfX2luaXQgczYxMDVfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmNfZGV2aWNlLCBBUlJBWV9TSVpFKGkyY19kZXZpY2UpKTsKKwogCXM2MTA1X3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKIAlpZiAoIXM2MTA1X3NuZF9kZXZpY2UpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL0tjb25maWcgYi9zb3VuZC9zb2Mvc2gvS2NvbmZpZwppbmRleCA1NGJkNjA0Li45MTU0YjQzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvS2NvbmZpZworKysgYi9zb3VuZC9zb2Mvc2gvS2NvbmZpZwpAQCAtMjAsNyArMjAsMTIgQEAKIGNvbmZpZyBTTkRfU09DX1NINF9TU0kKIAl0cmlzdGF0ZQogCi0KK2NvbmZpZyBTTkRfU09DX1NINF9GU0kKKwl0cmlzdGF0ZSAiU0g0IEZTSSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzI0CisgICAgICAgIHNlbGVjdCBTSF9ETUEKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIEZTSSBzb3VuZCBzdXBwb3J0CiAKICMjCiAjIyBCb2FyZHMKQEAgLTM1LDQgKzQwLDEyIEBACiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGdlbmVyaWMgc291bmQgc3VwcG9ydCBmb3IgdGhlIGZpcnN0CiAJICBBQzk3IHVuaXQgb2YgdGhlIFNINzc2MC4KIAorY29uZmlnIFNORF9GU0lfQUs0NjQyCisJYm9vbCAiRlNJLUFLNDY0MiBzb3VuZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gU05EX1NPQ19TSDRfRlNJCisJc2VsZWN0IFNORF9TT0NfQUs0NjQyCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBnZW5lcmljIHNvdW5kIHN1cHBvcnQgZm9yIHRoZQorCSAgRlNJIC0gQUs0NjQyIHVuaXQKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL01ha2VmaWxlIGIvc291bmQvc29jL3NoL01ha2VmaWxlCmluZGV4IGE4ZThhYjguLmE2OTk3ODcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2Mvc2gvTWFrZWZpbGUKQEAgLTUsMTAgKzUsMTQgQEAKICMjIGF1ZGlvIHVuaXRzIGZvdW5kIG9uIHNvbWUgU0gtNAogc25kLXNvYy1oYWMtb2Jqcwk6PSBoYWMubwogc25kLXNvYy1zc2ktb2Jqcwk6PSBzc2kubworc25kLXNvYy1mc2ktb2Jqcwk6PSBmc2kubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU0g0X0hBQykJKz0gc25kLXNvYy1oYWMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU0g0X1NTSSkJKz0gc25kLXNvYy1zc2kubworb2JqLSQoQ09ORklHX1NORF9TT0NfU0g0X0ZTSSkJKz0gc25kLXNvYy1mc2kubwogCiAjIyBib2FyZHMKIHNuZC1zb2Mtc2g3NzYwLWFjOTctb2Jqcwk6PSBzaDc3NjAtYWM5Ny5vCitzbmQtc29jLWZzaS1hazQ2NDItb2JqcwkJOj0gZnNpLWFrNDY0Mi5vCiAKIG9iai0kKENPTkZJR19TTkRfU0g3NzYwX0FDOTcpCSs9IHNuZC1zb2Mtc2g3NzYwLWFjOTcubworb2JqLSQoQ09ORklHX1NORF9GU0lfQUs0NjQyKQkrPSBzbmQtc29jLWZzaS1hazQ2NDIubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS1hazQ2NDIuYyBiL3NvdW5kL3NvYy9zaC9mc2ktYWs0NjQyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhZjA5NwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zaC9mc2ktYWs0NjQyLmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBGU0ktQUs0NjR4IHNvdW5kIHN1cHBvcnQgZm9yIG1zNzcyNHNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPHNvdW5kL3NoX2ZzaS5oPgorI2luY2x1ZGUgPC4uL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmg+CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBmc2lfZGFpX2xpbmsgPSB7CisJLm5hbWUJCT0gIkFLNDY0MiIsCisJLnN0cmVhbV9uYW1lCT0gIkFLNDY0MiIsCisJLmNwdV9kYWkJPSAmZnNpX3NvY19kYWlbMF0sIC8qIGZzaSAqLworCS5jb2RlY19kYWkJPSAmYWs0NjQyX2RhaSwKKwkub3BzCQk9IE5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBmc2lfc29jX2NhcmQgID0geworCS5uYW1lCQk9ICJGU0kiLAorCS5wbGF0Zm9ybQk9ICZmc2lfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluawk9ICZmc2lfZGFpX2xpbmssCisJLm51bV9saW5rcwk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGZzaV9zbmRfZGV2ZGF0YSA9IHsKKwkuY2FyZAkJPSAmZnNpX3NvY19jYXJkLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl9hazQ2NDIsCit9OworCisjZGVmaW5lIEFLNDY0Ml9CVVMgMAorI2RlZmluZSBBSzQ2NDJfQURSIDB4MTIKK3N0YXRpYyBpbnQgYWs0NjQyX2FkZF9pMmNfZGV2aWNlKHZvaWQpCit7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwlpbmZvLmFkZHIgPSBBSzQ2NDJfQURSOworCXN0cmxjcHkoaW5mby50eXBlLCAiYWs0NjQyIiwgSTJDX05BTUVfU0laRSk7CisKKwlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKEFLNDY0Ml9CVVMpOworCWlmICghYWRhcHRlcikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOworCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKKwlpZiAoIWNsaWVudCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiY2FuJ3QgYWRkIGkyYyBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZzaV9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBmc2lfYWs0NjQyX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWFrNDY0Ml9hZGRfaTJjX2RldmljZSgpOworCisJZnNpX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWZzaV9zbmRfZGV2aWNlKQorCQlnb3RvIG91dDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGZzaV9zbmRfZGV2aWNlLAorCQkJICAgICAmZnNpX3NuZF9kZXZkYXRhKTsKKwlmc2lfc25kX2RldmRhdGEuZGV2ID0gJmZzaV9zbmRfZGV2aWNlLT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChmc2lfc25kX2RldmljZSk7CisKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGZzaV9zbmRfZGV2aWNlKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmc2lfYWs0NjQyX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihmc2lfc25kX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGZzaV9hazQ2NDJfaW5pdCk7Cittb2R1bGVfZXhpdChmc2lfYWs0NjQyX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgU0g0IEZTSS1BSzQ2NDIgc291bmQgY2FyZCIpOworTU9EVUxFX0FVVEhPUigiS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS5jIGIvc291bmQvc29jL3NoL2ZzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MTIzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKQEAgLTAsMCArMSwxMDA0IEBACisvKgorICogRmlmby1hdHRhY2hlZCBTZXJpYWwgSW50ZXJmYWNlIChGU0kpIHN1cHBvcnQgZm9yIFNINzcyNAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIEJhc2VkIG9uIHNzaS5jCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgTWFudWVsIExhdXNzIDxtYW5vQHJvYXJpbmVsay5ob21lbGludXgubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NoX2ZzaS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgorCisjZGVmaW5lIERPX0ZNVAkJMHgwMDAwCisjZGVmaW5lIERPRkZfQ1RMCTB4MDAwNAorI2RlZmluZSBET0ZGX1NUCQkweDAwMDgKKyNkZWZpbmUgRElfRk1UCQkweDAwMEMKKyNkZWZpbmUgRElGRl9DVEwJMHgwMDEwCisjZGVmaW5lIERJRkZfU1QJCTB4MDAxNAorI2RlZmluZSBDS0cxCQkweDAwMTgKKyNkZWZpbmUgQ0tHMgkJMHgwMDFDCisjZGVmaW5lIERJRFQJCTB4MDAyMAorI2RlZmluZSBET0RUCQkweDAwMjQKKyNkZWZpbmUgTVVURV9TVAkJMHgwMDI4CisjZGVmaW5lIFJFR19FTkQJCU1VVEVfU1QKKworI2RlZmluZSBJTlRfU1QJCTB4MDIwMAorI2RlZmluZSBJRU1TSwkJMHgwMjA0CisjZGVmaW5lIElNU0sJCTB4MDIwOAorI2RlZmluZSBNVVRFCQkweDAyMEMKKyNkZWZpbmUgQ0xLX1JTVAkJMHgwMjEwCisjZGVmaW5lIFNPRlRfUlNUCTB4MDIxNAorI2RlZmluZSBNUkVHX1NUQVJUCUlOVF9TVAorI2RlZmluZSBNUkVHX0VORAlTT0ZUX1JTVAorCisvKiBET19GTVQgKi8KKy8qIERJX0ZNVCAqLworI2RlZmluZSBDUl9GTVQocGFyYW0pICgocGFyYW0pIDw8IDQpCisjIGRlZmluZSBDUl9NT05PCTB4MAorIyBkZWZpbmUgQ1JfTU9OT19ECTB4MQorIyBkZWZpbmUgQ1JfUENNCQkweDIKKyMgZGVmaW5lIENSX0kyUwkJMHgzCisjIGRlZmluZSBDUl9URE0JCTB4NAorIyBkZWZpbmUgQ1JfVERNX0QJMHg1CisKKy8qIERPRkZfQ1RMICovCisvKiBESUZGX0NUTCAqLworI2RlZmluZSBJUlFfSEFMRgkweDAwMTAwMDAwCisjZGVmaW5lIEZJRk9fQ0xSCTB4MDAwMDAwMDEKKworLyogRE9GRl9TVCAqLworI2RlZmluZSBFUlJfT1ZFUgkweDAwMDAwMDEwCisjZGVmaW5lIEVSUl9VTkRFUgkweDAwMDAwMDAxCisKKy8qIENMS19SU1QgKi8KKyNkZWZpbmUgQl9DTEsJCTB4MDAwMDAwMTAKKyNkZWZpbmUgQV9DTEsJCTB4MDAwMDAwMDEKKworLyogSU5UX1NUICovCisjZGVmaW5lIElOVF9CX0lOCSgxIDw8IDEyKQorI2RlZmluZSBJTlRfQl9PVVQJKDEgPDwgOCkKKyNkZWZpbmUgSU5UX0FfSU4JKDEgPDwgNCkKKyNkZWZpbmUgSU5UX0FfT1VUCSgxIDw8IDApCisKKyNkZWZpbmUgRlNJX1JBVEVTIFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKKworI2RlZmluZSBGU0lfRk1UUyAoU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKwkJc3RydWN0CisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGZzaV9wcml2IHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisKKwlpbnQgZmlmb19tYXg7CisJaW50IGNoYW47CisJaW50IGRtYV9jaGFuOworCisJaW50IGJ5dGVfb2Zmc2V0OworCWludCBwZXJpb2RfbGVuOworCWludCBidWZmZXJfbGVuOworCWludCBwZXJpb2RzOworfTsKKworc3RydWN0IGZzaV9tYXN0ZXIgeworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgaXJxOworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgZnNpX3ByaXYgZnNpYTsKKwlzdHJ1Y3QgZnNpX3ByaXYgZnNpYjsKKwlzdHJ1Y3Qgc2hfZnNpX3BsYXRmb3JtX2luZm8gKmluZm87Cit9OworCitzdGF0aWMgc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKwkJYmFzaWMgcmVhZCB3cml0ZSBmdW5jdGlvbgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgX19mc2lfcmVnX3dyaXRlKHUzMiByZWcsIHUzMiBkYXRhKQoreworCS8qIHZhbGlkIGRhdGEgYXJlYSBpcyAyNGJpdCAqLworCWRhdGEgJj0gMHgwMGZmZmZmZjsKKworCXJldHVybiBjdHJsX291dGwoZGF0YSwgcmVnKTsKK30KKworc3RhdGljIHUzMiBfX2ZzaV9yZWdfcmVhZCh1MzIgcmVnKQoreworCXJldHVybiBjdHJsX2lubChyZWcpOworfQorCitzdGF0aWMgaW50IF9fZnNpX3JlZ19tYXNrX3NldCh1MzIgcmVnLCB1MzIgbWFzaywgdTMyIGRhdGEpCit7CisJdTMyIHZhbCA9IF9fZnNpX3JlZ19yZWFkKHJlZyk7CisKKwl2YWwgJj0gfm1hc2s7CisJdmFsIHw9IGRhdGEgJiBtYXNrOworCisJcmV0dXJuIF9fZnNpX3JlZ193cml0ZShyZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgZnNpX3JlZ193cml0ZShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgdTMyIHJlZywgdTMyIGRhdGEpCit7CisJaWYgKHJlZyA+IFJFR19FTkQpCisJCXJldHVybiAtMTsKKworCXJldHVybiBfX2ZzaV9yZWdfd3JpdGUoKHUzMikoZnNpLT5iYXNlICsgcmVnKSwgZGF0YSk7Cit9CisKK3N0YXRpYyB1MzIgZnNpX3JlZ19yZWFkKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCB1MzIgcmVnKQoreworCWlmIChyZWcgPiBSRUdfRU5EKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBfX2ZzaV9yZWdfcmVhZCgodTMyKShmc2ktPmJhc2UgKyByZWcpKTsKK30KKworc3RhdGljIGludCBmc2lfcmVnX21hc2tfc2V0KHN0cnVjdCBmc2lfcHJpdiAqZnNpLCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIGRhdGEpCit7CisJaWYgKHJlZyA+IFJFR19FTkQpCisJCXJldHVybiAtMTsKKworCXJldHVybiBfX2ZzaV9yZWdfbWFza19zZXQoKHUzMikoZnNpLT5iYXNlICsgcmVnKSwgbWFzaywgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgZnNpX21hc3Rlcl93cml0ZSh1MzIgcmVnLCB1MzIgZGF0YSkKK3sKKwlpZiAoKHJlZyA8IE1SRUdfU1RBUlQpIHx8CisJICAgIChyZWcgPiBNUkVHX0VORCkpCisJCXJldHVybiAtMTsKKworCXJldHVybiBfX2ZzaV9yZWdfd3JpdGUoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSwgZGF0YSk7Cit9CisKK3N0YXRpYyB1MzIgZnNpX21hc3Rlcl9yZWFkKHUzMiByZWcpCit7CisJaWYgKChyZWcgPCBNUkVHX1NUQVJUKSB8fAorCSAgICAocmVnID4gTVJFR19FTkQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBfX2ZzaV9yZWdfcmVhZCgodTMyKShtYXN0ZXItPmJhc2UgKyByZWcpKTsKK30KKworc3RhdGljIGludCBmc2lfbWFzdGVyX21hc2tfc2V0KHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgZGF0YSkKK3sKKwlpZiAoKHJlZyA8IE1SRUdfU1RBUlQpIHx8CisJICAgIChyZWcgPiBNUkVHX0VORCkpCisJCXJldHVybiAtMTsKKworCXJldHVybiBfX2ZzaV9yZWdfbWFza19zZXQoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSwgbWFzaywgZGF0YSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisJCWJhc2ljIGZ1bmN0aW9uCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBmc2lfcHJpdiAqZnNpX2dldChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkOworCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gTlVMTDsKKworCWlmICghc3Vic3RyZWFtIHx8ICFtYXN0ZXIpCisJCXJldHVybiBOVUxMOworCisJcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3dpdGNoIChydGQtPmRhaS0+Y3B1X2RhaS0+aWQpIHsKKwljYXNlIDA6CisJCWZzaSA9ICZtYXN0ZXItPmZzaWE7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZnNpID0gJm1hc3Rlci0+ZnNpYjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGZzaTsKK30KKworc3RhdGljIGludCBmc2lfaXNfcG9ydF9hKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQoreworCS8qIHJldHVybgorCSAqIDEgOiBwb3J0IGEKKwkgKiAwIDogcG9ydCBiCisJICovCisKKwlpZiAoZnNpID09ICZtYXN0ZXItPmZzaWEpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgZnNpX2dldF9pbmZvX2ZsYWdzKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQoreworCWludCBpc19wb3J0YSA9IGZzaV9pc19wb3J0X2EoZnNpKTsKKworCXJldHVybiBpc19wb3J0YSA/IG1hc3Rlci0+aW5mby0+cG9ydGFfZmxhZ3MgOgorCQltYXN0ZXItPmluZm8tPnBvcnRiX2ZsYWdzOworfQorCitzdGF0aWMgaW50IGZzaV9pc19tYXN0ZXJfbW9kZShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGlzX3BsYXkpCit7CisJdTMyIG1vZGU7CisJdTMyIGZsYWdzID0gZnNpX2dldF9pbmZvX2ZsYWdzKGZzaSk7CisKKwltb2RlID0gaXNfcGxheSA/IFNIX0ZTSV9PVVRfU0xBVkVfTU9ERSA6IFNIX0ZTSV9JTl9TTEFWRV9NT0RFOworCisJLyogcmV0dXJuCisJICogMSA6IG1hc3RlciBtb2RlCisJICogMCA6IHNsYXZlIG1vZGUKKwkgKi8KKworCXJldHVybiAobW9kZSAmIGZsYWdzKSAhPSBtb2RlOworfQorCitzdGF0aWMgdTMyIGZzaV9wb3J0X2FiX2lvX2JpdChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGlzX3BsYXkpCit7CisJaW50IGlzX3BvcnRhID0gZnNpX2lzX3BvcnRfYShmc2kpOworCXUzMiBkYXRhOworCisJaWYgKGlzX3BvcnRhKQorCQlkYXRhID0gaXNfcGxheSA/ICgxIDw8IDApIDogKDEgPDwgNCk7CisJZWxzZQorCQlkYXRhID0gaXNfcGxheSA/ICgxIDw8IDgpIDogKDEgPDwgMTIpOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGZzaV9zdHJlYW1fcHVzaChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICB1MzIgYnVmZmVyX2xlbiwKKwkJCSAgICB1MzIgcGVyaW9kX2xlbikKK3sKKwlmc2ktPnN1YnN0cmVhbQkJPSBzdWJzdHJlYW07CisJZnNpLT5idWZmZXJfbGVuCQk9IGJ1ZmZlcl9sZW47CisJZnNpLT5wZXJpb2RfbGVuCQk9IHBlcmlvZF9sZW47CisJZnNpLT5ieXRlX29mZnNldAk9IDA7CisJZnNpLT5wZXJpb2RzCQk9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZzaV9zdHJlYW1fcG9wKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQoreworCWZzaS0+c3Vic3RyZWFtCQk9IE5VTEw7CisJZnNpLT5idWZmZXJfbGVuCQk9IDA7CisJZnNpLT5wZXJpb2RfbGVuCQk9IDA7CisJZnNpLT5ieXRlX29mZnNldAk9IDA7CisJZnNpLT5wZXJpb2RzCQk9IDA7Cit9CisKK3N0YXRpYyBpbnQgZnNpX2dldF9maWZvX3Jlc2lkdWUoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBpc19wbGF5KQoreworCXUzMiBzdGF0dXM7CisJdTMyIHJlZyA9IGlzX3BsYXkgPyBET0ZGX1NUIDogRElGRl9TVDsKKwlpbnQgcmVzaWR1ZTsKKworCXN0YXR1cyA9IGZzaV9yZWdfcmVhZChmc2ksIHJlZyk7CisJcmVzaWR1ZSA9IDB4MWZmICYgKHN0YXR1cyA+PiA4KTsKKwlyZXNpZHVlICo9IGZzaS0+Y2hhbjsKKworCXJldHVybiByZXNpZHVlOworfQorCitzdGF0aWMgaW50IGZzaV9nZXRfcmVzaWR1ZShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGlzX3BsYXkpCit7CisJaW50IHJlc2lkdWU7CisJaW50IHdpZHRoOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CisKKwlydW50aW1lID0gZnNpLT5zdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwkvKiBnZXQgMSBjaGFubmVsIGRhdGEgd2lkdGggKi8KKwl3aWR0aCA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSAvIGZzaS0+Y2hhbjsKKworCWlmICgyID09IHdpZHRoKQorCQlyZXNpZHVlID0gZnNpX2dldF9maWZvX3Jlc2lkdWUoZnNpLCBpc19wbGF5KTsKKwllbHNlCisJCXJlc2lkdWUgPSBnZXRfZG1hX3Jlc2lkdWUoZnNpLT5kbWFfY2hhbik7CisKKwlyZXR1cm4gcmVzaWR1ZTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKwkJYmFzaWMgZG1hIGZ1bmN0aW9uCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQT1JUQV9ETUEgMAorI2RlZmluZSBQT1JUQl9ETUEgMQorCitzdGF0aWMgaW50IGZzaV9nZXRfZG1hX2NoYW4odm9pZCkKK3sKKwlpZiAoMCAhPSByZXF1ZXN0X2RtYShQT1JUQV9ETUEsICJmc2lhIikpCisJCXJldHVybiAtRUlPOworCisJaWYgKDAgIT0gcmVxdWVzdF9kbWEoUE9SVEJfRE1BLCAiZnNpYiIpKSB7CisJCWZyZWVfZG1hKFBPUlRBX0RNQSk7CisJCXJldHVybiAtRUlPOworCX0KKworCW1hc3Rlci0+ZnNpYS5kbWFfY2hhbiA9IFBPUlRBX0RNQTsKKwltYXN0ZXItPmZzaWIuZG1hX2NoYW4gPSBQT1JUQl9ETUE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnNpX2ZyZWVfZG1hX2NoYW4odm9pZCkKK3sKKwlkbWFfd2FpdF9mb3JfY29tcGxldGlvbihQT1JUQV9ETUEpOworCWRtYV93YWl0X2Zvcl9jb21wbGV0aW9uKFBPUlRCX0RNQSk7CisJZnJlZV9kbWEoUE9SVEFfRE1BKTsKKwlmcmVlX2RtYShQT1JUQl9ETUEpOworCisJbWFzdGVyLT5mc2lhLmRtYV9jaGFuID0gLTE7CisJbWFzdGVyLT5mc2liLmRtYV9jaGFuID0gLTE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisJCWN0cmwgZnVuY3Rpb24KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBmc2lfaXJxX2VuYWJsZShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGlzX3BsYXkpCit7CisJdTMyIGRhdGEgPSBmc2lfcG9ydF9hYl9pb19iaXQoZnNpLCBpc19wbGF5KTsKKworCWZzaV9tYXN0ZXJfbWFza19zZXQoSU1TSywgIGRhdGEsIGRhdGEpOworCWZzaV9tYXN0ZXJfbWFza19zZXQoSUVNU0ssIGRhdGEsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBmc2lfaXJxX2Rpc2FibGUoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBpc19wbGF5KQoreworCXUzMiBkYXRhID0gZnNpX3BvcnRfYWJfaW9fYml0KGZzaSwgaXNfcGxheSk7CisKKwlmc2lfbWFzdGVyX21hc2tfc2V0KElNU0ssICBkYXRhLCAwKTsKKwlmc2lfbWFzdGVyX21hc2tfc2V0KElFTVNLLCBkYXRhLCAwKTsKK30KKworc3RhdGljIHZvaWQgZnNpX2Nsa19jdHJsKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCBpbnQgZW5hYmxlKQoreworCXUzMiB2YWwgPSBmc2lfaXNfcG9ydF9hKGZzaSkgPyAoMSA8PCAwKSA6ICgxIDw8IDQpOworCisJaWYgKGVuYWJsZSkKKwkJZnNpX21hc3Rlcl9tYXNrX3NldChDTEtfUlNULCB2YWwsIHZhbCk7CisJZWxzZQorCQlmc2lfbWFzdGVyX21hc2tfc2V0KENMS19SU1QsIHZhbCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGZzaV9pcnFfaW5pdChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGlzX3BsYXkpCit7CisJdTMyIGRhdGE7CisJdTMyIGN0cmw7CisKKwlkYXRhID0gZnNpX3BvcnRfYWJfaW9fYml0KGZzaSwgaXNfcGxheSk7CisJY3RybCA9IGlzX3BsYXkgPyBET0ZGX0NUTCA6IERJRkZfQ1RMOworCisJLyogc2V0IElNU0sgKi8KKwlmc2lfaXJxX2Rpc2FibGUoZnNpLCBpc19wbGF5KTsKKworCS8qIHNldCBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmYWN0b3IgKi8KKwlmc2lfcmVnX3dyaXRlKGZzaSwgY3RybCwgSVJRX0hBTEYpOworCisJLyogY2xlYXIgRklGTyAqLworCWZzaV9yZWdfbWFza19zZXQoZnNpLCBjdHJsLCBGSUZPX0NMUiwgRklGT19DTFIpOworCisJLyogY2xlYXIgaW50ZXJydXB0IGZhY3RvciAqLworCWZzaV9tYXN0ZXJfbWFza19zZXQoSU5UX1NULCBkYXRhLCAwKTsKK30KKworc3RhdGljIHZvaWQgZnNpX3NvZnRfYWxsX3Jlc2V0KHZvaWQpCit7CisJdTMyIHN0YXR1cyA9IGZzaV9tYXN0ZXJfcmVhZChTT0ZUX1JTVCk7CisKKwkvKiBwb3J0IEFCIHJlc2V0ICovCisJc3RhdHVzICY9IDB4MDAwMDAwZmY7CisJZnNpX21hc3Rlcl93cml0ZShTT0ZUX1JTVCwgc3RhdHVzKTsKKwltZGVsYXkoMTApOworCisJLyogc29mdCByZXNldCAqLworCXN0YXR1cyAmPSAweDAwMDAwMGYwOworCWZzaV9tYXN0ZXJfd3JpdGUoU09GVF9SU1QsIHN0YXR1cyk7CisJc3RhdHVzIHw9IDB4MDAwMDAwMDE7CisJZnNpX21hc3Rlcl93cml0ZShTT0ZUX1JTVCwgc3RhdHVzKTsKKwltZGVsYXkoMTApOworfQorCitzdGF0aWMgdm9pZCBmc2lfMTZkYXRhX3B1c2goc3RydWN0IGZzaV9wcml2ICpmc2ksCisJCQkgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lLAorCQkJICAgaW50IHNlbmQpCit7CisJdTE2ICpkbWFfc3RhcnQ7CisJdTMyIHNuZDsKKwlpbnQgaTsKKworCS8qIGdldCBkbWEgc3RhcnQgcG9zaXRpb24gZm9yIEZTSSAqLworCWRtYV9zdGFydCA9ICh1MTYgKilydW50aW1lLT5kbWFfYXJlYTsKKwlkbWFfc3RhcnQgKz0gZnNpLT5ieXRlX29mZnNldCAvIDI7CisKKwkvKgorCSAqIHNvZnQgZG1hCisJICogRlNJIGNhbiBub3QgdXNlIERNQSB3aGVuIDE2YnBwCisJICovCisJZm9yIChpID0gMDsgaSA8IHNlbmQ7IGkrKykgeworCQlzbmQgPSAodTMyKWRtYV9zdGFydFtpXTsKKwkJZnNpX3JlZ193cml0ZShmc2ksIERPRFQsIHNuZCA8PCA4KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZzaV8zMmRhdGFfcHVzaChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwKKwkJCSAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsCisJCQkgICBpbnQgc2VuZCkKK3sKKwl1MzIgKmRtYV9zdGFydDsKKworCS8qIGdldCBkbWEgc3RhcnQgcG9zaXRpb24gZm9yIEZTSSAqLworCWRtYV9zdGFydCA9ICh1MzIgKilydW50aW1lLT5kbWFfYXJlYTsKKwlkbWFfc3RhcnQgKz0gZnNpLT5ieXRlX29mZnNldCAvIDQ7CisKKwlkbWFfd2FpdF9mb3JfY29tcGxldGlvbihmc2ktPmRtYV9jaGFuKTsKKwlkbWFfY29uZmlndXJlX2NoYW5uZWwoZnNpLT5kbWFfY2hhbiwgKFNNX0lOQ3wweDQwMHxUU18zMnxUTV9CVVIpKTsKKwlkbWFfd3JpdGUoZnNpLT5kbWFfY2hhbiwgKHUzMilkbWFfc3RhcnQsCisJCSAgKHUzMikoZnNpLT5iYXNlICsgRE9EVCksIHNlbmQgKiA0KTsKK30KKworLyogcGxheWJhY2sgaW50ZXJydXB0ICovCitzdGF0aWMgaW50IGZzaV9kYXRhX3B1c2goc3RydWN0IGZzaV9wcml2ICpmc2kpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IE5VTEw7CisJaW50IHNlbmQ7CisJaW50IGZpZm9fZnJlZTsKKwlpbnQgd2lkdGg7CisKKwlpZiAoIWZzaQkJCXx8CisJICAgICFmc2ktPnN1YnN0cmVhbQkJfHwKKwkgICAgIWZzaS0+c3Vic3RyZWFtLT5ydW50aW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJ1bnRpbWUgPSBmc2ktPnN1YnN0cmVhbS0+cnVudGltZTsKKworCS8qIEZTSSBGSUZPIGhhcyBsaW1pdC4KKwkgKiBTbywgdGhpcyBkcml2ZXIgY2FuIG5vdCBzZW5kIHBlcmlvZHMgZGF0YSBhdCBhIHRpbWUKKwkgKi8KKwlpZiAoZnNpLT5ieXRlX29mZnNldCA+PQorCSAgICBmc2ktPnBlcmlvZF9sZW4gKiAoZnNpLT5wZXJpb2RzICsgMSkpIHsKKworCQlzdWJzdHJlYW0gPSBmc2ktPnN1YnN0cmVhbTsKKwkJZnNpLT5wZXJpb2RzID0gKGZzaS0+cGVyaW9kcyArIDEpICUgcnVudGltZS0+cGVyaW9kczsKKworCQlpZiAoMCA9PSBmc2ktPnBlcmlvZHMpCisJCQlmc2ktPmJ5dGVfb2Zmc2V0ID0gMDsKKwl9CisKKwkvKiBnZXQgMSBjaGFubmVsIGRhdGEgd2lkdGggKi8KKwl3aWR0aCA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSAvIGZzaS0+Y2hhbjsKKworCS8qIGdldCBzZW5kIHNpemUgZm9yIGFsc2EgKi8KKwlzZW5kID0gKGZzaS0+YnVmZmVyX2xlbiAtIGZzaS0+Ynl0ZV9vZmZzZXQpIC8gd2lkdGg7CisKKwkvKiAgZ2V0IEZJRk8gZnJlZSBzaXplICovCisJZmlmb19mcmVlID0gKGZzaS0+Zmlmb19tYXggKiBmc2ktPmNoYW4pIC0gZnNpX2dldF9maWZvX3Jlc2lkdWUoZnNpLCAxKTsKKworCS8qIHNpemUgY2hlY2sgKi8KKwlpZiAoZmlmb19mcmVlIDwgc2VuZCkKKwkJc2VuZCA9IGZpZm9fZnJlZTsKKworCWlmICgyID09IHdpZHRoKQorCQlmc2lfMTZkYXRhX3B1c2goZnNpLCBydW50aW1lLCBzZW5kKTsKKwllbHNlIGlmICg0ID09IHdpZHRoKQorCQlmc2lfMzJkYXRhX3B1c2goZnNpLCBydW50aW1lLCBzZW5kKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJZnNpLT5ieXRlX29mZnNldCArPSBzZW5kICogd2lkdGg7CisKKwlmc2lfaXJxX2VuYWJsZShmc2ksIDEpOworCisJaWYgKHN1YnN0cmVhbSkKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBmc2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJdTMyIHN0YXR1cyA9IGZzaV9tYXN0ZXJfcmVhZChTT0ZUX1JTVCkgJiB+MHgwMDAwMDAxMDsKKwl1MzIgaW50X3N0ID0gZnNpX21hc3Rlcl9yZWFkKElOVF9TVCk7CisKKwkvKiBjbGVhciBpcnEgc3RhdHVzICovCisJZnNpX21hc3Rlcl93cml0ZShTT0ZUX1JTVCwgc3RhdHVzKTsKKwlmc2lfbWFzdGVyX3dyaXRlKFNPRlRfUlNULCBzdGF0dXMgfCAweDAwMDAwMDEwKTsKKworCWlmIChpbnRfc3QgJiBJTlRfQV9PVVQpCisJCWZzaV9kYXRhX3B1c2goJm1hc3Rlci0+ZnNpYSk7CisJaWYgKGludF9zdCAmIElOVF9CX09VVCkKKwkJZnNpX2RhdGFfcHVzaCgmbWFzdGVyLT5mc2liKTsKKworCWZzaV9tYXN0ZXJfd3JpdGUoSU5UX1NULCAweDAwMDAwMDApOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworCQlkYWkgb3BzCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBmc2lfZGFpX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgZnNpX3ByaXYgKmZzaSA9IGZzaV9nZXQoc3Vic3RyZWFtKTsKKwljb25zdCBjaGFyICptc2c7CisJdTMyIGZsYWdzID0gZnNpX2dldF9pbmZvX2ZsYWdzKGZzaSk7CisJdTMyIGZtdDsKKwl1MzIgcmVnOworCXUzMiBkYXRhOworCWludCBpc19wbGF5ID0gKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spOworCWludCBpc19tYXN0ZXI7CisJaW50IHJldCA9IDA7CisKKwljbGtfZW5hYmxlKG1hc3Rlci0+Y2xrKTsKKworCS8qIENLRzEgKi8KKwlkYXRhID0gaXNfcGxheSA/ICgxIDw8IDApIDogKDEgPDwgNCk7CisJaXNfbWFzdGVyID0gZnNpX2lzX21hc3Rlcl9tb2RlKGZzaSwgaXNfcGxheSk7CisJaWYgKGlzX21hc3RlcikKKwkJZnNpX3JlZ19tYXNrX3NldChmc2ksIENLRzEsIGRhdGEsIGRhdGEpOworCWVsc2UKKwkJZnNpX3JlZ19tYXNrX3NldChmc2ksIENLRzEsIGRhdGEsIDApOworCisJLyogY2xvY2sgaW52ZXJzaW9uIChDS0cyKSAqLworCWRhdGEgPSAwOworCXN3aXRjaCAoU0hfRlNJX0lOVkVSU0lPTl9NQVNLICYgZmxhZ3MpIHsKKwljYXNlIFNIX0ZTSV9MUk1fSU5WOgorCQlkYXRhID0gMSA8PCAxMjsKKwkJYnJlYWs7CisJY2FzZSBTSF9GU0lfQlJNX0lOVjoKKwkJZGF0YSA9IDEgPDwgODsKKwkJYnJlYWs7CisJY2FzZSBTSF9GU0lfTFJTX0lOVjoKKwkJZGF0YSA9IDEgPDwgNDsKKwkJYnJlYWs7CisJY2FzZSBTSF9GU0lfQlJTX0lOVjoKKwkJZGF0YSA9IDEgPDwgMDsKKwkJYnJlYWs7CisJfQorCWZzaV9yZWdfd3JpdGUoZnNpLCBDS0cyLCBkYXRhKTsKKworCS8qIGRvIGZtdCwgZGkgZm10ICovCisJZGF0YSA9IDA7CisJcmVnID0gaXNfcGxheSA/IERPX0ZNVCA6IERJX0ZNVDsKKwlmbXQgPSBpc19wbGF5ID8gU0hfRlNJX0dFVF9PRk1UKGZsYWdzKSA6IFNIX0ZTSV9HRVRfSUZNVChmbGFncyk7CisJc3dpdGNoIChmbXQpIHsKKwljYXNlIFNIX0ZTSV9GTVRfTU9OTzoKKwkJbXNnID0gIk1PTk8iOworCQlkYXRhID0gQ1JfRk1UKENSX01PTk8pOworCQlmc2ktPmNoYW4gPSAxOworCQlicmVhazsKKwljYXNlIFNIX0ZTSV9GTVRfTU9OT19ERUxBWToKKwkJbXNnID0gIk1PTk8gRGVsYXkiOworCQlkYXRhID0gQ1JfRk1UKENSX01PTk9fRCk7CisJCWZzaS0+Y2hhbiA9IDE7CisJCWJyZWFrOworCWNhc2UgU0hfRlNJX0ZNVF9QQ006CisJCW1zZyA9ICJQQ00iOworCQlkYXRhID0gQ1JfRk1UKENSX1BDTSk7CisJCWZzaS0+Y2hhbiA9IDI7CisJCWJyZWFrOworCWNhc2UgU0hfRlNJX0ZNVF9JMlM6CisJCW1zZyA9ICJJMlMiOworCQlkYXRhID0gQ1JfRk1UKENSX0kyUyk7CisJCWZzaS0+Y2hhbiA9IDI7CisJCWJyZWFrOworCWNhc2UgU0hfRlNJX0ZNVF9URE06CisJCW1zZyA9ICJURE0iOworCQlkYXRhID0gQ1JfRk1UKENSX1RETSkgfCAoZnNpLT5jaGFuIC0gMSk7CisJCWZzaS0+Y2hhbiA9IGlzX3BsYXkgPworCQkJU0hfRlNJX0dFVF9DSF9PKGZsYWdzKSA6IFNIX0ZTSV9HRVRfQ0hfSShmbGFncyk7CisJCWJyZWFrOworCWNhc2UgU0hfRlNJX0ZNVF9URE1fREVMQVk6CisJCW1zZyA9ICJURE0gRGVsYXkiOworCQlkYXRhID0gQ1JfRk1UKENSX1RETV9EKSB8IChmc2ktPmNoYW4gLSAxKTsKKwkJZnNpLT5jaGFuID0gaXNfcGxheSA/CisJCQlTSF9GU0lfR0VUX0NIX08oZmxhZ3MpIDogU0hfRlNJX0dFVF9DSF9JKGZsYWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkYWktPmRldiwgInVua25vd24gZm9ybWF0LlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZnNpLT5jaGFuKSB7CisJY2FzZSAxOgorCQlmc2ktPmZpZm9fbWF4ID0gMjU2OworCQlicmVhazsKKwljYXNlIDI6CisJCWZzaS0+Zmlmb19tYXggPSAxMjg7CisJCWJyZWFrOworCWNhc2UgMzoKKwljYXNlIDQ6CisJCWZzaS0+Zmlmb19tYXggPSA2NDsKKwkJYnJlYWs7CisJY2FzZSA1OgorCWNhc2UgNjoKKwljYXNlIDc6CisJY2FzZSA4OgorCQlmc2ktPmZpZm9fbWF4ID0gMzI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGFpLT5kZXYsICJjaGFubmVsIHNpemUgZXJyb3IuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZnNpX3JlZ193cml0ZShmc2ksIHJlZywgZGF0YSk7CisJZGV2X2RiZyhkYWktPmRldiwgInVzZSAlcyBmb3JtYXQgKCVkIGNoYW5uZWwpIHVzZSAlZCBETUFDXG4iLAorCQltc2csIGZzaS0+Y2hhbiwgZnNpLT5kbWFfY2hhbik7CisKKwkvKgorCSAqIGNsZWFyIGNsayByZXNldCBpZiBtYXN0ZXIgbW9kZQorCSAqLworCWlmIChpc19tYXN0ZXIpCisJCWZzaV9jbGtfY3RybChmc2ksIDEpOworCisJLyogaXJxIHNldHRpbmcgKi8KKwlmc2lfaXJxX2luaXQoZnNpLCBpc19wbGF5KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGZzaV9kYWlfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldChzdWJzdHJlYW0pOworCWludCBpc19wbGF5ID0gc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKKworCWZzaV9pcnFfZGlzYWJsZShmc2ksIGlzX3BsYXkpOworCWZzaV9jbGtfY3RybChmc2ksIDApOworCisJY2xrX2Rpc2FibGUobWFzdGVyLT5jbGspOworfQorCitzdGF0aWMgaW50IGZzaV9kYWlfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKKwkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJaW50IGlzX3BsYXkgPSBzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOworCWludCByZXQgPSAwOworCisJLyogY2FwdHVyZSBub3Qgc3VwcG9ydGVkICovCisJaWYgKCFpc19wbGF5KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJZnNpX3N0cmVhbV9wdXNoKGZzaSwgc3Vic3RyZWFtLAorCQkJCWZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5idWZmZXJfc2l6ZSksCisJCQkJZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKSk7CisJCXJldCA9IGZzaV9kYXRhX3B1c2goZnNpKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlmc2lfaXJxX2Rpc2FibGUoZnNpLCBpc19wbGF5KTsKKwkJZnNpX3N0cmVhbV9wb3AoZnNpKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZnNpX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBmc2lfZGFpX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gZnNpX2RhaV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IGZzaV9kYWlfdHJpZ2dlciwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisJCXBjbSBvcHMKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgZnNpX3BjbV9oYXJkd2FyZSA9IHsKKwkuaW5mbyA9CQlTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRAl8CisJCQlTTkRSVl9QQ01fSU5GT19NTUFQCQl8CisJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElECXwKKwkJCVNORFJWX1BDTV9JTkZPX1BBVVNFLAorCS5mb3JtYXRzCQk9IEZTSV9GTVRTLAorCS5yYXRlcwkJCT0gRlNJX1JBVEVTLAorCS5yYXRlX21pbgkJPSA4MDAwLAorCS5yYXRlX21heAkJPSAxOTIwMDAsCisJLmNoYW5uZWxzX21pbgkJPSAxLAorCS5jaGFubmVsc19tYXgJCT0gMiwKKwkuYnVmZmVyX2J5dGVzX21heAk9IDY0ICogMTAyNCwKKwkucGVyaW9kX2J5dGVzX21pbgk9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4CT0gODE5MiwKKwkucGVyaW9kc19taW4JCT0gMSwKKwkucGVyaW9kc19tYXgJCT0gMzIsCisJLmZpZm9fc2l6ZQkJPSAyNTYsCit9OworCitzdGF0aWMgaW50IGZzaV9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCWludCByZXQgPSAwOworCisJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZmc2lfcGNtX2hhcmR3YXJlKTsKKworCXJldCA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsCisJCQkJCSAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZzaV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Cit9CisKK3N0YXRpYyBpbnQgZnNpX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IGZzaV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0KHN1YnN0cmVhbSk7CisJaW50IGlzX3BsYXkgPSBzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOworCWxvbmcgbG9jYXRpb247CisKKwlsb2NhdGlvbiA9IChmc2ktPmJ5dGVfb2Zmc2V0IC0gMSkgLSBmc2lfZ2V0X3Jlc2lkdWUoZnNpLCBpc19wbGF5KTsKKwlpZiAobG9jYXRpb24gPCAwKQorCQlsb2NhdGlvbiA9IDA7CisKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGxvY2F0aW9uKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBmc2lfcGNtX29wcyA9IHsKKwkub3BlbgkJPSBmc2lfcGNtX29wZW4sCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBmc2lfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gZnNpX2h3X2ZyZWUsCisJLnBvaW50ZXIJPSBmc2lfcG9pbnRlciwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisJCXNuZF9zb2NfcGxhdGZvcm0KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBSRUFMTE9DX0JVRkZFUgkJKDMyICogMTAyNCkKKyNkZWZpbmUgUFJFQUxMT0NfQlVGRkVSX01BWAkoMzIgKiAxMDI0KQorCitzdGF0aWMgdm9pZCBmc2lfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9mcmVlX2Zvcl9hbGwocGNtKTsKK30KKworc3RhdGljIGludCBmc2lfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCisJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJICAgICAgIHN0cnVjdCBzbmRfcGNtICpwY20pCit7CisJLyoKKwkgKiBkb250IHVzZSBTTkRSVl9ETUFfVFlQRV9ERVYsIHNpbmNlIGl0IHdpbGwgb29wcyB0aGUgU0gga2VybmVsCisJICogaW4gTU1BUCBtb2RlIChpLmUuIGFwbGF5IC1NKQorCSAqLworCXJldHVybiBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKAorCQlwY20sCisJCVNORFJWX0RNQV9UWVBFX0NPTlRJTlVPVVMsCisJCXNuZF9kbWFfY29udGludW91c19kYXRhKEdGUF9LRVJORUwpLAorCQlQUkVBTExPQ19CVUZGRVIsIFBSRUFMTE9DX0JVRkZFUl9NQVgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworCQlhbHNhIHN0cnVjdAorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBzbmRfc29jX2RhaSBmc2lfc29jX2RhaVtdID0geworCXsKKwkJLm5hbWUJCQk9ICJGU0lBIiwKKwkJLmlkCQkJPSAwLAorCQkucGxheWJhY2sgPSB7CisJCQkucmF0ZXMJCT0gRlNJX1JBVEVTLAorCQkJLmZvcm1hdHMJPSBGU0lfRk1UUywKKwkJCS5jaGFubmVsc19taW4JPSAxLAorCQkJLmNoYW5uZWxzX21heAk9IDgsCisJCX0sCisJCS8qIGNhcHR1cmUgbm90IHN1cHBvcnRlZCAqLworCQkub3BzID0gJmZzaV9kYWlfb3BzLAorCX0sCisJeworCQkubmFtZQkJCT0gIkZTSUIiLAorCQkuaWQJCQk9IDEsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5yYXRlcwkJPSBGU0lfUkFURVMsCisJCQkuZm9ybWF0cwk9IEZTSV9GTVRTLAorCQkJLmNoYW5uZWxzX21pbgk9IDEsCisJCQkuY2hhbm5lbHNfbWF4CT0gOCwKKwkJfSwKKwkJLyogY2FwdHVyZSBub3Qgc3VwcG9ydGVkICovCisJCS5vcHMgPSAmZnNpX2RhaV9vcHMsCisJfSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChmc2lfc29jX2RhaSk7CisKK3N0cnVjdCBzbmRfc29jX3BsYXRmb3JtIGZzaV9zb2NfcGxhdGZvcm0gPSB7CisJLm5hbWUJCT0gImZzaS1wY20iLAorCS5wY21fb3BzIAk9ICZmc2lfcGNtX29wcywKKwkucGNtX25ldwk9IGZzaV9wY21fbmV3LAorCS5wY21fZnJlZQk9IGZzaV9wY21fZnJlZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChmc2lfc29jX3BsYXRmb3JtKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKwkJcGxhdGZvcm0gZnVuY3Rpb24KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGZzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWNoYXIgY2xrX25hbWVbOF07CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgcmV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICghcmVzIHx8ICFpcnEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm90IGVub3VnaCBGU0kgcGxhdGZvcm0gcmVzb3VyY2VzLlxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltYXN0ZXIgPSBremFsbG9jKHNpemVvZigqbWFzdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYXN0ZXIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIG1hc3RlclxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisKKwltYXN0ZXItPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIW1hc3Rlci0+YmFzZSkgeworCQlyZXQgPSAtRU5YSU87CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBpb3JlbWFwIEZTSSByZWdpc3RlcnMuXG4iKTsKKwkJZ290byBleGl0X2tmcmVlOworCX0KKworCW1hc3Rlci0+aXJxCQk9IGlycTsKKwltYXN0ZXItPmluZm8JCT0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJbWFzdGVyLT5mc2lhLmJhc2UJPSBtYXN0ZXItPmJhc2U7CisJbWFzdGVyLT5mc2liLmJhc2UJPSBtYXN0ZXItPmJhc2UgKyAweDQwOworCisJbWFzdGVyLT5mc2lhLmRtYV9jaGFuID0gLTE7CisJbWFzdGVyLT5mc2liLmRtYV9jaGFuID0gLTE7CisKKwlyZXQgPSBmc2lfZ2V0X2RtYV9jaGFuKCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGdldCBkbWEgYXBpXG4iKTsKKwkJZ290byBleGl0X2lvdW5tYXA7CisJfQorCisJLyogRlNJIGlzIGJhc2VkIG9uIFNQVSBtc3RwICovCisJc25wcmludGYoY2xrX25hbWUsIHNpemVvZihjbGtfbmFtZSksICJzcHUlZCIsIHBkZXYtPmlkKTsKKwltYXN0ZXItPmNsayA9IGNsa19nZXQoTlVMTCwgY2xrX25hbWUpOworCWlmIChJU19FUlIobWFzdGVyLT5jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgJXMgbXN0cFxuIiwgY2xrX25hbWUpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGV4aXRfZnJlZV9kbWE7CisJfQorCisJZnNpX3NvY19kYWlbMF0uZGV2CQk9ICZwZGV2LT5kZXY7CisJZnNpX3NvY19kYWlbMV0uZGV2CQk9ICZwZGV2LT5kZXY7CisKKwlmc2lfc29mdF9hbGxfcmVzZXQoKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgJmZzaV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJmc2kiLCBtYXN0ZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaXJxIHJlcXVlc3QgZXJyXG4iKTsKKwkJZ290byBleGl0X2ZyZWVfZG1hOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfcGxhdGZvcm0oJmZzaV9zb2NfcGxhdGZvcm0pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBzbmQgc29jIHJlZ2lzdGVyXG4iKTsKKwkJZ290byBleGl0X2ZyZWVfaXJxOworCX0KKworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaXMoZnNpX3NvY19kYWksIEFSUkFZX1NJWkUoZnNpX3NvY19kYWkpKTsKKworZXhpdF9mcmVlX2lycToKKwlmcmVlX2lycShpcnEsIG1hc3Rlcik7CitleGl0X2ZyZWVfZG1hOgorCWZzaV9mcmVlX2RtYV9jaGFuKCk7CitleGl0X2lvdW5tYXA6CisJaW91bm1hcChtYXN0ZXItPmJhc2UpOworZXhpdF9rZnJlZToKKwlrZnJlZShtYXN0ZXIpOworCW1hc3RlciA9IE5VTEw7CitleGl0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZnNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKGZzaV9zb2NfZGFpLCBBUlJBWV9TSVpFKGZzaV9zb2NfZGFpKSk7CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZmc2lfc29jX3BsYXRmb3JtKTsKKworCWNsa19wdXQobWFzdGVyLT5jbGspOworCisJZnNpX2ZyZWVfZG1hX2NoYW4oKTsKKworCWZyZWVfaXJxKG1hc3Rlci0+aXJxLCBtYXN0ZXIpOworCisJaW91bm1hcChtYXN0ZXItPmJhc2UpOworCWtmcmVlKG1hc3Rlcik7CisJbWFzdGVyID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZnNpX2RyaXZlciA9IHsKKwkuZHJpdmVyIAk9IHsKKwkJLm5hbWUJPSAic2hfZnNpIiwKKwl9LAorCS5wcm9iZQkJPSBmc2lfcHJvYmUsCisJLnJlbW92ZQkJPSBmc2lfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZnNpX21vYmlsZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZnNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmc2lfbW9iaWxlX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZnNpX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChmc2lfbW9iaWxlX2luaXQpOworbW9kdWxlX2V4aXQoZnNpX21vYmlsZV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBlckggb25jaGlwIEZTSSBhdWRpbyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY2FjaGUuYyBiL3NvdW5kL3NvYy9zb2MtY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGNlZGRjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NvYy1jYWNoZS5jCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogc29jLWNhY2hlLmMgIC0tICBBU29DIHJlZ2lzdGVyIGNhY2hlIGhlbHBlcnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzdfOV9yZWFkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgICAgIHVuc2lnbmVkIGludCByZWcpCit7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJaWYgKHJlZyA+PSBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gY2FjaGVbcmVnXTsKK30KKworc3RhdGljIGludCBzbmRfc29jXzdfOV93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwl1OCBkYXRhWzJdOworCWludCByZXQ7CisKKwlCVUdfT04oY29kZWMtPnZvbGF0aWxlX3JlZ2lzdGVyKTsKKworCWRhdGFbMF0gPSAocmVnIDw8IDEpIHwgKCh2YWx1ZSA+PiA4KSAmIDB4MDAwMSk7CisJZGF0YVsxXSA9IHZhbHVlICYgMHgwMGZmOworCisJaWYgKHJlZyA8IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJY2FjaGVbcmVnXSA9IHZhbHVlOworCXJldCA9IGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKTsKKwlpZiAocmV0ID09IDIpCisJCXJldHVybiAwOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIC1FSU87Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorc3RhdGljIGludCBzbmRfc29jXzdfOV9zcGlfd3JpdGUodm9pZCAqY29udHJvbF9kYXRhLCBjb25zdCBjaGFyICpkYXRhLAorCQkJCSBpbnQgbGVuKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb250cm9sX2RhdGE7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXU4IG1zZ1syXTsKKworCWlmIChsZW4gPD0gMCkKKwkJcmV0dXJuIDA7CisKKwltc2dbMF0gPSBkYXRhWzBdOworCW1zZ1sxXSA9IGRhdGFbMV07CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOworCisJdC50eF9idWYgPSAmbXNnWzBdOworCXQubGVuID0gbGVuOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKwlzcGlfc3luYyhzcGksICZtKTsKKworCXJldHVybiBsZW47Cit9CisjZWxzZQorI2RlZmluZSBzbmRfc29jXzdfOV9zcGlfd3JpdGUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgc25kX3NvY184XzE2X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwkJCSAgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJdTggZGF0YVszXTsKKworCWRhdGFbMF0gPSByZWc7CisJZGF0YVsxXSA9ICh2YWx1ZSA+PiA4KSAmIDB4ZmY7CisJZGF0YVsyXSA9IHZhbHVlICYgMHhmZjsKKworCWlmICghc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcihjb2RlYywgcmVnKSkKKwkJcmVnX2NhY2hlW3JlZ10gPSB2YWx1ZTsKKworCWlmIChjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMykgPT0gMykKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzhfMTZfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHJlZykKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKworCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplIHx8CisJICAgIHNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykpCisJCXJldHVybiBjb2RlYy0+aHdfcmVhZChjb2RlYywgcmVnKTsKKwllbHNlCisJCXJldHVybiBjYWNoZVtyZWddOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCAoZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzhfMTZfcmVhZF9pMmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCQkgIHVuc2lnbmVkIGludCByKQoreworCXN0cnVjdCBpMmNfbXNnIHhmZXJbMl07CisJdTggcmVnID0gcjsKKwl1MTYgZGF0YTsKKwlpbnQgcmV0OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb2RlYy0+Y29udHJvbF9kYXRhOworCisJLyogV3JpdGUgcmVnaXN0ZXIgKi8KKwl4ZmVyWzBdLmFkZHIgPSBjbGllbnQtPmFkZHI7CisJeGZlclswXS5mbGFncyA9IDA7CisJeGZlclswXS5sZW4gPSAxOworCXhmZXJbMF0uYnVmID0gJnJlZzsKKworCS8qIFJlYWQgZGF0YSAqLworCXhmZXJbMV0uYWRkciA9IGNsaWVudC0+YWRkcjsKKwl4ZmVyWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJeGZlclsxXS5sZW4gPSAyOworCXhmZXJbMV0uYnVmID0gKHU4ICopJmRhdGE7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCB4ZmVyLCAyKTsKKwlpZiAocmV0ICE9IDIpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJpMmNfdHJhbnNmZXIoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIChkYXRhID4+IDgpIHwgKChkYXRhICYgMHhmZikgPDwgOCk7Cit9CisjZWxzZQorI2RlZmluZSBzbmRfc29jXzhfMTZfcmVhZF9pMmMgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCBhZGRyX2JpdHM7CisJaW50IGRhdGFfYml0czsKKwlpbnQgKCp3cml0ZSkoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CisJaW50ICgqc3BpX3dyaXRlKSh2b2lkICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKwl1bnNpZ25lZCBpbnQgKCpyZWFkKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOworCXVuc2lnbmVkIGludCAoKmkyY19yZWFkKShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCB1bnNpZ25lZCBpbnQpOworfSBpb190eXBlc1tdID0geworCXsgNywgOSwgc25kX3NvY183Xzlfd3JpdGUsIHNuZF9zb2NfN185X3NwaV93cml0ZSwgc25kX3NvY183XzlfcmVhZCB9LAorCXsgOCwgMTYsIHNuZF9zb2NfOF8xNl93cml0ZSwgTlVMTCwgc25kX3NvY184XzE2X3JlYWQsCisJICBzbmRfc29jXzhfMTZfcmVhZF9pMmMgfSwKK307CisKKy8qKgorICogc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW86IFNldCB1cCBzdGFuZGFyZCBJL08gZnVuY3Rpb25zLgorICoKKyAqIEBjb2RlYzogQ09ERUMgdG8gY29uZmlndXJlLgorICogQHR5cGU6IFR5cGUgb2YgY2FjaGUuCisgKiBAYWRkcl9iaXRzOiBOdW1iZXIgb2YgYml0cyBvZiByZWdpc3RlciBhZGRyZXNzIGRhdGEuCisgKiBAZGF0YV9iaXRzOiBOdW1iZXIgb2YgYml0cyBvZiBkYXRhIHBlciByZWdpc3Rlci4KKyAqIEBjb250cm9sOiBDb250cm9sIGJ1cyB1c2VkLgorICoKKyAqIFJlZ2lzdGVyIGZvcm1hdHMgYXJlIGZyZXF1ZW50bHkgc2hhcmVkIGJldHdlZW4gbWFueSBJMkMgYW5kIFNQSQorICogZGV2aWNlcy4gIEluIG9yZGVyIHRvIHByb21vdGUgY29kZSByZXVzZSB0aGUgQVNvQyBjb3JlIHByb3ZpZGVzCisgKiBzb21lIHN0YW5kYXJkIGltcGxlbWVudGF0aW9ucyBvZiBDT0RFQyByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zCisgKiB3aGljaCBjYW4gYmUgc2V0IHVwIHVzaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBhbmQgaW5pdGlhbGlzaW5nIHRoZQorICogYWN0dWFsIGNhY2hlLgorICoKKyAqIE5vdGUgdGhhdCBhdCBwcmVzZW50IHRoaXMgY29kZSBjYW5ub3QgYmUgdXNlZCBieSBDT0RFQ3Mgd2l0aAorICogdm9sYXRpbGUgcmVnaXN0ZXJzLgorICovCitpbnQgc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJICAgICAgIGludCBhZGRyX2JpdHMsIGludCBkYXRhX2JpdHMsCisJCQkgICAgICAgZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW9fdHlwZXMpOyBpKyspCisJCWlmIChpb190eXBlc1tpXS5hZGRyX2JpdHMgPT0gYWRkcl9iaXRzICYmCisJCSAgICBpb190eXBlc1tpXS5kYXRhX2JpdHMgPT0gZGF0YV9iaXRzKQorCQkJYnJlYWs7CisJaWYgKGkgPT0gQVJSQVlfU0laRShpb190eXBlcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTm8gSS9PIGZ1bmN0aW9ucyBmb3IgJWQgYml0IGFkZHJlc3MgJWQgYml0IGRhdGFcbiIsCisJCSAgICAgICBhZGRyX2JpdHMsIGRhdGFfYml0cyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvZGVjLT53cml0ZSA9IGlvX3R5cGVzW2ldLndyaXRlOworCWNvZGVjLT5yZWFkID0gaW9fdHlwZXNbaV0ucmVhZDsKKworCXN3aXRjaCAoY29udHJvbCkgeworCWNhc2UgU05EX1NPQ19DVVNUT006CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0kyQzoKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IChkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCisJCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKyNlbmRpZgorCQlpZiAoaW9fdHlwZXNbaV0uaTJjX3JlYWQpCisJCQljb2RlYy0+aHdfcmVhZCA9IGlvX3R5cGVzW2ldLmkyY19yZWFkOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19TUEk6CisJCWlmIChpb190eXBlc1tpXS5zcGlfd3JpdGUpCisJCQljb2RlYy0+aHdfd3JpdGUgPSBpb190eXBlc1tpXS5zcGlfd3JpdGU7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8pOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCAxZDcwODI5Li43ZmYwNGFkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KQEAgLTYxOSw4ICs2MjAsOSBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiAvKiBwb3dlcnMgZG93biBhdWRpbyBzdWJzeXN0ZW0gZm9yIHN1c3BlbmQgKi8KLXN0YXRpYyBpbnQgc29jX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzb2Nfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm0gPSBjYXJkLT5wbGF0Zm9ybTsKQEAgLTY1Niw3ICs2NTgsNyBAQAogCQlzbmRfcGNtX3N1c3BlbmRfYWxsKGNhcmQtPmRhaV9saW5rW2ldLnBjbSk7CiAKIAlpZiAoY2FyZC0+c3VzcGVuZF9wcmUpCi0JCWNhcmQtPnN1c3BlbmRfcHJlKHBkZXYsIHN0YXRlKTsKKwkJY2FyZC0+c3VzcGVuZF9wcmUocGRldiwgUE1TR19TVVNQRU5EKTsKIAogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgewogCQlzdHJ1Y3Qgc25kX3NvY19kYWkgICpjcHVfZGFpID0gY2FyZC0+ZGFpX2xpbmtbaV0uY3B1X2RhaTsKQEAgLTY4Miw3ICs2ODQsNyBAQAogCX0KIAogCWlmIChjb2RlY19kZXYtPnN1c3BlbmQpCi0JCWNvZGVjX2Rldi0+c3VzcGVuZChwZGV2LCBzdGF0ZSk7CisJCWNvZGVjX2Rldi0+c3VzcGVuZChwZGV2LCBQTVNHX1NVU1BFTkQpOwogCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm51bV9saW5rczsgaSsrKSB7CiAJCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IGNhcmQtPmRhaV9saW5rW2ldLmNwdV9kYWk7CkBAIC02OTEsNyArNjkzLDcgQEAKIAl9CiAKIAlpZiAoY2FyZC0+c3VzcGVuZF9wb3N0KQotCQljYXJkLT5zdXNwZW5kX3Bvc3QocGRldiwgc3RhdGUpOworCQljYXJkLT5zdXNwZW5kX3Bvc3QocGRldiwgUE1TR19TVVNQRU5EKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzY1LDggKzc2Nyw5IEBACiB9CiAKIC8qIHBvd2VycyB1cCBhdWRpbyBzdWJzeXN0ZW0gYWZ0ZXIgYSBzdXNwZW5kICovCi1zdGF0aWMgaW50IHNvY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgc29jX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBjYXJkLT5kYWlfbGlua1swXS5jcHVfZGFpOwpAQCAtNzg4LDYgKzc5MSw0NCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIHNuZF9zb2Nfc3VzcGVuZF9kZXZpY2U6IE5vdGlmeSBjb3JlIG9mIGRldmljZSBzdXNwZW5kCisgKgorICogQGRldjogRGV2aWNlIGJlaW5nIHN1c3BlbmRlZC4KKyAqCisgKiBJbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGUgZW50aXJlIGF1ZGlvIHN1YnN5c3RlbSBpcyBzdXNwZW5kZWQgaW4gYQorICogY29vcmRpbmF0ZWQgZmFzaGlvbiBBU29DIGRldmljZXMgc2hvdWxkIHN1c3BlbmQgdGhlbXNlbHZlcyB3aGVuCisgKiBjYWxsZWQgYnkgQVNvQy4gIFdoZW4gdGhlIHN0YW5kYXJkIGtlcm5lbCBzdXNwZW5kIHByb2Nlc3MgYXNrcyB0aGUKKyAqIGRldmljZSB0byBzdXNwZW5kIGl0IHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gaW5pdGlhdGUgYSBzdXNwZW5kCisgKiBvZiB0aGUgZW50aXJlIEFTb0MgY2FyZC4KKyAqCisgKiBcbm90ZSBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiBpcyBzdHViYmVkIG91dC4KKyAqLworaW50IHNuZF9zb2Nfc3VzcGVuZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19zdXNwZW5kX2RldmljZSk7CisKKy8qKgorICogc25kX3NvY19yZXN1bWVfZGV2aWNlOiBOb3RpZnkgY29yZSBvZiBkZXZpY2UgcmVzdW1lCisgKgorICogQGRldjogRGV2aWNlIGJlaW5nIHJlc3VtZWQuCisgKgorICogSW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlIGVudGlyZSBhdWRpbyBzdWJzeXN0ZW0gaXMgcmVzdW1lZCBpbiBhCisgKiBjb29yZGluYXRlZCBmYXNoaW9uIEFTb0MgZGV2aWNlcyBzaG91bGQgcmVzdW1lIHRoZW1zZWx2ZXMgd2hlbiBjYWxsZWQKKyAqIGJ5IEFTb0MuICBXaGVuIHRoZSBzdGFuZGFyZCBrZXJuZWwgcmVzdW1lIHByb2Nlc3MgYXNrcyB0aGUgZGV2aWNlCisgKiB0byByZXN1bWUgaXQgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbi4gIE9uY2UgYWxsIHRoZSBjb21wb25lbnRzIG9mCisgKiB0aGUgY2FyZCBoYXZlIG5vdGlmaWVkIHRoYXQgdGhleSBhcmUgcmVhZHkgdG8gYmUgcmVzdW1lZCB0aGUgY2FyZAorICogd2lsbCBiZSByZXN1bWVkLgorICoKKyAqIFxub3RlIEN1cnJlbnRseSB0aGlzIGZ1bmN0aW9uIGlzIHN0dWJiZWQgb3V0LgorICovCitpbnQgc25kX3NvY19yZXN1bWVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfcmVzdW1lX2RldmljZSk7CiAjZWxzZQogI2RlZmluZSBzb2Nfc3VzcGVuZAlOVUxMCiAjZGVmaW5lIHNvY19yZXN1bWUJTlVMTApAQCAtOTgxLDE2ICsxMDIyLDM5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc29jX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gc29jZGV2LT5jYXJkOworCisJaWYgKCFjYXJkLT5pbnN0YW50aWF0ZWQpCisJCXJldHVybiAwOworCisJLyogRmx1c2ggb3V0IHBtZG93bl90aW1lIHdvcmsgLSB3ZSBhY3R1YWxseSBkbyB3YW50IHRvIHJ1biBpdAorCSAqIG5vdywgd2UncmUgc2h1dHRpbmcgZG93biBzbyBubyBpbW1pbmVudCByZXN0YXJ0LiAqLworCXJ1bl9kZWxheWVkX3dvcmsoJmNhcmQtPmRlbGF5ZWRfd29yayk7CisKKwlzbmRfc29jX2RhcG1fc2h1dGRvd24oc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc29jX3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IHNvY19zdXNwZW5kLAorCS5yZXN1bWUgPSBzb2NfcmVzdW1lLAorCS5wb3dlcm9mZiA9IHNvY19wb3dlcm9mZiwKK307CisKIC8qIEFTb0MgcGxhdGZvcm0gZHJpdmVyICovCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzb2NfZHJpdmVyID0gewogCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSAic29jLWF1ZGlvIiwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucG0JCT0gJnNvY19wbV9vcHMsCiAJfSwKIAkucHJvYmUJCT0gc29jX3Byb2JlLAogCS5yZW1vdmUJCT0gc29jX3JlbW92ZSwKLQkuc3VzcGVuZAk9IHNvY19zdXNwZW5kLAotCS5yZXN1bWUJCT0gc29jX3Jlc3VtZSwKIH07CiAKIC8qIGNyZWF0ZSBhIG5ldyBwY20gKi8KQEAgLTEwNjIsNiArMTEyNiwyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3RlcjogUmVwb3J0IGlmIGEgcmVnaXN0ZXIgaXMgdm9sYXRpbGUuCisgKgorICogQGNvZGVjOiBDT0RFQyB0byBxdWVyeS4KKyAqIEByZWc6IFJlZ2lzdGVyIHRvIHF1ZXJ5LgorICoKKyAqIEJvb2xlYW4gZnVuY3Rpb24gaW5kaWNpYXRpbmcgaWYgYSBDT0RFQyByZWdpc3RlciBpcyB2b2xhdGlsZS4KKyAqLworaW50IHNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgcmVnKQoreworCWlmIChjb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIpCisJCXJldHVybiBjb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIocmVnKTsKKwllbHNlCisJCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19jb2RlY192b2xhdGlsZV9yZWdpc3Rlcik7CisKIC8qIGNvZGVjIHJlZ2lzdGVyIGR1bXAgKi8KIHN0YXRpYyBzc2l6ZV90IHNvY19jb2RlY19yZWdfc2hvdyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKmJ1ZikKIHsKQEAgLTEwNzUsNiArMTE1Niw5IEBACiAKIAljb3VudCArPSBzcHJpbnRmKGJ1ZiwgIiVzIHJlZ2lzdGVyc1xuIiwgY29kZWMtPm5hbWUpOwogCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+cmVnX2NhY2hlX3NpemU7IGkgKz0gc3RlcCkgeworCQlpZiAoY29kZWMtPnJlYWRhYmxlX3JlZ2lzdGVyICYmICFjb2RlYy0+cmVhZGFibGVfcmVnaXN0ZXIoaSkpCisJCQljb250aW51ZTsKKwogCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAiJTJ4OiAiLCBpKTsKIAkJaWYgKGNvdW50ID49IFBBR0VfU0laRSAtIDEpCiAJCQlicmVhazsKQEAgLTExODMsMTAgKzEyNjcsMTggQEAKIAlpZiAoIWNvZGVjLT5kZWJ1Z2ZzX3BvcF90aW1lKQogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBwb3AgdGltZSBkZWJ1Z2ZzIGZpbGVcbiIpOworCisJY29kZWMtPmRlYnVnZnNfZGFwbSA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZGFwbSIsIGRlYnVnZnNfcm9vdCk7CisJaWYgKCFjb2RlYy0+ZGVidWdmc19kYXBtKQorCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBEQVBNIGRlYnVnZnMgZGlyZWN0b3J5XG4iKTsKKworCXNuZF9zb2NfZGFwbV9kZWJ1Z2ZzX2luaXQoY29kZWMpOwogfQogCiBzdGF0aWMgdm9pZCBzb2NfY2xlYW51cF9jb2RlY19kZWJ1Z2ZzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY29kZWMtPmRlYnVnZnNfZGFwbSk7CiAJZGVidWdmc19yZW1vdmUoY29kZWMtPmRlYnVnZnNfcG9wX3RpbWUpOwogCWRlYnVnZnNfcmVtb3ZlKGNvZGVjLT5kZWJ1Z2ZzX3JlZyk7CiB9CkBAIC0xMjY0LDEwICsxMzU2LDEwIEBACiAgKiBSZXR1cm5zIDEgZm9yIGNoYW5nZSBlbHNlIDAuCiAgKi8KIGludCBzbmRfc29jX3VwZGF0ZV9iaXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgc2hvcnQgcmVnLAotCQkJCXVuc2lnbmVkIHNob3J0IG1hc2ssIHVuc2lnbmVkIHNob3J0IHZhbHVlKQorCQkJCXVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJaW50IGNoYW5nZTsKLQl1bnNpZ25lZCBzaG9ydCBvbGQsIG5ldzsKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXc7CiAKIAltdXRleF9sb2NrKCZpb19tdXRleCk7CiAJb2xkID0gc25kX3NvY19yZWFkKGNvZGVjLCByZWcpOwpAQCAtMTI5NCwxMCArMTM4NiwxMCBAQAogICogUmV0dXJucyAxIGZvciBjaGFuZ2UgZWxzZSAwLgogICovCiBpbnQgc25kX3NvY190ZXN0X2JpdHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBzaG9ydCByZWcsCi0JCQkJdW5zaWduZWQgc2hvcnQgbWFzaywgdW5zaWduZWQgc2hvcnQgdmFsdWUpCisJCQkJdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAlpbnQgY2hhbmdlOwotCXVuc2lnbmVkIHNob3J0IG9sZCwgbmV3OworCXVuc2lnbmVkIGludCBvbGQsIG5ldzsKIAogCW11dGV4X2xvY2soJmlvX211dGV4KTsKIAlvbGQgPSBzbmRfc29jX3JlYWQoY29kZWMsIHJlZyk7CkBAIC0xMzgxLDggKzE0NzMsMTEgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQotCQlpZiAoY2FyZC0+ZGFpX2xpbmtbaV0uY29kZWNfZGFpLT5hYzk3X2NvbnRyb2wpCisJCWlmIChjYXJkLT5kYWlfbGlua1tpXS5jb2RlY19kYWktPmFjOTdfY29udHJvbCkgewogCQkJYWM5NyA9IDE7CisJCQlzbmRfYWM5N19kZXZfYWRkX3BkYXRhKGNvZGVjLT5hYzk3LAorCQkJCWNhcmQtPmRhaV9saW5rW2ldLmNwdV9kYWktPmFjOTdfcGRhdGEpOworCQl9CiAJfQogCXNucHJpbnRmKGNvZGVjLT5jYXJkLT5zaG9ydG5hbWUsIHNpemVvZihjb2RlYy0+Y2FyZC0+c2hvcnRuYW1lKSwKIAkJICIlcyIsICBjYXJkLT5uYW1lKTsKQEAgLTE1ODYsNyArMTY4MSw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBzb2NfZW51bSAqZSA9IChzdHJ1Y3Qgc29jX2VudW0gKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKLQl1bnNpZ25lZCBzaG9ydCB2YWwsIGJpdG1hc2s7CisJdW5zaWduZWQgaW50IHZhbCwgYml0bWFzazsKIAogCWZvciAoYml0bWFzayA9IDE7IGJpdG1hc2sgPCBlLT5tYXg7IGJpdG1hc2sgPDw9IDEpCiAJCTsKQEAgLTE2MTUsOCArMTcxMCw4IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBzb2NfZW51bSAqZSA9IChzdHJ1Y3Qgc29jX2VudW0gKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKLQl1bnNpZ25lZCBzaG9ydCB2YWw7Ci0JdW5zaWduZWQgc2hvcnQgbWFzaywgYml0bWFzazsKKwl1bnNpZ25lZCBpbnQgdmFsOworCXVuc2lnbmVkIGludCBtYXNrLCBiaXRtYXNrOwogCiAJZm9yIChiaXRtYXNrID0gMTsgYml0bWFzayA8IGUtPm1heDsgYml0bWFzayA8PD0gMSkKIAkJOwpAQCAtMTY1Miw3ICsxNzQ3LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IHNvY19lbnVtICplID0gKHN0cnVjdCBzb2NfZW51bSAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwotCXVuc2lnbmVkIHNob3J0IHJlZ192YWwsIHZhbCwgbXV4OworCXVuc2lnbmVkIGludCByZWdfdmFsLCB2YWwsIG11eDsKIAogCXJlZ192YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIGUtPnJlZyk7CiAJdmFsID0gKHJlZ192YWwgPj4gZS0+c2hpZnRfbCkgJiBlLT5tYXNrOwpAQCAtMTY5MSw4ICsxNzg2LDggQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IHNvY19lbnVtICplID0gKHN0cnVjdCBzb2NfZW51bSAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwotCXVuc2lnbmVkIHNob3J0IHZhbDsKLQl1bnNpZ25lZCBzaG9ydCBtYXNrOworCXVuc2lnbmVkIGludCB2YWw7CisJdW5zaWduZWQgaW50IG1hc2s7CiAKIAlpZiAodWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA+IGUtPm1heCAtIDEpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTg1Miw3ICsxOTQ3LDcgQEAKIAlpbnQgbWF4ID0gbWMtPm1heDsKIAl1bnNpZ25lZCBpbnQgbWFzayA9ICgxIDw8IGZscyhtYXgpKSAtIDE7CiAJdW5zaWduZWQgaW50IGludmVydCA9IG1jLT5pbnZlcnQ7Ci0JdW5zaWduZWQgc2hvcnQgdmFsLCB2YWwyLCB2YWxfbWFzazsKKwl1bnNpZ25lZCBpbnQgdmFsLCB2YWwyLCB2YWxfbWFzazsKIAogCXZhbCA9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIG1hc2spOwogCWlmIChpbnZlcnQpCkBAIC0xOTE4LDcgKzIwMTMsNyBAQAogCXVuc2lnbmVkIGludCByZWcyID0gbWMtPnJyZWc7CiAJdW5zaWduZWQgaW50IHNoaWZ0ID0gbWMtPnNoaWZ0OwogCWludCBtYXggPSBtYy0+bWF4OwotCXVuc2lnbmVkIGludCBtYXNrID0gKDE8PGZscyhtYXgpKS0xOworCXVuc2lnbmVkIGludCBtYXNrID0gKDEgPDwgZmxzKG1heCkpIC0gMTsKIAl1bnNpZ25lZCBpbnQgaW52ZXJ0ID0gbWMtPmludmVydDsKIAogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0KQEAgLTE5NTgsNyArMjA1Myw3IEBACiAJdW5zaWduZWQgaW50IG1hc2sgPSAoMSA8PCBmbHMobWF4KSkgLSAxOwogCXVuc2lnbmVkIGludCBpbnZlcnQgPSBtYy0+aW52ZXJ0OwogCWludCBlcnI7Ci0JdW5zaWduZWQgc2hvcnQgdmFsLCB2YWwyLCB2YWxfbWFzazsKKwl1bnNpZ25lZCBpbnQgdmFsLCB2YWwyLCB2YWxfbWFzazsKIAogCXZhbF9tYXNrID0gbWFzayA8PCBzaGlmdDsKIAl2YWwgPSAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiBtYXNrKTsKQEAgLTIwNTAsNyArMjE0NSw3IEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXVuc2lnbmVkIGludCByZWcgPSBtYy0+cmVnOwogCWludCBtaW4gPSBtYy0+bWluOwotCXVuc2lnbmVkIHNob3J0IHZhbDsKKwl1bnNpZ25lZCBpbnQgdmFsOwogCiAJdmFsID0gKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdK21pbikgJiAweGZmOwogCXZhbCB8PSAoKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdK21pbikgJiAweGZmKSA8PCA4OwpAQCAtMjEzNiwxNyArMjIzMSwyMCBAQAogLyoqCiAgKiBzbmRfc29jX2RhaV9zZXRfdGRtX3Nsb3QgLSBjb25maWd1cmUgREFJIFRETS4KICAqIEBkYWk6IERBSQotICogQG1hc2s6IERBSSBzcGVjaWZpYyBtYXNrIHJlcHJlc2VudGluZyB1c2VkIHNsb3RzLgorICogQHR4X21hc2s6IGJpdG1hc2sgcmVwcmVzZW50aW5nIGFjdGl2ZSBUWCBzbG90cy4KKyAqIEByeF9tYXNrOiBiaXRtYXNrIHJlcHJlc2VudGluZyBhY3RpdmUgUlggc2xvdHMuCiAgKiBAc2xvdHM6IE51bWJlciBvZiBzbG90cyBpbiB1c2UuCisgKiBAc2xvdF93aWR0aDogV2lkdGggaW4gYml0cyBmb3IgZWFjaCBzbG90LgogICoKICAqIENvbmZpZ3VyZXMgYSBEQUkgZm9yIFRETSBvcGVyYXRpb24uIEJvdGggbWFzayBhbmQgc2xvdHMgYXJlIGNvZGVjIGFuZCBEQUkKICAqIHNwZWNpZmljLgogICovCiBpbnQgc25kX3NvY19kYWlfc2V0X3RkbV9zbG90KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAotCXVuc2lnbmVkIGludCBtYXNrLCBpbnQgc2xvdHMpCisJdW5zaWduZWQgaW50IHR4X21hc2ssIHVuc2lnbmVkIGludCByeF9tYXNrLCBpbnQgc2xvdHMsIGludCBzbG90X3dpZHRoKQogewogCWlmIChkYWktPm9wcyAmJiBkYWktPm9wcy0+c2V0X3RkbV9zbG90KQotCQlyZXR1cm4gZGFpLT5vcHMtPnNldF90ZG1fc2xvdChkYWksIG1hc2ssIHNsb3RzKTsKKwkJcmV0dXJuIGRhaS0+b3BzLT5zZXRfdGRtX3Nsb3QoZGFpLCB0eF9tYXNrLCByeF9tYXNrLAorCQkJCXNsb3RzLCBzbG90X3dpZHRoKTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1kYXBtLmMgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwppbmRleCAyMWM2OTA3Li4wZDhiMDhlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWRhcG0uYworKysgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KQEAgLTUyLDE5ICs1Myw0MSBAQAogCiAvKiBkYXBtIHBvd2VyIHNlcXVlbmNlcyAtIG1ha2UgdGhpcyBwZXIgY29kZWMgaW4gdGhlIGZ1dHVyZSAqLwogc3RhdGljIGludCBkYXBtX3VwX3NlcVtdID0gewotCXNuZF9zb2NfZGFwbV9wcmUsIHNuZF9zb2NfZGFwbV9zdXBwbHksIHNuZF9zb2NfZGFwbV9taWNiaWFzLAotCXNuZF9zb2NfZGFwbV9taWMsIHNuZF9zb2NfZGFwbV9tdXgsIHNuZF9zb2NfZGFwbV92YWx1ZV9tdXgsCi0Jc25kX3NvY19kYXBtX2RhYywgc25kX3NvY19kYXBtX21peGVyLCBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsLAotCXNuZF9zb2NfZGFwbV9wZ2EsIHNuZF9zb2NfZGFwbV9hZGMsIHNuZF9zb2NfZGFwbV9ocCwgc25kX3NvY19kYXBtX3NwaywKLQlzbmRfc29jX2RhcG1fcG9zdAorCVtzbmRfc29jX2RhcG1fcHJlXSA9IDAsCisJW3NuZF9zb2NfZGFwbV9zdXBwbHldID0gMSwKKwlbc25kX3NvY19kYXBtX21pY2JpYXNdID0gMiwKKwlbc25kX3NvY19kYXBtX2FpZl9pbl0gPSAzLAorCVtzbmRfc29jX2RhcG1fYWlmX291dF0gPSAzLAorCVtzbmRfc29jX2RhcG1fbWljXSA9IDQsCisJW3NuZF9zb2NfZGFwbV9tdXhdID0gNSwKKwlbc25kX3NvY19kYXBtX3ZhbHVlX211eF0gPSA1LAorCVtzbmRfc29jX2RhcG1fZGFjXSA9IDYsCisJW3NuZF9zb2NfZGFwbV9taXhlcl0gPSA3LAorCVtzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsXSA9IDcsCisJW3NuZF9zb2NfZGFwbV9wZ2FdID0gOCwKKwlbc25kX3NvY19kYXBtX2FkY10gPSA5LAorCVtzbmRfc29jX2RhcG1faHBdID0gMTAsCisJW3NuZF9zb2NfZGFwbV9zcGtdID0gMTAsCisJW3NuZF9zb2NfZGFwbV9wb3N0XSA9IDExLAogfTsKIAogc3RhdGljIGludCBkYXBtX2Rvd25fc2VxW10gPSB7Ci0Jc25kX3NvY19kYXBtX3ByZSwgc25kX3NvY19kYXBtX2FkYywgc25kX3NvY19kYXBtX2hwLCBzbmRfc29jX2RhcG1fc3BrLAotCXNuZF9zb2NfZGFwbV9wZ2EsIHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwsIHNuZF9zb2NfZGFwbV9taXhlciwKLQlzbmRfc29jX2RhcG1fZGFjLCBzbmRfc29jX2RhcG1fbWljLCBzbmRfc29jX2RhcG1fbWljYmlhcywKLQlzbmRfc29jX2RhcG1fbXV4LCBzbmRfc29jX2RhcG1fdmFsdWVfbXV4LCBzbmRfc29jX2RhcG1fc3VwcGx5LAotCXNuZF9zb2NfZGFwbV9wb3N0CisJW3NuZF9zb2NfZGFwbV9wcmVdID0gMCwKKwlbc25kX3NvY19kYXBtX2FkY10gPSAxLAorCVtzbmRfc29jX2RhcG1faHBdID0gMiwKKwlbc25kX3NvY19kYXBtX3Nwa10gPSAyLAorCVtzbmRfc29jX2RhcG1fcGdhXSA9IDQsCisJW3NuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGxdID0gNSwKKwlbc25kX3NvY19kYXBtX21peGVyXSA9IDUsCisJW3NuZF9zb2NfZGFwbV9kYWNdID0gNiwKKwlbc25kX3NvY19kYXBtX21pY10gPSA3LAorCVtzbmRfc29jX2RhcG1fbWljYmlhc10gPSA4LAorCVtzbmRfc29jX2RhcG1fbXV4XSA9IDksCisJW3NuZF9zb2NfZGFwbV92YWx1ZV9tdXhdID0gOSwKKwlbc25kX3NvY19kYXBtX2FpZl9pbl0gPSAxMCwKKwlbc25kX3NvY19kYXBtX2FpZl9vdXRdID0gMTAsCisJW3NuZF9zb2NfZGFwbV9zdXBwbHldID0gMTEsCisJW3NuZF9zb2NfZGFwbV9wb3N0XSA9IDEyLAogfTsKIAogc3RhdGljIHZvaWQgcG9wX3dhaXQodTMyIHBvcF90aW1lKQpAQCAtMTMwLDggKzE1MywxMiBAQAogCiAJaWYgKGNhcmQtPnNldF9iaWFzX2xldmVsKQogCQlyZXQgPSBjYXJkLT5zZXRfYmlhc19sZXZlbChjYXJkLCBsZXZlbCk7Ci0JaWYgKHJldCA9PSAwICYmIGNvZGVjLT5zZXRfYmlhc19sZXZlbCkKLQkJcmV0ID0gY29kZWMtPnNldF9iaWFzX2xldmVsKGNvZGVjLCBsZXZlbCk7CisJaWYgKHJldCA9PSAwKSB7CisJCWlmIChjb2RlYy0+c2V0X2JpYXNfbGV2ZWwpCisJCQlyZXQgPSBjb2RlYy0+c2V0X2JpYXNfbGV2ZWwoY29kZWMsIGxldmVsKTsKKwkJZWxzZQorCQkJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjA2LDYgKzIzMyw4IEBACiAJY2FzZSBzbmRfc29jX2RhcG1fbWljYmlhczoKIAljYXNlIHNuZF9zb2NfZGFwbV92bWlkOgogCWNhc2Ugc25kX3NvY19kYXBtX3N1cHBseToKKwljYXNlIHNuZF9zb2NfZGFwbV9haWZfaW46CisJY2FzZSBzbmRfc29jX2RhcG1fYWlmX291dDoKIAkJcC0+Y29ubmVjdCA9IDE7CiAJYnJlYWs7CiAJLyogZG9lcyBlZmZlY3Qgcm91dGluZyAtIGR5bmFtaWNhbGx5IGNvbm5lY3RlZCAqLwpAQCAtMjY4LDcgKzI5Nyw3IEBACiBzdGF0aWMgaW50IGRhcG1fdXBkYXRlX2JpdHMoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCkKIHsKIAlpbnQgY2hhbmdlLCBwb3dlcjsKLQl1bnNpZ25lZCBzaG9ydCBvbGQsIG5ldzsKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXc7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd2lkZ2V0LT5jb2RlYzsKIAogCS8qIGNoZWNrIGZvciB2YWxpZCB3aWRnZXRzICovCkBAIC00NzksOCArNTA4LDE0IEBACiAJaWYgKHdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX3N1cHBseSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAod2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fYWRjICYmIHdpZGdldC0+YWN0aXZlKQotCQlyZXR1cm4gMTsKKwlzd2l0Y2ggKHdpZGdldC0+aWQpIHsKKwljYXNlIHNuZF9zb2NfZGFwbV9hZGM6CisJY2FzZSBzbmRfc29jX2RhcG1fYWlmX291dDoKKwkJaWYgKHdpZGdldC0+YWN0aXZlKQorCQkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJaWYgKHdpZGdldC0+Y29ubmVjdGVkKSB7CiAJCS8qIGNvbm5lY3RlZCBwaW4gPyAqLwpAQCAtNTE5LDggKzU1NCwxNCBAQAogCQlyZXR1cm4gMDsKIAogCS8qIGFjdGl2ZSBzdHJlYW0gPyAqLwotCWlmICh3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9kYWMgJiYgd2lkZ2V0LT5hY3RpdmUpCi0JCXJldHVybiAxOworCXN3aXRjaCAod2lkZ2V0LT5pZCkgeworCWNhc2Ugc25kX3NvY19kYXBtX2RhYzoKKwljYXNlIHNuZF9zb2NfZGFwbV9haWZfaW46CisJCWlmICh3aWRnZXQtPmFjdGl2ZSkKKwkJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCWlmICh3aWRnZXQtPmNvbm5lY3RlZCkgewogCQkvKiBjb25uZWN0ZWQgcGluID8gKi8KQEAgLTY4OSw1NSArNzMwLDIxMyBAQAogCXJldHVybiBwb3dlcjsKIH0KIAotLyoKLSAqIFNjYW4gYSBzaW5nbGUgREFQTSB3aWRnZXQgZm9yIGEgY29tcGxldGUgYXVkaW8gcGF0aCBhbmQgdXBkYXRlIHRoZQotICogcG93ZXIgc3RhdHVzIGFwcHJvcHJpYXRlbHkuCi0gKi8KLXN0YXRpYyBpbnQgZGFwbV9wb3dlcl93aWRnZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZXZlbnQsCi0JCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQorc3RhdGljIGludCBkYXBtX3NlcV9jb21wYXJlKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICphLAorCQkJICAgIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpiLAorCQkJICAgIGludCBzb3J0W10pCiB7Ci0JaW50IHJldDsKKwlpZiAoc29ydFthLT5pZF0gIT0gc29ydFtiLT5pZF0pCisJCXJldHVybiBzb3J0W2EtPmlkXSAtIHNvcnRbYi0+aWRdOworCWlmIChhLT5yZWcgIT0gYi0+cmVnKQorCQlyZXR1cm4gYS0+cmVnIC0gYi0+cmVnOwogCi0Jc3dpdGNoICh3LT5pZCkgewotCWNhc2Ugc25kX3NvY19kYXBtX3ByZToKLQkJaWYgKCF3LT5ldmVudCkKLQkJCXJldHVybiAwOworCXJldHVybiAwOworfQogCi0JCWlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUQVJUKSB7Ci0JCQlyZXQgPSB3LT5ldmVudCh3LAotCQkJCSAgICAgICBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNVSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gcmV0OwotCQl9IGVsc2UgaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RPUCkgewotCQkJcmV0ID0gdy0+ZXZlbnQodywKLQkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTUQpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJldDsKKy8qIEluc2VydCBhIHdpZGdldCBpbiBvcmRlciBpbnRvIGEgREFQTSBwb3dlciBzZXF1ZW5jZS4gKi8KK3N0YXRpYyB2b2lkIGRhcG1fc2VxX2luc2VydChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqbmV3X3dpZGdldCwKKwkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJICAgIGludCBzb3J0W10pCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsIGxpc3QsIHBvd2VyX2xpc3QpCisJCWlmIChkYXBtX3NlcV9jb21wYXJlKG5ld193aWRnZXQsIHcsIHNvcnQpIDwgMCkgeworCQkJbGlzdF9hZGRfdGFpbCgmbmV3X3dpZGdldC0+cG93ZXJfbGlzdCwgJnctPnBvd2VyX2xpc3QpOworCQkJcmV0dXJuOwogCQl9Ci0JCXJldHVybiAwOwogCi0JY2FzZSBzbmRfc29jX2RhcG1fcG9zdDoKLQkJaWYgKCF3LT5ldmVudCkKLQkJCXJldHVybiAwOworCWxpc3RfYWRkX3RhaWwoJm5ld193aWRnZXQtPnBvd2VyX2xpc3QsIGxpc3QpOworfQogCi0JCWlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUQVJUKSB7CisvKiBBcHBseSB0aGUgY29hbGVzY2VkIGNoYW5nZXMgZnJvbSBhIERBUE0gc2VxdWVuY2UgKi8KK3N0YXRpYyB2b2lkIGRhcG1fc2VxX3J1bl9jb2FsZXNjZWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnBlbmRpbmcpCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CisJaW50IHJlZywgcG93ZXIsIHJldDsKKwl1bnNpZ25lZCBpbnQgdmFsdWUgPSAwOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKwl1bnNpZ25lZCBpbnQgY3VyX21hc2s7CisKKwlyZWcgPSBsaXN0X2ZpcnN0X2VudHJ5KHBlbmRpbmcsIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0LAorCQkJICAgICAgIHBvd2VyX2xpc3QpLT5yZWc7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsIHBlbmRpbmcsIHBvd2VyX2xpc3QpIHsKKwkJY3VyX21hc2sgPSAxIDw8IHctPnNoaWZ0OworCQlCVUdfT04ocmVnICE9IHctPnJlZyk7CisKKwkJaWYgKHctPmludmVydCkKKwkJCXBvd2VyID0gIXctPnBvd2VyOworCQllbHNlCisJCQlwb3dlciA9IHctPnBvd2VyOworCisJCW1hc2sgfD0gY3VyX21hc2s7CisJCWlmIChwb3dlcikKKwkJCXZhbHVlIHw9IGN1cl9tYXNrOworCisJCXBvcF9kYmcoY29kZWMtPnBvcF90aW1lLAorCQkJInBvcCB0ZXN0IDogUXVldWUgJXM6IHJlZz0weCV4LCAweCV4LzB4JXhcbiIsCisJCQl3LT5uYW1lLCByZWcsIHZhbHVlLCBtYXNrKTsKKworCQkvKiBwb3dlciB1cCBwcmUgZXZlbnQgKi8KKwkJaWYgKHctPnBvd2VyICYmIHctPmV2ZW50ICYmCisJCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkpIHsKKwkJCXBvcF9kYmcoY29kZWMtPnBvcF90aW1lLCAicG9wIHRlc3QgOiAlcyBQUkVfUE1VXG4iLAorCQkJCXctPm5hbWUpOworCQkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOworCQkJaWYgKHJldCA8IDApCisJCQkJcHJfZXJyKCIlczogcHJlIGV2ZW50IGZhaWxlZDogJWRcbiIsCisJCQkJICAgICAgIHctPm5hbWUsIHJldCk7CisJCX0KKworCQkvKiBwb3dlciBkb3duIHByZSBldmVudCAqLworCQlpZiAoIXctPnBvd2VyICYmIHctPmV2ZW50ICYmCisJCSAgICAody0+ZXZlbnRfZmxhZ3MgJiBTTkRfU09DX0RBUE1fUFJFX1BNRCkpIHsKKwkJCXBvcF9kYmcoY29kZWMtPnBvcF90aW1lLCAicG9wIHRlc3QgOiAlcyBQUkVfUE1EXG4iLAorCQkJCXctPm5hbWUpOworCQkJcmV0ID0gdy0+ZXZlbnQodywgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTUQpOworCQkJaWYgKHJldCA8IDApCisJCQkJcHJfZXJyKCIlczogcHJlIGV2ZW50IGZhaWxlZDogJWRcbiIsCisJCQkJICAgICAgIHctPm5hbWUsIHJldCk7CisJCX0KKworCQkvKiBMb3dlciBQR0Egdm9sdW1lIHRvIHJlZHVjZSBwb3BzICovCisJCWlmICh3LT5pZCA9PSBzbmRfc29jX2RhcG1fcGdhICYmICF3LT5wb3dlcikKKwkJCWRhcG1fc2V0X3BnYSh3LCB3LT5wb3dlcik7CisJfQorCisJaWYgKHJlZyA+PSAwKSB7CisJCXBvcF9kYmcoY29kZWMtPnBvcF90aW1lLAorCQkJInBvcCB0ZXN0IDogQXBwbHlpbmcgMHgleC8weCV4IHRvICV4IGluICVkbXNcbiIsCisJCQl2YWx1ZSwgbWFzaywgcmVnLCBjb2RlYy0+cG9wX3RpbWUpOworCQlwb3Bfd2FpdChjb2RlYy0+cG9wX3RpbWUpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsIG1hc2ssIHZhbHVlKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsIHBlbmRpbmcsIHBvd2VyX2xpc3QpIHsKKwkJLyogUmFpc2UgUEdBIHZvbHVtZSB0byByZWR1Y2UgcG9wcyAqLworCQlpZiAody0+aWQgPT0gc25kX3NvY19kYXBtX3BnYSAmJiB3LT5wb3dlcikKKwkJCWRhcG1fc2V0X3BnYSh3LCB3LT5wb3dlcik7CisKKwkJLyogcG93ZXIgdXAgcG9zdCBldmVudCAqLworCQlpZiAody0+cG93ZXIgJiYgdy0+ZXZlbnQgJiYKKwkJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QT1NUX1BNVSkpIHsKKwkJCXBvcF9kYmcoY29kZWMtPnBvcF90aW1lLCAicG9wIHRlc3QgOiAlcyBQT1NUX1BNVVxuIiwKKwkJCQl3LT5uYW1lKTsKIAkJCXJldCA9IHctPmV2ZW50KHcsCiAJCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNVSk7CiAJCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gcmV0OwotCQl9IGVsc2UgaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RPUCkgewotCQkJcmV0ID0gdy0+ZXZlbnQodywKLQkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7CisJCQkJcHJfZXJyKCIlczogcG9zdCBldmVudCBmYWlsZWQ6ICVkXG4iLAorCQkJCSAgICAgICB3LT5uYW1lLCByZXQpOwogCQl9Ci0JCXJldHVybiAwOwogCi0JZGVmYXVsdDoKLQkJcmV0dXJuIGRhcG1fZ2VuZXJpY19hcHBseV9wb3dlcih3KTsKKwkJLyogcG93ZXIgZG93biBwb3N0IGV2ZW50ICovCisJCWlmICghdy0+cG93ZXIgJiYgdy0+ZXZlbnQgJiYKKwkJICAgICh3LT5ldmVudF9mbGFncyAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkpIHsKKwkJCXBvcF9kYmcoY29kZWMtPnBvcF90aW1lLCAicG9wIHRlc3QgOiAlcyBQT1NUX1BNRFxuIiwKKwkJCQl3LT5uYW1lKTsKKwkJCXJldCA9IHctPmV2ZW50KHcsIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNRCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlwcl9lcnIoIiVzOiBwb3N0IGV2ZW50IGZhaWxlZDogJWRcbiIsCisJCQkJICAgICAgIHctPm5hbWUsIHJldCk7CisJCX0KIAl9CiB9CiAKKy8qIEFwcGx5IGEgREFQTSBwb3dlciBzZXF1ZW5jZS4KKyAqCisgKiBXZSB3YWxrIG92ZXIgYSBwcmUtc29ydGVkIGxpc3Qgb2Ygd2lkZ2V0cyB0byBhcHBseSBwb3dlciB0by4gIEluCisgKiBvcmRlciB0byBtaW5pbWlzZSB0aGUgbnVtYmVyIG9mIHdyaXRlcyB0byB0aGUgZGV2aWNlIHJlcXVpcmVkCisgKiBtdWx0aXBsZSB3aWRnZXRzIHdpbGwgYmUgdXBkYXRlZCBpbiBhIHNpbmdsZSB3cml0ZSB3aGVyZSBwb3NzaWJsZS4KKyAqIEN1cnJlbnRseSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIG1vcmUgdGhhbiBhIHNpbmdsZSB3cml0ZSBpcyBub3QKKyAqIGhhbmRsZWQuCisgKi8KK3N0YXRpYyB2b2lkIGRhcG1fc2VxX3J1bihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkgaW50IGV2ZW50LCBpbnQgc29ydFtdKQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LCAqbjsKKwlMSVNUX0hFQUQocGVuZGluZyk7CisJaW50IGN1cl9zb3J0ID0gLTE7CisJaW50IGN1cl9yZWcgPSBTTkRfU09DX05PUE07CisJaW50IHJldDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3LCBuLCBsaXN0LCBwb3dlcl9saXN0KSB7CisJCXJldCA9IDA7CisKKwkJLyogRG8gd2UgbmVlZCB0byBhcHBseSBhbnkgcXVldWVkIGNoYW5nZXM/ICovCisJCWlmIChzb3J0W3ctPmlkXSAhPSBjdXJfc29ydCB8fCB3LT5yZWcgIT0gY3VyX3JlZykgeworCQkJaWYgKCFsaXN0X2VtcHR5KCZwZW5kaW5nKSkKKwkJCQlkYXBtX3NlcV9ydW5fY29hbGVzY2VkKGNvZGVjLCAmcGVuZGluZyk7CisKKwkJCUlOSVRfTElTVF9IRUFEKCZwZW5kaW5nKTsKKwkJCWN1cl9zb3J0ID0gLTE7CisJCQljdXJfcmVnID0gU05EX1NPQ19OT1BNOworCQl9CisKKwkJc3dpdGNoICh3LT5pZCkgeworCQljYXNlIHNuZF9zb2NfZGFwbV9wcmU6CisJCQlpZiAoIXctPmV2ZW50KQorCQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9jb250aW51ZSh3LCBuLCBsaXN0LAorCQkJCQkJCQkgIHBvd2VyX2xpc3QpOworCisJCQlpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVCkKKwkJCQlyZXQgPSB3LT5ldmVudCh3LAorCQkJCQkgICAgICAgTlVMTCwgU05EX1NPQ19EQVBNX1BSRV9QTVUpOworCQkJZWxzZSBpZiAoZXZlbnQgPT0gU05EX1NPQ19EQVBNX1NUUkVBTV9TVE9QKQorCQkJCXJldCA9IHctPmV2ZW50KHcsCisJCQkJCSAgICAgICBOVUxMLCBTTkRfU09DX0RBUE1fUFJFX1BNRCk7CisJCQlicmVhazsKKworCQljYXNlIHNuZF9zb2NfZGFwbV9wb3N0OgorCQkJaWYgKCF3LT5ldmVudCkKKwkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfY29udGludWUodywgbiwgbGlzdCwKKwkJCQkJCQkJICBwb3dlcl9saXN0KTsKKworCQkJaWYgKGV2ZW50ID09IFNORF9TT0NfREFQTV9TVFJFQU1fU1RBUlQpCisJCQkJcmV0ID0gdy0+ZXZlbnQodywKKwkJCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNVSk7CisJCQllbHNlIGlmIChldmVudCA9PSBTTkRfU09DX0RBUE1fU1RSRUFNX1NUT1ApCisJCQkJcmV0ID0gdy0+ZXZlbnQodywKKwkJCQkJICAgICAgIE5VTEwsIFNORF9TT0NfREFQTV9QT1NUX1BNRCk7CisJCQlicmVhazsKKworCQljYXNlIHNuZF9zb2NfZGFwbV9pbnB1dDoKKwkJY2FzZSBzbmRfc29jX2RhcG1fb3V0cHV0OgorCQljYXNlIHNuZF9zb2NfZGFwbV9ocDoKKwkJY2FzZSBzbmRfc29jX2RhcG1fbWljOgorCQljYXNlIHNuZF9zb2NfZGFwbV9saW5lOgorCQljYXNlIHNuZF9zb2NfZGFwbV9zcGs6CisJCQkvKiBObyByZWdpc3RlciBzdXBwb3J0IGN1cnJlbnRseSAqLworCQkJcmV0ID0gZGFwbV9nZW5lcmljX2FwcGx5X3Bvd2VyKHcpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qIFF1ZXVlIGl0IHVwIGZvciBhcHBsaWNhdGlvbiAqLworCQkJY3VyX3NvcnQgPSBzb3J0W3ctPmlkXTsKKwkJCWN1cl9yZWcgPSB3LT5yZWc7CisJCQlsaXN0X21vdmUoJnctPnBvd2VyX2xpc3QsICZwZW5kaW5nKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJldCA8IDApCisJCQlwcl9lcnIoIkZhaWxlZCB0byBhcHBseSB3aWRnZXQgcG93ZXI6ICVkXG4iLAorCQkJICAgICAgIHJldCk7CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZwZW5kaW5nKSkKKwkJZGFwbV9zZXFfcnVuX2NvYWxlc2NlZChjb2RlYywgJnBlbmRpbmcpOworfQorCiAvKgogICogU2NhbiBlYWNoIGRhcG0gd2lkZ2V0IGZvciBjb21wbGV0ZSBhdWRpbyBwYXRoLgogICogQSBjb21wbGV0ZSBwYXRoIGlzIGEgcm91dGUgdGhhdCBoYXMgdmFsaWQgZW5kcG9pbnRzIGkuZS46LQpAQCAtNzUxLDIzICs5NTAsMjIgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IGNvZGVjLT5zb2NkZXY7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CisJTElTVF9IRUFEKHVwX2xpc3QpOworCUxJU1RfSEVBRChkb3duX2xpc3QpOwogCWludCByZXQgPSAwOwotCWludCBpLCBwb3dlcjsKKwlpbnQgcG93ZXI7CiAJaW50IHN5c19wb3dlciA9IDA7CiAKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPnVwX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZG93bl9saXN0KTsKLQogCS8qIENoZWNrIHdoaWNoIHdpZGdldHMgd2UgbmVlZCB0byBwb3dlciBhbmQgc3RvcmUgdGhlbSBpbgogCSAqIGxpc3RzIGluZGljYXRpbmcgaWYgdGhleSBzaG91bGQgYmUgcG93ZXJlZCB1cCBvciBkb3duLgogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmNvZGVjLT5kYXBtX3dpZGdldHMsIGxpc3QpIHsKIAkJc3dpdGNoICh3LT5pZCkgewogCQljYXNlIHNuZF9zb2NfZGFwbV9wcmU6Ci0JCQlsaXN0X2FkZF90YWlsKCZjb2RlYy0+ZG93bl9saXN0LCAmdy0+cG93ZXJfbGlzdCk7CisJCQlkYXBtX3NlcV9pbnNlcnQodywgJmRvd25fbGlzdCwgZGFwbV9kb3duX3NlcSk7CiAJCQlicmVhazsKIAkJY2FzZSBzbmRfc29jX2RhcG1fcG9zdDoKLQkJCWxpc3RfYWRkX3RhaWwoJmNvZGVjLT51cF9saXN0LCAmdy0+cG93ZXJfbGlzdCk7CisJCQlkYXBtX3NlcV9pbnNlcnQodywgJnVwX2xpc3QsIGRhcG1fdXBfc2VxKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC03ODIsMTYgKzk4MCwzMSBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAocG93ZXIpCi0JCQkJbGlzdF9hZGRfdGFpbCgmdy0+cG93ZXJfbGlzdCwgJmNvZGVjLT51cF9saXN0KTsKKwkJCQlkYXBtX3NlcV9pbnNlcnQodywgJnVwX2xpc3QsIGRhcG1fdXBfc2VxKTsKIAkJCWVsc2UKLQkJCQlsaXN0X2FkZF90YWlsKCZ3LT5wb3dlcl9saXN0LAotCQkJCQkgICAgICAmY29kZWMtPmRvd25fbGlzdCk7CisJCQkJZGFwbV9zZXFfaW5zZXJ0KHcsICZkb3duX2xpc3QsIGRhcG1fZG93bl9zZXEpOwogCiAJCQl3LT5wb3dlciA9IHBvd2VyOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKKwkvKiBJZiB0aGVyZSBhcmUgbm8gREFQTSB3aWRnZXRzIHRoZW4gdHJ5IHRvIGZpZ3VyZSBvdXQgcG93ZXIgZnJvbSB0aGUKKwkgKiBldmVudCB0eXBlLgorCSAqLworCWlmIChsaXN0X2VtcHR5KCZjb2RlYy0+ZGFwbV93aWRnZXRzKSkgeworCQlzd2l0Y2ggKGV2ZW50KSB7CisJCWNhc2UgU05EX1NPQ19EQVBNX1NUUkVBTV9TVEFSVDoKKwkJY2FzZSBTTkRfU09DX0RBUE1fU1RSRUFNX1JFU1VNRToKKwkJCXN5c19wb3dlciA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBUE1fU1RSRUFNX05PUDoKKwkJCXN5c19wb3dlciA9IGNvZGVjLT5iaWFzX2xldmVsICE9IFNORF9TT0NfQklBU19TVEFOREJZOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKIAkvKiBJZiB3ZSdyZSBjaGFuZ2luZyB0byBhbGwgb24gb3IgYWxsIG9mZiB0aGVuIHByZXBhcmUgKi8KIAlpZiAoKHN5c19wb3dlciAmJiBjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfU1RBTkRCWSkgfHwKIAkgICAgKCFzeXNfcG93ZXIgJiYgY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09OKSkgewpAQCAtODAyLDMyICsxMDE1LDEwIEBACiAJfQogCiAJLyogUG93ZXIgZG93biB3aWRnZXRzIGZpcnN0OyB0cnkgdG8gYXZvaWQgYW1wbGlmeWluZyBwb3BzLiAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhcG1fZG93bl9zZXEpOyBpKyspIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmY29kZWMtPmRvd25fbGlzdCwgcG93ZXJfbGlzdCkgewotCQkJLyogaXMgd2lkZ2V0IGluIHN0cmVhbSBvcmRlciAqLwotCQkJaWYgKHctPmlkICE9IGRhcG1fZG93bl9zZXFbaV0pCi0JCQkJY29udGludWU7Ci0KLQkJCXJldCA9IGRhcG1fcG93ZXJfd2lkZ2V0KGNvZGVjLCBldmVudCwgdyk7Ci0JCQlpZiAocmV0ICE9IDApCi0JCQkJcHJfZXJyKCJGYWlsZWQgdG8gcG93ZXIgZG93biAlczogJWRcbiIsCi0JCQkJICAgICAgIHctPm5hbWUsIHJldCk7Ci0JCX0KLQl9CisJZGFwbV9zZXFfcnVuKGNvZGVjLCAmZG93bl9saXN0LCBldmVudCwgZGFwbV9kb3duX3NlcSk7CiAKIAkvKiBOb3cgcG93ZXIgdXAuICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGFwbV91cF9zZXEpOyBpKyspIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmY29kZWMtPnVwX2xpc3QsIHBvd2VyX2xpc3QpIHsKLQkJCS8qIGlzIHdpZGdldCBpbiBzdHJlYW0gb3JkZXIgKi8KLQkJCWlmICh3LT5pZCAhPSBkYXBtX3VwX3NlcVtpXSkKLQkJCQljb250aW51ZTsKLQotCQkJcmV0ID0gZGFwbV9wb3dlcl93aWRnZXQoY29kZWMsIGV2ZW50LCB3KTsKLQkJCWlmIChyZXQgIT0gMCkKLQkJCQlwcl9lcnIoIkZhaWxlZCB0byBwb3dlciB1cCAlczogJWRcbiIsCi0JCQkJICAgICAgIHctPm5hbWUsIHJldCk7Ci0JCX0KLQl9CisJZGFwbV9zZXFfcnVuKGNvZGVjLCAmdXBfbGlzdCwgZXZlbnQsIGRhcG1fdXBfc2VxKTsKIAogCS8qIElmIHdlIGp1c3QgcG93ZXJlZCB0aGUgbGFzdCB0aGluZyBvZmYgZHJvcCB0byBzdGFuZGJ5IGJpYXMgKi8KIAlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1BSRVBBUkUgJiYgIXN5c19wb3dlcikgewpAQCAtODQ1LDYgKzEwMzYsOSBAQAogCQkJcHJfZXJyKCJGYWlsZWQgdG8gYXBwbHkgYWN0aXZlIGJpYXM6ICVkXG4iLCByZXQpOwogCX0KIAorCXBvcF9kYmcoY29kZWMtPnBvcF90aW1lLCAiREFQTSBzZXF1ZW5jaW5nIGZpbmlzaGVkLCB3YWl0aW5nICVkbXNcbiIsCisJCWNvZGVjLT5wb3BfdGltZSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODgxLDYgKzEwNzUsOCBAQAogCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgogCQljYXNlIHNuZF9zb2NfZGFwbV9zdXBwbHk6CisJCWNhc2Ugc25kX3NvY19kYXBtX2FpZl9pbjoKKwkJY2FzZSBzbmRfc29jX2RhcG1fYWlmX291dDoKIAkJCWlmICh3LT5uYW1lKSB7CiAJCQkJaW4gPSBpc19jb25uZWN0ZWRfaW5wdXRfZXAodyk7CiAJCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKQEAgLTkwNiw2ICsxMTAyLDkyIEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIGludCBkYXBtX3dpZGdldF9wb3dlcl9vcGVuX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgZGFwbV93aWRnZXRfcG93ZXJfcmVhZF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgKmJ1ZjsKKwlpbnQgaW4sIG91dDsKKwlzc2l6ZV90IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGggKnAgPSBOVUxMOworCisJYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluID0gaXNfY29ubmVjdGVkX2lucHV0X2VwKHcpOworCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7CisJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKKwlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOworCisJcmV0ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlczogJXMgIGluICVkIG91dCAlZFxuIiwKKwkJICAgICAgIHctPm5hbWUsIHctPnBvd2VyID8gIk9uIiA6ICJPZmYiLCBpbiwgb3V0KTsKKworCWlmICh3LT5hY3RpdmUgJiYgdy0+c25hbWUpCisJCXJldCArPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSAtIHJldCwgIiBzdHJlYW0gJXMgYWN0aXZlXG4iLAorCQkJCXctPnNuYW1lKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJnctPnNvdXJjZXMsIGxpc3Rfc2luaykgeworCQlpZiAocC0+Y29ubmVjdCkKKwkJCXJldCArPSBzbnByaW50ZihidWYgKyByZXQsIFBBR0VfU0laRSAtIHJldCwKKwkJCQkJIiBpbiAgJXMgJXNcbiIsCisJCQkJCXAtPm5hbWUgPyBwLT5uYW1lIDogInN0YXRpYyIsCisJCQkJCXAtPnNvdXJjZS0+bmFtZSk7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJnctPnNpbmtzLCBsaXN0X3NvdXJjZSkgeworCQlpZiAocC0+Y29ubmVjdCkKKwkJCXJldCArPSBzbnByaW50ZihidWYgKyByZXQsIFBBR0VfU0laRSAtIHJldCwKKwkJCQkJIiBvdXQgJXMgJXNcbiIsCisJCQkJCXAtPm5hbWUgPyBwLT5uYW1lIDogInN0YXRpYyIsCisJCQkJCXAtPnNpbmstPm5hbWUpOworCX0KKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXQpOworCisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYXBtX3dpZGdldF9wb3dlcl9mb3BzID0geworCS5vcGVuID0gZGFwbV93aWRnZXRfcG93ZXJfb3Blbl9maWxlLAorCS5yZWFkID0gZGFwbV93aWRnZXRfcG93ZXJfcmVhZF9maWxlLAorfTsKKwordm9pZCBzbmRfc29jX2RhcG1fZGVidWdmc19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdzsKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCisJaWYgKCFjb2RlYy0+ZGVidWdmc19kYXBtKQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZjb2RlYy0+ZGFwbV93aWRnZXRzLCBsaXN0KSB7CisJCWlmICghdy0+bmFtZSkKKwkJCWNvbnRpbnVlOworCisJCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKHctPm5hbWUsIDA0NDQsCisJCQkJCWNvZGVjLT5kZWJ1Z2ZzX2RhcG0sIHcsCisJCQkJCSZkYXBtX3dpZGdldF9wb3dlcl9mb3BzKTsKKwkJaWYgKCFkKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJBU29DOiBGYWlsZWQgdG8gY3JlYXRlICVzIGRlYnVnZnMgZmlsZVxuIiwKKwkJCSAgICAgICB3LT5uYW1lKTsKKwl9Cit9CisjZWxzZQordm9pZCBzbmRfc29jX2RhcG1fZGVidWdmc19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKK30KKyNlbmRpZgorCiAvKiB0ZXN0IGFuZCB1cGRhdGUgdGhlIHBvd2VyIHN0YXR1cyBvZiBhIG11eCB3aWRnZXQgKi8KIHN0YXRpYyBpbnQgZGFwbV9tdXhfdXBkYXRlX3Bvd2VyKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQsCiAJCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgbWFzaywKQEAgLTExMzgsOCArMTQyMCw4IEBACiAJaWYgKHdzaW5rLT5pZCA9PSBzbmRfc29jX2RhcG1faW5wdXQpIHsKIAkJaWYgKHdzb3VyY2UtPmlkID09IHNuZF9zb2NfZGFwbV9taWNiaWFzIHx8CiAJCQl3c291cmNlLT5pZCA9PSBzbmRfc29jX2RhcG1fbWljIHx8Ci0JCQl3c2luay0+aWQgPT0gc25kX3NvY19kYXBtX2xpbmUgfHwKLQkJCXdzaW5rLT5pZCA9PSBzbmRfc29jX2RhcG1fb3V0cHV0KQorCQkJd3NvdXJjZS0+aWQgPT0gc25kX3NvY19kYXBtX2xpbmUgfHwKKwkJCXdzb3VyY2UtPmlkID09IHNuZF9zb2NfZGFwbV9vdXRwdXQpCiAJCQl3c2luay0+ZXh0ID0gMTsKIAl9CiAJaWYgKHdzb3VyY2UtPmlkID09IHNuZF9zb2NfZGFwbV9vdXRwdXQpIHsKQEAgLTExNzEsNiArMTQ1Myw4IEBACiAJY2FzZSBzbmRfc29jX2RhcG1fcHJlOgogCWNhc2Ugc25kX3NvY19kYXBtX3Bvc3Q6CiAJY2FzZSBzbmRfc29jX2RhcG1fc3VwcGx5OgorCWNhc2Ugc25kX3NvY19kYXBtX2FpZl9pbjoKKwljYXNlIHNuZF9zb2NfZGFwbV9haWZfb3V0OgogCQlsaXN0X2FkZCgmcGF0aC0+bGlzdCwgJmNvZGVjLT5kYXBtX3BhdGhzKTsKIAkJbGlzdF9hZGQoJnBhdGgtPmxpc3Rfc2luaywgJndzaW5rLT5zb3VyY2VzKTsKIAkJbGlzdF9hZGQoJnBhdGgtPmxpc3Rfc291cmNlLCAmd3NvdXJjZS0+c2lua3MpOwpAQCAtMTI3Myw5ICsxNTU3LDExIEBACiAJCQlkYXBtX25ld19tdXgoY29kZWMsIHcpOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX2FkYzoKKwkJY2FzZSBzbmRfc29jX2RhcG1fYWlmX291dDoKIAkJCXctPnBvd2VyX2NoZWNrID0gZGFwbV9hZGNfY2hlY2tfcG93ZXI7CiAJCQlicmVhazsKIAkJY2FzZSBzbmRfc29jX2RhcG1fZGFjOgorCQljYXNlIHNuZF9zb2NfZGFwbV9haWZfaW46CiAJCQl3LT5wb3dlcl9jaGVjayA9IGRhcG1fZGFjX2NoZWNrX3Bvd2VyOwogCQkJYnJlYWs7CiAJCWNhc2Ugc25kX3NvY19kYXBtX3BnYToKQEAgLTEzNzIsNyArMTY1OCw3IEBACiAJaW50IG1heCA9IG1jLT5tYXg7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAoMSA8PCBmbHMobWF4KSkgLSAxOwogCXVuc2lnbmVkIGludCBpbnZlcnQgPSBtYy0+aW52ZXJ0OwotCXVuc2lnbmVkIHNob3J0IHZhbCwgdmFsMiwgdmFsX21hc2s7CisJdW5zaWduZWQgaW50IHZhbCwgdmFsMiwgdmFsX21hc2s7CiAJaW50IHJldDsKIAogCXZhbCA9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIG1hc2spOwpAQCAtMTQzNiw3ICsxNzIyLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBzb2NfZW51bSAqZSA9IChzdHJ1Y3Qgc29jX2VudW0gKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKLQl1bnNpZ25lZCBzaG9ydCB2YWwsIGJpdG1hc2s7CisJdW5zaWduZWQgaW50IHZhbCwgYml0bWFzazsKIAogCWZvciAoYml0bWFzayA9IDE7IGJpdG1hc2sgPCBlLT5tYXg7IGJpdG1hc2sgPDw9IDEpCiAJCTsKQEAgLTE0NjQsOCArMTc1MCw4IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3Qgc29jX2VudW0gKmUgPSAoc3RydWN0IHNvY19lbnVtICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7Ci0JdW5zaWduZWQgc2hvcnQgdmFsLCBtdXg7Ci0JdW5zaWduZWQgc2hvcnQgbWFzaywgYml0bWFzazsKKwl1bnNpZ25lZCBpbnQgdmFsLCBtdXg7CisJdW5zaWduZWQgaW50IG1hc2ssIGJpdG1hc2s7CiAJaW50IHJldCA9IDA7CiAKIAlmb3IgKGJpdG1hc2sgPSAxOyBiaXRtYXNrIDwgZS0+bWF4OyBiaXRtYXNrIDw8PSAxKQpAQCAtMTUyMyw3ICsxODA5LDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBzb2NfZW51bSAqZSA9IChzdHJ1Y3Qgc29jX2VudW0gKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKLQl1bnNpZ25lZCBzaG9ydCByZWdfdmFsLCB2YWwsIG11eDsKKwl1bnNpZ25lZCBpbnQgcmVnX3ZhbCwgdmFsLCBtdXg7CiAKIAlyZWdfdmFsID0gc25kX3NvY19yZWFkKHdpZGdldC0+Y29kZWMsIGUtPnJlZyk7CiAJdmFsID0gKHJlZ192YWwgPj4gZS0+c2hpZnRfbCkgJiBlLT5tYXNrOwpAQCAtMTU2Myw4ICsxODQ5LDggQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBzb2NfZW51bSAqZSA9IChzdHJ1Y3Qgc29jX2VudW0gKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKLQl1bnNpZ25lZCBzaG9ydCB2YWwsIG11eDsKLQl1bnNpZ25lZCBzaG9ydCBtYXNrOworCXVuc2lnbmVkIGludCB2YWwsIG11eDsKKwl1bnNpZ25lZCBpbnQgbWFzazsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID4gZS0+bWF4IC0gMSkKQEAgLTE4ODAsNiArMjE2NiwzNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX2ZyZWUpOwogCisvKgorICogc25kX3NvY19kYXBtX3NodXRkb3duIC0gY2FsbGJhY2sgZm9yIHN5c3RlbSBzaHV0ZG93bgorICovCit2b2lkIHNuZF9zb2NfZGFwbV9zaHV0ZG93bihzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OworCUxJU1RfSEVBRChkb3duX2xpc3QpOworCWludCBwb3dlcmRvd24gPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmY29kZWMtPmRhcG1fd2lkZ2V0cywgbGlzdCkgeworCQlpZiAody0+cG93ZXIpIHsKKwkJCWRhcG1fc2VxX2luc2VydCh3LCAmZG93bl9saXN0LCBkYXBtX2Rvd25fc2VxKTsKKwkJCXctPnBvd2VyID0gMDsKKwkJCXBvd2VyZG93biA9IDE7CisJCX0KKwl9CisKKwkvKiBJZiB0aGVyZSB3ZXJlIG5vIHdpZGdldHMgdG8gcG93ZXIgZG93biB3ZSdyZSBhbHJlYWR5IGluCisJICogc3RhbmRieS4KKwkgKi8KKwlpZiAocG93ZXJkb3duKSB7CisJCXNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChzb2NkZXYsIFNORF9TT0NfQklBU19QUkVQQVJFKTsKKwkJZGFwbV9zZXFfcnVuKGNvZGVjLCAmZG93bl9saXN0LCAwLCBkYXBtX2Rvd25fc2VxKTsKKwkJc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKHNvY2RldiwgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCX0KKworCXNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChzb2NkZXYsIFNORF9TT0NfQklBU19PRkYpOworfQorCiAvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KIE1PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QsIGxyZ0BzbGltbG9naWMuY28udWsiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHluYW1pYyBBdWRpbyBQb3dlciBNYW5hZ2VtZW50IGNvcmUgZm9yIEFMU0EgU29DIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWphY2suYyBiL3NvdW5kL3NvYy9zb2MtamFjay5jCmluZGV4IDI4MzQ2ZmIuLjFkNDU1YWI3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWphY2suYworKysgYi9zb3VuZC9zb2Mvc29jLWphY2suYwpAQCAtNzMsMTQgKzczLDE1IEBACiAJb2xkc3RhdHVzID0gamFjay0+c3RhdHVzOwogCiAJamFjay0+c3RhdHVzICY9IH5tYXNrOwotCWphY2stPnN0YXR1cyB8PSBzdGF0dXM7CisJamFjay0+c3RhdHVzIHw9IHN0YXR1cyAmIG1hc2s7CiAKLQkvKiBUaGUgREFQTSBzeW5jIGlzIGV4cGVuc2l2ZSBlbm91Z2ggdG8gYmUgd29ydGggc2tpcHBpbmcgKi8KLQlpZiAoamFjay0+c3RhdHVzID09IG9sZHN0YXR1cykKKwkvKiBUaGUgREFQTSBzeW5jIGlzIGV4cGVuc2l2ZSBlbm91Z2ggdG8gYmUgd29ydGggc2tpcHBpbmcuCisJICogSG93ZXZlciwgZW1wdHkgbWFzayBtZWFucyBwaW4gc3luY2hyb25pemF0aW9uIGlzIGRlc2lyZWQuICovCisJaWYgKG1hc2sgJiYgKGphY2stPnN0YXR1cyA9PSBvbGRzdGF0dXMpKQogCQlnb3RvIG91dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGluLCAmamFjay0+cGlucywgbGlzdCkgewotCQllbmFibGUgPSBwaW4tPm1hc2sgJiBzdGF0dXM7CisJCWVuYWJsZSA9IHBpbi0+bWFzayAmIGphY2stPnN0YXR1czsKIAogCQlpZiAocGluLT5pbnZlcnQpCiAJCQllbmFibGUgPSAhZW5hYmxlOwpAQCAtMjIwLDYgKzIyMSw5IEBACiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAorCQlJTklUX1dPUksoJmdwaW9zW2ldLndvcmssIGdwaW9fd29yayk7CisJCWdwaW9zW2ldLmphY2sgPSBqYWNrOworCiAJCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKGdwaW9zW2ldLmdwaW8pLAogCQkJCWdwaW9faGFuZGxlciwKIAkJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCkBAIC0yMjgsOCArMjMyLDEzIEBACiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAotCQlJTklUX1dPUksoJmdwaW9zW2ldLndvcmssIGdwaW9fd29yayk7Ci0JCWdwaW9zW2ldLmphY2sgPSBqYWNrOworI2lmZGVmIENPTkZJR19HUElPX1NZU0ZTCisJCS8qIEV4cG9zZSBHUElPIHZhbHVlIG92ZXIgc3lzZnMgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMgKi8KKwkJZ3Bpb19leHBvcnQoZ3Bpb3NbaV0uZ3BpbywgZmFsc2UpOworI2VuZGlmCisKKwkJLyogVXBkYXRlIGluaXRpYWwgamFjayBzdGF0dXMgKi8KKwkJc25kX3NvY19qYWNrX2dwaW9fZGV0ZWN0KCZncGlvc1tpXSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNTgsNiArMjY3LDkgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisjaWZkZWYgQ09ORklHX0dQSU9fU1lTRlMKKwkJZ3Bpb191bmV4cG9ydChncGlvc1tpXS5ncGlvKTsKKyNlbmRpZgogCQlmcmVlX2lycShncGlvX3RvX2lycShncGlvc1tpXS5ncGlvKSwgJmdwaW9zW2ldKTsKIAkJZ3Bpb19mcmVlKGdwaW9zW2ldLmdwaW8pOwogCQlncGlvc1tpXS5qYWNrID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90eHg5L3R4eDlhY2xjLmMgYi9zb3VuZC9zb2MvdHh4OS90eHg5YWNsYy5jCmluZGV4IDkzOGE1OGEuLmVmZWQ2NGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy90eHg5L3R4eDlhY2xjLmMKKysrIGIvc291bmQvc29jL3R4eDkvdHh4OWFjbGMuYwpAQCAtMjk3LDE1ICsyOTcsMTcgQEAKIHN0YXRpYyBib29sIGZpbHRlcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKnBhcmFtKQogewogCXN0cnVjdCB0eHg5YWNsY19kbWFkYXRhICpkbWFkYXRhID0gcGFyYW07Ci0JY2hhciBkZXZuYW1lWzIwICsgMl07IC8qIEZJWE1FOiBvbGQgQlVTX0lEX1NJWkUgKyAyICovCisJY2hhciAqZGV2bmFtZTsKKwlib29sIGZvdW5kID0gZmFsc2U7CiAKLQlzbnByaW50ZihkZXZuYW1lLCBzaXplb2YoZGV2bmFtZSksICIlcy4lZCIsIGRtYWRhdGEtPmRtYV9yZXMtPm5hbWUsCisJZGV2bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXMuJWQiLCBkbWFkYXRhLT5kbWFfcmVzLT5uYW1lLAogCQkoaW50KWRtYWRhdGEtPmRtYV9yZXMtPnN0YXJ0KTsKIAlpZiAoc3RyY21wKGRldl9uYW1lKGNoYW4tPmRldmljZS0+ZGV2KSwgZGV2bmFtZSkgPT0gMCkgewogCQljaGFuLT5wcml2YXRlID0gJmRtYWRhdGEtPmRtYV9zbGF2ZTsKLQkJcmV0dXJuIHRydWU7CisJCWZvdW5kID0gdHJ1ZTsKIAl9Ci0JcmV0dXJuIGZhbHNlOworCWtmcmVlKGRldm5hbWUpOworCXJldHVybiBmb3VuZDsKIH0KIAogc3RhdGljIGludCB0eHg5YWNsY19kbWFfaW5pdChzdHJ1Y3QgdHh4OWFjbGNfc29jX2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvc291bmQvc291bmRfY29yZS5jIGIvc291bmQvc291bmRfY29yZS5jCmluZGV4IGE0MWY4YjEuLmJiNGI4OGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvdW5kX2NvcmUuYworKysgYi9zb3VuZC9zb3VuZF9jb3JlLmMKQEAgLTEyOCw2ICsxMjgsNDYgQEAKICNlbmRpZgogCiAvKgorICogQnkgZGVmYXVsdCwgT1NTIHNvdW5kX2NvcmUgY2xhaW1zIGZ1bGwgbGVnYWN5IG1pbm9yIHJhbmdlICgwLTI1NSkKKyAqIG9mIFNPVU5EX01BSk9SIHRvIHRyYXAgb3BlbiBhdHRlbXB0cyB0byBhbnkgc291bmQgbWlub3IgYW5kCisgKiByZXF1ZXN0cyBtb2R1bGVzIHVzaW5nIGN1c3RvbSBzb3VuZC1zbG90L3NlcnZpY2UtKiBtb2R1bGUgYWxpYXNlcy4KKyAqIFRoZSBvbmx5IGJlbmVmaXQgb2YgZG9pbmcgdGhpcyBpcyBhbGxvd2luZyB1c2Ugb2YgY3VzdG9tIG1vZHVsZQorICogYWxpYXNlcyBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBjaGFyLW1ham9yLSogb25lcy4gIFRoaXMgYmVoYXZpb3IKKyAqIHByZXZlbnRzIGFsdGVybmF0aXZlIE9TUyBpbXBsZW1lbnRhdGlvbiBhbmQgaXMgc2NoZWR1bGVkIHRvIGJlCisgKiByZW1vdmVkLgorICoKKyAqIENPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTSBhbmQgc291bmRjb3JlLnByZWNsYWltX29zcyBrZXJuZWwKKyAqIHBhcmFtZXRlciBhcmUgYWRkZWQgdG8gYWxsb3cgZGlzdHJvcyBhbmQgZGV2ZWxvcGVycyB0byB0cnkgYW5kCisgKiBzd2l0Y2ggdG8gYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb25zIHdpdGhvdXQgbmVlZGluZyB0byByZWJ1aWxkCisgKiB0aGUga2VybmVsIGluIHRoZSBtZWFudGltZS4gIElmIHByZWNsYWltX29zcyBpcyBub24temVybywgdGhlCisgKiBrZXJuZWwgd2lsbCBiZWhhdmUgdGhlIHNhbWUgYXMgYmVmb3JlLiAgQWxsIFNPVU5EX01BSk9SIG1pbm9ycyBhcmUKKyAqIHByZWNsYWltZWQgYW5kIHRoZSBjdXN0b20gbW9kdWxlIGFsaWFzZXMgYWxvbmcgd2l0aCBzdGFuZGFyZCBjaHJkZXYKKyAqIG9uZXMgYXJlIGVtaXR0ZWQgaWYgYSBtaXNzaW5nIGRldmljZSBpcyBvcGVuZWQuICBJZiBwcmVjbGFpbV9vc3MgaXMKKyAqIHplcm8sIHNvdW5kX2NvcmUgb25seSBncmFicyB3aGF0J3MgYWN0dWFsbHkgaW4gdXNlIGFuZCBmb3IgbWlzc2luZworICogZGV2aWNlcyBvbmx5IHRoZSBzdGFuZGFyZCBjaHJkZXYgYWxpYXNlcyBhcmUgcmVxdWVzdGVkLgorICoKKyAqIEFsbCB0aGVzZSBjbHV0dGVycyBhcmUgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQgYWxvbmcgd2l0aAorICogc291bmQtc2xvdC9zZXJ2aWNlLSogbW9kdWxlIGFsaWFzZXMuICBQbGVhc2UgdGFrZSBhIGxvb2sgYXQKKyAqIGZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgZm9yIGRldGFpbHMuCisgKi8KKyNpZmRlZiBDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU0KK3N0YXRpYyBpbnQgcHJlY2xhaW1fb3NzID0gMTsKKyNlbHNlCitzdGF0aWMgaW50IHByZWNsYWltX29zcyA9IDA7CisjZW5kaWYKKworbW9kdWxlX3BhcmFtKHByZWNsYWltX29zcywgaW50LCAwNDQ0KTsKKworc3RhdGljIGludCBzb3VuZGNvcmVfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNvdW5kY29yZV9mb3BzID0KK3sKKwkvKiBXZSBtdXN0IGhhdmUgYW4gb3duZXIgb3IgdGhlIG1vZHVsZSBsb2NraW5nIGZhaWxzICovCisJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JPSBzb3VuZGNvcmVfb3BlbiwKK307CisKKy8qCiAgKglMb3cgbGV2ZWwgbGlzdCBvcGVyYXRvci4gU2NhbiB0aGUgb3JkZXJlZCBsaXN0LCBmaW5kIGEgaG9sZSBhbmQKICAqCWpvaW4gaW50byBpdC4gQ2FsbGVkIHdpdGggdGhlIGxvY2sgYXNzZXJ0ZWQKICAqLwpAQCAtMjE5LDggKzI1OSw5IEBACiAKIAlpZiAoIXMpCiAJCXJldHVybiAtRU5PTUVNOwotCQkKKwogCXNwaW5fbG9jaygmc291bmRfbG9hZGVyX2xvY2spOworcmV0cnk6CiAJciA9IF9fc291bmRfaW5zZXJ0X3VuaXQocywgbGlzdCwgZm9wcywgaW5kZXgsIGxvdywgdG9wKTsKIAlzcGluX3VubG9jaygmc291bmRfbG9hZGVyX2xvY2spOwogCQpAQCAtMjMxLDExICsyNzIsMzEgQEAKIAllbHNlCiAJCXNwcmludGYocy0+bmFtZSwgInNvdW5kLyVzJWQiLCBuYW1lLCByIC8gU09VTkRfU1RFUCk7CiAKKwlpZiAoIXByZWNsYWltX29zcykgeworCQkvKgorCQkgKiBTb21ldGhpbmcgZWxzZSBtaWdodCBoYXZlIGdyYWJiZWQgdGhlIG1pbm9yLiAgSWYKKwkJICogZmlyc3QgZnJlZSBzbG90IGlzIHJlcXVlc3RlZCwgcmVzY2FuIHdpdGggQGxvdyBzZXQKKwkJICogdG8gdGhlIG5leHQgdW5pdDsgb3RoZXJ3aXNlLCAtRUJVU1kuCisJCSAqLworCQlyID0gX19yZWdpc3Rlcl9jaHJkZXYoU09VTkRfTUFKT1IsIHMtPnVuaXRfbWlub3IsIDEsIHMtPm5hbWUsCisJCQkJICAgICAgJnNvdW5kY29yZV9mb3BzKTsKKwkJaWYgKHIgPCAwKSB7CisJCQlzcGluX2xvY2soJnNvdW5kX2xvYWRlcl9sb2NrKTsKKwkJCV9fc291bmRfcmVtb3ZlX3VuaXQobGlzdCwgcy0+dW5pdF9taW5vcik7CisJCQlpZiAoaW5kZXggPCAwKSB7CisJCQkJbG93ID0gcy0+dW5pdF9taW5vciArIFNPVU5EX1NURVA7CisJCQkJZ290byByZXRyeTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZzb3VuZF9sb2FkZXJfbG9jayk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCiAJZGV2aWNlX2NyZWF0ZShzb3VuZF9jbGFzcywgZGV2LCBNS0RFVihTT1VORF9NQUpPUiwgcy0+dW5pdF9taW5vciksCiAJCSAgICAgIE5VTEwsIHMtPm5hbWUrNik7Ci0JcmV0dXJuIHI7CisJcmV0dXJuIHMtPnVuaXRfbWlub3I7CiAKLSBmYWlsOgorZmFpbDoKIAlrZnJlZShzKTsKIAlyZXR1cm4gcjsKIH0KQEAgLTI1NCw2ICszMTUsOSBAQAogCXAgPSBfX3NvdW5kX3JlbW92ZV91bml0KGxpc3QsIHVuaXQpOwogCXNwaW5fdW5sb2NrKCZzb3VuZF9sb2FkZXJfbG9jayk7CiAJaWYgKHApIHsKKwkJaWYgKCFwcmVjbGFpbV9vc3MpCisJCQlfX3VucmVnaXN0ZXJfY2hyZGV2KFNPVU5EX01BSk9SLCBwLT51bml0X21pbm9yLCAxLAorCQkJCQkgICAgcC0+bmFtZSk7CiAJCWRldmljZV9kZXN0cm95KHNvdW5kX2NsYXNzLCBNS0RFVihTT1VORF9NQUpPUiwgcC0+dW5pdF9taW5vcikpOwogCQlrZnJlZShwKTsKIAl9CkBAIC00OTEsMTkgKzU1NSw2IEBACiAKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9zb3VuZF9kc3ApOwogCi0vKgotICoJTm93IG91ciBmaWxlIG9wZXJhdGlvbnMKLSAqLwotCi1zdGF0aWMgaW50IHNvdW5kY29yZV9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc291bmRjb3JlX2ZvcHM9Ci17Ci0JLyogV2UgbXVzdCBoYXZlIGFuIG93bmVyIG9yIHRoZSBtb2R1bGUgbG9ja2luZyBmYWlscyAqLwotCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCS5vcGVuCT0gc291bmRjb3JlX29wZW4sCi19OwotCiBzdGF0aWMgc3RydWN0IHNvdW5kX3VuaXQgKl9fbG9va19mb3JfdW5pdChpbnQgY2hhaW4sIGludCB1bml0KQogewogCXN0cnVjdCBzb3VuZF91bml0ICpzOwpAQCAtNTM5LDggKzU5MCw5IEBACiAJcyA9IF9fbG9va19mb3JfdW5pdChjaGFpbiwgdW5pdCk7CiAJaWYgKHMpCiAJCW5ld19mb3BzID0gZm9wc19nZXQocy0+dW5pdF9mb3BzKTsKLQlpZiAoIW5ld19mb3BzKSB7CisJaWYgKHByZWNsYWltX29zcyAmJiAhbmV3X2ZvcHMpIHsKIAkJc3Bpbl91bmxvY2soJnNvdW5kX2xvYWRlcl9sb2NrKTsKKwogCQkvKgogCQkgKiAgUGxlYXNlLCBkb24ndCBjaGFuZ2UgdGhpcyBvcmRlciBvciBjb2RlLgogCQkgKiAgRm9yIEFMU0Egc2xvdCBtZWFucyBzb3VuZGNhcmQgYW5kIE9TUyBlbXVsYXRpb24gY29kZQpAQCAtNTUwLDYgKzYwMiwxNyBAQAogCQkgKi8KIAkJcmVxdWVzdF9tb2R1bGUoInNvdW5kLXNsb3QtJWkiLCB1bml0Pj40KTsKIAkJcmVxdWVzdF9tb2R1bGUoInNvdW5kLXNlcnZpY2UtJWktJWkiLCB1bml0Pj40LCBjaGFpbik7CisKKwkJLyoKKwkJICogc291bmQtc2xvdC9zZXJ2aWNlLSogbW9kdWxlIGFsaWFzZXMgYXJlIHNjaGVkdWxlZAorCQkgKiBmb3IgcmVtb3ZhbCBpbiBmYXZvciBvZiB0aGUgc3RhbmRhcmQgY2hhci1tYWpvci0qCisJCSAqIG1vZHVsZSBhbGlhc2VzLiAgRm9yIHRoZSB0aW1lIGJlaW5nLCBnZW5lcmF0ZSBib3RoCisJCSAqIHRoZSBsZWdhY3kgYW5kIHN0YW5kYXJkIG1vZHVsZSBhbGlhc2VzIHRvIGVhc2UKKwkJICogdHJhbnNpdGlvbi4KKwkJICovCisJCWlmIChyZXF1ZXN0X21vZHVsZSgiY2hhci1tYWpvci0lZC0lZCIsIFNPVU5EX01BSk9SLCB1bml0KSA+IDApCisJCQlyZXF1ZXN0X21vZHVsZSgiY2hhci1tYWpvci0lZCIsIFNPVU5EX01BSk9SKTsKKwogCQlzcGluX2xvY2soJnNvdW5kX2xvYWRlcl9sb2NrKTsKIAkJcyA9IF9fbG9va19mb3JfdW5pdChjaGFpbiwgdW5pdCk7CiAJCWlmIChzKQpAQCAtNTkzLDcgKzY1Niw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfb3NzX3NvdW5kY29yZSh2b2lkKQogewotCWlmIChyZWdpc3Rlcl9jaHJkZXYoU09VTkRfTUFKT1IsICJzb3VuZCIsICZzb3VuZGNvcmVfZm9wcyk9PS0xKSB7CisJaWYgKHByZWNsYWltX29zcyAmJgorCSAgICByZWdpc3Rlcl9jaHJkZXYoU09VTkRfTUFKT1IsICJzb3VuZCIsICZzb3VuZGNvcmVfZm9wcykgPT0gLTEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzb3VuZGNvcmU6IHNvdW5kIGRldmljZSBhbHJlYWR5IGluIHVzZS5cbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5jIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKaW5kZXggNDRiOWNkYy4uOGRiMDM3NCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmMKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKQEAgLTEwODMsNiArMTA4Myw4IEBACiAJfSBlbHNlCiAJCXVyYl9wYWNrcyA9IDE7CiAJdXJiX3BhY2tzICo9IHBhY2tzX3Blcl9tczsKKwlpZiAoc3Vicy0+c3luY3BpcGUpCisJCXVyYl9wYWNrcyA9IG1pbih1cmJfcGFja3MsIDFVIDw8IHN1YnMtPnN5bmNpbnRlcnZhbCk7CiAKIAkvKiBkZWNpZGUgaG93IG1hbnkgcGFja2V0cyB0byBiZSB1c2VkICovCiAJaWYgKGlzX3BsYXliYWNrKSB7CkBAIC0yMTI0LDggKzIxMjYsOCBAQAogCQlmcCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGF1ZGlvZm9ybWF0LCBsaXN0KTsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiICBJbnRlcmZhY2UgJWRcbiIsIGZwLT5pZmFjZSk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBBbHRzZXQgJWRcbiIsIGZwLT5hbHRzZXR0aW5nKTsKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEZvcm1hdDogJSN4ICglZCBiaXRzKVxuIiwKLQkJCSAgICBmcC0+Zm9ybWF0LCBzbmRfcGNtX2Zvcm1hdF93aWR0aChmcC0+Zm9ybWF0KSk7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBGb3JtYXQ6ICVzXG4iLAorCQkJICAgIHNuZF9wY21fZm9ybWF0X25hbWUoZnAtPmZvcm1hdCkpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgQ2hhbm5lbHM6ICVkXG4iLCBmcC0+Y2hhbm5lbHMpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgRW5kcG9pbnQ6ICVkICVzICglcylcbiIsCiAJCQkgICAgZnAtPmVuZHBvaW50ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLLApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1pZGkuYyBiL3NvdW5kL3VzYi91c2JtaWRpLmMKaW5kZXggMmZiMzVjYy4uMGVmZjE5YyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1pZGkuYworKysgYi9zb3VuZC91c2IvdXNibWlkaS5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CiAjaW5jbHVkZSA8c291bmQvYXNlcXVlbmNlci5oPgpAQCAtNjIsNiArNjMsOSBAQAogICovCiAjZGVmaW5lIEVSUk9SX0RFTEFZX0pJRkZJRVMgKEhaIC8gMTApCiAKKyNkZWZpbmUgT1VUUFVUX1VSQlMgNworI2RlZmluZSBJTlBVVF9VUkJTIDcKKwogCiBNT0RVTEVfQVVUSE9SKCJDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVVNCIEF1ZGlvL01JREkgaGVscGVyIG1vZHVsZSIpOwpAQCAtOTAsNyArOTQsNyBAQAogCiBzdHJ1Y3QgdXNiX3Byb3RvY29sX29wcyB7CiAJdm9pZCAoKmlucHV0KShzdHJ1Y3Qgc25kX3VzYl9taWRpX2luX2VuZHBvaW50KiwgdWludDhfdCosIGludCk7Ci0Jdm9pZCAoKm91dHB1dCkoc3RydWN0IHNuZF91c2JfbWlkaV9vdXRfZW5kcG9pbnQqKTsKKwl2b2lkICgqb3V0cHV0KShzdHJ1Y3Qgc25kX3VzYl9taWRpX291dF9lbmRwb2ludCAqZXAsIHN0cnVjdCB1cmIgKnVyYik7CiAJdm9pZCAoKm91dHB1dF9wYWNrZXQpKHN0cnVjdCB1cmIqLCB1aW50OF90LCB1aW50OF90LCB1aW50OF90LCB1aW50OF90KTsKIAl2b2lkICgqaW5pdF9vdXRfZW5kcG9pbnQpKHN0cnVjdCBzbmRfdXNiX21pZGlfb3V0X2VuZHBvaW50Kik7CiAJdm9pZCAoKmZpbmlzaF9vdXRfZW5kcG9pbnQpKHN0cnVjdCBzbmRfdXNiX21pZGlfb3V0X2VuZHBvaW50Kik7CkBAIC0xMTYsMTEgKzEyMCwxNSBAQAogCiBzdHJ1Y3Qgc25kX3VzYl9taWRpX291dF9lbmRwb2ludCB7CiAJc3RydWN0IHNuZF91c2JfbWlkaSogdW1pZGk7Ci0Jc3RydWN0IHVyYiogdXJiOwotCWludCB1cmJfYWN0aXZlOworCXN0cnVjdCBvdXRfdXJiX2NvbnRleHQgeworCQlzdHJ1Y3QgdXJiICp1cmI7CisJCXN0cnVjdCBzbmRfdXNiX21pZGlfb3V0X2VuZHBvaW50ICplcDsKKwl9IHVyYnNbT1VUUFVUX1VSQlNdOworCXVuc2lnbmVkIGludCBhY3RpdmVfdXJiczsKKwl1bnNpZ25lZCBpbnQgZHJhaW5fdXJiczsKIAlpbnQgbWF4X3RyYW5zZmVyOwkJLyogc2l6ZSBvZiB1cmIgYnVmZmVyICovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7Ci0KKwl1bnNpZ25lZCBpbnQgbmV4dF91cmI7CiAJc3BpbmxvY2tfdCBidWZmZXJfbG9jazsKIAogCXN0cnVjdCB1c2JtaWRpX291dF9wb3J0IHsKQEAgLTEzOSwxMSArMTQ3LDEzIEBACiAJCXVpbnQ4X3QgZGF0YVsyXTsKIAl9IHBvcnRzWzB4MTBdOwogCWludCBjdXJyZW50X3BvcnQ7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCBkcmFpbl93YWl0OwogfTsKIAogc3RydWN0IHNuZF91c2JfbWlkaV9pbl9lbmRwb2ludCB7CiAJc3RydWN0IHNuZF91c2JfbWlkaSogdW1pZGk7Ci0Jc3RydWN0IHVyYiogdXJiOworCXN0cnVjdCB1cmIqIHVyYnNbSU5QVVRfVVJCU107CiAJc3RydWN0IHVzYm1pZGlfaW5fcG9ydCB7CiAJCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAkJdTggcnVubmluZ19zdGF0dXNfbGVuZ3RoOwpAQCAtMjUxLDEwICsyNjEsMTcgQEAKIAogc3RhdGljIHZvaWQgc25kX3VzYm1pZGlfb3V0X3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiKiB1cmIpCiB7Ci0Jc3RydWN0IHNuZF91c2JfbWlkaV9vdXRfZW5kcG9pbnQqIGVwID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBvdXRfdXJiX2NvbnRleHQgKmNvbnRleHQgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHNuZF91c2JfbWlkaV9vdXRfZW5kcG9pbnQqIGVwID0gY29udGV4dC0+ZXA7CisJdW5zaWduZWQgaW50IHVyYl9pbmRleDsKIAogCXNwaW5fbG9jaygmZXAtPmJ1ZmZlcl9sb2NrKTsKLQllcC0+dXJiX2FjdGl2ZSA9IDA7CisJdXJiX2luZGV4ID0gY29udGV4dCAtIGVwLT51cmJzOworCWVwLT5hY3RpdmVfdXJicyAmPSB+KDEgPDwgdXJiX2luZGV4KTsKKwlpZiAodW5saWtlbHkoZXAtPmRyYWluX3VyYnMpKSB7CisJCWVwLT5kcmFpbl91cmJzICY9IH4oMSA8PCB1cmJfaW5kZXgpOworCQl3YWtlX3VwKCZlcC0+ZHJhaW5fd2FpdCk7CisJfQogCXNwaW5fdW5sb2NrKCZlcC0+YnVmZmVyX2xvY2spOwogCWlmICh1cmItPnN0YXR1cyA8IDApIHsKIAkJaW50IGVyciA9IHNuZF91c2JtaWRpX3VyYl9lcnJvcih1cmItPnN0YXR1cyk7CkBAIC0yNzQsMjQgKzI5MSwzOCBAQAogICovCiBzdGF0aWMgdm9pZCBzbmRfdXNibWlkaV9kb19vdXRwdXQoc3RydWN0IHNuZF91c2JfbWlkaV9vdXRfZW5kcG9pbnQqIGVwKQogewotCXN0cnVjdCB1cmIqIHVyYiA9IGVwLT51cmI7CisJdW5zaWduZWQgaW50IHVyYl9pbmRleDsKKwlzdHJ1Y3QgdXJiKiB1cmI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQlpZiAoZXAtPnVyYl9hY3RpdmUgfHwgZXAtPnVtaWRpLT5jaGlwLT5zaHV0ZG93bikgeworCWlmIChlcC0+dW1pZGktPmNoaXAtPnNodXRkb3duKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5idWZmZXJfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCi0JdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMDsKLQllcC0+dW1pZGktPnVzYl9wcm90b2NvbF9vcHMtPm91dHB1dChlcCk7CisJdXJiX2luZGV4ID0gZXAtPm5leHRfdXJiOworCWZvciAoOzspIHsKKwkJaWYgKCEoZXAtPmFjdGl2ZV91cmJzICYgKDEgPDwgdXJiX2luZGV4KSkpIHsKKwkJCXVyYiA9IGVwLT51cmJzW3VyYl9pbmRleF0udXJiOworCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMDsKKwkJCWVwLT51bWlkaS0+dXNiX3Byb3RvY29sX29wcy0+b3V0cHV0KGVwLCB1cmIpOworCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9PSAwKQorCQkJCWJyZWFrOwogCi0JaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDApIHsKLQkJZHVtcF91cmIoInNlbmRpbmciLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwotCQl1cmItPmRldiA9IGVwLT51bWlkaS0+Y2hpcC0+ZGV2OwotCQllcC0+dXJiX2FjdGl2ZSA9IHNuZF91c2JtaWRpX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSA+PSAwOworCQkJZHVtcF91cmIoInNlbmRpbmciLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJCXVyYi0+ZGV2ID0gZXAtPnVtaWRpLT5jaGlwLT5kZXY7CisJCQlpZiAoc25kX3VzYm1pZGlfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpIDwgMCkKKwkJCQlicmVhazsKKwkJCWVwLT5hY3RpdmVfdXJicyB8PSAxIDw8IHVyYl9pbmRleDsKKwkJfQorCQlpZiAoKyt1cmJfaW5kZXggPj0gT1VUUFVUX1VSQlMpCisJCQl1cmJfaW5kZXggPSAwOworCQlpZiAodXJiX2luZGV4ID09IGVwLT5uZXh0X3VyYikKKwkJCWJyZWFrOwogCX0KKwllcC0+bmV4dF91cmIgPSB1cmJfaW5kZXg7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTMwNiw3ICszMzcsNyBAQAogc3RhdGljIHZvaWQgc25kX3VzYm1pZGlfZXJyb3JfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBzbmRfdXNiX21pZGkgKnVtaWRpID0gKHN0cnVjdCBzbmRfdXNiX21pZGkgKilkYXRhOwotCWludCBpOworCXVuc2lnbmVkIGludCBpLCBqOwogCiAJc3Bpbl9sb2NrKCZ1bWlkaS0+ZGlzY19sb2NrKTsKIAlpZiAodW1pZGktPmRpc2Nvbm5lY3RlZCkgewpAQCAtMzE3LDggKzM0OCwxMCBAQAogCQlzdHJ1Y3Qgc25kX3VzYl9taWRpX2luX2VuZHBvaW50ICppbiA9IHVtaWRpLT5lbmRwb2ludHNbaV0uaW47CiAJCWlmIChpbiAmJiBpbi0+ZXJyb3JfcmVzdWJtaXQpIHsKIAkJCWluLT5lcnJvcl9yZXN1Ym1pdCA9IDA7Ci0JCQlpbi0+dXJiLT5kZXYgPSB1bWlkaS0+Y2hpcC0+ZGV2OwotCQkJc25kX3VzYm1pZGlfc3VibWl0X3VyYihpbi0+dXJiLCBHRlBfQVRPTUlDKTsKKwkJCWZvciAoaiA9IDA7IGogPCBJTlBVVF9VUkJTOyArK2opIHsKKwkJCQlpbi0+dXJic1tqXS0+ZGV2ID0gdW1pZGktPmNoaXAtPmRldjsKKwkJCQlzbmRfdXNibWlkaV9zdWJtaXRfdXJiKGluLT51cmJzW2pdLCBHRlBfQVRPTUlDKTsKKwkJCX0KIAkJfQogCQlpZiAodW1pZGktPmVuZHBvaW50c1tpXS5vdXQpCiAJCQlzbmRfdXNibWlkaV9kb19vdXRwdXQodW1pZGktPmVuZHBvaW50c1tpXS5vdXQpOwpAQCAtMzMwLDEzICszNjMsMTQgQEAKIHN0YXRpYyBpbnQgc2VuZF9idWxrX3N0YXRpY19kYXRhKHN0cnVjdCBzbmRfdXNiX21pZGlfb3V0X2VuZHBvaW50KiBlcCwKIAkJCQkgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCXZvaWQgKmJ1ZiA9IGttZW1kdXAoZGF0YSwgbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAJZHVtcF91cmIoInNlbmRpbmciLCBidWYsIGxlbik7Ci0JZXJyID0gdXNiX2J1bGtfbXNnKGVwLT51bWlkaS0+Y2hpcC0+ZGV2LCBlcC0+dXJiLT5waXBlLCBidWYsIGxlbiwKLQkJCSAgIE5VTEwsIDI1MCk7CisJaWYgKGVwLT51cmJzWzBdLnVyYikKKwkJZXJyID0gdXNiX2J1bGtfbXNnKGVwLT51bWlkaS0+Y2hpcC0+ZGV2LCBlcC0+dXJic1swXS51cmItPnBpcGUsCisJCQkJICAgYnVmLCBsZW4sIE5VTEwsIDI1MCk7CiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTU0LDkgKzU4OCw5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzbmRfdXNibWlkaV9zdGFuZGFyZF9vdXRwdXQoc3RydWN0IHNuZF91c2JfbWlkaV9vdXRfZW5kcG9pbnQqIGVwKQorc3RhdGljIHZvaWQgc25kX3VzYm1pZGlfc3RhbmRhcmRfb3V0cHV0KHN0cnVjdCBzbmRfdXNiX21pZGlfb3V0X2VuZHBvaW50KiBlcCwKKwkJCQkJc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCB1cmIqIHVyYiA9IGVwLT51cmI7CiAJaW50IHA7CiAKIAkvKiBGSVhNRTogbG93ZXItbnVtYmVyZWQgcG9ydHMgY2FuIHN0YXJ2ZSBoaWdoZXItbnVtYmVyZWQgcG9ydHMgKi8KQEAgLTYxMywxNCArNjQ3LDE1IEBACiAJc25kX3VzYm1pZGlfaW5wdXRfZGF0YShlcCwgMCwgJmJ1ZmZlclsyXSwgYnVmZmVyWzBdIC0gMSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNuZF91c2JtaWRpX25vdmF0aW9uX291dHB1dChzdHJ1Y3Qgc25kX3VzYl9taWRpX291dF9lbmRwb2ludCogZXApCitzdGF0aWMgdm9pZCBzbmRfdXNibWlkaV9ub3ZhdGlvbl9vdXRwdXQoc3RydWN0IHNuZF91c2JfbWlkaV9vdXRfZW5kcG9pbnQqIGVwLAorCQkJCQlzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJdWludDhfdCogdHJhbnNmZXJfYnVmZmVyOwogCWludCBjb3VudDsKIAogCWlmICghZXAtPnBvcnRzWzBdLmFjdGl2ZSkKIAkJcmV0dXJuOwotCXRyYW5zZmVyX2J1ZmZlciA9IGVwLT51cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl0cmFuc2Zlcl9idWZmZXIgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAljb3VudCA9IHNuZF9yYXdtaWRpX3RyYW5zbWl0KGVwLT5wb3J0c1swXS5zdWJzdHJlYW0sCiAJCQkJICAgICAmdHJhbnNmZXJfYnVmZmVyWzJdLAogCQkJCSAgICAgZXAtPm1heF90cmFuc2ZlciAtIDIpOwpAQCAtNjMwLDcgKzY2NSw3IEBACiAJfQogCXRyYW5zZmVyX2J1ZmZlclswXSA9IDA7CiAJdHJhbnNmZXJfYnVmZmVyWzFdID0gY291bnQ7Ci0JZXAtPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDIgKyBjb3VudDsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAyICsgY291bnQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3Byb3RvY29sX29wcyBzbmRfdXNibWlkaV9ub3ZhdGlvbl9vcHMgPSB7CkBAIC02NDgsMjAgKzY4MywyMSBAQAogCXNuZF91c2JtaWRpX2lucHV0X2RhdGEoZXAsIDAsIGJ1ZmZlciwgYnVmZmVyX2xlbmd0aCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNuZF91c2JtaWRpX3Jhd19vdXRwdXQoc3RydWN0IHNuZF91c2JfbWlkaV9vdXRfZW5kcG9pbnQqIGVwKQorc3RhdGljIHZvaWQgc25kX3VzYm1pZGlfcmF3X291dHB1dChzdHJ1Y3Qgc25kX3VzYl9taWRpX291dF9lbmRwb2ludCogZXAsCisJCQkJICAgc3RydWN0IHVyYiAqdXJiKQogewogCWludCBjb3VudDsKIAogCWlmICghZXAtPnBvcnRzWzBdLmFjdGl2ZSkKIAkJcmV0dXJuOwogCWNvdW50ID0gc25kX3Jhd21pZGlfdHJhbnNtaXQoZXAtPnBvcnRzWzBdLnN1YnN0cmVhbSwKLQkJCQkgICAgIGVwLT51cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAogCQkJCSAgICAgZXAtPm1heF90cmFuc2Zlcik7CiAJaWYgKGNvdW50IDwgMSkgewogCQllcC0+cG9ydHNbMF0uYWN0aXZlID0gMDsKIAkJcmV0dXJuOwogCX0KLQllcC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gY291bnQ7CisJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gY291bnQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3Byb3RvY29sX29wcyBzbmRfdXNibWlkaV9yYXdfb3BzID0gewpAQCAtNjgxLDIzICs3MTcsMjUgQEAKIAkJc25kX3VzYm1pZGlfaW5wdXRfZGF0YShlcCwgMCwgYnVmZmVyLCBidWZmZXJfbGVuZ3RoKTsKIH0KIAotc3RhdGljIHZvaWQgc25kX3VzYm1pZGlfdXMxMjJsX291dHB1dChzdHJ1Y3Qgc25kX3VzYl9taWRpX291dF9lbmRwb2ludCAqZXApCitzdGF0aWMgdm9pZCBzbmRfdXNibWlkaV91czEyMmxfb3V0cHV0KHN0cnVjdCBzbmRfdXNiX21pZGlfb3V0X2VuZHBvaW50ICplcCwKKwkJCQkgICAgICBzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJaW50IGNvdW50OwogCiAJaWYgKCFlcC0+cG9ydHNbMF0uYWN0aXZlKQogCQlyZXR1cm47Ci0JY291bnQgPSBlcC0+dXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIID8gMSA6IDI7CisJY291bnQgPSBzbmRfdXNiX2dldF9zcGVlZChlcC0+dW1pZGktPmNoaXAtPmRldikgPT0gVVNCX1NQRUVEX0hJR0gKKwkJPyAxIDogMjsKIAljb3VudCA9IHNuZF9yYXdtaWRpX3RyYW5zbWl0KGVwLT5wb3J0c1swXS5zdWJzdHJlYW0sCi0JCQkJICAgICBlcC0+dXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkJCQkgICAgIGNvdW50KTsKIAlpZiAoY291bnQgPCAxKSB7CiAJCWVwLT5wb3J0c1swXS5hY3RpdmUgPSAwOwogCQlyZXR1cm47CiAJfQogCi0JbWVtc2V0KGVwLT51cmItPnRyYW5zZmVyX2J1ZmZlciArIGNvdW50LCAweEZELCA5IC0gY291bnQpOwotCWVwLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBjb3VudDsKKwltZW1zZXQodXJiLT50cmFuc2Zlcl9idWZmZXIgKyBjb3VudCwgMHhGRCwgOSAtIGNvdW50KTsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBjb3VudDsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfcHJvdG9jb2xfb3BzIHNuZF91c2JtaWRpXzEyMmxfb3BzID0gewpAQCAtNzg2LDEwICs4MjQsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNuZF91c2JtaWRpX2VtYWdpY19vdXRwdXQoc3RydWN0IHNuZF91c2JfbWlkaV9vdXRfZW5kcG9pbnQqIGVwKQorc3RhdGljIHZvaWQgc25kX3VzYm1pZGlfZW1hZ2ljX291dHB1dChzdHJ1Y3Qgc25kX3VzYl9taWRpX291dF9lbmRwb2ludCogZXAsCisJCQkJICAgICAgc3RydWN0IHVyYiAqdXJiKQogewogCWludCBwb3J0MCA9IGVwLT5jdXJyZW50X3BvcnQ7Ci0JdWludDhfdCogYnVmID0gZXAtPnVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVpbnQ4X3QqIGJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCWludCBidWZfZnJlZSA9IGVwLT5tYXhfdHJhbnNmZXI7CiAJaW50IGxlbmd0aCwgaTsKIApAQCAtODI5LDcgKzg2OCw3IEBACiAJCSpidWYgPSAweGZmOwogCQktLWJ1Zl9mcmVlOwogCX0KLQllcC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gZXAtPm1heF90cmFuc2ZlciAtIGJ1Zl9mcmVlOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGVwLT5tYXhfdHJhbnNmZXIgLSBidWZfZnJlZTsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfcHJvdG9jb2xfb3BzIHNuZF91c2JtaWRpX2VtYWdpY19vcHMgPSB7CkBAIC04ODQsNiArOTIzLDM1IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzbmRfdXNibWlkaV9vdXRwdXRfZHJhaW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB1c2JtaWRpX291dF9wb3J0KiBwb3J0ID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF91c2JfbWlkaV9vdXRfZW5kcG9pbnQgKmVwID0gcG9ydC0+ZXA7CisJdW5zaWduZWQgaW50IGRyYWluX3VyYnM7CisJREVGSU5FX1dBSVQod2FpdCk7CisJbG9uZyB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyg1MCk7CisKKwkvKgorCSAqIFRoZSBzdWJzdHJlYW0gYnVmZmVyIGlzIGVtcHR5LCBidXQgc29tZSBkYXRhIG1pZ2h0IHN0aWxsIGJlIGluIHRoZQorCSAqIGN1cnJlbnRseSBhY3RpdmUgVVJCcywgc28gd2UgaGF2ZSB0byB3YWl0IGZvciB0aG9zZSB0byBjb21wbGV0ZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZlcC0+YnVmZmVyX2xvY2spOworCWRyYWluX3VyYnMgPSBlcC0+YWN0aXZlX3VyYnM7CisJaWYgKGRyYWluX3VyYnMpIHsKKwkJZXAtPmRyYWluX3VyYnMgfD0gZHJhaW5fdXJiczsKKwkJZG8geworCQkJcHJlcGFyZV90b193YWl0KCZlcC0+ZHJhaW5fd2FpdCwgJndhaXQsCisJCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmZXAtPmJ1ZmZlcl9sb2NrKTsKKwkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCQkJc3Bpbl9sb2NrX2lycSgmZXAtPmJ1ZmZlcl9sb2NrKTsKKwkJCWRyYWluX3VyYnMgJj0gZXAtPmRyYWluX3VyYnM7CisJCX0gd2hpbGUgKGRyYWluX3VyYnMgJiYgdGltZW91dCk7CisJCWZpbmlzaF93YWl0KCZlcC0+ZHJhaW5fd2FpdCwgJndhaXQpOworCX0KKwlzcGluX3VubG9ja19pcnEoJmVwLT5idWZmZXJfbG9jayk7Cit9CisKIHN0YXRpYyBpbnQgc25kX3VzYm1pZGlfaW5wdXRfb3BlbihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJcmV0dXJuIDA7CkBAIC05MDgsNiArOTc2LDcgQEAKIAkub3BlbiA9IHNuZF91c2JtaWRpX291dHB1dF9vcGVuLAogCS5jbG9zZSA9IHNuZF91c2JtaWRpX291dHB1dF9jbG9zZSwKIAkudHJpZ2dlciA9IHNuZF91c2JtaWRpX291dHB1dF90cmlnZ2VyLAorCS5kcmFpbiA9IHNuZF91c2JtaWRpX291dHB1dF9kcmFpbiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3Jhd21pZGlfb3BzIHNuZF91c2JtaWRpX2lucHV0X29wcyA9IHsKQEAgLTkxNiwxOSArOTg1LDI2IEBACiAJLnRyaWdnZXIgPSBzbmRfdXNibWlkaV9pbnB1dF90cmlnZ2VyCiB9OwogCitzdGF0aWMgdm9pZCBmcmVlX3VyYl9hbmRfYnVmZmVyKHN0cnVjdCBzbmRfdXNiX21pZGkgKnVtaWRpLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkJdW5zaWduZWQgaW50IGJ1ZmZlcl9sZW5ndGgpCit7CisJdXNiX2J1ZmZlcl9mcmVlKHVtaWRpLT5jaGlwLT5kZXYsIGJ1ZmZlcl9sZW5ndGgsCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9kbWEpOworCXVzYl9mcmVlX3VyYih1cmIpOworfQorCiAvKgogICogRnJlZXMgYW4gaW5wdXQgZW5kcG9pbnQuCiAgKiBNYXkgYmUgY2FsbGVkIHdoZW4gZXAgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgY29tcGxldGVseS4KICAqLwogc3RhdGljIHZvaWQgc25kX3VzYm1pZGlfaW5fZW5kcG9pbnRfZGVsZXRlKHN0cnVjdCBzbmRfdXNiX21pZGlfaW5fZW5kcG9pbnQqIGVwKQogewotCWlmIChlcC0+dXJiKSB7Ci0JCXVzYl9idWZmZXJfZnJlZShlcC0+dW1pZGktPmNoaXAtPmRldiwKLQkJCQllcC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJCWVwLT51cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCQllcC0+dXJiLT50cmFuc2Zlcl9kbWEpOwotCQl1c2JfZnJlZV91cmIoZXAtPnVyYik7Ci0JfQorCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IElOUFVUX1VSQlM7ICsraSkKKwkJaWYgKGVwLT51cmJzW2ldKQorCQkJZnJlZV91cmJfYW5kX2J1ZmZlcihlcC0+dW1pZGksIGVwLT51cmJzW2ldLAorCQkJCQkgICAgZXAtPnVyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCWtmcmVlKGVwKTsKIH0KIApAQCAtOTQzLDYgKzEwMTksNyBAQAogCXZvaWQqIGJ1ZmZlcjsKIAl1bnNpZ25lZCBpbnQgcGlwZTsKIAlpbnQgbGVuZ3RoOworCXVuc2lnbmVkIGludCBpOwogCiAJcmVwLT5pbiA9IE5VTEw7CiAJZXAgPSBremFsbG9jKHNpemVvZigqZXApLCBHRlBfS0VSTkVMKTsKQEAgLTk1MCwzMCArMTAyNywzNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAllcC0+dW1pZGkgPSB1bWlkaTsKIAotCWVwLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICghZXAtPnVyYikgewotCQlzbmRfdXNibWlkaV9pbl9lbmRwb2ludF9kZWxldGUoZXApOwotCQlyZXR1cm4gLUVOT01FTTsKKwlmb3IgKGkgPSAwOyBpIDwgSU5QVVRfVVJCUzsgKytpKSB7CisJCWVwLT51cmJzW2ldID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFlcC0+dXJic1tpXSkgeworCQkJc25kX3VzYm1pZGlfaW5fZW5kcG9pbnRfZGVsZXRlKGVwKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CiAJfQogCWlmIChlcF9pbmZvLT5pbl9pbnRlcnZhbCkKIAkJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKHVtaWRpLT5jaGlwLT5kZXYsIGVwX2luZm8tPmluX2VwKTsKIAllbHNlCiAJCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUodW1pZGktPmNoaXAtPmRldiwgZXBfaW5mby0+aW5fZXApOwogCWxlbmd0aCA9IHVzYl9tYXhwYWNrZXQodW1pZGktPmNoaXAtPmRldiwgcGlwZSwgMCk7Ci0JYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyh1bWlkaS0+Y2hpcC0+ZGV2LCBsZW5ndGgsIEdGUF9LRVJORUwsCi0JCQkJICAmZXAtPnVyYi0+dHJhbnNmZXJfZG1hKTsKLQlpZiAoIWJ1ZmZlcikgewotCQlzbmRfdXNibWlkaV9pbl9lbmRwb2ludF9kZWxldGUoZXApOwotCQlyZXR1cm4gLUVOT01FTTsKKwlmb3IgKGkgPSAwOyBpIDwgSU5QVVRfVVJCUzsgKytpKSB7CisJCWJ1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2ModW1pZGktPmNoaXAtPmRldiwgbGVuZ3RoLCBHRlBfS0VSTkVMLAorCQkJCQkgICZlcC0+dXJic1tpXS0+dHJhbnNmZXJfZG1hKTsKKwkJaWYgKCFidWZmZXIpIHsKKwkJCXNuZF91c2JtaWRpX2luX2VuZHBvaW50X2RlbGV0ZShlcCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlpZiAoZXBfaW5mby0+aW5faW50ZXJ2YWwpCisJCQl1c2JfZmlsbF9pbnRfdXJiKGVwLT51cmJzW2ldLCB1bWlkaS0+Y2hpcC0+ZGV2LAorCQkJCQkgcGlwZSwgYnVmZmVyLCBsZW5ndGgsCisJCQkJCSBzbmRfdXNibWlkaV9pbl91cmJfY29tcGxldGUsCisJCQkJCSBlcCwgZXBfaW5mby0+aW5faW50ZXJ2YWwpOworCQllbHNlCisJCQl1c2JfZmlsbF9idWxrX3VyYihlcC0+dXJic1tpXSwgdW1pZGktPmNoaXAtPmRldiwKKwkJCQkJICBwaXBlLCBidWZmZXIsIGxlbmd0aCwKKwkJCQkJICBzbmRfdXNibWlkaV9pbl91cmJfY29tcGxldGUsIGVwKTsKKwkJZXAtPnVyYnNbaV0tPnRyYW5zZmVyX2ZsYWdzID0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CiAJfQotCWlmIChlcF9pbmZvLT5pbl9pbnRlcnZhbCkKLQkJdXNiX2ZpbGxfaW50X3VyYihlcC0+dXJiLCB1bWlkaS0+Y2hpcC0+ZGV2LCBwaXBlLCBidWZmZXIsCi0JCQkJIGxlbmd0aCwgc25kX3VzYm1pZGlfaW5fdXJiX2NvbXBsZXRlLCBlcCwKLQkJCQkgZXBfaW5mby0+aW5faW50ZXJ2YWwpOwotCWVsc2UKLQkJdXNiX2ZpbGxfYnVsa191cmIoZXAtPnVyYiwgdW1pZGktPmNoaXAtPmRldiwgcGlwZSwgYnVmZmVyLAotCQkJCSAgbGVuZ3RoLCBzbmRfdXNibWlkaV9pbl91cmJfY29tcGxldGUsIGVwKTsKLQllcC0+dXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwogCiAJcmVwLT5pbiA9IGVwOwogCXJldHVybiAwOwpAQCAtOTk0LDEyICsxMDc3LDEyIEBACiAgKi8KIHN0YXRpYyB2b2lkIHNuZF91c2JtaWRpX291dF9lbmRwb2ludF9kZWxldGUoc3RydWN0IHNuZF91c2JfbWlkaV9vdXRfZW5kcG9pbnQqIGVwKQogewotCWlmIChlcC0+dXJiKSB7Ci0JCXVzYl9idWZmZXJfZnJlZShlcC0+dW1pZGktPmNoaXAtPmRldiwgZXAtPm1heF90cmFuc2ZlciwKLQkJCQllcC0+dXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQkJZXAtPnVyYi0+dHJhbnNmZXJfZG1hKTsKLQkJdXNiX2ZyZWVfdXJiKGVwLT51cmIpOwotCX0KKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBPVVRQVVRfVVJCUzsgKytpKQorCQlpZiAoZXAtPnVyYnNbaV0udXJiKQorCQkJZnJlZV91cmJfYW5kX2J1ZmZlcihlcC0+dW1pZGksIGVwLT51cmJzW2ldLnVyYiwKKwkJCQkJICAgIGVwLT5tYXhfdHJhbnNmZXIpOwogCWtmcmVlKGVwKTsKIH0KIApAQCAtMTAxMSw3ICsxMDk0LDcgQEAKIAkJCSAJCSAgIHN0cnVjdCBzbmRfdXNiX21pZGlfZW5kcG9pbnQqIHJlcCkKIHsKIAlzdHJ1Y3Qgc25kX3VzYl9taWRpX291dF9lbmRwb2ludCogZXA7Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IHBpcGU7CiAJdm9pZCogYnVmZmVyOwogCkBAIC0xMDIxLDM4ICsxMTA0LDQ2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWVwLT51bWlkaSA9IHVtaWRpOwogCi0JZXAtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlcC0+dXJiKSB7Ci0JCXNuZF91c2JtaWRpX291dF9lbmRwb2ludF9kZWxldGUoZXApOwotCQlyZXR1cm4gLUVOT01FTTsKKwlmb3IgKGkgPSAwOyBpIDwgT1VUUFVUX1VSQlM7ICsraSkgeworCQllcC0+dXJic1tpXS51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIWVwLT51cmJzW2ldLnVyYikgeworCQkJc25kX3VzYm1pZGlfb3V0X2VuZHBvaW50X2RlbGV0ZShlcCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQllcC0+dXJic1tpXS5lcCA9IGVwOwogCX0KIAlpZiAoZXBfaW5mby0+b3V0X2ludGVydmFsKQogCQlwaXBlID0gdXNiX3NuZGludHBpcGUodW1pZGktPmNoaXAtPmRldiwgZXBfaW5mby0+b3V0X2VwKTsKIAllbHNlCiAJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUodW1pZGktPmNoaXAtPmRldiwgZXBfaW5mby0+b3V0X2VwKTsKIAlpZiAodW1pZGktPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwYTkyLCAweDEwMjApKSAvKiBFU0kgTTRVICovCi0JCS8qIEZJWE1FOiB3ZSBuZWVkIG1vcmUgVVJCcyB0byBnZXQgcmVhc29uYWJsZSBiYW5kd2lkdGggaGVyZTogKi8KIAkJZXAtPm1heF90cmFuc2ZlciA9IDQ7CiAJZWxzZQogCQllcC0+bWF4X3RyYW5zZmVyID0gdXNiX21heHBhY2tldCh1bWlkaS0+Y2hpcC0+ZGV2LCBwaXBlLCAxKTsKLQlidWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jKHVtaWRpLT5jaGlwLT5kZXYsIGVwLT5tYXhfdHJhbnNmZXIsCi0JCQkJICBHRlBfS0VSTkVMLCAmZXAtPnVyYi0+dHJhbnNmZXJfZG1hKTsKLQlpZiAoIWJ1ZmZlcikgewotCQlzbmRfdXNibWlkaV9vdXRfZW5kcG9pbnRfZGVsZXRlKGVwKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJZm9yIChpID0gMDsgaSA8IE9VVFBVVF9VUkJTOyArK2kpIHsKKwkJYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyh1bWlkaS0+Y2hpcC0+ZGV2LAorCQkJCQkgIGVwLT5tYXhfdHJhbnNmZXIsIEdGUF9LRVJORUwsCisJCQkJCSAgJmVwLT51cmJzW2ldLnVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJaWYgKCFidWZmZXIpIHsKKwkJCXNuZF91c2JtaWRpX291dF9lbmRwb2ludF9kZWxldGUoZXApOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJaWYgKGVwX2luZm8tPm91dF9pbnRlcnZhbCkKKwkJCXVzYl9maWxsX2ludF91cmIoZXAtPnVyYnNbaV0udXJiLCB1bWlkaS0+Y2hpcC0+ZGV2LAorCQkJCQkgcGlwZSwgYnVmZmVyLCBlcC0+bWF4X3RyYW5zZmVyLAorCQkJCQkgc25kX3VzYm1pZGlfb3V0X3VyYl9jb21wbGV0ZSwKKwkJCQkJICZlcC0+dXJic1tpXSwgZXBfaW5mby0+b3V0X2ludGVydmFsKTsKKwkJZWxzZQorCQkJdXNiX2ZpbGxfYnVsa191cmIoZXAtPnVyYnNbaV0udXJiLCB1bWlkaS0+Y2hpcC0+ZGV2LAorCQkJCQkgIHBpcGUsIGJ1ZmZlciwgZXAtPm1heF90cmFuc2ZlciwKKwkJCQkJICBzbmRfdXNibWlkaV9vdXRfdXJiX2NvbXBsZXRlLAorCQkJCQkgICZlcC0+dXJic1tpXSk7CisJCWVwLT51cmJzW2ldLnVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKIAl9Ci0JaWYgKGVwX2luZm8tPm91dF9pbnRlcnZhbCkKLQkJdXNiX2ZpbGxfaW50X3VyYihlcC0+dXJiLCB1bWlkaS0+Y2hpcC0+ZGV2LCBwaXBlLCBidWZmZXIsCi0JCQkJIGVwLT5tYXhfdHJhbnNmZXIsIHNuZF91c2JtaWRpX291dF91cmJfY29tcGxldGUsCi0JCQkJIGVwLCBlcF9pbmZvLT5vdXRfaW50ZXJ2YWwpOwotCWVsc2UKLQkJdXNiX2ZpbGxfYnVsa191cmIoZXAtPnVyYiwgdW1pZGktPmNoaXAtPmRldiwKLQkJCQkgIHBpcGUsIGJ1ZmZlciwgZXAtPm1heF90cmFuc2ZlciwKLQkJCQkgIHNuZF91c2JtaWRpX291dF91cmJfY29tcGxldGUsIGVwKTsKLQllcC0+dXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwogCiAJc3Bpbl9sb2NrX2luaXQoJmVwLT5idWZmZXJfbG9jayk7CiAJdGFza2xldF9pbml0KCZlcC0+dGFza2xldCwgc25kX3VzYm1pZGlfb3V0X3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWVwKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlcC0+ZHJhaW5fd2FpdCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMHgxMDsgKytpKQogCQlpZiAoZXBfaW5mby0+b3V0X2NhYmxlcyAmICgxIDw8IGkpKSB7CkBAIC0xMDkwLDcgKzExODEsNyBAQAogdm9pZCBzbmRfdXNibWlkaV9kaXNjb25uZWN0KHN0cnVjdCBsaXN0X2hlYWQqIHApCiB7CiAJc3RydWN0IHNuZF91c2JfbWlkaSogdW1pZGk7Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IGksIGo7CiAKIAl1bWlkaSA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNuZF91c2JfbWlkaSwgbGlzdCk7CiAJLyoKQEAgLTExMDUsMTMgKzExOTYsMTUgQEAKIAkJc3RydWN0IHNuZF91c2JfbWlkaV9lbmRwb2ludCogZXAgPSAmdW1pZGktPmVuZHBvaW50c1tpXTsKIAkJaWYgKGVwLT5vdXQpCiAJCQl0YXNrbGV0X2tpbGwoJmVwLT5vdXQtPnRhc2tsZXQpOwotCQlpZiAoZXAtPm91dCAmJiBlcC0+b3V0LT51cmIpIHsKLQkJCXVzYl9raWxsX3VyYihlcC0+b3V0LT51cmIpOworCQlpZiAoZXAtPm91dCkgeworCQkJZm9yIChqID0gMDsgaiA8IE9VVFBVVF9VUkJTOyArK2opCisJCQkJdXNiX2tpbGxfdXJiKGVwLT5vdXQtPnVyYnNbal0udXJiKTsKIAkJCWlmICh1bWlkaS0+dXNiX3Byb3RvY29sX29wcy0+ZmluaXNoX291dF9lbmRwb2ludCkKIAkJCQl1bWlkaS0+dXNiX3Byb3RvY29sX29wcy0+ZmluaXNoX291dF9lbmRwb2ludChlcC0+b3V0KTsKIAkJfQogCQlpZiAoZXAtPmluKQotCQkJdXNiX2tpbGxfdXJiKGVwLT5pbi0+dXJiKTsKKwkJCWZvciAoaiA9IDA7IGogPCBJTlBVVF9VUkJTOyArK2opCisJCQkJdXNiX2tpbGxfdXJiKGVwLT5pbi0+dXJic1tqXSk7CiAJCS8qIGZyZWUgZW5kcG9pbnRzIGhlcmU7IGxhdGVyIGNhbGwgY2FuIHJlc3VsdCBpbiBPb3BzICovCiAJCWlmIChlcC0+b3V0KSB7CiAJCQlzbmRfdXNibWlkaV9vdXRfZW5kcG9pbnRfZGVsZXRlKGVwLT5vdXQpOwpAQCAtMTY5MiwyMCArMTc4NSwyNSBAQAogdm9pZCBzbmRfdXNibWlkaV9pbnB1dF9zdG9wKHN0cnVjdCBsaXN0X2hlYWQqIHApCiB7CiAJc3RydWN0IHNuZF91c2JfbWlkaSogdW1pZGk7Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IGksIGo7CiAKIAl1bWlkaSA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNuZF91c2JfbWlkaSwgbGlzdCk7CiAJZm9yIChpID0gMDsgaSA8IE1JRElfTUFYX0VORFBPSU5UUzsgKytpKSB7CiAJCXN0cnVjdCBzbmRfdXNiX21pZGlfZW5kcG9pbnQqIGVwID0gJnVtaWRpLT5lbmRwb2ludHNbaV07CiAJCWlmIChlcC0+aW4pCi0JCQl1c2Jfa2lsbF91cmIoZXAtPmluLT51cmIpOworCQkJZm9yIChqID0gMDsgaiA8IElOUFVUX1VSQlM7ICsraikKKwkJCQl1c2Jfa2lsbF91cmIoZXAtPmluLT51cmJzW2pdKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHNuZF91c2JtaWRpX2lucHV0X3N0YXJ0X2VwKHN0cnVjdCBzbmRfdXNiX21pZGlfaW5fZW5kcG9pbnQqIGVwKQogewotCWlmIChlcCkgewotCQlzdHJ1Y3QgdXJiKiB1cmIgPSBlcC0+dXJiOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCFlcCkKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBJTlBVVF9VUkJTOyArK2kpIHsKKwkJc3RydWN0IHVyYiogdXJiID0gZXAtPnVyYnNbaV07CiAJCXVyYi0+ZGV2ID0gZXAtPnVtaWRpLT5jaGlwLT5kZXY7CiAJCXNuZF91c2JtaWRpX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWl4ZXIuYyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCmluZGV4IGVjOWNkZjkuLmFiNWEzYWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaXhlci5jCisrKyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCkBAIC04Niw2ICs4Niw3IEBACiAJdTggcmNfYnVmZmVyWzZdOwogCiAJdTggYXVkaWd5Mm54X2xlZHNbM107CisJdTggeG9uYXJfdTFfc3RhdHVzOwogfTsKIAogCkBAIC00NjEsNyArNDYyLDcgQEAKIAkJCSB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IF9fdXNlciAqX3RsdikKIHsKIAlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCA9IGtjb250cm9sLT5wcml2YXRlX2RhdGE7Ci0JREVDTEFSRV9UTFZfREJfU0NBTEUoc2NhbGUsIDAsIDAsIDApOworCURFQ0xBUkVfVExWX0RCX01JTk1BWChzY2FsZSwgMCwgMCk7CiAKIAlpZiAoc2l6ZSA8IHNpemVvZihzY2FsZSkpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNDY5LDcgKzQ3MCwxNiBAQAogCSAqIHdoaWxlIEFMU0EgVExWIGNvbnRhaW5zIGluIDEvMTAwIGRCIHVuaXQKIAkgKi8KIAlzY2FsZVsyXSA9IChjb252ZXJ0X3NpZ25lZF92YWx1ZShjdmFsLCBjdmFsLT5taW4pICogMTAwKSAvIDI1NjsKLQlzY2FsZVszXSA9IChjb252ZXJ0X3NpZ25lZF92YWx1ZShjdmFsLCBjdmFsLT5yZXMpICogMTAwKSAvIDI1NjsKKwlzY2FsZVszXSA9IChjb252ZXJ0X3NpZ25lZF92YWx1ZShjdmFsLCBjdmFsLT5tYXgpICogMTAwKSAvIDI1NjsKKwlpZiAoc2NhbGVbM10gPD0gc2NhbGVbMl0pIHsKKwkJLyogc29tZXRoaW5nIGlzIHdyb25nOyBhc3N1bWUgaXQncyBlaXRoZXIgZnJvbS90byAwZEIgKi8KKwkJaWYgKHNjYWxlWzJdIDwgMCkKKwkJCXNjYWxlWzNdID0gMDsKKwkJZWxzZSBpZiAoc2NhbGVbMl0gPiAwKQorCQkJc2NhbGVbMl0gPSAwOworCQllbHNlIC8qIHRvdGFsbHkgY3JhcCwgcmV0dXJuIGFuIGVycm9yICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJaWYgKGNvcHlfdG9fdXNlcihfdGx2LCBzY2FsZSwgc2l6ZW9mKHNjYWxlKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwpAQCAtMjAzMyw2ICsyMDQzLDU4IEBACiAJfQogfQogCitzdGF0aWMgaW50IHNuZF94b25hcl91MV9zd2l0Y2hfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gISEobWl4ZXItPnhvbmFyX3UxX3N0YXR1cyAmIDB4MDIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF94b25hcl91MV9zd2l0Y2hfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlciA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1OCBvbGRfc3RhdHVzLCBuZXdfc3RhdHVzOworCWludCBlcnIsIGNoYW5nZWQ7CisKKwlvbGRfc3RhdHVzID0gbWl4ZXItPnhvbmFyX3UxX3N0YXR1czsKKwlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCisJCW5ld19zdGF0dXMgPSBvbGRfc3RhdHVzIHwgMHgwMjsKKwllbHNlCisJCW5ld19zdGF0dXMgPSBvbGRfc3RhdHVzICYgfjB4MDI7CisJY2hhbmdlZCA9IG5ld19zdGF0dXMgIT0gb2xkX3N0YXR1czsKKwllcnIgPSBzbmRfdXNiX2N0bF9tc2cobWl4ZXItPmNoaXAtPmRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShtaXhlci0+Y2hpcC0+ZGV2LCAwKSwgMHgwOCwKKwkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX09USEVSLAorCQkJICAgICAgNTAsIDAsICZuZXdfc3RhdHVzLCAxLCAxMDApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCW1peGVyLT54b25hcl91MV9zdGF0dXMgPSBuZXdfc3RhdHVzOworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3hvbmFyX3UxX291dHB1dF9zd2l0Y2ggPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiRGlnaXRhbCBQbGF5YmFjayBTd2l0Y2giLAorCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwkuZ2V0ID0gc25kX3hvbmFyX3UxX3N3aXRjaF9nZXQsCisJLnB1dCA9IHNuZF94b25hcl91MV9zd2l0Y2hfcHV0LAorfTsKKworc3RhdGljIGludCBzbmRfeG9uYXJfdTFfY29udHJvbHNfY3JlYXRlKHN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gc25kX2N0bF9hZGQobWl4ZXItPmNoaXAtPmNhcmQsCisJCQkgIHNuZF9jdGxfbmV3MSgmc25kX3hvbmFyX3UxX291dHB1dF9zd2l0Y2gsIG1peGVyKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJbWl4ZXItPnhvbmFyX3UxX3N0YXR1cyA9IDB4MDU7CisJcmV0dXJuIDA7Cit9CisKIGludCBzbmRfdXNiX2NyZWF0ZV9taXhlcihzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgaW50IGN0cmxpZiwKIAkJCSBpbnQgaWdub3JlX2Vycm9yKQogewpAQCAtMjA3NSw2ICsyMTM3LDEzIEBACiAJCQkJCSAgICAgIHNuZF9hdWRpZ3kybnhfcHJvY19yZWFkKTsKIAl9CiAKKwlpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwYjA1LCAweDE3MzkpIHx8CisJICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MGIwNSwgMHgxNzQzKSkgeworCQllcnIgPSBzbmRfeG9uYXJfdTFfY29udHJvbHNfY3JlYXRlKG1peGVyKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIF9lcnJvcjsKKwl9CisKIAllcnIgPSBzbmRfZGV2aWNlX25ldyhjaGlwLT5jYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIG1peGVyLCAmZGV2X29wcyk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gX2Vycm9yOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVjb3JkLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlY29yZC50eHQKaW5kZXggNmJlNjk2Yi4uMGZmMjNkZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVjb3JkLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0CkBAIC05MSw2ICs5MSwxMCBAQAogLS1uby1zYW1wbGVzOjoKIAlEb24ndCBzYW1wbGUuCiAKKy1SOjoKKy0tcmF3LXNhbXBsZXM6OgorQ29sbGVjdCByYXcgc2FtcGxlIHJlY29yZHMgZnJvbSBhbGwgb3BlbmVkIGNvdW50ZXJzICh0eXBpY2FsbHkgZm9yIHRyYWNlcG9pbnQgY291bnRlcnMpLgorCiBTRUUgQUxTTwogLS0tLS0tLS0KIGxpbmtwZXJmOnBlcmYtc3RhdFsxXSwgbGlua3BlcmY6cGVyZi1saXN0WzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVwb3J0LnR4dAppbmRleCBlNzJlOTMxLi41OWYwYjg0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlcG9ydC50eHQKQEAgLTI3LDYgKzI3LDkgQEAKIC1uCiAtLXNob3ctbnItc2FtcGxlcwogCVNob3cgdGhlIG51bWJlciBvZiBzYW1wbGVzIGZvciBlYWNoIHN5bWJvbAorLVQKKy0tdGhyZWFkcworCVNob3cgcGVyLXRocmVhZCBldmVudCBjb3VudGVycwogLUM6OgogLS1jb21tcz06OgogCU9ubHkgY29uc2lkZXIgc3ltYm9scyBpbiB0aGVzZSBjb21tcy4gQ1NWIHRoYXQgdW5kZXJzdGFuZHMKQEAgLTQ4LDYgKzUxLDE2IEBACiAJYWxsIG9jY3VyYW5jZXMgb2YgdGhpcyBzZXBhcmF0b3IgaW4gc3ltYm9sIG5hbWVzIChhbmQgb3RoZXIgb3V0cHV0KQogCXdpdGggYSAnLicgY2hhcmFjdGVyLCB0aGF0IHRodXMgaXQncyB0aGUgb25seSBub24gdmFsaWQgc2VwYXJhdG9yLgogCistZyBbdHlwZSxtaW5dOjoKKy0tY2FsbC1ncmFwaDo6CisgICAgICAgIERpc3BsYXkgY2FsbGNoYWlucyB1c2luZyB0eXBlIGFuZCBtaW4gcGVyY2VudCB0aHJlc2hvbGQuCisJdHlwZSBjYW4gYmUgZWl0aGVyOgorCS0gZmxhdDogc2luZ2xlIGNvbHVtbiwgbGluZWFyIGV4cG9zdXJlIG9mIGNhbGxjaGFpbnMuCisJLSBncmFwaDogdXNlIGEgZ3JhcGggdHJlZSwgZGlzcGxheWluZyBhYnNvbHV0ZSBvdmVyaGVhZCByYXRlcy4KKwktIGZyYWN0YWw6IGxpa2UgZ3JhcGgsIGJ1dCBkaXNwbGF5cyByZWxhdGl2ZSByYXRlcy4gRWFjaCBicmFuY2ggb2YKKwkJIHRoZSB0cmVlIGlzIGNvbnNpZGVyZWQgYXMgYSBuZXcgcHJvZmlsZWQgb2JqZWN0LiArCisJRGVmYXVsdDogZnJhY3RhbCwwLjUuCisKIFNFRSBBTFNPCiAtLS0tLS0tLQogbGlua3BlcmY6cGVyZi1zdGF0WzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCBjMDQ1YjQyLi45ZjhkMjA3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTE2Niw3ICsxNjYsMzUgQEAKIAogIyBDRkxBR1MgYW5kIExERkxBR1MgYXJlIGZvciB0aGUgdXNlcnMgdG8gb3ZlcnJpZGUgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgogCi1DRkxBR1MgPSAkKE02NCkgLWdnZGIzIC1XYWxsIC1XZXh0cmEgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1wcm90b3R5cGVzIC1zdGQ9Z251OTkgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgLVdlcnJvciAtTzYKKyMKKyMgSW5jbHVkZSBzYW5lciB3YXJuaW5ncyBoZXJlLCB3aGljaCBjYW4gY2F0Y2ggYnVnczoKKyMKKworRVhUUkFfV0FSTklOR1MgOj0gLVdjYXN0LWFsaWduCitFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2Zvcm1hdAorRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdmb3JtYXQtc2VjdXJpdHkKK0VYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XZm9ybWF0LXkyaworRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdzaGFkb3cKK0VYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XaW5pdC1zZWxmCitFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3BhY2tlZAorRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdyZWR1bmRhbnQtZGVjbHMKK0VYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc3RhY2stcHJvdGVjdG9yCitFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3N0cmljdC1hbGlhc2luZz0zCitFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3N3aXRjaC1kZWZhdWx0CitFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3N3aXRjaC1lbnVtCitFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV25vLXN5c3RlbS1oZWFkZXJzCitFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3VuZGVmCitFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhcgorRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVd3cml0ZS1zdHJpbmdzCitFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2JhZC1mdW5jdGlvbi1jYXN0CitFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV21pc3NpbmctZGVjbGFyYXRpb25zCitFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV21pc3NpbmctcHJvdG90eXBlcworRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVduZXN0ZWQtZXh0ZXJucworRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbgorRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdzdHJpY3QtcHJvdG90eXBlcworRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQKKworQ0ZMQUdTID0gJChNNjQpIC1nZ2RiMyAtV2FsbCAtV2V4dHJhIC1zdGQ9Z251OTkgLVdlcnJvciAtTzYgLWZzdGFjay1wcm90ZWN0b3ItYWxsIC1EX0ZPUlRJRllfU09VUkNFPTIgJChFWFRSQV9XQVJOSU5HUykKIExERkxBR1MgPSAtbHB0aHJlYWQgLWxydCAtbGVsZiAtbG0KIEFMTF9DRkxBR1MgPSAkKENGTEFHUykKIEFMTF9MREZMQUdTID0gJChMREZMQUdTKQpAQCAtMzEwLDYgKzMzOCw3IEBACiBMSUJfSCArPSB1dGlsL3N5bWJvbC5oCiBMSUJfSCArPSB1dGlsL21vZHVsZS5oCiBMSUJfSCArPSB1dGlsL2NvbG9yLmgKK0xJQl9IICs9IHV0aWwvdmFsdWVzLmgKIAogTElCX09CSlMgKz0gdXRpbC9hYnNwYXRoLm8KIExJQl9PQkpTICs9IHV0aWwvYWxpYXMubwpAQCAtMzM3LDYgKzM2NiwxMyBAQAogTElCX09CSlMgKz0gdXRpbC9wYWdlci5vCiBMSUJfT0JKUyArPSB1dGlsL2hlYWRlci5vCiBMSUJfT0JKUyArPSB1dGlsL2NhbGxjaGFpbi5vCitMSUJfT0JKUyArPSB1dGlsL3ZhbHVlcy5vCitMSUJfT0JKUyArPSB1dGlsL2RlYnVnLm8KK0xJQl9PQkpTICs9IHV0aWwvbWFwLm8KK0xJQl9PQkpTICs9IHV0aWwvdGhyZWFkLm8KK0xJQl9PQkpTICs9IHV0aWwvdHJhY2UtZXZlbnQtcGFyc2UubworTElCX09CSlMgKz0gdXRpbC90cmFjZS1ldmVudC1yZWFkLm8KK0xJQl9PQkpTICs9IHV0aWwvdHJhY2UtZXZlbnQtaW5mby5vCiAKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWFubm90YXRlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWhlbHAubwpAQCAtMzQ1LDYgKzM4MSw3IEBACiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1yZXBvcnQubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tc3RhdC5vCiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi10b3AubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tdHJhY2UubwogCiBQRVJGTElCUyA9ICQoTElCX0ZJTEUpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKaW5kZXggNWUxN2RlOS4uMDQzZDg1YiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMKQEAgLTE3LDE2ICsxNywxMyBAQAogI2luY2x1ZGUgInV0aWwvc3RyaW5nLmgiCiAKICNpbmNsdWRlICJwZXJmLmgiCisjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgogCiAjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCiAjaW5jbHVkZSAidXRpbC9wYXJzZS1ldmVudHMuaCIKLQotI2RlZmluZSBTSE9XX0tFUk5FTAkxCi0jZGVmaW5lIFNIT1dfVVNFUgkyCi0jZGVmaW5lIFNIT1dfSFYJCTQKKyNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgogCiBzdGF0aWMgY2hhcgkJY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKLXN0YXRpYyBjaGFyCQkqdm1saW51eCA9ICJ2bWxpbnV4IjsKIAogc3RhdGljIGNoYXIJCWRlZmF1bHRfc29ydF9vcmRlcltdID0gImNvbW0sc3ltYm9sIjsKIHN0YXRpYyBjaGFyCQkqc29ydF9vcmRlciA9IGRlZmF1bHRfc29ydF9vcmRlcjsKQEAgLTM1LDEzICszMiw2IEBACiBzdGF0aWMgaW50CQlpbnB1dDsKIHN0YXRpYyBpbnQJCXNob3dfbWFzayA9IFNIT1dfS0VSTkVMIHwgU0hPV19VU0VSIHwgU0hPV19IVjsKIAotc3RhdGljIGludAkJZHVtcF90cmFjZSA9IDA7Ci0jZGVmaW5lIGRwcmludGYoeC4uLikJZG8geyBpZiAoZHVtcF90cmFjZSkgcHJpbnRmKHgpOyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW50CQl2ZXJib3NlOwotCi1zdGF0aWMgaW50CQltb2R1bGVzOwotCiBzdGF0aWMgaW50CQlmdWxsX3BhdGhzOwogCiBzdGF0aWMgaW50CQlwcmludF9saW5lOwpAQCAtNDksMzkgKzM5LDggQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nCXBhZ2Vfc2l6ZTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nCW1tYXBfd2luZG93ID0gMzI7CiAKLXN0cnVjdCBpcF9ldmVudCB7Ci0Jc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKLQl1NjQgaXA7Ci0JdTMyIHBpZCwgdGlkOwotfTsKLQotc3RydWN0IG1tYXBfZXZlbnQgewotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7Ci0JdTMyIHBpZCwgdGlkOwotCXU2NCBzdGFydDsKLQl1NjQgbGVuOwotCXU2NCBwZ29mZjsKLQljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKLX07Ci0KLXN0cnVjdCBjb21tX2V2ZW50IHsKLQlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgaGVhZGVyOwotCXUzMiBwaWQsIHRpZDsKLQljaGFyIGNvbW1bMTZdOwotfTsKLQotc3RydWN0IGZvcmtfZXZlbnQgewotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7Ci0JdTMyIHBpZCwgcHBpZDsKLX07Ci0KLXR5cGVkZWYgdW5pb24gZXZlbnRfdW5pb24gewotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0Jc3RydWN0IGlwX2V2ZW50CQkJaXA7Ci0Jc3RydWN0IG1tYXBfZXZlbnQJCW1tYXA7Ci0Jc3RydWN0IGNvbW1fZXZlbnQJCWNvbW07Ci0Jc3RydWN0IGZvcmtfZXZlbnQJCWZvcms7Ci19IGV2ZW50X3Q7CitzdGF0aWMgc3RydWN0IHJiX3Jvb3QJdGhyZWFkczsKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkCSpsYXN0X21hdGNoOwogCiAKIHN0cnVjdCBzeW1fZXh0IHsKQEAgLTkwLDMyMyArNDksNiBAQAogCWNoYXIJCSpwYXRoOwogfTsKIAotc3RhdGljIExJU1RfSEVBRChkc29zKTsKLXN0YXRpYyBzdHJ1Y3QgZHNvICprZXJuZWxfZHNvOwotc3RhdGljIHN0cnVjdCBkc28gKnZkc287Ci0KLQotc3RhdGljIHZvaWQgZHNvc19fYWRkKHN0cnVjdCBkc28gKmRzbykKLXsKLQlsaXN0X2FkZF90YWlsKCZkc28tPm5vZGUsICZkc29zKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkc28gKmRzb3NfX2ZpbmQoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgZHNvICpwb3M7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmRzb3MsIG5vZGUpCi0JCWlmIChzdHJjbXAocG9zLT5uYW1lLCBuYW1lKSA9PSAwKQotCQkJcmV0dXJuIHBvczsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHN0cnVjdCBkc28gKmRzb3NfX2ZpbmRuZXcoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgZHNvICpkc28gPSBkc29zX19maW5kKG5hbWUpOwotCWludCBucjsKLQotCWlmIChkc28pCi0JCXJldHVybiBkc287Ci0KLQlkc28gPSBkc29fX25ldyhuYW1lLCAwKTsKLQlpZiAoIWRzbykKLQkJZ290byBvdXRfZGVsZXRlX2RzbzsKLQotCW5yID0gZHNvX19sb2FkKGRzbywgTlVMTCwgdmVyYm9zZSk7Ci0JaWYgKG5yIDwgMCkgewotCQlpZiAodmVyYm9zZSkKLQkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW46ICVzXG4iLCBuYW1lKTsKLQkJZ290byBvdXRfZGVsZXRlX2RzbzsKLQl9Ci0JaWYgKCFuciAmJiB2ZXJib3NlKSB7Ci0JCWZwcmludGYoc3RkZXJyLAotCQkiTm8gc3ltYm9scyBmb3VuZCBpbjogJXMsIG1heWJlIGluc3RhbGwgYSBkZWJ1ZyBwYWNrYWdlP1xuIiwKLQkJCQluYW1lKTsKLQl9Ci0KLQlkc29zX19hZGQoZHNvKTsKLQotCXJldHVybiBkc287Ci0KLW91dF9kZWxldGVfZHNvOgotCWRzb19fZGVsZXRlKGRzbyk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzb3NfX2ZwcmludGYoRklMRSAqZnApCi17Ci0Jc3RydWN0IGRzbyAqcG9zOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZkc29zLCBub2RlKQotCQlkc29fX2ZwcmludGYocG9zLCBmcCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICp2ZHNvX19maW5kX3N5bWJvbChzdHJ1Y3QgZHNvICpkc28sIHU2NCBpcCkKLXsKLQlyZXR1cm4gZHNvX19maW5kX3N5bWJvbChkc28sIGlwKTsKLX0KLQotc3RhdGljIGludCBsb2FkX2tlcm5lbCh2b2lkKQotewotCWludCBlcnI7Ci0KLQlrZXJuZWxfZHNvID0gZHNvX19uZXcoIltrZXJuZWxdIiwgMCk7Ci0JaWYgKCFrZXJuZWxfZHNvKQotCQlyZXR1cm4gLTE7Ci0KLQllcnIgPSBkc29fX2xvYWRfa2VybmVsKGtlcm5lbF9kc28sIHZtbGludXgsIE5VTEwsIHZlcmJvc2UsIG1vZHVsZXMpOwotCWlmIChlcnIgPD0gMCkgewotCQlkc29fX2RlbGV0ZShrZXJuZWxfZHNvKTsKLQkJa2VybmVsX2RzbyA9IE5VTEw7Ci0JfSBlbHNlCi0JCWRzb3NfX2FkZChrZXJuZWxfZHNvKTsKLQotCXZkc28gPSBkc29fX25ldygiW3Zkc29dIiwgMCk7Ci0JaWYgKCF2ZHNvKQotCQlyZXR1cm4gLTE7Ci0KLQl2ZHNvLT5maW5kX3N5bWJvbCA9IHZkc29fX2ZpbmRfc3ltYm9sOwotCi0JZHNvc19fYWRkKHZkc28pOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RydWN0IG1hcCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCXU2NAkgc3RhcnQ7Ci0JdTY0CSBlbmQ7Ci0JdTY0CSBwZ29mZjsKLQl1NjQJICgqbWFwX2lwKShzdHJ1Y3QgbWFwICosIHU2NCk7Ci0Jc3RydWN0IGRzbwkgKmRzbzsKLX07Ci0KLXN0YXRpYyB1NjQgbWFwX19tYXBfaXAoc3RydWN0IG1hcCAqbWFwLCB1NjQgaXApCi17Ci0JcmV0dXJuIGlwIC0gbWFwLT5zdGFydCArIG1hcC0+cGdvZmY7Ci19Ci0KLXN0YXRpYyB1NjQgdmRzb19fbWFwX2lwKHN0cnVjdCBtYXAgKm1hcCBfX3VzZWQsIHU2NCBpcCkKLXsKLQlyZXR1cm4gaXA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwICptYXBfX25ldyhzdHJ1Y3QgbW1hcF9ldmVudCAqZXZlbnQpCi17Ci0Jc3RydWN0IG1hcCAqc2VsZiA9IG1hbGxvYyhzaXplb2YoKnNlbGYpKTsKLQotCWlmIChzZWxmICE9IE5VTEwpIHsKLQkJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBldmVudC0+ZmlsZW5hbWU7Ci0KLQkJc2VsZi0+c3RhcnQgPSBldmVudC0+c3RhcnQ7Ci0JCXNlbGYtPmVuZCAgID0gZXZlbnQtPnN0YXJ0ICsgZXZlbnQtPmxlbjsKLQkJc2VsZi0+cGdvZmYgPSBldmVudC0+cGdvZmY7Ci0KLQkJc2VsZi0+ZHNvID0gZHNvc19fZmluZG5ldyhmaWxlbmFtZSk7Ci0JCWlmIChzZWxmLT5kc28gPT0gTlVMTCkKLQkJCWdvdG8gb3V0X2RlbGV0ZTsKLQotCQlpZiAoc2VsZi0+ZHNvID09IHZkc28pCi0JCQlzZWxmLT5tYXBfaXAgPSB2ZHNvX19tYXBfaXA7Ci0JCWVsc2UKLQkJCXNlbGYtPm1hcF9pcCA9IG1hcF9fbWFwX2lwOwotCX0KLQlyZXR1cm4gc2VsZjsKLW91dF9kZWxldGU6Ci0JZnJlZShzZWxmKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHN0cnVjdCBtYXAgKm1hcF9fY2xvbmUoc3RydWN0IG1hcCAqc2VsZikKLXsKLQlzdHJ1Y3QgbWFwICptYXAgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7Ci0KLQlpZiAoIW1hcCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQltZW1jcHkobWFwLCBzZWxmLCBzaXplb2YoKnNlbGYpKTsKLQotCXJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBpbnQgbWFwX19vdmVybGFwKHN0cnVjdCBtYXAgKmwsIHN0cnVjdCBtYXAgKnIpCi17Ci0JaWYgKGwtPnN0YXJ0ID4gci0+c3RhcnQpIHsKLQkJc3RydWN0IG1hcCAqdCA9IGw7Ci0JCWwgPSByOwotCQlyID0gdDsKLQl9Ci0KLQlpZiAobC0+ZW5kID4gci0+c3RhcnQpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzaXplX3QgbWFwX19mcHJpbnRmKHN0cnVjdCBtYXAgKnNlbGYsIEZJTEUgKmZwKQotewotCXJldHVybiBmcHJpbnRmKGZwLCAiICVMeC0lTHggJUx4ICVzXG4iLAotCQkgICAgICAgc2VsZi0+c3RhcnQsIHNlbGYtPmVuZCwgc2VsZi0+cGdvZmYsIHNlbGYtPmRzby0+bmFtZSk7Ci19Ci0KLQotc3RydWN0IHRocmVhZCB7Ci0Jc3RydWN0IHJiX25vZGUJIHJiX25vZGU7Ci0Jc3RydWN0IGxpc3RfaGVhZCBtYXBzOwotCXBpZF90CQkgcGlkOwotCWNoYXIJCSAqY29tbTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdGhyZWFkICp0aHJlYWRfX25ldyhwaWRfdCBwaWQpCi17Ci0Jc3RydWN0IHRocmVhZCAqc2VsZiA9IG1hbGxvYyhzaXplb2YoKnNlbGYpKTsKLQotCWlmIChzZWxmICE9IE5VTEwpIHsKLQkJc2VsZi0+cGlkID0gcGlkOwotCQlzZWxmLT5jb21tID0gbWFsbG9jKDMyKTsKLQkJaWYgKHNlbGYtPmNvbW0pCi0JCQlzbnByaW50ZihzZWxmLT5jb21tLCAzMiwgIjolZCIsIHNlbGYtPnBpZCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZzZWxmLT5tYXBzKTsKLQl9Ci0KLQlyZXR1cm4gc2VsZjsKLX0KLQotc3RhdGljIGludCB0aHJlYWRfX3NldF9jb21tKHN0cnVjdCB0aHJlYWQgKnNlbGYsIGNvbnN0IGNoYXIgKmNvbW0pCi17Ci0JaWYgKHNlbGYtPmNvbW0pCi0JCWZyZWUoc2VsZi0+Y29tbSk7Ci0Jc2VsZi0+Y29tbSA9IHN0cmR1cChjb21tKTsKLQlyZXR1cm4gc2VsZi0+Y29tbSA/IDAgOiAtRU5PTUVNOwotfQotCi1zdGF0aWMgc2l6ZV90IHRocmVhZF9fZnByaW50ZihzdHJ1Y3QgdGhyZWFkICpzZWxmLCBGSUxFICpmcCkKLXsKLQlzdHJ1Y3QgbWFwICpwb3M7Ci0Jc2l6ZV90IHJldCA9IGZwcmludGYoZnAsICJUaHJlYWQgJWQgJXNcbiIsIHNlbGYtPnBpZCwgc2VsZi0+Y29tbSk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnNlbGYtPm1hcHMsIG5vZGUpCi0JCXJldCArPSBtYXBfX2ZwcmludGYocG9zLCBmcCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgcmJfcm9vdCB0aHJlYWRzOwotc3RhdGljIHN0cnVjdCB0aHJlYWQgKmxhc3RfbWF0Y2g7Ci0KLXN0YXRpYyBzdHJ1Y3QgdGhyZWFkICp0aHJlYWRzX19maW5kbmV3KHBpZF90IHBpZCkKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmdGhyZWFkcy5yYl9ub2RlOwotCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwotCXN0cnVjdCB0aHJlYWQgKnRoOwotCi0JLyoKLQkgKiBGb250LWVuZCBjYWNoZSAtIFBJRCBsb29rdXBzIGNvbWUgaW4gYmxvY2tzLAotCSAqIHNvIG1vc3Qgb2YgdGhlIHRpbWUgd2UgZG9udCBoYXZlIHRvIGxvb2sgdXAKLQkgKiB0aGUgZnVsbCByYnRyZWU6Ci0JICovCi0JaWYgKGxhc3RfbWF0Y2ggJiYgbGFzdF9tYXRjaC0+cGlkID09IHBpZCkKLQkJcmV0dXJuIGxhc3RfbWF0Y2g7Ci0KLQl3aGlsZSAoKnAgIT0gTlVMTCkgewotCQlwYXJlbnQgPSAqcDsKLQkJdGggPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCB0aHJlYWQsIHJiX25vZGUpOwotCi0JCWlmICh0aC0+cGlkID09IHBpZCkgewotCQkJbGFzdF9tYXRjaCA9IHRoOwotCQkJcmV0dXJuIHRoOwotCQl9Ci0KLQkJaWYgKHBpZCA8IHRoLT5waWQpCi0JCQlwID0gJigqcCktPnJiX2xlZnQ7Ci0JCWVsc2UKLQkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7Ci0JfQotCi0JdGggPSB0aHJlYWRfX25ldyhwaWQpOwotCWlmICh0aCAhPSBOVUxMKSB7Ci0JCXJiX2xpbmtfbm9kZSgmdGgtPnJiX25vZGUsIHBhcmVudCwgcCk7Ci0JCXJiX2luc2VydF9jb2xvcigmdGgtPnJiX25vZGUsICZ0aHJlYWRzKTsKLQkJbGFzdF9tYXRjaCA9IHRoOwotCX0KLQotCXJldHVybiB0aDsKLX0KLQotc3RhdGljIHZvaWQgdGhyZWFkX19pbnNlcnRfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCkKLXsKLQlzdHJ1Y3QgbWFwICpwb3MsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB0bXAsICZzZWxmLT5tYXBzLCBub2RlKSB7Ci0JCWlmIChtYXBfX292ZXJsYXAocG9zLCBtYXApKSB7Ci0JCQlsaXN0X2RlbF9pbml0KCZwb3MtPm5vZGUpOwotCQkJLyogWFhYIGxlYWtzIGRzb3MgKi8KLQkJCWZyZWUocG9zKTsKLQkJfQotCX0KLQotCWxpc3RfYWRkX3RhaWwoJm1hcC0+bm9kZSwgJnNlbGYtPm1hcHMpOwotfQotCi1zdGF0aWMgaW50IHRocmVhZF9fZm9yayhzdHJ1Y3QgdGhyZWFkICpzZWxmLCBzdHJ1Y3QgdGhyZWFkICpwYXJlbnQpCi17Ci0Jc3RydWN0IG1hcCAqbWFwOwotCi0JaWYgKHNlbGYtPmNvbW0pCi0JCWZyZWUoc2VsZi0+Y29tbSk7Ci0Jc2VsZi0+Y29tbSA9IHN0cmR1cChwYXJlbnQtPmNvbW0pOwotCWlmICghc2VsZi0+Y29tbSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcCwgJnBhcmVudC0+bWFwcywgbm9kZSkgewotCQlzdHJ1Y3QgbWFwICpuZXcgPSBtYXBfX2Nsb25lKG1hcCk7Ci0JCWlmICghbmV3KQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXRocmVhZF9faW5zZXJ0X21hcChzZWxmLCBuZXcpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG1hcCAqdGhyZWFkX19maW5kX21hcChzdHJ1Y3QgdGhyZWFkICpzZWxmLCB1NjQgaXApCi17Ci0Jc3RydWN0IG1hcCAqcG9zOwotCi0JaWYgKHNlbGYgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnNlbGYtPm1hcHMsIG5vZGUpCi0JCWlmIChpcCA+PSBwb3MtPnN0YXJ0ICYmIGlwIDw9IHBvcy0+ZW5kKQotCQkJcmV0dXJuIHBvczsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc2l6ZV90IHRocmVhZHNfX2ZwcmludGYoRklMRSAqZnApCi17Ci0Jc2l6ZV90IHJldCA9IDA7Ci0Jc3RydWN0IHJiX25vZGUgKm5kOwotCi0JZm9yIChuZCA9IHJiX2ZpcnN0KCZ0aHJlYWRzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKLQkJc3RydWN0IHRocmVhZCAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCB0aHJlYWQsIHJiX25vZGUpOwotCi0JCXJldCArPSB0aHJlYWRfX2ZwcmludGYocG9zLCBmcCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQogLyoKICAqIGhpc3RvZ3JhbSwgc29ydGVkIG9uIGl0ZW0sIGNvbGxlY3RzIGNvdW50cwogICovCkBAIC00MzMsNyArNzUsNyBAQAogc3RydWN0IHNvcnRfZW50cnkgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAotCWNoYXIgKmhlYWRlcjsKKwljb25zdCBjaGFyICpoZWFkZXI7CiAKIAlpbnQ2NF90ICgqY21wKShzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKIAlpbnQ2NF90ICgqY29sbGFwc2UpKHN0cnVjdCBoaXN0X2VudHJ5ICosIHN0cnVjdCBoaXN0X2VudHJ5ICopOwpAQCAtNTc3LDcgKzIxOSw3IEBACiBzdGF0aWMgaW50IHNvcnRfX25lZWRfY29sbGFwc2UgPSAwOwogCiBzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gewotCWNoYXIJCQkqbmFtZTsKKwljb25zdCBjaGFyCQkqbmFtZTsKIAlzdHJ1Y3Qgc29ydF9lbnRyeQkqZW50cnk7CiAJaW50CQkJdGFrZW47CiB9OwpAQCAtODMwLDE3ICs0NzIsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcmVnaXN0ZXJfaWRsZV90aHJlYWQodm9pZCkKLXsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KDApOwotCi0JaWYgKHRocmVhZCA9PSBOVUxMIHx8Ci0JCQl0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgIltpZGxlXSIpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBpbnNlcnRpbmcgaWRsZSB0YXNrLlxuIik7Ci0JCWV4aXQoLTEpOwotCX0KLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWwgPSAwLAogCQkgICAgIHRvdGFsX21tYXAgPSAwLAogCQkgICAgIHRvdGFsX2NvbW0gPSAwLApAQCAtODUzLDE4ICs0ODQsMjAgQEAKIAljaGFyIGxldmVsOwogCWludCBzaG93ID0gMDsKIAlzdHJ1Y3QgZHNvICpkc28gPSBOVUxMOwotCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmlwLnBpZCk7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkOwogCXU2NCBpcCA9IGV2ZW50LT5pcC5pcDsKIAlzdHJ1Y3QgbWFwICptYXAgPSBOVUxMOwogCi0JZHByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVCAoSVAsICVkKTogJWQ6ICVwXG4iLAorCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmlwLnBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKKworCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX0VWRU5UIChJUCwgJWQpOiAlZDogJXBcbiIsCiAJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAogCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAogCQlldmVudC0+aGVhZGVyLm1pc2MsCiAJCWV2ZW50LT5pcC5waWQsCiAJCSh2b2lkICopKGxvbmcpaXApOwogCi0JZHByaW50ZigiIC4uLiB0aHJlYWQ6ICVzOiVkXG4iLCB0aHJlYWQtPmNvbW0sIHRocmVhZC0+cGlkKTsKKwlkdW1wX3ByaW50ZigiIC4uLiB0aHJlYWQ6ICVzOiVkXG4iLCB0aHJlYWQtPmNvbW0sIHRocmVhZC0+cGlkKTsKIAogCWlmICh0aHJlYWQgPT0gTlVMTCkgewogCQlmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLApAQCAtODc4LDcgKzUxMSw3IEBACiAKIAkJZHNvID0ga2VybmVsX2RzbzsKIAotCQlkcHJpbnRmKCIgLi4uLi4uIGRzbzogJXNcbiIsIGRzby0+bmFtZSk7CisJCWR1bXBfcHJpbnRmKCIgLi4uLi4uIGRzbzogJXNcbiIsIGRzby0+bmFtZSk7CiAKIAl9IGVsc2UgaWYgKGV2ZW50LT5oZWFkZXIubWlzYyAmIFBFUkZfRVZFTlRfTUlTQ19VU0VSKSB7CiAKQEAgLTg5OSwxMiArNTMyLDEyIEBACiAJCQlpZiAoKGxvbmcgbG9uZylpcCA8IDApCiAJCQkJZHNvID0ga2VybmVsX2RzbzsKIAkJfQotCQlkcHJpbnRmKCIgLi4uLi4uIGRzbzogJXNcbiIsIGRzbyA/IGRzby0+bmFtZSA6ICI8bm90IGZvdW5kPiIpOworCQlkdW1wX3ByaW50ZigiIC4uLi4uLiBkc286ICVzXG4iLCBkc28gPyBkc28tPm5hbWUgOiAiPG5vdCBmb3VuZD4iKTsKIAogCX0gZWxzZSB7CiAJCXNob3cgPSBTSE9XX0hWOwogCQlsZXZlbCA9ICdIJzsKLQkJZHByaW50ZigiIC4uLi4uLiBkc286IFtoeXBlcnZpc29yXVxuIik7CisJCWR1bXBfcHJpbnRmKCIgLi4uLi4uIGRzbzogW2h5cGVydmlzb3JdXG4iKTsKIAl9CiAKIAlpZiAoc2hvdyAmIHNob3dfbWFzaykgewpAQCAtOTI3LDEwICs1NjAsMTIgQEAKIHN0YXRpYyBpbnQKIHByb2Nlc3NfbW1hcF9ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKIHsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5tbWFwLnBpZCk7Ci0Jc3RydWN0IG1hcCAqbWFwID0gbWFwX19uZXcoJmV2ZW50LT5tbWFwKTsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CisJc3RydWN0IG1hcCAqbWFwID0gbWFwX19uZXcoJmV2ZW50LT5tbWFwLCBOVUxMLCAwKTsKIAotCWRwcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfTU1BUCAlZDogWyVwKCVwKSBAICVwXTogJXNcbiIsCisJdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+bW1hcC5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9NTUFQICVkOiBbJXAoJXApIEAgJXBdOiAlc1xuIiwKIAkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCiAJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCWV2ZW50LT5tbWFwLnBpZCwKQEAgLTk0MCw3ICs1NzUsNyBAQAogCQlldmVudC0+bW1hcC5maWxlbmFtZSk7CiAKIAlpZiAodGhyZWFkID09IE5VTEwgfHwgbWFwID09IE5VTEwpIHsKLQkJZHByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfRVZFTlRfTU1BUCwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKKwkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX0VWRU5UX01NQVAsIHNraXBwaW5nIGV2ZW50LlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTUzLDE2ICs1ODgsMTcgQEAKIHN0YXRpYyBpbnQKIHByb2Nlc3NfY29tbV9ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKIHsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5jb21tLnBpZCk7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkOwogCi0JZHByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9DT01NOiAlczolZFxuIiwKKwl0aHJlYWQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5jb21tLnBpZCwgJnRocmVhZHMsICZsYXN0X21hdGNoKTsKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9DT01NOiAlczolZFxuIiwKIAkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCiAJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCWV2ZW50LT5jb21tLmNvbW0sIGV2ZW50LT5jb21tLnBpZCk7CiAKIAlpZiAodGhyZWFkID09IE5VTEwgfHwKIAkgICAgdGhyZWFkX19zZXRfY29tbSh0aHJlYWQsIGV2ZW50LT5jb21tLmNvbW0pKSB7Ci0JCWRwcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX0VWRU5UX0NPTU0sIHNraXBwaW5nIGV2ZW50LlxuIik7CisJCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9FVkVOVF9DT01NLCBza2lwcGluZyBldmVudC5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCXRvdGFsX2NvbW0rKzsKQEAgLTk3MywxMCArNjA5LDEyIEBACiBzdGF0aWMgaW50CiBwcm9jZXNzX2ZvcmtfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCiB7Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Zm9yay5waWQpOwotCXN0cnVjdCB0aHJlYWQgKnBhcmVudCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmZvcmsucHBpZCk7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkOworCXN0cnVjdCB0aHJlYWQgKnBhcmVudDsKIAotCWRwcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfRk9SSzogJWQ6JWRcbiIsCisJdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Zm9yay5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisJcGFyZW50ID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Zm9yay5wcGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOworCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBQRVJGX0VWRU5UX0ZPUks6ICVkOiVkXG4iLAogCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKIAkJZXZlbnQtPmZvcmsucGlkLCBldmVudC0+Zm9yay5wcGlkKTsKQEAgLTk4OSw3ICs2MjcsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmICghdGhyZWFkIHx8ICFwYXJlbnQgfHwgdGhyZWFkX19mb3JrKHRocmVhZCwgcGFyZW50KSkgewotCQlkcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9FVkVOVF9GT1JLLCBza2lwcGluZyBldmVudC5cbiIpOworCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfRVZFTlRfRk9SSywgc2tpcHBpbmcgZXZlbnQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAl0b3RhbF9mb3JrKys7CkBAIC0xMDc1LDcgKzcxMyw3IEBACiAJCWNvbnN0IGNoYXIgKnBhdGggPSBOVUxMOwogCQl1bnNpZ25lZCBpbnQgaGl0cyA9IDA7CiAJCWRvdWJsZSBwZXJjZW50ID0gMC4wOwotCQljaGFyICpjb2xvcjsKKwkJY29uc3QgY2hhciAqY29sb3I7CiAJCXN0cnVjdCBzeW1fZXh0ICpzeW1fZXh0ID0gc3ltLT5wcml2OwogCiAJCW9mZnNldCA9IGxpbmVfaXAgLSBzdGFydDsKQEAgLTExNTcsNyArNzk1LDcgQEAKIAogLyogR2V0IHRoZSBmaWxlbmFtZTpsaW5lIGZvciB0aGUgY29sb3JlZCBlbnRyaWVzICovCiBzdGF0aWMgdm9pZAotZ2V0X3NvdXJjZV9saW5lKHN0cnVjdCBzeW1ib2wgKnN5bSwgdTY0IHN0YXJ0LCBpbnQgbGVuLCBjaGFyICpmaWxlbmFtZSkKK2dldF9zb3VyY2VfbGluZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIHU2NCBzdGFydCwgaW50IGxlbiwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAJaW50IGk7CiAJY2hhciBjbWRbUEFUSF9NQVggKiAyXTsKQEAgLTEyMDMsNyArODQxLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50X3N1bW1hcnkoY2hhciAqZmlsZW5hbWUpCitzdGF0aWMgdm9pZCBwcmludF9zdW1tYXJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogCXN0cnVjdCBzeW1fZXh0ICpzeW1fZXh0OwogCXN0cnVjdCByYl9ub2RlICpub2RlOwpAQCAtMTIxOSw3ICs4NTcsNyBAQAogCW5vZGUgPSByYl9maXJzdCgmcm9vdF9zeW1fZXh0KTsKIAl3aGlsZSAobm9kZSkgewogCQlkb3VibGUgcGVyY2VudDsKLQkJY2hhciAqY29sb3I7CisJCWNvbnN0IGNoYXIgKmNvbG9yOwogCQljaGFyICpwYXRoOwogCiAJCXN5bV9leHQgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3Qgc3ltX2V4dCwgbm9kZSk7CkBAIC0xMjM0LDcgKzg3Miw3IEBACiAKIHN0YXRpYyB2b2lkIGFubm90YXRlX3N5bShzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBzeW1ib2wgKnN5bSkKIHsKLQljaGFyICpmaWxlbmFtZSA9IGRzby0+bmFtZSwgKmRfZmlsZW5hbWU7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBkc28tPm5hbWUsICpkX2ZpbGVuYW1lOwogCXU2NCBzdGFydCwgZW5kLCBsZW47CiAJY2hhciBjb21tYW5kW1BBVEhfTUFYKjJdOwogCUZJTEUgKmZpbGU7CkBAIC0xMjQ0LDcgKzg4Miw3IEBACiAJaWYgKHN5bS0+bW9kdWxlKQogCQlmaWxlbmFtZSA9IHN5bS0+bW9kdWxlLT5wYXRoOwogCWVsc2UgaWYgKGRzbyA9PSBrZXJuZWxfZHNvKQotCQlmaWxlbmFtZSA9IHZtbGludXg7CisJCWZpbGVuYW1lID0gdm1saW51eF9uYW1lOwogCiAJc3RhcnQgPSBzeW0tPm9ial9zdGFydDsKIAlpZiAoIXN0YXJ0KQpAQCAtMTMxNiwxMiArOTU0LDEyIEBACiAJaW50IHJldCwgcmMgPSBFWElUX0ZBSUxVUkU7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgaGVhZCA9IDA7Ci0Jc3RydWN0IHN0YXQgc3RhdDsKKwlzdHJ1Y3Qgc3RhdCBpbnB1dF9zdGF0OwogCWV2ZW50X3QgKmV2ZW50OwogCXVpbnQzMl90IHNpemU7CiAJY2hhciAqYnVmOwogCi0JcmVnaXN0ZXJfaWRsZV90aHJlYWQoKTsKKwlyZWdpc3Rlcl9pZGxlX3RocmVhZCgmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOwogCiAJaW5wdXQgPSBvcGVuKGlucHV0X25hbWUsIE9fUkRPTkxZKTsKIAlpZiAoaW5wdXQgPCAwKSB7CkBAIC0xMzI5LDE4ICs5NjcsMTggQEAKIAkJZXhpdCgtMSk7CiAJfQogCi0JcmV0ID0gZnN0YXQoaW5wdXQsICZzdGF0KTsKKwlyZXQgPSBmc3RhdChpbnB1dCwgJmlucHV0X3N0YXQpOwogCWlmIChyZXQgPCAwKSB7CiAJCXBlcnJvcigiZmFpbGVkIHRvIHN0YXQgZmlsZSIpOwogCQlleGl0KC0xKTsKIAl9CiAKLQlpZiAoIWZvcmNlICYmIChzdGF0LnN0X3VpZCAhPSBnZXRldWlkKCkpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiZmlsZTogJXMgbm90IG93bmVkIGJ5IGN1cnJlbnQgdXNlclxuIiwgaW5wdXRfbmFtZSk7CisJaWYgKCFmb3JjZSAmJiBpbnB1dF9zdGF0LnN0X3VpZCAmJiAoaW5wdXRfc3RhdC5zdF91aWQgIT0gZ2V0ZXVpZCgpKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImZpbGU6ICVzIG5vdCBvd25lZCBieSBjdXJyZW50IHVzZXIgb3Igcm9vdFxuIiwgaW5wdXRfbmFtZSk7CiAJCWV4aXQoLTEpOwogCX0KIAotCWlmICghc3RhdC5zdF9zaXplKSB7CisJaWYgKCFpbnB1dF9zdGF0LnN0X3NpemUpIHsKIAkJZnByaW50ZihzdGRlcnIsICJ6ZXJvLXNpemVkIGZpbGUsIG5vdGhpbmcgdG8gZG8hXG4iKTsKIAkJZXhpdCgwKTsKIAl9CkBAIC0xMzY3LDEwICsxMDA1LDEwIEBACiAKIAlpZiAoaGVhZCArIGV2ZW50LT5oZWFkZXIuc2l6ZSA+PSBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdykgewogCQl1bnNpZ25lZCBsb25nIHNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOwotCQlpbnQgcmV0OworCQlpbnQgbXVubWFwX3JldDsKIAotCQlyZXQgPSBtdW5tYXAoYnVmLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdyk7Ci0JCWFzc2VydChyZXQgPT0gMCk7CisJCW11bm1hcF9yZXQgPSBtdW5tYXAoYnVmLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdyk7CisJCWFzc2VydChtdW5tYXBfcmV0ID09IDApOwogCiAJCW9mZnNldCArPSBzaGlmdDsKIAkJaGVhZCAtPSBzaGlmdDsKQEAgLTEzNzksMTQgKzEwMTcsMTQgQEAKIAogCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7CiAKLQlkcHJpbnRmKCIlcCBbJXBdOiBldmVudDogJWRcbiIsCisJZHVtcF9wcmludGYoIiVwIFslcF06IGV2ZW50OiAlZFxuIiwKIAkJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAogCQkJKHZvaWQgKikobG9uZylldmVudC0+aGVhZGVyLnNpemUsCiAJCQlldmVudC0+aGVhZGVyLnR5cGUpOwogCiAJaWYgKCFzaXplIHx8IHByb2Nlc3NfZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCkgPCAwKSB7CiAKLQkJZHByaW50ZigiJXAgWyVwXTogc2tpcHBpbmcgdW5rbm93biBoZWFkZXIgdHlwZTogJWRcbiIsCisJCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKIAkJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAogCQkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKIAkJCWV2ZW50LT5oZWFkZXIudHlwZSk7CkBAIC0xNDA2LDIzICsxMDQ0LDIzIEBACiAKIAloZWFkICs9IHNpemU7CiAKLQlpZiAob2Zmc2V0ICsgaGVhZCA8ICh1bnNpZ25lZCBsb25nKXN0YXQuc3Rfc2l6ZSkKKwlpZiAob2Zmc2V0ICsgaGVhZCA8ICh1bnNpZ25lZCBsb25nKWlucHV0X3N0YXQuc3Rfc2l6ZSkKIAkJZ290byBtb3JlOwogCiAJcmMgPSBFWElUX1NVQ0NFU1M7CiAJY2xvc2UoaW5wdXQpOwogCi0JZHByaW50ZigiICAgICAgSVAgZXZlbnRzOiAlMTBsZFxuIiwgdG90YWwpOwotCWRwcmludGYoIiAgICBtbWFwIGV2ZW50czogJTEwbGRcbiIsIHRvdGFsX21tYXApOwotCWRwcmludGYoIiAgICBjb21tIGV2ZW50czogJTEwbGRcbiIsIHRvdGFsX2NvbW0pOwotCWRwcmludGYoIiAgICBmb3JrIGV2ZW50czogJTEwbGRcbiIsIHRvdGFsX2ZvcmspOwotCWRwcmludGYoIiB1bmtub3duIGV2ZW50czogJTEwbGRcbiIsIHRvdGFsX3Vua25vd24pOworCWR1bXBfcHJpbnRmKCIgICAgICBJUCBldmVudHM6ICUxMGxkXG4iLCB0b3RhbCk7CisJZHVtcF9wcmludGYoIiAgICBtbWFwIGV2ZW50czogJTEwbGRcbiIsIHRvdGFsX21tYXApOworCWR1bXBfcHJpbnRmKCIgICAgY29tbSBldmVudHM6ICUxMGxkXG4iLCB0b3RhbF9jb21tKTsKKwlkdW1wX3ByaW50ZigiICAgIGZvcmsgZXZlbnRzOiAlMTBsZFxuIiwgdG90YWxfZm9yayk7CisJZHVtcF9wcmludGYoIiB1bmtub3duIGV2ZW50czogJTEwbGRcbiIsIHRvdGFsX3Vua25vd24pOwogCiAJaWYgKGR1bXBfdHJhY2UpCiAJCXJldHVybiAwOwogCiAJaWYgKHZlcmJvc2UgPj0gMykKLQkJdGhyZWFkc19fZnByaW50ZihzdGRvdXQpOworCQl0aHJlYWRzX19mcHJpbnRmKHN0ZG91dCwgJnRocmVhZHMpOwogCiAJaWYgKHZlcmJvc2UgPj0gMikKIAkJZHNvc19fZnByaW50ZihzdGRvdXQpOwpAQCAtMTQ1MCw3ICsxMDg4LDcgQEAKIAkJICAgICJiZSBtb3JlIHZlcmJvc2UgKHNob3cgc3ltYm9sIGFkZHJlc3MsIGV0YykiKSwKIAlPUFRfQk9PTEVBTignRCcsICJkdW1wLXJhdy10cmFjZSIsICZkdW1wX3RyYWNlLAogCQkgICAgImR1bXAgcmF3IHRyYWNlIGluIEFTQ0lJIiksCi0JT1BUX1NUUklORygnaycsICJ2bWxpbnV4IiwgJnZtbGludXgsICJmaWxlIiwgInZtbGludXggcGF0aG5hbWUiKSwKKwlPUFRfU1RSSU5HKCdrJywgInZtbGludXgiLCAmdm1saW51eF9uYW1lLCAiZmlsZSIsICJ2bWxpbnV4IHBhdGhuYW1lIiksCiAJT1BUX0JPT0xFQU4oJ20nLCAibW9kdWxlcyIsICZtb2R1bGVzLAogCQkgICAgImxvYWQgbW9kdWxlIHN5bWJvbHMgLSBXQVJOSU5HOiB1c2Ugb25seSB3aXRoIC1rIGFuZCBMSVZFIGtlcm5lbCIpLAogCU9QVF9CT09MRUFOKCdsJywgInByaW50LWxpbmUiLCAmcHJpbnRfbGluZSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1oZWxwLmMgYi90b29scy9wZXJmL2J1aWx0aW4taGVscC5jCmluZGV4IDI1OTlkODYuLjRmYjg3MzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1oZWxwLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWhlbHAuYwpAQCAtNDU2LDYgKzQ1Niw3IEBACiAJCWJyZWFrOwogCWNhc2UgSEVMUF9GT1JNQVRfV0VCOgogCQlzaG93X2h0bWxfcGFnZShhcmd2WzBdKTsKKwlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwppbmRleCA4OWE1ZGRjLi45OWExMmZlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCkBAIC0xNSw2ICsxNSw5IEBACiAjaW5jbHVkZSAidXRpbC9zdHJpbmcuaCIKIAogI2luY2x1ZGUgInV0aWwvaGVhZGVyLmgiCisjaW5jbHVkZSAidXRpbC9ldmVudC5oIgorI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL3RyYWNlLWV2ZW50LmgiCiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzY2hlZC5oPgpAQCAtNDIsNyArNDUsNiBAQAogc3RhdGljIGludAkJCWZvcmNlCQkJCT0gMDsKIHN0YXRpYyBpbnQJCQlhcHBlbmRfZmlsZQkJCT0gMDsKIHN0YXRpYyBpbnQJCQljYWxsX2dyYXBoCQkJPSAwOwotc3RhdGljIGludAkJCXZlcmJvc2UJCQkJPSAwOwogc3RhdGljIGludAkJCWluaGVyaXRfc3RhdAkJCT0gMDsKIHN0YXRpYyBpbnQJCQlub19zYW1wbGVzCQkJPSAwOwogc3RhdGljIGludAkJCXNhbXBsZV9hZGRyZXNzCQkJPSAwOwpAQCAtNjIsMjQgKzY0LDYgQEAKIAogc3RydWN0IHBlcmZfaGVhZGVyCQkqaGVhZGVyOwogCi1zdHJ1Y3QgbW1hcF9ldmVudCB7Ci0Jc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQl1MzIJCQkJcGlkOwotCXUzMgkJCQl0aWQ7Ci0JdTY0CQkJCXN0YXJ0OwotCXU2NAkJCQlsZW47Ci0JdTY0CQkJCXBnb2ZmOwotCWNoYXIJCQkJZmlsZW5hbWVbUEFUSF9NQVhdOwotfTsKLQotc3RydWN0IGNvbW1fZXZlbnQgewotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7Ci0JdTMyCQkJCXBpZDsKLQl1MzIJCQkJdGlkOwotCWNoYXIJCQkJY29tbVsxNl07Ci19OwotCi0KIHN0cnVjdCBtbWFwX2RhdGEgewogCWludAkJCWNvdW50ZXI7CiAJdm9pZAkJCSpiYXNlOwpAQCAtNDE5LDggKzQwMywxMSBAQAogCWlmIChjYWxsX2dyYXBoKQogCQlhdHRyLT5zYW1wbGVfdHlwZQl8PSBQRVJGX1NBTVBMRV9DQUxMQ0hBSU47CiAKLQlpZiAocmF3X3NhbXBsZXMpCisJaWYgKHJhd19zYW1wbGVzKSB7CisJCWF0dHItPnNhbXBsZV90eXBlCXw9IFBFUkZfU0FNUExFX1RJTUU7CiAJCWF0dHItPnNhbXBsZV90eXBlCXw9IFBFUkZfU0FNUExFX1JBVzsKKwkJYXR0ci0+c2FtcGxlX3R5cGUJfD0gUEVSRl9TQU1QTEVfQ1BVOworCX0KIAogCWF0dHItPm1tYXAJCT0gdHJhY2s7CiAJYXR0ci0+Y29tbQkJPSB0cmFjazsKQEAgLTU2Myw2ICs1NTAsMTcgQEAKIAllbHNlCiAJCWhlYWRlciA9IHBlcmZfaGVhZGVyX19uZXcoKTsKIAorCisJaWYgKHJhd19zYW1wbGVzKSB7CisJCXJlYWRfdHJhY2luZ19kYXRhKGF0dHJzLCBucl9jb3VudGVycyk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IG5yX2NvdW50ZXJzOyBpKyspIHsKKwkJCWlmIChhdHRyc1tpXS5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykgeworCQkJCXJlYWRfdHJhY2luZ19kYXRhKGF0dHJzLCBucl9jb3VudGVycyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CiAJYXRleGl0KGF0ZXhpdF9oZWFkZXIpOwogCiAJaWYgKCFzeXN0ZW1fd2lkZSkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCmluZGV4IDhiMmVjODguLmNkZjlhOGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKQEAgLTE3LDE5ICsxNywxOCBAQAogI2luY2x1ZGUgInV0aWwvc3RyaW5nLmgiCiAjaW5jbHVkZSAidXRpbC9jYWxsY2hhaW4uaCIKICNpbmNsdWRlICJ1dGlsL3N0cmxpc3QuaCIKKyNpbmNsdWRlICJ1dGlsL3ZhbHVlcy5oIgogCiAjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKICNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgogCiAjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCiAjaW5jbHVkZSAidXRpbC9wYXJzZS1ldmVudHMuaCIKIAotI2RlZmluZSBTSE9XX0tFUk5FTAkxCi0jZGVmaW5lIFNIT1dfVVNFUgkyCi0jZGVmaW5lIFNIT1dfSFYJCTQKKyNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgogCiBzdGF0aWMgY2hhcgkJY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKLXN0YXRpYyBjaGFyCQkqdm1saW51eCA9IE5VTEw7CiAKIHN0YXRpYyBjaGFyCQlkZWZhdWx0X3NvcnRfb3JkZXJbXSA9ICJjb21tLGRzbyxzeW1ib2wiOwogc3RhdGljIGNoYXIJCSpzb3J0X29yZGVyID0gZGVmYXVsdF9zb3J0X29yZGVyOwpAQCAtNDIsMTggKzQxLDE1IEBACiBzdGF0aWMgaW50CQlpbnB1dDsKIHN0YXRpYyBpbnQJCXNob3dfbWFzayA9IFNIT1dfS0VSTkVMIHwgU0hPV19VU0VSIHwgU0hPV19IVjsKIAotc3RhdGljIGludAkJZHVtcF90cmFjZSA9IDA7Ci0jZGVmaW5lIGRwcmludGYoeC4uLikJZG8geyBpZiAoZHVtcF90cmFjZSkgcHJpbnRmKHgpOyB9IHdoaWxlICgwKQotI2RlZmluZSBjZHByaW50Zih4Li4uKQlkbyB7IGlmIChkdW1wX3RyYWNlKSBjb2xvcl9mcHJpbnRmKHN0ZG91dCwgY29sb3IsIHgpOyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW50CQl2ZXJib3NlOwotI2RlZmluZSBlcHJpbnRmKHguLi4pCWRvIHsgaWYgKHZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCB4KTsgfSB3aGlsZSAoMCkKLQotc3RhdGljIGludAkJbW9kdWxlczsKLQogc3RhdGljIGludAkJZnVsbF9wYXRoczsKIHN0YXRpYyBpbnQJCXNob3dfbnJfc2FtcGxlczsKIAorc3RhdGljIGludAkJc2hvd190aHJlYWRzOworc3RhdGljIHN0cnVjdCBwZXJmX3JlYWRfdmFsdWVzCXNob3dfdGhyZWFkc192YWx1ZXM7CisKK3N0YXRpYyBjaGFyCQlkZWZhdWx0X3ByZXR0eV9wcmludGluZ19zdHlsZVtdID0gIm5vcm1hbCI7CitzdGF0aWMgY2hhcgkJKnByZXR0eV9wcmludGluZ19zdHlsZSA9IGRlZmF1bHRfcHJldHR5X3ByaW50aW5nX3N0eWxlOworCiBzdGF0aWMgdW5zaWduZWQgbG9uZwlwYWdlX3NpemU7CiBzdGF0aWMgdW5zaWduZWQgbG9uZwltbWFwX3dpbmRvdyA9IDMyOwogCkBAIC02Nyw2ICs2MywxNSBAQAogCiBzdGF0aWMgaW50CQljYWxsY2hhaW47CiAKK3N0YXRpYyBjaGFyCQlfX2N3ZFtQQVRIX01BWF07CitzdGF0aWMgY2hhcgkJKmN3ZCA9IF9fY3dkOworc3RhdGljIGludAkJY3dkbGVuOworCitzdGF0aWMgc3RydWN0IHJiX3Jvb3QJdGhyZWFkczsKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkCSpsYXN0X21hdGNoOworCitzdGF0aWMgc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXI7CisKIHN0YXRpYwogc3RydWN0IGNhbGxjaGFpbl9wYXJhbQljYWxsY2hhaW5fcGFyYW0gPSB7CiAJLm1vZGUJPSBDSEFJTl9HUkFQSF9SRUwsCkBAIC03NSw1OSArODAsNiBAQAogCiBzdGF0aWMgdTY0CQlzYW1wbGVfdHlwZTsKIAotc3RydWN0IGlwX2V2ZW50IHsKLQlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgaGVhZGVyOwotCXU2NCBpcDsKLQl1MzIgcGlkLCB0aWQ7Ci0JdW5zaWduZWQgY2hhciBfX21vcmVfZGF0YVtdOwotfTsKLQotc3RydWN0IG1tYXBfZXZlbnQgewotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7Ci0JdTMyIHBpZCwgdGlkOwotCXU2NCBzdGFydDsKLQl1NjQgbGVuOwotCXU2NCBwZ29mZjsKLQljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKLX07Ci0KLXN0cnVjdCBjb21tX2V2ZW50IHsKLQlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgaGVhZGVyOwotCXUzMiBwaWQsIHRpZDsKLQljaGFyIGNvbW1bMTZdOwotfTsKLQotc3RydWN0IGZvcmtfZXZlbnQgewotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7Ci0JdTMyIHBpZCwgcHBpZDsKLQl1MzIgdGlkLCBwdGlkOwotfTsKLQotc3RydWN0IGxvc3RfZXZlbnQgewotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7Ci0JdTY0IGlkOwotCXU2NCBsb3N0OwotfTsKLQotc3RydWN0IHJlYWRfZXZlbnQgewotCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7Ci0JdTMyIHBpZCx0aWQ7Ci0JdTY0IHZhbHVlOwotCXU2NCB0aW1lX2VuYWJsZWQ7Ci0JdTY0IHRpbWVfcnVubmluZzsKLQl1NjQgaWQ7Ci19OwotCi10eXBlZGVmIHVuaW9uIGV2ZW50X3VuaW9uIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwotCXN0cnVjdCBpcF9ldmVudAkJCWlwOwotCXN0cnVjdCBtbWFwX2V2ZW50CQltbWFwOwotCXN0cnVjdCBjb21tX2V2ZW50CQljb21tOwotCXN0cnVjdCBmb3JrX2V2ZW50CQlmb3JrOwotCXN0cnVjdCBsb3N0X2V2ZW50CQlsb3N0OwotCXN0cnVjdCByZWFkX2V2ZW50CQlyZWFkOwotfSBldmVudF90OwotCiBzdGF0aWMgaW50IHJlcHNlcF9mcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAlpbnQgbjsKQEAgLTE0MSw2ICs5Myw3IEBACiAJCW4gPSB2YXNwcmludGYoJmJmLCBmbXQsIGFwKTsKIAkJaWYgKG4gPiAwKSB7CiAJCQljaGFyICpzZXAgPSBiZjsKKwogCQkJd2hpbGUgKDEpIHsKIAkJCQlzZXAgPSBzdHJjaHIoc2VwLCAqZmllbGRfc2VwKTsKIAkJCQlpZiAoc2VwID09IE5VTEwpCkBAIC0xNTUsMzk2ICsxMDgsMTAgQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIExJU1RfSEVBRChkc29zKTsKLXN0YXRpYyBzdHJ1Y3QgZHNvICprZXJuZWxfZHNvOwotc3RhdGljIHN0cnVjdCBkc28gKnZkc287Ci1zdGF0aWMgc3RydWN0IGRzbyAqaHlwZXJ2aXNvcl9kc287Ci0KLXN0YXRpYyB2b2lkIGRzb3NfX2FkZChzdHJ1Y3QgZHNvICpkc28pCi17Ci0JbGlzdF9hZGRfdGFpbCgmZHNvLT5ub2RlLCAmZHNvcyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHNvICpkc29zX19maW5kKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGRzbyAqcG9zOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZkc29zLCBub2RlKQotCQlpZiAoc3RyY21wKHBvcy0+bmFtZSwgbmFtZSkgPT0gMCkKLQkJCXJldHVybiBwb3M7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHNvICpkc29zX19maW5kbmV3KGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGRzbyAqZHNvID0gZHNvc19fZmluZChuYW1lKTsKLQlpbnQgbnI7Ci0KLQlpZiAoZHNvKQotCQlyZXR1cm4gZHNvOwotCi0JZHNvID0gZHNvX19uZXcobmFtZSwgMCk7Ci0JaWYgKCFkc28pCi0JCWdvdG8gb3V0X2RlbGV0ZV9kc287Ci0KLQluciA9IGRzb19fbG9hZChkc28sIE5VTEwsIHZlcmJvc2UpOwotCWlmIChuciA8IDApIHsKLQkJZXByaW50ZigiRmFpbGVkIHRvIG9wZW46ICVzXG4iLCBuYW1lKTsKLQkJZ290byBvdXRfZGVsZXRlX2RzbzsKLQl9Ci0JaWYgKCFucikKLQkJZXByaW50ZigiTm8gc3ltYm9scyBmb3VuZCBpbjogJXMsIG1heWJlIGluc3RhbGwgYSBkZWJ1ZyBwYWNrYWdlP1xuIiwgbmFtZSk7Ci0KLQlkc29zX19hZGQoZHNvKTsKLQotCXJldHVybiBkc287Ci0KLW91dF9kZWxldGVfZHNvOgotCWRzb19fZGVsZXRlKGRzbyk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzb3NfX2ZwcmludGYoRklMRSAqZnApCi17Ci0Jc3RydWN0IGRzbyAqcG9zOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZkc29zLCBub2RlKQotCQlkc29fX2ZwcmludGYocG9zLCBmcCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICp2ZHNvX19maW5kX3N5bWJvbChzdHJ1Y3QgZHNvICpkc28sIHU2NCBpcCkKLXsKLQlyZXR1cm4gZHNvX19maW5kX3N5bWJvbChkc28sIGlwKTsKLX0KLQotc3RhdGljIGludCBsb2FkX2tlcm5lbCh2b2lkKQotewotCWludCBlcnI7Ci0KLQlrZXJuZWxfZHNvID0gZHNvX19uZXcoIltrZXJuZWxdIiwgMCk7Ci0JaWYgKCFrZXJuZWxfZHNvKQotCQlyZXR1cm4gLTE7Ci0KLQllcnIgPSBkc29fX2xvYWRfa2VybmVsKGtlcm5lbF9kc28sIHZtbGludXgsIE5VTEwsIHZlcmJvc2UsIG1vZHVsZXMpOwotCWlmIChlcnIgPD0gMCkgewotCQlkc29fX2RlbGV0ZShrZXJuZWxfZHNvKTsKLQkJa2VybmVsX2RzbyA9IE5VTEw7Ci0JfSBlbHNlCi0JCWRzb3NfX2FkZChrZXJuZWxfZHNvKTsKLQotCXZkc28gPSBkc29fX25ldygiW3Zkc29dIiwgMCk7Ci0JaWYgKCF2ZHNvKQotCQlyZXR1cm4gLTE7Ci0KLQl2ZHNvLT5maW5kX3N5bWJvbCA9IHZkc29fX2ZpbmRfc3ltYm9sOwotCi0JZHNvc19fYWRkKHZkc28pOwotCi0JaHlwZXJ2aXNvcl9kc28gPSBkc29fX25ldygiW2h5cGVydmlzb3JdIiwgMCk7Ci0JaWYgKCFoeXBlcnZpc29yX2RzbykKLQkJcmV0dXJuIC0xOwotCWRzb3NfX2FkZChoeXBlcnZpc29yX2Rzbyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgY2hhciBfX2N3ZFtQQVRIX01BWF07Ci1zdGF0aWMgY2hhciAqY3dkID0gX19jd2Q7Ci1zdGF0aWMgaW50IGN3ZGxlbjsKLQotc3RhdGljIGludCBzdHJjb21tb24oY29uc3QgY2hhciAqcGF0aG5hbWUpCi17Ci0JaW50IG4gPSAwOwotCi0Jd2hpbGUgKG4gPCBjd2RsZW4gJiYgcGF0aG5hbWVbbl0gPT0gY3dkW25dKQotCQkrK247Ci0KLQlyZXR1cm4gbjsKLX0KLQotc3RydWN0IG1hcCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCXU2NAkgc3RhcnQ7Ci0JdTY0CSBlbmQ7Ci0JdTY0CSBwZ29mZjsKLQl1NjQJICgqbWFwX2lwKShzdHJ1Y3QgbWFwICosIHU2NCk7Ci0Jc3RydWN0IGRzbwkgKmRzbzsKLX07Ci0KLXN0YXRpYyB1NjQgbWFwX19tYXBfaXAoc3RydWN0IG1hcCAqbWFwLCB1NjQgaXApCi17Ci0JcmV0dXJuIGlwIC0gbWFwLT5zdGFydCArIG1hcC0+cGdvZmY7Ci19Ci0KLXN0YXRpYyB1NjQgdmRzb19fbWFwX2lwKHN0cnVjdCBtYXAgKm1hcCBfX3VzZWQsIHU2NCBpcCkKLXsKLQlyZXR1cm4gaXA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2Fub25fbWVtb3J5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotCXJldHVybiBzdHJjbXAoZmlsZW5hbWUsICIvL2Fub24iKSA9PSAwOwotfQotCi1zdGF0aWMgc3RydWN0IG1hcCAqbWFwX19uZXcoc3RydWN0IG1tYXBfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCBtYXAgKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7Ci0KLQlpZiAoc2VsZiAhPSBOVUxMKSB7Ci0JCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gZXZlbnQtPmZpbGVuYW1lOwotCQljaGFyIG5ld2ZpbGVuYW1lW1BBVEhfTUFYXTsKLQkJaW50IGFub247Ci0KLQkJaWYgKGN3ZCkgewotCQkJaW50IG4gPSBzdHJjb21tb24oZmlsZW5hbWUpOwotCi0JCQlpZiAobiA9PSBjd2RsZW4pIHsKLQkJCQlzbnByaW50ZihuZXdmaWxlbmFtZSwgc2l6ZW9mKG5ld2ZpbGVuYW1lKSwKLQkJCQkJICIuJXMiLCBmaWxlbmFtZSArIG4pOwotCQkJCWZpbGVuYW1lID0gbmV3ZmlsZW5hbWU7Ci0JCQl9Ci0JCX0KLQotCQlhbm9uID0gaXNfYW5vbl9tZW1vcnkoZmlsZW5hbWUpOwotCi0JCWlmIChhbm9uKSB7Ci0JCQlzbnByaW50ZihuZXdmaWxlbmFtZSwgc2l6ZW9mKG5ld2ZpbGVuYW1lKSwgIi90bXAvcGVyZi0lZC5tYXAiLCBldmVudC0+cGlkKTsKLQkJCWZpbGVuYW1lID0gbmV3ZmlsZW5hbWU7Ci0JCX0KLQotCQlzZWxmLT5zdGFydCA9IGV2ZW50LT5zdGFydDsKLQkJc2VsZi0+ZW5kICAgPSBldmVudC0+c3RhcnQgKyBldmVudC0+bGVuOwotCQlzZWxmLT5wZ29mZiA9IGV2ZW50LT5wZ29mZjsKLQotCQlzZWxmLT5kc28gPSBkc29zX19maW5kbmV3KGZpbGVuYW1lKTsKLQkJaWYgKHNlbGYtPmRzbyA9PSBOVUxMKQotCQkJZ290byBvdXRfZGVsZXRlOwotCi0JCWlmIChzZWxmLT5kc28gPT0gdmRzbyB8fCBhbm9uKQotCQkJc2VsZi0+bWFwX2lwID0gdmRzb19fbWFwX2lwOwotCQllbHNlCi0JCQlzZWxmLT5tYXBfaXAgPSBtYXBfX21hcF9pcDsKLQl9Ci0JcmV0dXJuIHNlbGY7Ci1vdXRfZGVsZXRlOgotCWZyZWUoc2VsZik7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwICptYXBfX2Nsb25lKHN0cnVjdCBtYXAgKnNlbGYpCi17Ci0Jc3RydWN0IG1hcCAqbWFwID0gbWFsbG9jKHNpemVvZigqc2VsZikpOwotCi0JaWYgKCFtYXApCi0JCXJldHVybiBOVUxMOwotCi0JbWVtY3B5KG1hcCwgc2VsZiwgc2l6ZW9mKCpzZWxmKSk7Ci0KLQlyZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgaW50IG1hcF9fb3ZlcmxhcChzdHJ1Y3QgbWFwICpsLCBzdHJ1Y3QgbWFwICpyKQotewotCWlmIChsLT5zdGFydCA+IHItPnN0YXJ0KSB7Ci0JCXN0cnVjdCBtYXAgKnQgPSBsOwotCQlsID0gcjsKLQkJciA9IHQ7Ci0JfQotCi0JaWYgKGwtPmVuZCA+IHItPnN0YXJ0KQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc2l6ZV90IG1hcF9fZnByaW50ZihzdHJ1Y3QgbWFwICpzZWxmLCBGSUxFICpmcCkKLXsKLQlyZXR1cm4gZnByaW50ZihmcCwgIiAlTHgtJUx4ICVMeCAlc1xuIiwKLQkJICAgICAgIHNlbGYtPnN0YXJ0LCBzZWxmLT5lbmQsIHNlbGYtPnBnb2ZmLCBzZWxmLT5kc28tPm5hbWUpOwotfQotCi0KLXN0cnVjdCB0aHJlYWQgewotCXN0cnVjdCByYl9ub2RlCSByYl9ub2RlOwotCXN0cnVjdCBsaXN0X2hlYWQgbWFwczsKLQlwaWRfdAkJIHBpZDsKLQljaGFyCQkgKmNvbW07Ci19OwotCi1zdGF0aWMgc3RydWN0IHRocmVhZCAqdGhyZWFkX19uZXcocGlkX3QgcGlkKQotewotCXN0cnVjdCB0aHJlYWQgKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7Ci0KLQlpZiAoc2VsZiAhPSBOVUxMKSB7Ci0JCXNlbGYtPnBpZCA9IHBpZDsKLQkJc2VsZi0+Y29tbSA9IG1hbGxvYygzMik7Ci0JCWlmIChzZWxmLT5jb21tKQotCQkJc25wcmludGYoc2VsZi0+Y29tbSwgMzIsICI6JWQiLCBzZWxmLT5waWQpOwotCQlJTklUX0xJU1RfSEVBRCgmc2VsZi0+bWFwcyk7Ci0JfQotCi0JcmV0dXJuIHNlbGY7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZHNvc19fY29sX3dpZHRoLAogCQkgICAgY29tbXNfX2NvbF93aWR0aCwKIAkJICAgIHRocmVhZHNfX2NvbF93aWR0aDsKIAotc3RhdGljIGludCB0aHJlYWRfX3NldF9jb21tKHN0cnVjdCB0aHJlYWQgKnNlbGYsIGNvbnN0IGNoYXIgKmNvbW0pCi17Ci0JaWYgKHNlbGYtPmNvbW0pCi0JCWZyZWUoc2VsZi0+Y29tbSk7Ci0Jc2VsZi0+Y29tbSA9IHN0cmR1cChjb21tKTsKLQlpZiAoIXNlbGYtPmNvbW0pCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKCFjb2xfd2lkdGhfbGlzdF9zdHIgJiYgIWZpZWxkX3NlcCAmJgotCSAgICAoIWNvbW1fbGlzdCB8fCBzdHJsaXN0X19oYXNfZW50cnkoY29tbV9saXN0LCBjb21tKSkpIHsKLQkJdW5zaWduZWQgaW50IHNsZW4gPSBzdHJsZW4oY29tbSk7Ci0JCWlmIChzbGVuID4gY29tbXNfX2NvbF93aWR0aCkgewotCQkJY29tbXNfX2NvbF93aWR0aCA9IHNsZW47Ci0JCQl0aHJlYWRzX19jb2xfd2lkdGggPSBzbGVuICsgNjsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc2l6ZV90IHRocmVhZF9fZnByaW50ZihzdHJ1Y3QgdGhyZWFkICpzZWxmLCBGSUxFICpmcCkKLXsKLQlzdHJ1Y3QgbWFwICpwb3M7Ci0Jc2l6ZV90IHJldCA9IGZwcmludGYoZnAsICJUaHJlYWQgJWQgJXNcbiIsIHNlbGYtPnBpZCwgc2VsZi0+Y29tbSk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnNlbGYtPm1hcHMsIG5vZGUpCi0JCXJldCArPSBtYXBfX2ZwcmludGYocG9zLCBmcCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgcmJfcm9vdCB0aHJlYWRzOwotc3RhdGljIHN0cnVjdCB0aHJlYWQgKmxhc3RfbWF0Y2g7Ci0KLXN0YXRpYyBzdHJ1Y3QgdGhyZWFkICp0aHJlYWRzX19maW5kbmV3KHBpZF90IHBpZCkKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmdGhyZWFkcy5yYl9ub2RlOwotCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwotCXN0cnVjdCB0aHJlYWQgKnRoOwotCi0JLyoKLQkgKiBGb250LWVuZCBjYWNoZSAtIFBJRCBsb29rdXBzIGNvbWUgaW4gYmxvY2tzLAotCSAqIHNvIG1vc3Qgb2YgdGhlIHRpbWUgd2UgZG9udCBoYXZlIHRvIGxvb2sgdXAKLQkgKiB0aGUgZnVsbCByYnRyZWU6Ci0JICovCi0JaWYgKGxhc3RfbWF0Y2ggJiYgbGFzdF9tYXRjaC0+cGlkID09IHBpZCkKLQkJcmV0dXJuIGxhc3RfbWF0Y2g7Ci0KLQl3aGlsZSAoKnAgIT0gTlVMTCkgewotCQlwYXJlbnQgPSAqcDsKLQkJdGggPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCB0aHJlYWQsIHJiX25vZGUpOwotCi0JCWlmICh0aC0+cGlkID09IHBpZCkgewotCQkJbGFzdF9tYXRjaCA9IHRoOwotCQkJcmV0dXJuIHRoOwotCQl9Ci0KLQkJaWYgKHBpZCA8IHRoLT5waWQpCi0JCQlwID0gJigqcCktPnJiX2xlZnQ7Ci0JCWVsc2UKLQkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7Ci0JfQotCi0JdGggPSB0aHJlYWRfX25ldyhwaWQpOwotCWlmICh0aCAhPSBOVUxMKSB7Ci0JCXJiX2xpbmtfbm9kZSgmdGgtPnJiX25vZGUsIHBhcmVudCwgcCk7Ci0JCXJiX2luc2VydF9jb2xvcigmdGgtPnJiX25vZGUsICZ0aHJlYWRzKTsKLQkJbGFzdF9tYXRjaCA9IHRoOwotCX0KLQotCXJldHVybiB0aDsKLX0KLQotc3RhdGljIHZvaWQgdGhyZWFkX19pbnNlcnRfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCkKLXsKLQlzdHJ1Y3QgbWFwICpwb3MsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB0bXAsICZzZWxmLT5tYXBzLCBub2RlKSB7Ci0JCWlmIChtYXBfX292ZXJsYXAocG9zLCBtYXApKSB7Ci0JCQlpZiAodmVyYm9zZSA+PSAyKSB7Ci0JCQkJcHJpbnRmKCJvdmVybGFwcGluZyBtYXBzOlxuIik7Ci0JCQkJbWFwX19mcHJpbnRmKG1hcCwgc3Rkb3V0KTsKLQkJCQltYXBfX2ZwcmludGYocG9zLCBzdGRvdXQpOwotCQkJfQotCi0JCQlpZiAobWFwLT5zdGFydCA8PSBwb3MtPnN0YXJ0ICYmIG1hcC0+ZW5kID4gcG9zLT5zdGFydCkKLQkJCQlwb3MtPnN0YXJ0ID0gbWFwLT5lbmQ7Ci0KLQkJCWlmIChtYXAtPmVuZCA+PSBwb3MtPmVuZCAmJiBtYXAtPnN0YXJ0IDwgcG9zLT5lbmQpCi0JCQkJcG9zLT5lbmQgPSBtYXAtPnN0YXJ0OwotCi0JCQlpZiAodmVyYm9zZSA+PSAyKSB7Ci0JCQkJcHJpbnRmKCJhZnRlciBjb2xsaXNpb246XG4iKTsKLQkJCQltYXBfX2ZwcmludGYocG9zLCBzdGRvdXQpOwotCQkJfQotCi0JCQlpZiAocG9zLT5zdGFydCA+PSBwb3MtPmVuZCkgewotCQkJCWxpc3RfZGVsX2luaXQoJnBvcy0+bm9kZSk7Ci0JCQkJZnJlZShwb3MpOwotCQkJfQotCQl9Ci0JfQotCi0JbGlzdF9hZGRfdGFpbCgmbWFwLT5ub2RlLCAmc2VsZi0+bWFwcyk7Ci19Ci0KLXN0YXRpYyBpbnQgdGhyZWFkX19mb3JrKHN0cnVjdCB0aHJlYWQgKnNlbGYsIHN0cnVjdCB0aHJlYWQgKnBhcmVudCkKLXsKLQlzdHJ1Y3QgbWFwICptYXA7Ci0KLQlpZiAoc2VsZi0+Y29tbSkKLQkJZnJlZShzZWxmLT5jb21tKTsKLQlzZWxmLT5jb21tID0gc3RyZHVwKHBhcmVudC0+Y29tbSk7Ci0JaWYgKCFzZWxmLT5jb21tKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkobWFwLCAmcGFyZW50LT5tYXBzLCBub2RlKSB7Ci0JCXN0cnVjdCBtYXAgKm5ldyA9IG1hcF9fY2xvbmUobWFwKTsKLQkJaWYgKCFuZXcpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJdGhyZWFkX19pbnNlcnRfbWFwKHNlbGYsIG5ldyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwICp0aHJlYWRfX2ZpbmRfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsIHU2NCBpcCkKLXsKLQlzdHJ1Y3QgbWFwICpwb3M7Ci0KLQlpZiAoc2VsZiA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmc2VsZi0+bWFwcywgbm9kZSkKLQkJaWYgKGlwID49IHBvcy0+c3RhcnQgJiYgaXAgPD0gcG9zLT5lbmQpCi0JCQlyZXR1cm4gcG9zOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzaXplX3QgdGhyZWFkc19fZnByaW50ZihGSUxFICpmcCkKLXsKLQlzaXplX3QgcmV0ID0gMDsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmQ7Ci0KLQlmb3IgKG5kID0gcmJfZmlyc3QoJnRocmVhZHMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewotCQlzdHJ1Y3QgdGhyZWFkICpwb3MgPSByYl9lbnRyeShuZCwgc3RydWN0IHRocmVhZCwgcmJfbm9kZSk7Ci0KLQkJcmV0ICs9IHRocmVhZF9fZnByaW50Zihwb3MsIGZwKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCiAvKgogICogaGlzdG9ncmFtLCBzb3J0ZWQgb24gaXRlbSwgY29sbGVjdHMgY291bnRzCiAgKi8KQEAgLTU3NCw3ICsxNDEsNyBAQAogc3RydWN0IHNvcnRfZW50cnkgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAotCWNoYXIgKmhlYWRlcjsKKwljb25zdCBjaGFyICpoZWFkZXI7CiAKIAlpbnQ2NF90ICgqY21wKShzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKIAlpbnQ2NF90ICgqY29sbGFwc2UpKHN0cnVjdCBoaXN0X2VudHJ5ICosIHN0cnVjdCBoaXN0X2VudHJ5ICopOwpAQCAtNzU4LDcgKzMyNSw3IEBACiBzdGF0aWMgaW50IHNvcnRfX2hhc19wYXJlbnQgPSAwOwogCiBzdHJ1Y3Qgc29ydF9kaW1lbnNpb24gewotCWNoYXIJCQkqbmFtZTsKKwljb25zdCBjaGFyCQkqbmFtZTsKIAlzdHJ1Y3Qgc29ydF9lbnRyeQkqZW50cnk7CiAJaW50CQkJdGFrZW47CiB9OwpAQCAtNzczLDcgKzM0MCw3IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoaGlzdF9lbnRyeV9fc29ydF9saXN0KTsKIAotc3RhdGljIGludCBzb3J0X2RpbWVuc2lvbl9fYWRkKGNoYXIgKnRvaykKK3N0YXRpYyBpbnQgc29ydF9kaW1lbnNpb25fX2FkZChjb25zdCBjaGFyICp0b2spCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKQEAgLTEwMzIsNiArNTk5LDcgQEAKIAkJY2FzZSBDSEFJTl9HUkFQSF9SRUw6CiAJCQlyZXQgKz0gY2FsbGNoYWluX19mcHJpbnRmX2dyYXBoKGZwLCBjaGFpbiwKIAkJCQkJCQl0b3RhbF9zYW1wbGVzLCAxLCAxKTsKKwkJY2FzZSBDSEFJTl9OT05FOgogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KQEAgLTEwOTgsNiArNjY2LDM0IEBACiAJc2VsZi0+c2xlbl9jYWxjdWxhdGVkID0gMTsKIH0KIAorc3RhdGljIHZvaWQgdGhyZWFkX19jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmKQoreworCWNoYXIgKmNvbW0gPSBzZWxmLT5jb21tOworCisJaWYgKCFjb2xfd2lkdGhfbGlzdF9zdHIgJiYgIWZpZWxkX3NlcCAmJgorCSAgICAoIWNvbW1fbGlzdCB8fCBzdHJsaXN0X19oYXNfZW50cnkoY29tbV9saXN0LCBjb21tKSkpIHsKKwkJdW5zaWduZWQgaW50IHNsZW4gPSBzdHJsZW4oY29tbSk7CisKKwkJaWYgKHNsZW4gPiBjb21tc19fY29sX3dpZHRoKSB7CisJCQljb21tc19fY29sX3dpZHRoID0gc2xlbjsKKwkJCXRocmVhZHNfX2NvbF93aWR0aCA9IHNsZW4gKyA2OworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHRocmVhZF9fc2V0X2NvbW1fYWRqdXN0KHN0cnVjdCB0aHJlYWQgKnNlbGYsIGNvbnN0IGNoYXIgKmNvbW0pCit7CisJaW50IHJldCA9IHRocmVhZF9fc2V0X2NvbW0oc2VsZiwgY29tbSk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdGhyZWFkX19jb21tX2FkanVzdChzZWxmKTsKKworCXJldHVybiAwOworfQorCisKIHN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICoKIHJlc29sdmVfc3ltYm9sKHN0cnVjdCB0aHJlYWQgKnRocmVhZCwgc3RydWN0IG1hcCAqKm1hcHAsCiAJICAgICAgIHN0cnVjdCBkc28gKipkc29wLCB1NjQgKmlwcCkKQEAgLTExNDEsOCArNzM3LDggQEAKIAkJaWYgKChsb25nIGxvbmcpaXAgPCAwKQogCQlkc28gPSBrZXJuZWxfZHNvOwogCX0KLQlkcHJpbnRmKCIgLi4uLi4uIGRzbzogJXNcbiIsIGRzbyA/IGRzby0+bmFtZSA6ICI8bm90IGZvdW5kPiIpOwotCWRwcmludGYoIiAuLi4uLi4gbWFwOiAlTHggLT4gJUx4XG4iLCAqaXBwLCBpcCk7CisJZHVtcF9wcmludGYoIiAuLi4uLi4gZHNvOiAlc1xuIiwgZHNvID8gZHNvLT5uYW1lIDogIjxub3QgZm91bmQ+Iik7CisJZHVtcF9wcmludGYoIiAuLi4uLi4gbWFwOiAlTHggLT4gJUx4XG4iLCAqaXBwLCBpcCk7CiAJKmlwcCAgPSBpcDsKIAogCWlmIChkc29wKQpAQCAtMTM5OCw2ICs5OTQsOSBAQAogCXNpemVfdCByZXQgPSAwOwogCXVuc2lnbmVkIGludCB3aWR0aDsKIAljaGFyICpjb2xfd2lkdGggPSBjb2xfd2lkdGhfbGlzdF9zdHI7CisJaW50IHJhd19wcmludGluZ19zdHlsZTsKKworCXJhd19wcmludGluZ19zdHlsZSA9ICFzdHJjbXAocHJldHR5X3ByaW50aW5nX3N0eWxlLCAicmF3Iik7CiAKIAlpbml0X3JlbV9oaXRzKCk7CiAKQEAgLTE0NzQsMjAgKzEwNzMsMTMgQEAKIAogCWZyZWUocmVtX3NxX2JyYWNrZXQpOwogCisJaWYgKHNob3dfdGhyZWFkcykKKwkJcGVyZl9yZWFkX3ZhbHVlc19kaXNwbGF5KGZwLCAmc2hvd190aHJlYWRzX3ZhbHVlcywKKwkJCQkJIHJhd19wcmludGluZ19zdHlsZSk7CisKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCByZWdpc3Rlcl9pZGxlX3RocmVhZCh2b2lkKQotewotCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoMCk7Ci0KLQlpZiAodGhyZWFkID09IE5VTEwgfHwKLQkJCXRocmVhZF9fc2V0X2NvbW0odGhyZWFkLCAiW2lkbGVdIikpIHsKLQkJZnByaW50ZihzdGRlcnIsICJwcm9ibGVtIGluc2VydGluZyBpZGxlIHRhc2suXG4iKTsKLQkJZXhpdCgtMSk7Ci0JfQotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RhbCA9IDAsCiAJCSAgICAgdG90YWxfbW1hcCA9IDAsCiAJCSAgICAgdG90YWxfY29tbSA9IDAsCkBAIC0xNTE0LDcgKzExMDYsNyBAQAogCWNoYXIgbGV2ZWw7CiAJaW50IHNob3cgPSAwOwogCXN0cnVjdCBkc28gKmRzbyA9IE5VTEw7Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+aXAucGlkKTsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CiAJdTY0IGlwID0gZXZlbnQtPmlwLmlwOwogCXU2NCBwZXJpb2QgPSAxOwogCXN0cnVjdCBtYXAgKm1hcCA9IE5VTEw7CkBAIC0xNTIyLDEyICsxMTE0LDE0IEBACiAJc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4gPSBOVUxMOwogCWludCBjcHVtb2RlOwogCisJdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+aXAucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOworCiAJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUEVSSU9EKSB7CiAJCXBlcmlvZCA9ICoodTY0ICopbW9yZV9kYXRhOwogCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHU2NCk7CiAJfQogCi0JZHByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9TQU1QTEUgKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9TQU1QTEUgKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKIAkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCiAJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCWV2ZW50LT5oZWFkZXIubWlzYywKQEAgLTE1NDAsNyArMTEzNCw3IEBACiAKIAkJY2hhaW4gPSAodm9pZCAqKW1vcmVfZGF0YTsKIAotCQlkcHJpbnRmKCIuLi4gY2hhaW46IG5yOiVMdVxuIiwgY2hhaW4tPm5yKTsKKwkJZHVtcF9wcmludGYoIi4uLiBjaGFpbjogbnI6JUx1XG4iLCBjaGFpbi0+bnIpOwogCiAJCWlmICh2YWxpZGF0ZV9jaGFpbihjaGFpbiwgZXZlbnQpIDwgMCkgewogCQkJZXByaW50ZigiY2FsbC1jaGFpbiBwcm9ibGVtIHdpdGggZXZlbnQsIHNraXBwaW5nIGl0LlxuIik7CkBAIC0xNTQ5LDExICsxMTQzLDExIEBACiAKIAkJaWYgKGR1bXBfdHJhY2UpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBjaGFpbi0+bnI7IGkrKykKLQkJCQlkcHJpbnRmKCIuLi4uLiAlMmQ6ICUwMTZMeFxuIiwgaSwgY2hhaW4tPmlwc1tpXSk7CisJCQkJZHVtcF9wcmludGYoIi4uLi4uICUyZDogJTAxNkx4XG4iLCBpLCBjaGFpbi0+aXBzW2ldKTsKIAkJfQogCX0KIAotCWRwcmludGYoIiAuLi4gdGhyZWFkOiAlczolZFxuIiwgdGhyZWFkLT5jb21tLCB0aHJlYWQtPnBpZCk7CisJZHVtcF9wcmludGYoIiAuLi4gdGhyZWFkOiAlczolZFxuIiwgdGhyZWFkLT5jb21tLCB0aHJlYWQtPnBpZCk7CiAKIAlpZiAodGhyZWFkID09IE5VTEwpIHsKIAkJZXByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCkBAIC0xNTcyLDcgKzExNjYsNyBAQAogCiAJCWRzbyA9IGtlcm5lbF9kc287CiAKLQkJZHByaW50ZigiIC4uLi4uLiBkc286ICVzXG4iLCBkc28tPm5hbWUpOworCQlkdW1wX3ByaW50ZigiIC4uLi4uLiBkc286ICVzXG4iLCBkc28tPm5hbWUpOwogCiAJfSBlbHNlIGlmIChjcHVtb2RlID09IFBFUkZfRVZFTlRfTUlTQ19VU0VSKSB7CiAKQEAgLTE1ODUsNyArMTE3OSw3IEBACiAKIAkJZHNvID0gaHlwZXJ2aXNvcl9kc287CiAKLQkJZHByaW50ZigiIC4uLi4uLiBkc286IFtoeXBlcnZpc29yXVxuIik7CisJCWR1bXBfcHJpbnRmKCIgLi4uLi4uIGRzbzogW2h5cGVydmlzb3JdXG4iKTsKIAl9CiAKIAlpZiAoc2hvdyAmIHNob3dfbWFzaykgewpAQCAtMTYxMSwxMCArMTIwNSwxMiBAQAogc3RhdGljIGludAogcHJvY2Vzc19tbWFwX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQogewotCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPm1tYXAucGlkKTsKLQlzdHJ1Y3QgbWFwICptYXAgPSBtYXBfX25ldygmZXZlbnQtPm1tYXApOworCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKwlzdHJ1Y3QgbWFwICptYXAgPSBtYXBfX25ldygmZXZlbnQtPm1tYXAsIGN3ZCwgY3dkbGVuKTsKIAotCWRwcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfTU1BUCAlZC8lZDogWyVwKCVwKSBAICVwXTogJXNcbiIsCisJdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+bW1hcC5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9NTUFQICVkLyVkOiBbJXAoJXApIEAgJXBdOiAlc1xuIiwKIAkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCiAJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCWV2ZW50LT5tbWFwLnBpZCwKQEAgLTE2MjUsNyArMTIyMSw3IEBACiAJCWV2ZW50LT5tbWFwLmZpbGVuYW1lKTsKIAogCWlmICh0aHJlYWQgPT0gTlVMTCB8fCBtYXAgPT0gTlVMTCkgewotCQlkcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9FVkVOVF9NTUFQLCBza2lwcGluZyBldmVudC5cbiIpOworCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfRVZFTlRfTU1BUCwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjM4LDE2ICsxMjM0LDE4IEBACiBzdGF0aWMgaW50CiBwcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCiB7Ci0Jc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Y29tbS5waWQpOworCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKIAotCWRwcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfQ09NTTogJXM6JWRcbiIsCisJdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Y29tbS5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9DT01NOiAlczolZFxuIiwKIAkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCiAJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCWV2ZW50LT5jb21tLmNvbW0sIGV2ZW50LT5jb21tLnBpZCk7CiAKIAlpZiAodGhyZWFkID09IE5VTEwgfHwKLQkgICAgdGhyZWFkX19zZXRfY29tbSh0aHJlYWQsIGV2ZW50LT5jb21tLmNvbW0pKSB7Ci0JCWRwcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX0VWRU5UX0NPTU0sIHNraXBwaW5nIGV2ZW50LlxuIik7CisJICAgIHRocmVhZF9fc2V0X2NvbW1fYWRqdXN0KHRocmVhZCwgZXZlbnQtPmNvbW0uY29tbSkpIHsKKwkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX0VWRU5UX0NPTU0sIHNraXBwaW5nIGV2ZW50LlxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJdG90YWxfY29tbSsrOwpAQCAtMTY1OCwxMCArMTI1NiwxMyBAQAogc3RhdGljIGludAogcHJvY2Vzc190YXNrX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQogewotCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmZvcmsucGlkKTsKLQlzdHJ1Y3QgdGhyZWFkICpwYXJlbnQgPSB0aHJlYWRzX19maW5kbmV3KGV2ZW50LT5mb3JrLnBwaWQpOworCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKwlzdHJ1Y3QgdGhyZWFkICpwYXJlbnQ7CiAKLQlkcHJpbnRmKCIlcCBbJXBdOiBQRVJGX0VWRU5UXyVzOiAoJWQ6JWQpOiglZDolZClcbiIsCisJdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Zm9yay5waWQsICZ0aHJlYWRzLCAmbGFzdF9tYXRjaCk7CisJcGFyZW50ID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+Zm9yay5wcGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOworCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfJXM6ICglZDolZCk6KCVkOiVkKVxuIiwKIAkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCiAJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCWV2ZW50LT5oZWFkZXIudHlwZSA9PSBQRVJGX0VWRU5UX0ZPUksgPyAiRk9SSyIgOiAiRVhJVCIsCkBAIC0xNjc5LDcgKzEyODAsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmICghdGhyZWFkIHx8ICFwYXJlbnQgfHwgdGhyZWFkX19mb3JrKHRocmVhZCwgcGFyZW50KSkgewotCQlkcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9FVkVOVF9GT1JLLCBza2lwcGluZyBldmVudC5cbiIpOworCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfRVZFTlRfRk9SSywgc2tpcHBpbmcgZXZlbnQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAl0b3RhbF9mb3JrKys7CkBAIC0xNjkwLDcgKzEyOTEsNyBAQAogc3RhdGljIGludAogcHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQogewotCWRwcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfTE9TVDogaWQ6JUxkOiBsb3N0OiVMZFxuIiwKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9MT1NUOiBpZDolTGQ6IGxvc3Q6JUxkXG4iLAogCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKIAkJZXZlbnQtPmxvc3QuaWQsCkBAIC0xNzAxLDY3ICsxMzAyLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHRyYWNlX2V2ZW50KGV2ZW50X3QgKmV2ZW50KQotewotCXVuc2lnbmVkIGNoYXIgKnJhd19ldmVudCA9ICh2b2lkICopZXZlbnQ7Ci0JY2hhciAqY29sb3IgPSBQRVJGX0NPTE9SX0JMVUU7Ci0JaW50IGksIGo7Ci0KLQlpZiAoIWR1bXBfdHJhY2UpCi0JCXJldHVybjsKLQotCWRwcmludGYoIi4iKTsKLQljZHByaW50ZigiXG4uIC4uLiByYXcgZXZlbnQ6IHNpemUgJWQgYnl0ZXNcbiIsIGV2ZW50LT5oZWFkZXIuc2l6ZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZXZlbnQtPmhlYWRlci5zaXplOyBpKyspIHsKLQkJaWYgKChpICYgMTUpID09IDApIHsKLQkJCWRwcmludGYoIi4iKTsKLQkJCWNkcHJpbnRmKCIgICUwNHg6ICIsIGkpOwotCQl9Ci0KLQkJY2RwcmludGYoIiAlMDJ4IiwgcmF3X2V2ZW50W2ldKTsKLQotCQlpZiAoKChpICYgMTUpID09IDE1KSB8fCBpID09IGV2ZW50LT5oZWFkZXIuc2l6ZS0xKSB7Ci0JCQljZHByaW50ZigiICAiKTsKLQkJCWZvciAoaiA9IDA7IGogPCAxNS0oaSAmIDE1KTsgaisrKQotCQkJCWNkcHJpbnRmKCIgICAiKTsKLQkJCWZvciAoaiA9IDA7IGogPCAoaSAmIDE1KTsgaisrKSB7Ci0JCQkJaWYgKGlzcHJpbnQocmF3X2V2ZW50W2ktMTUral0pKQotCQkJCQljZHByaW50ZigiJWMiLCByYXdfZXZlbnRbaS0xNStqXSk7Ci0JCQkJZWxzZQotCQkJCQljZHByaW50ZigiLiIpOwotCQkJfQotCQkJY2RwcmludGYoIlxuIik7Ci0JCX0KLQl9Ci0JZHByaW50ZigiLlxuIik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGVyZl9oZWFkZXIJKmhlYWRlcjsKLQotc3RhdGljIHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqcGVyZl9oZWFkZXJfX2ZpbmRfYXR0cih1NjQgaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaGVhZGVyLT5hdHRyczsgaSsrKSB7Ci0JCXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICphdHRyID0gaGVhZGVyLT5hdHRyW2ldOwotCQlpbnQgajsKLQotCQlmb3IgKGogPSAwOyBqIDwgYXR0ci0+aWRzOyBqKyspIHsKLQkJCWlmIChhdHRyLT5pZFtqXSA9PSBpZCkKLQkJCQlyZXR1cm4gJmF0dHItPmF0dHI7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGludAogcHJvY2Vzc19yZWFkX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQogewotCXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0ciA9IHBlcmZfaGVhZGVyX19maW5kX2F0dHIoZXZlbnQtPnJlYWQuaWQpOworCXN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0cjsKIAotCWRwcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfUkVBRDogJWQgJWQgJXMgJUx1XG4iLAorCWF0dHIgPSBwZXJmX2hlYWRlcl9fZmluZF9hdHRyKGV2ZW50LT5yZWFkLmlkLCBoZWFkZXIpOworCisJaWYgKHNob3dfdGhyZWFkcykgeworCQljb25zdCBjaGFyICpuYW1lID0gYXR0ciA/IF9fZXZlbnRfbmFtZShhdHRyLT50eXBlLCBhdHRyLT5jb25maWcpCisJCQkJICAgOiAidW5rbm93biI7CisJCXBlcmZfcmVhZF92YWx1ZXNfYWRkX3ZhbHVlKCZzaG93X3RocmVhZHNfdmFsdWVzLAorCQkJCQkgICBldmVudC0+cmVhZC5waWQsIGV2ZW50LT5yZWFkLnRpZCwKKwkJCQkJICAgZXZlbnQtPnJlYWQuaWQsCisJCQkJCSAgIG5hbWUsCisJCQkJCSAgIGV2ZW50LT5yZWFkLnZhbHVlKTsKKwl9CisKKwlkdW1wX3ByaW50ZigiJXAgWyVwXTogUEVSRl9FVkVOVF9SRUFEOiAlZCAlZCAlcyAlTHVcbiIsCiAJCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCQlldmVudC0+cmVhZC5waWQsCkBAIC0xODEzLDM0ICsxMzcxLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1NjQgcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKHZvaWQpCi17Ci0JdTY0IHNhbXBsZV90eXBlID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBoZWFkZXItPmF0dHJzOyBpKyspIHsKLQkJc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKmF0dHIgPSBoZWFkZXItPmF0dHJbaV07Ci0KLQkJaWYgKCFzYW1wbGVfdHlwZSkKLQkJCXNhbXBsZV90eXBlID0gYXR0ci0+YXR0ci5zYW1wbGVfdHlwZTsKLQkJZWxzZSBpZiAoc2FtcGxlX3R5cGUgIT0gYXR0ci0+YXR0ci5zYW1wbGVfdHlwZSkKLQkJCWRpZSgibm9uIG1hdGNoaW5nIHNhbXBsZV90eXBlIik7Ci0JfQotCi0JcmV0dXJuIHNhbXBsZV90eXBlOwotfQotCiBzdGF0aWMgaW50IF9fY21kX3JlcG9ydCh2b2lkKQogewogCWludCByZXQsIHJjID0gRVhJVF9GQUlMVVJFOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGhlYWQsIHNoaWZ0OwotCXN0cnVjdCBzdGF0IHN0YXQ7CisJc3RydWN0IHN0YXQgaW5wdXRfc3RhdDsKKwlzdHJ1Y3QgdGhyZWFkICppZGxlOwogCWV2ZW50X3QgKmV2ZW50OwogCXVpbnQzMl90IHNpemU7CiAJY2hhciAqYnVmOwogCi0JcmVnaXN0ZXJfaWRsZV90aHJlYWQoKTsKKwlpZGxlID0gcmVnaXN0ZXJfaWRsZV90aHJlYWQoJnRocmVhZHMsICZsYXN0X21hdGNoKTsKKwl0aHJlYWRfX2NvbW1fYWRqdXN0KGlkbGUpOworCisJaWYgKHNob3dfdGhyZWFkcykKKwkJcGVyZl9yZWFkX3ZhbHVlc19pbml0KCZzaG93X3RocmVhZHNfdmFsdWVzKTsKIAogCWlucHV0ID0gb3BlbihpbnB1dF9uYW1lLCBPX1JET05MWSk7CiAJaWYgKGlucHV0IDwgMCkgewpAQCAtMTg1MSwxOCArMTM5NywxOCBAQAogCQlleGl0KC0xKTsKIAl9CiAKLQlyZXQgPSBmc3RhdChpbnB1dCwgJnN0YXQpOworCXJldCA9IGZzdGF0KGlucHV0LCAmaW5wdXRfc3RhdCk7CiAJaWYgKHJldCA8IDApIHsKIAkJcGVycm9yKCJmYWlsZWQgdG8gc3RhdCBmaWxlIik7CiAJCWV4aXQoLTEpOwogCX0KIAotCWlmICghZm9yY2UgJiYgKHN0YXQuc3RfdWlkICE9IGdldGV1aWQoKSkpIHsKLQkJZnByaW50ZihzdGRlcnIsICJmaWxlOiAlcyBub3Qgb3duZWQgYnkgY3VycmVudCB1c2VyXG4iLCBpbnB1dF9uYW1lKTsKKwlpZiAoIWZvcmNlICYmIGlucHV0X3N0YXQuc3RfdWlkICYmIChpbnB1dF9zdGF0LnN0X3VpZCAhPSBnZXRldWlkKCkpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZmlsZTogJXMgbm90IG93bmVkIGJ5IGN1cnJlbnQgdXNlciBvciByb290XG4iLCBpbnB1dF9uYW1lKTsKIAkJZXhpdCgtMSk7CiAJfQogCi0JaWYgKCFzdGF0LnN0X3NpemUpIHsKKwlpZiAoIWlucHV0X3N0YXQuc3Rfc2l6ZSkgewogCQlmcHJpbnRmKHN0ZGVyciwgInplcm8tc2l6ZWQgZmlsZSwgbm90aGluZyB0byBkbyFcbiIpOwogCQlleGl0KDApOwogCX0KQEAgLTE4NzAsNyArMTQxNiw3IEBACiAJaGVhZGVyID0gcGVyZl9oZWFkZXJfX3JlYWQoaW5wdXQpOwogCWhlYWQgPSBoZWFkZXItPmRhdGFfb2Zmc2V0OwogCi0Jc2FtcGxlX3R5cGUgPSBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoKTsKKwlzYW1wbGVfdHlwZSA9IHBlcmZfaGVhZGVyX19zYW1wbGVfdHlwZShoZWFkZXIpOwogCiAJaWYgKCEoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pKSB7CiAJCWlmIChzb3J0X19oYXNfcGFyZW50KSB7CkBAIC0xODgwLDcgKzE0MjYsNyBAQAogCQkJZXhpdCgtMSk7CiAJCX0KIAkJaWYgKGNhbGxjaGFpbikgewotCQkJZnByaW50ZihzdGRlcnIsICJzZWxlY3RlZCAtYyBidXQgbm8gY2FsbGNoYWluIGRhdGEuIgorCQkJZnByaW50ZihzdGRlcnIsICJzZWxlY3RlZCAtZyBidXQgbm8gY2FsbGNoYWluIGRhdGEuIgogCQkJCQkiIERpZCB5b3UgY2FsbCBwZXJmIHJlY29yZCB3aXRob3V0IgogCQkJCQkiIC1nP1xuIik7CiAJCQlleGl0KC0xKTsKQEAgLTE5MzAsMTIgKzE0NzYsMTIgQEAKIAkJc2l6ZSA9IDg7CiAKIAlpZiAoaGVhZCArIGV2ZW50LT5oZWFkZXIuc2l6ZSA+PSBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdykgewotCQlpbnQgcmV0OworCQlpbnQgbXVubWFwX3JldDsKIAogCQlzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKIAotCQlyZXQgPSBtdW5tYXAoYnVmLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdyk7Ci0JCWFzc2VydChyZXQgPT0gMCk7CisJCW11bm1hcF9yZXQgPSBtdW5tYXAoYnVmLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdyk7CisJCWFzc2VydChtdW5tYXBfcmV0ID09IDApOwogCiAJCW9mZnNldCArPSBzaGlmdDsKIAkJaGVhZCAtPSBzaGlmdDsKQEAgLTE5NDQsMTQgKzE0OTAsMTQgQEAKIAogCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7CiAKLQlkcHJpbnRmKCJcbiVwIFslcF06IGV2ZW50OiAlZFxuIiwKKwlkdW1wX3ByaW50ZigiXG4lcCBbJXBdOiBldmVudDogJWRcbiIsCiAJCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJCSh2b2lkICopKGxvbmcpZXZlbnQtPmhlYWRlci5zaXplLAogCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKIAogCWlmICghc2l6ZSB8fCBwcm9jZXNzX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpIDwgMCkgewogCi0JCWRwcmludGYoIiVwIFslcF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAorCQlkdW1wX3ByaW50ZigiJXAgWyVwXTogc2tpcHBpbmcgdW5rbm93biBoZWFkZXIgdHlwZTogJWRcbiIsCiAJCQkodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKIAkJCSh2b2lkICopKGxvbmcpKGV2ZW50LT5oZWFkZXIuc2l6ZSksCiAJCQlldmVudC0+aGVhZGVyLnR5cGUpOwpAQCAtMTk3NCwyNSArMTUyMCwyNSBAQAogCWlmIChvZmZzZXQgKyBoZWFkID49IGhlYWRlci0+ZGF0YV9vZmZzZXQgKyBoZWFkZXItPmRhdGFfc2l6ZSkKIAkJZ290byBkb25lOwogCi0JaWYgKG9mZnNldCArIGhlYWQgPCAodW5zaWduZWQgbG9uZylzdGF0LnN0X3NpemUpCisJaWYgKG9mZnNldCArIGhlYWQgPCAodW5zaWduZWQgbG9uZylpbnB1dF9zdGF0LnN0X3NpemUpCiAJCWdvdG8gbW9yZTsKIAogZG9uZToKIAlyYyA9IEVYSVRfU1VDQ0VTUzsKIAljbG9zZShpbnB1dCk7CiAKLQlkcHJpbnRmKCIgICAgICBJUCBldmVudHM6ICUxMGxkXG4iLCB0b3RhbCk7Ci0JZHByaW50ZigiICAgIG1tYXAgZXZlbnRzOiAlMTBsZFxuIiwgdG90YWxfbW1hcCk7Ci0JZHByaW50ZigiICAgIGNvbW0gZXZlbnRzOiAlMTBsZFxuIiwgdG90YWxfY29tbSk7Ci0JZHByaW50ZigiICAgIGZvcmsgZXZlbnRzOiAlMTBsZFxuIiwgdG90YWxfZm9yayk7Ci0JZHByaW50ZigiICAgIGxvc3QgZXZlbnRzOiAlMTBsZFxuIiwgdG90YWxfbG9zdCk7Ci0JZHByaW50ZigiIHVua25vd24gZXZlbnRzOiAlMTBsZFxuIiwgdG90YWxfdW5rbm93bik7CisJZHVtcF9wcmludGYoIiAgICAgIElQIGV2ZW50czogJTEwbGRcbiIsIHRvdGFsKTsKKwlkdW1wX3ByaW50ZigiICAgIG1tYXAgZXZlbnRzOiAlMTBsZFxuIiwgdG90YWxfbW1hcCk7CisJZHVtcF9wcmludGYoIiAgICBjb21tIGV2ZW50czogJTEwbGRcbiIsIHRvdGFsX2NvbW0pOworCWR1bXBfcHJpbnRmKCIgICAgZm9yayBldmVudHM6ICUxMGxkXG4iLCB0b3RhbF9mb3JrKTsKKwlkdW1wX3ByaW50ZigiICAgIGxvc3QgZXZlbnRzOiAlMTBsZFxuIiwgdG90YWxfbG9zdCk7CisJZHVtcF9wcmludGYoIiB1bmtub3duIGV2ZW50czogJTEwbGRcbiIsIHRvdGFsX3Vua25vd24pOwogCiAJaWYgKGR1bXBfdHJhY2UpCiAJCXJldHVybiAwOwogCiAJaWYgKHZlcmJvc2UgPj0gMykKLQkJdGhyZWFkc19fZnByaW50ZihzdGRvdXQpOworCQl0aHJlYWRzX19mcHJpbnRmKHN0ZG91dCwgJnRocmVhZHMpOwogCiAJaWYgKHZlcmJvc2UgPj0gMikKIAkJZHNvc19fZnByaW50ZihzdGRvdXQpOwpAQCAtMjAwMSw2ICsxNTQ3LDkgQEAKIAlvdXRwdXRfX3Jlc29ydCh0b3RhbCk7CiAJb3V0cHV0X19mcHJpbnRmKHN0ZG91dCwgdG90YWwpOwogCisJaWYgKHNob3dfdGhyZWFkcykKKwkJcGVyZl9yZWFkX3ZhbHVlc19kZXN0cm95KCZzaG93X3RocmVhZHNfdmFsdWVzKTsKKwogCXJldHVybiByYzsKIH0KIApAQCAtMjA2OSwxMiArMTYxOCwxNiBAQAogCQkgICAgImJlIG1vcmUgdmVyYm9zZSAoc2hvdyBzeW1ib2wgYWRkcmVzcywgZXRjKSIpLAogCU9QVF9CT09MRUFOKCdEJywgImR1bXAtcmF3LXRyYWNlIiwgJmR1bXBfdHJhY2UsCiAJCSAgICAiZHVtcCByYXcgdHJhY2UgaW4gQVNDSUkiKSwKLQlPUFRfU1RSSU5HKCdrJywgInZtbGludXgiLCAmdm1saW51eCwgImZpbGUiLCAidm1saW51eCBwYXRobmFtZSIpLAorCU9QVF9TVFJJTkcoJ2snLCAidm1saW51eCIsICZ2bWxpbnV4X25hbWUsICJmaWxlIiwgInZtbGludXggcGF0aG5hbWUiKSwKIAlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZmb3JjZSwgImRvbid0IGNvbXBsYWluLCBkbyBpdCIpLAogCU9QVF9CT09MRUFOKCdtJywgIm1vZHVsZXMiLCAmbW9kdWxlcywKIAkJICAgICJsb2FkIG1vZHVsZSBzeW1ib2xzIC0gV0FSTklORzogdXNlIG9ubHkgd2l0aCAtayBhbmQgTElWRSBrZXJuZWwiKSwKIAlPUFRfQk9PTEVBTignbicsICJzaG93LW5yLXNhbXBsZXMiLCAmc2hvd19ucl9zYW1wbGVzLAogCQkgICAgIlNob3cgYSBjb2x1bW4gd2l0aCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMiKSwKKwlPUFRfQk9PTEVBTignVCcsICJ0aHJlYWRzIiwgJnNob3dfdGhyZWFkcywKKwkJICAgICJTaG93IHBlci10aHJlYWQgZXZlbnQgY291bnRlcnMiKSwKKwlPUFRfU1RSSU5HKDAsICJwcmV0dHkiLCAmcHJldHR5X3ByaW50aW5nX3N0eWxlLCAia2V5IiwKKwkJICAgInByZXR0eSBwcmludGluZyBzdHlsZSBrZXk6IG5vcm1hbCByYXciKSwKIAlPUFRfU1RSSU5HKCdzJywgInNvcnQiLCAmc29ydF9vcmRlciwgImtleVssa2V5Mi4uLl0iLAogCQkgICAic29ydCBieSBrZXkocyk6IHBpZCwgY29tbSwgZHNvLCBzeW1ib2wsIHBhcmVudCIpLAogCU9QVF9CT09MRUFOKCdQJywgImZ1bGwtcGF0aHMiLCAmZnVsbF9wYXRocywKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCmluZGV4IGI0YjA2YzcuLjYxYjgyODIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwpAQCAtNDIsNiArNDIsOCBAQAogI2luY2x1ZGUgInV0aWwvdXRpbC5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCisjaW5jbHVkZSAidXRpbC9ldmVudC5oIgorI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKIAogI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgogI2luY2x1ZGUgPG1hdGguaD4KQEAgLTYwLDEwICs2Miw3IEBACiAKIH07CiAKLSNkZWZpbmUgTUFYX1JVTgkJCTEwMAotCiBzdGF0aWMgaW50CQkJc3lzdGVtX3dpZGUJCQk9ICAwOwotc3RhdGljIGludAkJCXZlcmJvc2UJCQkJPSAgMDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQJCW5yX2NwdXMJCQkJPSAgMDsKIHN0YXRpYyBpbnQJCQlydW5faWR4CQkJCT0gIDA7CiAKQEAgLTc1LDI2ICs3NCw1NiBAQAogCiBzdGF0aWMgaW50CQkJZmRbTUFYX05SX0NQVVNdW01BWF9DT1VOVEVSU107CiAKLXN0YXRpYyB1NjQJCQlydW50aW1lX25zZWNzW01BWF9SVU5dOwotc3RhdGljIHU2NAkJCXdhbGx0aW1lX25zZWNzW01BWF9SVU5dOwotc3RhdGljIHU2NAkJCXJ1bnRpbWVfY3ljbGVzW01BWF9SVU5dOworc3RhdGljIGludAkJCWV2ZW50X3NjYWxlZFtNQVhfQ09VTlRFUlNdOwogCi1zdGF0aWMgdTY0CQkJZXZlbnRfcmVzW01BWF9SVU5dW01BWF9DT1VOVEVSU11bM107Ci1zdGF0aWMgdTY0CQkJZXZlbnRfc2NhbGVkW01BWF9SVU5dW01BWF9DT1VOVEVSU107CitzdHJ1Y3Qgc3RhdHMKK3sKKwlkb3VibGUgbiwgbWVhbiwgTTI7Cit9OwogCi1zdGF0aWMgdTY0CQkJZXZlbnRfcmVzX2F2Z1tNQVhfQ09VTlRFUlNdWzNdOwotc3RhdGljIHU2NAkJCWV2ZW50X3Jlc19ub2lzZVtNQVhfQ09VTlRFUlNdWzNdOworc3RhdGljIHZvaWQgdXBkYXRlX3N0YXRzKHN0cnVjdCBzdGF0cyAqc3RhdHMsIHU2NCB2YWwpCit7CisJZG91YmxlIGRlbHRhOwogCi1zdGF0aWMgdTY0CQkJZXZlbnRfc2NhbGVkX2F2Z1tNQVhfQ09VTlRFUlNdOworCXN0YXRzLT5uKys7CisJZGVsdGEgPSB2YWwgLSBzdGF0cy0+bWVhbjsKKwlzdGF0cy0+bWVhbiArPSBkZWx0YSAvIHN0YXRzLT5uOworCXN0YXRzLT5NMiArPSBkZWx0YSoodmFsIC0gc3RhdHMtPm1lYW4pOworfQogCi1zdGF0aWMgdTY0CQkJcnVudGltZV9uc2Vjc19hdmc7Ci1zdGF0aWMgdTY0CQkJcnVudGltZV9uc2Vjc19ub2lzZTsKK3N0YXRpYyBkb3VibGUgYXZnX3N0YXRzKHN0cnVjdCBzdGF0cyAqc3RhdHMpCit7CisJcmV0dXJuIHN0YXRzLT5tZWFuOworfQogCi1zdGF0aWMgdTY0CQkJd2FsbHRpbWVfbnNlY3NfYXZnOwotc3RhdGljIHU2NAkJCXdhbGx0aW1lX25zZWNzX25vaXNlOworLyoKKyAqIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWxnb3JpdGhtc19mb3JfY2FsY3VsYXRpbmdfdmFyaWFuY2UKKyAqCisgKiAgICAgICAoXFN1bSBuX2leMikgLSAoKFxTdW0gbl9pKV4yKS9uCisgKiBzXjIgPSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgIG4gLSAxCisgKgorICogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdGRkZXYKKyAqCisgKiBUaGUgc3RkIGRldiBvZiB0aGUgbWVhbiBpcyByZWxhdGVkIHRvIHRoZSBzdGQgZGV2IGJ5OgorICoKKyAqICAgICAgICAgICAgIHMKKyAqIHNfbWVhbiA9IC0tLS0tLS0KKyAqICAgICAgICAgIHNxcnQobikKKyAqCisgKi8KK3N0YXRpYyBkb3VibGUgc3RkZGV2X3N0YXRzKHN0cnVjdCBzdGF0cyAqc3RhdHMpCit7CisJZG91YmxlIHZhcmlhbmNlID0gc3RhdHMtPk0yIC8gKHN0YXRzLT5uIC0gMSk7CisJZG91YmxlIHZhcmlhbmNlX21lYW4gPSB2YXJpYW5jZSAvIHN0YXRzLT5uOwogCi1zdGF0aWMgdTY0CQkJcnVudGltZV9jeWNsZXNfYXZnOwotc3RhdGljIHU2NAkJCXJ1bnRpbWVfY3ljbGVzX25vaXNlOworCXJldHVybiBzcXJ0KHZhcmlhbmNlX21lYW4pOworfQorCitzdHJ1Y3Qgc3RhdHMJCQlldmVudF9yZXNfc3RhdHNbTUFYX0NPVU5URVJTXVszXTsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfbnNlY3Nfc3RhdHM7CitzdHJ1Y3Qgc3RhdHMJCQl3YWxsdGltZV9uc2Vjc19zdGF0czsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfY3ljbGVzX3N0YXRzOwogCiAjZGVmaW5lIE1BVENIX0VWRU5UKHQsIGMsIGNvdW50ZXIpCQkJXAogCShhdHRyc1tjb3VudGVyXS50eXBlID09IFBFUkZfVFlQRV8jI3QgJiYJXApAQCAtMTQ5LDEyICsxNzgsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgcmVhZF9jb3VudGVyKGludCBjb3VudGVyKQogewotCXU2NCAqY291bnQsIHNpbmdsZV9jb3VudFszXTsKKwl1NjQgY291bnRbM10sIHNpbmdsZV9jb3VudFszXTsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCXNpemVfdCByZXMsIG52OwogCWludCBzY2FsZWQ7Ci0KLQljb3VudCA9IGV2ZW50X3Jlc1tydW5faWR4XVtjb3VudGVyXTsKKwlpbnQgaTsKIAogCWNvdW50WzBdID0gY291bnRbMV0gPSBjb3VudFsyXSA9IDA7CiAKQEAgLTE3OSwyNCArMjA3LDMzIEBACiAJc2NhbGVkID0gMDsKIAlpZiAoc2NhbGUpIHsKIAkJaWYgKGNvdW50WzJdID09IDApIHsKLQkJCWV2ZW50X3NjYWxlZFtydW5faWR4XVtjb3VudGVyXSA9IC0xOworCQkJZXZlbnRfc2NhbGVkW2NvdW50ZXJdID0gLTE7CiAJCQljb3VudFswXSA9IDA7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlpZiAoY291bnRbMl0gPCBjb3VudFsxXSkgewotCQkJZXZlbnRfc2NhbGVkW3J1bl9pZHhdW2NvdW50ZXJdID0gMTsKKwkJCWV2ZW50X3NjYWxlZFtjb3VudGVyXSA9IDE7CiAJCQljb3VudFswXSA9ICh1bnNpZ25lZCBsb25nIGxvbmcpCiAJCQkJKChkb3VibGUpY291bnRbMF0gKiBjb3VudFsxXSAvIGNvdW50WzJdICsgMC41KTsKIAkJfQogCX0KKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCXVwZGF0ZV9zdGF0cygmZXZlbnRfcmVzX3N0YXRzW2NvdW50ZXJdW2ldLCBjb3VudFtpXSk7CisKKwlpZiAodmVyYm9zZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlTGQgJUxkICVMZFxuIiwgZXZlbnRfbmFtZShjb3VudGVyKSwKKwkJCQljb3VudFswXSwgY291bnRbMV0sIGNvdW50WzJdKTsKKwl9CisKIAkvKgogCSAqIFNhdmUgdGhlIGZ1bGwgcnVudGltZSAtIHRvIGFsbG93IG5vcm1hbGl6YXRpb24gZHVyaW5nIHByaW50b3V0OgogCSAqLwogCWlmIChNQVRDSF9FVkVOVChTT0ZUV0FSRSwgU1dfVEFTS19DTE9DSywgY291bnRlcikpCi0JCXJ1bnRpbWVfbnNlY3NbcnVuX2lkeF0gPSBjb3VudFswXTsKKwkJdXBkYXRlX3N0YXRzKCZydW50aW1lX25zZWNzX3N0YXRzLCBjb3VudFswXSk7CiAJaWYgKE1BVENIX0VWRU5UKEhBUkRXQVJFLCBIV19DUFVfQ1lDTEVTLCBjb3VudGVyKSkKLQkJcnVudGltZV9jeWNsZXNbcnVuX2lkeF0gPSBjb3VudFswXTsKKwkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2N5Y2xlc19zdGF0cywgY291bnRbMF0pOwogfQogCiBzdGF0aWMgaW50IHJ1bl9wZXJmX3N0YXQoaW50IGFyZ2MgX191c2VkLCBjb25zdCBjaGFyICoqYXJndikKQEAgLTI3MCw3ICszMDcsNyBAQAogCiAJdDEgPSByZGNsb2NrKCk7CiAKLQl3YWxsdGltZV9uc2Vjc1tydW5faWR4XSA9IHQxIC0gdDA7CisJdXBkYXRlX3N0YXRzKCZ3YWxsdGltZV9uc2Vjc19zdGF0cywgdDEgLSB0MCk7CiAKIAlmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbnJfY291bnRlcnM7IGNvdW50ZXIrKykKIAkJcmVhZF9jb3VudGVyKGNvdW50ZXIpOwpAQCAtMjc4LDQyICszMTUsMzggQEAKIAlyZXR1cm4gV0VYSVRTVEFUVVMoc3RhdHVzKTsKIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfbm9pc2UodTY0ICpjb3VudCwgdTY0ICpub2lzZSkKK3N0YXRpYyB2b2lkIHByaW50X25vaXNlKGludCBjb3VudGVyLCBkb3VibGUgYXZnKQogewotCWlmIChydW5fY291bnQgPiAxKQotCQlmcHJpbnRmKHN0ZGVyciwgIiAgICggKy0gJTcuM2YlJSApIiwKLQkJCShkb3VibGUpbm9pc2VbMF0vKGNvdW50WzBdKzEpKjEwMC4wKTsKKwlpZiAocnVuX2NvdW50ID09IDEpCisJCXJldHVybjsKKworCWZwcmludGYoc3RkZXJyLCAiICAgKCArLSAlNy4zZiUlICkiLAorCQkJMTAwICogc3RkZGV2X3N0YXRzKCZldmVudF9yZXNfc3RhdHNbY291bnRlcl1bMF0pIC8gYXZnKTsKIH0KIAotc3RhdGljIHZvaWQgbnNlY19wcmludG91dChpbnQgY291bnRlciwgdTY0ICpjb3VudCwgdTY0ICpub2lzZSkKK3N0YXRpYyB2b2lkIG5zZWNfcHJpbnRvdXQoaW50IGNvdW50ZXIsIGRvdWJsZSBhdmcpCiB7Ci0JZG91YmxlIG1zZWNzID0gKGRvdWJsZSljb3VudFswXSAvIDEwMDAwMDA7CisJZG91YmxlIG1zZWNzID0gYXZnIC8gMWU2OwogCiAJZnByaW50ZihzdGRlcnIsICIgJTE0LjZmICAlLTI0cyIsIG1zZWNzLCBldmVudF9uYW1lKGNvdW50ZXIpKTsKIAogCWlmIChNQVRDSF9FVkVOVChTT0ZUV0FSRSwgU1dfVEFTS19DTE9DSywgY291bnRlcikpIHsKLQkJaWYgKHdhbGx0aW1lX25zZWNzX2F2ZykKLQkJCWZwcmludGYoc3RkZXJyLCAiICMgJTEwLjNmIENQVXMgIiwKLQkJCQkoZG91YmxlKWNvdW50WzBdIC8gKGRvdWJsZSl3YWxsdGltZV9uc2Vjc19hdmcpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBDUFVzICIsCisJCQkJYXZnIC8gYXZnX3N0YXRzKCZ3YWxsdGltZV9uc2Vjc19zdGF0cykpOwogCX0KLQlwcmludF9ub2lzZShjb3VudCwgbm9pc2UpOwogfQogCi1zdGF0aWMgdm9pZCBhYnNfcHJpbnRvdXQoaW50IGNvdW50ZXIsIHU2NCAqY291bnQsIHU2NCAqbm9pc2UpCitzdGF0aWMgdm9pZCBhYnNfcHJpbnRvdXQoaW50IGNvdW50ZXIsIGRvdWJsZSBhdmcpCiB7Ci0JZnByaW50ZihzdGRlcnIsICIgJTE0TGQgICUtMjRzIiwgY291bnRbMF0sIGV2ZW50X25hbWUoY291bnRlcikpOworCWZwcmludGYoc3RkZXJyLCAiICUxNC4wZiAgJS0yNHMiLCBhdmcsIGV2ZW50X25hbWUoY291bnRlcikpOwogCi0JaWYgKHJ1bnRpbWVfY3ljbGVzX2F2ZyAmJgotCSAgICBNQVRDSF9FVkVOVChIQVJEV0FSRSwgSFdfSU5TVFJVQ1RJT05TLCBjb3VudGVyKSkgeworCWlmIChNQVRDSF9FVkVOVChIQVJEV0FSRSwgSFdfSU5TVFJVQ1RJT05TLCBjb3VudGVyKSkgewogCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBJUEMgICIsCi0JCQkoZG91YmxlKWNvdW50WzBdIC8gKGRvdWJsZSlydW50aW1lX2N5Y2xlc19hdmcpOworCQkJCWF2ZyAvIGF2Z19zdGF0cygmcnVudGltZV9jeWNsZXNfc3RhdHMpKTsKIAl9IGVsc2UgewotCQlpZiAocnVudGltZV9uc2Vjc19hdmcpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiICMgJTEwLjNmIE0vc2VjIiwKLQkJCQkoZG91YmxlKWNvdW50WzBdL3J1bnRpbWVfbnNlY3NfYXZnKjEwMDAuMCk7Ci0JCX0KKwkJZnByaW50ZihzdGRlcnIsICIgIyAlMTAuM2YgTS9zZWMiLAorCQkJCTEwMDAuMCAqIGF2ZyAvIGF2Z19zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0cykpOwogCX0KLQlwcmludF9ub2lzZShjb3VudCwgbm9pc2UpOwogfQogCiAvKgpAQCAtMzIxLDEyICszNTQsOCBAQAogICovCiBzdGF0aWMgdm9pZCBwcmludF9jb3VudGVyKGludCBjb3VudGVyKQogewotCXU2NCAqY291bnQsICpub2lzZTsKLQlpbnQgc2NhbGVkOwotCi0JY291bnQgPSBldmVudF9yZXNfYXZnW2NvdW50ZXJdOwotCW5vaXNlID0gZXZlbnRfcmVzX25vaXNlW2NvdW50ZXJdOwotCXNjYWxlZCA9IGV2ZW50X3NjYWxlZF9hdmdbY291bnRlcl07CisJZG91YmxlIGF2ZyA9IGF2Z19zdGF0cygmZXZlbnRfcmVzX3N0YXRzW2NvdW50ZXJdWzBdKTsKKwlpbnQgc2NhbGVkID0gZXZlbnRfc2NhbGVkW2NvdW50ZXJdOwogCiAJaWYgKHNjYWxlZCA9PSAtMSkgewogCQlmcHJpbnRmKHN0ZGVyciwgIiAlMTRzICAlLTI0c1xuIiwKQEAgLTMzNSwxMTAgKzM2NCwyOSBAQAogCX0KIAogCWlmIChuc2VjX2NvdW50ZXIoY291bnRlcikpCi0JCW5zZWNfcHJpbnRvdXQoY291bnRlciwgY291bnQsIG5vaXNlKTsKKwkJbnNlY19wcmludG91dChjb3VudGVyLCBhdmcpOwogCWVsc2UKLQkJYWJzX3ByaW50b3V0KGNvdW50ZXIsIGNvdW50LCBub2lzZSk7CisJCWFic19wcmludG91dChjb3VudGVyLCBhdmcpOwogCi0JaWYgKHNjYWxlZCkKKwlwcmludF9ub2lzZShjb3VudGVyLCBhdmcpOworCisJaWYgKHNjYWxlZCkgeworCQlkb3VibGUgYXZnX2VuYWJsZWQsIGF2Z19ydW5uaW5nOworCisJCWF2Z19lbmFibGVkID0gYXZnX3N0YXRzKCZldmVudF9yZXNfc3RhdHNbY291bnRlcl1bMV0pOworCQlhdmdfcnVubmluZyA9IGF2Z19zdGF0cygmZXZlbnRfcmVzX3N0YXRzW2NvdW50ZXJdWzJdKTsKKwogCQlmcHJpbnRmKHN0ZGVyciwgIiAgKHNjYWxlZCBmcm9tICUuMmYlJSkiLAotCQkJKGRvdWJsZSkgY291bnRbMl0gLyBjb3VudFsxXSAqIDEwMCk7CisJCQkJMTAwICogYXZnX3J1bm5pbmcgLyBhdmdfZW5hYmxlZCk7CisJfQogCiAJZnByaW50ZihzdGRlcnIsICJcbiIpOwogfQogCi0vKgotICogbm9ybWFsaXplX25vaXNlIG5vaXNlIHZhbHVlcyBkb3duIHRvIHN0ZGRldjoKLSAqLwotc3RhdGljIHZvaWQgbm9ybWFsaXplX25vaXNlKHU2NCAqdmFsKQotewotCWRvdWJsZSByZXM7Ci0KLQlyZXMgPSAoZG91YmxlKSp2YWwgLyAocnVuX2NvdW50ICogc3FydCgoZG91YmxlKXJ1bl9jb3VudCkpOwotCi0JKnZhbCA9ICh1NjQpcmVzOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVfYXZnKGNvbnN0IGNoYXIgKm5hbWUsIGludCBpZHgsIHU2NCAqYXZnLCB1NjQgKnZhbCkKLXsKLQkqYXZnICs9ICp2YWw7Ci0KLQlpZiAodmVyYm9zZSA+IDEpCi0JCWZwcmludGYoc3RkZXJyLCAiZGVidWc6ICUyMHNbJWRdOiAlTGRcbiIsIG5hbWUsIGlkeCwgKnZhbCk7Ci19Ci0vKgotICogQ2FsY3VsYXRlIHRoZSBhdmVyYWdlcyBhbmQgbm9pc2VzOgotICovCi1zdGF0aWMgdm9pZCBjYWxjX2F2Zyh2b2lkKQotewotCWludCBpLCBqOwotCi0JaWYgKHZlcmJvc2UgPiAxKQotCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcnVuX2NvdW50OyBpKyspIHsKLQkJdXBkYXRlX2F2ZygicnVudGltZSIsIDAsICZydW50aW1lX25zZWNzX2F2ZywgcnVudGltZV9uc2VjcyArIGkpOwotCQl1cGRhdGVfYXZnKCJ3YWxsdGltZSIsIDAsICZ3YWxsdGltZV9uc2Vjc19hdmcsIHdhbGx0aW1lX25zZWNzICsgaSk7Ci0JCXVwZGF0ZV9hdmcoInJ1bnRpbWVfY3ljbGVzIiwgMCwgJnJ1bnRpbWVfY3ljbGVzX2F2ZywgcnVudGltZV9jeWNsZXMgKyBpKTsKLQotCQlmb3IgKGogPSAwOyBqIDwgbnJfY291bnRlcnM7IGorKykgewotCQkJdXBkYXRlX2F2ZygiY291bnRlci8wIiwgaiwKLQkJCQlldmVudF9yZXNfYXZnW2pdKzAsIGV2ZW50X3Jlc1tpXVtqXSswKTsKLQkJCXVwZGF0ZV9hdmcoImNvdW50ZXIvMSIsIGosCi0JCQkJZXZlbnRfcmVzX2F2Z1tqXSsxLCBldmVudF9yZXNbaV1bal0rMSk7Ci0JCQl1cGRhdGVfYXZnKCJjb3VudGVyLzIiLCBqLAotCQkJCWV2ZW50X3Jlc19hdmdbal0rMiwgZXZlbnRfcmVzW2ldW2pdKzIpOwotCQkJaWYgKGV2ZW50X3NjYWxlZFtpXVtqXSAhPSAodTY0KS0xKQotCQkJCXVwZGF0ZV9hdmcoInNjYWxlZCIsIGosCi0JCQkJCWV2ZW50X3NjYWxlZF9hdmcgKyBqLCBldmVudF9zY2FsZWRbaV0raik7Ci0JCQllbHNlCi0JCQkJZXZlbnRfc2NhbGVkX2F2Z1tqXSA9IC0xOwotCQl9Ci0JfQotCXJ1bnRpbWVfbnNlY3NfYXZnIC89IHJ1bl9jb3VudDsKLQl3YWxsdGltZV9uc2Vjc19hdmcgLz0gcnVuX2NvdW50OwotCXJ1bnRpbWVfY3ljbGVzX2F2ZyAvPSBydW5fY291bnQ7Ci0KLQlmb3IgKGogPSAwOyBqIDwgbnJfY291bnRlcnM7IGorKykgewotCQlldmVudF9yZXNfYXZnW2pdWzBdIC89IHJ1bl9jb3VudDsKLQkJZXZlbnRfcmVzX2F2Z1tqXVsxXSAvPSBydW5fY291bnQ7Ci0JCWV2ZW50X3Jlc19hdmdbal1bMl0gLz0gcnVuX2NvdW50OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBydW5fY291bnQ7IGkrKykgewotCQlydW50aW1lX25zZWNzX25vaXNlICs9Ci0JCQlhYnMoKHM2NCkocnVudGltZV9uc2Vjc1tpXSAtIHJ1bnRpbWVfbnNlY3NfYXZnKSk7Ci0JCXdhbGx0aW1lX25zZWNzX25vaXNlICs9Ci0JCQlhYnMoKHM2NCkod2FsbHRpbWVfbnNlY3NbaV0gLSB3YWxsdGltZV9uc2Vjc19hdmcpKTsKLQkJcnVudGltZV9jeWNsZXNfbm9pc2UgKz0KLQkJCWFicygoczY0KShydW50aW1lX2N5Y2xlc1tpXSAtIHJ1bnRpbWVfY3ljbGVzX2F2ZykpOwotCi0JCWZvciAoaiA9IDA7IGogPCBucl9jb3VudGVyczsgaisrKSB7Ci0JCQlldmVudF9yZXNfbm9pc2Vbal1bMF0gKz0KLQkJCQlhYnMoKHM2NCkoZXZlbnRfcmVzW2ldW2pdWzBdIC0gZXZlbnRfcmVzX2F2Z1tqXVswXSkpOwotCQkJZXZlbnRfcmVzX25vaXNlW2pdWzFdICs9Ci0JCQkJYWJzKChzNjQpKGV2ZW50X3Jlc1tpXVtqXVsxXSAtIGV2ZW50X3Jlc19hdmdbal1bMV0pKTsKLQkJCWV2ZW50X3Jlc19ub2lzZVtqXVsyXSArPQotCQkJCWFicygoczY0KShldmVudF9yZXNbaV1bal1bMl0gLSBldmVudF9yZXNfYXZnW2pdWzJdKSk7Ci0JCX0KLQl9Ci0KLQlub3JtYWxpemVfbm9pc2UoJnJ1bnRpbWVfbnNlY3Nfbm9pc2UpOwotCW5vcm1hbGl6ZV9ub2lzZSgmd2FsbHRpbWVfbnNlY3Nfbm9pc2UpOwotCW5vcm1hbGl6ZV9ub2lzZSgmcnVudGltZV9jeWNsZXNfbm9pc2UpOwotCi0JZm9yIChqID0gMDsgaiA8IG5yX2NvdW50ZXJzOyBqKyspIHsKLQkJbm9ybWFsaXplX25vaXNlKCZldmVudF9yZXNfbm9pc2Vbal1bMF0pOwotCQlub3JtYWxpemVfbm9pc2UoJmV2ZW50X3Jlc19ub2lzZVtqXVsxXSk7Ci0JCW5vcm1hbGl6ZV9ub2lzZSgmZXZlbnRfcmVzX25vaXNlW2pdWzJdKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHByaW50X3N0YXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewogCWludCBpLCBjb3VudGVyOwogCi0JY2FsY19hdmcoKTsKLQogCWZmbHVzaChzdGRvdXQpOwogCiAJZnByaW50ZihzdGRlcnIsICJcbiIpOwpAQCAtNDU3LDEwICs0MDUsMTEgQEAKIAogCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwgIiAlMTQuOWYgIHNlY29uZHMgdGltZSBlbGFwc2VkIiwKLQkJCShkb3VibGUpd2FsbHRpbWVfbnNlY3NfYXZnLzFlOSk7CisJCQlhdmdfc3RhdHMoJndhbGx0aW1lX25zZWNzX3N0YXRzKS8xZTkpOwogCWlmIChydW5fY291bnQgPiAxKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiICAgKCArLSAlNy4zZiUlICkiLAotCQkJMTAwLjAqKGRvdWJsZSl3YWxsdGltZV9uc2Vjc19ub2lzZS8oZG91YmxlKXdhbGx0aW1lX25zZWNzX2F2Zyk7CisJCQkJMTAwKnN0ZGRldl9zdGF0cygmd2FsbHRpbWVfbnNlY3Nfc3RhdHMpIC8KKwkJCQlhdmdfc3RhdHMoJndhbGx0aW1lX25zZWNzX3N0YXRzKSk7CiAJfQogCWZwcmludGYoc3RkZXJyLCAiXG5cbiIpOwogfQpAQCAtNTE1LDcgKzQ2NCw3IEBACiAJCVBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwogCWlmICghYXJnYykKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHN0YXRfdXNhZ2UsIG9wdGlvbnMpOwotCWlmIChydW5fY291bnQgPD0gMCB8fCBydW5fY291bnQgPiBNQVhfUlVOKQorCWlmIChydW5fY291bnQgPD0gMCkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHN0YXRfdXNhZ2UsIG9wdGlvbnMpOwogCiAJLyogU2V0IGF0dHJzIGFuZCBucl9jb3VudGVycyBpZiBubyBldmVudCBpcyBzZWxlY3RlZCBhbmQgIW51bGxfcnVuICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKaW5kZXggN2RlMjhjZS4uNDAwMmNjYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwpAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCiAKKyNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCisKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxmY250bC5oPgogCkBAIC02OCw4ICs3MCw2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50CQlwYWdlX3NpemU7CiBzdGF0aWMgdW5zaWduZWQgaW50CQltbWFwX3BhZ2VzCQkJPSAxNjsKIHN0YXRpYyBpbnQJCQlmcmVxCQkJCT0gIDA7Ci1zdGF0aWMgaW50CQkJdmVyYm9zZQkJCQk9ICAwOwotc3RhdGljIGNoYXIJCQkqdm1saW51eAkJCT0gIE5VTEw7CiAKIHN0YXRpYyBpbnQJCQlkZWxheV9zZWNzCQkJPSAgMjsKIHN0YXRpYyBpbnQJCQl6ZXJvOwpAQCAtMTIyLDcgKzEyMiw4IEBACiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwogCXN0cnVjdCBzZWN0aW9uICpzZWN0aW9uID0gTlVMTDsKIAlGSUxFICpmaWxlOwotCWNoYXIgY29tbWFuZFtQQVRIX01BWCoyXSwgKnBhdGggPSB2bWxpbnV4OworCWNoYXIgY29tbWFuZFtQQVRIX01BWCoyXTsKKwljb25zdCBjaGFyICpwYXRoID0gdm1saW51eF9uYW1lOwogCXU2NCBzdGFydCwgZW5kLCBsZW47CiAKIAlpZiAoIXN5bWUpCkBAIC0zMzgsOCArMzM5LDYgQEAKIAkJcHJpbnRmKCIlZCBsaW5lcyBub3QgZGlzcGxheWVkLCBtYXliZSBpbmNyZWFzZSBkaXNwbGF5IGVudHJpZXMgW2VdXG4iLCBtb3JlKTsKIH0KIAotc3RydWN0IGRzbwkJCSprZXJuZWxfZHNvOwotCiAvKgogICogU3ltYm9scyB3aWxsIGJlIGFkZGVkIGhlcmUgaW4gcmVjb3JkX2lwIGFuZCB3aWxsIGdldCBvdXQKICAqIGFmdGVyIGRlY2F5ZWQuCkBAIC00ODQsMTcgKzQ4MywyNCBAQAogCWlmIChucl9jb3VudGVycyA9PSAxKQogCQlwcmludGYoIiAgICAgICAgICAgICBzYW1wbGVzICAgIHBjbnQiKTsKIAllbHNlCi0JCXByaW50ZigiICB3ZWlnaHQgICAgIHNhbXBsZXMgICAgcGNudCIpOworCQlwcmludGYoIiAgIHdlaWdodCAgICBzYW1wbGVzICAgIHBjbnQiKTsKIAotCXByaW50ZigiICAgICAgICAgUklQICAgICAgICAgIGtlcm5lbCBmdW5jdGlvblxuIgotCSAgICAgICAJICAgICAgICIgIF9fX19fXyAgICAgX19fX19fXyAgIF9fX19fICAgX19fX19fX19fX19fX19fXyAgIF9fX19fX19fX19fX19fX1xuXG4iCi0JKTsKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRmKCIgICAgICAgICBSSVAgICAgICAgIik7CisJcHJpbnRmKCIgICBrZXJuZWwgZnVuY3Rpb25cbiIpOworCXByaW50ZigiICAgJXMgICAgX19fX19fXyAgIF9fX19fIiwKKwkgICAgICAgbnJfY291bnRlcnMgPT0gMSA/ICIgICAgICAiIDogIl9fX19fXyIpOworCWlmICh2ZXJib3NlKQorCQlwcmludGYoIiAgIF9fX19fX19fX19fX19fX18iKTsKKwlwcmludGYoIiAgIF9fX19fX19fX19fX19fX1xuXG4iKTsKIAogCWZvciAobmQgPSByYl9maXJzdCgmdG1wKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKLQkJc3RydWN0IHN5bV9lbnRyeSAqc3ltZSA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3Qgc3ltX2VudHJ5LCByYl9ub2RlKTsKLQkJc3RydWN0IHN5bWJvbCAqc3ltID0gKHN0cnVjdCBzeW1ib2wgKikoc3ltZSArIDEpOworCQlzdHJ1Y3Qgc3ltYm9sICpzeW07CiAJCWRvdWJsZSBwY250OwogCisJCXN5bWUgPSByYl9lbnRyeShuZCwgc3RydWN0IHN5bV9lbnRyeSwgcmJfbm9kZSk7CisJCXN5bSA9IChzdHJ1Y3Qgc3ltYm9sICopKHN5bWUgKyAxKTsKKwogCQlpZiAoKytwcmludGVkID4gcHJpbnRfZW50cmllcyB8fCAoaW50KXN5bWUtPnNuYXBfY291bnQgPCBjb3VudF9maWx0ZXIpCiAJCQljb250aW51ZTsKIApAQCAtNTA3LDcgKzUxMyw5IEBACiAJCQlwcmludGYoIiU5LjFmICUxMGxkIC0gIiwgc3ltZS0+d2VpZ2h0LCBzeW1lLT5zbmFwX2NvdW50KTsKIAogCQlwZXJjZW50X2NvbG9yX2ZwcmludGYoc3Rkb3V0LCAiJTQuMWYlJSIsIHBjbnQpOwotCQlwcmludGYoIiAtICUwMTZsbHggOiAlcyIsIHN5bS0+c3RhcnQsIHN5bS0+bmFtZSk7CisJCWlmICh2ZXJib3NlKQorCQkJcHJpbnRmKCIgLSAlMDE2bGx4Iiwgc3ltLT5zdGFydCk7CisJCXByaW50ZigiIDogJXMiLCBzeW0tPm5hbWUpOwogCQlpZiAoc3ltLT5tb2R1bGUpCiAJCQlwcmludGYoIlx0WyVzXSIsIHN5bS0+bW9kdWxlLT5uYW1lKTsKIAkJcHJpbnRmKCJcbiIpOwpAQCAtNjEzLDcgKzYyMSw3IEBACiAKIAlmcHJpbnRmKHN0ZG91dCwgIlx0W2ZdICAgICBwcm9maWxlIGRpc3BsYXkgZmlsdGVyIChjb3VudCkuICAgIFx0KCVkKVxuIiwgY291bnRfZmlsdGVyKTsKIAotCWlmICh2bWxpbnV4KSB7CisJaWYgKHZtbGludXhfbmFtZSkgewogCQlmcHJpbnRmKHN0ZG91dCwgIlx0W0ZdICAgICBhbm5vdGF0ZSBkaXNwbGF5IGZpbHRlciAocGVyY2VudCkuIFx0KCVkJSUpXG4iLCBzeW1fcGNudF9maWx0ZXIpOwogCQlmcHJpbnRmKHN0ZG91dCwgIlx0W3NdICAgICBhbm5vdGF0ZSBzeW1ib2wuICAgICAgICAgICAgICAgICAgIFx0KCVzKVxuIiwgbmFtZT86ICJOVUxMIik7CiAJCWZwcmludGYoc3Rkb3V0LCAiXHRbU10gICAgIHN0b3AgYW5ub3RhdGlvbi5cbiIpOwpAQCAtNjQyLDcgKzY1MCw5IEBACiAJCWNhc2UgJ0YnOgogCQljYXNlICdzJzoKIAkJY2FzZSAnUyc6Ci0JCQlyZXR1cm4gdm1saW51eCA/IDEgOiAwOworCQkJcmV0dXJuIHZtbGludXhfbmFtZSA/IDEgOiAwOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03MjgsNiArNzM4LDggQEAKIAkJY2FzZSAneic6CiAJCQl6ZXJvID0gfnplcm87CiAJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOwogCX0KIH0KIApAQCAtODE2LDEzICs4MjgsMTMgQEAKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKIAlzdHJ1Y3Qgc3ltYm9sICAqc3ltOwotCWludCBtb2R1bGVzID0gdm1saW51eCA/IDEgOiAwOworCWludCB1c2VfbW9kdWxlcyA9IHZtbGludXhfbmFtZSA/IDEgOiAwOwogCiAJa2VybmVsX2RzbyA9IGRzb19fbmV3KCJba2VybmVsXSIsIHNpemVvZihzdHJ1Y3Qgc3ltX2VudHJ5KSk7CiAJaWYgKGtlcm5lbF9kc28gPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKGRzb19fbG9hZF9rZXJuZWwoa2VybmVsX2Rzbywgdm1saW51eCwgc3ltYm9sX2ZpbHRlciwgdmVyYm9zZSwgbW9kdWxlcykgPD0gMCkKKwlpZiAoZHNvX19sb2FkX2tlcm5lbChrZXJuZWxfZHNvLCB2bWxpbnV4X25hbWUsIHN5bWJvbF9maWx0ZXIsIHZlcmJvc2UsIHVzZV9tb2R1bGVzKSA8PSAwKQogCQlnb3RvIG91dF9kZWxldGVfZHNvOwogCiAJbm9kZSA9IHJiX2ZpcnN0KCZrZXJuZWxfZHNvLT5zeW1zKTsKQEAgLTkzNywyNiArOTQ5LDYgQEAKIAlsYXN0X3JlYWQgPSB0aGlzX3JlYWQ7CiAKIAlmb3IgKDsgb2xkICE9IGhlYWQ7KSB7Ci0JCXN0cnVjdCBpcF9ldmVudCB7Ci0JCQlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgaGVhZGVyOwotCQkJdTY0IGlwOwotCQkJdTMyIHBpZCwgdGFyZ2V0X3BpZDsKLQkJfTsKLQkJc3RydWN0IG1tYXBfZXZlbnQgewotCQkJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKLQkJCXUzMiBwaWQsIHRhcmdldF9waWQ7Ci0JCQl1NjQgc3RhcnQ7Ci0JCQl1NjQgbGVuOwotCQkJdTY0IHBnb2ZmOwotCQkJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07Ci0JCX07Ci0KLQkJdHlwZWRlZiB1bmlvbiBldmVudF91bmlvbiB7Ci0JCQlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgaGVhZGVyOwotCQkJc3RydWN0IGlwX2V2ZW50IGlwOwotCQkJc3RydWN0IG1tYXBfZXZlbnQgbW1hcDsKLQkJfSBldmVudF90OwotCiAJCWV2ZW50X3QgKmV2ZW50ID0gKGV2ZW50X3QgKikmZGF0YVtvbGQgJiBtZC0+bWFza107CiAKIAkJZXZlbnRfdCBldmVudF9jb3B5OwpAQCAtMTEzOCw3ICsxMTMwLDcgQEAKIAkJCSAgICAic3lzdGVtLXdpZGUgY29sbGVjdGlvbiBmcm9tIGFsbCBDUFVzIiksCiAJT1BUX0lOVEVHRVIoJ0MnLCAiQ1BVIiwgJnByb2ZpbGVfY3B1LAogCQkgICAgIkNQVSB0byBwcm9maWxlIG9uIiksCi0JT1BUX1NUUklORygnaycsICJ2bWxpbnV4IiwgJnZtbGludXgsICJmaWxlIiwgInZtbGludXggcGF0aG5hbWUiKSwKKwlPUFRfU1RSSU5HKCdrJywgInZtbGludXgiLCAmdm1saW51eF9uYW1lLCAiZmlsZSIsICJ2bWxpbnV4IHBhdGhuYW1lIiksCiAJT1BUX0lOVEVHRVIoJ20nLCAibW1hcC1wYWdlcyIsICZtbWFwX3BhZ2VzLAogCQkgICAgIm51bWJlciBvZiBtbWFwIGRhdGEgcGFnZXMiKSwKIAlPUFRfSU5URUdFUigncicsICJyZWFsdGltZSIsICZyZWFsdGltZV9wcmlvLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTRhYjM2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKQEAgLTAsMCArMSwyOTcgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisKKyNpbmNsdWRlICJ1dGlsL3V0aWwuaCIKKyNpbmNsdWRlICJ1dGlsL2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKKyNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgorI2luY2x1ZGUgInV0aWwvaGVhZGVyLmgiCisKKyNpbmNsdWRlICJ1dGlsL3BhcnNlLW9wdGlvbnMuaCIKKworI2luY2x1ZGUgInBlcmYuaCIKKyNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiCisKKyNpbmNsdWRlICJ1dGlsL3RyYWNlLWV2ZW50LmgiCisKK3N0YXRpYyBjaGFyCQljb25zdCAqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOworc3RhdGljIGludAkJaW5wdXQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZwlwYWdlX3NpemU7CitzdGF0aWMgdW5zaWduZWQgbG9uZwltbWFwX3dpbmRvdyA9IDMyOworCitzdGF0aWMgdW5zaWduZWQgbG9uZwl0b3RhbCA9IDA7CitzdGF0aWMgdW5zaWduZWQgbG9uZwl0b3RhbF9jb21tID0gMDsKKworc3RhdGljIHN0cnVjdCByYl9yb290CXRocmVhZHM7CitzdGF0aWMgc3RydWN0IHRocmVhZAkqbGFzdF9tYXRjaDsKKworc3RhdGljIHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyOworc3RhdGljIHU2NAkJc2FtcGxlX3R5cGU7CisKKworc3RhdGljIGludAorcHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50X3QgKmV2ZW50LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQoreworCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKworCXRocmVhZCA9IHRocmVhZHNfX2ZpbmRuZXcoZXZlbnQtPmNvbW0ucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOworCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfQ09NTTogJXM6JWRcbiIsCisJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAorCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAorCQlldmVudC0+Y29tbS5jb21tLCBldmVudC0+Y29tbS5waWQpOworCisJaWYgKHRocmVhZCA9PSBOVUxMIHx8CisJICAgIHRocmVhZF9fc2V0X2NvbW0odGhyZWFkLCBldmVudC0+Y29tbS5jb21tKSkgeworCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfRVZFTlRfQ09NTSwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwl0b3RhbF9jb21tKys7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGhlYWQpCit7CisJY2hhciBsZXZlbDsKKwlpbnQgc2hvdyA9IDA7CisJc3RydWN0IGRzbyAqZHNvID0gTlVMTDsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CisJdTY0IGlwID0gZXZlbnQtPmlwLmlwOworCXU2NCB0aW1lc3RhbXAgPSAtMTsKKwl1MzIgY3B1ID0gLTE7CisJdTY0IHBlcmlvZCA9IDE7CisJdm9pZCAqbW9yZV9kYXRhID0gZXZlbnQtPmlwLl9fbW9yZV9kYXRhOworCWludCBjcHVtb2RlOworCisJdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldyhldmVudC0+aXAucGlkLCAmdGhyZWFkcywgJmxhc3RfbWF0Y2gpOworCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfVElNRSkgeworCQl0aW1lc3RhbXAgPSAqKHU2NCAqKW1vcmVfZGF0YTsKKwkJbW9yZV9kYXRhICs9IHNpemVvZih1NjQpOworCX0KKworCWlmIChzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NQVSkgeworCQljcHUgPSAqKHUzMiAqKW1vcmVfZGF0YTsKKwkJbW9yZV9kYXRhICs9IHNpemVvZih1MzIpOworCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHUzMik7IC8qIHJlc2VydmVkICovCisJfQorCisJaWYgKHNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUEVSSU9EKSB7CisJCXBlcmlvZCA9ICoodTY0ICopbW9yZV9kYXRhOworCQltb3JlX2RhdGEgKz0gc2l6ZW9mKHU2NCk7CisJfQorCisJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfRVZFTlRfU0FNUExFIChJUCwgJWQpOiAlZC8lZDogJXAgcGVyaW9kOiAlTGRcbiIsCisJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAorCQkodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAorCQlldmVudC0+aGVhZGVyLm1pc2MsCisJCWV2ZW50LT5pcC5waWQsIGV2ZW50LT5pcC50aWQsCisJCSh2b2lkICopKGxvbmcpaXAsCisJCShsb25nIGxvbmcpcGVyaW9kKTsKKworCWR1bXBfcHJpbnRmKCIgLi4uIHRocmVhZDogJXM6JWRcbiIsIHRocmVhZC0+Y29tbSwgdGhyZWFkLT5waWQpOworCisJaWYgKHRocmVhZCA9PSBOVUxMKSB7CisJCWVwcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAorCQkJZXZlbnQtPmhlYWRlci50eXBlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWNwdW1vZGUgPSBldmVudC0+aGVhZGVyLm1pc2MgJiBQRVJGX0VWRU5UX01JU0NfQ1BVTU9ERV9NQVNLOworCisJaWYgKGNwdW1vZGUgPT0gUEVSRl9FVkVOVF9NSVNDX0tFUk5FTCkgeworCQlzaG93ID0gU0hPV19LRVJORUw7CisJCWxldmVsID0gJ2snOworCisJCWRzbyA9IGtlcm5lbF9kc287CisKKwkJZHVtcF9wcmludGYoIiAuLi4uLi4gZHNvOiAlc1xuIiwgZHNvLT5uYW1lKTsKKworCX0gZWxzZSBpZiAoY3B1bW9kZSA9PSBQRVJGX0VWRU5UX01JU0NfVVNFUikgeworCisJCXNob3cgPSBTSE9XX1VTRVI7CisJCWxldmVsID0gJy4nOworCisJfSBlbHNlIHsKKwkJc2hvdyA9IFNIT1dfSFY7CisJCWxldmVsID0gJ0gnOworCisJCWRzbyA9IGh5cGVydmlzb3JfZHNvOworCisJCWR1bXBfcHJpbnRmKCIgLi4uLi4uIGRzbzogW2h5cGVydmlzb3JdXG4iKTsKKwl9CisKKwlpZiAoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBzaXplOworCQkJY2hhciBkYXRhWzBdOworCQl9ICpyYXcgPSBtb3JlX2RhdGE7CisKKwkJLyoKKwkJICogRklYTUU6IGJldHRlciByZXNvbHZlIGZyb20gcGlkIGZyb20gdGhlIHN0cnVjdCB0cmFjZV9lbnRyeQorCQkgKiBmaWVsZCwgYWx0aG91Z2ggaXQgc2hvdWxkIGJlIHRoZSBzYW1lIHRoYW4gdGhpcyBwZXJmCisJCSAqIGV2ZW50IHBpZAorCQkgKi8KKwkJcHJpbnRfZXZlbnQoY3B1LCByYXctPmRhdGEsIHJhdy0+c2l6ZSwgdGltZXN0YW1wLCB0aHJlYWQtPmNvbW0pOworCX0KKwl0b3RhbCArPSBwZXJpb2Q7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcHJvY2Vzc19ldmVudChldmVudF90ICpldmVudCwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgaGVhZCkKK3sKKwl0cmFjZV9ldmVudChldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50LT5oZWFkZXIudHlwZSkgeworCWNhc2UgUEVSRl9FVkVOVF9NTUFQIC4uLiBQRVJGX0VWRU5UX0xPU1Q6CisJCXJldHVybiAwOworCisJY2FzZSBQRVJGX0VWRU5UX0NPTU06CisJCXJldHVybiBwcm9jZXNzX2NvbW1fZXZlbnQoZXZlbnQsIG9mZnNldCwgaGVhZCk7CisKKwljYXNlIFBFUkZfRVZFTlRfRVhJVCAuLi4gUEVSRl9FVkVOVF9SRUFEOgorCQlyZXR1cm4gMDsKKworCWNhc2UgUEVSRl9FVkVOVF9TQU1QTEU6CisJCXJldHVybiBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKTsKKworCWNhc2UgUEVSRl9FVkVOVF9NQVg6CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fY21kX3RyYWNlKHZvaWQpCit7CisJaW50IHJldCwgcmMgPSBFWElUX0ZBSUxVUkU7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgaGVhZCA9IDA7CisJc3RydWN0IHN0YXQgcGVyZl9zdGF0OworCWV2ZW50X3QgKmV2ZW50OworCXVpbnQzMl90IHNpemU7CisJY2hhciAqYnVmOworCisJdHJhY2VfcmVwb3J0KCk7CisJcmVnaXN0ZXJfaWRsZV90aHJlYWQoJnRocmVhZHMsICZsYXN0X21hdGNoKTsKKworCWlucHV0ID0gb3BlbihpbnB1dF9uYW1lLCBPX1JET05MWSk7CisJaWYgKGlucHV0IDwgMCkgeworCQlwZXJyb3IoImZhaWxlZCB0byBvcGVuIGZpbGUiKTsKKwkJZXhpdCgtMSk7CisJfQorCisJcmV0ID0gZnN0YXQoaW5wdXQsICZwZXJmX3N0YXQpOworCWlmIChyZXQgPCAwKSB7CisJCXBlcnJvcigiZmFpbGVkIHRvIHN0YXQgZmlsZSIpOworCQlleGl0KC0xKTsKKwl9CisKKwlpZiAoIXBlcmZfc3RhdC5zdF9zaXplKSB7CisJCWZwcmludGYoc3RkZXJyLCAiemVyby1zaXplZCBmaWxlLCBub3RoaW5nIHRvIGRvIVxuIik7CisJCWV4aXQoMCk7CisJfQorCWhlYWRlciA9IHBlcmZfaGVhZGVyX19yZWFkKGlucHV0KTsKKwloZWFkID0gaGVhZGVyLT5kYXRhX29mZnNldDsKKwlzYW1wbGVfdHlwZSA9IHBlcmZfaGVhZGVyX19zYW1wbGVfdHlwZShoZWFkZXIpOworCisJaWYgKCEoc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKQorCQlkaWUoIk5vIHRyYWNlIHNhbXBsZSB0byByZWFkLiBEaWQgeW91IGNhbGwgcGVyZiByZWNvcmQgIgorCQkgICAgIndpdGhvdXQgLVI/Iik7CisKKwlpZiAobG9hZF9rZXJuZWwoKSA8IDApIHsKKwkJcGVycm9yKCJmYWlsZWQgdG8gbG9hZCBrZXJuZWwgc3ltYm9scyIpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworcmVtYXA6CisJYnVmID0gKGNoYXIgKiltbWFwKE5VTEwsIHBhZ2Vfc2l6ZSAqIG1tYXBfd2luZG93LCBQUk9UX1JFQUQsCisJCQkgICBNQVBfU0hBUkVELCBpbnB1dCwgb2Zmc2V0KTsKKwlpZiAoYnVmID09IE1BUF9GQUlMRUQpIHsKKwkJcGVycm9yKCJmYWlsZWQgdG8gbW1hcCBmaWxlIik7CisJCWV4aXQoLTEpOworCX0KKworbW9yZToKKwlldmVudCA9IChldmVudF90ICopKGJ1ZiArIGhlYWQpOworCisJc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKKwlpZiAoIXNpemUpCisJCXNpemUgPSA4OworCisJaWYgKGhlYWQgKyBldmVudC0+aGVhZGVyLnNpemUgPj0gcGFnZV9zaXplICogbW1hcF93aW5kb3cpIHsKKwkJdW5zaWduZWQgbG9uZyBzaGlmdCA9IHBhZ2Vfc2l6ZSAqIChoZWFkIC8gcGFnZV9zaXplKTsKKwkJaW50IHJlczsKKworCQlyZXMgPSBtdW5tYXAoYnVmLCBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdyk7CisJCWFzc2VydChyZXMgPT0gMCk7CisKKwkJb2Zmc2V0ICs9IHNoaWZ0OworCQloZWFkIC09IHNoaWZ0OworCQlnb3RvIHJlbWFwOworCX0KKworCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7CisKKworCWlmICghc2l6ZSB8fCBwcm9jZXNzX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpIDwgMCkgeworCisJCS8qCisJCSAqIGFzc3VtZSB3ZSBsb3N0IHRyYWNrIG9mIHRoZSBzdHJlYW0sIGNoZWNrIGFsaWdubWVudCwgYW5kCisJCSAqIGluY3JlbWVudCBhIHNpbmdsZSB1NjQgaW4gdGhlIGhvcGUgdG8gY2F0Y2ggb24gYWdhaW4gJ3Nvb24nLgorCQkgKi8KKworCQlpZiAodW5saWtlbHkoaGVhZCAmIDcpKQorCQkJaGVhZCAmPSB+N1VMTDsKKworCQlzaXplID0gODsKKwl9CisKKwloZWFkICs9IHNpemU7CisKKwlpZiAob2Zmc2V0ICsgaGVhZCA8ICh1bnNpZ25lZCBsb25nKXBlcmZfc3RhdC5zdF9zaXplKQorCQlnb3RvIG1vcmU7CisKKwlyYyA9IEVYSVRfU1VDQ0VTUzsKKwljbG9zZShpbnB1dCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYW5ub3RhdGVfdXNhZ2VbXSA9IHsKKwkicGVyZiB0cmFjZSBbPG9wdGlvbnM+XSA8Y29tbWFuZD4iLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwlPUFRfQk9PTEVBTignRCcsICJkdW1wLXJhdy10cmFjZSIsICZkdW1wX3RyYWNlLAorCQkgICAgImR1bXAgcmF3IHRyYWNlIGluIEFTQ0lJIiksCisJT1BUX0JPT0xFQU4oJ3YnLCAidmVyYm9zZSIsICZ2ZXJib3NlLAorCQkgICAgImJlIG1vcmUgdmVyYm9zZSAoc2hvdyBzeW1ib2wgYWRkcmVzcywgZXRjKSIpLAorCU9QVF9FTkQoKQorfTsKKworaW50IGNtZF90cmFjZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCit7CisJc3ltYm9sX19pbml0KCk7CisJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGFubm90YXRlX3VzYWdlLCAwKTsKKwlpZiAoYXJnYykgeworCQkvKgorCQkgKiBTcGVjaWFsIGNhc2U6IGlmIHRoZXJlJ3MgYW4gYXJndW1lbnQgbGVmdCB0aGVuIGFzc3VtZSB0aGEKKwkJICogaXQncyBhIHN5bWJvbCBmaWx0ZXI6CisJCSAqLworCQlpZiAoYXJnYyA+IDEpCisJCQl1c2FnZV93aXRoX29wdGlvbnMoYW5ub3RhdGVfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCisJc2V0dXBfcGFnZXIoKTsKKworCXJldHVybiBfX2NtZF90cmFjZSgpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLmggYi90b29scy9wZXJmL2J1aWx0aW4uaAppbmRleCA1MWQxNjgyLi4zYTYzZTQxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4uaAorKysgYi90b29scy9wZXJmL2J1aWx0aW4uaApAQCAtMjIsNSArMjIsNiBAQAogZXh0ZXJuIGludCBjbWRfdG9wKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX3ZlcnNpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfbGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF90cmFjZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLmMgYi90b29scy9wZXJmL3BlcmYuYwppbmRleCAzMTk4MmFkLi5mZTQ1ODlkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3BlcmYuYworKysgYi90b29scy9wZXJmL3BlcmYuYwpAQCAtMjkyLDYgKzI5Miw3IEBACiAJCXsgInRvcCIsIGNtZF90b3AsIDAgfSwKIAkJeyAiYW5ub3RhdGUiLCBjbWRfYW5ub3RhdGUsIDAgfSwKIAkJeyAidmVyc2lvbiIsIGNtZF92ZXJzaW9uLCAwIH0sCisJCXsgInRyYWNlIiwgY21kX3RyYWNlLCAwIH0sCiAJfTsKIAl1bnNpZ25lZCBpbnQgaTsKIAlzdGF0aWMgY29uc3QgY2hhciBleHRbXSA9IFNUUklQX0VYVEVOU0lPTjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvcGVyZi5oIGIvdG9vbHMvcGVyZi9wZXJmLmgKaW5kZXggZTUxNDhlMi4uMmFiZWIyMCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9wZXJmLmgKKysrIGIvdG9vbHMvcGVyZi9wZXJmLmgKQEAgLTQxLDYgKzQxLDEyIEBACiAjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpOwogI2VuZGlmCiAKKyNpZmRlZiBfX3NwYXJjX18KKyNpbmNsdWRlICIuLi8uLi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIgorI2RlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKCIiOjo6Im1lbW9yeSIpCisjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQorI2VuZGlmCisKICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYWJzcGF0aC5jIGIvdG9vbHMvcGVyZi91dGlsL2Fic3BhdGguYwppbmRleCA2MWQzM2I4Li5hNzkxZGQ0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYWJzcGF0aC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9hYnNwYXRoLmMKQEAgLTUwLDcgKzUwLDggQEAKIAkJCWRpZSAoIkNvdWxkIG5vdCBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOwogCiAJCWlmIChsYXN0X2VsZW0pIHsKLQkJCWludCBsZW4gPSBzdHJsZW4oYnVmKTsKKwkJCWxlbiA9IHN0cmxlbihidWYpOworCiAJCQlpZiAobGVuICsgc3RybGVuKGxhc3RfZWxlbSkgKyAyID4gUEFUSF9NQVgpCiAJCQkJZGllICgiVG9vIGxvbmcgcGF0aCBuYW1lOiAnJXMvJXMnIiwKIAkJCQkJCWJ1ZiwgbGFzdF9lbGVtKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jYWNoZS5oIGIvdG9vbHMvcGVyZi91dGlsL2NhY2hlLmgKaW5kZXggNGI1MGM0MS4uNmY4ZWE5ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NhY2hlLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NhY2hlLmgKQEAgLTUyLDcgKzUyLDYgQEAKIGV4dGVybiB2b2lkIG1heWJlX2ZsdXNoX29yX2RpZShGSUxFICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IGNvcHlfZmQoaW50IGlmZCwgaW50IG9mZCk7CiBleHRlcm4gaW50IGNvcHlfZmlsZShjb25zdCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IG1vZGUpOwotZXh0ZXJuIHNzaXplX3QgcmVhZF9pbl9mdWxsKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOwogZXh0ZXJuIHNzaXplX3Qgd3JpdGVfaW5fZnVsbChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKIGV4dGVybiB2b2lkIHdyaXRlX29yX2RpZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKIGV4dGVybiBpbnQgd3JpdGVfb3Jfd2hpbmUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwgY29uc3QgY2hhciAqbXNnKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYwppbmRleCAwMTE0NzM0Li4zYjgzODBmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jCkBAIC01MCw2ICs1MCw3IEBACiAJCQllbHNlCiAJCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKIAkJCWJyZWFrOworCQljYXNlIENIQUlOX05PTkU6CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtMTQzLDYgKzE0NCw3IEBACiAJY2FzZSBDSEFJTl9GTEFUOgogCQlwYXJhbS0+c29ydCA9IHNvcnRfY2hhaW5fZmxhdDsKIAkJYnJlYWs7CisJY2FzZSBDSEFJTl9OT05FOgogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmggYi90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmgKaW5kZXggYTkyNmFlNC4uNDNjZjNlYSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlICIuLi9wZXJmLmgiCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJzeW1ib2wuaCIKIAogZW51bSBjaGFpbl9tb2RlIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jb2xvci5jIGIvdG9vbHMvcGVyZi91dGlsL2NvbG9yLmMKaW5kZXggOTBhMDQ0ZC4uZTg4YmNhNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NvbG9yLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NvbG9yLmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCXJldHVybiBwZXJmX2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KIAotc3RhdGljIGludCBjb2xvcl92ZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwKK3N0YXRpYyBpbnQgX19jb2xvcl92ZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwKIAkJdmFfbGlzdCBhcmdzLCBjb25zdCBjaGFyICp0cmFpbCkKIHsKIAlpbnQgciA9IDA7CkBAIC0xOTEsNiArMTkxLDEwIEBACiAJcmV0dXJuIHI7CiB9CiAKK2ludCBjb2xvcl92ZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQoreworCXJldHVybiBfX2NvbG9yX3ZmcHJpbnRmKGZwLCBjb2xvciwgZm10LCBhcmdzLCBOVUxMKTsKK30KIAogCiBpbnQgY29sb3JfZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQpAQCAtMTk5LDcgKzIwMyw3IEBACiAJaW50IHI7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXIgPSBjb2xvcl92ZnByaW50ZihmcCwgY29sb3IsIGZtdCwgYXJncywgTlVMTCk7CisJciA9IGNvbG9yX3ZmcHJpbnRmKGZwLCBjb2xvciwgZm10LCBhcmdzKTsKIAl2YV9lbmQoYXJncyk7CiAJcmV0dXJuIHI7CiB9CkBAIC0yMDksNyArMjEzLDcgQEAKIAl2YV9saXN0IGFyZ3M7CiAJaW50IHI7CiAJdmFfc3RhcnQoYXJncywgZm10KTsKLQlyID0gY29sb3JfdmZwcmludGYoZnAsIGNvbG9yLCBmbXQsIGFyZ3MsICJcbiIpOworCXIgPSBfX2NvbG9yX3ZmcHJpbnRmKGZwLCBjb2xvciwgZm10LCBhcmdzLCAiXG4iKTsKIAl2YV9lbmQoYXJncyk7CiAJcmV0dXJuIHI7CiB9CkBAIC0yNDIsOSArMjQ2LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotY2hhciAqZ2V0X3BlcmNlbnRfY29sb3IoZG91YmxlIHBlcmNlbnQpCitjb25zdCBjaGFyICpnZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudCkKIHsKLQljaGFyICpjb2xvciA9IFBFUkZfQ09MT1JfTk9STUFMOworCWNvbnN0IGNoYXIgKmNvbG9yID0gUEVSRl9DT0xPUl9OT1JNQUw7CiAKIAkvKgogCSAqIFdlIGNvbG9yIGhpZ2gtb3ZlcmhlYWQgZW50cmllcyBpbiByZWQsIG1pZC1vdmVyaGVhZApAQCAtMjYzLDcgKzI2Nyw3IEBACiBpbnQgcGVyY2VudF9jb2xvcl9mcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIGRvdWJsZSBwZXJjZW50KQogewogCWludCByOwotCWNoYXIgKmNvbG9yOworCWNvbnN0IGNoYXIgKmNvbG9yOwogCiAJY29sb3IgPSBnZXRfcGVyY2VudF9jb2xvcihwZXJjZW50KTsKIAlyID0gY29sb3JfZnByaW50ZihmcCwgY29sb3IsIGZtdCwgcGVyY2VudCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY29sb3IuaCBiL3Rvb2xzL3BlcmYvdXRpbC9jb2xvci5oCmluZGV4IDcwNmNlYzUuLjU4ZDU5NzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jb2xvci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jb2xvci5oCkBAIC0zMiwxMCArMzIsMTEgQEAKIGludCBwZXJmX2NvbmZpZ19jb2xvcmJvb2woY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHN0ZG91dF9pc190dHkpOwogdm9pZCBjb2xvcl9wYXJzZShjb25zdCBjaGFyICp2YWx1ZSwgY29uc3QgY2hhciAqdmFyLCBjaGFyICpkc3QpOwogdm9pZCBjb2xvcl9wYXJzZV9tZW0oY29uc3QgY2hhciAqdmFsdWUsIGludCBsZW4sIGNvbnN0IGNoYXIgKnZhciwgY2hhciAqZHN0KTsKK2ludCBjb2xvcl92ZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsKIGludCBjb2xvcl9mcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LCAuLi4pOwogaW50IGNvbG9yX2ZwcmludGZfbG4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiBpbnQgY29sb3JfZndyaXRlX2xpbmVzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICpidWYpOwogaW50IHBlcmNlbnRfY29sb3JfZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10LCBkb3VibGUgcGVyY2VudCk7Ci1jaGFyICpnZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudCk7Citjb25zdCBjaGFyICpnZXRfcGVyY2VudF9jb2xvcihkb3VibGUgcGVyY2VudCk7CiAKICNlbmRpZiAvKiBDT0xPUl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY29uZmlnLmMgYi90b29scy9wZXJmL3V0aWwvY29uZmlnLmMKaW5kZXggNzgwZGY1NC4uODc4NDY0OSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NvbmZpZy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jb25maWcuYwpAQCAtMTYwLDE3ICsxNjAsMTggQEAKIAluYW1lW2Jhc2VsZW4rK10gPSAnLic7CiAKIAlmb3IgKDs7KSB7Ci0JCWludCBjID0gZ2V0X25leHRfY2hhcigpOwotCQlpZiAoYyA9PSAnXG4nKQorCQlpbnQgY2ggPSBnZXRfbmV4dF9jaGFyKCk7CisKKwkJaWYgKGNoID09ICdcbicpCiAJCQlyZXR1cm4gLTE7Ci0JCWlmIChjID09ICciJykKKwkJaWYgKGNoID09ICciJykKIAkJCWJyZWFrOwotCQlpZiAoYyA9PSAnXFwnKSB7Ci0JCQljID0gZ2V0X25leHRfY2hhcigpOwotCQkJaWYgKGMgPT0gJ1xuJykKKwkJaWYgKGNoID09ICdcXCcpIHsKKwkJCWNoID0gZ2V0X25leHRfY2hhcigpOworCQkJaWYgKGNoID09ICdcbicpCiAJCQkJcmV0dXJuIC0xOwogCQl9Ci0JCW5hbWVbYmFzZWxlbisrXSA9IGM7CisJCW5hbWVbYmFzZWxlbisrXSA9IGNoOwogCQlpZiAoYmFzZWxlbiA+IE1BWE5BTUUgLyAyKQogCQkJcmV0dXJuIC0xOwogCX0KQEAgLTUzMCw2ICs1MzEsOCBAQAogCQkJCQlzdG9yZS5vZmZzZXRbc3RvcmUuc2Vlbl0gPSBmdGVsbChjb25maWdfZmlsZSk7CiAJCQl9CiAJCX0KKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC02MTksNiArNjIyLDcgQEAKIAkJc3dpdGNoIChjb250ZW50c1tvZmZzZXRdKSB7CiAJCQljYXNlICc9JzogZXF1YWxfb2Zmc2V0ID0gb2Zmc2V0OyBicmVhazsKIAkJCWNhc2UgJ10nOiBicmFja2V0X29mZnNldCA9IG9mZnNldDsgYnJlYWs7CisJCQlkZWZhdWx0OiBicmVhazsKIAkJfQogCWlmIChvZmZzZXQgPiAwICYmIGNvbnRlbnRzW29mZnNldC0xXSA9PSAnXFwnKSB7CiAJCW9mZnNldF8gPSBvZmZzZXQ7CkBAIC03NDIsOSArNzQ2LDkgQEAKIAkJCWdvdG8gd3JpdGVfZXJyX291dDsKIAl9IGVsc2UgewogCQlzdHJ1Y3Qgc3RhdCBzdDsKLQkJY2hhciogY29udGVudHM7CisJCWNoYXIgKmNvbnRlbnRzOwogCQlzc2l6ZV90IGNvbnRlbnRzX3N6LCBjb3B5X2JlZ2luLCBjb3B5X2VuZDsKLQkJaW50IGksIG5ld19saW5lID0gMDsKKwkJaW50IG5ld19saW5lID0gMDsKIAogCQlpZiAodmFsdWVfcmVnZXggPT0gTlVMTCkKIAkJCXN0b3JlLnZhbHVlX3JlZ2V4ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThjYTk4ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qIEZvciBnZW5lcmFsIGRlYnVnZ2luZyBwdXJwb3NlcyAqLworCisjaW5jbHVkZSAiLi4vcGVyZi5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAiZXZlbnQuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorCitpbnQgdmVyYm9zZSA9IDA7CitpbnQgZHVtcF90cmFjZSA9IDA7CisKK2ludCBlcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh2ZXJib3NlKSB7CisJCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJCXJldCA9IHZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcmdzKTsKKwkJdmFfZW5kKGFyZ3MpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBkdW1wX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZHVtcF90cmFjZSkgeworCQl2YV9zdGFydChhcmdzLCBmbXQpOworCQlyZXQgPSB2cHJpbnRmKGZtdCwgYXJncyk7CisJCXZhX2VuZChhcmdzKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGR1bXBfcHJpbnRmX2NvbG9yKGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgY2hhciAqY29sb3IsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZHVtcF90cmFjZSkgeworCQl2YV9zdGFydChhcmdzLCBjb2xvcik7CisJCXJldCA9IGNvbG9yX3ZmcHJpbnRmKHN0ZG91dCwgY29sb3IsIGZtdCwgYXJncyk7CisJCXZhX2VuZChhcmdzKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKK3ZvaWQgdHJhY2VfZXZlbnQoZXZlbnRfdCAqZXZlbnQpCit7CisJdW5zaWduZWQgY2hhciAqcmF3X2V2ZW50ID0gKHZvaWQgKilldmVudDsKKwljb25zdCBjaGFyICpjb2xvciA9IFBFUkZfQ09MT1JfQkxVRTsKKwlpbnQgaSwgajsKKworCWlmICghZHVtcF90cmFjZSkKKwkJcmV0dXJuOworCisJZHVtcF9wcmludGYoIi4iKTsKKwlkdW1wX3ByaW50Zl9jb2xvcigiXG4uIC4uLiByYXcgZXZlbnQ6IHNpemUgJWQgYnl0ZXNcbiIsIGNvbG9yLAorCQkJICBldmVudC0+aGVhZGVyLnNpemUpOworCisJZm9yIChpID0gMDsgaSA8IGV2ZW50LT5oZWFkZXIuc2l6ZTsgaSsrKSB7CisJCWlmICgoaSAmIDE1KSA9PSAwKSB7CisJCQlkdW1wX3ByaW50ZigiLiIpOworCQkJZHVtcF9wcmludGZfY29sb3IoIiAgJTA0eDogIiwgY29sb3IsIGkpOworCQl9CisKKwkJZHVtcF9wcmludGZfY29sb3IoIiAlMDJ4IiwgY29sb3IsIHJhd19ldmVudFtpXSk7CisKKwkJaWYgKCgoaSAmIDE1KSA9PSAxNSkgfHwgaSA9PSBldmVudC0+aGVhZGVyLnNpemUtMSkgeworCQkJZHVtcF9wcmludGZfY29sb3IoIiAgIiwgY29sb3IpOworCQkJZm9yIChqID0gMDsgaiA8IDE1LShpICYgMTUpOyBqKyspCisJCQkJZHVtcF9wcmludGZfY29sb3IoIiAgICIsIGNvbG9yKTsKKwkJCWZvciAoaiA9IDA7IGogPCAoaSAmIDE1KTsgaisrKSB7CisJCQkJaWYgKGlzcHJpbnQocmF3X2V2ZW50W2ktMTUral0pKQorCQkJCQlkdW1wX3ByaW50Zl9jb2xvcigiJWMiLCBjb2xvciwKKwkJCQkJCQkgIHJhd19ldmVudFtpLTE1K2pdKTsKKwkJCQllbHNlCisJCQkJCWR1bXBfcHJpbnRmX2NvbG9yKCIuIiwgY29sb3IpOworCQkJfQorCQkJZHVtcF9wcmludGZfY29sb3IoIlxuIiwgY29sb3IpOworCQl9CisJfQorCWR1bXBfcHJpbnRmKCIuXG4iKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5oIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM3ZWVhNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5oCkBAIC0wLDAgKzEsOCBAQAorLyogRm9yIGRlYnVnZ2luZyBnZW5lcmFsIHB1cnBvc2VzICovCisKK2V4dGVybiBpbnQgdmVyYm9zZTsKK2V4dGVybiBpbnQgZHVtcF90cmFjZTsKKworaW50IGVwcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSk7CitpbnQgZHVtcF9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSk7Cit2b2lkIHRyYWNlX2V2ZW50KGV2ZW50X3QgKmV2ZW50KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyZDRlOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCkBAIC0wLDAgKzEsOTYgQEAKKyNpZm5kZWYgX19QRVJGX0VWRU5UX0gKKyNkZWZpbmUgX19QRVJGX0VWRU5UX0gKKyNpbmNsdWRlICIuLi9wZXJmLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworZW51bSB7CisJU0hPV19LRVJORUwJPSAxLAorCVNIT1dfVVNFUgk9IDIsCisJU0hPV19IVgkJPSA0LAorfTsKKworLyoKKyAqIFBFUkZfU0FNUExFX0lQIHwgUEVSRl9TQU1QTEVfVElEIHwgKgorICovCitzdHJ1Y3QgaXBfZXZlbnQgeworCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7CisJdTY0IGlwOworCXUzMiBwaWQsIHRpZDsKKwl1bnNpZ25lZCBjaGFyIF9fbW9yZV9kYXRhW107Cit9OworCitzdHJ1Y3QgbW1hcF9ldmVudCB7CisJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKKwl1MzIgcGlkLCB0aWQ7CisJdTY0IHN0YXJ0OworCXU2NCBsZW47CisJdTY0IHBnb2ZmOworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworfTsKKworc3RydWN0IGNvbW1fZXZlbnQgeworCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7CisJdTMyIHBpZCwgdGlkOworCWNoYXIgY29tbVsxNl07Cit9OworCitzdHJ1Y3QgZm9ya19ldmVudCB7CisJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKKwl1MzIgcGlkLCBwcGlkOworCXUzMiB0aWQsIHB0aWQ7Cit9OworCitzdHJ1Y3QgbG9zdF9ldmVudCB7CisJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKKwl1NjQgaWQ7CisJdTY0IGxvc3Q7Cit9OworCisvKgorICogUEVSRl9GT1JNQVRfRU5BQkxFRCB8IFBFUkZfRk9STUFUX1JVTk5JTkcgfCBQRVJGX0ZPUk1BVF9JRAorICovCitzdHJ1Y3QgcmVhZF9ldmVudCB7CisJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyIGhlYWRlcjsKKwl1MzIgcGlkLHRpZDsKKwl1NjQgdmFsdWU7CisJdTY0IHRpbWVfZW5hYmxlZDsKKwl1NjQgdGltZV9ydW5uaW5nOworCXU2NCBpZDsKK307CisKK3R5cGVkZWYgdW5pb24gZXZlbnRfdW5pb24geworCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CisJc3RydWN0IGlwX2V2ZW50CQkJaXA7CisJc3RydWN0IG1tYXBfZXZlbnQJCW1tYXA7CisJc3RydWN0IGNvbW1fZXZlbnQJCWNvbW07CisJc3RydWN0IGZvcmtfZXZlbnQJCWZvcms7CisJc3RydWN0IGxvc3RfZXZlbnQJCWxvc3Q7CisJc3RydWN0IHJlYWRfZXZlbnQJCXJlYWQ7Cit9IGV2ZW50X3Q7CisKK3N0cnVjdCBtYXAgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwl1NjQJCQlzdGFydDsKKwl1NjQJCQllbmQ7CisJdTY0CQkJcGdvZmY7CisJdTY0CQkJKCptYXBfaXApKHN0cnVjdCBtYXAgKiwgdTY0KTsKKwlzdHJ1Y3QgZHNvCQkqZHNvOworfTsKKworc3RhdGljIGlubGluZSB1NjQgbWFwX19tYXBfaXAoc3RydWN0IG1hcCAqbWFwLCB1NjQgaXApCit7CisJcmV0dXJuIGlwIC0gbWFwLT5zdGFydCArIG1hcC0+cGdvZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IHZkc29fX21hcF9pcChzdHJ1Y3QgbWFwICptYXAgX191c2VkLCB1NjQgaXApCit7CisJcmV0dXJuIGlwOworfQorCitzdHJ1Y3QgbWFwICptYXBfX25ldyhzdHJ1Y3QgbW1hcF9ldmVudCAqZXZlbnQsIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbik7CitzdHJ1Y3QgbWFwICptYXBfX2Nsb25lKHN0cnVjdCBtYXAgKnNlbGYpOworaW50IG1hcF9fb3ZlcmxhcChzdHJ1Y3QgbWFwICpsLCBzdHJ1Y3QgbWFwICpyKTsKK3NpemVfdCBtYXBfX2ZwcmludGYoc3RydWN0IG1hcCAqc2VsZiwgRklMRSAqZnApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9leGVjX2NtZC5jIGIvdG9vbHMvcGVyZi91dGlsL2V4ZWNfY21kLmMKaW5kZXggMzRhMzUyOC4uMjc0NTYwNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V4ZWNfY21kLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V4ZWNfY21kLmMKQEAgLTYsNyArNiw2IEBACiAKICNkZWZpbmUgTUFYX0FSR1MJMzIKIAotZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwogc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3ZfZXhlY19wYXRoOwogc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3YwX3BhdGg7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCBiOTJhNDU3Li5lYzRkNGMyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC0yMzcsOSArMjM3LDQ0IEBACiAJc2VsZi0+ZGF0YV9vZmZzZXQgPSBmX2hlYWRlci5kYXRhLm9mZnNldDsKIAlzZWxmLT5kYXRhX3NpemUgICA9IGZfaGVhZGVyLmRhdGEuc2l6ZTsKIAotCWxzZWVrKGZkLCBzZWxmLT5kYXRhX29mZnNldCArIHNlbGYtPmRhdGFfc2l6ZSwgU0VFS19TRVQpOworCWxzZWVrKGZkLCBzZWxmLT5kYXRhX29mZnNldCwgU0VFS19TRVQpOwogCiAJc2VsZi0+ZnJvemVuID0gMTsKIAogCXJldHVybiBzZWxmOwogfQorCit1NjQgcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyKQoreworCXU2NCB0eXBlID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBoZWFkZXItPmF0dHJzOyBpKyspIHsKKwkJc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKmF0dHIgPSBoZWFkZXItPmF0dHJbaV07CisKKwkJaWYgKCF0eXBlKQorCQkJdHlwZSA9IGF0dHItPmF0dHIuc2FtcGxlX3R5cGU7CisJCWVsc2UgaWYgKHR5cGUgIT0gYXR0ci0+YXR0ci5zYW1wbGVfdHlwZSkKKwkJCWRpZSgibm9uIG1hdGNoaW5nIHNhbXBsZV90eXBlIik7CisJfQorCisJcmV0dXJuIHR5cGU7Cit9CisKK3N0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqCitwZXJmX2hlYWRlcl9fZmluZF9hdHRyKHU2NCBpZCwgc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGVhZGVyLT5hdHRyczsgaSsrKSB7CisJCXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICphdHRyID0gaGVhZGVyLT5hdHRyW2ldOworCQlpbnQgajsKKworCQlmb3IgKGogPSAwOyBqIDwgYXR0ci0+aWRzOyBqKyspIHsKKwkJCWlmIChhdHRyLT5pZFtqXSA9PSBpZCkKKwkJCQlyZXR1cm4gJmF0dHItPmF0dHI7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaCBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaAppbmRleCBiZjI4MDQ0Li41ZDBhNzJlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCkBAIC0zMSw2ICszMSwxMCBAQAogcGVyZl9oZWFkZXJfYXR0cl9fbmV3KHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqYXR0cik7CiB2b2lkIHBlcmZfaGVhZGVyX2F0dHJfX2FkZF9pZChzdHJ1Y3QgcGVyZl9oZWFkZXJfYXR0ciAqc2VsZiwgdTY0IGlkKTsKIAordTY0IHBlcmZfaGVhZGVyX19zYW1wbGVfdHlwZShzdHJ1Y3QgcGVyZl9oZWFkZXIgKmhlYWRlcik7CitzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKgorcGVyZl9oZWFkZXJfX2ZpbmRfYXR0cih1NjQgaWQsIHN0cnVjdCBwZXJmX2hlYWRlciAqaGVhZGVyKTsKKwogCiBzdHJ1Y3QgcGVyZl9oZWFkZXIgKnBlcmZfaGVhZGVyX19uZXcodm9pZCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDRlMDIzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCkBAIC0wLDAgKzEsOTcgQEAKKyNpbmNsdWRlICJldmVudC5oIgorI2luY2x1ZGUgInN5bWJvbC5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2Fub25fbWVtb3J5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXJldHVybiBzdHJjbXAoZmlsZW5hbWUsICIvL2Fub24iKSA9PSAwOworfQorCitzdGF0aWMgaW50IHN0cmNvbW1vbihjb25zdCBjaGFyICpwYXRobmFtZSwgY2hhciAqY3dkLCBpbnQgY3dkbGVuKQoreworCWludCBuID0gMDsKKworCXdoaWxlIChuIDwgY3dkbGVuICYmIHBhdGhuYW1lW25dID09IGN3ZFtuXSkKKwkJKytuOworCisJcmV0dXJuIG47Cit9CisKKyBzdHJ1Y3QgbWFwICptYXBfX25ldyhzdHJ1Y3QgbW1hcF9ldmVudCAqZXZlbnQsIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbikKK3sKKwlzdHJ1Y3QgbWFwICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOworCisJaWYgKHNlbGYgIT0gTlVMTCkgeworCQljb25zdCBjaGFyICpmaWxlbmFtZSA9IGV2ZW50LT5maWxlbmFtZTsKKwkJY2hhciBuZXdmaWxlbmFtZVtQQVRIX01BWF07CisJCWludCBhbm9uOworCisJCWlmIChjd2QpIHsKKwkJCWludCBuID0gc3RyY29tbW9uKGZpbGVuYW1lLCBjd2QsIGN3ZGxlbik7CisKKwkJCWlmIChuID09IGN3ZGxlbikgeworCQkJCXNucHJpbnRmKG5ld2ZpbGVuYW1lLCBzaXplb2YobmV3ZmlsZW5hbWUpLAorCQkJCQkgIi4lcyIsIGZpbGVuYW1lICsgbik7CisJCQkJZmlsZW5hbWUgPSBuZXdmaWxlbmFtZTsKKwkJCX0KKwkJfQorCisJCWFub24gPSBpc19hbm9uX21lbW9yeShmaWxlbmFtZSk7CisKKwkJaWYgKGFub24pIHsKKwkJCXNucHJpbnRmKG5ld2ZpbGVuYW1lLCBzaXplb2YobmV3ZmlsZW5hbWUpLCAiL3RtcC9wZXJmLSVkLm1hcCIsIGV2ZW50LT5waWQpOworCQkJZmlsZW5hbWUgPSBuZXdmaWxlbmFtZTsKKwkJfQorCisJCXNlbGYtPnN0YXJ0ID0gZXZlbnQtPnN0YXJ0OworCQlzZWxmLT5lbmQgICA9IGV2ZW50LT5zdGFydCArIGV2ZW50LT5sZW47CisJCXNlbGYtPnBnb2ZmID0gZXZlbnQtPnBnb2ZmOworCisJCXNlbGYtPmRzbyA9IGRzb3NfX2ZpbmRuZXcoZmlsZW5hbWUpOworCQlpZiAoc2VsZi0+ZHNvID09IE5VTEwpCisJCQlnb3RvIG91dF9kZWxldGU7CisKKwkJaWYgKHNlbGYtPmRzbyA9PSB2ZHNvIHx8IGFub24pCisJCQlzZWxmLT5tYXBfaXAgPSB2ZHNvX19tYXBfaXA7CisJCWVsc2UKKwkJCXNlbGYtPm1hcF9pcCA9IG1hcF9fbWFwX2lwOworCX0KKwlyZXR1cm4gc2VsZjsKK291dF9kZWxldGU6CisJZnJlZShzZWxmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IG1hcCAqbWFwX19jbG9uZShzdHJ1Y3QgbWFwICpzZWxmKQoreworCXN0cnVjdCBtYXAgKm1hcCA9IG1hbGxvYyhzaXplb2YoKnNlbGYpKTsKKworCWlmICghbWFwKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbWNweShtYXAsIHNlbGYsIHNpemVvZigqc2VsZikpOworCisJcmV0dXJuIG1hcDsKK30KKworaW50IG1hcF9fb3ZlcmxhcChzdHJ1Y3QgbWFwICpsLCBzdHJ1Y3QgbWFwICpyKQoreworCWlmIChsLT5zdGFydCA+IHItPnN0YXJ0KSB7CisJCXN0cnVjdCBtYXAgKnQgPSBsOworCQlsID0gcjsKKwkJciA9IHQ7CisJfQorCisJaWYgKGwtPmVuZCA+IHItPnN0YXJ0KQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzaXplX3QgbWFwX19mcHJpbnRmKHN0cnVjdCBtYXAgKnNlbGYsIEZJTEUgKmZwKQoreworCXJldHVybiBmcHJpbnRmKGZwLCAiICVMeC0lTHggJUx4ICVzXG4iLAorCQkgICAgICAgc2VsZi0+c3RhcnQsIHNlbGYtPmVuZCwgc2VsZi0+cGdvZmYsIHNlbGYtPmRzby0+bmFtZSk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvbW9kdWxlLmMgYi90b29scy9wZXJmL3V0aWwvbW9kdWxlLmMKaW5kZXggZGRhYmU5Mi4uM2Q1NjdmZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21vZHVsZS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9tb2R1bGUuYwpAQCAtNDM2LDkgKzQzNiw5IEBACiAJCWdvdG8gb3V0X2ZhaWx1cmU7CiAKIAl3aGlsZSAoIWZlb2YoZmlsZSkpIHsKLQkJY2hhciAqcGF0aCwgKm5hbWUsICp0bXA7CisJCWNoYXIgKm5hbWUsICp0bXA7CiAJCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKLQkJaW50IGxpbmVfbGVuLCBsZW47CisJCWludCBsaW5lX2xlbjsKIAogCQlsaW5lX2xlbiA9IGdldGxpbmUoJmxpbmUsICZuLCBmaWxlKTsKIAkJaWYgKGxpbmVfbGVuIDwgMCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwppbmRleCAwNDQxNzg0Li5hNTg3ZDQxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCkBAIC0xLDIzICsxLDIxIEBACiAKLSNpbmNsdWRlICIuLi9wZXJmLmgiCiAjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgIi4uL3BlcmYuaCIKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAjaW5jbHVkZSAicGFyc2UtZXZlbnRzLmgiCiAjaW5jbHVkZSAiZXhlY19jbWQuaCIKICNpbmNsdWRlICJzdHJpbmcuaCIKICNpbmNsdWRlICJjYWNoZS5oIgogCi1leHRlcm4gY2hhciAqc3RyY2FzZXN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKTsKLQogaW50CQkJCQlucl9jb3VudGVyczsKIAogc3RydWN0IHBlcmZfY291bnRlcl9hdHRyCQlhdHRyc1tNQVhfQ09VTlRFUlNdOwogCiBzdHJ1Y3QgZXZlbnRfc3ltYm9sIHsKLQl1OAl0eXBlOwotCXU2NAljb25maWc7Ci0JY2hhcgkqc3ltYm9sOwotCWNoYXIJKmFsaWFzOworCXU4CQl0eXBlOworCXU2NAkJY29uZmlnOworCWNvbnN0IGNoYXIJKnN5bWJvbDsKKwljb25zdCBjaGFyCSphbGlhczsKIH07CiAKIGNoYXIgZGVidWdmc19wYXRoW01BWFBBVEhMRU5dOwpAQCAtNTEsNyArNDksNyBAQAogI2RlZmluZSBQRVJGX0NPVU5URVJfVFlQRShjb25maWcpCV9fUEVSRl9DT1VOVEVSX0ZJRUxEKGNvbmZpZywgVFlQRSkKICNkZWZpbmUgUEVSRl9DT1VOVEVSX0lEKGNvbmZpZykJCV9fUEVSRl9DT1VOVEVSX0ZJRUxEKGNvbmZpZywgRVZFTlQpCiAKLXN0YXRpYyBjaGFyICpod19ldmVudF9uYW1lc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmh3X2V2ZW50X25hbWVzW10gPSB7CiAJImN5Y2xlcyIsCiAJImluc3RydWN0aW9ucyIsCiAJImNhY2hlLXJlZmVyZW5jZXMiLApAQCAtNjEsNyArNTksNyBAQAogCSJidXMtY3ljbGVzIiwKIH07CiAKLXN0YXRpYyBjaGFyICpzd19ldmVudF9uYW1lc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKnN3X2V2ZW50X25hbWVzW10gPSB7CiAJImNwdS1jbG9jay1tc2VjcyIsCiAJInRhc2stY2xvY2stbXNlY3MiLAogCSJwYWdlLWZhdWx0cyIsCkBAIC03Myw3ICs3MSw3IEBACiAKICNkZWZpbmUgTUFYX0FMSUFTRVMgOAogCi1zdGF0aWMgY2hhciAqaHdfY2FjaGVbXVtNQVhfQUxJQVNFU10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqaHdfY2FjaGVbXVtNQVhfQUxJQVNFU10gPSB7CiAgeyAiTDEtZGNhY2hlIiwJImwxLWQiLAkJImwxZCIsCQkiTDEtZGF0YSIsCQl9LAogIHsgIkwxLWljYWNoZSIsCSJsMS1pIiwJCSJsMWkiLAkJIkwxLWluc3RydWN0aW9uIiwJfSwKICB7ICJMTEMiLAkiTDIiCQkJCQkJCX0sCkBAIC04MiwxMyArODAsMTMgQEAKICB7ICJicmFuY2giLAkiYnJhbmNoZXMiLAkiYnB1IiwJCSJidGIiLAkJImJwYyIsCX0sCiB9OwogCi1zdGF0aWMgY2hhciAqaHdfY2FjaGVfb3BbXVtNQVhfQUxJQVNFU10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqaHdfY2FjaGVfb3BbXVtNQVhfQUxJQVNFU10gPSB7CiAgeyAibG9hZCIsCSJsb2FkcyIsCSJyZWFkIiwJCQkJCX0sCiAgeyAic3RvcmUiLAkic3RvcmVzIiwJIndyaXRlIiwJCQkJfSwKICB7ICJwcmVmZXRjaCIsCSJwcmVmZXRjaGVzIiwJInNwZWN1bGF0aXZlLXJlYWQiLCAic3BlY3VsYXRpdmUtbG9hZCIsCX0sCiB9OwogCi1zdGF0aWMgY2hhciAqaHdfY2FjaGVfcmVzdWx0W11bTUFYX0FMSUFTRVNdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmh3X2NhY2hlX3Jlc3VsdFtdW01BWF9BTElBU0VTXSA9IHsKICB7ICJyZWZzIiwJIlJlZmVyZW5jZSIsCSJvcHMiLAkJImFjY2VzcyIsCQl9LAogIHsgIm1pc3NlcyIsCSJtaXNzIiwJCQkJCQkJfSwKIH07CkBAIC0xMTMsMTEgKzExMSw5IEBACiAgW0MoQlBVKV0JPSAoQ0FDSEVfUkVBRCksCiB9OwogCi0jZGVmaW5lIGZvcl9lYWNoX3N1YnN5c3RlbShzeXNfZGlyLCBzeXNfZGlyZW50LCBzeXNfbmV4dCwgZmlsZSwgc3QpCSAgICAgICBcCisjZGVmaW5lIGZvcl9lYWNoX3N1YnN5c3RlbShzeXNfZGlyLCBzeXNfZGlyZW50LCBzeXNfbmV4dCkJICAgICAgIFwKIAl3aGlsZSAoIXJlYWRkaXJfcihzeXNfZGlyLCAmc3lzX2RpcmVudCwgJnN5c19uZXh0KSAmJiBzeXNfbmV4dCkJICAgICAgIFwKLQlpZiAoc25wcmludGYoZmlsZSwgTUFYUEFUSExFTiwgIiVzLyVzIiwgZGVidWdmc19wYXRoLAkgICAgICAgCSAgICAgICBcCi0JCQlzeXNfZGlyZW50LmRfbmFtZSkgJiYJCSAgICAgICAJCSAgICAgICBcCi0JICAgKCFzdGF0KGZpbGUsICZzdCkpICYmIChTX0lTRElSKHN0LnN0X21vZGUpKSAmJgkJICAgICAgIFwKKwlpZiAoc3lzX2RpcmVudC5kX3R5cGUgPT0gRFRfRElSICYmCQkJCSAgICAgICBcCiAJICAgKHN0cmNtcChzeXNfZGlyZW50LmRfbmFtZSwgIi4iKSkgJiYJCQkJICAgICAgIFwKIAkgICAoc3RyY21wKHN5c19kaXJlbnQuZF9uYW1lLCAiLi4iKSkpCiAKQEAgLTEzNiwxMSArMTMyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBmb3JfZWFjaF9ldmVudChzeXNfZGlyZW50LCBldnRfZGlyLCBldnRfZGlyZW50LCBldnRfbmV4dCwgZmlsZSwgc3QpICAgIFwKKyNkZWZpbmUgZm9yX2VhY2hfZXZlbnQoc3lzX2RpcmVudCwgZXZ0X2RpciwgZXZ0X2RpcmVudCwgZXZ0X25leHQpCSAgICAgICBcCiAJd2hpbGUgKCFyZWFkZGlyX3IoZXZ0X2RpciwgJmV2dF9kaXJlbnQsICZldnRfbmV4dCkgJiYgZXZ0X25leHQpICAgICAgICBcCi0JaWYgKHNucHJpbnRmKGZpbGUsIE1BWFBBVEhMRU4sICIlcy8lcy8lcyIsIGRlYnVnZnNfcGF0aCwJICAgICAgIFwKLQkJICAgICBzeXNfZGlyZW50LmRfbmFtZSwgZXZ0X2RpcmVudC5kX25hbWUpICYmCQkgICAgICAgXAotCSAgICghc3RhdChmaWxlLCAmc3QpKSAmJiAoU19JU0RJUihzdC5zdF9tb2RlKSkgJiYJCSAgICAgICBcCisJaWYgKGV2dF9kaXJlbnQuZF90eXBlID09IERUX0RJUiAmJgkJCQkgICAgICAgXAogCSAgIChzdHJjbXAoZXZ0X2RpcmVudC5kX25hbWUsICIuIikpICYmCQkJCSAgICAgICBcCiAJICAgKHN0cmNtcChldnRfZGlyZW50LmRfbmFtZSwgIi4uIikpICYmCQkJCSAgICAgICBcCiAJICAgKCF0cF9ldmVudF9oYXNfaWQoJnN5c19kaXJlbnQsICZldnRfZGlyZW50KSkpCkBAIC0xNTgsMzQgKzE1MiwzOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY2hhciAqdHJhY2Vwb2ludF9pZF90b19uYW1lKHU2NCBjb25maWcpCitzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICp0cmFjZXBvaW50X2lkX3RvX3BhdGgodTY0IGNvbmZpZykKIHsKLQlzdGF0aWMgY2hhciB0cmFjZXBvaW50X25hbWVbMiAqIE1BWF9FVkVOVF9MRU5HVEhdOworCXN0cnVjdCB0cmFjZXBvaW50X3BhdGggKnBhdGggPSBOVUxMOwogCURJUiAqc3lzX2RpciwgKmV2dF9kaXI7CiAJc3RydWN0IGRpcmVudCAqc3lzX25leHQsICpldnRfbmV4dCwgc3lzX2RpcmVudCwgZXZ0X2RpcmVudDsKLQlzdHJ1Y3Qgc3RhdCBzdDsKIAljaGFyIGlkX2J1Zls0XTsKLQlpbnQgZmQ7CisJaW50IHN5c19kaXJfZmQsIGZkOwogCXU2NCBpZDsKIAljaGFyIGV2dF9wYXRoW01BWFBBVEhMRU5dOwogCiAJaWYgKHZhbGlkX2RlYnVnZnNfbW91bnQoZGVidWdmc19wYXRoKSkKLQkJcmV0dXJuICJ1bmtvd24iOworCQlyZXR1cm4gTlVMTDsKIAogCXN5c19kaXIgPSBvcGVuZGlyKGRlYnVnZnNfcGF0aCk7CiAJaWYgKCFzeXNfZGlyKQogCQlnb3RvIGNsZWFudXA7CisJc3lzX2Rpcl9mZCA9IGRpcmZkKHN5c19kaXIpOwogCi0JZm9yX2VhY2hfc3Vic3lzdGVtKHN5c19kaXIsIHN5c19kaXJlbnQsIHN5c19uZXh0LCBldnRfcGF0aCwgc3QpIHsKLQkJZXZ0X2RpciA9IG9wZW5kaXIoZXZ0X3BhdGgpOwotCQlpZiAoIWV2dF9kaXIpCi0JCQlnb3RvIGNsZWFudXA7Ci0JCWZvcl9lYWNoX2V2ZW50KHN5c19kaXJlbnQsIGV2dF9kaXIsIGV2dF9kaXJlbnQsIGV2dF9uZXh0LAotCQkJCQkJCQlldnRfcGF0aCwgc3QpIHsKLQkJCXNucHJpbnRmKGV2dF9wYXRoLCBNQVhQQVRITEVOLCAiJXMvJXMvJXMvaWQiLAotCQkJCSBkZWJ1Z2ZzX3BhdGgsIHN5c19kaXJlbnQuZF9uYW1lLAorCWZvcl9lYWNoX3N1YnN5c3RlbShzeXNfZGlyLCBzeXNfZGlyZW50LCBzeXNfbmV4dCkgeworCQlpbnQgZGZkID0gb3BlbmF0KHN5c19kaXJfZmQsIHN5c19kaXJlbnQuZF9uYW1lLAorCQkJCSBPX1JET05MWXxPX0RJUkVDVE9SWSksIGV2dF9kaXJfZmQ7CisJCWlmIChkZmQgPT0gLTEpCisJCQljb250aW51ZTsKKwkJZXZ0X2RpciA9IGZkb3BlbmRpcihkZmQpOworCQlpZiAoIWV2dF9kaXIpIHsKKwkJCWNsb3NlKGRmZCk7CisJCQljb250aW51ZTsKKwkJfQorCQlldnRfZGlyX2ZkID0gZGlyZmQoZXZ0X2Rpcik7CisJCWZvcl9lYWNoX2V2ZW50KHN5c19kaXJlbnQsIGV2dF9kaXIsIGV2dF9kaXJlbnQsIGV2dF9uZXh0KSB7CisJCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzL2lkIiwKIAkJCQkgZXZ0X2RpcmVudC5kX25hbWUpOwotCQkJZmQgPSBvcGVuKGV2dF9wYXRoLCBPX1JET05MWSk7CisJCQlmZCA9IG9wZW5hdChldnRfZGlyX2ZkLCBldnRfcGF0aCwgT19SRE9OTFkpOwogCQkJaWYgKGZkIDwgMCkKIAkJCQljb250aW51ZTsKIAkJCWlmIChyZWFkKGZkLCBpZF9idWYsIHNpemVvZihpZF9idWYpKSA8IDApIHsKQEAgLTE5NywxMCArMTk2LDIzIEBACiAJCQlpZiAoaWQgPT0gY29uZmlnKSB7CiAJCQkJY2xvc2VkaXIoZXZ0X2Rpcik7CiAJCQkJY2xvc2VkaXIoc3lzX2Rpcik7Ci0JCQkJc25wcmludGYodHJhY2Vwb2ludF9uYW1lLCAyICogTUFYX0VWRU5UX0xFTkdUSCwKLQkJCQkJIiVzOiVzIiwgc3lzX2RpcmVudC5kX25hbWUsCi0JCQkJCWV2dF9kaXJlbnQuZF9uYW1lKTsKLQkJCQlyZXR1cm4gdHJhY2Vwb2ludF9uYW1lOworCQkJCXBhdGggPSBjYWxsb2MoMSwgc2l6ZW9mKHBhdGgpKTsKKwkJCQlwYXRoLT5zeXN0ZW0gPSBtYWxsb2MoTUFYX0VWRU5UX0xFTkdUSCk7CisJCQkJaWYgKCFwYXRoLT5zeXN0ZW0pIHsKKwkJCQkJZnJlZShwYXRoKTsKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJfQorCQkJCXBhdGgtPm5hbWUgPSBtYWxsb2MoTUFYX0VWRU5UX0xFTkdUSCk7CisJCQkJaWYgKCFwYXRoLT5uYW1lKSB7CisJCQkJCWZyZWUocGF0aC0+c3lzdGVtKTsKKwkJCQkJZnJlZShwYXRoKTsKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJfQorCQkJCXN0cm5jcHkocGF0aC0+c3lzdGVtLCBzeXNfZGlyZW50LmRfbmFtZSwKKwkJCQkJTUFYX0VWRU5UX0xFTkdUSCk7CisJCQkJc3RybmNweShwYXRoLT5uYW1lLCBldnRfZGlyZW50LmRfbmFtZSwKKwkJCQkJTUFYX0VWRU5UX0xFTkdUSCk7CisJCQkJcmV0dXJuIHBhdGg7CiAJCQl9CiAJCX0KIAkJY2xvc2VkaXIoZXZ0X2Rpcik7CkBAIC0yMDgsNyArMjIwLDI1IEBACiAKIGNsZWFudXA6CiAJY2xvc2VkaXIoc3lzX2Rpcik7Ci0JcmV0dXJuICJ1bmtvd24iOworCXJldHVybiBOVUxMOworfQorCisjZGVmaW5lIFRQX1BBVEhfTEVOIChNQVhfRVZFTlRfTEVOR1RIICogMiArIDEpCitzdGF0aWMgY29uc3QgY2hhciAqdHJhY2Vwb2ludF9pZF90b19uYW1lKHU2NCBjb25maWcpCit7CisJc3RhdGljIGNoYXIgYnVmW1RQX1BBVEhfTEVOXTsKKwlzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICpwYXRoOworCisJcGF0aCA9IHRyYWNlcG9pbnRfaWRfdG9fcGF0aChjb25maWcpOworCWlmIChwYXRoKSB7CisJCXNucHJpbnRmKGJ1ZiwgVFBfUEFUSF9MRU4sICIlczolcyIsIHBhdGgtPnN5c3RlbSwgcGF0aC0+bmFtZSk7CisJCWZyZWUocGF0aC0+bmFtZSk7CisJCWZyZWUocGF0aC0+c3lzdGVtKTsKKwkJZnJlZShwYXRoKTsKKwl9IGVsc2UKKwkJc25wcmludGYoYnVmLCBUUF9QQVRIX0xFTiwgIiVzOiVzIiwgInVua25vd24iLCAidW5rbm93biIpOworCisJcmV0dXJuIGJ1ZjsKIH0KIAogc3RhdGljIGludCBpc19jYWNoZV9vcF92YWxpZCh1OCBjYWNoZV90eXBlLCB1OCBjYWNoZV9vcCkKQEAgLTIzNSw3ICsyNjUsNyBAQAogCXJldHVybiBuYW1lOwogfQogCi1jaGFyICpldmVudF9uYW1lKGludCBjb3VudGVyKQorY29uc3QgY2hhciAqZXZlbnRfbmFtZShpbnQgY291bnRlcikKIHsKIAl1NjQgY29uZmlnID0gYXR0cnNbY291bnRlcl0uY29uZmlnOwogCWludCB0eXBlID0gYXR0cnNbY291bnRlcl0udHlwZTsKQEAgLTI0Myw3ICsyNzMsNyBAQAogCXJldHVybiBfX2V2ZW50X25hbWUodHlwZSwgY29uZmlnKTsKIH0KIAotY2hhciAqX19ldmVudF9uYW1lKGludCB0eXBlLCB1NjQgY29uZmlnKQorY29uc3QgY2hhciAqX19ldmVudF9uYW1lKGludCB0eXBlLCB1NjQgY29uZmlnKQogewogCXN0YXRpYyBjaGFyIGJ1ZlszMl07CiAKQEAgLTI5NCw3ICszMjQsNyBAQAogCXJldHVybiAidW5rbm93biI7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfYWxpYXNlcyhjb25zdCBjaGFyICoqc3RyLCBjaGFyICpuYW1lc1tdW01BWF9BTElBU0VTXSwgaW50IHNpemUpCitzdGF0aWMgaW50IHBhcnNlX2FsaWFzZXMoY29uc3QgY2hhciAqKnN0ciwgY29uc3QgY2hhciAqbmFtZXNbXVtNQVhfQUxJQVNFU10sIGludCBzaXplKQogewogCWludCBpLCBqOwogCWludCBuLCBsb25nZXN0ID0gLTE7CkBAIC01OTgsNyArNjI4LDcgQEAKIHsKIAlESVIgKnN5c19kaXIsICpldnRfZGlyOwogCXN0cnVjdCBkaXJlbnQgKnN5c19uZXh0LCAqZXZ0X25leHQsIHN5c19kaXJlbnQsIGV2dF9kaXJlbnQ7Ci0Jc3RydWN0IHN0YXQgc3Q7CisJaW50IHN5c19kaXJfZmQ7CiAJY2hhciBldnRfcGF0aFtNQVhQQVRITEVOXTsKIAogCWlmICh2YWxpZF9kZWJ1Z2ZzX21vdW50KGRlYnVnZnNfcGF0aCkpCkBAIC02MDcsMTYgKzYzNywyMyBAQAogCXN5c19kaXIgPSBvcGVuZGlyKGRlYnVnZnNfcGF0aCk7CiAJaWYgKCFzeXNfZGlyKQogCQlnb3RvIGNsZWFudXA7CisJc3lzX2Rpcl9mZCA9IGRpcmZkKHN5c19kaXIpOwogCi0JZm9yX2VhY2hfc3Vic3lzdGVtKHN5c19kaXIsIHN5c19kaXJlbnQsIHN5c19uZXh0LCBldnRfcGF0aCwgc3QpIHsKLQkJZXZ0X2RpciA9IG9wZW5kaXIoZXZ0X3BhdGgpOwotCQlpZiAoIWV2dF9kaXIpCi0JCQlnb3RvIGNsZWFudXA7Ci0JCWZvcl9lYWNoX2V2ZW50KHN5c19kaXJlbnQsIGV2dF9kaXIsIGV2dF9kaXJlbnQsIGV2dF9uZXh0LAotCQkJCQkJCQlldnRfcGF0aCwgc3QpIHsKKwlmb3JfZWFjaF9zdWJzeXN0ZW0oc3lzX2Rpciwgc3lzX2RpcmVudCwgc3lzX25leHQpIHsKKwkJaW50IGRmZCA9IG9wZW5hdChzeXNfZGlyX2ZkLCBzeXNfZGlyZW50LmRfbmFtZSwKKwkJCQkgT19SRE9OTFl8T19ESVJFQ1RPUlkpLCBldnRfZGlyX2ZkOworCQlpZiAoZGZkID09IC0xKQorCQkJY29udGludWU7CisJCWV2dF9kaXIgPSBmZG9wZW5kaXIoZGZkKTsKKwkJaWYgKCFldnRfZGlyKSB7CisJCQljbG9zZShkZmQpOworCQkJY29udGludWU7CisJCX0KKwkJZXZ0X2Rpcl9mZCA9IGRpcmZkKGV2dF9kaXIpOworCQlmb3JfZWFjaF9ldmVudChzeXNfZGlyZW50LCBldnRfZGlyLCBldnRfZGlyZW50LCBldnRfbmV4dCkgewogCQkJc25wcmludGYoZXZ0X3BhdGgsIE1BWFBBVEhMRU4sICIlczolcyIsCiAJCQkJIHN5c19kaXJlbnQuZF9uYW1lLCBldnRfZGlyZW50LmRfbmFtZSk7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIiAgJS00MHMgWyVzXVxuIiwgZXZ0X3BhdGgsCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAgJS00MnMgWyVzXVxuIiwgZXZ0X3BhdGgsCiAJCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tQRVJGX1RZUEVfVFJBQ0VQT0lOVCsxXSk7CiAJCX0KIAkJY2xvc2VkaXIoZXZ0X2Rpcik7CkBAIC02NTAsNyArNjg3LDcgQEAKIAkJCXNwcmludGYobmFtZSwgIiVzIE9SICVzIiwgc3ltcy0+c3ltYm9sLCBzeW1zLT5hbGlhcyk7CiAJCWVsc2UKIAkJCXN0cmNweShuYW1lLCBzeW1zLT5zeW1ib2wpOwotCQlmcHJpbnRmKHN0ZGVyciwgIiAgJS00MHMgWyVzXVxuIiwgbmFtZSwKKwkJZnByaW50ZihzdGRlcnIsICIgICUtNDJzIFslc11cbiIsIG5hbWUsCiAJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzW3R5cGVdKTsKIAogCQlwcmV2X3R5cGUgPSB0eXBlOwpAQCAtNjY0LDcgKzcwMSw3IEBACiAJCQkJY29udGludWU7CiAKIAkJCWZvciAoaSA9IDA7IGkgPCBQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVg7IGkrKykgewotCQkJCWZwcmludGYoc3RkZXJyLCAiICAlLTQwcyBbJXNdXG4iLAorCQkJCWZwcmludGYoc3RkZXJyLCAiICAlLTQycyBbJXNdXG4iLAogCQkJCQlldmVudF9jYWNoZV9uYW1lKHR5cGUsIG9wLCBpKSwKIAkJCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1s0XSk7CiAJCQl9CkBAIC02NzIsNyArNzA5LDcgQEAKIAl9CiAKIAlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0JZnByaW50ZihzdGRlcnIsICIgICUtNDBzIFtyYXcgaGFyZHdhcmUgZXZlbnQgZGVzY3JpcHRvcl1cbiIsCisJZnByaW50ZihzdGRlcnIsICIgICUtNDJzIFtyYXcgaGFyZHdhcmUgZXZlbnQgZGVzY3JpcHRvcl1cbiIsCiAJCSJyTk5OIik7CiAJZnByaW50ZihzdGRlcnIsICJcbiIpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmggYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmgKaW5kZXggMTkyYTk2Mi4uNjA3MDRjMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaApAQCAtMSwxNiArMSwyNSBAQAotCisjaWZuZGVmIF9QQVJTRV9FVkVOVFNfSAorI2RlZmluZSBfUEFSU0VfRVZFTlRTX0gKIC8qCiAgKiBQYXJzZSBzeW1ib2xpYyBldmVudHMvY291bnRzIHBhc3NlZCBpbiBhcyBvcHRpb25zOgogICovCiAKIHN0cnVjdCBvcHRpb247CiAKK3N0cnVjdCB0cmFjZXBvaW50X3BhdGggeworCWNoYXIgKnN5c3RlbTsKKwljaGFyICpuYW1lOworCXN0cnVjdCB0cmFjZXBvaW50X3BhdGggKm5leHQ7Cit9OworCitleHRlcm4gc3RydWN0IHRyYWNlcG9pbnRfcGF0aCAqdHJhY2Vwb2ludF9pZF90b19wYXRoKHU2NCBjb25maWcpOworCiBleHRlcm4gaW50CQkJbnJfY291bnRlcnM7CiAKIGV4dGVybiBzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgYXR0cnNbTUFYX0NPVU5URVJTXTsKIAotZXh0ZXJuIGNoYXIgKmV2ZW50X25hbWUoaW50IGN0cik7Ci1leHRlcm4gY2hhciAqX19ldmVudF9uYW1lKGludCB0eXBlLCB1NjQgY29uZmlnKTsKK2V4dGVybiBjb25zdCBjaGFyICpldmVudF9uYW1lKGludCBjdHIpOworZXh0ZXJuIGNvbnN0IGNoYXIgKl9fZXZlbnRfbmFtZShpbnQgdHlwZSwgdTY0IGNvbmZpZyk7CiAKIGV4dGVybiBpbnQgcGFyc2VfZXZlbnRzKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqc3RyLCBpbnQgdW5zZXQpOwogCkBAIC0yMSwzICszMCw1IEBACiBleHRlcm4gY2hhciBkZWJ1Z2ZzX3BhdGhbXTsKIGV4dGVybiBpbnQgdmFsaWRfZGVidWdmc19tb3VudChjb25zdCBjaGFyICpkZWJ1Z2ZzKTsKIAorCisjZW5kaWYgLyogX1BBUlNFX0VWRU5UU19IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLW9wdGlvbnMuYwppbmRleCAxYmY2NzE5Li42ZDhhZjQ4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmMKQEAgLTUzLDYgKzUzLDEyIEBACiAJCWNhc2UgT1BUSU9OX1NFVF9JTlQ6CiAJCWNhc2UgT1BUSU9OX1NFVF9QVFI6CiAJCQlyZXR1cm4gb3B0ZXJyb3Iob3B0LCAidGFrZXMgbm8gdmFsdWUiLCBmbGFncyk7CisJCWNhc2UgT1BUSU9OX0VORDoKKwkJY2FzZSBPUFRJT05fQVJHVU1FTlQ6CisJCWNhc2UgT1BUSU9OX0dST1VQOgorCQljYXNlIE9QVElPTl9TVFJJTkc6CisJCWNhc2UgT1BUSU9OX0lOVEVHRVI6CisJCWNhc2UgT1BUSU9OX0xPTkc6CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtMTMwLDYgKzEzNiw5IEBACiAJCQlyZXR1cm4gb3B0ZXJyb3Iob3B0LCAiZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIsIGZsYWdzKTsKIAkJcmV0dXJuIDA7CiAKKwljYXNlIE9QVElPTl9FTkQ6CisJY2FzZSBPUFRJT05fQVJHVU1FTlQ6CisJY2FzZSBPUFRJT05fR1JPVVA6CiAJZGVmYXVsdDoKIAkJZGllKCJzaG91bGQgbm90IGhhcHBlbiwgc29tZW9uZSBtdXN0IGJlIGhpdCBvbiB0aGUgZm9yZWhlYWQiKTsKIAl9CkBAIC0yOTYsNiArMzA1LDggQEAKIAkJCQlyZXR1cm4gcGFyc2Vfb3B0aW9uc191c2FnZSh1c2FnZXN0ciwgb3B0aW9ucyk7CiAJCQljYXNlIC0yOgogCQkJCWdvdG8gdW5rbm93bjsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoY3R4LT5vcHQpCiAJCQkJY2hlY2tfdHlwb3MoYXJnICsgMSwgb3B0aW9ucyk7CkBAIC0zMTQsNiArMzI1LDggQEAKIAkJCQkJY3R4LT5hcmd2WzBdID0gc3RyZHVwKGN0eC0+b3B0IC0gMSk7CiAJCQkJCSooY2hhciAqKWN0eC0+YXJndlswXSA9ICctJzsKIAkJCQkJZ290byB1bmtub3duOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KIAkJCWNvbnRpbnVlOwpAQCAtMzM2LDYgKzM0OSw4IEBACiAJCQlyZXR1cm4gcGFyc2Vfb3B0aW9uc191c2FnZSh1c2FnZXN0ciwgb3B0aW9ucyk7CiAJCWNhc2UgLTI6CiAJCQlnb3RvIHVua25vd247CisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJfQogCQljb250aW51ZTsKIHVua25vd246CkBAIC00NTYsNiArNDcxLDEzIEBACiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDogLyogT1BUSU9OX3tCSVQsQk9PTEVBTixTRVRfSU5ULFNFVF9QVFJ9ICovCisJCWNhc2UgT1BUSU9OX0VORDoKKwkJY2FzZSBPUFRJT05fR1JPVVA6CisJCWNhc2UgT1BUSU9OX0JJVDoKKwkJY2FzZSBPUFRJT05fQk9PTEVBTjoKKwkJY2FzZSBPUFRJT05fU0VUX0lOVDoKKwkJY2FzZSBPUFRJT05fU0VUX1BUUjoKKwkJY2FzZSBPUFRJT05fTE9ORzoKIAkJCWJyZWFrOwogCQl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXRoLmMgYi90b29scy9wZXJmL3V0aWwvcGF0aC5jCmluZGV4IGE1MDFhNDAuLmZkMWYyZmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXRoLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhdGguYwpAQCAtMTcsNyArMTcsNyBAQAogICogVHdvIGhhY2tzOgogICovCiAKLXN0YXRpYyBjaGFyICpnZXRfcGVyZl9kaXIodm9pZCkKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcGVyZl9kaXIodm9pZCkKIHsKIAlyZXR1cm4gIi4iOwogfQpAQCAtMzgsOCArMzgsOSBAQAogc3RhdGljIGNoYXIgKmdldF9wYXRobmFtZSh2b2lkKQogewogCXN0YXRpYyBjaGFyIHBhdGhuYW1lX2FycmF5WzRdW1BBVEhfTUFYXTsKLQlzdGF0aWMgaW50IGluZGV4OwotCXJldHVybiBwYXRobmFtZV9hcnJheVszICYgKytpbmRleF07CisJc3RhdGljIGludCBpZHg7CisKKwlyZXR1cm4gcGF0aG5hbWVfYXJyYXlbMyAmICsraWR4XTsKIH0KIAogc3RhdGljIGNoYXIgKmNsZWFudXBfcGF0aChjaGFyICpwYXRoKQpAQCAtMTYxLDIwICsxNjIsMjQgQEAKIH0KIAogCi1jb25zdCBjaGFyICptYWtlX3JlbGF0aXZlX3BhdGgoY29uc3QgY2hhciAqYWJzLCBjb25zdCBjaGFyICpiYXNlKQorY29uc3QgY2hhciAqbWFrZV9yZWxhdGl2ZV9wYXRoKGNvbnN0IGNoYXIgKmFic19wYXRoLCBjb25zdCBjaGFyICpiYXNlKQogewogCXN0YXRpYyBjaGFyIGJ1ZltQQVRIX01BWCArIDFdOwogCWludCBiYXNlbGVuOworCiAJaWYgKCFiYXNlKQotCQlyZXR1cm4gYWJzOworCQlyZXR1cm4gYWJzX3BhdGg7CisKIAliYXNlbGVuID0gc3RybGVuKGJhc2UpOwotCWlmIChwcmVmaXhjbXAoYWJzLCBiYXNlKSkKLQkJcmV0dXJuIGFiczsKLQlpZiAoYWJzW2Jhc2VsZW5dID09ICcvJykKKwlpZiAocHJlZml4Y21wKGFic19wYXRoLCBiYXNlKSkKKwkJcmV0dXJuIGFic19wYXRoOworCWlmIChhYnNfcGF0aFtiYXNlbGVuXSA9PSAnLycpCiAJCWJhc2VsZW4rKzsKIAllbHNlIGlmIChiYXNlW2Jhc2VsZW4gLSAxXSAhPSAnLycpCi0JCXJldHVybiBhYnM7Ci0Jc3RyY3B5KGJ1ZiwgYWJzICsgYmFzZWxlbik7CisJCXJldHVybiBhYnNfcGF0aDsKKworCXN0cmNweShidWYsIGFic19wYXRoICsgYmFzZWxlbik7CisKIAlyZXR1cm4gYnVmOwogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcnVuLWNvbW1hbmQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ydW4tY29tbWFuZC5jCmluZGV4IGEzOTM1MzQuLjJiNjE1YWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ydW4tY29tbWFuZC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ydW4tY29tbWFuZC5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIHsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBob29rOwogCWNvbnN0IGNoYXIgKiphcmd2ID0gTlVMTCwgKmVudlsyXTsKLQljaGFyIGluZGV4W1BBVEhfTUFYXTsKKwljaGFyIGlkeFtQQVRIX01BWF07CiAJdmFfbGlzdCBhcmdzOwogCWludCByZXQ7CiAJc2l6ZV90IGkgPSAwLCBhbGxvYyA9IDA7CkBAIC0yODQsOCArMjg0LDggQEAKIAlob29rLm5vX3N0ZGluID0gMTsKIAlob29rLnN0ZG91dF90b19zdGRlcnIgPSAxOwogCWlmIChpbmRleF9maWxlKSB7Ci0JCXNucHJpbnRmKGluZGV4LCBzaXplb2YoaW5kZXgpLCAiUEVSRl9JTkRFWF9GSUxFPSVzIiwgaW5kZXhfZmlsZSk7Ci0JCWVudlswXSA9IGluZGV4OworCQlzbnByaW50ZihpZHgsIHNpemVvZihpZHgpLCAiUEVSRl9JTkRFWF9GSUxFPSVzIiwgaW5kZXhfZmlsZSk7CisJCWVudlswXSA9IGlkeDsKIAkJZW52WzFdID0gTlVMTDsKIAkJaG9vay5lbnYgPSBlbnY7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCmluZGV4IDVjMGY0MmUuLmZkM2Q5YzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKQEAgLTMsNiArMyw4IEBACiAjaW5jbHVkZSAic3RyaW5nLmgiCiAjaW5jbHVkZSAic3ltYm9sLmgiCiAKKyNpbmNsdWRlICJkZWJ1Zy5oIgorCiAjaW5jbHVkZSA8bGliZWxmLmg+CiAjaW5jbHVkZSA8Z2VsZi5oPgogI2luY2x1ZGUgPGVsZi5oPgpAQCAtMjEsNyArMjMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltYm9sX19uZXcodTY0IHN0YXJ0LCB1NjQgbGVuLAogCQkJCSAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHByaXZfc2l6ZSwKLQkJCQkgIHU2NCBvYmpfc3RhcnQsIGludCB2ZXJib3NlKQorCQkJCSAgdTY0IG9ial9zdGFydCwgaW50IHYpCiB7CiAJc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4obmFtZSkgKyAxOwogCXN0cnVjdCBzeW1ib2wgKnNlbGYgPSBjYWxsb2MoMSwgcHJpdl9zaXplICsgc2l6ZW9mKCpzZWxmKSArIG5hbWVsZW4pOwpAQCAtMjksNyArMzEsNyBAQAogCWlmICghc2VsZikKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAodmVyYm9zZSA+PSAyKQorCWlmICh2ID49IDIpCiAJCXByaW50ZigibmV3IHN5bWJvbDogJTAxNkx4IFslMDhseF06ICVzLCBoaXN0OiAlcCwgb2JqX3N0YXJ0OiAlcFxuIiwKIAkJCSh1NjQpc3RhcnQsICh1bnNpZ25lZCBsb25nKWxlbiwgbmFtZSwgc2VsZi0+aGlzdCwgKHZvaWQgKikodW5zaWduZWQgbG9uZylvYmpfc3RhcnQpOwogCkBAIC0xNTYsNyArMTU4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGRzb19fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpzZWxmLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQgdmVyYm9zZSkKK3N0YXRpYyBpbnQgZHNvX19sb2FkX2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCB2KQogewogCXN0cnVjdCByYl9ub2RlICpuZCwgKnByZXZuZDsKIAljaGFyICpsaW5lID0gTlVMTDsKQEAgLTE5OCw3ICsyMDAsNyBAQAogCQkgKiBXZWxsIGZpeCB1cCB0aGUgZW5kIGxhdGVyLCB3aGVuIHdlIGhhdmUgYWxsIHNvcnRlZC4KIAkJICovCiAJCXN5bSA9IHN5bWJvbF9fbmV3KHN0YXJ0LCAweGRlYWQsIGxpbmUgKyBsZW4gKyAyLAotCQkJCSAgc2VsZi0+c3ltX3ByaXZfc2l6ZSwgMCwgdmVyYm9zZSk7CisJCQkJICBzZWxmLT5zeW1fcHJpdl9zaXplLCAwLCB2KTsKIAogCQlpZiAoc3ltID09IE5VTEwpCiAJCQlnb3RvIG91dF9kZWxldGVfbGluZTsKQEAgLTIzOSw3ICsyNDEsNyBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBkc29fX2xvYWRfcGVyZl9tYXAoc3RydWN0IGRzbyAqc2VsZiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHZlcmJvc2UpCitzdGF0aWMgaW50IGRzb19fbG9hZF9wZXJmX21hcChzdHJ1Y3QgZHNvICpzZWxmLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQgdikKIHsKIAljaGFyICpsaW5lID0gTlVMTDsKIAlzaXplX3QgbjsKQEAgLTI3Nyw3ICsyNzksNyBAQAogCQkJY29udGludWU7CiAKIAkJc3ltID0gc3ltYm9sX19uZXcoc3RhcnQsIHNpemUsIGxpbmUgKyBsZW4sCi0JCQkJICBzZWxmLT5zeW1fcHJpdl9zaXplLCBzdGFydCwgdmVyYm9zZSk7CisJCQkJICBzZWxmLT5zeW1fcHJpdl9zaXplLCBzdGFydCwgdik7CiAKIAkJaWYgKHN5bSA9PSBOVUxMKQogCQkJZ290byBvdXRfZGVsZXRlX2xpbmU7CkBAIC0zMDUsMTMgKzMwNywxMyBAQAogICogZWxmX3N5bXRhYl9fZm9yX2VhY2hfc3ltYm9sIC0gaXRlcmF0ZSB0aHJ1IGFsbCB0aGUgc3ltYm9scwogICoKICAqIEBzZWxmOiBzdHJ1Y3QgZWxmX3N5bXRhYiBpbnN0YW5jZSB0byBpdGVyYXRlCi0gKiBAaW5kZXg6IHVpbnQzMl90IGluZGV4CisgKiBAaWR4OiB1aW50MzJfdCBpZHgKICAqIEBzeW06IEdFbGZfU3ltIGl0ZXJhdG9yCiAgKi8KLSNkZWZpbmUgZWxmX3N5bXRhYl9fZm9yX2VhY2hfc3ltYm9sKHN5bXMsIG5yX3N5bXMsIGluZGV4LCBzeW0pIFwKLQlmb3IgKGluZGV4ID0gMCwgZ2VsZl9nZXRzeW0oc3ltcywgaW5kZXgsICZzeW0pO1wKLQkgICAgIGluZGV4IDwgbnJfc3ltczsgXAotCSAgICAgaW5kZXgrKywgZ2VsZl9nZXRzeW0oc3ltcywgaW5kZXgsICZzeW0pKQorI2RlZmluZSBlbGZfc3ltdGFiX19mb3JfZWFjaF9zeW1ib2woc3ltcywgbnJfc3ltcywgaWR4LCBzeW0pIFwKKwlmb3IgKGlkeCA9IDAsIGdlbGZfZ2V0c3ltKHN5bXMsIGlkeCwgJnN5bSk7XAorCSAgICAgaWR4IDwgbnJfc3ltczsgXAorCSAgICAgaWR4KyssIGdlbGZfZ2V0c3ltKHN5bXMsIGlkeCwgJnN5bSkpCiAKIHN0YXRpYyBpbmxpbmUgdWludDhfdCBlbGZfc3ltX190eXBlKGNvbnN0IEdFbGZfU3ltICpzeW0pCiB7CkBAIC0zNTQsNyArMzU2LDcgQEAKIAogc3RhdGljIEVsZl9TY24gKmVsZl9zZWN0aW9uX2J5X25hbWUoRWxmICplbGYsIEdFbGZfRWhkciAqZXAsCiAJCQkJICAgIEdFbGZfU2hkciAqc2hwLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICBzaXplX3QgKmluZGV4KQorCQkJCSAgICBzaXplX3QgKmlkeCkKIHsKIAlFbGZfU2NuICpzZWMgPSBOVUxMOwogCXNpemVfdCBjbnQgPSAxOwpAQCAtMzY1LDggKzM2Nyw4IEBACiAJCWdlbGZfZ2V0c2hkcihzZWMsIHNocCk7CiAJCXN0ciA9IGVsZl9zdHJwdHIoZWxmLCBlcC0+ZV9zaHN0cm5keCwgc2hwLT5zaF9uYW1lKTsKIAkJaWYgKCFzdHJjbXAobmFtZSwgc3RyKSkgewotCQkJaWYgKGluZGV4KQotCQkJCSppbmRleCA9IGNudDsKKwkJCWlmIChpZHgpCisJCQkJKmlkeCA9IGNudDsKIAkJCWJyZWFrOwogCQl9CiAJCSsrY250OwpAQCAtMzkyLDcgKzM5NCw3IEBACiAgKiBBbmQgYWx3YXlzIGxvb2sgYXQgdGhlIG9yaWdpbmFsIGRzbywgbm90IGF0IGRlYnVnaW5mbyBwYWNrYWdlcywgdGhhdAogICogaGF2ZSB0aGUgUExUIGRhdGEgc3RyaXBwZWQgb3V0IChzaGRyX3JlbF9wbHQuc2hfdHlwZSA9PSBTSFRfTk9CSVRTKS4KICAqLwotc3RhdGljIGludCBkc29fX3N5bnRoZXNpemVfcGx0X3N5bWJvbHMoc3RydWN0ICBkc28gKnNlbGYsIGludCB2ZXJib3NlKQorc3RhdGljIGludCBkc29fX3N5bnRoZXNpemVfcGx0X3N5bWJvbHMoc3RydWN0ICBkc28gKnNlbGYsIGludCB2KQogewogCXVpbnQzMl90IG5yX3JlbF9lbnRyaWVzLCBpZHg7CiAJR0VsZl9TeW0gc3ltOwpAQCAtNDQyLDcgKzQ0NCw3IEBACiAJCWdvdG8gb3V0X2VsZl9lbmQ7CiAKIAkvKgotCSAqIEZldGNoIHRoZSByZWxvY2F0aW9uIHNlY3Rpb24gdG8gZmluZCB0aGUgaW5kZXhlcyB0byB0aGUgR09UCisJICogRmV0Y2ggdGhlIHJlbG9jYXRpb24gc2VjdGlvbiB0byBmaW5kIHRoZSBpZHhlcyB0byB0aGUgR09UCiAJICogYW5kIHRoZSBzeW1ib2xzIGluIHRoZSAuZHluc3ltIHRoZXkgcmVmZXIgdG8uCiAJICovCiAJcmVsZGF0YSA9IGVsZl9nZXRkYXRhKHNjbl9wbHRfcmVsLCBOVUxMKTsKQEAgLTQ3Niw3ICs0NzgsNyBAQAogCQkJCSAiJXNAcGx0IiwgZWxmX3N5bV9fbmFtZSgmc3ltLCBzeW1zdHJzKSk7CiAKIAkJCWYgPSBzeW1ib2xfX25ldyhwbHRfb2Zmc2V0LCBzaGRyX3BsdC5zaF9lbnRzaXplLAotCQkJCQlzeW1wbHRuYW1lLCBzZWxmLT5zeW1fcHJpdl9zaXplLCAwLCB2ZXJib3NlKTsKKwkJCQkJc3ltcGx0bmFtZSwgc2VsZi0+c3ltX3ByaXZfc2l6ZSwgMCwgdik7CiAJCQlpZiAoIWYpCiAJCQkJZ290byBvdXRfZWxmX2VuZDsKIApAQCAtNDk0LDcgKzQ5Niw3IEBACiAJCQkJICIlc0BwbHQiLCBlbGZfc3ltX19uYW1lKCZzeW0sIHN5bXN0cnMpKTsKIAogCQkJZiA9IHN5bWJvbF9fbmV3KHBsdF9vZmZzZXQsIHNoZHJfcGx0LnNoX2VudHNpemUsCi0JCQkJCXN5bXBsdG5hbWUsIHNlbGYtPnN5bV9wcml2X3NpemUsIDAsIHZlcmJvc2UpOworCQkJCQlzeW1wbHRuYW1lLCBzZWxmLT5zeW1fcHJpdl9zaXplLCAwLCB2KTsKIAkJCWlmICghZikKIAkJCQlnb3RvIG91dF9lbGZfZW5kOwogCkBAIC01MTgsMTIgKzUyMCwxMiBAQAogfQogCiBzdGF0aWMgaW50IGRzb19fbG9hZF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgaW50IGZkLCBjb25zdCBjaGFyICpuYW1lLAotCQkJIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCB2ZXJib3NlLCBzdHJ1Y3QgbW9kdWxlICptb2QpCisJCQkgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHYsIHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlFbGZfRGF0YSAqc3ltc3RycywgKnNlY3N0cnM7CiAJdWludDMyX3QgbnJfc3ltczsKIAlpbnQgZXJyID0gLTE7Ci0JdWludDMyX3QgaW5kZXg7CisJdWludDMyX3QgaWR4OwogCUdFbGZfRWhkciBlaGRyOwogCUdFbGZfU2hkciBzaGRyOwogCUVsZl9EYXRhICpzeW1zOwpAQCAtNTM0LDE0ICs1MzYsMTQgQEAKIAogCWVsZiA9IGVsZl9iZWdpbihmZCwgRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKIAlpZiAoZWxmID09IE5VTEwpIHsKLQkJaWYgKHZlcmJvc2UpCisJCWlmICh2KQogCQkJZnByaW50ZihzdGRlcnIsICIlczogY2Fubm90IHJlYWQgJXMgRUxGIGZpbGUuXG4iLAogCQkJCV9fZnVuY19fLCBuYW1lKTsKIAkJZ290byBvdXRfY2xvc2U7CiAJfQogCiAJaWYgKGdlbGZfZ2V0ZWhkcihlbGYsICZlaGRyKSA9PSBOVUxMKSB7Ci0JCWlmICh2ZXJib3NlKQorCQlpZiAodikKIAkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCBnZXQgZWxmIGhlYWRlci5cbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXRfZWxmX2VuZDsKIAl9CkBAIC01ODMsOSArNTg1LDkgQEAKIAkJCQkJCSAgICAgTlVMTCkgIT0gTlVMTCk7CiAJfSBlbHNlIHNlbGYtPmFkanVzdF9zeW1ib2xzID0gMDsKIAotCWVsZl9zeW10YWJfX2Zvcl9lYWNoX3N5bWJvbChzeW1zLCBucl9zeW1zLCBpbmRleCwgc3ltKSB7CisJZWxmX3N5bXRhYl9fZm9yX2VhY2hfc3ltYm9sKHN5bXMsIG5yX3N5bXMsIGlkeCwgc3ltKSB7CiAJCXN0cnVjdCBzeW1ib2wgKmY7Ci0JCWNvbnN0IGNoYXIgKm5hbWU7CisJCWNvbnN0IGNoYXIgKmVsZl9uYW1lOwogCQljaGFyICpkZW1hbmdsZWQ7CiAJCXU2NCBvYmpfc3RhcnQ7CiAJCXN0cnVjdCBzZWN0aW9uICpzZWN0aW9uID0gTlVMTDsKQEAgLTYwOCw3ICs2MTAsNyBAQAogCQlvYmpfc3RhcnQgPSBzeW0uc3RfdmFsdWU7CiAKIAkJaWYgKHNlbGYtPmFkanVzdF9zeW1ib2xzKSB7Ci0JCQlpZiAodmVyYm9zZSA+PSAyKQorCQkJaWYgKHYgPj0gMikKIAkJCQlwcmludGYoImFkanVzdGluZyBzeW1ib2w6IHN0X3ZhbHVlOiAlTHggc2hfYWRkcjogJUx4IHNoX29mZnNldDogJUx4XG4iLAogCQkJCQkodTY0KXN5bS5zdF92YWx1ZSwgKHU2NClzaGRyLnNoX2FkZHIsICh1NjQpc2hkci5zaF9vZmZzZXQpOwogCkBAIC02MzAsMTMgKzYzMiwxMyBAQAogCQkgKiBEV0FSRiBEV19jb21waWxlX3VuaXQgaGFzIHRoaXMsIGJ1dCB3ZSBkb24ndCBhbHdheXMgaGF2ZSBhY2Nlc3MKIAkJICogdG8gaXQuLi4KIAkJICovCi0JCW5hbWUgPSBlbGZfc3ltX19uYW1lKCZzeW0sIHN5bXN0cnMpOwotCQlkZW1hbmdsZWQgPSBiZmRfZGVtYW5nbGUoTlVMTCwgbmFtZSwgRE1HTF9QQVJBTVMgfCBETUdMX0FOU0kpOworCQllbGZfbmFtZSA9IGVsZl9zeW1fX25hbWUoJnN5bSwgc3ltc3Rycyk7CisJCWRlbWFuZ2xlZCA9IGJmZF9kZW1hbmdsZShOVUxMLCBlbGZfbmFtZSwgRE1HTF9QQVJBTVMgfCBETUdMX0FOU0kpOwogCQlpZiAoZGVtYW5nbGVkICE9IE5VTEwpCi0JCQluYW1lID0gZGVtYW5nbGVkOworCQkJZWxmX25hbWUgPSBkZW1hbmdsZWQ7CiAKLQkJZiA9IHN5bWJvbF9fbmV3KHN5bS5zdF92YWx1ZSwgc3ltLnN0X3NpemUsIG5hbWUsCi0JCQkJc2VsZi0+c3ltX3ByaXZfc2l6ZSwgb2JqX3N0YXJ0LCB2ZXJib3NlKTsKKwkJZiA9IHN5bWJvbF9fbmV3KHN5bS5zdF92YWx1ZSwgc3ltLnN0X3NpemUsIGVsZl9uYW1lLAorCQkJCXNlbGYtPnN5bV9wcml2X3NpemUsIG9ial9zdGFydCwgdik7CiAJCWZyZWUoZGVtYW5nbGVkKTsKIAkJaWYgKCFmKQogCQkJZ290byBvdXRfZWxmX2VuZDsKQEAgLTY1OSw3ICs2NjEsNyBAQAogCiAjZGVmaW5lIEJVSUxEX0lEX1NJWkUgMTI4CiAKLXN0YXRpYyBjaGFyICpkc29fX3JlYWRfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZiwgaW50IHZlcmJvc2UpCitzdGF0aWMgY2hhciAqZHNvX19yZWFkX2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYsIGludCB2KQogewogCWludCBpOwogCUdFbGZfRWhkciBlaGRyOwpAQCAtNjc2LDE0ICs2NzgsMTQgQEAKIAogCWVsZiA9IGVsZl9iZWdpbihmZCwgRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKIAlpZiAoZWxmID09IE5VTEwpIHsKLQkJaWYgKHZlcmJvc2UpCisJCWlmICh2KQogCQkJZnByaW50ZihzdGRlcnIsICIlczogY2Fubm90IHJlYWQgJXMgRUxGIGZpbGUuXG4iLAogCQkJCV9fZnVuY19fLCBzZWxmLT5uYW1lKTsKIAkJZ290byBvdXRfY2xvc2U7CiAJfQogCiAJaWYgKGdlbGZfZ2V0ZWhkcihlbGYsICZlaGRyKSA9PSBOVUxMKSB7Ci0JCWlmICh2ZXJib3NlKQorCQlpZiAodikKIAkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCBnZXQgZWxmIGhlYWRlci5cbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXRfZWxmX2VuZDsKIAl9CkBAIC03MDYsNyArNzA4LDcgQEAKIAkJKytyYXc7CiAJCWJpZCArPSAyOwogCX0KLQlpZiAodmVyYm9zZSA+PSAyKQorCWlmICh2ID49IDIpCiAJCXByaW50ZigiJXMoJXMpOiAlc1xuIiwgX19mdW5jX18sIHNlbGYtPm5hbWUsIGJ1aWxkX2lkKTsKIG91dF9lbGZfZW5kOgogCWVsZl9lbmQoZWxmKTsKQEAgLTczMiw3ICs3MzQsNyBAQAogCXJldHVybiBvcmlnaW5bc2VsZi0+b3JpZ2luXTsKIH0KIAotaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQgdmVyYm9zZSkKK2ludCBkc29fX2xvYWQoc3RydWN0IGRzbyAqc2VsZiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHYpCiB7CiAJaW50IHNpemUgPSBQQVRIX01BWDsKIAljaGFyICpuYW1lID0gbWFsbG9jKHNpemUpLCAqYnVpbGRfaWQgPSBOVUxMOwpAQCAtNzQ1LDcgKzc0Nyw3IEBACiAJc2VsZi0+YWRqdXN0X3N5bWJvbHMgPSAwOwogCiAJaWYgKHN0cm5jbXAoc2VsZi0+bmFtZSwgIi90bXAvcGVyZi0iLCAxMCkgPT0gMCkgewotCQlyZXQgPSBkc29fX2xvYWRfcGVyZl9tYXAoc2VsZiwgZmlsdGVyLCB2ZXJib3NlKTsKKwkJcmV0ID0gZHNvX19sb2FkX3BlcmZfbWFwKHNlbGYsIGZpbHRlciwgdik7CiAJCXNlbGYtPm9yaWdpbiA9IHJldCA+IDAgPyBEU09fX09SSUdfSkFWQV9KSVQgOgogCQkJCQkgRFNPX19PUklHX05PVF9GT1VORDsKIAkJcmV0dXJuIHJldDsKQEAgLTc2NCw3ICs3NjYsNyBAQAogCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIi91c3IvbGliL2RlYnVnJXMiLCBzZWxmLT5uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIERTT19fT1JJR19CVUlMRElEOgotCQkJYnVpbGRfaWQgPSBkc29fX3JlYWRfYnVpbGRfaWQoc2VsZiwgdmVyYm9zZSk7CisJCQlidWlsZF9pZCA9IGRzb19fcmVhZF9idWlsZF9pZChzZWxmLCB2KTsKIAkJCWlmIChidWlsZF9pZCAhPSBOVUxMKSB7CiAJCQkJc25wcmludGYobmFtZSwgc2l6ZSwKIAkJCQkJICIvdXNyL2xpYi9kZWJ1Zy8uYnVpbGQtaWQvJS4ycy8lcy5kZWJ1ZyIsCkBAIC03ODUsNyArNzg3LDcgQEAKIAkJZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZKTsKIAl9IHdoaWxlIChmZCA8IDApOwogCi0JcmV0ID0gZHNvX19sb2FkX3N5bShzZWxmLCBmZCwgbmFtZSwgZmlsdGVyLCB2ZXJib3NlLCBOVUxMKTsKKwlyZXQgPSBkc29fX2xvYWRfc3ltKHNlbGYsIGZkLCBuYW1lLCBmaWx0ZXIsIHYsIE5VTEwpOwogCWNsb3NlKGZkKTsKIAogCS8qCkBAIC03OTUsNyArNzk3LDcgQEAKIAkJZ290byBtb3JlOwogCiAJaWYgKHJldCA+IDApIHsKLQkJaW50IG5yX3BsdCA9IGRzb19fc3ludGhlc2l6ZV9wbHRfc3ltYm9scyhzZWxmLCB2ZXJib3NlKTsKKwkJaW50IG5yX3BsdCA9IGRzb19fc3ludGhlc2l6ZV9wbHRfc3ltYm9scyhzZWxmLCB2KTsKIAkJaWYgKG5yX3BsdCA+IDApCiAJCQlyZXQgKz0gbnJfcGx0OwogCX0KQEAgLTgwNyw3ICs4MDksNyBAQAogfQogCiBzdGF0aWMgaW50IGRzb19fbG9hZF9tb2R1bGUoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1vZF9kc28gKm1vZHMsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCB2ZXJib3NlKQorCQkJICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQgdikKIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2QgPSBtb2RfZHNvX19maW5kX21vZHVsZShtb2RzLCBuYW1lKTsKIAlpbnQgZXJyID0gMCwgZmQ7CkBAIC04MjAsMTMgKzgyMiwxMyBAQAogCWlmIChmZCA8IDApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBkc29fX2xvYWRfc3ltKHNlbGYsIGZkLCBuYW1lLCBmaWx0ZXIsIHZlcmJvc2UsIG1vZCk7CisJZXJyID0gZHNvX19sb2FkX3N5bShzZWxmLCBmZCwgbmFtZSwgZmlsdGVyLCB2LCBtb2QpOwogCWNsb3NlKGZkKTsKIAogCXJldHVybiBlcnI7CiB9CiAKLWludCBkc29fX2xvYWRfbW9kdWxlcyhzdHJ1Y3QgZHNvICpzZWxmLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQgdmVyYm9zZSkKK2ludCBkc29fX2xvYWRfbW9kdWxlcyhzdHJ1Y3QgZHNvICpzZWxmLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQgdikKIHsKIAlzdHJ1Y3QgbW9kX2RzbyAqbW9kcyA9IG1vZF9kc29fX25ld19kc28oIm1vZHVsZXMiKTsKIAlzdHJ1Y3QgbW9kdWxlICpwb3M7CkBAIC04NDQsNyArODQ2LDcgQEAKIAluZXh0ID0gcmJfZmlyc3QoJm1vZHMtPm1vZHMpOwogCXdoaWxlIChuZXh0KSB7CiAJCXBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBtb2R1bGUsIHJiX25vZGUpOwotCQllcnIgPSBkc29fX2xvYWRfbW9kdWxlKHNlbGYsIG1vZHMsIHBvcy0+bmFtZSwgZmlsdGVyLCB2ZXJib3NlKTsKKwkJZXJyID0gZHNvX19sb2FkX21vZHVsZShzZWxmLCBtb2RzLCBwb3MtPm5hbWUsIGZpbHRlciwgdik7CiAKIAkJaWYgKGVyciA8IDApCiAJCQlicmVhazsKQEAgLTg4NywxNCArODg5LDE0IEBACiB9CiAKIHN0YXRpYyBpbnQgZHNvX19sb2FkX3ZtbGludXgoc3RydWN0IGRzbyAqc2VsZiwgY29uc3QgY2hhciAqdm1saW51eCwKLQkJCSAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHZlcmJvc2UpCisJCQkgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCB2KQogewogCWludCBlcnIsIGZkID0gb3Blbih2bWxpbnV4LCBPX1JET05MWSk7CiAKIAlpZiAoZmQgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQllcnIgPSBkc29fX2xvYWRfc3ltKHNlbGYsIGZkLCB2bWxpbnV4LCBmaWx0ZXIsIHZlcmJvc2UsIE5VTEwpOworCWVyciA9IGRzb19fbG9hZF9zeW0oc2VsZiwgZmQsIHZtbGludXgsIGZpbHRlciwgdiwgTlVMTCk7CiAKIAlpZiAoZXJyID4gMCkKIAkJZHNvX19maWxsX3N5bWJvbF9ob2xlcyhzZWxmKTsKQEAgLTkwNSwxOCArOTA3LDE4IEBACiB9CiAKIGludCBkc29fX2xvYWRfa2VybmVsKHN0cnVjdCBkc28gKnNlbGYsIGNvbnN0IGNoYXIgKnZtbGludXgsCi0JCSAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHZlcmJvc2UsIGludCBtb2R1bGVzKQorCQkgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCB2LCBpbnQgdXNlX21vZHVsZXMpCiB7CiAJaW50IGVyciA9IC0xOwogCiAJaWYgKHZtbGludXgpIHsKLQkJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgdm1saW51eCwgZmlsdGVyLCB2ZXJib3NlKTsKLQkJaWYgKGVyciA+IDAgJiYgbW9kdWxlcykKLQkJCWVyciA9IGRzb19fbG9hZF9tb2R1bGVzKHNlbGYsIGZpbHRlciwgdmVyYm9zZSk7CisJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIHZtbGludXgsIGZpbHRlciwgdik7CisJCWlmIChlcnIgPiAwICYmIHVzZV9tb2R1bGVzKQorCQkJZXJyID0gZHNvX19sb2FkX21vZHVsZXMoc2VsZiwgZmlsdGVyLCB2KTsKIAl9CiAKIAlpZiAoZXJyIDw9IDApCi0JCWVyciA9IGRzb19fbG9hZF9rYWxsc3ltcyhzZWxmLCBmaWx0ZXIsIHZlcmJvc2UpOworCQllcnIgPSBkc29fX2xvYWRfa2FsbHN5bXMoc2VsZiwgZmlsdGVyLCB2KTsKIAogCWlmIChlcnIgPiAwKQogCQlzZWxmLT5vcmlnaW4gPSBEU09fX09SSUdfS0VSTkVMOwpAQCAtOTI0LDYgKzkyNiwxMDMgQEAKIAlyZXR1cm4gZXJyOwogfQogCitMSVNUX0hFQUQoZHNvcyk7CitzdHJ1Y3QgZHNvCSprZXJuZWxfZHNvOworc3RydWN0IGRzbwkqdmRzbzsKK3N0cnVjdCBkc28JKmh5cGVydmlzb3JfZHNvOworCitjb25zdCBjaGFyCSp2bWxpbnV4X25hbWUgPSAidm1saW51eCI7CitpbnQJCW1vZHVsZXM7CisKK3N0YXRpYyB2b2lkIGRzb3NfX2FkZChzdHJ1Y3QgZHNvICpkc28pCit7CisJbGlzdF9hZGRfdGFpbCgmZHNvLT5ub2RlLCAmZHNvcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHNvICpkc29zX19maW5kKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGRzbyAqcG9zOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZkc29zLCBub2RlKQorCQlpZiAoc3RyY21wKHBvcy0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiBwb3M7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBkc28gKmRzb3NfX2ZpbmRuZXcoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZHNvICpkc28gPSBkc29zX19maW5kKG5hbWUpOworCWludCBucjsKKworCWlmIChkc28pCisJCXJldHVybiBkc287CisKKwlkc28gPSBkc29fX25ldyhuYW1lLCAwKTsKKwlpZiAoIWRzbykKKwkJZ290byBvdXRfZGVsZXRlX2RzbzsKKworCW5yID0gZHNvX19sb2FkKGRzbywgTlVMTCwgdmVyYm9zZSk7CisJaWYgKG5yIDwgMCkgeworCQllcHJpbnRmKCJGYWlsZWQgdG8gb3BlbjogJXNcbiIsIG5hbWUpOworCQlnb3RvIG91dF9kZWxldGVfZHNvOworCX0KKwlpZiAoIW5yKQorCQllcHJpbnRmKCJObyBzeW1ib2xzIGZvdW5kIGluOiAlcywgbWF5YmUgaW5zdGFsbCBhIGRlYnVnIHBhY2thZ2U/XG4iLCBuYW1lKTsKKworCWRzb3NfX2FkZChkc28pOworCisJcmV0dXJuIGRzbzsKKworb3V0X2RlbGV0ZV9kc286CisJZHNvX19kZWxldGUoZHNvKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBkc29zX19mcHJpbnRmKEZJTEUgKmZwKQoreworCXN0cnVjdCBkc28gKnBvczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmZHNvcywgbm9kZSkKKwkJZHNvX19mcHJpbnRmKHBvcywgZnApOworfQorCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqdmRzb19fZmluZF9zeW1ib2woc3RydWN0IGRzbyAqZHNvLCB1NjQgaXApCit7CisJcmV0dXJuIGRzb19fZmluZF9zeW1ib2woZHNvLCBpcCk7Cit9CisKK2ludCBsb2FkX2tlcm5lbCh2b2lkKQoreworCWludCBlcnI7CisKKwlrZXJuZWxfZHNvID0gZHNvX19uZXcoIltrZXJuZWxdIiwgMCk7CisJaWYgKCFrZXJuZWxfZHNvKQorCQlyZXR1cm4gLTE7CisKKwllcnIgPSBkc29fX2xvYWRfa2VybmVsKGtlcm5lbF9kc28sIHZtbGludXhfbmFtZSwgTlVMTCwgdmVyYm9zZSwgbW9kdWxlcyk7CisJaWYgKGVyciA8PSAwKSB7CisJCWRzb19fZGVsZXRlKGtlcm5lbF9kc28pOworCQlrZXJuZWxfZHNvID0gTlVMTDsKKwl9IGVsc2UKKwkJZHNvc19fYWRkKGtlcm5lbF9kc28pOworCisJdmRzbyA9IGRzb19fbmV3KCJbdmRzb10iLCAwKTsKKwlpZiAoIXZkc28pCisJCXJldHVybiAtMTsKKworCXZkc28tPmZpbmRfc3ltYm9sID0gdmRzb19fZmluZF9zeW1ib2w7CisKKwlkc29zX19hZGQodmRzbyk7CisKKwloeXBlcnZpc29yX2RzbyA9IGRzb19fbmV3KCJbaHlwZXJ2aXNvcl0iLCAwKTsKKwlpZiAoIWh5cGVydmlzb3JfZHNvKQorCQlyZXR1cm4gLTE7CisJZHNvc19fYWRkKGh5cGVydmlzb3JfZHNvKTsKKworCXJldHVybiBlcnI7Cit9CisKKwogdm9pZCBzeW1ib2xfX2luaXQodm9pZCkKIHsKIAllbGZfdmVyc2lvbihFVl9DVVJSRU5UKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaCBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAppbmRleCBiNTNiZjAxLi42ZTg0OTA3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlICJtb2R1bGUuaCIKKyNpbmNsdWRlICJldmVudC5oIgogCiAjaWZkZWYgSEFWRV9DUExVU19ERU1BTkdMRQogZXh0ZXJuIGNoYXIgKmNwbHVzX2RlbWFuZ2xlKGNvbnN0IGNoYXIgKiwgaW50KTsKQEAgLTU0LDcgKzU1LDcgQEAKIAljaGFyCQkgbmFtZVswXTsKIH07CiAKLWNvbnN0IGNoYXIgKnN5bV9oaXN0X2ZpbHRlcjsKK2V4dGVybiBjb25zdCBjaGFyICpzeW1faGlzdF9maWx0ZXI7CiAKIHR5cGVkZWYgaW50ICgqc3ltYm9sX2ZpbHRlcl90KShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOwogCkBAIC03Miw5ICs3MywyMCBAQAogCQkgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCB2ZXJib3NlLCBpbnQgbW9kdWxlcyk7CiBpbnQgZHNvX19sb2FkX21vZHVsZXMoc3RydWN0IGRzbyAqc2VsZiwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IHZlcmJvc2UpOwogaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQgdmVyYm9zZSk7CitzdHJ1Y3QgZHNvICpkc29zX19maW5kbmV3KGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCBkc29zX19mcHJpbnRmKEZJTEUgKmZwKTsKIAogc2l6ZV90IGRzb19fZnByaW50ZihzdHJ1Y3QgZHNvICpzZWxmLCBGSUxFICpmcCk7CiBjaGFyIGRzb19fc3ltdGFiX29yaWdpbihjb25zdCBzdHJ1Y3QgZHNvICpzZWxmKTsKIAoraW50IGxvYWRfa2VybmVsKHZvaWQpOworCiB2b2lkIHN5bWJvbF9faW5pdCh2b2lkKTsKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZHNvczsKK2V4dGVybiBzdHJ1Y3QgZHNvICprZXJuZWxfZHNvOworZXh0ZXJuIHN0cnVjdCBkc28gKnZkc287CitleHRlcm4gc3RydWN0IGRzbyAqaHlwZXJ2aXNvcl9kc287CitleHRlcm4gY29uc3QgY2hhciAqdm1saW51eF9uYW1lOworZXh0ZXJuIGludCAgIG1vZHVsZXM7CiAjZW5kaWYgLyogX1BFUkZfU1lNQk9MXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MzU5MjgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKQEAgLTAsMCArMSwxNzUgQEAKKyNpbmNsdWRlICIuLi9wZXJmLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJ0aHJlYWQuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKworc3RhdGljIHN0cnVjdCB0aHJlYWQgKnRocmVhZF9fbmV3KHBpZF90IHBpZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOworCisJaWYgKHNlbGYgIT0gTlVMTCkgeworCQlzZWxmLT5waWQgPSBwaWQ7CisJCXNlbGYtPmNvbW0gPSBtYWxsb2MoMzIpOworCQlpZiAoc2VsZi0+Y29tbSkKKwkJCXNucHJpbnRmKHNlbGYtPmNvbW0sIDMyLCAiOiVkIiwgc2VsZi0+cGlkKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnNlbGYtPm1hcHMpOworCX0KKworCXJldHVybiBzZWxmOworfQorCitpbnQgdGhyZWFkX19zZXRfY29tbShzdHJ1Y3QgdGhyZWFkICpzZWxmLCBjb25zdCBjaGFyICpjb21tKQoreworCWlmIChzZWxmLT5jb21tKQorCQlmcmVlKHNlbGYtPmNvbW0pOworCXNlbGYtPmNvbW0gPSBzdHJkdXAoY29tbSk7CisJcmV0dXJuIHNlbGYtPmNvbW0gPyAwIDogLUVOT01FTTsKK30KKworc3RhdGljIHNpemVfdCB0aHJlYWRfX2ZwcmludGYoc3RydWN0IHRocmVhZCAqc2VsZiwgRklMRSAqZnApCit7CisJc3RydWN0IG1hcCAqcG9zOworCXNpemVfdCByZXQgPSBmcHJpbnRmKGZwLCAiVGhyZWFkICVkICVzXG4iLCBzZWxmLT5waWQsIHNlbGYtPmNvbW0pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZzZWxmLT5tYXBzLCBub2RlKQorCQlyZXQgKz0gbWFwX19mcHJpbnRmKHBvcywgZnApOworCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHRocmVhZCAqCit0aHJlYWRzX19maW5kbmV3KHBpZF90IHBpZCwgc3RydWN0IHJiX3Jvb3QgKnRocmVhZHMsIHN0cnVjdCB0aHJlYWQgKipsYXN0X21hdGNoKQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZ0aHJlYWRzLT5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCB0aHJlYWQgKnRoOworCisJLyoKKwkgKiBGb250LWVuZCBjYWNoZSAtIFBJRCBsb29rdXBzIGNvbWUgaW4gYmxvY2tzLAorCSAqIHNvIG1vc3Qgb2YgdGhlIHRpbWUgd2UgZG9udCBoYXZlIHRvIGxvb2sgdXAKKwkgKiB0aGUgZnVsbCByYnRyZWU6CisJICovCisJaWYgKCpsYXN0X21hdGNoICYmICgqbGFzdF9tYXRjaCktPnBpZCA9PSBwaWQpCisJCXJldHVybiAqbGFzdF9tYXRjaDsKKworCXdoaWxlICgqcCAhPSBOVUxMKSB7CisJCXBhcmVudCA9ICpwOworCQl0aCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IHRocmVhZCwgcmJfbm9kZSk7CisKKwkJaWYgKHRoLT5waWQgPT0gcGlkKSB7CisJCQkqbGFzdF9tYXRjaCA9IHRoOworCQkJcmV0dXJuIHRoOworCQl9CisKKwkJaWYgKHBpZCA8IHRoLT5waWQpCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJfQorCisJdGggPSB0aHJlYWRfX25ldyhwaWQpOworCWlmICh0aCAhPSBOVUxMKSB7CisJCXJiX2xpbmtfbm9kZSgmdGgtPnJiX25vZGUsIHBhcmVudCwgcCk7CisJCXJiX2luc2VydF9jb2xvcigmdGgtPnJiX25vZGUsIHRocmVhZHMpOworCQkqbGFzdF9tYXRjaCA9IHRoOworCX0KKworCXJldHVybiB0aDsKK30KKworc3RydWN0IHRocmVhZCAqCityZWdpc3Rlcl9pZGxlX3RocmVhZChzdHJ1Y3QgcmJfcm9vdCAqdGhyZWFkcywgc3RydWN0IHRocmVhZCAqKmxhc3RfbWF0Y2gpCit7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gdGhyZWFkc19fZmluZG5ldygwLCB0aHJlYWRzLCBsYXN0X21hdGNoKTsKKworCWlmICghdGhyZWFkIHx8IHRocmVhZF9fc2V0X2NvbW0odGhyZWFkLCAiW2luaXRdIikpIHsKKwkJZnByaW50ZihzdGRlcnIsICJwcm9ibGVtIGluc2VydGluZyBpZGxlIHRhc2suXG4iKTsKKwkJZXhpdCgtMSk7CisJfQorCisJcmV0dXJuIHRocmVhZDsKK30KKwordm9pZCB0aHJlYWRfX2luc2VydF9tYXAoc3RydWN0IHRocmVhZCAqc2VsZiwgc3RydWN0IG1hcCAqbWFwKQoreworCXN0cnVjdCBtYXAgKnBvcywgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHRtcCwgJnNlbGYtPm1hcHMsIG5vZGUpIHsKKwkJaWYgKG1hcF9fb3ZlcmxhcChwb3MsIG1hcCkpIHsKKwkJCWlmICh2ZXJib3NlID49IDIpIHsKKwkJCQlwcmludGYoIm92ZXJsYXBwaW5nIG1hcHM6XG4iKTsKKwkJCQltYXBfX2ZwcmludGYobWFwLCBzdGRvdXQpOworCQkJCW1hcF9fZnByaW50Zihwb3MsIHN0ZG91dCk7CisJCQl9CisKKwkJCWlmIChtYXAtPnN0YXJ0IDw9IHBvcy0+c3RhcnQgJiYgbWFwLT5lbmQgPiBwb3MtPnN0YXJ0KQorCQkJCXBvcy0+c3RhcnQgPSBtYXAtPmVuZDsKKworCQkJaWYgKG1hcC0+ZW5kID49IHBvcy0+ZW5kICYmIG1hcC0+c3RhcnQgPCBwb3MtPmVuZCkKKwkJCQlwb3MtPmVuZCA9IG1hcC0+c3RhcnQ7CisKKwkJCWlmICh2ZXJib3NlID49IDIpIHsKKwkJCQlwcmludGYoImFmdGVyIGNvbGxpc2lvbjpcbiIpOworCQkJCW1hcF9fZnByaW50Zihwb3MsIHN0ZG91dCk7CisJCQl9CisKKwkJCWlmIChwb3MtPnN0YXJ0ID49IHBvcy0+ZW5kKSB7CisJCQkJbGlzdF9kZWxfaW5pdCgmcG9zLT5ub2RlKTsKKwkJCQlmcmVlKHBvcyk7CisJCQl9CisJCX0KKwl9CisKKwlsaXN0X2FkZF90YWlsKCZtYXAtPm5vZGUsICZzZWxmLT5tYXBzKTsKK30KKworaW50IHRocmVhZF9fZm9yayhzdHJ1Y3QgdGhyZWFkICpzZWxmLCBzdHJ1Y3QgdGhyZWFkICpwYXJlbnQpCit7CisJc3RydWN0IG1hcCAqbWFwOworCisJaWYgKHNlbGYtPmNvbW0pCisJCWZyZWUoc2VsZi0+Y29tbSk7CisJc2VsZi0+Y29tbSA9IHN0cmR1cChwYXJlbnQtPmNvbW0pOworCWlmICghc2VsZi0+Y29tbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcCwgJnBhcmVudC0+bWFwcywgbm9kZSkgeworCQlzdHJ1Y3QgbWFwICpuZXcgPSBtYXBfX2Nsb25lKG1hcCk7CisJCWlmICghbmV3KQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXRocmVhZF9faW5zZXJ0X21hcChzZWxmLCBuZXcpOworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbWFwICp0aHJlYWRfX2ZpbmRfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsIHU2NCBpcCkKK3sKKwlzdHJ1Y3QgbWFwICpwb3M7CisKKwlpZiAoc2VsZiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmc2VsZi0+bWFwcywgbm9kZSkKKwkJaWYgKGlwID49IHBvcy0+c3RhcnQgJiYgaXAgPD0gcG9zLT5lbmQpCisJCQlyZXR1cm4gcG9zOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3NpemVfdCB0aHJlYWRzX19mcHJpbnRmKEZJTEUgKmZwLCBzdHJ1Y3QgcmJfcm9vdCAqdGhyZWFkcykKK3sKKwlzaXplX3QgcmV0ID0gMDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisKKwlmb3IgKG5kID0gcmJfZmlyc3QodGhyZWFkcyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CisJCXN0cnVjdCB0aHJlYWQgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgdGhyZWFkLCByYl9ub2RlKTsKKworCQlyZXQgKz0gdGhyZWFkX19mcHJpbnRmKHBvcywgZnApOworCX0KKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmggYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM0ZjI4MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaApAQCAtMCwwICsxLDIxIEBACisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgInN5bWJvbC5oIgorCitzdHJ1Y3QgdGhyZWFkIHsKKwlzdHJ1Y3QgcmJfbm9kZQkgcmJfbm9kZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1hcHM7CisJcGlkX3QJCSBwaWQ7CisJY2hhcgkJICpjb21tOworfTsKKworaW50IHRocmVhZF9fc2V0X2NvbW0oc3RydWN0IHRocmVhZCAqc2VsZiwgY29uc3QgY2hhciAqY29tbSk7CitzdHJ1Y3QgdGhyZWFkICoKK3RocmVhZHNfX2ZpbmRuZXcocGlkX3QgcGlkLCBzdHJ1Y3QgcmJfcm9vdCAqdGhyZWFkcywgc3RydWN0IHRocmVhZCAqKmxhc3RfbWF0Y2gpOworc3RydWN0IHRocmVhZCAqCityZWdpc3Rlcl9pZGxlX3RocmVhZChzdHJ1Y3QgcmJfcm9vdCAqdGhyZWFkcywgc3RydWN0IHRocmVhZCAqKmxhc3RfbWF0Y2gpOwordm9pZCB0aHJlYWRfX2luc2VydF9tYXAoc3RydWN0IHRocmVhZCAqc2VsZiwgc3RydWN0IG1hcCAqbWFwKTsKK2ludCB0aHJlYWRfX2Zvcmsoc3RydWN0IHRocmVhZCAqc2VsZiwgc3RydWN0IHRocmVhZCAqcGFyZW50KTsKK3N0cnVjdCBtYXAgKnRocmVhZF9fZmluZF9tYXAoc3RydWN0IHRocmVhZCAqc2VsZiwgdTY0IGlwKTsKK3NpemVfdCB0aHJlYWRzX19mcHJpbnRmKEZJTEUgKmZwLCBzdHJ1Y3QgcmJfcm9vdCAqdGhyZWFkcyk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtaW5mby5jIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzkzMDJhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYwpAQCAtMCwwICsxLDUzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5LCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlIChub3QgbGF0ZXIhKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqLworI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNpbmNsdWRlICIuLi9wZXJmLmgiCisjaW5jbHVkZSAidHJhY2UtZXZlbnQuaCIKKworCisjZGVmaW5lIFZFUlNJT04gIjAuNSIKKworI2RlZmluZSBfU1RSKHgpICN4CisjZGVmaW5lIFNUUih4KSBfU1RSKHgpCisjZGVmaW5lIE1BWF9QQVRIIDI1NgorCisjZGVmaW5lIFRSQUNFX0NUUkwJInRyYWNpbmdfb24iCisjZGVmaW5lIFRSQUNFCQkidHJhY2UiCisjZGVmaW5lIEFWQUlMQUJMRQkiYXZhaWxhYmxlX3RyYWNlcnMiCisjZGVmaW5lIENVUlJFTlQJCSJjdXJyZW50X3RyYWNlciIKKyNkZWZpbmUgSVRFUl9DVFJMCSJ0cmFjZV9vcHRpb25zIgorI2RlZmluZSBNQVhfTEFURU5DWQkidHJhY2luZ19tYXhfbGF0ZW5jeSIKKwordW5zaWduZWQgaW50IHBhZ2Vfc2l6ZTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm91dHB1dF9maWxlID0gInRyYWNlLmluZm8iOworc3RhdGljIGludCBvdXRwdXRfZmQ7CisKK3N0cnVjdCBldmVudF9saXN0IHsKKwlzdHJ1Y3QgZXZlbnRfbGlzdCAqbmV4dDsKKwljb25zdCBjaGFyICpldmVudDsKK307CisKK3N0cnVjdCBldmVudHMgeworCXN0cnVjdCBldmVudHMgKnNpYmxpbmc7CisJc3RydWN0IGV2ZW50cyAqY2hpbGRyZW47CisJc3RydWN0IGV2ZW50cyAqbmV4dDsKKwljaGFyICpuYW1lOworfTsKKworCisKK3N0YXRpYyB2b2lkIGRpZShjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCByZXQgPSBlcnJubzsKKworCWlmIChlcnJubykKKwkJcGVycm9yKCJ0cmFjZS1jbWQiKTsKKwllbHNlCisJCXJldCA9IC0xOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJZnByaW50ZihzdGRlcnIsICIgICIpOworCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwlleGl0KHJldCk7Cit9CisKK3ZvaWQgKm1hbGxvY19vcl9kaWUodW5zaWduZWQgaW50IHNpemUpCit7CisJdm9pZCAqZGF0YTsKKworCWRhdGEgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKCFkYXRhKQorCQlkaWUoIm1hbGxvYyIpOworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZmluZF9kZWJ1Z2ZzKHZvaWQpCit7CisJc3RhdGljIGNoYXIgZGVidWdmc1tNQVhfUEFUSCsxXTsKKwlzdGF0aWMgaW50IGRlYnVnZnNfZm91bmQ7CisJY2hhciB0eXBlWzEwMF07CisJRklMRSAqZnA7CisKKwlpZiAoZGVidWdmc19mb3VuZCkKKwkJcmV0dXJuIGRlYnVnZnM7CisKKwlpZiAoKGZwID0gZm9wZW4oIi9wcm9jL21vdW50cyIsInIiKSkgPT0gTlVMTCkKKwkJZGllKCJDYW4ndCBvcGVuIC9wcm9jL21vdW50cyBmb3IgcmVhZCIpOworCisJd2hpbGUgKGZzY2FuZihmcCwgIiUqcyAlIgorCQkgICAgICBTVFIoTUFYX1BBVEgpCisJCSAgICAgICJzICU5OXMgJSpzICUqZCAlKmRcbiIsCisJCSAgICAgIGRlYnVnZnMsIHR5cGUpID09IDIpIHsKKwkJaWYgKHN0cmNtcCh0eXBlLCAiZGVidWdmcyIpID09IDApCisJCQlicmVhazsKKwl9CisJZmNsb3NlKGZwKTsKKworCWlmIChzdHJjbXAodHlwZSwgImRlYnVnZnMiKSAhPSAwKQorCQlkaWUoImRlYnVnZnMgbm90IG1vdW50ZWQsIHBsZWFzZSBtb3VudCIpOworCisJZGVidWdmc19mb3VuZCA9IDE7CisKKwlyZXR1cm4gZGVidWdmczsKK30KKworLyoKKyAqIEZpbmRzIHRoZSBwYXRoIHRvIHRoZSBkZWJ1Z2ZzL3RyYWNpbmcKKyAqIEFsbG9jYXRlcyB0aGUgc3RyaW5nIGFuZCBzdG9yZXMgaXQuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpmaW5kX3RyYWNpbmdfZGlyKHZvaWQpCit7CisJc3RhdGljIGNoYXIgKnRyYWNpbmc7CisJc3RhdGljIGludCB0cmFjaW5nX2ZvdW5kOworCWNvbnN0IGNoYXIgKmRlYnVnZnM7CisKKwlpZiAodHJhY2luZ19mb3VuZCkKKwkJcmV0dXJuIHRyYWNpbmc7CisKKwlkZWJ1Z2ZzID0gZmluZF9kZWJ1Z2ZzKCk7CisKKwl0cmFjaW5nID0gbWFsbG9jX29yX2RpZShzdHJsZW4oZGVidWdmcykgKyA5KTsKKworCXNwcmludGYodHJhY2luZywgIiVzL3RyYWNpbmciLCBkZWJ1Z2ZzKTsKKworCXRyYWNpbmdfZm91bmQgPSAxOworCXJldHVybiB0cmFjaW5nOworfQorCitzdGF0aWMgY2hhciAqZ2V0X3RyYWNpbmdfZmlsZShjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IGNoYXIgKnRyYWNpbmc7CisJY2hhciAqZmlsZTsKKworCXRyYWNpbmcgPSBmaW5kX3RyYWNpbmdfZGlyKCk7CisJaWYgKCF0cmFjaW5nKQorCQlyZXR1cm4gTlVMTDsKKworCWZpbGUgPSBtYWxsb2Nfb3JfZGllKHN0cmxlbih0cmFjaW5nKSArIHN0cmxlbihuYW1lKSArIDIpOworCisJc3ByaW50ZihmaWxlLCAiJXMvJXMiLCB0cmFjaW5nLCBuYW1lKTsKKwlyZXR1cm4gZmlsZTsKK30KKworc3RhdGljIHZvaWQgcHV0X3RyYWNpbmdfZmlsZShjaGFyICpmaWxlKQoreworCWZyZWUoZmlsZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX29yX2RpZShjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKworCXJldCA9IHdyaXRlKG91dHB1dF9mZCwgYnVmLCBsZW4pOworCWlmIChyZXQgPCAwKQorCQlkaWUoIndyaXRpbmcgdG8gJyVzJyIsIG91dHB1dF9maWxlKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBiaWdlbmRpYW4odm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIHN0cltdID0geyAweDEsIDB4MiwgMHgzLCAweDQsIDB4MCwgMHgwLCAweDAsIDB4MH07CisJdW5zaWduZWQgaW50ICpwdHI7CisKKwlwdHIgPSAodW5zaWduZWQgaW50ICopKHZvaWQgKilzdHI7CisJcmV0dXJuICpwdHIgPT0gMHgwMTAyMDMwNDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBjb3B5X2ZpbGVfZmQoaW50IGZkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplID0gMDsKKwljaGFyIGJ1ZltCVUZTSVpdOworCWludCByOworCisJZG8geworCQlyID0gcmVhZChmZCwgYnVmLCBCVUZTSVopOworCQlpZiAociA+IDApIHsKKwkJCXNpemUgKz0gcjsKKwkJCXdyaXRlX29yX2RpZShidWYsIHIpOworCQl9CisJfSB3aGlsZSAociA+IDApOworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgY29weV9maWxlKGNvbnN0IGNoYXIgKmZpbGUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHNpemUgPSAwOworCWludCBmZDsKKworCWZkID0gb3BlbihmaWxlLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZGllKCJDYW4ndCByZWFkICclcyciLCBmaWxlKTsKKwlzaXplID0gY29weV9maWxlX2ZkKGZkKTsKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3NpemVfZmQoaW50IGZkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplID0gMDsKKwljaGFyIGJ1ZltCVUZTSVpdOworCWludCByOworCisJZG8geworCQlyID0gcmVhZChmZCwgYnVmLCBCVUZTSVopOworCQlpZiAociA+IDApCisJCQlzaXplICs9IHI7CisJfSB3aGlsZSAociA+IDApOworCisJbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc2l6ZShjb25zdCBjaGFyICpmaWxlKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplID0gMDsKKwlpbnQgZmQ7CisKKwlmZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCWRpZSgiQ2FuJ3QgcmVhZCAnJXMnIiwgZmlsZSk7CisJc2l6ZSA9IGdldF9zaXplX2ZkKGZkKTsKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9oZWFkZXJfZmlsZXModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSwgY2hlY2tfc2l6ZTsKKwljaGFyICpwYXRoOworCWludCBmZDsKKworCXBhdGggPSBnZXRfdHJhY2luZ19maWxlKCJldmVudHMvaGVhZGVyX3BhZ2UiKTsKKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCWRpZSgiY2FuJ3QgcmVhZCAnJXMnIiwgcGF0aCk7CisKKwkvKiB1bmZvcnR1bmF0ZWx5LCB5b3UgY2FuIG5vdCBzdGF0IGRlYnVnZnMgZmlsZXMgZm9yIHNpemUgKi8KKwlzaXplID0gZ2V0X3NpemVfZmQoZmQpOworCisJd3JpdGVfb3JfZGllKCJoZWFkZXJfcGFnZSIsIDEyKTsKKwl3cml0ZV9vcl9kaWUoJnNpemUsIDgpOworCWNoZWNrX3NpemUgPSBjb3B5X2ZpbGVfZmQoZmQpOworCWlmIChzaXplICE9IGNoZWNrX3NpemUpCisJCWRpZSgid3Jvbmcgc2l6ZSBmb3IgJyVzJyBzaXplPSVsbGQgcmVhZD0lbGxkIiwKKwkJICAgIHBhdGgsIHNpemUsIGNoZWNrX3NpemUpOworCXB1dF90cmFjaW5nX2ZpbGUocGF0aCk7CisKKwlwYXRoID0gZ2V0X3RyYWNpbmdfZmlsZSgiZXZlbnRzL2hlYWRlcl9ldmVudCIpOworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZGllKCJjYW4ndCByZWFkICclcyciLCBwYXRoKTsKKworCXNpemUgPSBnZXRfc2l6ZV9mZChmZCk7CisKKwl3cml0ZV9vcl9kaWUoImhlYWRlcl9ldmVudCIsIDEzKTsKKwl3cml0ZV9vcl9kaWUoJnNpemUsIDgpOworCWNoZWNrX3NpemUgPSBjb3B5X2ZpbGVfZmQoZmQpOworCWlmIChzaXplICE9IGNoZWNrX3NpemUpCisJCWRpZSgid3Jvbmcgc2l6ZSBmb3IgJyVzJyIsIHBhdGgpOworCXB1dF90cmFjaW5nX2ZpbGUocGF0aCk7Cit9CisKK3N0YXRpYyBib29sIG5hbWVfaW5fdHBfbGlzdChjaGFyICpzeXMsIHN0cnVjdCB0cmFjZXBvaW50X3BhdGggKnRwcykKK3sKKwl3aGlsZSAodHBzKSB7CisJCWlmICghc3RyY21wKHN5cywgdHBzLT5uYW1lKSkKKwkJCXJldHVybiB0cnVlOworCQl0cHMgPSB0cHMtPm5leHQ7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2V2ZW50X3N5c3RlbShjb25zdCBjaGFyICpzeXMsIHN0cnVjdCB0cmFjZXBvaW50X3BhdGggKnRwcykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSwgY2hlY2tfc2l6ZTsKKwlzdHJ1Y3QgZGlyZW50ICpkZW50OworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIgKmZvcm1hdDsKKwlESVIgKmRpcjsKKwlpbnQgY291bnQgPSAwOworCWludCByZXQ7CisKKwlkaXIgPSBvcGVuZGlyKHN5cyk7CisJaWYgKCFkaXIpCisJCWRpZSgiY2FuJ3QgcmVhZCBkaXJlY3RvcnkgJyVzJyIsIHN5cyk7CisKKwl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGRpcikpKSB7CisJCWlmIChzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKKwkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuLiIpID09IDAgfHwKKwkJICAgICFuYW1lX2luX3RwX2xpc3QoZGVudC0+ZF9uYW1lLCB0cHMpKQorCQkJY29udGludWU7CisJCWZvcm1hdCA9IG1hbGxvY19vcl9kaWUoc3RybGVuKHN5cykgKyBzdHJsZW4oZGVudC0+ZF9uYW1lKSArIDEwKTsKKwkJc3ByaW50Zihmb3JtYXQsICIlcy8lcy9mb3JtYXQiLCBzeXMsIGRlbnQtPmRfbmFtZSk7CisJCXJldCA9IHN0YXQoZm9ybWF0LCAmc3QpOworCQlmcmVlKGZvcm1hdCk7CisJCWlmIChyZXQgPCAwKQorCQkJY29udGludWU7CisJCWNvdW50Kys7CisJfQorCisJd3JpdGVfb3JfZGllKCZjb3VudCwgNCk7CisKKwlyZXdpbmRkaXIoZGlyKTsKKwl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGRpcikpKSB7CisJCWlmIChzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKKwkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuLiIpID09IDAgfHwKKwkJICAgICFuYW1lX2luX3RwX2xpc3QoZGVudC0+ZF9uYW1lLCB0cHMpKQorCQkJY29udGludWU7CisJCWZvcm1hdCA9IG1hbGxvY19vcl9kaWUoc3RybGVuKHN5cykgKyBzdHJsZW4oZGVudC0+ZF9uYW1lKSArIDEwKTsKKwkJc3ByaW50Zihmb3JtYXQsICIlcy8lcy9mb3JtYXQiLCBzeXMsIGRlbnQtPmRfbmFtZSk7CisJCXJldCA9IHN0YXQoZm9ybWF0LCAmc3QpOworCisJCWlmIChyZXQgPj0gMCkgeworCQkJLyogdW5mb3J0dW5hdGVseSwgeW91IGNhbiBub3Qgc3RhdCBkZWJ1Z2ZzIGZpbGVzIGZvciBzaXplICovCisJCQlzaXplID0gZ2V0X3NpemUoZm9ybWF0KTsKKwkJCXdyaXRlX29yX2RpZSgmc2l6ZSwgOCk7CisJCQljaGVja19zaXplID0gY29weV9maWxlKGZvcm1hdCk7CisJCQlpZiAoc2l6ZSAhPSBjaGVja19zaXplKQorCQkJCWRpZSgiZXJyb3IgaW4gc2l6ZSBvZiBmaWxlICclcyciLCBmb3JtYXQpOworCQl9CisKKwkJZnJlZShmb3JtYXQpOworCX0KK30KKworc3RhdGljIHZvaWQgcmVhZF9mdHJhY2VfZmlsZXMoc3RydWN0IHRyYWNlcG9pbnRfcGF0aCAqdHBzKQoreworCWNoYXIgKnBhdGg7CisKKwlwYXRoID0gZ2V0X3RyYWNpbmdfZmlsZSgiZXZlbnRzL2Z0cmFjZSIpOworCisJY29weV9ldmVudF9zeXN0ZW0ocGF0aCwgdHBzKTsKKworCXB1dF90cmFjaW5nX2ZpbGUocGF0aCk7Cit9CisKK3N0YXRpYyBib29sIHN5c3RlbV9pbl90cF9saXN0KGNoYXIgKnN5cywgc3RydWN0IHRyYWNlcG9pbnRfcGF0aCAqdHBzKQoreworCXdoaWxlICh0cHMpIHsKKwkJaWYgKCFzdHJjbXAoc3lzLCB0cHMtPnN5c3RlbSkpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJdHBzID0gdHBzLT5uZXh0OworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9ldmVudF9maWxlcyhzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICp0cHMpCit7CisJc3RydWN0IGRpcmVudCAqZGVudDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyICpwYXRoOworCWNoYXIgKnN5czsKKwlESVIgKmRpcjsKKwlpbnQgY291bnQgPSAwOworCWludCByZXQ7CisKKwlwYXRoID0gZ2V0X3RyYWNpbmdfZmlsZSgiZXZlbnRzIik7CisKKwlkaXIgPSBvcGVuZGlyKHBhdGgpOworCWlmICghZGlyKQorCQlkaWUoImNhbid0IHJlYWQgZGlyZWN0b3J5ICclcyciLCBwYXRoKTsKKworCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZGlyKSkpIHsKKwkJaWYgKHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAorCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4uIikgPT0gMCB8fAorCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgImZ0cmFjZSIpID09IDAgfHwKKwkJICAgICFzeXN0ZW1faW5fdHBfbGlzdChkZW50LT5kX25hbWUsIHRwcykpCisJCQljb250aW51ZTsKKwkJc3lzID0gbWFsbG9jX29yX2RpZShzdHJsZW4ocGF0aCkgKyBzdHJsZW4oZGVudC0+ZF9uYW1lKSArIDIpOworCQlzcHJpbnRmKHN5cywgIiVzLyVzIiwgcGF0aCwgZGVudC0+ZF9uYW1lKTsKKwkJcmV0ID0gc3RhdChzeXMsICZzdCk7CisJCWZyZWUoc3lzKTsKKwkJaWYgKHJldCA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQljb3VudCsrOworCX0KKworCXdyaXRlX29yX2RpZSgmY291bnQsIDQpOworCisJcmV3aW5kZGlyKGRpcik7CisJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkaXIpKSkgeworCQlpZiAoc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CisJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLi4iKSA9PSAwIHx8CisJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiZnRyYWNlIikgPT0gMCB8fAorCQkgICAgIXN5c3RlbV9pbl90cF9saXN0KGRlbnQtPmRfbmFtZSwgdHBzKSkKKwkJCWNvbnRpbnVlOworCQlzeXMgPSBtYWxsb2Nfb3JfZGllKHN0cmxlbihwYXRoKSArIHN0cmxlbihkZW50LT5kX25hbWUpICsgMik7CisJCXNwcmludGYoc3lzLCAiJXMvJXMiLCBwYXRoLCBkZW50LT5kX25hbWUpOworCQlyZXQgPSBzdGF0KHN5cywgJnN0KTsKKwkJaWYgKHJldCA+PSAwKSB7CisJCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJCXdyaXRlX29yX2RpZShkZW50LT5kX25hbWUsIHN0cmxlbihkZW50LT5kX25hbWUpICsgMSk7CisJCQkJY29weV9ldmVudF9zeXN0ZW0oc3lzLCB0cHMpOworCQkJfQorCQl9CisJCWZyZWUoc3lzKTsKKwl9CisKKwlwdXRfdHJhY2luZ19maWxlKHBhdGgpOworfQorCitzdGF0aWMgdm9pZCByZWFkX3Byb2Nfa2FsbHN5bXModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgY2hlY2tfc2l6ZTsKKwljb25zdCBjaGFyICpwYXRoID0gIi9wcm9jL2thbGxzeW1zIjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgcmV0OworCisJcmV0ID0gc3RhdChwYXRoLCAmc3QpOworCWlmIChyZXQgPCAwKSB7CisJCS8qIG5vdCBmb3VuZCAqLworCQlzaXplID0gMDsKKwkJd3JpdGVfb3JfZGllKCZzaXplLCA0KTsKKwkJcmV0dXJuOworCX0KKwlzaXplID0gZ2V0X3NpemUocGF0aCk7CisJd3JpdGVfb3JfZGllKCZzaXplLCA0KTsKKwljaGVja19zaXplID0gY29weV9maWxlKHBhdGgpOworCWlmIChzaXplICE9IGNoZWNrX3NpemUpCisJCWRpZSgiZXJyb3IgaW4gc2l6ZSBvZiBmaWxlICclcyciLCBwYXRoKTsKKworfQorCitzdGF0aWMgdm9pZCByZWFkX2Z0cmFjZV9wcmludGsodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgY2hlY2tfc2l6ZTsKKwljb25zdCBjaGFyICpwYXRoOworCXN0cnVjdCBzdGF0IHN0OworCWludCByZXQ7CisKKwlwYXRoID0gZ2V0X3RyYWNpbmdfZmlsZSgicHJpbnRrX2Zvcm1hdHMiKTsKKwlyZXQgPSBzdGF0KHBhdGgsICZzdCk7CisJaWYgKHJldCA8IDApIHsKKwkJLyogbm90IGZvdW5kICovCisJCXNpemUgPSAwOworCQl3cml0ZV9vcl9kaWUoJnNpemUsIDQpOworCQlyZXR1cm47CisJfQorCXNpemUgPSBnZXRfc2l6ZShwYXRoKTsKKwl3cml0ZV9vcl9kaWUoJnNpemUsIDQpOworCWNoZWNrX3NpemUgPSBjb3B5X2ZpbGUocGF0aCk7CisJaWYgKHNpemUgIT0gY2hlY2tfc2l6ZSkKKwkJZGllKCJlcnJvciBpbiBzaXplIG9mIGZpbGUgJyVzJyIsIHBhdGgpOworCit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICoKK2dldF90cmFjZXBvaW50c19wYXRoKHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqcGF0dHJzLCBpbnQgbmJfY291bnRlcnMpCit7CisJc3RydWN0IHRyYWNlcG9pbnRfcGF0aCBwYXRoLCAqcHBhdGggPSAmcGF0aDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuYl9jb3VudGVyczsgaSsrKSB7CisJCWlmIChwYXR0cnNbaV0udHlwZSAhPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVCkKKwkJCWNvbnRpbnVlOworCQlwcGF0aC0+bmV4dCA9IHRyYWNlcG9pbnRfaWRfdG9fcGF0aChwYXR0cnNbaV0uY29uZmlnKTsKKwkJaWYgKCFwcGF0aC0+bmV4dCkKKwkJCWRpZSgiJXNcbiIsICJObyBtZW1vcnkgdG8gYWxsb2MgdHJhY2Vwb2ludHMgbGlzdCIpOworCQlwcGF0aCA9IHBwYXRoLT5uZXh0OworCX0KKworCXJldHVybiBwYXRoLm5leHQ7Cit9Cit2b2lkIHJlYWRfdHJhY2luZ19kYXRhKHN0cnVjdCBwZXJmX2NvdW50ZXJfYXR0ciAqcGF0dHJzLCBpbnQgbmJfY291bnRlcnMpCit7CisJY2hhciBidWZbQlVGU0laXTsKKwlzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICp0cHM7CisKKwlvdXRwdXRfZmQgPSBvcGVuKG91dHB1dF9maWxlLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19MQVJHRUZJTEUsIDA2NDQpOworCWlmIChvdXRwdXRfZmQgPCAwKQorCQlkaWUoImNyZWF0aW5nIGZpbGUgJyVzJyIsIG91dHB1dF9maWxlKTsKKworCWJ1ZlswXSA9IDIzOworCWJ1ZlsxXSA9IDg7CisJYnVmWzJdID0gNjg7CisJbWVtY3B5KGJ1ZiArIDMsICJ0cmFjaW5nIiwgNyk7CisKKwl3cml0ZV9vcl9kaWUoYnVmLCAxMCk7CisKKwl3cml0ZV9vcl9kaWUoVkVSU0lPTiwgc3RybGVuKFZFUlNJT04pICsgMSk7CisKKwkvKiBzYXZlIGVuZGlhbiAqLworCWlmIChiaWdlbmRpYW4oKSkKKwkJYnVmWzBdID0gMTsKKwllbHNlCisJCWJ1ZlswXSA9IDA7CisKKwl3cml0ZV9vcl9kaWUoYnVmLCAxKTsKKworCS8qIHNhdmUgc2l6ZSBvZiBsb25nICovCisJYnVmWzBdID0gc2l6ZW9mKGxvbmcpOworCXdyaXRlX29yX2RpZShidWYsIDEpOworCisJLyogc2F2ZSBwYWdlX3NpemUgKi8KKwlwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOworCXdyaXRlX29yX2RpZSgmcGFnZV9zaXplLCA0KTsKKworCXRwcyA9IGdldF90cmFjZXBvaW50c19wYXRoKHBhdHRycywgbmJfY291bnRlcnMpOworCisJcmVhZF9oZWFkZXJfZmlsZXMoKTsKKwlyZWFkX2Z0cmFjZV9maWxlcyh0cHMpOworCXJlYWRfZXZlbnRfZmlsZXModHBzKTsKKwlyZWFkX3Byb2Nfa2FsbHN5bXMoKTsKKwlyZWFkX2Z0cmFjZV9wcmludGsoKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5ZTYwMgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jCkBAIC0wLDAgKzEsMjk0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSAobm90IGxhdGVyISkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogIFRoZSBwYXJ0cyBmb3IgZnVuY3Rpb24gZ3JhcGggcHJpbnRpbmcgd2FzIHRha2VuIGFuZCBtb2RpZmllZCBmcm9tIHRoZQorICogIExpbnV4IEtlcm5lbCB0aGF0IHdlcmUgd3JpdHRlbiBieSBGcmVkZXJpYyBXZWlzYmVja2VyLgorICovCisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyN1bmRlZiBfR05VX1NPVVJDRQorI2luY2x1ZGUgIi4uL3BlcmYuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAidHJhY2UtZXZlbnQuaCIKKworaW50IGhlYWRlcl9wYWdlX3RzX29mZnNldDsKK2ludCBoZWFkZXJfcGFnZV90c19zaXplOworaW50IGhlYWRlcl9wYWdlX3NpemVfb2Zmc2V0OworaW50IGhlYWRlcl9wYWdlX3NpemVfc2l6ZTsKK2ludCBoZWFkZXJfcGFnZV9kYXRhX29mZnNldDsKK2ludCBoZWFkZXJfcGFnZV9kYXRhX3NpemU7CisKK3N0YXRpYyBjaGFyICppbnB1dF9idWY7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGlucHV0X2J1Zl9wdHI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGlucHV0X2J1Zl9zaXo7CisKK3N0YXRpYyBpbnQgY3B1czsKK3N0YXRpYyBpbnQgbG9uZ19zaXplOworCitzdGF0aWMgdm9pZCBpbml0X2lucHV0X2J1ZihjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQoreworCWlucHV0X2J1ZiA9IGJ1ZjsKKwlpbnB1dF9idWZfc2l6ID0gc2l6ZTsKKwlpbnB1dF9idWZfcHRyID0gMDsKK30KKworc3RydWN0IGNtZGxpbmUgeworCWNoYXIgKmNvbW07CisJaW50IHBpZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY21kbGluZSAqY21kbGluZXM7CitzdGF0aWMgaW50IGNtZGxpbmVfY291bnQ7CisKK3N0YXRpYyBpbnQgY21kbGluZV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgY21kbGluZSAqY2EgPSBhOworCWNvbnN0IHN0cnVjdCBjbWRsaW5lICpjYiA9IGI7CisKKwlpZiAoY2EtPnBpZCA8IGNiLT5waWQpCisJCXJldHVybiAtMTsKKwlpZiAoY2EtPnBpZCA+IGNiLT5waWQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcGFyc2VfY21kbGluZXMoY2hhciAqZmlsZSwgaW50IHNpemUgX191bnVzZWQpCit7CisJc3RydWN0IGNtZGxpbmVfbGlzdCB7CisJCXN0cnVjdCBjbWRsaW5lX2xpc3QJKm5leHQ7CisJCWNoYXIJCQkqY29tbTsKKwkJaW50CQkJcGlkOworCX0gKmxpc3QgPSBOVUxMLCAqaXRlbTsKKwljaGFyICpsaW5lOworCWNoYXIgKm5leHQgPSBOVUxMOworCWludCBpOworCisJbGluZSA9IHN0cnRva19yKGZpbGUsICJcbiIsICZuZXh0KTsKKwl3aGlsZSAobGluZSkgeworCQlpdGVtID0gbWFsbG9jX29yX2RpZShzaXplb2YoKml0ZW0pKTsKKwkJc3NjYW5mKGxpbmUsICIlZCAlYXMiLCAmaXRlbS0+cGlkLAorCQkgICAgICAgKGZsb2F0ICopKHZvaWQgKikmaXRlbS0+Y29tbSk7IC8qIHdvcmthcm91bmQgZ2NjIHdhcm5pbmcgKi8KKwkJaXRlbS0+bmV4dCA9IGxpc3Q7CisJCWxpc3QgPSBpdGVtOworCQlsaW5lID0gc3RydG9rX3IoTlVMTCwgIlxuIiwgJm5leHQpOworCQljbWRsaW5lX2NvdW50Kys7CisJfQorCisJY21kbGluZXMgPSBtYWxsb2Nfb3JfZGllKHNpemVvZigqY21kbGluZXMpICogY21kbGluZV9jb3VudCk7CisKKwlpID0gMDsKKwl3aGlsZSAobGlzdCkgeworCQljbWRsaW5lc1tpXS5waWQgPSBsaXN0LT5waWQ7CisJCWNtZGxpbmVzW2ldLmNvbW0gPSBsaXN0LT5jb21tOworCQlpKys7CisJCWl0ZW0gPSBsaXN0OworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJZnJlZShpdGVtKTsKKwl9CisKKwlxc29ydChjbWRsaW5lcywgY21kbGluZV9jb3VudCwgc2l6ZW9mKCpjbWRsaW5lcyksIGNtZGxpbmVfY21wKTsKK30KKworc3RhdGljIHN0cnVjdCBmdW5jX21hcCB7CisJdW5zaWduZWQgbG9uZyBsb25nCQlhZGRyOworCWNoYXIJCQkJKmZ1bmM7CisJY2hhcgkJCQkqbW9kOworfSAqZnVuY19saXN0Oworc3RhdGljIHVuc2lnbmVkIGludCBmdW5jX2NvdW50OworCitzdGF0aWMgaW50IGZ1bmNfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IGZ1bmNfbWFwICpmYSA9IGE7CisJY29uc3Qgc3RydWN0IGZ1bmNfbWFwICpmYiA9IGI7CisKKwlpZiAoZmEtPmFkZHIgPCBmYi0+YWRkcikKKwkJcmV0dXJuIC0xOworCWlmIChmYS0+YWRkciA+IGZiLT5hZGRyKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCit2b2lkIHBhcnNlX3Byb2Nfa2FsbHN5bXMoY2hhciAqZmlsZSwgdW5zaWduZWQgaW50IHNpemUgX191bnVzZWQpCit7CisJc3RydWN0IGZ1bmNfbGlzdCB7CisJCXN0cnVjdCBmdW5jX2xpc3QJKm5leHQ7CisJCXVuc2lnbmVkIGxvbmcgbG9uZwlhZGRyOworCQljaGFyCQkJKmZ1bmM7CisJCWNoYXIJCQkqbW9kOworCX0gKmxpc3QgPSBOVUxMLCAqaXRlbTsKKwljaGFyICpsaW5lOworCWNoYXIgKm5leHQgPSBOVUxMOworCWNoYXIgKmFkZHJfc3RyOworCWNoYXIgY2g7CisJaW50IHJldDsKKwlpbnQgaTsKKworCWxpbmUgPSBzdHJ0b2tfcihmaWxlLCAiXG4iLCAmbmV4dCk7CisJd2hpbGUgKGxpbmUpIHsKKwkJaXRlbSA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCppdGVtKSk7CisJCWl0ZW0tPm1vZCA9IE5VTEw7CisJCXJldCA9IHNzY2FuZihsaW5lLCAiJWFzICVjICVhc1x0WyVhcyIsCisJCQkgICAgIChmbG9hdCAqKSh2b2lkICopJmFkZHJfc3RyLCAvKiB3b3JrYXJvdW5kIGdjYyB3YXJuaW5nICovCisJCQkgICAgICZjaCwKKwkJCSAgICAgKGZsb2F0ICopKHZvaWQgKikmaXRlbS0+ZnVuYywKKwkJCSAgICAgKGZsb2F0ICopKHZvaWQgKikmaXRlbS0+bW9kKTsKKwkJaXRlbS0+YWRkciA9IHN0cnRvdWxsKGFkZHJfc3RyLCBOVUxMLCAxNik7CisJCWZyZWUoYWRkcl9zdHIpOworCisJCS8qIHRydW5jYXRlIHRoZSBleHRyYSAnXScgKi8KKwkJaWYgKGl0ZW0tPm1vZCkKKwkJCWl0ZW0tPm1vZFtzdHJsZW4oaXRlbS0+bW9kKSAtIDFdID0gMDsKKworCisJCWl0ZW0tPm5leHQgPSBsaXN0OworCQlsaXN0ID0gaXRlbTsKKwkJbGluZSA9IHN0cnRva19yKE5VTEwsICJcbiIsICZuZXh0KTsKKwkJZnVuY19jb3VudCsrOworCX0KKworCWZ1bmNfbGlzdCA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCpmdW5jX2xpc3QpICogZnVuY19jb3VudCArIDEpOworCisJaSA9IDA7CisJd2hpbGUgKGxpc3QpIHsKKwkJZnVuY19saXN0W2ldLmZ1bmMgPSBsaXN0LT5mdW5jOworCQlmdW5jX2xpc3RbaV0uYWRkciA9IGxpc3QtPmFkZHI7CisJCWZ1bmNfbGlzdFtpXS5tb2QgPSBsaXN0LT5tb2Q7CisJCWkrKzsKKwkJaXRlbSA9IGxpc3Q7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlmcmVlKGl0ZW0pOworCX0KKworCXFzb3J0KGZ1bmNfbGlzdCwgZnVuY19jb3VudCwgc2l6ZW9mKCpmdW5jX2xpc3QpLCBmdW5jX2NtcCk7CisKKwkvKgorCSAqIEFkZCBhIHNwZWNpYWwgcmVjb3JkIGF0IHRoZSBlbmQuCisJICovCisJZnVuY19saXN0W2Z1bmNfY291bnRdLmZ1bmMgPSBOVUxMOworCWZ1bmNfbGlzdFtmdW5jX2NvdW50XS5hZGRyID0gMDsKKwlmdW5jX2xpc3RbZnVuY19jb3VudF0ubW9kID0gTlVMTDsKK30KKworLyoKKyAqIFdlIGFyZSBzZWFyY2hpbmcgZm9yIGEgcmVjb3JkIGluIGJldHdlZW4sIG5vdCBhbiBleGFjdAorICogbWF0Y2guCisgKi8KK3N0YXRpYyBpbnQgZnVuY19iY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IGZ1bmNfbWFwICpmYSA9IGE7CisJY29uc3Qgc3RydWN0IGZ1bmNfbWFwICpmYiA9IGI7CisKKwlpZiAoKGZhLT5hZGRyID09IGZiLT5hZGRyKSB8fAorCisJICAgIChmYS0+YWRkciA+IGZiLT5hZGRyICYmCisJICAgICBmYS0+YWRkciA8IChmYisxKS0+YWRkcikpCisJCXJldHVybiAwOworCisJaWYgKGZhLT5hZGRyIDwgZmItPmFkZHIpCisJCXJldHVybiAtMTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IGZ1bmNfbWFwICpmaW5kX2Z1bmModW5zaWduZWQgbG9uZyBsb25nIGFkZHIpCit7CisJc3RydWN0IGZ1bmNfbWFwICpmdW5jOworCXN0cnVjdCBmdW5jX21hcCBrZXk7CisKKwlrZXkuYWRkciA9IGFkZHI7CisKKwlmdW5jID0gYnNlYXJjaCgma2V5LCBmdW5jX2xpc3QsIGZ1bmNfY291bnQsIHNpemVvZigqZnVuY19saXN0KSwKKwkJICAgICAgIGZ1bmNfYmNtcCk7CisKKwlyZXR1cm4gZnVuYzsKK30KKwordm9pZCBwcmludF9mdW5jcyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IChpbnQpZnVuY19jb3VudDsgaSsrKSB7CisJCXByaW50ZigiJTAxNmxseCAlcyIsCisJCSAgICAgICBmdW5jX2xpc3RbaV0uYWRkciwKKwkJICAgICAgIGZ1bmNfbGlzdFtpXS5mdW5jKTsKKwkJaWYgKGZ1bmNfbGlzdFtpXS5tb2QpCisJCQlwcmludGYoIiBbJXNdXG4iLCBmdW5jX2xpc3RbaV0ubW9kKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBwcmludGtfbWFwIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcJCWFkZHI7CisJY2hhcgkJCQkqcHJpbnRrOworfSAqcHJpbnRrX2xpc3Q7CitzdGF0aWMgdW5zaWduZWQgaW50IHByaW50a19jb3VudDsKKworc3RhdGljIGludCBwcmludGtfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IGZ1bmNfbWFwICpmYSA9IGE7CisJY29uc3Qgc3RydWN0IGZ1bmNfbWFwICpmYiA9IGI7CisKKwlpZiAoZmEtPmFkZHIgPCBmYi0+YWRkcikKKwkJcmV0dXJuIC0xOworCWlmIChmYS0+YWRkciA+IGZiLT5hZGRyKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHByaW50a19tYXAgKmZpbmRfcHJpbnRrKHVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyKQoreworCXN0cnVjdCBwcmludGtfbWFwICpwcmludGs7CisJc3RydWN0IHByaW50a19tYXAga2V5OworCisJa2V5LmFkZHIgPSBhZGRyOworCisJcHJpbnRrID0gYnNlYXJjaCgma2V5LCBwcmludGtfbGlzdCwgcHJpbnRrX2NvdW50LCBzaXplb2YoKnByaW50a19saXN0KSwKKwkJCSBwcmludGtfY21wKTsKKworCXJldHVybiBwcmludGs7Cit9CisKK3ZvaWQgcGFyc2VfZnRyYWNlX3ByaW50ayhjaGFyICpmaWxlLCB1bnNpZ25lZCBpbnQgc2l6ZSBfX3VudXNlZCkKK3sKKwlzdHJ1Y3QgcHJpbnRrX2xpc3QgeworCQlzdHJ1Y3QgcHJpbnRrX2xpc3QJKm5leHQ7CisJCXVuc2lnbmVkIGxvbmcgbG9uZwlhZGRyOworCQljaGFyCQkJKnByaW50azsKKwl9ICpsaXN0ID0gTlVMTCwgKml0ZW07CisJY2hhciAqbGluZTsKKwljaGFyICpuZXh0ID0gTlVMTDsKKwljaGFyICphZGRyX3N0cjsKKwlpbnQgcmV0OworCWludCBpOworCisJbGluZSA9IHN0cnRva19yKGZpbGUsICJcbiIsICZuZXh0KTsKKwl3aGlsZSAobGluZSkgeworCQlpdGVtID0gbWFsbG9jX29yX2RpZShzaXplb2YoKml0ZW0pKTsKKwkJcmV0ID0gc3NjYW5mKGxpbmUsICIlYXMgOiAlYXMiLAorCQkJICAgICAoZmxvYXQgKikodm9pZCAqKSZhZGRyX3N0ciwgLyogd29ya2Fyb3VuZCBnY2Mgd2FybmluZyAqLworCQkJICAgICAoZmxvYXQgKikodm9pZCAqKSZpdGVtLT5wcmludGspOworCQlpdGVtLT5hZGRyID0gc3RydG91bGwoYWRkcl9zdHIsIE5VTEwsIDE2KTsKKwkJZnJlZShhZGRyX3N0cik7CisKKwkJaXRlbS0+bmV4dCA9IGxpc3Q7CisJCWxpc3QgPSBpdGVtOworCQlsaW5lID0gc3RydG9rX3IoTlVMTCwgIlxuIiwgJm5leHQpOworCQlwcmludGtfY291bnQrKzsKKwl9CisKKwlwcmludGtfbGlzdCA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCpwcmludGtfbGlzdCkgKiBwcmludGtfY291bnQgKyAxKTsKKworCWkgPSAwOworCXdoaWxlIChsaXN0KSB7CisJCXByaW50a19saXN0W2ldLnByaW50ayA9IGxpc3QtPnByaW50azsKKwkJcHJpbnRrX2xpc3RbaV0uYWRkciA9IGxpc3QtPmFkZHI7CisJCWkrKzsKKwkJaXRlbSA9IGxpc3Q7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlmcmVlKGl0ZW0pOworCX0KKworCXFzb3J0KHByaW50a19saXN0LCBwcmludGtfY291bnQsIHNpemVvZigqcHJpbnRrX2xpc3QpLCBwcmludGtfY21wKTsKK30KKwordm9pZCBwcmludF9wcmludGsodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAoaW50KXByaW50a19jb3VudDsgaSsrKSB7CisJCXByaW50ZigiJTAxNmxseCAlc1xuIiwKKwkJICAgICAgIHByaW50a19saXN0W2ldLmFkZHIsCisJCSAgICAgICBwcmludGtfbGlzdFtpXS5wcmludGspOworCX0KK30KKworc3RhdGljIHN0cnVjdCBldmVudCAqYWxsb2NfZXZlbnQodm9pZCkKK3sKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCisJZXZlbnQgPSBtYWxsb2Nfb3JfZGllKHNpemVvZigqZXZlbnQpKTsKKwltZW1zZXQoZXZlbnQsIDAsIHNpemVvZigqZXZlbnQpKTsKKworCXJldHVybiBldmVudDsKK30KKworZW51bSBldmVudF90eXBlIHsKKwlFVkVOVF9FUlJPUiwKKwlFVkVOVF9OT05FLAorCUVWRU5UX1NQQUNFLAorCUVWRU5UX05FV0xJTkUsCisJRVZFTlRfT1AsCisJRVZFTlRfREVMSU0sCisJRVZFTlRfSVRFTSwKKwlFVkVOVF9EUVVPVEUsCisJRVZFTlRfU1FVT1RFLAorfTsKKworc3RhdGljIHN0cnVjdCBldmVudCAqZXZlbnRfbGlzdDsKKworc3RhdGljIHZvaWQgYWRkX2V2ZW50KHN0cnVjdCBldmVudCAqZXZlbnQpCit7CisJZXZlbnQtPm5leHQgPSBldmVudF9saXN0OworCWV2ZW50X2xpc3QgPSBldmVudDsKK30KKworc3RhdGljIGludCBldmVudF9pdGVtX3R5cGUoZW51bSBldmVudF90eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBFVkVOVF9JVEVNIC4uLiBFVkVOVF9TUVVPVEU6CisJCXJldHVybiAxOworCWNhc2UgRVZFTlRfRVJST1IgLi4uIEVWRU5UX0RFTElNOgorCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQgZnJlZV9hcmcoc3RydWN0IHByaW50X2FyZyAqYXJnKQoreworCWlmICghYXJnKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGFyZy0+dHlwZSkgeworCWNhc2UgUFJJTlRfQVRPTToKKwkJaWYgKGFyZy0+YXRvbS5hdG9tKQorCQkJZnJlZShhcmctPmF0b20uYXRvbSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfTlVMTDoKKwljYXNlIFBSSU5UX0ZJRUxEIC4uLiBQUklOVF9PUDoKKwlkZWZhdWx0OgorCQkvKiB0b2RvICovCisJCWJyZWFrOworCX0KKworCWZyZWUoYXJnKTsKK30KKworc3RhdGljIGVudW0gZXZlbnRfdHlwZSBnZXRfdHlwZShpbnQgY2gpCit7CisJaWYgKGNoID09ICdcbicpCisJCXJldHVybiBFVkVOVF9ORVdMSU5FOworCWlmIChpc3NwYWNlKGNoKSkKKwkJcmV0dXJuIEVWRU5UX1NQQUNFOworCWlmIChpc2FsbnVtKGNoKSB8fCBjaCA9PSAnXycpCisJCXJldHVybiBFVkVOVF9JVEVNOworCWlmIChjaCA9PSAnXCcnKQorCQlyZXR1cm4gRVZFTlRfU1FVT1RFOworCWlmIChjaCA9PSAnIicpCisJCXJldHVybiBFVkVOVF9EUVVPVEU7CisJaWYgKCFpc3ByaW50KGNoKSkKKwkJcmV0dXJuIEVWRU5UX05PTkU7CisJaWYgKGNoID09ICcoJyB8fCBjaCA9PSAnKScgfHwgY2ggPT0gJywnKQorCQlyZXR1cm4gRVZFTlRfREVMSU07CisKKwlyZXR1cm4gRVZFTlRfT1A7Cit9CisKK3N0YXRpYyBpbnQgX19yZWFkX2NoYXIodm9pZCkKK3sKKwlpZiAoaW5wdXRfYnVmX3B0ciA+PSBpbnB1dF9idWZfc2l6KQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gaW5wdXRfYnVmW2lucHV0X2J1Zl9wdHIrK107Cit9CisKK3N0YXRpYyBpbnQgX19wZWVrX2NoYXIodm9pZCkKK3sKKwlpZiAoaW5wdXRfYnVmX3B0ciA+PSBpbnB1dF9idWZfc2l6KQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gaW5wdXRfYnVmW2lucHV0X2J1Zl9wdHJdOworfQorCitzdGF0aWMgZW51bSBldmVudF90eXBlIF9fcmVhZF90b2tlbihjaGFyICoqdG9rKQoreworCWNoYXIgYnVmW0JVRlNJWl07CisJaW50IGNoLCBsYXN0X2NoLCBxdW90ZV9jaCwgbmV4dF9jaDsKKwlpbnQgaSA9IDA7CisJaW50IHRva19zaXplID0gMDsKKwllbnVtIGV2ZW50X3R5cGUgdHlwZTsKKworCSp0b2sgPSBOVUxMOworCisKKwljaCA9IF9fcmVhZF9jaGFyKCk7CisJaWYgKGNoIDwgMCkKKwkJcmV0dXJuIEVWRU5UX05PTkU7CisKKwl0eXBlID0gZ2V0X3R5cGUoY2gpOworCWlmICh0eXBlID09IEVWRU5UX05PTkUpCisJCXJldHVybiB0eXBlOworCisJYnVmW2krK10gPSBjaDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRVZFTlRfTkVXTElORToKKwljYXNlIEVWRU5UX0RFTElNOgorCQkqdG9rID0gbWFsbG9jX29yX2RpZSgyKTsKKwkJKCp0b2spWzBdID0gY2g7CisJCSgqdG9rKVsxXSA9IDA7CisJCXJldHVybiB0eXBlOworCisJY2FzZSBFVkVOVF9PUDoKKwkJc3dpdGNoIChjaCkgeworCQljYXNlICctJzoKKwkJCW5leHRfY2ggPSBfX3BlZWtfY2hhcigpOworCQkJaWYgKG5leHRfY2ggPT0gJz4nKSB7CisJCQkJYnVmW2krK10gPSBfX3JlYWRfY2hhcigpOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgJysnOgorCQljYXNlICd8JzoKKwkJY2FzZSAnJic6CisJCWNhc2UgJz4nOgorCQljYXNlICc8JzoKKwkJCWxhc3RfY2ggPSBjaDsKKwkJCWNoID0gX19wZWVrX2NoYXIoKTsKKwkJCWlmIChjaCAhPSBsYXN0X2NoKQorCQkJCWdvdG8gdGVzdF9lcXVhbDsKKwkJCWJ1ZltpKytdID0gX19yZWFkX2NoYXIoKTsKKwkJCXN3aXRjaCAobGFzdF9jaCkgeworCQkJY2FzZSAnPic6CisJCQljYXNlICc8JzoKKwkJCQlnb3RvIHRlc3RfZXF1YWw7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJyEnOgorCQljYXNlICc9JzoKKwkJCWdvdG8gdGVzdF9lcXVhbDsKKwkJZGVmYXVsdDogLyogd2hhdCBzaG91bGQgd2UgZG8gaW5zdGVhZD8gKi8KKwkJCWJyZWFrOworCQl9CisJCWJ1ZltpXSA9IDA7CisJCSp0b2sgPSBzdHJkdXAoYnVmKTsKKwkJcmV0dXJuIHR5cGU7CisKKyB0ZXN0X2VxdWFsOgorCQljaCA9IF9fcGVla19jaGFyKCk7CisJCWlmIChjaCA9PSAnPScpCisJCQlidWZbaSsrXSA9IF9fcmVhZF9jaGFyKCk7CisJCWJyZWFrOworCisJY2FzZSBFVkVOVF9EUVVPVEU6CisJY2FzZSBFVkVOVF9TUVVPVEU6CisJCS8qIGRvbid0IGtlZXAgcXVvdGVzICovCisJCWktLTsKKwkJcXVvdGVfY2ggPSBjaDsKKwkJbGFzdF9jaCA9IDA7CisJCWRvIHsKKwkJCWlmIChpID09IChCVUZTSVogLSAxKSkgeworCQkJCWJ1ZltpXSA9IDA7CisJCQkJaWYgKCp0b2spIHsKKwkJCQkJKnRvayA9IHJlYWxsb2MoKnRvaywgdG9rX3NpemUgKyBCVUZTSVopOworCQkJCQlpZiAoISp0b2spCisJCQkJCQlyZXR1cm4gRVZFTlRfTk9ORTsKKwkJCQkJc3RyY2F0KCp0b2ssIGJ1Zik7CisJCQkJfSBlbHNlCisJCQkJCSp0b2sgPSBzdHJkdXAoYnVmKTsKKworCQkJCWlmICghKnRvaykKKwkJCQkJcmV0dXJuIEVWRU5UX05PTkU7CisJCQkJdG9rX3NpemUgKz0gQlVGU0laOworCQkJCWkgPSAwOworCQkJfQorCQkJbGFzdF9jaCA9IGNoOworCQkJY2ggPSBfX3JlYWRfY2hhcigpOworCQkJYnVmW2krK10gPSBjaDsKKwkJfSB3aGlsZSAoY2ggIT0gcXVvdGVfY2ggJiYgbGFzdF9jaCAhPSAnXFwnKTsKKwkJLyogcmVtb3ZlIHRoZSBsYXN0IHF1b3RlICovCisJCWktLTsKKwkJZ290byBvdXQ7CisKKwljYXNlIEVWRU5UX0VSUk9SIC4uLiBFVkVOVF9TUEFDRToKKwljYXNlIEVWRU5UX0lURU06CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJd2hpbGUgKGdldF90eXBlKF9fcGVla19jaGFyKCkpID09IHR5cGUpIHsKKwkJaWYgKGkgPT0gKEJVRlNJWiAtIDEpKSB7CisJCQlidWZbaV0gPSAwOworCQkJaWYgKCp0b2spIHsKKwkJCQkqdG9rID0gcmVhbGxvYygqdG9rLCB0b2tfc2l6ZSArIEJVRlNJWik7CisJCQkJaWYgKCEqdG9rKQorCQkJCQlyZXR1cm4gRVZFTlRfTk9ORTsKKwkJCQlzdHJjYXQoKnRvaywgYnVmKTsKKwkJCX0gZWxzZQorCQkJCSp0b2sgPSBzdHJkdXAoYnVmKTsKKworCQkJaWYgKCEqdG9rKQorCQkJCXJldHVybiBFVkVOVF9OT05FOworCQkJdG9rX3NpemUgKz0gQlVGU0laOworCQkJaSA9IDA7CisJCX0KKwkJY2ggPSBfX3JlYWRfY2hhcigpOworCQlidWZbaSsrXSA9IGNoOworCX0KKworIG91dDoKKwlidWZbaV0gPSAwOworCWlmICgqdG9rKSB7CisJCSp0b2sgPSByZWFsbG9jKCp0b2ssIHRva19zaXplICsgaSk7CisJCWlmICghKnRvaykKKwkJCXJldHVybiBFVkVOVF9OT05FOworCQlzdHJjYXQoKnRvaywgYnVmKTsKKwl9IGVsc2UKKwkJKnRvayA9IHN0cmR1cChidWYpOworCWlmICghKnRvaykKKwkJcmV0dXJuIEVWRU5UX05PTkU7CisKKwlyZXR1cm4gdHlwZTsKK30KKworc3RhdGljIHZvaWQgZnJlZV90b2tlbihjaGFyICp0b2spCit7CisJaWYgKHRvaykKKwkJZnJlZSh0b2spOworfQorCitzdGF0aWMgZW51bSBldmVudF90eXBlIHJlYWRfdG9rZW4oY2hhciAqKnRvaykKK3sKKwllbnVtIGV2ZW50X3R5cGUgdHlwZTsKKworCWZvciAoOzspIHsKKwkJdHlwZSA9IF9fcmVhZF90b2tlbih0b2spOworCQlpZiAodHlwZSAhPSBFVkVOVF9TUEFDRSkKKwkJCXJldHVybiB0eXBlOworCisJCWZyZWVfdG9rZW4oKnRvayk7CisJfQorCisJLyogbm90IHJlYWNoZWQgKi8KKwlyZXR1cm4gRVZFTlRfTk9ORTsKK30KKworLyogbm8gbmV3bGluZSAqLworc3RhdGljIGVudW0gZXZlbnRfdHlwZSByZWFkX3Rva2VuX2l0ZW0oY2hhciAqKnRvaykKK3sKKwllbnVtIGV2ZW50X3R5cGUgdHlwZTsKKworCWZvciAoOzspIHsKKwkJdHlwZSA9IF9fcmVhZF90b2tlbih0b2spOworCQlpZiAodHlwZSAhPSBFVkVOVF9TUEFDRSAmJiB0eXBlICE9IEVWRU5UX05FV0xJTkUpCisJCQlyZXR1cm4gdHlwZTsKKworCQlmcmVlX3Rva2VuKCp0b2spOworCX0KKworCS8qIG5vdCByZWFjaGVkICovCisJcmV0dXJuIEVWRU5UX05PTkU7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF90eXBlKGVudW0gZXZlbnRfdHlwZSB0eXBlLCBlbnVtIGV2ZW50X3R5cGUgZXhwZWN0KQoreworCWlmICh0eXBlICE9IGV4cGVjdCkgeworCQlkaWUoIkVycm9yOiBleHBlY3RlZCB0eXBlICVkIGJ1dCByZWFkICVkIiwKKwkJICAgIGV4cGVjdCwgdHlwZSk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF90eXBlX3Rva2VuKGVudW0gZXZlbnRfdHlwZSB0eXBlLCBjaGFyICp0b2tlbiwKKwkJICAgIGVudW0gZXZlbnRfdHlwZSBleHBlY3QsIGNoYXIgKmV4cGVjdF90b2spCit7CisJaWYgKHR5cGUgIT0gZXhwZWN0KSB7CisJCWRpZSgiRXJyb3I6IGV4cGVjdGVkIHR5cGUgJWQgYnV0IHJlYWQgJWQiLAorCQkgICAgZXhwZWN0LCB0eXBlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChzdHJjbXAodG9rZW4sIGV4cGVjdF90b2spICE9IDApIHsKKwkJZGllKCJFcnJvcjogZXhwZWN0ZWQgJyVzJyBidXQgcmVhZCAnJXMnIiwKKwkJICAgIGV4cGVjdF90b2ssIHRva2VuKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX3JlYWRfZXhwZWN0X3R5cGUoZW51bSBldmVudF90eXBlIGV4cGVjdCwgY2hhciAqKnRvaywgaW50IG5ld2xpbmVfb2spCit7CisJZW51bSBldmVudF90eXBlIHR5cGU7CisKKwlpZiAobmV3bGluZV9vaykKKwkJdHlwZSA9IHJlYWRfdG9rZW4odG9rKTsKKwllbHNlCisJCXR5cGUgPSByZWFkX3Rva2VuX2l0ZW0odG9rKTsKKwlyZXR1cm4gdGVzdF90eXBlKHR5cGUsIGV4cGVjdCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9leHBlY3RfdHlwZShlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICoqdG9rKQoreworCXJldHVybiBfX3JlYWRfZXhwZWN0X3R5cGUoZXhwZWN0LCB0b2ssIDEpOworfQorCitzdGF0aWMgaW50IF9fcmVhZF9leHBlY3RlZChlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpzdHIsIGludCBuZXdsaW5lX29rKQoreworCWVudW0gZXZlbnRfdHlwZSB0eXBlOworCWNoYXIgKnRva2VuOworCWludCByZXQ7CisKKwlpZiAobmV3bGluZV9vaykKKwkJdHlwZSA9IHJlYWRfdG9rZW4oJnRva2VuKTsKKwllbHNlCisJCXR5cGUgPSByZWFkX3Rva2VuX2l0ZW0oJnRva2VuKTsKKworCXJldCA9IHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgZXhwZWN0LCBzdHIpOworCisJZnJlZV90b2tlbih0b2tlbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX2V4cGVjdGVkKGVudW0gZXZlbnRfdHlwZSBleHBlY3QsIGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gX19yZWFkX2V4cGVjdGVkKGV4cGVjdCwgc3RyLCAxKTsKK30KKworc3RhdGljIGludCByZWFkX2V4cGVjdGVkX2l0ZW0oZW51bSBldmVudF90eXBlIGV4cGVjdCwgY2hhciAqc3RyKQoreworCXJldHVybiBfX3JlYWRfZXhwZWN0ZWQoZXhwZWN0LCBzdHIsIDApOworfQorCitzdGF0aWMgY2hhciAqZXZlbnRfcmVhZF9uYW1lKHZvaWQpCit7CisJY2hhciAqdG9rZW47CisKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9JVEVNLCAoY2hhciAqKSJuYW1lIikgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAoY2hhciAqKSI6IikgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChyZWFkX2V4cGVjdF90eXBlKEVWRU5UX0lURU0sICZ0b2tlbikgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlyZXR1cm4gdG9rZW47CisKKyBmYWlsOgorCWZyZWVfdG9rZW4odG9rZW4pOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGV2ZW50X3JlYWRfaWQodm9pZCkKK3sKKwljaGFyICp0b2tlbjsKKwlpbnQgaWQ7CisKKwlpZiAocmVhZF9leHBlY3RlZF9pdGVtKEVWRU5UX0lURU0sIChjaGFyICopIklEIikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgKGNoYXIgKikiOiIpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlYWRfZXhwZWN0X3R5cGUoRVZFTlRfSVRFTSwgJnRva2VuKSA8IDApCisJCWdvdG8gZmFpbDsKKworCWlkID0gc3RydG91bCh0b2tlbiwgTlVMTCwgMCk7CisJZnJlZV90b2tlbih0b2tlbik7CisJcmV0dXJuIGlkOworCisgZmFpbDoKKwlmcmVlX3Rva2VuKHRva2VuKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZXZlbnRfcmVhZF9maWVsZHMoc3RydWN0IGV2ZW50ICpldmVudCwgc3RydWN0IGZvcm1hdF9maWVsZCAqKmZpZWxkcykKK3sKKwlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmaWVsZCA9IE5VTEw7CisJZW51bSBldmVudF90eXBlIHR5cGU7CisJY2hhciAqdG9rZW47CisJY2hhciAqbGFzdF90b2tlbjsKKwlpbnQgY291bnQgPSAwOworCisJZG8geworCQl0eXBlID0gcmVhZF90b2tlbigmdG9rZW4pOworCQlpZiAodHlwZSA9PSBFVkVOVF9ORVdMSU5FKSB7CisJCQlmcmVlX3Rva2VuKHRva2VuKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCisJCWNvdW50Kys7CisKKwkJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfSVRFTSwgKGNoYXIgKikiZmllbGQiKSkKKwkJCWdvdG8gZmFpbDsKKwkJZnJlZV90b2tlbih0b2tlbik7CisKKwkJdHlwZSA9IHJlYWRfdG9rZW4oJnRva2VuKTsKKwkJLyoKKwkJICogVGhlIGZ0cmFjZSBmaWVsZHMgbWF5IHN0aWxsIHVzZSB0aGUgInNwZWNpYWwiIG5hbWUuCisJCSAqIEp1c3QgaWdub3JlIGl0LgorCQkgKi8KKwkJaWYgKGV2ZW50LT5mbGFncyAmIEVWRU5UX0ZMX0lTRlRSQUNFICYmCisJCSAgICB0eXBlID09IEVWRU5UX0lURU0gJiYgc3RyY21wKHRva2VuLCAic3BlY2lhbCIpID09IDApIHsKKwkJCWZyZWVfdG9rZW4odG9rZW4pOworCQkJdHlwZSA9IHJlYWRfdG9rZW4oJnRva2VuKTsKKwkJfQorCisJCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX09QLCAoY2hhciAqKSI6IikgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCWlmIChyZWFkX2V4cGVjdF90eXBlKEVWRU5UX0lURU0sICZ0b2tlbikgPCAwKQorCQkJZ290byBmYWlsOworCisJCWxhc3RfdG9rZW4gPSB0b2tlbjsKKworCQlmaWVsZCA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCpmaWVsZCkpOworCQltZW1zZXQoZmllbGQsIDAsIHNpemVvZigqZmllbGQpKTsKKworCQkvKiByZWFkIHRoZSByZXN0IG9mIHRoZSB0eXBlICovCisJCWZvciAoOzspIHsKKwkJCXR5cGUgPSByZWFkX3Rva2VuKCZ0b2tlbik7CisJCQlpZiAodHlwZSA9PSBFVkVOVF9JVEVNIHx8CisJCQkgICAgKHR5cGUgPT0gRVZFTlRfT1AgJiYgc3RyY21wKHRva2VuLCAiKiIpID09IDApIHx8CisJCQkgICAgLyoKKwkJCSAgICAgKiBTb21lIG9mIHRoZSBmdHJhY2UgZmllbGRzIGFyZSBicm9rZW4gYW5kIGhhdmUKKwkJCSAgICAgKiBhbiBpbGxlZ2FsICIuIiBpbiB0aGVtLgorCQkJICAgICAqLworCQkJICAgIChldmVudC0+ZmxhZ3MgJiBFVkVOVF9GTF9JU0ZUUkFDRSAmJgorCQkJICAgICB0eXBlID09IEVWRU5UX09QICYmIHN0cmNtcCh0b2tlbiwgIi4iKSA9PSAwKSkgeworCisJCQkJaWYgKHN0cmNtcCh0b2tlbiwgIioiKSA9PSAwKQorCQkJCQlmaWVsZC0+ZmxhZ3MgfD0gRklFTERfSVNfUE9JTlRFUjsKKworCQkJCWlmIChmaWVsZC0+dHlwZSkgeworCQkJCQlmaWVsZC0+dHlwZSA9IHJlYWxsb2MoZmllbGQtPnR5cGUsCisJCQkJCQkJICAgICAgc3RybGVuKGZpZWxkLT50eXBlKSArCisJCQkJCQkJICAgICAgc3RybGVuKGxhc3RfdG9rZW4pICsgMik7CisJCQkJCXN0cmNhdChmaWVsZC0+dHlwZSwgIiAiKTsKKwkJCQkJc3RyY2F0KGZpZWxkLT50eXBlLCBsYXN0X3Rva2VuKTsKKwkJCQl9IGVsc2UKKwkJCQkJZmllbGQtPnR5cGUgPSBsYXN0X3Rva2VuOworCQkJCWxhc3RfdG9rZW4gPSB0b2tlbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIWZpZWxkLT50eXBlKSB7CisJCQlkaWUoIm5vIHR5cGUgZm91bmQiKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlmaWVsZC0+bmFtZSA9IGxhc3RfdG9rZW47CisKKwkJaWYgKHRlc3RfdHlwZSh0eXBlLCBFVkVOVF9PUCkpCisJCQlnb3RvIGZhaWw7CisKKwkJaWYgKHN0cmNtcCh0b2tlbiwgIlsiKSA9PSAwKSB7CisJCQllbnVtIGV2ZW50X3R5cGUgbGFzdF90eXBlID0gdHlwZTsKKwkJCWNoYXIgKmJyYWNrZXRzID0gdG9rZW47CisJCQlpbnQgbGVuOworCisJCQlmaWVsZC0+ZmxhZ3MgfD0gRklFTERfSVNfQVJSQVk7CisKKwkJCXR5cGUgPSByZWFkX3Rva2VuKCZ0b2tlbik7CisJCSAgICAgICAgd2hpbGUgKHN0cmNtcCh0b2tlbiwgIl0iKSAhPSAwKSB7CisJCQkJaWYgKGxhc3RfdHlwZSA9PSBFVkVOVF9JVEVNICYmCisJCQkJICAgIHR5cGUgPT0gRVZFTlRfSVRFTSkKKwkJCQkJbGVuID0gMjsKKwkJCQllbHNlCisJCQkJCWxlbiA9IDE7CisJCQkJbGFzdF90eXBlID0gdHlwZTsKKworCQkJCWJyYWNrZXRzID0gcmVhbGxvYyhicmFja2V0cywKKwkJCQkJCSAgIHN0cmxlbihicmFja2V0cykgKworCQkJCQkJICAgc3RybGVuKHRva2VuKSArIGxlbik7CisJCQkJaWYgKGxlbiA9PSAyKQorCQkJCQlzdHJjYXQoYnJhY2tldHMsICIgIik7CisJCQkJc3RyY2F0KGJyYWNrZXRzLCB0b2tlbik7CisJCQkJZnJlZV90b2tlbih0b2tlbik7CisJCQkJdHlwZSA9IHJlYWRfdG9rZW4oJnRva2VuKTsKKwkJCQlpZiAodHlwZSA9PSBFVkVOVF9OT05FKSB7CisJCQkJCWRpZSgiZmFpbGVkIHRvIGZpbmQgdG9rZW4iKTsKKwkJCQkJZ290byBmYWlsOworCQkJCX0KKwkJCX0KKworCQkJZnJlZV90b2tlbih0b2tlbik7CisKKwkJCWJyYWNrZXRzID0gcmVhbGxvYyhicmFja2V0cywgc3RybGVuKGJyYWNrZXRzKSArIDIpOworCQkJc3RyY2F0KGJyYWNrZXRzLCAiXSIpOworCisJCQkvKiBhZGQgYnJhY2tldHMgdG8gdHlwZSAqLworCisJCQl0eXBlID0gcmVhZF90b2tlbigmdG9rZW4pOworCQkJLyoKKwkJCSAqIElmIHRoZSBuZXh0IHRva2VuIGlzIG5vdCBhbiBPUCwgdGhlbiBpdCBpcyBvZgorCQkJICogdGhlIGZvcm1hdDogdHlwZSBbXSBpdGVtOworCQkJICovCisJCQlpZiAodHlwZSA9PSBFVkVOVF9JVEVNKSB7CisJCQkJZmllbGQtPnR5cGUgPSByZWFsbG9jKGZpZWxkLT50eXBlLAorCQkJCQkJICAgICAgc3RybGVuKGZpZWxkLT50eXBlKSArCisJCQkJCQkgICAgICBzdHJsZW4oZmllbGQtPm5hbWUpICsKKwkJCQkJCSAgICAgIHN0cmxlbihicmFja2V0cykgKyAyKTsKKwkJCQlzdHJjYXQoZmllbGQtPnR5cGUsICIgIik7CisJCQkJc3RyY2F0KGZpZWxkLT50eXBlLCBmaWVsZC0+bmFtZSk7CisJCQkJZnJlZV90b2tlbihmaWVsZC0+bmFtZSk7CisJCQkJc3RyY2F0KGZpZWxkLT50eXBlLCBicmFja2V0cyk7CisJCQkJZmllbGQtPm5hbWUgPSB0b2tlbjsKKwkJCQl0eXBlID0gcmVhZF90b2tlbigmdG9rZW4pOworCQkJfSBlbHNlIHsKKwkJCQlmaWVsZC0+dHlwZSA9IHJlYWxsb2MoZmllbGQtPnR5cGUsCisJCQkJCQkgICAgICBzdHJsZW4oZmllbGQtPnR5cGUpICsKKwkJCQkJCSAgICAgIHN0cmxlbihicmFja2V0cykgKyAxKTsKKwkJCQlzdHJjYXQoZmllbGQtPnR5cGUsIGJyYWNrZXRzKTsKKwkJCX0KKwkJCWZyZWUoYnJhY2tldHMpOworCQl9CisKKwkJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgIEVWRU5UX09QLCAoY2hhciAqKSI7IikpCisJCQlnb3RvIGZhaWw7CisJCWZyZWVfdG9rZW4odG9rZW4pOworCisJCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0lURU0sIChjaGFyICopIm9mZnNldCIpIDwgMCkKKwkJCWdvdG8gZmFpbF9leHBlY3Q7CisKKwkJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsIChjaGFyICopIjoiKSA8IDApCisJCQlnb3RvIGZhaWxfZXhwZWN0OworCisJCWlmIChyZWFkX2V4cGVjdF90eXBlKEVWRU5UX0lURU0sICZ0b2tlbikpCisJCQlnb3RvIGZhaWw7CisJCWZpZWxkLT5vZmZzZXQgPSBzdHJ0b3VsKHRva2VuLCBOVUxMLCAwKTsKKwkJZnJlZV90b2tlbih0b2tlbik7CisKKwkJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsIChjaGFyICopIjsiKSA8IDApCisJCQlnb3RvIGZhaWxfZXhwZWN0OworCisJCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0lURU0sIChjaGFyICopInNpemUiKSA8IDApCisJCQlnb3RvIGZhaWxfZXhwZWN0OworCisJCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAoY2hhciAqKSI6IikgPCAwKQorCQkJZ290byBmYWlsX2V4cGVjdDsKKworCQlpZiAocmVhZF9leHBlY3RfdHlwZShFVkVOVF9JVEVNLCAmdG9rZW4pKQorCQkJZ290byBmYWlsOworCQlmaWVsZC0+c2l6ZSA9IHN0cnRvdWwodG9rZW4sIE5VTEwsIDApOworCQlmcmVlX3Rva2VuKHRva2VuKTsKKworCQlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgKGNoYXIgKikiOyIpIDwgMCkKKwkJCWdvdG8gZmFpbF9leHBlY3Q7CisKKwkJaWYgKHJlYWRfZXhwZWN0X3R5cGUoRVZFTlRfTkVXTElORSwgJnRva2VuKSA8IDApCisJCQlnb3RvIGZhaWw7CisJCWZyZWVfdG9rZW4odG9rZW4pOworCisJCSpmaWVsZHMgPSBmaWVsZDsKKwkJZmllbGRzID0gJmZpZWxkLT5uZXh0OworCisJfSB3aGlsZSAoMSk7CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlmcmVlX3Rva2VuKHRva2VuKTsKK2ZhaWxfZXhwZWN0OgorCWlmIChmaWVsZCkKKwkJZnJlZShmaWVsZCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGV2ZW50X3JlYWRfZm9ybWF0KHN0cnVjdCBldmVudCAqZXZlbnQpCit7CisJY2hhciAqdG9rZW47CisJaW50IHJldDsKKworCWlmIChyZWFkX2V4cGVjdGVkX2l0ZW0oRVZFTlRfSVRFTSwgKGNoYXIgKikiZm9ybWF0IikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgKGNoYXIgKikiOiIpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlYWRfZXhwZWN0X3R5cGUoRVZFTlRfTkVXTElORSwgJnRva2VuKSkKKwkJZ290byBmYWlsOworCWZyZWVfdG9rZW4odG9rZW4pOworCisJcmV0ID0gZXZlbnRfcmVhZF9maWVsZHMoZXZlbnQsICZldmVudC0+Zm9ybWF0LmNvbW1vbl9maWVsZHMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWV2ZW50LT5mb3JtYXQubnJfY29tbW9uID0gcmV0OworCisJcmV0ID0gZXZlbnRfcmVhZF9maWVsZHMoZXZlbnQsICZldmVudC0+Zm9ybWF0LmZpZWxkcyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZXZlbnQtPmZvcm1hdC5ucl9maWVsZHMgPSByZXQ7CisKKwlyZXR1cm4gMDsKKworIGZhaWw6CisJZnJlZV90b2tlbih0b2tlbik7CisJcmV0dXJuIC0xOworfQorCitlbnVtIGV2ZW50X3R5cGUKK3Byb2Nlc3NfYXJnX3Rva2VuKHN0cnVjdCBldmVudCAqZXZlbnQsIHN0cnVjdCBwcmludF9hcmcgKmFyZywKKwkJICBjaGFyICoqdG9rLCBlbnVtIGV2ZW50X3R5cGUgdHlwZSk7CisKK3N0YXRpYyBlbnVtIGV2ZW50X3R5cGUKK3Byb2Nlc3NfYXJnKHN0cnVjdCBldmVudCAqZXZlbnQsIHN0cnVjdCBwcmludF9hcmcgKmFyZywgY2hhciAqKnRvaykKK3sKKwllbnVtIGV2ZW50X3R5cGUgdHlwZTsKKwljaGFyICp0b2tlbjsKKworCXR5cGUgPSByZWFkX3Rva2VuKCZ0b2tlbik7CisJKnRvayA9IHRva2VuOworCisJcmV0dXJuIHByb2Nlc3NfYXJnX3Rva2VuKGV2ZW50LCBhcmcsIHRvaywgdHlwZSk7Cit9CisKK3N0YXRpYyBlbnVtIGV2ZW50X3R5cGUKK3Byb2Nlc3NfY29uZChzdHJ1Y3QgZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgcHJpbnRfYXJnICp0b3AsIGNoYXIgKip0b2spCit7CisJc3RydWN0IHByaW50X2FyZyAqYXJnLCAqbGVmdCwgKnJpZ2h0OworCWVudW0gZXZlbnRfdHlwZSB0eXBlOworCWNoYXIgKnRva2VuID0gTlVMTDsKKworCWFyZyA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCphcmcpKTsKKwltZW1zZXQoYXJnLCAwLCBzaXplb2YoKmFyZykpOworCisJbGVmdCA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCpsZWZ0KSk7CisKKwlyaWdodCA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCpyaWdodCkpOworCisJYXJnLT50eXBlID0gUFJJTlRfT1A7CisJYXJnLT5vcC5sZWZ0ID0gbGVmdDsKKwlhcmctPm9wLnJpZ2h0ID0gcmlnaHQ7CisKKwkqdG9rID0gTlVMTDsKKwl0eXBlID0gcHJvY2Vzc19hcmcoZXZlbnQsIGxlZnQsICZ0b2tlbik7CisJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfT1AsIChjaGFyICopIjoiKSkKKwkJZ290byBvdXRfZnJlZTsKKworCWFyZy0+b3Aub3AgPSB0b2tlbjsKKworCXR5cGUgPSBwcm9jZXNzX2FyZyhldmVudCwgcmlnaHQsICZ0b2tlbik7CisKKwl0b3AtPm9wLnJpZ2h0ID0gYXJnOworCisJKnRvayA9IHRva2VuOworCXJldHVybiB0eXBlOworCitvdXRfZnJlZToKKwlmcmVlX3Rva2VuKCp0b2spOworCWZyZWUocmlnaHQpOworCWZyZWUobGVmdCk7CisJZnJlZV9hcmcoYXJnKTsKKwlyZXR1cm4gRVZFTlRfRVJST1I7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X29wX3ByaW8oY2hhciAqb3ApCit7CisJaWYgKCFvcFsxXSkgeworCQlzd2l0Y2ggKG9wWzBdKSB7CisJCWNhc2UgJyonOgorCQljYXNlICcvJzoKKwkJY2FzZSAnJSc6CisJCQlyZXR1cm4gNjsKKwkJY2FzZSAnKyc6CisJCWNhc2UgJy0nOgorCQkJcmV0dXJuIDc7CisJCQkvKiAnPj4nIGFuZCAnPDwnIGFyZSA4ICovCisJCWNhc2UgJzwnOgorCQljYXNlICc+JzoKKwkJCXJldHVybiA5OworCQkJLyogJz09JyBhbmQgJyE9JyBhcmUgMTAgKi8KKwkJY2FzZSAnJic6CisJCQlyZXR1cm4gMTE7CisJCWNhc2UgJ14nOgorCQkJcmV0dXJuIDEyOworCQljYXNlICd8JzoKKwkJCXJldHVybiAxMzsKKwkJY2FzZSAnPyc6CisJCQlyZXR1cm4gMTY7CisJCWRlZmF1bHQ6CisJCQlkaWUoInVua25vd24gb3AgJyVjJyIsIG9wWzBdKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChzdHJjbXAob3AsICIrKyIpID09IDAgfHwKKwkJICAgIHN0cmNtcChvcCwgIi0tIikgPT0gMCkgeworCQkJcmV0dXJuIDM7CisJCX0gZWxzZSBpZiAoc3RyY21wKG9wLCAiPj4iKSA9PSAwIHx8CisJCQkgICBzdHJjbXAob3AsICI8PCIpID09IDApIHsKKwkJCXJldHVybiA4OworCQl9IGVsc2UgaWYgKHN0cmNtcChvcCwgIj49IikgPT0gMCB8fAorCQkJICAgc3RyY21wKG9wLCAiPD0iKSA9PSAwKSB7CisJCQlyZXR1cm4gOTsKKwkJfSBlbHNlIGlmIChzdHJjbXAob3AsICI9PSIpID09IDAgfHwKKwkJCSAgIHN0cmNtcChvcCwgIiE9IikgPT0gMCkgeworCQkJcmV0dXJuIDEwOworCQl9IGVsc2UgaWYgKHN0cmNtcChvcCwgIiYmIikgPT0gMCkgeworCQkJcmV0dXJuIDE0OworCQl9IGVsc2UgaWYgKHN0cmNtcChvcCwgInx8IikgPT0gMCkgeworCQkJcmV0dXJuIDE1OworCQl9IGVsc2UgeworCQkJZGllKCJ1bmtub3duIG9wICclcyciLCBvcCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9vcF9wcmlvKHN0cnVjdCBwcmludF9hcmcgKmFyZykKK3sKKworCS8qIHNpbmdsZSBvcHMgYXJlIHRoZSBncmVhdGVzdCAqLworCWlmICghYXJnLT5vcC5sZWZ0IHx8IGFyZy0+b3AubGVmdC0+dHlwZSA9PSBQUklOVF9OVUxMKSB7CisJCWFyZy0+b3AucHJpbyA9IDA7CisJCXJldHVybjsKKwl9CisKKwlhcmctPm9wLnByaW8gPSBnZXRfb3BfcHJpbyhhcmctPm9wLm9wKTsKK30KKworc3RhdGljIGVudW0gZXZlbnRfdHlwZQorcHJvY2Vzc19vcChzdHJ1Y3QgZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgcHJpbnRfYXJnICphcmcsIGNoYXIgKip0b2spCit7CisJc3RydWN0IHByaW50X2FyZyAqbGVmdCwgKnJpZ2h0ID0gTlVMTDsKKwllbnVtIGV2ZW50X3R5cGUgdHlwZTsKKwljaGFyICp0b2tlbjsKKworCS8qIHRoZSBvcCBpcyBwYXNzZWQgaW4gdmlhIHRvayAqLworCXRva2VuID0gKnRvazsKKworCWlmIChhcmctPnR5cGUgPT0gUFJJTlRfT1AgJiYgIWFyZy0+b3AubGVmdCkgeworCQkvKiBoYW5kbGUgc2luZ2xlIG9wICovCisJCWlmICh0b2tlblsxXSkgeworCQkJZGllKCJiYWQgb3AgdG9rZW4gJXMiLCB0b2tlbik7CisJCQlyZXR1cm4gRVZFTlRfRVJST1I7CisJCX0KKwkJc3dpdGNoICh0b2tlblswXSkgeworCQljYXNlICchJzoKKwkJY2FzZSAnKyc6CisJCWNhc2UgJy0nOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkaWUoImJhZCBvcCB0b2tlbiAlcyIsIHRva2VuKTsKKwkJCXJldHVybiBFVkVOVF9FUlJPUjsKKwkJfQorCisJCS8qIG1ha2UgYW4gZW1wdHkgbGVmdCAqLworCQlsZWZ0ID0gbWFsbG9jX29yX2RpZShzaXplb2YoKmxlZnQpKTsKKwkJbGVmdC0+dHlwZSA9IFBSSU5UX05VTEw7CisJCWFyZy0+b3AubGVmdCA9IGxlZnQ7CisKKwkJcmlnaHQgPSBtYWxsb2Nfb3JfZGllKHNpemVvZigqcmlnaHQpKTsKKwkJYXJnLT5vcC5yaWdodCA9IHJpZ2h0OworCisJCXR5cGUgPSBwcm9jZXNzX2FyZyhldmVudCwgcmlnaHQsIHRvayk7CisKKwl9IGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgIj8iKSA9PSAwKSB7CisKKwkJbGVmdCA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCpsZWZ0KSk7CisJCS8qIGNvcHkgdGhlIHRvcCBhcmcgdG8gdGhlIGxlZnQgKi8KKwkJKmxlZnQgPSAqYXJnOworCisJCWFyZy0+dHlwZSA9IFBSSU5UX09QOworCQlhcmctPm9wLm9wID0gdG9rZW47CisJCWFyZy0+b3AubGVmdCA9IGxlZnQ7CisJCWFyZy0+b3AucHJpbyA9IDA7CisKKwkJdHlwZSA9IHByb2Nlc3NfY29uZChldmVudCwgYXJnLCB0b2spOworCisJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICI+PiIpID09IDAgfHwKKwkJICAgc3RyY21wKHRva2VuLCAiPDwiKSA9PSAwIHx8CisJCSAgIHN0cmNtcCh0b2tlbiwgIiYiKSA9PSAwIHx8CisJCSAgIHN0cmNtcCh0b2tlbiwgInwiKSA9PSAwIHx8CisJCSAgIHN0cmNtcCh0b2tlbiwgIiYmIikgPT0gMCB8fAorCQkgICBzdHJjbXAodG9rZW4sICJ8fCIpID09IDAgfHwKKwkJICAgc3RyY21wKHRva2VuLCAiLSIpID09IDAgfHwKKwkJICAgc3RyY21wKHRva2VuLCAiKyIpID09IDAgfHwKKwkJICAgc3RyY21wKHRva2VuLCAiKiIpID09IDAgfHwKKwkJICAgc3RyY21wKHRva2VuLCAiXiIpID09IDAgfHwKKwkJICAgc3RyY21wKHRva2VuLCAiLyIpID09IDAgfHwKKwkJICAgc3RyY21wKHRva2VuLCAiPT0iKSA9PSAwIHx8CisJCSAgIHN0cmNtcCh0b2tlbiwgIiE9IikgPT0gMCkgeworCisJCWxlZnQgPSBtYWxsb2Nfb3JfZGllKHNpemVvZigqbGVmdCkpOworCisJCS8qIGNvcHkgdGhlIHRvcCBhcmcgdG8gdGhlIGxlZnQgKi8KKwkJKmxlZnQgPSAqYXJnOworCisJCWFyZy0+dHlwZSA9IFBSSU5UX09QOworCQlhcmctPm9wLm9wID0gdG9rZW47CisJCWFyZy0+b3AubGVmdCA9IGxlZnQ7CisKKwkJc2V0X29wX3ByaW8oYXJnKTsKKworCQlyaWdodCA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCpyaWdodCkpOworCisJCXR5cGUgPSBwcm9jZXNzX2FyZyhldmVudCwgcmlnaHQsIHRvayk7CisKKwkJYXJnLT5vcC5yaWdodCA9IHJpZ2h0OworCisJfSBlbHNlIHsKKwkJZGllKCJ1bmtub3duIG9wICclcyciLCB0b2tlbik7CisJCS8qIHRoZSBhcmcgaXMgbm93IHRoZSBsZWZ0IHNpZGUgKi8KKwkJcmV0dXJuIEVWRU5UX05PTkU7CisJfQorCisKKwlpZiAodHlwZSA9PSBFVkVOVF9PUCkgeworCQlpbnQgcHJpbzsKKworCQkvKiBoaWdoZXIgcHJpb3MgbmVlZCB0byBiZSBjbG9zZXIgdG8gdGhlIHJvb3QgKi8KKwkJcHJpbyA9IGdldF9vcF9wcmlvKCp0b2spOworCisJCWlmIChwcmlvID4gYXJnLT5vcC5wcmlvKQorCQkJcmV0dXJuIHByb2Nlc3Nfb3AoZXZlbnQsIGFyZywgdG9rKTsKKworCQlyZXR1cm4gcHJvY2Vzc19vcChldmVudCwgcmlnaHQsIHRvayk7CisJfQorCisJcmV0dXJuIHR5cGU7Cit9CisKK3N0YXRpYyBlbnVtIGV2ZW50X3R5cGUKK3Byb2Nlc3NfZW50cnkoc3RydWN0IGV2ZW50ICpldmVudCBfX3VudXNlZCwgc3RydWN0IHByaW50X2FyZyAqYXJnLAorCSAgICAgIGNoYXIgKip0b2spCit7CisJZW51bSBldmVudF90eXBlIHR5cGU7CisJY2hhciAqZmllbGQ7CisJY2hhciAqdG9rZW47CisKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgKGNoYXIgKikiLT4iKSA8IDApCisJCXJldHVybiBFVkVOVF9FUlJPUjsKKworCWlmIChyZWFkX2V4cGVjdF90eXBlKEVWRU5UX0lURU0sICZ0b2tlbikgPCAwKQorCQlnb3RvIGZhaWw7CisJZmllbGQgPSB0b2tlbjsKKworCWFyZy0+dHlwZSA9IFBSSU5UX0ZJRUxEOworCWFyZy0+ZmllbGQubmFtZSA9IGZpZWxkOworCisJdHlwZSA9IHJlYWRfdG9rZW4oJnRva2VuKTsKKwkqdG9rID0gdG9rZW47CisKKwlyZXR1cm4gdHlwZTsKKworZmFpbDoKKwlmcmVlX3Rva2VuKHRva2VuKTsKKwlyZXR1cm4gRVZFTlRfRVJST1I7Cit9CisKK3N0YXRpYyBjaGFyICphcmdfZXZhbCAoc3RydWN0IHByaW50X2FyZyAqYXJnKTsKKworc3RhdGljIGxvbmcgbG9uZyBhcmdfbnVtX2V2YWwoc3RydWN0IHByaW50X2FyZyAqYXJnKQoreworCWxvbmcgbG9uZyBsZWZ0LCByaWdodDsKKwlsb25nIGxvbmcgdmFsID0gMDsKKworCXN3aXRjaCAoYXJnLT50eXBlKSB7CisJY2FzZSBQUklOVF9BVE9NOgorCQl2YWwgPSBzdHJ0b2xsKGFyZy0+YXRvbS5hdG9tLCBOVUxMLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9UWVBFOgorCQl2YWwgPSBhcmdfbnVtX2V2YWwoYXJnLT50eXBlY2FzdC5pdGVtKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9PUDoKKwkJc3dpdGNoIChhcmctPm9wLm9wWzBdKSB7CisJCWNhc2UgJ3wnOgorCQkJbGVmdCA9IGFyZ19udW1fZXZhbChhcmctPm9wLmxlZnQpOworCQkJcmlnaHQgPSBhcmdfbnVtX2V2YWwoYXJnLT5vcC5yaWdodCk7CisJCQlpZiAoYXJnLT5vcC5vcFsxXSkKKwkJCQl2YWwgPSBsZWZ0IHx8IHJpZ2h0OworCQkJZWxzZQorCQkJCXZhbCA9IGxlZnQgfCByaWdodDsKKwkJCWJyZWFrOworCQljYXNlICcmJzoKKwkJCWxlZnQgPSBhcmdfbnVtX2V2YWwoYXJnLT5vcC5sZWZ0KTsKKwkJCXJpZ2h0ID0gYXJnX251bV9ldmFsKGFyZy0+b3AucmlnaHQpOworCQkJaWYgKGFyZy0+b3Aub3BbMV0pCisJCQkJdmFsID0gbGVmdCAmJiByaWdodDsKKwkJCWVsc2UKKwkJCQl2YWwgPSBsZWZ0ICYgcmlnaHQ7CisJCQlicmVhazsKKwkJY2FzZSAnPCc6CisJCQlsZWZ0ID0gYXJnX251bV9ldmFsKGFyZy0+b3AubGVmdCk7CisJCQlyaWdodCA9IGFyZ19udW1fZXZhbChhcmctPm9wLnJpZ2h0KTsKKwkJCXN3aXRjaCAoYXJnLT5vcC5vcFsxXSkgeworCQkJY2FzZSAwOgorCQkJCXZhbCA9IGxlZnQgPCByaWdodDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJzwnOgorCQkJCXZhbCA9IGxlZnQgPDwgcmlnaHQ7CisJCQkJYnJlYWs7CisJCQljYXNlICc9JzoKKwkJCQl2YWwgPSBsZWZ0IDw9IHJpZ2h0OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlkaWUoInVua25vd24gb3AgJyVzJyIsIGFyZy0+b3Aub3ApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJz4nOgorCQkJbGVmdCA9IGFyZ19udW1fZXZhbChhcmctPm9wLmxlZnQpOworCQkJcmlnaHQgPSBhcmdfbnVtX2V2YWwoYXJnLT5vcC5yaWdodCk7CisJCQlzd2l0Y2ggKGFyZy0+b3Aub3BbMV0pIHsKKwkJCWNhc2UgMDoKKwkJCQl2YWwgPSBsZWZ0ID4gcmlnaHQ7CisJCQkJYnJlYWs7CisJCQljYXNlICc+JzoKKwkJCQl2YWwgPSBsZWZ0ID4+IHJpZ2h0OworCQkJCWJyZWFrOworCQkJY2FzZSAnPSc6CisJCQkJdmFsID0gbGVmdCA+PSByaWdodDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZGllKCJ1bmtub3duIG9wICclcyciLCBhcmctPm9wLm9wKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICc9JzoKKwkJCWxlZnQgPSBhcmdfbnVtX2V2YWwoYXJnLT5vcC5sZWZ0KTsKKwkJCXJpZ2h0ID0gYXJnX251bV9ldmFsKGFyZy0+b3AucmlnaHQpOworCisJCQlpZiAoYXJnLT5vcC5vcFsxXSAhPSAnPScpCisJCQkJZGllKCJ1bmtub3duIG9wICclcyciLCBhcmctPm9wLm9wKTsKKworCQkJdmFsID0gbGVmdCA9PSByaWdodDsKKwkJCWJyZWFrOworCQljYXNlICchJzoKKwkJCWxlZnQgPSBhcmdfbnVtX2V2YWwoYXJnLT5vcC5sZWZ0KTsKKwkJCXJpZ2h0ID0gYXJnX251bV9ldmFsKGFyZy0+b3AucmlnaHQpOworCisJCQlzd2l0Y2ggKGFyZy0+b3Aub3BbMV0pIHsKKwkJCWNhc2UgJz0nOgorCQkJCXZhbCA9IGxlZnQgIT0gcmlnaHQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWRpZSgidW5rbm93biBvcCAnJXMnIiwgYXJnLT5vcC5vcCk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRpZSgidW5rbm93biBvcCAnJXMnIiwgYXJnLT5vcC5vcCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBSSU5UX05VTEw6CisJY2FzZSBQUklOVF9GSUVMRCAuLi4gUFJJTlRfU1lNQk9MOgorCWNhc2UgUFJJTlRfU1RSSU5HOgorCWRlZmF1bHQ6CisJCWRpZSgiaW52YWxpZCBldmFsIHR5cGUgJWQiLCBhcmctPnR5cGUpOworCisJfQorCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBjaGFyICphcmdfZXZhbCAoc3RydWN0IHByaW50X2FyZyAqYXJnKQoreworCWxvbmcgbG9uZyB2YWw7CisJc3RhdGljIGNoYXIgYnVmWzIwXTsKKworCXN3aXRjaCAoYXJnLT50eXBlKSB7CisJY2FzZSBQUklOVF9BVE9NOgorCQlyZXR1cm4gYXJnLT5hdG9tLmF0b207CisJY2FzZSBQUklOVF9UWVBFOgorCQlyZXR1cm4gYXJnX2V2YWwoYXJnLT50eXBlY2FzdC5pdGVtKTsKKwljYXNlIFBSSU5UX09QOgorCQl2YWwgPSBhcmdfbnVtX2V2YWwoYXJnKTsKKwkJc3ByaW50ZihidWYsICIlbGxkIiwgdmFsKTsKKwkJcmV0dXJuIGJ1ZjsKKworCWNhc2UgUFJJTlRfTlVMTDoKKwljYXNlIFBSSU5UX0ZJRUxEIC4uLiBQUklOVF9TWU1CT0w6CisJY2FzZSBQUklOVF9TVFJJTkc6CisJZGVmYXVsdDoKKwkJZGllKCJpbnZhbGlkIGV2YWwgdHlwZSAlZCIsIGFyZy0+dHlwZSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgZW51bSBldmVudF90eXBlCitwcm9jZXNzX2ZpZWxkcyhzdHJ1Y3QgZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgcHJpbnRfZmxhZ19zeW0gKipsaXN0LCBjaGFyICoqdG9rKQoreworCWVudW0gZXZlbnRfdHlwZSB0eXBlOworCXN0cnVjdCBwcmludF9hcmcgKmFyZyA9IE5VTEw7CisJc3RydWN0IHByaW50X2ZsYWdfc3ltICpmaWVsZDsKKwljaGFyICp0b2tlbiA9IE5VTEw7CisJY2hhciAqdmFsdWU7CisKKwlkbyB7CisJCWZyZWVfdG9rZW4odG9rZW4pOworCQl0eXBlID0gcmVhZF90b2tlbl9pdGVtKCZ0b2tlbik7CisJCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX09QLCAoY2hhciAqKSJ7IikpCisJCQlicmVhazsKKworCQlhcmcgPSBtYWxsb2Nfb3JfZGllKHNpemVvZigqYXJnKSk7CisKKwkJZnJlZV90b2tlbih0b2tlbik7CisJCXR5cGUgPSBwcm9jZXNzX2FyZyhldmVudCwgYXJnLCAmdG9rZW4pOworCQlpZiAodGVzdF90eXBlX3Rva2VuKHR5cGUsIHRva2VuLCBFVkVOVF9ERUxJTSwgKGNoYXIgKikiLCIpKQorCQkJZ290byBvdXRfZnJlZTsKKworCQlmaWVsZCA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCpmaWVsZCkpOworCQltZW1zZXQoZmllbGQsIDAsIHNpemVvZihmaWVsZCkpOworCisJCXZhbHVlID0gYXJnX2V2YWwoYXJnKTsKKwkJZmllbGQtPnZhbHVlID0gc3RyZHVwKHZhbHVlKTsKKworCQlmcmVlX3Rva2VuKHRva2VuKTsKKwkJdHlwZSA9IHByb2Nlc3NfYXJnKGV2ZW50LCBhcmcsICZ0b2tlbik7CisJCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX09QLCAoY2hhciAqKSJ9IikpCisJCQlnb3RvIG91dF9mcmVlOworCisJCXZhbHVlID0gYXJnX2V2YWwoYXJnKTsKKwkJZmllbGQtPnN0ciA9IHN0cmR1cCh2YWx1ZSk7CisJCWZyZWVfYXJnKGFyZyk7CisJCWFyZyA9IE5VTEw7CisKKwkJKmxpc3QgPSBmaWVsZDsKKwkJbGlzdCA9ICZmaWVsZC0+bmV4dDsKKworCQlmcmVlX3Rva2VuKHRva2VuKTsKKwkJdHlwZSA9IHJlYWRfdG9rZW5faXRlbSgmdG9rZW4pOworCX0gd2hpbGUgKHR5cGUgPT0gRVZFTlRfREVMSU0gJiYgc3RyY21wKHRva2VuLCAiLCIpID09IDApOworCisJKnRvayA9IHRva2VuOworCXJldHVybiB0eXBlOworCitvdXRfZnJlZToKKwlmcmVlX2FyZyhhcmcpOworCWZyZWVfdG9rZW4odG9rZW4pOworCisJcmV0dXJuIEVWRU5UX0VSUk9SOworfQorCitzdGF0aWMgZW51bSBldmVudF90eXBlCitwcm9jZXNzX2ZsYWdzKHN0cnVjdCBldmVudCAqZXZlbnQsIHN0cnVjdCBwcmludF9hcmcgKmFyZywgY2hhciAqKnRvaykKK3sKKwlzdHJ1Y3QgcHJpbnRfYXJnICpmaWVsZDsKKwllbnVtIGV2ZW50X3R5cGUgdHlwZTsKKwljaGFyICp0b2tlbjsKKworCW1lbXNldChhcmcsIDAsIHNpemVvZigqYXJnKSk7CisJYXJnLT50eXBlID0gUFJJTlRfRkxBR1M7CisKKwlpZiAocmVhZF9leHBlY3RlZF9pdGVtKEVWRU5UX0RFTElNLCAoY2hhciAqKSIoIikgPCAwKQorCQlyZXR1cm4gRVZFTlRfRVJST1I7CisKKwlmaWVsZCA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCpmaWVsZCkpOworCisJdHlwZSA9IHByb2Nlc3NfYXJnKGV2ZW50LCBmaWVsZCwgJnRva2VuKTsKKwlpZiAodGVzdF90eXBlX3Rva2VuKHR5cGUsIHRva2VuLCBFVkVOVF9ERUxJTSwgKGNoYXIgKikiLCIpKQorCQlnb3RvIG91dF9mcmVlOworCisJYXJnLT5mbGFncy5maWVsZCA9IGZpZWxkOworCisJdHlwZSA9IHJlYWRfdG9rZW5faXRlbSgmdG9rZW4pOworCWlmIChldmVudF9pdGVtX3R5cGUodHlwZSkpIHsKKwkJYXJnLT5mbGFncy5kZWxpbSA9IHRva2VuOworCQl0eXBlID0gcmVhZF90b2tlbl9pdGVtKCZ0b2tlbik7CisJfQorCisJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfREVMSU0sIChjaGFyICopIiwiKSkKKwkJZ290byBvdXRfZnJlZTsKKworCXR5cGUgPSBwcm9jZXNzX2ZpZWxkcyhldmVudCwgJmFyZy0+ZmxhZ3MuZmxhZ3MsICZ0b2tlbik7CisJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfREVMSU0sIChjaGFyICopIikiKSkKKwkJZ290byBvdXRfZnJlZTsKKworCWZyZWVfdG9rZW4odG9rZW4pOworCXR5cGUgPSByZWFkX3Rva2VuX2l0ZW0odG9rKTsKKwlyZXR1cm4gdHlwZTsKKworb3V0X2ZyZWU6CisJZnJlZV90b2tlbih0b2tlbik7CisJcmV0dXJuIEVWRU5UX0VSUk9SOworfQorCitzdGF0aWMgZW51bSBldmVudF90eXBlCitwcm9jZXNzX3N5bWJvbHMoc3RydWN0IGV2ZW50ICpldmVudCwgc3RydWN0IHByaW50X2FyZyAqYXJnLCBjaGFyICoqdG9rKQoreworCXN0cnVjdCBwcmludF9hcmcgKmZpZWxkOworCWVudW0gZXZlbnRfdHlwZSB0eXBlOworCWNoYXIgKnRva2VuOworCisJbWVtc2V0KGFyZywgMCwgc2l6ZW9mKCphcmcpKTsKKwlhcmctPnR5cGUgPSBQUklOVF9TWU1CT0w7CisKKwlpZiAocmVhZF9leHBlY3RlZF9pdGVtKEVWRU5UX0RFTElNLCAoY2hhciAqKSIoIikgPCAwKQorCQlyZXR1cm4gRVZFTlRfRVJST1I7CisKKwlmaWVsZCA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCpmaWVsZCkpOworCisJdHlwZSA9IHByb2Nlc3NfYXJnKGV2ZW50LCBmaWVsZCwgJnRva2VuKTsKKwlpZiAodGVzdF90eXBlX3Rva2VuKHR5cGUsIHRva2VuLCBFVkVOVF9ERUxJTSwgKGNoYXIgKikiLCIpKQorCQlnb3RvIG91dF9mcmVlOworCisJYXJnLT5zeW1ib2wuZmllbGQgPSBmaWVsZDsKKworCXR5cGUgPSBwcm9jZXNzX2ZpZWxkcyhldmVudCwgJmFyZy0+c3ltYm9sLnN5bWJvbHMsICZ0b2tlbik7CisJaWYgKHRlc3RfdHlwZV90b2tlbih0eXBlLCB0b2tlbiwgRVZFTlRfREVMSU0sIChjaGFyICopIikiKSkKKwkJZ290byBvdXRfZnJlZTsKKworCWZyZWVfdG9rZW4odG9rZW4pOworCXR5cGUgPSByZWFkX3Rva2VuX2l0ZW0odG9rKTsKKwlyZXR1cm4gdHlwZTsKKworb3V0X2ZyZWU6CisJZnJlZV90b2tlbih0b2tlbik7CisJcmV0dXJuIEVWRU5UX0VSUk9SOworfQorCitzdGF0aWMgZW51bSBldmVudF90eXBlCitwcm9jZXNzX3BhcmVuKHN0cnVjdCBldmVudCAqZXZlbnQsIHN0cnVjdCBwcmludF9hcmcgKmFyZywgY2hhciAqKnRvaykKK3sKKwlzdHJ1Y3QgcHJpbnRfYXJnICppdGVtX2FyZzsKKwllbnVtIGV2ZW50X3R5cGUgdHlwZTsKKwlpbnQgcHRyX2Nhc3QgPSAwOworCWNoYXIgKnRva2VuOworCisJdHlwZSA9IHByb2Nlc3NfYXJnKGV2ZW50LCBhcmcsICZ0b2tlbik7CisKKwlpZiAodHlwZSA9PSBFVkVOVF9FUlJPUikKKwkJcmV0dXJuIEVWRU5UX0VSUk9SOworCisJaWYgKHR5cGUgPT0gRVZFTlRfT1ApIHsKKwkJLyogaGFuZGxlIHRoZSBwdHIgY2FzdHMgKi8KKwkJaWYgKCFzdHJjbXAodG9rZW4sICIqIikpIHsKKwkJCS8qCisJCQkgKiBGSVhNRTogc2hvdWxkIHdlIHphcHAgd2hpdGVzcGFjZXMgYmVmb3JlICcpJyA/CisJCQkgKiAobWF5IHJlcXVpcmUgYSBwZWVrX3Rva2VuX2l0ZW0oKSkKKwkJCSAqLworCQkJaWYgKF9fcGVla19jaGFyKCkgPT0gJyknKSB7CisJCQkJcHRyX2Nhc3QgPSAxOworCQkJCWZyZWVfdG9rZW4odG9rZW4pOworCQkJCXR5cGUgPSByZWFkX3Rva2VuX2l0ZW0oJnRva2VuKTsKKwkJCX0KKwkJfQorCQlpZiAoIXB0cl9jYXN0KSB7CisJCQl0eXBlID0gcHJvY2Vzc19vcChldmVudCwgYXJnLCAmdG9rZW4pOworCisJCQlpZiAodHlwZSA9PSBFVkVOVF9FUlJPUikKKwkJCQlyZXR1cm4gRVZFTlRfRVJST1I7CisJCX0KKwl9CisKKwlpZiAodGVzdF90eXBlX3Rva2VuKHR5cGUsIHRva2VuLCBFVkVOVF9ERUxJTSwgKGNoYXIgKikiKSIpKSB7CisJCWZyZWVfdG9rZW4odG9rZW4pOworCQlyZXR1cm4gRVZFTlRfRVJST1I7CisJfQorCisJZnJlZV90b2tlbih0b2tlbik7CisJdHlwZSA9IHJlYWRfdG9rZW5faXRlbSgmdG9rZW4pOworCisJLyoKKwkgKiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhbiBpdGVtIG9yIGFub3RoZXIgb3BlbiBwYXJlbiwgdGhlbgorCSAqIHRoaXMgd2FzIGEgdHlwZWNhc3QuCisJICovCisJaWYgKGV2ZW50X2l0ZW1fdHlwZSh0eXBlKSB8fAorCSAgICAodHlwZSA9PSBFVkVOVF9ERUxJTSAmJiBzdHJjbXAodG9rZW4sICIoIikgPT0gMCkpIHsKKworCQkvKiBtYWtlIHRoaXMgYSB0eXBlY2FzdCBhbmQgY29udGluZSAqLworCisJCS8qIHByZXZvdXMgbXVzdCBiZSBhbiBhdG9tICovCisJCWlmIChhcmctPnR5cGUgIT0gUFJJTlRfQVRPTSkKKwkJCWRpZSgicHJldmlvdXMgbmVlZGVkIHRvIGJlIFBSSU5UX0FUT00iKTsKKworCQlpdGVtX2FyZyA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCppdGVtX2FyZykpOworCisJCWFyZy0+dHlwZSA9IFBSSU5UX1RZUEU7CisJCWlmIChwdHJfY2FzdCkgeworCQkJY2hhciAqb2xkID0gYXJnLT5hdG9tLmF0b207CisKKwkJCWFyZy0+YXRvbS5hdG9tID0gbWFsbG9jX29yX2RpZShzdHJsZW4ob2xkICsgMykpOworCQkJc3ByaW50ZihhcmctPmF0b20uYXRvbSwgIiVzICoiLCBvbGQpOworCQkJZnJlZShvbGQpOworCQl9CisJCWFyZy0+dHlwZWNhc3QudHlwZSA9IGFyZy0+YXRvbS5hdG9tOworCQlhcmctPnR5cGVjYXN0Lml0ZW0gPSBpdGVtX2FyZzsKKwkJdHlwZSA9IHByb2Nlc3NfYXJnX3Rva2VuKGV2ZW50LCBpdGVtX2FyZywgJnRva2VuLCB0eXBlKTsKKworCX0KKworCSp0b2sgPSB0b2tlbjsKKwlyZXR1cm4gdHlwZTsKK30KKworCitzdGF0aWMgZW51bSBldmVudF90eXBlCitwcm9jZXNzX3N0cihzdHJ1Y3QgZXZlbnQgKmV2ZW50IF9fdW51c2VkLCBzdHJ1Y3QgcHJpbnRfYXJnICphcmcsIGNoYXIgKip0b2spCit7CisJZW51bSBldmVudF90eXBlIHR5cGU7CisJY2hhciAqdG9rZW47CisKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9ERUxJTSwgKGNoYXIgKikiKCIpIDwgMCkKKwkJcmV0dXJuIEVWRU5UX0VSUk9SOworCisJaWYgKHJlYWRfZXhwZWN0X3R5cGUoRVZFTlRfSVRFTSwgJnRva2VuKSA8IDApCisJCWdvdG8gZmFpbDsKKworCWFyZy0+dHlwZSA9IFBSSU5UX1NUUklORzsKKwlhcmctPnN0cmluZy5zdHJpbmcgPSB0b2tlbjsKKwlhcmctPnN0cmluZy5vZmZzZXQgPSAtMTsKKworCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0RFTElNLCAoY2hhciAqKSIpIikgPCAwKQorCQlyZXR1cm4gRVZFTlRfRVJST1I7CisKKwl0eXBlID0gcmVhZF90b2tlbigmdG9rZW4pOworCSp0b2sgPSB0b2tlbjsKKworCXJldHVybiB0eXBlOworZmFpbDoKKwlmcmVlX3Rva2VuKHRva2VuKTsKKwlyZXR1cm4gRVZFTlRfRVJST1I7Cit9CisKK2VudW0gZXZlbnRfdHlwZQorcHJvY2Vzc19hcmdfdG9rZW4oc3RydWN0IGV2ZW50ICpldmVudCwgc3RydWN0IHByaW50X2FyZyAqYXJnLAorCQkgIGNoYXIgKip0b2ssIGVudW0gZXZlbnRfdHlwZSB0eXBlKQoreworCWNoYXIgKnRva2VuOworCWNoYXIgKmF0b207CisKKwl0b2tlbiA9ICp0b2s7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEVWRU5UX0lURU06CisJCWlmIChzdHJjbXAodG9rZW4sICJSRUMiKSA9PSAwKSB7CisJCQlmcmVlX3Rva2VuKHRva2VuKTsKKwkJCXR5cGUgPSBwcm9jZXNzX2VudHJ5KGV2ZW50LCBhcmcsICZ0b2tlbik7CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAiX19wcmludF9mbGFncyIpID09IDApIHsKKwkJCWZyZWVfdG9rZW4odG9rZW4pOworCQkJdHlwZSA9IHByb2Nlc3NfZmxhZ3MoZXZlbnQsIGFyZywgJnRva2VuKTsKKwkJfSBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJfX3ByaW50X3N5bWJvbGljIikgPT0gMCkgeworCQkJZnJlZV90b2tlbih0b2tlbik7CisJCQl0eXBlID0gcHJvY2Vzc19zeW1ib2xzKGV2ZW50LCBhcmcsICZ0b2tlbik7CisJCX0gZWxzZSBpZiAoc3RyY21wKHRva2VuLCAiX19nZXRfc3RyIikgPT0gMCkgeworCQkJZnJlZV90b2tlbih0b2tlbik7CisJCQl0eXBlID0gcHJvY2Vzc19zdHIoZXZlbnQsIGFyZywgJnRva2VuKTsKKwkJfSBlbHNlIHsKKwkJCWF0b20gPSB0b2tlbjsKKwkJCS8qIHRlc3QgdGhlIG5leHQgdG9rZW4gKi8KKwkJCXR5cGUgPSByZWFkX3Rva2VuX2l0ZW0oJnRva2VuKTsKKworCQkJLyogYXRvbXMgY2FuIGJlIG1vcmUgdGhhbiBvbmUgdG9rZW4gbG9uZyAqLworCQkJd2hpbGUgKHR5cGUgPT0gRVZFTlRfSVRFTSkgeworCQkJCWF0b20gPSByZWFsbG9jKGF0b20sIHN0cmxlbihhdG9tKSArIHN0cmxlbih0b2tlbikgKyAyKTsKKwkJCQlzdHJjYXQoYXRvbSwgIiAiKTsKKwkJCQlzdHJjYXQoYXRvbSwgdG9rZW4pOworCQkJCWZyZWVfdG9rZW4odG9rZW4pOworCQkJCXR5cGUgPSByZWFkX3Rva2VuX2l0ZW0oJnRva2VuKTsKKwkJCX0KKworCQkJLyogdG9kbywgdGVzdCBmb3IgZnVuY3Rpb24gKi8KKworCQkJYXJnLT50eXBlID0gUFJJTlRfQVRPTTsKKwkJCWFyZy0+YXRvbS5hdG9tID0gYXRvbTsKKwkJfQorCQlicmVhazsKKwljYXNlIEVWRU5UX0RRVU9URToKKwljYXNlIEVWRU5UX1NRVU9URToKKwkJYXJnLT50eXBlID0gUFJJTlRfQVRPTTsKKwkJYXJnLT5hdG9tLmF0b20gPSB0b2tlbjsKKwkJdHlwZSA9IHJlYWRfdG9rZW5faXRlbSgmdG9rZW4pOworCQlicmVhazsKKwljYXNlIEVWRU5UX0RFTElNOgorCQlpZiAoc3RyY21wKHRva2VuLCAiKCIpID09IDApIHsKKwkJCWZyZWVfdG9rZW4odG9rZW4pOworCQkJdHlwZSA9IHByb2Nlc3NfcGFyZW4oZXZlbnQsIGFyZywgJnRva2VuKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBFVkVOVF9PUDoKKwkJLyogaGFuZGxlIHNpbmdsZSBvcHMgKi8KKwkJYXJnLT50eXBlID0gUFJJTlRfT1A7CisJCWFyZy0+b3Aub3AgPSB0b2tlbjsKKwkJYXJnLT5vcC5sZWZ0ID0gTlVMTDsKKwkJdHlwZSA9IHByb2Nlc3Nfb3AoZXZlbnQsIGFyZywgJnRva2VuKTsKKworCQlicmVhazsKKworCWNhc2UgRVZFTlRfRVJST1IgLi4uIEVWRU5UX05FV0xJTkU6CisJZGVmYXVsdDoKKwkJZGllKCJ1bmV4cGVjdGVkIHR5cGUgJWQiLCB0eXBlKTsKKwl9CisJKnRvayA9IHRva2VuOworCisJcmV0dXJuIHR5cGU7Cit9CisKK3N0YXRpYyBpbnQgZXZlbnRfcmVhZF9wcmludF9hcmdzKHN0cnVjdCBldmVudCAqZXZlbnQsIHN0cnVjdCBwcmludF9hcmcgKipsaXN0KQoreworCWVudW0gZXZlbnRfdHlwZSB0eXBlOworCXN0cnVjdCBwcmludF9hcmcgKmFyZzsKKwljaGFyICp0b2tlbjsKKwlpbnQgYXJncyA9IDA7CisKKwlkbyB7CisJCWFyZyA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCphcmcpKTsKKwkJbWVtc2V0KGFyZywgMCwgc2l6ZW9mKCphcmcpKTsKKworCQl0eXBlID0gcHJvY2Vzc19hcmcoZXZlbnQsIGFyZywgJnRva2VuKTsKKworCQlpZiAodHlwZSA9PSBFVkVOVF9FUlJPUikgeworCQkJZnJlZV9hcmcoYXJnKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCSpsaXN0ID0gYXJnOworCQlhcmdzKys7CisKKwkJaWYgKHR5cGUgPT0gRVZFTlRfT1ApIHsKKwkJCXR5cGUgPSBwcm9jZXNzX29wKGV2ZW50LCBhcmcsICZ0b2tlbik7CisJCQlsaXN0ID0gJmFyZy0+bmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHR5cGUgPT0gRVZFTlRfREVMSU0gJiYgc3RyY21wKHRva2VuLCAiLCIpID09IDApIHsKKwkJCWZyZWVfdG9rZW4odG9rZW4pOworCQkJKmxpc3QgPSBhcmc7CisJCQlsaXN0ID0gJmFyZy0+bmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0gd2hpbGUgKHR5cGUgIT0gRVZFTlRfTk9ORSk7CisKKwlpZiAodHlwZSAhPSBFVkVOVF9OT05FKQorCQlmcmVlX3Rva2VuKHRva2VuKTsKKworCXJldHVybiBhcmdzOworfQorCitzdGF0aWMgaW50IGV2ZW50X3JlYWRfcHJpbnQoc3RydWN0IGV2ZW50ICpldmVudCkKK3sKKwllbnVtIGV2ZW50X3R5cGUgdHlwZTsKKwljaGFyICp0b2tlbjsKKwlpbnQgcmV0OworCisJaWYgKHJlYWRfZXhwZWN0ZWRfaXRlbShFVkVOVF9JVEVNLCAoY2hhciAqKSJwcmludCIpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfSVRFTSwgKGNoYXIgKikiZm10IikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgKGNoYXIgKikiOiIpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlYWRfZXhwZWN0X3R5cGUoRVZFTlRfRFFVT1RFLCAmdG9rZW4pIDwgMCkKKwkJZ290byBmYWlsOworCisJZXZlbnQtPnByaW50X2ZtdC5mb3JtYXQgPSB0b2tlbjsKKwlldmVudC0+cHJpbnRfZm10LmFyZ3MgPSBOVUxMOworCisJLyogb2sgdG8gaGF2ZSBubyBhcmcgKi8KKwl0eXBlID0gcmVhZF90b2tlbl9pdGVtKCZ0b2tlbik7CisKKwlpZiAodHlwZSA9PSBFVkVOVF9OT05FKQorCQlyZXR1cm4gMDsKKworCWlmICh0ZXN0X3R5cGVfdG9rZW4odHlwZSwgdG9rZW4sIEVWRU5UX0RFTElNLCAoY2hhciAqKSIsIikpCisJCWdvdG8gZmFpbDsKKworCWZyZWVfdG9rZW4odG9rZW4pOworCisJcmV0ID0gZXZlbnRfcmVhZF9wcmludF9hcmdzKGV2ZW50LCAmZXZlbnQtPnByaW50X2ZtdC5hcmdzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7CisKKyBmYWlsOgorCWZyZWVfdG9rZW4odG9rZW4pOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBmb3JtYXRfZmllbGQgKgorZmluZF9jb21tb25fZmllbGQoc3RydWN0IGV2ZW50ICpldmVudCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmb3JtYXQ7CisKKwlmb3IgKGZvcm1hdCA9IGV2ZW50LT5mb3JtYXQuY29tbW9uX2ZpZWxkczsKKwkgICAgIGZvcm1hdDsgZm9ybWF0ID0gZm9ybWF0LT5uZXh0KSB7CisJCWlmIChzdHJjbXAoZm9ybWF0LT5uYW1lLCBuYW1lKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGZvcm1hdDsKK30KKworc3RhdGljIHN0cnVjdCBmb3JtYXRfZmllbGQgKgorZmluZF9maWVsZChzdHJ1Y3QgZXZlbnQgKmV2ZW50LCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBmb3JtYXRfZmllbGQgKmZvcm1hdDsKKworCWZvciAoZm9ybWF0ID0gZXZlbnQtPmZvcm1hdC5maWVsZHM7CisJICAgICBmb3JtYXQ7IGZvcm1hdCA9IGZvcm1hdC0+bmV4dCkgeworCQlpZiAoc3RyY21wKGZvcm1hdC0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBmb3JtYXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZm9ybWF0X2ZpZWxkICoKK2ZpbmRfYW55X2ZpZWxkKHN0cnVjdCBldmVudCAqZXZlbnQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGZvcm1hdF9maWVsZCAqZm9ybWF0OworCisJZm9ybWF0ID0gZmluZF9jb21tb25fZmllbGQoZXZlbnQsIG5hbWUpOworCWlmIChmb3JtYXQpCisJCXJldHVybiBmb3JtYXQ7CisJcmV0dXJuIGZpbmRfZmllbGQoZXZlbnQsIG5hbWUpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJlYWRfc2l6ZSh2b2lkICpwdHIsIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJcmV0dXJuICoodW5zaWduZWQgY2hhciAqKXB0cjsKKwljYXNlIDI6CisJCXJldHVybiBkYXRhMmhvc3QyKHB0cik7CisJY2FzZSA0OgorCQlyZXR1cm4gZGF0YTJob3N0NChwdHIpOworCWNhc2UgODoKKwkJcmV0dXJuIGRhdGEyaG9zdDgocHRyKTsKKwlkZWZhdWx0OgorCQkvKiBCVUchICovCisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBnZXRfY29tbW9uX2luZm8oY29uc3QgY2hhciAqdHlwZSwgaW50ICpvZmZzZXQsIGludCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCXN0cnVjdCBmb3JtYXRfZmllbGQgKmZpZWxkOworCisJLyoKKwkgKiBBbGwgZXZlbnRzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGNvbW1vbiBlbGVtZW50cy4KKwkgKiBQaWNrIGFueSBldmVudCB0byBmaW5kIHdoZXJlIHRoZSB0eXBlIGlzOworCSAqLworCWlmICghZXZlbnRfbGlzdCkKKwkJZGllKCJubyBldmVudF9saXN0ISIpOworCisJZXZlbnQgPSBldmVudF9saXN0OworCWZpZWxkID0gZmluZF9jb21tb25fZmllbGQoZXZlbnQsIHR5cGUpOworCWlmICghZmllbGQpCisJCWRpZSgiZmllbGQgJyVzJyBub3QgZm91bmQiLCB0eXBlKTsKKworCSpvZmZzZXQgPSBmaWVsZC0+b2Zmc2V0OworCSpzaXplID0gZmllbGQtPnNpemU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9jb21tb25fdHlwZSh2b2lkICpkYXRhKQoreworCXN0YXRpYyBpbnQgdHlwZV9vZmZzZXQ7CisJc3RhdGljIGludCB0eXBlX3NpemU7CisJaW50IHJldDsKKworCWlmICghdHlwZV9zaXplKSB7CisJCXJldCA9IGdldF9jb21tb25faW5mbygiY29tbW9uX3R5cGUiLAorCQkJCSAgICAgICZ0eXBlX29mZnNldCwKKwkJCQkgICAgICAmdHlwZV9zaXplKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gcmVhZF9zaXplKGRhdGEgKyB0eXBlX29mZnNldCwgdHlwZV9zaXplKTsKK30KKworc3RhdGljIGludCBwYXJzZV9jb21tb25fcGlkKHZvaWQgKmRhdGEpCit7CisJc3RhdGljIGludCBwaWRfb2Zmc2V0OworCXN0YXRpYyBpbnQgcGlkX3NpemU7CisJaW50IHJldDsKKworCWlmICghcGlkX3NpemUpIHsKKwkJcmV0ID0gZ2V0X2NvbW1vbl9pbmZvKCJjb21tb25fcGlkIiwKKwkJCQkgICAgICAmcGlkX29mZnNldCwKKwkJCQkgICAgICAmcGlkX3NpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJlYWRfc2l6ZShkYXRhICsgcGlkX29mZnNldCwgcGlkX3NpemUpOworfQorCitzdGF0aWMgc3RydWN0IGV2ZW50ICpmaW5kX2V2ZW50KGludCBpZCkKK3sKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCisJZm9yIChldmVudCA9IGV2ZW50X2xpc3Q7IGV2ZW50OyBldmVudCA9IGV2ZW50LT5uZXh0KSB7CisJCWlmIChldmVudC0+aWQgPT0gaWQpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGV2ZW50OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGV2YWxfbnVtX2FyZyh2b2lkICpkYXRhLCBpbnQgc2l6ZSwKKwkJCQkgICBzdHJ1Y3QgZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgcHJpbnRfYXJnICphcmcpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBsb25nIGxlZnQsIHJpZ2h0OworCisJc3dpdGNoIChhcmctPnR5cGUpIHsKKwljYXNlIFBSSU5UX05VTEw6CisJCS8qID8/ICovCisJCXJldHVybiAwOworCWNhc2UgUFJJTlRfQVRPTToKKwkJcmV0dXJuIHN0cnRvdWxsKGFyZy0+YXRvbS5hdG9tLCBOVUxMLCAwKTsKKwljYXNlIFBSSU5UX0ZJRUxEOgorCQlpZiAoIWFyZy0+ZmllbGQuZmllbGQpIHsKKwkJCWFyZy0+ZmllbGQuZmllbGQgPSBmaW5kX2FueV9maWVsZChldmVudCwgYXJnLT5maWVsZC5uYW1lKTsKKwkJCWlmICghYXJnLT5maWVsZC5maWVsZCkKKwkJCQlkaWUoImZpZWxkICVzIG5vdCBmb3VuZCIsIGFyZy0+ZmllbGQubmFtZSk7CisJCX0KKwkJLyogbXVzdCBiZSBhIG51bWJlciAqLworCQl2YWwgPSByZWFkX3NpemUoZGF0YSArIGFyZy0+ZmllbGQuZmllbGQtPm9mZnNldCwKKwkJCQlhcmctPmZpZWxkLmZpZWxkLT5zaXplKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9GTEFHUzoKKwljYXNlIFBSSU5UX1NZTUJPTDoKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9UWVBFOgorCQlyZXR1cm4gZXZhbF9udW1fYXJnKGRhdGEsIHNpemUsIGV2ZW50LCBhcmctPnR5cGVjYXN0Lml0ZW0pOworCWNhc2UgUFJJTlRfU1RSSU5HOgorCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9PUDoKKwkJbGVmdCA9IGV2YWxfbnVtX2FyZyhkYXRhLCBzaXplLCBldmVudCwgYXJnLT5vcC5sZWZ0KTsKKwkJcmlnaHQgPSBldmFsX251bV9hcmcoZGF0YSwgc2l6ZSwgZXZlbnQsIGFyZy0+b3AucmlnaHQpOworCQlzd2l0Y2ggKGFyZy0+b3Aub3BbMF0pIHsKKwkJY2FzZSAnfCc6CisJCQlpZiAoYXJnLT5vcC5vcFsxXSkKKwkJCQl2YWwgPSBsZWZ0IHx8IHJpZ2h0OworCQkJZWxzZQorCQkJCXZhbCA9IGxlZnQgfCByaWdodDsKKwkJCWJyZWFrOworCQljYXNlICcmJzoKKwkJCWlmIChhcmctPm9wLm9wWzFdKQorCQkJCXZhbCA9IGxlZnQgJiYgcmlnaHQ7CisJCQllbHNlCisJCQkJdmFsID0gbGVmdCAmIHJpZ2h0OworCQkJYnJlYWs7CisJCWNhc2UgJzwnOgorCQkJc3dpdGNoIChhcmctPm9wLm9wWzFdKSB7CisJCQljYXNlIDA6CisJCQkJdmFsID0gbGVmdCA8IHJpZ2h0OworCQkJCWJyZWFrOworCQkJY2FzZSAnPCc6CisJCQkJdmFsID0gbGVmdCA8PCByaWdodDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJz0nOgorCQkJCXZhbCA9IGxlZnQgPD0gcmlnaHQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWRpZSgidW5rbm93biBvcCAnJXMnIiwgYXJnLT5vcC5vcCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnPic6CisJCQlzd2l0Y2ggKGFyZy0+b3Aub3BbMV0pIHsKKwkJCWNhc2UgMDoKKwkJCQl2YWwgPSBsZWZ0ID4gcmlnaHQ7CisJCQkJYnJlYWs7CisJCQljYXNlICc+JzoKKwkJCQl2YWwgPSBsZWZ0ID4+IHJpZ2h0OworCQkJCWJyZWFrOworCQkJY2FzZSAnPSc6CisJCQkJdmFsID0gbGVmdCA+PSByaWdodDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZGllKCJ1bmtub3duIG9wICclcyciLCBhcmctPm9wLm9wKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICc9JzoKKwkJCWlmIChhcmctPm9wLm9wWzFdICE9ICc9JykKKwkJCQlkaWUoInVua25vd24gb3AgJyVzJyIsIGFyZy0+b3Aub3ApOworCQkJdmFsID0gbGVmdCA9PSByaWdodDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGllKCJ1bmtub3duIG9wICclcyciLCBhcmctPm9wLm9wKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OiAvKiBub3Qgc3VyZSB3aGF0IHRvIGRvIHRoZXJlICovCisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gdmFsOworfQorCitzdHJ1Y3QgZmxhZyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZsYWcgZmxhZ3NbXSA9IHsKKwl7ICJISV9TT0ZUSVJRIiwgMCB9LAorCXsgIlRJTUVSX1NPRlRJUlEiLCAxIH0sCisJeyAiTkVUX1RYX1NPRlRJUlEiLCAyIH0sCisJeyAiTkVUX1JYX1NPRlRJUlEiLCAzIH0sCisJeyAiQkxPQ0tfU09GVElSUSIsIDQgfSwKKwl7ICJUQVNLTEVUX1NPRlRJUlEiLCA1IH0sCisJeyAiU0NIRURfU09GVElSUSIsIDYgfSwKKwl7ICJIUlRJTUVSX1NPRlRJUlEiLCA3IH0sCisJeyAiUkNVX1NPRlRJUlEiLCA4IH0sCisKKwl7ICJIUlRJTUVSX05PUkVTVEFSVCIsIDAgfSwKKwl7ICJIUlRJTUVSX1JFU1RBUlQiLCAxIH0sCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGV2YWxfZmxhZyhjb25zdCBjaGFyICpmbGFnKQoreworCWludCBpOworCisJLyoKKwkgKiBTb21lIGZsYWdzIGluIHRoZSBmb3JtYXQgZmlsZXMgZG8gbm90IGdldCBjb252ZXJ0ZWQuCisJICogSWYgdGhlIGZsYWcgaXMgbm90IG51bWVyaWMsIHNlZSBpZiBpdCBpcyBzb21ldGhpbmcgdGhhdAorCSAqIHdlIGFscmVhZHkga25vdyBhYm91dC4KKwkgKi8KKwlpZiAoaXNkaWdpdChmbGFnWzBdKSkKKwkJcmV0dXJuIHN0cnRvdWxsKGZsYWcsIE5VTEwsIDApOworCisJZm9yIChpID0gMDsgaSA8IChpbnQpKHNpemVvZihmbGFncykvc2l6ZW9mKGZsYWdzWzBdKSk7IGkrKykKKwkJaWYgKHN0cmNtcChmbGFnc1tpXS5uYW1lLCBmbGFnKSA9PSAwKQorCQkJcmV0dXJuIGZsYWdzW2ldLnZhbHVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3N0cl9hcmcodm9pZCAqZGF0YSwgaW50IHNpemUsCisJCQkgIHN0cnVjdCBldmVudCAqZXZlbnQsIHN0cnVjdCBwcmludF9hcmcgKmFyZykKK3sKKwlzdHJ1Y3QgcHJpbnRfZmxhZ19zeW0gKmZsYWc7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbCwgZnZhbDsKKwljaGFyICpzdHI7CisJaW50IHByaW50OworCisJc3dpdGNoIChhcmctPnR5cGUpIHsKKwljYXNlIFBSSU5UX05VTEw6CisJCS8qID8/ICovCisJCXJldHVybjsKKwljYXNlIFBSSU5UX0FUT006CisJCXByaW50ZigiJXMiLCBhcmctPmF0b20uYXRvbSk7CisJCXJldHVybjsKKwljYXNlIFBSSU5UX0ZJRUxEOgorCQlpZiAoIWFyZy0+ZmllbGQuZmllbGQpIHsKKwkJCWFyZy0+ZmllbGQuZmllbGQgPSBmaW5kX2FueV9maWVsZChldmVudCwgYXJnLT5maWVsZC5uYW1lKTsKKwkJCWlmICghYXJnLT5maWVsZC5maWVsZCkKKwkJCQlkaWUoImZpZWxkICVzIG5vdCBmb3VuZCIsIGFyZy0+ZmllbGQubmFtZSk7CisJCX0KKwkJc3RyID0gbWFsbG9jX29yX2RpZShhcmctPmZpZWxkLmZpZWxkLT5zaXplICsgMSk7CisJCW1lbWNweShzdHIsIGRhdGEgKyBhcmctPmZpZWxkLmZpZWxkLT5vZmZzZXQsCisJCSAgICAgICBhcmctPmZpZWxkLmZpZWxkLT5zaXplKTsKKwkJc3RyW2FyZy0+ZmllbGQuZmllbGQtPnNpemVdID0gMDsKKwkJcHJpbnRmKCIlcyIsIHN0cik7CisJCWZyZWUoc3RyKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9GTEFHUzoKKwkJdmFsID0gZXZhbF9udW1fYXJnKGRhdGEsIHNpemUsIGV2ZW50LCBhcmctPmZsYWdzLmZpZWxkKTsKKwkJcHJpbnQgPSAwOworCQlmb3IgKGZsYWcgPSBhcmctPmZsYWdzLmZsYWdzOyBmbGFnOyBmbGFnID0gZmxhZy0+bmV4dCkgeworCQkJZnZhbCA9IGV2YWxfZmxhZyhmbGFnLT52YWx1ZSk7CisJCQlpZiAoIXZhbCAmJiAhZnZhbCkgeworCQkJCXByaW50ZigiJXMiLCBmbGFnLT5zdHIpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGZ2YWwgJiYgKHZhbCAmIGZ2YWwpID09IGZ2YWwpIHsKKwkJCQlpZiAocHJpbnQgJiYgYXJnLT5mbGFncy5kZWxpbSkKKwkJCQkJcHJpbnRmKCIlcyIsIGFyZy0+ZmxhZ3MuZGVsaW0pOworCQkJCXByaW50ZigiJXMiLCBmbGFnLT5zdHIpOworCQkJCXByaW50ID0gMTsKKwkJCQl2YWwgJj0gfmZ2YWw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQUklOVF9TWU1CT0w6CisJCXZhbCA9IGV2YWxfbnVtX2FyZyhkYXRhLCBzaXplLCBldmVudCwgYXJnLT5zeW1ib2wuZmllbGQpOworCQlmb3IgKGZsYWcgPSBhcmctPnN5bWJvbC5zeW1ib2xzOyBmbGFnOyBmbGFnID0gZmxhZy0+bmV4dCkgeworCQkJZnZhbCA9IGV2YWxfZmxhZyhmbGFnLT52YWx1ZSk7CisJCQlpZiAodmFsID09IGZ2YWwpIHsKKwkJCQlwcmludGYoIiVzIiwgZmxhZy0+c3RyKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgUFJJTlRfVFlQRToKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9TVFJJTkc6IHsKKwkJaW50IHN0cl9vZmZzZXQ7CisKKwkJaWYgKGFyZy0+c3RyaW5nLm9mZnNldCA9PSAtMSkgeworCQkJc3RydWN0IGZvcm1hdF9maWVsZCAqZjsKKworCQkJZiA9IGZpbmRfYW55X2ZpZWxkKGV2ZW50LCBhcmctPnN0cmluZy5zdHJpbmcpOworCQkJYXJnLT5zdHJpbmcub2Zmc2V0ID0gZi0+b2Zmc2V0OworCQl9CisJCXN0cl9vZmZzZXQgPSAqKGludCAqKShkYXRhICsgYXJnLT5zdHJpbmcub2Zmc2V0KTsKKwkJc3RyX29mZnNldCAmPSAweGZmZmY7CisJCXByaW50ZigiJXMiLCAoKGNoYXIgKilkYXRhKSArIHN0cl9vZmZzZXQpOworCQlicmVhazsKKwl9CisJY2FzZSBQUklOVF9PUDoKKwkJLyoKKwkJICogVGhlIG9ubHkgb3AgZm9yIHN0cmluZyBzaG91bGQgYmUgPyA6CisJCSAqLworCQlpZiAoYXJnLT5vcC5vcFswXSAhPSAnPycpCisJCQlyZXR1cm47CisJCXZhbCA9IGV2YWxfbnVtX2FyZyhkYXRhLCBzaXplLCBldmVudCwgYXJnLT5vcC5sZWZ0KTsKKwkJaWYgKHZhbCkKKwkJCXByaW50X3N0cl9hcmcoZGF0YSwgc2l6ZSwgZXZlbnQsIGFyZy0+b3AucmlnaHQtPm9wLmxlZnQpOworCQllbHNlCisJCQlwcmludF9zdHJfYXJnKGRhdGEsIHNpemUsIGV2ZW50LCBhcmctPm9wLnJpZ2h0LT5vcC5yaWdodCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHdlbGwuLi4gKi8KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHByaW50X2FyZyAqbWFrZV9icHJpbnRfYXJncyhjaGFyICpmbXQsIHZvaWQgKmRhdGEsIGludCBzaXplLCBzdHJ1Y3QgZXZlbnQgKmV2ZW50KQoreworCXN0YXRpYyBzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmaWVsZCwgKmlwX2ZpZWxkOworCXN0cnVjdCBwcmludF9hcmcgKmFyZ3MsICphcmcsICoqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgaXAsIHZhbDsKKwljaGFyICpwdHI7CisJdm9pZCAqYnB0cjsKKworCWlmICghZmllbGQpIHsKKwkJZmllbGQgPSBmaW5kX2ZpZWxkKGV2ZW50LCAiYnVmIik7CisJCWlmICghZmllbGQpCisJCQlkaWUoImNhbid0IGZpbmQgYnVmZmVyIGZpZWxkIGZvciBiaW5hcnkgcHJpbnRrIik7CisJCWlwX2ZpZWxkID0gZmluZF9maWVsZChldmVudCwgImlwIik7CisJCWlmICghaXBfZmllbGQpCisJCQlkaWUoImNhbid0IGZpbmQgaXAgZmllbGQgZm9yIGJpbmFyeSBwcmludGsiKTsKKwl9CisKKwlpcCA9IHJlYWRfc2l6ZShkYXRhICsgaXBfZmllbGQtPm9mZnNldCwgaXBfZmllbGQtPnNpemUpOworCisJLyoKKwkgKiBUaGUgZmlyc3QgYXJnIGlzIHRoZSBJUCBwb2ludGVyLgorCSAqLworCWFyZ3MgPSBtYWxsb2Nfb3JfZGllKHNpemVvZigqYXJncykpOworCWFyZyA9IGFyZ3M7CisJYXJnLT5uZXh0ID0gTlVMTDsKKwluZXh0ID0gJmFyZy0+bmV4dDsKKworCWFyZy0+dHlwZSA9IFBSSU5UX0FUT007CisJYXJnLT5hdG9tLmF0b20gPSBtYWxsb2Nfb3JfZGllKDMyKTsKKwlzcHJpbnRmKGFyZy0+YXRvbS5hdG9tLCAiJWxsZCIsIGlwKTsKKworCS8qIHNraXAgdGhlIGZpcnN0ICIlcGYgOiAiICovCisJZm9yIChwdHIgPSBmbXQgKyA2LCBicHRyID0gZGF0YSArIGZpZWxkLT5vZmZzZXQ7CisJICAgICBicHRyIDwgZGF0YSArIHNpemUgJiYgKnB0cjsgcHRyKyspIHsKKwkJaW50IGxzID0gMDsKKworCQlpZiAoKnB0ciA9PSAnJScpIHsKKyBwcm9jZXNzX2FnYWluOgorCQkJcHRyKys7CisJCQlzd2l0Y2ggKCpwdHIpIHsKKwkJCWNhc2UgJyUnOgorCQkJCWJyZWFrOworCQkJY2FzZSAnbCc6CisJCQkJbHMrKzsKKwkJCQlnb3RvIHByb2Nlc3NfYWdhaW47CisJCQljYXNlICdMJzoKKwkJCQlscyA9IDI7CisJCQkJZ290byBwcm9jZXNzX2FnYWluOworCQkJY2FzZSAnMCcgLi4uICc5JzoKKwkJCQlnb3RvIHByb2Nlc3NfYWdhaW47CisJCQljYXNlICdwJzoKKwkJCQlscyA9IDE7CisJCQkJLyogZmFsbCB0aHJvdWdoICovCisJCQljYXNlICdkJzoKKwkJCWNhc2UgJ3UnOgorCQkJY2FzZSAneCc6CisJCQljYXNlICdpJzoKKwkJCQlicHRyID0gKHZvaWQgKikoKCh1bnNpZ25lZCBsb25nKWJwdHIgKyAobG9uZ19zaXplIC0gMSkpICYKKwkJCQkJCX4obG9uZ19zaXplIC0gMSkpOworCQkJCXN3aXRjaCAobHMpIHsKKwkJCQljYXNlIDA6CisJCQkJY2FzZSAxOgorCQkJCQlscyA9IGxvbmdfc2l6ZTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOgorCQkJCQlscyA9IDg7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXZhbCA9IHJlYWRfc2l6ZShicHRyLCBscyk7CisJCQkJYnB0ciArPSBsczsKKwkJCQlhcmcgPSBtYWxsb2Nfb3JfZGllKHNpemVvZigqYXJnKSk7CisJCQkJYXJnLT5uZXh0ID0gTlVMTDsKKwkJCQlhcmctPnR5cGUgPSBQUklOVF9BVE9NOworCQkJCWFyZy0+YXRvbS5hdG9tID0gbWFsbG9jX29yX2RpZSgzMik7CisJCQkJc3ByaW50ZihhcmctPmF0b20uYXRvbSwgIiVsbGQiLCB2YWwpOworCQkJCSpuZXh0ID0gYXJnOworCQkJCW5leHQgPSAmYXJnLT5uZXh0OworCQkJCWJyZWFrOworCQkJY2FzZSAncyc6CisJCQkJYXJnID0gbWFsbG9jX29yX2RpZShzaXplb2YoKmFyZykpOworCQkJCWFyZy0+bmV4dCA9IE5VTEw7CisJCQkJYXJnLT50eXBlID0gUFJJTlRfU1RSSU5HOworCQkJCWFyZy0+c3RyaW5nLnN0cmluZyA9IHN0cmR1cChicHRyKTsKKwkJCQlicHRyICs9IHN0cmxlbihicHRyKSArIDE7CisJCQkJKm5leHQgPSBhcmc7CisJCQkJbmV4dCA9ICZhcmctPm5leHQ7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGFyZ3M7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfYXJncyhzdHJ1Y3QgcHJpbnRfYXJnICphcmdzKQoreworCXN0cnVjdCBwcmludF9hcmcgKm5leHQ7CisKKwl3aGlsZSAoYXJncykgeworCQluZXh0ID0gYXJncy0+bmV4dDsKKworCQlpZiAoYXJncy0+dHlwZSA9PSBQUklOVF9BVE9NKQorCQkJZnJlZShhcmdzLT5hdG9tLmF0b20pOworCQllbHNlCisJCQlmcmVlKGFyZ3MtPnN0cmluZy5zdHJpbmcpOworCQlmcmVlKGFyZ3MpOworCQlhcmdzID0gbmV4dDsKKwl9Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfYnByaW50X2Zvcm1hdCh2b2lkICpkYXRhLCBpbnQgc2l6ZSBfX3VudXNlZCwgc3RydWN0IGV2ZW50ICpldmVudCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcjsKKwlzdGF0aWMgc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7CisJc3RydWN0IHByaW50a19tYXAgKnByaW50azsKKwljaGFyICpmb3JtYXQ7CisJY2hhciAqcDsKKworCWlmICghZmllbGQpIHsKKwkJZmllbGQgPSBmaW5kX2ZpZWxkKGV2ZW50LCAiZm10Iik7CisJCWlmICghZmllbGQpCisJCQlkaWUoImNhbid0IGZpbmQgZm9ybWF0IGZpZWxkIGZvciBiaW5hcnkgcHJpbnRrIik7CisJCXByaW50ZigiZmllbGQtPm9mZnNldCA9ICVkIHNpemU9JWRcbiIsIGZpZWxkLT5vZmZzZXQsIGZpZWxkLT5zaXplKTsKKwl9CisKKwlhZGRyID0gcmVhZF9zaXplKGRhdGEgKyBmaWVsZC0+b2Zmc2V0LCBmaWVsZC0+c2l6ZSk7CisKKwlwcmludGsgPSBmaW5kX3ByaW50ayhhZGRyKTsKKwlpZiAoIXByaW50aykgeworCQlmb3JtYXQgPSBtYWxsb2Nfb3JfZGllKDQ1KTsKKwkJc3ByaW50Zihmb3JtYXQsICIlJXBmIDogKE5PIEZPUk1BVCBGT1VORCBhdCAlbGx4KVxuIiwKKwkJCWFkZHIpOworCQlyZXR1cm4gZm9ybWF0OworCX0KKworCXAgPSBwcmludGstPnByaW50azsKKwkvKiBSZW1vdmUgYW55IHF1b3Rlcy4gKi8KKwlpZiAoKnAgPT0gJyInKQorCQlwKys7CisJZm9ybWF0ID0gbWFsbG9jX29yX2RpZShzdHJsZW4ocCkgKyAxMCk7CisJc3ByaW50Zihmb3JtYXQsICIlcyA6ICVzIiwgIiVwZiIsIHApOworCS8qIHJlbW92ZSBlbmRpbmcgcXVvdGVzIGFuZCBuZXcgbGluZSBzaW5jZSB3ZSB3aWxsIGFkZCBvbmUgdG9vICovCisJcCA9IGZvcm1hdCArIHN0cmxlbihmb3JtYXQpIC0gMTsKKwlpZiAoKnAgPT0gJyInKQorCQkqcCA9IDA7CisKKwlwIC09IDI7CisJaWYgKHN0cmNtcChwLCAiXFxuIikgPT0gMCkKKwkJKnAgPSAwOworCisJcmV0dXJuIGZvcm1hdDsKK30KKworc3RhdGljIHZvaWQgcHJldHR5X3ByaW50KHZvaWQgKmRhdGEsIGludCBzaXplLCBzdHJ1Y3QgZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwcmludF9mbXQgKnByaW50X2ZtdCA9ICZldmVudC0+cHJpbnRfZm10OworCXN0cnVjdCBwcmludF9hcmcgKmFyZyA9IHByaW50X2ZtdC0+YXJnczsKKwlzdHJ1Y3QgcHJpbnRfYXJnICphcmdzID0gTlVMTDsKKwljb25zdCBjaGFyICpwdHIgPSBwcmludF9mbXQtPmZvcm1hdDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCXN0cnVjdCBmdW5jX21hcCAqZnVuYzsKKwljb25zdCBjaGFyICpzYXZlcHRyOworCWNoYXIgKmJwcmludF9mbXQgPSBOVUxMOworCWNoYXIgZm9ybWF0WzMyXTsKKwlpbnQgc2hvd19mdW5jOworCWludCBsZW47CisJaW50IGxzOworCisJaWYgKGV2ZW50LT5mbGFncyAmIEVWRU5UX0ZMX0lTRlVOQykKKwkJcHRyID0gIiAlcEYgPC0tICVwRiI7CisKKwlpZiAoZXZlbnQtPmZsYWdzICYgRVZFTlRfRkxfSVNCUFJJTlQpIHsKKwkJYnByaW50X2ZtdCA9IGdldF9icHJpbnRfZm9ybWF0KGRhdGEsIHNpemUsIGV2ZW50KTsKKwkJYXJncyA9IG1ha2VfYnByaW50X2FyZ3MoYnByaW50X2ZtdCwgZGF0YSwgc2l6ZSwgZXZlbnQpOworCQlhcmcgPSBhcmdzOworCQlwdHIgPSBicHJpbnRfZm10OworCX0KKworCWZvciAoOyAqcHRyOyBwdHIrKykgeworCQlscyA9IDA7CisJCWlmICgqcHRyID09ICclJykgeworCQkJc2F2ZXB0ciA9IHB0cjsKKwkJCXNob3dfZnVuYyA9IDA7CisgY29udF9wcm9jZXNzOgorCQkJcHRyKys7CisJCQlzd2l0Y2ggKCpwdHIpIHsKKwkJCWNhc2UgJyUnOgorCQkJCXByaW50ZigiJSUiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2wnOgorCQkJCWxzKys7CisJCQkJZ290byBjb250X3Byb2Nlc3M7CisJCQljYXNlICdMJzoKKwkJCQlscyA9IDI7CisJCQkJZ290byBjb250X3Byb2Nlc3M7CisJCQljYXNlICd6JzoKKwkJCWNhc2UgJ1onOgorCQkJY2FzZSAnMCcgLi4uICc5JzoKKwkJCQlnb3RvIGNvbnRfcHJvY2VzczsKKwkJCWNhc2UgJ3AnOgorCQkJCWlmIChsb25nX3NpemUgPT0gNCkKKwkJCQkJbHMgPSAxOworCQkJCWVsc2UKKwkJCQkJbHMgPSAyOworCisJCQkJaWYgKCoocHRyKzEpID09ICdGJyB8fAorCQkJCSAgICAqKHB0cisxKSA9PSAnZicpIHsKKwkJCQkJcHRyKys7CisJCQkJCXNob3dfZnVuYyA9ICpwdHI7CisJCQkJfQorCisJCQkJLyogZmFsbCB0aHJvdWdoICovCisJCQljYXNlICdkJzoKKwkJCWNhc2UgJ2knOgorCQkJY2FzZSAneCc6CisJCQljYXNlICdYJzoKKwkJCWNhc2UgJ3UnOgorCQkJCWlmICghYXJnKQorCQkJCQlkaWUoIm5vIGFyZ3VtZW50IG1hdGNoIik7CisKKwkJCQlsZW4gPSAoKHVuc2lnbmVkIGxvbmcpcHRyICsgMSkgLQorCQkJCQkodW5zaWduZWQgbG9uZylzYXZlcHRyOworCisJCQkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQkJCWlmIChsZW4gPiAzMikKKwkJCQkJZGllKCJiYWQgZm9ybWF0ISIpOworCisJCQkJbWVtY3B5KGZvcm1hdCwgc2F2ZXB0ciwgbGVuKTsKKwkJCQlmb3JtYXRbbGVuXSA9IDA7CisKKwkJCQl2YWwgPSBldmFsX251bV9hcmcoZGF0YSwgc2l6ZSwgZXZlbnQsIGFyZyk7CisJCQkJYXJnID0gYXJnLT5uZXh0OworCisJCQkJaWYgKHNob3dfZnVuYykgeworCQkJCQlmdW5jID0gZmluZF9mdW5jKHZhbCk7CisJCQkJCWlmIChmdW5jKSB7CisJCQkJCQlwcmludGYoIiVzIiwgZnVuYy0+ZnVuYyk7CisJCQkJCQlpZiAoc2hvd19mdW5jID09ICdGJykKKwkJCQkJCQlwcmludGYoIisweCVsbHgiLAorCQkJCQkJCSAgICAgICB2YWwgLSBmdW5jLT5hZGRyKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCXN3aXRjaCAobHMpIHsKKwkJCQljYXNlIDA6CisJCQkJCXByaW50Zihmb3JtYXQsIChpbnQpdmFsKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxOgorCQkJCQlwcmludGYoZm9ybWF0LCAobG9uZyl2YWwpOworCQkJCQlicmVhazsKKwkJCQljYXNlIDI6CisJCQkJCXByaW50Zihmb3JtYXQsIChsb25nIGxvbmcpdmFsKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZGllKCJiYWQgY291bnQgKCVkKSIsIGxzKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlICdzJzoKKwkJCQlpZiAoIWFyZykKKwkJCQkJZGllKCJubyBtYXRjaGluZyBhcmd1bWVudCIpOworCisJCQkJcHJpbnRfc3RyX2FyZyhkYXRhLCBzaXplLCBldmVudCwgYXJnKTsKKwkJCQlhcmcgPSBhcmctPm5leHQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaW50ZigiPiVjPCIsICpwdHIpOworCisJCQl9CisJCX0gZWxzZQorCQkJcHJpbnRmKCIlYyIsICpwdHIpOworCX0KKworCWlmIChhcmdzKSB7CisJCWZyZWVfYXJncyhhcmdzKTsKKwkJZnJlZShicHJpbnRfZm10KTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvZzEwX2NwdShpbnQgbmIpCit7CisJaWYgKG5iIC8gMTAwKQorCQlyZXR1cm4gMzsKKwlpZiAobmIgLyAxMCkKKwkJcmV0dXJuIDI7CisJcmV0dXJuIDE7Cit9CisKKy8qIHRha2VuIGZyb20gTGludXgsIHdyaXR0ZW4gYnkgRnJlZGVyaWMgV2Vpc2JlY2tlciAqLworc3RhdGljIHZvaWQgcHJpbnRfZ3JhcGhfY3B1KGludCBjcHUpCit7CisJaW50IGk7CisJaW50IGxvZzEwX3RoaXMgPSBsb2cxMF9jcHUoY3B1KTsKKwlpbnQgbG9nMTBfYWxsID0gbG9nMTBfY3B1KGNwdXMpOworCisKKwkvKgorCSAqIFN0YXJ0IHdpdGggYSBzcGFjZSBjaGFyYWN0ZXIgLSB0byBtYWtlIGl0IHN0YW5kIG91dAorCSAqIHRvIHRoZSByaWdodCBhIGJpdCB3aGVuIHRyYWNlIG91dHB1dCBpcyBwYXN0ZWQgaW50bworCSAqIGVtYWlsOgorCSAqLworCXByaW50ZigiICIpOworCisJLyoKKwkgKiBUcmlja3kgLSB3ZSBzcGFjZSB0aGUgQ1BVIGZpZWxkIGFjY29yZGluZyB0byB0aGUgbWF4CisJICogbnVtYmVyIG9mIG9ubGluZSBDUFVzLiBPbiBhIDItY3B1IHN5c3RlbSBpdCB3b3VsZCB0YWtlCisJICogYSBtYXhpbXVtIG9mIDEgZGlnaXQgLSBvbiBhIDEyOCBjcHUgc3lzdGVtIGl0IHdvdWxkCisJICogdGFrZSB1cCB0byAzIGRpZ2l0czoKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbG9nMTBfYWxsIC0gbG9nMTBfdGhpczsgaSsrKQorCQlwcmludGYoIiAiKTsKKworCXByaW50ZigiJWQpICIsIGNwdSk7Cit9CisKKyNkZWZpbmUgVFJBQ0VfR1JBUEhfUFJPQ0lORk9fTEVOR1RICTE0CisjZGVmaW5lIFRSQUNFX0dSQVBIX0lOREVOVAkyCisKK3N0YXRpYyB2b2lkIHByaW50X2dyYXBoX3Byb2MoaW50IHBpZCwgY29uc3QgY2hhciAqY29tbSkKK3sKKwkvKiBzaWduICsgbG9nMTAoTUFYX0lOVCkgKyAnXDAnICovCisJY2hhciBwaWRfc3RyWzExXTsKKwlpbnQgc3BhY2VzID0gMDsKKwlpbnQgbGVuOworCWludCBpOworCisJc3ByaW50ZihwaWRfc3RyLCAiJWQiLCBwaWQpOworCisJLyogMSBzdGFuZHMgZm9yIHRoZSAiLSIgY2hhcmFjdGVyICovCisJbGVuID0gc3RybGVuKGNvbW0pICsgc3RybGVuKHBpZF9zdHIpICsgMTsKKworCWlmIChsZW4gPCBUUkFDRV9HUkFQSF9QUk9DSU5GT19MRU5HVEgpCisJCXNwYWNlcyA9IFRSQUNFX0dSQVBIX1BST0NJTkZPX0xFTkdUSCAtIGxlbjsKKworCS8qIEZpcnN0IHNwYWNlcyB0byBhbGlnbiBjZW50ZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3BhY2VzIC8gMjsgaSsrKQorCQlwcmludGYoIiAiKTsKKworCXByaW50ZigiJXMtJXMiLCBjb21tLCBwaWRfc3RyKTsKKworCS8qIExhc3Qgc3BhY2VzIHRvIGFsaWduIGNlbnRlciAqLworCWZvciAoaSA9IDA7IGkgPCBzcGFjZXMgLSAoc3BhY2VzIC8gMik7IGkrKykKKwkJcHJpbnRmKCIgIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVjb3JkICoKK2dldF9yZXR1cm5fZm9yX2xlYWYoaW50IGNwdSwgaW50IGN1cl9waWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJfZnVuYywKKwkJICAgIHN0cnVjdCByZWNvcmQgKm5leHQpCit7CisJc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7CisJc3RydWN0IGV2ZW50ICpldmVudDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgdHlwZTsKKwlpbnQgcGlkOworCisJdHlwZSA9IHBhcnNlX2NvbW1vbl90eXBlKG5leHQtPmRhdGEpOworCWV2ZW50ID0gZmluZF9ldmVudCh0eXBlKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghKGV2ZW50LT5mbGFncyAmIEVWRU5UX0ZMX0lTRlVOQ1JFVCkpCisJCXJldHVybiBOVUxMOworCisJcGlkID0gcGFyc2VfY29tbW9uX3BpZChuZXh0LT5kYXRhKTsKKwlmaWVsZCA9IGZpbmRfZmllbGQoZXZlbnQsICJmdW5jIik7CisJaWYgKCFmaWVsZCkKKwkJZGllKCJmdW5jdGlvbiByZXR1cm4gZG9lcyBub3QgaGF2ZSBmaWVsZCBmdW5jIik7CisKKwl2YWwgPSByZWFkX3NpemUobmV4dC0+ZGF0YSArIGZpZWxkLT5vZmZzZXQsIGZpZWxkLT5zaXplKTsKKworCWlmIChjdXJfcGlkICE9IHBpZCB8fCBjdXJfZnVuYyAhPSB2YWwpCisJCXJldHVybiBOVUxMOworCisJLyogdGhpcyBpcyBhIGxlYWYsIG5vdyBhZHZhbmNlIHRoZSBpdGVyYXRvciAqLworCXJldHVybiB0cmFjZV9yZWFkX2RhdGEoY3B1KTsKK30KKworLyogU2lnbmFsIGEgb3ZlcmhlYWQgb2YgdGltZSBleGVjdXRpb24gdG8gdGhlIG91dHB1dCAqLworc3RhdGljIHZvaWQgcHJpbnRfZ3JhcGhfb3ZlcmhlYWQodW5zaWduZWQgbG9uZyBsb25nIGR1cmF0aW9uKQoreworCS8qIE5vbiBuZXN0ZWQgZW50cnkgb3IgcmV0dXJuICovCisJaWYgKGR1cmF0aW9uID09IH4wVUxMKQorCQlyZXR1cm4gKHZvaWQpcHJpbnRmKCIgICIpOworCisJLyogRHVyYXRpb24gZXhjZWVkZWQgMTAwIG1zZWNzICovCisJaWYgKGR1cmF0aW9uID4gMTAwMDAwVUxMKQorCQlyZXR1cm4gKHZvaWQpcHJpbnRmKCIhICIpOworCisJLyogRHVyYXRpb24gZXhjZWVkZWQgMTAgbXNlY3MgKi8KKwlpZiAoZHVyYXRpb24gPiAxMDAwMFVMTCkKKwkJcmV0dXJuICh2b2lkKXByaW50ZigiKyAiKTsKKworCXByaW50ZigiICAiKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZ3JhcGhfZHVyYXRpb24odW5zaWduZWQgbG9uZyBsb25nIGR1cmF0aW9uKQoreworCXVuc2lnbmVkIGxvbmcgdXNlY3MgPSBkdXJhdGlvbiAvIDEwMDA7CisJdW5zaWduZWQgbG9uZyBuc2Vjc19yZW0gPSBkdXJhdGlvbiAlIDEwMDA7CisJLyogbG9nMTAoVUxPTkdfTUFYKSArICdcMCcgKi8KKwljaGFyIG1zZWNzX3N0clsyMV07CisJY2hhciBuc2Vjc19zdHJbNV07CisJaW50IGxlbjsKKwlpbnQgaTsKKworCXNwcmludGYobXNlY3Nfc3RyLCAiJWx1IiwgdXNlY3MpOworCisJLyogUHJpbnQgbXNlY3MgKi8KKwlsZW4gPSBwcmludGYoIiVsdSIsIHVzZWNzKTsKKworCS8qIFByaW50IG5zZWNzICh3ZSBkb24ndCB3YW50IHRvIGV4Y2VlZCA3IG51bWJlcnMpICovCisJaWYgKGxlbiA8IDcpIHsKKwkJc25wcmludGYobnNlY3Nfc3RyLCA4IC0gbGVuLCAiJTAzbHUiLCBuc2Vjc19yZW0pOworCQlsZW4gKz0gcHJpbnRmKCIuJXMiLCBuc2Vjc19zdHIpOworCX0KKworCXByaW50ZigiIHVzICIpOworCisJLyogUHJpbnQgcmVtYWluaW5nIHNwYWNlcyB0byBmaXQgdGhlIHJvdydzIHdpZHRoICovCisJZm9yIChpID0gbGVuOyBpIDwgNzsgaSsrKQorCQlwcmludGYoIiAiKTsKKworCXByaW50ZigifCAgIik7Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9ncmFwaF9lbnRyeV9sZWFmKHN0cnVjdCBldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEsIHN0cnVjdCByZWNvcmQgKnJldF9yZWMpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHJldHRpbWUsIGNhbGx0aW1lOworCXVuc2lnbmVkIGxvbmcgbG9uZyBkdXJhdGlvbiwgZGVwdGg7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmaWVsZDsKKwlzdHJ1Y3QgZnVuY19tYXAgKmZ1bmM7CisJc3RydWN0IGV2ZW50ICpyZXRfZXZlbnQ7CisJaW50IHR5cGU7CisJaW50IGk7CisKKwl0eXBlID0gcGFyc2VfY29tbW9uX3R5cGUocmV0X3JlYy0+ZGF0YSk7CisJcmV0X2V2ZW50ID0gZmluZF9ldmVudCh0eXBlKTsKKworCWZpZWxkID0gZmluZF9maWVsZChyZXRfZXZlbnQsICJyZXR0aW1lIik7CisJaWYgKCFmaWVsZCkKKwkJZGllKCJjYW4ndCBmaW5kIHJldHRpbWUgaW4gcmV0dXJuIGdyYXBoIik7CisJcmV0dGltZSA9IHJlYWRfc2l6ZShyZXRfcmVjLT5kYXRhICsgZmllbGQtPm9mZnNldCwgZmllbGQtPnNpemUpOworCisJZmllbGQgPSBmaW5kX2ZpZWxkKHJldF9ldmVudCwgImNhbGx0aW1lIik7CisJaWYgKCFmaWVsZCkKKwkJZGllKCJjYW4ndCBmaW5kIHJldHRpbWUgaW4gcmV0dXJuIGdyYXBoIik7CisJY2FsbHRpbWUgPSByZWFkX3NpemUocmV0X3JlYy0+ZGF0YSArIGZpZWxkLT5vZmZzZXQsIGZpZWxkLT5zaXplKTsKKworCWR1cmF0aW9uID0gcmV0dGltZSAtIGNhbGx0aW1lOworCisJLyogT3ZlcmhlYWQgKi8KKwlwcmludF9ncmFwaF9vdmVyaGVhZChkdXJhdGlvbik7CisKKwkvKiBEdXJhdGlvbiAqLworCXByaW50X2dyYXBoX2R1cmF0aW9uKGR1cmF0aW9uKTsKKworCWZpZWxkID0gZmluZF9maWVsZChldmVudCwgImRlcHRoIik7CisJaWYgKCFmaWVsZCkKKwkJZGllKCJjYW4ndCBmaW5kIGRlcHRoIGluIGVudHJ5IGdyYXBoIik7CisJZGVwdGggPSByZWFkX3NpemUoZGF0YSArIGZpZWxkLT5vZmZzZXQsIGZpZWxkLT5zaXplKTsKKworCS8qIEZ1bmN0aW9uICovCisJZm9yIChpID0gMDsgaSA8IChpbnQpKGRlcHRoICogVFJBQ0VfR1JBUEhfSU5ERU5UKTsgaSsrKQorCQlwcmludGYoIiAiKTsKKworCWZpZWxkID0gZmluZF9maWVsZChldmVudCwgImZ1bmMiKTsKKwlpZiAoIWZpZWxkKQorCQlkaWUoImNhbid0IGZpbmQgZnVuYyBpbiBlbnRyeSBncmFwaCIpOworCXZhbCA9IHJlYWRfc2l6ZShkYXRhICsgZmllbGQtPm9mZnNldCwgZmllbGQtPnNpemUpOworCWZ1bmMgPSBmaW5kX2Z1bmModmFsKTsKKworCWlmIChmdW5jKQorCQlwcmludGYoIiVzKCk7IiwgZnVuYy0+ZnVuYyk7CisJZWxzZQorCQlwcmludGYoIiVsbHgoKTsiLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9ncmFwaF9uZXN0ZWQoc3RydWN0IGV2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmaWVsZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGVwdGg7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwlzdHJ1Y3QgZnVuY19tYXAgKmZ1bmM7CisJaW50IGk7CisKKwkvKiBObyBvdmVyaGVhZCAqLworCXByaW50X2dyYXBoX292ZXJoZWFkKC0xKTsKKworCS8qIE5vIHRpbWUgKi8KKwlwcmludGYoIiAgICAgICAgICAgfCAgIik7CisKKwlmaWVsZCA9IGZpbmRfZmllbGQoZXZlbnQsICJkZXB0aCIpOworCWlmICghZmllbGQpCisJCWRpZSgiY2FuJ3QgZmluZCBkZXB0aCBpbiBlbnRyeSBncmFwaCIpOworCWRlcHRoID0gcmVhZF9zaXplKGRhdGEgKyBmaWVsZC0+b2Zmc2V0LCBmaWVsZC0+c2l6ZSk7CisKKwkvKiBGdW5jdGlvbiAqLworCWZvciAoaSA9IDA7IGkgPCAoaW50KShkZXB0aCAqIFRSQUNFX0dSQVBIX0lOREVOVCk7IGkrKykKKwkJcHJpbnRmKCIgIik7CisKKwlmaWVsZCA9IGZpbmRfZmllbGQoZXZlbnQsICJmdW5jIik7CisJaWYgKCFmaWVsZCkKKwkJZGllKCJjYW4ndCBmaW5kIGZ1bmMgaW4gZW50cnkgZ3JhcGgiKTsKKwl2YWwgPSByZWFkX3NpemUoZGF0YSArIGZpZWxkLT5vZmZzZXQsIGZpZWxkLT5zaXplKTsKKwlmdW5jID0gZmluZF9mdW5jKHZhbCk7CisKKwlpZiAoZnVuYykKKwkJcHJpbnRmKCIlcygpIHsiLCBmdW5jLT5mdW5jKTsKKwllbHNlCisJCXByaW50ZigiJWxseCgpIHsiLCB2YWwpOworfQorCitzdGF0aWMgdm9pZAorcHJldHR5X3ByaW50X2Z1bmNfZW50KHZvaWQgKmRhdGEsIGludCBzaXplLCBzdHJ1Y3QgZXZlbnQgKmV2ZW50LAorCQkgICAgICBpbnQgY3B1LCBpbnQgcGlkLCBjb25zdCBjaGFyICpjb21tLAorCQkgICAgICB1bnNpZ25lZCBsb25nIHNlY3MsIHVuc2lnbmVkIGxvbmcgdXNlY3MpCit7CisJc3RydWN0IGZvcm1hdF9maWVsZCAqZmllbGQ7CisJc3RydWN0IHJlY29yZCAqcmVjOworCXZvaWQgKmNvcHlfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXByaW50ZigiJTVsdS4lMDZsdSB8ICAiLCBzZWNzLCB1c2Vjcyk7CisKKwlwcmludF9ncmFwaF9jcHUoY3B1KTsKKwlwcmludF9ncmFwaF9wcm9jKHBpZCwgY29tbSk7CisKKwlwcmludGYoIiB8ICIpOworCisJZmllbGQgPSBmaW5kX2ZpZWxkKGV2ZW50LCAiZnVuYyIpOworCWlmICghZmllbGQpCisJCWRpZSgiZnVuY3Rpb24gZW50cnkgZG9lcyBub3QgaGF2ZSBmdW5jIGZpZWxkIik7CisKKwl2YWwgPSByZWFkX3NpemUoZGF0YSArIGZpZWxkLT5vZmZzZXQsIGZpZWxkLT5zaXplKTsKKworCS8qCisJICogcGVla19kYXRhIG1heSB1bm1hcCB0aGUgZGF0YSBwb2ludGVyLiBDb3B5IGl0IGZpcnN0LgorCSAqLworCWNvcHlfZGF0YSA9IG1hbGxvY19vcl9kaWUoc2l6ZSk7CisJbWVtY3B5KGNvcHlfZGF0YSwgZGF0YSwgc2l6ZSk7CisJZGF0YSA9IGNvcHlfZGF0YTsKKworCXJlYyA9IHRyYWNlX3BlZWtfZGF0YShjcHUpOworCWlmIChyZWMpIHsKKwkJcmVjID0gZ2V0X3JldHVybl9mb3JfbGVhZihjcHUsIHBpZCwgdmFsLCByZWMpOworCQlpZiAocmVjKSB7CisJCQlwcmludF9ncmFwaF9lbnRyeV9sZWFmKGV2ZW50LCBkYXRhLCByZWMpOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCX0KKwlwcmludF9ncmFwaF9uZXN0ZWQoZXZlbnQsIGRhdGEpOworb3V0X2ZyZWU6CisJZnJlZShkYXRhKTsKK30KKworc3RhdGljIHZvaWQKK3ByZXR0eV9wcmludF9mdW5jX3JldCh2b2lkICpkYXRhLCBpbnQgc2l6ZSBfX3VudXNlZCwgc3RydWN0IGV2ZW50ICpldmVudCwKKwkJICAgICAgaW50IGNwdSwgaW50IHBpZCwgY29uc3QgY2hhciAqY29tbSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBzZWNzLCB1bnNpZ25lZCBsb25nIHVzZWNzKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyByZXR0aW1lLCBjYWxsdGltZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZHVyYXRpb24sIGRlcHRoOworCXN0cnVjdCBmb3JtYXRfZmllbGQgKmZpZWxkOworCWludCBpOworCisJcHJpbnRmKCIlNWx1LiUwNmx1IHwgICIsIHNlY3MsIHVzZWNzKTsKKworCXByaW50X2dyYXBoX2NwdShjcHUpOworCXByaW50X2dyYXBoX3Byb2MocGlkLCBjb21tKTsKKworCXByaW50ZigiIHwgIik7CisKKwlmaWVsZCA9IGZpbmRfZmllbGQoZXZlbnQsICJyZXR0aW1lIik7CisJaWYgKCFmaWVsZCkKKwkJZGllKCJjYW4ndCBmaW5kIHJldHRpbWUgaW4gcmV0dXJuIGdyYXBoIik7CisJcmV0dGltZSA9IHJlYWRfc2l6ZShkYXRhICsgZmllbGQtPm9mZnNldCwgZmllbGQtPnNpemUpOworCisJZmllbGQgPSBmaW5kX2ZpZWxkKGV2ZW50LCAiY2FsbHRpbWUiKTsKKwlpZiAoIWZpZWxkKQorCQlkaWUoImNhbid0IGZpbmQgY2FsbHRpbWUgaW4gcmV0dXJuIGdyYXBoIik7CisJY2FsbHRpbWUgPSByZWFkX3NpemUoZGF0YSArIGZpZWxkLT5vZmZzZXQsIGZpZWxkLT5zaXplKTsKKworCWR1cmF0aW9uID0gcmV0dGltZSAtIGNhbGx0aW1lOworCisJLyogT3ZlcmhlYWQgKi8KKwlwcmludF9ncmFwaF9vdmVyaGVhZChkdXJhdGlvbik7CisKKwkvKiBEdXJhdGlvbiAqLworCXByaW50X2dyYXBoX2R1cmF0aW9uKGR1cmF0aW9uKTsKKworCWZpZWxkID0gZmluZF9maWVsZChldmVudCwgImRlcHRoIik7CisJaWYgKCFmaWVsZCkKKwkJZGllKCJjYW4ndCBmaW5kIGRlcHRoIGluIGVudHJ5IGdyYXBoIik7CisJZGVwdGggPSByZWFkX3NpemUoZGF0YSArIGZpZWxkLT5vZmZzZXQsIGZpZWxkLT5zaXplKTsKKworCS8qIEZ1bmN0aW9uICovCisJZm9yIChpID0gMDsgaSA8IChpbnQpKGRlcHRoICogVFJBQ0VfR1JBUEhfSU5ERU5UKTsgaSsrKQorCQlwcmludGYoIiAiKTsKKworCXByaW50ZigifSIpOworfQorCitzdGF0aWMgdm9pZAorcHJldHR5X3ByaW50X2Z1bmNfZ3JhcGgodm9pZCAqZGF0YSwgaW50IHNpemUsIHN0cnVjdCBldmVudCAqZXZlbnQsCisJCQlpbnQgY3B1LCBpbnQgcGlkLCBjb25zdCBjaGFyICpjb21tLAorCQkJdW5zaWduZWQgbG9uZyBzZWNzLCB1bnNpZ25lZCBsb25nIHVzZWNzKQoreworCWlmIChldmVudC0+ZmxhZ3MgJiBFVkVOVF9GTF9JU0ZVTkNFTlQpCisJCXByZXR0eV9wcmludF9mdW5jX2VudChkYXRhLCBzaXplLCBldmVudCwKKwkJCQkgICAgICBjcHUsIHBpZCwgY29tbSwgc2VjcywgdXNlY3MpOworCWVsc2UgaWYgKGV2ZW50LT5mbGFncyAmIEVWRU5UX0ZMX0lTRlVOQ1JFVCkKKwkJcHJldHR5X3ByaW50X2Z1bmNfcmV0KGRhdGEsIHNpemUsIGV2ZW50LAorCQkJCSAgICAgIGNwdSwgcGlkLCBjb21tLCBzZWNzLCB1c2Vjcyk7CisJcHJpbnRmKCJcbiIpOworfQorCit2b2lkIHByaW50X2V2ZW50KGludCBjcHUsIHZvaWQgKmRhdGEsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3MsCisJCSAgY2hhciAqY29tbSkKK3sKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCXVuc2lnbmVkIGxvbmcgc2VjczsKKwl1bnNpZ25lZCBsb25nIHVzZWNzOworCWludCB0eXBlOworCWludCBwaWQ7CisKKwlzZWNzID0gbnNlY3MgLyBOU0VDU19QRVJfU0VDOworCW5zZWNzIC09IHNlY3MgKiBOU0VDU19QRVJfU0VDOworCXVzZWNzID0gbnNlY3MgLyBOU0VDU19QRVJfVVNFQzsKKworCXR5cGUgPSBwYXJzZV9jb21tb25fdHlwZShkYXRhKTsKKworCWV2ZW50ID0gZmluZF9ldmVudCh0eXBlKTsKKwlpZiAoIWV2ZW50KQorCQlkaWUoInVnISBubyBldmVudCBmb3VuZCBmb3IgdHlwZSAlZCIsIHR5cGUpOworCisJcGlkID0gcGFyc2VfY29tbW9uX3BpZChkYXRhKTsKKworCWlmIChldmVudC0+ZmxhZ3MgJiAoRVZFTlRfRkxfSVNGVU5DRU5UIHwgRVZFTlRfRkxfSVNGVU5DUkVUKSkKKwkJcmV0dXJuIHByZXR0eV9wcmludF9mdW5jX2dyYXBoKGRhdGEsIHNpemUsIGV2ZW50LCBjcHUsCisJCQkJCSAgICAgICBwaWQsIGNvbW0sIHNlY3MsIHVzZWNzKTsKKworCXByaW50ZigiJTE2cy0lLTVkIFslMDNkXSAlNWx1LiUwOUx1OiAlczogIiwKKwkgICAgICAgY29tbSwgcGlkLCAgY3B1LAorCSAgICAgICBzZWNzLCBuc2VjcywgZXZlbnQtPm5hbWUpOworCisJcHJldHR5X3ByaW50KGRhdGEsIHNpemUsIGV2ZW50KTsKKwlwcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2ZpZWxkcyhzdHJ1Y3QgcHJpbnRfZmxhZ19zeW0gKmZpZWxkKQoreworCXByaW50ZigieyAlcywgJXMgfSIsIGZpZWxkLT52YWx1ZSwgZmllbGQtPnN0cik7CisJaWYgKGZpZWxkLT5uZXh0KSB7CisJCXByaW50ZigiLCAiKTsKKwkJcHJpbnRfZmllbGRzKGZpZWxkLT5uZXh0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2FyZ3Moc3RydWN0IHByaW50X2FyZyAqYXJncykKK3sKKwlpbnQgcHJpbnRfcGFyZW4gPSAxOworCisJc3dpdGNoIChhcmdzLT50eXBlKSB7CisJY2FzZSBQUklOVF9OVUxMOgorCQlwcmludGYoIm51bGwiKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9BVE9NOgorCQlwcmludGYoIiVzIiwgYXJncy0+YXRvbS5hdG9tKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9GSUVMRDoKKwkJcHJpbnRmKCJSRUMtPiVzIiwgYXJncy0+ZmllbGQubmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfRkxBR1M6CisJCXByaW50ZigiX19wcmludF9mbGFncygiKTsKKwkJcHJpbnRfYXJncyhhcmdzLT5mbGFncy5maWVsZCk7CisJCXByaW50ZigiLCAlcywgIiwgYXJncy0+ZmxhZ3MuZGVsaW0pOworCQlwcmludF9maWVsZHMoYXJncy0+ZmxhZ3MuZmxhZ3MpOworCQlwcmludGYoIikiKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9TWU1CT0w6CisJCXByaW50ZigiX19wcmludF9zeW1ib2xpYygiKTsKKwkJcHJpbnRfYXJncyhhcmdzLT5zeW1ib2wuZmllbGQpOworCQlwcmludGYoIiwgIik7CisJCXByaW50X2ZpZWxkcyhhcmdzLT5zeW1ib2wuc3ltYm9scyk7CisJCXByaW50ZigiKSIpOworCQlicmVhazsKKwljYXNlIFBSSU5UX1NUUklORzoKKwkJcHJpbnRmKCJfX2dldF9zdHIoJXMpIiwgYXJncy0+c3RyaW5nLnN0cmluZyk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfVFlQRToKKwkJcHJpbnRmKCIoJXMpIiwgYXJncy0+dHlwZWNhc3QudHlwZSk7CisJCXByaW50X2FyZ3MoYXJncy0+dHlwZWNhc3QuaXRlbSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfT1A6CisJCWlmIChzdHJjbXAoYXJncy0+b3Aub3AsICI6IikgPT0gMCkKKwkJCXByaW50X3BhcmVuID0gMDsKKwkJaWYgKHByaW50X3BhcmVuKQorCQkJcHJpbnRmKCIoIik7CisJCXByaW50X2FyZ3MoYXJncy0+b3AubGVmdCk7CisJCXByaW50ZigiICVzICIsIGFyZ3MtPm9wLm9wKTsKKwkJcHJpbnRfYXJncyhhcmdzLT5vcC5yaWdodCk7CisJCWlmIChwcmludF9wYXJlbikKKwkJCXByaW50ZigiKSIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiB3ZSBzaG91bGQgd2Fybi4uLiAqLworCQlyZXR1cm47CisJfQorCWlmIChhcmdzLT5uZXh0KSB7CisJCXByaW50ZigiXG4iKTsKKwkJcHJpbnRfYXJncyhhcmdzLT5uZXh0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2hlYWRlcl9maWVsZChjaGFyICp0eXBlLAorCQkJICAgICAgIGludCAqb2Zmc2V0LCBpbnQgKnNpemUpCit7CisJY2hhciAqdG9rZW47CisKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9JVEVNLCAoY2hhciAqKSJmaWVsZCIpIDwgMCkKKwkJcmV0dXJuOworCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAoY2hhciAqKSI6IikgPCAwKQorCQlyZXR1cm47CisJLyogdHlwZSAqLworCWlmIChyZWFkX2V4cGVjdF90eXBlKEVWRU5UX0lURU0sICZ0b2tlbikgPCAwKQorCQlyZXR1cm47CisJZnJlZV90b2tlbih0b2tlbik7CisKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9JVEVNLCB0eXBlKSA8IDApCisJCXJldHVybjsKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9PUCwgKGNoYXIgKikiOyIpIDwgMCkKKwkJcmV0dXJuOworCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX0lURU0sIChjaGFyICopIm9mZnNldCIpIDwgMCkKKwkJcmV0dXJuOworCWlmIChyZWFkX2V4cGVjdGVkKEVWRU5UX09QLCAoY2hhciAqKSI6IikgPCAwKQorCQlyZXR1cm47CisJaWYgKHJlYWRfZXhwZWN0X3R5cGUoRVZFTlRfSVRFTSwgJnRva2VuKSA8IDApCisJCXJldHVybjsKKwkqb2Zmc2V0ID0gYXRvaSh0b2tlbik7CisJZnJlZV90b2tlbih0b2tlbik7CisJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsIChjaGFyICopIjsiKSA8IDApCisJCXJldHVybjsKKwlpZiAocmVhZF9leHBlY3RlZChFVkVOVF9JVEVNLCAoY2hhciAqKSJzaXplIikgPCAwKQorCQlyZXR1cm47CisJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsIChjaGFyICopIjoiKSA8IDApCisJCXJldHVybjsKKwlpZiAocmVhZF9leHBlY3RfdHlwZShFVkVOVF9JVEVNLCAmdG9rZW4pIDwgMCkKKwkJcmV0dXJuOworCSpzaXplID0gYXRvaSh0b2tlbik7CisJZnJlZV90b2tlbih0b2tlbik7CisJaWYgKHJlYWRfZXhwZWN0ZWQoRVZFTlRfT1AsIChjaGFyICopIjsiKSA8IDApCisJCXJldHVybjsKKwlpZiAocmVhZF9leHBlY3RfdHlwZShFVkVOVF9ORVdMSU5FLCAmdG9rZW4pIDwgMCkKKwkJcmV0dXJuOworCWZyZWVfdG9rZW4odG9rZW4pOworfQorCitpbnQgcGFyc2VfaGVhZGVyX3BhZ2UoY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW5pdF9pbnB1dF9idWYoYnVmLCBzaXplKTsKKworCXBhcnNlX2hlYWRlcl9maWVsZCgoY2hhciAqKSJ0aW1lc3RhbXAiLCAmaGVhZGVyX3BhZ2VfdHNfb2Zmc2V0LAorCQkJICAgJmhlYWRlcl9wYWdlX3RzX3NpemUpOworCXBhcnNlX2hlYWRlcl9maWVsZCgoY2hhciAqKSJjb21taXQiLCAmaGVhZGVyX3BhZ2Vfc2l6ZV9vZmZzZXQsCisJCQkgICAmaGVhZGVyX3BhZ2Vfc2l6ZV9zaXplKTsKKwlwYXJzZV9oZWFkZXJfZmllbGQoKGNoYXIgKikiZGF0YSIsICZoZWFkZXJfcGFnZV9kYXRhX29mZnNldCwKKwkJCSAgICZoZWFkZXJfcGFnZV9kYXRhX3NpemUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9mdHJhY2VfZmlsZShjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmaWVsZDsKKwlzdHJ1Y3QgcHJpbnRfYXJnICphcmcsICoqbGlzdDsKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCWludCByZXQ7CisKKwlpbml0X2lucHV0X2J1ZihidWYsIHNpemUpOworCisJZXZlbnQgPSBhbGxvY19ldmVudCgpOworCWlmICghZXZlbnQpCisJCXJldHVybiAtRU5PTUVNOworCisJZXZlbnQtPmZsYWdzIHw9IEVWRU5UX0ZMX0lTRlRSQUNFOworCisJZXZlbnQtPm5hbWUgPSBldmVudF9yZWFkX25hbWUoKTsKKwlpZiAoIWV2ZW50LT5uYW1lKQorCQlkaWUoImZhaWxlZCB0byByZWFkIGZ0cmFjZSBldmVudCBuYW1lIik7CisKKwlpZiAoc3RyY21wKGV2ZW50LT5uYW1lLCAiZnVuY3Rpb24iKSA9PSAwKQorCQlldmVudC0+ZmxhZ3MgfD0gRVZFTlRfRkxfSVNGVU5DOworCisJZWxzZSBpZiAoc3RyY21wKGV2ZW50LT5uYW1lLCAiZnVuY2dyYXBoX2VudHJ5IikgPT0gMCkKKwkJZXZlbnQtPmZsYWdzIHw9IEVWRU5UX0ZMX0lTRlVOQ0VOVDsKKworCWVsc2UgaWYgKHN0cmNtcChldmVudC0+bmFtZSwgImZ1bmNncmFwaF9leGl0IikgPT0gMCkKKwkJZXZlbnQtPmZsYWdzIHw9IEVWRU5UX0ZMX0lTRlVOQ1JFVDsKKworCWVsc2UgaWYgKHN0cmNtcChldmVudC0+bmFtZSwgImJwcmludCIpID09IDApCisJCWV2ZW50LT5mbGFncyB8PSBFVkVOVF9GTF9JU0JQUklOVDsKKworCWV2ZW50LT5pZCA9IGV2ZW50X3JlYWRfaWQoKTsKKwlpZiAoZXZlbnQtPmlkIDwgMCkKKwkJZGllKCJmYWlsZWQgdG8gcmVhZCBmdHJhY2UgZXZlbnQgaWQiKTsKKworCWFkZF9ldmVudChldmVudCk7CisKKwlyZXQgPSBldmVudF9yZWFkX2Zvcm1hdChldmVudCk7CisJaWYgKHJldCA8IDApCisJCWRpZSgiZmFpbGVkIHRvIHJlYWQgZnRyYWNlIGV2ZW50IGZvcm1hdCIpOworCisJcmV0ID0gZXZlbnRfcmVhZF9wcmludChldmVudCk7CisJaWYgKHJldCA8IDApCisJCWRpZSgiZmFpbGVkIHRvIHJlYWQgZnRyYWNlIGV2ZW50IHByaW50IGZtdCIpOworCisJLyoKKwkgKiBUaGUgYXJndW1lbnRzIGZvciBmdHJhY2UgZmlsZXMgYXJlIHBhcnNlZCBieSB0aGUgZmllbGRzLgorCSAqIFNldCB1cCB0aGUgZmllbGRzIGFzIHRoZWlyIGFyZ3VtZW50cy4KKwkgKi8KKwlsaXN0ID0gJmV2ZW50LT5wcmludF9mbXQuYXJnczsKKwlmb3IgKGZpZWxkID0gZXZlbnQtPmZvcm1hdC5maWVsZHM7IGZpZWxkOyBmaWVsZCA9IGZpZWxkLT5uZXh0KSB7CisJCWFyZyA9IG1hbGxvY19vcl9kaWUoc2l6ZW9mKCphcmcpKTsKKwkJbWVtc2V0KGFyZywgMCwgc2l6ZW9mKCphcmcpKTsKKwkJKmxpc3QgPSBhcmc7CisJCWxpc3QgPSAmYXJnLT5uZXh0OworCQlhcmctPnR5cGUgPSBQUklOVF9GSUVMRDsKKwkJYXJnLT5maWVsZC5uYW1lID0gZmllbGQtPm5hbWU7CisJCWFyZy0+ZmllbGQuZmllbGQgPSBmaWVsZDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9ldmVudF9maWxlKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCBjaGFyICpzeXN0ZW1fX3VudXNlZCBfX3VudXNlZCkKK3sKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCWludCByZXQ7CisKKwlpbml0X2lucHV0X2J1ZihidWYsIHNpemUpOworCisJZXZlbnQgPSBhbGxvY19ldmVudCgpOworCWlmICghZXZlbnQpCisJCXJldHVybiAtRU5PTUVNOworCisJZXZlbnQtPm5hbWUgPSBldmVudF9yZWFkX25hbWUoKTsKKwlpZiAoIWV2ZW50LT5uYW1lKQorCQlkaWUoImZhaWxlZCB0byByZWFkIGV2ZW50IG5hbWUiKTsKKworCWV2ZW50LT5pZCA9IGV2ZW50X3JlYWRfaWQoKTsKKwlpZiAoZXZlbnQtPmlkIDwgMCkKKwkJZGllKCJmYWlsZWQgdG8gcmVhZCBldmVudCBpZCIpOworCisJcmV0ID0gZXZlbnRfcmVhZF9mb3JtYXQoZXZlbnQpOworCWlmIChyZXQgPCAwKQorCQlkaWUoImZhaWxlZCB0byByZWFkIGV2ZW50IGZvcm1hdCIpOworCisJcmV0ID0gZXZlbnRfcmVhZF9wcmludChldmVudCk7CisJaWYgKHJldCA8IDApCisJCWRpZSgiZmFpbGVkIHRvIHJlYWQgZXZlbnQgcHJpbnQgZm10Iik7CisKKyNkZWZpbmUgUFJJTlRfQVJHUyAwCisJaWYgKFBSSU5UX0FSR1MgJiYgZXZlbnQtPnByaW50X2ZtdC5hcmdzKQorCQlwcmludF9hcmdzKGV2ZW50LT5wcmludF9mbXQuYXJncyk7CisKKwlhZGRfZXZlbnQoZXZlbnQpOworCXJldHVybiAwOworfQorCit2b2lkIHBhcnNlX3NldF9pbmZvKGludCBucl9jcHVzLCBpbnQgbG9uZ19zeikKK3sKKwljcHVzID0gbnJfY3B1czsKKwlsb25nX3NpemUgPSBsb25nX3N6OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXJlYWQuYyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEyMTdhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMKQEAgLTAsMCArMSw1MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIFN0ZXZlbiBSb3N0ZWR0IDxzcm9zdGVkdEByZWRoYXQuY29tPgorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UgKG5vdCBsYXRlciEpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICovCisjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKworI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiLi4vcGVyZi5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJ0cmFjZS1ldmVudC5oIgorCitzdGF0aWMgaW50IGlucHV0X2ZkOworCitzdGF0aWMgaW50IHJlYWRfcGFnZTsKKworaW50IGZpbGVfYmlnZW5kaWFuOworaW50IGhvc3RfYmlnZW5kaWFuOworc3RhdGljIGludCBsb25nX3NpemU7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCXBhZ2Vfc2l6ZTsKKworc3RhdGljIGludCByZWFkX29yX2RpZSh2b2lkICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlpbnQgcjsKKworCXIgPSByZWFkKGlucHV0X2ZkLCBkYXRhLCBzaXplKTsKKwlpZiAociAhPSBzaXplKQorCQlkaWUoInJlYWRpbmcgaW5wdXQgZmlsZSAoc2l6ZSBleHBlY3RlZD0lZCByZWNlaXZlZD0lZCkiLAorCQkgICAgc2l6ZSwgcik7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmVhZDQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGF0YTsKKworCXJlYWRfb3JfZGllKCZkYXRhLCA0KTsKKwlyZXR1cm4gX19kYXRhMmhvc3Q0KGRhdGEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJlYWQ4KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGRhdGE7CisKKwlyZWFkX29yX2RpZSgmZGF0YSwgOCk7CisJcmV0dXJuIF9fZGF0YTJob3N0OChkYXRhKTsKK30KKworc3RhdGljIGNoYXIgKnJlYWRfc3RyaW5nKHZvaWQpCit7CisJY2hhciBidWZbQlVGU0laXTsKKwljaGFyICpzdHIgPSBOVUxMOworCWludCBzaXplID0gMDsKKwlpbnQgaTsKKwlpbnQgcjsKKworCWZvciAoOzspIHsKKwkJciA9IHJlYWQoaW5wdXRfZmQsIGJ1ZiwgQlVGU0laKTsKKwkJaWYgKHIgPCAwKQorCQkJZGllKCJyZWFkaW5nIGlucHV0IGZpbGUiKTsKKworCQlpZiAoIXIpCisJCQlkaWUoIm5vIGRhdGEiKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcjsgaSsrKSB7CisJCQlpZiAoIWJ1ZltpXSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA8IHIpCisJCQlicmVhazsKKworCQlpZiAoc3RyKSB7CisJCQlzaXplICs9IEJVRlNJWjsKKwkJCXN0ciA9IHJlYWxsb2Moc3RyLCBzaXplKTsKKwkJCWlmICghc3RyKQorCQkJCWRpZSgibWFsbG9jIG9mIHNpemUgJWQiLCBzaXplKTsKKwkJCW1lbWNweShzdHIgKyAoc2l6ZSAtIEJVRlNJWiksIGJ1ZiwgQlVGU0laKTsKKwkJfSBlbHNlIHsKKwkJCXNpemUgPSBCVUZTSVo7CisJCQlzdHIgPSBtYWxsb2Nfb3JfZGllKHNpemUpOworCQkJbWVtY3B5KHN0ciwgYnVmLCBzaXplKTsKKwkJfQorCX0KKworCS8qIHRyYWlsaW5nIFwwOiAqLworCWkrKzsKKworCS8qIG1vdmUgdGhlIGZpbGUgZGVzY3JpcHRvciB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi8KKwlyID0gbHNlZWsoaW5wdXRfZmQsIC0ociAtIGkpLCBTRUVLX0NVUik7CisJaWYgKHIgPCAwKQorCQlkaWUoImxzZWVrIik7CisKKwlpZiAoc3RyKSB7CisJCXNpemUgKz0gaTsKKwkJc3RyID0gcmVhbGxvYyhzdHIsIHNpemUpOworCQlpZiAoIXN0cikKKwkJCWRpZSgibWFsbG9jIG9mIHNpemUgJWQiLCBzaXplKTsKKwkJbWVtY3B5KHN0ciArIChzaXplIC0gaSksIGJ1ZiwgaSk7CisJfSBlbHNlIHsKKwkJc2l6ZSA9IGk7CisJCXN0ciA9IG1hbGxvY19vcl9kaWUoaSk7CisJCW1lbWNweShzdHIsIGJ1ZiwgaSk7CisJfQorCisJcmV0dXJuIHN0cjsKK30KKworc3RhdGljIHZvaWQgcmVhZF9wcm9jX2thbGxzeW1zKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHNpemU7CisJY2hhciAqYnVmOworCisJc2l6ZSA9IHJlYWQ0KCk7CisJaWYgKCFzaXplKQorCQlyZXR1cm47CisKKwlidWYgPSBtYWxsb2Nfb3JfZGllKHNpemUpOworCXJlYWRfb3JfZGllKGJ1Ziwgc2l6ZSk7CisKKwlwYXJzZV9wcm9jX2thbGxzeW1zKGJ1Ziwgc2l6ZSk7CisKKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfZnRyYWNlX3ByaW50ayh2b2lkKQoreworCXVuc2lnbmVkIGludCBzaXplOworCWNoYXIgKmJ1ZjsKKworCXNpemUgPSByZWFkNCgpOworCWlmICghc2l6ZSkKKwkJcmV0dXJuOworCisJYnVmID0gbWFsbG9jX29yX2RpZShzaXplKTsKKwlyZWFkX29yX2RpZShidWYsIHNpemUpOworCisJcGFyc2VfZnRyYWNlX3ByaW50ayhidWYsIHNpemUpOworCisJZnJlZShidWYpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2hlYWRlcl9maWxlcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOworCWNoYXIgKmhlYWRlcl9wYWdlOworCWNoYXIgKmhlYWRlcl9ldmVudDsKKwljaGFyIGJ1ZltCVUZTSVpdOworCisJcmVhZF9vcl9kaWUoYnVmLCAxMik7CisKKwlpZiAobWVtY21wKGJ1ZiwgImhlYWRlcl9wYWdlIiwgMTIpICE9IDApCisJCWRpZSgiZGlkIG5vdCByZWFkIGhlYWRlciBwYWdlIik7CisKKwlzaXplID0gcmVhZDgoKTsKKwloZWFkZXJfcGFnZSA9IG1hbGxvY19vcl9kaWUoc2l6ZSk7CisJcmVhZF9vcl9kaWUoaGVhZGVyX3BhZ2UsIHNpemUpOworCXBhcnNlX2hlYWRlcl9wYWdlKGhlYWRlcl9wYWdlLCBzaXplKTsKKwlmcmVlKGhlYWRlcl9wYWdlKTsKKworCS8qCisJICogVGhlIHNpemUgZmllbGQgaW4gdGhlIHBhZ2UgaXMgb2YgdHlwZSBsb25nLAorCSAqIHVzZSB0aGF0IGluc3RlYWQsIHNpbmNlIGl0IHJlcHJlc2VudHMgdGhlIGtlcm5lbC4KKwkgKi8KKwlsb25nX3NpemUgPSBoZWFkZXJfcGFnZV9zaXplX3NpemU7CisKKwlyZWFkX29yX2RpZShidWYsIDEzKTsKKwlpZiAobWVtY21wKGJ1ZiwgImhlYWRlcl9ldmVudCIsIDEzKSAhPSAwKQorCQlkaWUoImRpZCBub3QgcmVhZCBoZWFkZXIgZXZlbnQiKTsKKworCXNpemUgPSByZWFkOCgpOworCWhlYWRlcl9ldmVudCA9IG1hbGxvY19vcl9kaWUoc2l6ZSk7CisJcmVhZF9vcl9kaWUoaGVhZGVyX2V2ZW50LCBzaXplKTsKKwlmcmVlKGhlYWRlcl9ldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfZnRyYWNlX2ZpbGUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCit7CisJY2hhciAqYnVmOworCisJYnVmID0gbWFsbG9jX29yX2RpZShzaXplKTsKKwlyZWFkX29yX2RpZShidWYsIHNpemUpOworCXBhcnNlX2Z0cmFjZV9maWxlKGJ1Ziwgc2l6ZSk7CisJZnJlZShidWYpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2V2ZW50X2ZpbGUoY2hhciAqc3lzLCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKK3sKKwljaGFyICpidWY7CisKKwlidWYgPSBtYWxsb2Nfb3JfZGllKHNpemUpOworCXJlYWRfb3JfZGllKGJ1Ziwgc2l6ZSk7CisJcGFyc2VfZXZlbnRfZmlsZShidWYsIHNpemUsIHN5cyk7CisJZnJlZShidWYpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2Z0cmFjZV9maWxlcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOworCWludCBjb3VudDsKKwlpbnQgaTsKKworCWNvdW50ID0gcmVhZDQoKTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXNpemUgPSByZWFkOCgpOworCQlyZWFkX2Z0cmFjZV9maWxlKHNpemUpOworCX0KK30KKworc3RhdGljIHZvaWQgcmVhZF9ldmVudF9maWxlcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOworCWNoYXIgKnN5czsKKwlpbnQgc3lzdGVtczsKKwlpbnQgY291bnQ7CisJaW50IGkseDsKKworCXN5c3RlbXMgPSByZWFkNCgpOworCisJZm9yIChpID0gMDsgaSA8IHN5c3RlbXM7IGkrKykgeworCQlzeXMgPSByZWFkX3N0cmluZygpOworCisJCWNvdW50ID0gcmVhZDQoKTsKKwkJZm9yICh4PTA7IHggPCBjb3VudDsgeCsrKSB7CisJCQlzaXplID0gcmVhZDgoKTsKKwkJCXJlYWRfZXZlbnRfZmlsZShzeXMsIHNpemUpOworCQl9CisJfQorfQorCitzdHJ1Y3QgY3B1X2RhdGEgeworCXVuc2lnbmVkIGxvbmcgbG9uZwlvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBsb25nCXNpemU7CisJdW5zaWduZWQgbG9uZyBsb25nCXRpbWVzdGFtcDsKKwlzdHJ1Y3QgcmVjb3JkCQkqbmV4dDsKKwljaGFyCQkJKnBhZ2U7CisJaW50CQkJY3B1OworCWludAkJCWluZGV4OworCWludAkJCXBhZ2Vfc2l6ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3B1X2RhdGEgKmNwdV9kYXRhOworCitzdGF0aWMgdm9pZCB1cGRhdGVfY3B1X2RhdGFfaW5kZXgoaW50IGNwdSkKK3sKKwljcHVfZGF0YVtjcHVdLm9mZnNldCArPSBwYWdlX3NpemU7CisJY3B1X2RhdGFbY3B1XS5zaXplIC09IHBhZ2Vfc2l6ZTsKKwljcHVfZGF0YVtjcHVdLmluZGV4ID0gMDsKK30KKworc3RhdGljIHZvaWQgZ2V0X25leHRfcGFnZShpbnQgY3B1KQoreworCW9mZjY0X3Qgc2F2ZV9zZWVrOworCW9mZjY0X3QgcmV0OworCisJaWYgKCFjcHVfZGF0YVtjcHVdLnBhZ2UpCisJCXJldHVybjsKKworCWlmIChyZWFkX3BhZ2UpIHsKKwkJaWYgKGNwdV9kYXRhW2NwdV0uc2l6ZSA8PSBwYWdlX3NpemUpIHsKKwkJCWZyZWUoY3B1X2RhdGFbY3B1XS5wYWdlKTsKKwkJCWNwdV9kYXRhW2NwdV0ucGFnZSA9IE5VTEw7CisJCQlyZXR1cm47CisJCX0KKworCQl1cGRhdGVfY3B1X2RhdGFfaW5kZXgoY3B1KTsKKworCQkvKiBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSBtYXkgZXhwZWN0IHRoZSBwb2ludGVyIHRvIG5vdCBtb3ZlICovCisJCXNhdmVfc2VlayA9IGxzZWVrNjQoaW5wdXRfZmQsIDAsIFNFRUtfQ1VSKTsKKworCQlyZXQgPSBsc2VlazY0KGlucHV0X2ZkLCBjcHVfZGF0YVtjcHVdLm9mZnNldCwgU0VFS19TRVQpOworCQlpZiAocmV0IDwgMCkKKwkJCWRpZSgiZmFpbGVkIHRvIGxzZWVrIik7CisJCXJldCA9IHJlYWQoaW5wdXRfZmQsIGNwdV9kYXRhW2NwdV0ucGFnZSwgcGFnZV9zaXplKTsKKwkJaWYgKHJldCA8IDApCisJCQlkaWUoImZhaWxlZCB0byByZWFkIHBhZ2UiKTsKKworCQkvKiByZXNldCB0aGUgZmlsZSBwb2ludGVyIGJhY2sgKi8KKwkJbHNlZWs2NChpbnB1dF9mZCwgc2F2ZV9zZWVrLCBTRUVLX1NFVCk7CisKKwkJcmV0dXJuOworCX0KKworCW11bm1hcChjcHVfZGF0YVtjcHVdLnBhZ2UsIHBhZ2Vfc2l6ZSk7CisJY3B1X2RhdGFbY3B1XS5wYWdlID0gTlVMTDsKKworCWlmIChjcHVfZGF0YVtjcHVdLnNpemUgPD0gcGFnZV9zaXplKQorCQlyZXR1cm47CisKKwl1cGRhdGVfY3B1X2RhdGFfaW5kZXgoY3B1KTsKKworCWNwdV9kYXRhW2NwdV0ucGFnZSA9IG1tYXAoTlVMTCwgcGFnZV9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLAorCQkJCSAgaW5wdXRfZmQsIGNwdV9kYXRhW2NwdV0ub2Zmc2V0KTsKKwlpZiAoY3B1X2RhdGFbY3B1XS5wYWdlID09IE1BUF9GQUlMRUQpCisJCWRpZSgiZmFpbGVkIHRvIG1tYXAgY3B1ICVkIGF0IG9mZnNldCAweCVsbHgiLAorCQkgICAgY3B1LCBjcHVfZGF0YVtjcHVdLm9mZnNldCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHlwZV9sZW40aG9zdCh1bnNpZ25lZCBpbnQgdHlwZV9sZW5fdHMpCit7CisJaWYgKGZpbGVfYmlnZW5kaWFuKQorCQlyZXR1cm4gKHR5cGVfbGVuX3RzID4+IDI3KSAmICgoMSA8PCA1KSAtIDEpOworCWVsc2UKKwkJcmV0dXJuIHR5cGVfbGVuX3RzICYgKCgxIDw8IDUpIC0gMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHM0aG9zdCh1bnNpZ25lZCBpbnQgdHlwZV9sZW5fdHMpCit7CisJaWYgKGZpbGVfYmlnZW5kaWFuKQorCQlyZXR1cm4gdHlwZV9sZW5fdHMgJiAoKDEgPDwgMjcpIC0gMSk7CisJZWxzZQorCQlyZXR1cm4gdHlwZV9sZW5fdHMgPj4gNTsKK30KKworc3RhdGljIGludCBjYWxjX2luZGV4KHZvaWQgKnB0ciwgaW50IGNwdSkKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpcHRyIC0gKHVuc2lnbmVkIGxvbmcpY3B1X2RhdGFbY3B1XS5wYWdlOworfQorCitzdHJ1Y3QgcmVjb3JkICp0cmFjZV9wZWVrX2RhdGEoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcmVjb3JkICpkYXRhOworCXZvaWQgKnBhZ2UgPSBjcHVfZGF0YVtjcHVdLnBhZ2U7CisJaW50IGlkeCA9IGNwdV9kYXRhW2NwdV0uaW5kZXg7CisJdm9pZCAqcHRyID0gcGFnZSArIGlkeDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZXh0ZW5kOworCXVuc2lnbmVkIGludCB0eXBlX2xlbl90czsKKwl1bnNpZ25lZCBpbnQgdHlwZV9sZW47CisJdW5zaWduZWQgaW50IGRlbHRhOworCXVuc2lnbmVkIGludCBsZW5ndGggPSAwOworCisJaWYgKGNwdV9kYXRhW2NwdV0ubmV4dCkKKwkJcmV0dXJuIGNwdV9kYXRhW2NwdV0ubmV4dDsKKworCWlmICghcGFnZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWlkeCkgeworCQkvKiBGSVhNRTogaGFuZGxlIGhlYWRlciBwYWdlICovCisJCWlmIChoZWFkZXJfcGFnZV90c19zaXplICE9IDgpCisJCQlkaWUoImV4cGVjdGVkIGEgbG9uZyBsb25nIHR5cGUgZm9yIHRpbWVzdGFtcCIpOworCQljcHVfZGF0YVtjcHVdLnRpbWVzdGFtcCA9IGRhdGEyaG9zdDgocHRyKTsKKwkJcHRyICs9IDg7CisJCXN3aXRjaCAoaGVhZGVyX3BhZ2Vfc2l6ZV9zaXplKSB7CisJCWNhc2UgNDoKKwkJCWNwdV9kYXRhW2NwdV0ucGFnZV9zaXplID0gZGF0YTJob3N0NChwdHIpOworCQkJcHRyICs9IDQ7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJY3B1X2RhdGFbY3B1XS5wYWdlX3NpemUgPSBkYXRhMmhvc3Q4KHB0cik7CisJCQlwdHIgKz0gODsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGllKCJiYWQgbG9uZyBzaXplIik7CisJCX0KKwkJcHRyID0gY3B1X2RhdGFbY3B1XS5wYWdlICsgaGVhZGVyX3BhZ2VfZGF0YV9vZmZzZXQ7CisJfQorCityZWFkX2FnYWluOgorCWlkeCA9IGNhbGNfaW5kZXgocHRyLCBjcHUpOworCisJaWYgKGlkeCA+PSBjcHVfZGF0YVtjcHVdLnBhZ2Vfc2l6ZSkgeworCQlnZXRfbmV4dF9wYWdlKGNwdSk7CisJCXJldHVybiB0cmFjZV9wZWVrX2RhdGEoY3B1KTsKKwl9CisKKwl0eXBlX2xlbl90cyA9IGRhdGEyaG9zdDQocHRyKTsKKwlwdHIgKz0gNDsKKworCXR5cGVfbGVuID0gdHlwZV9sZW40aG9zdCh0eXBlX2xlbl90cyk7CisJZGVsdGEgPSB0czRob3N0KHR5cGVfbGVuX3RzKTsKKworCXN3aXRjaCAodHlwZV9sZW4pIHsKKwljYXNlIFJJTkdCVUZfVFlQRV9QQURESU5HOgorCQlpZiAoIWRlbHRhKQorCQkJZGllKCJlcnJvciwgaGl0IHVuZXhwZWN0ZWQgZW5kIG9mIHBhZ2UiKTsKKwkJbGVuZ3RoID0gZGF0YTJob3N0NChwdHIpOworCQlwdHIgKz0gNDsKKwkJbGVuZ3RoICo9IDQ7CisJCXB0ciArPSBsZW5ndGg7CisJCWdvdG8gcmVhZF9hZ2FpbjsKKworCWNhc2UgUklOR0JVRl9UWVBFX1RJTUVfRVhURU5EOgorCQlleHRlbmQgPSBkYXRhMmhvc3Q0KHB0cik7CisJCXB0ciArPSA0OworCQlleHRlbmQgPDw9IFRTX1NISUZUOworCQlleHRlbmQgKz0gZGVsdGE7CisJCWNwdV9kYXRhW2NwdV0udGltZXN0YW1wICs9IGV4dGVuZDsKKwkJZ290byByZWFkX2FnYWluOworCisJY2FzZSBSSU5HQlVGX1RZUEVfVElNRV9TVEFNUDoKKwkJcHRyICs9IDEyOworCQlicmVhazsKKwljYXNlIDA6CisJCWxlbmd0aCA9IGRhdGEyaG9zdDQocHRyKTsKKwkJcHRyICs9IDQ7CisJCWRpZSgiaGVyZSEgbGVuZ3RoPSVkIiwgbGVuZ3RoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbGVuZ3RoID0gdHlwZV9sZW4gKiA0OworCQlicmVhazsKKwl9CisKKwljcHVfZGF0YVtjcHVdLnRpbWVzdGFtcCArPSBkZWx0YTsKKworCWRhdGEgPSBtYWxsb2Nfb3JfZGllKHNpemVvZigqZGF0YSkpOworCW1lbXNldChkYXRhLCAwLCBzaXplb2YoKmRhdGEpKTsKKworCWRhdGEtPnRzID0gY3B1X2RhdGFbY3B1XS50aW1lc3RhbXA7CisJZGF0YS0+c2l6ZSA9IGxlbmd0aDsKKwlkYXRhLT5kYXRhID0gcHRyOworCXB0ciArPSBsZW5ndGg7CisKKwljcHVfZGF0YVtjcHVdLmluZGV4ID0gY2FsY19pbmRleChwdHIsIGNwdSk7CisJY3B1X2RhdGFbY3B1XS5uZXh0ID0gZGF0YTsKKworCXJldHVybiBkYXRhOworfQorCitzdHJ1Y3QgcmVjb3JkICp0cmFjZV9yZWFkX2RhdGEoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcmVjb3JkICpkYXRhOworCisJZGF0YSA9IHRyYWNlX3BlZWtfZGF0YShjcHUpOworCWNwdV9kYXRhW2NwdV0ubmV4dCA9IE5VTEw7CisKKwlyZXR1cm4gZGF0YTsKK30KKwordm9pZCB0cmFjZV9yZXBvcnQgKHZvaWQpCit7CisJY29uc3QgY2hhciAqaW5wdXRfZmlsZSA9ICJ0cmFjZS5pbmZvIjsKKwljaGFyIGJ1ZltCVUZTSVpdOworCWNoYXIgdGVzdFtdID0geyAyMywgOCwgNjggfTsKKwljaGFyICp2ZXJzaW9uOworCWludCBzaG93X2Z1bmNzID0gMDsKKwlpbnQgc2hvd19wcmludGsgPSAwOworCisJaW5wdXRfZmQgPSBvcGVuKGlucHV0X2ZpbGUsIE9fUkRPTkxZKTsKKwlpZiAoaW5wdXRfZmQgPCAwKQorCQlkaWUoIm9wZW5pbmcgJyVzJ1xuIiwgaW5wdXRfZmlsZSk7CisKKwlyZWFkX29yX2RpZShidWYsIDMpOworCWlmIChtZW1jbXAoYnVmLCB0ZXN0LCAzKSAhPSAwKQorCQlkaWUoIm5vdCBhbiB0cmFjZSBkYXRhIGZpbGUiKTsKKworCXJlYWRfb3JfZGllKGJ1ZiwgNyk7CisJaWYgKG1lbWNtcChidWYsICJ0cmFjaW5nIiwgNykgIT0gMCkKKwkJZGllKCJub3QgYSB0cmFjZSBmaWxlIChtaXNzaW5nIHRyYWNpbmcpIik7CisKKwl2ZXJzaW9uID0gcmVhZF9zdHJpbmcoKTsKKwlwcmludGYoInZlcnNpb24gPSAlc1xuIiwgdmVyc2lvbik7CisJZnJlZSh2ZXJzaW9uKTsKKworCXJlYWRfb3JfZGllKGJ1ZiwgMSk7CisJZmlsZV9iaWdlbmRpYW4gPSBidWZbMF07CisJaG9zdF9iaWdlbmRpYW4gPSBiaWdlbmRpYW4oKTsKKworCXJlYWRfb3JfZGllKGJ1ZiwgMSk7CisJbG9uZ19zaXplID0gYnVmWzBdOworCisJcGFnZV9zaXplID0gcmVhZDQoKTsKKworCXJlYWRfaGVhZGVyX2ZpbGVzKCk7CisKKwlyZWFkX2Z0cmFjZV9maWxlcygpOworCXJlYWRfZXZlbnRfZmlsZXMoKTsKKwlyZWFkX3Byb2Nfa2FsbHN5bXMoKTsKKwlyZWFkX2Z0cmFjZV9wcmludGsoKTsKKworCWlmIChzaG93X2Z1bmNzKSB7CisJCXByaW50X2Z1bmNzKCk7CisJCXJldHVybjsKKwl9CisJaWYgKHNob3dfcHJpbnRrKSB7CisJCXByaW50X3ByaW50aygpOworCQlyZXR1cm47CisJfQorCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LmggYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjAyOTRhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LmgKQEAgLTAsMCArMSwyNDAgQEAKKyNpZm5kZWYgX1RSQUNFX0VWRU5UU19ICisjZGVmaW5lIF9UUkFDRV9FVkVOVFNfSAorCisjaW5jbHVkZSAicGFyc2UtZXZlbnRzLmgiCisKKyNkZWZpbmUgX191bnVzZWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKKworCisjaWZuZGVmIFBBR0VfTUFTSworI2RlZmluZSBQQUdFX01BU0sgKHBhZ2Vfc2l6ZSAtIDEpCisjZW5kaWYKKworZW51bSB7CisJUklOR0JVRl9UWVBFX1BBRERJTkcJCT0gMjksCisJUklOR0JVRl9UWVBFX1RJTUVfRVhURU5ECT0gMzAsCisJUklOR0JVRl9UWVBFX1RJTUVfU1RBTVAJCT0gMzEsCit9OworCisjaWZuZGVmIFRTX1NISUZUCisjZGVmaW5lIFRTX1NISUZUCQkyNworI2VuZGlmCisKKyNkZWZpbmUgTlNFQ1NfUEVSX1NFQwkJMTAwMDAwMDAwMFVMTAorI2RlZmluZSBOU0VDU19QRVJfVVNFQwkJMTAwMFVMTAorCitlbnVtIGZvcm1hdF9mbGFncyB7CisJRklFTERfSVNfQVJSQVkJCT0gMSwKKwlGSUVMRF9JU19QT0lOVEVSCT0gMiwKK307CisKK3N0cnVjdCBmb3JtYXRfZmllbGQgeworCXN0cnVjdCBmb3JtYXRfZmllbGQJKm5leHQ7CisJY2hhcgkJCSp0eXBlOworCWNoYXIJCQkqbmFtZTsKKwlpbnQJCQlvZmZzZXQ7CisJaW50CQkJc2l6ZTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKK307CisKK3N0cnVjdCBmb3JtYXQgeworCWludAkJCW5yX2NvbW1vbjsKKwlpbnQJCQlucl9maWVsZHM7CisJc3RydWN0IGZvcm1hdF9maWVsZAkqY29tbW9uX2ZpZWxkczsKKwlzdHJ1Y3QgZm9ybWF0X2ZpZWxkCSpmaWVsZHM7Cit9OworCitzdHJ1Y3QgcHJpbnRfYXJnX2F0b20geworCWNoYXIJCQkqYXRvbTsKK307CisKK3N0cnVjdCBwcmludF9hcmdfc3RyaW5nIHsKKwljaGFyCQkJKnN0cmluZzsKKwlpbnQJCQlvZmZzZXQ7Cit9OworCitzdHJ1Y3QgcHJpbnRfYXJnX2ZpZWxkIHsKKwljaGFyCQkJKm5hbWU7CisJc3RydWN0IGZvcm1hdF9maWVsZAkqZmllbGQ7Cit9OworCitzdHJ1Y3QgcHJpbnRfZmxhZ19zeW0geworCXN0cnVjdCBwcmludF9mbGFnX3N5bQkqbmV4dDsKKwljaGFyCQkJKnZhbHVlOworCWNoYXIJCQkqc3RyOworfTsKKworc3RydWN0IHByaW50X2FyZ190eXBlY2FzdCB7CisJY2hhciAJCQkqdHlwZTsKKwlzdHJ1Y3QgcHJpbnRfYXJnCSppdGVtOworfTsKKworc3RydWN0IHByaW50X2FyZ19mbGFncyB7CisJc3RydWN0IHByaW50X2FyZwkqZmllbGQ7CisJY2hhcgkJCSpkZWxpbTsKKwlzdHJ1Y3QgcHJpbnRfZmxhZ19zeW0JKmZsYWdzOworfTsKKworc3RydWN0IHByaW50X2FyZ19zeW1ib2wgeworCXN0cnVjdCBwcmludF9hcmcJKmZpZWxkOworCXN0cnVjdCBwcmludF9mbGFnX3N5bQkqc3ltYm9sczsKK307CisKK3N0cnVjdCBwcmludF9hcmc7CisKK3N0cnVjdCBwcmludF9hcmdfb3AgeworCWNoYXIJCQkqb3A7CisJaW50CQkJcHJpbzsKKwlzdHJ1Y3QgcHJpbnRfYXJnCSpsZWZ0OworCXN0cnVjdCBwcmludF9hcmcJKnJpZ2h0OworfTsKKworc3RydWN0IHByaW50X2FyZ19mdW5jIHsKKwljaGFyCQkJKm5hbWU7CisJc3RydWN0IHByaW50X2FyZwkqYXJnczsKK307CisKK2VudW0gcHJpbnRfYXJnX3R5cGUgeworCVBSSU5UX05VTEwsCisJUFJJTlRfQVRPTSwKKwlQUklOVF9GSUVMRCwKKwlQUklOVF9GTEFHUywKKwlQUklOVF9TWU1CT0wsCisJUFJJTlRfVFlQRSwKKwlQUklOVF9TVFJJTkcsCisJUFJJTlRfT1AsCit9OworCitzdHJ1Y3QgcHJpbnRfYXJnIHsKKwlzdHJ1Y3QgcHJpbnRfYXJnCQkqbmV4dDsKKwllbnVtIHByaW50X2FyZ190eXBlCQl0eXBlOworCXVuaW9uIHsKKwkJc3RydWN0IHByaW50X2FyZ19hdG9tCQlhdG9tOworCQlzdHJ1Y3QgcHJpbnRfYXJnX2ZpZWxkCQlmaWVsZDsKKwkJc3RydWN0IHByaW50X2FyZ190eXBlY2FzdAl0eXBlY2FzdDsKKwkJc3RydWN0IHByaW50X2FyZ19mbGFncwkJZmxhZ3M7CisJCXN0cnVjdCBwcmludF9hcmdfc3ltYm9sCQlzeW1ib2w7CisJCXN0cnVjdCBwcmludF9hcmdfZnVuYwkJZnVuYzsKKwkJc3RydWN0IHByaW50X2FyZ19zdHJpbmcJCXN0cmluZzsKKwkJc3RydWN0IHByaW50X2FyZ19vcAkJb3A7CisJfTsKK307CisKK3N0cnVjdCBwcmludF9mbXQgeworCWNoYXIJCQkqZm9ybWF0OworCXN0cnVjdCBwcmludF9hcmcJKmFyZ3M7Cit9OworCitzdHJ1Y3QgZXZlbnQgeworCXN0cnVjdCBldmVudAkJKm5leHQ7CisJY2hhcgkJCSpuYW1lOworCWludAkJCWlkOworCWludAkJCWZsYWdzOworCXN0cnVjdCBmb3JtYXQJCWZvcm1hdDsKKwlzdHJ1Y3QgcHJpbnRfZm10CXByaW50X2ZtdDsKK307CisKK2VudW0geworCUVWRU5UX0ZMX0lTRlRSQUNFCT0gMSwKKwlFVkVOVF9GTF9JU1BSSU5UCT0gMiwKKwlFVkVOVF9GTF9JU0JQUklOVAk9IDQsCisJRVZFTlRfRkxfSVNGVU5DCQk9IDgsCisJRVZFTlRfRkxfSVNGVU5DRU5UCT0gMTYsCisJRVZFTlRfRkxfSVNGVU5DUkVUCT0gMzIsCit9OworCitzdHJ1Y3QgcmVjb3JkIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdHM7CisJaW50IHNpemU7CisJdm9pZCAqZGF0YTsKK307CisKK3N0cnVjdCByZWNvcmQgKnRyYWNlX3BlZWtfZGF0YShpbnQgY3B1KTsKK3N0cnVjdCByZWNvcmQgKnRyYWNlX3JlYWRfZGF0YShpbnQgY3B1KTsKKwordm9pZCBwYXJzZV9zZXRfaW5mbyhpbnQgbnJfY3B1cywgaW50IGxvbmdfc3opOworCit2b2lkIHRyYWNlX3JlcG9ydCh2b2lkKTsKKwordm9pZCAqbWFsbG9jX29yX2RpZSh1bnNpZ25lZCBpbnQgc2l6ZSk7CisKK3ZvaWQgcGFyc2VfY21kbGluZXMoY2hhciAqZmlsZSwgaW50IHNpemUpOwordm9pZCBwYXJzZV9wcm9jX2thbGxzeW1zKGNoYXIgKmZpbGUsIHVuc2lnbmVkIGludCBzaXplKTsKK3ZvaWQgcGFyc2VfZnRyYWNlX3ByaW50ayhjaGFyICpmaWxlLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CisKK3ZvaWQgcHJpbnRfZnVuY3Modm9pZCk7Cit2b2lkIHByaW50X3ByaW50ayh2b2lkKTsKKworaW50IHBhcnNlX2Z0cmFjZV9maWxlKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2ludCBwYXJzZV9ldmVudF9maWxlKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCBjaGFyICpzeXN0ZW0pOwordm9pZCBwcmludF9ldmVudChpbnQgY3B1LCB2b2lkICpkYXRhLCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyBsb25nIG5zZWNzLAorCQkgIGNoYXIgKmNvbW0pOworCitleHRlcm4gaW50IGZpbGVfYmlnZW5kaWFuOworZXh0ZXJuIGludCBob3N0X2JpZ2VuZGlhbjsKKworaW50IGJpZ2VuZGlhbih2b2lkKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBfX2RhdGEyaG9zdDIodW5zaWduZWQgc2hvcnQgZGF0YSkKK3sKKwl1bnNpZ25lZCBzaG9ydCBzd2FwOworCisJaWYgKGhvc3RfYmlnZW5kaWFuID09IGZpbGVfYmlnZW5kaWFuKQorCQlyZXR1cm4gZGF0YTsKKworCXN3YXAgPSAoKGRhdGEgJiAweGZmVUxMKSA8PCA4KSB8CisJCSgoZGF0YSAmICgweGZmVUxMIDw8IDgpKSA+PiA4KTsKKworCXJldHVybiBzd2FwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2RhdGEyaG9zdDQodW5zaWduZWQgaW50IGRhdGEpCit7CisJdW5zaWduZWQgaW50IHN3YXA7CisKKwlpZiAoaG9zdF9iaWdlbmRpYW4gPT0gZmlsZV9iaWdlbmRpYW4pCisJCXJldHVybiBkYXRhOworCisJc3dhcCA9ICgoZGF0YSAmIDB4ZmZVTEwpIDw8IDI0KSB8CisJCSgoZGF0YSAmICgweGZmVUxMIDw8IDgpKSA8PCA4KSB8CisJCSgoZGF0YSAmICgweGZmVUxMIDw8IDE2KSkgPj4gOCkgfAorCQkoKGRhdGEgJiAoMHhmZlVMTCA8PCAyNCkpID4+IDI0KTsKKworCXJldHVybiBzd2FwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2RhdGEyaG9zdDgodW5zaWduZWQgbG9uZyBsb25nIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHN3YXA7CisKKwlpZiAoaG9zdF9iaWdlbmRpYW4gPT0gZmlsZV9iaWdlbmRpYW4pCisJCXJldHVybiBkYXRhOworCisJc3dhcCA9ICgoZGF0YSAmIDB4ZmZVTEwpIDw8IDU2KSB8CisJCSgoZGF0YSAmICgweGZmVUxMIDw8IDgpKSA8PCA0MCkgfAorCQkoKGRhdGEgJiAoMHhmZlVMTCA8PCAxNikpIDw8IDI0KSB8CisJCSgoZGF0YSAmICgweGZmVUxMIDw8IDI0KSkgPDwgOCkgfAorCQkoKGRhdGEgJiAoMHhmZlVMTCA8PCAzMikpID4+IDgpIHwKKwkJKChkYXRhICYgKDB4ZmZVTEwgPDwgNDApKSA+PiAyNCkgfAorCQkoKGRhdGEgJiAoMHhmZlVMTCA8PCA0OCkpID4+IDQwKSB8CisJCSgoZGF0YSAmICgweGZmVUxMIDw8IDU2KSkgPj4gNTYpOworCisJcmV0dXJuIHN3YXA7Cit9CisKKyNkZWZpbmUgZGF0YTJob3N0MihwdHIpCQlfX2RhdGEyaG9zdDIoKih1bnNpZ25lZCBzaG9ydCAqKXB0cikKKyNkZWZpbmUgZGF0YTJob3N0NChwdHIpCQlfX2RhdGEyaG9zdDQoKih1bnNpZ25lZCBpbnQgKilwdHIpCisjZGVmaW5lIGRhdGEyaG9zdDgocHRyKQkJX19kYXRhMmhvc3Q4KCoodW5zaWduZWQgbG9uZyBsb25nICopcHRyKQorCitleHRlcm4gaW50IGhlYWRlcl9wYWdlX3RzX29mZnNldDsKK2V4dGVybiBpbnQgaGVhZGVyX3BhZ2VfdHNfc2l6ZTsKK2V4dGVybiBpbnQgaGVhZGVyX3BhZ2Vfc2l6ZV9vZmZzZXQ7CitleHRlcm4gaW50IGhlYWRlcl9wYWdlX3NpemVfc2l6ZTsKK2V4dGVybiBpbnQgaGVhZGVyX3BhZ2VfZGF0YV9vZmZzZXQ7CitleHRlcm4gaW50IGhlYWRlcl9wYWdlX2RhdGFfc2l6ZTsKKworaW50IHBhcnNlX2hlYWRlcl9wYWdlKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKTsKKwordm9pZCByZWFkX3RyYWNpbmdfZGF0YShzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKnBhdHRycywgaW50IG5iX2NvdW50ZXJzKTsKKworI2VuZGlmIC8qIF9UUkFDRV9FVkVOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3V0aWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKaW5kZXggNjhmZTE1Ny4uOWRlMjMyOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3V0aWwuaAorKysgYi90b29scy9wZXJmL3V0aWwvdXRpbC5oCkBAIC0zOSwxMCArMzksNiBAQAogLyogQXBwcm94aW1hdGlvbiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdHlwZS4gKi8KICNkZWZpbmUgZGVjaW1hbF9sZW5ndGgoeCkJKChpbnQpKHNpemVvZih4KSAqIDIuNTYgKyAwLjUpICsgMSkKIAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19GcmVlQlNEX18pICAmJiAhZGVmaW5lZChfX1VTTENfXykgJiYgIWRlZmluZWQoX01fVU5JWCkKLSNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAgLyogZ2xpYmMyIGFuZCBBSVggNS4zTCBuZWVkIDUwMCwgT3BlbkJTRCBuZWVkcyA2MDAgZm9yIFNfSVNMTksoKSAqLwotI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEgLyogQUlYIDUuM0wgbmVlZHMgdGhpcyAqLwotI2VuZGlmCiAjZGVmaW5lIF9BTExfU09VUkNFIDEKICNkZWZpbmUgX0dOVV9TT1VSQ0UgMQogI2RlZmluZSBfQlNEX1NPVVJDRSAxCkBAIC04Myw2ICs3OSw3IEBACiAjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L21hZ2ljLmgiCiAKKwogI2lmbmRlZiBOT19JQ09OVgogI2luY2x1ZGUgPGljb252Lmg+CiAjZW5kaWYKQEAgLTMxMCw2ICszMDcsNyBAQAogI3VuZGVmIGlzc3BhY2UKICN1bmRlZiBpc2RpZ2l0CiAjdW5kZWYgaXNhbHBoYQorI3VuZGVmIGlzcHJpbnQKICN1bmRlZiBpc2FsbnVtCiAjdW5kZWYgdG9sb3dlcgogI3VuZGVmIHRvdXBwZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYyBiL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzE1ZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5jCkBAIC0wLDAgKzEsMjMwIEBACisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAidmFsdWVzLmgiCisKK3ZvaWQgcGVyZl9yZWFkX3ZhbHVlc19pbml0KHN0cnVjdCBwZXJmX3JlYWRfdmFsdWVzICp2YWx1ZXMpCit7CisJdmFsdWVzLT50aHJlYWRzX21heCA9IDE2OworCXZhbHVlcy0+cGlkID0gbWFsbG9jKHZhbHVlcy0+dGhyZWFkc19tYXggKiBzaXplb2YoKnZhbHVlcy0+cGlkKSk7CisJdmFsdWVzLT50aWQgPSBtYWxsb2ModmFsdWVzLT50aHJlYWRzX21heCAqIHNpemVvZigqdmFsdWVzLT50aWQpKTsKKwl2YWx1ZXMtPnZhbHVlID0gbWFsbG9jKHZhbHVlcy0+dGhyZWFkc19tYXggKiBzaXplb2YoKnZhbHVlcy0+dmFsdWUpKTsKKwlpZiAoIXZhbHVlcy0+cGlkIHx8ICF2YWx1ZXMtPnRpZCB8fCAhdmFsdWVzLT52YWx1ZSkKKwkJZGllKCJmYWlsZWQgdG8gYWxsb2NhdGUgcmVhZF92YWx1ZXMgdGhyZWFkcyBhcnJheXMiKTsKKwl2YWx1ZXMtPnRocmVhZHMgPSAwOworCisJdmFsdWVzLT5jb3VudGVyc19tYXggPSAxNjsKKwl2YWx1ZXMtPmNvdW50ZXJyYXdpZCA9IG1hbGxvYyh2YWx1ZXMtPmNvdW50ZXJzX21heAorCQkJCSAgICAgICogc2l6ZW9mKCp2YWx1ZXMtPmNvdW50ZXJyYXdpZCkpOworCXZhbHVlcy0+Y291bnRlcm5hbWUgPSBtYWxsb2ModmFsdWVzLT5jb3VudGVyc19tYXgKKwkJCQkgICAgICogc2l6ZW9mKCp2YWx1ZXMtPmNvdW50ZXJuYW1lKSk7CisJaWYgKCF2YWx1ZXMtPmNvdW50ZXJyYXdpZCB8fCAhdmFsdWVzLT5jb3VudGVybmFtZSkKKwkJZGllKCJmYWlsZWQgdG8gYWxsb2NhdGUgcmVhZF92YWx1ZXMgY291bnRlcnMgYXJyYXlzIik7CisJdmFsdWVzLT5jb3VudGVycyA9IDA7Cit9CisKK3ZvaWQgcGVyZl9yZWFkX3ZhbHVlc19kZXN0cm95KHN0cnVjdCBwZXJmX3JlYWRfdmFsdWVzICp2YWx1ZXMpCit7CisJaW50IGk7CisKKwlpZiAoIXZhbHVlcy0+dGhyZWFkc19tYXggfHwgIXZhbHVlcy0+Y291bnRlcnNfbWF4KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLT50aHJlYWRzOyBpKyspCisJCWZyZWUodmFsdWVzLT52YWx1ZVtpXSk7CisJZnJlZSh2YWx1ZXMtPnBpZCk7CisJZnJlZSh2YWx1ZXMtPnRpZCk7CisJZnJlZSh2YWx1ZXMtPmNvdW50ZXJyYXdpZCk7CisJZm9yIChpID0gMDsgaSA8IHZhbHVlcy0+Y291bnRlcnM7IGkrKykKKwkJZnJlZSh2YWx1ZXMtPmNvdW50ZXJuYW1lW2ldKTsKKwlmcmVlKHZhbHVlcy0+Y291bnRlcm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX3JlYWRfdmFsdWVzX19lbmxhcmdlX3RocmVhZHMoc3RydWN0IHBlcmZfcmVhZF92YWx1ZXMgKnZhbHVlcykKK3sKKwl2YWx1ZXMtPnRocmVhZHNfbWF4ICo9IDI7CisJdmFsdWVzLT5waWQgPSByZWFsbG9jKHZhbHVlcy0+cGlkLAorCQkJICAgICAgdmFsdWVzLT50aHJlYWRzX21heCAqIHNpemVvZigqdmFsdWVzLT5waWQpKTsKKwl2YWx1ZXMtPnRpZCA9IHJlYWxsb2ModmFsdWVzLT50aWQsCisJCQkgICAgICB2YWx1ZXMtPnRocmVhZHNfbWF4ICogc2l6ZW9mKCp2YWx1ZXMtPnRpZCkpOworCXZhbHVlcy0+dmFsdWUgPSByZWFsbG9jKHZhbHVlcy0+dmFsdWUsCisJCQkJdmFsdWVzLT50aHJlYWRzX21heCAqIHNpemVvZigqdmFsdWVzLT52YWx1ZSkpOworCWlmICghdmFsdWVzLT5waWQgfHwgIXZhbHVlcy0+dGlkIHx8ICF2YWx1ZXMtPnZhbHVlKQorCQlkaWUoImZhaWxlZCB0byBlbmxhcmdlIHJlYWRfdmFsdWVzIHRocmVhZHMgYXJyYXlzIik7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9yZWFkX3ZhbHVlc19fZmluZG5ld190aHJlYWQoc3RydWN0IHBlcmZfcmVhZF92YWx1ZXMgKnZhbHVlcywKKwkJCQkJICAgIHUzMiBwaWQsIHUzMiB0aWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLT50aHJlYWRzOyBpKyspCisJCWlmICh2YWx1ZXMtPnBpZFtpXSA9PSBwaWQgJiYgdmFsdWVzLT50aWRbaV0gPT0gdGlkKQorCQkJcmV0dXJuIGk7CisKKwlpZiAodmFsdWVzLT50aHJlYWRzID09IHZhbHVlcy0+dGhyZWFkc19tYXgpCisJCXBlcmZfcmVhZF92YWx1ZXNfX2VubGFyZ2VfdGhyZWFkcyh2YWx1ZXMpOworCisJaSA9IHZhbHVlcy0+dGhyZWFkcysrOworCXZhbHVlcy0+cGlkW2ldID0gcGlkOworCXZhbHVlcy0+dGlkW2ldID0gdGlkOworCXZhbHVlcy0+dmFsdWVbaV0gPSBtYWxsb2ModmFsdWVzLT5jb3VudGVyc19tYXggKiBzaXplb2YoKip2YWx1ZXMtPnZhbHVlKSk7CisJaWYgKCF2YWx1ZXMtPnZhbHVlW2ldKQorCQlkaWUoImZhaWxlZCB0byBhbGxvY2F0ZSByZWFkX3ZhbHVlcyBjb3VudGVycyBhcnJheSIpOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfcmVhZF92YWx1ZXNfX2VubGFyZ2VfY291bnRlcnMoc3RydWN0IHBlcmZfcmVhZF92YWx1ZXMgKnZhbHVlcykKK3sKKwlpbnQgaTsKKworCXZhbHVlcy0+Y291bnRlcnNfbWF4ICo9IDI7CisJdmFsdWVzLT5jb3VudGVycmF3aWQgPSByZWFsbG9jKHZhbHVlcy0+Y291bnRlcnJhd2lkLAorCQkJCSAgICAgICB2YWx1ZXMtPmNvdW50ZXJzX21heCAqIHNpemVvZigqdmFsdWVzLT5jb3VudGVycmF3aWQpKTsKKwl2YWx1ZXMtPmNvdW50ZXJuYW1lID0gcmVhbGxvYyh2YWx1ZXMtPmNvdW50ZXJuYW1lLAorCQkJCSAgICAgIHZhbHVlcy0+Y291bnRlcnNfbWF4ICogc2l6ZW9mKCp2YWx1ZXMtPmNvdW50ZXJuYW1lKSk7CisJaWYgKCF2YWx1ZXMtPmNvdW50ZXJyYXdpZCB8fCAhdmFsdWVzLT5jb3VudGVybmFtZSkKKwkJZGllKCJmYWlsZWQgdG8gZW5sYXJnZSByZWFkX3ZhbHVlcyBjb3VudGVycyBhcnJheXMiKTsKKworCWZvciAoaSA9IDA7IGkgPCB2YWx1ZXMtPnRocmVhZHM7IGkrKykgeworCQl2YWx1ZXMtPnZhbHVlW2ldID0gcmVhbGxvYyh2YWx1ZXMtPnZhbHVlW2ldLAorCQkJCQkgICB2YWx1ZXMtPmNvdW50ZXJzX21heCAqIHNpemVvZigqKnZhbHVlcy0+dmFsdWUpKTsKKwkJaWYgKCF2YWx1ZXMtPnZhbHVlW2ldKQorCQkJZGllKCJmYWlsZWQgdG8gZW5sYXJnZSByZWFkX3ZhbHVlcyBjb3VudGVycyBhcnJheXMiKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9yZWFkX3ZhbHVlc19fZmluZG5ld19jb3VudGVyKHN0cnVjdCBwZXJmX3JlYWRfdmFsdWVzICp2YWx1ZXMsCisJCQkJCSAgICAgdTY0IHJhd2lkLCBjb25zdCBjaGFyICpuYW1lKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHZhbHVlcy0+Y291bnRlcnM7IGkrKykKKwkJaWYgKHZhbHVlcy0+Y291bnRlcnJhd2lkW2ldID09IHJhd2lkKQorCQkJcmV0dXJuIGk7CisKKwlpZiAodmFsdWVzLT5jb3VudGVycyA9PSB2YWx1ZXMtPmNvdW50ZXJzX21heCkKKwkJcGVyZl9yZWFkX3ZhbHVlc19fZW5sYXJnZV9jb3VudGVycyh2YWx1ZXMpOworCisJaSA9IHZhbHVlcy0+Y291bnRlcnMrKzsKKwl2YWx1ZXMtPmNvdW50ZXJyYXdpZFtpXSA9IHJhd2lkOworCXZhbHVlcy0+Y291bnRlcm5hbWVbaV0gPSBzdHJkdXAobmFtZSk7CisKKwlyZXR1cm4gaTsKK30KKwordm9pZCBwZXJmX3JlYWRfdmFsdWVzX2FkZF92YWx1ZShzdHJ1Y3QgcGVyZl9yZWFkX3ZhbHVlcyAqdmFsdWVzLAorCQkJCXUzMiBwaWQsIHUzMiB0aWQsCisJCQkJdTY0IHJhd2lkLCBjb25zdCBjaGFyICpuYW1lLCB1NjQgdmFsdWUpCit7CisJaW50IHRpbmRleCwgY2luZGV4OworCisJdGluZGV4ID0gcGVyZl9yZWFkX3ZhbHVlc19fZmluZG5ld190aHJlYWQodmFsdWVzLCBwaWQsIHRpZCk7CisJY2luZGV4ID0gcGVyZl9yZWFkX3ZhbHVlc19fZmluZG5ld19jb3VudGVyKHZhbHVlcywgcmF3aWQsIG5hbWUpOworCisJdmFsdWVzLT52YWx1ZVt0aW5kZXhdW2NpbmRleF0gPSB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9yZWFkX3ZhbHVlc19fZGlzcGxheV9wcmV0dHkoRklMRSAqZnAsCisJCQkJCSAgICAgc3RydWN0IHBlcmZfcmVhZF92YWx1ZXMgKnZhbHVlcykKK3sKKwlpbnQgaSwgajsKKwlpbnQgcGlkd2lkdGgsIHRpZHdpZHRoOworCWludCAqY291bnRlcndpZHRoOworCisJY291bnRlcndpZHRoID0gbWFsbG9jKHZhbHVlcy0+Y291bnRlcnMgKiBzaXplb2YoKmNvdW50ZXJ3aWR0aCkpOworCWlmICghY291bnRlcndpZHRoKQorCQlkaWUoImZhaWxlZCB0byBhbGxvY2F0ZSBjb3VudGVyd2lkdGggYXJyYXkiKTsKKwl0aWR3aWR0aCA9IDM7CisJcGlkd2lkdGggPSAzOworCWZvciAoaiA9IDA7IGogPCB2YWx1ZXMtPmNvdW50ZXJzOyBqKyspCisJCWNvdW50ZXJ3aWR0aFtqXSA9IHN0cmxlbih2YWx1ZXMtPmNvdW50ZXJuYW1lW2pdKTsKKwlmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLT50aHJlYWRzOyBpKyspIHsKKwkJaW50IHdpZHRoOworCisJCXdpZHRoID0gc25wcmludGYoTlVMTCwgMCwgIiVkIiwgdmFsdWVzLT5waWRbaV0pOworCQlpZiAod2lkdGggPiBwaWR3aWR0aCkKKwkJCXBpZHdpZHRoID0gd2lkdGg7CisJCXdpZHRoID0gc25wcmludGYoTlVMTCwgMCwgIiVkIiwgdmFsdWVzLT50aWRbaV0pOworCQlpZiAod2lkdGggPiB0aWR3aWR0aCkKKwkJCXRpZHdpZHRoID0gd2lkdGg7CisJCWZvciAoaiA9IDA7IGogPCB2YWx1ZXMtPmNvdW50ZXJzOyBqKyspIHsKKwkJCXdpZHRoID0gc25wcmludGYoTlVMTCwgMCwgIiVMdSIsIHZhbHVlcy0+dmFsdWVbaV1bal0pOworCQkJaWYgKHdpZHRoID4gY291bnRlcndpZHRoW2pdKQorCQkJCWNvdW50ZXJ3aWR0aFtqXSA9IHdpZHRoOworCQl9CisJfQorCisJZnByaW50ZihmcCwgIiMgJSpzICAlKnMiLCBwaWR3aWR0aCwgIlBJRCIsIHRpZHdpZHRoLCAiVElEIik7CisJZm9yIChqID0gMDsgaiA8IHZhbHVlcy0+Y291bnRlcnM7IGorKykKKwkJZnByaW50ZihmcCwgIiAgJSpzIiwgY291bnRlcndpZHRoW2pdLCB2YWx1ZXMtPmNvdW50ZXJuYW1lW2pdKTsKKwlmcHJpbnRmKGZwLCAiXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCB2YWx1ZXMtPnRocmVhZHM7IGkrKykgeworCQlmcHJpbnRmKGZwLCAiICAlKmQgICUqZCIsIHBpZHdpZHRoLCB2YWx1ZXMtPnBpZFtpXSwKKwkJCXRpZHdpZHRoLCB2YWx1ZXMtPnRpZFtpXSk7CisJCWZvciAoaiA9IDA7IGogPCB2YWx1ZXMtPmNvdW50ZXJzOyBqKyspCisJCQlmcHJpbnRmKGZwLCAiICAlKkx1IiwKKwkJCQljb3VudGVyd2lkdGhbal0sIHZhbHVlcy0+dmFsdWVbaV1bal0pOworCQlmcHJpbnRmKGZwLCAiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfcmVhZF92YWx1ZXNfX2Rpc3BsYXlfcmF3KEZJTEUgKmZwLAorCQkJCQkgIHN0cnVjdCBwZXJmX3JlYWRfdmFsdWVzICp2YWx1ZXMpCit7CisJaW50IHdpZHRoLCBwaWR3aWR0aCwgdGlkd2lkdGgsIG5hbWV3aWR0aCwgcmF3d2lkdGgsIGNvdW50d2lkdGg7CisJaW50IGksIGo7CisKKwl0aWR3aWR0aCA9IDM7IC8qIFRJRCAqLworCXBpZHdpZHRoID0gMzsgLyogUElEICovCisJbmFtZXdpZHRoID0gNDsgLyogIk5hbWUiICovCisJcmF3d2lkdGggPSAzOyAvKiAiUmF3IiAqLworCWNvdW50d2lkdGggPSA1OyAvKiAiQ291bnQiICovCisKKwlmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLT50aHJlYWRzOyBpKyspIHsKKwkJd2lkdGggPSBzbnByaW50ZihOVUxMLCAwLCAiJWQiLCB2YWx1ZXMtPnBpZFtpXSk7CisJCWlmICh3aWR0aCA+IHBpZHdpZHRoKQorCQkJcGlkd2lkdGggPSB3aWR0aDsKKwkJd2lkdGggPSBzbnByaW50ZihOVUxMLCAwLCAiJWQiLCB2YWx1ZXMtPnRpZFtpXSk7CisJCWlmICh3aWR0aCA+IHRpZHdpZHRoKQorCQkJdGlkd2lkdGggPSB3aWR0aDsKKwl9CisJZm9yIChqID0gMDsgaiA8IHZhbHVlcy0+Y291bnRlcnM7IGorKykgeworCQl3aWR0aCA9IHN0cmxlbih2YWx1ZXMtPmNvdW50ZXJuYW1lW2pdKTsKKwkJaWYgKHdpZHRoID4gbmFtZXdpZHRoKQorCQkJbmFtZXdpZHRoID0gd2lkdGg7CisJCXdpZHRoID0gc25wcmludGYoTlVMTCwgMCwgIiVsbHgiLCB2YWx1ZXMtPmNvdW50ZXJyYXdpZFtqXSk7CisJCWlmICh3aWR0aCA+IHJhd3dpZHRoKQorCQkJcmF3d2lkdGggPSB3aWR0aDsKKwl9CisJZm9yIChpID0gMDsgaSA8IHZhbHVlcy0+dGhyZWFkczsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCB2YWx1ZXMtPmNvdW50ZXJzOyBqKyspIHsKKwkJCXdpZHRoID0gc25wcmludGYoTlVMTCwgMCwgIiVMdSIsIHZhbHVlcy0+dmFsdWVbaV1bal0pOworCQkJaWYgKHdpZHRoID4gY291bnR3aWR0aCkKKwkJCQljb3VudHdpZHRoID0gd2lkdGg7CisJCX0KKwl9CisKKwlmcHJpbnRmKGZwLCAiIyAlKnMgICUqcyAgJSpzICAlKnMgICUqc1xuIiwKKwkJcGlkd2lkdGgsICJQSUQiLCB0aWR3aWR0aCwgIlRJRCIsCisJCW5hbWV3aWR0aCwgIk5hbWUiLCByYXd3aWR0aCwgIlJhdyIsCisJCWNvdW50d2lkdGgsICJDb3VudCIpOworCWZvciAoaSA9IDA7IGkgPCB2YWx1ZXMtPnRocmVhZHM7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IHZhbHVlcy0+Y291bnRlcnM7IGorKykKKwkJCWZwcmludGYoZnAsICIgICUqZCAgJSpkICAlKnMgICUqbGx4ICAlKkx1XG4iLAorCQkJCXBpZHdpZHRoLCB2YWx1ZXMtPnBpZFtpXSwKKwkJCQl0aWR3aWR0aCwgdmFsdWVzLT50aWRbaV0sCisJCQkJbmFtZXdpZHRoLCB2YWx1ZXMtPmNvdW50ZXJuYW1lW2pdLAorCQkJCXJhd3dpZHRoLCB2YWx1ZXMtPmNvdW50ZXJyYXdpZFtqXSwKKwkJCQljb3VudHdpZHRoLCB2YWx1ZXMtPnZhbHVlW2ldW2pdKTsKK30KKwordm9pZCBwZXJmX3JlYWRfdmFsdWVzX2Rpc3BsYXkoRklMRSAqZnAsIHN0cnVjdCBwZXJmX3JlYWRfdmFsdWVzICp2YWx1ZXMsIGludCByYXcpCit7CisJaWYgKHJhdykKKwkJcGVyZl9yZWFkX3ZhbHVlc19fZGlzcGxheV9yYXcoZnAsIHZhbHVlcyk7CisJZWxzZQorCQlwZXJmX3JlYWRfdmFsdWVzX19kaXNwbGF5X3ByZXR0eShmcCwgdmFsdWVzKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuaCBiL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWRmOGNmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX1BFUkZfVkFMVUVTX0gKKyNkZWZpbmUgX1BFUkZfVkFMVUVTX0gKKworI2luY2x1ZGUgInR5cGVzLmgiCisKK3N0cnVjdCBwZXJmX3JlYWRfdmFsdWVzIHsKKwlpbnQgdGhyZWFkczsKKwlpbnQgdGhyZWFkc19tYXg7CisJdTMyICpwaWQsICp0aWQ7CisJaW50IGNvdW50ZXJzOworCWludCBjb3VudGVyc19tYXg7CisJdTY0ICpjb3VudGVycmF3aWQ7CisJY2hhciAqKmNvdW50ZXJuYW1lOworCXU2NCAqKnZhbHVlOworfTsKKwordm9pZCBwZXJmX3JlYWRfdmFsdWVzX2luaXQoc3RydWN0IHBlcmZfcmVhZF92YWx1ZXMgKnZhbHVlcyk7Cit2b2lkIHBlcmZfcmVhZF92YWx1ZXNfZGVzdHJveShzdHJ1Y3QgcGVyZl9yZWFkX3ZhbHVlcyAqdmFsdWVzKTsKKwordm9pZCBwZXJmX3JlYWRfdmFsdWVzX2FkZF92YWx1ZShzdHJ1Y3QgcGVyZl9yZWFkX3ZhbHVlcyAqdmFsdWVzLAorCQkJCXUzMiBwaWQsIHUzMiB0aWQsCisJCQkJdTY0IHJhd2lkLCBjb25zdCBjaGFyICpuYW1lLCB1NjQgdmFsdWUpOworCit2b2lkIHBlcmZfcmVhZF92YWx1ZXNfZGlzcGxheShGSUxFICpmcCwgc3RydWN0IHBlcmZfcmVhZF92YWx1ZXMgKnZhbHVlcywKKwkJCSAgICAgIGludCByYXcpOworCisjZW5kaWYgLyogX1BFUkZfVkFMVUVTX0ggKi8KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL0tjb25maWcgYi92aXJ0L2t2bS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZWNlMzYKLS0tIC9kZXYvbnVsbAorKysgYi92aXJ0L2t2bS9LY29uZmlnCkBAIC0wLDAgKzEsMTQgQEAKKyMgS1ZNIGNvbW1vbiBjb25maWd1cmF0aW9uIGl0ZW1zIGFuZCBkZWZhdWx0cworCitjb25maWcgSEFWRV9LVk0KKyAgICAgICBib29sCisKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorCitjb25maWcgSEFWRV9LVk1fRVZFTlRGRAorICAgICAgIGJvb2wKKyAgICAgICBzZWxlY3QgRVZFTlRGRAorCitjb25maWcgS1ZNX0FQSUNfQVJDSElURUNUVVJFCisgICAgICAgYm9vbApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vY29hbGVzY2VkX21taW8uYyBiL3ZpcnQva3ZtL2NvYWxlc2NlZF9tbWlvLmMKaW5kZXggNWFlNjIwZC4uMDRkNjljZCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vY29hbGVzY2VkX21taW8uYworKysgYi92aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5jCkBAIC0xNCwzMiArMTQsMjggQEAKIAogI2luY2x1ZGUgImNvYWxlc2NlZF9tbWlvLmgiCiAKLXN0YXRpYyBpbnQgY29hbGVzY2VkX21taW9faW5fcmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCi0JCQkJICAgZ3BhX3QgYWRkciwgaW50IGxlbiwgaW50IGlzX3dyaXRlKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiAqdG9fbW1pbyhzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fZGV2ICpkZXYgPQotCQkJCShzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiopdGhpcy0+cHJpdmF0ZTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19kZXYsIGRldik7Cit9CisKK3N0YXRpYyBpbnQgY29hbGVzY2VkX21taW9faW5fcmFuZ2Uoc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19kZXYgKmRldiwKKwkJCQkgICBncGFfdCBhZGRyLCBpbnQgbGVuKQorewogCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSAqem9uZTsKLQlpbnQgbmV4dDsKKwlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3JpbmcgKnJpbmc7CisJdW5zaWduZWQgYXZhaWw7CiAJaW50IGk7CiAKLQlpZiAoIWlzX3dyaXRlKQotCQlyZXR1cm4gMDsKLQotCS8qIGt2bS0+bG9jayBpcyB0YWtlbiBieSB0aGUgY2FsbGVyIGFuZCBtdXN0IGJlIG5vdCByZWxlYXNlZCBiZWZvcmUKLSAgICAgICAgICogZGV2LnJlYWQvd3JpdGUKLSAgICAgICAgICovCi0KIAkvKiBBcmUgd2UgYWJsZSB0byBiYXRjaCBpdCA/ICovCiAKIAkvKiBsYXN0IGlzIHRoZSBmaXJzdCBmcmVlIGVudHJ5CiAJICogY2hlY2sgaWYgd2UgZG9uJ3QgbWVldCB0aGUgZmlyc3QgdXNlZCBlbnRyeQogCSAqIHRoZXJlIGlzIGFsd2F5cyBvbmUgdW51c2VkIGVudHJ5IGluIHRoZSBidWZmZXIKIAkgKi8KLQotCW5leHQgPSAoZGV2LT5rdm0tPmNvYWxlc2NlZF9tbWlvX3JpbmctPmxhc3QgKyAxKSAlCi0JCQkJCQkJS1ZNX0NPQUxFU0NFRF9NTUlPX01BWDsKLQlpZiAobmV4dCA9PSBkZXYtPmt2bS0+Y29hbGVzY2VkX21taW9fcmluZy0+Zmlyc3QpIHsKKwlyaW5nID0gZGV2LT5rdm0tPmNvYWxlc2NlZF9tbWlvX3Jpbmc7CisJYXZhaWwgPSAocmluZy0+Zmlyc3QgLSByaW5nLT5sYXN0IC0gMSkgJSBLVk1fQ09BTEVTQ0VEX01NSU9fTUFYOworCWlmIChhdmFpbCA8IEtWTV9NQVhfVkNQVVMpIHsKIAkJLyogZnVsbCAqLwogCQlyZXR1cm4gMDsKIAl9CkBAIC02MCwxNCArNTYsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY29hbGVzY2VkX21taW9fd3JpdGUoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCi0JCQkJIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnN0IHZvaWQgKnZhbCkKK3N0YXRpYyBpbnQgY29hbGVzY2VkX21taW9fd3JpdGUoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCisJCQkJZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc3Qgdm9pZCAqdmFsKQogewotCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fZGV2ICpkZXYgPQotCQkJCShzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiopdGhpcy0+cHJpdmF0ZTsKKwlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiAqZGV2ID0gdG9fbW1pbyh0aGlzKTsKIAlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3JpbmcgKnJpbmcgPSBkZXYtPmt2bS0+Y29hbGVzY2VkX21taW9fcmluZzsKKwlpZiAoIWNvYWxlc2NlZF9tbWlvX2luX3JhbmdlKGRldiwgYWRkciwgbGVuKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JLyoga3ZtLT5sb2NrIG11c3QgYmUgdGFrZW4gYnkgY2FsbGVyIGJlZm9yZSBjYWxsIHRvIGluX3JhbmdlKCkqLworCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKIAogCS8qIGNvcHkgZGF0YSBpbiBmaXJzdCBmcmVlIGVudHJ5IG9mIHRoZSByaW5nICovCiAKQEAgLTc2LDI5ICs3Myw0MCBAQAogCW1lbWNweShyaW5nLT5jb2FsZXNjZWRfbW1pb1tyaW5nLT5sYXN0XS5kYXRhLCB2YWwsIGxlbik7CiAJc21wX3dtYigpOwogCXJpbmctPmxhc3QgPSAocmluZy0+bGFzdCArIDEpICUgS1ZNX0NPQUxFU0NFRF9NTUlPX01BWDsKKwlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgY29hbGVzY2VkX21taW9fZGVzdHJ1Y3RvcihzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcykKIHsKLQlrZnJlZSh0aGlzKTsKKwlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiAqZGV2ID0gdG9fbW1pbyh0aGlzKTsKKworCWtmcmVlKGRldik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgY29hbGVzY2VkX21taW9fb3BzID0geworCS53cml0ZSAgICAgID0gY29hbGVzY2VkX21taW9fd3JpdGUsCisJLmRlc3RydWN0b3IgPSBjb2FsZXNjZWRfbW1pb19kZXN0cnVjdG9yLAorfTsKKwogaW50IGt2bV9jb2FsZXNjZWRfbW1pb19pbml0KHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiAqZGV2OworCWludCByZXQ7CiAKIAlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiksIEdGUF9LRVJORUwpOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKLQlkZXYtPmRldi53cml0ZSAgPSBjb2FsZXNjZWRfbW1pb193cml0ZTsKLQlkZXYtPmRldi5pbl9yYW5nZSAgPSBjb2FsZXNjZWRfbW1pb19pbl9yYW5nZTsKLQlkZXYtPmRldi5kZXN0cnVjdG9yICA9IGNvYWxlc2NlZF9tbWlvX2Rlc3RydWN0b3I7Ci0JZGV2LT5kZXYucHJpdmF0ZSAgPSBkZXY7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+bG9jayk7CisJa3ZtX2lvZGV2aWNlX2luaXQoJmRldi0+ZGV2LCAmY29hbGVzY2VkX21taW9fb3BzKTsKIAlkZXYtPmt2bSA9IGt2bTsKIAlrdm0tPmNvYWxlc2NlZF9tbWlvX2RldiA9IGRldjsKLQlrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldigma3ZtLT5tbWlvX2J1cywgJmRldi0+ZGV2KTsKIAotCXJldHVybiAwOworCXJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgJmt2bS0+bW1pb19idXMsICZkZXYtPmRldik7CisJaWYgKHJldCA8IDApCisJCWtmcmVlKGRldik7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQga3ZtX3ZtX2lvY3RsX3JlZ2lzdGVyX2NvYWxlc2NlZF9tbWlvKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTEwOSwxNiArMTE3LDE2IEBACiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAlpZiAoZGV2LT5uYl96b25lcyA+PSBLVk1fQ09BTEVTQ0VEX01NSU9fWk9ORV9NQVgpIHsKLQkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCQl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAkJcmV0dXJuIC1FTk9CVUZTOwogCX0KIAogCWRldi0+em9uZVtkZXYtPm5iX3pvbmVzXSA9ICp6b25lOwogCWRldi0+bmJfem9uZXMrKzsKIAotCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMyLDcgKzE0MCw3IEBACiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAogCWkgPSBkZXYtPm5iX3pvbmVzOwogCXdoaWxlKGkpIHsKQEAgLTE1MCw3ICsxNTgsNyBAQAogCQlpLS07CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5oIGIvdmlydC9rdm0vY29hbGVzY2VkX21taW8uaAppbmRleCA1YWMwZWM2Li40YjQ5ZjI3IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5oCisrKyBiL3ZpcnQva3ZtL2NvYWxlc2NlZF9tbWlvLmgKQEAgLTEyLDYgKzEyLDcgQEAKIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fZGV2IHsKIAlzdHJ1Y3Qga3ZtX2lvX2RldmljZSBkZXY7CiAJc3RydWN0IGt2bSAqa3ZtOworCXNwaW5sb2NrX3QgbG9jazsKIAlpbnQgbmJfem9uZXM7CiAJc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lIHpvbmVbS1ZNX0NPQUxFU0NFRF9NTUlPX1pPTkVfTUFYXTsKIH07CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ldmVudGZkLmMgYi92aXJ0L2t2bS9ldmVudGZkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0ZWJkOAotLS0gL2Rldi9udWxsCisrKyBiL3ZpcnQva3ZtL2V2ZW50ZmQuYwpAQCAtMCwwICsxLDU3OCBAQAorLyoKKyAqIGt2bSBldmVudGZkIHN1cHBvcnQgLSB1c2UgZXZlbnRmZCBvYmplY3RzIHRvIHNpZ25hbCB2YXJpb3VzIEtWTSBldmVudHMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBOb3ZlbGwuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIEF1dGhvcjoKKyAqCUdyZWdvcnkgSGFza2lucyA8Z2hhc2tpbnNAbm92ZWxsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2V2ZW50ZmQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgImlvZGV2LmgiCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogaXJxZmQ6IEFsbG93cyBhbiBmZCB0byBiZSB1c2VkIHRvIGluamVjdCBhbiBpbnRlcnJ1cHQgdG8gdGhlIGd1ZXN0CisgKgorICogQ3JlZGl0IGdvZXMgdG8gQXZpIEtpdml0eSBmb3IgdGhlIG9yaWdpbmFsIGlkZWEuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0cnVjdCBfaXJxZmQgeworCXN0cnVjdCBrdm0gICAgICAgICAgICAgICAqa3ZtOworCXN0cnVjdCBldmVudGZkX2N0eCAgICAgICAqZXZlbnRmZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgIGdzaTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgIGxpc3Q7CisJcG9sbF90YWJsZSAgICAgICAgICAgICAgICBwdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICAgKndxaDsKKwl3YWl0X3F1ZXVlX3QgICAgICAgICAgICAgIHdhaXQ7CisJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgICBpbmplY3Q7CisJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgICBzaHV0ZG93bjsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqaXJxZmRfY2xlYW51cF93cTsKKworc3RhdGljIHZvaWQKK2lycWZkX2luamVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IF9pcnFmZCAqaXJxZmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IF9pcnFmZCwgaW5qZWN0KTsKKwlzdHJ1Y3Qga3ZtICprdm0gPSBpcnFmZC0+a3ZtOworCisJbXV0ZXhfbG9jaygma3ZtLT5pcnFfbG9jayk7CisJa3ZtX3NldF9pcnEoa3ZtLCBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsIGlycWZkLT5nc2ksIDEpOworCWt2bV9zZXRfaXJxKGt2bSwgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELCBpcnFmZC0+Z3NpLCAwKTsKKwltdXRleF91bmxvY2soJmt2bS0+aXJxX2xvY2spOworfQorCisvKgorICogUmFjZS1mcmVlIGRlY291cGxlIGxvZ2ljIChvcmRlcmluZyBpcyBjcml0aWNhbCkKKyAqLworc3RhdGljIHZvaWQKK2lycWZkX3NodXRkb3duKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgX2lycWZkICppcnFmZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgX2lycWZkLCBzaHV0ZG93bik7CisKKwkvKgorCSAqIFN5bmNocm9uaXplIHdpdGggdGhlIHdhaXQtcXVldWUgYW5kIHVuaG9vayBvdXJzZWx2ZXMgdG8gcHJldmVudAorCSAqIGZ1cnRoZXIgZXZlbnRzLgorCSAqLworCXJlbW92ZV93YWl0X3F1ZXVlKGlycWZkLT53cWgsICZpcnFmZC0+d2FpdCk7CisKKwkvKgorCSAqIFdlIGtub3cgbm8gbmV3IGV2ZW50cyB3aWxsIGJlIHNjaGVkdWxlZCBhdCB0aGlzIHBvaW50LCBzbyBibG9jaworCSAqIHVudGlsIGFsbCBwcmV2aW91c2x5IG91dHN0YW5kaW5nIGV2ZW50cyBoYXZlIGNvbXBsZXRlZAorCSAqLworCWZsdXNoX3dvcmsoJmlycWZkLT5pbmplY3QpOworCisJLyoKKwkgKiBJdCBpcyBub3cgc2FmZSB0byByZWxlYXNlIHRoZSBvYmplY3QncyByZXNvdXJjZXMKKwkgKi8KKwlldmVudGZkX2N0eF9wdXQoaXJxZmQtPmV2ZW50ZmQpOworCWtmcmVlKGlycWZkKTsKK30KKworCisvKiBhc3N1bWVzIGt2bS0+aXJxZmRzLmxvY2sgaXMgaGVsZCAqLworc3RhdGljIGJvb2wKK2lycWZkX2lzX2FjdGl2ZShzdHJ1Y3QgX2lycWZkICppcnFmZCkKK3sKKwlyZXR1cm4gbGlzdF9lbXB0eSgmaXJxZmQtPmxpc3QpID8gZmFsc2UgOiB0cnVlOworfQorCisvKgorICogTWFyayB0aGUgaXJxZmQgYXMgaW5hY3RpdmUgYW5kIHNjaGVkdWxlIGl0IGZvciByZW1vdmFsCisgKgorICogYXNzdW1lcyBrdm0tPmlycWZkcy5sb2NrIGlzIGhlbGQKKyAqLworc3RhdGljIHZvaWQKK2lycWZkX2RlYWN0aXZhdGUoc3RydWN0IF9pcnFmZCAqaXJxZmQpCit7CisJQlVHX09OKCFpcnFmZF9pc19hY3RpdmUoaXJxZmQpKTsKKworCWxpc3RfZGVsX2luaXQoJmlycWZkLT5saXN0KTsKKworCXF1ZXVlX3dvcmsoaXJxZmRfY2xlYW51cF93cSwgJmlycWZkLT5zaHV0ZG93bik7Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCB3cWgtPmxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZAorICovCitzdGF0aWMgaW50CitpcnFmZF93YWtldXAod2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KQoreworCXN0cnVjdCBfaXJxZmQgKmlycWZkID0gY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBfaXJxZmQsIHdhaXQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAodW5zaWduZWQgbG9uZylrZXk7CisKKwlpZiAoZmxhZ3MgJiBQT0xMSU4pCisJCS8qIEFuIGV2ZW50IGhhcyBiZWVuIHNpZ25hbGVkLCBpbmplY3QgYW4gaW50ZXJydXB0ICovCisJCXNjaGVkdWxlX3dvcmsoJmlycWZkLT5pbmplY3QpOworCisJaWYgKGZsYWdzICYgUE9MTEhVUCkgeworCQkvKiBUaGUgZXZlbnRmZCBpcyBjbG9zaW5nLCBkZXRhY2ggZnJvbSBLVk0gKi8KKwkJc3RydWN0IGt2bSAqa3ZtID0gaXJxZmQtPmt2bTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgma3ZtLT5pcnFmZHMubG9jaywgZmxhZ3MpOworCisJCS8qCisJCSAqIFdlIG11c3QgY2hlY2sgaWYgc29tZW9uZSBkZWFjdGl2YXRlZCB0aGUgaXJxZmQgYmVmb3JlCisJCSAqIHdlIGNvdWxkIGFjcXVpcmUgdGhlIGlycWZkcy5sb2NrIHNpbmNlIHRoZSBpdGVtIGlzCisJCSAqIGRlYWN0aXZhdGVkIGZyb20gdGhlIEtWTSBzaWRlIGJlZm9yZSBpdCBpcyB1bmhvb2tlZCBmcm9tCisJCSAqIHRoZSB3YWl0LXF1ZXVlLiAgSWYgaXQgaXMgYWxyZWFkeSBkZWFjdGl2YXRlZCwgd2UgY2FuCisJCSAqIHNpbXBseSByZXR1cm4ga25vd2luZyB0aGUgb3RoZXIgc2lkZSB3aWxsIGNsZWFudXAgZm9yIHVzLgorCQkgKiBXZSBjYW5ub3QgcmFjZSBhZ2FpbnN0IHRoZSBpcnFmZCBnb2luZyBhd2F5IHNpbmNlIHRoZQorCQkgKiBvdGhlciBzaWRlIGlzIHJlcXVpcmVkIHRvIGFjcXVpcmUgd3FoLT5sb2NrLCB3aGljaCB3ZSBob2xkCisJCSAqLworCQlpZiAoaXJxZmRfaXNfYWN0aXZlKGlycWZkKSkKKwkJCWlycWZkX2RlYWN0aXZhdGUoaXJxZmQpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmt2bS0+aXJxZmRzLmxvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2lycWZkX3B0YWJsZV9xdWV1ZV9wcm9jKHN0cnVjdCBmaWxlICpmaWxlLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd3FoLAorCQkJcG9sbF90YWJsZSAqcHQpCit7CisJc3RydWN0IF9pcnFmZCAqaXJxZmQgPSBjb250YWluZXJfb2YocHQsIHN0cnVjdCBfaXJxZmQsIHB0KTsKKworCWlycWZkLT53cWggPSB3cWg7CisJYWRkX3dhaXRfcXVldWUod3FoLCAmaXJxZmQtPndhaXQpOworfQorCitzdGF0aWMgaW50Citrdm1faXJxZmRfYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwgaW50IGZkLCBpbnQgZ3NpKQoreworCXN0cnVjdCBfaXJxZmQgKmlycWZkOworCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmV2ZW50ZmQgPSBOVUxMOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IGV2ZW50czsKKworCWlycWZkID0ga3phbGxvYyhzaXplb2YoKmlycWZkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpcnFmZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpcnFmZC0+a3ZtID0ga3ZtOworCWlycWZkLT5nc2kgPSBnc2k7CisJSU5JVF9MSVNUX0hFQUQoJmlycWZkLT5saXN0KTsKKwlJTklUX1dPUksoJmlycWZkLT5pbmplY3QsIGlycWZkX2luamVjdCk7CisJSU5JVF9XT1JLKCZpcnFmZC0+c2h1dGRvd24sIGlycWZkX3NodXRkb3duKTsKKworCWZpbGUgPSBldmVudGZkX2ZnZXQoZmQpOworCWlmIChJU19FUlIoZmlsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihmaWxlKTsKKwkJZ290byBmYWlsOworCX0KKworCWV2ZW50ZmQgPSBldmVudGZkX2N0eF9maWxlZ2V0KGZpbGUpOworCWlmIChJU19FUlIoZXZlbnRmZCkpIHsKKwkJcmV0ID0gUFRSX0VSUihldmVudGZkKTsKKwkJZ290byBmYWlsOworCX0KKworCWlycWZkLT5ldmVudGZkID0gZXZlbnRmZDsKKworCS8qCisJICogSW5zdGFsbCBvdXIgb3duIGN1c3RvbSB3YWtlLXVwIGhhbmRsaW5nIHNvIHdlIGFyZSBub3RpZmllZCB2aWEKKwkgKiBhIGNhbGxiYWNrIHdoZW5ldmVyIHNvbWVvbmUgc2lnbmFscyB0aGUgdW5kZXJseWluZyBldmVudGZkCisJICovCisJaW5pdF93YWl0cXVldWVfZnVuY19lbnRyeSgmaXJxZmQtPndhaXQsIGlycWZkX3dha2V1cCk7CisJaW5pdF9wb2xsX2Z1bmNwdHIoJmlycWZkLT5wdCwgaXJxZmRfcHRhYmxlX3F1ZXVlX3Byb2MpOworCisJZXZlbnRzID0gZmlsZS0+Zl9vcC0+cG9sbChmaWxlLCAmaXJxZmQtPnB0KTsKKworCXNwaW5fbG9ja19pcnEoJmt2bS0+aXJxZmRzLmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmlycWZkLT5saXN0LCAma3ZtLT5pcnFmZHMuaXRlbXMpOworCXNwaW5fdW5sb2NrX2lycSgma3ZtLT5pcnFmZHMubG9jayk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBldmVudCBhbHJlYWR5IHBlbmRpbmcgb24gdGhlIGV2ZW50ZmQKKwkgKiBiZWZvcmUgd2UgcmVnaXN0ZXJlZCwgYW5kIHRyaWdnZXIgaXQgYXMgaWYgd2UgZGlkbid0IG1pc3MgaXQuCisJICovCisJaWYgKGV2ZW50cyAmIFBPTExJTikKKwkJc2NoZWR1bGVfd29yaygmaXJxZmQtPmluamVjdCk7CisKKwkvKgorCSAqIGRvIG5vdCBkcm9wIHRoZSBmaWxlIHVudGlsIHRoZSBpcnFmZCBpcyBmdWxseSBpbml0aWFsaXplZCwgb3RoZXJ3aXNlCisJICogd2UgbWlnaHQgcmFjZSBhZ2FpbnN0IHRoZSBQT0xMSFVQCisJICovCisJZnB1dChmaWxlKTsKKworCXJldHVybiAwOworCitmYWlsOgorCWlmIChldmVudGZkICYmICFJU19FUlIoZXZlbnRmZCkpCisJCWV2ZW50ZmRfY3R4X3B1dChldmVudGZkKTsKKworCWlmICghSVNfRVJSKGZpbGUpKQorCQlmcHV0KGZpbGUpOworCisJa2ZyZWUoaXJxZmQpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQKK2t2bV9ldmVudGZkX2luaXQoc3RydWN0IGt2bSAqa3ZtKQoreworCXNwaW5fbG9ja19pbml0KCZrdm0tPmlycWZkcy5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgma3ZtLT5pcnFmZHMuaXRlbXMpOworCUlOSVRfTElTVF9IRUFEKCZrdm0tPmlvZXZlbnRmZHMpOworfQorCisvKgorICogc2h1dGRvd24gYW55IGlycWZkJ3MgdGhhdCBtYXRjaCBmZCtnc2kKKyAqLworc3RhdGljIGludAora3ZtX2lycWZkX2RlYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwgaW50IGZkLCBpbnQgZ3NpKQoreworCXN0cnVjdCBfaXJxZmQgKmlycWZkLCAqdG1wOworCXN0cnVjdCBldmVudGZkX2N0eCAqZXZlbnRmZDsKKworCWV2ZW50ZmQgPSBldmVudGZkX2N0eF9mZGdldChmZCk7CisJaWYgKElTX0VSUihldmVudGZkKSkKKwkJcmV0dXJuIFBUUl9FUlIoZXZlbnRmZCk7CisKKwlzcGluX2xvY2tfaXJxKCZrdm0tPmlycWZkcy5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpcnFmZCwgdG1wLCAma3ZtLT5pcnFmZHMuaXRlbXMsIGxpc3QpIHsKKwkJaWYgKGlycWZkLT5ldmVudGZkID09IGV2ZW50ZmQgJiYgaXJxZmQtPmdzaSA9PSBnc2kpCisJCQlpcnFmZF9kZWFjdGl2YXRlKGlycWZkKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJmt2bS0+aXJxZmRzLmxvY2spOworCWV2ZW50ZmRfY3R4X3B1dChldmVudGZkKTsKKworCS8qCisJICogQmxvY2sgdW50aWwgd2Uga25vdyBhbGwgb3V0c3RhbmRpbmcgc2h1dGRvd24gam9icyBoYXZlIGNvbXBsZXRlZAorCSAqIHNvIHRoYXQgd2UgZ3VhcmFudGVlIHRoZXJlIHdpbGwgbm90IGJlIGFueSBtb3JlIGludGVycnVwdHMgb24gdGhpcworCSAqIGdzaSBvbmNlIHRoaXMgZGVhc3NpZ24gZnVuY3Rpb24gcmV0dXJucy4KKwkgKi8KKwlmbHVzaF93b3JrcXVldWUoaXJxZmRfY2xlYW51cF93cSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50Citrdm1faXJxZmQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgZmQsIGludCBnc2ksIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBLVk1fSVJRRkRfRkxBR19ERUFTU0lHTikKKwkJcmV0dXJuIGt2bV9pcnFmZF9kZWFzc2lnbihrdm0sIGZkLCBnc2kpOworCisJcmV0dXJuIGt2bV9pcnFmZF9hc3NpZ24oa3ZtLCBmZCwgZ3NpKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIHRoZSBrdm0gVk0gZmQgaXMgYmVpbmcgcmVsZWFzZWQuIFNodXRkb3duIGFsbAorICogaXJxZmRzIHRoYXQgc3RpbGwgcmVtYWluIG9wZW4KKyAqLwordm9pZAora3ZtX2lycWZkX3JlbGVhc2Uoc3RydWN0IGt2bSAqa3ZtKQoreworCXN0cnVjdCBfaXJxZmQgKmlycWZkLCAqdG1wOworCisJc3Bpbl9sb2NrX2lycSgma3ZtLT5pcnFmZHMubG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXJxZmQsIHRtcCwgJmt2bS0+aXJxZmRzLml0ZW1zLCBsaXN0KQorCQlpcnFmZF9kZWFjdGl2YXRlKGlycWZkKTsKKworCXNwaW5fdW5sb2NrX2lycSgma3ZtLT5pcnFmZHMubG9jayk7CisKKwkvKgorCSAqIEJsb2NrIHVudGlsIHdlIGtub3cgYWxsIG91dHN0YW5kaW5nIHNodXRkb3duIGpvYnMgaGF2ZSBjb21wbGV0ZWQKKwkgKiBzaW5jZSB3ZSBkbyBub3QgdGFrZSBhIGt2bSogcmVmZXJlbmNlLgorCSAqLworCWZsdXNoX3dvcmtxdWV1ZShpcnFmZF9jbGVhbnVwX3dxKTsKKworfQorCisvKgorICogY3JlYXRlIGEgaG9zdC13aWRlIHdvcmtxdWV1ZSBmb3IgaXNzdWluZyBkZWZlcnJlZCBzaHV0ZG93biByZXF1ZXN0cworICogYWdncmVnYXRlZCBmcm9tIGFsbCB2bSogaW5zdGFuY2VzLiBXZSBuZWVkIG91ciBvd24gaXNvbGF0ZWQgc2luZ2xlLXRocmVhZAorICogcXVldWUgdG8gcHJldmVudCBkZWFkbG9jayBhZ2FpbnN0IGZsdXNoaW5nIHRoZSBub3JtYWwgd29yay1xdWV1ZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgaXJxZmRfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpcnFmZF9jbGVhbnVwX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImt2bS1pcnFmZC1jbGVhbnVwIik7CisJaWYgKCFpcnFmZF9jbGVhbnVwX3dxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXJxZmRfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlkZXN0cm95X3dvcmtxdWV1ZShpcnFmZF9jbGVhbnVwX3dxKTsKK30KKworbW9kdWxlX2luaXQoaXJxZmRfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoaXJxZmRfbW9kdWxlX2V4aXQpOworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGlvZXZlbnRmZDogdHJhbnNsYXRlIGEgUElPL01NSU8gbWVtb3J5IHdyaXRlIHRvIGFuIGV2ZW50ZmQgc2lnbmFsLgorICoKKyAqIHVzZXJzcGFjZSBjYW4gcmVnaXN0ZXIgYSBQSU8vTU1JTyBhZGRyZXNzIHdpdGggYW4gZXZlbnRmZCBmb3IgcmVjZWl2aW5nCisgKiBub3RpZmljYXRpb24gd2hlbiB0aGUgbWVtb3J5IGhhcyBiZWVuIHRvdWNoZWQuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0cnVjdCBfaW9ldmVudGZkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICBsaXN0OworCXU2NCAgICAgICAgICAgICAgICAgIGFkZHI7CisJaW50ICAgICAgICAgICAgICAgICAgbGVuZ3RoOworCXN0cnVjdCBldmVudGZkX2N0eCAgKmV2ZW50ZmQ7CisJdTY0ICAgICAgICAgICAgICAgICAgZGF0YW1hdGNoOworCXN0cnVjdCBrdm1faW9fZGV2aWNlIGRldjsKKwlib29sICAgICAgICAgICAgICAgICB3aWxkY2FyZDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IF9pb2V2ZW50ZmQgKgordG9faW9ldmVudGZkKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBfaW9ldmVudGZkLCBkZXYpOworfQorCitzdGF0aWMgdm9pZAoraW9ldmVudGZkX3JlbGVhc2Uoc3RydWN0IF9pb2V2ZW50ZmQgKnApCit7CisJZXZlbnRmZF9jdHhfcHV0KHAtPmV2ZW50ZmQpOworCWxpc3RfZGVsKCZwLT5saXN0KTsKKwlrZnJlZShwKTsKK30KKworc3RhdGljIGJvb2wKK2lvZXZlbnRmZF9pbl9yYW5nZShzdHJ1Y3QgX2lvZXZlbnRmZCAqcCwgZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc3Qgdm9pZCAqdmFsKQoreworCXU2NCBfdmFsOworCisJaWYgKCEoYWRkciA9PSBwLT5hZGRyICYmIGxlbiA9PSBwLT5sZW5ndGgpKQorCQkvKiBhZGRyZXNzLXJhbmdlIG11c3QgYmUgcHJlY2lzZSBmb3IgYSBoaXQgKi8KKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHAtPndpbGRjYXJkKQorCQkvKiBhbGwgZWxzZSBlcXVhbCwgd2lsZGNhcmQgaXMgYWx3YXlzIGEgaGl0ICovCisJCXJldHVybiB0cnVlOworCisJLyogb3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIGFjdHVhbGx5IGNvbXBhcmUgdGhlIGRhdGEgKi8KKworCUJVR19PTighSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl2YWwsIGxlbikpOworCisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCV92YWwgPSAqKHU4ICopdmFsOworCQlicmVhazsKKwljYXNlIDI6CisJCV92YWwgPSAqKHUxNiAqKXZhbDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlfdmFsID0gKih1MzIgKil2YWw7CisJCWJyZWFrOworCWNhc2UgODoKKwkJX3ZhbCA9ICoodTY0ICopdmFsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIF92YWwgPT0gcC0+ZGF0YW1hdGNoID8gdHJ1ZSA6IGZhbHNlOworfQorCisvKiBNTUlPL1BJTyB3cml0ZXMgdHJpZ2dlciBhbiBldmVudCBpZiB0aGUgYWRkci92YWwgbWF0Y2ggKi8KK3N0YXRpYyBpbnQKK2lvZXZlbnRmZF93cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywgZ3BhX3QgYWRkciwgaW50IGxlbiwKKwkJY29uc3Qgdm9pZCAqdmFsKQoreworCXN0cnVjdCBfaW9ldmVudGZkICpwID0gdG9faW9ldmVudGZkKHRoaXMpOworCisJaWYgKCFpb2V2ZW50ZmRfaW5fcmFuZ2UocCwgYWRkciwgbGVuLCB2YWwpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlldmVudGZkX3NpZ25hbChwLT5ldmVudGZkLCAxKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIEtWTSBpcyBjb21wbGV0ZWx5IHNodXR0aW5nIGRvd24uICBXZSBkbyBub3QKKyAqIG5lZWQgdG8gd29ycnkgYWJvdXQgbG9ja2luZyBqdXN0IG51a2UgYW55dGhpbmcgd2UgaGF2ZSBhcyBxdWlja2x5IGFzIHBvc3NpYmxlCisgKi8KK3N0YXRpYyB2b2lkCitpb2V2ZW50ZmRfZGVzdHJ1Y3RvcihzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcykKK3sKKwlzdHJ1Y3QgX2lvZXZlbnRmZCAqcCA9IHRvX2lvZXZlbnRmZCh0aGlzKTsKKworCWlvZXZlbnRmZF9yZWxlYXNlKHApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pb19kZXZpY2Vfb3BzIGlvZXZlbnRmZF9vcHMgPSB7CisJLndyaXRlICAgICAgPSBpb2V2ZW50ZmRfd3JpdGUsCisJLmRlc3RydWN0b3IgPSBpb2V2ZW50ZmRfZGVzdHJ1Y3RvciwKK307CisKKy8qIGFzc3VtZXMga3ZtLT5zbG90c19sb2NrIGhlbGQgKi8KK3N0YXRpYyBib29sCitpb2V2ZW50ZmRfY2hlY2tfY29sbGlzaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IF9pb2V2ZW50ZmQgKnApCit7CisJc3RydWN0IF9pb2V2ZW50ZmQgKl9wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShfcCwgJmt2bS0+aW9ldmVudGZkcywgbGlzdCkKKwkJaWYgKF9wLT5hZGRyID09IHAtPmFkZHIgJiYgX3AtPmxlbmd0aCA9PSBwLT5sZW5ndGggJiYKKwkJICAgIChfcC0+d2lsZGNhcmQgfHwgcC0+d2lsZGNhcmQgfHwKKwkJICAgICBfcC0+ZGF0YW1hdGNoID09IHAtPmRhdGFtYXRjaCkpCisJCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludAora3ZtX2Fzc2lnbl9pb2V2ZW50ZmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lvZXZlbnRmZCAqYXJncykKK3sKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgIHBpbyA9IGFyZ3MtPmZsYWdzICYgS1ZNX0lPRVZFTlRGRF9GTEFHX1BJTzsKKwlzdHJ1Y3Qga3ZtX2lvX2J1cyAgICAgICAgKmJ1cyA9IHBpbyA/ICZrdm0tPnBpb19idXMgOiAma3ZtLT5tbWlvX2J1czsKKwlzdHJ1Y3QgX2lvZXZlbnRmZCAgICAgICAgKnA7CisJc3RydWN0IGV2ZW50ZmRfY3R4ICAgICAgICpldmVudGZkOworCWludCAgICAgICAgICAgICAgICAgICAgICAgcmV0OworCisJLyogbXVzdCBiZSBuYXR1cmFsLXdvcmQgc2l6ZWQgKi8KKwlzd2l0Y2ggKGFyZ3MtPmxlbikgeworCWNhc2UgMToKKwljYXNlIDI6CisJY2FzZSA0OgorCWNhc2UgODoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgZm9yIHJhbmdlIG92ZXJmbG93ICovCisJaWYgKGFyZ3MtPmFkZHIgKyBhcmdzLT5sZW4gPCBhcmdzLT5hZGRyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGNoZWNrIGZvciBleHRyYSBmbGFncyB0aGF0IHdlIGRvbid0IHVuZGVyc3RhbmQgKi8KKwlpZiAoYXJncy0+ZmxhZ3MgJiB+S1ZNX0lPRVZFTlRGRF9WQUxJRF9GTEFHX01BU0spCisJCXJldHVybiAtRUlOVkFMOworCisJZXZlbnRmZCA9IGV2ZW50ZmRfY3R4X2ZkZ2V0KGFyZ3MtPmZkKTsKKwlpZiAoSVNfRVJSKGV2ZW50ZmQpKQorCQlyZXR1cm4gUFRSX0VSUihldmVudGZkKTsKKworCXAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCWlmICghcCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnAtPmxpc3QpOworCXAtPmFkZHIgICAgPSBhcmdzLT5hZGRyOworCXAtPmxlbmd0aCAgPSBhcmdzLT5sZW47CisJcC0+ZXZlbnRmZCA9IGV2ZW50ZmQ7CisKKwkvKiBUaGUgZGF0YW1hdGNoIGZlYXR1cmUgaXMgb3B0aW9uYWwsIG90aGVyd2lzZSB0aGlzIGlzIGEgd2lsZGNhcmQgKi8KKwlpZiAoYXJncy0+ZmxhZ3MgJiBLVk1fSU9FVkVOVEZEX0ZMQUdfREFUQU1BVENIKQorCQlwLT5kYXRhbWF0Y2ggPSBhcmdzLT5kYXRhbWF0Y2g7CisJZWxzZQorCQlwLT53aWxkY2FyZCA9IHRydWU7CisKKwlkb3duX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCisJLyogVmVyaWZ5IHRoYXQgdGhlcmUgaXNudCBhIG1hdGNoIGFscmVhZHkgKi8KKwlpZiAoaW9ldmVudGZkX2NoZWNrX2NvbGxpc2lvbihrdm0sIHApKSB7CisJCXJldCA9IC1FRVhJU1Q7CisJCWdvdG8gdW5sb2NrX2ZhaWw7CisJfQorCisJa3ZtX2lvZGV2aWNlX2luaXQoJnAtPmRldiwgJmlvZXZlbnRmZF9vcHMpOworCisJcmV0ID0gX19rdm1faW9fYnVzX3JlZ2lzdGVyX2RldihidXMsICZwLT5kZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHVubG9ja19mYWlsOworCisJbGlzdF9hZGRfdGFpbCgmcC0+bGlzdCwgJmt2bS0+aW9ldmVudGZkcyk7CisKKwl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKworCXJldHVybiAwOworCit1bmxvY2tfZmFpbDoKKwl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKworZmFpbDoKKwlrZnJlZShwKTsKKwlldmVudGZkX2N0eF9wdXQoZXZlbnRmZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citrdm1fZGVhc3NpZ25faW9ldmVudGZkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2V2ZW50ZmQgKmFyZ3MpCit7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICBwaW8gPSBhcmdzLT5mbGFncyAmIEtWTV9JT0VWRU5URkRfRkxBR19QSU87CisJc3RydWN0IGt2bV9pb19idXMgICAgICAgICpidXMgPSBwaW8gPyAma3ZtLT5waW9fYnVzIDogJmt2bS0+bW1pb19idXM7CisJc3RydWN0IF9pb2V2ZW50ZmQgICAgICAgICpwLCAqdG1wOworCXN0cnVjdCBldmVudGZkX2N0eCAgICAgICAqZXZlbnRmZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FTk9FTlQ7CisKKwlldmVudGZkID0gZXZlbnRmZF9jdHhfZmRnZXQoYXJncy0+ZmQpOworCWlmIChJU19FUlIoZXZlbnRmZCkpCisJCXJldHVybiBQVFJfRVJSKGV2ZW50ZmQpOworCisJZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsICZrdm0tPmlvZXZlbnRmZHMsIGxpc3QpIHsKKwkJYm9vbCB3aWxkY2FyZCA9ICEoYXJncy0+ZmxhZ3MgJiBLVk1fSU9FVkVOVEZEX0ZMQUdfREFUQU1BVENIKTsKKworCQlpZiAocC0+ZXZlbnRmZCAhPSBldmVudGZkICB8fAorCQkgICAgcC0+YWRkciAhPSBhcmdzLT5hZGRyICB8fAorCQkgICAgcC0+bGVuZ3RoICE9IGFyZ3MtPmxlbiB8fAorCQkgICAgcC0+d2lsZGNhcmQgIT0gd2lsZGNhcmQpCisJCQljb250aW51ZTsKKworCQlpZiAoIXAtPndpbGRjYXJkICYmIHAtPmRhdGFtYXRjaCAhPSBhcmdzLT5kYXRhbWF0Y2gpCisJCQljb250aW51ZTsKKworCQlfX2t2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoYnVzLCAmcC0+ZGV2KTsKKwkJaW9ldmVudGZkX3JlbGVhc2UocCk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCX0KKworCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCisJZXZlbnRmZF9jdHhfcHV0KGV2ZW50ZmQpOworCisJcmV0dXJuIHJldDsKK30KKworaW50Citrdm1faW9ldmVudGZkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2V2ZW50ZmQgKmFyZ3MpCit7CisJaWYgKGFyZ3MtPmZsYWdzICYgS1ZNX0lPRVZFTlRGRF9GTEFHX0RFQVNTSUdOKQorCQlyZXR1cm4ga3ZtX2RlYXNzaWduX2lvZXZlbnRmZChrdm0sIGFyZ3MpOworCisJcmV0dXJuIGt2bV9hc3NpZ25faW9ldmVudGZkKGt2bSwgYXJncyk7Cit9CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pb2FwaWMuYyBiL3ZpcnQva3ZtL2lvYXBpYy5jCmluZGV4IDExNTBjNmQ1Li45ZmUxNDBiIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pb2FwaWMuYworKysgYi92aXJ0L2t2bS9pb2FwaWMuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2t2bS5oPgogCiAjaW5jbHVkZSAiaW9hcGljLmgiCiAjaW5jbHVkZSAibGFwaWMuaCIKQEAgLTEwMyw2ICsxMDQsNyBAQAogewogCXVuc2lnbmVkIGluZGV4OwogCWJvb2wgbWFza19iZWZvcmUsIG1hc2tfYWZ0ZXI7CisJdW5pb24ga3ZtX2lvYXBpY19yZWRpcmVjdF9lbnRyeSAqZTsKIAogCXN3aXRjaCAoaW9hcGljLT5pb3JlZ3NlbCkgewogCWNhc2UgSU9BUElDX1JFR19WRVJTSU9OOgpAQCAtMTIyLDE5ICsxMjQsMjAgQEAKIAkJaW9hcGljX2RlYnVnKCJjaGFuZ2UgcmVkaXIgaW5kZXggJXggdmFsICV4XG4iLCBpbmRleCwgdmFsKTsKIAkJaWYgKGluZGV4ID49IElPQVBJQ19OVU1fUElOUykKIAkJCXJldHVybjsKLQkJbWFza19iZWZvcmUgPSBpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5maWVsZHMubWFzazsKKwkJZSA9ICZpb2FwaWMtPnJlZGlydGJsW2luZGV4XTsKKwkJbWFza19iZWZvcmUgPSBlLT5maWVsZHMubWFzazsKIAkJaWYgKGlvYXBpYy0+aW9yZWdzZWwgJiAxKSB7Ci0JCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5iaXRzICY9IDB4ZmZmZmZmZmY7Ci0JCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5iaXRzIHw9ICh1NjQpIHZhbCA8PCAzMjsKKwkJCWUtPmJpdHMgJj0gMHhmZmZmZmZmZjsKKwkJCWUtPmJpdHMgfD0gKHU2NCkgdmFsIDw8IDMyOwogCQl9IGVsc2UgewotCQkJaW9hcGljLT5yZWRpcnRibFtpbmRleF0uYml0cyAmPSB+MHhmZmZmZmZmZlVMTDsKLQkJCWlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmJpdHMgfD0gKHUzMikgdmFsOwotCQkJaW9hcGljLT5yZWRpcnRibFtpbmRleF0uZmllbGRzLnJlbW90ZV9pcnIgPSAwOworCQkJZS0+Yml0cyAmPSB+MHhmZmZmZmZmZlVMTDsKKwkJCWUtPmJpdHMgfD0gKHUzMikgdmFsOworCQkJZS0+ZmllbGRzLnJlbW90ZV9pcnIgPSAwOwogCQl9Ci0JCW1hc2tfYWZ0ZXIgPSBpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5maWVsZHMubWFzazsKKwkJbWFza19hZnRlciA9IGUtPmZpZWxkcy5tYXNrOwogCQlpZiAobWFza19iZWZvcmUgIT0gbWFza19hZnRlcikKIAkJCWt2bV9maXJlX21hc2tfbm90aWZpZXJzKGlvYXBpYy0+a3ZtLCBpbmRleCwgbWFza19hZnRlcik7Ci0JCWlmIChpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5maWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHCisJCWlmIChlLT5maWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHCiAJCSAgICAmJiBpb2FwaWMtPmlyciAmICgxIDw8IGluZGV4KSkKIAkJCWlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaW5kZXgpOwogCQlicmVhazsKQEAgLTE2NCw3ICsxNjcsOSBAQAogCS8qIEFsd2F5cyBkZWxpdmVyeSBQSVQgaW50ZXJydXB0IHRvIHZjcHUgMCAqLwogCWlmIChpcnEgPT0gMCkgewogCQlpcnFlLmRlc3RfbW9kZSA9IDA7IC8qIFBoeXNpY2FsIG1vZGUuICovCi0JCWlycWUuZGVzdF9pZCA9IGlvYXBpYy0+a3ZtLT52Y3B1c1swXS0+dmNwdV9pZDsKKwkJLyogbmVlZCB0byByZWFkIGFwaWNfaWQgZnJvbSBhcGljIHJlZ2llc3Qgc2luY2UKKwkJICogaXQgY2FuIGJlIHJld3JpdHRlbiAqLworCQlpcnFlLmRlc3RfaWQgPSBpb2FwaWMtPmt2bS0+YnNwX3ZjcHUtPnZjcHVfaWQ7CiAJfQogI2VuZGlmCiAJcmV0dXJuIGt2bV9pcnFfZGVsaXZlcnlfdG9fYXBpYyhpb2FwaWMtPmt2bSwgTlVMTCwgJmlycWUpOwpAQCAtMTg4LDcgKzE5MywxMCBAQAogCQkJaWYgKChlZGdlICYmIG9sZF9pcnIgIT0gaW9hcGljLT5pcnIpIHx8CiAJCQkgICAgKCFlZGdlICYmICFlbnRyeS5maWVsZHMucmVtb3RlX2lycikpCiAJCQkJcmV0ID0gaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEpOworCQkJZWxzZQorCQkJCXJldCA9IDA7IC8qIHJlcG9ydCBjb2FsZXNjZWQgaW50ZXJydXB0ICovCiAJCX0KKwkJdHJhY2Vfa3ZtX2lvYXBpY19zZXRfaXJxKGVudHJ5LmJpdHMsIGlycSwgcmV0ID09IDApOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMjIwLDI0ICsyMjgsMjkgQEAKIAkJCV9fa3ZtX2lvYXBpY191cGRhdGVfZW9pKGlvYXBpYywgaSwgdHJpZ2dlcl9tb2RlKTsKIH0KIAotc3RhdGljIGludCBpb2FwaWNfaW5fcmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsCi0JCQkgICBpbnQgbGVuLCBpbnQgaXNfd3JpdGUpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1faW9hcGljICp0b19pb2FwaWMoc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0gKHN0cnVjdCBrdm1faW9hcGljICopdGhpcy0+cHJpdmF0ZTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGt2bV9pb2FwaWMsIGRldik7Cit9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGlvYXBpY19pbl9yYW5nZShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBncGFfdCBhZGRyKQorewogCXJldHVybiAoKGFkZHIgPj0gaW9hcGljLT5iYXNlX2FkZHJlc3MgJiYKIAkJIChhZGRyIDwgaW9hcGljLT5iYXNlX2FkZHJlc3MgKyBJT0FQSUNfTUVNX0xFTkdUSCkpKTsKIH0KIAotc3RhdGljIHZvaWQgaW9hcGljX21taW9fcmVhZChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywgZ3BhX3QgYWRkciwgaW50IGxlbiwKLQkJCSAgICAgdm9pZCAqdmFsKQorc3RhdGljIGludCBpb2FwaWNfbW1pb19yZWFkKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyLCBpbnQgbGVuLAorCQkJICAgIHZvaWQgKnZhbCkKIHsKLQlzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0gKHN0cnVjdCBrdm1faW9hcGljICopdGhpcy0+cHJpdmF0ZTsKKwlzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0gdG9faW9hcGljKHRoaXMpOwogCXUzMiByZXN1bHQ7CisJaWYgKCFpb2FwaWNfaW5fcmFuZ2UoaW9hcGljLCBhZGRyKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaW9hcGljX2RlYnVnKCJhZGRyICVseFxuIiwgKHVuc2lnbmVkIGxvbmcpYWRkcik7CiAJQVNTRVJUKCEoYWRkciAmIDB4ZikpOwkvKiBjaGVjayBhbGlnbm1lbnQgKi8KIAorCW11dGV4X2xvY2soJmlvYXBpYy0+a3ZtLT5pcnFfbG9jayk7CiAJYWRkciAmPSAweGZmOwogCXN3aXRjaCAoYWRkcikgewogCWNhc2UgSU9BUElDX1JFR19TRUxFQ1Q6CkBAIC0yNjQsMjIgKzI3NywyOCBAQAogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImlvYXBpYzogd3JvbmcgbGVuZ3RoICVkXG4iLCBsZW4pOwogCX0KKwltdXRleF91bmxvY2soJmlvYXBpYy0+a3ZtLT5pcnFfbG9jayk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlvYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyLCBpbnQgbGVuLAotCQkJICAgICAgY29uc3Qgdm9pZCAqdmFsKQorc3RhdGljIGludCBpb2FwaWNfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywgZ3BhX3QgYWRkciwgaW50IGxlbiwKKwkJCSAgICAgY29uc3Qgdm9pZCAqdmFsKQogewotCXN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSAoc3RydWN0IGt2bV9pb2FwaWMgKil0aGlzLT5wcml2YXRlOworCXN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSB0b19pb2FwaWModGhpcyk7CiAJdTMyIGRhdGE7CisJaWYgKCFpb2FwaWNfaW5fcmFuZ2UoaW9hcGljLCBhZGRyKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaW9hcGljX2RlYnVnKCJpb2FwaWNfbW1pb193cml0ZSBhZGRyPSVwIGxlbj0lZCB2YWw9JXBcbiIsCiAJCSAgICAgKHZvaWQqKWFkZHIsIGxlbiwgdmFsKTsKIAlBU1NFUlQoIShhZGRyICYgMHhmKSk7CS8qIGNoZWNrIGFsaWdubWVudCAqLworCisJbXV0ZXhfbG9jaygmaW9hcGljLT5rdm0tPmlycV9sb2NrKTsKIAlpZiAobGVuID09IDQgfHwgbGVuID09IDgpCiAJCWRhdGEgPSAqKHUzMiAqKSB2YWw7CiAJZWxzZSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImlvYXBpYzogVW5zdXBwb3J0ZWQgc2l6ZSAlZFxuIiwgbGVuKTsKLQkJcmV0dXJuOworCQlnb3RvIHVubG9jazsKIAl9CiAKIAlhZGRyICY9IDB4ZmY7CkBAIC0zMDAsNiArMzE5LDkgQEAKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Cit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZpb2FwaWMtPmt2bS0+aXJxX2xvY2spOworCXJldHVybiAwOwogfQogCiB2b2lkIGt2bV9pb2FwaWNfcmVzZXQoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYykKQEAgLTMxNCwyMSArMzM2LDI3IEBACiAJaW9hcGljLT5pZCA9IDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgaW9hcGljX21taW9fb3BzID0geworCS5yZWFkICAgICA9IGlvYXBpY19tbWlvX3JlYWQsCisJLndyaXRlICAgID0gaW9hcGljX21taW9fd3JpdGUsCit9OworCiBpbnQga3ZtX2lvYXBpY19pbml0KHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljOworCWludCByZXQ7CiAKIAlpb2FwaWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2lvYXBpYyksIEdGUF9LRVJORUwpOwogCWlmICghaW9hcGljKQogCQlyZXR1cm4gLUVOT01FTTsKIAlrdm0tPmFyY2gudmlvYXBpYyA9IGlvYXBpYzsKIAlrdm1faW9hcGljX3Jlc2V0KGlvYXBpYyk7Ci0JaW9hcGljLT5kZXYucmVhZCA9IGlvYXBpY19tbWlvX3JlYWQ7Ci0JaW9hcGljLT5kZXYud3JpdGUgPSBpb2FwaWNfbW1pb193cml0ZTsKLQlpb2FwaWMtPmRldi5pbl9yYW5nZSA9IGlvYXBpY19pbl9yYW5nZTsKLQlpb2FwaWMtPmRldi5wcml2YXRlID0gaW9hcGljOworCWt2bV9pb2RldmljZV9pbml0KCZpb2FwaWMtPmRldiwgJmlvYXBpY19tbWlvX29wcyk7CiAJaW9hcGljLT5rdm0gPSBrdm07Ci0Ja3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoJmt2bS0+bW1pb19idXMsICZpb2FwaWMtPmRldik7Ci0JcmV0dXJuIDA7CisJcmV0ID0ga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoa3ZtLCAma3ZtLT5tbWlvX2J1cywgJmlvYXBpYy0+ZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJa2ZyZWUoaW9hcGljKTsKKworCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2lvZGV2LmggYi92aXJ0L2t2bS9pb2Rldi5oCmluZGV4IDU1ZTg4NDYuLjEyZmQzY2EgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lvZGV2LmgKKysrIGIvdmlydC9rdm0vaW9kZXYuaApAQCAtMTcsNDkgKzE3LDU0IEBACiAjZGVmaW5lIF9fS1ZNX0lPREVWX0hfXwogCiAjaW5jbHVkZSA8bGludXgva3ZtX3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAKLXN0cnVjdCBrdm1faW9fZGV2aWNlIHsKLQl2b2lkICgqcmVhZCkoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCitzdHJ1Y3Qga3ZtX2lvX2RldmljZTsKKworLyoqCisgKiBrdm1faW9fZGV2aWNlX29wcyBhcmUgY2FsbGVkIHVuZGVyIGt2bSBzbG90c19sb2NrLgorICogcmVhZCBhbmQgd3JpdGUgaGFuZGxlcnMgcmV0dXJuIDAgaWYgdGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuIGhhbmRsZWQsCisgKiBvciBub24temVybyB0byBoYXZlIGl0IHBhc3NlZCB0byB0aGUgbmV4dCBkZXZpY2UuCisgKiovCitzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgeworCWludCAoKnJlYWQpKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAorCQkgICAgZ3BhX3QgYWRkciwKKwkJICAgIGludCBsZW4sCisJCSAgICB2b2lkICp2YWwpOworCWludCAoKndyaXRlKShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKIAkJICAgICBncGFfdCBhZGRyLAogCQkgICAgIGludCBsZW4sCi0JCSAgICAgdm9pZCAqdmFsKTsKLQl2b2lkICgqd3JpdGUpKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAotCQkgICAgICBncGFfdCBhZGRyLAotCQkgICAgICBpbnQgbGVuLAotCQkgICAgICBjb25zdCB2b2lkICp2YWwpOwotCWludCAoKmluX3JhbmdlKShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywgZ3BhX3QgYWRkciwgaW50IGxlbiwKLQkJCWludCBpc193cml0ZSk7CisJCSAgICAgY29uc3Qgdm9pZCAqdmFsKTsKIAl2b2lkICgqZGVzdHJ1Y3Rvcikoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMpOwotCi0Jdm9pZCAgICAgICAgICAgICAqcHJpdmF0ZTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1faW9kZXZpY2VfcmVhZChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2LAotCQkJCSAgICAgZ3BhX3QgYWRkciwKLQkJCQkgICAgIGludCBsZW4sCi0JCQkJICAgICB2b2lkICp2YWwpCisKK3N0cnVjdCBrdm1faW9fZGV2aWNlIHsKKwljb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgKm9wczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1faW9kZXZpY2VfaW5pdChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGt2bV9pb19kZXZpY2Vfb3BzICpvcHMpCiB7Ci0JZGV2LT5yZWFkKGRldiwgYWRkciwgbGVuLCB2YWwpOworCWRldi0+b3BzID0gb3BzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX2lvZGV2aWNlX3dyaXRlKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYsCi0JCQkJICAgICAgZ3BhX3QgYWRkciwKLQkJCQkgICAgICBpbnQgbGVuLAotCQkJCSAgICAgIGNvbnN0IHZvaWQgKnZhbCkKK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9pb2RldmljZV9yZWFkKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYsCisJCQkJICAgIGdwYV90IGFkZHIsIGludCBsLCB2b2lkICp2KQogewotCWRldi0+d3JpdGUoZGV2LCBhZGRyLCBsZW4sIHZhbCk7CisJcmV0dXJuIGRldi0+b3BzLT5yZWFkID8gZGV2LT5vcHMtPnJlYWQoZGV2LCBhZGRyLCBsLCB2KSA6IC1FT1BOT1RTVVBQOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBrdm1faW9kZXZpY2VfaW5yYW5nZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2LAotCQkJCSAgICAgICBncGFfdCBhZGRyLCBpbnQgbGVuLCBpbnQgaXNfd3JpdGUpCitzdGF0aWMgaW5saW5lIGludCBrdm1faW9kZXZpY2Vfd3JpdGUoc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldiwKKwkJCQkgICAgIGdwYV90IGFkZHIsIGludCBsLCBjb25zdCB2b2lkICp2KQogewotCXJldHVybiBkZXYtPmluX3JhbmdlKGRldiwgYWRkciwgbGVuLCBpc193cml0ZSk7CisJcmV0dXJuIGRldi0+b3BzLT53cml0ZSA/IGRldi0+b3BzLT53cml0ZShkZXYsIGFkZHIsIGwsIHYpIDogLUVPUE5PVFNVUFA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1faW9kZXZpY2VfZGVzdHJ1Y3RvcihzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KQogewotCWlmIChkZXYtPmRlc3RydWN0b3IpCi0JCWRldi0+ZGVzdHJ1Y3RvcihkZXYpOworCWlmIChkZXYtPm9wcy0+ZGVzdHJ1Y3RvcikKKwkJZGV2LT5vcHMtPmRlc3RydWN0b3IoZGV2KTsKIH0KIAogI2VuZGlmIC8qIF9fS1ZNX0lPREVWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaXJxX2NvbW0uYyBiL3ZpcnQva3ZtL2lycV9jb21tLmMKaW5kZXggZGRjMTdmMC4uMDAxNjYzZiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaXJxX2NvbW0uYworKysgYi92aXJ0L2t2bS9pcnFfY29tbS5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2t2bS5oPgogCiAjaW5jbHVkZSA8YXNtL21zaWRlZi5oPgogI2lmZGVmIENPTkZJR19JQTY0CkBAIC02MiwxNCArNjMsMTQgQEAKIAlpbnQgaSwgciA9IC0xOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgKmxvd2VzdCA9IE5VTEw7CiAKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmt2bS0+aXJxX2xvY2spKTsKKwogCWlmIChpcnEtPmRlc3RfbW9kZSA9PSAwICYmIGlycS0+ZGVzdF9pZCA9PSAweGZmICYmCiAJCQlrdm1faXNfZG1fbG93ZXN0X3ByaW8oaXJxKSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAia3ZtOiBhcGljOiBwaHlzIGJyb2FkY2FzdCBhbmQgbG93ZXN0IHByaW9cbiIpOwogCi0JZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7IGkrKykgewotCQl2Y3B1ID0ga3ZtLT52Y3B1c1tpXTsKLQotCQlpZiAoIXZjcHUgfHwgIWt2bV9hcGljX3ByZXNlbnQodmNwdSkpCisJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7CisJCWlmICgha3ZtX2FwaWNfcHJlc2VudCh2Y3B1KSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICgha3ZtX2FwaWNfbWF0Y2hfZGVzdCh2Y3B1LCBzcmMsIGlycS0+c2hvcnRoYW5kLApAQCAtOTksNiArMTAwLDggQEAKIHsKIAlzdHJ1Y3Qga3ZtX2xhcGljX2lycSBpcnE7CiAKKwl0cmFjZV9rdm1fbXNpX3NldF9pcnEoZS0+bXNpLmFkZHJlc3NfbG8sIGUtPm1zaS5kYXRhKTsKKwogCWlycS5kZXN0X2lkID0gKGUtPm1zaS5hZGRyZXNzX2xvICYKIAkJCU1TSV9BRERSX0RFU1RfSURfTUFTSykgPj4gTVNJX0FERFJfREVTVF9JRF9TSElGVDsKIAlpcnEudmVjdG9yID0gKGUtPm1zaS5kYXRhICYKQEAgLTExMyw3ICsxMTYsNyBAQAogCXJldHVybiBrdm1faXJxX2RlbGl2ZXJ5X3RvX2FwaWMoa3ZtLCBOVUxMLCAmaXJxKTsKIH0KIAotLyogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGt2bS0+bG9jayBtdXRleCBoZWxkCisvKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUga3ZtLT5pcnFfbG9jayBtdXRleCBoZWxkCiAgKiBSZXR1cm4gdmFsdWU6CiAgKiAgPCAwICAgSW50ZXJydXB0IHdhcyBpZ25vcmVkIChtYXNrZWQgb3Igbm90IGRlbGl2ZXJlZCBmb3Igb3RoZXIgcmVhc29ucykKICAqICA9IDAgICBJbnRlcnJ1cHQgd2FzIGNvYWxlc2NlZCAocHJldmlvdXMgaXJxIGlzIHN0aWxsIHBlbmRpbmcpCkBAIC0xMjUsNiArMTI4LDEwIEBACiAJdW5zaWduZWQgbG9uZyAqaXJxX3N0YXRlLCBzaWdfbGV2ZWw7CiAJaW50IHJldCA9IC0xOwogCisJdHJhY2Vfa3ZtX3NldF9pcnEoaXJxLCBsZXZlbCwgaXJxX3NvdXJjZV9pZCk7CisKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmt2bS0+aXJxX2xvY2spKTsKKwogCWlmIChpcnEgPCBLVk1fSU9BUElDX05VTV9QSU5TKSB7CiAJCWlycV9zdGF0ZSA9ICh1bnNpZ25lZCBsb25nICopJmt2bS0+YXJjaC5pcnFfc3RhdGVzW2lycV07CiAKQEAgLTEzNCw3ICsxNDEsOSBAQAogCQllbHNlCiAJCQljbGVhcl9iaXQoaXJxX3NvdXJjZV9pZCwgaXJxX3N0YXRlKTsKIAkJc2lnX2xldmVsID0gISEoKmlycV9zdGF0ZSk7Ci0JfSBlbHNlIC8qIERlYWwgd2l0aCBNU0kvTVNJLVggKi8KKwl9IGVsc2UgaWYgKCFsZXZlbCkKKwkJcmV0dXJuIHJldDsKKwllbHNlIC8qIERlYWwgd2l0aCBNU0kvTVNJLVggKi8KIAkJc2lnX2xldmVsID0gMTsKIAogCS8qIE5vdCBwb3NzaWJsZSB0byBkZXRlY3QgaWYgdGhlIGd1ZXN0IHVzZXMgdGhlIFBJQyBvciB0aGUKQEAgLTE1OSw2ICsxNjgsOCBAQAogCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCXVuc2lnbmVkIGdzaSA9IHBpbjsKIAorCXRyYWNlX2t2bV9hY2tfaXJxKGlycWNoaXAsIHBpbik7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZrdm0tPmlycV9yb3V0aW5nLCBsaW5rKQogCQlpZiAoZS0+dHlwZSA9PSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUCAmJgogCQkgICAgZS0+aXJxY2hpcC5pcnFjaGlwID09IGlycWNoaXAgJiYKQEAgLTE3NSwxOSArMTg2LDI2IEBACiB2b2lkIGt2bV9yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pCiB7CisJbXV0ZXhfbG9jaygma3ZtLT5pcnFfbG9jayk7CiAJaGxpc3RfYWRkX2hlYWQoJmtpYW4tPmxpbmssICZrdm0tPmFyY2guaXJxX2Fja19ub3RpZmllcl9saXN0KTsKKwltdXRleF91bmxvY2soJmt2bS0+aXJxX2xvY2spOwogfQogCi12b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKQordm9pZCBrdm1fdW5yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkgICAgc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKQogeworCW11dGV4X2xvY2soJmt2bS0+aXJxX2xvY2spOwogCWhsaXN0X2RlbF9pbml0KCZraWFuLT5saW5rKTsKKwltdXRleF91bmxvY2soJmt2bS0+aXJxX2xvY2spOwogfQogCi0vKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBrdm0tPmxvY2sgbXV0ZXggKi8KIGludCBrdm1fcmVxdWVzdF9pcnFfc291cmNlX2lkKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAl1bnNpZ25lZCBsb25nICpiaXRtYXAgPSAma3ZtLT5hcmNoLmlycV9zb3VyY2VzX2JpdG1hcDsKLQlpbnQgaXJxX3NvdXJjZV9pZCA9IGZpbmRfZmlyc3RfemVyb19iaXQoYml0bWFwLAorCWludCBpcnFfc291cmNlX2lkOworCisJbXV0ZXhfbG9jaygma3ZtLT5pcnFfbG9jayk7CisJaXJxX3NvdXJjZV9pZCA9IGZpbmRfZmlyc3RfemVyb19iaXQoYml0bWFwLAogCQkJCXNpemVvZihrdm0tPmFyY2guaXJxX3NvdXJjZXNfYml0bWFwKSk7CiAKIAlpZiAoaXJxX3NvdXJjZV9pZCA+PSBzaXplb2Yoa3ZtLT5hcmNoLmlycV9zb3VyY2VzX2JpdG1hcCkpIHsKQEAgLTE5Nyw2ICsyMTUsNyBAQAogCiAJQVNTRVJUKGlycV9zb3VyY2VfaWQgIT0gS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lEKTsKIAlzZXRfYml0KGlycV9zb3VyY2VfaWQsIGJpdG1hcCk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmlycV9sb2NrKTsKIAogCXJldHVybiBpcnFfc291cmNlX2lkOwogfQpAQCAtMjA3LDYgKzIyNiw3IEBACiAKIAlBU1NFUlQoaXJxX3NvdXJjZV9pZCAhPSBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQpOwogCisJbXV0ZXhfbG9jaygma3ZtLT5pcnFfbG9jayk7CiAJaWYgKGlycV9zb3VyY2VfaWQgPCAwIHx8CiAJICAgIGlycV9zb3VyY2VfaWQgPj0gc2l6ZW9mKGt2bS0+YXJjaC5pcnFfc291cmNlc19iaXRtYXApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAia3ZtOiBJUlEgc291cmNlIElEIG91dCBvZiByYW5nZSFcbiIpOwpAQCAtMjE1LDE5ICsyMzUsMjQgQEAKIAlmb3IgKGkgPSAwOyBpIDwgS1ZNX0lPQVBJQ19OVU1fUElOUzsgaSsrKQogCQljbGVhcl9iaXQoaXJxX3NvdXJjZV9pZCwgJmt2bS0+YXJjaC5pcnFfc3RhdGVzW2ldKTsKIAljbGVhcl9iaXQoaXJxX3NvdXJjZV9pZCwgJmt2bS0+YXJjaC5pcnFfc291cmNlc19iaXRtYXApOworCW11dGV4X3VubG9jaygma3ZtLT5pcnFfbG9jayk7CiB9CiAKIHZvaWQga3ZtX3JlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwKIAkJCQkgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbikKIHsKKwltdXRleF9sb2NrKCZrdm0tPmlycV9sb2NrKTsKIAlraW1uLT5pcnEgPSBpcnE7CiAJaGxpc3RfYWRkX2hlYWQoJmtpbW4tPmxpbmssICZrdm0tPm1hc2tfbm90aWZpZXJfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmlycV9sb2NrKTsKIH0KIAogdm9pZCBrdm1fdW5yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsCiAJCQkJICAgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbikKIHsKKwltdXRleF9sb2NrKCZrdm0tPmlycV9sb2NrKTsKIAlobGlzdF9kZWwoJmtpbW4tPmxpbmspOworCW11dGV4X3VubG9jaygma3ZtLT5pcnFfbG9jayk7CiB9CiAKIHZvaWQga3ZtX2ZpcmVfbWFza19ub3RpZmllcnMoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLCBib29sIG1hc2spCkBAIC0yMzUsNiArMjYwLDggQEAKIAlzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZrdm0tPmlycV9sb2NrKSk7CisKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShraW1uLCBuLCAma3ZtLT5tYXNrX25vdGlmaWVyX2xpc3QsIGxpbmspCiAJCWlmIChraW1uLT5pcnEgPT0gaXJxKQogCQkJa2ltbi0+ZnVuYyhraW1uLCBtYXNrKTsKQEAgLTI1MCw3ICsyNzcsOSBAQAogCiB2b2lkIGt2bV9mcmVlX2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSkKIHsKKwltdXRleF9sb2NrKCZrdm0tPmlycV9sb2NrKTsKIAlfX2t2bV9mcmVlX2lycV9yb3V0aW5nKCZrdm0tPmlycV9yb3V0aW5nKTsKKwltdXRleF91bmxvY2soJmt2bS0+aXJxX2xvY2spOwogfQogCiBzdGF0aWMgaW50IHNldHVwX3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCkBAIC0zMjUsMTMgKzM1NCwxMyBAQAogCQllID0gTlVMTDsKIAl9CiAKLQltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCW11dGV4X2xvY2soJmt2bS0+aXJxX2xvY2spOwogCWxpc3Rfc3BsaWNlKCZrdm0tPmlycV9yb3V0aW5nLCAmdG1wKTsKIAlJTklUX0xJU1RfSEVBRCgma3ZtLT5pcnFfcm91dGluZyk7CiAJbGlzdF9zcGxpY2UoJmlycV9saXN0LCAma3ZtLT5pcnFfcm91dGluZyk7CiAJSU5JVF9MSVNUX0hFQUQoJmlycV9saXN0KTsKIAlsaXN0X3NwbGljZSgmdG1wLCAmaXJxX2xpc3QpOwotCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmt2bS0+aXJxX2xvY2spOwogCiAJciA9IDA7CiAKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDI4ODRiYWYuLjg5N2JmZjMgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtNTksOSArNTksMTggQEAKICNpbmNsdWRlICJpcnEuaCIKICNlbmRpZgogCisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMva3ZtLmg+CisKIE1PRFVMRV9BVVRIT1IoIlF1bXJhbmV0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKy8qCisgKiBPcmRlcmluZyBvZiBsb2NrczoKKyAqCisgKiAJCWt2bS0+c2xvdHNfbG9jayAtLT4ga3ZtLT5sb2NrIC0tPiBrdm0tPmlycV9sb2NrCisgKi8KKwogREVGSU5FX1NQSU5MT0NLKGt2bV9sb2NrKTsKIExJU1RfSEVBRCh2bV9saXN0KTsKIApAQCAtNzksNiArODgsOCBAQAogCiBzdGF0aWMgYm9vbCBrdm1fcmVib290aW5nOwogCitzdGF0aWMgYm9vbCBsYXJnZXBhZ2VzX2VuYWJsZWQgPSB0cnVlOworCiAjaWZkZWYgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVAogc3RhdGljIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqa3ZtX2ZpbmRfYXNzaWduZWRfZGV2KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCiAJCQkJCQkgICAgICBpbnQgYXNzaWduZWRfZGV2X2lkKQpAQCAtMTIwLDE3ICsxMzEsMTMgQEAKIHsKIAlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmFzc2lnbmVkX2RldjsKIAlzdHJ1Y3Qga3ZtICprdm07Ci0JaW50IGlycSwgaTsKKwlpbnQgaTsKIAogCWFzc2lnbmVkX2RldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwsCiAJCQkJICAgIGludGVycnVwdF93b3JrKTsKIAlrdm0gPSBhc3NpZ25lZF9kZXYtPmt2bTsKIAotCS8qIFRoaXMgaXMgdGFrZW4gdG8gc2FmZWx5IGluamVjdCBpcnEgaW5zaWRlIHRoZSBndWVzdC4gV2hlbgotCSAqIHRoZSBpbnRlcnJ1cHQgaW5qZWN0aW9uIChvciB0aGUgaW9hcGljIGNvZGUpIHVzZXMgYQotCSAqIGZpbmVyLWdyYWluZWQgbG9jaywgdXBkYXRlIHRoaXMKLQkgKi8KLQltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCW11dGV4X2xvY2soJmt2bS0+aXJxX2xvY2spOwogCXNwaW5fbG9ja19pcnEoJmFzc2lnbmVkX2Rldi0+YXNzaWduZWRfZGV2X2xvY2spOwogCWlmIChhc3NpZ25lZF9kZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmIEtWTV9ERVZfSVJRX0hPU1RfTVNJWCkgewogCQlzdHJ1Y3Qga3ZtX2d1ZXN0X21zaXhfZW50cnkgKmd1ZXN0X2VudHJpZXMgPQpAQCAtMTQzLDIzICsxNTAsMTMgQEAKIAkJCWt2bV9zZXRfaXJxKGFzc2lnbmVkX2Rldi0+a3ZtLAogCQkJCSAgICBhc3NpZ25lZF9kZXYtPmlycV9zb3VyY2VfaWQsCiAJCQkJICAgIGd1ZXN0X2VudHJpZXNbaV0udmVjdG9yLCAxKTsKLQkJCWlycSA9IGFzc2lnbmVkX2Rldi0+aG9zdF9tc2l4X2VudHJpZXNbaV0udmVjdG9yOwotCQkJaWYgKGlycSAhPSAwKQotCQkJCWVuYWJsZV9pcnEoaXJxKTsKLQkJCWFzc2lnbmVkX2Rldi0+aG9zdF9pcnFfZGlzYWJsZWQgPSBmYWxzZTsKIAkJfQotCX0gZWxzZSB7CisJfSBlbHNlCiAJCWt2bV9zZXRfaXJxKGFzc2lnbmVkX2Rldi0+a3ZtLCBhc3NpZ25lZF9kZXYtPmlycV9zb3VyY2VfaWQsCiAJCQkgICAgYXNzaWduZWRfZGV2LT5ndWVzdF9pcnEsIDEpOwotCQlpZiAoYXNzaWduZWRfZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJgotCQkJCUtWTV9ERVZfSVJRX0dVRVNUX01TSSkgewotCQkJZW5hYmxlX2lycShhc3NpZ25lZF9kZXYtPmhvc3RfaXJxKTsKLQkJCWFzc2lnbmVkX2Rldi0+aG9zdF9pcnFfZGlzYWJsZWQgPSBmYWxzZTsKLQkJfQotCX0KIAogCXNwaW5fdW5sb2NrX2lycSgmYXNzaWduZWRfZGV2LT5hc3NpZ25lZF9kZXZfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZhc3NpZ25lZF9kZXYtPmt2bS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZhc3NpZ25lZF9kZXYtPmt2bS0+aXJxX2xvY2spOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qga3ZtX2Fzc2lnbmVkX2Rldl9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTE3OSw4ICsxNzYsMTAgQEAKIAogCXNjaGVkdWxlX3dvcmsoJmFzc2lnbmVkX2Rldi0+aW50ZXJydXB0X3dvcmspOwogCi0JZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7Ci0JYXNzaWduZWRfZGV2LT5ob3N0X2lycV9kaXNhYmxlZCA9IHRydWU7CisJaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0RFVl9JUlFfR1VFU1RfSU5UWCkgeworCQlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKwkJYXNzaWduZWRfZGV2LT5ob3N0X2lycV9kaXNhYmxlZCA9IHRydWU7CisJfQogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXNzaWduZWRfZGV2LT5hc3NpZ25lZF9kZXZfbG9jaywgZmxhZ3MpOwpAQCAtMjE1LDcgKzIxNCw3IEBACiBzdGF0aWMgdm9pZCBkZWFzc2lnbl9ndWVzdF9pcnEoc3RydWN0IGt2bSAqa3ZtLAogCQkJICAgICAgIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqYXNzaWduZWRfZGV2KQogewotCWt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoJmFzc2lnbmVkX2Rldi0+YWNrX25vdGlmaWVyKTsKKwlrdm1fdW5yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKGt2bSwgJmFzc2lnbmVkX2Rldi0+YWNrX25vdGlmaWVyKTsKIAlhc3NpZ25lZF9kZXYtPmFja19ub3RpZmllci5nc2kgPSAtMTsKIAogCWlmIChhc3NpZ25lZF9kZXYtPmlycV9zb3VyY2VfaWQgIT0gLTEpCkBAIC00MTcsNiArNDE2LDcgQEAKIHsKIAlkZXYtPmd1ZXN0X2lycSA9IGlycS0+Z3Vlc3RfaXJxOwogCWRldi0+YWNrX25vdGlmaWVyLmdzaSA9IC0xOworCWRldi0+aG9zdF9pcnFfZGlzYWJsZWQgPSBmYWxzZTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtNDI3LDYgKzQyNyw3IEBACiB7CiAJZGV2LT5ndWVzdF9pcnEgPSBpcnEtPmd1ZXN0X2lycTsKIAlkZXYtPmFja19ub3RpZmllci5nc2kgPSAtMTsKKwlkZXYtPmhvc3RfaXJxX2Rpc2FibGVkID0gZmFsc2U7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKQEAgLTY5MywxMSArNjk0LDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGludCB2YWxpZF92Y3B1KGludCBuKQotewotCXJldHVybiBsaWtlbHkobiA+PSAwICYmIG4gPCBLVk1fTUFYX1ZDUFVTKTsKLX0KLQogaW5saW5lIGludCBrdm1faXNfbW1pb19wZm4ocGZuX3QgcGZuKQogewogCWlmIChwZm5fdmFsaWQocGZuKSkgewpAQCAtNzQ1LDEyICs3NDEsOSBAQAogCWlmIChhbGxvY19jcHVtYXNrX3ZhcigmY3B1cywgR0ZQX0FUT01JQykpCiAJCWNwdW1hc2tfY2xlYXIoY3B1cyk7CiAKLQltZSA9IGdldF9jcHUoKTsKIAlzcGluX2xvY2soJmt2bS0+cmVxdWVzdHNfbG9jayk7Ci0JZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7ICsraSkgewotCQl2Y3B1ID0ga3ZtLT52Y3B1c1tpXTsKLQkJaWYgKCF2Y3B1KQotCQkJY29udGludWU7CisJbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKSB7CiAJCWlmICh0ZXN0X2FuZF9zZXRfYml0KHJlcSwgJnZjcHUtPnJlcXVlc3RzKSkKIAkJCWNvbnRpbnVlOwogCQljcHUgPSB2Y3B1LT5jcHU7CkBAIC03NjQsNyArNzU3LDYgQEAKIAllbHNlCiAJCWNhbGxlZCA9IGZhbHNlOwogCXNwaW5fdW5sb2NrKCZrdm0tPnJlcXVlc3RzX2xvY2spOwotCXB1dF9jcHUoKTsKIAlmcmVlX2NwdW1hc2tfdmFyKGNwdXMpOwogCXJldHVybiBjYWxsZWQ7CiB9CkBAIC05ODYsNyArOTc4LDkgQEAKIAlzcGluX2xvY2tfaW5pdCgma3ZtLT5tbXVfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmt2bS0+cmVxdWVzdHNfbG9jayk7CiAJa3ZtX2lvX2J1c19pbml0KCZrdm0tPnBpb19idXMpOworCWt2bV9ldmVudGZkX2luaXQoa3ZtKTsKIAltdXRleF9pbml0KCZrdm0tPmxvY2spOworCW11dGV4X2luaXQoJmt2bS0+aXJxX2xvY2spOwogCWt2bV9pb19idXNfaW5pdCgma3ZtLT5tbWlvX2J1cyk7CiAJaW5pdF9yd3NlbSgma3ZtLT5zbG90c19sb2NrKTsKIAlhdG9taWNfc2V0KCZrdm0tPnVzZXJzX2NvdW50LCAxKTsKQEAgLTEwMDYsMTkgKzEwMDAsMjUgQEAKIHN0YXRpYyB2b2lkIGt2bV9mcmVlX3BoeXNtZW1fc2xvdChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpmcmVlLAogCQkJCSAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZG9udCkKIHsKKwlpbnQgaTsKKwogCWlmICghZG9udCB8fCBmcmVlLT5ybWFwICE9IGRvbnQtPnJtYXApCiAJCXZmcmVlKGZyZWUtPnJtYXApOwogCiAJaWYgKCFkb250IHx8IGZyZWUtPmRpcnR5X2JpdG1hcCAhPSBkb250LT5kaXJ0eV9iaXRtYXApCiAJCXZmcmVlKGZyZWUtPmRpcnR5X2JpdG1hcCk7CiAKLQlpZiAoIWRvbnQgfHwgZnJlZS0+bHBhZ2VfaW5mbyAhPSBkb250LT5scGFnZV9pbmZvKQotCQl2ZnJlZShmcmVlLT5scGFnZV9pbmZvKTsKKworCWZvciAoaSA9IDA7IGkgPCBLVk1fTlJfUEFHRV9TSVpFUyAtIDE7ICsraSkgeworCQlpZiAoIWRvbnQgfHwgZnJlZS0+bHBhZ2VfaW5mb1tpXSAhPSBkb250LT5scGFnZV9pbmZvW2ldKSB7CisJCQl2ZnJlZShmcmVlLT5scGFnZV9pbmZvW2ldKTsKKwkJCWZyZWUtPmxwYWdlX2luZm9baV0gPSBOVUxMOworCQl9CisJfQogCiAJZnJlZS0+bnBhZ2VzID0gMDsKIAlmcmVlLT5kaXJ0eV9iaXRtYXAgPSBOVUxMOwogCWZyZWUtPnJtYXAgPSBOVUxMOwotCWZyZWUtPmxwYWdlX2luZm8gPSBOVUxMOwogfQogCiB2b2lkIGt2bV9mcmVlX3BoeXNtZW0oc3RydWN0IGt2bSAqa3ZtKQpAQCAtMTA3MSw2ICsxMDcxLDggQEAKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKKwlrdm1faXJxZmRfcmVsZWFzZShrdm0pOworCiAJa3ZtX3B1dF9rdm0oa3ZtKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwODksOCArMTA5MSw4IEBACiB7CiAJaW50IHI7CiAJZ2ZuX3QgYmFzZV9nZm47Ci0JdW5zaWduZWQgbG9uZyBucGFnZXMsIHVnZm47Ci0JdW5zaWduZWQgbG9uZyBsYXJnZXBhZ2VzLCBpOworCXVuc2lnbmVkIGxvbmcgbnBhZ2VzOworCXVuc2lnbmVkIGxvbmcgaTsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90OwogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3Qgb2xkLCBuZXc7CiAKQEAgLTExNjQsMzEgKzExNjYsNTEgQEAKIAkJZWxzZQogCQkJbmV3LnVzZXJzcGFjZV9hZGRyID0gMDsKIAl9Ci0JaWYgKG5wYWdlcyAmJiAhbmV3LmxwYWdlX2luZm8pIHsKLQkJbGFyZ2VwYWdlcyA9IDEgKyAoYmFzZV9nZm4gKyBucGFnZXMgLSAxKSAvIEtWTV9QQUdFU19QRVJfSFBBR0U7Ci0JCWxhcmdlcGFnZXMgLT0gYmFzZV9nZm4gLyBLVk1fUEFHRVNfUEVSX0hQQUdFOworCWlmICghbnBhZ2VzKQorCQlnb3RvIHNraXBfbHBhZ2U7CiAKLQkJbmV3LmxwYWdlX2luZm8gPSB2bWFsbG9jKGxhcmdlcGFnZXMgKiBzaXplb2YoKm5ldy5scGFnZV9pbmZvKSk7CisJZm9yIChpID0gMDsgaSA8IEtWTV9OUl9QQUdFX1NJWkVTIC0gMTsgKytpKSB7CisJCXVuc2lnbmVkIGxvbmcgdWdmbjsKKwkJdW5zaWduZWQgbG9uZyBqOworCQlpbnQgbHBhZ2VzOworCQlpbnQgbGV2ZWwgPSBpICsgMjsKIAotCQlpZiAoIW5ldy5scGFnZV9pbmZvKQorCQkvKiBBdm9pZCB1bnVzZWQgdmFyaWFibGUgd2FybmluZyBpZiBubyBsYXJnZSBwYWdlcyAqLworCQkodm9pZClsZXZlbDsKKworCQlpZiAobmV3LmxwYWdlX2luZm9baV0pCisJCQljb250aW51ZTsKKworCQlscGFnZXMgPSAxICsgKGJhc2VfZ2ZuICsgbnBhZ2VzIC0gMSkgLworCQkJICAgICBLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKTsKKwkJbHBhZ2VzIC09IGJhc2VfZ2ZuIC8gS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCk7CisKKwkJbmV3LmxwYWdlX2luZm9baV0gPSB2bWFsbG9jKGxwYWdlcyAqIHNpemVvZigqbmV3LmxwYWdlX2luZm9baV0pKTsKKworCQlpZiAoIW5ldy5scGFnZV9pbmZvW2ldKQogCQkJZ290byBvdXRfZnJlZTsKIAotCQltZW1zZXQobmV3LmxwYWdlX2luZm8sIDAsIGxhcmdlcGFnZXMgKiBzaXplb2YoKm5ldy5scGFnZV9pbmZvKSk7CisJCW1lbXNldChuZXcubHBhZ2VfaW5mb1tpXSwgMCwKKwkJICAgICAgIGxwYWdlcyAqIHNpemVvZigqbmV3LmxwYWdlX2luZm9baV0pKTsKIAotCQlpZiAoYmFzZV9nZm4gJSBLVk1fUEFHRVNfUEVSX0hQQUdFKQotCQkJbmV3LmxwYWdlX2luZm9bMF0ud3JpdGVfY291bnQgPSAxOwotCQlpZiAoKGJhc2VfZ2ZuK25wYWdlcykgJSBLVk1fUEFHRVNfUEVSX0hQQUdFKQotCQkJbmV3LmxwYWdlX2luZm9bbGFyZ2VwYWdlcy0xXS53cml0ZV9jb3VudCA9IDE7CisJCWlmIChiYXNlX2dmbiAlIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKQorCQkJbmV3LmxwYWdlX2luZm9baV1bMF0ud3JpdGVfY291bnQgPSAxOworCQlpZiAoKGJhc2VfZ2ZuK25wYWdlcykgJSBLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKSkKKwkJCW5ldy5scGFnZV9pbmZvW2ldW2xwYWdlcyAtIDFdLndyaXRlX2NvdW50ID0gMTsKIAkJdWdmbiA9IG5ldy51c2Vyc3BhY2VfYWRkciA+PiBQQUdFX1NISUZUOwogCQkvKgogCQkgKiBJZiB0aGUgZ2ZuIGFuZCB1c2Vyc3BhY2UgYWRkcmVzcyBhcmUgbm90IGFsaWduZWQgd3J0IGVhY2gKLQkJICogb3RoZXIsIGRpc2FibGUgbGFyZ2UgcGFnZSBzdXBwb3J0IGZvciB0aGlzIHNsb3QKKwkJICogb3RoZXIsIG9yIGlmIGV4cGxpY2l0bHkgYXNrZWQgdG8sIGRpc2FibGUgbGFyZ2UgcGFnZQorCQkgKiBzdXBwb3J0IGZvciB0aGlzIHNsb3QKIAkJICovCi0JCWlmICgoYmFzZV9nZm4gXiB1Z2ZuKSAmIChLVk1fUEFHRVNfUEVSX0hQQUdFIC0gMSkpCi0JCQlmb3IgKGkgPSAwOyBpIDwgbGFyZ2VwYWdlczsgKytpKQotCQkJCW5ldy5scGFnZV9pbmZvW2ldLndyaXRlX2NvdW50ID0gMTsKKwkJaWYgKChiYXNlX2dmbiBeIHVnZm4pICYgKEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpIC0gMSkgfHwKKwkJICAgICFsYXJnZXBhZ2VzX2VuYWJsZWQpCisJCQlmb3IgKGogPSAwOyBqIDwgbHBhZ2VzOyArK2opCisJCQkJbmV3LmxwYWdlX2luZm9baV1bal0ud3JpdGVfY291bnQgPSAxOwogCX0KIAorc2tpcF9scGFnZToKKwogCS8qIEFsbG9jYXRlIHBhZ2UgZGlydHkgYml0bWFwIGlmIG5lZWRlZCAqLwogCWlmICgobmV3LmZsYWdzICYgS1ZNX01FTV9MT0dfRElSVFlfUEFHRVMpICYmICFuZXcuZGlydHlfYml0bWFwKSB7CiAJCXVuc2lnbmVkIGRpcnR5X2J5dGVzID0gQUxJR04obnBhZ2VzLCBCSVRTX1BFUl9MT05HKSAvIDg7CkBAIC0xMjAwLDYgKzEyMjIsMTAgQEAKIAkJaWYgKG9sZC5ucGFnZXMpCiAJCQlrdm1fYXJjaF9mbHVzaF9zaGFkb3coa3ZtKTsKIAl9CisjZWxzZSAgLyogbm90IGRlZmluZWQgQ09ORklHX1MzOTAgKi8KKwluZXcudXNlcl9hbGxvYyA9IHVzZXJfYWxsb2M7CisJaWYgKHVzZXJfYWxsb2MpCisJCW5ldy51c2Vyc3BhY2VfYWRkciA9IG1lbS0+dXNlcnNwYWNlX2FkZHI7CiAjZW5kaWYgLyogbm90IGRlZmluZWQgQ09ORklHX1MzOTAgKi8KIAogCWlmICghbnBhZ2VzKQpAQCAtMTI5OSw2ICsxMzI1LDEyIEBACiAJcmV0dXJuIHI7CiB9CiAKK3ZvaWQga3ZtX2Rpc2FibGVfbGFyZ2VwYWdlcyh2b2lkKQoreworCWxhcmdlcGFnZXNfZW5hYmxlZCA9IGZhbHNlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2Rpc2FibGVfbGFyZ2VwYWdlcyk7CisKIGludCBpc19lcnJvcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXJldHVybiBwYWdlID09IGJhZF9wYWdlOwpAQCAtMTYzNSw5ICsxNjY3LDcgQEAKIAlmb3IgKDs7KSB7CiAJCXByZXBhcmVfdG9fd2FpdCgmdmNwdS0+d3EsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCi0JCWlmICgoa3ZtX2FyY2hfaW50ZXJydXB0X2FsbG93ZWQodmNwdSkgJiYKLQkJCQkJa3ZtX2NwdV9oYXNfaW50ZXJydXB0KHZjcHUpKSB8fAotCQkJCWt2bV9hcmNoX3ZjcHVfcnVubmFibGUodmNwdSkpIHsKKwkJaWYgKGt2bV9hcmNoX3ZjcHVfcnVubmFibGUodmNwdSkpIHsKIAkJCXNldF9iaXQoS1ZNX1JFUV9VTkhBTFQsICZ2Y3B1LT5yZXF1ZXN0cyk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTcxNCwyNCArMTc0NCwxOCBAQAogICovCiBzdGF0aWMgaW50IGNyZWF0ZV92Y3B1X2ZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpbnQgZmQgPSBhbm9uX2lub2RlX2dldGZkKCJrdm0tdmNwdSIsICZrdm1fdmNwdV9mb3BzLCB2Y3B1LCAwKTsKLQlpZiAoZmQgPCAwKQotCQlrdm1fcHV0X2t2bSh2Y3B1LT5rdm0pOwotCXJldHVybiBmZDsKKwlyZXR1cm4gYW5vbl9pbm9kZV9nZXRmZCgia3ZtLXZjcHUiLCAma3ZtX3ZjcHVfZm9wcywgdmNwdSwgMCk7CiB9CiAKIC8qCiAgKiBDcmVhdGVzIHNvbWUgdmlydHVhbCBjcHVzLiAgR29vZCBsdWNrIGNyZWF0aW5nIG1vcmUgdGhhbiBvbmUuCiAgKi8KLXN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgaW50IG4pCitzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpZCkKIHsKIAlpbnQgcjsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCAqdjsKIAotCWlmICghdmFsaWRfdmNwdShuKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl2Y3B1ID0ga3ZtX2FyY2hfdmNwdV9jcmVhdGUoa3ZtLCBuKTsKKwl2Y3B1ID0ga3ZtX2FyY2hfdmNwdV9jcmVhdGUoa3ZtLCBpZCk7CiAJaWYgKElTX0VSUih2Y3B1KSkKIAkJcmV0dXJuIFBUUl9FUlIodmNwdSk7CiAKQEAgLTE3NDIsMjMgKzE3NjYsMzggQEAKIAkJcmV0dXJuIHI7CiAKIAltdXRleF9sb2NrKCZrdm0tPmxvY2spOwotCWlmIChrdm0tPnZjcHVzW25dKSB7Ci0JCXIgPSAtRUVYSVNUOworCWlmIChhdG9taWNfcmVhZCgma3ZtLT5vbmxpbmVfdmNwdXMpID09IEtWTV9NQVhfVkNQVVMpIHsKKwkJciA9IC1FSU5WQUw7CiAJCWdvdG8gdmNwdV9kZXN0cm95OwogCX0KLQlrdm0tPnZjcHVzW25dID0gdmNwdTsKLQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisKKwlrdm1fZm9yX2VhY2hfdmNwdShyLCB2LCBrdm0pCisJCWlmICh2LT52Y3B1X2lkID09IGlkKSB7CisJCQlyID0gLUVFWElTVDsKKwkJCWdvdG8gdmNwdV9kZXN0cm95OworCQl9CisKKwlCVUdfT04oa3ZtLT52Y3B1c1thdG9taWNfcmVhZCgma3ZtLT5vbmxpbmVfdmNwdXMpXSk7CiAKIAkvKiBOb3cgaXQncyBhbGwgc2V0IHVwLCBsZXQgdXNlcnNwYWNlIHJlYWNoIGl0ICovCiAJa3ZtX2dldF9rdm0oa3ZtKTsKIAlyID0gY3JlYXRlX3ZjcHVfZmQodmNwdSk7Ci0JaWYgKHIgPCAwKQotCQlnb3RvIHVubGluazsKKwlpZiAociA8IDApIHsKKwkJa3ZtX3B1dF9rdm0oa3ZtKTsKKwkJZ290byB2Y3B1X2Rlc3Ryb3k7CisJfQorCisJa3ZtLT52Y3B1c1thdG9taWNfcmVhZCgma3ZtLT5vbmxpbmVfdmNwdXMpXSA9IHZjcHU7CisJc21wX3dtYigpOworCWF0b21pY19pbmMoJmt2bS0+b25saW5lX3ZjcHVzKTsKKworI2lmZGVmIENPTkZJR19LVk1fQVBJQ19BUkNISVRFQ1RVUkUKKwlpZiAoa3ZtLT5ic3BfdmNwdV9pZCA9PSBpZCkKKwkJa3ZtLT5ic3BfdmNwdSA9IHZjcHU7CisjZW5kaWYKKwltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiAJcmV0dXJuIHI7CiAKLXVubGluazoKLQltdXRleF9sb2NrKCZrdm0tPmxvY2spOwotCWt2bS0+dmNwdXNbbl0gPSBOVUxMOwogdmNwdV9kZXN0cm95OgogCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIAlrdm1fYXJjaF92Y3B1X2Rlc3Ryb3kodmNwdSk7CkBAIC0yMTk5LDYgKzIyMzgsNyBAQAogCQl2ZnJlZShlbnRyaWVzKTsKIAkJYnJlYWs7CiAJfQorI2VuZGlmIC8qIEtWTV9DQVBfSVJRX1JPVVRJTkcgKi8KICNpZmRlZiBfX0tWTV9IQVZFX01TSVgKIAljYXNlIEtWTV9BU1NJR05fU0VUX01TSVhfTlI6IHsKIAkJc3RydWN0IGt2bV9hc3NpZ25lZF9tc2l4X25yIGVudHJ5X25yOwpAQCAtMjIyMSw3ICsyMjYxLDM1IEBACiAJCWJyZWFrOwogCX0KICNlbmRpZgotI2VuZGlmIC8qIEtWTV9DQVBfSVJRX1JPVVRJTkcgKi8KKwljYXNlIEtWTV9JUlFGRDogeworCQlzdHJ1Y3Qga3ZtX2lycWZkIGRhdGE7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgYXJncCwgc2l6ZW9mIGRhdGEpKQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1faXJxZmQoa3ZtLCBkYXRhLmZkLCBkYXRhLmdzaSwgZGF0YS5mbGFncyk7CisJCWJyZWFrOworCX0KKwljYXNlIEtWTV9JT0VWRU5URkQ6IHsKKwkJc3RydWN0IGt2bV9pb2V2ZW50ZmQgZGF0YTsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZkYXRhLCBhcmdwLCBzaXplb2YgZGF0YSkpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV9pb2V2ZW50ZmQoa3ZtLCAmZGF0YSk7CisJCWJyZWFrOworCX0KKyNpZmRlZiBDT05GSUdfS1ZNX0FQSUNfQVJDSElURUNUVVJFCisJY2FzZSBLVk1fU0VUX0JPT1RfQ1BVX0lEOgorCQlyID0gMDsKKwkJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKKwkJaWYgKGF0b21pY19yZWFkKCZrdm0tPm9ubGluZV92Y3B1cykgIT0gMCkKKwkJCXIgPSAtRUJVU1k7CisJCWVsc2UKKwkJCWt2bS0+YnNwX3ZjcHVfaWQgPSBhcmc7CisJCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwkJYnJlYWs7CisjZW5kaWYKIAlkZWZhdWx0OgogCQlyID0ga3ZtX2FyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7CiAJfQpAQCAtMjI4OCw2ICsyMzU2LDkgQEAKIAljYXNlIEtWTV9DQVBfVVNFUl9NRU1PUlk6CiAJY2FzZSBLVk1fQ0FQX0RFU1RST1lfTUVNT1JZX1JFR0lPTl9XT1JLUzoKIAljYXNlIEtWTV9DQVBfSk9JTl9NRU1PUllfUkVHSU9OU19XT1JLUzoKKyNpZmRlZiBDT05GSUdfS1ZNX0FQSUNfQVJDSElURUNUVVJFCisJY2FzZSBLVk1fQ0FQX1NFVF9CT09UX0NQVV9JRDoKKyNlbmRpZgogCQlyZXR1cm4gMTsKICNpZmRlZiBDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUAogCWNhc2UgS1ZNX0NBUF9JUlFfUk9VVElORzoKQEAgLTIzMzUsNyArMjQwNiw3IEBACiAJY2FzZSBLVk1fVFJBQ0VfRU5BQkxFOgogCWNhc2UgS1ZNX1RSQUNFX1BBVVNFOgogCWNhc2UgS1ZNX1RSQUNFX0RJU0FCTEU6Ci0JCXIgPSBrdm1fdHJhY2VfaW9jdGwoaW9jdGwsIGFyZyk7CisJCXIgPSAtRU9QTk9UU1VQUDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGt2bV9hcmNoX2Rldl9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTsKQEAgLTI0NDksMjYgKzI1MjAsNzEgQEAKIAl9CiB9CiAKLXN0cnVjdCBrdm1faW9fZGV2aWNlICprdm1faW9fYnVzX2ZpbmRfZGV2KHN0cnVjdCBrdm1faW9fYnVzICpidXMsCi0JCQkJCSAgZ3BhX3QgYWRkciwgaW50IGxlbiwgaW50IGlzX3dyaXRlKQorLyoga3ZtX2lvX2J1c193cml0ZSAtIGNhbGxlZCB1bmRlciBrdm0tPnNsb3RzX2xvY2sgKi8KK2ludCBrdm1faW9fYnVzX3dyaXRlKHN0cnVjdCBrdm1faW9fYnVzICpidXMsIGdwYV90IGFkZHIsCisJCSAgICAgaW50IGxlbiwgY29uc3Qgdm9pZCAqdmFsKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBidXMtPmRldl9jb3VudDsgaSsrKQorCQlpZiAoIWt2bV9pb2RldmljZV93cml0ZShidXMtPmRldnNbaV0sIGFkZHIsIGxlbiwgdmFsKSkKKwkJCXJldHVybiAwOworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworLyoga3ZtX2lvX2J1c19yZWFkIC0gY2FsbGVkIHVuZGVyIGt2bS0+c2xvdHNfbG9jayAqLworaW50IGt2bV9pb19idXNfcmVhZChzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzLCBncGFfdCBhZGRyLCBpbnQgbGVuLCB2b2lkICp2YWwpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGJ1cy0+ZGV2X2NvdW50OyBpKyspCisJCWlmICgha3ZtX2lvZGV2aWNlX3JlYWQoYnVzLT5kZXZzW2ldLCBhZGRyLCBsZW4sIHZhbCkpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK2ludCBrdm1faW9fYnVzX3JlZ2lzdGVyX2RldihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faW9fYnVzICpidXMsCisJCQkgICAgIHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCWRvd25fd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CisJcmV0ID0gX19rdm1faW9fYnVzX3JlZ2lzdGVyX2RldihidXMsIGRldik7CisJdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBBbiB1bmxvY2tlZCB2ZXJzaW9uLiBDYWxsZXIgbXVzdCBoYXZlIHdyaXRlIGxvY2sgb24gc2xvdHNfbG9jay4gKi8KK2ludCBfX2t2bV9pb19idXNfcmVnaXN0ZXJfZGV2KHN0cnVjdCBrdm1faW9fYnVzICpidXMsCisJCQkgICAgICBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KQoreworCWlmIChidXMtPmRldl9jb3VudCA+IE5SX0lPQlVTX0RFVlMtMSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlidXMtPmRldnNbYnVzLT5kZXZfY291bnQrK10gPSBkZXY7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBrdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KHN0cnVjdCBrdm0gKmt2bSwKKwkJCSAgICAgICBzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzLAorCQkJICAgICAgIHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCit7CisJZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKwlfX2t2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoYnVzLCBkZXYpOworCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworfQorCisvKiBBbiB1bmxvY2tlZCB2ZXJzaW9uLiBDYWxsZXIgbXVzdCBoYXZlIHdyaXRlIGxvY2sgb24gc2xvdHNfbG9jay4gKi8KK3ZvaWQgX19rdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KHN0cnVjdCBrdm1faW9fYnVzICpidXMsCisJCQkJIHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYnVzLT5kZXZfY291bnQ7IGkrKykgewotCQlzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqcG9zID0gYnVzLT5kZXZzW2ldOwotCi0JCWlmIChwb3MtPmluX3JhbmdlKHBvcywgYWRkciwgbGVuLCBpc193cml0ZSkpCi0JCQlyZXR1cm4gcG9zOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi12b2lkIGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KHN0cnVjdCBrdm1faW9fYnVzICpidXMsIHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCi17Ci0JQlVHX09OKGJ1cy0+ZGV2X2NvdW50ID4gKE5SX0lPQlVTX0RFVlMtMSkpOwotCi0JYnVzLT5kZXZzW2J1cy0+ZGV2X2NvdW50KytdID0gZGV2OworCWZvciAoaSA9IDA7IGkgPCBidXMtPmRldl9jb3VudDsgaSsrKQorCQlpZiAoYnVzLT5kZXZzW2ldID09IGRldikgeworCQkJYnVzLT5kZXZzW2ldID0gYnVzLT5kZXZzWy0tYnVzLT5kZXZfY291bnRdOworCQkJYnJlYWs7CisJCX0KIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBrdm1fY3B1X25vdGlmaWVyID0gewpAQCAtMjUwMSwxMSArMjYxNyw5IEBACiAJKnZhbCA9IDA7CiAJc3Bpbl9sb2NrKCZrdm1fbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShrdm0sICZ2bV9saXN0LCB2bV9saXN0KQotCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKSB7Ci0JCQl2Y3B1ID0ga3ZtLT52Y3B1c1tpXTsKLQkJCWlmICh2Y3B1KQotCQkJCSp2YWwgKz0gKih1MzIgKikoKHZvaWQgKil2Y3B1ICsgb2Zmc2V0KTsKLQkJfQorCQlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pCisJCQkqdmFsICs9ICoodTMyICopKCh2b2lkICopdmNwdSArIG9mZnNldCk7CisKIAlzcGluX3VubG9jaygma3ZtX2xvY2spOwogCXJldHVybiAwOwogfQpAQCAtMjY3OSwxNSArMjc5MywxNSBAQAogCV9fZnJlZV9wYWdlKGJhZF9wYWdlKTsKIG91dDoKIAlrdm1fYXJjaF9leGl0KCk7Ci0Ja3ZtX2V4aXRfZGVidWcoKTsKIG91dF9mYWlsOgorCWt2bV9leGl0X2RlYnVnKCk7CiAJcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1faW5pdCk7CiAKIHZvaWQga3ZtX2V4aXQodm9pZCkKIHsKLQlrdm1fdHJhY2VfY2xlYW51cCgpOworCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOwogCW1pc2NfZGVyZWdpc3Rlcigma3ZtX2Rldik7CiAJa21lbV9jYWNoZV9kZXN0cm95KGt2bV92Y3B1X2NhY2hlKTsKIAlzeXNkZXZfdW5yZWdpc3Rlcigma3ZtX3N5c2Rldik7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fdHJhY2UuYyBiL3ZpcnQva3ZtL2t2bV90cmFjZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTk4NzQ0Li4wMDAwMDAwCi0tLSBhL3ZpcnQva3ZtL2t2bV90cmFjZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qCi0gKiBrdm0gdHJhY2UKLSAqCi0gKiBJdCBpcyBkZXNpZ25lZCB0byBhbGxvdyBkZWJ1Z2dpbmcgdHJhY2VzIG9mIGt2bSB0byBiZSBnZW5lcmF0ZWQKLSAqIG9uIFVQIC8gU01QIG1hY2hpbmVzLiAgRWFjaCB0cmFjZSBlbnRyeSBjYW4gYmUgdGltZXN0YW1wZWQgc28gdGhhdAotICogaXQncyBwb3NzaWJsZSB0byByZWNvbnN0cnVjdCBhIGNocm9ub2xvZ2ljYWwgcmVjb3JkIG9mIHRyYWNlIGV2ZW50cy4KLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiByZWZlcnMgdG8gYmxrdHJhY2Uga2VybmVsIHN1cHBvcnQuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmVucyBBeGJvZSA8YXhib2VAa2VybmVsLmRrPgotICoKLSAqIEF1dGhvcnM6IEZlbmcoRXJpYykgTGl1LCBlcmljLmUubGl1QGludGVsLmNvbQotICoKLSAqIERhdGU6ICAgIEZlYiAyMDA4Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgotCi0jZGVmaW5lIEtWTV9UUkFDRV9TVEFURV9SVU5OSU5HIAkoMSA8PCAwKQotI2RlZmluZSBLVk1fVFJBQ0VfU1RBVEVfUEFVU0UgCQkoMSA8PCAxKQotI2RlZmluZSBLVk1fVFJBQ0VfU1RBVEVfQ0xFQVJVUCAJKDEgPDwgMikKLQotc3RydWN0IGt2bV90cmFjZSB7Ci0JaW50IHRyYWNlX3N0YXRlOwotCXN0cnVjdCByY2hhbiAqcmNoYW47Ci0Jc3RydWN0IGRlbnRyeSAqbG9zdF9maWxlOwotCWF0b21pY190IGxvc3RfcmVjb3JkczsKLX07Ci1zdGF0aWMgc3RydWN0IGt2bV90cmFjZSAqa3ZtX3RyYWNlOwotCi1zdHJ1Y3Qga3ZtX3RyYWNlX3Byb2JlIHsKLQljb25zdCBjaGFyICpuYW1lOwotCWNvbnN0IGNoYXIgKmZvcm1hdDsKLQl1MzIgdGltZXN0YW1wX2luOwotCW1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZV9mdW5jOwotfTsKLQotc3RhdGljIGlubGluZSBpbnQgY2FsY19yZWNfc2l6ZShpbnQgdGltZXN0YW1wLCBpbnQgZXh0cmEpCi17Ci0JaW50IHJlY19zaXplID0gS1ZNX1RSQ19IRUFEX1NJWkU7Ci0KLQlyZWNfc2l6ZSArPSBleHRyYTsKLQlyZXR1cm4gdGltZXN0YW1wID8gcmVjX3NpemUgKz0gS1ZNX1RSQ19DWUNMRV9TSVpFIDogcmVjX3NpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIGt2bV9hZGRfdHJhY2Uodm9pZCAqcHJvYmVfcHJpdmF0ZSwgdm9pZCAqY2FsbF9kYXRhLAotCQkJICBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgKmFyZ3MpCi17Ci0Jc3RydWN0IGt2bV90cmFjZV9wcm9iZSAqcCA9IHByb2JlX3ByaXZhdGU7Ci0Jc3RydWN0IGt2bV90cmFjZSAqa3QgPSBrdm1fdHJhY2U7Ci0Jc3RydWN0IGt2bV90cmFjZV9yZWMgcmVjOwotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlpbnQgICAgaSwgc2l6ZTsKLQl1MzIgICAgZXh0cmE7Ci0KLQlpZiAodW5saWtlbHkoa3QtPnRyYWNlX3N0YXRlICE9IEtWTV9UUkFDRV9TVEFURV9SVU5OSU5HKSkKLQkJcmV0dXJuOwotCi0JcmVjLnJlY192YWwJPSBUUkFDRV9SRUNfRVZFTlRfSUQodmFfYXJnKCphcmdzLCB1MzIpKTsKLQl2Y3B1CQk9IHZhX2FyZygqYXJncywgc3RydWN0IGt2bV92Y3B1ICopOwotCXJlYy5waWQJCT0gY3VycmVudC0+dGdpZDsKLQlyZWMudmNwdV9pZAk9IHZjcHUtPnZjcHVfaWQ7Ci0KLQlleHRyYSAgIAk9IHZhX2FyZygqYXJncywgdTMyKTsKLQlXQVJOX09OKCEoZXh0cmEgPD0gS1ZNX1RSQ19FWFRSQV9NQVgpKTsKLQlleHRyYSAJCT0gbWluX3QodTMyLCBleHRyYSwgS1ZNX1RSQ19FWFRSQV9NQVgpOwotCi0JcmVjLnJlY192YWwgfD0gVFJBQ0VfUkVDX1RDUyhwLT50aW1lc3RhbXBfaW4pCi0JCQl8IFRSQUNFX1JFQ19OVU1fREFUQV9BUkdTKGV4dHJhKTsKLQotCWlmIChwLT50aW1lc3RhbXBfaW4pIHsKLQkJcmVjLnUudGltZXN0YW1wLnRpbWVzdGFtcCA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZXh0cmE7IGkrKykKLQkJCXJlYy51LnRpbWVzdGFtcC5leHRyYV91MzJbaV0gPSB2YV9hcmcoKmFyZ3MsIHUzMik7Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IGV4dHJhOyBpKyspCi0JCQlyZWMudS5ub3RpbWVzdGFtcC5leHRyYV91MzJbaV0gPSB2YV9hcmcoKmFyZ3MsIHUzMik7Ci0JfQotCi0Jc2l6ZSA9IGNhbGNfcmVjX3NpemUocC0+dGltZXN0YW1wX2luLCBleHRyYSAqIHNpemVvZih1MzIpKTsKLQlyZWxheV93cml0ZShrdC0+cmNoYW4sICZyZWMsIHNpemUpOwotfQotCi1zdGF0aWMgc3RydWN0IGt2bV90cmFjZV9wcm9iZSBrdm1fdHJhY2VfcHJvYmVzW10gPSB7Ci0JeyAia3ZtX3RyYWNlX2VudHJ5ZXhpdCIsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIDEsIGt2bV9hZGRfdHJhY2UgfSwKLQl7ICJrdm1fdHJhY2VfaGFuZGxlciIsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIDAsIGt2bV9hZGRfdHJhY2UgfSwKLX07Ci0KLXN0YXRpYyBpbnQgbG9zdF9yZWNvcmRzX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKLXsKLQlzdHJ1Y3Qga3ZtX3RyYWNlICprdCA9IGRhdGE7Ci0KLQkqdmFsID0gYXRvbWljX3JlYWQoJmt0LT5sb3N0X3JlY29yZHMpOwotCXJldHVybiAwOwotfQotCi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShrdm1fdHJhY2VfbG9zdF9vcHMsIGxvc3RfcmVjb3Jkc19nZXQsIE5VTEwsICIlbGx1XG4iKTsKLQotLyoKLSAqICBUaGUgcmVsYXkgY2hhbm5lbCBpcyB1c2VkIGluICJuby1vdmVyd3JpdGUiIG1vZGUsIGl0IGtlZXBzIHRyYWNlIG9mIGhvdwotICogIG1hbnkgdGltZXMgd2UgZW5jb3VudGVyZWQgYSBmdWxsIHN1YmJ1ZmZlciwgdG8gdGVsbCB1c2VyIHNwYWNlIGFwcCB0aGUKLSAqICBsb3N0IHJlY29yZHMgdGhlcmUgd2VyZS4KLSAqLwotc3RhdGljIGludCBrdm1fc3ViYnVmX3N0YXJ0X2NhbGxiYWNrKHN0cnVjdCByY2hhbl9idWYgKmJ1Ziwgdm9pZCAqc3ViYnVmLAotCQkJCSAgICAgdm9pZCAqcHJldl9zdWJidWYsIHNpemVfdCBwcmV2X3BhZGRpbmcpCi17Ci0Jc3RydWN0IGt2bV90cmFjZSAqa3Q7Ci0KLQlpZiAoIXJlbGF5X2J1Zl9mdWxsKGJ1ZikpIHsKLQkJaWYgKCFwcmV2X3N1YmJ1ZikgewotCQkJLyoKLQkJCSAqIGV4ZWN1dGVkIG9ubHkgb25jZSB3aGVuIHRoZSBjaGFubmVsIGlzIG9wZW5lZAotCQkJICogc2F2ZSBtZXRhZGF0YSBhcyBmaXJzdCByZWNvcmQKLQkJCSAqLwotCQkJc3ViYnVmX3N0YXJ0X3Jlc2VydmUoYnVmLCBzaXplb2YodTMyKSk7Ci0JCQkqKHUzMiAqKXN1YmJ1ZiA9IDB4MTIzNDU2Nzg7Ci0JCX0KLQotCQlyZXR1cm4gMTsKLQl9Ci0KLQlrdCA9IGJ1Zi0+Y2hhbi0+cHJpdmF0ZV9kYXRhOwotCWF0b21pY19pbmMoJmt0LT5sb3N0X3JlY29yZHMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICprdm1fY3JlYXRlX2J1Zl9maWxlX2NhbGxhY2soY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJCQkgc3RydWN0IGRlbnRyeSAqcGFyZW50LAotCQkJCQkJIGludCBtb2RlLAotCQkJCQkJIHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKLQkJCQkJCSBpbnQgKmlzX2dsb2JhbCkKLXsKLQlyZXR1cm4gZGVidWdmc19jcmVhdGVfZmlsZShmaWxlbmFtZSwgbW9kZSwgcGFyZW50LCBidWYsCi0JCQkJICAgJnJlbGF5X2ZpbGVfb3BlcmF0aW9ucyk7Ci19Ci0KLXN0YXRpYyBpbnQga3ZtX3JlbW92ZV9idWZfZmlsZV9jYWxsYmFjayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JZGVidWdmc19yZW1vdmUoZGVudHJ5KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCByY2hhbl9jYWxsYmFja3Mga3ZtX3JlbGF5X2NhbGxiYWNrcyA9IHsKLQkuc3ViYnVmX3N0YXJ0IAkJPSBrdm1fc3ViYnVmX3N0YXJ0X2NhbGxiYWNrLAotCS5jcmVhdGVfYnVmX2ZpbGUgCT0ga3ZtX2NyZWF0ZV9idWZfZmlsZV9jYWxsYWNrLAotCS5yZW1vdmVfYnVmX2ZpbGUgCT0ga3ZtX3JlbW92ZV9idWZfZmlsZV9jYWxsYmFjaywKLX07Ci0KLXN0YXRpYyBpbnQgZG9fa3ZtX3RyYWNlX2VuYWJsZShzdHJ1Y3Qga3ZtX3VzZXJfdHJhY2Vfc2V0dXAgKmt1dHMpCi17Ci0Jc3RydWN0IGt2bV90cmFjZSAqa3Q7Ci0JaW50IGksIHIgPSAtRU5PTUVNOwotCi0JaWYgKCFrdXRzLT5idWZfc2l6ZSB8fCAha3V0cy0+YnVmX25yKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWt0ID0ga3phbGxvYyhzaXplb2YoKmt0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFrdCkKLQkJZ290byBlcnI7Ci0KLQlyID0gLUVJTzsKLQlhdG9taWNfc2V0KCZrdC0+bG9zdF9yZWNvcmRzLCAwKTsKLQlrdC0+bG9zdF9maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgibG9zdF9yZWNvcmRzIiwgMDQ0NCwga3ZtX2RlYnVnZnNfZGlyLAotCQkJCQkgICAga3QsICZrdm1fdHJhY2VfbG9zdF9vcHMpOwotCWlmICgha3QtPmxvc3RfZmlsZSkKLQkJZ290byBlcnI7Ci0KLQlrdC0+cmNoYW4gPSByZWxheV9vcGVuKCJ0cmFjZSIsIGt2bV9kZWJ1Z2ZzX2Rpciwga3V0cy0+YnVmX3NpemUsCi0JCQkJa3V0cy0+YnVmX25yLCAma3ZtX3JlbGF5X2NhbGxiYWNrcywga3QpOwotCWlmICgha3QtPnJjaGFuKQotCQlnb3RvIGVycjsKLQotCWt2bV90cmFjZSA9IGt0OwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoa3ZtX3RyYWNlX3Byb2Jlcyk7IGkrKykgewotCQlzdHJ1Y3Qga3ZtX3RyYWNlX3Byb2JlICpwID0gJmt2bV90cmFjZV9wcm9iZXNbaV07Ci0KLQkJciA9IG1hcmtlcl9wcm9iZV9yZWdpc3RlcihwLT5uYW1lLCBwLT5mb3JtYXQsIHAtPnByb2JlX2Z1bmMsIHApOwotCQlpZiAocikKLQkJCXByaW50ayhLRVJOX0lORk8gIlVuYWJsZSB0byByZWdpc3RlciBwcm9iZSAlc1xuIiwKLQkJCSAgICAgICBwLT5uYW1lKTsKLQl9Ci0KLQlrdm1fdHJhY2UtPnRyYWNlX3N0YXRlID0gS1ZNX1RSQUNFX1NUQVRFX1JVTk5JTkc7Ci0KLQlyZXR1cm4gMDsKLWVycjoKLQlpZiAoa3QpIHsKLQkJaWYgKGt0LT5sb3N0X2ZpbGUpCi0JCQlkZWJ1Z2ZzX3JlbW92ZShrdC0+bG9zdF9maWxlKTsKLQkJaWYgKGt0LT5yY2hhbikKLQkJCXJlbGF5X2Nsb3NlKGt0LT5yY2hhbik7Ci0JCWtmcmVlKGt0KTsKLQl9Ci0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBpbnQga3ZtX3RyYWNlX2VuYWJsZShjaGFyIF9fdXNlciAqYXJnKQotewotCXN0cnVjdCBrdm1fdXNlcl90cmFjZV9zZXR1cCBrdXRzOwotCWludCByZXQ7Ci0KLQlyZXQgPSBjb3B5X2Zyb21fdXNlcigma3V0cywgYXJnLCBzaXplb2Yoa3V0cykpOwotCWlmIChyZXQpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0ID0gZG9fa3ZtX3RyYWNlX2VuYWJsZSgma3V0cyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGt2bV90cmFjZV9wYXVzZSh2b2lkKQotewotCXN0cnVjdCBrdm1fdHJhY2UgKmt0ID0ga3ZtX3RyYWNlOwotCWludCByID0gLUVJTlZBTDsKLQotCWlmIChrdCA9PSBOVUxMKQotCQlyZXR1cm4gcjsKLQotCWlmIChrdC0+dHJhY2Vfc3RhdGUgPT0gS1ZNX1RSQUNFX1NUQVRFX1JVTk5JTkcpIHsKLQkJa3QtPnRyYWNlX3N0YXRlID0gS1ZNX1RSQUNFX1NUQVRFX1BBVVNFOwotCQlyZWxheV9mbHVzaChrdC0+cmNoYW4pOwotCQlyID0gMDsKLQl9Ci0KLQlyZXR1cm4gcjsKLX0KLQotdm9pZCBrdm1fdHJhY2VfY2xlYW51cCh2b2lkKQotewotCXN0cnVjdCBrdm1fdHJhY2UgKmt0ID0ga3ZtX3RyYWNlOwotCWludCBpOwotCi0JaWYgKGt0ID09IE5VTEwpCi0JCXJldHVybjsKLQotCWlmIChrdC0+dHJhY2Vfc3RhdGUgPT0gS1ZNX1RSQUNFX1NUQVRFX1JVTk5JTkcgfHwKLQkgICAga3QtPnRyYWNlX3N0YXRlID09IEtWTV9UUkFDRV9TVEFURV9QQVVTRSkgewotCi0JCWt0LT50cmFjZV9zdGF0ZSA9IEtWTV9UUkFDRV9TVEFURV9DTEVBUlVQOwotCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGt2bV90cmFjZV9wcm9iZXMpOyBpKyspIHsKLQkJCXN0cnVjdCBrdm1fdHJhY2VfcHJvYmUgKnAgPSAma3ZtX3RyYWNlX3Byb2Jlc1tpXTsKLQkJCW1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKHAtPm5hbWUsIHAtPnByb2JlX2Z1bmMsIHApOwotCQl9Ci0JCW1hcmtlcl9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7Ci0KLQkJcmVsYXlfY2xvc2Uoa3QtPnJjaGFuKTsKLQkJZGVidWdmc19yZW1vdmUoa3QtPmxvc3RfZmlsZSk7Ci0JCWtmcmVlKGt0KTsKLQl9Ci19Ci0KLWludCBrdm1fdHJhY2VfaW9jdGwodW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQlsb25nIHIgPSAtRUlOVkFMOwotCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0Jc3dpdGNoIChpb2N0bCkgewotCWNhc2UgS1ZNX1RSQUNFX0VOQUJMRToKLQkJciA9IGt2bV90cmFjZV9lbmFibGUoYXJncCk7Ci0JCWJyZWFrOwotCWNhc2UgS1ZNX1RSQUNFX1BBVVNFOgotCQlyID0ga3ZtX3RyYWNlX3BhdXNlKCk7Ci0JCWJyZWFrOwotCWNhc2UgS1ZNX1RSQUNFX0RJU0FCTEU6Ci0JCXIgPSAwOwotCQlrdm1fdHJhY2VfY2xlYW51cCgpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcjsKLX0K